ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggZGZhYjEyZi4uZWJhOWJmOSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTY2LDYgKzY2LDcgQEAKIEtvdXNoaWsgPHJhZ2hhdmVuZHJhLmtvdXNoaWtAbmV0ZXJpb24uY29tPgogTGVvbmlkIEkgQW5hbmlldiA8bGVvbmlkLmkuYW5hbmlldkBpbnRlbC5jb20+CiBMaW5hcyBWZXBzdGFzIDxsaW5hc0BhdXN0aW4uaWJtLmNvbT4KK01hcmsgQnJvd24gPGJyb29uaWVAc2lyZW5hLm9yZy51az4KIE1hdHRoaWV1IENBU1RFVCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGM2MmRjYjMuLmI1MGRiMTcgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtNTk4LDYgKzU5OCwxMSBAQAogUzogVGFpd2FuIDI1MQogUzogUmVwdWJsaWMgb2YgQ2hpbmEKIAorTjogUmVpbmV0dGUgQ2hhdHJlCitFOiByZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29tCitEOiBXaU1lZGlhIExpbmsgUHJvdG9jb2wgaW1wbGVtZW50YXRpb24KK0Q6IFVXQiBzdGFjayBiaXRzIGFuZCBwaWVjZXMKKwogTjogTWljaGFlbCBFbGl6YWJldGggQ2hhc3RhaW4KIEU6IG1lY0BzaG91dC5uZXQKIEQ6IENvbmZpZ3VyZSwgTWVudWNvbmZpZywgeGNvbmZpZwpAQCAtMTY1MywxNCArMTY1OCwxNCBAQAogUzogVVNBCiAKIE46IERhdmUgSm9uZXMKLUU6IGRhdmVqQGNvZGVtb25rZXkub3JnLnVrCitFOiBkYXZlakByZWRoYXQuY29tCiBXOiBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrCi1EOiB4ODYgZXJyYXRhL3NldHVwIG1haW50ZW5hbmNlLgotRDogQUdQR0FSVCBkcml2ZXIuCitEOiBBc3NvcnRlZCBWSUEgeDg2IHN1cHBvcnQuCitEOiAyLjUgQUdQR0FSVCBvdmVyaGF1bC4KIEQ6IENQVUZSRVEgbWFpbnRlbmFuY2UuCi1EOiBCYWNrcG9ydC9Gb3J3YXJkcG9ydCBtZXJnZSBtb25rZXkuCi1EOiBWYXJpb3VzIEphbml0b3Igd29yay4KLVM6IFVuaXRlZCBLaW5nZG9tCitEOiBGZWRvcmEga2VybmVsIG1haW50YWluZW5jZS4KK0Q6IE1pc2MvT3RoZXIuCitTOiAzMTQgTGl0dGxldG9uIFJkLCBXZXN0Zm9yZCwgTUEgMDE4ODYsIFVTQQogCiBOOiBNYXJ0aW4gSm9zZnNzb24KIEU6IGdhbmRhbGZAd2x1Zy53ZXN0Ym8uc2UKQEAgLTI2OTUsNiArMjcwMCwxMiBAQAogUzogVHVsYSAzMDAwMDAKIFM6IFJ1c3NpYQogCitOOiBJbmFreSBQZXJlei1Hb256YWxlegorRTogaW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tCitEOiBVV0Igc3RhY2ssIEhXQS1SQyBkcml2ZXIgYW5kIEhXQS1IQyBkcml2ZXJzCitEOiBXaXJlbGVzcyBVU0IgYWRkaXRpb25zIHRvIHRoZSBVU0Igc3RhY2sKK0Q6IFdpTWVkaWEgTGluayBQcm90b2NvbCBiaXRzIGFuZCBwaWVjZXMKKwogTjogR29yZG9uIFBldGVycwogRTogR29yZFBldGVyc0BzbWFydHRlY2guY29tCiBEOiBJc29jaHJvbm91cyByZWNlaXZlIGZvciBJRUVFIDEzOTQgZHJpdmVyIChPSENJIG1vZHVsZSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZHJpdmVyLXVzYi11c2J0bWMgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZHJpdmVyLXVzYi11c2J0bWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3NWZiMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kcml2ZXItdXNiLXVzYnRtYwpAQCAtMCwwICsxLDYyIEBACitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi9kZXZpY2VfY2FwYWJpbGl0aWVzCitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhlc2UgZmlsZXMgc2hvdyB0aGUgdmFyaW91cyBVU0IgVE1DIGNhcGFiaWxpdGllcyBhcyBkZXNjcmliZWQKKwkJYnkgdGhlIGRldmljZSBpdHNlbGYuICBUaGUgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgYml0ZmllbGRzCisJCWNhbiBiZSBmb3VuZCBpbiB0aGUgVVNCIFRNQyBkb2N1bWVudHMgZnJvbSB0aGUgVVNCLUlGIGVudGl0bGVkCisJCSJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyBTcGVjaWZpY2F0aW9uCisJCShVU0JUTUMpIFJldmlzaW9uIDEuMCIgc2VjdGlvbiA0LjIuMS44LgorCisJCVRoZSBmaWxlcyBhcmUgcmVhZCBvbmx5LgorCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL3VzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi91c2I0ODhfZGV2aWNlX2NhcGFiaWxpdGllcworRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoZXNlIGZpbGVzIHNob3cgdGhlIHZhcmlvdXMgVVNCIFRNQyBjYXBhYmlsaXRpZXMgYXMgZGVzY3JpYmVkCisJCWJ5IHRoZSBkZXZpY2UgaXRzZWxmLiAgVGhlIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGJpdGZpZWxkcworCQljYW4gYmUgZm91bmQgaW4gdGhlIFVTQiBUTUMgZG9jdW1lbnRzIGZyb20gdGhlIFVTQi1JRiBlbnRpdGxlZAorCQkiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3MsIFN1YmNsYXNzCisJCVVTQjQ4OCBTcGVjaWZpY2F0aW9uIChVU0JUTUMtVVNCNDg4KSBSZXZpc2lvbiAxLjAiIHNlY3Rpb24KKwkJNC4yLjIuCisKKwkJVGhlIGZpbGVzIGFyZSByZWFkIG9ubHkuCisKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovVGVybUNoYXIKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgaXMgdGhlIFRlcm1DaGFyIHZhbHVlIHRvIGJlIHNlbnQgdG8gdGhlIFVTQiBUTUMKKwkJZGV2aWNlIGFzIGRlc2NyaWJlZCBieSB0aGUgZG9jdW1lbnQsICJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBUZXN0CisJCWFuZCBNZWFzdXJlbWVudCBDbGFzcyBTcGVjaWZpY2F0aW9uCisJCShVU0JUTUMpIFJldmlzaW9uIDEuMCIgYXMgcHVibGlzaGVkIGJ5IHRoZSBVU0ItSUYuCisKKwkJTm90ZSB0aGF0IHRoZSBUZXJtQ2hhckVuYWJsZWQgZmlsZSBkZXRlcm1pbmVzIGlmIHRoaXMgdmFsdWUgaXMKKwkJc2VudCB0byB0aGUgZGV2aWNlIG9yIG5vdC4KKworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi9UZXJtQ2hhckVuYWJsZWQKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgZGV0ZXJtaW5lcyBpZiB0aGUgVGVybUNoYXIgaXMgdG8gYmUgc2VudCB0byB0aGUKKwkJZGV2aWNlIG9uIGV2ZXJ5IHRyYW5zYWN0aW9uIG9yIG5vdC4gIEZvciBtb3JlIGRldGFpbHMgYWJvdXQKKwkJdGhpcywgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQsICJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBUZXN0IGFuZAorCQlNZWFzdXJlbWVudCBDbGFzcyBTcGVjaWZpY2F0aW9uIChVU0JUTUMpIFJldmlzaW9uIDEuMCIgYXMKKwkJcHVibGlzaGVkIGJ5IHRoZSBVU0ItSUYuCisKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovYXV0b19hYm9ydAorRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBkZXRlcm1pbmVzIGlmIHRoZSB0aGUgdHJhbnNhY3Rpb24gb2YgdGhlIFVTQiBUTUMKKwkJZGV2aWNlIGlzIHRvIGJlIGF1dG9tYXRpY2FsbHkgYWJvcnRlZCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IuCisJCUZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhpcywgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQsCisJCSJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyBTcGVjaWZpY2F0aW9uCisJCShVU0JUTUMpIFJldmlzaW9uIDEuMCIgYXMgcHVibGlzaGVkIGJ5IHRoZSBVU0ItSUYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11bWMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11bWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ4ZmVjNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVtYwpAQCAtMCwwICsxLDI4IEBACitXaGF0OiAgICAgICAgICAgL3N5cy9idXMvdW1jLworRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBUaGUgV2lyZWxlc3MgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoV0hDSSkKKyAgICAgICAgICAgICAgICBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlcyBhIFBDSS1iYXNlZCBkZXZpY2Ugd2l0aAorICAgICAgICAgICAgICAgIG11bHRpcGxlIGNhcGFiaWxpdGllczsgdGhlIFVXQiBNdWx0aS1pbnRlcmZhY2UKKyAgICAgICAgICAgICAgICBDb250cm9sbGVyIChVTUMpLgorCisgICAgICAgICAgICAgICAgVGhlIHVtYyBidXMgcHJlc2VudHMgZWFjaCBvZiB0aGUgaW5kaXZpZHVhbAorICAgICAgICAgICAgICAgIGNhcGFiaWx0aWVzIGFzIGEgZGV2aWNlLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9idXMvdW1jL2RldmljZXMvLi4uL2NhcGFiaWxpdHlfaWQKK0RhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKK0tlcm5lbFZlcnNpb246ICAyLjYuMjcKK0NvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgVGhlIElEIG9mIHRoaXMgY2FwYWJpbGl0eSwgd2l0aCAwIGJlaW5nIHRoZSByYWRpbworICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgY2FwYWJpbGl0eS4KKworV2hhdDogICAgICAgICAgIC9zeXMvYnVzL3VtYy9kZXZpY2VzLy4uLi92ZXJzaW9uCitEYXRlOiAgICAgICAgICAgSnVseSAyMDA4CitLZXJuZWxWZXJzaW9uOiAgMi42LjI3CitDb250YWN0OiAgICAgICAgRGF2aWQgVnJhYmVsIDxkYXZpZC52cmFiZWxAY3NyLmNvbT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIHZlcnNpb24gdGhpcyBjYXBhYmlsaXR5J3MgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2UgY29tcGxpZXMgd2l0aC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgppbmRleCAxMWEzYzE2Li43NzcyOTI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCkBAIC04NSwzICs4NSw2MiBAQAogVXNlcnM6CiAJCVBvd2VyVE9QIDxwb3dlckBidWdob3N0Lm9yZz4KIAkJaHR0cDovL3d3dy5sZXNzd2F0dHMub3JnL3Byb2plY3RzL3Bvd2VydG9wLworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZS88YnVzbnVtPi08ZGV2bnVtPi4uLjo8Y29uZmlnIG51bT4tPGludGVyZmFjZSBudW0+L3N1cHBvcnRzX2F1dG9zdXNwZW5kCitEYXRlOgkJSmFudWFyeSAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjcKK0NvbnRhY3Q6CVNhcmFoIFNoYXJwIDxzYXJhaC5hLnNoYXJwQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIDEgaWYgdGhlIGludGVyZmFjZSBkcml2ZXIKKwkJZm9yIHRoaXMgaW50ZXJmYWNlIHN1cHBvcnRzIGF1dG9zdXNwZW5kLiAgSXQgYWxzbworCQlyZXR1cm5zIDEgaWYgbm8gZHJpdmVyIGhhcyBjbGFpbWVkIHRoaXMgaW50ZXJmYWNlLCBhcyBhbgorCQl1bmNsYWltZWQgaW50ZXJmYWNlIHdpbGwgbm90IHN0b3AgdGhlIGRldmljZSBmcm9tIGJlaW5nCisJCWF1dG9zdXNwZW5kZWQgaWYgYWxsIG90aGVyIGludGVyZmFjZSBkcml2ZXJzIGFyZSBpZGxlLgorCQlUaGUgZmlsZSByZXR1cm5zIDAgaWYgYXV0b3N1c3BlbmQgc3VwcG9ydCBoYXMgbm90IGJlZW4KKwkJYWRkZWQgdG8gdGhlIGRyaXZlci4KK1VzZXJzOgorCQlVU0IgUE0gdG9vbAorCQlnaXQ6Ly9naXQubW9ibGluLm9yZy91c2Vycy9zYXJhaC91c2ItcG0tdG9vbC8KKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2UvLi4uL2F1dGhvcml6ZWQKK0RhdGU6CQlKdWx5IDIwMDgKK0tlcm5lbFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJRGF2aWQgVnJhYmVsIDxkYXZpZC52cmFiZWxAY3NyLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlBdXRob3JpemVkIGRldmljZXMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IGRldmljZQorCQlkcml2ZXJzLCBub24tYXV0aG9yaXplZCBvbmUgYXJlIG5vdC4gIEJ5IGRlZmF1bHQsIHdpcmVkCisJCVVTQiBkZXZpY2VzIGFyZSBhdXRob3JpemVkLgorCisJCUNlcnRpZmllZCBXaXJlbGVzcyBVU0IgZGV2aWNlcyBhcmUgbm90IGF1dGhvcml6ZWQKKwkJaW5pdGlhbGx5IGFuZCBzaG91bGQgYmUgKGJ5IHdyaXRpbmcgMSkgYWZ0ZXIgdGhlCisJCWRldmljZSBoYXMgYmVlbiBhdXRoZW50aWNhdGVkLgorCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZS8uLi4vd3VzYl9jZGlkCitEYXRlOgkJSnVseSAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjcKK0NvbnRhY3Q6CURhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitEZXNjcmlwdGlvbjoKKwkJRm9yIENlcnRpZmllZCBXaXJlbGVzcyBVU0IgZGV2aWNlcyBvbmx5LgorCisJCUEgZGV2aWNlcydzIENESUQsIGFzIDE2IHNwYWNlLXNlcGFyYXRlZCBoZXggb2N0ZXRzLgorCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZS8uLi4vd3VzYl9jaworRGF0ZToJCUp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OglEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorRGVzY3JpcHRpb246CisJCUZvciBDZXJ0aWZpZWQgV2lyZWxlc3MgVVNCIGRldmljZXMgb25seS4KKworCQlXcml0ZSB0aGUgZGV2aWNlJ3MgY29ubmVjdGlvbiBrZXkgKENLKSB0byBzdGFydCB0aGUKKwkJYXV0aGVudGljYXRpb24gb2YgdGhlIGRldmljZS4gIFRoZSBDSyBpcyAxNgorCQlzcGFjZS1zZXBhcmF0ZWQgaGV4IG9jdGV0cy4KKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2UvLi4uL3d1c2JfZGlzY29ubmVjdAorRGF0ZToJCUp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OglEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorRGVzY3JpcHRpb246CisJCUZvciBDZXJ0aWZpZWQgV2lyZWxlc3MgVVNCIGRldmljZXMgb25seS4KKworCQlXcml0ZSBhIDEgdG8gZm9yY2UgdGhlIGRldmljZSB0byBkaXNjb25uZWN0CisJCShlcXVpdmFsZW50IHRvIHVucGx1Z2dpbmcgYSB3aXJlZCBVU0IgZGV2aWNlKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYi1kZXZpY2VzLXVzYnNldnNlZyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYi1kZXZpY2VzLXVzYnNldnNlZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjgzMGRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiLWRldmljZXMtdXNic2V2c2VnCkBAIC0wLDAgKzEsNDMgQEAKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9wb3dlcmVkCitEYXRlOgkJQXVndXN0IDIwMDgKK0tlcm5lbCBWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CUhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoJQ29udHJvbHMgd2hldGhlciB0aGUgZGV2aWNlJ3MgZGlzcGxheSB3aWxsIHBvd2VyZWQuCisJCUEgdmFsdWUgb2YgMCBpcyBvZmYgYW5kIGEgbm9uLXplcm8gdmFsdWUgaXMgb24uCisKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9tb2RlX21zYgorV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL21vZGVfbHNiCitEYXRlOgkJQXVndXN0IDIwMDgKK0tlcm5lbCBWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CUhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoJQ29udHJvbHMgdGhlIGRldmljZXMgZGlzcGxheSBtb2RlLgorCQlGb3IgYSA2IGNoYXJhY3RlciBkaXNwbGF5IHRoZSB2YWx1ZXMgYXJlCisJCQlNU0IgMHgwNjsgTFNCIDB4M0YsIGFuZAorCQlmb3IgYW4gOCBjaGFyYWN0ZXIgZGlzcGxheSB0aGUgdmFsdWVzIGFyZQorCQkJTVNCIDB4MDg7IExTQiAweEZGLgorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vdGV4dG1vZGUKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgd2F5IHRoZSBkZXZpY2UgaW50ZXJwcmV0cyBpdHMgdGV4dCBidWZmZXIuCisJCXJhdzoJZWFjaCBjaGFyYWN0ZXIgY29udHJvbHMgaXRzIHNlZ21lbnQgbWFudWFsbHkKKwkJaGV4OgllYWNoIGNoYXJhY3RlciBpcyBiZXR3ZWVuIDAtMTUKKwkJYXNjaWk6CWVhY2ggY2hhcmFjdGVyIGlzIGJldHdlZW4gJzAnLSc5JyBhbmQgJ0EnLSdGJy4KKworV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL3RleHQKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglUaGUgdGV4dCAob3IgZGF0YSkgZm9yIHRoZSBkZXZpY2UgdG8gZGlzcGxheQorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vZGVjaW1hbHMKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgZGVjaW1hbCBwbGFjZXMgb24gdGhlIGRldmljZS4KKwkJVG8gc2V0IHRoZSBudGggZGVjaW1hbCBwbGFjZSwgZ2l2ZSB0aGlzIGZpZWxkCisJCXRoZSB2YWx1ZSBvZiAxMCAqKiBuLiBBc3N1bWUgdGhpcyBmaWVsZCBoYXMKKwkJdGhlIHZhbHVlIGsgYW5kIGhhcyAxIG9yIG1vcmUgZGVjaW1hbCBwbGFjZXMgc2V0LAorCQl0byBzZXQgdGhlIG10aCBwbGFjZSAod2hlcmUgbSBpcyBub3QgYWxyZWFkeSBzZXQpLAorCQljaGFuZ2UgdGhpcyBmaWVsZHMgdmFsdWUgdG8gayArIDEwICoqIG0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiNjZhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CkBAIC0wLDAgKzEsMjUgQEAKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK0RhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKK0tlcm5lbFZlcnNpb246ICAyLjYuMjcKK0NvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgV3JpdGUgdGhlIENISUQgKDE2IHNwYWNlLXNlcGFyYXRlZCBoZXggb2N0ZXRzKSBmb3IgdGhpcyBob3N0IGNvbnRyb2xsZXIuCisgICAgICAgICAgICAgICAgVGhpcyBzdGFydHMgdGhlIGhvc3QgY29udHJvbGxlciwgYWxsb3dpbmcgaXQgdG8gYWNjZXB0IGNvbm5lY3Rpb24gZnJvbQorICAgICAgICAgICAgICAgIFdVU0IgZGV2aWNlcy4KKworICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBEZXZpY2VzIHRoYXQgaGF2ZW4ndCBzZW50IGEgV1VTQiBwYWNrZXQgdG8gdGhlIGhvc3QKKyAgICAgICAgICAgICAgICB3aXRoaW4gJ3d1c2JfdHJ1c3RfdGltZW91dCcgbXMgYXJlIGNvbnNpZGVyZWQgdG8gaGF2ZQorICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RlZCBhbmQgYXJlIHJlbW92ZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZgorICAgICAgICAgICAgICAgIDQwMDAgbXMgaXMgdGhlIHZhbHVlIHJlcXVpcmVkIGJ5IHRoZSBXVVNCCisgICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi4KKworICAgICAgICAgICAgICAgIFNpbmNlIHRoaXMgcmVsYXRlcyB0byBzZWN1cml0eSAoc3BlY2lmaWNhbGx5LCB0aGUKKyAgICAgICAgICAgICAgICBsaWZldGltZSBvZiBQVEtzIGFuZCBHVEtzKSBpdCBzaG91bGQgbm90IGJlIGNoYW5nZWQKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQxOGRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMKQEAgLTAsMCArMSwxNDQgQEAKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYworRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEludGVyZmFjZXMgZm9yIFdpTWVkaWEgVWx0cmEgV2lkZWJhbmQgQ29tbW9uIFJhZGlvCisgICAgICAgICAgICAgICAgUGxhdGZvcm0gKFVXQikgcmFkaW8gY29udHJvbGxlcnMuCisKKyAgICAgICAgICAgICAgICBGYW1pbGlhcml0eSB3aXRoIHRoZSBFQ01BLTM2OCAnSGlnaCBSYXRlIFVsdHJhCisgICAgICAgICAgICAgICAgV2lkZWJhbmQgTUFDIGFuZCBQSFkgU3BlY2lmaWNhdGlvbicgaXMgYXNzdW1lZC4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL2JlYWNvbl90aW1lb3V0X21zCitEYXRlOiAgICAgICAgICAgSnVseSAyMDA4CitLZXJuZWxWZXJzaW9uOiAgMi42LjI3CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBJZiBubyBiZWFjb25zIGFyZSByZWNlaXZlZCBmcm9tIGEgZGV2aWNlIGZvciBhdCBsZWFzdAorICAgICAgICAgICAgICAgIHRoaXMgdGltZSwgdGhlIGRldmljZSB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBnb25lCisgICAgICAgICAgICAgICAgYW5kIGl0IHdpbGwgYmUgcmVtb3ZlZC4gIFRoZSBkZWZhdWx0IGlzIDMgc3VwZXJmcmFtZXMKKyAgICAgICAgICAgICAgICAofjE5NyBtcykgYXMgcmVxdWlyZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOLworRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEFuIGluZGl2aWR1YWwgVVdCIHJhZGlvIGNvbnRyb2xsZXIuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL2JlYWNvbgorRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIFdyaXRlOgorCisgICAgICAgICAgICAgICAgPGNoYW5uZWw+IFs8YnBzdCBvZmZzZXQ+XQorCisgICAgICAgICAgICAgICAgdG8gc3RhcnQgYmVhY29uaW5nIG9uIGEgc3BlY2lmaWMgY2hhbm5lbCwgb3Igc3RvcAorICAgICAgICAgICAgICAgIGJlYWNvbmluZyBpZiA8Y2hhbm5lbD4gaXMgLTEuICBWYWxpZCBjaGFubmVscyBkZXBlbmRzCisgICAgICAgICAgICAgICAgb24gdGhlIHJhZGlvIGNvbnRyb2xsZXIncyBzdXBwb3J0ZWQgYmFuZCBncm91cHMuCisKKyAgICAgICAgICAgICAgICA8YnBzdCBvZmZzZXQ+IG1heSBiZSB1c2VkIHRvIHRyeSBhbmQgam9pbiBhIHNwZWNpZmljCisgICAgICAgICAgICAgICAgYmVhY29uIGdyb3VwIGlmIG1vcmUgdGhhbiBvbmUgd2FzIGZvdW5kIGR1cmluZyBhIHNjYW4uCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3NjYW4KK0RhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKK0tlcm5lbFZlcnNpb246ICAyLjYuMjcKK0NvbnRhY3Q6ICAgICAgICBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBXcml0ZToKKworICAgICAgICAgICAgICAgIDxjaGFubmVsPiA8dHlwZT4gWzxicHN0IG9mZnNldD5dCisKKyAgICAgICAgICAgICAgICB0byBzdGFydCAob3Igc3RvcCkgc2Nhbm5pbmcgb24gYSBjaGFubmVsLiAgPHR5cGU+IGlzIG9uZSBvZjoKKyAgICAgICAgICAgICAgICAgICAgMCAtIHNjYW4KKyAgICAgICAgICAgICAgICAgICAgMSAtIHNjYW4gb3V0c2lkZSBCUAorICAgICAgICAgICAgICAgICAgICAyIC0gc2NhbiB3aGlsZSBpbmFjdGl2ZQorICAgICAgICAgICAgICAgICAgICAzIC0gc2Nhbm5pbmcgZGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgNCAtIHNjYW4gKHdpdGggc3RhcnQgdGltZSBvZiA8YnBzdCBvZmZzZXQ+KQorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy91d2JfcmMvdXdiTi9tYWNfYWRkcmVzcworRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIFRoZSBFVUktNDgsIGluIGNvbG9uLXNlcGFyYXRlZCBoZXggb2N0ZXRzLCBmb3IgdGhpcworICAgICAgICAgICAgICAgIHJhZGlvIGNvbnRyb2xsZXIuICBBIHdyaXRlIHdpbGwgY2hhbmdlIHRoZSByYWRpbworICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIncyBFVUktNDggYnV0IG9ubHkgZG8gc28gd2hpbGUgdGhlIGRldmljZSBpcworICAgICAgICAgICAgICAgIG5vdCBiZWFjb25pbmcgb3Igc2Nhbm5pbmcuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYworRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEEgc3ltbGluayB0byB0aGUgZGV2aWNlIChpZiBhbnkpIG9mIHRoZSBXVVNCIEhvc3QKKyAgICAgICAgICAgICAgICBDb250cm9sbGVyIFBBTCB1c2luZyB0aGlzIHJhZGlvIGNvbnRyb2xsZXIuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOLzxFVUktNDg+LworRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEEgbmVpZ2hib3VyIFVXQiBkZXZpY2UgdGhhdCBoYXMgZWl0aGVyIGJlZW4gZGV0ZWN0ZWQKKyAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIGEgc2NhbiBvciBpcyBhIG1lbWJlciBvZiB0aGUgcmFkaW8KKyAgICAgICAgICAgICAgICBjb250cm9sbGVycyBiZWFjb24gZ3JvdXAuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOLzxFVUktNDg+L0JQU1QKK0RhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKK0tlcm5lbFZlcnNpb246ICAyLjYuMjcKK0NvbnRhY3Q6ICAgICAgICBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBUaGUgdGltZSAodXNpbmcgdGhlIHJhZGlvIGNvbnRyb2xsZXJzIGludGVybmFsIDEgbXMKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCBzdXBlcmZyYW1lIHRpbWVyKSBvZiB0aGUgbGFzdCBiZWFjb24gZnJvbQorICAgICAgICAgICAgICAgIHRoaXMgZGV2aWNlIHdhcyByZWNlaXZlZC4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vPEVVSS00OD4vRGV2QWRkcgorRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIFRoZSBjdXJyZW50IERldkFkZHIgb2YgdGhpcyBkZXZpY2UgaW4gY29sb24gc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgaGV4IG9jdGV0cy4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vPEVVSS00OD4vRVVJXzQ4CitEYXRlOiAgICAgICAgICAgSnVseSAyMDA4CitLZXJuZWxWZXJzaW9uOiAgMi42LjI3CitDb250YWN0OiAgICAgICAgbGludXgtdXNiQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisKKyAgICAgICAgICAgICAgICBUaGUgRVVJLTQ4IG9mIHRoaXMgZGV2aWNlIGluIGNvbG9uIHNlcGFyYXRlZCBoZXgKKyAgICAgICAgICAgICAgICBvY3RldHMuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOLzxFVUktNDg+L0JQU1QKK0RhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKK0tlcm5lbFZlcnNpb246ICAyLjYuMjcKK0NvbnRhY3Q6ICAgICAgICBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vPEVVSS00OD4vSUVzCitEYXRlOiAgICAgICAgICAgSnVseSAyMDA4CitLZXJuZWxWZXJzaW9uOiAgMi42LjI3CitDb250YWN0OiAgICAgICAgbGludXgtdXNiQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgVGhlIGxhdGVzdCBJRXMgaW5jbHVkZWQgaW4gdGhpcyBkZXZpY2UncyBiZWFjb24sIGluCisgICAgICAgICAgICAgICAgc3BhY2Ugc2VwYXJhdGVkIGhleCBvY3RldHMgd2l0aCBvbmUgSUUgcGVyIGxpbmUuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOLzxFVUktNDg+L0xRRQorRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIExpbmsgUXVhbGl0eSBFc3RpbWF0ZSAtIHRoZSBTaWduYWwgdG8gTm9pc2UgUmF0aW8KKyAgICAgICAgICAgICAgICAoU05SKSBvZiBhbGwgcGFja2V0cyByZWNlaXZlZCBmcm9tIHRoaXMgZGV2aWNlIGluIGRCLgorICAgICAgICAgICAgICAgIFRoaXMgZ2l2ZXMgYW4gZXN0aW1hdGUgb24gYSBzdWl0YWJsZSBQSFkgcmF0ZS4gUmVmZXIKKyAgICAgICAgICAgICAgICB0byBbRUNNQS0zNjhdIHNlY3Rpb24gMTMuMyBmb3IgbW9yZSBkZXRhaWxzLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy91d2JfcmMvdXdiTi88RVVJLTQ4Pi9SU1NJCitEYXRlOiAgICAgICAgICAgSnVseSAyMDA4CitLZXJuZWxWZXJzaW9uOiAgMi42LjI3CitDb250YWN0OiAgICAgICAgbGludXgtdXNiQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgUmVjZWl2ZWQgU2lnbmFsIFN0cmVuZ3RoIEluZGljYXRpb24gLSB0aGUgc3RyZW5ndGggb2YKKyAgICAgICAgICAgICAgICB0aGUgcmVjZWl2ZWQgc2lnbmFsIGluIGRCLiAgTFFFIGlzIGEgbW9yZSB1c2VmdWwKKyAgICAgICAgICAgICAgICBtZWFzdXJlIG9mIHRoZSByYWRpbyBsaW5rIHF1YWxpdHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXd1c2JfY2JhZiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtd3VzYl9jYmFmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OWM1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXd1c2JfY2JhZgpAQCAtMCwwICsxLDEwMCBAQAorV2hhdDogICAgICAgICAgIC9zeXMvYnVzL3VzYi9kcml2ZXJzL3d1c2JfY2JhZi8uLi4vd3VzYl8qCitEYXRlOiAgICAgICAgICAgQXVndXN0IDIwMDgKK0tlcm5lbFZlcnNpb246ICAyLjYuMjcKK0NvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgVmFyaW91cyBmaWxlcyBmb3IgbWFuYWdpbmcgQ2FibGUgQmFzZWQgQXNzb2NpYXRpb24gb2YKKyAgICAgICAgICAgICAgICAod2lyZWxlc3MpIFVTQiBkZXZpY2VzLgorCisgICAgICAgICAgICAgICAgVGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgc2hvdWxkIGJlOgorCisgICAgICAgICAgICAgICAgMS4gRGV2aWNlIGlzIHBsdWdnZWQgaW4uCisKKyAgICAgICAgICAgICAgICAyLiBUaGUgY29ubmVjdGlvbiBtYW5hZ2VyIChDTSkgc2VlcyBhIGRldmljZSB3aXRoIENCQSBjYXBhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICh0aGUgd3VzYl9jaGlkIGV0Yy4gZmlsZXMgaW4gL3N5cy9kZXZpY2VzL2JsYWgvT1VSREVWSUNFKS4KKworICAgICAgICAgICAgICAgIDMuIFRoZSBDTSB3cml0ZXMgdGhlIGhvc3QgbmFtZSwgc3VwcG9ydGVkIGJhbmQgZ3JvdXBzLAorICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgQ0hJRCAoaG9zdCBJRCkgaW50byB0aGUgd3VzYl9ob3N0X25hbWUsCisgICAgICAgICAgICAgICAgICAgd3VzYl9ob3N0X2JhbmRfZ3JvdXBzIGFuZCB3dXNiX2NoaWQgZmlsZXMuIFRoZXNlCisgICAgICAgICAgICAgICAgICAgZ2V0IHNlbnQgdG8gdGhlIGRldmljZSBhbmQgdGhlIENESUQgKGlmIGFueSkgZm9yCisgICAgICAgICAgICAgICAgICAgdGhpcyBob3N0IGlzIHJlcXVlc3RlZC4KKworICAgICAgICAgICAgICAgIDQuIFRoZSBDTSBjYW4gdmVyaWZ5IHRoYXQgdGhlIGRldmljZSdzIHN1cHBvcnRlZCBiYW5kCisgICAgICAgICAgICAgICAgICAgZ3JvdXBzICh3dXNiX2RldmljZV9iYW5kX2dyb3VwcykgYXJlIGNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBob3N0LgorCisgICAgICAgICAgICAgICAgNS4gVGhlIENNIHJlYWRzIHRoZSB3dXNiX2NkaWQgZmlsZS4KKworICAgICAgICAgICAgICAgIDYuIFRoZSBDTSBsb29rcyBpdCB1cCBpdHMgZGF0YWJhc2UuCisKKyAgICAgICAgICAgICAgICAgICAtIElmIGl0IGhhcyBhIG1hdGNoaW5nIENISUQsQ0RJRCBlbnRyeSwgdGhlIGRldmljZQorICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gYXV0aG9yaXplZCBiZWZvcmUgYW5kIG5vdGhpbmcgZnVydGhlcgorICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gYmUgZG9uZS4KKworICAgICAgICAgICAgICAgICAgIC0gSWYgdGhlIENESUQgaXMgemVybyAob3IgdGhlIENNIGRvZXNuJ3QgZmluZCBhCisgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZyBDRElEIGluIGl0cyBkYXRhYmFzZSksIHRoZSBkZXZpY2UgaXMKKyAgICAgICAgICAgICAgICAgICAgIGFzc3VtZWQgdG8gYmUgbm90IGtub3duLiAgVGhlIENNIG1heSBhc3NvY2lhdGUKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0IHdpdGggZGV2aWNlIGJ5OiB3cml0aW5nIGEgcmFuZG9tbHkKKyAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBDRElEIHRvIHd1c2JfY2RpZCBhbmQgdGhlbiBhIHJhbmRvbSBDSworICAgICAgICAgICAgICAgICAgICAgdG8gd3VzYl9jayAodGhpcyB1cGxvYWRzIHRoZSBuZXcgQ0MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICBkZXZpY2UpLgorCisgICAgICAgICAgICAgICAgICAgICBDTUQgbWF5IGNob29zZSB0byBwcm9tcHQgdGhlIHVzZXIgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGluZyB3aXRoIGEgbmV3IGRldmljZS4KKworICAgICAgICAgICAgICAgIDcuIERldmljZSBpcyB1bnBsdWdnZWQuCisKKyAgICAgICAgICAgICAgICBSZWZlcmVuY2VzOgorICAgICAgICAgICAgICAgICAgW1dVU0ItQU1dIEFzc29jaWF0aW9uIE1vZGVscyBTdXBwbGVtZW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlcnRpZmllZCBXaXJlbGVzcyBVbml2ZXJzYWwgU2VyaWFsIEJ1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmljYXRpb24sIHZlcnNpb24gMS4wLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9idXMvdXNiL2RyaXZlcnMvd3VzYl9jYmFmLy4uLi93dXNiX2NoaWQKK0RhdGU6ICAgICAgICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBUaGUgQ0hJRCBvZiB0aGUgaG9zdCBmb3JtYXR0ZWQgYXMgMTYgc3BhY2Utc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgaGV4IG9jdGV0cy4KKworICAgICAgICAgICAgICAgIFdyaXRlcyBmZXRjaGVzIGRldmljZSdzIHN1cHBvcnRlZCBiYW5kIGdyb3VwcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgdGhlIENESUQgZm9yIGFueSBleGlzdGluZyBhc3NvY2lhdGlvbiB3aXRoIHRoaXMgaG9zdC4KKworV2hhdDogICAgICAgICAgIC9zeXMvYnVzL3VzYi9kcml2ZXJzL3d1c2JfY2JhZi8uLi4vd3VzYl9ob3N0X25hbWUKK0RhdGU6ICAgICAgICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBBIGZyaWVuZGx5IG5hbWUgZm9yIHRoZSBob3N0IGFzIGEgVVRGLTggZW5jb2RlZCBzdHJpbmcuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2J1cy91c2IvZHJpdmVycy93dXNiX2NiYWYvLi4uL3d1c2JfaG9zdF9iYW5kX2dyb3VwcworRGF0ZTogICAgICAgICAgIEF1Z3VzdCAyMDA4CitLZXJuZWxWZXJzaW9uOiAgMi42LjI3CitDb250YWN0OiAgICAgICAgRGF2aWQgVnJhYmVsIDxkYXZpZC52cmFiZWxAY3NyLmNvbT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIFRoZSBiYW5kIGdyb3VwcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QsIGluIHRoZSBmb3JtYXQKKyAgICAgICAgICAgICAgICBkZWZpbmVkIGluIFtXVVNCLUFNXS4KKworV2hhdDogICAgICAgICAgIC9zeXMvYnVzL3VzYi9kcml2ZXJzL3d1c2JfY2JhZi8uLi4vd3VzYl9kZXZpY2VfYmFuZF9ncm91cHMKK0RhdGU6ICAgICAgICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBUaGUgYmFuZCBncm91cHMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGluIHRoZSBmb3JtYXQKKyAgICAgICAgICAgICAgICBkZWZpbmVkIGluIFtXVVNCLUFNXS4KKworV2hhdDogICAgICAgICAgIC9zeXMvYnVzL3VzYi9kcml2ZXJzL3d1c2JfY2JhZi8uLi4vd3VzYl9jZGlkCitEYXRlOiAgICAgICAgICAgQXVndXN0IDIwMDgKK0tlcm5lbFZlcnNpb246ICAyLjYuMjcKK0NvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgVGhlIGRldmljZSdzIENESUQgZm9ybWF0dGVkIGFzIDE2IHNwYWNlLXNlcGFyYXRlZCBoZXgKKyAgICAgICAgICAgICAgICBvY3RldHMuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2J1cy91c2IvZHJpdmVycy93dXNiX2NiYWYvLi4uL3d1c2JfY2sKK0RhdGU6ICAgICAgICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjogIDIuNi4yNworQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBXcml0ZSAxNiBzcGFjZS1zZXBhcmF0ZWQgcmFuZG9tLCBoZXggb2N0ZXRzIHRvCisgICAgICAgICAgICAgICAgYXNzb2NpYXRlIHdpdGggdGhlIGRldmljZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbAppbmRleCBlYTNiYzk1Li42ZWYyZjAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCkBAIC01NTcsNiArNTU3LDkgQEAKIDwvcGFyYT4KIAogIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKICFFZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKIAogPC9zZWN0MT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtaGFja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKaW5kZXggNGM2M2U1OC4uYWUxNWQ1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKQEAgLTExMDUsNyArMTEwNSw3IEBACiAgICAgPC9saXN0aXRlbT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgotICAgICAgRnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncyAoX19GVU5DVElPTl9fKS4KKyAgICAgIEZ1bmN0aW9uIG5hbWVzIGFzIHN0cmluZ3MgKF9fZnVuY19fKS4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NU0ktSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi9NU0ktSE9XVE8udHh0CmluZGV4IGE1MWY2OTMuLjI1NmRlZmQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9NU0ktSE9XVE8udHh0CkBAIC0yMzYsMTAgKzIzNiw4IEBACiBNU0ktWCBzdHJ1Y3R1cmUuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNU0kgc3VwcG9ydCByZXF1aXJlcyB0aGUgUENJCiBzdWJzeXN0ZW0sIG5vdCBhIGRldmljZSBkcml2ZXIsIHRvIG1haW50YWluIGZ1bGwgY29udHJvbCBvZiB0aGUgTVNJLVgKIHRhYmxlL01TSS1YIFBCQSAoUGVuZGluZyBCaXQgQXJyYXkpIGFuZCBNTUlPIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIE1TSS1YCi10YWJsZS9NU0ktWCBQQkEuICBBIGRldmljZSBkcml2ZXIgaXMgcHJvaGliaXRlZCBmcm9tIHJlcXVlc3RpbmcgdGhlIE1NSU8KLWFkZHJlc3Mgc3BhY2Ugb2YgdGhlIE1TSS1YIHRhYmxlL01TSS1YIFBCQS4gT3RoZXJ3aXNlLCB0aGUgUENJIHN1YnN5c3RlbQotd2lsbCBmYWlsIGVuYWJsaW5nIE1TSS1YIG9uIGl0cyBoYXJkd2FyZSBkZXZpY2Ugd2hlbiBpdCBjYWxscyB0aGUgZnVuY3Rpb24KLXBjaV9lbmFibGVfbXNpeCgpLgordGFibGUvTVNJLVggUEJBLiAgQSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYWNjZXNzIHRoZSBNTUlPIGFkZHJlc3MKK3NwYWNlIG9mIHRoZSBNU0ktWCB0YWJsZS9NU0ktWCBQQkEuCiAKIDUuMy4yIEFQSSBwY2lfZW5hYmxlX21zaXgKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL3BjaS50eHQKaW5kZXggOGQ0ZGM2Mi4uZmQ0OTA3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSS9wY2kudHh0CkBAIC0xNjMsNiArMTYzLDEwIEBACiAJbyBjbGFzcyBhbmQgY2xhc3NtYXNrIGZpZWxkcyBkZWZhdWx0IHRvIDAKIAlvIGRyaXZlcl9kYXRhIGRlZmF1bHRzIHRvIDBVTC4KIAorTm90ZSB0aGF0IGRyaXZlcl9kYXRhIG11c3QgbWF0Y2ggdGhlIHZhbHVlIHVzZWQgYnkgYW55IG9mIHRoZSBwY2lfZGV2aWNlX2lkCitlbnRyaWVzIGRlZmluZWQgaW4gdGhlIGRyaXZlci4gVGhpcyBtYWtlcyB0aGUgZHJpdmVyX2RhdGEgZmllbGQgbWFuZGF0b3J5CitpZiBhbGwgdGhlIHBjaV9kZXZpY2VfaWQgZW50cmllcyBoYXZlIGEgbm9uLXplcm8gZHJpdmVyX2RhdGEgdmFsdWUuCisKIE9uY2UgYWRkZWQsIHRoZSBkcml2ZXIgcHJvYmUgcm91dGluZSB3aWxsIGJlIGludm9rZWQgZm9yIGFueSB1bmNsYWltZWQKIFBDSSBkZXZpY2VzIGxpc3RlZCBpbiBpdHMgKG5ld2x5IHVwZGF0ZWQpIHBjaV9pZHMgbGlzdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpZWFlci1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9wY2llYWVyLWhvd3RvLnR4dAppbmRleCAxNmMyNTEyLi5kZGViMTRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9wY2llYWVyLWhvd3RvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSS9wY2llYWVyLWhvd3RvLnR4dApAQCAtMjAzLDIyICsyMDMsMTcgQEAKIAogMy4zIGhlbHBlciBmdW5jdGlvbnMKIAotMy4zLjEgaW50IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkgbG9jYXRlcyB0aGUgUENJIEV4cHJlc3MgQUVSIGNhcGFiaWxpdHkKLWluIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiBzcGFjZS4gSWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQKLVBDSS1FeHByZXNzIEFFUiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4KLQotMy4zLjIgaW50IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CiszLjMuMSBpbnQgcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZW5hYmxlcyB0aGUgZGV2aWNlIHRvIHNlbmQgZXJyb3IKIG1lc3NhZ2VzIHRvIHJvb3QgcG9ydCB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLiBOb3RlIHRoYXQgZGV2aWNlcwogZG9uJ3QgZW5hYmxlIHRoZSBlcnJvciByZXBvcnRpbmcgYnkgZGVmYXVsdCwgc28gZGV2aWNlIGRyaXZlcnMgbmVlZAogY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBpdC4KIAotMy4zLjMgaW50IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworMy4zLjIgaW50IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZGlzYWJsZXMgdGhlIGRldmljZSB0byBzZW5kIGVycm9yCiBtZXNzYWdlcyB0byByb290IHBvcnQgd2hlbiBhbiBlcnJvciBpcyBkZXRlY3RlZC4KIAotMy4zLjQgaW50IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworMy4zLjMgaW50IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMgY2xlYW51cHMgdGhlIHVuY29ycmVjdGFibGUKIGVycm9yIHN0YXR1cyByZWdpc3Rlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTBhYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dApAQCAtMCwwICsxLDk5IEBACisJVGhlIGNncm91cCBmcmVlemVyIGlzIHVzZWZ1bCB0byBiYXRjaCBqb2IgbWFuYWdlbWVudCBzeXN0ZW0gd2hpY2ggc3RhcnQKK2FuZCBzdG9wIHNldHMgb2YgdGFza3MgaW4gb3JkZXIgdG8gc2NoZWR1bGUgdGhlIHJlc291cmNlcyBvZiBhIG1hY2hpbmUKK2FjY29yZGluZyB0byB0aGUgZGVzaXJlcyBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yLiBUaGlzIHNvcnQgb2YgcHJvZ3JhbQoraXMgb2Z0ZW4gdXNlZCBvbiBIUEMgY2x1c3RlcnMgdG8gc2NoZWR1bGUgYWNjZXNzIHRvIHRoZSBjbHVzdGVyIGFzIGEKK3dob2xlLiBUaGUgY2dyb3VwIGZyZWV6ZXIgdXNlcyBjZ3JvdXBzIHRvIGRlc2NyaWJlIHRoZSBzZXQgb2YgdGFza3MgdG8KK2JlIHN0YXJ0ZWQvc3RvcHBlZCBieSB0aGUgYmF0Y2ggam9iIG1hbmFnZW1lbnQgc3lzdGVtLiBJdCBhbHNvIHByb3ZpZGVzCithIG1lYW5zIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSB0YXNrcyBjb21wb3NpbmcgdGhlIGpvYi4KKworCVRoZSBjZ3JvdXAgZnJlZXplciB3aWxsIGFsc28gYmUgdXNlZnVsIGZvciBjaGVja3BvaW50aW5nIHJ1bm5pbmcgZ3JvdXBzCitvZiB0YXNrcy4gVGhlIGZyZWV6ZXIgYWxsb3dzIHRoZSBjaGVja3BvaW50IGNvZGUgdG8gb2J0YWluIGEgY29uc2lzdGVudAoraW1hZ2Ugb2YgdGhlIHRhc2tzIGJ5IGF0dGVtcHRpbmcgdG8gZm9yY2UgdGhlIHRhc2tzIGluIGEgY2dyb3VwIGludG8gYQorcXVpZXNjZW50IHN0YXRlLiBPbmNlIHRoZSB0YXNrcyBhcmUgcXVpZXNjZW50IGFub3RoZXIgdGFzayBjYW4KK3dhbGsgL3Byb2Mgb3IgaW52b2tlIGEga2VybmVsIGludGVyZmFjZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitxdWllc2NlZCB0YXNrcy4gQ2hlY2twb2ludGVkIHRhc2tzIGNhbiBiZSByZXN0YXJ0ZWQgbGF0ZXIgc2hvdWxkIGEKK3JlY292ZXJhYmxlIGVycm9yIG9jY3VyLiBUaGlzIGFsc28gYWxsb3dzIHRoZSBjaGVja3BvaW50ZWQgdGFza3MgdG8gYmUKK21pZ3JhdGVkIGJldHdlZW4gbm9kZXMgaW4gYSBjbHVzdGVyIGJ5IGNvcHlpbmcgdGhlIGdhdGhlcmVkIGluZm9ybWF0aW9uCit0byBhbm90aGVyIG5vZGUgYW5kIHJlc3RhcnRpbmcgdGhlIHRhc2tzIHRoZXJlLgorCisJU2VxdWVuY2VzIG9mIFNJR1NUT1AgYW5kIFNJR0NPTlQgYXJlIG5vdCBhbHdheXMgc3VmZmljaWVudCBmb3Igc3RvcHBpbmcKK2FuZCByZXN1bWluZyB0YXNrcyBpbiB1c2Vyc3BhY2UuIEJvdGggb2YgdGhlc2Ugc2lnbmFscyBhcmUgb2JzZXJ2YWJsZQorZnJvbSB3aXRoaW4gdGhlIHRhc2tzIHdlIHdpc2ggdG8gZnJlZXplLiBXaGlsZSBTSUdTVE9QIGNhbm5vdCBiZSBjYXVnaHQsCitibG9ja2VkLCBvciBpZ25vcmVkIGl0IGNhbiBiZSBzZWVuIGJ5IHdhaXRpbmcgb3IgcHRyYWNpbmcgcGFyZW50IHRhc2tzLgorU0lHQ09OVCBpcyBlc3BlY2lhbGx5IHVuc3VpdGFibGUgc2luY2UgaXQgY2FuIGJlIGNhdWdodCBieSB0aGUgdGFzay4gQW55Citwcm9ncmFtcyBkZXNpZ25lZCB0byB3YXRjaCBmb3IgU0lHU1RPUCBhbmQgU0lHQ09OVCBjb3VsZCBiZSBicm9rZW4gYnkKK2F0dGVtcHRpbmcgdG8gdXNlIFNJR1NUT1AgYW5kIFNJR0NPTlQgdG8gc3RvcCBhbmQgcmVzdW1lIHRhc2tzLiBXZSBjYW4KK2RlbW9uc3RyYXRlIHRoaXMgcHJvYmxlbSB1c2luZyBuZXN0ZWQgYmFzaCBzaGVsbHM6CisKKwkkIGVjaG8gJCQKKwkxNjY0NAorCSQgYmFzaAorCSQgZWNobyAkJAorCTE2NjkwCisKKwlGcm9tIGEgc2Vjb25kLCB1bnJlbGF0ZWQgYmFzaCBzaGVsbDoKKwkkIGtpbGwgLVNJR1NUT1AgMTY2OTAKKwkkIGtpbGwgLVNJR0NPTlQgMTY5OTAKKworCTxhdCB0aGlzIHBvaW50IDE2OTkwIGV4aXRzIGFuZCBjYXVzZXMgMTY2NDQgdG8gZXhpdCB0b28+CisKKwlUaGlzIGhhcHBlbnMgYmVjYXVzZSBiYXNoIGNhbiBvYnNlcnZlIGJvdGggc2lnbmFscyBhbmQgY2hvb3NlIGhvdyBpdAorcmVzcG9uZHMgdG8gdGhlbS4KKworCUFub3RoZXIgZXhhbXBsZSBvZiBhIHByb2dyYW0gd2hpY2ggY2F0Y2hlcyBhbmQgcmVzcG9uZHMgdG8gdGhlc2UKK3NpZ25hbHMgaXMgZ2RiLiBJbiBmYWN0IGFueSBwcm9ncmFtIGRlc2lnbmVkIHRvIHVzZSBwdHJhY2UgaXMgbGlrZWx5IHRvCitoYXZlIGEgcHJvYmxlbSB3aXRoIHRoaXMgbWV0aG9kIG9mIHN0b3BwaW5nIGFuZCByZXN1bWluZyB0YXNrcy4KKworCSBJbiBjb250cmFzdCwgdGhlIGNncm91cCBmcmVlemVyIHVzZXMgdGhlIGtlcm5lbCBmcmVlemVyIGNvZGUgdG8KK3ByZXZlbnQgdGhlIGZyZWV6ZS91bmZyZWV6ZSBjeWNsZSBmcm9tIGJlY29taW5nIHZpc2libGUgdG8gdGhlIHRhc2tzCitiZWluZyBmcm96ZW4uIFRoaXMgYWxsb3dzIHRoZSBiYXNoIGV4YW1wbGUgYWJvdmUgYW5kIGdkYiB0byBydW4gYXMKK2V4cGVjdGVkLgorCisJVGhlIGZyZWV6ZXIgc3Vic3lzdGVtIGluIHRoZSBjb250YWluZXIgZmlsZXN5c3RlbSBkZWZpbmVzIGEgZmlsZSBuYW1lZAorZnJlZXplci5zdGF0ZS4gV3JpdGluZyAiRlJPWkVOIiB0byB0aGUgc3RhdGUgZmlsZSB3aWxsIGZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlCitjZ3JvdXAuIFN1YnNlcXVlbnRseSB3cml0aW5nICJUSEFXRUQiIHdpbGwgdW5mcmVlemUgdGhlIHRhc2tzIGluIHRoZSBjZ3JvdXAuCitSZWFkaW5nIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLgorCisqIEV4YW1wbGVzIG9mIHVzYWdlIDoKKworICAgIyBta2RpciAvY29udGFpbmVycy9mcmVlemVyCisgICAjIG1vdW50IC10IGNncm91cCAtb2ZyZWV6ZXIgZnJlZXplciAgL2NvbnRhaW5lcnMKKyAgICMgbWtkaXIgL2NvbnRhaW5lcnMvMAorICAgIyBlY2hvICRzb21lX3BpZCA+IC9jb250YWluZXJzLzAvdGFza3MKKwordG8gZ2V0IHN0YXR1cyBvZiB0aGUgZnJlZXplciBzdWJzeXN0ZW0gOgorCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIFRIQVdFRAorCit0byBmcmVlemUgYWxsIHRhc2tzIGluIHRoZSBjb250YWluZXIgOgorCisgICAjIGVjaG8gRlJPWkVOID4gL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIEZSRUVaSU5HCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIEZST1pFTgorCit0byB1bmZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlIGNvbnRhaW5lciA6CisKKyAgICMgZWNobyBUSEFXRUQgPiAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgVEhBV0VECisKK1RoaXMgaXMgdGhlIGJhc2ljIG1lY2hhbmlzbSB3aGljaCBzaG91bGQgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciB1c2VyIHNwYWNlIHRhc2sKK2luIGEgc2ltcGxlIHNjZW5hcmlvLgorCitJdCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgZnJlZXppbmcgY2FuIGJlIGluY29tcGxldGUuIEluIHRoYXQgY2FzZSB3ZSByZXR1cm4KK0VCVVNZLiBUaGlzIG1lYW5zIHRoYXQgc29tZSB0YXNrcyBpbiB0aGUgY2dyb3VwIGFyZSBidXN5IGRvaW5nIHNvbWV0aGluZyB0aGF0CitwcmV2ZW50cyB1cyBmcm9tIGNvbXBsZXRlbHkgZnJlZXppbmcgdGhlIGNncm91cCBhdCB0aGlzIHRpbWUuIEFmdGVyIEVCVVNZLAordGhlIGNncm91cCB3aWxsIHJlbWFpbiBwYXJ0aWFsbHkgZnJvemVuIC0tIHJlZmxlY3RlZCBieSBmcmVlemVyLnN0YXRlIHJlcG9ydGluZworIkZSRUVaSU5HIiB3aGVuIHJlYWQuIFRoZSBzdGF0ZSB3aWxsIHJlbWFpbiAiRlJFRVpJTkciIHVudGlsIG9uZSBvZiB0aGVzZQordGhpbmdzIGhhcHBlbnM6CisKKwkxKSBVc2Vyc3BhY2UgY2FuY2VscyB0aGUgZnJlZXppbmcgb3BlcmF0aW9uIGJ5IHdyaXRpbmcgIlRIQVdFRCIgdG8KKwkJdGhlIGZyZWV6ZXIuc3RhdGUgZmlsZQorCTIpIFVzZXJzcGFjZSByZXRyaWVzIHRoZSBmcmVlemluZyBvcGVyYXRpb24gYnkgd3JpdGluZyAiRlJPWkVOIiB0bworCQl0aGUgZnJlZXplci5zdGF0ZSBmaWxlICh3cml0aW5nICJGUkVFWklORyIgaXMgbm90IGxlZ2FsCisJCWFuZCByZXR1cm5zIEVJTykKKwkzKSBUaGUgdGFza3MgdGhhdCBibG9ja2VkIHRoZSBjZ3JvdXAgZnJvbSBlbnRlcmluZyB0aGUgIkZST1pFTiIKKwkJc3RhdGUgZGlzYXBwZWFyIGZyb20gdGhlIGNncm91cCdzIHNldCBvZiB0YXNrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dAppbmRleCA5YjUzZDU4Li4xYzA3NTQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbnRyb2xsZXJzL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0CkBAIC0xMTIsMTQgKzExMiwyMiBAQAogCiAyLjIuMSBBY2NvdW50aW5nIGRldGFpbHMKIAotQWxsIG1hcHBlZCBwYWdlcyAoUlNTKSBhbmQgdW5tYXBwZWQgdXNlciBwYWdlcyAoUGFnZSBDYWNoZSkgYXJlIGFjY291bnRlZC4KLVJTUyBwYWdlcyBhcmUgYWNjb3VudGVkIGF0IHRoZSB0aW1lIG9mIHBhZ2VfYWRkXypfcm1hcCgpIHVubGVzcyB0aGV5J3ZlIGFscmVhZHkKLWJlZW4gYWNjb3VudGVkIGZvciBlYXJsaWVyLiBBIGZpbGUgcGFnZSB3aWxsIGJlIGFjY291bnRlZCBmb3IgYXMgUGFnZSBDYWNoZTsKLWl0J3MgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcywgZHVwbGljYXRlIGFjY291bnRpbmcgaXMgY2FyZWZ1bGx5Ci1hdm9pZGVkLiBQYWdlIENhY2hlIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYXQgdGhlIHRpbWUgb2YgYWRkX3RvX3BhZ2VfY2FjaGUoKS4KLVRoZSBjb3JyZXNwb25kaW5nIHJvdXRpbmVzIHRoYXQgcmVtb3ZlIGEgcGFnZSBmcm9tIHRoZSBwYWdlIHRhYmxlcyBvciByZW1vdmVzCi1hIHBhZ2UgZnJvbSBQYWdlIENhY2hlIGlzIHVzZWQgdG8gZGVjcmVtZW50IHRoZSBhY2NvdW50aW5nIGNvdW50ZXJzIG9mIHRoZQotY2dyb3VwLgorQWxsIG1hcHBlZCBhbm9uIHBhZ2VzIChSU1MpIGFuZCBjYWNoZSBwYWdlcyAoUGFnZSBDYWNoZSkgYXJlIGFjY291bnRlZC4KKyhzb21lIHBhZ2VzIHdoaWNoIG5ldmVyIGJlIHJlY2xhaW1hYmxlIGFuZCB3aWxsIG5vdCBiZSBvbiBnbG9iYWwgTFJVCisgYXJlIG5vdCBhY2NvdW50ZWQuIHdlIGp1c3QgYWNjb3VudHMgcGFnZXMgdW5kZXIgdXN1YWwgdm0gbWFuYWdlbWVudC4pCisKK1JTUyBwYWdlcyBhcmUgYWNjb3VudGVkIGF0IHBhZ2VfZmF1bHQgdW5sZXNzIHRoZXkndmUgYWxyZWFkeSBiZWVuIGFjY291bnRlZAorZm9yIGVhcmxpZXIuIEEgZmlsZSBwYWdlIHdpbGwgYmUgYWNjb3VudGVkIGZvciBhcyBQYWdlIENhY2hlIHdoZW4gaXQncworaW5zZXJ0ZWQgaW50byBpbm9kZSAocmFkaXgtdHJlZSkuIFdoaWxlIGl0J3MgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mCitwcm9jZXNzZXMsIGR1cGxpY2F0ZSBhY2NvdW50aW5nIGlzIGNhcmVmdWxseSBhdm9pZGVkLgorCitBIFJTUyBwYWdlIGlzIHVuYWNjb3VudGVkIHdoZW4gaXQncyBmdWxseSB1bm1hcHBlZC4gQSBQYWdlQ2FjaGUgcGFnZSBpcwordW5hY2NvdW50ZWQgd2hlbiBpdCdzIHJlbW92ZWQgZnJvbSByYWRpeC10cmVlLgorCitBdCBwYWdlIG1pZ3JhdGlvbiwgYWNjb3VudGluZyBpbmZvcm1hdGlvbiBpcyBrZXB0LgorCitOb3RlOiB3ZSBqdXN0IGFjY291bnQgcGFnZXMtb24tbHJ1IGJlY2F1c2Ugb3VyIHB1cnBvc2UgaXMgdG8gY29udHJvbCBhbW91bnQKK29mIHVzZWQgcGFnZXMuIG5vdC1vbi1scnUgcGFnZXMgYXJlIHRlbmQgdG8gYmUgb3V0LW9mLWNvbnRyb2wgZnJvbSB2bSB2aWV3LgogCiAyLjMgU2hhcmVkIFBhZ2UgQWNjb3VudGluZwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dAppbmRleCA0N2U1NjhhLi41Yzg2YzI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKQEAgLTQ4LDcgKzQ4LDcgQEAKIGpvYiBwbGFjZW1lbnQgb24gbGFyZ2Ugc3lzdGVtcy4KIAogQ3B1c2V0cyB1c2UgdGhlIGdlbmVyaWMgY2dyb3VwIHN1YnN5c3RlbSBkZXNjcmliZWQgaW4KLURvY3VtZW50YXRpb24vY2dyb3VwLnR4dC4KK0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dC4KIAogUmVxdWVzdHMgYnkgYSB0YXNrLCB1c2luZyB0aGUgc2NoZWRfc2V0YWZmaW5pdHkoMikgc3lzdGVtIGNhbGwgdG8KIGluY2x1ZGUgQ1BVcyBpbiBpdHMgQ1BVIGFmZmluaXR5IG1hc2ssIGFuZCB1c2luZyB0aGUgbWJpbmQoMikgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAppbmRleCAwNWM4MDY0Li4yYmUwODI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTI1NzEsNiArMjU3MSw5IEBACiAJCTE2MCA9IC9kZXYvdXNiL2xlZ291c2J0b3dlcjAJMXN0IFVTQiBMZWdvdG93ZXIgZGV2aWNlCiAJCSAgICAuLi4KIAkJMTc1ID0gL2Rldi91c2IvbGVnb3VzYnRvd2VyMTUJMTZ0aCBVU0IgTGVnb3Rvd2VyIGRldmljZQorCQkxNzYgPSAvZGV2L3VzYi91c2J0bWMxCUZpcnN0IFVTQiBUTUMgZGV2aWNlCisJCSAgIC4uLgorCQkxOTIgPSAvZGV2L3VzYi91c2J0bWMxNgkxNnRoIFVTQiBUTUMgZGV2aWNlCiAJCTI0MCA9IC9kZXYvdXNiL2RhYnVzYjAJRmlyc3QgZGF1YnVzYiBkZXZpY2UKIAkJICAgIC4uLgogCQkyNDMgPSAvZGV2L3VzYi9kYWJ1c2IzCUZvdXJ0aCBkYWJ1c2IgZGV2aWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggZjVmODEyZC4uMDVkNzFiNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTM1OSwzICszNTksMTEgQEAKICAgICAgIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGlkZS1zY3NpLiBUaGUgbmV3IG1ldGhvZCBpcyBtb3JlCiAgICAgICBlZmZpY2llbnQgaW4gZXZlcnkgd2F5LgogV2hvOiAgRlVKSVRBIFRvbW9ub3JpIDxmdWppdGEudG9tb25vcmlAbGFiLm50dC5jby5qcD4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CWkyY19hdHRhY2hfY2xpZW50KCksIGkyY19kZXRhY2hfY2xpZW50KCksIGkyY19kcml2ZXItPmRldGFjaF9jbGllbnQoKQorV2hlbjoJMi42LjI5IChpZGVhbGx5KSBvciAyLjYuMzAgKG1vcmUgbGlrZWx5KQorV2h5OglEZXByZWNhdGVkIGJ5IHRoZSBuZXcgKHN0YW5kYXJkKSBkZXZpY2UgZHJpdmVyIGJpbmRpbmcgbW9kZWwuIFVzZQorCWkyY19kcml2ZXItPnByb2JlKCkgYW5kIC0+cmVtb3ZlKCkgaW5zdGVhZC4KK1dobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAppbmRleCAyOTVmMjZjLi45ZGQyYTNiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTk2LDYgKzk2LDExIEBACiBlcnJvcnM9Y29udGludWUJCUtlZXAgZ29pbmcgb24gYSBmaWxlc3lzdGVtIGVycm9yLgogZXJyb3JzPXBhbmljCQlQYW5pYyBhbmQgaGFsdCB0aGUgbWFjaGluZSBpZiBhbiBlcnJvciBvY2N1cnMuCiAKK2RhdGFfZXJyPWlnbm9yZSgqKQlKdXN0IHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzCisJCQlpbiBhIGZpbGUgZGF0YSBidWZmZXIgaW4gb3JkZXJlZCBtb2RlLgorZGF0YV9lcnI9YWJvcnQJCUFib3J0IHRoZSBqb3VybmFsIGlmIGFuIGVycm9yIG9jY3VycyBpbiBhIGZpbGUKKwkJCWRhdGEgYnVmZmVyIGluIG9yZGVyZWQgbW9kZS4KKwogZ3JwaWQJCQlHaXZlIG9iamVjdHMgdGhlIHNhbWUgZ3JvdXAgSUQgYXMgdGhlaXIgY3JlYXRvci4KIGJzZGdyb3VwcwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCBlYjE1NGVmLi4xNzRlYWZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTIsMTkgKzIsMjQgQEAKIEV4dDQgRmlsZXN5c3RlbQogPT09PT09PT09PT09PT09CiAKLVRoaXMgaXMgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIGFuIGFkdmFuY2VkIGxldmVsCi1vZiB0aGUgZXh0MyBmaWxlc3lzdGVtIHdoaWNoIGluY29ycG9yYXRlcyBzY2FsYWJpbGl0eSBhbmQgcmVsaWFiaWxpdHkKLWVuaGFuY2VtZW50cyBmb3Igc3VwcG9ydGluZyBsYXJnZSBmaWxlc3lzdGVtcyAoNjQgYml0KSBpbiBrZWVwaW5nIHdpdGgKLWluY3JlYXNpbmcgZGlzayBjYXBhY2l0aWVzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0IGZlYXR1cmUgcmVxdWlyZW1lbnRzLgorRXh0NCBpcyBhbiBhbiBhZHZhbmNlZCBsZXZlbCBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtIHdoaWNoIGluY29ycG9yYXRlcworc2NhbGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5IGVuaGFuY2VtZW50cyBmb3Igc3VwcG9ydGluZyBsYXJnZSBmaWxlc3lzdGVtcworKDY0IGJpdCkgaW4ga2VlcGluZyB3aXRoIGluY3JlYXNpbmcgZGlzayBjYXBhY2l0aWVzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0CitmZWF0dXJlIHJlcXVpcmVtZW50cy4KIAotTWFpbGluZyBsaXN0OiBsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZworTWFpbGluZyBsaXN0OglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZworV2ViIHNpdGU6CWh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZwogCiAKIDEuIFF1aWNrIHVzYWdlIGluc3RydWN0aW9uczoKID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCitOb3RlOiBNb3JlIGV4dGVuc2l2ZSBpbmZvcm1hdGlvbiBmb3IgZ2V0dGluZyBzdGFydGVkIHdpdGggZXh0NCBjYW4gYmUKKyAgICAgIGZvdW5kIGF0IHRoZSBleHQ0IHdpa2kgc2l0ZSBhdCB0aGUgVVJMOgorICAgICAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9FeHQ0X0hvd3RvCisKICAgLSBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlMmZzcHJvZ3MgKGFzIG9mIHRoaXMKLSAgICB3cml0aW5nIHZlcnNpb24gMS40MSkgZnJvbToKKyAgICB3cml0aW5nIHZlcnNpb24gMS40MS4zKSBmcm9tOgogCiAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MjQwNgogCQpAQCAtMzYsMTEgKzQxLDkgQEAKIAogICAgIAkjIG1rZTJmcyAtdCBleHQ0IC9kZXYvaGRhMQogCi0gICAgT3IgY29uZmlndXJlIGFuIGV4aXN0aW5nIGV4dDMgZmlsZXN5c3RlbSB0byBzdXBwb3J0IGV4dGVudHMgYW5kIHNldAotICAgIHRoZSB0ZXN0X2ZzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBpdCdzIG9rIGZvciBhbiBpbi1kZXZlbG9wbWVudAotICAgIGZpbGVzeXN0ZW0gdG8gdG91Y2ggdGhpcyBmaWxlc3lzdGVtOgorICAgIE9yIHRvIGNvbmZpZ3VyZSBhbiBleGlzdGluZyBleHQzIGZpbGVzeXN0ZW0gdG8gc3VwcG9ydCBleHRlbnRzOiAKIAotCSMgdHVuZTJmcyAtTyBleHRlbnRzIC1FIHRlc3RfZnMgL2Rldi9oZGExCisJIyB0dW5lMmZzIC1PIGV4dGVudHMgL2Rldi9oZGExCiAKICAgICBJZiB0aGUgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZCB3aXRoIDEyOCBieXRlIGlub2RlcywgaXQgY2FuIGJlCiAgICAgY29udmVydGVkIHRvIHVzZSAyNTYgYnl0ZSBmb3IgZ3JlYXRlciBlZmZpY2llbmN5IHZpYToKQEAgLTEwNCw4ICsxMDcsOCBAQAogVGhlIGJpZyBwZXJmb3JtYW5jZSB3aW4gd2lsbCBjb21lIHdpdGggbWJhbGxvYywgZGVsYWxsb2MgYW5kIGZsZXhfYmcKIGdyb3VwaW5nIG9mIGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlcy4gIFNvbWUgdGVzdCByZXN1bHRzIGF2YWlsYWJsZSBoZXJlOgogCi0gLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwNTMwL2Zmc2Itd3JpdGUtMi42LjI2LXJjMi5odG1sCi0gLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwNTMwL2Zmc2ItcmVhZHdyaXRlLTIuNi4yNi1yYzIuaHRtbAorIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDgxOC1mZnNiL2Zmc2Itd3JpdGUtMi42LjI3LXJjMS5odG1sCisgLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwODE4LWZmc2IvZmZzYi1yZWFkd3JpdGUtMi42LjI3LXJjMS5odG1sCiAKIDMuIE9wdGlvbnMKID09PT09PT09PT0KQEAgLTIxNCw5ICsyMTcsNiBAQAogYnNkZGYJCSgqKQlNYWtlICdkZicgYWN0IGxpa2UgQlNELgogbWluaXhkZgkJCU1ha2UgJ2RmJyBhY3QgbGlrZSBNaW5peC4KIAotY2hlY2s9bm9uZQkJRG9uJ3QgZG8gZXh0cmEgY2hlY2tpbmcgb2YgYml0bWFwcyBvbiBtb3VudC4KLW5vY2hlY2sKLQogZGVidWcJCQlFeHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgc2VudCB0byBzeXNsb2cuCiAKIGVycm9ycz1yZW1vdW50LXJvKCopCVJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9uIGFuIGVycm9yLgpAQCAtMjUzLDggKzI1Myw2IEBACiAJCQkibm9iaCIgb3B0aW9uIHRyaWVzIHRvIGF2b2lkIGFzc29jaWF0aW5nIGJ1ZmZlcgogCQkJaGVhZHMgKHN1cHBvcnRlZCBvbmx5IGZvciAid3JpdGViYWNrIiBtb2RlKS4KIAotbWJhbGxvYwkJKCopCVVzZSB0aGUgbXVsdGlwbGUgYmxvY2sgYWxsb2NhdG9yIGZvciBibG9jayBhbGxvY2F0aW9uCi1ub21iYWxsb2MJCWRpc2FibGVkIG11bHRpcGxlIGJsb2NrIGFsbG9jYXRvciBmb3IgYmxvY2sgYWxsb2NhdGlvbi4KIHN0cmlwZT1uCQlOdW1iZXIgb2YgZmlsZXN5c3RlbSBibG9ja3MgdGhhdCBtYmFsbG9jIHdpbGwgdHJ5CiAJCQl0byB1c2UgZm9yIGFsbG9jYXRpb24gc2l6ZSBhbmQgYWxpZ25tZW50LiBGb3IgUkFJRDUvNgogCQkJc3lzdGVtcyB0aGlzIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGRhdGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGMwMzJiZjMuLmJjY2ViOTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTM4NCwxNSArMTM4NCwxOCBAQAogZGlydHlfYmFja2dyb3VuZF9yYXRpbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLXRoZSBwZGZsdXNoIGJhY2tncm91bmQgd3JpdGViYWNrIGRhZW1vbiB3aWxsIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5IGRhdGEuCitDb250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkaXJ0eWFibGUgc3lzdGVtIG1lbW9yeSAoZnJlZSBwYWdlcyArIG1hcHBlZAorcGFnZXMgKyBmaWxlIGNhY2hlLCBub3QgaW5jbHVkaW5nIGxvY2tlZCBwYWdlcyBhbmQgSHVnZVBhZ2VzKSwgdGhlIG51bWJlciBvZgorcGFnZXMgYXQgd2hpY2ggdGhlIHBkZmx1c2ggYmFja2dyb3VuZCB3cml0ZWJhY2sgZGFlbW9uIHdpbGwgc3RhcnQgd3JpdGluZyBvdXQKK2RpcnR5IGRhdGEuCiAKIGRpcnR5X3JhdGlvCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLWEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5Ci1kYXRhLgorQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGlydHlhYmxlIHN5c3RlbSBtZW1vcnkgKGZyZWUgcGFnZXMgKyBtYXBwZWQKK3BhZ2VzICsgZmlsZSBjYWNoZSwgbm90IGluY2x1ZGluZyBsb2NrZWQgcGFnZXMgYW5kIEh1Z2VQYWdlcyksIHRoZSBudW1iZXIgb2YKK3BhZ2VzIGF0IHdoaWNoIGEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0Cit3cml0aW5nIG91dCBkaXJ0eSBkYXRhLgogCiBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDEyLDI0ICsyNDE1LDI5IEBACiBvZiBtZW1vcnkgdHlwZXMuIElmIGEgYml0IG9mIHRoZSBiaXRtYXNrIGlzIHNldCwgbWVtb3J5IHNlZ21lbnRzIG9mIHRoZQogY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC4KIAotVGhlIGZvbGxvd2luZyA0IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgorVGhlIGZvbGxvd2luZyA3IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogICAtIChiaXQgMCkgYW5vbnltb3VzIHByaXZhdGUgbWVtb3J5CiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeQogICAtIChiaXQgMikgZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDMpIGZpbGUtYmFja2VkIHNoYXJlZCBtZW1vcnkKICAgLSAoYml0IDQpIEVMRiBoZWFkZXIgcGFnZXMgaW4gZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkgYXJlYXMgKGl0IGlzCiAgICAgICAgICAgICBlZmZlY3RpdmUgb25seSBpZiB0aGUgYml0IDIgaXMgY2xlYXJlZCkKKyAgLSAoYml0IDUpIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkKKyAgLSAoYml0IDYpIGh1Z2V0bGIgc2hhcmVkIG1lbW9yeQogCiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXMKICAgYXJlIGFsd2F5cyBkdW1wZWQgcmVnYXJkbGVzcyBvZiB0aGUgYml0bWFzayBzdGF0dXMuCiAKLURlZmF1bHQgdmFsdWUgb2YgY29yZWR1bXBfZmlsdGVyIGlzIDB4MzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQotc2VnbWVudHMgYXJlIGR1bXBlZC4KKyAgTm90ZSBiaXQgMC00IGRvZXNuJ3QgZWZmZWN0IGFueSBodWdldGxiIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgYXJlIG9ubHkKKyAgZWZmZWN0ZWQgYnkgYml0IDUtNi4KKworRGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQorc2VnbWVudHMgYW5kIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYXJlIGR1bXBlZC4KIAogSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCwKLXdyaXRlIDEgdG8gdGhlIHByb2Nlc3MncyBwcm9jIGZpbGUuCit3cml0ZSAweDIxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlLgogCi0gICQgZWNobyAweDEgPiAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlcgorICAkIGVjaG8gMHgyMSA+IC9wcm9jLzEyMzQvY29yZWR1bXBfZmlsdGVyCiAKIFdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkLCB0aGUgcHJvY2VzcyBpbmhlcml0cyB0aGUgYml0bWFzayBzdGF0dXMgZnJvbSBpdHMKIHBhcmVudC4gSXQgaXMgdXNlZnVsIHRvIHNldCB1cCBjb3JlZHVtcF9maWx0ZXIgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ViaWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CmluZGV4IDZhMGQ3MGEuLmRkODRlYTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CkBAIC04Niw2ICs4NiwxNSBAQAogZmFzdF91bm1vdW50CQlkbyBub3QgY29tbWl0IG9uIHVubW91bnQ7IHRoaXMgb3B0aW9uIG1ha2VzCiAJCQl1bm1vdW50IGZhc3RlciwgYnV0IHRoZSBuZXh0IG1vdW50IHNsb3dlcgogCQkJYmVjYXVzZSBvZiB0aGUgbmVlZCB0byByZXBsYXkgdGhlIGpvdXJuYWwuCitidWxrX3JlYWQJCXJlYWQgbW9yZSBpbiBvbmUgZ28gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgZmxhc2gKKwkJCW1lZGlhIHRoYXQgcmVhZCBmYXN0ZXIgc2VxdWVudGlhbGx5Citub19idWxrX3JlYWQgKCopCWRvIG5vdCBidWxrLXJlYWQKK25vX2Noa19kYXRhX2NyYwkJc2tpcCBjaGVja2luZyBvZiBDUkNzIG9uIGRhdGEgbm9kZXMgaW4gb3JkZXIgdG8KKwkJCWltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgb3B0aW9uIG9ubHkKKwkJCWlmIHRoZSBmbGFzaCBtZWRpYSBpcyBoaWdobHkgcmVsaWFibGUuIFRoZSBlZmZlY3QKKwkJCW9mIHRoaXMgb3B0aW9uIGlzIHRoYXQgY29ycnVwdGlvbiBvZiB0aGUgY29udGVudHMKKwkJCW9mIGEgZmlsZSBjYW4gZ28gdW5ub3RpY2VkLgorY2hrX2RhdGFfY3JjICgqKQlkbyBub3Qgc2tpcCBjaGVja2luZyBDUkNzIG9uIGRhdGEgbm9kZXMKIAogCiBRdWljayB1c2FnZSBpbnN0cnVjdGlvbnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MCBiL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQxM2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDcwCkBAIC0wLDAgKzEsNzYgQEAKK0tlcm5lbCBkcml2ZXIgYWR0NzQ3MAorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDcwCisgICAgUHJlZml4OiAnYWR0NzQ3MCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MkMsIDB4MkUsIDB4MkYKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQorCitBdXRob3I6IERhcnJpY2sgSi4gV29uZworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURUNzQ3MCBjaGlwLiAgVGhlcmUgbWF5CitiZSBvdGhlciBjaGlwcyB0aGF0IGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KKworVGhlIEFEVDc0NzAgdXNlcyB0aGUgMi13aXJlIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggdGhlIFNNQnVzIDIuMAorc3BlY2lmaWNhdGlvbi4gVXNpbmcgYW4gYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVyIGl0IG1lYXN1cmVzIHVwIHRvIHRlbiAoMTApCitleHRlcm5hbCB0ZW1wZXJhdHVyZXMuIEl0IGhhcyBmb3VyICg0KSAxNi1iaXQgY291bnRlcnMgZm9yIG1lYXN1cmluZyBmYW4gc3BlZWQuCitUaGVyZSBhcmUgZm91ciAoNCkgUFdNIG91dHB1dHMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIGZhbiBzcGVlZC4KKworQSBzb3BoaXN0aWNhdGVkIGNvbnRyb2wgc3lzdGVtIGZvciB0aGUgUFdNIG91dHB1dHMgaXMgZGVzaWduZWQgaW50byB0aGUgQURUNzQ3MAordGhhdCBhbGxvd3MgZmFuIHNwZWVkIHRvIGJlIGFkanVzdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gYW55IG9mIHRoZSB0ZW4KK3RlbXBlcmF0dXJlIHNlbnNvcnMuIEVhY2ggUFdNIG91dHB1dCBpcyBpbmRpdmlkdWFsbHkgYWRqdXN0YWJsZSBhbmQKK3Byb2dyYW1tYWJsZS4gT25jZSBjb25maWd1cmVkLCB0aGUgQURUNzQ3MCB3aWxsIGFkanVzdCB0aGUgUFdNIG91dHB1dHMgaW4KK3Jlc3BvbnNlIHRvIHRoZSBtZWFzdXJlZCB0ZW1wZXJhdHVyZXMgd2l0aCBmdXJ0aGVyIGhvc3QgaW50ZXJ2ZW50aW9uLiAgVGhpcworZmVhdHVyZSBjYW4gYWxzbyBiZSBkaXNhYmxlZCBmb3IgbWFudWFsIGNvbnRyb2wgb2YgdGhlIFBXTSdzLgorCitFYWNoIG9mIHRoZSBtZWFzdXJlZCBpbnB1dHMgKHRlbXBlcmF0dXJlLCBmYW4gc3BlZWQpIGhhcyBjb3JyZXNwb25kaW5nIGhpZ2gvbG93CitsaW1pdCB2YWx1ZXMuIFRoZSBBRFQ3NDcwIHdpbGwgc2lnbmFsIGFuIEFMQVJNIGlmIGFueSBtZWFzdXJlZCB2YWx1ZSBleGNlZWRzCitlaXRoZXIgbGltaXQuCisKK1RoZSBBRFQ3NDcwIERPRVMgTk9UIHNhbXBsZSBhbGwgaW5wdXRzIGNvbnRpbnVvdXNseS4gIEEgc2luZ2xlIHBpbiBvbiB0aGUKK0FEVDc0NzAgaXMgY29ubmVjdGVkIHRvIGEgbXVsdGl0dWRlIG9mIHRoZXJtYWwgZGlvZGVzLCBidXQgdGhlIGNoaXAgbXVzdCBiZQoraW5zdHJ1Y3RlZCBleHBsaWNpdGx5IHRvIHJlYWQgdGhlIG11bHRpdHVkZSBvZiBkaW9kZXMuICBJZiB5b3Ugd2FudCB0byB1c2UKK2F1dG9tYXRpYyBmYW4gY29udHJvbCBtb2RlLCB5b3UgbXVzdCBtYW51YWxseSByZWFkIGFueSBvZiB0aGUgdGVtcGVyYXR1cmUKK3NlbnNvcnMgb3IgdGhlIGZhbiBjb250cm9sIGFsZ29yaXRobSB3aWxsIG5vdCBydW4uICBUaGUgY2hpcCBXSUxMIE5PVCBETyBUSElTCitBVVRPTUFUSUNBTExZOyB0aGlzIG11c3QgYmUgZG9uZSBmcm9tIHVzZXJzcGFjZS4gIFRoaXMgbWF5IGJlIGEgYnVnIGluIHRoZSBjaGlwCitkZXNpZ24sIGdpdmVuIHRoYXQgbWFueSBvdGhlciBBRCBjaGlwcyB0YWtlIGNhcmUgb2YgdGhpcy4gIFRoZSBkcml2ZXIgd2lsbCBub3QKK3JlYWQgdGhlIHJlZ2lzdGVycyBtb3JlIG9mdGVuIHRoYW4gb25jZSBldmVyeSA1IHNlY29uZHMuICBGdXJ0aGVyLAorY29uZmlndXJhdGlvbiBkYXRhIGlzIG9ubHkgcmVhZCBvbmNlIHBlciBtaW51dGUuCisKK1NwZWNpYWwgRmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEFEVDc0NzAgaGFzIGEgOC1iaXQgQURDIGFuZCBpcyBjYXBhYmxlIG9mIG1lYXN1cmluZyB0ZW1wZXJhdHVyZXMgd2l0aCAxCitkZWdDIHJlc29sdXRpb24uCisKK1RoZSBBbmFsb2cgRGV2aWNlcyBkYXRhc2hlZXQgaXMgdmVyeSBkZXRhaWxlZCBhbmQgZGVzY3JpYmVzIGEgcHJvY2VkdXJlIGZvcgorZGV0ZXJtaW5pbmcgYW4gb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXV0b21hdGljIFBXTSBjb250cm9sLgorCitDb25maWd1cmF0aW9uIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Jlc2lkZXMgc3RhbmRhcmQgaW50ZXJmYWNlcyBkcml2ZXIgYWRkcyB0aGUgZm9sbG93aW5nOgorCisqIFBXTSBDb250cm9sCisKKyogcHdtI19hdXRvX3BvaW50MV9wd20gYW5kIHB3bSNfYXV0b19wb2ludDFfdGVtcCBhbmQKKyogcHdtI19hdXRvX3BvaW50Ml9wd20gYW5kIHB3bSNfYXV0b19wb2ludDJfdGVtcCAtCisKK3BvaW50MTogU2V0IHRoZSBwd20gc3BlZWQgYXQgYSBsb3dlciB0ZW1wZXJhdHVyZSBib3VuZC4KK3BvaW50MjogU2V0IHRoZSBwd20gc3BlZWQgYXQgYSBoaWdoZXIgdGVtcGVyYXR1cmUgYm91bmQuCisKK1RoZSBBRFQ3NDcwIHdpbGwgc2NhbGUgdGhlIHB3bSBiZXR3ZWVuIHRoZSBsb3dlciBhbmQgaGlnaGVyIHB3bSBzcGVlZCB3aGVuCit0aGUgdGVtcGVyYXR1cmUgaXMgYmV0d2VlbiB0aGUgdHdvIHRlbXBlcmF0dXJlIGJvdW5kYXJpZXMuICBQV00gdmFsdWVzIHJhbmdlCitmcm9tIDAgKG9mZikgdG8gMjU1IChmdWxsIHNwZWVkKS4gIEZhbiBzcGVlZCB3aWxsIGJlIHNldCB0byBtYXhpbXVtIHdoZW4gdGhlCit0ZW1wZXJhdHVyZSBzZW5zb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBQV00gY29udHJvbCBleGNlZWRzCitwd20jX2F1dG9fcG9pbnQyX3RlbXAuCisKK05vdGVzCistLS0tLQorCitBcyBzdGF0ZWQgYWJvdmUsIHRoZSB0ZW1wZXJhdHVyZSBpbnB1dHMgbXVzdCBiZSByZWFkIHBlcmlvZGljYWxseSBmcm9tCit1c2Vyc3BhY2UgaW4gb3JkZXIgZm9yIHRoZSBhdXRvbWF0aWMgcHdtIGFsZ29yaXRobSB0byBydW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKaW5kZXggMzQ5NmI3MC4uMDQyYzA0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NwpAQCAtMTM2LDEwICsxMzYsMTAgQEAKIFRoZSBJVDg3eHggb25seSB1cGRhdGVzIGl0cyB2YWx1ZXMgZWFjaCAxLjUgc2Vjb25kczsgcmVhZGluZyBpdCBtb3JlIG9mdGVuCiB3aWxsIGRvIG5vIGhhcm0sIGJ1dCB3aWxsIHJldHVybiAnb2xkJyB2YWx1ZXMuCiAKLVRvIGNoYW5nZSBzZW5zb3IgTiB0byBhIHRoZXJtaXN0b3IsICdlY2hvIDIgPiB0ZW1wTl90eXBlJyB3aGVyZSBOIGlzIDEsIDIsCitUbyBjaGFuZ2Ugc2Vuc29yIE4gdG8gYSB0aGVybWlzdG9yLCAnZWNobyA0ID4gdGVtcE5fdHlwZScgd2hlcmUgTiBpcyAxLCAyLAogb3IgMy4gVG8gY2hhbmdlIHNlbnNvciBOIHRvIGEgdGhlcm1hbCBkaW9kZSwgJ2VjaG8gMyA+IHRlbXBOX3R5cGUnLgogR2l2ZSAwIGZvciB1bnVzZWQgc2Vuc29yLiBBbnkgb3RoZXIgdmFsdWUgaXMgaW52YWxpZC4gVG8gY29uZmlndXJlIHRoaXMgYXQKLXN0YXJ0dXAsIGNvbnN1bHQgbG1fc2Vuc29ycydzIC9ldGMvc2Vuc29ycy5jb25mLiAoMiA9IHRoZXJtaXN0b3I7CitzdGFydHVwLCBjb25zdWx0IGxtX3NlbnNvcnMncyAvZXRjL3NlbnNvcnMuY29uZi4gKDQgPSB0aGVybWlzdG9yOwogMyA9IHRoZXJtYWwgZGlvZGUpCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1CmluZGV4IDZkNDFkYjcuLjQwMDYyMDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUKQEAgLTE2MywxNiArMTYzLDYgQEAKICogcHdtI19hdXRvX3B3bV9taW4gLSB0aGlzIHNwZWNpZmllcyB0aGUgUFdNIHZhbHVlIGZvciB0ZW1wI19hdXRvX3RlbXBfb2ZmCiAgICAgICAgICAgICAgICAgICAgICAgdGVtcGVyYXR1cmUuIChQV00gdmFsdWUgZnJvbSAwIHRvIDI1NSkKIAotKiBwd20jX2F1dG9fcHdtX2ZyZXEgLSBzZWxlY3QgYmFzZSBmcmVxdWVuY3kgb2YgUFdNIG91dHB1dC4gWW91IGNhbiBzZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgaW4gcmFuZ2Ugb2YgMTAuMCB0byA5NC4wIEh6IGluIC4xIEh6IHVuaXRzLgotCQkgICAgICAgKFZhbHVlcyAxMDAgdG8gOTQwKS4KLQotVGhlIHB3bSNfYXV0b19wd21fZnJlcSBjYW4gYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIDggdmFsdWVzLiBTZXR0aW5nIHRoZQotZnJlcXVlbmN5IHRvIGEgdmFsdWUgbm90IG9uIHRoaXMgbGlzdCwgd2lsbCByZXN1bHQgaW4gdGhlIG5leHQgaGlnaGVyIGZyZXF1ZW5jeQotYmVpbmcgc2VsZWN0ZWQuIFRoZSBhY3R1YWwgZGV2aWNlIGZyZXF1ZW5jeSBtYXkgdmFyeSBzbGlnaHRseSBmcm9tIHRoaXMKLXNwZWNpZmljYXRpb24gYXMgZGVzaWduZWQgYnkgdGhlIG1hbnVmYWN0dXJlci4gQ29uc3VsdCB0aGUgZGF0YXNoZWV0IGZvciBtb3JlCi1kZXRhaWxzLiAoUFdNIEZyZXF1ZW5jeSB2YWx1ZXM6ICAxMDAsIDE1MCwgMjMwLCAzMDAsIDM4MCwgNDcwLCA2MjAsIDk0MCkKLQogKiBwd20jX2F1dG9fcHdtX21pbmN0bCAtIHRoaXMgZmxhZ3Mgc2VsZWN0cyBmb3IgdGVtcCNfYXV0b190ZW1wX29mZiB0ZW1wZXJhdHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiYWhhdmlvdXIgb2YgZmFucy4gV3JpdGUgMSB0byBsZXQgZmFucyBzcGlubmluZyBhdAogCQkJIHB3bSNfYXV0b19wd21fbWluIG9yIHdyaXRlIDAgdG8gbGV0IHRoZW0gb2ZmLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg3CmluZGV4IGVjMjdhYTEuLjZiNDdiNjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODcKQEAgLTY1LDExICs2NSwxMCBAQAogZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLgogCiBTb21lIGZ1bmN0aW9ucyBzaGFyZSBwaW5zLCBzbyBub3QgYWxsIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBzYW1lCi10aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIGFzc3VtZXMgdGhhdAotdGhlIEJJT1MgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIEluIHRoYXQgcmVzcGVjdCwgaXQgZGlmZmVycyBmcm9tCi10aGUgb3JpZ2luYWwgZHJpdmVyIChmcm9tIGxtX3NlbnNvcnMgZm9yIExpbnV4IDIuNCksIHdoaWNoIHdvdWxkIGZvcmNlIHRoZQotTE04NyB0byBhbiBhcmJpdHJhcnksIGNvbXBpbGUtdGltZSBjaG9zZW4gbW9kZSwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsCi1jaGlwc2V0IHdpcmluZy4KK3RpbWUuIFdoaWNoIGFyZSBkZXBlbmRzIG9uIHRoZSBoYXJkd2FyZSBzZXR1cC4gVGhpcyBkcml2ZXIgbm9ybWFsbHkKK2Fzc3VtZXMgdGhhdCBmaXJtd2FyZSBjb25maWd1cmVkIHRoZSBjaGlwIGNvcnJlY3RseS4gV2hlcmUgdGhpcyBpcyBub3QKK3RoZSBjYXNlLCBwbGF0Zm9ybSBjb2RlIG11c3Qgc2V0IHRoZSBJMkMgY2xpZW50J3MgcGxhdGZvcm1fZGF0YSB0byBwb2ludAordG8gYSB1OCB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBjaGFubmVsIHJlZ2lzdGVyLgogCiBGb3IgcmVmZXJlbmNlLCBoZXJlIGlzIHRoZSBsaXN0IG9mIGV4Y2x1c2l2ZSBmdW5jdGlvbnM6CiAgLSBpbjAraW41IChkZWZhdWx0KSBvciB0ZW1wMwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCmluZGV4IGFhNGEwZWMuLmUwZDUyMDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKQEAgLTExLDcgKzExLDcgQEAKICAgICBQcmVmaXg6ICdsbTk5JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNODkuaHRtbAorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vbXBmL0xNL0xNODkuaHRtbAogICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05OQogICAgIFByZWZpeDogJ2xtOTknCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCkBAIC0yMSwxOCArMjEsMzIgQEAKICAgICBQcmVmaXg6ICdsbTg2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YwogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNODYuaHRtbAorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vbXBmL0xNL0xNODYuaHRtbAogICAqIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIKICAgICBQcmVmaXg6ICdhZG0xMDMyJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3LmFuYWxvZy5jb20vZW4vcHJvZC8wLDI4NzcsQURNMTAzMiwwMC5odG1sCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9QURNMTAzMgogICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjEKICAgICBQcmVmaXg6ICdhZHQ3NDYxJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3LmFuYWxvZy5jb20vZW4vcHJvZC8wLDI4NzcsQURUNzQ2MSwwMC5odG1sCi0gICAgTm90ZTogT25seSBpZiBpbiBBRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZQorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPUFEVDc0NjEKKyAgKiBNYXhpbSBNQVg2NjQ2CisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGQKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM0OTcKKyAgKiBNYXhpbSBNQVg2NjQ3CisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGUKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM0OTcKKyAgKiBNYXhpbSBNQVg2NjQ5CisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM0OTcKICAgKiBNYXhpbSBNQVg2NjU3CiAgICAgUHJlZml4OiAnbWF4NjY1NycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKQEAgLTcwLDI1ICs4NCwyMSBAQAogCiBUaGUgTE05MCBpcyBhIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yLiBJdCBzZW5zZXMgaXRzIG93biB0ZW1wZXJhdHVyZSBhcwogd2VsbCBhcyB0aGUgdGVtcGVyYXR1cmUgb2YgdXAgdG8gb25lIGV4dGVybmFsIGRpb2RlLiBJdCBpcyBjb21wYXRpYmxlCi13aXRoIG1hbnkgb3RoZXIgZGV2aWNlcyBzdWNoIGFzIHRoZSBMTTg2LCB0aGUgTE04OSwgdGhlIExNOTksIHRoZSBBRE0xMDMyLAotdGhlIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksIE1BWDY2ODAgYW5kIHRoZSBNQVg2NjgxIGFsbCBvZiB3aGljaCBhcmUKLXN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KK3dpdGggbWFueSBvdGhlciBkZXZpY2VzLCBtYW55IG9mIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCiAKIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIE1BWDY2NTcsCiBNQVg2NjU4IGFuZCBNQVg2NjU5IHZhcmlhbnRzLiBUaGUgZXh0cmEgYWRkcmVzcyBhbmQgZmVhdHVyZXMgb2YgdGhlCiBNQVg2NjU5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiBUaGUgTUFYNjY4MCBhbmQgTUFYNjY4MSBvbmx5CiBkaWZmZXIgaW4gdGhlaXIgcGlub3V0LCB0aGVyZWZvcmUgdGhleSBvYnZpb3VzbHkgY2FuJ3QgKGFuZCBkb24ndCBuZWVkIHRvKQotYmUgZGlzdGluZ3Vpc2hlZC4gQWRkaXRpb25hbGx5LCB0aGUgQURUNzQ2MSBpcyBzdXBwb3J0ZWQgaWYgZm91bmQgaW4KLUFETTEwMzIgY29tcGF0aWJpbGl0eSBtb2RlLgorYmUgZGlzdGluZ3Vpc2hlZC4KIAogVGhlIHNwZWNpZmljaXR5IG9mIHRoaXMgZmFtaWx5IG9mIGNoaXBzZXRzIG92ZXIgdGhlIEFETTEwMjEvTE04NAogZmFtaWx5IGlzIHRoYXQgaXQgZmVhdHVyZXMgY3JpdGljYWwgbGltaXRzIHdpdGggaHlzdGVyZXNpcywgYW5kIGFuCiBpbmNyZWFzZWQgcmVzb2x1dGlvbiBvZiB0aGUgcmVtb3RlIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50LgogCiBUaGUgZGlmZmVyZW50IGNoaXBzZXRzIG9mIHRoZSBmYW1pbHkgYXJlIG5vdCBzdHJpY3RseSBpZGVudGljYWwsIGFsdGhvdWdoCi12ZXJ5IHNpbWlsYXIuIFRoaXMgZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIGFueSBzcGVjaWZpYyBmZWF0dXJlIGZvciBub3csCi13aXRoIHRoZSBleGNlcHRpb24gb2YgU01CdXMgUEVDLiBGb3IgcmVmZXJlbmNlLCBoZXJlIGNvbWVzIGEgbm9uLWV4aGF1c3RpdmUKLWxpc3Qgb2Ygc3BlY2lmaWMgZmVhdHVyZXM6Cit2ZXJ5IHNpbWlsYXIuIEZvciByZWZlcmVuY2UsIGhlcmUgY29tZXMgYSBub24tZXhoYXVzdGl2ZSBsaXN0IG9mIHNwZWNpZmljCitmZWF0dXJlczoKIAogTE05MDoKICAgKiBGaWx0ZXIgYW5kIGFsZXJ0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYXQgMHhCRi4KQEAgLTExNCw5ICsxMjQsMTEgQEAKICAgKiBMb3dlciByZXNvbHV0aW9uIGZvciByZW1vdGUgdGVtcGVyYXR1cmUKIAogTUFYNjY1NyBhbmQgTUFYNjY1ODoKKyAgKiBCZXR0ZXIgbG9jYWwgcmVzb2x1dGlvbgogICAqIFJlbW90ZSBzZW5zb3IgdHlwZSBzZWxlY3Rpb24KIAogTUFYNjY1OToKKyAgKiBCZXR0ZXIgbG9jYWwgcmVzb2x1dGlvbgogICAqIFNlbGVjdGFibGUgYWRkcmVzcwogICAqIFNlY29uZCBjcml0aWNhbCB0ZW1wZXJhdHVyZSBsaW1pdAogICAqIFJlbW90ZSBzZW5zb3IgdHlwZSBzZWxlY3Rpb24KQEAgLTEyNyw3ICsxMzksOCBAQAogCiBBbGwgdGVtcGVyYXR1cmUgdmFsdWVzIGFyZSBnaXZlbiBpbiBkZWdyZWVzIENlbHNpdXMuIFJlc29sdXRpb24KIGlzIDEuMCBkZWdyZWUgZm9yIHRoZSBsb2NhbCB0ZW1wZXJhdHVyZSwgMC4xMjUgZGVncmVlIGZvciB0aGUgcmVtb3RlCi10ZW1wZXJhdHVyZS4KK3RlbXBlcmF0dXJlLCBleGNlcHQgZm9yIHRoZSBNQVg2NjU3LCBNQVg2NjU4IGFuZCBNQVg2NjU5IHdoaWNoIGhhdmUgYQorcmVzb2x1dGlvbiBvZiAwLjEyNSBkZWdyZWUgZm9yIGJvdGggdGVtcGVyYXR1cmVzLgogCiBFYWNoIHNlbnNvciBoYXMgaXRzIG93biBoaWdoIGFuZCBsb3cgbGltaXRzLCBwbHVzIGEgY3JpdGljYWwgbGltaXQuCiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgcmVsYXRpdmUgaHlzdGVyZXNpcyB2YWx1ZSBjb21tb24gdG8gYm90aCBjcml0aWNhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3MzYwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3MzYwCmluZGV4IDg5YThmY2YuLmNiYWMzMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzM2MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODczNjAKQEAgLTUsMTIgKzUsNyBAQAogICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzM2MCwgUEM4NzM2MywgUEM4NzM2NCwgUEM4NzM2NSBhbmQgUEM4NzM2NgogICAgIFByZWZpeGVzOiAncGM4NzM2MCcsICdwYzg3MzYzJywgJ3BjODczNjQnLCAncGM4NzM2NScsICdwYzg3MzY2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCi0gICAgRGF0YXNoZWV0czoKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2MC5odG1sCi0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjMuaHRtbAotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzY0Lmh0bWwKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2NS5odG1sCi0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjYuaHRtbAorICAgIERhdGFzaGVldHM6IE5vIGxvbmdlciBhdmFpbGFibGUKIAogQXV0aG9yczogSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNwppbmRleCA5YTA3MDhmLi5kMWViYmU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CkBAIC01LDcgKzUsNyBAQAogICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzQyNwogICAgIFByZWZpeDogJ3BjODc0MjcnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUsIGFkZHJlc3MgcmVhZCBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UKLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cud2luYm9uZC5jb20udHcvRS1XSU5CT05ESFRNL3BhcnRuZXIvYXBjXzAwNy5odG1sCisgICAgRGF0YXNoZWV0OiBObyBsb25nZXIgYXZhaWxhYmxlCiAKIEF1dGhvcjogSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZCBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZAppbmRleCA2ZjgwMGEwLi5jOTFlMGI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCkBAIC0zNTMsNyArMzUzLDcgQEAKIAogIyBQV00KIAotQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgKG1heSBhcHBseSB0byBvdGhlciBBc3VzCisqIEFkZGl0aW9uYWwgaW5mbyBhYm91dCBQV00gb24gdGhlIEFTOTkxMjdGIChtYXkgYXBwbHkgdG8gb3RoZXIgQXN1cwogY2hpcHMgYXMgd2VsbCkgYnkgSmVhbiBEZWx2YXJlIGFzIG9mIDIwMDQtMDQtMDk6CiAKIEFTOTkxMjdGIHJldmlzaW9uIDIgc2VlbXMgdG8gaGF2ZSB0d28gUFdNIHJlZ2lzdGVycyBhdCAweDU5IGFuZCAweDVBLApAQCAtMzk2LDcgKzM5Niw3IEBACiBsb25nIGFzIHdlIGRvbid0IGtub3cgbW9yZSwgdGhlIHc4Mzc4MWQgZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIFBXTSBvbgogQVM5OTEyN0YgY2hpcHMgYXQgYWxsLgogCi1BZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiByZXYuMSBieSBIZWN0b3IgTWFydGluOgorKiBBZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiByZXYuMSBieSBIZWN0b3IgTWFydGluOgogCiBJJ3ZlIGJlZW4gZmlkZGxpbmcgYXJvdW5kIHdpdGggdGhlIChpbilmYW1vdXMgMHg1OSByZWdpc3RlciBhbmQKIGZvdW5kIG91dCB0aGUgZm9sbG93aW5nIHZhbHVlcyBkbyB3b3JrIGFzIGEgZm9ybSBvZiBjb2Fyc2UgcHdtOgpAQCAtNDE4LDMgKzQxOCwzNiBAQAogTXkgbW9ibyBpcyBhbiBBU1VTIEE3VjI2Ni1FLiBUaGlzIGJlaGF2aW9yIGlzIHNpbWlsYXIgdG8gd2hhdCBJIGdvdAogd2l0aCBzcGVlZGZhbiB1bmRlciBXaW5kb3dzLCB3aGVyZSAwLTE1JSB3b3VsZCBiZSBvZmYsIDE1LTJ4JSAoY2FuJ3QKIHJlbWVtYmVyIHRoZSBleGFjdCB2YWx1ZSkgd291bGQgYmUgNzAlIGFuZCBoaWdoZXIgd291bGQgYmUgZnVsbCBvbi4KKworKiBBZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiByZXYuMSBmcm9tIGxtLXNlbnNvcnMKKyAgdGlja2V0ICMyMzUwOgorCitJIGNvbmR1Y3RlZCBzb21lIGV4cGVyaW1lbnQgb24gQXN1cyBQM0ItRiBtb3RoZXJib2FyZCB3aXRoIEFTOTkxMjdGCisoVmVyLiAxKS4KKworSSBjb25maXJtIHRoYXQgMHg1OSByZWdpc3RlciBjb250cm9sIHRoZSBDUFVfRmFuIEhlYWRlciBvbiB0aGlzCittb3RoZXJib2FyZCwgYW5kIDB4NWEgcmVnaXN0ZXIgY29udHJvbCBQV1JfRmFuLgorCitJbiBvcmRlciB0byByZWR1Y2UgdGhlIGRlcGVuZGVuY3kgb2Ygc3BlY2lmaWMgZmFuLCB0aGUgbWVhc3VyZW1lbnQgaXMKK2NvbmR1Y3RlZCB3aXRoIGEgZGlnaXRhbCBzY29wZSB3aXRob3V0IGZhbiBjb25uZWN0ZWQuIEkgZm91bmQgb3V0IHRoYXQKK1AzQi1GIGFjdHVhbGx5IG91dHB1dCB2YXJpYWJsZSBEQyB2b2x0YWdlIG9uIGZhbiBoZWFkZXIgY2VudGVyIHBpbiwKK2xvb2tzIGxpa2UgUFdNIGlzIGZpbHRlcmVkIG9uIHRoaXMgbW90aGVyYm9hcmQuCisKK0hlcmUgYXJlIHNvbWUgb2YgbWVhc3VyZW1lbnRzOgorCisweDgwICAgICAyMCBtVgorMHg4MSAgICAgMjAgbVYKKzB4ODIgICAgMjMyIG1WCisweDgzICAgMS4yICBWCisweDg0ICAgMi4zMSBWCisweDg1ICAgMy40NCBWCisweDg2ICAgNC42MiBWCisweDg3ICAgNS44MSBWCisweDg4ICAgNy4wMSBWCis5eDg5ICAgOC4yMiBWCisweDhhICAgOS40MiBWCisweDhiICAxMC42ICBWCisweDhjICAxMS45ICBWCisweDhkICAxMi40ICBWCisweDhlICAxMi40ICBWCisweDhmICAxMi40ICBWCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKaW5kZXggYTY3ZDNiNy4uNTY2M2U0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZApAQCAtNTgsMjkgKzU4LDM1IEBACiBjdXJyZW50bHkgc2VsZWN0ZWQpLiBJZiB5b3Uga25vdyB0aGUgYWRkcmVzcyBvZiB0aGUgY2hpcCwgdXNlIGEgJ2ZvcmNlJwogcGFyYW1ldGVyOyB0aGlzIHdpbGwgcHV0IGl0IGludG8gYSBtb3JlIHdlbGwtYmVoYXZlZCBzdGF0ZSBmaXJzdC4KIAotVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRocmVlIHRlbXBlcmF0dXJlIHNlbnNvcnMsIGZpdmUgZmFuIHJvdGF0aW9uIHNwZWVkCi1zZW5zb3JzLCBhbmQgdGVuIHZvbHRhZ2Ugc2Vuc29ycy4KK1RoZSBkcml2ZXIgaW1wbGVtZW50cyB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCB0ZW4gdm9sdGFnZSBzZW5zb3JzLAorZml2ZSBmYW4gcm90YXRpb24gc3BlZWQgc2Vuc29ycyBhbmQgbWFudWFsIFBXTSBjb250cm9sIG9mIGVhY2ggZmFuLgogCiBUZW1wZXJhdHVyZXMgYXJlIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcyAxCiBkZWdDIGZvciB0ZW1wMSBhbmQgMC41IGRlZ0MgZm9yIHRlbXAyIGFuZCB0ZW1wMy4gQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIHdoZW4KIHRoZSB0ZW1wZXJhdHVyZSBnZXRzIGhpZ2hlciB0aGFuIHRoZSBPdmVydGVtcGVyYXR1cmUgU2h1dGRvd24gdmFsdWU7IGl0IHN0YXlzCiBvbiB1bnRpbCB0aGUgdGVtcGVyYXR1cmUgZmFsbHMgYmVsb3cgdGhlIEh5c3RlcmVzaXMgdmFsdWUuCiAKK1ZvbHRhZ2Ugc2Vuc29ycyAoYWxzbyBrbm93biBhcyBJTiBzZW5zb3JzKSByZXBvcnQgdGhlaXIgdmFsdWVzIGluIG1pbGxpdm9sdHMuCitBbiBhbGFybSBpcyB0cmlnZ2VyZWQgaWYgdGhlIHZvbHRhZ2UgaGFzIGNyb3NzZWQgYSBwcm9ncmFtbWFibGUgbWluaW11bQorb3IgbWF4aW11bSBsaW1pdC4KKwogRmFuIHJvdGF0aW9uIHNwZWVkcyBhcmUgcmVwb3J0ZWQgaW4gUlBNIChyb3RhdGlvbnMgcGVyIG1pbnV0ZSkuIEFuIGFsYXJtIGlzCiB0cmlnZ2VyZWQgaWYgdGhlIHJvdGF0aW9uIHNwZWVkIGhhcyBkcm9wcGVkIGJlbG93IGEgcHJvZ3JhbW1hYmxlIGxpbWl0LiBGYW4KIHJlYWRpbmdzIGNhbiBiZSBkaXZpZGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIGRpdmlkZXIgKDEsIDIsIDQsIDgsIDE2LAogMzIsIDY0IG9yIDEyOCBmb3IgYWxsIGZhbnMpIHRvIGdpdmUgdGhlIHJlYWRpbmdzIG1vcmUgcmFuZ2Ugb3IgYWNjdXJhY3kuCiAKLVZvbHRhZ2Ugc2Vuc29ycyAoYWxzbyBrbm93biBhcyBJTiBzZW5zb3JzKSByZXBvcnQgdGhlaXIgdmFsdWVzIGluIG1pbGxpdm9sdHMuCi1BbiBhbGFybSBpcyB0cmlnZ2VyZWQgaWYgdGhlIHZvbHRhZ2UgaGFzIGNyb3NzZWQgYSBwcm9ncmFtbWFibGUgbWluaW11bQotb3IgbWF4aW11bSBsaW1pdC4KK0VhY2ggZmFuIGNvbnRyb2xsZWQgaXMgY29udHJvbGxlZCBieSBQV00uIFRoZSBQV00gZHV0eSBjeWNsZSBjYW4gYmUgcmVhZCBhbmQKK3NldCBmb3IgZWFjaCBmYW4gc2VwYXJhdGVseS4gVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMCAoc3RvcCkgdG8gMjU1IChmdWxsKS4KK1BXTSAxLTMgc3VwcG9ydCBUaGVybWFsIENydWlzZSBtb2RlLCBpbiB3aGljaCB0aGUgUFdNcyBhcmUgYXV0b21hdGljYWxseQorcmVndWxhdGVkIHRvIGtlZXAgcmVzcGVjdGl2ZWx5IHRlbXAgMS0zIGF0IGEgY2VydGFpbiB0YXJnZXQgdGVtcGVyYXR1cmUuCitTZWUgYmVsb3cgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3lzZnMtaW50ZXJmYWNlLgogCiBUaGUgdzgzNzkxZCBoYXMgYSBnbG9iYWwgYml0IHVzZWQgdG8gZW5hYmxlIGJlZXBpbmcgZnJvbSB0aGUgc3BlYWtlciB3aGVuIGFuCiBhbGFybSBpcyB0cmlnZ2VyZWQgYXMgd2VsbCBhcyBhIGJpdG1hc2sgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGJlZXAgZm9yCiBzcGVjaWZpYyBhbGFybXMuIFlvdSBuZWVkIGJvdGggdGhlIGdsb2JhbCBiZWVwIGVuYWJsZSBiaXQgYW5kIHRoZQogY29ycmVzcG9uZGluZyBiZWVwIGJpdCB0byBiZSBvbiBmb3IgYSB0cmlnZ2VyZWQgYWxhcm0gdG8gc291bmQgYSBiZWVwLgogCi1UaGUgc3lzZnMgaW50ZXJmYWNlIHRvIHRoZSBnbG9hYmFsIGVuYWJsZSBpcyB2aWEgdGhlIHN5c2ZzIGJlZXBfZW5hYmxlIGZpbGUuCitUaGUgc3lzZnMgaW50ZXJmYWNlIHRvIHRoZSBnbG9iYWwgZW5hYmxlIGlzIHZpYSB0aGUgc3lzZnMgYmVlcF9lbmFibGUgZmlsZS4KIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBib3RoIGxlZ2FjeSBhbmQgbmV3IGNvZGUuCiAKIFRoZSBzeXNmcyBpbnRlcmZhY2UgdG8gdGhlIGJlZXAgYml0bWFzayBoYXMgbWlncmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgbGVnYWN5CkBAIC0xMDUsNiArMTExLDI3IEBACiBUaGUgZHJpdmVyIHJlYWRzIHRoZSBoYXJkd2FyZSBjaGlwIHZhbHVlcyBhdCBtb3N0IG9uY2UgZXZlcnkgdGhyZWUgc2Vjb25kcy4KIFVzZXIgbW9kZSBjb2RlIHJlcXVlc3RpbmcgdmFsdWVzIG1vcmUgb2Z0ZW4gd2lsbCByZWNlaXZlIGNhY2hlZCB2YWx1ZXMuCiAKKy9zeXMgZmlsZXMKKy0tLS0tLS0tLS0KK1RoZSBzeXNmcy1pbnRlcmZhY2UgaXMgZG9jdW1lbnRlZCBpbiB0aGUgJ3N5c2ZzLWludGVyZmFjZScgZmlsZS4gT25seQorY2hpcC1zcGVjaWZpYyBvcHRpb25zIGFyZSBkb2N1bWVudGVkIGhlcmUuCisKK3B3bVsxLTNdX2VuYWJsZSAtCXRoaXMgZmlsZSBjb250cm9scyBtb2RlIG9mIGZhbi90ZW1wZXJhdHVyZSBjb250cm9sIGZvcgorCQkJZmFuIDEtMy4gRmFuL1BXTSA0LTUgb25seSBzdXBwb3J0IG1hbnVhbCBtb2RlLgorCQkgICAgICAgICAgICAqIDEgTWFudWFsIG1vZGUKKwkJICAgICAgICAgICAgKiAyIFRoZXJtYWwgQ3J1aXNlIG1vZGUKKwkJICAgICAgICAgICAgKiAzIEZhbiBTcGVlZCBDcnVpc2UgbW9kZSAobm8gZnVydGhlciBzdXBwb3J0KQorCit0ZW1wWzEtM11fdGFyZ2V0IC0JZGVmaW5lcyB0aGUgdGFyZ2V0IHRlbXBlcmF0dXJlIGZvciBUaGVybWFsIENydWlzZSBtb2RlLgorCQkJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCQkJUlcKKwordGVtcFsxLTNdX3RvbGVyYW5jZSAtCXRlbXBlcmF0dXJlIHRvbGVyYW5jZSBmb3IgVGhlcm1hbCBDcnVpc2UgbW9kZS4KKwkJCVNwZWNpZmllcyBhbiBpbnRlcnZhbCBhcm91bmQgdGhlIHRhcmdldCB0ZW1wZXJhdHVyZQorCQkJaW4gd2hpY2ggdGhlIGZhbiBzcGVlZCBpcyBub3QgY2hhbmdlZC4KKwkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKKwkJCVJXCisKIEFsYXJtcyBiaXRtYXAgdnMuIGJlZXBfbWFzayBiaXRtYXNrCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEZvciBsZWdhY3kgY29kZSB1c2luZyB0aGUgYWxhcm1zIGFuZCBiZWVwX21hc2sgZmlsZXM6CkBAIC0xMzIsNyArMTU5LDMgQEAKIHRhcnQzICAgICAgICA6ICBhbGFybXM6IDB4MDQwMDAwIGJlZXBfbWFzazogMHgxMDAwMDAgPD09IG1pc21hdGNoCiBjYXNlX29wZW4gICAgOiAgYWxhcm1zOiAweDAwMTAwMCBiZWVwX21hc2s6IDB4MDAxMDAwCiBnbG9iYWxfZW5hYmxlOiAgYWxhcm1zOiAtLS0tLS0tLSBiZWVwX21hc2s6IDB4ODAwMDAwIChtb2RpZmllZCB2aWEgYmVlcF9lbmFibGUpCi0KLVc4Mzc5MUQgVE9ETzoKLS0tLS0tLS0tLS0tLS0tLQotUHJvdmlkZSBhIHBhdGNoIGZvciBzbWFydC1mYW4gY29udHJvbCAoc3RpbGwgbmVlZCBhcHByb3ByaWF0ZSBtb3RoZXJib2FyZC9mYW5zKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCmluZGV4IGMzMWUwMjkuLjgxYzBjNTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKQEAgLTEzLDggKzEzLDkgQEAKICAgKiBJbnRlbCA2MzF4RVNCLzYzMnhFU0IgKEVTQjIpCiAgICogSW50ZWwgODI4MDFIIChJQ0g4KQogICAqIEludGVsIDgyODAxSSAoSUNIOSkKLSAgKiBJbnRlbCBUb2xhcGFpCi0gICogSW50ZWwgSUNIMTAKKyAgKiBJbnRlbCBFUDgwNTc5IChUb2xhcGFpKQorICAqIEludGVsIDgyODAxSkkgKElDSDEwKQorICAqIEludGVsIFBDSAogICAgRGF0YXNoZWV0czogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJbnRlbCB3ZWJzaXRlCiAKIEF1dGhvcnM6IApAQCAtMzIsNyArMzMsNyBAQAogLS0tLS0tLS0tLS0KIAogVGhlIElDSCAocHJvcGVybHkga25vd24gYXMgdGhlIDgyODAxQUEpLCBJQ0gwICg4MjgwMUFCKSwgSUNIMiAoODI4MDFCQSksCi1JQ0gzICg4MjgwMUNBL0NBTSkgYW5kIGxhdGVyIGRldmljZXMgYXJlIEludGVsIGNoaXBzIHRoYXQgYXJlIGEgcGFydCBvZgorSUNIMyAoODI4MDFDQS9DQU0pIGFuZCBsYXRlciBkZXZpY2VzIChQQ0gpIGFyZSBJbnRlbCBjaGlwcyB0aGF0IGFyZSBhIHBhcnQgb2YKIEludGVsJ3MgJzgxMCcgY2hpcHNldCBmb3IgQ2VsZXJvbi1iYXNlZCBQQ3MsICc4MTBFJyBjaGlwc2V0IGZvcgogUGVudGl1bS1iYXNlZCBQQ3MsICc4MTVFJyBjaGlwc2V0LCBhbmQgb3RoZXJzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9wb3J0aW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy9wb3J0aW5nLWNsaWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZjgyYzAuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvcG9ydGluZy1jbGllbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLVJldmlzaW9uIDcsIDIwMDctMDQtMTkKLUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgotR3JlZyBLSCA8Z3JlZ0Brcm9haC5jb20+Ci0KLVRoaXMgaXMgYSBndWlkZSBvbiBob3cgdG8gY29udmVydCBJMkMgY2hpcCBkcml2ZXJzIGZyb20gTGludXggMi40IHRvCi1MaW51eCAyLjYuIEkgaGF2ZSBiZWVuIHVzaW5nIGV4aXN0aW5nIGRyaXZlcnMgKGxtNzUsIGxtNzgpIGFzIGV4YW1wbGVzLgotVGhlbiBJIGNvbnZlcnRlZCBhIGRyaXZlciBteXNlbGYgKGxtODMpIGFuZCB1cGRhdGVkIHRoaXMgZG9jdW1lbnQuCi1Ob3RlIHRoYXQgdGhpcyBndWlkZSBpcyBzdHJvbmdseSBvcmllbnRlZCB0b3dhcmRzIGhhcmR3YXJlIG1vbml0b3JpbmcKLWRyaXZlcnMuIE1hbnkgcG9pbnRzIGFyZSBzdGlsbCB2YWxpZCBmb3Igb3RoZXIgdHlwZSBvZiBkcml2ZXJzLCBidXQKLW90aGVycyBtYXkgYmUgaXJyZWxldmFudC4KLQotVGhlcmUgYXJlIHR3byBzZXRzIG9mIHBvaW50cyBiZWxvdy4gVGhlIGZpcnN0IHNldCBjb25jZXJucyB0ZWNobmljYWwKLWNoYW5nZXMuIFRoZSBzZWNvbmQgc2V0IGNvbmNlcm5zIGNvZGluZyBwb2xpY3kuIEJvdGggYXJlIG1hbmRhdG9yeS4KLQotQWx0aG91Z2ggcmVhZGluZyB0aGlzIGd1aWRlIHdpbGwgaGVscCB5b3UgcG9ydGluZyBkcml2ZXJzLCBJIHN1Z2dlc3QKLXlvdSBrZWVwIGFuIGV5ZSBvbiBhbiBhbHJlYWR5IHBvcnRlZCBkcml2ZXIgd2hpbGUgcG9ydGluZyB5b3VyIG93bgotZHJpdmVyLiBUaGlzIHdpbGwgaGVscCB5b3UgYSBsb3QgdW5kZXJzdGFuZGluZyB3aGF0IHRoaXMgZ3VpZGUKLWV4YWN0bHkgbWVhbnMuIENob29zZSB0aGUgY2hpcCBkcml2ZXIgdGhhdCBpcyB0aGUgbW9yZSBzaW1pbGFyIHRvCi15b3VycyBmb3IgYmVzdCByZXN1bHRzLgotCi1UZWNobmljYWwgY2hhbmdlczoKLQotKiBbRHJpdmVyIHR5cGVdIEFueSBkcml2ZXIgdGhhdCB3YXMgcmVseWluZyBvbiBpMmMtaXNhIGhhcyB0byBiZQotICBjb252ZXJ0ZWQgdG8gYSBwcm9wZXIgaXNhLCBwbGF0Zm9ybSBvciBwY2kgZHJpdmVyLiBUaGlzIGlzIG5vdAotICBjb3ZlcmVkIGJ5IHRoaXMgZ3VpZGUuCi0KLSogW0luY2x1ZGVzXSBHZXQgcmlkIG9mICJ2ZXJzaW9uLmgiIGFuZCA8bGludXgvaTJjLXByb2MuaD4uCi0gIEluY2x1ZGVzIHR5cGljYWxseSBsb29rIGxpa2UgdGhhdDoKLSAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotICAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotICAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0gICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgkvKiBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZyBkcml2ZXJzICovCi0gICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgotICAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CS8qIGlmIHlvdSBuZWVkIFZSTSBzdXBwb3J0ICovCi0gICNpbmNsdWRlIDxsaW51eC9lcnIuaD4JLyogZm9yIGNsYXNzIHJlZ2lzdHJhdGlvbiAqLwotICBQbGVhc2UgcmVzcGVjdCB0aGlzIGluY2x1c2lvbiBvcmRlci4gU29tZSBleHRyYSBoZWFkZXJzIG1heSBiZQotICByZXF1aXJlZCBmb3IgYSBnaXZlbiBkcml2ZXIgKGUuZy4gImxtNzUuaCIpLgotCi0qIFtBZGRyZXNzZXNdIFNFTlNPUlNfSTJDX0VORCBiZWNvbWVzIEkyQ19DTElFTlRfRU5ELCBJU0EgYWRkcmVzc2VzCi0gIGFyZSBubyBtb3JlIGhhbmRsZWQgYnkgdGhlIGkyYyBjb3JlLiBBZGRyZXNzIHJhbmdlcyBhcmUgbm8gbW9yZQotICBzdXBwb3J0ZWQgZWl0aGVyLCBkZWZpbmUgZWFjaCBpbmRpdmlkdWFsIGFkZHJlc3Mgc2VwYXJhdGVseS4KLSAgU0VOU09SU19JTlNNT0RfPG4+IGJlY29tZXMgSTJDX0NMSUVOVF9JTlNNT0RfPG4+LgotCi0qIFtDbGllbnQgZGF0YV0gR2V0IHJpZCBvZiBzeXNjdGxfaWQuIFRyeSB1c2luZyBzdGFuZGFyZCBuYW1lcyBmb3IKLSAgcmVnaXN0ZXIgdmFsdWVzIChmb3IgZXhhbXBsZSwgdGVtcF9vcyBiZWNvbWVzIHRlbXBfbWF4KS4gWW91J3JlCi0gIHN0aWxsIHJlbGF0aXZlbHkgZnJlZSBoZXJlLCBidXQgeW91ICpoYXZlKiB0byBmb2xsb3cgdGhlIHN0YW5kYXJkCi0gIG5hbWVzIGZvciBzeXNmcyBmaWxlcyAoc2VlIHRoZSBTeXNjdGwgc2VjdGlvbiBiZWxvdykuCi0KLSogW0Z1bmN0aW9uIHByb3RvdHlwZXNdIFRoZSBkZXRlY3QgZnVuY3Rpb25zIGxvc2VzIGl0cyBmbGFncwotICBwYXJhbWV0ZXIuIFN5c2N0bCAoZS5nLiBsbTc1X3RlbXApIGFuZCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucwotICBhcmUgb2ZmIHRoZSBsaXN0IG9mIHByb3RvdHlwZXMuIFRoaXMgdXN1YWxseSBsZWF2ZXMgZml2ZQotICBwcm90b3R5cGVzOgotICBzdGF0aWMgaW50IGxtNzVfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLSAgc3RhdGljIGludCBsbTc1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAotICAgICAgaW50IGtpbmQpOwotICBzdGF0aWMgdm9pZCBsbTc1X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotICBzdGF0aWMgaW50IGxtNzVfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLSAgc3RhdGljIHN0cnVjdCBsbTc1X2RhdGEgbG03NV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLSogW1N5c2N0bF0gQWxsIHN5c2N0bCBzdHVmZiBpcyBvZiBjb3Vyc2UgZ29uZSAoZGVmaW5lcywgY3RsX3RhYmxlCi0gIGFuZCBmdW5jdGlvbnMpLiBJbnN0ZWFkLCB5b3UgaGF2ZSB0byBkZWZpbmUgc2hvdyBhbmQgc2V0IGZ1bmN0aW9ucyBmb3IKLSAgZWFjaCBzeXNmcyBmaWxlLiBPbmx5IGRlZmluZSBzZXQgZm9yIHdyaXRhYmxlIHZhbHVlcy4gVGFrZSBhIGxvb2sgYXQgYW4KLSAgZXhpc3RpbmcgMi42IGRyaXZlciBmb3IgZGV0YWlscyAoaXQ4NyBmb3IgZXhhbXBsZSkuIERvbid0IGZvcmdldAotICB0byBkZWZpbmUgdGhlIGF0dHJpYnV0ZXMgZm9yIGVhY2ggZmlsZSAodGhpcyBpcyB0aGF0IHN0ZXAgdGhhdAotICBsaW5rcyBjYWxsYmFjayBmdW5jdGlvbnMpLiBVc2UgdGhlIGZpbGUgbmFtZXMgc3BlY2lmaWVkIGluCi0gIERvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGZvciB0aGUgaW5kaXZpZHVhbCBmaWxlcy4gQWxzbwotICBjb252ZXJ0IHRoZSB1bml0cyB0aGVzZSBmaWxlcyByZWFkIGFuZCB3cml0ZSB0byB0aGUgc3BlY2lmaWVkIG9uZXMuCi0gIElmIHlvdSBuZWVkIHRvIGFkZCBhIG5ldyB0eXBlIG9mIGZpbGUsIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZQotICBzZW5zb3JzIG1haWxpbmcgbGlzdCA8bG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZz4gYnkgcHJvdmlkaW5nIGEKLSAgcGF0Y2ggdG8gdGhlIERvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGZpbGUuCi0KLSogW0F0dGFjaF0gVGhlIGF0dGFjaCBmdW5jdGlvbiBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIGFkYXB0ZXIncwotICBjbGFzcyBoYXMgSTJDX0NMQVNTX0hXTU9OIChvciB3aGF0ZXZlciBjbGFzcyBpcyBzdWl0YWJsZSBmb3IgeW91cgotICBkcml2ZXIpLCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdDoKLSAgaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQotICAgICAgICAgIHJldHVybiAwOwotICBDYWxsIGkyY19wcm9iZSgpIGluc3RlYWQgb2YgaTJjX2RldGVjdCgpLgotCi0qIFtEZXRlY3RdIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgZmxhZ3MgcGFyYW1ldGVyIGlzIGdvbmUuCi0gIFRoZSB0eXBlX25hbWUgYW5kIGNsaWVudF9uYW1lIHN0cmluZ3MgYXJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlCi0gIG5hbWUgc3RyaW5nLCB3aGljaCB3aWxsIGJlIGZpbGxlZCB3aXRoIGEgbG93ZXJjYXNlLCBzaG9ydCBzdHJpbmcuCi0gIFRoZSBsYWJlbHMgdXNlZCBmb3IgZXJyb3IgcGF0aHMgYXJlIHJlZHVjZWQgdG8gdGhlIG51bWJlciBuZWVkZWQuCi0gIEl0IGlzIGFkdmlzZWQgdGhhdCB0aGUgbGFiZWxzIGFyZSBnaXZlbiBkZXNjcmlwdGl2ZSBuYW1lcyBzdWNoIGFzCi0gIGV4aXQgYW5kIGV4aXRfZnJlZS4gRG9uJ3QgZm9yZ2V0IHRvIHByb3Blcmx5IHNldCBlcnIgYmVmb3JlCi0gIGp1bXBpbmcgdG8gZXJyb3IgbGFiZWxzLiBCeSB0aGUgd2F5LCBsYWJlbHMgc2hvdWxkIGJlIGxlZnQtYWxpZ25lZC4KLSAgVXNlIGt6YWxsb2MgaW5zdGVhZCBvZiBrbWFsbG9jLgotICBVc2UgaTJjX3NldF9jbGllbnRkYXRhIHRvIHNldCB0aGUgY2xpZW50IGRhdGEgKGFzIG9wcG9zZWQgdG8KLSAgYSBkaXJlY3QgYWNjZXNzIHRvIGNsaWVudC0+ZGF0YSkuCi0gIFVzZSBzdHJsY3B5IGluc3RlYWQgb2Ygc3RyY3B5IG9yIHNucHJpbnRmIHRvIGNvcHkgdGhlIGNsaWVudCBuYW1lLgotICBSZXBsYWNlIHRoZSBzeXNjdGwgZGlyZWN0b3J5IHJlZ2lzdHJhdGlvbiBieSBjYWxscyB0bwotICBkZXZpY2VfY3JlYXRlX2ZpbGUuIE1vdmUgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgYW55Ci0gIHN5c2ZzIGZpbGUgY3JlYXRpb24uCi0gIFJlZ2lzdGVyIHRoZSBjbGllbnQgd2l0aCB0aGUgaHdtb24gY2xhc3MgKHVzaW5nIGh3bW9uX2RldmljZV9yZWdpc3RlcikKLSAgaWYgYXBwbGljYWJsZS4KLSAgRHJvcCBjbGllbnQtPmlkLgotICBEcm9wIGFueSAyNFJGMDggY29ycnVwdGlvbiBwcmV2ZW50aW9uIHlvdSBmaW5kLCBhcyB0aGlzIGlzIG5vdyBkb25lCi0gIGF0IHRoZSBpMmMtY29yZSBsZXZlbCwgYW5kIGRvaW5nIGl0IHR3aWNlIHZvaWRzIGl0LgotICBEb24ndCBhZGQgSTJDX0NMSUVOVF9BTExPV19VU0UgdG8gY2xpZW50LT5mbGFncywgaXQncyB0aGUgZGVmYXVsdCBub3cuCi0KLSogW0luaXRdIExpbWl0cyBtdXN0IG5vdCBiZSBzZXQgYnkgdGhlIGRyaXZlciAoY2FuIGJlIGRvbmUgbGF0ZXIgaW4KLSAgdXNlci1zcGFjZSkuIENoaXAgc2hvdWxkIG5vdCBiZSByZXNldCBkZWZhdWx0IChhbHRob3VnaCBhIG1vZHVsZQotICBwYXJhbWV0ZXIgbWF5IGJlIHVzZWQgdG8gZm9yY2UgaXQpLCBhbmQgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlCi0gIGxpbWl0ZWQgdG8gdGhlIHN0cmljdGx5IG5lY2Vzc2FyeSBzdGVwcy4KLQotKiBbRGV0YWNoXSBSZW1vdmUgdGhlIGNhbGwgdG8gaTJjX2RlcmVnaXN0ZXJfZW50cnkuIERvIG5vdCBsb2cgYW4KLSAgZXJyb3IgbWVzc2FnZSBpZiBpMmNfZGV0YWNoX2NsaWVudCBmYWlscywgYXMgaTJjLWNvcmUgd2lsbCBub3cgZG8KLSAgaXQgZm9yIHlvdS4KLSAgVW5yZWdpc3RlciBmcm9tIHRoZSBod21vbiBjbGFzcyBpZiBhcHBsaWNhYmxlLgotCi0qIFtVcGRhdGVdIFRoZSBmdW5jdGlvbiBwcm90b3R5cGUgY2hhbmdlZCwgaXQgaXMgbm93Ci0gIHBhc3NlZCBhIGRldmljZSBzdHJ1Y3R1cmUsIHdoaWNoIHlvdSBoYXZlIHRvIGNvbnZlcnQgdG8gYSBjbGllbnQKLSAgdXNpbmcgdG9faTJjX2NsaWVudChkZXYpLiBUaGUgdXBkYXRlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYQotICBwb2ludGVyIHRvIHRoZSBjbGllbnQgZGF0YS4KLSAgRG9uJ3QgYWNjZXNzIGNsaWVudC0+ZGF0YSBkaXJlY3RseSwgdXNlIGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpCi0gIGluc3RlYWQuCi0gIFVzZSB0aW1lX2FmdGVyKCkgaW5zdGVhZCBvZiBkaXJlY3QgamlmZmllcyBjb21wYXJpc29uLgotCi0qIFtJbnRlcmZhY2VdIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIE1PRFVMRV9MSUNFTlNFKCkgbGluZSwgYXQgdGhlIGJvdHRvbQotICBvZiB0aGUgZmlsZSAoYWZ0ZXIgTU9EVUxFX0FVVEhPUigpIGFuZCBNT0RVTEVfREVTQ1JJUFRJT04oKSwgaW4gdGhpcwotICBvcmRlcikuCi0KLSogW0RyaXZlcl0gVGhlIGZsYWdzIGZpZWxkIG9mIHRoZSBpMmNfZHJpdmVyIHN0cnVjdHVyZSBpcyBnb25lLgotICBJMkNfREZfTk9USUZZIGlzIG5vdyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KLSAgVGhlIGkyY19kcml2ZXIgc3RydWN0dXJlIGhhcyBhIGRyaXZlciBtZW1iZXIsIHdoaWNoIGlzIGl0c2VsZiBhCi0gIHN0cnVjdHVyZSwgdGhvc2UgbmFtZSBtZW1iZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIGEgZHJpdmVyIG5hbWUKLSAgc3RyaW5nLiBpMmNfZHJpdmVyIGl0c2VsZiBoYXMgbm8gbmFtZSBtZW1iZXIgYW55bW9yZS4KLQotKiBbRHJpdmVyIG1vZGVsXSBJbnN0ZWFkIG9mIHNodXRkb3duIG9yIHJlYm9vdCBub3RpZmllcnMsIHByb3ZpZGUgYQotICBzaHV0ZG93bigpIG1ldGhvZCBpbiB5b3VyIGRyaXZlci4KLQotKiBbUG93ZXIgbWFuYWdlbWVudF0gVXNlIHRoZSBkcml2ZXIgbW9kZWwgc3VzcGVuZCgpIGFuZCByZXN1bWUoKQotICBjYWxsYmFja3MgaW5zdGVhZCBvZiB0aGUgb2Jzb2xldGUgcG1fcmVnaXN0ZXIoKSBjYWxscy4KLQotQ29kaW5nIHBvbGljeToKLQotKiBbQ29weXJpZ2h0XSBVc2UgKEMpLCBub3QgKGMpLCBmb3IgY29weXJpZ2h0LgotCi0qIFtEZWJ1Zy9sb2ddIEdldCByaWQgb2YgI2lmZGVmIERFQlVHLyNlbmRpZiBjb25zdHJ1Y3RzIHdoZW5ldmVyIHlvdQotICBjYW4uIENhbGxzIHRvIHByaW50ayBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFyZSByZXBsYWNlZCBieSBjYWxscyB0bwotICBkZXZfZGJnIHdoZXJlIHBvc3NpYmxlLCBlbHNlIHRvIHByX2RlYnVnLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93Ci0gIHRvIGNhbGwgaXQgKHRha2VuIGZyb20gbG03NV9kZXRlY3QpOgotICBkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGxtNzUgdXBkYXRlXG4iKTsKLSAgUmVwbGFjZSBvdGhlciBwcmludGsgY2FsbHMgd2l0aCB0aGUgZGV2X2luZm8sIGRldl9lcnIgb3IgZGV2X3dhcm4KLSAgZnVuY3Rpb24sIGFzIGFwcHJvcHJpYXRlLgotCi0qIFtDb25zdGFudHNdIENvbnN0YW50cyBkZWZpbmVzIChyZWdpc3RlcnMsIGNvbnZlcnNpb25zKSBzaG91bGQgYmUKLSAgYWxpZ25lZC4gVGhpcyBncmVhdGx5IGltcHJvdmVzIHJlYWRhYmlsaXR5LgotICBBbGlnbm1lbnRzIGFyZSBhY2hpZXZlZCBieSB0aGUgbWVhbnMgb2YgdGFicywgbm90IHNwYWNlcy4gUmVtZW1iZXIKLSAgdGhhdCB0YWJzIGFyZSBzZXQgdG8gOCBpbiB0aGUgTGludXgga2VybmVsIGNvZGUuCi0KLSogW0xheW91dF0gQXZvaWQgZXh0cmEgZW1wdHkgbGluZXMgYmV0d2VlbiBjb21tZW50cyBhbmQgd2hhdCB0aGV5Ci0gIGNvbW1lbnQuIFJlc3BlY3QgdGhlIGNvZGluZyBzdHlsZSAoc2VlIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUpLAotICBpbiBwYXJ0aWN1bGFyIHdoZW4gaXQgY29tZXMgdG8gcGxhY2luZyBjdXJseSBicmFjZXMuCi0KLSogW0NvbW1lbnRzXSBNYWtlIHN1cmUgdGhhdCBubyBjb21tZW50IHJlZmVycyB0byBhIGZpbGUgdGhhdCBpc24ndAotICBwYXJ0IG9mIHRoZSBMaW51eCBzb3VyY2UgdHJlZSAodHlwaWNhbGx5IGRvYy9jaGlwcy88Y2hpcCBuYW1lPiksCi0gIGFuZCB0aGF0IHJlbWFpbmluZyBjb21tZW50cyBzdGlsbCBtYXRjaCB0aGUgY29kZS4gTWVyZ2luZyBjb21tZW50Ci0gIGxpbmVzIHdoZW4gcG9zc2libGUgaXMgZW5jb3VyYWdlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwppbmRleCBkNzNlZTExLi42YjlhZjdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCkBAIC0xMCwyMyArMTAsMjEgQEAKID09PT09PT09PT09PT09PQogCiBUcnkgdG8ga2VlcCB0aGUga2VybmVsIG5hbWVzcGFjZSBhcyBjbGVhbiBhcyBwb3NzaWJsZS4gVGhlIGJlc3Qgd2F5IHRvCi1kbyB0aGlzIGlzIHRvIHVzZSBhIHVuaXF1ZSBwcmVmaXggZm9yIGFsbCBnbG9iYWwgc3ltYm9scy4gVGhpcyBpcyAKK2RvIHRoaXMgaXMgdG8gdXNlIGEgdW5pcXVlIHByZWZpeCBmb3IgYWxsIGdsb2JhbCBzeW1ib2xzLiBUaGlzIGlzCiBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgZXhwb3J0ZWQgc3ltYm9scywgYnV0IGl0IGlzIGEgZ29vZCBpZGVhIHRvIGRvCiBpdCBmb3Igbm9uLWV4cG9ydGVkIHN5bWJvbHMgdG9vLiBXZSB3aWxsIHVzZSB0aGUgcHJlZml4IGBmb29fJyBpbiB0aGlzCi10dXRvcmlhbCwgYW5kIGBGT09fJyBmb3IgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KK3R1dG9yaWFsLgogCiAKIFRoZSBkcml2ZXIgc3RydWN0dXJlCiA9PT09PT09PT09PT09PT09PT09PQogCiBVc3VhbGx5LCB5b3Ugd2lsbCBpbXBsZW1lbnQgYSBzaW5nbGUgZHJpdmVyIHN0cnVjdHVyZSwgYW5kIGluc3RhbnRpYXRlCi1hbGwgY2xpZW50cyBmcm9tIGl0LiBSZW1lbWJlciwgYSBkcml2ZXIgc3RydWN0dXJlIGNvbnRhaW5zIGdlbmVyYWwgYWNjZXNzIAorYWxsIGNsaWVudHMgZnJvbSBpdC4gUmVtZW1iZXIsIGEgZHJpdmVyIHN0cnVjdHVyZSBjb250YWlucyBnZW5lcmFsIGFjY2Vzcwogcm91dGluZXMsIGFuZCBzaG91bGQgYmUgemVyby1pbml0aWFsaXplZCBleGNlcHQgZm9yIGZpZWxkcyB3aXRoIGRhdGEgeW91CiBwcm92aWRlLiAgQSBjbGllbnQgc3RydWN0dXJlIGhvbGRzIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBsaWtlIHRoZQogZHJpdmVyIG1vZGVsIGRldmljZSBub2RlLCBhbmQgaXRzIEkyQyBhZGRyZXNzLgogCi0vKiBpZmYgZHJpdmVyIHVzZXMgZHJpdmVyIG1vZGVsICgibmV3IHN0eWxlIikgYmluZGluZyBtb2RlbDogKi8KLQogc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGZvb19pZHRhYmxlW10gPSB7CiAJeyAiZm9vIiwgbXlfaWRfZm9yX2ZvbyB9LAogCXsgImJhciIsIG15X2lkX2Zvcl9iYXIgfSwKQEAgLTQwLDcgKzM4LDYgQEAKIAkJLm5hbWUJPSAiZm9vIiwKIAl9LAogCi0JLyogaWZmIGRyaXZlciB1c2VzIGRyaXZlciBtb2RlbCAoIm5ldyBzdHlsZSIpIGJpbmRpbmcgbW9kZWw6ICovCiAJLmlkX3RhYmxlCT0gZm9vX2lkcywKIAkucHJvYmUJCT0gZm9vX3Byb2JlLAogCS5yZW1vdmUJCT0gZm9vX3JlbW92ZSwKQEAgLTQ5LDI0ICs0NiwxOSBAQAogCS5kZXRlY3QJCT0gZm9vX2RldGVjdCwKIAkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIAotCS8qIGVsc2UsIGRyaXZlciB1c2VzICJsZWdhY3kiIGJpbmRpbmcgbW9kZWw6ICovCi0JLmF0dGFjaF9hZGFwdGVyCT0gZm9vX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50CT0gZm9vX2RldGFjaF9jbGllbnQsCi0KLQkvKiB0aGVzZSBtYXkgYmUgdXNlZCByZWdhcmRsZXNzIG9mIHRoZSBkcml2ZXIgYmluZGluZyBtb2RlbCAqLwogCS5zaHV0ZG93bgk9IGZvb19zaHV0ZG93biwJLyogb3B0aW9uYWwgKi8KIAkuc3VzcGVuZAk9IGZvb19zdXNwZW5kLAkvKiBvcHRpb25hbCAqLwogCS5yZXN1bWUJCT0gZm9vX3Jlc3VtZSwJLyogb3B0aW9uYWwgKi8KLQkuY29tbWFuZAk9IGZvb19jb21tYW5kLAkvKiBvcHRpb25hbCAqLworCS5jb21tYW5kCT0gZm9vX2NvbW1hbmQsCS8qIG9wdGlvbmFsLCBkZXByZWNhdGVkICovCiB9Ci0gCisKIFRoZSBuYW1lIGZpZWxkIGlzIHRoZSBkcml2ZXIgbmFtZSwgYW5kIG11c3Qgbm90IGNvbnRhaW4gc3BhY2VzLiAgSXQKIHNob3VsZCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgKGlmIHRoZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlKSwKIGFsdGhvdWdoIHlvdSBjYW4gdXNlIE1PRFVMRV9BTElBUyAocGFzc2luZyAiZm9vIiBpbiB0aGlzIGV4YW1wbGUpIHRvIGFkZAogYW5vdGhlciBuYW1lIGZvciB0aGUgbW9kdWxlLiAgSWYgdGhlIGRyaXZlciBuYW1lIGRvZXNuJ3QgbWF0Y2ggdGhlIG1vZHVsZQogbmFtZSwgdGhlIG1vZHVsZSB3b24ndCBiZSBhdXRvbWF0aWNhbGx5IGxvYWRlZCAoaG90cGx1Zy9jb2xkcGx1ZykuCiAKLUFsbCBvdGhlciBmaWVsZHMgYXJlIGZvciBjYWxsLWJhY2sgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgZXhwbGFpbmVkIAorQWxsIG90aGVyIGZpZWxkcyBhcmUgZm9yIGNhbGwtYmFjayBmdW5jdGlvbnMgd2hpY2ggd2lsbCBiZSBleHBsYWluZWQKIGJlbG93LgogCiAKQEAgLTc0LDM0ICs2NiwxMyBAQAogPT09PT09PT09PT09PT09PT0KIAogRWFjaCBjbGllbnQgc3RydWN0dXJlIGhhcyBhIHNwZWNpYWwgYGRhdGEnIGZpZWxkIHRoYXQgY2FuIHBvaW50IHRvIGFueQotc3RydWN0dXJlIGF0IGFsbC4gIFlvdSBzaG91bGQgdXNlIHRoaXMgdG8ga2VlcCBkZXZpY2Utc3BlY2lmaWMgZGF0YSwKLWVzcGVjaWFsbHkgaW4gZHJpdmVycyB0aGF0IGhhbmRsZSBtdWx0aXBsZSBJMkMgb3IgU01CVVMgZGV2aWNlcy4gIFlvdQotZG8gbm90IGFsd2F5cyBuZWVkIHRoaXMsIGJ1dCBlc3BlY2lhbGx5IGZvciBgc2Vuc29ycycgZHJpdmVycywgaXQgY2FuCi1iZSB2ZXJ5IHVzZWZ1bC4KK3N0cnVjdHVyZSBhdCBhbGwuICBZb3Ugc2hvdWxkIHVzZSB0aGlzIHRvIGtlZXAgZGV2aWNlLXNwZWNpZmljIGRhdGEuCiAKIAkvKiBzdG9yZSB0aGUgdmFsdWUgKi8KIAl2b2lkIGkyY19zZXRfY2xpZW50ZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB2b2lkICpkYXRhKTsKIAogCS8qIHJldHJpZXZlIHRoZSB2YWx1ZSAqLwotCXZvaWQgKmkyY19nZXRfY2xpZW50ZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLQotQW4gZXhhbXBsZSBzdHJ1Y3R1cmUgaXMgYmVsb3cuCi0KLSAgc3RydWN0IGZvb19kYXRhIHsKLSAgICBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7Ci0gICAgZW51bSBjaGlwcyB0eXBlOyAgICAgICAvKiBUbyBrZWVwIHRoZSBjaGlwcyB0eXBlIGZvciBgc2Vuc29ycycgZHJpdmVycy4gKi8KLSAgIAotICAgIC8qIEJlY2F1c2UgdGhlIGkyYyBidXMgaXMgc2xvdywgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGNhY2hlIHRoZSByZWFkCi0gICAgICAgaW5mb3JtYXRpb24gb2YgYSBjaGlwIGZvciBzb21lIHRpbWUgKGZvciBleGFtcGxlLCAxIG9yIDIgc2Vjb25kcykuCi0gICAgICAgSXQgZGVwZW5kcyBvZiBjb3Vyc2Ugb24gdGhlIGRldmljZSB3aGV0aGVyIHRoaXMgaXMgcmVhbGx5IHdvcnRod2hpbGUKLSAgICAgICBvciBldmVuIHNlbnNpYmxlLiAqLwotICAgIHN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsgICAgIC8qIFdoZW4gd2UgYXJlIHJlYWRpbmcgbG90cyBvZiBpbmZvcm1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHByb2Nlc3Mgc2hvdWxkIG5vdCB1cGRhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3cgaW5mb3JtYXRpb24gKi8KLSAgICBjaGFyIHZhbGlkOyAgICAgICAgICAgICAgICAgICAvKiAhPSAwIGlmIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZC4gKi8KLSAgICB1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgICAvKiBJbiBqaWZmaWVzICovCi0gICAgLyogQWRkIHRoZSByZWFkIGluZm9ybWF0aW9uIGhlcmUgdG9vICovCi0gIH07CisJdm9pZCAqaTJjX2dldF9jbGllbnRkYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiAKIEFjY2Vzc2luZyB0aGUgY2xpZW50CkBAIC0xMDksMTEgKzgwLDkgQEAKIAogTGV0J3Mgc2F5IHdlIGhhdmUgYSB2YWxpZCBjbGllbnQgc3RydWN0dXJlLiBBdCBzb21lIHRpbWUsIHdlIHdpbGwgbmVlZAogdG8gZ2F0aGVyIGluZm9ybWF0aW9uIGZyb20gdGhlIGNsaWVudCwgb3Igd3JpdGUgbmV3IGluZm9ybWF0aW9uIHRvIHRoZQotY2xpZW50LiBIb3cgd2Ugd2lsbCBleHBvcnQgdGhpcyBpbmZvcm1hdGlvbiB0byB1c2VyLXNwYWNlIGlzIGxlc3MgCi1pbXBvcnRhbnQgYXQgdGhpcyBtb21lbnQgKHBlcmhhcHMgd2UgZG8gbm90IG5lZWQgdG8gZG8gdGhpcyBhdCBhbGwgZm9yCi1zb21lIG9ic2N1cmUgY2xpZW50cykuIEJ1dCB3ZSBuZWVkIGdlbmVyaWMgcmVhZGluZyBhbmQgd3JpdGluZyByb3V0aW5lcy4KK2NsaWVudC4KIAotSSBoYXZlIGZvdW5kIGl0IHVzZWZ1bCB0byBkZWZpbmUgZm9vX3JlYWQgYW5kIGZvb193cml0ZSBmdW5jdGlvbiBmb3IgdGhpcy4KK0kgaGF2ZSBmb3VuZCBpdCB1c2VmdWwgdG8gZGVmaW5lIGZvb19yZWFkIGFuZCBmb29fd3JpdGUgZnVuY3Rpb25zIGZvciB0aGlzLgogRm9yIHNvbWUgY2FzZXMsIGl0IHdpbGwgYmUgZWFzaWVyIHRvIGNhbGwgdGhlIGkyYyBmdW5jdGlvbnMgZGlyZWN0bHksCiBidXQgbWFueSBjaGlwcyBoYXZlIHNvbWUga2luZCBvZiByZWdpc3Rlci12YWx1ZSBpZGVhIHRoYXQgY2FuIGVhc2lseQogYmUgZW5jYXBzdWxhdGVkLgpAQCAtMTIxLDMzICs5MCwzMyBAQAogVGhlIGJlbG93IGZ1bmN0aW9ucyBhcmUgc2ltcGxlIGV4YW1wbGVzLCBhbmQgc2hvdWxkIG5vdCBiZSBjb3BpZWQKIGxpdGVyYWxseS4KIAotICBpbnQgZm9vX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQotICB7Ci0gICAgaWYgKHJlZyA8IDB4MTApIC8qIGJ5dGUtc2l6ZWQgcmVnaXN0ZXIgKi8KLSAgICAgIHJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LHJlZyk7Ci0gICAgZWxzZSAvKiB3b3JkLXNpemVkIHJlZ2lzdGVyICovCi0gICAgICByZXR1cm4gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCxyZWcpOwotICB9CitpbnQgZm9vX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQoreworCWlmIChyZWcgPCAweDEwKQkvKiBieXRlLXNpemVkIHJlZ2lzdGVyICovCisJCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworCWVsc2UJCS8qIHdvcmQtc2l6ZWQgcmVnaXN0ZXIgKi8KKwkJcmV0dXJuIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7Cit9CiAKLSAgaW50IGZvb193cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHUxNiB2YWx1ZSkKLSAgewotICAgIGlmIChyZWcgPT0gMHgxMCkgLyogSW1wb3NzaWJsZSB0byB3cml0ZSAtIGRyaXZlciBlcnJvciEgKi8gewotICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgaWYgKHJlZyA8IDB4MTApIC8qIGJ5dGUtc2l6ZWQgcmVnaXN0ZXIgKi8KLSAgICAgIHJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCxyZWcsdmFsdWUpOwotICAgIGVsc2UgLyogd29yZC1zaXplZCByZWdpc3RlciAqLwotICAgICAgcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LHJlZyx2YWx1ZSk7Ci0gIH0KK2ludCBmb29fd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJaWYgKHJlZyA9PSAweDEwKQkvKiBJbXBvc3NpYmxlIHRvIHdyaXRlIC0gZHJpdmVyIGVycm9yISAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChyZWcgPCAweDEwKQkvKiBieXRlLXNpemVkIHJlZ2lzdGVyICovCisJCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CisJZWxzZQkJCS8qIHdvcmQtc2l6ZWQgcmVnaXN0ZXIgKi8KKwkJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KIAogCiBQcm9iaW5nIGFuZCBhdHRhY2hpbmcKID09PT09PT09PT09PT09PT09PT09PQogCiBUaGUgTGludXggSTJDIHN0YWNrIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gdG8gc3VwcG9ydCBhY2Nlc3MgdG8gaGFyZHdhcmUKLW1vbml0b3JpbmcgY2hpcHMgb24gUEMgbW90aGVyYm9hcmRzLCBhbmQgdGh1cyBpdCBlbWJlZHMgc29tZSBhc3N1bXB0aW9ucwotdGhhdCBhcmUgbW9yZSBhcHByb3ByaWF0ZSB0byBTTUJ1cyAoYW5kIFBDcykgdGhhbiB0byBJMkMuICBPbmUgb2YgdGhlc2UKLWFzc3VtcHRpb25zIGlzIHRoYXQgbW9zdCBhZGFwdGVycyBhbmQgZGV2aWNlcyBkcml2ZXJzIHN1cHBvcnQgdGhlIFNNQlVTX1FVSUNLCi1wcm90b2NvbCB0byBwcm9iZSBkZXZpY2UgcHJlc2VuY2UuICBBbm90aGVyIGlzIHRoYXQgZGV2aWNlcyBhbmQgdGhlaXIgZHJpdmVycworbW9uaXRvcmluZyBjaGlwcyBvbiBQQyBtb3RoZXJib2FyZHMsIGFuZCB0aHVzIHVzZWQgdG8gZW1iZWQgc29tZSBhc3N1bXB0aW9ucwordGhhdCB3ZXJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gU01CdXMgKGFuZCBQQ3MpIHRoYW4gdG8gSTJDLiAgT25lIG9mIHRoZXNlCithc3N1bXB0aW9ucyB3YXMgdGhhdCBtb3N0IGFkYXB0ZXJzIGFuZCBkZXZpY2VzIGRyaXZlcnMgc3VwcG9ydCB0aGUgU01CVVNfUVVJQ0sKK3Byb3RvY29sIHRvIHByb2JlIGRldmljZSBwcmVzZW5jZS4gIEFub3RoZXIgd2FzIHRoYXQgZGV2aWNlcyBhbmQgdGhlaXIgZHJpdmVycwogY2FuIGJlIHN1ZmZpY2llbnRseSBjb25maWd1cmVkIHVzaW5nIG9ubHkgc3VjaCBwcm9iZSBwcmltaXRpdmVzLgogCiBBcyBMaW51eCBhbmQgaXRzIEkyQyBzdGFjayBiZWNhbWUgbW9yZSB3aWRlbHkgdXNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zCkBAIC0xNjQsNiArMTMzLDkgQEAKIG9iamVjdHMgYWZ0ZXIgU01CdXMgc3R5bGUgcHJvYmluZywgd2hpbGUgdGhlIExpbnV4IGRyaXZlciBtb2RlbCBleHBlY3RzCiBkcml2ZXJzIHRvIGJlIGdpdmVuIHN1Y2ggZGV2aWNlIG9iamVjdHMgaW4gdGhlaXIgcHJvYmUoKSByb3V0aW5lcy4KIAorVGhlIGxlZ2FjeSBtb2RlbCBpcyBkZXByZWNhdGVkIG5vdyBhbmQgd2lsbCBzb29uIGJlIHJlbW92ZWQsIHNvIHdlIG5vCitsb25nZXIgZG9jdW1lbnQgaXQgaGVyZS4KKwogCiBTdGFuZGFyZCBEcml2ZXIgTW9kZWwgQmluZGluZyAoIk5ldyBTdHlsZSIpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTMsOCArMTY1LDggQEAKIHRoZSBkcml2ZXIga25vd3Mgd2hpY2ggb25lIGluIHRoZSB0YWJsZSBtYXRjaGVkLgogCiAKLURldmljZSBDcmVhdGlvbiAoU3RhbmRhcmQgZHJpdmVyIG1vZGVsKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEZXZpY2UgQ3JlYXRpb24KKy0tLS0tLS0tLS0tLS0tLQogCiBJZiB5b3Uga25vdyBmb3IgYSBmYWN0IHRoYXQgYW4gSTJDIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gYSBnaXZlbiBJMkMgYnVzLAogeW91IGNhbiBpbnN0YW50aWF0ZSB0aGF0IGRldmljZSBieSBzaW1wbHkgZmlsbGluZyBhbiBpMmNfYm9hcmRfaW5mbwpAQCAtMjIxLDggKzE5Myw4IEBACiByZWZlcmVuY2UgZm9yIGxhdGVyIHVzZS4KIAogCi1EZXZpY2UgRGV0ZWN0aW9uIChTdGFuZGFyZCBkcml2ZXIgbW9kZWwpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEZXZpY2UgRGV0ZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tCiAKIFNvbWV0aW1lcyB5b3UgZG8gbm90IGtub3cgaW4gYWR2YW5jZSB3aGljaCBJMkMgZGV2aWNlcyBhcmUgY29ubmVjdGVkIHRvCiBhIGdpdmVuIEkyQyBidXMuICBUaGlzIGlzIGZvciBleGFtcGxlIHRoZSBjYXNlIG9mIGhhcmR3YXJlIG1vbml0b3JpbmcKQEAgLTI0Niw4ICsyMTgsOCBAQAogcXVpY2tseS4KIAogCi1EZXZpY2UgRGVsZXRpb24gKFN0YW5kYXJkIGRyaXZlciBtb2RlbCkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRGV2aWNlIERlbGV0aW9uCistLS0tLS0tLS0tLS0tLS0KIAogRWFjaCBJMkMgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIGNyZWF0ZWQgdXNpbmcgaTJjX25ld19kZXZpY2UoKSBvcgogaTJjX25ld19wcm9iZWRfZGV2aWNlKCkgY2FuIGJlIHVucmVnaXN0ZXJlZCBieSBjYWxsaW5nCkBAIC0yNTYsMjY0ICsyMjgsMzcgQEAKIGRldmljZSBjYW4ndCBzdXJ2aXZlIGl0cyBwYXJlbnQgaW4gdGhlIGRldmljZSBkcml2ZXIgbW9kZWwuCiAKIAotTGVnYWN5IERyaXZlciBCaW5kaW5nIE1vZGVsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luaXRpYWxpemluZyB0aGUgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PQogCi1Nb3N0IGkyYyBkZXZpY2VzIGNhbiBiZSBwcmVzZW50IG9uIHNldmVyYWwgaTJjIGFkZHJlc3NlczsgZm9yIHNvbWUgdGhpcwotaXMgZGV0ZXJtaW5lZCBpbiBoYXJkd2FyZSAoYnkgc29sZGVyaW5nIHNvbWUgY2hpcCBwaW5zIHRvIFZjYyBvciBHcm91bmQpLAotZm9yIG90aGVycyB0aGlzIGNhbiBiZSBjaGFuZ2VkIGluIHNvZnR3YXJlIChieSB3cml0aW5nIHRvIHNwZWNpZmljIGNsaWVudAotcmVnaXN0ZXJzKS4gU29tZSBkZXZpY2VzIGFyZSB1c3VhbGx5IG9uIGEgc3BlY2lmaWMgYWRkcmVzcywgYnV0IG5vdCBhbHdheXM7Ci1hbmQgc29tZSBhcmUgZXZlbiBtb3JlIHRyaWNreS4gU28geW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBzY2FuIHNldmVyYWwKLWkyYyBhZGRyZXNzZXMgZm9yIHlvdXIgY2xpZW50cywgYW5kIGRvIHNvbWUgc29ydCBvZiBkZXRlY3Rpb24gdG8gc2VlCi13aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGEgZGV2aWNlIHN1cHBvcnRlZCBieSB5b3VyIGRyaXZlci4KK1doZW4gdGhlIGtlcm5lbCBpcyBib290ZWQsIG9yIHdoZW4geW91ciBmb28gZHJpdmVyIG1vZHVsZSBpcyBpbnNlcnRlZCwKK3lvdSBoYXZlIHRvIGRvIHNvbWUgaW5pdGlhbGl6aW5nLiBGb3J0dW5hdGVseSwganVzdCByZWdpc3RlcmluZyB0aGUKK2RyaXZlciBtb2R1bGUgaXMgdXN1YWxseSBlbm91Z2guCiAKLVRvIGdpdmUgdGhlIHVzZXIgYSBtYXhpbXVtIG9mIHBvc3NpYmlsaXRpZXMsIHNvbWUgZGVmYXVsdCBtb2R1bGUgcGFyYW1ldGVycwotYXJlIGRlZmluZWQgdG8gaGVscCBkZXRlcm1pbmUgd2hhdCBhZGRyZXNzZXMgYXJlIHNjYW5uZWQuIFNldmVyYWwgbWFjcm9zCi1hcmUgZGVmaW5lZCBpbiBpMmMuaCB0byBoZWxwIHlvdSBzdXBwb3J0IHRoZW0sIGFzIHdlbGwgYXMgYSBnZW5lcmljCi1kZXRlY3Rpb24gYWxnb3JpdGhtLgorc3RhdGljIGludCBfX2luaXQgZm9vX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmZvb19kcml2ZXIpOworfQogCi1Zb3UgZG8gbm90IGhhdmUgdG8gdXNlIHRoaXMgcGFyYW1ldGVyIGludGVyZmFjZTsgYnV0IGRvbid0IHRyeSB0byB1c2UKLWZ1bmN0aW9uIGkyY19wcm9iZSgpIGlmIHlvdSBkb24ndC4KK3N0YXRpYyB2b2lkIF9fZXhpdCBmb29fY2xlYW51cCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZmb29fZHJpdmVyKTsKK30KIAorLyogU3Vic3RpdHV0ZSB5b3VyIG93biBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzICovCitNT0RVTEVfQVVUSE9SKCJGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+IgorTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEJhcmYgSW5jLiBGb28gSTJDIGRldmljZXMiKTsKIAotUHJvYmluZyBjbGFzc2VzIChMZWdhY3kgbW9kZWwpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qIGEgZmV3IG5vbi1HUEwgbGljZW5zZSB0eXBlcyBhcmUgYWxzbyBhbGxvd2VkICovCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLUFsbCBwYXJhbWV0ZXJzIGFyZSBnaXZlbiBhcyBsaXN0cyBvZiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcnMuIExpc3RzIGFyZQotdGVybWluYXRlZCBieSBJMkNfQ0xJRU5UX0VORC4KLVRoZSBmb2xsb3dpbmcgbGlzdHMgYXJlIHVzZWQgaW50ZXJuYWxseToKK21vZHVsZV9pbml0KGZvb19pbml0KTsKK21vZHVsZV9leGl0KGZvb19jbGVhbnVwKTsKIAotICBub3JtYWxfaTJjOiBmaWxsZWQgaW4gYnkgdGhlIG1vZHVsZSB3cml0ZXIuIAotICAgICBBIGxpc3Qgb2YgSTJDIGFkZHJlc3NlcyB3aGljaCBzaG91bGQgbm9ybWFsbHkgYmUgZXhhbWluZWQuCi0gICBwcm9iZTogaW5zbW9kIHBhcmFtZXRlci4gCi0gICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwgCi0gICAgIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3MuIFRoZXNlIGFkZHJlc3NlcyBhcmUgYWxzbyBwcm9iZWQsIGFzIGlmIHRoZXkgCi0gICAgIHdlcmUgaW4gdGhlICdub3JtYWwnIGxpc3QuCi0gICBpZ25vcmU6IGluc21vZCBwYXJhbWV0ZXIuCi0gICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwgCi0gICAgIHRoZSBzZWNvbmQgaXMgdGhlIEkyQyBhZGRyZXNzLiBUaGVzZSBhZGRyZXNzZXMgYXJlIG5ldmVyIHByb2JlZC4gCi0gICAgIFRoaXMgcGFyYW1ldGVyIG92ZXJydWxlcyB0aGUgJ25vcm1hbF9pMmMnIGxpc3Qgb25seS4KLSAgIGZvcmNlOiBpbnNtb2QgcGFyYW1ldGVyLiAKLSAgICAgQSBsaXN0IG9mIHBhaXJzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyICgtMSBmb3IgYW55IEkyQyBidXMpLAotICAgICB0aGUgc2Vjb25kIGlzIHRoZSBJMkMgYWRkcmVzcy4gQSBkZXZpY2UgaXMgYmxpbmRseSBhc3N1bWVkIHRvIGJlIG9uCi0gICAgIHRoZSBnaXZlbiBhZGRyZXNzLCBubyBwcm9iaW5nIGlzIGRvbmUuIAotCi1BZGRpdGlvbmFsbHksIGtpbmQtc3BlY2lmaWMgZm9yY2UgbGlzdHMgbWF5IG9wdGlvbmFsbHkgYmUgZGVmaW5lZCBpZgotdGhlIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGNoaXAga2luZHMuIFRoZXkgYXJlIGdyb3VwZWQgaW4gYQotTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YgcG9pbnRlcnMgbmFtZWQgZm9yY2VzLCB0aG9zZSBmaXJzdCBlbGVtZW50IGlmIHRoZQotZ2VuZXJpYyBmb3JjZSBsaXN0IG1lbnRpb25lZCBhYm92ZS4gRWFjaCBhZGRpdGlvbmFsIGxpc3QgY29ycmVzcG9uZCB0byBhbgotaW5zbW9kIHBhcmFtZXRlciBvZiB0aGUgZm9ybSBmb3JjZV88a2luZD4uCi0KLUZvcnR1bmF0ZWx5LCBhcyBhIG1vZHVsZSB3cml0ZXIsIHlvdSBqdXN0IGhhdmUgdG8gZGVmaW5lIHRoZSBgbm9ybWFsX2kyYycgCi1wYXJhbWV0ZXIuIFRoZSBjb21wbGV0ZSBkZWNsYXJhdGlvbiBjb3VsZCBsb29rIGxpa2UgdGhpczoKLQotICAvKiBTY2FuIDB4NGMgdG8gMHg0ZiAqLwotICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDRjLCAweDRkLCAweDRlLCAweDRmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCB9OwotCi0gIC8qIE1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCi0gIEkyQ19DTElFTlRfSU5TTU9EOwotICAvKiBPciwgaWYgeW91ciBkcml2ZXIgc3VwcG9ydHMsIHNheSwgMiBraW5kIG9mIGRldmljZXM6ICovCi0gIEkyQ19DTElFTlRfSU5TTU9EXzIoZm9vLCBiYXIpOwotCi1JZiB5b3UgdXNlIHRoZSBtdWx0aS1raW5kIGZvcm0sIGFuIGVudW0gd2lsbCBiZSBkZWZpbmVkIGZvciB5b3U6Ci0gIGVudW0gY2hpcHMgeyBhbnlfY2hpcCwgZm9vLCBiYXIsIC4uLiB9Ci1Zb3UgY2FuIHRoZW4gKGFuZCBjZXJ0YWlubHkgc2hvdWxkKSB1c2UgaXQgaW4gdGhlIGRyaXZlciBjb2RlLgotCi1Ob3RlIHRoYXQgeW91ICpoYXZlKiB0byBjYWxsIHRoZSBkZWZpbmVkIHZhcmlhYmxlIGBub3JtYWxfaTJjJywKLXdpdGhvdXQgYW55IHByZWZpeCEKLQotCi1BdHRhY2hpbmcgdG8gYW4gYWRhcHRlciAoTGVnYWN5IG1vZGVsKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlbmV2ZXIgYSBuZXcgYWRhcHRlciBpcyBpbnNlcnRlZCwgb3IgZm9yIGFsbCBhZGFwdGVycyBpZiB0aGUgZHJpdmVyIGlzCi1iZWluZyByZWdpc3RlcmVkLCB0aGUgY2FsbGJhY2sgYXR0YWNoX2FkYXB0ZXIoKSBpcyBjYWxsZWQuIE5vdyBpcyB0aGUKLXRpbWUgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlcyBhcmUgcHJlc2VudCBvbiB0aGUgYWRhcHRlciwgYW5kIHRvIHJlZ2lzdGVyCi1hIGNsaWVudCBmb3IgZWFjaCBvZiB0aGVtLgotCi1UaGUgYXR0YWNoX2FkYXB0ZXIgY2FsbGJhY2sgaXMgcmVhbGx5IGVhc3k6IHdlIGp1c3QgY2FsbCB0aGUgZ2VuZXJpYwotZGV0ZWN0aW9uIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2NhbiB0aGUgYnVzIGZvciB1cywgdXNpbmcgdGhlCi1pbmZvcm1hdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBsaXN0cyBleHBsYWluZWQgYWJvdmUuIElmIGEgZGV2aWNlIGlzCi1kZXRlY3RlZCBhdCBhIHNwZWNpZmljIGFkZHJlc3MsIGFub3RoZXIgY2FsbGJhY2sgaXMgY2FsbGVkLgotCi0gIGludCBmb29fYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotICB7Ci0gICAgcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCZhZGRyX2RhdGEsJmZvb19kZXRlY3RfY2xpZW50KTsKLSAgfQotCi1SZW1lbWJlciwgc3RydWN0dXJlIGBhZGRyX2RhdGEnIGlzIGRlZmluZWQgYnkgdGhlIG1hY3JvcyBleHBsYWluZWQgYWJvdmUsCi1zbyB5b3UgZG8gbm90IGhhdmUgdG8gZGVmaW5lIGl0IHlvdXJzZWxmLgotCi1UaGUgaTJjX3Byb2JlIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgZm9vX2RldGVjdF9jbGllbnQKLWZ1bmN0aW9uIG9ubHkgZm9yIHRob3NlIGkyYyBhZGRyZXNzZXMgdGhhdCBhY3R1YWxseSBoYXZlIGEgZGV2aWNlIG9uCi10aGVtICh1bmxlc3MgYSBgZm9yY2UnIHBhcmFtZXRlciB3YXMgdXNlZCkuIEluIGFkZGl0aW9uLCBhZGRyZXNzZXMgdGhhdAotYXJlIGFscmVhZHkgaW4gdXNlIChieSBzb21lIG90aGVyIHJlZ2lzdGVyZWQgY2xpZW50KSBhcmUgc2tpcHBlZC4KLQotCi1UaGUgZGV0ZWN0IGNsaWVudCBmdW5jdGlvbiAoTGVnYWN5IG1vZGVsKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGRldGVjdCBjbGllbnQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZS4gVGhlIGBraW5kJyBwYXJhbWV0ZXIKLWNvbnRhaW5zIC0xIGZvciBhIHByb2JlZCBkZXRlY3Rpb24sIDAgZm9yIGEgZm9yY2VkIGRldGVjdGlvbiwgb3IgYSBwb3NpdGl2ZQotbnVtYmVyIGZvciBhIGZvcmNlZCBkZXRlY3Rpb24gd2l0aCBhIGNoaXAgdHlwZSBmb3JjZWQuCi0KLVJldHVybmluZyBhbiBlcnJvciBkaWZmZXJlbnQgZnJvbSAtRU5PREVWIGluIGEgZGV0ZWN0IGZ1bmN0aW9uIHdpbGwgY2F1c2UKLXRoZSBkZXRlY3Rpb24gdG8gc3RvcDogb3RoZXIgYWRkcmVzc2VzIGFuZCBhZGFwdGVycyB3b24ndCBiZSBzY2FubmVkLgotVGhpcyBzaG91bGQgb25seSBiZSBkb25lIG9uIGZhdGFsIG9yIGludGVybmFsIGVycm9ycywgc3VjaCBhcyBhIG1lbW9yeQotc2hvcnRhZ2Ugb3IgaTJjX2F0dGFjaF9jbGllbnQgZmFpbGluZy4KLQotRm9yIG5vdywgeW91IGNhbiBpZ25vcmUgdGhlIGBmbGFncycgcGFyYW1ldGVyLiBJdCBpcyB0aGVyZSBmb3IgZnV0dXJlIHVzZS4KLQotICBpbnQgZm9vX2RldGVjdF9jbGllbnQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQga2luZCkKLSAgewotICAgIGludCBlcnIgPSAwOwotICAgIGludCBpOwotICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0gICAgc3RydWN0IGZvb19kYXRhICpkYXRhOwotICAgIGNvbnN0IGNoYXIgKm5hbWUgPSAiIjsKLSAgIAotICAgIC8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQuCi0gICAgICAgUGxlYXNlIHN1YnN0aXR1dGUgdGhlIHRoaW5ncyB5b3UgbmVlZCBoZXJlISAqLwotICAgIGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlcixJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEUpKQotICAgICAgIGdvdG8gRVJST1IwOwotCi0gICAgLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKLSAgICAgICBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KLSAgICAgICBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2VzcyBzZXZlcmFsIGkyYyBmdW5jdGlvbnMgc2FmZWx5ICovCi0gICAgCi0gICAgaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmb29fZGF0YSksIEdGUF9LRVJORUwpKSkgewotICAgICAgZXJyID0gLUVOT01FTTsKLSAgICAgIGdvdG8gRVJST1IwOwotICAgIH0KLQotICAgIGNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0gICAgaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7Ci0KLSAgICBjbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotICAgIGNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0gICAgY2xpZW50LT5kcml2ZXIgPSAmZm9vX2RyaXZlcjsKLQotICAgIC8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uIElmIG5vIGBmb3JjZScgcGFyYW1ldGVyIGlzIHVzZWQuICovCi0KLSAgICAvKiBGaXJzdCwgdGhlIGdlbmVyaWMgZGV0ZWN0aW9uIChpZiBhbnkpLCB0aGF0IGlzIHNraXBwZWQgaWYgYW55IGZvcmNlCi0gICAgICAgcGFyYW1ldGVyIHdhcyB1c2VkLiAqLwotICAgIGlmIChraW5kIDwgMCkgewotICAgICAgLyogVGhlIGJlbG93IGlzIG9mIGNvdXJzZSBib2d1cyAqLwotICAgICAgaWYgKGZvb19yZWFkKGNsaWVudCwgRk9PX1JFR19HRU5FUklDKSAhPSBGT09fR0VORVJJQ19WQUxVRSkKLSAgICAgICAgIGdvdG8gRVJST1IxOwotICAgIH0KLQotICAgIC8qIE5leHQsIHNwZWNpZmljIGRldGVjdGlvbi4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgYHNlbnNvcnMnCi0gICAgICAgZGV2aWNlcy4gKi8KLQotICAgIC8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiBOb3QgbmVlZGVkIGlmIGEgYGZvcmNlX0NISVBUWVBFJyBwYXJhbWV0ZXIKLSAgICAgICB3YXMgdXNlZC4gKi8KLSAgICBpZiAoa2luZCA8PSAwKSB7Ci0gICAgICBpID0gZm9vX3JlYWQoY2xpZW50LCBGT09fUkVHX0NISVBUWVBFKTsKLSAgICAgIGlmIChpID09IEZPT19UWVBFXzEpIAotICAgICAgICBraW5kID0gY2hpcDE7IC8qIEFzIGRlZmluZWQgaW4gdGhlIGVudW0gKi8KLSAgICAgIGVsc2UgaWYgKGkgPT0gRk9PX1RZUEVfMikKLSAgICAgICAga2luZCA9IGNoaXAyOwotICAgICAgZWxzZSB7Ci0gICAgICAgIHByaW50aygiZm9vOiBJZ25vcmluZyAnZm9yY2UnIHBhcmFtZXRlciBmb3IgdW5rbm93biBjaGlwIGF0ICIKLSAgICAgICAgICAgICAgICJhZGFwdGVyICVkLCBhZGRyZXNzIDB4JTAyeFxuIixpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSxhZGRyZXNzKTsKLSAgICAgICAgZ290byBFUlJPUjE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogTm93IHNldCB0aGUgdHlwZSBhbmQgY2hpcCBuYW1lcyAqLwotICAgIGlmIChraW5kID09IGNoaXAxKSB7Ci0gICAgICBuYW1lID0gImNoaXAxIjsKLSAgICB9IGVsc2UgaWYgKGtpbmQgPT0gY2hpcDIpIHsKLSAgICAgIG5hbWUgPSAiY2hpcDIiOwotICAgIH0KLSAgIAotICAgIC8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzLiAqLwotICAgIHN0cmxjcHkoY2xpZW50LT5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKLSAgICBkYXRhLT50eXBlID0ga2luZDsKLSAgICBtdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7IC8qIE9ubHkgaWYgeW91IHVzZSB0aGlzIGZpZWxkICovCi0KLSAgICAvKiBBbnkgb3RoZXIgaW5pdGlhbGl6YXRpb25zIGluIGRhdGEgbXVzdCBiZSBkb25lIGhlcmUgdG9vLiAqLwotCi0gICAgLyogVGhpcyBmdW5jdGlvbiBjYW4gd3JpdGUgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIGNsaWVudCByZWdpc3RlcnMsIGlmCi0gICAgICAgbmVlZGVkLiAqLwotICAgIGZvb19pbml0X2NsaWVudChjbGllbnQpOwotCi0gICAgLyogVGVsbCB0aGUgaTJjIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotICAgIGlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCi0gICAgICBnb3RvIEVSUk9SMTsKLQotICAgIHJldHVybiAwOwotCi0gICAgLyogT0ssIHRoaXMgaXMgbm90IGV4YWN0bHkgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSwgdXN1YWxseS4gQnV0IGl0IGlzCi0gICAgICAgdmVyeSBjb2RlLWVmZmljaWVudCBpbiB0aGlzIGNhc2UuICovCi0KLSAgICBFUlJPUjE6Ci0gICAgICBrZnJlZShkYXRhKTsKLSAgICBFUlJPUjA6Ci0gICAgICByZXR1cm4gZXJyOwotICB9Ci0KLQotUmVtb3ZpbmcgdGhlIGNsaWVudCAoTGVnYWN5IG1vZGVsKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgZGV0YWNoX2NsaWVudCBjYWxsIGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBjbGllbnQgc2hvdWxkIGJlCi1yZW1vdmVkLiBJdCBtYXkgYWN0dWFsbHkgZmFpbCwgYnV0IG9ubHkgd2hlbiBwYW5pY2tpbmcuIFRoaXMgY29kZSBpcwotbXVjaCBzaW1wbGVyIHRoYW4gdGhlIGF0dGFjaG1lbnQgY29kZSwgZm9ydHVuYXRlbHkhCi0KLSAgaW50IGZvb19kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi0gIHsKLSAgICBpbnQgZXJyOwotCi0gICAgLyogVHJ5IHRvIGRldGFjaCB0aGUgY2xpZW50IGZyb20gaTJjIHNwYWNlICovCi0gICAgaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKLSAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotCi1Jbml0aWFsaXppbmcgdGhlIG1vZHVsZSBvciBrZXJuZWwKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XaGVuIHRoZSBrZXJuZWwgaXMgYm9vdGVkLCBvciB3aGVuIHlvdXIgZm9vIGRyaXZlciBtb2R1bGUgaXMgaW5zZXJ0ZWQsIAoteW91IGhhdmUgdG8gZG8gc29tZSBpbml0aWFsaXppbmcuIEZvcnR1bmF0ZWx5LCBqdXN0IGF0dGFjaGluZyAocmVnaXN0ZXJpbmcpCi10aGUgZHJpdmVyIG1vZHVsZSBpcyB1c3VhbGx5IGVub3VnaC4KLQotICBzdGF0aWMgaW50IF9faW5pdCBmb29faW5pdCh2b2lkKQotICB7Ci0gICAgaW50IHJlczsKLSAgICAKLSAgICBpZiAoKHJlcyA9IGkyY19hZGRfZHJpdmVyKCZmb29fZHJpdmVyKSkpIHsKLSAgICAgIHByaW50aygiZm9vOiBEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZCwgbW9kdWxlIG5vdCBpbnNlcnRlZC5cbiIpOwotICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBzdGF0aWMgdm9pZCBfX2V4aXQgZm9vX2NsZWFudXAodm9pZCkKLSAgewotICAgIGkyY19kZWxfZHJpdmVyKCZmb29fZHJpdmVyKTsKLSAgfQotCi0gIC8qIFN1YnN0aXR1dGUgeW91ciBvd24gbmFtZSBhbmQgZW1haWwgYWRkcmVzcyAqLwotICBNT0RVTEVfQVVUSE9SKCJGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+IgotICBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQmFyZiBJbmMuIEZvbyBJMkMgZGV2aWNlcyIpOwotCi0gIC8qIGEgZmV3IG5vbi1HUEwgbGljZW5zZSB0eXBlcyBhcmUgYWxzbyBhbGxvd2VkICovCi0gIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotICBtb2R1bGVfaW5pdChmb29faW5pdCk7Ci0gIG1vZHVsZV9leGl0KGZvb19jbGVhbnVwKTsKLQotTm90ZSB0aGF0IHNvbWUgZnVuY3Rpb25zIGFyZSBtYXJrZWQgYnkgYF9faW5pdCcsIGFuZCBzb21lIGRhdGEgc3RydWN0dXJlcwotYnkgYF9faW5pdGRhdGEnLiAgVGhlc2UgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGNhbiBiZSByZW1vdmVkIGFmdGVyCi1rZXJuZWwgYm9vdGluZyAob3IgbW9kdWxlIGxvYWRpbmcpIGlzIGNvbXBsZXRlZC4KK05vdGUgdGhhdCBzb21lIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGJ5IGBfX2luaXQnLiAgVGhlc2UgZnVuY3Rpb25zIGNhbgorYmUgcmVtb3ZlZCBhZnRlciBrZXJuZWwgYm9vdGluZyAob3IgbW9kdWxlIGxvYWRpbmcpIGlzIGNvbXBsZXRlZC4KK0xpa2V3aXNlLCBmdW5jdGlvbnMgbWFya2VkIGJ5IGBfX2V4aXQnIGFyZSBkcm9wcGVkIGJ5IHRoZSBjb21waWxlciB3aGVuCit0aGUgY29kZSBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIGFzIHRoZXkgd291bGQgbmV2ZXIgYmUgY2FsbGVkLgogCiAKIFBvd2VyIE1hbmFnZW1lbnQKQEAgLTU0OCwzMyArMjkzLDM1IEBACiAKIEEgZ2VuZXJpYyBpb2N0bC1saWtlIGZ1bmN0aW9uIGNhbGwgYmFjayBpcyBzdXBwb3J0ZWQuIFlvdSB3aWxsIHNlbGRvbQogbmVlZCB0aGlzLCBhbmQgaXRzIHVzZSBpcyBkZXByZWNhdGVkIGFueXdheSwgc28gbmV3ZXIgZGVzaWduIHNob3VsZCBub3QKLXVzZSBpdC4gU2V0IGl0IHRvIE5VTEwuCit1c2UgaXQuCiAKIAogU2VuZGluZyBhbmQgcmVjZWl2aW5nCiA9PT09PT09PT09PT09PT09PT09PT0KIAogSWYgeW91IHdhbnQgdG8gY29tbXVuaWNhdGUgd2l0aCB5b3VyIGRldmljZSwgdGhlcmUgYXJlIHNldmVyYWwgZnVuY3Rpb25zCi10byBkbyB0aGlzLiBZb3UgY2FuIGZpbmQgYWxsIG9mIHRoZW0gaW4gaTJjLmguCit0byBkbyB0aGlzLiBZb3UgY2FuIGZpbmQgYWxsIG9mIHRoZW0gaW4gPGxpbnV4L2kyYy5oPi4KIAotSWYgeW91IGNhbiBjaG9vc2UgYmV0d2VlbiBwbGFpbiBpMmMgY29tbXVuaWNhdGlvbiBhbmQgU01CdXMgbGV2ZWwKLWNvbW11bmljYXRpb24sIHBsZWFzZSB1c2UgdGhlIGxhc3QuIEFsbCBhZGFwdGVycyB1bmRlcnN0YW5kIFNNQnVzIGxldmVsCi1jb21tYW5kcywgYnV0IG9ubHkgc29tZSBvZiB0aGVtIHVuZGVyc3RhbmQgcGxhaW4gaTJjIQorSWYgeW91IGNhbiBjaG9vc2UgYmV0d2VlbiBwbGFpbiBJMkMgY29tbXVuaWNhdGlvbiBhbmQgU01CdXMgbGV2ZWwKK2NvbW11bmljYXRpb24sIHBsZWFzZSB1c2UgdGhlIGxhdHRlci4gQWxsIGFkYXB0ZXJzIHVuZGVyc3RhbmQgU01CdXMgbGV2ZWwKK2NvbW1hbmRzLCBidXQgb25seSBzb21lIG9mIHRoZW0gdW5kZXJzdGFuZCBwbGFpbiBJMkMhCiAKIAotUGxhaW4gaTJjIGNvbW11bmljYXRpb24KK1BsYWluIEkyQyBjb21tdW5pY2F0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gIGV4dGVybiBpbnQgaTJjX21hc3Rlcl9zZW5kKHN0cnVjdCBpMmNfY2xpZW50ICosY29uc3QgY2hhciogLGludCk7Ci0gIGV4dGVybiBpbnQgaTJjX21hc3Rlcl9yZWN2KHN0cnVjdCBpMmNfY2xpZW50ICosY2hhciogLGludCk7CisJaW50IGkyY19tYXN0ZXJfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgaW50IGNvdW50KTsKKwlpbnQgaTJjX21hc3Rlcl9yZWN2KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKIAogVGhlc2Ugcm91dGluZXMgcmVhZCBhbmQgd3JpdGUgc29tZSBieXRlcyBmcm9tL3RvIGEgY2xpZW50LiBUaGUgY2xpZW50CiBjb250YWlucyB0aGUgaTJjIGFkZHJlc3MsIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBpbmNsdWRlIGl0LiBUaGUgc2Vjb25kCi1wYXJhbWV0ZXIgY29udGFpbnMgdGhlIGJ5dGVzIHRoZSByZWFkL3dyaXRlLCB0aGUgdGhpcmQgdGhlIGxlbmd0aCBvZiB0aGUKLWJ1ZmZlci4gUmV0dXJuZWQgaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZC93cml0dGVuLgotICAKLSAgZXh0ZXJuIGludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtKTsKK3BhcmFtZXRlciBjb250YWlucyB0aGUgYnl0ZXMgdG8gcmVhZC93cml0ZSwgdGhlIHRoaXJkIHRoZSBudW1iZXIgb2YgYnl0ZXMKK3RvIHJlYWQvd3JpdGUgKG11c3QgYmUgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4pIFJldHVybmVkIGlzCit0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyByZWFkL3dyaXR0ZW4uCisKKwlpbnQgaTJjX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZywKKwkJCSBpbnQgbnVtKTsKIAogVGhpcyBzZW5kcyBhIHNlcmllcyBvZiBtZXNzYWdlcy4gRWFjaCBtZXNzYWdlIGNhbiBiZSBhIHJlYWQgb3Igd3JpdGUsCiBhbmQgdGhleSBjYW4gYmUgbWl4ZWQgaW4gYW55IHdheS4gVGhlIHRyYW5zYWN0aW9ucyBhcmUgY29tYmluZWQ6IG5vCkBAIC01ODMsNDkgKzMzMCw0NSBAQAogYW5kIHRoZSBtZXNzYWdlIGRhdGEgaXRzZWxmLgogCiBZb3UgY2FuIHJlYWQgdGhlIGZpbGUgYGkyYy1wcm90b2NvbCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi1hY3R1YWwgaTJjIHByb3RvY29sLgorYWN0dWFsIEkyQyBwcm90b2NvbC4KIAogCiBTTUJ1cyBjb21tdW5pY2F0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgZXh0ZXJuIHMzMiBpMmNfc21idXNfeGZlciAoc3RydWN0IGkyY19hZGFwdGVyICogYWRhcHRlciwgdTE2IGFkZHIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaTJjX3NtYnVzX2RhdGEgKiBkYXRhKTsKKwlzMzIgaTJjX3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1MTYgYWRkciwKKwkJCSAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsCisJCQkgICBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpOwogCi0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgU01CdXMgZnVuY3Rpb24uIEFsbCBmdW5jdGlvbnMgYmVsb3cgYXJlIGltcGxlbWVudGVkCi0gIGluIHRlcm1zIG9mIGl0LiBOZXZlciB1c2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEKK1RoaXMgaXMgdGhlIGdlbmVyaWMgU01CdXMgZnVuY3Rpb24uIEFsbCBmdW5jdGlvbnMgYmVsb3cgYXJlIGltcGxlbWVudGVkCitpbiB0ZXJtcyBvZiBpdC4gTmV2ZXIgdXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhCiAKLQotICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQpOwotICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7Ci0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCBjb21tYW5kKTsKLSAgZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggdmFsdWUpOwotICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggY29tbWFuZCk7Ci0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7Ci0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTE2IHZhbHVlKTsKLSAgZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggKnZhbHVlcyk7Ci0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICp2YWx1ZXMpOwotICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4IGxlbmd0aCwgdTggKnZhbHVlcyk7Ci0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1OCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICp2YWx1ZXMpOworCXMzMiBpMmNfc21idXNfcmVhZF9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCXMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCB2YWx1ZSk7CisJczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kKTsKKwlzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgIHU4IGNvbW1hbmQsIHU4IHZhbHVlKTsKKwlzMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQpOworCXMzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICAgdTggY29tbWFuZCwgdTE2IHZhbHVlKTsKKwlzMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisJczMyIGkyY19zbWJ1c19yZWFkX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICB1OCBjb21tYW5kLCB1OCAqdmFsdWVzKTsKKwlzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLCBjb25zdCB1OCAqdmFsdWVzKTsKKwlzMzIgaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJICB1OCBjb21tYW5kLCB1OCBsZW5ndGgsIHU4ICp2YWx1ZXMpOworCXMzMiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorCQkJCQkgICBjb25zdCB1OCAqdmFsdWVzKTsKIAogVGhlc2Ugb25lcyB3ZXJlIHJlbW92ZWQgZnJvbSBpMmMtY29yZSBiZWNhdXNlIHRoZXkgaGFkIG5vIHVzZXJzLCBidXQgY291bGQKIGJlIGFkZGVkIGJhY2sgbGF0ZXIgaWYgbmVlZGVkOgogCi0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX3F1aWNrKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7Ci0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX2Jsb2NrX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhbHVlcykKKwlzMzIgaTJjX3NtYnVzX3dyaXRlX3F1aWNrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHZhbHVlKTsKKwlzMzIgaTJjX3NtYnVzX2Jsb2NrX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQkgdTggY29tbWFuZCwgdTggbGVuZ3RoLCB1OCAqdmFsdWVzKTsKIAogQWxsIHRoZXNlIHRyYW5zYWN0aW9ucyByZXR1cm4gYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvbiBmYWlsdXJlLiBUaGUgJ3dyaXRlJwogdHJhbnNhY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3M7IHRoZSAncmVhZCcgdHJhbnNhY3Rpb25zIHJldHVybiB0aGUgcmVhZApAQCAtNjQyLDcgKzM4NSw1IEBACiBCZWxvdyBhbGwgZ2VuZXJhbCBwdXJwb3NlIHJvdXRpbmVzIGFyZSBsaXN0ZWQsIHRoYXQgd2VyZSBub3QgbWVudGlvbmVkCiBiZWZvcmUuCiAKLSAgLyogVGhpcyBjYWxsIHJldHVybnMgYSB1bmlxdWUgbG93IGlkZW50aWZpZXIgZm9yIGVhY2ggcmVnaXN0ZXJlZCBhZGFwdGVyLgotICAgKi8KLSAgZXh0ZXJuIGludCBpMmNfYWRhcHRlcl9pZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOwotCisJLyogUmV0dXJuIHRoZSBhZGFwdGVyIG51bWJlciBmb3IgYSBzcGVjaWZpYyBhZGFwdGVyICovCisJaW50IGkyY19hZGFwdGVyX2lkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQveGVuLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC94ZW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MWE5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lhNjQveGVuLnR4dApAQCAtMCwwICsxLDE4MyBAQAorICAgICAgIFJlY2lwZSBmb3IgZ2V0dGluZy9idWlsZGluZy9ydW5uaW5nIFhlbi9pYTY0IHdpdGggcHZfb3BzCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyByZWNpcGUgZGVzY3JpYmVzIGhvdyB0byBnZXQgeGVuLWlhNjQgc291cmNlIGFuZCBidWlsZCBpdCwKK2FuZCBydW4gZG9tVSB3aXRoIHB2X29wcy4KKworPT09PT09PT09PT09CitSZXF1aXJlbWVudHMKKz09PT09PT09PT09PQorCisgIC0gcHl0aG9uCisgIC0gbWVyY3VyaWFsCisgICAgaXQgKGFrYSAiaGciKSBpcyBhbiBvcGVuLXNvdXJjZSBzb3VyY2UgY29kZQorICAgIG1hbmFnZW1lbnQgc29mdHdhcmUuIFNlZSB0aGUgYmVsb3cuCisgICAgaHR0cDovL3d3dy5zZWxlbmljLmNvbS9tZXJjdXJpYWwvd2lraS8KKyAgLSBnaXQKKyAgLSBicmlkZ2UtdXRpbHMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitHZXR0aW5nIGFuZCBCdWlsZGluZyBYZW4gYW5kIERvbTAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIE15IGVudmlyb25tZW50IGlzOworICAgIE1hY2hpbmUgIDogVGlnZXI0CisgICAgRG9tYWluMCBPUyAgOiBSSEVMNQorICAgIERvbWFpblUgT1MgIDogUkhFTDUKKworIDEuIERvd25sb2FkIHNvdXJjZQorICAgICMgaGcgY2xvbmUgaHR0cDovL3hlbmJpdHMueGVuc291cmNlLmNvbS9leHQvaWE2NC94ZW4tdW5zdGFibGUuaGcKKyAgICAjIGNkIHhlbi11bnN0YWJsZS5oZworICAgICMgaGcgY2xvbmUgaHR0cDovL3hlbmJpdHMueGVuc291cmNlLmNvbS9leHQvaWE2NC9saW51eC0yLjYuMTgteGVuLmhnCisKKyAyLiAjIG1ha2Ugd29ybGQKKworIDMuICMgbWFrZSBpbnN0YWxsLXRvb2xzCisKKyA0LiBjb3B5IGtlcm5lbHMgYW5kIHhlbgorICAgICMgY3AgeGVuL3hlbi5neiAvYm9vdC9lZmkvZWZpL3JlZGhhdC8KKyAgICAjIGNwIGJ1aWxkLWxpbnV4LTIuNi4xOC14ZW5faWE2NC92bWxpbnV4Lmd6IFwKKyAgICAgIC9ib290L2VmaS9lZmkvcmVkaGF0L3ZtbGludXotMi42LjE4LjgteGVuCisKKyA1LiBtYWtlIGluaXRyZCBmb3IgRG9tMC9Eb21VCisgICAgIyBtYWtlIC1DIGxpbnV4LTIuNi4xOC14ZW4uaGcgQVJDSD1pYTY0IG1vZHVsZXNfaW5zdGFsbCBcCisgICAgICBPPSQoL2Jpbi9wd2QpL2J1aWxkLWxpbnV4LTIuNi4xOC14ZW5faWE2NAorICAgICMgbWtpbml0cmQgLWYgL2Jvb3QvZWZpL2VmaS9yZWRoYXQvaW5pdHJkLTIuNi4xOC44LXhlbi5pbWcgXAorICAgICAgMi42LjE4LjgteGVuIC0tYnVpbHRpbiBtcHRzcGkgLS1idWlsdGluIG1wdGJhc2UgXAorICAgICAgLS1idWlsdGluIG1wdHNjc2loIC0tYnVpbHRpbiB1aGNpLWhjZCAtLWJ1aWx0aW4gb2hjaS1oY2QgXAorICAgICAgLS1idWlsdGluIGVoY2ktaGNkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitNYWtpbmcgYSBkaXNrIGltYWdlIGZvciBndWVzdCBPUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIDEuIG1ha2UgZmlsZQorICAgICMgZGQgaWY9L2Rldi96ZXJvIG9mPS9yb290L3JoZWw1LmltZyBicz0xTSBzZWVrPTQwOTYgY291bnQ9MAorICAgICMgbWtlMmZzIC1GIC1qIC9yb290L3JoZWw1LmltZworICAgICMgbW91bnQgLW8gbG9vcCAvcm9vdC9yaGVsNS5pbWcgL21udAorICAgICMgY3AgLWF4IC97ZGV2LHZhcixldGMsdXNyLGJpbixzYmluLGxpYn0gL21udAorICAgICMgbWtkaXIgL21udC97cm9vdCxwcm9jLHN5cyxob21lLHRtcH0KKworICAgIE5vdGU6IFlvdSBtYXkgbWlzcyBzb21lIGRldmljZSBmaWxlcy4gSWYgc28sIHBsZWFzZSBjcmVhdGUgdGhlbQorICAgIHdpdGggbWtub2QuIE9yIHlvdSBjYW4gdXNlIHRhciBpbnN0ZWFkIG9mIGNwLgorCisgMi4gbW9kaWZ5IERvbVUncyBmc3RhYgorICAgICMgdmkgL21udC9ldGMvZnN0YWIKKyAgICAgICAvZGV2L3h2ZGExICAvICAgICAgICAgICAgZXh0MyAgICBkZWZhdWx0cyAgICAgICAgMSAxCisgICAgICAgbm9uZSAgICAgICAgL2Rldi9wdHMgICAgIGRldnB0cyAgZ2lkPTUsbW9kZT02MjAgIDAgMAorICAgICAgIG5vbmUgICAgICAgIC9kZXYvc2htICAgICB0bXBmcyAgIGRlZmF1bHRzICAgICAgICAwIDAKKyAgICAgICBub25lICAgICAgICAvcHJvYyAgICAgICAgcHJvYyAgICBkZWZhdWx0cyAgICAgICAgMCAwCisgICAgICAgbm9uZSAgICAgICAgL3N5cyAgICAgICAgIHN5c2ZzICAgZGVmYXVsdHMgICAgICAgIDAgMAorCisgMy4gbW9kaWZ5IGluaXR0YWIKKyAgICBzZXQgcnVubGV2ZWwgdG8gMyB0byBhdm9pZCBYIHRyeWluZyB0byBzdGFydAorICAgICMgdmkgL21udC9ldGMvaW5pdHRhYgorICAgICAgIGlkOjM6aW5pdGRlZmF1bHQ6CisgICAgU3RhcnQgYSBnZXR0eSBvbiB0aGUgaHZjMCBjb25zb2xlCisgICAgICAgWDA6MjM0NTpyZXNwYXduOi9zYmluL21pbmdldHR5IGh2YzAKKyAgICB0dHkxLTYgbWluZ2V0dHkgY2FuIGJlIGNvbW1lbnRlZCBvdXQKKworIDQuIGFkZCBodmMwIGludG8gL2V0Yy9zZWN1cmV0dHkKKyAgICAjIHZpIC9tbnQvZXRjL3NlY3VyZXR0eSAoYWRkIGh2YzApCisKKyA1LiB1bW91bnQKKyAgICAjIHVtb3VudCAvbW50CisKK0ZZSSwgdmlydC1tYW5hZ2VyIGNhbiBhbHNvIG1ha2UgYSBkaXNrIGltYWdlIGZvciBndWVzdCBPUy4KK0l0J3MgR1VJIHRvb2xzIGFuZCBlYXN5IHRvIG1ha2UgaXQuCisKKz09PT09PT09PT09PT09PT09PQorQm9vdCBYZW4gJiBEb21haW4wCis9PT09PT09PT09PT09PT09PT0KKworIDEuIHJlcGxhY2UgZWxpbG8KKyAgICBlbGlsbyBvZiBSSEVMNSBjYW4gYm9vdCBYZW4gYW5kIERvbTAuCisgICAgSWYgeW91IHVzZSBvbGQgZWxpbG8gKGUuZyBSSEVMNCksIHBsZWFzZSBkb3dubG9hZCBmcm9tIHRoZSBiZWxvdworICAgIGh0dHA6Ly9lbGlsby5zb3VyY2Vmb3JnZS5uZXQvY2dpLWJpbi9ibG9zeG9tCisgICAgYW5kIGNvcHkgaW50byAvYm9vdC9lZmkvZWZpL3JlZGhhdC8KKyAgICAjIGNwIGVsaWxvLTMuNi1pYTY0LmVmaSAvYm9vdC9lZmkvZWZpL3JlZGhhdC9lbGlsby5lZmkKKworIDIuIG1vZGlmeSBlbGlsby5jb25mIChsaWtlIHRoZSBiZWxvdykKKyAgICAjIHZpIC9ib290L2VmaS9lZmkvcmVkaGF0L2VsaWxvLmNvbmYKKyAgICAgcHJvbXB0CisgICAgIHRpbWVvdXQ9MjAKKyAgICAgZGVmYXVsdD14ZW4KKyAgICAgcmVsb2NhdGFibGUKKworICAgICBpbWFnZT12bWxpbnV6LTIuNi4xOC44LXhlbgorICAgICAgICAgICAgIGxhYmVsPXhlbgorICAgICAgICAgICAgIHZtbT14ZW4uZ3oKKyAgICAgICAgICAgICBpbml0cmQ9aW5pdHJkLTIuNi4xOC44LXhlbi5pbWcKKyAgICAgICAgICAgICByZWFkLW9ubHkKKyAgICAgICAgICAgICBhcHBlbmQ9IiAtLSByaGdiIHJvb3Q9L2Rldi9zZGEyIgorCitUaGUgYXBwZW5kIG9wdGlvbnMgYmVmb3JlICItLSIgYXJlIGZvciB4ZW4gaHlwZXJ2aXNvciwKK3RoZSBvcHRpb25zIGFmdGVyICItLSIgYXJlIGZvciBkb20wLgorCitGWUksIHlvdXIgbWFjaGluZSBtYXkgbmVlZCBjb25zb2xlIG9wdGlvbnMgbGlrZQorImNvbTE9MTkyMDAsOG4xIGNvbnNvbGU9dmdhLGNvbTEiLiBGb3IgZXhhbXBsZSwKK2FwcGVuZD0iY29tMT0xOTIwMCw4bjEgY29uc29sZT12Z2EsY29tMSAtLSByaGdiIGNvbnNvbGU9dHR5MCBcCitjb25zb2xlPXR0eVMwIHJvb3Q9L2Rldi9zZGEyIgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitHZXR0aW5nIGFuZCBCdWlsZGluZyBkb21VIHdpdGggcHZfb3BzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAxLiBnZXQgcHZfb3BzIHRyZWUKKyAgICAjIGdpdCBjbG9uZSBodHRwOi8vcGVvcGxlLnZhbGludXguY28uanAvfnlhbWFoYXRhL3hlbi1pYTY0L2xpbnV4LTIuNi14ZW4taWE2NC5naXQvCisKKyAyLiBnaXQgYnJhbmNoIChpZiBuZWNlc3NhcnkpCisgICAgIyBjZCBsaW51eC0yLjYteGVuLWlhNjQvCisgICAgIyBnaXQgY2hlY2tvdXQgLWIgeW91cl9icmFuY2ggb3JpZ2luL3hlbi1pYTY0LWRvbXUtbWluaW1hbC0yMDA4bWF5MTkKKyAgICAoTm90ZTogVGhlIGN1cnJlbnQgYnJhbmNoIGlzIHhlbi1pYTY0LWRvbXUtbWluaW1hbC0yMDA4bWF5MTkuCisgICAgQnV0IHlvdSB3b3VsZCBmaW5kIHRoZSBuZXcgYnJhbmNoLiBZb3UgY2FuIHNlZSB3aXRoCisgICAgImdpdCBicmFuY2ggLXIiIHRvIGdldCB0aGUgYnJhbmNoIGxpc3RzLgorICAgIGh0dHA6Ly9wZW9wbGUudmFsaW51eC5jby5qcC9+eWFtYWhhdGEveGVuLWlhNjQvZm9yX2VhZ2wvbGludXgtMi42LWlhNjQtcHYtb3BzLmdpdC8KKyAgICBpcyBhbHNvIGF2YWlsYWJsZS4gVGhlIHRyZWUgaXMgYmFzZWQgb24KKyAgICBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWVnbC9saW51eC0yLjYgdGVzdCkKKworCisgMy4gY29weSAuY29uZmlnIGZvciBwdl9vcHMgb2YgZG9tVQorICAgICMgY3AgYXJjaC9pYTY0L2NvbmZpZ3MveGVuX2RvbXVfd2lwX2RlZmNvbmZpZyAuY29uZmlnCisKKyA0LiBtYWtlIGtlcm5lbCB3aXRoIHB2X29wcworICAgICMgbWFrZSBvbGRjb25maWcKKyAgICAjIG1ha2UKKworIDUuIGluc3RhbGwgdGhlIGtlcm5lbCBhbmQgaW5pdHJkCisgICAgIyBjcCB2bWxpbnV4Lmd6IC9ib290L2VmaS9lZmkvcmVkaGF0L3ZtbGludXotMi42LXB2X29wcy14ZW5VCisgICAgIyBtYWtlIG1vZHVsZXNfaW5zdGFsbAorICAgICMgbWtpbml0cmQgLWYgL2Jvb3QvZWZpL2VmaS9yZWRoYXQvaW5pdHJkLTIuNi1wdl9vcHMteGVuVS5pbWcgXAorICAgICAgMi42LjI2LXJjM3hlbi1pYTY0LTA4OTQxLWcxYjEyMTYxIC0tYnVpbHRpbiBtcHRzcGkgXAorICAgICAgLS1idWlsdGluIG1wdGJhc2UgLS1idWlsdGluIG1wdHNjc2loIC0tYnVpbHRpbiB1aGNpLWhjZCBcCisgICAgICAtLWJ1aWx0aW4gb2hjaS1oY2QgLS1idWlsdGluIGVoY2ktaGNkCisKKz09PT09PT09PT09PT09PT09PT09PT09PQorQm9vdCBEb21haW5VIHdpdGggcHZfb3BzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworIDEuIG1ha2UgY29uZmlnIG9mIERvbVUKKyAgICMgdmkgL2V0Yy94ZW4vcmhlbDUKKyAgICAga2VybmVsID0gIi9ib290L2VmaS9lZmkvcmVkaGF0L3ZtbGludXotMi42LXB2X29wcy14ZW5VIgorICAgICByYW1kaXNrID0gIi9ib290L2VmaS9lZmkvcmVkaGF0L2luaXRyZC0yLjYtcHZfb3BzLXhlblUuaW1nIgorICAgICB2Y3B1cyA9IDEKKyAgICAgbWVtb3J5ID0gNTEyCisgICAgIG5hbWUgPSAicmhlbDUiCisgICAgIGRpc2sgPSBbICdmaWxlOi9yb290L3JoZWw1LmltZyx4dmRhMSx3JyBdCisgICAgIHJvb3QgPSAiL2Rldi94dmRhMSBybyIKKyAgICAgZXh0cmE9ICJyaGdiIGNvbnNvbGU9aHZjMCIKKworIDIuIEFmdGVyIGJvb3QgeGVuIGFuZCBkb20wLCBzdGFydCB4ZW5kCisgICAjIC9ldGMvaW5pdC5kL3hlbmQgc3RhcnQKKyAgICggSW4gdGhlIGRlYnVnZ2luZyBjYXNlLCAjIFhFTkRfREVCVUc9MSB4ZW5kIHRyYWNlX3N0YXJ0ICkKKworIDMuIHN0YXJ0IGRvbVUKKyAgICMgeG0gY3JlYXRlIC1jIHJoZWw1CisKKz09PT09PT09PQorUmVmZXJlbmNlCis9PT09PT09PT0KKy0gV2lraSBvZiBYZW4vSUE2NCB1cHN0cmVhbSBtZXJnZQorICBodHRwOi8vd2lraS54ZW5zb3VyY2UuY29tL3hlbndpa2kvWGVuSUE2NC9VcHN0cmVhbU1lcmdlCisKK1dyaXR0ZW4gYnkgQWtpbyBUYWtlYmUgPHRha2ViZV9ha2lvQGpwLmZ1aml0c3UuY29tPiBvbiAyOCBNYXkgMjAwOApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CmluZGV4IDFjNmI1NDUuLmI4ODBjZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKQEAgLTkyLDYgKzkyLDcgQEAKICdKJwkwMC0xRglkcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCiAnSycJYWxsCWxpbnV4L2tkLmgKICdMJwkwMC0xRglsaW51eC9sb29wLmgKKydMJwkyMC0yRglkcml2ZXIvdXNiL21pc2MvdnN0dXNiLmgKICdMJwlFMC1GRglsaW51eC9wcGRkLmgJCWVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKIAkJCQkJPGh0dHA6Ly9saW51eDAxLmd3ZGcuZGUvfmFsYXRoYW0vcHBkZC5odG1sPgogJ00nCWFsbAlsaW51eC9zb3VuZGNhcmQuaApAQCAtMTEwLDYgKzExMSw4IEBACiAnVycJMDAtMUYJbGludXgvd2Fucm91dGVyLmgJY29uZmxpY3QhCiAnWCcJYWxsCWxpbnV4L3hmc19mcy5oCiAnWScJYWxsCWxpbnV4L2N5Y2xhZGVzLmgKKydbJwkwMC0wNwlsaW51eC91c2IvdXNidG1jLmgJVVNCIFRlc3QgYW5kIE1lYXN1cmVtZW50IERldmljZXMKKwkJCQkJPG1haWx0bzpncmVna2hAc3VzZS5kZT4KICdhJwlhbGwJCQkJQVRNIG9uIGxpbnV4CiAJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWw+CiAnYicJMDAtRkYJCQkJYml0MyB2bWUgaG9zdCBicmlkZ2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKaW5kZXggMDcwNTA0MC4uM2Y0YmM4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKQEAgLTEwOSw3ICsxMDksOCBAQAogMikgT3IgdXNlIHRoZSBzeXN0ZW0ga2VybmVsIGJpbmFyeSBpdHNlbGYgYXMgZHVtcC1jYXB0dXJlIGtlcm5lbCBhbmQgdGhlcmUgaXMKICAgIG5vIG5lZWQgdG8gYnVpbGQgYSBzZXBhcmF0ZSBkdW1wLWNhcHR1cmUga2VybmVsLiBUaGlzIGlzIHBvc3NpYmxlCiAgICBvbmx5IHdpdGggdGhlIGFyY2hpdGVjdXRyZXMgd2hpY2ggc3VwcG9ydCBhIHJlbG9jYXRhYmxlIGtlcm5lbC4gQXMKLSAgIG9mIHRvZGF5LCBpMzg2LCB4ODZfNjQgYW5kIGlhNjQgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IHJlbG9jYXRhYmxlIGtlcm5lbC4KKyAgIG9mIHRvZGF5LCBpMzg2LCB4ODZfNjQsIHBwYzY0IGFuZCBpYTY0IGFyY2hpdGVjdHVyZXMgc3VwcG9ydCByZWxvY2F0YWJsZQorICAga2VybmVsLgogCiBCdWlsZGluZyBhIHJlbG9jYXRhYmxlIGtlcm5lbCBpcyBhZHZhbnRhZ2VvdXMgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyB0aGF0CiBvbmUgZG9lcyBub3QgaGF2ZSB0byBidWlsZCBhIHNlY29uZCBrZXJuZWwgZm9yIGNhcHR1cmluZyB0aGUgZHVtcC4gQnV0CkBAIC0yMDcsOCArMjA4LDE1IEBACiBEdW1wLWNhcHR1cmUga2VybmVsIGNvbmZpZyBvcHRpb25zIChBcmNoIERlcGVuZGVudCwgcHBjNjQpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSogIE1ha2UgYW5kIGluc3RhbGwgdGhlIGtlcm5lbCBhbmQgaXRzIG1vZHVsZXMuIERPIE5PVCBhZGQgdGhpcyBrZXJuZWwKLSAgIHRvIHRoZSBib290IGxvYWRlciBjb25maWd1cmF0aW9uIGZpbGVzLgorMSkgRW5hYmxlICJCdWlsZCBhIGtkdW1wIGNyYXNoIGtlcm5lbCIgc3VwcG9ydCB1bmRlciAiS2VybmVsIiBvcHRpb25zOgorCisgICBDT05GSUdfQ1JBU0hfRFVNUD15CisKKzIpICAgRW5hYmxlICJCdWlsZCBhIHJlbG9jYXRhYmxlIGtlcm5lbCIgc3VwcG9ydAorCisgICBDT05GSUdfUkVMT0NBVEFCTEU9eQorCisgICBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLgogCiBEdW1wLWNhcHR1cmUga2VybmVsIGNvbmZpZyBvcHRpb25zIChBcmNoIERlcGVuZGVudCwgaWE2NCkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZGQyOGEwZC4uMzQzZTBmMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTEwMSw2ICsxMDEsNyBAQAogCVg4Ni02NAlYODYtNjQgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJCQlNb3JlIFg4Ni02NCBib290IG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluCiAJCQlEb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0IC4KKwlYODYJRWl0aGVyIDMyYml0IG9yIDY0Yml0IHg4NiAoc2FtZSBhcyBYODYtMzIrWDg2LTY0KQogCiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyB0ZXh0IGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb246CiAKQEAgLTIxNywyMCArMjE4LDQ3IEBACiAJYWNwaS5kZWJ1Z19sZXZlbD0JW0hXLEFDUEldCiAJCQlGb3JtYXQ6IDxpbnQ+CiAJCQlFYWNoIGJpdCBvZiB0aGUgPGludD4gaW5kaWNhdGVzIGFuIEFDUEkgZGVidWcgbGV2ZWwsCi0JCQkxOiBlbmFibGUsIDA6IGRpc2FibGUuIEl0IGlzIHVzZWZ1bCBmb3IgYm9vdCB0aW1lCi0JCQlkZWJ1Z2dpbmcuIEFmdGVyIHN5c3RlbSBoYXMgYm9vdGVkIHVwLCBpdCBjYW4gYmUgc2V0Ci0JCQl2aWEgL3N5cy9tb2R1bGUvYWNwaS9wYXJhbWV0ZXJzL2RlYnVnX2xldmVsLgotCQkJQ09ORklHX0FDUElfREVCVUcgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHByb2R1Y2UgYW55IG91dHB1dC4KLQkJCUF2YWlsYWJsZSBiaXRzIChhZGQgdGhlIG51bWJlcnMgdG9nZXRoZXIpIHRvIGVuYWJsZSBkaWZmZXJlbnQKLQkJCWRlYnVnIG91dHB1dCBsZXZlbHMgb2YgdGhlIEFDUEkgc3Vic3lzdGVtOgotCQkJMHgwMSBlcnJvciAweDAyIHdhcm4gMHgwNCBpbml0IDB4MDggZGVidWcgb2JqZWN0Ci0JCQkweDEwIGluZm8gMHgyMCBpbml0IG5hbWVzIDB4NDAgcGFyc2UgMHg4MCBsb2FkCi0JCQkweDEwMCBkaXNwYXRjaCAweDIwMCBleGVjdXRlIDB4NDAwIG5hbWVzIDB4ODAwIG9wZXJhdGlvbiByZWdpb24KLQkJCTB4MTAwMCBiZmllbGQgMHgyMDAwIHRhYmxlcyAweDQwMDAgdmFsdWVzIDB4ODAwMCBvYmplY3RzCi0JCQkweDEwMDAwIHJlc291cmNlcyAweDIwMDAwIHVzZXIgcmVxdWVzdHMgMHg0MDAwMCBwYWNrYWdlLgotCQkJVGhlIG51bWJlciBjYW4gYmUgaW4gZGVjaW1hbCBvciBwcmVmaXhlZCB3aXRoIDB4IGluIGhleC4KLQkJCVdhcm5pbmc6IE1hbnkgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gcHJvZHVjZSBhIGxvdCBvZgotCQkJb3V0cHV0IGFuZCBtYWtlIHlvdXIgc3lzdGVtIHVudXNhYmxlLiBCZSB2ZXJ5IGNhcmVmdWwuCisJCQl3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgbGV2ZWwgaW4gYW4gQUNQSV9ERUJVR19QUklOVAorCQkJc3RhdGVtZW50LiAgQWZ0ZXIgc3lzdGVtIGhhcyBib290ZWQgdXAsIHRoaXMgbWFzaworCQkJY2FuIGJlIHNldCB2aWEgL3N5cy9tb2R1bGUvYWNwaS9wYXJhbWV0ZXJzL2RlYnVnX2xldmVsLgorCisJCQlDT05GSUdfQUNQSV9ERUJVRyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gcHJvZHVjZQorCQkJYW55IG91dHB1dC4gIFRoZSBudW1iZXIgY2FuIGJlIGluIGRlY2ltYWwgb3IgcHJlZml4ZWQKKwkJCXdpdGggMHggaW4gaGV4LiAgU29tZSBvZiB0aGVzZSBvcHRpb25zIHByb2R1Y2Ugc28gbXVjaAorCQkJb3V0cHV0IHRoYXQgdGhlIHN5c3RlbSBpcyB1bnVzYWJsZS4KKworCQkJVGhlIGZvbGxvd2luZyBnbG9iYWwgY29tcG9uZW50cyBhcmUgZGVmaW5lZCBieSB0aGUKKwkJCUFDUEkgQ0E6CisJCQkgICAgICAgMHgwMSBlcnJvcgorCQkJICAgICAgIDB4MDIgd2FybgorCQkJICAgICAgIDB4MDQgaW5pdAorCQkJICAgICAgIDB4MDggZGVidWcgb2JqZWN0CisJCQkgICAgICAgMHgxMCBpbmZvCisJCQkgICAgICAgMHgyMCBpbml0IG5hbWVzCisJCQkgICAgICAgMHg0MCBwYXJzZQorCQkJICAgICAgIDB4ODAgbG9hZAorCQkJICAgICAgMHgxMDAgZGlzcGF0Y2gKKwkJCSAgICAgIDB4MjAwIGV4ZWN1dGUKKwkJCSAgICAgIDB4NDAwIG5hbWVzCisJCQkgICAgICAweDgwMCBvcGVyYXRpb24gcmVnaW9uCisJCQkgICAgIDB4MTAwMCBiZmllbGQKKwkJCSAgICAgMHgyMDAwIHRhYmxlcworCQkJICAgICAweDQwMDAgdmFsdWVzCisJCQkgICAgIDB4ODAwMCBvYmplY3RzCisJCQkgICAgMHgxMDAwMCByZXNvdXJjZXMKKwkJCSAgICAweDIwMDAwIHVzZXIgcmVxdWVzdHMKKwkJCSAgICAweDQwMDAwIHBhY2thZ2UKKyAJCQlUaGUgbnVtYmVyIGNhbiBiZSBpbiBkZWNpbWFsIG9yIHByZWZpeGVkIHdpdGggMHggaW4gaGV4LgorIAkJCVdhcm5pbmc6IE1hbnkgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gcHJvZHVjZSBhIGxvdCBvZgorIAkJCW91dHB1dCBhbmQgbWFrZSB5b3VyIHN5c3RlbSB1bnVzYWJsZS4gQmUgdmVyeSBjYXJlZnVsLgorCisgCWFjcGkucG93ZXJfbm9jaGVjaz0JW0hXLEFDUEldCisgCQkJRm9ybWF0OiAxLzAgZW5hYmxlL2Rpc2FibGUgdGhlIGNoZWNrIG9mIHBvd2VyIHN0YXRlLgorIAkJCU9uIHNvbWUgYm9ndXMgQklPUyB0aGUgX1BTQyBvYmplY3QvX1NUQSBvYmplY3Qgb2YKKyAJCQlwb3dlciByZXNvdXJjZSBjYW4ndCByZXR1cm4gdGhlIGNvcnJlY3QgZGV2aWNlIHBvd2VyCisgCQkJc3RhdGUuIEluIHN1Y2ggY2FzZSBpdCBpcyB1bm5lY2Nlc3NhcnkgdG8gY2hlY2sgaXRzCisgCQkJcG93ZXIgc3RhdGUgYWdhaW4gaW4gcG93ZXIgdHJhbnNpdGlvbi4KKyAJCQkxIDogZGlzYWJsZSB0aGUgcG93ZXIgc3RhdGUgY2hlY2sKIAogCWFjcGlfcG1fZ29vZAlbWDg2LTMyLFg4Ni02NF0KIAkJCU92ZXJyaWRlIHRoZSBwbXRpbWVyIGJ1ZyBkZXRlY3Rpb246IGZvcmNlIHRoZSBrZXJuZWwKQEAgLTY5MCw3ICs3MTgsNyBAQAogCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQgYW5kCiAJCQlEb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0IGZvciBkZXRhaWxzLgogCi0JZWxmY29yZWhkcj0JW1g4Ni0zMiwgWDg2XzY0XQorCWVsZmNvcmVoZHI9CVtJQTY0LFBQQyxTSCxYODYtMzIsWDg2XzY0XQogCQkJU3BlY2lmaWVzIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhcnQgb2Yga2VybmVsIGNvcmUKIAkJCWltYWdlIGVsZiBoZWFkZXIuIEdlbmVyYWxseSBrZXhlYyBsb2FkZXIgd2lsbAogCQkJcGFzcyB0aGlzIG9wdGlvbiB0byBjYXB0dXJlIGtlcm5lbC4KQEAgLTc5Niw2ICs4MjQsOCBAQAogCQkJRGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlJ3MgaHVnZSBwYWdlIHNpemUKIAkJCWlmIG5vdCBzcGVjaWZpZWQuCiAKKwlobHQJCVtCVUdTPUFSTSxTSF0KKwogCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKIAlpODA0Mi5kdW1ia2JkCVtIV10gUHJldGVuZCB0aGF0IGNvbnRyb2xsZXIgY2FuIG9ubHkgcmVhZCBkYXRhIGZyb20KQEAgLTEyMTEsNiArMTI0MSwxMCBAQAogCW1lbT1ub3BlbnRpdW0JW0JVR1M9WDg2LTMyXSBEaXNhYmxlIHVzYWdlIG9mIDRNQiBwYWdlcyBmb3Iga2VybmVsCiAJCQltZW1vcnkuCiAKKwltZW1jaHVuaz1ubltLTUddCisJCQlbS05MLFNIXSBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNpemUgZm9yCisJCQlwZXItZGV2aWNlIHBoeXNpY2FsbHkgY29udGlndW91cyBETUEgYnVmZmVycy4KKwogCW1lbW1hcD1leGFjdG1hcAlbS05MLFg4Ni0zMixYODZfNjRdIEVuYWJsZSBzZXR0aW5nIG9mIGFuIGV4YWN0CiAJCQlFODIwIG1lbW9yeSBtYXAsIGFzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KIAkJCVN1Y2ggbWVtbWFwPWV4YWN0bWFwIGxpbmVzIGNhbiBiZSBjb25zdHJ1Y3RlZCBiYXNlZCBvbgpAQCAtMTM5Myw2ICsxNDI3LDggQEAKIAogCW5vZGlzY29ubmVjdAlbSFcsU0NTSSxNNjhLXSBEaXNhYmxlcyBTQ1NJIGRpc2Nvbm5lY3RzLgogCisJbm9kc3AJCVtTSF0gRGlzYWJsZSBoYXJkd2FyZSBEU1AgYXQgYm9vdCB0aW1lLgorCiAJbm9lZmkJCVtYODYtMzIsWDg2LTY0XSBEaXNhYmxlIEVGSSBydW50aW1lIHNlcnZpY2VzIHN1cHBvcnQuCiAKIAlub2V4ZWMJCVtJQS02NF0KQEAgLTE0MDksMTMgKzE0NDUsMTUgQEAKIAkJCW5vZXhlYzMyPW9mZjogZGlzYWJsZSBub24tZXhlY3V0YWJsZSBtYXBwaW5ncwogCQkJCXJlYWQgaW1wbGllcyBleGVjdXRhYmxlIG1hcHBpbmdzCiAKKwlub2ZwdQkJW1NIXSBEaXNhYmxlIGhhcmR3YXJlIEZQVSBhdCBib290IHRpbWUuCisKIAlub2Z4c3IJCVtCVUdTPVg4Ni0zMl0gRGlzYWJsZXMgeDg2IGZsb2F0aW5nIHBvaW50IGV4dGVuZGVkCiAJCQlyZWdpc3RlciBzYXZlIGFuZCByZXN0b3JlLiBUaGUga2VybmVsIHdpbGwgb25seSBzYXZlCiAJCQlsZWdhY3kgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHRhc2sgc3dpdGNoLgogCiAJbm9jbGZsdXNoCVtCVUdTPVg4Nl0gRG9uJ3QgdXNlIHRoZSBDTEZMVVNIIGluc3RydWN0aW9uCiAKLQlub2hsdAkJW0JVR1M9QVJNXQorCW5vaGx0CQlbQlVHUz1BUk0sU0hdCiAKIAluby1obHQJCVtCVUdTPVg4Ni0zMl0gVGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoZSBobHQKIAkJCWluc3RydWN0aW9uIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgYW5kIG5vdCB0bwpAQCAtMTU3OCw3ICsxNjE2LDcgQEAKIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KIAogCXBjaT1vcHRpb25bLG9wdGlvbi4uLl0JW1BDSV0gdmFyaW91cyBQQ0kgc3Vic3lzdGVtIG9wdGlvbnM6Ci0JCW9mZgkJW1g4Ni0zMl0gZG9uJ3QgcHJvYmUgZm9yIHRoZSBQQ0kgYnVzCisJCW9mZgkJW1g4Nl0gZG9uJ3QgcHJvYmUgZm9yIHRoZSBQQ0kgYnVzCiAJCWJpb3MJCVtYODYtMzJdIGZvcmNlIHVzZSBvZiBQQ0kgQklPUywgZG9uJ3QgYWNjZXNzCiAJCQkJdGhlIGhhcmR3YXJlIGRpcmVjdGx5LiBVc2UgdGhpcyBpZiB5b3VyIG1hY2hpbmUKIAkJCQloYXMgYSBub24tc3RhbmRhcmQgUENJIGhvc3QgYnJpZGdlLgpAQCAtMTU4Niw5ICsxNjI0LDkgQEAKIAkJCQloYXJkd2FyZSBhY2Nlc3MgbWV0aG9kcyBhcmUgYWxsb3dlZC4gVXNlIHRoaXMKIAkJCQlpZiB5b3UgZXhwZXJpZW5jZSBjcmFzaGVzIHVwb24gYm9vdHVwIGFuZCB5b3UKIAkJCQlzdXNwZWN0IHRoZXkgYXJlIGNhdXNlZCBieSB0aGUgQklPUy4KLQkJY29uZjEJCVtYODYtMzJdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbgorCQljb25mMQkJW1g4Nl0gRm9yY2UgdXNlIG9mIFBDSSBDb25maWd1cmF0aW9uCiAJCQkJTWVjaGFuaXNtIDEuCi0JCWNvbmYyCQlbWDg2LTMyXSBGb3JjZSB1c2Ugb2YgUENJIENvbmZpZ3VyYXRpb24KKwkJY29uZjIJCVtYODZdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbgogCQkJCU1lY2hhbmlzbSAyLgogCQlub2FlcgkJW1BDSUVdIElmIHRoZSBQQ0lFQUVSIGtlcm5lbCBjb25maWcgcGFyYW1ldGVyIGlzCiAJCQkJZW5hYmxlZCwgdGhpcyBrZXJuZWwgYm9vdCBvcHRpb24gY2FuIGJlIHVzZWQgdG8KQEAgLTE2MDgsMzcgKzE2NDYsMzcgQEAKIAkJCQl0aGlzIG9wdGlvbiBpZiB0aGUga2VybmVsIGlzIHVuYWJsZSB0byBhbGxvY2F0ZQogCQkJCUlSUXMgb3IgZGlzY292ZXIgc2Vjb25kYXJ5IFBDSSBidXNlcyBvbiB5b3VyCiAJCQkJbW90aGVyYm9hcmQuCi0JCXJvbQkJW1g4Ni0zMl0gQXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8gZXhwYW5zaW9uIFJPTXMuCisJCXJvbQkJW1g4Nl0gQXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8gZXhwYW5zaW9uIFJPTXMuCiAJCQkJVXNlIHdpdGggY2F1dGlvbiBhcyBjZXJ0YWluIGRldmljZXMgc2hhcmUKIAkJCQlhZGRyZXNzIGRlY29kZXJzIGJldHdlZW4gUk9NcyBhbmQgb3RoZXIKIAkJCQlyZXNvdXJjZXMuCi0JCW5vcm9tCQlbWDg2LTMyLFg4Nl82NF0gRG8gbm90IGFzc2lnbiBhZGRyZXNzIHNwYWNlIHRvCisJCW5vcm9tCQlbWDg2XSBEbyBub3QgYXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8KIAkJCQlleHBhbnNpb24gUk9NcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGhhdmUKIAkJCQlCSU9TIGFzc2lnbmVkIGFkZHJlc3MgcmFuZ2VzLgotCQlpcnFtYXNrPTB4TU1NTQlbWDg2LTMyXSBTZXQgYSBiaXQgbWFzayBvZiBJUlFzIGFsbG93ZWQgdG8gYmUKKwkJaXJxbWFzaz0weE1NTU0JW1g4Nl0gU2V0IGEgYml0IG1hc2sgb2YgSVJRcyBhbGxvd2VkIHRvIGJlCiAJCQkJYXNzaWduZWQgYXV0b21hdGljYWxseSB0byBQQ0kgZGV2aWNlcy4gWW91IGNhbgogCQkJCW1ha2UgdGhlIGtlcm5lbCBleGNsdWRlIElSUXMgb2YgeW91ciBJU0EgY2FyZHMKIAkJCQl0aGlzIHdheS4KLQkJcGlycWFkZHI9MHhBQUFBQQlbWDg2LTMyXSBTcGVjaWZ5IHRoZSBwaHlzaWNhbCBhZGRyZXNzCisJCXBpcnFhZGRyPTB4QUFBQUEJW1g4Nl0gU3BlY2lmeSB0aGUgcGh5c2ljYWwgYWRkcmVzcwogCQkJCW9mIHRoZSBQSVJRIHRhYmxlIChub3JtYWxseSBnZW5lcmF0ZWQKIAkJCQlieSB0aGUgQklPUykgaWYgaXQgaXMgb3V0c2lkZSB0aGUKIAkJCQlGMDAwMGgtMTAwMDAwaCByYW5nZS4KLQkJbGFzdGJ1cz1OCVtYODYtMzJdIFNjYW4gYWxsIGJ1c2VzIHRocnUgYnVzICNOLiBDYW4gYmUKKwkJbGFzdGJ1cz1OCVtYODZdIFNjYW4gYWxsIGJ1c2VzIHRocnUgYnVzICNOLiBDYW4gYmUKIAkJCQl1c2VmdWwgaWYgdGhlIGtlcm5lbCBpcyB1bmFibGUgdG8gZmluZCB5b3VyCiAJCQkJc2Vjb25kYXJ5IGJ1c2VzIGFuZCB5b3Ugd2FudCB0byB0ZWxsIGl0CiAJCQkJZXhwbGljaXRseSB3aGljaCBvbmVzIHRoZXkgYXJlLgotCQlhc3NpZ24tYnVzc2VzCVtYODYtMzJdIEFsd2F5cyBhc3NpZ24gYWxsIFBDSSBidXMKKwkJYXNzaWduLWJ1c3NlcwlbWDg2XSBBbHdheXMgYXNzaWduIGFsbCBQQ0kgYnVzCiAJCQkJbnVtYmVycyBvdXJzZWx2ZXMsIG92ZXJyaWRpbmcKIAkJCQl3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS4KLQkJdXNlcGlycW1hc2sJW1g4Ni0zMl0gSG9ub3IgdGhlIHBvc3NpYmxlIElSUSBtYXNrIHN0b3JlZAorCQl1c2VwaXJxbWFzawlbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkCiAJCQkJaW4gdGhlIEJJT1MgJFBJUiB0YWJsZS4gVGhpcyBpcyBuZWVkZWQgb24KIAkJCQlzb21lIHN5c3RlbXMgd2l0aCBicm9rZW4gQklPU2VzLCBub3RhYmx5CiAJCQkJc29tZSBIUCBQYXZpbGlvbiBONTQwMCBhbmQgT21uaWJvb2sgWEUzCiAJCQkJbm90ZWJvb2tzLiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgQUNQSQogCQkJCUlSUSByb3V0aW5nIGlzIGVuYWJsZWQuCi0JCW5vYWNwaQkJW1g4Ni0zMl0gRG8gbm90IHVzZSBBQ1BJIGZvciBJUlEgcm91dGluZworCQlub2FjcGkJCVtYODZdIERvIG5vdCB1c2UgQUNQSSBmb3IgSVJRIHJvdXRpbmcKIAkJCQlvciBmb3IgUENJIHNjYW5uaW5nLgotCQl1c2VfY3JzCQlbWDg2LTMyXSBVc2UgX0NSUyBmb3IgUENJIHJlc291cmNlCisJCXVzZV9jcnMJCVtYODZdIFVzZSBfQ1JTIGZvciBQQ0kgcmVzb3VyY2UKIAkJCQlhbGxvY2F0aW9uLgogCQlyb3V0ZWlycQlEbyBJUlEgcm91dGluZyBmb3IgYWxsIFBDSSBkZXZpY2VzLgogCQkJCVRoaXMgaXMgbm9ybWFsbHkgZG9uZSBpbiBwY2lfZW5hYmxlX2RldmljZSgpLApAQCAtMTY2Nyw2ICsxNzA1LDEyIEBACiAJCQkJcmVzZXJ2ZWQgZm9yIHRoZSBDYXJkQnVzIGJyaWRnZSdzIG1lbW9yeQogCQkJCXdpbmRvdy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQgbWVnYWJ5dGVzLgogCisJcGNpZV9hc3BtPQlbUENJRV0gRm9yY2libHkgZW5hYmxlIG9yIGRpc2FibGUgUENJZSBBY3RpdmUgU3RhdGUgUG93ZXIKKwkJCU1hbmFnZW1lbnQuCisJCW9mZglEaXNhYmxlIEFTUE0uCisJCWZvcmNlCUVuYWJsZSBBU1BNIGV2ZW4gb24gZGV2aWNlcyB0aGF0IGNsYWltIG5vdCB0byBzdXBwb3J0IGl0LgorCQkJV0FSTklORzogRm9yY2luZyBBU1BNIG9uIG1heSBjYXVzZSBzeXN0ZW0gbG9ja3Vwcy4KKwogCXBjbXY9CQlbSFcsUENNQ0lBXSBCYWRnZVBBRCA0CiAKIAlwZC4JCVtQQVJJREVdCkBAIC0xNjk0LDYgKzE3MzgsMTAgQEAKIAkJCU92ZXJyaWRlIHBtdGltZXIgSU9Qb3J0IHdpdGggYSBoZXggdmFsdWUuCiAJCQllLmcuIHBtdG1yPTB4NTA4CiAKKwlwbnAuZGVidWcJW1BOUF0KKwkJCUVuYWJsZSBQTlAgZGVidWcgbWVzc2FnZXMuICBUaGlzIGRlcGVuZHMgb24gdGhlCisJCQlDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTIG9wdGlvbi4KKwogCXBucGFjcGk9CVtBQ1BJXQogCQkJeyBvZmYgfQogCkBAIC0yMTkxLDcgKzIyMzksNyBAQAogCiAJdGhlcm1hbC5jcnQ9CVtIVyxBQ1BJXQogCQkJLTE6IGRpc2FibGUgYWxsIGNyaXRpY2FsIHRyaXAgcG9pbnRzIGluIGFsbCB0aGVybWFsIHpvbmVzCi0JCQk8ZGVncmVlcyBDPjogbG93ZXIgYWxsIGNyaXRpY2FsIHRyaXAgcG9pbnRzCisJCQk8ZGVncmVlcyBDPjogb3ZlcnJpZGUgYWxsIGNyaXRpY2FsIHRyaXAgcG9pbnRzCiAKIAl0aGVybWFsLm5vY3J0PQlbSFcsQUNQSV0KIAkJCVNldCB0byBkaXNhYmxlIGFjdGlvbnMgb24gQUNQSSB0aGVybWFsIHpvbmUKQEAgLTIyNTMsNiArMjMwMSwyNSBAQAogCQkJYXV0b3N1c3BlbmRlZC4gIERldmljZXMgZm9yIHdoaWNoIHRoZSBkZWxheSBpcyBzZXQKIAkJCXRvIGEgbmVnYXRpdmUgdmFsdWUgd29uJ3QgYmUgYXV0b3N1c3BlbmRlZCBhdCBhbGwuCiAKKwl1c2Jjb3JlLnVzYmZzX3Nub29wPQorCQkJW1VTQl0gU2V0IHRvIGxvZyBhbGwgdXNiZnMgdHJhZmZpYyAoZGVmYXVsdCAwID0gb2ZmKS4KKworCXVzYmNvcmUuYmxpbmtlbmxpZ2h0cz0KKwkJCVtVU0JdIFNldCB0byBjeWNsZSBsZWRzIG9uIGh1YnMgKGRlZmF1bHQgMCA9IG9mZikuCisKKwl1c2Jjb3JlLm9sZF9zY2hlbWVfZmlyc3Q9CisJCQlbVVNCXSBTdGFydCB3aXRoIHRoZSBvbGQgZGV2aWNlIGluaXRpYWxpemF0aW9uCisJCQlzY2hlbWUgKGRlZmF1bHQgMCA9IG9mZikuCisKKwl1c2Jjb3JlLnVzZV9ib3RoX3NjaGVtZXM9CisJCQlbVVNCXSBUcnkgdGhlIG90aGVyIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUKKwkJCWlmIHRoZSBmaXJzdCBvbmUgZmFpbHMgKGRlZmF1bHQgMSA9IGVuYWJsZWQpLgorCisJdXNiY29yZS5pbml0aWFsX2Rlc2NyaXB0b3JfdGltZW91dD0KKwkJCVtVU0JdIFNwZWNpZmllcyB0aW1lb3V0IGZvciB0aGUgaW5pdGlhbCA2NC1ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUkVRX0dFVF9ERVNDUklQVE9SIHJlcXVlc3QgaW4gbWlsbGlzZWNvbmRzCisJCQkoZGVmYXVsdCA1MDAwID0gNS4wIHNlY29uZHMpLgorCiAJdXNiaGlkLm1vdXNlcG9sbD0KIAkJCVtVU0JISURdIFRoZSBpbnRlcnZhbCB3aGljaCBtaWNlIGFyZSB0byBiZSBwb2xsZWQgYXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvYWNlci13bWkudHh0CmluZGV4IDY5YjVkZDQuLjJiM2E2YjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FjZXItd21pLnR4dApAQCAtMSw3ICsxLDcgQEAKIEFjZXIgTGFwdG9wIFdNSSBFeHRyYXMgRHJpdmVyCiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYWNlcmFjcGkKLVZlcnNpb24gMC4xCi05dGggRmVicnVhcnkgMjAwOAorVmVyc2lvbiAwLjIKKzE4dGggQXVndXN0IDIwMDgKIAogQ29weXJpZ2h0IDIwMDctMjAwOCBDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgogCkBAIC04NywxNyArODcsNyBAQAogZXZlciB3aXNoIHRvIHJlbW92ZSB0aGUgY2FyZCwgb3Igc3dhcCBpdCBvdXQgYXQgc29tZSBwb2ludCwgcGxlYXNlIGdldCBpbiB0b3VjaAogd2l0aCBtZSwgYXMgd2UgbWF5IHdlbGwgYmUgYWJsZSB0byBnYWluIHNvbWUgZGF0YSBvbiB3aXJlbGVzcyBjYXJkIGRldGVjdGlvbi4KIAotVG8gcmVhZCB0aGUgc3RhdHVzIG9mIHRoZSB3aXJlbGVzcyByYWRpbyAoMD1vZmYsIDE9b24pOgotY2F0IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hY2VyLXdtaS93aXJlbGVzcwotCi1UbyBlbmFibGUgdGhlIHdpcmVsZXNzIHJhZGlvOgotZWNobyAxID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FjZXItd21pL3dpcmVsZXNzCi0KLVRvIGRpc2FibGUgdGhlIHdpcmVsZXNzIHJhZGlvOgotZWNobyAwID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FjZXItd21pL3dpcmVsZXNzCi0KLVRvIHNldCB0aGUgc3RhdGUgb2YgdGhlIHdpcmVsZXNzIHJhZGlvIHdoZW4gbG9hZGluZyBhY2VyLXdtaSwgcGFzczoKLXdpcmVsZXNzPVggKHdoZXJlIFggaXMgMCBvciAxKQorVGhlIHdpcmVsZXNzIHJhZGlvIGlzIGV4cG9zZWQgdGhyb3VnaCByZmtpbGwuCiAKIEJsdWV0b290aAogKioqKioqKioqCkBAIC0xMTcsMTcgKzEwNyw3IEBACiBtb2R1bGUgb2ZmIHRoZSBpbnRlcm5ldCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB5b3VyIGxhcHRvcCBhbmQgZml0IGl0LCB0aGVuCiBpdCB3aWxsIHdvcmsganVzdCBmaW5lIHdpdGggYWNlci13bWkuCiAKLVRvIHJlYWQgdGhlIHN0YXR1cyBvZiB0aGUgYmx1ZXRvb3RoIG1vZHVsZSAoMD1vZmYsIDE9b24pOgotY2F0IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hY2VyLXdtaS93aXJlbGVzcwotCi1UbyBlbmFibGUgdGhlIGJsdWV0b290aCBtb2R1bGU6Ci1lY2hvIDEgPiAvc3lzL2RldmljZXMvcGxhdGZvcm0vYWNlci13bWkvYmx1ZXRvb3RoCi0KLVRvIGRpc2FibGUgdGhlIGJsdWV0b290aCBtb2R1bGU6Ci1lY2hvIDAgPiAvc3lzL2RldmljZXMvcGxhdGZvcm0vYWNlci13bWkvYmx1ZXRvb3RoCi0KLVRvIHNldCB0aGUgc3RhdGUgb2YgdGhlIGJsdWV0b290aCBtb2R1bGUgd2hlbiBsb2FkaW5nIGFjZXItd21pLCBwYXNzOgotYmx1ZXRvb3RoPVggKHdoZXJlIFggaXMgMCBvciAxKQorQmx1ZXRvb3RoIGlzIGV4cG9zZWQgdGhyb3VnaCByZmtpbGwuCiAKIDNHCiAqKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYXJrZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWFya2Vycy50eHQKaW5kZXggZDlmNTBhMS4uMDg5ZjYxMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tYXJrZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21hcmtlcnMudHh0CkBAIC01MCwxMCArNTAsMTIgQEAKIHRvIGNhbGwpIGZvciB0aGUgc3BlY2lmaWMgbWFya2VyIHRocm91Z2ggbWFya2VyX3Byb2JlX3JlZ2lzdGVyKCkgYW5kIGNhbiBiZQogYWN0aXZhdGVkIGJ5IGNhbGxpbmcgbWFya2VyX2FybSgpLiBNYXJrZXIgZGVhY3RpdmF0aW9uIGNhbiBiZSBkb25lIGJ5IGNhbGxpbmcKIG1hcmtlcl9kaXNhcm0oKSBhcyBtYW55IHRpbWVzIGFzIG1hcmtlcl9hcm0oKSBoYXMgYmVlbiBjYWxsZWQuIFJlbW92aW5nIGEgcHJvYmUKLWlzIGRvbmUgdGhyb3VnaCBtYXJrZXJfcHJvYmVfdW5yZWdpc3RlcigpOyBpdCB3aWxsIGRpc2FybSB0aGUgcHJvYmUgYW5kIG1ha2UKLXN1cmUgdGhlcmUgaXMgbm8gY2FsbGVyIGxlZnQgdXNpbmcgdGhlIHByb2JlIHdoZW4gaXQgcmV0dXJucy4gUHJvYmUgcmVtb3ZhbCBpcwotcHJlZW1wdC1zYWZlIGJlY2F1c2UgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCBhcm91bmQgdGhlIHByb2JlIGNhbGwuIFNlZSB0aGUKLSJQcm9iZSBleGFtcGxlIiBzZWN0aW9uIGJlbG93IGZvciBhIHNhbXBsZSBwcm9iZSBtb2R1bGUuCitpcyBkb25lIHRocm91Z2ggbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoKTsgaXQgd2lsbCBkaXNhcm0gdGhlIHByb2JlLgorbWFya2VyX3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgbW9kdWxlIGV4aXQKK2Z1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyBjYWxsZXIgbGVmdCB1c2luZyB0aGUgcHJvYmUuIFRoaXMsIGFuZCB0aGUKK2ZhY3QgdGhhdCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFyb3VuZCB0aGUgcHJvYmUgY2FsbCwgbWFrZSBzdXJlIHRoYXQgcHJvYmUKK3JlbW92YWwgYW5kIG1vZHVsZSB1bmxvYWQgYXJlIHNhZmUuIFNlZSB0aGUgIlByb2JlIGV4YW1wbGUiIHNlY3Rpb24gYmVsb3cgZm9yIGEKK3NhbXBsZSBwcm9iZSBtb2R1bGUuCiAKIFRoZSBtYXJrZXIgbWVjaGFuaXNtIHN1cHBvcnRzIGluc2VydGluZyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgbWFya2VyLgogTWFya2VycyBjYW4gYmUgcHV0IGluIGlubGluZSBmdW5jdGlvbnMsIGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucywgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL210ZC9uYW5kX2VjYy50eHQgYi9Eb2N1bWVudGF0aW9uL210ZC9uYW5kX2VjYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmOTNiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dApAQCAtMCwwICsxLDcxNCBAQAorSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworSGF2aW5nIGxvb2tlZCBhdCB0aGUgbGludXggbXRkL25hbmQgZHJpdmVyIGFuZCBtb3JlIHNwZWNpZmljIGF0IG5hbmRfZWNjLmMKK0kgZmVsdCB0aGVyZSB3YXMgcm9vbSBmb3Igb3B0aW1pc2F0aW9uLiBJIGJhc2hlZCB0aGUgY29kZSBmb3IgYSBmZXcgaG91cnMKK3BlcmZvcm1pbmcgdHJpY2tzIGxpa2UgdGFibGUgbG9va3VwIHJlbW92aW5nIHN1cGVyZmx1b3VzIGNvZGUgZXRjLgorQWZ0ZXIgdGhhdCB0aGUgc3BlZWQgd2FzIGluY3JlYXNlZCBieSAzNS00MCUuCitTdGlsbCBJIHdhcyBub3QgdG9vIGhhcHB5IGFzIEkgZmVsdCB0aGVyZSB3YXMgYWRkaXRpb25hbCByb29tIGZvciBpbXByb3ZlbWVudC4KKworQmFkISBJIHdhcyBob29rZWQuCitJIGRlY2lkZWQgdG8gYW5ub3RhdGUgbXkgc3RlcHMgaW4gdGhpcyBmaWxlLiBQZXJoYXBzIGl0IGlzIHVzZWZ1bCB0byBzb21lb25lCitvciBzb21lb25lIGxlYXJucyBzb21ldGhpbmcgZnJvbSBpdC4KKworCitUaGUgcHJvYmxlbQorPT09PT09PT09PT0KKworTkFORCBmbGFzaCAoYXQgbGVhc3QgU0xDIG9uZSkgdHlwaWNhbGx5IGhhcyBzZWN0b3JzIG9mIDI1NiBieXRlcy4KK0hvd2V2ZXIgTkFORCBmbGFzaCBpcyBub3QgZXh0cmVtZWx5IHJlbGlhYmxlIHNvIHNvbWUgZXJyb3IgZGV0ZWN0aW9uCisoYW5kIHNvbWV0aW1lcyBjb3JyZWN0aW9uKSBpcyBuZWVkZWQuCisKK1RoaXMgaXMgZG9uZSBieSBtZWFucyBvZiBhIEhhbW1pbmcgY29kZS4gSSdsbCB0cnkgdG8gZXhwbGFpbiBpdCBpbgorbGF5bWFucyB0ZXJtcyAoYW5kIGFwb2xvZ2llcyB0byBhbGwgdGhlIHBybydzIGluIHRoZSBmaWVsZCBpbiBjYXNlIEkgZG8KK25vdCB1c2UgdGhlIHJpZ2h0IHRlcm1pbm9sb2d5LCBteSBjb2RpbmcgdGhlb3J5IGNsYXNzIHdhcyBhbG1vc3QgMzAKK3llYXJzIGFnbywgYW5kIEkgbXVzdCBhZG1pdCBpdCB3YXMgbm90IG9uZSBvZiBteSBmYXZvdXJpdGVzKS4KKworQXMgSSBzYWlkIGJlZm9yZSB0aGUgZWNjIGNhbGN1bGF0aW9uIGlzIHBlcmZvcm1lZCBvbiBzZWN0b3JzIG9mIDI1NgorYnl0ZXMuIFRoaXMgaXMgZG9uZSBieSBjYWxjdWxhdGluZyBzZXZlcmFsIHBhcml0eSBiaXRzIG92ZXIgdGhlIHJvd3MgYW5kCitjb2x1bW5zLiBUaGUgcGFyaXR5IHVzZWQgaXMgZXZlbiBwYXJpdHkgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcGFyaXR5IGJpdCA9IDEKK2lmIHRoZSBkYXRhIG92ZXIgd2hpY2ggdGhlIHBhcml0eSBpcyBjYWxjdWxhdGVkIGlzIDEgYW5kIHRoZSBwYXJpdHkgYml0ID0gMAoraWYgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFyaXR5IGlzIGNhbGN1bGF0ZWQgaXMgMC4gU28gdGhlIHRvdGFsCitudW1iZXIgb2YgYml0cyBvdmVyIHRoZSBkYXRhIG92ZXIgd2hpY2ggdGhlIHBhcml0eSBpcyBjYWxjdWxhdGVkICsgdGhlCitwYXJpdHkgYml0IGlzIGV2ZW4uIChzZWUgd2lraXBlZGlhIGlmIHlvdSBjYW4ndCBmb2xsb3cgdGhpcykuCitQYXJpdHkgaXMgb2Z0ZW4gY2FsY3VsYXRlZCBieSBtZWFucyBvZiBhbiBleGNsdXNpdmUgb3Igb3BlcmF0aW9uLAorc29tZXRpbWVzIGFsc28gcmVmZXJyZWQgdG8gYXMgeG9yLiBJbiBDIHRoZSBvcGVyYXRvciBmb3IgeG9yIGlzIF4KKworQmFjayB0byBlY2MuCitMZXQncyBnaXZlIGEgc21hbGwgZmlndXJlOgorCitieXRlICAgMDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDIgcnA0IC4uLiBycDE0CitieXRlICAgMTogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDIgcnA0IC4uLiBycDE0CitieXRlICAgMjogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA0IC4uLiBycDE0CitieXRlICAgMzogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDMgcnA0IC4uLiBycDE0CitieXRlICAgNDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDIgcnA1IC4uLiBycDE0CisuLi4uCitieXRlIDI1NDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA1IC4uLiBycDE1CitieXRlIDI1NTogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDMgcnA1IC4uLiBycDE1CisgICAgICAgICAgIGNwMSAgY3AwICBjcDEgIGNwMCAgY3AxICBjcDAgIGNwMSAgY3AwCisgICAgICAgICAgIGNwMyAgY3AzICBjcDIgIGNwMiAgY3AzICBjcDMgIGNwMiAgY3AyCisgICAgICAgICAgIGNwNSAgY3A1ICBjcDUgIGNwNSAgY3A0ICBjcDQgIGNwNCAgY3A0CisKK1RoaXMgZmlndXJlIHJlcHJlc2VudHMgYSBzZWN0b3Igb2YgMjU2IGJ5dGVzLgorY3AgaXMgbXkgYWJicmV2aWF0b24gZm9yIGNvbHVtbiBwYXJpdHksIHJwIGZvciByb3cgcGFyaXR5LgorCitMZXQncyBzdGFydCB0byBleHBsYWluIGNvbHVtbiBwYXJpdHkuCitjcDAgaXMgdGhlIHBhcml0eSB0aGF0IGJlbG9uZ3MgdG8gYWxsIGJpdDAsIGJpdDIsIGJpdDQsIGJpdDYuCitzbyB0aGUgc3VtIG9mIGFsbCBiaXQwLCBiaXQyLCBiaXQ0IGFuZCBiaXQ2IHZhbHVlcyArIGNwMCBpdHNlbGYgaXMgZXZlbi4KK1NpbWlsYXJseSBjcDEgaXMgdGhlIHN1bSBvZiBhbGwgYml0MSwgYml0MywgYml0NSBhbmQgYml0Ny4KK2NwMiBpcyB0aGUgcGFyaXR5IG92ZXIgYml0MCwgYml0MSwgYml0NCBhbmQgYml0NQorY3AzIGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQyLCBiaXQzLCBiaXQ2IGFuZCBiaXQ3LgorY3A0IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQwLCBiaXQxLCBiaXQyIGFuZCBiaXQzLgorY3A1IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQ0LCBiaXQ1LCBiaXQ2IGFuZCBiaXQ3LgorTm90ZSB0aGF0IGVhY2ggb2YgY3AwIC4uIGNwNSBpcyBleGFjdGx5IG9uZSBiaXQuCisKK1JvdyBwYXJpdHkgYWN0dWFsbHkgd29ya3MgYWxtb3N0IHRoZSBzYW1lLgorcnAwIGlzIHRoZSBwYXJpdHkgb2YgYWxsIGV2ZW4gYnl0ZXMgKDAsIDIsIDQsIDYsIC4uLiAyNTIsIDI1NCkKK3JwMSBpcyB0aGUgcGFyaXR5IG9mIGFsbCBvZGQgYnl0ZXMgKDEsIDMsIDUsIDcsIC4uLiwgMjUzLCAyNTUpCitycDIgaXMgdGhlIHBhcml0eSBvZiBhbGwgYnl0ZXMgMCwgMSwgNCwgNSwgOCwgOSwgLi4uCisoc28gaGFuZGxlIHR3byBieXRlcywgdGhlbiBza2lwIDIgYnl0ZXMpLgorcnAzIGlzIGNvdmVycyB0aGUgaGFsZiBycDIgZG9lcyBub3QgY292ZXIgKGJ5dGVzIDIsIDMsIDYsIDcsIDEwLCAxMSwgLi4uKQorZm9yIHJwNCB0aGUgcnVsZSBpcyBjb3ZlciA0IGJ5dGVzLCBza2lwIDQgYnl0ZXMsIGNvdmVyIDQgYnl0ZXMsIHNraXAgNCBldGMuCitzbyBycDQgY2FsY3VsYXRlcyBwYXJpdHkgb3ZlciBieXRlcyAwLCAxLCAyLCAzLCA4LCA5LCAxMCwgMTEsIDE2LCAuLi4pCithbmQgcnA1IGNvdmVycyB0aGUgb3RoZXIgaGFsZiwgc28gYnl0ZXMgNCwgNSwgNiwgNywgMTIsIDEzLCAxNCwgMTUsIDIwLCAuLgorVGhlIHN0b3J5IG5vdyBiZWNvbWVzIHF1aXRlIGJvcmluZy4gSSBndWVzcyB5b3UgZ2V0IHRoZSBpZGVhLgorcnA2IGNvdmVycyA4IGJ5dGVzIHRoZW4gc2tpcHMgOCBldGMKK3JwNyBza2lwcyA4IGJ5dGVzIHRoZW4gY292ZXJzIDggZXRjCitycDggY292ZXJzIDE2IGJ5dGVzIHRoZW4gc2tpcHMgMTYgZXRjCitycDkgc2tpcHMgMTYgYnl0ZXMgdGhlbiBjb3ZlcnMgMTYgZXRjCitycDEwIGNvdmVycyAzMiBieXRlcyB0aGVuIHNraXBzIDMyIGV0YworcnAxMSBza2lwcyAzMiBieXRlcyB0aGVuIGNvdmVycyAzMiBldGMKK3JwMTIgY292ZXJzIDY0IGJ5dGVzIHRoZW4gc2tpcHMgNjQgZXRjCitycDEzIHNraXBzIDY0IGJ5dGVzIHRoZW4gY292ZXJzIDY0IGV0YworcnAxNCBjb3ZlcnMgMTI4IGJ5dGVzIHRoZW4gc2tpcHMgMTI4CitycDE1IHNraXBzIDEyOCBieXRlcyB0aGVuIGNvdmVycyAxMjgKKworSW4gdGhlIGVuZCB0aGUgcGFyaXR5IGJpdHMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gdGhyZWUgYnl0ZXMgYXMKK2ZvbGxvd3M6CitFQ0MgICAgQml0IDcgQml0IDYgQml0IDUgQml0IDQgQml0IDMgQml0IDIgQml0IDEgQml0IDAKK0VDQyAwICAgcnAwNyAgcnAwNiAgcnAwNSAgcnAwNCAgcnAwMyAgcnAwMiAgcnAwMSAgcnAwMAorRUNDIDEgICBycDE1ICBycDE0ICBycDEzICBycDEyICBycDExICBycDEwICBycDA5ICBycDA4CitFQ0MgMiAgIGNwNSAgIGNwNCAgIGNwMyAgIGNwMiAgIGNwMSAgIGNwMCAgICAgIDEgICAgIDEKKworSSBkZXRlY3RlZCBhZnRlciB3cml0aW5nIHRoaXMgdGhhdCBTVCBhcHBsaWNhdGlvbiBub3RlIEFOMTgyMworKGh0dHA6Ly93d3cuc3QuY29tL3N0b25saW5lL2Jvb2tzL3BkZi9kb2NzLzEwMTIzLnBkZikgZ2l2ZXMgYSBtdWNoCituaWNlciBwaWN0dXJlLihidXQgdGhleSB1c2UgbGluZSBwYXJpdHkgYXMgdGVybSB3aGVyZSBJIHVzZSByb3cgcGFyaXR5KQorT2ggd2VsbCwgSSdtIGdyYXBoaWNhbGx5IGNoYWxsZW5nZWQsIHNvIHN1ZmZlciB3aXRoIG1lIGZvciBhIG1vbWVudCA6LSkKK0FuZCBJIGNvdWxkIG5vdCByZXVzZSB0aGUgU1QgcGljdHVyZSBhbnl3YXkgZm9yIGNvcHlyaWdodCByZWFzb25zLgorCisKK0F0dGVtcHQgMAorPT09PT09PT09CisKK0ltcGxlbWVudGluZyB0aGUgcGFyaXR5IGNhbGN1bGF0aW9uIGlzIHByZXR0eSBzaW1wbGUuCitJbiBDIHBzZXVkb2NvZGU6Citmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCit7CisgICAgaWYgKGkgJiAweDAxKQorICAgICAgIHJwMSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxOworICAgIGVsc2UKKyAgICAgICBycDAgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTsKKyAgICBpZiAoaSAmIDB4MDIpCisgICAgICAgcnAzID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDM7CisgICAgZWxzZQorICAgICAgIHJwMiA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAyOworICAgIGlmIChpICYgMHgwNCkKKyAgICAgIHJwNSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA1OworICAgIGVsc2UKKyAgICAgIHJwNCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA0OworICAgIGlmIChpICYgMHgwOCkKKyAgICAgIHJwNyA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA3OworICAgIGVsc2UKKyAgICAgIHJwNiA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA2OworICAgIGlmIChpICYgMHgxMCkKKyAgICAgIHJwOSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA5OworICAgIGVsc2UKKyAgICAgIHJwOCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA4OworICAgIGlmIChpICYgMHgyMCkKKyAgICAgIHJwMTEgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTE7CisgICAgZWxzZQorICAgIHJwMTAgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTA7CisgICAgaWYgKGkgJiAweDQwKQorICAgICAgcnAxMyA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxMzsKKyAgICBlbHNlCisgICAgICBycDEyID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDEyOworICAgIGlmIChpICYgMHg4MCkKKyAgICAgIHJwMTUgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTU7CisgICAgZWxzZQorICAgICAgcnAxNCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxNDsKKyAgICBjcDAgPSBiaXQ2IF4gYml0NCBeIGJpdDIgXiBiaXQwIF4gY3AwOworICAgIGNwMSA9IGJpdDcgXiBiaXQ1IF4gYml0MyBeIGJpdDEgXiBjcDE7CisgICAgY3AyID0gYml0NSBeIGJpdDQgXiBiaXQxIF4gYml0MCBeIGNwMjsKKyAgICBjcDMgPSBiaXQ3IF4gYml0NiBeIGJpdDMgXiBiaXQyIF4gY3AzCisgICAgY3A0ID0gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIGNwNAorICAgIGNwNSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBjcDUKK30KKworCitBbmFseXNpcyAwCis9PT09PT09PT09CisKK0MgZG9lcyBoYXZlIGJpdHdpc2Ugb3BlcmF0b3JzIGJ1dCBub3QgcmVhbGx5IG9wZXJhdG9ycyB0byBkbyB0aGUgYWJvdmUKK2VmZmljaWVudGx5IChhbmQgbW9zdCBoYXJkd2FyZSBoYXMgbm8gc3VjaCBpbnN0cnVjdGlvbnMgZWl0aGVyKS4KK1RoZXJlZm9yZSB3aXRob3V0IGltcGxlbWVudGluZyB0aGlzIGl0IHdhcyBjbGVhciB0aGF0IHRoZSBjb2RlIGFib3ZlIHdhcworbm90IGdvaW5nIHRvIGJyaW5nIG1lIGEgTm9iZWwgcHJpemUgOi0pCisKK0ZvcnR1bmF0ZWx5IHRoZSBleGNsdXNpdmUgb3Igb3BlcmF0aW9uIGlzIGNvbW11dGF0aXZlLCBzbyB3ZSBjYW4gY29tYmluZQordGhlIHZhbHVlcyBpbiBhbnkgb3JkZXIuIFNvIGluc3RlYWQgb2YgY2FsY3VsYXRpbmcgYWxsIHRoZSBiaXRzCitpbmRpdmlkdWFsbHksIGxldCB1cyB0cnkgdG8gcmVhcnJhbmdlIHRoaW5ncy4KK0ZvciB0aGUgY29sdW1uIHBhcml0eSB0aGlzIGlzIGVhc3kuIFdlIGNhbiBqdXN0IHhvciB0aGUgYnl0ZXMgYW5kIGluIHRoZQorZW5kIGZpbHRlciBvdXQgdGhlIHJlbGV2YW50IGJpdHMuIFRoaXMgaXMgcHJldHR5IG5pY2UgYXMgaXQgd2lsbCBicmluZworYWxsIGNwIGNhbGN1bGF0aW9uIG91dCBvZiB0aGUgaWYgbG9vcC4KKworU2ltaWxhcmx5IHdlIGNhbiBmaXJzdCB4b3IgdGhlIGJ5dGVzIGZvciB0aGUgdmFyaW91cyByb3dzLgorVGhpcyBsZWFkcyB0bzoKKworCitBdHRlbXB0IDEKKz09PT09PT09PQorCitjb25zdCBjaGFyIHBhcml0eVsyNTZdID0geworICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAKK307CisKK3ZvaWQgZWNjMShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmNvZGUpCit7CisgICAgaW50IGk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnAgPSBidWY7CisgICAgdW5zaWduZWQgY2hhciBjdXI7CisgICAgdW5zaWduZWQgY2hhciBycDAsIHJwMSwgcnAyLCBycDMsIHJwNCwgcnA1LCBycDYsIHJwNzsKKyAgICB1bnNpZ25lZCBjaGFyIHJwOCwgcnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1OworICAgIHVuc2lnbmVkIGNoYXIgcGFyOworCisgICAgcGFyID0gMDsKKyAgICBycDAgPSAwOyBycDEgPSAwOyBycDIgPSAwOyBycDMgPSAwOworICAgIHJwNCA9IDA7IHJwNSA9IDA7IHJwNiA9IDA7IHJwNyA9IDA7CisgICAgcnA4ID0gMDsgcnA5ID0gMDsgcnAxMCA9IDA7IHJwMTEgPSAwOworICAgIHJwMTIgPSAwOyBycDEzID0gMDsgcnAxNCA9IDA7IHJwMTUgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIHsKKyAgICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMSkgcnAxIF49IGN1cjsgZWxzZSBycDAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwMyBePSBjdXI7IGVsc2UgcnAyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA0KSBycDUgXj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwOCkgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDQwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDgwKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49IGN1cjsKKyAgICB9CisgICAgY29kZVswXSA9CisgICAgICAgIChwYXJpdHlbcnA3XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnA2XSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcnA1XSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnA0XSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAzXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcnAyXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnAxXSA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnAwXSk7CisgICAgY29kZVsxXSA9CisgICAgICAgIChwYXJpdHlbcnAxNV0gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwMTRdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDEzXSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnAxMl0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwMTFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDEwXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnA5XSAgPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwOF0pOworICAgIGNvZGVbMl0gPQorICAgICAgICAocGFyaXR5W3BhciAmIDB4ZjBdIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MzNdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHg1NV0gPDwgMik7CisgICAgY29kZVswXSA9IH5jb2RlWzBdOworICAgIGNvZGVbMV0gPSB+Y29kZVsxXTsKKyAgICBjb2RlWzJdID0gfmNvZGVbMl07Cit9CisKK1N0aWxsIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBsYXN0IHRocmVlIGludmVydCBzdGF0ZW1lbnRzIGFyZSB0aGVyZSB0bworZ2l2ZSBhIGNoZWNrc3VtIG9mIDB4ZmYgMHhmZiAweGZmIGZvciBhbiBlbXB0eSBmbGFzaC4gSW4gYW4gZW1wdHkgZmxhc2gKK2FsbCBkYXRhIGlzIDB4ZmYsIHNvIHRoZSBjaGVja3N1bSB0aGVuIG1hdGNoZXMuCisKK0kgYWxzbyBpbnRyb2R1Y2VkIHRoZSBwYXJpdHkgbG9va3VwLiBJIGV4cGVjdGVkIHRoaXMgdG8gYmUgdGhlIGZhc3Rlc3QKK3dheSB0byBjYWxjdWxhdGUgdGhlIHBhcml0eSwgYnV0IEkgd2lsbCBpbnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZXMgbGF0ZXIKK29uLgorCisKK0FuYWx5c2lzIDEKKz09PT09PT09PT0KKworVGhlIGNvZGUgd29ya3MsIGJ1dCBpcyBub3QgdGVycmlibHkgZWZmaWNpZW50LiBPbiBteSBzeXN0ZW0gaXQgdG9vaworYWxtb3N0IDQgdGltZXMgYXMgbXVjaCB0aW1lIGFzIHRoZSBsaW51eCBkcml2ZXIgY29kZS4gQnV0IGhleSwgaWYgaXQgd2FzCisqdGhhdCogZWFzeSB0aGlzIHdvdWxkIGhhdmUgYmVlbiBkb25lIGxvbmcgYmVmb3JlLgorTm8gcGFpbi4gbm8gZ2Fpbi4KKworRm9ydHVuYXRlbHkgdGhlcmUgaXMgcGxlbnR5IG9mIHJvb20gZm9yIGltcHJvdmVtZW50LgorCitJbiBzdGVwIDEgd2UgbW92ZWQgZnJvbSBiaXQtd2lzZSBjYWxjdWxhdGlvbiB0byBieXRlLXdpc2UgY2FsY3VsYXRpb24uCitIb3dldmVyIGluIEMgd2UgY2FuIGFsc28gdXNlIHRoZSB1bnNpZ25lZCBsb25nIGRhdGEgdHlwZSBhbmQgdmlydHVhbGx5CitldmVyeSBtb2Rlcm4gbWljcm9wcm9jZXNzb3Igc3VwcG9ydHMgMzIgYml0IG9wZXJhdGlvbnMsIHNvIHdoeSBub3QgdHJ5Cit0byB3cml0ZSBvdXIgY29kZSBpbiBzdWNoIGEgd2F5IHRoYXQgd2UgcHJvY2VzcyBkYXRhIGluIDMyIGJpdCBjaHVua3MuCisKK09mIGNvdXJzZSB0aGlzIG1lYW5zIHNvbWUgbW9kaWZpY2F0aW9uIGFzIHRoZSByb3cgcGFyaXR5IGlzIGJ5dGUgYnkKK2J5dGUuIEEgcXVpY2sgYW5hbHlzaXM6Citmb3IgdGhlIGNvbHVtbiBwYXJpdHkgd2UgdXNlIHRoZSBwYXIgdmFyaWFibGUuIFdoZW4gZXh0ZW5kaW5nIHRvIDMyIGJpdHMKK3dlIGNhbiBpbiB0aGUgZW5kIGVhc2lseSBjYWxjdWxhdGUgcDAgYW5kIHAxIGZyb20gaXQuCisoYmVjYXVzZSBwYXIgbm93IGNvbnNpc3RzIG9mIDQgYnl0ZXMsIGNvbnRyaWJ1dGluZyB0byBycDEsIHJwMCwgcnAxLCBycDAKK3Jlc3BlY3RpdmVseSkKK2Fsc28gcnAyIGFuZCBycDMgY2FuIGJlIGVhc2lseSByZXRyaWV2ZWQgZnJvbSBwYXIgYXMgcnAzIGNvdmVycyB0aGUKK2ZpcnN0IHR3byBieXRlcyBhbmQgcnAyIHRoZSBsYXN0IHR3byBieXRlcy4KKworTm90ZSB0aGF0IG9mIGNvdXJzZSBub3cgdGhlIGxvb3AgaXMgZXhlY3V0ZWQgb25seSA2NCB0aW1lcyAoMjU2LzQpLgorQW5kIG5vdGUgdGhhdCBjYXJlIG11c3QgdGFrZW4gd3J0IGJ5dGUgb3JkZXJpbmcuIFRoZSB3YXkgYnl0ZXMgYXJlCitvcmRlcmVkIGluIGEgbG9uZyBpcyBtYWNoaW5lIGRlcGVuZGVudCwgYW5kIG1pZ2h0IGFmZmVjdCB1cy4KK0FueXdheSwgaWYgdGhlcmUgaXMgYW4gaXNzdWU6IHRoaXMgY29kZSBpcyBkZXZlbG9wZWQgb24geDg2ICh0byBiZQorcHJlY2lzZTogYSBERUxMIFBDIHdpdGggYSBEOTIwIEludGVsIENQVSkKKworQW5kIG9mIGNvdXJzZSB0aGUgcGVyZm9ybWFuY2UgbWlnaHQgZGVwZW5kIG9uIGFsaWdubWVudCwgYnV0IEkgZXhwZWN0Cit0aGF0IHRoZSBJL08gYnVmZmVycyBpbiB0aGUgbmFuZCBkcml2ZXIgYXJlIGFsaWduZWQgcHJvcGVybHkgKGFuZAorb3RoZXJ3aXNlIHRoYXQgc2hvdWxkIGJlIGZpeGVkIHRvIGdldCBtYXhpbXVtIHBlcmZvcm1hbmNlKS4KKworTGV0J3MgZ2l2ZSBpdCBhIHRyeS4uLgorCisKK0F0dGVtcHQgMgorPT09PT09PT09CisKK2V4dGVybiBjb25zdCBjaGFyIHBhcml0eVsyNTZdOworCit2b2lkIGVjYzIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpjb2RlKQoreworICAgIGludCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJwID0gKHVuc2lnbmVkIGxvbmcgKilidWY7CisgICAgdW5zaWduZWQgbG9uZyBjdXI7CisgICAgdW5zaWduZWQgbG9uZyBycDAsIHJwMSwgcnAyLCBycDMsIHJwNCwgcnA1LCBycDYsIHJwNzsKKyAgICB1bnNpZ25lZCBsb25nIHJwOCwgcnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1OworICAgIHVuc2lnbmVkIGxvbmcgcGFyOworCisgICAgcGFyID0gMDsKKyAgICBycDAgPSAwOyBycDEgPSAwOyBycDIgPSAwOyBycDMgPSAwOworICAgIHJwNCA9IDA7IHJwNSA9IDA7IHJwNiA9IDA7IHJwNyA9IDA7CisgICAgcnA4ID0gMDsgcnA5ID0gMDsgcnAxMCA9IDA7IHJwMTEgPSAwOworICAgIHJwMTIgPSAwOyBycDEzID0gMDsgcnAxNCA9IDA7IHJwMTUgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49IGN1cjsKKyAgICB9CisgICAgLyoKKyAgICAgICB3ZSBuZWVkIHRvIGFkYXB0IHRoZSBjb2RlIGdlbmVyYXRpb24gZm9yIHRoZSBmYWN0IHRoYXQgcnAgdmFycyBhcmUgbm93CisgICAgICAgbG9uZzsgYWxzbyB0aGUgY29sdW1uIHBhcml0eSBjYWxjdWxhdGlvbiBuZWVkcyB0byBiZSBjaGFuZ2VkLgorICAgICAgIHdlJ2xsIGJyaW5nIHJwNCB0byAxNSBiYWNrIHRvIHNpbmdsZSBieXRlIGVudGl0aWVzIGJ5IHNoaWZ0aW5nIGFuZAorICAgICAgIHhvcmluZworICAgICovCisgICAgcnA0IF49IChycDQgPj4gMTYpOyBycDQgXj0gKHJwNCA+PiA4KTsgcnA0ICY9IDB4ZmY7CisgICAgcnA1IF49IChycDUgPj4gMTYpOyBycDUgXj0gKHJwNSA+PiA4KTsgcnA1ICY9IDB4ZmY7CisgICAgcnA2IF49IChycDYgPj4gMTYpOyBycDYgXj0gKHJwNiA+PiA4KTsgcnA2ICY9IDB4ZmY7CisgICAgcnA3IF49IChycDcgPj4gMTYpOyBycDcgXj0gKHJwNyA+PiA4KTsgcnA3ICY9IDB4ZmY7CisgICAgcnA4IF49IChycDggPj4gMTYpOyBycDggXj0gKHJwOCA+PiA4KTsgcnA4ICY9IDB4ZmY7CisgICAgcnA5IF49IChycDkgPj4gMTYpOyBycDkgXj0gKHJwOSA+PiA4KTsgcnA5ICY9IDB4ZmY7CisgICAgcnAxMCBePSAocnAxMCA+PiAxNik7IHJwMTAgXj0gKHJwMTAgPj4gOCk7IHJwMTAgJj0gMHhmZjsKKyAgICBycDExIF49IChycDExID4+IDE2KTsgcnAxMSBePSAocnAxMSA+PiA4KTsgcnAxMSAmPSAweGZmOworICAgIHJwMTIgXj0gKHJwMTIgPj4gMTYpOyBycDEyIF49IChycDEyID4+IDgpOyBycDEyICY9IDB4ZmY7CisgICAgcnAxMyBePSAocnAxMyA+PiAxNik7IHJwMTMgXj0gKHJwMTMgPj4gOCk7IHJwMTMgJj0gMHhmZjsKKyAgICBycDE0IF49IChycDE0ID4+IDE2KTsgcnAxNCBePSAocnAxNCA+PiA4KTsgcnAxNCAmPSAweGZmOworICAgIHJwMTUgXj0gKHJwMTUgPj4gMTYpOyBycDE1IF49IChycDE1ID4+IDgpOyBycDE1ICY9IDB4ZmY7CisgICAgcnAzID0gKHBhciA+PiAxNik7IHJwMyBePSAocnAzID4+IDgpOyBycDMgJj0gMHhmZjsKKyAgICBycDIgPSBwYXIgJiAweGZmZmY7IHJwMiBePSAocnAyID4+IDgpOyBycDIgJj0gMHhmZjsKKyAgICBwYXIgXj0gKHBhciA+PiAxNik7CisgICAgcnAxID0gKHBhciA+PiA4KTsgcnAxICY9IDB4ZmY7CisgICAgcnAwID0gKHBhciAmIDB4ZmYpOworICAgIHBhciBePSAocGFyID4+IDgpOyBwYXIgJj0gMHhmZjsKKworICAgIGNvZGVbMF0gPQorICAgICAgICAocGFyaXR5W3JwN10gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwNl0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3JwNV0gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwNF0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwM10gPDwgMykgfAorICAgICAgICAocGFyaXR5W3JwMl0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwMV0gPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwMF0pOworICAgIGNvZGVbMV0gPQorICAgICAgICAocGFyaXR5W3JwMTVdIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtycDE0XSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcnAxM10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwMTJdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtycDExXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcnAxMF0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwOV0gIDw8IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDhdKTsKKyAgICBjb2RlWzJdID0KKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHgwZl0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDMzXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhhYV0gPDwgMykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpOworICAgIGNvZGVbMF0gPSB+Y29kZVswXTsKKyAgICBjb2RlWzFdID0gfmNvZGVbMV07CisgICAgY29kZVsyXSA9IH5jb2RlWzJdOworfQorCitUaGUgcGFyaXR5IGFycmF5IGlzIG5vdCBzaG93biBhbnkgbW9yZS4gTm90ZSBhbHNvIHRoYXQgZm9yIHRoZXNlCitleGFtcGxlcyBJIGtpbmRhIGRldmlhdGVkIGZyb20gbXkgcmVndWxhciBwcm9ncmFtbWluZyBzdHlsZSBieSBhbGxvd2luZworbXVsdGlwbGUgc3RhdGVtZW50cyBvbiBhIGxpbmUsIG5vdCB1c2luZyB7IH0gaW4gdGhlbiBhbmQgZWxzZSBibG9ja3MKK3dpdGggb25seSBhIHNpbmdsZSBzdGF0ZW1lbnQgYW5kIGJ5IHVzaW5nIG9wZXJhdG9ycyBsaWtlIF49CisKKworQW5hbHlzaXMgMgorPT09PT09PT09PQorCitUaGUgY29kZSAob2YgY291cnNlKSB3b3JrcywgYW5kIGh1cnJheTogd2UgYXJlIGEgbGl0dGxlIGJpdCBmYXN0ZXIgdGhhbgordGhlIGxpbnV4IGRyaXZlciBjb2RlIChhYm91dCAxNSUpLiBCdXQgd2FpdCwgZG9uJ3QgY2hlZXIgdG9vIHF1aWNrbHkuCitUSGVyZSBpcyBtb3JlIHRvIGJlIGdhaW5lZC4KK0lmIHdlIGxvb2sgYXQgZS5nLiBycDE0IGFuZCBycDE1IHdlIHNlZSB0aGF0IHdlIGVpdGhlciB4b3Igb3VyIGRhdGEgd2l0aAorcnAxNCBvciB3aXRoIHJwMTUuIEhvd2V2ZXIgd2UgYWxzbyBoYXZlIHBhciB3aGljaCBnb2VzIG92ZXIgYWxsIGRhdGEuCitUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJwMTQgYXMgaXQgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbQorcnAxNSB0aHJvdWdoIHJwMTQgPSBwYXIgXiBycDE1OworKG9yIGlmIGRlc2lyZWQgd2UgY2FuIGF2b2lkIGNhbGN1bGF0aW5nIHJwMTUgYW5kIGNhbGN1bGF0ZSBpdCBmcm9tCitycDE0KS4gIFRoYXQgaXMgd2h5IHNvbWUgcGxhY2VzIHJlZmVyIHRvIGludmVyc2UgcGFyaXR5LgorT2YgY291cnNlIHRoZSBzYW1lIHRoaW5nIGhvbGRzIGZvciBycDQvNSwgcnA2LzcsIHJwOC85LCBycDEwLzExIGFuZCBycDEyLzEzLgorRWZmZWN0aXZlbHkgdGhpcyBtZWFucyB3ZSBjYW4gZWxpbWluYXRlIHRoZSBlbHNlIGNsYXVzZSBmcm9tIHRoZSBpZgorc3RhdGVtZW50cy4gQWxzbyB3ZSBjYW4gb3B0aW1pc2UgdGhlIGNhbGN1bGF0aW9uIGluIHRoZSBlbmQgYSBsaXR0bGUgYml0CitieSBnb2luZyBmcm9tIGxvbmcgdG8gYnl0ZSBmaXJzdC4gQWN0dWFsbHkgd2UgY2FuIGV2ZW4gYXZvaWQgdGhlIHRhYmxlCitsb29rdXBzCisKK0F0dGVtcHQgMworPT09PT09PT09CisKK09kZCByZXBsYWNlZDoKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49IGN1cjsKK3dpdGgKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwNyBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsKKworICAgICAgICBhbmQgb3V0c2lkZSB0aGUgbG9vcCBhZGRlZDoKKyAgICBycDQgID0gcGFyIF4gcnA1OworICAgIHJwNiAgPSBwYXIgXiBycDc7CisgICAgcnA4ICA9IHBhciBeIHJwOTsKKyAgICBycDEwICA9IHBhciBeIHJwMTE7CisgICAgcnAxMiAgPSBwYXIgXiBycDEzOworICAgIHJwMTQgID0gcGFyIF4gcnAxNTsKKworQW5kIGFmdGVyIHRoYXQgdGhlIGNvZGUgdGFrZXMgYWJvdXQgMzAlIG1vcmUgdGltZSwgYWx0aG91Z2ggdGhlIG51bWJlciBvZgorc3RhdGVtZW50cyBpcyByZWR1Y2VkLiBUaGlzIGlzIGFsc28gcmVmbGVjdGVkIGluIHRoZSBhc3NlbWJseSBjb2RlLgorCisKK0FuYWx5c2lzIDMKKz09PT09PT09PT0KKworVmVyeSB3ZWlyZC4gR3Vlc3MgaXQgaGFzIHRvIGRvIHdpdGggY2FjaGluZyBvciBpbnN0cnVjdGlvbiBwYXJhbGxlbGxpc20KK29yIHNvLiBJIGFsc28gdHJpZWQgb24gYW4gZWVlUEMgKENlbGVyb24sIGNsb2NrZWQgYXQgOTAwIE1oeikuIEludGVyZXN0aW5nCitvYnNlcnZhdGlvbiB3YXMgdGhhdCB0aGlzIG9uZSBpcyBvbmx5IDMwJSBzbG93ZXIgKGFjY29yZGluZyB0byB0aW1lKQorZXhlY3V0aW5nIHRoZSBjb2RlIGFzIG15IDNHaHogRDkyMCBwcm9jZXNzb3IuCisKK1dlbGwsIGl0IHdhcyBleHBlY3RlZCBub3QgdG8gYmUgZWFzeSBzbyBtYXliZSBpbnN0ZWFkIG1vdmUgdG8gYQorZGlmZmVyZW50IHRyYWNrOiBsZXQncyBtb3ZlIGJhY2sgdG8gdGhlIGNvZGUgZnJvbSBhdHRlbXB0MiBhbmQgZG8gc29tZQorbG9vcCB1bnJvbGxpbmcuIFRoaXMgd2lsbCBlbGltaW5hdGUgYSBmZXcgaWYgc3RhdGVtZW50cy4gSSdsbCB0cnkKK2RpZmZlcmVudCBhbW91bnRzIG9mIHVucm9sbGluZyB0byBzZWUgd2hhdCB3b3JrcyBiZXN0LgorCisKK0F0dGVtcHQgNAorPT09PT09PT09CisKK1Vucm9sbGVkIHRoZSBsb29wIDEsIDIsIDMgYW5kIDQgdGltZXMuCitGb3IgNCB0aGUgY29kZSBzdGFydHMgd2l0aDoKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgcnA0IF49IGN1cjsKKyAgICAgICAgcnA2IF49IGN1cjsKKyAgICAgICAgcnA4IF49IGN1cjsKKyAgICAgICAgcnAxMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgxKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIpIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgcnA1IF49IGN1cjsKKyAgICAgICAgcnA2IF49IGN1cjsKKyAgICAgICAgLi4uCisKKworQW5hbHlzaXMgNAorPT09PT09PT09PQorCitVbnJvbGxpbmcgb25jZSBnYWlucyBhYm91dCAxNSUKK1Vucm9sbGluZyB0d2ljZSBrZWVwcyB0aGUgZ2FpbiBhdCBhYm91dCAxNSUKK1Vucm9sbGluZyB0aHJlZSB0aW1lcyBnaXZlcyBhIGdhaW4gb2YgMzAlIGNvbXBhcmVkIHRvIGF0dGVtcHQgMi4KK1Vucm9sbGluZyBmb3VyIHRpbWVzIGdpdmVzIGEgbWFyZ2luYWwgaW1wcm92ZW1lbnQgY29tcGFyZWQgdG8gdW5yb2xsaW5nCit0aHJlZSB0aW1lcy4KKworSSBkZWNpZGVkIHRvIHByb2NlZWQgd2l0aCBhIGZvdXIgdGltZSB1bnJvbGxlZCBsb29wIGFueXdheS4gSXQgd2FzIG15IGd1dAorZmVlbGluZyB0aGF0IGluIHRoZSBuZXh0IHN0ZXBzIEkgd291bGQgb2J0YWluIGFkZGl0aW9uYWwgZ2FpbiBmcm9tIGl0LgorCitUaGUgbmV4dCBzdGVwIHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGZhY3QgdGhhdCBwYXIgY29udGFpbnMgdGhlIHhvciBvZiBhbGwKK2J5dGVzIGFuZCBycDQgYW5kIHJwNSBlYWNoIGNvbnRhaW4gdGhlIHhvciBvZiBoYWxmIG9mIHRoZSBieXRlcy4KK1NvIGluIGVmZmVjdCBwYXIgPSBycDQgXiBycDUuIEJ1dCBhcyB4b3IgaXMgY29tbXV0YXRpdmUgd2UgY2FuIGFsc28gc2F5Cit0aGF0IHJwNSA9IHBhciBeIHJwNC4gU28gbm8gbmVlZCB0byBrZWVwIGJvdGggcnA0IGFuZCBycDUgYXJvdW5kLiBXZSBjYW4KK2VsaW1pbmF0ZSBycDUgKG9yIHJwNCwgYnV0IEkgYWxyZWFkeSBmb3Jlc2F3IGFub3RoZXIgb3B0aW1pc2F0aW9uKS4KK1RoZSBzYW1lIGhvbGRzIGZvciBycDYvNywgcnA4LzksIHJwMTAvMTEgcnAxMi8xMyBhbmQgcnAxNC8xNS4KKworCitBdHRlbXB0IDUKKz09PT09PT09PQorCitFZmZlY3RpdmVseSBzbyBhbGwgb2RkIGRpZ2l0IHJwIGFzc2lnbm1lbnRzIGluIHRoZSBsb29wIHdlcmUgcmVtb3ZlZC4KK1RoaXMgaW5jbHVkZWQgdGhlIGVsc2UgY2xhdXNlIG9mIHRoZSBpZiBzdGF0ZW1lbnRzLgorT2YgY291cnNlIGFmdGVyIHRoZSBsb29wIHdlIG5lZWQgdG8gY29ycmVjdCB0aGluZ3MgYnkgYWRkaW5nIGNvZGUgbGlrZToKKyAgICBycDUgPSBwYXIgXiBycDQ7CitBbHNvIHRoZSBpbml0aWFsIGFzc2lnbm1lbnRzIChycDUgPSAwOyBldGMpIGNvdWxkIGJlIHJlbW92ZWQuCitBbG9uZyB0aGUgbGluZSBJIGFsc28gcmVtb3ZlZCB0aGUgaW5pdGlhbGlzYXRpb24gb2YgcnAwLzEvMi8zLgorCisKK0FuYWx5c2lzIDUKKz09PT09PT09PT0KKworTWVhc3VyZW1lbnRzIHNob3dlZCB0aGlzIHdhcyBhIGdvb2QgbW92ZS4gVGhlIHJ1bi10aW1lIHJvdWdobHkgaGFsdmVkCitjb21wYXJlZCB3aXRoIGF0dGVtcHQgNCB3aXRoIDQgdGltZXMgdW5yb2xsZWQsIGFuZCB3ZSBvbmx5IHJlcXVpcmUgMS8zcmQKK29mIHRoZSBwcm9jZXNzb3IgdGltZSBjb21wYXJlZCB0byB0aGUgY3VycmVudCBjb2RlIGluIHRoZSBsaW51eCBrZXJuZWwuCisKK0hvd2V2ZXIsIHN0aWxsIEkgdGhvdWdodCB0aGVyZSB3YXMgbW9yZS4gSSBkaWRuJ3QgbGlrZSBhbGwgdGhlIGlmCitzdGF0ZW1lbnRzLiBXaHkgbm90IGtlZXAgYSBydW5uaW5nIHBhcml0eSBhbmQgb25seSBrZWVwIHRoZSBsYXN0IGlmCitzdGF0ZW1lbnQuIFRpbWUgZm9yIHlldCBhbm90aGVyIHZlcnNpb24hCisKKworQXR0ZW1wdCA2Cis9PT09PT09PT0KKworVEhlIGNvZGUgd2l0aGluIHRoZSBmb3IgbG9vcCB3YXMgY2hhbmdlZCB0bzoKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyICA9IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSB0bXBwYXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA4IF49IHRtcHBhcjsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA2IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnAxMCBePSB0bXBwYXI7CisKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwNiBePSBjdXI7IHJwOCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOyBycDggXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA4IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwOCBePSBjdXI7CisKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7CisKKwkgICAgcGFyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgxKSA9PSAwKSBycDEyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgyKSA9PSAwKSBycDE0IF49IHRtcHBhcjsKKyAgICB9CisKK0FzIHlvdSBjYW4gc2VlIHRtcHBhciBpcyB1c2VkIHRvIGFjY3VtdWxhdGUgdGhlIHBhcml0eSB3aXRoaW4gYSBmb3IKK2l0ZXJhdGlvbi4gSW4gdGhlIGxhc3QgMyBzdGF0ZW1lbnRzIGlzIGlzIGFkZGVkIHRvIHBhciBhbmQsIGlmIG5lZWRlZCwKK3RvIHJwMTIgYW5kIHJwMTQuCisKK1doaWxlIG1ha2luZyB0aGUgY2hhbmdlcyBJIGFsc28gZm91bmQgdGhhdCBJIGNvdWxkIGV4cGxvaXQgdGhhdCB0bXBwYXIKK2NvbnRhaW5zIHRoZSBydW5uaW5nIHBhcml0eSBmb3IgdGhpcyBpdGVyYXRpb24uIFNvIGluc3RlYWQgb2YgaGF2aW5nOgorcnA0IF49IGN1cjsgcnA2ID0gY3VyOworSSByZW1vdmVkIHRoZSBycDYgPSBjdXI7IHN0YXRlbWVudCBhbmQgZGlkIHJwNiBePSB0bXBwYXI7IG9uIG5leHQKK3N0YXRlbWVudC4gQSBzaW1pbGFyIGNoYW5nZSB3YXMgZG9uZSBmb3IgcnA4IGFuZCBycDEwCisKKworQW5hbHlzaXMgNgorPT09PT09PT09PQorCitNZWFzdXJpbmcgdGhpcyBjb2RlIGFnYWluIHNob3dlZCBiaWcgZ2Fpbi4gV2hlbiBleGVjdXRpbmcgdGhlIG9yaWdpbmFsCitsaW51eCBjb2RlIDEgbWlsbGlvbiB0aW1lcywgdGhpcyB0b29rIGFib3V0IDEgc2Vjb25kIG9uIG15IHN5c3RlbS4KKyh1c2luZyB0aW1lIHRvIG1lYXN1cmUgdGhlIHBlcmZvcm1hbmNlKS4gQWZ0ZXIgdGhpcyBpdGVyYXRpb24gSSB3YXMgYmFjawordG8gMC4wNzUgc2VjLiBBY3R1YWxseSBJIGhhZCB0byBkZWNpZGUgdG8gc3RhcnQgbWVhc3VyaW5nIG92ZXIgMTAKK21pbGxpb24gaW50ZXJhdGlvbnMgaW4gb3JkZXIgbm90IHRvIGxvb3NlIHRvbyBtdWNoIGFjY3VyYWN5LiBUaGlzIG9uZQorZGVmaW5pdGVseSBzZWVtZWQgdG8gYmUgdGhlIGphY2twb3QhCisKK1RoZXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHJvb20gZm9yIGltcHJvdmVtZW50IHRob3VnaC4gVGhlcmUgYXJlIHRocmVlCitwbGFjZXMgd2l0aCBzdGF0ZW1lbnRzOgorcnA0IF49IGN1cjsgcnA2IF49IGN1cjsKK0l0IHNlZW1zIG1vcmUgZWZmaWNpZW50IHRvIGFsc28gbWFpbnRhaW4gYSB2YXJpYWJsZSBycDRfNiBpbiB0aGUgd2hpbGUKK2xvb3A7IFRoaXMgZWxpbWluYXRlcyAzIHN0YXRlbWVudHMgcGVyIGxvb3AuIE9mIGNvdXJzZSBhZnRlciB0aGUgbG9vcCB3ZQorbmVlZCB0byBjb3JyZWN0IGJ5IGFkZGluZzoKKyAgICBycDQgXj0gcnA0XzY7CisgICAgcnA2IF49IHJwNF82CitGdXJ0aGVybW9yZSB0aGVyZSBhcmUgNCBzZXF1ZW50aWFsIGFzc2luZ21lbnRzIHRvIHJwOC4gVGhpcyBjYW4gYmUKK2VuY29kZWQgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgYnkgc2F2aW5nIHRtcHBhciBiZWZvcmUgdGhvc2UgNCBsaW5lcworYW5kIGxhdGVyIGRvIHJwOCA9IHJwOCBeIHRtcHBhciBeIG5vdHJwODsKKyh3aGVyZSBub3RycDggaXMgdGhlIHZhbHVlIG9mIHJwOCBiZWZvcmUgdGhvc2UgNCBsaW5lcykuCitBZ2FpbiBhIHVzZSBvZiB0aGUgY29tbXV0YXRpdmUgcHJvcGVydHkgb2YgeG9yLgorVGltZSBmb3IgYSBuZXcgdGVzdCEKKworCitBdHRlbXB0IDcKKz09PT09PT09PQorCitUaGUgbmV3IGNvZGUgbm93IGxvb2tzIGxpa2U6CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIHsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciAgPSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gdG1wcGFyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwOCBePSB0bXBwYXI7CisKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNF82IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnAxMCBePSB0bXBwYXI7CisKKwkgICAgbm90cnA4ID0gdG1wcGFyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0XzYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOworCSAgICBycDggPSBycDggXiB0bXBwYXIgXiBub3RycDg7CisKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNF82IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsKKworCSAgICBwYXIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDEpID09IDApIHJwMTIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDIpID09IDApIHJwMTQgXj0gdG1wcGFyOworICAgIH0KKyAgICBycDQgXj0gcnA0XzY7CisgICAgcnA2IF49IHJwNF82OworCisKK05vdCBhIGJpZyBjaGFuZ2UsIGJ1dCBldmVyeSBwZW5ueSBjb3VudHMgOi0pCisKKworQW5hbHlzaXMgNworPT09PT09PT09PQorCitBY3V0YWxseSB0aGlzIG1hZGUgdGhpbmdzIHdvcnNlLiBOb3QgdmVyeSBtdWNoLCBidXQgSSBkb24ndCB3YW50IHRvIG1vdmUKK2ludG8gdGhlIHdyb25nIGRpcmVjdGlvbi4gTWF5YmUgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGxhdGVyLiBDb3VsZAoraGF2ZSB0byBkbyB3aXRoIGNhY2hpbmcgYWdhaW4uCisKK0d1ZXNzIHRoYXQgaXMgd2hhdCB0aGVyZSBpcyB0byB3aW4gd2l0aGluIHRoZSBsb29wLiBNYXliZSB1bnJvbGxpbmcgb25lCittb3JlIHRpbWUgd2lsbCBoZWxwLiBJJ2xsIGtlZXAgdGhlIG9wdGltaXNhdGlvbnMgZnJvbSA3IGZvciBub3cuCisKKworQXR0ZW1wdCA4Cis9PT09PT09PT0KKworVW5yb2xsZWQgdGhlIGxvb3Agb25lIG1vcmUgdGltZS4KKworCitBbmFseXNpcyA4Cis9PT09PT09PT09CisKK1RoaXMgbWFrZXMgdGhpbmdzIHdvcnNlLiBMZXQncyBzdGljayB3aXRoIGF0dGVtcHQgNiBhbmQgY29udGludWUgZnJvbSB0aGVyZS4KK0FsdGhvdWdoIGl0IHNlZW1zIHRoYXQgdGhlIGNvZGUgd2l0aGluIHRoZSBsb29wIGNhbm5vdCBiZSBvcHRpbWlzZWQKK2Z1cnRoZXIgdGhlcmUgaXMgc3RpbGwgcm9vbSB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgZWNjIGNvZGVzLgorV2UgY2FuIHNpbXBseSBjYWxjdWFsYXRlIHRoZSB0b3RhbCBwYXJpdHkuIElmIHRoaXMgaXMgMCB0aGVuIHJwNCA9IHJwNQorZXRjLiBJZiB0aGUgcGFyaXR5IGlzIDEsIHRoZW4gcnA0ID0gIXJwNTsKK0J1dCBpZiBycDQgPSBycDUgd2UgZG8gbm90IG5lZWQgcnA1IGV0Yy4gV2UgY2FuIGp1c3Qgd3JpdGUgdGhlIGV2ZW4gYml0cworaW4gdGhlIHJlc3VsdCBieXRlIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlCisgICAgY29kZVswXSB8PSAoY29kZVswXSA8PCAxKTsKK0xldHMgdGVzdCB0aGlzLgorCisKK0F0dGVtcHQgOQorPT09PT09PT09CisKK0NoYW5nZWQgdGhlIGNvZGUgYnV0IGFnYWluIHRoaXMgc2xpZ2h0bHkgZGVncmFkZXMgcGVyZm9ybWFuY2UuIFRyaWVkIGFsbAora2luZCBvZiBvdGhlciB0aGluZ3MsIGxpa2UgaGF2aW5nIGRlZGljYXRlZCBwYXJpdHkgYXJyYXlzIHRvIGF2b2lkIHRoZQorc2hpZnQgYWZ0ZXIgcGFyaXR5W3JwN10gPDwgNzsgTm8gZ2Fpbi4KK0NoYW5nZSB0aGUgbG9va3VwIHVzaW5nIHRoZSBwYXJpdHkgYXJyYXkgYnkgdXNpbmcgc2hpZnQgb3BlcmF0b3JzIChlLmcuCityZXBsYWNlIHBhcml0eVtycDddIDw8IDcgd2l0aDoKK3JwNyBePSAocnA3IDw8IDQpOworcnA3IF49IChycDcgPDwgMik7CitycDcgXj0gKHJwNyA8PCAxKTsKK3JwNyAmPSAweDgwOworTm8gZ2Fpbi4KKworVGhlIG9ubHkgbWFyZ2luYWwgY2hhbmdlIHdhcyBpbnZlcnRpbmcgdGhlIHBhcml0eSBiaXRzLCBzbyB3ZSBjYW4gcmVtb3ZlCit0aGUgbGFzdCB0aHJlZSBpbnZlcnQgc3RhdGVtZW50cy4KKworQWggd2VsbCwgcGl0eSB0aGlzIGRvZXMgbm90IGRlbGl2ZXIgbW9yZS4gVGhlbiBhZ2FpbiAxMCBtaWxsaW9uCitpdGVyYXRpb25zIHVzaW5nIHRoZSBsaW51eCBkcml2ZXIgY29kZSB0YWtlcyBiZXR3ZWVuIDEzIGFuZCAxMy41CitzZWNvbmRzLCB3aGVyZWFzIG15IGNvZGUgbm93IHRha2VzIGFib3V0IDAuNzMgc2Vjb25kcyBmb3IgdGhvc2UgMTAKK21pbGxpb24gaXRlcmF0aW9ucy4gU28gYmFzaWNhbGx5IEkndmUgaW1wcm92ZWQgdGhlIHBlcmZvcm1hbmNlIGJ5IGEKK2ZhY3RvciAxOCBvbiBteSBzeXN0ZW0uIE5vdCB0aGF0IGJhZC4gT2YgY291cnNlIG9uIGRpZmZlcmVudCBoYXJkd2FyZQoreW91IHdpbGwgZ2V0IGRpZmZlcmVudCByZXN1bHRzLiBObyB3YXJyYW50aWVzIQorCitCdXQgb2YgY291cnNlIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYSBmcmVlIGx1bmNoLiBUaGUgY29kZXNpemUgYWxtb3N0Cit0cmlwbGVkIChmcm9tIDU2MiBieXRlcyB0byAxNDM0IGJ5dGVzKS4gVGhlbiBhZ2FpbiwgaXQgaXMgbm90IHRoYXQgbXVjaC4KKworCitDb3JyZWN0aW5nIGVycm9ycworPT09PT09PT09PT09PT09PT0KKworRm9yIGNvcnJlY3RpbmcgZXJyb3JzIEkgYWdhaW4gdXNlZCB0aGUgU1QgYXBwbGljYXRpb24gbm90ZSBhcyBhIHN0YXJ0ZXIsCitidXQgSSBhbHNvIHBlZWtlZCBhdCB0aGUgZXhpc3RpbmcgY29kZS4KK1RoZSBhbGdvcml0aG0gaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEp1c3QgeG9yIHRoZSBnaXZlbiBhbmQKK3RoZSBjYWxjdWxhdGVkIGVjYy4gSWYgYWxsIGJ5dGVzIGFyZSAwIHRoZXJlIGlzIG5vIHByb2JsZW0uIElmIDExIGJpdHMKK2FyZSAxIHdlIGhhdmUgb25lIGNvcnJlY3RhYmxlIGJpdCBlcnJvci4gSWYgdGhlcmUgaXMgMSBiaXQgMSwgd2UgaGF2ZSBhbgorZXJyb3IgaW4gdGhlIGdpdmVuIGVjYyBjb2RlLgorSXQgcHJvdmVkIHRvIGJlIGZhc3Rlc3QgdG8gZG8gc29tZSB0YWJsZSBsb29rdXBzLiBQZXJmb3JtYW5jZSBnYWluCitpbnRyb2R1Y2VkIGJ5IHRoaXMgaXMgYWJvdXQgYSBmYWN0b3IgMiBvbiBteSBzeXN0ZW0gd2hlbiBhIHJlcGFpciBoYWQgdG8KK2JlIGRvbmUsIGFuZCAxJSBvciBzbyBpZiBubyByZXBhaXIgaGFkIHRvIGJlIGRvbmUuCitDb2RlIHNpemUgaW5jcmVhc2VkIGZyb20gMzMwIGJ5dGVzIHRvIDY4NiBieXRlcyBmb3IgdGhpcyBmdW5jdGlvbi4KKyhnY2MgNC4yLCAtTzMpCisKKworQ29uY2x1c2lvbgorPT09PT09PT09PQorCitUaGUgZ2FpbiB3aGVuIGNhbGN1bGF0aW5nIHRoZSBlY2MgaXMgdHJlbWVuZG91cy4gT20gbXkgZGV2ZWxvcG1lbnQgaGFyZHdhcmUKK2Egc3BlZWR1cCBvZiBhIGZhY3RvciBvZiAxOCBmb3IgZWNjIGNhbGN1bGF0aW9uIHdhcyBhY2hpZXZlZC4gT24gYSB0ZXN0IG9uIGFuCitlbWJlZGRlZCBzeXN0ZW0gd2l0aCBhIE1JUFMgY29yZSBhIGZhY3RvciA3IHdhcyBvYnRhaW5lZC4KK09uICBhIHRlc3Qgd2l0aCBhIExpbmtzeXMgTlNMVTIgKEFSTXY1VEUgcHJvY2Vzc29yKSB0aGUgc3BlZWR1cCB3YXMgYSBmYWN0b3IKKzUgKGJpZyBlbmRpYW4gbW9kZSwgZ2NjIDQuMS4yLCAtTzMpCitGb3IgY29ycmVjdGlvbiBub3QgbXVjaCBnYWluIGNvdWxkIGJlIG9idGFpbmVkIChhcyBiaXRmbGlwcyBhcmUgcmFyZSkuIFRoZW4KK2FnYWluIHRoZXJlIGFyZSBhbHNvIG11Y2ggbGVzcyBjeWNsZXMgc3BlbnQgdGhlcmUuCisKK0l0IHNlZW1zIHRoZXJlIGlzIG5vdCBtdWNoIG1vcmUgZ2FpbiBwb3NzaWJsZSBpbiB0aGlzLCBhdCBsZWFzdCB3aGVuCitwcm9ncmFtbWVkIGluIEMuIE9mIGNvdXJzZSBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBzcXVlZXplIHNvbWV0aGluZyBtb3JlCitvdXQgb2YgaXQgd2l0aCBhbiBhc3NlbWJsZXIgcHJvZ3JhbSwgYnV0IGR1ZSB0byBwaXBlbGluZSBiZWhhdmlvdXIgZXRjCit0aGlzIGlzIHZlcnkgdHJpY2t5IChhdCBsZWFzdCBmb3IgaW50ZWwgaHcpLgorCitBdXRob3I6IEZyYW5zIE1ldWxlbmJyb2VrcworQ29weXJpZ2h0IChDKSAyMDA4IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CmluZGV4IGRlNDA2M2MuLjAyZWE5YTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CkBAIC0xOTE3LDYgKzE5MTcsOCBAQAogCQkJaW52ZXJzZSBjbG9jayBwb2xhcml0eSAoQ1BPTCkgbW9kZQogICAgIC0gc3BpLWNwaGEgICAgICAgIC0gKG9wdGlvbmFsKSBFbXB0eSBwcm9wZXJ0eSBpbmRpY2F0aW5nIGRldmljZSByZXF1aXJlcwogCQkJc2hpZnRlZCBjbG9jayBwaGFzZSAoQ1BIQSkgbW9kZQorICAgIC0gc3BpLWNzLWhpZ2ggICAgIC0gKG9wdGlvbmFsKSBFbXB0eSBwcm9wZXJ0eSBpbmRpY2F0aW5nIGRldmljZSByZXF1aXJlcworCQkJY2hpcCBzZWxlY3QgYWN0aXZlIGhpZ2gKIAogICAgIFNQSSBleGFtcGxlIGZvciBhbiBNUEM1MjAwIFNQSSBidXM6CiAJCXNwaUBmMDAgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvYm9hcmQudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvYm9hcmQudHh0CmluZGV4IDc0YWU2ZjEuLjgxYTkxN2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2JvYXJkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ib2FyZC50eHQKQEAgLTIsMTMgKzIsMTMgQEAKIAogUmVxdWlyZWQgcHJvcGVydGllczoKIAotIC0gZGV2aWNlX3R5cGUgOiBTaG91bGQgYmUgImJvYXJkLWNvbnRyb2wiCisgLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJmc2wsPGJvYXJkPi1iY3NyIgogIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQogCiBFeGFtcGxlOgogCiAJYmNzckBmODAwMDAwMCB7Ci0JCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwbWRzLWJjc3IiOwogCQlyZWcgPSA8ZjgwMDAwMDAgODAwMD47CiAJfTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKaW5kZXggZTFmZjBkOS4uYmRlNzk5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CkBAIC0zNjksNCArMzY5LDUgQEAKICAgMiAtIEEgbW9kdWxlIHdhcyBmb3JjZSBsb2FkZWQgYnkgaW5zbW9kIC1mLgogICAgICAgU2V0IGJ5IG1vZHV0aWxzID49IDIuNC45IGFuZCBtb2R1bGUtaW5pdC10b29scy4KICAgNCAtIFVuc2FmZSBTTVAgcHJvY2Vzc29yczogU01QIHdpdGggQ1BVcyBub3QgZGVzaWduZWQgZm9yIFNNUC4KKyA2NCAtIEEgbW9kdWxlIGZyb20gZHJpdmVycy9zdGFnaW5nIHdhcyBsb2FkZWQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKaW5kZXggNWNlMDk1Mi4uMTBhMDI2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKQEAgLTk1LDcgKzk1LDkgQEAKIAogJ3AnICAgICAtIFdpbGwgZHVtcCB0aGUgY3VycmVudCByZWdpc3RlcnMgYW5kIGZsYWdzIHRvIHlvdXIgY29uc29sZS4KIAotJ3EnICAgICAtIFdpbGwgZHVtcCBhIGxpc3Qgb2YgYWxsIHJ1bm5pbmcgdGltZXJzLgorJ3EnICAgICAtIFdpbGwgZHVtcCBwZXIgQ1BVIGxpc3RzIG9mIGFsbCBhcm1lZCBocnRpbWVycyAoYnV0IE5PVCByZWd1bGFyCisgICAgICAgICAgdGltZXJfbGlzdCB0aW1lcnMpIGFuZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhbGwKKyAgICAgICAgICBjbG9ja2V2ZW50IGRldmljZXMuCiAKICdyJyAgICAgLSBUdXJucyBvZmYga2V5Ym9hcmQgcmF3IG1vZGUgYW5kIHNldHMgaXQgdG8gWExBVEUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZXBvaW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzNTRlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0CkBAIC0wLDAgKzEsMTAxIEBACisJICAgICAgICAgICAgIFVzaW5nIHRoZSBMaW51eCBLZXJuZWwgVHJhY2Vwb2ludHMKKworCQkJICAgIE1hdGhpZXUgRGVzbm95ZXJzCisKKworVGhpcyBkb2N1bWVudCBpbnRyb2R1Y2VzIExpbnV4IEtlcm5lbCBUcmFjZXBvaW50cyBhbmQgdGhlaXIgdXNlLiBJdCBwcm92aWRlcworZXhhbXBsZXMgb2YgaG93IHRvIGluc2VydCB0cmFjZXBvaW50cyBpbiB0aGUga2VybmVsIGFuZCBjb25uZWN0IHByb2JlIGZ1bmN0aW9ucwordG8gdGhlbSBhbmQgcHJvdmlkZXMgc29tZSBleGFtcGxlcyBvZiBwcm9iZSBmdW5jdGlvbnMuCisKKworKiBQdXJwb3NlIG9mIHRyYWNlcG9pbnRzCisKK0EgdHJhY2Vwb2ludCBwbGFjZWQgaW4gY29kZSBwcm92aWRlcyBhIGhvb2sgdG8gY2FsbCBhIGZ1bmN0aW9uIChwcm9iZSkgdGhhdCB5b3UKK2NhbiBwcm92aWRlIGF0IHJ1bnRpbWUuIEEgdHJhY2Vwb2ludCBjYW4gYmUgIm9uIiAoYSBwcm9iZSBpcyBjb25uZWN0ZWQgdG8gaXQpIG9yCisib2ZmIiAobm8gcHJvYmUgaXMgYXR0YWNoZWQpLiBXaGVuIGEgdHJhY2Vwb2ludCBpcyAib2ZmIiBpdCBoYXMgbm8gZWZmZWN0LAorZXhjZXB0IGZvciBhZGRpbmcgYSB0aW55IHRpbWUgcGVuYWx0eSAoY2hlY2tpbmcgYSBjb25kaXRpb24gZm9yIGEgYnJhbmNoKSBhbmQKK3NwYWNlIHBlbmFsdHkgKGFkZGluZyBhIGZldyBieXRlcyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgYXQgdGhlIGVuZCBvZiB0aGUKK2luc3RydW1lbnRlZCBmdW5jdGlvbiBhbmQgYWRkcyBhIGRhdGEgc3RydWN0dXJlIGluIGEgc2VwYXJhdGUgc2VjdGlvbikuICBXaGVuIGEKK3RyYWNlcG9pbnQgaXMgIm9uIiwgdGhlIGZ1bmN0aW9uIHlvdSBwcm92aWRlIGlzIGNhbGxlZCBlYWNoIHRpbWUgdGhlIHRyYWNlcG9pbnQKK2lzIGV4ZWN1dGVkLCBpbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQgb2YgdGhlIGNhbGxlci4gV2hlbiB0aGUgZnVuY3Rpb24gcHJvdmlkZWQKK2VuZHMgaXRzIGV4ZWN1dGlvbiwgaXQgcmV0dXJucyB0byB0aGUgY2FsbGVyIChjb250aW51aW5nIGZyb20gdGhlIHRyYWNlcG9pbnQKK3NpdGUpLgorCitZb3UgY2FuIHB1dCB0cmFjZXBvaW50cyBhdCBpbXBvcnRhbnQgbG9jYXRpb25zIGluIHRoZSBjb2RlLiBUaGV5IGFyZQorbGlnaHR3ZWlnaHQgaG9va3MgdGhhdCBjYW4gcGFzcyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBhcmFtZXRlcnMsCit3aGljaCBwcm90b3R5cGVzIGFyZSBkZXNjcmliZWQgaW4gYSB0cmFjZXBvaW50IGRlY2xhcmF0aW9uIHBsYWNlZCBpbiBhIGhlYWRlcgorZmlsZS4KKworVGhleSBjYW4gYmUgdXNlZCBmb3IgdHJhY2luZyBhbmQgcGVyZm9ybWFuY2UgYWNjb3VudGluZy4KKworCisqIFVzYWdlCisKK1R3byBlbGVtZW50cyBhcmUgcmVxdWlyZWQgZm9yIHRyYWNlcG9pbnRzIDoKKworLSBBIHRyYWNlcG9pbnQgZGVmaW5pdGlvbiwgcGxhY2VkIGluIGEgaGVhZGVyIGZpbGUuCistIFRoZSB0cmFjZXBvaW50IHN0YXRlbWVudCwgaW4gQyBjb2RlLgorCitJbiBvcmRlciB0byB1c2UgdHJhY2Vwb2ludHMsIHlvdSBzaG91bGQgaW5jbHVkZSBsaW51eC90cmFjZXBvaW50LmguCisKK0luIGluY2x1ZGUvdHJhY2Uvc3Vic3lzLmggOgorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitERUZJTkVfVFJBQ0Uoc3Vic3lzX2V2ZW50bmFtZSwKKwlUUFBUT1RPKGludCBmaXJzdGFyZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKKwlUUEFSR1MoZmlyc3RhcmcsIHApKTsKKworSW4gc3Vic3lzL2ZpbGUuYyAod2hlcmUgdGhlIHRyYWNpbmcgc3RhdGVtZW50IG11c3QgYmUgYWRkZWQpIDoKKworI2luY2x1ZGUgPHRyYWNlL3N1YnN5cy5oPgorCit2b2lkIHNvbWVmY3Qodm9pZCkKK3sKKwkuLi4KKwl0cmFjZV9zdWJzeXNfZXZlbnRuYW1lKGFyZywgdGFzayk7CisJLi4uCit9CisKK1doZXJlIDoKKy0gc3Vic3lzX2V2ZW50bmFtZSBpcyBhbiBpZGVudGlmaWVyIHVuaXF1ZSB0byB5b3VyIGV2ZW50CisgICAgLSBzdWJzeXMgaXMgdGhlIG5hbWUgb2YgeW91ciBzdWJzeXN0ZW0uCisgICAgLSBldmVudG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHRyYWNlLgorLSBUUFBUT1RPKGludCBmaXJzdGFyZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKSBpcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBmdW5jdGlvbgorICBjYWxsZWQgYnkgdGhpcyB0cmFjZXBvaW50LgorLSBUUEFSR1MoZmlyc3RhcmcsIHApIGFyZSB0aGUgcGFyYW1ldGVycyBuYW1lcywgc2FtZSBhcyBmb3VuZCBpbiB0aGUgcHJvdG90eXBlLgorCitDb25uZWN0aW5nIGEgZnVuY3Rpb24gKHByb2JlKSB0byBhIHRyYWNlcG9pbnQgaXMgZG9uZSBieSBwcm92aWRpbmcgYSBwcm9iZQorKGZ1bmN0aW9uIHRvIGNhbGwpIGZvciB0aGUgc3BlY2lmaWMgdHJhY2Vwb2ludCB0aHJvdWdoCityZWdpc3Rlcl90cmFjZV9zdWJzeXNfZXZlbnRuYW1lKCkuICBSZW1vdmluZyBhIHByb2JlIGlzIGRvbmUgdGhyb3VnaAordW5yZWdpc3Rlcl90cmFjZV9zdWJzeXNfZXZlbnRuYW1lKCk7IGl0IHdpbGwgcmVtb3ZlIHRoZSBwcm9iZSBzdXJlIHRoZXJlIGlzIG5vCitjYWxsZXIgbGVmdCB1c2luZyB0aGUgcHJvYmUgd2hlbiBpdCByZXR1cm5zLiBQcm9iZSByZW1vdmFsIGlzIHByZWVtcHQtc2FmZQorYmVjYXVzZSBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFyb3VuZCB0aGUgcHJvYmUgY2FsbC4gU2VlIHRoZSAiUHJvYmUgZXhhbXBsZSIKK3NlY3Rpb24gYmVsb3cgZm9yIGEgc2FtcGxlIHByb2JlIG1vZHVsZS4KKworVGhlIHRyYWNlcG9pbnQgbWVjaGFuaXNtIHN1cHBvcnRzIGluc2VydGluZyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUKK3RyYWNlcG9pbnQsIGJ1dCBhIHNpbmdsZSBkZWZpbml0aW9uIG11c3QgYmUgbWFkZSBvZiBhIGdpdmVuIHRyYWNlcG9pbnQgbmFtZSBvdmVyCithbGwgdGhlIGtlcm5lbCB0byBtYWtlIHN1cmUgbm8gdHlwZSBjb25mbGljdCB3aWxsIG9jY3VyLiBOYW1lIG1hbmdsaW5nIG9mIHRoZQordHJhY2Vwb2ludHMgaXMgZG9uZSB1c2luZyB0aGUgcHJvdG90eXBlcyB0byBtYWtlIHN1cmUgdHlwaW5nIGlzIGNvcnJlY3QuCitWZXJpZmljYXRpb24gb2YgcHJvYmUgdHlwZSBjb3JyZWN0bmVzcyBpcyBkb25lIGF0IHRoZSByZWdpc3RyYXRpb24gc2l0ZSBieSB0aGUKK2NvbXBpbGVyLiBUcmFjZXBvaW50cyBjYW4gYmUgcHV0IGluIGlubGluZSBmdW5jdGlvbnMsIGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucywKK2FuZCB1bnJvbGxlZCBsb29wcyBhcyB3ZWxsIGFzIHJlZ3VsYXIgZnVuY3Rpb25zLgorCitUaGUgbmFtaW5nIHNjaGVtZSAic3Vic3lzX2V2ZW50IiBpcyBzdWdnZXN0ZWQgaGVyZSBhcyBhIGNvbnZlbnRpb24gaW50ZW5kZWQKK3RvIGxpbWl0IGNvbGxpc2lvbnMuIFRyYWNlcG9pbnQgbmFtZXMgYXJlIGdsb2JhbCB0byB0aGUga2VybmVsOiB0aGV5IGFyZQorY29uc2lkZXJlZCBhcyBiZWluZyB0aGUgc2FtZSB3aGV0aGVyIHRoZXkgYXJlIGluIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBvciBpbgorbW9kdWxlcy4KKworCisqIFByb2JlIC8gdHJhY2Vwb2ludCBleGFtcGxlCisKK1NlZSB0aGUgZXhhbXBsZSBwcm92aWRlZCBpbiBzYW1wbGVzL3RyYWNlcG9pbnRzL3NyYworCitDb21waWxlIHRoZW0gd2l0aCB5b3VyIGtlcm5lbC4KKworUnVuLCBhcyByb290IDoKK21vZHByb2JlIHRyYWNlcG9pbnQtZXhhbXBsZSAoaW5zbW9kIG9yZGVyIGlzIG5vdCBpbXBvcnRhbnQpCittb2Rwcm9iZSB0cmFjZXBvaW50LXByb2JlLWV4YW1wbGUKK2NhdCAvcHJvYy90cmFjZXBvaW50LWV4YW1wbGUgKHJldHVybnMgYW4gZXhwZWN0ZWQgZXJyb3IpCitybW1vZCB0cmFjZXBvaW50LWV4YW1wbGUgdHJhY2Vwb2ludC1wcm9iZS1leGFtcGxlCitkbWVzZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlcnMvbW1pb3RyYWNlLnR4dAppbmRleCBhNGFmYjU2Li41YmJiZTIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlcnMvbW1pb3RyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlcnMvbW1pb3RyYWNlLnR4dApAQCAtMzYsNyArMzYsNyBAQAogJCBlY2hvIG1taW90cmFjZSA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAkIGNhdCAvZGVidWcvdHJhY2luZy90cmFjZV9waXBlID4gbXlkdW1wLnR4dCAmCiBTdGFydCBYIG9yIHdoYXRldmVyLgotJCBlY2hvICJYIGlzIHVwIiA+IC9kZWJ1Zy90cmFjaW5nL21hcmtlcgorJCBlY2hvICJYIGlzIHVwIiA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX21hcmtlcgogJCBlY2hvIG5vbmUgPiAvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlcgogQ2hlY2sgZm9yIGxvc3QgZXZlbnRzLgogCkBAIC01OSw5ICs1OSw4IEBACiBMb2FkIHRoZSBkcml2ZXIgeW91IHdhbnQgdG8gdHJhY2UgYW5kIHVzZSBpdC4gTW1pb3RyYWNlIHdpbGwgb25seSBjYXRjaCBNTUlPCiBhY2Nlc3NlcyB0byBhcmVhcyB0aGF0IGFyZSBpb3JlbWFwcGVkIHdoaWxlIG1taW90cmFjZSBpcyBhY3RpdmUuCiAKLVtVbmltcGxlbWVudGVkIGZlYXR1cmU6XQogRHVyaW5nIHRyYWNpbmcgeW91IGNhbiBwbGFjZSBjb21tZW50cyAobWFya2VycykgaW50byB0aGUgdHJhY2UgYnkKLSQgZWNobyAiWCBpcyB1cCIgPiAvZGVidWcvdHJhY2luZy9tYXJrZXIKKyQgZWNobyAiWCBpcyB1cCIgPiAvZGVidWcvdHJhY2luZy90cmFjZV9tYXJrZXIKIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHNlZSB3aGljaCBwYXJ0IG9mIHRoZSAoaHVnZSkgdHJhY2UgY29ycmVzcG9uZHMgdG8KIHdoaWNoIGFjdGlvbi4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcGxhY2UgZGVzY3JpcHRpdmUgbWFya2VycyBhYm91dCB3aGF0IHlvdQogZG8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9XVVNCLURlc2lnbi1vdmVydmlldy50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9XVVNCLURlc2lnbi1vdmVydmlldy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzZDYyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL1dVU0ItRGVzaWduLW92ZXJ2aWV3LnR4dApAQCAtMCwwICsxLDQ0OCBAQAorCitMaW51eCBVV0IgKyBXaXJlbGVzcyBVU0IgKyBXaU5FVAorCisgICAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgICBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgICAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAgIDAyMTEwLTEzMDEsIFVTQS4KKworCitQbGVhc2UgdmlzaXQgaHR0cDovL2J1Z2hvc3Qub3JnL3RoZXdpa2kvRGVzaWduLW92ZXJ2aWV3LnR4dC0xLjggZm9yCit1cGRhdGVkIGNvbnRlbnQuCisKKyAgICAqIERlc2lnbi1vdmVydmlldy50eHQtMS44CisKK1RoaXMgY29kZSBpbXBsZW1lbnRzIGEgVWx0cmEgV2lkZSBCYW5kIHN0YWNrIGZvciBMaW51eCwgYXMgd2VsbCBhcworZHJpdmVycyBmb3IgdGhlIHRoZSBVU0IgYmFzZWQgVVdCIHJhZGlvIGNvbnRyb2xsZXJzIGRlZmluZWQgaW4gdGhlCitXaXJlbGVzcyBVU0IgMS4wIHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBXaXJlbGVzcyBVU0IgaG9zdCBjb250cm9sbGVyCithbmQgYW4gSW50ZWwgV2lORVQgY29udHJvbGxlcikuCisKKyAgIDEuIEludHJvZHVjdGlvbgorICAgICAgICAgMS4gSFdBOiBIb3N0IFdpcmUgYWRhcHRlcnMsIHlvdXIgV2lyZWxlc3MgVVNCIGRvbmdsZQorCisgICAgICAgICAyLiBEV0E6IERldmljZSBXaXJlZCBBZGFwdG9yLCBhIFdpcmVsZXNzIFVTQiBodWIgZm9yIHdpcmVkCisgICAgICAgICAgICBkZXZpY2VzCisgICAgICAgICAzLiBXSENJOiBXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLCB0aGUgUENJIFdVU0IgaG9zdAorICAgICAgICAgICAgYWRhcHRlcgorICAgMi4gVGhlIFVXQiBzdGFjaworICAgICAgICAgMS4gRGV2aWNlcyBhbmQgaG9zdHM6IHRoZSBiYXNpYyBzdHJ1Y3R1cmUKKworICAgICAgICAgMi4gSG9zdCBDb250cm9sbGVyIGxpZmUgY3ljbGUKKworICAgICAgICAgMy4gT24gdGhlIGFpcjogYmVhY29ucyBhbmQgZW51bWVyYXRpbmcgdGhlIHJhZGlvIG5laWdoYm9yaG9vZAorCisgICAgICAgICA0LiBEZXZpY2UgbGlzdHMKKyAgICAgICAgIDUuIEJhbmR3aWR0aCBhbGxvY2F0aW9uCisKKyAgIDMuIFdpcmVsZXNzIFVTQiBIb3N0IENvbnRyb2xsZXIgZHJpdmVycworCisgICA0LiBHbG9zc2FyeQorCisKKyAgICBJbnRyb2R1Y3Rpb24KKworVVdCIGlzIGEgd2lkZS1iYW5kIGNvbW11bmljYXRpb24gcHJvdG9jb2wgdGhhdCBpcyB0byBzZXJ2ZSBhbHNvIGFzIHRoZQorbG93LWxldmVsIHByb3RvY29sIGZvciBvdGhlcnMgKG11Y2ggbGlrZSBUQ1Agc2l0cyBvbiBJUCkuIEN1cnJlbnRseQordGhlc2Ugb3RoZXJzIGFyZSBXaXJlbGVzcyBVU0IgYW5kIFRDUC9JUCwgYnV0IHNlZW1zIEJsdWV0b290aCBhbmQKK0ZpcmV3aXJlLzEzOTQgYXJlIGNvbWluZyBhbG9uZy4KKworVVdCIHVzZXMgYSBiYW5kIGZyb20gcm91Z2hseSAzIHRvIDEwIEdIeiwgdHJhbnNtaXR0aW5nIGF0IGEgbWF4IG9mCit+LTQxZEIgKG9yIDAuMDc0IHVXL01Iei0tZ2VvZ3JhcGh5IHNwZWNpZmljIGRhdGEgaXMgc3RpbGwgYmVpbmcKK25lZ290aWF0ZWQgdy8gcmVndWxhdG9ycywgc28gd2F0Y2ggZm9yIGNoYW5nZXMpLiBUaGF0IGJhbmQgaXMgZGl2aWRlZCBpbgorYSBidW5jaCBvZiB+MS41IEdIeiB3aWRlIGNoYW5uZWxzIChvciBiYW5kIGdyb3VwcykgY29tcG9zZWQgb2YgdGhyZWUKK3N1YmJhbmRzL3N1YmNoYW5uZWxzICg1MjggTUh6IGVhY2gpLiBFYWNoIGNoYW5uZWwgaXMgaW5kZXBlbmRlbnQgb2YgZWFjaAorb3RoZXIsIHNvIHlvdSBjb3VsZCBjb25zaWRlciB0aGVtIGRpZmZlcmVudCAiYnVzc2VzIi4gSW5pdGlhbGx5IHRoaXMKK2RyaXZlciBjb25zaWRlcnMgdGhlbSBhbGwgYSBzaW5nbGUgb25lLgorCitSYWRpbyB0aW1lIGlzIGRpdmlkZWQgaW4gNjU1MzYgdXMgbG9uZyAvc3VwZXJmcmFtZXMvLCBlYWNoIG9uZSBkaXZpZGVkCitpbiAyNTYgMjU2dXMgbG9uZyAvTUFTcy8gKE1lZGlhIEFsbG9jYXRpb24gU2xvdHMpLCB3aGljaCBhcmUgdGhlIGJhc2ljCit0aW1lL21lZGlhIGFsbG9jYXRpb24gdW5pdHMgZm9yIHRyYW5zZmVycmluZyBkYXRhLiBBdCB0aGUgYmVnaW5uaW5nIG9mCitlYWNoIHN1cGVyZnJhbWUgdGhlcmUgaXMgYSBCZWFjb24gUGVyaW9kIChCUCksIHdoZXJlIGV2ZXJ5IGRldmljZQordHJhbnNtaXQgaXRzIGJlYWNvbiBvbiBhIHNpbmdsZSBNQVMuIFRoZSBsZW5ndGggb2YgdGhlIEJQIGRlcGVuZHMgb24gaG93CittYW55IGRldmljZXMgYXJlIHByZXNlbnQgYW5kIHRoZSBsZW5ndGggb2YgdGhlaXIgYmVhY29ucy4KKworRGV2aWNlcyBoYXZlIGEgTUFDIChmaXhlZCwgNDggYml0IGFkZHJlc3MpIGFuZCBhIGRldmljZSAoY2hhbmdlYWJsZSwgMTYKK2JpdCBhZGRyZXNzKSBhbmQgc2VuZCBwZXJpb2RpYyBiZWFjb25zIHRvIGFkdmVydGlzZSB0aGVtc2VsdmVzIGFuZCBwYXNzCitpbmZvIG9uIHdoYXQgdGhleSBhcmUgYW5kIGRvLiBUaGV5IGFkdmVydGlzZSB0aGVpciBjYXBhYmlsaXRpZXMgYW5kIGEKK2J1bmNoIG9mIG90aGVyIHN0dWZmLgorCitUaGUgZGlmZmVyZW50IGxvZ2ljYWwgcGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlOgorCisgICAgKgorCisgICAgICAqVVdCKjogdGhlIFVsdHJhLVdpZGUtQmFuZCBzdGFjayAtLSBtYW5hZ2VzIHRoZSByYWRpbyBhbmQKKyAgICAgIGFzc29jaWF0ZWQgc3BlY3RydW0gdG8gYWxsb3cgZm9yIGRldmljZXMgc2hhcmluZyBpdC4gQWxsb3dzIHRvCisgICAgICBjb250cm9sIGJhbmR3aWR0aCBhc3NpbmdtZW50LCBiZWFjb25pbmcsIHNjYW5uaW5nLCBldGMKKworICAgICoKKworICAgICAgKldVU0IqOiB0aGUgbGF5ZXIgdGhhdCBzaXRzIG9uIHRvcCBvZiBVV0IgdG8gcHJvdmlkZSBXaXJlbGVzcyBVU0IuCisgICAgICBUaGUgV2lyZWxlc3MgVVNCIHNwZWMgZGVmaW5lcyBtZWFucyB0byBjb250cm9sIGEgVVdCIHJhZGlvIGFuZCB0bworICAgICAgZG8gdGhlIGFjdHVhbCBXVVNCLgorCisKKyAgICAgIEhXQTogSG9zdCBXaXJlIGFkYXB0ZXJzLCB5b3VyIFdpcmVsZXNzIFVTQiBkb25nbGUKKworV1VTQiBhbHNvIGRlZmluZXMgYSBkZXZpY2UgY2FsbGVkIGEgSG9zdCBXaXJlIEFkYXB0b3IgKEhXQSksIHdoaWNoIGluCittZXJlIHRlcm1zIGlzIGEgVVNCIGRvbmdsZSB0aGF0IGVuYWJsZXMgeW91ciBQQyB0byBoYXZlIFVXQiBhbmQgV2lyZWxlc3MKK1VTQi4gVGhlIFdpcmVsZXNzIFVTQiBIb3N0IENvbnRyb2xsZXIgaW4gYSBIV0EgbG9va3MgdG8gdGhlIGhvc3QgbGlrZSBhCitbV2lyZWxlc3NdIFVTQiBjb250cm9sbGVyIGNvbm5lY3RlZCB2aWEgVVNCICghKQorCitUaGUgSFdBIGl0c2VsZiBpcyBicm9rZW4gaW4gdHdvIG9yIHRocmVlIG1haW4gaW50ZXJmYWNlczoKKworICAgICoKKworICAgICAgKlJDKjogUmFkaW8gY29udHJvbCAtLSB0aGlzIGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIHRvIHRoZQorICAgICAgVWx0cmEtV2lkZS1CYW5kIHJhZGlvIGNvbnRyb2xsZXIuIFRoZSBkcml2ZXIgZm9yIHRoaXMgaW1wbGVtZW50cyBhCisgICAgICBVU0ItYmFzZWQgVVdCIFJhZGlvIENvbnRyb2xsZXIgdG8gdGhlIFVXQiBzdGFjay4KKworICAgICoKKworICAgICAgKkhDKjogdGhlIHdpcmVsZXNzIFVTQiBob3N0IGNvbnRyb2xsZXIuIEl0IGxvb2tzIGxpa2UgYSBVU0IgaG9zdAorICAgICAgd2hvc2Ugcm9vdCBwb3J0IGlzIHRoZSByYWRpbyBhbmQgdGhlIFdVU0IgZGV2aWNlcyBjb25uZWN0IHRvIGl0LgorICAgICAgVG8gdGhlIHN5c3RlbSBpdCBsb29rcyBsaWtlIGEgc2VwYXJhdGUgVVNCIGhvc3QuIFRoZSBkcml2ZXIgKHdpbGwpCisgICAgICBpbXBsZW1lbnQgYSBVU0IgaG9zdCBjb250cm9sbGVyIChzaW1pbGFyIHRvIFVIQ0ksIE9IQ0kgb3IgRUhDSSkKKyAgICAgIGZvciB3aGljaCB0aGUgcm9vdCBodWIgaXMgdGhlIHJhZGlvLi4uVG8gcmVpdGVyYXRlOiBpdCBpcyBhIFVTQgorICAgICAgY29udHJvbGxlciB0aGF0IGlzIGNvbm5lY3RlZCB2aWEgVVNCIGluc3RlYWQgb2YgUENJLgorCisgICAgKgorCisgICAgICAqV0lORVQqOiBzb21lIEhXIHByb3ZpZGUgYSBXaU5FVCBpbnRlcmZhY2UgKElQIG92ZXIgVVdCKS4gVGhpcworICAgICAgcGFja2FnZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgaXQgKGl0IGxvb2tzIGxpa2UgYSBuZXR3b3JrCisgICAgICBpbnRlcmZhY2UsIHdpbmV0WCkuIFRoZSBkcml2ZXIgZGV0ZWN0cyB3aGVuIHRoZXJlIGlzIGEgbGluayB1cCBmb3IKKyAgICAgIHRoZWlyIHR5cGUgYW5kIGtpY2sgaW50byBnZWFyLgorCisKKyAgICAgIERXQTogRGV2aWNlIFdpcmVkIEFkYXB0b3IsIGEgV2lyZWxlc3MgVVNCIGh1YiBmb3Igd2lyZWQgZGV2aWNlcworCitUaGVzZSBhcmUgdGhlIGNvbXBsZW1lbnQgdG8gSFdBcy4gVGhleSBhcmUgYSBVU0IgaG9zdCBmb3IgY29ubmVjdGluZword2lyZWQgZGV2aWNlcywgYnV0IGl0IGlzIGNvbm5lY3RlZCB0byB5b3VyIFBDIGNvbm5lY3RlZCB2aWEgV2lyZWxlc3MKK1VTQi4gVG8gdGhlIHN5c3RlbSBpdCBsb29rcyBsaWtlIHlldCBhbm90aGVyIFVTQiBob3N0LiBUbyB0aGUgdW50cmFpbmVkCitleWUsIGl0IGxvb2tzIGxpa2UgYSBodWIgdGhhdCBjb25uZWN0cyB1cHN0cmVhbSB3aXJlbGVzc2x5LgorCitXZSBzdGlsbCBvZmZlciBubyBzdXBwb3J0IGZvciB0aGlzOyBob3dldmVyLCBpdCBzaG91bGQgc2hhcmUgYSBsb3Qgb2YKK2NvZGUgd2l0aCB0aGUgSFdBLVJDIGRyaXZlcjsgdGhlcmUgaXMgYSBidW5jaCBvZiBmYWN0b3JpemF0aW9uIHdvcmsgdGhhdAoraGFzIGJlZW4gZG9uZSB0byBzdXBwb3J0IHRoYXQgaW4gdXBjb21pbmcgcmVsZWFzZXMuCisKKworICAgICAgV0hDSTogV2lyZWxlc3MgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSwgdGhlIFBDSSBXVVNCIGhvc3QgYWRhcHRlcgorCitUaGlzIGlzIHlvdXIgdXN1YWwgUENJIGRldmljZSB0aGF0IGltcGxlbWVudHMgV0hDSS4gU2ltaWxhciBpbiBjb25jZXB0Cit0byBFSENJLCBpdCBhbGxvd3MgeW91ciB3aXJlbGVzcyBVU0IgZGV2aWNlcyAoaW5jbHVkaW5nIERXQXMpIHRvIGNvbm5lY3QKK3RvIHlvdXIgaG9zdCB2aWEgYSBQQ0kgaW50ZXJmYWNlLiBBcyBpbiB0aGUgY2FzZSBvZiB0aGUgSFdBLCBpdCBoYXMgYQorUmFkaW8gQ29udHJvbCBpbnRlcmZhY2UgYW5kIHRoZSBXVVNCIEhvc3QgQ29udHJvbGxlciBpbnRlcmZhY2UgcGVyIHNlLgorCitUaGVyZSBpcyBzdGlsbCBubyBkcml2ZXIgc3VwcG9ydCBmb3IgdGhpcywgYnV0IHdpbGwgYmUgaW4gdXBjb21pbmcKK3JlbGVhc2VzLgorCisKKyAgICBUaGUgVVdCIHN0YWNrCisKK1RoZSBtYWluIG1pc3Npb24gb2YgdGhlIFVXQiBzdGFjayBpcyB0byBrZWVwIGEgdGFsbHkgb2Ygd2hpY2ggZGV2aWNlcworYXJlIGluIHJhZGlvIHByb3hpbWl0eSB0byBhbGxvdyBkcml2ZXJzIHRvIGNvbm5lY3QgdG8gdGhlbS4gQXMgd2VsbCwgaXQKK3Byb3ZpZGVzIGFuIEFQSSBmb3IgY29udHJvbGxpbmcgdGhlIGxvY2FsIHJhZGlvIGNvbnRyb2xsZXJzIChSQ3MgZnJvbQorbm93IG9uKSwgc3VjaCBhcyB0byBzdGFydC9zdG9wIGJlYWNvbmluZywgc2NhbiwgYWxsb2NhdGUgYmFuZHdpZHRoLCBldGMuCisKKworICAgICAgRGV2aWNlcyBhbmQgaG9zdHM6IHRoZSBiYXNpYyBzdHJ1Y3R1cmUKKworVGhlIG1haW4gYnVpbGRpbmcgYmxvY2sgaGVyZSBpcyB0aGUgVVdCIGRldmljZSAoc3RydWN0IHV3Yl9kZXYpLiBGb3IKK2VhY2ggZGV2aWNlIHRoYXQgcG9wcyB1cCBpbiByYWRpbyBwcmVzZW5jZSAoaWU6IHRoZSBVV0IgaG9zdCByZWNlaXZlcyBhCitiZWFjb24gZnJvbSBpdCkgeW91IGdldCBhIHN0cnVjdCB1d2JfZGV2IHRoYXQgd2lsbCBzaG93IHVwIGluCisvc3lzL2NsYXNzL3V3YiBhbmQgaW4gL3N5cy9idXMvdXdiL2RldmljZXMuCisKK0ZvciBlYWNoIFJDIHRoYXQgaXMgZGV0ZWN0ZWQsIGEgbmV3IHN0cnVjdCB1d2JfcmMgaXMgY3JlYXRlZC4gSW4gdHVybiwgYQorUkMgaXMgYWxzbyBhIGRldmljZSwgc28gdGhleSBhbHNvIHNob3cgaW4gL3N5cy9jbGFzcy91d2IgYW5kCisvc3lzL2J1cy91d2IvZGV2aWNlcywgYnV0IGF0IHRoZSBzYW1lIHRpbWUsIG9ubHkgcmFkaW8gY29udHJvbGxlcnMgc2hvdwordXAgaW4gL3N5cy9jbGFzcy91d2JfcmMuCisKKyAgICAqCisKKyAgICAgIFsqXSBUaGUgcmVhc29uIGZvciBSQ3MgYmVpbmcgYWxzbyBkZXZpY2VzIGlzIHRoYXQgbm90IG9ubHkgd2UgY2FuCisgICAgICBzZWUgdGhlbSB3aGlsZSBlbnVtZXJhdGluZyB0aGUgc3lzdGVtIGRldmljZSB0cmVlLCBidXQgYWxzbyBvbiB0aGUKKyAgICAgIHJhZGlvICh0aGVpciBiZWFjb25zIGFuZCBzdHVmZiksIHNvIHRoZSBoYW5kbGluZyBoYXMgdG8gYmUKKyAgICAgIGxpa2V3aXNlIHRvIHRoYXQgb2YgYSBkZXZpY2UuCisKK0VhY2ggUkMgZHJpdmVyIGlzIGltcGxlbWVudGVkIGJ5IGEgc2VwYXJhdGUgZHJpdmVyIHRoYXQgcGx1Z3MgaW50byB0aGUKK2ludGVyZmFjZSB0aGF0IHRoZSBVV0Igc3RhY2sgcHJvdmlkZXMgdGhyb3VnaCBhIHN0cnVjdCB1d2JfcmNfb3BzLiBUaGUKK3NwZWMgY3JlYXRvcnMgaGF2ZSBiZWVuIG5pY2UgZW5vdWdoIHRvIG1ha2UgdGhlIG1lc3NhZ2UgZm9ybWF0IHRoZSBzYW1lCitmb3IgSFdBIGFuZCBXSENJIFJDcywgc28gdGhlIGRyaXZlciBpcyByZWFsbHkgYSB2ZXJ5IHRoaW4gdHJhbnNwb3J0IHRoYXQKK21vdmVzIHRoZSByZXF1ZXN0cyBmcm9tIHRoZSBVV0IgQVBJIHRvIHRoZSBkZXZpY2UgWy91d2JfcmNfb3BzLT5jbWQoKS9dCithbmQgc2VuZHMgdGhlIHJlcGxpZXMgYW5kIG5vdGlmaWNhdGlvbnMgYmFjayB0byB0aGUgQVBJCitbL3V3Yl9yY19uZWhfZ3JvaygpL10uIE5vdGlmaWNhdGlvbnMgYXJlIGhhbmRsZWQgdG8gdGhlIFVXQiBkYWVtb24sIHRoYXQKK2lzIGNoYXJ0ZXJlZCwgYW1vbmcgb3RoZXIgdGhpbmdzLCB0byBrZWVwIHRoZSB0YWIgb2YgaG93IHRoZSBVV0IgcmFkaW8KK25laWdoYm9yaG9vZCBsb29rcywgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgZGV2aWNlcyBhcyB0aGV5IHNob3cgdXAgb3IKK2Rpc3NhcGVhci4KKworQ29tbWFuZCBleGVjdXRpb24gaXMgdmVyeSBzaW1wbGU6IGEgY29tbWFuZCBibG9jayBpcyBzZW50IGFuZCBhIGV2ZW50CitibG9jayBvciByZXBseSBpcyBleHBlY3RlZCBiYWNrLiBGb3Igc2VuZGluZy9yZWNlaXZpbmcgY29tbWFuZC9ldmVudHMsIGEKK2hhbmRsZSBjYWxsZWQgL25laC8gKE5vdGlmaWNhdGlvbi9FdmVudCBIYW5kbGUpIGlzIG9wZW5lZCB3aXRoCisvdXdiX3JjX25laF9vcGVuKCkvLgorCitUaGUgSFdBLVJDIChVU0IgZG9uZ2xlKSBkcml2ZXIgKGRyaXZlcnMvdXdiL2h3YS1yYy5jKSBkb2VzIHRoaXMgam9iIGZvcgordGhlIFVTQiBjb25uZWN0ZWQgSFdBLiBFdmVudHVhbGx5LCBkcml2ZXJzL3doY2ktcmMuYyB3aWxsIGRvIHRoZSBzYW1lCitmb3IgdGhlIFBDSSBjb25uZWN0ZWQgV0hDSSBjb250cm9sbGVyLgorCisKKyAgICAgIEhvc3QgQ29udHJvbGxlciBsaWZlIGN5Y2xlCisKK1NvIGxldCdzIHNheSB3ZSBjb25uZWN0IGEgZG9uZ2xlIHRvIHRoZSBzeXN0ZW06IGl0IGlzIGRldGVjdGVkIGFuZAorZmlybXdhcmUgdXBsb2FkZWQgaWYgbmVlZGVkIFtmb3IgSW50ZWwncyBpMTQ4MAorL2RyaXZlcnMvdXdiL3B0Yy91c2IuYzpwdGNfdXNiX3Byb2JlKCkvXSBhbmQgdGhlbiBpdCBpcyByZWVudW1lcmF0ZWQuCitOb3cgd2UgaGF2ZSBhIHJlYWwgSFdBIGRldmljZSBjb25uZWN0ZWQgYW5kCisvZHJpdmVycy91d2IvaHdhLXJjLmM6aHdhcmNfcHJvYmUoKS8gcGlja3MgaXQgdXAsIHRoYXQgd2lsbCBzZXQgdXAgdGhlCitXaXJlLUFkYXB0b3IgZW52aXJvbm1lbnQgYW5kIHRoZW4gc3VjayBpdCBpbnRvIHRoZSBVV0Igc3RhY2sncyB2aXNpb24gb2YKK3RoZSB3b3JsZCBbL2RyaXZlcnMvdXdiL2xjLXJjLmM6dXdiX3JjX2FkZCgpL10uCisKKyAgICAqCisKKyAgICAgIFsqXSBUaGUgc3RhY2sgc2hvdWxkIHB1dCBhIG5ldyBSQyB0byBzY2FuIGZvciBkZXZpY2VzCisgICAgICBbL3V3Yl9yY19zY2FuKCkvXSBzbyBpdCBmaW5kcyB3aGF0J3MgYXZhaWxhYmxlIGFyb3VuZCBhbmQgdHJpZXMgdG8KKyAgICAgIGNvbm5lY3QgdG8gdGhlbSwgYnV0IHRoaXMgaXMgcG9saWN5IHN0dWZmIGFuZCBzaG91bGQgYmUgZHJpdmVuCisgICAgICBmcm9tIHVzZXIgc3BhY2UuIEFzIG9mIG5vdywgdGhlIG9wZXJhdG9yIGlzIGV4cGVjdGVkIHRvIGRvIGl0CisgICAgICBtYW51YWxseTsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZSBwcm9jZWR1cmUuCisKK1doZW4gYSBkb25nbGUgaXMgZGlzY29ubmVjdGVkLCAvZHJpdmVycy91d2IvaHdhLXJjLmM6aHdhcmNfZGlzY29ubmVjdCgpLwordGFrZXMgdGltZSBvZiB0ZWFyaW5nIGV2ZXJ5dGhpbmcgZG93biBzYWZlbHkgKG9yIG5vdC4uLikuCisKKworICAgICAgT24gdGhlIGFpcjogYmVhY29ucyBhbmQgZW51bWVyYXRpbmcgdGhlIHJhZGlvIG5laWdoYm9yaG9vZAorCitTbyBhc3N1bWluZyB3ZSBoYXZlIGRldmljZXMgYW5kIHdlIGhhdmUgYWdyZWVkIGZvciBhIGNoYW5uZWwgdG8gY29ubmVjdAorb24gKGxldCdzIHNheSA5KSwgd2UgcHV0IHRoZSBuZXcgUkMgdG8gYmVhY29uOgorCisgICAgKgorCisgICAgICAgICAgICAkIGVjaG8gOSAwID4gL3N5cy9jbGFzcy91d2JfcmMvdXdiMC9iZWFjb24KKworTm93IGl0IGlzIHZpc2libGUuIElmIHRoZXJlIHdlcmUgb3RoZXIgZGV2aWNlcyBpbiB0aGUgc2FtZSByYWRpbyBjaGFubmVsCithbmQgYmVhY29uIGdyb3VwICh0aGF0J3Mgd2hhdCB0aGUgemVybyBpcyBmb3IpLCB0aGUgZG9uZ2xlJ3MgcmFkaW8KK2NvbnRyb2wgaW50ZXJmYWNlIHdpbGwgc2VuZCBiZWFjb24gbm90aWZpY2F0aW9ucyBvbiBpdHMKK25vdGlmaWNhdGlvbi9ldmVudCBlbmRwb2ludCAoTkVFUCkuIFRoZSBiZWFjb24gbm90aWZpY2F0aW9ucyBhcmUgcGFydCBvZgordGhlIGV2ZW50IHN0cmVhbSB0aGF0IGlzIGZ1bm5lbGVkIGludG8gdGhlIEFQSSB3aXRoCisvZHJpdmVycy91d2IvbmVoLmM6dXdiX3JjX25laF9ncm9rKCkvIGFuZCBkZWxpdmVyZWQgdG8gdGhlIFVXQkQsIHRoZSBVV0IKK2RhZW1vbiB0aHJvdWdoIGEgbm90aWZpY2F0aW9uIGxpc3QuCisKK1VXQkQgd2FrZXMgdXAgYW5kIHNjYW5zIHRoZSBldmVudCBsaXN0OyBmaW5kcyBhIGJlYWNvbiBhbmQgYWRkcyBpdCB0bwordGhlIEJFQUNPTiBDQUNIRSAoL3V3Yl9iZWNhLykuIElmIGhlIHJlY2VpdmVzIGEgbnVtYmVyIG9mIGJlYWNvbnMgZnJvbQordGhlIHNhbWUgZGV2aWNlLCBoZSBjb25zaWRlcnMgaXQgdG8gYmUgJ29uYWlyJyBhbmQgY3JlYXRlcyBhIG5ldyBkZXZpY2UKK1svZHJpdmVycy91d2IvbGMtZGV2LmM6dXdiZF9kZXZfb25haXIoKS9dLiBTaW1pbGFybHksIHdoZW4gbm8gYmVhY29ucworYXJlIHJlY2VpdmVkIGluIHNvbWUgdGltZSwgdGhlIGRldmljZSBpcyBjb25zaWRlcmVkIGdvbmUgYW5kIHdpcGVkIG91dAorW3V3YmQgY2FsbHMgcGVyaW9kaWNhbGx5IC91d2IvYmVhY29uLmM6dXdiX2JlY2FfcHVyZ2UoKS8gdGhhdCB3aWxsIHB1cmdlCit0aGUgYmVhY29uIGNhY2hlIG9mIGRlYWQgZGV2aWNlc10uCisKKworICAgICAgRGV2aWNlIGxpc3RzCisKK0FsbCBVV0IgZGV2aWNlcyBhcmUga2VwdCBpbiB0aGUgbGlzdCBvZiB0aGUgc3RydWN0IGJ1c190eXBlIHV3Yl9idXMuCisKKworICAgICAgQmFuZHdpZHRoIGFsbG9jYXRpb24KKworVGhlIFVXQiBzdGFjayBtYWludGFpbnMgYSBsb2NhbCBjb3B5IG9mIERSUCBhdmFpbGFiaWxpdHkgdGhyb3VnaAorcHJvY2Vzc2luZyBvZiBpbmNvbWluZyAqRFJQIEF2YWlsYWJpbGl0eSBDaGFuZ2UqIG5vdGlmaWNhdGlvbnMuIFRoaXMKK2xvY2FsIGNvcHkgaXMgY3VycmVudGx5IHVzZWQgdG8gcHJlc2VudCB0aGUgY3VycmVudCBiYW5kd2lkdGgKK2F2YWlsYWJpbGl0eSB0byB0aGUgdXNlciB0aHJvdWdoIHRoZSBzeXNmcyBmaWxlCisvc3lzL2NsYXNzL3V3Yl9yYy91d2J4L2J3X2F2YWlsLiBJbiB0aGUgZnV0dXJlIHRoZSBiYW5kd2lkdGgKK2F2YWlsYWJpbGl0eSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgYnkgdGhlIGJhbmR3aWR0aCByZXNlcnZhdGlvbgorcm91dGluZXMuCisKK1RoZSBiYW5kd2lkdGggcmVzZXJ2YXRpb24gcm91dGluZXMgYXJlIGluIHByb2dyZXNzIGFuZCBhcmUgdGh1cyBub3QKK3ByZXNlbnQgaW4gdGhlIGN1cnJlbnQgcmVsZWFzZS4gV2hlbiBjb21wbGV0ZWQgdGhleSB3aWxsIGVuYWJsZSBhIHVzZXIKK3RvIGluaXRpYXRlIERSUCByZXNlcnZhdGlvbiByZXF1ZXN0cyB0aHJvdWdoIGludGVyYWN0aW9uIHdpdGggc3lzZnMuIERSUAorcmVzZXJ2YXRpb24gcmVxdWVzdHMgZnJvbSByZW1vdGUgVVdCIGRldmljZXMgd2lsbCBhbHNvIGJlIGhhbmRsZWQuIFRoZQorYmFuZHdpZHRoIG1hbmFnZW1lbnQgZG9uZSBieSB0aGUgVVdCIHN0YWNrIHdpbGwgaW5jbHVkZSBjYWxsYmFja3MgdG8gdGhlCitoaWdoZXIgbGF5ZXJzIHdpbGwgZW5hYmxlIHRoZSBoaWdoZXIgbGF5ZXJzIHRvIHVzZSB0aGUgcmVzZXJ2YXRpb25zIHVwb24KK2NvbXBsZXRpb24uIFtOb3RlOiBUaGUgYmFuZHdpZHRoIHJlc2VydmF0aW9uIHdvcmsgaXMgaW4gcHJvZ3Jlc3MgYW5kCitzdWJqZWN0IHRvIGNoYW5nZS5dCisKKworICAgIFdpcmVsZXNzIFVTQiBIb3N0IENvbnRyb2xsZXIgZHJpdmVycworCisqV0FSTklORyogVGhpcyBzZWN0aW9uIG5lZWRzIGEgbG90IG9mIHdvcmshCisKK0FzIGV4cGxhaW5lZCBhYm92ZSwgdGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBIQ3MgaW4gdGhlIFdVU0IKK3dvcmxkOiBIV0EtSEMsIERXQS1IQyBhbmQgV0hDSS1IQy4KKworSFdBLUhDIGFuZCBEV0EtSEMgc2hhcmUgdGhhdCB0aGV5IGFyZSBXaXJlLUFkYXB0ZXJzIChVU0Igb3IgV1VTQgorY29ubmVjdGVkIGNvbnRyb2xsZXJzKSwgYW5kIHRoZWlyIHRyYW5zZmVyIG1hbmFnZW1lbnQgc3lzdGVtIGlzIGFsbW9zdAoraWRlbnRpY2FsLiBTbyBpcyB0aGVpciBub3RpZmljYXRpb24gZGVsaXZlcnkgc3lzdGVtLgorCitIV0EtSEMgYW5kIFdIQ0ktSEMgc2hhcmUgdGhhdCB0aGV5IGFyZSBib3RoIFdVU0IgaG9zdCBjb250cm9sbGVycywgc28KK3RoZXkgaGF2ZSB0byBkZWFsIHdpdGggV1VTQiBkZXZpY2UgbGlmZSBjeWNsZSBhbmQgbWFpbnRlbmFuY2UsIHdpcmVsZXNzCityb290LWh1YgorCitIV0EgZXhwb3NlcyBhIEhvc3QgQ29udHJvbGxlciBpbnRlcmZhY2UgKEhXQS1IQyAweGUwLzAyLzAyKS4gVGhpcyBoYXMKK3RocmVlIGVuZHBvaW50cyAoTm90aWZpY2F0aW9ucywgRGF0YSBUcmFuc2ZlciBJbiBhbmQgRGF0YSBUcmFuc2ZlcgorT3V0LS1rbm93biBhcyBORVAsIERUSSBhbmQgRFRPIGluIHRoZSBjb2RlKS4KKworV2UgcmVzZXJ2ZSBVV0IgYmFuZHdpZHRoIGZvciBvdXIgV2lyZWxlc3MgVVNCIENsdXN0ZXIsIGNyZWF0ZSBhIENsdXN0ZXIKK0lEIGFuZCB0ZWxsIHRoZSBIQyB0byB1c2UgYWxsIHRoYXQuIFRoZW4gd2Ugc3RhcnQgaXQuIFRoaXMgbWVhbnMgdGhlIEhDCitzdGFydHMgc2VuZGluZyBNTUNzLgorCisgICAgKgorCisgICAgICBUaGUgTU1DcyBhcmUgYmxvY2tzIG9mIGRhdGEgZGVmaW5lZCBzb21ld2hlcmUgaW4gdGhlIFdVU0IxLjAgc3BlYworICAgICAgdGhhdCBkZWZpbmUgYSBzdHJlYW0gaW4gdGhlIFVXQiBjaGFubmVsIHRpbWUgYWxsb2NhdGVkIGZvciBzZW5kaW5nCisgICAgICBXVVNCIElFcyAoaG9zdCB0byBkZXZpY2UgY29tbWFuZHMvbm90aWZpY2F0aW9ucykgYW5kIERldmljZQorICAgICAgTm90aWZpY2F0aW9ucyAoZGV2aWNlIGluaXRpYXRlZCB0byBob3N0KS4gRWFjaCBob3N0IGRlZmluZXMgYQorICAgICAgdW5pcXVlIFdpcmVsZXNzIFVTQiBjbHVzdGVyIHRocm91Z2ggTU1Dcy4gRGV2aWNlcyBjYW4gY29ubmVjdCB0byBhCisgICAgICBzaW5nbGUgY2x1c3RlciBhdCB0aGUgdGltZS4gVGhlIElFcyBhcmUgSW5mb3JtYXRpb24gRWxlbWVudHMsIGFuZAorICAgICAgYW1vbmcgdGhlbSBhcmUgdGhlIGJhbmR3aWR0aCBhbGxvY2F0aW9ucyB0aGF0IHRlbGwgZWFjaCBkZXZpY2UKKyAgICAgIHdoZW4gY2FuIHRoZXkgdHJhbnNtaXQgb3IgcmVjZWl2ZS4KKworTm93IGl0IGFsbCBkZXBlbmRzIG9uIGV4dGVybmFsIHN0aW11bGkuCisKKypOZXcgZGV2aWNlIGNvbm5lY3Rpb24qCisKK0EgbmV3IGRldmljZSBwb3BzIHVwLCBpdCBzY2FucyB0aGUgcmFkaW8gbG9va2luZyBmb3IgTU1DcyB0aGF0IGdpdmUgb3V0Cit0aGUgZXhpc3RlbmNlIG9mIFdpcmVsZXNzIFVTQiBjaGFubmVscy4gT25jZSBvbmUgKG9yIG1vcmUpIGFyZSBmb3VuZCwKK3NlbGVjdHMgd2hpY2ggb25lIHRvIGNvbm5lY3QgdG8uIFNlbmRzIGEgL0ROX0Nvbm5lY3QvIChkZXZpY2UKK25vdGlmaWNhdGlvbiBjb25uZWN0KSBkdXJpbmcgdGhlIEROVFMgKERldmljZSBOb3RpZmljYXRpb24gVGltZQorU2xvdC0tYW5ub3VuY2VkIGluIHRoZSBNTUNzCisKK0hDIHBpY2tzIHRoZSAvRE5fQ29ubmVjdC8gb3V0IChuZXAgbW9kdWxlIHNlbmRzIHRvIG5vdGlmLmMgZm9yIGRlbGl2ZXJ5CitpbnRvIC9kZXZjb25uZWN0LykuIFRoaXMgcHJvY2VzcyBzdGFydHMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgZm9yCit0aGUgZGV2aWNlLiBGaXJzdCB3ZSBhbGxvY2F0ZSBhIC9mYWtlIHBvcnQvIGFuZCBhc3NpZ24gYW4KK3VuYXV0aGVudGljYXRlZCBhZGRyZXNzICgxMjggdG8gMjU1LS13aGF0IHdlIHJlYWxseSBkbyBpcworMHg4MCB8IGZha2VfcG9ydF9pZHgpLiBXZSBmaWRkbGUgd2l0aCB0aGUgZmFrZSBwb3J0IHN0YXR1cyBhbmQgL2todWJkLworc2VlcyBhIG5ldyBjb25uZWN0aW9uLCBzbyBoZSBtb3ZlcyBvbiB0byBlbmFibGUgdGhlIGZha2UgcG9ydCB3aXRoIGEgcmVzZXQuCisKK1NvIG5vdyB3ZSBhcmUgaW4gdGhlIHJlc2V0IHBhdGggLS0gd2Uga25vdyB3ZSBoYXZlIGEgbm9uLXlldCBlbnVtZXJhdGVkCitkZXZpY2Ugd2l0aCBhbiB1bmF1dGhvcml6ZWQgYWRkcmVzczsgd2UgYXNrIHVzZXIgc3BhY2UgdG8gYXV0aGVudGljYXRlCisoRklYTUU6IG5vdCB5ZXQgZG9uZSwgc2ltaWxhciB0byBibHVldG9vdGggcGFpcmluZyksIHRoZW4gd2UgZG8gdGhlIGtleQorZXhjaGFuZ2UgKEZJWE1FOiBub3QgeWV0IGRvbmUpIGFuZCBpc3N1ZSBhIC9zZXQgYWRkcmVzcyAwLyB0byBicmluZyB0aGUKK2RldmljZSB0byB0aGUgZGVmYXVsdCBzdGF0ZS4gRGV2aWNlIGlzIGF1dGhlbnRpY2F0ZWQuCisKK0Zyb20gaGVyZSwgdGhlIFVTQiBzdGFjayB0YWtlcyBjb250cm9sIHRocm91Z2ggdGhlIHVzYl9oY2Qgb3BzLiBraHViZAoraGFzIHNlZW4gdGhlIHBvcnQgc3RhdHVzIGNoYW5nZXMsIGFzIHdlIGhhdmUgYmVlbiB0b2dnbGluZyB0aGVtLiBJdCB3aWxsCitzdGFydCBlbnVtZXJhdGluZyBhbmQgZG9pbmcgdHJhbnNmZXJzIHRocm91Z2ggdXNiX2hjZC0+dXJiX2VucXVldWUoKSB0bworcmVhZCBkZXNjcmlwdG9ycyBhbmQgbW92ZSBvdXIgZGF0YS4KKworKkRldmljZSBsaWZlIGN5Y2xlIGFuZCBrZWVwIGFsaXZlcyoKKworRXZlcnl0aW1lIHRoZXJlIGlzIGEgc3VjY2VzZnVsIHRyYW5zZmVyIHRvL2Zyb20gYSBkZXZpY2UsIHdlIHVwZGF0ZSBhCitwZXItZGV2aWNlIGFjdGl2aXR5IHRpbWVzdGFtcC4gSWYgbm90LCBldmVyeSBub3cgYW5kIHRoZW4gd2UgY2hlY2sgYW5kCitpZiB0aGUgYWN0aXZpdHkgdGltZXN0YW1wIGdldHMgb2xkLCB3ZSBwaW5nIHRoZSBkZXZpY2UgYnkgc2VuZGluZyBpdCBhCitLZWVwIEFsaXZlIElFOyBpdCByZXNwb25kcyB3aXRoIGEgL0ROX0FsaXZlLyBwb25nIGR1cmluZyB0aGUgRE5UUyAodGhpcworYXJyaXZlcyB0byB1cyBhcyBhIG5vdGlmaWNhdGlvbiB0aHJvdWdoCitkZXZjb25uZWN0LmM6d3VzYl9oYW5kbGVfZG5fYWxpdmUoKS4gSWYgYSBkZXZpY2UgdGltZXMgb3V0LCB3ZQorZGlzY29ubmVjdCBpdCBmcm9tIHRoZSBzeXN0ZW0gKGNsZWFuaW5nIHVwIGludGVybmFsIGluZm9ybWF0aW9uIGFuZAordG9nZ2xpbmcgdGhlIGJpdHMgaW4gdGhlIGZha2UgaHViIHBvcnQsIHdoaWNoIGtpY2tzIGtodWJkIGludG8gcmVtb3ZpbmcKK3RoZSByZXN0IG9mIHRoZSBzdHVmZikuCisKK1RoaXMgaXMgZG9uZSB0aHJvdWdoIGRldmNvbm5lY3Q6X193dXNiX2NoZWNrX2RldnMoKSwgd2hpY2ggd2lsbCBzY2FuIHRoZQorZGV2aWNlIGxpc3QgbG9va2luZyBmb3Igd2hvbSBuZWVkcyByZWZyZXNoaW5nLgorCitJZiB0aGUgZGV2aWNlIHdhbnRzIHRvIGRpc2Nvbm5lY3QsIGl0IHdpbGwgZWl0aGVyIGRpZSAodWdseSkgb3Igc2VuZCBhCisvRE5fRGlzY29ubmVjdC8gdGhhdCB3aWxsIHByb21wdCBhIGRpc2Nvbm5lY3Rpb24gZnJvbSB0aGUgc3lzdGVtLgorCisqU2VuZGluZyBhbmQgcmVjZWl2aW5nIGRhdGEqCisKK0RhdGEgaXMgc2VudCBhbmQgcmVjZWl2ZWQgdGhyb3VnaCAvUmVtb3RlIFBpcGVzLyAocnBpcGVzKS4gQW4gcnBpcGUgaXMKKy9haW1lZC8gYXQgYW4gZW5kcG9pbnQgaW4gYSBXVVNCIGRldmljZS4gVGhpcyBpcyB0aGUgc2FtZSBmb3IgSFdBcyBhbmQKK0RXQXMuCisKK0VhY2ggSEMgaGFzIGEgbnVtYmVyIG9mIHJwaXBlcyBhbmQgYnVmZmVycyB0aGF0IGNhbiBiZSBhc3NpZ25lZCB0byB0aGVtOword2hlbiBkb2luZyBhIGRhdGEgdHJhbnNmZXIgKHhmZXIpLCBmaXJzdCB0aGUgcnBpcGUgaGFzIHRvIGJlIGFpbWVkIGFuZAorcHJlcGFyZWQgKGJ1ZmZlcnMgYXNzaWduZWQpLCB0aGVuIHdlIGNhbiBzdGFydCBxdWV1ZWluZyByZXF1ZXN0cyBmb3IKK2RhdGEgaW4gb3Igb3V0LgorCitEYXRhIGJ1ZmZlcnMgaGF2ZSB0byBiZSBzZWdtZW50ZWQgb3V0IGJlZm9yZSBzZW5kaW5nLS1zbyB3ZSBzZW5kIGZpcnN0IGEKK2hlYWRlciAoc2VnbWVudCByZXF1ZXN0KSBhbmQgdGhlbiBpZiB0aGVyZSBpcyBhbnkgZGF0YSwgYSBkYXRhIGJ1ZmZlcgoraW1tZWRpYXRlbHkgYWZ0ZXIgdG8gdGhlIERUSSBpbnRlcmZhY2UgKHllcCwgZXZlbiB0aGUgcmVxdWVzdCkuIElmIG91cgorYnVmZmVyIGlzIGJpZ2dlciB0aGFuIHRoZSBtYXggc2VnbWVudCBzaXplLCB0aGVuIHdlIGp1c3QgZG8gbXVsdGlwbGUKK3JlcXVlc3RzLgorCitbVGhpcyBzdWNrcywgYmVjYXVzZSBkb2luZyBVU0Igc2NhdHRlciBnYXR0ZXIgaW4gTGludXggaXMgcmVzb3VyY2UKK2ludGVuc2l2ZSwgaWYgYW55Li4ubm90IHRoYXQgdGhlIGN1cnJlbnQgYXBwcm9hY2ggaXMgbm90LiBJdCBqdXN0IGhhcyB0bworYmUgY2xlYW5lZCB1cCBhIGxvdCA6KV0uCisKK0lmIHJlYWRpbmcsIHdlIGRvbid0IHNlbmQgZGF0YSBidWZmZXJzLCBqdXN0IHRoZSBzZWdtZW50IGhlYWRlcnMgc2F5aW5nCit3ZSB3YW50IHRvIHJlYWQgc2VnbWVudHMuCisKK1doZW4gdGhlIHhmZXIgaXMgZXhlY3V0ZWQsIHdlIHJlY2VpdmUgYSBub3RpZmljYXRpb24gdGhhdCBzYXlzIGRhdGEgaXMKK3JlYWR5IGluIHRoZSBEVEkgZW5kcG9pbnQgKGhhbmRsZWQgdGhyb3VnaAoreGZlci5jOndhX2hhbmRsZV9ub3RpZl94ZmVyKCkpLiBJbiB0aGVyZSB3ZSByZWFkIGZyb20gdGhlIERUSSBlbmRwb2ludCBhCitkZXNjcmlwdG9yIHRoYXQgZ2l2ZXMgdXMgdGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNmZXIsIGl0cyBpZGVudGlmaWNhdGlvbgorKGdpdmVuIHdoZW4gd2UgaXNzdWVkIGl0KSBhbmQgdGhlIHNlZ21lbnQgbnVtYmVyLiBJZiBpdCB3YXMgYSBkYXRhIHJlYWQsCit3ZSBpc3N1ZSBhbm90aGVyIFVSQiB0byByZWFkIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciB0aGUgY2h1bmsgb2YKK2RhdGEgY29taW5nIG91dCBvZiB0aGUgcmVtb3RlIGVuZHBvaW50LiBEb25lLCB3YWl0IGZvciB0aGUgbmV4dCBndXkuIFRoZQorY2FsbGJhY2tzIGZvciB0aGUgVVJCcyBpc3N1ZWQgZnJvbSBoZXJlIGFyZSB0aGUgb25lcyB0aGF0IHdpbGwgZGVjbGFyZQordGhlIHhmZXIgY29tcGxldGUgYXQgc29tZSBwb2ludCBhbmQgY2FsbCBpdCdzIGNhbGxiYWNrLgorCitTZWVtcyBzaW1wbGUsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHRyaXZpYWwuCisKKyAgICAqCisKKyAgICAgICpXQVJOSU5HKiBPbGQhIQorCitUaGUgbWFpbiB4ZmVyIGRlc2NyaXB0b3IsIHdhX3hmZXIgKGVxdWl2YWxlbnQgdG8gYSBVUkIpIGNvbnRhaW5zIGFuCithcnJheSBvZiBzZWdtZW50cywgdGFsbHlzIG9uIHNlZ21lbnRzIGFuZCBidWZmZXJzIGFuZCBjYWxsYmFjaworaW5mb3JtYXRpb24uIEJ1cmllZCBpbiB0aGVyZSBpcyBhIGxvdCBvZiBVUkJzIGZvciBleGVjdXRpbmcgdGhlIHNlZ21lbnRzCithbmQgYnVmZmVyIHRyYW5zZmVycy4KKworRm9yIE9VVCB4ZmVycywgdGhlcmUgaXMgYW4gYXJyYXkgb2Ygc2VnbWVudHMsIG9uZSBVUkIgZm9yIGVhY2gsIGFub3RoZXIKK29uZSBvZiBidWZmZXIgVVJCLiBXaGVuIHN1Ym1pdHRpbmcsIHdlIHN1Ym1pdCBVUkJzIGZvciBzZWdtZW50IHJlcXVlc3QKKzEsIGJ1ZmZlciAxLCBzZWdtZW50IDIsIGJ1ZmZlciAyLi4uZXRjLiBUaGVuIHdlIHdhaXQgb24gdGhlIERUSSBmb3IgeGZlcgorcmVzdWx0IGRhdGE7IHdoZW4gYWxsIHRoZSBzZWdtZW50cyBhcmUgY29tcGxldGUsIHdlIGNhbGwgdGhlIGNhbGxiYWNrIHRvCitmaW5hbGl6ZSB0aGUgdHJhbnNmZXIuCisKK0ZvciBJTiB4ZmVycywgd2Ugb25seSBpc3N1ZSBVUkJzIGZvciB0aGUgc2VnbWVudHMgd2Ugd2FudCB0byByZWFkIGFuZAordGhlbiB3YWl0IGZvciB0aGUgeGZlciByZXN1bHQgZGF0YS4KKworKlVSQiBtYXBwaW5nIGludG8geGZlcnMqCisKK1RoaXMgaXMgZG9uZSBieSBod2FoY19vcF91cmJfW2VufGRlXXF1ZXVlKCkuIEluIGVucXVldWUoKSB3ZSBhaW0gYW4KK3JwaXBlIHRvIHRoZSBlbmRwb2ludCB3aGVyZSB3ZSBoYXZlIHRvIHRyYW5zbWl0LCBjcmVhdGUgYSB0cmFuc2ZlcgorY29udGV4dCAod2FfeGZlcikgYW5kIHN1Ym1pdCBpdC4gV2hlbiB0aGUgeGZlciBpcyBkb25lLCBvdXIgY2FsbGJhY2sgaXMKK2NhbGxlZCBhbmQgd2UgYXNzaWduIHRoZSBzdGF0dXMgYml0cyBhbmQgcmVsZWFzZSB0aGUgeGZlciByZXNvdXJjZXMuCisKK0luIGRlcXVldWUoKSB3ZSBhcmUgYmFzaWNhbGx5IGNhbmNlbGxpbmcvYWJvcnRpbmcgdGhlIHRyYW5zZmVyLiBXZSBpc3N1ZQorYSB4ZmVyIGFib3J0IHJlcXVlc3QgdG8gdGhlIEhDLCBjYW5jZWxsIGFsbCB0aGUgVVJCcyB3ZSBoYWQgc3VibWl0dGVkCithbmQgbm90IHlldCBkb25lIGFuZCB3aGVuIGFsbCB0aGF0IGlzIGRvbmUsIHRoZSB4ZmVyIGNhbGxiYWNrIHdpbGwgYmUKK2NhbGxlZC0tdGhpcyB3aWxsIGNhbGwgdGhlIFVSQiBjYWxsYmFjay4KKworCisgICAgR2xvc3NhcnkKKworKkRXQSogLS0gRGV2aWNlIFdpcmUgQWRhcHRlcgorCitVU0IgaG9zdCwgd2lyZWQgZm9yIGRvd25zdHJlYW0gZGV2aWNlcywgdXBzdHJlYW0gY29ubmVjdHMgd2lyZWxlc3NseQord2l0aCBXaXJlbGVzcyBVU0IuCisKKypFVkVOVCogLS0gUmVzcG9uc2UgdG8gYSBjb21tYW5kIG9uIHRoZSBORUVQCisKKypIV0EqIC0tIEhvc3QgV2lyZSBBZGFwdGVyIC8gVVNCIGRvbmdsZSBmb3IgVVdCIGFuZCBXaXJlbGVzcyBVU0IKKworKk5FSCogLS0gTm90aWZpY2F0aW9uL0V2ZW50IEhhbmRsZQorCitIYW5kbGUvZmlsZSBkZXNjcmlwdG9yIGZvciByZWNlaXZpbmcgbm90aWZpY2F0aW9ucyBvciBldmVudHMuIFRoZSBXQQorY29kZSByZXF1aXJlcyB5b3UgdG8gZ2V0IG9uZSBvZiB0aGlzIHRvIGxpc3RlbiBmb3Igbm90aWZpY2F0aW9ucyBvcgorZXZlbnRzIG9uIHRoZSBORUVQLgorCisqTkVFUCogLS0gTm90aWZpY2F0aW9uL0V2ZW50IEVuZFBvaW50CisKK1N0dWZmIHJlbGF0ZWQgdG8gdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGZpcnN0IGVuZHBvaW50IG9mIGEgSFdBIFVTQgorZG9uZ2xlIHRoYXQgaXMgdXNlZCB0byBkZWxpdmVyIGFuIHN0cmVhbSBvZiBldmVudHMgYW5kIG5vdGlmaWNhdGlvbnMgdG8KK3RoZSBob3N0LgorCisqTk9USUZJQ0FUSU9OKiAtLSBNZXNzYWdlIGNvbWluZyBpbiB0aGUgTkVFUCBhcyByZXNwb25zZSB0byBzb21ldGhpbmcuCisKKypSQyogLS0gUmFkaW8gQ29udHJvbAorCitEZXNpZ24tb3ZlcnZpZXcudHh0LTEuOCAobGFzdCBlZGl0ZWQgMjAwNi0xMS0wNCAxMjoyMjoyNCBieQorSW5ha3lQZXJlekdvbnphbGV6KQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2FuY2hvcnMudHh0CmluZGV4IDVlNmI2NGMuLjZmMjRmNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL2FuY2hvcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2FuY2hvcnMudHh0CkBAIC01Miw2ICs1MiwxMSBAQAogdGhlIGNhbGwgcmV0dXJucy4gVGhleSBtYXkgYmUgdW5saW5rZWQgbGF0ZXIgYnV0IHdpbGwgYmUgdW5saW5rZWQgaW4KIGZpbml0ZSB0aW1lLgogCit1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgVVJCcyBvZiBhbiBhbmNob3IgYXJlIHVuYW5jaG9yZWQgZW4gbWFzc2UuCisKIHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTksNCArNjQsMTYgQEAKIG9yIGEgdGltZW91dCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiBJdHMgcmV0dXJuIHZhbHVlIHdpbGwgdGVsbCB5b3UKIHdoZXRoZXIgdGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQuCiAKK3VzYl9hbmNob3JfZW1wdHkoKQorLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1JldHVybnMgdHJ1ZSBpZiBubyBVUkJzIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gYW5jaG9yLiBMb2NraW5nCitpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuCisKK3VzYl9nZXRfZnJvbV9hbmNob3IoKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JldHVybnMgdGhlIG9sZGVzdCBhbmNob3JlZCBVUkIgb2YgYW4gYW5jaG9yLiBUaGUgVVJCIGlzIHVuYW5jaG9yZWQKK2FuZCByZXR1cm5lZCB3aXRoIGEgcmVmZXJlbmNlLiBBcyB5b3UgbWF5IG1peCBVUkJzIHRvIHNldmVyYWwKK2Rlc3RpbmF0aW9ucyBpbiBvbmUgYW5jaG9yIHlvdSBoYXZlIG5vIGd1YXJhbnRlZSB0aGUgY2hyb25vbG9naWNhbGx5CitmaXJzdCBzdWJtaXR0ZWQgVVJCIGlzIHJldHVybmVkLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL21pc2NfdXNic2V2c2VnLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL21pc2NfdXNic2V2c2VnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjZiZTRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvbWlzY191c2JzZXZzZWcudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1VTQiA3LVNlZ21lbnQgTnVtZXJpYyBEaXNwbGF5CitNYW51ZmFjdHVyZWQgYnkgRGVsY29tIEVuZ2luZWVyaW5nCisKK0RldmljZSBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitVU0IgVkVORE9SX0lECTB4MGZjNQorVVNCIFBST0RVQ1RfSUQJMHgxMjI3CitCb3RoIHRoZSA2IGNoYXJhY3RlciBhbmQgOCBjaGFyYWN0ZXIgZGlzcGxheXMgaGF2ZSBQUk9EVUNUX0lELAorYW5kIGFjY29yZGluZyB0byBEZWxjb20gRW5naW5lZXJpbmcgbm8gcXVlcnlhYmxlIGluZm9ybWF0aW9uCitjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgZGV2aWNlIHRvIHRlbGwgdGhlbSBhcGFydC4KKworRGV2aWNlIE1vZGVzCistLS0tLS0tLS0tLS0KK0J5IGRlZmF1bHQsIHRoZSBkcml2ZXIgYXNzdW1lcyB0aGUgZGlzcGxheSBpcyBvbmx5IDYgY2hhcmFjdGVycworVGhlIG1vZGUgZm9yIDYgY2hhcmFjdGVycyBpczoKKwlNU0IgMHgwNjsgTFNCIDB4M2YKK0ZvciB0aGUgOCBjaGFyYWN0ZXIgZGlzcGxheToKKwlNU0IgMHgwODsgTFNCIDB4ZmYKK1RoZSBkZXZpY2UgY2FuIGFjY2VwdCAidGV4dCIgZWl0aGVyIGluIHJhdywgaGV4LCBvciBhc2NpaSB0ZXh0bW9kZS4KK3JhdyBjb250cm9scyBlYWNoIHNlZ21lbnQgbWFudWFsbHksCitoZXggZXhwZWN0cyBhIHZhbHVlIGJldHdlZW4gMC0xNSBwZXIgY2hhcmFjdGVyLAorYXNjaWkgZXhwZWN0cyBhIHZhbHVlIGJldHdlZW4gJzAnLSc5JyBhbmQgJ0EnLSdGJy4KK1RoZSBkZWZhdWx0IGlzIGFzY2lpLgorCitEZXZpY2UgT3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tCisxLglUdXJuIG9uIHRoZSBkZXZpY2U6CisJZWNobyAxID4gL3N5cy9idXMvdXNiLy4uLi9wb3dlcmVkCisyLglTZXQgdGhlIGRldmljZSdzIG1vZGU6CisJZWNobyAkbW9kZV9tc2IgPiAvc3lzL2J1cy91c2IvLi4uL21vZGVfbXNiCisJZWNobyAkbW9kZV9sc2IgPiAvc3lzL2J1cy91c2IvLi4uL21vZGVfbHNiCiszLglTZXQgdGhlIHRleHRtb2RlOgorCWVjaG8gJHRleHRtb2RlID4gL3N5cy9idXMvdXNiLy4uLi90ZXh0bW9kZQorNC4Jc2V0IHRoZSB0ZXh0IChmb3IgZXhhbXBsZSk6CisJZWNobyAiMTIzQUJDIiA+IC9zeXMvYnVzL3VzYi8uLi4vdGV4dCAoYXNjaWkpCisJZWNobyAiQTFCMiIgPiAvc3lzL2J1cy91c2IvLi4uL3RleHQgKGFzY2lpKQorCWVjaG8gLW5lICJceDAxXHgwMlx4MDMiID4gL3N5cy9idXMvdXNiLy4uLi90ZXh0IChoZXgpCis1LglTZXQgdGhlIGRlY2ltYWwgcGxhY2VzLgorCVRoZSBkZXZpY2UgaGFzIGVpdGhlciA2IG9yIDggZGVjaW1hbCBwb2ludHMuCisJdG8gc2V0IHRoZSBudGggZGVjaW1hbCBwbGFjZSBjYWxjdWxhdGUgMTAgKiogbgorCWFuZCBlY2hvIGl0IGluIHRvIC9zeXMvYnVzL3VzYi8uLi4vZGVjaW1hbHMKKwlUbyBzZXQgbXVsdGlwbGUgZGVjaW1hbHMgcG9pbnRzIHN1bSB1cCBlYWNoIHBvd2VyLgorCUZvciBleGFtcGxlLCB0byBzZXQgdGhlIDB0aCBhbmQgM3JkIGRlY2ltYWwgcGxhY2UKKwllY2hvIDEwMDEgPiAvc3lzL2J1cy91c2IvLi4uL2RlY2ltYWxzCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAppbmRleCA5ZDMxMTQwLi5lNDhlYTFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dApAQCAtMzUwLDEyICszNTAsMTIgQEAKIAogVGhlcmUgYWxzbyBhcmUgYSBjb3VwbGUgb2YgdXRpbGl0eSByb3V0aW5lcyBkcml2ZXJzIGNhbiB1c2U6CiAKLQl1c2JfYXV0b3BtX2VuYWJsZSgpIHNldHMgcG1fdXNhZ2VfY250IHRvIDEgYW5kIHRoZW4gY2FsbHMKLQl1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UoKSwgd2hpY2ggd2lsbCBhdHRlbXB0IGFuIGF1dG9yZXN1bWUuCi0KLQl1c2JfYXV0b3BtX2Rpc2FibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAwIGFuZCB0aGVuIGNhbGxzCisJdXNiX2F1dG9wbV9lbmFibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAwIGFuZCB0aGVuIGNhbGxzCiAJdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKCksIHdoaWNoIHdpbGwgYXR0ZW1wdCBhbiBhdXRvc3VzcGVuZC4KIAorCXVzYl9hdXRvcG1fZGlzYWJsZSgpIHNldHMgcG1fdXNhZ2VfY250IHRvIDEgYW5kIHRoZW4gY2FsbHMKKwl1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UoKSwgd2hpY2ggd2lsbCBhdHRlbXB0IGFuIGF1dG9yZXN1bWUuCisKIFRoZSBjb252ZW50aW9uYWwgdXNhZ2UgcGF0dGVybiBpcyB0aGF0IGEgZHJpdmVyIGNhbGxzCiB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoKSBpbiBpdHMgb3BlbiByb3V0aW5lIGFuZAogdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgaW4gaXRzIGNsb3NlIG9yIHJlbGVhc2Ugcm91dGluZS4gIEJ1dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Ivd3VzYi1jYmFmIGIvRG9jdW1lbnRhdGlvbi91c2Ivd3VzYi1jYmFmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzhiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi93dXNiLWNiYWYKQEAgLTAsMCArMSwxMzkgQEAKKyMhIC9iaW4vYmFzaAorIworCitzZXQgLWUKKworcHJvZ25hbWU9JChiYXNlbmFtZSAkMCkKK2Z1bmN0aW9uIGhlbHAKK3sKKyAgICBjYXQgPDxFT0YKK1VzYWdlOiAkcHJvZ25hbWUgQ09NTUFORCBERVZJQ0VzIFtBUkdTXQorCitDb21tYW5kIGZvciBtYW5pcHVsYXRpbmcgdGhlIHBhaXJpbmcvYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgb2YgYQorV2lyZWxlc3MgVVNCIGRldmljZSB0aGF0IHN1cHBvcnRzIHdpcmVkLW1vZGUgQ2FibGUtQmFzZWQtQXNzb2NpYXRpb24uCisKK1dvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHd1c2ItY2JhLmtvIGRyaXZlciBmcm9tIGh0dHA6Ly9saW51eHV3Yi5vcmcuCisKKworREVWSUNFCisKKyBzeXNmcyBwYXRoIHRvIHRoZSBkZXZpY2UgdG8gYXV0aGVudGljYXRlOyBmb3IgZXhhbXBsZSwgYm90aCB0aGlzCisgZ3V5cyBhcmUgdGhlIHNhbWU6CisKKyAvc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjFkLjcvdXNiMS8xLTQvMS00LjQvMS00LjQ6MS4xCisgL3N5cy9idXMvdXNiL2RyaXZlcnMvd3VzYi1jYmFmLzEtNC40OjEuMQorCitDT01NQU5EL0FSR1MgYXJlCisKKyBzdGFydAorCisgICBTdGFydCBhIFdVU0IgaG9zdCBjb250cm9sbGVyIChieSBzZXR0aW5nIHVwIGEgQ0hJRCkKKworIHNldC1jaGlkIERFVklDRSBIT1NULUNISUQgSE9TVC1CQU5ER1JPVVAgSE9TVC1OQU1FCisKKyAgIFNldHMgaG9zdCBpbmZvcm1hdGlvbiBpbiB0aGUgZGV2aWNlOyBhZnRlciB0aGlzIHlvdSBjYW4gY2FsbCB0aGUKKyAgIGdldC1jZGlkIHRvIHNlZSBob3cgZG9lcyB0aGlzIGRldmljZSByZXBvcnQgaXRzZWxmIHRvIHVzLgorCisgZ2V0LWNkaWQgREVWSUNFCisKKyAgIEdldCB0aGUgZGV2aWNlIElEIGFzc29jaWF0ZWQgdG8gdGhlIEhPU1QtQ0hESSB3ZSBzZW50IHdpdGgKKyAgICdzZXQtY2hpZCcuIFdlIG1pZ2h0IG5vdCBrbm93IGFib3V0IGl0LgorCisgc2V0LWNjIERFVklDRQorCisgICBJZiB3ZSBhbGxvdyB0aGUgZGV2aWNlIHRvIGNvbm5lY3QsIHNldCBhIHJhbmRvbSBuZXcgQ0RJRCBhbmQgQ0sKKyAgIChjb25uZWN0aW9uIGtleSkuIERldmljZSBzYXZlcyB0aGVtIGZvciB0aGUgbmV4dCB0aW1lIGl0IHdhbnRzIHRvCisgICBjb25uZWN0IHdpcmVsZXNzLiBXZSBzYXZlIHRoZW0gZm9yIHRoYXQgbmV4dCB0aW1lIGFsc28gc28gd2UgY2FuCisgICBhdXRoZW50aWNhdGUgdGhlIGRldmljZSAod2hlbiB3ZSBzZWUgdGhlIENESUQgaGUgdXNlcyB0byBpZAorICAgaXRzZWxmKSBhbmQgdGhlIENLIHRvIGNyeXB0byB0YWxrIHRvIGl0LgorCitDSElEIGlzIGFsd2F5cyAxNiBoZXggYnl0ZXMgaW4gJ1hYIFlZIFpaLi4uJyBmb3JtCitCQU5ER1JPVVAgaXMgYWxtb3N0IGFsd2F5cyAwMDAxCisKK0V4YW1wbGVzOgorCisgIFlvdSBjYW4gZGVmYXVsdCBtb3N0IGFyZ3VtZW50cyB0byAnJyB0byBnZXQgYSBzYW5lIHZhbHVlOgorCisgICQgJHByb2duYW1lIHNldC1jaGlkICcnICcnICcnICJNeSBob3N0IG5hbWUiCisKKyAgQSBmdWxsIHNlcXVlbmNlOgorCisgICQgJHByb2duYW1lIHNldC1jaGlkICcnICcnICcnICJNeSBob3N0IG5hbWUiCisgICQgJHByb2duYW1lIGdldC1jZGlkICcnCisgICQgJHByb2duYW1lIHNldC1jYyAnJworCitFT0YKK30KKworCisjIERlZmF1bHRzCisjIEZJWE1FOiBDSElEIHNob3VsZCBjb21lIGZyb20gYSBkYXRhYmFzZSA6KSwgYmFuZCBncm91cCBmcm9tIHRoZSBob3N0Citob3N0X0NISUQ9IjAwIDExIDIyIDMzIDQ0IDU1IDY2IDc3IDg4IDk5IGFhIGJiIGNjIGRkIGVlIGZmIgoraG9zdF9iYW5kX2dyb3VwPSIwMDAxIgoraG9zdF9uYW1lPSQoaG9zdG5hbWUpCisKK2RldnM9IiQoZWNobyAvc3lzL2J1cy91c2IvZHJpdmVycy93dXNiLWNiYWYvWzAtOV0qKSIKK2hkZXZzPSIkKGZvciBoIGluIC9zeXMvY2xhc3MvdXdiX3JjLyovd3VzYmhjOyBkbyByZWFkbGluayAtZiAkaDsgZG9uZSkiCisKK3Jlc3VsdD0wCitjYXNlICQxIGluCisgICAgc3RhcnQpCisgICAgICAgIGZvciBkZXYgaW4gJHsyOi0kaGRldnN9CisgICAgICAgICAgZG8KKyAgICAgICAgICB1d2JfcmM9JChyZWFkbGluayAtZiAkZGV2L3V3Yl9yYykKKyAgICAgICAgICBpZiBjYXQgJHV3Yl9yYy9iZWFjb24gfCBncmVwIC1xIC0tICItMSIKKyAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICBlY2hvIDEzIDAgPiAkdXdiX3JjL2JlYWNvbgorICAgICAgICAgICAgICBlY2hvIEk6IHN0YXJ0ZWQgYmVhY29uaW5nIG9uIGNoIDEzIG9uICQoYmFzZW5hbWUgJHV3Yl9yYykgPiYyCisgICAgICAgICAgZmkKKyAgICAgICAgICBlY2hvICRob3N0X0NISUQgPiAkZGV2L3d1c2JfY2hpZAorICAgICAgICAgIGVjaG8gSTogc3RhcnRlZCBob3N0ICQoYmFzZW5hbWUgJGRldikgPiYyCisgICAgICAgIGRvbmUKKyAgICAgICAgOzsKKyAgICBzdG9wKQorICAgICAgICBmb3IgZGV2IGluICR7MjotJGhkZXZzfQorICAgICAgICAgIGRvCisgICAgICAgICAgZWNobyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCA+ICRkZXYvd3VzYl9jaGlkCisgICAgICAgICAgZWNobyBJOiBzdG9wcGVkIGhvc3QgJChiYXNlbmFtZSAkZGV2KSA+JjIKKyAgICAgICAgICB1d2JfcmM9JChyZWFkbGluayAtZiAkZGV2L3V3Yl9yYykKKyAgICAgICAgICBlY2hvIC0xIHwgY2F0ID4gJHV3Yl9yYy9iZWFjb24KKyAgICAgICAgICBlY2hvIEk6IHN0b3BwZWQgYmVhY29uaW5nIG9uICQoYmFzZW5hbWUgJHV3Yl9yYykgPiYyCisgICAgICAgIGRvbmUKKyAgICAgICAgOzsKKyAgICBzZXQtY2hpZCkKKyAgICAgICAgc2hpZnQKKyAgICAgICAgZm9yIGRldiBpbiAkezI6LSRkZXZzfTsgZG8KKyAgICAgICAgICAgIGVjaG8gIiR7NDotJGhvc3RfbmFtZX0iID4gJGRldi93dXNiX2hvc3RfbmFtZQorICAgICAgICAgICAgZWNobyAiJHszOi0kaG9zdF9iYW5kX2dyb3VwfSIgPiAkZGV2L3d1c2JfaG9zdF9iYW5kX2dyb3VwcworICAgICAgICAgICAgZWNobyAkezI6LSRob3N0X0NISUR9ID4gJGRldi93dXNiX2NoaWQKKyAgICAgICAgZG9uZQorICAgICAgICA7OworICAgIGdldC1jZGlkKQorICAgICAgICBmb3IgZGV2IGluICR7MjotJGRldnN9CisgICAgICAgICAgZG8KKyAgICAgICAgICBjYXQgJGRldi93dXNiX2NkaWQKKyAgICAgICAgZG9uZQorICAgICAgICA7OworICAgIHNldC1jYykKKyAgICAgICAgZm9yIGRldiBpbiAkezI6LSRkZXZzfTsgZG8KKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBDRElEPSIkKGhlYWQgLS1ieXRlcz0xNiAvZGV2L3VyYW5kb20gIHwgb2QgLXR4MSAtQW4pIgorICAgICAgICAgICAgQ0s9IiQoaGVhZCAtLWJ5dGVzPTE2IC9kZXYvdXJhbmRvbSAgfCBvZCAtdHgxIC1BbikiCisgICAgICAgICAgICBlY2hvICIkQ0RJRCIgPiAkZGV2L3d1c2JfY2RpZAorICAgICAgICAgICAgZWNobyAiJENLIiA+ICRkZXYvd3VzYl9jaworCisgICAgICAgICAgICBlY2hvIEk6IENDIHNldCA+JjIKKyAgICAgICAgICAgIGVjaG8gIkNISUQ6ICQoY2F0ICRkZXYvd3VzYl9jaGlkKSIKKyAgICAgICAgICAgIGVjaG8gIkNESUQ6JENESUQiCisgICAgICAgICAgICBlY2hvICJDSzogICRDSyIKKyAgICAgICAgZG9uZQorICAgICAgICA7OworICAgIGhlbHB8aHwtLWhlbHB8LWgpCisgICAgICAgIGhlbHAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBlY2hvICJFOiBVbmtub3duIHVzYWdlIiAxPiYyCisgICAgICAgIGhlbHAgMT4mMgorICAgICAgICByZXN1bHQ9MQorZXNhYworZXhpdCAkcmVzdWx0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmF1MDgyOCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4CmluZGV4IGFhMDVlNWIuLmQ1Y2I0ZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4CkBAIC0xLDUgKzEsNSBAQAogICAwIC0+IFVua25vd24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkKLSAgMSAtPiBIYXVwcGF1Z2UgSFZSOTUwUSAgICAgICAgICAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMjA0MDo3MjAwLDIwNDA6NzIxMCwyMDQwOjcyMTcsMjA0MDo3MjFiLDIwNDA6NzIxZiwyMDQwOjcyODAsMGZkOTowMDA4XQorICAxIC0+IEhhdXBwYXVnZSBIVlI5NTBRICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyMDAsMjA0MDo3MjEwLDIwNDA6NzIxNywyMDQwOjcyMWIsMjA0MDo3MjFlLDIwNDA6NzIxZiwyMDQwOjcyODAsMGZkOTowMDA4XQogICAyIC0+IEhhdXBwYXVnZSBIVlI4NTAgICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyNDBdCiAgIDMgLT4gRFZpQ08gRnVzaW9uSERUViBVU0IgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzBmZTk6ZDYyMF0KICAgNCAtPiBIYXVwcGF1Z2UgSFZSOTUwUSByZXYgeHhGOCAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMjA0MDo3MjAxLDIwNDA6NzIxMSwyMDQwOjcyODFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCAzMGJiZGRhLi42OTFkMmYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTc1LDMgKzc1LDQgQEAKIHR1bmVyPTc1IC0gUGhpbGlwcyBURUE1NzYxIEZNIFJhZGlvCiB0dW5lcj03NiAtIFhjZWl2ZSA1MDAwIHR1bmVyCiB0dW5lcj03NyAtIFRDTCB0dW5lciBNRjAyR0lQLTVOLUUKK3R1bmVyPTc4IC0gUGhpbGlwcyBGTUQxMjE2TUVYIE1LMyBIeWJyaWQgVHVuZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vdW5ldmljdGFibGUtbHJ1LnR4dCBiL0RvY3VtZW50YXRpb24vdm0vdW5ldmljdGFibGUtbHJ1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjVlZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS91bmV2aWN0YWJsZS1scnUudHh0CkBAIC0wLDAgKzEsNjE1IEBACisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBMaW51eCBtZW1vcnkgbWFuYWdlbWVudCAiVW5ldmljdGFibGUgTFJVIgoraW5mcmFzdHJ1Y3R1cmUgYW5kIHRoZSB1c2Ugb2YgdGhpcyBpbmZyYXN0cnVjdHVyZSB0byBtYW5hZ2Ugc2V2ZXJhbCB0eXBlcworb2YgInVuZXZpY3RhYmxlIiBwYWdlcy4gIFRoZSBkb2N1bWVudCBhdHRlbXB0cyB0byBwcm92aWRlIHRoZSBvdmVyYWxsCityYXRpb25hbGUgYmVoaW5kIHRoaXMgbWVjaGFuaXNtIGFuZCB0aGUgcmF0aW9uYWxlIGZvciBzb21lIG9mIHRoZSBkZXNpZ24KK2RlY2lzaW9ucyB0aGF0IGRyb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbi4gIFRoZSBsYXR0ZXIgZGVzaWduIHJhdGlvbmFsZSBpcworZGlzY3Vzc2VkIGluIHRoZSBjb250ZXh0IG9mIGFuIGltcGxlbWVudGF0aW9uIGRlc2NyaXB0aW9uLiAgQWRtaXR0ZWRseSwgb25lCitjYW4gb2J0YWluIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLS10aGUgIndoYXQgZG9lcyBpdCBkbz8iLS1ieSByZWFkaW5nIHRoZQorY29kZS4gIE9uZSBob3BlcyB0aGF0IHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cgYWRkIHZhbHVlIGJ5IHByb3ZpZGUgdGhlIGFuc3dlcgordG8gIndoeSBkb2VzIGl0IGRvIHRoYXQ/Ii4KKworVW5ldmljdGFibGUgTFJVIEluZnJhc3RydWN0dXJlOgorCitUaGUgVW5ldmljdGFibGUgTFJVIGFkZHMgYW4gYWRkaXRpb25hbCBMUlUgbGlzdCB0byB0cmFjayB1bmV2aWN0YWJsZSBwYWdlcworYW5kIHRvIGhpZGUgdGhlc2UgcGFnZXMgZnJvbSB2bXNjYW4uICBUaGlzIG1lY2hhbmlzbSBpcyBiYXNlZCBvbiBhIHBhdGNoIGJ5CitMYXJyeSBXb29kbWFuIG9mIFJlZCBIYXQgdG8gYWRkcmVzcyBzZXZlcmFsIHNjYWxhYmlsaXR5IHByb2JsZW1zIHdpdGggcGFnZQorcmVjbGFpbSBpbiBMaW51eC4gIFRoZSBwcm9ibGVtcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgYXQgY3VzdG9tZXIgc2l0ZXMgb24gbGFyZ2UKK21lbW9yeSB4ODZfNjQgc3lzdGVtcy4gIEZvciBleGFtcGxlLCBhIG5vbi1udW1hbCB4ODZfNjQgcGxhdGZvcm0gd2l0aCAxMjhHQgorb2YgbWFpbiBtZW1vcnkgd2lsbCBoYXZlIG92ZXIgMzIgbWlsbGlvbiA0ayBwYWdlcyBpbiBhIHNpbmdsZSB6b25lLiAgV2hlbiBhCitsYXJnZSBmcmFjdGlvbiBvZiB0aGVzZSBwYWdlcyBhcmUgbm90IGV2aWN0YWJsZSBmb3IgYW55IHJlYXNvbiBbc2VlIGJlbG93XSwKK3Ztc2NhbiB3aWxsIHNwZW5kIGEgbG90IG9mIHRpbWUgc2Nhbm5pbmcgdGhlIExSVSBsaXN0cyBsb29raW5nIGZvciB0aGUgc21hbGwKK2ZyYWN0aW9uIG9mIHBhZ2VzIHRoYXQgYXJlIGV2aWN0YWJsZS4gIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpdHVhdGlvbiB3aGVyZQorYWxsIGNwdXMgYXJlIHNwZW5kaW5nIDEwMCUgb2YgdGhlaXIgdGltZSBpbiB2bXNjYW4gZm9yIGhvdXJzIG9yIGRheXMgb24gZW5kLAord2l0aCB0aGUgc3lzdGVtIGNvbXBsZXRlbHkgdW5yZXNwb25zaXZlLgorCitUaGUgVW5ldmljdGFibGUgTFJVIGluZnJhc3RydWN0dXJlIGFkZHJlc3NlcyB0aGUgZm9sbG93aW5nIGNsYXNzZXMgb2YKK3VuZXZpY3RhYmxlIHBhZ2VzOgorCisrIHBhZ2Ugb3duZWQgYnkgcmFtZnMKKysgcGFnZSBtYXBwZWQgaW50byBTSE1fTE9DS2VkIHNoYXJlZCBtZW1vcnkgcmVnaW9ucworKyBwYWdlIG1hcHBlZCBpbnRvIFZNX0xPQ0tFRCBbbWxvY2soKWVkXSB2bWFzCisKK1RoZSBpbmZyYXN0cnVjdHVyZSBtaWdodCBiZSBhYmxlIHRvIGhhbmRsZSBvdGhlciBjb25kaXRpb25zIHRoYXQgbWFrZSBwYWdlcwordW5ldmljdGFibGUsIGVpdGhlciBieSBkZWZpbml0aW9uIG9yIGJ5IGNpcmN1bXN0YW5jZSwgaW4gdGhlIGZ1dHVyZS4KKworCitUaGUgVW5ldmljdGFibGUgTFJVIExpc3QKKworVGhlIFVuZXZpY3RhYmxlIExSVSBpbmZyYXN0cnVjdHVyZSBjb25zaXN0cyBvZiBhbiBhZGRpdGlvbmFsLCBwZXItem9uZSwgTFJVIGxpc3QKK2NhbGxlZCB0aGUgInVuZXZpY3RhYmxlIiBsaXN0IGFuZCBhbiBhc3NvY2lhdGVkIHBhZ2UgZmxhZywgUEdfdW5ldmljdGFibGUsIHRvCitpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIGlzIGJlaW5nIG1hbmFnZWQgb24gdGhlIHVuZXZpY3RhYmxlIGxpc3QuICBUaGUKK1BHX3VuZXZpY3RhYmxlIGZsYWcgaXMgYW5hbG9nb3VzIHRvLCBhbmQgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGgsIHRoZSBQR19hY3RpdmUKK2ZsYWcgaW4gdGhhdCBpdCBpbmRpY2F0ZXMgb24gd2hpY2ggTFJVIGxpc3QgYSBwYWdlIHJlc2lkZXMgd2hlbiBQR19scnUgaXMgc2V0LgorVGhlIHVuZXZpY3RhYmxlIExSVSBsaXN0IGlzIHNvdXJjZSBjb25maWd1cmFibGUgYmFzZWQgb24gdGhlIFVORVZJQ1RBQkxFX0xSVQorS2NvbmZpZyBvcHRpb24uCisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgaW5mcmFzdHJ1Y3R1cmUgbWFpbnRhaW5zIHVuZXZpY3RhYmxlIHBhZ2VzIG9uIGFuIGFkZGl0aW9uYWwKK0xSVSBsaXN0IGZvciBhIGZldyByZWFzb25zOgorCisxKSBXZSBnZXQgdG8gInRyZWF0IHVuZXZpY3RhYmxlIHBhZ2VzIGp1c3QgbGlrZSB3ZSB0cmVhdCBvdGhlciBwYWdlcyBpbiB0aGUKKyAgIHN5c3RlbSwgd2hpY2ggbWVhbnMgd2UgZ2V0IHRvIHVzZSB0aGUgc2FtZSBjb2RlIHRvIG1hbmlwdWxhdGUgdGhlbSwgdGhlCisgICBzYW1lIGNvZGUgdG8gaXNvbGF0ZSB0aGVtIChmb3IgbWlncmF0ZSwgZXRjLiksIHRoZSBzYW1lIGNvZGUgdG8ga2VlcCB0cmFjaworICAgb2YgdGhlIHN0YXRpc3RpY3MsIGV0Yy4uLiIgW1JpayB2YW4gUmllbF0KKworMikgV2Ugd2FudCB0byBiZSBhYmxlIHRvIG1pZ3JhdGUgdW5ldmljdGFibGUgcGFnZXMgYmV0d2VlbiBub2Rlcy0tZm9yIG1lbW9yeQorICAgZGVmcmFnbWVudGF0aW9uLCB3b3JrbG9hZCBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1Zy4gIFRoZSBsaW51eCBrZXJuZWwKKyAgIGNhbiBvbmx5IG1pZ3JhdGUgcGFnZXMgdGhhdCBpdCBjYW4gc3VjY2Vzc2Z1bGx5IGlzb2xhdGUgZnJvbSB0aGUgbHJ1IGxpc3RzLgorICAgSWYgd2Ugd2VyZSB0byBtYWludGFpbiBwYWdlcyBlbHNld2lzZSB0aGFuIG9uIGFuIGxydS1saWtlIGxpc3QsIHdoZXJlIHRoZXkKKyAgIGNhbiBiZSBmb3VuZCBieSBpc29sYXRlX2xydV9wYWdlKCksIHdlIHdvdWxkIHByZXZlbnQgdGhlaXIgbWlncmF0aW9uLCB1bmxlc3MKKyAgIHdlIHJld29ya2VkIG1pZ3JhdGlvbiBjb2RlIHRvIGZpbmQgdGhlIHVuZXZpY3RhYmxlIHBhZ2VzLgorCisKK1RoZSB1bmV2aWN0YWJsZSBMUlUgbGlzdCBkb2VzIG5vdCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZmlsZSBiYWNrZWQgYW5kIHN3YXAKK2JhY2tlZCBbYW5vbl0gcGFnZXMuICBUaGlzIGRpZmZlcmVudGlhdGlvbiBpcyBvbmx5IGltcG9ydGFudCB3aGlsZSB0aGUgcGFnZXMKK2FyZSwgaW4gZmFjdCwgZXZpY3RhYmxlLgorCitUaGUgdW5ldmljdGFibGUgTFJVIGxpc3QgYmVuZWZpdHMgZnJvbSB0aGUgImFycmF5aWZpY2F0aW9uIiBvZiB0aGUgcGVyLXpvbmUKK0xSVSBsaXN0cyBhbmQgc3RhdGlzdGljcyBvcmlnaW5hbGx5IHByb3Bvc2VkIGFuZCBwb3N0ZWQgYnkgQ2hyaXN0b3BoIExhbWV0ZXIuCisKK1RoZSB1bmV2aWN0YWJsZSBsaXN0IGRvZXMgbm90IHVzZSB0aGUgbHJ1IHBhZ2V2ZWMgbWVjaGFuaXNtLiBSYXRoZXIsCit1bmV2aWN0YWJsZSBwYWdlcyBhcmUgcGxhY2VkIGRpcmVjdGx5IG9uIHRoZSBwYWdlJ3Mgem9uZSdzIHVuZXZpY3RhYmxlCitsaXN0IHVuZGVyIHRoZSB6b25lIGxydV9sb2NrLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byBwcmV2ZW50IHN0cmFuZGluZworb2YgcGFnZXMgb24gdGhlIHVuZXZpY3RhYmxlIGxpc3Qgd2hlbiBvbmUgdGFzayBoYXMgdGhlIHBhZ2UgaXNvbGF0ZWQgZnJvbSB0aGUKK2xydSBhbmQgb3RoZXIgdGFza3MgYXJlIGNoYW5naW5nIHRoZSAiZXZpY3RhYmlsaXR5IiBzdGF0ZSBvZiB0aGUgcGFnZS4KKworCitVbmV2aWN0YWJsZSBMUlUgYW5kIE1lbW9yeSBDb250cm9sbGVyIEludGVyYWN0aW9uCisKK1RoZSBtZW1vcnkgY29udHJvbGxlciBkYXRhIHN0cnVjdHVyZSBhdXRvbWF0aWNhbGx5IGdldHMgYSBwZXIgem9uZSB1bmV2aWN0YWJsZQorbHJ1IGxpc3QgYXMgYSByZXN1bHQgb2YgdGhlICJhcnJheWlmaWNhdGlvbiIgb2YgdGhlIHBlci16b25lIExSVSBsaXN0cy4gIFRoZQorbWVtb3J5IGNvbnRyb2xsZXIgdHJhY2tzIHRoZSBtb3ZlbWVudCBvZiBwYWdlcyB0byBhbmQgZnJvbSB0aGUgdW5ldmljdGFibGUgbGlzdC4KK1doZW4gYSBtZW1vcnkgY29udHJvbCBncm91cCBjb21lcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHRoZSBjb250cm9sbGVyIHdpbGwKK25vdCBhdHRlbXB0IHRvIHJlY2xhaW0gcGFnZXMgb24gdGhlIHVuZXZpY3RhYmxlIGxpc3QuICBUaGlzIGhhcyBhIGNvdXBsZSBvZgorZWZmZWN0cy4gIEJlY2F1c2UgdGhlIHBhZ2VzIGFyZSAiaGlkZGVuIiBmcm9tIHJlY2xhaW0gb24gdGhlIHVuZXZpY3RhYmxlIGxpc3QsCit0aGUgcmVjbGFpbSBwcm9jZXNzIGNhbiBiZSBtb3JlIGVmZmljaWVudCwgZGVhbGluZyBvbmx5IHdpdGggcGFnZXMgdGhhdCBoYXZlCithIGNoYW5jZSBvZiBiZWluZyByZWNsYWltZWQuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdG9vIG1hbnkgb2YgdGhlIHBhZ2VzCitjaGFyZ2VkIHRvIHRoZSBjb250cm9sIGdyb3VwIGFyZSB1bmV2aWN0YWJsZSwgdGhlIGV2aWN0YWJsZSBwb3J0aW9uIG9mIHRoZQord29ya2luZyBzZXQgb2YgdGhlIHRhc2tzIGluIHRoZSBjb250cm9sIGdyb3VwIG1heSBub3QgZml0IGludG8gdGhlIGF2YWlsYWJsZQorbWVtb3J5LiAgVGhpcyBjYW4gY2F1c2UgdGhlIGNvbnRyb2wgZ3JvdXAgdG8gdGhyYXNoIG9yIHRvIG9vbS1raWxsIHRhc2tzLgorCisKK1VuZXZpY3RhYmxlIExSVTogIERldGVjdGluZyBVbmV2aWN0YWJsZSBQYWdlcworCitUaGUgZnVuY3Rpb24gcGFnZV9ldmljdGFibGUocGFnZSwgdm1hKSBpbiB2bXNjYW4uYyBkZXRlcm1pbmVzIHdoZXRoZXIgYQorcGFnZSBpcyBldmljdGFibGUgb3Igbm90LiAgRm9yIHJhbWZzIHBhZ2VzIGFuZCBwYWdlcyBpbiBTSE1fTE9DS2VkIHJlZ2lvbnMsCitwYWdlX2V2aWN0YWJsZSgpIHRlc3RzIGEgbmV3IGFkZHJlc3Mgc3BhY2UgZmxhZywgQVNfVU5FVklDVEFCTEUsIGluIHRoZSBwYWdlJ3MKK2FkZHJlc3Mgc3BhY2UgdXNpbmcgYSB3cmFwcGVyIGZ1bmN0aW9uLiAgV3JhcHBlciBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gc2V0LAorY2xlYXIgYW5kIHRlc3QgdGhlIGZsYWcgdG8gcmVkdWNlIHRoZSByZXF1aXJlbWVudCBmb3IgI2lmZGVmJ3MgdGhyb3VnaG91dCB0aGUKK3NvdXJjZSBjb2RlLiAgQVNfVU5FVklDVEFCTEUgaXMgc2V0IG9uIHJhbWZzIGlub2RlL21hcHBpbmcgd2hlbiBpdCBpcyBjcmVhdGVkLgorVGhpcyBmbGFnIHJlbWFpbnMgZm9yIHRoZSBsaWZlIG9mIHRoZSBpbm9kZS4KKworRm9yIHNoYXJlZCBtZW1vcnkgcmVnaW9ucywgQVNfVU5FVklDVEFCTEUgaXMgc2V0IHdoZW4gYW4gYXBwbGljYXRpb24KK3N1Y2Nlc3NmdWxseSBTSE1fTE9DS3MgdGhlIHJlZ2lvbiBhbmQgaXMgcmVtb3ZlZCB3aGVuIHRoZSByZWdpb24gaXMKK1NITV9VTkxPQ0tlZC4gIE5vdGUgdGhhdCBzaG1jdGwoU0hNX0xPQ0ssIC4uLikgZG9lcyBub3QgcG9wdWxhdGUgdGhlIHBhZ2UKK3RhYmxlcyBmb3IgdGhlIHJlZ2lvbiBhcyBkb2VzLCBmb3IgZXhhbXBsZSwgbWxvY2soKS4gICBTbywgd2UgbWFrZSBubyBzcGVjaWFsCitlZmZvcnQgdG8gcHVzaCBhbnkgcGFnZXMgaW4gdGhlIFNITV9MT0NLZWQgcmVnaW9uIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LgorVm1zY2FuIHdpbGwgZG8gdGhpcyB3aGVuL2lmIGl0IGVuY291bnRlcnMgdGhlIHBhZ2VzIGR1cmluZyByZWNsYWltLiAgT24KK1NITV9VTkxPQ0ssIHNobWN0bCgpIHNjYW5zIHRoZSBwYWdlcyBpbiB0aGUgcmVnaW9uIGFuZCAicmVzY3VlcyIgdGhlbSBmcm9tIHRoZQordW5ldmljdGFibGUgbGlzdCBpZiBubyBvdGhlciBjb25kaXRpb24ga2VlcHMgdGhlbSB1bmV2aWN0YWJsZS4gIElmIGEgU0hNX0xPQ0tlZAorcmVnaW9uIGlzIGRlc3Ryb3llZCwgdGhlIHBhZ2VzIGFyZSBhbHNvICJyZXNjdWVkIiBmcm9tIHRoZSB1bmV2aWN0YWJsZSBsaXN0IGluCit0aGUgcHJvY2VzcyBvZiBmcmVlaW5nIHRoZW0uCisKK3BhZ2VfZXZpY3RhYmxlKCkgZGV0ZWN0cyBtbG9jaygpZWQgcGFnZXMgYnkgdGVzdGluZyBhbiBhZGRpdGlvbmFsIHBhZ2UgZmxhZywKK1BHX21sb2NrZWQgdmlhIHRoZSBQYWdlTWxvY2tlZCgpIHdyYXBwZXIuICBJZiB0aGUgcGFnZSBpcyBOT1QgbWxvY2tlZCwgYW5kIGEKK25vbi1OVUxMIHZtYSBpcyBzdXBwbGllZCwgcGFnZV9ldmljdGFibGUoKSB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlIHZtYSBpcworVk1fTE9DS0VEIHZpYSBpc19tbG9ja2VkX3ZtYSgpLiAgaXNfbWxvY2tlZF92bWEoKSB3aWxsIFNldFBhZ2VNbG9ja2VkKCkgYW5kCit1cGRhdGUgdGhlIGFwcHJvcHJpYXRlIHN0YXRpc3RpY3MgaWYgdGhlIHZtYSBpcyBWTV9MT0NLRUQuICBUaGlzIG1ldGhvZCBhbGxvd3MKK2VmZmljaWVudCAiY3VsbGluZyIgb2YgcGFnZXMgaW4gdGhlIGZhdWx0IHBhdGggdGhhdCBhcmUgYmVpbmcgZmF1bHRlZCBpbiB0bworVk1fTE9DS0VEIHZtYXMuCisKKworVW5ldmljdGFibGUgUGFnZXMgYW5kIFZtc2NhbiBbc2hyaW5rXypfbGlzdCgpXQorCitJZiB1bmV2aWN0YWJsZSBwYWdlcyBhcmUgY3VsbGVkIGluIHRoZSBmYXVsdCBwYXRoLCBvciBtb3ZlZCB0byB0aGUgdW5ldmljdGFibGUKK2xpc3QgYXQgbWxvY2soKSBvciBtbWFwKCkgdGltZSwgdm1zY2FuIHdpbGwgbmV2ZXIgZW5jb3VudGVyIHRoZSBwYWdlcyB1bnRpbAordGhleSBoYXZlIGJlY29tZSBldmljdGFibGUgYWdhaW4sIGZvciBleGFtcGxlLCB2aWEgbXVubG9jaygpIGFuZCBoYXZlIGJlZW4KKyJyZXNjdWVkIiBmcm9tIHRoZSB1bmV2aWN0YWJsZSBsaXN0LiAgSG93ZXZlciwgdGhlcmUgbWF5IGJlIHNpdHVhdGlvbnMgd2hlcmUgd2UKK2RlY2lkZSwgZm9yIHRoZSBzYWtlIG9mIGV4cGVkaWVuY3ksIHRvIGxlYXZlIGEgdW5ldmljdGFibGUgcGFnZSBvbiBvbmUgb2YgdGhlCityZWd1bGFyIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgbGlzdHMgZm9yIHZtc2NhbiB0byBkZWFsIHdpdGguICBWbXNjYW4gY2hlY2tzIGZvcgorc3VjaCBwYWdlcyBpbiBhbGwgb2YgdGhlIHNocmlua197YWN0aXZlfGluYWN0aXZlfHBhZ2V9X2xpc3QoKSBmdW5jdGlvbnMgYW5kCit3aWxsICJjdWxsIiBzdWNoIHBhZ2VzIHRoYXQgaXQgZW5jb3VudGVycy0tdGhhdCBpcywgaXQgZGl2ZXJ0cyB0aG9zZSBwYWdlcyB0bwordGhlIHVuZXZpY3RhYmxlIGxpc3QgZm9yIHRoZSB6b25lIGJlaW5nIHNjYW5uZWQuCisKK1RoZXJlIG1heSBiZSBzaXR1YXRpb25zIHdoZXJlIGEgcGFnZSBpcyBtYXBwZWQgaW50byBhIFZNX0xPQ0tFRCB2bWEsIGJ1dCB0aGUKK3BhZ2UgaXMgbm90IG1hcmtlZCBhcyBQYWdlTWxvY2tlZC4gIFN1Y2ggcGFnZXMgd2lsbCBtYWtlIGl0IGFsbCB0aGUgd2F5IHRvCitzaHJpbmtfcGFnZV9saXN0KCkgd2hlcmUgdGhleSB3aWxsIGJlIGRldGVjdGVkIHdoZW4gdm1zY2FuIHdhbGtzIHRoZSByZXZlcnNlCittYXAgaW4gdHJ5X3RvX3VubWFwKCkuICBJZiB0cnlfdG9fdW5tYXAoKSByZXR1cm5zIFNXQVBfTUxPQ0ssIHNocmlua19wYWdlX2xpc3QoKQord2lsbCBjdWxsIHRoZSBwYWdlIGF0IHRoYXQgcG9pbnQuCisKK05vdGUgdGhhdCBmb3IgYW5vbnltb3VzIHBhZ2VzLCBzaHJpbmtfcGFnZV9saXN0KCkgYXR0ZW1wdHMgdG8gYWRkIHRoZSBwYWdlIHRvCit0aGUgc3dhcCBjYWNoZSBiZWZvcmUgaXQgdHJpZXMgdG8gdW5tYXAgdGhlIHBhZ2UuICBUbyBhdm9pZCB0aGlzIHVubmVjZXNzYXJ5Citjb25zdW1wdGlvbiBvZiBzd2FwIHNwYWNlLCBzaHJpbmtfcGFnZV9saXN0KCkgY2FsbHMgdHJ5X3RvX211bmxvY2soKSB0byBjaGVjaword2hldGhlciBhbnkgVk1fTE9DS0VEIHZtYXMgbWFwIHRoZSBwYWdlIHdpdGhvdXQgYXR0ZW1wdGluZyB0byB1bm1hcCB0aGUgcGFnZS4KK0lmIHRyeV90b19tdW5sb2NrKCkgcmV0dXJucyBTV0FQX01MT0NLLCBzaHJpbmtfcGFnZV9saXN0KCkgd2lsbCBjdWxsIHRoZSBwYWdlCit3aXRob3V0IGNvbnN1bWluZyBzd2FwIHNwYWNlLiAgdHJ5X3RvX211bmxvY2soKSB3aWxsIGJlIGRlc2NyaWJlZCBiZWxvdy4KKworVG8gImN1bGwiIGFuIHVuZXZpY3RhYmxlIHBhZ2UsIHZtc2NhbiBzaW1wbHkgcHV0cyB0aGUgcGFnZSBiYWNrIG9uIHRoZSBscnUKK2xpc3QgdXNpbmcgcHV0YmFja19scnVfcGFnZSgpLS10aGUgaW52ZXJzZSBvcGVyYXRpb24gdG8gaXNvbGF0ZV9scnVfcGFnZSgpLS0KK2FmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIGxvY2suICBCZWNhdXNlIHRoZSBjb25kaXRpb24gd2hpY2ggbWFrZXMgdGhlIHBhZ2UKK3VuZXZpY3RhYmxlIG1heSBjaGFuZ2Ugb25jZSB0aGUgcGFnZSBpcyB1bmxvY2tlZCwgcHV0YmFja19scnVfcGFnZSgpIHdpbGwKK3JlY2hlY2sgdGhlIHVuZXZpY3RhYmxlIHN0YXRlIG9mIGEgcGFnZSB0aGF0IGl0IHBsYWNlcyBvbiB0aGUgdW5ldmljdGFibGUgbHJ1CitsaXN0LiAgSWYgdGhlIHBhZ2UgaGFzIGJlY29tZSB1bmV2aWN0YWJsZSwgcHV0YmFja19scnVfcGFnZSgpIHJlbW92ZXMgaXQgZnJvbQordGhlIGxpc3QgYW5kIHJldHJpZXMsIGluY2x1ZGluZyB0aGUgcGFnZV91bmV2aWN0YWJsZSgpIHRlc3QuICBCZWNhdXNlIHN1Y2ggYQorcmFjZSBpcyBhIHJhcmUgZXZlbnQgYW5kIG1vdmVtZW50IG9mIHBhZ2VzIG9udG8gdGhlIHVuZXZpY3RhYmxlIGxpc3Qgc2hvdWxkIGJlCityYXJlLCB0aGVzZSBleHRyYSBldmljdGFiaWx0eSBjaGVja3Mgc2hvdWxkIG5vdCBvY2N1ciBpbiB0aGUgbWFqb3JpdHkgb2YgY2FsbHMKK3RvIHB1dGJhY2tfbHJ1X3BhZ2UoKS4KKworCitNbG9ja2VkIFBhZ2U6ICBQcmlvciBXb3JrCisKK1RoZSAiVW5ldmljdGFibGUgTWxvY2tlZCBQYWdlcyIgaW5mcmFzdHJ1Y3R1cmUgaXMgYmFzZWQgb24gd29yayBvcmlnaW5hbGx5Citwb3N0ZWQgYnkgTmljayBQaWdnaW4gaW4gYW4gUkZDIHBhdGNoIGVudGl0bGVkICJtbTogbWxvY2tlZCBwYWdlcyBvZmYgTFJVIi4KK05pY2sgcG9zdGVkIGhpcyBwYXRjaCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBhIHBhdGNoIHBvc3RlZCBieSBDaHJpc3RvcGgKK0xhbWV0ZXIgdG8gYWNoaWV2ZSB0aGUgc2FtZSBvYmplY3RpdmUtLWhpZGluZyBtbG9ja2VkIHBhZ2VzIGZyb20gdm1zY2FuLgorSW4gTmljaydzIHBhdGNoLCBoZSB1c2VkIG9uZSBvZiB0aGUgc3RydWN0IHBhZ2UgbHJ1IGxpc3QgbGluayBmaWVsZHMgYXMgYSBjb3VudAorb2YgVk1fTE9DS0VEIHZtYXMgdGhhdCBtYXAgdGhlIHBhZ2UuICBUaGlzIHVzZSBvZiB0aGUgbGluayBmaWVsZCBmb3IgYSBjb3VudAorcHJldmVudGVkIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSBwYWdlcyBvbiBhbiBMUlUgbGlzdC4gIFRodXMsIG1sb2NrZWQgcGFnZXMgd2VyZQorbm90IG1pZ3JhdGFibGUgYXMgaXNvbGF0ZV9scnVfcGFnZSgpIGNvdWxkIG5vdCBmaW5kIHRoZW0gYW5kIHRoZSBscnUgbGlzdCBsaW5rCitmaWVsZCB3YXMgbm90IGF2YWlsYWJsZSB0byB0aGUgbWlncmF0aW9uIHN1YnN5c3RlbS4gIE5pY2sgcmVzb2x2ZWQgdGhpcyBieQorcHV0dGluZyBtbG9ja2VkIHBhZ2VzIGJhY2sgb24gdGhlIGxydSBsaXN0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIGlzb2xhdGUgdGhlbSwKK3RodXMgYWJhbmRvbmluZyB0aGUgY291bnQgb2YgVk1fTE9DS0VEIHZtYXMuICBXaGVuIE5pY2sncyBwYXRjaCB3YXMgaW50ZWdyYXRlZAord2l0aCB0aGUgVW5ldmljdGFibGUgTFJVIHdvcmssIHRoZSBjb3VudCB3YXMgcmVwbGFjZWQgYnkgd2Fsa2luZyB0aGUgcmV2ZXJzZQorbWFwIHRvIGRldGVybWluZSB3aGV0aGVyIGFueSBWTV9MT0NLRUQgdm1hcyBtYXBwZWQgdGhlIHBhZ2UuICBNb3JlIG9uIHRoaXMKK2JlbG93LgorCisKK01sb2NrZWQgUGFnZXM6ICBCYXNpYyBNYW5hZ2VtZW50CisKK01sb2NrZWQgcGFnZXMtLXBhZ2VzIG1hcHBlZCBpbnRvIGEgVk1fTE9DS0VEIHZtYS0tcmVwcmVzZW50IG9uZSBjbGFzcyBvZgordW5ldmljdGFibGUgcGFnZXMuICBXaGVuIHN1Y2ggYSBwYWdlIGhhcyBiZWVuICJub3RpY2VkIiBieSB0aGUgbWVtb3J5CittYW5hZ2VtZW50IHN1YnN5c3RlbSwgdGhlIHBhZ2UgaXMgbWFya2VkIHdpdGggdGhlIFBHX21sb2NrZWQgW1BhZ2VNbG9ja2VkKCldCitmbGFnLiAgQSBQYWdlTWxvY2tlZCgpIHBhZ2Ugd2lsbCBiZSBwbGFjZWQgb24gdGhlIHVuZXZpY3RhYmxlIExSVSBsaXN0IHdoZW4KK2l0IGlzIGFkZGVkIHRvIHRoZSBMUlUuICAgUGFnZXMgY2FuIGJlICJub3RpY2VkIiBieSBtZW1vcnkgbWFuYWdlbWVudCBpbgorc2V2ZXJhbCBwbGFjZXM6CisKKzEpIGluIHRoZSBtbG9jaygpL21sb2NrYWxsKCkgc3lzdGVtIGNhbGwgaGFuZGxlcnMuCisyKSBpbiB0aGUgbW1hcCgpIHN5c3RlbSBjYWxsIGhhbmRsZXIgd2hlbiBtbWFwKClpbmcgYSByZWdpb24gd2l0aCB0aGUKKyAgIE1BUF9MT0NLRUQgZmxhZywgb3IgbW1hcCgpaW5nIGEgcmVnaW9uIGluIGEgdGFzayB0aGF0IGhhcyBjYWxsZWQKKyAgIG1sb2NrYWxsKCkgd2l0aCB0aGUgTUNMX0ZVVFVSRSBmbGFnLiAgQm90aCBvZiB0aGVzZSBjb25kaXRpb25zIHJlc3VsdAorICAgaW4gdGhlIFZNX0xPQ0tFRCBmbGFnIGJlaW5nIHNldCBmb3IgdGhlIHZtYS4KKzMpIGluIHRoZSBmYXVsdCBwYXRoLCBpZiBtbG9ja2VkIHBhZ2VzIGFyZSAiY3VsbGVkIiBpbiB0aGUgZmF1bHQgcGF0aCwKKyAgIGFuZCB3aGVuIGEgVk1fTE9DS0VEIHN0YWNrIHNlZ21lbnQgaXMgZXhwYW5kZWQuCis0KSBhcyBtZW50aW9uZWQgYWJvdmUsIGluIHZtc2NhbjpzaHJpbmtfcGFnZV9saXN0KCkgd2l0aCBhdHRlbXB0aW5nIHRvCisgICByZWNsYWltIGEgcGFnZSBpbiBhIFZNX0xPQ0tFRCB2bWEtLXZpYSB0cnlfdG9fdW5tYXAoKSBvciB0cnlfdG9fbXVubG9jaygpLgorCitNbG9ja2VkIHBhZ2VzIGJlY29tZSB1bmxvY2tlZCBhbmQgcmVzY3VlZCBmcm9tIHRoZSB1bmV2aWN0YWJsZSBsaXN0IHdoZW46CisKKzEpIG1hcHBlZCBpbiBhIHJhbmdlIHVubG9ja2VkIHZpYSB0aGUgbXVubG9jaygpL211bmxvY2thbGwoKSBzeXN0ZW0gY2FsbHMuCisyKSBtdW5tYXBwZWQoKSBvdXQgb2YgdGhlIGxhc3QgVk1fTE9DS0VEIHZtYSB0aGF0IG1hcHMgdGhlIHBhZ2UsIGluY2x1ZGluZworICAgdW5tYXBwaW5nIGF0IHRhc2sgZXhpdC4KKzMpIHdoZW4gdGhlIHBhZ2UgaXMgdHJ1bmNhdGVkIGZyb20gdGhlIGxhc3QgVk1fTE9DS0VEIHZtYSBvZiBhbiBtbWFwKCllZCBmaWxlLgorNCkgYmVmb3JlIGEgcGFnZSBpcyBDT1dlZCBpbiBhIFZNX0xPQ0tFRCB2bWEuCisKKworTWxvY2tlZCBQYWdlczogIG1sb2NrKCkvbWxvY2thbGwoKSBTeXN0ZW0gQ2FsbCBIYW5kbGluZworCitCb3RoIFtkb19dbWxvY2soKSBhbmQgW2RvX11tbG9ja2FsbCgpIHN5c3RlbSBjYWxsIGhhbmRsZXJzIGNhbGwgbWxvY2tfZml4dXAoKQorZm9yIGVhY2ggdm1hIGluIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgdGhlIGNhbGwuICBJbiB0aGUgY2FzZSBvZiBtbG9ja2FsbCgpLAordGhpcyBpcyB0aGUgZW50aXJlIGFjdGl2ZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSB0YXNrLiAgTm90ZSB0aGF0IG1sb2NrX2ZpeHVwKCkKK2lzIHVzZWQgZm9yIGJvdGggbWxvY2soKWluZyBhbmQgbXVubG9jaygpaW5nIGEgcmFuZ2Ugb2YgbWVtb3J5LiAgQSBjYWxsIHRvCittbG9jaygpIGFuIGFscmVhZHkgVk1fTE9DS0VEIHZtYSwgb3IgdG8gbXVubG9jaygpIGEgdm1hIHRoYXQgaXMgbm90IFZNX0xPQ0tFRAoraXMgdHJlYXRlZCBhcyBhIG5vLW9wLS1tbG9ja19maXh1cCgpIHNpbXBseSByZXR1cm5zLgorCitJZiB0aGUgdm1hIHBhc3NlcyBzb21lIGZpbHRlcmluZyBkZXNjcmliZWQgaW4gIk1sb2NrZWQgUGFnZXM6ICBGaWx0ZXJpbmcgVm1hcyIKK2JlbG93LCBtbG9ja19maXh1cCgpIHdpbGwgYXR0ZW1wdCB0byBtZXJnZSB0aGUgdm1hIHdpdGggaXRzIG5laWdoYm9ycyBvciBzcGxpdAorb2ZmIGEgc3Vic2V0IG9mIHRoZSB2bWEgaWYgdGhlIHJhbmdlIGRvZXMgbm90IGNvdmVyIHRoZSBlbnRpcmUgdm1hLiAgT25jZSB0aGUKK3ZtYSBoYXMgYmVlbiBtZXJnZWQgb3Igc3BsaXQgb3IgbmVpdGhlciwgbWxvY2tfZml4dXAoKSB3aWxsIGNhbGwKK19fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgdG8gZmF1bHQgaW4gdGhlIHBhZ2VzIHZpYSBnZXRfdXNlcl9wYWdlcygpIGFuZAordG8gbWFyayB0aGUgcGFnZXMgYXMgbWxvY2tlZCB2aWEgbWxvY2tfdm1hX3BhZ2UoKS4KKworTm90ZSB0aGF0IHRoZSB2bWEgYmVpbmcgbWxvY2tlZCBtaWdodCBiZSBtYXBwZWQgd2l0aCBQUk9UX05PTkUuICBJbiB0aGlzIGNhc2UsCitnZXRfdXNlcl9wYWdlcygpIHdpbGwgYmUgdW5hYmxlIHRvIGZhdWx0IGluIHRoZSBwYWdlcy4gIFRoYXQncyBPSy4gIElmIHBhZ2VzCitkbyBlbmQgdXAgZ2V0dGluZyBmYXVsdGVkIGludG8gdGhpcyBWTV9MT0NLRUQgdm1hLCB3ZSdsbCBoYW5kbGUgdGhlbSBpbiB0aGUKK2ZhdWx0IHBhdGggb3IgaW4gdm1zY2FuLgorCitBbHNvIG5vdGUgdGhhdCBhIHBhZ2UgcmV0dXJuZWQgYnkgZ2V0X3VzZXJfcGFnZXMoKSBjb3VsZCBiZSB0cnVuY2F0ZWQgb3IKK21pZ3JhdGVkIG91dCBmcm9tIHVuZGVyIHVzLCB3aGlsZSB3ZSdyZSB0cnlpbmcgdG8gbWxvY2sgaXQuICBUbyBkZXRlY3QKK3RoaXMsIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgdGVzdHMgdGhlIHBhZ2VfbWFwcGluZyBhZnRlciBhY3F1aXJpbmcKK3RoZSBwYWdlIGxvY2suICBJZiB0aGUgcGFnZSBpcyBzdGlsbCBhc3NvY2lhdGVkIHdpdGggaXRzIG1hcHBpbmcsIHdlJ2xsCitnbyBhaGVhZCBhbmQgY2FsbCBtbG9ja192bWFfcGFnZSgpLiAgSWYgdGhlIG1hcHBpbmcgaXMgZ29uZSwgd2UganVzdAordW5sb2NrIHRoZSBwYWdlIGFuZCBtb3ZlIG9uLiAgV29yc2UgY2FzZSwgdGhpcyByZXN1bHRzIGluIHBhZ2UgbWFwcGVkCitpbiBhIFZNX0xPQ0tFRCB2bWEgcmVtYWluaW5nIG9uIGEgbm9ybWFsIExSVSBsaXN0IHdpdGhvdXQgYmVpbmcKK1BhZ2VNbG9ja2VkKCkuICBBZ2Fpbiwgdm1zY2FuIHdpbGwgZGV0ZWN0IGFuZCBjdWxsIHN1Y2ggcGFnZXMuCisKK21sb2NrX3ZtYV9wYWdlKCksIGNhbGxlZCB3aXRoIHRoZSBwYWdlIGxvY2tlZCBbTi5CLiwgbm90ICJtbG9ja2VkIl0sIHdpbGwKK1Rlc3RTZXRQYWdlTWxvY2tlZCgpIGZvciBlYWNoIHBhZ2UgcmV0dXJuZWQgYnkgZ2V0X3VzZXJfcGFnZXMoKS4gIFdlIHVzZQorVGVzdFNldFBhZ2VNbG9ja2VkKCkgYmVjYXVzZSB0aGUgcGFnZSBtaWdodCBhbHJlYWR5IGJlIG1sb2NrZWQgYnkgYW5vdGhlcgordGFzay92bWEgYW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gZXh0cmEgd29yay4gIFdlIGVzcGVjaWFsbHkgZG8gbm90IHdhbnQgdG8KK2NvdW50IGFuIG1sb2NrZWQgcGFnZSBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc3RhdGlzdGljcy4gIElmIHRoZSBwYWdlIHdhcworYWxyZWFkeSBtbG9ja2VkLCBtbG9ja192bWFfcGFnZSgpIGlzIGRvbmUuCisKK0lmIHRoZSBwYWdlIHdhcyBOT1QgYWxyZWFkeSBtbG9ja2VkLCBtbG9ja192bWFfcGFnZSgpIGF0dGVtcHRzIHRvIGlzb2xhdGUgdGhlCitwYWdlIGZyb20gdGhlIExSVSwgYXMgaXQgaXMgbGlrZWx5IG9uIHRoZSBhcHByb3ByaWF0ZSBhY3RpdmUgb3IgaW5hY3RpdmUgbGlzdAorYXQgdGhhdCB0aW1lLiAgSWYgdGhlIGlzb2xhdGVfbHJ1X3BhZ2UoKSBzdWNjZWVkcywgbWxvY2tfdm1hX3BhZ2UoKSB3aWxsCitwdXRiYWNrIHRoZSBwYWdlLS1wdXRiYWNrX2xydV9wYWdlKCktLXdoaWNoIHdpbGwgbm90aWNlIHRoYXQgdGhlIHBhZ2UgaXMgbm93CittbG9ja2VkIGFuZCBkaXZlcnQgdGhlIHBhZ2UgdG8gdGhlIHpvbmUncyB1bmV2aWN0YWJsZSBMUlUgbGlzdC4gIElmCittbG9ja192bWFfcGFnZSgpIGlzIHVuYWJsZSB0byBpc29sYXRlIHRoZSBwYWdlIGZyb20gdGhlIExSVSwgdm1zY2FuIHdpbGwgaGFuZGxlCitpdCBsYXRlciBpZi93aGVuIGl0IGF0dGVtcHRzIHRvIHJlY2xhaW0gdGhlIHBhZ2UuCisKKworTWxvY2tlZCBQYWdlczogIEZpbHRlcmluZyBTcGVjaWFsIFZtYXMKKworbWxvY2tfZml4dXAoKSBmaWx0ZXJzIHNldmVyYWwgY2xhc3NlcyBvZiAic3BlY2lhbCIgdm1hczoKKworMSkgdm1hcyB3aXRoIFZNX0lPfFZNX1BGTk1BUCBzZXQgYXJlIHNraXBwZWQgZW50aXJlbHkuICBUaGUgcGFnZXMgYmVoaW5kCisgICB0aGVzZSBtYXBwaW5ncyBhcmUgaW5oZXJlbnRseSBwaW5uZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gbWFyayB0aGVtIGFzCisgICBtbG9ja2VkLiAgSW4gYW55IGNhc2UsIG1vc3Qgb2YgdGhlIHBhZ2VzIGhhdmUgbm8gc3RydWN0IHBhZ2UgaW4gd2hpY2ggdG8KKyAgIHNvIG1hcmsgdGhlIHBhZ2UuICBCZWNhdXNlIG9mIHRoaXMsIGdldF91c2VyX3BhZ2VzKCkgd2lsbCBmYWlsIGZvciB0aGVzZQorICAgdm1hcywgc28gdGhlcmUgaXMgbm8gc2Vuc2UgaW4gYXR0ZW1wdGluZyB0byB2aXNpdCB0aGVtLgorCisyKSB2bWFzIG1hcHBpbmcgaHVnZXRsYmZzIHBhZ2UgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgcGlubmVkIGludG8gbWVtb3J5LgorICAgV2UgZG9uJ3QgbmVlZCBub3Igd2FudCB0byBtbG9jaygpIHRoZXNlIHBhZ2VzLiAgSG93ZXZlciwgdG8gcHJlc2VydmUgdGhlCisgICBwcmlvciBiZWhhdmlvciBvZiBtbG9jaygpLS1iZWZvcmUgdGhlIHVuZXZpY3RhYmxlL21sb2NrIGNoYW5nZXMtLW1sb2NrX2ZpeHVwKCkKKyAgIHdpbGwgY2FsbCBtYWtlX3BhZ2VzX3ByZXNlbnQoKSBpbiB0aGUgaHVnZXRsYmZzIHZtYSByYW5nZSB0byBhbGxvY2F0ZSB0aGUKKyAgIGh1Z2UgcGFnZXMgYW5kIHBvcHVsYXRlIHRoZSBwdGVzLgorCiszKSB2bWFzIHdpdGggVk1fRE9OVEVYUEFORHxWTV9SRVNFUlZFRCBhcmUgZ2VuZXJhbGx5IHVzZXIgc3BhY2UgbWFwcGluZ3Mgb2YKKyAgIGtlcm5lbCBwYWdlcywgc3VjaCBhcyB0aGUgdmRzbyBwYWdlLCByZWxheSBjaGFubmVsIHBhZ2VzLCBldGMuICBUaGVzZSBwYWdlcworICAgYXJlIGluaGVyZW50bHkgdW5ldmljdGFibGUgYW5kIGFyZSBub3QgbWFuYWdlZCBvbiB0aGUgTFJVIGxpc3RzLgorICAgbWxvY2tfZml4dXAoKSB0cmVhdHMgdGhlc2Ugdm1hcyB0aGUgc2FtZSBhcyBodWdldGxiZnMgdm1hcy4gIEl0IGNhbGxzCisgICBtYWtlX3BhZ2VzX3ByZXNlbnQoKSB0byBwb3B1bGF0ZSB0aGUgcHRlcy4KKworTm90ZSB0aGF0IGZvciBhbGwgb2YgdGhlc2Ugc3BlY2lhbCB2bWFzLCBtbG9ja19maXh1cCgpIGRvZXMgbm90IHNldCB0aGUKK1ZNX0xPQ0tFRCBmbGFnLiAgVGhlcmVmb3JlLCB3ZSB3b24ndCBoYXZlIHRvIGRlYWwgd2l0aCB0aGVtIGxhdGVyIGR1cmluZworbXVubG9jaygpIG9yIG11bm1hcCgpLS1mb3IgZXhhbXBsZSwgYXQgdGFzayBleGl0LiAgTmVpdGhlciBkb2VzIG1sb2NrX2ZpeHVwKCkKK2FjY291bnQgdGhlc2Ugdm1hcyBhZ2FpbnN0IHRoZSB0YXNrJ3MgImxvY2tlZF92bSIuCisKK01sb2NrZWQgUGFnZXM6ICBEb3duZ3JhZGluZyB0aGUgTW1hcCBTZW1hcGhvcmUuCisKK21sb2NrX2ZpeHVwKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbW1hcCBzZW1hcGhvcmUgaGVsZCBmb3Igd3JpdGUsIGJlY2F1c2UKK2l0IG1heSBoYXZlIHRvIG1lcmdlIG9yIHNwbGl0IHZtYXMuICBIb3dldmVyLCBtbG9ja2luZyBhIGxhcmdlIHJlZ2lvbiBvZgorbWVtb3J5IGNhbiB0YWtlIGEgbG9uZyB0aW1lLS1lc3BlY2lhbGx5IGlmIHZtc2NhbiBtdXN0IHJlY2xhaW0gcGFnZXMgdG8KK3NhdGlzZnkgdGhlIHJlZ2lvbnMgcmVxdWlyZW1lbnRzLiAgRmF1bHRpbmcgaW4gYSBsYXJnZSByZWdpb24gd2l0aCB0aGUgbW1hcAorc2VtYXBob3JlIGhlbGQgZm9yIHdyaXRlIGNhbiBob2xkIG9mZiBvdGhlciBmYXVsdHMgb24gdGhlIGFkZHJlc3Mgc3BhY2UsIGluCit0aGUgY2FzZSBvZiBhIG11bHRpLXRocmVhZGVkIHRhc2suICBJdCBjYW4gYWxzbyBob2xkIG9mZiBzY2FucyBvZiB0aGUgdGFzaydzCithZGRyZXNzIHNwYWNlIHZpYSAvcHJvYy4gIFdoaWxlIHRlc3RpbmcgdW5kZXIgaGVhdnkgbG9hZCwgaXQgd2FzIG9ic2VydmVkIHRoYXQKK3RoZSBwcygxKSBjb21tYW5kIGNvdWxkIGJlIGhlbGQgb2ZmIGZvciBtYW55IG1pbnV0ZXMgd2hpbGUgYSBsYXJnZSBzZWdtZW50IHdhcworbWxvY2soKWVkIGRvd24uCisKK1RvIGFkZHJlc3MgdGhpcyBpc3N1ZSwgYW5kIHRvIG1ha2UgdGhlIHN5c3RlbSBtb3JlIHJlc3BvbnNpdmUgZHVyaW5nIG1sb2NrKClpbmcKK29mIGxhcmdlIHNlZ21lbnRzLCBtbG9ja19maXh1cCgpIGRvd25ncmFkZXMgdGhlIG1tYXAgc2VtYXBob3JlIHRvIHJlYWQgbW9kZQorZHVyaW5nIHRoZSBjYWxsIHRvIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkuICBUaGlzIHdvcmtzIGZpbmUuICBIb3dldmVyLCB0aGUKK2NhbGxlcnMgb2YgbWxvY2tfZml4dXAoKSBleHBlY3QgdGhlIHNlbWFwaG9yZSB0byBiZSByZXR1cm5lZCBpbiB3cml0ZSBtb2RlLgorU28sIG1sb2NrX2ZpeHVwKCkgInVwZ3JhZGVzIiB0aGUgc2VtcGhvcmUgdG8gd3JpdGUgbW9kZS4gIExpbnV4IGRvZXMgbm90CitzdXBwb3J0IGFuIGF0b21pYyB1cGdyYWRlX3NlbSgpIGNhbGwsIHNvIG1sb2NrX2ZpeHVwKCkgbXVzdCBkcm9wIHRoZSBzZW1hcGhvcmUKK2FuZCByZWFjcXVpcmUgaXQgaW4gd3JpdGUgbW9kZS4gIEluIGEgbXVsdGktdGhyZWFkZWQgdGFzaywgaXQgaXMgcG9zc2libGUgZm9yCit0aGUgdGFzayBtZW1vcnkgbWFwIHRvIGNoYW5nZSB3aGlsZSB0aGUgc2VtYXBob3JlIGlzIGRyb3BwZWQuICBUaGVyZWZvcmUsCittbG9ja19maXh1cCgpIGxvb2tzIHVwIHRoZSB2bWEgYXQgdGhlIHJhbmdlIHN0YXJ0IGFkZHJlc3MgYWZ0ZXIgcmVhY3F1aXJpbmcKK3RoZSBzZW1hcGhvcmUgaW4gd3JpdGUgbW9kZSBhbmQgdmVyaWZpZXMgdGhhdCBpdCBzdGlsbCBjb3ZlcnMgdGhlIG9yaWdpbmFsCityYW5nZS4gIElmIG5vdCwgbWxvY2tfZml4dXAoKSByZXR1cm5zIGFuIGVycm9yIFstRUFHQUlOXS4gIEFsbCBjYWxsZXJzIG9mCittbG9ja19maXh1cCgpIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGRlYWwgd2l0aCB0aGlzIG5ldyBlcnJvciBjb25kaXRpb24uCisKK05vdGU6ICB3aGVuIG11bmxvY2tpbmcgYSByZWdpb24sIGFsbCBvZiB0aGUgcGFnZXMgc2hvdWxkIGFscmVhZHkgYmUgcmVzaWRlbnQtLQordW5sZXNzIHdlIGhhdmUgcmFjaW5nIHRocmVhZHMgbWxvY2tpbmcoKSBhbmQgbXVubG9ja2luZygpIHJlZ2lvbnMuICBTbywKK3VubG9ja2luZyBzaG91bGQgbm90IGhhdmUgdG8gd2FpdCBmb3IgcGFnZSBhbGxvY2F0aW9ucyBub3IgZmF1bHRzICBvZiBhbnkga2luZC4KK1RoZXJlZm9yZSBtbG9ja19maXh1cCgpIGRvZXMgbm90IGRvd25ncmFkZSB0aGUgc2VtYXBob3JlIGZvciBtdW5sb2NrKCkuCisKKworTWxvY2tlZCBQYWdlczogIG11bmxvY2soKS9tdW5sb2NrYWxsKCkgU3lzdGVtIENhbGwgSGFuZGxpbmcKKworVGhlIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpIHN5c3RlbSBjYWxscyBhcmUgaGFuZGxlZCBieSB0aGUgc2FtZSBmdW5jdGlvbnMtLQorZG9fbWxvY2tbYWxsXSgpLS1hcyB0aGUgbWxvY2soKSBhbmQgbWxvY2thbGwoKSBzeXN0ZW0gY2FsbHMgd2l0aCB0aGUgdW5sb2NrCit2cyBsb2NrIG9wZXJhdGlvbiBpbmRpY2F0ZWQgYnkgYW4gYXJndW1lbnQuICBTbywgdGhlc2Ugc3lzdGVtIGNhbGxzIGFyZSBhbHNvCitoYW5kbGVkIGJ5IG1sb2NrX2ZpeHVwKCkuICBBZ2FpbiwgaWYgY2FsbGVkIGZvciBhbiBhbHJlYWR5IG11bmxvY2soKWVkIHZtYSwKK21sb2NrX2ZpeHVwKCkgc2ltcGx5IHJldHVybnMuICBCZWNhdXNlIG9mIHRoZSB2bWEgZmlsdGVyaW5nIGRpc2N1c3NlZCBhYm92ZSwKK1ZNX0xPQ0tFRCB3aWxsIG5vdCBiZSBzZXQgaW4gYW55ICJzcGVjaWFsIiB2bWFzLiAgU28sIHRoZXNlIHZtYXMgd2lsbCBiZQoraWdub3JlZCBmb3IgbXVubG9jay4KKworSWYgdGhlIHZtYSBpcyBWTV9MT0NLRUQsIG1sb2NrX2ZpeHVwKCkgYWdhaW4gYXR0ZW1wdHMgdG8gbWVyZ2Ugb3Igc3BsaXQgb2ZmCit0aGUgc3BlY2lmaWVkIHJhbmdlLiAgVGhlIHJhbmdlIGlzIHRoZW4gbXVubG9ja2VkIHZpYSB0aGUgZnVuY3Rpb24KK19fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCktLXRoZSBzYW1lIGZ1bmN0aW9uIHVzZWQgdG8gbWxvY2sgYSB2bWEgcmFuZ2UtLQorcGFzc2luZyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBtdW5sb2NrKCkgaXMgYmVpbmcgcGVyZm9ybWVkLgorCitCZWNhdXNlIHRoZSB2bWEgYWNjZXNzIHByb3RlY3Rpb25zIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIFBST1RfTk9ORSBhZnRlcgorZmF1bHRpbmcgaW4gYW5kIG1sb2NraW5nIHNvbWUgcGFnZXMsIGdldF91c2VyX3BhZ2VzKCkgd2FzIHVucmVsaWFibGUgZm9yIHZpc2l0aW5nCit0aGVzZSBwYWdlcyBmb3IgbXVubG9ja2luZy4gIEJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBsZWF2ZSBwYWdlcyBtbG9ja2VkKCksCitnZXRfdXNlcl9wYWdlcygpIHdhcyBlbmhhbmNlZCB0byBhY2NlcHQgYSBmbGFnIHRvIGlnbm9yZSB0aGUgcGVybWlzc2lvbnMgd2hlbgorZmV0Y2hpbmcgdGhlIHBhZ2VzLS1hbGwgb2Ygd2hpY2ggc2hvdWxkIGJlIHJlc2lkZW50IGFzIGEgcmVzdWx0IG9mIHByZXZpb3VzCittbG9jaygpaW5nLgorCitGb3IgbXVubG9jaygpLCBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHVubG9ja3MgaW5kaXZpZHVhbCBwYWdlcyBieSBjYWxsaW5nCittdW5sb2NrX3ZtYV9wYWdlKCkuICBtdW5sb2NrX3ZtYV9wYWdlKCkgdW5jb25kaXRpb25hbGx5IGNsZWFycyB0aGUgUEdfbWxvY2tlZAorZmxhZyB1c2luZyBUZXN0Q2xlYXJQYWdlTWxvY2tlZCgpLiAgQXMgd2l0aCBtbG9ja192bWFfcGFnZSgpLCBtdW5sb2NrX3ZtYV9wYWdlKCkKK3VzZSB0aGUgVGVzdCpQYWdlTWxvY2tlZCgpIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcGFnZSBtaWdodAoraGF2ZSBhbHJlYWR5IGJlZW4gdW5sb2NrZWQgYnkgYW5vdGhlciB0YXNrLiAgSWYgdGhlIHBhZ2Ugd2FzIG1sb2NrZWQsCittdW5sb2NrX3ZtYV9wYWdlKCkgdXBkYXRlcyB0aGF0IHpvbmUgc3RhdGlzdGljcyBmb3IgdGhlIG51bWJlciBvZiBtbG9ja2VkCitwYWdlcy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgYXQgdGhpcyBwb2ludCB3ZSBoYXZlbid0IGNoZWNrZWQgd2hldGhlciB0aGUgcGFnZQoraXMgbWFwcGVkIGJ5IG90aGVyIFZNX0xPQ0tFRCB2bWFzLgorCitXZSBjYW4ndCBjYWxsIHRyeV90b19tdW5sb2NrKCksIHRoZSBmdW5jdGlvbiB0aGF0IHdhbGtzIHRoZSByZXZlcnNlIG1hcCB0byBjaGVjaworZm9yIG90aGVyIFZNX0xPQ0tFRCB2bWFzLCB3aXRob3V0IGZpcnN0IGlzb2xhdGluZyB0aGUgcGFnZSBmcm9tIHRoZSBMUlUuCit0cnlfdG9fbXVubG9jaygpIGlzIGEgdmFyaWFudCBvZiB0cnlfdG9fdW5tYXAoKSBhbmQgdGh1cyByZXF1aXJlcyB0aGF0IHRoZSBwYWdlCitub3QgYmUgb24gYW4gbHJ1IGxpc3QuICBbTW9yZSBvbiB0aGVzZSBiZWxvdy5dICBIb3dldmVyLCB0aGUgY2FsbCB0bworaXNvbGF0ZV9scnVfcGFnZSgpIGNvdWxkIGZhaWwsIGluIHdoaWNoIGNhc2Ugd2UgY291bGRuJ3QgdHJ5X3RvX211bmxvY2soKS4KK1NvLCB3ZSBnbyBhaGVhZCBhbmQgY2xlYXIgUEdfbWxvY2tlZCB1cCBmcm9udCwgYXMgdGhpcyBtaWdodCBiZSB0aGUgb25seSBjaGFuY2UKK3dlIGhhdmUuICBJZiB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGlzb2xhdGUgdGhlIHBhZ2UsIHdlIGdvIGFoZWFkIGFuZAordHJ5X3RvX211bmxvY2soKSwgd2hpY2ggd2lsbCByZXN0b3JlIHRoZSBQR19tbG9ja2VkIGZsYWcgYW5kIHVwZGF0ZSB0aGUgem9uZQorcGFnZSBzdGF0aXN0aWNzIGlmIGl0IGZpbmRzIGFub3RoZXIgdm1hIGhvbGRpbmcgdGhlIHBhZ2UgbWxvY2tlZC4gIElmIHdlIGZhaWwKK3RvIGlzb2xhdGUgdGhlIHBhZ2UsIHdlJ2xsIGhhdmUgbGVmdCBhIHBvdGVudGlhbGx5IG1sb2NrZWQgcGFnZSBvbiB0aGUgTFJVLgorVGhpcyBpcyBmaW5lLCBiZWNhdXNlIHdlJ2xsIGNhdGNoIGl0IGxhdGVyIHdoZW4vaWYgdm1zY2FuIHRyaWVzIHRvIHJlY2xhaW0gdGhlCitwYWdlLiAgVGhpcyBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgorCitNbG9ja2VkIFBhZ2VzOiAgTWlncmF0aW5nIFRoZW0uLi4KKworQSBwYWdlIHRoYXQgaXMgYmVpbmcgbWlncmF0ZWQgaGFzIGJlZW4gaXNvbGF0ZWQgZnJvbSB0aGUgbHJ1IGxpc3RzIGFuZCBpcworaGVsZCBsb2NrZWQgYWNyb3NzIHVubWFwcGluZyBvZiB0aGUgcGFnZSwgdXBkYXRpbmcgdGhlIHBhZ2UncyBtYXBwaW5nCitbYWRkcmVzc19zcGFjZV0gZW50cnkgYW5kIGNvcHlpbmcgdGhlIGNvbnRlbnRzIGFuZCBzdGF0ZSwgdW50aWwgdGhlCitwYWdlIHRhYmxlIGVudHJ5IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYW4gZW50cnkgdGhhdCByZWZlcnMgdG8gdGhlIG5ldworcGFnZS4gIExpbnV4IHN1cHBvcnRzIG1pZ3JhdGlvbiBvZiBtbG9ja2VkIHBhZ2VzIGFuZCBvdGhlciB1bmV2aWN0YWJsZQorcGFnZXMuICBUaGlzIGludm9sdmVzIHNpbXBseSBtb3ZpbmcgdGhlIFBhZ2VNbG9ja2VkIGFuZCBQYWdlVW5ldmljdGFibGUgc3RhdGVzCitmcm9tIHRoZSBvbGQgcGFnZSB0byB0aGUgbmV3IHBhZ2UuCisKK05vdGUgdGhhdCBwYWdlIG1pZ3JhdGlvbiBjYW4gcmFjZSB3aXRoIG1sb2NraW5nIG9yIG11bmxvY2tpbmcgb2YgdGhlIHNhbWUKK3BhZ2UuICBUaGlzIGhhcyBiZWVuIGRpc2N1c3NlZCBmcm9tIHRoZSBtbG9jay9tdW5sb2NrIHBlcnNwZWN0aXZlIGluIHRoZQorcmVzcGVjdGl2ZSBzZWN0aW9ucyBhYm92ZS4gIEJvdGggcHJvY2Vzc2VzIFttaWdyYXRpb24sIG1bdW5dbG9ja2luZ10sIGhvbGQKK3RoZSBwYWdlIGxvY2tlZC4gIFRoaXMgcHJvdmlkZXMgdGhlIGZpcnN0IGxldmVsIG9mIHN5bmNocm9uaXphdGlvbi4gIFBhZ2UKK21pZ3JhdGlvbiB6ZXJvcyBvdXQgdGhlIHBhZ2VfbWFwcGluZyBvZiB0aGUgb2xkIHBhZ2UgYmVmb3JlIHVubG9ja2luZyBpdCwKK3NvIG1bdW5dbG9jayBjYW4gc2tpcCB0aGVzZSBwYWdlcyBieSB0ZXN0aW5nIHRoZSBwYWdlIG1hcHBpbmcgdW5kZXIgcGFnZQorbG9jay4KKworV2hlbiBjb21wbGV0aW5nIHBhZ2UgbWlncmF0aW9uLCB3ZSBwbGFjZSB0aGUgbmV3IGFuZCBvbGQgcGFnZXMgYmFjayBvbnRvIHRoZQorbHJ1IGFmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIGxvY2suICBUaGUgInVubmVlZGVkIiBwYWdlLS1vbGQgcGFnZSBvbiBzdWNjZXNzLAorbmV3IHBhZ2Ugb24gZmFpbHVyZS0td2lsbCBiZSBmcmVlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGVsZCBieSB0aGUKK21pZ3JhdGlvbiBwcm9jZXNzIGlzIHJlbGVhc2VkLiAgVG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3Qgc3RyYW5kIHBhZ2VzIG9uIHRoZQordW5ldmljdGFibGUgbGlzdCBiZWNhdXNlIG9mIGEgcmFjZSBiZXR3ZWVuIG11bmxvY2sgYW5kIG1pZ3JhdGlvbiwgcGFnZQorbWlncmF0aW9uIHVzZXMgdGhlIHB1dGJhY2tfbHJ1X3BhZ2UoKSBmdW5jdGlvbiB0byBhZGQgbWlncmF0ZWQgcGFnZXMgYmFjayB0bwordGhlIGxydS4KKworCitNbG9ja2VkIFBhZ2VzOiAgbW1hcChNQVBfTE9DS0VEKSBTeXN0ZW0gQ2FsbCBIYW5kbGluZworCitJbiBhZGRpdGlvbiB0aGUgdGhlIG1sb2NrKCkvbWxvY2thbGwoKSBzeXN0ZW0gY2FsbHMsIGFuIGFwcGxpY2F0aW9uIGNhbiByZXF1ZXN0Cit0aGF0IGEgcmVnaW9uIG9mIG1lbW9yeSBiZSBtbG9ja2VkIHVzaW5nIHRoZSBNQVBfTE9DS0VEIGZsYWcgd2l0aCB0aGUgbW1hcCgpCitjYWxsLiAgRnVydGhlcm1vcmUsIGFueSBtbWFwKCkgY2FsbCBvciBicmsoKSBjYWxsIHRoYXQgZXhwYW5kcyB0aGUgaGVhcCBieSBhCit0YXNrIHRoYXQgaGFzIHByZXZpb3VzbHkgY2FsbGVkIG1sb2NrYWxsKCkgd2l0aCB0aGUgTUNMX0ZVVFVSRSBmbGFnIHdpbGwgcmVzdWx0CitpbiB0aGUgbmV3bHkgbWFwcGVkIG1lbW9yeSBiZWluZyBtbG9ja2VkLiAgQmVmb3JlIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBjaGFuZ2VzLAordGhlIGtlcm5lbCBzaW1wbHkgY2FsbGVkIG1ha2VfcGFnZXNfcHJlc2VudCgpIHRvIGFsbG9jYXRlIHBhZ2VzIGFuZCBwb3B1bGF0ZQordGhlIHBhZ2UgdGFibGUuCisKK1RvIG1sb2NrIGEgcmFuZ2Ugb2YgbWVtb3J5IHVuZGVyIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBpbmZyYXN0cnVjdHVyZSwgdGhlCittbWFwKCkgaGFuZGxlciBhbmQgdGFzayBhZGRyZXNzIHNwYWNlIGV4cGFuc2lvbiBmdW5jdGlvbnMgY2FsbAorbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgc3BlY2lmeWluZyB0aGUgdm1hIGFuZCB0aGUgYWRkcmVzcyByYW5nZSB0byBtbG9jay4KK21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIGZpbHRlcnMgdm1hcyBsaWtlIG1sb2NrX2ZpeHVwKCksIGFzIGRlc2NyaWJlZCBhYm92ZSBpbgorIk1sb2NrZWQgUGFnZXM6ICBGaWx0ZXJpbmcgVm1hcyIuICBJdCB3aWxsIGNsZWFyIHRoZSBWTV9MT0NLRUQgZmxhZywgd2hpY2ggd2lsbAoraGF2ZSBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBjYWxsZXIsIGluIGZpbHRlcmVkIHZtYXMuICBUaHVzIHRoZXNlIHZtYSdzIG5lZWQKK25vdCBiZSB2aXNpdGVkIGZvciBtdW5sb2NrIHdoZW4gdGhlIHJlZ2lvbiBpcyB1bm1hcHBlZC4KKworRm9yICJub3JtYWwiIHZtYXMsIG1sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIGNhbGxzIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgdG8KK2ZhdWx0L2FsbG9jYXRlIHRoZSBwYWdlcyBhbmQgbWxvY2sgdGhlbS4gIEFnYWluLCBsaWtlIG1sb2NrX2ZpeHVwKCksCittbG9ja192bWFfcGFnZXNfcmFuZ2UoKSBkb3duZ3JhZGVzIHRoZSBtbWFwIHNlbWFwaG9yZSB0byByZWFkIG1vZGUgYmVmb3JlCithdHRlbXB0aW5nIHRvIGZhdWx0L2FsbG9jYXRlIGFuZCBtbG9jayB0aGUgcGFnZXM7IGFuZCAidXBncmFkZXMiIHRoZSBzZW1hcGhvcmUKK2JhY2sgdG8gd3JpdGUgbW9kZSBiZWZvcmUgcmV0dXJuaW5nLgorCitUaGUgY2FsbGVycyBvZiBtbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB3aWxsIGhhdmUgYWxyZWFkeSBhZGRlZCB0aGUgbWVtb3J5CityYW5nZSB0byBiZSBtbG9ja2VkIHRvIHRoZSB0YXNrJ3MgImxvY2tlZF92bSIuICBUbyBhY2NvdW50IGZvciBmaWx0ZXJlZCB2bWFzLAorbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIE5PVCBtbG9ja2VkLiAgQWxsIG9mIHRoZQorY2FsbGVycyB0aGVuIHN1YnRyYWN0IGEgbm9uLW5lZ2F0aXZlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSB0YXNrJ3MgbG9ja2VkX3ZtLgorQSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgcmVwcmVzZW50IGFuIGVycm9yLS1mb3IgZXhhbXBsZSwgZnJvbSBnZXRfdXNlcl9wYWdlcygpCithdHRlbXB0aW5nIHRvIGZhdWx0IGluIGEgdm1hIHdpdGggUFJPVF9OT05FIGFjY2Vzcy4gIEluIHRoaXMgY2FzZSwgd2UgbGVhdmUKK3RoZSBtZW1vcnkgcmFuZ2UgYWNjb3VudGVkIGFzIGxvY2tlZF92bSwgYXMgdGhlIHByb3RlY3Rpb25zIGNvdWxkIGJlIGNoYW5nZWQKK2xhdGVyIGFuZCBwYWdlcyBhbGxvY2F0ZWQgaW50byB0aGF0IHJlZ2lvbi4KKworCitNbG9ja2VkIFBhZ2VzOiAgbXVubWFwKCkvZXhpdCgpL2V4ZWMoKSBTeXN0ZW0gQ2FsbCBIYW5kbGluZworCitXaGVuIHVubWFwcGluZyBhbiBtbG9ja2VkIHJlZ2lvbiBvZiBtZW1vcnksIHdoZXRoZXIgYnkgYW4gZXhwbGljaXQgY2FsbCB0bworbXVubWFwKCkgb3IgdmlhIGFuIGludGVybmFsIHVubWFwIGZyb20gZXhpdCgpIG9yIGV4ZWMoKSBwcm9jZXNzaW5nLCB3ZSBtdXN0CittdW5sb2NrIHRoZSBwYWdlcyBpZiB3ZSdyZSByZW1vdmluZyB0aGUgbGFzdCBWTV9MT0NLRUQgdm1hIHRoYXQgbWFwcyB0aGUgcGFnZXMuCitCZWZvcmUgdGhlIHVuZXZpY3RhYmxlL21sb2NrIGNoYW5nZXMsIG1sb2NraW5nIGRpZCBub3QgbWFyayB0aGUgcGFnZXMgaW4gYW55IHdheSwKK3NvIHVubWFwcGluZyB0aGVtIHJlcXVpcmVkIG5vIHByb2Nlc3NpbmcuCisKK1RvIG11bmxvY2sgYSByYW5nZSBvZiBtZW1vcnkgdW5kZXIgdGhlIHVuZXZpY3RhYmxlL21sb2NrIGluZnJhc3RydWN0dXJlLCB0aGUKK211bm1hcCgpIGhhbmRlciBhbmQgdGFzayBhZGRyZXNzIHNwYWNlIHRlYXIgZG93biBmdW5jdGlvbiBjYWxsCittdW5sb2NrX3ZtYV9wYWdlc19hbGwoKS4gIFRoZSBuYW1lIHJlZmxlY3RzIHRoZSBvYnNlcnZhdGlvbiB0aGF0IG9uZSBhbHdheXMKK3NwZWNpZmllcyB0aGUgZW50aXJlIHZtYSByYW5nZSB3aGVuIG11bmxvY2soKWluZyBkdXJpbmcgdW5tYXAgb2YgYSByZWdpb24uCitCZWNhdXNlIG9mIHRoZSB2bWEgZmlsdGVyaW5nIHdoZW4gbWxvY2tpbmcoKSByZWdpb25zLCBvbmx5ICJub3JtYWwiIHZtYXMgdGhhdAorYWN0dWFsbHkgY29udGFpbiBtbG9ja2VkIHBhZ2VzIHdpbGwgYmUgcGFzc2VkIHRvIG11bmxvY2tfdm1hX3BhZ2VzX2FsbCgpLgorCittdW5sb2NrX3ZtYV9wYWdlc19hbGwoKSBjbGVhcnMgdGhlIFZNX0xPQ0tFRCB2bWEgZmxhZyBhbmQsIGxpa2UgbWxvY2tfZml4dXAoKQorZm9yIHRoZSBtdW5sb2NrIGNhc2UsIGNhbGxzIF9fbXVubG9ja192bWFfcGFnZXNfcmFuZ2UoKSB0byB3YWxrIHRoZSBwYWdlIHRhYmxlCitmb3IgdGhlIHZtYSdzIG1lbW9yeSByYW5nZSBhbmQgbXVubG9ja192bWFfcGFnZSgpIGVhY2ggcmVzaWRlbnQgcGFnZSBtYXBwZWQgYnkKK3RoZSB2bWEuICBUaGlzIGVmZmVjdGl2ZWx5IG11bmxvY2tzIHRoZSBwYWdlLCBvbmx5IGlmIHRoaXMgaXMgdGhlIGxhc3QKK1ZNX0xPQ0tFRCB2bWEgdGhhdCBtYXBzIHRoZSBwYWdlLgorCisKK01sb2NrZWQgUGFnZTogIHRyeV90b191bm1hcCgpCisKK1tOb3RlOiAgdGhlIGNvZGUgY2hhbmdlcyByZXByZXNlbnRlZCBieSB0aGlzIHNlY3Rpb24gYXJlIHJlYWxseSBxdWl0ZSBzbWFsbAorY29tcGFyZWQgdG8gdGhlIHRleHQgdG8gZGVzY3JpYmUgd2hhdCBoYXBwZW5pbmcgYW5kIHdoeSwgYW5kIHRvIGRpc2N1c3MgdGhlCitpbXBsaWNhdGlvbnMuXQorCitQYWdlcyBjYW4sIG9mIGNvdXJzZSwgYmUgbWFwcGVkIGludG8gbXVsdGlwbGUgdm1hcy4gIFNvbWUgb2YgdGhlc2Ugdm1hcyBtYXkKK2hhdmUgVk1fTE9DS0VEIGZsYWcgc2V0LiAgSXQgaXMgcG9zc2libGUgZm9yIGEgcGFnZSBtYXBwZWQgaW50byBvbmUgb3IgbW9yZQorVk1fTE9DS0VEIHZtYXMgbm90IHRvIGhhdmUgdGhlIFBHX21sb2NrZWQgZmxhZyBzZXQgYW5kIHRoZXJlZm9yZSByZXNpZGUgb24gb25lCitvZiB0aGUgYWN0aXZlIG9yIGluYWN0aXZlIExSVSBsaXN0cy4gIFRoaXMgY291bGQgaGFwcGVuIGlmLCBmb3IgZXhhbXBsZSwgYQordGFzayBpbiB0aGUgcHJvY2VzcyBvZiBtdW5sb2NrKClpbmcgdGhlIHBhZ2UgY291bGQgbm90IGlzb2xhdGUgdGhlIHBhZ2UgZnJvbQordGhlIExSVS4gIEFzIGEgcmVzdWx0LCB2bXNjYW4vc2hyaW5rX3BhZ2VfbGlzdCgpIG1pZ2h0IGVuY291bnRlciBzdWNoIGEgcGFnZQorYXMgZGVzY3JpYmVkIGluICJVbmV2aWN0YWJsZSBQYWdlcyBhbmQgVm1zY2FuIFtzaHJpbmtfKl9saXN0KCldIi4gIFRvCitoYW5kbGUgdGhpcyBzaXR1YXRpb24sIHRyeV90b191bm1hcCgpIGhhcyBiZWVuIGVuaGFuY2VkIHRvIGNoZWNrIGZvciBWTV9MT0NLRUQKK3ZtYXMgd2hpbGUgaXQgaXMgd2Fsa2luZyBhIHBhZ2UncyByZXZlcnNlIG1hcC4KKwordHJ5X3RvX3VubWFwKCkgaXMgYWx3YXlzIGNhbGxlZCwgYnkgZWl0aGVyIHZtc2NhbiBmb3IgcmVjbGFpbSBvciBmb3IgcGFnZQorbWlncmF0aW9uLCB3aXRoIHRoZSBhcmd1bWVudCBwYWdlIGxvY2tlZCBhbmQgaXNvbGF0ZWQgZnJvbSB0aGUgTFJVLiAgQlVHX09OKCkKK2Fzc2VydGlvbnMgZW5mb3JjZSB0aGlzIHJlcXVpcmVtZW50LiAgU2VwYXJhdGUgZnVuY3Rpb25zIGhhbmRsZSBhbm9ueW1vdXMgYW5kCittYXBwZWQgZmlsZSBwYWdlcywgYXMgdGhlc2UgdHlwZXMgb2YgcGFnZXMgaGF2ZSBkaWZmZXJlbnQgcmV2ZXJzZSBtYXAKK21lY2hhbmlzbXMuCisKKwl0cnlfdG9fdW5tYXBfYW5vbigpCisKK1RvIHVubWFwIGFub255bW91cyBwYWdlcywgZWFjaCB2bWEgaW4gdGhlIGxpc3QgYW5jaG9yZWQgaW4gdGhlIGFub25fdm1hIG11c3QgYmUKK3Zpc2l0ZWQtLWF0IGxlYXN0IHVudGlsIGEgVk1fTE9DS0VEIHZtYSBpcyBlbmNvdW50ZXJlZC4gIElmIHRoZSBwYWdlIGlzIGJlaW5nCit1bm1hcHBlZCBmb3IgbWlncmF0aW9uLCBWTV9MT0NLRUQgdm1hcyBkbyBub3Qgc3RvcCB0aGUgcHJvY2VzcyBiZWNhdXNlIG1sb2NrZWQKK3BhZ2VzIGFyZSBtaWdyYXRhYmxlLiAgSG93ZXZlciwgZm9yIHJlY2xhaW0sIGlmIHRoZSBwYWdlIGlzIG1hcHBlZCBpbnRvIGEKK1ZNX0xPQ0tFRCB2bWEsIHRoZSBzY2FuIHN0b3BzLiAgdHJ5X3RvX3VubWFwKCkgYXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgbW1hcAorc2VtcGhvcmUgb2YgdGhlIG1tX3N0cnVjdCB0byB3aGljaCB0aGUgdm1hIGJlbG9uZ3MgaW4gcmVhZCBtb2RlLiAgSWYgdGhpcyBpcworc3VjY2Vzc2Z1bCwgdHJ5X3RvX3VubWFwKCkgd2lsbCBtbG9jayB0aGUgcGFnZSB2aWEgbWxvY2tfdm1hX3BhZ2UoKS0td2UKK3dvdWxkbid0IGhhdmUgZ290dGVuIHRvIHRyeV90b191bm1hcCgpIGlmIHRoZSBwYWdlIHdlcmUgYWxyZWFkeSBtbG9ja2VkLS1hbmQKK3dpbGwgcmV0dXJuIFNXQVBfTUxPQ0ssIGluZGljYXRpbmcgdGhhdCB0aGUgcGFnZSBpcyB1bmV2aWN0YWJsZS4gIElmIHRoZQorbW1hcCBzZW1hcGhvcmUgY2Fubm90IGJlIGFjcXVpcmVkLCB3ZSBhcmUgbm90IHN1cmUgd2hldGhlciB0aGUgcGFnZSBpcyByZWFsbHkKK3VuZXZpY3RhYmxlIG9yIG5vdC4gIEluIHRoaXMgY2FzZSwgdHJ5X3RvX3VubWFwKCkgd2lsbCByZXR1cm4gU1dBUF9BR0FJTi4KKworCXRyeV90b191bm1hcF9maWxlKCkgLS0gbGluZWFyIG1hcHBpbmdzCisKK1VubWFwcGluZyBvZiBhIG1hcHBlZCBmaWxlIHBhZ2Ugd29ya3MgdGhlIHNhbWUsIGV4Y2VwdCB0aGF0IHRoZSBzY2FuIHZpc2l0cworYWxsIHZtYXMgdGhhdCBtYXBzIHRoZSBwYWdlJ3MgaW5kZXgvcGFnZSBvZmZzZXQgaW4gdGhlIHBhZ2UncyBtYXBwaW5nJ3MKK3JldmVyc2UgbWFwIHByaW9yaXR5IHNlYXJjaCB0cmVlLiAgSXQgbXVzdCBhbHNvIHZpc2l0IGVhY2ggdm1hIGluIHRoZSBwYWdlJ3MKK21hcHBpbmcncyBub24tbGluZWFyIGxpc3QsIGlmIHRoZSBsaXN0IGlzIG5vbi1lbXB0eS4gIEFzIGZvciBhbm9ueW1vdXMgcGFnZXMsCitvbiBlbmNvdW50ZXJpbmcgYSBWTV9MT0NLRUQgdm1hIGZvciBhIG1hcHBlZCBmaWxlIHBhZ2UsIHRyeV90b191bm1hcCgpIHdpbGwKK2F0dGVtcHQgdG8gYWNxdWlyZSB0aGUgYXNzb2NpYXRlZCBtbV9zdHJ1Y3QncyBtbWFwIHNlbWFwaG9yZSB0byBtbG9jayB0aGUgcGFnZSwKK3JldHVybmluZyBTV0FQX01MT0NLIGlmIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgYW5kIFNXQVBfQUdBSU4sIGlmIG5vdC4KKworCXRyeV90b191bm1hcF9maWxlKCkgLS0gbm9uLWxpbmVhciBtYXBwaW5ncworCitJZiBhIHBhZ2UncyBtYXBwaW5nIGNvbnRhaW5zIGEgbm9uLWVtcHR5IG5vbi1saW5lYXIgbWFwcGluZyB2bWEgbGlzdCwgdGhlbgordHJ5X3RvX3Vue21hcHxsb2NrfSgpIG11c3QgYWxzbyB2aXNpdCBlYWNoIHZtYSBpbiB0aGF0IGxpc3QgdG8gZGV0ZXJtaW5lCit3aGV0aGVyIHRoZSBwYWdlIGlzIG1hcHBlZCBpbiBhIFZNX0xPQ0tFRCB2bWEuICBBZ2FpbiwgdGhlIHNjYW4gbXVzdCB2aXNpdAorYWxsIHZtYXMgaW4gdGhlIG5vbi1saW5lYXIgbGlzdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFnZXMgaXMgbm90L3Nob3VsZCBub3QgYmUKK21sb2NrZWQuICBJZiBhIFZNX0xPQ0tFRCB2bWEgaXMgZm91bmQgaW4gdGhlIGxpc3QsIHRoZSBzY2FuIGNvdWxkIHRlcm1pbmF0ZS4KK0hvd2V2ZXIsIHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwYWdlIGlzIGFjdHVhbGx5IG1hcHBlZAoraW4gYSBnaXZlbiB2bWEtLWVpdGhlciBmb3IgdW5tYXBwaW5nIG9yIHRlc3Rpbmcgd2hldGhlciB0aGUgVk1fTE9DS0VEIHZtYQorYWN0dWFsbHkgcGlucyB0aGUgcGFnZS4KKworU28sIHRyeV90b191bm1hcF9maWxlKCkgaGFuZGxlcyBub24tbGluZWFyIG1hcHBpbmdzIGJ5IHNjYW5uaW5nIGEgY2VydGFpbgorbnVtYmVyIG9mIHBhZ2VzLS1hICJjbHVzdGVyIi0taW4gZWFjaCBub24tbGluZWFyIHZtYSBhc3NvY2lhdGVkIHdpdGggdGhlIHBhZ2UncworbWFwcGluZywgZm9yIGVhY2ggZmlsZSBtYXBwZWQgcGFnZSB0aGF0IHZtc2NhbiB0cmllcyB0byB1bm1hcC4gIElmIHRoaXMgaGFwcGVucwordG8gdW5tYXAgdGhlIHBhZ2Ugd2UncmUgdHJ5aW5nIHRvIHVubWFwLCB0cnlfdG9fdW5tYXAoKSB3aWxsIG5vdGljZSB0aGlzIG9uCityZXR1cm4tLShwYWdlX21hcGNvdW50KHBhZ2UpID09IDApLS1hbmQgcmV0dXJuIFNXQVBfU1VDQ0VTUy4gIE90aGVyd2lzZSwgaXQKK3dpbGwgcmV0dXJuIFNXQVBfQUdBSU4sIGNhdXNpbmcgdm1zY2FuIHRvIHJlY2lyY3VsYXRlIHRoaXMgcGFnZS4gIFdlIHRha2UKK2FkdmFudGFnZSBvZiB0aGUgY2x1c3RlciBzY2FuIGluIHRyeV90b191bm1hcF9jbHVzdGVyKCkgYXMgZm9sbG93czoKKworRm9yIGVhY2ggbm9uLWxpbmVhciB2bWEsIHRyeV90b191bm1hcF9jbHVzdGVyKCkgYXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgbW1hcAorc2VtYXBob3JlIG9mIHRoZSBhc3NvY2lhdGVkIG1tX3N0cnVjdCBmb3IgcmVhZCB3aXRob3V0IGJsb2NraW5nLiAgSWYgdGhpcworYXR0ZW1wdCBpcyBzdWNjZXNzZnVsIGFuZCB0aGUgdm1hIGlzIFZNX0xPQ0tFRCwgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSB3aWxsCityZXRhaW4gdGhlIG1tYXAgc2VtYXBob3JlIGZvciB0aGUgc2Nhbjsgb3RoZXJ3aXNlIGl0IGRyb3BzIGl0IGhlcmUuICBUaGVuLAorZm9yIGVhY2ggcGFnZSBpbiB0aGUgY2x1c3RlciwgaWYgd2UncmUgaG9sZGluZyB0aGUgbW1hcCBzZW1hcGhvcmUgZm9yIGEgbG9ja2VkCit2bWEsIHRyeV90b191bm1hcF9jbHVzdGVyKCkgY2FsbHMgbWxvY2tfdm1hX3BhZ2UoKSB0byBtbG9jayB0aGUgcGFnZS4gIFRoaXMKK2NhbGwgaXMgYSBuby1vcCBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGxvY2tlZCwgYnV0IHdpbGwgbWxvY2sgYW55IHBhZ2VzIGluCit0aGUgbm9uLWxpbmVhciBtYXBwaW5nIHRoYXQgaGFwcGVuIHRvIGJlIHVubG9ja2VkLiAgSWYgb25lIG9mIHRoZSBwYWdlcyBzbworbWxvY2tlZCBpcyB0aGUgcGFnZSBwYXNzZWQgaW4gdG8gdHJ5X3RvX3VubWFwKCksIHRyeV90b191bm1hcF9jbHVzdGVyKCkgd2lsbAorcmV0dXJuIFNXQVBfTUxPQ0ssIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IFNXQVBfQUdBSU4uICBUaGlzIHdpbGwgYWxsb3cgdm1zY2FuCit0byBjdWxsIHRoZSBwYWdlLCByYXRoZXIgdGhhbiByZWNpcmN1bGF0aW5nIGl0IG9uIHRoZSBpbmFjdGl2ZSBsaXN0LiAgQWdhaW4sCitpZiB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIGNhbm5vdCBhY3F1aXJlIHRoZSB2bWEncyBtbWFwIHNlbSwgaXQgcmV0dXJucworU1dBUF9BR0FJTiwgaW5kaWNhdGluZyB0aGF0IHRoZSBwYWdlIGlzIG1hcHBlZCBieSBhIFZNX0xPQ0tFRCB2bWEsIGJ1dAorY291bGRuJ3QgYmUgbWxvY2tlZC4KKworCitNbG9ja2VkIHBhZ2VzOiAgdHJ5X3RvX211bmxvY2soKSBSZXZlcnNlIE1hcCBTY2FuCisKK1RPRE8vRklYTUU6ICBhIGJldHRlciBuYW1lIG1pZ2h0IGJlIHBhZ2VfbWxvY2tlZCgpLS1hbmFsb2dvdXMgdG8gdGhlCitwYWdlX3JlZmVyZW5jZWQoKSByZXZlcnNlIG1hcCB3YWxrZXItLWVzcGVjaWFsbHkgaWYgd2UgY29udGludWUgdG8gY2FsbCB0aGlzCitmcm9tIHNocmlua19wYWdlX2xpc3QoKS4gIFNlZSByZWxhdGVkIFRPRE8vRklYTUUgYmVsb3cuCisKK1doZW4gbXVubG9ja192bWFfcGFnZSgpLS1zZWUgIk1sb2NrZWQgUGFnZXM6ICBtdW5sb2NrKCkvbXVubG9ja2FsbCgpIFN5c3RlbQorQ2FsbCBIYW5kbGluZyIgYWJvdmUtLXRyaWVzIHRvIG11bmxvY2sgYSBwYWdlLCBvciB3aGVuIHNocmlua19wYWdlX2xpc3QoKQorZW5jb3VudGVycyBhbiBhbm9ueW1vdXMgcGFnZSB0aGF0IGlzIG5vdCB5ZXQgaW4gdGhlIHN3YXAgY2FjaGUsIHRoZXkgbmVlZCB0bworZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBwYWdlIGlzIG1hcHBlZCBieSBhbnkgVk1fTE9DS0VEIHZtYSwgd2l0aG91dAorYWN0dWFsbHkgYXR0ZW1wdGluZyB0byB1bm1hcCBhbGwgcHRlcyBmcm9tIHRoZSBwYWdlLiAgRm9yIHRoaXMgcHVycG9zZSwgdGhlCit1bmV2aWN0YWJsZS9tbG9jayBpbmZyYXN0cnVjdHVyZSBpbnRyb2R1Y2VkIGEgdmFyaWFudCBvZiB0cnlfdG9fdW5tYXAoKSBjYWxsZWQKK3RyeV90b19tdW5sb2NrKCkuCisKK3RyeV90b19tdW5sb2NrKCkgY2FsbHMgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIHRyeV90b191bm1hcCgpIGZvciBhbm9ueW1vdXMgYW5kCittYXBwZWQgZmlsZSBwYWdlcyB3aXRoIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgc3BlY2lmaW5nIHVubG9jayB2ZXJzdXMgdW5tYXAKK3Byb2Nlc3NpbmcuICBBZ2FpbiwgdGhlc2UgZnVuY3Rpb25zIHdhbGsgdGhlIHJlc3BlY3RpdmUgcmV2ZXJzZSBtYXBzIGxvb2tpbmcKK2ZvciBWTV9MT0NLRUQgdm1hcy4gIFdoZW4gc3VjaCBhIHZtYSBpcyBmb3VuZCBmb3IgYW5vbnltb3VzIHBhZ2VzIGFuZCBmaWxlCitwYWdlcyBtYXBwZWQgaW4gbGluZWFyIFZNQXMsIGFzIGluIHRoZSB0cnlfdG9fdW5tYXAoKSBjYXNlLCB0aGUgZnVuY3Rpb25zCithdHRlbXB0IHRvIGFjcXVpcmUgdGhlIGFzc29jaWF0ZWQgbW1hcCBzZW1waG9yZSwgbWxvY2sgdGhlIHBhZ2UgdmlhCittbG9ja192bWFfcGFnZSgpIGFuZCByZXR1cm4gU1dBUF9NTE9DSy4gIFRoaXMgZWZmZWN0aXZlbHkgdW5kb2VzIHRoZQorcHJlLWNsZWFyaW5nIG9mIHRoZSBwYWdlJ3MgUEdfbWxvY2tlZCBkb25lIGJ5IG11bmxvY2tfdm1hX3BhZ2UoKSBhbmQgaW5mb3Jtcworc2hyaW5rX3BhZ2VfbGlzdCgpIHRoYXQgdGhlIGFub255bW91cyBwYWdlIHNob3VsZCBiZSBjdWxsZWQgcmF0aGVyIHRoYW4gYWRkZWQKK3RvIHRoZSBzd2FwIGNhY2hlIGluIHByZXBhcmF0aW9uIGZvciBhIHRyeV90b191bm1hcCgpIHRoYXQgd2lsbCBhbG1vc3QKK2NlcnRhaW5seSBmYWlsLgorCitJZiB0cnlfdG9fdW5tYXAoKSBpcyB1bmFibGUgdG8gYWNxdWlyZSBhIFZNX0xPQ0tFRCB2bWEncyBhc3NvY2lhdGVkIG1tYXAKK3NlbWFwaG9yZSwgaXQgd2lsbCByZXR1cm4gU1dBUF9BR0FJTi4gIFRoaXMgd2lsbCBhbGxvdyBzaHJpbmtfcGFnZV9saXN0KCkKK3RvIHJlY3ljbGUgdGhlIHBhZ2Ugb24gdGhlIGluYWN0aXZlIGxpc3QgYW5kIGhvcGUgdGhhdCBpdCBoYXMgYmV0dGVyIGx1Y2sKK3dpdGggdGhlIHBhZ2UgbmV4dCB0aW1lLgorCitGb3IgZmlsZSBwYWdlcyBtYXBwZWQgaW50byBub24tbGluZWFyIHZtYXMsIHRoZSB0cnlfdG9fbXVubG9jaygpIGxvZ2ljIHdvcmtzCitzbGlnaHRseSBkaWZmZXJlbnRseS4gIE9uIGVuY291bnRlcmluZyBhIFZNX0xPQ0tFRCBub24tbGluZWFyIHZtYSB0aGF0IG1pZ2h0CittYXAgdGhlIHBhZ2UsIHRyeV90b19tdW5sb2NrKCkgcmV0dXJucyBTV0FQX0FHQUlOIHdpdGhvdXQgYWN0dWFsbHkgbWxvY2tpbmcKK3RoZSBwYWdlLiAgbXVubG9ja192bWFfcGFnZSgpIHdpbGwganVzdCBsZWF2ZSB0aGUgcGFnZSB1bmxvY2tlZCBhbmQgbGV0Cit2bXNjYW4gZGVhbCB3aXRoIGl0LS10aGUgdXN1YWwgZmFsbGJhY2sgcG9zaXRpb24uCisKK05vdGUgdGhhdCB0cnlfdG9fbXVubG9jaygpJ3MgcmV2ZXJzZSBtYXAgd2FsayBtdXN0IHZpc2l0IGV2ZXJ5IHZtYSBpbiBhIHBhZ2VzJworcmV2ZXJzZSBtYXAgdG8gZGV0ZXJtaW5lIHRoYXQgYSBwYWdlIGlzIE5PVCBtYXBwZWQgaW50byBhbnkgVk1fTE9DS0VEIHZtYS4KK0hvd2V2ZXIsIHRoZSBzY2FuIGNhbiB0ZXJtaW5hdGUgd2hlbiBpdCBlbmNvdW50ZXJzIGEgVk1fTE9DS0VEIHZtYSBhbmQgY2FuCitzdWNjZXNzZnVsbHkgYWNxdWlyZSB0aGUgdm1hJ3MgbW1hcCBzZW1waG9yZSBmb3IgcmVhZCBhbmQgbWxvY2sgdGhlIHBhZ2UuCitBbHRob3VnaCB0cnlfdG9fbXVubG9jaygpIGNhbiBiZSBjYWxsZWQgbWFueSBbdmVyeSBtYW55IV0gdGltZXMgd2hlbgorbXVubG9jaygpaW5nIGEgbGFyZ2UgcmVnaW9uIG9yIHRlYXJpbmcgZG93biBhIGxhcmdlIGFkZHJlc3Mgc3BhY2UgdGhhdCBoYXMgYmVlbgorbWxvY2tlZCB2aWEgbWxvY2thbGwoKSwgb3ZlcmFsbCB0aGlzIGlzIGEgZmFpcmx5IHJhcmUgZXZlbnQuICBJbiBhZGRpdGlvbiwKK2FsdGhvdWdoIHNocmlua19wYWdlX2xpc3QoKSBjYWxscyB0cnlfdG9fbXVubG9jaygpIGZvciBldmVyeSBhbm9ueW1vdXMgcGFnZSB0aGF0CitpdCBoYW5kbGVzIHRoYXQgaXMgbm90IHlldCBpbiB0aGUgc3dhcCBjYWNoZSwgb24gYXZlcmFnZSBhbm9ueW1vdXMgcGFnZXMgd2lsbAoraGF2ZSB2ZXJ5IHNob3J0IHJldmVyc2UgbWFwIGxpc3RzLgorCitNbG9ja2VkIFBhZ2U6ICBQYWdlIFJlY2xhaW0gaW4gc2hyaW5rXypfbGlzdCgpCisKK3Nocmlua19hY3RpdmVfbGlzdCgpIGN1bGxzIGFueSBvYnZpb3VzbHkgdW5ldmljdGFibGUgcGFnZXMtLWkuZS4sCishcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCktLWRpdmVydGluZyB0aGVzZSB0byB0aGUgdW5ldmljdGFibGUgbHJ1CitsaXN0LiAgSG93ZXZlciwgc2hyaW5rX2FjdGl2ZV9saXN0KCkgb25seSBzZWVzIHVuZXZpY3RhYmxlIHBhZ2VzIHRoYXQKK21hZGUgaXQgb250byB0aGUgYWN0aXZlL2luYWN0aXZlIGxydSBsaXN0cy4gIE5vdGUgdGhhdCB0aGVzZSBwYWdlcyBkbyBub3QKK2hhdmUgUGFnZVVuZXZpY3RhYmxlIHNldC0tb3RoZXJ3aXNlLCB0aGV5IHdvdWxkIGJlIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0IGFuZAorc2hyaW5rX2FjdGl2ZV9saXN0IHdvdWxkIG5ldmVyIHNlZSB0aGVtLgorCitTb21lIGV4YW1wbGVzIG9mIHRoZXNlIHVuZXZpY3RhYmxlIHBhZ2VzIG9uIHRoZSBMUlUgbGlzdHMgYXJlOgorCisxKSByYW1mcyBwYWdlcyB0aGF0IGhhdmUgYmVlbiBwbGFjZWQgb24gdGhlIGxydSBsaXN0cyB3aGVuIGZpcnN0IGFsbG9jYXRlZC4KKworMikgU0hNX0xPQ0tlZCBzaGFyZWQgbWVtb3J5IHBhZ2VzLiAgc2htY3RsKFNITV9MT0NLKSBkb2VzIG5vdCBhdHRlbXB0IHRvCisgICBhbGxvY2F0ZSBvciBmYXVsdCBpbiB0aGUgcGFnZXMgaW4gdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uLiAgVGhpcyBoYXBwZW5zCisgICB3aGVuIGFuIGFwcGxpY2F0aW9uIGFjY2Vzc2VzIHRoZSBwYWdlIHRoZSBmaXJzdCB0aW1lIGFmdGVyIFNITV9MT0NLaW5nCisgICB0aGUgc2VnbWVudC4KKworMykgTWxvY2tlZCBwYWdlcyB0aGF0IGNvdWxkIG5vdCBiZSBpc29sYXRlZCBmcm9tIHRoZSBscnUgYW5kIG1vdmVkIHRvIHRoZQorICAgdW5ldmljdGFibGUgbGlzdCBpbiBtbG9ja192bWFfcGFnZSgpLgorCiszKSBQYWdlcyBtYXBwZWQgaW50byBtdWx0aXBsZSBWTV9MT0NLRUQgdm1hcywgYnV0IHRyeV90b19tdW5sb2NrKCkgY291bGRuJ3QKKyAgIGFjcXVpcmUgdGhlIHZtYSdzIG1tYXAgc2VtYXBob3JlIHRvIHRlc3QgdGhlIGZsYWdzIGFuZCBzZXQgUGFnZU1sb2NrZWQuCisgICBtdW5sb2NrX3ZtYV9wYWdlKCkgd2FzIGZvcmNlZCB0byBsZXQgdGhlIHBhZ2UgYmFjayBvbiB0byB0aGUgbm9ybWFsCisgICBMUlUgbGlzdCBmb3Igdm1zY2FuIHRvIGhhbmRsZS4KKworc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBhbHNvIGN1bGxzIGFueSB1bmV2aWN0YWJsZSBwYWdlcyB0aGF0IGl0IGZpbmRzCitvbiB0aGUgaW5hY3RpdmUgbGlzdHMsIGFnYWluIGRpdmVydGluZyB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSB6b25lJ3MgdW5ldmljdGFibGUKK2xydSBsaXN0LiAgc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBzaG91bGQgb25seSBzZWUgU0hNX0xPQ0tlZCBwYWdlcyB0aGF0IGJlY2FtZQorU0hNX0xPQ0tlZCBhZnRlciBzaHJpbmtfYWN0aXZlX2xpc3QoKSBoYWQgbW92ZWQgdGhlbSB0byB0aGUgaW5hY3RpdmUgbGlzdCwgb3IKK3BhZ2VzIG1hcHBlZCBpbnRvIFZNX0xPQ0tFRCB2bWFzIHRoYXQgbXVubG9ja192bWFfcGFnZSgpIGNvdWxkbid0IGlzb2xhdGUgZnJvbQordGhlIGxydSB0byByZWNoZWNrIHZpYSB0cnlfdG9fbXVubG9jaygpLiAgc2hyaW5rX2luYWN0aXZlX2xpc3QoKSB3b24ndCBub3RpY2UKK3RoZSBsYXR0ZXIsIGJ1dCB3aWxsIHBhc3Mgb24gdG8gc2hyaW5rX3BhZ2VfbGlzdCgpLgorCitzaHJpbmtfcGFnZV9saXN0KCkgYWdhaW4gY3VsbHMgb2J2aW91c2x5IHVuZXZpY3RhYmxlIHBhZ2VzIHRoYXQgaXQgY291bGQKK2VuY291bnRlciBmb3Igc2ltaWxhciByZWFzb24gdG8gc2hyaW5rX2luYWN0aXZlX2xpc3QoKS4gIEFzIGFscmVhZHkgZGlzY3Vzc2VkLAorc2hyaW5rX3BhZ2VfbGlzdCgpIHByb2FjdGl2ZWx5IGxvb2tzIGZvciBhbm9ueW1vdXMgcGFnZXMgdGhhdCBzaG91bGQgaGF2ZQorUEdfbWxvY2tlZCBzZXQgYnV0IGRvbid0LS10aGVzZSB3b3VsZCBub3QgYmUgZGV0ZWN0ZWQgYnkgcGFnZV9ldmljdGFibGUoKS0tdG8KK2F2b2lkIGFkZGluZyB0aGVtIHRvIHRoZSBzd2FwIGNhY2hlIHVubmVjZXNzYXJpbHkuICBGaWxlIHBhZ2VzIG1hcHBlZCBpbnRvCitWTV9MT0NLRUQgdm1hcyBidXQgd2l0aG91dCBQR19tbG9ja2VkIHNldCB3aWxsIG1ha2UgaXQgYWxsIHRoZSB3YXkgdG8KK3RyeV90b191bm1hcCgpLiAgc2hyaW5rX3BhZ2VfbGlzdCgpIHdpbGwgZGl2ZXJ0IHRoZW0gdG8gdGhlIHVuZXZpY3RhYmxlIGxpc3Qgd2hlbgordHJ5X3RvX3VubWFwKCkgcmV0dXJucyBTV0FQX01MT0NLLCBhcyBkaXNjdXNzZWQgYWJvdmUuCisKK1RPRE8vRklYTUU6ICBJZiB3ZSBjYW4gZW5oYW5jZSB0aGUgc3dhcCBjYWNoZSB0byByZWxpYWJseSByZW1vdmUgZW50cmllcword2l0aCBwYWdlX2NvdW50KHBhZ2UpID4gMiwgYXMgbG9uZyBhcyBhbGwgcHRlcyBhcmUgbWFwcGVkIHRvIHRoZSBwYWdlIGFuZAorbm90IHRoZSBzd2FwIGVudHJ5LCB3ZSBjYW4gcHJvYmFibHkgcmVtb3ZlIHRoZSBjYWxsIHRvIHRyeV90b19tdW5sb2NrKCkgaW4KK3Nocmlua19wYWdlX2xpc3QoKSBhbmQganVzdCByZW1vdmUgdGhlIHBhZ2UgZnJvbSB0aGUgc3dhcCBjYWNoZSB3aGVuCit0cnlfdG9fdW5tYXAoKSByZXR1cm5zIFNXQVBfTUxPQ0suICAgQ3VycmVudGx5LCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZSgpCitkb2Vzbid0IHNlZW0gdG8gYWxsb3cgdGhhdC4KKworCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyNzAyYjAuLjE2MjAyYzggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0zNzgsOCArMzc4LDkgQEAKIFM6CVN1cHBvcnRlZAogCiBBTUQgTUlDUk9DT0RFIFVQREFURSBTVVBQT1JUCi1QOiAgICAgIFBldGVyIE9ydWJhCi1NOiAgICAgIHBldGVyLm9ydWJhQGFtZC5jb20KK1A6ICAgICAgQW5kcmVhcyBIZXJybWFubgorTTogICAgICBhbmRlYXMuaGVycm1hbm4zQGFtZC5jb20KK0w6ICAgICAgYW1kNjQtbWljcm9jb2RlQGFtZDY0Lm9yZwogUzogICAgICBTdXBwb3J0ZWQKIAogQU1TIChBcHBsZSBNb3Rpb24gU2Vuc29yKSBEUklWRVIKQEAgLTEwNTMsNiArMTA1NCwxMiBAQAogVzoJaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3Bvd2VyL2NlbGwvCiBTOglTdXBwb3J0ZWQKIAorQ0VSVElGSUVEIFdJUkVMRVNTIFVTQiAoV1VTQikgU1VCU1lTVEVNOgorUDoJRGF2aWQgVnJhYmVsCitNOglkYXZpZC52cmFiZWxAY3NyLmNvbQorTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCisKIENGQUcxMjg2NEIgTENEIERSSVZFUgogUDoJTWlndWVsIE9qZWRhIFNhbmRvbmlzCiBNOgltaWd1ZWwub2plZGEuc2FuZG9uaXNAZ21haWwuY29tCkBAIC0xMTk4LDcgKzEyMDUsNyBAQAogCiBDUFUgRlJFUVVFTkNZIERSSVZFUlMKIFA6CURhdmUgSm9uZXMKLU06CWRhdmVqQGNvZGVtb25rZXkub3JnLnVrCitNOglkYXZlakByZWRoYXQuY29tCiBMOgljcHVmcmVxQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5jb2RlbW9ua2V5Lm9yZy51ay9wcm9qZWN0cy9jcHVmcmVxLwogVDoJZ2l0IGtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVqL2NwdWZyZXEuZ2l0CkBAIC0xNDI3LDggKzE0MzQsOCBAQAogUzoJTWFpbnRhaW5lZAogCiBET0NLSU5HIFNUQVRJT04gRFJJVkVSCi1QOglLcmlzdGVuIENhcmxzb24gQWNjYXJkaQotTToJa3Jpc3Rlbi5jLmFjY2FyZGlAaW50ZWwuY29tCitQOglTaGFvaHVhIExpCitNOglzaGFvaHVhLmxpQGludGVsLmNvbQogTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogCkBAIC0yMTAzLDYgKzIxMTAsMTIgQEAKIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCiBTOglPcnBoYW4KIAorSURMRS1JNzMwMAorUDoJQW5keSBIZW5yb2lkCitNOglhbmRyZXcuZC5oZW5yb2lkQGludGVsLmNvbQorTDoJbGludXgtcG1AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKK1M6CVN1cHBvcnRlZAorCiBJRUVFIDEzOTQgU1VCU1lTVEVNIChkcml2ZXJzL2llZWUxMzk0KQogUDoJQmVuIENvbGxpbnMKIE06CWJlbi5jb2xsaW5zQHVidW50dS5jb20KQEAgLTIxNzYsNiArMjE4OSwxMyBAQAogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiAKK0lOVEVMIElPTU1VIChWVC1kKQorUDoJRGF2aWQgV29vZGhvdXNlCitNOglkd213MkBpbmZyYWRlYWQub3JnCitMOglpb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZworVDoJZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvaW9tbXUtMi42LmdpdAorUzoJU3VwcG9ydGVkCisKIElOVEVMIElPUC1BRE1BIERNQSBEUklWRVIKIFA6CURhbiBXaWxsaWFtcwogTToJZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tCkBAIC0yOTI4LDkgKzI5NDgsOSBAQAogCiBORVRFRkZFQ1QgSVdBUlAgUk5JQyBEUklWRVIgKElXX05FUykKIFA6CUZhaXNhbCBMYXRpZgotTToJZmxhdGlmQG5ldGVmZmVjdC5jb20KK006CWZhaXNhbC5sYXRpZkBpbnRlbC5jb20KIFA6CUNoaWVuIFR1bmcKLU06CWN0dW5nQG5ldGVmZmVjdC5jb20KK006CWNoaWVuLnRpbi50dW5nQGludGVsLmNvbQogTDoJZ2VuZXJhbEBsaXN0cy5vcGVuZmFicmljcy5vcmcKIFc6CWh0dHA6Ly93d3cubmV0ZWZmZWN0LmNvbQogUzoJU3VwcG9ydGVkCkBAIC0zMTczLDYgKzMxOTMsMTEgQEAKIEw6CWkyY0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogCitQQU5BU09OSUMgTEFQVE9QIEFDUEkgRVhUUkFTIERSSVZFUgorUDoJSGFyYWxkIFdlbHRlCitNOglsYWZvcmdlQGdudW1vbmtzLm9yZworUzoJTWFpbnRhaW5lZAorCiBQQU5BU09OSUMgTU4xMDMwMC9BTTMzIFBPUlQKIFA6CURhdmlkIEhvd2VsbHMKIE06CWRob3dlbGxzQHJlZGhhdC5jb20KQEAgLTMyNDQsMTEgKzMyNjksNiBAQAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qYmFybmVzL3BjaS0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIAotUENJIEhPVFBMVUcgQ09SRQotUDoJS3Jpc3RlbiBDYXJsc29uIEFjY2FyZGkKLU06CWtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbQotUzoJU3VwcG9ydGVkCi0KIFBDSUUgSE9UUExVRyBEUklWRVIKIFA6CUtyaXN0ZW4gQ2FybHNvbiBBY2NhcmRpCiBNOglrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20KQEAgLTM5MzcsNyArMzk1Nyw3IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLVNUQUJMRSBCUkFOQ0g6CitTVEFCTEUgQlJBTkNICiBQOglHcmVnIEtyb2FoLUhhcnRtYW4KIE06CWdyZWdAa3JvYWguY29tCiBQOglDaHJpcyBXcmlnaHQKQEAgLTM5NDUsNiArMzk2NSwxMyBAQAogTDoJc3RhYmxlQGtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorU1RBR0lORyBTVUJTWVNURU0KK1A6CUdyZWcgS3JvYWgtSGFydG1hbgorTToJZ3JlZ2toQHN1c2UuZGUKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1Q6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZ3JlZ2toL2dyZWdraC0yLjYvCitTOglNYWludGFpbmVkCisKIFNUQVJGSVJFL0RVUkFMQU4gTkVUV09SSyBEUklWRVIKIFA6CUlvbiBCYWR1bGVzY3UKIE06CWlvbnV0QGNzLmNvbHVtYmlhLmVkdQpAQCAtNDE4NCw2ICs0MjExLDEyIEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL3NwYXJjLTIuNi5naXQKIFM6CU1haW50YWluZWQKIAorVUxUUkEtV0lERUJBTkQgKFVXQikgU1VCU1lTVEVNOgorUDoJRGF2aWQgVnJhYmVsCitNOglkYXZpZC52cmFiZWxAY3NyLmNvbQorTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCisKIFVOSUZPUk0gQ0RST00gRFJJVkVSCiBQOglKZW5zIEF4Ym9lCiBNOglheGJvZUBrZXJuZWwuZGsKQEAgLTQ2MDksNiArNDY0MiwxMSBAQAogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorV0lNRURJQSBMTEMgUFJPVE9DT0wgKFdMUCkgU1VCU1lTVEVNCitQOglEYXZpZCBWcmFiZWwKK006CWRhdmlkLnZyYWJlbEBjc3IuY29tCitTOglNYWludGFpbmVkCisKIFdJU1RST04gTEFQVE9QIEJVVFRPTiBEUklWRVIKIFA6CU1pbG9zbGF2IFRybWFjCiBNOgltaXRyQHZvbG55LmN6CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDE2ZTNmYmIuLjhlNTQwNTEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDggKzEsOCBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2Ci1TVUJMRVZFTCA9IDI3Ci1FWFRSQVZFUlNJT04gPQotTkFNRSA9IFJvdGFyeSBXb21iYXQKK1NVQkxFVkVMID0gMjgKK0VYVFJBVkVSU0lPTiA9IC1yYzEKK05BTUUgPSBLaWxsZXIgQmF0IG9mIERvb20KIAogIyAqRE9DVU1FTlRBVElPTioKICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgpAQCAtNDM3LDcgKzQzNyw3IEBACiAjIEtCVUlMRF9ERUZDT05GSUcgbWF5IHBvaW50IG91dCBhbiBhbHRlcm5hdGl2ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KICMgdXNlZCBmb3IgJ21ha2UgZGVmY29uZmlnJwogaW5jbHVkZSAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9NYWtlZmlsZQotZXhwb3J0IEtCVUlMRF9ERUZDT05GSUcKK2V4cG9ydCBLQlVJTERfREVGQ09ORklHIEtCVUlMRF9LQ09ORklHCiAKIGNvbmZpZyAlY29uZmlnOiBzY3JpcHRzX2Jhc2ljIG91dHB1dG1ha2VmaWxlIEZPUkNFCiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvbGludXggaW5jbHVkZS9jb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCBhMGY2NDJiLi42MTEwMTk3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC03MCw2ICs3MCw3IEBACiAJZGVmYXVsdCB5CiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCiAKIG1lbnUgIlN5c3RlbSBzZXR1cCIKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAxNWZkYTQzLi5kMDY5NTI2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC03NCwxMiArNzQsMTQgQEAKICNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTcKICNkZWZpbmUgVElGX01FTURJRQkJOAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogLyogV29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybi4gICovCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9ORUVEX1JFU0NIRUQpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYwppbmRleCAwNGRjYzVlLi45Y2Q4ZGNhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKQEAgLTY1NSw3ICs2NTUsNyBAQAogCiAJY2FzZSAweDcxOgkJCQkJLyogUlRDX1BPUlQoMSkgKi8KIAkJcnRjX2FjY2Vzcy5pbmRleCA9IGluZGV4OwotCQlydGNfYWNjZXNzLmRhdGEgPSBCQ0RfVE9fQklOKGIpOworCQlydGNfYWNjZXNzLmRhdGEgPSBiY2QyYmluKGIpOwogCQlydGNfYWNjZXNzLmZ1bmN0aW9uID0gMHg0OCArICF3cml0ZTsJLyogR0VUL1BVVF9UT1kgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTY2OCw3ICs2NjgsNyBAQAogI2Vsc2UKIAkJX19tYXJ2ZWxfYWNjZXNzX3J0YygmcnRjX2FjY2Vzcyk7CiAjZW5kaWYKLQkJcmV0ID0gQklOX1RPX0JDRChydGNfYWNjZXNzLmRhdGEpOworCQlyZXQgPSBiaW4yYmNkKHJ0Y19hY2Nlc3MuZGF0YSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwppbmRleCA4NTA5ZGFkLi4xOGEzZWExIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCkBAIC0xNjUsMTQgKzE2NSwxMSBAQAogCWJ1Zi5lcnJvciA9IDA7CiAKIAllcnJvciA9IHZmc19yZWFkZGlyKGZpbGUsIG9zZl9maWxsZGlyLCAmYnVmKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dF9wdXRmOwotCi0JZXJyb3IgPSBidWYuZXJyb3I7CisJaWYgKGVycm9yID49IDApCisJCWVycm9yID0gYnVmLmVycm9yOwogCWlmIChjb3VudCAhPSBidWYuY291bnQpCiAJCWVycm9yID0gY291bnQgLSBidWYuY291bnQ7CiAKLSBvdXRfcHV0ZjoKIAlmcHV0KGZpbGUpOwogIG91dDoKIAlyZXR1cm4gZXJyb3I7CkBAIC05ODYsMTAgKzk4MywxMiBAQAogb3NmX3NlbGVjdChpbnQgbiwgZmRfc2V0IF9fdXNlciAqaW5wLCBmZF9zZXQgX191c2VyICpvdXRwLCBmZF9zZXQgX191c2VyICpleHAsCiAJICAgc3RydWN0IHRpbWV2YWwzMiBfX3VzZXIgKnR2cCkKIHsKLQlzNjQgdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZSwgKnRvID0gTlVMTDsKIAlpZiAodHZwKSB7CiAJCXRpbWVfdCBzZWMsIHVzZWM7CiAKKwkJdG8gPSAmZW5kX3RpbWU7CisKIAkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHR2cCwgc2l6ZW9mKCp0dnApKQogCQkgICAgfHwgX19nZXRfdXNlcihzZWMsICZ0dnAtPnR2X3NlYykKIAkJICAgIHx8IF9fZ2V0X3VzZXIodXNlYywgJnR2cC0+dHZfdXNlYykpIHsKQEAgLTk5OSwxNCArOTk4LDEzIEBACiAJCWlmIChzZWMgPCAwIHx8IHVzZWMgPCAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBzZWMgPCBNQVhfU0VMRUNUX1NFQ09ORFMpIHsKLQkJCXRpbWVvdXQgPSAodXNlYyArIDEwMDAwMDAvSFogLSAxKSAvICgxMDAwMDAwL0haKTsKLQkJCXRpbWVvdXQgKz0gc2VjICogKHVuc2lnbmVkIGxvbmcpIEhaOwotCQl9CisJCWlmIChwb2xsX3NlbGVjdF9zZXRfdGltZW91dCh0bywgc2VjLCB1c2VjICogTlNFQ19QRVJfVVNFQykpCisJCQlyZXR1cm4gLUVJTlZBTDsJCQorCiAJfQogCiAJLyogT1NGIGRvZXMgbm90IGNvcHkgYmFjayB0aGUgcmVtYWluaW5nIHRpbWUuICAqLwotCXJldHVybiBjb3JlX3N5c19zZWxlY3QobiwgaW5wLCBvdXRwLCBleHAsICZ0aW1lb3V0KTsKKwlyZXR1cm4gY29yZV9zeXNfc2VsZWN0KG4sIGlucCwgb3V0cCwgZXhwLCB0byk7CiB9CiAKIHN0cnVjdCBydXNhZ2UzMiB7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCmluZGV4IDk5YTdmMTkuLmE0NTU1ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKIHN0YXRpYyBpcnFfc3dpenpsZV90ICpzYWJsZV9seW54X2lycV9zd2l6emxlOwogCi1zdGF0aWMgdm9pZCBzYWJsZV9seW54X2luaXRfaXJxKGludCBucl9pcnFzKTsKK3N0YXRpYyB2b2lkIHNhYmxlX2x5bnhfaW5pdF9pcnEoaW50IG5yX29mX2lycXMpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfQUxQSEFfU0FCTEUpCiAKQEAgLTUzMCwxMSArNTMwLDExIEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdAotc2FibGVfbHlueF9pbml0X2lycShpbnQgbnJfaXJxcykKK3NhYmxlX2x5bnhfaW5pdF9pcnEoaW50IG5yX29mX2lycXMpCiB7CiAJbG9uZyBpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX2lycXM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBucl9vZl9pcnFzOyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwogCQlpcnFfZGVzY1tpXS5jaGlwID0gJnNhYmxlX2x5bnhfaXJxX3R5cGU7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCmluZGV4IDc1NDgwY2EuLmU2YTIzMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKQEAgLTM0NiwxMiArMzQ2LDEyIEBACiAJeWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaG91cik7Ci0JCUJDRF9UT19CSU4oZGF5KTsKLQkJQkNEX1RPX0JJTihtb24pOwotCQlCQ0RfVE9fQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAl9CiAKIAkvKiBQQy1saWtlIGlzIHN0YW5kYXJkOyB1c2VkIGZvciB5ZWFyID49IDcwICovCkBAIC01MjUsNyArNTI1LDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtNTQzLDggKzU0Myw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvYWxwaGEvb3Byb2ZpbGUvY29tbW9uLmMKaW5kZXggN2MzZDVlYy4uYmQ4YWM1MyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9vcHJvZmlsZS9jb21tb24uYworKysgYi9hcmNoL2FscGhhL29wcm9maWxlL2NvbW1vbi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIH0KIAogc3RhdGljIGludAotb3BfYXhwX2NyZWF0ZV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGRlbnRyeSAqIHJvb3QpCitvcF9heHBfY3JlYXRlX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QpCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDQ4NTNmOWQuLjUwMjFkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMTkyLDYgKzE5Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSBUeXBlIgogCiBjaG9pY2UKQEAgLTM1NCw3ICszNTYsNyBAQAogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKLQlzZWxlY3QgWk9ORV9ETUEgaWYgUENJCisJc2VsZWN0IERNQUJPVU5DRSBpZiBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDRYWCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KIApAQCAtNTM4LDE2ICs1NDAsMTUgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUSSdzIE9NQVAgcGxhdGZvcm0gKE9NQVAxIGFuZCBPTUFQMikuCiAKLWNvbmZpZyBBUkNIX01TTTdYMDBBCi0JYm9vbCAiUXVhbGNvbW0gTVNNN1gwMEEiCitjb25maWcgQVJDSF9NU00KKwlib29sICJRdWFsY29tbSBNU00iCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJaGVscAotCSAgU3VwcG9ydCBmb3IgUXVhbGNvbW0gTVNNN1gwMEEgYmFzZWQgc3lzdGVtcy4gIFRoaXMgcnVucyBvbiB0aGUgQVJNMTEKLQkgIGFwcHMgcHJvY2Vzc29yIG9mIHRoZSBNU003WDAwQSBhbmQgZGVwZW5kcyBvbiBhIHNoYXJlZCBtZW1vcnkKKwkgIFN1cHBvcnQgZm9yIFF1YWxjb21tIE1TTTdLIGJhc2VkIHN5c3RlbXMuICBUaGlzIHJ1bnMgb24gdGhlIEFSTTExCisJICBhcHBzIHByb2Nlc3NvciBvZiB0aGUgTVNNN0sgYW5kIGRlcGVuZHMgb24gYSBzaGFyZWQgbWVtb3J5CiAJICBpbnRlcmZhY2UgdG8gdGhlIEFSTTkgbW9kZW0gcHJvY2Vzc29yIHdoaWNoIHJ1bnMgdGhlIGJhc2ViYW5kIHN0YWNrCiAJICBhbmQgY29udHJvbHMgc29tZSB2aXRhbCBzdWJzeXN0ZW1zIChjbG9jayBhbmQgcG93ZXIgY29udHJvbCwgZXRjKS4KLQkgIDxodHRwOi8vd3d3LmNkbWF0ZWNoLmNvbS9wcm9kdWN0cy9tc203MjAwX2NoaXBzZXRfc29sdXRpb24uanNwPgogCiBlbmRjaG9pY2UKIApAQCAtMTI1NCw2ICsxMjU1LDggQEAKIAogc291cmNlICJkcml2ZXJzL3VzYi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvdXdiL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tbWMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lbXN0aWNrL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDdkNTEyMTIuLmJkNmUyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0xNDEsNyArMTQxLDcgQEAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgzKQkgICA6PSBteDMKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT1JJT041WCkJICAgOj0gb3Jpb241eAogICAgIHBsYXQtJChDT05GSUdfUExBVF9PUklPTikJICAgOj0gb3Jpb24KLSBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVNNN1gwMEEpICAgOj0gbXNtCisgbWFjaGluZS0kKENPTkZJR19BUkNIX01TTSkJICAgOj0gbXNtCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0xPS0kpICAgICAgIDo9IGxva2kKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVY3OFhYMCkgICAgOj0gbXY3OHh4MAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vS2NvbmZpZyBiL2FyY2gvYXJtL2NvbW1vbi9LY29uZmlnCmluZGV4IDJlMzJhY2MuLjg2YjVlNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9LY29uZmlnCkBAIC0xMywxMCArMTMsMTAgQEAKIGNvbmZpZyBTQTExMTEKIAlib29sCiAJc2VsZWN0IERNQUJPVU5DRSBpZiAhQVJDSF9QWEEKLQlzZWxlY3QgWk9ORV9ETUEgaWYgIUFSQ0hfUFhBCiAKIGNvbmZpZyBETUFCT1VOQ0UKIAlib29sCisJc2VsZWN0IFpPTkVfRE1BCiAKIGNvbmZpZyBUSU1FUl9BQ09STgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwppbmRleCBmYjg2ZjI0Li40N2NjZWM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCkBAIC01ODEsNiArNTgxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCisjaWZkZWYgQ09ORklHX0RNQUJPVU5DRQogCS8qCiAJICogSWYgdGhlIHBhcmVudCBkZXZpY2UgaGFzIGEgRE1BIG1hc2sgYXNzb2NpYXRlZCB3aXRoIGl0LAogCSAqIHByb3BhZ2F0ZSBpdCBkb3duIHRvIHRoZSBjaGlsZHJlbi4KQEAgLTU5OCw2ICs1OTksNyBAQAogCQkJfQogCQl9CiAJfQorI2VuZGlmCiAKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtOTM3LDcgKzkzOSw3IEBACiAjZGVmaW5lIHNhMTExMV9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IHNhMTExMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2ExMTExX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAJaW50IGlycTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKaW5kZXggOWI4NzQ4YS4uZjNhZjBiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKQEAgLTEsNzEgKzEsMTExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIE1vbiBOb3YgMjggMTA6MzA6MDkgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIE1vbiBPY3QgMjAgMTA6MTI6MjMgMjAwOAogIwogQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC03OSw1MCArMTE5LDk3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBTeXN0ZW0gVHlwZQogIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CiAKICMKLSMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwogIworIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX1NIQVJQU0w9eQotQ09ORklHX1BYQV9TSEFSUFNMXzI1eD15Ci0jIENPTkZJR19QWEFfU0hBUlBTTF8yN3ggaXMgbm90IHNldAogQ09ORklHX01BQ0hfUE9PRExFPXkKIENPTkZJR19NQUNIX0NPUkdJPXkKIENPTkZJR19NQUNIX1NIRVBIRVJEPXkKIENPTkZJR19NQUNIX0hVU0tZPXkKKyMgQ09ORklHX01BQ0hfQUtJVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TUElUWiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0JPUlpPSSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9UT1NBPXkKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAogQ09ORklHX1BYQTI1eD15CiBDT05GSUdfUFhBX1NIQVJQX0M3eHg9eQogQ09ORklHX1BYQV9TU1A9eQorIyBDT05GSUdfUFhBX1BXTSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NBX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19QWEFfSEFWRV9CT0FSRF9JUlFTPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTEzMSwyNSArMjE4LDMwIEBACiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKIAogIwogIyBQcm9jZXNzb3IgRmVhdHVyZXMKICMKIENPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTU1YVCBpcyBub3Qgc2V0CiBDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfU0hBUlBfTE9DT01PPXkKIENPTkZJR19TSEFSUF9QQVJBTT15CitDT05GSUdfU0hBUlBTTF9QTT15CiBDT05GSUdfU0hBUlBfU0NPT1A9eQogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQogIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQpAQCAtMTY0LDE2ICsyNTYsMzIgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19QUkVFTVBUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIAogIwpAQCAtMTgzLDYgKzI5MSwxMyBAQAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDBuOCBjb25zb2xlPXR0eTEgbm9pbml0cmQgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyICAgZGVidWciCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogCiAjCiAjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgpAQCAtMTk5LDYgKzMxNCw3IEBACiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KICMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CkBAIC0yMDcsMTIgKzMyMywxMiBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotQ09ORklHX0FQTT15Ci0KLSMKLSMgTmV0d29ya2luZwotIworIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMjIzLDYgKzMzOSwxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjM2LDE0MCArMzU2LDEzMSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLSMgQ09ORklHX0lQX05GX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiAjIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9UT1MgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUkFXPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCi1DT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogIyBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9GSUxURVI9bQogIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfUkFXPW0KLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM3NywyMSArNDg4LDE2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCiAKICMKQEAgLTQyMSwyNyArNTI3LDE3IEBACiAjCiAjIERvbmdsZSBzdXBwb3J0CiAjCi0KLSMKLSMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAotIworIyBDT05GSUdfS0lOR1NVTl9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1NEQVpaTEVfRE9OR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTOTU5X0RPTkdMRSBpcyBub3Qgc2V0CiAKICMKICMgRklSIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfTlNDX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUNfSVJDQ19GSVIgaXMgbm90IHNldAotIyBDT05GSUdfQUxJX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfRklSIGlzIG5vdCBzZXQKIENPTkZJR19QWEFfRklDUD1tCisjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC00NTcsOSArNTUzLDEyIEBACiAjCiBDT05GSUdfQlRfSENJVVNCPW0KICMgQ09ORklHX0JUX0hDSVVTQl9TQ08gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lVQVJUPW0KIENPTkZJR19CVF9IQ0lVQVJUX0g0PXkKIENPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJQkNNMjAzWD1tCiBDT05GSUdfQlRfSENJQlBBMTBYPW0KIENPTkZJR19CVF9IQ0lCRlVTQj1tCkBAIC00NjgsMTEgKzU2NywyMCBAQAogQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIENPTkZJR19CVF9IQ0lCVFVBUlQ9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMT1tCiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVAgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVAgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ4MSwxOSArNTg5LDE2IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldApAQCAtNTAxLDE2ICs2MDYsMjAgQEAKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTUzNSwxNiArNjQ0LDE4IEBACiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1NIQVJQX1NMPXkKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUzLDc4ICs2NjQsNjYgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9JRFM9eQogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfU0hBUlBTTD15CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNTPXkKICMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC02NDQsMTIxICs3NDMsNzYgQEAKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIworIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIFNDU0kgYWRhcHRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ01DSUFfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTklOSkFfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfUUxPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TWU01M0M1MDAgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPW0KKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBXaXJlbGVzcyBMQU4KICMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotQ09ORklHX05FVF9SQURJTz15Ci0KLSMKLSMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKLSMKLSMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9XQVZFTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAotIwotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAotIwotQ09ORklHX0hFUk1FUz1tCi0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgODAyLjExYiBQY21jaWEvQ2FyZGJ1cyBjYXJkcyBzdXBwb3J0Ci0jCi1DT05GSUdfUENNQ0lBX0hFUk1FUz1tCi1DT05GSUdfUENNQ0lBX1NQRUNUUlVNPW0KLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci1DT05GSUdfSE9TVEFQPW0KLUNPTkZJR19IT1NUQVBfRklSTVdBUkU9eQotQ09ORklHX0hPU1RBUF9DUz1tCi1DT05GSUdfTkVUX1dJUkVMRVNTPXkKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCisjIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQogQ09ORklHX05FVF9QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CkBAIC03NjgsMTAgKzgyMiw2IEBACiAjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CkBAIC03ODIsMzAgKzgzMiwyOSBAQAogQ09ORklHX1BQUF9CU0RDT01QPW0KICMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FQTVBPV0VSIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwpAQCAtODE0LDE5ICs4NjMsMzkgQEAKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MT0NPTU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9DT1JHST15CiBDT05GSUdfS0VZQk9BUkRfU1BJVFo9eQorQ09ORklHX0tFWUJPQVJEX1RPU0E9eQorIyBDT05GSUdfS0VZQk9BUkRfVE9TQV9VU0VfRVhUX0tFWUNPREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQ09SR0k9eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ09SR0kgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQogCiAjCkBAIC04MzksOCArOTA4LDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC04NDksNiArOTIxLDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD1tCiBDT05GSUdfU0VSSUFMXzgyNTBfQ1M9bQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtODYwLDk3ICs5MzMsMTMwIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotCi0jCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19QWEE9eQogIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQogCiAjCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX1NQSV9QWEEyWFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldApAQCAtOTYwLDcwICsxMDY2LDE5MyBAQAogIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX01BWDExMTE9eQogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fVjRMMl9DT01NT049bQorQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDE9eQorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19NRURJQT1tCiAKICMKLSMgVmlkZW8gRm9yIExpbnV4CisjIE11bHRpbWVkaWEgZHJpdmVycwogIwotCi0jCi0jIFZpZGVvIEFkYXB0ZXJzCi0jCisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPW0KKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR1NQQ0E9bQorIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19QVlJVU0IyIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VU0JWSVNJT04gaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1VTQlZJREVPPW0KK0NPTkZJR19VU0JfVklDQU09bQorQ09ORklHX1VTQl9JQk1DQU09bQorQ09ORklHX1VTQl9LT05JQ0FXQz1tCisjIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQVVESU9fREVDT0RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19ERUNPREVSIGlzIG5vdCBzZXQKLQotIwotIyBSYWRpbyBBZGFwdGVycwotIwotIyBDT05GSUdfUkFESU9fTUFFU1RSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT1Y1MTE9bQorQ09ORklHX1VTQl9TRTQwMT1tCitDT05GSUdfVVNCX1NOOUMxMDI9bQorQ09ORklHX1VTQl9TVFY2ODA9bQorIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CitDT05GSUdfVVNCX0RTQlI9bQorIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9XMTAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0xDRF9DT1JHST15CisjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MT0NPTU89eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC0xMDMxLDYgKzEyNjAsNyBAQAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19GT05UUz15CiBDT05GSUdfRk9OVF84eDg9eQpAQCAtMTA0Myw5MyArMTI3Myw5NSBAQAogIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9ERVZJQ0U9eQotIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NPUkdJPXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiBDT05GSUdfU09VTkRfUFJJTUU9eQotIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfT1NTPXkKLSMgQ09ORklHX1NPVU5EX1RSQUNFSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9ETUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FEMTgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9TR0FMQVhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FETElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FDSV9NSVhFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9DUzQyMzIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU1NDQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0dVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9WTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NUFU0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFEMTYgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9TQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BV0UzMl9TWU5USCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9XQVZFRlJPTlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFVSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9ZTTM4MTIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfT1BMM1NBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9PUEwzU0EyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1VBUlQ2ODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FFRFNQMTYgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVFZNSVhFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgVVNCIElucHV0IERldmljZXMKICMKK0NPTkZJR19VU0JfSElEPW0KKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfS0JEPW0KK0NPTkZJR19VU0JfTU9VU0U9bQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPW0KK0NPTkZJR19ISURfQVBQTEU9bQorQ09ORklHX0hJRF9CRUxLSU49bQorQ09ORklHX0hJRF9CUklHSFQ9bQorQ09ORklHX0hJRF9DSEVSUlk9bQorQ09ORklHX0hJRF9DSElDT05ZPW0KK0NPTkZJR19ISURfQ1lQUkVTUz1tCitDT05GSUdfSElEX0RFTEw9bQorQ09ORklHX0hJRF9FWktFWT1tCitDT05GSUdfSElEX0dZUkFUSU9OPW0KK0NPTkZJR19ISURfTE9HSVRFQ0g9bQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9bQorQ09ORklHX0hJRF9NT05URVJFWT1tCitDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9bQorQ09ORklHX0hJRF9TQU1TVU5HPW0KK0NPTkZJR19ISURfU09OWT1tCitDT05GSUdfSElEX1NVTlBMVVM9bQorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0w4MTFfSENEPW0KIENPTkZJR19VU0JfU0w4MTFfQ1M9bQorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKLSMgQ09ORklHX09CU09MRVRFX09TU19VU0JfRFJJVkVSIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTExNDgsMzMgKzEzODAsMTEgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi1DT05GSUdfVVNCX0hJRElOUFVUPXkKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotQ09ORklHX1VTQl9LQkQ9bQotQ09ORklHX1VTQl9NT1VTRT1tCi1DT05GSUdfVVNCX0FJUFRFSz1tCi1DT05GSUdfVVNCX1dBQ09NPW0KLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9LQlRBQj1tCi1DT05GSUdfVVNCX1BPV0VSTUFURT1tCi1DT05GSUdfVVNCX01UT1VDSD1tCi0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotQ09ORklHX1VTQl9FR0FMQVg9bQotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotQ09ORklHX1VTQl9YUEFEPW0KLUNPTkZJR19VU0JfQVRJX1JFTU9URT1tCi0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC0xMTgzLDU2ICsxMzkzLDIyIEBACiBDT05GSUdfVVNCX01JQ1JPVEVLPW0KIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi1DT05GSUdfVVNCX0RBQlVTQj1tCi1DT05GSUdfVVNCX1ZJQ0FNPW0KLUNPTkZJR19VU0JfRFNCUj1tCi1DT05GSUdfVVNCX0lCTUNBTT1tCi1DT05GSUdfVVNCX0tPTklDQVdDPW0KLUNPTkZJR19VU0JfT1Y1MTE9bQotQ09ORklHX1VTQl9TRTQwMT1tCi1DT05GSUdfVVNCX1NOOUMxMDI9bQotQ09ORklHX1VTQl9TVFY2ODA9bQotIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLUNPTkZJR19VU0JfQ0FUQz1tCi1DT05GSUdfVVNCX0tBV0VUSD1tCi1DT05GSUdfVVNCX1BFR0FTVVM9bQotQ09ORklHX1VTQl9SVEw4MTUwPW0KLUNPTkZJR19VU0JfVVNCTkVUPW0KLUNPTkZJR19VU0JfTkVUX0FYODgxN1g9bQotQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCi0jIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiBDT05GSUdfVVNCX1NFUklBTD1tCitDT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQogQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQorIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KIENPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQogQ09ORklHX1VTQl9TRVJJQUxfSVI9bQpAQCAtMTI0MCw2ICsxNDE2LDcgQEAKIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUFc9bQorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCiAjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSIGlzIG5vdCBzZXQKQEAgLTEyNTcsNTAgKzE0MzQsNjggQEAKIENPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQogQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQorIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCiAjIENPTkZJR19VU0JfU0VSSUFMX1NBRkVfUEFEREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfVEk9bQogQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLPW0KIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTT1tCisjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KLUNPTkZJR19VU0JfRVpVU0I9eQorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwogIwogQ09ORklHX1VTQl9FTUk2Mj1tCiBDT05GSUdfVVNCX0VNSTI2PW0KLUNPTkZJR19VU0JfQVVFUlNXQUxEPW0KKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1JJTzUwMD1tCiBDT05GSUdfVVNCX0xFR09UT1dFUj1tCiBDT05GSUdfVVNCX0xDRD1tCisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTEVEPW0KKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0NZVEhFUk09bQotQ09ORklHX1VTQl9QSElER0VUS0lUPW0KLUNPTkZJR19VU0JfUEhJREdFVFNFUlZPPW0KKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSURNT1VTRT1tCisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1BYQTJYWD15Ci1DT05GSUdfVVNCX1BYQTJYWD15Ci0jIENPTkZJR19VU0JfUFhBMlhYX1NNQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9QWEEyNVg9eQorQ09ORklHX1VTQl9QWEEyNVg9eQorIyBDT05GSUdfVVNCX1BYQTI1WF9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9aRVJPPW0KQEAgLTEzMTAsMTUgKzE1MDUsNDIgQEAKIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCiBDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKIENPTkZJR19NTUNfUFhBPXkKLSMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xMzI3LDE2ICsxNTQ5LDE3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTM2MSwxMSArMTU4NCwxMyBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMzc3LDM5ICsxNjAyLDQyIEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CiBDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKIENPTkZJR19KRkZTMl9SVUJJTj15CiAjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CiAjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPW0KIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPW0KIENPTkZJR19TVU5SUENfR1NTPW0KKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCkBAIC0xNDE5LDcgKzE2NDcsNiBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTE0MzksMTEgKzE2NjYsOSBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTE0ODQsMzUgKzE3MDksNzEgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CiAjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAogCkBAIC0xNTIxLDQ2ICsxNzgyLDExMyBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQogCiAjCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19STkc9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQogIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnCmluZGV4IGFlNGM1ZTYuLjNiNGVjZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21zbV9kZWZjb25maWcKQEAgLTEzMyw3ICsxMzMsNyBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfTVNNN1gwMEE9eQorQ09ORklHX0FSQ0hfTVNNPXkKIAogIwogIyBCb290IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKaW5kZXggN2Q1OWZiMS4uNGRmNWI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKQEAgLTEsNzEgKzEsMTExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIE1vbiBOb3YgMjggMTA6MjY6NTIgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIE1vbiBPY3QgMjAgMTA6MjU6MzcgMjAwOAogIwogQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC03OSw0OSArMTE5LDk1IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBTeXN0ZW0gVHlwZQogIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CiAKICMKLSMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwogIworIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX1NIQVJQU0w9eQotIyBDT05GSUdfUFhBX1NIQVJQU0xfMjV4IGlzIG5vdCBzZXQKLUNPTkZJR19QWEFfU0hBUlBTTF8yN3g9eQorIyBDT05GSUdfTUFDSF9QT09ETEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT1JHSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NIRVBIRVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSFVTS1kgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQUtJVEE9eQogQ09ORklHX01BQ0hfU1BJVFo9eQogQ09ORklHX01BQ0hfQk9SWk9JPXkKKyMgQ09ORklHX01BQ0hfVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKIENPTkZJR19QWEEyN3g9eQotQ09ORklHX0lXTU1YVD15CiBDT05GSUdfUFhBX1NIQVJQX0N4eDAwPXkKIENPTkZJR19QWEFfU1NQPXkKKyMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTMwLDI1ICsyMTYsMjkgQEAKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQogCiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwogQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CiBDT05GSUdfWFNDQUxFX1BNVT15CiBDT05GSUdfU0hBUlBfUEFSQU09eQorQ09ORklHX1NIQVJQU0xfUE09eQogQ09ORklHX1NIQVJQX1NDT09QPXkKIAogIwogIyBCdXMgc3VwcG9ydAogIwotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKICMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBPXkKQEAgLTE2MywxNiArMjUzLDMyIEBACiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfUFJFRU1QVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTE4Miw2ICsyODgsMTMgQEAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggY29uc29sZT10dHkxIG5vaW5pdHJkIHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT1qZmZzMiAgIGRlYnVnIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTE5OCw2ICszMTEsNyBAQAogIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19IQVZFX0FPVVQ9eQogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCiAjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldApAQCAtMjA2LDEyICszMjAsMTIgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLUNPTkZJR19BUE09eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKK0NPTkZJR19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKQEAgLTIyMiw2ICszMzYsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjM1LDE0MCArMzUzLDEzMSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLSMgQ09ORklHX0lQX05GX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiAjIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9UT1MgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUkFXPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCi1DT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogIyBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9GSUxURVI9bQogIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfUkFXPW0KLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM3NiwyMSArNDg1LDE2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCiAKICMKQEAgLTQyMCwyNyArNTI0LDE3IEBACiAjCiAjIERvbmdsZSBzdXBwb3J0CiAjCi0KLSMKLSMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAotIworIyBDT05GSUdfS0lOR1NVTl9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1NEQVpaTEVfRE9OR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTOTU5X0RPTkdMRSBpcyBub3Qgc2V0CiAKICMKICMgRklSIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfTlNDX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUNfSVJDQ19GSVIgaXMgbm90IHNldAotIyBDT05GSUdfQUxJX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfRklSIGlzIG5vdCBzZXQKIENPTkZJR19QWEFfRklDUD1tCisjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC00NTYsOSArNTUwLDEyIEBACiAjCiBDT05GSUdfQlRfSENJVVNCPW0KICMgQ09ORklHX0JUX0hDSVVTQl9TQ08gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lVQVJUPW0KIENPTkZJR19CVF9IQ0lVQVJUX0g0PXkKIENPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJQkNNMjAzWD1tCiBDT05GSUdfQlRfSENJQlBBMTBYPW0KIENPTkZJR19CVF9IQ0lCRlVTQj1tCkBAIC00NjcsMTEgKzU2NCwyMCBAQAogQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIENPTkZJR19CVF9IQ0lCVFVBUlQ9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMT1tCiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVAgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVAgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ4MCwxOSArNTg2LDE2IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldApAQCAtNTAwLDE2ICs2MDMsMjAgQEAKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTUzNCwxNiArNjQxLDE4IEBACiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1NIQVJQX1NMPXkKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUyLDc4ICs2NjEsNjYgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9JRFM9eQogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfU0hBUlBTTD15CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNTPXkKICMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC02NDMsMTIxICs3NDAsNzYgQEAKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIworIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIFNDU0kgYWRhcHRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ01DSUFfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTklOSkFfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfUUxPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TWU01M0M1MDAgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPW0KKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBXaXJlbGVzcyBMQU4KICMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotQ09ORklHX05FVF9SQURJTz15Ci0KLSMKLSMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKLSMKLSMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9XQVZFTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAotIwotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAotIwotQ09ORklHX0hFUk1FUz1tCi0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgODAyLjExYiBQY21jaWEvQ2FyZGJ1cyBjYXJkcyBzdXBwb3J0Ci0jCi1DT05GSUdfUENNQ0lBX0hFUk1FUz1tCi1DT05GSUdfUENNQ0lBX1NQRUNUUlVNPW0KLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci1DT05GSUdfSE9TVEFQPW0KLUNPTkZJR19IT1NUQVBfRklSTVdBUkU9eQotQ09ORklHX0hPU1RBUF9DUz1tCi1DT05GSUdfTkVUX1dJUkVMRVNTPXkKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCisjIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQogQ09ORklHX05FVF9QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CkBAIC03NjcsMTAgKzgxOSw2IEBACiAjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CkBAIC03ODEsMzEgKzgyOSwyOSBAQAogQ09ORklHX1BQUF9CU0RDT01QPW0KICMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FQTVBPV0VSIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwpAQCAtODE2LDE3ICs4NjIsMzUgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9DT1JHSSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfU1BJVFo9eQorIyBDT05GSUdfS0VZQk9BUkRfUFhBMjd4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQ09SR0k9eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ09SR0kgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQogCiAjCkBAIC04MzksOCArOTAzLDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC04NDksNiArOTE2LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD1tCiBDT05GSUdfU0VSSUFMXzgyNTBfQ1M9bQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtODYwLDEwMSArOTI4LDI1MyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLQotIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKIENPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19QWEE9eQogIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwogIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX1NQSV9QWEEyWFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX01BWDExMTE9eQorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CitDT05GSUdfTENEX0NPUkdJPXkKKyMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTk2Miw2ICsxMTgyLDcgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15CkBAIC05NzQsNTUgKzExOTUsOTYgQEAKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfREVWSUNFPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19MQ0RfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfQ09SR0k9eQotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworQ09ORklHX1VTQl9ISUQ9bQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworQ09ORklHX1VTQl9LQkQ9bQorQ09ORklHX1VTQl9NT1VTRT1tCisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9bQorQ09ORklHX0hJRF9BUFBMRT1tCitDT05GSUdfSElEX0JFTEtJTj1tCitDT05GSUdfSElEX0JSSUdIVD1tCitDT05GSUdfSElEX0NIRVJSWT1tCitDT05GSUdfSElEX0NISUNPTlk9bQorQ09ORklHX0hJRF9DWVBSRVNTPW0KK0NPTkZJR19ISURfREVMTD1tCitDT05GSUdfSElEX0VaS0VZPW0KK0NPTkZJR19ISURfR1lSQVRJT049bQorQ09ORklHX0hJRF9MT0dJVEVDSD1tCisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9bQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD1tCitDT05GSUdfSElEX1NBTVNVTkc9bQorQ09ORklHX0hJRF9TT05ZPW0KK0NPTkZJR19ISURfU1VOUExVUz1tCitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfU0w4MTFfSENEPW0KIENPTkZJR19VU0JfU0w4MTFfQ1M9bQorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTEwNDEsMzMgKzEzMDMsMTEgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi1DT05GSUdfVVNCX0hJRElOUFVUPXkKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotQ09ORklHX1VTQl9LQkQ9bQotQ09ORklHX1VTQl9NT1VTRT1tCi1DT05GSUdfVVNCX0FJUFRFSz1tCi1DT05GSUdfVVNCX1dBQ09NPW0KLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9LQlRBQj1tCi1DT05GSUdfVVNCX1BPV0VSTUFURT1tCi1DT05GSUdfVVNCX01UT1VDSD1tCi0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotQ09ORklHX1VTQl9FR0FMQVg9bQotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotQ09ORklHX1VTQl9YUEFEPW0KLUNPTkZJR19VU0JfQVRJX1JFTU9URT1tCi0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC0xMDc2LDUxICsxMzE2LDIyIEBACiBDT05GSUdfVVNCX01JQ1JPVEVLPW0KIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi1DT05GSUdfVVNCX0RBQlVTQj1tCi0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLUNPTkZJR19VU0JfQ0FUQz1tCi1DT05GSUdfVVNCX0tBV0VUSD1tCi1DT05GSUdfVVNCX1BFR0FTVVM9bQotQ09ORklHX1VTQl9SVEw4MTUwPW0KLUNPTkZJR19VU0JfVVNCTkVUPW0KLUNPTkZJR19VU0JfTkVUX0FYODgxN1g9bQotQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCi0jIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiBDT05GSUdfVVNCX1NFUklBTD1tCitDT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQogQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQorIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KIENPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQogQ09ORklHX1VTQl9TRVJJQUxfSVI9bQpAQCAtMTEyOCw2ICsxMzM5LDcgQEAKIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUFc9bQorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCiAjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSIGlzIG5vdCBzZXQKQEAgLTExNDUsNDkgKzEzNTcsNjYgQEAKIENPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQogQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQorIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCiAjIENPTkZJR19VU0JfU0VSSUFMX1NBRkVfUEFEREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfVEk9bQogQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLPW0KIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTT1tCiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KLUNPTkZJR19VU0JfRVpVU0I9eQorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwogIwogQ09ORklHX1VTQl9FTUk2Mj1tCiBDT05GSUdfVVNCX0VNSTI2PW0KLUNPTkZJR19VU0JfQVVFUlNXQUxEPW0KKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1JJTzUwMD1tCiBDT05GSUdfVVNCX0xFR09UT1dFUj1tCiBDT05GSUdfVVNCX0xDRD1tCisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTEVEPW0KKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0NZVEhFUk09bQotQ09ORklHX1VTQl9QSElER0VUS0lUPW0KLUNPTkZJR19VU0JfUEhJREdFVFNFUlZPPW0KKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSURNT1VTRT1tCisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEPXkKIENPTkZJR19VU0JfRFVNTVlfSENEPW0KIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CkBAIC0xMTk4LDE1ICsxNDI3LDQyIEBACiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1NFUklBTD1tCi0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIworIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAogQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIwogQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCiBDT05GSUdfTU1DX1BYQT15Ci0jIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTIxOCwxOCArMTQ3NCwxOSBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xMjU0LDExICsxNTExLDEzIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEyNzAsMzkgKzE1MjksNDIgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKIENPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKICMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKICMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9bQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9bQogQ09ORklHX1NVTlJQQ19HU1M9bQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9bQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KQEAgLTEzMTIsNyArMTU3NCw2IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtMTMzMiwxMSArMTU5Myw5IEBACiAjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtMTM3NywzNSArMTYzNiw3MSBAQAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CiAKQEAgLTE0MTQsNDYgKzE3MDksMTEzIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CiAKICMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCiAKICMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCiAjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9bQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD15CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCmluZGV4IDhiN2E0MzEuLjkwMzNkMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCkBAIC0xNDcsNiArMTQ3LDcgQEAKICMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CitDT05GSUdfVFJJWkVQU19QWEE9eQogQ09ORklHX01BQ0hfVFJJWkVQUzQ9eQogQ09ORklHX01BQ0hfVFJJWkVQUzRfQ09OWFM9eQogIyBDT05GSUdfTUFDSF9UUklaRVBTNF9BTlkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGl2NjQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RpdjY0LmgKaW5kZXggNTAwMTM5MC4uZDNmMGE5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGl2NjQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kaXY2NC5oCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJCV9fcmVzID0gX19tOwkJCQkJXAogCQkJYXNtICgJInVtbGFsCSVRMCwgJVIwLCAlUTEsICVRMlxuXHQiCQlcCiAJCQkJIm1vdgklUTAsICMwIgkJCVwKLQkJCQk6ICIrciIgKF9fcmVzKQkJCQlcCisJCQkJOiAiKyZyIiAoX19yZXMpCQkJCVwKIAkJCQk6ICJyIiAoX19tKSwgInIiIChfX24pCQkJXAogCQkJCTogImNjIiApOwkJCQlcCiAJCX0gZWxzZSB7CQkJCQkJXApAQCAtMTgyLDcgKzE4Miw3IEBACiAJCQkJInVtbGFsCSVSMCwgJVEwLCAlUTEsICVSMlxuXHQiCQlcCiAJCQkJIm1vdgklUjAsICMwXG5cdCIJCQlcCiAJCQkJInVtbGFsCSVRMCwgJVIwLCAlUjEsICVSMiIJCVwKLQkJCQk6ICIrciIgKF9fcmVzKQkJCQlcCisJCQkJOiAiKyZyIiAoX19yZXMpCQkJCVwKIAkJCQk6ICJyIiAoX19tKSwgInIiIChfX24pCQkJXAogCQkJCTogImNjIiApOwkJCQlcCiAJCX0gZWxzZSB7CQkJCQkJXApAQCAtMTkyLDcgKzE5Miw3IEBACiAJCQkJImFkZHMJJVEwLCAlMSwgJVEwXG5cdCIJCVwKIAkJCQkiYWRjCSVSMCwgJVIwLCAjMFxuXHQiCQlcCiAJCQkJInVtbGFsCSVRMCwgJVIwLCAlUjIsICVSMyIJCVwKLQkJCQk6ICIrciIgKF9fcmVzKSwgIityIiAoX196KQkJXAorCQkJCTogIismciIgKF9fcmVzKSwgIismciIgKF9feikJCVwKIAkJCQk6ICJyIiAoX19tKSwgInIiIChfX24pCQkJXAogCQkJCTogImNjIiApOwkJCQlcCiAJCX0JCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKaW5kZXggN2U1ZWJiNS4uOWIwNDQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCkBAIC00MDQsNiArNDA0LDcgQEAKIAkJfQogCiAJCXBpbiA9IGJhbmstPmNoaXBiYXNlOworCQlncGlvID0gJmlycV9kZXNjW3Bpbl07CiAKIAkJd2hpbGUgKGlzcikgewogCQkJaWYgKGlzciAmIDEpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggNzFjMmZhNy4uOThlYzMwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTg5LDYgKzg5LDggQEAKICAqIAlub2RlIDM6ICAweGQ4MDAwMDAwIC0gMHhkZmZmZmZmZgogICovCiAjZGVmaW5lIE5PREVfTUVNX1NJWkVfQklUUwkyNAorI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyNAorI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTCTMyCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL3RpbWUuaCBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvdGltZS5oCmluZGV4IDQ5MjEzZDkuLmQ2ZDUyNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvdGltZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvdGltZS5oCkBAIC00MSw3ICs0MSw3IEBACiAJCXJldHVybiAxMjAwMDAwMDAwOwogCWRlZmF1bHQ6CiAJCXByaW50aygiJXM6IHdhcm5pbmcgdW5rbm93biBmcmVxdWVuY3ksIGRlZmF1bHRpbmcgdG8gODAwTWh6XG4iLAotCQkJX19GVU5DVElPTl9fKTsKKwkJCV9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gODAwMDAwMDAwOwpAQCAtNjAsNyArNjAsNyBAQAogCQlyZXR1cm4gNDsKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzOiB3YXJuaW5nIHVua25vd24gcmF0aW8sIGRlZmF1bHRpbmcgdG8gMlxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIDI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDAuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCmluZGV4IGIwNjUzYTguLjMwNDUxMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkudW5tYXNrCT0gaXhkcDJ4MDBfaXJxX3VubWFzawogfTsKIAotdm9pZCBfX2luaXQgaXhkcDJ4MDBfaW5pdF9pcnEodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqc3RhdF9yZWcsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKm1hc2tfcmVnLCB1bnNpZ25lZCBsb25nIG5yX2lycXMpCit2b2lkIF9faW5pdCBpeGRwMngwMF9pbml0X2lycSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpzdGF0X3JlZywgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbWFza19yZWcsIHVuc2lnbmVkIGxvbmcgbnJfb2ZfaXJxcykKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCkBAIC0xNTQsNyArMTU0LDcgQEAKIAogCWJvYXJkX2lycV9zdGF0ID0gc3RhdF9yZWc7CiAJYm9hcmRfaXJxX21hc2sgPSBtYXNrX3JlZzsKLQlib2FyZF9pcnFfY291bnQgPSBucl9pcnFzOworCWJvYXJkX2lycV9jb3VudCA9IG5yX29mX2lycXM7CiAKIAkqYm9hcmRfaXJxX21hc2sgPSAweGZmZmZmZmZmOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwppbmRleCBkYjhiNWZlLi4yYzVhMDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKQEAgLTE2NywxMSArMTY3LDYgQEAKIAogY29tbWVudCAiSVhQNHh4IE9wdGlvbnMiCiAKLWNvbmZpZyBETUFCT1VOQ0UKLQlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBQQ0kKLQogY29uZmlnIElYUDRYWF9JTkRJUkVDVF9QQ0kKIAlib29sICJVc2UgaW5kaXJlY3QgUENJIG1lbW9yeSBhY2Nlc3MiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCmluZGV4IGUxNGJmNDAuLmI5NmM1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQpAQCAtMiw0ICsyLDQgQEAKIAogb2JqLSQoQ09ORklHX01BQ0hfREI4OEY2MjgxX0JQKQkJKz0gZGI4OGY2MjgxLWJwLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1JEODhGNjE5Ml9OQVMpCSs9IHJkODhmNjE5Mi1uYXMtc2V0dXAubwotb2JqLSQoQ09ORklHX01BQ0hfUkQ4OEY2MTkyX05BUykJKz0gcmQ4OGY2MjgxLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX1JEODhGNjI4MSkJCSs9IHJkODhmNjI4MS1zZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwppbmRleCA4NWNhZDA1Li4wYmIxZmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9vcmlvbl9zcGkuaD4KKyNpbmNsdWRlIDxuZXQvZHNhLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdGltZXguaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTE1Miw2ICsxNTMsNDAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0IHN3aXRjaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDAsCisJCS5lbmQJPSAwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga2lya3dvb2Rfc3dpdGNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZHNhIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLnJlc291cmNlCT0ga2lya3dvb2Rfc3dpdGNoX3Jlc291cmNlcywKK307CisKK3ZvaWQgX19pbml0IGtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQoreworCWlmIChpcnEgIT0gTk9fSVJRKSB7CisJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBpcnE7CisJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOworCQlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOworCX0KKworCWQtPm1paV9idXMgPSAma2lya3dvb2RfZ2UwMF9zaGFyZWQuZGV2OworCWQtPm5ldGRldiA9ICZraXJrd29vZF9nZTAwLmRldjsKKwlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2Rfc3dpdGNoX2RldmljZSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTb0MgUlRDCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga2lya3dvb2RfcnRjX3Jlc291cmNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKaW5kZXggOGZhMGY2YS4uNTc3NDYzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaWZuZGVmIF9fQVJDSF9LSVJLV09PRF9DT01NT05fSAogI2RlZmluZSBfX0FSQ0hfS0lSS1dPT0RfQ09NTU9OX0gKIAorc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhOwogCkBAIC0yOSw2ICszMCw3IEBACiAKIHZvaWQga2lya3dvb2RfZWhjaV9pbml0KHZvaWQpOwogdm9pZCBraXJrd29vZF9nZTAwX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKTsKK3ZvaWQga2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdChzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKmQsIGludCBpcnEpOwogdm9pZCBraXJrd29vZF9wY2llX2luaXQodm9pZCk7CiB2b2lkIGtpcmt3b29kX3J0Y19pbml0KHZvaWQpOwogdm9pZCBraXJrd29vZF9zYXRhX2luaXQoc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSAqc2F0YV9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCmluZGV4IGY3ODUwOTMuLjE3NTA1NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPG5ldC9kc2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KQEAgLTc0LDYgKzc1LDE1IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9kYXRhID0geworCS5wb3J0X25hbWVzWzBdCT0gImxhbjEiLAorCS5wb3J0X25hbWVzWzFdCT0gImxhbjIiLAorCS5wb3J0X25hbWVzWzJdCT0gImxhbjMiLAorCS5wb3J0X25hbWVzWzNdCT0gImxhbjQiLAorCS5wb3J0X25hbWVzWzRdCT0gIndhbiIsCisJLnBvcnRfbmFtZXNbNV0JPSAiY3B1IiwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9zYXRhX2RhdGEgPSB7CiAJLm5fcG9ydHMJPSAyLAogfTsKQEAgLTg3LDYgKzk3LDcgQEAKIAogCWtpcmt3b29kX2VoY2lfaW5pdCgpOwogCWtpcmt3b29kX2dlMDBfaW5pdCgmcmQ4OGY2MjgxX2dlMDBfZGF0YSk7CisJa2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLCBOT19JUlEpOwogCWtpcmt3b29kX3J0Y19pbml0KCk7CiAJa2lya3dvb2Rfc2F0YV9pbml0KCZyZDg4ZjYyODFfc2F0YV9kYXRhKTsKIAlraXJrd29vZF91YXJ0MF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZwppbmRleCAzNTUzYmFiLi5kMTQwYWJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL0tjb25maWcKQEAgLTEsMTggKzEsMTMgQEAKLWlmIEFSQ0hfTVNNN1gwMEEKK2lmIEFSQ0hfTVNNCiAKLWNvbW1lbnQgIk1TTTdYMDBBIEJvYXJkIFR5cGUiCi0JZGVwZW5kcyBvbiBBUkNIX01TTTdYMDBBCitjb21tZW50ICJNU00gQm9hcmQgVHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfTVNNCiAKIGNvbmZpZyBNQUNIX0hBTElCVVQKLQlkZXBlbmRzIG9uIEFSQ0hfTVNNN1gwMEEKKwlkZXBlbmRzIG9uIEFSQ0hfTVNNCiAJZGVmYXVsdCB5Ci0JYm9vbCAiSGFsaWJ1dCBCb2FyZCAoUUNUIFNVUkY3MjAwQSkiCisJYm9vbCAiSGFsaWJ1dCBCb2FyZCAoUUNUIFNVUkY3MjAxQSkiCiAJaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIFF1YWxjb21tIFNVUkY3MjAwQSBldmFsIGJvYXJkLgotCi1jb25maWcgTVNNN1gwMEFfSURMRQotCWRlcGVuZHMgb24gQVJDSF9NU003WDAwQQotCWRlZmF1bHQgeQotCWJvb2wgIklkbGUgU3VwcG9ydCBmb3IgTVNNN1gwMEEiCisJICBTdXBwb3J0IGZvciB0aGUgUXVhbGNvbW0gU1VSRjcyMDFBIGV2YWwgYm9hcmQuCiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCmluZGV4IGQxMmYyMzYuLjFhYTQ3MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCkBAIC0xLDcgKzEsOCBAQAogb2JqLXkgKz0gaW8ubyBpZGxlLm8gaXJxLm8gdGltZXIubyBkbWEubwotCi0jIENvbW1vbiBjb2RlIGZvciBib2FyZCBpbml0Ci1vYmoteSArPSBjb21tb24ubworb2JqLXkgKz0gZGV2aWNlcy5vCitvYmoteSArPSBwcm9jX2NvbW0ubworb2JqLXkgKz0gdnJlZy5vCitvYmoteSArPSBjbG9jay5vIGNsb2NrLTd4MDFhLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfSEFMSUJVVCkgKz0gYm9hcmQtaGFsaWJ1dC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWhhbGlidXQuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWhhbGlidXQuYwppbmRleCBhMjQyNTkxLi5jMmE5NmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1oYWxpYnV0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtaGFsaWJ1dC5jCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IDB4OUMwMDQzMDAsCkBAIC01MywzMSArNTUsMTIgQEAKIAkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHZvaWQgbWRkaTBfcGFuZWxfcG93ZXIoaW50IG9uKQotewotfQotCi1zdGF0aWMgc3RydWN0IG1zbV9tZGRpX3BsYXRmb3JtX2RhdGEgbXNtX21kZGkwX3BkYXRhID0gewotCS5wYW5lbF9wb3dlcgk9IG1kZGkwX3BhbmVsX3Bvd2VyLAotCS5oYXNfdnN5bmNfaXJxCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9tZGRpMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAibXNtX21kZGkiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmbXNtX21kZGkwX3BkYXRhCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9zZXJpYWwwX2RldmljZSA9IHsKLQkubmFtZQk9ICJtc21fc2VyaWFsIiwKLQkuaWQJPSAwLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZtc21fc2VyaWFsMF9kZXZpY2UsCi0JJm1zbV9tZGRpMF9kZXZpY2UsCisJJm1zbV9kZXZpY2VfdWFydDMsCisJJm1zbV9kZXZpY2Vfc21kLAorCSZtc21fZGV2aWNlX25hbmQsCisJJm1zbV9kZXZpY2VfaHN1c2IsCisJJm1zbV9kZXZpY2VfaTJjLAogCSZzbWM5MXhfZGV2aWNlLAogfTsKIApAQCAtOTEsMjAgKzc0LDE1IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaGFsaWJ1dF9pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci0JbXNtX2FkZF9kZXZpY2VzKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoYWxpYnV0X21hcF9pbyh2b2lkKQogewogCW1zbV9tYXBfY29tbW9uX2lvKCk7CisJbXNtX2Nsb2NrX2luaXQoKTsKIH0KIAogTUFDSElORV9TVEFSVChIQUxJQlVULCAiSGFsaWJ1dCBCb2FyZCAoUUNUIFNVUkY3MjAwQSkiKQotCi0vKiBVQVJUIGZvciBMTCBERUJVRyAqLwotCS5waHlzX2lvCT0gTVNNX1VBUlQxX1BIWVMsCi0JLmlvX3BnX29mZnN0CT0gKChNU01fVUFSVDFfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAotCiAJLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKIAkubWFwX2lvCQk9IGhhbGlidXRfbWFwX2lvLAogCS5pbml0X2lycQk9IGhhbGlidXRfaW5pdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay03eDAxYS5jIGIvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stN3gwMWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjIzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stN3gwMWEuYwpAQCAtMCwwICsxLDEyNiBAQAorLyogYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stN3gwMWEuYworICoKKyAqIENsb2NrIHRhYmxlcyBmb3IgTVNNN1gwMUEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qIGNsb2NrIElEcyB1c2VkIGJ5IHRoZSBtb2RlbSBwcm9jZXNzb3IgKi8KKworI2RlZmluZSBBQ1BVX0NMSwkwICAgLyogQXBwbGljYXRpb25zIHByb2Nlc3NvciBjbG9jayAqLworI2RlZmluZSBBRE1fQ0xLCQkxICAgLyogQXBwbGljYXRpb25zIGRhdGEgbW92ZXIgY2xvY2sgKi8KKyNkZWZpbmUgQURTUF9DTEsJMiAgIC8qIEFEU1AgY2xvY2sgKi8KKyNkZWZpbmUgRUJJMV9DTEsJMyAgIC8qIEV4dGVybmFsIGJ1cyBpbnRlcmZhY2UgMSBjbG9jayAqLworI2RlZmluZSBFQkkyX0NMSwk0ICAgLyogRXh0ZXJuYWwgYnVzIGludGVyZmFjZSAyIGNsb2NrICovCisjZGVmaW5lIEVDT0RFQ19DTEsJNSAgIC8qIEV4dGVybmFsIENPREVDIGNsb2NrICovCisjZGVmaW5lIEVNREhfQ0xLCTYgICAvKiBFeHRlcm5hbCBNRERJIGhvc3QgY2xvY2sgKi8KKyNkZWZpbmUgR1BfQ0xLCQk3ICAgLyogR2VuZXJhbCBwdXJwb3NlIGNsb2NrICovCisjZGVmaW5lIEdSUF9DTEsJCTggICAvKiBHcmFwaGljcyBjbG9jayAqLworI2RlZmluZSBJMkNfQ0xLCQk5ICAgLyogSTJDIGNsb2NrICovCisjZGVmaW5lIElDT0RFQ19SWF9DTEsJMTAgIC8qIEludGVybmFsIENPREVYIFJYIGNsb2NrICovCisjZGVmaW5lIElDT0RFQ19UWF9DTEsJMTEgIC8qIEludGVybmFsIENPREVYIFRYIGNsb2NrICovCisjZGVmaW5lIElNRU1fQ0xLCTEyICAvKiBJbnRlcm5hbCBncmFwaGljcyBtZW1vcnkgY2xvY2sgKi8KKyNkZWZpbmUgTURDX0NMSwkJMTMgIC8qIE1EREkgY2xpZW50IGNsb2NrICovCisjZGVmaW5lIE1EUF9DTEsJCTE0ICAvKiBNb2JpbGUgZGlzcGxheSBwcm9jZXNzb3IgY2xvY2sgKi8KKyNkZWZpbmUgUEJVU19DTEsJMTUgIC8qIFBlcmlwaGVyYWwgYnVzIGNsb2NrICovCisjZGVmaW5lIFBDTV9DTEsJCTE2ICAvKiBQQ00gY2xvY2sgKi8KKyNkZWZpbmUgUE1ESF9DTEsJMTcgIC8qIFByaW1hcnkgTURESSBob3N0IGNsb2NrICovCisjZGVmaW5lIFNEQUNfQ0xLCTE4ICAvKiBTdGVyZW8gREFDIGNsb2NrICovCisjZGVmaW5lIFNEQzFfQ0xLCTE5ICAvKiBTZWN1cmUgRGlnaXRhbCBDYXJkIGNsb2NrcyAqLworI2RlZmluZSBTREMxX1BDTEsJMjAKKyNkZWZpbmUgU0RDMl9DTEsJMjEKKyNkZWZpbmUgU0RDMl9QQ0xLCTIyCisjZGVmaW5lIFNEQzNfQ0xLCTIzCisjZGVmaW5lIFNEQzNfUENMSwkyNAorI2RlZmluZSBTREM0X0NMSwkyNQorI2RlZmluZSBTREM0X1BDTEsJMjYKKyNkZWZpbmUgVFNJRl9DTEsJMjcgIC8qIFRyYW5zcG9ydCBTdHJlYW0gSW50ZXJmYWNlIGNsb2NrcyAqLworI2RlZmluZSBUU0lGX1JFRl9DTEsJMjgKKyNkZWZpbmUgVFZfREFDX0NMSwkyOSAgLyogVFYgY2xvY2tzICovCisjZGVmaW5lIFRWX0VOQ19DTEsJMzAKKyNkZWZpbmUgVUFSVDFfQ0xLCTMxICAvKiBVQVJUIGNsb2NrcyAqLworI2RlZmluZSBVQVJUMl9DTEsJMzIKKyNkZWZpbmUgVUFSVDNfQ0xLCTMzCisjZGVmaW5lIFVBUlQxRE1fQ0xLCTM0CisjZGVmaW5lIFVBUlQyRE1fQ0xLCTM1CisjZGVmaW5lIFVTQl9IU19DTEsJMzYgIC8qIEhpZ2ggc3BlZWQgVVNCIGNvcmUgY2xvY2sgKi8KKyNkZWZpbmUgVVNCX0hTX1BDTEsJMzcgIC8qIEhpZ2ggc3BlZWQgVVNCIHBidXMgY2xvY2sgKi8KKyNkZWZpbmUgVVNCX09UR19DTEsJMzggIC8qIEZ1bGwgc3BlZWQgVVNCIGNsb2NrICovCisjZGVmaW5lIFZEQ19DTEsJCTM5ICAvKiBWaWRlbyBjb250cm9sbGVyIGNsb2NrICovCisjZGVmaW5lIFZGRV9DTEsJCTQwICAvKiBDYW1lcmEgLyBWaWRlbyBGcm9udCBFbmQgY2xvY2sgKi8KKyNkZWZpbmUgVkZFX01EQ19DTEsJNDEgIC8qIFZGRSBNRERJIGNsaWVudCBjbG9jayAqLworCisjZGVmaW5lIE5SX0NMS1MJCTQyCisKKyNkZWZpbmUgQ0xPQ0soY2xrX25hbWUsIGNsa19pZCwgY2xrX2RldiwgY2xrX2ZsYWdzKSB7CVwKKwkubmFtZSA9IGNsa19uYW1lLCBcCisJLmlkID0gY2xrX2lkLCBcCisJLmZsYWdzID0gY2xrX2ZsYWdzLCBcCisJLmRldiA9IGNsa19kZXYsIFwKKwl9CisKKyNkZWZpbmUgT0ZGIENMS0ZMQUdfQVVUT19PRkYKKyNkZWZpbmUgTUlOTUFYIENMS0ZMQUdfVVNFX01JTl9NQVhfVE9fU0VUCisKK3N0cnVjdCBjbGsgbXNtX2Nsb2Nrc1tdID0geworCUNMT0NLKCJhZG1fY2xrIiwJQURNX0NMSywJTlVMTCwgMCksCisJQ0xPQ0soImFkc3BfY2xrIiwJQURTUF9DTEssCU5VTEwsIDApLAorCUNMT0NLKCJlYmkxX2NsayIsCUVCSTFfQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygiZWJpMl9jbGsiLAlFQkkyX0NMSywJTlVMTCwgMCksCisJQ0xPQ0soImVjb2RlY19jbGsiLAlFQ09ERUNfQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygiZW1kaF9jbGsiLAlFTURIX0NMSywJTlVMTCwgT0ZGKSwKKwlDTE9DSygiZ3BfY2xrIiwJCUdQX0NMSywJCU5VTEwsIDApLAorCUNMT0NLKCJncnBfY2xrIiwJR1JQX0NMSywJTlVMTCwgT0ZGKSwKKwlDTE9DSygiaTJjX2NsayIsCUkyQ19DTEssCSZtc21fZGV2aWNlX2kyYy5kZXYsIDApLAorCUNMT0NLKCJpY29kZWNfcnhfY2xrIiwJSUNPREVDX1JYX0NMSywJTlVMTCwgMCksCisJQ0xPQ0soImljb2RlY190eF9jbGsiLAlJQ09ERUNfVFhfQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygiaW1lbV9jbGsiLAlJTUVNX0NMSywJTlVMTCwgT0ZGKSwKKwlDTE9DSygibWRjX2NsayIsCU1EQ19DTEssCU5VTEwsIDApLAorCUNMT0NLKCJtZHBfY2xrIiwJTURQX0NMSywJTlVMTCwgT0ZGKSwKKwlDTE9DSygicGJ1c19jbGsiLAlQQlVTX0NMSywJTlVMTCwgMCksCisJQ0xPQ0soInBjbV9jbGsiLAlQQ01fQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygicG1kaF9jbGsiLAlQTURIX0NMSywJTlVMTCwgT0ZGIHwgTUlOTUFYKSwKKwlDTE9DSygic2RhY19jbGsiLAlTREFDX0NMSywJTlVMTCwgT0ZGKSwKKwlDTE9DSygic2RjX2NsayIsCVNEQzFfQ0xLLAkmbXNtX2RldmljZV9zZGMxLmRldiwgT0ZGKSwKKwlDTE9DSygic2RjX3BjbGsiLAlTREMxX1BDTEssCSZtc21fZGV2aWNlX3NkYzEuZGV2LCBPRkYpLAorCUNMT0NLKCJzZGNfY2xrIiwJU0RDMl9DTEssCSZtc21fZGV2aWNlX3NkYzIuZGV2LCBPRkYpLAorCUNMT0NLKCJzZGNfcGNsayIsCVNEQzJfUENMSywJJm1zbV9kZXZpY2Vfc2RjMi5kZXYsIE9GRiksCisJQ0xPQ0soInNkY19jbGsiLAlTREMzX0NMSywJJm1zbV9kZXZpY2Vfc2RjMy5kZXYsIE9GRiksCisJQ0xPQ0soInNkY19wY2xrIiwJU0RDM19QQ0xLLAkmbXNtX2RldmljZV9zZGMzLmRldiwgT0ZGKSwKKwlDTE9DSygic2RjX2NsayIsCVNEQzRfQ0xLLAkmbXNtX2RldmljZV9zZGM0LmRldiwgT0ZGKSwKKwlDTE9DSygic2RjX3BjbGsiLAlTREM0X1BDTEssCSZtc21fZGV2aWNlX3NkYzQuZGV2LCBPRkYpLAorCUNMT0NLKCJ0c2lmX2NsayIsCVRTSUZfQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygidHNpZl9yZWZfY2xrIiwJVFNJRl9SRUZfQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygidHZfZGFjX2NsayIsCVRWX0RBQ19DTEssCU5VTEwsIDApLAorCUNMT0NLKCJ0dl9lbmNfY2xrIiwJVFZfRU5DX0NMSywJTlVMTCwgMCksCisJQ0xPQ0soInVhcnRfY2xrIiwJVUFSVDFfQ0xLLAkmbXNtX2RldmljZV91YXJ0MS5kZXYsIE9GRiksCisJQ0xPQ0soInVhcnRfY2xrIiwJVUFSVDJfQ0xLLAkmbXNtX2RldmljZV91YXJ0Mi5kZXYsIDApLAorCUNMT0NLKCJ1YXJ0X2NsayIsCVVBUlQzX0NMSywJJm1zbV9kZXZpY2VfdWFydDMuZGV2LCBPRkYpLAorCUNMT0NLKCJ1YXJ0MWRtX2NsayIsCVVBUlQxRE1fQ0xLLAlOVUxMLCBPRkYpLAorCUNMT0NLKCJ1YXJ0MmRtX2NsayIsCVVBUlQyRE1fQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygidXNiX2hzX2NsayIsCVVTQl9IU19DTEssCSZtc21fZGV2aWNlX2hzdXNiLmRldiwgT0ZGKSwKKwlDTE9DSygidXNiX2hzX3BjbGsiLAlVU0JfSFNfUENMSywJJm1zbV9kZXZpY2VfaHN1c2IuZGV2LCBPRkYpLAorCUNMT0NLKCJ1c2Jfb3RnX2NsayIsCVVTQl9PVEdfQ0xLLAlOVUxMLCAwKSwKKwlDTE9DSygidmRjX2NsayIsCVZEQ19DTEssCU5VTEwsIE9GRiB8IE1JTk1BWCksCisJQ0xPQ0soInZmZV9jbGsiLAlWRkVfQ0xLLAlOVUxMLCBPRkYpLAorCUNMT0NLKCJ2ZmVfbWRjX2NsayIsCVZGRV9NRENfQ0xLLAlOVUxMLCBPRkYpLAorfTsKKwordW5zaWduZWQgbXNtX251bV9jbG9ja3MgPSBBUlJBWV9TSVpFKG1zbV9jbG9ja3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxY2UzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qIGFyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgInByb2NfY29tbS5oIgorCitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2Nrc19tdXRleCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKKworLyoKKyAqIGdsdWUgZm9yIHRoZSBwcm9jX2NvbW0gaW50ZXJmYWNlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjX2Nsa19lbmFibGUodW5zaWduZWQgaWQpCit7CisJcmV0dXJuIG1zbV9wcm9jX2NvbW0oUENPTV9DTEtDVExfUlBDX0VOQUJMRSwgJmlkLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjX2Nsa19kaXNhYmxlKHVuc2lnbmVkIGlkKQoreworCW1zbV9wcm9jX2NvbW0oUENPTV9DTEtDVExfUlBDX0RJU0FCTEUsICZpZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjX2Nsa19zZXRfcmF0ZSh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcmF0ZSkKK3sKKwlyZXR1cm4gbXNtX3Byb2NfY29tbShQQ09NX0NMS0NUTF9SUENfU0VUX1JBVEUsICZpZCwgJnJhdGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwY19jbGtfc2V0X21pbl9yYXRlKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCByYXRlKQoreworCXJldHVybiBtc21fcHJvY19jb21tKFBDT01fQ0xLQ1RMX1JQQ19NSU5fUkFURSwgJmlkLCAmcmF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjX2Nsa19zZXRfbWF4X3JhdGUodW5zaWduZWQgaWQsIHVuc2lnbmVkIHJhdGUpCit7CisJcmV0dXJuIG1zbV9wcm9jX2NvbW0oUENPTV9DTEtDVExfUlBDX01BWF9SQVRFLCAmaWQsICZyYXRlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGNfY2xrX3NldF9mbGFncyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0dXJuIG1zbV9wcm9jX2NvbW0oUENPTV9DTEtDVExfUlBDX1NFVF9GTEFHUywgJmlkLCAmZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBjX2Nsa19nZXRfcmF0ZSh1bnNpZ25lZCBpZCkKK3sKKwlpZiAobXNtX3Byb2NfY29tbShQQ09NX0NMS0NUTF9SUENfUkFURSwgJmlkLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcGNfY2xrX2lzX2VuYWJsZWQodW5zaWduZWQgaWQpCit7CisJaWYgKG1zbV9wcm9jX2NvbW0oUENPTV9DTEtDVExfUlBDX0VOQUJMRUQsICZpZCwgTlVMTCkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGlkOworfQorCitzdGF0aWMgaW5saW5lIGludCBwY19wbGxfcmVxdWVzdCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgb24pCit7CisJb24gPSAhIW9uOworCXJldHVybiBtc21fcHJvY19jb21tKFBDT01fQ0xLQ1RMX1JQQ19QTExfUkVRVUVTVCwgJmlkLCAmb24pOworfQorCisvKgorICogU3RhbmRhcmQgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9jbGsuaAorICovCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBsaXN0KQorCQlpZiAoIXN0cmNtcChpZCwgY2xrLT5uYW1lKSAmJiBjbGstPmRldiA9PSBkZXYpCisJCQlnb3RvIGZvdW5kX2l0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZjbG9ja3MsIGxpc3QpCisJCWlmICghc3RyY21wKGlkLCBjbGstPm5hbWUpICYmIGNsay0+ZGV2ID09IE5VTEwpCisJCQlnb3RvIGZvdW5kX2l0OworCisJY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKK2ZvdW5kX2l0OgorCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwlyZXR1cm4gY2xrOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woY2xrX3B1dCk7CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWNsay0+Y291bnQrKzsKKwlpZiAoY2xrLT5jb3VudCA9PSAxKQorCQlwY19jbGtfZW5hYmxlKGNsay0+aWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCUJVR19PTihjbGstPmNvdW50ID09IDApOworCWNsay0+Y291bnQtLTsKKwlpZiAoY2xrLT5jb3VudCA9PSAwKQorCQlwY19jbGtfZGlzYWJsZShjbGstPmlkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gcGNfY2xrX2dldF9yYXRlKGNsay0+aWQpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCByZXQ7CisJaWYgKGNsay0+ZmxhZ3MgJiBDTEtGTEFHX1VTRV9NSU5fTUFYX1RPX1NFVCkgeworCQlyZXQgPSBwY19jbGtfc2V0X21heF9yYXRlKGNsay0+aWQsIHJhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIHBjX2Nsa19zZXRfbWluX3JhdGUoY2xrLT5pZCwgcmF0ZSk7CisJfQorCXJldHVybiBwY19jbGtfc2V0X3JhdGUoY2xrLT5pZCwgcmF0ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CisKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKKworaW50IGNsa19zZXRfZmxhZ3Moc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHBjX2Nsa19zZXRfZmxhZ3MoY2xrLT5pZCwgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X2ZsYWdzKTsKKworCit2b2lkIF9faW5pdCBtc21fY2xvY2tfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIG47CisKKwlzcGluX2xvY2tfaW5pdCgmY2xvY2tzX2xvY2spOworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJZm9yIChuID0gMDsgbiA8IG1zbV9udW1fY2xvY2tzOyBuKyspCisJCWxpc3RfYWRkX3RhaWwoJm1zbV9jbG9ja3Nbbl0ubGlzdCwgJmNsb2Nrcyk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworfQorCisvKiBUaGUgYm9vdGxvYWRlciBhbmQvb3IgQU1TUyBtYXkgaGF2ZSBsZWZ0IHZhcmlvdXMgY2xvY2tzIGVuYWJsZWQuCisgKiBEaXNhYmxlIGFueSBjbG9ja3MgdGhhdCBiZWxvbmcgdG8gdXMgKENMS0ZMQUdfQVVUT19PRkYpIGJ1dCBoYXZlCisgKiBub3QgYmVlbiBleHBsaWNpdGx5IGVuYWJsZWQgYnkgYSBjbGtfZW5hYmxlKCkgY2FsbC4KKyAqLworc3RhdGljIGludCBfX2luaXQgY2xvY2tfbGF0ZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgY291bnQgPSAwOworCisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaywgJmNsb2NrcywgbGlzdCkgeworCQlpZiAoY2xrLT5mbGFncyAmIENMS0ZMQUdfQVVUT19PRkYpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFjbGstPmNvdW50KSB7CisJCQkJY291bnQrKzsKKwkJCQlwY19jbGtfZGlzYWJsZShjbGstPmlkKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCXByX2luZm8oImNsb2NrX2xhdGVfaW5pdCgpIGRpc2FibGVkICVkIHVudXNlZCBjbG9ja3NcbiIsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChjbG9ja19sYXRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3NWUxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmgKQEAgLTAsMCArMSw0OCBAQAorLyogYXJjaC9hcm0vbWFjaC1tc20vY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NU01fQ0xPQ0tfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfTVNNX0NMT0NLX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2RlZmluZSBDTEtGTEFHX0lOVkVSVAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ0xLRkxBR19OT0lOVkVSVAkJMHgwMDAwMDAwMgorI2RlZmluZSBDTEtGTEFHX05PTkVTVAkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ0xLRkxBR19OT1JFU0VUCQkJMHgwMDAwMDAwOAorCisjZGVmaW5lIENMS19GSVJTVF9BVkFJTEFCTEVfRkxBRwkweDAwMDAwMTAwCisjZGVmaW5lIENMS0ZMQUdfVVNFX01JTl9NQVhfVE9fU0VUCTB4MDAwMDAyMDAKKyNkZWZpbmUgQ0xLRkxBR19BVVRPX09GRgkJMHgwMDAwMDQwMAorCitzdHJ1Y3QgY2xrIHsKKwl1aW50MzJfdCBpZDsKKwl1aW50MzJfdCBjb3VudDsKKwl1aW50MzJfdCBmbGFnczsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cit9OworCisjZGVmaW5lIEExMVNfQ0xLX0NOVExfQUREUgkJKE1TTV9DU1JfQkFTRSArIDB4MTAwKQorI2RlZmluZSBBMTFTX0NMS19TRUxfQUREUgkJKE1TTV9DU1JfQkFTRSArIDB4MTA0KQorI2RlZmluZSBBMTFTX1ZERF9TVlNfUExFVkVMX0FERFIJKE1TTV9DU1JfQkFTRSArIDB4MTI0KQorCitleHRlcm4gc3RydWN0IGNsayBtc21fY2xvY2tzW107CitleHRlcm4gdW5zaWduZWQgbXNtX251bV9jbG9ja3M7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtbXNtL2NvbW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDRmOGFkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2NvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtbXNtL2NvbW1vbi5jCi0gKgotICogQ29tbW9uIHNldHVwIGNvZGUgZm9yIE1TTTdLIEJvYXJkcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KLSAqIEF1dGhvcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKLSAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KLQotc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgbXNtX25hbmRfZGF0YSA9IHsKLQkucGFydHMJCT0gMCwKLQkubnJfcGFydHMJPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtc21fbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDcsCi0JCS5lbmQJPSA3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtc21fbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtc21fbmFuZF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG1zbV9uYW5kX3Jlc291cmNlcywKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbXNtX25hbmRfZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX3NtZF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAibXNtX3NtZCIsCi0JLmlkCT0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1zbV9pMmNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBNU01fSTJDX0JBU0UsCi0JCS5lbmQJPSBNU01fSTJDX0JBU0UgKyBNU01fSTJDX1NJWkUgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gSU5UX1BXQl9JMkMsCi0JCS5lbmQJPSBJTlRfUFdCX0kyQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9pMmNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtc21faTJjIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXNtX2kyY19yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG1zbV9pMmNfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBNU01fSFNVU0JfUEhZUywKLQkJLmVuZAk9IE1TTV9IU1VTQl9QSFlTICsgTVNNX0hTVVNCX1NJWkUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJPSBJTlRfVVNCX0hTLAotCQkuZW5kCT0gSU5UX1VTQl9IUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9oc3VzYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm1zbV9oc3VzYiIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSB1c2JfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm1zbV9uYW5kX2RldmljZSwKLQkmbXNtX3NtZF9kZXZpY2UsCi0JJm1zbV9pMmNfZGV2aWNlLAotCSZtc21faHN1c2JfZGV2aWNlLAotfTsKLQotdm9pZCBfX2luaXQgbXNtX2FkZF9kZXZpY2VzKHZvaWQpCi17Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhNzRiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMuYwpAQCAtMCwwICsxLDI2NyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX3VhcnQxW10gPSB7CisJeworCQkuc3RhcnQJPSBJTlRfVUFSVDEsCisJCS5lbmQJPSBJTlRfVUFSVDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJPSBNU01fVUFSVDFfUEhZUywKKwkJLmVuZAk9IE1TTV9VQVJUMV9QSFlTICsgTVNNX1VBUlQxX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNfdWFydDJbXSA9IHsKKwl7CisJCS5zdGFydAk9IElOVF9VQVJUMiwKKwkJLmVuZAk9IElOVF9VQVJUMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAk9IE1TTV9VQVJUMl9QSFlTLAorCQkuZW5kCT0gTVNNX1VBUlQyX1BIWVMgKyBNU01fVUFSVDJfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc191YXJ0M1tdID0geworCXsKKwkJLnN0YXJ0CT0gSU5UX1VBUlQzLAorCQkuZW5kCT0gSU5UX1VBUlQzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gTVNNX1VBUlQzX1BIWVMsCisJCS5lbmQJPSBNU01fVUFSVDNfUEhZUyArIE1TTV9VQVJUM19TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV91YXJ0MSA9IHsKKwkubmFtZQk9ICJtc21fc2VyaWFsIiwKKwkuaWQJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfdWFydDEpLAorCS5yZXNvdXJjZQk9IHJlc291cmNlc191YXJ0MSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV91YXJ0MiA9IHsKKwkubmFtZQk9ICJtc21fc2VyaWFsIiwKKwkuaWQJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfdWFydDIpLAorCS5yZXNvdXJjZQk9IHJlc291cmNlc191YXJ0MiwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV91YXJ0MyA9IHsKKwkubmFtZQk9ICJtc21fc2VyaWFsIiwKKwkuaWQJPSAyLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfdWFydDMpLAorCS5yZXNvdXJjZQk9IHJlc291cmNlc191YXJ0MywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX2kyY1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVNNX0kyQ19QSFlTLAorCQkuZW5kCT0gTVNNX0kyQ19QSFlTICsgTVNNX0kyQ19TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9QV0JfSTJDLAorCQkuZW5kCT0gSU5UX1BXQl9JMkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaTJjID0geworCS5uYW1lCQk9ICJtc21faTJjIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVzb3VyY2VzX2kyYyksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX2kyYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX2hzdXNiW10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fSFNVU0JfUEhZUywKKwkJLmVuZAk9IE1TTV9IU1VTQl9QSFlTICsgTVNNX0hTVVNCX1NJWkUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfVVNCX0hTLAorCQkuZW5kCT0gSU5UX1VTQl9IUywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9oc3VzYiA9IHsKKwkubmFtZQkJPSAibXNtX2hzdXNiIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc19oc3VzYiksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX2hzdXNiLAorCS5kZXYJCT0geworCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCit9OworCitzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBtc21fbmFuZF9kYXRhID0geworCS5wYXJ0cwkJPSBOVUxMLAorCS5ucl9wYXJ0cwk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19uYW5kW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSA3LAorCQkuZW5kCT0gNywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9uYW5kID0geworCS5uYW1lCQk9ICJtc21fbmFuZCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfbmFuZCksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX25hbmQsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1zbV9uYW5kX2RhdGEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zbWQgPSB7CisJLm5hbWUJPSAibXNtX3NtZCIsCisJLmlkCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19zZGMxW10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fU0RDMV9QSFlTLAorCQkuZW5kCT0gTVNNX1NEQzFfUEhZUyArIE1TTV9TREMxX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UX1NEQzFfMCwKKwkJLmVuZAk9IElOVF9TREMxXzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJPSA4LAorCQkuZW5kCT0gOCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX3NkYzJbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1TTV9TREMyX1BIWVMsCisJCS5lbmQJPSBNU01fU0RDMl9QSFlTICsgTVNNX1NEQzJfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfU0RDMl8wLAorCQkuZW5kCT0gSU5UX1NEQzJfMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAk9IDgsCisJCS5lbmQJPSA4LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNfc2RjM1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVNNX1NEQzNfUEhZUywKKwkJLmVuZAk9IE1TTV9TREMzX1BIWVMgKyBNU01fU0RDM19TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9TREMzXzAsCisJCS5lbmQJPSBJTlRfU0RDM18xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gOCwKKwkJLmVuZAk9IDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19zZGM0W10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fU0RDNF9QSFlTLAorCQkuZW5kCT0gTVNNX1NEQzRfUEhZUyArIE1TTV9TREM0X1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UX1NEQzRfMCwKKwkJLmVuZAk9IElOVF9TREM0XzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJPSA4LAorCQkuZW5kCT0gOCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGMxID0geworCS5uYW1lCQk9ICJtc21fc2RjYyIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc19zZGMxKSwKKwkucmVzb3VyY2UJPSByZXNvdXJjZXNfc2RjMSwKKwkuZGV2CQk9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3NkYzIgPSB7CisJLm5hbWUJCT0gIm1zbV9zZGNjIiwKKwkuaWQJCT0gMiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVzb3VyY2VzX3NkYzIpLAorCS5yZXNvdXJjZQk9IHJlc291cmNlc19zZGMyLAorCS5kZXYJCT0geworCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc2RjMyA9IHsKKwkubmFtZQkJPSAibXNtX3NkY2MiLAorCS5pZAkJPSAzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfc2RjMyksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX3NkYzMsCisJLmRldgkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGM0ID0geworCS5uYW1lCQk9ICJtc21fc2RjYyIsCisJLmlkCQk9IDQsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc19zZGM0KSwKKwkucmVzb3VyY2UJPSByZXNvdXJjZXNfc2RjNCwKKwkuZGV2CQk9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ0YzRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NU01fREVWSUNFU19ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NU01fREVWSUNFU19ICisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfdWFydDE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3VhcnQyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV91YXJ0MzsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGMxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGMyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGMzOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGM0OworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2hzdXNiOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2kyYzsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zbWQ7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfbmFuZDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9kbWEuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2RtYS5jCmluZGV4IDBjOGYyNTIuLmY1NDIwZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2RtYS5jCkBAIC0yNiw3ICsyNiw3IEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1zbV9kbW92X2xvY2spOwotc3RhdGljIHN0cnVjdCBtc21fZG1vdl9jbWQgYWN0aXZlX2NvbW1hbmQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGNoYW5uZWxfYWN0aXZlOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcmVhZHlfY29tbWFuZHNbTVNNX0RNT1ZfQ0hBTk5FTF9DT1VOVF07CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfY29tbWFuZHNbTVNNX0RNT1ZfQ0hBTk5FTF9DT1VOVF07CiB1bnNpZ25lZCBpbnQgbXNtX2Rtb3ZfcHJpbnRfbWFzayA9IE1TTV9ETU9WX1BSSU5UX0VSUk9SUzsKQEAgLTQzLDYgKzQzLDExIEBACiAjZGVmaW5lIFBSSU5UX0ZMT1coZm9ybWF0LCBhcmdzLi4uKSBcCiAJTVNNX0RNT1ZfRFBSSU5URihNU01fRE1PVl9QUklOVF9GTE9XLCBmb3JtYXQsIGFyZ3MpOwogCit2b2lkIG1zbV9kbW92X3N0b3BfY21kKHVuc2lnbmVkIGlkLCBzdHJ1Y3QgbXNtX2Rtb3ZfY21kICpjbWQsIGludCBncmFjZWZ1bCkKK3sKKwl3cml0ZWwoKGdyYWNlZnVsIDw8IDMxKSwgRE1PVl9GTFVTSDAoaWQpKTsKK30KKwogdm9pZCBtc21fZG1vdl9lbnF1ZXVlX2NtZCh1bnNpZ25lZCBpZCwgc3RydWN0IG1zbV9kbW92X2NtZCAqY21kKQogewogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwpAQCAtNjAsNiArNjUsOSBAQAogI2VuZGlmCiAJCVBSSU5UX0lPKCJtc21fZG1vdl9lbnF1ZXVlX2NtZCglZCksIHN0YXJ0IGNvbW1hbmQsIHN0YXR1cyAleFxuIiwgaWQsIHN0YXR1cyk7CiAJCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmFjdGl2ZV9jb21tYW5kc1tpZF0pOworCQlpZiAoIWNoYW5uZWxfYWN0aXZlKQorCQkJZW5hYmxlX2lycShJTlRfQURNX0FBUk0pOworCQljaGFubmVsX2FjdGl2ZSB8PSAxVSA8PCBpZDsKIAkJd3JpdGVsKGNtZC0+Y21kcHRyLCBETU9WX0NNRF9QVFIoaWQpKTsKIAl9IGVsc2UgewogCQlpZiAobGlzdF9lbXB0eSgmYWN0aXZlX2NvbW1hbmRzW2lkXSkpCkBAIC03NiwyMSArODQsMTkgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZTsKIAl1bnNpZ25lZCBpZDsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0OwotCXVuc2lnbmVkIGludCBmbHVzaFs2XTsKKwlzdHJ1Y3QgbXNtX2Rtb3ZfZXJyZGF0YSBlcnI7CiB9OwogCi1zdGF0aWMgdm9pZCBkbW92X2V4ZWNfY21kcHRyX2NvbXBsZXRlX2Z1bmMoc3RydWN0IG1zbV9kbW92X2NtZCAqX2NtZCwgdW5zaWduZWQgaW50IHJlc3VsdCkKK3N0YXRpYyB2b2lkCitkbW92X2V4ZWNfY21kcHRyX2NvbXBsZXRlX2Z1bmMoc3RydWN0IG1zbV9kbW92X2NtZCAqX2NtZCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVzdWx0LAorCQkJICAgICAgIHN0cnVjdCBtc21fZG1vdl9lcnJkYXRhICplcnIpCiB7CiAJc3RydWN0IG1zbV9kbW92X2V4ZWNfY21kcHRyX2NtZCAqY21kID0gY29udGFpbmVyX29mKF9jbWQsIHN0cnVjdCBtc21fZG1vdl9leGVjX2NtZHB0cl9jbWQsIGRtb3ZfY21kKTsKIAljbWQtPnJlc3VsdCA9IHJlc3VsdDsKLQlpZiAocmVzdWx0ICE9IDB4ODAwMDAwMDIpIHsKLQkJY21kLT5mbHVzaFswXSA9IHJlYWRsKERNT1ZfRkxVU0gwKGNtZC0+aWQpKTsKLQkJY21kLT5mbHVzaFsxXSA9IHJlYWRsKERNT1ZfRkxVU0gxKGNtZC0+aWQpKTsKLQkJY21kLT5mbHVzaFsyXSA9IHJlYWRsKERNT1ZfRkxVU0gyKGNtZC0+aWQpKTsKLQkJY21kLT5mbHVzaFszXSA9IHJlYWRsKERNT1ZfRkxVU0gzKGNtZC0+aWQpKTsKLQkJY21kLT5mbHVzaFs0XSA9IHJlYWRsKERNT1ZfRkxVU0g0KGNtZC0+aWQpKTsKLQkJY21kLT5mbHVzaFs1XSA9IHJlYWRsKERNT1ZfRkxVU0g1KGNtZC0+aWQpKTsKLQl9CisJaWYgKHJlc3VsdCAhPSAweDgwMDAwMDAyICYmIGVycikKKwkJbWVtY3B5KCZjbWQtPmVyciwgZXJyLCBzaXplb2Yoc3RydWN0IG1zbV9kbW92X2VycmRhdGEpKTsKKwogCWNvbXBsZXRlKCZjbWQtPmNvbXBsZXRlKTsKIH0KIApAQCAtMTExLDcgKzExNyw3IEBACiAJaWYgKGNtZC5yZXN1bHQgIT0gMHg4MDAwMDAwMikgewogCQlQUklOVF9FUlJPUigiZG1vdl9leGVjX2NtZHB0ciglZCk6IEVSUk9SLCByZXN1bHQ6ICV4XG4iLCBpZCwgY21kLnJlc3VsdCk7CiAJCVBSSU5UX0VSUk9SKCJkbW92X2V4ZWNfY21kcHRyKCVkKTogIGZsdXNoOiAleCAleCAleCAleFxuIiwKLQkJCWlkLCBjbWQuZmx1c2hbMF0sIGNtZC5mbHVzaFsxXSwgY21kLmZsdXNoWzJdLCBjbWQuZmx1c2hbM10pOworCQkJaWQsIGNtZC5lcnIuZmx1c2hbMF0sIGNtZC5lcnIuZmx1c2hbMV0sIGNtZC5lcnIuZmx1c2hbMl0sIGNtZC5lcnIuZmx1c2hbM10pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJUFJJTlRfRkxPVygiZG1vdl9leGVjX2NtZHB0ciglZCwgJXgpIGRvbmVcbiIsIGlkLCBjbWRwdHIpOwpAQCAtMTU5LDI1ICsxNjUsNDAgQEAKIAkJCQkJImZvciAlcCwgcmVzdWx0ICV4XG4iLCBpZCwgY21kLCBjaF9yZXN1bHQpOwogCQkJCWlmIChjbWQpIHsKIAkJCQkJbGlzdF9kZWwoJmNtZC0+bGlzdCk7Ci0JCQkJCWNtZC0+Y29tcGxldGVfZnVuYyhjbWQsIGNoX3Jlc3VsdCk7CisJCQkJCWNtZC0+Y29tcGxldGVfZnVuYyhjbWQsIGNoX3Jlc3VsdCwgTlVMTCk7CiAJCQkJfQogCQkJfQogCQkJaWYgKGNoX3Jlc3VsdCAmIERNT1ZfUlNMVF9GTFVTSCkgewotCQkJCXVuc2lnbmVkIGludCBmbHVzaDAgPSByZWFkbChETU9WX0ZMVVNIMChpZCkpOworCQkJCXN0cnVjdCBtc21fZG1vdl9lcnJkYXRhIGVycmRhdGE7CisKKwkJCQllcnJkYXRhLmZsdXNoWzBdID0gcmVhZGwoRE1PVl9GTFVTSDAoaWQpKTsKKwkJCQllcnJkYXRhLmZsdXNoWzFdID0gcmVhZGwoRE1PVl9GTFVTSDEoaWQpKTsKKwkJCQllcnJkYXRhLmZsdXNoWzJdID0gcmVhZGwoRE1PVl9GTFVTSDIoaWQpKTsKKwkJCQllcnJkYXRhLmZsdXNoWzNdID0gcmVhZGwoRE1PVl9GTFVTSDMoaWQpKTsKKwkJCQllcnJkYXRhLmZsdXNoWzRdID0gcmVhZGwoRE1PVl9GTFVTSDQoaWQpKTsKKwkJCQllcnJkYXRhLmZsdXNoWzVdID0gcmVhZGwoRE1PVl9GTFVTSDUoaWQpKTsKIAkJCQlQUklOVF9GTE9XKCJtc21fZGF0YW1vdmVyX2lycV9oYW5kbGVyIGlkICVkLCBzdGF0dXMgJXhcbiIsIGlkLCBjaF9zdGF0dXMpOwotCQkJCVBSSU5UX0ZMT1coIm1zbV9kYXRhbW92ZXJfaXJxX2hhbmRsZXIgaWQgJWQsIGZsdXNoLCByZXN1bHQgJXgsIGZsdXNoMCAleFxuIiwgaWQsIGNoX3Jlc3VsdCwgZmx1c2gwKTsKKwkJCQlQUklOVF9GTE9XKCJtc21fZGF0YW1vdmVyX2lycV9oYW5kbGVyIGlkICVkLCBmbHVzaCwgcmVzdWx0ICV4LCBmbHVzaDAgJXhcbiIsIGlkLCBjaF9yZXN1bHQsIGVycmRhdGEuZmx1c2hbMF0pOwogCQkJCWlmIChjbWQpIHsKIAkJCQkJbGlzdF9kZWwoJmNtZC0+bGlzdCk7Ci0JCQkJCWNtZC0+Y29tcGxldGVfZnVuYyhjbWQsIGNoX3Jlc3VsdCk7CisJCQkJCWNtZC0+Y29tcGxldGVfZnVuYyhjbWQsIGNoX3Jlc3VsdCwgJmVycmRhdGEpOwogCQkJCX0KIAkJCX0KIAkJCWlmIChjaF9yZXN1bHQgJiBETU9WX1JTTFRfRVJST1IpIHsKLQkJCQl1bnNpZ25lZCBpbnQgZmx1c2gwID0gcmVhZGwoRE1PVl9GTFVTSDAoaWQpKTsKKwkJCQlzdHJ1Y3QgbXNtX2Rtb3ZfZXJyZGF0YSBlcnJkYXRhOworCisJCQkJZXJyZGF0YS5mbHVzaFswXSA9IHJlYWRsKERNT1ZfRkxVU0gwKGlkKSk7CisJCQkJZXJyZGF0YS5mbHVzaFsxXSA9IHJlYWRsKERNT1ZfRkxVU0gxKGlkKSk7CisJCQkJZXJyZGF0YS5mbHVzaFsyXSA9IHJlYWRsKERNT1ZfRkxVU0gyKGlkKSk7CisJCQkJZXJyZGF0YS5mbHVzaFszXSA9IHJlYWRsKERNT1ZfRkxVU0gzKGlkKSk7CisJCQkJZXJyZGF0YS5mbHVzaFs0XSA9IHJlYWRsKERNT1ZfRkxVU0g0KGlkKSk7CisJCQkJZXJyZGF0YS5mbHVzaFs1XSA9IHJlYWRsKERNT1ZfRkxVU0g1KGlkKSk7CisKIAkJCQlQUklOVF9FUlJPUigibXNtX2RhdGFtb3Zlcl9pcnFfaGFuZGxlciBpZCAlZCwgc3RhdHVzICV4XG4iLCBpZCwgY2hfc3RhdHVzKTsKLQkJCQlQUklOVF9FUlJPUigibXNtX2RhdGFtb3Zlcl9pcnFfaGFuZGxlciBpZCAlZCwgZXJyb3IsIHJlc3VsdCAleCwgZmx1c2gwICV4XG4iLCBpZCwgY2hfcmVzdWx0LCBmbHVzaDApOworCQkJCVBSSU5UX0VSUk9SKCJtc21fZGF0YW1vdmVyX2lycV9oYW5kbGVyIGlkICVkLCBlcnJvciwgcmVzdWx0ICV4LCBmbHVzaDAgJXhcbiIsIGlkLCBjaF9yZXN1bHQsIGVycmRhdGEuZmx1c2hbMF0pOwogCQkJCWlmIChjbWQpIHsKIAkJCQkJbGlzdF9kZWwoJmNtZC0+bGlzdCk7Ci0JCQkJCWNtZC0+Y29tcGxldGVfZnVuYyhjbWQsIGNoX3Jlc3VsdCk7CisJCQkJCWNtZC0+Y29tcGxldGVfZnVuYyhjbWQsIGNoX3Jlc3VsdCwgJmVycmRhdGEpOwogCQkJCX0KIAkJCQkvKiB0aGlzIGRvZXMgbm90IHNlZW0gdG8gd29yaywgb25jZSB3ZSBnZXQgYW4gZXJyb3IgKi8KIAkJCQkvKiB0aGUgZGF0YW1vdmVyIHdpbGwgbm8gbG9uZ2VyIGFjY2VwdCBjb21tYW5kcyAqLwpAQCAtMTkzLDggKzIxNCwxNCBAQAogCQkJCXdyaXRlbChjbWQtPmNtZHB0ciwgRE1PVl9DTURfUFRSKGlkKSk7CiAJCQl9CiAJCX0gd2hpbGUgKGNoX3N0YXR1cyAmIERNT1ZfU1RBVFVTX1JTTFRfVkFMSUQpOworCQlpZiAobGlzdF9lbXB0eSgmYWN0aXZlX2NvbW1hbmRzW2lkXSkgJiYgbGlzdF9lbXB0eSgmcmVhZHlfY29tbWFuZHNbaWRdKSkKKwkJCWNoYW5uZWxfYWN0aXZlICY9IH4oMVUgPDwgaWQpOwogCQlQUklOVF9GTE9XKCJtc21fZGF0YW1vdmVyX2lycV9oYW5kbGVyIGlkICVkLCBzdGF0dXMgJXhcbiIsIGlkLCBjaF9zdGF0dXMpOwogCX0KKworCWlmICghY2hhbm5lbF9hY3RpdmUpCisJCWRpc2FibGVfaXJxKElOVF9BRE1fQUFSTSk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21fZG1vdl9sb2NrLCBpcnFfZmxhZ3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIwMiwxMiArMjI5LDE3IEBACiBzdGF0aWMgaW50IF9faW5pdCBtc21faW5pdF9kYXRhbW92ZXIodm9pZCkKIHsKIAlpbnQgaTsKKwlpbnQgcmV0OwogCWZvciAoaSA9IDA7IGkgPCBNU01fRE1PVl9DSEFOTkVMX0NPVU5UOyBpKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJnJlYWR5X2NvbW1hbmRzW2ldKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmFjdGl2ZV9jb21tYW5kc1tpXSk7CiAJCXdyaXRlbChETU9WX0NPTkZJR19JUlFfRU4gfCBETU9WX0NPTkZJR19GT1JDRV9UT1BfUFRSX1JTTFQgfCBETU9WX0NPTkZJR19GT1JDRV9GTFVTSF9SU0xULCBETU9WX0NPTkZJRyhpKSk7CiAJfQotCXJldHVybiByZXF1ZXN0X2lycShJTlRfQURNX0FBUk0sIG1zbV9kYXRhbW92ZXJfaXJxX2hhbmRsZXIsIDAsICJtc21kYXRhbW92ZXIiLCBOVUxMKTsKKwlyZXQgPSByZXF1ZXN0X2lycShJTlRfQURNX0FBUk0sIG1zbV9kYXRhbW92ZXJfaXJxX2hhbmRsZXIsIDAsICJtc21kYXRhbW92ZXIiLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWRpc2FibGVfaXJxKElOVF9BRE1fQUFSTSk7CisJcmV0dXJuIDA7CiB9CiAKIGFyY2hfaW5pdGNhbGwobXNtX2luaXRfZGF0YW1vdmVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2JvYXJkLmgKaW5kZXggYTc2Mzk0OS4uMjY0ZDYyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTMzLDUgKzMzLDYgQEAKIHZvaWQgX19pbml0IG1zbV9tYXBfY29tbW9uX2lvKHZvaWQpOwogdm9pZCBfX2luaXQgbXNtX2luaXRfaXJxKHZvaWQpOwogdm9pZCBfX2luaXQgbXNtX2luaXRfZ3Bpbyh2b2lkKTsKK3ZvaWQgX19pbml0IG1zbV9jbG9ja19pbml0KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNTI4ZWVmNC4uMWRiM2M5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTIyLDE4ICsyMiwyMiBAQAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEKIAlsZHJlcQlccngsID1NU01fVUFSVDFfUEhZUwotCWxkcm5lCVxyeCwgPU1TTV9VQVJUMV9CQVNFCisJbW92bmUJXHJ4LCAjMAogCS5lbmRtCiAKIAkubWFjcm8Jc2VuZHVhcnQscmQscngKLQlzdHIJXHJkLCBbXHJ4LCAjMHgwQ10KKwl0ZXEJXHJ4LCAjMAorCXN0cm5lCVxyZCwgW1xyeCwgIzB4MENdCiAJLmVuZG0KIAogCS5tYWNybwl3YWl0dWFydCxyZCxyeAogCUAgd2FpdCBmb3IgVFhfUkVBRFkKKwl0ZXEJXHJ4LCAjMAorCWJuZQkyZgogMToJbGRyCVxyZCwgW1xyeCwgIzB4MDhdCiAJdHN0CVxyZCwgIzB4MDQKIAliZXEJMWIKKzI6CiAJLmVuZG0KIAogCS5tYWNybwlidXN5dWFydCxyZCxyeApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IGFkMWM4N2YuLjVhYjViZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTEsNCArMSw0IEBACi0vKiBhcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvZG1hLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW1zbS9kbWEuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KICAqCkBAIC0xOCwxNyArMTgsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KIAorc3RydWN0IG1zbV9kbW92X2VycmRhdGEgeworCXVpbnQzMl90IGZsdXNoWzZdOworfTsKKwogc3RydWN0IG1zbV9kbW92X2NtZCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXVuc2lnbmVkIGludCBjbWRwdHI7Ci0Jdm9pZCAoKmNvbXBsZXRlX2Z1bmMpKHN0cnVjdCBtc21fZG1vdl9jbWQgKmNtZCwgdW5zaWduZWQgaW50IHJlc3VsdCk7Ci0vKgl2b2lkICgqdXNlcl9yZXN1bHRfZnVuYykoc3RydWN0IG1zbV9kbW92X2NtZCAqY21kKTsgKi8KKwl2b2lkICgqY29tcGxldGVfZnVuYykoc3RydWN0IG1zbV9kbW92X2NtZCAqY21kLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJlc3VsdCwKKwkJCSAgICAgIHN0cnVjdCBtc21fZG1vdl9lcnJkYXRhICplcnIpOwogfTsKIAogdm9pZCBtc21fZG1vdl9lbnF1ZXVlX2NtZCh1bnNpZ25lZCBpZCwgc3RydWN0IG1zbV9kbW92X2NtZCAqY21kKTsKLXZvaWQgbXNtX2Rtb3Zfc3RvcF9jbWQodW5zaWduZWQgaWQsIHN0cnVjdCBtc21fZG1vdl9jbWQgKmNtZCk7Cit2b2lkIG1zbV9kbW92X3N0b3BfY21kKHVuc2lnbmVkIGlkLCBzdHJ1Y3QgbXNtX2Rtb3ZfY21kICpjbWQsIGludCBncmFjZWZ1bCk7CiBpbnQgbXNtX2Rtb3ZfZXhlY19jbWQodW5zaWduZWQgaWQsIHVuc2lnbmVkIGludCBjbWRwdHIpOwotLyogaW50IG1zbV9kbW92X2V4ZWNfY21kX2V0Yyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgaW50IGNtZHB0ciwgaW50IHRpbWVvdXQsIGludCBpbnRlcnJ1cHRpYmxlKTsgKi8KIAogCiAKQEAgLTEyMiw2ICsxMjYsMTYgQEAKIAl1bnNpZ25lZCBfcmVzZXJ2ZWQ7CiB9IGRtb3Zfc2c7CiAKKy8qIEJveCBtb2RlICovCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3QgY21kOworCXVpbnQzMl90IHNyY19yb3dfYWRkcjsKKwl1aW50MzJfdCBkc3Rfcm93X2FkZHI7CisJdWludDMyX3Qgc3JjX2RzdF9sZW47CisJdWludDMyX3QgbnVtX3Jvd3M7CisJdWludDMyX3Qgcm93X29mZnNldDsKK30gZG1vdl9ib3g7CisKIC8qIGJpdHMgZm9yIHRoZSBjbWQgZmllbGQgb2YgdGhlIGFib3ZlIHN0cnVjdHVyZXMgKi8KIAogI2RlZmluZSBDTURfTEMgICAgICAoMSA8PCAzMSkgIC8qIGxhc3QgY29tbWFuZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oCmluZGV4IGUyMjFmNTguLjJmN2I0YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLmgKQEAgLTM3LDExICszNywxNyBAQAogICoKICAqLwogCi0jZGVmaW5lIE1TTV9WSUNfQkFTRSAgICAgICAgICAweEUwMDAwMDAwCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIElPTUVNKHgpCXgKKyNlbHNlCisjZGVmaW5lIElPTUVNKHgpCSgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikoeCkpCisjZW5kaWYKKworI2RlZmluZSBNU01fVklDX0JBU0UgICAgICAgICAgSU9NRU0oMHhFMDAwMDAwMCkKICNkZWZpbmUgTVNNX1ZJQ19QSFlTICAgICAgICAgIDB4QzAwMDAwMDAKICNkZWZpbmUgTVNNX1ZJQ19TSVpFICAgICAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX0NTUl9CQVNFICAgICAgICAgIDB4RTAwMDEwMDAKKyNkZWZpbmUgTVNNX0NTUl9CQVNFICAgICAgICAgIElPTUVNKDB4RTAwMDEwMDApCiAjZGVmaW5lIE1TTV9DU1JfUEhZUyAgICAgICAgICAweEMwMTAwMDAwCiAjZGVmaW5lIE1TTV9DU1JfU0laRSAgICAgICAgICBTWl80SwogCkBAIC00OSw1NiArNTUsNjcgQEAKICNkZWZpbmUgTVNNX0dQVF9CQVNFICAgICAgICAgIE1TTV9DU1JfQkFTRQogI2RlZmluZSBNU01fR1BUX1NJWkUgICAgICAgICAgU1pfNEsKIAotI2RlZmluZSBNU01fRE1PVl9CQVNFICAgICAgICAgMHhFMDAwMjAwMAorI2RlZmluZSBNU01fRE1PVl9CQVNFICAgICAgICAgSU9NRU0oMHhFMDAwMjAwMCkKICNkZWZpbmUgTVNNX0RNT1ZfUEhZUyAgICAgICAgIDB4QTk3MDAwMDAKICNkZWZpbmUgTVNNX0RNT1ZfU0laRSAgICAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX1VBUlQxX0JBU0UgICAgICAgIDB4RTAwMDMwMDAKLSNkZWZpbmUgTVNNX1VBUlQxX1BIWVMgICAgICAgIDB4QTlBMDAwMDAKLSNkZWZpbmUgTVNNX1VBUlQxX1NJWkUgICAgICAgIFNaXzRLCi0KLSNkZWZpbmUgTVNNX1VBUlQyX0JBU0UgICAgICAgIDB4RTAwMDQwMDAKLSNkZWZpbmUgTVNNX1VBUlQyX1BIWVMgICAgICAgIDB4QTlCMDAwMDAKLSNkZWZpbmUgTVNNX1VBUlQyX1NJWkUgICAgICAgIFNaXzRLCi0KLSNkZWZpbmUgTVNNX1VBUlQzX0JBU0UgICAgICAgIDB4RTAwMDUwMDAKLSNkZWZpbmUgTVNNX1VBUlQzX1BIWVMgICAgICAgIDB4QTlDMDAwMDAKLSNkZWZpbmUgTVNNX1VBUlQzX1NJWkUgICAgICAgIFNaXzRLCi0KLSNkZWZpbmUgTVNNX0kyQ19CQVNFICAgICAgICAgIDB4RTAwMDYwMDAKLSNkZWZpbmUgTVNNX0kyQ19QSFlTICAgICAgICAgIDB4QTk5MDAwMDAKLSNkZWZpbmUgTVNNX0kyQ19TSVpFICAgICAgICAgIFNaXzRLCi0KLSNkZWZpbmUgTVNNX0dQSU8xX0JBU0UgICAgICAgIDB4RTAwMDcwMDAKKyNkZWZpbmUgTVNNX0dQSU8xX0JBU0UgICAgICAgIElPTUVNKDB4RTAwMDMwMDApCiAjZGVmaW5lIE1TTV9HUElPMV9QSFlTICAgICAgICAweEE5MjAwMDAwCiAjZGVmaW5lIE1TTV9HUElPMV9TSVpFICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9HUElPMl9CQVNFICAgICAgICAweEUwMDA4MDAwCisjZGVmaW5lIE1TTV9HUElPMl9CQVNFICAgICAgICBJT01FTSgweEUwMDA0MDAwKQogI2RlZmluZSBNU01fR1BJTzJfUEhZUyAgICAgICAgMHhBOTMwMDAwMAogI2RlZmluZSBNU01fR1BJTzJfU0laRSAgICAgICAgU1pfNEsKIAotI2RlZmluZSBNU01fSFNVU0JfQkFTRSAgICAgICAgMHhFMDAwOTAwMAotI2RlZmluZSBNU01fSFNVU0JfUEhZUyAgICAgICAgMHhBMDgwMDAwMAotI2RlZmluZSBNU01fSFNVU0JfU0laRSAgICAgICAgU1pfNEsKLQotI2RlZmluZSBNU01fQ0xLX0NUTF9CQVNFICAgICAgMHhFMDAwQTAwMAorI2RlZmluZSBNU01fQ0xLX0NUTF9CQVNFICAgICAgSU9NRU0oMHhFMDAwNTAwMCkKICNkZWZpbmUgTVNNX0NMS19DVExfUEhZUyAgICAgIDB4QTg2MDAwMDAKICNkZWZpbmUgTVNNX0NMS19DVExfU0laRSAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX1BNREhfQkFTRSAgICAgICAgIDB4RTAwMEIwMDAKKyNkZWZpbmUgTVNNX1NIQVJFRF9SQU1fQkFTRSAgIElPTUVNKDB4RTAxMDAwMDApCisjZGVmaW5lIE1TTV9TSEFSRURfUkFNX1BIWVMgICAweDAxRjAwMDAwCisjZGVmaW5lIE1TTV9TSEFSRURfUkFNX1NJWkUgICBTWl8xTQorCisjZGVmaW5lIE1TTV9VQVJUMV9QSFlTICAgICAgICAweEE5QTAwMDAwCisjZGVmaW5lIE1TTV9VQVJUMV9TSVpFICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9VQVJUMl9QSFlTICAgICAgICAweEE5QjAwMDAwCisjZGVmaW5lIE1TTV9VQVJUMl9TSVpFICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9VQVJUM19QSFlTICAgICAgICAweEE5QzAwMDAwCisjZGVmaW5lIE1TTV9VQVJUM19TSVpFICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9TREMxX1BIWVMgICAgICAgICAweEEwNDAwMDAwCisjZGVmaW5lIE1TTV9TREMxX1NJWkUgICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9TREMyX1BIWVMgICAgICAgICAweEEwNTAwMDAwCisjZGVmaW5lIE1TTV9TREMyX1NJWkUgICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9TREMzX1BIWVMgICAgICAgICAweEEwNjAwMDAwCisjZGVmaW5lIE1TTV9TREMzX1NJWkUgICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9TREM0X1BIWVMgICAgICAgICAweEEwNzAwMDAwCisjZGVmaW5lIE1TTV9TREM0X1NJWkUgICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9JMkNfUEhZUyAgICAgICAgICAweEE5OTAwMDAwCisjZGVmaW5lIE1TTV9JMkNfU0laRSAgICAgICAgICBTWl80SworCisjZGVmaW5lIE1TTV9IU1VTQl9QSFlTICAgICAgICAweEEwODAwMDAwCisjZGVmaW5lIE1TTV9IU1VTQl9TSVpFICAgICAgICBTWl80SworCiAjZGVmaW5lIE1TTV9QTURIX1BIWVMgICAgICAgICAweEFBNjAwMDAwCiAjZGVmaW5lIE1TTV9QTURIX1NJWkUgICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9FTURIX0JBU0UgICAgICAgICAweEUwMDBDMDAwCiAjZGVmaW5lIE1TTV9FTURIX1BIWVMgICAgICAgICAweEFBNzAwMDAwCiAjZGVmaW5lIE1TTV9FTURIX1NJWkUgICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9NRFBfQkFTRSAgICAgICAgICAweEUwMDEwMDAwCiAjZGVmaW5lIE1TTV9NRFBfUEhZUyAgICAgICAgICAweEFBMjAwMDAwCiAjZGVmaW5lIE1TTV9NRFBfU0laRSAgICAgICAgICAweDAwMEYwMDAwCiAKLSNkZWZpbmUgTVNNX1NIQVJFRF9SQU1fQkFTRSAgIDB4RTAxMDAwMDAKLSNkZWZpbmUgTVNNX1NIQVJFRF9SQU1fUEhZUyAgIDB4MDFGMDAwMDAKLSNkZWZpbmUgTVNNX1NIQVJFRF9SQU1fU0laRSAgIFNaXzFNCisjZGVmaW5lIE1TTV9NRENfUEhZUwkgICAgICAweEFBNTAwMDAwCisjZGVmaW5lIE1TTV9NRENfU0laRQkgICAgICBTWl8xTQorCisjZGVmaW5lIE1TTV9BRDVfUEhZUyAgICAgICAgICAweEFDMDAwMDAwCisjZGVmaW5lIE1TTV9BRDVfU0laRSAgICAgICAgICAoU1pfMU0qMTMpCisKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvdnJlZy5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3ZyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjllMjVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3ZyZWcuaApAQCAtMCwwICsxLDI5IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1tc20vdnJlZy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSwgSW5jLgorICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NU01fVlJFR19ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NU01fVlJFR19ICisKK3N0cnVjdCB2cmVnOworCitzdHJ1Y3QgdnJlZyAqdnJlZ19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCk7Cit2b2lkIHZyZWdfcHV0KHN0cnVjdCB2cmVnICp2cmVnKTsKKworaW50IHZyZWdfZW5hYmxlKHN0cnVjdCB2cmVnICp2cmVnKTsKK3ZvaWQgdnJlZ19kaXNhYmxlKHN0cnVjdCB2cmVnICp2cmVnKTsKK2ludCB2cmVnX3NldF9sZXZlbChzdHJ1Y3QgdnJlZyAqdnJlZywgdW5zaWduZWQgbXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9pby5jCmluZGV4IDc5OTllNGIuLjZlNzY5MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KIAogI2RlZmluZSBNU01fREVWSUNFKG5hbWUpIHsgXAotCQkudmlydHVhbCA9IE1TTV8jI25hbWUjI19CQVNFLCBcCisJCS52aXJ0dWFsID0gKHVuc2lnbmVkIGxvbmcpIE1TTV8jI25hbWUjI19CQVNFLCBcCiAJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1TTV8jI25hbWUjI19QSFlTKSwgXAogCQkubGVuZ3RoID0gTVNNXyMjbmFtZSMjX1NJWkUsIFwKIAkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVELCBcCkBAIC0zOSwxOSArMzksMTEgQEAKIAlNU01fREVWSUNFKENTUiksCiAJTVNNX0RFVklDRShHUFQpLAogCU1TTV9ERVZJQ0UoRE1PViksCi0JTVNNX0RFVklDRShVQVJUMSksCi0JTVNNX0RFVklDRShVQVJUMiksCi0JTVNNX0RFVklDRShVQVJUMyksCi0JTVNNX0RFVklDRShJMkMpLAogCU1TTV9ERVZJQ0UoR1BJTzEpLAogCU1TTV9ERVZJQ0UoR1BJTzIpLAotCU1TTV9ERVZJQ0UoSFNVU0IpLAogCU1TTV9ERVZJQ0UoQ0xLX0NUTCksCi0JTVNNX0RFVklDRShQTURIKSwKLQlNU01fREVWSUNFKEVNREgpLAotCU1TTV9ERVZJQ0UoTURQKSwKIAl7Ci0JCS52aXJ0dWFsID0gIE1TTV9TSEFSRURfUkFNX0JBU0UsCisJCS52aXJ0dWFsID0gICh1bnNpZ25lZCBsb25nKSBNU01fU0hBUkVEX1JBTV9CQVNFLAogCQkucGZuID0gICAgICBfX3BoeXNfdG9fcGZuKE1TTV9TSEFSRURfUkFNX1BIWVMpLAogCQkubGVuZ3RoID0gICBNU01fU0hBUkVEX1JBTV9TSVpFLAogCQkudHlwZSA9ICAgICBNVF9ERVZJQ0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2lycS5jCmluZGV4IDA0YjhkMTguLjY5Y2EwZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2lycS5jCkBAIC02NiwyMCArNjYsMjAgQEAKIAogc3RhdGljIHZvaWQgbXNtX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCByZWcgPSBWSUNfSU5UX0NMRUFSMCArICgoaXJxICYgMzIpID8gNCA6IDApOworCXZvaWQgX19pb21lbSAqcmVnID0gVklDX0lOVF9DTEVBUjAgKyAoKGlycSAmIDMyKSA/IDQgOiAwKTsKIAlpcnEgPSAxIDw8IChpcnEgJiAzMSk7CiAJd3JpdGVsKGlycSwgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgbXNtX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgcmVnID0gVklDX0lOVF9FTkNMRUFSMCArICgoaXJxICYgMzIpID8gNCA6IDApOworCXZvaWQgX19pb21lbSAqcmVnID0gVklDX0lOVF9FTkNMRUFSMCArICgoaXJxICYgMzIpID8gNCA6IDApOwogCXdyaXRlbCgxIDw8IChpcnEgJiAzMSksIHJlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1zbV9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgcmVnID0gVklDX0lOVF9FTlNFVDAgKyAoKGlycSAmIDMyKSA/IDQgOiAwKTsKKwl2b2lkIF9faW9tZW0gKnJlZyA9IFZJQ19JTlRfRU5TRVQwICsgKChpcnEgJiAzMikgPyA0IDogMCk7CiAJd3JpdGVsKDEgPDwgKGlycSAmIDMxKSwgcmVnKTsKIH0KIApAQCAtOTAsOCArOTAsOCBAQAogCiBzdGF0aWMgaW50IG1zbV9pcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQl1bnNpZ25lZCB0cmVnID0gVklDX0lOVF9UWVBFMCArICgoaXJxICYgMzIpID8gNCA6IDApOwotCXVuc2lnbmVkIHByZWcgPSBWSUNfSU5UX1BPTEFSSVRZMCArICgoaXJxICYgMzIpID8gNCA6IDApOworCXZvaWQgX19pb21lbSAqdHJlZyA9IFZJQ19JTlRfVFlQRTAgKyAoKGlycSAmIDMyKSA/IDQgOiAwKTsKKwl2b2lkIF9faW9tZW0gKnByZWcgPSBWSUNfSU5UX1BPTEFSSVRZMCArICgoaXJxICYgMzIpID8gNCA6IDApOwogCWludCBiID0gMSA8PCAoaXJxICYgMzEpOwogCiAJaWYgKGZsb3dfdHlwZSAmIChJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9MT1cpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vcHJvY19jb21tLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9wcm9jX2NvbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTVlZTcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vcHJvY19jb21tLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qIGFyY2gvYXJtL21hY2gtbXNtL3Byb2NfY29tbS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggR29vZ2xlLCBJbmMuCisgKiBBdXRob3I6IEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9zeXN0ZW0uaD4KKworI2luY2x1ZGUgInByb2NfY29tbS5oIgorCisjZGVmaW5lIE1TTV9BMk1fSU5UKG4pIChNU01fQ1NSX0JBU0UgKyAweDQwMCArIChuKSAqIDQpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlfb3RoZXJfcHJvY19jb21tKHZvaWQpCit7CisJd3JpdGVsKDEsIE1TTV9BMk1fSU5UKDYpKTsKK30KKworI2RlZmluZSBBUFBfQ09NTUFORCAweDAwCisjZGVmaW5lIEFQUF9TVEFUVVMgIDB4MDQKKyNkZWZpbmUgQVBQX0RBVEExICAgMHgwOAorI2RlZmluZSBBUFBfREFUQTIgICAweDBDCisKKyNkZWZpbmUgTURNX0NPTU1BTkQgMHgxMAorI2RlZmluZSBNRE1fU1RBVFVTICAweDE0CisjZGVmaW5lIE1ETV9EQVRBMSAgIDB4MTgKKyNkZWZpbmUgTURNX0RBVEEyICAgMHgxQworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHByb2NfY29tbV9sb2NrKTsKKworLyogVGhlIGhpZ2hlciBsZXZlbCBTTUQgc3VwcG9ydCB3aWxsIGluc3RhbGwgdGhpcyB0bworICogcHJvdmlkZSBhIHdheSB0byBjaGVjayBmb3IgYW5kIGhhbmRsZSBtb2RlbSByZXN0YXJ0LgorICovCitpbnQgKCptc21fY2hlY2tfZm9yX21vZGVtX2NyYXNoKSh2b2lkKTsKKworLyogUG9sbCBmb3IgYSBzdGF0ZSBjaGFuZ2UsIGNoZWNraW5nIGZvciBwb3NzaWJsZQorICogbW9kZW0gY3Jhc2hlcyBhbG9uZyB0aGUgd2F5IChzbyB3ZSBkb24ndCB3YWl0CisgKiBmb3JldmVyIHdoaWxlIHRoZSBBUk05IGlzIGJsb3dpbmcgdXApLgorICoKKyAqIFJldHVybiBhbiBlcnJvciBpbiB0aGUgZXZlbnQgb2YgYSBtb2RlbSBjcmFzaCBhbmQKKyAqIHJlc3RhcnQgc28gdGhlIG1zbV9wcm9jX2NvbW0oKSByb3V0aW5lIGNhbiByZXN0YXJ0CisgKiB0aGUgb3BlcmF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy4KKyAqLworc3RhdGljIGludCBwcm9jX2NvbW1fd2FpdF9mb3Iodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKwlmb3IgKDs7KSB7CisJCWlmIChyZWFkbChhZGRyKSA9PSB2YWx1ZSkKKwkJCXJldHVybiAwOworCisJCWlmIChtc21fY2hlY2tfZm9yX21vZGVtX2NyYXNoKQorCQkJaWYgKG1zbV9jaGVja19mb3JfbW9kZW1fY3Jhc2goKSkKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKwl9Cit9CisKK2ludCBtc21fcHJvY19jb21tKHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgKmRhdGExLCB1bnNpZ25lZCAqZGF0YTIpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gTVNNX1NIQVJFRF9SQU1fQkFTRTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvY19jb21tX2xvY2ssIGZsYWdzKTsKKworCWZvciAoOzspIHsKKwkJaWYgKHByb2NfY29tbV93YWl0X2ZvcihiYXNlICsgTURNX1NUQVRVUywgUENPTV9SRUFEWSkpCisJCQljb250aW51ZTsKKworCQl3cml0ZWwoY21kLCBiYXNlICsgQVBQX0NPTU1BTkQpOworCQl3cml0ZWwoZGF0YTEgPyAqZGF0YTEgOiAwLCBiYXNlICsgQVBQX0RBVEExKTsKKwkJd3JpdGVsKGRhdGEyID8gKmRhdGEyIDogMCwgYmFzZSArIEFQUF9EQVRBMik7CisKKwkJbm90aWZ5X290aGVyX3Byb2NfY29tbSgpOworCisJCWlmIChwcm9jX2NvbW1fd2FpdF9mb3IoYmFzZSArIEFQUF9DT01NQU5ELCBQQ09NX0NNRF9ET05FKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZWFkbChiYXNlICsgQVBQX1NUQVRVUykgIT0gUENPTV9DTURfRkFJTCkgeworCQkJaWYgKGRhdGExKQorCQkJCSpkYXRhMSA9IHJlYWRsKGJhc2UgKyBBUFBfREFUQTEpOworCQkJaWYgKGRhdGEyKQorCQkJCSpkYXRhMiA9IHJlYWRsKGJhc2UgKyBBUFBfREFUQTIpOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IC1FSU87CisJCX0KKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKFBDT01fQ01EX0lETEUsIGJhc2UgKyBBUFBfQ09NTUFORCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9jX2NvbW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9wcm9jX2NvbW0uaCBiL2FyY2gvYXJtL21hY2gtbXNtL3Byb2NfY29tbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDc2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9wcm9jX2NvbW0uaApAQCAtMCwwICsxLDE2NSBAQAorLyogYXJjaC9hcm0vbWFjaC1tc20vcHJvY19jb21tLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfQVJDSF9BUk1fTUFDSF9NU01fUFJPQ19DT01NX0hfCisjZGVmaW5lIF9BUkNIX0FSTV9NQUNIX01TTV9QUk9DX0NPTU1fSF8KKworZW51bSB7CisJUENPTV9DTURfSURMRSA9IDB4MCwKKwlQQ09NX0NNRF9ET05FLAorCVBDT01fUkVTRVRfQVBQUywKKwlQQ09NX1JFU0VUX0NISVAsCisJUENPTV9DT05GSUdfTkFORF9NUFUsCisJUENPTV9DT05GSUdfVVNCX0NMS1MsCisJUENPTV9HRVRfUE9XRVJfT05fU1RBVFVTLAorCVBDT01fR0VUX1dBS0VfVVBfU1RBVFVTLAorCVBDT01fR0VUX0JBVFRfTEVWRUwsCisJUENPTV9DSEdfSVNfQ0hBUkdJTkcsCisJUENPTV9QT1dFUl9ET1dOLAorCVBDT01fVVNCX1BJTl9DT05GSUcsCisJUENPTV9VU0JfUElOX1NFTCwKKwlQQ09NX1NFVF9SVENfQUxBUk0sCisJUENPTV9OVl9SRUFELAorCVBDT01fTlZfV1JJVEUsCisJUENPTV9HRVRfVVVJRF9ISUdILAorCVBDT01fR0VUX1VVSURfTE9XLAorCVBDT01fR0VUX0hXX0VOVFJPUFksCisJUENPTV9SUENfR1BJT19UTE1NX0NPTkZJR19SRU1PVEUsCisJUENPTV9DTEtDVExfUlBDX0VOQUJMRSwKKwlQQ09NX0NMS0NUTF9SUENfRElTQUJMRSwKKwlQQ09NX0NMS0NUTF9SUENfUkVTRVQsCisJUENPTV9DTEtDVExfUlBDX1NFVF9GTEFHUywKKwlQQ09NX0NMS0NUTF9SUENfU0VUX1JBVEUsCisJUENPTV9DTEtDVExfUlBDX01JTl9SQVRFLAorCVBDT01fQ0xLQ1RMX1JQQ19NQVhfUkFURSwKKwlQQ09NX0NMS0NUTF9SUENfUkFURSwKKwlQQ09NX0NMS0NUTF9SUENfUExMX1JFUVVFU1QsCisJUENPTV9DTEtDVExfUlBDX0VOQUJMRUQsCisJUENPTV9WUkVHX1NXSVRDSCwKKwlQQ09NX1ZSRUdfU0VUX0xFVkVMLAorCVBDT01fR1BJT19UTE1NX0NPTkZJR19HUk9VUCwKKwlQQ09NX0dQSU9fVExNTV9VTkNPTkZJR19HUk9VUCwKKwlQQ09NX05WX1dSSVRFX0JZVEVTXzRfNywKKwlQQ09NX0NPTkZJR19ESVNQLAorCVBDT01fR0VUX0ZUTV9CT09UX0NPVU5ULAorCVBDT01fUlBDX0dQSU9fVExNTV9DT05GSUdfRVgsCisJUENPTV9QTV9NUFBfQ09ORklHLAorCVBDT01fR1BJT19JTiwKKwlQQ09NX0dQSU9fT1VULAorCVBDT01fUkVTRVRfTU9ERU0sCisJUENPTV9SRVNFVF9DSElQX0lNTSwKKwlQQ09NX1BNX1ZJRF9FTiwKKwlQQ09NX1ZSRUdfUFVMTERPV04sCisJUENPTV9OVU1fQ01EUywKK307CisKK2VudW0geworCSBQQ09NX0lOVkFMSURfU1RBVFVTID0gMHgwLAorCSBQQ09NX1JFQURZLAorCSBQQ09NX0NNRF9SVU5OSU5HLAorCSBQQ09NX0NNRF9TVUNDRVNTLAorCSBQQ09NX0NNRF9GQUlMLAorfTsKKworLyogTGlzdCBvZiBWUkVHcyB0aGF0IHN1cHBvcnQgdGhlIFB1bGwgRG93biBSZXNpc3RvciBzZXR0aW5nLiAqLworZW51bSB7CisJUE1fVlJFR19QRE9XTl9NU01BX0lELAorCVBNX1ZSRUdfUERPV05fTVNNUF9JRCwKKwlQTV9WUkVHX1BET1dOX01TTUUxX0lELAkvKiBOb3Qgc3VwcG9ydGVkIGluIFBhbm9yYW1peCAqLworCVBNX1ZSRUdfUERPV05fTVNNQzFfSUQsCS8qIE5vdCBzdXBwb3J0ZWQgaW4gUE02NjIwICovCisJUE1fVlJFR19QRE9XTl9NU01DMl9JRCwJLyogU3VwcG9ydGVkIGluIFBNNzUwMCBvbmx5ICovCisJUE1fVlJFR19QRE9XTl9HUDNfSUQsCS8qIFN1cHBvcnRlZCBpbiBQTTc1MDAgb25seSAqLworCVBNX1ZSRUdfUERPV05fTVNNRTJfSUQsCS8qIFN1cHBvcnRlZCBpbiBQTTc1MDAgYW5kIFBhbm9yYW1peCBvbmx5ICovCisJUE1fVlJFR19QRE9XTl9HUDRfSUQsCS8qIFN1cHBvcnRlZCBpbiBQTTc1MDAgb25seSAqLworCVBNX1ZSRUdfUERPV05fR1AxX0lELAkvKiBTdXBwb3J0ZWQgaW4gUE03NTAwIG9ubHkgKi8KKwlQTV9WUkVHX1BET1dOX1RDWE9fSUQsCisJUE1fVlJFR19QRE9XTl9QQV9JRCwKKwlQTV9WUkVHX1BET1dOX1JGVFhfSUQsCisJUE1fVlJFR19QRE9XTl9SRlJYMV9JRCwKKwlQTV9WUkVHX1BET1dOX1JGUlgyX0lELAorCVBNX1ZSRUdfUERPV05fU1lOVF9JRCwKKwlQTV9WUkVHX1BET1dOX1dMQU5fSUQsCisJUE1fVlJFR19QRE9XTl9VU0JfSUQsCisJUE1fVlJFR19QRE9XTl9NTUNfSUQsCisJUE1fVlJFR19QRE9XTl9SVUlNX0lELAorCVBNX1ZSRUdfUERPV05fTVNNQzBfSUQsCS8qIFN1cHBvcnRlZCBpbiBQTTY2MTAgb25seSAqLworCVBNX1ZSRUdfUERPV05fR1AyX0lELAkvKiBTdXBwb3J0ZWQgaW4gUE03NTAwIG9ubHkgKi8KKwlQTV9WUkVHX1BET1dOX0dQNV9JRCwJLyogU3VwcG9ydGVkIGluIFBNNzUwMCBvbmx5ICovCisJUE1fVlJFR19QRE9XTl9HUDZfSUQsCS8qIFN1cHBvcnRlZCBpbiBQTTc1MDAgb25seSAqLworCVBNX1ZSRUdfUERPV05fUkZfSUQsCisJUE1fVlJFR19QRE9XTl9SRl9WQ09fSUQsCisJUE1fVlJFR19QRE9XTl9NUExMX0lELAorCVBNX1ZSRUdfUERPV05fUzJfSUQsCisJUE1fVlJFR19QRE9XTl9TM19JRCwKKwlQTV9WUkVHX1BET1dOX1JGVUJNX0lELAorCisJLyogbmV3IGZvciBIQU4gKi8KKwlQTV9WUkVHX1BET1dOX1JGMV9JRCwKKwlQTV9WUkVHX1BET1dOX1JGMl9JRCwKKwlQTV9WUkVHX1BET1dOX1JGQV9JRCwKKwlQTV9WUkVHX1BET1dOX0NEQzJfSUQsCisJUE1fVlJFR19QRE9XTl9SRlRYMl9JRCwKKwlQTV9WUkVHX1BET1dOX1VTSU1fSUQsCisJUE1fVlJFR19QRE9XTl9VU0IyUDZfSUQsCisJUE1fVlJFR19QRE9XTl9VU0IzUDNfSUQsCisJUE1fVlJFR19QRE9XTl9JTlZBTElEX0lELAorCisJLyogYmFja3dhcmQgY29tcGF0aWJsZSBlbnVtcyBvbmx5ICovCisJUE1fVlJFR19QRE9XTl9DQU1fSUQgPSBQTV9WUkVHX1BET1dOX0dQMV9JRCwKKwlQTV9WUkVHX1BET1dOX01ERElfSUQgPSBQTV9WUkVHX1BET1dOX0dQMl9JRCwKKwlQTV9WUkVHX1BET1dOX1JVSU0yX0lEID0gUE1fVlJFR19QRE9XTl9HUDNfSUQsCisJUE1fVlJFR19QRE9XTl9BVVhfSUQgPSBQTV9WUkVHX1BET1dOX0dQNF9JRCwKKwlQTV9WUkVHX1BET1dOX0FVWDJfSUQgPSBQTV9WUkVHX1BET1dOX0dQNV9JRCwKKwlQTV9WUkVHX1BET1dOX0JUX0lEID0gUE1fVlJFR19QRE9XTl9HUDZfSUQsCisKKwlQTV9WUkVHX1BET1dOX01TTUVfSUQgPSBQTV9WUkVHX1BET1dOX01TTUUxX0lELAorCVBNX1ZSRUdfUERPV05fTVNNQ19JRCA9IFBNX1ZSRUdfUERPV05fTVNNQzFfSUQsCisJUE1fVlJFR19QRE9XTl9SRkExX0lEID0gUE1fVlJFR19QRE9XTl9SRlJYMl9JRCwKKwlQTV9WUkVHX1BET1dOX1JGQTJfSUQgPSBQTV9WUkVHX1BET1dOX1JGVFgyX0lELAorCVBNX1ZSRUdfUERPV05fWE9fSUQgPSBQTV9WUkVHX1BET1dOX1RDWE9fSUQKK307CisKKy8qIGdwaW8gaW5mbyBmb3IgUENPTV9SUENfR1BJT19UTE1NX0NPTkZJR19FWCAqLworCisjZGVmaW5lIEdQSU9fRU5BQkxFCTAKKyNkZWZpbmUgR1BJT19ESVNBQkxFCTEKKworI2RlZmluZSBHUElPX0lOUFVUCTAKKyNkZWZpbmUgR1BJT19PVVRQVVQJMQorCisjZGVmaW5lIEdQSU9fTk9fUFVMTAkwCisjZGVmaW5lIEdQSU9fUFVMTF9ET1dOCTEKKyNkZWZpbmUgR1BJT19LRUVQRVIJMgorI2RlZmluZSBHUElPX1BVTExfVVAJMworCisjZGVmaW5lIEdQSU9fMk1BCTAKKyNkZWZpbmUgR1BJT180TUEJMQorI2RlZmluZSBHUElPXzZNQQkyCisjZGVmaW5lIEdQSU9fOE1BCTMKKyNkZWZpbmUgR1BJT18xME1BCTQKKyNkZWZpbmUgR1BJT18xMk1BCTUKKyNkZWZpbmUgR1BJT18xNE1BCTYKKyNkZWZpbmUgR1BJT18xNk1BCTcKKworI2RlZmluZSBQQ09NX0dQSU9fQ0ZHKGdwaW8sIGZ1bmMsIGRpciwgcHVsbCwgZHJ2c3RyKSBcCisJCSgoKChncGlvKSAmIDB4M0ZGKSA8PCA0KQl8IFwKKwkJKChmdW5jKSAmIDB4ZikJCQl8IFwKKwkJKCgoZGlyKSAmIDB4MSkgPDwgMTQpCQl8IFwKKwkJKCgocHVsbCkgJiAweDMpIDw8IDE1KQkJfCBcCisJCSgoKGRydnN0cikgJiAweEYpIDw8IDE3KSkKKworaW50IG1zbV9wcm9jX2NvbW0odW5zaWduZWQgY21kLCB1bnNpZ25lZCAqZGF0YTEsIHVuc2lnbmVkICpkYXRhMik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMKaW5kZXggMmJmZmU5Yi4uMzQ1YTE0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jCkBAIC00NSw3ICs0NSw3IEBACiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAgIGNsb2NrZXZlbnQ7CiAJc3RydWN0IGNsb2Nrc291cmNlICAgICAgICAgIGNsb2Nrc291cmNlOwogCXN0cnVjdCBpcnFhY3Rpb24gICAgICAgICAgICBpcnE7Ci0JdWludDMyX3QgICAgICAgICAgICAgICAgICAgIHJlZ2Jhc2U7CisJdm9pZCBfX2lvbWVtICAgICAgICAgICAgICAgICpyZWdiYXNlOwogCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBmcmVxOwogCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBzaGlmdDsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS92cmVnLmMgYi9hcmNoL2FybS9tYWNoLW1zbS92cmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiMGI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL3ZyZWcuYwpAQCAtMCwwICsxLDE0MyBAQAorLyogYXJjaC9hcm0vbWFjaC1tc20vdnJlZy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSwgSW5jLgorICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxtYWNoL3ZyZWcuaD4KKworI2luY2x1ZGUgInByb2NfY29tbS5oIgorCitzdHJ1Y3QgdnJlZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpZDsKK307CisKKyNkZWZpbmUgVlJFRyhfbmFtZSwgX2lkKSB7IC5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgfQorCitzdGF0aWMgc3RydWN0IHZyZWcgdnJlZ3NbXSA9IHsKKwlWUkVHKCJtc21hIiwJMCksCisJVlJFRygibXNtcCIsCTEpLAorCVZSRUcoIm1zbWUxIiwJMiksCisJVlJFRygibXNtYzEiLAkzKSwKKwlWUkVHKCJtc21jMiIsCTQpLAorCVZSRUcoImdwMyIsCTUpLAorCVZSRUcoIm1zbWUyIiwJNiksCisJVlJFRygiZ3A0IiwJNyksCisJVlJFRygiZ3AxIiwJOCksCisJVlJFRygidGN4byIsCTkpLAorCVZSRUcoInBhIiwJMTApLAorCVZSRUcoInJmdHgiLAkxMSksCisJVlJFRygicmZyeDEiLAkxMiksCisJVlJFRygicmZyeDIiLAkxMyksCisJVlJFRygic3ludCIsCTE0KSwKKwlWUkVHKCJ3bGFuIiwJMTUpLAorCVZSRUcoInVzYiIsCTE2KSwKKwlWUkVHKCJib29zdCIsCTE3KSwKKwlWUkVHKCJtbWMiLAkxOCksCisJVlJFRygicnVpbSIsCTE5KSwKKwlWUkVHKCJtc21jMCIsCTIwKSwKKwlWUkVHKCJncDIiLAkyMSksCisJVlJFRygiZ3A1IiwJMjIpLAorCVZSRUcoImdwNiIsCTIzKSwKKwlWUkVHKCJyZiIsCTI0KSwKKwlWUkVHKCJyZl92Y28iLAkyNiksCisJVlJFRygibXBsbCIsCTI3KSwKKwlWUkVHKCJzMiIsCTI4KSwKKwlWUkVHKCJzMyIsCTI5KSwKKwlWUkVHKCJyZnVibSIsCTMwKSwKKwlWUkVHKCJuY3AiLAkzMSksCit9OworCitzdHJ1Y3QgdnJlZyAqdnJlZ19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlpbnQgbjsKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRSh2cmVncyk7IG4rKykgeworCQlpZiAoIXN0cmNtcCh2cmVnc1tuXS5uYW1lLCBpZCkpCisJCQlyZXR1cm4gdnJlZ3MgKyBuOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB2cmVnX3B1dChzdHJ1Y3QgdnJlZyAqdnJlZykKK3sKK30KKworaW50IHZyZWdfZW5hYmxlKHN0cnVjdCB2cmVnICp2cmVnKQoreworCXVuc2lnbmVkIGlkID0gdnJlZy0+aWQ7CisJdW5zaWduZWQgZW5hYmxlID0gMTsKKwlyZXR1cm4gbXNtX3Byb2NfY29tbShQQ09NX1ZSRUdfU1dJVENILCAmaWQsICZlbmFibGUpOworfQorCit2b2lkIHZyZWdfZGlzYWJsZShzdHJ1Y3QgdnJlZyAqdnJlZykKK3sKKwl1bnNpZ25lZCBpZCA9IHZyZWctPmlkOworCXVuc2lnbmVkIGVuYWJsZSA9IDA7CisJbXNtX3Byb2NfY29tbShQQ09NX1ZSRUdfU1dJVENILCAmaWQsICZlbmFibGUpOworfQorCitpbnQgdnJlZ19zZXRfbGV2ZWwoc3RydWN0IHZyZWcgKnZyZWcsIHVuc2lnbmVkIG12KQoreworCXVuc2lnbmVkIGlkID0gdnJlZy0+aWQ7CisJcmV0dXJuIG1zbV9wcm9jX2NvbW0oUENPTV9WUkVHX1NFVF9MRVZFTCwgJmlkLCAmbXYpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKK3N0YXRpYyBpbnQgdnJlZ19kZWJ1Z19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgdnJlZyAqdnJlZyA9IGRhdGE7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJCXZyZWdfZGlzYWJsZSh2cmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl2cmVnX2VuYWJsZSh2cmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdnJlZ19zZXRfbGV2ZWwodnJlZywgdmFsKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyZWdfZGVidWdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2cmVnX2ZvcHMsIHZyZWdfZGVidWdfZ2V0LCB2cmVnX2RlYnVnX3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IF9faW5pdCB2cmVnX2RlYnVnX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50OworCWludCBuOworCisJZGVudCA9IGRlYnVnZnNfY3JlYXRlX2RpcigidnJlZyIsIDApOworCWlmIChJU19FUlIoZGVudCkpCisJCXJldHVybiAwOworCisJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUodnJlZ3MpOyBuKyspCisJCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHZyZWdzW25dLm5hbWUsIDA2NDQsCisJCQkJCSAgIGRlbnQsIHZyZWdzICsgbiwgJnZyZWdfZm9wcyk7CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHZyZWdfZGVidWdfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvZGI3OHgwMC1icC1zZXR1cC5jCmluZGV4IDQ5ZjQzNGMuLjJlMjg1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2RiNzh4MDAtYnAtc2V0dXAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPG1hY2gvbXY3OHh4MC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjgsMTAgKzI5LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkYjc4eDAwX2dlMTBfZGF0YSA9IHsKIAkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfTk9ORSwKKwkuc3BlZWQJCT0gU1BFRURfMTAwMCwKKwkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGRiNzh4MDBfZ2UxMV9kYXRhID0gewogCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9OT05FLAorCS5zcGVlZAkJPSBTUEVFRF8xMDAwLAorCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCiBzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBkYjc4eDAwX3NhdGFfZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCmluZGV4IGQzNTRlMGYuLmM0MGZjMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAKIHZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG5yX2lycXMgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfb2ZfaXJxcyA9IDA7CiAJdW5zaWduZWQgaW50IG5yX2JhbmtzID0gMDsKIAlpbnQgaTsKIApAQCAtMTMzLDE0ICsxMzMsMTQgQEAKIAogCQlvbWFwX2lycV9iYW5rX2luaXRfb25lKGJhbmspOwogCi0JCW5yX2lycXMgKz0gYmFuay0+bnJfaXJxczsKKwkJbnJfb2ZfaXJxcyArPSBiYW5rLT5ucl9pcnFzOwogCQlucl9iYW5rcysrOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIlRvdGFsIG9mICVsZCBpbnRlcnJ1cHRzIG9uICVkIGFjdGl2ZSBjb250cm9sbGVyJXNcbiIsCi0JICAgICAgIG5yX2lycXMsIG5yX2JhbmtzLCBucl9iYW5rcyA+IDEgPyAicyIgOiAiIik7CisJICAgICAgIG5yX29mX2lycXMsIG5yX2JhbmtzLCBucl9iYW5rcyA+IDEgPyAicyIgOiAiIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7IGkrKykgewogCQlzZXRfaXJxX2NoaXAoaSwgJm9tYXBfaXJxX2NoaXApOwogCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKaW5kZXggOTYyNWVmNS4uNDM3MDY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL29yaW9uX3NwaS5oPgorI2luY2x1ZGUgPG5ldC9kc2EuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90aW1leC5oPgpAQCAtMTk4LDYgKzE5OSw0MCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXRoZXJuZXQgc3dpdGNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAwLAorCQkuZW5kCT0gMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfc3dpdGNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZHNhIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLnJlc291cmNlCT0gb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzLAorfTsKKwordm9pZCBfX2luaXQgb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQoreworCWlmIChpcnEgIT0gTk9fSVJRKSB7CisJCW9yaW9uNXhfc3dpdGNoX3Jlc291cmNlc1swXS5zdGFydCA9IGlycTsKKwkJb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzWzBdLmVuZCA9IGlycTsKKwkJb3Jpb241eF9zd2l0Y2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOworCX0KKworCWQtPm1paV9idXMgPSAmb3Jpb241eF9ldGhfc2hhcmVkLmRldjsKKwlkLT5uZXRkZXYgPSAmb3Jpb241eF9ldGguZGV2OworCW9yaW9uNXhfc3dpdGNoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfc3dpdGNoX2RldmljZSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJMkMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YSBvcmlvbjV4X2kyY19wZGF0YSA9IHsKQEAgLTI3NSw3ICszMTAsOCBAQAogICogU1BJCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3Qgb3Jpb25fc3BpX2luZm8gb3Jpb241eF9zcGlfcGxhdF9kYXRhID0gewotCS50Y2xrCQk9IDAsCisJLnRjbGsJCQk9IDAsCisJLmVuYWJsZV9jbG9ja19maXgJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvcmlvbjV4X3NwaV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaAppbmRleCAxZjhiMmRhLi5hMDAwYzdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfX0FSQ0hfT1JJT041WF9DT01NT05fSAogI2RlZmluZSBfX0FSQ0hfT1JJT041WF9DT01NT05fSAogCitzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YTsKIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGE7CiAKQEAgLTI5LDYgKzMwLDcgQEAKIHZvaWQgb3Jpb241eF9laGNpMF9pbml0KHZvaWQpOwogdm9pZCBvcmlvbjV4X2VoY2kxX2luaXQodm9pZCk7CiB2b2lkIG9yaW9uNXhfZXRoX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKTsKK3ZvaWQgb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKTsKIHZvaWQgb3Jpb241eF9pMmNfaW5pdCh2b2lkKTsKIHZvaWQgb3Jpb241eF9zYXRhX2luaXQoc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSAqc2F0YV9kYXRhKTsKIHZvaWQgb3Jpb241eF9zcGlfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMKaW5kZXggNTAwY2RhZC4uMTVmNTMyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPG5ldC9kc2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KQEAgLTkzLDYgKzk0LDE1IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX2RhdGEgPSB7CisJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCisJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCisJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKKwkucG9ydF9uYW1lc1szXQk9ICJjcHUiLAorCS5wb3J0X25hbWVzWzVdCT0gImxhbjQiLAorCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJkODhmNTE4MWxfZnhvX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTA3LDYgKzExNyw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9meG9fZXRoX2RhdGEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFJEODhGNTE4MUxfRlhPX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwppbmRleCBlYmRlODE0Li44YWQzOTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxuZXQvZHNhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CkBAIC05NCw2ICs5NSwxNSBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEgPSB7CisJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCisJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCisJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKKwkucG9ydF9uYW1lc1szXQk9ICJjcHUiLAorCS5wb3J0X25hbWVzWzVdCT0gImxhbjQiLAorCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAorfTsKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHJkODhmNTE4MWxfZ2VfaTJjX3J0YyA9IHsKIAlJMkNfQk9BUkRfSU5GTygiZHMxMzM4IiwgMHg2OCksCiB9OwpAQCAtMTEyLDYgKzEyMiw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9nZV9ldGhfZGF0YSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDgpKTsKIAlvcmlvbjV4X2kyY19pbml0KCk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjYxODNhcC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKaW5kZXggNDBlMDQ5NS4uMjYyZTI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvb3Jpb25fc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPG5ldC9kc2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KQEAgLTM0LDYgKzM1LDE1IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX2RhdGEgPSB7CisJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCisJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCisJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCisJLnBvcnRfbmFtZXNbM10JPSAibGFuNCIsCisJLnBvcnRfbmFtZXNbNF0JPSAid2FuIiwKKwkucG9ydF9uYW1lc1s1XQk9ICJjcHUiLAorfTsKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHJkODhmNjE4M2FwX2dlX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lCT0gImtlcm5lbCIsCkBAIC03OSw2ICs4OSw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY2MTgzYXBfZ2VfZXRoX2RhdGEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjYxODNhcF9nZV9zd2l0Y2hfZGF0YSwgZ3Bpb190b19pcnEoMykpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJkODhmNjE4M2FwX2dlX3NwaV9zbGF2ZV9pbmZvLAogCQkJCUFSUkFZX1NJWkUocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8pKTsKIAlvcmlvbjV4X3NwaV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwppbmRleCA5YTRmZDUyLi5jYzhmODkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPG5ldC9kc2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMTA1LDYgKzEwNiwxNSBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX2RhdGEgPSB7CisJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCisJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCisJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKKwkucG9ydF9uYW1lc1szXQk9ICJjcHUiLAorCS5wb3J0X25hbWVzWzVdCT0gImxhbjMiLAorCS5wb3J0X25hbWVzWzddCT0gImxhbjQiLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHdydDM1MG5fdjJfaW5pdCh2b2lkKQogewogCS8qCkBAIC0xMTksNiArMTI5LDcgQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZ3cnQzNTBuX3YyX2V0aF9kYXRhKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmd3J0MzUwbl92Ml9zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFdSVDM1ME5fVjJfTk9SX0JPT1RfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IGYyN2Y2YjMuLmEwNjIyMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtNzEsNiArNzEsMTQgQEAKIAkgIFNMLUMzMDAwIChTcGl0eiksIFNMLUMzMTAwIChCb3J6b2kpIG9yIFNMLUM2MDAweCAoVG9zYSkKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCitjb25maWcgQ09SR0lfU1NQX0RFUFJFQ0FURUQKKwlib29sCisJc2VsZWN0IFBYQV9TU1AKKwloZWxwCisJICBUaGlzIG9wdGlvbiB3aWxsIGluY2x1ZGUgY29yZ2lfc3NwLmMgYW5kIGNvcmdpX2xjZC5jCisJICB0aGF0IGNvcmdpX3RzLmMgYW5kIG90aGVyIGxlZ2FjeSBkcml2ZXJzIChjb3JnaV9ibC5jCisJICBhbmQgc2hhcnBzbF9wbS5jKSBtYXkgZGVwZW5kIG9uLgorCiBjb25maWcgTUFDSF9QT09ETEUKIAlib29sICJFbmFibGUgU2hhcnAgU0wtNTYwMCAoUG9vZGxlKSBTdXBwb3J0IgogCWRlcGVuZHMgb24gUFhBX1NIQVJQU0wKQEAgLTI1Nyw3ICsyNjUsNiBAQAogCWJvb2wgIkNvbXB1TGFiIENNLVgyNTUvQ00tWDI3MCBtb2R1bGVzIgogCXNlbGVjdCBQWEEyN3gKIAlzZWxlY3QgSVdNTVhUCi0Jc2VsZWN0IFpPTkVfRE1BIGlmIFBDSQogCXNlbGVjdCBQWEEyNXgKIAlzZWxlY3QgUFhBX1NTUAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGQzMWM5OTcuLmQ2NGM2OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zNyw2ICszNyw3IEBACiBvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJKQkrPSBjb2xpYnJpLm8KIG9iai0kKENPTkZJR19QWEFfU0hBUlBfQzd4eCkJKz0gY29yZ2kubyBzaGFycHNsX3BtLm8gY29yZ2lfcG0ubwogb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DeHgwMCkJKz0gc3BpdHoubyBzaGFycHNsX3BtLm8gc3BpdHpfcG0ubworb2JqLSQoQ09ORklHX0NPUkdJX1NTUF9ERVBSRUNBVEVEKQkrPSBjb3JnaV9zc3AubyBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX01BQ0hfUE9PRExFKQkrPSBwb29kbGUubwogb2JqLSQoQ09ORklHX01BQ0hfUENNMDI3KQkrPSBwY20wMjcubwogb2JqLSQoQ09ORklHX01BQ0hfUENNOTkwX0JBU0VCT0FSRCkJKz0gcGNtOTkwLWJhc2Vib2FyZC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9sY2QuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTYwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9sY2QuYwpAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jCisgKgorICogQ29yZ2kvU3BpdHogTENEIFNwZWNpZmljIENvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUmljaGFyZCBQdXJkaWUKKyAqCisgKiBDb25uZWN0aXZpdHk6CisgKiAgIENvcmdpIC0gTENEIHRvIEFUSSBJbWFnZW9uIHcxMDAgKFdhbGxhYnkpCisgKiAgIFNwaXR6IC0gTENEIHRvIFBYQSBGcmFtZWJ1ZmZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPG1hY2gvY29yZ2kuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvc2hhcnBzbC5oPgorI2luY2x1ZGUgPG1hY2gvc3BpdHouaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zaGFycHNsX3BhcmFtLmg+CisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisvKiBSZWdpc3RlciBBZGRyZXNzZXMgKi8KKyNkZWZpbmUgUkVTQ1RMX0FEUlMgICAgIDB4MDAKKyNkZWZpbmUgUEhBQ1RSTF9BRFJTICAgIDB4MDEKKyNkZWZpbmUgRFVUWUNUUkxfQURSUyAgIDB4MDIKKyNkZWZpbmUgUE9XRVJSRUcwX0FEUlMgIDB4MDMKKyNkZWZpbmUgUE9XRVJSRUcxX0FEUlMgIDB4MDQKKyNkZWZpbmUgR1BPUjNfQURSUyAgICAgIDB4MDUKKyNkZWZpbmUgUElDVFJMX0FEUlMgICAgIDB4MDYKKyNkZWZpbmUgUE9MQ1RSTF9BRFJTICAgIDB4MDcKKworLyogUmVnaXN0ZXIgQml0IERlZmluaXRpb25zICovCisjZGVmaW5lIFJFU0NUTF9RVkdBICAgICAweDAxCisjZGVmaW5lIFJFU0NUTF9WR0EgICAgICAweDAwCisKKyNkZWZpbmUgUE9XRVIxX1ZXX09OICAgIDB4MDEgIC8qIFZXIFN1cHBseSBGRVQgT04gKi8KKyNkZWZpbmUgUE9XRVIxX0dWU1NfT04gIDB4MDIgIC8qIEdWU1MoLThWKSBQb3dlciBTdXBwbHkgT04gKi8KKyNkZWZpbmUgUE9XRVIxX1ZERF9PTiAgIDB4MDQgIC8qIFZERCg4ViksU1ZTUygtNFYpIFBvd2VyIFN1cHBseSBPTiAqLworCisjZGVmaW5lIFBPV0VSMV9WV19PRkYgICAweDAwICAvKiBWVyBTdXBwbHkgRkVUIE9GRiAqLworI2RlZmluZSBQT1dFUjFfR1ZTU19PRkYgMHgwMCAgLyogR1ZTUygtOFYpIFBvd2VyIFN1cHBseSBPRkYgKi8KKyNkZWZpbmUgUE9XRVIxX1ZERF9PRkYgIDB4MDAgIC8qIFZERCg4ViksU1ZTUygtNFYpIFBvd2VyIFN1cHBseSBPRkYgKi8KKworI2RlZmluZSBQT1dFUjBfQ09NX0RDTEsgMHgwMSAgLyogQ09NIFZvbHRhZ2UgREMgQmlhcyBEQUMgU2VyaWFsIERhdGEgQ2xvY2sgKi8KKyNkZWZpbmUgUE9XRVIwX0NPTV9ET1VUIDB4MDIgIC8qIENPTSBWb2x0YWdlIERDIEJpYXMgREFDIFNlcmlhbCBEYXRhIE91dCAqLworI2RlZmluZSBQT1dFUjBfREFDX09OICAgMHgwNCAgLyogREFDIFBvd2VyIFN1cHBseSBPTiAqLworI2RlZmluZSBQT1dFUjBfQ09NX09OICAgMHgwOCAgLyogQ09NIFBvd2VyIFN1cHBseSBPTiAqLworI2RlZmluZSBQT1dFUjBfVkNDNV9PTiAgMHgxMCAgLyogVkNDNSBQb3dlciBTdXBwbHkgT04gKi8KKworI2RlZmluZSBQT1dFUjBfREFDX09GRiAgMHgwMCAgLyogREFDIFBvd2VyIFN1cHBseSBPRkYgKi8KKyNkZWZpbmUgUE9XRVIwX0NPTV9PRkYgIDB4MDAgIC8qIENPTSBQb3dlciBTdXBwbHkgT0ZGICovCisjZGVmaW5lIFBPV0VSMF9WQ0M1X09GRiAweDAwICAvKiBWQ0M1IFBvd2VyIFN1cHBseSBPRkYgKi8KKworI2RlZmluZSBQSUNUUkxfSU5JVF9TVEFURSAgICAgIDB4MDEKKyNkZWZpbmUgUElDVFJMX0lOSU9GRiAgICAgICAgICAweDAyCisjZGVmaW5lIFBJQ1RSTF9QT1dFUl9ET1dOICAgICAgMHgwNAorI2RlZmluZSBQSUNUUkxfQ09NX1NJR05BTF9PRkYgIDB4MDgKKyNkZWZpbmUgUElDVFJMX0RBQ19TSUdOQUxfT0ZGICAweDEwCisKKyNkZWZpbmUgUE9MQ1RSTF9TWU5DX1BPTF9GQUxMICAweDAxCisjZGVmaW5lIFBPTENUUkxfRU5fUE9MX0ZBTEwgICAgMHgwMgorI2RlZmluZSBQT0xDVFJMX0RBVEFfUE9MX0ZBTEwgIDB4MDQKKyNkZWZpbmUgUE9MQ1RSTF9TWU5DX0FDVF9IICAgICAweDA4CisjZGVmaW5lIFBPTENUUkxfRU5fQUNUX0wgICAgICAgMHgxMAorCisjZGVmaW5lIFBPTENUUkxfU1lOQ19QT0xfUklTRSAgMHgwMAorI2RlZmluZSBQT0xDVFJMX0VOX1BPTF9SSVNFICAgIDB4MDAKKyNkZWZpbmUgUE9MQ1RSTF9EQVRBX1BPTF9SSVNFICAweDAwCisjZGVmaW5lIFBPTENUUkxfU1lOQ19BQ1RfTCAgICAgMHgwMAorI2RlZmluZSBQT0xDVFJMX0VOX0FDVF9IICAgICAgIDB4MDAKKworI2RlZmluZSBQSEFDVFJMX1BIQVNFX01BTlVBTCAgIDB4MDEKKyNkZWZpbmUgREVGQVVMVF9QSEFEX1FWR0EgICAgICg5KQorI2RlZmluZSBERUZBVUxUX0NPTUFESiAgICAgICAgKDEyNSkKKworLyoKKyAqIFRoaXMgaXMgb25seSBhIHBzdWVkbyBJMkMgaW50ZXJmYWNlLiBXZSBjYW4ndCB1c2UgdGhlIHN0YW5kYXJkIGtlcm5lbAorICogcm91dGluZXMgYXMgdGhlIGludGVyZmFjZSBpcyB3cml0ZSBvbmx5LiBXZSBqdXN0IGFzc3VtZSB0aGUgZGF0YSBpcyBhY2tlZC4uLgorICovCitzdGF0aWMgdm9pZCBsY2R0Z19zc3BfaTJjX3NlbmQodTggZGF0YSkKK3sKKwljb3JnaV9zc3BfbGNkdGdfc2VuZChQT1dFUlJFRzBfQURSUywgZGF0YSk7CisJdWRlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQgbGNkdGdfaTJjX3NlbmRfYml0KHU4IGRhdGEpCit7CisJbGNkdGdfc3NwX2kyY19zZW5kKGRhdGEpOworCWxjZHRnX3NzcF9pMmNfc2VuZChkYXRhIHwgUE9XRVIwX0NPTV9EQ0xLKTsKKwlsY2R0Z19zc3BfaTJjX3NlbmQoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZHRnX2kyY19zZW5kX3N0YXJ0KHU4IGJhc2UpCit7CisJbGNkdGdfc3NwX2kyY19zZW5kKGJhc2UgfCBQT1dFUjBfQ09NX0RDTEsgfCBQT1dFUjBfQ09NX0RPVVQpOworCWxjZHRnX3NzcF9pMmNfc2VuZChiYXNlIHwgUE9XRVIwX0NPTV9EQ0xLKTsKKwlsY2R0Z19zc3BfaTJjX3NlbmQoYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZHRnX2kyY19zZW5kX3N0b3AodTggYmFzZSkKK3sKKwlsY2R0Z19zc3BfaTJjX3NlbmQoYmFzZSk7CisJbGNkdGdfc3NwX2kyY19zZW5kKGJhc2UgfCBQT1dFUjBfQ09NX0RDTEspOworCWxjZHRnX3NzcF9pMmNfc2VuZChiYXNlIHwgUE9XRVIwX0NPTV9EQ0xLIHwgUE9XRVIwX0NPTV9ET1VUKTsKK30KKworc3RhdGljIHZvaWQgbGNkdGdfaTJjX3NlbmRfYnl0ZSh1OCBiYXNlLCB1OCBkYXRhKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKGRhdGEgJiAweDgwKQorCQkJbGNkdGdfaTJjX3NlbmRfYml0KGJhc2UgfCBQT1dFUjBfQ09NX0RPVVQpOworCQllbHNlCisJCQlsY2R0Z19pMmNfc2VuZF9iaXQoYmFzZSk7CisJCWRhdGEgPDw9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBsY2R0Z19pMmNfd2FpdF9hY2sodTggYmFzZSkKK3sKKwlsY2R0Z19pMmNfc2VuZF9iaXQoYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZHRnX3NldF9jb21tb25fdm9sdGFnZSh1OCBiYXNlX2RhdGEsIHU4IGRhdGEpCit7CisJLyogU2V0IENvbW1vbiBWb2x0YWdlIHRvIE02MjMzMkZQIHZpYSBJMkMgKi8KKwlsY2R0Z19pMmNfc2VuZF9zdGFydChiYXNlX2RhdGEpOworCWxjZHRnX2kyY19zZW5kX2J5dGUoYmFzZV9kYXRhLCAweDljKTsKKwlsY2R0Z19pMmNfd2FpdF9hY2soYmFzZV9kYXRhKTsKKwlsY2R0Z19pMmNfc2VuZF9ieXRlKGJhc2VfZGF0YSwgMHgwMCk7CisJbGNkdGdfaTJjX3dhaXRfYWNrKGJhc2VfZGF0YSk7CisJbGNkdGdfaTJjX3NlbmRfYnl0ZShiYXNlX2RhdGEsIGRhdGEpOworCWxjZHRnX2kyY193YWl0X2FjayhiYXNlX2RhdGEpOworCWxjZHRnX2kyY19zZW5kX3N0b3AoYmFzZV9kYXRhKTsKK30KKworLyogU2V0IFBoYXNlIEFkanVzdCAqLworc3RhdGljIHZvaWQgbGNkdGdfc2V0X3BoYWRhZGooaW50IG1vZGUpCit7CisJaW50IGFkajsKKwlzd2l0Y2gobW9kZSkgeworCQljYXNlIDQ4MDoKKwkJY2FzZSA2NDA6CisJCQkvKiBTZXR0aW5nIGZvciBWR0EgKi8KKwkJCWFkaiA9IHNoYXJwc2xfcGFyYW0ucGhhZGFkajsKKwkJCWlmIChhZGogPCAwKSB7CisJCQkJYWRqID0gUEhBQ1RSTF9QSEFTRV9NQU5VQUw7CisJCQl9IGVsc2UgeworCQkJCWFkaiA9ICgoYWRqICYgMHgwZikgPDwgMSkgfCBQSEFDVFJMX1BIQVNFX01BTlVBTDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI0MDoKKwkJY2FzZSAzMjA6CisJCWRlZmF1bHQ6CisJCQkvKiBTZXR0aW5nIGZvciBRVkdBICovCisJCQlhZGogPSAoREVGQVVMVF9QSEFEX1FWR0EgPDwgMSkgfCBQSEFDVFJMX1BIQVNFX01BTlVBTDsKKwkJCWJyZWFrOworCX0KKworCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBIQUNUUkxfQURSUywgYWRqKTsKK30KKworc3RhdGljIGludCBsY2RfaW5pdGVkOworCit2b2lkIGNvcmdpX2xjZHRnX2h3X2luaXQoaW50IG1vZGUpCit7CisJaWYgKCFsY2RfaW5pdGVkKSB7CisJCWludCBjb21hZGo7CisKKwkJLyogSW5pdGlhbGl6ZSBJbnRlcm5hbCBMb2dpYyAmIFBvcnQgKi8KKwkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUElDVFJMX0FEUlMsIFBJQ1RSTF9QT1dFUl9ET1dOIHwgUElDVFJMX0lOSU9GRiB8IFBJQ1RSTF9JTklUX1NUQVRFCisJICAJCQl8IFBJQ1RSTF9DT01fU0lHTkFMX09GRiB8IFBJQ1RSTF9EQUNfU0lHTkFMX09GRik7CisKKwkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUE9XRVJSRUcwX0FEUlMsIFBPV0VSMF9DT01fRENMSyB8IFBPV0VSMF9DT01fRE9VVCB8IFBPV0VSMF9EQUNfT0ZGCisJCQkJfCBQT1dFUjBfQ09NX09GRiB8IFBPV0VSMF9WQ0M1X09GRik7CisKKwkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUE9XRVJSRUcxX0FEUlMsIFBPV0VSMV9WV19PRkYgfCBQT1dFUjFfR1ZTU19PRkYgfCBQT1dFUjFfVkREX09GRik7CisKKwkJLyogVkREKCs4ViksIFNWU1MoLTRWKSBPTiAqLworCQljb3JnaV9zc3BfbGNkdGdfc2VuZChQT1dFUlJFRzFfQURSUywgUE9XRVIxX1ZXX09GRiB8IFBPV0VSMV9HVlNTX09GRiB8IFBPV0VSMV9WRERfT04pOworCQltZGVsYXkoMyk7CisKKwkJLyogREFDIE9OICovCisJCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPV0VSUkVHMF9BRFJTLCBQT1dFUjBfQ09NX0RDTEsgfCBQT1dFUjBfQ09NX0RPVVQgfCBQT1dFUjBfREFDX09OCisJCQkJfCBQT1dFUjBfQ09NX09GRiB8IFBPV0VSMF9WQ0M1X09GRik7CisKKwkJLyogSU5JQiA9IEgsIElOSSA9IEwgICovCisJCS8qIFBJQ1RMWzBdID0gSCAsIFBJQ1RMWzFdID0gUElDVExbMl0gPSBQSUNUTFs0XSA9IEwgKi8KKwkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUElDVFJMX0FEUlMsIFBJQ1RSTF9JTklUX1NUQVRFIHwgUElDVFJMX0NPTV9TSUdOQUxfT0ZGKTsKKworCQkvKiBTZXQgQ29tbW9uIFZvbHRhZ2UgKi8KKwkJY29tYWRqID0gc2hhcnBzbF9wYXJhbS5jb21hZGo7CisJCWlmIChjb21hZGogPCAwKQorCQkJY29tYWRqID0gREVGQVVMVF9DT01BREo7CisJCWxjZHRnX3NldF9jb21tb25fdm9sdGFnZSgoUE9XRVIwX0RBQ19PTiB8IFBPV0VSMF9DT01fT0ZGIHwgUE9XRVIwX1ZDQzVfT0ZGKSwgY29tYWRqKTsKKworCQkvKiBWQ0M1IE9OLCBEQUMgT04gKi8KKwkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUE9XRVJSRUcwX0FEUlMsIFBPV0VSMF9DT01fRENMSyB8IFBPV0VSMF9DT01fRE9VVCB8IFBPV0VSMF9EQUNfT04gfAorCQkJCVBPV0VSMF9DT01fT0ZGIHwgUE9XRVIwX1ZDQzVfT04pOworCisJCS8qIEdWU1MoLThWKSBPTiwgVkREIE9OICovCisJCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPV0VSUkVHMV9BRFJTLCBQT1dFUjFfVldfT0ZGIHwgUE9XRVIxX0dWU1NfT04gfCBQT1dFUjFfVkREX09OKTsKKwkJbWRlbGF5KDIpOworCisJCS8qIENPTSBTSUdOQUwgT04gKFBJQ1RMWzNdID0gTCkgKi8KKwkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUElDVFJMX0FEUlMsIFBJQ1RSTF9JTklUX1NUQVRFKTsKKworCQkvKiBDT00gT04sIERBQyBPTiwgVkNDNV9PTiAqLworCQljb3JnaV9zc3BfbGNkdGdfc2VuZChQT1dFUlJFRzBfQURSUywgUE9XRVIwX0NPTV9EQ0xLIHwgUE9XRVIwX0NPTV9ET1VUIHwgUE9XRVIwX0RBQ19PTgorCQkJCXwgUE9XRVIwX0NPTV9PTiB8IFBPV0VSMF9WQ0M1X09OKTsKKworCQkvKiBWVyBPTiwgR1ZTUyBPTiwgVkREIE9OICovCisJCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPV0VSUkVHMV9BRFJTLCBQT1dFUjFfVldfT04gfCBQT1dFUjFfR1ZTU19PTiB8IFBPV0VSMV9WRERfT04pOworCisJCS8qIFNpZ25hbHMgb3V0cHV0IGVuYWJsZSAqLworCQljb3JnaV9zc3BfbGNkdGdfc2VuZChQSUNUUkxfQURSUywgMCk7CisKKwkJLyogU2V0IFBoYXNlIEFkanVzdCAqLworCQlsY2R0Z19zZXRfcGhhZGFkaihtb2RlKTsKKworCQkvKiBJbml0aWFsaXplIGZvciBJbnB1dCBTaWduYWxzIGZyb20gQVRJICovCisJCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPTENUUkxfQURSUywgUE9MQ1RSTF9TWU5DX1BPTF9SSVNFIHwgUE9MQ1RSTF9FTl9QT0xfUklTRQorCQkJCXwgUE9MQ1RSTF9EQVRBX1BPTF9SSVNFIHwgUE9MQ1RSTF9TWU5DX0FDVF9MIHwgUE9MQ1RSTF9FTl9BQ1RfSCk7CisJCXVkZWxheSgxMDAwKTsKKworCQlsY2RfaW5pdGVkPTE7CisJfSBlbHNlIHsKKwkJbGNkdGdfc2V0X3BoYWRhZGoobW9kZSk7CisJfQorCisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSA0ODA6CisJCWNhc2UgNjQwOgorCQkJLyogU2V0IExjZCBSZXNvbHV0aW9uIChWR0EpICovCisJCQljb3JnaV9zc3BfbGNkdGdfc2VuZChSRVNDVExfQURSUywgUkVTQ1RMX1ZHQSk7CisJCQlicmVhazsKKwkJY2FzZSAyNDA6CisJCWNhc2UgMzIwOgorCQlkZWZhdWx0OgorCQkJLyogU2V0IExjZCBSZXNvbHV0aW9uIChRVkdBKSAqLworCQkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUkVTQ1RMX0FEUlMsIFJFU0NUTF9RVkdBKTsKKwkJCWJyZWFrOworCX0KK30KKwordm9pZCBjb3JnaV9sY2R0Z19zdXNwZW5kKHZvaWQpCit7CisJLyogNjBIeiB4IDIgZnJhbWUgPSAxNi43bXNlYyB4IDIgPSAzMy40IG1zZWMgKi8KKwltZGVsYXkoMzQpOworCisJLyogKDEpVlcgT0ZGICovCisJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUE9XRVJSRUcxX0FEUlMsIFBPV0VSMV9WV19PRkYgfCBQT1dFUjFfR1ZTU19PTiB8IFBPV0VSMV9WRERfT04pOworCisJLyogKDIpQ09NIE9GRiAqLworCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBJQ1RSTF9BRFJTLCBQSUNUUkxfQ09NX1NJR05BTF9PRkYpOworCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPV0VSUkVHMF9BRFJTLCBQT1dFUjBfREFDX09OIHwgUE9XRVIwX0NPTV9PRkYgfCBQT1dFUjBfVkNDNV9PTik7CisKKwkvKiAoMylTZXQgQ29tbW9uIFZvbHRhZ2UgQmlhcyAwViAqLworCWxjZHRnX3NldF9jb21tb25fdm9sdGFnZShQT1dFUjBfREFDX09OIHwgUE9XRVIwX0NPTV9PRkYgfCBQT1dFUjBfVkNDNV9PTiwgMCk7CisKKwkvKiAoNClHVlNTIE9GRiAqLworCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPV0VSUkVHMV9BRFJTLCBQT1dFUjFfVldfT0ZGIHwgUE9XRVIxX0dWU1NfT0ZGIHwgUE9XRVIxX1ZERF9PTik7CisKKwkvKiAoNSlWQ0M1IE9GRiAqLworCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPV0VSUkVHMF9BRFJTLCBQT1dFUjBfREFDX09OIHwgUE9XRVIwX0NPTV9PRkYgfCBQT1dFUjBfVkNDNV9PRkYpOworCisJLyogKDYpU2V0IFBEV04sIElOSU9GRiwgREFDT0ZGICovCisJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUElDVFJMX0FEUlMsIFBJQ1RSTF9JTklPRkYgfCBQSUNUUkxfREFDX1NJR05BTF9PRkYgfAorCQkJUElDVFJMX1BPV0VSX0RPV04gfCBQSUNUUkxfQ09NX1NJR05BTF9PRkYpOworCisJLyogKDcpREFDIE9GRiAqLworCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBPV0VSUkVHMF9BRFJTLCBQT1dFUjBfREFDX09GRiB8IFBPV0VSMF9DT01fT0ZGIHwgUE9XRVIwX1ZDQzVfT0ZGKTsKKworCS8qICg4KVZERCBPRkYgKi8KKwljb3JnaV9zc3BfbGNkdGdfc2VuZChQT1dFUlJFRzFfQURSUywgUE9XRVIxX1ZXX09GRiB8IFBPV0VSMV9HVlNTX09GRiB8IFBPV0VSMV9WRERfT0ZGKTsKKworCWxjZF9pbml0ZWQgPSAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmYyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqICBTU1AgY29udHJvbCBjb2RlIGZvciBTaGFycCBDb3JnaSBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFJpY2hhcmQgUHVyZGllCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8bWFjaC9zc3AuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zc3AuaD4KKyNpbmNsdWRlICJzaGFycHNsLmgiCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29yZ2lfc3NwX2xvY2spOworc3RhdGljIHN0cnVjdCBzc3BfZGV2IGNvcmdpX3NzcF9kZXY7CitzdGF0aWMgc3RydWN0IHNzcF9zdGF0ZSBjb3JnaV9zc3Bfc3RhdGU7CitzdGF0aWMgc3RydWN0IGNvcmdpc3NwX21hY2hpbmZvICpzc3BfbWFjaGluZm87CisKKy8qCisgKiBUaGVyZSBhcmUgdGhyZWUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gdGhlIFNTUCBpbnRlcmZhY2U6CisgKiAgIDEuIEEgdG91Y2hzY3JlZW4gY29udHJvbGxlciAoVEkgQURTNzg0NiBjb21wYXRpYmxlKQorICogICAyLiBBbiBMQ0QgY29udHJvbGxlciAod2l0aCBzb21lIEJhY2tsaWdodCBmdW5jdGlvbmFsaXR5KQorICogICAzLiBBIGJhdHRlcnkgbW9uaXRvcmluZyBJQyAoTWF4aW0gTUFYMTExMSkKKyAqCisgKiBFYWNoIGRldmljZSB1c2VzIGEgZGlmZmVyZW50IHNwZWVkL21vZGUgb2YgY29tbXVuaWNhdGlvbi4KKyAqCisgKiBUaGUgdG91Y2hzY3JlZW4gaXMgdmVyeSBzZW5zaXRpdmUgYW5kIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZAorICogc28gdGhlIHBvcnQgaXMgbGVmdCBjb25maWd1cmVkIGZvciB0aGlzLgorICoKKyAqIERldmljZXMgYXJlIHNlbGVjdGVkIHVzaW5nIENoaXAgU2VsZWN0cyBvbiBHUElPcy4KKyAqLworCisvKgorICogIEFEUzc4NDYgUm91dGluZXMKKyAqLwordW5zaWduZWQgbG9uZyBjb3JnaV9zc3BfYWRzNzg0Nl9wdXRnZXQodWxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisJdTMyIHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29yZ2lfc3NwX2xvY2ssIGZsYWcpOworCWlmIChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYgPj0gMCkKKwkJR1BDUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsKKworCXNzcF93cml0ZV93b3JkKCZjb3JnaV9zc3BfZGV2LGRhdGEpOworIAlzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2LCAmcmV0KTsKKworCWlmIChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYgPj0gMCkKKwkJR1BTUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JnaV9zc3BfbG9jaywgZmxhZyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTk9URTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0CisgKiBhbmQgdXNlIHRoZSBfbG9jayBhbmQgX3VubG9jayBmdW5jdGlvbnMuIFRoZXkgYXJlIHZlcnkgdGltZSBzZW5zaXRpdmUuCisgKi8KK3ZvaWQgY29yZ2lfc3NwX2Fkczc4NDZfbG9jayh2b2lkKQoreworCXNwaW5fbG9jaygmY29yZ2lfc3NwX2xvY2spOworCWlmIChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYgPj0gMCkKKwkJR1BDUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsKK30KKwordm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl91bmxvY2sodm9pZCkKK3sKKwlpZiAoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2ID49IDApCisJCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0Nik7CisJc3Bpbl91bmxvY2soJmNvcmdpX3NzcF9sb2NrKTsKK30KKwordm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl9wdXQodWxvbmcgZGF0YSkKK3sKKwlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldixkYXRhKTsKK30KKwordW5zaWduZWQgbG9uZyBjb3JnaV9zc3BfYWRzNzg0Nl9nZXQodm9pZCkKK3sKKwl1MzIgcmV0ID0gMDsKKwlzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2LCAmcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9hZHM3ODQ2X3B1dGdldCk7CitFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9hZHM3ODQ2X2xvY2spOworRVhQT1JUX1NZTUJPTChjb3JnaV9zc3BfYWRzNzg0Nl91bmxvY2spOworRVhQT1JUX1NZTUJPTChjb3JnaV9zc3BfYWRzNzg0Nl9wdXQpOworRVhQT1JUX1NZTUJPTChjb3JnaV9zc3BfYWRzNzg0Nl9nZXQpOworCisKKy8qCisgKiAgTENEL0JhY2tsaWdodCBSb3V0aW5lcworICovCit1bnNpZ25lZCBsb25nIGNvcmdpX3NzcF9kYWNfcHV0KHVsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnLCBzc2NyMSA9IFNTQ1IxX1NQSDsKKwl1MzIgdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmdpX3NzcF9sb2NrLCBmbGFnKTsKKworCWlmIChtYWNoaW5lX2lzX3NwaXR6KCkgfHwgbWFjaGluZV9pc19ha2l0YSgpIHx8IG1hY2hpbmVfaXNfYm9yem9pKCkpCisJCXNzY3IxID0gMDsKKworCXNzcF9kaXNhYmxlKCZjb3JnaV9zc3BfZGV2KTsKKwlzc3BfY29uZmlnKCZjb3JnaV9zc3BfZGV2LCAoU1NDUjBfTW90b3JvbGEgfCAoU1NDUjBfRFNTICYgMHgwNyApKSwgc3NjcjEsIDAsIFNTQ1IwX1NlckNsa0Rpdihzc3BfbWFjaGluZm8tPmNsa19sY2Rjb24pKTsKKwlzc3BfZW5hYmxlKCZjb3JnaV9zc3BfZGV2KTsKKworCWlmIChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbiA+PSAwKQorCQlHUENSKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKTsKKwlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldixkYXRhKTsKKwkvKiBSZWFkIG51bGwgZGF0YSBiYWNrIGZyb20gZGV2aWNlIHRvIHByZXZlbnQgU1NQIG92ZXJmbG93ICovCisJc3NwX3JlYWRfd29yZCgmY29yZ2lfc3NwX2RldiwgJnRtcCk7CisJaWYgKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uID49IDApCisJCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pOworCisJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoc3NwX21hY2hpbmZvLT5jbGtfYWRzNzg0NikpOworCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZ2lfc3NwX2xvY2ssIGZsYWcpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY29yZ2lfc3NwX2xjZHRnX3NlbmQodTggYWRycywgdTggZGF0YSkKK3sKKwljb3JnaV9zc3BfZGFjX3B1dCgoKGFkcnMgJiAweDA3KSA8PCA1KSB8IChkYXRhICYgMHgxZikpOworfQorCit2b2lkIGNvcmdpX3NzcF9ibGR1dHlfc2V0KGludCBkdXR5KQoreworCWNvcmdpX3NzcF9sY2R0Z19zZW5kKDB4MDIsZHV0eSk7Cit9CisKK0VYUE9SVF9TWU1CT0woY29yZ2lfc3NwX2xjZHRnX3NlbmQpOworRVhQT1JUX1NZTUJPTChjb3JnaV9zc3BfYmxkdXR5X3NldCk7CisKKy8qCisgKiAgTWF4MTExMSBSb3V0aW5lcworICovCitpbnQgY29yZ2lfc3NwX21heDExMTFfZ2V0KHVsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCWxvbmcgdm9sdGFnZSA9IDAsIHZvbHRhZ2UxID0gMCwgdm9sdGFnZTIgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmdpX3NzcF9sb2NrLCBmbGFnKTsKKwlpZiAoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExID49IDApCisJCUdQQ1Ioc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7CisJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9Nb3Rvcm9sYSB8IChTU0NSMF9EU1MgJiAweDA3ICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoc3NwX21hY2hpbmZvLT5jbGtfbWF4MTExMSkpOworCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOworCisJdWRlbGF5KDEpOworCisJLyogVEIxL1JCMSAqLworCXNzcF93cml0ZV93b3JkKCZjb3JnaV9zc3BfZGV2LGRhdGEpOworCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYsICh1MzIqKSZ2b2x0YWdlMSk7IC8qIG51bGwgcmVhZCAqLworCisJLyogVEIxMi9SQjIgKi8KKwlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldiwwKTsKKwlzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2LCAodTMyKikmdm9sdGFnZTEpOworCisJLyogVEIxMy9SQjMqLworCXNzcF93cml0ZV93b3JkKCZjb3JnaV9zc3BfZGV2LDApOworCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYsICh1MzIqKSZ2b2x0YWdlMik7CisKKwlzc3BfZGlzYWJsZSgmY29yZ2lfc3NwX2Rldik7CisJc3NwX2NvbmZpZygmY29yZ2lfc3NwX2RldiwgKFNTQ1IwX05hdGlvbmFsIHwgKFNTQ1IwX0RTUyAmIDB4MGIgKSksIDAsIDAsIFNTQ1IwX1NlckNsa0Rpdihzc3BfbWFjaGluZm8tPmNsa19hZHM3ODQ2KSk7CisJc3NwX2VuYWJsZSgmY29yZ2lfc3NwX2Rldik7CisJaWYgKHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSA+PSAwKQorCQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSkgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX21heDExMTEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmdpX3NzcF9sb2NrLCBmbGFnKTsKKworCWlmICh2b2x0YWdlMSAmIDB4YzAgfHwgdm9sdGFnZTIgJiAweDNmKQorCQl2b2x0YWdlID0gLTE7CisJZWxzZQorCQl2b2x0YWdlID0gKCh2b2x0YWdlMSA8PCAyKSAmIDB4ZmMpIHwgKCh2b2x0YWdlMiA+PiA2KSAmIDB4MDMpOworCisJcmV0dXJuIHZvbHRhZ2U7Cit9CisKK0VYUE9SVF9TWU1CT0woY29yZ2lfc3NwX21heDExMTFfZ2V0KTsKKworLyoKKyAqICBTdXBwb3J0IFJvdXRpbmVzCisgKi8KKwordm9pZCBfX2luaXQgY29yZ2lfc3NwX3NldF9tYWNoaW5mbyhzdHJ1Y3QgY29yZ2lzc3BfbWFjaGluZm8gKm1hY2hpbmZvKQoreworCXNzcF9tYWNoaW5mbyA9IG1hY2hpbmZvOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwkvKiBDaGlwIFNlbGVjdCAtIERpc2FibGUgQWxsICovCisJaWYgKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uID49IDApCisJCXB4YV9ncGlvX21vZGUoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24gIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisJaWYgKHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSA+PSAwKQorCSAgICAgICAgcHhhX2dwaW9fbW9kZShzc3BfbWFjaGluZm8tPmNzX21heDExMTEgfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKKwlpZiAoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2ID49IDApCisgICAgICAgIAlweGFfZ3Bpb19tb2RlKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NiB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOworCisJcmV0ID0gc3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsIHNzcF9tYWNoaW5mby0+cG9ydCwgMCk7CisKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBTU1AgaGFuZGxlciFcbiIpOworCWVsc2UgeworCQlzc3BfZGlzYWJsZSgmY29yZ2lfc3NwX2Rldik7CisJCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoc3NwX21hY2hpbmZvLT5jbGtfYWRzNzg0NikpOworCQlzc3BfZW5hYmxlKCZjb3JnaV9zc3BfZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvcmdpX3NzcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXNzcF9leGl0KCZjb3JnaV9zc3BfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3JnaV9zc3Bfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzc3BfZmx1c2goJmNvcmdpX3NzcF9kZXYpOworCXNzcF9zYXZlX3N0YXRlKCZjb3JnaV9zc3BfZGV2LCZjb3JnaV9zc3Bfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29yZ2lfc3NwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaWYgKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uID49IDApCisJCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pOyAgLyogSGlnaCAtIERpc2FibGUgTENEIENvbnRyb2wvVGltaW5nIEdlbiAqLworCWlmIChzc3BfbWFjaGluZm8tPmNzX21heDExMTEgPj0gMCkKKwkJR1BTUihzc3BfbWFjaGluZm8tPmNzX21heDExMTEpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKTsgLyogSGlnaCAtIERpc2FibGUgTUFYMTExMSovCisJaWYgKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NiA+PSAwKQorCQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOyAvKiBIaWdoIC0gRGlzYWJsZSBBRFM3ODQ2Ki8KKwlzc3BfcmVzdG9yZV9zdGF0ZSgmY29yZ2lfc3NwX2RldiwmY29yZ2lfc3NwX3N0YXRlKTsKKwlzc3BfZW5hYmxlKCZjb3JnaV9zc3BfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb3JnaXNzcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGNvcmdpX3NzcF9wcm9iZSwKKwkucmVtb3ZlCQk9IGNvcmdpX3NzcF9yZW1vdmUsCisJLnN1c3BlbmQJPSBjb3JnaV9zc3Bfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGNvcmdpX3NzcF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImNvcmdpLXNzcCIsCisJfSwKK307CisKK2ludCBfX2luaXQgY29yZ2lfc3NwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXNzcF9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKGNvcmdpX3NzcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb3JnaS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvcmdpLmgKaW5kZXggNTg1OTcwZS4uNzIzOTI4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvcmdpLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvcmdpLmgKQEAgLTExMyw2ICsxMTMsNyBAQAogICogU2hhcmVkIGRhdGEgc3RydWN0dXJlcwogICovCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaXNjb29wX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvcmdpc3NwX2RldmljZTsKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ09SR0lfSCAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggOWMxNjNlMS4uMzJiYjRhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC05LDcgKzksOCBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0KKyNpZm5kZWYgX19BU01fTUFDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUlFTX0gKIAogI2lmZGVmIENPTkZJR19QWEFfSEFWRV9JU0FfSVJRUwogI2RlZmluZSBQWEFfSVNBX0lSUSh4KQkoeCkKQEAgLTI2NCwzICsyNjUsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBDT05GSUdfUENJX0hPU1RfSVRFODE1MiAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9JUlFTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eF9uYW5kLmgKaW5kZXggZWI0YjE5MC4uZWIzNWZjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eF9uYW5kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eF9uYW5kLmgKQEAgLTQsNiArNCw0MyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCitzdHJ1Y3QgcHhhM3h4X25hbmRfdGltaW5nIHsKKwl1bnNpZ25lZCBpbnQJdENIOyAgLyogRW5hYmxlIHNpZ25hbCBob2xkIHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQJdENTOyAgLyogRW5hYmxlIHNpZ25hbCBzZXR1cCB0aW1lICovCisJdW5zaWduZWQgaW50CXRXSDsgIC8qIE5EX25XRSBoaWdoIGR1cmF0aW9uICovCisJdW5zaWduZWQgaW50CXRXUDsgIC8qIE5EX25XRSBwdWxzZSB0aW1lICovCisJdW5zaWduZWQgaW50CXRSSDsgIC8qIE5EX25SRSBoaWdoIGR1cmF0aW9uICovCisJdW5zaWduZWQgaW50CXRSUDsgIC8qIE5EX25SRSBwdWxzZSB3aWR0aCAqLworCXVuc2lnbmVkIGludAl0UjsgICAvKiBORF9uV0UgaGlnaCB0byBORF9uUkUgbG93IGZvciByZWFkICovCisJdW5zaWduZWQgaW50CXRXSFI7IC8qIE5EX25XRSBoaWdoIHRvIE5EX25SRSBsb3cgZm9yIHN0YXR1cyByZWFkICovCisJdW5zaWduZWQgaW50CXRBUjsgIC8qIE5EX0FMRSBsb3cgdG8gTkRfblJFIGxvdyBkZWxheSAqLworfTsKKworc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCB7CisJdWludDE2X3QJcmVhZDE7CisJdWludDE2X3QJcmVhZDI7CisJdWludDE2X3QJcHJvZ3JhbTsKKwl1aW50MTZfdAlyZWFkX3N0YXR1czsKKwl1aW50MTZfdAlyZWFkX2lkOworCXVpbnQxNl90CWVyYXNlOworCXVpbnQxNl90CXJlc2V0OworCXVpbnQxNl90CWxvY2s7CisJdWludDE2X3QJdW5sb2NrOworCXVpbnQxNl90CWxvY2tfc3RhdHVzOworfTsKKworc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoIHsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfdGltaW5nICp0aW1pbmc7IC8qIE5BTkQgRmxhc2ggdGltaW5nICovCisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0OworCisJdWludDMyX3QgcGFnZV9wZXJfYmxvY2s7LyogUGFnZXMgcGVyIGJsb2NrIChQR19QRVJfQkxLKSAqLworCXVpbnQzMl90IHBhZ2Vfc2l6ZTsJLyogUGFnZSBzaXplIGluIGJ5dGVzIChQQUdFX1NaKSAqLworCXVpbnQzMl90IGZsYXNoX3dpZHRoOwkvKiBXaWR0aCBvZiBGbGFzaCBtZW1vcnkgKERXSURUSF9NKSAqLworCXVpbnQzMl90IGRmY193aWR0aDsJLyogV2lkdGggb2YgZmxhc2ggY29udHJvbGxlcihEV0lEVEhfQykgKi8KKwl1aW50MzJfdCBudW1fYmxvY2tzOwkvKiBOdW1iZXIgb2YgcGh5c2ljYWwgYmxvY2tzIGluIEZsYXNoICovCisJdWludDMyX3QgY2hpcF9pZDsKK307CisKIHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhIHsKIAogCS8qIHRoZSBkYXRhIGZsYXNoIGJ1cyBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgU3RhdGljIE1lbW9yeQpAQCAtMTIsOCArNDksMTEgQEAKIAkgKi8KIAlpbnQJZW5hYmxlX2FyYml0ZXI7CiAKLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0JdW5zaWduZWQgaW50CW5yX3BhcnRzOworCWNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uCQkqcGFydHM7CisJdW5zaWduZWQgaW50CQkJCW5yX3BhcnRzOworCisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICogCWZsYXNoOworCXNpemVfdAkJCQkJbnVtX2ZsYXNoOwogfTsKIAogZXh0ZXJuIHZvaWQgcHhhM3h4X3NldF9uYW5kX2luZm8oc3RydWN0IHB4YTN4eF9uYW5kX3BsYXRmb3JtX2RhdGEgKmluZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NwaXR6LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3BpdHouaAppbmRleCAzMWFjMjZiLi5mYTE5OThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3BpdHouaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3BpdHouaApAQCAtMTQyLDcgKzE0Miw3IEBACiAKICNkZWZpbmUgU1BJVFpfU0NQMl9HUElPX0JBU0UJCShOUl9CVUlMVElOX0dQSU8gKyAxMikKICNkZWZpbmUgU1BJVFpfR1BJT19JUl9PTgkJKFNQSVRaX1NDUDJfR1BJT19CQVNFICsgMCkKLSNkZWZpbmUgU1BJVFpfR1BJT19BS0lOX1BVTExVUAkJKFNQSVRaX1NDUDJfR1BJT19CQVNFICsgMQorI2RlZmluZSBTUElUWl9HUElPX0FLSU5fUFVMTFVQCQkoU1BJVFpfU0NQMl9HUElPX0JBU0UgKyAxKQogI2RlZmluZSBTUElUWl9HUElPX1JFU0VSVkVEXzEJCShTUElUWl9TQ1AyX0dQSU9fQkFTRSArIDIpCiAjZGVmaW5lIFNQSVRaX0dQSU9fUkVTRVJWRURfMgkJKFNQSVRaX1NDUDJfR1BJT19CQVNFICsgMykKICNkZWZpbmUgU1BJVFpfR1BJT19SRVNFUlZFRF8zCQkoU1BJVFpfU0NQMl9HUElPX0JBU0UgKyA0KQpAQCAtMTg3LDQgKzE4Nyw1IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6c2Nvb3BfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpzY29vcDJfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpzc3BfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBzaGFycHNsX2NoYXJnZXJfbWFjaGluZm8gc3BpdHpfcG1fbWFjaGluZm87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdG9zYS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3Rvc2EuaAppbmRleCBhNzI4MDNmLi40ZGYyZDM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdG9zYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmgKQEAgLTU5LDggKzU5LDYgQEAKICAqIFRDNjM5M1hCIEdQSU9zCiAgKi8KICNkZWZpbmUgVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UJCShOUl9CVUlMVElOX0dQSU8gKyAyICogMTIpCi0jZGVmaW5lIFRPU0FfVEM2MzkzWEJfR1BJTyhpKQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgKGkpKQotI2RlZmluZSBUT1NBX1RDNjM5M1hCX0dQSU9fQklUKGdwaW8pCSgxIDw8IChncGlvIC0gVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UpKQogCiAjZGVmaW5lIFRPU0FfR1BJT19UR19PTgkJCShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSArIDApCiAjZGVmaW5lIFRPU0FfR1BJT19MX01VVEUJCShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSArIDEpCkBAIC0xOTUsNCArMTkzLDcgQEAKICNkZWZpbmUgVE9TQV9LRVlfTUFJTAkJS0VZX01BSUwKICNlbmRpZgogCitzdHJ1Y3Qgc3BpX2RldmljZTsKK2V4dGVybiBpbnQgdG9zYV9ibF9lbmFibGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGVuYWJsZSk7CisKICNlbmRpZiAvKiBfQVNNX0FSQ0hfVE9TQV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvenlsb25pdGUuaAppbmRleCAwZDM1Y2EwLi5iZjY3ODVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvenlsb25pdGUuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvenlsb25pdGUuaApAQCAtMzAsNyArMzAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHp5bG9uaXRlX3B4YTMwMF9pbml0KHZvaWQpCiB7CiAJaWYgKGNwdV9pc19weGEzMDAoKSB8fCBjcHVfaXNfcHhhMzEwKCkpCi0JCXBhbmljKCIlczogUFhBMzAwL1BYQTMxMCBub3Qgc3VwcG9ydGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwYW5pYygiJXM6IFBYQTMwMC9QWEEzMTAgbm90IHN1cHBvcnRlZFxuIiwgX19mdW5jX18pOwogfQogI2VuZGlmCiAKQEAgLTQwLDcgKzQwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB6eWxvbml0ZV9weGEzMjBfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfcHhhMzIwKCkpCi0JCXBhbmljKCIlczogUFhBMzIwIG5vdCBzdXBwb3J0ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXBhbmljKCIlczogUFhBMzIwIG5vdCBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wd20uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B3bS5jCmluZGV4IDMxNmNkOTguLjc0ZTJlYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B3bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B3bS5jCkBAIC02MCw3ICs2MCw3IEBACiAJZG9fZGl2KGMsIDEwMDAwMDAwMDApOwogCXBlcmlvZF9jeWNsZXMgPSBjOwogCi0JaWYgKHBlcmlvZF9jeWNsZXMgPCAwKQorCWlmIChwZXJpb2RfY3ljbGVzIDwgMSkKIAkJcGVyaW9kX2N5Y2xlcyA9IDE7CiAJcHJlc2NhbGUgPSAocGVyaW9kX2N5Y2xlcyAtIDEpIC8gMTAyNDsKIAlwdiA9IHBlcmlvZF9jeWNsZXMgLyAocHJlc2NhbGUgKyAxKSAtIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKaW5kZXggMTVjMmYxYS4uZjA4NDVjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpAQCAtMTE2LDIwICsxMTYsMzMgQEAKIAl7ICAgMCwgICAwfSwKIH07CiAKKy8qIE1BWDExMTEgQ29tbWFuZHMgKi8KKyNkZWZpbmUgTUFYQ1RSTF9QRDAgICAgICAxdSA8PCAwCisjZGVmaW5lIE1BWENUUkxfUEQxICAgICAgMXUgPDwgMQorI2RlZmluZSBNQVhDVFJMX1NHTCAgICAgIDF1IDw8IDIKKyNkZWZpbmUgTUFYQ1RSTF9VTkkgICAgICAxdSA8PCAzCisjZGVmaW5lIE1BWENUUkxfU0VMX1NIICAgNAorI2RlZmluZSBNQVhDVFJMX1NUUiAgICAgIDF1IDw8IDcKKwogLyoKICAqIFJlYWQgTUFYMTExMSBBREMKICAqLwotZXh0ZXJuIGludCBtYXgxMTExX3JlYWRfY2hhbm5lbChpbnQpOwotCiBpbnQgc2hhcnBzbF9wbV9weGFfcmVhZF9tYXgxMTExKGludCBjaGFubmVsKQogewogCWlmIChtYWNoaW5lX2lzX3Rvc2EoKSkgLy8gVWdseSwgYmV0dGVyIG1vdmUgdGhpcyBmdW5jdGlvbiBpbnRvIGFub3RoZXIgbW9kdWxlCiAJICAgIHJldHVybiAwOwogCisjaWZkZWYgQ09ORklHX0NPUkdJX1NTUF9ERVBSRUNBVEVECisJcmV0dXJuIGNvcmdpX3NzcF9tYXgxMTExX2dldCgoY2hhbm5lbCA8PCBNQVhDVFJMX1NFTF9TSCkgfCBNQVhDVFJMX1BEMCB8IE1BWENUUkxfUEQxCisJCQl8IE1BWENUUkxfU0dMIHwgTUFYQ1RSTF9VTkkgfCBNQVhDVFJMX1NUUik7CisjZWxzZQorCWV4dGVybiBpbnQgbWF4MTExMV9yZWFkX2NoYW5uZWwoaW50KTsKKwogCS8qIG1heDExMTEgYWNjZXB0cyBjaGFubmVscyBmcm9tIDAtMywgaG93ZXZlciwKIAkgKiBpdCBpcyBlbmNvZGVkIGZyb20gMC03IGhlcmUgaW4gdGhlIGNvZGUuCiAJICovCiAJcmV0dXJuIG1heDExMTFfcmVhZF9jaGFubmVsKGNoYW5uZWwgPj4gMSk7CisjZW5kaWYKIH0KIAogdm9pZCBzaGFycHNsX3BtX3B4YV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKaW5kZXggMTMwZTM3ZS4uMjI0ODk3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3Rvc2FfYnQuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxtYWNoL3Rvc2EuaD4KQEAgLTYxMiw3ICs2MTQsNyBAQAogCXJjID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19UQzYzOTNYQl9TVVNQRU5ELCAidGM2MzkzeGIgI3N1c3BlbmQiKTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX3JlcV9zdXNwZW5kOwotCXJjID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19UQzYzOTNYQl9MM1ZfT04sICJsM3YiKTsKKwlyYyA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fVEM2MzkzWEJfTDNWX09OLCAidGM2MzkzeGIgbDN2Iik7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9yZXFfbDN2OwogCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19UQzYzOTNYQl9MM1ZfT04sIDApOwpAQCAtNzA2LDE2ICs3MDgsMzkgQEAKIAkuYmFkYmxvY2tfcGF0dGVybiA9ICZ0b3NhX3RjNjM5M3hiX25hbmRfYmJ0LAogfTsKIAotc3RhdGljIHN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhIHRvc2FfdGM2MzkzeGJfc2V0dXAgPSB7CitzdGF0aWMgaW50IHRvc2FfdGM2MzkzeGJfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCByYzsKKworCXJjID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19DQVJEX1ZDQ19PTiwgIkNBUkRfVkNDX09OIik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9yZXE7CisKKwlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChUT1NBX0dQSU9fQ0FSRF9WQ0NfT04sIDEpOworCWlmIChyYykKKwkJZ290byBlcnJfZGlyOworCisJcmV0dXJuIHJjOworCitlcnJfZGlyOgorCWdwaW9fZnJlZShUT1NBX0dQSU9fQ0FSRF9WQ0NfT04pOworZXJyX3JlcToKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2FfdGM2MzkzeGJfdGVhcmRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShUT1NBX0dQSU9fQ0FSRF9WQ0NfT04pOworfQorCitzdGF0aWMgc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgdG9zYV90YzYzOTN4Yl9kYXRhID0gewogCS5zY3JfcGxsMmNyCT0gMHgwY2MxLAogCS5zY3JfZ3Blcgk9IDB4MzMwMCwKLQkuc2NyX2dwb19kc3IJPQotCQlUT1NBX1RDNjM5M1hCX0dQSU9fQklUKFRPU0FfR1BJT19DQVJEX1ZDQ19PTiksCi0JLnNjcl9ncG9fZG9lY3IJPQotCQlUT1NBX1RDNjM5M1hCX0dQSU9fQklUKFRPU0FfR1BJT19DQVJEX1ZDQ19PTiksCiAKIAkuaXJxX2Jhc2UJPSBJUlFfQk9BUkRfU1RBUlQsCiAJLmdwaW9fYmFzZQk9IFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFLAorCS5zZXR1cAkJPSB0b3NhX3RjNjM5M3hiX3NldHVwLAorCS50ZWFyZG93bgk9IHRvc2FfdGM2MzkzeGJfdGVhcmRvd24sCiAKIAkuZW5hYmxlCQk9IHRvc2FfdGM2MzkzeGJfZW5hYmxlLAogCS5kaXNhYmxlCT0gdG9zYV90YzYzOTN4Yl9kaXNhYmxlLApAQCAtNzIzLDYgKzc0OCw4IEBACiAJLnJlc3VtZQkJPSB0b3NhX3RjNjM5M3hiX3Jlc3VtZSwKIAogCS5uYW5kX2RhdGEJPSAmdG9zYV90YzYzOTN4Yl9uYW5kX2NvbmZpZywKKworCS5yZXN1bWVfcmVzdG9yZSA9IDEsCiB9OwogCiAKQEAgLTczMCw3ICs3NTcsNyBAQAogCS5uYW1lCT0gInRjNjM5M3hiIiwKIAkuaWQJPSAtMSwKIAkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0b3NhX3RjNjM5M3hiX3NldHVwLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ0b3NhX3RjNjM5M3hiX2RhdGEsCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGM2MzkzeGJfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSB0YzYzOTN4Yl9yZXNvdXJjZXMsCkBAIC03NDcsNiArNzc0LDIwIEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhID0gJnRvc2FfYnRfZGF0YSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhX3NzcF9tYXN0ZXJfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMJPSAidG9zYS1sY2QiLAorCQkvLyAucGxhdGZvcm1fZGF0YQorCQkubWF4X3NwZWVkX2h6CT0gMjg3NTAsCisJCS5idXNfbnVtCT0gMiwKKwkJLmNoaXBfc2VsZWN0CT0gMCwKKwkJLm1vZGUJCT0gU1BJX01PREVfMCwKKwl9LAorfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZ0b3Nhc2Nvb3BfZGV2aWNlLApAQCAtODAxLDYgKzg0Miw5IEBACiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKIAlwbGF0Zm9ybV9zY29vcF9jb25maWcgPSAmdG9zYV9wY21jaWFfY29uZmlnOwogCisJcHhhMnh4X3NldF9zcGlfaW5mbygyLCAmcHhhX3NzcF9tYXN0ZXJfaW5mbyk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpX2JvYXJkX2luZm8pKTsKKwogCWNsa19hZGRfYWxpYXMoIkNMS19DSzNQNk1JIiwgJnRjNjM5M3hiX2RldmljZS5kZXYsICJHUElPMTFfQ0xLIiwgTlVMTCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCmluZGV4IGExM2RiZjMuLmE3MmUzYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJLyogU3dpdGNoIG1vZGUgKi8KIAlpZiAobW9kZSAmIElSX1NJUk1PREUpCiAJCXRyaXplcHNfY29ueHNfaXJjciAmPSB+Q29uWFNfSVJDUl9NT0RFOwkvKiBTbG93IG1vZGUgKi8KLQllbHNlIGlmIChtb2RlICYgSVJfRklSTU9ERSkgeworCWVsc2UgaWYgKG1vZGUgJiBJUl9GSVJNT0RFKQogCQl0cml6ZXBzX2NvbnhzX2lyY3IgfD0gQ29uWFNfSVJDUl9NT0RFOwkvKiBGYXN0IG1vZGUgKi8KIAogCS8qIFN3aXRjaCBwb3dlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwppbmRleCAyZjYwYmY2Li5mODU0ZTczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwpAQCAtMTAzMyw4ICsxMDMzLDcgQEAKIAogCWZjbGsgPSBwbGwgLyBzM2MyNDQzX2ZjbGtfZGl2KGNsa2RpdjApOwogCWhjbGsgPSBzM2MyNDQzX3ByZWRpdl9nZXRyYXRlKCZjbGtfcHJlZGl2KTsKLQloY2xrID0gaGNsayAvIHMzYzI0NDNfZ2V0X2hkaXYoY2xrZGl2MCk7Ci0JaGNsayA9IGhjbGsgLyAoKGNsa2RpdjAgJiBTM0MyNDQzX0NMS0RJVjBfSEFMRl9IQ0xLKSA/IDIgOiAxKTsKKwloY2xrIC89IHMzYzI0NDNfZ2V0X2hkaXYoY2xrZGl2MCk7CiAgCXBjbGsgPSBoY2xrIC8gKChjbGtkaXYwICYgUzNDMjQ0M19DTEtESVYwX0hBTEZfUENMSykgPyAyIDogMSk7CiAKIAlzM2MyNHh4X3NldHVwX2Nsb2Nrcyh4dGFsLCBmY2xrLCBoY2xrLCBwY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pZGUuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM5OWM4Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaWRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk4IEh1Z28gRmllbm5lcyAmIE5pY29sYXMgUGl0cmUKLSAqCi0gKiAxOC1hdWctMjAwMDogQ2xlYW51cCBieSBFcmlrIE1vdXcgKEouQS5LLk1vdXdAaXRzLnR1ZGVsZnQubmwpCi0gKiAgICAgICAgICAgICAgR2V0IHJpZCBvZiB0aGUgc3BlY2lhbCBpZGVfaW5pdF9od2lmX3BvcnRzKCkgZnVuY3Rpb25zCi0gKiAgICAgICAgICAgICAgYW5kIG1ha2UgYSBnZW5lcmFsaXNlZCBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbAotICogICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2Vycm9yICJUaGlzIGNvZGUgaXMgYnJva2VuIGFuZCBuZWVkcyB1cGRhdGUgdG8gbWF0Y2ggd2l0aCBjdXJyZW50IGlkZSBzdXBwb3J0IgotCi0KLS8qCi0gKiBTZXQgdXAgYSBodyBzdHJ1Y3R1cmUgZm9yIGEgc3BlY2lmaWVkIGRhdGEgcG9ydCwgY29udHJvbCBwb3J0IGFuZCBJUlEuCi0gKiBUaGlzIHNob3VsZCBmb2xsb3cgd2hhdGV2ZXIgdGhlIGRlZmF1bHQgaW50ZXJmYWNlIHVzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqaHcsIHVuc2lnbmVkIGxvbmcgZGF0YV9wb3J0LAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGN0cmxfcG9ydCwgaW50ICppcnEpCi17Ci0JdW5zaWduZWQgbG9uZyByZWcgPSBkYXRhX3BvcnQ7Ci0JaW50IGk7Ci0JaW50IHJlZ2luY3IgPSAxOwotCi0JLyogVGhlIEVtcGVnIGJvYXJkIGhhcyB0aGUgZmlyc3QgdHdvIGFkZHJlc3MgbGluZXMgdW51c2VkICovCi0JaWYgKG1hY2hpbmVfaXNfZW1wZWcoKSkKLQkJcmVnaW5jciA9IDEgPDwgMjsKLQotCS8qIFRoZSBMQVJUIGRvZXNuJ3QgdXNlIEEwIGZvciBJREUgKi8KLQlpZiAobWFjaGluZV9pc19sYXJ0KCkpCi0JCXJlZ2luY3IgPSAxIDw8IDE7Ci0KLQltZW1zZXQoaHcsIDAsIHNpemVvZigqaHcpKTsKLQotCWZvciAoaSA9IDA7IGkgPD0gNzsgaSsrKSB7Ci0JCWh3LT5pb19wb3J0c19hcnJheVtpXSA9IHJlZzsKLQkJcmVnICs9IHJlZ2luY3I7Ci0JfQotCi0JaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RybF9wb3J0OwotCi0JaWYgKGlycSkKLQkJKmlycSA9IDA7Ci19Ci0KLS8qCi0gKiBUaGlzIHJlZ2lzdGVycyB0aGUgc3RhbmRhcmQgcG9ydHMgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlIHdpdGggdGhlIElERQotICogZHJpdmVyLgotICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1pZGVfaW5pdF9kZWZhdWx0X2h3aWZzKHZvaWQpCi17Ci0gICAgaWYgKG1hY2hpbmVfaXNfbGFydCgpKSB7Ci0jaWZkZWYgQ09ORklHX1NBMTEwMF9MQVJUCi0gICAgICAgIGh3X3JlZ3NfdCBodzsKLQotICAgICAgICAvKiBFbmFibGUgR1BJTyBhcyBpbnRlcnJ1cHQgbGluZSAqLwotICAgICAgICBHUERSICY9IH5MQVJUX0dQSU9fSURFOwotCXNldF9pcnFfdHlwZShMQVJUX0lSUV9JREUsIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQotICAgICAgICAvKiBzZXQgUENNQ0lBIGludGVyZmFjZSB0aW1pbmcgKi8KLSAgICAgICAgTUVDUiA9IDB4MDAwNjAwMDY7Ci0KLSAgICAgICAgLyogaW5pdCB0aGUgaW50ZXJmYWNlICovCi0JaWRlX2luaXRfaHdpZl9wb3J0cygmaHcsIFBDTUNJQV9JT18wX0JBU0UgKyAweDAwMDAsIFBDTUNJQV9JT18wX0JBU0UgKyAweDEwMDAsIE5VTEwpOwotICAgICAgICBody5pcnEgPSBMQVJUX0lSUV9JREU7Ci0gICAgICAgIGlkZV9yZWdpc3Rlcl9odygmaHcpOwotI2VuZGlmCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZDExOTM4OC4uYWI1ZjdhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC00MDAsOSArNDAwLDkgQEAKICMgQVJNdjYKIGNvbmZpZyBDUFVfVjYKIAlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX09NQVAyIHx8IEFSQ0hfTVgzIHx8IEFSQ0hfTVNNN1gwMEEgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IEFSQ0hfT01BUDIgfHwgQVJDSF9NWDMgfHwgQVJDSF9NU00gfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYKIAlkZWZhdWx0IHkgaWYgQVJDSF9NWDMKLQlkZWZhdWx0IHkgaWYgQVJDSF9NU003WDAwQQorCWRlZmF1bHQgeSBpZiBBUkNIX01TTQogCXNlbGVjdCBDUFVfMzJ2NgogCXNlbGVjdCBDUFVfQUJSVF9FVjYKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKaW5kZXggMzM5MjZjOS4uNTc4NmFkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NC5TCkBAIC0yOSw3ICsyOSw3IEBACiAgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgogICovCiBFTlRSWSh2NF9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKLSNpZmRlZiBDUFVfQ1AxNQorI2lmZGVmIENPTkZJR19DUFVfQ1AxNQogCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlCiAJbW92CXBjLCBscgpAQCAtNDgsNyArNDgsNyBAQAogICoJLSBmbGFncwktIHZtYV9hcmVhX3N0cnVjdCBmbGFncyBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKICAqLwogRU5UUlkodjRfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKLSNpZmRlZiBDUFVfQ1AxNQorI2lmZGVmIENPTkZJR19DUFVfQ1AxNQogCW1vdglpcCwgIzAKIAltY3JlcQlwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgZmx1c2ggSUQgY2FjaGUKIAltb3YJcGMsIGxyCkBAIC0xMTYsNyArMTE2LDcgQEAKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwogRU5UUlkodjRfZG1hX2ZsdXNoX3JhbmdlKQotI2lmZGVmIENQVV9DUDE1CisjaWZkZWYgQ09ORklHX0NQVV9DUDE1CiAJbW92CXIwLCAjMAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJCUAgZmx1c2ggSUQgY2FjaGUKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDM0ZTQyNDAuLjA3ZjgyZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTE4MCw4ICsxODAsOCBAQAogCW1vdglyMTAsICMweDFmCQkJQCBkb21haW5zIDAsIDEgPSBtYW5hZ2VyCiAJbWNyCXAxNSwgMCwgcjEwLCBjMywgYzAsIDAJCUAgbG9hZCBkb21haW4gYWNjZXNzIHJlZ2lzdGVyCiAjZW5kaWYKLQlsZHIJcjUsID0weDQwZTA0MGUwCi0JbGRyCXI2LCA9MHhmZjBhYTFhOAorCWxkcglyNSwgPTB4ZmYwYWExYTgKKwlsZHIJcjYsID0weDQwZTA0MGUwCiAJbWNyCXAxNSwgMCwgcjUsIGMxMCwgYzIsIDAJCUAgd3JpdGUgUFJSUgogCW1jcglwMTUsIDAsIHI2LCBjMTAsIGMyLCAxCQlAIHdyaXRlIE5NUlIKIAlhZHIJcjUsIHY3X2NydmFsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTcyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggU2FzY2hhIEhhdWVyLCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTkFORF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTkFORF9ICisKK3N0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgd2lkdGg7CS8qIGRhdGEgYnVzIHdpZHRoIGluIGJ5dGVzICovCisJaW50IGh3X2VjYzsJLyogMCBpZiBzdXByZXNzIGhhcmR3YXJlIEVDQyAqLworfTsKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX05BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbmVuYW5kLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaAppbmRleCBkNTdmMjAyLi40NjQ5ZDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaApAQCAtMTYsNiArMTYsMTAgQEAKIAlpbnQJCQlncGlvX2lycTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CiAJaW50CQkJbnJfcGFydHM7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgKCpvbmVuYW5kX3NldHVwKSh2b2lkIF9faW9tZW0gKik7CisJaW50ICAgICAgICAgICAgICAgICAgICAgKCpvbmVuYW5kX3NldHVwKSh2b2lkIF9faW9tZW0gKiwgaW50IGZyZXEpOwogCWludAkJCWRtYV9jaGFubmVsOwogfTsKKworaW50IG9tYXAyX29uZW5hbmRfcmVwaGFzZSh2b2lkKTsKKworI2RlZmluZSBPTkVOQU5EX01BWF9QQVJUSVRJT05TIDgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYwppbmRleCBiOGU4NTRmLi4zZmFkNjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS1jbG9jay5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAlpZiAocGFyZW50ID09IHMzYzI0eHhfcHdtY2xrX3RjbGsoaWQpKQogCQliaXRzID0gUzNDMjQxMF9UQ0ZHMV9NVVhfVENMSyA8PCBzaGlmdDsKIAllbHNlIGlmIChwYXJlbnQgPT0gczNjMjR4eF9wd21jbGtfdGRpdihpZCkpCi0JCWJpdHMgPSBjbGtfcHdtX3RkaXZfYml0cyh0b190ZGl2KGNsaykpIDw8IHNoaWZ0OworCQliaXRzID0gY2xrX3B3bV90ZGl2X2JpdHModG9fdGRpdihwYXJlbnQpKSA8PCBzaGlmdDsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMKaW5kZXggZmViNzcwZi4uZWM1NmI4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20uYwpAQCAtNTYsNyArNTYsNyBAQAogCQl9CQkJCQlcCiAJfQogCi0jZGVmaW5lIERFRklORV9USU1FUihfdG1yX25vLCBfaXJxKQkJCVwKKyNkZWZpbmUgREVGSU5FX1MzQ19USU1FUihfdG1yX25vLCBfaXJxKQkJCVwKIAkubmFtZQkJPSAiczNjMjR4eC1wd20iLAkJXAogCS5pZAkJPSBfdG1yX25vLAkJCVwKIAkubnVtX3Jlc291cmNlcwk9IFRJTUVSX1JFU09VUkNFX1NJWkUsCQlcCkBAIC02NywxMSArNjcsMTEgQEAKICAqLwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXJbXSA9IHsKLQlbMF0gPSB7IERFRklORV9USU1FUigwLCBJUlFfVElNRVIwKSB9LAotCVsxXSA9IHsgREVGSU5FX1RJTUVSKDEsIElSUV9USU1FUjEpIH0sCi0JWzJdID0geyBERUZJTkVfVElNRVIoMiwgSVJRX1RJTUVSMikgfSwKLQlbM10gPSB7IERFRklORV9USU1FUigzLCBJUlFfVElNRVIzKSB9LAotCVs0XSA9IHsgREVGSU5FX1RJTUVSKDQsIElSUV9USU1FUjQpIH0sCisJWzBdID0geyBERUZJTkVfUzNDX1RJTUVSKDAsIElSUV9USU1FUjApIH0sCisJWzFdID0geyBERUZJTkVfUzNDX1RJTUVSKDEsIElSUV9USU1FUjEpIH0sCisJWzJdID0geyBERUZJTkVfUzNDX1RJTUVSKDIsIElSUV9USU1FUjIpIH0sCisJWzNdID0geyBERUZJTkVfUzNDX1RJTUVSKDMsIElSUV9USU1FUjMpIH0sCisJWzRdID0geyBERUZJTkVfUzNDX1RJTUVSKDQsIElSUV9USU1FUjQpIH0sCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBwd21faXNfdGRpdihzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9LY29uZmlnCmluZGV4IDdjMjM5YTkuLjI2ZWNhODdmIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC03Miw2ICs3Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSBUeXBlIGFuZCBmZWF0dXJlcyIKIAogc291cmNlICJrZXJuZWwvdGltZS9LY29uZmlnIgpAQCAtMTE5LDExICsxMjEsMTkgQEAKIGNvbmZpZyBCT0FSRF9BVE5HVzEwMAogCWJvb2wgIkFUTkdXMTAwIE5ldHdvcmsgR2F0ZXdheSIKIAlzZWxlY3QgQ1BVX0FUMzJBUDcwMDAKKworY29uZmlnIEJPQVJEX0ZBVlJfMzIKKwlib29sICJGYXZyLTMyIExDRC1ib2FyZCIKKwlzZWxlY3QgQ1BVX0FUMzJBUDcwMDAKKworY29uZmlnIEJPQVJEX01JTUMyMDAKKwlib29sICJNSU1DMjAwIENQVSBib2FyZCIKKwlzZWxlY3QgQ1BVX0FUMzJBUDcwMDAKIGVuZGNob2ljZQogCi1pZiBCT0FSRF9BVFNUSzEwMDAKIHNvdXJjZSAiYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL0tjb25maWciCi1lbmRpZgorc291cmNlICJhcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9LY29uZmlnIgorc291cmNlICJhcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL0tjb25maWciCiAKIGNob2ljZQogCXByb21wdCAiQm9vdCBsb2FkZXIgdHlwZSIKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvTWFrZWZpbGUgYi9hcmNoL2F2cjMyL01ha2VmaWxlCmluZGV4IGM5ZTFmMGIuLmIwODhlMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvTWFrZWZpbGUKKysrIGIvYXJjaC9hdnIzMi9NYWtlZmlsZQpAQCAtMzMsNiArMzMsOCBAQAogY29yZS15CQkJCQkrPSAkKG1hY2hkaXJzKQogY29yZS0kKENPTkZJR19CT0FSRF9BVFNUSzEwMDApCQkrPSBhcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvCiBjb3JlLSQoQ09ORklHX0JPQVJEX0FUTkdXMTAwKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvCitjb3JlLSQoQ09ORklHX0JPQVJEX0ZBVlJfMzIpCQkrPSBhcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyLworY29yZS0kKENPTkZJR19CT0FSRF9NSU1DMjAwKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC8KIGNvcmUtJChDT05GSUdfTE9BREVSX1VfQk9PVCkJCSs9IGFyY2gvYXZyMzIvYm9vdC91LWJvb3QvCiBjb3JlLXkJCQkJCSs9IGFyY2gvYXZyMzIva2VybmVsLwogY29yZS15CQkJCQkrPSBhcmNoL2F2cjMyL21tLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvS2NvbmZpZyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmOTk0NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL0tjb25maWcKQEAgLTAsMCArMSwzNSBAQAorIyBOR1cxMDAgY3VzdG9taXphdGlvbgorCitpZiBCT0FSRF9BVE5HVzEwMAorCitjb25maWcgQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYCisJYm9vbCAiQWRkIHN1cHBvcnQgZm9yIEVWS0xDRDEwWCBhZGRvbiBib2FyZCIKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEVWS0xDRDEwMCAoUVZHQSkgb3IgRVZLTENEMTAxIChWR0EpCisJICBhZGRvbiBib2FyZCBmb3IgdGhlIE5HVzEwMC4gQnkgZW5hYmxpbmcgdGhpcyB0aGUgTENEIGNvbnRyb2xsZXIgYW5kCisJICBBQzk3IGNvbnRyb2xsZXIgaXMgYWRkZWQgYXMgcGxhdGZvcm0gZGV2aWNlcy4KKworCSAgVGhpcyBjaG9pY2UgZGlzYWJsZXMgdGhlIGRldGVjdCBwaW4gYW5kIHRoZSB3cml0ZS1wcm90ZWN0IHBpbiBmb3IgdGhlCisJICBNQ0kgcGxhdGZvcm0gZGV2aWNlLCBzaW5jZSBpdCBjb25mbGljdHMgd2l0aCB0aGUgTENEIHBsYXRmb3JtIGRldmljZS4KKwkgIFRoZSBNQ0kgcGlucyBjYW4gYmUgcmVlbmFibGVkIGJ5IGVkaXRpbmcgdGhlICJhZGQgZGV2aWNlIGZ1bmN0aW9uIiBidXQKKwkgIHRoaXMgbWF5IGJyZWFrIHRoZSBzZXR1cCBmb3Igb3RoZXIgZGlzcGxheXMgdGhhdCB1c2UgdGhlc2UgcGlucy4KKworCSAgQ2hvb3NlICdZJyBoZXJlIGlmIHlvdSBoYXZlIGEgRVZLTENEMTAwLzEwMSBjb25uZWN0ZWQgdG8gdGhlIE5HVzEwMC4KKworY2hvaWNlCisJcHJvbXB0ICJMQ0QgcGFuZWwgcmVzb2x1dGlvbiBvbiBFVktMQ0QxMFgiCisJZGVwZW5kcyBvbiBCT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFgKKwlkZWZhdWx0IEJPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9WR0EKKworY29uZmlnIEJPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9RVkdBCisJYm9vbCAiUVZHQSAoMzIweDI0MCkiCisKK2NvbmZpZyBCT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfVkdBCisJYm9vbCAiVkdBICg2NDB4NDgwKSIKKworY29uZmlnIEJPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9QT1dfUVZHQQorCWJvb2wgIlBvd2VydGlwIFFWR0EgKDMyMHgyNDApIgorCitlbmRjaG9pY2UKKworZW5kaWYJIyBCT0FSRF9BVE5HVzEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvTWFrZWZpbGUgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9NYWtlZmlsZQppbmRleCBjNzQwYWExLi42Mzc2ZjUzIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9NYWtlZmlsZQorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9NYWtlZmlsZQpAQCAtMSArMSwyIEBACi1vYmoteQkJCQkrPSBzZXR1cC5vIGZsYXNoLm8KK29iai15CQkJCQkrPSBzZXR1cC5vIGZsYXNoLm8KK29iai0kKENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFgpCSs9IGV2a2xjZDEweC5vCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL2V2a2xjZDEweC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDBiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIEJvYXJkLXNwZWNpZmljIHNldHVwIGNvZGUgZm9yIHRoZSBBVEVWS0xDRDEwWCBhZGRvbiBib2FyZCB0byB0aGUgQVROR1cxMDAKKyAqIE5ldHdvcmsgR2F0ZXdheQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8bWFjaC9hdDMyYXA3MDB4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBhYzk3YzBfZGF0YSA9IHsKKwkuZG1hX3J4X3BlcmlwaF9pZAk9IDMsCisJLmRtYV90eF9wZXJpcGhfaWQJPSA0LAorCS5kbWFfY29udHJvbGxlcl9pZAk9IDAsCisJLnJlc2V0X3BpbgkJPSBHUElPX1BJTl9QQigxOSksCit9OworCisjaWZkZWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9WR0EKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIF9faW5pdGRhdGEgdGNnMDU3dmdsYWRfbW9kZXNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICI2NDB4NDgwIEAgNjAiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSA2NDAsCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUygyNTE4MCksCisKKwkJLmxlZnRfbWFyZ2luCT0gNjQsCQkucmlnaHRfbWFyZ2luCT0gMzEsCisJCS51cHBlcl9tYXJnaW4JPSAzNCwJCS5sb3dlcl9tYXJnaW4JPSAyLAorCQkuaHN5bmNfbGVuCT0gOTYsCQkudnN5bmNfbGVuCT0gNCwKKworCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBfX2luaXRkYXRhIGF0ZXZrbGNkMTB4X2RlZmF1bHRfbW9uc3BlY3MgPSB7CisJLm1hbnVmYWN0dXJlcgkJPSAiS1lPIiwKKwkubW9uaXRvcgkJPSAiVENHMDU3VkdMQUQiLAorCS5tb2RlZGIJCQk9IHRjZzA1N3ZnbGFkX21vZGVzLAorCS5tb2RlZGJfbGVuCQk9IEFSUkFZX1NJWkUodGNnMDU3dmdsYWRfbW9kZXMpLAorCS5oZm1pbgkJCT0gMTk5NDgsCisJLmhmbWF4CQkJPSAzMTQ3OCwKKwkudmZtaW4JCQk9IDUwLAorCS52Zm1heAkJCT0gNjcsCisJLmRjbGttYXgJCT0gMjgzMzAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gX19pbml0ZGF0YSBhdGV2a2xjZDEweF9sY2RjX2RhdGEgPSB7CisJLmRlZmF1bHRfYnBwCQk9IDE2LAorCS5kZWZhdWx0X2RtYWNvbgkJPSBBVE1FTF9MQ0RDX0RNQUVOIHwgQVRNRUxfTENEQ19ETUEyREVOLAorCS5kZWZhdWx0X2xjZGNvbjIJPSAoQVRNRUxfTENEQ19ESVNUWVBFX1RGVAorCQkJCSAgIHwgQVRNRUxfTENEQ19DTEtNT0RfQUxXQVlTQUNUSVZFCisJCQkJICAgfCBBVE1FTF9MQ0RDX01FTU9SX0JJRyksCisJLmRlZmF1bHRfbW9uc3BlY3MJPSAmYXRldmtsY2QxMHhfZGVmYXVsdF9tb25zcGVjcywKKwkuZ3VhcmRfdGltZQkJPSAyLAorfTsKKyNlbGlmIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfUVZHQQorc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgX19pbml0ZGF0YSB0Y2cwNTdxdmxhZF9tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIjMyMHgyNDAgQCA2MCIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDMyMCwJCS55cmVzCQk9IDI0MCwKKwkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDYzMDApLAorCisJCS5sZWZ0X21hcmdpbgk9IDUyLAkJLnJpZ2h0X21hcmdpbgk9IDI4LAorCQkudXBwZXJfbWFyZ2luCT0gNywJCS5sb3dlcl9tYXJnaW4JPSAyLAorCQkuaHN5bmNfbGVuCT0gOTYsCQkudnN5bmNfbGVuCT0gNCwKKworCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBfX2luaXRkYXRhIGF0ZXZrbGNkMTB4X2RlZmF1bHRfbW9uc3BlY3MgPSB7CisJLm1hbnVmYWN0dXJlcgkJPSAiS1lPIiwKKwkubW9uaXRvcgkJPSAiVENHMDU3UVZMQUQiLAorCS5tb2RlZGIJCQk9IHRjZzA1N3F2bGFkX21vZGVzLAorCS5tb2RlZGJfbGVuCQk9IEFSUkFZX1NJWkUodGNnMDU3cXZsYWRfbW9kZXMpLAorCS5oZm1pbgkJCT0gMTk5NDgsCisJLmhmbWF4CQkJPSAzMTQ3OCwKKwkudmZtaW4JCQk9IDUwLAorCS52Zm1heAkJCT0gNjcsCisJLmRjbGttYXgJCT0gNzAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBfX2luaXRkYXRhIGF0ZXZrbGNkMTB4X2xjZGNfZGF0YSA9IHsKKwkuZGVmYXVsdF9icHAJCT0gMTYsCisJLmRlZmF1bHRfZG1hY29uCQk9IEFUTUVMX0xDRENfRE1BRU4gfCBBVE1FTF9MQ0RDX0RNQTJERU4sCisJLmRlZmF1bHRfbGNkY29uMgk9IChBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUCisJCQkJICAgfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUKKwkJCQkgICB8IEFUTUVMX0xDRENfTUVNT1JfQklHKSwKKwkuZGVmYXVsdF9tb25zcGVjcwk9ICZhdGV2a2xjZDEweF9kZWZhdWx0X21vbnNwZWNzLAorCS5ndWFyZF90aW1lCQk9IDIsCit9OworI2VsaWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9QT1dfUVZHQQorc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgX19pbml0ZGF0YSBwaDMyMDI0MHRfbW9kZXNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICIzMjB4MjQwIEAgNjAiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSAzMjAsCQkueXJlcwkJPSAyNDAsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUyg2MzAwKSwKKworCQkubGVmdF9tYXJnaW4JPSAzOCwJCS5yaWdodF9tYXJnaW4JPSAyMCwKKwkJLnVwcGVyX21hcmdpbgk9IDE1LAkJLmxvd2VyX21hcmdpbgk9IDUsCisJCS5oc3luY19sZW4JPSAzMCwJCS52c3luY19sZW4JPSAzLAorCisJCS5zeW5jCQk9IDAsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIF9faW5pdGRhdGEgYXRldmtsY2QxMHhfZGVmYXVsdF9tb25zcGVjcyA9IHsKKwkubWFudWZhY3R1cmVyCQk9ICJQT1ciLAorCS5tb25pdG9yCQk9ICJQSDMyMDI0MFQiLAorCS5tb2RlZGIJCQk9IHBoMzIwMjQwdF9tb2RlcywKKwkubW9kZWRiX2xlbgkJPSBBUlJBWV9TSVpFKHBoMzIwMjQwdF9tb2RlcyksCisJLmhmbWluCQkJPSAxNDQwMCwKKwkuaGZtYXgJCQk9IDIxNjAwLAorCS52Zm1pbgkJCT0gNTAsCisJLnZmbWF4CQkJPSA5MCwKKwkuZGNsa21heAkJPSA2NDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvIF9faW5pdGRhdGEgYXRldmtsY2QxMHhfbGNkY19kYXRhID0geworCS5kZWZhdWx0X2JwcAkJPSAxNiwKKwkuZGVmYXVsdF9kbWFjb24JCT0gQVRNRUxfTENEQ19ETUFFTiB8IEFUTUVMX0xDRENfRE1BMkRFTiwKKwkuZGVmYXVsdF9sY2Rjb24yCT0gKEFUTUVMX0xDRENfRElTVFlQRV9URlQKKwkJCQkgICB8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRQorCQkJCSAgIHwgQVRNRUxfTENEQ19NRU1PUl9CSUcpLAorCS5kZWZhdWx0X21vbnNwZWNzCT0gJmF0ZXZrbGNkMTB4X2RlZmF1bHRfbW9uc3BlY3MsCisJLmd1YXJkX3RpbWUJCT0gMiwKK307CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgYXRldmtsY2QxMHhfaW5pdCh2b2lkKQoreworCWF0MzJfYWRkX2RldmljZV9hYzk3YygwLCAmYWM5N2MwX2RhdGEpOworCisJYXQzMl9hZGRfZGV2aWNlX2xjZGMoMCwgJmF0ZXZrbGNkMTB4X2xjZGNfZGF0YSwKKwkJCWZibWVtX3N0YXJ0LCBmYm1lbV9zaXplLCAxKTsKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKGF0ZXZrbGNkMTB4X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvc2V0dXAuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL3NldHVwLmMKaW5kZXggNmM1NDU4MC4uMzJmYjliYSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvc2V0dXAuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9zZXR1cC5jCkBAIC01Niw4ICs1NiwxMyBAQAogc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1jaTBfZGF0YSA9IHsKIAkuc2xvdFswXSA9IHsKIAkJLmJ1c193aWR0aAk9IDQsCisjaWZuZGVmIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFgKIAkJLmRldGVjdF9waW4JPSBHUElPX1BJTl9QQygyNSksCiAJCS53cF9waW4JCT0gR1BJT19QSU5fUEUoMCksCisjZWxzZQorCQkuZGV0ZWN0X3Bpbgk9IEdQSU9fUElOX05PTkUsCisJCS53cF9waW4JCT0gR1BJT19QSU5fTk9ORSwKKyNlbmRpZgogCX0sCiB9OwogCkBAIC0xNzIsOCArMTc3LDYgQEAKIAkgKiByZXNlcnZlIGFueSBwaW5zIGZvciBpdC4KIAkgKi8KIAotCWF0MzJfYWRkX3N5c3RlbV9kZXZpY2VzKCk7Ci0KIAlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMCk7CiAKIAlzZXRfaHdfYWRkcihhdDMyX2FkZF9kZXZpY2VfZXRoKDAsICZldGhfZGF0YVswXSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jCmluZGV4IDI5ZTViNTEuLjVjNWNkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMKQEAgLTMwNSw4ICszMDUsNiBAQAogCWF0MzJfcmVzZXJ2ZV9waW4oR1BJT19QSU5fUEUoMTUpKTsJLyogREFUQVszMV0JKi8KIAlhdDMyX3Jlc2VydmVfcGluKEdQSU9fUElOX1BFKDI2KSk7CS8qIFNEQ1MJCSovCiAKLQlhdDMyX2FkZF9zeXN0ZW1fZGV2aWNlcygpOwotCiAjaWZkZWYgQ09ORklHX0JPQVJEX0FUU1RLMTAwNgogCXNtY19zZXRfdGltaW5nKCZuYW5kX2NvbmZpZywgJm5hbmRfdGltaW5nKTsKIAlzbWNfc2V0X2NvbmZpZ3VyYXRpb24oMywgJm5hbmRfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYwppbmRleCBiZTA4OWQ3Zi4uMTM0YjU2NiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMy5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYwpAQCAtMTQ5LDggKzE0OSw2IEBACiAJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgxNSkpOwkvKiBEQVRBWzMxXQkqLwogCWF0MzJfcmVzZXJ2ZV9waW4oR1BJT19QSU5fUEUoMjYpKTsJLyogU0RDUwkJKi8KIAotCWF0MzJfYWRkX3N5c3RlbV9kZXZpY2VzKCk7Ci0KICNpZmRlZglDT05GSUdfQk9BUkRfQVRTVEsxMDBYX1NXMl9DVVNUT00KIAlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jCmluZGV4IDI0OGVmMjMuLmNiMzJlYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDQuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDA0LmMKQEAgLTEzMiw4ICsxMzIsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdHN0azEwMDRfaW5pdCh2b2lkKQogewotCWF0MzJfYWRkX3N5c3RlbV9kZXZpY2VzKCk7Ci0KICNpZmRlZglDT05GSUdfQk9BUkRfQVRTVEsxMDBYX1NXMl9DVVNUT00KIAlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODNkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL0tjb25maWcKQEAgLTAsMCArMSwyMiBAQAorIyBGYXZyLTMyIGN1c3RvbWl6YXRpb24KKworaWYgQk9BUkRfRkFWUl8zMgorCitjb25maWcgQk9BUkRfRkFWUjMyX0FCREFDX1JBVEUKKwlpbnQgIkRBQyB0YXJnZXQgcmF0ZSIKKwlkZWZhdWx0IDQ0MTAwCisJcmFuZ2UgMzIwMDAgNTAwMDAKKwloZWxwCisJICBTcGVjaWZ5IHRoZSB0YXJnZXQgcmF0ZSB0aGUgaW50ZXJuYWwgREFDIHNob3VsZCB0cnkgdG8gbWF0Y2guIFRoaXMKKwkgIHdpbGwgdXNlIFBMTDEgdG8gZ2VuZXJhdGUgYSBmcmVxdWVuY3kgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhpcworCSAgcmF0ZS4KKworCSAgTXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIDMyMDAwIHRvIDUwMDAwLCB3aGljaCBzaG91bGQgYmUgc3VpdGFibGUgdG8KKwkgIGdlbmVyYXRlIG1vc3Qgb3RoZXIgZnJlcXVlbmNpZXMgaW4gcG93ZXIgb2YgMiBzdGVwcy4KKworCSAgRXg6CisJCTQ4MDAwIHdpbGwgYWxzbyBzdWl0IDI0MDAwIGFuZCAxMjAwMAorCQk0NDEwMCB3aWxsIGFsc28gc3VpdCAyMjA1MCBhbmQgMTEwMjUKKwkJMzIwMDAgd2lsbCBhbHNvIHN1aXQgMTYwMDAgYW5kIDgwMDAKKworZW5kaWYgIyBCT0FSRF9GQVZSXzMyCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL01ha2VmaWxlIGIvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzRmMjE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQkrPSBzZXR1cC5vIGZsYXNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2ZhdnItMzIvZmxhc2guYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2ZhdnItMzIvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjEzOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9mbGFzaC5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBGYXZyLTMyIGJvYXJkLXNwZWNpZmljIGZsYXNoIGluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvc21jLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgc21jX3RpbWluZyBmbGFzaF90aW1pbmcgX19pbml0ZGF0YSA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDQwLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMTAsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gODAsCisJLm5yZF9wdWxzZQkJPSA0MCwKKwkubmNzX3dyaXRlX3B1bHNlCT0gNjUsCisJLm53ZV9wdWxzZQkJPSA1NSwKKworCS5yZWFkX2N5Y2xlCQk9IDEyMCwKKwkud3JpdGVfY3ljbGUJCT0gMTIwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbWNfY29uZmlnIGZsYXNoX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5idXNfd2lkdGgJCT0gMiwKKwkubnJkX2NvbnRyb2xsZWQJCT0gMSwKKwkubndlX2NvbnRyb2xsZWQJCT0gMSwKKwkuYnl0ZV93cml0ZQkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGZsYXNoX3BhcnRzW10gPSB7CisJeworCQkubmFtZSAgICAgICAgICAgPSAidS1ib290IiwKKwkJLm9mZnNldCAgICAgICAgID0gMHgwMDAwMDAwMCwKKwkJLnNpemUgICAgICAgICAgID0gMHgwMDAyMDAwMCwgICAgICAgICAgIC8qIDEyOCBLaUIgKi8KKwkJLm1hc2tfZmxhZ3MgICAgID0gTVREX1dSSVRFQUJMRSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gInJvb3QiLAorCQkub2Zmc2V0ICAgICAgICAgPSAweDAwMDIwMDAwLAorCQkuc2l6ZSAgICAgICAgICAgPSAweDAwN2QwMDAwLAorCX0sCisJeworCQkubmFtZSAgICAgICAgICAgPSAiZW52IiwKKwkJLm9mZnNldCAgICAgICAgID0gMHgwMDdmMDAwMCwKKwkJLnNpemUgICAgICAgICAgID0gMHgwMDAxMDAwMCwKKwkJLm1hc2tfZmxhZ3MgICAgID0gTVREX1dSSVRFQUJMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGZsYXNoX3BhcnRzKSwKKwkucGFydHMJCT0gZmxhc2hfcGFydHMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDAwMDAwMDAwLAorCS5lbmQJCT0gMHgwMDdmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9ICZmbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBTTUMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KK3N0YXRpYyBpbnQgX19pbml0IGZhdnIzMl9mbGFzaF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXNtY19zZXRfdGltaW5nKCZmbGFzaF9jb25maWcsICZmbGFzaF90aW1pbmcpOworCXJldCA9IHNtY19zZXRfY29uZmlndXJhdGlvbigwLCAmZmxhc2hfY29uZmlnKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhdnItMzI6IGZhaWxlZCB0byBzZXQgTk9SIGZsYXNoIHRpbWluZ1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZmbGFzaF9kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoZmF2cjMyX2ZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzhmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL3NldHVwLmMKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBGYXZyLTMyIGJvYXJkLXNwZWNpZmljIHNldHVwIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvYXRtZWwtcHdtLWJsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKyNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2F0MzJhcDcwMHguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wb3J0bXV4Lmg+CisKKy8qIE9zY2lsbGF0b3IgZnJlcXVlbmNpZXMuIFRoZXNlIGFyZSBib2FyZC1zcGVjaWZpYyAqLwordW5zaWduZWQgbG9uZyBhdDMyX2JvYXJkX29zY19yYXRlc1szXSA9IHsKKwlbMF0gPSAzMjc2OCwJLyogMzIuNzY4IGtIeiBvbiBSVEMgb3NjICovCisJWzFdID0gMjAwMDAwMDAsCS8qIDIwIE1IeiBvbiBvc2MwICovCisJWzJdID0gMTIwMDAwMDAsCS8qIDEyIE1IeiBvbiBvc2MxICovCit9OworCisvKiBJbml0aWFsaXplZCBieSBib290bG9hZGVyLXNwZWNpZmljIHN0YXJ0dXAgY29kZS4gKi8KK3N0cnVjdCB0YWcgKmJvb3Rsb2FkZXJfdGFncyBfX2luaXRkYXRhOworCitzdHJ1Y3QgZXRoX2FkZHIgeworCXU4IGFkZHJbNl07Cit9Oworc3RhdGljIHN0cnVjdCBldGhfYWRkciBfX2luaXRkYXRhIGh3X2FkZHJbMV07CitzdGF0aWMgc3RydWN0IGV0aF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZXRoX2RhdGFbMV0gPSB7CisJeworCQkucGh5X21hc2sJPSB+KDFVIDw8IDEpLAorCX0sCit9OworCitzdGF0aWMgaW50IGFkczc4NDNfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fUElOX1BCKDMpKTsKK30KKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzNzg0M19kYXRhID0geworCS5tb2RlbAkJCT0gNzg0MywKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQzX2dldF9wZW5kb3duX3N0YXRlLAorCS5wcmVzc3VyZV9tYXgJCT0gMjU1LAorCS8qCisJICogVmFsdWVzIGJlbG93IGFyZSBmb3IgZGVib3VuY2UgZmlsdGVyaW5nLCB0aGVzZSBjYW4gYmUgZXhwZXJpbWVudGVkCisJICogd2l0aCBmdXJ0aGVyLgorCSAqLworCS5kZWJvdW5jZV9tYXgJCT0gMjAsCisJLmRlYm91bmNlX3JlcAkJPSA0LAorCS5kZWJvdW5jZV90b2wJCT0gNSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzcGkxX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS8qIEFEUzc4NDMgdG91Y2ggY29udHJvbGxlciAqLworCQkubW9kYWxpYXMJPSAiYWRzNzg0NiIsCisJCS5tYXhfc3BlZWRfaHoJPSAyMDAwMDAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkuYnVzX251bQk9IDEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkczc4NDNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgX19pbml0ZGF0YSBsYjEwNHYwM19tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIjY0MHg0ODAgQCA1MCIsCisJCS5yZWZyZXNoCT0gNTAsCisJCS54cmVzCQk9IDY0MCwJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDI1MTAwKSwKKworCQkubGVmdF9tYXJnaW4JPSA5MCwJCS5yaWdodF9tYXJnaW4JPSA3MCwKKwkJLnVwcGVyX21hcmdpbgk9IDMwLAkJLmxvd2VyX21hcmdpbgk9IDE1LAorCQkuaHN5bmNfbGVuCT0gMTIsCQkudnN5bmNfbGVuCT0gMiwKKworCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBfX2luaXRkYXRhIGZhdnIzMl9kZWZhdWx0X21vbnNwZWNzID0geworCS5tYW51ZmFjdHVyZXIJCT0gIkxHIiwKKwkubW9uaXRvcgkJPSAiTEIxMDRWMDMiLAorCS5tb2RlZGIJCQk9IGxiMTA0djAzX21vZGVzLAorCS5tb2RlZGJfbGVuCQk9IEFSUkFZX1NJWkUobGIxMDR2MDNfbW9kZXMpLAorCS5oZm1pbgkJCT0gMjcyNzMsCisJLmhmbWF4CQkJPSAzMTExMSwKKwkudmZtaW4JCQk9IDQ1LAorCS52Zm1heAkJCT0gNjAsCisJLmRjbGttYXgJCT0gMjgwMDAwMDAsCit9OworCitzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBfX2luaXRkYXRhIGZhdnIzMl9sY2RjX2RhdGEgPSB7CisJLmRlZmF1bHRfYnBwCQk9IDE2LAorCS5kZWZhdWx0X2RtYWNvbgkJPSBBVE1FTF9MQ0RDX0RNQUVOIHwgQVRNRUxfTENEQ19ETUEyREVOLAorCS5kZWZhdWx0X2xjZGNvbjIJPSAoQVRNRUxfTENEQ19ESVNUWVBFX1RGVAorCQkJCSAgIHwgQVRNRUxfTENEQ19DTEtNT0RfQUxXQVlTQUNUSVZFCisJCQkJICAgfCBBVE1FTF9MQ0RDX01FTU9SX0JJRyksCisJLmRlZmF1bHRfbW9uc3BlY3MJPSAmZmF2cjMyX2RlZmF1bHRfbW9uc3BlY3MsCisJLmd1YXJkX3RpbWUJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmF2cjMyX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkgPSAiZ3JlZW4iLAorCQkuZ3BpbwkJID0gR1BJT19QSU5fUEUoMTkpLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJCS5hY3RpdmVfbG93CSA9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkgPSAicmVkIiwKKwkJLmdwaW8JCSA9IEdQSU9fUElOX1BFKDIwKSwKKwkJLmFjdGl2ZV9sb3cJID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGZhdnIzMl9sZWRfZGF0YSA9IHsKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGZhdnIzMl9sZWRzKSwKKwkubGVkcwkJPSBmYXZyMzJfbGVkcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZhdnIzMl9sZWRfZGV2ID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZmYXZyMzJfbGVkX2RhdGEsCisJfSwKK307CisKKy8qCisgKiBUaGUgbmV4dCB0d28gZnVuY3Rpb25zIHNob3VsZCBnbyBhd2F5IGFzIHRoZSBib290IGxvYWRlciBpcworICogc3VwcG9zZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbWFjYiBhZGRyZXNzIHJlZ2lzdGVycyB3aXRoIGEgdmFsaWQKKyAqIGV0aGVybmV0IGFkZHJlc3MuIEJ1dCB3ZSBuZWVkIHRvIGtlZXAgaXQgYXJvdW5kIGZvciBhIHdoaWxlIHVudGlsCisgKiB3ZSBjYW4gYmUgcmVhc29uYWJseSBzdXJlIHRoZSBib290IGxvYWRlciBkb2VzIHRoaXMuCisgKgorICogVGhlIHBoeV9pZCBpcyBpZ25vcmVkIGFzIHRoZSBkcml2ZXIgd2lsbCBwcm9iZSBmb3IgaXQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19ldGhlcm5ldChzdHJ1Y3QgdGFnICp0YWcpCit7CisJaW50IGk7CisKKwlpID0gdGFnLT51LmV0aGVybmV0Lm1hY19pbmRleDsKKwlpZiAoaSA8IEFSUkFZX1NJWkUoaHdfYWRkcikpCisJCW1lbWNweShod19hZGRyW2ldLmFkZHIsIHRhZy0+dS5ldGhlcm5ldC5od19hZGRyZXNzLAorCQkgICAgICAgc2l6ZW9mKGh3X2FkZHJbaV0uYWRkcikpOworCisJcmV0dXJuIDA7Cit9CitfX3RhZ3RhYmxlKEFUQUdfRVRIRVJORVQsIHBhcnNlX3RhZ19ldGhlcm5ldCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfaHdfYWRkcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwljb25zdCB1OCAqYWRkcjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGNsayAqcGNsazsKKworCWlmICghcmVzKQorCQlyZXR1cm47CisJaWYgKHBkZXYtPmlkID49IEFSUkFZX1NJWkUoaHdfYWRkcikpCisJCXJldHVybjsKKworCWFkZHIgPSBod19hZGRyW3BkZXYtPmlkXS5hZGRyOworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGlzIGJvYXJkLXNwZWNpZmljIGNvZGUsIHdlJ2xsIGNoZWF0IGFuZCB1c2UgdGhlCisJICogcGh5c2ljYWwgYWRkcmVzcyBkaXJlY3RseSBhcyB3ZSBoYXBwZW4gdG8ga25vdyB0aGF0IGl0J3MKKwkgKiB0aGUgc2FtZSBhcyB0aGUgdmlydHVhbCBhZGRyZXNzLgorCSAqLworCXJlZ3MgPSAodm9pZCBfX2lvbWVtIF9fZm9yY2UgKilyZXMtPnN0YXJ0OworCXBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKCFwY2xrKQorCQlyZXR1cm47CisKKwljbGtfZW5hYmxlKHBjbGspOworCV9fcmF3X3dyaXRlbCgoYWRkclszXSA8PCAyNCkgfCAoYWRkclsyXSA8PCAxNikKKwkJICAgICB8IChhZGRyWzFdIDw8IDgpIHwgYWRkclswXSwgcmVncyArIDB4OTgpOworCV9fcmF3X3dyaXRlbCgoYWRkcls1XSA8PCA4KSB8IGFkZHJbNF0sIHJlZ3MgKyAweDljKTsKKwljbGtfZGlzYWJsZShwY2xrKTsKKwljbGtfcHV0KHBjbGspOworfQorCit2b2lkIF9faW5pdCBmYXZyMzJfc2V0dXBfbGVkcyh2b2lkKQoreworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmYXZyMzJfbGVkcyk7IGkrKykKKwkJYXQzMl9zZWxlY3RfZ3BpbyhmYXZyMzJfbGVkc1tpXS5ncGlvLCBBVDMyX0dQSU9GX09VVFBVVCk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmZhdnIzMl9sZWRfZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBhdG1lbF9wd21fYmxfcGxhdGZvcm1fZGF0YSBhdG1lbF9wd21fYmxfcGRhdGEgPSB7CisJLnB3bV9jaGFubmVsCQk9IDIsCisJLnB3bV9mcmVxdWVuY3kJCT0gMjAwMDAwLAorCS5wd21fY29tcGFyZV9tYXgJPSAzNDUsCisJLnB3bV9kdXR5X21heAkJPSAzNDUsCisJLnB3bV9kdXR5X21pbgkJPSA5MCwKKwkucHdtX2FjdGl2ZV9sb3cJCT0gMSwKKwkuZ3Bpb19vbgkJPSBHUElPX1BJTl9QQSgyOCksCisJLm9uX2FjdGl2ZV9sb3cJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0bWVsX3B3bV9ibF9kZXYgPSB7CisJLm5hbWUJCT0gImF0bWVsLXB3bS1ibCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmF0bWVsX3B3bV9ibF9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGZhdnIzMl9zZXR1cF9hdG1lbF9wd21fYmwodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0bWVsX3B3bV9ibF9kZXYpOworCWF0MzJfc2VsZWN0X2dwaW8oYXRtZWxfcHdtX2JsX3BkYXRhLmdwaW9fb24sIDApOworfQorCit2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQoreworCWF0MzJfbWFwX3VzYXJ0KDMsIDApOwkvKiBVU0FSVCAzID0+IC9kZXYvdHR5UzAgKi8KKwlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzZXRfYWJkYWNfcmF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXR2YWw7CisJc3RydWN0IGNsayAqb3NjMTsKKwlzdHJ1Y3QgY2xrICpwbGwxOworCXN0cnVjdCBjbGsgKmFiZGFjOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCW9zYzEgPSBjbGtfZ2V0KE5VTEwsICJvc2MxIik7CisJaWYgKElTX0VSUihvc2MxKSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKG9zYzEpOworCQlnb3RvIG91dDsKKwl9CisKKwlwbGwxID0gY2xrX2dldChOVUxMLCAicGxsMSIpOworCWlmIChJU19FUlIocGxsMSkpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihwbGwxKTsKKwkJZ290byBvdXRfb3NjMTsKKwl9CisKKwlhYmRhYyA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNhbXBsZV9jbGsiKTsKKwlpZiAoSVNfRVJSKGFiZGFjKSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKGFiZGFjKTsKKwkJZ290byBvdXRfcGxsMTsKKwl9CisKKwlyZXR2YWwgPSBjbGtfc2V0X3BhcmVudChwbGwxLCBvc2MxKTsKKwlpZiAocmV0dmFsICE9IDApCisJCWdvdG8gb3V0X2FiZGFjOworCisJLyoKKwkgKiBSYXRlIGlzIDMyMDAwIHRvIDUwMDAwIGFuZCBBQkRBQyBvdmVyc2FtcGxlcyAyNTZ4LiBNdWx0aXBseSwgaW4KKwkgKiBwb3dlciBvZiAyLCB0byBhIHZhbHVlIGFib3ZlIDgwIE1Iei4gUG93ZXIgb2YgMiBzbyBpdCBpcyBwb3NzaWJsZQorCSAqIGZvciB0aGUgZ2VuZXJpYyBjbG9jayB0byBkaXZpZGUgaXQgZG93biBhZ2FpbiBhbmQgODAgTUh6IGlzIHRoZQorCSAqIGxvd2VzdCBmcmVxdWVuY3kgZm9yIHRoZSBQTEwuCisJICovCisJcmV0dmFsID0gY2xrX3JvdW5kX3JhdGUocGxsMSwKKwkJCUNPTkZJR19CT0FSRF9GQVZSMzJfQUJEQUNfUkFURSAqIDI1NiAqIDE2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBvdXRfYWJkYWM7CisKKwlyZXR2YWwgPSBjbGtfc2V0X3JhdGUocGxsMSwgcmV0dmFsKTsKKwlpZiAocmV0dmFsICE9IDApCisJCWdvdG8gb3V0X2FiZGFjOworCisJcmV0dmFsID0gY2xrX3NldF9wYXJlbnQoYWJkYWMsIHBsbDEpOworCWlmIChyZXR2YWwgIT0gMCkKKwkJZ290byBvdXRfYWJkYWM7CisKK291dF9hYmRhYzoKKwljbGtfcHV0KGFiZGFjKTsKK291dF9wbGwxOgorCWNsa19wdXQocGxsMSk7CitvdXRfb3NjMToKKwljbGtfcHV0KG9zYzEpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZhdnIzMl9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBGYXZyLTMyIHVzZXMgMzItYml0IFNEUkFNIGludGVyZmFjZS4gUmVzZXJ2ZSB0aGUgU0RSQU0tc3BlY2lmaWMKKwkgKiBwaW5zIHNvIHRoYXQgbm9ib2R5IG1lc3NlcyB3aXRoIHRoZW0uCisJICovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgwKSk7CS8qIERBVEFbMTZdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgxKSk7CS8qIERBVEFbMTddCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgyKSk7CS8qIERBVEFbMThdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgzKSk7CS8qIERBVEFbMTldCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSg0KSk7CS8qIERBVEFbMjBdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSg1KSk7CS8qIERBVEFbMjFdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSg2KSk7CS8qIERBVEFbMjJdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSg3KSk7CS8qIERBVEFbMjNdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSg4KSk7CS8qIERBVEFbMjRdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSg5KSk7CS8qIERBVEFbMjVdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgxMCkpOwkvKiBEQVRBWzI2XQkqLworCWF0MzJfcmVzZXJ2ZV9waW4oR1BJT19QSU5fUEUoMTEpKTsJLyogREFUQVsyN10JKi8KKwlhdDMyX3Jlc2VydmVfcGluKEdQSU9fUElOX1BFKDEyKSk7CS8qIERBVEFbMjhdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgxMykpOwkvKiBEQVRBWzI5XQkqLworCWF0MzJfcmVzZXJ2ZV9waW4oR1BJT19QSU5fUEUoMTQpKTsJLyogREFUQVszMF0JKi8KKwlhdDMyX3Jlc2VydmVfcGluKEdQSU9fUElOX1BFKDE1KSk7CS8qIERBVEFbMzFdCSovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJTl9QRSgyNikpOwkvKiBTRENTCQkqLworCisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQigzKSwgMCk7CS8qIElSUSBmcm9tIEFEUzc4NDMgKi8KKworCWF0MzJfYWRkX3N5c3RlbV9kZXZpY2VzKCk7CisKKwlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMCk7CisKKwlzZXRfaHdfYWRkcihhdDMyX2FkZF9kZXZpY2VfZXRoKDAsICZldGhfZGF0YVswXSkpOworCisJc3BpMV9ib2FyZF9pbmZvWzBdLmlycSA9IGdwaW9fdG9faXJxKEdQSU9fUElOX1BCKDMpKTsKKworCXNldF9hYmRhY19yYXRlKGF0MzJfYWRkX2RldmljZV9hYmRhYygwKSk7CisKKwlhdDMyX2FkZF9kZXZpY2VfcHdtKDEgPDwgYXRtZWxfcHdtX2JsX3BkYXRhLnB3bV9jaGFubmVsKTsKKwlhdDMyX2FkZF9kZXZpY2Vfc3BpKDEsIHNwaTFfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGkxX2JvYXJkX2luZm8pKTsKKwlhdDMyX2FkZF9kZXZpY2VfbWNpKDAsIE5VTEwpOworCWF0MzJfYWRkX2RldmljZV91c2JhKDAsIE5VTEwpOworCWF0MzJfYWRkX2RldmljZV9sY2RjKDAsICZmYXZyMzJfbGNkY19kYXRhLCBmYm1lbV9zdGFydCwgZmJtZW1fc2l6ZSwgMCk7CisKKwlmYXZyMzJfc2V0dXBfbGVkcygpOworCisJZmF2cjMyX3NldHVwX2F0bWVsX3B3bV9ibCgpOworCisJcmV0dXJuIDA7Cit9Citwb3N0Y29yZV9pbml0Y2FsbChmYXZyMzJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL01ha2VmaWxlIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWMwNzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQkJCQkrPSBzZXR1cC5vIGZsYXNoLm8gZnJhbS5vCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL2ZsYXNoLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzZDY1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL21pbWMyMDAvZmxhc2guYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIE1JTUMyMDAgYm9hcmQtc3BlY2lmaWMgZmxhc2ggaW5pdGlhbGl6YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWVyY3VyeSBJTUMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9zbWMuaD4KKworc3RhdGljIHN0cnVjdCBzbWNfdGltaW5nIGZsYXNoX3RpbWluZyBfX2luaXRkYXRhID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMTUsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAwLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDExNSwKKwkubnJkX3B1bHNlCQk9IDExMCwKKwkubmNzX3dyaXRlX3B1bHNlCT0gNjAsCisJLm53ZV9wdWxzZQkJPSA2MCwKKworCS5yZWFkX2N5Y2xlCQk9IDExNSwKKwkud3JpdGVfY3ljbGUJCT0gMTAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbWNfY29uZmlnIGZsYXNoX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5idXNfd2lkdGgJCT0gMiwKKwkubnJkX2NvbnRyb2xsZWQJCT0gMSwKKwkubndlX2NvbnRyb2xsZWQJCT0gMSwKKwkuYnl0ZV93cml0ZQkJPSAxLAorfTsKKworLyogc3lzdGVtIGZsYXNoIGRlZmluaXRpb24gKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGZsYXNoX3BhcnRzX3N5c3RlbVtdID0geworCXsKKwkJLm5hbWUgICAgICAgICAgID0gInUtYm9vdCIsCisJCS5vZmZzZXQgICAgICAgICA9IDB4MDAwMDAwMDAsCisJCS5zaXplICAgICAgICAgICA9IDB4MDAwMjAwMDAsICAgICAgICAgICAvKiAxMjggS2lCICovCisJCS5tYXNrX2ZsYWdzICAgICA9IE1URF9XUklURUFCTEUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJyb290IiwKKwkJLm9mZnNldCAgICAgICAgID0gMHgwMDAyMDAwMCwKKwkJLnNpemUgICAgICAgICAgID0gMHgwMDdjMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gInNwbGFzaCIsCisJCS5vZmZzZXQJCT0gMHgwMDdlMDAwMCwKKwkJLnNpemUJCT0gMHgwMDAxMDAwMCwJCS8qIDY0S2lCICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJlbnYiLAorCQkub2Zmc2V0ICAgICAgICAgPSAweDAwN2YwMDAwLAorCQkuc2l6ZSAgICAgICAgICAgPSAweDAwMDEwMDAwLAorCQkubWFza19mbGFncyAgICAgPSBNVERfV1JJVEVBQkxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBmbGFzaF9zeXN0ZW0gPSB7CisJLndpZHRoCQk9IDIsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShmbGFzaF9wYXJ0c19zeXN0ZW0pLAorCS5wYXJ0cwkJPSBmbGFzaF9wYXJ0c19zeXN0ZW0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlX3N5c3RlbSA9IHsKKwkuc3RhcnQJCT0gMHgwMDAwMDAwMCwKKwkuZW5kCQk9IDB4MDA3ZmZmZmYsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlX3N5c3RlbSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gJmZsYXNoX3Jlc291cmNlX3N5c3RlbSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmZsYXNoX3N5c3RlbSwKKwl9LAorfTsKKworLyogZGF0YSBmbGFzaCBkZWZpbml0aW9uICovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBmbGFzaF9wYXJ0c19kYXRhW10gPSB7CisJeworCQkubmFtZQkJPSAiZGF0YSIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gMHgwMDgwMDAwMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGZsYXNoX3BhcnRzX2RhdGEpLAorCS5wYXJ0cwkJPSBmbGFzaF9wYXJ0c19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZV9kYXRhID0geworCS5zdGFydAkJPSAweDA4MDAwMDAwLAorCS5lbmQJCT0gMHgwODdmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbGFzaF9kZXZpY2VfZGF0YSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDEsCisJLnJlc291cmNlCT0gJmZsYXNoX3Jlc291cmNlX2RhdGEsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZmbGFzaF9kYXRhLAorCX0sCit9OworCisvKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgU01DIGhhcyBiZWVuIGluaXRpYWxpemVkICovCitzdGF0aWMgaW50IF9faW5pdCBtaW1jMjAwX2ZsYXNoX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc21jX3NldF90aW1pbmcoJmZsYXNoX2NvbmZpZywgJmZsYXNoX3RpbWluZyk7CisJcmV0ID0gc21jX3NldF9jb25maWd1cmF0aW9uKDAsICZmbGFzaF9jb25maWcpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWltYzIwMDogZmFpbGVkIHRvIHNldCAnU3lzdGVtJyBOT1IgZmxhc2ggdGltaW5nXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gc21jX3NldF9jb25maWd1cmF0aW9uKDEsICZmbGFzaF9jb25maWcpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWltYzIwMDogZmFpbGVkIHRvIHNldCAnRGF0YScgTk9SIGZsYXNoIHRpbWluZ1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZmbGFzaF9kZXZpY2Vfc3lzdGVtKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmZsYXNoX2RldmljZV9kYXRhKTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKG1pbWMyMDBfZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL2ZyYW0uYyBiL2FyY2gvYXZyMzIvYm9hcmRzL21pbWMyMDAvZnJhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZmJkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL2ZyYW0uYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogRlJBTSBkcml2ZXIgZm9yIE1JTUMyMDAgYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBNYXJrIEphY2tzb24gPG1wZmpAbWltYy5jby51az4KKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzICp2ZXJ5KiBzaW1wbHkgc3VwcG9ydCBmb3IgdGhlIHN5c3RlbSdzIEZSQU0gZGV2aWNlLgorICogQXQgdGhlIG1vbWVudCwgdGhpcyBpcyBoYXJkLWNvZGVkIHRvIHRoZSBNSU1DMjAwIHBsYXRmb3JtLCBhbmQgb25seQorICogc3VwcG9ydHMgbW1hcCgpLgorICovCisKKyNkZWZpbmUgRlJBTV9WRVJTSU9OCSIxLjAiCisKKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2RlZmluZSBGUkFNX0JBU0UJMHhhYzAwMDAwMAorI2RlZmluZSBGUkFNX1NJWkUJMHgyMDAwMAorCisvKgorICogVGhlIGFyZSB0aGUgZmlsZSBvcGVyYXRpb24gZnVuY3Rpb24gZm9yIHVzZXIgYWNjZXNzIHRvIC9kZXYvZnJhbQorICovCisKK3N0YXRpYyBpbnQgZnJhbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwKKwkJdm1hLT52bV9zdGFydCwKKwkJdmlydF90b19waHlzKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKUZSQU1fQkFTRSkpID4+IFBBR0VfU0hJRlQsCisJCXZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQsCisJCVBBR0VfU0hBUkVEKTsKKworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnJhbV9mb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm1tYXAJCQk9IGZyYW1fbW1hcCwKK307CisKKyNkZWZpbmUgRlJBTV9NSU5PUgkwCisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBmcmFtX2RldiA9IHsKKwlGUkFNX01JTk9SLAorCSJmcmFtIiwKKwkmZnJhbV9mb3BzCit9OworCitzdGF0aWMgaW50IF9faW5pdAorZnJhbV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmZyYW1fZGV2KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZnJhbTogY2FuJ3QgbWlzY19yZWdpc3RlciBvbiBtaW5vcj0lZFxuIiwKKwkJICAgIEZSQU1fTUlOT1IpOworCQlyZXR1cm4gcmV0OworCX0KKwlwcmludGsoS0VSTl9JTkZPICJGUkFNIG1lbW9yeSBkcml2ZXIgdiIgRlJBTV9WRVJTSU9OICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK2ZyYW1fY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJmZyYW1fZGV2KTsKK30KKworbW9kdWxlX2luaXQoZnJhbV9pbml0KTsKK21vZHVsZV9leGl0KGZyYW1fY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9BTElBU19NSVNDREVWKEZSQU1fTUlOT1IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5N2NiYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL3NldHVwLmMKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBCb2FyZC1zcGVjaWZpYyBzZXR1cCBjb2RlIGZvciB0aGUgTUlNQzIwMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNZXJjdXJ5IElNQyBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK2V4dGVybiBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBtaW1jMjAwX2xjZGNfZGF0YTsKKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZWVwcm9tLmg+CisKKyNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPGFzbS9hdG1lbC1tY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8bWFjaC9hdDMyYXA3MDB4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgorCisvKiBPc2NpbGxhdG9yIGZyZXF1ZW5jaWVzLiBUaGVzZSBhcmUgYm9hcmQtc3BlY2lmaWMgKi8KK3Vuc2lnbmVkIGxvbmcgYXQzMl9ib2FyZF9vc2NfcmF0ZXNbM10gPSB7CisJWzBdID0gMzI3NjgsCS8qIDMyLjc2OCBrSHogb24gUlRDIG9zYyAqLworCVsxXSA9IDEwMDAwMDAwLAkvKiAxMCBNSHogb24gb3NjMCAqLworCVsyXSA9IDEyMDAwMDAwLAkvKiAxMiBNSHogb24gb3NjMSAqLworfTsKKworLyogSW5pdGlhbGl6ZWQgYnkgYm9vdGxvYWRlci1zcGVjaWZpYyBzdGFydHVwIGNvZGUuICovCitzdHJ1Y3QgdGFnICpib290bG9hZGVyX3RhZ3MgX19pbml0ZGF0YTsKKworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgX19pbml0ZGF0YSB0eDE0ZDE0X21vZGVzW10gPSB7CisJeworCQkubmFtZQkJPSAiNjQweDQ4MCBAIDYwIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gNjQwLAkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoMTE2NjYpLAorCisJCS5sZWZ0X21hcmdpbgk9IDgwLAkJLnJpZ2h0X21hcmdpbgk9IDEsCisJCS51cHBlcl9tYXJnaW4JPSAxMywJCS5sb3dlcl9tYXJnaW4JPSAyLAorCQkuaHN5bmNfbGVuCT0gNjQsCQkudnN5bmNfbGVuCT0gMSwKKworCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBfX2luaXRkYXRhIG1pbWMyMDBfZGVmYXVsdF9tb25zcGVjcyA9IHsKKwkubWFudWZhY3R1cmVyCQk9ICJISVQiLAorCS5tb25pdG9yCQk9ICJUWDE0RDE0Vk0xQkFCIiwKKwkubW9kZWRiCQkJPSB0eDE0ZDE0X21vZGVzLAorCS5tb2RlZGJfbGVuCQk9IEFSUkFZX1NJWkUodHgxNGQxNF9tb2RlcyksCisJLmhmbWluCQkJPSAxNDgyMCwKKwkuaGZtYXgJCQk9IDIyMjMwLAorCS52Zm1pbgkJCT0gNjAsCisJLnZmbWF4CQkJPSA3My4zLAorCS5kY2xrbWF4CQk9IDI1MjAwMDAwLAorfTsKKworc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gX19pbml0ZGF0YSBtaW1jMjAwX2xjZGNfZGF0YSA9IHsKKwkuZGVmYXVsdF9icHAJCT0gMTYsCisJLmRlZmF1bHRfZG1hY29uCQk9IEFUTUVMX0xDRENfRE1BRU4gfCBBVE1FTF9MQ0RDX0RNQTJERU4sCisJLmRlZmF1bHRfbGNkY29uMgk9IChBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUCisJCQkJICAgfCBBVE1FTF9MQ0RDX0lOVkNMSworCQkJCSAgIHwgQVRNRUxfTENEQ19DTEtNT0RfQUxXQVlTQUNUSVZFCisJCQkJICAgfCBBVE1FTF9MQ0RDX01FTU9SX0JJRyksCisJLmRlZmF1bHRfbW9uc3BlY3MJPSAmbWltYzIwMF9kZWZhdWx0X21vbnNwZWNzLAorCS5ndWFyZF90aW1lCQk9IDIsCit9OworCitzdHJ1Y3QgZXRoX2FkZHIgeworCXU4IGFkZHJbNl07Cit9Oworc3RhdGljIHN0cnVjdCBldGhfYWRkciBfX2luaXRkYXRhIGh3X2FkZHJbMl07CitzdGF0aWMgc3RydWN0IGV0aF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZXRoX2RhdGFbMl07CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2VlcHJvbSBlZXByb21fMjVsYzAxMCA9IHsKKwkJLm5hbWUgPSAiMjVsYzAxMCIsCisJCS5ieXRlX2xlbiA9IDEyOCwKKwkJLnBhZ2Vfc2l6ZSA9IDE2LAorCQkuZmxhZ3MgPSBFRV9BRERSMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpMF9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwk9ICJydGMtZHMxMzkwIiwKKwkJLm1heF9zcGVlZF9oegk9IDQwMDAwMDAsCisJCS5jaGlwX3NlbGVjdAk9IDIsCisJfSwKKwl7CisJCS5tb2RhbGlhcwk9ICJhdDI1IiwKKwkJLm1heF9zcGVlZF9oegk9IDEwMDAwMDAsCisJCS5jaGlwX3NlbGVjdAk9IDEsCisJCS5tb2RlCQk9IFNQSV9NT0RFXzMsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVlcHJvbV8yNWxjMDEwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMF9kYXRhID0geworCS5zbG90WzBdID0geworCQkuYnVzX3dpZHRoCT0gNCwKKwkJLmRldGVjdF9waW4JPSBHUElPX1BJTl9QQSgyNiksCisJCS53cF9waW4JCT0gR1BJT19QSU5fUEEoMjcpLAorCX0sCit9OworCisvKgorICogVGhlIG5leHQgdHdvIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBhcyB0aGUgYm9vdCBsb2FkZXIgaXMKKyAqIHN1cHBvc2VkIHRvIGluaXRpYWxpemUgdGhlIG1hY2IgYWRkcmVzcyByZWdpc3RlcnMgd2l0aCBhIHZhbGlkCisgKiBldGhlcm5ldCBhZGRyZXNzLiBCdXQgd2UgbmVlZCB0byBrZWVwIGl0IGFyb3VuZCBmb3IgYSB3aGlsZSB1bnRpbAorICogd2UgY2FuIGJlIHJlYXNvbmFibHkgc3VyZSB0aGUgYm9vdCBsb2FkZXIgZG9lcyB0aGlzLgorICoKKyAqIFRoZSBwaHlfaWQgaXMgaWdub3JlZCBhcyB0aGUgZHJpdmVyIHdpbGwgcHJvYmUgZm9yIGl0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfZXRoZXJuZXQoc3RydWN0IHRhZyAqdGFnKQoreworCWludCBpOworCisJaSA9IHRhZy0+dS5ldGhlcm5ldC5tYWNfaW5kZXg7CisJaWYgKGkgPCBBUlJBWV9TSVpFKGh3X2FkZHIpKQorCQltZW1jcHkoaHdfYWRkcltpXS5hZGRyLCB0YWctPnUuZXRoZXJuZXQuaHdfYWRkcmVzcywKKwkJICAgICAgIHNpemVvZihod19hZGRyW2ldLmFkZHIpKTsKKworCXJldHVybiAwOworfQorX190YWd0YWJsZShBVEFHX0VUSEVSTkVULCBwYXJzZV90YWdfZXRoZXJuZXQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2h3X2FkZHIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY29uc3QgdTggKmFkZHI7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuOworCWlmIChwZGV2LT5pZCA+PSBBUlJBWV9TSVpFKGh3X2FkZHIpKQorCQlyZXR1cm47CisKKwlhZGRyID0gaHdfYWRkcltwZGV2LT5pZF0uYWRkcjsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpCisJCXJldHVybjsKKworCS8qCisJICogU2luY2UgdGhpcyBpcyBib2FyZC1zcGVjaWZpYyBjb2RlLCB3ZSdsbCBjaGVhdCBhbmQgdXNlIHRoZQorCSAqIHBoeXNpY2FsIGFkZHJlc3MgZGlyZWN0bHkgYXMgd2UgaGFwcGVuIHRvIGtub3cgdGhhdCBpdCdzCisJICogdGhlIHNhbWUgYXMgdGhlIHZpcnR1YWwgYWRkcmVzcy4KKwkgKi8KKwlyZWdzID0gKHZvaWQgX19pb21lbSBfX2ZvcmNlICopcmVzLT5zdGFydDsKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmICghcGNsaykKKwkJcmV0dXJuOworCisJY2xrX2VuYWJsZShwY2xrKTsKKwlfX3Jhd193cml0ZWwoKGFkZHJbM10gPDwgMjQpIHwgKGFkZHJbMl0gPDwgMTYpCisJCSAgICAgfCAoYWRkclsxXSA8PCA4KSB8IGFkZHJbMF0sIHJlZ3MgKyAweDk4KTsKKwlfX3Jhd193cml0ZWwoKGFkZHJbNV0gPDwgOCkgfCBhZGRyWzRdLCByZWdzICsgMHg5Yyk7CisJY2xrX2Rpc2FibGUocGNsayk7CisJY2xrX3B1dChwY2xrKTsKK30KKwordm9pZCBfX2luaXQgc2V0dXBfYm9hcmQodm9pZCkKK3sKKwlhdDMyX21hcF91c2FydCgwLCAwKTsJLyogVVNBUlQgMDogL2Rldi90dHlTMCAoVFRMIC0tPiBBbHRlcmEpICovCisJYXQzMl9tYXBfdXNhcnQoMSwgMSk7CS8qIFVTQVJUIDE6IC9kZXYvdHR5UzEgKFJTMjMyKSAqLworCWF0MzJfbWFwX3VzYXJ0KDIsIDIpOwkvKiBVU0FSVCAyOiAvZGV2L3R0eVMyIChSUzQ4NSkgKi8KKwlhdDMyX21hcF91c2FydCgzLCAzKTsJLyogVVNBUlQgMzogL2Rldi90dHlTMyAoUlM0MjIgTXVsdGlkcm9wKSAqLworfQorCitzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBHUElPX1BJTl9QQSg2KSwKKwkuc2NsX3BpbgkJPSBHUElPX1BJTl9QQSg3KSwKKwkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnVkZWxheQkJCT0gMiwJLyogY2xvc2UgdG8gMTAwIGtIeiAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2dwaW9fZGV2aWNlID0geworCS5uYW1lCQk9ICJpMmMtZ3BpbyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJLnBsYXRmb3JtX2RhdGEJPSAmaTJjX2dwaW9fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGkyY19pbmZvW10gPSB7Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBtaW1jMjAwX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIE1JTUMyMDAgdXNlcyAxNi1iaXQgU0RSQU0gaW50ZXJmYWNlLCBzbyB3ZSBkb24ndCBuZWVkIHRvCisJICogcmVzZXJ2ZSBhbnkgcGlucyBmb3IgaXQuCisJICovCisKKwlhdDMyX2FkZF9zeXN0ZW1fZGV2aWNlcygpOworCisJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDApOworCWF0MzJfYWRkX2RldmljZV91c2FydCgxKTsKKwlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMik7CisJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDMpOworCisJc2V0X2h3X2FkZHIoYXQzMl9hZGRfZGV2aWNlX2V0aCgwLCAmZXRoX2RhdGFbMF0pKTsKKwlzZXRfaHdfYWRkcihhdDMyX2FkZF9kZXZpY2VfZXRoKDEsICZldGhfZGF0YVsxXSkpOworCisJYXQzMl9hZGRfZGV2aWNlX3NwaSgwLCBzcGkwX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpMF9ib2FyZF9pbmZvKSk7CisJYXQzMl9hZGRfZGV2aWNlX21jaSgwLCAmbWNpMF9kYXRhKTsKKwlhdDMyX2FkZF9kZXZpY2VfdXNiYSgwLCBOVUxMKTsKKworCWF0MzJfc2VsZWN0X3BlcmlwaChHUElPX1BJT0JfQkFTRSwgMSA8PCAyOCwgMCwgQVQzMl9HUElPRl9QVUxMVVApOworCWF0MzJfc2VsZWN0X2dwaW8oaTJjX2dwaW9fZGF0YS5zZGFfcGluLAorCQlBVDMyX0dQSU9GX01VTFRJRFJWIHwgQVQzMl9HUElPRl9PVVRQVVQgfCBBVDMyX0dQSU9GX0hJR0gpOworCWF0MzJfc2VsZWN0X2dwaW8oaTJjX2dwaW9fZGF0YS5zY2xfcGluLAorCQlBVDMyX0dQSU9GX01VTFRJRFJWIHwgQVQzMl9HUElPRl9PVVRQVVQgfCBBVDMyX0dQSU9GX0hJR0gpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaTJjX2dwaW9fZGV2aWNlKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfaW5mbywgQVJSQVlfU0laRShpMmNfaW5mbykpOworCisJYXQzMl9hZGRfZGV2aWNlX2xjZGMoMCwgJm1pbWMyMDBfbGNkY19kYXRhLAorCQkJICAgICBmYm1lbV9zdGFydCwgZmJtZW1fc2l6ZSwgMSk7CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKG1pbWMyMDBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTcyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyNjQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS42CisjIFdlZCBKdW4gMTggMTY6MDY6MzIgMjAwOAorIworQ09ORklHX0FWUjMyPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0xCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUgYW5kIGZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19TVUJBUkNIX0FWUjMyQj15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QRVJGT1JNQU5DRV9DT1VOVEVSUz15CitDT05GSUdfUExBVEZPUk1fQVQzMkFQPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwWD15CitDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9BVE5HVzEwMD15CitDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYPXkKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfUVZHQT15CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9QT1dfUVZHQSBpcyBub3Qgc2V0CitDT05GSUdfQk9BUkRfQVROR1cxMDBfSTJDX0dQSU89eQorQ09ORklHX0xPQURFUl9VX0JPT1Q9eQorCisjCisjIEF0bWVsIEFWUjMyIEFQIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FQNzAwWF8zMl9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19BUDcwMFhfMTZfQklUX1NNQz15CisjIENPTkZJR19BUDcwMFhfOF9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX0RFVj15CitDT05GSUdfTE9BRF9BRERSRVNTPTB4MTAwMDAwMDAKK0NPTkZJR19FTlRSWV9BRERSRVNTPTB4OTAwMDAwMDAKK0NPTkZJR19QSFlTX09GRlNFVD0weDEwMDAwMDAwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBVkVfTUVNT1JZX1BSRVNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9OT0RFX01FTU1BUF9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19OTUlfREVCVUdHSU5HPXkKK0NPTkZJR19EV19ETUFDPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORT0iIgorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9BVDMyQVA9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorIyBDT05GSUdfSVBfUElNU01fVjIgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9eQorQ09ORklHX0lORVRfRVNQPXkKK0NPTkZJR19JTkVUX0lQQ09NUD15CitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD15CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9eQorQ09ORklHX0lORVQ2X0VTUD15CitDT05GSUdfSU5FVDZfSVBDT01QPXkKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz15CitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCisjIENPTkZJR19ORl9OQVRfVEZUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVRfU0lQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX0JSSURHRT1tCitDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTVREX0RBVEFGTEFTSD15CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST15CitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAorCisjCisjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucworIworIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPW0KK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BVE1FTF9QV00gaXMgbm90IHNldAorQ09ORklHX0FUTUVMX1RDTElCPXkKK0NPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDPXkKK0NPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLPTAKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTF9TU0MgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9bQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9bQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19BVE1FTFRXST1tCitDT05GSUdfSTJDX0dQSU89bQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9BVE1FTD15CisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKK0NPTkZJR19TUElfU1BJREVWPW0KKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dQSU9fTElCPXkKKworIworIyBHUElPIFN1cHBvcnQKKyMKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfQVQzMkFQNzAwWF9XRFQ9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX0FUTUVMPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIEFWUjMyIGRldmljZXMKKyMKK0NPTkZJR19TTkRfQVRNRUxfQUM5Nz1tCisKKyMKKyMgU1BJIGRldmljZXMKKyMKKworIworIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0CisjCisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKworIworIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICisjCisKKyMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz1tCitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkE9eQorQ09ORklHX1VTQl9BVE1FTF9VU0JBPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKK0NPTkZJR19VU0JfWkVSTz1tCitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX0FUTUVMTUNJPXkKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworQ09ORklHX0xFRFNfR1BJTz15CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0FUMzJBUDcwMFg9eQorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAorQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GUz15CisjIENPTkZJR19VQklGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlNfTFpPPXkKK0NPTkZJR19VQklGU19GU19aTElCPXkKKyMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KKyMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT15CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorQ09ORklHX0NSWVBUT19MWk89eQorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViODk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTI2NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LjYKKyMgV2VkIEp1biAxOCAxNjowOTozMiAyMDA4CisjCitDT05GSUdfQVZSMzI9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTEKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZSBhbmQgZmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1NVQkFSQ0hfQVZSMzJCPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BFUkZPUk1BTkNFX0NPVU5URVJTPXkKK0NPTkZJR19QTEFURk9STV9BVDMyQVA9eQorQ09ORklHX0NQVV9BVDMyQVA3MDBYPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwMD15CisjIENPTkZJR19CT0FSRF9BVFNUSzEwMDAgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX0FUTkdXMTAwPXkKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFg9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1FWR0EgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9WR0E9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1BPV19RVkdBIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9JMkNfR1BJTz15CitDT05GSUdfTE9BREVSX1VfQk9PVD15CisKKyMKKyMgQXRtZWwgQVZSMzIgQVAgb3B0aW9ucworIworIyBDT05GSUdfQVA3MDBYXzMyX0JJVF9TTUMgaXMgbm90IHNldAorQ09ORklHX0FQNzAwWF8xNl9CSVRfU01DPXkKKyMgQ09ORklHX0FQNzAwWF84X0JJVF9TTUMgaXMgbm90IHNldAorQ09ORklHX0dQSU9fREVWPXkKK0NPTkZJR19MT0FEX0FERFJFU1M9MHgxMDAwMDAwMAorQ09ORklHX0VOVFJZX0FERFJFU1M9MHg5MDAwMDAwMAorQ09ORklHX1BIWVNfT0ZGU0VUPTB4MTAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFWRV9NRU1PUllfUFJFU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX05PREVfTUVNTUFQX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX05NSV9ERUJVR0dJTkc9eQorQ09ORklHX0RXX0RNQUM9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSIiCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0FUMzJBUD15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD15CitDT05GSUdfSU5FVF9FU1A9eQorQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD15CitDT05GSUdfSU5FVDZfRVNQPXkKK0NPTkZJR19JTkVUNl9JUENPTVA9eQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD15CitDT05GSUdfSU5FVDZfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KKyMgQ09ORklHX05GX05BVF9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9BTUFOREEgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfREFUQUZMQVNIPXkKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09bQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FUTUVMX1BXTSBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfVENMSUI9eQorQ09ORklHX0FUTUVMX1RDQl9DTEtTUkM9eQorQ09ORklHX0FUTUVMX1RDQl9DTEtTUkNfQkxPQ0s9MAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMX1NTQyBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUFDQj15CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD1tCisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSTJDX0FUTUVMVFdJPW0KK0NPTkZJR19JMkNfR1BJTz1tCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorQ09ORklHX1NQSV9TUElERVY9bQorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR1BJT19MSUI9eQorCisjCisjIEdQSU8gU3VwcG9ydAorIworIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19BVDMyQVA3MDBYX1dEVD15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVRNRUw9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9eQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworQ09ORklHX1NORF9BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgQVZSMzIgZGV2aWNlcworIworQ09ORklHX1NORF9BVE1FTF9BQzk3PW0KKworIworIyBTUEkgZGV2aWNlcworIworCisjCisjIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKKworIworIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKKyMKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQT15CitDT05GSUdfVVNCX0FUTUVMX1VTQkE9eQorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorQ09ORklHX1VTQl9aRVJPPW0KK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQVRNRUxNQ0k9eQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCitDT05GSUdfTEVEU19HUElPPXkKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVQzMkFQNzAwWD15CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9ODUwCitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTPXkKKyMgQ09ORklHX1VCSUZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GU19MWk89eQorQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQorIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPXkKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CitDT05GSUdfQ1JZUFRPX0xaTz15CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2ZhdnItMzJfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2ZhdnItMzJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmQ5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvZmF2ci0zMl9kZWZjb25maWcKQEAgLTAsMCArMSwxMjM1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4CisjIFR1ZSBPY3QgMTQgMTM6MjA6NDEgMjAwOAorIworQ09ORklHX0FWUjMyPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MQorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUgYW5kIGZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19TVUJBUkNIX0FWUjMyQj15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QRVJGT1JNQU5DRV9DT1VOVEVSUz15CitDT05GSUdfUExBVEZPUk1fQVQzMkFQPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwWD15CitDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9GQVZSXzMyPXkKKyMgQ09ORklHX0JPQVJEX01JTUMyMDAgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX0ZBVlIzMl9BQkRBQ19SQVRFPTQ0MTAwCitDT05GSUdfTE9BREVSX1VfQk9PVD15CisKKyMKKyMgQXRtZWwgQVZSMzIgQVAgb3B0aW9ucworIworIyBDT05GSUdfQVA3MDBYXzMyX0JJVF9TTUMgaXMgbm90IHNldAorQ09ORklHX0FQNzAwWF8xNl9CSVRfU01DPXkKKyMgQ09ORklHX0FQNzAwWF84X0JJVF9TTUMgaXMgbm90IHNldAorQ09ORklHX0xPQURfQUREUkVTUz0weDEwMDAwMDAwCitDT05GSUdfRU5UUllfQUREUkVTUz0weDkwMDAwMDAwCitDT05GSUdfUEhZU19PRkZTRVQ9MHgxMDAwMDAwMAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19RVUlDS0xJU1Q9eQorIyBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBVkVfTUVNT1JZX1BSRVNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9OT0RFX01FTU1BUF9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19OTUlfREVCVUdHSU5HPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX0NNRExJTkU9IiIKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfQVQzMkFQPXkKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT1tCitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorQ09ORklHX0FUTUVMX1BXTT1tCitDT05GSUdfQVRNRUxfVENMSUI9eQorQ09ORklHX0FUTUVMX1RDQl9DTEtTUkM9eQorQ09ORklHX0FUTUVMX1RDQl9DTEtTUkNfQkxPQ0s9MAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19BVE1FTF9TU0M9bQorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUFDQj15CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9bQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89bQorQ09ORklHX0lOUFVUX01PVVNFPXkKKyMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfR1BJTz1tCisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PW0KKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CisjIENPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9bQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9bQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19HUElPPW0KKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorQ09ORklHX1NQSV9TUElERVY9bQorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19BVDMyQVA3MDBYX1dEVD15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVRNRUw9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKKyMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfQkFDS0xJR0hUX0FUTUVMX0xDREMgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9BVE1FTF9QV009bQorIyBDT05GSUdfQkFDS0xJR0hUX0NPUkdJIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD1tCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1BSSU1FPW0KKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQT15CitDT05GSUdfVVNCX0FUTUVMX1VTQkE9eQorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorQ09ORklHX1VTQl9aRVJPPW0KK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVE1FTE1DST15CitDT05GSUdfTU1DX0FUTUVMTUNJX0RNQT15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0FUTUVMX1BXTT1tCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9BVDMyQVA3MDBYPXkKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworQ09ORklHX0RXX0RNQUM9eQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPW0KKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT1tCisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9taW1jMjAwX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9taW1jMjAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFlNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL21pbWMyMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTEwOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjOAorIyBNb24gT2N0IDEzIDE1OjQ2OjUzIDIwMDgKKyMKK0NPTkZJR19BVlIzMj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MQorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZSBhbmQgZmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1NVQkFSQ0hfQVZSMzJCPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BFUkZPUk1BTkNFX0NPVU5URVJTPXkKK0NPTkZJR19QTEFURk9STV9BVDMyQVA9eQorQ09ORklHX0NQVV9BVDMyQVA3MDBYPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwMD15CisjIENPTkZJR19CT0FSRF9BVFNUSzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVROR1cxMDAgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX01JTUMyMDA9eQorQ09ORklHX0xPQURFUl9VX0JPT1Q9eQorCisjCisjIEF0bWVsIEFWUjMyIEFQIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FQNzAwWF8zMl9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19BUDcwMFhfMTZfQklUX1NNQz15CisjIENPTkZJR19BUDcwMFhfOF9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FEX0FERFJFU1M9MHgxMDAwMDAwMAorQ09ORklHX0VOVFJZX0FERFJFU1M9MHg5MDAwMDAwMAorQ09ORklHX1BIWVNfT0ZGU0VUPTB4MTAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUVVJQ0tMSVNUPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVZFX01FTU9SWV9QUkVTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfTk9ERV9NRU1NQVBfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTk1JX0RFQlVHR0lORz15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19DTURMSU5FPSIiCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0FUMzJBUD15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9eQorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD15CitDT05GSUdfSU5FVF9FU1A9eQorQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD15CitDT05GSUdfSU5FVDZfRVNQPXkKK0NPTkZJR19JTkVUNl9JUENPTVA9eQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD15CitDT05GSUdfSU5FVDZfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01URF9EQVRBRkxBU0g9eQorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BVE1FTF9QV00gaXMgbm90IHNldAorQ09ORklHX0FUTUVMX1RDTElCPXkKK0NPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDPXkKK0NPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLPTAKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTF9TU0MgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUFDQj15CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorQ09ORklHX0FUMjQ9eQorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMjhDTTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9BVDI1PXkKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19BVDMyQVA3MDBYX1dEVD15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVRNRUw9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1RFU1Q9eQorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVRNRUxNQ0k9eQorIyBDT05GSUdfTU1DX0FUTUVMTUNJX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1NQST15CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCitDT05GSUdfTEVEU19HUElPPXkKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfRFMxMzkwPXkKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0FUMzJBUDcwMFggaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfRFdfRE1BQz15CitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT04NTAKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PXkKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPXkKK0NPTkZJR19DUkMzMj15CitDT05GSUdfQ1JDNz15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMjk0YjI1Zi4uNDQ0MmY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTYsNiArOTYsNyBAQAogI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9DUFVfR09JTkdfVE9fU0xFRVAgKDEgPDwgVElGX0NQVV9HT0lOR19UT19TTEVFUCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKIC8qIE5vdGU6IFRoZSBtYXNrcyBiZWxvdyBtdXN0IG5ldmVyIHNwYW4gbW9yZSB0aGFuIDE2IGJpdHMhICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKaW5kZXggODEzYjY4NC4uMGM2ZTAyZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKQEAgLTgxMyw3ICs4MTMsNyBAQAogREVGSU5FX0RFVihwaW8sIDQpOwogREVWX0NMSyhtY2ssIHBpbzQsIHBiYSwgMTQpOwogCi12b2lkIF9faW5pdCBhdDMyX2FkZF9zeXN0ZW1fZGV2aWNlcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc3lzdGVtX2RldmljZV9pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDMyX3BtMF9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQzMl9pbnRjMF9kZXZpY2UpOwpAQCAtODMyLDcgKzgzMiwxMCBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGlvMl9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGlvM19kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGlvNF9kZXZpY2UpOworCisJcmV0dXJuIDA7CiB9Citjb3JlX2luaXRjYWxsKHN5c3RlbV9kZXZpY2VfaW5pdCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgUFNJRgpAQCAtMTA5MSw3ICsxMDk0LDkgQEAKIAkJCXBpbl9tYXNrIHw9ICgxIDw8IDExKTsJLyogUlhEMiAqLwogCQkJcGluX21hc2sgfD0gKDEgPDwgMTIpOwkvKiBSWEQzICovCiAJCQlwaW5fbWFzayB8PSAoMSA8PCAxNCk7CS8qIFJYQ0sgKi8KKyNpZm5kZWYgQ09ORklHX0JPQVJEX01JTUMyMDAKIAkJCXBpbl9tYXNrIHw9ICgxIDw8IDE4KTsJLyogU1BEICAqLworI2VuZGlmCiAJCX0KIAogCQlzZWxlY3RfcGVyaXBoZXJhbChQSU9DLCBwaW5fbWFzaywgUEVSSVBIX0EsIDApOwpAQCAtMTExMiw4ICsxMTE3LDEwIEBACiAJCXBpbl9tYXNrIHw9ICgxIDw8IDMpOwkvKiBNREMgICovCiAJCXBpbl9tYXNrIHw9ICgxIDw8IDIpOwkvKiBNRElPICovCiAKKyNpZm5kZWYgQ09ORklHX0JPQVJEX01JTUMyMDAKIAkJaWYgKCFkYXRhLT5pc19ybWlpKQogCQkJcGluX21hc2sgfD0gKDEgPDwgMTUpOwkvKiBTUEQgICovCisjZW5kaWYKIAogCQlzZWxlY3RfcGVyaXBoZXJhbChQSU9ELCBwaW5fbWFzaywgUEVSSVBIX0IsIDApOwogCkBAIC0xNDcwLDcgKzE0NzcsNyBAQAogCQkJcGluX21hc2sgPSBBVE1FTF9MQ0RDX1BSSV8yNEJJVCB8IEFUTUVMX0xDRENfUFJJX0NPTlRST0w7CiAKIAkJLyogTENEQyBvbiBwb3J0IEMgKi8KLQkJcG9ydGNfbWFzayA9IChwaW5fbWFzayAmIDB4ZmZmODAwMDApID4+IDE5OworCQlwb3J0Y19tYXNrID0gcGluX21hc2sgJiAweGZmZjgwMDAwOwogCQlzZWxlY3RfcGVyaXBoZXJhbChQSU9DLCBwb3J0Y19tYXNrLCBQRVJJUEhfQSwgMCk7CiAKIAkJLyogTENEQyBvbiBwb3J0IEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY3B1ZnJlcS5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMKaW5kZXggZDg0ZWZlNC4uMDI0YzU4NiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMKQEAgLTQwLDYgKzQwLDkgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludCkoKGNsa19nZXRfcmF0ZShjcHVjbGspICsgNTAwKSAvIDEwMDApOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50CXJlZl9mcmVxOworc3RhdGljIHVuc2lnbmVkIGxvbmcJbG9vcHNfcGVyX2ppZmZ5X3JlZjsKKwogc3RhdGljIGludCBhdDMyX3NldF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQpAQCAtNjEsOCArNjQsMTkgQEAKIAlmcmVxcy5jcHUgPSAwOwogCWZyZXFzLmZsYWdzID0gMDsKIAorCWlmICghcmVmX2ZyZXEpIHsKKwkJcmVmX2ZyZXEgPSBmcmVxcy5vbGQ7CisJCWxvb3BzX3Blcl9qaWZmeV9yZWYgPSBib290X2NwdV9kYXRhLmxvb3BzX3Blcl9qaWZmeTsKKwl9CisKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOworCWlmIChmcmVxcy5vbGQgPCBmcmVxcy5uZXcpCisJCWJvb3RfY3B1X2RhdGEubG9vcHNfcGVyX2ppZmZ5ID0gY3B1ZnJlcV9zY2FsZSgKKwkJCQlsb29wc19wZXJfamlmZnlfcmVmLCByZWZfZnJlcSwgZnJlcXMubmV3KTsKIAljbGtfc2V0X3JhdGUoY3B1Y2xrLCBmcmVxKTsKKwlpZiAoZnJlcXMubmV3IDwgZnJlcXMub2xkKQorCQlib290X2NwdV9kYXRhLmxvb3BzX3Blcl9qaWZmeSA9IGNwdWZyZXFfc2NhbGUoCisJCQkJbG9vcHNfcGVyX2ppZmZ5X3JlZiwgcmVmX2ZyZXEsIGZyZXFzLm5ldyk7CiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAKIAlwcl9kZWJ1ZygiY3B1ZnJlcTogc2V0IGZyZXF1ZW5jeSAlbHUgSHpcbiIsIGZyZXEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMKaW5kZXggYzM2YTZkNS4uMzEwNDc3YiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgZWljICplaWM7CiAJc3RydWN0IHJlc291cmNlICpyZWdzOwogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBucl9pcnFzOworCXVuc2lnbmVkIGludCBucl9vZl9pcnFzOwogCXVuc2lnbmVkIGludCBpbnRfaXJxOwogCWludCByZXQ7CiAJdTMyIHBhdHRlcm47CkBAIC0yMjQsNyArMjI0LDcgQEAKIAllaWNfd3JpdGVsKGVpYywgSURSLCB+MFVMKTsKIAllaWNfd3JpdGVsKGVpYywgTU9ERSwgfjBVTCk7CiAJcGF0dGVybiA9IGVpY19yZWFkbChlaWMsIE1PREUpOwotCW5yX2lycXMgPSBmbHMocGF0dGVybik7CisJbnJfb2ZfaXJxcyA9IGZscyhwYXR0ZXJuKTsKIAogCS8qIFRyaWdnZXIgb24gbG93IGxldmVsIHVubGVzcyBvdmVycmlkZGVuIGJ5IGRyaXZlciAqLwogCWVpY193cml0ZWwoZWljLCBFREdFLCAwVUwpOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAKIAllaWMtPmNoaXAgPSAmZWljX2NoaXA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7IGkrKykgewogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoZWljLT5maXJzdF9pcnEgKyBpLCAmZWljX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2V0X2lycV9jaGlwX2RhdGEoZWljLT5maXJzdF9pcnEgKyBpLCBlaWMpOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCSBlaWMtPnJlZ3MsIGludF9pcnEpOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsCiAJCSAiSGFuZGxpbmcgJXUgZXh0ZXJuYWwgSVJRcywgc3RhcnRpbmcgd2l0aCBJUlEgJXVcbiIsCi0JCSBucl9pcnFzLCBlaWMtPmZpcnN0X2lycSk7CisJCSBucl9vZl9pcnFzLCBlaWMtPmZpcnN0X2lycSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKaW5kZXggYzQ4Mzg2ZC4uYWFmYWY3YSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC0xNCw4ICsxNCwxNCBAQAogICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBhdDMyX2JvYXJkX29zY19yYXRlc1tdOwogICAKLS8qIEFkZCBiYXNpYyBkZXZpY2VzOiBzeXN0ZW0gbWFuYWdlciwgaW50ZXJydXB0IGNvbnRyb2xsZXIsIHBvcnRtdXhlcywgZXRjLiAqLwotdm9pZCBhdDMyX2FkZF9zeXN0ZW1fZGV2aWNlcyh2b2lkKTsKKy8qCisgKiBUaGlzIHVzZWQgdG8gYWRkIGVzc2VudGlhbCBzeXN0ZW0gZGV2aWNlcywgYnV0IHRoaXMgaXMgbm93IGRvbmUKKyAqIGF1dG9tYXRpY2FsbHkuIFBsZWFzZSBkb24ndCB1c2UgaXQgaW4gbmV3IGJvYXJkIGNvZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgYXQzMl9hZGRfc3lzdGVtX2RldmljZXModm9pZCkKK3sKKworfQogCiAjZGVmaW5lIEFUTUVMX01BWF9VQVJUCTQKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCmluZGV4IDgxMDJjNzkuLjI5ZTcxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKQEAgLTY0LDggKzY0LDExIEBACiAJZGVwZW5kcyBvbiBPUFJPRklMRQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkJsYWNrZmluIFByb2Nlc3NvciBPcHRpb25zIgogCiBjb21tZW50ICJQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzIgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL0tjb25maWcgYi9hcmNoL2NyaXMvS2NvbmZpZwppbmRleCA5Mzg5ZDM4Li5iMTdhZWVhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvS2NvbmZpZworKysgYi9hcmNoL2NyaXMvS2NvbmZpZwpAQCAtNjIsNiArNjIsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJHZW5lcmFsIHNldHVwIgogCiBzb3VyY2UgImZzL0tjb25maWcuYmluZm10IgpAQCAtNjc3LDYgKzY3OSw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy91c2IvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3V3Yi9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvY3Jpcy9LY29uZmlnLmRlYnVnIgogCiBzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvTWFrZWZpbGUgYi9hcmNoL2NyaXMvTWFrZWZpbGUKaW5kZXggODM4Y2QyYS4uYzZmNWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsOCBAQAogIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAjIGZvciBtb3JlIGRldGFpbHMuCiAKK0tCVUlMRF9ERUZDT05GSUcgOj0gZXRyYXgtMTAwbHhfdjJfZGVmY29uZmlnCisKIGFyY2gteSA6PSB2MTAKIGFyY2gtJChDT05GSUdfRVRSQVhfQVJDSF9WMTApIDo9IHYxMAogYXJjaC0kKENPTkZJR19FVFJBWF9BUkNIX1YzMikgOj0gdjMyCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCAwOGQ5NDNjLi42ZmUwZmZhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGFzZmxhZ3MteSArPSAkKExJTlVYSU5DTFVERSkKIGNjZmxhZ3MteSArPSAtTzIgJChMSU5VWElOQ0xVREUpCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvZGVjb21wcmVzcy5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL2RlY29tcHJlc3MubGRzCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlCmluZGV4IDA3Njg4ZGEuLjgyYWI1OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGNjZmxhZ3MteSArPSAtTzIgJChMSU5VWElOQ0xVREUpCiBhc2ZsYWdzLXkgKz0gJChMSU5VWElOQ0xVREUpCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvcmVzY3VlLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvcmVzY3VlLmxkcwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogb2JqLSQoQ09ORklHX0VUUkFYX0FYSVNGTEFTSE1BUCkgPSBoZWFkLm8KIE9CSkVDVCA6PSAkKG9iaikvaGVhZC5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvcmVzY3VlLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGQKcmVuYW1lIHRvIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCmluZGV4IGM5YWEzOTAuLjNiZGZhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCkBAIC0yMTUsMTIgKzIxNSwxMiBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpAQCAtMjk1LDEyICsyOTUsMTIgQEAKIAkJCWVsc2UKIAkJCQl5cnMgLT0gMTkwMDsJLyogUlRDICg3MCwgNzEsIC4uLiA5OSkgKi8KIAotCQkJQklOX1RPX0JDRChzZWMpOwotCQkJQklOX1RPX0JDRChtaW4pOwotCQkJQklOX1RPX0JDRChocnMpOwotCQkJQklOX1RPX0JDRChkYXkpOwotCQkJQklOX1RPX0JDRChtb24pOwotCQkJQklOX1RPX0JDRCh5cnMpOworCQkJc2VjID0gYmluMmJjZChzZWMpOworCQkJbWluID0gYmluMmJjZChtaW4pOworCQkJaHJzID0gYmluMmJjZChocnMpOworCQkJZGF5ID0gYmluMmJjZChkYXkpOworCQkJbW9uID0gYmluMmJjZChtb24pOworCQkJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCQlDTU9TX1dSSVRFKHlycywgUlRDX1lFQVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IDg3NjlkYzkuLjFlOTBjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkgICAgICAgImluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciBndWFyYW50ZWVkIVxuIiwgUENGODU2M19OQU1FKTsKIAl9CiAKLQl0bS0+dG1feWVhciAgPSBCQ0RfVE9fQklOKHRtLT50bV95ZWFyKSArCisJdG0tPnRtX3llYXIgID0gYmNkMmJpbih0bS0+dG1feWVhcikgKwogCQkgICAgICAgKCh0bS0+dG1fbW9uICYgMHg4MCkgPyAxMDAgOiAwKTsKIAl0bS0+dG1fc2VjICAmPSAweDdGOwogCXRtLT50bV9taW4gICY9IDB4N0Y7CkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCXRtLT50bV93ZGF5ICY9IDB4MDc7IC8qIE5vdCBjb2RlZCBpbiBCQ0QuICovCiAJdG0tPnRtX21vbiAgJj0gMHgxRjsKIAotCUJDRF9UT19CSU4odG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tb24pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKIAl0bS0+dG1fbW9uLS07IC8qIE1vbnRoIGlzIDEuLjEyIGluIFJUQyBidXQgMC4uMTEgaW4gbGludXggKi8KIH0KIApAQCAtMjgyLDEyICsyODIsMTIgQEAKIAkJY2VudHVyeSA9ICh0bS50bV95ZWFyID49IDIwMDApID8gMHg4MCA6IDA7CiAJCXRtLnRtX3llYXIgPSB0bS50bV95ZWFyICUgMTAwOwogCi0JCUJJTl9UT19CQ0QodG0udG1feWVhcik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbW9uKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tZGF5KTsKLQkJQklOX1RPX0JDRCh0bS50bV9ob3VyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9taW4pOwotCQlCSU5fVE9fQkNEKHRtLnRtX3NlYyk7CisJCXRtLnRtX3llYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIpOworCQl0bS50bV9tb24gPSBiaW4yYmNkKHRtLnRtX21vbik7CisJCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKKwkJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOworCQl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAJCXRtLnRtX21vbiB8PSBjZW50dXJ5OwogCiAJCW11dGV4X2xvY2soJnJ0Y19sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGQ2MzM1ZjIuLjVhMWIzMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogYXNmbGFncy15ICs9IC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCiBjY2ZsYWdzLXkgKz0gLU8yIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvZGVjb21wcmVzcy5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL2RlY29tcHJlc3MubGRzCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlCmluZGV4IDQ0YWUwYWQuLjU2NmFhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAJCS1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAogYXNmbGFncy15ICs9IC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaC9tYWNoLyAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKIExEID0gZ2NjLWNyaXMgLW1saW51eCAtbWFyY2g9djMyIC1ub3N0ZGxpYgotbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChvYmopL3Jlc2N1ZS5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL3Jlc2N1ZS5sZHMKIExEUE9TVEZMQUdTID0gLWxnY2MKIE9CSkNPUFlGTEFHUyA9IC1PIGJpbmFyeSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MKIG9iai0kKENPTkZJR19FVFJBWF9BWElTRkxBU0hNQVApID0gaGVhZC5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvcmVzY3VlLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGQKcmVuYW1lIHRvIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKaW5kZXggZjI2M2FiNS4uZjQ0Nzg1MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCSAgICAgICAiaW5mb3JtYXRpb24gaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQhXG4iLCBQQ0Y4NTYzX05BTUUpOwogCX0KIAotCXRtLT50bV95ZWFyICA9IEJDRF9UT19CSU4odG0tPnRtX3llYXIpICsKKwl0bS0+dG1feWVhciAgPSBiY2QyYmluKHRtLT50bV95ZWFyKSArCiAJCSAgICAgICAoKHRtLT50bV9tb24gJiAweDgwKSA/IDEwMCA6IDApOwogCXRtLT50bV9zZWMgICY9IDB4N0Y7CiAJdG0tPnRtX21pbiAgJj0gMHg3RjsKQEAgLTEyNywxMSArMTI3LDExIEBACiAJdG0tPnRtX3dkYXkgJj0gMHgwNzsgLyogTm90IGNvZGVkIGluIEJDRC4gKi8KIAl0bS0+dG1fbW9uICAmPSAweDFGOwogCi0JQkNEX1RPX0JJTih0bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9taW4pOwotCUJDRF9UT19CSU4odG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4odG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4odG0tPnRtX21vbik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4odG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHRtLT50bV9tb24pOwogCXRtLT50bV9tb24tLTsgLyogTW9udGggaXMgMS4uMTIgaW4gUlRDIGJ1dCAwLi4xMSBpbiBsaW51eCAqLwogfQogCkBAIC0yNzksMTIgKzI3OSwxMiBAQAogCQljZW50dXJ5ID0gKHRtLnRtX3llYXIgPj0gMjAwMCkgPyAweDgwIDogMDsKIAkJdG0udG1feWVhciA9IHRtLnRtX3llYXIgJSAxMDA7CiAKLQkJQklOX1RPX0JDRCh0bS50bV95ZWFyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tb24pOwotCQlCSU5fVE9fQkNEKHRtLnRtX21kYXkpOwotCQlCSU5fVE9fQkNEKHRtLnRtX2hvdXIpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21pbik7Ci0JCUJJTl9UT19CQ0QodG0udG1fc2VjKTsKKwkJdG0udG1feWVhciA9IGJpbjJiY2QodG0udG1feWVhcik7CisJCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKKwkJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOworCQl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CisJCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAkJdG0udG1fbW9uIHw9IGNlbnR1cnk7CiAKIAkJbXV0ZXhfbG9jaygmcnRjX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FydHBlY18zX2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2FydHBlY18zX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FydHBlY18zX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvYXJ0cGVjXzNfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXgtMTAwbHhfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvYXJjaC12MTAvZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF9kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9kZWZjb25maWcgYi9hcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF92Ml9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X3YyX2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2V0cmF4ZnNfZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXhmc19kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9ldHJheGZzX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXhmc19kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKaW5kZXggZmY0YzZhYS4uMDc0ZmU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7Ci0JQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTE0Miw4ICsxNDIsOCBAQAogCXJlYWxfbWludXRlcyAlPSA2MDsKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcyxSVENfTUlOVVRFUyk7CiAJfSBlbHNlIHsKQEAgLTE3MCwxMiArMTcwLDEyIEBACiAJbW9uID0gQ01PU19SRUFEKFJUQ19NT05USCk7CiAJeWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CiAKLQlCQ0RfVE9fQklOKHNlYyk7Ci0JQkNEX1RPX0JJTihtaW4pOwotCUJDRF9UT19CSU4oaG91cik7Ci0JQkNEX1RPX0JJTihkYXkpOwotCUJDRF9UT19CSU4obW9uKTsKLQlCQ0RfVE9fQklOKHllYXIpOworCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwltaW4gPSBiY2QyYmluKG1pbik7CisJaG91ciA9IGJjZDJiaW4oaG91cik7CisJZGF5ID0gYmNkMmJpbihkYXkpOworCW1vbiA9IGJjZDJiaW4obW9uKTsKKwl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAogCWlmICgoeWVhciArPSAxOTAwKSA8IDE5NzApCiAJCXllYXIgKz0gMTAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggYTVhYWMxYi4uOWQxNTUyYSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC02Niw2ICs2Niw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIAogbWVudSAiRnVqaXRzdSBGUi1WIHN5c3RlbSBzZXR1cCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IGM3OTY2NzQuLjI4ZjA2ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcKQEAgLTkwLDYgKzkwLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogc291cmNlICJhcmNoL2g4MzAwL0tjb25maWcuY3B1IgogCiBtZW51ICJFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cyIKQEAgLTIxNCw2ICsyMTYsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvdXNiL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy91d2IvS2NvbmZpZyIKKwogZW5kbWVudQogCiBzb3VyY2UgImZzL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYWFmZDRkMy4uNzAwMDE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODksNiArODksNyBAQAogCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTQKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk1CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC05Niw2ICs5Nyw3IEBACiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDNiN2FhMzguLjI3ZWVjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC03LDYgKzcsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKIGNvbmZpZyBJQTY0CkBAIC0yMSw2ICsyMyw3IEBACiAJc2VsZWN0IEhBVkVfS1JFVFBST0JFUwogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUwogCXNlbGVjdCBIQVZFX0tWTQorCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhlIEl0YW5pdW0gUHJvY2Vzc29yIEZhbWlseSBpcyBJbnRlbCdzIDY0LWJpdCBzdWNjZXNzb3IgdG8KQEAgLTEwOCw2ICsxMTEsMzMgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK21lbnVjb25maWcgUEFSQVZJUlRfR1VFU1QKKwlib29sICJQYXJhdmlydHVhbGl6ZWQgZ3Vlc3Qgc3VwcG9ydCIKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyByZWxhdGVkIHRvIHJ1bm5pbmcgTGludXggdW5kZXIKKwkgIHZhcmlvdXMgaHlwZXJ2aXNvcnMuICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLgorCisJICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLgorCitpZiBQQVJBVklSVF9HVUVTVAorCitjb25maWcgUEFSQVZJUlQKKwlib29sICJFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGUiCisJZGVwZW5kcyBvbiBQQVJBVklSVF9HVUVTVAorCWRlZmF1bHQgeQorCWJvb2wKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIGNoYW5nZXMgdGhlIGtlcm5lbCBzbyBpdCBjYW4gbW9kaWZ5IGl0c2VsZiB3aGVuIGl0IGlzIHJ1bgorCSAgdW5kZXIgYSBoeXBlcnZpc29yLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseQorCSAgb3ZlciBmdWxsIHZpcnR1YWxpemF0aW9uLiAgSG93ZXZlciwgd2hlbiBydW4gd2l0aG91dCBhIGh5cGVydmlzb3IKKwkgIHRoZSBrZXJuZWwgaXMgdGhlb3JldGljYWxseSBzbG93ZXIgYW5kIHNsaWdodGx5IGxhcmdlci4KKworCitzb3VyY2UgImFyY2gvaWE2NC94ZW4vS2NvbmZpZyIKKworZW5kaWYKKwogY2hvaWNlCiAJcHJvbXB0ICJTeXN0ZW0gdHlwZSIKIAlkZWZhdWx0IElBNjRfR0VORVJJQwpAQCAtMTE3LDYgKzE0Nyw3IEBACiAJc2VsZWN0IE5VTUEKIAlzZWxlY3QgQUNQSV9OVU1BCiAJc2VsZWN0IFNXSU9UTEIKKwlzZWxlY3QgUENJX01TSQogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgc3lzdGVtIHR5cGUgb2YgeW91ciBoYXJkd2FyZS4gIEEgImdlbmVyaWMiIGtlcm5lbAogCSAgd2lsbCBydW4gb24gYW55IHN1cHBvcnRlZCBJQS02NCBzeXN0ZW0uICBIb3dldmVyLCBpZiB5b3UgY29uZmlndXJlCkBAIC0xMjQsMTEgKzE1NSwxMyBAQAogCiAJICBnZW5lcmljCQlGb3IgYW55IHN1cHBvcnRlZCBJQS02NCBzeXN0ZW0KIAkgIERJRy1jb21wbGlhbnQJCUZvciBESUcgKCJEZXZlbG9wZXIncyBJbnRlcmZhY2UgR3VpZGUiKSBjb21wbGlhbnQgc3lzdGVtcworCSAgRElHK0ludGVsK0lPTU1VCUZvciBESUcgc3lzdGVtcyB3aXRoIEludGVsIElPTU1VCiAJICBIUC16eDEvc3gxMDAwCQlGb3IgSFAgc3lzdGVtcwogCSAgSFAtengxL3N4MTAwMCtzd2lvdGxiCUZvciBIUCBzeXN0ZW1zIHdpdGggKGJyb2tlbikgRE1BLWNvbnN0cmFpbmVkIGRldmljZXMuCiAJICBTR0ktU04yCQlGb3IgU0dJIEFsdGl4IHN5c3RlbXMKIAkgIFNHSS1VVgkJRm9yIFNHSSBVViBzeXN0ZW1zCiAJICBTa2ktc2ltdWxhdG9yCQlGb3IgdGhlIEhQIHNpbXVsYXRvciA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3Jlc2VhcmNoL2xpbnV4L3NraS8+CisJICBYZW4tZG9tVQkJRm9yIHhlbiBkb21VIHN5c3RlbQogCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvLCBjaG9vc2UgImdlbmVyaWMiLgogCkBAIC0xMzYsNiArMTY5LDExIEBACiAJYm9vbCAiRElHLWNvbXBsaWFudCIKIAlzZWxlY3QgU1dJT1RMQgogCitjb25maWcgSUE2NF9ESUdfVlRECisJYm9vbCAiRElHK0ludGVsK0lPTU1VIgorCXNlbGVjdCBETUFSCisJc2VsZWN0IFBDSV9NU0kKKwogY29uZmlnIElBNjRfSFBfWlgxCiAJYm9vbCAiSFAtengxL3N4MTAwMCIKIAloZWxwCkBAIC0xNzksNiArMjE3LDEwIEBACiAJYm9vbCAiU2tpLXNpbXVsYXRvciIKIAlzZWxlY3QgU1dJT1RMQgogCitjb25maWcgSUE2NF9YRU5fR1VFU1QKKwlib29sICJYZW4gZ3Vlc3QiCisJZGVwZW5kcyBvbiBYRU4KKwogZW5kY2hvaWNlCiAKIGNob2ljZQpAQCAtNTgxLDYgKzYyMywxNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvcGNtY2lhL0tjb25maWciCiAKK2NvbmZpZyBETUFSCisgICAgICAgIGJvb2wgIlN1cHBvcnQgZm9yIERNQSBSZW1hcHBpbmcgRGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKKyAgICAgICAgZGVwZW5kcyBvbiBJQTY0X0dFTkVSSUMgJiYgQUNQSSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBETUEgcmVtYXBwaW5nIChETUFSKSBkZXZpY2VzIHN1cHBvcnQgZW5hYmxlcyBpbmRlcGVuZGVudCBhZGRyZXNzCisJICB0cmFuc2xhdGlvbnMgZm9yIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIGZyb20gZGV2aWNlcy4KKwkgIFRoZXNlIERNQSByZW1hcHBpbmcgZGV2aWNlcyBhcmUgcmVwb3J0ZWQgdmlhIEFDUEkgdGFibGVzCisJICBhbmQgaW5jbHVkZSBQQ0kgZGV2aWNlIHNjb3BlIGNvdmVyZWQgYnkgdGhlc2UgRE1BCisJICByZW1hcHBpbmcgZGV2aWNlcy4KKwogZW5kbWVudQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L01ha2VmaWxlIGIvYXJjaC9pYTY0L01ha2VmaWxlCmluZGV4IDkwNWQyNWIuLjU4YTdlNDZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L01ha2VmaWxlCkBAIC01MywxMiArNTMsMTUgQEAKIGNvcmUteQkJCQkrPSBhcmNoL2lhNjQva2VybmVsLyBhcmNoL2lhNjQvbW0vCiBjb3JlLSQoQ09ORklHX0lBMzJfU1VQUE9SVCkJKz0gYXJjaC9pYTY0L2lhMzIvCiBjb3JlLSQoQ09ORklHX0lBNjRfRElHKSAJKz0gYXJjaC9pYTY0L2RpZy8KK2NvcmUtJChDT05GSUdfSUE2NF9ESUdfVlREKSAJKz0gYXJjaC9pYTY0L2RpZy8KIGNvcmUtJChDT05GSUdfSUE2NF9HRU5FUklDKSAJKz0gYXJjaC9pYTY0L2RpZy8KIGNvcmUtJChDT05GSUdfSUE2NF9IUF9aWDEpCSs9IGFyY2gvaWE2NC9kaWcvCiBjb3JlLSQoQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIpICs9IGFyY2gvaWE2NC9kaWcvCitjb3JlLSQoQ09ORklHX0lBNjRfWEVOX0dVRVNUKQkrPSBhcmNoL2lhNjQvZGlnLwogY29yZS0kKENPTkZJR19JQTY0X1NHSV9TTjIpCSs9IGFyY2gvaWE2NC9zbi8KIGNvcmUtJChDT05GSUdfSUE2NF9TR0lfVVYpCSs9IGFyY2gvaWE2NC91di8KIGNvcmUtJChDT05GSUdfS1ZNKSAJCSs9IGFyY2gvaWE2NC9rdm0vCitjb3JlLSQoQ09ORklHX1hFTikJCSs9IGFyY2gvaWE2NC94ZW4vCiAKIGRyaXZlcnMtJChDT05GSUdfUENJKQkJKz0gYXJjaC9pYTY0L3BjaS8KIGRyaXZlcnMtJChDT05GSUdfSUE2NF9IUF9TSU0pCSs9IGFyY2gvaWE2NC9ocC9zaW0vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnCmluZGV4IDlmNDgzOTcuLmUwNWY5ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnCkBAIC0yMzMsNiArMjMzLDggQEAKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCiAKKyMgQ09ORklHX0RNQVIgaXMgbm90IHNldAorCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkKICMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwppbmRleCA3OTdhY2Y5Li5jNTIyZWRmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCkBAIC0xNzIsNiArMTcyLDggQEAKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCiAKKyMgQ09ORklHX0RNQVIgaXMgbm90IHNldAorCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkKICMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kaWcvTWFrZWZpbGUgYi9hcmNoL2lhNjQvZGlnL01ha2VmaWxlCmluZGV4IDk3MWNkNzguLjVjMDI4MzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9kaWcvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2RpZy9NYWtlZmlsZQpAQCAtNiw0ICs2LDkgQEAKICMKIAogb2JqLXkgOj0gc2V0dXAubworaWZlcSAoJChDT05GSUdfRE1BUiksIHkpCitvYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBtYWNodmVjLm8gbWFjaHZlY192dGQubyBkaWdfdnRkX2lvbW11Lm8KK2Vsc2UKIG9iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpICs9IG1hY2h2ZWMubworZW5kaWYKK29iai0kKENPTkZJR19JQTY0X0RJR19WVEQpICs9IGRpZ192dGRfaW9tbXUubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2RpZy9kaWdfdnRkX2lvbW11LmMgYi9hcmNoL2lhNjQvZGlnL2RpZ192dGRfaW9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzhhMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2RpZy9kaWdfdnRkX2lvbW11LmMKQEAgLTAsMCArMSw1OSBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KKwordm9pZCAqCit2dGRfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKKwkJIGdmcF90IGZsYWdzKQoreworCXJldHVybiBpbnRlbF9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZ0ZF9hbGxvY19jb2hlcmVudCk7CisKK3ZvaWQKK3Z0ZF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAorCQkgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCWludGVsX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2dGRfZnJlZV9jb2hlcmVudCk7CisKK2RtYV9hZGRyX3QKK3Z0ZF9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCisJCSAgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJcmV0dXJuIGludGVsX21hcF9zaW5nbGUoZGV2LCAocGh5c19hZGRyX3QpYWRkciwgc2l6ZSwgZGlyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZ0ZF9tYXBfc2luZ2xlX2F0dHJzKTsKKwordm9pZAordnRkX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaW92YSwgc2l6ZV90IHNpemUsCisJCSAgICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlpbnRlbF91bm1hcF9zaW5nbGUoZGV2LCBpb3ZhLCBzaXplLCBkaXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodnRkX3VubWFwX3NpbmdsZV9hdHRycyk7CisKK2ludAordnRkX21hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVudHMsCisJCSBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlyZXR1cm4gaW50ZWxfbWFwX3NnKGRldiwgc2dsaXN0LCBuZW50cywgZGlyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZ0ZF9tYXBfc2dfYXR0cnMpOworCit2b2lkCit2dGRfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJICAgaW50IG5lbnRzLCBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlpbnRlbF91bm1hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2dGRfdW5tYXBfc2dfYXR0cnMpOworCitpbnQKK3Z0ZF9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2dGRfZG1hX21hcHBpbmdfZXJyb3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2RpZy9tYWNodmVjX3Z0ZC5jIGIvYXJjaC9pYTY0L2RpZy9tYWNodmVjX3Z0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZDNlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvZGlnL21hY2h2ZWNfdnRkLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIE1BQ0hWRUNfUExBVEZPUk1fTkFNRQkJZGlnX3Z0ZAorI2RlZmluZSBNQUNIVkVDX1BMQVRGT1JNX0hFQURFUgkJPGFzbS9tYWNodmVjX2RpZ192dGQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlY19pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCA0OTU2YmU0Li5kOThmMGY0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTIwNzAsMTQgKzIwNzAsMTMgQEAKIAlpZiAoIWlhNjRfcGxhdGZvcm1faXMoImhwengxIikgJiYgIWlhNjRfcGxhdGZvcm1faXMoImhwengxX3N3aW90bGIiKSkKIAkJcmV0dXJuIDA7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpICYmIGRlZmluZWQoQ09ORklHX0NSQVNIX0RVTVApICYmIFwKLSAgICAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpCiAJLyogSWYgd2UgYXJlIGJvb3RpbmcgYSBrZHVtcCBrZXJuZWwsIHRoZSBzYmFfaW9tbXUgd2lsbAogCSAqIGNhdXNlIGRldmljZXMgdGhhdCB3ZXJlIG5vdCBzaHV0ZG93biBwcm9wZXJseSB0byBNQ0EKIAkgKiBhcyBzb29uIGFzIHRoZXkgYXJlIHR1cm5lZCBiYWNrIG9uLiAgT3VyIG9ubHkgb3B0aW9uIGZvcgogCSAqIGEgc3VjY2Vzc2Z1bCBrZHVtcCBrZXJuZWwgYm9vdCBpcyB0byB1c2UgdGhlIHN3aW90bGIuCiAJICovCi0JaWYgKGVsZmNvcmVoZHJfYWRkciA8IEVMRkNPUkVfQUREUl9NQVgpIHsKKwlpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHsKIAkJaWYgKHN3aW90bGJfbGF0ZV9pbml0X3dpdGhfZGVmYXVsdF9zaXplKDY0ICogKDE8PDIwKSkgIT0gMCkKIAkJCXBhbmljKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBzb2Z0d2FyZSBJL08gVExCOiIKIAkJCQkgICIgVHJ5IG1hY2h2ZWM9ZGlnIGJvb3Qgb3B0aW9uIik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9hdWRpdC5jIGIvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYwppbmRleCA1ZTkwMWM3Li41YzkzZGRkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9hdWRpdC5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL2F1ZGl0LmMKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSA8YXNtLXg4Ni91bmlzdGRfMzIuaD4KKyNpbmNsdWRlICIuLi8uLi94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgiCiAKIHVuc2lnbmVkIGlhMzJfZGlyX2NsYXNzW10gPSB7CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKaW5kZXggNTM1MDViYi4uYThjZjE5OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUwpAQCAtMTA4LDYgKzEwOCwxMSBAQAogCTs7CiAJc3Q4IFtyMl09cjMJCQkJLy8gaW5pdGlhbGl6ZSByZXR1cm4gY29kZSB0byAtRU5PU1lTCiAJYnIuY2FsbC5zcHRrLmZldyBycD1zeXNjYWxsX3RyYWNlX2VudGVyCS8vIGdpdmUgcGFyZW50IGEgY2hhbmNlIHRvIGNhdGNoIHN5c2NhbGwgYXJncworCWNtcC5sdCBwNixwMD1yOCxyMAkJCS8vIGNoZWNrIHRyYWNlaG9vaworCWFkZHMgcjI9SUE2NF9QVF9SRUdTX1I4X09GRlNFVCsxNixzcAkvLyByMiA9ICZwdF9yZWdzLnI4CisJOzsKKyhwNikJc3Q4LnNwaWxsIFtyMl09cjgJCQkvLyBzdG9yZSByZXR1cm4gdmFsdWUgaW4gc2xvdCBmb3IgcjgKKyhwNikJYnIuc3BudC5mZXcgLnJldDQKIC5yZXQyOgkvLyBOZWVkIHRvIHJlbG9hZCBhcmd1bWVudHMgKHRoZXkgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIHRyYWNpbmcgcHJvY2VzcykKIAlhZGRzIHIyPUlBNjRfUFRfUkVHU19SMV9PRkZTRVQrMTYsc3AJLy8gcjIgPSAmcHRfcmVncy5yMQogCWFkZHMgcjM9SUE2NF9QVF9SRUdTX1IxM19PRkZTRVQrMTYsc3AJLy8gcjMgPSAmcHRfcmVncy5yMTMKQEAgLTE5OSwxMCArMjA0LDEwIEBACiAJZGF0YTggc3lzX3NldHVpZAkvKiAxNi1iaXQgdmVyc2lvbiAqLwogCWRhdGE4IHN5c19nZXR1aWQJLyogMTYtYml0IHZlcnNpb24gKi8KIAlkYXRhOCBjb21wYXRfc3lzX3N0aW1lICAgIC8qIDI1ICovCi0JZGF0YTggc3lzMzJfcHRyYWNlCisJZGF0YTggY29tcGF0X3N5c19wdHJhY2UKIAlkYXRhOCBzeXMzMl9hbGFybQogCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggc3lzMzJfcGF1c2UKKwlkYXRhOCBzeXNfcGF1c2UKIAlkYXRhOCBjb21wYXRfc3lzX3V0aW1lCSAgLyogMzAgKi8KIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCiAJZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiBvbGQgZ3R0eSBzeXNjYWxsIGhvbGRlciAqLwpAQCAtMjE1LDcgKzIyMCw3IEBACiAJZGF0YTggc3lzX21rZGlyCiAJZGF0YTggc3lzX3JtZGlyCQkgIC8qIDQwICovCiAJZGF0YTggc3lzX2R1cAotCWRhdGE4IHN5czMyX3BpcGUKKwlkYXRhOCBzeXNfcGlwZQogCWRhdGE4IGNvbXBhdF9zeXNfdGltZXMKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCiAJZGF0YTggc3lzMzJfYnJrCQkgIC8qIDQ1ICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwppbmRleCBmNDQzMGJiLi41ZTkyYWUwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKQEAgLTEwOTgsMjEgKzEwOTgsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfcGlwZSAoaW50IF9fdXNlciAqZmQpCi17Ci0JaW50IHJldHZhbDsKLQlpbnQgZmRzWzJdOwotCi0JcmV0dmFsID0gZG9fcGlwZV9mbGFncyhmZHMsIDApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gb3V0OwotCWlmIChjb3B5X3RvX3VzZXIoZmQsIGZkcywgc2l6ZW9mKGZkcykpKQotCQlyZXR2YWwgPSAtRUZBVUxUOwotICBvdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCiBzeXMzMl9hbGFybSAodW5zaWduZWQgaW50IHNlY29uZHMpCiB7CkBAIC0xMjA5LDI1ICsxMTk0LDYgQEAKIAlyZXR1cm4gY29tcGF0X3N5c193YWl0NChwaWQsIHN0YXRfYWRkciwgb3B0aW9ucywgTlVMTCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlhMzJfcGVlayAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgKnZhbCkKLXsKLQlzaXplX3QgY29waWVkOwotCXVuc2lnbmVkIGludCByZXQ7Ci0KLQljb3BpZWQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgdmFsLCBzaXplb2YoKnZhbCksIDApOwotCXJldHVybiAoY29waWVkICE9IHNpemVvZihyZXQpKSA/IC1FSU8gOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pYTMyX3Bva2UgKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHZhbCkKLXsKLQotCWlmIChhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCksIDEpICE9IHNpemVvZih2YWwpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqICBUaGUgb3JkZXIgaW4gd2hpY2ggcmVnaXN0ZXJzIGFyZSBzdG9yZWQgaW4gdGhlIHB0cmFjZSByZWdzIHN0cnVjdHVyZQogICovCkBAIC0xNTI1LDQ5ICsxNDkxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfcHRyYWNlIChpbnQgcmVxdWVzdCwgcGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgYWRkciwgdW5zaWduZWQgaW50IGRhdGEpCitsb25nIGNvbXBhdF9hcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBjb21wYXRfbG9uZ190IHJlcXVlc3QsCisJY29tcGF0X3Vsb25nX3QgY2FkZHIsIGNvbXBhdF91bG9uZ190IGNkYXRhKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQ7Ci0JdW5zaWduZWQgaW50IHZhbHVlLCB0bXA7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gY2FkZHI7CisJdW5zaWduZWQgbG9uZyBkYXRhID0gY2RhdGE7CisJdW5zaWduZWQgaW50IHRtcDsKIAlsb25nIGksIHJldDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1RSQUNFTUUpIHsKLQkJcmV0ID0gcHRyYWNlX3RyYWNlbWUoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY2hpbGQgPSBwdHJhY2VfZ2V0X3Rhc2tfc3RydWN0KHBpZCk7Ci0JaWYgKElTX0VSUihjaGlsZCkpIHsKLQkJcmV0ID0gUFRSX0VSUihjaGlsZCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9BVFRBQ0gpIHsKLQkJcmV0ID0gc3lzX3B0cmFjZShyZXF1ZXN0LCBwaWQsIGFkZHIsIGRhdGEpOwotCQlnb3RvIG91dF90c2s7Ci0JfQotCi0JcmV0ID0gcHRyYWNlX2NoZWNrX2F0dGFjaChjaGlsZCwgcmVxdWVzdCA9PSBQVFJBQ0VfS0lMTCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X3RzazsKLQogCXN3aXRjaCAocmVxdWVzdCkgewotCSAgICAgIGNhc2UgUFRSQUNFX1BFRUtURVhUOgotCSAgICAgIGNhc2UgUFRSQUNFX1BFRUtEQVRBOgkvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkciAqLwotCQlyZXQgPSBpYTMyX3BlZWsoY2hpbGQsIGFkZHIsICZ2YWx1ZSk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IHB1dF91c2VyKHZhbHVlLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBjb21wYXRfcHRyKGRhdGEpKTsKLQkJZWxzZQotCQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfdHNrOwotCi0JICAgICAgY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6Ci0JICAgICAgY2FzZSBQVFJBQ0VfUE9LRURBVEE6CS8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgKi8KLQkJcmV0ID0gaWEzMl9wb2tlKGNoaWxkLCBhZGRyLCBkYXRhKTsKLQkJZ290byBvdXRfdHNrOwotCiAJICAgICAgY2FzZSBQVFJBQ0VfUEVFS1VTUjoJLyogcmVhZCB3b3JkIGF0IGFkZHIgaW4gVVNFUiBhcmVhICovCiAJCXJldCA9IC1FSU87CiAJCWlmICgoYWRkciAmIDMpIHx8IGFkZHIgPiAxNypzaXplb2YoaW50KSkKQEAgLTE2MzIsMjcgKzE1NjQsOSBAQAogCQkJCQkgICAgY29tcGF0X3B0cihkYXRhKSk7CiAJCWJyZWFrOwogCi0JICAgICAgY2FzZSBQVFJBQ0VfR0VURVZFTlRNU0c6ICAgCi0JCXJldCA9IHB1dF91c2VyKGNoaWxkLT5wdHJhY2VfbWVzc2FnZSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgY29tcGF0X3B0cihkYXRhKSk7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBQVFJBQ0VfU1lTQ0FMTDoJLyogY29udGludWUsIHN0b3AgYWZ0ZXIgbmV4dCBzeXNjYWxsICovCi0JICAgICAgY2FzZSBQVFJBQ0VfQ09OVDoJCS8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwotCSAgICAgIGNhc2UgUFRSQUNFX0tJTEw6Ci0JICAgICAgY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoJLyogZXhlY3V0ZSBjaGlsZSBmb3Igb25lIGluc3RydWN0aW9uICovCi0JICAgICAgY2FzZSBQVFJBQ0VfREVUQUNIOgkvKiBkZXRhY2ggYSBwcm9jZXNzICovCi0JCXJldCA9IHN5c19wdHJhY2UocmVxdWVzdCwgcGlkLCBhZGRyLCBkYXRhKTsKLQkJYnJlYWs7Ci0KIAkgICAgICBkZWZhdWx0OgotCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7Ci0JCWJyZWFrOwotCisJCXJldHVybiBjb21wYXRfcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGNhZGRyLCBjZGF0YSk7CiAJfQotICBvdXRfdHNrOgotCXB1dF90YXNrX3N0cnVjdChjaGlsZCk7Ci0gIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTcwNCwxNCArMTYxOCw2IEBACiB9CiAKIGFzbWxpbmthZ2UgaW50Ci1zeXMzMl9wYXVzZSAodm9pZCkKLXsKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQlzY2hlZHVsZSgpOwotCXJldHVybiAtRVJFU1RBUlROT0hBTkQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50CiBzeXMzMl9tc3luYyAodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50IGFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYnJlYWsuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9icmVhay5oCmluZGV4IGYwMzQwMjAuLmU5MGM0MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9icmVhay5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9icmVhay5oCkBAIC0yMCw0ICsyMCwxMyBAQAogICovCiAjZGVmaW5lIF9fSUE2NF9CUkVBS19TWVNDQUxMCQkweDEwMDAwMAogCisvKgorICogWGVuIHNwZWNpZmljIGJyZWFrIG51bWJlcnM6CisgKi8KKyNkZWZpbmUgX19JQTY0X1hFTl9IWVBFUkNBTEwJCTB4MTAwMAorLyogW19fSUE2NF9YRU5fSFlQRVJQUklWT1BfU1RBUlQsIF9fSUE2NF9YRU5fSFlQRVJQUklWT1BfTUFYXSBpcyB1c2VkCisgICBmb3IgeGVuIGh5cGVycHJpdm9wcyAqLworI2RlZmluZSBfX0lBNjRfWEVOX0hZUEVSUFJJVk9QX1NUQVJUCTB4MQorI2RlZmluZSBfX0lBNjRfWEVOX0hZUEVSUFJJVk9QX01BWAkweDFhCisKICNlbmRpZiAvKiBfQVNNX0lBNjRfQlJFQUtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggYWZjZmJkYS4uYzhjZTI3MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCiAKIGV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgY2xmbHVzaF9jYWNoZV9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSk7CisKIAogI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBhZ2UsIHVzZXJfYWRkciwgbGVuKQkJCQkJXAogZG8gewkJCQkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCAzZGI2ZGFmLi40MWFiODVkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0xMCw2ICsxMCw5IEBACiAjaWZkZWYgQ09ORklHX0FDUEkKIAl2b2lkCSphY3BpX2hhbmRsZTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ETUFSCisJdm9pZCAqaW9tbXU7IC8qIGhvb2sgZm9yIElPTU1VIHNwZWNpZmljIGV4dGVuc2lvbiAqLworI2VuZGlmCiB9OwogCiAjZW5kaWYgLyogX0FTTV9JQTY0X0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDA2ZmYxYmEuLmJiYWI3ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC03LDYgKzcsNDkgQEAKICAqLwogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgorCitzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHsKKwlpbnQgICAgICAgICAgICAgKCptYXBwaW5nX2Vycm9yKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKwl2b2lkKiAgICAgICAgICAgKCphbGxvY19jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApOworCXZvaWQgICAgICAgICAgICAoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisJZG1hX2FkZHJfdCAgICAgICgqbWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqaHdkZXYsIHVuc2lnbmVkIGxvbmcgcHRyLAorCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCWludCBkaXJlY3Rpb24pOworCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCWludCBkaXJlY3Rpb24pOworCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2dfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQlpbnQgZGlyZWN0aW9uKTsKKwlpbnQgICAgICAgICAgICAgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCWludCBuZW50cywgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCQlpbnQgZGlyZWN0aW9uKTsKKwlpbnQgICAgICAgICAgICAgKCpkbWFfc3VwcG9ydGVkX29wKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOworCWludAkJaXNfcGh5czsKK307CisKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOworZXh0ZXJuIHN0cnVjdCBpYTY0X21hY2hpbmVfdmVjdG9yIGlhNjRfbXY7CitleHRlcm4gdm9pZCBzZXRfaW9tbXVfbWFjaHZlYyh2b2lkKTsKIAogI2RlZmluZSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIGdmcCkJXAogCXBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGhhbmRsZSwgKGdmcCkgfCBHRlBfRE1BKQpAQCAtOTYsNCArMTM5LDExIEBACiAKICNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDEpCS8qIGFsbCB3ZSBkbyBpcyBjb2hlcmVudCBtZW1vcnkuLi4gKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRtYV9vcHM7Cit9CisKKworCiAjZW5kaWYgLyogX0FTTV9JQTY0X0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pb21tdS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiMmJiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pb21tdS5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0lPTU1VX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0lPTU1VX0ggMQorCisjZGVmaW5lIGNwdV9oYXNfeDJhcGljIDAKKy8qIDEwIHNlY29uZHMgKi8KKyNkZWZpbmUgRE1BUl9PUEVSQVRJT05fVElNRU9VVCAoKChjeWNsZXNfdCkgbG9jYWxfY3B1X2RhdGEtPml0Y19mcmVxKSoxMCkKKworZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3NodXRkb3duKHZvaWQpOworZXh0ZXJuIHZvaWQgbm9faW9tbXVfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgZm9yY2VfaW9tbXUsIG5vX2lvbW11OworZXh0ZXJuIGludCBpb21tdV9kZXRlY3RlZDsKK2V4dGVybiB2b2lkIGlvbW11X2RtYV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbWFjaHZlY19pbml0KGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIGludCBmb3JiaWRfZGFjOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rcmVncy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2tyZWdzLmgKaW5kZXggYWVmY2RmZS4uMzllNjVmNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2tyZWdzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2tyZWdzLmgKQEAgLTMyLDcgKzMyLDcgQEAKICNkZWZpbmUgSUE2NF9UUl9DVVJSRU5UX1NUQUNLCTEJLyogZHRyMTogbWFwcyBrZXJuZWwncyBtZW1vcnktICYgcmVnaXN0ZXItc3RhY2tzICovCiAKICNkZWZpbmUgSUE2NF9UUl9BTExPQ19CQVNFCTIgCS8qIGl0ciZkdHI6IEJhc2Ugb2YgZHluYW1pYyBUUiByZXNvdXJjZSovCi0jZGVmaW5lIElBNjRfVFJfQUxMT0NfTUFYCTMyIAkvKiBNYXggbnVtYmVyIGZvciBkeW5hbWljIHVzZSovCisjZGVmaW5lIElBNjRfVFJfQUxMT0NfTUFYCTY0IAkvKiBNYXggbnVtYmVyIGZvciBkeW5hbWljIHVzZSovCiAKIC8qIFByb2Nlc3NvciBzdGF0dXMgcmVnaXN0ZXIgYml0czogKi8KICNkZWZpbmUgSUE2NF9QU1JfQkVfQklUCQkxCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWMuaAppbmRleCAyYjg1MGNjLi4xZWEyOGJjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmgKQEAgLTEyMCw2ICsxMjAsOCBAQAogIyAgaW5jbHVkZSA8YXNtL21hY2h2ZWNfaHBzaW0uaD4KICMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9ESUcpCiAjICBpbmNsdWRlIDxhc20vbWFjaHZlY19kaWcuaD4KKyMgZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X0RJR19WVEQpCisjICBpbmNsdWRlIDxhc20vbWFjaHZlY19kaWdfdnRkLmg+CiAjIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfWlgxKQogIyAgaW5jbHVkZSA8YXNtL21hY2h2ZWNfaHB6eDEuaD4KICMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQikKQEAgLTEyOCw2ICsxMzAsOCBAQAogIyAgaW5jbHVkZSA8YXNtL21hY2h2ZWNfc24yLmg+CiAjIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfU0dJX1VWKQogIyAgaW5jbHVkZSA8YXNtL21hY2h2ZWNfdXYuaD4KKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9YRU5fR1VFU1QpCisjICBpbmNsdWRlIDxhc20vbWFjaHZlY194ZW4uaD4KICMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9HRU5FUklDKQogCiAjIGlmZGVmIE1BQ0hWRUNfUExBVEZPUk1fSEVBREVSCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19kaWdfdnRkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19kaWdfdnRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwMGI1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2RpZ192dGQuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9BU01fSUE2NF9NQUNIVkVDX0RJR19WVERfaAorI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19ESUdfVlREX2gKKworZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdAkJCWRpZ19zZXR1cDsKK2V4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAl2dGRfYWxsb2NfY29oZXJlbnQ7CitleHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAl2dGRfZnJlZV9jb2hlcmVudDsKK2V4dGVybiBpYTY0X212X2RtYV9tYXBfc2luZ2xlX2F0dHJzCXZ0ZF9tYXBfc2luZ2xlX2F0dHJzOworZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycwl2dGRfdW5tYXBfc2luZ2xlX2F0dHJzOworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycwkJdnRkX21hcF9zZ19hdHRyczsKK2V4dGVybiBpYTY0X212X2RtYV91bm1hcF9zZ19hdHRycwl2dGRfdW5tYXBfc2dfYXR0cnM7CitleHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQlpb21tdV9kbWFfc3VwcG9ydGVkOworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJdnRkX2RtYV9tYXBwaW5nX2Vycm9yOworZXh0ZXJuIGlhNjRfbXZfZG1hX2luaXQJCQlwY2lfaW9tbXVfYWxsb2M7CisKKy8qCisgKiBUaGlzIHN0dWZmIGhhcyBkdWFsIHVzZSEKKyAqCisgKiBGb3IgYSBnZW5lcmljIGtlcm5lbCwgdGhlIG1hY3JvcyBhcmUgdXNlZCB0byBpbml0aWFsaXplIHRoZQorICogcGxhdGZvcm0ncyBtYWNodmVjIHN0cnVjdHVyZS4gIFdoZW4gY29tcGlsaW5nIGEgbm9uLWdlbmVyaWMga2VybmVsLAorICogdGhlIG1hY3JvcyBhcmUgdXNlZCBkaXJlY3RseS4KKyAqLworI2RlZmluZSBwbGF0Zm9ybV9uYW1lCQkJCSJkaWdfdnRkIgorI2RlZmluZSBwbGF0Zm9ybV9zZXR1cAkJCQlkaWdfc2V0dXAKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCQlwY2lfaW9tbXVfYWxsb2MKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CQl2dGRfYWxsb2NfY29oZXJlbnQKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQJCXZ0ZF9mcmVlX2NvaGVyZW50CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCQl2dGRfbWFwX3NpbmdsZV9hdHRycworI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCQl2dGRfdW5tYXBfc2luZ2xlX2F0dHJzCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2dfYXR0cnMJCXZ0ZF9tYXBfc2dfYXR0cnMKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCQl2dGRfdW5tYXBfc2dfYXR0cnMKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQkJbWFjaHZlY19kbWFfc3luY19zZworI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCQltYWNodmVjX2RtYV9zeW5jX3NnCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCQlpb21tdV9kbWFfc3VwcG9ydGVkCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCQl2dGRfZG1hX21hcHBpbmdfZXJyb3IKKworI2VuZGlmIC8qIF9BU01fSUE2NF9NQUNIVkVDX0RJR19WVERfaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaW5pdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaW5pdC5oCmluZGV4IDdmMjEyNDkuLmVmOTY0YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2luaXQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19pbml0LmgKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIAogZXh0ZXJuIGlhNjRfbXZfc2VuZF9pcGlfdCBpYTY0X3NlbmRfaXBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfeGVuLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY194ZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWY5MjI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfeGVuLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNX0lBNjRfTUFDSFZFQ19YRU5faAorI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19YRU5faAorCitleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJZGlnX3NldHVwOworZXh0ZXJuIGlhNjRfbXZfY3B1X2luaXRfdAkJeGVuX2NwdV9pbml0OworZXh0ZXJuIGlhNjRfbXZfaXJxX2luaXRfdAkJeGVuX2lycV9pbml0OworZXh0ZXJuIGlhNjRfbXZfc2VuZF9pcGlfdAkJeGVuX3BsYXRmb3JtX3NlbmRfaXBpOworCisvKgorICogVGhpcyBzdHVmZiBoYXMgZHVhbCB1c2UhCisgKgorICogRm9yIGEgZ2VuZXJpYyBrZXJuZWwsIHRoZSBtYWNyb3MgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUKKyAqIHBsYXRmb3JtJ3MgbWFjaHZlYyBzdHJ1Y3R1cmUuICBXaGVuIGNvbXBpbGluZyBhIG5vbi1nZW5lcmljIGtlcm5lbCwKKyAqIHRoZSBtYWNyb3MgYXJlIHVzZWQgZGlyZWN0bHkuCisgKi8KKyNkZWZpbmUgcGxhdGZvcm1fbmFtZQkJCQkieGVuIgorI2RlZmluZSBwbGF0Zm9ybV9zZXR1cAkJCQlkaWdfc2V0dXAKKyNkZWZpbmUgcGxhdGZvcm1fY3B1X2luaXQJCQl4ZW5fY3B1X2luaXQKKyNkZWZpbmUgcGxhdGZvcm1faXJxX2luaXQJCQl4ZW5faXJxX2luaXQKKyNkZWZpbmUgcGxhdGZvcm1fc2VuZF9pcGkJCQl4ZW5fcGxhdGZvcm1fc2VuZF9pcGkKKworI2VuZGlmIC8qIF9BU01fSUE2NF9NQUNIVkVDX1hFTl9oICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWVtaW5pdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21lbWluaXQuaAppbmRleCA3MjQ1YTU3Li42YmM5NmVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWVtaW5pdC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tZW1pbml0LmgKQEAgLTE4LDEwICsxOCwxMSBAQAogICogCS0gY3Jhc2ggZHVtcGluZyBjb2RlIHJlc2VydmVkIHJlZ2lvbgogICogCS0gS2VybmVsIG1lbW9yeSBtYXAgYnVpbHQgZnJvbSBFRkkgbWVtb3J5IG1hcAogICogCS0gRUxGIGNvcmUgaGVhZGVyCisgKgktIHhlbiBzdGFydCBpbmZvIGlmIENPTkZJR19YRU4KICAqCiAgKiBNb3JlIGNvdWxkIGJlIGFkZGVkIGlmIG5lY2Vzc2FyeQogICovCi0jZGVmaW5lIElBNjRfTUFYX1JTVkRfUkVHSU9OUyA4CisjZGVmaW5lIElBNjRfTUFYX1JTVkRfUkVHSU9OUyA5CiAKIHN0cnVjdCByc3ZkX3JlZ2lvbiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsJLyogdmlydHVhbCBhZGRyZXNzIG9mIGJlZ2lubmluZyBvZiBlbGVtZW50ICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL2luc3QuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9uYXRpdmUvaW5zdC5oCmluZGV4IGM4ZWZiZjcuLjBhMTAyNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9uYXRpdmUvaW5zdC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9uYXRpdmUvaW5zdC5oCkBAIC0zNiw4ICszNiwxMyBAQAogCTs7CQkJCQlcCiAJbW92bCBjbG9iID0gUEFSQVZJUlRfUE9JU09OOwkJXAogCTs7CisjIGRlZmluZSBDTE9CQkVSX1BSRUQocHJlZF9jbG9iKQkJXAorCTs7CQkJCQlcCisJY21wLmVxIHByZWRfY2xvYiwgcDAgPSByMCwgcjAJCVwKKwk7OwogI2Vsc2UKLSMgZGVmaW5lIENMT0JCRVIoY2xvYikJCS8qIG5vdGhpbmcgKi8KKyMgZGVmaW5lIENMT0JCRVIoY2xvYikJCQkvKiBub3RoaW5nICovCisjIGRlZmluZSBDTE9CQkVSX1BSRUQocHJlZF9jbG9iKQkvKiBub3RoaW5nICovCiAjZW5kaWYKIAogI2RlZmluZSBNT1ZfRlJPTV9JRkEocmVnKQlcCkBAIC0xMzYsNyArMTQxLDggQEAKIAogI2RlZmluZSBTU01fUFNSX0kocHJlZCwgcHJlZF9jbG9iLCBjbG9iKQlcCiAocHJlZCkJc3NtIHBzci5pCQkJCVwKLQlDTE9CQkVSKGNsb2IpCisJQ0xPQkJFUihjbG9iKQkJCQlcCisJQ0xPQkJFUl9QUkVEKHByZWRfY2xvYikKIAogI2RlZmluZSBSU01fUFNSX0kocHJlZCwgY2xvYjAsIGNsb2IxKQlcCiAocHJlZCkJcnNtIHBzci5pCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wdmNoa19pbnN0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL3B2Y2hrX2luc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU2ZWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wdmNoa19pbnN0LmgKQEAgLTAsMCArMSwyNjMgQEAKKyNpZm5kZWYgX0FTTV9OQVRJVkVfUFZDSEtfSU5TVF9ICisjZGVmaW5lIF9BU01fTkFUSVZFX1BWQ0hLX0lOU1RfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL3B2Y2hrX2luc3QuaAorICogQ2hlY2tlciBmb3IgcGFyYXZpcnR1YWxpemF0aW9ucyBvZiBwcml2aWxlZ2VkIG9wZXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDbworICogICAgICBEYW4gTWFnZW5oZWltZXIgPGRhbi5tYWdlbmhlaW1lckBocC5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluc3RydWN0aW9ucyBwYXJhdmlydHVhbGl6ZWQgZm9yIGNvcnJlY3RuZXNzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogImZjIiBhbmQgInRoYXNoIiBhcmUgcHJpdmlsZWdlLXNlbnNpdGl2ZSBpbnN0cnVjdGlvbnMsIG1lYW5pbmcgdGhleQorICogIG1heSBoYXZlIGRpZmZlcmVudCBzZW1hbnRpY3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhleSBhcmUgZXhlY3V0ZWQKKyAqICBhdCBQTDAgdnMgUEwhPTAuICBXaGVuIHBhcmF2aXJ0dWFsaXplZCwgdGhlc2UgaW5zdHJ1Y3Rpb25zIG11c3RuJ3QKKyAqICBiZSBhbGxvd2VkIHRvIGV4ZWN1dGUgZGlyZWN0bHksIGxlc3QgaW5jb3JyZWN0IHNlbWFudGljcyByZXN1bHQuCisgKi8KKworI2RlZmluZSBmYwkuZXJyb3IgImZjIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4iCisjZGVmaW5lIHRoYXNoCS5lcnJvciAidGhhc2ggc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiIKKworLyogTm90ZSB0aGF0ICJ0dGFnIiBhbmQgImNvdmVyIiBhcmUgYWxzbyBwcml2aWxlZ2Utc2Vuc2l0aXZlOyAidHRhZyIKKyAqIGlzIG5vdCBjdXJyZW50bHkgdXNlZCAodGhvdWdoIGl0IG1heSBiZSBpbiBhIGxvbmctZm9ybWF0IFZIUFQgc3lzdGVtISkKKyAqIGFuZCB0aGUgc2VtYW50aWNzIG9mIGNvdmVyIG9ubHkgY2hhbmdlIGlmIHBzci5pYyBpcyBvZmYgd2hpY2ggaXMgdmVyeQorICogcmFyZSAoYW5kIGN1cnJlbnRseSBub24tZXhpc3RlbnQgb3V0c2lkZSBvZiBhc3NlbWJseSBjb2RlCisgKi8KKyNkZWZpbmUgdHRhZwkuZXJyb3IgInR0YWcgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiIKKyNkZWZpbmUgY292ZXIJLmVycm9yICJjb3ZlciBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuIgorCisvKiBUaGVyZSBhcmUgYWxzbyBwcml2aWxlZ2Utc2Vuc2l0aXZlIHJlZ2lzdGVycy4gIFRoZXNlIHJlZ2lzdGVycyBhcmUKKyAqIHJlYWRhYmxlIGF0IGFueSBwcml2aWxlZ2UgbGV2ZWwgYnV0IG9ubHkgd3JpdGFibGUgYXQgUEwwLgorICovCisjZGVmaW5lIGNwdWlkCS5lcnJvciAiY3B1aWQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiIKKyNkZWZpbmUgcG1kCS5lcnJvciAicG1kIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4iCisKKy8qCisgKiBtb3YgYXIuZWZsYWcgPQorICogbW92ID0gYXIuZWZsYWcKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5zdHJ1Y3Rpb25zIHBhcmF2aXJ0dWFsaXplZCBmb3IgcGVyZm9ybWFuY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRob3NlIGluc3RydWN0aW9ucyBpbmNsdWRlICcuJyB3aGljaCBjYW4ndCBiZSBoYW5kbGVkIGJ5IGNwcC4KKyAqIG9yIGNhbid0IGJlIGhhbmRsZWQgYnkgY3BwIGVhc2lseS4KKyAqIFRoZXkgYXJlIGhhbmRsZWQgYnkgc2VkIGluc3RlYWQgb2YgY3BwLgorICovCisKKy8qIGZvciAuUworICogaXRjLmkKKyAqIGl0Yy5kCisgKgorICogYnN3LjAKKyAqIGJzdy4xCisgKgorICogc3NtIHBzci5pYyB8IFBTUl9ERUZBVUxUX0JJVFMKKyAqIHNzbSBwc3IuaWMKKyAqIHJzbSBwc3IuaWMKKyAqIHNzbSBwc3IuaQorICogcnNtIHBzci5pCisgKiByc20gcHNyLmkgfCBwc3IuaWMKKyAqIHJzbSBwc3IuZHQKKyAqIHNzbSBwc3IuZHQKKyAqCisgKiBtb3YgPSBjci5pZmEKKyAqIG1vdiA9IGNyLml0aXIKKyAqIG1vdiA9IGNyLmlzcgorICogbW92ID0gY3IuaWhhCisgKiBtb3YgPSBjci5pcHNyCisgKiBtb3YgPSBjci5paW0KKyAqIG1vdiA9IGNyLmlpcAorICogbW92ID0gY3IuaXZyCisgKiBtb3YgPSBwc3IKKyAqCisgKiBtb3YgY3IuaWZhID0KKyAqIG1vdiBjci5pdGlyID0KKyAqIG1vdiBjci5paGEgPQorICogbW92IGNyLmlwc3IgPQorICogbW92IGNyLmlmcyA9CisgKiBtb3YgY3IuaWlwID0KKyAqIG1vdiBjci5rciA9CisgKi8KKworLyogZm9yIGludHJpbnNpY3MKKyAqIHNzbSBwc3IuaQorICogcnNtIHBzci5pCisgKiBtb3YgPSBwc3IKKyAqIG1vdiA9IGl2cgorICogbW92ID0gdHByCisgKiBtb3YgY3IuaXRtID0KKyAqIG1vdiBlb2kgPQorICogbW92IHJyW10gPQorICogbW92ID0gcnJbXQorICogbW92ID0ga3IKKyAqIG1vdiBrciA9CisgKiBwdGMuZ2EKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZGVmaW5lIHBhcmF2aXJ0dWFsaXplZCBpbnN0cmN1dGlvbiBtYWNyb3MgYXMgbm9wIHRvIGluZ29yZS4KKyAqIGFuZCBjaGVjayB3aGV0aGVyIGFyZ3VtZW50cyBhcmUgYXBwcm9wcmlhdGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogY2hlY2sgd2hldGhlciByZWcgaXMgYSByZWd1bGFyIHJlZ2lzdGVyICovCisubWFjcm8gaXNfcnJlZ19pbiByZWcKKwkuaWZjICJccmVnIiwgInIwIgorCQlub3AgMAorCQkuZXhpdG0KKwkuZW5kaWYKKwk7OworCW1vdiBccmVnID0gcjAKKwk7OworLmVuZG0KKyNkZWZpbmUgSVNfUlJFR19JTihyZWcpCWlzX3JyZWdfaW4gcmVnIDsKKworI2RlZmluZSBJU19SUkVHX09VVChyZWcpCQkJXAorCTs7CQkJCQlcCisJbW92IHJlZyA9IHIwCQkJCVwKKwk7OworCisjZGVmaW5lIElTX1JSRUdfQ0xPQihyZWcpCUlTX1JSRUdfT1VUKHJlZykKKworLyogY2hlY2sgd2hldGhlciBwcmVkIGlzIGEgcHJlZGljYXRlIHJlZ2lzdGVyICovCisjZGVmaW5lIElTX1BSRURfSU4ocHJlZCkJCQlcCisJOzsJCQkJCVwKKwkocHJlZCkJbm9wIDAJCQkJXAorCTs7CisKKyNkZWZpbmUgSVNfUFJFRF9PVVQocHJlZCkJCQlcCisJOzsJCQkJCVwKKwljbXAuZXEgcHJlZCwgcDAgPSByMCwgcjAJCVwKKwk7OworCisjZGVmaW5lIElTX1BSRURfQ0xPQihwcmVkKQlJU19QUkVEX09VVChwcmVkKQorCisKKyNkZWZpbmUgRE9fU0FWRV9NSU4oX19DT1ZFUiwgU0FWRV9JRlMsIEVYVFJBLCBXT1JLQVJPVU5EKQlcCisJbm9wIDAKKyNkZWZpbmUgTU9WX0ZST01fSUZBKHJlZykJCQlcCisJSVNfUlJFR19PVVQocmVnKQorI2RlZmluZSBNT1ZfRlJPTV9JVElSKHJlZykJCQlcCisJSVNfUlJFR19PVVQocmVnKQorI2RlZmluZSBNT1ZfRlJPTV9JU1IocmVnKQkJCVwKKwlJU19SUkVHX09VVChyZWcpCisjZGVmaW5lIE1PVl9GUk9NX0lIQShyZWcpCQkJXAorCUlTX1JSRUdfT1VUKHJlZykKKyNkZWZpbmUgTU9WX0ZST01fSVBTUihwcmVkLCByZWcpCQlcCisJSVNfUFJFRF9JTihwcmVkKQkJCVwKKwlJU19SUkVHX09VVChyZWcpCisjZGVmaW5lIE1PVl9GUk9NX0lJTShyZWcpCQkJXAorCUlTX1JSRUdfT1VUKHJlZykKKyNkZWZpbmUgTU9WX0ZST01fSUlQKHJlZykJCQlcCisJSVNfUlJFR19PVVQocmVnKQorI2RlZmluZSBNT1ZfRlJPTV9JVlIocmVnLCBjbG9iKQkJCVwKKwlJU19SUkVHX09VVChyZWcpCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iKQorI2RlZmluZSBNT1ZfRlJPTV9QU1IocHJlZCwgcmVnLCBjbG9iKQkJXAorCUlTX1BSRURfSU4ocHJlZCkJCQlcCisJSVNfUlJFR19PVVQocmVnKQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgTU9WX1RPX0lGQShyZWcsIGNsb2IpCQkJXAorCUlTX1JSRUdfSU4ocmVnKQkJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IpCisjZGVmaW5lIE1PVl9UT19JVElSKHByZWQsIHJlZywgY2xvYikJCVwKKwlJU19QUkVEX0lOKHByZWQpCQkJXAorCUlTX1JSRUdfSU4ocmVnKQkJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IpCisjZGVmaW5lIE1PVl9UT19JSEEocHJlZCwgcmVnLCBjbG9iKQkJXAorCUlTX1BSRURfSU4ocHJlZCkJCQlcCisJSVNfUlJFR19JTihyZWcpCQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgTU9WX1RPX0lQU1IocHJlZCwgcmVnLCBjbG9iKQkJXAorCUlTX1BSRURfSU4ocHJlZCkJCQlcCisJSVNfUlJFR19JTihyZWcpCQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgTU9WX1RPX0lGUyhwcmVkLCByZWcsIGNsb2IpCQlcCisJSVNfUFJFRF9JTihwcmVkKQkJCVwKKwlJU19SUkVHX0lOKHJlZykJCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iKQorI2RlZmluZSBNT1ZfVE9fSUlQKHJlZywgY2xvYikJCQlcCisJSVNfUlJFR19JTihyZWcpCQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgTU9WX1RPX0tSKGtyLCByZWcsIGNsb2IwLCBjbG9iMSkJXAorCUlTX1JSRUdfSU4ocmVnKQkJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IwKQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYjEpCisjZGVmaW5lIElUQ19JKHByZWQsIHJlZywgY2xvYikJCQlcCisJSVNfUFJFRF9JTihwcmVkKQkJCVwKKwlJU19SUkVHX0lOKHJlZykJCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iKQorI2RlZmluZSBJVENfRChwcmVkLCByZWcsIGNsb2IpCQkJXAorCUlTX1BSRURfSU4ocHJlZCkJCQlcCisJSVNfUlJFR19JTihyZWcpCQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgSVRDX0lfQU5EX0QocHJlZF9pLCBwcmVkX2QsIHJlZywgY2xvYikJXAorCUlTX1BSRURfSU4ocHJlZF9pKQkJCVwKKwlJU19QUkVEX0lOKHByZWRfZCkJCQlcCisJSVNfUlJFR19JTihyZWcpCQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgVEhBU0gocHJlZCwgcmVnMCwgcmVnMSwgY2xvYikJCVwKKwlJU19QUkVEX0lOKHByZWQpCQkJXAorCUlTX1JSRUdfT1VUKHJlZzApCQkJXAorCUlTX1JSRUdfSU4ocmVnMSkJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IpCisjZGVmaW5lIFNTTV9QU1JfSUNfQU5EX0RFRkFVTFRfQklUU19BTkRfU1JMWl9JKGNsb2IwLCBjbG9iMSkJXAorCUlTX1JSRUdfQ0xPQihjbG9iMCkJCQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYjEpCisjZGVmaW5lIFNTTV9QU1JfSUNfQU5EX1NSTFpfRChjbG9iMCwgY2xvYjEpCVwKKwlJU19SUkVHX0NMT0IoY2xvYjApCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iMSkKKyNkZWZpbmUgUlNNX1BTUl9JQyhjbG9iKQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgU1NNX1BTUl9JKHByZWQsIHByZWRfY2xvYiwgY2xvYikJXAorCUlTX1BSRURfSU4ocHJlZCkJCQlcCisJSVNfUFJFRF9DTE9CKHByZWRfY2xvYikJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IpCisjZGVmaW5lIFJTTV9QU1JfSShwcmVkLCBjbG9iMCwgY2xvYjEpCQlcCisJSVNfUFJFRF9JTihwcmVkKQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYjApCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iMSkKKyNkZWZpbmUgUlNNX1BTUl9JX0lDKGNsb2IwLCBjbG9iMSwgY2xvYjIpCVwKKwlJU19SUkVHX0NMT0IoY2xvYjApCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iMSkJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IyKQorI2RlZmluZSBSU01fUFNSX0RUCQkJCVwKKwlub3AgMAorI2RlZmluZSBTU01fUFNSX0RUX0FORF9TUkxaX0kJCQlcCisJbm9wIDAKKyNkZWZpbmUgQlNXXzAoY2xvYjAsIGNsb2IxLCBjbG9iMikJCVwKKwlJU19SUkVHX0NMT0IoY2xvYjApCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iMSkJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IyKQorI2RlZmluZSBCU1dfMShjbG9iMCwgY2xvYjEpCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iMCkJCQlcCisJSVNfUlJFR19DTE9CKGNsb2IxKQorI2RlZmluZSBDT1ZFUgkJCQkJXAorCW5vcCAwCisjZGVmaW5lIFJGSQkJCQkJXAorCWJyLnJldC5zcHRrLm1hbnkgcnAgLyogZGVmaW5pbmcgbm9wIGNhdXNlcyBkZXBlbmRlbmN5IGVycm9yICovCisKKyNlbmRpZiAvKiBfQVNNX05BVElWRV9QVkNIS19JTlNUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggNjYwY2FiMC4uMmJmMzYzNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTExNyw3ICsxMTcsNyBAQAogc3RydWN0IHB2X2lvc2FwaWNfb3BzIHsKIAl2b2lkICgqcGNhdF9jb21wYXRfaW5pdCkodm9pZCk7CiAKLQlzdHJ1Y3QgaXJxX2NoaXAgKigqZ2V0X2lycV9jaGlwKSh1bnNpZ25lZCBsb25nIHRyaWdnZXIpOworCXN0cnVjdCBpcnFfY2hpcCAqKCpfX2dldF9pcnFfY2hpcCkodW5zaWduZWQgbG9uZyB0cmlnZ2VyKTsKIAogCXVuc2lnbmVkIGludCAoKl9fcmVhZCkoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnKTsKIAl2b2lkICgqX193cml0ZSkoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXJxX2NoaXAqCiBpb3NhcGljX2dldF9pcnFfY2hpcCh1bnNpZ25lZCBsb25nIHRyaWdnZXIpCiB7Ci0JcmV0dXJuIHB2X2lvc2FwaWNfb3BzLmdldF9pcnFfY2hpcCh0cmlnZ2VyKTsKKwlyZXR1cm4gcHZfaW9zYXBpY19vcHMuX19nZXRfaXJxX2NoaXAodHJpZ2dlcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggMDE0OTA5Ny4uMWQ2NjBkOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wY2kuaApAQCAtOTUsMTYgKzk1LDggQEAKIAkJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKTsKICNkZWZpbmUgSEFWRV9QQ0lfTEVHQUNZCiBleHRlcm4gaW50IHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMsCi0JCQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotZXh0ZXJuIHNzaXplX3QgcGNpX3JlYWRfbGVnYWN5X2lvKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAotCQkJCSAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpOwotZXh0ZXJuIHNzaXplX3QgcGNpX3dyaXRlX2xlZ2FjeV9pbyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpOwotZXh0ZXJuIGludCBwY2lfbW1hcF9sZWdhY3lfbWVtKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKwkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUpOwogCiAjZGVmaW5lIHBjaV9nZXRfbGVnYWN5X21lbSBwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0KICNkZWZpbmUgcGNpX2xlZ2FjeV9yZWFkIHBsYXRmb3JtX3BjaV9sZWdhY3lfcmVhZApAQCAtMTY0LDQgKzE1Niw3IEBACiAJcmV0dXJuIGNoYW5uZWwgPyBpc2FfaXJxX3RvX3ZlY3RvcigxNSkgOiBpc2FfaXJxX3RvX3ZlY3RvcigxNCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfRE1BUgorZXh0ZXJuIHZvaWQgcGNpX2lvbW11X2FsbG9jKHZvaWQpOworI2VuZGlmCiAjZW5kaWYgLyogX0FTTV9JQTY0X1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMTVmOGRjZi4uNjQxN2MxZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMjQwLDYgKzI0MCwxMiBAQAogICovCiAjIGRlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmNyX2lpcCArIGlhNjRfcHNyKHJlZ3MpLT5yaSkKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHVzZXJfc3RhY2tfcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKiBGSVhNRTogc2hvdWxkIHRoaXMgYmUgYnNwc3RvcmUgKyBucl9kaXJ0eSByZWdzPyAqLworCXJldHVybiByZWdzLT5hcl9ic3BzdG9yZTsKK30KKwogI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKSAoKHJlZ3MpLT5yOCkKIAogLyogQ29uc2VydmUgc3BhY2UgaW4gaGlzdG9ncmFtIGJ5IGVuY29kaW5nIHNsb3QgYml0cyBpbiBhZGRyZXNzCkBAIC0zMTksNiArMzI1LDggQEAKICAgI2RlZmluZSBhcmNoX2hhc19ibG9ja19zdGVwKCkgICAoMSkKICAgZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfYmxvY2tfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19QVFJBQ0UKKwogI2VuZGlmIC8qICFfX0tFUk5FTF9fICovCiAKIC8qIHB0X2FsbF91c2VyX3JlZ3MgaXMgdXNlZCBmb3IgUFRSQUNFX0dFVFJFR1MgUFRSQUNFX1NFVFJFR1MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wdmNsb2NrLWFiaS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3B2Y2xvY2stYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlZjllZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wdmNsb2NrLWFiaS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBzYW1lIHN0cnVjdHVyZSB0byB4ODYncworICogSG9wZWZ1bGx5IGFzbS14ODYvcHZjbG9jay1hYmkuaCB3b3VsZCBiZSBtb3ZlZCB0byBzb21ld2hlcmUgbW9yZSBnZW5lcmljLgorICogRm9yIG5vdywgZGVmaW5lIHNhbWUgZHVwbGljYXRlZCBkZWZpbml0aW9ucy4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9fUFZDTE9DS19BQklfSAorI2RlZmluZSBfQVNNX0lBNjRfX1BWQ0xPQ0tfQUJJX0gKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBUaGVzZSBzdHJ1Y3RzIE1VU1QgTk9UIGJlIGNoYW5nZWQuCisgKiBUaGV5IGFyZSB0aGUgQUJJIGJldHdlZW4gaHlwZXJ2aXNvciBhbmQgZ3Vlc3QgT1MuCisgKiBCb3RoIFhlbiBhbmQgS1ZNIGFyZSB1c2luZyB0aGlzLgorICoKKyAqIHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaG9sZHMgdGhlIHN5c3RlbSB0aW1lIGFuZCB0aGUgdHNjIHRpbWVzdGFtcAorICogb2YgdGhlIGxhc3QgdXBkYXRlLiBTbyB0aGUgZ3Vlc3QgY2FuIHVzZSB0aGUgdHNjIGRlbHRhIHRvIGdldCBhCisgKiBtb3JlIHByZWNpc2Ugc3lzdGVtIHRpbWUuICBUaGVyZSBpcyBvbmUgcGVyIHZpcnR1YWwgY3B1LgorICoKKyAqIHB2Y2xvY2tfd2FsbF9jbG9jayByZWZlcmVuY2VzIHRoZSBwb2ludCBpbiB0aW1lIHdoZW4gdGhlIHN5c3RlbQorICogdGltZSB3YXMgemVybyAodXN1YWxseSBib290IHRpbWUpLCB0aHVzIHRoZSBndWVzdCBjYWxjdWxhdGVzIHRoZQorICogY3VycmVudCB3YWxsIGNsb2NrIGJ5IGFkZGluZyB0aGUgc3lzdGVtIHRpbWUuCisgKgorICogUHJvdG9jb2wgZm9yIHRoZSAidmVyc2lvbiIgZmllbGRzIGlzOiBoeXBlcnZpc29yIHJhaXNlcyBpdCAobWFraW5nCisgKiBpdCB1bmV2ZW4pIGJlZm9yZSBpdCBzdGFydHMgdXBkYXRpbmcgdGhlIGZpZWxkcyBhbmQgcmFpc2VzIGl0IGFnYWluCisgKiAobWFraW5nIGl0IGV2ZW4pIHdoZW4gaXQgaXMgZG9uZS4gIFRodXMgdGhlIGd1ZXN0IGNhbiBtYWtlIHN1cmUgdGhlCisgKiB0aW1lIHZhbHVlcyBpdCBnb3QgYXJlIGNvbnNpc3RlbnQgYnkgY2hlY2tpbmcgdGhlIHZlcnNpb24gYmVmb3JlCisgKiBhbmQgYWZ0ZXIgcmVhZGluZyB0aGVtLgorICovCisKK3N0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIHsKKwl1MzIgICB2ZXJzaW9uOworCXUzMiAgIHBhZDA7CisJdTY0ICAgdHNjX3RpbWVzdGFtcDsKKwl1NjQgICBzeXN0ZW1fdGltZTsKKwl1MzIgICB0c2NfdG9fc3lzdGVtX211bDsKKwlzOCAgICB0c2Nfc2hpZnQ7CisJdTggICAgcGFkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7IC8qIDMyIGJ5dGVzICovCisKK3N0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgeworCXUzMiAgIHZlcnNpb247CisJdTMyICAgc2VjOworCXUzMiAgIG5zZWM7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fSUE2NF9fUFZDTE9DS19BQklfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3aW90bGIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2lvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3OTQyMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2lvdGxiLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBBU01fSUE2NF9fU1dJT1RMQl9ICisjZGVmaW5lIEFTTV9JQTY0X19TV0lPVExCX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKy8qIFNXSU9UTEIgaW50ZXJmYWNlICovCisKK2V4dGVybiBkbWFfYWRkcl90IHN3aW90bGJfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLAorCQkJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpOworZXh0ZXJuIHZvaWQgKnN3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncyk7CitleHRlcm4gdm9pZCBzd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkgc2l6ZV90IHNpemUsIGludCBkaXIpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCQlkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcik7CitleHRlcm4gdm9pZCBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJCSAgIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQkJICAgICAgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQkJCSBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCSAgICBpbnQgZGlyKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCSAgICAgICBpbnQgZGlyKTsKK2V4dGVybiBpbnQgc3dpb3RsYl9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgIGludCBuZW50cywgaW50IGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBzd2lvdGxiX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOworZXh0ZXJuIGludCBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCisJCQkJICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKK2V4dGVybiBpbnQgc3dpb3RsYl9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7CitleHRlcm4gdm9pZCBzd2lvdGxiX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgc3dpb3RsYl9mb3JjZTsKKworI2lmZGVmIENPTkZJR19TV0lPVExCCitleHRlcm4gaW50IHN3aW90bGI7CitleHRlcm4gdm9pZCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgc3dpb3RsYiAwCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBBU01fSUE2NF9fU1dJT1RMQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3luY19iaXRvcHMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeW5jX2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2MxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3luY19iaXRvcHMuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9BU01fSUE2NF9TWU5DX0JJVE9QU19ICisjZGVmaW5lIF9BU01fSUE2NF9TWU5DX0JJVE9QU19ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKgorICogQmFzZWQgb24gc3luY2hfYml0b3BzLmggd2hpY2ggRGFuIE1hZ2VuaGFpbWVyIHdyb3RlLgorICoKKyAqIGJpdCBvcGVyYXRpb25zIHdoaWNoIHByb3ZpZGUgZ3VhcmFudGVlZCBzdHJvbmcgc3luY2hyb25pc2F0aW9uCisgKiB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCBYZW4gb3Igb3RoZXIgZ3Vlc3QgT1NlcyBydW5uaW5nIG9uIG90aGVyIENQVXMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHN5bmNfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJc2V0X2JpdChuciwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJY2xlYXJfYml0KG5yLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5bmNfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJY2hhbmdlX2JpdChuciwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN5bmNfdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN5bmNfdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX2NoYW5nZV9iaXQobnIsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzeW5jX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gdGVzdF9iaXQobnIsIGFkZHIpOworfQorCisjZGVmaW5lIHN5bmNfY21weGNoZyhwdHIsIG9sZCwgbmV3KQkJCQlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpY21weGNoZ19hY3EoKHB0ciksIChvbGQpLCAobmV3KSkpCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU1lOQ19CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3NThhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBBY2Nlc3MgdG8gdXNlciBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEludGVsIENvcnAuICBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKKyAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLgorICoKKyAqIFNlZSBhc20tZ2VuZXJpYy9zeXNjYWxsLmggZm9yIGRlc2NyaXB0aW9ucyBvZiB3aGF0IHdlIG11c3QgZG8gaGVyZS4KKyAqLworCisjaWZuZGVmIF9BU01fU1lTQ0FMTF9ICisjZGVmaW5lIF9BU01fU1lTQ0FMTF9ICTEKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoKGxvbmcpcmVncy0+Y3JfaWZzIDwgMCkgLyogTm90IGEgc3lzY2FsbCAqLworCQlyZXR1cm4gLTE7CisKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCisJaWYgKElTX0lBMzJfUFJPQ0VTUyhyZWdzKSkKKwkJcmV0dXJuIHJlZ3MtPnIxOworI2VuZGlmCisKKwlyZXR1cm4gcmVncy0+cjE1OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9yb2xsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKwlpZiAoSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKQorCQlyZWdzLT5yOCA9IHJlZ3MtPnIxOworI2VuZGlmCisKKwkvKiBkbyBub3RoaW5nICovCit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9lcnJvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCisJaWYgKElTX0lBMzJfUFJPQ0VTUyhyZWdzKSkKKwkJcmV0dXJuIHJlZ3MtPnI4OworI2VuZGlmCisKKwlyZXR1cm4gcmVncy0+cjEwID09IC0xID8gcmVncy0+cjg6MDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+cjg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9yZXR1cm5fdmFsdWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICBpbnQgZXJyb3IsIGxvbmcgdmFsKQoreworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKwlpZiAoSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKSB7CisJCXJlZ3MtPnI4ID0gKGxvbmcpIGVycm9yID8gZXJyb3IgOiB2YWw7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKworCWlmIChlcnJvcikgeworCQkvKiBlcnJvciA8IDAsIGJ1dCBpYTY0IHVzZXMgPiAwIHJldHVybiB2YWx1ZSAqLworCQlyZWdzLT5yOCA9IC1lcnJvcjsKKwkJcmVncy0+cjEwID0gLTE7CisJfSBlbHNlIHsKKwkJcmVncy0+cjggPSB2YWw7CisJCXJlZ3MtPnIxMCA9IDA7CisJfQorfQorCitleHRlcm4gdm9pZCBpYTY0X3N5c2NhbGxfZ2V0X3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJdW5zaWduZWQgbG9uZyAqYXJncywgaW50IHJ3KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSB1bnNpZ25lZCBsb25nICphcmdzKQoreworCUJVR19PTihpICsgbiA+IDYpOworCisjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAorCWlmIChJU19JQTMyX1BST0NFU1MocmVncykpIHsKKwkJc3dpdGNoIChpICsgbikgeworCQljYXNlIDY6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+cjEzOworCQljYXNlIDU6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+cjE1OworCQljYXNlIDQ6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+cjE0OworCQljYXNlIDM6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+cjEwOworCQljYXNlIDI6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+cjk7CisJCWNhc2UgMToKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCSphcmdzKysgPSByZWdzLT5yMTE7CisJCWNhc2UgMDoKKwkJCWlmICghbi0tKSBicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWE2NF9zeXNjYWxsX2dldF9zZXRfYXJndW1lbnRzKHRhc2ssIHJlZ3MsIGksIG4sIGFyZ3MsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCQkJCQkgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwlCVUdfT04oaSArIG4gPiA2KTsKKworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKwlpZiAoSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKSB7CisJCXN3aXRjaCAoaSArIG4pIHsKKwkJY2FzZSA2OgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+cjEzID0gKmFyZ3MrKzsKKwkJY2FzZSA1OgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+cjE1ID0gKmFyZ3MrKzsKKwkJY2FzZSA0OgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+cjE0ID0gKmFyZ3MrKzsKKwkJY2FzZSAzOgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+cjEwID0gKmFyZ3MrKzsKKwkJY2FzZSAyOgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+cjkgPSAqYXJncysrOworCQljYXNlIDE6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQlyZWdzLT5yMTEgPSAqYXJncysrOworCQljYXNlIDA6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCX0KKworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWE2NF9zeXNjYWxsX2dldF9zZXRfYXJndW1lbnRzKHRhc2ssIHJlZ3MsIGksIG4sIGFyZ3MsIDEpOworfQorI2VuZGlmCS8qIF9BU01fU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDdjNjBmY2QuLmFlNjkyMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04Nyw5ICs4Nyw2IEBACiAjZGVmaW5lIGFsbG9jX3Rhc2tfc3RydWN0KCkJKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLCBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUikpCiAjZGVmaW5lIGZyZWVfdGFza19zdHJ1Y3QodHNrKQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSAodHNrKSwgS0VSTkVMX1NUQUNLX1NJWkVfT1JERVIpCiAKLSNkZWZpbmUgdHNrX3NldF9ub3RpZnlfcmVzdW1lKHRzaykgXAotCXNldF90aV90aHJlYWRfZmxhZyh0YXNrX3RocmVhZF9pbmZvKHRzayksIFRJRl9OT1RJRllfUkVTVU1FKQotZXh0ZXJuIHZvaWQgdHNrX2NsZWFyX25vdGlmeV9yZXN1bWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogI2VuZGlmIC8qICFfX0FTU0VNQkxZICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aW1leC5oCmluZGV4IDA1YTZiYWYuLjRlMDNjZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC0zOSw0ICszOSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorZXh0ZXJuIHZvaWQgaWE2NF9jcHVfbG9jYWxfdGljayAodm9pZCk7CisKICNlbmRpZiAvKiBfQVNNX0lBNjRfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGQ1MzU4MzMuLmY3OTE1NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMzNyw2ICszMzcsNyBAQAogIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCiAjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKICMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICMgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9ldmVudHMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyNDg3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9ldmVudHMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisjaWZuZGVmIF9BU01fSUE2NF9YRU5fRVZFTlRTX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1hFTl9FVkVOVFNfSAorCitlbnVtIGlwaV92ZWN0b3IgeworCVhFTl9SRVNDSEVEVUxFX1ZFQ1RPUiwKKwlYRU5fSVBJX1ZFQ1RPUiwKKwlYRU5fQ01DUF9WRUNUT1IsCisJWEVOX0NQRVBfVkVDVE9SLAorCisJWEVOX05SX0lQSVMsCit9OworCitzdGF0aWMgaW5saW5lIGludCB4ZW5faXJxc19kaXNhYmxlZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gIShpYTY0X3BzcihyZWdzKS0+aSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fZG9fSVJRKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKKwlvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKwlpcnFfZW50ZXIoKTsKKwlfX2RvX0lSUShpcnEpOworCWlycV9leGl0KCk7CisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKK30KKyNkZWZpbmUgaXJxX2N0eF9pbml0KGNwdSkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1hFTl9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9ncmFudF90YWJsZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9ncmFudF90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWZhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2dyYW50X3RhYmxlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9ncmFudF90YWJsZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfWEVOX0dSQU5UX1RBQkxFX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1hFTl9HUkFOVF9UQUJMRV9ICisKK3N0cnVjdCB2bV9zdHJ1Y3QgKnhlbl9hbGxvY192bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cit2b2lkIHhlbl9mcmVlX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSk7CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfWEVOX0dSQU5UX1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZmM2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCkBAIC0wLDAgKzEsMjY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBoeXBlcmNhbGwuaAorICoKKyAqIExpbnV4LXNwZWNpZmljIGh5cGVydmlzb3IgaGFuZGxpbmcuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1hFTl9IWVBFUkNBTExfSAorI2RlZmluZSBfQVNNX0lBNjRfWEVOX0hZUEVSQ0FMTF9ICisKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvcGh5c2Rldi5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20veGVuL3hjb21faGNhbGwuaD4KK3N0cnVjdCB4ZW5jb21tX2hhbmRsZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faHlwZXJjYWxsKHVuc2lnbmVkIGxvbmcgYTEsIHVuc2lnbmVkIGxvbmcgYTIsCisJCQkJIHVuc2lnbmVkIGxvbmcgYTMsIHVuc2lnbmVkIGxvbmcgYTQsCisJCQkJIHVuc2lnbmVkIGxvbmcgYTUsIHVuc2lnbmVkIGxvbmcgY21kKTsKKworLyoKKyAqIEFzc2VtYmxlciBzdHVicyBmb3IgaHlwZXItY2FsbHMuCisgKi8KKworI2RlZmluZSBfaHlwZXJjYWxsMCh0eXBlLCBuYW1lKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fcmVzOwkJCQkJCVwKKwlfX3JlcyA9IF9faHlwZXJjYWxsKDAsIDAsIDAsIDAsIDAsIF9fSFlQRVJWSVNPUl8jI25hbWUpO1wKKwkodHlwZSlfX3JlczsJCQkJCQlcCit9KQorCisjZGVmaW5lIF9oeXBlcmNhbGwxKHR5cGUsIG5hbWUsIGExKQkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19yZXM7CQkJCQkJXAorCV9fcmVzID0gX19oeXBlcmNhbGwoKHVuc2lnbmVkIGxvbmcpYTEsCQkJXAorCQkJICAgICAwLCAwLCAwLCAwLCBfX0hZUEVSVklTT1JfIyNuYW1lKTsJXAorCSh0eXBlKV9fcmVzOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDIodHlwZSwgbmFtZSwgYTEsIGEyKQkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19yZXM7CQkJCQkJXAorCV9fcmVzID0gX19oeXBlcmNhbGwoKHVuc2lnbmVkIGxvbmcpYTEsCQkJXAorCQkJICAgICh1bnNpZ25lZCBsb25nKWEyLAkJCVwKKwkJCSAgICAwLCAwLCAwLCBfX0hZUEVSVklTT1JfIyNuYW1lKTsJXAorCSh0eXBlKV9fcmVzOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDModHlwZSwgbmFtZSwgYTEsIGEyLCBhMykJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19yZXM7CQkJCQkJXAorCV9fcmVzID0gX19oeXBlcmNhbGwoKHVuc2lnbmVkIGxvbmcpYTEsCQkJXAorCQkJICAgICh1bnNpZ25lZCBsb25nKWEyLAkJCVwKKwkJCSAgICAodW5zaWduZWQgbG9uZylhMywJCQlcCisJCQkgICAgMCwgMCwgX19IWVBFUlZJU09SXyMjbmFtZSk7CQlcCisJKHR5cGUpX19yZXM7CQkJCQkJXAorfSkKKworI2RlZmluZSBfaHlwZXJjYWxsNCh0eXBlLCBuYW1lLCBhMSwgYTIsIGEzLCBhNCkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19yZXM7CQkJCQkJXAorCV9fcmVzID0gX19oeXBlcmNhbGwoKHVuc2lnbmVkIGxvbmcpYTEsCQkJXAorCQkJICAgICh1bnNpZ25lZCBsb25nKWEyLAkJCVwKKwkJCSAgICAodW5zaWduZWQgbG9uZylhMywJCQlcCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpYTQsCQkJXAorCQkJICAgIDAsIF9fSFlQRVJWSVNPUl8jI25hbWUpOwkJXAorCSh0eXBlKV9fcmVzOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDUodHlwZSwgbmFtZSwgYTEsIGEyLCBhMywgYTQsIGE1KQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fcmVzOwkJCQkJCVwKKwlfX3JlcyA9IF9faHlwZXJjYWxsKCh1bnNpZ25lZCBsb25nKWExLAkJCVwKKwkJCSAgICAodW5zaWduZWQgbG9uZylhMiwJCQlcCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpYTMsCQkJXAorCQkJICAgICh1bnNpZ25lZCBsb25nKWE0LAkJCVwKKwkJCSAgICAodW5zaWduZWQgbG9uZylhNSwJCQlcCisJCQkgICAgX19IWVBFUlZJU09SXyMjbmFtZSk7CQlcCisJKHR5cGUpX19yZXM7CQkJCQkJXAorfSkKKworCitzdGF0aWMgaW5saW5lIGludAoreGVuY29tbV9hcmNoX2h5cGVyY2FsbF9zY2hlZF9vcChpbnQgY21kLCBzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBzY2hlZF9vcF9uZXcsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBsb25nCitIWVBFUlZJU09SX3NldF90aW1lcl9vcCh1NjQgdGltZW91dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfaGkgPSAodW5zaWduZWQgbG9uZykodGltZW91dCA+PiAzMik7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2xvID0gKHVuc2lnbmVkIGxvbmcpdGltZW91dDsKKwlyZXR1cm4gX2h5cGVyY2FsbDIobG9uZywgc2V0X3RpbWVyX29wLCB0aW1lb3V0X2xvLCB0aW1lb3V0X2hpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hlbmNvbW1fYXJjaF9oeXBlcmNhbGxfbXVsdGljYWxsKHN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqY2FsbF9saXN0LAorCQkJCSBpbnQgbnJfY2FsbHMpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgbXVsdGljYWxsLCBjYWxsX2xpc3QsIG5yX2NhbGxzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hlbmNvbW1fYXJjaF9oeXBlcmNhbGxfbWVtb3J5X29wKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIG1lbW9yeV9vcCwgY21kLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGludAoreGVuY29tbV9hcmNoX2h5cGVyY2FsbF9ldmVudF9jaGFubmVsX29wKGludCBjbWQsIHN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIGV2ZW50X2NoYW5uZWxfb3AsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hlbmNvbW1fYXJjaF9oeXBlcmNhbGxfeGVuX3ZlcnNpb24oaW50IGNtZCwgc3RydWN0IHhlbmNvbW1faGFuZGxlICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgeGVuX3ZlcnNpb24sIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hlbmNvbW1fYXJjaF9oeXBlcmNhbGxfY29uc29sZV9pbyhpbnQgY21kLCBpbnQgY291bnQsCisJCQkJICBzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKnN0cikKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBjb25zb2xlX2lvLCBjbWQsIGNvdW50LCBzdHIpOworfQorCitzdGF0aWMgaW5saW5lIGludAoreGVuY29tbV9hcmNoX2h5cGVyY2FsbF9waHlzZGV2X29wKGludCBjbWQsIHN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHBoeXNkZXZfb3AsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hlbmNvbW1fYXJjaF9oeXBlcmNhbGxfZ3JhbnRfdGFibGVfb3AodW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICAgICBzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKnVvcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwzKGludCwgZ3JhbnRfdGFibGVfb3AsIGNtZCwgdW9wLCBjb3VudCk7Cit9CisKK2ludCBIWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnVvcCwgdW5zaWduZWQgaW50IGNvdW50KTsKKworZXh0ZXJuIGludCB4ZW5jb21tX2FyY2hfaHlwZXJjYWxsX3N1c3BlbmQoc3RydWN0IHhlbmNvbW1faGFuZGxlICphcmcpOworCitzdGF0aWMgaW5saW5lIGludAoreGVuY29tbV9hcmNoX2h5cGVyY2FsbF9jYWxsYmFja19vcChpbnQgY21kLCBzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBjYWxsYmFja19vcCwgY21kLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcKK3hlbmNvbW1fYXJjaF9oeXBlcmNhbGxfdmNwdV9vcChpbnQgY21kLCBpbnQgY3B1LCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwzKGxvbmcsIHZjcHVfb3AsIGNtZCwgY3B1LCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9waHlzZGV2X29wKGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUEhZU0RFVk9QX2VvaToKKwkJcmV0dXJuIF9oeXBlcmNhbGwxKGludCwgaWE2NF9mYXN0X2VvaSwKKwkJCQkgICAoKHN0cnVjdCBwaHlzZGV2X2VvaSAqKWFyZyktPmlycSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHhlbmNvbW1faHlwZXJjYWxsX3BoeXNkZXZfb3AoY21kLCBhcmcpOworCX0KK30KKworc3RhdGljIGlubGluZSBsb25nCit4ZW5jb21tX2FyY2hfaHlwZXJjYWxsX29wdF9mZWF0dXJlKHN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMShsb25nLCBvcHRfZmVhdHVyZSwgYXJnKTsKK30KKworLyogZm9yIGJhbGxvb24gZHJpdmVyICovCisjZGVmaW5lIEhZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmcodmEsIG5ld192YWwsIGZsYWdzKSAoMCkKKworLyogVXNlIHhlbmNvbW0gdG8gZG8gaHlwZXJjYWxscy4gICovCisjZGVmaW5lIEhZUEVSVklTT1Jfc2NoZWRfb3AgeGVuY29tbV9oeXBlcmNhbGxfc2NoZWRfb3AKKyNkZWZpbmUgSFlQRVJWSVNPUl9ldmVudF9jaGFubmVsX29wIHhlbmNvbW1faHlwZXJjYWxsX2V2ZW50X2NoYW5uZWxfb3AKKyNkZWZpbmUgSFlQRVJWSVNPUl9jYWxsYmFja19vcCB4ZW5jb21tX2h5cGVyY2FsbF9jYWxsYmFja19vcAorI2RlZmluZSBIWVBFUlZJU09SX211bHRpY2FsbCB4ZW5jb21tX2h5cGVyY2FsbF9tdWx0aWNhbGwKKyNkZWZpbmUgSFlQRVJWSVNPUl94ZW5fdmVyc2lvbiB4ZW5jb21tX2h5cGVyY2FsbF94ZW5fdmVyc2lvbgorI2RlZmluZSBIWVBFUlZJU09SX2NvbnNvbGVfaW8geGVuY29tbV9oeXBlcmNhbGxfY29uc29sZV9pbworI2RlZmluZSBIWVBFUlZJU09SX21lbW9yeV9vcCB4ZW5jb21tX2h5cGVyY2FsbF9tZW1vcnlfb3AKKyNkZWZpbmUgSFlQRVJWSVNPUl9zdXNwZW5kIHhlbmNvbW1faHlwZXJjYWxsX3N1c3BlbmQKKyNkZWZpbmUgSFlQRVJWSVNPUl92Y3B1X29wIHhlbmNvbW1faHlwZXJjYWxsX3ZjcHVfb3AKKyNkZWZpbmUgSFlQRVJWSVNPUl9vcHRfZmVhdHVyZSB4ZW5jb21tX2h5cGVyY2FsbF9vcHRfZmVhdHVyZQorCisvKiB0byBjb21waWxlIGdudHRhYl9jb3B5X2dyYW50X3BhZ2UoKSBpbiBkcml2ZXJzL3hlbi9jb3JlL2dudHRhYi5jICovCisjZGVmaW5lIEhZUEVSVklTT1JfbW11X3VwZGF0ZShyZXEsIGNvdW50LCBzdWNjZXNzX2NvdW50LCBkb21pZCkgKHsgQlVHKCk7IDA7IH0pCisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3NodXRkb3duKAorCXVuc2lnbmVkIGludCByZWFzb24pCit7CisJc3RydWN0IHNjaGVkX3NodXRkb3duIHNjaGVkX3NodXRkb3duID0geworCQkucmVhc29uID0gcmVhc29uCisJfTsKKworCWludCByYyA9IEhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF9zaHV0ZG93biwgJnNjaGVkX3NodXRkb3duKTsKKworCXJldHVybiByYzsKK30KKworLyogZm9yIG5ldGZyb250LmMsIG5ldGJhY2suYyAqLworI2RlZmluZSBNVUxUSV9VVk1GTEFHU19JTkRFWCAwIC8qIFhYWCBhbnkgdmFsdWUgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV91cGRhdGVfdmFfbWFwcGluZygKKwlzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5ICptY2wsIHVuc2lnbmVkIGxvbmcgdmEsCisJcHRlX3QgbmV3X3ZhbCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwltY2wtPm9wID0gX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nOworCW1jbC0+cmVzdWx0ID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV9ncmFudF90YWJsZV9vcChzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5ICptY2wsIHVuc2lnbmVkIGludCBjbWQsCisJdm9pZCAqdW9wLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcDsKKwltY2wtPmFyZ3NbMF0gPSBjbWQ7CisJbWNsLT5hcmdzWzFdID0gKHVuc2lnbmVkIGxvbmcpdW9wOworCW1jbC0+YXJnc1syXSA9IGNvdW50OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK01VTFRJX21tdV91cGRhdGUoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCBzdHJ1Y3QgbW11X3VwZGF0ZSAqcmVxLAorCQkgaW50IGNvdW50LCBpbnQgKnN1Y2Nlc3NfY291bnQsIGRvbWlkX3QgZG9taWQpCit7CisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlOworCW1jbC0+YXJnc1swXSA9ICh1bnNpZ25lZCBsb25nKXJlcTsKKwltY2wtPmFyZ3NbMV0gPSBjb3VudDsKKwltY2wtPmFyZ3NbMl0gPSAodW5zaWduZWQgbG9uZylzdWNjZXNzX2NvdW50OworCW1jbC0+YXJnc1szXSA9IGRvbWlkOworfQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1hFTl9IWVBFUkNBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9oeXBlcnZpc29yLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2h5cGVydmlzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTgwNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9oeXBlcnZpc29yLmgKQEAgLTAsMCArMSw4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaHlwZXJ2aXNvci5oCisgKgorICogTGludXgtc3BlY2lmaWMgaHlwZXJ2aXNvciBoYW5kbGluZy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwgSyBBIEZyYXNlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IG9yLCB3aGVuIGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4IGtlcm5lbCBvciBpbmNvcnBvcmF0ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUgcGFja2FnZXMsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc291cmNlIGZpbGUgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwKKyAqIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfWEVOX0hZUEVSVklTT1JfSAorI2RlZmluZSBfQVNNX0lBNjRfWEVOX0hZUEVSVklTT1JfSAorCisjaWZkZWYgQ09ORklHX1hFTgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92ZXJzaW9uLmg+CS8qIHRvIGNvbXBpbGUgZmVhdHVyZS5jICovCisjaW5jbHVkZSA8eGVuL2ZlYXR1cmVzLmg+CQkvKiB0byBjb21pcGxlIHhlbi1uZXRmcm9udC5jICovCisjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KKworLyogeGVuX2RvbWFpbl90eXBlIGlzIHNldCBiZWZvcmUgZXhlY3V0aW5nIGFueSBDIGNvZGUgYnkgZWFybHlfeGVuX3NldHVwICovCitlbnVtIHhlbl9kb21haW5fdHlwZSB7CisJWEVOX05BVElWRSwKKwlYRU5fUFZfRE9NQUlOLAorCVhFTl9IVk1fRE9NQUlOLAorfTsKKworZXh0ZXJuIGVudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZTsKKworI2RlZmluZSB4ZW5fZG9tYWluKCkJCSh4ZW5fZG9tYWluX3R5cGUgIT0gWEVOX05BVElWRSkKKyNkZWZpbmUgeGVuX3B2X2RvbWFpbigpCQkoeGVuX2RvbWFpbl90eXBlID09IFhFTl9QVl9ET01BSU4pCisjZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpCSh4ZW5fcHZfZG9tYWluKCkgJiYgXAorCQkJCSAoeGVuX3N0YXJ0X2luZm8tPmZsYWdzICYgU0lGX0lOSVRET01BSU4pKQorI2RlZmluZSB4ZW5faHZtX2RvbWFpbigpCSh4ZW5fZG9tYWluX3R5cGUgPT0gWEVOX0hWTV9ET01BSU4pCisKKy8qIGRlcHJlY2F0ZWQuIHJlbW92ZSB0aGlzICovCisjZGVmaW5lIGlzX3J1bm5pbmdfb25feGVuKCkJKHhlbl9kb21haW5fdHlwZSA9PSBYRU5fUFZfRE9NQUlOKQorCitleHRlcm4gc3RydWN0IHNoYXJlZF9pbmZvICpIWVBFUlZJU09SX3NoYXJlZF9pbmZvOworZXh0ZXJuIHN0cnVjdCBzdGFydF9pbmZvICp4ZW5fc3RhcnRfaW5mbzsKKwordm9pZCBfX2luaXQgeGVuX3NldHVwX3ZjcHVfaW5mb19wbGFjZW1lbnQodm9pZCk7Cit2b2lkIGZvcmNlX2V2dGNobl9jYWxsYmFjayh2b2lkKTsKKworLyogZm9yIGRyaXZlcnMveGVuL2JhbGxvb24vYmFsbG9vbi5jICovCisjaWZkZWYgQ09ORklHX1hFTl9TQ1JVQl9QQUdFUworI2RlZmluZSBzY3J1Yl9wYWdlcyhfcCwgX24pIG1lbXNldCgodm9pZCAqKShfcCksIDAsIChfbikgPDwgUEFHRV9TSElGVCkKKyNlbHNlCisjZGVmaW5lIHNjcnViX3BhZ2VzKF9wLCBfbikgKCh2b2lkKTApCisjZW5kaWYKKworLyogRm9yIHNldHVwX2FyY2goKSBpbiBhcmNoL2lhNjQva2VybmVsL3NldHVwLmMgKi8KK3ZvaWQgeGVuX2lhNjRfZW5hYmxlX29wdF9mZWF0dXJlKHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfWEVOICovCisKKyNkZWZpbmUgeGVuX2RvbWFpbigpCQkoMCkKKyNkZWZpbmUgeGVuX3B2X2RvbWFpbigpCQkoMCkKKyNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKDApCisjZGVmaW5lIHhlbl9odm1fZG9tYWluKCkJKDApCisjZGVmaW5lIGlzX3J1bm5pbmdfb25feGVuKCkJKDApCS8qIGRlcHJlY2F0ZWQuIHJlbW92ZSB0aGlzICovCisjZW5kaWYKKworI2RlZmluZSBpc19pbml0aWFsX3hlbmRvbWFpbigpCSgwKQkvKiBkZXByZWNhdGVkLiByZW1vdmUgdGhpcyAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1hFTl9IWVBFUlZJU09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW5zdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljMmFlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW5zdC5oCkBAIC0wLDAgKzEsNDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2luc3QuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxhc20veGVuL3ByaXZvcC5oPgorCisjZGVmaW5lIGlhNjRfaXZ0CQkJCXhlbl9pdnQKKyNkZWZpbmUgRE9fU0FWRV9NSU4JCQkJWEVOX0RPX1NBVkVfTUlOCisKKyNkZWZpbmUgX19wYXJhdmlydF9zd2l0Y2hfdG8JCQl4ZW5fc3dpdGNoX3RvCisjZGVmaW5lIF9fcGFyYXZpcnRfbGVhdmVfc3lzY2FsbAkJeGVuX2xlYXZlX3N5c2NhbGwKKyNkZWZpbmUgX19wYXJhdmlydF93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsCXhlbl93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsCisjZGVmaW5lIF9fcGFyYXZpcnRfbGVhdmVfa2VybmVsCQkJeGVuX2xlYXZlX2tlcm5lbAorI2RlZmluZSBfX3BhcmF2aXJ0X3BlbmRpbmdfc3lzY2FsbF9lbmQJCXhlbl93b3JrX3BlbmRpbmdfc3lzY2FsbF9lbmQKKyNkZWZpbmUgX19wYXJhdmlydF93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsX3RhcmdldCBcCisJCQkJCQl4ZW5fd29ya19wcm9jZXNzZWRfc3lzY2FsbAorCisjZGVmaW5lIE1PVl9GUk9NX0lGQShyZWcpCVwKKwltb3ZsIHJlZyA9IFhTSV9JRkE7CVwKKwk7OwkJCVwKKwlsZDggcmVnID0gW3JlZ10KKworI2RlZmluZSBNT1ZfRlJPTV9JVElSKHJlZykJXAorCW1vdmwgcmVnID0gWFNJX0lUSVI7CVwKKwk7OwkJCVwKKwlsZDggcmVnID0gW3JlZ10KKworI2RlZmluZSBNT1ZfRlJPTV9JU1IocmVnKQlcCisJbW92bCByZWcgPSBYU0lfSVNSOwlcCisJOzsJCQlcCisJbGQ4IHJlZyA9IFtyZWddCisKKyNkZWZpbmUgTU9WX0ZST01fSUhBKHJlZykJXAorCW1vdmwgcmVnID0gWFNJX0lIQTsJXAorCTs7CQkJXAorCWxkOCByZWcgPSBbcmVnXQorCisjZGVmaW5lIE1PVl9GUk9NX0lQU1IocHJlZCwgcmVnKQlcCisocHJlZCkJbW92bCByZWcgPSBYU0lfSVBTUjsJCVwKKwk7OwkJCQlcCisocHJlZCkJbGQ4IHJlZyA9IFtyZWddCisKKyNkZWZpbmUgTU9WX0ZST01fSUlNKHJlZykJXAorCW1vdmwgcmVnID0gWFNJX0lJTTsJXAorCTs7CQkJXAorCWxkOCByZWcgPSBbcmVnXQorCisjZGVmaW5lIE1PVl9GUk9NX0lJUChyZWcpCVwKKwltb3ZsIHJlZyA9IFhTSV9JSVA7CVwKKwk7OwkJCVwKKwlsZDggcmVnID0gW3JlZ10KKworLm1hY3JvIF9fTU9WX0ZST01fSVZSIHJlZywgY2xvYgorCS5pZmMgIlxyZWciLCAicjgiCisJCVhFTl9IWVBFUl9HRVRfSVZSCisJCS5leGl0bQorCS5lbmRpZgorCS5pZmMgIlxjbG9iIiwgInI4IgorCQlYRU5fSFlQRVJfR0VUX0lWUgorCQk7OworCQltb3YgXHJlZyA9IHI4CisJCS5leGl0bQorCS5lbmRpZgorCisJbW92IFxjbG9iID0gcjgKKwk7OworCVhFTl9IWVBFUl9HRVRfSVZSCisJOzsKKwltb3YgXHJlZyA9IHI4CisJOzsKKwltb3YgcjggPSBcY2xvYgorLmVuZG0KKyNkZWZpbmUgTU9WX0ZST01fSVZSKHJlZywgY2xvYikJX19NT1ZfRlJPTV9JVlIgcmVnLCBjbG9iCisKKy5tYWNybyBfX01PVl9GUk9NX1BTUiBwcmVkLCByZWcsIGNsb2IKKwkuaWZjICJccmVnIiwgInI4IgorCQkoXHByZWQpCVhFTl9IWVBFUl9HRVRfUFNSOworCQkuZXhpdG0KKwkuZW5kaWYKKwkuaWZjICJcY2xvYiIsICJyOCIKKwkJKFxwcmVkKQlYRU5fSFlQRVJfR0VUX1BTUgorCQk7OworCQkoXHByZWQpCW1vdiBccmVnID0gcjgKKwkJLmV4aXRtCisJLmVuZGlmCisKKwkoXHByZWQpCW1vdiBcY2xvYiA9IHI4CisJKFxwcmVkKQlYRU5fSFlQRVJfR0VUX1BTUgorCTs7CisJKFxwcmVkKQltb3YgXHJlZyA9IHI4CisJKFxwcmVkKQltb3YgcjggPSBcY2xvYgorLmVuZG0KKyNkZWZpbmUgTU9WX0ZST01fUFNSKHByZWQsIHJlZywgY2xvYikJX19NT1ZfRlJPTV9QU1IgcHJlZCwgcmVnLCBjbG9iCisKKworI2RlZmluZSBNT1ZfVE9fSUZBKHJlZywgY2xvYikJXAorCW1vdmwgY2xvYiA9IFhTSV9JRkE7CVwKKwk7OwkJCVwKKwlzdDggW2Nsb2JdID0gcmVnCVwKKworI2RlZmluZSBNT1ZfVE9fSVRJUihwcmVkLCByZWcsIGNsb2IpCVwKKyhwcmVkKQltb3ZsIGNsb2IgPSBYU0lfSVRJUjsJCVwKKwk7OwkJCQlcCisocHJlZCkJc3Q4IFtjbG9iXSA9IHJlZworCisjZGVmaW5lIE1PVl9UT19JSEEocHJlZCwgcmVnLCBjbG9iKQlcCisocHJlZCkJbW92bCBjbG9iID0gWFNJX0lIQTsJCVwKKwk7OwkJCQlcCisocHJlZCkJc3Q4IFtjbG9iXSA9IHJlZworCisjZGVmaW5lIE1PVl9UT19JUFNSKHByZWQsIHJlZywgY2xvYikJXAorKHByZWQpCW1vdmwgY2xvYiA9IFhTSV9JUFNSOwkJXAorCTs7CQkJCVwKKyhwcmVkKQlzdDggW2Nsb2JdID0gcmVnOwkJXAorCTs7CisKKyNkZWZpbmUgTU9WX1RPX0lGUyhwcmVkLCByZWcsIGNsb2IpCVwKKyhwcmVkKQltb3ZsIGNsb2IgPSBYU0lfSUZTOwkJXAorCTs7CQkJCVwKKyhwcmVkKQlzdDggW2Nsb2JdID0gcmVnOwkJXAorCTs7CisKKyNkZWZpbmUgTU9WX1RPX0lJUChyZWcsIGNsb2IpCVwKKwltb3ZsIGNsb2IgPSBYU0lfSUlQOwlcCisJOzsJCQlcCisJc3Q4IFtjbG9iXSA9IHJlZworCisubWFjcm8gX19fX01PVl9UT19LUiBrciwgcmVnLCBjbG9iMCwgY2xvYjEKKwkuaWZjICJcY2xvYjAiLCAicjkiCisJCS5lcnJvciAiY2xvYjAgXGNsb2IwIG11c3Qgbm90IGJlIHI5IgorCS5lbmRpZgorCS5pZmMgIlxjbG9iMSIsICJyOCIKKwkJLmVycm9yICJjbG9iMSBcY2xvYjEgbXVzdCBub3QgYmUgcjgiCisJLmVuZGlmCisKKwkuaWZuYyAiXHJlZyIsICJyOSIKKwkJLmlmbmMgIlxjbG9iMSIsICJyOSIKKwkJCW1vdiBcY2xvYjEgPSByOQorCQkuZW5kaWYKKwkJbW92IHI5ID0gXHJlZworCS5lbmRpZgorCS5pZm5jICJcY2xvYjAiLCAicjgiCisJCW1vdiBcY2xvYjAgPSByOAorCS5lbmRpZgorCW1vdiByOCA9IFxrcgorCTs7CisJWEVOX0hZUEVSX1NFVF9LUgorCisJLmlmbmMgIlxyZWciLCAicjkiCisJCS5pZm5jICJcY2xvYjEiLCAicjkiCisJCQltb3YgcjkgPSBcY2xvYjEKKwkJLmVuZGlmCisJLmVuZGlmCisJLmlmbmMgIlxjbG9iMCIsICJyOCIKKwkJbW92IHI4ID0gXGNsb2IwCisJLmVuZGlmCisuZW5kbQorCisubWFjcm8gX19NT1ZfVE9fS1Iga3IsIHJlZywgY2xvYjAsIGNsb2IxCisJLmlmYyAiXGNsb2IwIiwgInI5IgorCQlfX19fTU9WX1RPX0tSIFxrciwgXHJlZywgXGNsb2IxLCBcY2xvYjAKKwkJLmV4aXRtCisJLmVuZGlmCisJLmlmYyAiXGNsb2IxIiwgInI4IgorCQlfX19fTU9WX1RPX0tSIFxrciwgXHJlZywgXGNsb2IxLCBcY2xvYjAKKwkJLmV4aXRtCisJLmVuZGlmCisKKwlfX19fTU9WX1RPX0tSIFxrciwgXHJlZywgXGNsb2IwLCBcY2xvYjEKKy5lbmRtCisKKyNkZWZpbmUgTU9WX1RPX0tSKGtyLCByZWcsIGNsb2IwLCBjbG9iMSkgXAorCV9fTU9WX1RPX0tSIElBNjRfS1JfICMjIGtyLCByZWcsIGNsb2IwLCBjbG9iMQorCisKKy5tYWNybyBfX0lUQ19JIHByZWQsIHJlZywgY2xvYgorCS5pZmMgIlxyZWciLCAicjgiCisJCShccHJlZCkJWEVOX0hZUEVSX0lUQ19JCisJCS5leGl0bQorCS5lbmRpZgorCS5pZmMgIlxjbG9iIiwgInI4IgorCQkoXHByZWQpCW1vdiByOCA9IFxyZWcKKwkJOzsKKwkJKFxwcmVkKQlYRU5fSFlQRVJfSVRDX0kKKwkJLmV4aXRtCisJLmVuZGlmCisKKwkoXHByZWQpCW1vdiBcY2xvYiA9IHI4CisJKFxwcmVkKQltb3YgcjggPSBccmVnCisJOzsKKwkoXHByZWQpCVhFTl9IWVBFUl9JVENfSQorCTs7CisJKFxwcmVkKQltb3YgcjggPSBcY2xvYgorCTs7CisuZW5kbQorI2RlZmluZSBJVENfSShwcmVkLCByZWcsIGNsb2IpCV9fSVRDX0kgcHJlZCwgcmVnLCBjbG9iCisKKy5tYWNybyBfX0lUQ19EIHByZWQsIHJlZywgY2xvYgorCS5pZmMgIlxyZWciLCAicjgiCisJCShccHJlZCkJWEVOX0hZUEVSX0lUQ19ECisJCTs7CisJCS5leGl0bQorCS5lbmRpZgorCS5pZmMgIlxjbG9iIiwgInI4IgorCQkoXHByZWQpCW1vdiByOCA9IFxyZWcKKwkJOzsKKwkJKFxwcmVkKQlYRU5fSFlQRVJfSVRDX0QKKwkJOzsKKwkJLmV4aXRtCisJLmVuZGlmCisKKwkoXHByZWQpCW1vdiBcY2xvYiA9IHI4CisJKFxwcmVkKQltb3YgcjggPSBccmVnCisJOzsKKwkoXHByZWQpCVhFTl9IWVBFUl9JVENfRAorCTs7CisJKFxwcmVkKQltb3YgcjggPSBcY2xvYgorCTs7CisuZW5kbQorI2RlZmluZSBJVENfRChwcmVkLCByZWcsIGNsb2IpCV9fSVRDX0QgcHJlZCwgcmVnLCBjbG9iCisKKy5tYWNybyBfX0lUQ19JX0FORF9EIHByZWRfaSwgcHJlZF9kLCByZWcsIGNsb2IKKwkuaWZjICJccmVnIiwgInI4IgorCQkoXHByZWRfaSlYRU5fSFlQRVJfSVRDX0kKKwkJOzsKKwkJKFxwcmVkX2QpWEVOX0hZUEVSX0lUQ19ECisJCTs7CisJCS5leGl0bQorCS5lbmRpZgorCS5pZmMgIlxjbG9iIiwgInI4IgorCQltb3YgcjggPSBccmVnCisJCTs7CisJCShccHJlZF9pKVhFTl9IWVBFUl9JVENfSQorCQk7OworCQkoXHByZWRfZClYRU5fSFlQRVJfSVRDX0QKKwkJOzsKKwkJLmV4aXRtCisJLmVuZGlmCisKKwltb3YgXGNsb2IgPSByOAorCW1vdiByOCA9IFxyZWcKKwk7OworCShccHJlZF9pKVhFTl9IWVBFUl9JVENfSQorCTs7CisJKFxwcmVkX2QpWEVOX0hZUEVSX0lUQ19ECisJOzsKKwltb3YgcjggPSBcY2xvYgorCTs7CisuZW5kbQorI2RlZmluZSBJVENfSV9BTkRfRChwcmVkX2ksIHByZWRfZCwgcmVnLCBjbG9iKSBcCisJX19JVENfSV9BTkRfRCBwcmVkX2ksIHByZWRfZCwgcmVnLCBjbG9iCisKKy5tYWNybyBfX1RIQVNIIHByZWQsIHJlZzAsIHJlZzEsIGNsb2IKKwkuaWZjICJccmVnMCIsICJyOCIKKwkJKFxwcmVkKQltb3YgcjggPSBccmVnMQorCQkoXHByZWQpCVhFTl9IWVBFUl9USEFTSAorCQkuZXhpdG0KKwkuZW5kYworCS5pZmMgIlxyZWcxIiwgInI4IgorCQkoXHByZWQpCVhFTl9IWVBFUl9USEFTSAorCQk7OworCQkoXHByZWQpCW1vdiBccmVnMCA9IHI4CisJCTs7CisJCS5leGl0bQorCS5lbmRpZgorCS5pZmMgIlxjbG9iIiwgInI4IgorCQkoXHByZWQpCW1vdiByOCA9IFxyZWcxCisJCShccHJlZCkJWEVOX0hZUEVSX1RIQVNICisJCTs7CisJCShccHJlZCkJbW92IFxyZWcwID0gcjgKKwkJOzsKKwkJLmV4aXRtCisJLmVuZGlmCisKKwkoXHByZWQpCW1vdiBcY2xvYiA9IHI4CisJKFxwcmVkKQltb3YgcjggPSBccmVnMQorCShccHJlZCkJWEVOX0hZUEVSX1RIQVNICisJOzsKKwkoXHByZWQpCW1vdiBccmVnMCA9IHI4CisJKFxwcmVkKQltb3YgcjggPSBcY2xvYgorCTs7CisuZW5kbQorI2RlZmluZSBUSEFTSChwcmVkLCByZWcwLCByZWcxLCBjbG9iKSBfX1RIQVNIIHByZWQsIHJlZzAsIHJlZzEsIGNsb2IKKworI2RlZmluZSBTU01fUFNSX0lDX0FORF9ERUZBVUxUX0JJVFNfQU5EX1NSTFpfSShjbG9iMCwgY2xvYjEpCVwKKwltb3YgY2xvYjAgPSAxOwkJCQkJCVwKKwltb3ZsIGNsb2IxID0gWFNJX1BTUl9JQzsJCQkJXAorCTs7CQkJCQkJCVwKKwlzdDQgW2Nsb2IxXSA9IGNsb2IwCQkJCQlcCisJOzsKKworI2RlZmluZSBTU01fUFNSX0lDX0FORF9TUkxaX0QoY2xvYjAsIGNsb2IxKQlcCisJOzsJCQkJCVwKKwlzcmx6LmQ7CQkJCQlcCisJbW92IGNsb2IxID0gMTsJCQkJXAorCW1vdmwgY2xvYjAgPSBYU0lfUFNSX0lDOwkJXAorCTs7CQkJCQlcCisJc3Q0IFtjbG9iMF0gPSBjbG9iMQorCisjZGVmaW5lIFJTTV9QU1JfSUMoY2xvYikJXAorCW1vdmwgY2xvYiA9IFhTSV9QU1JfSUM7CVwKKwk7OwkJCVwKKwlzdDQgW2Nsb2JdID0gcjA7CVwKKwk7OworCisvKiBwcmVkIHdpbGwgYmUgY2xvYmJlcmVkICovCisjZGVmaW5lIE1BU0tfVE9fUEVORF9PRlMgICAgKC0xKQorI2RlZmluZSBTU01fUFNSX0kocHJlZCwgcHJlZF9jbG9iLCBjbG9iKQkJCQlcCisocHJlZCkJbW92bCBjbG9iID0gWFNJX1BTUl9JX0FERFIJCQkJCVwKKwk7OwkJCQkJCQkJXAorKHByZWQpCWxkOCBjbG9iID0gW2Nsb2JdCQkJCQkJXAorCTs7CQkJCQkJCQlcCisJLyogaWYgKHByZWQpIHZwc3IuaSA9IDEgKi8JCQkJCVwKKwkvKiBpZiAocHJlZCkgKHZjcHUtPnZjcHVfaW5mby0+ZXZ0Y2huX3VwY2FsbF9tYXNrKT0wICovCQlcCisocHJlZCkJc3QxIFtjbG9iXSA9IHIwLCBNQVNLX1RPX1BFTkRfT0ZTCQkJCVwKKwk7OwkJCQkJCQkJXAorCS8qIGlmICh2Y3B1LT52Y3B1X2luZm8tPmV2dGNobl91cGNhbGxfcGVuZGluZykgKi8JCVwKKyhwcmVkKQlsZDEgY2xvYiA9IFtjbG9iXQkJCQkJCVwKKwk7OwkJCQkJCQkJXAorKHByZWQpCWNtcC5uZS51bmMgcHJlZF9jbG9iLCBwMCA9IGNsb2IsIHIwCQkJCVwKKwk7OwkJCQkJCQkJXAorKHByZWRfY2xvYilYRU5fSFlQRVJfU1NNX0kJLyogZG8gYXJlYWwgc3NtIHBzci5pICovCisKKyNkZWZpbmUgUlNNX1BTUl9JKHByZWQsIGNsb2IwLCBjbG9iMSkJXAorCW1vdmwgY2xvYjAgPSBYU0lfUFNSX0lfQUREUjsJXAorCW1vdiBjbG9iMSA9IDE7CQkJXAorCTs7CQkJCVwKKwlsZDggY2xvYjAgPSBbY2xvYjBdOwkJXAorCTs7CQkJCVwKKyhwcmVkKQlzdDEgW2Nsb2IwXSA9IGNsb2IxCisKKyNkZWZpbmUgUlNNX1BTUl9JX0lDKGNsb2IwLCBjbG9iMSwgY2xvYjIpCQlcCisJbW92bCBjbG9iMCA9IFhTSV9QU1JfSV9BRERSOwkJCVwKKwltb3ZsIGNsb2IxID0gWFNJX1BTUl9JQzsJCQlcCisJOzsJCQkJCQlcCisJbGQ4IGNsb2IwID0gW2Nsb2IwXTsJCQkJXAorCW1vdiBjbG9iMiA9IDE7CQkJCQlcCisJOzsJCQkJCQlcCisJLyogbm90ZTogY2xlYXJzIGJvdGggdnBzci5pIGFuZCB2cHNyLmljISAqLwlcCisJc3QxIFtjbG9iMF0gPSBjbG9iMjsJCQkJXAorCXN0NCBbY2xvYjFdID0gcjA7CQkJCVwKKwk7OworCisjZGVmaW5lIFJTTV9QU1JfRFQJCVwKKwlYRU5fSFlQRVJfUlNNX1BTUl9EVAorCisjZGVmaW5lIFNTTV9QU1JfRFRfQU5EX1NSTFpfSQlcCisJWEVOX0hZUEVSX1NTTV9QU1JfRFQKKworI2RlZmluZSBCU1dfMChjbG9iMCwgY2xvYjEsIGNsb2IyKQkJCVwKKwk7OwkJCQkJCVwKKwkvKiByMTYtcjMxIGFsbCBub3cgaG9sZCBiYW5rMSB2YWx1ZXMgKi8JCVwKKwltb3YgY2xvYjIgPSBhci51bmF0OwkJCQlcCisJbW92bCBjbG9iMCA9IFhTSV9CQU5LMV9SMTY7CQkJXAorCW1vdmwgY2xvYjEgPSBYU0lfQkFOSzFfUjE2ICsgODsJCQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIxNiwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIxNywgMTY7CQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIxOCwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIxOSwgMTY7CQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIyMCwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIyMSwgMTY7CQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIyMiwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIyMywgMTY7CQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIyNCwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIyNSwgMTY7CQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIyNiwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIyNywgMTY7CQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIyOCwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIyOSwgMTY7CQlcCisJOzsJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOyBzdDguc3BpbGwgW2Nsb2IwXSA9IHIzMCwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOyBzdDguc3BpbGwgW2Nsb2IxXSA9IHIzMSwgMTY7CQlcCisJOzsJCQkJCQlcCisJbW92IGNsb2IxID0gYXIudW5hdDsJCQkJXAorCW1vdmwgY2xvYjAgPSBYU0lfQjFOQVQ7CQkJCVwKKwk7OwkJCQkJCVwKKwlzdDggW2Nsb2IwXSA9IGNsb2IxOwkJCQlcCisJbW92IGFyLnVuYXQgPSBjbG9iMjsJCQkJXAorCW1vdmwgY2xvYjAgPSBYU0lfQkFOS05VTTsJCQlcCisJOzsJCQkJCQlcCisJc3Q0IFtjbG9iMF0gPSByMAorCisKKwkvKiBGSVhNRTogVEhJUyBDT0RFIElTIE5PVCBOYVQgU0FGRSEgKi8KKyNkZWZpbmUgWEVOX0JTV18xKGNsb2IpCQkJXAorCW1vdiBjbG9iID0gYXIudW5hdDsJCVwKKwltb3ZsIHIzMCA9IFhTSV9CMU5BVDsJCVwKKwk7OwkJCQlcCisJbGQ4IHIzMCA9IFtyMzBdOwkJXAorCW1vdiByMzEgPSAxOwkJCVwKKwk7OwkJCQlcCisJbW92IGFyLnVuYXQgPSByMzA7CQlcCisJbW92bCByMzAgPSBYU0lfQkFOS05VTTsJCVwKKwk7OwkJCQlcCisJc3Q0IFtyMzBdID0gcjMxOwkJXAorCW1vdmwgcjMwID0gWFNJX0JBTksxX1IxNjsJXAorCW1vdmwgcjMxID0gWFNJX0JBTksxX1IxNis4OwlcCisJOzsJCQkJXAorCWxkOC5maWxsIHIxNiA9IFtyMzBdLCAxNjsJXAorCWxkOC5maWxsIHIxNyA9IFtyMzFdLCAxNjsJXAorCTs7CQkJCVwKKwlsZDguZmlsbCByMTggPSBbcjMwXSwgMTY7CVwKKwlsZDguZmlsbCByMTkgPSBbcjMxXSwgMTY7CVwKKwk7OwkJCQlcCisJbGQ4LmZpbGwgcjIwID0gW3IzMF0sIDE2OwlcCisJbGQ4LmZpbGwgcjIxID0gW3IzMV0sIDE2OwlcCisJOzsJCQkJXAorCWxkOC5maWxsIHIyMiA9IFtyMzBdLCAxNjsJXAorCWxkOC5maWxsIHIyMyA9IFtyMzFdLCAxNjsJXAorCTs7CQkJCVwKKwlsZDguZmlsbCByMjQgPSBbcjMwXSwgMTY7CVwKKwlsZDguZmlsbCByMjUgPSBbcjMxXSwgMTY7CVwKKwk7OwkJCQlcCisJbGQ4LmZpbGwgcjI2ID0gW3IzMF0sIDE2OwlcCisJbGQ4LmZpbGwgcjI3ID0gW3IzMV0sIDE2OwlcCisJOzsJCQkJXAorCWxkOC5maWxsIHIyOCA9IFtyMzBdLCAxNjsJXAorCWxkOC5maWxsIHIyOSA9IFtyMzFdLCAxNjsJXAorCTs7CQkJCVwKKwlsZDguZmlsbCByMzAgPSBbcjMwXTsJCVwKKwlsZDguZmlsbCByMzEgPSBbcjMxXTsJCVwKKwk7OwkJCQlcCisJbW92IGFyLnVuYXQgPSBjbG9iCisKKyNkZWZpbmUgQlNXXzEoY2xvYjAsIGNsb2IxKQlYRU5fQlNXXzEoY2xvYjEpCisKKworI2RlZmluZSBDT1ZFUglcCisJWEVOX0hZUEVSX0NPVkVSCisKKyNkZWZpbmUgUkZJCQkJXAorCVhFTl9IWVBFUl9SRkk7CQlcCisJZHZfc2VyaWFsaXplX2RhdGEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMGZhYjQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDM0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC1pYTY0L2h5cGVydmlzb3ItaWYuaAorICoKKyAqIEd1ZXN0IE9TIGludGVyZmFjZSB0byBJQTY0IFhlbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQ29weXJpZ2h0IGJ5IHRob3NlIHdobyBjb250cmlidXRlZC4gKGluIGFscGhhYmV0aWNhbCBvcmRlcikKKyAqCisgKiBBbnRob255IFh1IDxhbnRob255Lnh1QGludGVsLmNvbT4KKyAqIEVkZGllIERvbmcgPGVkZGllLmRvbmdAaW50ZWwuY29tPgorICogRnJlZCBZYW5nIDxmcmVkLnlhbmdAaW50ZWwuY29tPgorICogS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+CisgKiBBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkBocC5jb20+CisgKiBDaHJpcyBXcmlnaHQgPGNocmlzd0Bzb3VzLXNvbC5vcmc+CisgKiBDaHJpc3RpYW4gTGltcGFjaCA8Q2hyaXN0aWFuLkxpbXBhY2hAY2wuY2FtLmFjLnVrPgorICogRGlldG1hciBIYWhuIDxkaWV0bWFyLmhhaG5AZnVqaXRzdS1zaWVtZW5zLmNvbT4KKyAqIEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4KKyAqIElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YUB2YWxpbnV4LmNvLmpwPgorICogSmFuIEJldWxpY2ggPGpiZXVsaWNoQG5vdmVsbC5jb20+CisgKiBKb2huIExldm9uIDxqb2huLmxldm9uQHN1bi5jb20+CisgKiBLYXp1aGlybyBTdXp1a2kgPGthekBqcC5mdWppdHN1LmNvbT4KKyAqIEtlaXIgRnJhc2VyIDxrZWlyLmZyYXNlckBjaXRyaXguY29tPgorICogS291eWEgU2hpbXVyYSA8a291eWFAanAuZnVqaXRzdS5jb20+CisgKiBNYXNha2kgS2Fubm8gPGthbm5vLm1hc2FraUBqcC5mdWppdHN1LmNvbT4KKyAqIE1hdHQgQ2hhcG1hbiA8bWF0dGhld2NAaHAuY29tPgorICogTWF0dGhldyBDaGFwbWFuIDxtYXR0aGV3Y0BocC5jb20+CisgKiBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBldS5jaXRyaXguY29tPgorICogVG9tb25hcmkgSG9yaWtvc2hpIDx0Lmhvcmlrb3NoaUBqcC5mdWppdHN1LmNvbT4KKyAqIFRyaXN0YW4gR2luZ29sZCA8dGdpbmdvbGRAZnJlZS5mcj4KKyAqIFRzdW5laGlzYSBEb2kgPERvaS5Uc3VuZWhpc2FAanAuZnVqaXRzdS5jb20+CisgKiBZdXRha2EgRXpha2kgPHl1dGFrYS5lemFraUBqcC5mdWppdHN1LmNvbT4KKyAqIFpoYW5nIFhpbiA8eGluZy56LnpoYW5nQGludGVsLmNvbT4KKyAqIFpoYW5nIHhpYW50YW8gPHhpYW50YW8uemhhbmdAaW50ZWwuY29tPgorICogZGFuLm1hZ2VuaGVpbWVyQGhwLmNvbQorICogaWFuLnByYXR0QGNsLmNhbS5hYy51aworICogbWljaGFlbC5mZXR0ZXJtYW5AY2wuY2FtLmFjLnVrCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfWEVOX0lOVEVSRkFDRV9ICisjZGVmaW5lIF9BU01fSUE2NF9YRU5fSU5URVJGQUNFX0gKKworI2RlZmluZSBfX0RFRklORV9HVUVTVF9IQU5ETEUobmFtZSwgdHlwZSkJXAorCXR5cGVkZWYgc3RydWN0IHsgdHlwZSAqcDsgfSBfX2d1ZXN0X2hhbmRsZV8gIyMgbmFtZQorCisjZGVmaW5lIERFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKG5hbWUpCVwKKwlfX0RFRklORV9HVUVTVF9IQU5ETEUobmFtZSwgc3RydWN0IG5hbWUpCisjZGVmaW5lIERFRklORV9HVUVTVF9IQU5ETEUobmFtZSkJX19ERUZJTkVfR1VFU1RfSEFORExFKG5hbWUsIG5hbWUpCisjZGVmaW5lIEdVRVNUX0hBTkRMRShuYW1lKQkJX19ndWVzdF9oYW5kbGVfICMjIG5hbWUKKyNkZWZpbmUgR1VFU1RfSEFORExFXzY0KG5hbWUpCQlHVUVTVF9IQU5ETEUobmFtZSkKKyNkZWZpbmUgc2V0X3hlbl9ndWVzdF9oYW5kbGUoaG5kLCB2YWwpCWRvIHsgKGhuZCkucCA9IHZhbDsgfSB3aGlsZSAoMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIEd1ZXN0IGhhbmRsZXMgZm9yIHByaW1pdGl2ZSBDIHR5cGVzLiAqLworX19ERUZJTkVfR1VFU1RfSEFORExFKHVjaGFyLCB1bnNpZ25lZCBjaGFyKTsKK19fREVGSU5FX0dVRVNUX0hBTkRMRSh1aW50LCB1bnNpZ25lZCBpbnQpOworX19ERUZJTkVfR1VFU1RfSEFORExFKHVsb25nLCB1bnNpZ25lZCBsb25nKTsKK19fREVGSU5FX0dVRVNUX0hBTkRMRSh1NjQsIHVuc2lnbmVkIGxvbmcpOworREVGSU5FX0dVRVNUX0hBTkRMRShjaGFyKTsKK0RFRklORV9HVUVTVF9IQU5ETEUoaW50KTsKK0RFRklORV9HVUVTVF9IQU5ETEUobG9uZyk7CitERUZJTkVfR1VFU1RfSEFORExFKHZvaWQpOworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgeGVuX3Bmbl90OworREVGSU5FX0dVRVNUX0hBTkRMRSh4ZW5fcGZuX3QpOworI2RlZmluZSBQUklfeGVuX3BmbgkibHgiCisjZW5kaWYKKworLyogQXJjaCBzcGVjaWZpYyBWSVJRcyBkZWZpbml0aW9uICovCisjZGVmaW5lIFZJUlFfSVRDCVZJUlFfQVJDSF8wCS8qIFYuIFZpcnR1YWwgaXRjIHRpbWVyICovCisjZGVmaW5lIFZJUlFfTUNBX0NNQwlWSVJRX0FSQ0hfMQkvKiBNQ0EgY21jIGludGVycnVwdCAqLworI2RlZmluZSBWSVJRX01DQV9DUEUJVklSUV9BUkNIXzIJLyogTUNBIGNwZSBpbnRlcnJ1cHQgKi8KKworLyogTWF4aW11bSBudW1iZXIgb2YgdmlydHVhbCBDUFVzIGluIG11bHRpLXByb2Nlc3NvciBndWVzdHMuICovCisvKiBrZWVwIHNpemVvZihzdHJ1Y3Qgc2hhcmVkX3BhZ2UpIDw9IFBBR0VfU0laRS4KKyAqIHRoaXMgaXMgY2hlY2tlZCBpbiBhcmNoL2lhNjQveGVuL2h5cGVydmlzb3IuYy4gKi8KKyNkZWZpbmUgTUFYX1ZJUlRfQ1BVUwk2NAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIElOVkFMSURfTUZOCSh+MFVMKQorCit1bmlvbiB2YWMgeworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJc3RydWN0IHsKKwkJaW50IGFfaW50OjE7CisJCWludCBhX2Zyb21faW50X2NyOjE7CisJCWludCBhX3RvX2ludF9jcjoxOworCQlpbnQgYV9mcm9tX3BzcjoxOworCQlpbnQgYV9mcm9tX2NwdWlkOjE7CisJCWludCBhX2NvdmVyOjE7CisJCWludCBhX2JzdzoxOworCQlsb25nIHJlc2VydmVkOjU3OworCX07Cit9OworCit1bmlvbiB2ZGMgeworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJc3RydWN0IHsKKwkJaW50IGRfdm1zdzoxOworCQlpbnQgZF9leHRpbnQ6MTsKKwkJaW50IGRfaWJyX2RicjoxOworCQlpbnQgZF9wbWM6MTsKKwkJaW50IGRfdG9fcG1kOjE7CisJCWludCBkX2l0bToxOworCQlsb25nIHJlc2VydmVkOjU4OworCX07Cit9OworCitzdHJ1Y3QgbWFwcGVkX3JlZ3MgeworCXVuaW9uIHZhYyB2YWM7CisJdW5pb24gdmRjIHZkYzsKKwl1bnNpZ25lZCBsb25nIHZpcnRfZW52X3ZhZGRyOworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQxWzI5XTsKKwl1bnNpZ25lZCBsb25nIHZocGk7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDJbOTVdOworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZyB2Z3JbMTZdOworCQl1bnNpZ25lZCBsb25nIGJhbmsxX3JlZ3NbMTZdOwkvKiBiYW5rMSByZWdzIChyMTYtcjMxKQorCQkJCQkJICAgd2hlbiBiYW5rMCBhY3RpdmUgKi8KKwl9OworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZyB2YmdyWzE2XTsKKwkJdW5zaWduZWQgbG9uZyBiYW5rMF9yZWdzWzE2XTsJLyogYmFuazAgcmVncyAocjE2LXIzMSkKKwkJCQkJCSAgIHdoZW4gYmFuazEgYWN0aXZlICovCisJfTsKKwl1bnNpZ25lZCBsb25nIHZuYXQ7CisJdW5zaWduZWQgbG9uZyB2Ym5hdDsKKwl1bnNpZ25lZCBsb25nIHZjcHVpZFs1XTsKKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkM1sxMV07CisJdW5zaWduZWQgbG9uZyB2cHNyOworCXVuc2lnbmVkIGxvbmcgdnByOworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQ0Wzc2XTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgdmNyWzEyOF07CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBsb25nIGRjcjsJLyogQ1IwICovCisJCQl1bnNpZ25lZCBsb25nIGl0bTsKKwkJCXVuc2lnbmVkIGxvbmcgaXZhOworCQkJdW5zaWduZWQgbG9uZyByc3YxWzVdOworCQkJdW5zaWduZWQgbG9uZyBwdGE7CS8qIENSOCAqLworCQkJdW5zaWduZWQgbG9uZyByc3YyWzddOworCQkJdW5zaWduZWQgbG9uZyBpcHNyOwkvKiBDUjE2ICovCisJCQl1bnNpZ25lZCBsb25nIGlzcjsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2MzsKKwkJCXVuc2lnbmVkIGxvbmcgaWlwOworCQkJdW5zaWduZWQgbG9uZyBpZmE7CisJCQl1bnNpZ25lZCBsb25nIGl0aXI7CisJCQl1bnNpZ25lZCBsb25nIGlpcGE7CisJCQl1bnNpZ25lZCBsb25nIGlmczsKKwkJCXVuc2lnbmVkIGxvbmcgaWltOwkvKiBDUjI0ICovCisJCQl1bnNpZ25lZCBsb25nIGloYTsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2NFszOF07CisJCQl1bnNpZ25lZCBsb25nIGxpZDsJLyogQ1I2NCAqLworCQkJdW5zaWduZWQgbG9uZyBpdnI7CisJCQl1bnNpZ25lZCBsb25nIHRwcjsKKwkJCXVuc2lnbmVkIGxvbmcgZW9pOworCQkJdW5zaWduZWQgbG9uZyBpcnJbNF07CisJCQl1bnNpZ25lZCBsb25nIGl0djsJLyogQ1I3MiAqLworCQkJdW5zaWduZWQgbG9uZyBwbXY7CisJCQl1bnNpZ25lZCBsb25nIGNtY3Y7CisJCQl1bnNpZ25lZCBsb25nIHJzdjVbNV07CisJCQl1bnNpZ25lZCBsb25nIGxycjA7CS8qIENSODAgKi8KKwkJCXVuc2lnbmVkIGxvbmcgbHJyMTsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2Nls0Nl07CisJCX07CisJfTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQ1WzEyOF07CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBsb25nIHByZWNvdmVyX2lmczsKKwkJCXVuc2lnbmVkIGxvbmcgdW5hdDsJLyogbm90IHN1cmUgaWYgdGhpcyBpcyBuZWVkZWQKKwkJCQkJCSAgIHVudGlsIE5hVCBhcmNoIGlzIGRvbmUgKi8KKwkJCWludCBpbnRlcnJ1cHRfY29sbGVjdGlvbl9lbmFibGVkOyAvKiB2aXJ0dWFsIHBzci5pYyAqLworCisJCQkvKiB2aXJ0dWFsIGludGVycnVwdCBkZWxpdmVyYWJsZSBmbGFnIGlzCisJCQkgKiBldnRjaG5fdXBjYWxsX21hc2sgaW4gc2hhcmVkIGluZm8gYXJlYSBub3cuCisJCQkgKiBpbnRlcnJ1cHRfbWFza19hZGRyIGlzIHRoZSBhZGRyZXNzCisJCQkgKiBvZiBldnRjaG5fdXBjYWxsX21hc2sgZm9yIGN1cnJlbnQgdmNwdQorCQkJICovCisJCQl1bnNpZ25lZCBjaGFyICppbnRlcnJ1cHRfbWFza19hZGRyOworCQkJaW50IHBlbmRpbmdfaW50ZXJydXB0aW9uOworCQkJdW5zaWduZWQgY2hhciB2cHNyX3BwOworCQkJdW5zaWduZWQgY2hhciB2cHNyX2RmaDsKKwkJCXVuc2lnbmVkIGNoYXIgaHBzcl9kZmg7CisJCQl1bnNpZ25lZCBjaGFyIGhwc3JfbWZoOworCQkJdW5zaWduZWQgbG9uZyByZXNlcnZlZDVfMVs0XTsKKwkJCWludCBtZXRhcGh5c2ljYWxfbW9kZTsJLyogMSA9IHVzZSBtZXRhcGh5cyBtYXBwaW5nCisJCQkJCQkgICAwID0gdXNlIHZpcnR1YWwgKi8KKwkJCWludCBiYW5rbnVtOwkJLyogMCBvciAxLCB3aGljaCB2aXJ0dWFsCisJCQkJCQkgICByZWdpc3RlciBiYW5rIGlzIGFjdGl2ZSAqLworCQkJdW5zaWduZWQgbG9uZyBycnNbOF07CS8qIHJlZ2lvbiByZWdpc3RlcnMgKi8KKwkJCXVuc2lnbmVkIGxvbmcga3JzWzhdOwkvKiBrZXJuZWwgcmVnaXN0ZXJzICovCisJCQl1bnNpZ25lZCBsb25nIHRtcFsxNl07CS8qIHRlbXAgcmVnaXN0ZXJzCisJCQkJCQkgICAoZS5nLiBmb3IgaHlwZXJwcml2b3BzKSAqLworCQl9OworCX07Cit9OworCitzdHJ1Y3QgYXJjaF92Y3B1X2luZm8geworCS8qIG5vdGhpbmcgKi8KK307CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBtYWdpYyBwYWdlIGluIGRvbWFpbiBwc2V1ZG8gcGh5c2ljYWwgYWRkcmVzcworICogc3BhY2UgYW5kIHRoZSByZXN1bHQgb2YgWEVOTUVNX21hY2hpbmVfbWVtb3J5X21hcC4KKyAqIEFzIHRoZSBYRU5NRU1fbWFjaGluZV9tZW1vcnlfbWFwIHJlc3VsdCwKKyAqIHhlbl9tZW1vcnlfbWFwOjpucl9lbnRyaWVzIGluZGljYXRlcyB0aGUgc2l6ZSBpbiBieXRlcworICogaW5jbHVkaW5nIHN0cnVjdCB4ZW5faWE2NF9tZW1tYXBfaW5mby4gTm90IHRoZSBudW1iZXIgb2YgZW50cmllcy4KKyAqLworc3RydWN0IHhlbl9pYTY0X21lbW1hcF9pbmZvIHsKKwl1aW50NjRfdCBlZmlfbWVtbWFwX3NpemU7CS8qIHNpemUgb2YgRUZJIG1lbW9yeSBtYXAgKi8KKwl1aW50NjRfdCBlZmlfbWVtZGVzY19zaXplOwkvKiBzaXplIG9mIGFuIEVGSSBtZW1vcnkgbWFwCisJCQkJCSAqIGRlc2NyaXB0b3IgKi8KKwl1aW50MzJfdCBlZmlfbWVtZGVzY192ZXJzaW9uOwkvKiBtZW1vcnkgZGVzY3JpcHRvciB2ZXJzaW9uICovCisJdm9pZCAqbWVtZGVzY1swXTsJCS8qIGFycmF5IG9mIGVmaV9tZW1vcnlfZGVzY190ICovCit9OworCitzdHJ1Y3QgYXJjaF9zaGFyZWRfaW5mbyB7CisJLyogUEZOIG9mIHRoZSBzdGFydF9pbmZvIHBhZ2UuCSovCisJdW5zaWduZWQgbG9uZyBzdGFydF9pbmZvX3BmbjsKKworCS8qIEludGVycnVwdCB2ZWN0b3IgZm9yIGV2ZW50IGNoYW5uZWwuCSovCisJaW50IGV2dGNobl92ZWN0b3I7CisKKwkvKiBQRk4gb2YgbWVtbWFwX2luZm8gcGFnZSAqLworCXVuc2lnbmVkIGludCBtZW1tYXBfaW5mb19udW1fcGFnZXM7CS8qIGN1cnJlbnRseSBvbmx5ID0gMSBjYXNlIGlzCisJCQkJCQkgICBzdXBwb3J0ZWQuICovCisJdW5zaWduZWQgbG9uZyBtZW1tYXBfaW5mb19wZm47CisKKwl1aW50NjRfdCBwYWRbMzFdOworfTsKKworc3RydWN0IHhlbl9jYWxsYmFjayB7CisJdW5zaWduZWQgbG9uZyBpcDsKK307Cit0eXBlZGVmIHN0cnVjdCB4ZW5fY2FsbGJhY2sgeGVuX2NhbGxiYWNrX3Q7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIFNpemUgb2YgdGhlIHNoYXJlZF9pbmZvIGFyZWEgKHRoaXMgaXMgbm90IHJlbGF0ZWQgdG8gcGFnZSBzaXplKS4gICovCisjZGVmaW5lIFhTSV9TSElGVAkJCTE0CisjZGVmaW5lIFhTSV9TSVpFCQkJKDEgPDwgWFNJX1NISUZUKQorLyogTG9nIHNpemUgb2YgbWFwcGVkX3JlZ3MgYXJlYSAoNjQgS0IgLSBvbmx5IDRLQiBpcyB1c2VkKS4gICovCisjZGVmaW5lIFhNQVBQRURSRUdTX1NISUZUCQkxMgorI2RlZmluZSBYTUFQUEVEUkVHU19TSVpFCQkoMSA8PCBYTUFQUEVEUkVHU19TSElGVCkKKy8qIE9mZnNldCBvZiBYQVNJIChYZW4gYXJjaCBzaGFyZWQgaW5mbykgd3J0IFhTSV9CQVNFLgkqLworI2RlZmluZSBYTUFQUEVEUkVHU19PRlMJCQlYU0lfU0laRQorCisvKiBIeXBlcnByaXZvcHMuICAqLworI2RlZmluZSBIWVBFUlBSSVZPUF9TVEFSVAkJMHgxCisjZGVmaW5lIEhZUEVSUFJJVk9QX1JGSQkJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4MCkKKyNkZWZpbmUgSFlQRVJQUklWT1BfUlNNX0RUCQkoSFlQRVJQUklWT1BfU1RBUlQgKyAweDEpCisjZGVmaW5lIEhZUEVSUFJJVk9QX1NTTV9EVAkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHgyKQorI2RlZmluZSBIWVBFUlBSSVZPUF9DT1ZFUgkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHgzKQorI2RlZmluZSBIWVBFUlBSSVZPUF9JVENfRAkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHg0KQorI2RlZmluZSBIWVBFUlBSSVZPUF9JVENfSQkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHg1KQorI2RlZmluZSBIWVBFUlBSSVZPUF9TU01fSQkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHg2KQorI2RlZmluZSBIWVBFUlBSSVZPUF9HRVRfSVZSCQkoSFlQRVJQUklWT1BfU1RBUlQgKyAweDcpCisjZGVmaW5lIEhZUEVSUFJJVk9QX0dFVF9UUFIJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4OCkKKyNkZWZpbmUgSFlQRVJQUklWT1BfU0VUX1RQUgkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHg5KQorI2RlZmluZSBIWVBFUlBSSVZPUF9FT0kJCQkoSFlQRVJQUklWT1BfU1RBUlQgKyAweGEpCisjZGVmaW5lIEhZUEVSUFJJVk9QX1NFVF9JVE0JCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4YikKKyNkZWZpbmUgSFlQRVJQUklWT1BfVEhBU0gJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4YykKKyNkZWZpbmUgSFlQRVJQUklWT1BfUFRDX0dBCQkoSFlQRVJQUklWT1BfU1RBUlQgKyAweGQpCisjZGVmaW5lIEhZUEVSUFJJVk9QX0lUUl9ECQkoSFlQRVJQUklWT1BfU1RBUlQgKyAweGUpCisjZGVmaW5lIEhZUEVSUFJJVk9QX0dFVF9SUgkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHhmKQorI2RlZmluZSBIWVBFUlBSSVZPUF9TRVRfUlIJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4MTApCisjZGVmaW5lIEhZUEVSUFJJVk9QX1NFVF9LUgkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHgxMSkKKyNkZWZpbmUgSFlQRVJQUklWT1BfRkMJCQkoSFlQRVJQUklWT1BfU1RBUlQgKyAweDEyKQorI2RlZmluZSBIWVBFUlBSSVZPUF9HRVRfQ1BVSUQJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4MTMpCisjZGVmaW5lIEhZUEVSUFJJVk9QX0dFVF9QTUQJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4MTQpCisjZGVmaW5lIEhZUEVSUFJJVk9QX0dFVF9FRkxBRwkJKEhZUEVSUFJJVk9QX1NUQVJUICsgMHgxNSkKKyNkZWZpbmUgSFlQRVJQUklWT1BfU0VUX0VGTEFHCQkoSFlQRVJQUklWT1BfU1RBUlQgKyAweDE2KQorI2RlZmluZSBIWVBFUlBSSVZPUF9SU01fQkUJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4MTcpCisjZGVmaW5lIEhZUEVSUFJJVk9QX0dFVF9QU1IJCShIWVBFUlBSSVZPUF9TVEFSVCArIDB4MTgpCisjZGVmaW5lIEhZUEVSUFJJVk9QX1NFVF9SUjBfVE9fUlI0CShIWVBFUlBSSVZPUF9TVEFSVCArIDB4MTkpCisjZGVmaW5lIEhZUEVSUFJJVk9QX01BWAkJCSgweDFhKQorCisvKiBGYXN0IGFuZCBsaWdodCBoeXBlcmNhbGxzLiAgKi8KKyNkZWZpbmUgX19IWVBFUlZJU09SX2lhNjRfZmFzdF9lb2kJX19IWVBFUlZJU09SX2FyY2hfMQorCisvKiBYZW5jb21tIG1hY3Jvcy4gICovCisjZGVmaW5lIFhFTkNPTU1fSU5MSU5FX01BU0sJCTB4ZjgwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFhFTkNPTU1fSU5MSU5FX0ZMQUcJCTB4ODAwMDAwMDAwMDAwMDAwMFVMCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBPcHRpbWl6YXRpb24gZmVhdHVyZXMuCisgKiBUaGUgaHlwZXJ2aXNvciBtYXkgZG8gc29tZSBzcGVjaWFsIG9wdGltaXphdGlvbnMgZm9yIGd1ZXN0cy4gVGhpcyBoeXBlcmNhbGwKKyAqIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCBvbi9vZiB0aGVzZSBzcGVjaWFsIG9wdGltaXphdGlvbnMuCisgKi8KKyNkZWZpbmUgX19IWVBFUlZJU09SX29wdF9mZWF0dXJlCTB4NzAwVUwKKworI2RlZmluZSBYRU5fSUE2NF9PUFRGX09GRgkJMHgwCisjZGVmaW5lIFhFTl9JQTY0X09QVEZfT04JCTB4MQorCisvKgorICogSWYgdGhpcyBmZWF0dXJlIGlzIHN3aXRjaGVkIG9uLCB0aGUgaHlwZXJ2aXNvciBpbnNlcnRzIHRoZQorICogdGxiIGVudHJpZXMgd2l0aG91dCBjYWxsaW5nIHRoZSBndWVzdHMgdHJhcGhhbmRsZXIuCisgKiBUaGlzIGlzIHVzZWZ1bCBpbiBndWVzdHMgdXNpbmcgcmVnaW9uIDcgZm9yIGlkZW50aXR5IG1hcHBpbmcKKyAqIGxpa2UgdGhlIGxpbnV4IGtlcm5lbCBkb2VzLgorICovCisjZGVmaW5lIFhFTl9JQTY0X09QVEZfSURFTlRfTUFQX1JFRzcJMQorCisvKiBJZGVudGl0eSBtYXBwaW5nIG9mIHJlZ2lvbiA0IGFkZHJlc3NlcyBpbiBIVk0uICovCisjZGVmaW5lIFhFTl9JQTY0X09QVEZfSURFTlRfTUFQX1JFRzQJMgorCisvKiBJZGVudGl0eSBtYXBwaW5nIG9mIHJlZ2lvbiA1IGFkZHJlc3NlcyBpbiBIVk0uICovCisjZGVmaW5lIFhFTl9JQTY0X09QVEZfSURFTlRfTUFQX1JFRzUJMworCisjZGVmaW5lIFhFTl9JQTY0X09QVEZfSURFTlRfTUFQX05PVF9TRVQJICgwKQorCitzdHJ1Y3QgeGVuX2lhNjRfb3B0X2ZlYXR1cmUgeworCXVuc2lnbmVkIGxvbmcgY21kOwkvKiBXaGljaCBmZWF0dXJlICovCisJdW5zaWduZWQgY2hhciBvbjsJLyogU3dpdGNoIGZlYXR1cmUgb24vb2ZmICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJLyogVGhlIHBhZ2UgcHJvdGVjdGlvbiBiaXQgbWFzayBvZiB0aGUgcHRlLgorCQkJICogVGhpcyB3aWxsIGJlIG9yJ2VkIHdpdGggdGhlIHB0ZS4gKi8KKwkJCXVuc2lnbmVkIGxvbmcgcGdwcm90OworCQkJdW5zaWduZWQgbG9uZyBrZXk7CS8qIEEgcHJvdGVjdGlvbiBrZXkgZm9yIGl0aXIuKi8KKwkJfTsKKwl9OworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1hFTl9JTlRFUkZBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pcnEuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwNDUwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaXJxLmgKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pcnEuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1hFTl9JUlFfSAorI2RlZmluZSBfQVNNX0lBNjRfWEVOX0lSUV9ICisKKy8qCisgKiBUaGUgZmxhdCBJUlEgc3BhY2UgaXMgZGl2aWRlZCBpbnRvIHR3byByZWdpb25zOgorICogIDEuIEEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHJlYWwgcGh5c2ljYWwgSVJRcy4gVGhpcyBzcGFjZSBpcyBvbmx5IHVzZWQKKyAqICAgICBpZiB3ZSBoYXZlIHBoeXNpY2FsIGRldmljZS1hY2Nlc3MgcHJpdmlsZWdlLiBUaGlzIHJlZ2lvbiBpcyBhdCB0aGUKKyAqICAgICBzdGFydCBvZiB0aGUgSVJRIHNwYWNlIHNvIHRoYXQgZXhpc3RpbmcgZGV2aWNlIGRyaXZlcnMgZG8gbm90IG5lZWQKKyAqICAgICB0byBiZSBtb2RpZmllZCB0byB0cmFuc2xhdGUgcGh5c2ljYWwgSVJRIG51bWJlcnMgaW50byBvdXIgSVJRIHNwYWNlLgorICogIDMuIEEgZHluYW1pYyBtYXBwaW5nIG9mIGludGVyLWRvbWFpbiBhbmQgWGVuLXNvdXJjZWQgdmlydHVhbCBJUlFzLiBUaGVzZQorICogICAgIGFyZSBib3VuZCB1c2luZyB0aGUgcHJvdmlkZWQgYmluZC91bmJpbmQgZnVuY3Rpb25zLgorICovCisKKyNkZWZpbmUgWEVOX1BJUlFfQkFTRQkJMAorI2RlZmluZSBYRU5fTlJfUElSUVMJCTI1NgorCisjZGVmaW5lIFhFTl9EWU5JUlFfQkFTRQkJKFhFTl9QSVJRX0JBU0UgKyBYRU5fTlJfUElSUVMpCisjZGVmaW5lIFhFTl9OUl9EWU5JUlFTCQkoTlJfQ1BVUyAqIDgpCisKKyNkZWZpbmUgWEVOX05SX0lSUVMJCShYRU5fTlJfUElSUVMgKyBYRU5fTlJfRFlOSVJRUykKKworI2VuZGlmIC8qIF9BU01fSUE2NF9YRU5fSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vbWluc3RhdGUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vbWluc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDkyZDliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9taW5zdGF0ZS5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogRE9fU0FWRV9NSU4gc3dpdGNoZXMgdG8gdGhlIGtlcm5lbCBzdGFja3MgKGlmIG5lY2Vzc2FyeSkgYW5kIHNhdmVzCisgKiB0aGUgbWluaW11bSBzdGF0ZSBuZWNlc3NhcnkgdGhhdCBhbGxvd3MgdXMgdG8gdHVybiBwc3IuaWMgYmFjaworICogb24uCisgKgorICogQXNzdW1lZCBzdGF0ZSB1cG9uIGVudHJ5OgorICoJcHNyLmljOiBvZmYKKyAqCXIzMToJY29udGFpbnMgc2F2ZWQgcHJlZGljYXRlcyAocHIpCisgKgorICogVXBvbiBleGl0LCB0aGUgc3RhdGUgaXMgYXMgZm9sbG93czoKKyAqCXBzci5pYzogb2ZmCisgKgkgcjIgPSBwb2ludHMgdG8gJnB0X3JlZ3MucjE2CisgKgkgcjggPSBjb250ZW50cyBvZiBhci5jY3YKKyAqCSByOSA9IGNvbnRlbnRzIG9mIGFyLmNzZAorICoJcjEwID0gY29udGVudHMgb2YgYXIuc3NkCisgKglyMTEgPSBGUFNSX0RFRkFVTFQKKyAqCXIxMiA9IGtlcm5lbCBzcCAoa2VybmVsIHZpcnR1YWwgYWRkcmVzcykKKyAqCXIxMyA9IHBvaW50cyB0byBjdXJyZW50IHRhc2tfc3RydWN0IChrZXJuZWwgdmlydHVhbCBhZGRyZXNzKQorICoJcDE1ID0gVFJVRSBpZiBwc3IuaSBpcyBzZXQgaW4gY3IuaXBzcgorICoJcHJlZGljYXRlIHJlZ2lzdGVycyAob3RoZXIgdGhhbiBwMiwgcDMsIGFuZCBwMTUpLCBiNiwgcjMsIHIxNCwgcjE1OgorICoJCXByZXNlcnZlZAorICogQ09ORklHX1hFTiBub3RlOiBwNi9wNyBhcmUgbm90IHByZXNlcnZlZAorICoKKyAqIE5vdGUgdGhhdCBwc3IuaWMgaXMgTk9UIHR1cm5lZCBvbiBieSB0aGlzIG1hY3JvLiAgVGhpcyBpcyBzbyB0aGF0CisgKiB3ZSBjYW4gcGFzcyBpbnRlcnJ1cHRpb24gc3RhdGUgYXMgYXJndW1lbnRzIHRvIGEgaGFuZGxlci4KKyAqLworI2RlZmluZSBYRU5fRE9fU0FWRV9NSU4oX19DT1ZFUixTQVZFX0lGUyxFWFRSQSxXT1JLQVJPVU5EKQkJCQkJXAorCW1vdiByMTY9SUE2NF9LUihDVVJSRU5UKTsJLyogTSAqLwkJCQkJCQlcCisJbW92IHIyNz1hci5yc2M7CQkJLyogTSAqLwkJCQkJCQlcCisJbW92IHIyMD1yMTsJCQkvKiBBICovCQkJCQkJCVwKKwltb3YgcjI1PWFyLnVuYXQ7CQkvKiBNICovCQkJCQkJCVwKKwlNT1ZfRlJPTV9JUFNSKHAwLHIyOSk7CQkvKiBNICovCQkJCQkJCVwKKwlNT1ZfRlJPTV9JSVAocjI4KTsJCS8qIE0gKi8JCQkJCQkJXAorCW1vdiByMjE9YXIuZnBzcjsJCS8qIE0gKi8JCQkJCQkJXAorCW1vdiByMjY9YXIucGZzOwkJCS8qIEkgKi8JCQkJCQkJXAorCV9fQ09WRVI7CQkJLyogQjs7IChvciBub3RoaW5nKSAqLwkJCQkJXAorCWFkZHMgcjE2PUlBNjRfVEFTS19USFJFQURfT05fVVNUQUNLX09GRlNFVCxyMTY7CQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJbGQxIHIxNz1bcjE2XTsJCQkJLyogbG9hZCBjdXJyZW50LT50aHJlYWQub25fdXN0YWNrIGZsYWcgKi8JXAorCXN0MSBbcjE2XT1yMDsJCQkJLyogY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnICovCVwKKwlhZGRzIHIxPS1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjE2CQkJCQkJXAorCS8qIHN3aXRjaCBmcm9tIHVzZXIgdG8ga2VybmVsIFJCUzogKi8JCQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJaW52YWxhOwkJCQkvKiBNICovCQkJCQkJCVwKKwkvKiBTQVZFX0lGUzsqLyAvKiBzZWUgeGVuIHNwZWNpYWwgaGFuZGxpbmcgYmVsb3cgKi8JCQkJCVwKKwljbXAuZXEgcEtTdGsscFVTdGs9cjAscjE3OwkJLyogYXJlIHdlIGluIGtlcm5lbCBtb2RlIGFscmVhZHk/ICovCQlcCisJOzsJCQkJCQkJCQkJCVwKKyhwVVN0aykJbW92IGFyLnJzYz0wOwkJLyogc2V0IGVuZm9yY2VkIGxhenkgbW9kZSwgcGwgMCwgbGl0dGxlLWVuZGlhbiwgbG9hZHJzPTAgKi8JXAorCTs7CQkJCQkJCQkJCQlcCisocFVTdGspCW1vdi5tIHIyND1hci5ybmF0OwkJCQkJCQkJCVwKKyhwVVN0aykJYWRkbCByMjI9SUE2NF9SQlNfT0ZGU0VULHIxOwkJCS8qIGNvbXB1dGUgYmFzZSBvZiBSQlMgKi8JCVwKKyhwS1N0aykgbW92IHIxPXNwOwkJCQkJLyogZ2V0IHNwICAqLwkJCQlcCisJOzsJCQkJCQkJCQkJCVwKKyhwVVN0aykgbGZldGNoLmZhdWx0LmV4Y2wubnQxIFtyMjJdOwkJCQkJCQkJXAorKHBVU3RrKQlhZGRsIHIxPUlBNjRfU1RLX09GRlNFVC1JQTY0X1BUX1JFR1NfU0laRSxyMTsJLyogY29tcHV0ZSBiYXNlIG9mIG1lbW9yeSBzdGFjayAqLwlcCisocFVTdGspCW1vdiByMjM9YXIuYnNwc3RvcmU7CQkJCS8qIHNhdmUgYXIuYnNwc3RvcmUgKi8JCQlcCisJOzsJCQkJCQkJCQkJCVwKKyhwVVN0aykJbW92IGFyLmJzcHN0b3JlPXIyMjsJCQkJLyogc3dpdGNoIHRvIGtlcm5lbCBSQlMgKi8JCVwKKyhwS1N0aykgYWRkbCByMT0tSUE2NF9QVF9SRUdTX1NJWkUscjE7CQkJLyogaWYgaW4ga2VybmVsIG1vZGUsIHVzZSBzcCAocjEyKSAqLwlcCisJOzsJCQkJCQkJCQkJCVwKKyhwVVN0aykJbW92IHIxOD1hci5ic3A7CQkJCQkJCQkJCVwKKyhwVVN0aykJbW92IGFyLnJzYz0weDM7CQkvKiBzZXQgZWFnZXIgbW9kZSwgcGwgMCwgbGl0dGxlLWVuZGlhbiwgbG9hZHJzPTAgKi8JCVwKKwlhZGRzIHIxNz0yKkwxX0NBQ0hFX0JZVEVTLHIxOwkJLyogcmVhbGx5OiBiaWdnZXN0IGNhY2hlLWxpbmUgc2l6ZSAqLwkJXAorCWFkZHMgcjE2PVBUKENSX0lQU1IpLHIxOwkJCQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJbGZldGNoLmZhdWx0LmV4Y2wubnQxIFtyMTddLEwxX0NBQ0hFX0JZVEVTOwkJCQkJCVwKKwlzdDggW3IxNl09cjI5OwkJLyogc2F2ZSBjci5pcHNyICovCQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJbGZldGNoLmZhdWx0LmV4Y2wubnQxIFtyMTddOwkJCQkJCQkJXAorCXRiaXQubnogcDE1LHAwPXIyOSxJQTY0X1BTUl9JX0JJVDsJCQkJCQkJXAorCW1vdiByMjk9YjAJCQkJCQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJV09SS0FST1VORDsJCQkJCQkJCQkJXAorCWFkZHMgcjE2PVBUKFI4KSxyMTsJLyogaW5pdGlhbGl6ZSBmaXJzdCBiYXNlIHBvaW50ZXIgKi8JCQkJXAorCWFkZHMgcjE3PVBUKFI5KSxyMTsJLyogaW5pdGlhbGl6ZSBzZWNvbmQgYmFzZSBwb2ludGVyICovCQkJCVwKKyhwS1N0aykJbW92IHIxOD1yMDsJCS8qIG1ha2Ugc3VyZSByMTggaXNuJ3QgTmFUICovCQkJCQlcCisJOzsJCQkJCQkJCQkJCVwKKy5tZW0ub2Zmc2V0IDAsMDsgc3Q4LnNwaWxsIFtyMTZdPXI4LDE2OwkJCQkJCQkJXAorLm1lbS5vZmZzZXQgOCwwOyBzdDguc3BpbGwgW3IxN109cjksMTY7CQkJCQkJCQlcCisgICAgICAgIDs7CQkJCQkJCQkJCQlcCisubWVtLm9mZnNldCAwLDA7IHN0OC5zcGlsbCBbcjE2XT1yMTAsMjQ7CQkJCQkJCVwKKwltb3ZsIHI4PVhTSV9QUkVDT1ZFUl9JRlM7CQkJCQkJCQlcCisubWVtLm9mZnNldCA4LDA7IHN0OC5zcGlsbCBbcjE3XT1yMTEsMjQ7CQkJCQkJCVwKKyAgICAgICAgOzsJCQkJCQkJCQkJCVwKKwkvKiB4ZW4gc3BlY2lhbCBoYW5kbGluZyBmb3IgcG9zc2libHkgbGF6eSBjb3ZlciAqLwkJCQkJXAorCS8qIFNBVkVfTUlOIGNhc2UgaW4gZGlzcGF0Y2hfaWEzMl9oYW5kbGVyOiBtb3YgcjMwPXIwICovCQkJCVwKKwlsZDggcjMwPVtyOF07CQkJCQkJCQkJCVwKKyhwVVN0aykJc3ViIHIxOD1yMTgscjIyOwkvKiByMTg9UlNFLm5kaXJ0eSo4ICovCQkJCQkJXAorCXN0OCBbcjE2XT1yMjgsMTY7CS8qIHNhdmUgY3IuaWlwICovCQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJc3Q4IFtyMTddPXIzMCwxNjsJLyogc2F2ZSBjci5pZnMgKi8JCQkJCQlcCisJbW92IHI4PWFyLmNjdjsJCQkJCQkJCQkJXAorCW1vdiByOT1hci5jc2Q7CQkJCQkJCQkJCVwKKwltb3YgcjEwPWFyLnNzZDsJCQkJCQkJCQkJXAorCW1vdmwgcjExPUZQU1JfREVGQVVMVDsgICAvKiBMLXVuaXQgKi8JCQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJc3Q4IFtyMTZdPXIyNSwxNjsJLyogc2F2ZSBhci51bmF0ICovCQkJCQkJXAorCXN0OCBbcjE3XT1yMjYsMTY7CS8qIHNhdmUgYXIucGZzICovCQkJCQkJXAorCXNobCByMTg9cjE4LDE2OwkJLyogY29tcHV0ZSBhci5yc2MgdG8gYmUgdXNlZCBmb3IgImxvYWRycyIgKi8JCQlcCisJOzsJCQkJCQkJCQkJCVwKKwlzdDggW3IxNl09cjI3LDE2OwkvKiBzYXZlIGFyLnJzYyAqLwkJCQkJCVwKKyhwVVN0aykJc3Q4IFtyMTddPXIyNCwxNjsJLyogc2F2ZSBhci5ybmF0ICovCQkJCQkJXAorKHBLU3RrKQlhZGRzIHIxNz0xNixyMTc7CS8qIHNraXAgb3ZlciBhcl9ybmF0IGZpZWxkICovCQkJCQlcCisJOzsJCQkvKiBhdm9pZCBSQVcgb24gcjE2ICYgcjE3ICovCQkJCQlcCisocFVTdGspCXN0OCBbcjE2XT1yMjMsMTY7CS8qIHNhdmUgYXIuYnNwc3RvcmUgKi8JCQkJCQlcCisJc3Q4IFtyMTddPXIzMSwxNjsJLyogc2F2ZSBwcmVkaWNhdGVzICovCQkJCQkJXAorKHBLU3RrKQlhZGRzIHIxNj0xNixyMTY7CS8qIHNraXAgb3ZlciBhcl9ic3BzdG9yZSBmaWVsZCAqLwkJCQlcCisJOzsJCQkJCQkJCQkJCVwKKwlzdDggW3IxNl09cjI5LDE2OwkvKiBzYXZlIGIwICovCQkJCQkJCVwKKwlzdDggW3IxN109cjE4LDE2OwkvKiBzYXZlIGFyLnJzYyB2YWx1ZSBmb3IgImxvYWRycyIgKi8JCQkJXAorCWNtcC5lcSBwTm9uU3lzLHBTeXM9cjAscjAJLyogaW5pdGlhbGl6ZSBwU3lzPTAsIHBOb25TeXM9MSAqLwkJCVwKKwk7OwkJCQkJCQkJCQkJXAorLm1lbS5vZmZzZXQgMCwwOyBzdDguc3BpbGwgW3IxNl09cjIwLDE2OwkvKiBzYXZlIG9yaWdpbmFsIHIxICovCQkJCVwKKy5tZW0ub2Zmc2V0IDgsMDsgc3Q4LnNwaWxsIFtyMTddPXIxMiwxNjsJCQkJCQkJXAorCWFkZHMgcjEyPS0xNixyMTsJLyogc3dpdGNoIHRvIGtlcm5lbCBtZW1vcnkgc3RhY2sgKHdpdGggMTYgYnl0ZXMgb2Ygc2NyYXRjaCkgKi8JXAorCTs7CQkJCQkJCQkJCQlcCisubWVtLm9mZnNldCAwLDA7IHN0OC5zcGlsbCBbcjE2XT1yMTMsMTY7CQkJCQkJCVwKKy5tZW0ub2Zmc2V0IDgsMDsgc3Q4LnNwaWxsIFtyMTddPXIyMSwxNjsJLyogc2F2ZSBhci5mcHNyICovCQkJCVwKKwltb3YgcjEzPUlBNjRfS1IoQ1VSUkVOVCk7CS8qIGVzdGFibGlzaCBgY3VycmVudCcgKi8JCQkJXAorCTs7CQkJCQkJCQkJCQlcCisubWVtLm9mZnNldCAwLDA7IHN0OC5zcGlsbCBbcjE2XT1yMTUsMTY7CQkJCQkJCVwKKy5tZW0ub2Zmc2V0IDgsMDsgc3Q4LnNwaWxsIFtyMTddPXIxNCwxNjsJCQkJCQkJXAorCTs7CQkJCQkJCQkJCQlcCisubWVtLm9mZnNldCAwLDA7IHN0OC5zcGlsbCBbcjE2XT1yMiwxNjsJCQkJCQkJCVwKKy5tZW0ub2Zmc2V0IDgsMDsgc3Q4LnNwaWxsIFtyMTddPXIzLDE2OwkJCQkJCQkJXAorCUFDQ09VTlRfR0VUX1NUQU1QCQkJCQkJCQkJXAorCWFkZHMgcjI9SUE2NF9QVF9SRUdTX1IxNl9PRkZTRVQscjE7CQkJCQkJCVwKKwk7OwkJCQkJCQkJCQkJXAorCUVYVFJBOwkJCQkJCQkJCQkJXAorCW1vdmwgcjE9X19ncDsJCS8qIGVzdGFibGlzaCBrZXJuZWwgZ2xvYmFsIHBvaW50ZXIgKi8JCQkJXAorCTs7CQkJCQkJCQkJCQlcCisJQUNDT1VOVF9TWVNfRU5URVIJCQkJCQkJCQlcCisJQlNXXzEocjMscjE0KTsJLyogc3dpdGNoIGJhY2sgdG8gYmFuayAxIChtdXN0IGJlIGxhc3QgaW4gaW5zbiBncm91cCkgKi8JCVwKKwk7OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQ0MWE3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfWEVOX1BBR0VfSAorI2RlZmluZSBfQVNNX0lBNjRfWEVOX1BBR0VfSAorCisjZGVmaW5lIElOVkFMSURfUDJNX0VOVFJZCSh+MFVMKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWZuX3RvX3Bmbih1bnNpZ25lZCBsb25nIG1mbikKK3sKKwlyZXR1cm4gbWZuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGZuX3RvX21mbih1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gcGZuOworfQorCisjZGVmaW5lIHBoeXNfdG9fbWFjaGluZV9tYXBwaW5nX3ZhbGlkKF94KQkoMSkKKworc3RhdGljIGlubGluZSB2b2lkICptZm5fdG9fdmlydCh1bnNpZ25lZCBsb25nIG1mbikKK3sKKwlyZXR1cm4gX192YShtZm4gPDwgUEFHRV9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX21mbih2b2lkICp2aXJ0KQoreworCXJldHVybiBfX3BhKHZpcnQpID4+IFBBR0VfU0hJRlQ7Cit9CisKKy8qIGZvciB0cG1mcm9udC5jICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19tYWNoaW5lKHZvaWQgKnZpcnQpCit7CisJcmV0dXJuIF9fcGEodmlydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGh5c190b19tYWNoaW5lKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG1mbikKK3sKKwkvKiBub3RoaW5nICovCit9CisKKyNkZWZpbmUgcHRlX21mbihfeCkJcHRlX3BmbihfeCkKKyNkZWZpbmUgbWZuX3B0ZShfeCwgX3kpCV9fcHRlX21hKDApCQkvKiB1bm1vZGlmaWVkIHVzZSAqLworI2RlZmluZSBfX3B0ZV9tYShfeCkJKChwdGVfdCkgeyhfeCl9KSAgICAgICAgLyogdW5tb2RpZmllZCB1c2UgKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9YRU5fUEFHRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3ByaXZvcC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wcml2b3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWVjNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wcml2b3AuaApAQCAtMCwwICsxLDEyOSBAQAorI2lmbmRlZiBfQVNNX0lBNjRfWEVOX1BSSVZPUF9ICisjZGVmaW5lIF9BU01fSUE2NF9YRU5fUFJJVk9QX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhbiBNYWdlbmhlaW1lciA8ZGFuLm1hZ2VuaGVpbWVyQGhwLmNvbT4KKyAqCisgKiBQYXJhdmlydHVhbGl6YXRpb25zIG9mIHByaXZpbGVnZWQgb3BlcmF0aW9ucyBmb3IgWGVuL2lhNjQKKyAqCisgKgorICogaW5saW5lIHByaXZvcCBhbmQgcGFyYXZpcnRfYWx0IHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogYXJjaC1pYTY0LmggcmVxdWlyZXMgdWludDY0X3QgKi8KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS94ZW4vaW50ZXJmYWNlLmg+CisKKy8qIEF0IDEgTUIsIGJlZm9yZSBwZXItY3B1IHNwYWNlIGJ1dCBzdGlsbCBhZGRyZXNzYWJsZSB1c2luZyBhZGRsIGluc3RlYWQKKyAgIG9mIG1vdmwuICovCisjZGVmaW5lIFhTSV9CQVNFCQkJMHhmZmZmZmZmZmZmZjAwMDAwCisKKy8qIEFkZHJlc3Mgb2YgbWFwcGVkIHJlZ3MuICAqLworI2RlZmluZSBYTUFQUEVEUkVHU19CQVNFCQkoWFNJX0JBU0UgKyBYU0lfU0laRSkKKworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBYRU5fSFlQRVJfUkZJCQkJYnJlYWsgSFlQRVJQUklWT1BfUkZJCisjZGVmaW5lIFhFTl9IWVBFUl9SU01fUFNSX0RUCQlicmVhayBIWVBFUlBSSVZPUF9SU01fRFQKKyNkZWZpbmUgWEVOX0hZUEVSX1NTTV9QU1JfRFQJCWJyZWFrIEhZUEVSUFJJVk9QX1NTTV9EVAorI2RlZmluZSBYRU5fSFlQRVJfQ09WRVIJCQlicmVhayBIWVBFUlBSSVZPUF9DT1ZFUgorI2RlZmluZSBYRU5fSFlQRVJfSVRDX0QJCQlicmVhayBIWVBFUlBSSVZPUF9JVENfRAorI2RlZmluZSBYRU5fSFlQRVJfSVRDX0kJCQlicmVhayBIWVBFUlBSSVZPUF9JVENfSQorI2RlZmluZSBYRU5fSFlQRVJfU1NNX0kJCQlicmVhayBIWVBFUlBSSVZPUF9TU01fSQorI2RlZmluZSBYRU5fSFlQRVJfR0VUX0lWUgkJYnJlYWsgSFlQRVJQUklWT1BfR0VUX0lWUgorI2RlZmluZSBYRU5fSFlQRVJfVEhBU0gJCQlicmVhayBIWVBFUlBSSVZPUF9USEFTSAorI2RlZmluZSBYRU5fSFlQRVJfSVRSX0QJCQlicmVhayBIWVBFUlBSSVZPUF9JVFJfRAorI2RlZmluZSBYRU5fSFlQRVJfU0VUX0tSCQlicmVhayBIWVBFUlBSSVZPUF9TRVRfS1IKKyNkZWZpbmUgWEVOX0hZUEVSX0dFVF9QU1IJCWJyZWFrIEhZUEVSUFJJVk9QX0dFVF9QU1IKKyNkZWZpbmUgWEVOX0hZUEVSX1NFVF9SUjBfVE9fUlI0CWJyZWFrIEhZUEVSUFJJVk9QX1NFVF9SUjBfVE9fUlI0CisKKyNkZWZpbmUgWFNJX0lGUwkJCQkoWFNJX0JBU0UgKyBYU0lfSUZTX09GUykKKyNkZWZpbmUgWFNJX1BSRUNPVkVSX0lGUwkJKFhTSV9CQVNFICsgWFNJX1BSRUNPVkVSX0lGU19PRlMpCisjZGVmaW5lIFhTSV9JRkEJCQkJKFhTSV9CQVNFICsgWFNJX0lGQV9PRlMpCisjZGVmaW5lIFhTSV9JU1IJCQkJKFhTSV9CQVNFICsgWFNJX0lTUl9PRlMpCisjZGVmaW5lIFhTSV9JSU0JCQkJKFhTSV9CQVNFICsgWFNJX0lJTV9PRlMpCisjZGVmaW5lIFhTSV9JVElSCQkJKFhTSV9CQVNFICsgWFNJX0lUSVJfT0ZTKQorI2RlZmluZSBYU0lfUFNSX0lfQUREUgkJCShYU0lfQkFTRSArIFhTSV9QU1JfSV9BRERSX09GUykKKyNkZWZpbmUgWFNJX1BTUl9JQwkJCShYU0lfQkFTRSArIFhTSV9QU1JfSUNfT0ZTKQorI2RlZmluZSBYU0lfSVBTUgkJCShYU0lfQkFTRSArIFhTSV9JUFNSX09GUykKKyNkZWZpbmUgWFNJX0lJUAkJCQkoWFNJX0JBU0UgKyBYU0lfSUlQX09GUykKKyNkZWZpbmUgWFNJX0IxTkFUCQkJKFhTSV9CQVNFICsgWFNJX0IxTkFUU19PRlMpCisjZGVmaW5lIFhTSV9CQU5LMV9SMTYJCQkoWFNJX0JBU0UgKyBYU0lfQkFOSzFfUjE2X09GUykKKyNkZWZpbmUgWFNJX0JBTktOVU0JCQkoWFNJX0JBU0UgKyBYU0lfQkFOS05VTV9PRlMpCisjZGVmaW5lIFhTSV9JSEEJCQkJKFhTSV9CQVNFICsgWFNJX0lIQV9PRlMpCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEluc3RydWN0aW9ucyBwYXJhdmlydHVhbGl6ZWQgZm9yIGNvcnJlY3RuZXNzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAiZmMiIGFuZCAidGhhc2giIGFyZSBwcml2aWxlZ2Utc2Vuc2l0aXZlIGluc3RydWN0aW9ucywgbWVhbmluZyB0aGV5CisgKiAgbWF5IGhhdmUgZGlmZmVyZW50IHNlbWFudGljcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGV5IGFyZSBleGVjdXRlZAorICogIGF0IFBMMCB2cyBQTCE9MC4gIFdoZW4gcGFyYXZpcnR1YWxpemVkLCB0aGVzZSBpbnN0cnVjdGlvbnMgbXVzdG4ndAorICogIGJlIGFsbG93ZWQgdG8gZXhlY3V0ZSBkaXJlY3RseSwgbGVzdCBpbmNvcnJlY3Qgc2VtYW50aWNzIHJlc3VsdC4gKi8KK2V4dGVybiB2b2lkIHhlbl9mYyh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGVuX3RoYXNoKHVuc2lnbmVkIGxvbmcgYWRkcik7CisKKy8qIE5vdGUgdGhhdCAidHRhZyIgYW5kICJjb3ZlciIgYXJlIGFsc28gcHJpdmlsZWdlLXNlbnNpdGl2ZTsgInR0YWciCisgKiBpcyBub3QgY3VycmVudGx5IHVzZWQgKHRob3VnaCBpdCBtYXkgYmUgaW4gYSBsb25nLWZvcm1hdCBWSFBUIHN5c3RlbSEpCisgKiBhbmQgdGhlIHNlbWFudGljcyBvZiBjb3ZlciBvbmx5IGNoYW5nZSBpZiBwc3IuaWMgaXMgb2ZmIHdoaWNoIGlzIHZlcnkKKyAqIHJhcmUgKGFuZCBjdXJyZW50bHkgbm9uLWV4aXN0ZW50IG91dHNpZGUgb2YgYXNzZW1ibHkgY29kZSAqLworCisvKiBUaGVyZSBhcmUgYWxzbyBwcml2aWxlZ2Utc2Vuc2l0aXZlIHJlZ2lzdGVycy4gIFRoZXNlIHJlZ2lzdGVycyBhcmUKKyAqIHJlYWRhYmxlIGF0IGFueSBwcml2aWxlZ2UgbGV2ZWwgYnV0IG9ubHkgd3JpdGFibGUgYXQgUEwwLiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGVuX2dldF9jcHVpZChpbnQgaW5kZXgpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGVuX2dldF9wbWQoaW50IGluZGV4KTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGVuX2dldF9lZmxhZyh2b2lkKTsJLyogc2VlIHhlbl9pYTY0X2dldHJlZyAqLworZXh0ZXJuIHZvaWQgeGVuX3NldF9lZmxhZyh1bnNpZ25lZCBsb25nKTsJLyogc2VlIHhlbl9pYTY0X3NldHJlZyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW5zdHJ1Y3Rpb25zIHBhcmF2aXJ0dWFsaXplZCBmb3IgcGVyZm9ybWFuY2UgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFhlbiB1c2VzIG1lbW9yeS1tYXBwZWQgdmlydHVhbCBwcml2aWxlZ2VkIHJlZ2lzdGVycyBmb3IgYWNjZXNzIHRvIG1hbnkKKyAqIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBwcml2aWxlZ2VkIHJlZ2lzdGVycy4gIFNvbWUsIGxpa2UgdGhlIHByb2Nlc3NvcgorICogc3RhdHVzIHJlZ2lzdGVyIChwc3IpLCBhcmUgYnJva2VuIHVwIGludG8gbXVsdGlwbGUgbWVtb3J5IGxvY2F0aW9ucy4KKyAqIE90aGVycywgbGlrZSAicGVuZCIsIGFyZSBhYnN0cmFjdGlvbnMgYmFzZWQgb24gcHJpdmlsZWdlZCByZWdpc3RlcnMuCisgKiAiUGVuZCIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgaWYgcmVhZGluZyBjci5pdnIgd291bGQgcmV0dXJuIGEKKyAqIChub24tc3B1cmlvdXMpIGludGVycnVwdC4gKi8KKyNkZWZpbmUgWEVOX01BUFBFRFJFR1MgKChzdHJ1Y3QgbWFwcGVkX3JlZ3MgKilYTUFQUEVEUkVHU19CQVNFKQorCisjZGVmaW5lIFhTSV9QU1JfSQkJCVwKKwkoKlhFTl9NQVBQRURSRUdTLT5pbnRlcnJ1cHRfbWFza19hZGRyKQorI2RlZmluZSB4ZW5fZ2V0X3ZpcnR1YWxfcHNyX2koKQkJXAorCSghWFNJX1BTUl9JKQorI2RlZmluZSB4ZW5fc2V0X3ZpcnR1YWxfcHNyX2koX3ZhbCkJXAorCSh7IFhTSV9QU1JfSSA9ICh1aW50OF90KShfdmFsKSA/IDAgOiAxOyB9KQorI2RlZmluZSB4ZW5fc2V0X3ZpcnR1YWxfcHNyX2ljKF92YWwpCVwKKwkoeyBYRU5fTUFQUEVEUkVHUy0+aW50ZXJydXB0X2NvbGxlY3Rpb25fZW5hYmxlZCA9IF92YWwgPyAxIDogMDsgfSkKKyNkZWZpbmUgeGVuX2dldF92aXJ0dWFsX3BlbmQoKQkJXAorCSgqKCgodWludDhfdCAqKVhFTl9NQVBQRURSRUdTLT5pbnRlcnJ1cHRfbWFza19hZGRyKSAtIDEpKQorCisvKiBBbHRob3VnaCBhbGwgcHJpdmlsZWdlZCBvcGVyYXRpb25zIGNhbiBiZSBsZWZ0IHRvIHRyYXAgYW5kIHdpbGwKKyAqIGJlIHByb3Blcmx5IGhhbmRsZWQgYnkgWGVuLCBzb21lIGFyZSBmcmVxdWVudCBlbm91Z2ggdGhhdCB3ZSB1c2UKKyAqIGh5cGVycHJpdm9wcyBmb3IgcGVyZm9ybWFuY2UuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyB4ZW5fZ2V0X3Bzcih2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9nZXRfaXZyKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGVuX2dldF90cHIodm9pZCk7CitleHRlcm4gdm9pZCB4ZW5faHlwZXJfc3NtX2kodm9pZCk7CitleHRlcm4gdm9pZCB4ZW5fc2V0X2l0bSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIHhlbl9zZXRfdHByKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgeGVuX2VvaSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9nZXRfcnIodW5zaWduZWQgbG9uZyBpbmRleCk7CitleHRlcm4gdm9pZCB4ZW5fc2V0X3JyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2V4dGVybiB2b2lkIHhlbl9zZXRfcnIwX3RvX3JyNCh1bnNpZ25lZCBsb25nIHZhbDAsIHVuc2lnbmVkIGxvbmcgdmFsMSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbDIsIHVuc2lnbmVkIGxvbmcgdmFsMywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbDQpOworZXh0ZXJuIHZvaWQgeGVuX3NldF9rcih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHZhbCk7CitleHRlcm4gdm9pZCB4ZW5fcHRjZ2EodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1hFTl9QUklWT1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi94Y29tX2hjYWxsLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3hjb21faGNhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGIyOTUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi94Y29tX2hjYWxsLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUcmlzdGFuIEdpbmdvbGQgPHRyaXN0YW4uZ2luZ29sZEBidWxsLm5ldD4sIEJ1bGwgU0FTCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfWEVOX1hDT01fSENBTExfSAorI2RlZmluZSBfQVNNX0lBNjRfWEVOX1hDT01fSENBTExfSAorCisvKiBUaGVzZSBmdW5jdGlvbiBjcmVhdGVzIGlubGluZSBvciBtaW5pIGRlc2NyaXB0b3IgZm9yIHRoZSBwYXJhbWV0ZXJzIGFuZAorICAgY2FsbHMgdGhlIGNvcnJlc3BvbmRpbmcgeGVuY29tbV9hcmNoX2h5cGVyY2FsbF9YLgorICAgQXJjaGl0ZWN0dXJlcyBzaG91bGQgZGVmaW5lcyBIWVBFUlZJU09SX3h4eCBhcyB4ZW5jb21tX2h5cGVyY2FsbF94eHggdW5sZXNzCisgICB0aGV5IHdhbnQgdG8gdXNlIHRoZWlyIG93biB3cmFwcGVyLiAgKi8KK2V4dGVybiBpbnQgeGVuY29tbV9oeXBlcmNhbGxfY29uc29sZV9pbyhpbnQgY21kLCBpbnQgY291bnQsIGNoYXIgKnN0cik7CisKK2V4dGVybiBpbnQgeGVuY29tbV9oeXBlcmNhbGxfZXZlbnRfY2hhbm5lbF9vcChpbnQgY21kLCB2b2lkICpvcCk7CisKK2V4dGVybiBpbnQgeGVuY29tbV9oeXBlcmNhbGxfeGVuX3ZlcnNpb24oaW50IGNtZCwgdm9pZCAqYXJnKTsKKworZXh0ZXJuIGludCB4ZW5jb21tX2h5cGVyY2FsbF9waHlzZGV2X29wKGludCBjbWQsIHZvaWQgKm9wKTsKKworZXh0ZXJuIGludCB4ZW5jb21tX2h5cGVyY2FsbF9ncmFudF90YWJsZV9vcCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICpvcCwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCk7CisKK2V4dGVybiBpbnQgeGVuY29tbV9oeXBlcmNhbGxfc2NoZWRfb3AoaW50IGNtZCwgdm9pZCAqYXJnKTsKKworZXh0ZXJuIGludCB4ZW5jb21tX2h5cGVyY2FsbF9tdWx0aWNhbGwodm9pZCAqY2FsbF9saXN0LCBpbnQgbnJfY2FsbHMpOworCitleHRlcm4gaW50IHhlbmNvbW1faHlwZXJjYWxsX2NhbGxiYWNrX29wKGludCBjbWQsIHZvaWQgKmFyZyk7CisKK2V4dGVybiBpbnQgeGVuY29tbV9oeXBlcmNhbGxfbWVtb3J5X29wKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKK2V4dGVybiBpbnQgeGVuY29tbV9oeXBlcmNhbGxfc3VzcGVuZCh1bnNpZ25lZCBsb25nIHNyZWMpOworCitleHRlcm4gbG9uZyB4ZW5jb21tX2h5cGVyY2FsbF92Y3B1X29wKGludCBjbWQsIGludCBjcHUsIHZvaWQgKmFyZyk7CisKK2V4dGVybiBsb25nIHhlbmNvbW1faHlwZXJjYWxsX29wdF9mZWF0dXJlKHZvaWQgKmFyZyk7CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfWEVOX1hDT01fSENBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi94ZW5jb21tLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3hlbmNvbW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGVkNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi94ZW5jb21tLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9YRU5fWEVOQ09NTV9ICisjZGVmaW5lIF9BU01fSUE2NF9YRU5fWEVOQ09NTV9ICisKKyNpbmNsdWRlIDx4ZW4veGVuY29tbS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKy8qIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgaHlwZXJjYWxsLiAgKi8KK2V4dGVybiB2b2lkIHhlbmNvbW1faW5pdGlhbGl6ZSh2b2lkKTsKK2V4dGVybiBpbnQgeGVuY29tbV9pc19pbml0aWFsaXplZCh2b2lkKTsKKworLyogQ2hlY2sgaWYgdmlydHVhbCBjb250aWd1aXR5IG1lYW5zIHBoeXNpY2FsIGNvbnRpZ3VpdHkKKyAqIHdoZXJlIHRoZSBwYXNzZWQgYWRkcmVzcyBpcyBhIHBvaW50ZXIgdmFsdWUgaW4gdmlydHVhbCBhZGRyZXNzLgorICogT24gaWE2NCwgaWRlbnRpdHkgbWFwcGluZyBhcmVhIGluIHJlZ2lvbiA3IG9yIHRoZSBwaWVjZSBvZiByZWdpb24gNQorICogdGhhdCBpcyBtYXBwZWQgYnkgaXRyW0lBNjRfVFJfS0VSTkVMXS9kdHJbSUE2NF9UUl9LRVJORUxdCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHhlbmNvbW1faXNfcGh5c19jb250aWd1b3VzKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKFBBR0VfT0ZGU0VUIDw9IGFkZHIgJiYKKwkJYWRkciA8IChQQUdFX09GRlNFVCArICgxVUwgPDwgSUE2NF9NQVhfUEhZU19CSVRTKSkpIHx8CisJCShLRVJORUxfU1RBUlQgPD0gYWRkciAmJgorCQkgYWRkciA8IEtFUk5FTF9TVEFSVCArIEtFUk5FTF9UUl9QQUdFX1NJWkUpOworfQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1hFTl9YRU5DT01NX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDg3ZmVhMTEuLmMzODFlYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtNDIsNiArNDIsMTAgQEAKIGlmbmVxICgkKENPTkZJR19JQTY0X0VTSSksKQogb2JqLXkJCQkJKz0gZXNpX3N0dWIubwkjIG11c3QgYmUgaW4ga2VybmVsIHByb3BlcgogZW5kaWYKK29iai0kKENPTkZJR19ETUFSKQkJKz0gcGNpLWRtYS5vCitpZmVxICgkKENPTkZJR19ETUFSKSwgeSkKK29iai0kKENPTkZJR19TV0lPVExCKQkJKz0gcGNpLXN3aW90bGIubworZW5kaWYKIAogIyBUaGUgZ2F0ZSBEU08gaW1hZ2UgaXMgYnVpbHQgdXNpbmcgYSBzcGVjaWFsIGxpbmtlciBzY3JpcHQuCiB0YXJnZXRzICs9IGdhdGUuc28gZ2F0ZS1zeW1zLm8KQEAgLTExMiw1ICsxMTYsMjMgQEAKIEFTTV9QQVJBVklSVF9PQkpTID0gaXZ0Lm8gZW50cnkubwogZGVmaW5lIHBhcmF2aXJ0dWFsaXplZF9uYXRpdmUKIEFGTEFHU18kKDEpICs9IC1EX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfTkFUSVZFCitBRkxBR1NfcHZjaGstc2VkLSQoMSkgKz0gLURfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9QVkNIRUNLCitleHRyYS15ICs9IHB2Y2hrLSQoMSkKIGVuZGVmCiAkKGZvcmVhY2ggb2JqLCQoQVNNX1BBUkFWSVJUX09CSlMpLCQoZXZhbCAkKGNhbGwgcGFyYXZpcnR1YWxpemVkX25hdGl2ZSwkKG9iaikpKSkKKworIworIyBDaGVja2VyIGZvciBwYXJhdmlydHVhbGl6YXRpb25zIG9mIHByaXZpbGVnZWQgb3BlcmF0aW9ucy4KKyMKK3F1aWV0X2NtZF9wdl9jaGVja19zZWQgPSBQVkNISyAgICRACitkZWZpbmUgY21kX3B2X2NoZWNrX3NlZAorCXNlZCAtZiAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9zY3JpcHRzL3B2Y2hlY2suc2VkICQ8ID4gJEAKK2VuZGVmCisKKyQob2JqKS9wdmNoay1zZWQtJS5zOiAkKHNyYykvJS5TICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL3NjcmlwdHMvcHZjaGVjay5zZWQgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsYXNfc19TKQorJChvYmopL3B2Y2hrLSUuczogJChvYmopL3B2Y2hrLXNlZC0lLnMgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxwdl9jaGVja19zZWQpCiskKG9iaikvcHZjaGstJS5vOiAkKG9iaikvcHZjaGstJS5zIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsYXNfb19TKQorLlBSRUNJT1VTOiAkKG9iaikvcHZjaGstc2VkLSUucyAkKG9iaikvcHZjaGstJS5zICQob2JqKS9wdmNoay0lLm8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggNWQxZWI3ZS4uMDYzNTAxNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9zYWwuaD4KICNpbmNsdWRlIDxhc20vY3ljbG9uZS5oPgorI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgogCiAjZGVmaW5lIEJBRF9NQURUX0VOVFJZKGVudHJ5LCBlbmQpICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkoIWVudHJ5KSB8fCAodW5zaWduZWQgbG9uZyllbnRyeSArIHNpemVvZigqZW50cnkpID4gZW5kIHx8ICBcCkBAIC05MSw2ICs5Miw5IEBACiAJc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcDsKIAlzdHJ1Y3QgYWNwaV90YWJsZV94c2R0ICp4c2R0OwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGRyOworI2lmZGVmIENPTkZJR19ETUFSCisJdTY0IGksIG5lbnRyaWVzOworI2VuZGlmCiAKIAlyc2RwX3BoeXMgPSBhY3BpX2ZpbmRfcnNkcCgpOwogCWlmICghcnNkcF9waHlzKSB7CkBAIC0xMjEsOCArMTI1LDIyIEBACiAJCQlyZXR1cm4gInV2IjsKIAkJZWxzZQogCQkJcmV0dXJuICJzbjIiOworCX0gZWxzZSBpZiAoeGVuX3B2X2RvbWFpbigpICYmICFzdHJjbXAoaGRyLT5vZW1faWQsICJYRU4iKSkgeworCQlyZXR1cm4gInhlbiI7CiAJfQogCisjaWZkZWYgQ09ORklHX0RNQVIKKwkvKiBMb29rIGZvciBJbnRlbCBJT01NVSAqLworCW5lbnRyaWVzID0gKGhkci0+bGVuZ3RoIC0gc2l6ZW9mKCpoZHIpKSAvCisJCQkgc2l6ZW9mKHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeVswXSk7CisJZm9yIChpID0gMDsgaSA8IG5lbnRyaWVzOyBpKyspIHsKKwkJaGRyID0gX192YSh4c2R0LT50YWJsZV9vZmZzZXRfZW50cnlbaV0pOworCQlpZiAoc3RybmNtcChoZHItPnNpZ25hdHVyZSwgQUNQSV9TSUdfRE1BUiwKKwkJCXNpemVvZihBQ1BJX1NJR19ETUFSKSAtIDEpID09IDApCisJCQlyZXR1cm4gImRpZ192dGQiOworCX0KKyNlbmRpZgorCiAJcmV0dXJuICJkaWciOwogI2Vsc2UKICMgaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfU0lNKQpAQCAtMTM3LDYgKzE1NSwxMCBAQAogCXJldHVybiAidXYiOwogIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0RJRykKIAlyZXR1cm4gImRpZyI7CisjIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfWEVOX0dVRVNUKQorCXJldHVybiAieGVuIjsKKyMgZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X0RJR19WVEQpCisJcmV0dXJuICJkaWdfdnRkIjsKICMgZWxzZQogIwllcnJvciBVbmtub3duIHBsYXRmb3JtLiAgRml4IGFjcGkuYy4KICMgZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA5NGM0NGIxLi43NDJkYmIxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xNiw2ICsxNiw5IEBACiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vbWNhLmg+CiAKKyNpbmNsdWRlIDxhc20veGVuL2ludGVyZmFjZS5oPgorI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgorCiAjaW5jbHVkZSAiLi4va2VybmVsL3NpZ2ZyYW1lLmgiCiAjaW5jbHVkZSAiLi4va2VybmVsL2ZzeXNjYWxsX2d0b2RfZGF0YS5oIgogCkBAIC0yODYsNCArMjg5LDMyIEBACiAJCW9mZnNldG9mIChzdHJ1Y3QgaXRjX2ppdHRlcl9kYXRhX3QsIGl0Y19qaXR0ZXIpKTsKIAlERUZJTkUoSUE2NF9JVENfTEFTVENZQ0xFX09GRlNFVCwKIAkJb2Zmc2V0b2YgKHN0cnVjdCBpdGNfaml0dGVyX2RhdGFfdCwgaXRjX2xhc3RjeWNsZSkpOworCisjaWZkZWYgQ09ORklHX1hFTgorCUJMQU5LKCk7CisKKwlERUZJTkUoWEVOX05BVElWRV9BU00sIFhFTl9OQVRJVkUpOworCURFRklORShYRU5fUFZfRE9NQUlOX0FTTSwgWEVOX1BWX0RPTUFJTik7CisKKyNkZWZpbmUgREVGSU5FX01BUFBFRF9SRUdfT0ZTKHN5bSwgZmllbGQpIFwKKwlERUZJTkUoc3ltLCAoWE1BUFBFRFJFR1NfT0ZTICsgb2Zmc2V0b2Yoc3RydWN0IG1hcHBlZF9yZWdzLCBmaWVsZCkpKQorCisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9QU1JfSV9BRERSX09GUywgaW50ZXJydXB0X21hc2tfYWRkcik7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JUFNSX09GUywgaXBzcik7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JSVBfT0ZTLCBpaXApOworCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfSUZTX09GUywgaWZzKTsKKwlERUZJTkVfTUFQUEVEX1JFR19PRlMoWFNJX1BSRUNPVkVSX0lGU19PRlMsIHByZWNvdmVyX2lmcyk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JU1JfT0ZTLCBpc3IpOworCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfSUZBX09GUywgaWZhKTsKKwlERUZJTkVfTUFQUEVEX1JFR19PRlMoWFNJX0lJUEFfT0ZTLCBpaXBhKTsKKwlERUZJTkVfTUFQUEVEX1JFR19PRlMoWFNJX0lJTV9PRlMsIGlpbSk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JSEFfT0ZTLCBpaGEpOworCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfSVRJUl9PRlMsIGl0aXIpOworCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfUFNSX0lDX09GUywgaW50ZXJydXB0X2NvbGxlY3Rpb25fZW5hYmxlZCk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9CQU5LTlVNX09GUywgYmFua251bSk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9CQU5LMF9SMTZfT0ZTLCBiYW5rMF9yZWdzWzBdKTsKKwlERUZJTkVfTUFQUEVEX1JFR19PRlMoWFNJX0JBTksxX1IxNl9PRlMsIGJhbmsxX3JlZ3NbMF0pOworCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfQjBOQVRTX09GUywgdmJuYXQpOworCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfQjFOQVRTX09GUywgdm5hdCk7CisjZW5kaWYgLyogQ09ORklHX1hFTiAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYwppbmRleCBkYTYwZTkwLi4yM2U5MTI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtOCwxMCArOCwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCmluZGV4IDUxYjc1Y2UuLmVmYWZmMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwpAQCAtMTMzNSw3ICsxMzM1LDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIC8qIGxvY2F0ZSB0aGUgc2l6ZSBmaW5kIGEgdGhlIGRlc2NyaXB0b3IgYXQgYSBjZXJ0YWluIGFkZHJlc3MgKi8KIHVuc2lnbmVkIGxvbmcgX19pbml0CiB2bWNvcmVfZmluZF9kZXNjcmlwdG9yX3NpemUgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwppbmRleCAwZGQ2YzE0Li43ZWYwYzU5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCkBAIC01MzQsNiArNTM0LDExIEBACiAgCXN0Zi5zcGlsbCBbcjE2XT1mMTAKICAJc3RmLnNwaWxsIFtyMTddPWYxMQogCWJyLmNhbGwuc3B0ay5tYW55IHJwPXN5c2NhbGxfdHJhY2VfZW50ZXIgLy8gZ2l2ZSBwYXJlbnQgYSBjaGFuY2UgdG8gY2F0Y2ggc3lzY2FsbCBhcmdzCisJY21wLmx0IHA2LHAwPXI4LHIwCQkJLy8gY2hlY2sgdHJhY2Vob29rCisJYWRkcyByMj1QVChSOCkrMTYsc3AJCQkvLyByMiA9ICZwdF9yZWdzLnI4CisJYWRkcyByMz1QVChSMTApKzE2LHNwCQkJLy8gcjMgPSAmcHRfcmVncy5yMTAKKwltb3YgcjEwPTAKKyhwNikJYnIuY29uZC5zcHRrIHN0cmFjZV9lcnJvcgkJLy8gc3lzY2FsbCBmYWlsZWQgLT4KIAlhZGRzIHIxNj1QVChGNikrMTYsc3AKIAlhZGRzIHIxNz1QVChGNykrMTYsc3AKIAk7OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUyBiL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKaW5kZXggNDE2YTk1Mi4uZjY3NWQ4ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUwpAQCAtNTgwLDcgKzU4MCw3IEBACiAJbW92IGIwPXIyOQkJCQkvLyByZXN0b3JlIGIwCiAJOzsKIAlzdDggW3IxN109cjE4CQkJCS8vIHN0b3JlIGJhY2sgdXBkYXRlZCBQVEUKLQlpdGMuZCByMTgJCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQorCUlUQ19EKHAwLCByMTgsIHIxNikJCQkvLyBpbnN0YWxsIHVwZGF0ZWQgUFRFCiAjZW5kaWYKIAltb3YgcHI9cjMxLC0xCQkJCS8vIHJlc3RvcmUgcHIKIAlSRkkKQEAgLTY0Niw3ICs2NDYsNyBAQAogCW1vdiBiMD1yMjkJCQkJLy8gcmVzdG9yZSBiMAogCTs7CiAJc3Q4IFtyMTddPXIxOAkJCQkvLyBzdG9yZSBiYWNrIHVwZGF0ZWQgUFRFCi0JaXRjLmkgcjE4CQkJCS8vIGluc3RhbGwgdXBkYXRlZCBQVEUKKwlJVENfSShwMCwgcjE4LCByMTYpCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQogI2VuZGlmIC8qICFDT05GSUdfU01QICovCiAJbW92IHByPXIzMSwtMQogCVJGSQpAQCAtNjk4LDcgKzY5OCw3IEBACiAJb3IgcjE4PV9QQUdFX0EscjE4CQkJLy8gc2V0IHRoZSBhY2Nlc3NlZCBiaXQKIAk7OwogCXN0OCBbcjE3XT1yMTgJCQkJLy8gc3RvcmUgYmFjayB1cGRhdGVkIFBURQotCWl0Yy5kIHIxOAkJCQkvLyBpbnN0YWxsIHVwZGF0ZWQgUFRFCisJSVRDX0QocDAsIHIxOCwgcjE2KQkJCS8vIGluc3RhbGwgdXBkYXRlZCBQVEUKICNlbmRpZgogCW1vdiBiMD1yMjkJCQkJLy8gcmVzdG9yZSBiMAogCW1vdiBwcj1yMzEsLTEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYwppbmRleCA2MGM2ZWY2Li43MDJhMDljIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKIC8qCkBAIC0xNjIsMyArMTYzLDgyIEBACiAKIAlyZXR1cm4gaWE2NF90ZWFyZG93bl9tc2lfaXJxKGlycSk7CiB9CisKKyNpZmRlZiBDT05GSUdfRE1BUgorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGRtYXJfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisJaW50IGNwdSA9IGZpcnN0X2NwdShtYXNrKTsKKworCisJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCXJldHVybjsKKworCWlmIChpcnFfcHJlcGFyZV9tb3ZlKGlycSwgY3B1KSkKKwkJcmV0dXJuOworCisJZG1hcl9tc2lfcmVhZChpcnEsICZtc2cpOworCisJbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOworCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7CisJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RJRF9NQVNLOworCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RJRF9DUFUoY3B1X3BoeXNpY2FsX2lkKGNwdSkpOworCisJZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3N0cnVjdCBpcnFfY2hpcCBkbWFyX21zaV90eXBlID0geworCS5uYW1lID0gIkRNQVJfTVNJIiwKKwkudW5tYXNrID0gZG1hcl9tc2lfdW5tYXNrLAorCS5tYXNrID0gZG1hcl9tc2lfbWFzaywKKwkuYWNrID0gaWE2NF9hY2tfbXNpX2lycSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IGRtYXJfbXNpX3NldF9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIgPSBpYTY0X21zaV9yZXRyaWdnZXJfaXJxLAorfTsKKworc3RhdGljIGludAorbXNpX2NvbXBvc2VfbXNnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOworCXVuc2lnbmVkIGRlc3Q7CisJY3B1bWFza190IG1hc2s7CisKKwljcHVzX2FuZChtYXNrLCBpcnFfdG9fZG9tYWluKGlycSksIGNwdV9vbmxpbmVfbWFwKTsKKwlkZXN0ID0gY3B1X3BoeXNpY2FsX2lkKGZpcnN0X2NwdShtYXNrKSk7CisKKwltc2ctPmFkZHJlc3NfaGkgPSAwOworCW1zZy0+YWRkcmVzc19sbyA9CisJCU1TSV9BRERSX0hFQURFUiB8CisJCU1TSV9BRERSX0RFU1RNT0RFX1BIWVMgfAorCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFUgfAorCQlNU0lfQUREUl9ERVNUSURfQ1BVKGRlc3QpOworCisJbXNnLT5kYXRhID0KKwkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKKwkJTVNJX0RBVEFfTEVWRUxfQVNTRVJUIHwKKwkJTVNJX0RBVEFfREVMSVZFUllfRklYRUQgfAorCQlNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCXJldHVybiAwOworfQorCitpbnQgYXJjaF9zZXR1cF9kbWFyX21zaSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCByZXQ7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJcmV0ID0gbXNpX2NvbXBvc2VfbXNnKE5VTEwsIGlycSwgJm1zZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZkbWFyX21zaV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsCisJCSJlZGdlIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0RNQVIgKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9uci1pcnFzLmMgYi9hcmNoL2lhNjQva2VybmVsL25yLWlycXMuYwppbmRleCA4MjczYWZjLi5lZTU2NDU3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL25yLWlycXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL25yLWlycXMuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vbmF0aXZlL2lycS5oPgorI2luY2x1ZGUgPGFzbS94ZW4vaXJxLmg+CiAKIHZvaWQgZm9vKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggYWZhZjViOS4uZGUzNWQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnQuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAKIHN0cnVjdCBwdl9pb3NhcGljX29wcyBwdl9pb3NhcGljX29wcyA9IHsKIAkucGNhdF9jb21wYXRfaW5pdCA9IGlhNjRfbmF0aXZlX2lvc2FwaWNfcGNhdF9jb21wYXRfaW5pdCwKLQkuZ2V0X2lycV9jaGlwID0gaWE2NF9uYXRpdmVfaW9zYXBpY19nZXRfaXJxX2NoaXAsCisJLl9fZ2V0X2lycV9jaGlwID0gaWE2NF9uYXRpdmVfaW9zYXBpY19nZXRfaXJxX2NoaXAsCiAKIAkuX19yZWFkID0gaWE2NF9uYXRpdmVfaW9zYXBpY19yZWFkLAogCS5fX3dyaXRlID0gaWE2NF9uYXRpdmVfaW9zYXBpY193cml0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRfaW5zdC5oIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9pbnN0LmgKaW5kZXggNWNhZDZmYi4uNjRkNmQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9pbnN0LmgKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9pbnN0LmgKQEAgLTIwLDcgKzIwLDkgQEAKICAqCiAgKi8KIAotI2lmZGVmIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX1hFTgorI2lmZGVmIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX1BWQ0hFQ0sKKyNpbmNsdWRlIDxhc20vbmF0aXZlL3B2Y2hrX2luc3QuaD4KKyNlbGlmIGRlZmluZWQoX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfWEVOKQogI2luY2x1ZGUgPGFzbS94ZW4vaW5zdC5oPgogI2luY2x1ZGUgPGFzbS94ZW4vbWluc3RhdGUuaD4KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGNpLWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTc1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL3BjaS1kbWEuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIER5bmFtaWMgRE1BIG1hcHBpbmcgc3VwcG9ydC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2lmZGVmIENPTkZJR19ETUFSCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CisKK2RtYV9hZGRyX3QgYmFkX2RtYV9hZGRyZXNzIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKGJhZF9kbWFfYWRkcmVzcyk7CisKK3N0YXRpYyBpbnQgaW9tbXVfc2FjX2ZvcmNlIF9fcmVhZF9tb3N0bHk7CisKK2ludCBub19pb21tdSBfX3JlYWRfbW9zdGx5OworI2lmZGVmIENPTkZJR19JT01NVV9ERUJVRworaW50IGZvcmNlX2lvbW11IF9fcmVhZF9tb3N0bHkgPSAxOworI2Vsc2UKK2ludCBmb3JjZV9pb21tdSBfX3JlYWRfbW9zdGx5OworI2VuZGlmCisKKy8qIFNldCB0aGlzIHRvIDEgaWYgdGhlcmUgaXMgYSBIVyBJT01NVSBpbiB0aGUgc3lzdGVtICovCitpbnQgaW9tbXVfZGV0ZWN0ZWQgX19yZWFkX21vc3RseTsKKworLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiBCZXR0ZXIgd291bGQKKyAgIGJlIHByb2JhYmx5IGEgc21hbGxlciBETUEgbWFzaywgYnV0IHRoaXMgaXMgYnVnLXRvLWJ1ZyBjb21wYXRpYmxlCisgICB0byBpMzg2LiAqLworc3RydWN0IGRldmljZSBmYWxsYmFja19kZXYgPSB7CisJLmJ1c19pZCA9ICJmYWxsYmFjayBkZXZpY2UiLAorCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLLAorCS5kbWFfbWFzayA9ICZmYWxsYmFja19kZXYuY29oZXJlbnRfZG1hX21hc2ssCit9OworCit2b2lkIF9faW5pdCBwY2lfaW9tbXVfYWxsb2Modm9pZCkKK3sKKwkvKgorCSAqIFRoZSBvcmRlciBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IGZvcgorCSAqIGZhbGwtYmFjay9mYWlsLW92ZXIgcmVhc29ucworCSAqLworCWRldGVjdF9pbnRlbF9pb21tdSgpOworCisjaWZkZWYgQ09ORklHX1NXSU9UTEIKKwlwY2lfc3dpb3RsYl9pbml0KCk7CisjZW5kaWYKK30KKworc3RhdGljIGludCBfX2luaXQgcGNpX2lvbW11X2luaXQodm9pZCkKK3sKKwlpZiAoaW9tbXVfZGV0ZWN0ZWQpCisJCWludGVsX2lvbW11X2luaXQoKTsKKworCXJldHVybiAwOworfQorCisvKiBNdXN0IGV4ZWN1dGUgYWZ0ZXIgUENJIHN1YnN5c3RlbSAqLworZnNfaW5pdGNhbGwocGNpX2lvbW11X2luaXQpOworCit2b2lkIHBjaV9pb21tdV9zaHV0ZG93bih2b2lkKQoreworCXJldHVybjsKK30KKwordm9pZCBfX2luaXQKK2lvbW11X2RtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuOworfQorCitzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOworRVhQT1JUX1NZTUJPTChkbWFfb3BzKTsKKworaW50IGlvbW11X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCisjaWZkZWYgQ09ORklHX1BDSQorCWlmIChtYXNrID4gMHhmZmZmZmZmZiAmJiBmb3JiaWRfZGFjID4gMCkgeworCQlkZXZfaW5mbyhkZXYsICJEaXNhbGxvd2luZyBEQUMgZm9yIGRldmljZVxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJaWYgKG9wcy0+ZG1hX3N1cHBvcnRlZF9vcCkKKwkJcmV0dXJuIG9wcy0+ZG1hX3N1cHBvcnRlZF9vcChkZXYsIG1hc2spOworCisJLyogQ29waWVkIGZyb20gaTM4Ni4gRG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIGJlY2F1c2UgaXQgd2lsbAorCSAgIG9ubHkgd29yayBmb3IgcGNpX2FsbG9jX2NvaGVyZW50LgorCSAgIFRoZSBjYWxsZXIganVzdCBoYXMgdG8gdXNlIEdGUF9ETUEgaW4gdGhpcyBjYXNlLiAqLworCWlmIChtYXNrIDwgRE1BXzI0QklUX01BU0spCisJCXJldHVybiAwOworCisJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHVzZSBTQUMgd2hlbiBJT01NVSBmb3JjZSBpcyBvbi4gIFRoaXMKKwkgICBhbGxvd3MgdGhlIGRyaXZlciB0byB1c2UgY2hlYXBlciBhY2Nlc3NlcyBpbiBzb21lIGNhc2VzLgorCisJICAgUHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCBpZiB3ZSBvdmVyZmxvdyB0aGUgSU9NTVUgYXJlYSBhbmQKKwkgICByZXR1cm4gREFDIGFzIGZhbGxiYWNrIGFkZHJlc3MgdGhlIGRldmljZSBtYXkgbm90IGhhbmRsZSBpdAorCSAgIGNvcnJlY3RseS4KKworCSAgIEFzIGEgc3BlY2lhbCBjYXNlIHNvbWUgY29udHJvbGxlcnMgaGF2ZSBhIDM5Yml0IGFkZHJlc3MKKwkgICBtb2RlIHRoYXQgaXMgYXMgZWZmaWNpZW50IGFzIDMyYml0IChhaWM3OXh4KS4gRG9uJ3QgZm9yY2UKKwkgICBTQUMgZm9yIHRoZXNlLiAgQXNzdW1lIGFsbCBtYXNrcyA8PSA0MCBiaXRzIGFyZSBvZiB0aGlzCisJICAgdHlwZS4gTm9ybWFsbHkgdGhpcyBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UsIGJ1dCBnaXZlcworCSAgIG1vcmUgZ2VudGxlIGhhbmRsaW5nIG9mIElPTU1VIG92ZXJmbG93LiAqLworCWlmIChpb21tdV9zYWNfZm9yY2UgJiYgKG1hc2sgPj0gRE1BXzQwQklUX01BU0spKSB7CisJCWRldl9pbmZvKGRldiwgIkZvcmNlIFNBQyB3aXRoIG1hc2sgJWx4XG4iLCBtYXNrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKGlvbW11X2RtYV9zdXBwb3J0ZWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmM1MDUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEdsdWUgY29kZSB0byBsaWIvc3dpb3RsYi5jICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorCitpbnQgc3dpb3RsYiBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChzd2lvdGxiKTsKKworc3RydWN0IGRtYV9tYXBwaW5nX29wcyBzd2lvdGxiX2RtYV9vcHMgPSB7CisJLm1hcHBpbmdfZXJyb3IgPSBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yLAorCS5hbGxvY19jb2hlcmVudCA9IHN3aW90bGJfYWxsb2NfY29oZXJlbnQsCisJLmZyZWVfY29oZXJlbnQgPSBzd2lvdGxiX2ZyZWVfY29oZXJlbnQsCisJLm1hcF9zaW5nbGUgPSBzd2lvdGxiX21hcF9zaW5nbGUsCisJLnVubWFwX3NpbmdsZSA9IHN3aW90bGJfdW5tYXBfc2luZ2xlLAorCS5zeW5jX3NpbmdsZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1LAorCS5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlLAorCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1LAorCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlLAorCS5zeW5jX3NnX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdSwKKwkuc3luY19zZ19mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2UsCisJLm1hcF9zZyA9IHN3aW90bGJfbWFwX3NnLAorCS51bm1hcF9zZyA9IHN3aW90bGJfdW5tYXBfc2csCisJLmRtYV9zdXBwb3J0ZWRfb3AgPSBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQsCit9OworCit2b2lkIF9faW5pdCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpCit7CisJaWYgKCFpb21tdV9kZXRlY3RlZCkgeworI2lmZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKKwkJc3dpb3RsYiA9IDE7CisJCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IFJlLWluaXRpYWxpemUgbWFjaGluZSB2ZWN0b3IuXG4iKTsKKwkJbWFjaHZlY19pbml0KCJkaWciKTsKKwkJc3dpb3RsYl9pbml0KCk7CisJCWRtYV9vcHMgPSAmc3dpb3RsYl9kbWFfb3BzOworI2Vsc2UKKwkJcGFuaWMoIlVuYWJsZSB0byBmaW5kIEludGVsIElPTU1VIik7CisjZW5kaWYKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IGZjOGYzNTAuLmFkYTQ2MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KQEAgLTM2ODQsNyArMzY4NSw3IEBACiAKIAkJUEZNX1NFVF9XT1JLX1BFTkRJTkcodGFzaywgMSk7CiAKLQkJdHNrX3NldF9ub3RpZnlfcmVzdW1lKHRhc2spOworCQlzZXRfbm90aWZ5X3Jlc3VtZSh0YXNrKTsKIAogCQkvKgogCQkgKiBYWFg6IHNlbmQgcmVzY2hlZHVsZSBpZiB0YXNrIHJ1bnMgb24gYW5vdGhlciBDUFUKQEAgLTUwNDQsOCArNTA0NSw2IEBACiAKIAlQRk1fU0VUX1dPUktfUEVORElORyhjdXJyZW50LCAwKTsKIAotCXRza19jbGVhcl9ub3RpZnlfcmVzdW1lKGN1cnJlbnQpOwotCiAJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKIAogCS8qCkBAIC01NDE0LDcgKzU0MTMsNyBAQAogCQkJICogd2hlbiBjb21pbmcgZnJvbSBjdHhzdywgY3VycmVudCBzdGlsbCBwb2ludHMgdG8gdGhlCiAJCQkgKiBwcmV2aW91cyB0YXNrLCB0aGVyZWZvcmUgd2UgbXVzdCB3b3JrIHdpdGggdGFzayBhbmQgbm90IGN1cnJlbnQuCiAJCQkgKi8KLQkJCXRza19zZXRfbm90aWZ5X3Jlc3VtZSh0YXNrKTsKKwkJCXNldF9ub3RpZnlfcmVzdW1lKHRhc2spOwogCQl9CiAJCS8qCiAJCSAqIGRlZmVyIHVudGlsIHN0YXRlIGlzIGNoYW5nZWQgKHNob3J0ZW4gc3BpbiB3aW5kb3cpLiB0aGUgY29udGV4dCBpcyBsb2NrZWQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggM2FiODM3My4uYzU3MTYyNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KQEAgLTE2MCwyMSArMTYxLDYgQEAKIAkJc2hvd19zdGFjayhOVUxMLCBOVUxMKTsKIH0KIAotdm9pZCB0c2tfY2xlYXJfbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLSNpZmRlZiBDT05GSUdfUEVSRk1PTgotCWlmICh0c2stPnRocmVhZC5wZm1fbmVlZHNfY2hlY2tpbmcpCi0JCXJldHVybjsKLSNlbmRpZgotCWlmICh0ZXN0X3RpX3RocmVhZF9mbGFnKHRhc2tfdGhyZWFkX2luZm8odHNrKSwgVElGX1JFU1RPUkVfUlNFKSkKLQkJcmV0dXJuOwotCWNsZWFyX3RpX3RocmVhZF9mbGFnKHRhc2tfdGhyZWFkX2luZm8odHNrKSwgVElGX05PVElGWV9SRVNVTUUpOwotfQotCi0vKgotICogZG9fbm90aWZ5X3Jlc3VtZV91c2VyKCk6Ci0gKglDYWxsZWQgZnJvbSBub3RpZnlfcmVzdW1lX3VzZXIgYXQgZW50cnkuUywgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICovCiB2b2lkCiBkb19ub3RpZnlfcmVzdW1lX3VzZXIoc2lnc2V0X3QgKnVudXNlZCwgc3RydWN0IHNpZ3NjcmF0Y2ggKnNjciwgbG9uZyBpbl9zeXNjYWxsKQogewpAQCAtMjAzLDYgKzE4OSwxMSBAQAogCQlpYTY0X2RvX3NpZ25hbChzY3IsIGluX3N5c2NhbGwpOwogCX0KIAorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKSkgeworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSk7CisJCXRyYWNlaG9va19ub3RpZnlfcmVzdW1lKCZzY3ItPnB0KTsKKwl9CisKIAkvKiBjb3B5IHVzZXIgcmJzIHRvIGtlcm5lbCByYnMgKi8KIAlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9SU0UpKSkgewogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CS8qIGZvcmNlIGludGVycnVwdCBlbmFibGUgKi8KQEAgLTI1MSw3ICsyNDIsNiBAQAogLyogV2UgZG9uJ3QgYWN0dWFsbHkgdGFrZSBDUFUgZG93biwganVzdCBzcGluIHdpdGhvdXQgaW50ZXJydXB0cy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbGF5X2RlYWQodm9pZCkKIHsKLQlleHRlcm4gdm9pZCBpYTY0X2NwdV9sb2NhbF90aWNrICh2b2lkKTsKIAl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBBY2sgaXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IDJhOTk0M2IuLjkyYzk2ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3NldC5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC02MDMsNyArNjA0LDcgQEAKIHsKIAlpZiAodGVzdF9hbmRfc2V0X3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfUkVTVE9SRV9SU0UpKQogCQlyZXR1cm47Ci0JdHNrX3NldF9ub3RpZnlfcmVzdW1lKGN1cnJlbnQpOworCXNldF9ub3RpZnlfcmVzdW1lKGN1cnJlbnQpOwogCXVud19pbml0X3J1bm5pbmcoZG9fc3luY19yYnMsIGlhNjRfc3luY191c2VyX3Jicyk7CiB9CiAKQEAgLTYxMyw3ICs2MTQsNiBAQAogdm9pZCBpYTY0X3N5bmNfa3Jicyh2b2lkKQogewogCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfUkVTVE9SRV9SU0UpOwotCXRza19jbGVhcl9ub3RpZnlfcmVzdW1lKGN1cnJlbnQpOwogCiAJdW53X2luaXRfcnVubmluZyhkb19zeW5jX3JicywgaWE2NF9zeW5jX2tlcm5lbF9yYnMpOwogfQpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJCXNwaW5fbG9ja19pcnEoJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKGNoaWxkLT5zdGF0ZSA9PSBUQVNLX1NUT1BQRUQgJiYKIAkJICAgICF0ZXN0X2FuZF9zZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfUkVTVE9SRV9SU0UpKSB7Ci0JCQl0c2tfc2V0X25vdGlmeV9yZXN1bWUoY2hpbGQpOworCQkJc2V0X25vdGlmeV9yZXN1bWUoY2hpbGQpOwogCiAJCQljaGlsZC0+c3RhdGUgPSBUQVNLX1RSQUNFRDsKIAkJCXN0b3BwZWQgPSAxOwpAQCAtMTIzMiwzNyArMTIzMiwxNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkCi1zeXNjYWxsX3RyYWNlICh2b2lkKQotewotCS8qCi0JICogVGhlIDB4ODAgcHJvdmlkZXMgYSB3YXkgZm9yIHRoZSB0cmFjaW5nIHBhcmVudCB0bwotCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBzeXNjYWxsIHN0b3AgYW5kIFNJR1RSQVAgZGVsaXZlcnkuCi0JICovCi0JcHRyYWNlX25vdGlmeShTSUdUUkFQCi0JCSAgICAgIHwgKChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRVNZU0dPT0QpID8gMHg4MCA6IDApKTsKLQotCS8qCi0JICogVGhpcyBpc24ndCB0aGUgc2FtZSBhcyBjb250aW51aW5nIHdpdGggYSBzaWduYWwsIGJ1dCBpdAotCSAqIHdpbGwgZG8gZm9yIG5vcm1hbCB1c2UuICBzdHJhY2Ugb25seSBjb250aW51ZXMgd2l0aCBhCi0JICogc2lnbmFsIGlmIHRoZSBzdG9wcGluZyBzaWduYWwgaXMgbm90IFNJR1RSQVAuICAtYnJsCi0JICovCi0JaWYgKGN1cnJlbnQtPmV4aXRfY29kZSkgewotCQlzZW5kX3NpZyhjdXJyZW50LT5leGl0X2NvZGUsIGN1cnJlbnQsIDEpOwotCQljdXJyZW50LT5leGl0X2NvZGUgPSAwOwotCX0KLX0KLQogLyogImFzbWxpbmthZ2UiIHNvIHRoZSBpbnB1dCBhcmd1bWVudHMgYXJlIHByZXNlcnZlZC4uLiAqLwogCi1hc21saW5rYWdlIHZvaWQKK2FzbWxpbmthZ2UgbG9uZwogc3lzY2FsbF90cmFjZV9lbnRlciAobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczLAogCQkgICAgIGxvbmcgYXJnNCwgbG9uZyBhcmc1LCBsb25nIGFyZzYsIGxvbmcgYXJnNywKIAkJICAgICBzdHJ1Y3QgcHRfcmVncyByZWdzKQogewotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSAKLQkgICAgJiYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQotCQlzeXNjYWxsX3RyYWNlKCk7CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQorCQlpZiAodHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2VudHJ5KCZyZWdzKSkKKwkJCXJldHVybiAtRU5PU1lTOwogCiAJLyogY29weSB1c2VyIHJicyB0byBrZXJuZWwgcmJzICovCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfUlNFKSkKQEAgLTEyODMsNiArMTI2Miw3IEBACiAJCWF1ZGl0X3N5c2NhbGxfZW50cnkoYXJjaCwgc3lzY2FsbCwgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7CiAJfQogCisJcmV0dXJuIDA7CiB9CiAKIC8qICJhc21saW5rYWdlIiBzbyB0aGUgaW5wdXQgYXJndW1lbnRzIGFyZSBwcmVzZXJ2ZWQuLi4gKi8KQEAgLTEyOTIsNiArMTI3Miw4IEBACiAJCSAgICAgbG9uZyBhcmc0LCBsb25nIGFyZzUsIGxvbmcgYXJnNiwgbG9uZyBhcmc3LAogCQkgICAgIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCiB7CisJaW50IHN0ZXA7CisKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpIHsKIAkJaW50IHN1Y2Nlc3MgPSBBVURJVFNDX1JFU1VMVChyZWdzLnIxMCk7CiAJCWxvbmcgcmVzdWx0ID0gcmVncy5yODsKQEAgLTEzMDEsMTAgKzEyODMsOSBAQAogCQlhdWRpdF9zeXNjYWxsX2V4aXQoc3VjY2VzcywgcmVzdWx0KTsKIAl9CiAKLQlpZiAoKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCi0JICAgIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKQotCSAgICAmJiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCi0JCXN5c2NhbGxfdHJhY2UoKTsKKwlzdGVwID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCk7CisJaWYgKHN0ZXAgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCXRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9leGl0KCZyZWdzLCBzdGVwKTsKIAogCS8qIGNvcHkgdXNlciByYnMgdG8ga2VybmVsIHJicyAqLwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1JTRSkpCkBAIC0xOTQwLDcgKzE5MjEsNyBAQAogewogCWlmICh0ZXN0X2FuZF9zZXRfdHNrX3RocmVhZF9mbGFnKHRhcmdldCwgVElGX1JFU1RPUkVfUlNFKSkKIAkJcmV0dXJuIDA7Ci0JdHNrX3NldF9ub3RpZnlfcmVzdW1lKHRhcmdldCk7CisJc2V0X25vdGlmeV9yZXN1bWUodGFyZ2V0KTsKIAlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZ3ByZWdzX3dyaXRlYmFjaywgdGFyZ2V0LCByZWdzZXQsIDAsIDAsCiAJCU5VTEwsIE5VTEwpOwogfQpAQCAtMjE5OSwzICsyMTgwLDY4IEBACiAjZW5kaWYKIAlyZXR1cm4gJnVzZXJfaWE2NF92aWV3OwogfQorCitzdHJ1Y3Qgc3lzY2FsbF9nZXRfc2V0X2FyZ3MgeworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBuOworCXVuc2lnbmVkIGxvbmcgKmFyZ3M7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJaW50IHJ3OworfTsKKworc3RhdGljIHZvaWQgc3lzY2FsbF9nZXRfc2V0X2FyZ3NfY2Ioc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzeXNjYWxsX2dldF9zZXRfYXJncyAqYXJncyA9IGRhdGE7CisJc3RydWN0IHB0X3JlZ3MgKnB0ID0gYXJncy0+cmVnczsKKwl1bnNpZ25lZCBsb25nICprcmJzLCBjZm0sIG5kaXJ0eTsKKwlpbnQgaSwgY291bnQ7CisKKwlpZiAodW53X3Vud2luZF90b191c2VyKGluZm8pIDwgMCkKKwkJcmV0dXJuOworCisJY2ZtID0gcHQtPmNyX2lmczsKKwlrcmJzID0gKHVuc2lnbmVkIGxvbmcgKilpbmZvLT50YXNrICsgSUE2NF9SQlNfT0ZGU0VULzg7CisJbmRpcnR5ID0gaWE2NF9yc2VfbnVtX3JlZ3Moa3Jicywga3JicyArIChwdC0+bG9hZHJzID4+IDE5KSk7CisKKwljb3VudCA9IDA7CisJaWYgKGluX3N5c2NhbGwocHQpKQorCQljb3VudCA9IG1pbl90KGludCwgYXJncy0+biwgY2ZtICYgMHg3Zik7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoYXJncy0+cncpCisJCQkqaWE2NF9yc2Vfc2tpcF9yZWdzKGtyYnMsIG5kaXJ0eSArIGkgKyBhcmdzLT5pKSA9CisJCQkJYXJncy0+YXJnc1tpXTsKKwkJZWxzZQorCQkJYXJncy0+YXJnc1tpXSA9ICppYTY0X3JzZV9za2lwX3JlZ3Moa3JicywKKwkJCQluZGlydHkgKyBpICsgYXJncy0+aSk7CisJfQorCisJaWYgKCFhcmdzLT5ydykgeworCQl3aGlsZSAoaSA8IGFyZ3MtPm4pIHsKKwkJCWFyZ3MtPmFyZ3NbaV0gPSAwOworCQkJaSsrOworCQl9CisJfQorfQorCit2b2lkIGlhNjRfc3lzY2FsbF9nZXRfc2V0X2FyZ3VtZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpLCB1bnNpZ25lZCBpbnQgbiwKKwl1bnNpZ25lZCBsb25nICphcmdzLCBpbnQgcncpCit7CisJc3RydWN0IHN5c2NhbGxfZ2V0X3NldF9hcmdzIGRhdGEgPSB7CisJCS5pID0gaSwKKwkJLm4gPSBuLAorCQkuYXJncyA9IGFyZ3MsCisJCS5yZWdzID0gcmVncywKKwkJLnJ3ID0gcncsCisJfTsKKworCWlmICh0YXNrID09IGN1cnJlbnQpCisJCXVud19pbml0X3J1bm5pbmcoc3lzY2FsbF9nZXRfc2V0X2FyZ3NfY2IsICZkYXRhKTsKKwllbHNlIHsKKwkJc3RydWN0IHVud19mcmFtZV9pbmZvIHVmaTsKKwkJbWVtc2V0KCZ1ZmksIDAsIHNpemVvZih1ZmkpKTsKKwkJdW53X2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soJnVmaSwgdGFzayk7CisJCXN5c2NhbGxfZ2V0X3NldF9hcmdzX2NiKCZ1ZmksICZkYXRhKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggZGU2MzZiMi4uYWU3OTExNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtMTE2LDYgKzExNiwxMyBAQAogICovCiAjZGVmaW5lCUlfQ0FDSEVfU1RSSURFX1NISUZUCTUJLyogU2FmZXN0IHdheSB0byBnbzogMzIgYnl0ZXMgYnkgMzIgYnl0ZXMgKi8KIHVuc2lnbmVkIGxvbmcgaWE2NF9pX2NhY2hlX3N0cmlkZV9zaGlmdCA9IH4wOworLyoKKyAqICJjbGZsdXNoX2NhY2hlX3JhbmdlKCkiIG5lZWRzIHRvIGtub3cgd2hhdCBwcm9jZXNzb3IgZGVwZW5kZW50IHN0cmlkZSBzaXplIHRvCisgKiB1c2Ugd2hlbiBpdCBmbHVzaGVzIGNhY2hlIGxpbmVzIGluY2x1ZGluZyBib3RoIGQtY2FjaGUgYW5kIGktY2FjaGUuCisgKi8KKy8qIFNhZmVzdCB3YXkgdG8gZ286IDMyIGJ5dGVzIGJ5IDMyIGJ5dGVzICovCisjZGVmaW5lCUNBQ0hFX1NUUklERV9TSElGVAk1Cit1bnNpZ25lZCBsb25nIGlhNjRfY2FjaGVfc3RyaWRlX3NoaWZ0ID0gfjA7CiAKIC8qCiAgKiBUaGUgbWVyZ2VfbWFzayB2YXJpYWJsZSBuZWVkcyB0byBiZSBzZXQgdG8gKG1heChpb21tdV9wYWdlX3NpemUoaW9tbXUpKSAtIDEpLiAgVGhpcwpAQCAtMzUyLDcgKzM1OSw3IEBACiAJfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKyNpZmRlZiBDT05GSUdfQ1JBU0hfS0VSTkVMCiAJaWYgKHJlc2VydmVfZWxmY29yZWhkcigmcnN2ZF9yZWdpb25bbl0uc3RhcnQsCiAJCQkgICAgICAgJnJzdmRfcmVnaW9uW25dLmVuZCkgPT0gMCkKIAkJbisrOwpAQCAtNDc4LDcgKzQ4NSwxMiBAQAogfQogZWFybHlfcGFyYW0oIm5vbWNhIiwgc2V0dXBfbm9tY2EpOwogCi0jaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCisvKgorICogTm90ZTogZWxmY29yZWhkcl9hZGRyIGlzIG5vdCBqdXN0IGxpbWl0ZWQgdG8gdm1jb3JlLiBJdCBpcyBhbHNvIHVzZWQgYnkKKyAqIGlzX2tkdW1wX2tlcm5lbCgpIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYm9vdGluZyBhZnRlciBhIHBhbmljLiBIZW5jZQorICogaWZkZWYgaXQgdW5kZXIgQ09ORklHX0NSQVNIX0RVTVAgYW5kIG5vdCBDT05GSUdfUFJPQ19WTUNPUkUuCisgKi8KKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogLyogZWxmY29yZWhkcj0gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBlbGYgY29yZSBoZWFkZXIKICAqIHN0b3JlZCBieSB0aGUgY3Jhc2hlZCBrZXJuZWwuCiAgKi8KQEAgLTUwMiwxMSArNTE0LDExIEBACiAJICogdG8gd29yayBwcm9wZXJseS4KIAkgKi8KIAotCWlmIChlbGZjb3JlaGRyX2FkZHIgPj0gRUxGQ09SRV9BRERSX01BWCkKKwlpZiAoIWlzX3ZtY29yZV91c2FibGUoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKGxlbmd0aCA9IHZtY29yZV9maW5kX2Rlc2NyaXB0b3Jfc2l6ZShlbGZjb3JlaGRyX2FkZHIpKSA9PSAwKSB7Ci0JCWVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CisJCXZtY29yZV91bnVzYWJsZSgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg0NywxMyArODU5LDE0IEBACiB9CiAKIC8qCi0gKiBDYWxjdWxhdGUgdGhlIG1heC4gY2FjaGUgbGluZSBzaXplLgorICogRG8gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbnM6CiAgKgotICogSW4gYWRkaXRpb24sIHRoZSBtaW5pbXVtIG9mIHRoZSBpLWNhY2hlIHN0cmlkZSBzaXplcyBpcyBjYWxjdWxhdGVkIGZvcgotICogImZsdXNoX2ljYWNoZV9yYW5nZSgpIi4KKyAqIDEuIHRoZSBtYXguIGNhY2hlIGxpbmUgc2l6ZS4KKyAqIDIuIHRoZSBtaW5pbXVtIG9mIHRoZSBpLWNhY2hlIHN0cmlkZSBzaXplcyBmb3IgImZsdXNoX2ljYWNoZV9yYW5nZSgpIi4KKyAqIDMuIHRoZSBtaW5pbXVtIG9mIHRoZSBjYWNoZSBzdHJpZGUgc2l6ZXMgZm9yICJjbGZsdXNoX2NhY2hlX3JhbmdlKCkiLgogICovCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQKLWdldF9tYXhfY2FjaGVsaW5lX3NpemUgKHZvaWQpCitnZXRfY2FjaGVfaW5mbyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbGluZV9zaXplLCBtYXggPSAxOwogCXU2NCBsLCBsZXZlbHMsIHVuaXF1ZV9jYWNoZXM7CkBAIC04NjcsMTIgKzg4MCwxNCBAQAogICAgICAgICAgICAgICAgIG1heCA9IFNNUF9DQUNIRV9CWVRFUzsKIAkJLyogU2FmZXN0IHNldHVwIGZvciAiZmx1c2hfaWNhY2hlX3JhbmdlKCkiICovCiAJCWlhNjRfaV9jYWNoZV9zdHJpZGVfc2hpZnQgPSBJX0NBQ0hFX1NUUklERV9TSElGVDsKKwkJLyogU2FmZXN0IHNldHVwIGZvciAiY2xmbHVzaF9jYWNoZV9yYW5nZSgpIiAqLworCQlpYTY0X2NhY2hlX3N0cmlkZV9zaGlmdCA9IENBQ0hFX1NUUklERV9TSElGVDsKIAkJZ290byBvdXQ7CiAgICAgICAgIH0KIAogCWZvciAobCA9IDA7IGwgPCBsZXZlbHM7ICsrbCkgewotCQlzdGF0dXMgPSBpYTY0X3BhbF9jYWNoZV9jb25maWdfaW5mbyhsLCAvKiBjYWNoZV90eXBlIChkYXRhX29yX3VuaWZpZWQpPSAqLyAyLAotCQkJCQkJICAgICZjY2kpOworCQkvKiBjYWNoZV90eXBlIChkYXRhX29yX3VuaWZpZWQpPTIgKi8KKwkJc3RhdHVzID0gaWE2NF9wYWxfY2FjaGVfY29uZmlnX2luZm8obCwgMiwgJmNjaSk7CiAJCWlmIChzdGF0dXMgIT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIiVzOiBpYTY0X3BhbF9jYWNoZV9jb25maWdfaW5mbyhsPSVsdSwgMikgZmFpbGVkIChzdGF0dXM9JWxkKVxuIiwKQEAgLTg4MCwxNSArODk1LDIxIEBACiAJCQltYXggPSBTTVBfQ0FDSEVfQllURVM7CiAJCQkvKiBUaGUgc2FmZXN0IHNldHVwIGZvciAiZmx1c2hfaWNhY2hlX3JhbmdlKCkiICovCiAJCQljY2kucGNjaV9zdHJpZGUgPSBJX0NBQ0hFX1NUUklERV9TSElGVDsKKwkJCS8qIFRoZSBzYWZlc3Qgc2V0dXAgZm9yICJjbGZsdXNoX2NhY2hlX3JhbmdlKCkiICovCisJCQlpYTY0X2NhY2hlX3N0cmlkZV9zaGlmdCA9IENBQ0hFX1NUUklERV9TSElGVDsKIAkJCWNjaS5wY2NpX3VuaWZpZWQgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKGNjaS5wY2NpX3N0cmlkZSA8IGlhNjRfY2FjaGVfc3RyaWRlX3NoaWZ0KQorCQkJCWlhNjRfY2FjaGVfc3RyaWRlX3NoaWZ0ID0gY2NpLnBjY2lfc3RyaWRlOworCisJCQlsaW5lX3NpemUgPSAxIDw8IGNjaS5wY2NpX2xpbmVfc2l6ZTsKKwkJCWlmIChsaW5lX3NpemUgPiBtYXgpCisJCQkJbWF4ID0gbGluZV9zaXplOwogCQl9Ci0JCWxpbmVfc2l6ZSA9IDEgPDwgY2NpLnBjY2lfbGluZV9zaXplOwotCQlpZiAobGluZV9zaXplID4gbWF4KQotCQkJbWF4ID0gbGluZV9zaXplOworCiAJCWlmICghY2NpLnBjY2lfdW5pZmllZCkgewotCQkJc3RhdHVzID0gaWE2NF9wYWxfY2FjaGVfY29uZmlnX2luZm8obCwKLQkJCQkJCSAgICAvKiBjYWNoZV90eXBlIChpbnN0cnVjdGlvbik9ICovIDEsCi0JCQkJCQkgICAgJmNjaSk7CisJCQkvKiBjYWNoZV90eXBlIChpbnN0cnVjdGlvbik9MSovCisJCQlzdGF0dXMgPSBpYTY0X3BhbF9jYWNoZV9jb25maWdfaW5mbyhsLCAxLCAmY2NpKTsKIAkJCWlmIChzdGF0dXMgIT0gMCkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSIlczogaWE2NF9wYWxfY2FjaGVfY29uZmlnX2luZm8obD0lbHUsIDEpIGZhaWxlZCAoc3RhdHVzPSVsZClcbiIsCkBAIC05NDIsNyArOTYzLDcgQEAKIAl9CiAjZW5kaWYKIAotCWdldF9tYXhfY2FjaGVsaW5lX3NpemUoKTsKKwlnZXRfY2FjaGVfaW5mbygpOwogCiAJLyoKIAkgKiBXZSBjYW4ndCBwYXNzICJsb2NhbF9jcHVfZGF0YSIgdG8gaWRlbnRpZnlfY3B1KCkgYmVjYXVzZSB3ZSBoYXZlbid0IGNhbGxlZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMTljNWE3OC4uZTEyNTAwYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtNDM5LDYgKzQ0MCwxMyBAQAogCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsIHNpZyk7CiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJLyoKKwkgKiBMZXQgdHJhY2luZyBrbm93IHRoYXQgd2UndmUgZG9uZSB0aGUgaGFuZGxlciBzZXR1cC4KKwkgKi8KKwl0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoc2lnLCBpbmZvLCBrYSwgJnNjci0+cHQsCisJCQkJIHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKTsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKaW5kZXggYzA2OTlmMC4uYTMxMmM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtMTExNCw3ICsxMTE0LDcgQEAKIAlzdHJ1Y3QgaHJ0aW1lciAqcF9odCA9ICZ2Y3B1LT5hcmNoLmhsdF90aW1lcjsKIAogCWlmIChocnRpbWVyX2NhbmNlbChwX2h0KSkKLQkJaHJ0aW1lcl9zdGFydChwX2h0LCBwX2h0LT5leHBpcmVzLCBIUlRJTUVSX01PREVfQUJTKTsKKwkJaHJ0aW1lcl9zdGFydF9leHBpcmVzKHBfaHQsIEhSVElNRVJfTU9ERV9BQlMpOwogfQogCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaGx0X3RpbWVyX2ZuKHN0cnVjdCBocnRpbWVyICpkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9mbHVzaC5TIGIvYXJjaC9pYTY0L2xpYi9mbHVzaC5TCmluZGV4IDJhMGQyN2YuLjFkOGM4ODggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9saWIvZmx1c2guUworKysgYi9hcmNoL2lhNjQvbGliL2ZsdXNoLlMKQEAgLTYwLDMgKzYwLDU4IEBACiAJbW92CWFyLmxjPXIzCQkvLyByZXN0b3JlIGFyLmxjCiAJYnIucmV0LnNwdGsubWFueSBycAogRU5EKGZsdXNoX2ljYWNoZV9yYW5nZSkKKworCS8qCisJICogY2xmbHVzaF9jYWNoZV9yYW5nZShzdGFydCxzaXplKQorCSAqCisJICoJRmx1c2ggY2FjaGUgbGluZXMgZnJvbSBzdGFydCB0byBzdGFydCtzaXplLTEuCisJICoKKwkgKglNdXN0IGRlYWwgd2l0aCByYW5nZSBmcm9tIHN0YXJ0IHRvIHN0YXJ0K3NpemUtMSBidXQgbm90aGluZyBlbHNlCisJICoJKG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdG91Y2ggYWRkcmVzc2VzIHRoYXQgbWF5IGJlCisJICoJdW5tYXBwZWQpLgorCSAqCisJICoJTm90ZTogImluMCIgYW5kICJpbjEiIGFyZSBwcmVzZXJ2ZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKwkgKi8KKwkuc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCJheCIKK0dMT0JBTF9FTlRSWShjbGZsdXNoX2NhY2hlX3JhbmdlKQorCisJLnByb2xvZ3VlCisJYWxsb2MJcjI9YXIucGZzLDIsMCwwLDAKKwltb3ZsCXIzPWlhNjRfY2FjaGVfc3RyaWRlX3NoaWZ0CisJbW92CXIyMT0xCisJYWRkICAgICByMjI9aW4xLGluMAorCTs7CisJbGQ4CXIyMD1bcjNdCQkvLyByMjA6IHN0cmlkZSBzaGlmdAorCXN1YglyMjI9cjIyLHIwLDEJCS8vIGxhc3QgYnl0ZSBhZGRyZXNzCisJOzsKKwlzaHIudQlyMjM9aW4wLHIyMAkJLy8gc3RhcnQgLyAoc3RyaWRlIHNpemUpCisJc2hyLnUJcjIyPXIyMixyMjAJCS8vIChsYXN0IGJ5dGUgYWRkcmVzcykgLyAoc3RyaWRlIHNpemUpCisJc2hsCXIyMT1yMjEscjIwCQkvLyByMjE6IHN0cmlkZSBzaXplIG9mIHRoZSBpLWNhY2hlKHMpCisJOzsKKwlzdWIJcjg9cjIyLHIyMwkJLy8gbnVtYmVyIG9mIHN0cmlkZXMgLSAxCisJc2hsCXIyND1yMjMscjIwCQkvLyByMjQ6IGFkZHJlc3NlcyBmb3IgImZjIiA9CisJCQkJCS8vCSJzdGFydCIgcm91bmRlZCBkb3duIHRvIHN0cmlkZQorCQkJCQkvLwlib3VuZGFyeQorCS5zYXZlCWFyLmxjLHIzCisJbW92CXIzPWFyLmxjCQkvLyBzYXZlIGFyLmxjCisJOzsKKworCS5ib2R5CisJbW92CWFyLmxjPXI4CisJOzsKKwkvKgorCSAqIDMyIGJ5dGUgYWxpZ25lZCBsb29wLCBldmVuIG51bWJlciBvZiAoYWN0dWFsbHkgMikgYnVuZGxlcworCSAqLworLkxvb3BfZmM6CisJZmMJcjI0CQkvLyBpc3N1YWJsZSBvbiBNMCBvbmx5CisJYWRkCXIyND1yMjEscjI0CS8vIHdlIGZsdXNoICJzdHJpZGUgc2l6ZSIgYnl0ZXMgcGVyIGl0ZXJhdGlvbgorCW5vcC5pCTAKKwlici5jbG9vcC5zcHRrLmZldyAuTG9vcF9mYworCTs7CisJc3luYy5pCisJOzsKKwlzcmx6LmkKKwk7OworCW1vdglhci5sYz1yMwkJLy8gcmVzdG9yZSBhci5sYworCWJyLnJldC5zcHRrLm1hbnkgcnAKK0VORChjbGZsdXNoX2NhY2hlX3JhbmdlKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggZjQ4MmE5MC4uMDU0YmNkOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC03MDAsMjMgKzcwMCw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCi1pbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDEyMCAqIEhaOwotCWludCByZXQ7Ci0Jc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQllbmRfcGZuID0gc3RhcnRfcGZuICsgKHNpemUgPj4gUEFHRV9TSElGVCk7Ci0JcmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4sIGVuZF9wZm4sIHRpbWVvdXQpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCS8qIHdlIGNhbiBmcmVlIG1lbV9tYXAgYXQgdGhpcyBwb2ludCAqLwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfbWVtb3J5KTsKLSNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqLwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggOGNhZjQyNC4uYmQ5ODE4YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtMzYyLDkgKzM2MiwxMyBAQAogCQlwZXJfY3B1KGlhNjRfdHJfbnVtLCBjcHUpID0KIAkJCQl2bV9pbmZvXzEucGFsX3ZtX2luZm9fMV9zLm1heF9kdHJfZW50cnkrMTsKIAlpZiAocGVyX2NwdShpYTY0X3RyX251bSwgY3B1KSA+IElBNjRfVFJfQUxMT0NfTUFYKSB7CisJCXN0YXRpYyBpbnQganVzdG9uY2UgPSAxOwogCQlwZXJfY3B1KGlhNjRfdHJfbnVtLCBjcHUpID0gSUE2NF9UUl9BTExPQ19NQVg7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJUUiByZWdpc3RlciBudW1iZXIgZXhjZWVkcyBJQTY0X1RSX0FMTE9DX01BWCEiCi0JCQkiSUE2NF9UUl9BTExPQ19NQVggc2hvdWxkIGJlIGV4dGVuZGVkXG4iKTsKKwkJaWYgKGp1c3RvbmNlKSB7CisJCQlqdXN0b25jZSA9IDA7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiVFIgcmVnaXN0ZXIgbnVtYmVyIGV4Y2VlZHMgIgorCQkJICAgICAgICJJQTY0X1RSX0FMTE9DX01BWCFcbiIpOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9pYTY0L29wcm9maWxlL2luaXQuYwppbmRleCAxMjVhNjAyLi4zMWI1NDVjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvb3Byb2ZpbGUvaW5pdC5jCisrKyBiL2FyY2gvaWE2NC9vcHJvZmlsZS9pbml0LmMKQEAgLTEyLDExICsxMiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogIAotZXh0ZXJuIGludCBwZXJmbW9uX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKiBvcHMpOworZXh0ZXJuIGludCBwZXJmbW9uX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcyk7CiBleHRlcm4gdm9pZCBwZXJmbW9uX2V4aXQodm9pZCk7CiBleHRlcm4gdm9pZCBpYTY0X2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsIHVuc2lnbmVkIGludCBkZXB0aCk7CiAKLWludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICogb3BzKQoraW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L29wcm9maWxlL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9vcHJvZmlsZS9wZXJmbW9uLmMKaW5kZXggYmM0MWRkMy4uMTkyZDNlOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L29wcm9maWxlL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvcGVyZm1vbi5jCkBAIC01Niw3ICs1Niw3IEBACiB9OwogCiAKLXN0YXRpYyBjaGFyICogZ2V0X2NwdV90eXBlKHZvaWQpCitzdGF0aWMgY2hhciAqZ2V0X2NwdV90eXBlKHZvaWQpCiB7CiAJX191OCBmYW1pbHkgPSBsb2NhbF9jcHVfZGF0YS0+ZmFtaWx5OwogCkBAIC03NSw3ICs3NSw3IEBACiAKIHN0YXRpYyBpbnQgdXNpbmdfcGVyZm1vbjsKIAotaW50IHBlcmZtb25faW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqIG9wcykKK2ludCBwZXJmbW9uX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKIAlpbnQgcmV0ID0gcGZtX3JlZ2lzdGVyX2J1ZmZlcl9mbXQoJm9wcm9maWxlX2ZtdCk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDc1NDUwMzcuLjIxMWZjZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtNjE0LDEyICs2MTQsMTcgQEAKICAqIHZlY3RvciB0byBnZXQgdGhlIGJhc2UgYWRkcmVzcy4KICAqLwogaW50Ci1wY2lfbW1hcF9sZWdhY3lfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3BjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlKQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKIAlwZ3Byb3RfdCBwcm90OwogCWNoYXIgKmFkZHI7CiAKKwkvKiBXZSBvbmx5IHN1cHBvcnQgbW1hcCdpbmcgb2YgbGVnYWN5IG1lbW9yeSBzcGFjZSAqLworCWlmIChtbWFwX3N0YXRlICE9IHBjaV9tbWFwX21lbSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKIAkvKgogCSAqIEF2b2lkIGF0dHJpYnV0ZSBhbGlhc2luZy4gIFNlZSBEb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmcudHh0CiAJICogZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zY3JpcHRzL3B2Y2hlY2suc2VkIGIvYXJjaC9pYTY0L3NjcmlwdHMvcHZjaGVjay5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2NmFjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9zY3JpcHRzL3B2Y2hlY2suc2VkCkBAIC0wLDAgKzEsMzIgQEAKKyMKKyMgQ2hlY2tlciBmb3IgcGFyYXZpcnR1YWxpemF0aW9ucyBvZiBwcml2aWxlZ2VkIG9wZXJhdGlvbnMuCisjCitzL3NzbS4qcHNyXC5pYy4qLy53YXJuaW5nIFwic3NtIHBzci5pYyBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHlcIi9nCitzL3JzbS4qcHNyXC5pYy4qLy53YXJuaW5nIFwicnNtIHBzci5pYyBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHlcIi9nCitzL3NzbS4qcHNyXC5pLiovLndhcm5pbmcgXCJzc20gcHNyLmkgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5XCIvZworcy9yc20uKnBzclwuaS4qLy53YXJuaW5nIFwicnNtIHBzci5pIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseVwiL2cKK3Mvc3NtLipwc3JcLmR0LiovLndhcm5pbmcgXCJzc20gcHNyLmR0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseVwiL2cKK3MvcnNtLipwc3JcLmR0LiovLndhcm5pbmcgXCJyc20gcHNyLmR0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseVwiL2cKK3MvbW92Lio9LipjclwuaWZhLy53YXJuaW5nIFwiY3IuaWZhIHNob3VsZCBub3QgdXNlZCBkaXJlY3RseVwiL2cKK3MvbW92Lio9LipjclwuaXRpci8ud2FybmluZyBcImNyLml0aXIgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9tb3YuKj0uKmNyXC5pc3IvLndhcm5pbmcgXCJjci5pc3Igc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9tb3YuKj0uKmNyXC5paGEvLndhcm5pbmcgXCJjci5paGEgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9tb3YuKj0uKmNyXC5pcHNyLy53YXJuaW5nIFwiY3IuaXBzciBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCitzL21vdi4qPS4qY3JcLmlpbS8ud2FybmluZyBcImNyLmlpbSBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCitzL21vdi4qPS4qY3JcLmlpcC8ud2FybmluZyBcImNyLmlpcCBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCitzL21vdi4qPS4qY3JcLml2ci8ud2FybmluZyBcImNyLml2ciBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCitzL21vdi4qPVteXC5dKnBzci8ud2FybmluZyBcInBzciBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCSMgYXZvaWQgYXIuZnBzcgorcy9tb3YuKj0uKmFyXC5lZmxhZ3MvLndhcm5pbmcgXCJhci5lZmxhZ3Mgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9tb3YuKmNyXC5pZmEuKj0uKi8ud2FybmluZyBcImNyLmlmYSBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCitzL21vdi4qY3JcLml0aXIuKj0uKi8ud2FybmluZyBcImNyLml0aXIgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9tb3YuKmNyXC5paGEuKj0uKi8ud2FybmluZyBcImNyLmloYSBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCitzL21vdi4qY3JcLmlwc3IuKj0uKi8ud2FybmluZyBcImNyLmlwc3Igc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9tb3YuKmNyXC5pZnMuKj0uKi8ud2FybmluZyBcImNyLmlmcyBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCitzL21vdi4qY3JcLmlpcC4qPS4qLy53YXJuaW5nIFwiY3IuaWlwIHNob3VsZCBub3QgdXNlZCBkaXJlY3RseVwiL2cKK3MvbW92Lipjclwua3IuKj0uKi8ud2FybmluZyBcImNyLmtyIHNob3VsZCBub3QgdXNlZCBkaXJlY3RseVwiL2cKK3MvbW92LiphclwuZWZsYWdzLio9LiovLndhcm5pbmcgXCJhci5lZmxhZ3Mgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9pdGNcLmkuKi8ud2FybmluZyBcIml0Yy5pIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS5cIi9nCitzL2l0Y1wuZC4qLy53YXJuaW5nIFwiaXRjLmQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LlwiL2cKK3MvYnN3XC4wLy53YXJuaW5nIFwiYnN3LjAgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LlwiL2cKK3MvYnN3XC4xLy53YXJuaW5nIFwiYnN3LjEgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LlwiL2cKK3MvcHRjXC5nYS4qLy53YXJuaW5nIFwicHRjLmdhIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS5cIi9nCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2FjcGlfaW5pdC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19hY3BpX2luaXQuYwppbmRleCA2NTY4OTQyLi5iYzYxMGE2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2FjcGlfaW5pdC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fYWNwaV9pbml0LmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludAogZ2V0X2hvc3RfZGV2Zm4oYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwgYWNwaV9oYW5kbGUgcm9vdGJ1c19oYW5kbGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZHI7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkcjsKIAlhY3BpX2hhbmRsZSBjaGlsZDsKIAl1bnNpZ25lZCBpbnQgZGV2Zm47CiAJaW50IGZ1bmN0aW9uOwpAQCAtMjkyLDggKzI5Miw4IEBACiBzdGF0aWMgYWNwaV9zdGF0dXMKIGZpbmRfbWF0Y2hpbmdfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQogewotCXVuc2lnbmVkIGxvbmcgYmJuID0gLTE7Ci0JdW5zaWduZWQgbG9uZyBhZHI7CisJdW5zaWduZWQgbG9uZyBsb25nIGJibiA9IC0xOworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZHI7CiAJYWNwaV9oYW5kbGUgcGFyZW50ID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGRldmZuOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJdW5zaWduZWQgaW50IGhvc3RfZGV2Zm47CiAJc3RydWN0IHNuX3BjaWRldl9tYXRjaCBwY2lkZXZfbWF0Y2g7CiAJYWNwaV9oYW5kbGUgcm9vdGJ1c19oYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBzZWdtZW50OworCXVuc2lnbmVkIGxvbmcgbG9uZyBzZWdtZW50OwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCXJvb3RidXNfaGFuZGxlID0gUENJX0NPTlRST0xMRVIoZGV2KS0+YWNwaV9oYW5kbGU7CkBAIC0zNTcsNyArMzU3LDcgQEAKICAgICAgICAgaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCWlmIChzZWdtZW50ICE9IHBjaV9kb21haW5fbnIoZGV2KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBTZWdtZW50IG51bWJlciBtaXNtYXRjaCwgMHglbHggdnMgMHgleCBmb3I6ICIsCisJCQkgICAgICAgIiVzOiBTZWdtZW50IG51bWJlciBtaXNtYXRjaCwgMHglbGx4IHZzIDB4JXggZm9yOiAiLAogCQkJICAgICAgIF9fZnVuY19fLCBzZWdtZW50LCBwY2lfZG9tYWluX25yKGRldikpOwogCQkJYWNwaV9uc19wcmludF9ub2RlX3BhdGhuYW1lKHJvb3RidXNfaGFuZGxlLCBOVUxMKTsKIAkJCXByaW50aygiXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vS2NvbmZpZyBiL2FyY2gvaWE2NC94ZW4vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTY4M2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3hlbi9LY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgVGhpcyBLY29uZmlnIGRlc2NyaWJlcyB4ZW4vaWE2NCBvcHRpb25zCisjCisKK2NvbmZpZyBYRU4KKwlib29sICJYZW4gaHlwZXJ2aXNvciBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUEFSQVZJUlQgJiYgTUNLSU5MRVkgJiYgSUE2NF9QQUdFX1NJWkVfMTZLQiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgWEVOX1hFTkNPTU0KKwlzZWxlY3QgTk9fSURMRV9IWgorCisJIyB0aG9zZSBhcmUgcmVxdWlyZWQgdG8gc2F2ZS9yZXN0b3JlLgorCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKKwlzZWxlY3QgU1VTUEVORAorCXNlbGVjdCBQTV9TTEVFUAorCWhlbHAKKwkgIEVuYWJsZSBYZW4gaHlwZXJ2aXNvciBzdXBwb3J0LiAgUmVzdWx0aW5nIGtlcm5lbCBydW5zCisJICBib3RoIGFzIGEgZ3Vlc3QgT1Mgb24gWGVuIGFuZCBuYXRpdmVseSBvbiBoYXJkd2FyZS4KKworY29uZmlnIFhFTl9YRU5DT01NCisJZGVwZW5kcyBvbiBYRU4KKwlib29sCisKK2NvbmZpZyBOT19JRExFX0haCisJZGVwZW5kcyBvbiBYRU4KKwlib29sCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL01ha2VmaWxlIGIvYXJjaC9pYTY0L3hlbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQwMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3hlbi9NYWtlZmlsZQpAQCAtMCwwICsxLDIyIEBACisjCisjIE1ha2VmaWxlIGZvciBYZW4gY29tcG9uZW50cworIworCitvYmoteSA6PSBoeXBlcmNhbGwubyB4ZW5pdnQubyB4ZW5zZXR1cC5vIHhlbl9wdl9vcHMubyBpcnFfeGVuLm8gXAorCSBoeXBlcnZpc29yLm8geGVuY29tbS5vIHhjb21faGNhbGwubyBncmFudC10YWJsZS5vIHRpbWUubyBzdXNwZW5kLm8KKworb2JqLSQoQ09ORklHX0lBNjRfR0VORVJJQykgKz0gbWFjaHZlYy5vCisKK0FGTEFHU194ZW5pdnQubyArPSAtRF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX1hFTgorCisjIHhlbiBtdWx0aSBjb21waWxlCitBU01fUEFSQVZJUlRfTVVMVElfQ09NUElMRV9TUkNTID0gaXZ0LlMgZW50cnkuUworQVNNX1BBUkFWSVJUX09CSlMgPSAkKGFkZHByZWZpeCB4ZW4tLCQoQVNNX1BBUkFWSVJUX01VTFRJX0NPTVBJTEVfU1JDUzouUz0ubykpCitvYmoteSArPSAkKEFTTV9QQVJBVklSVF9PQkpTKQorZGVmaW5lIHBhcmF2aXJ0dWFsaXplZF94ZW4KK0FGTEFHU18kKDEpICs9IC1EX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfWEVOCitlbmRlZgorJChmb3JlYWNoIG8sJChBU01fUEFSQVZJUlRfT0JKUyksJChldmFsICQoY2FsbCBwYXJhdmlydHVhbGl6ZWRfeGVuLCQobykpKSkKKworJChvYmopL3hlbi0lLm86ICQoc3JjKS8uLi9rZXJuZWwvJS5TIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGFzX29fUykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vZ3JhbnQtdGFibGUuYyBiL2FyY2gvaWE2NC94ZW4vZ3JhbnQtdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdkZDlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3hlbi9ncmFudC10YWJsZS5jCkBAIC0wLDAgKzEsMTU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQveGVuL2dyYW50LXRhYmxlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvbWVtb3J5Lmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisKKyNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KKworc3RydWN0IHZtX3N0cnVjdCAqeGVuX2FsbG9jX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBvcmRlcjsKKwl1bnNpZ25lZCBsb25nIHZpcnQ7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCisJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisJdmlydCA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOworCWlmICh2aXJ0ID09IDApCisJCWdvdG8gZXJyMDsKKwlucl9wYWdlcyA9IDEgPDwgb3JkZXI7CisJc2NydWJfcGFnZXModmlydCwgbnJfcGFnZXMpOworCisJYXJlYSA9IGttYWxsb2Moc2l6ZW9mKCphcmVhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFyZWEgPT0gTlVMTCkKKwkJZ290byBlcnIxOworCisJYXJlYS0+ZmxhZ3MgPSBWTV9JT1JFTUFQOworCWFyZWEtPmFkZHIgPSAodm9pZCAqKXZpcnQ7CisJYXJlYS0+c2l6ZSA9IHNpemU7CisJYXJlYS0+cGFnZXMgPSBOVUxMOworCWFyZWEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CisJYXJlYS0+cGh5c19hZGRyID0gMDsJLyogeGVuYnVzX21hcF9yaW5nX3ZhbGxvYyB1c2VzIHRoaXMgZmllbGQhICAqLworCisJcmV0dXJuIGFyZWE7CisKK2VycjE6CisJZnJlZV9wYWdlcyh2aXJ0LCBvcmRlcik7CitlcnIwOgorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2FsbG9jX3ZtX2FyZWEpOworCit2b2lkIHhlbl9mcmVlX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSkKK3sKKwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoYXJlYS0+c2l6ZSk7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyID0gX19wYShhcmVhLT5hZGRyKTsKKworCS8qIFRoaXMgYXJlYSBpcyB1c2VkIGZvciBmb3JlaWduIHBhZ2UgbWFwcHBpbmcuCisJICogU28gdW5kZXJseWluZyBtYWNoaW5lIHBhZ2UgbWF5IG5vdCBiZSBhc3NpZ25lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgb3JkZXIpOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyByZXQ7CisJCXVuc2lnbmVkIGxvbmcgZ3BmbiA9IChwaHlzX2FkZHIgPj4gUEFHRV9TSElGVCkgKyBpOworCQlzdHJ1Y3QgeGVuX21lbW9yeV9yZXNlcnZhdGlvbiByZXNlcnZhdGlvbiA9IHsKKwkJCS5ucl9leHRlbnRzICAgPSAxLAorCQkJLmFkZHJlc3NfYml0cyA9IDAsCisJCQkuZXh0ZW50X29yZGVyID0gMCwKKwkJCS5kb21pZCAgICAgICAgPSBET01JRF9TRUxGCisJCX07CisJCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKHJlc2VydmF0aW9uLmV4dGVudF9zdGFydCwgJmdwZm4pOworCQlyZXQgPSBIWVBFUlZJU09SX21lbW9yeV9vcChYRU5NRU1fcG9wdWxhdGVfcGh5c21hcCwKKwkJCQkJICAgJnJlc2VydmF0aW9uKTsKKwkJQlVHX09OKHJldCAhPSAxKTsKKwl9CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyLCBvcmRlcik7CisJa2ZyZWUoYXJlYSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fZnJlZV92bV9hcmVhKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ3JhbnQgdGFibGUgaGFjaworICogY21kOiBHTlRUQUJPUF94eHgKKyAqLworCitpbnQgYXJjaF9nbnR0YWJfbWFwX3NoYXJlZCh1bnNpZ25lZCBsb25nICpmcmFtZXMsIHVuc2lnbmVkIGxvbmcgbnJfZ2ZyYW1lcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbWF4X25yX2dmcmFtZXMsCisJCQkgICBzdHJ1Y3QgZ3JhbnRfZW50cnkgKipfX3NoYXJlZCkKK3sKKwkqX19zaGFyZWQgPSBfX3ZhKGZyYW1lc1swXSA8PCBQQUdFX1NISUZUKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhcmNoX2dudHRhYl91bm1hcF9zaGFyZWQoc3RydWN0IGdyYW50X2VudHJ5ICpzaGFyZWQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX2dmcmFtZXMpCit7CisJLyogbm90aGluZyAqLworfQorCitzdGF0aWMgdm9pZAorZ250dGFiX21hcF9ncmFudF9yZWZfcHJlKHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqdW9wKQoreworCXVpbnQzMl90IGZsYWdzOworCisJZmxhZ3MgPSB1b3AtPmZsYWdzOworCisJaWYgKGZsYWdzICYgR05UTUFQX2hvc3RfbWFwKSB7CisJCWlmIChmbGFncyAmIEdOVE1BUF9hcHBsaWNhdGlvbl9tYXApIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkdOVE1BUF9hcHBsaWNhdGlvbl9tYXAgaXMgbm90IHN1cHBvcnRlZCB5ZXQ6ICIKKwkJCSAgICAgICAiZmxhZ3MgMHgleFxuIiwgZmxhZ3MpOworCQkJQlVHKCk7CisJCX0KKwkJaWYgKGZsYWdzICYgR05UTUFQX2NvbnRhaW5zX3B0ZSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiR05UTUFQX2NvbnRhaW5zX3B0ZSBpcyBub3Qgc3VwcG9ydGVkIHlldDogIgorCQkJICAgICAgICJmbGFncyAweCV4XG4iLCBmbGFncyk7CisJCQlCVUcoKTsKKwkJfQorCX0gZWxzZSBpZiAoZmxhZ3MgJiBHTlRNQVBfZGV2aWNlX21hcCkgeworCQlwcmludGsoIkdOVE1BUF9kZXZpY2VfbWFwIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IDB4JXhcbiIsIGZsYWdzKTsKKwkJQlVHKCk7CS8qIG5vdCB5ZXQuIGFjdHVhbGx5IHRoaXMgZmxhZyBpcyBub3QgdXNlZC4gKi8KKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9Cit9CisKK2ludAorSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICp1b3AsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpZiAoY21kID09IEdOVFRBQk9QX21hcF9ncmFudF9yZWYpIHsKKwkJdW5zaWduZWQgaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlnbnR0YWJfbWFwX2dyYW50X3JlZl9wcmUoCisJCQkJKHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqKXVvcCArIGkpOworCQl9CisJfQorCXJldHVybiB4ZW5jb21tX2h5cGVyY2FsbF9ncmFudF90YWJsZV9vcChjbWQsIHVvcCwgY291bnQpOworfQorCitFWFBPUlRfU1lNQk9MKEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3ApOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi9oeXBlcmNhbGwuUyBiL2FyY2gvaWE2NC94ZW4vaHlwZXJjYWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmZjBiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC94ZW4vaHlwZXJjYWxsLlMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIFN1cHBvcnQgcm91dGluZXMgZm9yIFhlbiBoeXBlcmNhbGxzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IERhbiBNYWdlbmhlaW1lciA8ZGFuLm1hZ2VuaGVpbWVyQGhwLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBZYW96dSAoRWRkaWUpIERvbmcgPGVkZGllLmRvbmdAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS94ZW4vcHJpdm9wLmg+CisKKy8qCisgKiBIeXBlcmNhbGxzIHdpdGhvdXQgcGFyYW1ldGVyLgorICovCisjZGVmaW5lIF9fSENBTEwwKG5hbWUsaGNhbGwpCQlcCisJR0xPQkFMX0VOVFJZKG5hbWUpOwkJXAorCWJyZWFrCWhjYWxsOwkJCVwKKwlici5yZXQuc3B0ay5tYW55IHJwOwkJXAorCUVORChuYW1lKQorCisvKgorICogSHlwZXJjYWxscyB3aXRoIDEgcGFyYW1ldGVyLgorICovCisjZGVmaW5lIF9fSENBTEwxKG5hbWUsaGNhbGwpCQlcCisJR0xPQkFMX0VOVFJZKG5hbWUpOwkJXAorCW1vdiByOD1yMzI7CQkJXAorCWJyZWFrCWhjYWxsOwkJCVwKKwlici5yZXQuc3B0ay5tYW55IHJwOwkJXAorCUVORChuYW1lKQorCisvKgorICogSHlwZXJjYWxscyB3aXRoIDIgcGFyYW1ldGVycy4KKyAqLworI2RlZmluZSBfX0hDQUxMMihuYW1lLGhjYWxsKQkJXAorCUdMT0JBTF9FTlRSWShuYW1lKTsJCVwKKwltb3Ygcjg9cjMyOwkJCVwKKwltb3Ygcjk9cjMzOwkJCVwKKwlicmVhawloY2FsbDsJCQlcCisJYnIucmV0LnNwdGsubWFueSBycDsJCVwKKwlFTkQobmFtZSkKKworX19IQ0FMTDAoeGVuX2dldF9wc3IsIEhZUEVSUFJJVk9QX0dFVF9QU1IpCitfX0hDQUxMMCh4ZW5fZ2V0X2l2ciwgSFlQRVJQUklWT1BfR0VUX0lWUikKK19fSENBTEwwKHhlbl9nZXRfdHByLCBIWVBFUlBSSVZPUF9HRVRfVFBSKQorX19IQ0FMTDAoeGVuX2h5cGVyX3NzbV9pLCBIWVBFUlBSSVZPUF9TU01fSSkKKworX19IQ0FMTDEoeGVuX3NldF90cHIsIEhZUEVSUFJJVk9QX1NFVF9UUFIpCitfX0hDQUxMMSh4ZW5fZW9pLCBIWVBFUlBSSVZPUF9FT0kpCitfX0hDQUxMMSh4ZW5fdGhhc2gsIEhZUEVSUFJJVk9QX1RIQVNIKQorX19IQ0FMTDEoeGVuX3NldF9pdG0sIEhZUEVSUFJJVk9QX1NFVF9JVE0pCitfX0hDQUxMMSh4ZW5fZ2V0X3JyLCBIWVBFUlBSSVZPUF9HRVRfUlIpCitfX0hDQUxMMSh4ZW5fZmMsIEhZUEVSUFJJVk9QX0ZDKQorX19IQ0FMTDEoeGVuX2dldF9jcHVpZCwgSFlQRVJQUklWT1BfR0VUX0NQVUlEKQorX19IQ0FMTDEoeGVuX2dldF9wbWQsIEhZUEVSUFJJVk9QX0dFVF9QTUQpCisKK19fSENBTEwyKHhlbl9wdGNnYSwgSFlQRVJQUklWT1BfUFRDX0dBKQorX19IQ0FMTDIoeGVuX3NldF9yciwgSFlQRVJQUklWT1BfU0VUX1JSKQorX19IQ0FMTDIoeGVuX3NldF9rciwgSFlQRVJQUklWT1BfU0VUX0tSKQorCisjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAorX19IQ0FMTDEoeGVuX2dldF9lZmxhZywgSFlQRVJQUklWT1BfR0VUX0VGTEFHKQorX19IQ0FMTDEoeGVuX3NldF9lZmxhZywgSFlQRVJQUklWT1BfU0VUX0VGTEFHKQkvLyByZWZlciBTRE0gdm9sMSAzLjEuOAorI2VuZGlmIC8qIENPTkZJR19JQTMyX1NVUFBPUlQgKi8KKworR0xPQkFMX0VOVFJZKHhlbl9zZXRfcnIwX3RvX3JyNCkKKwltb3Ygcjg9cjMyCisJbW92IHI5PXIzMworCW1vdiByMTA9cjM0CisJbW92IHIxMT1yMzUKKwltb3YgcjE0PXIzNgorCVhFTl9IWVBFUl9TRVRfUlIwX1RPX1JSNAorCWJyLnJldC5zcHRrLm1hbnkgcnAKKwk7OworRU5EKHhlbl9zZXRfcnIwX3RvX3JyNCkKKworR0xPQkFMX0VOVFJZKHhlbl9zZW5kX2lwaSkKKwltb3YgcjE0PXIzMgorCW1vdiByMTU9cjMzCisJbW92IHIyPTB4NDAwCisJYnJlYWsgMHgxMDAwCisJOzsKKwlici5yZXQuc3B0ay5tYW55IHJwCisJOzsKK0VORCh4ZW5fc2VuZF9pcGkpCisKK0dMT0JBTF9FTlRSWShfX2h5cGVyY2FsbCkKKwltb3YgcjI9cjM3CisJYnJlYWsgMHgxMDAwCisJYnIucmV0LnNwdGsubWFueSBiMAorCTs7CitFTkQoX19oeXBlcmNhbGwpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL2h5cGVydmlzb3IuYyBiL2FyY2gvaWE2NC94ZW4vaHlwZXJ2aXNvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYzRkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQveGVuL2h5cGVydmlzb3IuYwpAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQveGVuL2h5cGVydmlzb3IuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lZmkuaD4KKyNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20veGVuL3ByaXZvcC5oPgorCisjaW5jbHVkZSAiaXJxX3hlbi5oIgorCitzdHJ1Y3Qgc2hhcmVkX2luZm8gKkhZUEVSVklTT1Jfc2hhcmVkX2luZm8gX19yZWFkX21vc3RseSA9CisJKHN0cnVjdCBzaGFyZWRfaW5mbyAqKVhTSV9CQVNFOworRVhQT1JUX1NZTUJPTChIWVBFUlZJU09SX3NoYXJlZF9pbmZvKTsKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHZjcHVfaW5mbyAqLCB4ZW5fdmNwdSk7CisKK3N0cnVjdCBzdGFydF9pbmZvICp4ZW5fc3RhcnRfaW5mbzsKK0VYUE9SVF9TWU1CT0woeGVuX3N0YXJ0X2luZm8pOworCitFWFBPUlRfU1lNQk9MKHhlbl9kb21haW5fdHlwZSk7CisKK0VYUE9SVF9TWU1CT0woX19oeXBlcmNhbGwpOworCisvKiBTdG9sZW4gZnJvbSBhcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgKi8KKy8qCisgKiBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHZjcHUgaW5mbyBwbGFjZW1lbnQgaXMgYXZhaWxhYmxlIG9uIGFsbAorICogVkNQVXMuICBXZSBhc3N1bWUgaXQgaXMgdG8gc3RhcnQgd2l0aCwgYW5kIHRoZW4gc2V0IGl0IHRvIHplcm8gb24KKyAqIHRoZSBmaXJzdCBmYWlsdXJlLiAgVGhpcyBpcyBiZWNhdXNlIGl0IGNhbiBzdWNjZWVkIG9uIHNvbWUgVkNQVXMKKyAqIGFuZCBub3Qgb3RoZXJzLCBzaW5jZSBpdCBjYW4gaW52b2x2ZSBoeXBlcnZpc29yIG1lbW9yeSBhbGxvY2F0aW9uLAorICogb3IgYmVjYXVzZSB0aGUgZ3Vlc3QgZmFpbGVkIHRvIGd1YXJhbnRlZSBhbGwgdGhlIGFwcHJvcHJpYXRlCisgKiBjb25zdHJhaW50cyBvbiBhbGwgVkNQVXMgKGllIGJ1ZmZlciBjYW4ndCBjcm9zcyBhIHBhZ2UgYm91bmRhcnkpLgorICoKKyAqIE5vdGUgdGhhdCBhbnkgcGFydGljdWxhciBDUFUgbWF5IGJlIHVzaW5nIGEgcGxhY2VkIHZjcHUgc3RydWN0dXJlLAorICogYnV0IHdlIGNhbiBvbmx5IG9wdGltaXNlIGlmIHRoZSBhbGwgYXJlLgorICoKKyAqIDA6IG5vdCBhdmFpbGFibGUsIDE6IGF2YWlsYWJsZQorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fdmNwdV9zZXR1cChpbnQgY3B1KQoreworCS8qCisJICogV0FSTklORzoKKwkgKiBiZWZvcmUgY2hhbmdpbmcgTUFYX1ZJUlRfQ1BVUywKKwkgKiBjaGVjayB0aGF0IHNoYXJlZF9pbmZvIGZpdHMgb24gYSBwYWdlCisJICovCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2hhcmVkX2luZm8pID4gUEFHRV9TSVpFKTsKKwlwZXJfY3B1KHhlbl92Y3B1LCBjcHUpID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1tjcHVdOworfQorCit2b2lkIF9faW5pdCB4ZW5fc2V0dXBfdmNwdV9pbmZvX3BsYWNlbWVudCh2b2lkKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQl4ZW5fdmNwdV9zZXR1cChjcHUpOworfQorCit2b2lkIF9fY3B1aW5pdAoreGVuX2NwdV9pbml0KHZvaWQpCit7CisJeGVuX3NtcF9pbnRyX2luaXQoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBvcHQgZmVhdHVyZQorICovCit2b2lkCit4ZW5faWE2NF9lbmFibGVfb3B0X2ZlYXR1cmUodm9pZCkKK3sKKwkvKiBFbmFibGUgcmVnaW9uIDcgaWRlbnRpdHkgbWFwIG9wdGltaXphdGlvbnMgaW4gWGVuICovCisJc3RydWN0IHhlbl9pYTY0X29wdF9mZWF0dXJlIG9wdGY7CisKKwlvcHRmLmNtZCA9IFhFTl9JQTY0X09QVEZfSURFTlRfTUFQX1JFRzc7CisJb3B0Zi5vbiA9IFhFTl9JQTY0X09QVEZfT047CisJb3B0Zi5wZ3Byb3QgPSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKTsKKwlvcHRmLmtleSA9IDA7CS8qIE5vIGtleSBvbiBsaW51eC4gKi8KKwlIWVBFUlZJU09SX29wdF9mZWF0dXJlKCZvcHRmKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vaXJxX3hlbi5jIGIvYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5M2FhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC94ZW4vaXJxX3hlbi5jCkBAIC0wLDAgKzEsNDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQveGVuL2lycV94ZW4uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9jYWxsYmFjay5oPgorI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KKworI2luY2x1ZGUgPGFzbS94ZW4vcHJpdm9wLmg+CisKKyNpbmNsdWRlICJpcnFfeGVuLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHB2X2lycV9vcHMKKyAqIGlycSBvcGVyYXRpb25zCisgKi8KKworc3RhdGljIGludAoreGVuX2Fzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEpCit7CisJc3RydWN0IHBoeXNkZXZfaXJxIGlycV9vcDsKKworCWlycV9vcC5pcnEgPSBpcnE7CisJaWYgKEhZUEVSVklTT1JfcGh5c2Rldl9vcChQSFlTREVWT1BfYWxsb2NfaXJxX3ZlY3RvciwgJmlycV9vcCkpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIGlycV9vcC52ZWN0b3I7Cit9CisKK3N0YXRpYyB2b2lkCit4ZW5fZnJlZV9pcnFfdmVjdG9yKGludCB2ZWN0b3IpCit7CisJc3RydWN0IHBoeXNkZXZfaXJxIGlycV9vcDsKKworCWlmICh2ZWN0b3IgPCBJQTY0X0ZJUlNUX0RFVklDRV9WRUNUT1IgfHwKKwkgICAgdmVjdG9yID4gSUE2NF9MQVNUX0RFVklDRV9WRUNUT1IpCisJCXJldHVybjsKKworCWlycV9vcC52ZWN0b3IgPSB2ZWN0b3I7CisJaWYgKEhZUEVSVklTT1JfcGh5c2Rldl9vcChQSFlTREVWT1BfZnJlZV9pcnFfdmVjdG9yLCAmaXJxX29wKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHhlbl9mcmVlX2lycV92ZWNvdHIgZmFpbCB2ZWN0b3I9JWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmVjdG9yKTsKK30KKworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCB0aW1lcl9pcnEpID0gLTE7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBpcGlfaXJxKSA9IC0xOworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmVzY2hlZF9pcnEpID0gLTE7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjbWNfaXJxKSA9IC0xOworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgY21jcF9pcnEpID0gLTE7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjcGVwX2lycSkgPSAtMTsKKyNkZWZpbmUgTkFNRV9TSVpFCTE1CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCB0aW1lcl9uYW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIGlwaV9uYW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIHJlc2NoZWRfbmFtZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCBjbWNfbmFtZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCBjbWNwX25hbWUpOworc3RhdGljIERFRklORV9QRVJfQ1BVKGNoYXJbTkFNRV9TSVpFXSwgY3BlcF9uYW1lKTsKKyN1bmRlZiBOQU1FX1NJWkUKKworc3RydWN0IHNhdmVkX2lycSB7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Cit9OworLyogMTYgc2hvdWxkIGJlIGZhciBvcHRpbWlzdGljIHZhbHVlLCBzaW5jZSBvbmx5IHNldmVyYWwgcGVyY3B1IGlycXMKKyAqIGFyZSByZWdpc3RlcmVkIGVhcmx5LgorICovCisjZGVmaW5lIE1BWF9MQVRFX0lSUQkxNgorc3RhdGljIHN0cnVjdCBzYXZlZF9pcnEgc2F2ZWRfcGVyY3B1X2lycXNbTUFYX0xBVEVfSVJRXTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBsYXRlX2lycV9jbnQ7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2F2ZWRfaXJxX2NudDsKK3N0YXRpYyBpbnQgeGVuX3NsYWJfcmVhZHk7CisKKyNpZmRlZiBDT05GSUdfU01QCisvKiBEdW1teSBzdHViLiBUaG91Z2ggd2UgbWF5IGNoZWNrIFhFTl9SRVNDSEVEVUxFX1ZFQ1RPUiBiZWZvcmUgX19kb19JUlEsCisgKiBpdCBlbmRzIHVwIHRvIGlzc3VlIHNldmVyYWwgbWVtb3J5IGFjY2Vzc2VzIHVwb24gcGVyY3B1IGRhdGEgYW5kCisgKiB0aHVzIGFkZHMgdW5uZWNlc3NhcnkgdHJhZmZpYyB0byBvdGhlciBwYXRocy4KKyAqLworc3RhdGljIGlycXJldHVybl90Cit4ZW5fZHVtbXlfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHhlbl9pcGlfaXJxYWN0aW9uID0geworCS5oYW5kbGVyID0JaGFuZGxlX0lQSSwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAorCS5uYW1lID0JCSJJUEkiCit9OworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB4ZW5fcmVzY2hlZF9pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIgPQl4ZW5fZHVtbXlfaGFuZGxlciwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAorCS5uYW1lID0JCSJyZXNjaGVkIgorfTsKKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24geGVuX3RsYl9pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIgPQl4ZW5fZHVtbXlfaGFuZGxlciwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAorCS5uYW1lID0JCSJ0bGJfZmx1c2giCit9OworI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIHhlbiB2ZXJzaW9uIHBlcmNwdSBpcnEgcmVnaXN0cmF0aW9uLCB3aGljaCBuZWVkcyBiaW5kCisgKiB0byB4ZW4gc3BlY2lmaWMgZXZ0Y2huIHN1Yi1zeXN0ZW0uIE9uZSB0cmljayBoZXJlIGlzIHRoYXQgeGVuCisgKiBldnRjaG4gYmluZGluZyBpbnRlcmZhY2UgZGVwZW5kcyBvbiBrbWFsbG9jIGJlY2F1c2UgcmVsYXRlZAorICogcG9ydCBuZWVkcyB0byBiZSBmcmVlZCBhdCBkZXZpY2UvY3B1IGRvd24uIFNvIHdlIGNhY2hlIHRoZQorICogcmVnaXN0cmF0aW9uIG9uIEJTUCBiZWZvcmUgc2xhYiBpcyByZWFkeSBhbmQgdGhlbiBkZWFsIHRoZW0KKyAqIGF0IGxhdGVyIHBvaW50LiBGb3IgcmVzdCBpbnN0YW5jZXMgaGFwcGVuaW5nIGFmdGVyIHNsYWIgcmVhZHksCisgKiB3ZSBob29rIHRoZW0gdG8geGVuIGV2dGNobiBpbW1lZGlhdGVseS4KKyAqCisgKiBGSVhNRTogTUNBIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZmFyLCBhbmQgdGh1cyAibm9tY2EiIGJvb3QgcGFyYW0gaXMKKyAqIHJlcXVpcmVkLgorICovCitzdGF0aWMgdm9pZAorX194ZW5fcmVnaXN0ZXJfcGVyY3B1X2lycSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgdmVjLAorCQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCBpbnQgc2F2ZSkKK3sKKwlpcnFfZGVzY190ICpkZXNjOworCWludCBpcnEgPSAwOworCisJaWYgKHhlbl9zbGFiX3JlYWR5KSB7CisJCXN3aXRjaCAodmVjKSB7CisJCWNhc2UgSUE2NF9USU1FUl9WRUNUT1I6CisJCQlzbnByaW50ZihwZXJfY3B1KHRpbWVyX25hbWUsIGNwdSksCisJCQkJIHNpemVvZihwZXJfY3B1KHRpbWVyX25hbWUsIGNwdSkpLAorCQkJCSAiJXMlZCIsIGFjdGlvbi0+bmFtZSwgY3B1KTsKKwkJCWlycSA9IGJpbmRfdmlycV90b19pcnFoYW5kbGVyKFZJUlFfSVRDLCBjcHUsCisJCQkJYWN0aW9uLT5oYW5kbGVyLCBhY3Rpb24tPmZsYWdzLAorCQkJCXBlcl9jcHUodGltZXJfbmFtZSwgY3B1KSwgYWN0aW9uLT5kZXZfaWQpOworCQkJcGVyX2NwdSh0aW1lcl9pcnEsIGNwdSkgPSBpcnE7CisJCQlicmVhazsKKwkJY2FzZSBJQTY0X0lQSV9SRVNDSEVEVUxFOgorCQkJc25wcmludGYocGVyX2NwdShyZXNjaGVkX25hbWUsIGNwdSksCisJCQkJIHNpemVvZihwZXJfY3B1KHJlc2NoZWRfbmFtZSwgY3B1KSksCisJCQkJICIlcyVkIiwgYWN0aW9uLT5uYW1lLCBjcHUpOworCQkJaXJxID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fUkVTQ0hFRFVMRV9WRUNUT1IsIGNwdSwKKwkJCQlhY3Rpb24tPmhhbmRsZXIsIGFjdGlvbi0+ZmxhZ3MsCisJCQkJcGVyX2NwdShyZXNjaGVkX25hbWUsIGNwdSksIGFjdGlvbi0+ZGV2X2lkKTsKKwkJCXBlcl9jcHUocmVzY2hlZF9pcnEsIGNwdSkgPSBpcnE7CisJCQlicmVhazsKKwkJY2FzZSBJQTY0X0lQSV9WRUNUT1I6CisJCQlzbnByaW50ZihwZXJfY3B1KGlwaV9uYW1lLCBjcHUpLAorCQkJCSBzaXplb2YocGVyX2NwdShpcGlfbmFtZSwgY3B1KSksCisJCQkJICIlcyVkIiwgYWN0aW9uLT5uYW1lLCBjcHUpOworCQkJaXJxID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fSVBJX1ZFQ1RPUiwgY3B1LAorCQkJCWFjdGlvbi0+aGFuZGxlciwgYWN0aW9uLT5mbGFncywKKwkJCQlwZXJfY3B1KGlwaV9uYW1lLCBjcHUpLCBhY3Rpb24tPmRldl9pZCk7CisJCQlwZXJfY3B1KGlwaV9pcnEsIGNwdSkgPSBpcnE7CisJCQlicmVhazsKKwkJY2FzZSBJQTY0X0NNQ19WRUNUT1I6CisJCQlzbnByaW50ZihwZXJfY3B1KGNtY19uYW1lLCBjcHUpLAorCQkJCSBzaXplb2YocGVyX2NwdShjbWNfbmFtZSwgY3B1KSksCisJCQkJICIlcyVkIiwgYWN0aW9uLT5uYW1lLCBjcHUpOworCQkJaXJxID0gYmluZF92aXJxX3RvX2lycWhhbmRsZXIoVklSUV9NQ0FfQ01DLCBjcHUsCisJCQkJCQkgICAgICBhY3Rpb24tPmhhbmRsZXIsCisJCQkJCQkgICAgICBhY3Rpb24tPmZsYWdzLAorCQkJCQkJICAgICAgcGVyX2NwdShjbWNfbmFtZSwgY3B1KSwKKwkJCQkJCSAgICAgIGFjdGlvbi0+ZGV2X2lkKTsKKwkJCXBlcl9jcHUoY21jX2lycSwgY3B1KSA9IGlycTsKKwkJCWJyZWFrOworCQljYXNlIElBNjRfQ01DUF9WRUNUT1I6CisJCQlzbnByaW50ZihwZXJfY3B1KGNtY3BfbmFtZSwgY3B1KSwKKwkJCQkgc2l6ZW9mKHBlcl9jcHUoY21jcF9uYW1lLCBjcHUpKSwKKwkJCQkgIiVzJWQiLCBhY3Rpb24tPm5hbWUsIGNwdSk7CisJCQlpcnEgPSBiaW5kX2lwaV90b19pcnFoYW5kbGVyKFhFTl9DTUNQX1ZFQ1RPUiwgY3B1LAorCQkJCQkJICAgICBhY3Rpb24tPmhhbmRsZXIsCisJCQkJCQkgICAgIGFjdGlvbi0+ZmxhZ3MsCisJCQkJCQkgICAgIHBlcl9jcHUoY21jcF9uYW1lLCBjcHUpLAorCQkJCQkJICAgICBhY3Rpb24tPmRldl9pZCk7CisJCQlwZXJfY3B1KGNtY3BfaXJxLCBjcHUpID0gaXJxOworCQkJYnJlYWs7CisJCWNhc2UgSUE2NF9DUEVQX1ZFQ1RPUjoKKwkJCXNucHJpbnRmKHBlcl9jcHUoY3BlcF9uYW1lLCBjcHUpLAorCQkJCSBzaXplb2YocGVyX2NwdShjcGVwX25hbWUsIGNwdSkpLAorCQkJCSAiJXMlZCIsIGFjdGlvbi0+bmFtZSwgY3B1KTsKKwkJCWlycSA9IGJpbmRfaXBpX3RvX2lycWhhbmRsZXIoWEVOX0NQRVBfVkVDVE9SLCBjcHUsCisJCQkJCQkgICAgIGFjdGlvbi0+aGFuZGxlciwKKwkJCQkJCSAgICAgYWN0aW9uLT5mbGFncywKKwkJCQkJCSAgICAgcGVyX2NwdShjcGVwX25hbWUsIGNwdSksCisJCQkJCQkgICAgIGFjdGlvbi0+ZGV2X2lkKTsKKwkJCXBlcl9jcHUoY3BlcF9pcnEsIGNwdSkgPSBpcnE7CisJCQlicmVhazsKKwkJY2FzZSBJQTY0X0NQRV9WRUNUT1I6CisJCWNhc2UgSUE2NF9NQ0FfUkVOREVaX1ZFQ1RPUjoKKwkJY2FzZSBJQTY0X1BFUkZNT05fVkVDVE9SOgorCQljYXNlIElBNjRfTUNBX1dBS0VVUF9WRUNUT1I6CisJCWNhc2UgSUE2NF9TUFVSSU9VU19JTlRfVkVDVE9SOgorCQkJLyogTm8gbmVlZCB0byBjb21wbGFpbiwgdGhlc2UgYXJlbid0IHN1cHBvcnRlZC4gKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGVyY3B1IGlycSAlZCBpcyB1bnN1cHBvcnRlZCAiCisJCQkgICAgICAgImJ5IHhlbiFcbiIsIHZlYyk7CisJCQlicmVhazsKKwkJfQorCQlCVUdfT04oaXJxIDwgMCk7CisKKwkJaWYgKGlycSA+IDApIHsKKwkJCS8qCisJCQkgKiBNYXJrIHBlcmNwdS4gIFdpdGhvdXQgdGhpcywgbWlncmF0ZV9pcnFzKCkgd2lsbAorCQkJICogbWFyayB0aGUgaW50ZXJydXB0IGZvciBtaWdyYXRpb25zIGFuZCB0cmlnZ2VyIGl0CisJCQkgKiBvbiBjcHUgaG90cGx1Zy4KKwkJCSAqLworCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRVJfQ1BVOworCQl9CisJfQorCisJLyogRm9yIEJTUCwgd2UgY2FjaGUgcmVnaXN0ZXJlZCBwZXJjcHUgaXJxcywgYW5kIHRoZW4gcmUtd2FsaworCSAqIHRoZW0gd2hlbiBpbml0aWFsaXppbmcgQVBzCisJICovCisJaWYgKCFjcHUgJiYgc2F2ZSkgeworCQlCVUdfT04oc2F2ZWRfaXJxX2NudCA9PSBNQVhfTEFURV9JUlEpOworCQlzYXZlZF9wZXJjcHVfaXJxc1tzYXZlZF9pcnFfY250XS5pcnEgPSB2ZWM7CisJCXNhdmVkX3BlcmNwdV9pcnFzW3NhdmVkX2lycV9jbnRdLmFjdGlvbiA9IGFjdGlvbjsKKwkJc2F2ZWRfaXJxX2NudCsrOworCQlpZiAoIXhlbl9zbGFiX3JlYWR5KQorCQkJbGF0ZV9pcnFfY250Kys7CisJfQorfQorCitzdGF0aWMgdm9pZAoreGVuX3JlZ2lzdGVyX3BlcmNwdV9pcnEoaWE2NF92ZWN0b3IgdmVjLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCit7CisJX194ZW5fcmVnaXN0ZXJfcGVyY3B1X2lycShzbXBfcHJvY2Vzc29yX2lkKCksIHZlYywgYWN0aW9uLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3hlbl9iaW5kX2Vhcmx5X3BlcmNwdV9pcnEodm9pZCkKK3sKKwlpbnQgaTsKKworCXhlbl9zbGFiX3JlYWR5ID0gMTsKKwkvKiBUaGVyZSdzIG5vIHJhY2Ugd2hlbiBhY2Nlc3NpbmcgdGhpcyBjYWNoZWQgYXJyYXksIHNpbmNlIG9ubHkKKwkgKiBCU1Agd2lsbCBmYWNlIHdpdGggc3VjaCBzdGVwIHNob3J0bHkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGF0ZV9pcnFfY250OyBpKyspCisJCV9feGVuX3JlZ2lzdGVyX3BlcmNwdV9pcnEoc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCQkgIHNhdmVkX3BlcmNwdV9pcnFzW2ldLmlycSwKKwkJCQkJICBzYXZlZF9wZXJjcHVfaXJxc1tpXS5hY3Rpb24sIDApOworfQorCisvKiBGSVhNRTogVGhlcmUncyBubyBvYnZpb3VzIHBvaW50IHRvIGNoZWNrIHdoZXRoZXIgc2xhYiBpcyByZWFkeS4gU28KKyAqIGEgaGFjayBpcyB1c2VkIGhlcmUgYnkgdXRpbGl6aW5nIGEgbGF0ZSB0aW1lIGhvb2suCisgKi8KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCBfX2RldmluaXQKK3VuYmluZF9ldnRjaG5fY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKworCWlmIChhY3Rpb24gPT0gQ1BVX0RFQUQpIHsKKwkJLyogVW5yZWdpc3RlciBldnRjaG4uICAqLworCQlpZiAocGVyX2NwdShjcGVwX2lycSwgY3B1KSA+PSAwKSB7CisJCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoY3BlcF9pcnEsIGNwdSksIE5VTEwpOworCQkJcGVyX2NwdShjcGVwX2lycSwgY3B1KSA9IC0xOworCQl9CisJCWlmIChwZXJfY3B1KGNtY3BfaXJxLCBjcHUpID49IDApIHsKKwkJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdShjbWNwX2lycSwgY3B1KSwgTlVMTCk7CisJCQlwZXJfY3B1KGNtY3BfaXJxLCBjcHUpID0gLTE7CisJCX0KKwkJaWYgKHBlcl9jcHUoY21jX2lycSwgY3B1KSA+PSAwKSB7CisJCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoY21jX2lycSwgY3B1KSwgTlVMTCk7CisJCQlwZXJfY3B1KGNtY19pcnEsIGNwdSkgPSAtMTsKKwkJfQorCQlpZiAocGVyX2NwdShpcGlfaXJxLCBjcHUpID49IDApIHsKKwkJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdShpcGlfaXJxLCBjcHUpLCBOVUxMKTsKKwkJCXBlcl9jcHUoaXBpX2lycSwgY3B1KSA9IC0xOworCQl9CisJCWlmIChwZXJfY3B1KHJlc2NoZWRfaXJxLCBjcHUpID49IDApIHsKKwkJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdShyZXNjaGVkX2lycSwgY3B1KSwKKwkJCQkJCU5VTEwpOworCQkJcGVyX2NwdShyZXNjaGVkX2lycSwgY3B1KSA9IC0xOworCQl9CisJCWlmIChwZXJfY3B1KHRpbWVyX2lycSwgY3B1KSA+PSAwKSB7CisJCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUodGltZXJfaXJxLCBjcHUpLCBOVUxMKTsKKwkJCXBlcl9jcHUodGltZXJfaXJxLCBjcHUpID0gLTE7CisJCX0KKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1bmJpbmRfZXZ0Y2huX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gdW5iaW5kX2V2dGNobl9jYWxsYmFjaywKKwkucHJpb3JpdHkgPSAwCit9OworI2VuZGlmCisKK3ZvaWQgeGVuX3NtcF9pbnRyX2luaXRfZWFybHkodW5zaWduZWQgaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2F2ZWRfaXJxX2NudDsgaSsrKQorCQlfX3hlbl9yZWdpc3Rlcl9wZXJjcHVfaXJxKGNwdSwgc2F2ZWRfcGVyY3B1X2lycXNbaV0uaXJxLAorCQkJCQkgIHNhdmVkX3BlcmNwdV9pcnFzW2ldLmFjdGlvbiwgMCk7CisjZW5kaWYKK30KKwordm9pZCB4ZW5fc21wX2ludHJfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBjYWxsYmFja19yZWdpc3RlciBldmVudCA9IHsKKwkJLnR5cGUgPSBDQUxMQkFDS1RZUEVfZXZlbnQsCisJCS5hZGRyZXNzID0geyAuaXAgPSAodW5zaWduZWQgbG9uZykmeGVuX2V2ZW50X2NhbGxiYWNrIH0sCisJfTsKKworCWlmIChjcHUgPT0gMCkgeworCQkvKiBJbml0aWFsaXphdGlvbiB3YXMgYWxyZWFkeSBkb25lIGZvciBib290IGNwdS4gICovCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJCS8qIFJlZ2lzdGVyIHRoZSBub3RpZmllciBvbmx5IG9uY2UuICAqLworCQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnVuYmluZF9ldnRjaG5fbm90aWZpZXIpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwkvKiBUaGlzIHNob3VsZCBiZSBwaWdneWJhY2sgd2hlbiBzZXR1cCB2Y3B1IGd1ZXN0IGNvbnRleHQgKi8KKwlCVUdfT04oSFlQRVJWSVNPUl9jYWxsYmFja19vcChDQUxMQkFDS09QX3JlZ2lzdGVyLCAmZXZlbnQpKTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCit9CisKK3ZvaWQgX19pbml0Cit4ZW5faXJxX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgZXZlbnQgPSB7CisJCS50eXBlID0gQ0FMTEJBQ0tUWVBFX2V2ZW50LAorCQkuYWRkcmVzcyA9IHsgLmlwID0gKHVuc2lnbmVkIGxvbmcpJnhlbl9ldmVudF9jYWxsYmFjayB9LAorCX07CisKKwl4ZW5faW5pdF9JUlEoKTsKKwlCVUdfT04oSFlQRVJWSVNPUl9jYWxsYmFja19vcChDQUxMQkFDS09QX3JlZ2lzdGVyLCAmZXZlbnQpKTsKKwlsYXRlX3RpbWVfaW5pdCA9IHhlbl9iaW5kX2Vhcmx5X3BlcmNwdV9pcnE7Cit9CisKK3ZvaWQKK3hlbl9wbGF0Zm9ybV9zZW5kX2lwaShpbnQgY3B1LCBpbnQgdmVjdG9yLCBpbnQgZGVsaXZlcnlfbW9kZSwgaW50IHJlZGlyZWN0KQoreworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBUT0RPOiB3ZSBuZWVkIHRvIGNhbGwgdmNwdV91cCBoZXJlICovCisJaWYgKHVubGlrZWx5KHZlY3RvciA9PSBhcF93YWtldXBfdmVjdG9yKSkgeworCQkvKiBYWFgKKwkJICogVGhpcyBzaG91bGQgYmUgaW4gX19jcHVfdXAoY3B1KSBpbiBpYTY0IHNtcGJvb3QuYworCQkgKiBsaWtlIHg4Ni4gQnV0IGRvbid0IHdhbnQgdG8gbW9kaWZ5IGl0LAorCQkgKiBrZWVwIGl0IHVudG91Y2hlZC4KKwkJICovCisJCXhlbl9zbXBfaW50cl9pbml0X2Vhcmx5KGNwdSk7CisKKwkJeGVuX3NlbmRfaXBpKGNwdSwgdmVjdG9yKTsKKwkJLyogdmNwdV9wcmVwYXJlX2FuZF91cChjcHUpOyAqLworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlzd2l0Y2ggKHZlY3RvcikgeworCWNhc2UgSUE2NF9JUElfVkVDVE9SOgorCQl4ZW5fc2VuZF9JUElfb25lKGNwdSwgWEVOX0lQSV9WRUNUT1IpOworCQlicmVhazsKKwljYXNlIElBNjRfSVBJX1JFU0NIRURVTEU6CisJCXhlbl9zZW5kX0lQSV9vbmUoY3B1LCBYRU5fUkVTQ0hFRFVMRV9WRUNUT1IpOworCQlicmVhazsKKwljYXNlIElBNjRfQ01DUF9WRUNUT1I6CisJCXhlbl9zZW5kX0lQSV9vbmUoY3B1LCBYRU5fQ01DUF9WRUNUT1IpOworCQlicmVhazsKKwljYXNlIElBNjRfQ1BFUF9WRUNUT1I6CisJCXhlbl9zZW5kX0lQSV9vbmUoY3B1LCBYRU5fQ1BFUF9WRUNUT1IpOworCQlicmVhazsKKwljYXNlIElBNjRfVElNRVJfVkVDVE9SOiB7CisJCS8qIHRoaXMgaXMgdXNlZCBvbmx5IG9uY2UgYnkgY2hlY2tfc2FsX2NhY2hlX2ZsdXNoKCkKKwkJICAgYXQgYm9vdCB0aW1lICovCisJCXN0YXRpYyBpbnQgdXNlZCA9IDA7CisJCWlmICghdXNlZCkgeworCQkJeGVuX3NlbmRfaXBpKGNwdSwgSUE2NF9USU1FUl9WRUNUT1IpOworCQkJdXNlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCX0KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbnN1cHBvcnRlZCBJUEkgdHlwZSAweCV4XG4iLAorCQkgICAgICAgdmVjdG9yKTsKKwkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKDApOyAvKiBkZWZhdWx0cyB0byAwIGlycSAqLworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAoreGVuX3JlZ2lzdGVyX2lwaSh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZWdpc3Rlcl9wZXJjcHVfaXJxKElBNjRfSVBJX1ZFQ1RPUiwgJnhlbl9pcGlfaXJxYWN0aW9uKTsKKwlyZWdpc3Rlcl9wZXJjcHVfaXJxKElBNjRfSVBJX1JFU0NIRURVTEUsICZ4ZW5fcmVzY2hlZF9pcnFhY3Rpb24pOworCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9JUElfTE9DQUxfVExCX0ZMVVNILCAmeGVuX3RsYl9pcnFhY3Rpb24pOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCit4ZW5fcmVzZW5kX2lycSh1bnNpZ25lZCBpbnQgdmVjdG9yKQoreworCSh2b2lkKXJlc2VuZF9pcnFfb25fZXZ0Y2huKHZlY3Rvcik7Cit9CisKK2NvbnN0IHN0cnVjdCBwdl9pcnFfb3BzIHhlbl9pcnFfb3BzIF9faW5pdGRhdGEgPSB7CisJLnJlZ2lzdGVyX2lwaSA9IHhlbl9yZWdpc3Rlcl9pcGksCisKKwkuYXNzaWduX2lycV92ZWN0b3IgPSB4ZW5fYXNzaWduX2lycV92ZWN0b3IsCisJLmZyZWVfaXJxX3ZlY3RvciA9IHhlbl9mcmVlX2lycV92ZWN0b3IsCisJLnJlZ2lzdGVyX3BlcmNwdV9pcnEgPSB4ZW5fcmVnaXN0ZXJfcGVyY3B1X2lycSwKKworCS5yZXNlbmRfaXJxID0geGVuX3Jlc2VuZF9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmggYi9hcmNoL2lhNjQveGVuL2lycV94ZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjExMGYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIElSUV9YRU5fSAorI2RlZmluZSBJUlFfWEVOX0gKKworZXh0ZXJuIHZvaWQgKCpsYXRlX3RpbWVfaW5pdCkodm9pZCk7CitleHRlcm4gY2hhciB4ZW5fZXZlbnRfY2FsbGJhY2s7Cit2b2lkIF9faW5pdCB4ZW5faW5pdF9JUlEodm9pZCk7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHZfaXJxX29wcyB4ZW5faXJxX29wcyBfX2luaXRkYXRhOworZXh0ZXJuIHZvaWQgeGVuX3NtcF9pbnRyX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4ZW5fc2VuZF9pcGkoaW50IGNwdSwgaW50IHZlYyk7CisKKyNlbmRpZiAvKiBJUlFfWEVOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vbWFjaHZlYy5jIGIvYXJjaC9pYTY0L3hlbi9tYWNodmVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkNTg4YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC94ZW4vbWFjaHZlYy5jCkBAIC0wLDAgKzEsNCBAQAorI2RlZmluZSBNQUNIVkVDX1BMQVRGT1JNX05BTUUgICAgICAgICAgIHhlbgorI2RlZmluZSBNQUNIVkVDX1BMQVRGT1JNX0hFQURFUiAgICAgICAgIDxhc20vbWFjaHZlY194ZW4uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlY19pbml0Lmg+CisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vc3VzcGVuZC5jIGIvYXJjaC9pYTY0L3hlbi9zdXNwZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2NmIwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC94ZW4vc3VzcGVuZC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFyY2gvaWE2NC94ZW4vc3VzcGVuZC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBzdXNwZW5kL3Jlc3VtZQorICovCisKKyNpbmNsdWRlIDx4ZW4veGVuLW9wcy5oPgorI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgInRpbWUuaCIKKwordm9pZAoreGVuX21tX3Bpbl9hbGwodm9pZCkKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3ZvaWQKK3hlbl9tbV91bnBpbl9hbGwodm9pZCkKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3ZvaWQgeGVuX3ByZV9kZXZpY2Vfc3VzcGVuZCh2b2lkKQoreworCS8qIG5vdGhpbmcgKi8KK30KKwordm9pZAoreGVuX3ByZV9zdXNwZW5kKCkKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3ZvaWQKK3hlbl9wb3N0X3N1c3BlbmQoaW50IHN1c3BlbmRfY2FuY2VsbGVkKQoreworCWlmIChzdXNwZW5kX2NhbmNlbGxlZCkKKwkJcmV0dXJuOworCisJeGVuX2lhNjRfZW5hYmxlX29wdF9mZWF0dXJlKCk7CisJLyogYWRkIG1vcmUgaWYgbmVjZXNzYXJ5ICovCit9CisKK3ZvaWQgeGVuX2FyY2hfcmVzdW1lKHZvaWQpCit7CisJeGVuX3RpbWVyX3Jlc3VtZV9vbl9hcHMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vdGltZS5jIGIvYXJjaC9pYTY0L3hlbi90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1YTk0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC94ZW4vdGltZS5jCkBAIC0wLDAgKzEsMjEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQveGVuL3RpbWUuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKworI2luY2x1ZGUgPGFzbS90aW1leC5oPgorCisjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcnZpc29yLmg+CisKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3ZjcHUuaD4KKworI2luY2x1ZGUgIi4uL2tlcm5lbC9mc3lzY2FsbF9ndG9kX2RhdGEuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywgcnVuc3RhdGUpOworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcHJvY2Vzc2VkX3N0b2xlbl90aW1lKTsKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHByb2Nlc3NlZF9ibG9ja2VkX3RpbWUpOworCisvKiB0YWtlbiBmcm9tIGkzODYva2VybmVsL3RpbWUteGVuLmMgKi8KK3N0YXRpYyB2b2lkIHhlbl9pbml0X21pc3NpbmdfdGlja3NfYWNjb3VudGluZyhpbnQgY3B1KQoreworCXN0cnVjdCB2Y3B1X3JlZ2lzdGVyX3J1bnN0YXRlX21lbW9yeV9hcmVhIGFyZWE7CisJc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyAqcnVuc3RhdGUgPSAmcGVyX2NwdShydW5zdGF0ZSwgY3B1KTsKKwlpbnQgcmM7CisKKwltZW1zZXQocnVuc3RhdGUsIDAsIHNpemVvZigqcnVuc3RhdGUpKTsKKworCWFyZWEuYWRkci52ID0gcnVuc3RhdGU7CisJcmMgPSBIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX3JlZ2lzdGVyX3J1bnN0YXRlX21lbW9yeV9hcmVhLCBjcHUsCisJCQkJJmFyZWEpOworCVdBUk5fT04ocmMgJiYgcmMgIT0gLUVOT1NZUyk7CisKKwlwZXJfY3B1KHByb2Nlc3NlZF9ibG9ja2VkX3RpbWUsIGNwdSkgPSBydW5zdGF0ZS0+dGltZVtSVU5TVEFURV9ibG9ja2VkXTsKKwlwZXJfY3B1KHByb2Nlc3NlZF9zdG9sZW5fdGltZSwgY3B1KSA9IHJ1bnN0YXRlLT50aW1lW1JVTlNUQVRFX3J1bm5hYmxlXQorCQkJCQkgICAgKyBydW5zdGF0ZS0+dGltZVtSVU5TVEFURV9vZmZsaW5lXTsKK30KKworLyoKKyAqIFJ1bnN0YXRlIGFjY291bnRpbmcKKyAqLworLyogc3RvbGVuIGZyb20gYXJjaC94ODYveGVuL3RpbWUuYyAqLworc3RhdGljIHZvaWQgZ2V0X3J1bnN0YXRlX3NuYXBzaG90KHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8gKnJlcykKK3sKKwl1NjQgc3RhdGVfdGltZTsKKwlzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvICpzdGF0ZTsKKworCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKKworCXN0YXRlID0gJl9fZ2V0X2NwdV92YXIocnVuc3RhdGUpOworCisJLyoKKwkgKiBUaGUgcnVuc3RhdGUgaW5mbyBpcyBhbHdheXMgdXBkYXRlZCBieSB0aGUgaHlwZXJ2aXNvciBvbgorCSAqIHRoZSBjdXJyZW50IENQVSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhbnl0aGluZworCSAqIHN0cm9uZ2VyIHRoYW4gYSBjb21waWxlciBiYXJyaWVyIHdoZW4gZmV0Y2hpbmcgaXQuCisJICovCisJZG8geworCQlzdGF0ZV90aW1lID0gc3RhdGUtPnN0YXRlX2VudHJ5X3RpbWU7CisJCXJtYigpOworCQkqcmVzID0gKnN0YXRlOworCQlybWIoKTsKKwl9IHdoaWxlIChzdGF0ZS0+c3RhdGVfZW50cnlfdGltZSAhPSBzdGF0ZV90aW1lKTsKK30KKworI2RlZmluZSBOU19QRVJfVElDSyAoMTAwMDAwMDAwMExML0haKQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworY29uc2lkZXJfc3RlYWxfdGltZSh1bnNpZ25lZCBsb25nIG5ld19pdG0pCit7CisJdW5zaWduZWQgbG9uZyBzdG9sZW4sIGJsb2NrZWQ7CisJdW5zaWduZWQgbG9uZyBkZWx0YV9pdG0gPSAwLCBzdG9sZW50aWNrID0gMDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8gcnVuc3RhdGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKKworCWdldF9ydW5zdGF0ZV9zbmFwc2hvdCgmcnVuc3RhdGUpOworCisJLyoKKwkgKiBDaGVjayBmb3IgdmNwdSBtaWdyYXRpb24gZWZmZWN0CisJICogSW4gdGhpcyBjYXNlLCBpdGMgdmFsdWUgaXMgcmV2ZXJzZWQuCisJICogVGhpcyBjYXVzZXMgaHVnZSBzdG9sZW4gdmFsdWUuCisJICogVGhpcyBmdW5jdGlvbiBqdXN0IGNoZWNrcyBhbmQgcmVqZWN0IHRoaXMgZWZmZWN0LgorCSAqLworCWlmICghdGltZV9hZnRlcl9lcShydW5zdGF0ZS50aW1lW1JVTlNUQVRFX2Jsb2NrZWRdLAorCQkJICAgcGVyX2NwdShwcm9jZXNzZWRfYmxvY2tlZF90aW1lLCBjcHUpKSkKKwkJYmxvY2tlZCA9IDA7CisKKwlpZiAoIXRpbWVfYWZ0ZXJfZXEocnVuc3RhdGUudGltZVtSVU5TVEFURV9ydW5uYWJsZV0gKworCQkJICAgcnVuc3RhdGUudGltZVtSVU5TVEFURV9vZmZsaW5lXSwKKwkJCSAgIHBlcl9jcHUocHJvY2Vzc2VkX3N0b2xlbl90aW1lLCBjcHUpKSkKKwkJc3RvbGVuID0gMDsKKworCWlmICghdGltZV9hZnRlcihkZWx0YV9pdG0gKyBuZXdfaXRtLCBpYTY0X2dldF9pdGMoKSkpCisJCXN0b2xlbnRpY2sgPSBpYTY0X2dldF9pdGMoKSAtIG5ld19pdG07CisKKwlkb19kaXYoc3RvbGVudGljaywgTlNfUEVSX1RJQ0spOworCXN0b2xlbnRpY2srKzsKKworCWRvX2RpdihzdG9sZW4sIE5TX1BFUl9USUNLKTsKKworCWlmIChzdG9sZW4gPiBzdG9sZW50aWNrKQorCQlzdG9sZW4gPSBzdG9sZW50aWNrOworCisJc3RvbGVudGljayAtPSBzdG9sZW47CisJZG9fZGl2KGJsb2NrZWQsIE5TX1BFUl9USUNLKTsKKworCWlmIChibG9ja2VkID4gc3RvbGVudGljaykKKwkJYmxvY2tlZCA9IHN0b2xlbnRpY2s7CisKKwlpZiAoc3RvbGVuID4gMCB8fCBibG9ja2VkID4gMCkgeworCQlhY2NvdW50X3N0ZWFsX3RpbWUoTlVMTCwgamlmZmllc190b19jcHV0aW1lKHN0b2xlbikpOworCQlhY2NvdW50X3N0ZWFsX3RpbWUoaWRsZV90YXNrKGNwdSksIGppZmZpZXNfdG9fY3B1dGltZShibG9ja2VkKSk7CisJCXJ1bl9sb2NhbF90aW1lcnMoKTsKKworCQlpZiAocmN1X3BlbmRpbmcoY3B1KSkKKwkJCXJjdV9jaGVja19jYWxsYmFja3MoY3B1LCB1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKKworCQlzY2hlZHVsZXJfdGljaygpOworCQlydW5fcG9zaXhfY3B1X3RpbWVycyhwKTsKKwkJZGVsdGFfaXRtICs9IGxvY2FsX2NwdV9kYXRhLT5pdG1fZGVsdGEgKiAoc3RvbGVuICsgYmxvY2tlZCk7CisKKwkJaWYgKGNwdSA9PSB0aW1lX2tlZXBlcl9pZCkgeworCQkJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisJCQlkb190aW1lcihzdG9sZW4gKyBibG9ja2VkKTsKKwkJCWxvY2FsX2NwdV9kYXRhLT5pdG1fbmV4dCA9IGRlbHRhX2l0bSArIG5ld19pdG07CisJCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCQl9IGVsc2UgeworCQkJbG9jYWxfY3B1X2RhdGEtPml0bV9uZXh0ID0gZGVsdGFfaXRtICsgbmV3X2l0bTsKKwkJfQorCQlwZXJfY3B1KHByb2Nlc3NlZF9zdG9sZW5fdGltZSwgY3B1KSArPSBOU19QRVJfVElDSyAqIHN0b2xlbjsKKwkJcGVyX2NwdShwcm9jZXNzZWRfYmxvY2tlZF90aW1lLCBjcHUpICs9IE5TX1BFUl9USUNLICogYmxvY2tlZDsKKwl9CisJcmV0dXJuIGRlbHRhX2l0bTsKK30KKworc3RhdGljIGludCB4ZW5fZG9fc3RlYWxfYWNjb3VudGluZyh1bnNpZ25lZCBsb25nICpuZXdfaXRtKQoreworCXVuc2lnbmVkIGxvbmcgZGVsdGFfaXRtOworCWRlbHRhX2l0bSA9IGNvbnNpZGVyX3N0ZWFsX3RpbWUoKm5ld19pdG0pOworCSpuZXdfaXRtICs9IGRlbHRhX2l0bTsKKwlpZiAodGltZV9hZnRlcigqbmV3X2l0bSwgaWE2NF9nZXRfaXRjKCkpICYmIGRlbHRhX2l0bSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgeGVuX2l0Y19qaXR0ZXJfZGF0YV9yZXNldCh2b2lkKQoreworCXU2NCBsY3ljbGUsIHJldDsKKworCWRvIHsKKwkJbGN5Y2xlID0gaXRjX2ppdHRlcl9kYXRhLml0Y19sYXN0Y3ljbGU7CisJCXJldCA9IGNtcHhjaGcoJml0Y19qaXR0ZXJfZGF0YS5pdGNfbGFzdGN5Y2xlLCBsY3ljbGUsIDApOworCX0gd2hpbGUgKHVubGlrZWx5KHJldCAhPSBsY3ljbGUpKTsKK30KKworc3RydWN0IHB2X3RpbWVfb3BzIHhlbl90aW1lX29wcyBfX2luaXRkYXRhID0geworCS5pbml0X21pc3NpbmdfdGlja3NfYWNjb3VudGluZwk9IHhlbl9pbml0X21pc3NpbmdfdGlja3NfYWNjb3VudGluZywKKwkuZG9fc3RlYWxfYWNjb3VudGluZwkJPSB4ZW5fZG9fc3RlYWxfYWNjb3VudGluZywKKwkuY2xvY2tzb3VyY2VfcmVzdW1lCQk9IHhlbl9pdGNfaml0dGVyX2RhdGFfcmVzZXQsCit9OworCisvKiBDYWxsZWQgYWZ0ZXIgc3VzcGVuZCwgdG8gcmVzdW1lIHRpbWUuICAqLworc3RhdGljIHZvaWQgeGVuX2xvY2FsX3RpY2tfcmVzdW1lKHZvaWQpCit7CisJLyogSnVzdCB0cmlnZ2VyIGEgdGljay4gICovCisJaWE2NF9jcHVfbG9jYWxfdGljaygpOworCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKK30KKwordm9pZAoreGVuX3RpbWVyX3Jlc3VtZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHU7CisKKwl4ZW5fbG9jYWxfdGlja19yZXN1bWUoKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQl4ZW5faW5pdF9taXNzaW5nX3RpY2tzX2FjY291bnRpbmcoY3B1KTsKK30KKworc3RhdGljIHZvaWQgaWE2NF9jcHVfbG9jYWxfdGlja19mbih2b2lkICp1bnVzZWQpCit7CisJeGVuX2xvY2FsX3RpY2tfcmVzdW1lKCk7CisJeGVuX2luaXRfbWlzc2luZ190aWNrc19hY2NvdW50aW5nKHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKK3ZvaWQKK3hlbl90aW1lcl9yZXN1bWVfb25fYXBzKHZvaWQpCit7CisJc21wX2NhbGxfZnVuY3Rpb24oJmlhNjRfY3B1X2xvY2FsX3RpY2tfZm4sIE5VTEwsIDEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi90aW1lLmggYi9hcmNoL2lhNjQveGVuL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOThkN2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3hlbi90aW1lLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L3hlbi90aW1lLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCitleHRlcm4gc3RydWN0IHB2X3RpbWVfb3BzIHhlbl90aW1lX29wcyBfX2luaXRkYXRhOwordm9pZCB4ZW5fdGltZXJfcmVzdW1lX29uX2Fwcyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4veGNvbV9oY2FsbC5jIGIvYXJjaC9pYTY0L3hlbi94Y29tX2hjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhZjc0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC94ZW4veGNvbV9oY2FsbC5jCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqICAgICAgICAgIFRyaXN0YW4gR2luZ29sZCA8dHJpc3Rhbi5naW5nb2xkQGJ1bGwubmV0PgorICoKKyAqICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNworICogICAgICAgICAgSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKiAgICAgICAgICBjb25zb2xpZGF0ZSBtaW5pIGFuZCBpbmxpbmUgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2NhbGxiYWNrLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92Y3B1Lmg+CisjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXNtL3hlbi94ZW5jb21tLmg+CisKKy8qIFhlbmNvbW0gbm90ZXM6CisgKiBUaGlzIGZpbGUgZGVmaW5lcyBoeXBlcmNhbGxzIHRvIGJlIHVzZWQgYnkgeGVuY29tbS4gIFRoZSBoeXBlcmNhbGxzIHNpbXBseQorICogY3JlYXRlIGlubGluZXMgb3IgbWluaSBkZXNjcmlwdG9ycyBmb3IgcG9pbnRlcnMgYW5kIHRoZW4gY2FsbCB0aGUgcmF3IGFyY2gKKyAqIGh5cGVyY2FsbCB4ZW5jb21tX2FyY2hfaHlwZXJjYWxsX1hYWAorICoKKyAqIElmIHRoZSBhcmNoIHdhbnRzIHRvIGRpcmVjdGx5IHVzZSB0aGVzZSBoeXBlcmNhbGxzLCBzaW1wbHkgZGVmaW5lIG1hY3JvcworICogaW4gYXNtL3hlbi9oeXBlcmNhbGwuaCwgZWc6CisgKiAgI2RlZmluZSBIWVBFUlZJU09SX3NjaGVkX29wIHhlbmNvbW1faHlwZXJjYWxsX3NjaGVkX29wCisgKgorICogVGhlIGFyY2ggbWF5IGFsc28gZGVmaW5lIEhZUEVSVklTT1JfeHh4IGFzIGEgZnVuY3Rpb24gYW5kIGRvIG1vcmUgb3BlcmF0aW9ucworICogYmVmb3JlL2FmdGVyIGRvaW5nIHRoZSBoeXBlcmNhbGwuCisgKgorICogTm90ZTogYmVjYXVzZSBvbmx5IGlubGluZSBvciBtaW5pIGRlc2NyaXB0b3JzIGFyZSBjcmVhdGVkIHRoZXNlIGZ1bmN0aW9ucworICogbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGluIGtlcm5lbCBtZW1vcnkgcGFyYW1ldGVycy4KKyAqLworCitpbnQKK3hlbmNvbW1faHlwZXJjYWxsX2NvbnNvbGVfaW8oaW50IGNtZCwgaW50IGNvdW50LCBjaGFyICpzdHIpCit7CisJLyogeGVuIGVhcmx5IHByaW50ayB1c2VzIGNvbnNvbGUgaW8gaHlwZXJjYWxsIGJlZm9yZQorCSAqIHhlbmNvbW0gaW5pdGlhbGl6YXRpb24uIEluIHRoYXQgY2FzZSwgd2UganVzdCBpZ25vcmUgaXQuCisJICovCisJaWYgKCF4ZW5jb21tX2lzX2luaXRpYWxpemVkKCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNhbGxfY29uc29sZV9pbworCQkoY21kLCBjb3VudCwgeGVuY29tbV9tYXBfbm9fYWxsb2Moc3RyLCBjb3VudCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuY29tbV9oeXBlcmNhbGxfY29uc29sZV9pbyk7CisKK2ludAoreGVuY29tbV9oeXBlcmNhbGxfZXZlbnRfY2hhbm5lbF9vcChpbnQgY21kLCB2b2lkICpvcCkKK3sKKwlzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKmRlc2M7CisJZGVzYyA9IHhlbmNvbW1fbWFwX25vX2FsbG9jKG9wLCBzaXplb2Yoc3RydWN0IGV2dGNobl9vcCkpOworCWlmIChkZXNjID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNhbGxfZXZlbnRfY2hhbm5lbF9vcChjbWQsIGRlc2MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuY29tbV9oeXBlcmNhbGxfZXZlbnRfY2hhbm5lbF9vcCk7CisKK2ludAoreGVuY29tbV9oeXBlcmNhbGxfeGVuX3ZlcnNpb24oaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqZGVzYzsKKwl1bnNpZ25lZCBpbnQgYXJnc2l6ZTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBYRU5WRVJfdmVyc2lvbjoKKwkJLyogZG8gbm90IGFjdHVhbGx5IHBhc3MgYW4gYXJndW1lbnQgKi8KKwkJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNhbGxfeGVuX3ZlcnNpb24oY21kLCAwKTsKKwljYXNlIFhFTlZFUl9leHRyYXZlcnNpb246CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IHhlbl9leHRyYXZlcnNpb24pOworCQlicmVhazsKKwljYXNlIFhFTlZFUl9jb21waWxlX2luZm86CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IHhlbl9jb21waWxlX2luZm8pOworCQlicmVhazsKKwljYXNlIFhFTlZFUl9jYXBhYmlsaXRpZXM6CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IHhlbl9jYXBhYmlsaXRpZXNfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgWEVOVkVSX2NoYW5nZXNldDoKKwkJYXJnc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeGVuX2NoYW5nZXNldF9pbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBYRU5WRVJfcGxhdGZvcm1fcGFyYW1ldGVyczoKKwkJYXJnc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeGVuX3BsYXRmb3JtX3BhcmFtZXRlcnMpOworCQlicmVhazsKKwljYXNlIFhFTlZFUl9nZXRfZmVhdHVyZXM6CisJCWFyZ3NpemUgPSAoYXJnID09IE5VTEwpID8gMCA6IHNpemVvZihzdHJ1Y3QgeGVuX2ZlYXR1cmVfaW5mbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICIlczogdW5rbm93biB2ZXJzaW9uIG9wICVkXG4iLCBfX2Z1bmNfXywgY21kKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJZGVzYyA9IHhlbmNvbW1fbWFwX25vX2FsbG9jKGFyZywgYXJnc2l6ZSk7CisJaWYgKGRlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4geGVuY29tbV9hcmNoX2h5cGVyY2FsbF94ZW5fdmVyc2lvbihjbWQsIGRlc2MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuY29tbV9oeXBlcmNhbGxfeGVuX3ZlcnNpb24pOworCitpbnQKK3hlbmNvbW1faHlwZXJjYWxsX3BoeXNkZXZfb3AoaW50IGNtZCwgdm9pZCAqb3ApCit7CisJdW5zaWduZWQgaW50IGFyZ3NpemU7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUEhZU0RFVk9QX2FwaWNfcmVhZDoKKwljYXNlIFBIWVNERVZPUF9hcGljX3dyaXRlOgorCQlhcmdzaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlzZGV2X2FwaWMpOworCQlicmVhazsKKwljYXNlIFBIWVNERVZPUF9hbGxvY19pcnFfdmVjdG9yOgorCWNhc2UgUEhZU0RFVk9QX2ZyZWVfaXJxX3ZlY3RvcjoKKwkJYXJnc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGh5c2Rldl9pcnEpOworCQlicmVhazsKKwljYXNlIFBIWVNERVZPUF9pcnFfc3RhdHVzX3F1ZXJ5OgorCQlhcmdzaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlzZGV2X2lycV9zdGF0dXNfcXVlcnkpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiJXM6IHVua25vd24gcGh5c2RldiBvcCAlZFxuIiwgX19mdW5jX18sIGNtZCk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCXJldHVybiB4ZW5jb21tX2FyY2hfaHlwZXJjYWxsX3BoeXNkZXZfb3AKKwkJKGNtZCwgeGVuY29tbV9tYXBfbm9fYWxsb2Mob3AsIGFyZ3NpemUpKTsKK30KKworc3RhdGljIGludAoreGVuY29tbWl6ZV9ncmFudF90YWJsZV9vcChzdHJ1Y3QgeGVuY29tbV9taW5pICoqeGNfYXJlYSwKKwkJCSAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqb3AsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJCSAgc3RydWN0IHhlbmNvbW1faGFuZGxlICoqZGVzYykKK3sKKwlzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKmRlc2MxOworCXVuc2lnbmVkIGludCBhcmdzaXplOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEdOVFRBQk9QX21hcF9ncmFudF9yZWY6CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmKTsKKwkJYnJlYWs7CisJY2FzZSBHTlRUQUJPUF91bm1hcF9ncmFudF9yZWY6CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYpOworCQlicmVhazsKKwljYXNlIEdOVFRBQk9QX3NldHVwX3RhYmxlOgorCXsKKwkJc3RydWN0IGdudHRhYl9zZXR1cF90YWJsZSAqc2V0dXAgPSBvcDsKKworCQlhcmdzaXplID0gc2l6ZW9mKCpzZXR1cCk7CisKKwkJaWYgKGNvdW50ICE9IDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGVzYzEgPSBfX3hlbmNvbW1fbWFwX25vX2FsbG9jCisJCQkoeGVuX2d1ZXN0X2hhbmRsZShzZXR1cC0+ZnJhbWVfbGlzdCksCisJCQkgc2V0dXAtPm5yX2ZyYW1lcyAqCisJCQkgc2l6ZW9mKCp4ZW5fZ3Vlc3RfaGFuZGxlKHNldHVwLT5mcmFtZV9saXN0KSksCisJCQkgKnhjX2FyZWEpOworCQlpZiAoZGVzYzEgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCQkoKnhjX2FyZWEpKys7CisJCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKHNldHVwLT5mcmFtZV9saXN0LCAodm9pZCAqKWRlc2MxKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgR05UVEFCT1BfZHVtcF90YWJsZToKKwkJYXJnc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ250dGFiX2R1bXBfdGFibGUpOworCQlicmVhazsKKwljYXNlIEdOVFRBQk9QX3RyYW5zZmVyOgorCQlhcmdzaXplID0gc2l6ZW9mKHN0cnVjdCBnbnR0YWJfdHJhbnNmZXIpOworCQlicmVhazsKKwljYXNlIEdOVFRBQk9QX2NvcHk6CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IGdudHRhYl9jb3B5KTsKKwkJYnJlYWs7CisJY2FzZSBHTlRUQUJPUF9xdWVyeV9zaXplOgorCQlhcmdzaXplID0gc2l6ZW9mKHN0cnVjdCBnbnR0YWJfcXVlcnlfc2l6ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5rbm93biBoeXBlcmNhbGwgZ3JhbnQgdGFibGUgb3AgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY21kKTsKKwkJQlVHKCk7CisJfQorCisJKmRlc2MgPSBfX3hlbmNvbW1fbWFwX25vX2FsbG9jKG9wLCBjb3VudCAqIGFyZ3NpemUsICp4Y19hcmVhKTsKKwlpZiAoKmRlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKCp4Y19hcmVhKSsrOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoreGVuY29tbV9oeXBlcmNhbGxfZ3JhbnRfdGFibGVfb3AodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqb3AsCisJCQkJIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHhlbmNvbW1faGFuZGxlICpkZXNjOworCVhFTkNPTU1fTUlOSV9BTElHTkVEKHhjX2FyZWEsIDIpOworCisJcmMgPSB4ZW5jb21taXplX2dyYW50X3RhYmxlX29wKCZ4Y19hcmVhLCBjbWQsIG9wLCBjb3VudCwgJmRlc2MpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNhbGxfZ3JhbnRfdGFibGVfb3AoY21kLCBkZXNjLCBjb3VudCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5jb21tX2h5cGVyY2FsbF9ncmFudF90YWJsZV9vcCk7CisKK2ludAoreGVuY29tbV9oeXBlcmNhbGxfc2NoZWRfb3AoaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqZGVzYzsKKwl1bnNpZ25lZCBpbnQgYXJnc2l6ZTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTQ0hFRE9QX3lpZWxkOgorCWNhc2UgU0NIRURPUF9ibG9jazoKKwkJYXJnc2l6ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgU0NIRURPUF9zaHV0ZG93bjoKKwkJYXJnc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24pOworCQlicmVhazsKKwljYXNlIFNDSEVET1BfcG9sbDoKKwl7CisJCXN0cnVjdCBzY2hlZF9wb2xsICpwb2xsID0gYXJnOworCQlzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKnBvcnRzOworCisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IHNjaGVkX3BvbGwpOworCQlwb3J0cyA9IHhlbmNvbW1fbWFwX25vX2FsbG9jKHhlbl9ndWVzdF9oYW5kbGUocG9sbC0+cG9ydHMpLAorCQkJCSAgICAgc2l6ZW9mKCp4ZW5fZ3Vlc3RfaGFuZGxlKHBvbGwtPnBvcnRzKSkpOworCisJCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKHBvbGwtPnBvcnRzLCAodm9pZCAqKXBvcnRzKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5rbm93biBzY2hlZCBvcCAlZFxuIiwgX19mdW5jX18sIGNtZCk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCWRlc2MgPSB4ZW5jb21tX21hcF9ub19hbGxvYyhhcmcsIGFyZ3NpemUpOworCWlmIChkZXNjID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNhbGxfc2NoZWRfb3AoY21kLCBkZXNjKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbmNvbW1faHlwZXJjYWxsX3NjaGVkX29wKTsKKworaW50Cit4ZW5jb21tX2h5cGVyY2FsbF9tdWx0aWNhbGwodm9pZCAqY2FsbF9saXN0LCBpbnQgbnJfY2FsbHMpCit7CisJaW50IHJjOworCWludCBpOworCXN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jZTsKKwlzdHJ1Y3QgeGVuY29tbV9oYW5kbGUgKmRlc2M7CisJWEVOQ09NTV9NSU5JX0FMSUdORUQoeGNfYXJlYSwgbnJfY2FsbHMgKiAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jYWxsczsgaSsrKSB7CisJCW1jZSA9IChzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5ICopY2FsbF9saXN0ICsgaTsKKworCQlzd2l0Y2ggKG1jZS0+b3ApIHsKKwkJY2FzZSBfX0hZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmc6CisJCWNhc2UgX19IWVBFUlZJU09SX21tdV91cGRhdGU6CisJCQkvKiBOby1vcCBvbiBpYTY0LiAgKi8KKwkJCWJyZWFrOworCQljYXNlIF9fSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcDoKKwkJCXJjID0geGVuY29tbWl6ZV9ncmFudF90YWJsZV9vcAorCQkJCSgmeGNfYXJlYSwKKwkJCQkgbWNlLT5hcmdzWzBdLCAodm9pZCAqKW1jZS0+YXJnc1sxXSwKKwkJCQkgbWNlLT5hcmdzWzJdLCAmZGVzYyk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCQkJbWNlLT5hcmdzWzFdID0gKHVuc2lnbmVkIGxvbmcpZGVzYzsKKwkJCWJyZWFrOworCQljYXNlIF9fSFlQRVJWSVNPUl9tZW1vcnlfb3A6CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICIlczogdW5oYW5kbGVkIG11bHRpY2FsbCBvcCBlbnRyeSBvcCAlbHVcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG1jZS0+b3ApOworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwl9CisKKwlkZXNjID0geGVuY29tbV9tYXBfbm9fYWxsb2MoY2FsbF9saXN0LAorCQkJCSAgICBucl9jYWxscyAqIHNpemVvZihzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5KSk7CisJaWYgKGRlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4geGVuY29tbV9hcmNoX2h5cGVyY2FsbF9tdWx0aWNhbGwoZGVzYywgbnJfY2FsbHMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuY29tbV9oeXBlcmNhbGxfbXVsdGljYWxsKTsKKworaW50Cit4ZW5jb21tX2h5cGVyY2FsbF9jYWxsYmFja19vcChpbnQgY21kLCB2b2lkICphcmcpCit7CisJdW5zaWduZWQgaW50IGFyZ3NpemU7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENBTExCQUNLT1BfcmVnaXN0ZXI6CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IGNhbGxiYWNrX3JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBDQUxMQkFDS09QX3VucmVnaXN0ZXI6CisJCWFyZ3NpemUgPSBzaXplb2Yoc3RydWN0IGNhbGxiYWNrX3VucmVnaXN0ZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzOiB1bmtub3duIGNhbGxiYWNrIG9wICVkXG4iLCBfX2Z1bmNfXywgY21kKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNhbGxfY2FsbGJhY2tfb3AKKwkJKGNtZCwgeGVuY29tbV9tYXBfbm9fYWxsb2MoYXJnLCBhcmdzaXplKSk7Cit9CisKK3N0YXRpYyBpbnQKK3hlbmNvbW1pemVfbWVtb3J5X3Jlc2VydmF0aW9uKHN0cnVjdCB4ZW5jb21tX21pbmkgKnhjX2FyZWEsCisJCQkgICAgICBzdHJ1Y3QgeGVuX21lbW9yeV9yZXNlcnZhdGlvbiAqbW9wKQoreworCXN0cnVjdCB4ZW5jb21tX2hhbmRsZSAqZGVzYzsKKworCWRlc2MgPSBfX3hlbmNvbW1fbWFwX25vX2FsbG9jKHhlbl9ndWVzdF9oYW5kbGUobW9wLT5leHRlbnRfc3RhcnQpLAorCQkJbW9wLT5ucl9leHRlbnRzICoKKwkJCXNpemVvZigqeGVuX2d1ZXN0X2hhbmRsZShtb3AtPmV4dGVudF9zdGFydCkpLAorCQkJeGNfYXJlYSk7CisJaWYgKGRlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZXRfeGVuX2d1ZXN0X2hhbmRsZShtb3AtPmV4dGVudF9zdGFydCwgKHZvaWQgKilkZXNjKTsKKwlyZXR1cm4gMDsKK30KKworaW50Cit4ZW5jb21tX2h5cGVyY2FsbF9tZW1vcnlfb3AodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCUdVRVNUX0hBTkRMRSh4ZW5fcGZuX3QpIGV4dGVudF9zdGFydF92YVsyXSA9IHsge05VTEx9LCB7TlVMTH0gfTsKKwlzdHJ1Y3QgeGVuX21lbW9yeV9yZXNlcnZhdGlvbiAqeG1yID0gTlVMTDsKKwlpbnQgcmM7CisJc3RydWN0IHhlbmNvbW1faGFuZGxlICpkZXNjOworCXVuc2lnbmVkIGludCBhcmdzaXplOworCVhFTkNPTU1fTUlOSV9BTElHTkVEKHhjX2FyZWEsIDIpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFhFTk1FTV9pbmNyZWFzZV9yZXNlcnZhdGlvbjoKKwljYXNlIFhFTk1FTV9kZWNyZWFzZV9yZXNlcnZhdGlvbjoKKwljYXNlIFhFTk1FTV9wb3B1bGF0ZV9waHlzbWFwOgorCQl4bXIgPSAoc3RydWN0IHhlbl9tZW1vcnlfcmVzZXJ2YXRpb24gKilhcmc7CisJCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKGV4dGVudF9zdGFydF92YVswXSwKKwkJCQkgICAgIHhlbl9ndWVzdF9oYW5kbGUoeG1yLT5leHRlbnRfc3RhcnQpKTsKKworCQlhcmdzaXplID0gc2l6ZW9mKCp4bXIpOworCQlyYyA9IHhlbmNvbW1pemVfbWVtb3J5X3Jlc2VydmF0aW9uKHhjX2FyZWEsIHhtcik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJeGNfYXJlYSsrOworCQlicmVhazsKKworCWNhc2UgWEVOTUVNX21heGltdW1fcmFtX3BhZ2U6CisJCWFyZ3NpemUgPSAwOworCQlicmVhazsKKworCWNhc2UgWEVOTUVNX2FkZF90b19waHlzbWFwOgorCQlhcmdzaXplID0gc2l6ZW9mKHN0cnVjdCB4ZW5fYWRkX3RvX3BoeXNtYXApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5rbm93biBtZW1vcnkgb3AgJWRcbiIsIF9fZnVuY19fLCBjbWQpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlkZXNjID0geGVuY29tbV9tYXBfbm9fYWxsb2MoYXJnLCBhcmdzaXplKTsKKwlpZiAoZGVzYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0geGVuY29tbV9hcmNoX2h5cGVyY2FsbF9tZW1vcnlfb3AoY21kLCBkZXNjKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBYRU5NRU1faW5jcmVhc2VfcmVzZXJ2YXRpb246CisJY2FzZSBYRU5NRU1fZGVjcmVhc2VfcmVzZXJ2YXRpb246CisJY2FzZSBYRU5NRU1fcG9wdWxhdGVfcGh5c21hcDoKKwkJc2V0X3hlbl9ndWVzdF9oYW5kbGUoeG1yLT5leHRlbnRfc3RhcnQsCisJCQkJICAgICB4ZW5fZ3Vlc3RfaGFuZGxlKGV4dGVudF9zdGFydF92YVswXSkpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5jb21tX2h5cGVyY2FsbF9tZW1vcnlfb3ApOworCitpbnQKK3hlbmNvbW1faHlwZXJjYWxsX3N1c3BlbmQodW5zaWduZWQgbG9uZyBzcmVjKQoreworCXN0cnVjdCBzY2hlZF9zaHV0ZG93biBhcmc7CisKKwlhcmcucmVhc29uID0gU0hVVERPV05fc3VzcGVuZDsKKworCXJldHVybiB4ZW5jb21tX2FyY2hfaHlwZXJjYWxsX3NjaGVkX29wKAorCQlTQ0hFRE9QX3NodXRkb3duLCB4ZW5jb21tX21hcF9ub19hbGxvYygmYXJnLCBzaXplb2YoYXJnKSkpOworfQorCitsb25nCit4ZW5jb21tX2h5cGVyY2FsbF92Y3B1X29wKGludCBjbWQsIGludCBjcHUsIHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgYXJnc2l6ZTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVkNQVU9QX3JlZ2lzdGVyX3J1bnN0YXRlX21lbW9yeV9hcmVhOiB7CisJCXN0cnVjdCB2Y3B1X3JlZ2lzdGVyX3J1bnN0YXRlX21lbW9yeV9hcmVhICphcmVhID0KKwkJCShzdHJ1Y3QgdmNwdV9yZWdpc3Rlcl9ydW5zdGF0ZV9tZW1vcnlfYXJlYSAqKWFyZzsKKwkJYXJnc2l6ZSA9IHNpemVvZigqYXJnKTsKKwkJc2V0X3hlbl9ndWVzdF9oYW5kbGUoYXJlYS0+YWRkci5oLAorCQkgICAgICh2b2lkICopeGVuY29tbV9tYXBfbm9fYWxsb2MoYXJlYS0+YWRkci52LAorCQkJCQkJICBzaXplb2YoYXJlYS0+YWRkci52KSkpOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVua25vd24gdmNwdSBvcCAlZFxuIiwgX19mdW5jX18sIGNtZCk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCXJldHVybiB4ZW5jb21tX2FyY2hfaHlwZXJjYWxsX3ZjcHVfb3AoY21kLCBjcHUsCisJCQkJCXhlbmNvbW1fbWFwX25vX2FsbG9jKGFyZywgYXJnc2l6ZSkpOworfQorCitsb25nCit4ZW5jb21tX2h5cGVyY2FsbF9vcHRfZmVhdHVyZSh2b2lkICphcmcpCit7CisJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNhbGxfb3B0X2ZlYXR1cmUoCisJCXhlbmNvbW1fbWFwX25vX2FsbG9jKGFyZywKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgeGVuX2lhNjRfb3B0X2ZlYXR1cmUpKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYyBiL2FyY2gvaWE2NC94ZW4veGVuX3B2X29wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Y2QxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYwpAQCAtMCwwICsxLDM2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20veGVuL3hlbmNvbW0uaD4KKyNpbmNsdWRlIDxhc20veGVuL3ByaXZvcC5oPgorCisjaW5jbHVkZSAiaXJxX3hlbi5oIgorI2luY2x1ZGUgInRpbWUuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2VuZXJhbCBpbmZvCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHZfaW5mbyB4ZW5faW5mbyBfX2luaXRkYXRhID0geworCS5rZXJuZWxfcnBsID0gMiwJLyogb3IgMTogZGV0ZXJtaW4gYXQgcnVudGltZSAqLworCS5wYXJhdmlydF9lbmFibGVkID0gMSwKKwkubmFtZSA9ICJYZW4vaWE2NCIsCit9OworCisjZGVmaW5lIElBNjRfUlNDX1BMX1NISUZUCTIKKyNkZWZpbmUgSUE2NF9SU0NfUExfQklUX1NJWkUJMgorI2RlZmluZSBJQTY0X1JTQ19QTF9NQVNLCVwKKwkoKCgxVUwgPDwgSUE2NF9SU0NfUExfQklUX1NJWkUpIC0gMSkgPDwgSUE2NF9SU0NfUExfU0hJRlQpCisKK3N0YXRpYyB2b2lkIF9faW5pdAoreGVuX2luZm9faW5pdCh2b2lkKQoreworCS8qIFhlbmlmaWVkIExpbnV4L2lhNjQgbWF5IHJ1biBvbiBwbCA9IDEgb3IgMi4KKwkgKiBkZXRlcm1pbiBhdCBydW4gdGltZS4gKi8KKwl1bnNpZ25lZCBsb25nIHJzYyA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9SU0MpOworCXVuc2lnbmVkIGludCBycGwgPSAocnNjICYgSUE2NF9SU0NfUExfTUFTSykgPj4gSUE2NF9SU0NfUExfU0hJRlQ7CisJeGVuX2luZm8ua2VybmVsX3JwbCA9IHJwbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfaW5pdF9vcHMKKyAqIGluaXRpYWxpemF0aW9uIGhvb2tzLgorICovCisKK3N0YXRpYyB2b2lkCit4ZW5fcGFuaWNfaHlwZXJjYWxsKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQoreworCWN1cnJlbnQtPnRocmVhZC5rc3AgPSAoX191NjQpaW5mby0+c3cgLSAxNjsKKwlIWVBFUlZJU09SX3NodXRkb3duKFNIVVRET1dOX2NyYXNoKTsKKwkvKiB3ZSdyZSBuZXZlciBhY3R1YWxseSBnb2luZyB0byBnZXQgaGVyZS4uLiAqLworfQorCitzdGF0aWMgaW50Cit4ZW5fcGFuaWNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJdW53X2luaXRfcnVubmluZyh4ZW5fcGFuaWNfaHlwZXJjYWxsLCBOVUxMKTsKKwkvKiB3ZSdyZSBuZXZlciBhY3R1YWxseSBnb2luZyB0byBnZXQgaGVyZS4uLiAqLworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4ZW5fcGFuaWNfYmxvY2sgPSB7CisJeGVuX3BhbmljX2V2ZW50LCBOVUxMLCAwIC8qIHRyeSB0byBnbyBsYXN0ICovCit9OworCitzdGF0aWMgdm9pZCB4ZW5fcG1fcG93ZXJfb2ZmKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlIWVBFUlZJU09SX3NodXRkb3duKFNIVVRET1dOX3Bvd2Vyb2ZmKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0Cit4ZW5fYmFubmVyKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiUnVubmluZyBvbiBYZW4hIHBsID0gJWQgc3RhcnRfaW5mb19wZm49MHglbHggbnJfcGFnZXM9JWxkICIKKwkgICAgICAgImZsYWdzPTB4JXhcbiIsCisJICAgICAgIHhlbl9pbmZvLmtlcm5lbF9ycGwsCisJICAgICAgIEhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPmFyY2guc3RhcnRfaW5mb19wZm4sCisJICAgICAgIHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlcywgeGVuX3N0YXJ0X2luZm8tPmZsYWdzKTsKK30KKworc3RhdGljIGludCBfX2luaXQKK3hlbl9yZXNlcnZlX21lbW9yeShzdHJ1Y3QgcnN2ZF9yZWdpb24gKnJlZ2lvbikKK3sKKwlyZWdpb24tPnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YSgKKwkJKEhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPmFyY2guc3RhcnRfaW5mb19wZm4gPDwgUEFHRV9TSElGVCkpOworCXJlZ2lvbi0+ZW5kICAgPSByZWdpb24tPnN0YXJ0ICsgUEFHRV9TSVpFOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3hlbl9hcmNoX3NldHVwX2Vhcmx5KHZvaWQpCit7CisJc3RydWN0IHNoYXJlZF9pbmZvICpzOworCUJVR19PTigheGVuX3B2X2RvbWFpbigpKTsKKworCXMgPSBIWVBFUlZJU09SX3NoYXJlZF9pbmZvOworCXhlbl9zdGFydF9pbmZvID0gX192YShzLT5hcmNoLnN0YXJ0X2luZm9fcGZuIDw8IFBBR0VfU0hJRlQpOworCisJLyogTXVzdCBiZSBkb25lIGJlZm9yZSBhbnkgaHlwZXJjYWxsLiAgKi8KKwl4ZW5jb21tX2luaXRpYWxpemUoKTsKKworCXhlbl9zZXR1cF9mZWF0dXJlcygpOworCS8qIFJlZ2lzdGVyIGEgY2FsbCBmb3IgcGFuaWMgY29uZGl0aW9ucy4gKi8KKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJICAgICAgICZ4ZW5fcGFuaWNfYmxvY2spOworCXBtX3Bvd2VyX29mZiA9IHhlbl9wbV9wb3dlcl9vZmY7CisKKwl4ZW5faWE2NF9lbmFibGVfb3B0X2ZlYXR1cmUoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0Cit4ZW5fYXJjaF9zZXR1cF9jb25zb2xlKGNoYXIgKipjbWRsaW5lX3ApCit7CisJYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJ4ZW5ib290IiwgMCwgTlVMTCk7CisJYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJ0dHkiLCAwLCBOVUxMKTsKKwkvKiB1c2UgaHZjX3hlbiAqLworCWFkZF9wcmVmZXJyZWRfY29uc29sZSgiaHZjIiwgMCwgTlVMTCk7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfVlQpIHx8ICFkZWZpbmVkKENPTkZJR19EVU1NWV9DT05TT0xFKQorCWNvbnN3aXRjaHAgPSBOVUxMOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19pbml0Cit4ZW5fYXJjaF9zZXR1cF9ub21jYSh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3hlbl9wb3N0X3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCit7CisJeGVuX3NldHVwX3ZjcHVfaW5mb19wbGFjZW1lbnQoKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pbml0X29wcyB4ZW5faW5pdF9vcHMgX19pbml0ZGF0YSA9IHsKKwkuYmFubmVyID0geGVuX2Jhbm5lciwKKworCS5yZXNlcnZlX21lbW9yeSA9IHhlbl9yZXNlcnZlX21lbW9yeSwKKworCS5hcmNoX3NldHVwX2Vhcmx5ID0geGVuX2FyY2hfc2V0dXBfZWFybHksCisJLmFyY2hfc2V0dXBfY29uc29sZSA9IHhlbl9hcmNoX3NldHVwX2NvbnNvbGUsCisJLmFyY2hfc2V0dXBfbm9tY2EgPSB4ZW5fYXJjaF9zZXR1cF9ub21jYSwKKworCS5wb3N0X3NtcF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3Bvc3Rfc21wX3ByZXBhcmVfYm9vdF9jcHUsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwdl9jcHVfb3BzCisgKiBpbnRyaW5zaWNzIGhvb2tzLgorICovCisKK3N0YXRpYyB2b2lkIHhlbl9zZXRyZWcoaW50IHJlZ251bSwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJc3dpdGNoIChyZWdudW0pIHsKKwljYXNlIF9JQTY0X1JFR19BUl9LUjAgLi4uIF9JQTY0X1JFR19BUl9LUjc6CisJCXhlbl9zZXRfa3IocmVnbnVtIC0gX0lBNjRfUkVHX0FSX0tSMCwgdmFsKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAorCWNhc2UgX0lBNjRfUkVHX0FSX0VGTEFHOgorCQl4ZW5fc2V0X2VmbGFnKHZhbCk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBfSUE2NF9SRUdfQ1JfVFBSOgorCQl4ZW5fc2V0X3Rwcih2YWwpOworCQlicmVhazsKKwljYXNlIF9JQTY0X1JFR19DUl9JVE06CisJCXhlbl9zZXRfaXRtKHZhbCk7CisJCWJyZWFrOworCWNhc2UgX0lBNjRfUkVHX0NSX0VPSToKKwkJeGVuX2VvaSh2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpYTY0X25hdGl2ZV9zZXRyZWdfZnVuYyhyZWdudW0sIHZhbCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgeGVuX2dldHJlZyhpbnQgcmVnbnVtKQoreworCXVuc2lnbmVkIGxvbmcgcmVzOworCisJc3dpdGNoIChyZWdudW0pIHsKKwljYXNlIF9JQTY0X1JFR19QU1I6CisJCXJlcyA9IHhlbl9nZXRfcHNyKCk7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKwljYXNlIF9JQTY0X1JFR19BUl9FRkxBRzoKKwkJcmVzID0geGVuX2dldF9lZmxhZygpOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgX0lBNjRfUkVHX0NSX0lWUjoKKwkJcmVzID0geGVuX2dldF9pdnIoKTsKKwkJYnJlYWs7CisJY2FzZSBfSUE2NF9SRUdfQ1JfVFBSOgorCQlyZXMgPSB4ZW5fZ2V0X3RwcigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSBpYTY0X25hdGl2ZV9nZXRyZWdfZnVuYyhyZWdudW0pOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJlczsKK30KKworLyogdHVybmluZyBvbiBpbnRlcnJ1cHRzIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQuLiB3cml0ZSB0byB0aGUKKyAqIG1lbW9yeS1tYXBwZWQgdmlydHVhbCBwc3IuaSBiaXQgZmlyc3QgKHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uKSwKKyAqIHRoZW4gaWYgYW55IGludGVycnVwdHMgd2VyZSBwZW5kaW5nLCB3ZSBoYXZlIHRvIGV4ZWN1dGUgYSBoeXBlcnByaXZvcAorICogdG8gZW5zdXJlIHRoZSBwZW5kaW5nIGludGVycnVwdCBnZXRzIGRlbGl2ZXJlZDsgZWxzZSB3ZSdyZSBkb25lISAqLworc3RhdGljIHZvaWQKK3hlbl9zc21faSh2b2lkKQoreworCWludCBvbGQgPSB4ZW5fZ2V0X3ZpcnR1YWxfcHNyX2koKTsKKwl4ZW5fc2V0X3ZpcnR1YWxfcHNyX2koMSk7CisJYmFycmllcigpOworCWlmICghb2xkICYmIHhlbl9nZXRfdmlydHVhbF9wZW5kKCkpCisJCXhlbl9oeXBlcl9zc21faSgpOworfQorCisvKiB0dXJuaW5nIG9mZiBpbnRlcnJ1cHRzIGNhbiBiZSBwYXJhdmlydHVhbGl6ZWQgc2ltcGx5IGJ5IHdyaXRpbmcKKyAqIHRvIGEgbWVtb3J5LW1hcHBlZCB2aXJ0dWFsIHBzci5pIGJpdCAoaW1wbGVtZW50ZWQgYXMgYSAxNi1iaXQgYm9vbCkgKi8KK3N0YXRpYyB2b2lkCit4ZW5fcnNtX2kodm9pZCkKK3sKKwl4ZW5fc2V0X3ZpcnR1YWxfcHNyX2koMCk7CisJYmFycmllcigpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworeGVuX2dldF9wc3JfaSh2b2lkKQoreworCXJldHVybiB4ZW5fZ2V0X3ZpcnR1YWxfcHNyX2koKSA/IElBNjRfUFNSX0kgOiAwOworfQorCitzdGF0aWMgdm9pZAoreGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIG1hc2spCit7CisJaWYgKG1hc2sgJiBJQTY0X1BTUl9JKQorCQl4ZW5fc3NtX2koKTsKKwllbHNlCisJCXhlbl9yc21faSgpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2NwdV9vcHMgeGVuX2NwdV9vcHMgX19pbml0ZGF0YSA9IHsKKwkuZmMJCT0geGVuX2ZjLAorCS50aGFzaAkJPSB4ZW5fdGhhc2gsCisJLmdldF9jcHVpZAk9IHhlbl9nZXRfY3B1aWQsCisJLmdldF9wbWQJPSB4ZW5fZ2V0X3BtZCwKKwkuZ2V0cmVnCQk9IHhlbl9nZXRyZWcsCisJLnNldHJlZwkJPSB4ZW5fc2V0cmVnLAorCS5wdGNnYQkJPSB4ZW5fcHRjZ2EsCisJLmdldF9ycgkJPSB4ZW5fZ2V0X3JyLAorCS5zZXRfcnIJCT0geGVuX3NldF9yciwKKwkuc2V0X3JyMF90b19ycjQJPSB4ZW5fc2V0X3JyMF90b19ycjQsCisJLnNzbV9pCQk9IHhlbl9zc21faSwKKwkucnNtX2kJCT0geGVuX3JzbV9pLAorCS5nZXRfcHNyX2kJPSB4ZW5fZ2V0X3Bzcl9pLAorCS5pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUKKwkJCT0geGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlcGxhY2VtZW50IG9mIGhhbmQgd3JpdHRlbiBhc3NlbWJseSBjb2Rlcy4KKyAqLworCitleHRlcm4gY2hhciB4ZW5fc3dpdGNoX3RvOworZXh0ZXJuIGNoYXIgeGVuX2xlYXZlX3N5c2NhbGw7CitleHRlcm4gY2hhciB4ZW5fd29ya19wcm9jZXNzZWRfc3lzY2FsbDsKK2V4dGVybiBjaGFyIHhlbl9sZWF2ZV9rZXJuZWw7CisKK2NvbnN0IHN0cnVjdCBwdl9jcHVfYXNtX3N3aXRjaCB4ZW5fY3B1X2FzbV9zd2l0Y2ggPSB7CisJLnN3aXRjaF90bwkJPSAodW5zaWduZWQgbG9uZykmeGVuX3N3aXRjaF90bywKKwkubGVhdmVfc3lzY2FsbAkJPSAodW5zaWduZWQgbG9uZykmeGVuX2xlYXZlX3N5c2NhbGwsCisJLndvcmtfcHJvY2Vzc2VkX3N5c2NhbGwJPSAodW5zaWduZWQgbG9uZykmeGVuX3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGwsCisJLmxlYXZlX2tlcm5lbAkJPSAodW5zaWduZWQgbG9uZykmeGVuX2xlYXZlX2tlcm5lbCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHB2X2lvc2FwaWNfb3BzCisgKiBpb3NhcGljIHJlYWQvd3JpdGUgaG9va3MuCisgKi8KK3N0YXRpYyB2b2lkCit4ZW5fcGNhdF9jb21wYXRfaW5pdCh2b2lkKQoreworCS8qIG5vdGhpbmcgKi8KK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCoKK3hlbl9pb3NhcGljX2dldF9pcnFfY2hpcCh1bnNpZ25lZCBsb25nIHRyaWdnZXIpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3hlbl9pb3NhcGljX3JlYWQoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBwaHlzZGV2X2FwaWMgYXBpY19vcDsKKwlpbnQgcmV0OworCisJYXBpY19vcC5hcGljX3BoeXNiYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9zYXBpYyAtCisJCQkJCV9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CisJYXBpY19vcC5yZWcgPSByZWc7CisJcmV0ID0gSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9hcGljX3JlYWQsICZhcGljX29wKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBhcGljX29wLnZhbHVlOworfQorCitzdGF0aWMgdm9pZAoreGVuX2lvc2FwaWNfd3JpdGUoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCXN0cnVjdCBwaHlzZGV2X2FwaWMgYXBpY19vcDsKKworCWFwaWNfb3AuYXBpY19waHlzYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvc2FwaWMgLQorCQkJCQlfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOworCWFwaWNfb3AucmVnID0gcmVnOworCWFwaWNfb3AudmFsdWUgPSB2YWw7CisJSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9hcGljX3dyaXRlLCAmYXBpY19vcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW9zYXBpY19vcHMgeGVuX2lvc2FwaWNfb3BzIF9faW5pdGRhdGEgPSB7CisJLnBjYXRfY29tcGF0X2luaXQgPSB4ZW5fcGNhdF9jb21wYXRfaW5pdCwKKwkuX19nZXRfaXJxX2NoaXAgPSB4ZW5faW9zYXBpY19nZXRfaXJxX2NoaXAsCisKKwkuX19yZWFkID0geGVuX2lvc2FwaWNfcmVhZCwKKwkuX193cml0ZSA9IHhlbl9pb3NhcGljX3dyaXRlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfb3BzIGluaXRpYWxpemF0aW9uCisgKi8KKwordm9pZCBfX2luaXQKK3hlbl9zZXR1cF9wdl9vcHModm9pZCkKK3sKKwl4ZW5faW5mb19pbml0KCk7CisJcHZfaW5mbyA9IHhlbl9pbmZvOworCXB2X2luaXRfb3BzID0geGVuX2luaXRfb3BzOworCXB2X2NwdV9vcHMgPSB4ZW5fY3B1X29wczsKKwlwdl9pb3NhcGljX29wcyA9IHhlbl9pb3NhcGljX29wczsKKwlwdl9pcnFfb3BzID0geGVuX2lycV9vcHM7CisJcHZfdGltZV9vcHMgPSB4ZW5fdGltZV9vcHM7CisKKwlwYXJhdmlydF9jcHVfYXNtX2luaXQoJnhlbl9jcHVfYXNtX3N3aXRjaCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL3hlbmNvbW0uYyBiL2FyY2gvaWE2NC94ZW4veGVuY29tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNWQ3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQveGVuL3hlbmNvbW0uYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworc3RhdGljIHVuc2lnbmVkIGxvbmcga2VybmVsX3ZpcnR1YWxfb2Zmc2V0Oworc3RhdGljIGludCBpc194ZW5jb21tX2luaXRpYWxpemVkOworCisvKiBmb3IgeGVuIGVhcmx5IHByaW50ay4gSXQgdXNlcyBjb25zb2xlIGlvIGh5cGVyY2FsbCB3aGljaCB1c2VzIHhlbmNvbW0uCisgKiBIb3dldmVyIGVhcmx5IHByaW50ayBtYXkgdXNlIGl0IGJlZm9yZSB4ZW5jb21tIGluaXRpYWxpemF0aW9uLgorICovCitpbnQKK3hlbmNvbW1faXNfaW5pdGlhbGl6ZWQodm9pZCkKK3sKKwlyZXR1cm4gaXNfeGVuY29tbV9pbml0aWFsaXplZDsKK30KKwordm9pZAoreGVuY29tbV9pbml0aWFsaXplKHZvaWQpCit7CisJa2VybmVsX3ZpcnR1YWxfb2Zmc2V0ID0gS0VSTkVMX1NUQVJUIC0gaWE2NF90cGEoS0VSTkVMX1NUQVJUKTsKKwlpc194ZW5jb21tX2luaXRpYWxpemVkID0gMTsKK30KKworLyogVHJhbnNsYXRlIHZpcnR1YWwgYWRkcmVzcyB0byBwaHlzaWNhbCBhZGRyZXNzLiAgKi8KK3Vuc2lnbmVkIGxvbmcKK3hlbmNvbW1fdnRvcCh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCisJaWYgKHZhZGRyID09IDApCisJCXJldHVybiAwVUw7CisKKwlpZiAoUkVHSU9OX05VTUJFUih2YWRkcikgPT0gNSkgeworCQlwZ2RfdCAqcGdkOworCQlwdWRfdCAqcHVkOworCQlwbWRfdCAqcG1kOworCQlwdGVfdCAqcHRlcDsKKworCQkvKiBPbiBpYTY0LCBUQVNLX1NJWkUgcmVmZXJzIHRvIGN1cnJlbnQuICBJdCBpcyBub3QgaW5pdGlhbGl6ZWQKKwkJICAgZHVyaW5nIGJvb3QuCisJCSAgIEZ1cnRoZXJtb3JlIHRoZSBrZXJuZWwgaXMgcmVsb2NhdGFibGUgYW5kIF9fcGEoKSBkb2Vzbid0CisJCSAgIHdvcmsgb24gIGFkZHJlc3Nlcy4gICovCisJCWlmICh2YWRkciA+PSBLRVJORUxfU1RBUlQKKwkJICAgICYmIHZhZGRyIDwgKEtFUk5FTF9TVEFSVCArIEtFUk5FTF9UUl9QQUdFX1NJWkUpKQorCQkJcmV0dXJuIHZhZGRyIC0ga2VybmVsX3ZpcnR1YWxfb2Zmc2V0OworCisJCS8qIEluIGtlcm5lbCBhcmVhIC0tIHZpcnR1YWxseSBtYXBwZWQuICAqLworCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2sodmFkZHIpOworCQlpZiAocGdkX25vbmUoKnBnZCkgfHwgcGdkX2JhZCgqcGdkKSkKKwkJCXJldHVybiB+MFVMOworCisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCB2YWRkcik7CisJCWlmIChwdWRfbm9uZSgqcHVkKSB8fCBwdWRfYmFkKCpwdWQpKQorCQkJcmV0dXJuIH4wVUw7CisKKwkJcG1kID0gcG1kX29mZnNldChwdWQsIHZhZGRyKTsKKwkJaWYgKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9iYWQoKnBtZCkpCisJCQlyZXR1cm4gfjBVTDsKKworCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCB2YWRkcik7CisJCWlmICghcHRlcCkKKwkJCXJldHVybiB+MFVMOworCisJCXJldHVybiAocHRlX3ZhbCgqcHRlcCkgJiBfUEZOX01BU0spIHwgKHZhZGRyICYgflBBR0VfTUFTSyk7CisJfQorCisJaWYgKHZhZGRyID4gVEFTS19TSVpFKSB7CisJCS8qIHBlcmNwdSB2YXJpYWJsZXMgKi8KKwkJaWYgKFJFR0lPTl9OVU1CRVIodmFkZHIpID09IDcgJiYKKwkJICAgIFJFR0lPTl9PRkZTRVQodmFkZHIpID49ICgxVUxMIDw8IElBNjRfTUFYX1BIWVNfQklUUykpCisJCQlpYTY0X3RwYSh2YWRkcik7CisKKwkJLyoga2VybmVsIGFkZHJlc3MgKi8KKwkJcmV0dXJuIF9fcGEodmFkZHIpOworCX0KKworCS8qIFhYWCBkb3VibGUtY2hlY2sgKGxhY2sgb2YpIGxvY2tpbmcgKi8KKwl2bWEgPSBmaW5kX2V4dGVuZF92bWEoY3VycmVudC0+bW0sIHZhZGRyKTsKKwlpZiAoIXZtYSkKKwkJcmV0dXJuIH4wVUw7CisKKwkvKiBXZSBhc3N1bWUgdGhlIHBhZ2UgaXMgbW9kaWZpZWQuICAqLworCXBhZ2UgPSBmb2xsb3dfcGFnZSh2bWEsIHZhZGRyLCBGT0xMX1dSSVRFIHwgRk9MTF9UT1VDSCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gfjBVTDsKKworCXJldHVybiAocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkgfCAodmFkZHIgJiB+UEFHRV9NQVNLKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4veGVuaXZ0LlMgYi9hcmNoL2lhNjQveGVuL3hlbml2dC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzFkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQveGVuL3hlbml2dC5TCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBhcmNoL2lhNjQveGVuL2l2dC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDbworICoJRGFuIE1hZ2VuaGVpbWVyIDxkYW4ubWFnZW5oZWltZXJAaHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqICAgICAgICAgICAgICAgICAgICBwdl9vcHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgorI2luY2x1ZGUgPGFzbS9rcmVncy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNpbmNsdWRlICIuLi9rZXJuZWwvbWluc3RhdGUuaCIKKworCS5zZWN0aW9uIC50ZXh0LCJheCIKK0dMT0JBTF9FTlRSWSh4ZW5fZXZlbnRfY2FsbGJhY2spCisJbW92IHIzMT1wcgkJLy8gcHJlcGFyZSB0byBzYXZlIHByZWRpY2F0ZXMKKwk7OworCVNBVkVfTUlOX1dJVEhfQ09WRVIJLy8gdXNlcyByMzE7IGRlZmluZXMgcjIgYW5kIHIzCisJOzsKKwltb3ZsIHIzPVhTSV9QU1JfSUMKKwltb3YgcjE0PTEKKwk7OworCXN0NCBbcjNdPXIxNAorCTs7CisJYWRkcyByMz04LHIyCQkvLyBzZXQgdXAgc2Vjb25kIGJhc2UgcG9pbnRlciBmb3IgU0FWRV9SRVNUCisJc3Jsei5pCQkJLy8gZW5zdXJlIGV2ZXJ5Ym9keSBrbm93cyBwc3IuaWMgaXMgYmFjayBvbgorCTs7CisJU0FWRV9SRVNUCisJOzsKKzE6CisJYWxsb2MgcjE0PWFyLnBmcywwLDAsMSwwIC8vIG11c3QgYmUgZmlyc3QgaW4gYW4gaW5zbiBncm91cAorCWFkZCBvdXQwPTE2LHNwCQkvLyBwYXNzIHBvaW50ZXIgdG8gcHRfcmVncyBhcyBmaXJzdCBhcmcKKwk7OworCWJyLmNhbGwuc3B0ay5tYW55IGIwPXhlbl9ldnRjaG5fZG9fdXBjYWxsCisJOzsKKwltb3ZsIHIyMD1YU0lfUFNSX0lfQUREUgorCTs7CisJbGQ4IHIyMD1bcjIwXQorCTs7CisJYWRkcyByMjA9LTEscjIwCQkvLyB2Y3B1X2luZm8tPmV2dGNobl91cGNhbGxfcGVuZGluZworCTs7CisJbGQxIHIyMD1bcjIwXQorCTs7CisJY21wLm5lIHA2LHAwPXIyMCxyMAkvLyBpZiB0aGVyZSBhcmUgcGVuZGluZyBldmVudHMsCisJKHA2KSBici5zcG50LmZldyAxYgkvLyBjYWxsIGV2dGNobl9kb191cGNhbGwgYWdhaW4uCisJYnIuc3B0ay5tYW55IHhlbl9sZWF2ZV9rZXJuZWwJLy8gd2Uga25vdyBpYTY0X2xlYXZlX2tlcm5lbCBpcworCQkJCQkvLyBwYXJhdmlydHVhbGl6ZWQgYXMgeGVuX2xlYXZlX2tlcm5lbAorRU5EKHhlbl9ldmVudF9jYWxsYmFjaykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4veGVuc2V0dXAuUyBiL2FyY2gvaWE2NC94ZW4veGVuc2V0dXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZlZDFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3hlbi94ZW5zZXR1cC5TCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBTdXBwb3J0IHJvdXRpbmVzIGZvciBYZW4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGFuIE1hZ2VuaGVpbWVyIDxkYW4ubWFnZW5oZWltZXJAaHAuY29tPgorICovCisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjaW5jbHVkZSA8YXNtL3hlbi9wcml2b3AuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGZub3RlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvZWxmbm90ZS5oPgorCisJLnNlY3Rpb24gLmRhdGEucmVhZF9tb3N0bHkKKwkuYWxpZ24gOAorCS5nbG9iYWwgeGVuX2RvbWFpbl90eXBlCit4ZW5fZG9tYWluX3R5cGU6CisJZGF0YTQgWEVOX05BVElWRV9BU00KKwkucHJldmlvdXMKKworCV9fSU5JVAorRU5UUlkoc3RhcnR1cF94ZW4pCisJLy8gQ2FsY3VsYXRlIGxvYWQgb2Zmc2V0LgorCS8vIFRoZSBjb25zdGFudCwgTE9BRF9PRkZTRVQsIGNhbid0IGJlIHVzZWQgYmVjYXVzZSB0aGUgYm9vdAorCS8vIGxvYWRlciBkb2Vzbid0IGFsd2F5cyBsb2FkIHRvIHRoZSBMTUEgc3BlY2lmaWVkIGJ5IHRoZSB2bWxpbnV4Lmxkcy4KKwltb3Ygcjk9aXAJLy8gbXVzdCBiZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gdG8gbWFrZSBzdXJlCisJCQkvLyB0aGF0IHI5ID0gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhcnR1cF94ZW4uCisJCQkvLyBVc3VhbGx5IHI5ID0gc3RhcnR1cF94ZW4gLSBMT0FEX09GRlNFVAorCW1vdmwgcjg9c3RhcnR1cF94ZW4KKwk7OworCXN1YiByOT1yOSxyOAkvLyBVc3VhbGx5IHI5ID0gLUxPQURfT0ZGU0VULgorCisJbW92IHIxMD1QQVJBVklSVF9IWVBFUlZJU09SX1RZUEVfWEVOCisJbW92bCByMTE9X3N0YXJ0CisJOzsKKwlhZGQgcjExPXIxMSxyOQorCW1vdmwgcjg9aHlwZXJ2aXNvcl90eXBlCisJOzsKKwlhZGQgcjg9cjgscjkKKwltb3YgYjA9cjExCisJOzsKKwlzdDggW3I4XT1yMTAKKwlici5jb25kLnNwdGsubWFueSBiMAorCTs7CitFTkQoc3RhcnR1cF94ZW4pCisKKwlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfR1VFU1RfT1MsCS5hc2NpeiAibGludXgiKQorCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9HVUVTVF9WRVJTSU9OLAkuYXNjaXogIjIuNiIpCisJRUxGTk9URShYZW4sIFhFTl9FTEZOT1RFX1hFTl9WRVJTSU9OLAkuYXNjaXogInhlbi0zLjAiKQorCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9FTlRSWSwJCWRhdGE4LnVhIHN0YXJ0dXBfeGVuIC0gTE9BRF9PRkZTRVQpCisKKyNkZWZpbmUgaXNCUAlwMwkvLyBhcmUgd2UgdGhlIEJvb3RzdHJhcCBQcm9jZXNzb3I/CisKKwkudGV4dAorCitHTE9CQUxfRU5UUlkoeGVuX3NldHVwX2hvb2spCisJbW92IHI4PVhFTl9QVl9ET01BSU5fQVNNCisoaXNCUCkJbW92bCByOT14ZW5fZG9tYWluX3R5cGU7OworKGlzQlApCXN0NCBbcjldPXI4CisJbW92bCByMTA9eGVuX2l2dDs7CisKKwltb3YgY3IuaXZhPXIxMAorCisJLyogU2V0IHhzaSBiYXNlLiAgKi8KKyNkZWZpbmUgRldfSFlQRVJDQUxMX1NFVF9TSEFSRURfSU5GT19WQQkJCTB4NjAwCisoaXNCUCkJbW92IHIyPUZXX0hZUEVSQ0FMTF9TRVRfU0hBUkVEX0lORk9fVkEKKyhpc0JQKQltb3ZsIHIyOD1YU0lfQkFTRTs7CisoaXNCUCkJYnJlYWsgMHgxMDAwOzsKKworCS8qIHNldHVwIHB2X29wcyAqLworKGlzQlApCW1vdiByND1ycAorCTs7CisoaXNCUCkJYnIuY2FsbC5zcHRrLm1hbnkgcnA9eGVuX3NldHVwX3B2X29wcworCTs7CisoaXNCUCkJbW92IHJwPXI0CisJOzsKKworCWJyLnJldC5zcHRrLm1hbnkgcnAKKwk7OworRU5EKHhlbl9zZXR1cF9ob29rKQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCAwMDI4OWMxLi5kYmFlZDRhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtNDIsNiArNDIsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCBmYzI5OTQ4Li4zOWNiNmRhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtNDAsNiArNDAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9vcHJvZmlsZS9pbml0LmMgYi9hcmNoL20zMnIvb3Byb2ZpbGUvaW5pdC5jCmluZGV4IGI3NzczZTQuLmZhNTY4NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9tMzJyL29wcm9maWxlL2luaXQuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi1pbnQgX19pbml0IG9wcm9maWxlX2FyY2hfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqIG9wcykKK2ludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDY3N2M5M2EuLjgzNmZiNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC02Miw2ICs2Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cCIKIAogY29uZmlnIEVJU0EKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwppbmRleCAwYTNmOWU4Li5hYjk4NjJjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgpAQCAtOTMsNyArOTQsNyBAQAogCiBzdGF0aWMgdm9pZCBhbWlnYV9zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgaGFuZGxlcik7CiBzdGF0aWMgdm9pZCBhbWlnYV9nZXRfbW9kZWwoY2hhciAqbW9kZWwpOwotc3RhdGljIGludCBhbWlnYV9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpOworc3RhdGljIHZvaWQgYW1pZ2FfZ2V0X2hhcmR3YXJlX2xpc3Qoc3RydWN0IHNlcV9maWxlICptKTsKIC8qIGFtaWdhIHNwZWNpZmljIHRpbWVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgYW1pZ2FfZ2V0dGltZW9mZnNldCh2b2lkKTsKIHN0YXRpYyBpbnQgYTMwMDBfaHdjbGsoaW50LCBzdHJ1Y3QgcnRjX3RpbWUgKik7CkBAIC05MTEsMTMgKzkxMiwxMSBAQAogfQogCiAKLXN0YXRpYyBpbnQgYW1pZ2FfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQorc3RhdGljIHZvaWQgYW1pZ2FfZ2V0X2hhcmR3YXJlX2xpc3Qoc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBsZW4gPSAwOwotCiAJaWYgKEFNSUdBSFdfUFJFU0VOVChDSElQX1JBTSkpCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJDaGlwIFJBTTpcdCVsZEtcbiIsIGFtaWdhX2NoaXBfc2l6ZT4+MTApOwotCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJQUyBGcmVxOlx0JWRIelxuRUNsb2NrIEZyZXE6XHQlbGRIelxuIiwKKwkJc2VxX3ByaW50ZihtLCAiQ2hpcCBSQU06XHQlbGRLXG4iLCBhbWlnYV9jaGlwX3NpemU+PjEwKTsKKwlzZXFfcHJpbnRmKG0sICJQUyBGcmVxOlx0JWRIelxuRUNsb2NrIEZyZXE6XHQlbGRIelxuIiwKIAkJCWFtaWdhX3BzZnJlcSwgYW1pZ2FfZWNsb2NrKTsKIAlpZiAoQU1JR0FIV19QUkVTRU5UKEFNSV9WSURFTykpIHsKIAkJY2hhciAqdHlwZTsKQEAgLTkzNSwxNCArOTM0LDE0IEBACiAJCQl0eXBlID0gIk9sZCBvciBVbmtub3duIjsKIAkJCWJyZWFrOwogCQl9Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJHcmFwaGljczpcdCVzXG4iLCB0eXBlKTsKKwkJc2VxX3ByaW50ZihtLCAiR3JhcGhpY3M6XHQlc1xuIiwgdHlwZSk7CiAJfQogCiAjZGVmaW5lIEFNSUdBSFdfQU5OT1VOQ0UobmFtZSwgc3RyKQkJCVwKIAlpZiAoQU1JR0FIV19QUkVTRU5UKG5hbWUpKQkJCVwKLQkJbGVuICs9IHNwcmludGYgKGJ1ZmZlcitsZW4sICJcdCVzXG4iLCBzdHIpCisJCXNlcV9wcmludGYgKG0sICJcdCVzXG4iLCBzdHIpCiAKLQlsZW4gKz0gc3ByaW50ZiAoYnVmZmVyICsgbGVuLCAiRGV0ZWN0ZWQgaGFyZHdhcmU6XG4iKTsKKwlzZXFfcHJpbnRmIChtLCAiRGV0ZWN0ZWQgaGFyZHdhcmU6XG4iKTsKIAogCUFNSUdBSFdfQU5OT1VOQ0UoQU1JX1ZJREVPLCAiQW1pZ2EgVmlkZW8iKTsKIAlBTUlHQUhXX0FOTk9VTkNFKEFNSV9CTElUVEVSLCAiQmxpdHRlciIpOwpAQCAtOTc1LDE1ICs5NzQsMTMgQEAKIAlBTUlHQUhXX0FOTk9VTkNFKFBDTUNJQSwgIlBDTUNJQSBTbG90Iik7CiAjaWZkZWYgQ09ORklHX1pPUlJPCiAJaWYgKEFNSUdBSFdfUFJFU0VOVChaT1JSTykpCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcdFpvcnJvIElJJXMgQXV0b0NvbmZpZzogJWQgRXhwYW5zaW9uICIKKwkJc2VxX3ByaW50ZihtLCAiXHRab3JybyBJSSVzIEF1dG9Db25maWc6ICVkIEV4cGFuc2lvbiAiCiAJCQkJIkRldmljZSVzXG4iLAogCQkJCUFNSUdBSFdfUFJFU0VOVChaT1JSTzMpID8gIkkiIDogIiIsCiAJCQkJem9ycm9fbnVtX2F1dG9jb24sIHpvcnJvX251bV9hdXRvY29uID09IDEgPyAiIiA6ICJzIik7CiAjZW5kaWYgLyogQ09ORklHX1pPUlJPICovCiAKICN1bmRlZiBBTUlHQUhXX0FOTk9VTkNFCi0KLQlyZXR1cm4gbGVuOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCmluZGV4IGFmMDMxODUuLjQ5YzI4Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYworKysgYi9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTYzLDcgKzY0LDcgQEAKIC8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyB2b2lkIGF0YXJpX3Jlc2V0KHZvaWQpOwogc3RhdGljIHZvaWQgYXRhcmlfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKLXN0YXRpYyBpbnQgYXRhcmlfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKTsKK3N0YXRpYyB2b2lkIGF0YXJpX2dldF9oYXJkd2FyZV9saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSk7CiAKIC8qIGF0YXJpIHNwZWNpZmljIGlycSBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIGF0YXJpX2luaXRfSVJRICh2b2lkKTsKQEAgLTYxMSwyMSArNjEyLDIxIEBACiB9CiAKIAotc3RhdGljIGludCBhdGFyaV9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCitzdGF0aWMgdm9pZCBhdGFyaV9nZXRfaGFyZHdhcmVfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JaW50IGxlbiA9IDAsIGk7CisJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcdCUzbGQgTUIgYXQgMHglMDhseCAoJXMpXG4iLAorCQlzZXFfcHJpbnRmKG0sICJcdCUzbGQgTUIgYXQgMHglMDhseCAoJXMpXG4iLAogCQkJCW02OGtfbWVtb3J5W2ldLnNpemUgPj4gMjAsIG02OGtfbWVtb3J5W2ldLmFkZHIsCiAJCQkJKG02OGtfbWVtb3J5W2ldLmFkZHIgJiAweGZmMDAwMDAwID8KIAkJCQkgImFsdGVybmF0ZSBSQU0iIDogIlNULVJBTSIpKTsKIAogI2RlZmluZSBBVEFSSUhXX0FOTk9VTkNFKG5hbWUsIHN0cikJCQlcCiAJaWYgKEFUQVJJSFdfUFJFU0VOVChuYW1lKSkJCQlcCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIlx0JXNcbiIsIHN0cikKKwkJc2VxX3ByaW50ZihtLCAiXHQlc1xuIiwgc3RyKQogCi0JbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiRGV0ZWN0ZWQgaGFyZHdhcmU6XG4iKTsKKwlzZXFfcHJpbnRmKG0sICJEZXRlY3RlZCBoYXJkd2FyZTpcbiIpOwogCUFUQVJJSFdfQU5OT1VOQ0UoU1RORF9TSElGVEVSLCAiU1QgU2hpZnRlciIpOwogCUFUQVJJSFdfQU5OT1VOQ0UoRVhURF9TSElGVEVSLCAiU1RlIFNoaWZ0ZXIiKTsKIAlBVEFSSUhXX0FOTk9VTkNFKFRUX1NISUZURVIsICJUVCBTaGlmdGVyIik7CkBAIC02NTQsNiArNjU1LDQgQEAKIAlBVEFSSUhXX0FOTk9VTkNFKEJMSVRURVIsICJCbGl0dGVyIik7CiAJQVRBUklIV19BTk5PVU5DRShWTUUsICJWTUUgQnVzIik7CiAJQVRBUklIV19BTk5PVU5DRShEU1A1NkssICJEU1A1NjAwMSBwcm9jZXNzb3IiKTsKLQotCXJldHVybiBsZW47CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvc3RyYW0uYyBiL2FyY2gvbTY4ay9hdGFyaS9zdHJhbS5jCmluZGV4IDA0YzY5ZmYuLjZlYzNiN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9zdHJhbS5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9zdHJhbS5jCkBAIC00Miw2ICs0Miw3IEBACiAvKiBhYmJyZXYgZm9yIHRoZSAmJiBhYm92ZS4uLiAqLwogI2RlZmluZSBET19QUk9DCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjZW5kaWYKIAogLyoKQEAgLTMyMywxOSArMzI0LDE2IEBACiAKICNpZmRlZiBET19QUk9DCiAKLSNkZWZpbmUJUFJJTlRfUFJPQyhmbXQsYXJncy4uLikgbGVuICs9IHNwcmludGYoIGJ1ZitsZW4sIGZtdCwgIyNhcmdzICkKKyNkZWZpbmUJUFJJTlRfUFJPQyhmbXQsYXJncy4uLikgc2VxX3ByaW50ZiggbSwgZm10LCAjI2FyZ3MgKQogCi1pbnQgZ2V0X3N0cmFtX2xpc3QoIGNoYXIgKmJ1ZiApCitzdGF0aWMgaW50IHN0cmFtX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJQkxPQ0sgKnA7CiAKIAlQUklOVF9QUk9DKCJUb3RhbCBTVC1SQU06ICAgICAgJTh1IGtCXG4iLAogCQkJICAgKHN0cmFtX2VuZCAtIHN0cmFtX3N0YXJ0KSA+PiAxMCk7CiAJUFJJTlRfUFJPQyggIkFsbG9jYXRlZCByZWdpb25zOlxuIiApOwogCWZvciggcCA9IGFsbG9jX2xpc3Q7IHA7IHAgPSBwLT5uZXh0ICkgewotCQlpZiAobGVuICsgNTAgPj0gUEFHRV9TSVpFKQotCQkJYnJlYWs7CiAJCVBSSU5UX1BST0MoIjB4JTA4bHgtMHglMDhseDogJXMgKCIsCiAJCQkgICB2aXJ0X3RvX3BoeXMocC0+c3RhcnQpLAogCQkJICAgdmlydF90b19waHlzKHAtPnN0YXJ0K3AtPnNpemUtMSksCkBAIC0zNDYsOSArMzQ0LDI3IEBACiAJCQlQUklOVF9QUk9DKCAiPz8pXG4iICk7CiAJfQogCi0JcmV0dXJuKCBsZW4gKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdHJhbV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN0cmFtX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0cmFtX3Byb2NfZm9wcyA9IHsKKwkub3BlbgkJPSBzdHJhbV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2Nfc3RyYW1faW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJzdHJhbSIsIDAsIE5VTEwsICZzdHJhbV9wcm9jX2ZvcHMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19zdHJhbV9pbml0KTsKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9idm1lNjAwMC9jb25maWcuYyBiL2FyY2gvbTY4ay9idm1lNjAwMC9jb25maWcuYwppbmRleCA2NWM5MjA0Li5jMDcyNTk1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYnZtZTYwMDAvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8YXNtL2J2bWU2MDAwaHcuaD4KIAogc3RhdGljIHZvaWQgYnZtZTYwMDBfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKLXN0YXRpYyBpbnQgIGJ2bWU2MDAwX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcik7CiBleHRlcm4gdm9pZCBidm1lNjAwMF9zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgaGFuZGxlcik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBidm1lNjAwMF9nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKIGV4dGVybiBpbnQgYnZtZTYwMDBfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOwpAQCAtODIsMTUgKzgxLDYgQEAKICAgICBzcHJpbnRmKG1vZGVsLCAiQlZNRSVkMDAwIiwgbTY4a19jcHV0eXBlID09IENQVV82ODA2MCA/IDYgOiA0KTsKIH0KIAotCi0vKiBObyBoYXJkd2FyZSBvcHRpb25zIG9uIEJWTUU2MDAwPyAqLwotCi1zdGF0aWMgaW50IGJ2bWU2MDAwX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcikKLXsKLSAgICAqYnVmZmVyID0gJ1wwJzsKLSAgICByZXR1cm4gMDsKLX0KLQogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBrZXJuZWwgc3RhcnR1cCB0byBpbml0aWFsaXplCiAgKiB0aGUgYnZtZTYwMDAgSVJRIGhhbmRsaW5nIHJvdXRpbmVzLgpAQCAtMTI3LDcgKzExNyw2IEBACiAgICAgbWFjaF9zZXRfY2xvY2tfbW1zcwkgPSBidm1lNjAwMF9zZXRfY2xvY2tfbW1zczsKICAgICBtYWNoX3Jlc2V0CQkgPSBidm1lNjAwMF9yZXNldDsKICAgICBtYWNoX2dldF9tb2RlbCAgICAgICA9IGJ2bWU2MDAwX2dldF9tb2RlbDsKLSAgICBtYWNoX2dldF9oYXJkd2FyZV9saXN0ID0gYnZtZTYwMDBfZ2V0X2hhcmR3YXJlX2xpc3Q7CiAKICAgICBwcmludGsgKCJCb2FyZCBpcyAlc2NvbmZpZ3VyZWQgYXMgYSBTeXN0ZW0gQ29udHJvbGxlclxuIiwKIAkJKmNvbmZpZ19yZWdfcHRyICYgQlZNRV9DT05GSUdfU1cxID8gIiIgOiAibm90ICIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jIGIvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jCmluZGV4IDgwOGM5MDEuLmM1MGJlYzggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYworKysgYi9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4JLyogRm9yIHN0cnVjdCBydGNfdGltZSBhbmQgaW9jdGxzLCBldGMgKi8KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGFzbS9idm1lNjAwMGh3Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYwppbmRleCBlYTFlNDRkLi40ZDk3YmQyIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KQEAgLTgwLDcgKzgxLDcgQEAKIC8qIG1hY2hpbmUgZGVwZW5kZW50IGlycSBmdW5jdGlvbnMgKi8KIHZvaWQgKCptYWNoX2luaXRfSVJRKSAodm9pZCkgX19pbml0ZGF0YSA9IE5VTEw7CiB2b2lkICgqbWFjaF9nZXRfbW9kZWwpIChjaGFyICptb2RlbCk7Ci1pbnQgKCptYWNoX2dldF9oYXJkd2FyZV9saXN0KSAoY2hhciAqYnVmZmVyKTsKK3ZvaWQgKCptYWNoX2dldF9oYXJkd2FyZV9saXN0KSAoc3RydWN0IHNlcV9maWxlICptKTsKIC8qIG1hY2hpbmUgZGVwZW5kZW50IHRpbWVyIGZ1bmN0aW9ucyAqLwogdW5zaWduZWQgbG9uZyAoKm1hY2hfZ2V0dGltZW9mZnNldCkgKHZvaWQpOwogaW50ICgqbWFjaF9od2NsaykgKGludCwgc3RydWN0IHJ0Y190aW1lKik7CkBAIC00NjcsOSArNDY4LDkgQEAKIAkuc2hvdwk9IHNob3dfY3B1aW5mbywKIH07CiAKLWludCBnZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCisjaWZkZWYgQ09ORklHX1BST0NfSEFSRFdBUkUKK3N0YXRpYyBpbnQgaGFyZHdhcmVfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMDsKIAljaGFyIG1vZGVsWzgwXTsKIAl1bnNpZ25lZCBsb25nIG1lbTsKIAlpbnQgaTsKQEAgLTQ3OSwxNyArNDgwLDM3IEBACiAJZWxzZQogCQlzdHJjcHkobW9kZWwsICJVbmtub3duIG02OGsiKTsKIAotCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIk1vZGVsOlx0XHQlc1xuIiwgbW9kZWwpOworCXNlcV9wcmludGYobSwgIk1vZGVsOlx0XHQlc1xuIiwgbW9kZWwpOwogCWZvciAobWVtID0gMCwgaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7IGkrKykKIAkJbWVtICs9IG02OGtfbWVtb3J5W2ldLnNpemU7Ci0JbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiU3lzdGVtIE1lbW9yeTpcdCVsZEtcbiIsIG1lbSA+PiAxMCk7CisJc2VxX3ByaW50ZihtLCAiU3lzdGVtIE1lbW9yeTpcdCVsZEtcbiIsIG1lbSA+PiAxMCk7CiAKIAlpZiAobWFjaF9nZXRfaGFyZHdhcmVfbGlzdCkKLQkJbGVuICs9IG1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QoYnVmZmVyICsgbGVuKTsKKwkJbWFjaF9nZXRfaGFyZHdhcmVfbGlzdChtKTsKIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaGFyZHdhcmVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBoYXJkd2FyZV9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoYXJkd2FyZV9wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gaGFyZHdhcmVfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2hhcmR3YXJlX2luaXQodm9pZCkKK3sKKwlwcm9jX2NyZWF0ZSgiaGFyZHdhcmUiLCAwLCBOVUxMLCAmaGFyZHdhcmVfcHJvY19mb3BzKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHByb2NfaGFyZHdhcmVfaW5pdCk7CisjZW5kaWYKKwogdm9pZCBjaGVja19idWdzKHZvaWQpCiB7CiAjaWZuZGVmIENPTkZJR19NNjhLRlBVX0VNVQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL212bWUxNDcvY29uZmlnLmMgYi9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYwppbmRleCA5MmZlNTA3Li40M2NkZjQ3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYworKysgYi9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYwpAQCAtMzcsNyArMzcsNiBAQAogCiAKIHN0YXRpYyB2b2lkIG12bWUxNDdfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKLXN0YXRpYyBpbnQgIG12bWUxNDdfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKTsKIGV4dGVybiB2b2lkIG12bWUxNDdfc2NoZWRfaW5pdChpcnFfaGFuZGxlcl90IGhhbmRsZXIpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXZtZTE0N19nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKIGV4dGVybiBpbnQgbXZtZTE0N19od2NsayAoaW50LCBzdHJ1Y3QgcnRjX3RpbWUgKik7CkBAIC03NiwxNCArNzUsNiBAQAogCXNwcmludGYobW9kZWwsICJNb3Rvcm9sYSBNVk1FMTQ3Iik7CiB9CiAKLQotc3RhdGljIGludCBtdm1lMTQ3X2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcikKLXsKLQkqYnVmZmVyID0gJ1wwJzsKLQotCXJldHVybiAwOwotfQotCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBzdGFydHVwIHRvIGluaXRpYWxpemUKICAqIHRoZSBtdm1lMTQ3IElSUSBoYW5kbGluZyByb3V0aW5lcy4KQEAgLTEwNCw3ICs5NSw2IEBACiAJbWFjaF9zZXRfY2xvY2tfbW1zcwk9IG12bWUxNDdfc2V0X2Nsb2NrX21tc3M7CiAJbWFjaF9yZXNldAkJPSBtdm1lMTQ3X3Jlc2V0OwogCW1hY2hfZ2V0X21vZGVsCQk9IG12bWUxNDdfZ2V0X21vZGVsOwotCW1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QJPSBtdm1lMTQ3X2dldF9oYXJkd2FyZV9saXN0OwogCiAJLyogQm9hcmQgdHlwZSBpcyBvbmx5IHNldCBieSBuZXdlciB2ZXJzaW9ucyBvZiB2bWVsaWxvL3RmdHBsaWxvICovCiAJaWYgKCF2bWVfYnJkdHlwZSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L2NvbmZpZy5jIGIvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKaW5kZXggMjRjYmMzMC4uMTUyMTgyNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpAQCAtNDIsNyArNDMsNiBAQAogc3RhdGljIE1LNDhUMDhwdHJfdCB2b2xhdGlsZSBydGMgPSAoTUs0OFQwOHB0cl90KU1WTUVfUlRDX0JBU0U7CiAKIHN0YXRpYyB2b2lkIG12bWUxNnhfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKLXN0YXRpYyBpbnQgIG12bWUxNnhfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKTsKIGV4dGVybiB2b2lkIG12bWUxNnhfc2NoZWRfaW5pdChpcnFfaGFuZGxlcl90IGhhbmRsZXIpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXZtZTE2eF9nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKIGV4dGVybiBpbnQgbXZtZTE2eF9od2NsayAoaW50LCBzdHJ1Y3QgcnRjX3RpbWUgKik7CkBAIC05MywyNiArOTMsMjEgQEAKIH0KIAogCi1zdGF0aWMgaW50IG12bWUxNnhfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQorc3RhdGljIHZvaWQgbXZtZTE2eF9nZXRfaGFyZHdhcmVfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAgICAgcF9iZGlkIHAgPSAmbXZtZV9iZGlkOwotICAgIGludCBsZW4gPSAwOwogCiAgICAgaWYgKHAtPmJyZG5vID09IDB4MDE2MiB8fCBwLT5icmRubyA9PSAweDAxNzIpCiAgICAgewogCXVuc2lnbmVkIGNoYXIgcmV2ID0gKih1bnNpZ25lZCBjaGFyICopTVZNRTE2Ml9WRVJTSU9OX1JFRzsKIAotCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiVk1FY2hpcDIgICAgICAgICVzcHJlc2VudFxuIiwKKwlzZXFfcHJpbnRmIChtLCAiVk1FY2hpcDIgICAgICAgICVzcHJlc2VudFxuIiwKIAkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX1ZNRUNISVAyID8gIk5PVCAiIDogIiIpOwotCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiU0NTSSBpbnRlcmZhY2UgICVzcHJlc2VudFxuIiwKKwlzZXFfcHJpbnRmIChtLCAiU0NTSSBpbnRlcmZhY2UgICVzcHJlc2VudFxuIiwKIAkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX1NDU0lDSElQID8gIk5PVCAiIDogIiIpOwotCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiRXRoZXJuZXQgaS9mICAgICVzcHJlc2VudFxuIiwKKwlzZXFfcHJpbnRmIChtLCAiRXRoZXJuZXQgaS9mICAgICVzcHJlc2VudFxuIiwKIAkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX0VUSEVSTkVUID8gIk5PVCAiIDogIiIpOwogICAgIH0KLSAgICBlbHNlCi0JKmJ1ZmZlciA9ICdcMCc7Ci0KLSAgICByZXR1cm4gKGxlbik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcTQwL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3E0MC9jb25maWcuYwppbmRleCA5YzdlZWZhLi43MTEwNTQ2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvcTQwL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMKQEAgLTM5LDcgKzM5LDYgQEAKIGV4dGVybiBpcnFyZXR1cm5fdCBxNDBfcHJvY2Vzc19pbnQoaW50IGxldmVsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBxNDBfaW5pdF9JUlEodm9pZCk7CiBzdGF0aWMgdm9pZCBxNDBfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKLXN0YXRpYyBpbnQgIHE0MF9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpOwogZXh0ZXJuIHZvaWQgcTQwX3NjaGVkX2luaXQoaXJxX2hhbmRsZXJfdCBoYW5kbGVyKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcTQwX2dldHRpbWVvZmZzZXQodm9pZCk7CkBAIC0xNTMsMTQgKzE1Miw2IEBACiAJc3ByaW50Zihtb2RlbCwgIlE0MCIpOwogfQogCi0vKiBObyBoYXJkd2FyZSBvcHRpb25zIG9uIFE0MD8gKi8KLQotc3RhdGljIGludCBxNDBfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQotewotCSpidWZmZXIgPSAnXDAnOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcnBvcnRzW10gPQogewogCTB4M2Y4LDB4MmY4LDB4M2U4LDB4MmU4LDAKQEAgLTE5MSw3ICsxODIsNiBAQAogCiAJbWFjaF9yZXNldCA9IHE0MF9yZXNldDsKIAltYWNoX2dldF9tb2RlbCA9IHE0MF9nZXRfbW9kZWw7Ci0JbWFjaF9nZXRfaGFyZHdhcmVfbGlzdCA9IHE0MF9nZXRfaGFyZHdhcmVfbGlzdDsKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQX01PRFVMRSkKIAltYWNoX2JlZXAgPSBxNDBfbWtzb3VuZDsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKaW5kZXggNzMyMDg3ZC4uOGRmYWEyMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNDYsMTYgKzQ3LDkgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGF2YWlsbWVtOwogdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7CiAKLXN0YXRpYyBpbnQgc3VuM19nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCitzdGF0aWMgdm9pZCBzdW4zX2dldF9oYXJkd2FyZV9saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQotCWludCBsZW4gPSAwOwotCi0JbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiUFJPTSBSZXZpc2lvbjpcdCVzXG4iLAotCQkgICAgICAgcm9tdmVjLT5wdl9tb25pZCk7Ci0KLQlyZXR1cm4gbGVuOwotCisJc2VxX3ByaW50ZihtLCAiUFJPTSBSZXZpc2lvbjpcdCVzXG4iLCByb212ZWMtPnB2X21vbmlkKTsKIH0KIAogdm9pZCBfX2luaXQgc3VuM19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuM3gvY29uZmlnLmMgYi9hcmNoL202OGsvc3VuM3gvY29uZmlnLmMKaW5kZXggOTg3ODkxNy4uMmIxY2EyZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjN4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9zdW4zeC9jb25maWcuYwpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKQEAgLTMxLDE2ICszMiw5IEBACiAKIH0KIAotc3RhdGljIGludCBzdW4zeF9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCitzdGF0aWMgdm9pZCBzdW4zeF9nZXRfaGFyZHdhcmVfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0KLQlpbnQgbGVuID0gMDsKLQotCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIlBST00gUmV2aXNpb246XHQlc1xuIiwKLQkJICAgICAgIHJvbXZlYy0+cHZfbW9uaWQpOwotCi0JcmV0dXJuIGxlbjsKLQorCXNlcV9wcmludGYobSwgIlBST00gUmV2aXNpb246XHQlc1xuIiwgcm9tdmVjLT5wdl9tb25pZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9LY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwppbmRleCAwYTg5OTgzLi43NmI2NmZlIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9LY29uZmlnCisrKyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKQEAgLTc1LDYgKzc1LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCiBjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDBjOWJjMDkuLjgyNTI5ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODQsMTIgKzg0LDE0IEBACiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkzCS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZwogCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTQKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGI5MDU3NDQuLjVmMTQ5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xODg1LDYgKzE4ODUsOCBAQAogCSAgYWRkIGluaXRyZCBvciBpbml0cmFtZnMgaW1hZ2UgdG8gdGhlIGtlcm5lbCBpbWFnZS4KIAkgIE90aGVyd2lzZSwgc2F5IE4uCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKSIKIAogY29uZmlnIEhXX0hBU19FSVNBCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3RpbWUuYyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCmluZGV4IDM5NjVmZGEuLjEzNTljMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCkBAIC00NSwxMiArNDUsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCXNlYyA9IEJDRDJCSU4oc2VjKTsKLQkJbWluID0gQkNEMkJJTihtaW4pOwotCQlob3VyID0gQkNEMkJJTihob3VyKTsKLQkJZGF5ID0gQkNEMkJJTihkYXkpOwotCQltb24gPSBCQ0QyQklOKG1vbik7Ci0JCXllYXIgPSBCQ0QyQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAl9CiAKIAl5ZWFyICs9IHJlYWxfeWVhciAtIDcyICsgMjAwMDsKQEAgLTgzLDcgKzgzLDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCWNtb3NfbWludXRlcyA9IEJDRDJCSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtOTksOCArOTksOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCXJlYWxfc2Vjb25kcyA9IEJJTjJCQ0QocmVhbF9zZWNvbmRzKTsKLQkJCXJlYWxfbWludXRlcyA9IEJJTjJCQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcywgUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcywgUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmgKaW5kZXggY2RjMzc5YS4uMTk5YjQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWMxNDY4MTgtdGltZS5oCkBAIC00NCw3ICs0NCw3IEBACiAKIAljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisJCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTYwLDggKzYwLDggQEAKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7CiAJCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfbWludXRlcyk7CisJCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCQlyZWFsX21pbnV0ZXMgPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CiAJCX0KIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKQEAgLTEwMywxMiArMTAzLDEyIEBACiAJfSB3aGlsZSAoc2VjICE9IENNT1NfUkVBRChSVENfU0VDT05EUykpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAJeWVhciA9IG1jMTQ2ODE4X2RlY29kZV95ZWFyKHllYXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R4eDkvdHg0OTM4LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS90eDQ5MzguaAppbmRleCA5ODllNzc1Li4wYjA2ODE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS90eDQ5MzguaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS90eDQ5MzguaApAQCAtMjkyLDQgKzI5MiwxNyBAQAogdm9pZCB0eDQ5MzhfaXJxX2luaXQodm9pZCk7CiB2b2lkIHR4NDkzOF9tdGRfaW5pdChpbnQgY2gpOwogCitzdHJ1Y3QgdHg0OTM4aWRlX3BsYXRmb3JtX2luZm8geworCS8qCisJICogSS9PIHBvcnQgc2hpZnQsIGZvciBwbGF0Zm9ybXMgd2l0aCBwb3J0cyB0aGF0IGFyZQorCSAqIGNvbnN0YW50bHkgc3BhY2VkIGFuZCBuZWVkIGxhcmdlciB0aGFuIHRoZSAxLWJ5dGUKKwkgKiBzcGFjaW5nIHVzZWQgYnkgYXRhX3N0ZF9wb3J0cygpLgorCSAqLworCXVuc2lnbmVkIGludCBpb3BvcnRfc2hpZnQ7CisJdW5zaWduZWQgaW50IGdidXNfY2xvY2s7CS8qICAwIG1lYW5zIG5vIFBJTyBtb2RlIHR1bmluZy4gKi8KKwl1bnNpZ25lZCBpbnQgZWJ1c19jaDsKK307CisKK3ZvaWQgdHg0OTM4X2F0YV9pbml0KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBzaGlmdCwgaW50IHR1bmUpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYwppbmRleCBkZDJmYmQ2Li4zYmYzMzU0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9wX21pcHNfY3JlYXRlX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCkKK3N0YXRpYyBpbnQgb3BfbWlwc19jcmVhdGVfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCkKIHsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL29wX2ltcGwuaCBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9pbXBsLmgKaW5kZXggMmJmYzE3Yy4uZjA0YjU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX2ltcGwuaAorKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfaW1wbC5oCkBAIC0yNyw3ICsyNyw3IEBACiAvKiBQZXItYXJjaGl0ZWN0dXJlIGNvbmZpZ3VyeSBhbmQgaG9va3MuICAqLwogc3RydWN0IG9wX21pcHNfbW9kZWwgewogCXZvaWQgKCpyZWdfc2V0dXApIChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKik7Ci0Jdm9pZCAoKmNwdV9zZXR1cCkgKHZvaWQgKiBkdW1teSk7CisJdm9pZCAoKmNwdV9zZXR1cCkgKHZvaWQgKmR1bW15KTsKIAlpbnQgKCppbml0KSh2b2lkKTsKIAl2b2lkICgqZXhpdCkodm9pZCk7CiAJdm9pZCAoKmNwdV9zdGFydCkodm9pZCAqYXJncyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfcm05MDAwLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfcm05MDAwLmMKaW5kZXggYTQ1ZDMyMC4uM2FhODEzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX3JtOTAwMC5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9ybTkwMDAuYwpAQCAtODAsNyArODAsNyBAQAogCXdyaXRlX2MwX3BlcmZjb250cm9sKDApOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgcm05MDAwX3BlcmZjb3VudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKiBkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgcm05MDAwX3BlcmZjb3VudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY29udHJvbCA9IHJlYWRfYzBfcGVyZmNvbnRyb2woKTsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKaW5kZXggNjUzN2Q5MC4uMmQzYzBkYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCkBAIC03OSwxNCArNzksMTQgQEAKIAkvKiBTdG9wIHRoZSB1cGRhdGUgdG8gdGhlIHRpbWUgKi8KIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4NDA7CiAKLQl5ZWFyID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+eWVhcik7Ci0JeWVhciArPSBCQ0QyQklOKG00OHQzN19iYXNlLT5jZW50dXJ5KSAqIDEwMDsKKwl5ZWFyID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+eWVhcik7CisJeWVhciArPSBiY2QyYmluKG00OHQzN19iYXNlLT5jZW50dXJ5KSAqIDEwMDsKIAotCW1vbnRoID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+bW9udGgpOwotCWRheSA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPmRhdGUpOwotCWhvdXIgPSBCQ0QyQklOKG00OHQzN19iYXNlLT5ob3VyKTsKLQltaW4gPSBCQ0QyQklOKG00OHQzN19iYXNlLT5taW4pOwotCXNlYyA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPnNlYyk7CisJbW9udGggPSBiY2QyYmluKG00OHQzN19iYXNlLT5tb250aCk7CisJZGF5ID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+ZGF0ZSk7CisJaG91ciA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPmhvdXIpOworCW1pbiA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPm1pbik7CisJc2VjID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+c2VjKTsKIAogCS8qIFN0YXJ0IHRoZSB1cGRhdGUgdG8gdGhlIHRpbWUgYWdhaW4gKi8KIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4MDA7CkBAIC0xMTMsMjIgKzExMywyMiBAQAogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHg4MDsKIAogCS8qIHllYXIgKi8KLQltNDh0MzdfYmFzZS0+eWVhciA9IEJJTjJCQ0QodG0udG1feWVhciAlIDEwMCk7Ci0JbTQ4dDM3X2Jhc2UtPmNlbnR1cnkgPSBCSU4yQkNEKHRtLnRtX3llYXIgLyAxMDApOworCW00OHQzN19iYXNlLT55ZWFyID0gYmluMmJjZCh0bS50bV95ZWFyICUgMTAwKTsKKwltNDh0MzdfYmFzZS0+Y2VudHVyeSA9IGJpbjJiY2QodG0udG1feWVhciAvIDEwMCk7CiAKIAkvKiBtb250aCAqLwotCW00OHQzN19iYXNlLT5tb250aCA9IEJJTjJCQ0QodG0udG1fbW9uKTsKKwltNDh0MzdfYmFzZS0+bW9udGggPSBiaW4yYmNkKHRtLnRtX21vbik7CiAKIAkvKiBkYXkgKi8KLQltNDh0MzdfYmFzZS0+ZGF0ZSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CisJbTQ4dDM3X2Jhc2UtPmRhdGUgPSBiaW4yYmNkKHRtLnRtX21kYXkpOwogCiAJLyogaG91ci9taW4vc2VjICovCi0JbTQ4dDM3X2Jhc2UtPmhvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOwotCW00OHQzN19iYXNlLT5taW4gPSBCSU4yQkNEKHRtLnRtX21pbik7Ci0JbTQ4dDM3X2Jhc2UtPnNlYyA9IEJJTjJCQ0QodG0udG1fc2VjKTsKKwltNDh0MzdfYmFzZS0+aG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CisJbTQ4dDM3X2Jhc2UtPm1pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKKwltNDh0MzdfYmFzZS0+c2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCiAJLyogZGF5IG9mIHdlZWsgLS0gbm90IHJlYWxseSB1c2VkLCBidXQgbGV0J3Mga2VlcCBpdCB1cC10by1kYXRlICovCi0JbTQ4dDM3X2Jhc2UtPmRheSA9IEJJTjJCQ0QodG0udG1fd2RheSArIDEpOworCW00OHQzN19iYXNlLT5kYXkgPSBiaW4yYmNkKHRtLnRtX3dkYXkgKyAxKTsKIAogCS8qIGRpc2FibGUgd3JpdGluZyAqLwogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHgwMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX200MXQ4MS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMKaW5kZXggMjZmYmZmNC4uYjczMjYwMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMKQEAgLTE1NiwzMiArMTU2LDMyIEBACiAJICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQl0bS50bV9zZWMgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CisJdG0udG1fc2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfU0MsIHRtLnRtX3NlYyk7CiAKLQl0bS50bV9taW4gPSBCSU4yQkNEKHRtLnRtX21pbik7CisJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfTU4sIHRtLnRtX21pbik7CiAKLQl0bS50bV9ob3VyID0gQklOMkJDRCh0bS50bV9ob3VyKTsKKwl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKIAl0bS50bV9ob3VyID0gKHRtLnRtX2hvdXIgJiAweDNmKSB8IChtNDF0ODFfcmVhZChNNDFUODFSRUdfSFIpICYgMHhjMCk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19IUiwgdG0udG1faG91cik7CiAKIAkvKiB0bV93ZGF5IHN0YXJ0cyBmcm9tIDAgdG8gNiAqLwogCWlmICh0bS50bV93ZGF5ID09IDApIHRtLnRtX3dkYXkgPSA3OwotCXRtLnRtX3dkYXkgPSBCSU4yQkNEKHRtLnRtX3dkYXkpOworCXRtLnRtX3dkYXkgPSBiaW4yYmNkKHRtLnRtX3dkYXkpOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfRFksIHRtLnRtX3dkYXkpOwogCi0JdG0udG1fbWRheSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CisJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19EVCwgdG0udG1fbWRheSk7CiAKIAkvKiB0bV9tb24gc3RhcnRzIGZyb20gMCwgKmljayogKi8KIAl0bS50bV9tb24gKys7Ci0JdG0udG1fbW9uID0gQklOMkJDRCh0bS50bV9tb24pOworCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX01PLCB0bS50bV9tb24pOwogCiAJLyogd2UgZG9uJ3QgZG8gY2VudHVyeSwgZXZlcnl0aGluZyBpcyBiZXlvbmQgMjAwMCAqLwogCXRtLnRtX3llYXIgJT0gMTAwOwotCXRtLnRtX3llYXIgPSBCSU4yQkNEKHRtLnRtX3llYXIpOworCXRtLnRtX3llYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIpOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfWVIsIHRtLnRtX3llYXIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKQEAgLTIwOSwxMiArMjA5LDEyIEBACiAJeWVhciA9IG00MXQ4MV9yZWFkKE00MVQ4MVJFR19ZUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAotCXNlYyA9IEJDRDJCSU4oc2VjKTsKLQltaW4gPSBCQ0QyQklOKG1pbik7Ci0JaG91ciA9IEJDRDJCSU4oaG91cik7Ci0JZGF5ID0gQkNEMkJJTihkYXkpOwotCW1vbiA9IEJDRDJCSU4obW9uKTsKLQl5ZWFyID0gQkNEMkJJTih5ZWFyKTsKKwlzZWMgPSBiY2QyYmluKHNlYyk7CisJbWluID0gYmNkMmJpbihtaW4pOworCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCWRheSA9IGJjZDJiaW4oZGF5KTsKKwltb24gPSBiY2QyYmluKG1vbik7CisJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAKIAl5ZWFyICs9IDIwMDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX3hpY29yMTI0MS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMKaW5kZXggZmYzZTVkYS4uNDQzOGIyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMKQEAgLTEyNCwxOCArMTI0LDE4IEBACiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfU1IsIFgxMjQxUkVHX1NSX1dFTCB8IFgxMjQxUkVHX1NSX1JXRUwpOwogCiAJLyogdHJpdmlhbCBvbmVzICovCi0JdG0udG1fc2VjID0gQklOMkJDRCh0bS50bV9zZWMpOworCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19TQywgdG0udG1fc2VjKTsKIAotCXRtLnRtX21pbiA9IEJJTjJCQ0QodG0udG1fbWluKTsKKwl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfTU4sIHRtLnRtX21pbik7CiAKLQl0bS50bV9tZGF5ID0gQklOMkJDRCh0bS50bV9tZGF5KTsKKwl0bS50bV9tZGF5ID0gYmluMmJjZCh0bS50bV9tZGF5KTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19EVCwgdG0udG1fbWRheSk7CiAKIAkvKiB0bV9tb24gc3RhcnRzIGZyb20gMCwgKmljayogKi8KIAl0bS50bV9tb24gKys7Ci0JdG0udG1fbW9uID0gQklOMkJDRCh0bS50bV9tb24pOworCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19NTywgdG0udG1fbW9uKTsKIAogCS8qIHllYXIgaXMgc3BsaXQgKi8KQEAgLTE0OCw3ICsxNDgsNyBAQAogCXRtcCA9IHhpY29yX3JlYWQoWDEyNDFSRUdfSFIpOwogCWlmICh0bXAgJiBYMTI0MVJFR19IUl9NSUwpIHsKIAkJLyogMjQgaG91ciBmb3JtYXQgKi8KLQkJdG0udG1faG91ciA9IEJJTjJCQ0QodG0udG1faG91cik7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOwogCQl0bXAgPSAodG1wICYgfjB4M2YpIHwgKHRtLnRtX2hvdXIgJiAweDNmKTsKIAl9IGVsc2UgewogCQkvKiAxMiBob3VyIGZvcm1hdCwgd2l0aCAweDIgZm9yIHBtICovCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJCXRtcCB8PSAweDIwOwogCQkJdG0udG1faG91ciAtPSAxMjsKIAkJfQotCQl0bS50bV9ob3VyID0gQklOMkJDRCh0bS50bV9ob3VyKTsKKwkJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CiAJCXRtcCB8PSB0bS50bV9ob3VyOwogCX0KIAl4aWNvcl93cml0ZShYMTI0MVJFR19IUiwgdG1wKTsKQEAgLTE5MSwxMyArMTkxLDEzIEBACiAJeTJrID0geGljb3JfcmVhZChYMTI0MVJFR19ZMkspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKLQlzZWMgPSBCQ0QyQklOKHNlYyk7Ci0JbWluID0gQkNEMkJJTihtaW4pOwotCWhvdXIgPSBCQ0QyQklOKGhvdXIpOwotCWRheSA9IEJDRDJCSU4oZGF5KTsKLQltb24gPSBCQ0QyQklOKG1vbik7Ci0JeWVhciA9IEJDRDJCSU4oeWVhcik7Ci0JeTJrID0gQkNEMkJJTih5MmspOworCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwltaW4gPSBiY2QyYmluKG1pbik7CisJaG91ciA9IGJjZDJiaW4oaG91cik7CisJZGF5ID0gYmNkMmJpbihkYXkpOworCW1vbiA9IGJjZDJiaW4obW9uKTsKKwl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKKwl5MmsgPSBiY2QyYmluKHkyayk7CiAKIAl5ZWFyICs9ICh5MmsgKiAxMDApOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cF90eDQ5MzguYwppbmRleCBhZjcyNGU1Li4yNTgxOWZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXBfdHg0OTM4LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS90eHg5aXJxLmg+CkBAIC0zMzUsNiArMzM2LDUyIEBACiAJdHh4OV9waHlzbWFwX2ZsYXNoX2luaXQoY2gsIHN0YXJ0LCBzaXplLCAmcGRhdGEpOwogfQogCit2b2lkIF9faW5pdCB0eDQ5MzhfYXRhX2luaXQodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHNoaWZ0LCBpbnQgdHVuZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLyogLnN0YXJ0IGFuZCAuZW5kIGFyZSBmaWxsZWQgaW4gbGF0ZXIgKi8KKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBpcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCXN0cnVjdCB0eDQ5MzhpZGVfcGxhdGZvcm1faW5mbyBwZGF0YSA9IHsKKwkJLmlvcG9ydF9zaGlmdCA9IHNoaWZ0LAorCQkvKgorCQkgKiBUaGUgSURFIGRyaXZlciBzaG91bGQgbm90IGNoYW5nZSBidXMgdGltaW5ncyBpZiBvdGhlciBJU0EKKwkJICogZGV2aWNlcyBleGlzdGVkLgorCQkgKi8KKwkJLmdidXNfY2xvY2sgPSB0dW5lID8gdHh4OV9nYnVzX2Nsb2NrIDogMCwKKwl9OworCXU2NCBlYmNjcjsKKwlpbnQgaTsKKworCWlmICgoX19yYXdfcmVhZHEoJnR4NDkzOF9jY2ZncHRyLT5wY2ZnKSAmCisJICAgICAoVFg0OTM4X1BDRkdfQVRBX1NFTCB8IFRYNDkzOF9QQ0ZHX05ERl9TRUwpKQorCSAgICAhPSBUWDQ5MzhfUENGR19BVEFfU0VMKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvKiBjaGVjayBFQkNDUm4uSVNBLCBFQkNDUm4uQlNaLCBFQkNDUm4uTUUgKi8KKwkJZWJjY3IgPSBfX3Jhd19yZWFkcSgmdHg0OTM4X2VidXNjcHRyLT5jcltpXSk7CisJCWlmICgoZWJjY3IgJiAweDAwZjAwMDA4KSA9PSAweDAwZTAwMDA4KQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDgpCisJCXJldHVybjsKKwlwZGF0YS5lYnVzX2NoID0gaTsKKwlyZXNbMF0uc3RhcnQgPSAoKGViY2NyID4+IDQ4KSA8PCAyMCkgKyAweDEwMDAwOworCXJlc1swXS5lbmQgPSByZXNbMF0uc3RhcnQgKyAweDIwMDAwIC0gMTsKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0eDQ5MzhpZGUiLCAtMSk7CisJaWYgKCFwZGV2IHx8CisJICAgIHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgQVJSQVlfU0laRShyZXMpKSB8fAorCSAgICBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJnBkYXRhLCBzaXplb2YocGRhdGEpKSB8fAorCSAgICBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpKQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgdHg0OTM4X3N0b3BfdW51c2VkX21vZHVsZXModm9pZCkKIHsKIAlfX3U2NCBwY2ZnLCByc3QgPSAwLCBja2QgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMKaW5kZXggZTA3N2NjNC4uNTQ3ZmYyOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jCkBAIC0zNTIsNiArMzUyLDcgQEAKIAlyYnR4NDkzOF9uZV9pbml0KCk7CiAJdHg0OTM4X3dkdF9pbml0KCk7CiAJcmJ0eDQ5MzhfbXRkX2luaXQoKTsKKwl0eDQ5MzhfYXRhX2luaXQoUkJUWDQ5MzhfSVJRX0lPQ19BVEEsIDAsIDEpOwogCXR4eDlfaW9jbGVkX2luaXQoUkJUWDQ5MzhfTEVEX0FERFIgLSBJT19CQVNFLCAtMSwgOCwgMSwgImdyZWVuIiwgTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9LY29uZmlnIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKaW5kZXggZGQ1NTdjOS4uOWE5ZjQzMyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL0tjb25maWcKKysrIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKQEAgLTY4LDYgKzY4LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJNYXRzdXNoaXRhIE1OMTAzMDAgc3lzdGVtIHNldHVwIgogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9ydGMuYwppbmRleCAwNDJmNzkyLi43OTc4NDcwIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvcnRjLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtODQsOCArODQsOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcywgUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcywgUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggODMxM2ZjYy4uNjQ0YTcwYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC05LDYgKzksOCBAQAogCWRlZl9ib29sIHkKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQorCXNlbGVjdCBSVENfQ0xBU1MKKwlzZWxlY3QgUlRDX0RSVl9QQVJJU0MKIAloZWxwCiAJICBUaGUgUEEtUklTQyBtaWNyb3Byb2Nlc3NvciBpcyBkZXNpZ25lZCBieSBIZXdsZXR0LVBhY2thcmQgYW5kIHVzZWQKIAkgIGluIG1hbnkgb2YgdGhlaXIgd29ya3N0YXRpb25zICYgc2VydmVycyAoSFA5MDAwIDcwMCBhbmQgODAwIHNlcmllcywKQEAgLTkwLDYgKzkyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2hwdXgvZnMuYyBiL2FyY2gvcGFyaXNjL2hwdXgvZnMuYwppbmRleCAxMmMwNGM1Li5iZDlhNGRiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9ocHV4L2ZzLmMKKysrIGIvYXJjaC9wYXJpc2MvaHB1eC9mcy5jCkBAIC0xMjcsOSArMTI3LDggQEAKIAlidWYuZXJyb3IgPSAwOwogCiAJZXJyb3IgPSB2ZnNfcmVhZGRpcihmaWxlLCBmaWxsZGlyLCAmYnVmKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dF9wdXRmOwotCWVycm9yID0gYnVmLmVycm9yOworCWlmIChlcnJvciA+PSAwKQorCQllcnJvciA9IGJ1Zi5lcnJvcjsKIAlsYXN0ZGlyZW50ID0gYnVmLnByZXZpb3VzOwogCWlmIChsYXN0ZGlyZW50KSB7CiAJCWlmIChwdXRfdXNlcihmaWxlLT5mX3BvcywgJmxhc3RkaXJlbnQtPmRfb2ZmKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9LYnVpbGQgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9LYnVpbGQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9LYnVpbGQKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL0tidWlsZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2FncC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYWdwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9hZ3AuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYWdwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hc21yZWdzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hc21yZWdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9hc21yZWdzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2FzbXJlZ3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Fzc2VtYmx5LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hc3NlbWJseS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYXNzZW1ibHkuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXNzZW1ibHkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXRvbWljLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXRvbWljLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hdXh2ZWMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F1eHZlYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYXV4dmVjLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F1eHZlYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYml0b3BzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9iaXRvcHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2JpdG9wcy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9iaXRvcHMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2J1Zy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnVnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9idWcuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnVnLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9idWdzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9idWdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9idWdzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2J1Z3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2J5dGVvcmRlci5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9ieXRlb3JkZXIuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NoZWNrc3VtLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY2hlY2tzdW0uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2hlY2tzdW0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY29tcGF0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY29tcGF0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXRfcnRfc2lnZnJhbWUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NvbXBhdF9ydF9zaWdmcmFtZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3J0X3NpZ2ZyYW1lLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NvbXBhdF9ydF9zaWdmcmFtZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3NpZ25hbC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY29tcGF0X3NpZ25hbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3NpZ25hbC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXRfc2lnbmFsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXRfdWNvbnRleHQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NvbXBhdF91Y29udGV4dC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3Vjb250ZXh0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NvbXBhdF91Y29udGV4dC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY3B1dGltZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY3B1dGltZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY3B1dGltZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jdXJyZW50LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jdXJyZW50LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9jdXJyZW50LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2N1cnJlbnQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2RlbGF5LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kZWxheS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZGVsYXkuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZGVsYXkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZGV2aWNlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kZXZpY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vZGV2aWNlLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RldmljZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZGl2NjQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RpdjY0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9kaXY2NC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kaXY2NC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLW1hcHBpbmcuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9kbWEtbWFwcGluZy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2RtYS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Vpc2FfYnVzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9laXNhX2J1cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZWlzYV9idXMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWlzYV9idXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Vpc2FfZWVwcm9tLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9laXNhX2VlcHJvbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZWlzYV9lZXByb20uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWlzYV9lZXByb20uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbWVyZ2VuY3ktcmVzdGFydC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9lbWVyZ2VuY3ktcmVzdGFydC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbWVyZ2VuY3ktcmVzdGFydC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZXJybm8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Vycm5vLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lcnJuby5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZmIuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZiLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9mYi5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZmNudGwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9mY250bC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mY250bC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZml4bWFwLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2ZpeG1hcC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Zsb3BweS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmxvcHB5LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9mbG9wcHkuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmxvcHB5LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9mdXRleC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZnV0ZXguaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9ncmZpb2N0bC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZ3JmaW9jdGwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2dyZmlvY3RsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2dyZmlvY3RsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9oYXJkaXJxLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9oYXJkaXJxLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2hhcmR3YXJlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkd2FyZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvaGFyZHdhcmUuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaGFyZHdhcmUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2h3X2lycS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHdfaXJxLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9od19pcnEuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHdfaXJxLmgKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lkZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3MDBhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lkZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqLworCisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgUEFSSVNDIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BBUklTQ19JREVfSAorI2RlZmluZSBfX0FTTV9QQVJJU0NfSURFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogR2VuZXJpYyBJL08gYW5kIE1FTUlPIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KKworI2RlZmluZSBfX2lkZV9pbnN3CWluc3cKKyNkZWZpbmUgX19pZGVfaW5zbAlpbnNsCisjZGVmaW5lIF9faWRlX291dHN3CW91dHN3CisjZGVmaW5lIF9faWRlX291dHNsCW91dHNsCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19pZGVfbW1faW5zdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQtLSkgeworCQkqKHUxNiAqKWFkZHIgPSBfX3Jhd19yZWFkdyhwb3J0KTsKKwkJYWRkciArPSAyOworCX0KK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2lkZV9tbV9pbnNsKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKSB7CisJCSoodTMyICopYWRkciA9IF9fcmF3X3JlYWRsKHBvcnQpOworCQlhZGRyICs9IDQ7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9faWRlX21tX291dHN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKSB7CisJCV9fcmF3X3dyaXRldygqKHUxNiAqKWFkZHIsIHBvcnQpOworCQlhZGRyICs9IDI7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9faWRlX21tX291dHNsKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKSB7CisJCV9fcmF3X3dyaXRlbCgqKHUzMiAqKWFkZHIsIHBvcnQpOworCQlhZGRyICs9IDQ7CisJfQorfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fUEFSSVNDX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9pby5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pby5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW9jdGwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvY3RsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9pb2N0bC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pb2N0bC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW9jdGxzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2lvY3Rscy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2lwY2J1Zi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXBjYnVmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9pcGNidWYuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXBjYnVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lycS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lycS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pcnFfcmVncy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vaXJxX3JlZ3MuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0va2RlYnVnLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9rZGVidWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0va2RlYnVnLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mva21hcF90eXBlcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mva21hcF90eXBlcy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9sZWQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xlZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbGVkLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xlZC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbGlua2FnZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbGlua2FnZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbGlua2FnZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9saW5rYWdlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9sb2NhbC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbG9jYWwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2xvY2FsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xvY2FsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tYWNoZGVwLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9tYWNoZGVwLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21jMTQ2ODE4cnRjLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbWMxNDY4MThydGMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21ja2lubGV5LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tY2tpbmxleS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbWNraW5sZXkuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbWNraW5sZXkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21tYW4uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tYW4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL21tYW4uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW1hbi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbW11LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tbXUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL21tdS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tbXUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21tdV9jb250ZXh0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbW11X2NvbnRleHQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21tem9uZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW16b25lLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9tbXpvbmUuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW16b25lLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tb2R1bGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21vZHVsZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbW9kdWxlLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21vZHVsZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbXNnYnVmLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tc2didWYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL21zZ2J1Zi5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tc2didWYuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbXV0ZXguaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL211dGV4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL211dGV4LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL211dGV4LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhcmFtLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYXJhbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFyYW0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhcmlzYy1kZXZpY2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhcmlzYy1kZXZpY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3BhcmlzYy1kZXZpY2UuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFyaXNjLWRldmljZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFycG9ydC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFycG9ydC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGFycG9ydC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wY2kuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODRiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaApAQCAtMCwwICsxLDc2MiBAQAorI2lmbmRlZiBfUEFSSVNDX1BEQ19ICisjZGVmaW5lIF9QQVJJU0NfUERDX0gKKworLyoKKyAqCVBEQyByZXR1cm4gdmFsdWVzIC4uLgorICoJQWxsIFBEQyBjYWxscyByZXR1cm4gYSBzdWJzZXQgb2YgdGhlc2UgZXJyb3JzLiAKKyAqLworCisjZGVmaW5lIFBEQ19XQVJOCQkgIDMJLyogQ2FsbCBjb21wbGV0ZWQgd2l0aCBhIHdhcm5pbmcgKi8KKyNkZWZpbmUgUERDX1JFUV9FUlJfMQkJICAyCS8qIFNlZSBhYm92ZQkJCSAqLworI2RlZmluZSBQRENfUkVRX0VSUl8wCQkgIDEJLyogQ2FsbCB3b3VsZCBnZW5lcmF0ZSBhIHJlcXVlc3RvciBlcnJvciAqLworI2RlZmluZSBQRENfT0sJCQkgIDAJLyogQ2FsbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CSovCisjZGVmaW5lIFBEQ19CQURfUFJPQwkJIC0xCS8qIENhbGxlZCBub24tZXhpc3RlbnQgcHJvY2VkdXJlKi8KKyNkZWZpbmUgUERDX0JBRF9PUFRJT04JCSAtMgkvKiBDYWxsZWQgd2l0aCBub24tZXhpc3RlbnQgb3B0aW9uICovCisjZGVmaW5lIFBEQ19FUlJPUgkJIC0zCS8qIENhbGwgY291bGQgbm90IGNvbXBsZXRlIHdpdGhvdXQgYW4gZXJyb3IgKi8KKyNkZWZpbmUgUERDX05FX01PRAkJIC01CS8qIE1vZHVsZSBub3QgZm91bmQJCSovCisjZGVmaW5lIFBEQ19ORV9DRUxMX01PRAkJIC03CS8qIENlbGwgbW9kdWxlIG5vdCBmb3VuZAkqLworI2RlZmluZSBQRENfSU5WQUxJRF9BUkcJCS0xMAkvKiBDYWxsZWQgd2l0aCBhbiBpbnZhbGlkIGFyZ3VtZW50ICovCisjZGVmaW5lIFBEQ19CVVNfUE9XX1dBUk4JLTEyCS8qIENhbGwgY291bGQgbm90IGNvbXBsZXRlIGluIGFsbG93ZWQgcG93ZXIgYnVkZ2V0ICovCisjZGVmaW5lIFBEQ19OT1RfTkFSUk9XCQktMTcJLyogTmFycm93IG1vZGUgbm90IHN1cHBvcnRlZAkqLworCisvKgorICoJUERDIGVudHJ5IHBvaW50cy4uLgorICovCisKKyNkZWZpbmUgUERDX1BPV19GQUlMCTEJCS8qIHBlcmZvcm0gYSBwb3dlci1mYWlsCQkqLworI2RlZmluZSBQRENfUE9XX0ZBSUxfUFJFUEFSRQkwCS8qIHByZXBhcmUgZm9yIHBvd2VyZmFpbAkqLworCisjZGVmaW5lIFBEQ19DSEFTU0lTCTIJCS8qIFBEQy1jaGFzc2lzIGZ1bmN0aW9ucwkqLworI2RlZmluZSBQRENfQ0hBU1NJU19ESVNQCTAJLyogdXBkYXRlIGNoYXNzaXMgZGlzcGxheQkqLworI2RlZmluZSBQRENfQ0hBU1NJU19XQVJOCTEJLyogcmV0dXJuIGNoYXNzaXMgd2FybmluZ3MJKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRElTUFdBUk4JMgkvKiB1cGRhdGUmcmV0dXJuIGNoYXNzaXMgc3RhdHVzICovCisjZGVmaW5lIFBEQ19SRVRVUk5fQ0hBU1NJU19JTkZPIDEyOAkvKiBIVkVSU0lPTiBkZXBlbmRlbnQ6IHJldHVybiBjaGFzc2lzIExFRC9MQ0QgaW5mbyAgKi8KKworI2RlZmluZSBQRENfUElNICAgICAgICAgMyAgICAgICAgICAgICAgIC8qIEdldCBQSU0gZGF0YSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BJTV9IUE1DICAgICAgICAgICAgMCAgICAgICAvKiBUcmFuc2ZlciBIUE1DIGRhdGEgICAgICAgICAgICovCisjZGVmaW5lIFBEQ19QSU1fUkVUVVJOX1NJWkUgICAgIDEgICAgICAgLyogR2V0IE1heCBidWZmZXIgbmVlZGVkIGZvciBQSU0qLworI2RlZmluZSBQRENfUElNX0xQTUMgICAgICAgICAgICAyICAgICAgIC8qIFRyYW5zZmVyIEhQTUMgZGF0YSAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BJTV9TT0ZUX0JPT1QgICAgICAgMyAgICAgICAvKiBUcmFuc2ZlciBTb2Z0IEJvb3QgZGF0YSAgICAgICovCisjZGVmaW5lIFBEQ19QSU1fVE9DICAgICAgICAgICAgIDQgICAgICAgLyogVHJhbnNmZXIgVE9DIGRhdGEgICAgICAgICAgICAqLworCisjZGVmaW5lIFBEQ19NT0RFTAk0CQkvKiBQREMgbW9kZWwgaW5mb3JtYXRpb24gY2FsbAkqLworI2RlZmluZSBQRENfTU9ERUxfSU5GTwkJMAkvKiByZXR1cm5zIGluZm9ybWF0aW9uIAkJKi8KKyNkZWZpbmUgUERDX01PREVMX0JPT1RJRAkxCS8qIHNldCB0aGUgQk9PVF9JRAkJKi8KKyNkZWZpbmUgUERDX01PREVMX1ZFUlNJT05TCTIJLyogcmV0dXJucyBjcHUtaW50ZXJuYWwgdmVyc2lvbnMqLworI2RlZmluZSBQRENfTU9ERUxfU1lTTU9ERUwJMwkvKiByZXR1cm4gc3lzdGVtIG1vZGVsIGluZm8JKi8KKyNkZWZpbmUgUERDX01PREVMX0VOU1BFQwk0CS8qIGVuYWJsZSBzcGVjaWZpYyBvcHRpb24JKi8KKyNkZWZpbmUgUERDX01PREVMX0RJU1BFQwk1CS8qIGRpc2FibGUgc3BlY2lmaWMgb3B0aW9uCSovCisjZGVmaW5lIFBEQ19NT0RFTF9DUFVfSUQJNgkvKiByZXR1cm5zIGNwdS1pZCAob25seSBuZXdlciBtYWNoaW5lcyEpICovCisjZGVmaW5lIFBEQ19NT0RFTF9DQVBBQklMSVRJRVMJNwkvKiByZXR1cm5zIE9TMzIvT1M2NC1mbGFncwkqLworLyogVmFsdWVzIGZvciBQRENfTU9ERUxfQ0FQQUJJTElUSUVTIG5vbi1lcXVpdmFsZW50IHZpcnR1YWwgYWxpYXNpbmcgc3VwcG9ydCAqLworI2RlZmluZSAgUERDX01PREVMX0lPUERJUl9GREMJCSgxIDw8IDIpCisjZGVmaW5lICBQRENfTU9ERUxfTlZBX01BU0sJCSgzIDw8IDQpCisjZGVmaW5lICBQRENfTU9ERUxfTlZBX1NVUFBPUlRFRAkoMCA8PCA0KQorI2RlZmluZSAgUERDX01PREVMX05WQV9TTE9XCQkoMSA8PCA0KQorI2RlZmluZSAgUERDX01PREVMX05WQV9VTlNVUFBPUlRFRAkoMyA8PCA0KQorI2RlZmluZSBQRENfTU9ERUxfR0VUX0JPT1RfX09QCTgJLyogcmV0dXJucyBib290IHRlc3Qgb3B0aW9ucwkqLworI2RlZmluZSBQRENfTU9ERUxfU0VUX0JPT1RfX09QCTkJLyogc2V0IGJvb3QgdGVzdCBvcHRpb25zCSovCisKKyNkZWZpbmUgUEE4OV9JTlNUUlVDVElPTl9TRVQJMHg0CS8qIGNhcGF0aWJpbGllcyByZXR1cm5lZAkqLworI2RlZmluZSBQQTkwX0lOU1RSVUNUSU9OX1NFVAkweDgKKworI2RlZmluZSBQRENfQ0FDSEUJNQkJLyogcmV0dXJuL3NldCBjYWNoZSAoJiBUTEIpIGluZm8qLworI2RlZmluZSBQRENfQ0FDSEVfSU5GTwkJMAkvKiByZXR1cm5zIGluZm9ybWF0aW9uIAkJKi8KKyNkZWZpbmUgUERDX0NBQ0hFX1NFVF9DT0gJMQkvKiBzZXQgY29oZXJlbmNlIHN0YXRlCQkqLworI2RlZmluZSBQRENfQ0FDSEVfUkVUX1NQSUQJMgkvKiByZXR1cm5zIHNwYWNlLUlEIGJpdHMJKi8KKworI2RlZmluZSBQRENfSFBBCQk2CQkvKiByZXR1cm4gSFBBIG9mIHByb2Nlc3NvcgkqLworI2RlZmluZSBQRENfSFBBX1BST0NFU1NPUgkwCisjZGVmaW5lIFBEQ19IUEFfTU9EVUxFUwkJMQorCisjZGVmaW5lIFBEQ19DT1BST0MJNwkJLyogQ28tUHJvY2Vzc29yICh1c3VhbGx5IEZQIHVuaXQocykpICovCisjZGVmaW5lIFBEQ19DT1BST0NfQ0ZHCQkwCS8qIENvLVByb2Nlc3NvciBDZmcgKEZQIHVuaXQocykgZW5hYmxlZD8pICovCisKKyNkZWZpbmUgUERDX0lPREMJOAkJLyogdGFsayB0byBJT0RDCQkJKi8KKyNkZWZpbmUgUERDX0lPRENfUkVBRAkJMAkvKiByZWFkIElPREMgZW50cnkgcG9pbnQJKi8KKy8qICAgICAgUERDX0lPRENfUklfCQkJICogSU5ERVggcGFyYW1ldGVyIG9mIFBEQ19JT0RDX1JFQUQgKi8KKyNkZWZpbmUgUERDX0lPRENfUklfREFUQV9CWVRFUwkwCS8qIElPREMgRGF0YSBCeXRlcwkJKi8KKy8qCQkJCTEsIDIJICAgb2Jzb2xldGUgLSBIVkVSU0lPTiBkZXBlbmRlbnQqLworI2RlZmluZSBQRENfSU9EQ19SSV9JTklUCTMJLyogSW5pdGlhbGl6ZSBtb2R1bGUJCSovCisjZGVmaW5lIFBEQ19JT0RDX1JJX0lPCQk0CS8qIE1vZHVsZSBpbnB1dC9vdXRwdXQJCSovCisjZGVmaW5lIFBEQ19JT0RDX1JJX1NQQQkJNQkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLworI2RlZmluZSBQRENfSU9EQ19SSV9DT05GSUcJNgkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLworLyoJCQkJNwkgIG9ic29sZXRlIC0gSFZFUlNJT04gZGVwZW5kZW50ICovCisjZGVmaW5lIFBEQ19JT0RDX1JJX1RFU1QJOAkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLworI2RlZmluZSBQRENfSU9EQ19SSV9UTEIJCTkJLyogTW9kdWxlIGlucHV0L291dHB1dAkJKi8KKyNkZWZpbmUgUERDX0lPRENfTklOSVQJCTIJLyogbm9uLWRlc3RydWN0aXZlIGluaXQJCSovCisjZGVmaW5lIFBEQ19JT0RDX0RJTklUCQkzCS8qIGRlc3RydWN0aXZlIGluaXQJCSovCisjZGVmaW5lIFBEQ19JT0RDX01FTUVSUgkJNAkvKiBjaGVjayBmb3IgbWVtb3J5IGVycm9ycwkqLworI2RlZmluZSBQRENfSU9EQ19JTkRFWF9EQVRBCTAJLyogZ2V0IGZpcnN0IDE2IGJ5dGVzIGZyb20gbW9kIElPREMgKi8KKyNkZWZpbmUgUERDX0lPRENfQlVTX0VSUk9SCS00CS8qIGJ1cyBlcnJvciByZXR1cm4gdmFsdWUJKi8KKyNkZWZpbmUgUERDX0lPRENfSU5WQUxJRF9JTkRFWAktNQkvKiBpbnZhbGlkIGluZGV4IHJldHVybiB2YWx1ZQkqLworI2RlZmluZSBQRENfSU9EQ19DT1VOVAkJLTYJLyogY291bnQgaXMgdG9vIHNtYWxsCQkqLworCisjZGVmaW5lIFBEQ19UT0QJCTkJCS8qIHRpbWUtb2YtZGF5IGNsb2NrIChUT0QpCSovCisjZGVmaW5lIFBEQ19UT0RfUkVBRAkJMAkvKiByZWFkIFRPRAkJCSovCisjZGVmaW5lIFBEQ19UT0RfV1JJVEUJCTEJLyogd3JpdGUgVE9ECQkJKi8KKworCisjZGVmaW5lIFBEQ19TVEFCTEUJMTAJCS8qIHN0YWJsZSBzdG9yYWdlIChzcHJvY2tldHMpCSovCisjZGVmaW5lIFBEQ19TVEFCTEVfUkVBRAkJMAorI2RlZmluZSBQRENfU1RBQkxFX1dSSVRFCTEKKyNkZWZpbmUgUERDX1NUQUJMRV9SRVRVUk5fU0laRQkyCisjZGVmaW5lIFBEQ19TVEFCTEVfVkVSSUZZX0NPTlRFTlRTIDMKKyNkZWZpbmUgUERDX1NUQUJMRV9JTklUSUFMSVpFCTQKKworI2RlZmluZSBQRENfTlZPTEFUSUxFCTExCQkvKiBvZnRlbiBub3QgaW1wbGVtZW50ZWQJKi8KKworI2RlZmluZSBQRENfQUREX1ZBTElECTEyCQkvKiBNZW1vcnkgdmFsaWRhdGlvbiBQREMgY2FsbAkqLworI2RlZmluZSBQRENfQUREX1ZBTElEX1ZFUklGWQkwCS8qIE1ha2UgUERDX0FERF9WQUxJRCB2ZXJpZnkgcmVnaW9uICovCisKKyNkZWZpbmUgUERDX0lOU1RSCTE1CQkvKiBnZXQgaW5zdHIgdG8gaW52b2tlIFBEQ0VfQ0hFQ0soKSAqLworCisjZGVmaW5lIFBEQ19QUk9DCTE2CQkvKiAoc3Byb2NrZXRzKQkJCSovCisKKyNkZWZpbmUgUERDX0NPTkZJRwkxNgkJLyogKHNwcm9ja2V0cykJCQkqLworI2RlZmluZSBQRENfQ09ORklHX0RFQ09ORklHCTAKKyNkZWZpbmUgUERDX0NPTkZJR19EUkVDT05GSUcJMQorI2RlZmluZSBQRENfQ09ORklHX0RSRVRVUk5fQ09ORklHIDIKKworI2RlZmluZSBQRENfQkxPQ0tfVExCCTE4CQkvKiBtYW5hZ2UgaGFyZHdhcmUgYmxvY2stVExCCSovCisjZGVmaW5lIFBEQ19CVExCX0lORk8JCTAJLyogcmV0dXJucyBwYXJhbWV0ZXIgCQkqLworI2RlZmluZSBQRENfQlRMQl9JTlNFUlQJCTEJLyogaW5zZXJ0IEJUTEIgZW50cnkJCSovCisjZGVmaW5lIFBEQ19CVExCX1BVUkdFCQkyCS8qIHB1cmdlIEJUTEIgZW50cmllcyAJCSovCisjZGVmaW5lIFBEQ19CVExCX1BVUkdFX0FMTAkzCS8qIHB1cmdlIGFsbCBCVExCIGVudHJpZXMgCSovCisKKyNkZWZpbmUgUERDX1RMQgkJMTkJCS8qIG1hbmFnZSBoYXJkd2FyZSBUTEIgbWlzcyBoYW5kbGluZyAqLworI2RlZmluZSBQRENfVExCX0lORk8JCTAJLyogcmV0dXJucyBwYXJhbWV0ZXIgCQkqLworI2RlZmluZSBQRENfVExCX1NFVFVQCQkxCS8qIHNldCB1cCBtaXNzIGhhbmRsaW5nIAkqLworCisjZGVmaW5lIFBEQ19NRU0JCTIwCQkvKiBNYW5hZ2UgbWVtb3J5CQkqLworI2RlZmluZSBQRENfTUVNX01FTUlORk8JCTAKKyNkZWZpbmUgUERDX01FTV9BRERfUEFHRQkxCisjZGVmaW5lIFBEQ19NRU1fQ0xFQVJfUERUCTIKKyNkZWZpbmUgUERDX01FTV9SRUFEX1BEVAkzCisjZGVmaW5lIFBEQ19NRU1fUkVTRVRfQ0xFQVIJNAorI2RlZmluZSBQRENfTUVNX0dPT0RNRU0JCTUKKyNkZWZpbmUgUERDX01FTV9UQUJMRQkJMTI4CS8qIE5vbiBjb250aWcgbWVtIG1hcCAoc3Byb2NrZXRzKSAqLworI2RlZmluZSBQRENfTUVNX1JFVFVSTl9BRERSRVNTX1RBQkxFCVBEQ19NRU1fVEFCTEUKKyNkZWZpbmUgUERDX01FTV9HRVRfTUVNT1JZX1NZU1RFTV9UQUJMRVNfU0laRQkxMzEKKyNkZWZpbmUgUERDX01FTV9HRVRfTUVNT1JZX1NZU1RFTV9UQUJMRVMJMTMyCisjZGVmaW5lIFBEQ19NRU1fR0VUX1BIWVNJQ0FMX0xPQ0FUSU9OX0ZST01fTUVNT1JZX0FERFJFU1MgMTMzCisKKyNkZWZpbmUgUERDX01FTV9SRVRfU0JFX1JFUExBQ0VECTUJLyogUERDX01FTSByZXR1cm4gdmFsdWVzICovCisjZGVmaW5lIFBEQ19NRU1fUkVUX0RVUExJQ0FURV9FTlRSWQk0CisjZGVmaW5lIFBEQ19NRU1fUkVUX0JVRl9TSVpFX1NNQUxMCTEKKyNkZWZpbmUgUERDX01FTV9SRVRfUERUX0ZVTEwJCS0xMQorI2RlZmluZSBQRENfTUVNX1JFVF9JTlZBTElEX1BIWVNJQ0FMX0xPQ0FUSU9OIH4wVUxMCisKKyNkZWZpbmUgUERDX1BTVwkJMjEJCS8qIEdldC9TZXQgZGVmYXVsdCBTeXN0ZW0gTWFzayAgKi8KKyNkZWZpbmUgUERDX1BTV19NQVNLCQkwCS8qIFJldHVybiBtYXNrICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BTV19HRVRfREVGQVVMVFMJMQkvKiBSZXR1cm4gZGVmYXVsdHMgICAgICAgICAgICAgICovCisjZGVmaW5lIFBEQ19QU1dfU0VUX0RFRkFVTFRTCTIJLyogU2V0IGRlZmF1bHQgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQRENfUFNXX0VORElBTl9CSVQJMQkvKiBzZXQgZm9yIGJpZyBlbmRpYW4gICAgICAgICAgICovCisjZGVmaW5lIFBEQ19QU1dfV0lERV9CSVQJMgkvKiBzZXQgZm9yIHdpZGUgbW9kZSAgICAgICAgICAgICovIAorCisjZGVmaW5lIFBEQ19TWVNURU1fTUFQCTIyCQkvKiBmaW5kIHN5c3RlbSBtb2R1bGVzCQkqLworI2RlZmluZSBQRENfRklORF9NT0RVTEUgCTAKKyNkZWZpbmUgUERDX0ZJTkRfQUREUkVTUwkxCisjZGVmaW5lIFBEQ19UUkFOU0xBVEVfUEFUSAkyCisKKyNkZWZpbmUgUERDX1NPRlRfUE9XRVIJMjMJCS8qIHNvZnQgcG93ZXIgc3dpdGNoCQkqLworI2RlZmluZSBQRENfU09GVF9QT1dFUl9JTkZPCTAJLyogcmV0dXJuIGluZm8gYWJvdXQgdGhlIHNvZnQgcG93ZXIgc3dpdGNoICovCisjZGVmaW5lIFBEQ19TT0ZUX1BPV0VSX0VOQUJMRQkxCS8qIGVuYWJsZS9kaXNhYmxlIHNvZnQgcG93ZXIgc3dpdGNoICovCisKKworLyogSFZFUlNJT04gZGVwZW5kZW50ICovCisKKy8qIFRoZSBQRENfTUVNX01BUCBjYWxscyAqLworI2RlZmluZSBQRENfTUVNX01BUAkxMjgJCS8qIG9uIHM3MDA6IHJldHVybiBwYWdlIGluZm8JKi8KKyNkZWZpbmUgUERDX01FTV9NQVBfSFBBCQkwCS8qIHJldHVybnMgaHBhIG9mIGEgbW9kdWxlCSovCisKKyNkZWZpbmUgUERDX0VFUFJPTQkxMjkJCS8qIEVFUFJPTSBhY2Nlc3MJCSovCisjZGVmaW5lIFBEQ19FRVBST01fUkVBRF9XT1JECTAKKyNkZWZpbmUgUERDX0VFUFJPTV9XUklURV9XT1JECTEKKyNkZWZpbmUgUERDX0VFUFJPTV9SRUFEX0JZVEUJMgorI2RlZmluZSBQRENfRUVQUk9NX1dSSVRFX0JZVEUJMworI2RlZmluZSBQRENfRUVQUk9NX0VFUFJPTV9QQVNTV09SRCAtMTAwMAorCisjZGVmaW5lIFBEQ19OVk0JCTEzMAkJLyogTlZNIChub24tdm9sYXRpbGUgbWVtb3J5KSBhY2Nlc3MgKi8KKyNkZWZpbmUgUERDX05WTV9SRUFEX1dPUkQJMAorI2RlZmluZSBQRENfTlZNX1dSSVRFX1dPUkQJMQorI2RlZmluZSBQRENfTlZNX1JFQURfQllURQkyCisjZGVmaW5lIFBEQ19OVk1fV1JJVEVfQllURQkzCisKKyNkZWZpbmUgUERDX1NFRURfRVJST1IJMTMyCQkvKiAoc3Byb2NrZXRzKQkJCSovCisKKyNkZWZpbmUgUERDX0lPCQkxMzUJCS8qIGxvZyBlcnJvciBpbmZvLCByZXNldCBJTyBzeXN0ZW0gKi8KKyNkZWZpbmUgUERDX0lPX1JFQURfQU5EX0NMRUFSX0VSUk9SUwkwCisjZGVmaW5lIFBEQ19JT19SRVNFVAkJCTEKKyNkZWZpbmUgUERDX0lPX1JFU0VUX0RFVklDRVMJCTIKKy8qIHNldHMgYml0cyA2JjcgKGxpdHRsZSBlbmRpYW4pIG9mIHRoZSBIY0NvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUERDX0lPX1VTQl9TVVNQRU5ECTB4QzAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBQRENfSU9fRUVQUk9NX0lPX0VSUl9UQUJMRV9GVUxMCS01CS8qIHJldHVybiB2YWx1ZSAqLworI2RlZmluZSBQRENfSU9fTk9fU1VTUEVORAkJLTYJLyogcmV0dXJuIHZhbHVlICovCisKKyNkZWZpbmUgUERDX0JST0FEQ0FTVF9SRVNFVCAxMzYJCS8qIHJlc2V0IGFsbCBwcm9jZXNzb3JzCQkqLworI2RlZmluZSBQRENfRE9fUkVTRVQJCTAJLyogb3B0aW9uOiBwZXJmb3JtIGEgYnJvYWRjYXN0IHJlc2V0ICovCisjZGVmaW5lIFBEQ19ET19GSVJNX1RFU1RfUkVTRVQJMQkvKiBEbyBicm9hZGNhc3QgcmVzZXQgd2l0aCBiaXRtYXAgKi8KKyNkZWZpbmUgUERDX0JSX1JFQ09ORklHVVJBVElPTgkyCS8qIHJlc2V0IHcvcmVjb25maWd1cmF0aW9uCSovCisjZGVmaW5lIFBEQ19GSVJNX1RFU1RfTUFHSUMJMHhhYjllYzM2ZlVMICAgIC8qIGZvciB0aGlzIHJlYm9vdCBvbmx5CSovCisKKyNkZWZpbmUgUERDX0xBTl9TVEFUSU9OX0lEIDEzOAkJLyogSHZlcnNpb24gZGVwZW5kZW50IG1lY2hhbmlzbSBmb3IgKi8KKyNkZWZpbmUgUERDX0xBTl9TVEFUSU9OX0lEX1JFQUQJMAkvKiBnZXR0aW5nIHRoZSBsYW4gc3RhdGlvbiBhZGRyZXNzICAqLworCisjZGVmaW5lCVBEQ19MQU5fU1RBVElPTl9JRF9TSVpFCTYKKworI2RlZmluZSBQRENfQ0hFQ0tfUkFOR0VTIDEzOQkJLyogKHNwcm9ja2V0cykJCQkqLworCisjZGVmaW5lIFBEQ19OVl9TRUNUSU9OUwkxNDEJCS8qIChzcHJvY2tldHMpCQkJKi8KKworI2RlZmluZSBQRENfUEVSRk9STUFOQ0UJMTQyCQkvKiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCSovCisKKyNkZWZpbmUgUERDX1NZU1RFTV9JTkZPCTE0MwkJLyogc3lzdGVtIGluZm9ybWF0aW9uCQkqLworI2RlZmluZSBQRENfU1lTSU5GT19SRVRVUk5fSU5GT19TSVpFCTAKKyNkZWZpbmUgUERDX1NZU0lORk9fUlJFVFVSTl9TWVNfSU5GTwkxCisjZGVmaW5lIFBEQ19TWVNJTkZPX1JSRVRVUk5fRVJST1JTCTIKKyNkZWZpbmUgUERDX1NZU0lORk9fUlJFVFVSTl9XQVJOSU5HUwkzCisjZGVmaW5lIFBEQ19TWVNJTkZPX1JFVFVSTl9SRVZJU0lPTlMJNAorI2RlZmluZSBQRENfU1lTSU5GT19SUkVUVVJOX0RJQUdOT1NFCTUKKyNkZWZpbmUgUERDX1NZU0lORk9fUlJFVFVSTl9IVl9ESUFHTk9TRQkxMDA1CisKKyNkZWZpbmUgUERDX1JEUgkJMTQ0CQkvKiAoc3Byb2NrZXRzKQkJCSovCisjZGVmaW5lIFBEQ19SRFJfUkVBRF9CVUZGRVIJMAorI2RlZmluZSBQRENfUkRSX1JFQURfU0lOR0xFCTEKKyNkZWZpbmUgUERDX1JEUl9XUklURV9TSU5HTEUJMgorCisjZGVmaW5lIFBEQ19JTlRSSUdVRQkxNDUgCQkvKiAoc3Byb2NrZXRzKQkJCSovCisjZGVmaW5lIFBEQ19JTlRSSUdVRV9XUklURV9CVUZGRVIgCSAwCisjZGVmaW5lIFBEQ19JTlRSSUdVRV9HRVRfU0NSQVRDSF9CVUZTSVpFIDEKKyNkZWZpbmUgUERDX0lOVFJJR1VFX1NUQVJUX0NQVV9DT1VOVEVSUwkgMgorI2RlZmluZSBQRENfSU5UUklHVUVfU1RPUF9DUFVfQ09VTlRFUlMJIDMKKworI2RlZmluZSBQRENfU1RJCQkxNDYgCQkvKiBTVEkgYWNjZXNzCQkJKi8KKy8qIHNhbWUgYXMgUERDX1BDSV9YWFggdmFsdWVzIChzZWUgYmVsb3cpICovCisKKy8qIExlZ2FjeSBQREMgZGVmaW5pdGlvbnMgZm9yIHNhbWUgc3R1ZmYgKi8KKyNkZWZpbmUgUERDX1BDSV9JTkRFWAkxNDcKKyNkZWZpbmUgUERDX1BDSV9JTlRFUkZBQ0VfSU5GTwkJMAorI2RlZmluZSBQRENfUENJX1NMT1RfSU5GTwkJMQorI2RlZmluZSBQRENfUENJX0lORkxJR0hUX0JZVEVTCQkyCisjZGVmaW5lIFBEQ19QQ0lfUkVBRF9DT05GSUcJCTMKKyNkZWZpbmUgUERDX1BDSV9XUklURV9DT05GSUcJCTQKKyNkZWZpbmUgUERDX1BDSV9SRUFEX1BDSV9JTwkJNQorI2RlZmluZSBQRENfUENJX1dSSVRFX1BDSV9JTwkJNgorI2RlZmluZSBQRENfUENJX1JFQURfQ09ORklHX0RFTEFZCTcKKyNkZWZpbmUgUERDX1BDSV9VUERBVEVfQ09ORklHX0RFTEFZCTgKKyNkZWZpbmUgUERDX1BDSV9QQ0lfUEFUSF9UT19QQ0lfSFBBCTkKKyNkZWZpbmUgUERDX1BDSV9QQ0lfSFBBX1RPX1BDSV9QQVRICTEwCisjZGVmaW5lIFBEQ19QQ0lfUENJX1BBVEhfVE9fUENJX0JVUwkxMQorI2RlZmluZSBQRENfUENJX1BDSV9SRVNFUlZFRAkJMTIKKyNkZWZpbmUgUERDX1BDSV9QQ0lfSU5UX1JPVVRFX1NJWkUJMTMKKyNkZWZpbmUgUERDX1BDSV9HRVRfSU5UX1RCTF9TSVpFCVBEQ19QQ0lfUENJX0lOVF9ST1VURV9TSVpFCisjZGVmaW5lIFBEQ19QQ0lfUENJX0lOVF9ST1VURQkJMTQKKyNkZWZpbmUgUERDX1BDSV9HRVRfSU5UX1RCTAkJUERDX1BDSV9QQ0lfSU5UX1JPVVRFIAorI2RlZmluZSBQRENfUENJX1JFQURfTU9OX1RZUEUJCTE1CisjZGVmaW5lIFBEQ19QQ0lfV1JJVEVfTU9OX1RZUEUJCTE2CisKKworLyogR2V0IFNDU0kgSW50ZXJmYWNlIENhcmQgaW5mbzogIFNEVFIsIFNDU0kgSUQsIG1vZGUgKFNFIHZzIExWRCkgKi8KKyNkZWZpbmUgUERDX0lOSVRJQVRPUgkxNjMKKyNkZWZpbmUgUERDX0dFVF9JTklUSUFUT1IJMAorI2RlZmluZSBQRENfU0VUX0lOSVRJQVRPUgkxCisjZGVmaW5lIFBEQ19ERUxFVEVfSU5JVElBVE9SCTIKKyNkZWZpbmUgUERDX1JFVFVSTl9UQUJMRV9TSVpFCTMKKyNkZWZpbmUgUERDX1JFVFVSTl9UQUJMRQk0CisKKyNkZWZpbmUgUERDX0xJTksJMTY1IAkJLyogKHNwcm9ja2V0cykJCQkqLworI2RlZmluZSBQRENfTElOS19QQ0lfRU5UUllfUE9JTlRTCTAgIC8qIGxpc3QgKEFyZzEpID0gMCAqLworI2RlZmluZSBQRENfTElOS19VU0JfRU5UUllfUE9JTlRTCTEgIC8qIGxpc3QgKEFyZzEpID0gMSAqLworCisvKiBjbF9jbGFzcworICogcGFnZSAzLTMzIG9mIElPLUZpcm13YXJlIEFSUworICogSU9EQyBFTlRSWV9JTklUKFNlYXJjaCBmaXJzdCkgUkVUWzFdCisgKi8KKyNkZWZpbmUJQ0xfTlVMTAkJMAkvKiBpbnZhbGlkICovCisjZGVmaW5lCUNMX1JBTkRPTQkxCS8qIHJhbmRvbSBhY2Nlc3MgKGFzIGRpc2spICovCisjZGVmaW5lCUNMX1NFUVUJCTIJLyogc2VxdWVudGlhbCBhY2Nlc3MgKGFzIHRhcGUpICovCisjZGVmaW5lCUNMX0RVUExFWAk3CS8qIGZ1bGwtZHVwbGV4IHBvaW50LXRvLXBvaW50IChSUy0yMzIsIE5ldCkgKi8KKyNkZWZpbmUJQ0xfS0VZQkQJOAkvKiBoYWxmLWR1cGxleCBjb25zb2xlIChISUwgS2V5Ym9hcmQpICovCisjZGVmaW5lCUNMX0RJU1BMCTkJLyogaGFsZi1kdXBsZXggY29uc29sZSAoZGlzcGxheSkgKi8KKyNkZWZpbmUJQ0xfRkMJCTEwCS8qIEZpYmVyQ2hhbm5lbCBhY2Nlc3MgbWVkaWEgKi8KKworLyogSU9EQyBFTlRSWV9JTklUKCkgKi8KKyNkZWZpbmUgRU5UUllfSU5JVF9TUkNIX0ZSU1QJMgorI2RlZmluZSBFTlRSWV9JTklUX1NSQ0hfTkVYVAkzCisjZGVmaW5lIEVOVFJZX0lOSVRfTU9EX0RFVgk0CisjZGVmaW5lIEVOVFJZX0lOSVRfREVWCQk1CisjZGVmaW5lIEVOVFJZX0lOSVRfTU9ECQk2CisjZGVmaW5lIEVOVFJZX0lOSVRfTVNHCQk5CisKKy8qIElPREMgRU5UUllfSU8oKSAqLworI2RlZmluZSBFTlRSWV9JT19CT09USU4JCTAKKyNkZWZpbmUgRU5UUllfSU9fQk9PVE9VVAkxCisjZGVmaW5lIEVOVFJZX0lPX0NJTgkJMgorI2RlZmluZSBFTlRSWV9JT19DT1VUCQkzCisjZGVmaW5lIEVOVFJZX0lPX0NMT1NFCQk0CisjZGVmaW5lIEVOVFJZX0lPX0dFVE1TRwkJOQorI2RlZmluZSBFTlRSWV9JT19CQkxPQ0tfSU4JMTYKKyNkZWZpbmUgRU5UUllfSU9fQkJMT0NLX09VVAkxNworCisvKiBJT0RDIEVOVFJZX1NQQSgpICovCisKKy8qIElPREMgRU5UUllfQ09ORklHKCkgKi8KKworLyogSU9EQyBFTlRSWV9URVNUKCkgKi8KKworLyogSU9EQyBFTlRSWV9UTEIoKSAqLworCisvKiBjb25zdGFudHMgZm9yIE9TIChOVk0uLi4pICovCisjZGVmaW5lIE9TX0lEX05PTkUJCTAJLyogVW5kZWZpbmVkIE9TIElECSovCisjZGVmaW5lIE9TX0lEX0hQVVgJCTEJLyogSFAtVVggT1MJCSovCisjZGVmaW5lIE9TX0lEX01QRVhMCQkyCS8qIE1QRSBYTCBPUwkJKi8KKyNkZWZpbmUgT1NfSURfT1NGCQkzCS8qIE9TRiBPUwkJKi8KKyNkZWZpbmUgT1NfSURfSFBSVAkJNAkvKiBIUC1SVCBPUwkJKi8KKyNkZWZpbmUgT1NfSURfTk9WRUwJCTUJLyogTk9WRUxMIE9TCQkqLworI2RlZmluZSBPU19JRF9MSU5VWAkJNgkvKiBMaW51eAkJKi8KKworCisvKiBjb25zdGFudHMgZm9yIFBEQ19DSEFTU0lTICovCisjZGVmaW5lIE9TVEFUX09GRgkJMAorI2RlZmluZSBPU1RBVF9GTFQJCTEgCisjZGVmaW5lIE9TVEFUX1RFU1QJCTIKKyNkZWZpbmUgT1NUQVRfSU5JVAkJMworI2RlZmluZSBPU1RBVF9TSFVUCQk0CisjZGVmaW5lIE9TVEFUX1dBUk4JCTUKKyNkZWZpbmUgT1NUQVRfUlVOCQk2CisjZGVmaW5lIE9TVEFUX09OCQk3CisKKy8qIFBhZ2UgWmVybyBjb25zdGFudCBvZmZzZXRzIHVzZWQgYnkgdGhlIEhQTUMgaGFuZGxlciAqLworI2RlZmluZSBCT09UX0NPTlNPTEVfSFBBX09GRlNFVCAgMHgzYzAKKyNkZWZpbmUgQk9PVF9DT05TT0xFX1NQQV9PRkZTRVQgIDB4M2M0CisjZGVmaW5lIEJPT1RfQ09OU09MRV9QQVRIX09GRlNFVCAweDNhOAorCisvKiBzaXplIG9mIHRoZSBwZGNfcmVzdWx0IGJ1ZmZlciBmb3IgZmlybXdhcmUuYyAqLworI2RlZmluZSBOVU1fUERDX1JFU1VMVAkzMgorCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2V4dGVybiBpbnQgcGRjX3R5cGU7CisKKy8qIFZhbHVlcyBmb3IgcGRjX3R5cGUgKi8KKyNkZWZpbmUgUERDX1RZUEVfSUxMRUdBTAktMQorI2RlZmluZSBQRENfVFlQRV9QQVQJCSAwIC8qIDY0LWJpdCBQQVQtUERDICovCisjZGVmaW5lIFBEQ19UWVBFX1NZU1RFTV9NQVAJIDEgLyogMzItYml0LCBidXQgc3VwcG9ydHMgUERDX1NZU1RFTV9NQVAgKi8KKyNkZWZpbmUgUERDX1RZUEVfU05BS0UJCSAyIC8qIERvZXNuJ3Qgc3VwcG9ydCBTWVNURU1fTUFQICovCisKK3N0cnVjdCBwZGNfY2hhc3Npc19pbmZvIHsgICAgICAgLyogZm9yIFBEQ19DSEFTU0lTX0lORk8gKi8KKwl1bnNpZ25lZCBsb25nIGFjdGNudDsgICAvKiBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkICovCisJdW5zaWduZWQgbG9uZyBtYXhjbnQ7ICAgLyogbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBiZSByZXR1cm5lZCAqLworfTsKKworc3RydWN0IHBkY19jb3Byb2NfY2ZnIHsgICAgICAgICAvKiBmb3IgUERDX0NPUFJPQ19DRkcgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBjY3JfZnVuY3Rpb25hbDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjY3JfcHJlc2VudDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByZXZpc2lvbjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtb2RlbDsKK307CisKK3N0cnVjdCBwZGNfbW9kZWwgewkJLyogZm9yIFBEQ19NT0RFTCAqLworCXVuc2lnbmVkIGxvbmcgaHZlcnNpb247CisJdW5zaWduZWQgbG9uZyBzdmVyc2lvbjsKKwl1bnNpZ25lZCBsb25nIGh3X2lkOworCXVuc2lnbmVkIGxvbmcgYm9vdF9pZDsKKwl1bnNpZ25lZCBsb25nIHN3X2lkOworCXVuc2lnbmVkIGxvbmcgc3dfY2FwOworCXVuc2lnbmVkIGxvbmcgYXJjaF9yZXY7CisJdW5zaWduZWQgbG9uZyBwb3Rfa2V5OworCXVuc2lnbmVkIGxvbmcgY3Vycl9rZXk7Cit9OworCitzdHJ1Y3QgcGRjX2NhY2hlX2NmIHsJCS8qIGZvciBQRENfQ0FDSEUgIChJL0QtY2FjaGVzKSAqLworICAgIHVuc2lnbmVkIGxvbmcKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkJY2NfcGFkVzozMiwKKyNlbmRpZgorCQljY19hbGlhczogNCwJLyogYWxpYXMgYm91bmRhcmllcyBmb3IgdmlydHVhbCBhZGRyZXNzZXMgICAqLworCQljY19ibG9jazogNCwJLyogdG8gZGV0ZXJtaW5lIG1vc3QgZWZmaWNpZW50IHN0cmlkZSAqLworCQljY19saW5lCTogMywJLyogbWF4aW11bSBhbW91bnQgd3JpdHRlbiBiYWNrIGFzIGEgcmVzdWx0IG9mIHN0b3JlIChtdWx0aXBsZSBvZiAxNiBieXRlcykgKi8KKwkJY2Nfc2hpZnQ6IDIsCS8qIGhvdyBtdWNoIHRvIHNoaWZ0IGNjX2Jsb2NrIGxlZnQgKi8KKwkJY2Nfd3QJOiAxLAkvKiAwID0gV1QtRGNhY2hlLCAxID0gV0ItRGNhY2hlICovCisJCWNjX3NoCTogMiwJLyogMCA9IHNlcGFyYXRlIEkvRC1jYWNoZSwgZWxzZSBzaGFyZWQgSS9ELWNhY2hlICovCisJCWNjX2NzdCAgOiAzLAkvKiAwID0gaW5jb2hlcmVudCBELWNhY2hlLCAxPWNvaGVyZW50IEQtY2FjaGUgKi8KKwkJY2NfcGFkMSA6IDEwLAkvKiByZXNlcnZlZCAqLworCQljY19odiAgIDogMzsJLyogaHZlcnNpb24gZGVwZW5kZW50ICovCit9OworCitzdHJ1Y3QgcGRjX3RsYl9jZiB7CQkvKiBmb3IgUERDX0NBQ0hFIChJL0QtVExCJ3MpICovCisgICAgdW5zaWduZWQgbG9uZyB0Y19wYWQwOjEyLAkvKiByZXNlcnZlZCAqLworI2lmZGVmIENPTkZJR182NEJJVAorCQl0Y19wYWRXOjMyLAorI2VuZGlmCisJCXRjX3NoCTogMiwJLyogMCA9IHNlcGFyYXRlIEkvRC1UTEIsIGVsc2Ugc2hhcmVkIEkvRC1UTEIgKi8KKwkJdGNfaHYgICA6IDEsCS8qIEhWICovCisJCXRjX3BhZ2UgOiAxLAkvKiAwID0gMksgcGFnZS1zaXplLW1hY2hpbmUsIDEgPSA0ayBwYWdlIHNpemUgKi8KKwkJdGNfY3N0ICA6IDMsCS8qIDAgPSBpbmNvaGVyZW50IG9wZXJhdGlvbnMsIGVsc2UgY29oZXJlbnQgb3BlcmF0aW9ucyAqLworCQl0Y19haWQgIDogNSwJLyogSVRMQjogd2lkdGggb2YgYWNjZXNzIGlkcyBvZiBwcm9jZXNzb3IgKGVuY29kZWQhKSAqLworCQl0Y19wYWQxIDogODsJLyogSVRMQjogd2lkdGggb2Ygc3BhY2UtcmVnaXN0ZXJzIChlbmNvZGVkKSAqLworfTsKKworc3RydWN0IHBkY19jYWNoZV9pbmZvIHsJCS8qIG1haW4tUERDX0NBQ0hFLXN0cnVjdHVyZSAoY2FjaGVzICYgVExCJ3MpICovCisJLyogSS1jYWNoZSAqLworCXVuc2lnbmVkIGxvbmcJaWNfc2l6ZTsJLyogc2l6ZSBpbiBieXRlcyAqLworCXN0cnVjdCBwZGNfY2FjaGVfY2YgaWNfY29uZjsJLyogY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJaWNfYmFzZTsJLyogYmFzZS1hZGRyICovCisJdW5zaWduZWQgbG9uZwlpY19zdHJpZGU7CisJdW5zaWduZWQgbG9uZwlpY19jb3VudDsKKwl1bnNpZ25lZCBsb25nCWljX2xvb3A7CisJLyogRC1jYWNoZSAqLworCXVuc2lnbmVkIGxvbmcJZGNfc2l6ZTsJLyogc2l6ZSBpbiBieXRlcyAqLworCXN0cnVjdCBwZGNfY2FjaGVfY2YgZGNfY29uZjsJLyogY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJZGNfYmFzZTsJLyogYmFzZS1hZGRyICovCisJdW5zaWduZWQgbG9uZwlkY19zdHJpZGU7CisJdW5zaWduZWQgbG9uZwlkY19jb3VudDsKKwl1bnNpZ25lZCBsb25nCWRjX2xvb3A7CisJLyogSW5zdHJ1Y3Rpb24tVExCICovCisJdW5zaWduZWQgbG9uZwlpdF9zaXplOwkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBJLVRMQiAqLworCXN0cnVjdCBwZGNfdGxiX2NmIGl0X2NvbmY7CS8qIEktVExCLWNvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCWl0X3NwX2Jhc2U7CisJdW5zaWduZWQgbG9uZwlpdF9zcF9zdHJpZGU7CisJdW5zaWduZWQgbG9uZwlpdF9zcF9jb3VudDsKKwl1bnNpZ25lZCBsb25nCWl0X29mZl9iYXNlOworCXVuc2lnbmVkIGxvbmcJaXRfb2ZmX3N0cmlkZTsKKwl1bnNpZ25lZCBsb25nCWl0X29mZl9jb3VudDsKKwl1bnNpZ25lZCBsb25nCWl0X2xvb3A7CisJLyogZGF0YS1UTEIgKi8KKwl1bnNpZ25lZCBsb25nCWR0X3NpemU7CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIEQtVExCICovCisJc3RydWN0IHBkY190bGJfY2YgZHRfY29uZjsJLyogRC1UTEItY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJZHRfc3BfYmFzZTsKKwl1bnNpZ25lZCBsb25nCWR0X3NwX3N0cmlkZTsKKwl1bnNpZ25lZCBsb25nCWR0X3NwX2NvdW50OworCXVuc2lnbmVkIGxvbmcJZHRfb2ZmX2Jhc2U7CisJdW5zaWduZWQgbG9uZwlkdF9vZmZfc3RyaWRlOworCXVuc2lnbmVkIGxvbmcJZHRfb2ZmX2NvdW50OworCXVuc2lnbmVkIGxvbmcJZHRfbG9vcDsKK307CisKKyNpZiAwCisvKiBJZiB5b3Ugc3RhcnQgdXNpbmcgdGhlIG5leHQgc3RydWN0LCB5b3UnbGwgaGF2ZSB0byBhZGp1c3QgaXQgdG8KKyAqIHdvcmsgd2l0aCA2NC1iaXQgZmlybXdhcmUgSSB0aGluayAtUEIKKyAqLworc3RydWN0IHBkY19pb2RjIHsgICAgIC8qIFBEQ19JT0RDICovCisJdW5zaWduZWQgY2hhciAgIGh2ZXJzaW9uX21vZGVsOworCXVuc2lnbmVkIGNoYXIgCWh2ZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgCXNwYTsKKwl1bnNpZ25lZCBjaGFyIAl0eXBlOworCXVuc2lnbmVkIGludAlzdmVyc2lvbl9yZXY6NDsKKwl1bnNpZ25lZCBpbnQJc3ZlcnNpb25fbW9kZWw6MTk7CisJdW5zaWduZWQgaW50CXN2ZXJzaW9uX29wdDo4OworCXVuc2lnbmVkIGNoYXIJcmV2OworCXVuc2lnbmVkIGNoYXIJZGVwOworCXVuc2lnbmVkIGNoYXIJZmVhdHVyZXM7CisJdW5zaWduZWQgY2hhcglwYWQxOworCXVuc2lnbmVkIGludAljaGVja3N1bToxNjsKKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOjE2OworCXVuc2lnbmVkIGludCAgICBwYWRbMTVdOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1BBMjAKKy8qIG5vIEJMVEJzIGluIHBhMi4wIHByb2Nlc3NvcnMgKi8KK3N0cnVjdCBwZGNfYnRsYl9pbmZvX3JhbmdlIHsKKwlfX3U4IHJlczAwOworCV9fdTggbnVtX2k7CisJX191OCBudW1fZDsKKwlfX3U4IG51bV9jb21iOworfTsKKworc3RydWN0IHBkY19idGxiX2luZm8gewkvKiBQRENfQkxPQ0tfVExCLCByZXR1cm4gb2YgUERDX0JUTEJfSU5GTyAqLworCXVuc2lnbmVkIGludCBtaW5fc2l6ZTsJLyogbWluaW11bSBzaXplIG9mIEJUTEIgaW4gcGFnZXMgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X3NpemU7CS8qIG1heGltdW0gc2l6ZSBvZiBCVExCIGluIHBhZ2VzICovCisJc3RydWN0IHBkY19idGxiX2luZm9fcmFuZ2UgZml4ZWRfcmFuZ2VfaW5mbzsKKwlzdHJ1Y3QgcGRjX2J0bGJfaW5mb19yYW5nZSB2YXJpYWJsZV9yYW5nZV9pbmZvOworfTsKKworI2VuZGlmIC8qICFDT05GSUdfUEEyMCAqLworCisjaWZkZWYgQ09ORklHXzY0QklUCitzdHJ1Y3QgcGRjX21lbW9yeV90YWJsZV9yYWRkciB7IC8qIFBEQ19NRU0vUERDX01FTV9UQUJMRSAocmV0dXJuIGluZm8pICovCisJdW5zaWduZWQgbG9uZyBlbnRyaWVzX3JldHVybmVkOworCXVuc2lnbmVkIGxvbmcgZW50cmllc190b3RhbDsKK307CisKK3N0cnVjdCBwZGNfbWVtb3J5X3RhYmxlIHsgICAgICAgLyogUERDX01FTS9QRENfTUVNX1RBQkxFIChhcmd1bWVudHMpICovCisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKwl1bnNpZ25lZCBpbnQgIHBhZ2VzOworCXVuc2lnbmVkIGludCAgcmVzZXJ2ZWQ7Cit9OworI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCitzdHJ1Y3QgcGRjX3N5c3RlbV9tYXBfbW9kX2luZm8geyAvKiBQRENfU1lTVEVNX01BUC9GSU5EX01PRFVMRSAqLworCXVuc2lnbmVkIGxvbmcgbW9kX2FkZHI7CisJdW5zaWduZWQgbG9uZyBtb2RfcGdzOworCXVuc2lnbmVkIGxvbmcgYWRkX2FkZHJzOworfTsKKworc3RydWN0IHBkY19zeXN0ZW1fbWFwX2FkZHJfaW5mbyB7IC8qIFBEQ19TWVNURU1fTUFQL0ZJTkRfQUREUkVTUyAqLworCXVuc2lnbmVkIGxvbmcgbW9kX2FkZHI7CisJdW5zaWduZWQgbG9uZyBtb2RfcGdzOworfTsKKworc3RydWN0IHBkY19pbml0aWF0b3IgeyAvKiBQRENfSU5JVElBVE9SICovCisJaW50IGhvc3RfaWQ7CisJaW50IGZhY3RvcjsKKwlpbnQgd2lkdGg7CisJaW50IG1vZGU7Cit9OworCitzdHJ1Y3QgaGFyZHdhcmVfcGF0aCB7CisJY2hhciAgZmxhZ3M7CS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVsb3cgKi8KKwljaGFyICBiY1s2XTsJLyogQnVzIENvbnZlcnRlciByb3V0aW5nIGluZm8gdG8gYSBzcGVjaWZpYyAqLworCQkJLyogSS9PIGFkYXB0b3IgKDwgMCBtZWFucyBub25lLCA+IDYzIHJlc3ZkKSAqLworCWNoYXIgIG1vZDsJLyogZml4ZWQgZmllbGQgb2Ygc3BlY2lmaWVkIG1vZHVsZSAqLworfTsKKworLyoKKyAqIERldmljZSBwYXRoIHNwZWNpZmljYXRpb25zIHVzZWQgYnkgUERDLgorICovCitzdHJ1Y3QgcGRjX21vZHVsZV9wYXRoIHsKKwlzdHJ1Y3QgaGFyZHdhcmVfcGF0aCBwYXRoOworCXVuc2lnbmVkIGludCBsYXllcnNbNl07IC8qIGRldmljZS1zcGVjaWZpYyBpbmZvIChjdGxyICMsIHVuaXQgIyAuLi4pICovCit9OworCisjaWZuZGVmIENPTkZJR19QQTIwCisvKiBPbmx5IHVzZWQgb24gc29tZSBwcmUtUEEyLjAgYm94ZXMgKi8KK3N0cnVjdCBwZGNfbWVtb3J5X21hcCB7CQkvKiBQRENfTUVNT1JZX01BUCAqLworCXVuc2lnbmVkIGxvbmcgaHBhOwkvKiBtb2QncyByZWdpc3RlciBzZXQgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbW9yZV9wZ3M7CS8qIG51bWJlciBvZiBhZGRpdGlvbmFsIEkvTyBwZ3MgKi8KK307CisjZW5kaWYKKworc3RydWN0IHBkY190b2QgeworCXVuc2lnbmVkIGxvbmcgdG9kX3NlYzsgCisJdW5zaWduZWQgbG9uZyB0b2RfdXNlYzsKK307CisKKy8qIGFyY2hpdGVjdGVkIHJlc3VsdHMgZnJvbSBQRENfUElNL3RyYW5zZmVyIGhwbWMgb24gYSBQQTEuMSBtYWNoaW5lICovCisKK3N0cnVjdCBwZGNfaHBtY19waW1fMTEgeyAvKiBQRENfUElNICovCisJX191MzIgZ3JbMzJdOworCV9fdTMyIGNyWzMyXTsKKwlfX3UzMiBzcls4XTsKKwlfX3UzMiBpYXNxX2JhY2s7CisJX191MzIgaWFvcV9iYWNrOworCV9fdTMyIGNoZWNrX3R5cGU7CisJX191MzIgY3B1X3N0YXRlOworCV9fdTMyIHJzdmQxOworCV9fdTMyIGNhY2hlX2NoZWNrOworCV9fdTMyIHRsYl9jaGVjazsKKwlfX3UzMiBidXNfY2hlY2s7CisJX191MzIgYXNzaXN0c19jaGVjazsKKwlfX3UzMiByc3ZkMjsKKwlfX3UzMiBhc3Npc3Rfc3RhdGU7CisJX191MzIgcmVzcG9uZGVyX2FkZHI7CisJX191MzIgcmVxdWVzdG9yX2FkZHI7CisJX191MzIgcGF0aF9pbmZvOworCV9fdTY0IGZyWzMyXTsKK307CisKKy8qCisgKiBhcmNoaXRlY3RlZCByZXN1bHRzIGZyb20gUERDX1BJTS90cmFuc2ZlciBocG1jIG9uIGEgUEEyLjAgbWFjaGluZQorICoKKyAqIE5vdGUgdGhhdCBQRENfUElNIGRvZXNuJ3QgY2FyZSB3aGV0aGVyIG9yIG5vdCB3aWRlIG1vZGUgd2FzIGVuYWJsZWQKKyAqIHNvIHRoZSByZXN1bHRzIGFyZSBkaWZmZXJlbnQgb24gIFBBMS4xIHZzLiBQQTIuMCB3aGVuIGluIG5hcnJvdyBtb2RlLgorICoKKyAqIE5vdGUgYWxzbyB0aGF0IHRoZXJlIGFyZSB1bmFyY2hpdGVjdGVkIHJlc3VsdHMgYXZhaWxhYmxlLCB3aGljaAorICogYXJlIGh2ZXJzaW9uIGRlcGVuZGVudC4gRG8gYSAic2VyIHBpbSAwIGhwbWMiIGFmdGVyIHJlYm9vdGluZywgc2luY2UKKyAqIHRoZSBmaXJtd2FyZSBpcyBwcm9iYWJseSB0aGUgYmVzdCB3YXkgb2YgcHJpbnRpbmcgaHZlcnNpb24gZGVwZW5kZW50CisgKiBkYXRhLgorICovCisKK3N0cnVjdCBwZGNfaHBtY19waW1fMjAgeyAvKiBQRENfUElNICovCisJX191NjQgZ3JbMzJdOworCV9fdTY0IGNyWzMyXTsKKwlfX3U2NCBzcls4XTsKKwlfX3U2NCBpYXNxX2JhY2s7CisJX191NjQgaWFvcV9iYWNrOworCV9fdTMyIGNoZWNrX3R5cGU7CisJX191MzIgY3B1X3N0YXRlOworCV9fdTMyIGNhY2hlX2NoZWNrOworCV9fdTMyIHRsYl9jaGVjazsKKwlfX3UzMiBidXNfY2hlY2s7CisJX191MzIgYXNzaXN0c19jaGVjazsKKwlfX3UzMiBhc3Npc3Rfc3RhdGU7CisJX191MzIgcGF0aF9pbmZvOworCV9fdTY0IHJlc3BvbmRlcl9hZGRyOworCV9fdTY0IHJlcXVlc3Rvcl9hZGRyOworCV9fdTY0IGZyWzMyXTsKK307CisKK3ZvaWQgcGRjX2NvbnNvbGVfaW5pdCh2b2lkKTsJLyogaW4gcGRjX2NvbnNvbGUuYyAqLwordm9pZCBwZGNfY29uc29sZV9yZXN0YXJ0KHZvaWQpOworCit2b2lkIHNldHVwX3BkYyh2b2lkKTsJCS8qIGluIGludmVudG9yeS5jICovCisKKy8qIHdyYXBwZXItZnVuY3Rpb25zIGZyb20gcGRjLmMgKi8KKworaW50IHBkY19hZGRfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2ludCBwZGNfY2hhc3Npc19pbmZvKHN0cnVjdCBwZGNfY2hhc3Npc19pbmZvICpjaGFzc2lzX2luZm8sIHZvaWQgKmxlZF9pbmZvLCB1bnNpZ25lZCBsb25nIGxlbik7CitpbnQgcGRjX2NoYXNzaXNfZGlzcCh1bnNpZ25lZCBsb25nIGRpc3ApOworaW50IHBkY19jaGFzc2lzX3dhcm4odW5zaWduZWQgbG9uZyAqd2Fybik7CitpbnQgcGRjX2NvcHJvY19jZmcoc3RydWN0IHBkY19jb3Byb2NfY2ZnICpwZGNfY29wcm9jX2luZm8pOworaW50IHBkY19jb3Byb2NfY2ZnX3VubG9ja2VkKHN0cnVjdCBwZGNfY29wcm9jX2NmZyAqcGRjX2NvcHJvY19pbmZvKTsKK2ludCBwZGNfaW9kY19yZWFkKHVuc2lnbmVkIGxvbmcgKmFjdGNudCwgdW5zaWduZWQgbG9uZyBocGEsIHVuc2lnbmVkIGludCBpbmRleCwKKwkJICB2b2lkICppb2RjX2RhdGEsIHVuc2lnbmVkIGludCBpb2RjX2RhdGFfc2l6ZSk7CitpbnQgcGRjX3N5c3RlbV9tYXBfZmluZF9tb2RzKHN0cnVjdCBwZGNfc3lzdGVtX21hcF9tb2RfaW5mbyAqcGRjX21vZF9pbmZvLAorCQkJICAgICBzdHJ1Y3QgcGRjX21vZHVsZV9wYXRoICptb2RfcGF0aCwgbG9uZyBtb2RfaW5kZXgpOworaW50IHBkY19zeXN0ZW1fbWFwX2ZpbmRfYWRkcnMoc3RydWN0IHBkY19zeXN0ZW1fbWFwX2FkZHJfaW5mbyAqcGRjX2FkZHJfaW5mbywKKwkJCSAgICAgIGxvbmcgbW9kX2luZGV4LCBsb25nIGFkZHJfaW5kZXgpOworaW50IHBkY19tb2RlbF9pbmZvKHN0cnVjdCBwZGNfbW9kZWwgKm1vZGVsKTsKK2ludCBwZGNfbW9kZWxfc3lzbW9kZWwoY2hhciAqbmFtZSk7CitpbnQgcGRjX21vZGVsX2NwdWlkKHVuc2lnbmVkIGxvbmcgKmNwdV9pZCk7CitpbnQgcGRjX21vZGVsX3ZlcnNpb25zKHVuc2lnbmVkIGxvbmcgKnZlcnNpb25zLCBpbnQgaWQpOworaW50IHBkY19tb2RlbF9jYXBhYmlsaXRpZXModW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKTsKK2ludCBwZGNfY2FjaGVfaW5mbyhzdHJ1Y3QgcGRjX2NhY2hlX2luZm8gKmNhY2hlKTsKK2ludCBwZGNfc3BhY2VpZF9iaXRzKHVuc2lnbmVkIGxvbmcgKnNwYWNlX2JpdHMpOworI2lmbmRlZiBDT05GSUdfUEEyMAoraW50IHBkY19idGxiX2luZm8oc3RydWN0IHBkY19idGxiX2luZm8gKmJ0bGIpOworaW50IHBkY19tZW1fbWFwX2hwYShzdHJ1Y3QgcGRjX21lbW9yeV9tYXAgKnJfYWRkciwgc3RydWN0IHBkY19tb2R1bGVfcGF0aCAqbW9kX3BhdGgpOworI2VuZGlmIC8qICFDT05GSUdfUEEyMCAqLworaW50IHBkY19sYW5fc3RhdGlvbl9pZChjaGFyICpsYW5fYWRkciwgdW5zaWduZWQgbG9uZyBuZXRfaHBhKTsKKworaW50IHBkY19zdGFibGVfcmVhZCh1bnNpZ25lZCBsb25nIHN0YWRkciwgdm9pZCAqbWVtYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitpbnQgcGRjX3N0YWJsZV93cml0ZSh1bnNpZ25lZCBsb25nIHN0YWRkciwgdm9pZCAqbWVtYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitpbnQgcGRjX3N0YWJsZV9nZXRfc2l6ZSh1bnNpZ25lZCBsb25nICpzaXplKTsKK2ludCBwZGNfc3RhYmxlX3ZlcmlmeV9jb250ZW50cyh2b2lkKTsKK2ludCBwZGNfc3RhYmxlX2luaXRpYWxpemUodm9pZCk7CisKK2ludCBwZGNfcGNpX2lydF9zaXplKHVuc2lnbmVkIGxvbmcgKm51bV9lbnRyaWVzLCB1bnNpZ25lZCBsb25nIGhwYSk7CitpbnQgcGRjX3BjaV9pcnQodW5zaWduZWQgbG9uZyBudW1fZW50cmllcywgdW5zaWduZWQgbG9uZyBocGEsIHZvaWQgKnRibCk7CisKK2ludCBwZGNfZ2V0X2luaXRpYXRvcihzdHJ1Y3QgaGFyZHdhcmVfcGF0aCAqLCBzdHJ1Y3QgcGRjX2luaXRpYXRvciAqKTsKK2ludCBwZGNfdG9kX3JlYWQoc3RydWN0IHBkY190b2QgKnRvZCk7CitpbnQgcGRjX3RvZF9zZXQodW5zaWduZWQgbG9uZyBzZWMsIHVuc2lnbmVkIGxvbmcgdXNlYyk7CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKK2ludCBwZGNfbWVtX21lbV90YWJsZShzdHJ1Y3QgcGRjX21lbW9yeV90YWJsZV9yYWRkciAqcl9hZGRyLAorCQlzdHJ1Y3QgcGRjX21lbW9yeV90YWJsZSAqdGJsLCB1bnNpZ25lZCBsb25nIGVudHJpZXMpOworI2VuZGlmCisKK3ZvaWQgc2V0X2Zpcm13YXJlX3dpZHRoKHZvaWQpOwordm9pZCBzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQodm9pZCk7CitpbnQgcGRjX2RvX2Zpcm1fdGVzdF9yZXNldCh1bnNpZ25lZCBsb25nIGZ0Y19iaXRtYXApOworaW50IHBkY19kb19yZXNldCh2b2lkKTsKK2ludCBwZGNfc29mdF9wb3dlcl9pbmZvKHVuc2lnbmVkIGxvbmcgKnBvd2VyX3JlZyk7CitpbnQgcGRjX3NvZnRfcG93ZXJfYnV0dG9uKGludCBzd19jb250cm9sKTsKK3ZvaWQgcGRjX2lvX3Jlc2V0KHZvaWQpOwordm9pZCBwZGNfaW9fcmVzZXRfZGV2aWNlcyh2b2lkKTsKK2ludCBwZGNfaW9kY19nZXRjKHZvaWQpOworaW50IHBkY19pb2RjX3ByaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpOworCit2b2lkIHBkY19lbWVyZ2VuY3lfdW5sb2NrKHZvaWQpOworaW50IHBkY19zdGlfY2FsbCh1bnNpZ25lZCBsb25nIGZ1bmMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5wdHIsIHVuc2lnbmVkIGxvbmcgb3V0cHV0ciwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBnbG9iX2NmZyk7CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqIG9zX2lkX3RvX3N0cmluZyh1MTYgb3NfaWQpIHsKKwlzd2l0Y2gob3NfaWQpIHsKKwljYXNlIE9TX0lEX05PTkU6CXJldHVybiAiTm8gT1MiOworCWNhc2UgT1NfSURfSFBVWDoJcmV0dXJuICJIUC1VWCI7CisJY2FzZSBPU19JRF9NUEVYTDoJcmV0dXJuICJNUEUtaVgiOworCWNhc2UgT1NfSURfT1NGOgkJcmV0dXJuICJPU0YiOworCWNhc2UgT1NfSURfSFBSVDoJcmV0dXJuICJIUC1SVCI7CisJY2FzZSBPU19JRF9OT1ZFTDoJcmV0dXJuICJOb3ZlbGwgTmV0d2FyZSI7CisJY2FzZSBPU19JRF9MSU5VWDoJcmV0dXJuICJMaW51eCI7CisJZGVmYXVsdDoJcmV0dXJuICJVbmtub3duIjsKKwl9Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgUEFHRTAgICAoKHN0cnVjdCB6ZXJvcGFnZSAqKV9fUEFHRV9PRkZTRVQpCisKKy8qIERFRklOSVRJT04gT0YgVEhFIFpFUk8tUEFHRSAoUEFHMCkgKi8KKy8qIGJhc2VkIG9uIHdvcmsgYnkgSmFzb24gRWNraGFyZHQgKGphc29uQGVxdWF0b3IuY29tKSAqLworCisvKiBmbGFncyBvZiB0aGUgZGV2aWNlX3BhdGggKi8KKyNkZWZpbmUJUEZfQVVUT0JPT1QJMHg4MAorI2RlZmluZQlQRl9BVVRPU0VBUkNICTB4NDAKKyNkZWZpbmUJUEZfVElNRVIJMHgwRgorCitzdHJ1Y3QgZGV2aWNlX3BhdGggewkJLyogcGFnZSAxLTY5ICovCisJdW5zaWduZWQgY2hhciBmbGFnczsJLyogZmxhZ3Mgc2VlIGFib3ZlISAqLworCXVuc2lnbmVkIGNoYXIgYmNbNl07CS8qIGJ1cyBjb252ZXJ0ZXIgcm91dGluZyBpbmZvICovCisJdW5zaWduZWQgY2hhciBtb2Q7CisJdW5zaWduZWQgaW50ICBsYXllcnNbNl07LyogZGV2aWNlLXNwZWNpZmljIGxheWVyLWluZm8gKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpIDsKKworc3RydWN0IHB6X2RldmljZSB7CisJc3RydWN0CWRldmljZV9wYXRoIGRwOwkvKiBzZWUgYWJvdmUgKi8KKwkvKiBzdHJ1Y3QJaW9tb2QgKmhwYTsgKi8KKwl1bnNpZ25lZCBpbnQgaHBhOwkvKiBIUEEgYmFzZSBhZGRyZXNzICovCisJLyogY2hhcgkqc3BhOyAqLworCXVuc2lnbmVkIGludCBzcGE7CS8qIFNQQSBiYXNlIGFkZHJlc3MgKi8KKwkvKiBpbnQJKCppb2RjX2lvKShzdHJ1Y3QgaW9tb2QqLCAuLi4pOyAqLworCXVuc2lnbmVkIGludCBpb2RjX2lvOwkvKiBkZXZpY2UgZW50cnkgcG9pbnQgKi8KKwlzaG9ydAlwYWQ7CQkvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIHNob3J0IGNsX2NsYXNzOy8qIHNlZSBiZWxvdyAqLworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgOworCitzdHJ1Y3QgemVyb3BhZ2UgeworCS8qIFsweDAwMF0gaW5pdGlhbGl6ZSB2ZWN0b3JzIChWRUMpICovCisJdW5zaWduZWQgaW50CXZlY19zcGVjaWFsOwkJLyogbXVzdCBiZSB6ZXJvICovCisJLyogaW50CSgqdmVjX3Bvd19mYWlsKSh2b2lkKTsqLworCXVuc2lnbmVkIGludAl2ZWNfcG93X2ZhaWw7IC8qIHBvd2VyIGZhaWx1cmUgaGFuZGxlciAqLworCS8qIGludAkoKnZlY190b2MpKHZvaWQpOyAqLworCXVuc2lnbmVkIGludAl2ZWNfdG9jOworCXVuc2lnbmVkIGludAl2ZWNfdG9jbGVuOworCS8qIGludAkoKnZlY19yZW5keikodm9pZCk7ICovCisJdW5zaWduZWQgaW50IHZlY19yZW5kejsKKwlpbnQJdmVjX3Bvd19mYWlsX2ZsZW47CisJaW50CXZlY19wYWRbMTBdOwkJCisJCisJLyogWzB4MDQwXSByZXNlcnZlZCBwcm9jZXNzb3IgZGVwZW5kZW50ICovCisJaW50CXBhZDBbMTEyXTsKKworCS8qIFsweDIwMF0gcmVzZXJ2ZWQgKi8KKwlpbnQJcGFkMVs4NF07CisKKwkvKiBbMHgzNTBdIG1lbW9yeSBjb25maWd1cmF0aW9uIChNQykgKi8KKwlpbnQJbWVtY19jb250OwkJLyogY29udGlndW91cyBtZW0gc2l6ZSAoYnl0ZXMpICovCisJaW50CW1lbWNfcGhzaXplOwkJLyogcGh5c2ljYWwgbWVtb3J5IHNpemUgKi8KKwlpbnQJbWVtY19hZHNpemU7CQkvKiBhZGRpdGlvbmFsIG1lbSBzaXplLCBieXRlcyBvZiBTUEEgc3BhY2UgdXNlZCBieSBQREMgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX3BkY19oaTsJLyogdXNlZCBmb3IgNjQtYml0ICovCisKKwkvKiBbMHgzNjBdIHZhcmlvdXMgcGFyYW1ldGVycyBmb3IgdGhlIGJvb3QtQ1BVICovCisJLyogdW5zaWduZWQgaW50ICptZW1fYm9vdGVycls4XTsgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX2Jvb3RlcnJbOF07CS8qIHB0ciB0byBib290IGVycm9ycyAqLworCXVuc2lnbmVkIGludCBtZW1fZnJlZTsJCS8qIGZpcnN0IGxvY2F0aW9uLCB3aGVyZSBPUyBjYW4gYmUgbG9hZGVkICovCisJLyogc3RydWN0IGlvbW9kICptZW1faHBhOyAqLworCXVuc2lnbmVkIGludCBtZW1faHBhOwkJLyogSFBBIG9mIHRoZSBib290LUNQVSAqLworCS8qIGludCAoKm1lbV9wZGMpKGludCwgLi4uKTsgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX3BkYzsJCS8qIFBEQyBlbnRyeSBwb2ludCAqLworCXVuc2lnbmVkIGludCBtZW1fMTBtc2VjOwkvKiBudW1iZXIgb2YgY2xvY2sgdGlja3MgaW4gMTBtc2VjICovCisKKwkvKiBbMHgzOTBdIGluaXRpYWwgbWVtb3J5IG1vZHVsZSAoSU1NKSAqLworCS8qIHN0cnVjdCBpb21vZCAqaW1tX2hwYTsgKi8KKwl1bnNpZ25lZCBpbnQgaW1tX2hwYTsJCS8qIEhQQSBvZiB0aGUgSU1NICovCisJaW50CWltbV9zb2Z0X2Jvb3Q7CQkvKiAwID0gd2FzIGhhcmQgYm9vdCwgMSA9IHdhcyBzb2Z0IGJvb3QgKi8KKwl1bnNpZ25lZCBpbnQJaW1tX3NwYV9zaXplOwkJLyogU1BBIHNpemUgb2YgdGhlIElNTSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludAlpbW1fbWF4X21lbTsJCS8qIGJ5dGVzIG9mIG1lbSBpbiBJTU0gKi8KKworCS8qIFsweDNBMF0gYm9vdCBjb25zb2xlLCBkaXNwbGF5IGRldmljZSBhbmQga2V5Ym9hcmQgKi8KKwlzdHJ1Y3QgcHpfZGV2aWNlIG1lbV9jb25zOwkvKiBkZXNjcmlwdGlvbiBvZiBjb25zb2xlIGRldmljZSAqLworCXN0cnVjdCBwel9kZXZpY2UgbWVtX2Jvb3Q7CS8qIGRlc2NyaXB0aW9uIG9mIGJvb3QgZGV2aWNlICovCisJc3RydWN0IHB6X2RldmljZSBtZW1fa2JkOwkvKiBkZXNjcmlwdGlvbiBvZiBrZXlib2FyZCBkZXZpY2UgKi8KKworCS8qIFsweDQzMF0gcmVzZXJ2ZWQgKi8KKwlpbnQJcGFkNDMwWzExNl07CisKKwkvKiBbMHg2MDBdIHByb2Nlc3NvciBkZXBlbmRlbnQgKi8KKwlfX3UzMglwYWQ2MDBbMV07CisJX191MzIJcHJvY19zdGk7CQkvKiBwb2ludGVyIHRvIFNUSSBST00gKi8KKwlfX3UzMglwYWQ2MDhbMTI2XTsKK307CisKKyNlbmRpZiAvKiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiBfUEFSSVNDX1BEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjX2NoYXNzaXMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkY19jaGFzc2lzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wZGNfY2hhc3Npcy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGNfY2hhc3Npcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjcGF0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGNwYXQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3BkY3BhdC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGNwYXQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BlcmNwdS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGVyY3B1LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wZXJjcHUuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGVyY3B1LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZXJmLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZXJmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wZXJmLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BlcmYuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wb2xsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BvbGwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Bvc2l4X3R5cGVzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcG9zaXhfdHlwZXMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3ByZWZldGNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcHJlZmV0Y2guaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJlZmV0Y2guaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wc3cuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Bzdy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Bzdy5oCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTUzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIF9QQVJJU0NfUFRSQUNFX0gKKyNkZWZpbmUgX1BBUklTQ19QVFJBQ0VfSAorCisvKiB3cml0dGVuIGJ5IFBoaWxpcHAgUnVtcGYsIENvcHlyaWdodCAoQykgMTk5OSBTdVNFIEdtYkggTnVlcm5iZXJnCisqKiBDb3B5cmlnaHQgKEMpIDIwMDAgR3JhbnQgR3J1bmRsZXIsIEhld2xldHQtUGFja2FyZAorKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlIAorICogc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuCisgKgorICogTi5CLiBnZGIvc3RyYWNlIGNhcmUgYWJvdXQgdGhlIHNpemUgYW5kIG9mZnNldHMgd2l0aGluIHRoaXMKKyAqIHN0cnVjdHVyZS4gSWYgeW91IGNoYW5nZSB0aGluZ3MsIHlvdSBtYXkgYnJlYWsgb2JqZWN0IGNvbXBhdGliaWxpdHkKKyAqIGZvciB0aG9zZSBhcHBsaWNhdGlvbnMuCisgKi8KKworc3RydWN0IHB0X3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgZ3JbMzJdOwkvKiBQU1cgaXMgaW4gZ3JbMF0gKi8KKwlfX3U2NCBmclszMl07CisJdW5zaWduZWQgbG9uZyBzclsgOF07CisJdW5zaWduZWQgbG9uZyBpYXNxWzJdOworCXVuc2lnbmVkIGxvbmcgaWFvcVsyXTsKKwl1bnNpZ25lZCBsb25nIGNyMjc7CisJdW5zaWduZWQgbG9uZyBwYWQwOyAgICAgLyogYXZhaWxhYmxlIGZvciBvdGhlciB1c2VzICovCisJdW5zaWduZWQgbG9uZyBvcmlnX3IyODsKKwl1bnNpZ25lZCBsb25nIGtzcDsKKwl1bnNpZ25lZCBsb25nIGtwYzsKKwl1bnNpZ25lZCBsb25nIHNhcjsJLyogQ1IxMSAqLworCXVuc2lnbmVkIGxvbmcgaWlyOwkvKiBDUjE5ICovCisJdW5zaWduZWQgbG9uZyBpc3I7CS8qIENSMjAgKi8KKwl1bnNpZ25lZCBsb25nIGlvcjsJLyogQ1IyMSAqLworCXVuc2lnbmVkIGxvbmcgaXBzdzsJLyogQ1IyMiAqLworfTsKKworLyoKKyAqIFRoZSBudW1iZXJzIGNob3NlbiBoZXJlIGFyZSBzb21ld2hhdCBhcmJpdHJhcnkgYnV0IGFic29sdXRlbHkgTVVTVAorICogbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG51bWJlciBhc3NpZ25lZCBpbiA8bGludXgvcHRyYWNlLmg+LgorICoKKyAqIFRoZXNlIG9uZXMgYXJlIHRha2VuIGZyb20gSUEtNjQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVpcnMgYXJlCisgKiB0aGUgbW9zdCBjb3JyZWN0IChhbmQgd2UgYWxzbyB3YW50IHRvIHN1cHBvcnQgUFRSQUNFX1NJTkdMRUJMT0NLCisgKiBzaW5jZSB3ZSBoYXZlIHRha2VuIGJyYW5jaCB0cmFwcyB0b28pCisgKi8KKyNkZWZpbmUgUFRSQUNFX1NJTkdMRUJMT0NLCTEyCS8qIHJlc3VtZSBleGVjdXRpb24gdW50aWwgbmV4dCBicmFuY2ggKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSB0YXNrX3JlZ3ModGFzaykgKChzdHJ1Y3QgcHRfcmVncyAqKSAoKGNoYXIgKikodGFzaykgKyBUQVNLX1JFR1MpKQorCisjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUFRSQUNFCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKyNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKQkxCit2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwordm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCisjZGVmaW5lIGFyY2hfaGFzX2Jsb2NrX3N0ZXAoKQkxCit2b2lkIHVzZXJfZW5hYmxlX2Jsb2NrX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKworLyogWFhYIHNob3VsZCB3ZSB1c2UgaWFvcVsxXSBvciBpYW9xWzBdID8gKi8KKyNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPmlhb3FbMF0gJiAzKSA/IDEgOiAwKQorI2RlZmluZSB1c2VyX3NwYWNlKHJlZ3MpCQkoKChyZWdzKS0+aWFzcVsxXSAhPSAwKSA/IDEgOiAwKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPmlhb3FbMF0gJiB+MykKK3Vuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9yZWFsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9yZWFsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9yZWFsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3JlYWwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Jlc291cmNlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcmVzb3VyY2UuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcmVzb3VyY2UuaApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcm9wZXMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3JvcGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNTFkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3JvcGVzLmgKQEAgLTAsMCArMSwzMjIgQEAKKyNpZm5kZWYgX0FTTV9QQVJJU0NfUk9QRVNfSF8KKyNkZWZpbmUgX0FTTV9QQVJJU0NfUk9QRVNfSF8KKworI2luY2x1ZGUgPGFzbS9wYXJpc2MtZGV2aWNlLmg+CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKy8qICJsb3cgZW5kIiBQQTg4MDAgbWFjaGluZXMgdXNlIFpYMSBjaGlwc2V0OiBQQVQgUERDIGFuZCBvbmx5IHJ1biA2NC1iaXQgKi8KKyNkZWZpbmUgWlgxX1NVUFBPUlQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKy8qIGRlcGVuZHMgb24gcHJvYyBmcyBzdXBwb3J0LiBCdXQgY29zdHMgQ1BVIHBlcmZvcm1hbmNlICovCisjdW5kZWYgU0JBX0NPTExFQ1RfU1RBVFMKKyNlbmRpZgorCisvKgorKiogVGhlIG51bWJlciBvZiBwZGlyIGVudHJpZXMgdG8gImZyZWUiIGJlZm9yZSBpc3N1aW5nCisqKiBhIHJlYWQgdG8gUENPTSByZWdpc3RlciB0byBmbHVzaCBvdXQgUENPTSB3cml0ZXMuCisqKiBJbnRlcmFjdHMgd2l0aCBhbGxvY2F0aW9uIGdyYW51bGFyaXR5IChpZSA0IG9yIDggZW50cmllcworKiogYWxsb2NhdGVkIGFuZCBmcmVlJ2QvcHVyZ2VkIGF0IGEgdGltZSBtaWdodCBtYWtlIHRoaXMKKyoqIGxlc3MgaW50ZXJlc3RpbmcpLgorKi8KKyNkZWZpbmUgREVMQVlFRF9SRVNPVVJDRV9DTlQJMTYKKworI2RlZmluZSBNQVhfSU9DCQkyCS8qIHBlciBJa2UuIFBsdXRvL0FzdHJvIG9ubHkgaGF2ZSAxLiAqLworI2RlZmluZSBST1BFU19QRVJfSU9DCTgJLyogcGVyIElrZSBoYWxmIG9yIFBsdXRvL0FzdHJvICovCisKK3N0cnVjdCBpb2MgeworCXZvaWQgX19pb21lbQkqaW9jX2hwYTsJLyogSS9PIE1NVSBiYXNlIGFkZHJlc3MgKi8KKwljaGFyCQkqcmVzX21hcDsJLyogcmVzb3VyY2UgbWFwLCBiaXQgPT0gcGRpciBlbnRyeSAqLworCXU2NAkJKnBkaXJfYmFzZTsJLyogcGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwlpYmFzZTsJCS8qIHBkaXIgSU9WIFNwYWNlIGJhc2UgLSBzaGFyZWQgdy9sYmFfcGNpICovCisJdW5zaWduZWQgbG9uZwlpbWFzazsJCS8qIHBkaXIgSU9WIFNwYWNlIG1hc2sgLSBzaGFyZWQgdy9sYmFfcGNpICovCisjaWZkZWYgWlgxX1NVUFBPUlQKKwl1bnNpZ25lZCBsb25nCWlvdnBfbWFzazsJLyogaGVscCBjb252ZXJ0IElPVkEgdG8gSU9WUCAqLworI2VuZGlmCisJdW5zaWduZWQgbG9uZwkqcmVzX2hpbnQ7CS8qIG5leHQgYXZhaWwgSU9WUCAtIGNpcmN1bGFyIHNlYXJjaCAqLworCXNwaW5sb2NrX3QJcmVzX2xvY2s7CisJdW5zaWduZWQgaW50CXJlc19iaXRzaGlmdDsJLyogZnJvbSB0aGUgTEVGVCEgKi8KKwl1bnNpZ25lZCBpbnQJcmVzX3NpemU7CS8qIHNpemUgb2YgcmVzb3VyY2UgbWFwIGluIGJ5dGVzICovCisjaWZkZWYgU0JBX0hJTlRfU1VQUE9SVAorLyogRklYTUUgOiBETUEgSElOVHMgbm90IHVzZWQgKi8KKwl1bnNpZ25lZCBsb25nCWhpbnRfbWFza19wZGlyOyAvKiBiaXRzIHVzZWQgZm9yIERNQSBoaW50cyAqLworCXVuc2lnbmVkIGludAloaW50X3NoaWZ0X3BkaXI7CisjZW5kaWYKKyNpZiBERUxBWUVEX1JFU09VUkNFX0NOVCA+IDAKKwlpbnQJCXNhdmVkX2NudDsKKwlzdHJ1Y3Qgc2JhX2RtYV9wYWlyIHsKKwkJCWRtYV9hZGRyX3QJaW92YTsKKwkJCXNpemVfdAkJc2l6ZTsKKyAgICAgICAgfSBzYXZlZFtERUxBWUVEX1JFU09VUkNFX0NOVF07CisjZW5kaWYKKworI2lmZGVmIFNCQV9DT0xMRUNUX1NUQVRTCisjZGVmaW5lIFNCQV9TRUFSQ0hfU0FNUExFCTB4MTAwCisJdW5zaWduZWQgbG9uZwlhdmdfc2VhcmNoW1NCQV9TRUFSQ0hfU0FNUExFXTsKKwl1bnNpZ25lZCBsb25nCWF2Z19pZHg7CS8qIGN1cnJlbnQgaW5kZXggaW50byBhdmdfc2VhcmNoICovCisJdW5zaWduZWQgbG9uZwl1c2VkX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcJbXNpbmdsZV9jYWxsczsKKwl1bnNpZ25lZCBsb25nCW1zaW5nbGVfcGFnZXM7CisJdW5zaWduZWQgbG9uZwltc2dfY2FsbHM7CisJdW5zaWduZWQgbG9uZwltc2dfcGFnZXM7CisJdW5zaWduZWQgbG9uZwl1c2luZ2xlX2NhbGxzOworCXVuc2lnbmVkIGxvbmcJdXNpbmdsZV9wYWdlczsKKwl1bnNpZ25lZCBsb25nCXVzZ19jYWxsczsKKwl1bnNpZ25lZCBsb25nCXVzZ19wYWdlczsKKyNlbmRpZgorICAgICAgICAvKiBTVFVGRiBXZSBkb24ndCBuZWVkIGluIHBlcmZvcm1hbmNlIHBhdGggKi8KKwl1bnNpZ25lZCBpbnQJcGRpcl9zaXplOwkvKiBpbiBieXRlcywgZGV0ZXJtaW5lZCBieSBJT1YgU3BhY2Ugc2l6ZSAqLworfTsKKworc3RydWN0IHNiYV9kZXZpY2UgeworCXN0cnVjdCBzYmFfZGV2aWNlCSpuZXh0OyAgLyogbGlzdCBvZiBTQkEncyBpbiBzeXN0ZW0gKi8KKwlzdHJ1Y3QgcGFyaXNjX2RldmljZQkqZGV2OyAgIC8qIGRldiBmb3VuZCBpbiBidXMgd2FsayAqLworCWNvbnN0IGNoYXIJCSpuYW1lOworCXZvaWQgX19pb21lbQkJKnNiYV9ocGE7IC8qIGJhc2UgYWRkcmVzcyAqLworCXNwaW5sb2NrX3QJCXNiYV9sb2NrOworCXVuc2lnbmVkIGludAkJZmxhZ3M7ICAvKiBzdGF0ZS9mdW5jdGlvbmFsaXR5IGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBpbnQJCWh3X3JldjsgIC8qIEhXIHJldmlzaW9uIG9mIGNoaXAgKi8KKworCXN0cnVjdCByZXNvdXJjZQkJY2hpcF9yZXN2OyAvKiBNTUlPIHJlc2VydmVkIGZvciBjaGlwICovCisJc3RydWN0IHJlc291cmNlCQlpb21tdV9yZXN2OyAvKiBNTUlPIHJlc2VydmVkIGZvciBpb21tdSAqLworCisJdW5zaWduZWQgaW50CQludW1faW9jOyAgLyogbnVtYmVyIG9mIG9uLWJvYXJkIElPQydzICovCisJc3RydWN0IGlvYwkJaW9jW01BWF9JT0NdOworfTsKKworI2RlZmluZSBBU1RST19SVU5XQVlfUE9SVAkweDU4MgorI2RlZmluZSBJS0VfTUVSQ0VEX1BPUlQJCTB4ODAzCisjZGVmaW5lIFJFT19NRVJDRURfUE9SVAkJMHg4MDQKKyNkZWZpbmUgUkVPR19NRVJDRURfUE9SVAkweDgwNQorI2RlZmluZSBQTFVUT19NQ0tJTkxFWV9QT1JUCTB4ODgwCisKK3N0YXRpYyBpbmxpbmUgaW50IElTX0FTVFJPKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkKSB7CisJcmV0dXJuIGQtPmlkLmh2ZXJzaW9uID09IEFTVFJPX1JVTldBWV9QT1JUOworfQorCitzdGF0aWMgaW5saW5lIGludCBJU19JS0Uoc3RydWN0IHBhcmlzY19kZXZpY2UgKmQpIHsKKwlyZXR1cm4gZC0+aWQuaHZlcnNpb24gPT0gSUtFX01FUkNFRF9QT1JUOworfQorCitzdGF0aWMgaW5saW5lIGludCBJU19QTFVUTyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZCkgeworCXJldHVybiBkLT5pZC5odmVyc2lvbiA9PSBQTFVUT19NQ0tJTkxFWV9QT1JUOworfQorCisjZGVmaW5lIFBMVVRPX0lPVkFfQkFTRQkoMVVMKjEwMjQqMTAyNCoxMDI0KQkvKiAxR0IgKi8KKyNkZWZpbmUgUExVVE9fSU9WQV9TSVpFCSgxVUwqMTAyNCoxMDI0KjEwMjQpCS8qIDFHQiAqLworI2RlZmluZSBQTFVUT19HQVJUX1NJWkUJKFBMVVRPX0lPVkFfU0laRSAvIDIpCisKKyNkZWZpbmUgU0JBX1BESVJfVkFMSURfQklUCTB4ODAwMDAwMDAwMDAwMDAwMFVMTAorCisjZGVmaW5lIFNCQV9BR1BHQVJUX0NPT0tJRQkweDAwMDBiYWRiYWRjMGZmZWVVTEwKKworI2RlZmluZSBTQkFfRlVOQ19JRAkweDAwMDAJLyogZnVuY3Rpb24gaWQgKi8KKyNkZWZpbmUgU0JBX0ZDTEFTUwkweDAwMDgJLyogZnVuY3Rpb24gY2xhc3MsIGJpc3QsIGhlYWRlciwgcmV2Li4uICovCisKKyNkZWZpbmUgU0JBX0ZVTkNfU0laRSA0MDk2ICAgLyogU0JBIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gcmVnIHNldCAqLworCisjZGVmaW5lIEFTVFJPX0lPQ19PRkZTRVQJKDMyICogU0JBX0ZVTkNfU0laRSkKKyNkZWZpbmUgUExVVE9fSU9DX09GRlNFVAkoMSAqIFNCQV9GVU5DX1NJWkUpCisvKiBJa2UncyBJT0MncyBvY2N1cHkgZnVuY3Rpb25zIDIgYW5kIDMgKi8KKyNkZWZpbmUgSUtFX0lPQ19PRkZTRVQocCkJKChwKzIpICogU0JBX0ZVTkNfU0laRSkKKworI2RlZmluZSBJT0NfQ1RSTCAgICAgICAgICAweDgJLyogSU9DX0NUUkwgb2Zmc2V0ICovCisjZGVmaW5lIElPQ19DVFJMX1RDICAgICAgICgxIDw8IDApIC8qIFRPQyBFbmFibGUgKi8KKyNkZWZpbmUgSU9DX0NUUkxfQ0UgICAgICAgKDEgPDwgMSkgLyogQ29hbGVzY2UgRW5hYmxlICovCisjZGVmaW5lIElPQ19DVFJMX0RFICAgICAgICgxIDw8IDIpIC8qIERpbGxvbiBFbmFibGUgKi8KKyNkZWZpbmUgSU9DX0NUUkxfUk0gICAgICAgKDEgPDwgOCkgLyogUmVhbCBNb2RlICovCisjZGVmaW5lIElPQ19DVFJMX05DICAgICAgICgxIDw8IDkpIC8qIE5vbiBDb2hlcmVudCBNb2RlICovCisjZGVmaW5lIElPQ19DVFJMX0Q0ICAgICAgICgxIDw8IDExKSAvKiBEaXNhYmxlIDQtYnl0ZSBjb2FsZXNjaW5nICovCisjZGVmaW5lIElPQ19DVFJMX0REICAgICAgICgxIDw8IDEzKSAvKiBEaXNhYmxlIGRpc3RyLiBMTU1JTyByYW5nZSBjb2FsZXNjaW5nICovCisKKy8qCisqKiBPZmZzZXRzIGludG8gTUJJQiAoRnVuY3Rpb24gMCBvbiBJa2UgYW5kIGhvcGVmdWxseSBBc3RybykKKyoqIEZpcm13YXJlIHByb2dyYW1zIHRoaXMgc3R1ZmYuIERvbid0IHRvdWNoIGl0LgorKi8KKyNkZWZpbmUgTE1NSU9fRElSRUNUMF9CQVNFICAweDMwMAorI2RlZmluZSBMTU1JT19ESVJFQ1QwX01BU0sgIDB4MzA4CisjZGVmaW5lIExNTUlPX0RJUkVDVDBfUk9VVEUgMHgzMTAKKworI2RlZmluZSBMTU1JT19ESVNUX0JBU0UgIDB4MzYwCisjZGVmaW5lIExNTUlPX0RJU1RfTUFTSyAgMHgzNjgKKyNkZWZpbmUgTE1NSU9fRElTVF9ST1VURSAweDM3MAorCisjZGVmaW5lIElPU19ESVNUX0JBU0UJMHgzOTAKKyNkZWZpbmUgSU9TX0RJU1RfTUFTSwkweDM5OAorI2RlZmluZSBJT1NfRElTVF9ST1VURQkweDNBMAorCisjZGVmaW5lIElPU19ESVJFQ1RfQkFTRQkweDNDMAorI2RlZmluZSBJT1NfRElSRUNUX01BU0sJMHgzQzgKKyNkZWZpbmUgSU9TX0RJUkVDVF9ST1VURSAweDNEMAorCisvKgorKiogT2Zmc2V0cyBpbnRvIEkvTyBUTEIgKEZ1bmN0aW9uIDIgYW5kIDMgb24gSWtlKQorKi8KKyNkZWZpbmUgUk9QRTBfQ1RMCTB4MjAwICAvKiAicmVnYnVzIHBjaTAiICovCisjZGVmaW5lIFJPUEUxX0NUTAkweDIwOAorI2RlZmluZSBST1BFMl9DVEwJMHgyMTAKKyNkZWZpbmUgUk9QRTNfQ1RMCTB4MjE4CisjZGVmaW5lIFJPUEU0X0NUTAkweDIyMAorI2RlZmluZSBST1BFNV9DVEwJMHgyMjgKKyNkZWZpbmUgUk9QRTZfQ1RMCTB4MjMwCisjZGVmaW5lIFJPUEU3X0NUTAkweDIzOAorCisjZGVmaW5lIElPQ19ST1BFMF9DRkcJMHg1MDAJLyogcGx1dG8gb25seSAqLworI2RlZmluZSAgIElPQ19ST1BFX0FPCSAgMHgxMAkvKiBBbGxvdyAiUmVsYXhlZCBPcmRlcmluZyIgKi8KKworI2RlZmluZSBIRl9FTkFCTEUJMHg0MAorCisjZGVmaW5lIElPQ19JQkFTRQkweDMwMAkvKiBJTyBUTEIgKi8KKyNkZWZpbmUgSU9DX0lNQVNLCTB4MzA4CisjZGVmaW5lIElPQ19QQ09NCTB4MzEwCisjZGVmaW5lIElPQ19UQ05GRwkweDMxOAorI2RlZmluZSBJT0NfUERJUl9CQVNFCTB4MzIwCisKKy8qCisqKiBJT0Mgc3VwcG9ydHMgNC84LzE2LzY0S0IgcGFnZSBzaXplcyAoc2VlIFRDTkZHIHJlZ2lzdGVyKQorKiogSXQncyBzYWZlciAoYXZvaWQgbWVtb3J5IGNvcnJ1cHRpb24pIHRvIGtlZXAgRE1BIHBhZ2UgbWFwcGluZ3MKKyoqIGVxdWl2YWxlbnRseSBzaXplZCB0byBWTSBQQUdFX1NJWkUuCisqKgorKiogV2UgcmVhbGx5IGNhbid0IGF2b2lkIGdlbmVyYXRpbmcgYSBuZXcgbWFwcGluZyBmb3IgZWFjaAorKiogcGFnZSBzaW5jZSB0aGUgVmlydHVhbCBDb2hlcmVuY2UgSW5kZXggaGFzIHRvIGJlIGdlbmVyYXRlZAorKiogYW5kIHVwZGF0ZWQgZm9yIGVhY2ggcGFnZS4KKyoqCisqKiBQQUdFX1NJWkUgY291bGQgYmUgZ3JlYXRlciB0aGFuIElPVlBfU0laRS4gQnV0IG5vdCB0aGUgaW52ZXJzZS4KKyovCisjZGVmaW5lIElPVlBfU0laRQlQQUdFX1NJWkUKKyNkZWZpbmUgSU9WUF9TSElGVAlQQUdFX1NISUZUCisjZGVmaW5lIElPVlBfTUFTSwlQQUdFX01BU0sKKworI2RlZmluZSBTQkFfUEVSRl9DRkcJMHg3MDgJLyogUGVyZm9ybWFuY2UgQ291bnRlciBzdHVmZiAqLworI2RlZmluZSBTQkFfUEVSRl9NQVNLMQkweDcxOAorI2RlZmluZSBTQkFfUEVSRl9NQVNLMgkweDczMAorCisvKgorKiogT2Zmc2V0cyBpbnRvIFBDSSBQZXJmb3JtYW5jZSBDb3VudGVycyAoZnVuY3Rpb25zIDEyIGFuZCAxMykKKyoqIENvbnRyb2xsZWQgYnkgUEVSRiByZWdpc3RlcnMgaW4gZnVuY3Rpb24gMiAmIDMgcmVzcGVjdGl2ZWx5LgorKi8KKyNkZWZpbmUgU0JBX1BFUkZfQ05UMQkweDIwMAorI2RlZmluZSBTQkFfUEVSRl9DTlQyCTB4MjA4CisjZGVmaW5lIFNCQV9QRVJGX0NOVDMJMHgyMTAKKworLyoKKyoqIGxiYV9kZXZpY2U6IFBlciBpbnN0YW5jZSBFbHJveSBkYXRhIHN0cnVjdHVyZQorKi8KK3N0cnVjdCBsYmFfZGV2aWNlIHsKKwlzdHJ1Y3QgcGNpX2hiYV9kYXRhCWhiYTsKKworCXNwaW5sb2NrX3QJCWxiYV9sb2NrOworCXZvaWQJCQkqaW9zYXBpY19vYmo7CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwl2b2lkIF9faW9tZW0JCSppb3BfYmFzZTsJLyogUEFfVklFVyAtIGZvciBJTyBwb3J0IGFjY2Vzc29yIGZ1bmNzICovCisjZW5kaWYKKworCWludAkJCWZsYWdzOwkJLyogc3RhdGUvZnVuY3Rpb25hbGl0eSBlbmFibGVkICovCisJaW50CQkJaHdfcmV2OwkJLyogSFcgcmV2aXNpb24gb2YgY2hpcCAqLworfTsKKworI2RlZmluZSBFTFJPWV9IVkVSUwkJMHg3ODIKKyNkZWZpbmUgTUVSQ1VSWV9IVkVSUwkJMHg3ODMKKyNkZWZpbmUgUVVJQ0tTSUxWRVJfSFZFUlMJMHg3ODQKKworc3RhdGljIGlubGluZSBpbnQgSVNfRUxST1koc3RydWN0IHBhcmlzY19kZXZpY2UgKmQpIHsKKwlyZXR1cm4gKGQtPmlkLmh2ZXJzaW9uID09IEVMUk9ZX0hWRVJTKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgSVNfTUVSQ1VSWShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZCkgeworCXJldHVybiAoZC0+aWQuaHZlcnNpb24gPT0gTUVSQ1VSWV9IVkVSUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IElTX1FVSUNLU0lMVkVSKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkKSB7CisJcmV0dXJuIChkLT5pZC5odmVyc2lvbiA9PSBRVUlDS1NJTFZFUl9IVkVSUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFncF9tb2RlX21lcmN1cnkodm9pZCBfX2lvbWVtICpocGEpIHsKKwl1NjQgYnVzX21vZGU7CisKKwlidXNfbW9kZSA9IHJlYWRsKGhwYSArIDB4MDYyMCk7CisJaWYgKGJ1c19tb2RlICYgMSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyoqIEkvTyBTQVBJQyBpbml0IGZ1bmN0aW9uCisqKiBDYWxsZXIga25vd3Mgd2hlcmUgYW4gSS9PIFNBUElDIGlzLiBMQkEgaGFzIGFuIGludGVncmF0ZWQgSS9PIFNBUElDLgorKiogQ2FsbCBzZXR1cCBhcyBwYXJ0IG9mIHBlciBpbnN0YW5jZSBpbml0aWFsaXphdGlvbi4KKyoqIChpZSAqbm90KiBpbml0X21vZHVsZSgpIGZ1bmN0aW9uIHVubGVzcyBvbmx5IG9uZSBpcyBwcmVzZW50LikKKyoqIGZpeHVwX2lycSBpcyB0byBpbml0aWFsaXplIFBDSSBJUlEgbGluZSBzdXBwb3J0IGFuZAorKiogdmlydHVhbGl6ZSBwY2lkZXYtPmlycSB2YWx1ZS4gVG8gYmUgY2FsbGVkIGJ5IHBjaV9maXh1cF9idXMoKS4KKyovCitleHRlcm4gdm9pZCAqaW9zYXBpY19yZWdpc3Rlcih1bnNpZ25lZCBsb25nIGhwYSk7CitleHRlcm4gaW50IGlvc2FwaWNfZml4dXBfaXJxKHZvaWQgKm9iaiwgc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CisKKyNkZWZpbmUgTEJBX0ZVTkNfSUQJMHgwMDAwCS8qIGZ1bmN0aW9uIGlkICovCisjZGVmaW5lIExCQV9GQ0xBU1MJMHgwMDA4CS8qIGZ1bmN0aW9uIGNsYXNzLCBiaXN0LCBoZWFkZXIsIHJldi4uLiAqLworI2RlZmluZSBMQkFfQ0FQQUJMRQkweDAwMzAJLyogY2FwYWJpbGl0aWVzIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgTEJBX1BDSV9DRkdfQUREUgkweDAwNDAJLyogcG9rZSBDRkcgYWRkcmVzcyBoZXJlICovCisjZGVmaW5lIExCQV9QQ0lfQ0ZHX0RBVEEJMHgwMDQ4CS8qIHJlYWQgb3Igd3JpdGUgZGF0YSBoZXJlICovCisKKyNkZWZpbmUgTEJBX1BNQ19NVExUCTB4MDA1MAkvKiBGaXJtd2FyZSBzZXRzIHRoaXMgLSByZWFkIG9ubHkuICovCisjZGVmaW5lIExCQV9GV19TQ1JBVENICTB4MDA1OAkvKiBGaXJtd2FyZSB3cml0ZXMgdGhlIFBDSSBidXMgbnVtYmVyIGhlcmUuICovCisjZGVmaW5lIExCQV9FUlJPUl9BRERSCTB4MDA3MAkvKiBPbiBlcnJvciwgYWRkcmVzcyBnZXRzIGxvZ2dlZCBoZXJlICovCisKKyNkZWZpbmUgTEJBX0FSQl9NQVNLCTB4MDA4MAkvKiBiaXQgMCBlbmFibGUgYXJiaXRyYXRpb24uIFBBVC9QREMgZW5hYmxlcyAqLworI2RlZmluZSBMQkFfQVJCX1BSSQkweDAwODgJLyogZmlybXdhcmUgc2V0cyB0aGlzLiAqLworI2RlZmluZSBMQkFfQVJCX01PREUJMHgwMDkwCS8qIGZpcm13YXJlIHNldHMgdGhpcy4gKi8KKyNkZWZpbmUgTEJBX0FSQl9NVExUCTB4MDA5OAkvKiBmaXJtd2FyZSBzZXRzIHRoaXMuICovCisKKyNkZWZpbmUgTEJBX01PRF9JRAkweDAxMDAJLyogTW9kdWxlIElELiBQRENfUEFUX0NFTEwgcmVwb3J0cyA0ICovCisKKyNkZWZpbmUgTEJBX1NUQVRfQ1RMCTB4MDEwOAkvKiBTdGF0dXMgJiBDb250cm9sICovCisjZGVmaW5lICAgTEJBX0JVU19SRVNFVAkJMHgwMQkvKiAgRGVhc3NlcnQgUENJIEJ1cyBSZXNldCBTaWduYWwgKi8KKyNkZWZpbmUgICBDTEVBUl9FUlJMT0cJCTB4MTAJLyogICJDbGVhciBFcnJvciBMb2ciIGNtZCAqLworI2RlZmluZSAgIENMRUFSX0VSUkxPR19FTkFCTEUJMHgyMAkvKiAgIkNsZWFyIEVycm9yIExvZyIgRW5hYmxlICovCisjZGVmaW5lICAgSEZfRU5BQkxFCTB4NDAJLyogICAgZW5hYmxlIEhGIG1vZGUgKGRlZmF1bHQgaXMgLTEgbW9kZSkgKi8KKworI2RlZmluZSBMQkFfTE1NSU9fQkFTRQkweDAyMDAJLyogPCA0R0IgSS9PIGFkZHJlc3MgcmFuZ2UgKi8KKyNkZWZpbmUgTEJBX0xNTUlPX01BU0sJMHgwMjA4CisKKyNkZWZpbmUgTEJBX0dNTUlPX0JBU0UJMHgwMjEwCS8qID4gNEdCIEkvTyBhZGRyZXNzIHJhbmdlICovCisjZGVmaW5lIExCQV9HTU1JT19NQVNLCTB4MDIxOAorCisjZGVmaW5lIExCQV9XTE1NSU9fQkFTRQkweDAyMjAJLyogQWxsIDwgNEdCIHJhbmdlcyB1bmRlciB0aGUgc2FtZSAqU0JBKiAqLworI2RlZmluZSBMQkFfV0xNTUlPX01BU0sJMHgwMjI4CisKKyNkZWZpbmUgTEJBX1dHTU1JT19CQVNFCTB4MDIzMAkvKiBBbGwgPiA0R0IgcmFuZ2VzIHVuZGVyIHRoZSBzYW1lICpTQkEqICovCisjZGVmaW5lIExCQV9XR01NSU9fTUFTSwkweDAyMzgKKworI2RlZmluZSBMQkFfSU9TX0JBU0UJMHgwMjQwCS8qIEkvTyBwb3J0IHNwYWNlIGZvciB0aGlzIExCQSAqLworI2RlZmluZSBMQkFfSU9TX01BU0sJMHgwMjQ4CisKKyNkZWZpbmUgTEJBX0VMTU1JT19CQVNFCTB4MDI1MAkvKiBFeHRyYSBMTU1JTyByYW5nZSAqLworI2RlZmluZSBMQkFfRUxNTUlPX01BU0sJMHgwMjU4CisKKyNkZWZpbmUgTEJBX0VJT1NfQkFTRQkweDAyNjAJLyogRXh0cmEgSS9PIHBvcnQgc3BhY2UgKi8KKyNkZWZpbmUgTEJBX0VJT1NfTUFTSwkweDAyNjgKKworI2RlZmluZSBMQkFfR0xPQkFMX01BU0sJMHgwMjcwCS8qIE1lcmN1cnkgb25seTogR2xvYmFsIEFkZHJlc3MgTWFzayAqLworI2RlZmluZSBMQkFfRE1BX0NUTAkweDAyNzgJLyogZmlybXdhcmUgc2V0cyB0aGlzICovCisKKyNkZWZpbmUgTEJBX0lCQVNFCTB4MDMwMAkvKiBTQkEgRE1BIHN1cHBvcnQgKi8KKyNkZWZpbmUgTEJBX0lNQVNLCTB4MDMwOAorCisvKiBGSVhNRTogaWdub3JlIERNQSBIaW50IHN0dWZmIHVudGlsIHdlIGNhbiBtZWFzdXJlIHBlcmZvcm1hbmNlICovCisjZGVmaW5lIExCQV9ISU5UX0NGRwkweDAzMTAKKyNkZWZpbmUgTEJBX0hJTlRfQkFTRQkweDAzODAJLyogMTQgcmVnaXN0ZXJzIGF0IGV2ZXJ5IDggYnl0ZXMuICovCisKKyNkZWZpbmUgTEJBX0JVU19NT0RFCTB4MDYyMAorCisvKiBFUlJPUiByZWdzIGFyZSBuZWVkZWQgZm9yIGNvbmZpZyBjeWNsZSBrbHVnZXMgKi8KKyNkZWZpbmUgTEJBX0VSUk9SX0NPTkZJRyAweDA2ODAKKyNkZWZpbmUgICAgIExCQV9TTUFSVF9NT0RFIDB4MjAKKyNkZWZpbmUgTEJBX0VSUk9SX1NUQVRVUyAweDA2ODgKKyNkZWZpbmUgTEJBX1JPUEVfQ1RMICAgICAweDA2QTAKKworI2RlZmluZSBMQkFfSU9TQVBJQ19CQVNFCTB4ODAwIC8qIE9mZnNldCBvZiBJUlEgbG9naWMgKi8KKworI2VuZGlmIC8qX0FTTV9QQVJJU0NfUk9QRVNfSF8qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3J0X3NpZ2ZyYW1lLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9ydF9zaWdmcmFtZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcnRfc2lnZnJhbWUuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcnRfc2lnZnJhbWUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3J0Yy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcnRjLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9ydGMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcnRjLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9ydW53YXkuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3J1bndheS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcnVud2F5LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3J1bndheS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2NhdHRlcmxpc3QuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zY2F0dGVybGlzdC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VjdGlvbnMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zZWN0aW9ucy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VnbWVudC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2VnbWVudC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc2VnbWVudC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zZWdtZW50LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1idWYuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NlbWJ1Zi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc2VtYnVmLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NlbWJ1Zi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VyaWFsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zZXJpYWwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NlcmlhbC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zZXJpYWwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NldHVwLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zZXR1cC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc2V0dXAuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2V0dXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NobWJ1Zi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2htYnVmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zaG1idWYuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2htYnVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zaG1wYXJhbS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2htcGFyYW0uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NobXBhcmFtLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NobXBhcmFtLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWdjb250ZXh0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zaWdjb250ZXh0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NpZ2luZm8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NpZ2luZm8uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NpZ2luZm8uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2lnaW5mby5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zaWduYWwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NpZ25hbC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zaWduYWwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zbXAuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zb2NrZXQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2V0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2lvcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2lvcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2lvcy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NraW9zLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zcGlubG9jay5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2suaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NwaW5sb2NrLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NwaW5sb2NrX3R5cGVzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zdGF0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zdGF0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zdGF0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N0YXQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXRmcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3RhdGZzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zdGF0ZnMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3RhdGZzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zdHJpbmcuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N0cmluZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc3RyaW5nLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N0cmluZy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3VwZXJpby5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3VwZXJpby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc3VwZXJpby5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zdXBlcmlvLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGVybWJpdHMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy90ZXJtYml0cy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGVybWlvcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGVybWlvcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdGVybWlvcy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDc5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX0FTTV9QQVJJU0NfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1BBUklTQ19USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbiAqZXhlY19kb21haW47LyogZXhlY3V0aW9uIGRvbWFpbiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiB0aHJlYWRfaW5mbyBmbGFncyAoc2VlIFRJRl8qKSAqLworCW1tX3NlZ21lbnRfdCBhZGRyX2xpbWl0OwkvKiB1c2VyLWxldmVsIGFkZHJlc3Mgc3BhY2UgbGltaXQgKi8KKwlfX3UzMiBjcHU7CQkJLyogY3VycmVudCBDUFUgKi8KKwlpbnQgcHJlZW1wdF9jb3VudDsJCS8qIDA9cHJlbXB0YWJsZSwgPDA9QlVHOyB3aWxsIGFsc28gc2VydmUgYXMgYmgtY291bnRlciAqLworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrIHJlc3RhcnRfYmxvY2s7Cit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKK3sJCQkJCQlcCisJLnRhc2sJCT0gJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluCT0gJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuZmxhZ3MJCT0gMCwJCQlcCisJLmNwdQkJPSAwLAkJCVwKKwkuYWRkcl9saW1pdAk9IEtFUk5FTF9EUywJCVwKKwkucHJlZW1wdF9jb3VudAk9IDEsCQkJXAorICAJLnJlc3RhcnRfYmxvY2sJPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwJXAorCX0JCQkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvICAgICAgICAoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sgICAgICAgICAgICAgIChpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKworI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiAgICAgICAgICAgIDIKKy8qIEJlIHN1cmUgdG8gaHVudCBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIGRvd24gd2hlbiB5b3UgY2hhbmdlIHRoZSBzaXplIG9mCisgKiB0aGUga2VybmVsIHN0YWNrICovCisjZGVmaW5lIFRIUkVBRF9TSVpFICAgICAgICAgICAgIChQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9TSElGVCAgICAgICAgICAgIChQQUdFX1NISUZUICsgVEhSRUFEX1NJWkVfT1JERVIpCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCisjZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKW1mY3RsKDMwKSkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZICovCisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkVfQklUCTI4CisjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkoMSA8PCBQUkVFTVBUX0FDVElWRV9CSVQpCisKKy8qCisgKiB0aHJlYWQgaW5mb3JtYXRpb24gZmxhZ3MKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkxCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMgkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkzCS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl8zMkJJVCAgICAgICAgICAgICAgIDQgICAgICAgLyogMzIgYml0IGJpbmFyeSAqLworI2RlZmluZSBUSUZfTUVNRElFCQk1CisjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNgkvKiByZXN0b3JlIHNhdmVkIHNpZ25hbCBtYXNrICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTcJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KKworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGXzMyQklUCQkoMSA8PCBUSUZfMzJCSVQpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQorCisjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sgICAgIChfVElGX1NJR1BFTkRJTkcgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVElGX05FRURfUkVTQ0hFRCB8IF9USUZfUkVTVE9SRV9TSUdNQVNLKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9QQVJJU0NfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RpbWV4LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aW1leC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdGltZXguaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGltZXguaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RsYi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGxiLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy90bGIuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGxiLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90bGJmbHVzaC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGxiZmx1c2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90b3BvbG9neS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3RvcG9sb2d5LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90cmFwcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdHJhcHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3RyYXBzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RyYXBzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90eXBlcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3R5cGVzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3R5cGVzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91YWNjZXNzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy91YWNjZXNzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Vjb250ZXh0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdWNvbnRleHQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdWNvbnRleHQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuYWxpZ25lZC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy91bmFsaWduZWQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyNmIwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0wLDAgKzEsOTk3IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX1VOSVNURF9IXworI2RlZmluZSBfQVNNX1BBUklTQ19VTklTVERfSF8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqLworCisvKgorICogICBIUC1VWCBzeXN0ZW0gY2FsbHMgZ2V0IHRoZWlyIG5hdGl2ZSBudW1iZXJzIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKyAqLworCisjZGVmaW5lIF9fTlJfSFBVWF9leGl0ICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIF9fTlJfSFBVWF9mb3JrICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIF9fTlJfSFBVWF9yZWFkICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIF9fTlJfSFBVWF93cml0ZSAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIF9fTlJfSFBVWF9vcGVuICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIF9fTlJfSFBVWF9jbG9zZSAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIF9fTlJfSFBVWF93YWl0ICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIF9fTlJfSFBVWF9jcmVhdCAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIF9fTlJfSFBVWF9saW5rICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIF9fTlJfSFBVWF91bmxpbmsgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIF9fTlJfSFBVWF9leGVjdiAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIF9fTlJfSFBVWF9jaGRpciAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIF9fTlJfSFBVWF90aW1lICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIF9fTlJfSFBVWF9ta25vZCAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIF9fTlJfSFBVWF9jaG1vZCAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIF9fTlJfSFBVWF9jaG93biAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fTlJfSFBVWF9icmVhayAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIF9fTlJfSFBVWF9sY2htb2QgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIF9fTlJfSFBVWF9sc2VlayAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRwaWQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIF9fTlJfSFBVWF9tb3VudCAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIF9fTlJfSFBVWF91bW91bnQgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIF9fTlJfSFBVWF9zZXR1aWQgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIF9fTlJfSFBVWF9nZXR1aWQgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIF9fTlJfSFBVWF9zdGltZSAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIF9fTlJfSFBVWF9wdHJhY2UgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIF9fTlJfSFBVWF9hbGFybSAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIF9fTlJfSFBVWF9vbGRmc3RhdCAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIF9fTlJfSFBVWF9wYXVzZSAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIF9fTlJfSFBVWF91dGltZSAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIF9fTlJfSFBVWF9zdHR5ICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIF9fTlJfSFBVWF9ndHR5ICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIF9fTlJfSFBVWF9hY2Nlc3MgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIF9fTlJfSFBVWF9uaWNlICAgICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIF9fTlJfSFBVWF9mdGltZSAgICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIF9fTlJfSFBVWF9zeW5jICAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIF9fTlJfSFBVWF9raWxsICAgICAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIF9fTlJfSFBVWF9zdGF0ICAgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRwZ3JwMyAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIF9fTlJfSFBVWF9sc3RhdCAgICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIF9fTlJfSFBVWF9kdXAgICAgICAgICAgICAgICAgICAgIDQxCisjZGVmaW5lIF9fTlJfSFBVWF9waXBlICAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIF9fTlJfSFBVWF90aW1lcyAgICAgICAgICAgICAgICAgIDQzCisjZGVmaW5lIF9fTlJfSFBVWF9wcm9maWwgICAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIF9fTlJfSFBVWF9raV9jYWxsICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRnaWQgICAgICAgICAgICAgICAgIDQ2CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRnaWQgICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdzeXMgICAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDEgICAgICAgICAgICAgIDQ5CisjZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDIgICAgICAgICAgICAgIDUwCisjZGVmaW5lIF9fTlJfSFBVWF9hY2N0ICAgICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIF9fTlJfSFBVWF9zZXRfdXNlcnRocmVhZGlkICAgICAgIDUyCisjZGVmaW5lIF9fTlJfSFBVWF9vbGRsb2NrICAgICAgICAgICAgICAgIDUzCisjZGVmaW5lIF9fTlJfSFBVWF9pb2N0bCAgICAgICAgICAgICAgICAgIDU0CisjZGVmaW5lIF9fTlJfSFBVWF9yZWJvb3QgICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIF9fTlJfSFBVWF9zeW1saW5rICAgICAgICAgICAgICAgIDU2CisjZGVmaW5lIF9fTlJfSFBVWF91dHNzeXMgICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIF9fTlJfSFBVWF9yZWFkbGluayAgICAgICAgICAgICAgIDU4CisjZGVmaW5lIF9fTlJfSFBVWF9leGVjdmUgICAgICAgICAgICAgICAgIDU5CisjZGVmaW5lIF9fTlJfSFBVWF91bWFzayAgICAgICAgICAgICAgICAgIDYwCisjZGVmaW5lIF9fTlJfSFBVWF9jaHJvb3QgICAgICAgICAgICAgICAgIDYxCisjZGVmaW5lIF9fTlJfSFBVWF9mY250bCAgICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIF9fTlJfSFBVWF91bGltaXQgICAgICAgICAgICAgICAgIDYzCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRwYWdlc2l6ZSAgICAgICAgICAgIDY0CisjZGVmaW5lIF9fTlJfSFBVWF9tcmVtYXAgICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIF9fTlJfSFBVWF92Zm9yayAgICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIF9fTlJfSFBVWF92cmVhZCAgICAgICAgICAgICAgICAgIDY3CisjZGVmaW5lIF9fTlJfSFBVWF92d3JpdGUgICAgICAgICAgICAgICAgIDY4CisjZGVmaW5lIF9fTlJfSFBVWF9zYnJrICAgICAgICAgICAgICAgICAgIDY5CisjZGVmaW5lIF9fTlJfSFBVWF9zc3RrICAgICAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIF9fTlJfSFBVWF9tbWFwICAgICAgICAgICAgICAgICAgIDcxCisjZGVmaW5lIF9fTlJfSFBVWF92YWR2aXNlICAgICAgICAgICAgICAgIDcyCisjZGVmaW5lIF9fTlJfSFBVWF9tdW5tYXAgICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIF9fTlJfSFBVWF9tcHJvdGVjdCAgICAgICAgICAgICAgIDc0CisjZGVmaW5lIF9fTlJfSFBVWF9tYWR2aXNlICAgICAgICAgICAgICAgIDc1CisjZGVmaW5lIF9fTlJfSFBVWF92aGFuZ3VwICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIF9fTlJfSFBVWF9zd2Fwb2ZmICAgICAgICAgICAgICAgIDc3CisjZGVmaW5lIF9fTlJfSFBVWF9taW5jb3JlICAgICAgICAgICAgICAgIDc4CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRncm91cHMgICAgICAgICAgICAgIDc5CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRncm91cHMgICAgICAgICAgICAgIDgwCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRwZ3JwMiAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIF9fTlJfSFBVWF9zZXRwZ3JwMiAgICAgICAgICAgICAgIDgyCisjZGVmaW5lIF9fTlJfSFBVWF9zZXRpdGltZXIgICAgICAgICAgICAgIDgzCisjZGVmaW5lIF9fTlJfSFBVWF93YWl0MyAgICAgICAgICAgICAgICAgIDg0CisjZGVmaW5lIF9fTlJfSFBVWF9zd2Fwb24gICAgICAgICAgICAgICAgIDg1CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRpdGltZXIgICAgICAgICAgICAgIDg2CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRob3N0bmFtZTQyICAgICAgICAgIDg3CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRob3N0bmFtZTQyICAgICAgICAgIDg4CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRkdGFibGVzaXplICAgICAgICAgIDg5CisjZGVmaW5lIF9fTlJfSFBVWF9kdXAyICAgICAgICAgICAgICAgICAgIDkwCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRkb3B0ICAgICAgICAgICAgICAgIDkxCisjZGVmaW5lIF9fTlJfSFBVWF9mc3RhdCAgICAgICAgICAgICAgICAgIDkyCisjZGVmaW5lIF9fTlJfSFBVWF9zZWxlY3QgICAgICAgICAgICAgICAgIDkzCisjZGVmaW5lIF9fTlJfSFBVWF9zZXRkb3B0ICAgICAgICAgICAgICAgIDk0CisjZGVmaW5lIF9fTlJfSFBVWF9mc3luYyAgICAgICAgICAgICAgICAgIDk1CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRwcmlvcml0eSAgICAgICAgICAgIDk2CisjZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXRfb2xkICAgICAgICAgICAgIDk3CisjZGVmaW5lIF9fTlJfSFBVWF9jb25uZWN0X29sZCAgICAgICAgICAgIDk4CisjZGVmaW5lIF9fTlJfSFBVWF9hY2NlcHRfb2xkICAgICAgICAgICAgIDk5CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRwcmlvcml0eSAgICAgICAgICAgMTAwCisjZGVmaW5lIF9fTlJfSFBVWF9zZW5kX29sZCAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIF9fTlJfSFBVWF9yZWN2X29sZCAgICAgICAgICAgICAgMTAyCisjZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXRhZGRyX29sZCAgICAgICAgMTAzCisjZGVmaW5lIF9fTlJfSFBVWF9iaW5kX29sZCAgICAgICAgICAgICAgMTA0CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRzb2Nrb3B0X29sZCAgICAgICAgMTA1CisjZGVmaW5lIF9fTlJfSFBVWF9saXN0ZW5fb2xkICAgICAgICAgICAgMTA2CisjZGVmaW5lIF9fTlJfSFBVWF92dGltZXNfb2xkICAgICAgICAgICAgMTA3CisjZGVmaW5lIF9fTlJfSFBVWF9zaWd2ZWN0b3IgICAgICAgICAgICAgMTA4CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdibG9jayAgICAgICAgICAgICAgMTA5CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdnZXRtYXNrICAgICAgICAgICAgMTEwCisjZGVmaW5lIF9fTlJfSFBVWF9zaWdwYXVzZSAgICAgICAgICAgICAgMTExCisjZGVmaW5lIF9fTlJfSFBVWF9zaWdzdGFjayAgICAgICAgICAgICAgMTEyCisjZGVmaW5lIF9fTlJfSFBVWF9yZWN2bXNnX29sZCAgICAgICAgICAgMTEzCisjZGVmaW5lIF9fTlJfSFBVWF9zZW5kbXNnX29sZCAgICAgICAgICAgMTE0CisjZGVmaW5lIF9fTlJfSFBVWF92dHJhY2Vfb2xkICAgICAgICAgICAgMTE1CisjZGVmaW5lIF9fTlJfSFBVWF9nZXR0aW1lb2ZkYXkgICAgICAgICAgMTE2CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRydXNhZ2UgICAgICAgICAgICAgMTE3CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRzb2Nrb3B0X29sZCAgICAgICAgMTE4CisjZGVmaW5lIF9fTlJfSFBVWF9yZXN1YmFfb2xkICAgICAgICAgICAgMTE5CisjZGVmaW5lIF9fTlJfSFBVWF9yZWFkdiAgICAgICAgICAgICAgICAgMTIwCisjZGVmaW5lIF9fTlJfSFBVWF93cml0ZXYgICAgICAgICAgICAgICAgMTIxCisjZGVmaW5lIF9fTlJfSFBVWF9zZXR0aW1lb2ZkYXkgICAgICAgICAgMTIyCisjZGVmaW5lIF9fTlJfSFBVWF9mY2hvd24gICAgICAgICAgICAgICAgMTIzCisjZGVmaW5lIF9fTlJfSFBVWF9mY2htb2QgICAgICAgICAgICAgICAgMTI0CisjZGVmaW5lIF9fTlJfSFBVWF9yZWN2ZnJvbV9vbGQgICAgICAgICAgMTI1CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRyZXN1aWQgICAgICAgICAgICAgMTI2CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRyZXNnaWQgICAgICAgICAgICAgMTI3CisjZGVmaW5lIF9fTlJfSFBVWF9yZW5hbWUgICAgICAgICAgICAgICAgMTI4CisjZGVmaW5lIF9fTlJfSFBVWF90cnVuY2F0ZSAgICAgICAgICAgICAgMTI5CisjZGVmaW5lIF9fTlJfSFBVWF9mdHJ1bmNhdGUgICAgICAgICAgICAgMTMwCisjZGVmaW5lIF9fTlJfSFBVWF9mbG9ja19vbGQgICAgICAgICAgICAgMTMxCisjZGVmaW5lIF9fTlJfSFBVWF9zeXNjb25mICAgICAgICAgICAgICAgMTMyCisjZGVmaW5lIF9fTlJfSFBVWF9zZW5kdG9fb2xkICAgICAgICAgICAgMTMzCisjZGVmaW5lIF9fTlJfSFBVWF9zaHV0ZG93bl9vbGQgICAgICAgICAgMTM0CisjZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXRwYWlyX29sZCAgICAgICAgMTM1CisjZGVmaW5lIF9fTlJfSFBVWF9ta2RpciAgICAgICAgICAgICAgICAgMTM2CisjZGVmaW5lIF9fTlJfSFBVWF9ybWRpciAgICAgICAgICAgICAgICAgMTM3CisjZGVmaW5lIF9fTlJfSFBVWF91dGltZXNfb2xkICAgICAgICAgICAgMTM4CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdjbGVhbnVwX29sZCAgICAgICAgMTM5CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRjb3JlICAgICAgICAgICAgICAgMTQwCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRwZWVybmFtZV9vbGQgICAgICAgMTQxCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRob3N0aWQgICAgICAgICAgICAgMTQyCisjZGVmaW5lIF9fTlJfSFBVWF9zZXRob3N0aWQgICAgICAgICAgICAgMTQzCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRybGltaXQgICAgICAgICAgICAgMTQ0CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRybGltaXQgICAgICAgICAgICAgMTQ1CisjZGVmaW5lIF9fTlJfSFBVWF9raWxscGdfb2xkICAgICAgICAgICAgMTQ2CisjZGVmaW5lIF9fTlJfSFBVWF9jYWNoZWN0bCAgICAgICAgICAgICAgMTQ3CisjZGVmaW5lIF9fTlJfSFBVWF9xdW90YWN0bCAgICAgICAgICAgICAgMTQ4CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRfc3lzaW5mbyAgICAgICAgICAgMTQ5CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRzb2NrbmFtZV9vbGQgICAgICAgMTUwCisjZGVmaW5lIF9fTlJfSFBVWF9wcml2Z3JwICAgICAgICAgICAgICAgMTUxCisjZGVmaW5lIF9fTlJfSFBVWF9ydHByaW8gICAgICAgICAgICAgICAgMTUyCisjZGVmaW5lIF9fTlJfSFBVWF9wbG9jayAgICAgICAgICAgICAgICAgMTUzCisjZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDMgICAgICAgICAgICAgMTU0CisjZGVmaW5lIF9fTlJfSFBVWF9sb2NrZiAgICAgICAgICAgICAgICAgMTU1CisjZGVmaW5lIF9fTlJfSFBVWF9zZW1nZXQgICAgICAgICAgICAgICAgMTU2CisjZGVmaW5lIF9fTlJfSFBVWF9vc2VtY3RsICAgICAgICAgICAgICAgMTU3CisjZGVmaW5lIF9fTlJfSFBVWF9zZW1vcCAgICAgICAgICAgICAgICAgMTU4CisjZGVmaW5lIF9fTlJfSFBVWF9tc2dnZXQgICAgICAgICAgICAgICAgMTU5CisjZGVmaW5lIF9fTlJfSFBVWF9vbXNnY3RsICAgICAgICAgICAgICAgMTYwCisjZGVmaW5lIF9fTlJfSFBVWF9tc2dzbmQgICAgICAgICAgICAgICAgMTYxCisjZGVmaW5lIF9fTlJfSFBVWF9tc2dyZWN2ICAgICAgICAgICAgICAgMTYyCisjZGVmaW5lIF9fTlJfSFBVWF9zaG1nZXQgICAgICAgICAgICAgICAgMTYzCisjZGVmaW5lIF9fTlJfSFBVWF9vc2htY3RsICAgICAgICAgICAgICAgMTY0CisjZGVmaW5lIF9fTlJfSFBVWF9zaG1hdCAgICAgICAgICAgICAgICAgMTY1CisjZGVmaW5lIF9fTlJfSFBVWF9zaG1kdCAgICAgICAgICAgICAgICAgMTY2CisjZGVmaW5lIF9fTlJfSFBVWF9tNjgwMjBfYWR2aXNlICAgICAgICAgMTY3CisvKiBbMTY4LDE4OV0gYXJlIGZvciBEaXNjbGVzcy9EVVggKi8KKyNkZWZpbmUgX19OUl9IUFVYX2NzcCAgICAgICAgICAgICAgICAgICAxNjgKKyNkZWZpbmUgX19OUl9IUFVYX2NsdXN0ZXIgICAgICAgICAgICAgICAxNjkKKyNkZWZpbmUgX19OUl9IUFVYX21rcm5vZCAgICAgICAgICAgICAgICAxNzAKKyNkZWZpbmUgX19OUl9IUFVYX3Rlc3QgICAgICAgICAgICAgICAgICAxNzEKKyNkZWZpbmUgX19OUl9IUFVYX3Vuc3Bfb3BlbiAgICAgICAgICAgICAxNzIKKyNkZWZpbmUgX19OUl9IUFVYX3Jlc2VydmVkNCAgICAgICAgICAgICAxNzMKKyNkZWZpbmUgX19OUl9IUFVYX2dldGNvbnRleHRfb2xkICAgICAgICAxNzQKKyNkZWZpbmUgX19OUl9IUFVYX29zZXRjb250ZXh0ICAgICAgICAgICAxNzUKKyNkZWZpbmUgX19OUl9IUFVYX2JpZ2lvICAgICAgICAgICAgICAgICAxNzYKKyNkZWZpbmUgX19OUl9IUFVYX3BpcGVub2RlICAgICAgICAgICAgICAxNzcKKyNkZWZpbmUgX19OUl9IUFVYX2xzeW5jICAgICAgICAgICAgICAgICAxNzgKKyNkZWZpbmUgX19OUl9IUFVYX2dldG1hY2hpbmVpZCAgICAgICAgICAxNzkKKyNkZWZpbmUgX19OUl9IUFVYX2Nub2RlaWQgICAgICAgICAgICAgICAxODAKKyNkZWZpbmUgX19OUl9IUFVYX2Nub2RlcyAgICAgICAgICAgICAgICAxODEKKyNkZWZpbmUgX19OUl9IUFVYX3N3YXBjbGllbnRzICAgICAgICAgICAxODIKKyNkZWZpbmUgX19OUl9IUFVYX3JtdF9wcm9jZXNzICAgICAgICAgICAxODMKKyNkZWZpbmUgX19OUl9IUFVYX2Rza2xlc3Nfc3RhdHMgICAgICAgICAxODQKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ3Byb2NtYXNrICAgICAgICAgICAxODUKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ3BlbmRpbmcgICAgICAgICAgICAxODYKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ3N1c3BlbmQgICAgICAgICAgICAxODcKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ2FjdGlvbiAgICAgICAgICAgICAxODgKKyNkZWZpbmUgX19OUl9IUFVYX3Jlc2VydmVkNSAgICAgICAgICAgICAxODkKKyNkZWZpbmUgX19OUl9IUFVYX25mc3N2YyAgICAgICAgICAgICAgICAxOTAKKyNkZWZpbmUgX19OUl9IUFVYX2dldGZoICAgICAgICAgICAgICAgICAxOTEKKyNkZWZpbmUgX19OUl9IUFVYX2dldGRvbWFpbm5hbWUgICAgICAgICAxOTIKKyNkZWZpbmUgX19OUl9IUFVYX3NldGRvbWFpbm5hbWUgICAgICAgICAxOTMKKyNkZWZpbmUgX19OUl9IUFVYX2FzeW5jX2RhZW1vbiAgICAgICAgICAxOTQKKyNkZWZpbmUgX19OUl9IUFVYX2dldGRpcmVudHJpZXMgICAgICAgICAxOTUKKyNkZWZpbmUgX19OUl9IUFVYX3N0YXRmcyAgICAgICAgICAgICAgICAxOTYKKyNkZWZpbmUgX19OUl9IUFVYX2ZzdGF0ZnMgICAgICAgICAgICAgICAxOTcKKyNkZWZpbmUgX19OUl9IUFVYX3Zmc21vdW50ICAgICAgICAgICAgICAxOTgKKyNkZWZpbmUgX19OUl9IUFVYX3Jlc2VydmVkNiAgICAgICAgICAgICAxOTkKKyNkZWZpbmUgX19OUl9IUFVYX3dhaXRwaWQgICAgICAgICAgICAgICAyMDAKKy8qIDIwMSAtIDIyMyBtaXNzaW5nICovCisjZGVmaW5lIF9fTlJfSFBVWF9zaWdzZXRyZXR1cm4gICAgICAgICAgMjI0CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdzZXRzdGF0ZW1hc2sgICAgICAgMjI1CisvKiAyMjYgbWlzc2luZyAqLworI2RlZmluZSBfX05SX0hQVVhfY3MgICAgICAgICAgICAgICAgICAgIDIyNworI2RlZmluZSBfX05SX0hQVVhfY2RzICAgICAgICAgICAgICAgICAgIDIyOAorI2RlZmluZSBfX05SX0hQVVhfc2V0X25vX3RydW5jICAgICAgICAgIDIyOQorI2RlZmluZSBfX05SX0hQVVhfcGF0aGNvbmYgICAgICAgICAgICAgIDIzMAorI2RlZmluZSBfX05SX0hQVVhfZnBhdGhjb25mICAgICAgICAgICAgIDIzMQorLyogMjMyLCAyMzMgbWlzc2luZyAqLworI2RlZmluZSBfX05SX0hQVVhfbmZzX2ZjbnRsICAgICAgICAgICAgIDIzNAorI2RlZmluZSBfX05SX0hQVVhfb2dldGFjbCAgICAgICAgICAgICAgIDIzNQorI2RlZmluZSBfX05SX0hQVVhfb2ZnZXRhY2wgICAgICAgICAgICAgIDIzNgorI2RlZmluZSBfX05SX0hQVVhfb3NldGFjbCAgICAgICAgICAgICAgIDIzNworI2RlZmluZSBfX05SX0hQVVhfb2ZzZXRhY2wgICAgICAgICAgICAgIDIzOAorI2RlZmluZSBfX05SX0hQVVhfcHN0YXQgICAgICAgICAgICAgICAgIDIzOQorI2RlZmluZSBfX05SX0hQVVhfZ2V0YXVkaWQgICAgICAgICAgICAgIDI0MAorI2RlZmluZSBfX05SX0hQVVhfc2V0YXVkaWQgICAgICAgICAgICAgIDI0MQorI2RlZmluZSBfX05SX0hQVVhfZ2V0YXVkcHJvYyAgICAgICAgICAgIDI0MgorI2RlZmluZSBfX05SX0hQVVhfc2V0YXVkcHJvYyAgICAgICAgICAgIDI0MworI2RlZmluZSBfX05SX0hQVVhfZ2V0ZXZlbnQgICAgICAgICAgICAgIDI0NAorI2RlZmluZSBfX05SX0hQVVhfc2V0ZXZlbnQgICAgICAgICAgICAgIDI0NQorI2RlZmluZSBfX05SX0hQVVhfYXVkd3JpdGUgICAgICAgICAgICAgIDI0NgorI2RlZmluZSBfX05SX0hQVVhfYXVkc3dpdGNoICAgICAgICAgICAgIDI0NworI2RlZmluZSBfX05SX0hQVVhfYXVkY3RsICAgICAgICAgICAgICAgIDI0OAorI2RlZmluZSBfX05SX0hQVVhfb2dldGFjY2VzcyAgICAgICAgICAgIDI0OQorI2RlZmluZSBfX05SX0hQVVhfZnNjdGwgICAgICAgICAgICAgICAgIDI1MAorLyogMjUxIC0gMjU4IG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX3N3YXBmcyAgICAgICAgICAgICAgICAyNTkKKyNkZWZpbmUgX19OUl9IUFVYX2ZzcyAgICAgICAgICAgICAgICAgICAyNjAKKy8qIDI2MSAtIDI2NiBtaXNzaW5nICovCisjZGVmaW5lIF9fTlJfSFBVWF90c3luYyAgICAgICAgICAgICAgICAgMjY3CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRudW1mZHMgICAgICAgICAgICAgMjY4CisjZGVmaW5lIF9fTlJfSFBVWF9wb2xsICAgICAgICAgICAgICAgICAgMjY5CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRtc2cgICAgICAgICAgICAgICAgMjcwCisjZGVmaW5lIF9fTlJfSFBVWF9wdXRtc2cgICAgICAgICAgICAgICAgMjcxCisjZGVmaW5lIF9fTlJfSFBVWF9mY2hkaXIgICAgICAgICAgICAgICAgMjcyCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRtb3VudF9jbnQgICAgICAgICAgMjczCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRtb3VudF9lbnRyeSAgICAgICAgMjc0CisjZGVmaW5lIF9fTlJfSFBVWF9hY2NlcHQgICAgICAgICAgICAgICAgMjc1CisjZGVmaW5lIF9fTlJfSFBVWF9iaW5kICAgICAgICAgICAgICAgICAgMjc2CisjZGVmaW5lIF9fTlJfSFBVWF9jb25uZWN0ICAgICAgICAgICAgICAgMjc3CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRwZWVybmFtZSAgICAgICAgICAgMjc4CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRzb2NrbmFtZSAgICAgICAgICAgMjc5CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRzb2Nrb3B0ICAgICAgICAgICAgMjgwCisjZGVmaW5lIF9fTlJfSFBVWF9saXN0ZW4gICAgICAgICAgICAgICAgMjgxCisjZGVmaW5lIF9fTlJfSFBVWF9yZWN2ICAgICAgICAgICAgICAgICAgMjgyCisjZGVmaW5lIF9fTlJfSFBVWF9yZWN2ZnJvbSAgICAgICAgICAgICAgMjgzCisjZGVmaW5lIF9fTlJfSFBVWF9yZWN2bXNnICAgICAgICAgICAgICAgMjg0CisjZGVmaW5lIF9fTlJfSFBVWF9zZW5kICAgICAgICAgICAgICAgICAgMjg1CisjZGVmaW5lIF9fTlJfSFBVWF9zZW5kbXNnICAgICAgICAgICAgICAgMjg2CisjZGVmaW5lIF9fTlJfSFBVWF9zZW5kdG8gICAgICAgICAgICAgICAgMjg3CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRzb2Nrb3B0ICAgICAgICAgICAgMjg4CisjZGVmaW5lIF9fTlJfSFBVWF9zaHV0ZG93biAgICAgICAgICAgICAgMjg5CisjZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXQgICAgICAgICAgICAgICAgMjkwCisjZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXRwYWlyICAgICAgICAgICAgMjkxCisjZGVmaW5lIF9fTlJfSFBVWF9wcm9jX29wZW4gICAgICAgICAgICAgMjkyCisjZGVmaW5lIF9fTlJfSFBVWF9wcm9jX2Nsb3NlICAgICAgICAgICAgMjkzCisjZGVmaW5lIF9fTlJfSFBVWF9wcm9jX3NlbmQgICAgICAgICAgICAgMjk0CisjZGVmaW5lIF9fTlJfSFBVWF9wcm9jX3JlY3YgICAgICAgICAgICAgMjk1CisjZGVmaW5lIF9fTlJfSFBVWF9wcm9jX3NlbmRyZWN2ICAgICAgICAgMjk2CisjZGVmaW5lIF9fTlJfSFBVWF9wcm9jX3N5c2NhbGwgICAgICAgICAgMjk3CisvKiAyOTggLSAzMTEgbWlzc2luZyAqLworI2RlZmluZSBfX05SX0hQVVhfc2VtY3RsICAgICAgICAgICAgICAgIDMxMgorI2RlZmluZSBfX05SX0hQVVhfbXNnY3RsICAgICAgICAgICAgICAgIDMxMworI2RlZmluZSBfX05SX0hQVVhfc2htY3RsICAgICAgICAgICAgICAgIDMxNAorI2RlZmluZSBfX05SX0hQVVhfbXBjdGwgICAgICAgICAgICAgICAgIDMxNQorI2RlZmluZSBfX05SX0hQVVhfZXhwb3J0ZnMgICAgICAgICAgICAgIDMxNgorI2RlZmluZSBfX05SX0hQVVhfZ2V0cG1zZyAgICAgICAgICAgICAgIDMxNworI2RlZmluZSBfX05SX0hQVVhfcHV0cG1zZyAgICAgICAgICAgICAgIDMxOAorLyogMzE5IG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX21zeW5jICAgICAgICAgICAgICAgICAzMjAKKyNkZWZpbmUgX19OUl9IUFVYX21zbGVlcCAgICAgICAgICAgICAgICAzMjEKKyNkZWZpbmUgX19OUl9IUFVYX213YWtldXAgICAgICAgICAgICAgICAzMjIKKyNkZWZpbmUgX19OUl9IUFVYX21zZW1faW5pdCAgICAgICAgICAgICAzMjMKKyNkZWZpbmUgX19OUl9IUFVYX21zZW1fcmVtb3ZlICAgICAgICAgICAzMjQKKyNkZWZpbmUgX19OUl9IUFVYX2FkanRpbWUgICAgICAgICAgICAgICAzMjUKKyNkZWZpbmUgX19OUl9IUFVYX2tsb2FkICAgICAgICAgICAgICAgICAzMjYKKyNkZWZpbmUgX19OUl9IUFVYX2ZhdHRhY2ggICAgICAgICAgICAgICAzMjcKKyNkZWZpbmUgX19OUl9IUFVYX2ZkZXRhY2ggICAgICAgICAgICAgICAzMjgKKyNkZWZpbmUgX19OUl9IUFVYX3NlcmlhbGl6ZSAgICAgICAgICAgICAzMjkKKyNkZWZpbmUgX19OUl9IUFVYX3N0YXR2ZnMgICAgICAgICAgICAgICAzMzAKKyNkZWZpbmUgX19OUl9IUFVYX2ZzdGF0dmZzICAgICAgICAgICAgICAzMzEKKyNkZWZpbmUgX19OUl9IUFVYX2xjaG93biAgICAgICAgICAgICAgICAzMzIKKyNkZWZpbmUgX19OUl9IUFVYX2dldHNpZCAgICAgICAgICAgICAgICAzMzMKKyNkZWZpbmUgX19OUl9IUFVYX3N5c2ZzICAgICAgICAgICAgICAgICAzMzQKKy8qIDMzNSwgMzM2IG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX3NldHBhcmFtICAgICAgICAzMzcKKyNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX2dldHBhcmFtICAgICAgICAzMzgKKyNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX3NldHNjaGVkdWxlciAgICAzMzkKKyNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX2dldHNjaGVkdWxlciAgICAzNDAKKyNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX3lpZWxkICAgICAgICAgICAzNDEKKyNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX2dldF9wcmlvcml0eV9tYXggMzQyCisjZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIDM0MworI2RlZmluZSBfX05SX0hQVVhfc2NoZWRfcnJfZ2V0X2ludGVydmFsIDM0NAorI2RlZmluZSBfX05SX0hQVVhfY2xvY2tfc2V0dGltZSAgICAgICAgIDM0NQorI2RlZmluZSBfX05SX0hQVVhfY2xvY2tfZ2V0dGltZSAgICAgICAgIDM0NgorI2RlZmluZSBfX05SX0hQVVhfY2xvY2tfZ2V0cmVzICAgICAgICAgIDM0NworI2RlZmluZSBfX05SX0hQVVhfdGltZXJfY3JlYXRlICAgICAgICAgIDM0OAorI2RlZmluZSBfX05SX0hQVVhfdGltZXJfZGVsZXRlICAgICAgICAgIDM0OQorI2RlZmluZSBfX05SX0hQVVhfdGltZXJfc2V0dGltZSAgICAgICAgIDM1MAorI2RlZmluZSBfX05SX0hQVVhfdGltZXJfZ2V0dGltZSAgICAgICAgIDM1MQorI2RlZmluZSBfX05SX0hQVVhfdGltZXJfZ2V0b3ZlcnJ1biAgICAgIDM1MgorI2RlZmluZSBfX05SX0hQVVhfbmFub3NsZWVwICAgICAgICAgICAgIDM1MworI2RlZmluZSBfX05SX0hQVVhfdG9vbGJveCAgICAgICAgICAgICAgIDM1NAorLyogMzU1IG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX2dldGRlbnRzICAgICAgICAgICAgICAzNTYKKyNkZWZpbmUgX19OUl9IUFVYX2dldGNvbnRleHQgICAgICAgICAgICAzNTcKKyNkZWZpbmUgX19OUl9IUFVYX3N5c2luZm8gICAgICAgICAgICAgICAzNTgKKyNkZWZpbmUgX19OUl9IUFVYX2ZjbnRsNjQgICAgICAgICAgICAgICAzNTkKKyNkZWZpbmUgX19OUl9IUFVYX2Z0cnVuY2F0ZTY0ICAgICAgICAgICAzNjAKKyNkZWZpbmUgX19OUl9IUFVYX2ZzdGF0NjQgICAgICAgICAgICAgICAzNjEKKyNkZWZpbmUgX19OUl9IUFVYX2dldGRpcmVudHJpZXM2NCAgICAgICAzNjIKKyNkZWZpbmUgX19OUl9IUFVYX2dldHJsaW1pdDY0ICAgICAgICAgICAzNjMKKyNkZWZpbmUgX19OUl9IUFVYX2xvY2tmNjQgICAgICAgICAgICAgICAzNjQKKyNkZWZpbmUgX19OUl9IUFVYX2xzZWVrNjQgICAgICAgICAgICAgICAzNjUKKyNkZWZpbmUgX19OUl9IUFVYX2xzdGF0NjQgICAgICAgICAgICAgICAzNjYKKyNkZWZpbmUgX19OUl9IUFVYX21tYXA2NCAgICAgICAgICAgICAgICAzNjcKKyNkZWZpbmUgX19OUl9IUFVYX3NldHJsaW1pdDY0ICAgICAgICAgICAzNjgKKyNkZWZpbmUgX19OUl9IUFVYX3N0YXQ2NCAgICAgICAgICAgICAgICAzNjkKKyNkZWZpbmUgX19OUl9IUFVYX3RydW5jYXRlNjQgICAgICAgICAgICAzNzAKKyNkZWZpbmUgX19OUl9IUFVYX3VsaW1pdDY0ICAgICAgICAgICAgICAzNzEKKyNkZWZpbmUgX19OUl9IUFVYX3ByZWFkICAgICAgICAgICAgICAgICAzNzIKKyNkZWZpbmUgX19OUl9IUFVYX3ByZWFkdiAgICAgICAgICAgICAgICAzNzMKKyNkZWZpbmUgX19OUl9IUFVYX3B3cml0ZSAgICAgICAgICAgICAgICAzNzQKKyNkZWZpbmUgX19OUl9IUFVYX3B3cml0ZXYgICAgICAgICAgICAgICAzNzUKKyNkZWZpbmUgX19OUl9IUFVYX3ByZWFkNjQgICAgICAgICAgICAgICAzNzYKKyNkZWZpbmUgX19OUl9IUFVYX3ByZWFkdjY0ICAgICAgICAgICAgICAzNzcKKyNkZWZpbmUgX19OUl9IUFVYX3B3cml0ZTY0ICAgICAgICAgICAgICAzNzgKKyNkZWZpbmUgX19OUl9IUFVYX3B3cml0ZXY2NCAgICAgICAgICAgICAzNzkKKyNkZWZpbmUgX19OUl9IUFVYX3NldGNvbnRleHQgICAgICAgICAgICAzODAKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ2FsdHN0YWNrICAgICAgICAgICAzODEKKyNkZWZpbmUgX19OUl9IUFVYX3dhaXRpZCAgICAgICAgICAgICAgICAzODIKKyNkZWZpbmUgX19OUl9IUFVYX3NldHBncnAgICAgICAgICAgICAgICAzODMKKyNkZWZpbmUgX19OUl9IUFVYX3JlY3Ztc2cyICAgICAgICAgICAgICAzODQKKyNkZWZpbmUgX19OUl9IUFVYX3NlbmRtc2cyICAgICAgICAgICAgICAzODUKKyNkZWZpbmUgX19OUl9IUFVYX3NvY2tldDIgICAgICAgICAgICAgICAzODYKKyNkZWZpbmUgX19OUl9IUFVYX3NvY2tldHBhaXIyICAgICAgICAgICAzODcKKyNkZWZpbmUgX19OUl9IUFVYX3NldHJlZ2lkICAgICAgICAgICAgICAzODgKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9jcmVhdGUgICAgICAgICAgICAzODkKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF90ZXJtaW5hdGUgICAgICAgICAzOTAKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF93YWl0ICAgICAgICAgICAgICAzOTEKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zdXNwZW5kICAgICAgICAgICAzOTIKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yZXN1bWUgICAgICAgICAgICAzOTMKKy8qIDM5NCBtaXNzaW5nICovCisjZGVmaW5lIF9fTlJfSFBVWF9sd3BfYWJvcnRfc3lzY2FsbCAgICAgMzk1CisjZGVmaW5lIF9fTlJfSFBVWF9sd3BfaW5mbyAgICAgICAgICAgICAgMzk2CisjZGVmaW5lIF9fTlJfSFBVWF9sd3Bfa2lsbCAgICAgICAgICAgICAgMzk3CisjZGVmaW5lIF9fTlJfSFBVWF9rc2xlZXAgICAgICAgICAgICAgICAgMzk4CisjZGVmaW5lIF9fTlJfSFBVWF9rd2FrZXVwICAgICAgICAgICAgICAgMzk5CisvKiA0MDAgbWlzc2luZyAqLworI2RlZmluZSBfX05SX0hQVVhfcHN0YXRfZ2V0bHdwICAgICAgICAgIDQwMQorI2RlZmluZSBfX05SX0hQVVhfbHdwX2V4aXQgICAgICAgICAgICAgIDQwMgorI2RlZmluZSBfX05SX0hQVVhfbHdwX2NvbnRpbnVlICAgICAgICAgIDQwMworI2RlZmluZSBfX05SX0hQVVhfZ2V0YWNsICAgICAgICAgICAgICAgIDQwNAorI2RlZmluZSBfX05SX0hQVVhfZmdldGFjbCAgICAgICAgICAgICAgIDQwNQorI2RlZmluZSBfX05SX0hQVVhfc2V0YWNsICAgICAgICAgICAgICAgIDQwNgorI2RlZmluZSBfX05SX0hQVVhfZnNldGFjbCAgICAgICAgICAgICAgIDQwNworI2RlZmluZSBfX05SX0hQVVhfZ2V0YWNjZXNzICAgICAgICAgICAgIDQwOAorI2RlZmluZSBfX05SX0hQVVhfbHdwX211dGV4X2luaXQgICAgICAgIDQwOQorI2RlZmluZSBfX05SX0hQVVhfbHdwX211dGV4X2xvY2tfc3lzICAgIDQxMAorI2RlZmluZSBfX05SX0hQVVhfbHdwX211dGV4X3VubG9jayAgICAgIDQxMQorI2RlZmluZSBfX05SX0hQVVhfbHdwX2NvbmRfaW5pdCAgICAgICAgIDQxMgorI2RlZmluZSBfX05SX0hQVVhfbHdwX2NvbmRfc2lnbmFsICAgICAgIDQxMworI2RlZmluZSBfX05SX0hQVVhfbHdwX2NvbmRfYnJvYWRjYXN0ICAgIDQxNAorI2RlZmluZSBfX05SX0hQVVhfbHdwX2NvbmRfd2FpdF9zeXMgICAgIDQxNQorI2RlZmluZSBfX05SX0hQVVhfbHdwX2dldHNjaGVkdWxlciAgICAgIDQxNgorI2RlZmluZSBfX05SX0hQVVhfbHdwX3NldHNjaGVkdWxlciAgICAgIDQxNworI2RlZmluZSBfX05SX0hQVVhfbHdwX2dldHN0YXRlICAgICAgICAgIDQxOAorI2RlZmluZSBfX05SX0hQVVhfbHdwX3NldHN0YXRlICAgICAgICAgIDQxOQorI2RlZmluZSBfX05SX0hQVVhfbHdwX2RldGFjaCAgICAgICAgICAgIDQyMAorI2RlZmluZSBfX05SX0hQVVhfbWxvY2sgICAgICAgICAgICAgICAgIDQyMQorI2RlZmluZSBfX05SX0hQVVhfbXVubG9jayAgICAgICAgICAgICAgIDQyMgorI2RlZmluZSBfX05SX0hQVVhfbWxvY2thbGwgICAgICAgICAgICAgIDQyMworI2RlZmluZSBfX05SX0hQVVhfbXVubG9ja2FsbCAgICAgICAgICAgIDQyNAorI2RlZmluZSBfX05SX0hQVVhfc2htX29wZW4gICAgICAgICAgICAgIDQyNQorI2RlZmluZSBfX05SX0hQVVhfc2htX3VubGluayAgICAgICAgICAgIDQyNgorI2RlZmluZSBfX05SX0hQVVhfc2lncXVldWUgICAgICAgICAgICAgIDQyNworI2RlZmluZSBfX05SX0hQVVhfc2lnd2FpdGluZm8gICAgICAgICAgIDQyOAorI2RlZmluZSBfX05SX0hQVVhfc2lndGltZWR3YWl0ICAgICAgICAgIDQyOQorI2RlZmluZSBfX05SX0hQVVhfc2lnd2FpdCAgICAgICAgICAgICAgIDQzMAorI2RlZmluZSBfX05SX0hQVVhfYWlvX3JlYWQgICAgICAgICAgICAgIDQzMQorI2RlZmluZSBfX05SX0hQVVhfYWlvX3dyaXRlICAgICAgICAgICAgIDQzMgorI2RlZmluZSBfX05SX0hQVVhfbGlvX2xpc3RpbyAgICAgICAgICAgIDQzMworI2RlZmluZSBfX05SX0hQVVhfYWlvX2Vycm9yICAgICAgICAgICAgIDQzNAorI2RlZmluZSBfX05SX0hQVVhfYWlvX3JldHVybiAgICAgICAgICAgIDQzNQorI2RlZmluZSBfX05SX0hQVVhfYWlvX2NhbmNlbCAgICAgICAgICAgIDQzNgorI2RlZmluZSBfX05SX0hQVVhfYWlvX3N1c3BlbmQgICAgICAgICAgIDQzNworI2RlZmluZSBfX05SX0hQVVhfYWlvX2ZzeW5jICAgICAgICAgICAgIDQzOAorI2RlZmluZSBfX05SX0hQVVhfbXFfb3BlbiAgICAgICAgICAgICAgIDQzOQorI2RlZmluZSBfX05SX0hQVVhfbXFfY2xvc2UgICAgICAgICAgICAgIDQ0MAorI2RlZmluZSBfX05SX0hQVVhfbXFfdW5saW5rICAgICAgICAgICAgIDQ0MQorI2RlZmluZSBfX05SX0hQVVhfbXFfc2VuZCAgICAgICAgICAgICAgIDQ0MgorI2RlZmluZSBfX05SX0hQVVhfbXFfcmVjZWl2ZSAgICAgICAgICAgIDQ0MworI2RlZmluZSBfX05SX0hQVVhfbXFfbm90aWZ5ICAgICAgICAgICAgIDQ0NAorI2RlZmluZSBfX05SX0hQVVhfbXFfc2V0YXR0ciAgICAgICAgICAgIDQ0NQorI2RlZmluZSBfX05SX0hQVVhfbXFfZ2V0YXR0ciAgICAgICAgICAgIDQ0NgorI2RlZmluZSBfX05SX0hQVVhfa3NlbV9vcGVuICAgICAgICAgICAgIDQ0NworI2RlZmluZSBfX05SX0hQVVhfa3NlbV91bmxpbmsgICAgICAgICAgIDQ0OAorI2RlZmluZSBfX05SX0hQVVhfa3NlbV9jbG9zZSAgICAgICAgICAgIDQ0OQorI2RlZmluZSBfX05SX0hQVVhfa3NlbV9wb3N0ICAgICAgICAgICAgIDQ1MAorI2RlZmluZSBfX05SX0hQVVhfa3NlbV93YWl0ICAgICAgICAgICAgIDQ1MQorI2RlZmluZSBfX05SX0hQVVhfa3NlbV9yZWFkICAgICAgICAgICAgIDQ1MgorI2RlZmluZSBfX05SX0hQVVhfa3NlbV90cnl3YWl0ICAgICAgICAgIDQ1MworI2RlZmluZSBfX05SX0hQVVhfbHdwX3J3bG9ja19pbml0ICAgICAgIDQ1NAorI2RlZmluZSBfX05SX0hQVVhfbHdwX3J3bG9ja19kZXN0cm95ICAgIDQ1NQorI2RlZmluZSBfX05SX0hQVVhfbHdwX3J3bG9ja19yZGxvY2tfc3lzIDQ1NgorI2RlZmluZSBfX05SX0hQVVhfbHdwX3J3bG9ja193cmxvY2tfc3lzIDQ1NworI2RlZmluZSBfX05SX0hQVVhfbHdwX3J3bG9ja190cnlyZGxvY2sgIDQ1OAorI2RlZmluZSBfX05SX0hQVVhfbHdwX3J3bG9ja190cnl3cmxvY2sgIDQ1OQorI2RlZmluZSBfX05SX0hQVVhfbHdwX3J3bG9ja191bmxvY2sgICAgIDQ2MAorI2RlZmluZSBfX05SX0hQVVhfdHRyYWNlICAgICAgICAgICAgICAgIDQ2MQorI2RlZmluZSBfX05SX0hQVVhfdHRyYWNlX3dhaXQgICAgICAgICAgIDQ2MgorI2RlZmluZSBfX05SX0hQVVhfbGZfd2lyZV9tZW0gICAgICAgICAgIDQ2MworI2RlZmluZSBfX05SX0hQVVhfbGZfdW53aXJlX21lbSAgICAgICAgIDQ2NAorI2RlZmluZSBfX05SX0hQVVhfbGZfc2VuZF9waW5fbWFwICAgICAgIDQ2NQorI2RlZmluZSBfX05SX0hQVVhfbGZfZnJlZV9idWYgICAgICAgICAgIDQ2NgorI2RlZmluZSBfX05SX0hQVVhfbGZfd2FpdF9ucSAgICAgICAgICAgIDQ2NworI2RlZmluZSBfX05SX0hQVVhfbGZfd2FrZXVwX2Nvbm5fcSAgICAgIDQ2OAorI2RlZmluZSBfX05SX0hQVVhfbGZfdW51c2VkICAgICAgICAgICAgIDQ2OQorI2RlZmluZSBfX05SX0hQVVhfbHdwX3NlbWFfaW5pdCAgICAgICAgIDQ3MAorI2RlZmluZSBfX05SX0hQVVhfbHdwX3NlbWFfcG9zdCAgICAgICAgIDQ3MQorI2RlZmluZSBfX05SX0hQVVhfbHdwX3NlbWFfd2FpdCAgICAgICAgIDQ3MgorI2RlZmluZSBfX05SX0hQVVhfbHdwX3NlbWFfdHJ5d2FpdCAgICAgIDQ3MworI2RlZmluZSBfX05SX0hQVVhfbHdwX3NlbWFfZGVzdHJveSAgICAgIDQ3NAorI2RlZmluZSBfX05SX0hQVVhfc3RhdHZmczY0ICAgICAgICAgICAgIDQ3NQorI2RlZmluZSBfX05SX0hQVVhfZnN0YXR2ZnM2NCAgICAgICAgICAgIDQ3NgorI2RlZmluZSBfX05SX0hQVVhfbXNoX3JlZ2lzdGVyICAgICAgICAgIDQ3NworI2RlZmluZSBfX05SX0hQVVhfcHRyYWNlNjQgICAgICAgICAgICAgIDQ3OAorI2RlZmluZSBfX05SX0hQVVhfc2VuZGZpbGUgICAgICAgICAgICAgIDQ3OQorI2RlZmluZSBfX05SX0hQVVhfc2VuZHBhdGggICAgICAgICAgICAgIDQ4MAorI2RlZmluZSBfX05SX0hQVVhfc2VuZGZpbGU2NCAgICAgICAgICAgIDQ4MQorI2RlZmluZSBfX05SX0hQVVhfc2VuZHBhdGg2NCAgICAgICAgICAgIDQ4MgorI2RlZmluZSBfX05SX0hQVVhfbW9kbG9hZCAgICAgICAgICAgICAgIDQ4MworI2RlZmluZSBfX05SX0hQVVhfbW9kdWxvYWQgICAgICAgICAgICAgIDQ4NAorI2RlZmluZSBfX05SX0hQVVhfbW9kcGF0aCAgICAgICAgICAgICAgIDQ4NQorI2RlZmluZSBfX05SX0hQVVhfZ2V0a3N5bSAgICAgICAgICAgICAgIDQ4NgorI2RlZmluZSBfX05SX0hQVVhfbW9kYWRtICAgICAgICAgICAgICAgIDQ4NworI2RlZmluZSBfX05SX0hQVVhfbW9kc3RhdCAgICAgICAgICAgICAgIDQ4OAorI2RlZmluZSBfX05SX0hQVVhfbHdwX2RldGFjaGVkX2V4aXQgICAgIDQ4OQorI2RlZmluZSBfX05SX0hQVVhfY3Jhc2hjb25mICAgICAgICAgICAgIDQ5MAorI2RlZmluZSBfX05SX0hQVVhfc2lnaW5oaWJpdCAgICAgICAgICAgIDQ5MQorI2RlZmluZSBfX05SX0hQVVhfc2lnZW5hYmxlICAgICAgICAgICAgIDQ5MgorI2RlZmluZSBfX05SX0hQVVhfc3B1Y3RsICAgICAgICAgICAgICAgIDQ5MworI2RlZmluZSBfX05SX0hQVVhfemVyb2tlcm5lbHN1bSAgICAgICAgIDQ5NAorI2RlZmluZSBfX05SX0hQVVhfbmZzX2tzdGF0ICAgICAgICAgICAgIDQ5NQorI2RlZmluZSBfX05SX0hQVVhfYWlvX3JlYWQ2NCAgICAgICAgICAgIDQ5NgorI2RlZmluZSBfX05SX0hQVVhfYWlvX3dyaXRlNjQgICAgICAgICAgIDQ5NworI2RlZmluZSBfX05SX0hQVVhfYWlvX2Vycm9yNjQgICAgICAgICAgIDQ5OAorI2RlZmluZSBfX05SX0hQVVhfYWlvX3JldHVybjY0ICAgICAgICAgIDQ5OQorI2RlZmluZSBfX05SX0hQVVhfYWlvX2NhbmNlbDY0ICAgICAgICAgIDUwMAorI2RlZmluZSBfX05SX0hQVVhfYWlvX3N1c3BlbmQ2NCAgICAgICAgIDUwMQorI2RlZmluZSBfX05SX0hQVVhfYWlvX2ZzeW5jNjQgICAgICAgICAgIDUwMgorI2RlZmluZSBfX05SX0hQVVhfbGlvX2xpc3RpbzY0ICAgICAgICAgIDUwMworI2RlZmluZSBfX05SX0hQVVhfcmVjdjIgICAgICAgICAgICAgICAgIDUwNAorI2RlZmluZSBfX05SX0hQVVhfcmVjdmZyb20yICAgICAgICAgICAgIDUwNQorI2RlZmluZSBfX05SX0hQVVhfc2VuZDIgICAgICAgICAgICAgICAgIDUwNgorI2RlZmluZSBfX05SX0hQVVhfc2VuZHRvMiAgICAgICAgICAgICAgIDUwNworI2RlZmluZSBfX05SX0hQVVhfYWNsICAgICAgICAgICAgICAgICAgIDUwOAorI2RlZmluZSBfX05SX0hQVVhfX19jbnhfcDJwX2N0bCAgICAgICAgIDUwOQorI2RlZmluZSBfX05SX0hQVVhfX19jbnhfZ3NjaGVkX2N0bCAgICAgIDUxMAorI2RlZmluZSBfX05SX0hQVVhfX19jbnhfcG1vbl9jdGwgICAgICAgIDUxMQorCisjZGVmaW5lIF9fTlJfSFBVWF9zeXNjYWxscwkJNTEyCisKKy8qCisgKiBMaW51eCBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICoKKyAqIENhcnkgQ291dGFudCBzYXlzIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIGFub3RoZXIgc3lzY2FsbCBnYXRld2F5CisgKiBwYWdlIHRvIGF2b2lkIGNsYXNoaW5nIHdpdGggdGhlIEhQVVggc3BhY2UsIGFuZCBJIHRoaW5rIGhlJ3MgcmlnaHQ6CisgKiBpdCB3aWxsIHdvdWxkIGtlZXAgYSBicmFuY2ggb3V0IG9mIG91ciBzeXNjYWxsIGVudHJ5IHBhdGgsIGF0IHRoZQorICogdmVyeSBsZWFzdC4gIElmIHdlIGRlY2lkZSB0byBjaGFuZ2UgaXQgbGF0ZXIsIHdlIGNhbiBgYGp1c3QnJyB0d2VhaworICogdGhlIExJTlVYX0dBVEVXQVlfQUREUiBkZWZpbmUgYXQgdGhlIGJvdHRvbSBhbmQgbWFrZSBfX05SX0xpbnV4IGJlCisgKiAxMDI0IG9yIHNvbWV0aGluZy4gIE9oLCBhbmQgcmVjb21waWxlIGxpYmMuID0pCisgKgorICogNjQtYml0IEhQVVggYmluYXJpZXMgZ2V0IHRoZSBzeXNjYWxsIGdhdGV3YXkgYWRkcmVzcyBwYXNzZWQgaW4gYSByZWdpc3RlcgorICogZnJvbSB0aGUga2VybmVsIGF0IHN0YXJ0dXAsIHdoaWNoIHNlZW1zIGEgc2FuZSBzdHJhdGVneS4KKyAqLworCisjZGVmaW5lIF9fTlJfTGludXggICAgICAgICAgICAgICAgMAorI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIChfX05SX0xpbnV4ICsgMCkKKyNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEpCisjZGVmaW5lIF9fTlJfZm9yayAgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyKQorI2RlZmluZSBfX05SX3JlYWQgICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMykKKyNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQpCisjZGVmaW5lIF9fTlJfb3BlbiAgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1KQorI2RlZmluZSBfX05SX2Nsb3NlICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNikKKyNkZWZpbmUgX19OUl93YWl0cGlkICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDcpCisjZGVmaW5lIF9fTlJfY3JlYXQgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4KQorI2RlZmluZSBfX05SX2xpbmsgICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOSkKKyNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTApCisjZGVmaW5lIF9fTlJfZXhlY3ZlICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDExKQorI2RlZmluZSBfX05SX2NoZGlyICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMikKKyNkZWZpbmUgX19OUl90aW1lICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTMpCisjZGVmaW5lIF9fTlJfbWtub2QgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0KQorI2RlZmluZSBfX05SX2NobW9kICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNSkKKyNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTYpCisjZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE3KQorI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxOCkKKyNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTkpCisjZGVmaW5lIF9fTlJfZ2V0cGlkICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDIwKQorI2RlZmluZSBfX05SX21vdW50ICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMSkKKyNkZWZpbmUgX19OUl9iaW5kICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjIpCisjZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDIzKQorI2RlZmluZSBfX05SX2dldHVpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyNCkKKyNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjUpCisjZGVmaW5lIF9fTlJfcHRyYWNlICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDI2KQorI2RlZmluZSBfX05SX2FsYXJtICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyNykKKyNkZWZpbmUgX19OUl9mc3RhdCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjgpCisjZGVmaW5lIF9fTlJfcGF1c2UgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDI5KQorI2RlZmluZSBfX05SX3V0aW1lICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzMCkKKyNkZWZpbmUgX19OUl9jb25uZWN0ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzEpCisjZGVmaW5lIF9fTlJfbGlzdGVuICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDMyKQorI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzMykKKyNkZWZpbmUgX19OUl9uaWNlICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzQpCisjZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDM1KQorI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzNikKKyNkZWZpbmUgX19OUl9raWxsICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzcpCisjZGVmaW5lIF9fTlJfcmVuYW1lICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDM4KQorI2RlZmluZSBfX05SX21rZGlyICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzOSkKKyNkZWZpbmUgX19OUl9ybWRpciAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDApCisjZGVmaW5lIF9fTlJfZHVwICAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQxKQorI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0MikKKyNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDMpCisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgICAoX19OUl9MaW51eCArIDQ0KQorI2RlZmluZSBfX05SX2JyayAgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0NSkKKyNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDYpCisjZGVmaW5lIF9fTlJfZ2V0Z2lkICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQ3KQorI2RlZmluZSBfX05SX3NpZ25hbCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0OCkKKyNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDkpCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDUwKQorI2RlZmluZSBfX05SX2FjY3QgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1MSkKKyNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTIpCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgICAgICAgICAoX19OUl9MaW51eCArIDUzKQorI2RlZmluZSBfX05SX2lvY3RsICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1NCkKKyNkZWZpbmUgX19OUl9mY250bCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTUpCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgICAoX19OUl9MaW51eCArIDU2KQorI2RlZmluZSBfX05SX3NldHBnaWQgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1NykKKyNkZWZpbmUgX19OUl9zZW5kICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTgpCisjZGVmaW5lIF9fTlJfdW5hbWUgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDU5KQorI2RlZmluZSBfX05SX3VtYXNrICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA2MCkKKyNkZWZpbmUgX19OUl9jaHJvb3QgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjEpCisjZGVmaW5lIF9fTlJfdXN0YXQgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDYyKQorI2RlZmluZSBfX05SX2R1cDIgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA2MykKKyNkZWZpbmUgX19OUl9nZXRwcGlkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjQpCisjZGVmaW5lIF9fTlJfZ2V0cGdycCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDY1KQorI2RlZmluZSBfX05SX3NldHNpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA2NikKKyNkZWZpbmUgX19OUl9waXZvdF9yb290ICAgICAgICAgIChfX05SX0xpbnV4ICsgNjcpCisjZGVmaW5lIF9fTlJfc2dldG1hc2sgICAgICAgICAgICAoX19OUl9MaW51eCArIDY4KQorI2RlZmluZSBfX05SX3NzZXRtYXNrICAgICAgICAgICAgKF9fTlJfTGludXggKyA2OSkKKyNkZWZpbmUgX19OUl9zZXRyZXVpZCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNzApCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQgICAgICAgICAgICAoX19OUl9MaW51eCArIDcxKQorI2RlZmluZSBfX05SX21pbmNvcmUgICAgICAgICAgICAgKF9fTlJfTGludXggKyA3MikKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nICAgICAgICAgIChfX05SX0xpbnV4ICsgNzMpCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICAoX19OUl9MaW51eCArIDc0KQorI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAgKF9fTlJfTGludXggKyA3NSkKKyNkZWZpbmUgX19OUl9nZXRybGltaXQgICAgICAgICAgIChfX05SX0xpbnV4ICsgNzYpCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlICAgICAgICAgICAoX19OUl9MaW51eCArIDc3KQorI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAgICAgICAgKF9fTlJfTGludXggKyA3OCkKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgICAgICAgIChfX05SX0xpbnV4ICsgNzkpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzICAgICAgICAgICAoX19OUl9MaW51eCArIDgwKQorI2RlZmluZSBfX05SX3NldGdyb3VwcyAgICAgICAgICAgKF9fTlJfTGludXggKyA4MSkKKyNkZWZpbmUgX19OUl9zZW5kdG8gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODIpCisjZGVmaW5lIF9fTlJfc3ltbGluayAgICAgICAgICAgICAoX19OUl9MaW51eCArIDgzKQorI2RlZmluZSBfX05SX2xzdGF0ICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4NCkKKyNkZWZpbmUgX19OUl9yZWFkbGluayAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODUpCisjZGVmaW5lIF9fTlJfdXNlbGliICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDg2KQorI2RlZmluZSBfX05SX3N3YXBvbiAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4NykKKyNkZWZpbmUgX19OUl9yZWJvb3QgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODgpCisjZGVmaW5lIF9fTlJfbW1hcDIgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4OSkKKyNkZWZpbmUgX19OUl9tbWFwICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTApCisjZGVmaW5lIF9fTlJfbXVubWFwICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDkxKQorI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAgKF9fTlJfTGludXggKyA5MikKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTMpCisjZGVmaW5lIF9fTlJfZmNobW9kICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDk0KQorI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA5NSkKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSAgICAgICAgIChfX05SX0xpbnV4ICsgOTYpCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICAoX19OUl9MaW51eCArIDk3KQorI2RlZmluZSBfX05SX3JlY3YgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA5OCkKKyNkZWZpbmUgX19OUl9zdGF0ZnMgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTkpCisjZGVmaW5lIF9fTlJfZnN0YXRmcyAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTAwKQorI2RlZmluZSBfX05SX3N0YXQ2NCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDEpCisvKiAjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbCAgICAgICAgIChfX05SX0xpbnV4ICsgMTAyKSAqLworI2RlZmluZSBfX05SX3N5c2xvZyAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwMykKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgKF9fTlJfTGludXggKyAxMDQpCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgIChfX05SX0xpbnV4ICsgMTA1KQorI2RlZmluZSBfX05SX2NhcGdldCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwNikKKyNkZWZpbmUgX19OUl9jYXBzZXQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDcpCisjZGVmaW5lIF9fTlJfcHJlYWQ2NCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTA4KQorI2RlZmluZSBfX05SX3B3cml0ZTY0ICAgICAgICAgICAoX19OUl9MaW51eCArIDEwOSkKKyNkZWZpbmUgX19OUl9nZXRjd2QgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTApCisjZGVmaW5lIF9fTlJfdmhhbmd1cCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTExKQorI2RlZmluZSBfX05SX2ZzdGF0NjQgICAgICAgICAgICAoX19OUl9MaW51eCArIDExMikKKyNkZWZpbmUgX19OUl92Zm9yayAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTMpCisjZGVmaW5lIF9fTlJfd2FpdDQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTE0KQorI2RlZmluZSBfX05SX3N3YXBvZmYgICAgICAgICAgICAoX19OUl9MaW51eCArIDExNSkKKyNkZWZpbmUgX19OUl9zeXNpbmZvICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTYpCisjZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgIChfX05SX0xpbnV4ICsgMTE3KQorI2RlZmluZSBfX05SX2ZzeW5jICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDExOCkKKyNkZWZpbmUgX19OUl9tYWR2aXNlICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTkpCisjZGVmaW5lIF9fTlJfY2xvbmUgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTIwKQorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgICAgICAoX19OUl9MaW51eCArIDEyMSkKKyNkZWZpbmUgX19OUl9zZW5kZmlsZSAgICAgICAgICAgKF9fTlJfTGludXggKyAxMjIpCisjZGVmaW5lIF9fTlJfcmVjdmZyb20gICAgICAgICAgIChfX05SX0xpbnV4ICsgMTIzKQorI2RlZmluZSBfX05SX2FkanRpbWV4ICAgICAgICAgICAoX19OUl9MaW51eCArIDEyNCkKKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMjUpCisjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sgICAgICAgIChfX05SX0xpbnV4ICsgMTI2KQorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgICAgICAoX19OUl9MaW51eCArIDEyNykKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAgICAgICAgKF9fTlJfTGludXggKyAxMjgpCisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZSAgICAgIChfX05SX0xpbnV4ICsgMTI5KQorI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcyAgICAoX19OUl9MaW51eCArIDEzMCkKKyNkZWZpbmUgX19OUl9xdW90YWN0bCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMzEpCisjZGVmaW5lIF9fTlJfZ2V0cGdpZCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTMyKQorI2RlZmluZSBfX05SX2ZjaGRpciAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEzMykKKyNkZWZpbmUgX19OUl9iZGZsdXNoICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMzQpCisjZGVmaW5lIF9fTlJfc3lzZnMgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTM1KQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5ICAgICAgICAoX19OUl9MaW51eCArIDEzNikKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAgICAgICAgKF9fTlJfTGludXggKyAxMzcpIC8qIFN5c2NhbGwgZm9yIEFuZHJldyBGaWxlIFN5c3RlbSAqLworI2RlZmluZSBfX05SX3NldGZzdWlkICAgICAgICAgICAoX19OUl9MaW51eCArIDEzOCkKKyNkZWZpbmUgX19OUl9zZXRmc2dpZCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMzkpCisjZGVmaW5lIF9fTlJfX2xsc2VlayAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQwKQorI2RlZmluZSBfX05SX2dldGRlbnRzICAgICAgICAgICAoX19OUl9MaW51eCArIDE0MSkKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgKF9fTlJfTGludXggKyAxNDIpCisjZGVmaW5lIF9fTlJfZmxvY2sgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQzKQorI2RlZmluZSBfX05SX21zeW5jICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0NCkKKyNkZWZpbmUgX19OUl9yZWFkdiAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNDUpCisjZGVmaW5lIF9fTlJfd3JpdGV2ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQ2KQorI2RlZmluZSBfX05SX2dldHNpZCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0NykKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMgICAgICAgICAgKF9fTlJfTGludXggKyAxNDgpCisjZGVmaW5lIF9fTlJfX3N5c2N0bCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQ5KQorI2RlZmluZSBfX05SX21sb2NrICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE1MCkKKyNkZWZpbmUgX19OUl9tdW5sb2NrICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTEpCisjZGVmaW5lIF9fTlJfbWxvY2thbGwgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTUyKQorI2RlZmluZSBfX05SX211bmxvY2thbGwgICAgICAgICAoX19OUl9MaW51eCArIDE1MykKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE1NCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE1NSkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgICAgICAgICAoX19OUl9MaW51eCArIDE1NikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgICAgICAgICAoX19OUl9MaW51eCArIDE1NykKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE1OCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4ICAgICAoX19OUl9MaW51eCArIDE1OSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAgICAoX19OUl9MaW51eCArIDE2MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgICAgICAoX19OUl9MaW51eCArIDE2MSkKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgICAgICAgICAgKF9fTlJfTGludXggKyAxNjIpCisjZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTYzKQorI2RlZmluZSBfX05SX3NldHJlc3VpZCAgICAgICAgICAoX19OUl9MaW51eCArIDE2NCkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQgICAgICAgICAgKF9fTlJfTGludXggKyAxNjUpCisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgICAgICAgIChfX05SX0xpbnV4ICsgMTY2KQorI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZSAgICAgICAoX19OUl9MaW51eCArIDE2NykKKyNkZWZpbmUgX19OUl9wb2xsICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNjgpCisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAgICAgICAgIChfX05SX0xpbnV4ICsgMTY5KQorI2RlZmluZSBfX05SX3NldHJlc2dpZCAgICAgICAgICAoX19OUl9MaW51eCArIDE3MCkKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgICAgICAgICAgKF9fTlJfTGludXggKyAxNzEpCisjZGVmaW5lIF9fTlJfcHJjdGwgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTcyKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAgICAgICAoX19OUl9MaW51eCArIDE3MykKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24gICAgICAgKF9fTlJfTGludXggKyAxNzQpCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIChfX05SX0xpbnV4ICsgMTc1KQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgICAgICAoX19OUl9MaW51eCArIDE3NikKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQgICAgKF9fTlJfTGludXggKyAxNzcpCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIChfX05SX0xpbnV4ICsgMTc4KQorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgICAgICAoX19OUl9MaW51eCArIDE3OSkKKyNkZWZpbmUgX19OUl9jaG93biAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODApCisjZGVmaW5lIF9fTlJfc2V0c29ja29wdCAgICAgICAgIChfX05SX0xpbnV4ICsgMTgxKQorI2RlZmluZSBfX05SX2dldHNvY2tvcHQgICAgICAgICAoX19OUl9MaW51eCArIDE4MikKKyNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODMpCisjZGVmaW5lIF9fTlJfcmVjdm1zZyAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTg0KQorI2RlZmluZSBfX05SX3NlbW9wICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE4NSkKKyNkZWZpbmUgX19OUl9zZW1nZXQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODYpCisjZGVmaW5lIF9fTlJfc2VtY3RsICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTg3KQorI2RlZmluZSBfX05SX21zZ3NuZCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE4OCkKKyNkZWZpbmUgX19OUl9tc2dyY3YgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODkpCisjZGVmaW5lIF9fTlJfbXNnZ2V0ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTkwKQorI2RlZmluZSBfX05SX21zZ2N0bCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5MSkKKyNkZWZpbmUgX19OUl9zaG1hdCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxOTIpCisjZGVmaW5lIF9fTlJfc2htZHQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTkzKQorI2RlZmluZSBfX05SX3NobWdldCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5NCkKKyNkZWZpbmUgX19OUl9zaG1jdGwgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxOTUpCisKKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkoX19OUl9MaW51eCArIDE5NikgLyogU29tZWJvZHkgKndhbnRzKiBzdHJlYW1zPyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCShfX05SX0xpbnV4ICsgMTk3KQorCisjZGVmaW5lIF9fTlJfbHN0YXQ2NCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTk4KQorI2RlZmluZSBfX05SX3RydW5jYXRlNjQgICAgICAgICAoX19OUl9MaW51eCArIDE5OSkKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NCAgICAgICAgKF9fTlJfTGludXggKyAyMDApCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAgICAgICAgIChfX05SX0xpbnV4ICsgMjAxKQorI2RlZmluZSBfX05SX2ZjbnRsNjQgICAgICAgICAgICAoX19OUl9MaW51eCArIDIwMikKKyNkZWZpbmUgX19OUl9hdHRyY3RsICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDMpCisjZGVmaW5lIF9fTlJfYWNsX2dldCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjA0KQorI2RlZmluZSBfX05SX2FjbF9zZXQgICAgICAgICAgICAoX19OUl9MaW51eCArIDIwNSkKKyNkZWZpbmUgX19OUl9nZXR0aWQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDYpCisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkICAgICAgICAgIChfX05SX0xpbnV4ICsgMjA3KQorI2RlZmluZSBfX05SX3RraWxsICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDIwOCkKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0ICAgICAgICAgKF9fTlJfTGludXggKyAyMDkpCisjZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjEwKQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5ICAoX19OUl9MaW51eCArIDIxMSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eSAgKF9fTlJfTGludXggKyAyMTIpCisjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhICAgIChfX05SX0xpbnV4ICsgMjEzKQorI2RlZmluZSBfX05SX2dldF90aHJlYWRfYXJlYSAgICAoX19OUl9MaW51eCArIDIxNCkKKyNkZWZpbmUgX19OUl9pb19zZXR1cCAgICAgICAgICAgKF9fTlJfTGludXggKyAyMTUpCisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAgICAgICAgIChfX05SX0xpbnV4ICsgMjE2KQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAgICAgICAoX19OUl9MaW51eCArIDIxNykKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQgICAgICAgICAgKF9fTlJfTGludXggKyAyMTgpCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE5KQorI2RlZmluZSBfX05SX2FsbG9jX2h1Z2VwYWdlcyAgICAoX19OUl9MaW51eCArIDIyMCkKKyNkZWZpbmUgX19OUl9mcmVlX2h1Z2VwYWdlcyAgICAgKF9fTlJfTGludXggKyAyMjEpCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAgICAgICAgIChfX05SX0xpbnV4ICsgMjIyKQorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llICAgICAoX19OUl9MaW51eCArIDIyMykKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgICAgICAgKF9fTlJfTGludXggKyAyMjQpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgIChfX05SX0xpbnV4ICsgMjI1KQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgICAgICAgICAoX19OUl9MaW51eCArIDIyNikKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzICAgKF9fTlJfTGludXggKyAyMjcpCisjZGVmaW5lIF9fTlJfc2VtdGltZWRvcCAgICAgICAgIChfX05SX0xpbnV4ICsgMjI4KQorI2RlZmluZSBfX05SX21xX29wZW4gICAgICAgICAgICAoX19OUl9MaW51eCArIDIyOSkKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsgICAgICAgICAgKF9fTlJfTGludXggKyAyMzApCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kICAgICAgIChfX05SX0xpbnV4ICsgMjMxKQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZSAgICAoX19OUl9MaW51eCArIDIzMikKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkgICAgICAgICAgKF9fTlJfTGludXggKyAyMzMpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAgICAgIChfX05SX0xpbnV4ICsgMjM0KQorI2RlZmluZSBfX05SX3dhaXRpZAkJKF9fTlJfTGludXggKyAyMzUpCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0CShfX05SX0xpbnV4ICsgMjM2KQorI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkoX19OUl9MaW51eCArIDIzNykKKyNkZWZpbmUgX19OUl9zZXR4YXR0cgkJKF9fTlJfTGludXggKyAyMzgpCisjZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkoX19OUl9MaW51eCArIDIzOSkKKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCShfX05SX0xpbnV4ICsgMjQwKQorI2RlZmluZSBfX05SX2dldHhhdHRyCQkoX19OUl9MaW51eCArIDI0MSkKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCShfX05SX0xpbnV4ICsgMjQyKQorI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJKF9fTlJfTGludXggKyAyNDMpCisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkoX19OUl9MaW51eCArIDI0NCkKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkoX19OUl9MaW51eCArIDI0NSkKKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkoX19OUl9MaW51eCArIDI0NikKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkoX19OUl9MaW51eCArIDI0NykKKyNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJKF9fTlJfTGludXggKyAyNDgpCisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCShfX05SX0xpbnV4ICsgMjQ5KQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkoX19OUl9MaW51eCArIDI1MCkKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCShfX05SX0xpbnV4ICsgMjUxKQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJKF9fTlJfTGludXggKyAyNTIpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkoX19OUl9MaW51eCArIDI1MykKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJKF9fTlJfTGludXggKyAyNTQpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkoX19OUl9MaW51eCArIDI1NSkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCShfX05SX0xpbnV4ICsgMjU2KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkoX19OUl9MaW51eCArIDI1NykKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJKF9fTlJfTGludXggKyAyNTgpCisjZGVmaW5lIF9fTlJfdGdraWxsCQkoX19OUl9MaW51eCArIDI1OSkKKyNkZWZpbmUgX19OUl9tYmluZAkJKF9fTlJfTGludXggKyAyNjApCisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkoX19OUl9MaW51eCArIDI2MSkKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CShfX05SX0xpbnV4ICsgMjYyKQorI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCShfX05SX0xpbnV4ICsgMjYzKQorI2RlZmluZSBfX05SX2FkZF9rZXkJCShfX05SX0xpbnV4ICsgMjY0KQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CShfX05SX0xpbnV4ICsgMjY1KQorI2RlZmluZSBfX05SX2tleWN0bAkJKF9fTlJfTGludXggKyAyNjYpCisjZGVmaW5lIF9fTlJfaW9wcmlvX3NldAkJKF9fTlJfTGludXggKyAyNjcpCisjZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJKF9fTlJfTGludXggKyAyNjgpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0CShfX05SX0xpbnV4ICsgMjY5KQorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCShfX05SX0xpbnV4ICsgMjcwKQorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJKF9fTlJfTGludXggKyAyNzEpCisjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkoX19OUl9MaW51eCArIDI3MikKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJKF9fTlJfTGludXggKyAyNzMpCisjZGVmaW5lIF9fTlJfcHBvbGwJCShfX05SX0xpbnV4ICsgMjc0KQorI2RlZmluZSBfX05SX29wZW5hdAkJKF9fTlJfTGludXggKyAyNzUpCisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJKF9fTlJfTGludXggKyAyNzYpCisjZGVmaW5lIF9fTlJfbWtub2RhdAkJKF9fTlJfTGludXggKyAyNzcpCisjZGVmaW5lIF9fTlJfZmNob3duYXQJCShfX05SX0xpbnV4ICsgMjc4KQorI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJKF9fTlJfTGludXggKyAyNzkpCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkoX19OUl9MaW51eCArIDI4MCkKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJKF9fTlJfTGludXggKyAyODEpCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCShfX05SX0xpbnV4ICsgMjgyKQorI2RlZmluZSBfX05SX2xpbmthdAkJKF9fTlJfTGludXggKyAyODMpCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkoX19OUl9MaW51eCArIDI4NCkKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkoX19OUl9MaW51eCArIDI4NSkKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJKF9fTlJfTGludXggKyAyODYpCisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkoX19OUl9MaW51eCArIDI4NykKKyNkZWZpbmUgX19OUl91bnNoYXJlCQkoX19OUl9MaW51eCArIDI4OCkKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJKF9fTlJfTGludXggKyAyODkpCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CShfX05SX0xpbnV4ICsgMjkwKQorI2RlZmluZSBfX05SX3NwbGljZQkJKF9fTlJfTGludXggKyAyOTEpCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCShfX05SX0xpbnV4ICsgMjkyKQorI2RlZmluZSBfX05SX3RlZQkJKF9fTlJfTGludXggKyAyOTMpCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCShfX05SX0xpbnV4ICsgMjk0KQorI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCShfX05SX0xpbnV4ICsgMjk1KQorI2RlZmluZSBfX05SX2dldGNwdQkJKF9fTlJfTGludXggKyAyOTYpCisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJKF9fTlJfTGludXggKyAyOTcpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQJCShfX05SX0xpbnV4ICsgMjk4KQorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJKF9fTlJfTGludXggKyAyOTkpCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJKF9fTlJfTGludXggKyAzMDApCisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkoX19OUl9MaW51eCArIDMwMSkKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJKF9fTlJfTGludXggKyAzMDIpCisjZGVmaW5lIF9fTlJfdGltZXJmZAkJKF9fTlJfTGludXggKyAzMDMpCisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJKF9fTlJfTGludXggKyAzMDQpCisjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkoX19OUl9MaW51eCArIDMwNSkKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkoX19OUl9MaW51eCArIDMwNikKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJKF9fTlJfTGludXggKyAzMDcpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCShfX05SX0xpbnV4ICsgMzA4KQorI2RlZmluZSBfX05SX3NpZ25hbGZkNAkJKF9fTlJfTGludXggKyAzMDkpCisjZGVmaW5lIF9fTlJfZXZlbnRmZDIJCShfX05SX0xpbnV4ICsgMzEwKQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJKF9fTlJfTGludXggKyAzMTEpCisjZGVmaW5lIF9fTlJfZHVwMwkJKF9fTlJfTGludXggKyAzMTIpCisjZGVmaW5lIF9fTlJfcGlwZTIJCShfX05SX0xpbnV4ICsgMzEzKQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJKF9fTlJfTGludXggKyAzMTQpCisKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl9pbm90aWZ5X2luaXQxICsgMSkKKworCisjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCisjZGVmaW5lIF9fSUdOT1JFX2ZhZHZpc2U2NAkvKiBmYWR2aXNlNjRfNjQgKi8KKyNkZWZpbmUgX19JR05PUkVfdXRpbWVzCQkvKiB1dGltZSAqLworCisKKyNkZWZpbmUgSFBVWF9HQVRFV0FZX0FERFIgICAgICAgMHhDMDAwMDAwNAorI2RlZmluZSBMSU5VWF9HQVRFV0FZX0FERFIgICAgICAweDEwMAorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBTWVNfaWZ5KHN5c2NhbGxfbmFtZSkgICBfX05SXyMjc3lzY2FsbF9uYW1lCisKKyNpZm5kZWYgQVNNX0xJTkVfU0VQCisjIGRlZmluZSBBU01fTElORV9TRVAgOworI2VuZGlmCisKKy8qIERlZmluaXRpb24gdGFrZW4gZnJvbSBnbGliYyAyLjMuMworICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9zeXNkZXAuaAorICovCisKKyNpZmRlZiBQSUMKKy8qIFdBUk5JTkc6IENBTk5PVCBCRSBVU0VEIElOIEEgTk9QISAqLworIyBkZWZpbmUgS19TVFdfQVNNX1BJQwkiICAgICAgIGNvcHkgJSVyMTksICUlcjRcbiIKKyMgZGVmaW5lIEtfTERXX0FTTV9QSUMJIiAgICAgICBjb3B5ICUlcjQsICUlcjE5XG4iCisjIGRlZmluZSBLX1VTSU5HX0dSNAkiJXI0IiwKKyNlbHNlCisjIGRlZmluZSBLX1NUV19BU01fUElDCSIgXG4iCisjIGRlZmluZSBLX0xEV19BU01fUElDCSIgXG4iCisjIGRlZmluZSBLX1VTSU5HX0dSNAorI2VuZGlmCisKKy8qIEdDQyBoYXMgdG8gYmUgd2FybmVkIHRoYXQgYSBzeXNjYWxsIG1heSBjbG9iYmVyIGFsbCB0aGUgQUJJCisgICByZWdpc3RlcnMgbGlzdGVkIGFzICJjYWxsZXItc2F2ZXMiLCBzZWUgcGFnZSA4LCBUYWJsZSAyCisgICBpbiBzZWN0aW9uIDIuMi42IG9mIHRoZSBQQS1SSVNDIFJVTi1USU1FIGFyY2hpdGVjdHVyZQorICAgZG9jdW1lbnQuIEhvd2V2ZXIhIHIyOCBpcyB0aGUgcmVzdWx0IGFuZCB3aWxsIGNvbmZsaWN0IHdpdGgKKyAgIHRoZSBjbG9iYmVyIGxpc3Qgc28gaXQgaXMgbGVmdCBvdXQuIEFsc28gdGhlIGlucHV0IGFyZ3VtZW50cworICAgcmVnaXN0ZXJzIHIyMCAtPiByMjYgd2lsbCBjb25mbGljdCB3aXRoIHRoZSBsaXN0IHNvIHRoZXkKKyAgIGFyZSB0cmVhdGVkIHNwZWNpYWxseS4gQWx0aG91Z2ggcjE5IGlzIGNsb2JiZXJlZCBieSB0aGUgc3lzY2FsbAorICAgd2UgY2Fubm90IHNheSB0aGlzIGJlY2F1c2UgaXQgd291bGQgdmlvbGF0ZSBBQkksIHRodXMgd2Ugc2F5CisgICByNCBpcyBjbG9iYmVyZWQgYW5kIHVzZSB0aGF0IHJlZ2lzdGVyIHRvIHNhdmUvcmVzdG9yZSByMTkKKyAgIGFjcm9zcyB0aGUgc3lzY2FsbC4gKi8KKworI2RlZmluZSBLX0NBTExfQ0xPQl9SRUdTICIlcjEiLCAiJXIyIiwgS19VU0lOR19HUjQgXAorCSAgICAgICAgCSAiJXIyMCIsICIlcjI5IiwgIiVyMzEiCisKKyN1bmRlZiBLX0lOTElORV9TWVNDQUxMCisjZGVmaW5lIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgbnIsIGFyZ3MuLi4pCSh7CQkJXAorCWxvbmcgX19zeXNfcmVzOwkJCQkJCQlcCisJewkJCQkJCQkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmVzIF9fYXNtX18oInIyOCIpOwkJXAorCQlLX0xPQURfQVJHU18jI25yKGFyZ3MpCQkJCQlcCisJCS8qIEZJWE1FOiBIQUNLIHN0dy9sZHcgcjE5IGFyb3VuZCBzeXNjYWxsICovCQlcCisJCV9fYXNtX18gdm9sYXRpbGUoCQkJCQlcCisJCQlLX1NUV19BU01fUElDCQkJCQlcCisJCQkiCWJsZSAgMHgxMDAoJSVzcjIsICUlcjApXG4iCQlcCisJCQkiCWxkaSAlMSwgJSVyMjBcbiIJCQlcCisJCQlLX0xEV19BU01fUElDCQkJCQlcCisJCQk6ICI9ciIgKF9fcmVzKQkJCQkJXAorCQkJOiAiaSIgKFNZU19pZnkobmFtZSkpIEtfQVNNX0FSR1NfIyNuciAgIAlcCisJCQk6ICJtZW1vcnkiLCBLX0NBTExfQ0xPQl9SRUdTIEtfQ0xPQl9BUkdTXyMjbnIJXAorCQkpOwkJCQkJCQlcCisJCV9fc3lzX3JlcyA9IChsb25nKV9fcmVzOwkJCQlcCisJfQkJCQkJCQkJXAorCWlmICggKHVuc2lnbmVkIGxvbmcpX19zeXNfcmVzID49ICh1bnNpZ25lZCBsb25nKS00MDk1ICl7CVwKKwkJZXJybm8gPSAtX19zeXNfcmVzOwkJICAgICAgICAJCVwKKwkJX19zeXNfcmVzID0gLTE7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3N5c19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgS19MT0FEX0FSR1NfMCgpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzEocjI2KQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjYgX19hc21fXygicjI2IikgPSAodW5zaWduZWQgbG9uZykocjI2KTsgICBcCisJS19MT0FEX0FSR1NfMCgpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzIocjI2LHIyNSkJCQkJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI1IF9fYXNtX18oInIyNSIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNSk7ICAgXAorCUtfTE9BRF9BUkdTXzEocjI2KQorI2RlZmluZSBLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNCBfX2FzbV9fKCJyMjQiKSA9ICh1bnNpZ25lZCBsb25nKShyMjQpOyAgIFwKKwlLX0xPQURfQVJHU18yKHIyNixyMjUpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzQocjI2LHIyNSxyMjQscjIzKQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMyBfX2FzbV9fKCJyMjMiKSA9ICh1bnNpZ25lZCBsb25nKShyMjMpOyAgIFwKKwlLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQorI2RlZmluZSBLX0xPQURfQVJHU181KHIyNixyMjUscjI0LHIyMyxyMjIpCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjIgX19hc21fXygicjIyIikgPSAodW5zaWduZWQgbG9uZykocjIyKTsgICBcCisJS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzYocjI2LHIyNSxyMjQscjIzLHIyMixyMjEpCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjEgX19hc21fXygicjIxIikgPSAodW5zaWduZWQgbG9uZykocjIxKTsgICBcCisJS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQorCisvKiBFdmVuIHdpdGggemVybyBhcmdzIHdlIHVzZSByMjAgZm9yIHRoZSBzeXNjYWxsIG51bWJlciAqLworI2RlZmluZSBLX0FTTV9BUkdTXzAKKyNkZWZpbmUgS19BU01fQVJHU18xIEtfQVNNX0FSR1NfMCwgInIiIChfX3IyNikKKyNkZWZpbmUgS19BU01fQVJHU18yIEtfQVNNX0FSR1NfMSwgInIiIChfX3IyNSkKKyNkZWZpbmUgS19BU01fQVJHU18zIEtfQVNNX0FSR1NfMiwgInIiIChfX3IyNCkKKyNkZWZpbmUgS19BU01fQVJHU180IEtfQVNNX0FSR1NfMywgInIiIChfX3IyMykKKyNkZWZpbmUgS19BU01fQVJHU181IEtfQVNNX0FSR1NfNCwgInIiIChfX3IyMikKKyNkZWZpbmUgS19BU01fQVJHU182IEtfQVNNX0FSR1NfNSwgInIiIChfX3IyMSkKKworLyogVGhlIHJlZ2lzdGVycyBub3QgbGlzdGVkIGFzIGlucHV0cyBidXQgY2xvYmJlcmVkICovCisjZGVmaW5lIEtfQ0xPQl9BUkdTXzYKKyNkZWZpbmUgS19DTE9CX0FSR1NfNSBLX0NMT0JfQVJHU182LCAiJXIyMSIKKyNkZWZpbmUgS19DTE9CX0FSR1NfNCBLX0NMT0JfQVJHU181LCAiJXIyMiIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMyBLX0NMT0JfQVJHU180LCAiJXIyMyIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMiBLX0NMT0JfQVJHU18zLCAiJXIyNCIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMSBLX0NMT0JfQVJHU18yLCAiJXIyNSIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMCBLX0NMT0JfQVJHU18xLCAiJXIyNiIKKworI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKQkJCQkJCVwKK3R5cGUgbmFtZSh2b2lkKQkJCQkJCQkJXAorewkJCQkJCQkJCVwKKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCAwKTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsbmFtZSx0eXBlMSxhcmcxKQkJCQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEpCQkJCQkJCVwKK3sJCQkJCQkJCQlcCisgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgMSwgYXJnMSk7CSAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMikJCQkJCVwKK3sJCQkJCQkJCQlcCisgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgMiwgYXJnMSwgYXJnMik7CSAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczKQkJCQlcCit7CQkJCQkJCQkJXAorICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKG5hbWUsIDMsIGFyZzEsIGFyZzIsIGFyZzMpOwkgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCkgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpCQlcCit7CQkJCQkJCQkJXAorICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKG5hbWUsIDQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkgICAgICAgIFwKK30KKworLyogc2VsZWN0IHRha2VzIDUgYXJndW1lbnRzICovCisjZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkJXAorewkJCQkJCQkJCVwKKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCA1LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJXAorfQorCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECisjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyN1bmRlZiBTVFIKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fUEFSSVNDX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW53aW5kLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bndpbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQ4MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW53aW5kLmgKQEAgLTAsMCArMSw3OSBAQAorI2lmbmRlZiBfVU5XSU5EX0hfCisjZGVmaW5lIF9VTldJTkRfSF8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyogRnJvbSBBQkkgc3BlY2lmaWNhdGlvbnMgKi8KK3N0cnVjdCB1bndpbmRfdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGludCByZWdpb25fc3RhcnQ7CisJdW5zaWduZWQgaW50IHJlZ2lvbl9lbmQ7CisJdW5zaWduZWQgaW50IENhbm5vdF91bndpbmQ6MTsgLyogMCAqLworCXVuc2lnbmVkIGludCBNaWxsaWNvZGU6MTsJLyogMSAqLworCXVuc2lnbmVkIGludCBNaWxsaWNvZGVfc2F2ZV9zcjA6MTsJLyogMiAqLworCXVuc2lnbmVkIGludCBSZWdpb25fZGVzY3JpcHRpb246MjsJLyogMy4uNCAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDE6MTsJLyogNSAqLworCXVuc2lnbmVkIGludCBFbnRyeV9TUjoxOwkvKiA2ICovCisJdW5zaWduZWQgaW50IEVudHJ5X0ZSOjQ7CS8qIG51bWJlciBzYXZlZCAqLy8qIDcuLjEwICovCisJdW5zaWduZWQgaW50IEVudHJ5X0dSOjU7CS8qIG51bWJlciBzYXZlZCAqLy8qIDExLi4xNSAqLworCXVuc2lnbmVkIGludCBBcmdzX3N0b3JlZDoxOwkvKiAxNiAqLworCXVuc2lnbmVkIGludCBWYXJpYWJsZV9GcmFtZToxOwkvKiAxNyAqLworCXVuc2lnbmVkIGludCBTZXBhcmF0ZV9QYWNrYWdlX0JvZHk6MTsJLyogMTggKi8KKwl1bnNpZ25lZCBpbnQgRnJhbWVfRXh0ZW5zaW9uX01pbGxpY29kZToxOwkvKiAxOSAqLworCXVuc2lnbmVkIGludCBTdGFja19PdmVyZmxvd19DaGVjazoxOwkvKiAyMCAqLworCXVuc2lnbmVkIGludCBUd29fSW5zdHJ1Y3Rpb25fU1BfSW5jcmVtZW50OjE7CS8qIDIxICovCisJdW5zaWduZWQgaW50IEFkYV9SZWdpb246MTsJLyogMjIgKi8KKwl1bnNpZ25lZCBpbnQgY3h4X2luZm86MTsJLyogMjMgKi8KKwl1bnNpZ25lZCBpbnQgY3h4X3RyeV9jYXRjaDoxOwkvKiAyNCAqLworCXVuc2lnbmVkIGludCBzY2hlZF9lbnRyeV9zZXE6MTsJLyogMjUgKi8KKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQyOjE7CS8qIDI2ICovCisJdW5zaWduZWQgaW50IFNhdmVfU1A6MTsJLyogMjcgKi8KKwl1bnNpZ25lZCBpbnQgU2F2ZV9SUDoxOwkvKiAyOCAqLworCXVuc2lnbmVkIGludCBTYXZlX01SUF9pbl9mcmFtZToxOwkvKiAyOSAqLworCXVuc2lnbmVkIGludCBleHRuX3B0cl9kZWZpbmVkOjE7CS8qIDMwICovCisJdW5zaWduZWQgaW50IENsZWFudXBfZGVmaW5lZDoxOwkvKiAzMSAqLworCQorCXVuc2lnbmVkIGludCBNUEVfWExfaW50ZXJydXB0X21hcmtlcjoxOwkvKiAwICovCisJdW5zaWduZWQgaW50IEhQX1VYX2ludGVycnVwdF9tYXJrZXI6MTsJLyogMSAqLworCXVuc2lnbmVkIGludCBMYXJnZV9mcmFtZToxOwkvKiAyICovCisJdW5zaWduZWQgaW50IFBzZXVkb19TUF9TZXQ6MTsJLyogMyAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDQ6MTsJLyogNCAqLworCXVuc2lnbmVkIGludCBUb3RhbF9mcmFtZV9zaXplOjI3OwkvKiA1Li4zMSAqLworfTsKKworc3RydWN0IHVud2luZF90YWJsZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBncDsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZW5kOworCWNvbnN0IHN0cnVjdCB1bndpbmRfdGFibGVfZW50cnkgKnRhYmxlOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworfTsKKworc3RydWN0IHVud2luZF9mcmFtZV9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisJLyogRXZlbnR1YWxseSB3ZSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gZ2V0IGF0IGFueSBvZiB0aGUgcmVnaXN0ZXJzCisJICAgYXZhaWxhYmxlOyBidXQgZm9yIG5vdyB3ZSBvbmx5IHRyeSB0byBnZXQgdGhlIHNwIGFuZCBpcCBmb3IgZWFjaAorCSAgIGZyYW1lICovCisJLyogc3RydWN0IHB0X3JlZ3MgcmVnczsgKi8KKwl1bnNpZ25lZCBsb25nIHNwLCBpcCwgcnAsIHIzMTsKKwl1bnNpZ25lZCBsb25nIHByZXZfc3AsIHByZXZfaXA7Cit9OworCitzdHJ1Y3QgdW53aW5kX3RhYmxlICoKK3Vud2luZF90YWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIAorCQkgdW5zaWduZWQgbG9uZyBncCwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7Cit2b2lkCit1bndpbmRfdGFibGVfcmVtb3ZlKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlKTsKKwordm9pZCB1bndpbmRfZnJhbWVfaW5pdChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgCisJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKK3ZvaWQgdW53aW5kX2ZyYW1lX2luaXRfcnVubmluZyhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCB1bndpbmRfb25jZShzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8pOworaW50IHVud2luZF90b191c2VyKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbyk7CisKK2ludCB1bndpbmRfaW5pdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdXNlci5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdXNlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdXNlci5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91c2VyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy92Z2EuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3ZnYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdmdhLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3ZnYS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MveG9yLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS94b3IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3hvci5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS94b3IuaApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsLy5naXRpZ25vcmUgYi9hcmNoL3BhcmlzYy9rZXJuZWwvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY2NzZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAordm1saW51eC5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggM2VmYzBiNy4uNjk5Y2Y4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTI5MCw1ICsyOTAsOCBAQAogCURFRklORShFWENEQVRBX0lQLCBvZmZzZXRvZihzdHJ1Y3QgZXhjZXB0aW9uX2RhdGEsIGZhdWx0X2lwKSk7CiAJREVGSU5FKEVYQ0RBVEFfU1BBQ0UsIG9mZnNldG9mKHN0cnVjdCBleGNlcHRpb25fZGF0YSwgZmF1bHRfc3BhY2UpKTsKIAlERUZJTkUoRVhDREFUQV9BRERSLCBvZmZzZXRvZihzdHJ1Y3QgZXhjZXB0aW9uX2RhdGEsIGZhdWx0X2FkZHIpKTsKKwlCTEFOSygpOworCURFRklORShBU01fUERDX1JFU1VMVF9TSVpFLCBOVU1fUERDX1JFU1VMVCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJQkxBTksoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKaW5kZXggNzE3N2E2Yy4uMDNmMjZiZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKQEAgLTcxLDggKzcxLDggQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CS8qIGZvciBib290X2NwdV9kYXRhICovCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGRjX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGRjX3Jlc3VsdFszMl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZGNfcmVzdWx0MlszMl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwZGNfcmVzdWx0W05VTV9QRENfUkVTVUxUXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBkY19yZXN1bHQyW05VTV9QRENfUkVTVUxUXTsKIAogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBXSURFX0ZJUk1XQVJFIDB4MQpAQCAtMTUwLDI2ICsxNTAsNDAgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHXzY0QklUCit2b2lkIF9faW5pdCBzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWVtX3BkY19jYWxsKFBEQ19NT0RFTCwgUERDX01PREVMX0NBUEFCSUxJVElFUywKKwkJX19wYShwZGNfcmVzdWx0KSwgMCk7CisJY29udmVydF90b193aWRlKHBkY19yZXN1bHQpOworCWlmIChwZGNfcmVzdWx0WzBdICE9IE5BUlJPV19GSVJNV0FSRSkKKwkJcGFyaXNjX25hcnJvd19maXJtd2FyZSA9IDA7Cit9CisJCiAvKioKICAqIHNldF9maXJtd2FyZV93aWR0aCAtIERldGVybWluZSBpZiB0aGUgZmlybXdhcmUgaXMgd2lkZSBvciBuYXJyb3cuCiAgKiAKLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwZGNfKiBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIGNvbnZlcnRfdG9fd2lkZQotICogZnVuY3Rpb24uCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcGRjXyogZnVuY3Rpb24gdGhhdCB1c2VzIHRoZQorICogY29udmVydF90b193aWRlIGZ1bmN0aW9uLgogICovCiB2b2lkIF9faW5pdCBzZXRfZmlybXdhcmVfd2lkdGgodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBkY19sb2NrLCBmbGFncyk7Ci0JcmV0dmFsID0gbWVtX3BkY19jYWxsKFBEQ19NT0RFTCwgUERDX01PREVMX0NBUEFCSUxJVElFUywgX19wYShwZGNfcmVzdWx0KSwgMCk7Ci0JY29udmVydF90b193aWRlKHBkY19yZXN1bHQpOwotCWlmKHBkY19yZXN1bHRbMF0gIT0gTkFSUk9XX0ZJUk1XQVJFKQotCQlwYXJpc2NfbmFycm93X2Zpcm13YXJlID0gMDsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRjX2xvY2ssIGZsYWdzKTsKLSNlbmRpZgorCXNwaW5fbG9ja19pcnFzYXZlKCZwZGNfbG9jaywgZmxhZ3MpOworCXNldF9maXJtd2FyZV93aWR0aF91bmxvY2tlZCgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkY19sb2NrLCBmbGFncyk7CiB9CisjZWxzZQordm9pZCBfX2luaXQgc2V0X2Zpcm13YXJlX3dpZHRoX3VubG9ja2VkKHZvaWQpIHsKKwlyZXR1cm47Cit9CisKK3ZvaWQgX19pbml0IHNldF9maXJtd2FyZV93aWR0aCh2b2lkKSB7CisJcmV0dXJuOworfQorI2VuZGlmIC8qQ09ORklHXzY0QklUKi8KIAogLyoqCiAgKiBwZGNfZW1lcmdlbmN5X3VubG9jayAtIFVubG9jayB0aGUgbGludXggcGRjIGxvY2sKQEAgLTI4OCw2ICszMDIsMjAgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCitpbnQgX19pbml0IHBkY19jb3Byb2NfY2ZnX3VubG9ja2VkKHN0cnVjdCBwZGNfY29wcm9jX2NmZyAqcGRjX2NvcHJvY19pbmZvKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtZW1fcGRjX2NhbGwoUERDX0NPUFJPQywgUERDX0NPUFJPQ19DRkcsIF9fcGEocGRjX3Jlc3VsdCkpOworCWNvbnZlcnRfdG9fd2lkZShwZGNfcmVzdWx0KTsKKwlwZGNfY29wcm9jX2luZm8tPmNjcl9mdW5jdGlvbmFsID0gcGRjX3Jlc3VsdFswXTsKKwlwZGNfY29wcm9jX2luZm8tPmNjcl9wcmVzZW50ID0gcGRjX3Jlc3VsdFsxXTsKKwlwZGNfY29wcm9jX2luZm8tPnJldmlzaW9uID0gcGRjX3Jlc3VsdFsxN107CisJcGRjX2NvcHJvY19pbmZvLT5tb2RlbCA9IHBkY19yZXN1bHRbMThdOworCisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiBwZGNfY29wcm9jX2NmZyAtIFRvIGlkZW50aWZ5IGNvcHJvY2Vzc29ycyBhdHRhY2hlZCB0byB0aGUgcHJvY2Vzc29yLgogICogQHBkY19jb3Byb2NfaW5mbzogUmV0dXJuIGJ1ZmZlciBhZGRyZXNzLgpAQCAtMjk3LDE5ICszMjUsMTQgQEAKICAqLwogaW50IF9faW5pdCBwZGNfY29wcm9jX2NmZyhzdHJ1Y3QgcGRjX2NvcHJvY19jZmcgKnBkY19jb3Byb2NfaW5mbykKIHsKLSAgICAgICAgaW50IHJldHZhbDsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBkY19sb2NrLCBmbGFncyk7Ci0gICAgICAgIHJldHZhbCA9IG1lbV9wZGNfY2FsbChQRENfQ09QUk9DLCBQRENfQ09QUk9DX0NGRywgX19wYShwZGNfcmVzdWx0KSk7Ci0gICAgICAgIGNvbnZlcnRfdG9fd2lkZShwZGNfcmVzdWx0KTsKLSAgICAgICAgcGRjX2NvcHJvY19pbmZvLT5jY3JfZnVuY3Rpb25hbCA9IHBkY19yZXN1bHRbMF07Ci0gICAgICAgIHBkY19jb3Byb2NfaW5mby0+Y2NyX3ByZXNlbnQgPSBwZGNfcmVzdWx0WzFdOwotICAgICAgICBwZGNfY29wcm9jX2luZm8tPnJldmlzaW9uID0gcGRjX3Jlc3VsdFsxN107Ci0gICAgICAgIHBkY19jb3Byb2NfaW5mby0+bW9kZWwgPSBwZGNfcmVzdWx0WzE4XTsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRjX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRjX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBwZGNfY29wcm9jX2NmZ191bmxvY2tlZChwZGNfY29wcm9jX2luZm8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkY19sb2NrLCBmbGFncyk7CiAKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCmluZGV4IGE4NGUzMWUuLjBlM2Q5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJY29weQkJJXIwLCVyMgogCiAJLyogQW5kIHRoZSBSRkkgVGFyZ2V0IGFkZHJlc3MgdG9vICovCi0JbG9hZDMyCQlzdGFydF9rZXJuZWwsJXIxMQorCWxvYWQzMgkJc3RhcnRfcGFyaXNjLCVyMTEKIAogCS8qIEFuZCB0aGUgaW5pdGlhbCB0YXNrIHBvaW50ZXIgKi8KIAlsb2FkMzIJCWluaXRfdGhyZWFkX3VuaW9uLCVyNgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCmluZGV4IDQ5YzYzNzkuLjkwOTA0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSGV3bGV0dC1QYWNrYXJkIENvLCBMaW51eGNhcmUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAwIE1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KICAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI3LDE1ICsyOCwxNDkgQEAKIC8qIFBTVyBiaXRzIHdlIGFsbG93IHRoZSBkZWJ1Z2dlciB0byBtb2RpZnkgKi8KICNkZWZpbmUgVVNFUl9QU1dfQklUUwkoUFNXX04gfCBQU1dfViB8IFBTV19DQikKIAotI3VuZGVmIERFQlVHX1BUUkFDRQorLyoKKyAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuLgorICoKKyAqIE1ha2Ugc3VyZSBzaW5nbGUgc3RlcCBiaXRzIGV0YyBhcmUgbm90IHNldC4KKyAqLwordm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJdGFzay0+cHRyYWNlICY9IH4oUFRfU0lOR0xFU1RFUHxQVF9CTE9DS1NURVApOwogCi0jaWZkZWYgREVCVUdfUFRSQUNFCi0jZGVmaW5lIERCRyh4Li4uKQlwcmludGsoeCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQotI2VuZGlmCisJLyogbWFrZSBzdXJlIHRoZSB0cmFwIGJpdHMgYXJlIG5vdCBzZXQgKi8KKwlwYV9wc3codGFzayktPnIgPSAwOworCXBhX3Bzdyh0YXNrKS0+dCA9IDA7CisJcGFfcHN3KHRhc2spLT5oID0gMDsKKwlwYV9wc3codGFzayktPmwgPSAwOworfQogCi0jaWZkZWYgQ09ORklHXzY0QklUCisvKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBwdHJhY2VfcmVzdW1lKCkgd2hlbgorICogZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNpbmdsZS9ibG9jayB0cmFjaW5nLgorICovCit2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcHRyYWNlX2Rpc2FibGUodGFzayk7Cit9CisKK3ZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXRhc2stPnB0cmFjZSAmPSB+UFRfQkxPQ0tTVEVQOworCXRhc2stPnB0cmFjZSB8PSBQVF9TSU5HTEVTVEVQOworCisJaWYgKHBhX3Bzdyh0YXNrKS0+bikgeworCQlzdHJ1Y3Qgc2lnaW5mbyBzaTsKKworCQkvKiBOdWxsaWZpZWQsIGp1c3QgY3Jhbmsgb3ZlciB0aGUgcXVldWUuICovCisJCXRhc2tfcmVncyh0YXNrKS0+aWFvcVswXSA9IHRhc2tfcmVncyh0YXNrKS0+aWFvcVsxXTsKKwkJdGFza19yZWdzKHRhc2spLT5pYXNxWzBdID0gdGFza19yZWdzKHRhc2spLT5pYXNxWzFdOworCQl0YXNrX3JlZ3ModGFzayktPmlhb3FbMV0gPSB0YXNrX3JlZ3ModGFzayktPmlhb3FbMF0gKyA0OworCQlwYV9wc3codGFzayktPm4gPSAwOworCQlwYV9wc3codGFzayktPnggPSAwOworCQlwYV9wc3codGFzayktPnkgPSAwOworCQlwYV9wc3codGFzayktPnogPSAwOworCQlwYV9wc3codGFzayktPmIgPSAwOworCQlwdHJhY2VfZGlzYWJsZSh0YXNrKTsKKwkJLyogRG9uJ3Qgd2FrZSB1cCB0aGUgdGFzaywgYnV0IGxldCB0aGUKKwkJICAgcGFyZW50IGtub3cgc29tZXRoaW5nIGhhcHBlbmVkLiAqLworCQlzaS5zaV9jb2RlID0gVFJBUF9UUkFDRTsKKwkJc2kuc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSAodGFza19yZWdzKHRhc2spLT5pYW9xWzBdICYgfjMpOworCQlzaS5zaV9zaWdubyA9IFNJR1RSQVA7CisJCXNpLnNpX2Vycm5vID0gMDsKKwkJZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJnNpLCB0YXNrKTsKKwkJLyogbm90aWZ5X3BhcmVudCh0YXNrLCBTSUdDSExEKTsgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIEVuYWJsZSByZWNvdmVyeSBjb3VudGVyIHRyYXBzLiAgVGhlIHJlY292ZXJ5IGNvdW50ZXIKKwkgKiBpdHNlbGYgd2lsbCBiZSBzZXQgdG8gemVybyBvbiBhIHRhc2sgc3dpdGNoLiAgSWYgdGhlCisJICogdGFzayBpcyBzdXNwZW5kZWQgb24gYSBzeXNjYWxsIHRoZW4gdGhlIHN5c2NhbGwgcmV0dXJuCisJICogcGF0aCB3aWxsIG92ZXJ3cml0ZSB0aGUgcmVjb3ZlcnkgY291bnRlciB3aXRoIGEgc3VpdGFibGUKKwkgKiB2YWx1ZSBzdWNoIHRoYXQgaXQgdHJhcHMgb25jZSBiYWNrIGluIHVzZXIgc3BhY2UuICBXZQorCSAqIGRpc2FibGUgaW50ZXJydXB0cyBpbiB0aGUgdGFza3MgUFNXIGhlcmUgYWxzbywgdG8gYXZvaWQKKwkgKiBpbnRlcnJ1cHRzIHdoaWxlIHRoZSByZWNvdmVyeSBjb3VudGVyIGlzIGRlY3JlbWVudGluZy4KKwkgKi8KKwlwYV9wc3codGFzayktPnIgPSAxOworCXBhX3Bzdyh0YXNrKS0+dCA9IDA7CisJcGFfcHN3KHRhc2spLT5oID0gMDsKKwlwYV9wc3codGFzayktPmwgPSAwOworfQorCit2b2lkIHVzZXJfZW5hYmxlX2Jsb2NrX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXRhc2stPnB0cmFjZSAmPSB+UFRfU0lOR0xFU1RFUDsKKwl0YXNrLT5wdHJhY2UgfD0gUFRfQkxPQ0tTVEVQOworCisJLyogRW5hYmxlIHRha2VuIGJyYW5jaCB0cmFwLiAqLworCXBhX3Bzdyh0YXNrKS0+ciA9IDA7CisJcGFfcHN3KHRhc2spLT50ID0gMTsKKwlwYV9wc3codGFzayktPmggPSAwOworCXBhX3Bzdyh0YXNrKS0+bCA9IDA7Cit9CisKK2xvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlsb25nIHJldCA9IC1FSU87CisKKwlzd2l0Y2ggKHJlcXVlc3QpIHsKKworCS8qIFJlYWQgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkciBpbiB0aGUgVVNFUiBhcmVhLiAgRm9yIHB0cmFjZWQKKwkgICBwcm9jZXNzZXMsIHRoZSBrZXJuZWwgc2F2ZXMgYWxsIHJlZ3Mgb24gYSBzeXNjYWxsLiAqLworCWNhc2UgUFRSQUNFX1BFRUtVU1I6CisJCWlmICgoYWRkciAmIChzaXplb2YobG9uZyktMSkpIHx8CisJCSAgICAodW5zaWduZWQgbG9uZykgYWRkciA+PSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQorCQkJYnJlYWs7CisJCXRtcCA9ICoodW5zaWduZWQgbG9uZyAqKSAoKGNoYXIgKikgdGFza19yZWdzKGNoaWxkKSArIGFkZHIpOworCQlyZXQgPSBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nICopIGRhdGEpOworCQlicmVhazsKKworCS8qIFdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYS4gIFRoaXMgd2lsbCBuZWVkCisJICAgdG8gY2hhbmdlIHdoZW4gdGhlIGtlcm5lbCBubyBsb25nZXIgc2F2ZXMgYWxsIHJlZ3Mgb24gYSBzeXNjYWxsLgorCSAgIEZJWE1FLiAgVGhlcmUgaXMgYSBwcm9ibGVtIGF0IHRoZSBtb21lbnQgaW4gdGhhdCByMy1yMTggYXJlIG9ubHkKKwkgICBzYXZlZCBpZiB0aGUgcHJvY2VzcyBpcyBwdHJhY2VkIG9uIHN5c2NhbGwgZW50cnksIGFuZCBldmVuIHRoZW4KKwkgICB0aG9zZSB2YWx1ZXMgYXJlIG92ZXJ3cml0dGVuIGJ5IGFjdHVhbCByZWdpc3RlciB2YWx1ZXMgb24gc3lzY2FsbAorCSAgIGV4aXQuICovCisJY2FzZSBQVFJBQ0VfUE9LRVVTUjoKKwkJLyogU29tZSByZWdpc3RlciB2YWx1ZXMgd3JpdHRlbiBoZXJlIG1heSBiZSBpZ25vcmVkIGluCisJCSAqIGVudHJ5LlM6c3lzY2FsbF9yZXN0b3JlX3JmaTsgZS5nLiBpYW9xIGlzIHdyaXR0ZW4gd2l0aAorCQkgKiByMzEvcjMxKzQsIGFuZCBub3Qgd2l0aCB0aGUgdmFsdWVzIGluIHB0X3JlZ3MuCisJCSAqLworCQlpZiAoYWRkciA9PSBQVF9QU1cpIHsKKwkJCS8qIEFsbG93IHdyaXRpbmcgdG8gTnVsbGlmeSwgRGl2aWRlLXN0ZXAtY29ycmVjdGlvbiwKKwkJCSAqIGFuZCBjYXJyeS9ib3Jyb3cgYml0cy4KKwkJCSAqIEJFV0FSRSwgaWYgeW91IHNldCBOLCBhbmQgdGhlbiBzaW5nbGUgc3RlcCwgaXQgd29uJ3QKKwkJCSAqIHN0b3Agb24gdGhlIG51bGxpZmllZCBpbnN0cnVjdGlvbi4KKwkJCSAqLworCQkJZGF0YSAmPSBVU0VSX1BTV19CSVRTOworCQkJdGFza19yZWdzKGNoaWxkKS0+Z3JbMF0gJj0gflVTRVJfUFNXX0JJVFM7CisJCQl0YXNrX3JlZ3MoY2hpbGQpLT5nclswXSB8PSBkYXRhOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChhZGRyICYgKHNpemVvZihsb25nKS0xKSkgfHwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBhZGRyID49IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpCisJCQlicmVhazsKKwkJaWYgKChhZGRyID49IFBUX0dSMSAmJiBhZGRyIDw9IFBUX0dSMzEpIHx8CisJCQkJYWRkciA9PSBQVF9JQU9RMCB8fCBhZGRyID09IFBUX0lBT1ExIHx8CisJCQkJKGFkZHIgPj0gUFRfRlIwICYmIGFkZHIgPD0gUFRfRlIzMSArIDQpIHx8CisJCQkJYWRkciA9PSBQVF9TQVIpIHsKKwkJCSoodW5zaWduZWQgbG9uZyAqKSAoKGNoYXIgKikgdGFza19yZWdzKGNoaWxkKSArIGFkZHIpID0gZGF0YTsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKworI2lmZGVmIENPTkZJR19DT01QQVQKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQgdG8gdHJhbnNsYXRlIDMyIGJpdCBwdF9yZWdzIG9mZnNldHMgaW4gdG8KICAqIDY0IGJpdCBwdF9yZWdzIG9mZnNldHMuICBGb3IgZXhhbXBsZSwgYSAzMiBiaXQgZ2RiIHVuZGVyIGEgNjQgYml0IGtlcm5lbApAQCAtNjEsMTA2ICsxOTYsMjUgQEAKIAllbHNlCiAJCXJldHVybiAtMTsKIH0KLSNlbmRpZgogCi0vKgotICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCi0gKgotICogTWFrZSBzdXJlIHNpbmdsZSBzdGVwIGJpdHMgZXRjIGFyZSBub3Qgc2V0LgotICovCi12b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCitsb25nIGNvbXBhdF9hcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBjb21wYXRfbG9uZ190IHJlcXVlc3QsCisJCQljb21wYXRfdWxvbmdfdCBhZGRyLCBjb21wYXRfdWxvbmdfdCBkYXRhKQogewotCS8qIG1ha2Ugc3VyZSB0aGUgdHJhcCBiaXRzIGFyZSBub3Qgc2V0ICovCi0JcGFfcHN3KGNoaWxkKS0+ciA9IDA7Ci0JcGFfcHN3KGNoaWxkKS0+dCA9IDA7Ci0JcGFfcHN3KGNoaWxkKS0+aCA9IDA7Ci0JcGFfcHN3KGNoaWxkKS0+bCA9IDA7Ci19Ci0KLWxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKLXsKLQlsb25nIHJldDsKLSNpZmRlZiBERUJVR19QVFJBQ0UKLQlsb25nIG9hZGRyPWFkZHIsIG9kYXRhPWRhdGE7Ci0jZW5kaWYKKwljb21wYXRfdWludF90IHRtcDsKKwlsb25nIHJldCA9IC1FSU87CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKLQljYXNlIFBUUkFDRV9QRUVLVEVYVDogLyogcmVhZCB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovIAotCWNhc2UgUFRSQUNFX1BFRUtEQVRBOiB7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi0JCWlmIChfX2lzX2NvbXBhdF90YXNrKGNoaWxkKSkgewotCQkJaW50IGNvcGllZDsKLQkJCXVuc2lnbmVkIGludCB0bXA7CiAKLQkJCWFkZHIgJj0gMHhmZmZmZmZmZkw7Ci0JCQljb3BpZWQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJnRtcCwgc2l6ZW9mKHRtcCksIDApOwotCQkJcmV0ID0gLUVJTzsKLQkJCWlmIChjb3BpZWQgIT0gc2l6ZW9mKHRtcCkpCi0JCQkJZ290byBvdXRfdHNrOwotCQkJcmV0ID0gcHV0X3VzZXIodG1wLCh1bnNpZ25lZCBpbnQgKikgZGF0YSk7Ci0JCQlEQkcoInN5c19wdHJhY2UoUEVFSyVzLCAlZCwgJWx4LCAlbHgpIHJldHVybmluZyAlbGQsIGRhdGEgJXhcbiIsCi0JCQkJcmVxdWVzdCA9PSBQVFJBQ0VfUEVFS1RFWFQgPyAiVEVYVCIgOiAiREFUQSIsCi0JCQkJcGlkLCBvYWRkciwgb2RhdGEsIHJldCwgdG1wKTsKLQkJfQotCQllbHNlCi0jZW5kaWYKLQkJCXJldCA9IGdlbmVyaWNfcHRyYWNlX3BlZWtkYXRhKGNoaWxkLCBhZGRyLCBkYXRhKTsKLQkJZ290byBvdXRfdHNrOwotCX0KKwljYXNlIFBUUkFDRV9QRUVLVVNSOgorCQlpZiAoYWRkciAmIChzaXplb2YoY29tcGF0X3VpbnRfdCktMSkpCisJCQlicmVhazsKKwkJYWRkciA9IHRyYW5zbGF0ZV91c3Jfb2Zmc2V0KGFkZHIpOworCQlpZiAoYWRkciA8IDApCisJCQlicmVhazsKIAotCS8qIHdoZW4gSSBhbmQgRCBzcGFjZSBhcmUgc2VwYXJhdGUsIHRoaXMgd2lsbCBoYXZlIHRvIGJlIGZpeGVkLiAqLwotCWNhc2UgUFRSQUNFX1BPS0VURVhUOiAvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLwotCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQlyZXQgPSAwOwotI2lmZGVmIENPTkZJR182NEJJVAotCQlpZiAoX19pc19jb21wYXRfdGFzayhjaGlsZCkpIHsKLQkJCXVuc2lnbmVkIGludCB0bXAgPSAodW5zaWduZWQgaW50KWRhdGE7Ci0JCQlEQkcoInN5c19wdHJhY2UoUE9LRSVzLCAlZCwgJWx4LCAlbHgpXG4iLAotCQkJCXJlcXVlc3QgPT0gUFRSQUNFX1BPS0VURVhUID8gIlRFWFQiIDogIkRBVEEiLAotCQkJCXBpZCwgb2FkZHIsIG9kYXRhKTsKLQkJCWFkZHIgJj0gMHhmZmZmZmZmZkw7Ci0JCQlpZiAoYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZ0bXAsIHNpemVvZih0bXApLCAxKSA9PSBzaXplb2YodG1wKSkKLQkJCQlnb3RvIG91dF90c2s7Ci0JCX0KLQkJZWxzZQotI2VuZGlmCi0JCXsKLQkJCWlmIChhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJmRhdGEsIHNpemVvZihkYXRhKSwgMSkgPT0gc2l6ZW9mKGRhdGEpKQotCQkJCWdvdG8gb3V0X3RzazsKLQkJfQotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dF90c2s7Ci0KLQkvKiBSZWFkIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYS4gIEZvciBwdHJhY2VkCi0JICAgcHJvY2Vzc2VzLCB0aGUga2VybmVsIHNhdmVzIGFsbCByZWdzIG9uIGEgc3lzY2FsbC4gKi8KLQljYXNlIFBUUkFDRV9QRUVLVVNSOiB7Ci0JCXJldCA9IC1FSU87Ci0jaWZkZWYgQ09ORklHXzY0QklUCi0JCWlmIChfX2lzX2NvbXBhdF90YXNrKGNoaWxkKSkgewotCQkJdW5zaWduZWQgaW50IHRtcDsKLQotCQkJaWYgKGFkZHIgJiAoc2l6ZW9mKGludCktMSkpCi0JCQkJZ290byBvdXRfdHNrOwotCQkJaWYgKChhZGRyID0gdHJhbnNsYXRlX3Vzcl9vZmZzZXQoYWRkcikpIDwgMCkKLQkJCQlnb3RvIG91dF90c2s7Ci0KLQkJCXRtcCA9ICoodW5zaWduZWQgaW50ICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkcik7Ci0JCQlyZXQgPSBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgKikgZGF0YSk7Ci0JCQlEQkcoInN5c19wdHJhY2UoUEVFS1VTUiwgJWQsICVseCwgJWx4KSByZXR1cm5pbmcgJWxkLCBhZGRyICVseCwgZGF0YSAleFxuIiwKLQkJCQlwaWQsIG9hZGRyLCBvZGF0YSwgcmV0LCBhZGRyLCB0bXApOwotCQl9Ci0JCWVsc2UKLSNlbmRpZgotCQl7Ci0JCQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCQkJaWYgKChhZGRyICYgKHNpemVvZihsb25nKS0xKSkgfHwgKHVuc2lnbmVkIGxvbmcpIGFkZHIgPj0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKLQkJCQlnb3RvIG91dF90c2s7Ci0JCQl0bXAgPSAqKHVuc2lnbmVkIGxvbmcgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyKTsKLQkJCXJldCA9IHB1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGxvbmcgKikgZGF0YSk7Ci0JCX0KLQkJZ290byBvdXRfdHNrOwotCX0KKwkJdG1wID0gKihjb21wYXRfdWludF90ICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkcik7CisJCXJldCA9IHB1dF91c2VyKHRtcCwgKGNvbXBhdF91aW50X3QgKikgKHVuc2lnbmVkIGxvbmcpIGRhdGEpOworCQlicmVhazsKIAogCS8qIFdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYS4gIFRoaXMgd2lsbCBuZWVkCiAJICAgdG8gY2hhbmdlIHdoZW4gdGhlIGtlcm5lbCBubyBsb25nZXIgc2F2ZXMgYWxsIHJlZ3Mgb24gYSBzeXNjYWxsLgpAQCAtMTY5LDE4NSArMjIzLDQ2IEBACiAJICAgdGhvc2UgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbiBieSBhY3R1YWwgcmVnaXN0ZXIgdmFsdWVzIG9uIHN5c2NhbGwKIAkgICBleGl0LiAqLwogCWNhc2UgUFRSQUNFX1BPS0VVU1I6Ci0JCXJldCA9IC1FSU87CiAJCS8qIFNvbWUgcmVnaXN0ZXIgdmFsdWVzIHdyaXR0ZW4gaGVyZSBtYXkgYmUgaWdub3JlZCBpbgogCQkgKiBlbnRyeS5TOnN5c2NhbGxfcmVzdG9yZV9yZmk7IGUuZy4gaWFvcSBpcyB3cml0dGVuIHdpdGgKIAkJICogcjMxL3IzMSs0LCBhbmQgbm90IHdpdGggdGhlIHZhbHVlcyBpbiBwdF9yZWdzLgogCQkgKi8KLQkJIC8qIFBUX1BTVz0wLCBzbyB0aGlzIGlzIHZhbGlkIGZvciAzMiBiaXQgcHJvY2Vzc2VzIHVuZGVyIDY0Ci0JCSAqIGJpdCBrZXJuZWxzLgotCQkgKi8KIAkJaWYgKGFkZHIgPT0gUFRfUFNXKSB7Ci0JCQkvKiBQVF9QU1c9MCwgc28gdGhpcyBpcyB2YWxpZCBmb3IgMzIgYml0IHByb2Nlc3NlcwotCQkJICogdW5kZXIgNjQgYml0IGtlcm5lbHMuCi0JCQkgKgotCQkJICogQWxsb3cgd3JpdGluZyB0byBOdWxsaWZ5LCBEaXZpZGUtc3RlcC1jb3JyZWN0aW9uLAotCQkJICogYW5kIGNhcnJ5L2JvcnJvdyBiaXRzLgotCQkJICogQkVXQVJFLCBpZiB5b3Ugc2V0IE4sIGFuZCB0aGVuIHNpbmdsZSBzdGVwLCBpdCB3b24ndAotCQkJICogc3RvcCBvbiB0aGUgbnVsbGlmaWVkIGluc3RydWN0aW9uLgorCQkJLyogU2luY2UgUFRfUFNXPT0wLCBpdCBpcyB2YWxpZCBmb3IgMzIgYml0IHByb2Nlc3NlcworCQkJICogdW5kZXIgNjQgYml0IGtlcm5lbHMgYXMgd2VsbC4KIAkJCSAqLwotCQkJREJHKCJzeXNfcHRyYWNlKFBPS0VVU1IsICVkLCAlbHgsICVseClcbiIsCi0JCQkJcGlkLCBvYWRkciwgb2RhdGEpOwotCQkJZGF0YSAmPSBVU0VSX1BTV19CSVRTOwotCQkJdGFza19yZWdzKGNoaWxkKS0+Z3JbMF0gJj0gflVTRVJfUFNXX0JJVFM7Ci0JCQl0YXNrX3JlZ3MoY2hpbGQpLT5nclswXSB8PSBkYXRhOwotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0X3RzazsKLQkJfQotI2lmZGVmIENPTkZJR182NEJJVAotCQlpZiAoX19pc19jb21wYXRfdGFzayhjaGlsZCkpIHsKLQkJCWlmIChhZGRyICYgKHNpemVvZihpbnQpLTEpKQotCQkJCWdvdG8gb3V0X3RzazsKLQkJCWlmICgoYWRkciA9IHRyYW5zbGF0ZV91c3Jfb2Zmc2V0KGFkZHIpKSA8IDApCi0JCQkJZ290byBvdXRfdHNrOwotCQkJREJHKCJzeXNfcHRyYWNlKFBPS0VVU1IsICVkLCAlbHgsICVseCkgYWRkciAlbHhcbiIsCi0JCQkJcGlkLCBvYWRkciwgb2RhdGEsIGFkZHIpOworCQkJcmV0ID0gYXJjaF9wdHJhY2UoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOworCQl9IGVsc2UgeworCQkJaWYgKGFkZHIgJiAoc2l6ZW9mKGNvbXBhdF91aW50X3QpLTEpKQorCQkJCWJyZWFrOworCQkJYWRkciA9IHRyYW5zbGF0ZV91c3Jfb2Zmc2V0KGFkZHIpOworCQkJaWYgKGFkZHIgPCAwKQorCQkJCWJyZWFrOwogCQkJaWYgKGFkZHIgPj0gUFRfRlIwICYmIGFkZHIgPD0gUFRfRlIzMSArIDQpIHsKIAkJCQkvKiBTcGVjaWFsIGNhc2UsIGZwIHJlZ3MgYXJlIDY0IGJpdHMgYW55d2F5ICovCi0JCQkJKih1bnNpZ25lZCBpbnQgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyKSA9IGRhdGE7CisJCQkJKihfX3U2NCAqKSAoKGNoYXIgKikgdGFza19yZWdzKGNoaWxkKSArIGFkZHIpID0gZGF0YTsKIAkJCQlyZXQgPSAwOwogCQkJfQogCQkJZWxzZSBpZiAoKGFkZHIgPj0gUFRfR1IxKzQgJiYgYWRkciA8PSBQVF9HUjMxKzQpIHx8CiAJCQkJCWFkZHIgPT0gUFRfSUFPUTArNCB8fCBhZGRyID09IFBUX0lBT1ExKzQgfHwKIAkJCQkJYWRkciA9PSBQVF9TQVIrNCkgewogCQkJCS8qIFplcm8gdGhlIHRvcCAzMiBiaXRzICovCi0JCQkJKih1bnNpZ25lZCBpbnQgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyIC0gNCkgPSAwOwotCQkJCSoodW5zaWduZWQgaW50ICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkcikgPSBkYXRhOworCQkJCSooX191MzIgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyIC0gNCkgPSAwOworCQkJCSooX191MzIgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyKSA9IGRhdGE7CiAJCQkJcmV0ID0gMDsKIAkJCX0KLQkJCWdvdG8gb3V0X3RzazsKIAkJfQotCQllbHNlCi0jZW5kaWYKLQkJewotCQkJaWYgKChhZGRyICYgKHNpemVvZihsb25nKS0xKSkgfHwgKHVuc2lnbmVkIGxvbmcpIGFkZHIgPj0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKLQkJCQlnb3RvIG91dF90c2s7Ci0JCQlpZiAoKGFkZHIgPj0gUFRfR1IxICYmIGFkZHIgPD0gUFRfR1IzMSkgfHwKLQkJCQkJYWRkciA9PSBQVF9JQU9RMCB8fCBhZGRyID09IFBUX0lBT1ExIHx8Ci0JCQkJCShhZGRyID49IFBUX0ZSMCAmJiBhZGRyIDw9IFBUX0ZSMzEgKyA0KSB8fAotCQkJCQlhZGRyID09IFBUX1NBUikgewotCQkJCSoodW5zaWduZWQgbG9uZyAqKSAoKGNoYXIgKikgdGFza19yZWdzKGNoaWxkKSArIGFkZHIpID0gZGF0YTsKLQkJCQlyZXQgPSAwOwotCQkJfQotCQkJZ290byBvdXRfdHNrOwotCQl9Ci0KLQljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwotCWNhc2UgUFRSQUNFX0NPTlQ6Ci0JCXJldCA9IC1FSU87Ci0JCURCRygic3lzX3B0cmFjZSglcylcbiIsCi0JCQlyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMID8gIlNZU0NBTEwiIDogIkNPTlQiKTsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlnb3RvIG91dF90c2s7Ci0JCWNoaWxkLT5wdHJhY2UgJj0gfihQVF9TSU5HTEVTVEVQfFBUX0JMT0NLU1RFUCk7Ci0JCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKSB7Ci0JCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCX0gZWxzZSB7Ci0JCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJfQkJCi0JCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQlnb3RvIG91dF93YWtlX25vdHJhcDsKLQotCWNhc2UgUFRSQUNFX0tJTEw6Ci0JCS8qCi0JCSAqIG1ha2UgdGhlIGNoaWxkIGV4aXQuICBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYQotCQkgKiBzaWdraWxsLiAgcGVyaGFwcyBpdCBzaG91bGQgYmUgcHV0IGluIHRoZSBzdGF0dXMKLQkJICogdGhhdCBpdCB3YW50cyB0byBleGl0LgotCQkgKi8KLQkJcmV0ID0gMDsKLQkJREJHKCJzeXNfcHRyYWNlKEtJTEwpXG4iKTsKLQkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKQkvKiBhbHJlYWR5IGRlYWQgKi8KLQkJCWdvdG8gb3V0X3RzazsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IFNJR0tJTEw7Ci0JCWdvdG8gb3V0X3dha2Vfbm90cmFwOwotCi0JY2FzZSBQVFJBQ0VfU0lOR0xFQkxPQ0s6Ci0JCURCRygic3lzX3B0cmFjZShTSU5HTEVCTE9DSylcbiIpOwotCQlyZXQgPSAtRUlPOwotCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCWdvdG8gb3V0X3RzazsKLQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWNoaWxkLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7Ci0JCWNoaWxkLT5wdHJhY2UgfD0gUFRfQkxPQ0tTVEVQOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQotCQkvKiBFbmFibGUgdGFrZW4gYnJhbmNoIHRyYXAuICovCi0JCXBhX3BzdyhjaGlsZCktPnIgPSAwOwotCQlwYV9wc3coY2hpbGQpLT50ID0gMTsKLQkJcGFfcHN3KGNoaWxkKS0+aCA9IDA7Ci0JCXBhX3BzdyhjaGlsZCktPmwgPSAwOwotCQlnb3RvIG91dF93YWtlOwotCi0JY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoKLQkJREJHKCJzeXNfcHRyYWNlKFNJTkdMRVNURVApXG4iKTsKLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlnb3RvIG91dF90c2s7Ci0KLQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWNoaWxkLT5wdHJhY2UgJj0gflBUX0JMT0NLU1RFUDsKLQkJY2hpbGQtPnB0cmFjZSB8PSBQVF9TSU5HTEVTVEVQOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQotCQlpZiAocGFfcHN3KGNoaWxkKS0+bikgewotCQkJc3RydWN0IHNpZ2luZm8gc2k7Ci0KLQkJCS8qIE51bGxpZmllZCwganVzdCBjcmFuayBvdmVyIHRoZSBxdWV1ZS4gKi8KLQkJCXRhc2tfcmVncyhjaGlsZCktPmlhb3FbMF0gPSB0YXNrX3JlZ3MoY2hpbGQpLT5pYW9xWzFdOwotCQkJdGFza19yZWdzKGNoaWxkKS0+aWFzcVswXSA9IHRhc2tfcmVncyhjaGlsZCktPmlhc3FbMV07Ci0JCQl0YXNrX3JlZ3MoY2hpbGQpLT5pYW9xWzFdID0gdGFza19yZWdzKGNoaWxkKS0+aWFvcVswXSArIDQ7Ci0JCQlwYV9wc3coY2hpbGQpLT5uID0gMDsKLQkJCXBhX3BzdyhjaGlsZCktPnggPSAwOwotCQkJcGFfcHN3KGNoaWxkKS0+eSA9IDA7Ci0JCQlwYV9wc3coY2hpbGQpLT56ID0gMDsKLQkJCXBhX3BzdyhjaGlsZCktPmIgPSAwOwotCQkJcHRyYWNlX2Rpc2FibGUoY2hpbGQpOwotCQkJLyogRG9uJ3Qgd2FrZSB1cCB0aGUgY2hpbGQsIGJ1dCBsZXQgdGhlCi0JCQkgICBwYXJlbnQga25vdyBzb21ldGhpbmcgaGFwcGVuZWQuICovCi0JCQlzaS5zaV9jb2RlID0gVFJBUF9UUkFDRTsKLQkJCXNpLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgKHRhc2tfcmVncyhjaGlsZCktPmlhb3FbMF0gJiB+Myk7Ci0JCQlzaS5zaV9zaWdubyA9IFNJR1RSQVA7Ci0JCQlzaS5zaV9lcnJubyA9IDA7Ci0JCQlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmc2ksIGNoaWxkKTsKLQkJCS8vbm90aWZ5X3BhcmVudChjaGlsZCwgU0lHQ0hMRCk7Ci0JCQkvL3JldCA9IDA7Ci0JCQlnb3RvIG91dF93YWtlOwotCQl9Ci0KLQkJLyogRW5hYmxlIHJlY292ZXJ5IGNvdW50ZXIgdHJhcHMuICBUaGUgcmVjb3ZlcnkgY291bnRlcgotCQkgKiBpdHNlbGYgd2lsbCBiZSBzZXQgdG8gemVybyBvbiBhIHRhc2sgc3dpdGNoLiAgSWYgdGhlCi0JCSAqIHRhc2sgaXMgc3VzcGVuZGVkIG9uIGEgc3lzY2FsbCB0aGVuIHRoZSBzeXNjYWxsIHJldHVybgotCQkgKiBwYXRoIHdpbGwgb3ZlcndyaXRlIHRoZSByZWNvdmVyeSBjb3VudGVyIHdpdGggYSBzdWl0YWJsZQotCQkgKiB2YWx1ZSBzdWNoIHRoYXQgaXQgdHJhcHMgb25jZSBiYWNrIGluIHVzZXIgc3BhY2UuICBXZQotCQkgKiBkaXNhYmxlIGludGVycnVwdHMgaW4gdGhlIGNoaWxkcyBQU1cgaGVyZSBhbHNvLCB0byBhdm9pZAotCQkgKiBpbnRlcnJ1cHRzIHdoaWxlIHRoZSByZWNvdmVyeSBjb3VudGVyIGlzIGRlY3JlbWVudGluZy4KLQkJICovCi0JCXBhX3BzdyhjaGlsZCktPnIgPSAxOwotCQlwYV9wc3coY2hpbGQpLT50ID0gMDsKLQkJcGFfcHN3KGNoaWxkKS0+aCA9IDA7Ci0JCXBhX3BzdyhjaGlsZCktPmwgPSAwOwotCQkvKiBnaXZlIGl0IGEgY2hhbmNlIHRvIHJ1bi4gKi8KLQkJZ290byBvdXRfd2FrZTsKLQotCWNhc2UgUFRSQUNFX0dFVEVWRU5UTVNHOgotICAgICAgICAgICAgICAgIHJldCA9IHB1dF91c2VyKGNoaWxkLT5wdHJhY2VfbWVzc2FnZSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgZGF0YSk7Ci0JCWdvdG8gb3V0X3RzazsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7Ci0JCWdvdG8gb3V0X3RzazsKKwkJcmV0ID0gY29tcGF0X3B0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKKwkJYnJlYWs7CiAJfQogCi1vdXRfd2FrZV9ub3RyYXA6Ci0JcHRyYWNlX2Rpc2FibGUoY2hpbGQpOwotb3V0X3dha2U6Ci0Jd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQlyZXQgPSAwOwotb3V0X3RzazoKLQlEQkcoImFyY2hfcHRyYWNlKCVsZCwgJWQsICVseCwgJWx4KSByZXR1cm5pbmcgJWxkXG4iLAotCQlyZXF1ZXN0LCBwaWQsIG9hZGRyLCBvZGF0YSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmCisKIAogdm9pZCBzeXNjYWxsX3RyYWNlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcmVhbDIuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9yZWFsMi5TCmluZGV4IDdhOTI2OTUuLjVmM2QzYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9yZWFsMi5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9yZWFsMi5TCkBAIC04LDEyICs4LDI0IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxhc20vcGRjLmg+CiAjaW5jbHVkZSA8YXNtL3Bzdy5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJseS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCisKIAkuc2VjdGlvbgkuYnNzCisKKwkuZXhwb3J0IHBkY19yZXN1bHQKKwkuZXhwb3J0IHBkY19yZXN1bHQyCisJLmFsaWduIDgKK3BkY19yZXN1bHQ6CisJLmJsb2NrCUFTTV9QRENfUkVTVUxUX1NJWkUKK3BkY19yZXN1bHQyOgorCS5ibG9jawlBU01fUERDX1JFU1VMVF9TSVpFCisKIAkuZXhwb3J0IHJlYWxfc3RhY2sKIAkuZXhwb3J0IHJlYWwzMl9zdGFjawogCS5leHBvcnQgcmVhbDY0X3N0YWNrCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM5ZTdjNWEuLjdkMjc4NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8YXNtL3BkY19jaGFzc2lzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGNvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07CiAKQEAgLTEyMyw2ICsxMjQsNyBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCWV4dGVybiBpbnQgcGFyaXNjX25hcnJvd19maXJtd2FyZTsKICNlbmRpZgorCXVud2luZF9pbml0KCk7CiAKIAlpbml0X3Blcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsJLyogU2V0IE1vZGVzICYgRW5hYmxlIEZQICovCiAKQEAgLTM2OCw2ICszNzAsMzEgQEAKIAogCXJldHVybiAwOwogfQotCiBhcmNoX2luaXRjYWxsKHBhcmlzY19pbml0KTsKIAordm9pZCBzdGFydF9wYXJpc2Modm9pZCkKK3sKKwlleHRlcm4gdm9pZCBzdGFydF9rZXJuZWwodm9pZCk7CisKKwlpbnQgcmV0LCBjcHVudW07CisJc3RydWN0IHBkY19jb3Byb2NfY2ZnIGNvcHJvY19jZmc7CisKKwljcHVudW0gPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQoKTsKKworCXJldCA9IHBkY19jb3Byb2NfY2ZnX3VubG9ja2VkKCZjb3Byb2NfY2ZnKTsKKwlpZiAocmV0ID49IDAgJiYgY29wcm9jX2NmZy5jY3JfZnVuY3Rpb25hbCkgeworCQltdGN0bChjb3Byb2NfY2ZnLmNjcl9mdW5jdGlvbmFsLCAxMCk7CisKKwkJY3B1X2RhdGFbY3B1bnVtXS5mcF9yZXYgPSBjb3Byb2NfY2ZnLnJldmlzaW9uOworCQljcHVfZGF0YVtjcHVudW1dLmZwX21vZGVsID0gY29wcm9jX2NmZy5tb2RlbDsKKworCQlhc20gdm9sYXRpbGUgKCJmc3RkCSVmcjAsOCglc3ApIik7CisJfSBlbHNlIHsKKwkJcGFuaWMoIm11c3QgaGF2ZSBhbiBmcHUgdG8gYm9vdCBsaW51eCIpOworCX0KKworCXN0YXJ0X2tlcm5lbCgpOworCS8vIG5vdCByZWFjaGVkCit9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCBjN2U1OWY1Li4zMDNkMmI2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTg3LDcgKzg3LDcgQEAKIAlFTlRSWV9TQU1FKHNldHVpZCkKIAlFTlRSWV9TQU1FKGdldHVpZCkKIAlFTlRSWV9DT01QKHN0aW1lKQkJLyogMjUgKi8KLQlFTlRSWV9TQU1FKHB0cmFjZSkKKwlFTlRSWV9DT01QKHB0cmFjZSkKIAlFTlRSWV9TQU1FKGFsYXJtKQogCS8qIHNlZSBzdGF0IGNvbW1lbnQgKi8KIAlFTlRSWV9DT01QKG5ld2ZzdGF0KQpAQCAtNDA3LDYgKzQwNywxMiBAQAogCUVOVFJZX1NBTUUodGltZXJmZF9jcmVhdGUpCiAJRU5UUllfQ09NUCh0aW1lcmZkX3NldHRpbWUpCiAJRU5UUllfQ09NUCh0aW1lcmZkX2dldHRpbWUpCisJRU5UUllfQ09NUChzaWduYWxmZDQpCisJRU5UUllfU0FNRShldmVudGZkMikJCS8qIDMxMCAqLworCUVOVFJZX1NBTUUoZXBvbGxfY3JlYXRlMSkKKwlFTlRSWV9TQU1FKGR1cDMpCisJRU5UUllfU0FNRShwaXBlMikKKwlFTlRSWV9TQU1FKGlub3RpZnlfaW5pdDEpCiAKIAkvKiBOb3RoaW5nIHlldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYwppbmRleCAyNGJlODZiLi40ZDA5MjAzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0yMTUsNiArMjE2LDI0IEBACiAJY3B1X2RhdGFbY3B1XS5pdF92YWx1ZSA9IG5leHRfdGljazsKIH0KIAorc3RydWN0IHBsYXRmb3JtX2RldmljZSBydGNfcGFyaXNjX2RldiA9IHsKKwkubmFtZSA9ICJydGMtcGFyaXNjIiwKKwkuaWQgPSAtMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnRjX3BhcmlzY19kZXYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBydGMgZGV2aWNlLi4uXG4iKTsKKworCS8qIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvciAqLworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocnRjX2luaXQpOworCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHBkY190b2QgdG9kX2RhdGE7CkBAIC0yNDUsNCArMjY0LDMgQEAKIAkJeHRpbWUudHZfbnNlYyA9IDA7CiAJfQogfQotCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMKaW5kZXggNzAxYjJkMi4uNjc3M2M1OCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiB9CiAKIC8qIENhbGxlZCBmcm9tIHNldHVwX2FyY2ggdG8gaW1wb3J0IHRoZSBrZXJuZWwgdW53aW5kIGluZm8gKi8KLXN0YXRpYyBpbnQgdW53aW5kX2luaXQodm9pZCkKK2ludCB1bndpbmRfaW5pdCh2b2lkKQogewogCWxvbmcgc3RhcnQsIHN0b3A7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBncCBfX2FzbV9fICgicjI3Iik7CkBAIC00MTcsNSArNDE3LDMgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KLW1vZHVsZV9pbml0KHVud2luZF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL29wcm9maWxlL2luaXQuYyBiL2FyY2gvcGFyaXNjL29wcm9maWxlL2luaXQuYwppbmRleCAxMTNmNTEzLi4wMjZjYmEyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2Mvb3Byb2ZpbGUvaW5pdC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KIAotaW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKiBvcHMpCitpbnQgX19pbml0IG9wcm9maWxlX2FyY2hfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQogewogCXJldHVybiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAzODBiYWExLi41YjE1Mjc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTksOSArMTksNiBAQAogCWRlZmF1bHQgNjQgaWYgUFBDNjQKIAlkZWZhdWx0IDMyIGlmICFQUEM2NAogCi1jb25maWcgUFBDX01FUkdFCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAogICAgICAgIGRlZl9ib29sIFBQQzY0IHx8IFBIWVNfNjRCSVQKIApAQCAtMjMwLDYgKzIyNyw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3N5c2Rldi9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWciCiAKQEAgLTMyNCwxMyArMzIzLDExIEBACiAKIGNvbmZpZyBDUkFTSF9EVU1QCiAJYm9vbCAiQnVpbGQgYSBrZHVtcCBjcmFzaCBrZXJuZWwiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQgJiYgUkVMT0NBVEFCTEUKIAloZWxwCiAJICBCdWlsZCBhIGtlcm5lbCBzdWl0YWJsZSBmb3IgdXNlIGFzIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwuCi0JICBUaGUga2VybmVsIHdpbGwgYmUgbGlua2VkIGF0IGEgZGlmZmVyZW50IGFkZHJlc3MgdGhhbiBub3JtYWwsIGFuZAotCSAgc28gY2FuIG9ubHkgYmUgdXNlZCBmb3IgS2R1bXAuCi0KLQkgIERvbid0IGNoYW5nZSB0aGlzIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisJICBUaGUgc2FtZSBrZXJuZWwgYmluYXJ5IGNhbiBiZSB1c2VkIGFzIHByb2R1Y3Rpb24ga2VybmVsIGFuZCBkdW1wCisJICBjYXB0dXJlIGtlcm5lbC4KIAogY29uZmlnIFBIWVBfRFVNUAogCWJvb2wgIkh5cGVydmlzb3ItYXNzaXN0ZWQgZHVtcCAoRVhQRVJJTUVOVEFMKSIKQEAgLTgzMCwxMSArODI3LDkgQEAKIAlkZWZhdWx0ICIweGMwMDAwMDAwMDAwMDAwMDAiCiBjb25maWcgS0VSTkVMX1NUQVJUCiAJaGV4Ci0JZGVmYXVsdCAiMHhjMDAwMDAwMDAyMDAwMDAwIiBpZiBDUkFTSF9EVU1QCiAJZGVmYXVsdCAiMHhjMDAwMDAwMDAwMDAwMDAwIgogY29uZmlnIFBIWVNJQ0FMX1NUQVJUCiAJaGV4Ci0JZGVmYXVsdCAiMHgwMjAwMDAwMCIgaWYgQ1JBU0hfRFVNUAogCWRlZmF1bHQgIjB4MDAwMDAwMDAiCiBlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCmluZGV4IGFhYzE0MDYuLjhmYzZkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCkBAIC02OCw3ICs2OCw4IEBACiAJCWZpeGVkLWhlYWQuUyBlcDg4eGMuYyBlcDQwNS5jIGN1Ym9vdC1jMmsuYyBcCiAJCWN1Ym9vdC1rYXRtYWkuYyBjdWJvb3QtcmFpbmllci5jIHJlZGJvb3QtOHh4LmMgZXA4MjQ4ZS5jIFwKIAkJY3Vib290LXdhcnAuYyBjdWJvb3QtODV4eC1jcG0yLmMgY3Vib290LXlvc2VtaXRlLmMgc2ltcGxlYm9vdC5jIFwKLQkJdmlydGV4NDA1LWhlYWQuUyB2aXJ0ZXguYyByZWRib290LTgzeHguYyBjdWJvb3Qtc2FtNDQwZXAuYworCQl2aXJ0ZXg0MDUtaGVhZC5TIHZpcnRleC5jIHJlZGJvb3QtODN4eC5jIGN1Ym9vdC1zYW00NDBlcC5jIFwKKwkJY3Vib290LWFjYWRpYS5jCiBzcmMtYm9vdCA6PSAkKHNyYy13bGliKSAkKHNyYy1wbGF0KSBlbXB0eS5jCiAKIHNyYy1ib290IDo9ICQoYWRkcHJlZml4ICQob2JqKS8sICQoc3JjLWJvb3QpKQpAQCAtMjExLDYgKzIxMiw3IEBACiAjIEJvYXJkIHBvcnRzIGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS80MHgvS2NvbmZpZwogaW1hZ2UtJChDT05GSUdfRVA0MDUpCQkJKz0gZHRiSW1hZ2UuZXA0MDUKIGltYWdlLSQoQ09ORklHX1dBTE5VVCkJCQkrPSB0cmVlSW1hZ2Uud2FsbnV0CitpbWFnZS0kKENPTkZJR19BQ0FESUEpCQkJKz0gY3VJbWFnZS5hY2FkaWEKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vNDR4L0tjb25maWcKIGltYWdlLSQoQ09ORklHX0VCT05ZKQkJCSs9IHRyZWVJbWFnZS5lYm9ueSBjdUltYWdlLmVib255CkBAIC0zMTksNiArMzIxLDkgQEAKICQob2JqKS91SW1hZ2U6IHZtbGludXggJCh3cmFwcGVyYml0cykKIAkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLHVib290KQogCiskKG9iaikvY3VJbWFnZS5pbml0cmQuJTogdm1saW51eCAkKG9iaikvJS5kdGIgJCh3cmFwcGVyYml0cykKKwkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLGN1Ym9vdC0kKiwsJChvYmopLyQqLmR0YiwkKG9iaikvcmFtZGlzay5pbWFnZS5neikKKwogJChvYmopL2N1SW1hZ2UuJTogdm1saW51eCAkKG9iaikvJS5kdGIgJCh3cmFwcGVyYml0cykKIAkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLGN1Ym9vdC0kKiwsJChvYmopLyQqLmR0YikKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkbm90ZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkbm90ZS5jCmluZGV4IGRjYzlhYjIuLjMwOTFkMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2FkZG5vdGUuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRub3RlLmMKQEAgLTExLDcgKzExLDcgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBVc2FnZTogYWRkbm90ZSB6SW1hZ2UgW25vdGUuZWxmXQorICogVXNhZ2U6IGFkZG5vdGUgWy1yIHJlYWxiYXNlXSB6SW1hZ2UgW25vdGUuZWxmXQogICoKICAqIElmIG5vdGUuZWxmIGlzIHN1cHBsaWVkLCBpdCBpcyB0aGUgbmFtZSBvZiBhbiBFTEYgZmlsZSB0aGF0IGNvbnRhaW5zCiAgKiBhbiBSUEEgbm90ZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4gb25lLiAgQWx0ZXJuYXRpdmVseSwgdGhlCkBAIC0xNTMsMTggKzE1MywzMSBAQAogaW50CiBtYWluKGludCBhYywgY2hhciAqKmF2KQogewotCWludCBmZCwgbiwgaTsKKwlpbnQgZmQsIG4sIGksIGFpOwogCWludCBwaCwgcHMsIG5wOwogCWludCBubm90ZSwgbm5vdGUyLCBuczsKIAl1bnNpZ25lZCBjaGFyICpycGFwOworCWNoYXIgKnAsICplbmRwOwogCi0JaWYgKGFjICE9IDIgJiYgYWMgIT0gMykgewotCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBlbGYtZmlsZSBbcnBhbm90ZS5lbGZdXG4iLCBhdlswXSk7CisJYWkgPSAxOworCWlmIChhYyA+PSBhaSArIDIgJiYgc3RyY21wKGF2W2FpXSwgIi1yIikgPT0gMCkgeworCQkvKiBwcm9jZXNzIC1yIHJlYWxiYXNlICovCisJCXAgPSBhdlthaSArIDFdOworCQlkZXNjclsxXSA9IHN0cnRvbChwLCAmZW5kcCwgMTYpOworCQlpZiAoZW5kcCA9PSBwIHx8ICplbmRwICE9IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcGFyc2UgLXIgYXJndW1lbnQgJyVzJyBhcyBoZXhcbiIsCisJCQkJcCk7CisJCQlleGl0KDEpOworCQl9CisJCWFpICs9IDI7CisJfQorCWlmIChhYyAhPSBhaSArIDEgJiYgYWMgIT0gYWkgKyAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstciByZWFsYmFzZV0gZWxmLWZpbGUgW3JwYW5vdGUuZWxmXVxuIiwgYXZbMF0pOwogCQlleGl0KDEpOwogCX0KLQlmZCA9IG9wZW4oYXZbMV0sIE9fUkRXUik7CisJZmQgPSBvcGVuKGF2W2FpXSwgT19SRFdSKTsKIAlpZiAoZmQgPCAwKSB7Ci0JCXBlcnJvcihhdlsxXSk7CisJCXBlcnJvcihhdlthaV0pOwogCQlleGl0KDEpOwogCX0KIApAQCAtMTg0LDEyICsxOTcsMTIgQEAKIAlpZiAoYnVmW0VfSURFTlQrRUlfQ0xBU1NdICE9IEVMRkNMQVNTMzIKIAkgICAgfHwgYnVmW0VfSURFTlQrRUlfREFUQV0gIT0gRUxGREFUQTJNU0IpIHsKIAkJZnByaW50ZihzdGRlcnIsICIlcyBpcyBub3QgYSBiaWctZW5kaWFuIDMyLWJpdCBFTEYgaW1hZ2VcbiIsCi0JCQlhdlsxXSk7CisJCQlhdlthaV0pOwogCQlleGl0KDEpOwogCX0KIAotCWlmIChhYyA9PSAzKQotCQlycGFwID0gcmVhZF9ycGFub3RlKGF2WzJdLCAmbm5vdGUyKTsKKwlpZiAoYWMgPT0gYWkgKyAyKQorCQlycGFwID0gcmVhZF9ycGFub3RlKGF2W2FpICsgMV0sICZubm90ZTIpOwogCiAJcGggPSBHRVRfMzJCRShidWYsIEVfUEhPRkYpOwogCXBzID0gR0VUXzE2QkUoYnVmLCBFX1BIRU5UU0laRSk7CkBAIC0yMDIsNyArMjE1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnA7ICsraSkgewogCQlpZiAoR0VUXzMyQkUoYnVmLCBwaCArIFBIX1RZUEUpID09IFBUX05PVEUpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiJXMgYWxyZWFkeSBoYXMgYSBub3RlIGVudHJ5XG4iLAotCQkJCWF2WzFdKTsKKwkJCQlhdlthaV0pOwogCQkJZXhpdCgwKTsKIAkJfQogCQlwaCArPSBwczsKQEAgLTI2MCwxOCArMjczLDE4IEBACiAJCWV4aXQoMSk7CiAJfQogCWlmIChpIDwgbikgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB3cml0ZSB0cnVuY2F0ZWRcbiIsIGF2WzFdKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogd3JpdGUgdHJ1bmNhdGVkXG4iLCBhdlthaV0pOwogCQlleGl0KDEpOwogCX0KIAogCWV4aXQoMCk7CiAKICBub3RlbGY6Ci0JZnByaW50ZihzdGRlcnIsICIlcyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYW4gRUxGIGZpbGVcbiIsIGF2WzFdKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIGRvZXMgbm90IGFwcGVhciB0byBiZSBhbiBFTEYgZmlsZVxuIiwgYXZbYWldKTsKIAlleGl0KDEpOwogCiAgbm9zcGFjZToKIAlmcHJpbnRmKHN0ZGVyciwgInNvcnJ5LCBJIGNhbid0IGZpbmQgc3BhY2UgaW4gJXMgdG8gcHV0IHRoZSBub3RlXG4iLAotCQlhdlsxXSk7CisJCWF2W2FpXSk7CiAJZXhpdCgxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC01Mnh4LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtNTJ4eC5jCmluZGV4IGE4NjExNTQuLjRjNDJlYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC01Mnh4LmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LTUyeHguYwpAQCAtMzcsNiArMzcsMTAgQEAKIAkgKiB0aGlzIGNhbiBkbyBhIHNpbXBsZSBwYXRoIGxvb2t1cC4KIAkgKi8KIAlzb2MgPSBmaW5kX25vZGVfYnlfZGV2dHlwZShOVUxMLCAic29jIik7CisJaWYgKCFzb2MpCisJCXNvYyA9IGZpbmRfbm9kZV9ieV9jb21wYXRpYmxlKE5VTEwsICJmc2wsbXBjNTIwMC1pbW1yIik7CisJaWYgKCFzb2MpCisJCXNvYyA9IGZpbmRfbm9kZV9ieV9jb21wYXRpYmxlKE5VTEwsICJmc2wsbXBjNTIwMGItaW1tciIpOwogCWlmIChzb2MpIHsKIAkJc2V0cHJvcChzb2MsICJidXMtZnJlcXVlbmN5IiwgJmJkLmJpX2lwYmZyZXEsCiAJCQlzaXplb2YoYmQuYmlfaXBiZnJlcSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFjYWRpYS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFjYWRpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzRhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtYWNhZGlhLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBPbGQgVS1ib290IGNvbXBhdGliaWxpdHkgZm9yIEFjYWRpYQorICoKKyAqIEF1dGhvcjogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlICJkY3IuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgIjR4eC5oIgorI2luY2x1ZGUgIjQ0eC5oIgorI2luY2x1ZGUgImN1Ym9vdC5oIgorCisjZGVmaW5lIFRBUkdFVF80eHgKKyNpbmNsdWRlICJwcGNib290LmgiCisKK3N0YXRpYyBiZF90IGJkOworCisjZGVmaW5lIENQUl9QRVJEMF9TUElEVl9NQVNLICAgMHgwMDBGMDAwMCAgICAgLyogU1BJIENsb2NrIERpdmlkZXIgKi8KKworI2RlZmluZSBQTExDX1NSQ19NQVNLCSAgICAgICAweDIwMDAwMDAwICAgICAvKiBQTEwgZmVlZGJhY2sgc291cmNlICovCisKKyNkZWZpbmUgUExMRF9GQkRWX01BU0sJICAgICAgIDB4MUYwMDAwMDAgICAgIC8qIFBMTCBmZWVkYmFjayBkaXZpZGVyIHZhbHVlICovCisjZGVmaW5lIFBMTERfRldEVkFfTUFTSyAgICAgICAgMHgwMDBGMDAwMCAgICAgLyogUExMIGZvcndhcmQgZGl2aWRlciBBIHZhbHVlICovCisjZGVmaW5lIFBMTERfRldEVkJfTUFTSyAgICAgICAgMHgwMDAwMDcwMCAgICAgLyogUExMIGZvcndhcmQgZGl2aWRlciBCIHZhbHVlICovCisKKyNkZWZpbmUgUFJJTUFEX0NQVURWX01BU0sgICAgICAweDBGMDAwMDAwICAgICAvKiBDUFUgQ2xvY2sgRGl2aXNvciBNYXNrICovCisjZGVmaW5lIFBSSU1BRF9QTEJEVl9NQVNLICAgICAgMHgwMDBGMDAwMCAgICAgLyogUExCIENsb2NrIERpdmlzb3IgTWFzayAqLworI2RlZmluZSBQUklNQURfT1BCRFZfTUFTSyAgICAgIDB4MDAwMDBGMDAgICAgIC8qIE9QQiBDbG9jayBEaXZpc29yIE1hc2sgKi8KKyNkZWZpbmUgUFJJTUFEX0VCQ0RWX01BU0sgICAgICAweDAwMDAwMDBGICAgICAvKiBFQkMgQ2xvY2sgRGl2aXNvciBNYXNrICovCisKKyNkZWZpbmUgUEVSRDBfUFdNRFZfTUFTSyAgICAgICAweEZGMDAwMDAwICAgICAvKiBQV00gRGl2aWRlciBNYXNrICovCisjZGVmaW5lIFBFUkQwX1NQSURWX01BU0sgICAgICAgMHgwMDBGMDAwMCAgICAgLyogU1BJIERpdmlkZXIgTWFzayAqLworI2RlZmluZSBQRVJEMF9VMERWX01BU0sgICAgICAgIDB4MDAwMEZGMDAgICAgIC8qIFVBUlQgMCBEaXZpZGVyIE1hc2sgKi8KKyNkZWZpbmUgUEVSRDBfVTFEVl9NQVNLICAgICAgICAweDAwMDAwMEZGICAgICAvKiBVQVJUIDEgRGl2aWRlciBNYXNrICovCisKK3N0YXRpYyB2b2lkIGdldF9jbG9ja3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN5c2NsaywgY3ByX3BsbGQsIGNwcl9wbGxjLCBjcHJfcHJpbWFkLCBwbGxvdXRiLCBpOworCXVuc2lnbmVkIGxvbmcgcGxsRndkRGl2LCBwbGxGd2REaXZCLCBwbGxGYmtEaXYsIHBsbFBsYkRpdiwgcGxsRXh0QnVzRGl2OworCXVuc2lnbmVkIGxvbmcgcGxsT3BiRGl2LCBmcmVxRUJDLCBmcmVxVUFSVCwgZnJlcU9QQjsKKwl1bnNpZ25lZCBsb25nIGRpdjsJCS8qIHRvdGFsIGRpdmlzb3IgdWRpdiAqIGJkaXYgKi8KKwl1bnNpZ25lZCBsb25nIHVtaW47CQkvKiBtaW5pbXVtIHVkaXYJKi8KKwl1bnNpZ25lZCBzaG9ydCBkaWZmOwkJLyogc21hbGxlc3QgZGlmZiAqLworCXVuc2lnbmVkIGxvbmcgdWRpdjsJCS8qIGJlc3QgdWRpdiAqLworCXVuc2lnbmVkIHNob3J0IGlkaWZmOwkJLyogY3VycmVudCBkaWZmICovCisJdW5zaWduZWQgc2hvcnQgaWJkaXY7CQkvKiBjdXJyZW50IGJkaXYgKi8KKwl1bnNpZ25lZCBsb25nIGVzdDsJCS8qIGN1cnJlbnQgZXN0aW1hdGUgKi8KKwl1bnNpZ25lZCBsb25nIGJhdWQ7CisJdm9pZCAqbnA7CisKKwkvKiByZWFkIHRoZSBzeXNjbGsgdmFsdWUgZnJvbSB0aGUgQ1BMRCAqLworCXN5c2NsayA9IChpbl84KCh1bnNpZ25lZCBjaGFyICopMHg4MDAwMDAwMCkgPT0gMHhjKSA/IDY2NjY2NjY2IDogMzMzMzMwMDA7CisKKwkvKgorCSAqIFJlYWQgUExMIE1vZGUgcmVnaXN0ZXJzCisJICovCisJY3ByX3BsbGQgPSBDUFIwX1JFQUQoRENSTl9DUFIwX1BMTEQpOworCWNwcl9wbGxjID0gQ1BSMF9SRUFEKERDUk5fQ1BSMF9QTExDKTsKKworCS8qCisJICogRGV0ZXJtaW5lIGZvcndhcmQgZGl2aWRlciBBCisJICovCisJcGxsRndkRGl2ID0gKChjcHJfcGxsZCAmIFBMTERfRldEVkFfTUFTSykgPj4gMTYpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgZm9yd2FyZCBkaXZpZGVyIEIKKwkgKi8KKwlwbGxGd2REaXZCID0gKChjcHJfcGxsZCAmIFBMTERfRldEVkJfTUFTSykgPj4gOCk7CisJaWYgKHBsbEZ3ZERpdkIgPT0gMCkKKwkJcGxsRndkRGl2QiA9IDg7CisKKwkvKgorCSAqIERldGVybWluZSBGQktfRElWLgorCSAqLworCXBsbEZia0RpdiA9ICgoY3ByX3BsbGQgJiBQTExEX0ZCRFZfTUFTSykgPj4gMjQpOworCWlmIChwbGxGYmtEaXYgPT0gMCkKKwkJcGxsRmJrRGl2ID0gMjU2OworCisJLyoKKwkgKiBSZWFkIENQUl9QUklNQUQgcmVnaXN0ZXIKKwkgKi8KKwljcHJfcHJpbWFkID0gQ1BSMF9SRUFEKERDUk5fQ1BSMF9QUklNQUQpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgUExCX0RJVi4KKwkgKi8KKwlwbGxQbGJEaXYgPSAoKGNwcl9wcmltYWQgJiBQUklNQURfUExCRFZfTUFTSykgPj4gMTYpOworCWlmIChwbGxQbGJEaXYgPT0gMCkKKwkJcGxsUGxiRGl2ID0gMTY7CisKKwkvKgorCSAqIERldGVybWluZSBFWFRCVVNfRElWLgorCSAqLworCXBsbEV4dEJ1c0RpdiA9IChjcHJfcHJpbWFkICYgUFJJTUFEX0VCQ0RWX01BU0spOworCWlmIChwbGxFeHRCdXNEaXYgPT0gMCkKKwkJcGxsRXh0QnVzRGl2ID0gMTY7CisKKwkvKgorCSAqIERldGVybWluZSBPUEJfRElWLgorCSAqLworCXBsbE9wYkRpdiA9ICgoY3ByX3ByaW1hZCAmIFBSSU1BRF9PUEJEVl9NQVNLKSA+PiA4KTsKKwlpZiAocGxsT3BiRGl2ID09IDApCisJCXBsbE9wYkRpdiA9IDE2OworCisJLyogVGhlcmUgaXMgYSBidWcgaW4gVS1Cb290IHRoYXQgcHJldmVudHMgdXMgZnJvbSB1c2luZworCSAqIGJkLmJpX29wYmZyZXEgYmVjYXVzZSBVLUJvb3QgZG9lc24ndCBwb3B1bGF0ZSBpdCBmb3IKKwkgKiA0MDVFWi4gIFdlIGdldCB0byBjYWxjdWxhdGUgaXQsIHlheSEKKwkgKi8KKwlmcmVxT1BCID0gKHN5c2NsayAqcGxsRmJrRGl2KSAvcGxsT3BiRGl2OworCisJZnJlcUVCQyA9IChzeXNjbGsgKiBwbGxGYmtEaXYpIC8gcGxsRXh0QnVzRGl2OworCisJcGxsb3V0YiA9ICgoc3lzY2xrICogKChjcHJfcGxsYyAmIFBMTENfU1JDX01BU0spID8KKwkJCQkJICAgcGxsRndkRGl2QiA6IHBsbEZ3ZERpdikgKgorCQkgICAgcGxsRmJrRGl2KSAvIHBsbEZ3ZERpdkIpOworCisJbnAgPSBmaW5kX25vZGVfYnlfYWxpYXMoInNlcmlhbDAiKTsKKwlpZiAoZ2V0cHJvcChucCwgImN1cnJlbnQtc3BlZWQiLCAmYmF1ZCwgc2l6ZW9mKGJhdWQpKSAhPSBzaXplb2YoYmF1ZCkpCisJCWZhdGFsKCJubyBjdXJyZW50LXNwZWVkIHByb3BlcnR5XG5cciIpOworCisJdWRpdiA9IDI1NjsJCQkvKiBBc3N1bWUgbG93ZXN0IHBvc3NpYmxlIHNlcmlhbCBjbGsgKi8KKwlkaXYgPSBwbGxvdXRiIC8gKDE2ICogYmF1ZCk7IC8qIHRvdGFsIGRpdmlzb3IgKi8KKwl1bWluID0gKHBsbG91dGIgLyBmcmVxT1BCKSA8PCAxOwkvKiAyIHggT1BCIGRpdmlzb3IgKi8KKwlkaWZmID0gMjU2OwkJCS8qIGhpZ2hlc3QgcG9zc2libGUgKi8KKworCS8qIGkgaXMgdGhlIHRlc3QgdWRpdiB2YWx1ZSAtLSBzdGFydCB3aXRoIHRoZSBsYXJnZXN0CisJICogcG9zc2libGUgKDI1NikgdG8gbWluaW1pemUgc2VyaWFsIGNsb2NrIGFuZCBjb25zdHJhaW4KKwkgKiBzZWFyY2ggdG8gdW1pbi4KKwkgKi8KKwlmb3IgKGkgPSAyNTY7IGkgPiB1bWluOyBpLS0pIHsKKwkJaWJkaXYgPSBkaXYgLyBpOworCQllc3QgPSBpICogaWJkaXY7CisJCWlkaWZmID0gKGVzdCA+IGRpdikgPyAoZXN0LWRpdikgOiAoZGl2LWVzdCk7CisJCWlmIChpZGlmZiA9PSAwKSB7CisJCQl1ZGl2ID0gaTsKKwkJCWJyZWFrOyAgICAgIC8qIGNhbid0IGRvIGJldHRlciAqLworCQl9IGVsc2UgaWYgKGlkaWZmIDwgZGlmZikgeworCQkJdWRpdiA9IGk7ICAgICAgIC8qIGJlc3Qgc28gZmFyICovCisJCQlkaWZmID0gaWRpZmY7ICAgLyogdXBkYXRlIGxvd2VzdCBkaWZmKi8KKwkJfQorCX0KKwlmcmVxVUFSVCA9IHBsbG91dGIgLyB1ZGl2OworCisJZHRfZml4dXBfY3B1X2Nsb2NrcyhiZC5iaV9wcm9jZnJlcSwgYmQuYmlfaW50ZnJlcSwgYmQuYmlfcGxiX2J1c2ZyZXEpOworCWR0X2ZpeHVwX2Nsb2NrKCIvcGxiL2ViYyIsIGZyZXFFQkMpOworCWR0X2ZpeHVwX2Nsb2NrKCIvcGxiL29wYiIsIGZyZXFPUEIpOworCWR0X2ZpeHVwX2Nsb2NrKCIvcGxiL29wYi9zZXJpYWxAZWY2MDAzMDAiLCBmcmVxVUFSVCk7CisJZHRfZml4dXBfY2xvY2soIi9wbGIvb3BiL3NlcmlhbEBlZjYwMDQwMCIsIGZyZXFVQVJUKTsKK30KKworc3RhdGljIHZvaWQgYWNhZGlhX2ZpeHVwcyh2b2lkKQoreworCWR0X2ZpeHVwX21lbW9yeShiZC5iaV9tZW1zdGFydCwgYmQuYmlfbWVtc2l6ZSk7CisJZ2V0X2Nsb2NrcygpOworCWR0X2ZpeHVwX21hY19hZGRyZXNzX2J5X2FsaWFzKCJldGhlcm5ldDAiLCBiZC5iaV9lbmV0YWRkcik7Cit9CisJCit2b2lkIHBsYXRmb3JtX2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKK3sKKwlDVUJPT1RfSU5JVCgpOworCXBsYXRmb3JtX29wcy5maXh1cHMgPSBhY2FkaWFfZml4dXBzOworCXBsYXRmb3JtX29wcy5leGl0ID0gaWJtNDB4X2RiY3JfcmVzZXQ7CisJZmR0X2luaXQoX2R0Yl9zdGFydCk7CisJc2VyaWFsX2NvbnNvbGVfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FjYWRpYS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYWNhZGlhLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzI5MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FjYWRpYS5kdHMKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIEFNQ0MgQWNhZGlhICg0MDVFWikKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbW9kZWwgPSAiYW1jYyxhY2FkaWEiOworCWNvbXBhdGlibGUgPSAiYW1jYyxhY2FkaWEiOworCWRjci1wYXJlbnQgPSA8JnsvY3B1cy9jcHVAMH0+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZFTUFDMDsKKwkJc2VyaWFsMCA9ICZVQVJUMDsKKwkJc2VyaWFsMSA9ICZVQVJUMTsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJbW9kZWwgPSAiUG93ZXJQQyw0MDVFWiI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHdyYXBwZXIgKi8KKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHdyYXBwZXIgKi8KKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwxNjM4ND47CisJCQlkLWNhY2hlLXNpemUgPSA8MTYzODQ+OworCQkJZGNyLWNvbnRyb2xsZXI7CisJCQlkY3ItYWNjZXNzLW1ldGhvZCA9ICJuYXRpdmUiOworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4MD47IC8qIEZpbGxlZCBpbiBieSB3cmFwcGVyICovCisJfTsKKworCVVJQzA6IGludGVycnVwdC1jb250cm9sbGVyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQwNWV6IiwgImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJZGNyLXJlZyA9IDwweDBjMCAweDAwOT47CisJCWNlbGwtaW5kZXggPSA8MD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJcGxiIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQwNWV6IiwgImlibSxwbGIzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHdyYXBwZXIgKi8KKworCQlNQUwwOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00MDVleiIsICJpYm0sbWNtYWwiOworCQkJZGNyLXJlZyA9IDwweDM4MCAweDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDwxPjsKKwkJCW51bS1yeC1jaGFucyA9IDwxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJLyogNDA1RVogaGFzIG9ubHkgMyBpbnRlcnJ1cHRzIHRvIHRoZSBVSUMsIGFzCisJCQkgKiBTRVJSLCBUWERFLCBhbmQgUlhERSBhcmUgb3InZCB0b2dldGhlciBpbnRvCisJCQkgKiBvbmUgVUlDIGJpdAorCQkJICovCisJCQlpbnRlcnJ1cHRzID0gPAorCQkJCTB4MTMgMHg0IC8qIFRYRU9CICovCisJCQkJMHgxNSAweDQgLyogUlhFT0IgKi8KKwkJCQkweDEyIDB4NCAvKiBTRVJSLCBUWERFLCBSWERFICovPjsKKwkJfTsKKworCQlQT0IwOiBvcGIgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sb3BiLTQwNWV6IiwgImlibSxvcGIiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlczsKKwkJCWRjci1yZWcgPSA8MHgwYSAweDA1PjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHdyYXBwZXIgKi8KKworCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDMwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwMzAwIDB4OD47CisJCQkJdmlydHVhbC1yZWcgPSA8MHhlZjYwMDMwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgd3JhcHBlciAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4NSAweDQ+OworCQkJfTsKKworCQkJVUFSVDE6IHNlcmlhbEBlZjYwMDQwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwNDAwIDB4OD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgd3JhcHBlciAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDQ+OworCQkJfTsKKworCQkJSUlDOiBpMmNAZWY2MDA1MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00MDVleiIsICJpYm0saWljIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDUwMCAweDExPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4YSAweDQ+OworCQkJfTsKKworCQkJR1BJTzA6IGdwaW9AZWY2MDA3MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGdwaW8tNDA1ZXoiOworCQkJCXJlZyA9IDwweGVmNjAwNzAwIDB4MjA+OworCQkJfTsKKworCQkJR1BJTzE6IGdwaW9AZWY2MDA4MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGdwaW8tNDA1ZXoiOworCQkJCXJlZyA9IDwweGVmNjAwODAwIDB4MjA+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwOTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQwNWV6IiwgImlibSxlbWFjIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPAorCQkJCQkweDEwIDB4NCAvKiBFdGhlcm5ldCAqLworCQkJCQkweDExIDB4NCAvKiBFdGhlcm5ldCBXYWtlIHVwICovPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgd3JhcHBlciAqLworCQkJCXJlZyA9IDwweGVmNjAwOTAwIDB4NzA+OworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MTUwMD47CisJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlwaHktbW9kZSA9ICJtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwPjsKKwkJCX07CisKKwkJCUNBTjA6IGNhbkBlZjYwMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhbWNjLGNhbi00MDVleiI7CisJCQkJcmVnID0gPDB4ZWY2MDEwMDAgMHg2MjA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHg3IDB4ND47CisJCQl9OworCisJCQlDQU4xOiBjYW5AZWY2MDE4MDAgeworCQkJCWNvbXBhdGlibGUgPSAiYW1jYyxjYW4tNDA1ZXoiOworCQkJCXJlZyA9IDwweGVmNjAxODAwIDB4NjIwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDQ+OworCQkJfTsKKworCQkJY2FtZWxlb25AZWY2MDIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYW1jYyxjYW1lbGVvbi00MDVleiI7CisJCQkJcmVnID0gPDB4ZWY2MDIwMDAgMHg4MDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHhiIDB4NCAweGMgMHg0PjsKKwkJCX07CisKKwkJCWllZWUxNTg4QGVmNjAyODAwIHsKKwkJCQljb21wYXRpYmxlID0gImFtY2MsaWVlZTE1ODgtNDA1ZXoiOworCQkJCXJlZyA9IDwweGVmNjAyODAwIDB4NjA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHg0IDB4ND47CisJCQkJLyogVGhpcyB0aGluZyBpcyBhIGJpdCB3ZWlyZC4gIEl0IGhhcyBpdCdzIG93biBVSUMKKwkJCQkgKiB0aGF0IGl0IHVzZXMgdG8gZ2VuZXJhdGUgc25hcHNob3QgdHJpZ2dlcnMuICBXZQorCQkJCSAqIGRvbid0IHJlYWxseSBzdXBwb3J0IHRoaXMgZGV2aWNlIHlldCwgYW5kIGl0IG5lZWRzCisJCQkJICogd29yayB0byBmaWd1cmUgdGhpcyBvdXQuCisJCQkJICovCisJCQkJZGNyLXJlZyA9IDwweGUwIDB4OT47CisJCQl9OworCisJCQl1c2JAZWY2MDMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAib2hjaS1iZSI7CisJCQkJcmVnID0gPDB4ZWY2MDMwMDAgMHg4MD47CisJCQkJaW50ZXJydXB0cy1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHhkIDB4NCAweGUgMHg0PjsKKwkJCX07CisKKwkJCWRhY0BlZjYwMzMwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhbWNjLGRhYy00MDVleiI7CisJCQkJcmVnID0gPDB4ZWY2MDMzMDAgMHg0MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDE4IDB4ND47CisJCQl9OworCisJCQlhZGNAZWY2MDM0MDAgeworCQkJCWNvbXBhdGlibGUgPSAiYW1jYyxhZGMtNDA1ZXoiOworCQkJCXJlZyA9IDwweGVmNjAzNDAwIDB4NDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgxNyAweDQ+OworCQkJfTsKKworCQkJc3BpQGVmNjAzNTAwIHsKKwkJCQljb21wYXRpYmxlID0gImFtY2Msc3BpLTQwNWV6IjsKKwkJCQlyZWcgPSA8MHhlZjYwMzUwMCAweDEwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCX07CisJCX07CisKKwkJRUJDMDogZWJjIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLGViYy00MDVleiIsICJpYm0sZWJjIjsKKwkJCWRjci1yZWcgPSA8MHgxMiAweDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHdyYXBwZXIgKi8KKwkJfTsKKwl9OworCisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQGVmNjAwMzAwIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9oY3U0LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9oY3U0LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTg4NTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2hjdTQuZHRzCkBAIC0wLDAgKzEsMTY4IEBACisvKgorKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIE5ldHN0YWwgTWFzY2hpbmVuIEhDVTQKKyogYmFzZWQgb24gdGhlIElCTSBXYWxudXQKKyoKKyogQ29weXJpZ2h0IDIwMDgKKyogTmlrbGF1cyBHaWdlciA8bmlrbGF1cy5naWdlckBtZW1iZXIuZnNmLm9yZz4KKyoKKyogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAuCisqIEpvc2ggQm95ZXIgPGp3Ym95ZXJAbGludXgudm5ldC5pYm0uY29tPgorKgorKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0CisqIGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqLworCisvZHRzLXYxLzsKKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MHgxPjsKKwkjc2l6ZS1jZWxscyA9IDwweDE+OworCW1vZGVsID0gIm5ldHN0YWwsaGN1NCI7CisJY29tcGF0aWJsZSA9ICJuZXRzdGFsLGhjdTQiOworCWRjci1wYXJlbnQgPSA8MHgxPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAiL3BsYi9vcGIvZXRoZXJuZXRAZWY2MDA4MDAiOworCQlzZXJpYWwwID0gIi9wbGIvb3BiL3NlcmlhbEBlZjYwMDMwMCI7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwweDE+OworCQkjc2l6ZS1jZWxscyA9IDwweDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQltb2RlbCA9ICJQb3dlclBDLDQwNUdQciI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwweDA+OwkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwweDIwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDB4MjA+OworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsKKwkJCWRjci1jb250cm9sbGVyOworCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJCWxpbnV4LHBoYW5kbGUgPSA8MHgxPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MCAweDA+OwkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJfTsKKworCVVJQzA6IGludGVycnVwdC1jb250cm9sbGVyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MHgwPjsKKwkJZGNyLXJlZyA9IDwweGMwIDB4OT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDB4MD47CisJCSNzaXplLWNlbGxzID0gPDB4MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MHgyPjsKKwkJbGludXgscGhhbmRsZSA9IDwweDI+OworCX07CisKKwlwbGIgeworCQljb21wYXRpYmxlID0gImlibSxwbGIzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MHgxPjsKKwkJI3NpemUtY2VsbHMgPSA8MHgxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MHgwPjsJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCisJCVNEUkFNMDogbWVtb3J5LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sc2RyYW0tNDA1Z3AiOworCQkJZGNyLXJlZyA9IDwweDEwIDB4Mj47CisJCX07CisKKwkJTUFMOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00MDVncCIsICJpYm0sbWNtYWwiOworCQkJZGNyLXJlZyA9IDwweDE4MCAweDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDwweDE+OworCQkJbnVtLXJ4LWNoYW5zID0gPDB4MT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDB4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDB4YiAweDQgMHhjIDB4NCAweGEgMHg0IDB4ZCAweDQgMHhlIDB4ND47CisJCQlsaW51eCxwaGFuZGxlID0gPDB4Mz47CisJCX07CisKKwkJUE9CMDogb3BiIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00MDVncCIsICJpYm0sb3BiIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDB4MT47CisJCQkjc2l6ZS1jZWxscyA9IDwweDE+OworCQkJcmFuZ2VzID0gPDB4ZWY2MDAwMDAgMHhlZjYwMDAwMCAweGEwMDAwMD47CisJCQlkY3ItcmVnID0gPDB4YTAgMHg1PjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwweDA+OwkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJCVVBUlQwOiBzZXJpYWxAZWY2MDAzMDAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDMwMCAweDg+OworCQkJCXZpcnR1YWwtcmVnID0gPDB4ZWY2MDAzMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwweDA+Oy8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OwkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwweDI+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4ND47CisJCQl9OworCisJCQlJSUM6IGkyY0BlZjYwMDUwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQwNWdwIiwgImlibSxpaWMiOworCQkJCXJlZyA9IDwweGVmNjAwNTAwIDB4MTE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8MHgyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJfTsKKworCQkJR1BJTzogZ3Bpb0BlZjYwMDcwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZ3Bpby00MDVncCI7CisJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgyMD47CisJCQl9OworCisJCQlFTUFDOiBldGhlcm5ldEBlZjYwMDgwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00MDVncCIsICJpYm0sZW1hYyI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwweDI+OworCQkJCWludGVycnVwdHMgPSA8MHhmIDB4NCAweDkgMHg0PjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkJcmVnID0gPDB4ZWY2MDA4MDAgMHg3MD47CisJCQkJbWFsLWRldmljZSA9IDwweDM+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDB4MD47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MHgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDB4MD47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MHg1ZGM+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDwweDEwMDA+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDwweDgwMD47CisJCQkJcGh5LW1vZGUgPSAicm1paSI7CisJCQkJcGh5LW1hcCA9IDwweDE+OworCQkJfTsKKwkJfTsKKworCQlFQkMwOiBlYmMgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sZWJjLTQwNWdwIiwgImlibSxlYmMiOworCQkJZGNyLXJlZyA9IDwweDEyIDB4Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwweDI+OworCQkJI3NpemUtY2VsbHMgPSA8MHgxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwweDA+OwkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJCXNyYW1AMCwwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MCAweDgwMDAwPjsKKwkJCX07CisKKwkJCWZsYXNoQDAsODAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiamVkZWMtZmxhc2giOworCQkJCWJhbmstd2lkdGggPSA8MHgxPjsKKwkJCQlyZWcgPSA8MHgwIDB4ODAwMDAgMHg4MDAwMD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MHgxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwweDE+OworCisJCQkJcGFydGl0aW9uQDAgeworCQkJCQlsYWJlbCA9ICJPcGVuQklPUyI7CisJCQkJCXJlZyA9IDwweDAgMHg4MDAwMD47CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQGVmNjAwMzAwIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCmluZGV4IDc0NDllNTQuLjZiODUwNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwpAQCAtMTIxLDYgKzEyMSwxNCBAQAogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CiAJCQkJcmVnID0gPDB4Njg+OwogCQkJfTsKKworCQkJbWN1X3BpbzogbWN1QGEgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4MzE1ZXJkYiIsCisJCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwkJCQlyZWcgPSA8MHgwYT47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJfTsKIAkJfTsKIAogCQlzcGlANzAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cwppbmRleCBlNGNjMTc2Li41N2M1OTViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKQEAgLTYwLDcgKzYwLDcgQEAKIAl9OwogCiAJYmNzckBmODAwMDAwMCB7Ci0JCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzbWRzLWJjc3IiOwogCQlyZWcgPSA8MHhmODAwMDAwMCAweDgwMDA+OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKaW5kZXggNWNlZGYzNy4uMmM5ZDU0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKQEAgLTgzLDYgKzgzLDE0IEBACiAJCQlpbnRlcnJ1cHRzID0gPDE1IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWRmc3JyOworCisJCQlydGNANjggeworCQkJCWRldmljZV90eXBlID0gInJ0YyI7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJfTsKIAkJfTsKIAogCQlzcGlANzAwMCB7CkBAIC0xMzEsNiArMTM5LDE0IEBACiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CisKKwkJCW1jdV9waW86IG1jdUBhIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM0OWVtaXR4IiwKKwkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOworCQkJCXJlZyA9IDwweDBhPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQl9OwogCQl9OwogCiAJCXVzYkAyMjAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwppbmRleCA4MWFlMWQzLi5mYTQwNjQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKQEAgLTgxLDYgKzgxLDE0IEBACiAJCQlpbnRlcnJ1cHRzID0gPDE1IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWRmc3JyOworCisJCQlydGNANjggeworCQkJCWRldmljZV90eXBlID0gInJ0YyI7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJfTsKIAkJfTsKIAogCQlzcGlANzAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cwppbmRleCAwNGJmZGUzLi5jOTg2YzU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAl9OwogCiAJYmNzckBlMjQwMDAwMCB7Ci0JCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5bWRzLWJjc3IiOwogCQlyZWcgPSA8MHhlMjQwMDAwMCAweDgwMDA+OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9tZHMuZHRzCmluZGV4IDY2YTEyZDIuLjE0NTM0ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cwpAQCAtNjksNyArNjksNyBAQAogCQl9OwogCiAJCWJjc3JAMSwwIHsKLQkJCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOworIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjBtZHMtYmNzciI7CiAJCQlyZWcgPSA8MSAwIDB4ODAwMD47CiAJCX07CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCmluZGV4IDUzMTkxYmEuLjQzNWVmM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwpAQCAtMTIxLDYgKzEyMSwxNCBAQAogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CiAJCQkJcmVnID0gPDB4Njg+OwogCQkJfTsKKworCQkJbWN1X3BpbzogbWN1QGEgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc3ZXJkYiIsCisJCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwkJCQlyZWcgPSA8MHgwYT47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJfTsKIAkJfTsKIAogCQlpMmNAMzEwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwppbmRleCA0YTA5MTUzLi5iMTFlNjhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKQEAgLTEyMSw2ICsxMjEsMTQgQEAKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwogCQkJCXJlZyA9IDwweDY4PjsKIAkJCX07CisKKwkJCW1jdV9waW86IG1jdUBhIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3OGVyZGIiLAorCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7CisJCQkJcmVnID0gPDB4MGE+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDMxMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKaW5kZXggYmJkODg0YS4uMzM3YWY2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCkBAIC0xMjEsNiArMTIxLDE0IEBACiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKIAkJCQlyZWcgPSA8MHg2OD47CiAJCQl9OworCisJCQltY3VfcGlvOiBtY3VAYSB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzllcmRiIiwKKwkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOworCQkJCXJlZyA9IDwweDBhPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQl9OwogCQl9OwogCiAJCWkyY0AzMTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKaW5kZXggOTNmZGQ5OS4uMzVkYjFlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKQEAgLTEwOSw3ICsxMDksNyBAQAogCQkJCXJlZyA9IDwweDAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4Mj47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1kbWEtY2hhbm5lbCIsCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTUgMHgyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1kbWEtY2hhbm5lbCIsCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE2IDB4Mj47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZG1hLWNoYW5uZWwiLApAQCAtMTMzLDcgKzEzMyw3IEBACiAJCQkJcmVnID0gPDB4MTgwIDB4ODA+OwogCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDI+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CiAJCQl9OwogCQl9OwogCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gIlRTRUMiOworCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgewogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiVFNFQyI7CisJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCmluZGV4IGExNWYxMDMuLmM4MDE1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKQEAgLTUyLDcgKzUyLDcgQEAKIAl9OwogCiAJYmNzckBmODAwMDAwMCB7Ci0JCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLWJjc3IiOwogCQlyZWcgPSA8MHhmODAwMDAwMCAweDgwMDA+OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKaW5kZXggZTEyNGRkMS4uY2FkZDQ2NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKQEAgLTEzLDggKzEzLDggQEAKIC8gewogCW1vZGVsID0gImZzbCxNUEM4NTcyRFMiOwogCWNvbXBhdGlibGUgPSAiZnNsLE1QQzg1NzJEUyI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JI3NpemUtY2VsbHMgPSA8MT47CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQwID0gJmVuZXQwOwpAQCAtNjEsNyArNjEsNiBAQAogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDB4MCAweDA+OwkvLyBGaWxsZWQgYnkgVS1Cb290CiAJfTsKIAogCXNvYzg1NzJAZmZlMDAwMDAgewpAQCAtNjksOCArNjgsOCBAQAogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJZGV2aWNlX3R5cGUgPSAic29jIjsKIAkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKLQkJcmFuZ2VzID0gPDB4MCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKLQkJcmVnID0gPDB4ZmZlMDAwMDAgMHgxMDAwPjsJLy8gQ0NTUkJBUiAmIHNvYyByZWdzLCByZW1vdmUgb25jZSBwYXJzZSBjb2RlIGZvciBpbW1yYmFzZSBmaXhlZAorCQlyYW5nZXMgPSA8MHgwIDAgMHhmZmUwMDAwMCAweDEwMDAwMD47CisJCXJlZyA9IDwwIDB4ZmZlMDAwMDAgMCAweDEwMDA+OwkvLyBDQ1NSQkFSICYgc29jIHJlZ3MsIHJlbW92ZSBvbmNlIHBhcnNlIGNvZGUgZm9yIGltbXJiYXNlIGZpeGVkCiAJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewpAQCAtMzUxLDEwICszNTAsMTAgQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhmZmUwODAwMCAweDEwMDA+OworCQlyZWcgPSA8MCAweGZmZTA4MDAwIDAgMHgxMDAwPjsKIAkJYnVzLXJhbmdlID0gPDAgMjU1PjsKLQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCi0JCQkgIDB4MTAwMDAwMCAweDAgMHgwIDB4ZmZjMDAwMDAgMHgwIDB4MTAwMDA+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzAwMDAwIDB4MCAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjQgMj47CkBAIC01NjEsMTAgKzU2MCwxMCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGZmZTA5MDAwIDB4MTAwMD47CisJCXJlZyA9IDwwIDB4ZmZlMDkwMDAgMCAweDEwMDA+OwogCQlidXMtcmFuZ2UgPSA8MCAyNTU+OwotCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKLQkJCSAgMHgxMDAwMDAwIDB4MCAweDAgMHhmZmMxMDAwMCAweDAgMHgxMDAwMD47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMHgwIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwyNiAyPjsKQEAgLTU5OCwxMCArNTk3LDEwIEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZmZlMGEwMDAgMHgxMDAwPjsKKwkJcmVnID0gPDAgMHhmZmUwYTAwMCAwIDB4MTAwMD47CiAJCWJ1cy1yYW5nZSA9IDwwIDI1NT47Ci0JCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMHhjMDAwMDAwMCAweDAgMHgyMDAwMDAwMAotCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGZmYzIwMDAwIDB4MCAweDEwMDAwPjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAwIDB4YzAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMyMDAwMCAweDAgMHgwMDAxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDI3IDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0LXdyYXBwZXIuYyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC13cmFwcGVyLmMKaW5kZXggYzU0MWZkOC4uOTI3NjMyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0LXdyYXBwZXIuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQtd3JhcHBlci5jCkBAIC0xMDUsNiArMTA1LDExIEBACiAJcmV0dXJuIGNoZWNrX2VycihyYyk7CiB9CiAKK3N0YXRpYyBpbnQgZmR0X3dyYXBwZXJfZGVsX25vZGUoY29uc3Qgdm9pZCAqZGV2cCkKK3sKKwlyZXR1cm4gZmR0X2RlbF9ub2RlKGZkdCwgZGV2cF9vZmZzZXQoZGV2cCkpOworfQorCiBzdGF0aWMgdm9pZCAqZmR0X3dyYXBwZXJfZ2V0X3BhcmVudChjb25zdCB2b2lkICpkZXZwKQogewogCXJldHVybiBvZmZzZXRfZGV2cChmZHRfcGFyZW50X29mZnNldChmZHQsIGRldnBfb2Zmc2V0KGRldnApKSk7CkBAIC0xNjUsNiArMTcwLDcgQEAKIHZvaWQgZmR0X2luaXQodm9pZCAqYmxvYikKIHsKIAlpbnQgZXJyOworCWludCBidWZzaXplOwogCiAJZHRfb3BzLmZpbmRkZXZpY2UgPSBmZHRfd3JhcHBlcl9maW5kZGV2aWNlOwogCWR0X29wcy5nZXRwcm9wID0gZmR0X3dyYXBwZXJfZ2V0cHJvcDsKQEAgLTE3MywyMSArMTc5LDIxIEBACiAJZHRfb3BzLmNyZWF0ZV9ub2RlID0gZmR0X3dyYXBwZXJfY3JlYXRlX25vZGU7CiAJZHRfb3BzLmZpbmRfbm9kZV9ieV9wcm9wX3ZhbHVlID0gZmR0X3dyYXBwZXJfZmluZF9ub2RlX2J5X3Byb3BfdmFsdWU7CiAJZHRfb3BzLmZpbmRfbm9kZV9ieV9jb21wYXRpYmxlID0gZmR0X3dyYXBwZXJfZmluZF9ub2RlX2J5X2NvbXBhdGlibGU7CisJZHRfb3BzLmRlbF9ub2RlID0gZmR0X3dyYXBwZXJfZGVsX25vZGU7CiAJZHRfb3BzLmdldF9wYXRoID0gZmR0X3dyYXBwZXJfZ2V0X3BhdGg7CiAJZHRfb3BzLmZpbmFsaXplID0gZmR0X3dyYXBwZXJfZmluYWxpemU7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGR0IGJsb2IgaXMgdGhlIHJpZ2h0IHZlcnNpb24gYW5kIHNvIGZvcnRoICovCiAJZmR0ID0gYmxvYjsKLQllcnIgPSBmZHRfb3Blbl9pbnRvKGZkdCwgZmR0LCBmZHRfdG90YWxzaXplKGJsb2IpKTsKLQlpZiAoZXJyID09IC1GRFRfRVJSX05PU1BBQ0UpIHsKLQkJaW50IGJ1ZnNpemUgPSBmZHRfdG90YWxzaXplKGZkdCkgKyA0OwotCQlidWYgPSBtYWxsb2MoYnVmc2l6ZSk7Ci0JCWVyciA9IGZkdF9vcGVuX2ludG8oZmR0LCBidWYsIGJ1ZnNpemUpOwotCX0KKwlidWZzaXplID0gZmR0X3RvdGFsc2l6ZShmZHQpICsgNDsKKwlidWYgPSBtYWxsb2MoYnVmc2l6ZSk7CisJaWYoIWJ1ZikKKwkJZmF0YWwoIm1hbGxvYyBmYWlsZWQuIGNhbid0IHJlbG9jYXRlIHRoZSBkZXZpY2UgdHJlZVxuXHIiKTsKKworCWVyciA9IGZkdF9vcGVuX2ludG8oZmR0LCBidWYsIGJ1ZnNpemUpOwogCiAJaWYgKGVyciAhPSAwKQogCQlmYXRhbCgiZmR0X2luaXQoKTogJXNcblxyIiwgZmR0X3N0cmVycm9yKGVycikpOwogCi0JaWYgKGJ1ZikKLQkJZmR0ID0gYnVmOworCWZkdCA9IGJ1ZjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L21haW4uYyBiL2FyY2gvcG93ZXJwYy9ib290L21haW4uYwppbmRleCA5ZTdmM2RkLi5hZTMyODAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9tYWluLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbWFpbi5jCkBAIC01Niw5ICs1NiwxOSBAQAogCWlmIChwbGF0Zm9ybV9vcHMudm1saW51eF9hbGxvYykgewogCQlhZGRyID0gcGxhdGZvcm1fb3BzLnZtbGludXhfYWxsb2MoZWkubWVtc2l6ZSk7CiAJfSBlbHNlIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKV9zdGFydCA8IGVpLm1lbXNpemUpCisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSBrZXJuZWwgaW1hZ2UgKHdpdGhvdXQgYnNzKSB3b3VsZCBvdmVyd3JpdGUgdGhlCisJCSAqIGJvb3R3cmFwcGVyLiBUaGUgZGV2aWNlIHRyZWUgaGFzIGJlZW4gbW92ZWQgaW4gZmR0X2luaXQoKQorCQkgKiB0byBhbiBhcmVhIGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpIChzb21ld2hlcmUgcGFzdCBfZW5kKS4KKwkJICovCisJCWlmICgodW5zaWduZWQgbG9uZylfc3RhcnQgPCBlaS5sb2Fkc2l6ZSkKIAkJCWZhdGFsKCJJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBrZXJuZWwgYXQgYWRkcmVzcyAwISIKLQkJCSAgICAgICAiIChfc3RhcnQ9JXApXG5cciIsIF9zdGFydCk7CisJCQkgICAgICAgIiAoX3N0YXJ0PSVwLCB1bmNvbXJlc3NlZCBzaXplPSUwOHgpXG5cciIsCisJCQkgICAgICAgX3N0YXJ0LCBlaS5sb2Fkc2l6ZSk7CisKKwkJaWYgKCh1bnNpZ25lZCBsb25nKV9lbmQgPCBlaS5tZW1zaXplKQorCQkJZmF0YWwoIlRoZSBmaW5hbCBrZXJuZWwgaW1hZ2Ugd291bGQgb3ZlcndyaXRlIHRoZSAiCisJCQkJCSJkZXZpY2UgdHJlZVxuXHIiKTsKIAl9CiAKIAkvKiBGaW5hbGx5LCBndW56aXAgdGhlIGtlcm5lbCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvb3BzLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9vcHMuaAppbmRleCAzMjFlMmY1Li5iMzIxOGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9vcHMuaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9vcHMuaApAQCAtNDAsNiArNDAsNyBAQAogCQkJY29uc3QgaW50IGJ1Zmxlbik7CiAJaW50CSgqc2V0cHJvcCkoY29uc3Qgdm9pZCAqcGhhbmRsZSwgY29uc3QgY2hhciAqbmFtZSwKIAkJCWNvbnN0IHZvaWQgKmJ1ZiwgY29uc3QgaW50IGJ1Zmxlbik7CisJaW50ICgqZGVsX25vZGUpKGNvbnN0IHZvaWQgKnBoYW5kbGUpOwogCXZvaWQgKigqZ2V0X3BhcmVudCkoY29uc3Qgdm9pZCAqcGhhbmRsZSk7CiAJLyogVGhlIG5vZGUgbXVzdCBub3QgYWxyZWFkeSBleGlzdC4gKi8KIAl2b2lkICooKmNyZWF0ZV9ub2RlKShjb25zdCB2b2lkICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpOwpAQCAtMTI2LDYgKzEyNywxMSBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZGVsX25vZGUoY29uc3Qgdm9pZCAqZGV2cCkKK3sKKwlyZXR1cm4gZHRfb3BzLmRlbF9ub2RlID8gZHRfb3BzLmRlbF9ub2RlKGRldnApIDogLTE7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X3BhcmVudChjb25zdCBjaGFyICpkZXZwKQogewogCXJldHVybiBkdF9vcHMuZ2V0X3BhcmVudCA/IGR0X29wcy5nZXRfcGFyZW50KGRldnApIDogTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3N0cmluZy5TIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc3RyaW5nLlMKaW5kZXggNjQzZTRjYi4uYWNjOTQyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvc3RyaW5nLlMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc3RyaW5nLlMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCS5nbG9ibAltZW1jbXAKIG1lbWNtcDoKIAljbXB3aQkwLHI1LDAKLQlibGVscgorCWJsZQkyZgogCW10Y3RyCXI1CiAJYWRkaQlyNixyMywtMQogCWFkZGkJcjQscjQsLTEKQEAgLTI0NCw2ICsyNDQsOCBAQAogCXN1YmYuCXIzLHIwLHIzCiAJYmRuenQJMiwxYgogCWJscgorMjoJbGkJcjMsMAorCWJscgogCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgppbmRleCBlZTBkYzQxLi5mMzkwNzM1IDEwMDc1NQotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKQEAgLTMwNiwxMSArMzA2LDE0IEBACiAKICMgcG9zdC1wcm9jZXNzaW5nIG5lZWRlZCBmb3Igc29tZSBwbGF0Zm9ybXMKIGNhc2UgIiRwbGF0Zm9ybSIgaW4KLXBzZXJpZXN8Y2hycCkKK3BzZXJpZXMpCiAgICAgJHtDUk9TU31vYmpjb3B5IC1PIGJpbmFyeSAtaiAuZmFrZWVsZiAiJGtlcm5lbCIgIiRvZmlsZSIucnBhbm90ZQogICAgICRvYmpiaW4vYWRkbm90ZSAiJG9maWxlIiAiJG9maWxlIi5ycGFub3RlCiAgICAgcm0gLXIgIiRvZmlsZSIucnBhbm90ZQogICAgIDs7CitjaHJwKQorICAgICRvYmpiaW4vYWRkbm90ZSAtciBjMDAwMDAgIiRvZmlsZSIKKyAgICA7OwogY29mZikKICAgICAke0NST1NTfW9iamNvcHkgLU8gYWl4Y29mZi1yczYwMDAgLS1zZXQtc3RhcnQgIiRlbnRyeSIgIiRvZmlsZSIKICAgICAkb2JqYmluL2hhY2stY29mZiAiJG9maWxlIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2FjYWRpYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWJkOWViNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTIxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM1CisjIE1vbiBPY3QgMTMgMTM6NDc6MTYgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CitDT05GSUdfNDB4PXkKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR180eHg9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX0FDQURJQT15CisjIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1ZJUlRFWF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM0MHhfU0lNUExFPXkKK0NPTkZJR180MDVFWj15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR180eHhfU09DPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKK0NPTkZJR19JQk1fTkVXX0VNQUNfREVCVUc9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQ9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUj15CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MmZjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvaGN1NF9kZWZjb25maWcKQEAgLTAsMCArMSw5MjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi41CisjIFR1ZSBTZXAgMTYgMDA6NDQ6MzMgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CitDT05GSUdfNDB4PXkKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR180eHg9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorIyBDT05GSUdfTE9HQlVGRkVSIGlzIG5vdCBzZXQKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0CitDT05GSUdfSENVND15CisjIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1ZJUlRFWF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR180eHhfU09DPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPW0KK0NPTkZJR19NVERfQkxPQ0s9bQorIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCisjIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfWUFGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz15CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tkdW1wLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2R1bXAuaAppbmRleCBmNmM5M2M3Li5hNTAzZGE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2R1bXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2R1bXAuaApAQCAtOSw2ICs5LDEyIEBACiAgKiBSZXNlcnZlIHRvIHRoZSBlbmQgb2YgdGhlIEZXTk1JIGFyZWEsIHNlZSBoZWFkXzY0LlMgKi8KICNkZWZpbmUgS0RVTVBfUkVTRVJWRV9MSU1JVAkweDEwMDAwIC8qIDY0SyAqLwogCisvKgorICogVXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVsb2NhdGFibGUga2R1bXAga2VybmVsIGFuZCBvdGhlcgorICoga2VybmVscworICovCisjZGVmaW5lIEtEVU1QX1NJR05BVFVSRQkweGZlZWQxMjM0CisKICNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogCiAjZGVmaW5lIEtEVU1QX1RSQU1QT0xJTkVfU1RBUlQJMHgwMTAwCkBAIC0xOSwxNyArMjUsMTggQEAKICNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fa2R1bXBfZmxhZzsKKworI2lmIGRlZmluZWQoQ09ORklHX0NSQVNIX0RVTVApICYmICFkZWZpbmVkKENPTkZJR19SRUxPQ0FUQUJMRSkKIGV4dGVybiB2b2lkIHJlc2VydmVfa2R1bXBfdHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiB2b2lkIHNldHVwX2tkdW1wX3RyYW1wb2xpbmUodm9pZCk7Ci0KLSNlbHNlIC8qICFDT05GSUdfQ1JBU0hfRFVNUCAqLwotCisjZWxzZQorLyogIUNSQVNIX0RVTVAgfHwgUkVMT0NBVEFCTEUgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNlcnZlX2tkdW1wX3RyYW1wb2xpbmUodm9pZCkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9rZHVtcF90cmFtcG9saW5lKHZvaWQpIHsgOyB9CisjZW5kaWYKIAotI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX1BQQzY0X0tEVU1QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDY0ZTE0NDUuLmMwYjhkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTAsOSArMTAsMTMgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL2tkdW1wLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qCiAgKiBPbiBQUEMzMiBwYWdlIHNpemUgaXMgNEsuIEZvciBQUEM2NCB3ZSBzdXBwb3J0IGVpdGhlciA0SyBvciA2NEsgc29mdHdhcmUKQEAgLTczLDYgKzc3LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1JFTE9DQVRBQkxFKQogI2lmbmRlZiBfX0FTU0VNQkxZX18KKwogZXh0ZXJuIHBoeXNfYWRkcl90IG1lbXN0YXJ0X2FkZHI7CiBleHRlcm4gcGh5c19hZGRyX3Qga2VybnN0YXJ0X2FkZHI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCmluZGV4IGFlMmVhODAuLjkwNDdhZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaApAQCAtNzQsNiArNzQsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHBjaV9pb19zaXplOwogI2VuZGlmCiAKKwkvKiBTb21lIG1hY2hpbmVzIGhhdmUgYSBzcGVjaWFsIHJlZ2lvbiB0byBmb3J3YXJkIHRoZSBJU0EKKwkgKiAibWVtb3J5IiBjeWNsZXMgc3VjaCBhcyBWR0EgbWVtb3J5IHJlZ2lvbnMuIExlZnQgdG8gMAorCSAqIGlmIHVuc3VwcG9ydGVkCisJICovCisJcmVzb3VyY2Vfc2l6ZV90CWlzYV9tZW1fcGh5czsKKwlyZXNvdXJjZV9zaXplX3QJaXNhX21lbV9zaXplOworCiAJc3RydWN0IHBjaV9vcHMgKm9wczsKIAl1bnNpZ25lZCBpbnQgX19pb21lbSAqY2ZnX2FkZHI7CiAJdm9pZCBfX2lvbWVtICpjZmdfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCAwZTUyYzc4Li4zOWQ1NDdmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0xMjMsNiArMTIzLDE2IEBACiAvKiBUZWxsIGRyaXZlcnMvcGNpL3Byb2MuYyB0aGF0IHdlIGhhdmUgcGNpX21tYXBfcGFnZV9yYW5nZSgpICovCiAjZGVmaW5lIEhBVkVfUENJX01NQVAJMQogCitleHRlcm4gaW50IHBjaV9sZWdhY3lfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBsb2ZmX3QgcG9ydCwgdTMyICp2YWwsCisJCQkgICBzaXplX3QgY291bnQpOworZXh0ZXJuIGludCBwY2lfbGVnYWN5X3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIGxvZmZfdCBwb3J0LCB1MzIgdmFsLAorCQkJICAgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUpOworCisjZGVmaW5lIEhBVkVfUENJX0xFR0FDWQkxCisKICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQogLyoKICAqIEZvciA2NC1iaXQga2VybmVscywgcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gaXMgbm90IGEgbm9wLgpAQCAtMjI2LDUgKzIzNiw2IEBACiBleHRlcm4gdm9pZCBwY2liaW9zX2RvX2J1c19zZXR1cChzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGV4dGVybiB2b2lkIHBjaWJpb3NfZml4dXBfb2ZfcHJvYmVkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIAorCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1BPV0VSUENfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmgKaW5kZXggZmRhOTg3MS4uNWFhMjJjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmgKQEAgLTY3OCw2ICs2NzgsOCBAQAogCXU4IGJ1ZltQUzNBVl9QS1RfQVZCX1BBUkFNX01BWF9CVUZfU0laRV07CiB9OwogCisvKiBjaGFubmVsIHN0YXR1cyAqLworZXh0ZXJuIHU4IHBzM2F2X21vZGVfY3NfaW5mb1tdOwogCiAvKiogY29tbWFuZCBzdGF0dXMgKiovCiAjZGVmaW5lIFBTM0FWX1NUQVRVU19TVUNDRVNTCQkJMHgwMDAwCS8qIHN1Y2Nlc3MgKi8KQEAgLTczNSw2ICs3MzcsNyBAQAogZXh0ZXJuIGludCBwczNhdl92aWRlb19tb2RlMnJlcyh1MzIsIHUzMiAqLCB1MzIgKik7CiBleHRlcm4gaW50IHBzM2F2X3ZpZGVvX211dGUoaW50KTsKIGV4dGVybiBpbnQgcHMzYXZfYXVkaW9fbXV0ZShpbnQpOworZXh0ZXJuIGludCBwczNhdl9hdWRpb19tdXRlX2FuYWxvZyhpbnQpOwogZXh0ZXJuIGludCBwczNhdl9kZXZfb3Blbih2b2lkKTsKIGV4dGVybiBpbnQgcHMzYXZfZGV2X2Nsb3NlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHMzYXZfcmVnaXN0ZXJfZmxpcF9jdGwodm9pZCAoKmZsaXBfY3RsKShpbnQgb24sIHZvaWQgKmRhdGEpLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDczNGUwNzUuLjI4MGE5MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEyOSw3ICsxMjksNyBAQAogI2RlZmluZSBDSEVDS19GVUxMX1JFR1MocmVncykJCQkJCQkgICAgICBcCiBkbyB7CQkJCQkJCQkJICAgICAgXAogCWlmICgocmVncyktPnRyYXAgJiAxKQkJCQkJCSAgICAgIFwKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IHBhcnRpYWwgcmVnaXN0ZXIgc2V0XG4iLCBfX0ZVTkNUSU9OX18pOyBcCisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBwYXJ0aWFsIHJlZ2lzdGVyIHNldFxuIiwgX19mdW5jX18pOyBcCiB9IHdoaWxlICgwKQogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NpZ25hbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NpZ25hbC5oCmluZGV4IGE3MzYwY2QuLjY5ZjcwOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zaWduYWwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2lnbmFsLmgKQEAgLTEyMiw3ICsxMjIsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IHB0X3JlZ3M7Ci1leHRlcm4gdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgdGhyZWFkX2luZm9fZmxhZ3MpOwogI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggZTcwZDA0OC4uYjFlYjgzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMTI3Nyw2ICsxMjc3LDE5IEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAogCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCiAJfSwKKwl7CisJCS8qIDQwNUVaICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4NDE1MTAwMDAsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVoiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQwWCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfAorCQkJUFBDX0ZFQVRVUkVfSEFTX01NVSB8IFBQQ19GRUFUVVJFX0hBU180eHhNQUMsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAorCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCisJfSwKIAl7CS8qIGRlZmF1bHQgbWF0Y2ggKi8KIAkJLnB2cl9tYXNrCQk9IDB4MDAwMDAwMDAsCiAJCS5wdnJfdmFsdWUJCT0gMHgwMDAwMDAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggYTMyM2M5Yi4uMTk2NzFhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTI3LDYgKzI3LDEwIEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKworI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKIHZvaWQgX19pbml0IHJlc2VydmVfa2R1bXBfdHJhbXBvbGluZSh2b2lkKQogewogCWxtYl9yZXNlcnZlKDAsIEtEVU1QX1JFU0VSVkVfTElNSVQpOwpAQCAtNjUsOCArNjksMTMgQEAKIAogCURCRygiIDwtIHNldHVwX2tkdW1wX3RyYW1wb2xpbmUoKVxuIik7CiB9CisjZW5kaWYgLyogQ09ORklHX1JFTE9DQVRBQkxFICovCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLwogc3RhdGljIGludCBfX2luaXQgcGFyc2VfZWxmY29yZWhkcihjaGFyICpwKQogewogCWlmIChwKQpAQCAtNzUsNyArODQsNiBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgiZWxmY29yZWhkcj0iLCBwYXJzZV9lbGZjb3JlaGRyKTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9zYXZlbWF4bWVtKGNoYXIgKnApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDg0ODU2YmUuLjY5NDg5YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC05Nyw2ICs5NywxMiBAQAogX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZToKIAkubGxvbmcJMHgwCiAKKwkvKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IHB1cmdhdG9yeSBpZiB3ZSBzaG91bGQgYmUgYSBrZHVtcCBrZXJuZWwuICovCisJLyogRG8gbm90IG1vdmUgdGhpcyB2YXJpYWJsZSBhcyBwdXJnYXRvcnkga25vd3MgYWJvdXQgaXQuICovCisJLmdsb2JsCV9fa2R1bXBfZmxhZworX19rZHVtcF9mbGFnOgorCS5sbG9uZwkweDAKKwogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogCS8qCiAJICogQXQgb2Zmc2V0IDB4MjAsIHRoZXJlIGlzIGEgcG9pbnRlciB0byBpU2VyaWVzIExQQVIgZGF0YS4KQEAgLTEzODQsNyArMTM5MCwxMyBAQAogCS8qIHByb2Nlc3MgcmVsb2NhdGlvbnMgZm9yIHRoZSBmaW5hbCBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgKi8KIAlsaXMJcjI1LFBBR0VfT0ZGU0VUQGhpZ2hlc3QJLyogY29tcHV0ZSB2aXJ0dWFsIGJhc2Ugb2Yga2VybmVsICovCiAJc2xkaQlyMjUscjI1LDMyCi0JbXIJcjMscjI1CisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlsZAlyNyxfX2tkdW1wX2ZsYWctX3N0ZXh0KHIyNikKKwljbXBsZGkJY3IwLHI3LDEJLyoga2R1bXAga2VybmVsID8gLSBzdGF5IHdoZXJlIHdlIGFyZSAqLworCWJuZQkxZgorCWFkZAlyMjUscjI1LHIyNgorI2VuZGlmCisxOgltcglyMyxyMjUKIAlibAkucmVsb2NhdGUKICNlbmRpZgogCkBAIC0xMzk4LDExICsxNDEwLDI2IEBACiAJbGkJcjMsMAkJCS8qIHRhcmdldCBhZGRyICovCiAJbXIuCXI0LHIyNgkJCS8qIEluIHNvbWUgY2FzZXMgdGhlIGxvYWRlciBtYXkgICovCiAJYmVxCTlmCQkJLyogaGF2ZSBhbHJlYWR5IHB1dCB1cyBhdCB6ZXJvICovCi0JbGlzCXI1LChjb3B5X3RvX2hlcmUgLSBfc3RleHQpQGhhCi0JYWRkaQlyNSxyNSwoY29weV90b19oZXJlIC0gX3N0ZXh0KUBsIC8qICMgYnl0ZXMgb2YgbWVtb3J5IHRvIGNvcHkgKi8KIAlsaQlyNiwweDEwMAkJLyogU3RhcnQgb2Zmc2V0LCB0aGUgZmlyc3QgMHgxMDAgKi8KIAkJCQkJLyogYnl0ZXMgd2VyZSBjb3BpZWQgZWFybGllci4JICovCiAKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAorLyoKKyAqIENoZWNrIGlmIHRoZSBrZXJuZWwgaGFzIHRvIGJlIHJ1bm5pbmcgYXMgcmVsb2NhdGFibGUga2VybmVsIGJhc2VkIG9uIHRoZQorICogdmFyaWFibGUgX19rZHVtcF9mbGFnLCBpZiBpdCBpcyBzZXQgdGhlIGtlcm5lbCBpcyB0cmVhdGVkIGFzIHJlbG9jYXRhYmxlCisgKiBrZXJuZWwsIG90aGVyd2lzZSBpdCB3aWxsIGJlIG1vdmVkIHRvIFBIWVNJQ0FMX1NUQVJUCisgKi8KKwlsZAlyNyxfX2tkdW1wX2ZsYWctX3N0ZXh0KHIyNikKKwljbXBsZGkJY3IwLHI3LDEKKwlibmUJM2YKKworCWxpCXI1LF9fZW5kX2ludGVycnVwdHMgLSBfc3RleHQJLyoganVzdCBjb3B5IGludGVycnVwdHMgKi8KKwliCTVmCiszOgorI2VuZGlmCisJbGlzCXI1LChjb3B5X3RvX2hlcmUgLSBfc3RleHQpQGhhCisJYWRkaQlyNSxyNSwoY29weV90b19oZXJlIC0gX3N0ZXh0KUBsIC8qICMgYnl0ZXMgb2YgbWVtb3J5IHRvIGNvcHkgKi8KKwogCWJsCS5jb3B5X2FuZF9mbHVzaAkJLyogY29weSB0aGUgZmlyc3QgbiBieXRlcwkgKi8KIAkJCQkJLyogdGhpcyBpbmNsdWRlcyB0aGUgY29kZSBiZWluZwkgKi8KIAkJCQkJLyogZXhlY3V0ZWQgaGVyZS4JCSAqLwpAQCAtMTQxMSwxNSArMTQzOCwxNSBAQAogCW10Y3RyCXI4CiAJYmN0cgogCitwX2VuZDoJLmxsb25nCV9lbmQgLSBfc3RleHQKKwogNDoJLyogTm93IGNvcHkgdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCB1cCB0byBfZW5kICovCiAJYWRkaXMJcjUscjI2LChwX2VuZCAtIF9zdGV4dClAaGEKIAlsZAlyNSwocF9lbmQgLSBfc3RleHQpQGwocjUpCS8qIGdldCBfZW5kICovCi0JYmwJLmNvcHlfYW5kX2ZsdXNoCQkvKiBjb3B5IHRoZSByZXN0ICovCis1OglibAkuY29weV9hbmRfZmx1c2gJCS8qIGNvcHkgdGhlIHJlc3QgKi8KIAogOToJYgkuc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtCiAKLXBfZW5kOgkubGxvbmcJX2VuZCAtIF9zdGV4dAotCiAvKgogICogQ29weSByb3V0aW5lIHVzZWQgdG8gY29weSB0aGUga2VybmVsIHRvIHN0YXJ0IGF0IHBoeXNpY2FsIGFkZHJlc3MgMAogICogYW5kIGZsdXNoIGFuZCBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgYXMgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCmluZGV4IGVhMWJhODkuLjM4NTdkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKQEAgLTQ1OCw2ICs0NTgsNDIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYodGJsLT5pdF9sb2NrKSwgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBpb21tdV90YWJsZV9jbGVhcihzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCkKK3sKKwlpZiAoIV9fa2R1bXBfZmxhZykgeworCQkvKiBDbGVhciB0aGUgdGFibGUgaW4gY2FzZSBmaXJtd2FyZSBsZWZ0IGFsbG9jYXRpb25zIGluIGl0ICovCisJCXBwY19tZC50Y2VfZnJlZSh0YmwsIHRibC0+aXRfb2Zmc2V0LCB0YmwtPml0X3NpemUpOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlpZiAocHBjX21kLnRjZV9nZXQpIHsKKwkJdW5zaWduZWQgbG9uZyBpbmRleCwgdGNldmFsLCB0Y2Vjb3VudCA9IDA7CisKKwkJLyogUmVzZXJ2ZSB0aGUgZXhpc3RpbmcgbWFwcGluZ3MgbGVmdCBieSB0aGUgZmlyc3Qga2VybmVsLiAqLworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0YmwtPml0X3NpemU7IGluZGV4KyspIHsKKwkJCXRjZXZhbCA9IHBwY19tZC50Y2VfZ2V0KHRibCwgaW5kZXggKyB0YmwtPml0X29mZnNldCk7CisJCQkvKgorCQkJICogRnJlZWQgVENFIGVudHJ5IGNvbnRhaW5zIDB4N2ZmZmZmZmZmZmZmZmZmZiBvbiBKUzIwCisJCQkgKi8KKwkJCWlmICh0Y2V2YWwgJiYgKHRjZXZhbCAhPSAweDdmZmZmZmZmZmZmZmZmZmZVTCkpIHsKKwkJCQlfX3NldF9iaXQoaW5kZXgsIHRibC0+aXRfbWFwKTsKKwkJCQl0Y2Vjb3VudCsrOworCQkJfQorCQl9CisKKwkJaWYgKCh0YmwtPml0X3NpemUgLSB0Y2Vjb3VudCkgPCBLRFVNUF9NSU5fVENFX0VOVFJJRVMpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRDRSB0YWJsZSBpcyBmdWxsOyBmcmVlaW5nICIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJWQgZW50cmllcyBmb3IgdGhlIGtkdW1wIGJvb3RcbiIsCisJCQkJS0RVTVBfTUlOX1RDRV9FTlRSSUVTKTsKKwkJCWZvciAoaW5kZXggPSB0YmwtPml0X3NpemUgLSBLRFVNUF9NSU5fVENFX0VOVFJJRVM7CisJCQkJaW5kZXggPCB0YmwtPml0X3NpemU7IGluZGV4KyspCisJCQkJX19jbGVhcl9iaXQoaW5kZXgsIHRibC0+aXRfbWFwKTsKKwkJfQorCX0KKyNlbmRpZgorfQorCiAvKgogICogQnVpbGQgYSBpb21tdV90YWJsZSBzdHJ1Y3R1cmUuICBUaGlzIGNvbnRhaW5zIGEgYml0IG1hcCB3aGljaAogICogaXMgdXNlZCB0byBtYW5hZ2UgYWxsb2NhdGlvbiBvZiB0aGUgdGNlIHNwYWNlLgpAQCAtNDg0LDM4ICs1MjAsNyBAQAogCXRibC0+aXRfbGFyZ2VoaW50ID0gdGJsLT5pdF9oYWxmcG9pbnQ7CiAJc3Bpbl9sb2NrX2luaXQoJnRibC0+aXRfbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAotCWlmIChwcGNfbWQudGNlX2dldCkgewotCQl1bnNpZ25lZCBsb25nIGluZGV4OwotCQl1bnNpZ25lZCBsb25nIHRjZXZhbDsKLQkJdW5zaWduZWQgbG9uZyB0Y2Vjb3VudCA9IDA7Ci0KLQkJLyoKLQkJICogUmVzZXJ2ZSB0aGUgZXhpc3RpbmcgbWFwcGluZ3MgbGVmdCBieSB0aGUgZmlyc3Qga2VybmVsLgotCQkgKi8KLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGJsLT5pdF9zaXplOyBpbmRleCsrKSB7Ci0JCQl0Y2V2YWwgPSBwcGNfbWQudGNlX2dldCh0YmwsIGluZGV4ICsgdGJsLT5pdF9vZmZzZXQpOwotCQkJLyoKLQkJCSAqIEZyZWVkIFRDRSBlbnRyeSBjb250YWlucyAweDdmZmZmZmZmZmZmZmZmZmYgb24gSlMyMAotCQkJICovCi0JCQlpZiAodGNldmFsICYmICh0Y2V2YWwgIT0gMHg3ZmZmZmZmZmZmZmZmZmZmVUwpKSB7Ci0JCQkJX19zZXRfYml0KGluZGV4LCB0YmwtPml0X21hcCk7Ci0JCQkJdGNlY291bnQrKzsKLQkJCX0KLQkJfQotCQlpZiAoKHRibC0+aXRfc2l6ZSAtIHRjZWNvdW50KSA8IEtEVU1QX01JTl9UQ0VfRU5UUklFUykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVENFIHRhYmxlIGlzIGZ1bGw7ICIpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZnJlZWluZyAlZCBlbnRyaWVzIGZvciB0aGUga2R1bXAgYm9vdFxuIiwKLQkJCQlLRFVNUF9NSU5fVENFX0VOVFJJRVMpOwotCQkJZm9yIChpbmRleCA9IHRibC0+aXRfc2l6ZSAtIEtEVU1QX01JTl9UQ0VfRU5UUklFUzsKLQkJCQlpbmRleCA8IHRibC0+aXRfc2l6ZTsgaW5kZXgrKykKLQkJCQlfX2NsZWFyX2JpdChpbmRleCwgdGJsLT5pdF9tYXApOwotCQl9Ci0JfQotI2Vsc2UKLQkvKiBDbGVhciB0aGUgaGFyZHdhcmUgdGFibGUgaW4gY2FzZSBmaXJtd2FyZSBsZWZ0IGFsbG9jYXRpb25zIGluIGl0ICovCi0JcHBjX21kLnRjZV9mcmVlKHRibCwgdGJsLT5pdF9vZmZzZXQsIHRibC0+aXRfc2l6ZSk7Ci0jZW5kaWYKKwlpb21tdV90YWJsZV9jbGVhcih0YmwpOwogCiAJaWYgKCF3ZWxjb21lZCkgewogCQlwcmludGsoS0VSTl9JTkZPICJJT01NVSB0YWJsZSBpbml0aWFsaXplZCwgdmlydHVhbCBtZXJnaW5nICVzXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCBhYWI3Njg4Li5hYzJhMjFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtODgsMTEgKzg4LDEzIEBACiAKIAljcmFzaF9zaXplID0gY3Jhc2hrX3Jlcy5lbmQgLSBjcmFzaGtfcmVzLnN0YXJ0ICsgMTsKIAorI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKIAlpZiAoY3Jhc2hrX3Jlcy5zdGFydCAhPSBLRFVNUF9LRVJORUxCQVNFKQogCQlwcmludGsoIkNyYXNoIGtlcm5lbCBsb2NhdGlvbiBtdXN0IGJlIDB4JXhcbiIsCiAJCQkJS0RVTVBfS0VSTkVMQkFTRSk7CiAKIAljcmFzaGtfcmVzLnN0YXJ0ID0gS0RVTVBfS0VSTkVMQkFTRTsKKyNlbmRpZgogCWNyYXNoX3NpemUgPSBQQUdFX0FMSUdOKGNyYXNoX3NpemUpOwogCWNyYXNoa19yZXMuZW5kID0gY3Jhc2hrX3Jlcy5zdGFydCArIGNyYXNoX3NpemUgLSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCmluZGV4IGExNjg1MTQuLmU2ZWZlYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCkBAIC0yNTUsMTEgKzI1NSwxNCBAQAogLyogT3VyIGFzc2VtYmx5IGhlbHBlciwgaW4ga2V4ZWNfc3R1Yi5TICovCiBleHRlcm4gTk9SRVRfVFlQRSB2b2lkIGtleGVjX3NlcXVlbmNlKHZvaWQgKm5ld3N0YWNrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCQl2b2lkICppbWFnZSwgdm9pZCAqY29udHJvbCwKLQkJCQkJdm9pZCAoKmNsZWFyX2FsbCkodm9pZCkpIEFUVFJJQl9OT1JFVDsKKwkJCQkJdm9pZCAoKmNsZWFyX2FsbCkodm9pZCksCisJCQkJCXVuc2lnbmVkIGxvbmcga2R1bXBfZmxhZykgQVRUUklCX05PUkVUOwogCiAvKiB0b28gbGF0ZSB0byBmYWlsIGhlcmUgKi8KIHZvaWQgZGVmYXVsdF9tYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogeworCXVuc2lnbmVkIGxvbmcga2R1bXBfZmxhZyA9IDA7CisKIAkvKiBwcmVwYXJlIGNvbnRyb2wgY29kZSBpZiBhbnkgKi8KIAogCS8qCkBAIC0yNzAsOCArMjczLDEwIEBACiAgICAgICAgICogdXNpbmcgZGVidWdnZXIgSVBJLgogICAgICAgICAqLwogCi0gICAgICAgaWYgKGNyYXNoaW5nX2NwdSA9PSAtMSkKLSAgICAgICAgICAgICAgIGtleGVjX3ByZXBhcmVfY3B1cygpOworCWlmIChjcmFzaGluZ19jcHUgPT0gLTEpCisJCWtleGVjX3ByZXBhcmVfY3B1cygpOworCWVsc2UKKwkJa2R1bXBfZmxhZyA9IEtEVU1QX1NJR05BVFVSRTsKIAogCS8qIHN3aXRjaCB0byBhIHN0YXRpY2x5IGFsbG9jYXRlZCBzdGFjay4gIEJhc2VkIG9uIGlycSBzdGFjayBjb2RlLgogCSAqIFhYWDogdGhlIHRhc2sgc3RydWN0IHdpbGwgbGlrZWx5IGJlIGludmFsaWQgb25jZSB3ZSBkbyB0aGUgY29weSEKQEAgLTI4NCw3ICsyODksNyBAQAogCSAqLwogCWtleGVjX3NlcXVlbmNlKCZrZXhlY19zdGFjaywgaW1hZ2UtPnN0YXJ0LCBpbWFnZSwKIAkJCXBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpLAotCQkJcHBjX21kLmhwdGVfY2xlYXJfYWxsKTsKKwkJCXBwY19tZC5ocHRlX2NsZWFyX2FsbCwga2R1bXBfZmxhZyk7CiAJLyogTk9UUkVBQ0hFRCAqLwogfQogCkBAIC0zMTIsMTEgKzMxNywyNCBAQAogc3RhdGljIHZvaWQgX19pbml0IGV4cG9ydF9odGFiX3ZhbHVlcyh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAKIAlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW4iKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybjsKIAorCS8qIHJlbW92ZSBhbnkgc3RhbGUgcHJvcGVydHlzIHNvIG91cnMgY2FuIGJlIGZvdW5kICovCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkobm9kZSwga2VybmVsX2VuZF9wcm9wLm5hbWUsIE5VTEwpOworCWlmIChwcm9wKQorCQlwcm9tX3JlbW92ZV9wcm9wZXJ0eShub2RlLCBwcm9wKTsKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShub2RlLCBodGFiX2Jhc2VfcHJvcC5uYW1lLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcHJvbV9yZW1vdmVfcHJvcGVydHkobm9kZSwgcHJvcCk7CisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkobm9kZSwgaHRhYl9zaXplX3Byb3AubmFtZSwgTlVMTCk7CisJaWYgKHByb3ApCisJCXByb21fcmVtb3ZlX3Byb3BlcnR5KG5vZGUsIHByb3ApOworCisJLyogaW5mb3JtYXRpb24gbmVlZGVkIGJ5IHVzZXJzcGFjZSB3aGVuIHVzaW5nIGRlZmF1bHRfbWFjaGluZV9rZXhlYyAqLwogCWtlcm5lbF9lbmQgPSBfX3BhKF9lbmQpOwogCXByb21fYWRkX3Byb3BlcnR5KG5vZGUsICZrZXJuZWxfZW5kX3Byb3ApOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCmluZGV4IDMwNTNmZTUuLmEyNDNmZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC02MTEsMTAgKzYxMSwxMiBAQAogCiAKIC8qCi0gKiBrZXhlY19zZXF1ZW5jZShuZXdzdGFjaywgc3RhcnQsIGltYWdlLCBjb250cm9sLCBjbGVhcl9hbGwoKSkKKyAqIGtleGVjX3NlcXVlbmNlKG5ld3N0YWNrLCBzdGFydCwgaW1hZ2UsIGNvbnRyb2wsIGNsZWFyX2FsbCgpLCBrZHVtcF9mbGFnKQogICoKICAqIGRvZXMgdGhlIGdydW5neSB3b3JrIHdpdGggc3RhY2sgc3dpdGNoaW5nIGFuZCByZWFsIG1vZGUgc3dpdGNoZXMKICAqIGFsc28gZG9lcyBzaW1wbGUgY2FsbHMgdG8gb3RoZXIgY29kZQorICoKKyAqIGtkdW1wX2ZsYWcgc2F5cyB3aGV0aGVyIHRoZSBuZXh0IGtlcm5lbCBzaG91bGQgYmUgYSBrZHVtcCBrZXJuZWwuCiAgKi8KIAogX0dMT0JBTChrZXhlY19zZXF1ZW5jZSkKQEAgLTY0Nyw3ICs2NDksNyBAQAogCW1yCXIyOSxyNQkJCS8qIGltYWdlICh2aXJ0KSAqLwogCW1yCXIyOCxyNgkJCS8qIGNvbnRyb2wsIHVudXNlZCAqLwogCW1yCXIyNyxyNwkJCS8qIGNsZWFyX2FsbCgpIGZuIGRlc2MgKi8KLQltcglyMjYscjgJCQkvKiBzcGFyZSAqLworCW1yCXIyNixyOAkJCS8qIGtkdW1wIGZsYWcgKi8KIAlsaHoJcjI1LFBBQ0FIV0NQVUlEKHIxMykJLyogZ2V0IG91ciBwaHlzIGNwdSBmcm9tIHBhY2EgKi8KIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cywgd2UgYXJlIG92ZXJ3cml0aW5nIGtlcm5lbCBkYXRhIG5leHQgKi8KQEAgLTcwOSw1ICs3MTEsNiBAQAogCW1yCXI0LHIzMAkjIHN0YXJ0LCBha2EgcGh5cyBtZW0gb2Zmc2V0CiAJbXRscgk0CiAJbGkJcjUsMAotCWJscgkvKiBpbWFnZS0+c3RhcnQocGh5c2lkLCBpbWFnZS0+c3RhcnQsIDApOyAqLworCW1yCXI2LHIyNgkJCS8qIGtkdW1wX2ZsYWcgKi8KKwlibHIJLyogaW1hZ2UtPnN0YXJ0KHBoeXNpZCwgaW1hZ2UtPnN0YXJ0LCAwLCBrZHVtcF9mbGFnKTsgKi8KICNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggMDFjZThjMy4uMWVjNzM5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTQ1MSw3ICs0NTEsOCBAQAogCQlwY2lfZGV2X3B1dChwZGV2KTsKIAl9CiAKLQlEQkcoIm5vbi1QQ0kgbWFwIGZvciAlbHgsIHByb3Q6ICVseFxuIiwgb2Zmc2V0LCBwcm90KTsKKwlEQkcoIm5vbi1QQ0kgbWFwIGZvciAlbGx4LCBwcm90OiAlbHhcbiIsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0LCBwcm90KTsKIAogCXJldHVybiBfX3BncHJvdChwcm90KTsKIH0KQEAgLTQ5MCw2ICs0OTEsMTMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogVGhpcyBwcm92aWRlcyBsZWdhY3kgSU8gcmVhZCBhY2Nlc3Mgb24gYSBidXMgKi8KK2ludCBwY2lfbGVnYWN5X3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgbG9mZl90IHBvcnQsIHUzMiAqdmFsLCBzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoYnVzKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJwID0gJmhvc2UtPmlvX3Jlc291cmNlOworCXZvaWQgX19pb21lbSAqYWRkcjsKKworCS8qIENoZWNrIGlmIHBvcnQgY2FuIGJlIHN1cHBvcnRlZCBieSB0aGF0IGJ1cy4gV2Ugb25seSBjaGVjaworCSAqIHRoZSByYW5nZXMgb2YgdGhlIFBIQiB0aG91Z2gsIG5vdCB0aGUgYnVzIGl0c2VsZiBhcyB0aGUgcnVsZXMKKwkgKiBmb3IgZm9yd2FyZGluZyBsZWdhY3kgY3ljbGVzIGRvd24gYnJpZGdlcyBhcmUgbm90IG91ciBwcm9ibGVtCisJICogaGVyZS4gU28gaWYgdGhlIGhvc3QgYnJpZGdlIHN1cHBvcnRzIGl0LCB3ZSBkbyBpdC4KKwkgKi8KKwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKKwlvZmZzZXQgKz0gcG9ydDsKKworCWlmICghKHJwLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pKQorCQlyZXR1cm4gLUVOWElPOworCWlmIChvZmZzZXQgPCBycC0+c3RhcnQgfHwgKG9mZnNldCArIHNpemUpID4gcnAtPmVuZCkKKwkJcmV0dXJuIC1FTlhJTzsKKwlhZGRyID0gaG9zZS0+aW9fYmFzZV92aXJ0ICsgcG9ydDsKKworCXN3aXRjaChzaXplKSB7CisJY2FzZSAxOgorCQkqKCh1OCAqKXZhbCkgPSBpbl84KGFkZHIpOworCQlyZXR1cm4gMTsKKwljYXNlIDI6CisJCWlmIChwb3J0ICYgMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqKCh1MTYgKil2YWwpID0gaW5fbGUxNihhZGRyKTsKKwkJcmV0dXJuIDI7CisJY2FzZSA0OgorCQlpZiAocG9ydCAmIDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKigodTMyICopdmFsKSA9IGluX2xlMzIoYWRkcik7CisJCXJldHVybiA0OworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogVGhpcyBwcm92aWRlcyBsZWdhY3kgSU8gd3JpdGUgYWNjZXNzIG9uIGEgYnVzICovCitpbnQgcGNpX2xlZ2FjeV93cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBsb2ZmX3QgcG9ydCwgdTMyIHZhbCwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CisJc3RydWN0IHJlc291cmNlICpycCA9ICZob3NlLT5pb19yZXNvdXJjZTsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwkvKiBDaGVjayBpZiBwb3J0IGNhbiBiZSBzdXBwb3J0ZWQgYnkgdGhhdCBidXMuIFdlIG9ubHkgY2hlY2sKKwkgKiB0aGUgcmFuZ2VzIG9mIHRoZSBQSEIgdGhvdWdoLCBub3QgdGhlIGJ1cyBpdHNlbGYgYXMgdGhlIHJ1bGVzCisJICogZm9yIGZvcndhcmRpbmcgbGVnYWN5IGN5Y2xlcyBkb3duIGJyaWRnZXMgYXJlIG5vdCBvdXIgcHJvYmxlbQorCSAqIGhlcmUuIFNvIGlmIHRoZSBob3N0IGJyaWRnZSBzdXBwb3J0cyBpdCwgd2UgZG8gaXQuCisJICovCisJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7CisJb2Zmc2V0ICs9IHBvcnQ7CisKKwlpZiAoIShycC0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwlpZiAob2Zmc2V0IDwgcnAtPnN0YXJ0IHx8IChvZmZzZXQgKyBzaXplKSA+IHJwLT5lbmQpCisJCXJldHVybiAtRU5YSU87CisJYWRkciA9IGhvc2UtPmlvX2Jhc2VfdmlydCArIHBvcnQ7CisKKwkvKiBXQVJOSU5HOiBUaGUgZ2VuZXJpYyBjb2RlIGlzIGlkaW90aWMuIEl0IGdldHMgcGFzc2VkIGEgcG9pbnRlcgorCSAqIHRvIHdoYXQgY2FuIGJlIGEgMSwgMiBvciA0IGJ5dGUgcXVhbnRpdHkgYW5kIGFsd2F5cyByZWFkcyB0aGF0CisJICogYXMgYSB1MzIsIHdoaWNoIG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBjb3JyZWN0IHRoZSBsb2NhdGlvbiBvZgorCSAqIHRoZSBkYXRhIHJlYWQgd2l0aGluIHRob3NlIDMyIGJpdHMgZm9yIHNpemUgMSBhbmQgMgorCSAqLworCXN3aXRjaChzaXplKSB7CisJY2FzZSAxOgorCQlvdXRfOChhZGRyLCB2YWwgPj4gMjQpOworCQlyZXR1cm4gMTsKKwljYXNlIDI6CisJCWlmIChwb3J0ICYgMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlvdXRfbGUxNihhZGRyLCB2YWwgPj4gMTYpOworCQlyZXR1cm4gMjsKKwljYXNlIDQ6CisJCWlmIChwb3J0ICYgMykKKwkJCXJldHVybiAtRUlOVkFMOworCQlvdXRfbGUzMihhZGRyLCB2YWwpOworCQlyZXR1cm4gNDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIFRoaXMgcHJvdmlkZXMgbGVnYWN5IElPIG9yIG1lbW9yeSBtbWFwIGFjY2VzcyBvbiBhIGJ1cyAqLworaW50IHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOworCXJlc291cmNlX3NpemVfdCBvZmZzZXQgPQorCQkoKHJlc291cmNlX3NpemVfdCl2bWEtPnZtX3Bnb2ZmKSA8PCBQQUdFX1NISUZUOworCXJlc291cmNlX3NpemVfdCBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCXN0cnVjdCByZXNvdXJjZSAqcnA7CisKKwlwcl9kZWJ1ZygicGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2UoJTA0eDolMDJ4LCAlcyBAJWxseC4uJWxseClcbiIsCisJCSBwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyLAorCQkgbW1hcF9zdGF0ZSA9PSBwY2lfbW1hcF9tZW0gPyAiTUVNIiA6ICJJTyIsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpKG9mZnNldCArIHNpemUgLSAxKSk7CisKKwlpZiAobW1hcF9zdGF0ZSA9PSBwY2lfbW1hcF9tZW0pIHsKKwkJaWYgKChvZmZzZXQgKyBzaXplKSA+IGhvc2UtPmlzYV9tZW1fc2l6ZSkKKwkJCXJldHVybiAtRU5YSU87CisJCW9mZnNldCArPSBob3NlLT5pc2FfbWVtX3BoeXM7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBpb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKKwkJdW5zaWduZWQgbG9uZyByb2Zmc2V0ID0gb2Zmc2V0ICsgaW9fb2Zmc2V0OworCQlycCA9ICZob3NlLT5pb19yZXNvdXJjZTsKKwkJaWYgKCEocnAtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykpCisJCQlyZXR1cm4gLUVOWElPOworCQlpZiAocm9mZnNldCA8IHJwLT5zdGFydCB8fCAocm9mZnNldCArIHNpemUpID4gcnAtPmVuZCkKKwkJCXJldHVybiAtRU5YSU87CisJCW9mZnNldCArPSBob3NlLT5pb19iYXNlX3BoeXM7CisJfQorCXByX2RlYnVnKCIgLT4gbWFwcGluZyBwaHlzICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KTsKKworCXZtYS0+dm1fcGdvZmYgPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpCisJCQkJICAgICB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CisJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYsCisJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KTsKK30KKwogdm9pZCBwY2lfcmVzb3VyY2VfdG9fdXNlcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYmFyLAogCQkJICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJzcmMsCiAJCQkgIHJlc291cmNlX3NpemVfdCAqc3RhcnQsIHJlc291cmNlX3NpemVfdCAqZW5kKQpAQCAtNTkyLDYgKzcxOSwxMiBAQAogCQljcHVfYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKGRldiwgcmFuZ2VzICsgMyk7CiAJCXNpemUgPSBvZl9yZWFkX251bWJlcihyYW5nZXMgKyBwbmEgKyAzLCAyKTsKIAkJcmFuZ2VzICs9IG5wOworCisJCS8qIElmIHdlIGZhaWxlZCB0cmFuc2xhdGlvbiBvciBnb3QgYSB6ZXJvLXNpemVkIHJlZ2lvbgorCQkgKiAoc29tZSBGVyB0cnkgdG8gZmVlZCB1cyB3aXRoIG5vbiBzZW5zaWNhbCB6ZXJvIHNpemVkIHJlZ2lvbnMKKwkJICogc3VjaCBhcyBwb3dlcjMgd2hpY2ggbG9vayBsaWtlIHNvbWUga2luZCBvZiBhdHRlbXB0IGF0IGV4cG9zaW5nCisJCSAqIHRoZSBWR0EgbWVtb3J5IGhvbGUpCisJCSAqLwogCQlpZiAoY3B1X2FkZHIgPT0gT0ZfQkFEX0FERFIgfHwgc2l6ZSA9PSAwKQogCQkJY29udGludWU7CiAKQEAgLTY2NSw2ICs3OTgsOCBAQAogCQkJCWlzYV9ob2xlID0gbWVtbm87CiAJCQkJaWYgKHByaW1hcnkgfHwgaXNhX21lbV9iYXNlID09IDApCiAJCQkJCWlzYV9tZW1fYmFzZSA9IGNwdV9hZGRyOworCQkJCWhvc2UtPmlzYV9tZW1fcGh5cyA9IGNwdV9hZGRyOworCQkJCWhvc2UtPmlzYV9tZW1fc2l6ZSA9IHNpemU7CiAJCQl9CiAKIAkJCS8qIFdlIGdldCB0aGUgUENJL01lbSBvZmZzZXQgZnJvbSB0aGUgZmlyc3QgcmFuZ2Ugb3IKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDJmZGJjMTguLjIzZTBkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtNDg3LDY3ICs0ODcsNiBAQAogCXJldHVybiBjYWxsX3Byb20oImludGVycHJldCIsIDEsIDEsICh1MzIpKHVuc2lnbmVkIGxvbmcpIGNtZCk7CiB9CiAKLS8qIFdlIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQgdmVyc2lvbnMgYmVjYXVzZSBvZiBSRUxPQyBoZWFkYWNoZXMuICovCi0jZGVmaW5lIGlzeGRpZ2l0KGMpCSgoJzAnIDw9IChjKSAmJiAoYykgPD0gJzknKSBcCi0JCQkgfHwgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdmJykgXAotCQkJIHx8ICgnQScgPD0gKGMpICYmIChjKSA8PSAnRicpKQotCi0jZGVmaW5lIGlzZGlnaXQoYykJKCcwJyA8PSAoYykgJiYgKGMpIDw9ICc5JykKLSNkZWZpbmUgaXNsb3dlcihjKQkoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQotI2RlZmluZSB0b3VwcGVyKGMpCShpc2xvd2VyKGMpID8gKChjKSAtICdhJyArICdBJykgOiAoYykpCi0KLXVuc2lnbmVkIGxvbmcgcHJvbV9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCBjb25zdCBjaGFyICoqZW5kcCkKLXsKLQl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDAsIGJhc2UgPSAxMCwgdmFsdWU7Ci0KLQlpZiAoKmNwID09ICcwJykgewotCQliYXNlID0gODsKLQkJY3ArKzsKLQkJaWYgKHRvdXBwZXIoKmNwKSA9PSAnWCcpIHsKLQkJCWNwKys7Ci0JCQliYXNlID0gMTY7Ci0JCX0KLQl9Ci0KLQl3aGlsZSAoaXN4ZGlnaXQoKmNwKSAmJgotCSAgICAgICAodmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AgLSAnMCcgOiB0b3VwcGVyKCpjcCkgLSAnQScgKyAxMCkgPCBiYXNlKSB7Ci0JCXJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyB2YWx1ZTsKLQkJY3ArKzsKLQl9Ci0KLQlpZiAoZW5kcCkKLQkJKmVuZHAgPSBjcDsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcHJvbV9tZW1wYXJzZShjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKipyZXRwdHIpCi17Ci0JdW5zaWduZWQgbG9uZyByZXQgPSBwcm9tX3N0cnRvdWwocHRyLCByZXRwdHIpOwotCWludCBzaGlmdCA9IDA7Ci0KLQkvKgotCSAqIFdlIGNhbid0IHVzZSBhIHN3aXRjaCBoZXJlIGJlY2F1c2UgR0NDICptYXkqIGdlbmVyYXRlIGEKLQkgKiBqdW1wIHRhYmxlIHdoaWNoIHdvbid0IHdvcmssIGJlY2F1c2Ugd2UncmUgbm90IHJ1bm5pbmcgYXQKLQkgKiB0aGUgYWRkcmVzcyB3ZSdyZSBsaW5rZWQgYXQuCi0JICovCi0JaWYgKCdHJyA9PSAqKnJldHB0ciB8fCAnZycgPT0gKipyZXRwdHIpCi0JCXNoaWZ0ID0gMzA7Ci0KLQlpZiAoJ00nID09ICoqcmV0cHRyIHx8ICdtJyA9PSAqKnJldHB0cikKLQkJc2hpZnQgPSAyMDsKLQotCWlmICgnSycgPT0gKipyZXRwdHIgfHwgJ2snID09ICoqcmV0cHRyKQotCQlzaGlmdCA9IDEwOwotCi0JaWYgKHNoaWZ0KSB7Ci0JCXJldCA8PD0gc2hpZnQ7Ci0JCSgqcmV0cHRyKSsrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBFYXJseSBwYXJzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkIHRvIHRoZSBrZXJuZWwsIHVzZWQgZm9yCiAgKiAibWVtPXgiIGFuZCB0aGUgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgaW9tbXUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXRfY2hlY2suc2gKaW5kZXggMmM3ZThlOC4uZWEzYTJlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXRfY2hlY2suc2gKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXRfY2hlY2suc2gKQEAgLTIwLDcgKzIwLDcgQEAKIF9lbmQgZW50ZXJfcHJvbSBtZW1jcHkgbWVtc2V0IHJlbG9jX29mZnNldCBfX3NlY29uZGFyeV9ob2xkCiBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3AgX19zdGFydAogc3RyY21wIHN0cmNweSBzdHJsY3B5IHN0cmxlbiBzdHJuY21wIHN0cnN0ciBsb2dvX2xpbnV4X2NsdXQyMjQKLXJlbG9jX2dvdDIga2VybnN0YXJ0X2FkZHIiCityZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIiCiAKIE5NPSIkMSIKIE9CSj0iJDIiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCA1ZWM1NmZmLi43MDVmYzRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vY3B1dGhyZWFkcy5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CiAKICNpbmNsdWRlICJzZXR1cC5oIgogCkBAIC0xOTAsNiArMTkxLDEyIEBACiAJCWlmIChwcGNfbWQuc2hvd19jcHVpbmZvICE9IE5VTEwpCiAJCQlwcGNfbWQuc2hvd19jcHVpbmZvKG0pOwogCisjaWZkZWYgQ09ORklHX1BQQzMyCisJCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KKwkJc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdDogJWQgTUJcbiIsCisJCQkgICAodW5zaWduZWQgaW50KSh0b3RhbF9tZW1vcnkgLyAoMTAyNCAqIDEwMjQpKSk7CisjZW5kaWYKKwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmggYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5oCmluZGV4IDI4ZjRiOWYuLmI0MjdiZjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuaApAQCAtMTIsNiArMTIsOCBAQAogCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQogCitleHRlcm4gdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgdGhyZWFkX2luZm9fZmxhZ3MpOworCiBleHRlcm4gdm9pZCBfX3VzZXIgKiBnZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJICBzaXplX3QgZnJhbWVfc2l6ZSk7CiBleHRlcm4gdm9pZCByZXN0b3JlX3NpZ21hc2soc2lnc2V0X3QgKnNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCA2NWFkOTI1Li5jNmE4ZjIzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCkBAIC0yMzUsOCArMjM1LDYgQEAKIAllbHNlCiAJCWZvciAoaSA9IDA7IGkgPCAzMiA7IGkrKykKIAkJCWN1cnJlbnQtPnRocmVhZC5mcHJbaV1bVFNfVlNSTE9XT0ZGU0VUXSA9IDA7Ci0KLSNlbHNlCiAjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwppbmRleCBjYjAxZWJjLi43YjdkYThjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJc3BlZWQgPSAoY2xvY2sgLyBwcmVzY2FsZXIpIC8gKGRpdmlzb3IgKiAxNik7CiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAoc3BlZWQgPCAwIHx8IHNwZWVkID4gKGNsb2NrIC8gMTYpKQorCWlmIChzcGVlZCA+IChjbG9jayAvIDE2KSkKIAkJc3BlZWQgPSA5NjAwOwogCiAJcmV0dXJuIHNwZWVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKaW5kZXggNWM2NGFmMS4uOGQ1YjQ3NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCkBAIC0zODIsOCArMzgyLDEwIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiSHVnZSBwYWdlKDE2R0IpIG1lbW9yeTogIgogCQkJImFkZHIgPSAweCVsWCBzaXplID0gMHglbFggcGFnZXMgPSAlZFxuIiwKIAkJCXBoeXNfYWRkciwgYmxvY2tfc2l6ZSwgZXhwZWN0ZWRfcGFnZXMpOwotCWxtYl9yZXNlcnZlKHBoeXNfYWRkciwgYmxvY2tfc2l6ZSAqIGV4cGVjdGVkX3BhZ2VzKTsKLQlhZGRfZ3BhZ2UocGh5c19hZGRyLCBibG9ja19zaXplLCBleHBlY3RlZF9wYWdlcyk7CisJaWYgKHBoeXNfYWRkciArICgxNiAqIEdCKSA8PSBsbWJfZW5kX29mX0RSQU0oKSkgeworCQlsbWJfcmVzZXJ2ZShwaHlzX2FkZHIsIGJsb2NrX3NpemUgKiBleHBlY3RlZF9wYWdlcyk7CisJCWFkZF9ncGFnZShwaHlzX2FkZHIsIGJsb2NrX3NpemUsIGV4cGVjdGVkX3BhZ2VzKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IDk4ZDdiZjkuLmI5ZTFhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTEzNCwyMyArMTM0LDYgQEAKIAogCXJldHVybiBfX2FkZF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKIH0KLQotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCi1pbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCWludCByZXQ7Ci0KLQlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCWVuZF9wZm4gPSBzdGFydF9wZm4gKyAoc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQlyZXQgPSBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCS8qIEFyY2gtc3BlY2lmaWMgY2FsbHMgZ28gaGVyZSAtIG5leHQgcGF0Y2ggKi8KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCA2Y2Y1YzcxLi5lYjUwNWFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCiAvKgogICogZ2V0X25vZGVfYWN0aXZlX3JlZ2lvbiAtIFJldHVybiBhY3RpdmUgcmVnaW9uIGNvbnRhaW5pbmcgc3RhcnRfcGZuCisgKiBBY3RpdmUgcmFuZ2UgcmV0dXJuZWQgaXMgZW1wdHkgaWYgbm9uZSBmb3VuZC4KICAqIEBzdGFydF9wZm46IFRoZSBwYWdlIHRvIHJldHVybiB0aGUgcmVnaW9uIGZvci4KICAqIEBub2RlX2FyOiBSZXR1cm5lZCBzZXQgdG8gdGhlIGFjdGl2ZSByZWdpb24gY29udGFpbmluZyBzdGFydF9wZm4KICAqLwpAQCAtMTI2LDYgKzEyNyw3IEBACiAKIAlub2RlX2FyLT5uaWQgPSBuaWQ7CiAJbm9kZV9hci0+c3RhcnRfcGZuID0gc3RhcnRfcGZuOworCW5vZGVfYXItPmVuZF9wZm4gPSBzdGFydF9wZm47CiAJd29ya193aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCwgZ2V0X2FjdGl2ZV9yZWdpb25fd29ya19mbiwgbm9kZV9hcik7CiB9CiAKQEAgLTUyNiwxMiArNTI4LDEwIEBACiAJLyoKIAkgKiBXZSB1c2UgbG1iX2VuZF9vZl9EUkFNKCkgaW4gaGVyZSBpbnN0ZWFkIG9mIG1lbW9yeV9saW1pdCBiZWNhdXNlCiAJICogd2UndmUgYWxyZWFkeSBhZGp1c3RlZCBpdCBmb3IgdGhlIGxpbWl0IGFuZCBpdCB0YWtlcyBjYXJlIG9mCi0JICogaGF2aW5nIG1lbW9yeSBob2xlcyBiZWxvdyB0aGUgbGltaXQuCisJICogaGF2aW5nIG1lbW9yeSBob2xlcyBiZWxvdyB0aGUgbGltaXQuICBBbHNvLCBpbiB0aGUgY2FzZSBvZgorCSAqIGlvbW11X2lzX29mZiwgbWVtb3J5X2xpbWl0IGlzIG5vdCBzZXQgYnV0IGlzIGltcGxpY2l0bHkgZW5mb3JjZWQuCiAJICovCiAKLQlpZiAoISBtZW1vcnlfbGltaXQpCi0JCXJldHVybiBzaXplOwotCiAJaWYgKHN0YXJ0ICsgc2l6ZSA8PSBsbWJfZW5kX29mX0RSQU0oKSkKIAkJcmV0dXJuIHNpemU7CiAKQEAgLTkzMywxOCArOTMzLDIwIEBACiAJCXN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gbm9kZV9hcjsKIAogCQlnZXRfbm9kZV9hY3RpdmVfcmVnaW9uKHN0YXJ0X3BmbiwgJm5vZGVfYXIpOwotCQl3aGlsZSAoc3RhcnRfcGZuIDwgZW5kX3BmbikgeworCQl3aGlsZSAoc3RhcnRfcGZuIDwgZW5kX3BmbiAmJgorCQkJbm9kZV9hci5zdGFydF9wZm4gPCBub2RlX2FyLmVuZF9wZm4pIHsKKwkJCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZV9zaXplID0gc2l6ZTsKIAkJCS8qCiAJCQkgKiBpZiByZXNlcnZlZCByZWdpb24gZXh0ZW5kcyBwYXN0IGFjdGl2ZSByZWdpb24KIAkJCSAqIHRoZW4gdHJpbSBzaXplIHRvIGFjdGl2ZSByZWdpb24KIAkJCSAqLwogCQkJaWYgKGVuZF9wZm4gPiBub2RlX2FyLmVuZF9wZm4pCi0JCQkJc2l6ZSA9IChub2RlX2FyLmVuZF9wZm4gPDwgUEFHRV9TSElGVCkKKwkJCQlyZXNlcnZlX3NpemUgPSAobm9kZV9hci5lbmRfcGZuIDw8IFBBR0VfU0hJRlQpCiAJCQkJCS0gKHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUKTsKLQkJCWRiZygicmVzZXJ2ZV9ib290bWVtICVseCAlbHggbmlkPSVkXG4iLCBwaHlzYmFzZSwgc2l6ZSwKLQkJCQlub2RlX2FyLm5pZCk7CisJCQlkYmcoInJlc2VydmVfYm9vdG1lbSAlbHggJWx4IG5pZD0lZFxuIiwgcGh5c2Jhc2UsCisJCQkJcmVzZXJ2ZV9zaXplLCBub2RlX2FyLm5pZCk7CiAJCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZV9hci5uaWQpLCBwaHlzYmFzZSwKLQkJCQkJCXNpemUsIEJPT1RNRU1fREVGQVVMVCk7CisJCQkJCQlyZXNlcnZlX3NpemUsIEJPT1RNRU1fREVGQVVMVCk7CiAJCQkvKgogCQkJICogaWYgcmVzZXJ2ZWQgcmVnaW9uIGlzIGNvbnRhaW5lZCBpbiB0aGUgYWN0aXZlIHJlZ2lvbgogCQkJICogdGhlbiBkb25lLgpAQCAtOTU5LDYgKzk2MSw3IEBACiAJCQkgKi8KIAkJCXN0YXJ0X3BmbiA9IG5vZGVfYXIuZW5kX3BmbjsKIAkJCXBoeXNiYXNlID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJCQlzaXplID0gc2l6ZSAtIHJlc2VydmVfc2l6ZTsKIAkJCWdldF9ub2RlX2FjdGl2ZV9yZWdpb24oc3RhcnRfcGZuLCAmbm9kZV9hcik7CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvcHJfdXRpbC5oIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvcHJfdXRpbC5oCmluZGV4IDIyZTRlOGQuLjYyODAwOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3ByX3V0aWwuaAorKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC9wcl91dGlsLmgKQEAgLTI0LDYgKzI0LDExIEBACiAjZGVmaW5lIFNLSVBfR0VORVJJQ19TWU5DIDAKICNkZWZpbmUgU1lOQ19TVEFSVF9FUlJPUiAtMQogI2RlZmluZSBET19HRU5FUklDX1NZTkMgMQorI2RlZmluZSBTUFVTX1BFUl9OT0RFICAgOAorI2RlZmluZSBERUZBVUxUX1RJTUVSX0VYUElSRSAgKEhaIC8gMTApCisKK2V4dGVybiBzdHJ1Y3QgZGVsYXllZF93b3JrIHNwdV93b3JrOworZXh0ZXJuIGludCBzcHVfcHJvZl9ydW5uaW5nOwogCiBzdHJ1Y3Qgc3B1X292ZXJsYXlfaW5mbyB7CS8qIG1hcCBvZiBzZWN0aW9ucyB3aXRoaW4gYW4gU1BVIG92ZXJsYXkgKi8KIAl1bnNpZ25lZCBpbnQgdm1hOwkvKiBTUFUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBmcm9tIGVsZiAqLwpAQCAtNjIsNiArNjcsMTQgQEAKIAogfTsKIAorc3RydWN0IHNwdV9idWZmZXIgeworCWludCBsYXN0X2d1YXJkX3ZhbDsKKwlpbnQgY3R4X3N3X3NlZW47CisJdW5zaWduZWQgbG9uZyAqYnVmZjsKKwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDsKK307CisKKwogLyogVGhlIHRocmVlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgZm9yIG1haW50YWluaW5nIGFuZCBhY2Nlc3NpbmcKICAqIHRoZSB2bWEtdG8tZmlsZW9mZnNldCBtYXAuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3NwdV9wcm9maWxlci5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvc3B1X3Byb2ZpbGVyLmMKaW5kZXggMzgwZDdlMi4uZGQ0OTljMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvc3B1X3Byb2ZpbGVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvc3B1X3Byb2ZpbGVyLmMKQEAgLTIzLDEyICsyMywxMSBAQAogCiBzdGF0aWMgdTMyICpzYW1wbGVzOwogCi1zdGF0aWMgaW50IHNwdV9wcm9mX3J1bm5pbmc7CitpbnQgc3B1X3Byb2ZfcnVubmluZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHJvZmlsaW5nX2ludGVydmFsOwogCiAjZGVmaW5lIE5VTV9TUFVfQklUU19UUkJVRiAxNgogI2RlZmluZSBTUFVTX1BFUl9UQl9FTlRSWSAgIDQKLSNkZWZpbmUgU1BVU19QRVJfTk9ERQkgICAgIDgKIAogI2RlZmluZSBTUFVfUENfTUFTSwkgICAgIDB4RkZGRgogCkBAIC0xOTYsNyArMTk1LDcgQEAKIAlwcl9kZWJ1ZygidGltZXIgcmVzb2x1dGlvbjogJWx1XG4iLCBUSUNLX05TRUMpOwogCWt0ID0ga3RpbWVfc2V0KDAsIHByb2ZpbGluZ19pbnRlcnZhbCk7CiAJaHJ0aW1lcl9pbml0KCZ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKLQl0aW1lci5leHBpcmVzID0ga3Q7CisJaHJ0aW1lcl9zZXRfZXhwaXJlcygmdGltZXIsIGt0KTsKIAl0aW1lci5mdW5jdGlvbiA9IHByb2ZpbGVfc3B1czsKIAogCS8qIEFsbG9jYXRlIGFycmF5cyBmb3IgY29sbGVjdGluZyBTUFUgUEMgc2FtcGxlcyAqLwpAQCAtMjA4LDYgKzIwNyw3IEBACiAKIAlzcHVfcHJvZl9ydW5uaW5nID0gMTsKIAlocnRpbWVyX3N0YXJ0KCZ0aW1lciwga3QsIEhSVElNRVJfTU9ERV9SRUwpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc3B1X3dvcmssIERFRkFVTFRfVElNRVJfRVhQSVJFKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvc3B1X3Rhc2tfc3luYy5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvc3B1X3Rhc2tfc3luYy5jCmluZGV4IDJhOWI0YTAuLjI5NDkxMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3NwdV90YXNrX3N5bmMuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC9zcHVfdGFza19zeW5jLmMKQEAgLTM1LDcgKzM1LDEwMiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhjYWNoZV9sb2NrKTsKIHN0YXRpYyBpbnQgbnVtX3NwdV9ub2RlczsKIGludCBzcHVfcHJvZl9udW1fbm9kZXM7Ci1pbnQgbGFzdF9ndWFyZF92YWxbTUFYX05VTU5PREVTICogOF07CisKK3N0cnVjdCBzcHVfYnVmZmVyIHNwdV9idWZmW01BWF9OVU1OT0RFUyAqIFNQVVNfUEVSX05PREVdOworc3RydWN0IGRlbGF5ZWRfd29yayBzcHVfd29yazsKK3N0YXRpYyB1bnNpZ25lZCBtYXhfc3B1X2J1ZmY7CisKK3N0YXRpYyB2b2lkIHNwdV9idWZmX2FkZCh1bnNpZ25lZCBsb25nIGludCB2YWx1ZSwgaW50IHNwdSkKK3sKKwkvKiBzcHUgYnVmZiBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4gIEFkZCBlbnRyaWVzIHRvIHRoZQorCSAqIGhlYWQuICBIZWFkIGlzIHRoZSBpbmRleCB0byBzdG9yZSB0aGUgbmV4dCB2YWx1ZS4KKwkgKiBUaGUgYnVmZmVyIGlzIGZ1bGwgd2hlbiB0aGVyZSBpcyBvbmUgYXZhaWxhYmxlIGVudHJ5CisJICogaW4gdGhlIHF1ZXVlLCBpLmUuIGhlYWQgYW5kIHRhaWwgY2FuJ3QgYmUgZXF1YWwuCisJICogVGhhdCB3YXkgd2UgY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKKwkgKiBidWZmZXIgYmVpbmcgZnVsbCB2ZXJzdXMgZW1wdHkuCisJICoKKwkgKiAgQVNTVVBUSU9OOiB0aGUgYnVmZmVyX2xvY2sgaXMgaGVsZCB3aGVuIHRoaXMgZnVuY3Rpb24KKwkgKiAgICAgICAgICAgICBpcyBjYWxsZWQgdG8gbG9jayB0aGUgYnVmZmVyLCBoZWFkIGFuZCB0YWlsLgorCSAqLworCWludCBmdWxsID0gMTsKKworCWlmIChzcHVfYnVmZltzcHVdLmhlYWQgPj0gc3B1X2J1ZmZbc3B1XS50YWlsKSB7CisJCWlmICgoc3B1X2J1ZmZbc3B1XS5oZWFkIC0gc3B1X2J1ZmZbc3B1XS50YWlsKQorCQkgICAgPCAgKG1heF9zcHVfYnVmZiAtIDEpKQorCQkJZnVsbCA9IDA7CisKKwl9IGVsc2UgaWYgKHNwdV9idWZmW3NwdV0udGFpbCA+IHNwdV9idWZmW3NwdV0uaGVhZCkgeworCQlpZiAoKHNwdV9idWZmW3NwdV0udGFpbCAtIHNwdV9idWZmW3NwdV0uaGVhZCkKKwkJICAgID4gMSkKKwkJCWZ1bGwgPSAwOworCX0KKworCWlmICghZnVsbCkgeworCQlzcHVfYnVmZltzcHVdLmJ1ZmZbc3B1X2J1ZmZbc3B1XS5oZWFkXSA9IHZhbHVlOworCQlzcHVfYnVmZltzcHVdLmhlYWQrKzsKKworCQlpZiAoc3B1X2J1ZmZbc3B1XS5oZWFkID49IG1heF9zcHVfYnVmZikKKwkJCXNwdV9idWZmW3NwdV0uaGVhZCA9IDA7CisJfSBlbHNlIHsKKwkJLyogRnJvbSB0aGUgdXNlcidzIHBlcnNwZWN0aXZlIG1ha2UgdGhlIFNQVSBidWZmZXIKKwkJICogc2l6ZSBtYW5hZ2VtZW50L292ZXJmbG93IGxvb2sgbGlrZSB3ZSBhcmUgdXNpbmcKKwkJICogcGVyIGNwdSBidWZmZXJzLiAgVGhlIHVzZXIgdXNlcyB0aGUgc2FtZQorCQkgKiBwZXIgY3B1IHBhcmFtZXRlciB0byBhZGp1c3QgdGhlIFNQVSBidWZmZXIgc2l6ZS4KKwkJICogSW5jcmVtZW50IHRoZSBzYW1wbGVfbG9zdF9vdmVyZmxvdyB0byBpbmZvcm0KKwkJICogdGhlIHVzZXIgdGhlIGJ1ZmZlciBzaXplIG5lZWRzIHRvIGJlIGluY3JlYXNlZC4KKwkJICovCisJCW9wcm9maWxlX2NwdV9idWZmZXJfaW5jX3NtcGxfbG9zdCgpOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIHBlciBTUFUgYnVmZmVycyB0byB0aGUKKyAqIE9Qcm9maWxlIGtlcm5lbCBidWZmZXIuCisgKi8KK3ZvaWQgc3luY19zcHVfYnVmZih2b2lkKQoreworCWludCBzcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY3Vycl9oZWFkOworCisJZm9yIChzcHUgPSAwOyBzcHUgPCBudW1fc3B1X25vZGVzOyBzcHUrKykgeworCQkvKiBJbiBjYXNlIHRoZXJlIHdhcyBhbiBpc3N1ZSBhbmQgdGhlIGJ1ZmZlciBkaWRuJ3QKKwkJICogZ2V0IGNyZWF0ZWQgc2tpcCBpdC4KKwkJICovCisJCWlmIChzcHVfYnVmZltzcHVdLmJ1ZmYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEhvbGQgdGhlIGxvY2sgdG8gbWFrZSBzdXJlIHRoZSBoZWFkL3RhaWwKKwkJICogZG9lc24ndCBjaGFuZ2Ugd2hpbGUgc3B1X2J1ZmZfYWRkKCkgaXMKKwkJICogZGVjaWRpbmcgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsIG9yIG5vdC4KKwkJICogQmVpbmcgYSBsaXR0bGUgcGFyYW5vaWQuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJY3Vycl9oZWFkID0gc3B1X2J1ZmZbc3B1XS5oZWFkOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJfbG9jaywgZmxhZ3MpOworCisJCS8qIFRyYW5zZmVyIHRoZSBjdXJyZW50IGNvbnRlbnRzIHRvIHRoZSBrZXJuZWwgYnVmZmVyLgorCQkgKiBkYXRhIGNhbiBzdGlsbCBiZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJb3Byb2ZpbGVfcHV0X2J1ZmYoc3B1X2J1ZmZbc3B1XS5idWZmLAorCQkJCSAgc3B1X2J1ZmZbc3B1XS50YWlsLAorCQkJCSAgY3Vycl9oZWFkLCBtYXhfc3B1X2J1ZmYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZidWZmZXJfbG9jaywgZmxhZ3MpOworCQlzcHVfYnVmZltzcHVdLnRhaWwgPSBjdXJyX2hlYWQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIHdxX3N5bmNfc3B1X2J1ZmYoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIG1vdmUgZGF0YSBmcm9tIHNwdSBidWZmZXJzIHRvIGtlcm5lbCBidWZmZXIgKi8KKwlzeW5jX3NwdV9idWZmKCk7CisKKwkvKiBvbmx5IHJlc2NoZWR1bGUgaWYgcHJvZmlsaW5nIGlzIG5vdCBkb25lICovCisJaWYgKHNwdV9wcm9mX3J1bm5pbmcpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc3B1X3dvcmssIERFRkFVTFRfVElNRVJfRVhQSVJFKTsKK30KIAogLyogQ29udGFpbmVyIGZvciBjYWNoaW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIGFjdGl2ZSBTUFUgdGFzay4gKi8KIHN0cnVjdCBjYWNoZWRfaW5mbyB7CkBAIC0zMDUsMTQgKzQwMCwyMSBAQAogCiAJLyogUmVjb3JkIGNvbnRleHQgaW5mbyBpbiBldmVudCBidWZmZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVyX2xvY2ssIGZsYWdzKTsKLQlhZGRfZXZlbnRfZW50cnkoRVNDQVBFX0NPREUpOwotCWFkZF9ldmVudF9lbnRyeShTUFVfQ1RYX1NXSVRDSF9DT0RFKTsKLQlhZGRfZXZlbnRfZW50cnkoc3B1LT5udW1iZXIpOwotCWFkZF9ldmVudF9lbnRyeShzcHUtPnBpZCk7Ci0JYWRkX2V2ZW50X2VudHJ5KHNwdS0+dGdpZCk7Ci0JYWRkX2V2ZW50X2VudHJ5KGFwcF9kY29va2llKTsKLQlhZGRfZXZlbnRfZW50cnkoc3B1X2Nvb2tpZSk7Ci0JYWRkX2V2ZW50X2VudHJ5KG9mZnNldCk7CisJc3B1X2J1ZmZfYWRkKEVTQ0FQRV9DT0RFLCBzcHUtPm51bWJlcik7CisJc3B1X2J1ZmZfYWRkKFNQVV9DVFhfU1dJVENIX0NPREUsIHNwdS0+bnVtYmVyKTsKKwlzcHVfYnVmZl9hZGQoc3B1LT5udW1iZXIsIHNwdS0+bnVtYmVyKTsKKwlzcHVfYnVmZl9hZGQoc3B1LT5waWQsIHNwdS0+bnVtYmVyKTsKKwlzcHVfYnVmZl9hZGQoc3B1LT50Z2lkLCBzcHUtPm51bWJlcik7CisJc3B1X2J1ZmZfYWRkKGFwcF9kY29va2llLCBzcHUtPm51bWJlcik7CisJc3B1X2J1ZmZfYWRkKHNwdV9jb29raWUsIHNwdS0+bnVtYmVyKTsKKwlzcHVfYnVmZl9hZGQob2Zmc2V0LCBzcHUtPm51bWJlcik7CisKKwkvKiBTZXQgZmxhZyB0byBpbmRpY2F0ZSBTUFUgUEMgZGF0YSBjYW4gbm93IGJlIHdyaXR0ZW4gb3V0LiAgSWYKKwkgKiB0aGUgU1BVIHByb2dyYW0gY291bnRlciBkYXRhIGlzIHNlZW4gYmVmb3JlIGFuIFNQVSBjb250ZXh0CisJICogcmVjb3JkIGlzIHNlZW4sIHRoZSBwb3N0cHJvY2Vzc2luZyB3aWxsIGZhaWwuCisJICovCisJc3B1X2J1ZmZbc3B1LT5udW1iZXJdLmN0eF9zd19zZWVuID0gMTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1ZmZlcl9sb2NrLCBmbGFncyk7CiAJc21wX3dtYigpOwkvKiBpbnN1cmUgc3B1IGV2ZW50IGJ1ZmZlciB1cGRhdGVzIGFyZSB3cml0dGVuICovCiAJCQkvKiBkb24ndCB3YW50IGVudHJpZXMgaW50ZXJtaW5nbGVkLi4uICovCkBAIC0zNjAsNiArNDYyLDQ3IEBACiAgICAgICAgIHJldHVybiBub2RlczsKIH0KIAorc3RhdGljIGludCBvcHJvZmlsZV9zcHVfYnVmZl9jcmVhdGUodm9pZCkKK3sKKwlpbnQgc3B1OworCisJbWF4X3NwdV9idWZmID0gb3Byb2ZpbGVfZ2V0X2NwdV9idWZmZXJfc2l6ZSgpOworCisJZm9yIChzcHUgPSAwOyBzcHUgPCBudW1fc3B1X25vZGVzOyBzcHUrKykgeworCQkvKiBjcmVhdGUgY2lyY3VsYXIgYnVmZmVycyB0byBzdG9yZSB0aGUgZGF0YSBpbi4KKwkJICogdXNlIGxvY2tzIHRvIG1hbmFnZSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlcnMKKwkJICovCisJCXNwdV9idWZmW3NwdV0uaGVhZCA9IDA7CisJCXNwdV9idWZmW3NwdV0udGFpbCA9IDA7CisKKwkJLyoKKwkJICogQ3JlYXRlIGEgYnVmZmVyIGZvciBlYWNoIFNQVS4gIENhbid0IHJlbGlhYmx5CisJCSAqIGNyZWF0ZSBhIHNpbmdsZSBidWZmZXIgZm9yIGFsbCBzcHVzIGR1ZSB0byBub3QKKwkJICogZW5vdWdoIGNvbnRpZ3VvdXMga2VybmVsIG1lbW9yeS4KKwkJICovCisKKwkJc3B1X2J1ZmZbc3B1XS5idWZmID0ga3phbGxvYygobWF4X3NwdV9idWZmCisJCQkJCSAgICAgICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKKwkJCQkJICAgICBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXNwdV9idWZmW3NwdV0uYnVmZikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgorCQkJICAgICAgICIlcywgbGluZSAlZDogIG9wcm9maWxlX3NwdV9idWZmX2NyZWF0ZSAiCisJCSAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIHNwdSBidWZmZXIgJWQuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgc3B1KTsKKworCQkJLyogcmVsZWFzZSB0aGUgc3B1IGJ1ZmZlcnMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkICovCisJCQl3aGlsZSAoc3B1ID49IDApIHsKKwkJCQlrZnJlZShzcHVfYnVmZltzcHVdLmJ1ZmYpOworCQkJCXNwdV9idWZmW3NwdV0uYnVmZiA9IDA7CisJCQkJc3B1LS07CisJCQl9CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogLyogVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHN5bmNocm9uaXplCiAgKiBPUHJvZmlsZSB3aXRoIFNQVUZTIGJ5IHJlZ2lzdGVyaW5nIHRvIGJlIG5vdGlmaWVkIG9mCiAgKiBTUFUgdGFzayBzd2l0Y2hlcy4KQEAgLTM3MiwyMCArNTE1LDM1IEBACiAgKi8KIGludCBzcHVfc3luY19zdGFydCh2b2lkKQogewotCWludCBrOworCWludCBzcHU7CiAJaW50IHJldCA9IFNLSVBfR0VORVJJQ19TWU5DOwogCWludCByZWdpc3Rlcl9yZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlzcHVfcHJvZl9udW1fbm9kZXMgPSBudW1iZXJfb2Zfb25saW5lX25vZGVzKCk7CiAJbnVtX3NwdV9ub2RlcyA9IHNwdV9wcm9mX251bV9ub2RlcyAqIDg7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNwdV93b3JrLCB3cV9zeW5jX3NwdV9idWZmKTsKKworCS8qIGNyZWF0ZSBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIFNQVSBkYXRhIHRvIHB1dCBpbgorCSAqIHRoZSBrZXJuZWwgYnVmZmVyLgorCSAqLworCXJldCA9IG9wcm9maWxlX3NwdV9idWZmX2NyZWF0ZSgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0JYWRkX2V2ZW50X2VudHJ5KEVTQ0FQRV9DT0RFKTsKLQlhZGRfZXZlbnRfZW50cnkoU1BVX1BST0ZJTElOR19DT0RFKTsKLQlhZGRfZXZlbnRfZW50cnkobnVtX3NwdV9ub2Rlcyk7CisJZm9yIChzcHUgPSAwOyBzcHUgPCBudW1fc3B1X25vZGVzOyBzcHUrKykgeworCQlzcHVfYnVmZl9hZGQoRVNDQVBFX0NPREUsIHNwdSk7CisJCXNwdV9idWZmX2FkZChTUFVfUFJPRklMSU5HX0NPREUsIHNwdSk7CisJCXNwdV9idWZmX2FkZChudW1fc3B1X25vZGVzLCBzcHUpOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJfbG9jaywgZmxhZ3MpOwogCisJZm9yIChzcHUgPSAwOyBzcHUgPCBudW1fc3B1X25vZGVzOyBzcHUrKykgeworCQlzcHVfYnVmZltzcHVdLmN0eF9zd19zZWVuID0gMDsKKwkJc3B1X2J1ZmZbc3B1XS5sYXN0X2d1YXJkX3ZhbCA9IDA7CisJfQorCiAJLyogUmVnaXN0ZXIgZm9yIFNQVSBldmVudHMgICovCiAJcmVnaXN0ZXJfcmV0ID0gc3B1X3N3aXRjaF9ldmVudF9yZWdpc3Rlcigmc3B1X2FjdGl2ZSk7CiAJaWYgKHJlZ2lzdGVyX3JldCkgewpAQCAtMzkzLDggKzU1MSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZvciAoayA9IDA7IGsgPCAoTUFYX05VTU5PREVTICogOCk7IGsrKykKLQkJbGFzdF9ndWFyZF92YWxba10gPSAwOwogCXByX2RlYnVnKCJzcHVfc3luY19zdGFydCAtLSBydW5uaW5nLlxuIik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTQ0NiwxMyArNjAyLDIwIEBACiAJCSAqIHVzZS4JIFdlIG5lZWQgdG8gZGlzY2FyZCBzYW1wbGVzIHRha2VuIGR1cmluZyB0aGUgdGltZQogCQkgKiBwZXJpb2Qgd2hpY2ggYW4gb3ZlcmxheSBvY2N1cnMgKGkuZS4sIGd1YXJkIHZhbHVlIGNoYW5nZXMpLgogCQkgKi8KLQkJaWYgKGdyZF92YWwgJiYgZ3JkX3ZhbCAhPSBsYXN0X2d1YXJkX3ZhbFtzcHVfbnVtXSkgewotCQkJbGFzdF9ndWFyZF92YWxbc3B1X251bV0gPSBncmRfdmFsOworCQlpZiAoZ3JkX3ZhbCAmJiBncmRfdmFsICE9IHNwdV9idWZmW3NwdV9udW1dLmxhc3RfZ3VhcmRfdmFsKSB7CisJCQlzcHVfYnVmZltzcHVfbnVtXS5sYXN0X2d1YXJkX3ZhbCA9IGdyZF92YWw7CiAJCQkvKiBEcm9wIHRoZSByZXN0IG9mIHRoZSBzYW1wbGVzLiAqLwogCQkJYnJlYWs7CiAJCX0KIAotCQlhZGRfZXZlbnRfZW50cnkoZmlsZV9vZmZzZXQgfCBzcHVfbnVtX3NoaWZ0ZWQpOworCQkvKiBXZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBTUFUgY29udGV4dCBzd2l0Y2ggaGFzIGJlZW4gd3JpdHRlbgorCQkgKiBvdXQgYmVmb3JlIHNhbXBsZXMgZm9yIHRoZSBTUFUuICBPdGhlcndpc2UsIHRoZSBTUFUgY29udGV4dAorCQkgKiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIGFuZCB0aGUgcG9zdHByb2Nlc3Npbmcgb2YgdGhlCisJCSAqIFNQVSBQQyB3aWxsIGZhaWwgd2l0aCBubyBhdmFpbGFibGUgYW5vbnltb3VzIG1hcCBpbmZvcm1hdGlvbi4KKwkJICovCisJCWlmIChzcHVfYnVmZltzcHVfbnVtXS5jdHhfc3dfc2VlbikKKwkJCXNwdV9idWZmX2FkZCgoZmlsZV9vZmZzZXQgfCBzcHVfbnVtX3NoaWZ0ZWQpLAorCQkJCQkgc3B1X251bSk7CiAJfQogCXNwaW5fdW5sb2NrKCZidWZmZXJfbG9jayk7CiBvdXQ6CkBAIC00NjMsMjAgKzYyNiw0MSBAQAogaW50IHNwdV9zeW5jX3N0b3Aodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQlpbnQgcmV0ID0gc3B1X3N3aXRjaF9ldmVudF91bnJlZ2lzdGVyKCZzcHVfYWN0aXZlKTsKLQlpZiAocmV0KSB7CisJaW50IHJldDsKKwlpbnQgazsKKworCXJldCA9IHNwdV9zd2l0Y2hfZXZlbnRfdW5yZWdpc3Rlcigmc3B1X2FjdGl2ZSk7CisKKwlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIlNQVV9QUk9GOiAiCi0JCQkiJXMsIGxpbmUgJWQ6IHNwdV9zd2l0Y2hfZXZlbnRfdW5yZWdpc3RlciByZXR1cm5lZCAlZFxuIiwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQorCQkgICAgICAgIiVzLCBsaW5lICVkOiBzcHVfc3dpdGNoX2V2ZW50X3VucmVnaXN0ZXIgIglcCisJCSAgICAgICAicmV0dXJuZWQgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CisKKwkvKiBmbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIHBlciBTUFUgYnVmZmVycyAqLworCXN5bmNfc3B1X2J1ZmYoKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYWNoZV9sb2NrLCBmbGFncyk7CiAJcmV0ID0gcmVsZWFzZV9jYWNoZWRfaW5mbyhSRUxFQVNFX0FMTCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FjaGVfbG9jaywgZmxhZ3MpOwotb3V0OgorCisJLyogcmVtb3ZlIHNjaGVkdWxlZCB3b3JrIHF1ZXVlIGl0ZW0gcmF0aGVyIHRoZW4gd2FpdGluZworCSAqIGZvciBldmVyeSBxdWV1ZWQgZW50cnkgdG8gZXhlY3V0ZS4gIFRoZW4gZmx1c2ggcGVuZGluZworCSAqIHN5c3RlbSB3aWRlIGJ1ZmZlciB0byBldmVudCBidWZmZXIuCisJICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmc3B1X3dvcmspOworCisJZm9yIChrID0gMDsgayA8IG51bV9zcHVfbm9kZXM7IGsrKykgeworCQlzcHVfYnVmZltrXS5jdHhfc3dfc2VlbiA9IDA7CisKKwkJLyoKKwkJICogc3B1X3N5c19idWZmIHdpbGwgYmUgbnVsbCBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtCisJCSAqIGFsbG9jYXRpbmcgdGhlIGJ1ZmZlci4gIE9ubHkgZGVsZXRlIGlmIGl0IGV4aXN0cy4KKwkJICovCisJCWtmcmVlKHNwdV9idWZmW2tdLmJ1ZmYpOworCQlzcHVfYnVmZltrXS5idWZmID0gMDsKKwl9CiAJcHJfZGVidWcoInNwdV9zeW5jX3N0b3AgLS0gZG9uZS5cbiIpOwogCXJldHVybiByZXQ7CiB9CiAKLQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMKaW5kZXggNWZmNGRlMy4uMzUxNDFhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jCkBAIC00MDQsNyArNDA0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY3RyKHUzMiBjcHUsIHUzMiBjdHIsIHUzMiAqIHBtMDdfY250cmwpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2N0cih1MzIgY3B1LCB1MzIgY3RyLCB1MzIgKnBtMDdfY250cmwpCiB7CiAKIAlwbTA3X2NudHJsW2N0cl0gfD0gQ0JFX1BNX0NUUl9FTkFCTEU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvS2NvbmZpZwppbmRleCBhOTI2MGUyLi42NTczMDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L0tjb25maWcKQEAgLTE0LDYgKzE0LDE1IEBACiAjCWhlbHAKICMJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBDUENJNDA1IGJvYXJkLgogCitjb25maWcgQUNBRElBCisJYm9vbCAiQWNhZGlhIgorCWRlcGVuZHMgb24gNDB4CisJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQweF9TSU1QTEUKKwlzZWxlY3QgNDA1RVoKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIDQwNUVaIEFjYWRpYSBldmFsdWF0aW9uIGJvYXJkLgorCiBjb25maWcgRVA0MDUKIAlib29sICJFUDQwNS9FUDQwNVBDIgogCWRlcGVuZHMgb24gNDB4CkBAIC0yMyw2ICszMiwxNCBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEVQNDA1L0VQNDA1UEMgYm9hcmRzLgogCitjb25maWcgSENVNAorCWJvb2wgIkhjdTQiCisJZGVwZW5kcyBvbiA0MHgKKwlkZWZhdWx0IHkKKwlzZWxlY3QgNDA1R1BSCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTmVzdGFsIE1hc2NoaW5lbiBIQ1U0IGJvYXJkLgorCiBjb25maWcgS0lMQVVFQQogCWJvb2wgIktpbGF1ZWEiCiAJZGVwZW5kcyBvbiA0MHgKQEAgLTkzLDYgKzExMCwxMyBAQAogCSAgTW9zdCBWaXJ0ZXggZGVzaWducyBzaG91bGQgdXNlIHRoaXMgdW5sZXNzIGl0IG5lZWRzIHRvIGRvIHNvbWUKIAkgIHNwZWNpYWwgY29uZmlndXJhdGlvbiBhdCBib2FyZCBwcm9iZSB0aW1lLgogCitjb25maWcgUFBDNDB4X1NJTVBMRQorCWJvb2wgIlNpbXBsZSBQb3dlclBDIDQweCBib2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gNDB4CisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgc2ltcGxlIFBvd2VyUEMgNDB4IHBsYXRmb3JtIHN1cHBvcnQuCisKICMgNDB4IHNwZWNpZmljIENQVSBtb2R1bGVzLCBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgYm9hcmQgYWJvdmUuCiBjb25maWcgTlA0MDVICiAJYm9vbApAQCAtMTE4LDYgKzE0MiwxMiBAQAogCXNlbGVjdCBJQk1fTkVXX0VNQUNfRU1BQzQKIAlzZWxlY3QgSUJNX05FV19FTUFDX1JHTUlJCiAKK2NvbmZpZyA0MDVFWgorCWJvb2wKKwlzZWxlY3QgSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTAorCXNlbGVjdCBJQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQKKwlzZWxlY3QgSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSCisKIGNvbmZpZyA0MDVHUFIKIAlib29sCiAKQEAgLTEzOSw2ICsxNjksMTQgQEAKIAlzZWxlY3QgSUJNNDA1X0VSUjc3CiAJc2VsZWN0IElCTTQwNV9FUlI1MQogCitjb25maWcgUFBDNHh4X0dQSU8KKwlib29sICJQUEM0eHggR1BJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gNDB4CisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCWhlbHAKKwkgIEVuYWJsZSBncGlvbGliIHN1cHBvcnQgZm9yIHBwYzQweCBiYXNlZCBib2FyZHMKKwogIyA0MHggZXJyYXRhL3dvcmthcm91bmQgY29uZmlnIHN5bWJvbHMsIHNlbGVjdGVkIGJ5IHRoZSBDUFUgbW9kZWxzIGFib3ZlCiAKICMgQWxsIDQwNS1iYXNlZCBjb3JlcyB1cCB1bnRpbCB0aGUgNDA1R1BSIGFuZCA0MDVFUCBoYXZlIHRoaXMgZXJyYXRhLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9NYWtlZmlsZQppbmRleCA1NTMzYTVjLi45YmFiNzZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9NYWtlZmlsZQpAQCAtMSw1ICsxLDcgQEAKIG9iai0kKENPTkZJR19LSUxBVUVBKQkJCQkrPSBraWxhdWVhLm8KK29iai0kKENPTkZJR19IQ1U0KQkJCQkrPSBoY3U0Lm8KIG9iai0kKENPTkZJR19NQUtBTFUpCQkJCSs9IG1ha2FsdS5vCiBvYmotJChDT05GSUdfV0FMTlVUKQkJCQkrPSB3YWxudXQubwogb2JqLSQoQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRCkJKz0gdmlydGV4Lm8KIG9iai0kKENPTkZJR19FUDQwNSkJCQkJKz0gZXA0MDUubworb2JqLSQoQ09ORklHX1BQQzQweF9TSU1QTEUpCQkrPSBwcGM0MHhfc2ltcGxlLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L2hjdTQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L2hjdTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGIyYWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvaGN1NC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBBcmNoaXRlY3R1cmUtIC8gcGxhdGZvcm0tc3BlY2lmaWMgYm9vdC10aW1lIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yCisgKiBJQk0gUG93ZXJQQyA0eHggYmFzZWQgYm9hcmRzLiBBZGFwdGVkIGZyb20gb3JpZ2luYWwKKyAqIGNvZGUgYnkgR2FyeSBUaG9tYXMsIENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPiwgYW5kIERhbiBNYWxlaworICogPGRhbkBuZXQ0eC5jb20+LgorICoKKyAqIENvcHlyaWdodChjKSAxOTk5LTIwMDAgR3JhbnQgRXJpY2tzb24gPGdyYW50QGxjc2UudW1uLmVkdT4KKyAqCisgKiBSZXdyaXR0ZW4gYW5kIHBvcnRlZCB0byB0aGUgbWVyZ2VkIHBvd2VycGMgdHJlZToKKyAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgorICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS91aWMuaD4KKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgaGN1NF9vZl9idXNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImlibSxwbGIzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBoY3U0X2RldmljZV9wcm9iZSh2b2lkKQoreworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBoY3U0X29mX2J1cywgTlVMTCk7CisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChoY3U0LCBoY3U0X2RldmljZV9wcm9iZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGhjdTRfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAibmV0c3RhbCxoY3U0IikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK2RlZmluZV9tYWNoaW5lKGhjdTQpIHsKKwkubmFtZQkJCT0gIkhDVTQiLAorCS5wcm9iZQkJCT0gaGN1NF9wcm9iZSwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKwkuaW5pdF9JUlEJCT0gdWljX2luaXRfdHJlZSwKKwkuZ2V0X2lycQkJPSB1aWNfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L3BwYzQweF9zaW1wbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L3BwYzQweF9zaW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk4YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvcHBjNDB4X3NpbXBsZS5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBHZW5lcmljIFBvd2VyUEMgNDB4IHBsYXRmb3JtIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGltcGxlbWVudHMgc2ltcGxlIHBsYXRmb3JtIHN1cHBvcnQgZm9yIFBvd2VyUEMgNDR4IGNoaXBzLiAgVGhpcyBpcworICogbW9zdGx5IHVzZWQgZm9yIGV2YWwgYm9hcmRzIG9yIG90aGVyIHNpbXBsZSBhbmQgImdlbmVyaWMiIDQ0eCBib2FyZHMuICBJZgorICogeW91ciBib2FyZCBoYXMgY3VzdG9tIGZ1bmN0aW9ucyBvciBoYXJkd2FyZSwgdGhlbiB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bworICogaW1wbGVtZW50IHlvdXIgb3duIGJvYXJkLmMgZmlsZSB0byBhY2NvbW1vZGF0ZSBpdC4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vdWljLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBwcGM0MHhfb2ZfYnVzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiMyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcGM0MHhfZGV2aWNlX3Byb2JlKHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHBwYzQweF9vZl9idXMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChwcGM0MHhfc2ltcGxlLCBwcGM0MHhfZGV2aWNlX3Byb2JlKTsKKworLyogVGhpcyBpcyB0aGUgbGlzdCBvZiBib2FyZHMgdGhhdCBjYW4gYmUgc3VwcG9ydGVkIGJ5IHRoaXMgc2ltcGxlCisgKiBwbGF0Zm9ybSBjb2RlLiAgVGhpcyBkb2VzIF9ub3RfIG1lYW4gdGhlIGJvYXJkcyBhcmUgY29tcGF0aWJsZSwKKyAqIGFzIHRoZXkgbW9zdCBjZXJ0YWlubHkgYXJlIG5vdCBmcm9tIGEgZGV2aWNlIHRyZWUgcGVyc3BlY3RpdmUuCisgKiBIb3dldmVyLCB0aGVpciBkaWZmZXJlbmNlcyBhcmUgaGFuZGxlZCBieSB0aGUgZGV2aWNlIHRyZWUgYW5kIHRoZQorICogZHJpdmVycyBhbmQgdGhlcmVmb3JlIHRoZXkgZG9uJ3QgbmVlZCBjdXN0b20gYm9hcmQgc3VwcG9ydCBmaWxlcy4KKyAqCisgKiBBZ2FpbiwgaWYgeW91ciBib2FyZCBuZWVkcyB0byBkbyB0aGluZ3MgZGlmZmVyZW50bHkgdGhlbiBjcmVhdGUgYQorICogYm9hcmQuYyBmaWxlIGZvciBpdCByYXRoZXIgdGhhbiBhZGRpbmcgaXQgdG8gdGhpcyBsaXN0LgorICovCitzdGF0aWMgY2hhciAqYm9hcmRbXSBfX2luaXRkYXRhID0geworCSJhbWNjLGFjYWRpYSIKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBwYzQweF9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShib2FyZCk7IGkrKykgeworCQlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsIGJvYXJkW2ldKSkgeworCQkJcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitkZWZpbmVfbWFjaGluZShwcGM0MHhfc2ltcGxlKSB7CisJLm5hbWUgPSAiUG93ZXJQQyA0MHggUGxhdGZvcm0iLAorCS5wcm9iZSA9IHBwYzQweF9wcm9iZSwKKwkucHJvZ3Jlc3MgPSB1ZGJnX3Byb2dyZXNzLAorCS5pbml0X0lSUSA9IHVpY19pbml0X3RyZWUsCisJLmdldF9pcnEgPSB1aWNfZ2V0X2lycSwKKwkucmVzdGFydCA9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCisJLmNhbGlicmF0ZV9kZWNyID0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwppbmRleCA3OWMxMTU0Li4zNDk2YmMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTE2Nyw2ICsxNjcsMTQgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzaW1wbGUgUG93ZXJQQyA0NHggcGxhdGZvcm0gc3VwcG9ydC4KIAorY29uZmlnIFBQQzR4eF9HUElPCisJYm9vbCAiUFBDNHh4IEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIDQ0eAorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwloZWxwCisJICBFbmFibGUgZ3Bpb2xpYiBzdXBwb3J0IGZvciBwcGM0NDAgYmFzZWQgYm9hcmRzCisKICMgNDR4IHNwZWNpZmljIENQVSBtb2R1bGVzLCBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgYm9hcmQgYWJvdmUuCiBjb25maWcgNDQwRVAKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCmluZGV4IDA0NGI0ZTYuLmFlN2MzNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCkBAIC05OSwxMSArOTksMTQgQEAKIAlvdXRfYmUzMigmeGxiLT5tYXN0ZXJfcHJpX2VuYWJsZSwgMHhmZik7CiAJb3V0X2JlMzIoJnhsYi0+bWFzdGVyX3ByaW9yaXR5LCAweDExMTExMTExKTsKIAotCS8qIERpc2FibGUgWExCIHBpcGVsaW5pbmcKKwkvKgorCSAqIERpc2FibGUgWExCIHBpcGVsaW5pbmcKIAkgKiAoY2ZyIGVycmF0ZSAyOTIuIFdlIGNvdWxkIGRvIHRoaXMgb25seSBqdXN0IGJlZm9yZSBBVEEgUElPCiAJICogIHRyYW5zYWN0aW9uIGFuZCByZS1lbmFibGUgaXQgYWZ0ZXJ3YXJkcyAuLi4pCisJICogTm90IG5lZWRlZCBvbiBNUEM1MjAwQi4KIAkgKi8KLQlvdXRfYmUzMigmeGxiLT5jb25maWcsIGluX2JlMzIoJnhsYi0+Y29uZmlnKSB8IE1QQzUyeHhfWExCX0NGR19QTERJUyk7CisJaWYgKChtZnNwcihTUFJOX1NWUikgJiBNUEM1MjAwX1NWUl9NQVNLKSA9PSBNUEM1MjAwX1NWUikKKwkJb3V0X2JlMzIoJnhsYi0+Y29uZmlnLCBpbl9iZTMyKCZ4bGItPmNvbmZpZykgfCBNUEM1Mnh4X1hMQl9DRkdfUExESVMpOwogCiAJaW91bm1hcCh4bGIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKaW5kZXggOGEzYjExNy4uODFjZWU3YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgva3NpODU2MC5jCkBAIC0xOTMsNyArMTkzLDYgQEAKIHN0YXRpYyB2b2lkIGtzaTg1NjBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAl1aW50IHB2aWQsIHN2aWQsIHBoaWQxOwotCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKIAogCXB2aWQgPSBtZnNwcihTUFJOX1BWUik7CiAJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKQEAgLTIxNSw5ICsyMTQsNiBAQAogCS8qIERpc3BsYXkgY3B1IFBsbCBzZXR0aW5nICovCiAJcGhpZDEgPSBtZnNwcihTUFJOX0hJRDEpOwogCXNlcV9wcmludGYobSwgIlBMTCBzZXR0aW5nXHQ6IDB4JXhcbiIsICgocGhpZDEgPj4gMjQpICYgMHgzZikpOwotCi0JLyogRGlzcGxheSB0aGUgYW1vdW50IG9mIG1lbW9yeSAqLwotCXNlcV9wcmludGYobSwgIk1lbW9yeVx0XHQ6ICVkIE1CXG4iLCBtZW1zaXplIC8gKDEwMjQgKiAxMDI0KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgb2ZfYnVzX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwppbmRleCAwMjkzZTNkLi4yMWYwMDkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwpAQCAtMjA3LDcgKzIwNyw2IEBACiBzdGF0aWMgdm9pZCBtcGM4NXh4X2Fkc19zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQogewogCXVpbnQgcHZpZCwgc3ZpZCwgcGhpZDE7Ci0JdWludCBtZW1zaXplID0gdG90YWxfbWVtb3J5OwogCiAJcHZpZCA9IG1mc3ByKFNQUk5fUFZSKTsKIAlzdmlkID0gbWZzcHIoU1BSTl9TVlIpOwpAQCAtMjE5LDkgKzIxOCw2IEBACiAJLyogRGlzcGxheSBjcHUgUGxsIHNldHRpbmcgKi8KIAlwaGlkMSA9IG1mc3ByKFNQUk5fSElEMSk7CiAJc2VxX3ByaW50ZihtLCAiUExMIHNldHRpbmdcdDogMHgleFxuIiwgKChwaGlkMSA+PiAyNCkgJiAweDNmKSk7Ci0KLQkvKiBEaXNwbGF5IHRoZSBhbW91bnQgb2YgbWVtb3J5ICovCi0Jc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdDogJWQgTUJcbiIsIG1lbXNpemUgLyAoMTAyNCAqIDEwMjQpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9idXNfaWRzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCmluZGV4IDUwZDdlYTguLmFlYjZhNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCkBAIC0zMDcsNyArMzA3LDYgQEAKIHN0YXRpYyB2b2lkIG1wYzg1eHhfY2RzX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJdWludCBwdmlkLCBzdmlkLCBwaGlkMTsKLQl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CiAKIAlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOwogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CkBAIC0zMjAsOSArMzE5LDYgQEAKIAkvKiBEaXNwbGF5IGNwdSBQbGwgc2V0dGluZyAqLwogCXBoaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKIAlzZXFfcHJpbnRmKG0sICJQTEwgc2V0dGluZ1x0OiAweCV4XG4iLCAoKHBoaWQxID4+IDI0KSAmIDB4M2YpKTsKLQotCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KLQlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU0OC5jCmluZGV4IGI5MjQ2ZWEuLjdlYzc3Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NDguYwpAQCAtMTM2LDcgKzEzNiw2IEBACiBzdGF0aWMgdm9pZCBzYmM4NTQ4X3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJdWludCBwdmlkLCBzdmlkLCBwaGlkMTsKLQl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CiAKIAlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOwogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CkBAIC0xNDksOSArMTQ4LDYgQEAKIAkvKiBEaXNwbGF5IGNwdSBQbGwgc2V0dGluZyAqLwogCXBoaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKIAlzZXFfcHJpbnRmKG0sICJQTEwgc2V0dGluZ1x0OiAweCV4XG4iLCAoKHBoaWQxID4+IDI0KSAmIDB4M2YpKTsKLQotCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KLQlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCmluZGV4IDBjOWE4NTYuLjQ3MmYyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwpAQCAtMTk0LDcgKzE5NCw2IEBACiBzdGF0aWMgdm9pZCBzYmM4NTYwX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJdWludCBwdmlkLCBzdmlkLCBwaGlkMTsKLQl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CiAKIAlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOwogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CkBAIC0yMDYsOSArMjA1LDYgQEAKIAkvKiBEaXNwbGF5IGNwdSBQbGwgc2V0dGluZyAqLwogCXBoaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKIAlzZXFfcHJpbnRmKG0sICJQTEwgc2V0dGluZ1x0OiAweCV4XG4iLCAoKHBoaWQxID4+IDI0KSAmIDB4M2YpKTsKLQotCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KLQlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCmluZGV4IDE4NDk5ZDcuLjBjY2E4ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwpAQCAtMTMwLDcgKzEzMCw2IEBACiBzdGF0aWMgdm9pZCBzdHhfZ3AzX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJdWludCBwdmlkLCBzdmlkLCBwaGlkMTsKLQl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CiAKIAlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOwogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CkBAIC0xNDIsOSArMTQxLDYgQEAKIAkvKiBEaXNwbGF5IGNwdSBQbGwgc2V0dGluZyAqLwogCXBoaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKIAlzZXFfcHJpbnRmKG0sICJQTEwgc2V0dGluZ1x0OiAweCV4XG4iLCAoKHBoaWQxID4+IDI0KSAmIDB4M2YpKTsKLQotCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KLQlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCmluZGV4IGQ4NTA4ODAuLjI5MzNhOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYwpAQCAtMTM4LDcgKzEzOCw2IEBACiBzdGF0aWMgdm9pZCB0cW04NXh4X3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJdWludCBwdmlkLCBzdmlkLCBwaGlkMTsKLQl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CiAKIAlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOwogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CkBAIC0xNTAsOSArMTQ5LDYgQEAKIAkvKiBEaXNwbGF5IGNwdSBQbGwgc2V0dGluZyAqLwogCXBoaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKIAlzZXFfcHJpbnRmKG0sICJQTEwgc2V0dGluZ1x0OiAweCV4XG4iLCAoKHBoaWQxID4+IDI0KSAmIDB4M2YpKTsKLQotCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KLQlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCmluZGV4IDgyMWM0NWYuLmZiMzcxZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpAQCAtMTI3LDcgKzEyNyw2IEBACiAKIHN0YXRpYyB2b2lkIGdlZl9zYmM2MTBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CiAJdWludCBzdmlkID0gbWZzcHIoU1BSTl9TVlIpOwogCiAJc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zXG4iKTsKQEAgLTEzNyw3ICsxMzYsNiBAQAogCXNlcV9wcmludGYobSwgIkZQR0EgUmV2aXNpb25cdDogJXVcbiIsIGdlZl9zYmM2MTBfZ2V0X2ZwZ2FfcmV2KCkpOwogCiAJc2VxX3ByaW50ZihtLCAiU1ZSXHRcdDogMHgleFxuIiwgc3ZpZCk7Ci0Jc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdDogJWQgTUJcbiIsIG1lbXNpemUgLyAoMTAyNCAqIDEwMjQpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGdlZl9zYmM2MTBfbmVjX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IDI2NzI4MjkuLjI3ZTBlNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTEwMSwxMyArMTAxLDExIEBACiBzdGF0aWMgdm9pZAogbXBjODZ4eF9ocGNuX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JdWludCBtZW1zaXplID0gdG90YWxfbWVtb3J5OwogCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKIAogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwotCXNlcV9wcmludGYobSwgIk1lbW9yeVx0XHQ6ICVkIE1CXG4iLCBtZW1zaXplIC8gKDEwMjQgKiAxMDI0KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3NiYzg2NDFkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwppbmRleCBkYTY3N2E3Li41ZmQ3ZWQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwpAQCAtNjMsMTMgKzYzLDExIEBACiBzdGF0aWMgdm9pZAogc2JjODY0MV9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQogewotCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKIAl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CiAKIAlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBXaW5kIFJpdmVyIFN5c3RlbXNcbiIpOwogCiAJc2VxX3ByaW50ZihtLCAiU1ZSXHRcdDogMHgleFxuIiwgc3ZpZCk7Ci0Jc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdDogJWQgTUJcbiIsIG1lbXNpemUgLyAoMTAyNCAqIDEwMjQpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKaW5kZXggMmExNGIwNS4uNjY1YWYxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vY2VsbC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2tkdW1wLmg+CiAKICNpbmNsdWRlICJyYXMuaCIKIApAQCAtMTExLDkgKzExMiw4IEBACiAJaW50IHJldCA9IC1FTk9NRU07CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlydGFzX2NhbGwocHRjYWxfc3RvcF90b2ssIDEsIDEsIE5VTEwsIG5pZCk7Ci0jZW5kaWYKKwlpZiAoX19rZHVtcF9mbGFnKQorCQlydGFzX2NhbGwocHRjYWxfc3RvcF90b2ssIDEsIDEsIE5VTEwsIG5pZCk7CiAKIAlhcmVhID0ga21hbGxvYyhzaXplb2YoKmFyZWEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFyZWEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMKaW5kZXggZWZiMzk2NC4uYzBkODZlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYwpAQCAtNTQsOCArNTQsOCBAQAogI2VuZGlmCiAKIC8qCi0gKiBUaGUgcHJpbWFyeSB0aHJlYWQgb2YgZWFjaCBub24tYm9vdCBwcm9jZXNzb3IgaXMgcmVjb3JkZWQgaGVyZSBiZWZvcmUKLSAqIHNtcCBpbml0LgorICogVGhlIFByaW1hcnkgdGhyZWFkIG9mIGVhY2ggbm9uLWJvb3QgcHJvY2Vzc29yIHdhcyBzdGFydGVkIGZyb20gdGhlIE9GIGNsaWVudAorICogaW50ZXJmYWNlIGJ5IHByb21faG9sZF9jcHVzIGFuZCBpcyBzcGlubmluZyBvbiBzZWNvbmRhcnlfaG9sZF9zcGlubG9vcC4KICAqLwogc3RhdGljIGNwdW1hc2tfdCBvZl9zcGluX21hcDsKIApAQCAtMjA4LDExICsyMDgsNyBAQAogCS8qIE1hcmsgdGhyZWFkcyB3aGljaCBhcmUgc3RpbGwgc3Bpbm5pbmcgaW4gaG9sZCBsb29wcy4gKi8KIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSkgewogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7Ci0JCQlpZiAoaSAlIDIgPT0gMCkKLQkJCQkvKgotCQkJCSAqIEV2ZW4tbnVtYmVyZWQgbG9naWNhbCBjcHVzIGNvcnJlc3BvbmQgdG8KLQkJCQkgKiBwcmltYXJ5IHRocmVhZHMuCi0JCQkJICovCisJCQlpZiAoY3B1X3RocmVhZF9pbl9jb3JlKGkpID09IDApCiAJCQkJY3B1X3NldChpLCBvZl9zcGluX21hcCk7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggMDEwYTUxZi4uYjczYzM2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC01NDgsNiArNTQ4LDExIEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCS8qIHByZS1jaGVjayBmb3IgZmlsZSBwb3NpdGlvbjogaWYgd2UnZCByZXR1cm4gRU9GLCB0aGVyZSdzIG5vIHBvaW50CisJICogY2F1c2luZyBhIGRlc2NoZWR1bGUgKi8KKwlpZiAoKnBvcyA+PSBzaXplb2YoY3R4LT5jc2EubHNjc2EtPmdwcnMpKQorCQlyZXR1cm4gMDsKKwogCXJldCA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTI0MjYsMzggKzI0MzEsNDkgQEAKIHN0YXRpYyBpbnQgc3B1ZnNfc3dpdGNoX2xvZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4ID0gU1BVRlNfSShpbm9kZSktPmlfY3R4OworCWludCByYzsKIAotCS8qCi0JICogV2UgKGFiLSl1c2UgdGhlIG1hcHBpbmdfbG9jayBoZXJlIGJlY2F1c2UgaXQgc2VydmVzIHRoZSBzaW1pbGFyCi0JICogcHVycG9zZSBmb3Igc3luY2hyb25pemluZyBvcGVuL2Nsb3NlIGVsc2V3aGVyZS4gIE1heWJlIGl0IHNob3VsZAotCSAqIGJlIHJlbmFtZWQgZXZlbnR1YWxseS4KLQkgKi8KLQltdXRleF9sb2NrKCZjdHgtPm1hcHBpbmdfbG9jayk7CisJcmMgPSBzcHVfYWNxdWlyZShjdHgpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJaWYgKGN0eC0+c3dpdGNoX2xvZykgewotCQlzcGluX2xvY2soJmN0eC0+c3dpdGNoX2xvZy0+bG9jayk7Ci0JCWN0eC0+c3dpdGNoX2xvZy0+aGVhZCA9IDA7Ci0JCWN0eC0+c3dpdGNoX2xvZy0+dGFpbCA9IDA7Ci0JCXNwaW5fdW5sb2NrKCZjdHgtPnN3aXRjaF9sb2ctPmxvY2spOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFdlIGFsbG9jYXRlIHRoZSBzd2l0Y2ggbG9nIGRhdGEgc3RydWN0dXJlcyBvbiBmaXJzdCBvcGVuLgotCQkgKiBUaGV5IHdpbGwgbmV2ZXIgYmUgZnJlZSBiZWNhdXNlIHdlIGFzc3VtZSBhIGNvbnRleHQgd2lsbAotCQkgKiBiZSB0cmFjZWQgdW50aWwgaXQgZ29lcyBhd2F5LgotCQkgKi8KLQkJY3R4LT5zd2l0Y2hfbG9nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN3aXRjaF9sb2cpICsKLQkJCVNXSVRDSF9MT0dfQlVGU0laRSAqIHNpemVvZihzdHJ1Y3Qgc3dpdGNoX2xvZ19lbnRyeSksCi0JCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFjdHgtPnN3aXRjaF9sb2cpCi0JCQlnb3RvIG91dDsKLQkJc3Bpbl9sb2NrX2luaXQoJmN0eC0+c3dpdGNoX2xvZy0+bG9jayk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0eC0+c3dpdGNoX2xvZy0+d2FpdCk7CisJCXJjID0gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm1hcHBpbmdfbG9jayk7CisKKwljdHgtPnN3aXRjaF9sb2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3dpdGNoX2xvZykgKworCQlTV0lUQ0hfTE9HX0JVRlNJWkUgKiBzaXplb2Yoc3RydWN0IHN3aXRjaF9sb2dfZW50cnkpLAorCQlHRlBfS0VSTkVMKTsKKworCWlmICghY3R4LT5zd2l0Y2hfbG9nKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3R4LT5zd2l0Y2hfbG9nLT5oZWFkID0gY3R4LT5zd2l0Y2hfbG9nLT50YWlsID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdHgtPnN3aXRjaF9sb2ctPndhaXQpOworCXJjID0gMDsKKworb3V0OgorCXNwdV9yZWxlYXNlKGN0eCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNwdWZzX3N3aXRjaF9sb2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCA9IFNQVUZTX0koaW5vZGUpLT5pX2N0eDsKKwlpbnQgcmM7CisKKwlyYyA9IHNwdV9hY3F1aXJlKGN0eCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlrZnJlZShjdHgtPnN3aXRjaF9sb2cpOworCWN0eC0+c3dpdGNoX2xvZyA9IE5VTEw7CisJc3B1X3JlbGVhc2UoY3R4KTsKIAogCXJldHVybiAwOwotIG91dDoKLQltdXRleF91bmxvY2soJmN0eC0+bWFwcGluZ19sb2NrKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBzd2l0Y2hfbG9nX3NwcmludChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciAqdGJ1ZiwgaW50IG4pCkBAIC0yNDg1LDQyICsyNTAxLDU0IEBACiAJaWYgKCFidWYgfHwgbGVuIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwllcnJvciA9IHNwdV9hY3F1aXJlKGN0eCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKIAl3aGlsZSAoY250IDwgbGVuKSB7CiAJCWNoYXIgdGJ1ZlsxMjhdOwogCQlpbnQgd2lkdGg7CiAKLQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQlpZiAoc3B1ZnNfc3dpdGNoX2xvZ191c2VkKGN0eCkgPD0gMCkKLQkJCQlyZXR1cm4gY250ID8gY250IDogLUVBR0FJTjsKLQkJfSBlbHNlIHsKLQkJCS8qIFdhaXQgZm9yIGRhdGEgaW4gYnVmZmVyICovCi0JCQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjdHgtPnN3aXRjaF9sb2ctPndhaXQsCi0JCQkJCXNwdWZzX3N3aXRjaF9sb2dfdXNlZChjdHgpID4gMCk7Ci0JCQlpZiAoZXJyb3IpCisJCWlmIChzcHVmc19zd2l0Y2hfbG9nX3VzZWQoY3R4KSA9PSAwKSB7CisJCQlpZiAoY250ID4gMCkgeworCQkJCS8qIElmIHRoZXJlJ3MgZGF0YSByZWFkeSB0byBnbywgd2UgY2FuCisJCQkJICoganVzdCByZXR1cm4gc3RyYWlnaHQgYXdheSAqLwogCQkJCWJyZWFrOwotCQl9CiAKLQkJc3Bpbl9sb2NrKCZjdHgtPnN3aXRjaF9sb2ctPmxvY2spOwotCQlpZiAoY3R4LT5zd2l0Y2hfbG9nLT5oZWFkID09IGN0eC0+c3dpdGNoX2xvZy0+dGFpbCkgewotCQkJLyogbXVsdGlwbGUgcmVhZGVycyByYWNlPyAqLwotCQkJc3Bpbl91bmxvY2soJmN0eC0+c3dpdGNoX2xvZy0+bG9jayk7Ci0JCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQllcnJvciA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisKKwkJCX0gZWxzZSB7CisJCQkJLyogc3B1ZnNfd2FpdCB3aWxsIGRyb3AgdGhlIG11dGV4IGFuZAorCQkJCSAqIHJlLWFjcXVpcmUsIGJ1dCBzaW5jZSB3ZSdyZSBpbiByZWFkKCksIHRoZQorCQkJCSAqIGZpbGUgY2Fubm90IGJlIF9yZWxlYXNlZCAoYW5kIHNvCisJCQkJICogY3R4LT5zd2l0Y2hfbG9nIGlzIHN0YWJsZSkuCisJCQkJICovCisJCQkJZXJyb3IgPSBzcHVmc193YWl0KGN0eC0+c3dpdGNoX2xvZy0+d2FpdCwKKwkJCQkJCXNwdWZzX3N3aXRjaF9sb2dfdXNlZChjdHgpID4gMCk7CisKKwkJCQkvKiBPbiBlcnJvciwgc3B1ZnNfd2FpdCByZXR1cm5zIHdpdGhvdXQgdGhlCisJCQkJICogc3RhdGUgbXV0ZXggaGVsZCAqLworCQkJCWlmIChlcnJvcikKKwkJCQkJcmV0dXJuIGVycm9yOworCisJCQkJLyogV2UgbWF5IGhhdmUgaGFkIGVudHJpZXMgcmVhZCBmcm9tIHVuZGVybmVhdGgKKwkJCQkgKiB1cyB3aGlsZSB3ZSBkcm9wcGVkIHRoZSBtdXRleCBpbiBzcHVmc193YWl0LAorCQkJCSAqIHNvIHJlLWNoZWNrICovCisJCQkJaWYgKHNwdWZzX3N3aXRjaF9sb2dfdXNlZChjdHgpID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJfQogCQl9CiAKIAkJd2lkdGggPSBzd2l0Y2hfbG9nX3NwcmludChjdHgsIHRidWYsIHNpemVvZih0YnVmKSk7Ci0JCWlmICh3aWR0aCA8IGxlbikgeworCQlpZiAod2lkdGggPCBsZW4pCiAJCQljdHgtPnN3aXRjaF9sb2ctPnRhaWwgPQogCQkJCShjdHgtPnN3aXRjaF9sb2ctPnRhaWwgKyAxKSAlCiAJCQkJIFNXSVRDSF9MT0dfQlVGU0laRTsKLQkJfQotCi0JCXNwaW5fdW5sb2NrKCZjdHgtPnN3aXRjaF9sb2ctPmxvY2spOwotCi0JCS8qCi0JCSAqIElmIHRoZSByZWNvcmQgaXMgZ3JlYXRlciB0aGFuIHNwYWNlIGF2YWlsYWJsZSByZXR1cm4KLQkJICogcGFydGlhbCBidWZmZXIgKHNvIGZhcikKLQkJICovCi0JCWlmICh3aWR0aCA+PSBsZW4pCisJCWVsc2UKKwkJCS8qIElmIHRoZSByZWNvcmQgaXMgZ3JlYXRlciB0aGFuIHNwYWNlIGF2YWlsYWJsZSByZXR1cm4KKwkJCSAqIHBhcnRpYWwgYnVmZmVyIChzbyBmYXIpICovCiAJCQlicmVhazsKIAogCQllcnJvciA9IGNvcHlfdG9fdXNlcihidWYgKyBjbnQsIHRidWYsIHdpZHRoKTsKQEAgLTI1MjksNiArMjU1Nyw4IEBACiAJCWNudCArPSB3aWR0aDsKIAl9CiAKKwlzcHVfcmVsZWFzZShjdHgpOworCiAJcmV0dXJuIGNudCA9PSAwID8gZXJyb3IgOiBjbnQ7CiB9CiAKQEAgLTI1MzcsMjkgKzI1NjcsNDEgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCA9IFNQVUZTX0koaW5vZGUpLT5pX2N0eDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisJaW50IHJjOwogCiAJcG9sbF93YWl0KGZpbGUsICZjdHgtPnN3aXRjaF9sb2ctPndhaXQsIHdhaXQpOwogCisJcmMgPSBzcHVfYWNxdWlyZShjdHgpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJaWYgKHNwdWZzX3N3aXRjaF9sb2dfdXNlZChjdHgpID4gMCkKIAkJbWFzayB8PSBQT0xMSU47CiAKKwlzcHVfcmVsZWFzZShjdHgpOworCiAJcmV0dXJuIG1hc2s7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX3N3aXRjaF9sb2dfZm9wcyA9IHsKLQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkub3Blbgk9IHNwdWZzX3N3aXRjaF9sb2dfb3BlbiwKLQkucmVhZAk9IHNwdWZzX3N3aXRjaF9sb2dfcmVhZCwKLQkucG9sbAk9IHNwdWZzX3N3aXRjaF9sb2dfcG9sbCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc3B1ZnNfc3dpdGNoX2xvZ19vcGVuLAorCS5yZWFkCQk9IHNwdWZzX3N3aXRjaF9sb2dfcmVhZCwKKwkucG9sbAkJPSBzcHVmc19zd2l0Y2hfbG9nX3BvbGwsCisJLnJlbGVhc2UJPSBzcHVmc19zd2l0Y2hfbG9nX3JlbGVhc2UsCiB9OwogCisvKioKKyAqIExvZyBhIGNvbnRleHQgc3dpdGNoIGV2ZW50IHRvIGEgc3dpdGNoIGxvZyByZWFkZXIuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPnN0YXRlX211dGV4IGhlbGQuCisgKi8KIHZvaWQgc3B1X3N3aXRjaF9sb2dfbm90aWZ5KHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCiAJCXUzMiB0eXBlLCB1MzIgdmFsKQogewogCWlmICghY3R4LT5zd2l0Y2hfbG9nKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJmN0eC0+c3dpdGNoX2xvZy0+bG9jayk7CiAJaWYgKHNwdWZzX3N3aXRjaF9sb2dfYXZhaWwoY3R4KSA+IDEpIHsKIAkJc3RydWN0IHN3aXRjaF9sb2dfZW50cnkgKnA7CiAKQEAgLTI1NzMsNyArMjYxNSw2IEBACiAJCWN0eC0+c3dpdGNoX2xvZy0+aGVhZCA9CiAJCQkoY3R4LT5zd2l0Y2hfbG9nLT5oZWFkICsgMSkgJSBTV0lUQ0hfTE9HX0JVRlNJWkU7CiAJfQotCXNwaW5fdW5sb2NrKCZjdHgtPnN3aXRjaF9sb2ctPmxvY2spOwogCiAJd2FrZV91cCgmY3R4LT5zd2l0Y2hfbG9nLT53YWl0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYwppbmRleCBjOWJiN2NmLi5jNThiZDM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCkBAIC0yNDksNiArMjQ5LDcgQEAKIAogCXNwdWN0eF9zd2l0Y2hfc3RhdGUoY3R4LCBTUFVfVVRJTF9JRExFX0xPQURFRCk7CiAJY2xlYXJfYml0KFNQVV9TQ0hFRF9TUFVfUlVOLCAmY3R4LT5zY2hlZF9mbGFncyk7CisJc3B1X3N3aXRjaF9sb2dfbm90aWZ5KE5VTEwsIGN0eCwgU1dJVENIX0xPR19FWElULCAqc3RhdHVzKTsKIAlzcHVfcmVsZWFzZShjdHgpOwogCiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQpAQCAtNDE3LDggKzQxOCw2IEBACiAJcmV0ID0gc3B1X3J1bl9maW5pKGN0eCwgbnBjLCAmc3RhdHVzKTsKIAlzcHVfeWllbGQoY3R4KTsKIAotCXNwdV9zd2l0Y2hfbG9nX25vdGlmeShOVUxMLCBjdHgsIFNXSVRDSF9MT0dfRVhJVCwgc3RhdHVzKTsKLQogCWlmICgoc3RhdHVzICYgU1BVX1NUQVRVU19TVE9QUEVEX0JZX1NUT1ApICYmCiAJICAgICgoKHN0YXR1cyA+PiBTUFVfU1RPUF9TVEFUVVNfU0hJRlQpICYgMHgzZjAwKSA9PSAweDIxMDApKQogCQljdHgtPnN0YXRzLmxpYmFzc2lzdCsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCA2NzU5NWJjLi4yYWQ5MTRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtMzEyLDYgKzMxMiwxNSBAQAogCSAqLwogCW5vZGUgPSBjcHVfdG9fbm9kZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlmb3IgKG4gPSAwOyBuIDwgTUFYX05VTU5PREVTOyBuKyssIG5vZGUrKykgeworCQkvKgorCQkgKiAiYXZhaWxhYmxlX3NwdXMiIGNvdW50cyBob3cgbWFueSBzcHVzIGFyZSBub3QgcG90ZW50aWFsbHkKKwkJICogZ29pbmcgdG8gYmUgdXNlZCBieSBvdGhlciBhZmZpbml0eSBnYW5ncyB3aG9zZSByZWZlcmVuY2UKKwkJICogY29udGV4dCBpcyBhbHJlYWR5IGluIHBsYWNlLiBBbHRob3VnaCB0aGlzIGNvZGUgc2Vla3MgdG8KKwkJICogYXZvaWQgaGF2aW5nIGFmZmluaXR5IGdhbmdzIHdpdGggYSBzdW1tZWQgYW1vdW50IG9mCisJCSAqIGNvbnRleHRzIGJpZ2dlciB0aGFuIHRoZSBhbW91bnQgb2Ygc3B1cyBpbiB0aGUgbm9kZSwKKwkJICogdGhpcyBtYXkgaGFwcGVuIHNwb3JhZGljYWxseS4gSW4gdGhpcyBjYXNlLCBhdmFpbGFibGVfc3B1cworCQkgKiBiZWNvbWVzIG5lZ2F0aXZlLCB3aGljaCBpcyBoYXJtbGVzcy4KKwkJICovCiAJCWludCBhdmFpbGFibGVfc3B1czsKIAogCQlub2RlID0gKG5vZGUgPCBNQVhfTlVNTk9ERVMpID8gbm9kZSA6IDA7CkBAIC0zMjEsMTIgKzMzMCwxMCBAQAogCQlhdmFpbGFibGVfc3B1cyA9IDA7CiAJCW11dGV4X2xvY2soJmNiZV9zcHVfaW5mb1tub2RlXS5saXN0X211dGV4KTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShzcHUsICZjYmVfc3B1X2luZm9bbm9kZV0uc3B1cywgY2JlX2xpc3QpIHsKLQkJCWlmIChzcHUtPmN0eCAmJiBzcHUtPmN0eC0+Z2FuZwotCQkJCQkmJiBzcHUtPmN0eC0+YWZmX29mZnNldCA9PSAwKQotCQkJCWF2YWlsYWJsZV9zcHVzIC09Ci0JCQkJCShzcHUtPmN0eC0+Z2FuZy0+Y29udGV4dHMgLSAxKTsKLQkJCWVsc2UKLQkJCQlhdmFpbGFibGVfc3B1cysrOworCQkJaWYgKHNwdS0+Y3R4ICYmIHNwdS0+Y3R4LT5nYW5nICYmICFzcHUtPmN0eC0+YWZmX29mZnNldAorCQkJCQkmJiBzcHUtPmN0eC0+Z2FuZy0+YWZmX3JlZl9zcHUpCisJCQkJYXZhaWxhYmxlX3NwdXMgLT0gc3B1LT5jdHgtPmdhbmctPmNvbnRleHRzOworCQkJYXZhaWxhYmxlX3NwdXMrKzsKIAkJfQogCQlpZiAoYXZhaWxhYmxlX3NwdXMgPCBjdHgtPmdhbmctPmNvbnRleHRzKSB7CiAJCQltdXRleF91bmxvY2soJmNiZV9zcHVfaW5mb1tub2RlXS5saXN0X211dGV4KTsKQEAgLTQzNyw2ICs0NDQsMTEgQEAKIAkJYXRvbWljX2RlYygmY2JlX3NwdV9pbmZvW3NwdS0+bm9kZV0ucmVzZXJ2ZWRfc3B1cyk7CiAKIAlpZiAoY3R4LT5nYW5nKQorCQkvKgorCQkgKiBJZiBjdHgtPmdhbmctPmFmZl9zY2hlZF9jb3VudCBpcyBwb3NpdGl2ZSwgU1BVIGFmZmluaXR5IGlzCisJCSAqIGJlaW5nIGNvbnNpZGVyZWQgaW4gdGhpcyBnYW5nLiBVc2luZyBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlCisJCSAqIGFsbG93IHVzIHRvIHNraXAgYW4gZXhwbGljaXQgY2hlY2sgZm9yIGFmZmluaXR5IGluIHRoaXMgZ2FuZworCQkgKi8KIAkJYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgmY3R4LT5nYW5nLT5hZmZfc2NoZWRfY291bnQpOwogCiAJc3B1X3N3aXRjaF9ub3RpZnkoc3B1LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKaW5kZXggOGFlOGVmOS4uMTVjNjJkMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKQEAgLTY1LDcgKzY1LDYgQEAKIH07CiAKIHN0cnVjdCBzd2l0Y2hfbG9nIHsKLQlzcGlubG9ja190CQlsb2NrOwogCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CiAJdW5zaWduZWQgbG9uZwkJaGVhZDsKIAl1bnNpZ25lZCBsb25nCQl0YWlsOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdXRyYWNlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1dHJhY2UuYwppbmRleCA5MmQyMGU5Li5kMGIxZjNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1dHJhY2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1dHJhY2UuYwpAQCAtNDAsNiArNDAsNyBAQAogc3RhdGljIGt0aW1lX3Qgc3B1dHJhY2Vfc3RhcnQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcHV0cmFjZV9oZWFkLCBzcHV0cmFjZV90YWlsOwogc3RhdGljIHN0cnVjdCBzcHV0cmFjZSAqc3B1dHJhY2VfbG9nOworc3RhdGljIGludCBzcHV0cmFjZV9sb2dnaW5nOwogCiBzdGF0aWMgaW50IHNwdXRyYWNlX3VzZWQodm9pZCkKIHsKQEAgLTc5LDYgKzgwLDExIEBACiAJCWNoYXIgdGJ1ZlsxMjhdOwogCQlpbnQgd2lkdGg7CiAKKwkJLyogSWYgd2UgaGF2ZSBkYXRhIHJlYWR5IHRvIHJldHVybiwgZG9uJ3QgYmxvY2sgd2FpdGluZworCQkgKiBmb3IgbW9yZSAqLworCQlpZiAoY250ID4gMCAmJiBzcHV0cmFjZV91c2VkKCkgPT0gMCkKKwkJCWJyZWFrOworCiAJCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNwdXRyYWNlX3dhaXQsCiAJCQkJCQkgc3B1dHJhY2VfdXNlZCgpID4gMCk7CiAJCWlmIChlcnJvcikKQEAgLTEwOSwyNCArMTE1LDQ5IEBACiAKIHN0YXRpYyBpbnQgc3B1dHJhY2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlpbnQgcmM7CisKIAlzcGluX2xvY2soJnNwdXRyYWNlX2xvY2spOworCWlmIChzcHV0cmFjZV9sb2dnaW5nKSB7CisJCXJjID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlzcHV0cmFjZV9sb2dnaW5nID0gMTsKIAlzcHV0cmFjZV9oZWFkID0gc3B1dHJhY2VfdGFpbCA9IDA7CiAJc3B1dHJhY2Vfc3RhcnQgPSBrdGltZV9nZXQoKTsKLQlzcGluX3VubG9jaygmc3B1dHJhY2VfbG9jayk7CisJcmMgPSAwOwogCitvdXQ6CisJc3Bpbl91bmxvY2soJnNwdXRyYWNlX2xvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzcHV0cmFjZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXNwaW5fbG9jaygmc3B1dHJhY2VfbG9jayk7CisJc3B1dHJhY2VfbG9nZ2luZyA9IDA7CisJc3Bpbl91bmxvY2soJnNwdXRyYWNlX2xvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHV0cmFjZV9mb3BzID0gewotCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5vcGVuCT0gc3B1dHJhY2Vfb3BlbiwKLQkucmVhZAk9IHNwdXRyYWNlX3JlYWQsCisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICA9IHNwdXRyYWNlX29wZW4sCisJLnJlYWQgICAgPSBzcHV0cmFjZV9yZWFkLAorCS5yZWxlYXNlID0gc3B1dHJhY2VfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyB2b2lkIHNwdXRyYWNlX2xvZ19pdGVtKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAogCQlzdHJ1Y3Qgc3B1ICpzcHUpCiB7CiAJc3Bpbl9sb2NrKCZzcHV0cmFjZV9sb2NrKTsKKworCWlmICghc3B1dHJhY2VfbG9nZ2luZykgeworCQlzcGluX3VubG9jaygmc3B1dHJhY2VfbG9jayk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoc3B1dHJhY2VfYXZhaWwoKSA+IDEpIHsKIAkJc3RydWN0IHNwdXRyYWNlICp0ID0gc3B1dHJhY2VfbG9nICsgc3B1dHJhY2VfaGVhZDsKIApAQCAtMjMyLDYgKzI2Myw3IEBACiAKIAlyZW1vdmVfcHJvY19lbnRyeSgic3B1dHJhY2UiLCBOVUxMKTsKIAlrZnJlZShzcHV0cmFjZV9sb2cpOworCW1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CiB9CiAKIG1vZHVsZV9pbml0KHNwdXRyYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwppbmRleCA0OWM4Nzc2Li5jMjM2MTdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwpAQCAtNjksOSArNjksOSBAQAogCWlmICghSVNfRVJSKHRtcCkpIHsKIAkJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAotCQlyZXQgPSBwYXRoX2xvb2t1cCh0bXAsIExPT0tVUF9QQVJFTlR8Ci0JCQkJTE9PS1VQX09QRU58TE9PS1VQX0NSRUFURSwgJm5kKTsKKwkJcmV0ID0gcGF0aF9sb29rdXAodG1wLCBMT09LVVBfUEFSRU5ULCAmbmQpOwogCQlpZiAoIXJldCkgeworCQkJbmQuZmxhZ3MgfD0gTE9PS1VQX09QRU4gfCBMT09LVVBfQ1JFQVRFOwogCQkJcmV0ID0gc3B1ZnNfY3JlYXRlKCZuZCwgZmxhZ3MsIG1vZGUsIG5laWdoYm9yKTsKIAkJCXBhdGhfcHV0KCZuZC5wYXRoKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9jMmsuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvYzJrLmMKaW5kZXggZDBiMjViOC4uMzJiYTBmYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9jMmsuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2Myay5jCkBAIC0xMTYsMTAgKzExNiw3IEBACiAKIHZvaWQgYzJrX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JdWludCBtZW1zaXplID0gdG90YWxfbWVtb3J5OwotCiAJc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogR0VGYW51Y1xuIik7Ci0Jc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdDogJWQgTUJcbiIsIG1lbXNpemUgLyAoMTAyNCAqIDEwMjQpKTsKIAlzZXFfcHJpbnRmKG0sICJjb2hlcmVuY3lcdDogJXNcbiIsIENPSEVSRU5DWV9TRVRUSU5HKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9wcnBtYzI4MDAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvcHJwbWMyODAwLmMKaW5kZXggNWExOWI5YS4uNGM0ODVlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9wcnBtYzI4MDAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3BycG1jMjgwMC5jCkBAIC0xMTksMTAgKzExOSw3IEBACiAKIHZvaWQgcHJwbWMyODAwX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JdWludCBtZW1zaXplID0gdG90YWxfbWVtb3J5OwotCiAJc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogTW90b3JvbGFcbiIpOwotCXNlcV9wcmludGYobSwgIk1lbW9yeVx0XHQ6ICVkIE1CXG4iLCBtZW1zaXplIC8gKDEwMjQgKiAxMDI0KSk7CiAJc2VxX3ByaW50ZihtLCAiY29oZXJlbmN5XHQ6ICVzXG4iLCBQUFJQTTI4MDBfQ09IRVJFTkNZX1NFVFRJTkcpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jCmluZGV4IDE0MGQwMmEuLmE2MjNhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jCkBAIC0yMiw2ICsyMiwxMiBAQAogCWludCByZXQ7CiAKIAlzdGFydF9wZm4gPSBiYXNlID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoIXBmbl92YWxpZChzdGFydF9wZm4pKSB7CisJCWxtYl9yZW1vdmUoYmFzZSwgbG1iX3NpemUpOworCQlyZXR1cm4gMDsKKwl9CisKIAl6b25lID0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggYThjNDQ2Ni4uZDU2NDkxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxhc20vdGNlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS9rZHVtcC5oPgogCiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKIApAQCAtMjkxLDkgKzI5Miw4IEBACiAKIAl0YmwtPml0X2Jhc2UgPSAodW5zaWduZWQgbG9uZylfX3ZhKCpiYXNlcCk7CiAKLSNpZm5kZWYgQ09ORklHX0NSQVNIX0RVTVAKLQltZW1zZXQoKHZvaWQgKil0YmwtPml0X2Jhc2UsIDAsICpzaXplcCk7Ci0jZW5kaWYKKwlpZiAoIV9fa2R1bXBfZmxhZykKKwkJbWVtc2V0KCh2b2lkICopdGJsLT5pdF9iYXNlLCAwLCAqc2l6ZXApOwogCiAJdGJsLT5pdF9idXNubyA9IHBoYi0+YnVzLT5udW1iZXI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCBlMDBmOTZiLi4xYTIzMWMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC01Miw4ICs1Miw4IEBACiAKIAogLyoKLSAqIFRoZSBwcmltYXJ5IHRocmVhZCBvZiBlYWNoIG5vbi1ib290IHByb2Nlc3NvciBpcyByZWNvcmRlZCBoZXJlIGJlZm9yZQotICogc21wIGluaXQuCisgKiBUaGUgUHJpbWFyeSB0aHJlYWQgb2YgZWFjaCBub24tYm9vdCBwcm9jZXNzb3Igd2FzIHN0YXJ0ZWQgZnJvbSB0aGUgT0YgY2xpZW50CisgKiBpbnRlcmZhY2UgYnkgcHJvbV9ob2xkX2NwdXMgYW5kIGlzIHNwaW5uaW5nIG9uIHNlY29uZGFyeV9ob2xkX3NwaW5sb29wLgogICovCiBzdGF0aWMgY3B1bWFza190IG9mX3NwaW5fbWFwOwogCkBAIC0xNjEsOCArMTYxLDcgQEAKIHN0YXRpYyBpbnQgc21wX3BTZXJpZXNfY3B1X2Jvb3RhYmxlKHVuc2lnbmVkIGludCBucikKIHsKIAkvKiBTcGVjaWFsIGNhc2UgLSB3ZSBpbmhpYml0IHNlY29uZGFyeSB0aHJlYWQgc3RhcnR1cAotCSAqIGR1cmluZyBib290IGlmIHRoZSB1c2VyIHJlcXVlc3RzIGl0LiAgT2RkLW51bWJlcmVkCi0JICogY3B1cyBhcmUgYXNzdW1lZCB0byBiZSBzZWNvbmRhcnkgdGhyZWFkcy4KKwkgKiBkdXJpbmcgYm9vdCBpZiB0aGUgdXNlciByZXF1ZXN0cyBpdC4KIAkgKi8KIAlpZiAoc3lzdGVtX3N0YXRlIDwgU1lTVEVNX1JVTk5JTkcgJiYKIAkgICAgY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSAmJgpAQCAtMTk5LDExICsxOTgsNyBAQAogCS8qIE1hcmsgdGhyZWFkcyB3aGljaCBhcmUgc3RpbGwgc3Bpbm5pbmcgaW4gaG9sZCBsb29wcy4gKi8KIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSkgewogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7IAotCQkJaWYgKGkgJSAyID09IDApCi0JCQkJLyoKLQkJCQkgKiBFdmVuLW51bWJlcmVkIGxvZ2ljYWwgY3B1cyBjb3JyZXNwb25kIHRvCi0JCQkJICogcHJpbWFyeSB0aHJlYWRzLgotCQkJCSAqLworCQkJaWYgKGNwdV90aHJlYWRfaW5fY29yZShpKSA9PSAwKQogCQkJCWNwdV9zZXQoaSwgb2Zfc3Bpbl9tYXApOwogCQl9CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCmluZGV4IGE0NDcwOWEuLjVhZmNlMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQpAQCAtMzcsNiArMzcsNyBAQAogaWZlcSAoJChDT05GSUdfUENJKSx5KQogb2JqLSQoQ09ORklHXzR4eCkJCSs9IHBwYzR4eF9wY2kubwogZW5kaWYKK29iai0kKENPTkZJR19QUEM0eHhfR1BJTykJKz0gcHBjNHh4X2dwaW8ubwogCiBvYmotJChDT05GSUdfQ1BNKQkJKz0gY3BtX2NvbW1vbi5vCiBvYmotJChDT05GSUdfQ1BNMikJCSs9IGNwbTIubyBjcG0yX3BpYy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwZWZlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2dwaW8uYwpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIFBQQzR4eCBncGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBIYXJyaXMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDIwMDguCisgKgorICogQXV0aG9yOiBTdGV2ZSBGYWxjbyA8c2ZhbGNvQGhhcnJpcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEdQSU9fTUFTSyhncGlvKQkJKDB4ODAwMDAwMDAgPj4gKGdwaW8pKQorI2RlZmluZSBHUElPX01BU0syKGdwaW8pCSgweGMwMDAwMDAwID4+ICgoZ3BpbykgKiAyKSkKKworLyogUGh5c2ljYWwgR1BJTyByZWdpc3RlciBsYXlvdXQgKi8KK3N0cnVjdCBwcGM0eHhfZ3BpbyB7CisJX19iZTMyIG9yOworCV9fYmUzMiB0Y3I7CisJX19iZTMyIG9zcmw7CisJX19iZTMyIG9zcmg7CisJX19iZTMyIHRzcmw7CisJX19iZTMyIHRzcmg7CisJX19iZTMyIG9kcjsKKwlfX2JlMzIgaXI7CisJX19iZTMyIHJyMTsKKwlfX2JlMzIgcnIyOworCV9fYmUzMiBycjM7CisJX19iZTMyIHJlc2VydmVkMTsKKwlfX2JlMzIgaXNyMWw7CisJX19iZTMyIGlzcjFoOworCV9fYmUzMiBpc3IybDsKKwlfX2JlMzIgaXNyMmg7CisJX19iZTMyIGlzcjNsOworCV9fYmUzMiBpc3IzaDsKK307CisKK3N0cnVjdCBwcGM0eHhfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwIG1tX2djOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKKy8qCisgKiBHUElPIExJQiBBUEkgaW1wbGVtZW50YXRpb24gZm9yIEdQSU9zCisgKgorICogVGhlcmUgYXJlIGEgbWF4aW11bSBvZiAzMiBncGlvcyBpbiBlYWNoIGdwaW8gY29udHJvbGxlci4KKyAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcGM0eHhfZ3Bpb19jaGlwICoKK3RvX3BwYzR4eF9ncGlvY2hpcChzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG1tX2djLCBzdHJ1Y3QgcHBjNHh4X2dwaW9fY2hpcCwgbW1fZ2MpOworfQorCitzdGF0aWMgaW50IHBwYzR4eF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBwcGM0eHhfZ3BpbyBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3M7CisKKwlyZXR1cm4gaW5fYmUzMigmcmVncy0+aXIpICYgR1BJT19NQVNLKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fcHBjNHh4X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IHBwYzR4eF9ncGlvIF9faW9tZW0gKnJlZ3MgPSBtbV9nYy0+cmVnczsKKworCWlmICh2YWwpCisJCXNldGJpdHMzMigmcmVncy0+b3IsIEdQSU9fTUFTSyhncGlvKSk7CisJZWxzZQorCQljbHJiaXRzMzIoJnJlZ3MtPm9yLCBHUElPX01BU0soZ3BpbykpOworfQorCitzdGF0aWMgdm9pZAorcHBjNHh4X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IHBwYzR4eF9ncGlvX2NoaXAgKmNoaXAgPSB0b19wcGM0eHhfZ3Bpb2NoaXAobW1fZ2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJX19wcGM0eHhfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygiJXM6IGdwaW86ICVkIHZhbDogJWRcbiIsIF9fZnVuY19fLCBncGlvLCB2YWwpOworfQorCitzdGF0aWMgaW50IHBwYzR4eF9ncGlvX2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBwcGM0eHhfZ3Bpb19jaGlwICpjaGlwID0gdG9fcHBjNHh4X2dwaW9jaGlwKG1tX2djKTsKKwlzdHJ1Y3QgcHBjNHh4X2dwaW8gX19pb21lbSAqcmVncyA9IG1tX2djLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJLyogRGlzYWJsZSBvcGVuLWRyYWluIGZ1bmN0aW9uICovCisJY2xyYml0czMyKCZyZWdzLT5vZHIsIEdQSU9fTUFTSyhncGlvKSk7CisKKwkvKiBGbG9hdCB0aGUgcGluICovCisJY2xyYml0czMyKCZyZWdzLT50Y3IsIEdQSU9fTUFTSyhncGlvKSk7CisKKwkvKiBCaXRzIDAtMTUgdXNlIFRTUkwvT1NSTCwgYml0cyAxNi0zMSB1c2UgVFNSSC9PU1JIICovCisJaWYgKGdwaW8gPCAxNikgeworCQljbHJiaXRzMzIoJnJlZ3MtPm9zcmwsIEdQSU9fTUFTSzIoZ3BpbykpOworCQljbHJiaXRzMzIoJnJlZ3MtPnRzcmwsIEdQSU9fTUFTSzIoZ3BpbykpOworCX0gZWxzZSB7CisJCWNscmJpdHMzMigmcmVncy0+b3NyaCwgR1BJT19NQVNLMihncGlvKSk7CisJCWNscmJpdHMzMigmcmVncy0+dHNyaCwgR1BJT19NQVNLMihncGlvKSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BwYzR4eF9ncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgcHBjNHh4X2dwaW9fY2hpcCAqY2hpcCA9IHRvX3BwYzR4eF9ncGlvY2hpcChtbV9nYyk7CisJc3RydWN0IHBwYzR4eF9ncGlvIF9faW9tZW0gKnJlZ3MgPSBtbV9nYy0+cmVnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCS8qIEZpcnN0IHNldCBpbml0aWFsIHZhbHVlICovCisJX19wcGM0eHhfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7CisKKwkvKiBEaXNhYmxlIG9wZW4tZHJhaW4gZnVuY3Rpb24gKi8KKwljbHJiaXRzMzIoJnJlZ3MtPm9kciwgR1BJT19NQVNLKGdwaW8pKTsKKworCS8qIERyaXZlIHRoZSBwaW4gKi8KKwlzZXRiaXRzMzIoJnJlZ3MtPnRjciwgR1BJT19NQVNLKGdwaW8pKTsKKworCS8qIEJpdHMgMC0xNSB1c2UgVFNSTCwgYml0cyAxNi0zMSB1c2UgVFNSSCAqLworCWlmIChncGlvIDwgMTYpIHsKKwkJY2xyYml0czMyKCZyZWdzLT5vc3JsLCBHUElPX01BU0syKGdwaW8pKTsKKwkJY2xyYml0czMyKCZyZWdzLT50c3JsLCBHUElPX01BU0syKGdwaW8pKTsKKwl9IGVsc2UgeworCQljbHJiaXRzMzIoJnJlZ3MtPm9zcmgsIEdQSU9fTUFTSzIoZ3BpbykpOworCQljbHJiaXRzMzIoJnJlZ3MtPnRzcmgsIEdQSU9fTUFTSzIoZ3BpbykpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCIlczogZ3BpbzogJWQgdmFsOiAlZFxuIiwgX19mdW5jX18sIGdwaW8sIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgcHBjNHh4X2FkZF9ncGlvY2hpcHModm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiaWJtLHBwYzR4eC1ncGlvIikgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgcHBjNHh4X2dwaW9fY2hpcCAqcHBjNHh4X2djOworCQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKKwkJc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2M7CisJCXN0cnVjdCBncGlvX2NoaXAgKmdjOworCisJCXBwYzR4eF9nYyA9IGt6YWxsb2Moc2l6ZW9mKCpwcGM0eHhfZ2MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcGM0eHhfZ2MpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXNwaW5fbG9ja19pbml0KCZwcGM0eHhfZ2MtPmxvY2spOworCisJCW1tX2djID0gJnBwYzR4eF9nYy0+bW1fZ2M7CisJCW9mX2djID0gJm1tX2djLT5vZl9nYzsKKwkJZ2MgPSAmb2ZfZ2MtPmdjOworCisJCW9mX2djLT5ncGlvX2NlbGxzID0gMjsKKwkJZ2MtPm5ncGlvID0gMzI7CisJCWdjLT5kaXJlY3Rpb25faW5wdXQgPSBwcGM0eHhfZ3Bpb19kaXJfaW47CisJCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gcHBjNHh4X2dwaW9fZGlyX291dDsKKwkJZ2MtPmdldCA9IHBwYzR4eF9ncGlvX2dldDsKKwkJZ2MtPnNldCA9IHBwYzR4eF9ncGlvX3NldDsKKworCQlyZXQgPSBvZl9tbV9ncGlvY2hpcF9hZGQobnAsIG1tX2djKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCQljb250aW51ZTsKK2VycjoKKwkJcHJfZXJyKCIlczogcmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJICAgICAgIG5wLT5mdWxsX25hbWUsIHJldCk7CisJCWtmcmVlKHBwYzR4eF9nYyk7CisJCS8qIHRyeSBvdGhlcnMgYW55d2F5ICovCisJfQorCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwcGM0eHhfYWRkX2dwaW9jaGlwcyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGJjNTgxZDguLjcwYjc2NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC03OCw2ICs3OCw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkJhc2Ugc2V0dXAiCiAKIGNvbW1lbnQgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggZWE0MGE5ZC4uZGUzZmFkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTk5LDYgKzk5LDcgQEAKICNkZWZpbmUgVElGXzMxQklUCQkxOAkvKiAzMmJpdCBwcm9jZXNzICovIAogI2RlZmluZSBUSUZfTUVNRElFCQkxOQogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTIwCS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMjEJLyogdGhyZWFkIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTExMiw2ICsxMTMsNyBAQAogI2RlZmluZSBfVElGX1VTRURGUFUJCSgxPDxUSUZfVVNFREZQVSkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGXzMxQklUCQkoMTw8VElGXzMxQklUKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IDExNjkxMzAuLjE1OGIwZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMTg5LDE0ICsxODksMyBAQAogCXJldHVybiByYzsKIH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KLQotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCi1pbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCi0Jc3RhcnRfcGZuID0gUEZOX0RPV04oc3RhcnQpOwotCWVuZF9wZm4gPSBzdGFydF9wZm4gKyBQRk5fRE9XTihzaXplKTsKLQlyZXR1cm4gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4sIGVuZF9wZm4sIDEyMCAqIEhaKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDUxMzFkNTAuLmNiMmM4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTEyLDYgKzEyLDcgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCisJc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBTdXBlckggaXMgYSBSSVNDIHByb2Nlc3NvciB0YXJnZXRlZCBmb3IgdXNlIGluIGVtYmVkZGVkIHN5c3RlbXMKIAkgIGFuZCBjb25zdW1lciBlbGVjdHJvbmljczsgaXQgd2FzIGFsc28gdXNlZCBpbiB0aGUgU2VnYSBEcmVhbWNhc3QKQEAgLTIwLDYgKzIxLDEwIEBACiAKIGNvbmZpZyBTVVBFUkgzMgogCWRlZl9ib29sICFTVVBFUkg2NAorCXNlbGVjdCBIQVZFX0tQUk9CRVMKKwlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCisJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKKwlzZWxlY3QgSEFWRV9GVFJBQ0UKIAogY29uZmlnIFNVUEVSSDY0CiAJZGVmX2Jvb2wgeSBpZiBDUFVfU0g1CkBAIC01NCw4ICs1OSwxMSBAQAogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgR0VORVJJQ19HUElPCisJZGVmX2Jvb2wgbgorCiBjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKLQlkZWZfYm9vbCB5CisJYm9vbAogCiBjb25maWcgR0VORVJJQ19JT01BUAogCWJvb2wKQEAgLTY2LDYgKzc0LDkgQEAKIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJZGVmX2Jvb2wgbgogCitjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKKwlib29sCisKIGNvbmZpZyBHRU5FUklDX0xPQ0tCUkVBSwogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFNNUCAmJiBQUkVFTVBUCkBAIC05Miw2ICsxMDMsMTAgQEAKIGNvbmZpZyBMT0NLREVQX1NVUFBPUlQKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBIQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uICFTTVAKKwogY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgogCWRlZl9ib29sIG4KIApAQCAtMTA2LDYgKzEyMSw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSB0eXBlIgogCiAjCkBAIC0zMjMsNiArMzQwLDcgQEAKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QgaWYgU01QCiAKICMgU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0CiAKQEAgLTQ5MCw3ICs1MDgsNiBAQAogY29uZmlnIFNFQ0NPTVAKIAlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCi0JZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBrZXJuZWwgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIG51bWJlciBjcnVuY2hpbmcgYXBwbGljYXRpb25zCiAJICB0aGF0IG1heSBuZWVkIHRvIGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIGR1cmluZyB0aGVpcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnIGIvYXJjaC9zaC9LY29uZmlnLmRlYnVnCmluZGV4IDRkMmQxMDIuLmU2ZDJjOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKQEAgLTgyLDcgKzgyLDcgQEAKIAogY29uZmlnIDRLU1RBQ0tTCiAJYm9vbCAiVXNlIDRLYiBmb3Iga2VybmVsIHN0YWNrcyBpbnN0ZWFkIG9mIDhLYiIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAoTU1VIHx8IEJST0tFTikKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAoTU1VIHx8IEJST0tFTikgJiYgIVBBR0VfU0laRV82NEtCCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlIGtlcm5lbCB3aWxsIHVzZSBhIDRLYiBzdGFja3NpemUgZm9yIHRoZQogCSAga2VybmVsIHN0YWNrIGF0dGFjaGVkIHRvIGVhY2ggcHJvY2Vzcy90aHJlYWQuIFRoaXMgZmFjaWxpdGF0ZXMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDAxZDg1YzcuLjFmNDA5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtNzYsOCArNzYsMTAgQEAKICMgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIGxpbmtpbmcuCiAjCiBpZmRlZiBDT05GSUdfU1VQRVJIMzIKK1VUU19NQUNISU5FCTo9IHNoCiBMREZMQUdTX3ZtbGludXgJKz0gLWUgX3N0ZXh0CiBlbHNlCitVVFNfTUFDSElORQk6PSBzaDY0CiBMREZMQUdTX3ZtbGludXgJKz0gLS1kZWZzeW0gcGh5c19zdGV4dD1fc3RleHQtJChDT05GSUdfUEFHRV9PRkZTRVQpIFwKIAkJICAgLS1kZWZzeW0gcGh5c19zdGV4dF9zaG1lZGlhPXBoeXNfc3RleHQrMSBcCiAJCSAgIC1lIHBoeXNfc3RleHRfc2htZWRpYQpAQCAtMTIzLDYgKzEyNSw5IEBACiAJICAgICAkKGZpbHRlci1vdXQgLiwgJChwYXRzdWJzdCAlLCUvLCQobWFjaGRpci15KSkpKQogZW5kaWYKIAorIyBDb21tb24gbWFjaGluZSB0eXBlIGhlYWRlcnMuIE5vdCBwYXJ0IG9mIHRoZSBhcmNoL3NoL2JvYXJkcy8gaGllcmFyY2h5LgorbWFjaGRpci15CSs9IG1hY2gtY29tbW9uCisKICMgQ29tcGFuaW9uIGNoaXBzCiBjb3JlLSQoQ09ORklHX0hENjQ0NlhfU0VSSUVTKQkrPSBhcmNoL3NoL2NjaGlwcy9oZDY0NDZ4LwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwppbmRleCBhZTE5NDg2Li41MDQ2N2Y5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCisrKyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKQEAgLTEyOCw2ICsxMjgsNyBAQAogCiBjb25maWcgU0hfUlNLNzIwMwogCWJvb2wgIlJTSzcyMDMiCisJc2VsZWN0IEdFTkVSSUNfR1BJTwogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3MjAzCiAKIGNvbmZpZyBTSF9TREs3NzgwCkBAIC0xNjIsNiArMTYzLDcgQEAKIGNvbmZpZyBTSF9NSUdPUgogCWJvb2wgIk1pZ28tUiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMgorCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBTZWxlY3QgTWlnby1SIGlmIGNvbmZpZ3VyaW5nIGZvciB0aGUgU0g3NzIyIE1pZ28tUiBwbGF0Zm9ybQogICAgICAgICAgIGJ5IFJlbmVzYXMgU3lzdGVtIFNvbHV0aW9ucyBBc2lhIFB0ZS4gTHRkLgpAQCAtMTY5LDYgKzE3MSw3IEBACiBjb25maWcgU0hfQVAzMjVSWEEKIAlib29sICJBUC0zMjVSWEEiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjMKKwlzZWxlY3QgR0VORVJJQ19HUElPCiAJaGVscAogCSAgUmVuZXNhcyAiQVAtMzI1UlhBIiBzdXBwb3J0LgogCSAgQ29tcGF0aWJsZSB3aXRoIEFMR08gU1lTVEVNIENPLixMVEQuICJBUC0zMjBBIgpAQCAtMTg0LDYgKzE4NywxMyBAQAogCWJvb2wgIkVET1NLNzcwNSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcwNQogCitjb25maWcgU0hfRURPU0s3NzYwCisJYm9vbCAiRURPU0s3NzYwIgorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzYwCisJaGVscAorCSAgU2VsZWN0IGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgRURPU0s3NzYwCisJICBldmFsdWF0aW9uIGJvYXJkLgorCiBjb25maWcgU0hfU0g0MjAyX01JQ1JPREVWCiAJYm9vbCAiU0g0LTIwMiBNaWNyb0RldiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINF8yMDIKQEAgLTIyOCw2ICsyMzgsNyBAQAogY29uZmlnIFNIX01BR0lDX1BBTkVMX1IyCiAJYm9vbCAiTWFnaWMgUGFuZWwgUjIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjAKKwlzZWxlY3QgR0VORVJJQ19HUElPCiAJaGVscAogCSAgU2VsZWN0IE1hZ2ljIFBhbmVsIFIyIGlmIGNvbmZpZ3VyaW5nIGZvciBNYWdpYyBQYW5lbCBSMi4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZQppbmRleCA0NjMwMjJjLi5kOWVmYTM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19TSF9SU0s3MjAzKQkrPSBib2FyZC1yc2s3MjAzLm8KIG9iai0kKENPTkZJR19TSF9TSDc3ODVMQ1IpCSs9IGJvYXJkLXNoNzc4NWxjci5vCiBvYmotJChDT05GSUdfU0hfU0hNSU4pCQkrPSBib2FyZC1zaG1pbi5vCitvYmotJChDT05GSUdfU0hfRURPU0s3NzYwKQkrPSBib2FyZC1lZG9zazc3NjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKaW5kZXggZmQxNjEyNS4uODg4MWE2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCkBAIC0xNSwxNCArMTUsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9zaF9mbGN0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncyA9IFNNQzkxMVhfVVNFXzMyQklULApAQCAtNTIsMjAgKzU1LDMzIEBACiAJfSwKIH07CiAKKy8qCisgKiBBUDMyMCBhbmQgQVAzMjVSWEEgaGFzIENQTEQgZGF0YSBpbiBOT1IgRmxhc2goMHhBODAwMDAtMHhBQkZGRkYpLgorICogSWYgdGhpcyBhcmVhIGVyYXNlZCwgdGhpcyBib2FyZCBjYW4gbm90IGJvb3QuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhcDMyNXJ4YV9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKLQkJIC5uYW1lID0gInVib290IiwKLQkJIC5vZmZzZXQgPSAwLAotCQkgLnNpemUgPSAoMSAqIDEwMjQgKiAxMDI0KSwKLQkJIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJCS5uYW1lID0gInVib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDEgKiAxMDI0ICogMTAyNCksCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCiAJfSwgewotCQkgLm5hbWUgPSAia2VybmVsIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAorCQkubmFtZSA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAogCX0sIHsKLQkJIC5uYW1lID0gIm90aGVyIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5uYW1lID0gImZyZWUtYXJlYTAiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgoNyAqIDEwMjQgKiAxMDI0KSArICg1MTIgKiAxMDI0KSksCisJfSwgeworCQkubmFtZSA9ICJDUExELURhdGEiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCQkuc2l6ZSA9ICgxMDI0ICogMTI4ICogMiksCisJfSwgeworCQkubmFtZSA9ICJmcmVlLWFyZWExIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAogCX0sCiB9OwogCkBAIC05MywyMCArMTA5LDQ1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBuYW5kX3BhcnRpdGlvbl9pbmZvW10gPSB7CisJeworCQkubmFtZQk9ICJuYW5kX2RhdGEiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGE0NTMwMDAwLAorCQkuZW5kCT0gMHhhNDUzMDBmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhIG5hbmRfZmxhc2hfZGF0YSA9IHsKKwkucGFydHMJCT0gbmFuZF9wYXJ0aXRpb25faW5mbywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5hbmRfcGFydGl0aW9uX2luZm8pLAorCS5mbGNtbmNyX3ZhbAk9IEZDS1NFTF9FIHwgVFlQRVNFTF9TRVQgfCBOQU5XRl9FLAorCS5oYXNfaHdlY2MJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmFuZF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2ZsY3RsIiwKKwkucmVzb3VyY2UJPSBuYW5kX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmFuZF9mbGFzaF9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZuYW5kX2ZsYXNoX2RhdGEsCisJfSwKK307CisKICNkZWZpbmUgRlBHQV9MQ0RSRUcJMHhCNDEwMDE4MAogI2RlZmluZSBGUEdBX0JLTFJFRwkweEI0MTAwMjEyCiAjZGVmaW5lIEZQR0FfTENEUkVHX1ZBTAkweDAwMTgKLSNkZWZpbmUgUE9SVF9QSENSCTB4QTQwNTAxMEUKLSNkZWZpbmUgUE9SVF9QTENSCTB4QTQwNTAxMTQKLSNkZWZpbmUgUE9SVF9QTUNSCTB4QTQwNTAxMTYKLSNkZWZpbmUgUE9SVF9QUkNSCTB4QTQwNTAxMUMKLSNkZWZpbmUgUE9SVF9QU0NSCTB4QTQwNTAxMUUKLSNkZWZpbmUgUE9SVF9QWkNSCTB4QTQwNTAxNEMKLSNkZWZpbmUgUE9SVF9ISVpDUkEJMHhBNDA1MDE1OAogI2RlZmluZSBQT1JUX01TRUxDUkIJMHhBNDA1MDE4MgotI2RlZmluZSBQT1JUX1BTRFIJMHhBNDA1MDEzRQotI2RlZmluZSBQT1JUX1BaRFIJMHhBNDA1MDE2QwotI2RlZmluZSBQT1JUX1BTRUxECTB4QTQwNTAxNTQKKyNkZWZpbmUgUE9SVF9ISVpDUkMJMHhBNDA1MDE1QworI2RlZmluZSBQT1JUX0RSVkNSQQkweEE0MDUwMThBCisjZGVmaW5lIFBPUlRfRFJWQ1JCCTB4QTQwNTAxOEMKIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhKQogewpAQCAtMTE2LDggKzE1Nyw3IEBACiAJY3RybF9vdXR3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTQ1IpICYgfjB4MDBDMCkgfCAweDQwLCBQT1JUX1BTQ1IpOwotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BTRFIpICYgfjB4MDgsIFBPUlRfUFNEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIApAQCAtMjc4LDQzICszMTgsMTE5IEBACiAjaWZkZWYgQ09ORklHX0kyQwogCSZjYW1lcmFfZGV2aWNlLAogI2VuZGlmCisJJm5hbmRfZmxhc2hfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGFwMzI1cnhhX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhcDMyNXJ4YV9kZXZpY2VzX3NldHVwKHZvaWQpCiB7Ci0JY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDAiKTsgLyogTENEQyAqLwotCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAzIik7IC8qIENFVSAqLworCS8qIExEMyBhbmQgTEQ0IExFRHMgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFg1LCBOVUxMKTsgLyogUlVOICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRYNSwgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVFg1LCAwKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUWDQsIE5VTEwpOyAvKiBJTkRJQ0FUT1IgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFg0LCAwKTsKKwlncGlvX2V4cG9ydChHUElPX1BUWDQsIDApOworCisJLyogU1cxIGlucHV0ICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRGNywgTlVMTCk7IC8qIE1PREUgKi8KKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BURjcpOworCWdwaW9fZXhwb3J0KEdQSU9fUFRGNywgMCk7CisKKwkvKiBMQ0RDICovCisJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDAiKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDgsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ3LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ0LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENETENMS19QVFIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRERDSywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVkVQV0MsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZDUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWU1lOLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RIU1lOLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RESVNQLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RET04sIE5VTEwpOworCisJLyogTENEIGJhY2tsaWdodCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUUzMsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUUzMsIDEpOworCisJLyogQ0VVICovCisJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDMiKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU9fQ0xLMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX1ZEMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0hEMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0ZMRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NLTywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q5LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU9fRDgsIE5VTEwpOworCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRaNywgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRaNywgMCk7IC8qIE9FX0NBTSAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUWjYsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjYsIDApOyAvKiBTVEJZX0NBTSAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUWjUsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjUsIDEpOyAvKiBSU1RfQ0FNICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRaNCwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRaNCwgMCk7IC8qIFNBRERSICovCisKKwljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7CisKKwkvKiBGTENUTCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZDRSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGNywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGNiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTkFGMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRkNERSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRk9FLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0MsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZXRSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlJCLCBOVUxMKTsKKworCWN0cmxfb3V0dygwLCBQT1JUX0hJWkNSQyk7CisJY3RybF9vdXR3KDB4RkZGRiwgUE9SVF9EUlZDUkEpOworCWN0cmxfb3V0dygweEZGRkYsIFBPUlRfRFJWQ1JCKTsKIAogCXBsYXRmb3JtX3Jlc291cmNlX3NldHVwX21lbW9yeSgmY2V1X2RldmljZSwgImNldSIsIDQgPDwgMjApOwogCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYXAzMjVyeGFfaTJjX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShhcDMyNXJ4YV9pMmNfZGV2aWNlcykpOwotIAorCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGFwMzI1cnhhX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShhcDMyNXJ4YV9kZXZpY2VzKSk7CiB9CiBkZXZpY2VfaW5pdGNhbGwoYXAzMjVyeGFfZGV2aWNlc19zZXR1cCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhcDMyNXJ4YV9zZXR1cChjaGFyICoqY21kbGluZV9wKQotewotCS8qIExDREMgY29uZmlndXJhdGlvbiAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BIQ1IpICYgfjB4ZmZmZiwgUE9SVF9QSENSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QTENSKSAmIH4weGZmZmYsIFBPUlRfUExDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUE1DUikgJiB+MHhmZmZmLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BSQ1IpICYgfjB4MDNmZiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4MDFDMCwgUE9SVF9ISVpDUkEpOwotCi0JLyogQ0VVICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUxEKSAmIH4weDAwMDMsIFBPUlRfUFNFTEQpOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QWkNSKSAmIH4weGZmMDApIHwgMHg1NTAwLCBQT1JUX1BaQ1IpOwotCWN0cmxfb3V0YigoY3RybF9pbmIoUE9SVF9QWkRSKSAmIH4weGYwKSB8IDB4MjAsIFBPUlRfUFpEUik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfYXAzMjVyeGEgX19pbml0bXYgPSB7CiAJLm12X25hbWUgPSAiQVAtMzI1UlhBIiwKLQkubXZfc2V0dXAgPSBhcDMyNXJ4YV9zZXR1cCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lZG9zazc3NjAuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGMwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lZG9zazc3NjAuYwpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIFJlbmVzYXMgRXVyb3BlIEVET1NLNzc2MCBCb2FyZCBTdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNQRVMgU29jaWV0YScgUHJvZ2V0dGF6aW9uZSBFbGV0dHJvbmljYSBlIFNvZnR3YXJlIEx0ZC4KKyAqIEF1dGhvcjogTHVjYSBTYW50aW5pIDxsdWNhLnNhbnRpbmlAc3Blc29ubGluZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pMmMtc2g3NzYwLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKy8qIEJ1cyBzdGF0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyBmb3IgQ1M0IGFyZWEgKi8KKyNkZWZpbmUgQlNDX0NTNEJDUgkweEE0RkQwMDEwCisjZGVmaW5lIEJTQ19DUzRXQ1IJMHhBNEZEMDAzMAorCisjZGVmaW5lIFNNQ19JT0JBU0UJMHhBMjAwMDAwMAorI2RlZmluZSBTTUNfSU9fT0ZGU0VUCTB4MzAwCisjZGVmaW5lIFNNQ19JT0FERFIJKFNNQ19JT0JBU0UgKyBTTUNfSU9fT0ZGU0VUKQorCisjZGVmaW5lIEVUSEVSTkVUX0lSUQk1CisKKy8qIE5PUiBmbGFzaCAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVkb3NrNzc2MF9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPSAiYm9vdGxvYWRlciIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSA9IFNaXzI1NkssCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwgeworCQkubmFtZSA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IFNaXzJNLAorCX0sIHsKKwkJLm5hbWUgPSAiZnMiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IFNaXzI2TSwKKwl9LCB7CisJCS5uYW1lID0gIm90aGVyIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlZG9zazc3NjBfbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLnBhcnRzCQk9IGVkb3NrNzc2MF9ub3JfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGVkb3NrNzc2MF9ub3JfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkb3NrNzc2MF9ub3JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJOT1IgRmxhc2giLAorCQkuc3RhcnQJPSAweDAwMDAwMDAwLAorCQkuZW5kCT0gMHgwMDAwMDAwMCArIFNaXzMyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVkb3NrNzc2MF9ub3JfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkucmVzb3VyY2UJPSBlZG9zazc3NjBfbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZWRvc2s3NzYwX25vcl9mbGFzaF9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlZG9zazc3NjBfbm9yX2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qIGkyYyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2g3NzYwX2kyY19wbGF0ZGF0YSBpMmNfcGQgPSB7CisJLnNwZWVkX2toegk9IDQwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzYwX2kyYzFfcmVzW10gPSB7CisJeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMV9NTUlPLAorCQkuZW5kCT0gU0g3NzYwX0kyQzFfTU1JT0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSx7CisJCS5zdGFydAk9IFNINzc2MF9JMkMxX0lSUSwKKwkJLmVuZAk9IFNINzc2MF9JMkMxX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoNzc2MF9pMmMxX2RldiA9IHsKKwkuZGV2ICAgID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZpMmNfcGQsCisJfSwKKworCS5uYW1lCQk9IFNINzc2MF9JMkNfREVWTkFNRSwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBzaDc3NjBfaTJjMV9yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc2MF9pMmMxX3JlcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc2MF9pMmMwX3Jlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gU0g3NzYwX0kyQzBfTU1JTywKKwkJLmVuZAk9IFNINzc2MF9JMkMwX01NSU9FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gU0g3NzYwX0kyQzBfSVJRLAorCQkuZW5kCT0gU0g3NzYwX0kyQzBfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2g3NzYwX2kyYzBfZGV2ID0geworCS5kZXYgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wZCwKKwl9LAorCS5uYW1lCQk9IFNINzc2MF9JMkNfREVWTkFNRSwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBzaDc3NjBfaTJjMF9yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc2MF9pMmMwX3JlcyksCit9OworCisvKiBldGggaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX0lPX1NISUZUXzEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gU01DX0lPQUREUiwKKwkJLmVuZAk9IFNNQ19JT0FERFIgKyBTWl8zMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBFVEhFUk5FVF9JUlEsCisJCS5lbmQJPSBFVEhFUk5FVF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRICwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2ID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3JlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3JlcywKKworCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtYzkxeF9pbmZvLAorCX0sCit9OworCisvKiBwbGF0Zm9ybSBpbml0IGNvZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplZG9zazc3NjBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtYzkxeF9kZXYsCisJJmVkb3NrNzc2MF9ub3JfZmxhc2hfZGV2aWNlLAorCSZzaDc3NjBfaTJjMF9kZXYsCisJJnNoNzc2MF9pMmMxX2RldiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZWRvc2s3NzYwX2RldmljZXModm9pZCkKK3sKKwlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSUSk7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZWRvc2s3NzYwX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoZWRvc2s3NzYwX2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoaW5pdF9lZG9zazc3NjBfZGV2aWNlcyk7CisKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKKyAqLworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2Vkb3NrNzc2MCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQk9ICJFRE9TSzc3NjAiLAorCS5tdl9ucl9pcnFzCT0gMTI4LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKaW5kZXggZjNiOGIwNy4uM2RlMjJjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKQEAgLTEzLDEyICsxMywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWdpY3BhbmVscjIuaD4KKyNpbmNsdWRlIDxtYWNoL21hZ2ljcGFuZWxyMi5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIwLmg+CiAKICNkZWZpbmUgTEFOOTExNV9SRUFEWQkoY3RybF9pbmwoMHhBODAwMDA4NFVMKSAmIDB4MDAwMDAwMDFVTCkKIApAQCAtMTcwLDcgKzE3MiwxNCBAQAogCS8qIFI3IEEyNTsJICAgICBSNiBBMjQ7CSAgICAgUjUgQTIzOwkJICBSNCBBMjI7CiAJICogUjMgQTIxOwkgICAgIFIyIEEyMDsJICAgICBSMSBBMTk7CQkgIFIwIEEwOwogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFJDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTI1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTE5LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMCwgTlVMTCk7CiAKIAkvKiBTNyAoeCk7CQlTNiAoeCk7ICAgICAgICBTNSAoeCk7CSAgICAgUzQgR1BPKEVFUFJPTV9DUzIpOwogCSAqIFMzIEdQTyhFRVBST01fQ1MxKTsgIFMyIFNJT0YwX1RYRDsgIFMxIFNJT0YwX1JYRDsgUzAgU0lPRjBfU0NLOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcnNrNzIwMy5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcnNrNzIwMy5jCmluZGV4IGZmYmVkYzUuLjU4MjY2ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXJzazcyMDMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMKQEAgLTE2LDggKzE2LDExIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3MjAzLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc21jOTExeF9wbGF0ZGF0YSBzbWM5MTF4X2luZm8gPSB7CiAJLmZsYWdzCQk9IFNNQzkxMVhfVVNFXzE2QklULApAQCAtMTE0LDE0ICsxMTcsNTQgQEAKIAl9CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcnNrNzIwM19ncGlvX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiZ3JlZW4iLAorCQkuZ3BpbwkJCT0gR1BJT19QRTEwLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJvcmFuZ2UiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJCS5ncGlvCQkJPSBHUElPX1BFMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwgeworCQkubmFtZQkJCT0gInJlZDp0aW1lciIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAidGltZXIiLAorCQkuZ3BpbwkJCT0gR1BJT19QQzE0LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJyZWQ6aGVhcnRiZWF0IiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuZ3BpbwkJCT0gR1BJT19QRTExLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgcnNrNzIwM19ncGlvX2xlZHNfaW5mbyA9IHsKKwkubGVkcwkJPSByc2s3MjAzX2dwaW9fbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHJzazcyMDNfZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxlZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxlZHMtZ3BpbyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZyc2s3MjAzX2dwaW9fbGVkc19pbmZvLAorCX0sCit9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnNrNzIwM19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc21jOTExeF9kZXZpY2UsCiAJJmZsYXNoX2RldmljZSwKKwkmbGVkX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJzazcyMDNfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIFNlbGVjdCBwaW5zIGZvciBTQ0lGMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1RYRDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1JYRDAsIE5VTEwpOworCiAJc2V0X210ZF9wYXJ0aXRpb25zKCk7CiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHJzazcyMDNfZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShyc2s3MjAzX2RldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKaW5kZXggYjk1ZDY3NC4uNDA4YmJkZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtcGNhLXBsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tcGNhLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgotI2luY2x1ZGUgPGFzbS9zaDc3ODVsY3IuaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzc4NWxjci5oPgogCiAvKgogICogTk9URTogVGhpcyBib2FyZCBoYXMgMiBwaHlzaWNhbCBtZW1vcnkgbWFwcy4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCmluZGV4IDE2ZTVkYWUuLjVjYzA4NjdkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3NobWluLmg+CisjaW5jbHVkZSA8bWFjaC9zaG1pbi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvaW8uYwppbmRleCA1NDFjZWEyLi43ZDE1M2U1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9lZG9zazc3MDUvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2Vkb3NrNzcwNS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAogI2RlZmluZSBTTUNfSU9BRERSCTB4QTIwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9zZXR1cC5jCmluZGV4IGYwNzZjNDUuLmFiM2Y0N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL2Vkb3NrNzcwNS9pby5oPgorI2luY2x1ZGUgPG1hY2gvZWRvc2s3NzA1Lmg+CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaF9lZG9zazc3MDVfaW5pdF9pcnEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKaW5kZXggZmM4ZjI4ZS4uMDgwNTdmNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKQEAgLTE4LDYgKzE4LDcgQEAKIGNvbmZpZyBTSF9SNzc4NVJQCiAJYm9vbCAiUjc3ODVSUCBib2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3Nzg1CisJc2VsZWN0IEdFTkVSSUNfR1BJTwogCiBlbmRjaG9pY2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL01ha2VmaWxlCmluZGV4IDIwYTEwMDguLmQ5M2FhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvTWFrZWZpbGUKQEAgLTEsMTAgKzEsMTAgQEAKICMKLSMgTWFrZWZpbGUgZm9yIHRoZSBSNzc4MFJQLTEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAorIyBNYWtlZmlsZSBmb3IgdGhlIEhpZ2hsYW5kZXIgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAogIwotaXJxaW5pdC0kKENPTkZJR19TSF9SNzc4ME1QKQk6PSBpcnEtcjc3ODBtcC5vCi1pcnFpbml0LSQoQ09ORklHX1NIX1I3Nzg1UlApCTo9IGlycS1yNzc4NXJwLm8KLWlycWluaXQtJChDT05GSUdfU0hfUjc3ODBSUCkJOj0gaXJxLXI3NzgwcnAubwotb2JqLXkJCQkJOj0gc2V0dXAubyAkKGlycWluaXQteSkKK29iai15CQkJCTo9IHNldHVwLm8KK29iai0kKENPTkZJR19TSF9SNzc4MFJQKQkrPSBpcnEtcjc3ODBycC5vCitvYmotJChDT05GSUdfU0hfUjc3ODBNUCkJKz0gaXJxLXI3NzgwbXAubworb2JqLSQoQ09ORklHX1NIX1I3Nzg1UlApCSs9IGlycS1yNzc4NXJwLm8gcGlubXV4LXI3Nzg1cnAubwogCiBpZm5lcSAoJChDT05GSUdfU0hfUjc3ODVSUCkseSkKIG9iai0kKENPTkZJR19QVVNIX1NXSVRDSCkJKz0gcHN3Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKaW5kZXggYWUxY2ZjYi4uODNjMjhiYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYwppbmRleCA5ZDM5MjFmLi5iNzIxZTg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCmluZGV4IDg5NmMwNDUuLjM4MTFiMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9waW5tdXgtcjc3ODVycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bpbm11eC1yNzc4NXJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3YTJiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9waW5tdXgtcjc3ODVycC5jCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3Nzg1Lmg+CisKK3ZvaWQgX19pbml0IGhpZ2hsYW5kZXJfcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwkvKiBTQ0lGMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUYwX0NUUywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRjBfUlRTLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TQ0lGMF9TQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUYwX1JYRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRjBfVFhELCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYwppbmRleCBiZThkNTQ3Li4zN2IxYTJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3B1c2gtc3dpdGNoLmg+CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBwc3dfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwppbmRleCBiYzc5YWZiLi44MDY0MzhiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG5ldC9heDg4Nzk2Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTI5NCw2ICsyOTQsOCBAQAogCQkJICh2ZXIgPj4gMTIpICYgMHhmLCAodmVyID4+IDgpICYgMHhmLAogCQkJICh2ZXIgPj4gIDQpICYgMHhmLCB2ZXIgJiAweGYpOwogCisJaGlnaGxhbmRlcl9wbGF0X3Bpbm11eF9zZXR1cCgpOworCiAJLyoKIAkgKiBFbmFibGUgdGhlIGltcG9ydGFudCBjbG9ja3MgcmlnaHQgYXdheS4uCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYwppbmRleCAxNzdmNGYwLi5lODUyMTJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hcG0tZW11bGF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vYWRjLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4Lmg+CisjaW5jbHVkZSA8bWFjaC9ocDZ4eC5oPgogCiAvKiBwZXJjZW50YWdlIHZhbHVlcyAqLwogI2RlZmluZSBBUE1fQ1JJVElDQUwJCQkxMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCmluZGV4IGU5NjY4NGQuLjY0YWYxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8Y3B1L2RhYy5oPgogI2luY2x1ZGUgPGFzbS9wbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKaW5kZXggNDc1YjQ2Yy4uNDhmZWNlNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KICNpbmNsdWRlIDxjcHUvZGFjLmg+CiAKICNkZWZpbmUJU0NQQ1IJMHhhNDAwMDExNgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL2lycS5jCmluZGV4IDVhMWMzYmIuLjhhYTE3MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvaXJxLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2xib3hyZTIuaD4KKyNpbmNsdWRlIDxtYWNoL2xib3hyZTIuaD4KIAogLyoKICAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKaW5kZXggYzc0NDQwZC4uMmIwYjU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vbGJveHJlMi5oPgorI2luY2x1ZGUgPG1hY2gvbGJveHJlMi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNmX2lkZV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwppbmRleCA5ZjhhNTQwLi41MmRkNzQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9taWNyb2Rldi5oPgorI2luY2x1ZGUgPG1hY2gvbWljcm9kZXYuaD4KIAogCS8qCiAJICoJd2UgbmVlZCB0byBoYXZlIGEgJ3NhZmUnIGFkZHJlc3MgdG8gcmUtZGlyZWN0IGFsbCBJL08gcmVxdWVzdHMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCmluZGV4IDRkMzM1MDcuLjcwMjc1M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWljcm9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoL21pY3JvZGV2Lmg+CiAKICNkZWZpbmUgTlVNX0VYVEVSTkFMX0lSUVMgMTYJLyogSVJMMCAuLiBJUkwxNSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L3NldHVwLmMKaW5kZXggZmM4Y2QwNi4uYTkyMDJmZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvc2V0dXAuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KLSNpbmNsdWRlIDxhc20vbWljcm9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoL21pY3JvZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9sY2RfcXZnYS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9sY2RfcXZnYS5jCmluZGV4IDZlOTYwOTUuLmRlOTAxNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL2xjZF9xdmdhLmMKQEAgLTE3LDggKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgotI2luY2x1ZGUgPGFzbS9taWdvci5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KKyNpbmNsdWRlIDxtYWNoL21pZ29yLmg+CiAKIC8qIExDRCBNb2R1bGUgaXMgYSBQSDI0MDMyMFQgYWNjb3JkaW5nIHRvIGJvYXJkIHNjaGVtYXRpY3MuIFRoaXMgbW9kdWxlCiAgKiBpcyBtYWRlIHVwIG9mIGEgMjQweDMyMCBMQ0QgaG9va2VkIHVwIHRvIGEgUjYxNTA1VSAob3IgSFg4MzQ3LUEwMT8pCkBAIC0zMCw5ICszMiw5IEBACiAKIHN0YXRpYyB2b2lkIHJlc2V0X2xjZF9tb2R1bGUodm9pZCkKIHsKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QSERSKSAmIH4weDA0LCBQT1JUX1BIRFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRIMiwgMCk7CiAJbWRlbGF5KDIpOwotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BIRFIpIHwgMHgwNCwgUE9SVF9QSERSKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUSDIsIDEpOwogCW1kZWxheSgxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IDcxNGRjZTkuLjk3NTI4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTE3LDE0ICsxNywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaF9rZXlzYy5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgotI2luY2x1ZGUgPGFzbS9taWdvci5oPgorI2luY2x1ZGUgPG1hY2gvbWlnb3IuaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CiAKIC8qIEFkZHJlc3MgICAgIElSUSAgU2l6ZSAgQnVzICBEZXNjcmlwdGlvbgogICogMHgwMDAwMDAwMCAgICAgICA2NE1CICAxNiAgIE5PUiBGbGFzaCAoU1AyOVBMMjU2TikKQEAgLTM1LDcgKzM3LDcgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKLQkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklULAorCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfZXRoX3Jlc291cmNlc1tdID0gewpAQCAtMTY5LDcgKzE3MSw3IEBACiAKIHN0YXRpYyBpbnQgbWlnb3JfbmFuZF9mbGFzaF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gY3RybF9pbmIoUE9SVF9QQURSKSAmIDB4MDI7IC8qIFBUQTEgKi8KKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19QVEExKTsgLyogTkFORF9SQm4gKi8KIH0KIAogc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBtaWdvcl9uYW5kX2ZsYXNoX2RhdGEgPSB7CkBAIC0yODYsMjIgKzI4OCwxOCBAQAogCiBzdGF0aWMgdm9pZCBjYW1lcmFfcG93ZXJfb24odm9pZCkKIHsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlOwotCisJLyogVXNlIDEwIE1IeiBWSU9fQ0tPIGluc3RlYWQgb2YgMjQgTUh6IHRvIHdvcmsKKwkgKiBhcm91bmQgc2lnbmFsIHF1YWxpdHkgaXNzdWVzIG9uIFBhbmVsIEJvYXJkIFYyLjEuCisJICovCiAJY2FtZXJhX2NsayA9IGNsa19nZXQoTlVMTCwgInZpZGVvX2NsayIpOwotCWNsa19zZXRfcmF0ZShjYW1lcmFfY2xrLCAyNDAwMDAwMCk7CisJY2xrX3NldF9yYXRlKGNhbWVyYV9jbGssIDEwMDAwMDAwKTsKIAljbGtfZW5hYmxlKGNhbWVyYV9jbGspOwkvKiBzdGFydCBWSU9fQ0tPICovCiAKKwkvKiB1c2UgVklPX1JTVCB0byB0YWtlIGNhbWVyYSBvdXQgb2YgcmVzZXQgKi8KIAltZGVsYXkoMTApOwotCXZhbHVlID0gY3RybF9pbmIoUE9SVF9QVERSKTsKLQl2YWx1ZSAmPSB+MHgwOTsKLSNpZm5kZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBCi0JdmFsdWUgfD0gMHgwMTsKLSNlbmRpZgotCWN0cmxfb3V0Yih2YWx1ZSwgUE9SVF9QVERSKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUVDMsIDApOwogCW1kZWxheSgxMCk7Ci0KLQljdHJsX291dGIodmFsdWUgfCA4LCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhbWVyYV9wb3dlcl9vZmYodm9pZCkKQEAgLTMwOSwxMyArMzA3LDIxIEBACiAJY2xrX2Rpc2FibGUoY2FtZXJhX2Nsayk7IC8qIHN0b3AgVklPX0NLTyAqLwogCWNsa19wdXQoY2FtZXJhX2Nsayk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QVERSKSAmIH4weDA4LCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhbWVyYV9wb3dlcihpbnQgbW9kZSkKK3sKKwlpZiAobW9kZSkKKwkJY2FtZXJhX3Bvd2VyX29uKCk7CisJZWxzZQorCQljYW1lcmFfcG93ZXJfb2ZmKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSTJDCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjYW1lcmFfb3Y3NzJ4X21hZ2ljW10gPQogewotCTB4MDksIDB4MDEsIDB4MGMsIDB4MTAsIDB4MGQsIDB4NDEsIDB4MGUsIDB4MDEsCisJMHgwOSwgMHgwMSwgMHgwYywgMHgyMCwgMHgwZCwgMHg0MSwgMHgwZSwgMHgwMSwKIAkweDEyLCAweDAwLCAweDEzLCAweDhGLCAweDE0LCAweDRBLCAweDE1LCAweDAwLAogCTB4MTYsIDB4MDAsIDB4MTcsIDB4MjMsIDB4MTgsIDB4YTAsIDB4MTksIDB4MDcsCiAJMHgxYSwgMHhmMCwgMHgxYiwgMHg0MCwgMHgxZiwgMHgwMCwgMHgyMCwgMHgxMCwKQEAgLTM5MSw2ICszOTcsNyBAQAogCX0sCiAJLmJ1c19wYXJhbSA9ICBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8CiAJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfOCwKKwkucG93ZXIgPSBjYW1lcmFfcG93ZXIsCiAJLnNldF9jYXB0dXJlID0gb3Y3NzJ4X3NldF9jYXB0dXJlLAogfTsKIApAQCAtNDA1LDggKzQxMiw2IEBACiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7CiAJLmZsYWdzID0gU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgXAogCXwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCwKLQkuZW5hYmxlX2NhbWVyYSA9IGNhbWVyYV9wb3dlcl9vbiwKLQkuZGlzYWJsZV9jYW1lcmEgPSBjYW1lcmFfcG93ZXJfb2ZmLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWdvcl9jZXVfcmVzb3VyY2VzW10gPSB7CkBAIC00NTgsNzUgKzQ2MywxMzUgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWlnb3JfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIExpdCBEMTEgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo3LCAwKTsKKworCS8qIExpdCBEMTIgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKKworCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOworCWN0cmxfb3V0bCgweDAwMDAzNDAwLCBCU0NfQ1M0QkNSKTsKKwljdHJsX291dGwoMHgwMDExMDA4MCwgQlNDX0NTNFdDUik7CisKKwkvKiBLRVlTQyAqLwogCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjE0Iik7IC8qIEtFWVNDICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNF9JTjYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlOMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlONCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNV9JTjUsIE5VTEwpOworCisJLyogTkFORCBGbGFzaCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NTNkFfQ0UyQiwgTlVMTCk7CisJY3RybF9vdXRsKChjdHJsX2lubChCU0NfQ1M2QUJDUikgJiB+MHgwNjAwKSB8IDB4MDIwMCwgQlNDX0NTNkFCQ1IpOworCWdwaW9fcmVxdWVzdChHUElPX1BUQTEsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRBMSk7CisKKwkvKiBUb3VjaCBQYW5lbCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTYsIE5VTEwpOworCisJLyogTENEIFBhbmVsICovCiAJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDAiKTsgLyogTENEQyAqLworI2lmZGVmIENPTkZJR19TSF9NSUdPUl9RVkdBIC8qIExDREMgLSBRVkdBIC0gRW5hYmxlIFNZUyBJbnRlcmZhY2Ugc2lnbmFscyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDcsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFJTLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RDUywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEUkQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFdSLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVEgyLCBOVUxMKTsgLyogTENEX0RPTiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSDIsIDEpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBIC8qIExDREMgLSBXVkdBIC0gRW5hYmxlIFJHQiBJbnRlcmZhY2Ugc2lnbmFscyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE0LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDExLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ5LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDcsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZFUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENESFNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCBOVUxMKTsKKyNlbmRpZgorCisJLyogQ0VVICovCiAJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDMiKTsgLyogQ0VVICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NMSzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19IRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19GTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q4LCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUVDMsIE5VTEwpOyAvKiBWSU9fUlNUICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMywgMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRUMiwgTlVMTCk7IC8qIFRWX0lOX0VOICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMiwgMSk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRUMCwgTlVMTCk7IC8qIENBTV9FTiAqLworI2lmZGVmIENPTkZJR19TSF9NSUdPUl9SVEFfV1ZHQQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVDAsIDApOworI2Vsc2UKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFQwLCAxKTsKKyNlbmRpZgorCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgyMDAwLCBQT1JUX01TRUxDUkIpOyAvKiBEMTUtPkQ4ICovCiAKIAlwbGF0Zm9ybV9yZXNvdXJjZV9zZXR1cF9tZW1vcnkoJm1pZ29yX2NldV9kZXZpY2UsICJjZXUiLCA0IDw8IDIwKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1pZ29yX2kyY19kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUobWlnb3JfaTJjX2RldmljZXMpKTsKLSAKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtaWdvcl9kZXZpY2VzLCBBUlJBWV9TSVpFKG1pZ29yX2RldmljZXMpKTsKIH0KIF9faW5pdGNhbGwobWlnb3JfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtaWdvcl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEpDUikgJiB+MHgwMDAzLCBQT1JUX1BKQ1IpOwotCi0JLyogS0VZU0MgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QWUNSKSAmIH4weDBmZmYsIFBPUlRfUFlDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFpDUikgJiB+MHgwZmYwLCBQT1JUX1BaQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUxBKSAmIH4weDQxMDAsIFBPUlRfUFNFTEEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHg0MDAwLCBQT1JUX0hJWkNSQSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JDKSAmIH4weGMwMDAsIFBPUlRfSElaQ1JDKTsKLQotCS8qIE5BTkQgRmxhc2ggKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QWENSKSAmIDB4MGZmZiwgUE9SVF9QWENSKTsKLQljdHJsX291dGwoKGN0cmxfaW5sKEJTQ19DUzZBQkNSKSAmIH4weDAwMDAwNjAwKSB8IDB4MDAwMDAyMDAsCi0JCSAgQlNDX0NTNkFCQ1IpOwotCi0JLyogVG91Y2ggUGFuZWwgLSBFbmFibGUgSVJRNiAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4YywgUE9SVF9QWkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEEpIHwgMHg4MDAwKSwgUE9SVF9QU0VMQSk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkNSQykgJiB+MHg0MDAwKSwgUE9SVF9ISVpDUkMpOwotCi0jaWZkZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBCi0JLyogTENEQyAtIFdWR0EgLSBFbmFibGUgUkdCIEludGVyZmFjZSBzaWduYWxzICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEFDUikgJiB+MHgwMDAzLCBQT1JUX1BBQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BSQ1IpICYgfjB4MDAwZiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwZCkgfCAweDA0MDAsIFBPUlRfUFNFTEQpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpICYgfjB4MDEwMCwgUE9SVF9NU0VMQ1JCKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4MDFlMCwgUE9SVF9ISVpDUkEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NIX01JR09SX1FWR0EKLQkvKiBMQ0RDIC0gUVZHQSAtIEVuYWJsZSBTWVMgSW50ZXJmYWNlIHNpZ25hbHMgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDAwMDMsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BIQ1IpICYgfjB4Y2ZmZikgfCAweDAwMTAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BSQ1IpICYgfjB4MDMwZiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwMSkgfCAweDA0MjAsIFBPUlRfUFNFTEQpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgwMTAwLCBQT1JUX01TRUxDUkIpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMWUwLCBQT1JUX0hJWkNSQSk7Ci0jZW5kaWYKLQotCS8qIENFVSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QVENSKSAmIH4weDAzYzMpIHwgMHgwMDUxLCBQT1JUX1BUQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BVQ1IpICYgfjB4MDNmZiwgUE9SVF9QVUNSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QVkNSKSAmIH4weDAzZmYsIFBPUlRfUFZDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFdDUikgJiB+MHgzYzAwLCBQT1JUX1BXQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUxDKSB8IDB4MDAwMSwgUE9SVF9QU0VMQyk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MjAwMCwgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEUpIHwgMHgwMDBmLCBQT1JUX1BTRUxFKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSB8IDB4MjIwMCwgUE9SVF9NU0VMQ1JCKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4MGEwMCwgUE9SVF9ISVpDUkEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQikgJiB+MHgwMDAzLCBQT1JUX0hJWkNSQik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfbWlnb3IgX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCmluZGV4IDhlNDlmNmUuLmM3MGZlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAKICNkZWZpbmUgUjJEX05SX0lSTCAxMwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYwppbmRleCAyMzA4ZTg3Li5jNTg1YmUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lvX3RyYXBwZWQuaD4KICNpbmNsdWRlIDxhc20vc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKaW5kZXggODdjZGM1Ny4uODU1NTU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9zZGs3NzgwLmg+CisjaW5jbHVkZSA8bWFjaC9zZGs3NzgwLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCmluZGV4IGFjYzU5MzIuLmFhZDk0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vc2RrNzc4MC5oPgorI2luY2x1ZGUgPG1hY2gvc2RrNzc4MC5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCmluZGV4IGZkODUwYmEuLmQ4ZWJmYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaDc3NjNyZHAuaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzc2M3JkcC5oPgogCiAjZGVmaW5lIElOVENfQkFTRQkJKDB4RkZEMDAwMDApCiAjZGVmaW5lIElOVENfSU5UMlBSSTcgICAoSU5UQ19CQVNFKzB4NDAwMUMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwppbmRleCAyMzg1MGRhLi42ZjkyNmZkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vc2g3NzYzcmRwLmg+CisjaW5jbHVkZSA8bWFjaC9zaDc3NjNyZHAuaD4KICNpbmNsdWRlIDxhc20vc2hfZXRoLmg+CiAjaW5jbHVkZSA8YXNtL3NoNzc2MGZiLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYwppbmRleCBhNWUzNDlkLi5hMzI3N2EyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zbmFwZ2Vhci5oPgorI2luY2x1ZGUgPG1hY2gvc25hcGdlYXIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8Y3B1L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCmluZGV4IDFiNzY3ZTEuLmRlYzNkYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWg3NzUxLmg+CisjaW5jbHVkZSA8bWFjaC9zeXN0ZW1oNzc1MS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jCmluZGV4IDYwMWM5YzguLjUzODQwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KICNpbmNsdWRlIDxhc20vc21jMzdjOTN4Lmg+CiAKIC8qIGFkZHJlc3Mgb2YgZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKaW5kZXggZWU3OGFmOC4uMjE5ZmQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KIAogZXh0ZXJuIHZvaWQgbWFrZV9zeXN0ZW1oX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCmluZGV4IDQ3MzBjMWQuLjRiYWRhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpdGFuLmg+CisjaW5jbHVkZSA8bWFjaC90aXRhbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYwppbmRleCA1ZGUzYjJhLi44MWU3ZTBmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCkBAIC05LDcgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCmluZGV4IGI2NzE4ZGUuLmFhZDVlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCkBAIC0xICsxLDQgQEAKIHpJbWFnZQordm1saW51eC5zcmVjCit1SW1hZ2UKK3VJbWFnZS5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggNWI1NDk2NS4uYzE2Y2NkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMzMsMTAgKzMzLDE2IEBACiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKK2lmZXEgKCQoQ09ORklHXzMyQklUKSx5KQorS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbHNlCiBLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbmRpZgogCiBLRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKaW5kZXggNDc2ODVmNi4uMzAxZTZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKQEAgLTIzLDYgKzIzLDExIEBACiAKIExJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCiAKK2lmZXEgKCQoQ09ORklHX0ZUUkFDRSkseSkKK09SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKK0tCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKK2VuZGlmCisKIExERkxBR1Nfdm1saW51eCA6PSAtVHRleHQgJChJTUFHRV9PRkZTRVQpIC1lIHN0YXJ0dXAgLVQgJChvYmopLy4uLy4uL2tlcm5lbC92bWxpbnV4LmxkcwogCiAkKG9iaikvdm1saW51eDogJChPQkpFQ1RTKSAkKG9iaikvcGlnZ3kubyAkKExJQkdDQykgRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYwppbmRleCBmMzg2OTk3Li5lZmRiYTZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjXzMyLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzY18zMi5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogdm9pZCBkZWNvbXByZXNzX2tlcm5lbCh2b2lkKQogewotCW91dHB1dF9kYXRhID0gMDsKKwlvdXRwdXRfZGF0YSA9IE5VTEw7CiAJb3V0cHV0X3B0ciA9IFBIWVNBRERSKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwogI2lmZGVmIENPTkZJR18yOUJJVAogCW91dHB1dF9wdHIgfD0gUDJTRUc7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZwppbmRleCA4NTFjODcwLi44NzRkZDk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0Ci0jIFR1ZSBBdWcgMjYgMTQ6MjE6MTcgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFR1ZSBPY3QgMjEgMTg6MjA6MDYgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsMTEgKzEzLDEyIEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CkBAIC03MiwyMiArNzMsMjAgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMjAsNiArMTE5LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE5MCwxMiArMTkwLDEzIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjg5LDYgKzI5MCw4IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTMzOSw2ICszNDIsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNTksMTEgKzM2MywxMCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC00NTUsNyArNDU4LDE1IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1NIX0ZMQ1RMPXkKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwpAQCAtNTQxLDYgKzU1Miw5IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldApAQCAtNjQ1LDYgKzY1OSw3IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTY5Miw2ICs3MDcsOCBAQAogIyBDT05GSUdfVUlPX1BEUlYgaXMgbm90IHNldAogQ09ORklHX1VJT19QRFJWX0dFTklSUT15CiAjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNzA1LDEyICs3MjIsMTMgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CkBAIC03NDMsNiArNzYxLDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNzg1LDYgKzgwNCw3IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTg1NSw3ICs4NzUsMTIgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldApAQCAtODY2LDE0ICs4OTEsMTkgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19STkc9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC05NDYsMTMgKzk3NiwxNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9jYXltYW5fZGVmY29uZmlnCmluZGV4IGEwNWIyNzguLmUyMWMwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9jYXltYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9jYXltYW5fZGVmY29uZmlnCkBAIC0xLDIyICsxLDI1IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmMzCi0jIEZyaSBOb3YgMjMgMTQ6MTU6NTUgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTg6MDQ6NTIgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiAjIENPTkZJR19TVVBFUkgzMiBpcyBub3Qgc2V0CiBDT05GSUdfU1VQRVJINjQ9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZyIKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CkBAIC0zNiwxNyArMzksMTUgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQpAQCAtNjAsMjEgKzYxLDMzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzk4LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05OCwxMyArMTEyLDE4IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQogIwogQ09ORklHX0NQVV9TSDU9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CkBAIC0xMTMsNiArMTMyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldApAQCAtMTIxLDEyICsxNDEsMTUgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAogCkBAIC0xNDcsNyArMTcwLDkgQEAKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEs9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMjU2SyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUIgaXMgbm90IHNldApAQCAtMTYxLDExICsxODYsMTMgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1JFU09VUkNFU182NEJJVD15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMTk2LDcgKzIyMyw2IEBACiAjCiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTUwMDAwMDAwCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMjI1LDEzICsyNTEsMTIgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19QUkVFTVBUX0JLTD15Ci1DT05GSUdfR1VTQT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0yNTcsMTEgKzI4Miw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0yNzQsNiArMjk3LDcgQEAKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0zMDMsOCArMzI3LDYgQEAKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTMxMiw2ICszMzQsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zMjgsMTQgKzM1MSwxNCBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzEsMTQgKzM5NCwxOCBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQzOCw2ICs0NjUsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CkBAIC00NDksNiArNDc3LDcgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldApAQCAtNDU2LDE4ICs0ODUsMjAgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNDg2LDEzICs1MTcsMTkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01MDAsMTUgKzUzNywxNyBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKQEAgLTUxNyw2ICs1NTYsOSBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC01MjQsMTMgKzU2NiwxMyBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTU3NSwxMCArNjE3LDEzIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNjAzLDQ4ICs2NDgsNjIgQEAKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIwogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogCiAjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CkBAIC02NTMsMTYgKzcxMiwxMiBAQAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldApAQCAtNjcxLDYgKzcyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldApAQCAtNzAwLDYgKzc1Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CkBAIC03MDksOSArNzY2LDEyIEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MTksNiArNzc5LDcgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKIAogIwogIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKQEAgLTczNSwzNSArNzk2LDcxIEBACiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiBDT05GSUdfVklERU9fREVWPW0KLSMgQ09ORklHX1ZJREVPX1Y0TDEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVjRMMV9DT01QQVQgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KK0NPTkZJR19WSURFT19BTExPV19WNEwxPXkKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CitDT05GSUdfRFZCX0NPUkU9eQorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPX1Y0TDE9bQogQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CiAjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19TQUE3MTM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01YQiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19IRVhJVU1fT1JJT04gaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fSEVYSVVNX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DWDg4IGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NYMjM4ODUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSVZUViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DWDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfQ09SRT15Ci0jIENPTkZJR19EVkJfQ09SRV9BVFRBQ0ggaXMgbm90IHNldAogQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQogCiAjCiAjIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycwogIworIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9BVjcxMTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JVREdFVF9DT1JFIGlzIG5vdCBzZXQKIAogIwogIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycwpAQCAtNzgwLDYgKzg3NywxMSBAQAogIyBDT05GSUdfRFZCX1BMVVRPMiBpcyBub3Qgc2V0CiAKICMKKyMgU3VwcG9ydGVkIFNETUMgRE0xMTA1IEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfRE0xMTA1IGlzIG5vdCBzZXQKKworIwogIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcwogIwogCkBAIC03OTEsMTQgKzg5MywyMSBAQAogIwogIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKICMKLSMgQ09ORklHX0RWQl9TVFYwMjk5IGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DWDI0MTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9NVDMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVkVTMVg5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfUzVIMTQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RWMDI4OCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RCNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RWMDI5OSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODA4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfVERBMTAwODYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1ZFUzFYOTMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX0lURDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVQTYxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjQxMTYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NJMjFYWCBpcyBub3Qgc2V0CiAKICMKICMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKQEAgLTgwNyw2ICs5MTYsNyBAQAogIyBDT05GSUdfRFZCX1NQODg3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ1gyMjcwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRFJYMzk3WEQgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0w2NDc4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAogIyBDT05GSUdfRFZCX05YVDYwMDAgaXMgbm90IHNldApAQCAtODE2LDYgKzkyNiw3IEBACiAjIENPTkZJR19EVkJfRElCMzAwME1DIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9ESUI3MDAwTSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfRElCNzAwMFAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDQ4IGlzIG5vdCBzZXQKIAogIwogIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcwpAQCAtODM0LDI1ICs5NDUsMjggQEAKICMgQ09ORklHX0RWQl9CQ00zNTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9MR0RUMzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfUzVIMTQwOSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQVU4NTIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDExIGlzIG5vdCBzZXQKIAogIwotIyBUdW5lcnMvUExMIHN1cHBvcnQKKyMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKICMKICMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgyN1ggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX1FUMTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfTVQyMDYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVU5FUl9NVDIyNjYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX01UMjEzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfVFVORVJfRElCMDA3MCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzY2VsbGFuZW91cyBkZXZpY2VzCisjIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiAjCiAjIENPTkZJR19EVkJfTE5CUDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVUE2MTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9MR1M4R0w1IGlzIG5vdCBzZXQKKworIworIyBUb29scyB0byBkZXZlbG9wIG5ldyBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9EVU1NWV9GRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQUY5MDEzIGlzIG5vdCBzZXQKIENPTkZJR19EQUI9eQogCiAjCkBAIC04NjQsMTUgKzk3OCwxNiBAQAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KICMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC04OTcsNiArMTAxMiw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtOTA1LDcgKzEwMjEsMTAgQEAKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MzgsMzggKzEwNTcsNDIgQEAKICMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC05ODEsMjIgKzExMDQsMjAgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotQ09ORklHX1JPTUZTX0ZTPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xMDIwLDYgKzExNDEsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMDM5LDggKzExNjEsMTEgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTA0OCwxNCArMTE3MywxMyBAQAogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEwODcsOSArMTIxMSw2IEBACiAjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwOTgsNiArMTIxOSw3IEBACiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CkBAIC0xMTA1LDkgKzEyMjcsMTIgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogQ09ORklHX1NDSEVEU1RBVFM9eQogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldApAQCAtMTEyMywxNSArMTI0OCwyMCBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTE0Nyw4ICsxMjc3LDkzIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTE1Niw2ICsxMzcxLDcgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCmluZGV4IDNkYzFjYmQuLmJlNGMyZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjMQotIyBNb24gQXVnICA0IDE2OjQ5OjEzIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE4OjE4OjAyIDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDEyICsxMywxMyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CkBAIC03MCw3ICs3MSw5IEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTc4LDE1ICs4MSwxMiBAQAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTE5LDYgKzExOSw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xOTIsMTIgKzE5MywxMyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KQEAgLTIzMCw3ICsyMzIsNiBAQAogQ09ORklHX1NIX1RNVT15CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTQ5ODc2NTA0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKQEAgLTMxOCw2ICszMTksOCBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNjUsNiArMzY4LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzg1LDExICszODksMTAgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldApAQCAtNDgwLDYgKzQ4Myw5IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldApAQCAtNTA0LDYgKzUxMCw3IEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTU1OSw2ICs1NjYsNyBAQAogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNjI2LDYgKzYzNCw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CiBDT05GSUdfU0hfV0RUPXkKICMgQ09ORklHX1NIX1dEVF9NTUFQIGlzIG5vdCBzZXQKIApAQCAtNjQ3LDYgKzY1Niw4IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTY3Myw2ICs2ODQsNyBAQAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtNzA3LDYgKzcxOSw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtNzE4LDYgKzczMSw3IEBACiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc1NSw2ICs3NjksMTIgQEAKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTc2NCw2ICs3ODQsMTAgQEAKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiAKICMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKKworIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTc3NSwxNiArNzk5LDE4IEBACiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04MTQsNiArODQwLDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODcyLDYgKzg5OSwxMSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKQEAgLTg4MiwxMiArOTE0LDE0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldApAQCAtOTYwLDYgKzk5NCwxMSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIApAQCAtOTY3LDcgKzEwMDYsNiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4MDA2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA5MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTg6MjA6MDkgMjAwOAorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Il9lZG9zazc3NjAiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MD15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQT15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9FRE9TSzc3NjA9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9ETUFfQVBJPXkKK0NPTkZJR19TSF9ETUE9eQorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRE1BQlJHIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDIwMDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVNDMiwxMTUyMDAgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4zOi9zY3JpcHRzL2ZpbGVzeXMgaXA9MTkyLjE2OC4wLjQiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRFJJVkVSPXkKK0NPTkZJR19ERUJVR19ERVZSRVM9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOD15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzI9eQorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorQ09ORklHX01URF9DRklfSTQ9eQorQ09ORklHX01URF9DRklfSTg9eQorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKK0NPTkZJR19NVERfUk9NPXkKK0NPTkZJR19NVERfQUJTRU5UPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmZmZmZmZmYKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0yNjAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19TSDc3NjA9eQorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9bQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KKyMgQ09ORklHX0ZCX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBFUkg9eQorQ09ORklHX1NORF9TT0M9eQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CisjIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmU4MDAwMAorQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKaW5kZXggNDFlMjViMy4uMTAzMmIyMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2Ci0jIFdlZCBKdWwgMzAgMDE6MjQ6NTcgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTg6MjM6NTMgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTEsMTggKzExLDE5IEBACiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUE09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTY3LDIyICs2OCwyMSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldApAQCAtMTA4LDYgKzEwOCw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTc1LDEyICsxNzYsMTMgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCkBAIC0yMTIsNyArMjE0LDYgQEAKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0yMjExMDAwMAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CkBAIC0yNTcsNiArMjU4LDcgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI5Miw2ICsyOTQsOCBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtMzA0LDEwICszMDgsNiBAQAogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfQVBNX0VNVUxBVElPTj15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKIAogIwpAQCAtNDQ2LDcgKzQ0Niw2IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNTIyLDYgKzUyMSw4IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTU0Niw2ICs1NDcsNyBAQAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtNTY4LDYgKzU3MCw3IEBACiBDT05GSUdfRkJfSElUPXkKIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQz15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKICMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKQEAgLTYzMCwxMiArNjMzLDE1IEBACiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC02NDQsNiArNjUwLDcgQEAKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNjUyLDEwICs2NTksMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CkBAIC02ODcsNiArNjk1LDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CkBAIC03NzQsNiArNzgzLDExIEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldApAQCAtNzg0LDE0ICs3OTgsMTkgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19STkc9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC04NjMsMTMgKzg4MiwxNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKaW5kZXggOTljYzM5Yy4uYjgyZGZiNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgotIyBXZWQgSnVsIDMwIDAxOjM1OjA3IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE4OjI1OjUxIDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTExLDE3ICsxMSwxOCBAQAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC02OCwyMiArNjksMjIgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldApAQCAtMTE1LDYgKzExNiw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xODIsMTIgKzE4NCwxMyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KQEAgLTIyNSw3ICsyMjgsNiBAQAogQ09ORklHX1NIX1RNVT15CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKQEAgLTI2MSw2ICsyNjMsNyBAQAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTMwOSwxMSArMzEyLDkgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTM2MCw3ICszNjEsNiBAQAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CkBAIC0zNzQsMTAgKzM3NCwxMiBAQAogIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCisjIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszODgsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogQ09ORklHX0xMQz1tCkBAIC00MDgsMTEgKzQxMSwxMCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC00NjIsMjIgKzQ2NCwyMCBAQAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKICMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQogQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERVNDU0k9eQogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAogQ09ORklHX0lERV9QUk9DX0ZTPXkKQEAgLTY0MCw2ICs2NDAsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTY2MCw2ICs2NjMsNyBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02ODAsOSArNjg0LDExIEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKQEAgLTY5Miw2ICs2OTgsNyBAQAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKQEAgLTcyNyw3ICs3MzQsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKQEAgLTgzOCw2ICs4NDUsOCBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC04NjEsMTAgKzg3MCwxMiBAQAogQ09ORklHX1ZJREVPX1Y0TDE9bQogQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CiAjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fQ1BJQTIgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CiBDT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKICMgQ09ORklHX1VTQl9WSURFT19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0EgaXMgbm90IHNldApAQCAtODg0LDE0ICs4OTUsMTMgQEAKICMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSBpcyBub3Qgc2V0CiBDT05GSUdfUkFESU9fQURBUFRFUlM9eQogIyBDT05GSUdfUkFESU9fR0VNVEVLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQURJT19NQVhJUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfUkFESU9fTUFFU1RSTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0RTQlI9bQogIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwpAQCAtOTE0LDYgKzkyNCw3IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQpAQCAtOTI1LDggKzkzNiw3IEBACiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAogCiAjCkBAIC05MzQsNiArOTQ0LDM0IEBACiAjCiAjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9bQorQ09ORklHX0hJRF9BUFBMRT1tCitDT05GSUdfSElEX0JFTEtJTj1tCitDT05GSUdfSElEX0JSSUdIVD1tCitDT05GSUdfSElEX0NIRVJSWT1tCitDT05GSUdfSElEX0NISUNPTlk9bQorQ09ORklHX0hJRF9DWVBSRVNTPW0KK0NPTkZJR19ISURfREVMTD1tCitDT05GSUdfSElEX0VaS0VZPW0KK0NPTkZJR19ISURfR1lSQVRJT049bQorQ09ORklHX0hJRF9MT0dJVEVDSD1tCisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9bQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD1tCitDT05GSUdfSElEX1NBTVNVTkc9bQorQ09ORklHX0hJRF9TT05ZPW0KK0NPTkZJR19ISURfU1VOUExVUz1tCitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTk1MSw2ICs5ODksNyBAQAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtOTc1LDYgKzEwMTQsNyBAQAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BSSU5URVI9bQogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC0xMDA0LDcgKzEwNDQsNiBAQAogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTEwNTksNyArMTA5OCw3IEBACiBDT05GSUdfVVNCX0VNSTYyPW0KIENPTkZJR19VU0JfRU1JMjY9bQogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtMTA3OCw2ICsxMTE3LDcgQEAKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTA4Nyw2ICsxMTI3LDcgQEAKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEwOTgsNyArMTEzOSw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKIENPTkZJR19SRUlTRVJGU19GUz15CkBAIC0xMTA3LDYgKzExNDgsNyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTQzLDYgKzExODUsNyBAQAogQ09ORklHX1BST0NfRlM9eQogIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTExODUsNiArMTIyOCw3IEBACiBDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCkBAIC0xMjU2LDYgKzEzMDAsMTEgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldApAQCAtMTI2NywxMiArMTMxNiwxNCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTEzNDUsNiArMTM5NiwxMSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIApAQCAtMTM1Miw3ICsxNDA4LDYgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCmluZGV4IGFlY2RmZDMuLmMzZWNlZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYKLSMgV2VkIEp1bCAzMCAwMTozOTo0MSAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKKyMgV2VkIE9jdCAyMiAxODoyOTo0MiAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xMSwxNyArMTEsMTggQEAKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNjgsMjIgKzY5LDIyIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKQEAgLTExNSw2ICsxMTYsNyBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKIENPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTgyLDEyICsxODQsMTMgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCkBAIC0yMjUsNyArMjI4LDYgQEAKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT00MDAwMDAwMAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CkBAIC0yNjEsNiArMjYzLDcgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0zMDksMTEgKzMxMiw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zNjAsNyArMzYxLDYgQEAKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzc0LDEwICszNzQsMTIgQEAKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszODgsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MDYsMTEgKzQwOSwxMCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC02MzEsNiArNjMzLDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC02NTUsNiArNjYwLDcgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjc1LDkgKzY4MSwxMSBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CkBAIC02ODcsNiArNjk1LDcgQEAKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCkBAIC04MzIsNiArODQxLDggQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODcyLDYgKzg4MywxMiBAQAogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtODgxLDYgKzg5OCwxMCBAQAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIAogIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTExLDEyICs5MzIsMTUgQEAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTkyNSw2ICs5NDksNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTkzNiwxMiArOTYxLDEzIEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTc0LDYgKzEwMDAsNyBAQAogQ09ORklHX1BST0NfRlM9eQogIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTEwNzEsNiArMTA5OCwxMSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CkBAIC0xMDgyLDEyICsxMTE0LDE0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldApAQCAtMTE2MCw2ICsxMTk0LDExIEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogCkBAIC0xMTY3LDcgKzEyMDYsNiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCmluZGV4IGEzYTgwZjMuLjQ5OWVkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2Ci0jIFdlZCBKdWwgMzAgMDE6NDE6MDggMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTg6MzI6MjMgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTEsMTYgKzExLDE3IEBACiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC01NSw3ICs1Niw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC03MiwyMiArNzIsMjIgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldApAQCAtMTE5LDYgKzExOSw3IEBACiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE4NiwxMiArMTg3LDEzIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjI5LDcgKzIzMSw2IEBACiBDT05GSUdfU0hfVE1VPXkKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MjQwMDAwMDAKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMjY4LDYgKzI2OSw3IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0yOTEsMTEgKzI5Myw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zNDAsNiArMzQwLDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzYwLDExICszNjEsMTAgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldApAQCAtNTEzLDYgKzUxMyw5IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldApAQCAtNTYwLDExICs1NjMsMTMgQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldApAQCAtNjQxLDYgKzY0Niw4IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTcwMywxMiArNzEwLDE1IEBACiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC03MTcsNiArNzI3LDcgQEAKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNzI2LDExICs3MzcsMTIgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTc1OSw2ICs3NzEsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC04MDYsNiArODE5LDcgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODk5LDEwICs5MTMsMjIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQpAQCAtOTM4LDYgKzk2NCw3IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIApAQCAtOTQ1LDcgKzk3Miw2IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAogQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDMTY9bQogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZwppbmRleCBlNGI5MDBlLi5iOGFkYThjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYKLSMgV2VkIEp1bCAzMCAwMTo0NzoxNiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKKyMgV2VkIE9jdCAyMiAxODozNzo0MSAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xMSwxNiArMTEsMTcgQEAKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNjksMjIgKzcwLDIxIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CkBAIC0xMTAsNiArMTEwLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE4MywxMiArMTg0LDEzIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjIxLDcgKzIyMyw2IEBACiBDT05GSUdfU0hfVE1VPXkKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NjYwMDAwMDAKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMjYwLDYgKzI2MSw3IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CkBAIC0yODcsMTEgKzI4OSw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zNDAsNiArMzQwLDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzYwLDExICszNjEsMTAgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldApAQCAtNDAyLDE5ICs0MDIsMTcgQEAKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz0xCi1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQogQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19JREVfUFJPQ19GUz15CiAKQEAgLTQ1MSw2ICs0NDksOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQpAQCAtNTQyLDYgKzU0Myw4IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTU4MSw2ICs1ODQsMTAgQEAKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiAKICMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKKworIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTU5MSw2ICs1OTgsNyBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNjAyLDEyICs2MTAsMTMgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CkBAIC02NDAsNiArNjQ5LDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNjc4LDYgKzY4OCw3IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTc0OCw2ICs3NTksMTEgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CkBAIC03NTgsMTQgKzc3NCwxOSBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTgzNywxMyArODU4LDE3IEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKaW5kZXggNGY4YjE5Ny4uNjI0YzQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAotIyBUdWUgQXVnIDI2IDE0OjE4OjE3IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBUdWUgT2N0IDIxIDEyOjU3OjI4IDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDEyICsxMywxMyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKQEAgLTcwLDcgKzcxLDkgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtNzgsMTUgKzgxLDEyIEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTE4LDYgKzExOCw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNzksNiArMTgwLDcgQEAKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKQEAgLTE5MiwxMyArMTk0LDE0IEBACiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KQEAgLTIzNSw3ICsyMzgsNiBAQAogQ09ORklHX1NIX1RNVT15CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKQEAgLTI5NSw2ICsyOTcsOCBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNDUsNiArMzQ5LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzY1LDExICszNzAsMTAgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CkBAIC01NTUsNiArNTU5LDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CkBAIC01OTksNiArNjA2LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CkBAIC02NTYsNiArNjY0LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzA5LDYgKzcxOCw4IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTcxNywxMyArNzI4LDQ0IEBACiAjCiAjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX0RFVj15CitDT05GSUdfVklERU9fVjRMMl9DT01NT049eQorIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX01FRElBPXkKIAogIwogIyBNdWx0aW1lZGlhIGRyaXZlcnMKICMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9eQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9eQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9eQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9eQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9eQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9eQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15CitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQorQ09ORklHX1ZJREVPX1Y0TDI9eQorQ09ORklHX1ZJREVPQlVGX0dFTj15CitDT05GSUdfVklERU9CVUZfRE1BX0NPTlRJRz15CitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQT15CisjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STT15CitDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVT15CisjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC03NDgsNiArNzkwLDEyIEBACiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKQEAgLTc1NSw3ICs4MDMsNiBAQAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY0LDIxICs4MTEsMjMgQEAKIENPTkZJR19VU0JfR0FER0VUPXkKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKIENPTkZJR19VU0JfTTY2NTkyPXkKIENPTkZJR19TVVBFUkhfQlVJTFRfSU5fTTY2NTkyPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldApAQCAtODMxLDEyICs4ODAsMTUgQEAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTg0OCwxNiArOTAwLDE5IEBACiAjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CiBDT05GSUdfVUlPX1BEUlZfR0VOSVJRPXkKICMgQ09ORklHX1VJT19TTVggaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NFUkNPUzMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04ODYsNiArOTQxLDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtOTM4LDYgKzk5NCwxMSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CkBAIC05NTAsMTIgKzEwMTEsMTQgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC0xMDI4LDEzICsxMDkxLDE3IEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwppbmRleCA1N2EzMDA3Li4yZTY1MTQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2Ci0jIFdlZCBKdWwgMzAgMDE6NTE6MTMgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMjA6MDM6NDYgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTEsMTcgKzExLDE4IEBACiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTc3LDcgKzc4LDkgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtODUsMTUgKzg4LDEzIEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMjQsNiArMTI1LDcgQEAKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKIENPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTk5LDEyICsyMDEsMTMgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCkBAIC0yNDIsNyArMjQ1LDYgQEAKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0yOAogQ09ORklHX1NIX1BDTEtfRlJFUT0zMjAwMDAwMAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CkBAIC0yNzgsNiArMjgwLDcgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CkBAIC0zMDksMTEgKzMxMiw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zNjksNiArMzcwLDcgQEAKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiBDT05GSUdfU1RQPW0KIENPTkZJR19CUklER0U9bQorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTExDPW0KQEAgLTM5MCwxMSArMzkyLDEwIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldApAQCAtNjE2LDYgKzYxNyw5IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKIENPTkZJR19QQ05FVDMyPW0KICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTY0MSwxMSArNjQ1LDExIEBACiBDT05GSUdfVklBX1JISU5FPW0KIENPTkZJR19WSUFfUkhJTkVfTU1JTz15CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD1tCi0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CkBAIC02NjIsOSArNjY2LDExIEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKQEAgLTY3NCw2ICs2ODAsNyBAQAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKQEAgLTc3MywyNCArNzgwLDEyOSBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0hJR0hMQU5ERVI9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldApAQCAtODEwLDYgKzkyMiw5IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTg0MSwxMiArOTU2LDE5IEBACiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX1BSSU1FPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC04NTYsNiArOTc4LDEwIEBACiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC04ODAsMTggKzEwMDYsMzcgQEAKICMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlM1QzM3Mj15CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTkwMCw2ICsxMDQ1LDcgQEAKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTExLDEzICsxMDU3LDE0IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CkBAIC05NTIsNiArMTA5OSw3IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTk5NCw2ICsxMTQyLDcgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA4OCwxMCArMTIzNywyMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldApAQCAtMTEwOCwxNSArMTI2OSwxOSBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTExODksNiArMTM1NCwxMSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIApAQCAtMTE5Niw3ICsxMzY2LDYgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCmluZGV4IDFkMDlkMjQuLjA0M2E4YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYKLSMgV2VkIEp1bCAzMCAwMDo1OToxOSAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKKyMgV2VkIE9jdCAyMiAxNjoyNTozMCAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xMSwxOCArMTEsMTkgQEAKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTM4LDExICszOSwxMyBAQAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVD15CitDT05GSUdfQVVESVRTWVNDQUxMPXkKK0NPTkZJR19BVURJVF9UUkVFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNjcsMzEgKzcwLDMzIEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci0jIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfS1BST0JFUz15CitDT05GSUdfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQpAQCAtMTIwLDcgKzEyNSw4IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE4Miw2ICsxODgsNyBAQAogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldApAQCAtMjAwLDEzICsyMDcsMTUgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCkBAIC0yNDMsMTUgKzI1MiwzMCBAQAogQ09ORklHX1NIX1RNVT15CiBDT05GSUdfU0hfVElNRVJfSVJRPTI4CiBDT05GSUdfU0hfUENMS19GUkVRPTUwMDAwMDAwCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwogIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9DUFVfRlJFUT15CiAKICMKICMgRE1BIHN1cHBvcnQKQEAgLTI3NiwxMyArMzAwLDE1IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1JDVV9UUkFDRT15CiBDT05GSUdfR1VTQT15CiAKICMKQEAgLTMwMSw3ICszMjcsNyBAQAogQ09ORklHX1BDSV9BVVRPPXkKIENPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CkBAIC0zMTAsMTEgKzMzNiw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzcwLDYgKzM5NCw3IEBACiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCiBDT05GSUdfQlJJREdFPW0KKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogQ09ORklHX0xMQz1tCkBAIC0zODYsMTYgKzQxMSwxNiBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldApAQCAtNjE3LDggKzY0MiwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02MzksOSArNjY4LDExIEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKQEAgLTY1MSw2ICs2ODIsNyBAQAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKQEAgLTc1MCwyNCArNzgyLDEyOSBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0hJR0hMQU5ERVI9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldApAQCAtNzg3LDYgKzkyNCw5IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTgxMyw2ICs5NTMsNyBAQAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCkBAIC04NDYsNiArOTg3LDcgQEAKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC04NTcsNiArOTk5LDcgQEAKICMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAogQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTg2NSwxMiArMTAwOCwxOSBAQAogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX1BSSU1FPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC04ODAsNiArMTAzMCwxMCBAQAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIAogIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTA0LDE4ICsxMDU4LDM3IEBACiAjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1JTNUMzNzI9eQorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC05MjQsNiArMTA5Nyw3IEBACiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTkzNSwxMyArMTEwOSwxNCBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTc2LDYgKzExNTEsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMDE4LDYgKzExOTQsNyBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDk0LDYgKzEyNzEsOCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKQEAgLTExMTMsMTAgKzEyOTIsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CkBAIC0xMTMzLDE1ICsxMzI1LDE5IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fUk5HPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldApAQCAtMTIxNCw2ICsxNDEwLDExIEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogCkBAIC0xMjIxLDcgKzE0MjIsNiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15CkBAIC0xMjI5LDYgKzE0MjksOCBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9HRU5FUklDPXkKK0NPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZwppbmRleCA4NDBmZTM4Li44NWIwYWM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYKLSMgTW9uIEp1bCAyOCAyMjoyMzowMyAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKKyMgVHVlIE9jdCAyMSAxMjo1ODo0NyAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNTYsNyArNTgsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNzIsNyArNzMsOSBAQAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CkBAIC04MCwxNCArODMsMTIgQEAKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfVElOWV9TSE1FTT15CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMTcsNiArMTE4LDcgQEAKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKIENPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTgzLDEwICsxODUsMTAgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiAKQEAgLTIxOSw3ICsyMjEsNiBAQAogQ09ORklHX1NIX1RJTUVSX0lSUT0xNDIKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MTY2NzA4MDAKIENPTkZJR19TSF9DTEtfTUQ9MAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTI2Niw2ICsyNjcsNyBAQAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMjkyLDExICsyOTQsOCBAQAogQ09ORklHX0JJTkZNVF9GTEFUPXkKIENPTkZJR19CSU5GTVRfWkZMQVQ9eQogQ09ORklHX0JJTkZNVF9TSEFSRURfRkxBVD15CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zMzksNiArMzM4LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzU5LDExICszNTksMTAgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldApAQCAtNDQyLDcgKzQ0MSw2IEBACiBDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCiBDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAogQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00Ci0jIENPTkZJR19NVERfVUNMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUwOSw2ICs1MDcsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKQEAgLTU0MSw3ICs1NDIsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKQEAgLTYxNSw2ICs2MTYsOCBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC02NTUsOSArNjU4LDM2IEBACiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9CUklHSFQ9eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RFTEw9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKQEAgLTY3NSw2ICs3MDUsNyBAQAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtNjkxLDYgKzcyMiw3IEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNzA1LDcgKzczNyw2IEBACiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTcxOCw3ICs3NDksNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC03MzUsNiArNzY2LDcgQEAKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtNzYyLDEyICs3OTQsMTUgQEAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTc3NiwxNiArODExLDE4IEBACiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTg0Nyw2ICs4ODQsNyBAQAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05MDUsMTAgKzk0MywyMSBAQAogQ09ORklHX0RFQlVHX0xJU1Q9eQogQ09ORklHX0RFQlVHX1NHPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKQEAgLTkyNCw2ICs5NzMsNyBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKQEAgLTkzMSw3ICs5ODEsNiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCmluZGV4IDg0MTMyMzYuLjdkMmE5ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgotIyBXZWQgSnVsIDMwIDAxOjU1OjUyIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE4OjQ0OjM2IDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTExLDE3ICsxMSwxOCBAQAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCkBAIC02OSw3ICs3MCw5IEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTc3LDE1ICs4MCwxMyBAQAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldApAQCAtMTE2LDYgKzExNyw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xODMsMTIgKzE4NSwxMyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KQEAgLTIzMiw3ICsyMzUsNiBAQAogQ09ORklHX1NIX1RNVT15CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTYwMDAwMDAwCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKQEAgLTI2OCw2ICsyNzAsNyBAQAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMzAyLDExICszMDUsOSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzUzLDYgKzM1NCw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM3MywxMSArMzc1LDEwIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldApAQCAtNTk4LDYgKzU5OSw5IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldApAQCAtNjIyLDYgKzYyNiw3IEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY0Miw5ICs2NDcsMTEgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldApAQCAtNjU0LDYgKzY2MSw3IEBACiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIApAQCAtNjg4LDcgKzY5Niw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwpAQCAtNzc2LDExICs3ODQsMTMgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKQEAgLTgwOCw2ICs4MTgsOCBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogQ09ORklHX01GRF9TTTUwMT15CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODM1LDYgKzg0Nyw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTg2OCw2ICs4ODEsNyBAQAogIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKQEAgLTg4MCw2ICs4OTQsNyBAQAogQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KIENPTkZJR19GQl9TTTUwMT15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MDUsNiArOTIwLDcgQEAKICMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KQEAgLTEwMDUsOSArMTAyMSwzNiBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQlJJR0hUPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9ERUxMPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19USFJVU1RNQVNURVJfRkY9bQorQ09ORklHX1pFUk9QTFVTX0ZGPW0KIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTAyNSw2ICsxMDY4LDcgQEAKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtMTA0Nyw2ICsxMDkxLDcgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC0xMDc2LDcgKzExMjEsNiBAQAogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHBvcnQgZHJpdmVycwpAQCAtMTA4OSw3ICsxMTMzLDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtMTEwNSw2ICsxMTQ5LDcgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTExMzQsMTYgKzExNzksMjAgQEAKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SOTcwMT15CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xMTUyLDYgKzEyMDEsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTExNjAsMTAgKzEyMTAsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTk2LDYgKzEyNDcsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMjkzLDYgKzEzNDUsMTEgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQpAQCAtMTMwNSwxMiArMTM2MiwxNCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTEzODMsNiArMTQ0MiwxMSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIApAQCAtMTM5MCw3ICsxNDU0LDYgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKaW5kZXggN2Q5ZmE2ZS4uZjY4MGQzZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2Ci0jIFdlZCBKdWwgMzAgMDE6NTk6MTggMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTg6NDc6MzkgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTEsMTcgKzExLDE4IEBACiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTY5LDcgKzcwLDkgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtNzcsMTUgKzgwLDEzIEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CkBAIC0xMTYsNiArMTE3LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE4MywxMiArMTg1LDEzIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjMyLDcgKzIzNSw2IEBACiBDT05GSUdfU0hfVE1VPXkKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NjAwMDAwMDAKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMjY4LDYgKzI3MCw3IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0zMDIsMTEgKzMwNSw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zNTMsNiArMzU0LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzczLDExICszNzUsMTAgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CkBAIC01OTgsNiArNTk5LDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC02MjIsNiArNjI2LDcgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjQyLDkgKzY0NywxMSBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CkBAIC02NTQsNiArNjYxLDcgQEAKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCkBAIC02ODgsNyArNjk2LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCkBAIC03NzYsMTEgKzc4NCwxMyBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldApAQCAtODA4LDYgKzgxOCw4IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC04MzUsNiArODQ3LDcgQEAKIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtODY4LDYgKzg4MSw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtODgwLDYgKzg5NCw3IEBACiBDT05GSUdfRkJfU0hfTU9CSUxFX0xDREM9bQogQ09ORklHX0ZCX1NNNTAxPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTkwNSw2ICs5MjAsNyBAQAogIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTAwNSw5ICsxMDIxLDM2IEBACiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9CUklHSFQ9eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RFTEw9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMDI1LDYgKzEwNjgsNyBAQAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCkBAIC0xMDQ3LDYgKzEwOTEsNyBAQAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTEwNzYsNyArMTEyMSw2IEBACiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC0xMDg5LDcgKzExMzMsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMTA1LDYgKzExNDksNyBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTEzNCwxNiArMTE3OSwyMCBAQAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1I5NzAxPXkKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTExNTIsNiArMTIwMSw3IEBACiAjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTE2MCwxMCArMTIxMCwxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKQEAgLTExOTYsNiArMTI0Nyw3IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTEyOTMsNiArMTM0NSwxMSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CkBAIC0xMzA1LDEyICsxMzYyLDE0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldApAQCAtMTM4Myw2ICsxNDQyLDExIEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogCkBAIC0xMzkwLDcgKzE0NTQsNiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfcWVtdV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfcWVtdV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4ZjYzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19xZW11X2RlZmNvbmZpZwpAQCAtMCwwICsxLDk0OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTg6NTE6MjAgMjAwOAorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9SVFM3NzUxUjJEPXkKKyMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEJPWF9SRTIgaXMgbm90IHNldAorCisjCisjIFJUUzc3NTFSMkQgQm9hcmQgUmV2aXNpb24KKyMKK0NPTkZJR19SVFM3NzUxUjJEX1BMVVM9eQorIyBDT05GSUdfUlRTNzc1MVIyRF8xIGlzIG5vdCBzZXQKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTE2CitDT05GSUdfU0hfUENMS19GUkVRPTYwMDAwMDAwCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVQgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTEKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9CSVRCQU5HPXkKKyMgQ09ORklHX1NQSV9TSF9TQ0kgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU05EPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9TUEk9eQorQ09ORklHX1NORF9TVVBFUkg9eQorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfUFJJTUU9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUjk3MDE9eQorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0dEQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfVDEwRElGPXkKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCmluZGV4IDZkODM0ZjIuLjU0MzI4N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYKLSMgV2VkIEp1bCAzMCAwMjowMDoxMiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKKyMgV2VkIE9jdCAyMiAxODo1MzoyMiAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xMSwxNyArMTEsMTggQEAKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNTYsNyArNTcsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNzMsNyArNzMsOSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQpAQCAtODEsMTUgKzgzLDEzIEBACiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CkBAIC0xMjEsNiArMTIxLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE5NiwxMiArMTk3LDEzIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KQEAgLTI3Myw5ICsyNzUsMTAgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfSFJUSUNLPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQpAQCAtMzI4LDExICszMzEsOSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtNDA2LDYgKzQwNyw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQyNCw2ICs0MjYsNyBAQAogIyBDT05GSUdfTkVUX1NDSF9IVEIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9IRlNDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfUFJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX01VTFRJUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX1NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX1RFUUwgaXMgbm90IHNldApAQCAtNDU2LDExICs0NTksMTAgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldApAQCAtNTEwLDIxICs1MTIsMTkgQEAKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci1DT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQogQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfSURFX1BST0NfRlM9eQpAQCAtNzQ4LDkgKzc0OCwxMyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTc5MCw3ICs3OTQsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKQEAgLTgyNSw2ICs4MjksNyBAQAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTIzLDYgKzkyOCw4IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTk0OSw2ICs5NTYsNyBAQAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCkBAIC05ODIsNiArOTkwLDcgQEAKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC05OTMsNiArMTAwMiw3IEBACiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMDIyLDYgKzEwMzIsNyBAQAogQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2PXkKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQpAQCAtMTAzMyw5ICsxMDQ0LDM2IEBACiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9CUklHSFQ9eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RFTEw9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMDUzLDYgKzEwOTEsNyBAQAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtMTA3NCw2ICsxMTEzLDcgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogQ09ORklHX1VTQl9QUklOVEVSPXkKICMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtMTEwMyw3ICsxMTQzLDYgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC0xMTE3LDcgKzExNTYsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMTM1LDYgKzExNzQsNyBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMTU1LDYgKzExOTUsNyBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTExNjgsMTIgKzEyMDksMTMgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMTEsNiArMTI1Myw3IEBACiBDT05GSUdfUFJPQ19GUz15CiAjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKQEAgLTEyNTIsNiArMTI5NSw3IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEzNDksMTAgKzEzOTMsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CkBAIC0xMzY5LDEyICsxNDI2LDE0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTQ0OCw2ICsxNTA3LDExIEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogCkBAIC0xNDU1LDcgKzE1MTksNiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCmluZGV4IGFmMTVjYmUuLjI1NzE3ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2Ci0jIFdlZCBKdWwgMzAgMDI6MDY6MDcgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTg6NTc6MzkgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTEsMTYgKzExLDE3IEBACiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00NSw2ICs0Niw3IEBACiBDT05GSUdfQ0dST1VQUz15CiBDT05GSUdfQ0dST1VQX0RFQlVHPXkKIENPTkZJR19DR1JPVVBfTlM9eQorIyBDT05GSUdfQ0dST1VQX0ZSRUVaRVIgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUF9ERVZJQ0U9eQogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKQEAgLTgwLDcgKzgyLDkgQEAKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQpAQCAtODgsMTQgKzkyLDEyIEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX1RJTllfU0hNRU09eQogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTI2LDYgKzEyOCw3IEBACiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCiAjIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTkyLDEwICsxOTUsMTAgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiAKQEAgLTIyOCw3ICsyMzEsNiBAQAogQ09ORklHX1NIX1RJTUVSX0lSUT0xNDAKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19TSF9DTEtfTUQ9NgotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTI3NSw2ICsyNzcsNyBAQAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKQEAgLTMwNywxMSArMzEwLDggQEAKIENPTkZJR19CSU5GTVRfRkxBVD15CiBDT05GSUdfQklORk1UX1pGTEFUPXkKIENPTkZJR19CSU5GTVRfU0hBUkVEX0ZMQVQ9eQorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTM2MSw2ICszNjEsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zODEsMTEgKzM4MiwxMCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC00NjEsNyArNDYxLDYgQEAKIENPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDIwMDAwMDAwCiBDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDEwMDAwMDAKIENPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAotIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MzEsNiArNTMwLDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CkBAIC02MDksNiArNjExLDggQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNjY2LDEyICs2NzAsMTUgQEAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTY4MCw2ICs2ODcsNyBAQAogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC02ODcsMTAgKzY5NSwxMSBAQAogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzU1LDYgKzc2NCw3IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTgxMSwxMCArODIxLDE5IEBACiBDT05GSUdfREVCVUdfTElTVD15CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKQEAgLTgyOCwxMiArODQ3LDE0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTA3LDEzICs5MjgsMTcgQEAKICMKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX0xaTz15CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCmluZGV4IDRlMzBiNzAuLjA3NWY0MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2Ci0jIFdlZCBKdWwgMzAgMDI6MDg6MzggMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6MDA6MjEgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTEsMTYgKzExLDE3IEBACiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTcxLDIyICs3MiwyMiBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfVElOWV9TSE1FTT15CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMTcsNiArMTE4LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKIENPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTg2LDEyICsxODgsMTMgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCkBAIC0yMjUsNyArMjI4LDYgQEAKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0yNzAwMDAwMAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CkBAIC0yNjEsNiArMjYzLDcgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI4NCwxMSArMjg3LDkgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTMzNCw2ICszMzUsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNTQsMTEgKzM1NiwxMCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC01MjksNiArNTMwLDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKQEAgLTYzMiw2ICs2MzYsOCBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC02NTUsMTEgKzY2MSwxMSBAQAogQ09ORklHX1ZJREVPX1Y0TDE9eQogQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CiAjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKIENPTkZJR19SQURJT19BREFQVEVSUz15CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCkBAIC02NzEsNiArNjc3LDcgQEAKIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KQEAgLTY5Miw2ICs2OTksNyBAQAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTcwNiw2ICs3MTQsNyBAQAogIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTczNCw2ICs3NDMsMTIgQEAKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtNzQyLDYgKzc1Nyw3IEBACiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC03NTMsMTIgKzc2OSwxMyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzg3LDYgKzgwNCw3IEBACiBDT05GSUdfUFJPQ19GUz15CiAjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODM3LDYgKzg1NSw3IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTg2OCw2ICs4ODcsMTEgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQpAQCAtODgwLDEyICs5MDQsMTQgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC05NTgsMTMgKzk4NCwxNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKaW5kZXggODBjMWM3Mi4uZGI5Y2FjZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYKLSMgV2VkIEp1bCAzMCAwMjoxMjozMiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKKyMgV2VkIE9jdCAyMiAxOTowMzoyOSAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xMSwxNiArMTEsMTcgQEAKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTU4LDIxICs1OSwyMCBAQAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19BSU89eQogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKQEAgLTk2LDYgKzk2LDcgQEAKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKIENPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTYxLDEwICsxNjIsMTAgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiAKQEAgLTE5Niw3ICsxOTcsNiBAQAogQ09ORklHX1NIX1RJTUVSX0lSUT04NgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMTI1MDAwMAogQ09ORklHX1NIX0NMS19NRD01Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMjI4LDYgKzIyOCw3IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0yNTMsMTEgKzI1NCw4IEBACiBDT05GSUdfQklORk1UX0ZMQVQ9eQogQ09ORklHX0JJTkZNVF9aRkxBVD15CiAjIENPTkZJR19CSU5GTVRfU0hBUkVEX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiAjIENPTkZJR19ORVQgaXMgbm90IHNldAogCiAjCkBAIC0zMjgsNyArMzI2LDYgQEAKIENPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMTAwMDAwMAogQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCiAjIENPTkZJR19NVERfU09MVVRJT05FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00NTUsNiArNDUyLDggQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNDg4LDYgKzQ4NywxMiBAQAogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CkBAIC00OTcsNiArNTAyLDEwIEBACiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC01MDcsMTYgKzUxNiwxOCBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CkBAIC01ODksNiArNjAwLDExIEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldApAQCAtNTk3LDYgKzYxMyw3IEBACiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCkBAIC02MDQsNyArNjIxLDYgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCmluZGV4IDQ5MGRjYmMuLmQ4ODE5MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCkBAIC0xLDM0ICsxLDM2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEtcmM1Ci0jIFRodSBBcHIgMjYgMDk6MTY6MzEgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6MDQ6NTIgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CkBAIC0zNiwxMSArMzgsMTMgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTUzLDMyICs1Nyw0NSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05Miw1OSArMTA5LDE4IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCiAjCi1DT05GSUdfU09MVVRJT05fRU5HSU5FPXkKLUNPTkZJR19TSF9TT0xVVElPTl9FTkdJTkU9eQotIyBDT05GSUdfU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzc4MF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzM0M19TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzc3MjJfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzc3NTFfU1lTVEVNSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TQVRVUk4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfRFJFQU1DQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0gwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzEwVk9JUEdXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAotIyBDT05GSUdfU0hfSElHSExBTkRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9FRE9TSzc3MDUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAotIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0hNSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzYxOV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfTEJPWF9SRTIgaXMgbm90IHNldAotIyBDT05GSUdfU0hfVU5LTk9XTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHNlbGVjdGlvbgotIwogQ09ORklHX0NQVV9TSDM9eQotCi0jCi0jIFNILTIgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYwNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAotCi0jCi0jIFNILTJBIFByb2Nlc3NvciBTdXBwb3J0Ci0jCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKLQotIwotIyBTSC0zIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1PXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldApAQCAtMTUyLDEwICsxMjgsOCBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAotCi0jCi0jIFNILTQgUHJvY2Vzc29yIFN1cHBvcnQKLSMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTE2NCw2MyArMTM4LDYyIEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLQotIwotIyBTVDQwIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwR1gxIGlzIG5vdCBzZXQKLQotIwotIyBTSC00QSBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfUVVJQ0tMSVNUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDIwMDAwMDAKK0NPTkZJR18yOUJJVD15CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NINzcwNV9DQUNIRV8zMktCPXkKICMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAotIyBDT05GSUdfU0hfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX09DUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19DRl9FTkFCTEVSPXkKLSMgQ09ORklHX0NGX0FSRUE1IGlzIG5vdCBzZXQKLUNPTkZJR19DRl9BUkVBNj15Ci0jIENPTkZJR19DRl9BUkVBNCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZfQkFTRV9BRERSPTB4YjgwMDAwMDAKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIGZlYXR1cmVzCkBAIC0yMjgsMTggKzIwMSwyNyBAQAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX0ZQVV9FTVUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX0FEQyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQogQ09ORklHX0NQVV9IQVNfSVBSX0lSUT15CiBDT05GSUdfQ1BVX0hBU19TUl9SQj15CiAKICMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NPTFVUSU9OX0VOR0lORT15CitDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FPXkKKyMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0CisKKyMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTI1NCw3ICsyMzYsNiBAQAogIwogIyBDb21wYW5pb24gQ2hpcHMKICMKLSMgQ09ORklHX0hENjQ0NlhfU0VSSUVTIGlzIG5vdCBzZXQKIAogIwogIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycwpAQCAtMjcwLDU1ICsyNTEsNDUgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCiAjCiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKICMKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKK0NPTkZJR19DRl9FTkFCTEVSPXkKKyMgQ09ORklHX0NGX0FSRUE1IGlzIG5vdCBzZXQKK0NPTkZJR19DRl9BUkVBNj15CitDT05GSUdfQ0ZfQkFTRV9BRERSPTB4YjgwMDAwMDAKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzI2LDYgKzI5Nyw3IEBACiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMzQ3LDYgKzMxOSw3IEBACiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0zNTQsMjcgKzMyNywxNCBAQAogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM4NCwxMCArMzQ0LDYgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKIAogIwpAQCAtMzk1LDkgKzM1MSwxOSBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQwOSwyMSArMzc1LDE0IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDM2LDYgKzM5NSw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDYxLDcgKzQyMSw2IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTQ4NCw0NyArNDQzLDI5IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTUzMiw3MyArNDczLDQxIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TVE5JQz15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorQ09ORklHX05FVERFVl8xMDAwMD15CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgV2lyZWxlc3MgTEFOCiAjCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldApAQCAtNjA5LDIxICs1MTgsMTMgQEAKICMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogQ09ORklHX1NMSEM9eQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNjMxLDEzICs1MzIsMTMgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTY0Nyw2ICs1NDgsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC02NjQsNiArNTY2LDcgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTY4MSwxNTMgKzU4NCwxMTAgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBTb3VuZAorIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCitDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTgzNiwxOCArNjk2LDE2IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtODcxLDExICs3MjksMTEgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTg5MCwzMSArNzQ4LDMzIEBACiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTIyLDQwICs3ODIsMzQgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfU0hfS0dEQiBpcyBub3Qgc2V0CkBAIC05NjQsMTEgKzgxOCw5MiBAQAogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CiAKICMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTk3NiwxMCArOTExLDE0IEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwppbmRleCA3YmU3OWNkLi44NjlhYjE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwpAQCAtMSwyNCArMSwyNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjNgotIyBXZWQgSnVuIDE4IDE2OjM2OjA4IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE5OjA4OjEyIDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC01MSw3ICs1Myw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC02OCwxNyArNjksMjIgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfVElOWV9TSE1FTT15CkBAIC04OCwxMiArOTQsMTMgQEAKICMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTA4LDYgKzExNSw3IEBACiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE2Nyw2ICsxNzUsNyBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTE3NCwxMiArMTgzLDEzIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjA3LDcgKzIxNyw2IEBACiAjCiBDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkU9eQotIyBDT05GSUdfU0hfQVAzMjVSWEEgaXMgbm90IHNldAogCiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCkBAIC0yMTUsNyArMjI0LDYgQEAKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT02NjY2NjY2NgotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CkBAIC0yNTEsNiArMjU5LDcgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI3OSwxMSArMjg4LDkgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTI5Nyw2ICszMDQsNyBAQAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPXkKIENPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zNDEsNiArMzQ5LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzU5LDcgKzM2OCw3IEBACiBDT05GSUdfTkVUX1NDSF9IVEI9eQogQ09ORklHX05FVF9TQ0hfSEZTQz15CiBDT05GSUdfTkVUX1NDSF9QUklPPXkKLSMgQ09ORklHX05FVF9TQ0hfUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9NVUxUSVEgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hfUkVEPXkKIENPTkZJR19ORVRfU0NIX1NGUT15CiBDT05GSUdfTkVUX1NDSF9URVFMPXkKQEAgLTM5NSwxMiArNDA0LDExIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKLQotIwotIyBXaXJlbGVzcwotIworQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNiw4IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTUwNCw2ICs1MTQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldApAQCAtNTUwLDYgKzU2MSw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC01NTgsNyArNTcwLDYgQEAKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTkzLDkgKzYwNCwxMSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogCiAjCkBAIC02NTcsNiArNjcwLDcgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC02NjgsOCArNjgyLDExIEBACiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNjk5LDEwICs3MTYsNiBAQAogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtNzEzLDYgKzcyNiwxMCBAQAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIAogIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtNzM0LDcgKzc1MSw5IEBACiAjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTc0OCwxMiArNzY3LDEzIEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzgyLDYgKzgwMiw3IEBACiBDT05GSUdfUFJPQ19GUz15CiAjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODEzLDYgKzgzNCw3IEBACiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC04MjIsMTIgKzg0NCwxMiBAQAogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTg3NywxMyArODk5LDI2IEBACiBDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CkBAIC04OTksMTYgKzkzNCwxOSBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTk0Nyw2ICs5ODUsMTAgQEAKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CkBAIC05NzcsMTUgKzEwMTksMjAgQEAKICMKIENPTkZJR19DUllQVE9fREVGTEFURT15CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAogQ09ORklHX0NSQ19DQ0lUVD15CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCmluZGV4IGYzZDRjYTAuLmI1MmJlMTQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwpAQCAtMSwyNCArMSwyNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNQotIyBGcmkgTWFyIDIxIDEyOjA1OjMxIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE5OjEyOjA2IDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC03MSwzMCArNzMsMzggQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfVElOWV9TSE1FTT15CiBDT05GSUdfQkFTRV9TTUFMTD0xCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwOSw2ICsxMTksNyBAQAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xMzYsNiArMTQ3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTE2NSw3ICsxNzcsOSBAQAogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTczLDExICsxODcsMTMgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCkBAIC0yMTEsNyArMjI3LDYgQEAKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CkBAIC0yNDcsNiArMjYyLDcgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI3NSwxMSArMjkxLDkgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTI5Myw2ICszMDcsNyBAQAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPXkKIENPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zMzAsOCArMzQ1LDYgQEAKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTMzOSw2ICszNTIsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNTcsNyArMzcxLDcgQEAKIENPTkZJR19ORVRfU0NIX0hUQj15CiBDT05GSUdfTkVUX1NDSF9IRlNDPXkKIENPTkZJR19ORVRfU0NIX1BSSU89eQotIyBDT05GSUdfTkVUX1NDSF9SUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX01VTFRJUSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSF9SRUQ9eQogQ09ORklHX05FVF9TQ0hfU0ZRPXkKIENPTkZJR19ORVRfU0NIX1RFUUw9eQpAQCAtMzkzLDEyICs0MDcsMTEgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19GSUJfUlVMRVM9eQotCi0jCi0jIFdpcmVsZXNzCi0jCitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTYsNiArNDI5LDggQEAKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldApAQCAtNDI2LDYgKzQ0MSw3IEBACiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTUwMiw2ICs1MTgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldApAQCAtNTQ2LDEzICs1NjMsMTUgQEAKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NjEsNyArNTgwLDYgQEAKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwpAQCAtNTY5LDYgKzU4Nyw3IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNTkxLDcgKzYxMCw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIwLDYgKzYzOSw3IEBACiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC02MzYsNiArNjU2LDcgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTY1OSwxMiArNjgwLDcgQEAKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNjgwLDEzICs2OTYsMjYgQEAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC03MDEsMTAgKzczMCw2IEBACiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKQEAgLTcxNSw5ICs3NDAsMzYgQEAKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0JSSUdIVD15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfREVMTD15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTczMywxMSArNzg1LDE2IEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtNzUwLDYgKzgwNyw4IEBACiAjCiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNzcxLDYgKzgzMCw3IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCkBAIC03NzgsNyArODM4LDYgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC03OTEsNyArODUwLDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtODA2LDYgKzg2NSw4IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtODIyLDEyICs4ODMsMTIgQEAKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTg0MSwxNCArOTAyLDE0IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKQEAgLTg3OSw2ICs5NDAsNyBAQAogQ09ORklHX1BST0NfRlM9eQogIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTkxMCw2ICs5NzIsNyBAQAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtOTcxLDYgKzEwMzQsNyBAQAogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQEAgLTk4MSw2ICsxMDQ1LDcgQEAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC05OTQsMTMgKzEwNTksMjcgQEAKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CkBAIC0xMDE2LDU1ICsxMDk1LDk2IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKICMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKIAogIwpAQCAtMTA3Myw2ICsxMTkzLDcgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZwppbmRleCA4ZTZhNmJhLi5lNmRmNTFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZwpAQCAtMSw1MyArMSw1NiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIyLXJjNAotIyBXZWQgSnVuIDIwIDE4OjA4OjA0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE5OjE1OjEwIDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTYxLDYgKzY0LDcgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTY5LDMyICs3Myw0MSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTA4LDYgKzEyMSw4IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTExNyw4ICsxMzIsMTAgQEAKIENPTkZJR19DUFVfU0g0QUxfRFNQPXkKIENPTkZJR19DUFVfU0hYMj15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CkBAIC0xMjYsNiArMTQzLDggQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTEzNCwxNCArMTUzLDE3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjI9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CiAKICMKICMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucwpAQCAtMTUxLDYgKzE3Myw3IEBACiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfTlVNQT15CkBAIC0xNjEsMTQgKzE4NCwxOCBAQAogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NksgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMk1CIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTgxLDM0ICsyMDgsMzggQEAKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgZmVhdHVyZXMKICMKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9GUFUgaXMgbm90IHNldAogIyBDT05GSUdfU0hfRlBVX0VNVSBpcyBub3Qgc2V0CiBDT05GSUdfU0hfRFNQPXkKIENPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQogQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKLUNPTkZJR19DUFVfSEFTX0lOVENfSVJRPXkKIENPTkZJR19DUFVfSEFTX1NSX1JCPXkKIENPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRFNQPXkKIAogIwogIyBCb2FyZCBzdXBwb3J0CiAjCiBDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKIENPTkZJR19TSF83NzIyX1NPTFVUSU9OX0VOR0lORT15CisjIENPTkZJR19TSF9NSUdPUiBpcyBub3Qgc2V0CiAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KQEAgLTIxOSw2ICsyNTAsNyBAQAogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC0yNDgsMTkgKzI4MCwyMSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX0dVU0E9eQogCiAjCiAjIEJvb3Qgb3B0aW9ucwogIwogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCkBAIC0yNzEsMjEgKzMwNSwxNSBAQAogQ09ORklHX0NGX0FSRUE2PXkKIENPTkZJR19DRl9CQVNFX0FERFI9MHhiODAwMDAwMAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTI5OCw2ICszMjYsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTMxNiw2ICszNDUsNyBAQAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMzIzLDggKzM1Myw2IEBACiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC0zMzIsNiArMzYwLDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzQxLDEwICszNzAsNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0zNTIsMTggKzM3NywxOSBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzcyLDQ0ICszOTgsMjkgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19CTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNDE3LDYgKzQyOCw3IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CiAjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CkBAIC00NDYsNDAgKzQ1OCw0MSBAQAogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIworIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9QTEFURk9STT15Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogCkBAIC00ODgsMjIgKzUwMSwxNCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNTExLDYgKzUxNiw3IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01MjAsNyArNTI2LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC01MzQsNiArNTM5LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNTU0LDYgKzU2MCw3IEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01NzIsMTE5ICs1NzksMTA2IEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKIENPTkZJR19EQUI9eQogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCitDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtNzAxLDM4ICs2OTUsMzAgQEAKICMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0KLSMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9TSD15Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTc0NCwyMiArNzMwLDIwIEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTc4MywxMiArNzY3LDEyIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15Ci1DT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MDMsMTQgKzc4NywxNCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODE4LDQyICs4MDIsMzkgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi1DT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKLQotIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldApAQCAtODY0LDExICs4NDUsOTIgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKIAogIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODc2LDggKzkzOCwxMCBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCmluZGV4IDE2Nzc4NmYuLmE1NzcwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCkBAIC0xLDQ4ICsxLDU1IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMyCi0jIFRodSBEZWMgMjggMjM6MTU6NDkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6MTc6MjkgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtNTQsMzMgKzYxLDQ3IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05NCw2OCArMTE1LDI3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCiAjCi1DT05GSUdfU09MVVRJT05fRU5HSU5FPXkKLUNPTkZJR19TSF9TT0xVVElPTl9FTkdJTkU9eQotIyBDT05GSUdfU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzM0M19TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzc3NTFfU1lTVEVNSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9FQzMxMDQgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0FUVVJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0RSRUFNQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0hfTVBDMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TSDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0hTNzc1MVJWT0lQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzc3MTBWT0lQR1cgaXMgbm90IHNldAotIyBDT05GSUdfU0hfUlRTNzc1MVIyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9SNzc4MFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYgaXMgbm90IHNldAotIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TSE1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MjA2X1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc2VsZWN0aW9uCi0jCiBDT05GSUdfQ1BVX1NIND15Ci0KLSMKLSMgU0gtMiBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtMkEgUHJvY2Vzc29yIFN1cHBvcnQKLSMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAotCi0jCi0jIFNILTMgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKLQotIwotIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0Ci0jCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTE2NCw1OCArMTQ0LDYxIEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLQotIwotIyBTVDQwIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwR1gxIGlzIG5vdCBzZXQKLQotIwotIyBTSC00QSBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfUVVJQ0tMSVNUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDIwMDAwMDAKK0NPTkZJR18yOUJJVD15CiBDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfU0hfT0NSQU0gaXMgbm90IHNldAotQ09ORklHX0NGX0VOQUJMRVI9eQotIyBDT05GSUdfQ0ZfQVJFQTUgaXMgbm90IHNldAotQ09ORklHX0NGX0FSRUE2PXkKLUNPTkZJR19DRl9CQVNFX0FERFI9MHhiODAwMDAwMAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgZmVhdHVyZXMKQEAgLTIyMywxOSArMjA2LDI4IEBACiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1NIX0ZQVT15Ci0jIENPTkZJR19TSF9EU1AgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0lOVEVWVD15Ci1DT05GSUdfQ1BVX0hBU19JTlRDX0lSUT15CitDT05GSUdfQ1BVX0hBU19JUFJfSVJRPXkKIENPTkZJR19DUFVfSEFTX1NSX1JCPXkKIENPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKIAogIwotIyBUaW1lciBzdXBwb3J0CisjIEJvYXJkIHN1cHBvcnQKKyMKK0NPTkZJR19TT0xVVElPTl9FTkdJTkU9eQorQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORT15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTI1MCwxMiArMjQyLDExIEBACiAjCiAjIENvbXBhbmlvbiBDaGlwcwogIwotIyBDT05GSUdfSEQ2NDQ2WF9TRVJJRVMgaXMgbm90IHNldAotQ09ORklHX0hFQVJUQkVBVD15CiAKICMKICMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKICMKK0NPTkZJR19IRUFSVEJFQVQ9eQogIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAogCiAjCkBAIC0yNjYsMTEgKzI1NywxNSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwpAQCAtMjgzLDQzICsyNzgsMzIgQEAKICMKICMgQnVzIG9wdGlvbnMKICMKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKK0NPTkZJR19DRl9FTkFCTEVSPXkKKyMgQ09ORklHX0NGX0FSRUE1IGlzIG5vdCBzZXQKK0NPTkZJR19DRl9BUkVBNj15CitDT05GSUdfQ0ZfQkFTRV9BRERSPTB4YjgwMDAwMDAKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zNDIsNiArMzI2LDcgQEAKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTM0OSwyNyArMzM0LDE0IEBACiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzc5LDEwICszNTEsNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0zOTAsOSArMzU4LDE5IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDA0LDMyICszODIsMjcgQEAKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ1NSw3ICs0MjgsNiBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JPTT15CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwpAQCAtNDc4LDc1ICs0NTAsNTMgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLSMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CiAjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CkBAIC01NjgsNiArNTE4LDcgQEAKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTU3NSw5NiArNTI2LDUyIEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TVE5JQz15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorQ09ORklHX05FVERFVl8xMDAwMD15CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgV2lyZWxlc3MgTEFOCiAjCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02ODIsNiArNTg5LDcgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTcwNCwxNSArNjEyLDMwIEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MjIsMTQ4ICs2NDUsOTIgQEAKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NIX1dEVD15CiAjIENPTkZJR19TSF9XRFRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwotIyBUUE0gZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIEkyQyBzdXBwb3J0CisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtODg3LDEyICs3NTQsMTIgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC05MDgsMzEgKzc3NSwzMyBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTk0MCw3ICs4MDksNiBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTk1OCw0OSArODI2LDEyNiBAQAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0tHREIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKIAogIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTAwOCw5ICs5NTMsMTQgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15Ci1DT05GSUdfSU9NQVBfQ09QWT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKaW5kZXggYTkwOTU1OS4uZDk5YTZiZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKQEAgLTEsNDAgKzEsNTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBUdWUgT2N0ICAzIDEyOjEwOjEyIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE5OjIxOjEyIDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQpAQCAtNDcsMzMgKzYxLDQ3IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKK0NPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTg3LDYwICsxMTUsMjcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKICMKLUNPTkZJR19TT0xVVElPTl9FTkdJTkU9eQotIyBDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORT15Ci0jIENPTkZJR19TSF83MzAwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzQzX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0hQNlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0VDMzEwNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TQVRVUk4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfRFJFQU1DQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9NUEMxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NIMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfSFM3NzUxUlZPSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzcxMFZPSVBHVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1I3NzgwUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfRURPU0s3NzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NINDIwMl9NSUNST0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9MQU5ESVNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1RJVEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NITUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1VOS05PV04gaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzZWxlY3Rpb24KLSMKIENPTkZJR19DUFVfU0g0PXkKLQotIwotIyBTSC0yIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQgaXMgbm90IHNldAotCi0jCi0jIFNILTMgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKLQotIwotIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0Ci0jCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldApAQCAtMTQ5LDY1ICsxNDQsOTEgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAotCi0jCi0jIFNUNDAgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAotCi0jCi0jIFNILTRBIFByb2Nlc3NvciBTdXBwb3J0Ci0jCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAotCi0jCi0jIFNINEFMLURTUCBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKICMKK0NPTkZJR19RVUlDS0xJU1Q9eQogQ09ORklHX01NVT15CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKIENPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9PQ1JBTSBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBmZWF0dXJlcwogIwogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TSF9GUFU9eQotIyBDT05GSUdfU0hfRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUT1JFX1FVRVVFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfSVBSX0lSUT15CiBDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CiAKICMKLSMgVGltZXIgc3VwcG9ydAorIyBCb2FyZCBzdXBwb3J0CisjCitDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKK0NPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORT15CisjIENPTkZJR19TSF9TSDAzIGlzIG5vdCBzZXQKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTYwMDAwMDAwCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMjIyLDIxICsyNDMsMzAgQEAKICMKICMgQ29tcGFuaW9uIENoaXBzCiAjCi0jIENPTkZJR19IRDY0NDZYX1NFUklFUyBpcyBub3Qgc2V0CisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKIENPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBmZWF0dXJlcwogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwpAQCAtMjUwLDQzICsyODAsMjkgQEAKICMKICMgQnVzIG9wdGlvbnMKICMKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX0NGX0VOQUJMRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTMwOCw1MiArMzI0LDQyIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKIENPTkZJR19ORVRGSUxURVJfREVCVUc9eQorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPXkKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNjMsMTAgKzM2OSw2IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTM3NCw5ICszNzYsMTkgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zODgsMzIgKzQwMCwyNyBAQAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKICMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00MzksNyArNDQ2LDYgQEAKIENPTkZJR19NVERfUkFNPXkKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTQ2Miw0MyArNDY4LDI5IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNTA2LDg5ICs0OTgsNDggQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBXaXJlbGVzcyBMQU4KICMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTYwNiw2ICs1NTcsNyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIwLDE1ICs1NzIsMzAgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIworQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTYzNywxMzMgKzYwNCw3NSBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9XRFQgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIFRQTSBkZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNzcyLDE3ICs2ODEsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTgwNiwxMiArNzE1LDEyIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODI0LDI2ICs3MzMsMjcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODUxLDU3ICs3NjEsMTQ2IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiAjIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0tHREIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKIAogIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwppbmRleCAzMGY1ZWU0Li5hZDk1YjgwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwpAQCAtMSwyNiArMSwyOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMwotIyBUaHUgRmViIDI4IDEwOjE4OjA0IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE5OjI3OjMwIDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsMTEgKzQzLDggQEAKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CkBAIC02OCwyMCArNjcsMjcgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldApAQCAtOTAsNiArOTYsNyBAQAogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDQsNyArMTExLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKIENPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTE1LDYgKzEyMiw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldApAQCAtMTMyLDYgKzE0MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQpAQCAtMTUyLDcgKzE2MSw2IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCiBDT05GSUdfMjlCSVQ9eQotIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTE2MSw5ICsxNjksMTIgQEAKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0xNzEsMTEgKzE4MiwxNCBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KQEAgLTIxMCw3ICsyMjQsNiBAQAogQ09ORklHX1NIX1RNVT15CiBDT05GSUdfU0hfVElNRVJfSVJRPTI4CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKQEAgLTI0NCwxMCArMjU3LDEwIEBACiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX1RSQUNFPXkKIENPTkZJR19HVVNBPXkKIAogIwpAQCAtMjczLDExICsyODYsOSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzQ3LDExICszNTgsMTAgQEAKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKQEAgLTM3NCw2ICszODQsNyBAQAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NjEsMTEgKzQ3MiwxMyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUzNyw5ICs1NTAsMTMgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKQEAgLTU0NywxMSArNTY0LDExIEBACiAjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUw9eQotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKQEAgLTU3NSw2ICs1OTIsNyBAQAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIApAQCAtNTgzLDEyICs2MDEsMTEgQEAKICMKIAogIwotIyBBbiBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQorIyBBIG5ldyBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQogIwogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CkBAIC02MjEsMTIgKzYzOCwxNiBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldApAQCAtNjQ1LDYgKzY2Niw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CkBAIC02NTQsNiArNjc2LDcgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC02NzUsNyArNjk4LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCkBAIC03MDksOSArNzMyLDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC03MzcsMTIgKzc2Miw3IEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQpAQCAtNzU3LDYgKzc3Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC03NjgsMTMgKzc4OSwyNiBAQAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTc4NiwxNSArODIwLDE2IEBACiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPW0KK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9bQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9bQogIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQEAgLTgxOCw2ICs4NTMsNyBAQAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKQEAgLTgyNSw3ICs4NjEsMTAgQEAKICMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC04NTAsMjQgKzg4OSwxMCBAQAogIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldApAQCAtODc3LDggKzkwMiwzNiBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9CUklHSFQ9eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RFTEw9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC04OTIsMTEgKzk0NSwxNyBAQAogIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldApAQCAtOTExLDYgKzk3MCw4IEBACiAjCiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtOTIxLDE3ICs5ODIsMjUgQEAKICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC05NDMsNiArMTAxMiwxMCBAQAogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKQEAgLTk1NiwxNyArMTAyOSwxOSBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTc1LDkgKzEwNTAsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMDEwLDYgKzEwODcsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMDI1LDYgKzExMDMsNyBAQAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTAzNCw5ICsxMTEzLDggQEAKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQpAQCAtMTA5OSwxMiArMTE3NywyMCBAQAogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CkBAIC0xMTE1LDQ1ICsxMjAxLDg2IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCiAjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAKQEAgLTExNjMsNiArMTI5MCw3IEBACiBDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCmluZGV4IDlmZDVlYTcuLjk1ZjBmNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKQEAgLTEsNDEgKzEsNTYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBUdWUgT2N0ICAzIDEyOjEzOjI2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE5OjMxOjU0IDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQpAQCAtNDgsMzQgKzYzLDQ5IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODksNTkgKzExOSwyNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQogIwotIyBDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzc3NTFfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzczMDBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzczNDNfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzczMTgwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAotIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAotIyBDT05GSUdfU0hfRUMzMTA0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NBVFVSTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9EUkVBTUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0hfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAotQ09ORklHX1NIX1NIMDM9eQotIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfSFM3NzUxUlZPSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzcxMFZPSVBHVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1I3NzgwUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfRURPU0s3NzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NINDIwMl9NSUNST0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9MQU5ESVNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1RJVEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NITUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1VOS05PV04gaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzZWxlY3Rpb24KLSMKIENPTkZJR19DUFVfU0g0PXkKLQotIwotIyBTSC0yIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQgaXMgbm90IHNldAotCi0jCi0jIFNILTMgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKLQotIwotIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0Ci0jCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldApAQCAtMTUwLDY5ICsxNDgsOTAgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAotCi0jCi0jIFNUNDAgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAotCi0jCi0jIFNILTRBIFByb2Nlc3NvciBTdXBwb3J0Ci0jCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAotCi0jCi0jIFNINEFMLURTUCBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKICMKK0NPTkZJR19RVUlDS0xJU1Q9eQogQ09ORklHX01NVT15CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAorQ09ORklHXzI5QklUPXkKIENPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9PQ1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZfRU5BQkxFUj15Ci1DT05GSUdfQ0ZfQVJFQTU9eQotIyBDT05GSUdfQ0ZfQVJFQTYgaXMgbm90IHNldAotQ09ORklHX0NGX0JBU0VfQUREUj0weGI0MDAwMDAwCitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBmZWF0dXJlcwogIwogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TSF9GUFU9eQotIyBDT05GSUdfU0hfRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUT1JFX1FVRVVFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfSVBSX0lSUT15CiBDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CiAKICMKLSMgVGltZXIgc3VwcG9ydAorIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfU0hfU0gwMz15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT02MDAwMDAwMAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTIyNywyMiArMjQ2LDMxIEBACiAjCiAjIENvbXBhbmlvbiBDaGlwcwogIwotIyBDT05GSUdfSEQ2NDQ2WF9TRVJJRVMgaXMgbm90IHNldAorCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCiBDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgZmVhdHVyZXMKICMKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0yNTYsMjAgKzI4NCwxNyBAQAogIwogIyBCdXMgb3B0aW9ucwogIworQ09ORklHX0NGX0VOQUJMRVI9eQorQ09ORklHX0NGX0FSRUE1PXkKKyMgQ09ORklHX0NGX0FSRUE2IGlzIG5vdCBzZXQKK0NPTkZJR19DRl9CQVNFX0FERFI9MHhiNDAwMDAwMAogQ09ORklHX1BDST15CiBDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19QQ0lfQVVUTz15CiBDT05GSUdfUENJX0FVVE9fVVBEQVRFX1JFU09VUkNFUz15Ci0jIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwogQ09ORklHX0hPVFBMVUdfUENJPW0KICMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CkBAIC0yNzksMzAgKzMwNCwyNCBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMzIzLDMzICszNDIsMjMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzU5LDEwICszNjgsNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0zNzAsOSArMzc1LDE5IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzgxLDM0ICszOTYsMTUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CkBAIC00MjAsNDUgKzQxNiw3NiBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci1DT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPW0KK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKIENPTkZJR19CTEtfREVWX0lERVRBUEU9bQotQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNDc5LDYgKzUwNiw4IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC00ODYsMTIgKzUxNSw5IEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKQEAgLTUwMSw3ICs1MjcsNiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKQEAgLTUxMiw4OCArNTM3LDY3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIworIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldApAQCAtNjAxLDE4ICs2MDUsMjEgQEAKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKIENPTkZJR184MTM5Q1A9eQogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC02MjAsNTIgKzYyNyw0NiBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTY3Myw2ICs2NzQsNyBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjgyLDcgKzY4NCw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNjkyLDYgKzY5Myw3IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTcwNSwxMCArNzA3LDEzIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzMxLDE1ICs3MzYsMzYgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIworQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc0Nyw2ICs3NzMsNyBAQAogIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAogQ09ORklHX1NIX1dEVD1tCiAjIENPTkZJR19TSF9XRFRfTU1BUCBpcyBub3Qgc2V0CiAKQEAgLTc1NSwxNDIgKzc4Miw5MiBAQAogIwogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBUUE0gZGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi1DT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIwogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTkwNCwyMCArODgxLDE5IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTkyOCw3ICs5MDQsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9bQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTk0OCwxMiArOTIzLDEyIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtOTY4LDMxICs5NDMsMzAgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX05GU0RfVENQPXkKLUNPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMDAsNyArOTc0LDYgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC0xMDIyLDEwICs5OTUsNyBAQAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX05MUz1tCiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KQEAgLTEwNjYsODEgKzEwMzYsMTQ2IEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CiAKICMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi1DT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19STkc9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT15Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCiAjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD15CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9bQogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCmluZGV4IDM3ZTQ5YTUuLjlhNzY4YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM0Ci0jIFRodSBNYXIgIDYgMTY6MDI6MjkgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6MzU6MTggMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC03MCwzMCArNzIsMzggQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfVElOWV9TSE1FTT15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDgsNyArMTE4LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKIENPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTE4LDYgKzEyOCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldApAQCAtMTM1LDYgKzE0Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xNjQsNyArMTc2LDkgQEAKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTE3MiwxMSArMTg2LDEzIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjA5LDcgKzIyNSw2IEBACiBDT05GSUdfU0hfVE1VPXkKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MzI3NjgwMDAKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMjQ1LDEwICsyNjAsMTAgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfVFJBQ0U9eQogQ09ORklHX0dVU0E9eQogIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CiAKQEAgLTI2OSwxMSArMjg0LDkgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTMxMSwxMCArMzI0LDcgQEAKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zMjcsMTAgKzMzNywxMiBAQAogIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCisjIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzM5LDYgKzM1MSw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM1Nyw3ICszNzAsNyBAQAogIyBDT05GSUdfTkVUX1NDSF9IVEIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9IRlNDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfUFJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX1JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CkBAIC0zOTUsMTEgKzQwOCwxMCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDI5LDggQEAKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKQEAgLTQyNSw2ICs0MzksNyBAQAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC01MDAsNiArNTE1LDcgQEAKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKQEAgLTUxNiw3ICs1MzIsNiBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTI4LDE0ICs1NDMsMTggQEAKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAKICMKQEAgLTU0Myw2ICs1NjIsNyBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNTg3LDYgKzYwNyw3IEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC02MTEsMTIgKzYzMiw3IEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKQEAgLTYzMiwxMyArNjQ4LDI2IEBACiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIwogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjUzLDIwICs2ODIsMjggQEAKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02NzUsMjQgKzcxMiwyMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CkBAIC03MjAsNiArNzU2LDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKICMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC03NTEsNiArNzg4LDcgQEAKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtNzgwLDEyICs4MTgsMTkgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldApAQCAtNzk2LDUxICs4NDEsOTEgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCiAjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAKICMKQEAgLTg0OSw2ICs5MzQsNyBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKaW5kZXggYmFmODMwYy4uNmE3N2Y2OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmMyCi0jIEZyaSBBdWcgIDggMTM6NDQ6MjAgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6Mzc6MTIgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsMTEgKzEzLDEyIEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKQEAgLTc2LDcgKzc3LDkgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtODQsMTUgKzg3LDEyIEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTI0LDYgKzEyNCw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xODEsNiArMTgyLDcgQEAKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKQEAgLTE5MywxMyArMTk1LDE1IEBACiBDT05GSUdfU1BBUlNFTUVNPXkKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjMxLDcgKzIzNSw2IEBACiBDT05GSUdfU0hfVE1VPXkKIENPTkZJR19TSF9USU1FUl9JUlE9MjgKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NjY2NjY2NjYKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMjkxLDYgKzI5NCw4IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM0MSw2ICszNDYsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNjEsMTEgKzM2NywxMCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKQEAgLTU2Myw2ICs1NjgsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKQEAgLTY3NSw2ICs2ODMsOCBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC03MDAsNiArNzEwLDcgQEAKIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtNzI1LDYgKzczNiw3IEBACiAjIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU0g3NzYwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc2OCw2ICs3ODAsNyBAQAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtNzg4LDYgKzgwMSw3IEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtODE3LDcgKzgzMSw2IEBACiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIHBvcnQgZHJpdmVycwpAQCAtODMwLDcgKzg0Myw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTg0NiwxMyArODU5LDE0IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwogQ09ORklHX01NQ19CTE9DSz15CiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CkBAIC04NjAsNyArODc0LDcgQEAKICMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC04NjksNiArODgzLDcgQEAKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTg4MCwxMiArODk1LDEzIEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKQEAgLTkxOSw2ICs5MzUsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQpAQCAtOTU1LDYgKzk3Miw3IEBACiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMjUsNiArMTA0MywxMSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKQEAgLTEwMzUsMTIgKzEwNTgsMTQgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC0xMTEzLDEzICsxMTM4LDE3IEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKaW5kZXggZmY3MjY5Ny4uMDdlMzNjMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKQEAgLTEsMjcgKzEsMjkgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzgKLSMgVHVlIEp1bCAxNSAyMTozNzo1OSAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKKyMgV2VkIE9jdCAyMiAxOTo0OToyMyAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCkBAIC02MSw3ICs2Myw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTc4LDcgKzc5LDkgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtODYsMTAgKzg5LDEzIEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldApAQCAtMTA2LDYgKzExMiw3IEBACiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTIwLDYgKzEyNyw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xODEsMTAgKzE4OSwxMiBAQAogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTE5MiwxMyArMjAyLDE1IEBACiBDT05GSUdfU1BBUlNFTUVNPXkKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMjY2LDkgKzI3OCwxMCBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQpAQCAtMjk5LDExICszMTIsOSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzU4LDYgKzM2OSw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM3OCwxMiArMzkwLDEyIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CkBAIC00OTksNiArNTExLDcgQEAKICMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNTQxLDYgKzU1NCw3IEBACiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC02MTUsNyArNjI5LDYgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYyNCwxOSArNjM3LDE4IEBACiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorQ09ORklHX01JST15CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiBDT05GSUdfUjgxNjk9eQotIyBDT05GSUdfUjgxNjlfTkFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKQEAgLTY0NSw2ICs2NTcsOCBAQAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKQEAgLTY3OSw3ICs2OTMsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKQEAgLTcyMCw2ICs3MzQsNyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKQEAgLTc1NCw0NCArNzY5LDY1IEBACiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfUENBX1BMQVRGT1JNPXkKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCitDT05GSUdfSTJDX1BDQV9QTEFURk9STT15CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldApAQCAtODE2LDggKzg1MiwxMiBAQAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC04NDQsNiArODg0LDcgQEAKIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtODc3LDYgKzkxOCw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtODg1LDggKzkyNywxMSBAQAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KIENPTkZJR19GQl9TTTUwMT15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MTEsMTAgKzk1Niw2IEBACiAjIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CkBAIC05MjUsOSArOTY2LDM2IEBACiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9CUklHSFQ9eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RFTEw9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC05NDUsNiArMTAxMyw3IEBACiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCkBAIC05NjksNiArMTAzOCw3IEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtOTk4LDcgKzEwNjgsNiBAQAogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTEwMTEsNyArMTA4MCw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTEwMjksNiArMTA5OCw3IEBACiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVEVTVD1tCiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMDczLDE5ICsxMTQzLDI0IEBACiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEwOTcsMTIgKzExNzIsMTMgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEzNyw2ICsxMjEzLDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtMTE1OCw2ICsxMjM1LDcgQEAKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExNjgsMTggKzEyNDYsMTggQEAKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNTAsNiArMTMyOCw4IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldApAQCAtMTI3MCwxMyArMTM1MCwyNyBAQAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKQEAgLTEyOTIsMTUgKzEzODYsMTkgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19STkc9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC0xMzM5LDYgKzE0MzcsMTAgQEAKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKQEAgLTEzNjksMTUgKzE0NzEsMjAgQEAKICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZwppbmRleCA4ODAwZmVmLi5lMmIzOGEzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKQEAgLTEsMjcgKzEsMzQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBUdWUgT2N0ICAzIDEyOjUyOjQ5IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNworIyBXZWQgT2N0IDIyIDE5OjUyOjU5IDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldApAQCAtMjksMTEgKzM2LDE0IEBACiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CkBAIC00NCwyNyArNTQsMzggQEAKIENPTkZJR19QUklOVEs9eQogIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CitDT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9CPXkKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKLUNPTkZJR19TTE9CPXkKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC03OCw1OSArOTksMjcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQogIwotIyBDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzc3NTFfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzczMDBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzczNDNfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzczMTgwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAotIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAotIyBDT05GSUdfU0hfRUMzMTA0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NBVFVSTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9EUkVBTUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0hfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0gwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzEwVk9JUEdXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAotIyBDT05GSUdfU0hfUjc3ODBSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9FRE9TSzc3MDUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAotIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAotQ09ORklHX1NIX1NITUlOPXkKLSMgQ09ORklHX1NIX1VOS05PV04gaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzZWxlY3Rpb24KLSMKIENPTkZJR19DUFVfU0gzPXkKLQotIwotIyBTSC0yIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQgaXMgbm90IHNldAotCi0jCi0jIFNILTMgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2PXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtNCBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTEzOSw2NSArMTI4LDg3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLQotIwotIyBTVDQwIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwR1gxIGlzIG5vdCBzZXQKLQotIwotIyBTSC00QSBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKLQotIwotIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfUVVJQ0tMSVNUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDA4MDAwMDAKK0NPTkZJR18yOUJJVD15CiBDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfU0hfT0NSQU0gaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgZmVhdHVyZXMKICMKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9GUFVfRU1VIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0RTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9BREMgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX0lQUl9JUlE9eQogQ09ORklHX0NQVV9IQVNfU1JfUkI9eQogCiAjCi0jIFRpbWVyIHN1cHBvcnQKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX1NITUlOPXkKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTMyMDAwMDAwCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMjEyLDY5ICsyMjMsNjMgQEAKICMKICMgQ29tcGFuaW9uIENoaXBzCiAjCi0jIENPTkZJR19IRDY0NDZYX1NFUklFUyBpcyBub3Qgc2V0CisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGZlYXR1cmVzCiAjCiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCiAjCiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwMjEwMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PTFmMDEgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NjRrKGZpcm0pcm8sLShzeXMpIG5ldGRldj0zNCwweDMwMCxldGgwICIKIAogIwogIyBCdXMgb3B0aW9ucwogIwotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yOTUsMzMgKzMwMCwyMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zMzEsMTAgKzMyNiw2IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTM0Miw5ICszMzMsMTkgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNTYsMzIgKzM1NywyNyBAQAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiAjIENPTkZJR19NVERfQ0hBUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDA3LDcgKzQwMyw2IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTQzMyw0MSArNDI4LDI3IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00NzUsODkgKzQ1Niw0OCBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiAjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorQ09ORklHX05FVERFVl8xMDAwMD15CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgV2lyZWxlc3MgTEFOCiAjCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC01NzUsNiArNTE1LDcgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU5MywxNTMgKzUzNCwxMDMgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTc2MywxMiArNjU0LDEyIEBACiBDT05GSUdfUFJPQ19GUz15CiAjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzgwLDI5ICs2NzEsMjggQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTgxMCw1MyArNzAwLDE0MCBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CiAKICMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZwppbmRleCBhNzk0YzA4Li5hZTVjYmUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCkBAIC0xLDE4ICsxLDIzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMtcmM3Ci0jIEZyaSBTZXAgMjEgMTk6MDc6MzAgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFR1ZSBPY3QgMjEgMTI6MTY6MjUgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1Q9eQorQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTI2LDcgKzMxLDYgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgpAQCAtMzQsMjAgKzM4LDQxIEBACiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0FVRElUU1lTQ0FMTD15CitDT05GSUdfQVVESVRfVFJFRT15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfTlM9eQorQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKK0NPTkZJR19DR1JPVVBfREVWSUNFPXkKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKK0NPTkZJR19SRVNPVVJDRV9DT1VOVEVSUz15CitDT05GSUdfTU1fT1dORVI9eQorQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFI9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKK0NPTkZJR19VVFNfTlM9eQorQ09ORklHX0lQQ19OUz15CitDT05GSUdfVVNFUl9OUz15CitDT05GSUdfUElEX05TPXkKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CkBAIC01OSw0NCArODQsNjYgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xMDUsNyArMTUyLDEwIEBACiBDT05GSUdfQ1BVX1NINEE9eQogQ09ORklHX0NQVV9TSFgzPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldApAQCAtMTE0LDYgKzE2NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTEyMiwxNCArMTczLDE3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKQEAgLTEzOSw0NSArMTkzLDU2IEBACiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15Ci0jIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19OVU1BPXkKK0NPTkZJR19OT0RFU19TSElGVD0zCiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKIENPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9NgogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15Ci1DT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfNEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0Sz15CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzY0S0I9eQorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDEwMDAwCisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEsgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMjU2SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUIgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJNQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKIENPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogQ09ORklHX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQorQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBQ0hFX1dSSVRFQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0FDSEVfT0ZGPXkKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIGZlYXR1cmVzCkBAIC0yMDIsOCArMjY3LDkgQEAKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKIENPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMjE0LDcgKzI4MCwxMCBAQAogQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQogIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPW0KIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPW0KQEAgLTI0NSwyMCArMzE0LDIzIEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQorQ09ORklHX1BSRUVNUFRfUkNVPXkKK0NPTkZJR19SQ1VfVFJBQ0U9eQogCiAjCiAjIEJvb3Qgb3B0aW9ucwogIwogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgZWFybHlwcmludGs9YmlvcyBpZ25vcmVfbG9nbGV2ZWwiCiAKQEAgLTI2NiwyMSArMzM4LDE1IEBACiAjIEJ1cyBvcHRpb25zCiAjCiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTI5Miw2ICszNTgsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTMxMyw2ICszODAsNyBAQAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMzM0LDggKzQwMiwxMCBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTM0Myw2ICs0MTMsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNTIsMjggKzQyMywyOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0NBTj1tCitDT05GSUdfQ0FOX1JBVz1tCitDT05GSUdfQ0FOX0JDTT1tCisKKyMKKyMgQ0FOIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfQ0FOX1ZDQU49bQorIyBDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zODQsNiArNDU1LDcgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zOTcsMTQgKzQ2OSwxOCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ0MywyNSArNTE5LDQxIEBACiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCkBAIC00NzAsMTAgKzU2MiwxOSBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTQ5NSw2ICs1OTYsNyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE0LDYgKzYxNiw3NiBAQAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU0hfU0NJIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTUyMiw3OCArNjk0LDE1OCBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIwogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUjhBNjY1OTdfSENEPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKKyMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15CiAjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKLUNPTkZJR19VU0JfTTY2NTkyPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKK0NPTkZJR19VU0JfTTY2NTkyPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiAjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CkBAIC02MDIsMjcgKzg1NCw3OCBAQAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBSVEMgaW50ZXJmYWNlcwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBJMkMgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogCiAjCi0jIERNQSBEZXZpY2VzCisjIFNQSSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKIAogIwotIyBVc2Vyc3BhY2UgSS9PCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0g9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfVUlPPW0KKyMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNjM0LDIyICs5MzcsMjAgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtNjczLDEyICs5NzQsMTIgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTY5MywxNCArOTk0LDE0IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC03MTQsMjkgKzEwMTUsMTcgQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKQEAgLTc0NCw5ICsxMDMzLDEyIEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERUJVR19TSElSUT15CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtNzYxLDE4ICsxMDUzLDM2IEBACiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19WTT15CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKLSMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzgwLDcgKzEwOTAsOTIgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC03ODgsMTAgKzExODMsMTIgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0dFTkVSSUM9eQogQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKaW5kZXggZTRlNWQyMS4uYjRjYTUxMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCkBAIC0xLDM2ICsxLDM2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMtcmMxCi0jIFRodSBKdWwgMjYgMTE6NDk6MTEgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6NTU6MDMgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldApAQCAtMzgsMTIgKzM4LDE1IEBACiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNTcsNiArNjAsNyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtNjUsMTAgKzY5LDIyIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTc4LDYgKzk0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05MSwxMyArMTA4LDE4IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCiAjCiBDT05GSUdfQ1BVX1NIND15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKQEAgLTEwNSw2ICsxMjcsOCBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldApAQCAtMTEzLDE0ICsxMzcsMTcgQEAKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CiAKICMKICMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucwpAQCAtMTMwLDYgKzE1Nyw3IEBACiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwMTAwMDAwMAorQ09ORklHXzI5QklUPXkKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTEzOSw3ICsxNjcsOSBAQAogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTQ3LDE2ICsxNzcsMjEgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAotIyBDT05GSUdfU0hfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIGZlYXR1cmVzCkBAIC0xNjQsMjAgKzE5OSwxOCBAQAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TSF9GUFU9eQotIyBDT05GSUdfU0hfRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUT1JFX1FVRVVFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQotQ09ORklHX0NQVV9IQVNfSU5UQ19JUlE9eQogQ09ORklHX0NQVV9IQVNfSVBSX0lSUT15CiBDT05GSUdfQ1BVX0hBU19TUl9SQj15CiBDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CiAKICMKICMgQm9hcmQgc3VwcG9ydAogIwogIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMD15Ci0jIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldApAQCAtMTg5LDkgKzIyMiw5IEBACiBDT05GSUdfU0hfVE1VPXkKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NjAwMDAwMDAKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMjI0LDExICsyNTcsMTUgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwpAQCAtMjQxLDI2ICsyNzgsMjAgQEAKICMKICMgQnVzIG9wdGlvbnMKICMKLUNPTkZJR19TSF9DT05DQVRfRlM9eQogQ09ORklHX1BDST15CiBDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19QQ0lfQVVUTz15CiBDT05GSUdfUENJX0FVVE9fVVBEQVRFX1JFU09VUkNFUz15CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIworQ09ORklHX1BDSV9MRUdBQ1k9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0yODYsMTQgKzMxNywxMyBAQAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldApAQCAtMzAxLDYgKzMzMSw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTMxMCwxMCArMzQxLDYgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKIAogIwpAQCAtMzIxLDE0ICszNDgsMTQgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldApAQCAtMzUyLDYgKzM3OSw3IEBACiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTM2NSw2ICszOTMsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQwMSw2ICs0MzAsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BMQVRSQU09eQogCiAjCkBAIC00MzcsMTAgKzQ2NywxMiBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNDUyLDQ0ICs0ODQsNTIgQEAKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKQEAgLTUwMSwxMiArNTQxLDE0IEBACiAjIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAogIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CkBAIC01MTYsMTIgKzU1OCwxMiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNTQwLDcgKzU4Miw2IEBACiAjCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC01NjQsNyArNjA1LDkgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC01ODQsODIgKzYyNyw3NyBAQAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIwogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC02NjgsMTggKzcwNiwxNiBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtNzAzLDEyICs3MzksMTIgQEAKIENPTkZJR19QUk9DX0ZTPXkKICMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTcyNCwxNCArNzYwLDE0IEBACiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtNzQ1LDM0ICs3ODEsMzAgQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKQEAgLTc4Miw2ICs4MTQsOCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKQEAgLTc5MCw2ICs4MjQsNyBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwppbmRleCBhZjkyMWI1YS4uMTcxMWYwZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwpAQCAtMSwzNiArMSw1MCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4Ci0jIFR1ZSBPY3QgIDMgMTI6NTc6MjkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6NTY6NDggMjAwOAogIwogQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTQzLDM0ICs1Nyw0OCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGxheWVyCi0jCitDT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC04NCw1OSArMTEyLDI3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCiAjCi0jIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzM0M19TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19TSF83NzUxX1NZU1RFTUg9eQotIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAotIyBDT05GSUdfU0hfRUMzMTA0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NBVFVSTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9EUkVBTUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0hfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0gwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzEwVk9JUEdXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAotIyBDT05GSUdfU0hfUjc3ODBSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9FRE9TSzc3MDUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAotIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0hNSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfVU5LTk9XTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHNlbGVjdGlvbgotIwogQ09ORklHX0NQVV9TSDQ9eQotCi0jCi0jIFNILTIgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYwNCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAotCi0jCi0jIFNILTQgUHJvY2Vzc29yIFN1cHBvcnQKLSMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CkBAIC0xNDUsNjUgKzE0MSw5MyBAQAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVI9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAotCi0jCi0jIFNUNDAgUHJvY2Vzc29yIFN1cHBvcnQKLSMKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAotCi0jCi0jIFNILTRBIFByb2Nlc3NvciBTdXBwb3J0Ci0jCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAotCi0jCi0jIFNINEFMLURTUCBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKICMKK0NPTkZJR19RVUlDS0xJU1Q9eQogQ09ORklHX01NVT15CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwMDQwMDAwMAorQ09ORklHXzI5QklUPXkKIENPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9PQ1JBTSBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBmZWF0dXJlcwogIwogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TSF9GUFU9eQotIyBDT05GSUdfU0hfRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUT1JFX1FVRVVFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQogQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQT15CitDT05GSUdfQ1BVX0hBU19GUFU9eQogCiAjCi0jIFRpbWVyIHN1cHBvcnQKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIXzc3NTFfU1lTVEVNSD15CisjIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEJPWF9SRTIgaXMgbm90IHNldAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NjAwMDAwMDAKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC0yMTgsMjEgKzI0MiwzMSBAQAogIwogIyBDb21wYW5pb24gQ2hpcHMKICMKLSMgQ09ORklHX0hENjQ0NlhfU0VSSUVTIGlzIG5vdCBzZXQKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgZmVhdHVyZXMKICMKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0yNDUsMzEgKzI3OSwxNSBAQAogIwogIyBCdXMgb3B0aW9ucwogIwotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKICMgQ09ORklHX05FVCBpcyBub3Qgc2V0CiAKICMKQEAgLTI4Miw0MCArMzAwLDIxIEBACiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTMyMywzOCArMzIyLDEwIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTM3Niw2ICszNDcsNyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtMzkwLDE1OCArMzYyLDExNSBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTU2NSwxMiArNDk0LDEyIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNTg1LDggKzUxNCwxMSBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiAKQEAgLTU5NSw0OSArNTI3LDU1IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKICMgS2VybmVsIGhhY2tpbmcKICMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKaW5kZXggMDY4NmVkNi4uZWEzYzVlOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCkBAIC0xLDQxICsxLDU1IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTktcmMzCi0jIE1vbiBPY3QgMzAgMTg6MDQ6NDkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3CisjIFdlZCBPY3QgMjIgMTk6NTg6MTIgMjAwOAogIwogQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTQ5LDM0ICs2Myw0OCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTkwLDU5ICsxMTgsMjcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKICMKLSMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzAwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzQzX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0hQNlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0VDMzEwNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TQVRVUk4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfRFJFQU1DQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9NUEMxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NIMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfSFM3NzUxUlZPSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzcxMFZPSVBHVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1I3NzgwUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfRURPU0s3NzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NINDIwMl9NSUNST0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9MQU5ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9USVRBTj15Ci0jIENPTkZJR19TSF9TSE1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc2VsZWN0aW9uCi0jCiBDT05GSUdfQ1BVX1NIND15Ci0KLSMKLSMgU0gtMiBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0IGlzIG5vdCBzZXQKLQotIwotIyBTSC0zIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtNCBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTE1MSw2NSArMTQ3LDk0IEBACiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUj15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU1Q0MCBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MEdYMSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtNEEgUHJvY2Vzc29yIFN1cHBvcnQKLSMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CiAKICMKICMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucwogIworQ09ORklHX1FVSUNLTElTVD15CiBDT05GSUdfTU1VPXkKIENPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMzAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDdmZDAwMDAKK0NPTkZJR18yOUJJVD15CiBDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfU0hfT0NSQU0gaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgZmVhdHVyZXMKICMKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfU0hfRlBVPXkKLSMgQ09ORklHX1NIX0RTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX0lQUl9JUlE9eQogQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQT15CitDT05GSUdfQ1BVX0hBU19GUFU9eQogCiAjCi0jIFRpbWVyIHN1cHBvcnQKKyMgQm9hcmQgc3VwcG9ydAorIworIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CitDT05GSUdfU0hfVElUQU49eQorIyBDT05GSUdfU0hfTEJPWF9SRTIgaXMgbm90IHNldAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MzAwMDAwMDAKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC0yMTksNiArMjQ0LDcgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKK0NPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9OAogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldApAQCAtMjI2LDIwICsyNTIsMzAgQEAKICMKICMgQ29tcGFuaW9uIENoaXBzCiAjCi0jIENPTkZJR19IRDY0NDZYX1NFUklFUyBpcyBub3Qgc2V0CisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGZlYXR1cmVzCiAjCiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0yNTcsMTcgKzI5MywxMCBAQAogQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfUENJX0FVVE89eQogQ09ORklHX1BDSV9BVVRPX1VQREFURV9SRVNPVVJDRVM9eQotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCiBDT05GSUdfSE9UUExVR19QQ0k9eQogIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKQEAgLTI3NywzMCArMzA2LDI1IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD15CiBDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKQEAgLTMwOCwxMyArMzMyLDcgQEAKICMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKLSMgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKLUNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEPXkKLUNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfUlI9bQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9SQU5ET009bQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9XUkFORE9NPW0KLUNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfRFJSPW0KICMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQpAQCAtMzM2LDE5ICszNTQsMTcgQEAKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPW0KIENPTkZJR19JTkVUX1RDUF9ESUFHPW0KICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQogQ09ORklHX0lQVjZfUFJJVkFDWT15CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPXkKIENPTkZJR19JTkVUNl9FU1A9eQogQ09ORklHX0lORVQ2X0lQQ09NUD15CkBAIC0zNjAsMTEgKzM3NiwxNCBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPXkKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIENPTkZJR19CUklER0VfTkVURklMVEVSPXkKIAogIwpAQCAtMzczLDEzNCArMzkyLDk1IEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX0NUX0FDQ1Q9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSz1tCi0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9bQotQ09ORklHX0lQX05GX0lSQz1tCi1DT05GSUdfSVBfTkZfTkVUQklPU19OUz1tCi1DT05GSUdfSVBfTkZfVEZUUD1tCi0jIENPTkZJR19JUF9ORl9BTUFOREEgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1BQVFA9bQotQ09ORklHX0lQX05GX0gzMjM9bQotIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0FIPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15Ci1DT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQotQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1BQVFA9bQotQ09ORklHX0lQX05GX05BVF9IMzIzPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQogQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogCiAjCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09QVFM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi0KLSMKLSMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwogIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfU1RQPXkKIENPTkZJR19CUklER0U9eQorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiBDT05GSUdfVkxBTl84MDIxUT15CisjIENPTkZJR19WTEFOXzgwMjFRX0dWUlAgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9eQogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC01MTAsMTQgKzQ5MCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKIENPTkZJR19ORVRfU0NIRUQ9eQotQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQotIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CiAKICMKICMgUXVldWVpbmcvU2NoZWR1bGluZwpAQCAtNTI2LDYgKzQ5OSw3IEBACiBDT05GSUdfTkVUX1NDSF9IVEI9bQogQ09ORklHX05FVF9TQ0hfSEZTQz1tCiBDT05GSUdfTkVUX1NDSF9QUklPPW0KKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX1JFRD1tCiBDT05GSUdfTkVUX1NDSF9TRlE9bQogQ09ORklHX05FVF9TQ0hfVEVRTD1tCkBAIC01NDksNiArNTIzLDcgQEAKIENPTkZJR19DTFNfVTMyX01BUks9eQogQ09ORklHX05FVF9DTFNfUlNWUD1tCiBDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAogQ09ORklHX05FVF9FTUFUQ0g9eQogQ09ORklHX05FVF9FTUFUQ0hfU1RBQ0s9MzIKIENPTkZJR19ORVRfRU1BVENIX0NNUD1tCkBAIC01NjIsMjcgKzUzNywzNyBAQAogQ09ORklHX0dBQ1RfUFJPQj15CiBDT05GSUdfTkVUX0FDVF9NSVJSRUQ9bQogQ09ORklHX05FVF9BQ1RfSVBUPW0KKyMgQ09ORklHX05FVF9BQ1RfTkFUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQUNUX1BFRElUPW0KICMgQ09ORklHX05FVF9BQ1RfU0lNUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX1NLQkVESVQgaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfSU5EPXkKLUNPTkZJR19ORVRfRVNUSU1BVE9SPXkKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTE9eQogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9eQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX0ZJQl9SVUxFUz15CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNTkxLDIwICs1NzYsMTYgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKIENPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9bQogQ09ORklHX01URF9ERUJVRz15CiBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MApAQCAtNjE1LDYgKzU5Niw3IEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9bQorQ09ORklHX01URF9CTEtERVZTPW0KIENPTkZJR19NVERfQkxPQ0s9bQogIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKIENPTkZJR19GVEw9bQpAQCAtNjIzLDYgKzYwNSw3IEBACiBDT05GSUdfSU5GVEw9bQogQ09ORklHX1JGRF9GVEw9bQogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC02NDQsMTYgKzYyNywxNyBAQAogIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD1tCiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC02NzEsMzQgKzY1NSwyMyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfTVREX05BTkQ9bQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPW0KICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldApAQCAtNzExLDIwICs2ODQsMTggQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC03MzIsNiArNzAzLDggQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNzUyLDYgKzcyNSw4IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC03NTksMTIgKzczNCw5IEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKQEAgLTc3NCw3ICs3NDYsNiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKQEAgLTc4NSw2ICs3NTYsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CkBAIC03OTUsNTMgKzc2NywzMSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0lGQiBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPW0KIAogIwpAQCAtODU0LDMyICs4MDQsMzUgQEAKIENPTkZJR19DSUNBREFfUEhZPW0KICMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldApAQCAtODkxLDE4ICs4NDQsMjEgQEAKIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUj15CiAjIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAogQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUPXkKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIworIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTkxMCw2MyArODY2LDU2IEBACiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIworIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIFdpcmVsZXNzIExBTgogIwotQ09ORklHX05FVF9SQURJTz15Ci1DT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSz15CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwotIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAotIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLQotIwotIyBQcmlzbSBHVC9EdWV0dGUgODAyLjExKGEvYi9nKSBQQ0kvQ2FyZGJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfUFJJU001ND1tCi0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkNNNDNYWD1tCi1DT05GSUdfQkNNNDNYWF9ERUJVRz15Ci1DT05GSUdfQkNNNDNYWF9ETUE9eQotQ09ORklHX0JDTTQzWFhfUElPPXkKLUNPTkZJR19CQ000M1hYX0RNQV9BTkRfUElPX01PREU9eQotIyBDT05GSUdfQkNNNDNYWF9ETUFfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQ000M1hYX1BJT19NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfV0lSRUxFU1M9eQotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCitDT05GSUdfVVNCX0NBVEM9bQorQ09ORklHX1VTQl9LQVdFVEg9bQorQ09ORklHX1VTQl9QRUdBU1VTPW0KK0NPTkZJR19VU0JfUlRMODE1MD1tCitDT05GSUdfVVNCX1VTQk5FVD1tCitDT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KK0NPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KKyMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCitDT05GSUdfVVNCX05FVF9QTFVTQj1tCisjIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtOTc5LDI1ICs5MjgsMTcgQEAKIENPTkZJR19QUFBfQlNEQ09NUD1tCiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKIENPTkZJR19TTElQPW0KIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQogQ09ORklHX1NMSEM9bQogQ09ORklHX1NMSVBfU01BUlQ9eQogIyBDT05GSUdfU0xJUF9NT0RFX1NMSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC0xMDA1LDYgKzk0Niw3IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC0xMDE0LDcgKzk1Niw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtMTAyNCw2ICs5NjUsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC0xMDM3LDEwICs5NzksMTMgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC0xMDU5LDE1ICsxMDA0LDM2IEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDc1LDYgKzEwNDEsNyBAQAogIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAogQ09ORklHX1NIX1dEVD1tCiAjIENPTkZJR19TSF9XRFRfTU1BUCBpcyBub3Qgc2V0CiAKQEAgLTEwODgsMTEzICsxMDU1LDEyMSBAQAogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKICMKICMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBUUE0gZGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLUNPTkZJR19VU0JfRUhDSV9TUExJVF9JU089eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPW0KKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtMTIwNyw3NiArMTE4MiwzNCBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotCi0jCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotQ09ORklHX1VTQl9DQVRDPW0KLUNPTkZJR19VU0JfS0FXRVRIPW0KLUNPTkZJR19VU0JfUEVHQVNVUz1tCi1DT05GSUdfVVNCX1JUTDgxNTA9bQotQ09ORklHX1VTQl9VU0JORVQ9bQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCi1DT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCi0jIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KLUNPTkZJR19VU0JfTkVUX1BMVVNCPW0KLSMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX1pBVVJVUz1tCi1DT05GSUdfVVNCX01PTj15Ci0KLSMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKIENPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKICMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KICMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldApAQCAtMTI5MSw2ICsxMjI0LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKQEAgLTEyOTgsOCArMTIzMiwxMSBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKQEAgLTEzMDgsNiArMTI0NSw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwpAQCAtMTMxNSwxMCArMTI1MywxMSBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKQEAgLTEzMjksODAgKzEyNjgsNTMgQEAKICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKIENPTkZJR19SVENfTElCPW0KIENPTkZJR19SVENfQ0xBU1M9bQogCiAjCiAjIFJUQyBpbnRlcmZhY2VzCiAjCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9bQotQ09ORklHX1JUQ19JTlRGX1BST0M9bQotQ09ORklHX1JUQ19JTlRGX0RFVj1tCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CiAjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBSVEMgZHJpdmVycworIyBTUEkgUlRDIGRyaXZlcnMKICMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9TSD1tCi0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIworQ09ORklHX1JUQ19EUlZfU0g9bQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xNDEyLDMxICsxMzI0LDI1IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0REVWX0ZTPW0KLSMgQ09ORklHX0VYVDRERVZfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEMj1tCi0jIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz1tCiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19YRlNfRlM9bQogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCkBAIC0xNDQ3LDcgKzEzNTMsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9bQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTE0NjcsMTIgKzEzNzIsMTIgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQogQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwpAQCAtMTQ4NSwzNCArMTM5MCwzMiBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCkBAIC0xNTI2LDcgKzE0MjksNiBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR185UF9GUz1tCiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC0xNTQ4LDEwICsxNDUwLDcgQEAKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9bQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCkBAIC0xNTkyLDEwMSArMTQ5MSwxODAgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9bQotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CiAKICMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fUk5HPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0VDQj15Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz15Ci1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PXkKLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKICMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKQEAgLTE2OTUsMyArMTY3Myw2IEBACiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCiBDT05GSUdfVEVYVFNFQVJDSF9GU009bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtbGJveHJlMi5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtbGJveHJlMi5jCmluZGV4IGExM2NiNzYuLjg2YzBiNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWxib3hyZTIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vbGJveHJlMi5oPgorI2luY2x1ZGUgPG1hY2gvbGJveHJlMi5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKIAogc3RhdGljIGNoYXIgbGJveHJlMl9pcnFfdGFiW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYwppbmRleCA1ZmRhZGFlLi44NTU1MjM4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1yNzc4MHJwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYwppbmRleCBiM2ZhM2UyLi5kNmNhNzRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3J0czc3NTFyMmQuaD4KKyNpbmNsdWRlIDxtYWNoL3IyZC5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKIAogc3RhdGljIHU4IHJ0czc3NTFyMmRfaXJxX3RhYltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zZGs3NzgwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zZGs3NzgwLmMKaW5kZXggNjZhOWI0MC4uNGRjYzY0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2RrNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGFzbS9zZGs3NzgwLmg+CisjaW5jbHVkZSA8bWFjaC9zZGs3NzgwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtdGl0YW4uYwppbmRleCBhYzhlZTIzLi5hOGY3ODAxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vdGl0YW4uaD4KKyNpbmNsdWRlIDxtYWNoL3RpdGFuLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgY2hhciB0aXRhbl9pcnFfdGFiW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2I4ZTFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCkBAIC0wLDAgKzEsMTQ0IEBACisjaWZuZGVmIF9fQVNNX1NIX0JJVE9QU19MTFNDX0gKKyNkZWZpbmUgX19BU01fU0hfQklUT1BTX0xMU0NfSAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBzZXRfYml0CQlcblx0IgorCQkib3IJCSUzLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKKwkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzazsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgY2xlYXJfYml0CQlcblx0IgorCQkiYW5kCQklMywgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpCisJCTogIjEiIChhKSwgInIiICh+bWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzazsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgY2hhbmdlX2JpdAkJXG5cdCIKKwkJInhvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX3NldF9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCisJCSJvcgkJJTQsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbCAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9jbGVhcl9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCisJCSJhbmQJCSU1LCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTQsICUyCQkJCVxuXHQiCisJCSJzeW5jbwkJCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQorCQk6ICIxIiAoYSksICJyIiAobWFzayksICJyIiAofm1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9jaGFuZ2VfYml0CVxuXHQiCisJCSJtb3YJCSUwLCAlMgkJCQlcblx0IgorCQkieG9yCQklNCwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSU0LCAlMgkJCQlcblx0IgorCQkic3luY28JCQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9CSVRPUFNfTExTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBkN2QzODJmLi4zNjc5MzBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTEzLDYgKzEzLDggQEAKIAogI2lmZGVmIENPTkZJR19HVVNBX1JCCiAjaW5jbHVkZSA8YXNtL2JpdG9wcy1ncmIuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorI2luY2x1ZGUgPGFzbS9iaXRvcHMtbGxzYy5oPgogI2Vsc2UKICNpbmNsdWRlIDxhc20vYml0b3BzLWlycS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKaW5kZXggNzIwZGZhYi4uZjljODg1OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaApAQCAtMzksNiArMzksNyBAQAogCiAvKiBTaG91bGQgYmUgZGVmaW5lZCBieSBwcm9jZXNzb3Itc3BlY2lmaWMgY29kZSAqLwogdm9pZCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKiwgaW50IHR5cGUpOworaW50IF9faW5pdCBhcmNoX2Nsa19pbml0KHZvaWQpOwogCiAvKiBhcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyAqLwogaW50IGNsa19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlM2JmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBfX0FTTV9TSF9DTVBYQ0hHX0xMU0NfSAorI2RlZmluZSBfX0FTTV9TSF9DTVBYQ0hHX0xMU0NfSAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZ191MzIodm9sYXRpbGUgdTMyICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191MzIJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJXG5cdCIKKwkJIm1vdgkJJTQsICUwCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCVxuXHQiCisJCSJiZgkJMWIJCQlcblx0IgorCQkic3luY28JCQkJCVxuXHQiCisJCTogIj0meiIodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChtKSwgInIiICh2YWwpCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZ191OCh2b2xhdGlsZSB1OCAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHhjaGdfdTgJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJXG5cdCIKKwkJIm1vdgkJJTQsICUwCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCVxuXHQiCisJCSJiZgkJMWIJCQlcblx0IgorCQkic3luY28JCQkJCVxuXHQiCisJCTogIj0meiIodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChtKSwgInIiICh2YWwgJiAweGZmKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NtcHhjaGdfdTMyKHZvbGF0aWxlIGludCAqbSwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgX19jbXB4Y2hnX3UzMgkJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCisJCSJjbXAvZXEJCSUyLCAlNAkJCQlcblx0IgorCQkiYmYJCTJmCQkJCVxuXHQiCisJCSJtb3YJCSU1LCAlMAkJCQlcblx0IgorCQkiMjoJCQkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJInN5bmNvCQkJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChtKSwgInIiIChvbGQpLCAiciIgKG5ldykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9DTVBYQ0hHX0xMU0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggZWUwMmRiMS4uOWViOTAzNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMDgsNiArMTA4LDE0IEBACiAjZGVmaW5lIGVsZl9jaGVja19mZHBpYyh4KQkJKCh4KS0+ZV9mbGFncyAmIEVGX1NIX0ZEUElDKQogI2RlZmluZSBlbGZfY2hlY2tfY29uc3RfZGlzcGxhY2VtZW50KHgpCSgoeCktPmVfZmxhZ3MgJiBFRl9TSF9QSUMpCiAKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKy8qCisgKiBFbmFibGUgZHVtcCB1c2luZyByZWdzZXQuCisgKiBUaGlzIGNvdmVycyBhbGwgb2YgZ2VuZXJhbC9EU1AvRlBVIHJlZ3MuCisgKi8KKyNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKKyNlbmRpZgorCiAjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCiAjZGVmaW5lIEVMRl9GRFBJQ19DT1JFX0VGTEFHUwlFRl9TSF9GRFBJQwogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQlQQUdFX1NJWkUKQEAgLTE5MCwxMiArMTk4LDYgQEAKICNlbmRpZgogCiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLWV4dGVybiBpbnQgZHVtcF90YXNrX3JlZ3MgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZ3JlZ3NldF90ICopOwotZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2ZwcmVnc2V0X3QgKik7Ci0KLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBlbGZfcmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCBlbGZfcmVncykKLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaAppbmRleCA5MTQ2MmZlLi4xZDNhZWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTMwLDggKzMwLDE1IEBACiB9CiAjZW5kaWYKIAorc3RydWN0IHVzZXJfcmVnc2V0OworCiBleHRlcm4gaW50IGRvX2ZwdV9pbnN0KHVuc2lnbmVkIHNob3J0LCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAorZXh0ZXJuIGludCBmcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1Zik7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxhenlfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTUwLDYgKzU3LDE4IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRza191c2VkX21hdGgodHNrKSkgeworCQlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgJiYgdHNrID09IGN1cnJlbnQpCisJCQl1bmxhenlfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodHNrKTsKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19BU01fU0hfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWQzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9GVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TSF9GVFJBQ0VfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWNvdW50KHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBjZjMyYmQyLi45MDY3MzY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAgaW5jbHVkZS9hc20tc2gvZ3Bpby5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcworICogR2VuZXJpYyBHUElPIEFQSSBhbmQgcGlubXV4IHRhYmxlIHN1cHBvcnQgZm9yIFN1cGVySC4KICAqCi0gKiAgQWRkcmVzc2VzIGZvciB0aGUgUGluIEZ1bmN0aW9uIENvbnRyb2xsZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOCBNYWdudXMgRGFtbQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xMiw4ICsxMiwxMTEgQEAKICNpZm5kZWYgX19BU01fU0hfR1BJT19ICiAjZGVmaW5lIF9fQVNNX1NIX0dQSU9fSAogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCiAjaW5jbHVkZSA8Y3B1L2dwaW8uaD4KICNlbmRpZgogCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpbm11eF9lbnVtX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgcGlubXV4X2ZsYWdfdDsKKworI2RlZmluZSBQSU5NVVhfVFlQRV9OT05FICAgICAgICAgICAgMAorI2RlZmluZSBQSU5NVVhfVFlQRV9GVU5DVElPTiAgICAgICAgMQorI2RlZmluZSBQSU5NVVhfVFlQRV9HUElPICAgICAgICAgICAgMgorI2RlZmluZSBQSU5NVVhfVFlQRV9PVVRQVVQgICAgICAgICAgMworI2RlZmluZSBQSU5NVVhfVFlQRV9JTlBVVCAgICAgICAgICAgNAorI2RlZmluZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMVVAgICAgNQorI2RlZmluZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMRE9XTiAgNgorCisjZGVmaW5lIFBJTk1VWF9GTEFHX1RZUEUgICAgICAgICAgICAoMHg3KQorI2RlZmluZSBQSU5NVVhfRkxBR19XQU5UX1BVTExVUCAgICAgKDEgPDwgMykKKyNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMRE9XTiAgICgxIDw8IDQpCisKK3N0cnVjdCBwaW5tdXhfZ3BpbyB7CisJcGlubXV4X2VudW1fdCBlbnVtX2lkOworCXBpbm11eF9mbGFnX3QgZmxhZ3M7Cit9OworCisjZGVmaW5lIFBJTk1VWF9HUElPKGdwaW8sIGRhdGFfb3JfbWFyaykgW2dwaW9dID0geyBkYXRhX29yX21hcmsgfQorI2RlZmluZSBQSU5NVVhfREFUQShkYXRhX29yX21hcmssIGlkcy4uLikgZGF0YV9vcl9tYXJrLCBpZHMsIDAKKworc3RydWN0IHBpbm11eF9jZmdfcmVnIHsKKwl1bnNpZ25lZCBsb25nIHJlZywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aDsKKwl1bnNpZ25lZCBsb25nICpjbnQ7CisJcGlubXV4X2VudW1fdCAqZW51bV9pZHM7Cit9OworCisjZGVmaW5lIFBJTk1VWF9DRkdfUkVHKG5hbWUsIHIsIHJfd2lkdGgsIGZfd2lkdGgpIFwKKwkucmVnID0gciwgLnJlZ193aWR0aCA9IHJfd2lkdGgsIC5maWVsZF93aWR0aCA9IGZfd2lkdGgsCQlcCisJLmNudCA9ICh1bnNpZ25lZCBsb25nIFtyX3dpZHRoIC8gZl93aWR0aF0pIHt9LCBcCisJLmVudW1faWRzID0gKHBpbm11eF9lbnVtX3QgWyhyX3dpZHRoIC8gZl93aWR0aCkgKiAoMSA8PCBmX3dpZHRoKV0pIFwKKworc3RydWN0IHBpbm11eF9kYXRhX3JlZyB7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aDsKKwlwaW5tdXhfZW51bV90ICplbnVtX2lkczsKK307CisKKyNkZWZpbmUgUElOTVVYX0RBVEFfUkVHKG5hbWUsIHIsIHJfd2lkdGgpIFwKKwkucmVnID0gciwgLnJlZ193aWR0aCA9IHJfd2lkdGgsCVwKKwkuZW51bV9pZHMgPSAocGlubXV4X2VudW1fdCBbcl93aWR0aF0pIFwKKworc3RydWN0IHBpbm11eF9yYW5nZSB7CisJcGlubXV4X2VudW1fdCBiZWdpbjsKKwlwaW5tdXhfZW51bV90IGVuZDsKKwlwaW5tdXhfZW51bV90IGZvcmNlOworfTsKKworc3RydWN0IHBpbm11eF9pbmZvIHsKKwljaGFyICpuYW1lOworCXBpbm11eF9lbnVtX3QgcmVzZXJ2ZWRfaWQ7CisJc3RydWN0IHBpbm11eF9yYW5nZSBkYXRhOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgaW5wdXQ7CisJc3RydWN0IHBpbm11eF9yYW5nZSBpbnB1dF9wZDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGlucHV0X3B1OworCXN0cnVjdCBwaW5tdXhfcmFuZ2Ugb3V0cHV0OworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgbWFyazsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGZ1bmN0aW9uOworCisJdW5zaWduZWQgZmlyc3RfZ3BpbywgbGFzdF9ncGlvOworCisJc3RydWN0IHBpbm11eF9ncGlvICpncGlvczsKKwlzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNmZ19yZWdzOworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmRhdGFfcmVnczsKKworCXBpbm11eF9lbnVtX3QgKmdwaW9fZGF0YTsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19kYXRhX3NpemU7CisKKwl1bnNpZ25lZCBsb25nICpncGlvX2luX3VzZTsKK307CisKK2ludCByZWdpc3Rlcl9waW5tdXgoc3RydWN0IHBpbm11eF9pbmZvICpwaXApOworCitpbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3Bpbyk7CitzdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCit7CisJcmV0dXJuIF9fZ3Bpb19yZXF1ZXN0KGdwaW8pOworfQordm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7CitpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CitpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Cit2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CisKKy8qIElSUSBtb2RlcyBhcmUgdW5zcHBvcnRlZCAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKK3sKKwlXQVJOX09OKDEpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKwogI2VuZGlmIC8qIF9fQVNNX1NIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZDU1N2IwMC4uNjAzY2RkZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0FTTV9TSF9IV19JUlFfSAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIGV4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwpAQCAtMjMsMTAxICsyNCwxMiBAQAogCiB2b2lkIHJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKHN0cnVjdCBpcHJfZGVzYyAqKTsKIAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGludGNfZW51bTsKLQotc3RydWN0IGludGNfdmVjdCB7Ci0JaW50Y19lbnVtIGVudW1faWQ7Ci0JdW5zaWduZWQgc2hvcnQgdmVjdDsKLX07Ci0KLSNkZWZpbmUgSU5UQ19WRUNUKGVudW1faWQsIHZlY3QpIHsgZW51bV9pZCwgdmVjdCB9Ci0jZGVmaW5lIElOVENfSVJRKGVudW1faWQsIGlycSkgSU5UQ19WRUNUKGVudW1faWQsIGlycTJldnQoaXJxKSkKLQotc3RydWN0IGludGNfZ3JvdXAgewotCWludGNfZW51bSBlbnVtX2lkOwotCWludGNfZW51bSBlbnVtX2lkc1szMl07Ci19OwotCi0jZGVmaW5lIElOVENfR1JPVVAoZW51bV9pZCwgaWRzLi4uKSB7IGVudW1faWQsIHsgaWRzIH0gfQotCi1zdHJ1Y3QgaW50Y19tYXNrX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGg7Ci0JaW50Y19lbnVtIGVudW1faWRzWzMyXTsKLSNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyBzbXA7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBpbnRjX3ByaW9fcmVnIHsKLQl1bnNpZ25lZCBsb25nIHNldF9yZWcsIGNscl9yZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7Ci0JaW50Y19lbnVtIGVudW1faWRzWzE2XTsKLSNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyBzbXA7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBpbnRjX3NlbnNlX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7Ci0JaW50Y19lbnVtIGVudW1faWRzWzE2XTsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElOVENfU01QKHN0cmlkZSwgbnIpIC5zbXAgPSAoc3RyaWRlKSB8ICgobnIpIDw8IDgpCi0jZWxzZQotI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKQotI2VuZGlmCi0KLXN0cnVjdCBpbnRjX2Rlc2MgewotCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3RvcnM7Ci0JdW5zaWduZWQgaW50IG5yX3ZlY3RvcnM7Ci0Jc3RydWN0IGludGNfZ3JvdXAgKmdyb3VwczsKLQl1bnNpZ25lZCBpbnQgbnJfZ3JvdXBzOwotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptYXNrX3JlZ3M7Ci0JdW5zaWduZWQgaW50IG5yX21hc2tfcmVnczsKLQlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHJpb19yZWdzOwotCXVuc2lnbmVkIGludCBucl9wcmlvX3JlZ3M7Ci0Jc3RydWN0IGludGNfc2Vuc2VfcmVnICpzZW5zZV9yZWdzOwotCXVuc2lnbmVkIGludCBucl9zZW5zZV9yZWdzOwotCWNoYXIgKm5hbWU7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0Jc3RydWN0IGludGNfbWFza19yZWcgKmFja19yZWdzOwotCXVuc2lnbmVkIGludCBucl9hY2tfcmVnczsKLSNlbmRpZgotfTsKLQotI2RlZmluZSBfSU5UQ19BUlJBWShhKSBhLCBzaXplb2YoYSkvc2l6ZW9mKCphKQotI2RlZmluZSBERUNMQVJFX0lOVENfREVTQyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCQlcCi0JbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MpCQkJCVwKLXN0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCi0JX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAotCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAotCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAotCWNoaXBuYW1lLAkJCQkJCQlcCi19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLSNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0NfQUNLKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJXAotCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBhY2tfcmVncykJCQlcCi1zdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAotCV9JTlRDX0FSUkFZKGFja19yZWdzKSwJCQkJCQlcCi19Ci0jZW5kaWYKLQotdm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpOwotaW50IGludGNfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmlvKTsKLQogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCk7Ci0jaWZkZWYgQ09ORklHX0NQVV9TSDMKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3NoMyh2b2lkKTsKLSNlbmRpZgordm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXBfcGlucyhpbnQgbW9kZSk7CiAKIGVudW0geyBJUlFfTU9ERV9JUlEsIElSUV9NT0RFX0lSUTc2NTQsIElSUV9NT0RFX0lSUTMyMTAsCiAgICAgICAgSVJRX01PREVfSVJMNzY1NF9NQVNLLCBJUlFfTU9ERV9JUkwzMjEwX01BU0ssCiAgICAgICAgSVJRX01PREVfSVJMNzY1NCwgSVJRX01PREVfSVJMMzIxMCB9Owotdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXBfcGlucyhpbnQgbW9kZSk7CiAKICNlbmRpZiAvKiBfX0FTTV9TSF9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGE0ZmJmMGMuLjQzNmMyODUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEsMjcgKzEsMjYgQEAKICNpZm5kZWYgX19BU01fU0hfSU9fSAogI2RlZmluZSBfX0FTTV9TSF9JT19ICi0KIC8qCiAgKiBDb252ZW50aW9uOgotICogICAgcmVhZHtiLHcsbH0vd3JpdGV7Yix3LGx9IGFyZSBmb3IgUENJLAorICogICAgcmVhZHtiLHcsbCxxfS93cml0ZXtiLHcsbCxxfSBhcmUgZm9yIFBDSSwKICAqICAgIHdoaWxlIGlue2IsdyxsfS9vdXR7Yix3LGx9IGFyZSBmb3IgSVNBCi0gKiBUaGVzZSBtYXkgKHdpbGwpIGJlIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uLgorICoKICAqIEluIGFkZGl0aW9uIHdlIGhhdmUgJ3BhdXNpbmcnIHZlcnNpb25zOiBpbntiLHcsbH1fcC9vdXR7Yix3LGx9X3AKICAqIGFuZCAnc3RyaW5nJyB2ZXJzaW9uczogaW5ze2IsdyxsfS9vdXRze2IsdyxsfQotICogRm9yIHJlYWR7Yix3LGx9IGFuZCB3cml0ZXtiLHcsbH0gdGhlcmUgYXJlIGFsc28gX19yYXcgdmVyc2lvbnMsIHdoaWNoCi0gKiBkbyBub3QgaGF2ZSBhIG1lbW9yeSBiYXJyaWVyIGFmdGVyIHRoZW0uCiAgKgotICogSW4gYWRkaXRpb24sIHdlIGhhdmUKLSAqICAgY3RybF9pbntiLHcsbH0vY3RybF9vdXR7Yix3LGx9IGZvciBTdXBlckggc3BlY2lmaWMgSS9PLgotICogICB3aGljaCBhcmUgcHJvY2Vzc29yIHNwZWNpZmljLgotICovCi0KLS8qCi0gKiBXZSBmb2xsb3cgdGhlIEFscGhhIGNvbnZlbnRpb24gaGVyZToKLSAqICBfX2luYiBleHBhbmRzIHRvIGFuIGlubGluZSBmdW5jdGlvbiBjYWxsICh3aGljaCBjYWxscyB2aWEgdGhlIG12KQotICogIF9pbmIgIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsIChub3RlIF9fX3JhdyBmbnMgYXJlIF8gdmVyc2lvbiBvZiBfX3JhdykKLSAqICBpbmIgICBieSBkZWZhdWx0IGV4cGFuZHMgdG8gX2luYiwgYnV0IHRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5Ci0gKiAgICAgICAgZGVmaW5lIGl0IHRvIF9faW5iIGlmIGl0IGNob29zZXMuCisgKiBXaGlsZSByZWFke2IsdyxsLHF9IGFuZCB3cml0ZXtiLHcsbCxxfSBjb250YWluIG1lbW9yeSBiYXJyaWVycworICogYXV0b21hdGljYWxseSwgdGhlcmUgYXJlIGFsc28gX19yYXcgdmVyc2lvbnMsIHdoaWNoIGRvIG5vdC4KKyAqCisgKiBIaXN0b3JpY2FsbHksIHdlIGhhdmUgYWxzbyBoYWQgY3RybF9pbntiLHcsbCxxfS9jdHJsX291dHtiLHcsbCxxfSBmb3IKKyAqIFN1cGVySCBzcGVjaWZpYyBJL08gKHJhdyBJL08gdG8gb24tY2hpcCBDUFUgcGVyaXBoZXJhbHMpLiBJbiBwcmFjdGljZQorICogdGhlc2UgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIF9fcmF3IHZhcmlhbnRzLCBhbmQgYXMgc3VjaCwgYWxsCisgKiBuZXcgY29kZSBzaG91bGQgYmUgdXNpbmcgdGhlIF9fcmF3IHZlcnNpb25zLgorICoKKyAqIEFsbCBJU0EgSS9PIHJvdXRpbmVzIGFyZSB3cmFwcGVkIHRocm91Z2ggdGhlIG1hY2hpbmUgdmVjdG9yLiBJZiBhCisgKiBib2FyZCBkb2VzIG5vdCBwcm92aWRlIG92ZXJyaWRlcywgYSBnZW5lcmljIHNldCB0aGF0IGFyZSBjb3BpZWQgaW4KKyAqIGZyb20gdGhlIGRlZmF1bHQgbWFjaGluZSB2ZWN0b3IgYXJlIHVzZWQgaW5zdGVhZC4gVGhlc2UgYXJlIGxhcmdlbHkKKyAqIGZvciBvbGQgY29tcGF0IGNvZGUgZm9yIEkvTyBvZmZzZXRpbmcgdG8gU3VwZXJJT3MsIGFsbCBvZiB3aGljaCBhcmUKKyAqIGJldHRlciBoYW5kbGVkIHRocm91Z2ggdGhlIG1hY2h2ZWMgaW9wb3J0IG1hcHBpbmcgcm91dGluZXMgdGhlc2UgZGF5cy4KICAqLwogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTMxLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwotCiAvKgogICogRGVwZW5kaW5nIG9uIHdoaWNoIHBsYXRmb3JtIHdlIGFyZSBydW5uaW5nIG9uLCB3ZSBuZWVkIGRpZmZlcmVudAogICogSS9PIGZ1bmN0aW9ucy4KQEAgLTQwLDEwNSArMzgsNjggQEAKICNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9pb190cmFwcGVkLmg+CiAKLSNkZWZpbmUgbWF5YmViYWRpbyhwb3J0KSBcCi0gIHByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCi0JIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIChwb3J0KSwgKHUzMilfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisjZGVmaW5lIGluYihwKQkJCXNoX212Lm12X2luYigocCkpCisjZGVmaW5lIGludyhwKQkJCXNoX212Lm12X2ludygocCkpCisjZGVmaW5lIGlubChwKQkJCXNoX212Lm12X2lubCgocCkpCisjZGVmaW5lIG91dGIoeCxwKQkJc2hfbXYubXZfb3V0YigoeCksKHApKQorI2RlZmluZSBvdXR3KHgscCkJCXNoX212Lm12X291dHcoKHgpLChwKSkKKyNkZWZpbmUgb3V0bCh4LHApCQlzaF9tdi5tdl9vdXRsKCh4KSwocCkpCiAKLS8qCi0gKiBTaW5jZSBib2FyZHMgYXJlIGFibGUgdG8gZGVmaW5lIHRoZWlyIG93biBzZXQgb2YgSS9PIHJvdXRpbmVzIHRocm91Z2gKLSAqIHRoZWlyIHJlc3BlY3RpdmUgbWFjaGluZSB2ZWN0b3IsIHdlIGFsd2F5cyB3cmFwIHRocm91Z2ggdGhlIG12LgotICoKLSAqIEFsc28sIGluIHRoZSBldmVudCB0aGF0IGEgYm9hcmQgaGFzbid0IHByb3ZpZGVkIGl0cyBvd24gZGVmaW5pdGlvbiBmb3IKLSAqIGEgZ2l2ZW4gcm91dGluZSwgaXQgd2lsbCBiZSB3cmFwcGVkIHRvIGdlbmVyaWMgY29kZSBhdCBydW4tdGltZS4KLSAqLworI2RlZmluZSBpbmJfcChwKQkJc2hfbXYubXZfaW5iX3AoKHApKQorI2RlZmluZSBpbndfcChwKQkJc2hfbXYubXZfaW53X3AoKHApKQorI2RlZmluZSBpbmxfcChwKQkJc2hfbXYubXZfaW5sX3AoKHApKQorI2RlZmluZSBvdXRiX3AoeCxwKQkJc2hfbXYubXZfb3V0Yl9wKCh4KSwocCkpCisjZGVmaW5lIG91dHdfcCh4LHApCQlzaF9tdi5tdl9vdXR3X3AoKHgpLChwKSkKKyNkZWZpbmUgb3V0bF9wKHgscCkJCXNoX212Lm12X291dGxfcCgoeCksKHApKQogCi0jZGVmaW5lIF9faW5iKHApCXNoX212Lm12X2luYigocCkpCi0jZGVmaW5lIF9faW53KHApCXNoX212Lm12X2ludygocCkpCi0jZGVmaW5lIF9faW5sKHApCXNoX212Lm12X2lubCgocCkpCi0jZGVmaW5lIF9fb3V0Yih4LHApCXNoX212Lm12X291dGIoKHgpLChwKSkKLSNkZWZpbmUgX19vdXR3KHgscCkJc2hfbXYubXZfb3V0dygoeCksKHApKQotI2RlZmluZSBfX291dGwoeCxwKQlzaF9tdi5tdl9vdXRsKCh4KSwocCkpCisjZGVmaW5lIGluc2IocCxiLGMpCQlzaF9tdi5tdl9pbnNiKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIGluc3cocCxiLGMpCQlzaF9tdi5tdl9pbnN3KChwKSwgKGIpLCAoYykpCisjZGVmaW5lIGluc2wocCxiLGMpCQlzaF9tdi5tdl9pbnNsKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIG91dHNiKHAsYixjKQkJc2hfbXYubXZfb3V0c2IoKHApLCAoYiksIChjKSkKKyNkZWZpbmUgb3V0c3cocCxiLGMpCQlzaF9tdi5tdl9vdXRzdygocCksIChiKSwgKGMpKQorI2RlZmluZSBvdXRzbChwLGIsYykJCXNoX212Lm12X291dHNsKChwKSwgKGIpLCAoYykpCiAKLSNkZWZpbmUgX19pbmJfcChwKQlzaF9tdi5tdl9pbmJfcCgocCkpCi0jZGVmaW5lIF9faW53X3AocCkJc2hfbXYubXZfaW53X3AoKHApKQotI2RlZmluZSBfX2lubF9wKHApCXNoX212Lm12X2lubF9wKChwKSkKLSNkZWZpbmUgX19vdXRiX3AoeCxwKQlzaF9tdi5tdl9vdXRiX3AoKHgpLChwKSkKLSNkZWZpbmUgX19vdXR3X3AoeCxwKQlzaF9tdi5tdl9vdXR3X3AoKHgpLChwKSkKLSNkZWZpbmUgX19vdXRsX3AoeCxwKQlzaF9tdi5tdl9vdXRsX3AoKHgpLChwKSkKKyNkZWZpbmUgX19yYXdfd3JpdGViKHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1OCAgX19mb3JjZSAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfd3JpdGV3KHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1MTYgX19mb3JjZSAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfd3JpdGVsKHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1MzIgX19mb3JjZSAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfd3JpdGVxKHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKShhKSA9ICh2KSkKIAotI2RlZmluZSBfX2luc2IocCxiLGMpCXNoX212Lm12X2luc2IoKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19pbnN3KHAsYixjKQlzaF9tdi5tdl9pbnN3KChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIF9faW5zbChwLGIsYykJc2hfbXYubXZfaW5zbCgocCksIChiKSwgKGMpKQotI2RlZmluZSBfX291dHNiKHAsYixjKQlzaF9tdi5tdl9vdXRzYigocCksIChiKSwgKGMpKQotI2RlZmluZSBfX291dHN3KHAsYixjKQlzaF9tdi5tdl9vdXRzdygocCksIChiKSwgKGMpKQotI2RlZmluZSBfX291dHNsKHAsYixjKQlzaF9tdi5tdl9vdXRzbCgocCksIChiKSwgKGMpKQorI2RlZmluZSBfX3Jhd19yZWFkYihhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1OCAgX19mb3JjZSAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHcoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWRsKGEpCQkoX19jaGtfaW9fcHRyKGEpLCAqKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopKGEpKQorI2RlZmluZSBfX3Jhd19yZWFkcShhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKShhKSkKIAotI2RlZmluZSBfX3JlYWRiKGEpCXNoX212Lm12X3JlYWRiKChhKSkKLSNkZWZpbmUgX19yZWFkdyhhKQlzaF9tdi5tdl9yZWFkdygoYSkpCi0jZGVmaW5lIF9fcmVhZGwoYSkJc2hfbXYubXZfcmVhZGwoKGEpKQotI2RlZmluZSBfX3dyaXRlYih2LGEpCXNoX212Lm12X3dyaXRlYigodiksKGEpKQotI2RlZmluZSBfX3dyaXRldyh2LGEpCXNoX212Lm12X3dyaXRldygodiksKGEpKQotI2RlZmluZSBfX3dyaXRlbCh2LGEpCXNoX212Lm12X3dyaXRlbCgodiksKGEpKQorI2RlZmluZSByZWFkYihhKQkJKHsgdTggIHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQorI2RlZmluZSByZWFkdyhhKQkJKHsgdTE2IHJfID0gX19yYXdfcmVhZHcoYSk7IG1iKCk7IHJfOyB9KQorI2RlZmluZSByZWFkbChhKQkJKHsgdTMyIHJfID0gX19yYXdfcmVhZGwoYSk7IG1iKCk7IHJfOyB9KQorI2RlZmluZSByZWFkcShhKQkJKHsgdTY0IHJfID0gX19yYXdfcmVhZHEoYSk7IG1iKCk7IHJfOyB9KQogCi0jZGVmaW5lIGluYgkJX19pbmIKLSNkZWZpbmUgaW53CQlfX2ludwotI2RlZmluZSBpbmwJCV9faW5sCi0jZGVmaW5lIG91dGIJCV9fb3V0YgotI2RlZmluZSBvdXR3CQlfX291dHcKLSNkZWZpbmUgb3V0bAkJX19vdXRsCisjZGVmaW5lIHdyaXRlYih2LGEpCQkoeyBfX3Jhd193cml0ZWIoKHYpLChhKSk7IG1iKCk7IH0pCisjZGVmaW5lIHdyaXRldyh2LGEpCQkoeyBfX3Jhd193cml0ZXcoKHYpLChhKSk7IG1iKCk7IH0pCisjZGVmaW5lIHdyaXRlbCh2LGEpCQkoeyBfX3Jhd193cml0ZWwoKHYpLChhKSk7IG1iKCk7IH0pCisjZGVmaW5lIHdyaXRlcSh2LGEpCQkoeyBfX3Jhd193cml0ZXEoKHYpLChhKSk7IG1iKCk7IH0pCiAKLSNkZWZpbmUgaW5iX3AJCV9faW5iX3AKLSNkZWZpbmUgaW53X3AJCV9faW53X3AKLSNkZWZpbmUgaW5sX3AJCV9faW5sX3AKLSNkZWZpbmUgb3V0Yl9wCQlfX291dGJfcAotI2RlZmluZSBvdXR3X3AJCV9fb3V0d19wCi0jZGVmaW5lIG91dGxfcAkJX19vdXRsX3AKKy8qIFN1cGVySCBvbi1jaGlwIEkvTyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgY3RybF9pbmIJCV9fcmF3X3JlYWRiCisjZGVmaW5lIGN0cmxfaW53CQlfX3Jhd19yZWFkdworI2RlZmluZSBjdHJsX2lubAkJX19yYXdfcmVhZGwKKyNkZWZpbmUgY3RybF9pbnEJCV9fcmF3X3JlYWRxCiAKLSNkZWZpbmUgaW5zYgkJX19pbnNiCi0jZGVmaW5lIGluc3cJCV9faW5zdwotI2RlZmluZSBpbnNsCQlfX2luc2wKLSNkZWZpbmUgb3V0c2IJCV9fb3V0c2IKLSNkZWZpbmUgb3V0c3cJCV9fb3V0c3cKLSNkZWZpbmUgb3V0c2wJCV9fb3V0c2wKKyNkZWZpbmUgY3RybF9vdXRiCQlfX3Jhd193cml0ZWIKKyNkZWZpbmUgY3RybF9vdXR3CQlfX3Jhd193cml0ZXcKKyNkZWZpbmUgY3RybF9vdXRsCQlfX3Jhd193cml0ZWwKKyNkZWZpbmUgY3RybF9vdXRxCQlfX3Jhd193cml0ZXEKIAotI2RlZmluZSBfX3Jhd19yZWFkYihhKQkJX19yZWFkYigodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd19yZWFkdyhhKQkJX19yZWFkdygodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd19yZWFkbChhKQkJX19yZWFkbCgodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd193cml0ZWIodiwgYSkJX193cml0ZWIodiwgKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfd3JpdGV3KHYsIGEpCV9fd3JpdGV3KHYsICh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fcmF3X3dyaXRlbCh2LCBhKQlfX3dyaXRlbCh2LCAodm9pZCBfX2lvbWVtICopKGEpKQotCi12b2lkIF9fcmF3X3dyaXRlc2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Ci12b2lkIF9fcmF3X3JlYWRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKLQotLyoKLSAqIFRoZSBwbGF0Zm9ybSBoZWFkZXIgZmlsZXMgbWF5IGRlZmluZSBzb21lIG9mIHRoZXNlIG1hY3JvcyB0byB1c2UKLSAqIHRoZSBpbmxpbmVkIHZlcnNpb25zIHdoZXJlIGFwcHJvcHJpYXRlLiAgVGhlc2UgbWFjcm9zIG1heSBhbHNvIGJlCi0gKiByZWRlZmluZWQgYnkgdXNlcmxldmVsIHByb2dyYW1zLgotICovCi0jaWZkZWYgX19yZWFkYgotIyBkZWZpbmUgcmVhZGIoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQorc3RhdGljIGlubGluZSB2b2lkIGN0cmxfZGVsYXkodm9pZCkKK3sKKyNpZmRlZiBQMlNFRworCV9fcmF3X3JlYWR3KFAyU0VHKTsKICNlbmRpZgotI2lmZGVmIF9fcmF3X3JlYWR3Ci0jIGRlZmluZSByZWFkdyhhKQkoeyB1bnNpZ25lZCBpbnQgcl8gPSBfX3Jhd19yZWFkdyhhKTsgbWIoKTsgcl87IH0pCi0jZW5kaWYKLSNpZmRlZiBfX3Jhd19yZWFkbAotIyBkZWZpbmUgcmVhZGwoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZGwoYSk7IG1iKCk7IHJfOyB9KQotI2VuZGlmCi0KLSNpZmRlZiBfX3Jhd193cml0ZWIKLSMgZGVmaW5lIHdyaXRlYih2LGEpCSh7IF9fcmF3X3dyaXRlYigodiksKGEpKTsgbWIoKTsgfSkKLSNlbmRpZgotI2lmZGVmIF9fcmF3X3dyaXRldwotIyBkZWZpbmUgd3JpdGV3KHYsYSkJKHsgX19yYXdfd3JpdGV3KCh2KSwoYSkpOyBtYigpOyB9KQotI2VuZGlmCi0jaWZkZWYgX19yYXdfd3JpdGVsCi0jIGRlZmluZSB3cml0ZWwodixhKQkoeyBfX3Jhd193cml0ZWwoKHYpLChhKSk7IG1iKCk7IH0pCi0jZW5kaWYKK30KIAogI2RlZmluZSBfX0JVSUxEX01FTU9SWV9TVFJJTkcoYndscSwgdHlwZSkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCVwKIAkJCQljb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCVwKIHsJCQkJCQkJCQlcCiAJY29uc3Qgdm9sYXRpbGUgdHlwZSAqX19hZGRyID0gYWRkcjsJCQkJXApAQCAtMTQ5LDggKzExMCw4IEBACiAJfQkJCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwgdm9pZCAqYWRkciwJXAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZHMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCVwKKwkJCSAgICAgICB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCQlcCiB7CQkJCQkJCQkJXAogCXZvbGF0aWxlIHR5cGUgKl9fYWRkciA9IGFkZHI7CQkJCQlcCiAJCQkJCQkJCQlcCkBAIC0xNjIsMTA2ICsxMjMsNzEgQEAKIAogX19CVUlMRF9NRU1PUllfU1RSSU5HKGIsIHU4KQogX19CVUlMRF9NRU1PUllfU1RSSU5HKHcsIHUxNikKLSNkZWZpbmUgd3JpdGVzbCBfX3Jhd193cml0ZXNsCi0jZGVmaW5lIHJlYWRzbCAgX19yYXdfcmVhZHNsCitfX0JVSUxEX01FTU9SWV9TVFJJTkcocSwgdTY0KQogCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkgcmVhZGIoYSkKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKSByZWFkdyhhKQotI2RlZmluZSByZWFkbF9yZWxheGVkKGEpIHJlYWRsKGEpCit2b2lkIF9fcmF3X3dyaXRlc2wodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Cit2b2lkIF9fcmF3X3JlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKKworI2RlZmluZSB3cml0ZXNiCQkJX19yYXdfd3JpdGVzYgorI2RlZmluZSB3cml0ZXN3CQkJX19yYXdfd3JpdGVzdworI2RlZmluZSB3cml0ZXNsCQkJX19yYXdfd3JpdGVzbAorCisjZGVmaW5lIHJlYWRzYgkJCV9fcmF3X3JlYWRzYgorI2RlZmluZSByZWFkc3cJCQlfX3Jhd19yZWFkc3cKKyNkZWZpbmUgcmVhZHNsCQkJX19yYXdfcmVhZHNsCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhKQlyZWFkYihhKQorI2RlZmluZSByZWFkd19yZWxheGVkKGEpCXJlYWR3KGEpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYSkJcmVhZGwoYSkKKyNkZWZpbmUgcmVhZHFfcmVsYXhlZChhKQlyZWFkcShhKQogCiAvKiBTaW1wbGUgTU1JTyAqLwotI2RlZmluZSBpb3JlYWQ4KGEpCQlyZWFkYihhKQotI2RlZmluZSBpb3JlYWQxNihhKQkJcmVhZHcoYSkKKyNkZWZpbmUgaW9yZWFkOChhKQkJX19yYXdfcmVhZGIoYSkKKyNkZWZpbmUgaW9yZWFkMTYoYSkJCV9fcmF3X3JlYWR3KGEpCiAjZGVmaW5lIGlvcmVhZDE2YmUoYSkJCWJlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KChhKSkpCi0jZGVmaW5lIGlvcmVhZDMyKGEpCQlyZWFkbChhKQorI2RlZmluZSBpb3JlYWQzMihhKQkJX19yYXdfcmVhZGwoYSkKICNkZWZpbmUgaW9yZWFkMzJiZShhKQkJYmUzMl90b19jcHUoX19yYXdfcmVhZGwoKGEpKSkKIAotI2RlZmluZSBpb3dyaXRlOCh2LGEpCQl3cml0ZWIoKHYpLChhKSkKLSNkZWZpbmUgaW93cml0ZTE2KHYsYSkJCXdyaXRldygodiksKGEpKQorI2RlZmluZSBpb3dyaXRlOCh2LGEpCQlfX3Jhd193cml0ZWIoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTE2KHYsYSkJCV9fcmF3X3dyaXRldygodiksKGEpKQogI2RlZmluZSBpb3dyaXRlMTZiZSh2LGEpCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNigodikpLChhKSkKLSNkZWZpbmUgaW93cml0ZTMyKHYsYSkJCXdyaXRlbCgodiksKGEpKQorI2RlZmluZSBpb3dyaXRlMzIodixhKQkJX19yYXdfd3JpdGVsKCh2KSwoYSkpCiAjZGVmaW5lIGlvd3JpdGUzMmJlKHYsYSkJX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKCh2KSksKGEpKQogCi0jZGVmaW5lIGlvcmVhZDhfcmVwKGEsIGQsIGMpCXJlYWRzYigoYSksIChkKSwgKGMpKQotI2RlZmluZSBpb3JlYWQxNl9yZXAoYSwgZCwgYykJcmVhZHN3KChhKSwgKGQpLCAoYykpCi0jZGVmaW5lIGlvcmVhZDMyX3JlcChhLCBkLCBjKQlyZWFkc2woKGEpLCAoZCksIChjKSkKKyNkZWZpbmUgaW9yZWFkOF9yZXAoYSwgZCwgYykJX19yYXdfcmVhZHNiKChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDE2X3JlcChhLCBkLCBjKQlfX3Jhd19yZWFkc3coKGEpLCAoZCksIChjKSkKKyNkZWZpbmUgaW9yZWFkMzJfcmVwKGEsIGQsIGMpCV9fcmF3X3JlYWRzbCgoYSksIChkKSwgKGMpKQogCi0jZGVmaW5lIGlvd3JpdGU4X3JlcChhLCBzLCBjKQl3cml0ZXNiKChhKSwgKHMpLCAoYykpCi0jZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSwgcywgYykJd3JpdGVzdygoYSksIChzKSwgKGMpKQotI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsIHMsIGMpCXdyaXRlc2woKGEpLCAocyksIChjKSkKKyNkZWZpbmUgaW93cml0ZThfcmVwKGEsIHMsIGMpCV9fcmF3X3dyaXRlc2IoKGEpLCAocyksIChjKSkKKyNkZWZpbmUgaW93cml0ZTE2X3JlcChhLCBzLCBjKQlfX3Jhd193cml0ZXN3KChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGUzMl9yZXAoYSwgcywgYykJX19yYXdfd3JpdGVzbCgoYSksIChzKSwgKGMpKQogCi0jZGVmaW5lIG1taW93YigpCXdtYigpCS8qIHN5bmNvIG9uIFNILTRBLCBvdGhlcndpc2UgYSBub3AgKi8KKy8qIHN5bmNvIG9uIFNILTRBLCBvdGhlcndpc2UgYSBub3AgKi8KKyNkZWZpbmUgbW1pb3diKCkJCXdtYigpCiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2U7CisKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEgYm9hcmQtc3BlY2lmaWMKLSAqIGlvcG9ydF9tYXAgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUgYXJiaXRyYXJ5IHBvcnQgYmFzZS4KKyAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZXRob2QgZm9yIHRoZSBnZW5lcmljIGNhc2Ugd2hlcmUgYQorICogYm9hcmQtc3BlY2lmaWMgaW9wb3J0X21hcCBzaW1wbHkgbmVlZHMgdG8gcmV0dXJuIHRoZSBwb3J0ICsgc29tZQorICogYXJiaXRyYXJ5IHBvcnQgYmFzZS4KICAqCiAgKiBXZSB1c2UgdGhpcyBhdCBib2FyZCBzZXR1cCB0aW1lIHRvIGltcGxpY2l0bHkgc2V0IHRoZSBwb3J0IGJhc2UsIGFuZAogICogYXMgYSByZXN1bHQsIHdlIGNhbiB1c2UgdGhlIGdlbmVyaWMgaW9wb3J0X21hcC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2lvX3BvcnRfYmFzZSh1bnNpZ25lZCBsb25nIHBiYXNlKQogewotCWV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKLQogCWdlbmVyaWNfaW9fYmFzZSA9IHBiYXNlOwogfQogCiAjZGVmaW5lIF9faW9wb3J0X21hcChwLCBuKSBzaF9tdi5tdl9pb3BvcnRfbWFwKChwKSwgKG4pKQogCiAvKiBXZSByZWFsbHkgd2FudCB0byB0cnkgYW5kIGdldCB0aGVzZSB0byBtZW1jcHkgZXRjICovCi1leHRlcm4gdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGludCwgdW5zaWduZWQgbG9uZyk7Ci0KLS8qIFN1cGVySCBvbi1jaGlwIEkvTyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjdHJsX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBjdHJsX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGN0cmxfaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBjdHJsX2lucSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRiKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkciA9IGI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX291dHcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0gICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkciA9IGI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX291dHEodW5zaWduZWQgbG9uZyBsb25nIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyopYWRkciA9IGI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX2RlbGF5KHZvaWQpCi17Ci0jaWZkZWYgUDJTRUcKLQljdHJsX2ludyhQMlNFRyk7Ci0jZW5kaWYKLX0KK3ZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgaW50LCB1bnNpZ25lZCBsb25nKTsKIAogLyogUXVhZC13b3JkIHJlYWwtbW9kZSBJL08sIGRvbid0IGFzay4uICovCiB1bnNpZ25lZCBsb25nIGxvbmcgcGVla19yZWFsX2FkZHJlc3NfcSh1bnNpZ25lZCBsb25nIGxvbmcgYWRkcik7CkBAIC0zNDcsOSArMjczLDE1IEBACiAJX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgX1BBR0VfQ0FDSEFCTEUpCiAjZGVmaW5lIHAzX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCQlcCiAJX19pb3JlbWFwKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCisjZGVmaW5lIGlvcmVtYXBfcHJvdChvZmZzZXQsIHNpemUsIGZsYWdzKQkJXAorCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCiAjZGVmaW5lIGlvdW5tYXAoYWRkcikJCQkJCVwKIAlfX2lvdW5tYXAoKGFkZHIpKQogCisjZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAorCXByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCisJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgKHBvcnQpLCAodTMyKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKwogLyoKICAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KICAqIGFjY2VzcwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaAppbmRleCA5MmZjNjA3Li4xZTVkMzc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaApAQCAtMzMsMTMgKzMzLDYgQEAKIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHN3KSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0c2wpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLXU4IElPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkYikodm9pZCBfX2lvbWVtICopOwotdTE2IElPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkdykodm9pZCBfX2lvbWVtICopOwotdTMyIElPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkbCkodm9pZCBfX2lvbWVtICopOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGViKSh1OCwgdm9pZCBfX2lvbWVtICopOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGV3KSh1MTYsIHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlbCkodTMyLCB2b2lkIF9faW9tZW0gKik7Ci0KIHZvaWQgKklPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3JlbWFwKSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvdW5tYXApKHZvaWQgKmFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCA2MTk1YTUzLi5kMzE5YmFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTQxLDYgKzQxLDkgQEAKICNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCiAjZGVmaW5lIGlycV9kZW11eChpcnEpCQlzaF9tdi5tdl9pcnFfZGVtdXgoaXJxKQogCit2b2lkIGluaXRfSVJRKHZvaWQpOworYXNtbGlua2FnZSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIGV4dGVybiB2b2lkIGlycV9jdHhfaW5pdChpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGlycV9jdHhfZXhpdChpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCmluZGV4IDQ5Y2Q2OTAuLjBiOWY4OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rZGVidWcuaApAQCAtNCw2ICs0LDcgQEAKIC8qIEdyb3NzbHkgbWlzbmFtZWQuICovCiBlbnVtIGRpZV92YWwgewogCURJRV9UUkFQLAorCURJRV9PT1BTLAogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX0tERUJVR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzhkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fQVNNX1NIX0tQUk9CRVNfSAorI2RlZmluZSBfX0FTTV9TSF9LUFJPQkVTX0gKKworI2lmZGVmIENPTkZJR19LUFJPQkVTCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCit0eXBlZGVmIHUxNiBrcHJvYmVfb3Bjb2RlX3Q7CisjZGVmaW5lIEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04JMHhjMzNhCisKKyNkZWZpbmUgTUFYX0lOU05fU0laRSAxNgorI2RlZmluZSBNQVhfU1RBQ0tfU0laRSA2NAorI2RlZmluZSBNSU5fU1RBQ0tfU0laRShBRERSKSAoKChNQVhfU1RBQ0tfU0laRSkgPCBcCisJKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKSBcCisJPyAoTUFYX1NUQUNLX1NJWkUpIFwKKwk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkKKworI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKQkJKChyZWdzKS0+cmVnc1swXSkKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZQkwCisKK3N0cnVjdCBrcHJvYmU7CisKK3ZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKik7Cit2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOwordm9pZCBqcHJvYmVfcmV0dXJuX2VuZCh2b2lkKTsKKworLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24qLworc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiB7CisJLyogY29weSBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbltNQVhfSU5TTl9TSVpFXTsKK307CisKK3N0cnVjdCBwcmV2X2twcm9iZSB7CisJc3RydWN0IGtwcm9iZSAqa3A7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7Cit9OworCisvKiBwZXItY3B1IGtwcm9iZSBjb250cm9sIGJsb2NrICovCitzdHJ1Y3Qga3Byb2JlX2N0bGJsayB7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcganByb2JlX3NhdmVkX3IxNTsKKwlzdHJ1Y3QgcHRfcmVncyBqcHJvYmVfc2F2ZWRfcmVnczsKKwlrcHJvYmVfb3Bjb2RlX3QganByb2Jlc19zdGFja1tNQVhfU1RBQ0tfU0laRV07CisJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlOworfTsKKworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CitleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQga3Byb2JlX2hhbmRsZV9pbGxzbG90KHVuc2lnbmVkIGxvbmcgcGMpOworI2Vsc2UKKworI2RlZmluZSBrcHJvYmVfaGFuZGxlX2lsbHNsb3QocGMpCSgtMSkKKworI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCisjZW5kaWYgLyogX19BU01fU0hfS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGIyZTQxMjQuLmYxYmFlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCkBAIC00MiwxMyArNDIsNiBAQAogCXZvaWQgKCptdl9vdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAl2b2lkICgqbXZfb3V0c2wpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLQl1OCAoKm12X3JlYWRiKSh2b2lkIF9faW9tZW0gKik7Ci0JdTE2ICgqbXZfcmVhZHcpKHZvaWQgX19pb21lbSAqKTsKLQl1MzIgKCptdl9yZWFkbCkodm9pZCBfX2lvbWVtICopOwotCXZvaWQgKCptdl93cml0ZWIpKHU4LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRlbCkodTMyLCB2b2lkIF9faW9tZW0gKik7Ci0KIAlpbnQgKCptdl9pcnFfZGVtdXgpKGludCBpcnEpOwogCiAJdm9pZCAoKm12X2luaXRfaXJxKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyYjYzMi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21pZ29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01JR09SX0gKLSNkZWZpbmUgX19BU01fU0hfTUlHT1JfSAotCi0vKgotICogbGludXgvaW5jbHVkZS9hc20tc2gvbWlnb3IuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucwotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNyBOb2J1aGlybyBJd2FtYXRzdQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotCi0vKiBHUElPICovCi0jZGVmaW5lIFBPUlRfUEFDUiAweGE0MDUwMTAwCi0jZGVmaW5lIFBPUlRfUERDUiAweGE0MDUwMTA2Ci0jZGVmaW5lIFBPUlRfUEVDUiAweGE0MDUwMTA4Ci0jZGVmaW5lIFBPUlRfUEhDUiAweGE0MDUwMTBlCi0jZGVmaW5lIFBPUlRfUEpDUiAweGE0MDUwMTEwCi0jZGVmaW5lIFBPUlRfUEtDUiAweGE0MDUwMTEyCi0jZGVmaW5lIFBPUlRfUExDUiAweGE0MDUwMTE0Ci0jZGVmaW5lIFBPUlRfUE1DUiAweGE0MDUwMTE2Ci0jZGVmaW5lIFBPUlRfUFJDUiAweGE0MDUwMTFjCi0jZGVmaW5lIFBPUlRfUFRDUiAweGE0MDUwMTQwCi0jZGVmaW5lIFBPUlRfUFVDUiAweGE0MDUwMTQyCi0jZGVmaW5lIFBPUlRfUFZDUiAweGE0MDUwMTQ0Ci0jZGVmaW5lIFBPUlRfUFdDUiAweGE0MDUwMTQ2Ci0jZGVmaW5lIFBPUlRfUFhDUiAweGE0MDUwMTQ4Ci0jZGVmaW5lIFBPUlRfUFlDUiAweGE0MDUwMTRhCi0jZGVmaW5lIFBPUlRfUFpDUiAweGE0MDUwMTRjCi0jZGVmaW5lIFBPUlRfUEFEUiAweGE0MDUwMTIwCi0jZGVmaW5lIFBPUlRfUEhEUiAweGE0MDUwMTJlCi0jZGVmaW5lIFBPUlRfUFREUiAweGE0MDUwMTYwCi0jZGVmaW5lIFBPUlRfUFdEUiAweGE0MDUwMTY2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCi0KLSNkZWZpbmUgUE9SVF9NU0VMQ1JCIDB4YTQwNTAxODIKLQotI2RlZmluZSBQT1JUX1BTRUxBIDB4YTQwNTAxNGUKLSNkZWZpbmUgUE9SVF9QU0VMQiAweGE0MDUwMTUwCi0jZGVmaW5lIFBPUlRfUFNFTEMgMHhhNDA1MDE1MgotI2RlZmluZSBQT1JUX1BTRUxEIDB4YTQwNTAxNTQKLSNkZWZpbmUgUE9SVF9QU0VMRSAweGE0MDUwMTU2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQiAweGE0MDUwMTVhCi0jZGVmaW5lIFBPUlRfSElaQ1JDIDB4YTQwNTAxNWMKLQotI2RlZmluZSBCU0NfQ1M2QUJDUiAweGZlYzEwMDFjCi0KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLQotaW50IG1pZ29yX2xjZF9xdmdhX3NldHVwKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAotCQkJIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NSUdPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXpvbmUuaAppbmRleCAyOTY5MjUzLi43ZjUzNjNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW16b25lLmgKQEAgLTQsNiArNCw4IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwogI2RlZmluZSBOT0RFX0RBVEEobmlkKQkJKG5vZGVfZGF0YVtuaWRdKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDc3ZmI4YmYuLjU4NzFkNzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCisjZGVmaW5lIHB0ZV9wZ3Byb3QoeCkgX19wZ3Byb3QocHRlX3ZhbCh4KSAmIFBURV9GTEFHU19NQVNLKQorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhNGE4ZjhiLi41MjIyMGQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNzYsNiArNzYsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgUFRFX1BIWVNfTUFTSwkJKFBIWVNfQUREUl9NQVNLICYgUEFHRV9NQVNLKQorI2RlZmluZSBQVEVfRkxBR1NfTUFTSwkJKH4oUFRFX1BIWVNfTUFTSykgPDwgUEFHRV9TSElGVCkKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogI2RlZmluZSBWTUFMTE9DX1NUQVJUCShQM1NFRykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDE1ZDlmOTIuLjY5MzM2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKQEAgLTQzLDExICs0NCw1MiBAQAogCUNQVV9TSF9OT05FCiB9OwogCisvKgorICogVExCIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIERlZmluZWQgZm9yIGJvdGggSSBhbmQgRCB0bGIsIHBlci1wcm9jZXNzb3IuCisgKi8KK3N0cnVjdCB0bGJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGZpcnN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0OworCisJdW5zaWduZWQgaW50IGVudHJpZXM7CisJdW5zaWduZWQgaW50IHN0ZXA7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IHNoX2NwdWluZm8geworCXVuc2lnbmVkIGludCB0eXBlOworCWludCBjdXRfbWFqb3IsIGN1dF9taW5vcjsKKwl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwl1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7CisKKwlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7CS8qIFByaW1hcnkgSS1jYWNoZSAqLworCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsJLyogUHJpbWFyeSBELWNhY2hlICovCisJc3RydWN0IGNhY2hlX2luZm8gc2NhY2hlOwkvKiBTZWNvbmRhcnkgY2FjaGUgKi8KKworCS8qIFRMQiBpbmZvICovCisJc3RydWN0IHRsYl9pbmZvIGl0bGI7CisJc3RydWN0IHRsYl9pbmZvIGR0bGI7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKKworZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107CisjZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCisjZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCisKIC8qIEZvcndhcmQgZGVjbCAqLwotc3RydWN0IHNoX2NwdWluZm87CitzdHJ1Y3Qgc2VxX29wZXJhdGlvbnM7CisKK2V4dGVybiBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVnczsKIAogLyogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyAqLwogY29uc3QgY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHN0cnVjdCBzaF9jcHVpbmZvICpjKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogaW50IHZzeXNjYWxsX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAppbmRleCAwZGFkZDc1Li5hNDZhMDIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTEwLDkgKzEwLDkgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogLyoKQEAgLTI2LDIzICsyNiw3IEBACiAjZGVmaW5lIENDTl9DVlIJCTB4ZmYwMDAwNDAKICNkZWZpbmUgQ0NOX1BSUgkJMHhmZjAwMDA0NAogCi1zdHJ1Y3Qgc2hfY3B1aW5mbyB7Ci0JdW5zaWduZWQgaW50IHR5cGU7Ci0JaW50IGN1dF9tYWpvciwgY3V0X21pbm9yOwotCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwotCXVuc2lnbmVkIGxvbmcgYXNpZF9jYWNoZTsKLQotCXN0cnVjdCBjYWNoZV9pbmZvIGljYWNoZTsJLyogUHJpbWFyeSBJLWNhY2hlICovCi0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwkvKiBQcmltYXJ5IEQtY2FjaGUgKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBzY2FjaGU7CS8qIFNlY29uZGFyeSBjYWNoZSAqLwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoTDFfQ0FDSEVfQllURVMpKSk7Ci0KLWV4dGVybiBzdHJ1Y3Qgc2hfY3B1aW5mbyBjcHVfZGF0YVtdOwotI2RlZmluZSBib290X2NwdV9kYXRhIGNwdV9kYXRhWzBdCi0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQotI2RlZmluZSByYXdfY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXQorYXNtbGlua2FnZSB2b2lkIF9faW5pdCBzaF9jcHVfaW5pdCh2b2lkKTsKIAogLyoKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IuCkBAIC0xOTYsNiArMTgwLDggQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5yZWdzWzE1XSkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisKICNkZWZpbmUgY3B1X3NsZWVwKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzbGVlcCIgOiA6IDogIm1lbW9yeSIpCiAjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA3NzBkNTE2Li5iMGI0ODI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGNwdS9yZWdpc3RlcnMuaD4KIApAQCAtMzYsNDYgKzM1LDYgQEAKIAk6ICIxIiAoX19kdW1teSkpOyBcCiBwYzsgfSkKIAotLyoKLSAqIFRMQiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBEZWZpbmVkIGZvciBib3RoIEkgYW5kIEQgdGxiLCBwZXItcHJvY2Vzc29yLgotICovCi1zdHJ1Y3QgdGxiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBmaXJzdDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdDsKLQotCXVuc2lnbmVkIGludCBlbnRyaWVzOwotCXVuc2lnbmVkIGludCBzdGVwOwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX07Ci0KLXN0cnVjdCBzaF9jcHVpbmZvIHsKLQllbnVtIGNwdV90eXBlIHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7Ci0JdW5zaWduZWQgbG9uZyBhc2lkX2NhY2hlOwotCi0JdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1vZHVsZV9jbG9jazsKLQotCS8qIENhY2hlIGluZm8gKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7Ci0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwotCXN0cnVjdCBjYWNoZV9pbmZvIHNjYWNoZTsKLQotCS8qIFRMQiBpbmZvICovCi0Jc3RydWN0IHRsYl9pbmZvIGl0bGI7Ci0Jc3RydWN0IHRsYl9pbmZvIGR0bGI7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107Ci0jZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCi0jZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCi0KICNlbmRpZgogCiAvKgpAQCAtMTY5LDggKzEyOCw2IEBACiAjZGVmaW5lIElOSVRfTU1BUCBcCiB7ICZpbml0X21tLCAwLCAwLCBOVUxMLCBQQUdFX1NIQVJFRCwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQywgMSwgTlVMTCwgTlVMTCB9CiAKLWV4dGVybiAgc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7Ci0KICNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJXAogCS5zcAkJPSBzaXplb2YoaW5pdF9zdGFjaykgKwlcCiAJCQkgIChsb25nKSAmaW5pdF9zdGFjaywJXApAQCAtMjY5LDYgKzIyNiw4IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+c3ApCisKICNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGI4NmFlYWIuLjNhZDE4ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtODcsMTIgKzg3LDE4IEBACiAJdW5zaWduZWQgbG9uZwltb2Q7CiB9OwogCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgkvKiBHZW5lcmFsIHJlZ2lzdGVycyAqLworI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTCTE0CS8qIEZQVSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUwkxNQorCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQwkJMzEJLyogZ2V0IHRoZSBFTEYgZmRwaWMgbG9hZG1hcCBhZGRyZXNzICovCiAKICNkZWZpbmUgUFRSQUNFX0dFVEZEUElDX0VYRUMJMAkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgZXhlY3V0YWJsZSBsb2FkbWFwICovCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19JTlRFUlAJMQkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgaW50ZXJwcmV0ZXIgbG9hZG1hcCAqLwogCi0jZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CisjZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CS8qIERTUCByZWdpc3RlcnMgKi8KICNkZWZpbmUJUFRSQUNFX1NFVERTUFJFR1MJNTYKICNlbmRpZgogCkBAIC0xMTcsNiArMTIzLDkgQEAKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCiAJCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKyNkZWZpbmUgdGFza19wdF9kc3ByZWdzKHRhc2spIFwKKwkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCisJCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQogI2Vsc2UKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3I3NzgwcnAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcjc3ODBycC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDZmNzM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcjc3ODBycC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfUkVORVNBU19SNzc4MFJQX0gKLSNkZWZpbmUgX19BU01fU0hfUkVORVNBU19SNzc4MFJQX0gKLQotLyogQm94IHNwZWNpZmljIGFkZHJlc3Nlcy4gICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfUjc3ODBNUCkKLSNkZWZpbmUgUEFfQkNSICAgICAgICAgIDB4YTQwMDAwMDAgICAgICAvKiBGUEdBICovCi0jZGVmaW5lIFBBX1NEUE9XCSgtMSkKLQotI2RlZmluZSBQQV9JUkxNU0sgICAgICAgKFBBX0JDUisweDAwMDApIC8qIEludGVycnVwdCBNYXNrIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfSVJMTU9OICAgICAgIChQQV9CQ1IrMHgwMDAyKSAvKiBJbnRlcnJ1cHQgU3RhdHVzIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfSVJMUFJJMSAgICAgIChQQV9CQ1IrMHgwMDA0KSAvKiBJbnRlcnJ1cHQgUHJpb3J0eSAxICovCi0jZGVmaW5lIFBBX0lSTFBSSTIgICAgICAoUEFfQkNSKzB4MDAwNikgLyogSW50ZXJydXB0IFByaW9ydHkgMiAqLwotI2RlZmluZSBQQV9JUkxQUkkzICAgICAgKFBBX0JDUisweDAwMDgpIC8qIEludGVycnVwdCBQcmlvcnR5IDMgKi8KLSNkZWZpbmUgUEFfSVJMUFJJNCAgICAgIChQQV9CQ1IrMHgwMDBhKSAvKiBJbnRlcnJ1cHQgUHJpb3J0eSA0ICovCi0jZGVmaW5lIFBBX1JTVENUTCAgICAgICAoUEFfQkNSKzB4MDAwYykgLyogUmVzZXQgQ29udHJvbCAqLwotI2RlZmluZSBQQV9QQ0lCRCAgICAgICAgKFBBX0JDUisweDAwMGUpIC8qIFBDSSBCb2FyZCBkZXRlY3QgY29udHJvbCAqLwotI2RlZmluZSBQQV9QQ0lDRCAgICAgICAgKFBBX0JDUisweDAwMTApIC8qIFBDSSBDb25lY3RvciBkZXRlY3QgY29udHJvbCAqLwotI2RlZmluZSBQQV9FWFRHSU8gICAgICAgKFBBX0JDUisweDAwMTYpIC8qIEV4dGVuc2lvbiBHUElPIENvbnRyb2wgKi8KLSNkZWZpbmUgUEFfSVZEUk1PTiAgICAgIChQQV9CQ1IrMHgwMDE4KSAvKiBpVkRSIE1vbml0ZXIgY29udHJvbCAqLwotI2RlZmluZSBQQV9JVkRSQ1RMICAgICAgKFBBX0JDUisweDAwMWEpIC8qIGlWRFIgY29udHJvbCAqLwotI2RlZmluZSBQQV9PQkxFRCAgICAgICAgKFBBX0JDUisweDAwMWMpIC8qIE9uIEJvYXJkIExFRCBjb250cm9sICovCi0jZGVmaW5lIFBBX09CU1cgICAgICAgICAoUEFfQkNSKzB4MDAxZSkgLyogT24gQm9hcmQgU3dpdGNoIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfQVVESU9TRUwgICAgIChQQV9CQ1IrMHgwMDIwKSAvKiBTb3VuZCBJbnRlcmZhY2UgU2VsZWN0IGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfRVhUUExSICAgICAgIChQQV9CQ1IrMHgwMDFlKSAvKiBFeHRlbnRpb24gUGluIFBvbGFyaXR5IGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfVFBDVEwgICAgICAgIChQQV9CQ1IrMHgwMTAwKSAvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgY29udHJvbCAqLwotI2RlZmluZSBQQV9UUERDS0NUTCAgICAgKFBBX0JDUisweDAxMDIpIC8qIFRvdWNoIFBhbmVsIEFjY2VzcyBkYXRhIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfVFBDVExDTFIgICAgIChQQV9CQ1IrMHgwMTA0KSAvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgY29udHJvbCAqLwotI2RlZmluZSBQQV9UUFhQT1MgICAgICAgKFBBX0JDUisweDAxMDYpIC8qIFRvdWNoIFBhbmVsIFggcG9zaXRpb24gY29udHJvbCAqLwotI2RlZmluZSBQQV9UUFlQT1MgICAgICAgKFBBX0JDUisweDAxMDgpIC8qIFRvdWNoIFBhbmVsIFkgcG9zaXRpb24gY29udHJvbCAqLwotI2RlZmluZSBQQV9EQlNXICAgICAgICAgKFBBX0JDUisweDAyMDApIC8qIERlYnVnIEJvYXJkIFN3aXRjaCBjb250cm9sICovCi0jZGVmaW5lIFBBX0NGQ1RMICAgICAgICAoUEFfQkNSKzB4MDMwMCkgLyogQ0YgVGltaW5nIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfQ0ZQT1cgICAgICAgIChQQV9CQ1IrMHgwMzAyKSAvKiBDRiBQb3dlciBjb250cm9sICovCi0jZGVmaW5lIFBBX0NGQ0RJTlRDTFIgICAoUEFfQkNSKzB4MDMwNCkgLyogQ0YgSW5zZXJ0IEludGVycnVwdCBjbGVhciAqLwotI2RlZmluZSBQQV9TQ1NNUjAgICAgICAgKFBBX0JDUisweDA0MDApIC8qIFNDSUYwIFNlcmlhbCBtb2RlIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NCUlIwICAgICAgIChQQV9CQ1IrMHgwNDA0KSAvKiBTQ0lGMCBCaXQgcmF0ZSBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDU0NSMCAgICAgICAoUEFfQkNSKzB4MDQwOCkgLyogU0NJRjAgU2VyaWFsIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NGVERSMCAgICAgIChQQV9CQ1IrMHgwNDBjKSAvKiBTQ0lGMCBTZW5kIEZJRk8gY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ0ZTUjAgICAgICAgKFBBX0JDUisweDA0MTApIC8qIFNDSUYwIFNlcmlhbCBzdGF0dXMgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ0ZSRFIwICAgICAgKFBBX0JDUisweDA0MTQpIC8qIFNDSUYwIFJlY2VpdmUgRklGTyBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDRkNSMCAgICAgICAoUEFfQkNSKzB4MDQxOCkgLyogU0NJRjAgRklGTyBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDVEZEUjAgICAgICAoUEFfQkNSKzB4MDQxYykgLyogU0NJRjAgU2VuZCBGSUZPIGRhdGEgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ1JGRFIwICAgICAgKFBBX0JDUisweDA0MjApIC8qIFNDSUYwIFJlY2VpdmUgRklGTyBkYXRhIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NTUFRSMCAgICAgIChQQV9CQ1IrMHgwNDI0KSAvKiBTQ0lGMCBTZXJpYWwgUG9ydCBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDTFNSMCAgICAgICAoUEFfQkNSKzB4MDQyOCkgLyogU0NJRjAgTGluZSBTdGF0dXMgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ1JFUjAgICAgICAgKFBBX0JDUisweDA0MmMpIC8qIFNDSUYwIFNlcmlhbCBFcnJvciBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDU01SMSAgICAgICAoUEFfQkNSKzB4MDUwMCkgLyogU0NJRjEgU2VyaWFsIG1vZGUgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ0JSUjEgICAgICAgKFBBX0JDUisweDA1MDQpIC8qIFNDSUYxIEJpdCByYXRlIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NTQ1IxICAgICAgIChQQV9CQ1IrMHgwNTA4KSAvKiBTQ0lGMSBTZXJpYWwgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ0ZURFIxICAgICAgKFBBX0JDUisweDA1MGMpIC8qIFNDSUYxIFNlbmQgRklGTyBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDRlNSMSAgICAgICAoUEFfQkNSKzB4MDUxMCkgLyogU0NJRjEgU2VyaWFsIHN0YXR1cyBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDRlJEUjEgICAgICAoUEFfQkNSKzB4MDUxNCkgLyogU0NJRjEgUmVjZWl2ZSBGSUZPIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NGQ1IxICAgICAgIChQQV9CQ1IrMHgwNTE4KSAvKiBTQ0lGMSBGSUZPIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NURkRSMSAgICAgIChQQV9CQ1IrMHgwNTFjKSAvKiBTQ0lGMSBTZW5kIEZJRk8gZGF0YSBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDUkZEUjEgICAgICAoUEFfQkNSKzB4MDUyMCkgLyogU0NJRjEgUmVjZWl2ZSBGSUZPIGRhdGEgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ1NQVFIxICAgICAgKFBBX0JDUisweDA1MjQpIC8qIFNDSUYxIFNlcmlhbCBQb3J0IGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NMU1IxICAgICAgIChQQV9CQ1IrMHgwNTI4KSAvKiBTQ0lGMSBMaW5lIFN0YXR1cyBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDUkVSMSAgICAgICAoUEFfQkNSKzB4MDUyYykgLyogU0NJRjEgU2VyaWFsIEVycm9yIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU01DUiAgICAgICAgIChQQV9CQ1IrMHgwNjAwKSAvKiAyLXdpcmUgU2VyaWFsIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU01TTUFEUiAgICAgIChQQV9CQ1IrMHgwNjAyKSAvKiAyLXdpcmUgU2VyaWFsIFNsYXZlIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU01NUiAgICAgICAgIChQQV9CQ1IrMHgwNjA0KSAvKiAyLXdpcmUgU2VyaWFsIE1vZGUgY29udHJvbCAqLwotI2RlZmluZSBQQV9TTVNBRFIxICAgICAgKFBBX0JDUisweDA2MDYpIC8qIDItd2lyZSBTZXJpYWwgQWRkcmVzczEgY29udHJvbCAqLwotI2RlZmluZSBQQV9TTVRSRFIxICAgICAgKFBBX0JDUisweDA2NDYpIC8qIDItd2lyZSBTZXJpYWwgRGF0YTEgY29udHJvbCAqLwotI2RlZmluZSBQQV9WRVJSRUcgICAgICAgKFBBX0JDUisweDA3MDApIC8qIEZQR0EgVmVyc2lvbiBSZWdpc3RlciAqLwotI2RlZmluZSBQQV9QT0ZGICAgICAgICAgKFBBX0JDUisweDA4MDApIC8qIFN5c3RlbSBQb3dlciBPZmYgY29udHJvbCAqLwotI2RlZmluZSBQQV9QTVIgICAgICAgICAgKFBBX0JDUisweDA5MDApIC8qICAqLwotCi0jZGVmaW5lIElSTENOVFIxICAgICAgICAoUEFfQkNSICsgMCkgICAgLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIxICovCi0jZGVmaW5lIElWRFJfQ0tfT04JOAkJLyogaVZEUiBDbG9jayBPTiAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TSF9SNzc4MFJQKQotI2RlZmluZSBQQV9QT0ZGCQkoLTEpCi0KLSNkZWZpbmUgUEFfQkNSCQkweGE1MDAwMDAwCS8qIEZQR0EgKi8KLSNkZWZpbmUJUEFfSVJMTVNLCShQQV9CQ1IrMHgwMDAwKQkvKiBJbnRlcnJ1cHQgTWFzayBjb250cm9sICovCi0jZGVmaW5lIFBBX0lSTE1PTgkoUEFfQkNSKzB4MDAwMikJLyogSW50ZXJydXB0IFN0YXR1cyBjb250cm9sICovCi0jZGVmaW5lCVBBX1NEUE9XCShQQV9CQ1IrMHgwMDA0KQkvKiBTRCBQb3dlciBjb250cm9sICovCi0jZGVmaW5lCVBBX1JTVENUTAkoUEFfQkNSKzB4MDAwNikJLyogRGV2aWNlIFJlc2V0IGNvbnRyb2wgKi8KLSNkZWZpbmUJUEFfUENJQkQJKFBBX0JDUisweDAwMDgpCS8qIFBDSSBCb2FyZCBkZXRlY3QgY29udHJvbCAqLwotI2RlZmluZQlQQV9QQ0lDRAkoUEFfQkNSKzB4MDAwYSkJLyogUENJIENvbmVjdG9yIGRldGVjdCBjb250cm9sICovCi0jZGVmaW5lCVBBX1pJR0lPMQkoUEFfQkNSKzB4MDAwYykJLyogWmlnYmVlIElPIGNvbnRyb2wgMSAqLwotI2RlZmluZQlQQV9aSUdJTzIJKFBBX0JDUisweDAwMGUpCS8qIFppZ2JlZSBJTyBjb250cm9sIDIgKi8KLSNkZWZpbmUJUEFfWklHSU8zCShQQV9CQ1IrMHgwMDEwKQkvKiBaaWdiZWUgSU8gY29udHJvbCAzICovCi0jZGVmaW5lCVBBX1pJR0lPNAkoUEFfQkNSKzB4MDAxMikJLyogWmlnYmVlIElPIGNvbnRyb2wgNCAqLwotI2RlZmluZQlQQV9JVkRSTU9OCShQQV9CQ1IrMHgwMDE0KQkvKiBpVkRSIE1vbml0ZXIgY29udHJvbCAqLwotI2RlZmluZQlQQV9JVkRSQ1RMCShQQV9CQ1IrMHgwMDE2KQkvKiBpVkRSIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfT0JMRUQJKFBBX0JDUisweDAwMTgpCS8qIE9uIEJvYXJkIExFRCBjb250cm9sICovCi0jZGVmaW5lIFBBX09CU1cJCShQQV9CQ1IrMHgwMDFhKQkvKiBPbiBCb2FyZCBTd2l0Y2ggY29udHJvbCAqLwotI2RlZmluZSBQQV9BVURJT1NFTAkoUEFfQkNSKzB4MDAxYykJLyogU291bmQgSW50ZXJmYWNlIFNlbGVjdCBjb250cm9sICovCi0jZGVmaW5lIFBBX0VYVFBMUgkoUEFfQkNSKzB4MDAxZSkJLyogRXh0ZW50aW9uIFBpbiBQb2xhcml0eSBjb250cm9sICovCi0jZGVmaW5lIFBBX1RQQ1RMCShQQV9CQ1IrMHgwMTAwKQkvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgY29udHJvbCAqLwotI2RlZmluZSBQQV9UUERDS0NUTAkoUEFfQkNSKzB4MDEwMikJLyogVG91Y2ggUGFuZWwgQWNjZXNzIGRhdGEgY29udHJvbCAqLwotI2RlZmluZSBQQV9UUENUTENMUgkoUEFfQkNSKzB4MDEwNCkJLyogVG91Y2ggUGFuZWwgQWNjZXNzIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfVFBYUE9TCShQQV9CQ1IrMHgwMTA2KQkvKiBUb3VjaCBQYW5lbCBYIHBvc2l0aW9uIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfVFBZUE9TCShQQV9CQ1IrMHgwMTA4KQkvKiBUb3VjaCBQYW5lbCBZIHBvc2l0aW9uIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfREJERVQJKFBBX0JDUisweDAyMDApCS8qIERlYnVnIEJvYXJkIGRldGVjdCBjb250cm9sICovCi0jZGVmaW5lIFBBX0RCRElTUENUTAkoUEFfQkNSKzB4MDIwMikJLyogRGVidWcgQm9hcmQgRG90IHRpbWluZyBjb250cm9sICovCi0jZGVmaW5lIFBBX0RCU1cJCShQQV9CQ1IrMHgwMjA0KQkvKiBEZWJ1ZyBCb2FyZCBTd2l0Y2ggY29udHJvbCAqLwotI2RlZmluZSBQQV9DRkNUTAkoUEFfQkNSKzB4MDMwMCkJLyogQ0YgVGltaW5nIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfQ0ZQT1cJKFBBX0JDUisweDAzMDIpCS8qIENGIFBvd2VyIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfQ0ZDRElOVENMUgkoUEFfQkNSKzB4MDMwNCkJLyogQ0YgSW5zZXJ0IEludGVycnVwdCBjbGVhciAqLwotI2RlZmluZSBQQV9TQ1NNUgkoUEFfQkNSKzB4MDQwMCkJLyogU0NJRiBTZXJpYWwgbW9kZSBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDQlJSCShQQV9CQ1IrMHgwNDAyKQkvKiBTQ0lGIEJpdCByYXRlIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NTQ1IJKFBBX0JDUisweDA0MDQpCS8qIFNDSUYgU2VyaWFsIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NGRFRSCShQQV9CQ1IrMHgwNDA2KQkvKiBTQ0lGIFNlbmQgRklGTyBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDRlNSCShQQV9CQ1IrMHgwNDA4KQkvKiBTQ0lGIFNlcmlhbCBzdGF0dXMgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQ0ZSRFIJKFBBX0JDUisweDA0MGEpCS8qIFNDSUYgUmVjZWl2ZSBGSUZPIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0NGQ1IJKFBBX0JDUisweDA0MGMpCS8qIFNDSUYgRklGTyBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDRkRSCShQQV9CQ1IrMHgwNDBlKQkvKiBTQ0lGIEZJRk8gZGF0YSBjb250cm9sICovCi0jZGVmaW5lIFBBX1NDTFNSCShQQV9CQ1IrMHgwNDEyKQkvKiBTQ0lGIExpbmUgU3RhdHVzIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU01DUgkJKFBBX0JDUisweDA1MDApCS8qIDItd2lyZSBTZXJpYWwgY29udHJvbCAqLwotI2RlZmluZSBQQV9TTVNNQURSCShQQV9CQ1IrMHgwNTAyKQkvKiAyLXdpcmUgU2VyaWFsIFNsYXZlIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU01NUgkJKFBBX0JDUisweDA1MDQpCS8qIDItd2lyZSBTZXJpYWwgTW9kZSBjb250cm9sICovCi0jZGVmaW5lIFBBX1NNU0FEUjEJKFBBX0JDUisweDA1MDYpCS8qIDItd2lyZSBTZXJpYWwgQWRkcmVzczEgY29udHJvbCAqLwotI2RlZmluZSBQQV9TTVRSRFIxCShQQV9CQ1IrMHgwNTQ2KQkvKiAyLXdpcmUgU2VyaWFsIERhdGExIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfVkVSUkVHCShQQV9CQ1IrMHgwNjAwKQkvKiBGUEdBIFZlcnNpb24gUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBQQV9BWDg4Nzk2TAkweGE1ODAwNDAwCS8qIEFYODg3OTZMIEFyZWEgKi8KLSNkZWZpbmUgUEFfU0MxNjAyQlNMQgkweGE2MDAwMDAwCS8qIFNDMTYwMkJTTEIgQXJlYSAqLwotI2RlZmluZSBQQV9JREVfT0ZGU0VUCTB4MWYwCQkvKiBDRiBJREUgT2Zmc2V0ICovCi0jZGVmaW5lIEFYODg3OTZMX0lPX0JBU0UJMHgxMDAwCS8qIEFYODg3OTZMIElPIEJhc2UgQWRkcmVzcyAqLwotCi0jZGVmaW5lIElSTENOVFIxCShQQV9CQ1IgKyAwKQkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcjEgKi8KLQotI2RlZmluZSBJVkRSX0NLX09OCTgJCS8qIGlWRFIgQ2xvY2sgT04gKi8KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfUjc3ODVSUCkKLSNkZWZpbmUgUEFfQkNSCQkweGE0MDAwMDAwCS8qIEZQR0EgKi8KLSNkZWZpbmUgUEFfU0RQT1cJKC0xKQotCi0jZGVmaW5lCVBBX1BDSVNDUgkoUEFfQkNSKzB4MDAwMCkKLSNkZWZpbmUgUEFfSVJMUFJBCShQQV9CQ1IrMHgwMDAyKQotI2RlZmluZQlQQV9JUkxQUkIJKFBBX0JDUisweDAwMDQpCi0jZGVmaW5lCVBBX0lSTFBSQwkoUEFfQkNSKzB4MDAwNikKLSNkZWZpbmUJUEFfSVJMUFJECShQQV9CQ1IrMHgwMDA4KQotI2RlZmluZSBJUkxDTlRSMQkoUEFfQkNSKzB4MDAxMCkKLSNkZWZpbmUJUEFfSVJMUFJFCShQQV9CQ1IrMHgwMDBhKQotI2RlZmluZQlQQV9JUkxQUkYJKFBBX0JDUisweDAwMGMpCi0jZGVmaW5lCVBBX0VYSVJMQ1IJKFBBX0JDUisweDAwMGUpCi0jZGVmaW5lCVBBX0lSTE1DUjEJKFBBX0JDUisweDAwMTApCi0jZGVmaW5lCVBBX0lSTE1DUjIJKFBBX0JDUisweDAwMTIpCi0jZGVmaW5lCVBBX0lSTFNTUjEJKFBBX0JDUisweDAwMTQpCi0jZGVmaW5lCVBBX0lSTFNTUjIJKFBBX0JDUisweDAwMTYpCi0jZGVmaW5lIFBBX0NGVENSCShQQV9CQ1IrMHgwMTAwKQotI2RlZmluZSBQQV9DRlBDUgkoUEFfQkNSKzB4MDEwMikKLSNkZWZpbmUgUEFfUENJQ1IJKFBBX0JDUisweDAxMTApCi0jZGVmaW5lIFBBX0lWRFJDVEwJKFBBX0JDUisweDAxMTIpCi0jZGVmaW5lIFBBX0lWRFJTUgkoUEFfQkNSKzB4MDExNCkKLSNkZWZpbmUgUEFfUERSU1RDUgkoUEFfQkNSKzB4MDExNikKLSNkZWZpbmUgUEFfUE9GRgkJKFBBX0JDUisweDAxMjApCi0jZGVmaW5lIFBBX0xDRENSCShQQV9CQ1IrMHgwMTMwKQotI2RlZmluZSBQQV9UUENSCQkoUEFfQkNSKzB4MDE0MCkKLSNkZWZpbmUgUEFfVFBDS0NSCShQQV9CQ1IrMHgwMTQyKQotI2RlZmluZSBQQV9UUFJTVFIJKFBBX0JDUisweDAxNDQpCi0jZGVmaW5lIFBBX1RQWFBEUgkoUEFfQkNSKzB4MDE0NikKLSNkZWZpbmUgUEFfVFBZUERSCShQQV9CQ1IrMHgwMTQ4KQotI2RlZmluZSBQQV9HUElPUEZSCShQQV9CQ1IrMHgwMTUwKQotI2RlZmluZSBQQV9HUElPRFIJKFBBX0JDUisweDAxNTIpCi0jZGVmaW5lIFBBX09CTEVECShQQV9CQ1IrMHgwMTU0KQotI2RlZmluZSBQQV9TV1NSCQkoUEFfQkNSKzB4MDE1NikKLSNkZWZpbmUgUEFfVkVSUkVHCShQQV9CQ1IrMHgwMTU4KQotI2RlZmluZSBQQV9TTUNSCQkoUEFfQkNSKzB4MDIwMCkKLSNkZWZpbmUgUEFfU01TTUFEUgkoUEFfQkNSKzB4MDIwMikKLSNkZWZpbmUgUEFfU01NUgkJKFBBX0JDUisweDAyMDQpCi0jZGVmaW5lIFBBX1NNU0FEUjEJKFBBX0JDUisweDAyMDYpCi0jZGVmaW5lIFBBX1NNU0FEUjMyCShQQV9CQ1IrMHgwMjQ0KQotI2RlZmluZSBQQV9TTVRSRFIxCShQQV9CQ1IrMHgwMjQ2KQotI2RlZmluZSBQQV9TTVRSRFIxNgkoUEFfQkNSKzB4MDI2NCkKLSNkZWZpbmUgUEFfQ1UzTURSCShQQV9CQ1IrMHgwMzAwKQotI2RlZmluZSBQQV9DVTVNRFIJKFBBX0JDUisweDAzMDIpCi0jZGVmaW5lIFBBX01NU1IJCShQQV9CQ1IrMHgwNDAwKQotCi0jZGVmaW5lIElWRFJfQ0tfT04JNAkJLyogaVZEUiBDbG9jayBPTiAqLwotI2VuZGlmCi0KLSNkZWZpbmUgSExfRlBHQV9JUlFfQkFTRQkyMDAKLSNkZWZpbmUgSExfTlJfSVJMCQkxNQotCi0jZGVmaW5lIElSUV9BWDg4Nzk2CQkoSExfRlBHQV9JUlFfQkFTRSArIDApCi0jZGVmaW5lIElSUV9DRgkJCShITF9GUEdBX0lSUV9CQVNFICsgMSkKLSNkZWZpbmUgSVJRX1BTVwkJCShITF9GUEdBX0lSUV9CQVNFICsgMikKLSNkZWZpbmUgSVJRX0VYVDAJCShITF9GUEdBX0lSUV9CQVNFICsgMykKLSNkZWZpbmUgSVJRX0VYVDEJCShITF9GUEdBX0lSUV9CQVNFICsgNCkKLSNkZWZpbmUgSVJRX0VYVDIJCShITF9GUEdBX0lSUV9CQVNFICsgNSkKLSNkZWZpbmUgSVJRX0VYVDMJCShITF9GUEdBX0lSUV9CQVNFICsgNikKLSNkZWZpbmUgSVJRX0VYVDQJCShITF9GUEdBX0lSUV9CQVNFICsgNykKLSNkZWZpbmUgSVJRX0VYVDUJCShITF9GUEdBX0lSUV9CQVNFICsgOCkKLSNkZWZpbmUgSVJRX0VYVDYJCShITF9GUEdBX0lSUV9CQVNFICsgOSkKLSNkZWZpbmUgSVJRX0VYVDcJCShITF9GUEdBX0lSUV9CQVNFICsgMTApCi0jZGVmaW5lIElSUV9TTUJVUwkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxMSkKLSNkZWZpbmUgSVJRX1RQCQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxMikKLSNkZWZpbmUgSVJRX1JUQwkJCShITF9GUEdBX0lSUV9CQVNFICsgMTMpCi0jZGVmaW5lIElSUV9USF9BTEVSVAkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxNCkKLSNkZWZpbmUgSVJRX1NDSUYwCQkoSExfRlBHQV9JUlFfQkFTRSArIDE1KQotI2RlZmluZSBJUlFfU0NJRjEJCShITF9GUEdBX0lSUV9CQVNFICsgMTYpCi0KLXVuc2lnbmVkIGNoYXIgKmhpZ2hsYW5kZXJfcGxhdF9pcnFfc2V0dXAodm9pZCk7Ci0KLSNlbmRpZiAgLyogX19BU01fU0hfUkVORVNBU19SNzc4MFJQICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ydGMuaAppbmRleCAxODEzZjQyLi5mN2IwMTBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRjLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fUlRDX0gKICNkZWZpbmUgX0FTTV9SVENfSAogCit2b2lkIHRpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIGV4dGVybiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKik7CiBleHRlcm4gaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDU1YTJiZDMuLmQ0NTBiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgogCiAjaWZkZWYgX19LRVJORUxfXwotCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMwMTAyZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX21vYmlsZV9sY2RjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXwotI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0KLWVudW0geyBSR0I4LCAgIC8qIDI0YnBwLCA4Ojg6OCAqLwotICAgICAgIFJHQjksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFJHQjEyQSwgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgUkdCMTJCLCAvKiAxMmJwcCAqLwotICAgICAgIFJHQjE2LCAgLyogMTZicHAgKi8KLSAgICAgICBSR0IxOCwgIC8qIDE4YnBwICovCi0gICAgICAgUkdCMjQsICAvKiAyNGJwcCAqLwotICAgICAgIFNZUzhBLCAgLyogMjRicHAsIDg6ODo4ICovCi0gICAgICAgU1lTOEIsICAvKiAxOGJwcCwgODo4OjIgKi8KLSAgICAgICBTWVM4QywgIC8qIDE4YnBwLCAyOjg6OCAqLwotICAgICAgIFNZUzhELCAgLyogMTZicHAsIDg6OCAqLwotICAgICAgIFNZUzksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFNZUzEyLCAgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgU1lTMTZBLCAvKiAxNmJwcCAqLwotICAgICAgIFNZUzE2QiwgLyogMThicHAsIDE2OjIgKi8KLSAgICAgICBTWVMxNkMsIC8qIDE4YnBwLCAyOjE2ICovCi0gICAgICAgU1lTMTgsICAvKiAxOGJwcCAqLwotICAgICAgIFNZUzI0IH07LyogMjRicHAgKi8KLQotZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCi0gICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCi0gICAgICAgTENEQ19DSEFOX1NVQkxDRCB9OwotCi1lbnVtIHsgTENEQ19DTEtfQlVTLCBMQ0RDX0NMS19QRVJJUEhFUkFMLCBMQ0RDX0NMS19FWFRFUk5BTCB9OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19jZmcgewotCXVuc2lnbmVkIGxvbmcgbGRtdDJyOwotCXVuc2lnbmVkIGxvbmcgbGRtdDNyOwotfTsKLQotc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzIHsKLQl2b2lkICgqd3JpdGVfaW5kZXgpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKLQl2b2lkICgqd3JpdGVfZGF0YSkodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBsb25nIGRhdGEpOwotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2RhdGEpKHZvaWQgKmhhbmRsZSk7Ci19OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnIHsKLQl2b2lkICpib2FyZF9kYXRhOwotCWludCAoKnNldHVwX3N5cykodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCi0JCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKLQl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7Ci0Jdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgeyAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHBhbmVsIGluIG1tICovCi0JdW5zaWduZWQgbG9uZyB3aWR0aDsKLQl1bnNpZ25lZCBsb25nIGhlaWdodDsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyB7Ci0JaW50IGNoYW47Ci0JaW50IGJwcDsKLQlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCi0JaW50IGNsb2NrX2RpdmlkZXI7Ci0Jc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgbGNkX3NpemVfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcgYm9hcmRfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyBzeXNfYnVzX2NmZzsgLyogb25seSBmb3IgU1lTbiBJL0YgKi8KLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGxkZGNrcjsKLQlpbnQgY2xvY2tfc291cmNlOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyBjaFsyXTsKLX07Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTFmYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXplcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKy8qIERPIE5PVCBFRElUISEgLSB0aGlzIGZpbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKyAqICAgICAgICAgICAgICAgICBmcm9tIC5zIGZpbGUgYnkgYXdrIC1mIHMyaC5hd2sKKyAqLworLyogIFNpemUgZGVmaW5pdGlvbnMKKyAqICBDb3B5cmlnaHQgKEMpIEFSTSBMaW1pdGVkIDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfX3NpemVzX2gKKyNkZWZpbmUgX19zaXplc19oICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIGhhbmR5IHNpemVzICovCisjZGVmaW5lIFNaXzE2CQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgU1pfMzIJCQkJMHgwMDAwMDAyMAorI2RlZmluZSBTWl82NAkJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNaXzEyOAkJCQkweDAwMDAwMDgwCisjZGVmaW5lIFNaXzI1NgkJCQkweDAwMDAwMTAwCisjZGVmaW5lIFNaXzUxMgkJCQkweDAwMDAwMjAwCisKKyNkZWZpbmUgU1pfMUsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFNaXzRLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBTWl84SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgU1pfMTZLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFNaXzMySwkJCQkweDAwMDA4MDAwCisjZGVmaW5lIFNaXzY0SyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBTWl8xMjhLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgU1pfMjU2SyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFNaXzUxMksgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorCisjZGVmaW5lIFNaXzFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBTWl8yTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1pfNE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFNaXzhNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBTWl8xNk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgU1pfMjZNCQkJCTB4MDFhMDAwMDAKKyNkZWZpbmUgU1pfMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFNaXzY0TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBTWl8xMjhNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgU1pfMjU2TSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFNaXzUxMk0gICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorCisjZGVmaW5lIFNaXzFHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTWl8yRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2VuZGlmCisKKy8qICAgICAgICAgRU5EICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA1OTMzNDNjLi44NWI2NjBjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc21wLmgKQEAgLTIxLDI1ICsyMSwyOSBAQAogZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKICNkZWZpbmUgY3B1X2xvZ2ljYWxfbWFwKGNwdSkgIF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0KIAotLyogSSd2ZSBubyBpZGVhIHdoYXQgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIGlzICovCi0jZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAKK2VudW0geworCVNNUF9NU0dfRlVOQ1RJT04sCisJU01QX01TR19SRVNDSEVEVUxFLAorCVNNUF9NU0dfRlVOQ1RJT05fU0lOR0xFLAorCVNNUF9NU0dfVElNRVIsCiAKLSNkZWZpbmUgTk9fUFJPQ19JRAkoLTEpCisJU01QX01TR19OUiwJLyogbXVzdCBiZSBsYXN0ICovCit9OwogCi0jZGVmaW5lIFNNUF9NU0dfRlVOQ1RJT04JMAotI2RlZmluZSBTTVBfTVNHX1JFU0NIRURVTEUJMQotI2RlZmluZSBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRQkyCi0jZGVmaW5lIFNNUF9NU0dfTlIJCTMKK3ZvaWQgc21wX21lc3NhZ2VfcmVjdih1bnNpZ25lZCBpbnQgbXNnKTsKK3ZvaWQgc21wX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzayk7CisKK3ZvaWQgbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpOwordm9pZCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KTsKIAogdm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKTsKIHZvaWQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIGludCBwbGF0X3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiB2b2lkIHBsYXRfc3RhcnRfY3B1KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQpOwogdm9pZCBwbGF0X3NlbmRfaXBpKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLWludCBwbGF0X3JlZ2lzdGVyX2lwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBtZXNzYWdlLAotCQkJICAgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiksIHZvaWQgKmFyZyk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKKwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOwogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMX0gKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsXzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJzeXNjYWxsXzY0LmgiCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc3M2YyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTF8zMl9ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExfMzJfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIFRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgZ2l2ZW4gYnkgdGhlIHVzZXIgaW4gJWcxICovCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT50cmEgPj0gMCkgPyByZWdzLT5yZWdzWzNdIDogLTFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9yb2xsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogWFhYOiBUaGlzIG5lZWRzIHNvbWUgdGhvdWdodC4gT24gU0ggd2UgZG9uJ3QKKwkgKiBzYXZlIGF3YXkgdGhlIG9yaWdpbmFsIHIwIHZhbHVlIGFueXdoZXJlLgorCSAqLworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3lzY2FsbF9oYXNfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT5zciAmIDB4MSkgPyB0cnVlIDogZmFsc2U7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgfD0gMHgxOworfQorc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfY2xlYXJfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgJj0gfjB4MTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X2Vycm9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBzeXNjYWxsX2hhc19lcnJvcihyZWdzKSA/IHJlZ3MtPnJlZ3NbMF0gOiAwOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yZWdzWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgaW50IGVycm9yLCBsb25nIHZhbCkKK3sKKwlpZiAoZXJyb3IpIHsKKwkJc3lzY2FsbF9zZXRfZXJyb3IocmVncyk7CisJCXJlZ3MtPnJlZ3NbMF0gPSAtZXJyb3I7CisJfSBlbHNlIHsKKwkJc3lzY2FsbF9jbGVhcl9lcnJvcihyZWdzKTsKKwkJcmVncy0+cmVnc1swXSA9IHZhbDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qCisJICogRG8gdGhpcyBzaW1wbHkgZm9yIG5vdy4gSWYgd2UgbmVlZCB0byBzdGFydCBzdXBwb3J0aW5nCisJICogZmV0Y2hpbmcgYXJndW1lbnRzIGZyb20gYXJiaXRyYXJ5IGluZGljZXMsIHRoaXMgd2lsbCBuZWVkIHNvbWUKKwkgKiBleHRyYSBsb2dpYy4gUHJlc2VudGx5IHRoZXJlIGFyZSBubyBpbi10cmVlIHVzZXJzIHRoYXQgZGVwZW5kCisJICogb24gdGhpcyBiZWhhdmlvdXIuCisJICovCisJQlVHX09OKGkpOworCisJLyogQXJndW1lbnQgcGF0dGVybiBpczogUjQsIFI1LCBSNiwgUjcsIFIwLCBSMSAqLworCXN3aXRjaCAobikgeworCWNhc2UgNjogYXJnc1s1XSA9IHJlZ3MtPnJlZ3NbMV07CisJY2FzZSA1OiBhcmdzWzRdID0gcmVncy0+cmVnc1swXTsKKwljYXNlIDQ6IGFyZ3NbM10gPSByZWdzLT5yZWdzWzddOworCWNhc2UgMzogYXJnc1syXSA9IHJlZ3MtPnJlZ3NbNl07CisJY2FzZSAyOiBhcmdzWzFdID0gcmVncy0+cmVnc1s1XTsKKwljYXNlIDE6CWFyZ3NbMF0gPSByZWdzLT5yZWdzWzRdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qIFNhbWUgbm90ZSBhcyBhYm92ZSBhcHBsaWVzICovCisJQlVHX09OKGkpOworCisJc3dpdGNoIChuKSB7CisJY2FzZSA2OiByZWdzLT5yZWdzWzFdID0gYXJnc1s1XTsKKwljYXNlIDU6IHJlZ3MtPnJlZ3NbMF0gPSBhcmdzWzRdOworCWNhc2UgNDogcmVncy0+cmVnc1s3XSA9IGFyZ3NbM107CisJY2FzZSAzOiByZWdzLT5yZWdzWzZdID0gYXJnc1syXTsKKwljYXNlIDI6IHJlZ3MtPnJlZ3NbNV0gPSBhcmdzWzFdOworCWNhc2UgMTogcmVncy0+cmVnc1s0XSA9IGFyZ3NbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhYThjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfNjRfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMXzY0X0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N5c2NhbGwuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMU19ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IG9sZF91dHNuYW1lOworCithc21saW5rYWdlIGludCBvbGRfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJaW50IGZkLCB1bnNpZ25lZCBsb25nIG9mZik7Cithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Cithc21saW5rYWdlIGludCBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAorCQkgICAgICAgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKTsKK2FzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICpuYW1lKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsc18zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAic3lzY2FsbHNfNjQuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDRjNWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsc18zMi5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTFNfMzJfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMU18zMl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworYXNtbGlua2FnZSBpbnQgc3lzX2ZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQlzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfdGlkcHRyLAorCQkJIHVuc2lnbmVkIGxvbmcgY2hpbGRfdGlkcHRyLAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfdmZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICp1ZmlsZW5hbWUsIGNoYXIgX191c2VyICogX191c2VyICp1YXJndiwKKwkJCSAgY2hhciBfX3VzZXIgKiBfX3VzZXIgKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQob2xkX3NpZ3NldF90IG1hc2ssIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCk7Cithc21saW5rYWdlIGludCBzeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKnVzcywgc3RhY2tfdCBfX3VzZXIgKnVvc3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHJlYWRfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvbmcgZHVtbXksIGxvZmZfdCBwb3MpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wd3JpdGVfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKTsKK2FzbWxpbmthZ2UgaW50IHN5c19mYWR2aXNlNjRfNjRfd3JhcHBlcihpbnQgZmQsIHUzMiBvZmZzZXQwLCB1MzIgb2Zmc2V0MSwKKwkJCQkJdTMyIGxlbjAsIHUzMiBsZW4xLCBpbnQgYWR2aWNlKTsKKworLyogTWlzYyBzeXNjYWxsIHJlbGF0ZWQgYml0cyAqLworYXNtbGlua2FnZSBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBzYXZlX3IwLAorCQkJCSB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfNjQuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExTXzY0X0gKKyNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTFNfNjRfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKK2FzbWxpbmthZ2UgaW50IHN5c19mb3JrKHVuc2lnbmVkIGxvbmcgcjIsIHVuc2lnbmVkIGxvbmcgcjMsCisJCQl1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCXN0cnVjdCBwdF9yZWdzICpwcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKKwkJCSB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c192Zm9yayh1bnNpZ25lZCBsb25nIHIyLCB1bnNpZ25lZCBsb25nIHIzLAorCQkJIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICp1ZmlsZW5hbWUsIGNoYXIgKip1YXJndiwKKwkJCSAgY2hhciAqKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworCisvKiBNaXNjIHN5c2NhbGwgcmVsYXRlZCBiaXRzICovCithc21saW5rYWdlIGxvbmcgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU182NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAwNTZkNjhjLi42MTYwZmU0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTcwLDYgKzcwLDggQEAKIAogI2lmZGVmIENPTkZJR19HVVNBX1JCCiAjaW5jbHVkZSA8YXNtL2NtcHhjaGctZ3JiLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKyNpbmNsdWRlIDxhc20vY21weGNoZy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLWlycS5oPgogI2VuZGlmCkBAIC0xMjUsNiArMTI3LDggQEAKICAgfSkKIAogZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpOwordm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBleHRlcm4gdm9pZCAqc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWModW5zaWduZWQgaW50IHZlYywgdm9pZCAqaGFuZGxlcik7CiAKQEAgLTE3Nyw4ICsxODEsOCBAQAogI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQogCiBzdHJ1Y3QgbWVtX2FjY2VzcyB7Ci0JdW5zaWduZWQgbG9uZyAoKmZyb20pKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNudCk7Ci0JdW5zaWduZWQgbG9uZyAoKnRvKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOworCXVuc2lnbmVkIGxvbmcgKCpmcm9tKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKKwl1bnNpZ25lZCBsb25nICgqdG8pKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwogfTsKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggZjExYmNmMC4uYTcyNmQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC01OCw3ICs1OCw4IEBACiAJbGFzdCA9IF9fbGFzdDsJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudW5jYWNoZWQudGV4dCIpKSkKKyNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgXAorCW5vaW5saW5lIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi51bmNhY2hlZC50ZXh0IikpKQogCiAvKgogICogSnVtcCB0byB1bmNhY2hlZCBhcmVhLgpAQCAtOTYsNyArOTcsNDggQEAKIAkJOiAiPSZyIiAoX19kdW1teSkpOwkJCVwKIH0gd2hpbGUgKDApCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19TUl9SQgorI2RlZmluZSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfdmVjOwkJXAorCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkic3RjIHIyX2JhbmssICUwXG5cdCIJXAorCQk6ICI9ciIgKF92ZWMpCQlcCisJKTsJCQkJXAorCQkJCQlcCisJX3ZlYzsJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF92ZWM7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkibW92IHI0LCAlMFxuXHQiCVwKKwkJOiAiPXIiIChfdmVjKQkJXAorCSk7CQkJCVwKKwkJCQkJXAorCV92ZWM7CQkJCVwKK30pCisjZW5kaWYKKwogaW50IGhhbmRsZV91bmFsaWduZWRfYWNjZXNzKG9wY29kZV90IGluc3RydWN0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSAgICBzdHJ1Y3QgbWVtX2FjY2VzcyAqbWEpOwogCithc21saW5rYWdlIHZvaWQgZG9fYWRkcmVzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgdW5zaWduZWQgbG9uZyB3cml0ZWFjY2VzcywKKwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIHZvaWQgZG9fcmVzZXJ2ZWRfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19pbGxlZ2FsX3Nsb3RfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19leGNlcHRpb25fZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCSAgIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7CisKICNlbmRpZiAvKiBfX0FTTV9TSF9TWVNURU1fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDBhODk0Y2EuLmYwOWFjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTMzLDIwICszMywxMiBAQAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAogCiAjaWYgZGVmaW5lZChDT05GSUdfNEtTVEFDS1MpCi0jZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCSgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzRLQikKLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfOEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV8xNktCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV82NEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKKyNkZWZpbmUgVEhSRUFEX1NISUZUCTEyCiAjZWxzZQotI2Vycm9yICJVbmtub3duIHRocmVhZCBzaXplIgorI2RlZmluZSBUSFJFQURfU0hJRlQJMTMKICNlbmRpZgogCi0jZGVmaW5lIFRIUkVBRF9TSVpFCShQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9TSVpFCSgxIDw8IFRIUkVBRF9TSElGVCkKICNkZWZpbmUgU1RBQ0tfV0FSTgkoVEhSRUFEX1NJWkUgPj4gMykKIAogLyoKQEAgLTk0LDE1ICs4NiwxOSBAQAogCXJldHVybiB0aTsKIH0KIAorLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNpZiBUSFJFQURfU0hJRlQgPj0gUEFHRV9TSElGVAorCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCShUSFJFQURfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjZWxzZSAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKLS8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRpKQlremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQotI2Vsc2UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odGkpCWttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCi0jZW5kaWYKLSNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkJa2ZyZWUodGkpCitleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpOworIAorI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDU1ODBmZDQuLjU2ZmQyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0yNiwxNiArMjYsMjAgQEAKIAlyZXR2YWwgPSAwOwkJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCiAJY2FzZSAxOgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2IoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fYigodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fdyh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV93KCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV9sKHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2woKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX3EoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fcSgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCVwKIAkJX19nZXRfdXNlcl91bmtub3duKCk7CQkJCVwKQEAgLTU0LDE2ICs1OCwyMCBAQAogCXJldHZhbCA9IDA7CQkJCQkJXAogCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fYih4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9iKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV93KHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX3coKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX2woeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fbCgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fcSh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9xKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJXAogCQlfX3B1dF91c2VyX3Vua25vd24oKTsJCQkJXApAQCAtNzcsNSArODUsNyBAQAogZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl91bmtub3duKHZvaWQpOwogCiBleHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyICpfX3MsIGxvbmcgX19uKTsKK2V4dGVybiBpbnQgX19zdHJuY3B5X2Zyb21fdXNlcih1bnNpZ25lZCBsb25nIF9fZGVzdCwKKwkgICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgX19zcmMsIGludCBfX2NvdW50KTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1VBQ0NFU1NfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDJhL2NwdS9zaDcyMDMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmOTMxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKQEAgLTAsMCArMSwxNDMgQEAKKyNpZm5kZWYgX19BU01fU0g3MjAzX0hfXworI2RlZmluZSBfX0FTTV9TSDcyMDNfSF9fCisKK2VudW0geworCS8qIFBBICovCisJR1BJT19QQTcsIEdQSU9fUEE2LCBHUElPX1BBNSwgR1BJT19QQTQsCisJR1BJT19QQTMsIEdQSU9fUEEyLCBHUElPX1BBMSwgR1BJT19QQTAsCisKKwkvKiBQQiAqLworCUdQSU9fUEIxMiwKKwlHUElPX1BCMTEsIEdQSU9fUEIxMCwgR1BJT19QQjksIEdQSU9fUEI4LAorCUdQSU9fUEI3LCBHUElPX1BCNiwgR1BJT19QQjUsIEdQSU9fUEI0LAorCUdQSU9fUEIzLCBHUElPX1BCMiwgR1BJT19QQjEsIEdQSU9fUEIwLAorCisJLyogUEMgKi8KKwlHUElPX1BDMTQsIEdQSU9fUEMxMywgR1BJT19QQzEyLAorCUdQSU9fUEMxMSwgR1BJT19QQzEwLCBHUElPX1BDOSwgR1BJT19QQzgsCisJR1BJT19QQzcsIEdQSU9fUEM2LCBHUElPX1BDNSwgR1BJT19QQzQsCisJR1BJT19QQzMsIEdQSU9fUEMyLCBHUElPX1BDMSwgR1BJT19QQzAsCisKKwkvKiBQRCAqLworCUdQSU9fUEQxNSwgR1BJT19QRDE0LCBHUElPX1BEMTMsIEdQSU9fUEQxMiwKKwlHUElPX1BEMTEsIEdQSU9fUEQxMCwgR1BJT19QRDksIEdQSU9fUEQ4LAorCUdQSU9fUEQ3LCBHUElPX1BENiwgR1BJT19QRDUsIEdQSU9fUEQ0LAorCUdQSU9fUEQzLCBHUElPX1BEMiwgR1BJT19QRDEsIEdQSU9fUEQwLAorCisJLyogUEUgKi8KKwlHUElPX1BFMTUsIEdQSU9fUEUxNCwgR1BJT19QRTEzLCBHUElPX1BFMTIsCisJR1BJT19QRTExLCBHUElPX1BFMTAsIEdQSU9fUEU5LCBHUElPX1BFOCwKKwlHUElPX1BFNywgR1BJT19QRTYsIEdQSU9fUEU1LCBHUElPX1BFNCwKKwlHUElPX1BFMywgR1BJT19QRTIsIEdQSU9fUEUxLCBHUElPX1BFMCwKKworCS8qIFBGICovCisJR1BJT19QRjMwLCBHUElPX1BGMjksIEdQSU9fUEYyOCwKKwlHUElPX1BGMjcsIEdQSU9fUEYyNiwgR1BJT19QRjI1LCBHUElPX1BGMjQsCisJR1BJT19QRjIzLCBHUElPX1BGMjIsIEdQSU9fUEYyMSwgR1BJT19QRjIwLAorCUdQSU9fUEYxOSwgR1BJT19QRjE4LCBHUElPX1BGMTcsIEdQSU9fUEYxNiwKKwlHUElPX1BGMTUsIEdQSU9fUEYxNCwgR1BJT19QRjEzLCBHUElPX1BGMTIsCisJR1BJT19QRjExLCBHUElPX1BGMTAsIEdQSU9fUEY5LCBHUElPX1BGOCwKKwlHUElPX1BGNywgR1BJT19QRjYsIEdQSU9fUEY1LCBHUElPX1BGNCwKKwlHUElPX1BGMywgR1BJT19QRjIsIEdQSU9fUEYxLCBHUElPX1BGMCwKKworCS8qIElOVEM6IElSUSBhbmQgUElOVCBvbiBQQi9QRC9QRSAqLworCUdQSU9fRk5fUElOVDdfUEIsIEdQSU9fRk5fUElOVDZfUEIsIEdQSU9fRk5fUElOVDVfUEIsIEdQSU9fRk5fUElOVDRfUEIsCisJR1BJT19GTl9QSU5UM19QQiwgR1BJT19GTl9QSU5UMl9QQiwgR1BJT19GTl9QSU5UMV9QQiwgR1BJT19GTl9QSU5UMF9QQiwKKwlHUElPX0ZOX1BJTlQ3X1BELCBHUElPX0ZOX1BJTlQ2X1BELCBHUElPX0ZOX1BJTlQ1X1BELCBHUElPX0ZOX1BJTlQ0X1BELAorCUdQSU9fRk5fUElOVDNfUEQsIEdQSU9fRk5fUElOVDJfUEQsIEdQSU9fRk5fUElOVDFfUEQsIEdQSU9fRk5fUElOVDBfUEQsCisJR1BJT19GTl9JUlE3X1BCLCBHUElPX0ZOX0lSUTZfUEIsIEdQSU9fRk5fSVJRNV9QQiwgR1BJT19GTl9JUlE0X1BCLAorCUdQSU9fRk5fSVJRM19QQiwgR1BJT19GTl9JUlEyX1BCLCBHUElPX0ZOX0lSUTFfUEIsIEdQSU9fRk5fSVJRMF9QQiwKKwlHUElPX0ZOX0lSUTdfUEQsIEdQSU9fRk5fSVJRNl9QRCwgR1BJT19GTl9JUlE1X1BELCBHUElPX0ZOX0lSUTRfUEQsCisJR1BJT19GTl9JUlEzX1BELCBHUElPX0ZOX0lSUTJfUEQsIEdQSU9fRk5fSVJRMV9QRCwgR1BJT19GTl9JUlEwX1BELAorCUdQSU9fRk5fSVJRN19QRSwgR1BJT19GTl9JUlE2X1BFLCBHUElPX0ZOX0lSUTVfUEUsIEdQSU9fRk5fSVJRNF9QRSwKKwlHUElPX0ZOX0lSUTNfUEUsIEdQSU9fRk5fSVJRMl9QRSwgR1BJT19GTl9JUlExX1BFLCBHUElPX0ZOX0lSUTBfUEUsCisKKwlHUElPX0ZOX1dEVE9WRiwgR1BJT19GTl9JUlFPVVQsIEdQSU9fRk5fUkVGT1VULCBHUElPX0ZOX0lSUU9VVF9SRUZPVVQsCisJR1BJT19GTl9VQkNUUkcsCisKKwkvKiBDQU4gKi8KKwlHUElPX0ZOX0NUWDEsIEdQSU9fRk5fQ1JYMSwgR1BJT19GTl9DVFgwLCBHUElPX0ZOX0NUWDBfQ1RYMSwKKwlHUElPX0ZOX0NSWDAsIEdQSU9fRk5fQ1JYMF9DUlgxLAorCisJLyogSUlDMyAqLworCUdQSU9fRk5fU0RBMywgR1BJT19GTl9TQ0wzLAorCUdQSU9fRk5fU0RBMiwgR1BJT19GTl9TQ0wyLAorCUdQSU9fRk5fU0RBMSwgR1BJT19GTl9TQ0wxLAorCUdQSU9fRk5fU0RBMCwgR1BJT19GTl9TQ0wwLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fVEVORDBfUEQsIEdQSU9fRk5fVEVORDBfUEUsIEdQSU9fRk5fREFDSzBfUEQsCisJR1BJT19GTl9EQUNLMF9QRSwgR1BJT19GTl9EUkVRMF9QRCwgR1BJT19GTl9EUkVRMF9QRSwKKwlHUElPX0ZOX1RFTkQxX1BELCBHUElPX0ZOX1RFTkQxX1BFLCBHUElPX0ZOX0RBQ0sxX1BELAorCUdQSU9fRk5fREFDSzFfUEUsIEdQSU9fRk5fRFJFUTFfUEQsIEdQSU9fRk5fRFJFUTFfUEUsCisJR1BJT19GTl9EQUNLMiwgR1BJT19GTl9EUkVRMiwKKwlHUElPX0ZOX0RBQ0szLCBHUElPX0ZOX0RSRVEzLAorCisJLyogQURDICovCisJR1BJT19GTl9BRFRSR19QRCwgR1BJT19GTl9BRFRSR19QRSwKKworCS8qIEJTQyAqLworCUdQSU9fRk5fRDMxLCBHUElPX0ZOX0QzMCwgR1BJT19GTl9EMjksIEdQSU9fRk5fRDI4LAorCUdQSU9fRk5fRDI3LCBHUElPX0ZOX0QyNiwgR1BJT19GTl9EMjUsIEdQSU9fRk5fRDI0LAorCUdQSU9fRk5fRDIzLCBHUElPX0ZOX0QyMiwgR1BJT19GTl9EMjEsIEdQSU9fRk5fRDIwLAorCUdQSU9fRk5fRDE5LCBHUElPX0ZOX0QxOCwgR1BJT19GTl9EMTcsIEdQSU9fRk5fRDE2LAorCUdQSU9fRk5fQTI1LCBHUElPX0ZOX0EyNCwgR1BJT19GTl9BMjMsIEdQSU9fRk5fQTIyLAorCUdQSU9fRk5fQTIxLCBHUElPX0ZOX0NTNCwgR1BJT19GTl9NUkVTLCBHUElPX0ZOX0JTLAorCUdQSU9fRk5fSU9JUzE2LCBHUElPX0ZOX0NTMSwgR1BJT19GTl9DUzZfQ0UxQiwKKwlHUElPX0ZOX0NFMkIsIEdQSU9fRk5fQ1M1X0NFMUEsIEdQSU9fRk5fQ0UyQSwKKwlHUElPX0ZOX0ZSQU1FLCBHUElPX0ZOX1dBSVQsIEdQSU9fRk5fUkRXUiwKKwlHUElPX0ZOX0NLRSwgR1BJT19GTl9DQVNVLCBHUElPX0ZOX0JSRVEsIEdQSU9fRk5fUkFTVSwKKwlHUElPX0ZOX0JBQ0ssIEdQSU9fRk5fQ0FTTCwgR1BJT19GTl9SQVNMLAorCUdQSU9fRk5fV0UzX0RRTVVVX0FIX0lDSU9fV1IsIEdQSU9fRk5fV0UyX0RRTVVMX0lDSU9SRCwKKwlHUElPX0ZOX1dFMV9EUU1MVV9XRSwgR1BJT19GTl9XRTBfRFFNTEwsCisJR1BJT19GTl9DUzMsIEdQSU9fRk5fQ1MyLCBHUElPX0ZOX0ExLCBHUElPX0ZOX0EwLCBHUElPX0ZOX0NTNywKKworCS8qIFRNVSAqLworCUdQSU9fRk5fVElPQzRELCBHUElPX0ZOX1RJT0M0QywgR1BJT19GTl9USU9DNEIsIEdQSU9fRk5fVElPQzRBLAorCUdQSU9fRk5fVElPQzNELCBHUElPX0ZOX1RJT0MzQywgR1BJT19GTl9USU9DM0IsIEdQSU9fRk5fVElPQzNBLAorCUdQSU9fRk5fVElPQzJCLCBHUElPX0ZOX1RJT0MxQiwgR1BJT19GTl9USU9DMkEsIEdQSU9fRk5fVElPQzFBLAorCUdQSU9fRk5fVElPQzBELCBHUElPX0ZOX1RJT0MwQywgR1BJT19GTl9USU9DMEIsIEdQSU9fRk5fVElPQzBBLAorCUdQSU9fRk5fVENMS0RfUEQsIEdQSU9fRk5fVENMS0NfUEQsIEdQSU9fRk5fVENMS0JfUEQsIEdQSU9fRk5fVENMS0FfUEQsCisJR1BJT19GTl9UQ0xLRF9QRiwgR1BJT19GTl9UQ0xLQ19QRiwgR1BJT19GTl9UQ0xLQl9QRiwgR1BJT19GTl9UQ0xLQV9QRiwKKworCS8qIFNTVSAqLworCUdQSU9fRk5fU0NTMF9QRCwgR1BJT19GTl9TU08wX1BELCBHUElPX0ZOX1NTSTBfUEQsIEdQSU9fRk5fU1NDSzBfUEQsCisJR1BJT19GTl9TQ1MwX1BGLCBHUElPX0ZOX1NTTzBfUEYsIEdQSU9fRk5fU1NJMF9QRiwgR1BJT19GTl9TU0NLMF9QRiwKKwlHUElPX0ZOX1NDUzFfUEQsIEdQSU9fRk5fU1NPMV9QRCwgR1BJT19GTl9TU0kxX1BELCBHUElPX0ZOX1NTQ0sxX1BELAorCUdQSU9fRk5fU0NTMV9QRiwgR1BJT19GTl9TU08xX1BGLCBHUElPX0ZOX1NTSTFfUEYsIEdQSU9fRk5fU1NDSzFfUEYsCisKKwkvKiBTQ0lGICovCisJR1BJT19GTl9UWEQwLCBHUElPX0ZOX1JYRDAsIEdQSU9fRk5fU0NLMCwKKwlHUElPX0ZOX1RYRDEsIEdQSU9fRk5fUlhEMSwgR1BJT19GTl9TQ0sxLAorCUdQSU9fRk5fVFhEMiwgR1BJT19GTl9SWEQyLCBHUElPX0ZOX1NDSzIsCisJR1BJT19GTl9SVFMzLCBHUElPX0ZOX0NUUzMsIEdQSU9fRk5fVFhEMywgR1BJT19GTl9SWEQzLCBHUElPX0ZOX1NDSzMsCisKKwkvKiBTU0kgKi8KKwlHUElPX0ZOX0FVRElPX0NMSywKKwlHUElPX0ZOX1NTSURBVEEzLCBHUElPX0ZOX1NTSVdTMywgR1BJT19GTl9TU0lTQ0szLAorCUdQSU9fRk5fU1NJREFUQTIsIEdQSU9fRk5fU1NJV1MyLCBHUElPX0ZOX1NTSVNDSzIsCisJR1BJT19GTl9TU0lEQVRBMSwgR1BJT19GTl9TU0lXUzEsIEdQSU9fRk5fU1NJU0NLMSwKKwlHUElPX0ZOX1NTSURBVEEwLCBHUElPX0ZOX1NTSVdTMCwgR1BJT19GTl9TU0lTQ0swLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9GUkIsCisJR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwKKwlHUElPX0ZOX0ZTQywgR1BJT19GTl9GT0UsIEdQSU9fRk5fRkNERSwgR1BJT19GTl9GV0UsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCUdQSU9fRk5fTENEX0NMSywgR1BJT19GTl9MQ0RfRkxNLAorCUdQSU9fRk5fTENEX01fRElTUCwgR1BJT19GTl9MQ0RfQ0wyLAorCUdQSU9fRk5fTENEX0NMMSwgR1BJT19GTl9MQ0RfRE9OLAorCUdQSU9fRk5fTENEX0RBVEExNSwgR1BJT19GTl9MQ0RfREFUQTE0LAorCUdQSU9fRk5fTENEX0RBVEExMywgR1BJT19GTl9MQ0RfREFUQTEyLAorCUdQSU9fRk5fTENEX0RBVEExMSwgR1BJT19GTl9MQ0RfREFUQTEwLAorCUdQSU9fRk5fTENEX0RBVEE5LCBHUElPX0ZOX0xDRF9EQVRBOCwKKwlHUElPX0ZOX0xDRF9EQVRBNywgR1BJT19GTl9MQ0RfREFUQTYsCisJR1BJT19GTl9MQ0RfREFUQTUsIEdQSU9fRk5fTENEX0RBVEE0LAorCUdQSU9fRk5fTENEX0RBVEEzLCBHUElPX0ZOX0xDRF9EQVRBMiwKKwlHUElPX0ZOX0xDRF9EQVRBMSwgR1BJT19GTl9MQ0RfREFUQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3MjAzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvc2g3NzIwLmgKQEAgLTAsMCArMSwxNzQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIwX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjBfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTYsIEdQSU9fUFRFNSwgR1BJT19QVEU0LCBHUElPX1BURTMsCisJR1BJT19QVEUyLCBHUElPX1BURTEsIEdQSU9fUFRFMCwKKworCS8qIFBURiAqLworCUdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsIEdQSU9fUFRGMywKKwlHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLCBHUElPX1BURzYsCisKKwkvKiBQVEcgKi8KKwlHUElPX1BURzUsIEdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsCisJR1BJT19QVEcxLCBHUElPX1BURzAsCisKKwkvKiBQVEggKi8KKwlHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LCBHUElPX1BUSDMsCisJR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNiwgR1BJT19QVEo1LCBHUElPX1BUSjQsIEdQSU9fUFRKMywKKwlHUElPX1BUSjIsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEszLCBHUElPX1BUSzIsIEdQSU9fUFRLMSwgR1BJT19QVEswLAorCisJLyogUFRMICovCisJR1BJT19QVEw3LCBHUElPX1BUTDYsIEdQSU9fUFRMNSwgR1BJT19QVEw0LCBHUElPX1BUTDMsCisKKwkvKiBQVE0gKi8KKwlHUElPX1BUTTcsIEdQSU9fUFRNNiwgR1BJT19QVE01LCBHUElPX1BUTTQsCisJR1BJT19QVE0zLCBHUElPX1BUTTIsIEdQSU9fUFRNMSwgR1BJT19QVE0wLAorCisJLyogUFRQICovCisJR1BJT19QVFA0LCBHUElPX1BUUDMsIEdQSU9fUFRQMiwgR1BJT19QVFAxLCBHUElPX1BUUDAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM0LCBHUElPX1BUUzMsIEdQSU9fUFRTMiwgR1BJT19QVFMxLCBHUElPX1BUUzAsCisKKwkvKiBQVFQgKi8KKwlHUElPX1BUVDQsIEdQSU9fUFRUMywgR1BJT19QVFQyLCBHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNCwgR1BJT19QVFUzLCBHUElPX1BUVTIsIEdQSU9fUFRVMSwgR1BJT19QVFUwLAorCisJLyogUFRWICovCisJR1BJT19QVFY0LCBHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0QzMSwgR1BJT19GTl9EMzAsIEdQSU9fRk5fRDI5LCBHUElPX0ZOX0QyOCwKKwlHUElPX0ZOX0QyNywgR1BJT19GTl9EMjYsIEdQSU9fRk5fRDI1LCBHUElPX0ZOX0QyNCwKKwlHUElPX0ZOX0QyMywgR1BJT19GTl9EMjIsIEdQSU9fRk5fRDIxLCBHUElPX0ZOX0QyMCwKKwlHUElPX0ZOX0QxOSwgR1BJT19GTl9EMTgsIEdQSU9fRk5fRDE3LCBHUElPX0ZOX0QxNiwKKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9SQVMsIEdQSU9fRk5fQ0FTLCBHUElPX0ZOX0NLRSwKKwlHUElPX0ZOX0NTNUJfQ0UxQSwgR1BJT19GTl9DUzZCX0NFMUIsCisJR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9BMjEsIEdQSU9fRk5fQTIwLCBHUElPX0ZOX0ExOSwgR1BJT19GTl9BMCwKKwlHUElPX0ZOX1JFRk9VVCwgR1BJT19GTl9JUlFPVVQsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfREFUQTE1LCBHUElPX0ZOX0xDRF9EQVRBMTQsCisJR1BJT19GTl9MQ0RfREFUQTEzLCBHUElPX0ZOX0xDRF9EQVRBMTIsCisJR1BJT19GTl9MQ0RfREFUQTExLCBHUElPX0ZOX0xDRF9EQVRBMTAsCisJR1BJT19GTl9MQ0RfREFUQTksIEdQSU9fRk5fTENEX0RBVEE4LAorCUdQSU9fRk5fTENEX0RBVEE3LCBHUElPX0ZOX0xDRF9EQVRBNiwKKwlHUElPX0ZOX0xDRF9EQVRBNSwgR1BJT19GTl9MQ0RfREFUQTQsCisJR1BJT19GTl9MQ0RfREFUQTMsIEdQSU9fRk5fTENEX0RBVEEyLAorCUdQSU9fRk5fTENEX0RBVEExLCBHUElPX0ZOX0xDRF9EQVRBMCwKKwlHUElPX0ZOX0xDRF9NX0RJU1AsCisJR1BJT19GTl9MQ0RfQ0wxLCBHUElPX0ZOX0xDRF9DTDIsCisJR1BJT19GTl9MQ0RfRE9OLCBHUElPX0ZOX0xDRF9GTE0sCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCisJLyogQUZFSUYgKi8KKwlHUElPX0ZOX0FGRV9SWElOLCBHUElPX0ZOX0FGRV9SREVULAorCUdQSU9fRk5fQUZFX0ZTLCBHUElPX0ZOX0FGRV9UWE9VVCwKKwlHUElPX0ZOX0FGRV9TQ0xLLCBHUElPX0ZOX0FGRV9STFlDTlQsCisJR1BJT19GTl9BRkVfSEMxLAorCisJLyogSUlDICovCisJR1BJT19GTl9JSUNfU0NMLCBHUElPX0ZOX0lJQ19TREEsCisKKwkvKiBEQUMgKi8KKwlHUElPX0ZOX0RBMSwgR1BJT19GTl9EQTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIFVTQiAqLworCUdQSU9fRk5fVVNCMURfUkNWLCBHUElPX0ZOX1VTQjFEX1RYU0UwLAorCUdQSU9fRk5fVVNCMURfVFhEUExTLCBHUElPX0ZOX1VTQjFEX0RNTlMsCisJR1BJT19GTl9VU0IxRF9EUExTLCBHUElPX0ZOX1VTQjFEX1NQRUVELAorCUdQSU9fRk5fVVNCMURfVFhFTkwsIEdQSU9fRk5fVVNCMl9QV1JfRU4sCisJR1BJT19GTl9VU0IxX1BXUl9FTl9VU0JGX1VQTFVQLCBHUElPX0ZOX1VTQjFEX1NVU1BFTkQsCisKKwkvKiBJTlRDICovCisJR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTQsCisJR1BJT19GTl9JUlEzX0lSTDMsIEdQSU9fRk5fSVJRMl9JUkwyLAorCUdQSU9fRk5fSVJRMV9JUkwxLCBHUElPX0ZOX0lSUTBfSVJMMCwKKworCS8qIFBDQyAqLworCUdQSU9fRk5fUENDX1JFRywgR1BJT19GTl9QQ0NfRFJWLAorCUdQSU9fRk5fUENDX0JWRDIsIEdQSU9fRk5fUENDX0JWRDEsCisJR1BJT19GTl9QQ0NfQ0QyLCBHUElPX0ZOX1BDQ19DRDEsCisJR1BJT19GTl9QQ0NfUkVTRVQsIEdQSU9fRk5fUENDX1JEWSwKKwlHUElPX0ZOX1BDQ19WUzIsIEdQSU9fRk5fUENDX1ZTMSwKKworCS8qIEhVREkgKi8KKwlHUElPX0ZOX0FVREFUQTMsIEdQSU9fRk5fQVVEQVRBMiwgR1BJT19GTl9BVURBVEExLCBHUElPX0ZOX0FVREFUQTAsCisJR1BJT19GTl9BVURDSywgR1BJT19GTl9BVURTWU5DLCBHUElPX0ZOX0FTRUJSS0FLLCBHUElPX0ZOX1RSU1QsCisJR1BJT19GTl9UTVMsIEdQSU9fRk5fVERPLCBHUElPX0ZOX1RESSwgR1BJT19GTl9UQ0ssCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLMSwgR1BJT19GTl9EUkVRMSwgR1BJT19GTl9EQUNLMCwgR1BJT19GTl9EUkVRMCwKKwlHUElPX0ZOX1RFTkQxLCBHUElPX0ZOX1RFTkQwLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX1NZTkMsIEdQSU9fRk5fU0lPRjBfTUNMSywKKwlHUElPX0ZOX1NJT0YwX1RYRCwgR1BJT19GTl9TSU9GMF9SWEQsCisJR1BJT19GTl9TSU9GMF9TQ0ssCisKKwkvKiBTSU9GMSAqLworCUdQSU9fRk5fU0lPRjFfU1lOQywgR1BJT19GTl9TSU9GMV9NQ0xLLAorCUdQSU9fRk5fU0lPRjFfVFhELCBHUElPX0ZOX1NJT0YxX1JYRCwKKwlHUElPX0ZOX1NJT0YxX1NDSywKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogVFBVICovCisJR1BJT19GTl9UUFVfVE8xLCBHUElPX0ZOX1RQVV9UTzAsCisJR1BJT19GTl9UUFVfVEkzQiwgR1BJT19GTl9UUFVfVEkzQSwKKwlHUElPX0ZOX1RQVV9USTJCLCBHUElPX0ZOX1RQVV9USTJBLAorCUdQSU9fRk5fVFBVX1RPMywgR1BJT19GTl9UUFVfVE8yLAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBNTUMgKi8KKwlHUElPX0ZOX01NQ19EQVQsIEdQSU9fRk5fTU1DX0NNRCwKKwlHUElPX0ZOX01NQ19DTEssIEdQSU9fRk5fTU1DX1ZERE9OLAorCUdQSU9fRk5fTU1DX09ETU9ELAorCisJLyogU1lTQyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9TVEFUVVMxLAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzcyMF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjMwOTZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMi5oCkBAIC0wLDAgKzEsMjEwIEBACisjaWZuZGVmIF9fQVNNX1NINzcyMl9IX18KKyNkZWZpbmUgX19BU01fU0g3NzIyX0hfXworCitlbnVtIHsKKwkvKiBQVEEgKi8KKwlHUElPX1BUQTcsIEdQSU9fUFRBNiwgR1BJT19QVEE1LCBHUElPX1BUQTQsCisJR1BJT19QVEEzLCBHUElPX1BUQTIsIEdQSU9fUFRBMSwgR1BJT19QVEEwLAorCisJLyogUFRCICovCisJR1BJT19QVEI3LCBHUElPX1BUQjYsIEdQSU9fUFRCNSwgR1BJT19QVEI0LAorCUdQSU9fUFRCMywgR1BJT19QVEIyLCBHUElPX1BUQjEsIEdQSU9fUFRCMCwKKworCS8qIFBUQyAqLworCUdQSU9fUFRDNywgR1BJT19QVEM1LCBHUElPX1BUQzQsIEdQSU9fUFRDMywKKwlHUElPX1BUQzIsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTcsIEdQSU9fUFRFNiwgR1BJT19QVEU1LCBHUElPX1BURTQsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjYsIEdQSU9fUFRGNSwgR1BJT19QVEY0LCBHUElPX1BURjMsCisJR1BJT19QVEYyLCBHUElPX1BURjEsIEdQSU9fUFRGMCwKKworCS8qIFBURyAqLworCUdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsIEdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo2LCBHUElPX1BUSjUsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwgR1BJT19QVEszLAorCUdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTcsIEdQSU9fUFRRNiwgR1BJT19QVFE1LCBHUElPX1BUUTQsCisJR1BJT19QVFEzLCBHUElPX1BUUTIsIEdQSU9fUFRRMSwgR1BJT19QVFEwLAorCisJLyogUFRSICovCisJR1BJT19QVFI0LCBHUElPX1BUUjMsIEdQSU9fUFRSMiwgR1BJT19QVFIxLCBHUElPX1BUUjAsCisKKwkvKiBQVFMgKi8KKwlHUElPX1BUUzQsIEdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNCwgR1BJT19QVFQzLCBHUElPX1BUVDIsIEdQSU9fUFRUMSwgR1BJT19QVFQwLAorCisJLyogUFRVICovCisJR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwgR1BJT19QVFUxLCBHUElPX1BUVTAsCisKKwkvKiBQVFYgKi8KKwlHUElPX1BUVjQsIEdQSU9fUFRWMywgR1BJT19QVFYyLCBHUElPX1BUVjEsIEdQSU9fUFRWMCwKKworCS8qIFBUVyAqLworCUdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsIEdQSU9fUFRXMywKKwlHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg2LCBHUElPX1BUWDUsIEdQSU9fUFRYNCwgR1BJT19QVFgzLAorCUdQSU9fUFRYMiwgR1BJT19QVFgxLCBHUElPX1BUWDAsCisKKwkvKiBQVFkgKi8KKwlHUElPX1BUWTUsIEdQSU9fUFRZNCwgR1BJT19QVFkzLCBHUElPX1BUWTIsCisJR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjUsIEdQSU9fUFRaNCwgR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogU0NJRjIgKi8KKwlHUElPX0ZOX1NDSUYyX1RYRCwgR1BJT19GTl9TQ0lGMl9SWEQsCisJR1BJT19GTl9TQ0lGMl9SVFMsIEdQSU9fRk5fU0NJRjJfQ1RTLCBHUElPX0ZOX1NDSUYyX1NDSywKKworCS8qIFNJTyAqLworCUdQSU9fRk5fU0lPVFhELCBHUElPX0ZOX1NJT1JYRCwKKwlHUElPX0ZOX1NJT0QsIEdQSU9fRk5fU0lPU1RSQjAsIEdQSU9fRk5fU0lPU1RSQjEsCisJR1BJT19GTl9TSU9TQ0ssIEdQSU9fRk5fU0lPTUNLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sIEdQSU9fRk5fVklPX1NURVgsIEdQSU9fRk5fVklPX1NURU0sCisJR1BJT19GTl9WSU9fVkQsIEdQSU9fRk5fVklPX0hELCBHUElPX0ZOX1ZJT19DTEssCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEssCisJLyogTWFpbiBMQ0QgKi8KKwlHUElPX0ZOX0xDRERPTiwgR1BJT19GTl9MQ0RWQ1BXQywgR1BJT19GTl9MQ0RWRVBXQywgR1BJT19GTl9MQ0RWU1lOLAorCS8qIE1haW4gTENEIC0gUkdCIE1vZGUgKi8KKwlHUElPX0ZOX0xDRERDSywgR1BJT19GTl9MQ0RIU1lOLCBHUElPX0ZOX0xDRERJU1AsCisJLyogTWFpbiBMQ0QgLSBTWVMgTW9kZSAqLworCUdQSU9fRk5fTENEUlMsIEdQSU9fRk5fTENEQ1MsIEdQSU9fRk5fTENEV1IsIEdQSU9fRk5fTENEUkQsCisJLyogU3ViIExDRCAtIFNZUyBNb2RlICovCisJR1BJT19GTl9MQ0RET04yLCBHUElPX0ZOX0xDRFZDUFdDMiwgR1BJT19GTl9MQ0RWRVBXQzIsCisJR1BJT19GTl9MQ0RWU1lOMiwgR1BJT19GTl9MQ0RDUzIsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9CUywgR1BJT19GTl9DUzZCX0NFMUIsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9DUzZBX0NFMkIsCisKKwkvKiBTQlNDICovCisJR1BJT19GTl9IUEQ2MywgR1BJT19GTl9IUEQ2MiwgR1BJT19GTl9IUEQ2MSwgR1BJT19GTl9IUEQ2MCwKKwlHUElPX0ZOX0hQRDU5LCBHUElPX0ZOX0hQRDU4LCBHUElPX0ZOX0hQRDU3LCBHUElPX0ZOX0hQRDU2LAorCUdQSU9fRk5fSFBENTUsIEdQSU9fRk5fSFBENTQsIEdQSU9fRk5fSFBENTMsIEdQSU9fRk5fSFBENTIsCisJR1BJT19GTl9IUEQ1MSwgR1BJT19GTl9IUEQ1MCwgR1BJT19GTl9IUEQ0OSwgR1BJT19GTl9IUEQ0OCwKKwlHUElPX0ZOX0hQRFFNNywgR1BJT19GTl9IUERRTTYsIEdQSU9fRk5fSFBEUU01LCBHUElPX0ZOX0hQRFFNNCwKKworCS8qIElSUSAqLworCUdQSU9fRk5fSVJRMCwgR1BJT19GTl9JUlExLCBHUElPX0ZOX0lSUTIsIEdQSU9fRk5fSVJRMywKKwlHUElPX0ZOX0lSUTQsIEdQSU9fRk5fSVJRNSwgR1BJT19GTl9JUlE2LCBHUElPX0ZOX0lSUTcsCisKKwkvKiBTREhJICovCisJR1BJT19GTl9TREhJQ0QsIEdQSU9fRk5fU0RISVdQLCBHUElPX0ZOX1NESElEMywgR1BJT19GTl9TREhJRDIsCisJR1BJT19GTl9TREhJRDEsIEdQSU9fRk5fU0RISUQwLCBHUElPX0ZOX1NESElDTUQsIEdQSU9fRk5fU0RISUNMSywKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCUdQSU9fRk5fU0lVQU9MUiwgR1BJT19GTl9TSVVBT0JULCBHUElPX0ZOX1NJVUFJU0xELCBHUElPX0ZOX1NJVUFJTFIsCisJR1BJT19GTl9TSVVBSUJULCBHUElPX0ZOX1NJVUFPU0xELCBHUElPX0ZOX1NJVU1DS0EsIEdQSU9fRk5fU0lVRkNLQSwKKworCS8qIFNJVSAtIFBvcnQgQiAqLworCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJJU0xELCBHUElPX0ZOX1NJVUJJTFIsCisJR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVU1DS0IsIEdQSU9fRk5fU0lVRkNLQiwKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEU1lOQywgR1BJT19GTl9BVURBVEEzLCBHUElPX0ZOX0FVREFUQTIsIEdQSU9fRk5fQVVEQVRBMSwKKwlHUElPX0ZOX0FVREFUQTAsCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLLCBHUElPX0ZOX0RSRVEwLAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogQ1BHICovCisJR1BJT19GTl9TVEFUVVMwLCBHUElPX0ZOX1BEU1RBVFVTLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX01DSywgR1BJT19GTl9TSU9GMF9TQ0ssCisJR1BJT19GTl9TSU9GMF9TWU5DLCBHUElPX0ZOX1NJT0YwX1NTMSwgR1BJT19GTl9TSU9GMF9TUzIsCisJR1BJT19GTl9TSU9GMF9UWEQsIEdQSU9fRk5fU0lPRjBfUlhELAorCisJLyogU0lPRjEgKi8KKwlHUElPX0ZOX1NJT0YxX01DSywgR1BJT19GTl9TSU9GMV9TQ0ssCisJR1BJT19GTl9TSU9GMV9TWU5DLCBHUElPX0ZOX1NJT0YxX1NTMSwgR1BJT19GTl9TSU9GMV9TUzIsCisJR1BJT19GTl9TSU9GMV9UWEQsIEdQSU9fRk5fU0lPRjFfUlhELAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBUU0lGICovCisJR1BJT19GTl9UU19TREFULCBHUElPX0ZOX1RTX1NDSywgR1BJT19GTl9UU19TREVOLCBHUElPX0ZOX1RTX1NQU1lOQywKKworCS8qIElSREEgKi8KKwlHUElPX0ZOX0lSREFfSU4sIEdQSU9fRk5fSVJEQV9PVVQsCisKKwkvKiBUUFUgKi8KKwlHUElPX0ZOX1RQVVRPLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmY2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIzLmgKQEAgLTAsMCArMSwyNTQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIzX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjNfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTUsIEdQSU9fUFRFNCwgR1BJT19QVEUzLCBHUElPX1BURTIsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjcsIEdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsCisJR1BJT19QVEYzLCBHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLAorCisJLyogUFRHICovCisJR1BJT19QVEc1LCBHUElPX1BURzQsIEdQSU9fUFRHMywgR1BJT19QVEcyLAorCUdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo1LCBHUElPX1BUSjMsIEdQSU9fUFRKMiwKKwlHUElPX1BUSjEsIEdQSU9fUFRKMCwKKworCS8qIFBUSyAqLworCUdQSU9fUFRLNywgR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwKKwlHUElPX1BUSzMsIEdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTMsIEdQSU9fUFRRMiwgR1BJT19QVFExLCBHUElPX1BUUTAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM3LCBHUElPX1BUUzYsIEdQSU9fUFRTNSwgR1BJT19QVFM0LAorCUdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNSwgR1BJT19QVFQ0LCBHUElPX1BUVDMsIEdQSU9fUFRUMiwKKwlHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNSwgR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwKKwlHUElPX1BUVTEsIEdQSU9fUFRVMCwKKworCS8qIFBUViAqLworCUdQSU9fUFRWNywgR1BJT19QVFY2LCBHUElPX1BUVjUsIEdQSU9fUFRWNCwKKwlHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBQVFcgKi8KKwlHUElPX1BUVzcsIEdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsCisJR1BJT19QVFczLCBHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg3LCBHUElPX1BUWDYsIEdQSU9fUFRYNSwgR1BJT19QVFg0LAorCUdQSU9fUFRYMywgR1BJT19QVFgyLCBHUElPX1BUWDEsIEdQSU9fUFRYMCwKKworCS8qIFBUWSAqLworCUdQSU9fUFRZNywgR1BJT19QVFk2LCBHUElPX1BUWTUsIEdQSU9fUFRZNCwKKwlHUElPX1BUWTMsIEdQSU9fUFRZMiwgR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjcsIEdQSU9fUFRaNiwgR1BJT19QVFo1LCBHUElPX1BUWjQsCisJR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwgR1BJT19QVFowLAorCisJLyogU0NJRjAgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMF9QVFRfVFhELCBHUElPX0ZOX1NDSUYwX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjBfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYwX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjBfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMF9QVFVfU0NLLAorCisJLyogU0NJRjEgKFNDSUY6IDMgcGluIFBUUy9QVFYpICovCisJR1BJT19GTl9TQ0lGMV9QVFNfVFhELCBHUElPX0ZOX1NDSUYxX1BUU19SWEQsIEdQSU9fRk5fU0NJRjFfUFRTX1NDSywKKwlHUElPX0ZOX1NDSUYxX1BUVl9UWEQsIEdQSU9fRk5fU0NJRjFfUFRWX1JYRCwgR1BJT19GTl9TQ0lGMV9QVFZfU0NLLAorCisJLyogU0NJRjIgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMl9QVFRfVFhELCBHUElPX0ZOX1NDSUYyX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjJfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYyX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjJfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMl9QVFVfU0NLLAorCisJLyogU0NJRjMgKFNDSUZBOiA1IHBpbiBQVFMvUFRWKSAqLworCUdQSU9fRk5fU0NJRjNfUFRTX1RYRCwgR1BJT19GTl9TQ0lGM19QVFNfUlhELCBHUElPX0ZOX1NDSUYzX1BUU19TQ0ssCisJR1BJT19GTl9TQ0lGM19QVFNfUlRTLCBHUElPX0ZOX1NDSUYzX1BUU19DVFMsCisJR1BJT19GTl9TQ0lGM19QVFZfVFhELCBHUElPX0ZOX1NDSUYzX1BUVl9SWEQsIEdQSU9fRk5fU0NJRjNfUFRWX1NDSywKKwlHUElPX0ZOX1NDSUYzX1BUVl9SVFMsIEdQSU9fRk5fU0NJRjNfUFRWX0NUUywKKworCS8qIFNDSUY0IChTQ0lGQTogMyBwaW4gUFRFL1BUTikgKi8KKwlHUElPX0ZOX1NDSUY0X1BURV9UWEQsIEdQSU9fRk5fU0NJRjRfUFRFX1JYRCwgR1BJT19GTl9TQ0lGNF9QVEVfU0NLLAorCUdQSU9fRk5fU0NJRjRfUFROX1RYRCwgR1BJT19GTl9TQ0lGNF9QVE5fUlhELCBHUElPX0ZOX1NDSUY0X1BUTl9TQ0ssCisKKwkvKiBTQ0lGNSAoU0NJRkE6IDMgcGluIFBURS9QVE4pICovCisJR1BJT19GTl9TQ0lGNV9QVEVfVFhELCBHUElPX0ZOX1NDSUY1X1BURV9SWEQsIEdQSU9fRk5fU0NJRjVfUFRFX1NDSywKKwlHUElPX0ZOX1NDSUY1X1BUTl9UWEQsIEdQSU9fRk5fU0NJRjVfUFROX1JYRCwgR1BJT19GTl9TQ0lGNV9QVE5fU0NLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sCisJR1BJT19GTl9WSU9fVkQxLCBHUElPX0ZOX1ZJT19IRDEsIEdQSU9fRk5fVklPX0NMSzEsCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEtfUFRSLCBHUElPX0ZOX0xDRExDTEtfUFRXLAorCS8qIE1haW4gTENEICovCisJR1BJT19GTl9MQ0RET04sIEdQSU9fRk5fTENEVkNQV0MsIEdQSU9fRk5fTENEVkVQV0MsIEdQSU9fRk5fTENEVlNZTiwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJR1BJT19GTl9MQ0REQ0ssIEdQSU9fRk5fTENESFNZTiwgR1BJT19GTl9MQ0RESVNQLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlHUElPX0ZOX0xDRFJTLCBHUElPX0ZOX0xDRENTLCBHUElPX0ZOX0xDRFdSLCBHUElPX0ZOX0xDRFJELAorCisJLyogSVJRICovCisJR1BJT19GTl9JUlEwLCBHUElPX0ZOX0lSUTEsIEdQSU9fRk5fSVJRMiwgR1BJT19GTl9JUlEzLAorCUdQSU9fRk5fSVJRNCwgR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTYsIEdQSU9fRk5fSVJRNywKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEQVRBMywgR1BJT19GTl9BVURBVEEyLCBHUElPX0ZOX0FVREFUQTEsIEdQSU9fRk5fQVVEQVRBMCwKKwlHUElPX0ZOX0FVRENLLCBHUElPX0ZOX0FVRFNZTkMsCisKKwkvKiBTREhJMCAoUFREKSAqLworCUdQSU9fRk5fU0RISTBDRF9QVEQsIEdQSU9fRk5fU0RISTBXUF9QVEQsCisJR1BJT19GTl9TREhJMEQzX1BURCwgR1BJT19GTl9TREhJMEQyX1BURCwKKwlHUElPX0ZOX1NESEkwRDFfUFRELCBHUElPX0ZOX1NESEkwRDBfUFRELAorCUdQSU9fRk5fU0RISTBDTURfUFRELCBHUElPX0ZOX1NESEkwQ0xLX1BURCwKKworCS8qIFNESEkwIChQVFMpICovCisJR1BJT19GTl9TREhJMENEX1BUUywgR1BJT19GTl9TREhJMFdQX1BUUywKKwlHUElPX0ZOX1NESEkwRDNfUFRTLCBHUElPX0ZOX1NESEkwRDJfUFRTLAorCUdQSU9fRk5fU0RISTBEMV9QVFMsIEdQSU9fRk5fU0RISTBEMF9QVFMsCisJR1BJT19GTl9TREhJMENNRF9QVFMsIEdQSU9fRk5fU0RISTBDTEtfUFRTLAorCisJLyogU0RISTEgKi8KKwlHUElPX0ZOX1NESEkxQ0QsIEdQSU9fRk5fU0RISTFXUCwgR1BJT19GTl9TREhJMUQzLCBHUElPX0ZOX1NESEkxRDIsCisJR1BJT19GTl9TREhJMUQxLCBHUElPX0ZOX1NESEkxRDAsIEdQSU9fRk5fU0RISTFDTUQsIEdQSU9fRk5fU0RISTFDTEssCisKKwkvKiBTSVVBICovCisJR1BJT19GTl9TSVVBRkNLLCBHUElPX0ZOX1NJVUFJTFIsIEdQSU9fRk5fU0lVQUlCVCwgR1BJT19GTl9TSVVBSVNMRCwKKwlHUElPX0ZOX1NJVUFPTFIsIEdQSU9fRk5fU0lVQU9CVCwgR1BJT19GTl9TSVVBT1NMRCwgR1BJT19GTl9TSVVBTUNLLAorCUdQSU9fRk5fU0lVQUlTUEQsIEdQSU9fRk5fU0lVT1NQRCwKKworCS8qIFNJVUIgKi8KKwlHUElPX0ZOX1NJVUJGQ0ssIEdQSU9fRk5fU0lVQklMUiwgR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJJU0xELAorCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVUJNQ0ssCisKKwkvKiBJUkRBICovCisJR1BJT19GTl9JUkRBX0lOLCBHUElPX0ZOX0lSREFfT1VULAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCisKKwkvKiBNU0lPRjAgKFBURikgKi8KKwlHUElPX0ZOX01TSU9GMF9QVEZfVFhELCBHUElPX0ZOX01TSU9GMF9QVEZfUlhELCBHUElPX0ZOX01TSU9GMF9QVEZfTUNLLAorCUdQSU9fRk5fTVNJT0YwX1BURl9UU1lOQywgR1BJT19GTl9NU0lPRjBfUFRGX1RTQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRGX1JTWU5DLCBHUElPX0ZOX01TSU9GMF9QVEZfUlNDSywKKwlHUElPX0ZOX01TSU9GMF9QVEZfU1MxLCBHUElPX0ZOX01TSU9GMF9QVEZfU1MyLAorCisJLyogTVNJT0YwIChQVFQrUFRYKSAqLworCUdQSU9fRk5fTVNJT0YwX1BUVF9UWEQsIEdQSU9fRk5fTVNJT0YwX1BUVF9SWEQsIEdQSU9fRk5fTVNJT0YwX1BUWF9NQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRUX1RTWU5DLCBHUElPX0ZOX01TSU9GMF9QVFRfVFNDSywKKwlHUElPX0ZOX01TSU9GMF9QVFRfUlNZTkMsIEdQSU9fRk5fTVNJT0YwX1BUVF9SU0NLLAorCUdQSU9fRk5fTVNJT0YwX1BUVF9TUzEsIEdQSU9fRk5fTVNJT0YwX1BUVF9TUzIsCisKKwkvKiBNU0lPRjEgKi8KKwlHUElPX0ZOX01TSU9GMV9UWEQsIEdQSU9fRk5fTVNJT0YxX1JYRCwgR1BJT19GTl9NU0lPRjFfTUNLLAorCUdQSU9fRk5fTVNJT0YxX1RTWU5DLCBHUElPX0ZOX01TSU9GMV9UU0NLLAorCUdQSU9fRk5fTVNJT0YxX1JTWU5DLCBHUElPX0ZOX01TSU9GMV9SU0NLLAorCUdQSU9fRk5fTVNJT0YxX1NTMSwgR1BJT19GTl9NU0lPRjFfU1MyLAorCisJLyogVFNJRiAqLworCUdQSU9fRk5fVFMwX1NEQVQsIEdQSU9fRk5fVFMwX1NDSywgR1BJT19GTl9UUzBfU0RFTiwgR1BJT19GTl9UUzBfU1BTWU5DLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fREFDSzEsIEdQSU9fRk5fRFJFUTEsIEdQSU9fRk5fREFDSzAsIEdQSU9fRk5fRFJFUTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIENQRyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9QRFNUQVRVUywKKworCS8qIFRQVSAqLworCUdQSU9fRk5fVFBVVE8zLCBHUElPX0ZOX1RQVVRPMiwgR1BJT19GTl9UUFVUTzEsIEdQSU9fRk5fVFBVVE8wLAorCisJLyogQlNDICovCisJR1BJT19GTl9EMzEsIEdQSU9fRk5fRDMwLCBHUElPX0ZOX0QyOSwgR1BJT19GTl9EMjgsCisJR1BJT19GTl9EMjcsIEdQSU9fRk5fRDI2LCBHUElPX0ZOX0QyNSwgR1BJT19GTl9EMjQsCisJR1BJT19GTl9EMjMsIEdQSU9fRk5fRDIyLCBHUElPX0ZOX0QyMSwgR1BJT19GTl9EMjAsCisJR1BJT19GTl9EMTksIEdQSU9fRk5fRDE4LCBHUElPX0ZOX0QxNywgR1BJT19GTl9EMTYsCisJR1BJT19GTl9JT0lTMTYsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9CUywKKwlHUElPX0ZOX0EyNSwgR1BJT19GTl9BMjQsIEdQSU9fRk5fQTIzLCBHUElPX0ZOX0EyMiwKKwlHUElPX0ZOX0NTNkJfQ0UxQiwgR1BJT19GTl9DUzZBX0NFMkIsCisJR1BJT19GTl9DUzVCX0NFMUEsIEdQSU9fRk5fQ1M1QV9DRTJBLAorCUdQSU9fRk5fV0UzX0lDSU9XUiwgR1BJT19GTl9XRTJfSUNJT1JELAorCisJLyogQVRBUEkgKi8KKwlHUElPX0ZOX0lERUQxNSwgR1BJT19GTl9JREVEMTQsIEdQSU9fRk5fSURFRDEzLCBHUElPX0ZOX0lERUQxMiwKKwlHUElPX0ZOX0lERUQxMSwgR1BJT19GTl9JREVEMTAsIEdQSU9fRk5fSURFRDksIEdQSU9fRk5fSURFRDgsCisJR1BJT19GTl9JREVENywgR1BJT19GTl9JREVENiwgR1BJT19GTl9JREVENSwgR1BJT19GTl9JREVENCwKKwlHUElPX0ZOX0lERUQzLCBHUElPX0ZOX0lERUQyLCBHUElPX0ZOX0lERUQxLCBHUElPX0ZOX0lERUQwLAorCUdQSU9fRk5fRElSRUNUSU9OLCBHUElPX0ZOX0VYQlVGX0VOQiwgR1BJT19GTl9JREVSU1QsIEdQSU9fRk5fSU9EQUNLLAorCUdQSU9fRk5fSU9EUkVRLCBHUElPX0ZOX0lERUlPUkRZLCBHUElPX0ZOX0lERUlOVCwgR1BJT19GTl9JREVJT1dSLAorCUdQSU9fRk5fSURFSU9SRCwgR1BJT19GTl9JREVDUzEsIEdQSU9fRk5fSURFQ1MwLCBHUElPX0ZOX0lERUEyLAorCUdQSU9fRk5fSURFQTEsIEdQSU9fRk5fSURFQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4NS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDA2YWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg1LmgKQEAgLTAsMCArMSwyMzQgQEAKKyNpZm5kZWYgX19BU01fU0g3Nzg1X0hfXworI2RlZmluZSBfX0FTTV9TSDc3ODVfSF9fCisKK2VudW0geworCS8qIFBBICovCisJR1BJT19QQTcsIEdQSU9fUEE2LCBHUElPX1BBNSwgR1BJT19QQTQsCisJR1BJT19QQTMsIEdQSU9fUEEyLCBHUElPX1BBMSwgR1BJT19QQTAsCisKKwkvKiBQQiAqLworCUdQSU9fUEI3LCBHUElPX1BCNiwgR1BJT19QQjUsIEdQSU9fUEI0LAorCUdQSU9fUEIzLCBHUElPX1BCMiwgR1BJT19QQjEsIEdQSU9fUEIwLAorCisJLyogUEMgKi8KKwlHUElPX1BDNywgR1BJT19QQzYsIEdQSU9fUEM1LCBHUElPX1BDNCwKKwlHUElPX1BDMywgR1BJT19QQzIsIEdQSU9fUEMxLCBHUElPX1BDMCwKKworCS8qIFBEICovCisJR1BJT19QRDcsIEdQSU9fUEQ2LCBHUElPX1BENSwgR1BJT19QRDQsCisJR1BJT19QRDMsIEdQSU9fUEQyLCBHUElPX1BEMSwgR1BJT19QRDAsCisKKwkvKiBQRSAqLworCUdQSU9fUEU1LCBHUElPX1BFNCwgR1BJT19QRTMsIEdQSU9fUEUyLAorCUdQSU9fUEUxLCBHUElPX1BFMCwKKworCS8qIFBGICovCisJR1BJT19QRjcsIEdQSU9fUEY2LCBHUElPX1BGNSwgR1BJT19QRjQsCisJR1BJT19QRjMsIEdQSU9fUEYyLCBHUElPX1BGMSwgR1BJT19QRjAsCisKKwkvKiBQRyAqLworCUdQSU9fUEc3LCBHUElPX1BHNiwgR1BJT19QRzUsIEdQSU9fUEc0LAorCUdQSU9fUEczLCBHUElPX1BHMiwgR1BJT19QRzEsIEdQSU9fUEcwLAorCisJLyogUEggKi8KKwlHUElPX1BINywgR1BJT19QSDYsIEdQSU9fUEg1LCBHUElPX1BINCwKKwlHUElPX1BIMywgR1BJT19QSDIsIEdQSU9fUEgxLCBHUElPX1BIMCwKKworCS8qIFBKICovCisJR1BJT19QSjcsIEdQSU9fUEo2LCBHUElPX1BKNSwgR1BJT19QSjQsCisJR1BJT19QSjMsIEdQSU9fUEoyLCBHUElPX1BKMSwgR1BJT19QSjAsCisKKwkvKiBQSyAqLworCUdQSU9fUEs3LCBHUElPX1BLNiwgR1BJT19QSzUsIEdQSU9fUEs0LAorCUdQSU9fUEszLCBHUElPX1BLMiwgR1BJT19QSzEsIEdQSU9fUEswLAorCisJLyogUEwgKi8KKwlHUElPX1BMNywgR1BJT19QTDYsIEdQSU9fUEw1LCBHUElPX1BMNCwKKwlHUElPX1BMMywgR1BJT19QTDIsIEdQSU9fUEwxLCBHUElPX1BMMCwKKworCS8qIFBNICovCisJR1BJT19QTTEsIEdQSU9fUE0wLAorCisJLyogUE4gKi8KKwlHUElPX1BONywgR1BJT19QTjYsIEdQSU9fUE41LCBHUElPX1BONCwKKwlHUElPX1BOMywgR1BJT19QTjIsIEdQSU9fUE4xLCBHUElPX1BOMCwKKworCS8qIFBQICovCisJR1BJT19QUDUsIEdQSU9fUFA0LAorCUdQSU9fUFAzLCBHUElPX1BQMiwgR1BJT19QUDEsIEdQSU9fUFAwLAorCisJLyogUFEgKi8KKwlHUElPX1BRNCwKKwlHUElPX1BRMywgR1BJT19QUTIsIEdQSU9fUFExLCBHUElPX1BRMCwKKworCS8qIFBSICovCisJR1BJT19QUjMsIEdQSU9fUFIyLCBHUElPX1BSMSwgR1BJT19QUjAsCisKKwlHUElPX0ZOX0Q2M19BRDMxLAorCUdQSU9fRk5fRDYyX0FEMzAsCisJR1BJT19GTl9ENjFfQUQyOSwKKwlHUElPX0ZOX0Q2MF9BRDI4LAorCUdQSU9fRk5fRDU5X0FEMjcsCisJR1BJT19GTl9ENThfQUQyNiwKKwlHUElPX0ZOX0Q1N19BRDI1LAorCUdQSU9fRk5fRDU2X0FEMjQsCisJR1BJT19GTl9ENTVfQUQyMywKKwlHUElPX0ZOX0Q1NF9BRDIyLAorCUdQSU9fRk5fRDUzX0FEMjEsCisJR1BJT19GTl9ENTJfQUQyMCwKKwlHUElPX0ZOX0Q1MV9BRDE5LAorCUdQSU9fRk5fRDUwX0FEMTgsCisJR1BJT19GTl9ENDlfQUQxN19EQjUsCisJR1BJT19GTl9ENDhfQUQxNl9EQjQsCisJR1BJT19GTl9ENDdfQUQxNV9EQjMsCisJR1BJT19GTl9ENDZfQUQxNF9EQjIsCisJR1BJT19GTl9ENDVfQUQxM19EQjEsCisJR1BJT19GTl9ENDRfQUQxMl9EQjAsCisJR1BJT19GTl9ENDNfQUQxMV9ERzUsCisJR1BJT19GTl9ENDJfQUQxMF9ERzQsCisJR1BJT19GTl9ENDFfQUQ5X0RHMywKKwlHUElPX0ZOX0Q0MF9BRDhfREcyLAorCUdQSU9fRk5fRDM5X0FEN19ERzEsCisJR1BJT19GTl9EMzhfQUQ2X0RHMCwKKwlHUElPX0ZOX0QzN19BRDVfRFI1LAorCUdQSU9fRk5fRDM2X0FENF9EUjQsCisJR1BJT19GTl9EMzVfQUQzX0RSMywKKwlHUElPX0ZOX0QzNF9BRDJfRFIyLAorCUdQSU9fRk5fRDMzX0FEMV9EUjEsCisJR1BJT19GTl9EMzJfQUQwX0RSMCwKKwlHUElPX0ZOX1JFUTEsCisJR1BJT19GTl9SRVEyLAorCUdQSU9fRk5fUkVRMywKKwlHUElPX0ZOX0dOVDEsCisJR1BJT19GTl9HTlQyLAorCUdQSU9fRk5fR05UMywKKwlHUElPX0ZOX01NQ0NMSywKKwlHUElPX0ZOX0QzMSwKKwlHUElPX0ZOX0QzMCwKKwlHUElPX0ZOX0QyOSwKKwlHUElPX0ZOX0QyOCwKKwlHUElPX0ZOX0QyNywKKwlHUElPX0ZOX0QyNiwKKwlHUElPX0ZOX0QyNSwKKwlHUElPX0ZOX0QyNCwKKwlHUElPX0ZOX0QyMywKKwlHUElPX0ZOX0QyMiwKKwlHUElPX0ZOX0QyMSwKKwlHUElPX0ZOX0QyMCwKKwlHUElPX0ZOX0QxOSwKKwlHUElPX0ZOX0QxOCwKKwlHUElPX0ZOX0QxNywKKwlHUElPX0ZOX0QxNiwKKwlHUElPX0ZOX1NDSUYxX1NDSywKKwlHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1RYRCwKKwlHUElPX0ZOX1NDSUYwX0NUUywKKwlHUElPX0ZOX0lOVEQsCisJR1BJT19GTl9GQ0UsCisJR1BJT19GTl9TQ0lGMF9SVFMsCisJR1BJT19GTl9IU1BJX0NTLAorCUdQSU9fRk5fRlNFLAorCUdQSU9fRk5fU0NJRjBfU0NLLAorCUdQSU9fRk5fSFNQSV9DTEssCisJR1BJT19GTl9GUkUsCisJR1BJT19GTl9TQ0lGMF9SWEQsCisJR1BJT19GTl9IU1BJX1JYLAorCUdQSU9fRk5fRlJCLAorCUdQSU9fRk5fU0NJRjBfVFhELAorCUdQSU9fRk5fSFNQSV9UWCwKKwlHUElPX0ZOX0ZXRSwKKwlHUElPX0ZOX1NDSUY1X1RYRCwKKwlHUElPX0ZOX0hBQzFfU1lOQywKKwlHUElPX0ZOX1NTSTFfV1MsCisJR1BJT19GTl9TSU9GX1RYRF9QSiwKKwlHUElPX0ZOX0hBQzBfU0RPVVQsCisJR1BJT19GTl9TU0kwX1NEQVRBLAorCUdQSU9fRk5fU0lPRl9SWERfUEosCisJR1BJT19GTl9IQUMwX1NESU4sCisJR1BJT19GTl9TU0kwX1NDSywKKwlHUElPX0ZOX1NJT0ZfU1lOQ19QSiwKKwlHUElPX0ZOX0hBQzBfU1lOQywKKwlHUElPX0ZOX1NTSTBfV1MsCisJR1BJT19GTl9TSU9GX01DTEtfUEosCisJR1BJT19GTl9IQUNfUkVTLAorCUdQSU9fRk5fU0lPRl9TQ0tfUEosCisJR1BJT19GTl9IQUMwX0JJVENMSywKKwlHUElPX0ZOX1NTSTBfQ0xLLAorCUdQSU9fRk5fSEFDMV9CSVRDTEssCisJR1BJT19GTl9TU0kxX0NMSywKKwlHUElPX0ZOX1RDTEssCisJR1BJT19GTl9JT0lTMTYsCisJR1BJT19GTl9TVEFUVVMwLAorCUdQSU9fRk5fRFJBSzBfUEszLAorCUdQSU9fRk5fU1RBVFVTMSwKKwlHUElPX0ZOX0RSQUsxX1BLMiwKKwlHUElPX0ZOX0RBQ0syLAorCUdQSU9fRk5fU0NJRjJfVFhELAorCUdQSU9fRk5fTU1DQ01ELAorCUdQSU9fRk5fU0lPRl9UWERfUEssCisJR1BJT19GTl9EQUNLMywKKwlHUElPX0ZOX1NDSUYyX1NDSywKKwlHUElPX0ZOX01NQ0RBVCwKKwlHUElPX0ZOX1NJT0ZfU0NLX1BLLAorCUdQSU9fRk5fRFJFUTAsCisJR1BJT19GTl9EUkVRMSwKKwlHUElPX0ZOX0RSQUswX1BLMSwKKwlHUElPX0ZOX0RSQUsxX1BLMCwKKwlHUElPX0ZOX0RSRVEyLAorCUdQSU9fRk5fSU5UQiwKKwlHUElPX0ZOX0RSRVEzLAorCUdQSU9fRk5fSU5UQywKKwlHUElPX0ZOX0RSQUsyLAorCUdQSU9fRk5fQ0UyQSwKKwlHUElPX0ZOX0lSTDQsCisJR1BJT19GTl9GRDQsCisJR1BJT19GTl9JUkw1LAorCUdQSU9fRk5fRkQ1LAorCUdQSU9fRk5fSVJMNiwKKwlHUElPX0ZOX0ZENiwKKwlHUElPX0ZOX0lSTDcsCisJR1BJT19GTl9GRDcsCisJR1BJT19GTl9EUkFLMywKKwlHUElPX0ZOX0NFMkIsCisJR1BJT19GTl9CUkVRX0JTQUNLLAorCUdQSU9fRk5fQkFDS19CU1JFUSwKKwlHUElPX0ZOX1NDSUY1X1JYRCwKKwlHUElPX0ZOX0hBQzFfU0RJTiwKKwlHUElPX0ZOX1NTSTFfU0NLLAorCUdQSU9fRk5fU0NJRjVfU0NLLAorCUdQSU9fRk5fSEFDMV9TRE9VVCwKKwlHUElPX0ZOX1NTSTFfU0RBVEEsCisJR1BJT19GTl9TQ0lGM19UWEQsCisJR1BJT19GTl9GQ0xFLAorCUdQSU9fRk5fU0NJRjNfUlhELAorCUdQSU9fRk5fRkFMRSwKKwlHUElPX0ZOX1NDSUYzX1NDSywKKwlHUElPX0ZOX0ZEMCwKKwlHUElPX0ZOX1NDSUY0X1RYRCwKKwlHUElPX0ZOX0ZEMSwKKwlHUElPX0ZOX1NDSUY0X1JYRCwKKwlHUElPX0ZOX0ZEMiwKKwlHUElPX0ZOX1NDSUY0X1NDSywKKwlHUElPX0ZOX0ZEMywKKwlHUElPX0ZOX0RFVlNFTF9EQ0xLT1VULAorCUdQSU9fRk5fU1RPUF9DREUsCisJR1BJT19GTl9MT0NLX09EREYsCisJR1BJT19GTl9UUkRZX0RJU1BMLAorCUdQSU9fRk5fSVJEWV9IU1lOQywKKwlHUElPX0ZOX1BDSUZSQU1FX1ZTWU5DLAorCUdQSU9fRk5fSU5UQSwKKwlHUElPX0ZOX0dOVDBfR05USU4sCisJR1BJT19GTl9SRVEwX1JFUU9VVCwKKwlHUElPX0ZOX1BFUlIsCisJR1BJT19GTl9TRVJSLAorCUdQSU9fRk5fV0U3X0NCRTMsCisJR1BJT19GTl9XRTZfQ0JFMiwKKwlHUElPX0ZOX1dFNV9DQkUxLAorCUdQSU9fRk5fV0U0X0NCRTAsCisJR1BJT19GTl9TQ0lGMl9SWEQsCisJR1BJT19GTl9TSU9GX1JYRCwKKwlHUElPX0ZOX01SRVNFVE9VVCwKKwlHUElPX0ZOX0lSUU9VVCwKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSDc3ODVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Vkb3NrNzcwNS5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvZWRvc2s3NzA1LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vZWRvc2s3NzA1LmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2Vkb3NrNzcwNS5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyNmE4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hpZ2hsYW5kZXIuaApAQCAtMCwwICsxLDIwNCBAQAorI2lmbmRlZiBfX0FTTV9TSF9SRU5FU0FTX1I3NzgwUlBfSAorI2RlZmluZSBfX0FTTV9TSF9SRU5FU0FTX1I3NzgwUlBfSAorCisvKiBCb3ggc3BlY2lmaWMgYWRkcmVzc2VzLiAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TSF9SNzc4ME1QKQorI2RlZmluZSBQQV9CQ1IgICAgICAgICAgMHhhNDAwMDAwMCAgICAgIC8qIEZQR0EgKi8KKyNkZWZpbmUgUEFfU0RQT1cJKC0xKQorCisjZGVmaW5lIFBBX0lSTE1TSyAgICAgICAoUEFfQkNSKzB4MDAwMCkgLyogSW50ZXJydXB0IE1hc2sgY29udHJvbCAqLworI2RlZmluZSBQQV9JUkxNT04gICAgICAgKFBBX0JDUisweDAwMDIpIC8qIEludGVycnVwdCBTdGF0dXMgY29udHJvbCAqLworI2RlZmluZSBQQV9JUkxQUkkxICAgICAgKFBBX0JDUisweDAwMDQpIC8qIEludGVycnVwdCBQcmlvcnR5IDEgKi8KKyNkZWZpbmUgUEFfSVJMUFJJMiAgICAgIChQQV9CQ1IrMHgwMDA2KSAvKiBJbnRlcnJ1cHQgUHJpb3J0eSAyICovCisjZGVmaW5lIFBBX0lSTFBSSTMgICAgICAoUEFfQkNSKzB4MDAwOCkgLyogSW50ZXJydXB0IFByaW9ydHkgMyAqLworI2RlZmluZSBQQV9JUkxQUkk0ICAgICAgKFBBX0JDUisweDAwMGEpIC8qIEludGVycnVwdCBQcmlvcnR5IDQgKi8KKyNkZWZpbmUgUEFfUlNUQ1RMICAgICAgIChQQV9CQ1IrMHgwMDBjKSAvKiBSZXNldCBDb250cm9sICovCisjZGVmaW5lIFBBX1BDSUJEICAgICAgICAoUEFfQkNSKzB4MDAwZSkgLyogUENJIEJvYXJkIGRldGVjdCBjb250cm9sICovCisjZGVmaW5lIFBBX1BDSUNEICAgICAgICAoUEFfQkNSKzB4MDAxMCkgLyogUENJIENvbmVjdG9yIGRldGVjdCBjb250cm9sICovCisjZGVmaW5lIFBBX0VYVEdJTyAgICAgICAoUEFfQkNSKzB4MDAxNikgLyogRXh0ZW5zaW9uIEdQSU8gQ29udHJvbCAqLworI2RlZmluZSBQQV9JVkRSTU9OICAgICAgKFBBX0JDUisweDAwMTgpIC8qIGlWRFIgTW9uaXRlciBjb250cm9sICovCisjZGVmaW5lIFBBX0lWRFJDVEwgICAgICAoUEFfQkNSKzB4MDAxYSkgLyogaVZEUiBjb250cm9sICovCisjZGVmaW5lIFBBX09CTEVEICAgICAgICAoUEFfQkNSKzB4MDAxYykgLyogT24gQm9hcmQgTEVEIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfT0JTVyAgICAgICAgIChQQV9CQ1IrMHgwMDFlKSAvKiBPbiBCb2FyZCBTd2l0Y2ggY29udHJvbCAqLworI2RlZmluZSBQQV9BVURJT1NFTCAgICAgKFBBX0JDUisweDAwMjApIC8qIFNvdW5kIEludGVyZmFjZSBTZWxlY3QgY29udHJvbCAqLworI2RlZmluZSBQQV9FWFRQTFIgICAgICAgKFBBX0JDUisweDAwMWUpIC8qIEV4dGVudGlvbiBQaW4gUG9sYXJpdHkgY29udHJvbCAqLworI2RlZmluZSBQQV9UUENUTCAgICAgICAgKFBBX0JDUisweDAxMDApIC8qIFRvdWNoIFBhbmVsIEFjY2VzcyBjb250cm9sICovCisjZGVmaW5lIFBBX1RQRENLQ1RMICAgICAoUEFfQkNSKzB4MDEwMikgLyogVG91Y2ggUGFuZWwgQWNjZXNzIGRhdGEgY29udHJvbCAqLworI2RlZmluZSBQQV9UUENUTENMUiAgICAgKFBBX0JDUisweDAxMDQpIC8qIFRvdWNoIFBhbmVsIEFjY2VzcyBjb250cm9sICovCisjZGVmaW5lIFBBX1RQWFBPUyAgICAgICAoUEFfQkNSKzB4MDEwNikgLyogVG91Y2ggUGFuZWwgWCBwb3NpdGlvbiBjb250cm9sICovCisjZGVmaW5lIFBBX1RQWVBPUyAgICAgICAoUEFfQkNSKzB4MDEwOCkgLyogVG91Y2ggUGFuZWwgWSBwb3NpdGlvbiBjb250cm9sICovCisjZGVmaW5lIFBBX0RCU1cgICAgICAgICAoUEFfQkNSKzB4MDIwMCkgLyogRGVidWcgQm9hcmQgU3dpdGNoIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfQ0ZDVEwgICAgICAgIChQQV9CQ1IrMHgwMzAwKSAvKiBDRiBUaW1pbmcgY29udHJvbCAqLworI2RlZmluZSBQQV9DRlBPVyAgICAgICAgKFBBX0JDUisweDAzMDIpIC8qIENGIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfQ0ZDRElOVENMUiAgIChQQV9CQ1IrMHgwMzA0KSAvKiBDRiBJbnNlcnQgSW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFBBX1NDU01SMCAgICAgICAoUEFfQkNSKzB4MDQwMCkgLyogU0NJRjAgU2VyaWFsIG1vZGUgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0JSUjAgICAgICAgKFBBX0JDUisweDA0MDQpIC8qIFNDSUYwIEJpdCByYXRlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NTQ1IwICAgICAgIChQQV9CQ1IrMHgwNDA4KSAvKiBTQ0lGMCBTZXJpYWwgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZURFIwICAgICAgKFBBX0JDUisweDA0MGMpIC8qIFNDSUYwIFNlbmQgRklGTyBjb250cm9sICovCisjZGVmaW5lIFBBX1NDRlNSMCAgICAgICAoUEFfQkNSKzB4MDQxMCkgLyogU0NJRjAgU2VyaWFsIHN0YXR1cyBjb250cm9sICovCisjZGVmaW5lIFBBX1NDRlJEUjAgICAgICAoUEFfQkNSKzB4MDQxNCkgLyogU0NJRjAgUmVjZWl2ZSBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGQ1IwICAgICAgIChQQV9CQ1IrMHgwNDE4KSAvKiBTQ0lGMCBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NURkRSMCAgICAgIChQQV9CQ1IrMHgwNDFjKSAvKiBTQ0lGMCBTZW5kIEZJRk8gZGF0YSBjb250cm9sICovCisjZGVmaW5lIFBBX1NDUkZEUjAgICAgICAoUEFfQkNSKzB4MDQyMCkgLyogU0NJRjAgUmVjZWl2ZSBGSUZPIGRhdGEgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1NQVFIwICAgICAgKFBBX0JDUisweDA0MjQpIC8qIFNDSUYwIFNlcmlhbCBQb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NMU1IwICAgICAgIChQQV9CQ1IrMHgwNDI4KSAvKiBTQ0lGMCBMaW5lIFN0YXR1cyBjb250cm9sICovCisjZGVmaW5lIFBBX1NDUkVSMCAgICAgICAoUEFfQkNSKzB4MDQyYykgLyogU0NJRjAgU2VyaWFsIEVycm9yIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NTTVIxICAgICAgIChQQV9CQ1IrMHgwNTAwKSAvKiBTQ0lGMSBTZXJpYWwgbW9kZSBjb250cm9sICovCisjZGVmaW5lIFBBX1NDQlJSMSAgICAgICAoUEFfQkNSKzB4MDUwNCkgLyogU0NJRjEgQml0IHJhdGUgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1NDUjEgICAgICAgKFBBX0JDUisweDA1MDgpIC8qIFNDSUYxIFNlcmlhbCBjb250cm9sICovCisjZGVmaW5lIFBBX1NDRlREUjEgICAgICAoUEFfQkNSKzB4MDUwYykgLyogU0NJRjEgU2VuZCBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGU1IxICAgICAgIChQQV9CQ1IrMHgwNTEwKSAvKiBTQ0lGMSBTZXJpYWwgc3RhdHVzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGUkRSMSAgICAgIChQQV9CQ1IrMHgwNTE0KSAvKiBTQ0lGMSBSZWNlaXZlIEZJRk8gY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZDUjEgICAgICAgKFBBX0JDUisweDA1MTgpIC8qIFNDSUYxIEZJRk8gY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1RGRFIxICAgICAgKFBBX0JDUisweDA1MWMpIC8qIFNDSUYxIFNlbmQgRklGTyBkYXRhIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NSRkRSMSAgICAgIChQQV9CQ1IrMHgwNTIwKSAvKiBTQ0lGMSBSZWNlaXZlIEZJRk8gZGF0YSBjb250cm9sICovCisjZGVmaW5lIFBBX1NDU1BUUjEgICAgICAoUEFfQkNSKzB4MDUyNCkgLyogU0NJRjEgU2VyaWFsIFBvcnQgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0xTUjEgICAgICAgKFBBX0JDUisweDA1MjgpIC8qIFNDSUYxIExpbmUgU3RhdHVzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NSRVIxICAgICAgIChQQV9CQ1IrMHgwNTJjKSAvKiBTQ0lGMSBTZXJpYWwgRXJyb3IgY29udHJvbCAqLworI2RlZmluZSBQQV9TTUNSICAgICAgICAgKFBBX0JDUisweDA2MDApIC8qIDItd2lyZSBTZXJpYWwgY29udHJvbCAqLworI2RlZmluZSBQQV9TTVNNQURSICAgICAgKFBBX0JDUisweDA2MDIpIC8qIDItd2lyZSBTZXJpYWwgU2xhdmUgY29udHJvbCAqLworI2RlZmluZSBQQV9TTU1SICAgICAgICAgKFBBX0JDUisweDA2MDQpIC8qIDItd2lyZSBTZXJpYWwgTW9kZSBjb250cm9sICovCisjZGVmaW5lIFBBX1NNU0FEUjEgICAgICAoUEFfQkNSKzB4MDYwNikgLyogMi13aXJlIFNlcmlhbCBBZGRyZXNzMSBjb250cm9sICovCisjZGVmaW5lIFBBX1NNVFJEUjEgICAgICAoUEFfQkNSKzB4MDY0NikgLyogMi13aXJlIFNlcmlhbCBEYXRhMSBjb250cm9sICovCisjZGVmaW5lIFBBX1ZFUlJFRyAgICAgICAoUEFfQkNSKzB4MDcwMCkgLyogRlBHQSBWZXJzaW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBBX1BPRkYgICAgICAgICAoUEFfQkNSKzB4MDgwMCkgLyogU3lzdGVtIFBvd2VyIE9mZiBjb250cm9sICovCisjZGVmaW5lIFBBX1BNUiAgICAgICAgICAoUEFfQkNSKzB4MDkwMCkgLyogICovCisKKyNkZWZpbmUgSVJMQ05UUjEgICAgICAgIChQQV9CQ1IgKyAwKSAgICAvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcjEgKi8KKyNkZWZpbmUgSVZEUl9DS19PTgk4CQkvKiBpVkRSIENsb2NrIE9OICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIX1I3NzgwUlApCisjZGVmaW5lIFBBX1BPRkYJCSgtMSkKKworI2RlZmluZSBQQV9CQ1IJCTB4YTUwMDAwMDAJLyogRlBHQSAqLworI2RlZmluZQlQQV9JUkxNU0sJKFBBX0JDUisweDAwMDApCS8qIEludGVycnVwdCBNYXNrIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfSVJMTU9OCShQQV9CQ1IrMHgwMDAyKQkvKiBJbnRlcnJ1cHQgU3RhdHVzIGNvbnRyb2wgKi8KKyNkZWZpbmUJUEFfU0RQT1cJKFBBX0JDUisweDAwMDQpCS8qIFNEIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUJUEFfUlNUQ1RMCShQQV9CQ1IrMHgwMDA2KQkvKiBEZXZpY2UgUmVzZXQgY29udHJvbCAqLworI2RlZmluZQlQQV9QQ0lCRAkoUEFfQkNSKzB4MDAwOCkJLyogUENJIEJvYXJkIGRldGVjdCBjb250cm9sICovCisjZGVmaW5lCVBBX1BDSUNECShQQV9CQ1IrMHgwMDBhKQkvKiBQQ0kgQ29uZWN0b3IgZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUJUEFfWklHSU8xCShQQV9CQ1IrMHgwMDBjKQkvKiBaaWdiZWUgSU8gY29udHJvbCAxICovCisjZGVmaW5lCVBBX1pJR0lPMgkoUEFfQkNSKzB4MDAwZSkJLyogWmlnYmVlIElPIGNvbnRyb2wgMiAqLworI2RlZmluZQlQQV9aSUdJTzMJKFBBX0JDUisweDAwMTApCS8qIFppZ2JlZSBJTyBjb250cm9sIDMgKi8KKyNkZWZpbmUJUEFfWklHSU80CShQQV9CQ1IrMHgwMDEyKQkvKiBaaWdiZWUgSU8gY29udHJvbCA0ICovCisjZGVmaW5lCVBBX0lWRFJNT04JKFBBX0JDUisweDAwMTQpCS8qIGlWRFIgTW9uaXRlciBjb250cm9sICovCisjZGVmaW5lCVBBX0lWRFJDVEwJKFBBX0JDUisweDAwMTYpCS8qIGlWRFIgY29udHJvbCAqLworI2RlZmluZSBQQV9PQkxFRAkoUEFfQkNSKzB4MDAxOCkJLyogT24gQm9hcmQgTEVEIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfT0JTVwkJKFBBX0JDUisweDAwMWEpCS8qIE9uIEJvYXJkIFN3aXRjaCBjb250cm9sICovCisjZGVmaW5lIFBBX0FVRElPU0VMCShQQV9CQ1IrMHgwMDFjKQkvKiBTb3VuZCBJbnRlcmZhY2UgU2VsZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfRVhUUExSCShQQV9CQ1IrMHgwMDFlKQkvKiBFeHRlbnRpb24gUGluIFBvbGFyaXR5IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfVFBDVEwJKFBBX0JDUisweDAxMDApCS8qIFRvdWNoIFBhbmVsIEFjY2VzcyBjb250cm9sICovCisjZGVmaW5lIFBBX1RQRENLQ1RMCShQQV9CQ1IrMHgwMTAyKQkvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgZGF0YSBjb250cm9sICovCisjZGVmaW5lIFBBX1RQQ1RMQ0xSCShQQV9CQ1IrMHgwMTA0KQkvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgY29udHJvbCAqLworI2RlZmluZSBQQV9UUFhQT1MJKFBBX0JDUisweDAxMDYpCS8qIFRvdWNoIFBhbmVsIFggcG9zaXRpb24gY29udHJvbCAqLworI2RlZmluZSBQQV9UUFlQT1MJKFBBX0JDUisweDAxMDgpCS8qIFRvdWNoIFBhbmVsIFkgcG9zaXRpb24gY29udHJvbCAqLworI2RlZmluZSBQQV9EQkRFVAkoUEFfQkNSKzB4MDIwMCkJLyogRGVidWcgQm9hcmQgZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfREJESVNQQ1RMCShQQV9CQ1IrMHgwMjAyKQkvKiBEZWJ1ZyBCb2FyZCBEb3QgdGltaW5nIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfREJTVwkJKFBBX0JDUisweDAyMDQpCS8qIERlYnVnIEJvYXJkIFN3aXRjaCBjb250cm9sICovCisjZGVmaW5lIFBBX0NGQ1RMCShQQV9CQ1IrMHgwMzAwKQkvKiBDRiBUaW1pbmcgY29udHJvbCAqLworI2RlZmluZSBQQV9DRlBPVwkoUEFfQkNSKzB4MDMwMikJLyogQ0YgUG93ZXIgY29udHJvbCAqLworI2RlZmluZSBQQV9DRkNESU5UQ0xSCShQQV9CQ1IrMHgwMzA0KQkvKiBDRiBJbnNlcnQgSW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFBBX1NDU01SCShQQV9CQ1IrMHgwNDAwKQkvKiBTQ0lGIFNlcmlhbCBtb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NCUlIJKFBBX0JDUisweDA0MDIpCS8qIFNDSUYgQml0IHJhdGUgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1NDUgkoUEFfQkNSKzB4MDQwNCkJLyogU0NJRiBTZXJpYWwgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZEVFIJKFBBX0JDUisweDA0MDYpCS8qIFNDSUYgU2VuZCBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGU1IJKFBBX0JDUisweDA0MDgpCS8qIFNDSUYgU2VyaWFsIHN0YXR1cyBjb250cm9sICovCisjZGVmaW5lIFBBX1NDRlJEUgkoUEFfQkNSKzB4MDQwYSkJLyogU0NJRiBSZWNlaXZlIEZJRk8gY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZDUgkoUEFfQkNSKzB4MDQwYykJLyogU0NJRiBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGRFIJKFBBX0JDUisweDA0MGUpCS8qIFNDSUYgRklGTyBkYXRhIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NMU1IJKFBBX0JDUisweDA0MTIpCS8qIFNDSUYgTGluZSBTdGF0dXMgY29udHJvbCAqLworI2RlZmluZSBQQV9TTUNSCQkoUEFfQkNSKzB4MDUwMCkJLyogMi13aXJlIFNlcmlhbCBjb250cm9sICovCisjZGVmaW5lIFBBX1NNU01BRFIJKFBBX0JDUisweDA1MDIpCS8qIDItd2lyZSBTZXJpYWwgU2xhdmUgY29udHJvbCAqLworI2RlZmluZSBQQV9TTU1SCQkoUEFfQkNSKzB4MDUwNCkJLyogMi13aXJlIFNlcmlhbCBNb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU01TQURSMQkoUEFfQkNSKzB4MDUwNikJLyogMi13aXJlIFNlcmlhbCBBZGRyZXNzMSBjb250cm9sICovCisjZGVmaW5lIFBBX1NNVFJEUjEJKFBBX0JDUisweDA1NDYpCS8qIDItd2lyZSBTZXJpYWwgRGF0YTEgY29udHJvbCAqLworI2RlZmluZSBQQV9WRVJSRUcJKFBBX0JDUisweDA2MDApCS8qIEZQR0EgVmVyc2lvbiBSZWdpc3RlciAqLworCisjZGVmaW5lIFBBX0FYODg3OTZMCTB4YTU4MDA0MDAJLyogQVg4ODc5NkwgQXJlYSAqLworI2RlZmluZSBQQV9TQzE2MDJCU0xCCTB4YTYwMDAwMDAJLyogU0MxNjAyQlNMQiBBcmVhICovCisjZGVmaW5lIFBBX0lERV9PRkZTRVQJMHgxZjAJCS8qIENGIElERSBPZmZzZXQgKi8KKyNkZWZpbmUgQVg4ODc5NkxfSU9fQkFTRQkweDEwMDAJLyogQVg4ODc5NkwgSU8gQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgSVJMQ05UUjEJKFBBX0JDUiArIDApCS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyMSAqLworCisjZGVmaW5lIElWRFJfQ0tfT04JOAkJLyogaVZEUiBDbG9jayBPTiAqLworCisjZWxpZiBkZWZpbmVkKENPTkZJR19TSF9SNzc4NVJQKQorI2RlZmluZSBQQV9CQ1IJCTB4YTQwMDAwMDAJLyogRlBHQSAqLworI2RlZmluZSBQQV9TRFBPVwkoLTEpCisKKyNkZWZpbmUJUEFfUENJU0NSCShQQV9CQ1IrMHgwMDAwKQorI2RlZmluZSBQQV9JUkxQUkEJKFBBX0JDUisweDAwMDIpCisjZGVmaW5lCVBBX0lSTFBSQgkoUEFfQkNSKzB4MDAwNCkKKyNkZWZpbmUJUEFfSVJMUFJDCShQQV9CQ1IrMHgwMDA2KQorI2RlZmluZQlQQV9JUkxQUkQJKFBBX0JDUisweDAwMDgpCisjZGVmaW5lIElSTENOVFIxCShQQV9CQ1IrMHgwMDEwKQorI2RlZmluZQlQQV9JUkxQUkUJKFBBX0JDUisweDAwMGEpCisjZGVmaW5lCVBBX0lSTFBSRgkoUEFfQkNSKzB4MDAwYykKKyNkZWZpbmUJUEFfRVhJUkxDUgkoUEFfQkNSKzB4MDAwZSkKKyNkZWZpbmUJUEFfSVJMTUNSMQkoUEFfQkNSKzB4MDAxMCkKKyNkZWZpbmUJUEFfSVJMTUNSMgkoUEFfQkNSKzB4MDAxMikKKyNkZWZpbmUJUEFfSVJMU1NSMQkoUEFfQkNSKzB4MDAxNCkKKyNkZWZpbmUJUEFfSVJMU1NSMgkoUEFfQkNSKzB4MDAxNikKKyNkZWZpbmUgUEFfQ0ZUQ1IJKFBBX0JDUisweDAxMDApCisjZGVmaW5lIFBBX0NGUENSCShQQV9CQ1IrMHgwMTAyKQorI2RlZmluZSBQQV9QQ0lDUgkoUEFfQkNSKzB4MDExMCkKKyNkZWZpbmUgUEFfSVZEUkNUTAkoUEFfQkNSKzB4MDExMikKKyNkZWZpbmUgUEFfSVZEUlNSCShQQV9CQ1IrMHgwMTE0KQorI2RlZmluZSBQQV9QRFJTVENSCShQQV9CQ1IrMHgwMTE2KQorI2RlZmluZSBQQV9QT0ZGCQkoUEFfQkNSKzB4MDEyMCkKKyNkZWZpbmUgUEFfTENEQ1IJKFBBX0JDUisweDAxMzApCisjZGVmaW5lIFBBX1RQQ1IJCShQQV9CQ1IrMHgwMTQwKQorI2RlZmluZSBQQV9UUENLQ1IJKFBBX0JDUisweDAxNDIpCisjZGVmaW5lIFBBX1RQUlNUUgkoUEFfQkNSKzB4MDE0NCkKKyNkZWZpbmUgUEFfVFBYUERSCShQQV9CQ1IrMHgwMTQ2KQorI2RlZmluZSBQQV9UUFlQRFIJKFBBX0JDUisweDAxNDgpCisjZGVmaW5lIFBBX0dQSU9QRlIJKFBBX0JDUisweDAxNTApCisjZGVmaW5lIFBBX0dQSU9EUgkoUEFfQkNSKzB4MDE1MikKKyNkZWZpbmUgUEFfT0JMRUQJKFBBX0JDUisweDAxNTQpCisjZGVmaW5lIFBBX1NXU1IJCShQQV9CQ1IrMHgwMTU2KQorI2RlZmluZSBQQV9WRVJSRUcJKFBBX0JDUisweDAxNTgpCisjZGVmaW5lIFBBX1NNQ1IJCShQQV9CQ1IrMHgwMjAwKQorI2RlZmluZSBQQV9TTVNNQURSCShQQV9CQ1IrMHgwMjAyKQorI2RlZmluZSBQQV9TTU1SCQkoUEFfQkNSKzB4MDIwNCkKKyNkZWZpbmUgUEFfU01TQURSMQkoUEFfQkNSKzB4MDIwNikKKyNkZWZpbmUgUEFfU01TQURSMzIJKFBBX0JDUisweDAyNDQpCisjZGVmaW5lIFBBX1NNVFJEUjEJKFBBX0JDUisweDAyNDYpCisjZGVmaW5lIFBBX1NNVFJEUjE2CShQQV9CQ1IrMHgwMjY0KQorI2RlZmluZSBQQV9DVTNNRFIJKFBBX0JDUisweDAzMDApCisjZGVmaW5lIFBBX0NVNU1EUgkoUEFfQkNSKzB4MDMwMikKKyNkZWZpbmUgUEFfTU1TUgkJKFBBX0JDUisweDA0MDApCisKKyNkZWZpbmUgSVZEUl9DS19PTgk0CQkvKiBpVkRSIENsb2NrIE9OICovCisjZW5kaWYKKworI2RlZmluZSBITF9GUEdBX0lSUV9CQVNFCTIwMAorI2RlZmluZSBITF9OUl9JUkwJCTE1CisKKyNkZWZpbmUgSVJRX0FYODg3OTYJCShITF9GUEdBX0lSUV9CQVNFICsgMCkKKyNkZWZpbmUgSVJRX0NGCQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBJUlFfUFNXCQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBJUlFfRVhUMAkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAzKQorI2RlZmluZSBJUlFfRVhUMQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyA0KQorI2RlZmluZSBJUlFfRVhUMgkJKEhMX0ZQR0FfSVJRX0JBU0UgKyA1KQorI2RlZmluZSBJUlFfRVhUMwkJKEhMX0ZQR0FfSVJRX0JBU0UgKyA2KQorI2RlZmluZSBJUlFfRVhUNAkJKEhMX0ZQR0FfSVJRX0JBU0UgKyA3KQorI2RlZmluZSBJUlFfRVhUNQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyA4KQorI2RlZmluZSBJUlFfRVhUNgkJKEhMX0ZQR0FfSVJRX0JBU0UgKyA5KQorI2RlZmluZSBJUlFfRVhUNwkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxMCkKKyNkZWZpbmUgSVJRX1NNQlVTCQkoSExfRlBHQV9JUlFfQkFTRSArIDExKQorI2RlZmluZSBJUlFfVFAJCQkoSExfRlBHQV9JUlFfQkFTRSArIDEyKQorI2RlZmluZSBJUlFfUlRDCQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxMykKKyNkZWZpbmUgSVJRX1RIX0FMRVJUCQkoSExfRlBHQV9JUlFfQkFTRSArIDE0KQorI2RlZmluZSBJUlFfU0NJRjAJCShITF9GUEdBX0lSUV9CQVNFICsgMTUpCisjZGVmaW5lIElSUV9TQ0lGMQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxNikKKwordW5zaWduZWQgY2hhciAqaGlnaGxhbmRlcl9wbGF0X2lycV9zZXR1cCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19TSF9SNzc4NVJQCit2b2lkIGhpZ2hsYW5kZXJfcGxhdF9waW5tdXhfc2V0dXAodm9pZCk7CisjZWxzZQorI2RlZmluZSBoaWdobGFuZGVyX3BsYXRfcGlubXV4X3NldHVwKCkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19BU01fU0hfUkVORVNBU19SNzc4MFJQICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2hwNnh4LmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9ocDZ4eC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL2hwNnh4LmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hwNnh4LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbGJveHJlMi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbGJveHJlMi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL2xib3hyZTIuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbGJveHJlMi5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hZ2ljcGFuZWxyMi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbWFnaWNwYW5lbHIyLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21pY3JvZGV2LmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9taWNyb2Rldi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL21pY3JvZGV2LmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pY3JvZGV2LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9taWdvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTFmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9taWdvci5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX19BU01fU0hfTUlHT1JfSAorI2RlZmluZSBfX0FTTV9TSF9NSUdPUl9ICisKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1zaC9taWdvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA3IE5vYnVoaXJvIEl3YW1hdHN1CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qIEdQSU8gKi8KKyNkZWZpbmUgUE9SVF9QQUNSIDB4YTQwNTAxMDAKKyNkZWZpbmUgUE9SVF9QRENSIDB4YTQwNTAxMDYKKyNkZWZpbmUgUE9SVF9QRUNSIDB4YTQwNTAxMDgKKyNkZWZpbmUgUE9SVF9QSENSIDB4YTQwNTAxMGUKKyNkZWZpbmUgUE9SVF9QSkNSIDB4YTQwNTAxMTAKKyNkZWZpbmUgUE9SVF9QS0NSIDB4YTQwNTAxMTIKKyNkZWZpbmUgUE9SVF9QTENSIDB4YTQwNTAxMTQKKyNkZWZpbmUgUE9SVF9QTUNSIDB4YTQwNTAxMTYKKyNkZWZpbmUgUE9SVF9QUkNSIDB4YTQwNTAxMWMKKyNkZWZpbmUgUE9SVF9QVENSIDB4YTQwNTAxNDAKKyNkZWZpbmUgUE9SVF9QVUNSIDB4YTQwNTAxNDIKKyNkZWZpbmUgUE9SVF9QVkNSIDB4YTQwNTAxNDQKKyNkZWZpbmUgUE9SVF9QV0NSIDB4YTQwNTAxNDYKKyNkZWZpbmUgUE9SVF9QWENSIDB4YTQwNTAxNDgKKyNkZWZpbmUgUE9SVF9QWUNSIDB4YTQwNTAxNGEKKyNkZWZpbmUgUE9SVF9QWkNSIDB4YTQwNTAxNGMKKyNkZWZpbmUgUE9SVF9QQURSIDB4YTQwNTAxMjAKKyNkZWZpbmUgUE9SVF9QSERSIDB4YTQwNTAxMmUKKyNkZWZpbmUgUE9SVF9QVERSIDB4YTQwNTAxNjAKKyNkZWZpbmUgUE9SVF9QV0RSIDB4YTQwNTAxNjYKKworI2RlZmluZSBQT1JUX0hJWkNSQSAweGE0MDUwMTU4CisjZGVmaW5lIFBPUlRfSElaQ1JDIDB4YTQwNTAxNWMKKworI2RlZmluZSBQT1JUX01TRUxDUkIgMHhhNDA1MDE4MgorCisjZGVmaW5lIFBPUlRfUFNFTEEgMHhhNDA1MDE0ZQorI2RlZmluZSBQT1JUX1BTRUxCIDB4YTQwNTAxNTAKKyNkZWZpbmUgUE9SVF9QU0VMQyAweGE0MDUwMTUyCisjZGVmaW5lIFBPUlRfUFNFTEQgMHhhNDA1MDE1NAorI2RlZmluZSBQT1JUX1BTRUxFIDB4YTQwNTAxNTYKKworI2RlZmluZSBQT1JUX0hJWkNSQSAweGE0MDUwMTU4CisjZGVmaW5lIFBPUlRfSElaQ1JCIDB4YTQwNTAxNWEKKyNkZWZpbmUgUE9SVF9ISVpDUkMgMHhhNDA1MDE1YworCisjZGVmaW5lIEJTQ19DUzRCQ1IgMHhmZWMxMDAxMAorI2RlZmluZSBCU0NfQ1M2QUJDUiAweGZlYzEwMDFjCisjZGVmaW5lIEJTQ19DUzRXQ1IgMHhmZWMxMDAzMAorCisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKworaW50IG1pZ29yX2xjZF9xdmdhX3NldHVwKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAorCQkJIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9NSUdPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0czc3NTFyMmQuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3IyZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3J0czc3NTFyMmQuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcjJkLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2RrNzc4MC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2RrNzc4MC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3Nkazc3ODAuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2RrNzc4MC5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoNzc2M3JkcC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3NzYzcmRwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2g3NzYzcmRwLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NoNzc2M3JkcC5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoNzc4NWxjci5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3Nzg1bGNyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2g3Nzg1bGNyLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NoNzc4NWxjci5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NobWluLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaG1pbi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3NobWluLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NobWluLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc25hcGdlYXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NuYXBnZWFyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc25hcGdlYXIuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc25hcGdlYXIuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1oNzc1MS5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc3lzdGVtaDc3NTEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1oNzc1MS5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zeXN0ZW1oNzc1MS5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpdGFuLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC90aXRhbi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3RpdGFuLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3RpdGFuLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKaW5kZXggMGU2OTA1Zi4uNDhlZGZiMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKQEAgLTIxLDcgKzIxLDggQEAKIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KLW9iai0kKENPTkZJR19FTEZfQ09SRSkJCSs9IGR1bXBfdGFzay5vCiBvYmotJChDT05GSUdfSU9fVFJBUFBFRCkJKz0gaW9fdHJhcHBlZC5vCitvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV82NCBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzY0CmluZGV4IDZlZGY1M2IuLmM5NzY2MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzY0CisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzY0CkBAIC0xNyw3ICsxNyw3IEBACiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcC5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkJKz0gc3RhY2t0cmFjZS5vCi1vYmotJChDT05GSUdfQklORk1UX0VMRikJKz0gZHVtcF90YXNrLm8KIG9iai0kKENPTkZJR19JT19UUkFQUEVEKQkrPSBpb190cmFwcGVkLm8KK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9IGdwaW8ubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwppbmRleCBmNWViNTZlLi5iN2U0NmQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwpAQCAtMjk0LDkgKzI5NCwxMCBAQAogewogfQogCi12b2lkIF9faW5pdCBfX2F0dHJpYnV0ZV9fICgod2VhaykpCitpbnQgX19pbml0IF9fYXR0cmlidXRlX18gKCh3ZWFrKSkKIGFyY2hfY2xrX2luaXQodm9pZCkKIHsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaG93X2Nsb2NrcyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLApAQCAtMzMxLDcgKzMzMiw3IEBACiAJCXJldCB8PSBjbGtfcmVnaXN0ZXIoY2xrKTsKIAl9CiAKLQlhcmNoX2Nsa19pbml0KCk7CisJcmV0IHw9IGFyY2hfY2xrX2luaXQoKTsKIAogCS8qIEtpY2sgdGhlIGNoaWxkIGNsb2Nrcy4uICovCiAJcHJvcGFnYXRlX3JhdGUoJm1hc3Rlcl9jbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUKaW5kZXggNDYyYThmNi4uZjBjNzAyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlCkBAIC0xLDggKzEsNiBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L1N1cGVySCBDUFUtc3BlY2lmYyBJUlEgaGFuZGxlcnMuCiAjCi1vYmoteQkrPSBpbnRjLm8KLQogb2JqLSQoQ09ORklHX1NVUEVSSDMyKQkJCSs9IGltYXNrLm8KIG9iai0kKENPTkZJR19DUFVfU0g1KQkJCSs9IGludGMtc2g1Lm8KIG9iai0kKENPTkZJR19DUFVfSEFTX0lQUl9JUlEpCQkrPSBpcHIubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM3MGUyMC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMuYworKysgL2Rldi9udWxsCkBAIC0xLDcxMCArMCwwIEBACi0vKgotICogU2hhcmVkIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGZvciBJUFIgYW5kIElOVEMyIHR5cGVzIG9mIElSUXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE1hZ251cyBEYW1tCi0gKgotICogQmFzZWQgb24gaW50YzIuYyBhbmQgaXByLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgIE5paWJlIFl1dGFrYSAmIFRha2VzaGkgWWFlZ2FzaGkKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgS2F6dW1vdG8gS29qaW1hCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2ICBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0KLSNkZWZpbmUgX0lOVENfTUsoZm4sIG1vZGUsIGFkZHJfZSwgYWRkcl9kLCB3aWR0aCwgc2hpZnQpIFwKLQkoKHNoaWZ0KSB8ICgod2lkdGgpIDw8IDUpIHwgKChmbikgPDwgOSkgfCAoKG1vZGUpIDw8IDEzKSB8IFwKLQkgKChhZGRyX2UpIDw8IDE2KSB8ICgoYWRkcl9kIDw8IDI0KSkpCi0KLSNkZWZpbmUgX0lOVENfU0hJRlQoaCkgKGggJiAweDFmKQotI2RlZmluZSBfSU5UQ19XSURUSChoKSAoKGggPj4gNSkgJiAweGYpCi0jZGVmaW5lIF9JTlRDX0ZOKGgpICgoaCA+PiA5KSAmIDB4ZikKLSNkZWZpbmUgX0lOVENfTU9ERShoKSAoKGggPj4gMTMpICYgMHg3KQotI2RlZmluZSBfSU5UQ19BRERSX0UoaCkgKChoID4+IDE2KSAmIDB4ZmYpCi0jZGVmaW5lIF9JTlRDX0FERFJfRChoKSAoKGggPj4gMjQpICYgMHhmZikKLQotc3RydWN0IGludGNfaGFuZGxlX2ludCB7Ci0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBsb25nIGhhbmRsZTsKLX07Ci0KLXN0cnVjdCBpbnRjX2Rlc2NfaW50IHsKLQl1bnNpZ25lZCBsb25nICpyZWc7Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGxvbmcgKnNtcDsKLSNlbmRpZgotCXVuc2lnbmVkIGludCBucl9yZWc7Ci0Jc3RydWN0IGludGNfaGFuZGxlX2ludCAqcHJpbzsKLQl1bnNpZ25lZCBpbnQgbnJfcHJpbzsKLQlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpzZW5zZTsKLQl1bnNpZ25lZCBpbnQgbnJfc2Vuc2U7Ci0Jc3RydWN0IGlycV9jaGlwIGNoaXA7Ci19OwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBJU19TTVAoeCkgeC5zbXAKLSNkZWZpbmUgSU5UQ19SRUcoZCwgeCwgYykgKGQtPnJlZ1soeCldICsgKChkLT5zbXBbKHgpXSAmIDB4ZmYpICogYykpCi0jZGVmaW5lIFNNUF9OUihkLCB4KSAoKGQtPnNtcFsoeCldID4+IDgpID8gKGQtPnNtcFsoeCldID4+IDgpIDogMSkKLSNlbHNlCi0jZGVmaW5lIElTX1NNUCh4KSAwCi0jZGVmaW5lIElOVENfUkVHKGQsIHgsIGMpIChkLT5yZWdbKHgpXSkKLSNkZWZpbmUgU01QX05SKGQsIHgpIDEKLSNlbmRpZgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGludGNfcHJpb19sZXZlbFtOUl9JUlFTXTsgLyogZm9yIG5vdyAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYWNrX2hhbmRsZVtOUl9JUlFTXTsKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpnZXRfaW50Y19kZXNjKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwKGlycSk7Ci0JcmV0dXJuICh2b2lkICopKChjaGFyICopY2hpcCAtIG9mZnNldG9mKHN0cnVjdCBpbnRjX2Rlc2NfaW50LCBjaGlwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNldF9maWVsZCh1bnNpZ25lZCBpbnQgdmFsdWUsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgZmllbGRfdmFsdWUsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotCXVuc2lnbmVkIGludCB3aWR0aCA9IF9JTlRDX1dJRFRIKGhhbmRsZSk7Ci0JdW5zaWduZWQgaW50IHNoaWZ0ID0gX0lOVENfU0hJRlQoaGFuZGxlKTsKLQotCXZhbHVlICY9IH4oKCgxIDw8IHdpZHRoKSAtIDEpIDw8IHNoaWZ0KTsKLQl2YWx1ZSB8PSBmaWVsZF92YWx1ZSA8PCBzaGlmdDsKLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlXzgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQljdHJsX291dGIoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfMTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQljdHJsX291dHcoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfMzIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQljdHJsX291dGwoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgbW9kaWZ5XzgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljdHJsX291dGIoc2V0X2ZpZWxkKGN0cmxfaW5iKGFkZHIpLCBkYXRhLCBoKSwgYWRkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBtb2RpZnlfMTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljdHJsX291dHcoc2V0X2ZpZWxkKGN0cmxfaW53KGFkZHIpLCBkYXRhLCBoKSwgYWRkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBtb2RpZnlfMzIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljdHJsX291dGwoc2V0X2ZpZWxkKGN0cmxfaW5sKGFkZHIpLCBkYXRhLCBoKSwgYWRkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1lbnVtIHsJUkVHX0ZOX0VSUiA9IDAsIFJFR19GTl9XUklURV9CQVNFID0gMSwgUkVHX0ZOX01PRElGWV9CQVNFID0gNSB9OwotCi1zdGF0aWMgdm9pZCAoKmludGNfcmVnX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGgsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpID0gewotCVtSRUdfRk5fV1JJVEVfQkFTRSArIDBdID0gd3JpdGVfOCwKLQlbUkVHX0ZOX1dSSVRFX0JBU0UgKyAxXSA9IHdyaXRlXzE2LAotCVtSRUdfRk5fV1JJVEVfQkFTRSArIDNdID0gd3JpdGVfMzIsCi0JW1JFR19GTl9NT0RJRllfQkFTRSArIDBdID0gbW9kaWZ5XzgsCi0JW1JFR19GTl9NT0RJRllfQkFTRSArIDFdID0gbW9kaWZ5XzE2LAotCVtSRUdfRk5fTU9ESUZZX0JBU0UgKyAzXSA9IG1vZGlmeV8zMiwKLX07Ci0KLWVudW0gewlNT0RFX0VOQUJMRV9SRUcgPSAwLCAvKiBCaXQocykgc2V0IC0+IGludGVycnVwdCBlbmFibGVkICovCi0JTU9ERV9NQVNLX1JFRywgICAgICAgLyogQml0KHMpIHNldCAtPiBpbnRlcnJ1cHQgZGlzYWJsZWQgKi8KLQlNT0RFX0RVQUxfUkVHLCAgICAgICAvKiBUd28gcmVnaXN0ZXJzLCBzZXQgYml0IHRvIGVuYWJsZSAvIGRpc2FibGUgKi8KLQlNT0RFX1BSSU9fUkVHLCAgICAgICAvKiBQcmlvcml0eSB2YWx1ZSB3cml0dGVuIHRvIGVuYWJsZSBpbnRlcnJ1cHQgKi8KLQlNT0RFX1BDTFJfUkVHLCAgICAgICAvKiBBYm92ZSBwbHVzIGFsbCBiaXRzIHNldCB0byBkaXNhYmxlIGludGVycnVwdCAqLwotfTsKLQotc3RhdGljIHZvaWQgaW50Y19tb2RlX2ZpZWxkKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCSAgICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJICAgIHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZm4oYWRkciwgaGFuZGxlLCAoKDEgPDwgX0lOVENfV0lEVEgoaGFuZGxlKSkgLSAxKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGNfbW9kZV96ZXJvKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJICAgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nKSwKLQkJCSAgIHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZm4oYWRkciwgaGFuZGxlLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgaW50Y19tb2RlX3ByaW8odW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQkgICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlmbihhZGRyLCBoYW5kbGUsIGludGNfcHJpb19sZXZlbFtpcnFdKTsKLX0KLQotc3RhdGljIHZvaWQgKCppbnRjX2VuYWJsZV9mbnNbXSkodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCQkgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZywKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJCSB1bnNpZ25lZCBpbnQgaXJxKSA9IHsKLQlbTU9ERV9FTkFCTEVfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLQlbTU9ERV9NQVNLX1JFR10gPSBpbnRjX21vZGVfemVybywKLQlbTU9ERV9EVUFMX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCi0JW01PREVfUFJJT19SRUddID0gaW50Y19tb2RlX3ByaW8sCi0JW01PREVfUENMUl9SRUddID0gaW50Y19tb2RlX3ByaW8sCi19OwotCi1zdGF0aWMgdm9pZCAoKmludGNfZGlzYWJsZV9mbnNbXSkodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQkJICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZywKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nKSwKLQkJCQkgIHVuc2lnbmVkIGludCBpcnEpID0gewotCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX3plcm8sCi0JW01PREVfTUFTS19SRUddID0gaW50Y19tb2RlX2ZpZWxkLAotCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLQlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfemVybywKLQlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2ludGNfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQotewotCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBTTVBfTlIoZCwgX0lOVENfQUREUl9FKGhhbmRsZSkpOyBjcHUrKykgewotCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGhhbmRsZSksIGNwdSk7Ci0JCWludGNfZW5hYmxlX2Zuc1tfSU5UQ19NT0RFKGhhbmRsZSldKGFkZHIsIGhhbmRsZSwgaW50Y19yZWdfZm5zXAotCQkJCQkJICAgIFtfSU5UQ19GTihoYW5kbGUpXSwgaXJxKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGludGNfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX2ludGNfZW5hYmxlKGlycSwgKHVuc2lnbmVkIGxvbmcpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGNfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlID0gKHVuc2lnbmVkIGxvbmcpIGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGludCBjcHU7Ci0KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0QoaGFuZGxlKSk7IGNwdSsrKSB7Ci0JCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0QoaGFuZGxlKSwgY3B1KTsKLQkJaW50Y19kaXNhYmxlX2Zuc1tfSU5UQ19NT0RFKGhhbmRsZSldKGFkZHIsIGhhbmRsZSxpbnRjX3JlZ19mbnNcCi0JCQkJCQkgICAgIFtfSU5UQ19GTihoYW5kbGUpXSwgaXJxKTsKLQl9Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLXN0YXRpYyB2b2lkIGludGNfbWFza19hY2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKLQl1bnNpZ25lZCBsb25nIGhhbmRsZSA9IGFja19oYW5kbGVbaXJxXTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQlpbnRjX2Rpc2FibGUoaXJxKTsKLQotCS8qIHJlYWQgcmVnaXN0ZXIgYW5kIHdyaXRlIHplcm8gb25seSB0byB0aGUgYXNzb2NhaXRlZCBiaXQgKi8KLQotCWlmIChoYW5kbGUpIHsKLQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCAwKTsKLQkJc3dpdGNoIChfSU5UQ19GTihoYW5kbGUpKSB7Ci0JCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMDoJLyogOGJpdCAqLwotCQkJY3RybF9pbmIoYWRkcik7Ci0JCQljdHJsX291dGIoMHhmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDE6CS8qIDE2Yml0ICovCi0JCQljdHJsX2ludyhhZGRyKTsKLQkJCWN0cmxfb3V0dygweGZmZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAzOgkvKiAzMmJpdCAqLwotCQkJY3RybF9pbmwoYWRkcik7Ci0JCQljdHJsX291dGwoMHhmZmZmZmZmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGludGNfaGFuZGxlX2ludCAqaW50Y19maW5kX2lycShzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpocCwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgbnJfaHAsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgaTsKLQotCS8qIHRoaXMgZG9lc24ndCBzY2FsZSB3ZWxsLCBidXQuLi4KLQkgKgotCSAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY2VyYWluIHVuY29tbW9uCi0JICogb3BlcmF0aW9ucyBzdWNoIGFzIGludGNfc2V0X3ByaW9yaXR5KCkgYW5kIGludGNfc2V0X3NlbnNlKCkKLQkgKiBhbmQgaW4gdGhvc2UgcmFyZSBjYXNlcyBwZXJmb3JtYW5jZSBkb2Vzbid0IG1hdHRlciB0aGF0IG11Y2guCi0JICoga2VlcGluZyB0aGUgbWVtb3J5IGZvb3RwcmludCBsb3cgaXMgbW9yZSBpbXBvcnRhbnQuCi0JICoKLQkgKiBvbmUgcmF0aGVyIHNpbXBsZSB3YXkgdG8gc3BlZWQgdGhpcyB1cCBhbmQgc3RpbGwga2VlcCB0aGUKLQkgKiBtZW1vcnkgZm9vdHByaW50IGRvd24gaXMgdG8gbWFrZSBzdXJlIHRoZSBhcnJheSBpcyBzb3J0ZWQKLQkgKiBhbmQgdGhlbiBwZXJmb3JtIGEgYmlzZWN0IHRvIGxvb2t1cCB0aGUgaXJxLgotCSAqLwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2hwOyBpKyspIHsKLQkJaWYgKChocCArIGkpLT5pcnEgIT0gaXJxKQotCQkJY29udGludWU7Ci0KLQkJcmV0dXJuIGhwICsgaTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotaW50IGludGNfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmlvKQotewotCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOwotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmlocDsKLQotCWlmICghaW50Y19wcmlvX2xldmVsW2lycV0gfHwgcHJpbyA8PSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlocCA9IGludGNfZmluZF9pcnEoZC0+cHJpbywgZC0+bnJfcHJpbywgaXJxKTsKLQlpZiAoaWhwKSB7Ci0JCWlmIChwcmlvID49ICgxIDw8IF9JTlRDX1dJRFRIKGlocC0+aGFuZGxlKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpbnRjX3ByaW9fbGV2ZWxbaXJxXSA9IHByaW87Ci0KLQkJLyoKLQkJICogb25seSBzZXQgc2Vjb25kYXJ5IG1hc2tpbmcgbWV0aG9kIGRpcmVjdGx5Ci0JCSAqIHByaW1hcnkgbWFza2luZyBtZXRob2QgaXMgdXNpbmcgaW50Y19wcmlvX2xldmVsW2lycV0KLQkJICogcHJpb3JpdHkgbGV2ZWwgd2lsbCBiZSBzZXQgZHVyaW5nIG5leHQgZW5hYmxlKCkKLQkJICovCi0KLQkJaWYgKF9JTlRDX0ZOKGlocC0+aGFuZGxlKSAhPSBSRUdfRk5fRVJSKQotCQkJX2ludGNfZW5hYmxlKGlycSwgaWhwLT5oYW5kbGUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBWQUxJRCh4KSAoeCB8IDB4ODApCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGludGNfaXJxX3NlbnNlX3RhYmxlW0lSUV9UWVBFX1NFTlNFX01BU0sgKyAxXSA9IHsKLQlbSVJRX1RZUEVfRURHRV9GQUxMSU5HXSA9IFZBTElEKDApLAotCVtJUlFfVFlQRV9FREdFX1JJU0lOR10gPSBWQUxJRCgxKSwKLQlbSVJRX1RZUEVfTEVWRUxfTE9XXSA9IFZBTElEKDIpLAotCS8qIFNINzcwNiwgU0g3NzA3IGFuZCBTSDc3MDkgZG8gbm90IHN1cHBvcnQgaGlnaCBsZXZlbCB0cmlnZ2VyZWQgKi8KLSNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSAmJiBcCi0gICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgJiYgXAotICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCi0JW0lSUV9UWVBFX0xFVkVMX0hJR0hdID0gVkFMSUQoMyksCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgaW50Y19zZXRfc2Vuc2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0JdW5zaWduZWQgY2hhciB2YWx1ZSA9IGludGNfaXJxX3NlbnNlX3RhYmxlW3R5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLXTsKLQlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppaHA7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JaWYgKCF2YWx1ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpaHAgPSBpbnRjX2ZpbmRfaXJxKGQtPnNlbnNlLCBkLT5ucl9zZW5zZSwgaXJxKTsKLQlpZiAoaWhwKSB7Ci0JCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaWhwLT5oYW5kbGUpLCAwKTsKLQkJaW50Y19yZWdfZm5zW19JTlRDX0ZOKGlocC0+aGFuZGxlKV0oYWRkciwgaWhwLT5oYW5kbGUsIHZhbHVlKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfZ2V0X3JlZyhzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXVuc2lnbmVkIGludCBrOwotCi0JZm9yIChrID0gMDsgayA8IGQtPm5yX3JlZzsgaysrKSB7Ci0JCWlmIChkLT5yZWdba10gPT0gYWRkcmVzcykKLQkJCXJldHVybiBrOwotCX0KLQotCUJVRygpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Y19lbnVtIF9faW5pdCBpbnRjX2dycF9pZChzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCSAgICBpbnRjX2VudW0gZW51bV9pZCkKLXsKLQlzdHJ1Y3QgaW50Y19ncm91cCAqZyA9IGRlc2MtPmdyb3VwczsKLQl1bnNpZ25lZCBpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGcgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfZ3JvdXBzOyBpKyspIHsKLQkJZyA9IGRlc2MtPmdyb3VwcyArIGk7Ci0KLQkJZm9yIChqID0gMDsgZy0+ZW51bV9pZHNbal07IGorKykgewotCQkJaWYgKGctPmVudW1faWRzW2pdICE9IGVudW1faWQpCi0JCQkJY29udGludWU7Ci0KLQkJCXJldHVybiBnLT5lbnVtX2lkOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfbWFza19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQotewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPm1hc2tfcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGU7Ci0JdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7Ci0KLQlmb3IgKGkgPSAwOyBtciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9tYXNrX3JlZ3M7IGkrKykgewotCQltciA9IGRlc2MtPm1hc2tfcmVncyArIGk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUobXItPmVudW1faWRzKTsgaisrKSB7Ci0JCQlpZiAobXItPmVudW1faWRzW2pdICE9IGVudW1faWQpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChtci0+c2V0X3JlZyAmJiBtci0+Y2xyX3JlZykgewotCQkJCWZuID0gUkVHX0ZOX1dSSVRFX0JBU0U7Ci0JCQkJbW9kZSA9IE1PREVfRFVBTF9SRUc7Ci0JCQkJcmVnX2UgPSBtci0+Y2xyX3JlZzsKLQkJCQlyZWdfZCA9IG1yLT5zZXRfcmVnOwotCQkJfSBlbHNlIHsKLQkJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKLQkJCQlpZiAobXItPnNldF9yZWcpIHsKLQkJCQkJbW9kZSA9IE1PREVfRU5BQkxFX1JFRzsKLQkJCQkJcmVnX2UgPSBtci0+c2V0X3JlZzsKLQkJCQkJcmVnX2QgPSBtci0+c2V0X3JlZzsKLQkJCQl9IGVsc2UgewotCQkJCQltb2RlID0gTU9ERV9NQVNLX1JFRzsKLQkJCQkJcmVnX2UgPSBtci0+Y2xyX3JlZzsKLQkJCQkJcmVnX2QgPSBtci0+Y2xyX3JlZzsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWZuICs9IChtci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKLQkJCQkJMSwKLQkJCQkJKG1yLT5yZWdfd2lkdGggLSAxKSAtIGopOwotCQl9Ci0JfQotCi0JaWYgKGRvX2dycHMpCi0JCXJldHVybiBpbnRjX21hc2tfZGF0YShkZXNjLCBkLCBpbnRjX2dycF9pZChkZXNjLCBlbnVtX2lkKSwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19wcmlvX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCi17Ci0Jc3RydWN0IGludGNfcHJpb19yZWcgKnByID0gZGVzYy0+cHJpb19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZSwgYml0OwotCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOwotCi0JZm9yIChpID0gMDsgcHIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfcHJpb19yZWdzOyBpKyspIHsKLQkJcHIgPSBkZXNjLT5wcmlvX3JlZ3MgKyBpOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHByLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKHByLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAocHItPnNldF9yZWcgJiYgcHItPmNscl9yZWcpIHsKLQkJCQlmbiA9IFJFR19GTl9XUklURV9CQVNFOwotCQkJCW1vZGUgPSBNT0RFX1BDTFJfUkVHOwotCQkJCXJlZ19lID0gcHItPnNldF9yZWc7Ci0JCQkJcmVnX2QgPSBwci0+Y2xyX3JlZzsKLQkJCX0gZWxzZSB7Ci0JCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7Ci0JCQkJbW9kZSA9IE1PREVfUFJJT19SRUc7Ci0JCQkJaWYgKCFwci0+c2V0X3JlZykKLQkJCQkJQlVHKCk7Ci0JCQkJcmVnX2UgPSBwci0+c2V0X3JlZzsKLQkJCQlyZWdfZCA9IHByLT5zZXRfcmVnOwotCQkJfQotCi0JCQlmbiArPSAocHItPnJlZ193aWR0aCA+PiAzKSAtIDE7Ci0JCQliaXQgPSBwci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGgpOwotCi0JCQlCVUdfT04oYml0IDwgMCk7Ci0KLQkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKLQkJCQkJcHItPmZpZWxkX3dpZHRoLCBiaXQpOwotCQl9Ci0JfQotCi0JaWYgKGRvX2dycHMpCi0JCXJldHVybiBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBpbnRjX2dycF9pZChkZXNjLCBlbnVtX2lkKSwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19hY2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkKQotewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmFja19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKLQl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKLQotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2Fja19yZWdzOyBpKyspIHsKLQkJbXIgPSBkZXNjLT5hY2tfcmVncyArIGk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUobXItPmVudW1faWRzKTsgaisrKSB7Ci0JCQlpZiAobXItPmVudW1faWRzW2pdICE9IGVudW1faWQpCi0JCQkJY29udGludWU7Ci0KLQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOwotCQkJbW9kZSA9IE1PREVfRU5BQkxFX1JFRzsKLQkJCXJlZ19lID0gbXItPnNldF9yZWc7Ci0JCQlyZWdfZCA9IG1yLT5zZXRfcmVnOwotCi0JCQlmbiArPSAobXItPnJlZ193aWR0aCA+PiAzKSAtIDE7Ci0JCQlyZXR1cm4gX0lOVENfTUsoZm4sIG1vZGUsCi0JCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZSksCi0JCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZCksCi0JCQkJCTEsCi0JCQkJCShtci0+cmVnX3dpZHRoIC0gMSkgLSBqKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfc2Vuc2VfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkJICAgaW50Y19lbnVtIGVudW1faWQpCi17Ci0Jc3RydWN0IGludGNfc2Vuc2VfcmVnICpzciA9IGRlc2MtPnNlbnNlX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBiaXQ7Ci0KLQlmb3IgKGkgPSAwOyBzciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9zZW5zZV9yZWdzOyBpKyspIHsKLQkJc3IgPSBkZXNjLT5zZW5zZV9yZWdzICsgaTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChzci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7Ci0JCQlmbiArPSAoc3ItPnJlZ193aWR0aCA+PiAzKSAtIDE7Ci0JCQliaXQgPSBzci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBzci0+ZmllbGRfd2lkdGgpOwotCi0JCQlCVUdfT04oYml0IDwgMCk7Ci0KLQkJCXJldHVybiBfSU5UQ19NSyhmbiwgMCwgaW50Y19nZXRfcmVnKGQsIHNyLT5yZWcpLAotCQkJCQkwLCBzci0+ZmllbGRfd2lkdGgsIGJpdCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGludGNfcmVnaXN0ZXJfaXJxKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJICAgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkgICAgIGludGNfZW51bSBlbnVtX2lkLAotCQkJCSAgICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpocDsKLQl1bnNpZ25lZCBpbnQgZGF0YVsyXSwgcHJpbWFyeTsKLQotCS8qIFByZWZlciBzaW5nbGUgaW50ZXJydXB0IHNvdXJjZSBiaXRtYXAgb3ZlciBvdGhlciBjb21iaW5hdGlvbnM6Ci0JICogMS4gYml0bWFwLCBzaW5nbGUgaW50ZXJydXB0IHNvdXJjZQotCSAqIDIuIHByaW9yaXR5LCBzaW5nbGUgaW50ZXJydXB0IHNvdXJjZQotCSAqIDMuIGJpdG1hcCwgbXVsdGlwbGUgaW50ZXJydXB0IHNvdXJjZXMgKGdyb3VwcykKLQkgKiA0LiBwcmlvcml0eSwgbXVsdGlwbGUgaW50ZXJydXB0IHNvdXJjZXMgKGdyb3VwcykKLQkgKi8KLQotCWRhdGFbMF0gPSBpbnRjX21hc2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAwKTsKLQlkYXRhWzFdID0gaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMCk7Ci0KLQlwcmltYXJ5ID0gMDsKLQlpZiAoIWRhdGFbMF0gJiYgZGF0YVsxXSkKLQkJcHJpbWFyeSA9IDE7Ci0KLQlkYXRhWzBdID0gZGF0YVswXSA/IGRhdGFbMF0gOiBpbnRjX21hc2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAxKTsKLQlkYXRhWzFdID0gZGF0YVsxXSA/IGRhdGFbMV0gOiBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAxKTsKLQotCWlmICghZGF0YVtwcmltYXJ5XSkKLQkJcHJpbWFyeSBePSAxOwotCi0JQlVHX09OKCFkYXRhW3ByaW1hcnldKTsgLyogbXVzdCBoYXZlIHByaW1hcnkgbWFza2luZyBtZXRob2QgKi8KLQotCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmQtPmNoaXAsCi0JCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7Ci0Jc2V0X2lycV9jaGlwX2RhdGEoaXJxLCAodm9pZCAqKWRhdGFbcHJpbWFyeV0pOwotCi0JLyogc2V0IHByaW9yaXR5IGxldmVsCi0JICogLSB0aGlzIG5lZWRzIHRvIGJlIGF0IGxlYXN0IDIgZm9yIDUtYml0IHByaW9yaXRpZXMgb24gNzc4MAotCSAqLwotCWludGNfcHJpb19sZXZlbFtpcnFdID0gMjsKLQotCS8qIGVuYWJsZSBzZWNvbmRhcnkgbWFza2luZyBtZXRob2QgaWYgcHJlc2VudCAqLwotCWlmIChkYXRhWyFwcmltYXJ5XSkKLQkJX2ludGNfZW5hYmxlKGlycSwgZGF0YVshcHJpbWFyeV0pOwotCi0JLyogYWRkIGlycSB0byBkLT5wcmlvIGxpc3QgaWYgcHJpb3JpdHkgaXMgYXZhaWxhYmxlICovCi0JaWYgKGRhdGFbMV0pIHsKLQkJaHAgPSBkLT5wcmlvICsgZC0+bnJfcHJpbzsKLQkJaHAtPmlycSA9IGlycTsKLQkJaHAtPmhhbmRsZSA9IGRhdGFbMV07Ci0KLQkJaWYgKHByaW1hcnkpIHsKLQkJCS8qCi0JCQkgKiBvbmx5IHNlY29uZGFyeSBwcmlvcml0eSBzaG91bGQgYWNjZXNzIHJlZ2lzdGVycywgc28KLQkJCSAqIHNldCBfSU5UQ19GTihoKSA9IFJFR19GTl9FUlIgZm9yIGludGNfc2V0X3ByaW9yaXR5KCkKLQkJCSAqLwotCi0JCQlocC0+aGFuZGxlICY9IH5fSU5UQ19NSygweDBmLCAwLCAwLCAwLCAwLCAwKTsKLQkJCWhwLT5oYW5kbGUgfD0gX0lOVENfTUsoUkVHX0ZOX0VSUiwgMCwgMCwgMCwgMCwgMCk7Ci0JCX0KLQkJZC0+bnJfcHJpbysrOwotCX0KLQotCS8qIGFkZCBpcnEgdG8gZC0+c2Vuc2UgbGlzdCBpZiBzZW5zZSBpcyBhdmFpbGFibGUgKi8KLQlkYXRhWzBdID0gaW50Y19zZW5zZV9kYXRhKGRlc2MsIGQsIGVudW1faWQpOwotCWlmIChkYXRhWzBdKSB7Ci0JCShkLT5zZW5zZSArIGQtPm5yX3NlbnNlKS0+aXJxID0gaXJxOwotCQkoZC0+c2Vuc2UgKyBkLT5ucl9zZW5zZSktPmhhbmRsZSA9IGRhdGFbMF07Ci0JCWQtPm5yX3NlbnNlKys7Ci0JfQotCi0JLyogaXJxIHNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0ICovCi0JZC0+Y2hpcC5tYXNrKGlycSk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLQlpZiAoZGVzYy0+YWNrX3JlZ3MpCi0JCWFja19oYW5kbGVbaXJxXSA9IGludGNfYWNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgc2F2ZV9yZWcoc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjbnQsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUsCi0JCQkJICAgIHVuc2lnbmVkIGludCBzbXApCi17Ci0JaWYgKHZhbHVlKSB7Ci0JCWQtPnJlZ1tjbnRdID0gdmFsdWU7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlkLT5zbXBbY250XSA9IHNtcDsKLSNlbmRpZgotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYykKLXsKLQl1bnNpZ25lZCBpbnQgaSwgaywgc21wOwotCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkOwotCi0JZCA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKCpkKSk7Ci0KLQlkLT5ucl9yZWcgPSBkZXNjLT5tYXNrX3JlZ3MgPyBkZXNjLT5ucl9tYXNrX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+cHJpb19yZWdzID8gZGVzYy0+bnJfcHJpb19yZWdzICogMiA6IDA7Ci0JZC0+bnJfcmVnICs9IGRlc2MtPnNlbnNlX3JlZ3MgPyBkZXNjLT5ucl9zZW5zZV9yZWdzIDogMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCWQtPm5yX3JlZyArPSBkZXNjLT5hY2tfcmVncyA/IGRlc2MtPm5yX2Fja19yZWdzIDogMDsKLSNlbmRpZgotCWQtPnJlZyA9IGFsbG9jX2Jvb3RtZW0oZC0+bnJfcmVnICogc2l6ZW9mKCpkLT5yZWcpKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JZC0+c21wID0gYWxsb2NfYm9vdG1lbShkLT5ucl9yZWcgKiBzaXplb2YoKmQtPnNtcCkpOwotI2VuZGlmCi0JayA9IDA7Ci0KLQlpZiAoZGVzYy0+bWFza19yZWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9tYXNrX3JlZ3M7IGkrKykgewotCQkJc21wID0gSVNfU01QKGRlc2MtPm1hc2tfcmVnc1tpXSk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5zZXRfcmVnLCBzbXApOwotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5tYXNrX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKLQkJfQotCX0KLQotCWlmIChkZXNjLT5wcmlvX3JlZ3MpIHsKLQkJZC0+cHJpbyA9IGFsbG9jX2Jvb3RtZW0oZGVzYy0+bnJfdmVjdG9ycyAqIHNpemVvZigqZC0+cHJpbykpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgewotCQkJc21wID0gSVNfU01QKGRlc2MtPnByaW9fcmVnc1tpXSk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5zZXRfcmVnLCBzbXApOwotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5wcmlvX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKLQkJfQotCX0KLQotCWlmIChkZXNjLT5zZW5zZV9yZWdzKSB7Ci0JCWQtPnNlbnNlID0gYWxsb2NfYm9vdG1lbShkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5zZW5zZSkpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9zZW5zZV9yZWdzOyBpKyspIHsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+c2Vuc2VfcmVnc1tpXS5yZWcsIDApOwotCQl9Ci0JfQotCi0JZC0+Y2hpcC5uYW1lID0gZGVzYy0+bmFtZTsKLQlkLT5jaGlwLm1hc2sgPSBpbnRjX2Rpc2FibGU7Ci0JZC0+Y2hpcC51bm1hc2sgPSBpbnRjX2VuYWJsZTsKLQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19kaXNhYmxlOwotCWQtPmNoaXAuc2V0X3R5cGUgPSBpbnRjX3NldF9zZW5zZTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCWlmIChkZXNjLT5hY2tfcmVncykgewotCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+YWNrX3JlZ3NbaV0uc2V0X3JlZywgMCk7Ci0KLQkJZC0+Y2hpcC5tYXNrX2FjayA9IGludGNfbWFza19hY2s7Ci0JfQotI2VuZGlmCi0KLQlCVUdfT04oayA+IDI1Nik7IC8qIF9JTlRDX0FERFJfRSgpIGFuZCBfSU5UQ19BRERSX0QoKSBhcmUgOCBiaXRzICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7Ci0JCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKLQotCQlpbnRjX3JlZ2lzdGVyX2lycShkZXNjLCBkLCB2ZWN0LT5lbnVtX2lkLCBldnQyaXJxKHZlY3QtPnZlY3QpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwppbmRleCA1NmVhN2IyLi4zZWIxN2VlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAlzdHJ1Y3QgaXByX2RhdGEgKnAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9pcHJfZGVzYyhpcnEpLT5pcHJfb2Zmc2V0c1twLT5pcHJfaWR4XTsKIAkvKiBTZXQgdGhlIHByaW9yaXR5IGluIElQUiB0byAwICovCi0JY3RybF9vdXR3KGN0cmxfaW53KGFkZHIpICYgKDB4ZmZmZiBeICgweGYgPDwgcC0+c2hpZnQpKSwgYWRkcik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KGFkZHIpICYgKDB4ZmZmZiBeICgweGYgPDwgcC0+c2hpZnQpKSwgYWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9pcHJfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IGlwcl9kYXRhICpwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfaXByX2Rlc2MoaXJxKS0+aXByX29mZnNldHNbcC0+aXByX2lkeF07CiAJLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCi0JY3RybF9vdXR3KGN0cmxfaW53KGFkZHIpIHwgKHAtPnByaW9yaXR5IDw8IHAtPnNoaWZ0KSwgYWRkcik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KGFkZHIpIHwgKHAtPnByaW9yaXR5IDw8IHAtPnNoaWZ0KSwgYWRkcik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlCmluZGV4IDFhYjFlY2YuLjQyODQ1MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlCkBAIC0xMiwzICsxMiw4IEBACiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKQkrPSBzZXR1cC1zaDcyMDMubyBjbG9jay1zaDcyMDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MykJKz0gc2V0dXAtc2g3MjAzLm8gY2xvY2stc2g3MjAzLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9NWEcpCQkrPSBzZXR1cC1teGcubyBjbG9jay1zaDcyMDYubworCisjIFBpbm11eCBzZXR1cAorcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMykJOj0gcGlubXV4LXNoNzIwMy5vCisKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9waW5tdXgtc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9waW5tdXgtc2g3MjAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2NWFmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Bpbm11eC1zaDcyMDMuYwpAQCAtMCwwICsxLDE1OTcgQEAKKy8qCisgKiBTSDcyMDMgUGlubXV4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3MjAzLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQQTdfREFUQSwgUEE2X0RBVEEsIFBBNV9EQVRBLCBQQTRfREFUQSwKKwlQQTNfREFUQSwgUEEyX0RBVEEsIFBBMV9EQVRBLCBQQTBfREFUQSwKKwlQQjEyX0RBVEEsCisJUEIxMV9EQVRBLCBQQjEwX0RBVEEsIFBCOV9EQVRBLCBQQjhfREFUQSwKKwlQQjdfREFUQSwgUEI2X0RBVEEsIFBCNV9EQVRBLCBQQjRfREFUQSwKKwlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSwKKwlQQzE0X0RBVEEsIFBDMTNfREFUQSwgUEMxMl9EQVRBLAorCVBDMTFfREFUQSwgUEMxMF9EQVRBLCBQQzlfREFUQSwgUEM4X0RBVEEsCisJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEsCisJUEQxNV9EQVRBLCBQRDE0X0RBVEEsIFBEMTNfREFUQSwgUEQxMl9EQVRBLAorCVBEMTFfREFUQSwgUEQxMF9EQVRBLCBQRDlfREFUQSwgUEQ4X0RBVEEsCisJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEsCisJUEUxNV9EQVRBLCBQRTE0X0RBVEEsIFBFMTNfREFUQSwgUEUxMl9EQVRBLAorCVBFMTFfREFUQSwgUEUxMF9EQVRBLCBQRTlfREFUQSwgUEU4X0RBVEEsCisJUEU3X0RBVEEsIFBFNl9EQVRBLCBQRTVfREFUQSwgUEU0X0RBVEEsCisJUEUzX0RBVEEsIFBFMl9EQVRBLCBQRTFfREFUQSwgUEUwX0RBVEEsCisJUEYzMF9EQVRBLCBQRjI5X0RBVEEsIFBGMjhfREFUQSwKKwlQRjI3X0RBVEEsIFBGMjZfREFUQSwgUEYyNV9EQVRBLCBQRjI0X0RBVEEsCisJUEYyM19EQVRBLCBQRjIyX0RBVEEsIFBGMjFfREFUQSwgUEYyMF9EQVRBLAorCVBGMTlfREFUQSwgUEYxOF9EQVRBLCBQRjE3X0RBVEEsIFBGMTZfREFUQSwKKwlQRjE1X0RBVEEsIFBGMTRfREFUQSwgUEYxM19EQVRBLCBQRjEyX0RBVEEsCisJUEYxMV9EQVRBLCBQRjEwX0RBVEEsIFBGOV9EQVRBLCBQRjhfREFUQSwKKwlQRjdfREFUQSwgUEY2X0RBVEEsIFBGNV9EQVRBLCBQRjRfREFUQSwKKwlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSwKKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJRk9SQ0VfSU4sCisJUEE3X0lOLCBQQTZfSU4sIFBBNV9JTiwgUEE0X0lOLAorCVBBM19JTiwgUEEyX0lOLCBQQTFfSU4sIFBBMF9JTiwKKwlQQjExX0lOLCBQQjEwX0lOLCBQQjlfSU4sIFBCOF9JTiwKKwlQQzE0X0lOLCBQQzEzX0lOLCBQQzEyX0lOLAorCVBDMTFfSU4sIFBDMTBfSU4sIFBDOV9JTiwgUEM4X0lOLAorCVBDN19JTiwgUEM2X0lOLCBQQzVfSU4sIFBDNF9JTiwKKwlQQzNfSU4sIFBDMl9JTiwgUEMxX0lOLCBQQzBfSU4sCisJUEQxNV9JTiwgUEQxNF9JTiwgUEQxM19JTiwgUEQxMl9JTiwKKwlQRDExX0lOLCBQRDEwX0lOLCBQRDlfSU4sIFBEOF9JTiwKKwlQRDdfSU4sIFBENl9JTiwgUEQ1X0lOLCBQRDRfSU4sCisJUEQzX0lOLCBQRDJfSU4sIFBEMV9JTiwgUEQwX0lOLAorCVBFMTVfSU4sIFBFMTRfSU4sIFBFMTNfSU4sIFBFMTJfSU4sCisJUEUxMV9JTiwgUEUxMF9JTiwgUEU5X0lOLCBQRThfSU4sCisJUEU3X0lOLCBQRTZfSU4sIFBFNV9JTiwgUEU0X0lOLAorCVBFM19JTiwgUEUyX0lOLCBQRTFfSU4sIFBFMF9JTiwKKwlQRjMwX0lOLCBQRjI5X0lOLCBQRjI4X0lOLAorCVBGMjdfSU4sIFBGMjZfSU4sIFBGMjVfSU4sIFBGMjRfSU4sCisJUEYyM19JTiwgUEYyMl9JTiwgUEYyMV9JTiwgUEYyMF9JTiwKKwlQRjE5X0lOLCBQRjE4X0lOLCBQRjE3X0lOLCBQRjE2X0lOLAorCVBGMTVfSU4sIFBGMTRfSU4sIFBGMTNfSU4sIFBGMTJfSU4sCisJUEYxMV9JTiwgUEYxMF9JTiwgUEY5X0lOLCBQRjhfSU4sCisJUEY3X0lOLCBQRjZfSU4sIFBGNV9JTiwgUEY0X0lOLAorCVBGM19JTiwgUEYyX0lOLCBQRjFfSU4sIFBGMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlGT1JDRV9PVVQsCisJUEIxMV9PVVQsIFBCMTBfT1VULCBQQjlfT1VULCBQQjhfT1VULAorCVBDMTRfT1VULCBQQzEzX09VVCwgUEMxMl9PVVQsCisJUEMxMV9PVVQsIFBDMTBfT1VULCBQQzlfT1VULCBQQzhfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDE1X09VVCwgUEQxNF9PVVQsIFBEMTNfT1VULCBQRDEyX09VVCwKKwlQRDExX09VVCwgUEQxMF9PVVQsIFBEOV9PVVQsIFBEOF9PVVQsCisJUEQ3X09VVCwgUEQ2X09VVCwgUEQ1X09VVCwgUEQ0X09VVCwKKwlQRDNfT1VULCBQRDJfT1VULCBQRDFfT1VULCBQRDBfT1VULAorCVBFMTVfT1VULCBQRTE0X09VVCwgUEUxM19PVVQsIFBFMTJfT1VULAorCVBFMTFfT1VULCBQRTEwX09VVCwgUEU5X09VVCwgUEU4X09VVCwKKwlQRTdfT1VULCBQRTZfT1VULCBQRTVfT1VULCBQRTRfT1VULAorCVBFM19PVVQsIFBFMl9PVVQsIFBFMV9PVVQsIFBFMF9PVVQsCisJUEYzMF9PVVQsIFBGMjlfT1VULCBQRjI4X09VVCwKKwlQRjI3X09VVCwgUEYyNl9PVVQsIFBGMjVfT1VULCBQRjI0X09VVCwKKwlQRjIzX09VVCwgUEYyMl9PVVQsIFBGMjFfT1VULCBQRjIwX09VVCwKKwlQRjE5X09VVCwgUEYxOF9PVVQsIFBGMTdfT1VULCBQRjE2X09VVCwKKwlQRjE1X09VVCwgUEYxNF9PVVQsIFBGMTNfT1VULCBQRjEyX09VVCwKKwlQRjExX09VVCwgUEYxMF9PVVQsIFBGOV9PVVQsIFBGOF9PVVQsCisJUEY3X09VVCwgUEY2X09VVCwgUEY1X09VVCwgUEY0X09VVCwKKwlQRjNfT1VULCBQRjJfT1VULCBQRjFfT1VULCBQRjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBCMTFfSU9SX0lOLCBQQjExX0lPUl9PVVQsCisJUEIxMF9JT1JfSU4sIFBCMTBfSU9SX09VVCwKKwlQQjlfSU9SX0lOLCBQQjlfSU9SX09VVCwKKwlQQjhfSU9SX0lOLCBQQjhfSU9SX09VVCwKKwlQQjEyTURfMDAsIFBCMTJNRF8wMSwgUEIxMk1EXzEwLCBQQjEyTURfMTEsCisJUEIxMU1EXzAsIFBCMTFNRF8xLAorCVBCMTBNRF8wLCBQQjEwTURfMSwKKwlQQjlNRF8wMCwgUEI5TURfMDEsIFBCOU1EXzEwLAorCVBCOE1EXzAwLCBQQjhNRF8wMSwgUEI4TURfMTAsCisJUEI3TURfMDAsIFBCN01EXzAxLCBQQjdNRF8xMCwgUEI3TURfMTEsCisJUEI2TURfMDAsIFBCNk1EXzAxLCBQQjZNRF8xMCwgUEI2TURfMTEsCisJUEI1TURfMDAsIFBCNU1EXzAxLCBQQjVNRF8xMCwgUEI1TURfMTEsCisJUEI0TURfMDAsIFBCNE1EXzAxLCBQQjRNRF8xMCwgUEI0TURfMTEsCisJUEIzTURfMDAsIFBCM01EXzAxLCBQQjNNRF8xMCwgUEIzTURfMTEsCisJUEIyTURfMDAsIFBCMk1EXzAxLCBQQjJNRF8xMCwgUEIyTURfMTEsCisJUEIxTURfMDAsIFBCMU1EXzAxLCBQQjFNRF8xMCwgUEIxTURfMTEsCisJUEIwTURfMDAsIFBCME1EXzAxLCBQQjBNRF8xMCwgUEIwTURfMTEsCisKKwlQQjEySVJRXzAwLCBQQjEySVJRXzAxLCBQQjEySVJRXzEwLAorCisJUEMxNE1EXzAsIFBDMTRNRF8xLAorCVBDMTNNRF8wLCBQQzEzTURfMSwKKwlQQzEyTURfMCwgUEMxMk1EXzEsCisJUEMxMU1EXzAwLCBQQzExTURfMDEsIFBDMTFNRF8xMCwKKwlQQzEwTURfMDAsIFBDMTBNRF8wMSwgUEMxME1EXzEwLAorCVBDOU1EXzAsIFBDOU1EXzEsCisJUEM4TURfMCwgUEM4TURfMSwKKwlQQzdNRF8wLCBQQzdNRF8xLAorCVBDNk1EXzAsIFBDNk1EXzEsCisJUEM1TURfMCwgUEM1TURfMSwKKwlQQzRNRF8wLCBQQzRNRF8xLAorCVBDM01EXzAsIFBDM01EXzEsCisJUEMyTURfMCwgUEMyTURfMSwKKwlQQzFNRF8wLCBQQzFNRF8xLAorCVBDME1EXzAwLCBQQzBNRF8wMSwgUEMwTURfMTAsCisKKwlQRDE1TURfMDAwLCBQRDE1TURfMDAxLCBQRDE1TURfMDEwLCBQRDE1TURfMTAwLCBQRDE1TURfMTAxLAorCVBEMTRNRF8wMDAsIFBEMTRNRF8wMDEsIFBEMTRNRF8wMTAsIFBEMTRNRF8xMDEsCisJUEQxM01EXzAwMCwgUEQxM01EXzAwMSwgUEQxM01EXzAxMCwgUEQxM01EXzEwMCwgUEQxM01EXzEwMSwKKwlQRDEyTURfMDAwLCBQRDEyTURfMDAxLCBQRDEyTURfMDEwLCBQRDEyTURfMTAwLCBQRDEyTURfMTAxLAorCVBEMTFNRF8wMDAsIFBEMTFNRF8wMDEsIFBEMTFNRF8wMTAsIFBEMTFNRF8xMDAsIFBEMTFNRF8xMDEsCisJUEQxME1EXzAwMCwgUEQxME1EXzAwMSwgUEQxME1EXzAxMCwgUEQxME1EXzEwMCwgUEQxME1EXzEwMSwKKwlQRDlNRF8wMDAsIFBEOU1EXzAwMSwgUEQ5TURfMDEwLCBQRDlNRF8xMDAsIFBEOU1EXzEwMSwKKwlQRDhNRF8wMDAsIFBEOE1EXzAwMSwgUEQ4TURfMDEwLCBQRDhNRF8xMDAsIFBEOE1EXzEwMSwKKwlQRDdNRF8wMDAsIFBEN01EXzAwMSwgUEQ3TURfMDEwLCBQRDdNRF8wMTEsIFBEN01EXzEwMCwgUEQ3TURfMTAxLAorCVBENk1EXzAwMCwgUEQ2TURfMDAxLCBQRDZNRF8wMTAsIFBENk1EXzAxMSwgUEQ2TURfMTAwLCBQRDZNRF8xMDEsCisJUEQ1TURfMDAwLCBQRDVNRF8wMDEsIFBENU1EXzAxMCwgUEQ1TURfMDExLCBQRDVNRF8xMDAsIFBENU1EXzEwMSwKKwlQRDRNRF8wMDAsIFBENE1EXzAwMSwgUEQ0TURfMDEwLCBQRDRNRF8wMTEsIFBENE1EXzEwMCwgUEQ0TURfMTAxLAorCVBEM01EXzAwMCwgUEQzTURfMDAxLCBQRDNNRF8wMTAsIFBEM01EXzAxMSwgUEQzTURfMTAwLCBQRDNNRF8xMDEsCisJUEQyTURfMDAwLCBQRDJNRF8wMDEsIFBEMk1EXzAxMCwgUEQyTURfMDExLCBQRDJNRF8xMDAsIFBEMk1EXzEwMSwKKwlQRDFNRF8wMDAsIFBEMU1EXzAwMSwgUEQxTURfMDEwLCBQRDFNRF8wMTEsIFBEMU1EXzEwMCwgUEQxTURfMTAxLAorCVBEME1EXzAwMCwgUEQwTURfMDAxLCBQRDBNRF8wMTAsIFBEME1EXzAxMSwgUEQwTURfMTAwLCBQRDBNRF8xMDEsCisKKwlQRTE1TURfMDAsIFBFMTVNRF8wMSwgUEUxNU1EXzExLAorCVBFMTRNRF8wMCwgUEUxNE1EXzAxLCBQRTE0TURfMTEsCisJUEUxM01EXzAwLCBQRTEzTURfMTEsCisJUEUxMk1EXzAwLCBQRTEyTURfMTEsCisJUEUxMU1EXzAwMCwgUEUxMU1EXzAwMSwgUEUxMU1EXzAxMCwgUEUxMU1EXzEwMCwKKwlQRTEwTURfMDAwLCBQRTEwTURfMDAxLCBQRTEwTURfMDEwLCBQRTEwTURfMTAwLAorCVBFOU1EXzAwLCBQRTlNRF8wMSwgUEU5TURfMTAsIFBFOU1EXzExLAorCVBFOE1EXzAwLCBQRThNRF8wMSwgUEU4TURfMTAsIFBFOE1EXzExLAorCVBFN01EXzAwMCwgUEU3TURfMDAxLCBQRTdNRF8wMTAsIFBFN01EXzAxMSwgUEU3TURfMTAwLAorCVBFNk1EXzAwMCwgUEU2TURfMDAxLCBQRTZNRF8wMTAsIFBFNk1EXzAxMSwgUEU2TURfMTAwLAorCVBFNU1EXzAwMCwgUEU1TURfMDAxLCBQRTVNRF8wMTAsIFBFNU1EXzAxMSwgUEU1TURfMTAwLAorCVBFNE1EXzAwMCwgUEU0TURfMDAxLCBQRTRNRF8wMTAsIFBFNE1EXzAxMSwgUEU0TURfMTAwLAorCVBFM01EXzAwLCBQRTNNRF8wMSwgUEUzTURfMTEsCisJUEUyTURfMDAsIFBFMk1EXzAxLCBQRTJNRF8xMSwKKwlQRTFNRF8wMCwgUEUxTURfMDEsIFBFMU1EXzEwLCBQRTFNRF8xMSwKKwlQRTBNRF8wMDAsIFBFME1EXzAwMSwgUEUwTURfMDExLCBQRTBNRF8xMDAsCisKKwlQRjMwTURfMCwgUEYzME1EXzEsCisJUEYyOU1EXzAsIFBGMjlNRF8xLAorCVBGMjhNRF8wLCBQRjI4TURfMSwKKwlQRjI3TURfMCwgUEYyN01EXzEsCisJUEYyNk1EXzAsIFBGMjZNRF8xLAorCVBGMjVNRF8wLCBQRjI1TURfMSwKKwlQRjI0TURfMCwgUEYyNE1EXzEsCisJUEYyM01EXzAwLCBQRjIzTURfMDEsIFBGMjNNRF8xMCwKKwlQRjIyTURfMDAsIFBGMjJNRF8wMSwgUEYyMk1EXzEwLAorCVBGMjFNRF8wMCwgUEYyMU1EXzAxLCBQRjIxTURfMTAsCisJUEYyME1EXzAwLCBQRjIwTURfMDEsIFBGMjBNRF8xMCwKKwlQRjE5TURfMDAsIFBGMTlNRF8wMSwgUEYxOU1EXzEwLAorCVBGMThNRF8wMCwgUEYxOE1EXzAxLCBQRjE4TURfMTAsCisJUEYxN01EXzAwLCBQRjE3TURfMDEsIFBGMTdNRF8xMCwKKwlQRjE2TURfMDAsIFBGMTZNRF8wMSwgUEYxNk1EXzEwLAorCVBGMTVNRF8wMCwgUEYxNU1EXzAxLCBQRjE1TURfMTAsCisJUEYxNE1EXzAwLCBQRjE0TURfMDEsIFBGMTRNRF8xMCwKKwlQRjEzTURfMDAsIFBGMTNNRF8wMSwgUEYxM01EXzEwLAorCVBGMTJNRF8wMCwgUEYxMk1EXzAxLCBQRjEyTURfMTAsCisJUEYxMU1EXzAwLCBQRjExTURfMDEsIFBGMTFNRF8xMCwKKwlQRjEwTURfMDAsIFBGMTBNRF8wMSwgUEYxME1EXzEwLAorCVBGOU1EXzAwLCBQRjlNRF8wMSwgUEY5TURfMTAsCisJUEY4TURfMDAsIFBGOE1EXzAxLCBQRjhNRF8xMCwKKwlQRjdNRF8wMCwgUEY3TURfMDEsIFBGN01EXzEwLCBQRjdNRF8xMSwKKwlQRjZNRF8wMCwgUEY2TURfMDEsIFBGNk1EXzEwLCBQRjZNRF8xMSwKKwlQRjVNRF8wMCwgUEY1TURfMDEsIFBGNU1EXzEwLCBQRjVNRF8xMSwKKwlQRjRNRF8wMCwgUEY0TURfMDEsIFBGNE1EXzEwLCBQRjRNRF8xMSwKKwlQRjNNRF8wMCwgUEYzTURfMDEsIFBGM01EXzEwLCBQRjNNRF8xMSwKKwlQRjJNRF8wMCwgUEYyTURfMDEsIFBGMk1EXzEwLCBQRjJNRF8xMSwKKwlQRjFNRF8wMCwgUEYxTURfMDEsIFBGMU1EXzEwLCBQRjFNRF8xMSwKKwlQRjBNRF8wMCwgUEYwTURfMDEsIFBGME1EXzEwLCBQRjBNRF8xMSwKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorCisJUElOTVVYX01BUktfQkVHSU4sCisJUElOVDdfUEJfTUFSSywgUElOVDZfUEJfTUFSSywgUElOVDVfUEJfTUFSSywgUElOVDRfUEJfTUFSSywKKwlQSU5UM19QQl9NQVJLLCBQSU5UMl9QQl9NQVJLLCBQSU5UMV9QQl9NQVJLLCBQSU5UMF9QQl9NQVJLLAorCVBJTlQ3X1BEX01BUkssIFBJTlQ2X1BEX01BUkssIFBJTlQ1X1BEX01BUkssIFBJTlQ0X1BEX01BUkssCisJUElOVDNfUERfTUFSSywgUElOVDJfUERfTUFSSywgUElOVDFfUERfTUFSSywgUElOVDBfUERfTUFSSywKKwlJUlE3X1BCX01BUkssIElSUTZfUEJfTUFSSywgSVJRNV9QQl9NQVJLLCBJUlE0X1BCX01BUkssCisJSVJRM19QQl9NQVJLLCBJUlEyX1BCX01BUkssIElSUTFfUEJfTUFSSywgSVJRMF9QQl9NQVJLLAorCUlSUTdfUERfTUFSSywgSVJRNl9QRF9NQVJLLCBJUlE1X1BEX01BUkssIElSUTRfUERfTUFSSywKKwlJUlEzX1BEX01BUkssIElSUTJfUERfTUFSSywgSVJRMV9QRF9NQVJLLCBJUlEwX1BEX01BUkssCisJSVJRN19QRV9NQVJLLCBJUlE2X1BFX01BUkssIElSUTVfUEVfTUFSSywgSVJRNF9QRV9NQVJLLAorCUlSUTNfUEVfTUFSSywgSVJRMl9QRV9NQVJLLCBJUlExX1BFX01BUkssIElSUTBfUEVfTUFSSywKKwlXRFRPVkZfTUFSSywgSVJRT1VUX01BUkssIFJFRk9VVF9NQVJLLCBJUlFPVVRfUkVGT1VUX01BUkssCisJVUJDVFJHX01BUkssCisJQ1RYMV9NQVJLLCBDUlgxX01BUkssIENUWDBfTUFSSywgQ1RYMF9DVFgxX01BUkssCisJQ1JYMF9NQVJLLCBDUlgwX0NSWDFfTUFSSywKKwlTREEzX01BUkssIFNDTDNfTUFSSywKKwlTREEyX01BUkssIFNDTDJfTUFSSywKKwlTREExX01BUkssIFNDTDFfTUFSSywKKwlTREEwX01BUkssIFNDTDBfTUFSSywKKwlURU5EMF9QRF9NQVJLLCBURU5EMF9QRV9NQVJLLCBEQUNLMF9QRF9NQVJLLCBEQUNLMF9QRV9NQVJLLAorCURSRVEwX1BEX01BUkssIERSRVEwX1BFX01BUkssIFRFTkQxX1BEX01BUkssIFRFTkQxX1BFX01BUkssCisJREFDSzFfUERfTUFSSywgREFDSzFfUEVfTUFSSywgRFJFUTFfUERfTUFSSywgRFJFUTFfUEVfTUFSSywKKwlEQUNLMl9NQVJLLCBEUkVRMl9NQVJLLCBEQUNLM19NQVJLLCBEUkVRM19NQVJLLAorCUFEVFJHX1BEX01BUkssIEFEVFJHX1BFX01BUkssCisJRDMxX01BUkssIEQzMF9NQVJLLCBEMjlfTUFSSywgRDI4X01BUkssCisJRDI3X01BUkssIEQyNl9NQVJLLCBEMjVfTUFSSywgRDI0X01BUkssCisJRDIzX01BUkssIEQyMl9NQVJLLCBEMjFfTUFSSywgRDIwX01BUkssCisJRDE5X01BUkssIEQxOF9NQVJLLCBEMTdfTUFSSywgRDE2X01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIENTNF9NQVJLLCBNUkVTX01BUkssIEJTX01BUkssCisJSU9JUzE2X01BUkssIENTMV9NQVJLLCBDUzZfQ0UxQl9NQVJLLCBDRTJCX01BUkssCisJQ1M1X0NFMUFfTUFSSywgQ0UyQV9NQVJLLCBGUkFNRV9NQVJLLCBXQUlUX01BUkssCisJUkRXUl9NQVJLLCBDS0VfTUFSSywgQ0FTVV9NQVJLLAlCUkVRX01BUkssCisJUkFTVV9NQVJLLCBCQUNLX01BUkssIENBU0xfTUFSSywgUkFTTF9NQVJLLAorCVdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkssIFdFMl9EUU1VTF9JQ0lPUkRfTUFSSywKKwlXRTFfRFFNTFVfV0VfTUFSSywgV0UwX0RRTUxMX01BUkssCisJQ1MzX01BUkssIENTMl9NQVJLLCBBMV9NQVJLLCBBMF9NQVJLLCBDUzdfTUFSSywKKwlUSU9DNERfTUFSSywgVElPQzRDX01BUkssIFRJT0M0Ql9NQVJLLCBUSU9DNEFfTUFSSywKKwlUSU9DM0RfTUFSSywgVElPQzNDX01BUkssIFRJT0MzQl9NQVJLLCBUSU9DM0FfTUFSSywKKwlUSU9DMkJfTUFSSywgVElPQzFCX01BUkssIFRJT0MyQV9NQVJLLCBUSU9DMUFfTUFSSywKKwlUSU9DMERfTUFSSywgVElPQzBDX01BUkssIFRJT0MwQl9NQVJLLCBUSU9DMEFfTUFSSywKKwlUQ0xLRF9QRF9NQVJLLCBUQ0xLQ19QRF9NQVJLLCBUQ0xLQl9QRF9NQVJLLCBUQ0xLQV9QRF9NQVJLLAorCVRDTEtEX1BGX01BUkssIFRDTEtDX1BGX01BUkssIFRDTEtCX1BGX01BUkssIFRDTEtBX1BGX01BUkssCisJU0NTMF9QRF9NQVJLLCBTU08wX1BEX01BUkssIFNTSTBfUERfTUFSSywgU1NDSzBfUERfTUFSSywKKwlTQ1MwX1BGX01BUkssIFNTTzBfUEZfTUFSSywgU1NJMF9QRl9NQVJLLCBTU0NLMF9QRl9NQVJLLAorCVNDUzFfUERfTUFSSywgU1NPMV9QRF9NQVJLLCBTU0kxX1BEX01BUkssIFNTQ0sxX1BEX01BUkssCisJU0NTMV9QRl9NQVJLLCBTU08xX1BGX01BUkssIFNTSTFfUEZfTUFSSywgU1NDSzFfUEZfTUFSSywKKwlUWEQwX01BUkssIFJYRDBfTUFSSywgU0NLMF9NQVJLLAorCVRYRDFfTUFSSywgUlhEMV9NQVJLLCBTQ0sxX01BUkssCisJVFhEMl9NQVJLLCBSWEQyX01BUkssIFNDSzJfTUFSSywKKwlSVFMzX01BUkssIENUUzNfTUFSSywgVFhEM19NQVJLLAorCVJYRDNfTUFSSywgU0NLM19NQVJLLAorCUFVRElPX0NMS19NQVJLLAorCVNTSURBVEEzX01BUkssIFNTSVdTM19NQVJLLCBTU0lTQ0szX01BUkssCisJU1NJREFUQTJfTUFSSywgU1NJV1MyX01BUkssIFNTSVNDSzJfTUFSSywKKwlTU0lEQVRBMV9NQVJLLCBTU0lXUzFfTUFSSywgU1NJU0NLMV9NQVJLLAorCVNTSURBVEEwX01BUkssIFNTSVdTMF9NQVJLLCBTU0lTQ0swX01BUkssCisJRkNFX01BUkssIEZSQl9NQVJLLAorCU5BRjdfTUFSSywgTkFGNl9NQVJLLCBOQUY1X01BUkssIE5BRjRfTUFSSywKKwlOQUYzX01BUkssIE5BRjJfTUFSSywgTkFGMV9NQVJLLCBOQUYwX01BUkssCisJRlNDX01BUkssIEZPRV9NQVJLLCBGQ0RFX01BUkssIEZXRV9NQVJLLAorCUxDRF9WRVBXQ19NQVJLLCBMQ0RfVkNQV0NfTUFSSywJTENEX0NMS19NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX01fRElTUF9NQVJLLCBMQ0RfQ0wyX01BUkssIExDRF9DTDFfTUFSSywgTENEX0RPTl9NQVJLLAorCUxDRF9EQVRBMTVfTUFSSywgTENEX0RBVEExNF9NQVJLLCBMQ0RfREFUQTEzX01BUkssIExDRF9EQVRBMTJfTUFSSywKKwlMQ0RfREFUQTExX01BUkssIExDRF9EQVRBMTBfTUFSSywgTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywgTENEX0RBVEE1X01BUkssIExDRF9EQVRBNF9NQVJLLAorCUxDRF9EQVRBM19NQVJLLCBMQ0RfREFUQTJfTUFSSywgTENEX0RBVEExX01BUkssIExDRF9EQVRBMF9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSAqLworCVBJTk1VWF9EQVRBKFBBN19EQVRBLCBQQTdfSU4pLAorCVBJTk1VWF9EQVRBKFBBNl9EQVRBLCBQQTZfSU4pLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4pLAorCVBJTk1VWF9EQVRBKFBBNF9EQVRBLCBQQTRfSU4pLAorCVBJTk1VWF9EQVRBKFBBM19EQVRBLCBQQTNfSU4pLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4pLAorCVBJTk1VWF9EQVRBKFBBMV9EQVRBLCBQQTFfSU4pLAorCVBJTk1VWF9EQVRBKFBBMF9EQVRBLCBQQTBfSU4pLAorCisJLyogUEIgKi8KKwlQSU5NVVhfREFUQShQQjEyX0RBVEEsIFBCMTJNRF8wMCwgRk9SQ0VfT1VUKSwKKwlQSU5NVVhfREFUQShXRFRPVkZfTUFSSywgUEIxMk1EXzAxKSwKKwlQSU5NVVhfREFUQShJUlFPVVRfTUFSSywgUEIxMk1EXzEwLCBQQjEySVJRXzAwKSwKKwlQSU5NVVhfREFUQShSRUZPVVRfTUFSSywgUEIxMk1EXzEwLCBQQjEySVJRXzAxKSwKKwlQSU5NVVhfREFUQShJUlFPVVRfUkVGT1VUX01BUkssIFBCMTJNRF8xMCwgUEIxMklSUV8xMCksCisJUElOTVVYX0RBVEEoVUJDVFJHX01BUkssIFBCMTJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQQjExX0RBVEEsIFBCMTFNRF8wLCBQQjExX0lOLCBQQjExX09VVCksCisJUElOTVVYX0RBVEEoQ1RYMV9NQVJLLCBQQjExTURfMSksCisKKwlQSU5NVVhfREFUQShQQjEwX0RBVEEsIFBCMTBNRF8wLCBQQjEwX0lOLCBQQjEwX09VVCksCisJUElOTVVYX0RBVEEoQ1JYMV9NQVJLLCBQQjEwTURfMSksCisKKwlQSU5NVVhfREFUQShQQjlfREFUQSwgUEI5TURfMDAsIFBCOV9JTiwgUEI5X09VVCksCisJUElOTVVYX0RBVEEoQ1RYMF9NQVJLLCBQQjlNRF8wMSksCisJUElOTVVYX0RBVEEoQ1RYMF9DVFgxX01BUkssIFBCOU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBCOF9EQVRBLCBQQjhNRF8wMCwgUEI4X0lOLCBQQjhfT1VUKSwKKwlQSU5NVVhfREFUQShDUlgwX01BUkssIFBCOE1EXzAxKSwKKwlQSU5NVVhfREFUQShDUlgwX0NSWDFfTUFSSywgUEI4TURfMTApLAorCisJUElOTVVYX0RBVEEoUEI3X0RBVEEsIFBCN01EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0RBM19NQVJLLCBQQjdNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDdfUEJfTUFSSywgUEI3TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTdfUEJfTUFSSywgUEI3TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNk1EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0NMM19NQVJLLCBQQjZNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDZfUEJfTUFSSywgUEI2TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTZfUEJfTUFSSywgUEI2TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEI1X0RBVEEsIFBCNU1EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0RBMl9NQVJLLCBQQjZNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDVfUEJfTUFSSywgUEI2TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTVfUEJfTUFSSywgUEI2TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEI0X0RBVEEsIFBCNE1EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0NMMl9NQVJLLCBQQjRNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDRfUEJfTUFSSywgUEI0TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTRfUEJfTUFSSywgUEI0TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM01EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0RBMV9NQVJLLCBQQjNNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDNfUEJfTUFSSywgUEIzTURfMTApLAorCVBJTk1VWF9EQVRBKElSUTNfUEJfTUFSSywgUEIzTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIyX0RBVEEsIFBCMk1EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0NMMV9NQVJLLCBQQjJNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDJfUEJfTUFSSywgUEIyTURfMTApLAorCVBJTk1VWF9EQVRBKElSUTJfUEJfTUFSSywgUEIyTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIxX0RBVEEsIFBCMU1EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0RBMF9NQVJLLCBQQjFNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDFfUEJfTUFSSywgUEIxTURfMTApLAorCVBJTk1VWF9EQVRBKElSUTFfUEJfTUFSSywgUEIxTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCME1EXzAwLCBGT1JDRV9JTiksCisJUElOTVVYX0RBVEEoU0NMMF9NQVJLLCBQQjBNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDBfUEJfTUFSSywgUEIwTURfMTApLAorCVBJTk1VWF9EQVRBKElSUTBfUEJfTUFSSywgUEIwTURfMTEpLAorCisJLyogUEMgKi8KKwlQSU5NVVhfREFUQShQQzE0X0RBVEEsIFBDMTRNRF8wLCBQQzE0X0lOLCBQQzE0X09VVCksCisJUElOTVVYX0RBVEEoV0FJVF9NQVJLLCBQQzE0TURfMSksCisKKwlQSU5NVVhfREFUQShQQzEzX0RBVEEsIFBDMTNNRF8wLCBQQzEzX0lOLCBQQzEzX09VVCksCisJUElOTVVYX0RBVEEoUkRXUl9NQVJLLCBQQzEzTURfMSksCisKKwlQSU5NVVhfREFUQShQQzEyX0RBVEEsIFBDMTJNRF8wLCBQQzEyX0lOLCBQQzEyX09VVCksCisJUElOTVVYX0RBVEEoQ0tFX01BUkssIFBDMTJNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDMTFfREFUQSwgUEMxMU1EXzAwLCBQQzExX0lOLCBQQzExX09VVCksCisJUElOTVVYX0RBVEEoQ0FTVV9NQVJLLCBQQzExTURfMDEpLAorCVBJTk1VWF9EQVRBKEJSRVFfTUFSSywgUEMxMU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBDMTBfREFUQSwgUEMxME1EXzAwLCBQQzEwX0lOLCBQQzEwX09VVCksCisJUElOTVVYX0RBVEEoUkFTVV9NQVJLLCBQQzEwTURfMDEpLAorCVBJTk1VWF9EQVRBKEJBQ0tfTUFSSywgUEMxME1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBDOV9EQVRBLCBQQzlNRF8wLCBQQzlfSU4sIFBDOV9PVVQpLAorCVBJTk1VWF9EQVRBKENBU0xfTUFSSywgUEM5TURfMSksCisKKwlQSU5NVVhfREFUQShQQzhfREFUQSwgUEM4TURfMCwgUEM4X0lOLCBQQzhfT1VUKSwKKwlQSU5NVVhfREFUQShSQVNMX01BUkssIFBDOE1EXzEpLAorCisJUElOTVVYX0RBVEEoUEM3X0RBVEEsIFBDN01EXzAsIFBDN19JTiwgUEM3X09VVCksCisJUElOTVVYX0RBVEEoV0UzX0RRTVVVX0FIX0lDSU9fV1JfTUFSSywgUEM3TURfMSksCisKKwlQSU5NVVhfREFUQShQQzZfREFUQSwgUEM2TURfMCwgUEM2X0lOLCBQQzZfT1VUKSwKKwlQSU5NVVhfREFUQShXRTJfRFFNVUxfSUNJT1JEX01BUkssIFBDNk1EXzEpLAorCisJUElOTVVYX0RBVEEoUEM1X0RBVEEsIFBDNU1EXzAsIFBDNV9JTiwgUEM1X09VVCksCisJUElOTVVYX0RBVEEoV0UxX0RRTUxVX1dFX01BUkssIFBDNU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEM0X0RBVEEsIFBDNE1EXzAsIFBDNF9JTiwgUEM0X09VVCksCisJUElOTVVYX0RBVEEoV0UwX0RRTUxMX01BUkssIFBDNE1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMzX0RBVEEsIFBDM01EXzAsIFBDM19JTiwgUEMzX09VVCksCisJUElOTVVYX0RBVEEoQ1MzX01BUkssIFBDM01EXzEpLAorCisJUElOTVVYX0RBVEEoUEMyX0RBVEEsIFBDMk1EXzAsIFBDMl9JTiwgUEMyX09VVCksCisJUElOTVVYX0RBVEEoQ1MyX01BUkssIFBDMk1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMxX0RBVEEsIFBDMU1EXzAsIFBDMV9JTiwgUEMxX09VVCksCisJUElOTVVYX0RBVEEoQTFfTUFSSywgUEMxTURfMSksCisKKwlQSU5NVVhfREFUQShQQzBfREFUQSwgUEMwTURfMDAsIFBDMF9JTiwgUEMwX09VVCksCisJUElOTVVYX0RBVEEoQTBfTUFSSywgUEMwTURfMDEpLAorCVBJTk1VWF9EQVRBKENTN19NQVJLLCBQQzBNRF8xMCksCisKKwkvKiBQRCAqLworCVBJTk1VWF9EQVRBKFBEMTVfREFUQSwgUEQxNU1EXzAwMCwgUEQxNV9JTiwgUEQxNV9PVVQpLAorCVBJTk1VWF9EQVRBKEQzMV9NQVJLLCBQRDE1TURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UN19QRF9NQVJLLCBQRDE1TURfMDEwKSwKKwlQSU5NVVhfREFUQShBRFRSR19QRF9NQVJLLCBQRDE1TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DNERfTUFSSywgUEQxNU1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDE0X0RBVEEsIFBEMTRNRF8wMDAsIFBEMTRfSU4sIFBEMTRfT1VUKSwKKwlQSU5NVVhfREFUQShEMzBfTUFSSywgUEQxNE1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDZfUERfTUFSSywgUEQxNE1EXzAxMCksCisJUElOTVVYX0RBVEEoVElPQzRDX01BUkssIFBEMTRNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxM19EQVRBLCBQRDEzTURfMDAwLCBQRDEzX0lOLCBQRDEzX09VVCksCisJUElOTVVYX0RBVEEoRDI5X01BUkssIFBEMTNNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQ1X1BEX01BUkssIFBEMTNNRF8wMTApLAorCVBJTk1VWF9EQVRBKFRFTkQxX1BEX01BUkssIFBEMTNNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0M0Ql9NQVJLLCBQRDEzTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMTJfREFUQSwgUEQxMk1EXzAwMCwgUEQxMl9JTiwgUEQxMl9PVVQpLAorCVBJTk1VWF9EQVRBKEQyOF9NQVJLLCBQRDEyTURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UNF9QRF9NQVJLLCBQRDEyTURfMDEwKSwKKwlQSU5NVVhfREFUQShEQUNLMV9QRF9NQVJLLCBQRDEyTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DNEFfTUFSSywgUEQxMk1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDExX0RBVEEsIFBEMTFNRF8wMDAsIFBEMTFfSU4sIFBEMTFfT1VUKSwKKwlQSU5NVVhfREFUQShEMjdfTUFSSywgUEQxMU1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDNfUERfTUFSSywgUEQxMU1EXzAxMCksCisJUElOTVVYX0RBVEEoRFJFUTFfUERfTUFSSywgUEQxMU1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzNEX01BUkssIFBEMTFNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxMF9EQVRBLCBQRDEwTURfMDAwLCBQRDEwX0lOLCBQRDEwX09VVCksCisJUElOTVVYX0RBVEEoRDI2X01BUkssIFBEMTBNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQyX1BEX01BUkssIFBEMTBNRF8wMTApLAorCVBJTk1VWF9EQVRBKFRFTkQwX1BEX01BUkssIFBEMTBNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzQ19NQVJLLCBQRDEwTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEOV9EQVRBLCBQRDlNRF8wMDAsIFBEOV9JTiwgUEQ5X09VVCksCisJUElOTVVYX0RBVEEoRDI1X01BUkssIFBEOU1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDFfUERfTUFSSywgUEQ5TURfMDEwKSwKKwlQSU5NVVhfREFUQShEQUNLMF9QRF9NQVJLLCBQRDlNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzQl9NQVJLLCBQRDlNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ4X0RBVEEsIFBEOE1EXzAwMCwgUEQ4X0lOLCBQRDhfT1VUKSwKKwlQSU5NVVhfREFUQShEMjRfTUFSSywgUEQ4TURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UMF9QRF9NQVJLLCBQRDhNRF8wMTApLAorCVBJTk1VWF9EQVRBKERSRVEwX1BEX01BUkssIFBEOE1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzNBX01BUkssIFBEOE1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDdfREFUQSwgUEQ3TURfMDAwLCBQRDdfSU4sIFBEN19PVVQpLAorCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQRDdNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTdfUERfTUFSSywgUEQ3TURfMDEwKSwKKwlQSU5NVVhfREFUQShTQ1MxX1BEX01BUkssIFBEN01EXzAxMSksCisJUElOTVVYX0RBVEEoVENMS0RfUERfTUFSSywgUEQ3TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMkJfTUFSSywgUEQ3TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBENl9EQVRBLCBQRDZNRF8wMDAsIFBENl9JTiwgUEQ2X09VVCksCisJUElOTVVYX0RBVEEoRDIyX01BUkssIFBENk1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRNl9QRF9NQVJLLCBQRDZNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTTzFfUERfTUFSSywgUEQ2TURfMDExKSwKKwlQSU5NVVhfREFUQShUQ0xLQ19QRF9NQVJLLCBQRDZNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MyQV9NQVJLLCBQRDZNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ1X0RBVEEsIFBENU1EXzAwMCwgUEQ1X0lOLCBQRDVfT1VUKSwKKwlQSU5NVVhfREFUQShEMjFfTUFSSywgUEQ1TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlE1X1BEX01BUkssIFBENU1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NJMV9QRF9NQVJLLCBQRDVNRF8wMTEpLAorCVBJTk1VWF9EQVRBKFRDTEtCX1BEX01BUkssIFBENU1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzFCX01BUkssIFBENU1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDRfREFUQSwgUEQ0TURfMDAwLCBQRDRfSU4sIFBENF9PVVQpLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQRDRNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTRfUERfTUFSSywgUEQ0TURfMDEwKSwKKwlQSU5NVVhfREFUQShTU0NLMV9QRF9NQVJLLCBQRDRNRF8wMTEpLAorCVBJTk1VWF9EQVRBKFRDTEtBX1BEX01BUkssIFBENE1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzFBX01BUkssIFBENE1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDNfREFUQSwgUEQzTURfMDAwLCBQRDNfSU4sIFBEM19PVVQpLAorCVBJTk1VWF9EQVRBKEQxOV9NQVJLLCBQRDNNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTNfUERfTUFSSywgUEQzTURfMDEwKSwKKwlQSU5NVVhfREFUQShTQ1MwX1BEX01BUkssIFBEM01EXzAxMSksCisJUElOTVVYX0RBVEEoREFDSzNfTUFSSywgUEQzTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMERfTUFSSywgUEQzTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMl9EQVRBLCBQRDJNRF8wMDAsIFBEMl9JTiwgUEQyX09VVCksCisJUElOTVVYX0RBVEEoRDE4X01BUkssIFBEMk1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMl9QRF9NQVJLLCBQRDJNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTTzBfUERfTUFSSywgUEQyTURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRM19NQVJLLCBQRDJNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MwQ19NQVJLLCBQRDJNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxX0RBVEEsIFBEMU1EXzAwMCwgUEQxX0lOLCBQRDFfT1VUKSwKKwlQSU5NVVhfREFUQShEMTdfTUFSSywgUEQxTURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlExX1BEX01BUkssIFBEMU1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NJMF9QRF9NQVJLLCBQRDFNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERBQ0syX01BUkssIFBEMU1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzBCX01BUkssIFBEMU1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDBfREFUQSwgUEQwTURfMDAwLCBQRDBfSU4sIFBEMF9PVVQpLAorCVBJTk1VWF9EQVRBKEQxNl9NQVJLLCBQRDBNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTBfUERfTUFSSywgUEQwTURfMDEwKSwKKwlQSU5NVVhfREFUQShTU0NLMF9QRF9NQVJLLCBQRDBNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERSRVEyX01BUkssIFBEME1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzBBX01BUkssIFBEME1EXzEwMSksCisKKwkvKiBQRSAqLworCVBJTk1VWF9EQVRBKFBFMTVfREFUQSwgUEUxNU1EXzAwLCBQRTE1X0lOLCBQRTE1X09VVCksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBFMTVNRF8wMSksCisJUElOTVVYX0RBVEEoUlRTM19NQVJLLCBQRTE1TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUxNF9EQVRBLCBQRTE0TURfMDAsIFBFMTRfSU4sIFBFMTRfT1VUKSwKKwlQSU5NVVhfREFUQShDUzFfTUFSSywgUEUxNE1EXzAxKSwKKwlQSU5NVVhfREFUQShDVFMzX01BUkssIFBFMTRNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTEzX0RBVEEsIFBFMTNNRF8wMCwgUEUxM19JTiwgUEUxM19PVVQpLAorCVBJTk1VWF9EQVRBKFRYRDNfTUFSSywgUEUxM01EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMTJfREFUQSwgUEUxMk1EXzAwLCBQRTEyX0lOLCBQRTEyX09VVCksCisJUElOTVVYX0RBVEEoUlhEM19NQVJLLCBQRTEyTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUxMV9EQVRBLCBQRTExTURfMDAwLCBQRTExX0lOLCBQRTExX09VVCksCisJUElOTVVYX0RBVEEoQ1M2X0NFMUJfTUFSSywgUEUxMU1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRN19QRV9NQVJLLCBQRTExTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMV9QRV9NQVJLLCBQRTExTURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFMTBfREFUQSwgUEUxME1EXzAwMCwgUEUxMF9JTiwgUEUxMF9PVVQpLAorCVBJTk1VWF9EQVRBKENFMkJfTUFSSywgUEUxME1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRNl9QRV9NQVJLLCBQRTEwTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMF9QRV9NQVJLLCBQRTEwTURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFOV9EQVRBLCBQRTlNRF8wMCwgUEU5X0lOLCBQRTlfT1VUKSwKKwlQSU5NVVhfREFUQShDUzVfQ0UxQV9NQVJLLCBQRTlNRF8wMSksCisJUElOTVVYX0RBVEEoSVJRNV9QRV9NQVJLLCBQRTlNRF8xMCksCisJUElOTVVYX0RBVEEoU0NLM19NQVJLLCBQRTlNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRThfREFUQSwgUEU4TURfMDAsIFBFOF9JTiwgUEU4X09VVCksCisJUElOTVVYX0RBVEEoQ0UyQV9NQVJLLCBQRThNRF8wMSksCisJUElOTVVYX0RBVEEoSVJRNF9QRV9NQVJLLCBQRThNRF8xMCksCisJUElOTVVYX0RBVEEoU0NLMl9NQVJLLCBQRThNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTdfREFUQSwgUEU3TURfMDAwLCBQRTdfSU4sIFBFN19PVVQpLAorCVBJTk1VWF9EQVRBKEZSQU1FX01BUkssIFBFN01EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRM19QRV9NQVJLLCBQRTdNRF8wMTApLAorCVBJTk1VWF9EQVRBKFRYRDJfTUFSSywgUEU3TURfMDExKSwKKwlQSU5NVVhfREFUQShEQUNLMV9QRV9NQVJLLCBQRTdNRF8xMDApLAorCisJUElOTVVYX0RBVEEoUEU2X0RBVEEsIFBFNk1EXzAwMCwgUEU2X0lOLCBQRTZfT1VUKSwKKwlQSU5NVVhfREFUQShBMjVfTUFSSywgUEU2TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlEyX1BFX01BUkssIFBFNk1EXzAxMCksCisJUElOTVVYX0RBVEEoUlhEMl9NQVJLLCBQRTZNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERSRVExX1BFX01BUkssIFBFNk1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTVfREFUQSwgUEU1TURfMDAwLCBQRTVfSU4sIFBFNV9PVVQpLAorCVBJTk1VWF9EQVRBKEEyNF9NQVJLLCBQRTVNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTFfUEVfTUFSSywgUEU1TURfMDEwKSwKKwlQSU5NVVhfREFUQShUWEQxX01BUkssIFBFNU1EXzAxMSksCisJUElOTVVYX0RBVEEoREFDSzBfUEVfTUFSSywgUEU1TURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFNF9EQVRBLCBQRTRNRF8wMDAsIFBFNF9JTiwgUEU0X09VVCksCisJUElOTVVYX0RBVEEoQTIzX01BUkssIFBFNE1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMF9QRV9NQVJLLCBQRTRNRF8wMTApLAorCVBJTk1VWF9EQVRBKFJYRDFfTUFSSywgUEU0TURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRMF9QRV9NQVJLLCBQRTRNRF8xMDApLAorCisJUElOTVVYX0RBVEEoUEUzX0RBVEEsIFBFM01EXzAwLCBQRTNfSU4sIFBFM19PVVQpLAorCVBJTk1VWF9EQVRBKEEyMl9NQVJLLCBQRTNNRF8wMSksCisJUElOTVVYX0RBVEEoU0NLMV9NQVJLLCBQRTNNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTJfREFUQSwgUEUyTURfMDAsIFBFMl9JTiwgUEUyX09VVCksCisJUElOTVVYX0RBVEEoQTIxX01BUkssIFBFMk1EXzAxKSwKKwlQSU5NVVhfREFUQShTQ0swX01BUkssIFBFMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMV9EQVRBLCBQRTFNRF8wMCwgUEUxX0lOLCBQRTFfT1VUKSwKKwlQSU5NVVhfREFUQShDUzRfTUFSSywgUEUxTURfMDEpLAorCVBJTk1VWF9EQVRBKE1SRVNfTUFSSywgUEUxTURfMTApLAorCVBJTk1VWF9EQVRBKFRYRDBfTUFSSywgUEUxTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUwX0RBVEEsIFBFME1EXzAwMCwgUEUwX0lOLCBQRTBfT1VUKSwKKwlQSU5NVVhfREFUQShCU19NQVJLLCBQRTBNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFJYRDBfTUFSSywgUEUwTURfMDExKSwKKwlQSU5NVVhfREFUQShBRFRSR19QRV9NQVJLLCBQRTBNRF8xMDApLAorCisJLyogUEYgKi8KKwlQSU5NVVhfREFUQShQRjMwX0RBVEEsIFBGMzBNRF8wLCBQRjMwX0lOLCBQRjMwX09VVCksCisJUElOTVVYX0RBVEEoQVVESU9fQ0xLX01BUkssIFBGMzBNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBGMjlfREFUQSwgUEYyOU1EXzAsIFBGMjlfSU4sIFBGMjlfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lEQVRBM19NQVJLLCBQRjI5TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI4X0RBVEEsIFBGMjhNRF8wLCBQRjI4X0lOLCBQRjI4X09VVCksCisJUElOTVVYX0RBVEEoU1NJV1MzX01BUkssIFBGMjhNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBGMjdfREFUQSwgUEYyN01EXzAsIFBGMjdfSU4sIFBGMjdfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0szX01BUkssIFBGMjdNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBGMjZfREFUQSwgUEYyNk1EXzAsIFBGMjZfSU4sIFBGMjZfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lEQVRBMl9NQVJLLCBQRjI2TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI1X0RBVEEsIFBGMjVNRF8wLCBQRjI1X0lOLCBQRjI1X09VVCksCisJUElOTVVYX0RBVEEoU1NJV1MyX01BUkssIFBGMjVNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBGMjRfREFUQSwgUEYyNE1EXzAsIFBGMjRfSU4sIFBGMjRfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0syX01BUkssIFBGMjRNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBGMjNfREFUQSwgUEYyM01EXzAwLCBQRjIzX0lOLCBQRjIzX09VVCksCisJUElOTVVYX0RBVEEoU1NJREFUQTFfTUFSSywgUEYyM01EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfVkVQV0NfTUFSSywgUEYyM01EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMjJfREFUQSwgUEYyMk1EXzAwLCBQRjIyX0lOLCBQRjIyX09VVCksCisJUElOTVVYX0RBVEEoU1NJV1MxX01BUkssIFBGMjJNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX1ZDUFdDX01BUkssIFBGMjJNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjIxX0RBVEEsIFBGMjFNRF8wMCwgUEYyMV9JTiwgUEYyMV9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVNDSzFfTUFSSywgUEYyMU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfQ0xLX01BUkssIFBGMjFNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjIwX0RBVEEsIFBGMjBNRF8wMCwgUEYyMF9JTiwgUEYyMF9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSURBVEEwX01BUkssIFBGMjBNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0ZMTV9NQVJLLCBQRjIwTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxOV9EQVRBLCBQRjE5TURfMDAsIFBGMTlfSU4sIFBGMTlfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lXUzBfTUFSSywgUEYxOU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfTV9ESVNQX01BUkssIFBGMTlNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjE4X0RBVEEsIFBGMThNRF8wMCwgUEYxOF9JTiwgUEYxOF9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVNDSzBfTUFSSywgUEYxOE1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfQ0wyX01BUkssIFBGMThNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjE3X0RBVEEsIFBGMTdNRF8wMCwgUEYxN19JTiwgUEYxN19PVVQpLAorCVBJTk1VWF9EQVRBKEZDRV9NQVJLLCBQRjE3TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9DTDFfTUFSSywgUEYxN01EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTZfREFUQSwgUEYxNk1EXzAwLCBQRjE2X0lOLCBQRjE2X09VVCksCisJUElOTVVYX0RBVEEoRlJCX01BUkssIFBGMTZNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RPTl9NQVJLLCBQRjE2TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxNV9EQVRBLCBQRjE1TURfMDAsIFBGMTVfSU4sIFBGMTVfT1VUKSwKKwlQSU5NVVhfREFUQShOQUY3X01BUkssIFBGMTVNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEExNV9NQVJLLCBQRjE1TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxNF9EQVRBLCBQRjE0TURfMDAsIFBGMTRfSU4sIFBGMTRfT1VUKSwKKwlQSU5NVVhfREFUQShOQUY2X01BUkssIFBGMTRNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEExNF9NQVJLLCBQRjE0TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxM19EQVRBLCBQRjEzTURfMDAsIFBGMTNfSU4sIFBGMTNfT1VUKSwKKwlQSU5NVVhfREFUQShOQUY1X01BUkssIFBGMTNNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEExM19NQVJLLCBQRjEzTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxMl9EQVRBLCBQRjEyTURfMDAsIFBGMTJfSU4sIFBGMTJfT1VUKSwKKwlQSU5NVVhfREFUQShOQUY0X01BUkssIFBGMTJNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEExMl9NQVJLLCBQRjEyTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxMV9EQVRBLCBQRjExTURfMDAsIFBGMTFfSU4sIFBGMTFfT1VUKSwKKwlQSU5NVVhfREFUQShOQUYzX01BUkssIFBGMTFNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEExMV9NQVJLLCBQRjExTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxMF9EQVRBLCBQRjEwTURfMDAsIFBGMTBfSU4sIFBGMTBfT1VUKSwKKwlQSU5NVVhfREFUQShOQUYyX01BUkssIFBGMTBNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEExMF9NQVJLLCBQRjEwTURfMTApLAorCisJUElOTVVYX0RBVEEoUEY5X0RBVEEsIFBGOU1EXzAwLCBQRjlfSU4sIFBGOV9PVVQpLAorCVBJTk1VWF9EQVRBKE5BRjFfTUFSSywgUEY5TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOV9NQVJLLCBQRjlNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjhfREFUQSwgUEY4TURfMDAsIFBGOF9JTiwgUEY4X09VVCksCisJUElOTVVYX0RBVEEoTkFGMF9NQVJLLCBQRjhNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEE4X01BUkssIFBGOE1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGN19EQVRBLCBQRjdNRF8wMCwgUEY3X0lOLCBQRjdfT1VUKSwKKwlQSU5NVVhfREFUQShGU0NfTUFSSywgUEY3TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBN19NQVJLLCBQRjdNRF8xMCksCisJUElOTVVYX0RBVEEoU0NTMV9QRl9NQVJLLCBQRjdNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjZfREFUQSwgUEY2TURfMDAsIFBGNl9JTiwgUEY2X09VVCksCisJUElOTVVYX0RBVEEoRk9FX01BUkssIFBGNk1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTZfTUFSSywgUEY2TURfMTApLAorCVBJTk1VWF9EQVRBKFNTTzFfUEZfTUFSSywgUEY2TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEY1X0RBVEEsIFBGNU1EXzAwLCBQRjVfSU4sIFBGNV9PVVQpLAorCVBJTk1VWF9EQVRBKEZDREVfTUFSSywgUEY1TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBNV9NQVJLLCBQRjVNRF8xMCksCisJUElOTVVYX0RBVEEoU1NJMV9QRl9NQVJLLCBQRjVNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjRfREFUQSwgUEY0TURfMDAsIFBGNF9JTiwgUEY0X09VVCksCisJUElOTVVYX0RBVEEoRldFX01BUkssIFBGNE1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTRfTUFSSywgUEY0TURfMTApLAorCVBJTk1VWF9EQVRBKFNTQ0sxX1BGX01BUkssIFBGNE1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBGM19EQVRBLCBQRjNNRF8wMCwgUEYzX0lOLCBQRjNfT1VUKSwKKwlQSU5NVVhfREFUQShUQ0xLRF9QRl9NQVJLLCBQRjNNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEEzX01BUkssIFBGM01EXzEwKSwKKwlQSU5NVVhfREFUQShTQ1MwX1BGX01BUkssIFBGM01EXzExKSwKKworCVBJTk1VWF9EQVRBKFBGMl9EQVRBLCBQRjJNRF8wMCwgUEYyX0lOLCBQRjJfT1VUKSwKKwlQSU5NVVhfREFUQShUQ0xLQ19QRl9NQVJLLCBQRjJNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEEyX01BUkssIFBGMk1EXzEwKSwKKwlQSU5NVVhfREFUQShTU08wX1BGX01BUkssIFBGMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBGMV9EQVRBLCBQRjFNRF8wMCwgUEYxX0lOLCBQRjFfT1VUKSwKKwlQSU5NVVhfREFUQShUQ0xLQl9QRl9NQVJLLCBQRjFNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEExX01BUkssIFBGMU1EXzEwKSwKKwlQSU5NVVhfREFUQShTU0kwX1BGX01BUkssIFBGMU1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBGMF9EQVRBLCBQRjBNRF8wMCwgUEYwX0lOLCBQRjBfT1VUKSwKKwlQSU5NVVhfREFUQShUQ0xLQV9QRl9NQVJLLCBQRjBNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEEwX01BUkssIFBGME1EXzEwKSwKKwlQSU5NVVhfREFUQShTU0NLMF9QRl9NQVJLLCBQRjBNRF8xMSksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9ncGlvIHBpbm11eF9ncGlvc1tdID0geworCisJLyogUEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BBNywgUEE3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE2LCBQQTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTUsIFBBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNCwgUEE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEzLCBQQTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTIsIFBBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMSwgUEExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEwLCBQQTBfREFUQSksCisKKwkvKiBQQiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEIxMiwgUEIxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMTEsIFBCMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjEwLCBQQjEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI5LCBQQjlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjgsIFBCOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNywgUEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI2LCBQQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjUsIFBCNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNCwgUEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIzLCBQQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjIsIFBCMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMSwgUEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIwLCBQQjBfREFUQSksCisKKwkvKiBQQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEMxNCwgUEMxNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMTMsIFBDMTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEyLCBQQzEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxMSwgUEMxMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMTAsIFBDMTBfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzksIFBDOV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDOCwgUEM4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM3LCBQQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzYsIFBDNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNSwgUEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM0LCBQQzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzMsIFBDM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMiwgUEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxLCBQQzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzAsIFBDMF9EQVRBKSwKKworCS8qIFBEICovCisJUElOTVVYX0dQSU8oR1BJT19QRDE1LCBQRDE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxNCwgUEQxNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTMsIFBEMTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEyLCBQRDEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxMSwgUEQxMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTAsIFBEMTBfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDksIFBEOV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEOCwgUEQ4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ3LCBQRDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDYsIFBENl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENSwgUEQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ0LCBQRDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDMsIFBEM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMiwgUEQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxLCBQRDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDAsIFBEMF9EQVRBKSwKKworCS8qIFBFICovCisJUElOTVVYX0dQSU8oR1BJT19QRTE1LCBQRTE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUxNCwgUEUxNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTMsIFBFMTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEyLCBQRTEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUxMSwgUEUxMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTAsIFBFMTBfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTksIFBFOV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFOCwgUEU4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU3LCBQRTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTYsIFBFNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNSwgUEU1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU0LCBQRTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTMsIFBFM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMiwgUEUyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUxLCBQRTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTAsIFBFMF9EQVRBKSwKKworCS8qIFBGICovCisJUElOTVVYX0dQSU8oR1BJT19QRjMwLCBQRjMwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyOSwgUEYyOV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjgsIFBGMjhfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI3LCBQRjI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyNiwgUEYyNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjUsIFBGMjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI0LCBQRjI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyMywgUEYyM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjIsIFBGMjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIxLCBQRjIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyMCwgUEYyMF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTksIFBGMTlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE4LCBQRjE4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxNywgUEYxN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTYsIFBGMTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE1LCBQRjE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxNCwgUEYxNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTMsIFBGMTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEyLCBQRjEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxMSwgUEYxMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTAsIFBGMTBfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjksIFBGOV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGOCwgUEY4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY3LCBQRjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjYsIFBGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNSwgUEY1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY0LCBQRjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjMsIFBGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMiwgUEYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxLCBQRjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjAsIFBGMF9EQVRBKSwKKworCS8qIElOVEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ3X1BCLCBQSU5UN19QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ2X1BCLCBQSU5UNl9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ1X1BCLCBQSU5UNV9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ0X1BCLCBQSU5UNF9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQzX1BCLCBQSU5UM19QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQyX1BCLCBQSU5UMl9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQxX1BCLCBQSU5UMV9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQwX1BCLCBQSU5UMF9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ3X1BELCBQSU5UN19QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ2X1BELCBQSU5UNl9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ1X1BELCBQSU5UNV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQ0X1BELCBQSU5UNF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQzX1BELCBQSU5UM19QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQyX1BELCBQSU5UMl9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQxX1BELCBQSU5UMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BJTlQwX1BELCBQSU5UMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTdfUEIsIElSUTdfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE2X1BCLCBJUlE2X1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNV9QQiwgSVJRNV9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTRfUEIsIElSUTRfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX1BCLCBJUlEzX1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMl9QQiwgSVJRMl9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTFfUEIsIElSUTFfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX1BCLCBJUlEwX1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRN19QRCwgSVJRN19QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTZfUEQsIElSUTZfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1X1BELCBJUlE1X1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNF9QRCwgSVJRNF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTNfUEQsIElSUTNfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyX1BELCBJUlEyX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9QRCwgSVJRMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTBfUEQsIElSUTBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE3X1BFLCBJUlE3X1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNl9QRSwgSVJRNl9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTVfUEUsIElSUTVfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE0X1BFLCBJUlE0X1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRM19QRSwgSVJRM19QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfUEUsIElSUTJfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlExX1BFLCBJUlExX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMF9QRSwgSVJRMF9QRV9NQVJLKSwKKworCVBJTk1VWF9HUElPKEdQSU9fRk5fV0RUT1ZGLCBXRFRPVkZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlFPVVQsIElSUU9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1JFRk9VVCwgUkVGT1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRT1VUX1JFRk9VVCwgSVJRT1VUX1JFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VCQ1RSRywgVUJDVFJHX01BUkspLAorCisJLyogQ0FOICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9DVFgxLCBDVFgxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1JYMSwgQ1JYMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NUWDAsIENUWDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DVFgwX0NUWDEsIENUWDBfQ1RYMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NSWDAsIENSWDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUlgwX0NSWDEsIENSWDBfQ1JYMV9NQVJLKSwKKworCS8qIElJQzMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NEQTMsIFNEQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0wzLCBTQ0wzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RBMiwgU0RBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDTDIsIFNDTDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREExLCBTREExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NMMSwgU0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NEQTAsIFNEQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0wwLCBTQ0wwX01BUkspLAorCisJLyogRE1BQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fVEVORDBfUEQsIFRFTkQwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVEVORDBfUEUsIFRFTkQwX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzBfUEQsIERBQ0swX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzBfUEUsIERBQ0swX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTBfUEQsIERSRVEwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTBfUEUsIERSRVEwX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVEVORDFfUEQsIFRFTkQxX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVEVORDFfUEUsIFRFTkQxX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzFfUEQsIERBQ0sxX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzFfUEUsIERBQ0sxX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTFfUEQsIERSRVExX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTFfUEUsIERSRVExX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzIsIERBQ0syX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTIsIERSRVEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzMsIERBQ0szX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTMsIERSRVEzX01BUkspLAorCisJLyogQURDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRFRSR19QRCwgQURUUkdfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRFRSR19QRSwgQURUUkdfUEVfTUFSSyksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjEsIEEyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNCwgQ1M0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVJFUywgTVJFU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JTLCBCU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPSVMxNiwgSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1MxLCBDUzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZfQ0UxQiwgQ1M2X0NFMUJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJCLCBDRTJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M1X0NFMUEsIENTNV9DRTFBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQSwgQ0UyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQU1FLCBGUkFNRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dBSVQsIFdBSVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRFdSLCBSRFdSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0tFLCBDS0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DQVNVLCBDQVNVX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQlJFUSwgQlJFUV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1JBU1UsIFJBU1VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CQUNLLCBCQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0FTTCwgQ0FTTF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1JBU0wsIFJBU0xfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTNfRFFNVVVfQUhfSUNJT19XUiwgV0UzX0RRTVVVX0FIX0lDSU9fV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTJfRFFNVUxfSUNJT1JELCBXRTJfRFFNVUxfSUNJT1JEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UxX0RRTUxVX1dFLCBXRTFfRFFNTFVfV0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTBfRFFNTEwsIFdFMF9EUU1MTF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTMywgQ1MzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1MyLCBDUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMSwgQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMCwgQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzcsIENTN19NQVJLKSwKKworCS8qIFRNVSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzRELCBUSU9DNERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DNEMsIFRJT0M0Q19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0M0QiwgVElPQzRCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzRBLCBUSU9DNEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DM0QsIFRJT0MzRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MzQywgVElPQzNDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzNCLCBUSU9DM0JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DM0EsIFRJT0MzQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MyQiwgVElPQzJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzFCLCBUSU9DMUJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMkEsIFRJT0MyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MxQSwgVElPQzFBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzBELCBUSU9DMERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMEMsIFRJT0MwQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MwQiwgVElPQzBCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzBBLCBUSU9DMEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLRF9QRCwgVENMS0RfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLQ19QRCwgVENMS0NfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLQl9QRCwgVENMS0JfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLQV9QRCwgVENMS0FfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLRF9QRiwgVENMS0RfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLQ19QRiwgVENMS0NfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLQl9QRiwgVENMS0JfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLQV9QRiwgVENMS0FfUEZfTUFSSyksCisKKwkvKiBTU1UgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDUzBfUEQsIFNDUzBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU08wX1BELCBTU08wX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9QRCwgU1NJMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTQ0swX1BELCBTU0NLMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDUzBfUEYsIFNDUzBfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU08wX1BGLCBTU08wX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9QRiwgU1NJMF9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTQ0swX1BGLCBTU0NLMF9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDUzFfUEQsIFNDUzFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU08xX1BELCBTU08xX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9QRCwgU1NJMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTQ0sxX1BELCBTU0NLMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDUzFfUEYsIFNDUzFfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU08xX1BGLCBTU08xX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9QRiwgU1NJMV9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTQ0sxX1BGLCBTU0NLMV9QRl9NQVJLKSwKKworCS8qIFNDSUYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RYRDAsIFRYRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SWEQwLCBSWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NLMCwgU0NLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RYRDEsIFRYRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SWEQxLCBSWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NLMSwgU0NLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RYRDIsIFRYRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SWEQyLCBSWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NLMiwgU0NLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1JUUzMsIFJUUzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DVFMzLCBDVFMzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFhEMywgVFhEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1JYRDMsIFJYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0szLCBTQ0szX01BUkspLAorCisJLyogU1NJICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURJT19DTEssIEFVRElPX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSURBVEEzLCBTU0lEQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVdTMywgU1NJV1MzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJU0NLMywgU1NJU0NLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSURBVEEyLCBTU0lEQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVdTMiwgU1NJV1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJU0NLMiwgU1NJU0NLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSURBVEExLCBTU0lEQVRBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVdTMSwgU1NJV1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJU0NLMSwgU1NJU0NLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSURBVEEwLCBTU0lEQVRBMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVdTMCwgU1NJV1MwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJU0NLMCwgU1NJU0NLMF9NQVJLKSwKKworCS8qIEZMQ1RMICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0UsIEZDRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwgRlJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNywgTkFGN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjYsIE5BRjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY1LCBOQUY1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNCwgTkFGNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjMsIE5BRjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYyLCBOQUYyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMSwgTkFGMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjAsIE5BRjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GU0MsIEZTQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZPRSwgRk9FX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNERSwgRkNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZXRSwgRldFX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZFUFdDLCBMQ0RfVkVQV0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfVkNQV0MsIExDRF9WQ1BXQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9DTEssIExDRF9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfRkxNLCBMQ0RfRkxNX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX01fRElTUCwgTENEX01fRElTUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9DTDIsIExDRF9DTDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfQ0wxLCBMQ0RfQ0wxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RPTiwgTENEX0RPTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTUsIExDRF9EQVRBMTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTE0LCBMQ0RfREFUQTE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMywgTENEX0RBVEExM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTIsIExDRF9EQVRBMTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTExLCBMQ0RfREFUQTExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMCwgTENEX0RBVEExMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBOSwgTENEX0RBVEE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE4LCBMQ0RfREFUQThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTcsIExDRF9EQVRBN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNiwgTENEX0RBVEE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE1LCBMQ0RfREFUQTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTQsIExDRF9EQVRBNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMywgTENEX0RBVEEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEyLCBMQ0RfREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEsIExDRF9EQVRBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMCwgTENEX0RBVEEwX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQklPUkwiLCAweGZmZmUzODg2LCAxNiwgMSkgeworCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlQQjExX0lOLCBQQjExX09VVCwKKwkJUEIxMF9JTiwgUEIxMF9PVVQsCisJCVBCOV9JTiwgUEI5X09VVCwKKwkJUEI4X0lOLCBQQjhfT1VULAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1JMNCIsIDB4ZmZmZTM4OTAsIDE2LCA0KSB7CisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCMTJNRF8wMCwgUEIxMk1EXzAxLCBQQjEyTURfMTAsIFBCMTJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSTDMiLCAweGZmZmUzODkyLCAxNiwgNCkgeworCQlQQjExTURfMCwgUEIxMU1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIxME1EXzAsIFBCMTBNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCOU1EXzAwLCBQQjlNRF8wMSwgUEI5TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI4TURfMDAsIFBCOE1EXzAxLCBQQjhNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSTDIiLCAweGZmZmUzODk0LCAxNiwgNCkgeworCQlQQjdNRF8wMCwgUEI3TURfMDEsIFBCN01EXzEwLCBQQjdNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjZNRF8wMCwgUEI2TURfMDEsIFBCNk1EXzEwLCBQQjZNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjVNRF8wMCwgUEI1TURfMDEsIFBCNU1EXzEwLCBQQjVNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjRNRF8wMCwgUEI0TURfMDEsIFBCNE1EXzEwLCBQQjRNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSTDEiLCAweGZmZmUzODk2LCAxNiwgNCkgeworCQlQQjNNRF8wMCwgUEIzTURfMDEsIFBCM01EXzEwLCBQQjNNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjJNRF8wMCwgUEIyTURfMDEsIFBCMk1EXzEwLCBQQjJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjFNRF8wMCwgUEIxTURfMDEsIFBCMU1EXzEwLCBQQjFNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjBNRF8wMCwgUEIwTURfMDEsIFBCME1EXzEwLCBQQjBNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJJRkNSIiwgMHhmZmZlMzhhMiwgMTYsIDQpIHsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIxMklSUV8wMCwgUEIxMklSUV8wMSwgUEIxMklSUV8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0lPUkwiLCAweGZmZmUzOTA2LCAxNiwgMSkgeworCQkwLCAwLAorCQlQQzE0X0lOLCBQQzE0X09VVCwKKwkJUEMxM19JTiwgUEMxM19PVVQsCisJCVBDMTJfSU4sIFBDMTJfT1VULAorCQlQQzExX0lOLCBQQzExX09VVCwKKwkJUEMxMF9JTiwgUEMxMF9PVVQsCisJCVBDOV9JTiwgUEM5X09VVCwKKwkJUEM4X0lOLCBQQzhfT1VULAorCQlQQzdfSU4sIFBDN19PVVQsCisJCVBDNl9JTiwgUEM2X09VVCwKKwkJUEM1X0lOLCBQQzVfT1VULAorCQlQQzRfSU4sIFBDNF9PVVQsCisJCVBDM19JTiwgUEMzX09VVCwKKwkJUEMyX0lOLCBQQzJfT1VULAorCQlQQzFfSU4sIFBDMV9PVVQsCisJCVBDMF9JTiwgUEMwX09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSTDQiLCAweGZmZmUzOTEwLCAxNiwgNCkgeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMTRNRF8wLCBQQzE0TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzEzTURfMCwgUEMxM01EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMxMk1EXzAsIFBDMTJNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1JMMyIsIDB4ZmZmZTM5MTIsIDE2LCA0KSB7CisJCVBDMTFNRF8wMCwgUEMxMU1EXzAxLCBQQzExTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMxME1EXzAwLCBQQzEwTURfMDEsIFBDMTBNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzlNRF8wLCBQQzlNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDOE1EXzAsIFBDOE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUkwyIiwgMHhmZmZlMzkxNCwgMTYsIDQpIHsKKwkJUEM3TURfMCwgUEM3TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzZNRF8wLCBQQzZNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDNU1EXzAsIFBDNU1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEM0TURfMCwgUEM0TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSTDEiLCAweGZmZmUzOTE2LCAxNiwgNCkgeworCQlQQzNNRF8wLCBQQzNNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMk1EXzAsIFBDMk1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMxTURfMCwgUEMxTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzBNRF8wMCwgUEMwTURfMDEsIFBDME1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBESU9STCIsIDB4ZmZmZTM5ODYsIDE2LCAxKSB7CisJCVBEMTVfSU4sIFBEMTVfT1VULAorCQlQRDE0X0lOLCBQRDE0X09VVCwKKwkJUEQxM19JTiwgUEQxM19PVVQsCisJCVBEMTJfSU4sIFBEMTJfT1VULAorCQlQRDExX0lOLCBQRDExX09VVCwKKwkJUEQxMF9JTiwgUEQxMF9PVVQsCisJCVBEOV9JTiwgUEQ5X09VVCwKKwkJUEQ4X0lOLCBQRDhfT1VULAorCQlQRDdfSU4sIFBEN19PVVQsCisJCVBENl9JTiwgUEQ2X09VVCwKKwkJUEQ1X0lOLCBQRDVfT1VULAorCQlQRDRfSU4sIFBENF9PVVQsCisJCVBEM19JTiwgUEQzX09VVCwKKwkJUEQyX0lOLCBQRDJfT1VULAorCQlQRDFfSU4sIFBEMV9PVVQsCisJCVBEMF9JTiwgUEQwX09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDQiLCAweGZmZmUzOTkwLCAxNiwgNCkgeworCQlQRDE1TURfMDAwLCBQRDE1TURfMDAxLCBQRDE1TURfMDEwLCAwLAorCQlQRDE1TURfMTAwLCBQRDE1TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMTRNRF8wMDAsIFBEMTRNRF8wMDEsIFBEMTRNRF8wMTAsIDAsCisJCTAsIFBEMTRNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxM01EXzAwMCwgUEQxM01EXzAwMSwgUEQxM01EXzAxMCwgMCwKKwkJUEQxM01EXzEwMCwgUEQxM01EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDEyTURfMDAwLCBQRDEyTURfMDAxLCBQRDEyTURfMDEwLCAwLAorCQlQRDEyTURfMTAwLCBQRDEyTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1JMMyIsIDB4ZmZmZTM5OTIsIDE2LCA0KSB7CisJCVBEMTFNRF8wMDAsIFBEMTFNRF8wMDEsIFBEMTFNRF8wMTAsIDAsCisJCVBEMTFNRF8xMDAsIFBEMTFNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxME1EXzAwMCwgUEQxME1EXzAwMSwgUEQxME1EXzAxMCwgMCwKKwkJUEQxME1EXzEwMCwgUEQxME1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDlNRF8wMDAsIFBEOU1EXzAwMSwgUEQ5TURfMDEwLCAwLAorCQlQRDlNRF8xMDAsIFBEOU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDhNRF8wMDAsIFBEOE1EXzAwMSwgUEQ4TURfMDEwLCAwLAorCQlQRDhNRF8xMDAsIFBEOE1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDIiLCAweGZmZmUzOTk0LCAxNiwgNCkgeworCQlQRDdNRF8wMDAsIFBEN01EXzAwMSwgUEQ3TURfMDEwLCBQRDdNRF8wMTEsCisJCVBEN01EXzEwMCwgUEQ3TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBENk1EXzAwMCwgUEQ2TURfMDAxLCBQRDZNRF8wMTAsIFBENk1EXzAxMSwKKwkJUEQ2TURfMTAwLCBQRDZNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ1TURfMDAwLCBQRDVNRF8wMDEsIFBENU1EXzAxMCwgUEQ1TURfMDExLAorCQlQRDVNRF8xMDAsIFBENU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDRNRF8wMDAsIFBENE1EXzAwMSwgUEQ0TURfMDEwLCBQRDRNRF8wMTEsCisJCVBENE1EXzEwMCwgUEQ0TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1JMMSIsIDB4ZmZmZTM5OTYsIDE2LCA0KSB7CisJCVBEM01EXzAwMCwgUEQzTURfMDAxLCBQRDNNRF8wMTAsIFBEM01EXzAxMSwKKwkJUEQzTURfMTAwLCBQRDNNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQyTURfMDAwLCBQRDJNRF8wMDEsIFBEMk1EXzAxMCwgUEQyTURfMDExLAorCQlQRDJNRF8xMDAsIFBEMk1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDFNRF8wMDAsIFBEMU1EXzAwMSwgUEQxTURfMDEwLCBQRDFNRF8wMTEsCisJCVBEMU1EXzEwMCwgUEQxTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEME1EXzAwMCwgUEQwTURfMDAxLCBQRDBNRF8wMTAsIFBEME1EXzAxMSwKKwkJUEQwTURfMTAwLCBQRDBNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVJT1JMIiwgMHhmZmZlM2EwNiwgMTYsIDEpIHsKKwkJUEUxNV9JTiwgUEUxNV9PVVQsCisJCVBFMTRfSU4sIFBFMTRfT1VULAorCQlQRTEzX0lOLCBQRTEzX09VVCwKKwkJUEUxMl9JTiwgUEUxMl9PVVQsCisJCVBFMTFfSU4sIFBFMTFfT1VULAorCQlQRTEwX0lOLCBQRTEwX09VVCwKKwkJUEU5X0lOLCBQRTlfT1VULAorCQlQRThfSU4sIFBFOF9PVVQsCisJCVBFN19JTiwgUEU3X09VVCwKKwkJUEU2X0lOLCBQRTZfT1VULAorCQlQRTVfSU4sIFBFNV9PVVQsCisJCVBFNF9JTiwgUEU0X09VVCwKKwkJUEUzX0lOLCBQRTNfT1VULAorCQlQRTJfSU4sIFBFMl9PVVQsCisJCVBFMV9JTiwgUEUxX09VVCwKKwkJUEUwX0lOLCBQRTBfT1VUIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1JMNCIsIDB4ZmZmZTNhMTAsIDE2LCA0KSB7CisJCVBFMTVNRF8wMCwgUEUxNU1EXzAxLCAwLCBQRTE1TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUxNE1EXzAwLCBQRTE0TURfMDEsIDAsIFBFMTRNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTEzTURfMDAsIDAsIDAsIFBFMTNNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTEyTURfMDAsIDAsIDAsIFBFMTJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSTDMiLCAweGZmZmUzYTEyLCAxNiwgNCkgeworCQlQRTExTURfMDAwLCBQRTExTURfMDAxLCBQRTExTURfMDEwLCAwLAorCQlQRTExTURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFMTBNRF8wMDAsIFBFMTBNRF8wMDEsIFBFMTBNRF8wMTAsIDAsCisJCVBFMTBNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEU5TURfMDAsIFBFOU1EXzAxLCBQRTlNRF8xMCwgUEU5TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEU4TURfMDAsIFBFOE1EXzAxLCBQRThNRF8xMCwgUEU4TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUkwyIiwgMHhmZmZlM2ExNCwgMTYsIDQpIHsKKwkJUEU3TURfMDAwLCBQRTdNRF8wMDEsIFBFN01EXzAxMCwgUEU3TURfMDExLAorCQlQRTdNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEU2TURfMDAwLCBQRTZNRF8wMDEsIFBFNk1EXzAxMCwgUEU2TURfMDExLAorCQlQRTZNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEU1TURfMDAwLCBQRTVNRF8wMDEsIFBFNU1EXzAxMCwgUEU1TURfMDExLAorCQlQRTVNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEU0TURfMDAwLCBQRTRNRF8wMDEsIFBFNE1EXzAxMCwgUEU0TURfMDExLAorCQlQRTRNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUkwxIiwgMHhmZmZlM2ExNiwgMTYsIDQpIHsKKwkJUEUzTURfMDAsIFBFM01EXzAxLCAwLCBQRTNNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTJNRF8wMCwgUEUyTURfMDEsIDAsIFBFMk1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFMU1EXzAwLCBQRTFNRF8wMSwgUEUxTURfMTAsIFBFMU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFME1EXzAwMCwgUEUwTURfMDAxLCAwLCBQRTBNRF8wMTEsCisJCVBFME1EXzEwMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRklPUkgiLCAweGZmZmUzYTg0LCAxNiwgMSkgeworCQkwLCAwLAorCQlQRjMwX0lOLCBQRjMwX09VVCwKKwkJUEYyOV9JTiwgUEYyOV9PVVQsCisJCVBGMjhfSU4sIFBGMjhfT1VULAorCQlQRjI3X0lOLCBQRjI3X09VVCwKKwkJUEYyNl9JTiwgUEYyNl9PVVQsCisJCVBGMjVfSU4sIFBGMjVfT1VULAorCQlQRjI0X0lOLCBQRjI0X09VVCwKKwkJUEYyM19JTiwgUEYyM19PVVQsCisJCVBGMjJfSU4sIFBGMjJfT1VULAorCQlQRjIxX0lOLCBQRjIxX09VVCwKKwkJUEYyMF9JTiwgUEYyMF9PVVQsCisJCVBGMTlfSU4sIFBGMTlfT1VULAorCQlQRjE4X0lOLCBQRjE4X09VVCwKKwkJUEYxN19JTiwgUEYxN19PVVQsCisJCVBGMTZfSU4sIFBGMTZfT1VUIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGSU9STCIsIDB4ZmZmZTNhODYsIDE2LCAxKSB7CisJCVBGMTVfSU4sIFBGMTVfT1VULAorCQlQRjE0X0lOLCBQRjE0X09VVCwKKwkJUEYxM19JTiwgUEYxM19PVVQsCisJCVBGMTJfSU4sIFBGMTJfT1VULAorCQlQRjExX0lOLCBQRjExX09VVCwKKwkJUEYxMF9JTiwgUEYxMF9PVVQsCisJCVBGOV9JTiwgUEY5X09VVCwKKwkJUEY4X0lOLCBQRjhfT1VULAorCQlQRjdfSU4sIFBGN19PVVQsCisJCVBGNl9JTiwgUEY2X09VVCwKKwkJUEY1X0lOLCBQRjVfT1VULAorCQlQRjRfSU4sIFBGNF9PVVQsCisJCVBGM19JTiwgUEYzX09VVCwKKwkJUEYyX0lOLCBQRjJfT1VULAorCQlQRjFfSU4sIFBGMV9PVVQsCisJCVBGMF9JTiwgUEYwX09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDQiLCAweGZmZmUzYTg4LCAxNiwgNCkgeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMzBNRF8wLCBQRjMwTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjI5TURfMCwgUEYyOU1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyOE1EXzAsIFBGMjhNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1JIMyIsIDB4ZmZmZTNhOGEsIDE2LCA0KSB7CisJCVBGMjdNRF8wLCBQRjI3TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjI2TURfMCwgUEYyNk1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyNU1EXzAsIFBGMjVNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjRNRF8wLCBQRjI0TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDIiLCAweGZmZmUzYThjLCAxNiwgNCkgeworCQlQRjIzTURfMDAsIFBGMjNNRF8wMSwgUEYyM01EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjJNRF8wMCwgUEYyMk1EXzAxLCBQRjIyTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyMU1EXzAwLCBQRjIxTURfMDEsIFBGMjFNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjIwTURfMDAsIFBGMjBNRF8wMSwgUEYyME1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1JIMSIsIDB4ZmZmZTNhOGUsIDE2LCA0KSB7CisJCVBGMTlNRF8wMCwgUEYxOU1EXzAxLCBQRjE5TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxOE1EXzAwLCBQRjE4TURfMDEsIFBGMThNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjE3TURfMDAsIFBGMTdNRF8wMSwgUEYxN01EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMTZNRF8wMCwgUEYxNk1EXzAxLCBQRjE2TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkw0IiwgMHhmZmZlM2E5MCwgMTYsIDQpIHsKKwkJUEYxNU1EXzAwLCBQRjE1TURfMDEsIFBGMTVNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjE0TURfMDAsIFBGMTRNRF8wMSwgUEYxNE1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMTNNRF8wMCwgUEYxM01EXzAxLCBQRjEzTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxMk1EXzAwLCBQRjEyTURfMDEsIFBGMTJNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSTDMiLCAweGZmZmUzYTkyLCAxNiwgNCkgeworCQlQRjExTURfMDAsIFBGMTFNRF8wMSwgUEYxMU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMTBNRF8wMCwgUEYxME1EXzAxLCBQRjEwTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEY5TURfMDAsIFBGOU1EXzAxLCBQRjlNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjhNRF8wMCwgUEY4TURfMDEsIFBGOE1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1JMMiIsIDB4ZmZmZTNhOTQsIDE2LCA0KSB7CisJCVBGN01EXzAwLCBQRjdNRF8wMSwgUEY3TURfMTAsIFBGN01EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGNk1EXzAwLCBQRjZNRF8wMSwgUEY2TURfMTAsIFBGNk1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGNU1EXzAwLCBQRjVNRF8wMSwgUEY1TURfMTAsIFBGNU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGNE1EXzAwLCBQRjRNRF8wMSwgUEY0TURfMTAsIFBGNE1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1JMMSIsIDB4ZmZmZTNhOTYsIDE2LCA0KSB7CisJCVBGM01EXzAwLCBQRjNNRF8wMSwgUEYzTURfMTAsIFBGM01EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMk1EXzAwLCBQRjJNRF8wMSwgUEYyTURfMTAsIFBGMk1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMU1EXzAwLCBQRjFNRF8wMSwgUEYxTURfMTAsIFBGMU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGME1EXzAwLCBQRjBNRF8wMSwgUEYwTURfMTAsIFBGME1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBBRFJMIiwgMHhmZmZlMzgwMiwgMTYpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSTCIsIDB4ZmZmZTM4ODIsIDE2KSB7CisJCTAsIDAsIDAsIFBCMTJfREFUQSwKKwkJUEIxMV9EQVRBLCBQQjEwX0RBVEEsIFBCOV9EQVRBLCBQQjhfREFUQSwKKwkJUEI3X0RBVEEsIFBCNl9EQVRBLCBQQjVfREFUQSwgUEI0X0RBVEEsCisJCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQ0RSTCIsIDB4ZmZmZTM5MDIsIDE2KSB7CisJCTAsIFBDMTRfREFUQSwgUEMxM19EQVRBLCBQQzEyX0RBVEEsCisJCVBDMTFfREFUQSwgUEMxMF9EQVRBLCBQQzlfREFUQSwgUEM4X0RBVEEsCisJCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCQlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUkwiLCAweGZmZmUzOTgyLCAxNikgeworCQlQRDE1X0RBVEEsIFBEMTRfREFUQSwgUEQxM19EQVRBLCBQRDEyX0RBVEEsCisJCVBEMTFfREFUQSwgUEQxMF9EQVRBLCBQRDlfREFUQSwgUEQ4X0RBVEEsCisJCVBEN19EQVRBLCBQRDZfREFUQSwgUEQ1X0RBVEEsIFBENF9EQVRBLAorCQlQRDNfREFUQSwgUEQyX0RBVEEsIFBEMV9EQVRBLCBQRDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUkwiLCAweGZmZmUzYTAyLCAxNikgeworCQlQRTE1X0RBVEEsIFBFMTRfREFUQSwgUEUxM19EQVRBLCBQRTEyX0RBVEEsCisJCVBFMTFfREFUQSwgUEUxMF9EQVRBLCBQRTlfREFUQSwgUEU4X0RBVEEsCisJCVBFN19EQVRBLCBQRTZfREFUQSwgUEU1X0RBVEEsIFBFNF9EQVRBLAorCQlQRTNfREFUQSwgUEUyX0RBVEEsIFBFMV9EQVRBLCBQRTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUkgiLCAweGZmZmUzYTgwLCAxNikgeworCQkwLCBQRjMwX0RBVEEsIFBGMjlfREFUQSwgUEYyOF9EQVRBLAorCQlQRjI3X0RBVEEsIFBGMjZfREFUQSwgUEYyNV9EQVRBLCBQRjI0X0RBVEEsCisJCVBGMjNfREFUQSwgUEYyMl9EQVRBLCBQRjIxX0RBVEEsIFBGMjBfREFUQSwKKwkJUEYxOV9EQVRBLCBQRjE4X0RBVEEsIFBGMTdfREFUQSwgUEYxNl9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSTCIsIDB4ZmZmZTNhODIsIDE2KSB7CisJCVBGMTVfREFUQSwgUEYxNF9EQVRBLCBQRjEzX0RBVEEsIFBGMTJfREFUQSwKKwkJUEYxMV9EQVRBLCBQRjEwX0RBVEEsIFBGOV9EQVRBLCBQRjhfREFUQSwKKwkJUEY3X0RBVEEsIFBGNl9EQVRBLCBQRjVfREFUQSwgUEY0X0RBVEEsCisJCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3MjAzX3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzIwM19wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5ELCBGT1JDRV9JTiB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5ELCBGT1JDRV9PVVQgfSwKKwkubWFyayA9IHsgUElOTVVYX01BUktfQkVHSU4sIFBJTk1VWF9NQVJLX0VORCB9LAorCS5mdW5jdGlvbiA9IHsgUElOTVVYX0ZVTkNUSU9OX0JFR0lOLCBQSU5NVVhfRlVOQ1RJT05fRU5EIH0sCisKKwkuZmlyc3RfZ3BpbyA9IEdQSU9fUEE3LAorCS5sYXN0X2dwaW8gPSBHUElPX0ZOX0xDRF9EQVRBMCwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X3Bpbm11eF9zZXR1cCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9waW5tdXgoJnNoNzIwM19waW5tdXhfaW5mbyk7Cit9CithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IDUxMWRlNTUuLmUwN2M2OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtMjQsNCArMjQsOCBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKQk6PSBjbG9jay1zaDc3MTAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQk6PSBjbG9jay1zaDc3MTIubwogCisjIFBpbm11eCBzZXR1cAorcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkJOj0gcGlubXV4LXNoNzcyMC5vCisKIG9iai15CSs9ICQoY2xvY2steSkKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcGlubXV4LXNoNzcyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYwpAQCAtMCwwICsxLDEyNDIgQEAKKy8qCisgKiBTSDc3MjAgUGlubXV4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIwLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM2X0RBVEEsIFBUQzVfREFUQSwgUFRDNF9EQVRBLAorCVBUQzNfREFUQSwgUFRDMl9EQVRBLCBQVEMxX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTZfREFUQSwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBLAorCVBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBLAorCVBUSDZfREFUQSwgUFRINV9EQVRBLCBQVEg0X0RBVEEsCisJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBLAorCVBUSjZfREFUQSwgUFRKNV9EQVRBLCBQVEo0X0RBVEEsCisJUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBLAorCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSwKKwlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsIFBUTDNfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUUDRfREFUQSwgUFRQM19EQVRBLCBQVFAyX0RBVEEsIFBUUDFfREFUQSwgUFRQMF9EQVRBLAorCVBUUjdfREFUQSwgUFRSNl9EQVRBLCBQVFI1X0RBVEEsIFBUUjRfREFUQSwKKwlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTNF9EQVRBLCBQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEsCisJUFRUNF9EQVRBLCBQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEsCisJUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWNF9EQVRBLCBQVFYzX0RBVEEsIFBUVjJfREFUQSwgUFRWMV9EQVRBLCBQVFYwX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBUQTdfSU4sIFBUQTZfSU4sIFBUQTVfSU4sIFBUQTRfSU4sCisJUFRBM19JTiwgUFRBMl9JTiwgUFRBMV9JTiwgUFRBMF9JTiwKKwlQVEI3X0lOLCBQVEI2X0lOLCBQVEI1X0lOLCBQVEI0X0lOLAorCVBUQjNfSU4sIFBUQjJfSU4sIFBUQjFfSU4sIFBUQjBfSU4sCisJUFRDN19JTiwgUFRDNl9JTiwgUFRDNV9JTiwgUFRDNF9JTiwKKwlQVEMzX0lOLCBQVEMyX0lOLCBQVEMxX0lOLCBQVEMwX0lOLAorCVBURDdfSU4sIFBURDZfSU4sIFBURDVfSU4sIFBURDRfSU4sCisJUFREM19JTiwgUFREMl9JTiwgUFREMV9JTiwgUFREMF9JTiwKKwlQVEU2X0lOLCBQVEU1X0lOLCBQVEU0X0lOLAorCVBURTNfSU4sIFBURTJfSU4sIFBURTFfSU4sIFBURTBfSU4sCisJUFRGNl9JTiwgUFRGNV9JTiwgUFRGNF9JTiwKKwlQVEYzX0lOLCBQVEYyX0lOLCBQVEYxX0lOLCBQVEYwX0lOLAorCVBURzZfSU4sIFBURzVfSU4sIFBURzRfSU4sCisJUFRHM19JTiwgUFRHMl9JTiwgUFRHMV9JTiwgUFRHMF9JTiwKKwlQVEg2X0lOLCBQVEg1X0lOLCBQVEg0X0lOLAorCVBUSDNfSU4sIFBUSDJfSU4sIFBUSDFfSU4sIFBUSDBfSU4sCisJUFRKNl9JTiwgUFRKNV9JTiwgUFRKNF9JTiwKKwlQVEozX0lOLCBQVEoyX0lOLCBQVEoxX0lOLCBQVEowX0lOLAorCVBUSzNfSU4sIFBUSzJfSU4sIFBUSzFfSU4sIFBUSzBfSU4sCisJUFRMN19JTiwgUFRMNl9JTiwgUFRMNV9JTiwgUFRMNF9JTiwgUFRMM19JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRQNF9JTiwgUFRQM19JTiwgUFRQMl9JTiwgUFRQMV9JTiwgUFRQMF9JTiwKKwlQVFI3X0lOLCBQVFI2X0lOLCBQVFI1X0lOLCBQVFI0X0lOLAorCVBUUjNfSU4sIFBUUjJfSU4sIFBUUjFfSU4sIFBUUjBfSU4sCisJUFRTNF9JTiwgUFRTM19JTiwgUFRTMl9JTiwgUFRTMV9JTiwgUFRTMF9JTiwKKwlQVFQ0X0lOLCBQVFQzX0lOLCBQVFQyX0lOLCBQVFQxX0lOLCBQVFQwX0lOLAorCVBUVTRfSU4sIFBUVTNfSU4sIFBUVTJfSU4sIFBUVTFfSU4sIFBUVTBfSU4sCisJUFRWNF9JTiwgUFRWM19JTiwgUFRWMl9JTiwgUFRWMV9JTiwgUFRWMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEE3X0lOX1BVLCBQVEE2X0lOX1BVLCBQVEE1X0lOX1BVLCBQVEE0X0lOX1BVLAorCVBUQTNfSU5fUFUsIFBUQTJfSU5fUFUsIFBUQTFfSU5fUFUsIFBUQTBfSU5fUFUsCisJUFRCN19JTl9QVSwgUFRCNl9JTl9QVSwgUFRCNV9JTl9QVSwgUFRCNF9JTl9QVSwKKwlQVEIzX0lOX1BVLCBQVEIyX0lOX1BVLCBQVEIxX0lOX1BVLCBQVEIwX0lOX1BVLAorCVBUQzdfSU5fUFUsIFBUQzZfSU5fUFUsIFBUQzVfSU5fUFUsIFBUQzRfSU5fUFUsCisJUFRDM19JTl9QVSwgUFRDMl9JTl9QVSwgUFRDMV9JTl9QVSwgUFRDMF9JTl9QVSwKKwlQVEQ3X0lOX1BVLCBQVEQ2X0lOX1BVLCBQVEQ1X0lOX1BVLCBQVEQ0X0lOX1BVLAorCVBURDNfSU5fUFUsIFBURDJfSU5fUFUsIFBURDFfSU5fUFUsIFBURDBfSU5fUFUsCisJUFRFNF9JTl9QVSwgUFRFM19JTl9QVSwgUFRFMl9JTl9QVSwgUFRFMV9JTl9QVSwgUFRFMF9JTl9QVSwKKwlQVEYwX0lOX1BVLAorCVBURzZfSU5fUFUsIFBURzVfSU5fUFUsIFBURzRfSU5fUFUsCisJUFRHM19JTl9QVSwgUFRHMl9JTl9QVSwgUFRHMV9JTl9QVSwgUFRHMF9JTl9QVSwKKwlQVEg2X0lOX1BVLCBQVEg1X0lOX1BVLCBQVEg0X0lOX1BVLAorCVBUSDNfSU5fUFUsIFBUSDJfSU5fUFUsIFBUSDFfSU5fUFUsIFBUSDBfSU5fUFUsCisJUFRKNl9JTl9QVSwgUFRKNV9JTl9QVSwgUFRKNF9JTl9QVSwKKwlQVEozX0lOX1BVLCBQVEoyX0lOX1BVLCBQVEoxX0lOX1BVLCBQVEowX0lOX1BVLAorCVBUSzNfSU5fUFUsIFBUSzJfSU5fUFUsIFBUSzFfSU5fUFUsIFBUSzBfSU5fUFUsCisJUFRMN19JTl9QVSwgUFRMNl9JTl9QVSwgUFRMNV9JTl9QVSwgUFRMNF9JTl9QVSwgUFRMM19JTl9QVSwKKwlQVE03X0lOX1BVLCBQVE02X0lOX1BVLCBQVE01X0lOX1BVLCBQVE00X0lOX1BVLAorCVBUTTNfSU5fUFUsIFBUTTJfSU5fUFUsIFBUTTFfSU5fUFUsIFBUTTBfSU5fUFUsCisJUFRQNF9JTl9QVSwgUFRQM19JTl9QVSwgUFRQMl9JTl9QVSwgUFRQMV9JTl9QVSwgUFRQMF9JTl9QVSwKKwlQVFI3X0lOX1BVLCBQVFI2X0lOX1BVLCBQVFI1X0lOX1BVLCBQVFI0X0lOX1BVLAorCVBUUjNfSU5fUFUsIFBUUjJfSU5fUFUsIFBUUjFfSU5fUFUsIFBUUjBfSU5fUFUsCisJUFRTNF9JTl9QVSwgUFRTM19JTl9QVSwgUFRTMl9JTl9QVSwgUFRTMV9JTl9QVSwgUFRTMF9JTl9QVSwKKwlQVFQ0X0lOX1BVLCBQVFQzX0lOX1BVLCBQVFQyX0lOX1BVLCBQVFQxX0lOX1BVLCBQVFQwX0lOX1BVLAorCVBUVTRfSU5fUFUsIFBUVTNfSU5fUFUsIFBUVTJfSU5fUFUsIFBUVTFfSU5fUFUsIFBUVTBfSU5fUFUsCisJUFRWNF9JTl9QVSwgUFRWM19JTl9QVSwgUFRWMl9JTl9QVSwgUFRWMV9JTl9QVSwgUFRWMF9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTZfT1VULCBQVEE1X09VVCwgUFRBNF9PVVQsCisJUFRBM19PVVQsIFBUQTJfT1VULCBQVEExX09VVCwgUFRBMF9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDN19PVVQsIFBUQzZfT1VULCBQVEM1X09VVCwgUFRDNF9PVVQsCisJUFRDM19PVVQsIFBUQzJfT1VULCBQVEMxX09VVCwgUFRDMF9PVVQsCisJUFREN19PVVQsIFBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFNF9PVVQsIFBURTNfT1VULCBQVEUyX09VVCwgUFRFMV9PVVQsIFBURTBfT1VULAorCVBURjBfT1VULAorCVBURzZfT1VULCBQVEc1X09VVCwgUFRHNF9PVVQsCisJUFRHM19PVVQsIFBURzJfT1VULCBQVEcxX09VVCwgUFRHMF9PVVQsCisJUFRINl9PVVQsIFBUSDVfT1VULCBQVEg0X09VVCwKKwlQVEgzX09VVCwgUFRIMl9PVVQsIFBUSDFfT1VULCBQVEgwX09VVCwKKwlQVEo2X09VVCwgUFRKNV9PVVQsIFBUSjRfT1VULAorCVBUSjNfT1VULCBQVEoyX09VVCwgUFRKMV9PVVQsIFBUSjBfT1VULAorCVBUSzNfT1VULCBQVEsyX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULCBQVEwzX09VVCwKKwlQVE03X09VVCwgUFRNNl9PVVQsIFBUTTVfT1VULCBQVE00X09VVCwKKwlQVE0zX09VVCwgUFRNMl9PVVQsIFBUTTFfT1VULCBQVE0wX09VVCwKKwlQVFA0X09VVCwgUFRQM19PVVQsIFBUUDJfT1VULCBQVFAxX09VVCwgUFRQMF9PVVQsCisJUFRSN19PVVQsIFBUUjZfT1VULCBQVFI1X09VVCwgUFRSNF9PVVQsCisJUFRSM19PVVQsIFBUUjJfT1VULCBQVFIxX09VVCwgUFRSMF9PVVQsCisJUFRTNF9PVVQsIFBUUzNfT1VULCBQVFMyX09VVCwgUFRTMV9PVVQsIFBUUzBfT1VULAorCVBUVDRfT1VULCBQVFQzX09VVCwgUFRUMl9PVVQsIFBUVDFfT1VULCBQVFQwX09VVCwKKwlQVFU0X09VVCwgUFRVM19PVVQsIFBUVTJfT1VULCBQVFUxX09VVCwgUFRVMF9PVVQsCisJUFRWNF9PVVQsIFBUVjNfT1VULCBQVFYyX09VVCwgUFRWMV9PVVQsIFBUVjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBUQTdfRk4sIFBUQTZfRk4sIFBUQTVfRk4sIFBUQTRfRk4sCisJUFRBM19GTiwgUFRBMl9GTiwgUFRBMV9GTiwgUFRBMF9GTiwKKwlQVEI3X0ZOLCBQVEI2X0ZOLCBQVEI1X0ZOLCBQVEI0X0ZOLAorCVBUQjNfRk4sIFBUQjJfRk4sIFBUQjFfRk4sIFBUQjBfRk4sCisJUFRDN19GTiwgUFRDNl9GTiwgUFRDNV9GTiwgUFRDNF9GTiwKKwlQVEMzX0ZOLCBQVEMyX0ZOLCBQVEMxX0ZOLCBQVEMwX0ZOLAorCVBURDdfRk4sIFBURDZfRk4sIFBURDVfRk4sIFBURDRfRk4sCisJUFREM19GTiwgUFREMl9GTiwgUFREMV9GTiwgUFREMF9GTiwKKwlQVEU2X0ZOLCBQVEU1X0ZOLCBQVEU0X0ZOLAorCVBURTNfRk4sIFBURTJfRk4sIFBURTFfRk4sIFBURTBfRk4sCisJUFRGNl9GTiwgUFRGNV9GTiwgUFRGNF9GTiwKKwlQVEYzX0ZOLCBQVEYyX0ZOLCBQVEYxX0ZOLCBQVEYwX0ZOLAorCVBURzZfRk4sIFBURzVfRk4sIFBURzRfRk4sCisJUFRHM19GTiwgUFRHMl9GTiwgUFRHMV9GTiwgUFRHMF9GTiwKKwlQVEg2X0ZOLCBQVEg1X0ZOLCBQVEg0X0ZOLAorCVBUSDNfRk4sIFBUSDJfRk4sIFBUSDFfRk4sIFBUSDBfRk4sCisJUFRKNl9GTiwgUFRKNV9GTiwgUFRKNF9GTiwKKwlQVEozX0ZOLCBQVEoyX0ZOLCBQVEoxX0ZOLCBQVEowX0ZOLAorCVBUSzNfRk4sIFBUSzJfRk4sIFBUSzFfRk4sIFBUSzBfRk4sCisJUFRMN19GTiwgUFRMNl9GTiwgUFRMNV9GTiwgUFRMNF9GTiwgUFRMM19GTiwKKwlQVE03X0ZOLCBQVE02X0ZOLCBQVE01X0ZOLCBQVE00X0ZOLAorCVBUTTNfRk4sIFBUTTJfRk4sIFBUTTFfRk4sIFBUTTBfRk4sCisJUFRQNF9GTiwgUFRQM19GTiwgUFRQMl9GTiwgUFRQMV9GTiwgUFRQMF9GTiwKKwlQVFI3X0ZOLCBQVFI2X0ZOLCBQVFI1X0ZOLCBQVFI0X0ZOLAorCVBUUjNfRk4sIFBUUjJfRk4sIFBUUjFfRk4sIFBUUjBfRk4sCisJUFRTNF9GTiwgUFRTM19GTiwgUFRTMl9GTiwgUFRTMV9GTiwgUFRTMF9GTiwKKwlQVFQ0X0ZOLCBQVFQzX0ZOLCBQVFQyX0ZOLCBQVFQxX0ZOLCBQVFQwX0ZOLAorCVBUVTRfRk4sIFBUVTNfRk4sIFBUVTJfRk4sIFBUVTFfRk4sIFBUVTBfRk4sCisJUFRWNF9GTiwgUFRWM19GTiwgUFRWMl9GTiwgUFRWMV9GTiwgUFRWMF9GTiwKKworCVBTRUxBXzFfMF8wMCwgUFNFTEFfMV8wXzAxLCBQU0VMQV8xXzBfMTAsCisJUFNFTEFfM18yXzAwLCBQU0VMQV8zXzJfMDEsIFBTRUxBXzNfMl8xMCwgUFNFTEFfM18yXzExLAorCVBTRUxBXzVfNF8wMCwgUFNFTEFfNV80XzAxLCBQU0VMQV81XzRfMTAsIFBTRUxBXzVfNF8xMSwKKwlQU0VMQV83XzZfMDAsIFBTRUxBXzdfNl8wMSwgUFNFTEFfN182XzEwLAorCVBTRUxBXzlfOF8wMCwgUFNFTEFfOV84XzAxLCBQU0VMQV85XzhfMTAsCisJUFNFTEFfMTFfMTBfMDAsIFBTRUxBXzExXzEwXzAxLCBQU0VMQV8xMV8xMF8xMCwKKwlQU0VMQV8xM18xMl8wMCwgUFNFTEFfMTNfMTJfMTAsCisJUFNFTEFfMTVfMTRfMDAsIFBTRUxBXzE1XzE0XzEwLAorCVBTRUxCXzlfOF8wMCwgUFNFTEJfOV84XzExLAorCVBTRUxCXzExXzEwXzAwLCBQU0VMQl8xMV8xMF8wMSwgUFNFTEJfMTFfMTBfMTAsIFBTRUxCXzExXzEwXzExLAorCVBTRUxCXzEzXzEyXzAwLCBQU0VMQl8xM18xMl8wMSwgUFNFTEJfMTNfMTJfMTAsIFBTRUxCXzEzXzEyXzExLAorCVBTRUxCXzE1XzE0XzAwLCBQU0VMQl8xNV8xNF8xMSwKKwlQU0VMQ185XzhfMDAsIFBTRUxDXzlfOF8xMCwKKwlQU0VMQ18xMV8xMF8wMCwgUFNFTENfMTFfMTBfMTAsCisJUFNFTENfMTNfMTJfMDAsCVBTRUxDXzEzXzEyXzAxLAlQU0VMQ18xM18xMl8xMCwKKwlQU0VMQ18xNV8xNF8wMCwJUFNFTENfMTVfMTRfMDEsCVBTRUxDXzE1XzE0XzEwLAorCVBTRUxEXzFfMF8wMCwgUFNFTERfMV8wXzEwLAorCVBTRUxEXzExXzEwXzAwLAlQU0VMRF8xMV8xMF8wMSwKKwlQU0VMRF8xNV8xNF8wMCwJUFNFTERfMTVfMTRfMDEsCVBTRUxEXzE1XzE0XzEwLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlEMzFfTUFSSywgRDMwX01BUkssIEQyOV9NQVJLLCBEMjhfTUFSSywKKwlEMjdfTUFSSywgRDI2X01BUkssIEQyNV9NQVJLLCBEMjRfTUFSSywKKwlEMjNfTUFSSywgRDIyX01BUkssIEQyMV9NQVJLLCBEMjBfTUFSSywKKwlEMTlfTUFSSywgRDE4X01BUkssIEQxN19NQVJLLCBEMTZfTUFSSywKKwlJT0lTMTZfTUFSSywgUkFTX01BUkssIENBU19NQVJLLCBDS0VfTUFSSywKKwlDUzVCX0NFMUFfTUFSSywgQ1M2Ql9DRTFCX01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIEEyMF9NQVJLLCBBMTlfTUFSSywgQTBfTUFSSywKKwlSRUZPVVRfTUFSSywgSVJRT1VUX01BUkssCisJTENEX0RBVEExNV9NQVJLLCBMQ0RfREFUQTE0X01BUkssCisJTENEX0RBVEExM19NQVJLLCBMQ0RfREFUQTEyX01BUkssCisJTENEX0RBVEExMV9NQVJLLCBMQ0RfREFUQTEwX01BUkssCisJTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywKKwlMQ0RfREFUQTVfTUFSSywgTENEX0RBVEE0X01BUkssCisJTENEX0RBVEEzX01BUkssIExDRF9EQVRBMl9NQVJLLAorCUxDRF9EQVRBMV9NQVJLLCBMQ0RfREFUQTBfTUFSSywKKwlMQ0RfTV9ESVNQX01BUkssCisJTENEX0NMMV9NQVJLLCBMQ0RfQ0wyX01BUkssCisJTENEX0RPTl9NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX1ZFUFdDX01BUkssIExDRF9WQ1BXQ19NQVJLLAorCUFGRV9SWElOX01BUkssIEFGRV9SREVUX01BUkssCisJQUZFX0ZTX01BUkssIEFGRV9UWE9VVF9NQVJLLAorCUFGRV9TQ0xLX01BUkssIEFGRV9STFlDTlRfTUFSSywKKwlBRkVfSEMxX01BUkssCisJSUlDX1NDTF9NQVJLLCBJSUNfU0RBX01BUkssCisJREExX01BUkssIERBMF9NQVJLLAorCUFOM19NQVJLLCBBTjJfTUFSSywgQU4xX01BUkssIEFOMF9NQVJLLCBBRFRSR19NQVJLLAorCVVTQjFEX1JDVl9NQVJLLCBVU0IxRF9UWFNFMF9NQVJLLAorCVVTQjFEX1RYRFBMU19NQVJLLCBVU0IxRF9ETU5TX01BUkssCisJVVNCMURfRFBMU19NQVJLLCBVU0IxRF9TUEVFRF9NQVJLLAorCVVTQjFEX1RYRU5MX01BUkssCisJVVNCMl9QV1JfRU5fTUFSSywgVVNCMV9QV1JfRU5fVVNCRl9VUExVUF9NQVJLLCBVU0IxRF9TVVNQRU5EX01BUkssCisJSVJRNV9NQVJLLCBJUlE0X01BUkssCisJSVJRM19JUkwzX01BUkssIElSUTJfSVJMMl9NQVJLLAorCUlSUTFfSVJMMV9NQVJLLCBJUlEwX0lSTDBfTUFSSywKKwlQQ0NfUkVHX01BUkssIFBDQ19EUlZfTUFSSywKKwlQQ0NfQlZEMl9NQVJLLCBQQ0NfQlZEMV9NQVJLLAorCVBDQ19DRDJfTUFSSywgUENDX0NEMV9NQVJLLAorCVBDQ19SRVNFVF9NQVJLLCBQQ0NfUkRZX01BUkssCisJUENDX1ZTMl9NQVJLLCBQQ0NfVlMxX01BUkssCisJQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywgQVVEQVRBMF9NQVJLLAorCUFVRENLX01BUkssIEFVRFNZTkNfTUFSSywgQVNFQlJLQUtfTUFSSywgVFJTVF9NQVJLLAorCVRNU19NQVJLLCBURE9fTUFSSywgVERJX01BUkssIFRDS19NQVJLLAorCURBQ0sxX01BUkssIERSRVExX01BUkssIERBQ0swX01BUkssIERSRVEwX01BUkssCisJVEVORDFfTUFSSywgVEVORDBfTUFSSywKKwlTSU9GMF9TWU5DX01BUkssIFNJT0YwX01DTEtfTUFSSywKKwlTSU9GMF9UWERfTUFSSywgU0lPRjBfUlhEX01BUkssCisJU0lPRjBfU0NLX01BUkssCisJU0lPRjFfU1lOQ19NQVJLLCBTSU9GMV9NQ0xLX01BUkssCisJU0lPRjFfVFhEX01BUkssIFNJT0YxX1JYRF9NQVJLLAorCVNJT0YxX1NDS19NQVJLLAorCVNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9SWERfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywgU0NJRjBfQ1RTX01BUkssIFNDSUYwX1NDS19NQVJLLAorCVNDSUYxX1RYRF9NQVJLLCBTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9SVFNfTUFSSywgU0NJRjFfQ1RTX01BUkssIFNDSUYxX1NDS19NQVJLLAorCVRQVV9UTzFfTUFSSywgVFBVX1RPMF9NQVJLLAorCVRQVV9USTNCX01BUkssIFRQVV9USTNBX01BUkssCisJVFBVX1RJMkJfTUFSSywgVFBVX1RJMkFfTUFSSywKKwlUUFVfVE8zX01BUkssIFRQVV9UTzJfTUFSSywKKwlTSU1fRF9NQVJLLCBTSU1fQ0xLX01BUkssIFNJTV9SU1RfTUFSSywKKwlNTUNfREFUX01BUkssIE1NQ19DTURfTUFSSywKKwlNTUNfQ0xLX01BUkssIE1NQ19WRERPTl9NQVJLLAorCU1NQ19PRE1PRF9NQVJLLAorCVNUQVRVUzBfTUFSSywgU1RBVFVTMV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisJLyogUFRBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfT1VULCBQVEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfT1VULCBQVEE2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE1X0RBVEEsIFBUQTVfSU4sIFBUQTVfT1VULCBQVEE1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE0X0RBVEEsIFBUQTRfSU4sIFBUQTRfT1VULCBQVEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEzX0RBVEEsIFBUQTNfSU4sIFBUQTNfT1VULCBQVEEzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfT1VULCBQVEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEExX0RBVEEsIFBUQTFfSU4sIFBUQTFfT1VULCBQVEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEwX0RBVEEsIFBUQTBfSU4sIFBUQTBfT1VULCBQVEEwX0lOX1BVKSwKKworCS8qIFBUQiBHUElPICovCisJUElOTVVYX0RBVEEoUFRCN19EQVRBLCBQVEI3X0lOLCBQVEI3X09VVCwgUFRCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNl9EQVRBLCBQVEI2X0lOLCBQVEI2X09VVCwgUFRCNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNV9EQVRBLCBQVEI1X0lOLCBQVEI1X09VVCwgUFRCNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNF9EQVRBLCBQVEI0X0lOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCM19EQVRBLCBQVEIzX0lOLCBQVEIzX09VVCwgUFRCM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMl9EQVRBLCBQVEIyX0lOLCBQVEIyX09VVCwgUFRCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMV9EQVRBLCBQVEIxX0lOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMF9EQVRBLCBQVEIwX0lOLCBQVEIwX09VVCwgUFRCMF9JTl9QVSksCisKKwkvKiBQVEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQzdfREFUQSwgUFRDN19JTiwgUFRDN19PVVQsIFBUQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzZfREFUQSwgUFRDNl9JTiwgUFRDNl9PVVQsIFBUQzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzVfREFUQSwgUFRDNV9JTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQsIFBUQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQsIFBUQzNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzFfREFUQSwgUFRDMV9JTiwgUFRDMV9PVVQsIFBUQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQsIFBUQzBfSU5fUFUpLAorCisJLyogUFREIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEQ3X0RBVEEsIFBURDdfSU4sIFBURDdfT1VULCBQVEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfSU4sIFBURDZfT1VULCBQVEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfSU4sIFBURDVfT1VULCBQVEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfSU4sIFBURDRfT1VULCBQVEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfSU4sIFBURDNfT1VULCBQVEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfSU4sIFBURDJfT1VULCBQVEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfSU4sIFBURDFfT1VULCBQVEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfSU4sIFBURDBfT1VULCBQVEQwX0lOX1BVKSwKKworCS8qIFBURSBHUElPICovCisJUElOTVVYX0RBVEEoUFRFNl9EQVRBLCBQVEU2X0lOKSwKKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfSU4pLAorCVBJTk1VWF9EQVRBKFBURTRfREFUQSwgUFRFNF9JTiwgUFRFNF9PVVQsIFBURTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTNfREFUQSwgUFRFM19JTiwgUFRFM19PVVQsIFBURTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTJfREFUQSwgUFRFMl9JTiwgUFRFMl9PVVQsIFBURTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTFfREFUQSwgUFRFMV9JTiwgUFRFMV9PVVQsIFBURTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTBfREFUQSwgUFRFMF9JTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUpLAorCisJLyogUFRGIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEY2X0RBVEEsIFBURjZfSU4pLAorCVBJTk1VWF9EQVRBKFBURjVfREFUQSwgUFRGNV9JTiksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X0lOKSwKKwlQSU5NVVhfREFUQShQVEYzX0RBVEEsIFBURjNfSU4pLAorCVBJTk1VWF9EQVRBKFBURjJfREFUQSwgUFRGMl9JTiksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOKSwKKwlQSU5NVVhfREFUQShQVEYwX0RBVEEsIFBURjBfSU4sIFBURjBfT1VULCBQVEYwX0lOX1BVKSwKKworCS8qIFBURyBHUElPICovCisJUElOTVVYX0RBVEEoUFRHNl9EQVRBLCBQVEc2X0lOLCBQVEc2X09VVCwgUFRHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNV9EQVRBLCBQVEc1X0lOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNF9EQVRBLCBQVEc0X0lOLCBQVEc0X09VVCwgUFRHNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHM19EQVRBLCBQVEczX0lOLCBQVEczX09VVCwgUFRHM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMl9EQVRBLCBQVEcyX0lOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMV9EQVRBLCBQVEcxX0lOLCBQVEcxX09VVCwgUFRHMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMF9EQVRBLCBQVEcwX0lOLCBQVEcwX09VVCwgUFRHMF9JTl9QVSksCisKKwkvKiBQVEggR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSDZfREFUQSwgUFRINl9JTiwgUFRINl9PVVQsIFBUSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDVfREFUQSwgUFRINV9JTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDRfREFUQSwgUFRINF9JTiwgUFRINF9PVVQsIFBUSDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDNfREFUQSwgUFRIM19JTiwgUFRIM19PVVQsIFBUSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDJfREFUQSwgUFRIMl9JTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDFfREFUQSwgUFRIMV9JTiwgUFRIMV9PVVQsIFBUSDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDBfREFUQSwgUFRIMF9JTiwgUFRIMF9PVVQsIFBUSDBfSU5fUFUpLAorCisJLyogUFRKIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEo2X0RBVEEsIFBUSjZfSU4sIFBUSjZfT1VULCBQVEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo1X0RBVEEsIFBUSjVfSU4sIFBUSjVfT1VULCBQVEo1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo0X0RBVEEsIFBUSjRfSU4sIFBUSjRfT1VULCBQVEo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEozX0RBVEEsIFBUSjNfSU4sIFBUSjNfT1VULCBQVEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoyX0RBVEEsIFBUSjJfSU4sIFBUSjJfT1VULCBQVEoyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoxX0RBVEEsIFBUSjFfSU4sIFBUSjFfT1VULCBQVEoxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEowX0RBVEEsIFBUSjBfSU4sIFBUSjBfT1VULCBQVEowX0lOX1BVKSwKKworCS8qIFBUSyBHUElPICovCisJUElOTVVYX0RBVEEoUFRLM19EQVRBLCBQVEszX0lOLCBQVEszX09VVCwgUFRLM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMl9EQVRBLCBQVEsyX0lOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMV9EQVRBLCBQVEsxX0lOLCBQVEsxX09VVCwgUFRLMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMF9EQVRBLCBQVEswX0lOLCBQVEswX09VVCwgUFRLMF9JTl9QVSksCisKKwkvKiBQVEwgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTDdfREFUQSwgUFRMN19JTiwgUFRMN19PVVQsIFBUTDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDZfREFUQSwgUFRMNl9JTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDVfREFUQSwgUFRMNV9JTiwgUFRMNV9PVVQsIFBUTDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDRfREFUQSwgUFRMNF9JTiwgUFRMNF9PVVQsIFBUTDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDNfREFUQSwgUFRMM19JTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUpLAorCisJLyogUFRNIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVE03X0RBVEEsIFBUTTdfSU4sIFBUTTdfT1VULCBQVE03X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE02X0RBVEEsIFBUTTZfSU4sIFBUTTZfT1VULCBQVE02X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE01X0RBVEEsIFBUTTVfSU4sIFBUTTVfT1VULCBQVE01X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE00X0RBVEEsIFBUTTRfSU4sIFBUTTRfT1VULCBQVE00X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0zX0RBVEEsIFBUTTNfSU4sIFBUTTNfT1VULCBQVE0zX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0yX0RBVEEsIFBUTTJfSU4sIFBUTTJfT1VULCBQVE0yX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0xX0RBVEEsIFBUTTFfSU4sIFBUTTFfT1VULCBQVE0xX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0wX0RBVEEsIFBUTTBfSU4sIFBUTTBfT1VULCBQVE0wX0lOX1BVKSwKKworCS8qIFBUUCBHUElPICovCisJUElOTVVYX0RBVEEoUFRQNF9EQVRBLCBQVFA0X0lOLCBQVFA0X09VVCwgUFRQNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQM19EQVRBLCBQVFAzX0lOLCBQVFAzX09VVCwgUFRQM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMl9EQVRBLCBQVFAyX0lOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMV9EQVRBLCBQVFAxX0lOLCBQVFAxX09VVCwgUFRQMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMF9EQVRBLCBQVFAwX0lOLCBQVFAwX09VVCwgUFRQMF9JTl9QVSksCisKKwkvKiBQVFIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUUjdfREFUQSwgUFRSN19JTiwgUFRSN19PVVQsIFBUUjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjZfREFUQSwgUFRSNl9JTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjVfREFUQSwgUFRSNV9JTiwgUFRSNV9PVVQsIFBUUjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjRfREFUQSwgUFRSNF9JTiwgUFRSNF9PVVQsIFBUUjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjNfREFUQSwgUFRSM19JTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9PVVQsIFBUUjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjFfREFUQSwgUFRSMV9JTiwgUFRSMV9PVVQsIFBUUjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjBfREFUQSwgUFRSMF9JTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUpLAorCisJLyogUFRTIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFM0X0RBVEEsIFBUUzRfSU4sIFBUUzRfT1VULCBQVFM0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMzX0RBVEEsIFBUUzNfSU4sIFBUUzNfT1VULCBQVFMzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMyX0RBVEEsIFBUUzJfSU4sIFBUUzJfT1VULCBQVFMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMxX0RBVEEsIFBUUzFfSU4sIFBUUzFfT1VULCBQVFMxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfSU4sIFBUUzBfT1VULCBQVFMwX0lOX1BVKSwKKworCS8qIFBUVCBHUElPICovCisJUElOTVVYX0RBVEEoUFRUNF9EQVRBLCBQVFQ0X0lOLCBQVFQ0X09VVCwgUFRUNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUM19EQVRBLCBQVFQzX0lOLCBQVFQzX09VVCwgUFRUM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMl9EQVRBLCBQVFQyX0lOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMV9EQVRBLCBQVFQxX0lOLCBQVFQxX09VVCwgUFRUMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX0lOLCBQVFQwX09VVCwgUFRUMF9JTl9QVSksCisKKwkvKiBQVFUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVTRfREFUQSwgUFRVNF9JTiwgUFRVNF9PVVQsIFBUVTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTNfREFUQSwgUFRVM19JTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTJfREFUQSwgUFRVMl9JTiwgUFRVMl9PVVQsIFBUVTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTFfREFUQSwgUFRVMV9JTiwgUFRVMV9PVVQsIFBUVTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9JTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUpLAorCisJLyogUFRWIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFY0X0RBVEEsIFBUVjRfSU4sIFBUVjRfT1VULCBQVFY0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYzX0RBVEEsIFBUVjNfSU4sIFBUVjNfT1VULCBQVFYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYyX0RBVEEsIFBUVjJfSU4sIFBUVjJfT1VULCBQVFYyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYxX0RBVEEsIFBUVjFfSU4sIFBUVjFfT1VULCBQVFYxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYwX0RBVEEsIFBUVjBfSU4sIFBUVjBfT1VULCBQVFYwX0lOX1BVKSwKKworCS8qIFBUQSBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQVEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUFRBM19GTiksCisJUElOTVVYX0RBVEEoRDE4X01BUkssIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQVEExX0ZOKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUFRBMF9GTiksCisKKwkvKiBQVEIgRk4gKi8KKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUFRCN19GTiksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBUQjZfRk4pLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQVEI1X0ZOKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUFRCNF9GTiksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBUQjNfRk4pLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShEMjVfTUFSSywgUFRCMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBUQjBfRk4pLAorCisJLyogUFRDIEZOICovCisJUElOTVVYX0RBVEEoTENEX0RBVEE3X01BUkssIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBNl9NQVJLLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTVfTUFSSywgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEE0X01BUkssIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBM19NQVJLLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTJfTUFSSywgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExX01BUkssIFBUQzFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMF9NQVJLLCBQVEMwX0ZOKSwKKworCS8qIFBURCBGTiAqLworCVBJTk1VWF9EQVRBKExDRF9EQVRBMTVfTUFSSywgUFREN19GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExNF9NQVJLLCBQVEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEzX01BUkssIFBURDVfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTJfTUFSSywgUFRENF9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExMV9NQVJLLCBQVEQzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEwX01BUkssIFBURDJfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOV9NQVJLLCBQVEQxX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQThfTUFSSywgUFREMF9GTiksCisKKwkvKiBQVEUgRk4gKi8KKwlQSU5NVVhfREFUQShJSUNfU0NMX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNl9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JYSU5fTUFSSywgUFNFTEJfOV84XzExLCBQVEU2X0ZOKSwKKwlQSU5NVVhfREFUQShJSUNfU0RBX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNV9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JERVRfTUFSSywgUFNFTEJfOV84XzExLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfTV9ESVNQX01BUkssIFBURTRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9DTDFfTUFSSywgUFRFM19GTiksCisJUElOTVVYX0RBVEEoTENEX0NMMl9NQVJLLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfRE9OX01BUkssIFBURTFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9GTE1fTUFSSywgUFRFMF9GTiksCisKKwkvKiBQVEYgRk4gKi8KKwlQSU5NVVhfREFUQShEQTFfTUFSSywgUFRGNl9GTiksCisJUElOTVVYX0RBVEEoREEwX01BUkssIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKEFOM19NQVJLLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShBTjJfTUFSSywgUFRGM19GTiksCisJUElOTVVYX0RBVEEoQU4xX01BUkssIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKEFOMF9NQVJLLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShBRFRSR19NQVJLLCBQVEYwX0ZOKSwKKworCS8qIFBURyBGTiAqLworCVBJTk1VWF9EQVRBKFVTQjFEX1JDVl9NQVJLLCBQU0VMQV8zXzJfMDAsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9GU19NQVJLLCBQU0VMQV8zXzJfMDEsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19SRUdfTUFSSywgUFNFTEFfM18yXzEwLCBQVEc2X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIFBTRUxBXzNfMl8xMSwgUFRHNl9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhTRTBfTUFSSywgUFNFTEFfNV80XzAwLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShBRkVfVFhPVVRfTUFSSywgUFNFTEFfNV80XzAxLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfRFJWX01BUkssIFBTRUxBXzVfNF8xMCwgUFRHNV9GTiksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0VMQV81XzRfMTEsIFBURzVfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX1RYRFBMU19NQVJLLCBQU0VMQV83XzZfMDAsIFBURzRfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9TQ0xLX01BUkssIFBTRUxBXzdfNl8wMSwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBTRUxBXzdfNl8xMCwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfRE1OU19NQVJLLCBQU0VMQV85XzhfMDAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9STFlDTlRfTUFSSywgUFNFTEFfOV84XzAxLCBQVEczX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfQlZEMl9NQVJLLCBQU0VMQV85XzhfMTAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX0RQTFNfTUFSSywgUFNFTEFfMTFfMTBfMDAsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9IQzFfTUFSSywgUFNFTEFfMTFfMTBfMDEsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19CVkQxX01BUkssIFBTRUxBXzExXzEwXzEwLCBQVEcyX0ZOKSwKKwlQSU5NVVhfREFUQShVU0IxRF9TUEVFRF9NQVJLLCBQU0VMQV8xM18xMl8wMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoUENDX0NEMl9NQVJLLCBQU0VMQV8xM18xMl8xMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhFTkxfTUFSSywgUFNFTEFfMTVfMTRfMDAsIFBURzBfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19DRDFfTUFSSywgUFNFTEFfMTVfMTRfMTAsIFBURzBfRk4pLAorCisJLyogUFRIIEZOICovCisJUElOTVVYX0RBVEEoUkFTX01BUkssIFBUSDZfRk4pLAorCVBJTk1VWF9EQVRBKENBU19NQVJLLCBQVEg1X0ZOKSwKKwlQSU5NVVhfREFUQShDS0VfTUFSSywgUFRINF9GTiksCisJUElOTVVYX0RBVEEoU1RBVFVTMV9NQVJLLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBUSDJfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjJfUFdSX0VOX01BUkssIFBUSDFfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSywgUFRIMF9GTiksCisKKwkvKiBQVEogRk4gKi8KKwlQSU5NVVhfREFUQShBVURDS19NQVJLLCBQVEo2X0ZOKSwKKwlQSU5NVVhfREFUQShBU0VCUktBS19NQVJLLCBQVEo1X0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEzX01BUkssIFBUSjRfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTJfTUFSSywgUFRKM19GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMV9NQVJLLCBQVEoyX0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEwX01BUkssIFBUSjFfRk4pLAorCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgUFRKMF9GTiksCisKKwkvKiBQVEsgRk4gKi8KKwlQSU5NVVhfREFUQShQQ0NfUkVTRVRfTUFSSywgUFRLM19GTiksCisJUElOTVVYX0RBVEEoUENDX1JEWV9NQVJLLCBQVEsyX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfVlMyX01BUkssIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19WUzFfTUFSSywgUFRLMF9GTiksCisKKwkvKiBQVEwgRk4gKi8KKwlQSU5NVVhfREFUQShUUlNUX01BUkssIFBUTDdfRk4pLAorCVBJTk1VWF9EQVRBKFRNU19NQVJLLCBQVEw2X0ZOKSwKKwlQSU5NVVhfREFUQShURE9fTUFSSywgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoVERJX01BUkssIFBUTDRfRk4pLAorCVBJTk1VWF9EQVRBKFRDS19NQVJLLCBQVEwzX0ZOKSwKKworCS8qIFBUTSBGTiAqLworCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBUTTdfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIFBUTTZfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUTTVfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0swX01BUkssIFBUTTRfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQxX01BUkssIFBUTTNfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQwX01BUkssIFBUTTJfRk4pLAorCVBJTk1VWF9EQVRBKENTNUJfQ0UxQV9NQVJLLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShDUzZCX0NFMUJfTUFSSywgUFRNMF9GTiksCisKKwkvKiBQVFAgRk4gKi8KKwlQSU5NVVhfREFUQShVU0IxRF9TVVNQRU5EX01BUkssIFBTRUxBXzFfMF8wMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoUkVGT1VUX01BUkssIFBTRUxBXzFfMF8wMSwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRT1VUX01BUkssIFBTRUxBXzFfMF8xMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRM19JUkwzX01BUkssIFBUUDNfRk4pLAorCVBJTk1VWF9EQVRBKElSUTJfSVJMMl9NQVJLLCBQVFAyX0ZOKSwKKwlQSU5NVVhfREFUQShJUlExX0lSTDFfTUFSSywgUFRQMV9GTiksCisJUElOTVVYX0RBVEEoSVJRMF9JUkwwX01BUkssIFBUUDBfRk4pLAorCisJLyogUFRSIEZOICovCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBUUjdfRk4pLAorCVBJTk1VWF9EQVRBKEEyNF9NQVJLLCBQVFI2X0ZOKSwKKwlQSU5NVVhfREFUQShBMjNfTUFSSywgUFRSNV9GTiksCisJUElOTVVYX0RBVEEoQTIyX01BUkssIFBUUjRfRk4pLAorCVBJTk1VWF9EQVRBKEEyMV9NQVJLLCBQVFIzX0ZOKSwKKwlQSU5NVVhfREFUQShBMjBfTUFSSywgUFRSMl9GTiksCisJUElOTVVYX0RBVEEoQTE5X01BUkssIFBUUjFfRk4pLAorCVBJTk1VWF9EQVRBKEEwX01BUkssIFBUUjBfRk4pLAorCisJLyogUFRTIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjBfU1lOQ19NQVJLLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9NQ0xLX01BUkssIFBUUzNfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0YwX1RYRF9NQVJLLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9SWERfTUFSSywgUFRTMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjBfU0NLX01BUkssIFBUUzBfRk4pLAorCisJLyogUFRUIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjBfQ1RTX01BUkssIFBTRUxCXzE1XzE0XzAwLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVE8xX01BUkssIFBTRUxCXzE1XzE0XzExLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SVFNfTUFSSywgUFNFTEJfMTVfMTRfMDAsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzBfTUFSSywgUFNFTEJfMTVfMTRfMTEsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1RYRF9NQVJLLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SWERfTUFSSywgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssIFBUVDBfRk4pLAorCisJLyogUFRVIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjFfU1lOQ19NQVJLLCBQVFU0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMV9NQ0xLX01BUkssIFBTRUxEXzExXzEwXzAwLCBQVFUzX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQl9NQVJLLCBQU0VMRF8xMV8xMF8wMSwgUFRVM19GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfVFhEX01BUkssIFBTRUxEXzE1XzE0XzAwLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQV9NQVJLLCBQU0VMRF8xNV8xNF8wMSwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoTU1DX0RBVF9NQVJLLCBQU0VMRF8xNV8xNF8xMCwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfUlhEX01BUkssIFBTRUxDXzEzXzEyXzAwLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQl9NQVJLLCBQU0VMQ18xM18xMl8wMSwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NNRF9NQVJLLCBQU0VMQ18xM18xMl8xMCwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfU0NLX01BUkssIFBTRUxDXzE1XzE0XzAwLCBQVFUwX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQV9NQVJLLCBQU0VMQ18xNV8xNF8wMSwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NMS19NQVJLLCBQU0VMQ18xNV8xNF8xMCwgUFRVMF9GTiksCisKKwkvKiBQVFYgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMV9DVFNfTUFSSywgUFNFTEJfMTFfMTBfMDAsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzNfTUFSSywgUFNFTEJfMTFfMTBfMDEsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19WRERPTl9NQVJLLCBQU0VMQl8xMV8xMF8xMCwgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoTENEX1ZFUFdDX01BUkssIFBTRUxCXzExXzEwXzExLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SVFNfTUFSSywgUFNFTEJfMTNfMTJfMDAsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzJfTUFSSywgUFNFTEJfMTNfMTJfMDEsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19PRE1PRF9NQVJLLCBQU0VMQl8xM18xMl8xMCwgUFRWM19GTiksCisJUElOTVVYX0RBVEEoTENEX1ZDUFdDX01BUkssIFBTRUxCXzEzXzEyXzExLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywgUFNFTENfOV84XzAwLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU1fRF9NQVJLLCBQU0VMQ185XzhfMTAsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1JYRF9NQVJLLCBQU0VMQ18xMV8xMF8wMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0lNX1JTVF9NQVJLLCBQU0VMQ18xMV8xMF8xMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0NLX01BUkssIFBTRUxEXzFfMF8wMCwgUFRWMF9GTiksCisJUElOTVVYX0RBVEEoU0lNX0NMS19NQVJLLCBQU0VMRF8xXzBfMTAsIFBUVjBfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQTcsIFBUQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE2LCBQVEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNSwgUFRBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTQsIFBUQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEzLCBQVEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMiwgUFRBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTEsIFBUQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEwLCBQVEEwX0RBVEEpLAorCisJLyogUFRCICovCisJUElOTVVYX0dQSU8oR1BJT19QVEI3LCBQVEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNiwgUFRCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjUsIFBUQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI0LCBQVEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMywgUFRCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjIsIFBUQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIxLCBQVEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMCwgUFRCMF9EQVRBKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRDNywgUFRDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzYsIFBUQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMSwgUFRDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU2LCBQVEU2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUzLCBQVEUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMiwgUFRFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTEsIFBURTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUwLCBQVEUwX0RBVEEpLAorCisJLyogUFRGICovCisJUElOTVVYX0dQSU8oR1BJT19QVEY2LCBQVEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNSwgUFRGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjQsIFBURjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYzLCBQVEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMiwgUFRGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjEsIFBURjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYwLCBQVEYwX0RBVEEpLAorCisJLyogUFRHICovCisJUElOTVVYX0dQSU8oR1BJT19QVEc2LCBQVEc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHNSwgUFRHNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzQsIFBURzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEczLCBQVEczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMiwgUFRHMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzEsIFBURzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcwLCBQVEcwX0RBVEEpLAorCisJLyogUFRIICovCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo2LCBQVEo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNSwgUFRKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjQsIFBUSjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEozLCBQVEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMiwgUFRKMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjEsIFBUSjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEowLCBQVEowX0RBVEEpLAorCisJLyogUFRLICovCisJUElOTVVYX0dQSU8oR1BJT19QVEszLCBQVEszX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMiwgUFRLMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzEsIFBUSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEswLCBQVEswX0RBVEEpLAorCisJLyogUFRMICovCisJUElOTVVYX0dQSU8oR1BJT19QVEw3LCBQVEw3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNiwgUFRMNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDUsIFBUTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw0LCBQVEw0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMywgUFRMM19EQVRBKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRNNywgUFRNN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTYsIFBUTTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE01LCBQVE01X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNCwgUFRNNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTMsIFBUTTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0yLCBQVE0yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMSwgUFRNMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTAsIFBUTTBfREFUQSksCisKKwkvKiBQVFAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUDQsIFBUUDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAzLCBQVFAzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRQMiwgUFRQMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUDEsIFBUUDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAwLCBQVFAwX0RBVEEpLAorCisJLyogUFRSICovCisJUElOTVVYX0dQSU8oR1BJT19QVFI3LCBQVFI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNiwgUFRSNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjUsIFBUUjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI0LCBQVFI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMywgUFRSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjIsIFBUUjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIxLCBQVFIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMCwgUFRSMF9EQVRBKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRTNCwgUFRTNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzMsIFBUUzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMyLCBQVFMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMSwgUFRTMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzAsIFBUUzBfREFUQSksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVDQsIFBUVDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQzLCBQVFQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMiwgUFRUMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDEsIFBUVDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQwLCBQVFQwX0RBVEEpLAorCisJLyogUFRVICovCisJUElOTVVYX0dQSU8oR1BJT19QVFU0LCBQVFU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMywgUFRVM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTIsIFBUVTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUxLCBQVFUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMCwgUFRVMF9EQVRBKSwKKworCS8qIFBUViAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRWNCwgUFRWNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjMsIFBUVjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYyLCBQVFYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMSwgUFRWMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjAsIFBUVjBfREFUQSksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LCBJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVMsIFJBU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NBUywgQ0FTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0tFLCBDS0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzVCX0NFMUEsIENTNUJfQ0UxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNkJfQ0UxQiwgQ1M2Ql9DRTFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjEsIEEyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMCwgQTIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTE5LCBBMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMCwgQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRUZPVVQsIFJFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUU9VVCwgSVJRT1VUX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExNSwgTENEX0RBVEExNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTQsIExDRF9EQVRBMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEzLCBMQ0RfREFUQTEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMiwgTENEX0RBVEExMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTEsIExDRF9EQVRBMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEwLCBMQ0RfREFUQTEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE5LCBMQ0RfREFUQTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTgsIExDRF9EQVRBOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNywgTENEX0RBVEE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE2LCBMQ0RfREFUQTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTUsIExDRF9EQVRBNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNCwgTENEX0RBVEE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEzLCBMQ0RfREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTIsIExDRF9EQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMSwgTENEX0RBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEwLCBMQ0RfREFUQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfTV9ESVNQLCBMQ0RfTV9ESVNQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0NMMSwgTENEX0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9DTDIsIExDRF9DTDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfRE9OLCBMQ0RfRE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0ZMTSwgTENEX0ZMTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9WRVBXQywgTENEX1ZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZDUFdDLCBMQ0RfVkNQV0NfTUFSSyksCisKKwkvKiBBRkVJRiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JYSU4sIEFGRV9SWElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JERVQsIEFGRV9SREVUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX0ZTLCBBRkVfRlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfVFhPVVQsIEFGRV9UWE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9TQ0xLLCBBRkVfU0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9STFlDTlQsIEFGRV9STFlDTlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfSEMxLCBBRkVfSEMxX01BUkspLAorCisJLyogSUlDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JSUNfU0NMLCBJSUNfU0NMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSUlDX1NEQSwgSUlDX1NEQV9NQVJLKSwKKworCS8qIERBQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREExLCBEQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQTAsIERBMF9NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4zLCBBTjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjIsIEFOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMSwgQU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4wLCBBTjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRFRSRywgQURUUkdfTUFSSyksCisKKwkvKiBVU0IgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1JDViwgVVNCMURfUkNWX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhTRTAsIFVTQjFEX1RYU0UwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhEUExTLCBVU0IxRF9UWERQTFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9ETU5TLCBVU0IxRF9ETU5TX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfRFBMUywgVVNCMURfRFBMU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1NQRUVELCBVU0IxRF9TUEVFRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1RYRU5MLCBVU0IxRF9UWEVOTF9NQVJLKSwKKworCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMl9QV1JfRU4sIFVTQjJfUFdSX0VOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMV9QV1JfRU5fVVNCRl9VUExVUCwKKwkJICAgIFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9TVVNQRU5ELCBVU0IxRF9TVVNQRU5EX01BUkspLAorCisJLyogSU5UQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNSwgSVJRNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX0lSTDMsIElSUTNfSVJMM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfSVJMMiwgSVJRMl9JUkwyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9JUkwxLCBJUlExX0lSTDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX0lSTDAsIElSUTBfSVJMMF9NQVJLKSwKKworCS8qIFBDQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JFRywgUENDX1JFR19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19EUlYsIFBDQ19EUlZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMiwgUENDX0JWRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMSwgUENDX0JWRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQ0QyLCBQQ0NfQ0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX0NEMSwgUENDX0NEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19SRVNFVCwgUENDX1JFU0VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JEWSwgUENDX1JEWV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19WUzIsIFBDQ19WUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfVlMxLCBQQ0NfVlMxX01BUkspLAorCisJLyogSFVESSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMywgQVVEQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTIsIEFVREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEExLCBBVURBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMCwgQVVEQVRBMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRENLLCBBVURDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BU0VCUktBSywgQVNFQlJLQUtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUlNULCBUUlNUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVE1TLCBUTVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URE8sIFRET19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RESSwgVERJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENLLCBUQ0tfTUFSSyksCisKKwkvKiBETUFDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMSwgREFDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMSwgRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMCwgREFDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwgRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMSwgVEVORDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMCwgVEVORDBfTUFSSyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU1lOQywgU0lPRjBfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX01DTEssIFNJT0YwX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9UWEQsIFNJT0YwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1JYRCwgU0lPRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU0NLLCBTSU9GMF9TQ0tfTUFSSyksCisKKwkvKiBTSU9GMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1lOQywgU0lPRjFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX01DTEssIFNJT0YxX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9UWEQsIFNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1JYRCwgU0lPRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU0NLLCBTSU9GMV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfVFhELCBTQ0lGMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SWEQsIFNDSUYwX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JUUywgU0NJRjBfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfQ1RTLCBTQ0lGMF9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19NQVJLKSwKKworCS8qIFNDSUYxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsIFNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JYRCwgU0NJRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlRTLCBTQ0lGMV9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9DVFMsIFNDSUYxX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NDSywgU0NJRjFfU0NLX01BUkspLAorCisJLyogVFBVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8xLCBUUFVfVE8xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVX1RPMCwgVFBVX1RPMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNCLCBUUFVfVEkzQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNBLCBUUFVfVEkzQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJCLCBUUFVfVEkyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJBLCBUUFVfVEkyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9UTzMsIFRQVV9UTzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8yLCBUUFVfVE8yX01BUkspLAorCisJLyogU0lNICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fRCwgU0lNX0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fQ0xLLCBTSU1fQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX1JTVCwgU0lNX1JTVF9NQVJLKSwKKworCS8qIE1NQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX0RBVCwgTU1DX0RBVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01NQ19DTUQsIE1NQ19DTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfQ0xLLCBNTUNfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX1ZERE9OLCBNTUNfVkRET05fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfT0RNT0QsIE1NQ19PRE1PRF9NQVJLKSwKKworCS8qIFNZU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TVEFUVVMxLCBTVEFUVVMxX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJUFRBN19GTiwgUFRBN19PVVQsIFBUQTdfSU5fUFUsIFBUQTdfSU4sCisJCVBUQTZfRk4sIFBUQTZfT1VULCBQVEE2X0lOX1BVLCBQVEE2X0lOLAorCQlQVEE1X0ZOLCBQVEE1X09VVCwgUFRBNV9JTl9QVSwgUFRBNV9JTiwKKwkJUFRBNF9GTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUsIFBUQTRfSU4sCisJCVBUQTNfRk4sIFBUQTNfT1VULCBQVEEzX0lOX1BVLCBQVEEzX0lOLAorCQlQVEEyX0ZOLCBQVEEyX09VVCwgUFRBMl9JTl9QVSwgUFRBMl9JTiwKKwkJUFRBMV9GTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUsIFBUQTFfSU4sCisJCVBUQTBfRk4sIFBUQTBfT1VULCBQVEEwX0lOX1BVLCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlQVEI3X0ZOLCBQVEI3X09VVCwgUFRCN19JTl9QVSwgUFRCN19JTiwKKwkJUFRCNl9GTiwgUFRCNl9PVVQsIFBUQjZfSU5fUFUsIFBUQjZfSU4sCisJCVBUQjVfRk4sIFBUQjVfT1VULCBQVEI1X0lOX1BVLCBQVEI1X0lOLAorCQlQVEI0X0ZOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSwgUFRCNF9JTiwKKwkJUFRCM19GTiwgUFRCM19PVVQsIFBUQjNfSU5fUFUsIFBUQjNfSU4sCisJCVBUQjJfRk4sIFBUQjJfT1VULCBQVEIyX0lOX1BVLCBQVEIyX0lOLAorCQlQVEIxX0ZOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSwgUFRCMV9JTiwKKwkJUFRCMF9GTiwgUFRCMF9PVVQsIFBUQjBfSU5fUFUsIFBUQjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUiIsIDB4YTQwNTAxMDQsIDE2LCAyKSB7CisJCVBUQzdfRk4sIFBUQzdfT1VULCBQVEM3X0lOX1BVLCBQVEM3X0lOLAorCQlQVEM2X0ZOLCBQVEM2X09VVCwgUFRDNl9JTl9QVSwgUFRDNl9JTiwKKwkJUFRDNV9GTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUsIFBUQzVfSU4sCisJCVBUQzRfRk4sIFBUQzRfT1VULCBQVEM0X0lOX1BVLCBQVEM0X0lOLAorCQlQVEMzX0ZOLCBQVEMzX09VVCwgUFRDM19JTl9QVSwgUFRDM19JTiwKKwkJUFRDMl9GTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUsIFBUQzJfSU4sCisJCVBUQzFfRk4sIFBUQzFfT1VULCBQVEMxX0lOX1BVLCBQVEMxX0lOLAorCQlQVEMwX0ZOLCBQVEMwX09VVCwgUFRDMF9JTl9QVSwgUFRDMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhhNDA1MDEwNiwgMTYsIDIpIHsKKwkJUFREN19GTiwgUFREN19PVVQsIFBURDdfSU5fUFUsIFBURDdfSU4sCisJCVBURDZfRk4sIFBURDZfT1VULCBQVEQ2X0lOX1BVLCBQVEQ2X0lOLAorCQlQVEQ1X0ZOLCBQVEQ1X09VVCwgUFRENV9JTl9QVSwgUFRENV9JTiwKKwkJUFRENF9GTiwgUFRENF9PVVQsIFBURDRfSU5fUFUsIFBURDRfSU4sCisJCVBURDNfRk4sIFBURDNfT1VULCBQVEQzX0lOX1BVLCBQVEQzX0lOLAorCQlQVEQyX0ZOLCBQVEQyX09VVCwgUFREMl9JTl9QVSwgUFREMl9JTiwKKwkJUFREMV9GTiwgUFREMV9PVVQsIFBURDFfSU5fUFUsIFBURDFfSU4sCisJCVBURDBfRk4sIFBURDBfT1VULCBQVEQwX0lOX1BVLCBQVEQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEU2X0ZOLCAwLCAwLCBQVEU2X0lOLAorCQlQVEU1X0ZOLCAwLCAwLCBQVEU1X0lOLAorCQlQVEU0X0ZOLCBQVEU0X09VVCwgUFRFNF9JTl9QVSwgUFRFNF9JTiwKKwkJUFRFM19GTiwgUFRFM19PVVQsIFBURTNfSU5fUFUsIFBURTNfSU4sCisJCVBURTJfRk4sIFBURTJfT1VULCBQVEUyX0lOX1BVLCBQVEUyX0lOLAorCQlQVEUxX0ZOLCBQVEUxX09VVCwgUFRFMV9JTl9QVSwgUFRFMV9JTiwKKwkJUFRFMF9GTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURjZfRk4sIDAsIDAsIFBURjZfSU4sCisJCVBURjVfRk4sIDAsIDAsIFBURjVfSU4sCisJCVBURjRfRk4sIDAsIDAsIFBURjRfSU4sCisJCVBURjNfRk4sIDAsIDAsIFBURjNfSU4sCisJCVBURjJfRk4sIDAsIDAsIFBURjJfSU4sCisJCVBURjFfRk4sIDAsIDAsIFBURjFfSU4sCisJCVBURjBfRk4sIDAsIDAsIFBURjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4YTQwNTAxMGMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURzZfRk4sIFBURzZfT1VULCBQVEc2X0lOX1BVLCBQVEc2X0lOLAorCQlQVEc1X0ZOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSwgUFRHNV9JTiwKKwkJUFRHNF9GTiwgUFRHNF9PVVQsIFBURzRfSU5fUFUsIFBURzRfSU4sCisJCVBURzNfRk4sIFBURzNfT1VULCBQVEczX0lOX1BVLCBQVEczX0lOLAorCQlQVEcyX0ZOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSwgUFRHMl9JTiwKKwkJUFRHMV9GTiwgUFRHMV9PVVQsIFBURzFfSU5fUFUsIFBURzFfSU4sCisJCVBURzBfRk4sIFBURzBfT1VULCBQVEcwX0lOX1BVLCBQVEcwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGE0MDUwMTBlLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEg2X0ZOLCBQVEg2X09VVCwgUFRINl9JTl9QVSwgUFRINl9JTiwKKwkJUFRINV9GTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUsIFBUSDVfSU4sCisJCVBUSDRfRk4sIFBUSDRfT1VULCBQVEg0X0lOX1BVLCBQVEg0X0lOLAorCQlQVEgzX0ZOLCBQVEgzX09VVCwgUFRIM19JTl9QVSwgUFRIM19JTiwKKwkJUFRIMl9GTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUsIFBUSDJfSU4sCisJCVBUSDFfRk4sIFBUSDFfT1VULCBQVEgxX0lOX1BVLCBQVEgxX0lOLAorCQlQVEgwX0ZOLCBQVEgwX09VVCwgUFRIMF9JTl9QVSwgUFRIMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSkNSIiwgMHhhNDA1MDExMCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJUFRKNl9GTiwgUFRKNl9PVVQsIFBUSjZfSU5fUFUsIFBUSjZfSU4sCisJCVBUSjVfRk4sIFBUSjVfT1VULCBQVEo1X0lOX1BVLCBQVEo1X0lOLAorCQlQVEo0X0ZOLCBQVEo0X09VVCwgUFRKNF9JTl9QVSwgUFRKNF9JTiwKKwkJUFRKM19GTiwgUFRKM19PVVQsIFBUSjNfSU5fUFUsIFBUSjNfSU4sCisJCVBUSjJfRk4sIFBUSjJfT1VULCBQVEoyX0lOX1BVLCBQVEoyX0lOLAorCQlQVEoxX0ZOLCBQVEoxX09VVCwgUFRKMV9JTl9QVSwgUFRKMV9JTiwKKwkJUFRKMF9GTiwgUFRKMF9PVVQsIFBUSjBfSU5fUFUsIFBUSjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEtDUiIsIDB4YTQwNTAxMTIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSzNfRk4sIFBUSzNfT1VULCBQVEszX0lOX1BVLCBQVEszX0lOLAorCQlQVEsyX0ZOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSwgUFRLMl9JTiwKKwkJUFRLMV9GTiwgUFRLMV9PVVQsIFBUSzFfSU5fUFUsIFBUSzFfSU4sCisJCVBUSzBfRk4sIFBUSzBfT1VULCBQVEswX0lOX1BVLCBQVEswX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBMQ1IiLCAweGE0MDUwMTE0LCAxNiwgMikgeworCQlQVEw3X0ZOLCBQVEw3X09VVCwgUFRMN19JTl9QVSwgUFRMN19JTiwKKwkJUFRMNl9GTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUsIFBUTDZfSU4sCisJCVBUTDVfRk4sIFBUTDVfT1VULCBQVEw1X0lOX1BVLCBQVEw1X0lOLAorCQlQVEw0X0ZOLCBQVEw0X09VVCwgUFRMNF9JTl9QVSwgUFRMNF9JTiwKKwkJUFRMM19GTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUsIFBUTDNfSU4sCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUE1DUiIsIDB4YTQwNTAxMTYsIDE2LCAyKSB7CisJCVBUTTdfRk4sIFBUTTdfT1VULCBQVE03X0lOX1BVLCBQVE03X0lOLAorCQlQVE02X0ZOLCBQVE02X09VVCwgUFRNNl9JTl9QVSwgUFRNNl9JTiwKKwkJUFRNNV9GTiwgUFRNNV9PVVQsIFBUTTVfSU5fUFUsIFBUTTVfSU4sCisJCVBUTTRfRk4sIFBUTTRfT1VULCBQVE00X0lOX1BVLCBQVE00X0lOLAorCQlQVE0zX0ZOLCBQVE0zX09VVCwgUFRNM19JTl9QVSwgUFRNM19JTiwKKwkJUFRNMl9GTiwgUFRNMl9PVVQsIFBUTTJfSU5fUFUsIFBUTTJfSU4sCisJCVBUTTFfRk4sIFBUTTFfT1VULCBQVE0xX0lOX1BVLCBQVE0xX0lOLAorCQlQVE0wX0ZOLCBQVE0wX09VVCwgUFRNMF9JTl9QVSwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQUENSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRQNF9GTiwgUFRQNF9PVVQsIFBUUDRfSU5fUFUsIFBUUDRfSU4sCisJCVBUUDNfRk4sIFBUUDNfT1VULCBQVFAzX0lOX1BVLCBQVFAzX0lOLAorCQlQVFAyX0ZOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSwgUFRQMl9JTiwKKwkJUFRQMV9GTiwgUFRQMV9PVVQsIFBUUDFfSU5fUFUsIFBUUDFfSU4sCisJCVBUUDBfRk4sIFBUUDBfT1VULCBQVFAwX0lOX1BVLCBQVFAwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBSQ1IiLCAweGE0MDUwMTFhLCAxNiwgMikgeworCQlQVFI3X0ZOLCBQVFI3X09VVCwgUFRSN19JTl9QVSwgUFRSN19JTiwKKwkJUFRSNl9GTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUsIFBUUjZfSU4sCisJCVBUUjVfRk4sIFBUUjVfT1VULCBQVFI1X0lOX1BVLCBQVFI1X0lOLAorCQlQVFI0X0ZOLCBQVFI0X09VVCwgUFRSNF9JTl9QVSwgUFRSNF9JTiwKKwkJUFRSM19GTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUsIFBUUjNfSU4sCisJCVBUUjJfRk4sIFBUUjJfT1VULCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlQVFIxX0ZOLCBQVFIxX09VVCwgUFRSMV9JTl9QVSwgUFRSMV9JTiwKKwkJUFRSMF9GTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUsIFBUUjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUUzRfRk4sIFBUUzRfT1VULCBQVFM0X0lOX1BVLCBQVFM0X0lOLAorCQlQVFMzX0ZOLCBQVFMzX09VVCwgUFRTM19JTl9QVSwgUFRTM19JTiwKKwkJUFRTMl9GTiwgUFRTMl9PVVQsIFBUUzJfSU5fUFUsIFBUUzJfSU4sCisJCVBUUzFfRk4sIFBUUzFfT1VULCBQVFMxX0lOX1BVLCBQVFMxX0lOLAorCQlQVFMwX0ZOLCBQVFMwX09VVCwgUFRTMF9JTl9QVSwgUFRTMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDExZSwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRUNF9GTiwgUFRUNF9PVVQsIFBUVDRfSU5fUFUsIFBUVDRfSU4sCisJCVBUVDNfRk4sIFBUVDNfT1VULCBQVFQzX0lOX1BVLCBQVFQzX0lOLAorCQlQVFQyX0ZOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSwgUFRUMl9JTiwKKwkJUFRUMV9GTiwgUFRUMV9PVVQsIFBUVDFfSU5fUFUsIFBUVDFfSU4sCisJCVBUVDBfRk4sIFBUVDBfT1VULCBQVFQwX0lOX1BVLCBQVFQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBVQ1IiLCAweGE0MDUwMTIwLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQVFU0X0ZOLCBQVFU0X09VVCwgUFRVNF9JTl9QVSwgUFRVNF9JTiwKKwkJUFRVM19GTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUsIFBUVTNfSU4sCisJCVBUVTJfRk4sIFBUVTJfT1VULCBQVFUyX0lOX1BVLCBQVFUyX0lOLAorCQlQVFUxX0ZOLCBQVFUxX09VVCwgUFRVMV9JTl9QVSwgUFRVMV9JTiwKKwkJUFRVMF9GTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUsIFBUVTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFZDUiIsIDB4YTQwNTAxMjIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUVjRfRk4sIFBUVjRfT1VULCBQVFY0X0lOX1BVLCBQVFY0X0lOLAorCQlQVFYzX0ZOLCBQVFYzX09VVCwgUFRWM19JTl9QVSwgUFRWM19JTiwKKwkJUFRWMl9GTiwgUFRWMl9PVVQsIFBUVjJfSU5fUFUsIFBUVjJfSU4sCisJCVBUVjFfRk4sIFBUVjFfT1VULCBQVFYxX0lOX1BVLCBQVFYxX0lOLAorCQlQVFYwX0ZOLCBQVFYwX09VVCwgUFRWMF9JTl9QVSwgUFRWMF9JTiB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDE0MCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxNDIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTQ0LCA4KSB7CisJCVBUQzdfREFUQSwgUFRDNl9EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhhNDA1MDEyNiwgOCkgeworCQlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4YTQwNTAxNDgsIDgpIHsKKwkJMCwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwKKwkJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSIiwgMHhhNDA1MDE0YSwgOCkgeworCQkwLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTRjLCA4KSB7CisJCTAsIFBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJCVBURzNfREFUQSwgUFRHMl9EQVRBLCBQVEcxX0RBVEEsIFBURzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4YTQwNTAxNGUsIDgpIHsKKwkJMCwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDE1MCwgOCkgeworCQkwLCBQVEo2X0RBVEEsIFBUSjVfREFUQSwgUFRKNF9EQVRBLAorCQlQVEozX0RBVEEsIFBUSjJfREFUQSwgUFRKMV9EQVRBLCBQVEowX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBLRFIiLCAweGE0MDUwMTUyLCA4KSB7CisJCTAsIDAsIDAsIDAsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxNTQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTU2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUERSIiwgMHhhNDA1MDE1OCwgOCkgeworCQkwLCAwLCAwLCBQVFA0X0RBVEEsCisJCVBUUDNfREFUQSwgUFRQMl9EQVRBLCBQVFAxX0RBVEEsIFBUUDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFJEUiIsIDB4YTQwNTAxNWEsIDgpIHsKKwkJUFRSN19EQVRBLCBQVFI2X0RBVEEsIFBUUjVfREFUQSwgUFRSNF9EQVRBLAorCQlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBTRFIiLCAweGE0MDUwMTVjLCA4KSB7CisJCTAsIDAsIDAsIFBUUzRfREFUQSwKKwkJUFRTM19EQVRBLCBQVFMyX0RBVEEsIFBUUzFfREFUQSwgUFRTMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVERSIiwgMHhhNDA1MDE1ZSwgOCkgeworCQkwLCAwLCAwLCBQVFQ0X0RBVEEsCisJCVBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFVEUiIsIDB4YTQwNTAxNjAsIDgpIHsKKwkJMCwgMCwgMCwgUFRVNF9EQVRBLAorCQlQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBWRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIDAsIFBUVjRfREFUQSwKKwkJUFRWM19EQVRBLCBQVFYyX0RBVEEsIFBUVjFfREFUQSwgUFRWMF9EQVRBIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3NzIwX3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzcyMF9wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BUQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fU1RBVFVTMSwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X3Bpbm11eF9zZXR1cCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9waW5tdXgoJnNoNzcyMF9waW5tdXhfaW5mbyk7Cit9CisKK2FyY2hfaW5pdGNhbGwocGxhdF9waW5tdXhfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggMmQ0NTJmNi4uMjc4MDkxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC0zNiw3ICszNiw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGZsb2F0NjRfc3ViKHVuc2lnbmVkIGxvbmcgbG9uZyBhLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBiKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCBmbG9hdDMyX3N1Yih1bnNpZ25lZCBsb25nIGludCBhLCB1bnNpZ25lZCBsb25nIGludCBiKTsKLQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IGZsb2F0NjRfdG9fZmxvYXQzMih1bnNpZ25lZCBsb25nIGxvbmcgYSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZwdV9leGNlcHRpb25fZmxhZ3M7CiAKIC8qCkBAIC00MTcsNiArNDE3LDI5IEBACiAKIAkJcmVncy0+cGMgPSBuZXh0cGM7CiAJCXJldHVybiAxOworCX0gZWxzZSBpZiAoKGZpbnNuICYgMHhmMGJkKSA9PSAweGYwYmQpIHsKKwkJLyogZmNudmRzIC0gZG91YmxlIHRvIHNpbmdsZSBwcmVjaXNpb24gY29udmVydCAqLworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJCWludCBtOworCQl1bnNpZ25lZCBpbnQgaHg7CisKKwkJbSA9IChmaW5zbiA+PiA5KSAmIDB4NzsKKwkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOworCisJCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKKwkJCSYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDAxMDAwMDApKSB7CisJCQkvKiBzdWJub3JtYWwgZG91YmxlIHRvIGZsb2F0IGNvbnZlcnNpb24gKi8KKwkJCWxvbmcgbG9uZyBsbHg7CisKKwkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV0gPDwgMzIpCisJCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKworCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCisJCXJlZ3MtPnBjID0gbmV4dHBjOworCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDI1NGM1YzUuLmQ5YmRjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKQEAgLTE3OCwxMCArMTc5LDE0IEBACiB9CiBfX2luaXRjYWxsKHNoNzc2MF9kZXZpY2VzX3NldHVwKTsKIAorI2RlZmluZSBJTlRDX0lDUgkweGZmZDAwMDAwVUwKKyNkZWZpbmUgSU5UQ19JQ1JfSVJMTQkoMSA8PCA3KQorCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQogewogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgorCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc29mdGZsb2F0LmMKaW5kZXggODI4Y2I1Ny4uMmI3NDdmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NvZnRmbG9hdC5jCkBAIC04NSw2ICs4NSw3IEBACiBmbG9hdDMyIGZsb2F0MzJfZGl2KGZsb2F0MzIgYSwgZmxvYXQzMiBiKTsKIGZsb2F0MzIgZmxvYXQzMl9tdWwoZmxvYXQzMiBhLCBmbG9hdDMyIGIpOwogZmxvYXQ2NCBmbG9hdDY0X211bChmbG9hdDY0IGEsIGZsb2F0NjQgYik7CitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpOwogaW5saW5lIHZvaWQgYWRkMTI4KGJpdHM2NCBhMCwgYml0czY0IGExLCBiaXRzNjQgYjAsIGJpdHM2NCBiMSwgYml0czY0ICogejBQdHIsCiAJCSAgIGJpdHM2NCAqIHoxUHRyKTsKIGlubGluZSB2b2lkIHN1YjEyOChiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEsIGJpdHM2NCAqIHowUHRyLApAQCAtODkwLDMgKzg5MSwzMSBAQAogCX0KIAlyZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQ2NCh6U2lnbiwgekV4cCwgelNpZzApOwogfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCisgKiAgYGEnIHRvIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzCisgKiAgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorICogIEFyaXRobWV0aWMuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICovCitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwOworICAgIGJpdHM2NCBhU2lnOworICAgIGJpdHMzMiB6U2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisKKyAgICBzaGlmdDY0UmlnaHRKYW1taW5nKCBhU2lnLCAyMiwgJmFTaWcgKTsKKyAgICB6U2lnID0gYVNpZzsKKyAgICBpZiAoIGFFeHAgfHwgelNpZyApIHsKKyAgICAgICAgelNpZyB8PSAweDQwMDAwMDAwOworICAgICAgICBhRXhwIC09IDB4MzgxOworICAgIH0KKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQzMihhU2lnbiwgYUV4cCwgelNpZyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCmluZGV4IDkzODFhZDguLjhlMzQ0ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCkBAIC0yNyw1ICsyNywxMSBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykJOj0gY2xvY2stc2h4My5vCiAKKyMgUGlubXV4IHNldHVwCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBwaW5tdXgtc2g3NzIyLm8KK3Bpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IHBpbm11eC1zaDc3MjMubworcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gcGlubXV4LXNoNzc4NS5vCisKIG9iai15CQkJKz0gJChjbG9jay15KQogb2JqLSQoQ09ORklHX1NNUCkJKz0gJChzbXAteSkKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jCmluZGV4IDQ1ODg5ZDQuLjMxNzdkMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jCkBAIC0xOCw3ICsxOCw2IEBACiAKIHN0YXRpYyBpbnQgYmZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDgsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgcDBmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCA4LCAxLCAxLCAxLCAxIH07Ci1zdGF0aWMgaW50IHAxZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMTYsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgY2ZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEsIDEsIDEsIDEsIDEgfTsKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjlkMDdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCkBAIC0wLDAgKzEsMTc4MyBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgorCitlbnVtIHsKKwlQSU5NVVhfUkVTRVJWRUQgPSAwLAorCisJUElOTVVYX0RBVEFfQkVHSU4sCisJUFRBN19EQVRBLCBQVEE2X0RBVEEsIFBUQTVfREFUQSwgUFRBNF9EQVRBLAorCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSwKKwlQVEI3X0RBVEEsIFBUQjZfREFUQSwgUFRCNV9EQVRBLCBQVEI0X0RBVEEsCisJUFRCM19EQVRBLCBQVEIyX0RBVEEsIFBUQjFfREFUQSwgUFRCMF9EQVRBLAorCVBUQzdfREFUQSwgUFRDNV9EQVRBLCBQVEM0X0RBVEEsIFBUQzNfREFUQSwgUFRDMl9EQVRBLCBQVEMwX0RBVEEsCisJUFREN19EQVRBLCBQVEQ2X0RBVEEsIFBURDVfREFUQSwgUFRENF9EQVRBLAorCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSwKKwlQVEU3X0RBVEEsIFBURTZfREFUQSwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBLAorCVBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzRfREFUQSwgUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBLAorCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwlQVEgzX0RBVEEsIFBUSDJfREFUQSwgUFRIMV9EQVRBLCBQVEgwX0RBVEEsCisJUFRKN19EQVRBLCBQVEo2X0RBVEEsIFBUSjVfREFUQSwgUFRKMV9EQVRBLCBQVEowX0RBVEEsCisJUFRLNl9EQVRBLCBQVEs1X0RBVEEsIFBUSzRfREFUQSwKKwlQVEszX0RBVEEsIFBUSzJfREFUQSwgUFRLMV9EQVRBLCBQVEswX0RBVEEsCisJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCVBUTDNfREFUQSwgUFRMMl9EQVRBLCBQVEwxX0RBVEEsIFBUTDBfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUTjdfREFUQSwgUFRONl9EQVRBLCBQVE41X0RBVEEsIFBUTjRfREFUQSwKKwlQVE4zX0RBVEEsIFBUTjJfREFUQSwgUFROMV9EQVRBLCBQVE4wX0RBVEEsCisJUFRRNl9EQVRBLCBQVFE1X0RBVEEsIFBUUTRfREFUQSwKKwlQVFEzX0RBVEEsIFBUUTJfREFUQSwgUFRRMV9EQVRBLCBQVFEwX0RBVEEsCisJUFRSNF9EQVRBLCBQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTNF9EQVRBLCBQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEsCisJUFRUNF9EQVRBLCBQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEsCisJUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWNF9EQVRBLCBQVFYzX0RBVEEsIFBUVjJfREFUQSwgUFRWMV9EQVRBLCBQVFYwX0RBVEEsCisJUFRXNl9EQVRBLCBQVFc1X0RBVEEsIFBUVzRfREFUQSwKKwlQVFczX0RBVEEsIFBUVzJfREFUQSwgUFRXMV9EQVRBLCBQVFcwX0RBVEEsCisJUFRYNl9EQVRBLCBQVFg1X0RBVEEsIFBUWDRfREFUQSwKKwlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEsCisJUFRZNl9EQVRBLCBQVFk1X0RBVEEsIFBUWTRfREFUQSwKKwlQVFkzX0RBVEEsIFBUWTJfREFUQSwgUFRZMV9EQVRBLCBQVFkwX0RBVEEsCisJUFRaNV9EQVRBLCBQVFo0X0RBVEEsIFBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSwKKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJUFRBN19JTiwgUFRBNl9JTiwgUFRBNV9JTiwgUFRBNF9JTiwKKwlQVEEzX0lOLCBQVEEyX0lOLCBQVEExX0lOLCBQVEEwX0lOLAorCVBUQjdfSU4sIFBUQjZfSU4sIFBUQjVfSU4sIFBUQjRfSU4sCisJUFRCM19JTiwgUFRCMl9JTiwgUFRCMV9JTiwgUFRCMF9JTiwKKwlQVEM3X0lOLCBQVEM1X0lOLCBQVEM0X0lOLCBQVEMzX0lOLCBQVEMyX0lOLCBQVEMwX0lOLAorCVBURDdfSU4sIFBURDZfSU4sIFBURDVfSU4sIFBURDRfSU4sIFBURDNfSU4sIFBURDJfSU4sIFBURDFfSU4sCisJUFRFN19JTiwgUFRFNl9JTiwgUFRFNV9JTiwgUFRFNF9JTiwgUFRFMV9JTiwgUFRFMF9JTiwKKwlQVEY2X0lOLCBQVEY1X0lOLCBQVEY0X0lOLCBQVEYzX0lOLCBQVEYyX0lOLCBQVEYxX0lOLAorCVBUSDZfSU4sIFBUSDVfSU4sIFBUSDFfSU4sIFBUSDBfSU4sCisJUFRKMV9JTiwgUFRKMF9JTiwKKwlQVEs2X0lOLCBQVEs1X0lOLCBQVEs0X0lOLCBQVEszX0lOLCBQVEsyX0lOLCBQVEswX0lOLAorCVBUTDdfSU4sIFBUTDZfSU4sIFBUTDVfSU4sIFBUTDRfSU4sCisJUFRMM19JTiwgUFRMMl9JTiwgUFRMMV9JTiwgUFRMMF9JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRON19JTiwgUFRONl9JTiwgUFRONV9JTiwgUFRONF9JTiwKKwlQVE4zX0lOLCBQVE4yX0lOLCBQVE4xX0lOLCBQVE4wX0lOLAorCVBUUTVfSU4sIFBUUTRfSU4sIFBUUTNfSU4sIFBUUTJfSU4sIFBUUTBfSU4sCisJUFRSMl9JTiwKKwlQVFM0X0lOLCBQVFMyX0lOLCBQVFMxX0lOLAorCVBUVDRfSU4sIFBUVDNfSU4sIFBUVDJfSU4sIFBUVDFfSU4sCisJUFRVNF9JTiwgUFRVM19JTiwgUFRVMl9JTiwgUFRVMV9JTiwgUFRVMF9JTiwKKwlQVFY0X0lOLCBQVFYzX0lOLCBQVFYyX0lOLCBQVFYxX0lOLCBQVFYwX0lOLAorCVBUVzZfSU4sIFBUVzRfSU4sIFBUVzNfSU4sIFBUVzJfSU4sIFBUVzFfSU4sIFBUVzBfSU4sCisJUFRYNl9JTiwgUFRYNV9JTiwgUFRYNF9JTiwgUFRYM19JTiwgUFRYMl9JTiwgUFRYMV9JTiwgUFRYMF9JTiwKKwlQVFk1X0lOLCBQVFk0X0lOLCBQVFkzX0lOLCBQVFkyX0lOLCBQVFkwX0lOLAorCVBUWjVfSU4sIFBUWjRfSU4sIFBUWjNfSU4sIFBUWjJfSU4sIFBUWjFfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9JTlBVVF9QVUxMRE9XTl9CRUdJTiwKKwlQVEE3X0lOX1BELCBQVEE2X0lOX1BELCBQVEE1X0lOX1BELCBQVEE0X0lOX1BELAorCVBUQTNfSU5fUEQsIFBUQTJfSU5fUEQsIFBUQTFfSU5fUEQsIFBUQTBfSU5fUEQsCisJUFRFN19JTl9QRCwgUFRFNl9JTl9QRCwgUFRFNV9JTl9QRCwgUFRFNF9JTl9QRCwJUFRFMV9JTl9QRCwgUFRFMF9JTl9QRCwKKwlQVEY2X0lOX1BELCBQVEY1X0lOX1BELCBQVEY0X0lOX1BELCBQVEYzX0lOX1BELCBQVEYyX0lOX1BELCBQVEYxX0lOX1BELAorCVBUSDZfSU5fUEQsIFBUSDVfSU5fUEQsIFBUSDFfSU5fUEQsIFBUSDBfSU5fUEQsCisJUFRLNl9JTl9QRCwgUFRLNV9JTl9QRCwgUFRLNF9JTl9QRCwgUFRLM19JTl9QRCwgUFRLMl9JTl9QRCwgUFRLMF9JTl9QRCwKKwlQVEw3X0lOX1BELCBQVEw2X0lOX1BELCBQVEw1X0lOX1BELCBQVEw0X0lOX1BELAorCVBUTDNfSU5fUEQsIFBUTDJfSU5fUEQsIFBUTDFfSU5fUEQsIFBUTDBfSU5fUEQsCisJUFRNN19JTl9QRCwgUFRNNl9JTl9QRCwgUFRNNV9JTl9QRCwgUFRNNF9JTl9QRCwKKwlQVE0zX0lOX1BELCBQVE0yX0lOX1BELCBQVE0xX0lOX1BELCBQVE0wX0lOX1BELAorCVBUUTVfSU5fUEQsIFBUUTRfSU5fUEQsIFBUUTNfSU5fUEQsIFBUUTJfSU5fUEQsCisJUFRTNF9JTl9QRCwgUFRTMl9JTl9QRCwgUFRTMV9JTl9QRCwKKwlQVFQ0X0lOX1BELCBQVFQzX0lOX1BELCBQVFQyX0lOX1BELCBQVFQxX0lOX1BELAorCVBUVTRfSU5fUEQsIFBUVTNfSU5fUEQsIFBUVTJfSU5fUEQsIFBUVTFfSU5fUEQsIFBUVTBfSU5fUEQsCisJUFRWNF9JTl9QRCwgUFRWM19JTl9QRCwgUFRWMl9JTl9QRCwgUFRWMV9JTl9QRCwgUFRWMF9JTl9QRCwKKwlQVFc2X0lOX1BELCBQVFc0X0lOX1BELAlQVFczX0lOX1BELCBQVFcyX0lOX1BELCBQVFcxX0lOX1BELCBQVFcwX0lOX1BELAorCVBUWDZfSU5fUEQsIFBUWDVfSU5fUEQsIFBUWDRfSU5fUEQsCisJUFRYM19JTl9QRCwgUFRYMl9JTl9QRCwgUFRYMV9JTl9QRCwgUFRYMF9JTl9QRCwKKwlQSU5NVVhfSU5QVVRfUFVMTERPV05fRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEM3X0lOX1BVLCBQVEM1X0lOX1BVLAorCVBURDdfSU5fUFUsIFBURDZfSU5fUFUsIFBURDVfSU5fUFUsIFBURDRfSU5fUFUsCisJUFREM19JTl9QVSwgUFREMl9JTl9QVSwgUFREMV9JTl9QVSwKKwlQVEoxX0lOX1BVLCBQVEowX0lOX1BVLAorCVBUUTBfSU5fUFUsCisJUFRSMl9JTl9QVSwKKwlQVFg2X0lOX1BVLAorCVBUWTVfSU5fUFUsIFBUWTRfSU5fUFUsIFBUWTNfSU5fUFUsIFBUWTJfSU5fUFUsIFBUWTBfSU5fUFUsCisJUFRaNV9JTl9QVSwgUFRaNF9JTl9QVSwgUFRaM19JTl9QVSwgUFRaMl9JTl9QVSwgUFRaMV9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTVfT1VULAorCVBUQjdfT1VULCBQVEI2X09VVCwgUFRCNV9PVVQsIFBUQjRfT1VULAorCVBUQjNfT1VULCBQVEIyX09VVCwgUFRCMV9PVVQsIFBUQjBfT1VULAorCVBUQzRfT1VULCBQVEMzX09VVCwgUFRDMl9PVVQsIFBUQzBfT1VULAorCVBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFN19PVVQsIFBURTZfT1VULCBQVEU1X09VVCwgUFRFNF9PVVQsIFBURTFfT1VULCBQVEUwX09VVCwKKwlQVEY2X09VVCwgUFRGNV9PVVQsIFBURjRfT1VULCBQVEYzX09VVCwgUFRGMl9PVVQsIFBURjBfT1VULAorCVBURzRfT1VULCBQVEczX09VVCwgUFRHMl9PVVQsIFBURzFfT1VULCBQVEcwX09VVCwKKwlQVEg3X09VVCwgUFRINl9PVVQsIFBUSDVfT1VULCBQVEg0X09VVCwKKwlQVEgzX09VVCwgUFRIMl9PVVQsIFBUSDFfT1VULCBQVEgwX09VVCwKKwlQVEo3X09VVCwgUFRKNl9PVVQsIFBUSjVfT1VULCBQVEoxX09VVCwgUFRKMF9PVVQsCisJUFRLNl9PVVQsIFBUSzVfT1VULCBQVEs0X09VVCwgUFRLM19PVVQsIFBUSzFfT1VULCBQVEswX09VVCwKKwlQVEw3X09VVCwgUFRMNl9PVVQsIFBUTDVfT1VULCBQVEw0X09VVCwKKwlQVEwzX09VVCwgUFRMMl9PVVQsIFBUTDFfT1VULCBQVEwwX09VVCwKKwlQVE03X09VVCwgUFRNNl9PVVQsIFBUTTVfT1VULCBQVE00X09VVCwKKwlQVE0zX09VVCwgUFRNMl9PVVQsIFBUTTFfT1VULCBQVE0wX09VVCwKKwlQVE43X09VVCwgUFRONl9PVVQsIFBUTjVfT1VULCBQVE40X09VVCwKKwlQVE4zX09VVCwgUFROMl9PVVQsIFBUTjFfT1VULCBQVE4wX09VVCwJUFRRNl9PVVQsIFBUUTVfT1VULCBQVFE0X09VVCwKKwlQVFEzX09VVCwgUFRRMl9PVVQsIFBUUTFfT1VULCBQVFEwX09VVCwKKwlQVFI0X09VVCwgUFRSM19PVVQsIFBUUjFfT1VULCBQVFIwX09VVCwKKwlQVFMzX09VVCwgUFRTMl9PVVQsIFBUUzBfT1VULAorCVBUVDRfT1VULCBQVFQzX09VVCwgUFRUMl9PVVQsIFBUVDBfT1VULAorCVBUVTRfT1VULCBQVFUzX09VVCwgUFRVMl9PVVQsIFBUVTBfT1VULAorCVBUVjRfT1VULCBQVFYzX09VVCwgUFRWMl9PVVQsIFBUVjFfT1VULCBQVFYwX09VVCwKKwlQVFc1X09VVCwgUFRXNF9PVVQsIFBUVzNfT1VULCBQVFcyX09VVCwgUFRXMV9PVVQsIFBUVzBfT1VULAorCVBUWDZfT1VULCBQVFg1X09VVCwgUFRYNF9PVVQsIFBUWDNfT1VULCBQVFgyX09VVCwgUFRYMV9PVVQsIFBUWDBfT1VULAorCVBUWTVfT1VULCBQVFk0X09VVCwgUFRZM19PVVQsIFBUWTJfT1VULCBQVFkxX09VVCwgUFRZMF9PVVQsCisJUElOTVVYX09VVFBVVF9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlTQ0lGMF9UWERfTUFSSywgU0NJRjBfUlhEX01BUkssCisJU0NJRjBfUlRTX01BUkssIFNDSUYwX0NUU19NQVJLLCBTQ0lGMF9TQ0tfTUFSSywKKwlTQ0lGMV9UWERfTUFSSywgU0NJRjFfUlhEX01BUkssCisJU0NJRjFfUlRTX01BUkssIFNDSUYxX0NUU19NQVJLLCBTQ0lGMV9TQ0tfTUFSSywKKwlTQ0lGMl9UWERfTUFSSywgU0NJRjJfUlhEX01BUkssCisJU0NJRjJfUlRTX01BUkssIFNDSUYyX0NUU19NQVJLLCBTQ0lGMl9TQ0tfTUFSSywKKwlTSU9UWERfTUFSSywgU0lPUlhEX01BUkssCisJU0lPRF9NQVJLLCBTSU9TVFJCMF9NQVJLLCBTSU9TVFJCMV9NQVJLLAorCVNJT1NDS19NQVJLLCBTSU9NQ0tfTUFSSywKKwlWSU9fRDE1X01BUkssIFZJT19EMTRfTUFSSywgVklPX0QxM19NQVJLLCBWSU9fRDEyX01BUkssCisJVklPX0QxMV9NQVJLLCBWSU9fRDEwX01BUkssIFZJT19EOV9NQVJLLCBWSU9fRDhfTUFSSywKKwlWSU9fRDdfTUFSSywgVklPX0Q2X01BUkssIFZJT19ENV9NQVJLLCBWSU9fRDRfTUFSSywKKwlWSU9fRDNfTUFSSywgVklPX0QyX01BUkssIFZJT19EMV9NQVJLLCBWSU9fRDBfTUFSSywKKwlWSU9fQ0xLX01BUkssIFZJT19WRF9NQVJLLCBWSU9fSERfTUFSSywgVklPX0ZMRF9NQVJLLAorCVZJT19DS09fTUFSSywgVklPX1NURVhfTUFSSywgVklPX1NURU1fTUFSSywgVklPX1ZEMl9NQVJLLAorCVZJT19IRDJfTUFSSywgVklPX0NMSzJfTUFSSywKKwlMQ0REMjNfTUFSSywgTENERDIyX01BUkssIExDREQyMV9NQVJLLCBMQ0REMjBfTUFSSywKKwlMQ0REMTlfTUFSSywgTENERDE4X01BUkssIExDREQxN19NQVJLLCBMQ0REMTZfTUFSSywKKwlMQ0REMTVfTUFSSywgTENERDE0X01BUkssIExDREQxM19NQVJLLCBMQ0REMTJfTUFSSywKKwlMQ0REMTFfTUFSSywgTENERDEwX01BUkssIExDREQ5X01BUkssIExDREQ4X01BUkssCisJTENERDdfTUFSSywgTENERDZfTUFSSywgTENERDVfTUFSSywgTENERDRfTUFSSywKKwlMQ0REM19NQVJLLCBMQ0REMl9NQVJLLCBMQ0REMV9NQVJLLCBMQ0REMF9NQVJLLAorCUxDRExDTEtfTUFSSywgTENERE9OX01BUkssIExDRFZDUFdDX01BUkssIExDRFZFUFdDX01BUkssCisJTENEVlNZTl9NQVJLLCBMQ0REQ0tfTUFSSywgTENESFNZTl9NQVJLLCBMQ0RESVNQX01BUkssCisJTENEUlNfTUFSSywgTENEQ1NfTUFSSywgTENEV1JfTUFSSywgTENEUkRfTUFSSywKKwlMQ0RET04yX01BUkssIExDRFZDUFdDMl9NQVJLLCBMQ0RWRVBXQzJfTUFSSywgTENEVlNZTjJfTUFSSywKKwlMQ0RDUzJfTUFSSywKKwlJT0lTMTZfTUFSSywgQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQlNfTUFSSywgQ1M2Ql9DRTFCX01BUkssIFdBSVRfTUFSSywgQ1M2QV9DRTJCX01BUkssCisJSFBENjNfTUFSSywgSFBENjJfTUFSSywgSFBENjFfTUFSSywgSFBENjBfTUFSSywKKwlIUEQ1OV9NQVJLLCBIUEQ1OF9NQVJLLCBIUEQ1N19NQVJLLCBIUEQ1Nl9NQVJLLAorCUhQRDU1X01BUkssIEhQRDU0X01BUkssIEhQRDUzX01BUkssIEhQRDUyX01BUkssCisJSFBENTFfTUFSSywgSFBENTBfTUFSSywgSFBENDlfTUFSSywgSFBENDhfTUFSSywKKwlIUERRTTdfTUFSSywgSFBEUU02X01BUkssIEhQRFFNNV9NQVJLLCBIUERRTTRfTUFSSywKKwlJUlEwX01BUkssIElSUTFfTUFSSywgSVJRMl9NQVJLLCBJUlEzX01BUkssCisJSVJRNF9NQVJLLCBJUlE1X01BUkssIElSUTZfTUFSSywgSVJRN19NQVJLLAorCVNESElDRF9NQVJLLCBTREhJV1BfTUFSSywgU0RISUQzX01BUkssIFNESElEMl9NQVJLLAorCVNESElEMV9NQVJLLCBTREhJRDBfTUFSSywgU0RISUNNRF9NQVJLLCBTREhJQ0xLX01BUkssCisJU0lVQU9MUl9NQVJLLCBTSVVBT0JUX01BUkssIFNJVUFJU0xEX01BUkssIFNJVUFJTFJfTUFSSywKKwlTSVVBSUJUX01BUkssIFNJVUFPU0xEX01BUkssIFNJVU1DS0FfTUFSSywgU0lVRkNLQV9NQVJLLAorCVNJVUJPTFJfTUFSSywgU0lVQk9CVF9NQVJLLCBTSVVCSVNMRF9NQVJLLCBTSVVCSUxSX01BUkssCisJU0lVQklCVF9NQVJLLCBTSVVCT1NMRF9NQVJLLCBTSVVNQ0tCX01BUkssIFNJVUZDS0JfTUFSSywKKwlBVURTWU5DX01BUkssIEFVREFUQTNfTUFSSywgQVVEQVRBMl9NQVJLLCBBVURBVEExX01BUkssCUFVREFUQTBfTUFSSywKKwlEQUNLX01BUkssIERSRVEwX01BUkssCisJRFZfQ0xLSV9NQVJLLCBEVl9DTEtfTUFSSywgRFZfSFNZTkNfTUFSSywgRFZfVlNZTkNfTUFSSywKKwlEVl9EMTVfTUFSSywgRFZfRDE0X01BUkssIERWX0QxM19NQVJLLCBEVl9EMTJfTUFSSywKKwlEVl9EMTFfTUFSSywgRFZfRDEwX01BUkssIERWX0Q5X01BUkssIERWX0Q4X01BUkssCisJRFZfRDdfTUFSSywgRFZfRDZfTUFSSywgRFZfRDVfTUFSSywgRFZfRDRfTUFSSywKKwlEVl9EM19NQVJLLCBEVl9EMl9NQVJLLCBEVl9EMV9NQVJLLCBEVl9EMF9NQVJLLAorCVNUQVRVUzBfTUFSSywgUERTVEFUVVNfTUFSSywKKwlTSU9GMF9NQ0tfTUFSSywgU0lPRjBfU0NLX01BUkssCisJU0lPRjBfU1lOQ19NQVJLLCBTSU9GMF9TUzFfTUFSSywgU0lPRjBfU1MyX01BUkssCisJU0lPRjBfVFhEX01BUkssCVNJT0YwX1JYRF9NQVJLLAorCVNJT0YxX01DS19NQVJLLCBTSU9GMV9TQ0tfTUFSSywKKwlTSU9GMV9TWU5DX01BUkssIFNJT0YxX1NTMV9NQVJLLCBTSU9GMV9TUzJfTUFSSywKKwlTSU9GMV9UWERfTUFSSywgU0lPRjFfUlhEX01BUkssCisJU0lNX0RfTUFSSywgU0lNX0NMS19NQVJLLCBTSU1fUlNUX01BUkssCisJVFNfU0RBVF9NQVJLLCBUU19TQ0tfTUFSSywgVFNfU0RFTl9NQVJLLCBUU19TUFNZTkNfTUFSSywKKwlJUkRBX0lOX01BUkssIElSREFfT1VUX01BUkssCisJVFBVVE9fTUFSSywKKwlGQ0VfTUFSSywgTkFGN19NQVJLLCBOQUY2X01BUkssIE5BRjVfTUFSSywgTkFGNF9NQVJLLAorCU5BRjNfTUFSSywgTkFGMl9NQVJLLCBOQUYxX01BUkssIE5BRjBfTUFSSywgRkNERV9NQVJLLAorCUZPRV9NQVJLLCBGU0NfTUFSSywgRldFX01BUkssIEZSQl9NQVJLLAorCUtFWUlOMF9NQVJLLCBLRVlJTjFfTUFSSywgS0VZSU4yX01BUkssIEtFWUlOM19NQVJLLCBLRVlJTjRfTUFSSywKKwlLRVlPVVQwX01BUkssIEtFWU9VVDFfTUFSSywgS0VZT1VUMl9NQVJLLCBLRVlPVVQzX01BUkssCisJS0VZT1VUNF9JTjZfTUFSSywgS0VZT1VUNV9JTjVfTUFSSywKKwlQSU5NVVhfTUFSS19FTkQsCisKKwlQSU5NVVhfRlVOQ1RJT05fQkVHSU4sCisJVklPX0Q3X1NDSUYxX1NDSywgVklPX0Q2X1NDSUYxX1JYRCwgVklPX0Q1X1NDSUYxX1RYRCwgVklPX0Q0LAorCVZJT19EMywgVklPX0QyLCBWSU9fRDEsIFZJT19EMF9MQ0RMQ0xLLAorCUhQRDU1LCBIUEQ1NCwgSFBENTMsIEhQRDUyLCBIUEQ1MSwgSFBENTAsIEhQRDQ5LCBIUEQ0OCwKKwlJT0lTMTYsIEhQRFFNNywgSFBEUU02LCBIUERRTTUsIEhQRFFNNCwKKwlTREhJQ0QsIFNESElXUCwgU0RISUQzLCBJUlEyX1NESElEMiwgU0RISUQxLCBTREhJRDAsIFNESElDTUQsIFNESElDTEssCisJQTI1LCBBMjQsIEEyMywgQTIyLCBJUlE1LCBJUlE0X0JTLAorCVBURjYsIFNJT1NDS19TSVVCT0JULCBTSU9TVFJCMV9TSVVCT0xSLAorCVNJT1NUUkIwX1NJVUJJQlQsIFNJT0RfU0lVQklMUiwgU0lPUlhEX1NJVUJJU0xELCBTSU9UWERfU0lVQk9TTEQsCisJQVVEU1lOQywgQVVEQVRBMywgQVVEQVRBMiwgQVVEQVRBMSwgQVVEQVRBMCwKKwlMQ0RWQ1BXQ19MQ0RWQ1BXQzIsIExDRFZTWU4yX0RBQ0ssIExDRFZTWU4sIExDRERJU1BfTENEUlMsCisJTENESFNZTl9MQ0RDUywgTENERE9OX0xDRERPTjIsIExDREQxN19EVl9IU1lOQywgTENERDE2X0RWX1ZTWU5DLAorCVNUQVRVUzAsIFBEU1RBVFVTLCBJUlExLCBJUlEwLAorCVNJVUFJTFJfU0lPRjFfU1MyLCBTSVVBSUJUX1NJT0YxX1NTMSwgU0lVQU9MUl9TSU9GMV9TWU5DLAorCVNJVUFPQlRfU0lPRjFfU0NLLCBTSVVBSVNMRF9TSU9GMV9SWEQsIFNJVUFPU0xEX1NJT0YxX1RYRCwgUFRLMCwKKwlMQ0REMTVfRFZfRDE1LCBMQ0REMTRfRFZfRDE0LCBMQ0REMTNfRFZfRDEzLCBMQ0REMTJfRFZfRDEyLAorCUxDREQxMV9EVl9EMTEsIExDREQxMF9EVl9EMTAsIExDREQ5X0RWX0Q5LCBMQ0REOF9EVl9EOCwKKwlMQ0REN19EVl9ENywgTENERDZfRFZfRDYsIExDREQ1X0RWX0Q1LCBMQ0RENF9EVl9ENCwKKwlMQ0REM19EVl9EMywgTENERDJfRFZfRDIsIExDREQxX0RWX0QxLCBMQ0REMF9EVl9EMCwKKwlIUEQ2MywgSFBENjIsIEhQRDYxLCBIUEQ2MCwgSFBENTksIEhQRDU4LCBIUEQ1NywgSFBENTYsCisJU0lPRjBfU1MyX1NJTV9SU1QsIFNJT0YwX1NTMV9UU19TUFNZTkMsIFNJT0YwX1NZTkNfVFNfU0RFTiwKKwlTSU9GMF9TQ0tfVFNfU0NLLCBQVFEyLCBQVFExLCBQVFEwLAorCUxDRFJELCBDUzZCX0NFMUJfTENEQ1MyLCBXQUlULCBMQ0REQ0tfTENEV1IsIExDRFZFUFdDX0xDRFZFUFdDMiwKKwlTQ0lGMF9DVFNfU0lVQUlTUEQsIFNDSUYwX1JUU19TSVVBT1NQRCwKKwlTQ0lGMF9TQ0tfVFBVVE8sIFNDSUYwX1JYRCwgU0NJRjBfVFhELAorCUZPRV9WSU9fVkQyLCBGV0UsIEZTQywgRFJFUTAsIEZDREUsCisJTkFGMl9WSU9fRDEwLCBOQUYxX1ZJT19EOSwgTkFGMF9WSU9fRDgsCisJRlJCX1ZJT19DTEsyLCBGQ0VfVklPX0hEMiwKKwlOQUY3X1ZJT19EMTUsIE5BRjZfVklPX0QxNCwgTkFGNV9WSU9fRDEzLCBOQUY0X1ZJT19EMTIsIE5BRjNfVklPX0QxMSwKKwlWSU9fRkxEX1NDSUYyX0NUUywgVklPX0NLT19TQ0lGMl9SVFMsIFZJT19TVEVYX1NDSUYyX1NDSywKKwlWSU9fU1RFTV9TQ0lGMl9UWEQsIFZJT19IRF9TQ0lGMl9SWEQsCisJVklPX1ZEX1NDSUYxX0NUUywgVklPX0NMS19TQ0lGMV9SVFMsCisJQ1M2QV9DRTJCLCBMQ0REMjMsIExDREQyMiwgTENERDIxLCBMQ0REMjAsCisJTENERDE5X0RWX0NMS0ksIExDREQxOF9EVl9DTEssCisJS0VZT1VUNV9JTjUsIEtFWU9VVDRfSU42LCBLRVlPVVQzLCBLRVlPVVQyLCBLRVlPVVQxLCBLRVlPVVQwLAorCUtFWUlONF9JUlE3LCBLRVlJTjMsIEtFWUlOMiwgS0VZSU4xLCBLRVlJTjBfSVJRNiwKKworCVBTQTE1X0tFWUlOMCwgUFNBMTVfSVJRNiwgUFNBMTRfS0VZSU40LCBQU0ExNF9JUlE3LAorCVBTQTlfSVJRNCwgUFNBOV9CUywgUFNBNF9JUlEyLCBQU0E0X1NESElEMiwKKwlQU0IxNV9TSU9UWEQsIFBTQjE1X1NJVUJPU0xELCBQU0IxNF9TSU9SWEQsIFBTQjE0X1NJVUJJU0xELAorCVBTQjEzX1NJT0QsIFBTQjEzX1NJVUJJTFIsIFBTQjEyX1NJT1NUUkIwLCBQU0IxMl9TSVVCSUJULAorCVBTQjExX1NJT1NUUkIxLCBQU0IxMV9TSVVCT0xSLCBQU0IxMF9TSU9TQ0ssIFBTQjEwX1NJVUJPQlQsCisJUFNCOV9TSU9NQ0ssIFBTQjlfU0lVTUNLQiwgUFNCOF9TSU9GMF9NQ0ssIFBTQjhfSVJRMywKKwlQU0I3X1NJT0YwX1RYRCwgUFNCN19JUkRBX09VVCwgUFNCNl9TSU9GMF9SWEQsIFBTQjZfSVJEQV9JTiwKKwlQU0I1X1NJT0YwX1NDSywgUFNCNV9UU19TQ0ssIFBTQjRfU0lPRjBfU1lOQywgUFNCNF9UU19TREVOLAorCVBTQjNfU0lPRjBfU1MxLCBQU0IzX1RTX1NQU1lOQywgUFNCMl9TSU9GMF9TUzIsIFBTQjJfU0lNX1JTVCwKKwlQU0IxX1NJVU1DS0EsIFBTQjFfU0lPRjFfTUNLLCBQU0IwX1NJVUFPU0xELCBQU0IwX1NJT0YxX1RYRCwKKwlQU0MxNV9TSVVBSVNMRCwgUFNDMTVfU0lPRjFfUlhELCBQU0MxNF9TSVVBT0JULCBQU0MxNF9TSU9GMV9TQ0ssCisJUFNDMTNfU0lVQU9MUiwgUFNDMTNfU0lPRjFfU1lOQywgUFNDMTJfU0lVQUlCVCwgUFNDMTJfU0lPRjFfU1MxLAorCVBTQzExX1NJVUFJTFIsIFBTQzExX1NJT0YxX1NTMiwgUFNDMF9OQUYsIFBTQzBfVklPLAorCVBTRDEzX1ZJTywgUFNEMTNfU0NJRjIsIFBTRDEyX1ZJTywgUFNEMTJfU0NJRjEsCisJUFNEMTFfVklPLCBQU0QxMV9TQ0lGMSwgUFNEMTBfVklPX0QwLCBQU0QxMF9MQ0RMQ0xLLAorCVBTRDlfU0lPTUNLX1NJVU1DS0IsIFBTRDlfU0lVRkNLQiwgUFNEOF9TQ0lGMF9TQ0ssIFBTRDhfVFBVVE8sCisJUFNEN19TQ0lGMF9SVFMsIFBTRDdfU0lVQU9TUEQsIFBTRDZfU0NJRjBfQ1RTLCBQU0Q2X1NJVUFJU1BELAorCVBTRDVfQ1M2Ql9DRTFCLCBQU0Q1X0xDRENTMiwKKwlQU0QzX0xDRFZFUFdDX0xDRFZDUFdDLCBQU0QzX0xDRFZFUFdDMl9MQ0RWQ1BXQzIsCisJUFNEMl9MQ0RET04sIFBTRDJfTENERE9OMiwgUFNEMF9MQ0REMTlfTENERDAsIFBTRDBfRFYsCisJUFNFMTVfU0lPRjBfTUNLX0lSUTMsIFBTRTE1X1NJTV9ELAorCVBTRTE0X1NJT0YwX1RYRF9JUkRBX09VVCwgUFNFMTRfU0lNX0NMSywKKwlQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwgUFNFMTNfVFNfU0RBVCwgUFNFMTJfTENEVlNZTjIsIFBTRTEyX0RBQ0ssCisJUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIFBTRTExX1NJVUZDS0EsCisJUFNFM19GTENUTCwgUFNFM19WSU8sIFBTRTJfTkFGMiwgUFNFMl9WSU9fRDEwLAorCVBTRTFfTkFGMSwgUFNFMV9WSU9fRDksIFBTRTBfTkFGMCwgUFNFMF9WSU9fRDgsCisKKwlISVpBMTRfS0VZU0MsIEhJWkExNF9ISVosCisJSElaQTEwX05BRiwgSElaQTEwX0hJWiwKKwlISVpBOV9WSU8sIEhJWkE5X0hJWiwKKwlISVpBOF9MQ0RDLCBISVpBOF9ISVosCisJSElaQTdfTENEQywgSElaQTdfSElaLAorCUhJWkE2X0xDREMsIEhJWkE2X0hJWiwKKwlISVpCMV9WSU8sIEhJWkIxX0hJWiwKKwlISVpCMF9WSU8sIEhJWkIwX0hJWiwKKwlISVpDMTVfSVJRNywgSElaQzE1X0hJWiwKKwlISVpDMTRfSVJRNiwgSElaQzE0X0hJWiwKKwlISVpDMTNfSVJRNSwgSElaQzEzX0hJWiwKKwlISVpDMTJfSVJRNCwgSElaQzEyX0hJWiwKKwlISVpDMTFfSVJRMywgSElaQzExX0hJWiwKKwlISVpDMTBfSVJRMiwgSElaQzEwX0hJWiwKKwlISVpDOV9JUlExLCBISVpDOV9ISVosCisJSElaQzhfSVJRMCwgSElaQzhfSElaLAorCU1TRUxCOV9WSU8sIE1TRUxCOV9WSU8yLAorCU1TRUxCOF9SR0IsIE1TRUxCOF9TWVMsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisJLyogUFRBICovCisJUElOTVVYX0RBVEEoUFRBN19EQVRBLCBQVEE3X0lOLCBQVEE3X0lOX1BELCBQVEE3X09VVCksCisJUElOTVVYX0RBVEEoUFRBNl9EQVRBLCBQVEE2X0lOLCBQVEE2X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEE1X0RBVEEsIFBUQTVfSU4sIFBUQTVfSU5fUEQsIFBUQTVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEE0X0RBVEEsIFBUQTRfSU4sIFBUQTRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTNfREFUQSwgUFRBM19JTiwgUFRBM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRBMl9EQVRBLCBQVEEyX0lOLCBQVEEyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEExX0RBVEEsIFBUQTFfSU4sIFBUQTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTBfREFUQSwgUFRBMF9JTiwgUFRBMF9JTl9QRCksCisKKwkvKiBQVEIgKi8KKwlQSU5NVVhfREFUQShQVEI3X0RBVEEsIFBUQjdfSU4sIFBUQjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI2X0RBVEEsIFBUQjZfSU4sIFBUQjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI1X0RBVEEsIFBUQjVfSU4sIFBUQjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI0X0RBVEEsIFBUQjRfSU4sIFBUQjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIzX0RBVEEsIFBUQjNfSU4sIFBUQjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIyX0RBVEEsIFBUQjJfSU4sIFBUQjJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIxX0RBVEEsIFBUQjFfSU4sIFBUQjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIwX0RBVEEsIFBUQjBfSU4sIFBUQjBfT1VUKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9EQVRBKFBUQzdfREFUQSwgUFRDN19JTiwgUFRDN19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRDNV9EQVRBLCBQVEM1X0lOLCBQVEM1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEM0X0RBVEEsIFBUQzRfSU4sIFBUQzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEMzX0RBVEEsIFBUQzNfSU4sIFBUQzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEMyX0RBVEEsIFBUQzJfSU4sIFBUQzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEMwX0RBVEEsIFBUQzBfSU4sIFBUQzBfT1VUKSwKKworCS8qIFBURCAqLworCVBJTk1VWF9EQVRBKFBURDdfREFUQSwgUFREN19JTiwgUFREN19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRENl9EQVRBLCBQVEQ2X09VVCwgUFRENl9JTiwgUFRENl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRENV9EQVRBLCBQVEQ1X09VVCwgUFRENV9JTiwgUFRENV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRENF9EQVRBLCBQVEQ0X09VVCwgUFRENF9JTiwgUFRENF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFREM19EQVRBLCBQVEQzX09VVCwgUFREM19JTiwgUFREM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFREMl9EQVRBLCBQVEQyX09VVCwgUFREMl9JTiwgUFREMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFREMV9EQVRBLCBQVEQxX09VVCwgUFREMV9JTiwgUFREMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFREMF9EQVRBLCBQVEQwX09VVCksCisKKwkvKiBQVEUgKi8KKwlQSU5NVVhfREFUQShQVEU3X0RBVEEsIFBURTdfT1VULCBQVEU3X0lOLCBQVEU3X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEU2X0RBVEEsIFBURTZfT1VULCBQVEU2X0lOLCBQVEU2X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfT1VULCBQVEU1X0lOLCBQVEU1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEU0X0RBVEEsIFBURTRfT1VULCBQVEU0X0lOLCBQVEU0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEUxX0RBVEEsIFBURTFfT1VULCBQVEUxX0lOLCBQVEUxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEUwX0RBVEEsIFBURTBfT1VULCBQVEUwX0lOLCBQVEUwX0lOX1BEKSwKKworCS8qIFBURiAqLworCVBJTk1VWF9EQVRBKFBURjZfREFUQSwgUFRGNl9PVVQsIFBURjZfSU4sIFBURjZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURjVfREFUQSwgUFRGNV9PVVQsIFBURjVfSU4sIFBURjVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURjRfREFUQSwgUFRGNF9PVVQsIFBURjRfSU4sIFBURjRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURjNfREFUQSwgUFRGM19PVVQsIFBURjNfSU4sIFBURjNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURjJfREFUQSwgUFRGMl9PVVQsIFBURjJfSU4sIFBURjJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURjFfREFUQSwgUFRGMV9JTiwgUFRGMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGMF9EQVRBLCBQVEYwX09VVCksCisKKwkvKiBQVEcgKi8KKwlQSU5NVVhfREFUQShQVEc0X0RBVEEsIFBURzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEczX0RBVEEsIFBURzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEcyX0RBVEEsIFBURzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEcxX0RBVEEsIFBURzFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEcwX0RBVEEsIFBURzBfT1VUKSwKKworCS8qIFBUSCAqLworCVBJTk1VWF9EQVRBKFBUSDdfREFUQSwgUFRIN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSDZfREFUQSwgUFRINl9PVVQsIFBUSDZfSU4sIFBUSDZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSDVfREFUQSwgUFRINV9PVVQsIFBUSDVfSU4sIFBUSDVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSDRfREFUQSwgUFRINF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSDNfREFUQSwgUFRIM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSDJfREFUQSwgUFRIMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSDFfREFUQSwgUFRIMV9PVVQsIFBUSDFfSU4sIFBUSDFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSDBfREFUQSwgUFRIMF9PVVQsIFBUSDBfSU4sIFBUSDBfSU5fUEQpLAorCisJLyogUFRKICovCisJUElOTVVYX0RBVEEoUFRKN19EQVRBLCBQVEo3X09VVCksCisJUElOTVVYX0RBVEEoUFRKNl9EQVRBLCBQVEo2X09VVCksCisJUElOTVVYX0RBVEEoUFRKNV9EQVRBLCBQVEo1X09VVCksCisJUElOTVVYX0RBVEEoUFRKMV9EQVRBLCBQVEoxX09VVCwgUFRKMV9JTiwgUFRKMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRKMF9EQVRBLCBQVEowX09VVCwgUFRKMF9JTiwgUFRKMF9JTl9QVSksCisKKwkvKiBQVEsgKi8KKwlQSU5NVVhfREFUQShQVEs2X0RBVEEsIFBUSzZfT1VULCBQVEs2X0lOLCBQVEs2X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEs1X0RBVEEsIFBUSzVfT1VULCBQVEs1X0lOLCBQVEs1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEs0X0RBVEEsIFBUSzRfT1VULCBQVEs0X0lOLCBQVEs0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEszX0RBVEEsIFBUSzNfT1VULCBQVEszX0lOLCBQVEszX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEsyX0RBVEEsIFBUSzJfSU4sIFBUSzJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzFfREFUQSwgUFRLMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzBfREFUQSwgUFRLMF9PVVQsIFBUSzBfSU4sIFBUSzBfSU5fUEQpLAorCisJLyogUFRMICovCisJUElOTVVYX0RBVEEoUFRMN19EQVRBLCBQVEw3X09VVCwgUFRMN19JTiwgUFRMN19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRMNl9EQVRBLCBQVEw2X09VVCwgUFRMNl9JTiwgUFRMNl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRMNV9EQVRBLCBQVEw1X09VVCwgUFRMNV9JTiwgUFRMNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRMNF9EQVRBLCBQVEw0X09VVCwgUFRMNF9JTiwgUFRMNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRMM19EQVRBLCBQVEwzX09VVCwgUFRMM19JTiwgUFRMM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRMMl9EQVRBLCBQVEwyX09VVCwgUFRMMl9JTiwgUFRMMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRMMV9EQVRBLCBQVEwxX09VVCwgUFRMMV9JTiwgUFRMMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRMMF9EQVRBLCBQVEwwX09VVCwgUFRMMF9JTiwgUFRMMF9JTl9QRCksCisKKwkvKiBQVE0gKi8KKwlQSU5NVVhfREFUQShQVE03X0RBVEEsIFBUTTdfT1VULCBQVE03X0lOLCBQVE03X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVE02X0RBVEEsIFBUTTZfT1VULCBQVE02X0lOLCBQVE02X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVE01X0RBVEEsIFBUTTVfT1VULCBQVE01X0lOLCBQVE01X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVE00X0RBVEEsIFBUTTRfT1VULCBQVE00X0lOLCBQVE00X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVE0zX0RBVEEsIFBUTTNfT1VULCBQVE0zX0lOLCBQVE0zX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVE0yX0RBVEEsIFBUTTJfT1VULCBQVE0yX0lOLCBQVE0yX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVE0xX0RBVEEsIFBUTTFfT1VULCBQVE0xX0lOLCBQVE0xX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVE0wX0RBVEEsIFBUTTBfT1VULCBQVE0wX0lOLCBQVE0wX0lOX1BEKSwKKworCS8qIFBUTiAqLworCVBJTk1VWF9EQVRBKFBUTjdfREFUQSwgUFRON19PVVQsIFBUTjdfSU4pLAorCVBJTk1VWF9EQVRBKFBUTjZfREFUQSwgUFRONl9PVVQsIFBUTjZfSU4pLAorCVBJTk1VWF9EQVRBKFBUTjVfREFUQSwgUFRONV9PVVQsIFBUTjVfSU4pLAorCVBJTk1VWF9EQVRBKFBUTjRfREFUQSwgUFRONF9PVVQsIFBUTjRfSU4pLAorCVBJTk1VWF9EQVRBKFBUTjNfREFUQSwgUFROM19PVVQsIFBUTjNfSU4pLAorCVBJTk1VWF9EQVRBKFBUTjJfREFUQSwgUFROMl9PVVQsIFBUTjJfSU4pLAorCVBJTk1VWF9EQVRBKFBUTjFfREFUQSwgUFROMV9PVVQsIFBUTjFfSU4pLAorCVBJTk1VWF9EQVRBKFBUTjBfREFUQSwgUFROMF9PVVQsIFBUTjBfSU4pLAorCisJLyogUFRRICovCisJUElOTVVYX0RBVEEoUFRRNl9EQVRBLCBQVFE2X09VVCksCisJUElOTVVYX0RBVEEoUFRRNV9EQVRBLCBQVFE1X09VVCwgUFRRNV9JTiwgUFRRNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRRNF9EQVRBLCBQVFE0X09VVCwgUFRRNF9JTiwgUFRRNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRRM19EQVRBLCBQVFEzX09VVCwgUFRRM19JTiwgUFRRM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRRMl9EQVRBLCBQVFEyX0lOLCBQVFEyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFExX0RBVEEsIFBUUTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFEwX0RBVEEsIFBUUTBfT1VULCBQVFEwX0lOLCBQVFEwX0lOX1BVKSwKKworCS8qIFBUUiAqLworCVBJTk1VWF9EQVRBKFBUUjRfREFUQSwgUFRSNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUjNfREFUQSwgUFRSM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRSMV9EQVRBLCBQVFIxX09VVCksCisJUElOTVVYX0RBVEEoUFRSMF9EQVRBLCBQVFIwX09VVCksCisKKwkvKiBQVFMgKi8KKwlQSU5NVVhfREFUQShQVFM0X0RBVEEsIFBUUzRfSU4sIFBUUzRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUUzNfREFUQSwgUFRTM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzJfREFUQSwgUFRTMl9PVVQsIFBUUzJfSU4sIFBUUzJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUUzFfREFUQSwgUFRTMV9JTiwgUFRTMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRTMF9EQVRBLCBQVFMwX09VVCksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfREFUQShQVFQ0X0RBVEEsIFBUVDRfT1VULCBQVFQ0X0lOLCBQVFQ0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFQzX0RBVEEsIFBUVDNfT1VULCBQVFQzX0lOLCBQVFQzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFQyX0RBVEEsIFBUVDJfT1VULCBQVFQyX0lOLCBQVFQyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFQxX0RBVEEsIFBUVDFfSU4sIFBUVDFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDBfREFUQSwgUFRUMF9PVVQpLAorCisJLyogUFRVICovCisJUElOTVVYX0RBVEEoUFRVNF9EQVRBLCBQVFU0X09VVCwgUFRVNF9JTiwgUFRVNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRVM19EQVRBLCBQVFUzX09VVCwgUFRVM19JTiwgUFRVM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRVMl9EQVRBLCBQVFUyX09VVCwgUFRVMl9JTiwgUFRVMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRVMV9EQVRBLCBQVFUxX0lOLCBQVFUxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUwX0RBVEEsIFBUVTBfT1VULCBQVFUwX0lOLCBQVFUwX0lOX1BEKSwKKworCS8qIFBUViAqLworCVBJTk1VWF9EQVRBKFBUVjRfREFUQSwgUFRWNF9PVVQsIFBUVjRfSU4sIFBUVjRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVjNfREFUQSwgUFRWM19PVVQsIFBUVjNfSU4sIFBUVjNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVjJfREFUQSwgUFRWMl9PVVQsIFBUVjJfSU4sIFBUVjJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVjFfREFUQSwgUFRWMV9PVVQsIFBUVjFfSU4sIFBUVjFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVjBfREFUQSwgUFRWMF9PVVQsIFBUVjBfSU4sIFBUVjBfSU5fUEQpLAorCisJLyogUFRXICovCisJUElOTVVYX0RBVEEoUFRXNl9EQVRBLCBQVFc2X0lOLCBQVFc2X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFc1X0RBVEEsIFBUVzVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc0X0RBVEEsIFBUVzRfT1VULCBQVFc0X0lOLCBQVFc0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFczX0RBVEEsIFBUVzNfT1VULCBQVFczX0lOLCBQVFczX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFcyX0RBVEEsIFBUVzJfT1VULCBQVFcyX0lOLCBQVFcyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFcxX0RBVEEsIFBUVzFfT1VULCBQVFcxX0lOLCBQVFcxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFcwX0RBVEEsIFBUVzBfT1VULCBQVFcwX0lOLCBQVFcwX0lOX1BEKSwKKworCS8qIFBUWCAqLworCVBJTk1VWF9EQVRBKFBUWDZfREFUQSwgUFRYNl9PVVQsIFBUWDZfSU4sIFBUWDZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUWDVfREFUQSwgUFRYNV9PVVQsIFBUWDVfSU4sIFBUWDVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUWDRfREFUQSwgUFRYNF9PVVQsIFBUWDRfSU4sIFBUWDRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUWDNfREFUQSwgUFRYM19PVVQsIFBUWDNfSU4sIFBUWDNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUWDJfREFUQSwgUFRYMl9PVVQsIFBUWDJfSU4sIFBUWDJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUWDFfREFUQSwgUFRYMV9PVVQsIFBUWDFfSU4sIFBUWDFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUWDBfREFUQSwgUFRYMF9PVVQsIFBUWDBfSU4sIFBUWDBfSU5fUEQpLAorCisJLyogUFRZICovCisJUElOTVVYX0RBVEEoUFRZNV9EQVRBLCBQVFk1X09VVCwgUFRZNV9JTiwgUFRZNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRZNF9EQVRBLCBQVFk0X09VVCwgUFRZNF9JTiwgUFRZNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRZM19EQVRBLCBQVFkzX09VVCwgUFRZM19JTiwgUFRZM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRZMl9EQVRBLCBQVFkyX09VVCwgUFRZMl9JTiwgUFRZMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRZMV9EQVRBLCBQVFkxX09VVCksCisJUElOTVVYX0RBVEEoUFRZMF9EQVRBLCBQVFkwX09VVCwgUFRZMF9JTiwgUFRZMF9JTl9QVSksCisKKwkvKiBQVFogKi8KKwlQSU5NVVhfREFUQShQVFo1X0RBVEEsIFBUWjVfSU4sIFBUWjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUWjRfREFUQSwgUFRaNF9JTiwgUFRaNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRaM19EQVRBLCBQVFozX0lOLCBQVFozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFoyX0RBVEEsIFBUWjJfSU4sIFBUWjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUWjFfREFUQSwgUFRaMV9JTiwgUFRaMV9JTl9QVSksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9EQVRBKFNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9UWEQpLAorCVBJTk1VWF9EQVRBKFNDSUYwX1JYRF9NQVJLLCBTQ0lGMF9SWEQpLAorCVBJTk1VWF9EQVRBKFNDSUYwX1JUU19NQVJLLCBQU0Q3X1NDSUYwX1JUUywgU0NJRjBfUlRTX1NJVUFPU1BEKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9DVFNfTUFSSywgUFNENl9TQ0lGMF9DVFMsIFNDSUYwX0NUU19TSVVBSVNQRCksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssIFBTRDhfU0NJRjBfU0NLLCBTQ0lGMF9TQ0tfVFBVVE8pLAorCisJLyogU0NJRjEgKi8KKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywgUFNEMTFfU0NJRjEsIFZJT19ENV9TQ0lGMV9UWEQpLAorCVBJTk1VWF9EQVRBKFNDSUYxX1JYRF9NQVJLLCBQU0QxMV9TQ0lGMSwgVklPX0Q2X1NDSUYxX1JYRCksCisJUElOTVVYX0RBVEEoU0NJRjFfUlRTX01BUkssIFBTRDEyX1NDSUYxLCBWSU9fQ0xLX1NDSUYxX1JUUyksCisJUElOTVVYX0RBVEEoU0NJRjFfQ1RTX01BUkssIFBTRDEyX1NDSUYxLCBWSU9fVkRfU0NJRjFfQ1RTKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9TQ0tfTUFSSywgUFNEMTFfU0NJRjEsIFZJT19EN19TQ0lGMV9TQ0spLAorCisJLyogU0NJRjIgKi8KKwlQSU5NVVhfREFUQShTQ0lGMl9UWERfTUFSSywgUFNEMTNfU0NJRjIsIFZJT19TVEVNX1NDSUYyX1RYRCksCisJUElOTVVYX0RBVEEoU0NJRjJfUlhEX01BUkssIFBTRDEzX1NDSUYyLCBWSU9fSERfU0NJRjJfUlhEKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9SVFNfTUFSSywgUFNEMTNfU0NJRjIsIFZJT19DS09fU0NJRjJfUlRTKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9DVFNfTUFSSywgUFNEMTNfU0NJRjIsIFZJT19GTERfU0NJRjJfQ1RTKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9TQ0tfTUFSSywgUFNEMTNfU0NJRjIsIFZJT19TVEVYX1NDSUYyX1NDSyksCisKKwkvKiBTSU8gKi8KKwlQSU5NVVhfREFUQShTSU9UWERfTUFSSywgUFNCMTVfU0lPVFhELCBTSU9UWERfU0lVQk9TTEQpLAorCVBJTk1VWF9EQVRBKFNJT1JYRF9NQVJLLCBQU0IxNF9TSU9SWEQsIFNJT1JYRF9TSVVCSVNMRCksCisJUElOTVVYX0RBVEEoU0lPRF9NQVJLLCBQU0IxM19TSU9ELCBTSU9EX1NJVUJJTFIpLAorCVBJTk1VWF9EQVRBKFNJT1NUUkIwX01BUkssIFBTQjEyX1NJT1NUUkIwLCBTSU9TVFJCMF9TSVVCSUJUKSwKKwlQSU5NVVhfREFUQShTSU9TVFJCMV9NQVJLLCBQU0IxMV9TSU9TVFJCMSwgU0lPU1RSQjFfU0lVQk9MUiksCisJUElOTVVYX0RBVEEoU0lPU0NLX01BUkssIFBTQjEwX1NJT1NDSywgU0lPU0NLX1NJVUJPQlQpLAorCVBJTk1VWF9EQVRBKFNJT01DS19NQVJLLCBQU0Q5X1NJT01DS19TSVVNQ0tCLCBQU0I5X1NJT01DSywgUFRGNiksCisKKwkvKiBDRVUgKi8KKwlQSU5NVVhfREFUQShWSU9fRDE1X01BUkssIFBTQzBfVklPLCBISVpBMTBfTkFGLCBOQUY3X1ZJT19EMTUpLAorCVBJTk1VWF9EQVRBKFZJT19EMTRfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjZfVklPX0QxNCksCisJUElOTVVYX0RBVEEoVklPX0QxM19NQVJLLCBQU0MwX1ZJTywgSElaQTEwX05BRiwgTkFGNV9WSU9fRDEzKSwKKwlQSU5NVVhfREFUQShWSU9fRDEyX01BUkssIFBTQzBfVklPLCBISVpBMTBfTkFGLCBOQUY0X1ZJT19EMTIpLAorCVBJTk1VWF9EQVRBKFZJT19EMTFfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjNfVklPX0QxMSksCisJUElOTVVYX0RBVEEoVklPX0QxMF9NQVJLLCBQU0UyX1ZJT19EMTAsIEhJWkIwX1ZJTywgTkFGMl9WSU9fRDEwKSwKKwlQSU5NVVhfREFUQShWSU9fRDlfTUFSSywgUFNFMV9WSU9fRDksIEhJWkIwX1ZJTywgTkFGMV9WSU9fRDkpLAorCVBJTk1VWF9EQVRBKFZJT19EOF9NQVJLLCBQU0UwX1ZJT19EOCwgSElaQjBfVklPLCBOQUYwX1ZJT19EOCksCisJUElOTVVYX0RBVEEoVklPX0Q3X01BUkssIFBTRDExX1ZJTywgVklPX0Q3X1NDSUYxX1NDSyksCisJUElOTVVYX0RBVEEoVklPX0Q2X01BUkssIFBTRDExX1ZJTywgVklPX0Q2X1NDSUYxX1JYRCksCisJUElOTVVYX0RBVEEoVklPX0Q1X01BUkssIFBTRDExX1ZJTywgVklPX0Q1X1NDSUYxX1RYRCksCisJUElOTVVYX0RBVEEoVklPX0Q0X01BUkssIFZJT19ENCksCisJUElOTVVYX0RBVEEoVklPX0QzX01BUkssIFZJT19EMyksCisJUElOTVVYX0RBVEEoVklPX0QyX01BUkssIFZJT19EMiksCisJUElOTVVYX0RBVEEoVklPX0QxX01BUkssIFZJT19EMSksCisJUElOTVVYX0RBVEEoVklPX0QwX01BUkssIFBTRDEwX1ZJT19EMCwgVklPX0QwX0xDRExDTEspLAorCVBJTk1VWF9EQVRBKFZJT19DTEtfTUFSSywgUFNEMTJfVklPLCBNU0VMQjlfVklPLCBWSU9fQ0xLX1NDSUYxX1JUUyksCisJUElOTVVYX0RBVEEoVklPX1ZEX01BUkssIFBTRDEyX1ZJTywgTVNFTEI5X1ZJTywgVklPX1ZEX1NDSUYxX0NUUyksCisJUElOTVVYX0RBVEEoVklPX0hEX01BUkssIFBTRDEzX1ZJTywgTVNFTEI5X1ZJTywgVklPX0hEX1NDSUYyX1JYRCksCisJUElOTVVYX0RBVEEoVklPX0ZMRF9NQVJLLCBQU0QxM19WSU8sIEhJWkE5X1ZJTywgVklPX0ZMRF9TQ0lGMl9DVFMpLAorCVBJTk1VWF9EQVRBKFZJT19DS09fTUFSSywgUFNEMTNfVklPLCBISVpBOV9WSU8sIFZJT19DS09fU0NJRjJfUlRTKSwKKwlQSU5NVVhfREFUQShWSU9fU1RFWF9NQVJLLCBQU0QxM19WSU8sIEhJWkE5X1ZJTywgVklPX1NURVhfU0NJRjJfU0NLKSwKKwlQSU5NVVhfREFUQShWSU9fU1RFTV9NQVJLLCBQU0QxM19WSU8sIEhJWkE5X1ZJTywgVklPX1NURU1fU0NJRjJfVFhEKSwKKwlQSU5NVVhfREFUQShWSU9fVkQyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKKwkJICAgIEhJWkIwX1ZJTywgRk9FX1ZJT19WRDIpLAorCVBJTk1VWF9EQVRBKFZJT19IRDJfTUFSSywgUFNFM19WSU8sIE1TRUxCOV9WSU8yLAorCQkgICAgSElaQjFfVklPLCBISVpCMV9WSU8sIEZDRV9WSU9fSEQyKSwKKwlQSU5NVVhfREFUQShWSU9fQ0xLMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCisJCSAgICBISVpCMV9WSU8sIEZSQl9WSU9fQ0xLMiksCisKKwkvKiBMQ0RDICovCisJUElOTVVYX0RBVEEoTENERDIzX01BUkssIEhJWkE4X0xDREMsIExDREQyMyksCisJUElOTVVYX0RBVEEoTENERDIyX01BUkssIEhJWkE4X0xDREMsIExDREQyMiksCisJUElOTVVYX0RBVEEoTENERDIxX01BUkssIEhJWkE4X0xDREMsIExDREQyMSksCisJUElOTVVYX0RBVEEoTENERDIwX01BUkssIEhJWkE4X0xDREMsIExDREQyMCksCisJUElOTVVYX0RBVEEoTENERDE5X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTlfRFZfQ0xLSSksCisJUElOTVVYX0RBVEEoTENERDE4X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMThfRFZfQ0xLKSwKKwlQSU5NVVhfREFUQShMQ0REMTdfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsCisJCSAgICBMQ0REMTdfRFZfSFNZTkMpLAorCVBJTk1VWF9EQVRBKExDREQxNl9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywKKwkJICAgIExDREQxNl9EVl9WU1lOQyksCisJUElOTVVYX0RBVEEoTENERDE1X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTVfRFZfRDE1KSwKKwlQSU5NVVhfREFUQShMQ0REMTRfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxNF9EVl9EMTQpLAorCVBJTk1VWF9EQVRBKExDREQxM19NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDEzX0RWX0QxMyksCisJUElOTVVYX0RBVEEoTENERDEyX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTJfRFZfRDEyKSwKKwlQSU5NVVhfREFUQShMQ0REMTFfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxMV9EVl9EMTEpLAorCVBJTk1VWF9EQVRBKExDREQxMF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDEwX0RWX0QxMCksCisJUElOTVVYX0RBVEEoTENERDlfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ5X0RWX0Q5KSwKKwlQSU5NVVhfREFUQShMQ0REOF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDhfRFZfRDgpLAorCVBJTk1VWF9EQVRBKExDREQ3X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REN19EVl9ENyksCisJUElOTVVYX0RBVEEoTENERDZfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ2X0RWX0Q2KSwKKwlQSU5NVVhfREFUQShMQ0RENV9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDVfRFZfRDUpLAorCVBJTk1VWF9EQVRBKExDREQ0X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0RENF9EVl9ENCksCisJUElOTVVYX0RBVEEoTENERDNfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQzX0RWX0QzKSwKKwlQSU5NVVhfREFUQShMQ0REMl9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDJfRFZfRDIpLAorCVBJTk1VWF9EQVRBKExDREQxX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMV9EVl9EMSksCisJUElOTVVYX0RBVEEoTENERDBfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQwX0RWX0QwKSwKKwlQSU5NVVhfREFUQShMQ0RMQ0xLX01BUkssIFBTRDEwX0xDRExDTEssIFZJT19EMF9MQ0RMQ0xLKSwKKwkvKiBNYWluIExDRCAqLworCVBJTk1VWF9EQVRBKExDRERPTl9NQVJLLCBQU0QyX0xDRERPTiwgSElaQTdfTENEQywgTENERE9OX0xDRERPTjIpLAorCVBJTk1VWF9EQVRBKExDRFZDUFdDX01BUkssIFBTRDNfTENEVkVQV0NfTENEVkNQV0MsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWQ1BXQ19MQ0RWQ1BXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZFUFdDX01BUkssIFBTRDNfTENEVkVQV0NfTENEVkNQV0MsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWRVBXQ19MQ0RWRVBXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZTWU5fTUFSSywgSElaQTdfTENEQywgTENEVlNZTiksCisJLyogTWFpbiBMQ0QgLSBSR0IgTW9kZSAqLworCVBJTk1VWF9EQVRBKExDRERDS19NQVJLLCBNU0VMQjhfUkdCLCBISVpBOF9MQ0RDLCBMQ0REQ0tfTENEV1IpLAorCVBJTk1VWF9EQVRBKExDREhTWU5fTUFSSywgTVNFTEI4X1JHQiwgSElaQTdfTENEQywgTENESFNZTl9MQ0RDUyksCisJUElOTVVYX0RBVEEoTENERElTUF9NQVJLLCBNU0VMQjhfUkdCLCBISVpBN19MQ0RDLCBMQ0RESVNQX0xDRFJTKSwKKwkvKiBNYWluIExDRCAtIFNZUyBNb2RlICovCisJUElOTVVYX0RBVEEoTENEUlNfTUFSSywgTVNFTEI4X1NZUywgSElaQTdfTENEQywgTENERElTUF9MQ0RSUyksCisJUElOTVVYX0RBVEEoTENEQ1NfTUFSSywgTVNFTEI4X1NZUywgSElaQTdfTENEQywgTENESFNZTl9MQ0RDUyksCisJUElOTVVYX0RBVEEoTENEV1JfTUFSSywgTVNFTEI4X1NZUywgSElaQThfTENEQywgTENERENLX0xDRFdSKSwKKwlQSU5NVVhfREFUQShMQ0RSRF9NQVJLLCBISVpBN19MQ0RDLCBMQ0RSRCksCisJLyogU3ViIExDRCAtIFNZUyBNb2RlICovCisJUElOTVVYX0RBVEEoTENERE9OMl9NQVJLLCBQU0QyX0xDRERPTjIsIEhJWkE3X0xDREMsIExDRERPTl9MQ0RET04yKSwKKwlQSU5NVVhfREFUQShMQ0RWQ1BXQzJfTUFSSywgUFNEM19MQ0RWRVBXQzJfTENEVkNQV0MyLAorCQkgICAgSElaQTZfTENEQywgTENEVkNQV0NfTENEVkNQV0MyKSwKKwlQSU5NVVhfREFUQShMQ0RWRVBXQzJfTUFSSywgUFNEM19MQ0RWRVBXQzJfTENEVkNQV0MyLAorCQkgICAgSElaQTZfTENEQywgTENEVkVQV0NfTENEVkVQV0MyKSwKKwlQSU5NVVhfREFUQShMQ0RWU1lOMl9NQVJLLCBQU0UxMl9MQ0RWU1lOMiwgSElaQThfTENEQywgTENEVlNZTjJfREFDSyksCisJUElOTVVYX0RBVEEoTENEQ1MyX01BUkssIFBTRDVfTENEQ1MyLCBDUzZCX0NFMUJfTENEQ1MyKSwKKworCS8qIEJTQyAqLworCVBJTk1VWF9EQVRBKElPSVMxNl9NQVJLLCBJT0lTMTYpLAorCVBJTk1VWF9EQVRBKEEyNV9NQVJLLCBBMjUpLAorCVBJTk1VWF9EQVRBKEEyNF9NQVJLLCBBMjQpLAorCVBJTk1VWF9EQVRBKEEyM19NQVJLLCBBMjMpLAorCVBJTk1VWF9EQVRBKEEyMl9NQVJLLCBBMjIpLAorCVBJTk1VWF9EQVRBKEJTX01BUkssIFBTQTlfQlMsIElSUTRfQlMpLAorCVBJTk1VWF9EQVRBKENTNkJfQ0UxQl9NQVJLLCBQU0Q1X0NTNkJfQ0UxQiwgQ1M2Ql9DRTFCX0xDRENTMiksCisJUElOTVVYX0RBVEEoV0FJVF9NQVJLLCBXQUlUKSwKKwlQSU5NVVhfREFUQShDUzZBX0NFMkJfTUFSSywgQ1M2QV9DRTJCKSwKKworCS8qIFNCU0MgKi8KKwlQSU5NVVhfREFUQShIUEQ2M19NQVJLLCBIUEQ2MyksCisJUElOTVVYX0RBVEEoSFBENjJfTUFSSywgSFBENjIpLAorCVBJTk1VWF9EQVRBKEhQRDYxX01BUkssIEhQRDYxKSwKKwlQSU5NVVhfREFUQShIUEQ2MF9NQVJLLCBIUEQ2MCksCisJUElOTVVYX0RBVEEoSFBENTlfTUFSSywgSFBENTkpLAorCVBJTk1VWF9EQVRBKEhQRDU4X01BUkssIEhQRDU4KSwKKwlQSU5NVVhfREFUQShIUEQ1N19NQVJLLCBIUEQ1NyksCisJUElOTVVYX0RBVEEoSFBENTZfTUFSSywgSFBENTYpLAorCVBJTk1VWF9EQVRBKEhQRDU1X01BUkssIEhQRDU1KSwKKwlQSU5NVVhfREFUQShIUEQ1NF9NQVJLLCBIUEQ1NCksCisJUElOTVVYX0RBVEEoSFBENTNfTUFSSywgSFBENTMpLAorCVBJTk1VWF9EQVRBKEhQRDUyX01BUkssIEhQRDUyKSwKKwlQSU5NVVhfREFUQShIUEQ1MV9NQVJLLCBIUEQ1MSksCisJUElOTVVYX0RBVEEoSFBENTBfTUFSSywgSFBENTApLAorCVBJTk1VWF9EQVRBKEhQRDQ5X01BUkssIEhQRDQ5KSwKKwlQSU5NVVhfREFUQShIUEQ0OF9NQVJLLCBIUEQ0OCksCisJUElOTVVYX0RBVEEoSFBEUU03X01BUkssIEhQRFFNNyksCisJUElOTVVYX0RBVEEoSFBEUU02X01BUkssIEhQRFFNNiksCisJUElOTVVYX0RBVEEoSFBEUU01X01BUkssIEhQRFFNNSksCisJUElOTVVYX0RBVEEoSFBEUU00X01BUkssIEhQRFFNNCksCisKKwkvKiBJUlEgKi8KKwlQSU5NVVhfREFUQShJUlEwX01BUkssIEhJWkM4X0lSUTAsIElSUTApLAorCVBJTk1VWF9EQVRBKElSUTFfTUFSSywgSElaQzlfSVJRMSwgSVJRMSksCisJUElOTVVYX0RBVEEoSVJRMl9NQVJLLCBQU0E0X0lSUTIsIEhJWkMxMF9JUlEyLCBJUlEyX1NESElEMiksCisJUElOTVVYX0RBVEEoSVJRM19NQVJLLCBQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNCOF9JUlEzLAorCQkgICAgSElaQzExX0lSUTMsIFBUUTApLAorCVBJTk1VWF9EQVRBKElSUTRfTUFSSywgUFNBOV9JUlE0LCBISVpDMTJfSVJRNCwgSVJRNF9CUyksCisJUElOTVVYX0RBVEEoSVJRNV9NQVJLLCBISVpDMTNfSVJRNSwgSVJRNSksCisJUElOTVVYX0RBVEEoSVJRNl9NQVJLLCBQU0ExNV9JUlE2LCBISVpDMTRfSVJRNiwgS0VZSU4wX0lSUTYpLAorCVBJTk1VWF9EQVRBKElSUTdfTUFSSywgUFNBMTRfSVJRNywgSElaQzE1X0lSUTcsIEtFWUlONF9JUlE3KSwKKworCS8qIFNESEkgKi8KKwlQSU5NVVhfREFUQShTREhJQ0RfTUFSSywgU0RISUNEKSwKKwlQSU5NVVhfREFUQShTREhJV1BfTUFSSywgU0RISVdQKSwKKwlQSU5NVVhfREFUQShTREhJRDNfTUFSSywgU0RISUQzKSwKKwlQSU5NVVhfREFUQShTREhJRDJfTUFSSywgUFNBNF9TREhJRDIsIElSUTJfU0RISUQyKSwKKwlQSU5NVVhfREFUQShTREhJRDFfTUFSSywgU0RISUQxKSwKKwlQSU5NVVhfREFUQShTREhJRDBfTUFSSywgU0RISUQwKSwKKwlQSU5NVVhfREFUQShTREhJQ01EX01BUkssIFNESElDTUQpLAorCVBJTk1VWF9EQVRBKFNESElDTEtfTUFSSywgU0RISUNMSyksCisKKwkvKiBTSVUgLSBQb3J0IEEgKi8KKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQzEzX1NJVUFPTFIsIFNJVUFPTFJfU0lPRjFfU1lOQyksCisJUElOTVVYX0RBVEEoU0lVQU9CVF9NQVJLLCBQU0MxNF9TSVVBT0JULCBTSVVBT0JUX1NJT0YxX1NDSyksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNDMTVfU0lVQUlTTEQsIFNJVUFJU0xEX1NJT0YxX1JYRCksCisJUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0MxMV9TSVVBSUxSLCBTSVVBSUxSX1NJT0YxX1NTMiksCisJUElOTVVYX0RBVEEoU0lVQUlCVF9NQVJLLCBQU0MxMl9TSVVBSUJULCBTSVVBSUJUX1NJT0YxX1NTMSksCisJUElOTVVYX0RBVEEoU0lVQU9TTERfTUFSSywgUFNCMF9TSVVBT1NMRCwgU0lVQU9TTERfU0lPRjFfVFhEKSwKKwlQSU5NVVhfREFUQShTSVVNQ0tBX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBQU0IxX1NJVU1DS0EsIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJVUZDS0FfTUFSSywgUFNFMTFfU0lVRkNLQSwgUFRLMCksCisKKwkvKiBTSVUgLSBQb3J0IEIgKi8KKwlQSU5NVVhfREFUQShTSVVCT0xSX01BUkssIFBTQjExX1NJVUJPTFIsIFNJT1NUUkIxX1NJVUJPTFIpLAorCVBJTk1VWF9EQVRBKFNJVUJPQlRfTUFSSywgUFNCMTBfU0lVQk9CVCwgU0lPU0NLX1NJVUJPQlQpLAorCVBJTk1VWF9EQVRBKFNJVUJJU0xEX01BUkssIFBTQjE0X1NJVUJJU0xELCBTSU9SWERfU0lVQklTTEQpLAorCVBJTk1VWF9EQVRBKFNJVUJJTFJfTUFSSywgUFNCMTNfU0lVQklMUiwgU0lPRF9TSVVCSUxSKSwKKwlQSU5NVVhfREFUQShTSVVCSUJUX01BUkssIFBTQjEyX1NJVUJJQlQsIFNJT1NUUkIwX1NJVUJJQlQpLAorCVBJTk1VWF9EQVRBKFNJVUJPU0xEX01BUkssIFBTQjE1X1NJVUJPU0xELCBTSU9UWERfU0lVQk9TTEQpLAorCVBJTk1VWF9EQVRBKFNJVU1DS0JfTUFSSywgUFNEOV9TSU9NQ0tfU0lVTUNLQiwgUFNCOV9TSVVNQ0tCLCBQVEY2KSwKKwlQSU5NVVhfREFUQShTSVVGQ0tCX01BUkssIFBTRDlfU0lVRkNLQiwgUFRGNiksCisKKwkvKiBBVUQgKi8KKwlQSU5NVVhfREFUQShBVURTWU5DX01BUkssIEFVRFNZTkMpLAorCVBJTk1VWF9EQVRBKEFVREFUQTNfTUFSSywgQVVEQVRBMyksCisJUElOTVVYX0RBVEEoQVVEQVRBMl9NQVJLLCBBVURBVEEyKSwKKwlQSU5NVVhfREFUQShBVURBVEExX01BUkssIEFVREFUQTEpLAorCVBJTk1VWF9EQVRBKEFVREFUQTBfTUFSSywgQVVEQVRBMCksCisKKwkvKiBETUFDICovCisJUElOTVVYX0RBVEEoREFDS19NQVJLLCBQU0UxMl9EQUNLLCBMQ0RWU1lOMl9EQUNLKSwKKwlQSU5NVVhfREFUQShEUkVRMF9NQVJLLCBEUkVRMCksCisKKwkvKiBWT1UgKi8KKwlQSU5NVVhfREFUQShEVl9DTEtJX01BUkssIFBTRDBfRFYsIExDREQxOV9EVl9DTEtJKSwKKwlQSU5NVVhfREFUQShEVl9DTEtfTUFSSywgUFNEMF9EViwgTENERDE4X0RWX0NMSyksCisJUElOTVVYX0RBVEEoRFZfSFNZTkNfTUFSSywgUFNEMF9EViwgTENERDE3X0RWX0hTWU5DKSwKKwlQSU5NVVhfREFUQShEVl9WU1lOQ19NQVJLLCBQU0QwX0RWLCBMQ0REMTZfRFZfVlNZTkMpLAorCVBJTk1VWF9EQVRBKERWX0QxNV9NQVJLLCBQU0QwX0RWLCBMQ0REMTVfRFZfRDE1KSwKKwlQSU5NVVhfREFUQShEVl9EMTRfTUFSSywgUFNEMF9EViwgTENERDE0X0RWX0QxNCksCisJUElOTVVYX0RBVEEoRFZfRDEzX01BUkssIFBTRDBfRFYsIExDREQxM19EVl9EMTMpLAorCVBJTk1VWF9EQVRBKERWX0QxMl9NQVJLLCBQU0QwX0RWLCBMQ0REMTJfRFZfRDEyKSwKKwlQSU5NVVhfREFUQShEVl9EMTFfTUFSSywgUFNEMF9EViwgTENERDExX0RWX0QxMSksCisJUElOTVVYX0RBVEEoRFZfRDEwX01BUkssIFBTRDBfRFYsIExDREQxMF9EVl9EMTApLAorCVBJTk1VWF9EQVRBKERWX0Q5X01BUkssIFBTRDBfRFYsIExDREQ5X0RWX0Q5KSwKKwlQSU5NVVhfREFUQShEVl9EOF9NQVJLLCBQU0QwX0RWLCBMQ0REOF9EVl9EOCksCisJUElOTVVYX0RBVEEoRFZfRDdfTUFSSywgUFNEMF9EViwgTENERDdfRFZfRDcpLAorCVBJTk1VWF9EQVRBKERWX0Q2X01BUkssIFBTRDBfRFYsIExDREQ2X0RWX0Q2KSwKKwlQSU5NVVhfREFUQShEVl9ENV9NQVJLLCBQU0QwX0RWLCBMQ0RENV9EVl9ENSksCisJUElOTVVYX0RBVEEoRFZfRDRfTUFSSywgUFNEMF9EViwgTENERDRfRFZfRDQpLAorCVBJTk1VWF9EQVRBKERWX0QzX01BUkssIFBTRDBfRFYsIExDREQzX0RWX0QzKSwKKwlQSU5NVVhfREFUQShEVl9EMl9NQVJLLCBQU0QwX0RWLCBMQ0REMl9EVl9EMiksCisJUElOTVVYX0RBVEEoRFZfRDFfTUFSSywgUFNEMF9EViwgTENERDFfRFZfRDEpLAorCVBJTk1VWF9EQVRBKERWX0QwX01BUkssIFBTRDBfRFYsIExDREQwX0RWX0QwKSwKKworCS8qIENQRyAqLworCVBJTk1VWF9EQVRBKFNUQVRVUzBfTUFSSywgU1RBVFVTMCksCisJUElOTVVYX0RBVEEoUERTVEFUVVNfTUFSSywgUERTVEFUVVMpLAorCisJLyogU0lPRjAgKi8KKwlQSU5NVVhfREFUQShTSU9GMF9NQ0tfTUFSSywgUFNFMTVfU0lPRjBfTUNLX0lSUTMsIFBTQjhfU0lPRjBfTUNLLCBQVFEwKSwKKwlQSU5NVVhfREFUQShTSU9GMF9TQ0tfTUFSSywgUFNCNV9TSU9GMF9TQ0ssIFNJT0YwX1NDS19UU19TQ0spLAorCVBJTk1VWF9EQVRBKFNJT0YwX1NZTkNfTUFSSywgUFNCNF9TSU9GMF9TWU5DLCBTSU9GMF9TWU5DX1RTX1NERU4pLAorCVBJTk1VWF9EQVRBKFNJT0YwX1NTMV9NQVJLLCBQU0IzX1NJT0YwX1NTMSwgU0lPRjBfU1MxX1RTX1NQU1lOQyksCisJUElOTVVYX0RBVEEoU0lPRjBfU1MyX01BUkssIFBTQjJfU0lPRjBfU1MyLCBTSU9GMF9TUzJfU0lNX1JTVCksCisJUElOTVVYX0RBVEEoU0lPRjBfVFhEX01BUkssIFBTRTE0X1NJT0YwX1RYRF9JUkRBX09VVCwKKwkJICAgIFBTQjdfU0lPRjBfVFhELCBQVFExKSwKKwlQSU5NVVhfREFUQShTSU9GMF9SWERfTUFSSywgUFNFMTNfU0lPRjBfUlhEX0lSREFfSU4sCisJCSAgICBQU0I2X1NJT0YwX1JYRCwgUFRRMiksCisKKwkvKiBTSU9GMSAqLworCVBJTk1VWF9EQVRBKFNJT0YxX01DS19NQVJLLCBQU0UxMV9TSVVNQ0tBX1NJT0YxX01DSywKKwkJICAgIFBTQjFfU0lPRjFfTUNLLCBQVEswKSwKKwlQSU5NVVhfREFUQShTSU9GMV9TQ0tfTUFSSywgUFNDMTRfU0lPRjFfU0NLLCBTSVVBT0JUX1NJT0YxX1NDSyksCisJUElOTVVYX0RBVEEoU0lPRjFfU1lOQ19NQVJLLCBQU0MxM19TSU9GMV9TWU5DLCBTSVVBT0xSX1NJT0YxX1NZTkMpLAorCVBJTk1VWF9EQVRBKFNJT0YxX1NTMV9NQVJLLCBQU0MxMl9TSU9GMV9TUzEsIFNJVUFJQlRfU0lPRjFfU1MxKSwKKwlQSU5NVVhfREFUQShTSU9GMV9TUzJfTUFSSywgUFNDMTFfU0lPRjFfU1MyLCBTSVVBSUxSX1NJT0YxX1NTMiksCisJUElOTVVYX0RBVEEoU0lPRjFfVFhEX01BUkssIFBTQjBfU0lPRjFfVFhELCBTSVVBT1NMRF9TSU9GMV9UWEQpLAorCVBJTk1VWF9EQVRBKFNJT0YxX1JYRF9NQVJLLCBQU0MxNV9TSU9GMV9SWEQsIFNJVUFJU0xEX1NJT0YxX1JYRCksCisKKwkvKiBTSU0gKi8KKwlQSU5NVVhfREFUQShTSU1fRF9NQVJLLCBQU0UxNV9TSU1fRCwgUFRRMCksCisJUElOTVVYX0RBVEEoU0lNX0NMS19NQVJLLCBQU0UxNF9TSU1fQ0xLLCBQVFExKSwKKwlQSU5NVVhfREFUQShTSU1fUlNUX01BUkssIFBTQjJfU0lNX1JTVCwgU0lPRjBfU1MyX1NJTV9SU1QpLAorCisJLyogVFNJRiAqLworCVBJTk1VWF9EQVRBKFRTX1NEQVRfTUFSSywgUFNFMTNfVFNfU0RBVCwgUFRRMiksCisJUElOTVVYX0RBVEEoVFNfU0NLX01BUkssIFBTQjVfVFNfU0NLLCBTSU9GMF9TQ0tfVFNfU0NLKSwKKwlQSU5NVVhfREFUQShUU19TREVOX01BUkssIFBTQjRfVFNfU0RFTiwgU0lPRjBfU1lOQ19UU19TREVOKSwKKwlQSU5NVVhfREFUQShUU19TUFNZTkNfTUFSSywgUFNCM19UU19TUFNZTkMsIFNJT0YwX1NTMV9UU19TUFNZTkMpLAorCisJLyogSVJEQSAqLworCVBJTk1VWF9EQVRBKElSREFfSU5fTUFSSywgUFNFMTNfU0lPRjBfUlhEX0lSREFfSU4sIFBTQjZfSVJEQV9JTiwgUFRRMiksCisJUElOTVVYX0RBVEEoSVJEQV9PVVRfTUFSSywgUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULAorCQkgICAgUFNCN19JUkRBX09VVCwgUFRRMSksCisKKwkvKiBUUFUgKi8KKwlQSU5NVVhfREFUQShUUFVUT19NQVJLLCBQU0Q4X1RQVVRPLCBTQ0lGMF9TQ0tfVFBVVE8pLAorCisJLyogRkxDVEwgKi8KKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUFNFM19GTENUTCwgRkNFX1ZJT19IRDIpLAorCVBJTk1VWF9EQVRBKE5BRjdfTUFSSywgUFNDMF9OQUYsIEhJWkExMF9OQUYsIE5BRjdfVklPX0QxNSksCisJUElOTVVYX0RBVEEoTkFGNl9NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGNl9WSU9fRDE0KSwKKwlQSU5NVVhfREFUQShOQUY1X01BUkssIFBTQzBfTkFGLCBISVpBMTBfTkFGLCBOQUY1X1ZJT19EMTMpLAorCVBJTk1VWF9EQVRBKE5BRjRfTUFSSywgUFNDMF9OQUYsIEhJWkExMF9OQUYsIE5BRjRfVklPX0QxMiksCisJUElOTVVYX0RBVEEoTkFGM19NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGM19WSU9fRDExKSwKKwlQSU5NVVhfREFUQShOQUYyX01BUkssIFBTRTJfTkFGMiwgSElaQjBfVklPLCBOQUYyX1ZJT19EMTApLAorCVBJTk1VWF9EQVRBKE5BRjFfTUFSSywgUFNFMV9OQUYxLCBISVpCMF9WSU8sIE5BRjFfVklPX0Q5KSwKKwlQSU5NVVhfREFUQShOQUYwX01BUkssIFBTRTBfTkFGMCwgSElaQjBfVklPLCBOQUYwX1ZJT19EOCksCisJUElOTVVYX0RBVEEoRkNERV9NQVJLLCBGQ0RFKSwKKwlQSU5NVVhfREFUQShGT0VfTUFSSywgUFNFM19GTENUTCwgSElaQjBfVklPLCBGT0VfVklPX1ZEMiksCisJUElOTVVYX0RBVEEoRlNDX01BUkssIEZTQyksCisJUElOTVVYX0RBVEEoRldFX01BUkssIEZXRSksCisJUElOTVVYX0RBVEEoRlJCX01BUkssIFBTRTNfRkxDVEwsIEZSQl9WSU9fQ0xLMiksCisKKwkvKiBLRVlTQyAqLworCVBJTk1VWF9EQVRBKEtFWUlOMF9NQVJLLCBQU0ExNV9LRVlJTjAsIEhJWkMxNF9JUlE2LCBLRVlJTjBfSVJRNiksCisJUElOTVVYX0RBVEEoS0VZSU4xX01BUkssIEhJWkExNF9LRVlTQywgS0VZSU4xKSwKKwlQSU5NVVhfREFUQShLRVlJTjJfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlJTjIpLAorCVBJTk1VWF9EQVRBKEtFWUlOM19NQVJLLCBISVpBMTRfS0VZU0MsIEtFWUlOMyksCisJUElOTVVYX0RBVEEoS0VZSU40X01BUkssIFBTQTE0X0tFWUlONCwgSElaQzE1X0lSUTcsIEtFWUlONF9JUlE3KSwKKwlQSU5NVVhfREFUQShLRVlPVVQwX01BUkssIEhJWkExNF9LRVlTQywgS0VZT1VUMCksCisJUElOTVVYX0RBVEEoS0VZT1VUMV9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDEpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDJfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQyKSwKKwlQSU5NVVhfREFUQShLRVlPVVQzX01BUkssIEhJWkExNF9LRVlTQywgS0VZT1VUMyksCisJUElOTVVYX0RBVEEoS0VZT1VUNF9JTjZfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQ0X0lONiksCisJUElOTVVYX0RBVEEoS0VZT1VUNV9JTjVfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQ1X0lONSksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9ncGlvIHBpbm11eF9ncGlvc1tdID0geworCS8qIFBUQSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRBNywgUFRBN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTYsIFBUQTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE1LCBQVEE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNCwgUFRBNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTMsIFBUQTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEyLCBQVEEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMSwgUFRBMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTAsIFBUQTBfREFUQSksCisKKwkvKiBQVEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQjcsIFBUQjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI2LCBQVEI2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNSwgUFRCNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjQsIFBUQjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIzLCBQVEIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMiwgUFRCMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjEsIFBUQjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIwLCBQVEIwX0RBVEEpLAorCisJLyogUFRDICovCisJUElOTVVYX0dQSU8oR1BJT19QVEM3LCBQVEM3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNSwgUFRDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzQsIFBUQzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMzLCBQVEMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMiwgUFRDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU3LCBQVEU3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNiwgUFRFNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTUsIFBURTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEU0LCBQVEU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMSwgUFRFMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTAsIFBURTBfREFUQSksCisKKwkvKiBQVEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURjYsIFBURjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY1LCBQVEY1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNCwgUFRGNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjMsIFBURjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYyLCBQVEYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMSwgUFRGMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjAsIFBURjBfREFUQSksCisKKwkvKiBQVEcgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURzQsIFBURzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEczLCBQVEczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMiwgUFRHMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzEsIFBURzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcwLCBQVEcwX0RBVEEpLAorCisJLyogUFRIICovCisJUElOTVVYX0dQSU8oR1BJT19QVEg3LCBQVEg3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINiwgUFRINl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDUsIFBUSDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg0LCBQVEg0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMywgUFRIM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDIsIFBUSDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgxLCBQVEgxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMCwgUFRIMF9EQVRBKSwKKworCS8qIFBUSiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRKNywgUFRKN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjYsIFBUSjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEo1LCBQVEo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMSwgUFRKMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjAsIFBUSjBfREFUQSksCisKKwkvKiBQVEsgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSzYsIFBUSzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs1LCBQVEs1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLNCwgUFRLNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzMsIFBUSzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEsyLCBQVEsyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMSwgUFRLMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzAsIFBUSzBfREFUQSksCisKKwkvKiBQVEwgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTDcsIFBUTDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw2LCBQVEw2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNSwgUFRMNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDQsIFBUTDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwzLCBQVEwzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMiwgUFRMMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDEsIFBUTDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwwLCBQVEwwX0RBVEEpLAorCisJLyogUFRNICovCisJUElOTVVYX0dQSU8oR1BJT19QVE03LCBQVE03X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNiwgUFRNNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTUsIFBUTTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE00LCBQVE00X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMywgUFRNM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTIsIFBUTTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0xLCBQVE0xX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMCwgUFRNMF9EQVRBKSwKKworCS8qIFBUTiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRONywgUFRON19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjYsIFBUTjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE41LCBQVE41X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONCwgUFRONF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjMsIFBUTjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4yLCBQVE4yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMSwgUFROMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjAsIFBUTjBfREFUQSksCisKKwkvKiBQVFEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUTYsIFBUUTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFE1LCBQVFE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRNCwgUFRRNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTMsIFBUUTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFEyLCBQVFEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMSwgUFRRMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTAsIFBUUTBfREFUQSksCisKKwkvKiBQVFIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUjQsIFBUUjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIzLCBQVFIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMiwgUFRSMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjEsIFBUUjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIwLCBQVFIwX0RBVEEpLAorCisJLyogUFRTICovCisJUElOTVVYX0dQSU8oR1BJT19QVFM0LCBQVFM0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMywgUFRTM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzIsIFBUUzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMxLCBQVFMxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMCwgUFRTMF9EQVRBKSwKKworCS8qIFBUVCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRUNCwgUFRUNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDMsIFBUVDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQyLCBQVFQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMSwgUFRUMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDAsIFBUVDBfREFUQSksCisKKwkvKiBQVFUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVTQsIFBUVTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUzLCBQVFUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMiwgUFRVMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTEsIFBUVTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUwLCBQVFUwX0RBVEEpLAorCisJLyogUFRWICovCisJUElOTVVYX0dQSU8oR1BJT19QVFY0LCBQVFY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMywgUFRWM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjIsIFBUVjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYxLCBQVFYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMCwgUFRWMF9EQVRBKSwKKworCS8qIFBUVyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRXNiwgUFRXNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzUsIFBUVzVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFc0LCBQVFc0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMywgUFRXM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzIsIFBUVzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcxLCBQVFcxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMCwgUFRXMF9EQVRBKSwKKworCS8qIFBUWCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRYNiwgUFRYNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDUsIFBUWDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFg0LCBQVFg0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMywgUFRYM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDIsIFBUWDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgxLCBQVFgxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMCwgUFRYMF9EQVRBKSwKKworCS8qIFBUWSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRZNSwgUFRZNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTQsIFBUWTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkzLCBQVFkzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMiwgUFRZMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTEsIFBUWTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkwLCBQVFkwX0RBVEEpLAorCisJLyogUFRaICovCisJUElOTVVYX0dQSU8oR1BJT19QVFo1LCBQVFo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaNCwgUFRaNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjMsIFBUWjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFoyLCBQVFoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMSwgUFRaMV9EQVRBKSwKKworCS8qIFNDSUYwICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9UWEQsIFNDSUYwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JYRCwgU0NJRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlRTLCBTQ0lGMF9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9DVFMsIFNDSUYwX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1NDSywgU0NJRjBfU0NLX01BUkspLAorCisJLyogU0NJRjEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1RYRCwgU0NJRjFfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlhELCBTQ0lGMV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9SVFMsIFNDSUYxX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX0NUUywgU0NJRjFfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfU0NLLCBTQ0lGMV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfVFhELCBTQ0lGMl9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9SWEQsIFNDSUYyX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1JUUywgU0NJRjJfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfQ1RTLCBTQ0lGMl9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9TQ0ssIFNDSUYyX1NDS19NQVJLKSwKKworCS8qIFNJTyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPVFhELCBTSU9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9SWEQsIFNJT1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0QsIFNJT0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9TVFJCMCwgU0lPU1RSQjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9TVFJCMSwgU0lPU1RSQjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9TQ0ssIFNJT1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT01DSywgU0lPTUNLX01BUkspLAorCisJLyogQ0VVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDE1LCBWSU9fRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxNCwgVklPX0QxNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTMsIFZJT19EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEyLCBWSU9fRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMSwgVklPX0QxMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTAsIFZJT19EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDksIFZJT19EOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EOCwgVklPX0Q4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q3LCBWSU9fRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDYsIFZJT19ENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENSwgVklPX0Q1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q0LCBWSU9fRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDMsIFZJT19EM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMiwgVklPX0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxLCBWSU9fRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDAsIFZJT19EMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEssIFZJT19DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fVkQsIFZJT19WRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19IRCwgVklPX0hEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0ZMRCwgVklPX0ZMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DS08sIFZJT19DS09fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fU1RFWCwgVklPX1NURVhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fU1RFTSwgVklPX1NURU1fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fVkQyLCBWSU9fVkQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hEMiwgVklPX0hEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEsyLCBWSU9fQ0xLMl9NQVJLKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMywgTENERDIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIyLCBMQ0REMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjEsIExDREQyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMCwgTENERDIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE5LCBMQ0REMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTgsIExDREQxOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNywgTENERDE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE2LCBMQ0REMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTUsIExDREQxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNCwgTENERDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEzLCBMQ0REMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTIsIExDREQxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMSwgTENERDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEwLCBMQ0REMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOSwgTENERDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOCwgTENERDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENywgTENERDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENiwgTENERDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENSwgTENERDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENCwgTENERDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMywgTENERDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMiwgTENERDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMSwgTENERDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMCwgTENERDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RMQ0xLLCBMQ0RMQ0xLX01BUkspLAorCS8qIE1haW4gTENEICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RET04sIExDRERPTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZDUFdDLCBMQ0RWQ1BXQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZFUFdDLCBMQ0RWRVBXQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZTWU4sIExDRFZTWU5fTUFSSyksCisJLyogTWFpbiBMQ0QgLSBSR0IgTW9kZSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERENLLCBMQ0REQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RIU1lOLCBMQ0RIU1lOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERElTUCwgTENERElTUF9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFNZUyBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RSUywgTENEUlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RDUywgTENEQ1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RXUiwgTENEV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RSRCwgTENEUkRfTUFSSyksCisJLyogU3ViIExDRCAtIFNZUyBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RET04yLCBMQ0RET04yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkNQV0MyLCBMQ0RWQ1BXQzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RWRVBXQzIsIExDRFZFUFdDMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZTWU4yLCBMQ0RWU1lOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRENTMiwgTENEQ1MyX01BUkspLAorCisJLyogQlNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0lTMTYsIElPSVMxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyNSwgQTI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI0LCBBMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjMsIEEyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMiwgQTIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQlMsIEJTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M2Ql9DRTFCLCBDUzZCX0NFMUJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XQUlULCBXQUlUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M2QV9DRTJCLCBDUzZBX0NFMkJfTUFSSyksCisKKwkvKiBTQlNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ2MywgSFBENjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ2MiwgSFBENjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ2MSwgSFBENjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ2MCwgSFBENjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1OSwgSFBENTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1OCwgSFBENThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1NywgSFBENTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1NiwgSFBENTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1NSwgSFBENTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1NCwgSFBENTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1MywgSFBENTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1MiwgSFBENTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1MSwgSFBENTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ1MCwgSFBENTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ0OSwgSFBENDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUEQ0OCwgSFBENDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUERRTTcsIEhQRFFNN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRFFNNiwgSFBEUU02X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFBEUU01LCBIUERRTTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUERRTTQsIEhQRFFNNF9NQVJLKSwKKworCS8qIElSUSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMCwgSVJRMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTEsIElSUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyLCBJUlEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMywgSVJRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1LCBJUlE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNiwgSVJRNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTcsIElSUTdfTUFSSyksCisKKwkvKiBTREhJICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJQ0QsIFNESElDRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElXUCwgU0RISVdQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISUQzLCBTREhJRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJRDIsIFNESElEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElEMSwgU0RISUQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISUQwLCBTREhJRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJQ01ELCBTREhJQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISUNMSywgU0RISUNMS19NQVJLKSwKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9MUiwgU0lVQU9MUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFPQlQsIFNJVUFPQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSVNMRCwgU0lVQUlTTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSUxSLCBTSVVBSUxSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQUlCVCwgU0lVQUlCVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFPU0xELCBTSVVBT1NMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVU1DS0EsIFNJVU1DS0FfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVGQ0tBLCBTSVVGQ0tBX01BUkspLAorCisJLyogU0lVIC0gUG9ydCBCICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0xSLCBTSVVCT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk9CVCwgU0lVQk9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJU0xELCBTSVVCSVNMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJTFIsIFNJVUJJTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCSUJULCBTSVVCSUJUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk9TTEQsIFNJVUJPU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVTUNLQiwgU0lVTUNLQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUZDS0IsIFNJVUZDS0JfTUFSSyksCisKKwkvKiBBVUQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEzLCBBVURBVEEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMiwgQVVEQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTEsIEFVREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEwLCBBVURBVEEwX01BUkspLAorCisJLyogRE1BQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSywgREFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwLCBEUkVRMF9NQVJLKSwKKworCS8qIFZPVSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfQ0xLSSwgRFZfQ0xLSV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0NMSywgRFZfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfSFNZTkMsIERWX0hTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfVlNZTkMsIERWX1ZTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDE1LCBEVl9EMTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTQsIERWX0QxNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMywgRFZfRDEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEyLCBEVl9EMTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTEsIERWX0QxMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMCwgRFZfRDEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDksIERWX0Q5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDgsIERWX0Q4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDcsIERWX0Q3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDYsIERWX0Q2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDUsIERWX0Q1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDQsIERWX0Q0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDMsIERWX0QzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDIsIERWX0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEsIERWX0QxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDAsIERWX0QwX01BUkspLAorCisJLyogQ1BHICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TVEFUVVMwLCBTVEFUVVMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUERTVEFUVVMsIFBEU1RBVFVTX01BUkspLAorCisJLyogU0lPRjAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX01DSywgU0lPRjBfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU0NLLCBTSU9GMF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TWU5DLCBTSU9GMF9TWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU1MxLCBTSU9GMF9TUzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TUzIsIFNJT0YwX1NTMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1RYRCwgU0lPRjBfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfUlhELCBTSU9GMF9SWERfTUFSSyksCisKKwkvKiBTSU9GMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfTUNLLCBTSU9GMV9NQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9TQ0ssIFNJT0YxX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NZTkMsIFNJT0YxX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9TUzEsIFNJT0YxX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NTMiwgU0lPRjFfU1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfVFhELCBTSU9GMV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9SWEQsIFNJT0YxX1JYRF9NQVJLKSwKKworCS8qIFNJTSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX0QsIFNJTV9EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX0NMSywgU0lNX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJTV9SU1QsIFNJTV9SU1RfTUFSSyksCisKKwkvKiBUU0lGICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TREFULCBUU19TREFUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFNfU0NLLCBUU19TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TREVOLCBUU19TREVOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFNfU1BTWU5DLCBUU19TUFNZTkNfTUFSSyksCisKKwkvKiBJUkRBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX0lOLCBJUkRBX0lOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJEQV9PVVQsIElSREFfT1VUX01BUkspLAorCisJLyogVFBVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVUTywgVFBVVE9fTUFSSyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNFLCBGQ0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY3LCBOQUY3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNiwgTkFGNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjUsIE5BRjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY0LCBOQUY0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMywgTkFGM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjIsIE5BRjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYxLCBOQUYxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMCwgTkFGMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDREUsIEZDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GT0UsIEZPRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZTQywgRlNDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRldFLCBGV0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsIEZSQl9NQVJLKSwKKworCS8qIEtFWVNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjAsIEtFWUlOMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMSwgS0VZSU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4yLCBLRVlJTjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjMsIEtFWUlOM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlONCwgS0VZSU40X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMCwgS0VZT1VUMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDEsIEtFWU9VVDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQyLCBLRVlPVVQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMywgS0VZT1VUM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDRfSU42LCBLRVlPVVQ0X0lONl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDVfSU41LCBLRVlPVVQ1X0lONV9NQVJLKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJeyBQSU5NVVhfQ0ZHX1JFRygiUEFDUiIsIDB4YTQwNTAxMDAsIDE2LCAyKSB7CisJCVZJT19EN19TQ0lGMV9TQ0ssIFBUQTdfT1VULCBQVEE3X0lOX1BELCBQVEE3X0lOLAorCQlWSU9fRDZfU0NJRjFfUlhELCAwLCBQVEE2X0lOX1BELCBQVEE2X0lOLAorCQlWSU9fRDVfU0NJRjFfVFhELCBQVEE1X09VVCwgUFRBNV9JTl9QRCwgUFRBNV9JTiwKKwkJVklPX0Q0LCAwLCBQVEE0X0lOX1BELCBQVEE0X0lOLAorCQlWSU9fRDMsIDAsIFBUQTNfSU5fUEQsIFBUQTNfSU4sCisJCVZJT19EMiwgMCwgUFRBMl9JTl9QRCwgUFRBMl9JTiwKKwkJVklPX0QxLCAwLCBQVEExX0lOX1BELCBQVEExX0lOLAorCQlWSU9fRDBfTENETENMSywgMCwgUFRBMF9JTl9QRCwgUFRBMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSIiwgMHhhNDA1MDEwMiwgMTYsIDIpIHsKKwkJSFBENTUsIFBUQjdfT1VULCAwLCBQVEI3X0lOLAorCQlIUEQ1NCwgUFRCNl9PVVQsIDAsIFBUQjZfSU4sCisJCUhQRDUzLCBQVEI1X09VVCwgMCwgUFRCNV9JTiwKKwkJSFBENTIsIFBUQjRfT1VULCAwLCBQVEI0X0lOLAorCQlIUEQ1MSwgUFRCM19PVVQsIDAsIFBUQjNfSU4sCisJCUhQRDUwLCBQVEIyX09VVCwgMCwgUFRCMl9JTiwKKwkJSFBENDksIFBUQjFfT1VULCAwLCBQVEIxX0lOLAorCQlIUEQ0OCwgUFRCMF9PVVQsIDAsIFBUQjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUiIsIDB4YTQwNTAxMDQsIDE2LCAyKSB7CisJCTAsIDAsIFBUQzdfSU5fUFUsIFBUQzdfSU4sCisJCTAsIDAsIDAsIDAsCisJCUlPSVMxNiwgMCwgUFRDNV9JTl9QVSwgUFRDNV9JTiwKKwkJSFBEUU03LCBQVEM0X09VVCwgMCwgUFRDNF9JTiwKKwkJSFBEUU02LCBQVEMzX09VVCwgMCwgUFRDM19JTiwKKwkJSFBEUU01LCBQVEMyX09VVCwgMCwgUFRDMl9JTiwKKwkJMCwgMCwgMCwgMCwKKwkJSFBEUU00LCBQVEMwX09VVCwgMCwgUFRDMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhhNDA1MDEwNiwgMTYsIDIpIHsKKwkJU0RISUNELCAwLCBQVEQ3X0lOX1BVLCBQVEQ3X0lOLAorCQlTREhJV1AsIFBURDZfT1VULCBQVEQ2X0lOX1BVLCBQVEQ2X0lOLAorCQlTREhJRDMsIFBURDVfT1VULCBQVEQ1X0lOX1BVLCBQVEQ1X0lOLAorCQlJUlEyX1NESElEMiwgUFRENF9PVVQsIFBURDRfSU5fUFUsIFBURDRfSU4sCisJCVNESElEMSwgUFREM19PVVQsIFBURDNfSU5fUFUsIFBURDNfSU4sCisJCVNESElEMCwgUFREMl9PVVQsIFBURDJfSU5fUFUsIFBURDJfSU4sCisJCVNESElDTUQsIFBURDFfT1VULCBQVEQxX0lOX1BVLCBQVEQxX0lOLAorCQlTREhJQ0xLLCBQVEQwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSIiwgMHhhNDA1MDEwOCwgMTYsIDIpIHsKKwkJQTI1LCBQVEU3X09VVCwgUFRFN19JTl9QRCwgUFRFN19JTiwKKwkJQTI0LCBQVEU2X09VVCwgUFRFNl9JTl9QRCwgUFRFNl9JTiwKKwkJQTIzLCBQVEU1X09VVCwgUFRFNV9JTl9QRCwgUFRFNV9JTiwKKwkJQTIyLCBQVEU0X09VVCwgUFRFNF9JTl9QRCwgUFRFNF9JTiwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJSVJRNSwgUFRFMV9PVVQsIFBURTFfSU5fUEQsIFBURTFfSU4sCisJCUlSUTRfQlMsIFBURTBfT1VULCBQVEUwX0lOX1BELCBQVEUwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1IiLCAweGE0MDUwMTBhLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEY2LCBQVEY2X09VVCwgUFRGNl9JTl9QRCwgUFRGNl9JTiwKKwkJU0lPU0NLX1NJVUJPQlQsIFBURjVfT1VULCBQVEY1X0lOX1BELCBQVEY1X0lOLAorCQlTSU9TVFJCMV9TSVVCT0xSLCBQVEY0X09VVCwgUFRGNF9JTl9QRCwgUFRGNF9JTiwKKwkJU0lPU1RSQjBfU0lVQklCVCwgUFRGM19PVVQsIFBURjNfSU5fUEQsIFBURjNfSU4sCisJCVNJT0RfU0lVQklMUiwgUFRGMl9PVVQsIFBURjJfSU5fUEQsIFBURjJfSU4sCisJCVNJT1JYRF9TSVVCSVNMRCwgMCwgUFRGMV9JTl9QRCwgUFRGMV9JTiwKKwkJU0lPVFhEX1NJVUJPU0xELCBQVEYwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQR0NSIiwgMHhhNDA1MDEwYywgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJQVVEU1lOQywgUFRHNF9PVVQsIDAsIDAsCisJCUFVREFUQTMsIFBURzNfT1VULCAwLCAwLAorCQlBVURBVEEyLCBQVEcyX09VVCwgMCwgMCwKKwkJQVVEQVRBMSwgUFRHMV9PVVQsIDAsIDAsCisJCUFVREFUQTAsIFBURzBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGE0MDUwMTBlLCAxNiwgMikgeworCQlMQ0RWQ1BXQ19MQ0RWQ1BXQzIsIFBUSDdfT1VULCAwLCAwLAorCQlMQ0RWU1lOMl9EQUNLLCBQVEg2X09VVCwgUFRINl9JTl9QRCwgUFRINl9JTiwKKwkJTENEVlNZTiwgUFRINV9PVVQsIFBUSDVfSU5fUEQsIFBUSDVfSU4sCisJCUxDRERJU1BfTENEUlMsIFBUSDRfT1VULCAwLCAwLAorCQlMQ0RIU1lOX0xDRENTLCBQVEgzX09VVCwgMCwgMCwKKwkJTENERE9OX0xDRERPTjIsIFBUSDJfT1VULCAwLCAwLAorCQlMQ0REMTdfRFZfSFNZTkMsIFBUSDFfT1VULCBQVEgxX0lOX1BELCBQVEgxX0lOLAorCQlMQ0REMTZfRFZfVlNZTkMsIFBUSDBfT1VULCBQVEgwX0lOX1BELCBQVEgwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGE0MDUwMTEwLCAxNiwgMikgeworCQlTVEFUVVMwLCBQVEo3X09VVCwgMCwgMCwKKwkJMCwgUFRKNl9PVVQsIDAsIDAsCisJCVBEU1RBVFVTLCBQVEo1X09VVCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJSVJRMSwgUFRKMV9PVVQsIFBUSjFfSU5fUFUsIFBUSjFfSU4sCisJCUlSUTAsIFBUSjBfT1VULCBQVEowX0lOX1BVLCBQVEowX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBLQ1IiLCAweGE0MDUwMTEyLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlTSVVBSUxSX1NJT0YxX1NTMiwgUFRLNl9PVVQsIFBUSzZfSU5fUEQsIFBUSzZfSU4sCisJCVNJVUFJQlRfU0lPRjFfU1MxLCBQVEs1X09VVCwgUFRLNV9JTl9QRCwgUFRLNV9JTiwKKwkJU0lVQU9MUl9TSU9GMV9TWU5DLCBQVEs0X09VVCwgUFRLNF9JTl9QRCwgUFRLNF9JTiwKKwkJU0lVQU9CVF9TSU9GMV9TQ0ssIFBUSzNfT1VULCBQVEszX0lOX1BELCBQVEszX0lOLAorCQlTSVVBSVNMRF9TSU9GMV9SWEQsIDAsIFBUSzJfSU5fUEQsIFBUSzJfSU4sCisJCVNJVUFPU0xEX1NJT0YxX1RYRCwgUFRLMV9PVVQsIDAsIDAsCisJCVBUSzAsIFBUSzBfT1VULCBQVEswX0lOX1BELCBQVEswX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBMQ1IiLCAweGE0MDUwMTE0LCAxNiwgMikgeworCQlMQ0REMTVfRFZfRDE1LCBQVEw3X09VVCwgUFRMN19JTl9QRCwgUFRMN19JTiwKKwkJTENERDE0X0RWX0QxNCwgUFRMNl9PVVQsIFBUTDZfSU5fUEQsIFBUTDZfSU4sCisJCUxDREQxM19EVl9EMTMsIFBUTDVfT1VULCBQVEw1X0lOX1BELCBQVEw1X0lOLAorCQlMQ0REMTJfRFZfRDEyLCBQVEw0X09VVCwgUFRMNF9JTl9QRCwgUFRMNF9JTiwKKwkJTENERDExX0RWX0QxMSwgUFRMM19PVVQsIFBUTDNfSU5fUEQsIFBUTDNfSU4sCisJCUxDREQxMF9EVl9EMTAsIFBUTDJfT1VULCBQVEwyX0lOX1BELCBQVEwyX0lOLAorCQlMQ0REOV9EVl9EOSwgUFRMMV9PVVQsIFBUTDFfSU5fUEQsIFBUTDFfSU4sCisJCUxDREQ4X0RWX0Q4LCBQVEwwX09VVCwgUFRMMF9JTl9QRCwgUFRMMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTUNSIiwgMHhhNDA1MDExNiwgMTYsIDIpIHsKKwkJTENERDdfRFZfRDcsIFBUTTdfT1VULCBQVE03X0lOX1BELCBQVE03X0lOLAorCQlMQ0RENl9EVl9ENiwgUFRNNl9PVVQsIFBUTTZfSU5fUEQsIFBUTTZfSU4sCisJCUxDREQ1X0RWX0Q1LCBQVE01X09VVCwgUFRNNV9JTl9QRCwgUFRNNV9JTiwKKwkJTENERDRfRFZfRDQsIFBUTTRfT1VULCBQVE00X0lOX1BELCBQVE00X0lOLAorCQlMQ0REM19EVl9EMywgUFRNM19PVVQsIFBUTTNfSU5fUEQsIFBUTTNfSU4sCisJCUxDREQyX0RWX0QyLCBQVE0yX09VVCwgUFRNMl9JTl9QRCwgUFRNMl9JTiwKKwkJTENERDFfRFZfRDEsIFBUTTFfT1VULCBQVE0xX0lOX1BELCBQVE0xX0lOLAorCQlMQ0REMF9EVl9EMCwgUFRNMF9PVVQsIFBUTTBfSU5fUEQsIFBUTTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUE5DUiIsIDB4YTQwNTAxMTgsIDE2LCAyKSB7CisJCUhQRDYzLCBQVE43X09VVCwgMCwgUFRON19JTiwKKwkJSFBENjIsIFBUTjZfT1VULCAwLCBQVE42X0lOLAorCQlIUEQ2MSwgUFRONV9PVVQsIDAsIFBUTjVfSU4sCisJCUhQRDYwLCBQVE40X09VVCwgMCwgUFRONF9JTiwKKwkJSFBENTksIFBUTjNfT1VULCAwLCBQVE4zX0lOLAorCQlIUEQ1OCwgUFROMl9PVVQsIDAsIFBUTjJfSU4sCisJCUhQRDU3LCBQVE4xX09VVCwgMCwgUFROMV9JTiwKKwkJSFBENTYsIFBUTjBfT1VULCAwLCBQVE4wX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBRQ1IiLCAweGE0MDUwMTFhLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlTSU9GMF9TUzJfU0lNX1JTVCwgUFRRNl9PVVQsIDAsIDAsCisJCVNJT0YwX1NTMV9UU19TUFNZTkMsIFBUUTVfT1VULCBQVFE1X0lOX1BELCBQVFE1X0lOLAorCQlTSU9GMF9TWU5DX1RTX1NERU4sIFBUUTRfT1VULCBQVFE0X0lOX1BELCBQVFE0X0lOLAorCQlTSU9GMF9TQ0tfVFNfU0NLLCBQVFEzX09VVCwgUFRRM19JTl9QRCwgUFRRM19JTiwKKwkJUFRRMiwgMCwgUFRRMl9JTl9QRCwgUFRRMl9JTiwKKwkJUFRRMSwgUFRRMV9PVVQsIDAsIDAsCisJCVBUUTAsIFBUUTBfT1VULCBQVFEwX0lOX1BVLCBQVFEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBSQ1IiLCAweGE0MDUwMTFjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlMQ0RSRCwgUFRSNF9PVVQsIDAsIDAsCisJCUNTNkJfQ0UxQl9MQ0RDUzIsIFBUUjNfT1VULCAwLCAwLAorCQlXQUlULCAwLCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlMQ0REQ0tfTENEV1IsIFBUUjFfT1VULCAwLCAwLAorCQlMQ0RWRVBXQ19MQ0RWRVBXQzIsIFBUUjBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTQ1IiLCAweGE0MDUwMTFlLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlTQ0lGMF9DVFNfU0lVQUlTUEQsIDAsIFBUUzRfSU5fUEQsIFBUUzRfSU4sCisJCVNDSUYwX1JUU19TSVVBT1NQRCwgUFRTM19PVVQsIDAsIDAsCisJCVNDSUYwX1NDS19UUFVUTywgUFRTMl9PVVQsIFBUUzJfSU5fUEQsIFBUUzJfSU4sCisJCVNDSUYwX1JYRCwgMCwgUFRTMV9JTl9QRCwgUFRTMV9JTiwKKwkJU0NJRjBfVFhELCBQVFMwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDE0MCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJRk9FX1ZJT19WRDIsIFBUVDRfT1VULCBQVFQ0X0lOX1BELCBQVFQ0X0lOLAorCQlGV0UsIFBUVDNfT1VULCBQVFQzX0lOX1BELCBQVFQzX0lOLAorCQlGU0MsIFBUVDJfT1VULCBQVFQyX0lOX1BELCBQVFQyX0lOLAorCQlEUkVRMCwgMCwgUFRUMV9JTl9QRCwgUFRUMV9JTiwKKwkJRkNERSwgUFRUMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFVDUiIsIDB4YTQwNTAxNDIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCU5BRjJfVklPX0QxMCwgUFRVNF9PVVQsIFBUVTRfSU5fUEQsIFBUVTRfSU4sCisJCU5BRjFfVklPX0Q5LCBQVFUzX09VVCwgUFRVM19JTl9QRCwgUFRVM19JTiwKKwkJTkFGMF9WSU9fRDgsIFBUVTJfT1VULCBQVFUyX0lOX1BELCBQVFUyX0lOLAorCQlGUkJfVklPX0NMSzIsIDAsIFBUVTFfSU5fUEQsIFBUVTFfSU4sCisJCUZDRV9WSU9fSEQyLCBQVFUwX09VVCwgUFRVMF9JTl9QRCwgUFRVMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVkNSIiwgMHhhNDA1MDE0NCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJTkFGN19WSU9fRDE1LCBQVFY0X09VVCwgUFRWNF9JTl9QRCwgUFRWNF9JTiwKKwkJTkFGNl9WSU9fRDE0LCBQVFYzX09VVCwgUFRWM19JTl9QRCwgUFRWM19JTiwKKwkJTkFGNV9WSU9fRDEzLCBQVFYyX09VVCwgUFRWMl9JTl9QRCwgUFRWMl9JTiwKKwkJTkFGNF9WSU9fRDEyLCBQVFYxX09VVCwgUFRWMV9JTl9QRCwgUFRWMV9JTiwKKwkJTkFGM19WSU9fRDExLCBQVFYwX09VVCwgUFRWMF9JTl9QRCwgUFRWMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQV0NSIiwgMHhhNDA1MDE0NiwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJVklPX0ZMRF9TQ0lGMl9DVFMsIDAsIFBUVzZfSU5fUEQsIFBUVzZfSU4sCisJCVZJT19DS09fU0NJRjJfUlRTLCBQVFc1X09VVCwgMCwgMCwKKwkJVklPX1NURVhfU0NJRjJfU0NLLCBQVFc0X09VVCwgUFRXNF9JTl9QRCwgUFRXNF9JTiwKKwkJVklPX1NURU1fU0NJRjJfVFhELCBQVFczX09VVCwgUFRXM19JTl9QRCwgUFRXM19JTiwKKwkJVklPX0hEX1NDSUYyX1JYRCwgUFRXMl9PVVQsIFBUVzJfSU5fUEQsIFBUVzJfSU4sCisJCVZJT19WRF9TQ0lGMV9DVFMsIFBUVzFfT1VULCBQVFcxX0lOX1BELCBQVFcxX0lOLAorCQlWSU9fQ0xLX1NDSUYxX1JUUywgUFRXMF9PVVQsIFBUVzBfSU5fUEQsIFBUVzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFhDUiIsIDB4YTQwNTAxNDgsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCUNTNkFfQ0UyQiwgUFRYNl9PVVQsIFBUWDZfSU5fUFUsIFBUWDZfSU4sCisJCUxDREQyMywgUFRYNV9PVVQsIFBUWDVfSU5fUEQsIFBUWDVfSU4sCisJCUxDREQyMiwgUFRYNF9PVVQsIFBUWDRfSU5fUEQsIFBUWDRfSU4sCisJCUxDREQyMSwgUFRYM19PVVQsIFBUWDNfSU5fUEQsIFBUWDNfSU4sCisJCUxDREQyMCwgUFRYMl9PVVQsIFBUWDJfSU5fUEQsIFBUWDJfSU4sCisJCUxDREQxOV9EVl9DTEtJLCBQVFgxX09VVCwgUFRYMV9JTl9QRCwgUFRYMV9JTiwKKwkJTENERDE4X0RWX0NMSywgUFRYMF9PVVQsIFBUWDBfSU5fUEQsIFBUWDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFlDUiIsIDB4YTQwNTAxNGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCUtFWU9VVDVfSU41LCBQVFk1X09VVCwgUFRZNV9JTl9QVSwgUFRZNV9JTiwKKwkJS0VZT1VUNF9JTjYsIFBUWTRfT1VULCBQVFk0X0lOX1BVLCBQVFk0X0lOLAorCQlLRVlPVVQzLCBQVFkzX09VVCwgUFRZM19JTl9QVSwgUFRZM19JTiwKKwkJS0VZT1VUMiwgUFRZMl9PVVQsIFBUWTJfSU5fUFUsIFBUWTJfSU4sCisJCUtFWU9VVDEsIFBUWTFfT1VULCAwLCAwLAorCQlLRVlPVVQwLCBQVFkwX09VVCwgUFRZMF9JTl9QVSwgUFRZMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWkNSIiwgMHhhNDA1MDE0YywgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJS0VZSU40X0lSUTcsIDAsIFBUWjVfSU5fUFUsIFBUWjVfSU4sCisJCUtFWUlOMywgMCwgUFRaNF9JTl9QVSwgUFRaNF9JTiwKKwkJS0VZSU4yLCAwLCBQVFozX0lOX1BVLCBQVFozX0lOLAorCQlLRVlJTjEsIDAsIFBUWjJfSU5fUFUsIFBUWjJfSU4sCisJCUtFWUlOMF9JUlE2LCAwLCBQVFoxX0lOX1BVLCBQVFoxX0lOLAorCQkwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxBIiwgMHhhNDA1MDE0ZSwgMTYsIDEpIHsKKwkJUFNBMTVfS0VZSU4wLCBQU0ExNV9JUlE2LAorCQlQU0ExNF9LRVlJTjQsIFBTQTE0X0lSUTcsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCVBTQTlfSVJRNCwgUFNBOV9CUywKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNBNF9JUlEyLCBQU0E0X1NESElEMiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMQiIsIDB4YTQwNTAxNTAsIDE2LCAxKSB7CisJCVBTQjE1X1NJT1RYRCwgUFNCMTVfU0lVQk9TTEQsCisJCVBTQjE0X1NJT1JYRCwgUFNCMTRfU0lVQklTTEQsCisJCVBTQjEzX1NJT0QsIFBTQjEzX1NJVUJJTFIsCisJCVBTQjEyX1NJT1NUUkIwLCBQU0IxMl9TSVVCSUJULAorCQlQU0IxMV9TSU9TVFJCMSwgUFNCMTFfU0lVQk9MUiwKKwkJUFNCMTBfU0lPU0NLLCBQU0IxMF9TSVVCT0JULAorCQlQU0I5X1NJT01DSywgUFNCOV9TSVVNQ0tCLAorCQlQU0I4X1NJT0YwX01DSywgUFNCOF9JUlEzLAorCQlQU0I3X1NJT0YwX1RYRCwgUFNCN19JUkRBX09VVCwKKwkJUFNCNl9TSU9GMF9SWEQsIFBTQjZfSVJEQV9JTiwKKwkJUFNCNV9TSU9GMF9TQ0ssIFBTQjVfVFNfU0NLLAorCQlQU0I0X1NJT0YwX1NZTkMsIFBTQjRfVFNfU0RFTiwKKwkJUFNCM19TSU9GMF9TUzEsIFBTQjNfVFNfU1BTWU5DLAorCQlQU0IyX1NJT0YwX1NTMiwgUFNCMl9TSU1fUlNULAorCQlQU0IxX1NJVU1DS0EsIFBTQjFfU0lPRjFfTUNLLAorCQlQU0IwX1NJVUFPU0xELCBQU0IwX1NJT0YxX1RYRCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMQyIsIDB4YTQwNTAxNTIsIDE2LCAxKSB7CisJCVBTQzE1X1NJVUFJU0xELCBQU0MxNV9TSU9GMV9SWEQsCisJCVBTQzE0X1NJVUFPQlQsIFBTQzE0X1NJT0YxX1NDSywKKwkJUFNDMTNfU0lVQU9MUiwgUFNDMTNfU0lPRjFfU1lOQywKKwkJUFNDMTJfU0lVQUlCVCwgUFNDMTJfU0lPRjFfU1MxLAorCQlQU0MxMV9TSVVBSUxSLCBQU0MxMV9TSU9GMV9TUzIsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCVBTQzBfTkFGLCBQU0MwX1ZJTyB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMRCIsIDB4YTQwNTAxNTQsIDE2LCAxKSB7CisJCTAsIDAsCisJCTAsIDAsCisJCVBTRDEzX1ZJTywgUFNEMTNfU0NJRjIsCisJCVBTRDEyX1ZJTywgUFNEMTJfU0NJRjEsCisJCVBTRDExX1ZJTywgUFNEMTFfU0NJRjEsCisJCVBTRDEwX1ZJT19EMCwgUFNEMTBfTENETENMSywKKwkJUFNEOV9TSU9NQ0tfU0lVTUNLQiwgUFNEOV9TSVVGQ0tCLAorCQlQU0Q4X1NDSUYwX1NDSywgUFNEOF9UUFVUTywKKwkJUFNEN19TQ0lGMF9SVFMsIFBTRDdfU0lVQU9TUEQsCisJCVBTRDZfU0NJRjBfQ1RTLCBQU0Q2X1NJVUFJU1BELAorCQlQU0Q1X0NTNkJfQ0UxQiwgUFNENV9MQ0RDUzIsCisJCTAsIDAsCisJCVBTRDNfTENEVkVQV0NfTENEVkNQV0MsIFBTRDNfTENEVkVQV0MyX0xDRFZDUFdDMiwKKwkJUFNEMl9MQ0RET04sIFBTRDJfTENERE9OMiwKKwkJMCwgMCwKKwkJUFNEMF9MQ0REMTlfTENERDAsIFBTRDBfRFYgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEUiLCAweGE0MDUwMTU2LCAxNiwgMSkgeworCQlQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNFMTVfU0lNX0QsCisJCVBTRTE0X1NJT0YwX1RYRF9JUkRBX09VVCwgUFNFMTRfU0lNX0NMSywKKwkJUFNFMTNfU0lPRjBfUlhEX0lSREFfSU4sIFBTRTEzX1RTX1NEQVQsCisJCVBTRTEyX0xDRFZTWU4yLCBQU0UxMl9EQUNLLAorCQlQU0UxMV9TSVVNQ0tBX1NJT0YxX01DSywgUFNFMTFfU0lVRkNLQSwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNFM19GTENUTCwgUFNFM19WSU8sCisJCVBTRTJfTkFGMiwgUFNFMl9WSU9fRDEwLAorCQlQU0UxX05BRjEsIFBTRTFfVklPX0Q5LAorCQlQU0UwX05BRjAsIFBTRTBfVklPX0Q4IH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIkhJWkNSQSIsIDB4YTQwNTAxNTgsIDE2LCAxKSB7CisJCTAsIDAsCisJCUhJWkExNF9LRVlTQywgSElaQTE0X0hJWiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJSElaQTEwX05BRiwgSElaQTEwX0hJWiwKKwkJSElaQTlfVklPLCBISVpBOV9ISVosCisJCUhJWkE4X0xDREMsIEhJWkE4X0hJWiwKKwkJSElaQTdfTENEQywgSElaQTdfSElaLAorCQlISVpBNl9MQ0RDLCBISVpBNl9ISVosCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSElaQ1JCIiwgMHhhNDA1MDE1YSwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJSElaQjFfVklPLCBISVpCMV9ISVosCisJCUhJWkIwX1ZJTywgSElaQjBfSElaIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIkhJWkNSQyIsIDB4YTQwNTAxNWMsIDE2LCAxKSB7CisJCUhJWkMxNV9JUlE3LCBISVpDMTVfSElaLAorCQlISVpDMTRfSVJRNiwgSElaQzE0X0hJWiwKKwkJSElaQzEzX0lSUTUsIEhJWkMxM19ISVosCisJCUhJWkMxMl9JUlE0LCBISVpDMTJfSElaLAorCQlISVpDMTFfSVJRMywgSElaQzExX0hJWiwKKwkJSElaQzEwX0lSUTIsIEhJWkMxMF9ISVosCisJCUhJWkM5X0lSUTEsIEhJWkM5X0hJWiwKKwkJSElaQzhfSVJRMCwgSElaQzhfSElaLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIk1TRUxDUkIiLCAweGE0MDUwMTgyLCAxNiwgMSkgeworCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlNU0VMQjlfVklPLCBNU0VMQjlfVklPMiwKKwkJTVNFTEI4X1JHQiwgTVNFTEI4X1NZUywKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDEyMCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxMjIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTI0LCA4KSB7CisJCVBUQzdfREFUQSwgMCwgUFRDNV9EQVRBLCBQVEM0X0RBVEEsCisJCVBUQzNfREFUQSwgUFRDMl9EQVRBLCAwLCBQVEMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBERFIiLCAweGE0MDUwMTI2LCA4KSB7CisJCVBURDdfREFUQSwgUFRENl9EQVRBLCBQVEQ1X0RBVEEsIFBURDRfREFUQSwKKwkJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRURSIiwgMHhhNDA1MDEyOCwgOCkgeworCQlQVEU3X0RBVEEsIFBURTZfREFUQSwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJCTAsIDAsIFBURTFfREFUQSwgUFRFMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSIiwgMHhhNDA1MDEyYSwgOCkgeworCQkwLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTJjLCA4KSB7CisJCTAsIDAsIDAsIFBURzRfREFUQSwKKwkJUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSERSIiwgMHhhNDA1MDEyZSwgOCkgeworCQlQVEg3X0RBVEEsIFBUSDZfREFUQSwgUFRINV9EQVRBLCBQVEg0X0RBVEEsCisJCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEpEUiIsIDB4YTQwNTAxMzAsIDgpIHsKKwkJUFRKN19EQVRBLCBQVEo2X0RBVEEsIFBUSjVfREFUQSwgMCwKKwkJMCwgMCwgUFRKMV9EQVRBLCBQVEowX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBLRFIiLCAweGE0MDUwMTMyLCA4KSB7CisJCTAsIFBUSzZfREFUQSwgUFRLNV9EQVRBLCBQVEs0X0RBVEEsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxMzQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIFBUTDJfREFUQSwgUFRMMV9EQVRBLCBQVEwwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTM2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTkRSIiwgMHhhNDA1MDEzOCwgOCkgeworCQlQVE43X0RBVEEsIFBUTjZfREFUQSwgUFRONV9EQVRBLCBQVE40X0RBVEEsCisJCVBUTjNfREFUQSwgUFROMl9EQVRBLCBQVE4xX0RBVEEsIFBUTjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFFEUiIsIDB4YTQwNTAxM2EsIDgpIHsKKwkJMCwgUFRRNl9EQVRBLCBQVFE1X0RBVEEsIFBUUTRfREFUQSwKKwkJUFRRM19EQVRBLCBQVFEyX0RBVEEsIFBUUTFfREFUQSwgUFRRMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUkRSIiwgMHhhNDA1MDEzYywgOCkgeworCQkwLCAwLCAwLCBQVFI0X0RBVEEsCisJCVBUUjNfREFUQSwgUFRSMl9EQVRBLCBQVFIxX0RBVEEsIFBUUjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFNEUiIsIDB4YTQwNTAxM2UsIDgpIHsKKwkJMCwgMCwgMCwgUFRTNF9EQVRBLAorCQlQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBURFIiLCAweGE0MDUwMTYwLCA4KSB7CisJCTAsIDAsIDAsIFBUVDRfREFUQSwKKwkJUFRUM19EQVRBLCBQVFQyX0RBVEEsIFBUVDFfREFUQSwgUFRUMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVURSIiwgMHhhNDA1MDE2MiwgOCkgeworCQkwLCAwLCAwLCBQVFU0X0RBVEEsCisJCVBUVTNfREFUQSwgUFRVMl9EQVRBLCBQVFUxX0RBVEEsIFBUVTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFZEUiIsIDB4YTQwNTAxNjQsIDgpIHsKKwkJMCwgMCwgMCwgUFRWNF9EQVRBLAorCQlQVFYzX0RBVEEsIFBUVjJfREFUQSwgUFRWMV9EQVRBLCBQVFYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBXRFIiLCAweGE0MDUwMTY2LCA4KSB7CisJCTAsIFBUVzZfREFUQSwgUFRXNV9EQVRBLCBQVFc0X0RBVEEsCisJCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFhEUiIsIDB4YTQwNTAxNjgsIDgpIHsKKwkJMCwgUFRYNl9EQVRBLCBQVFg1X0RBVEEsIFBUWDRfREFUQSwKKwkJUFRYM19EQVRBLCBQVFgyX0RBVEEsIFBUWDFfREFUQSwgUFRYMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWURSIiwgMHhhNDA1MDE2YSwgOCkgeworCQkwLCBQVFk2X0RBVEEsIFBUWTVfREFUQSwgUFRZNF9EQVRBLAorCQlQVFkzX0RBVEEsIFBUWTJfREFUQSwgUFRZMV9EQVRBLCBQVFkwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBaRFIiLCAweGE0MDUwMTZjLCA4KSB7CisJCTAsIDAsIFBUWjVfREFUQSwgUFRaNF9EQVRBLAorCQlQVFozX0RBVEEsIFBUWjJfREFUQSwgUFRaMV9EQVRBLCBQVFowX0RBVEEgfQorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyBzaDc3MjJfcGlubXV4X2luZm8gPSB7CisJLm5hbWUgPSAic2g3NzIyX3BmYyIsCisJLnJlc2VydmVkX2lkID0gUElOTVVYX1JFU0VSVkVELAorCS5kYXRhID0geyBQSU5NVVhfREFUQV9CRUdJTiwgUElOTVVYX0RBVEFfRU5EIH0sCisJLmlucHV0ID0geyBQSU5NVVhfSU5QVVRfQkVHSU4sIFBJTk1VWF9JTlBVVF9FTkQgfSwKKwkuaW5wdXRfcGQgPSB7IFBJTk1VWF9JTlBVVF9QVUxMRE9XTl9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExET1dOX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QVEE3LAorCS5sYXN0X2dwaW8gPSBHUElPX0ZOX0tFWU9VVDVfSU41LAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3NzIyX3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiZjVlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjMuYwpAQCAtMCwwICsxLDE5MDkgQEAKKy8qCisgKiBTSDc3MjMgUGlubXV4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIzLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM2X0RBVEEsIFBUQzVfREFUQSwgUFRDNF9EQVRBLAorCVBUQzNfREFUQSwgUFRDMl9EQVRBLCBQVEMxX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTVfREFUQSwgUFRFNF9EQVRBLCBQVEUzX0RBVEEsIFBURTJfREFUQSwgUFRFMV9EQVRBLCBQVEUwX0RBVEEsCisJUFRGN19EQVRBLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCVBURjNfREFUQSwgUFRGMl9EQVRBLCBQVEYxX0RBVEEsIFBURjBfREFUQSwKKwlQVEc1X0RBVEEsIFBURzRfREFUQSwgUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBLAorCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwlQVEgzX0RBVEEsIFBUSDJfREFUQSwgUFRIMV9EQVRBLCBQVEgwX0RBVEEsCisJUFRKN19EQVRBLCBQVEo1X0RBVEEsIFBUSjNfREFUQSwgUFRKMl9EQVRBLCBQVEoxX0RBVEEsIFBUSjBfREFUQSwKKwlQVEs3X0RBVEEsIFBUSzZfREFUQSwgUFRLNV9EQVRBLCBQVEs0X0RBVEEsCisJUFRLM19EQVRBLCBQVEsyX0RBVEEsIFBUSzFfREFUQSwgUFRLMF9EQVRBLAorCVBUTDdfREFUQSwgUFRMNl9EQVRBLCBQVEw1X0RBVEEsIFBUTDRfREFUQSwKKwlQVEwzX0RBVEEsIFBUTDJfREFUQSwgUFRMMV9EQVRBLCBQVEwwX0RBVEEsCisJUFRNN19EQVRBLCBQVE02X0RBVEEsIFBUTTVfREFUQSwgUFRNNF9EQVRBLAorCVBUTTNfREFUQSwgUFRNMl9EQVRBLCBQVE0xX0RBVEEsIFBUTTBfREFUQSwKKwlQVE43X0RBVEEsIFBUTjZfREFUQSwgUFRONV9EQVRBLCBQVE40X0RBVEEsCisJUFROM19EQVRBLCBQVE4yX0RBVEEsIFBUTjFfREFUQSwgUFROMF9EQVRBLAorCVBUUTNfREFUQSwgUFRRMl9EQVRBLCBQVFExX0RBVEEsIFBUUTBfREFUQSwKKwlQVFI3X0RBVEEsIFBUUjZfREFUQSwgUFRSNV9EQVRBLCBQVFI0X0RBVEEsCisJUFRSM19EQVRBLCBQVFIyX0RBVEEsIFBUUjFfREFUQSwgUFRSMF9EQVRBLAorCVBUUzdfREFUQSwgUFRTNl9EQVRBLCBQVFM1X0RBVEEsIFBUUzRfREFUQSwKKwlQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEsCisJUFRUNV9EQVRBLCBQVFQ0X0RBVEEsIFBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSwKKwlQVFU1X0RBVEEsIFBUVTRfREFUQSwgUFRVM19EQVRBLCBQVFUyX0RBVEEsIFBUVTFfREFUQSwgUFRVMF9EQVRBLAorCVBUVjdfREFUQSwgUFRWNl9EQVRBLCBQVFY1X0RBVEEsIFBUVjRfREFUQSwKKwlQVFYzX0RBVEEsIFBUVjJfREFUQSwgUFRWMV9EQVRBLCBQVFYwX0RBVEEsCisJUFRXN19EQVRBLCBQVFc2X0RBVEEsIFBUVzVfREFUQSwgUFRXNF9EQVRBLAorCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSwKKwlQVFg3X0RBVEEsIFBUWDZfREFUQSwgUFRYNV9EQVRBLCBQVFg0X0RBVEEsCisJUFRYM19EQVRBLCBQVFgyX0RBVEEsIFBUWDFfREFUQSwgUFRYMF9EQVRBLAorCVBUWTdfREFUQSwgUFRZNl9EQVRBLCBQVFk1X0RBVEEsIFBUWTRfREFUQSwKKwlQVFkzX0RBVEEsIFBUWTJfREFUQSwgUFRZMV9EQVRBLCBQVFkwX0RBVEEsCisJUFRaN19EQVRBLCBQVFo2X0RBVEEsIFBUWjVfREFUQSwgUFRaNF9EQVRBLAorCVBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSwKKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJUFRBN19JTiwgUFRBNl9JTiwgUFRBNV9JTiwgUFRBNF9JTiwKKwlQVEEzX0lOLCBQVEEyX0lOLCBQVEExX0lOLCBQVEEwX0lOLAorCVBUQjdfSU4sIFBUQjZfSU4sIFBUQjVfSU4sIFBUQjRfSU4sCisJUFRCM19JTiwgUFRCMl9JTiwgUFRCMV9JTiwgUFRCMF9JTiwKKwlQVEM3X0lOLCBQVEM2X0lOLCBQVEM1X0lOLCBQVEM0X0lOLAorCVBUQzNfSU4sIFBUQzJfSU4sIFBUQzFfSU4sIFBUQzBfSU4sCisJUFREN19JTiwgUFRENl9JTiwgUFRENV9JTiwgUFRENF9JTiwKKwlQVEQzX0lOLCBQVEQyX0lOLCBQVEQxX0lOLCBQVEQwX0lOLAorCVBURTVfSU4sIFBURTRfSU4sIFBURTNfSU4sIFBURTJfSU4sIFBURTFfSU4sIFBURTBfSU4sCisJUFRGN19JTiwgUFRGNl9JTiwgUFRGNV9JTiwgUFRGNF9JTiwKKwlQVEYzX0lOLCBQVEYyX0lOLCBQVEYxX0lOLCBQVEYwX0lOLAorCVBUSDdfSU4sIFBUSDZfSU4sIFBUSDVfSU4sIFBUSDRfSU4sCisJUFRIM19JTiwgUFRIMl9JTiwgUFRIMV9JTiwgUFRIMF9JTiwKKwlQVEozX0lOLCBQVEoyX0lOLCBQVEoxX0lOLCBQVEowX0lOLAorCVBUSzdfSU4sIFBUSzZfSU4sIFBUSzVfSU4sIFBUSzRfSU4sCisJUFRLM19JTiwgUFRLMl9JTiwgUFRLMV9JTiwgUFRLMF9JTiwKKwlQVEw3X0lOLCBQVEw2X0lOLCBQVEw1X0lOLCBQVEw0X0lOLAorCVBUTDNfSU4sIFBUTDJfSU4sIFBUTDFfSU4sIFBUTDBfSU4sCisJUFRNN19JTiwgUFRNNl9JTiwgUFRNNV9JTiwgUFRNNF9JTiwKKwlQVE0zX0lOLCBQVE0yX0lOLCBQVE0xX0lOLCBQVE0wX0lOLAorCVBUTjdfSU4sIFBUTjZfSU4sIFBUTjVfSU4sIFBUTjRfSU4sCisJUFROM19JTiwgUFROMl9JTiwgUFROMV9JTiwgUFROMF9JTiwKKwlQVFEzX0lOLCBQVFEyX0lOLCBQVFExX0lOLCBQVFEwX0lOLAorCVBUUjdfSU4sIFBUUjZfSU4sIFBUUjVfSU4sIFBUUjRfSU4sCisJUFRSM19JTiwgUFRSMl9JTiwgUFRSMV9JTiwgUFRSMF9JTiwKKwlQVFM3X0lOLCBQVFM2X0lOLCBQVFM1X0lOLCBQVFM0X0lOLAorCVBUUzNfSU4sIFBUUzJfSU4sIFBUUzFfSU4sIFBUUzBfSU4sCisJUFRUNV9JTiwgUFRUNF9JTiwgUFRUM19JTiwgUFRUMl9JTiwgUFRUMV9JTiwgUFRUMF9JTiwKKwlQVFU1X0lOLCBQVFU0X0lOLCBQVFUzX0lOLCBQVFUyX0lOLCBQVFUxX0lOLCBQVFUwX0lOLAorCVBUVjdfSU4sIFBUVjZfSU4sIFBUVjVfSU4sIFBUVjRfSU4sCisJUFRWM19JTiwgUFRWMl9JTiwgUFRWMV9JTiwgUFRWMF9JTiwKKwlQVFc3X0lOLCBQVFc2X0lOLCBQVFc1X0lOLCBQVFc0X0lOLAorCVBUVzNfSU4sIFBUVzJfSU4sIFBUVzFfSU4sIFBUVzBfSU4sCisJUFRYN19JTiwgUFRYNl9JTiwgUFRYNV9JTiwgUFRYNF9JTiwKKwlQVFgzX0lOLCBQVFgyX0lOLCBQVFgxX0lOLCBQVFgwX0lOLAorCVBUWTdfSU4sIFBUWTZfSU4sIFBUWTVfSU4sIFBUWTRfSU4sCisJUFRZM19JTiwgUFRZMl9JTiwgUFRZMV9JTiwgUFRZMF9JTiwKKwlQVFo3X0lOLCBQVFo2X0lOLCBQVFo1X0lOLCBQVFo0X0lOLAorCVBUWjNfSU4sIFBUWjJfSU4sIFBUWjFfSU4sIFBUWjBfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sCisJUFRBNF9JTl9QVSwgUFRBM19JTl9QVSwgUFRBMl9JTl9QVSwgUFRBMV9JTl9QVSwgUFRBMF9JTl9QVSwKKwlQVEIyX0lOX1BVLCBQVEIxX0lOX1BVLAorCVBUUjJfSU5fUFUsCisJUElOTVVYX0lOUFVUX1BVTExVUF9FTkQsCisKKwlQSU5NVVhfT1VUUFVUX0JFR0lOLAorCVBUQTdfT1VULCBQVEE2X09VVCwgUFRBNV9PVVQsIFBUQTRfT1VULAorCVBUQTNfT1VULCBQVEEyX09VVCwgUFRBMV9PVVQsIFBUQTBfT1VULAorCVBUQjdfT1VULCBQVEI2X09VVCwgUFRCNV9PVVQsIFBUQjRfT1VULAorCVBUQjNfT1VULCBQVEIyX09VVCwgUFRCMV9PVVQsIFBUQjBfT1VULAorCVBUQzdfT1VULCBQVEM2X09VVCwgUFRDNV9PVVQsIFBUQzRfT1VULAorCVBUQzNfT1VULCBQVEMyX09VVCwgUFRDMV9PVVQsIFBUQzBfT1VULAorCVBURDdfT1VULCBQVEQ2X09VVCwgUFRENV9PVVQsIFBURDRfT1VULAorCVBURDNfT1VULCBQVEQyX09VVCwgUFREMV9PVVQsIFBURDBfT1VULAorCVBURTVfT1VULCBQVEU0X09VVCwgUFRFM19PVVQsIFBURTJfT1VULCBQVEUxX09VVCwgUFRFMF9PVVQsCisJUFRGN19PVVQsIFBURjZfT1VULCBQVEY1X09VVCwgUFRGNF9PVVQsCisJUFRGM19PVVQsIFBURjJfT1VULCBQVEYxX09VVCwgUFRGMF9PVVQsCisJUFRHNV9PVVQsIFBURzRfT1VULCBQVEczX09VVCwgUFRHMl9PVVQsIFBURzFfT1VULCBQVEcwX09VVCwKKwlQVEg3X09VVCwgUFRINl9PVVQsIFBUSDVfT1VULCBQVEg0X09VVCwKKwlQVEgzX09VVCwgUFRIMl9PVVQsIFBUSDFfT1VULCBQVEgwX09VVCwKKwlQVEo3X09VVCwgUFRKNV9PVVQsIFBUSjNfT1VULCBQVEoyX09VVCwgUFRKMV9PVVQsIFBUSjBfT1VULAorCVBUSzdfT1VULCBQVEs2X09VVCwgUFRLNV9PVVQsIFBUSzRfT1VULAorCVBUSzNfT1VULCBQVEsyX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULAorCVBUTDNfT1VULCBQVEwyX09VVCwgUFRMMV9PVVQsIFBUTDBfT1VULAorCVBUTTdfT1VULCBQVE02X09VVCwgUFRNNV9PVVQsIFBUTTRfT1VULAorCVBUTTNfT1VULCBQVE0yX09VVCwgUFRNMV9PVVQsIFBUTTBfT1VULAorCVBUTjdfT1VULCBQVE42X09VVCwgUFRONV9PVVQsIFBUTjRfT1VULAorCVBUTjNfT1VULCBQVE4yX09VVCwgUFROMV9PVVQsIFBUTjBfT1VULAorCVBUUjdfT1VULCBQVFI2X09VVCwgUFRSNV9PVVQsIFBUUjRfT1VULAorCVBUUjFfT1VULCBQVFIwX09VVCwKKwlQVFM3X09VVCwgUFRTNl9PVVQsIFBUUzVfT1VULCBQVFM0X09VVCwKKwlQVFMzX09VVCwgUFRTMl9PVVQsIFBUUzFfT1VULCBQVFMwX09VVCwKKwlQVFQ1X09VVCwgUFRUNF9PVVQsIFBUVDNfT1VULCBQVFQyX09VVCwgUFRUMV9PVVQsIFBUVDBfT1VULAorCVBUVTVfT1VULCBQVFU0X09VVCwgUFRVM19PVVQsIFBUVTJfT1VULCBQVFUxX09VVCwgUFRVMF9PVVQsCisJUFRWN19PVVQsIFBUVjZfT1VULCBQVFY1X09VVCwgUFRWNF9PVVQsCisJUFRWM19PVVQsIFBUVjJfT1VULCBQVFYxX09VVCwgUFRWMF9PVVQsCisJUFRXN19PVVQsIFBUVzZfT1VULCBQVFc1X09VVCwgUFRXNF9PVVQsCisJUFRXM19PVVQsIFBUVzJfT1VULCBQVFcxX09VVCwgUFRXMF9PVVQsCisJUFRYN19PVVQsIFBUWDZfT1VULCBQVFg1X09VVCwgUFRYNF9PVVQsCisJUFRYM19PVVQsIFBUWDJfT1VULCBQVFgxX09VVCwgUFRYMF9PVVQsCisJUFRZN19PVVQsIFBUWTZfT1VULCBQVFk1X09VVCwgUFRZNF9PVVQsCisJUFRZM19PVVQsIFBUWTJfT1VULCBQVFkxX09VVCwgUFRZMF9PVVQsCisJUFRaN19PVVQsIFBUWjZfT1VULCBQVFo1X09VVCwgUFRaNF9PVVQsCisJUFRaM19PVVQsIFBUWjJfT1VULCBQVFoxX09VVCwgUFRaMF9PVVQsCisJUElOTVVYX09VVFBVVF9FTkQsCisKKwlQSU5NVVhfRlVOQ1RJT05fQkVHSU4sCisJUFRBN19GTiwgUFRBNl9GTiwgUFRBNV9GTiwgUFRBNF9GTiwKKwlQVEEzX0ZOLCBQVEEyX0ZOLCBQVEExX0ZOLCBQVEEwX0ZOLAorCVBUQjdfRk4sIFBUQjZfRk4sIFBUQjVfRk4sIFBUQjRfRk4sCisJUFRCM19GTiwgUFRCMl9GTiwgUFRCMV9GTiwgUFRCMF9GTiwKKwlQVEM3X0ZOLCBQVEM2X0ZOLCBQVEM1X0ZOLCBQVEM0X0ZOLAorCVBUQzNfRk4sIFBUQzJfRk4sIFBUQzFfRk4sIFBUQzBfRk4sCisJUFREN19GTiwgUFRENl9GTiwgUFRENV9GTiwgUFRENF9GTiwKKwlQVEQzX0ZOLCBQVEQyX0ZOLCBQVEQxX0ZOLCBQVEQwX0ZOLAorCVBURTVfRk4sIFBURTRfRk4sIFBURTNfRk4sIFBURTJfRk4sIFBURTFfRk4sIFBURTBfRk4sCisJUFRGN19GTiwgUFRGNl9GTiwgUFRGNV9GTiwgUFRGNF9GTiwKKwlQVEYzX0ZOLCBQVEYyX0ZOLCBQVEYxX0ZOLCBQVEYwX0ZOLAorCVBURzVfRk4sIFBURzRfRk4sIFBURzNfRk4sIFBURzJfRk4sIFBURzFfRk4sIFBURzBfRk4sCisJUFRIN19GTiwgUFRINl9GTiwgUFRINV9GTiwgUFRINF9GTiwKKwlQVEgzX0ZOLCBQVEgyX0ZOLCBQVEgxX0ZOLCBQVEgwX0ZOLAorCVBUSjdfRk4sIFBUSjVfRk4sIFBUSjNfRk4sIFBUSjJfRk4sIFBUSjFfRk4sIFBUSjBfRk4sCisJUFRLN19GTiwgUFRLNl9GTiwgUFRLNV9GTiwgUFRLNF9GTiwKKwlQVEszX0ZOLCBQVEsyX0ZOLCBQVEsxX0ZOLCBQVEswX0ZOLAorCVBUTDdfRk4sIFBUTDZfRk4sIFBUTDVfRk4sIFBUTDRfRk4sCisJUFRMM19GTiwgUFRMMl9GTiwgUFRMMV9GTiwgUFRMMF9GTiwKKwlQVE03X0ZOLCBQVE02X0ZOLCBQVE01X0ZOLCBQVE00X0ZOLAorCVBUTTNfRk4sIFBUTTJfRk4sIFBUTTFfRk4sIFBUTTBfRk4sCisJUFRON19GTiwgUFRONl9GTiwgUFRONV9GTiwgUFRONF9GTiwKKwlQVE4zX0ZOLCBQVE4yX0ZOLCBQVE4xX0ZOLCBQVE4wX0ZOLAorCVBUUTNfRk4sIFBUUTJfRk4sIFBUUTFfRk4sIFBUUTBfRk4sCisJUFRSN19GTiwgUFRSNl9GTiwgUFRSNV9GTiwgUFRSNF9GTiwKKwlQVFIzX0ZOLCBQVFIyX0ZOLCBQVFIxX0ZOLCBQVFIwX0ZOLAorCVBUUzdfRk4sIFBUUzZfRk4sIFBUUzVfRk4sIFBUUzRfRk4sCisJUFRTM19GTiwgUFRTMl9GTiwgUFRTMV9GTiwgUFRTMF9GTiwKKwlQVFQ1X0ZOLCBQVFQ0X0ZOLCBQVFQzX0ZOLCBQVFQyX0ZOLCBQVFQxX0ZOLCBQVFQwX0ZOLAorCVBUVTVfRk4sIFBUVTRfRk4sIFBUVTNfRk4sIFBUVTJfRk4sIFBUVTFfRk4sIFBUVTBfRk4sCisJUFRWN19GTiwgUFRWNl9GTiwgUFRWNV9GTiwgUFRWNF9GTiwKKwlQVFYzX0ZOLCBQVFYyX0ZOLCBQVFYxX0ZOLCBQVFYwX0ZOLAorCVBUVzdfRk4sIFBUVzZfRk4sIFBUVzVfRk4sIFBUVzRfRk4sCisJUFRXM19GTiwgUFRXMl9GTiwgUFRXMV9GTiwgUFRXMF9GTiwKKwlQVFg3X0ZOLCBQVFg2X0ZOLCBQVFg1X0ZOLCBQVFg0X0ZOLAorCVBUWDNfRk4sIFBUWDJfRk4sIFBUWDFfRk4sIFBUWDBfRk4sCisJUFRZN19GTiwgUFRZNl9GTiwgUFRZNV9GTiwgUFRZNF9GTiwKKwlQVFkzX0ZOLCBQVFkyX0ZOLCBQVFkxX0ZOLCBQVFkwX0ZOLAorCVBUWjdfRk4sIFBUWjZfRk4sIFBUWjVfRk4sIFBUWjRfRk4sCisJUFRaM19GTiwgUFRaMl9GTiwgUFRaMV9GTiwgUFRaMF9GTiwKKworCisJUFNBMTVfUFNBMTRfRk4xLCBQU0ExNV9QU0ExNF9GTjIsCisJUFNBMTNfUFNBMTJfRk4xLCBQU0ExM19QU0ExMl9GTjIsCisJUFNBMTFfUFNBMTBfRk4xLCBQU0ExMV9QU0ExMF9GTjIsCisJUFNBNV9QU0E0X0ZOMSwgUFNBNV9QU0E0X0ZOMiwgUFNBNV9QU0E0X0ZOMywKKwlQU0EzX1BTQTJfRk4xLCBQU0EzX1BTQTJfRk4yLAorCVBTQjE1X1BTQjE0X0ZOMSwgUFNCMTVfUFNCMTRfRk4yLAorCVBTQjEzX1BTQjEyX0xDRENfUkdCLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywKKwlQU0I5X1BTQjhfRk4xLCBQU0I5X1BTQjhfRk4yLCBQU0I5X1BTQjhfRk4zLAorCVBTQjdfUFNCNl9GTjEsIFBTQjdfUFNCNl9GTjIsCisJUFNCNV9QU0I0X0ZOMSwgUFNCNV9QU0I0X0ZOMiwKKwlQU0IzX1BTQjJfRk4xLCBQU0IzX1BTQjJfRk4yLAorCVBTQzE1X1BTQzE0X0ZOMSwgUFNDMTVfUFNDMTRfRk4yLAorCVBTQzEzX1BTQzEyX0ZOMSwgUFNDMTNfUFNDMTJfRk4yLAorCVBTQzExX1BTQzEwX0ZOMSwgUFNDMTFfUFNDMTBfRk4yLCBQU0MxMV9QU0MxMF9GTjMsCisJUFNDOV9QU0M4X0ZOMSwgUFNDOV9QU0M4X0ZOMiwKKwlQU0M3X1BTQzZfRk4xLCBQU0M3X1BTQzZfRk4yLCBQU0M3X1BTQzZfRk4zLAorCVBTRDE1X1BTRDE0X0ZOMSwgUFNEMTVfUFNEMTRfRk4yLAorCVBTRDEzX1BTRDEyX0ZOMSwgUFNEMTNfUFNEMTJfRk4yLAorCVBTRDExX1BTRDEwX0ZOMSwgUFNEMTFfUFNEMTBfRk4yLCBQU0QxMV9QU0QxMF9GTjMsCisJUFNEOV9QU0Q4X0ZOMSwgUFNEOV9QU0Q4X0ZOMiwKKwlQU0Q3X1BTRDZfRk4xLCBQU0Q3X1BTRDZfRk4yLAorCVBTRDVfUFNENF9GTjEsIFBTRDVfUFNENF9GTjIsCisJUFNEM19QU0QyX0ZOMSwgUFNEM19QU0QyX0ZOMiwKKwlQU0QxX1BTRDBfRk4xLCBQU0QxX1BTRDBfRk4yLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlTQ0lGMF9QVFRfVFhEX01BUkssIFNDSUYwX1BUVF9SWERfTUFSSywKKwlTQ0lGMF9QVFRfU0NLX01BUkssIFNDSUYwX1BUVV9UWERfTUFSSywKKwlTQ0lGMF9QVFVfUlhEX01BUkssIFNDSUYwX1BUVV9TQ0tfTUFSSywKKworCVNDSUYxX1BUU19UWERfTUFSSywgU0NJRjFfUFRTX1JYRF9NQVJLLAorCVNDSUYxX1BUU19TQ0tfTUFSSywgU0NJRjFfUFRWX1RYRF9NQVJLLAorCVNDSUYxX1BUVl9SWERfTUFSSywgU0NJRjFfUFRWX1NDS19NQVJLLAorCisJU0NJRjJfUFRUX1RYRF9NQVJLLCBTQ0lGMl9QVFRfUlhEX01BUkssCisJU0NJRjJfUFRUX1NDS19NQVJLLCBTQ0lGMl9QVFVfVFhEX01BUkssCisJU0NJRjJfUFRVX1JYRF9NQVJLLCBTQ0lGMl9QVFVfU0NLX01BUkssCisKKwlTQ0lGM19QVFNfVFhEX01BUkssIFNDSUYzX1BUU19SWERfTUFSSywKKwlTQ0lGM19QVFNfU0NLX01BUkssIFNDSUYzX1BUU19SVFNfTUFSSywKKwlTQ0lGM19QVFNfQ1RTX01BUkssIFNDSUYzX1BUVl9UWERfTUFSSywKKwlTQ0lGM19QVFZfUlhEX01BUkssIFNDSUYzX1BUVl9TQ0tfTUFSSywKKwlTQ0lGM19QVFZfUlRTX01BUkssIFNDSUYzX1BUVl9DVFNfTUFSSywKKworCVNDSUY0X1BURV9UWERfTUFSSywgU0NJRjRfUFRFX1JYRF9NQVJLLAorCVNDSUY0X1BURV9TQ0tfTUFSSywgU0NJRjRfUFROX1RYRF9NQVJLLAorCVNDSUY0X1BUTl9SWERfTUFSSywgU0NJRjRfUFROX1NDS19NQVJLLAorCisJU0NJRjVfUFRFX1RYRF9NQVJLLCBTQ0lGNV9QVEVfUlhEX01BUkssCisJU0NJRjVfUFRFX1NDS19NQVJLLCBTQ0lGNV9QVE5fVFhEX01BUkssCisJU0NJRjVfUFROX1JYRF9NQVJLLCBTQ0lGNV9QVE5fU0NLX01BUkssCisKKwlWSU9fRDE1X01BUkssIFZJT19EMTRfTUFSSywgVklPX0QxM19NQVJLLCBWSU9fRDEyX01BUkssCisJVklPX0QxMV9NQVJLLCBWSU9fRDEwX01BUkssIFZJT19EOV9NQVJLLCBWSU9fRDhfTUFSSywKKwlWSU9fRDdfTUFSSywgVklPX0Q2X01BUkssIFZJT19ENV9NQVJLLCBWSU9fRDRfTUFSSywKKwlWSU9fRDNfTUFSSywgVklPX0QyX01BUkssIFZJT19EMV9NQVJLLCBWSU9fRDBfTUFSSywKKwlWSU9fRkxEX01BUkssIFZJT19DS09fTUFSSywKKwlWSU9fVkQxX01BUkssIFZJT19IRDFfTUFSSywgVklPX0NMSzFfTUFSSywKKwlWSU9fSEQyX01BUkssIFZJT19WRDJfTUFSSywgVklPX0NMSzJfTUFSSywKKworCUxDREQyM19NQVJLLCBMQ0REMjJfTUFSSywgTENERDIxX01BUkssIExDREQyMF9NQVJLLAorCUxDREQxOV9NQVJLLCBMQ0REMThfTUFSSywgTENERDE3X01BUkssIExDREQxNl9NQVJLLAorCUxDREQxNV9NQVJLLCBMQ0REMTRfTUFSSywgTENERDEzX01BUkssIExDREQxMl9NQVJLLAorCUxDREQxMV9NQVJLLCBMQ0REMTBfTUFSSywgTENERDlfTUFSSywgTENERDhfTUFSSywKKwlMQ0REN19NQVJLLCBMQ0RENl9NQVJLLCBMQ0RENV9NQVJLLCBMQ0RENF9NQVJLLAorCUxDREQzX01BUkssIExDREQyX01BUkssIExDREQxX01BUkssIExDREQwX01BUkssCisJTENERE9OX01BUkssIExDRFZDUFdDX01BUkssIExDRFZFUFdDX01BUkssCisJTENEVlNZTl9NQVJLLCBMQ0REQ0tfTUFSSywgTENESFNZTl9NQVJLLCBMQ0RESVNQX01BUkssCisJTENEUlNfTUFSSywgTENEQ1NfTUFSSywgTENEV1JfTUFSSywgTENEUkRfTUFSSywKKwlMQ0RMQ0xLX1BUUl9NQVJLLCBMQ0RMQ0xLX1BUV19NQVJLLAorCisJSVJRMF9NQVJLLCBJUlExX01BUkssIElSUTJfTUFSSywgSVJRM19NQVJLLAorCUlSUTRfTUFSSywgSVJRNV9NQVJLLCBJUlE2X01BUkssIElSUTdfTUFSSywKKworCUFVREFUQTNfTUFSSywgQVVEQVRBMl9NQVJLLCBBVURBVEExX01BUkssIEFVREFUQTBfTUFSSywKKwlBVURDS19NQVJLLCBBVURTWU5DX01BUkssCisKKwlTREhJMENEX1BURF9NQVJLLCBTREhJMFdQX1BURF9NQVJLLAorCVNESEkwRDNfUFREX01BUkssIFNESEkwRDJfUFREX01BUkssCisJU0RISTBEMV9QVERfTUFSSywgU0RISTBEMF9QVERfTUFSSywKKwlTREhJMENNRF9QVERfTUFSSywgU0RISTBDTEtfUFREX01BUkssCisKKwlTREhJMENEX1BUU19NQVJLLCBTREhJMFdQX1BUU19NQVJLLAorCVNESEkwRDNfUFRTX01BUkssIFNESEkwRDJfUFRTX01BUkssCisJU0RISTBEMV9QVFNfTUFSSywgU0RISTBEMF9QVFNfTUFSSywKKwlTREhJMENNRF9QVFNfTUFSSywgU0RISTBDTEtfUFRTX01BUkssCisKKwlTREhJMUNEX01BUkssIFNESEkxV1BfTUFSSywgU0RISTFEM19NQVJLLCBTREhJMUQyX01BUkssCisJU0RISTFEMV9NQVJLLCBTREhJMUQwX01BUkssIFNESEkxQ01EX01BUkssIFNESEkxQ0xLX01BUkssCisKKwlTSVVBRkNLX01BUkssIFNJVUFJTFJfTUFSSywgU0lVQUlCVF9NQVJLLCBTSVVBSVNMRF9NQVJLLAorCVNJVUFPTFJfTUFSSywgU0lVQU9CVF9NQVJLLCBTSVVBT1NMRF9NQVJLLCBTSVVBTUNLX01BUkssCisJU0lVQUlTUERfTUFSSywgU0lVQU9TUERfTUFSSywKKworCVNJVUJGQ0tfTUFSSywgU0lVQklMUl9NQVJLLCBTSVVCSUJUX01BUkssIFNJVUJJU0xEX01BUkssCisJU0lVQk9MUl9NQVJLLCBTSVVCT0JUX01BUkssIFNJVUJPU0xEX01BUkssIFNJVUJNQ0tfTUFSSywKKworCUlSREFfSU5fTUFSSywgSVJEQV9PVVRfTUFSSywKKworCURWX0NMS0lfTUFSSywgRFZfQ0xLX01BUkssIERWX0hTWU5DX01BUkssIERWX1ZTWU5DX01BUkssCisJRFZfRDE1X01BUkssIERWX0QxNF9NQVJLLCBEVl9EMTNfTUFSSywgRFZfRDEyX01BUkssCisJRFZfRDExX01BUkssIERWX0QxMF9NQVJLLCBEVl9EOV9NQVJLLCBEVl9EOF9NQVJLLAorCURWX0Q3X01BUkssIERWX0Q2X01BUkssIERWX0Q1X01BUkssIERWX0Q0X01BUkssCisJRFZfRDNfTUFSSywgRFZfRDJfTUFSSywgRFZfRDFfTUFSSywgRFZfRDBfTUFSSywKKworCUtFWUlOMF9NQVJLLCBLRVlJTjFfTUFSSywgS0VZSU4yX01BUkssIEtFWUlOM19NQVJLLCBLRVlJTjRfTUFSSywKKwlLRVlPVVQwX01BUkssIEtFWU9VVDFfTUFSSywgS0VZT1VUMl9NQVJLLCBLRVlPVVQzX01BUkssCisJS0VZT1VUNF9JTjZfTUFSSywgS0VZT1VUNV9JTjVfTUFSSywKKworCU1TSU9GMF9QVEZfVFhEX01BUkssIE1TSU9GMF9QVEZfUlhEX01BUkssIE1TSU9GMF9QVEZfTUNLX01BUkssCisJTVNJT0YwX1BURl9UU1lOQ19NQVJLLCBNU0lPRjBfUFRGX1RTQ0tfTUFSSywgTVNJT0YwX1BURl9SU1lOQ19NQVJLLAorCU1TSU9GMF9QVEZfUlNDS19NQVJLLCBNU0lPRjBfUFRGX1NTMV9NQVJLLCBNU0lPRjBfUFRGX1NTMl9NQVJLLAorCisJTVNJT0YwX1BUVF9UWERfTUFSSywgTVNJT0YwX1BUVF9SWERfTUFSSywgTVNJT0YwX1BUWF9NQ0tfTUFSSywKKwlNU0lPRjBfUFRUX1RTWU5DX01BUkssIE1TSU9GMF9QVFRfVFNDS19NQVJLLCBNU0lPRjBfUFRUX1JTWU5DX01BUkssCisJTVNJT0YwX1BUVF9SU0NLX01BUkssIE1TSU9GMF9QVFRfU1MxX01BUkssIE1TSU9GMF9QVFRfU1MyX01BUkssCisKKwlNU0lPRjFfVFhEX01BUkssIE1TSU9GMV9SWERfTUFSSywgTVNJT0YxX01DS19NQVJLLAorCU1TSU9GMV9UU1lOQ19NQVJLLCBNU0lPRjFfVFNDS19NQVJLLCBNU0lPRjFfUlNZTkNfTUFSSywKKwlNU0lPRjFfUlNDS19NQVJLLCBNU0lPRjFfU1MxX01BUkssIE1TSU9GMV9TUzJfTUFSSywKKworCVRTMF9TREFUX01BUkssIFRTMF9TQ0tfTUFSSywgVFMwX1NERU5fTUFSSywgVFMwX1NQU1lOQ19NQVJLLAorCisJRkNFX01BUkssIE5BRjdfTUFSSywgTkFGNl9NQVJLLCBOQUY1X01BUkssIE5BRjRfTUFSSywKKwlOQUYzX01BUkssIE5BRjJfTUFSSywgTkFGMV9NQVJLLCBOQUYwX01BUkssIEZDREVfTUFSSywKKwlGT0VfTUFSSywgRlNDX01BUkssIEZXRV9NQVJLLCBGUkJfTUFSSywKKworCURBQ0sxX01BUkssIERSRVExX01BUkssIERBQ0swX01BUkssIERSRVEwX01BUkssCisKKwlBTjNfTUFSSywgQU4yX01BUkssIEFOMV9NQVJLLCBBTjBfTUFSSywgQURUUkdfTUFSSywKKworCVNUQVRVUzBfTUFSSywgUERTVEFUVVNfTUFSSywKKworCVRQVVRPM19NQVJLLCBUUFVUTzJfTUFSSywgVFBVVE8xX01BUkssIFRQVVRPMF9NQVJLLAorCisJRDMxX01BUkssIEQzMF9NQVJLLCBEMjlfTUFSSywgRDI4X01BUkssCisJRDI3X01BUkssIEQyNl9NQVJLLCBEMjVfTUFSSywgRDI0X01BUkssCisJRDIzX01BUkssIEQyMl9NQVJLLCBEMjFfTUFSSywgRDIwX01BUkssCisJRDE5X01BUkssIEQxOF9NQVJLLCBEMTdfTUFSSywgRDE2X01BUkssCisJSU9JUzE2X01BUkssIFdBSVRfTUFSSywgQlNfTUFSSywKKwlBMjVfTUFSSywgQTI0X01BUkssIEEyM19NQVJLLCBBMjJfTUFSSywKKwlDUzZCX0NFMUJfTUFSSywgQ1M2QV9DRTJCX01BUkssCisJQ1M1Ql9DRTFBX01BUkssIENTNUFfQ0UyQV9NQVJLLAorCVdFM19JQ0lPV1JfTUFSSywgV0UyX0lDSU9SRF9NQVJLLAorCisJSURFRDE1X01BUkssIElERUQxNF9NQVJLLCBJREVEMTNfTUFSSywgSURFRDEyX01BUkssCisJSURFRDExX01BUkssIElERUQxMF9NQVJLLCBJREVEOV9NQVJLLCBJREVEOF9NQVJLLAorCUlERUQ3X01BUkssIElERUQ2X01BUkssIElERUQ1X01BUkssIElERUQ0X01BUkssCisJSURFRDNfTUFSSywgSURFRDJfTUFSSywgSURFRDFfTUFSSywgSURFRDBfTUFSSywKKwlESVJFQ1RJT05fTUFSSywgRVhCVUZfRU5CX01BUkssIElERVJTVF9NQVJLLCBJT0RBQ0tfTUFSSywKKwlJT0RSRVFfTUFSSywgSURFSU9SRFlfTUFSSywgSURFSU5UX01BUkssIElERUlPV1JfTUFSSywKKwlJREVJT1JEX01BUkssIElERUNTMV9NQVJLLCBJREVDUzBfTUFSSywgSURFQTJfTUFSSywKKwlJREVBMV9NQVJLLCBJREVBMF9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisJLyogUFRBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEE1X0RBVEEsIFBUQTVfSU4sIFBUQTVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEE0X0RBVEEsIFBUQTRfSU4sIFBUQTRfT1VULCBQVEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEzX0RBVEEsIFBUQTNfSU4sIFBUQTNfT1VULCBQVEEzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfT1VULCBQVEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEExX0RBVEEsIFBUQTFfSU4sIFBUQTFfT1VULCBQVEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEwX0RBVEEsIFBUQTBfSU4sIFBUQTBfT1VULCBQVEEwX0lOX1BVKSwKKworCS8qIFBUQiBHUElPICovCisJUElOTVVYX0RBVEEoUFRCN19EQVRBLCBQVEI3X0lOLCBQVEI3X09VVCksCisJUElOTVVYX0RBVEEoUFRCNl9EQVRBLCBQVEI2X0lOLCBQVEI2X09VVCksCisJUElOTVVYX0RBVEEoUFRCNV9EQVRBLCBQVEI1X0lOLCBQVEI1X09VVCksCisJUElOTVVYX0RBVEEoUFRCNF9EQVRBLCBQVEI0X0lOLCBQVEI0X09VVCksCisJUElOTVVYX0RBVEEoUFRCM19EQVRBLCBQVEIzX0lOLCBQVEIzX09VVCksCisJUElOTVVYX0RBVEEoUFRCMl9EQVRBLCBQVEIyX0lOLCBQVEIyX09VVCwgUFRCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMV9EQVRBLCBQVEIxX0lOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMF9EQVRBLCBQVEIwX0lOLCBQVEIwX09VVCksCisKKwkvKiBQVEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQzdfREFUQSwgUFRDN19JTiwgUFRDN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzZfREFUQSwgUFRDNl9JTiwgUFRDNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzVfREFUQSwgUFRDNV9JTiwgUFRDNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzFfREFUQSwgUFRDMV9JTiwgUFRDMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQpLAorCisJLyogUFREIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEQ3X0RBVEEsIFBURDdfSU4sIFBURDdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfSU4sIFBURDZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfSU4sIFBURDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfSU4sIFBURDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfSU4sIFBURDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfSU4sIFBURDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfSU4sIFBURDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfSU4sIFBURDBfT1VUKSwKKworCS8qIFBURSBHUElPICovCisJUElOTVVYX0RBVEEoUFRFNV9EQVRBLCBQVEU1X0lOLCBQVEU1X09VVCksCisJUElOTVVYX0RBVEEoUFRFNF9EQVRBLCBQVEU0X0lOLCBQVEU0X09VVCksCisJUElOTVVYX0RBVEEoUFRFM19EQVRBLCBQVEUzX0lOLCBQVEUzX09VVCksCisJUElOTVVYX0RBVEEoUFRFMl9EQVRBLCBQVEUyX0lOLCBQVEUyX09VVCksCisJUElOTVVYX0RBVEEoUFRFMV9EQVRBLCBQVEUxX0lOLCBQVEUxX09VVCksCisJUElOTVVYX0RBVEEoUFRFMF9EQVRBLCBQVEUwX0lOLCBQVEUwX09VVCksCisKKwkvKiBQVEYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBURjdfREFUQSwgUFRGN19JTiwgUFRGN19PVVQpLAorCVBJTk1VWF9EQVRBKFBURjZfREFUQSwgUFRGNl9JTiwgUFRGNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURjVfREFUQSwgUFRGNV9JTiwgUFRGNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURjRfREFUQSwgUFRGNF9JTiwgUFRGNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURjNfREFUQSwgUFRGM19JTiwgUFRGM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURjJfREFUQSwgUFRGMl9JTiwgUFRGMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURjFfREFUQSwgUFRGMV9JTiwgUFRGMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURjBfREFUQSwgUFRGMF9JTiwgUFRGMF9PVVQpLAorCisJLyogUFRHIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEc1X0RBVEEsIFBURzVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEc0X0RBVEEsIFBURzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEczX0RBVEEsIFBURzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEcyX0RBVEEsIFBURzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEcxX0RBVEEsIFBURzFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEcwX0RBVEEsIFBURzBfT1VUKSwKKworCS8qIFBUSCBHUElPICovCisJUElOTVVYX0RBVEEoUFRIN19EQVRBLCBQVEg3X0lOLCBQVEg3X09VVCksCisJUElOTVVYX0RBVEEoUFRINl9EQVRBLCBQVEg2X0lOLCBQVEg2X09VVCksCisJUElOTVVYX0RBVEEoUFRINV9EQVRBLCBQVEg1X0lOLCBQVEg1X09VVCksCisJUElOTVVYX0RBVEEoUFRINF9EQVRBLCBQVEg0X0lOLCBQVEg0X09VVCksCisJUElOTVVYX0RBVEEoUFRIM19EQVRBLCBQVEgzX0lOLCBQVEgzX09VVCksCisJUElOTVVYX0RBVEEoUFRIMl9EQVRBLCBQVEgyX0lOLCBQVEgyX09VVCksCisJUElOTVVYX0RBVEEoUFRIMV9EQVRBLCBQVEgxX0lOLCBQVEgxX09VVCksCisJUElOTVVYX0RBVEEoUFRIMF9EQVRBLCBQVEgwX0lOLCBQVEgwX09VVCksCisKKwkvKiBQVEogR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSjdfREFUQSwgUFRKN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSjVfREFUQSwgUFRKNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSjNfREFUQSwgUFRKM19JTiwgUFRKM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSjJfREFUQSwgUFRKMl9JTiwgUFRKMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSjFfREFUQSwgUFRKMV9JTiwgUFRKMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSjBfREFUQSwgUFRKMF9JTiwgUFRKMF9PVVQpLAorCisJLyogUFRLIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEs3X0RBVEEsIFBUSzdfSU4sIFBUSzdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEs2X0RBVEEsIFBUSzZfSU4sIFBUSzZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEs1X0RBVEEsIFBUSzVfSU4sIFBUSzVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEs0X0RBVEEsIFBUSzRfSU4sIFBUSzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEszX0RBVEEsIFBUSzNfSU4sIFBUSzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEsyX0RBVEEsIFBUSzJfSU4sIFBUSzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEsxX0RBVEEsIFBUSzFfSU4sIFBUSzFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEswX0RBVEEsIFBUSzBfSU4sIFBUSzBfT1VUKSwKKworCS8qIFBUTCBHUElPICovCisJUElOTVVYX0RBVEEoUFRMN19EQVRBLCBQVEw3X0lOLCBQVEw3X09VVCksCisJUElOTVVYX0RBVEEoUFRMNl9EQVRBLCBQVEw2X0lOLCBQVEw2X09VVCksCisJUElOTVVYX0RBVEEoUFRMNV9EQVRBLCBQVEw1X0lOLCBQVEw1X09VVCksCisJUElOTVVYX0RBVEEoUFRMNF9EQVRBLCBQVEw0X0lOLCBQVEw0X09VVCksCisJUElOTVVYX0RBVEEoUFRMM19EQVRBLCBQVEwzX0lOLCBQVEwzX09VVCksCisJUElOTVVYX0RBVEEoUFRMMl9EQVRBLCBQVEwyX0lOLCBQVEwyX09VVCksCisJUElOTVVYX0RBVEEoUFRMMV9EQVRBLCBQVEwxX0lOLCBQVEwxX09VVCksCisJUElOTVVYX0RBVEEoUFRMMF9EQVRBLCBQVEwwX0lOLCBQVEwwX09VVCksCisKKwkvKiBQVE0gR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTTdfREFUQSwgUFRNN19JTiwgUFRNN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTTZfREFUQSwgUFRNNl9JTiwgUFRNNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTTVfREFUQSwgUFRNNV9JTiwgUFRNNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTTRfREFUQSwgUFRNNF9JTiwgUFRNNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTTNfREFUQSwgUFRNM19JTiwgUFRNM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTTJfREFUQSwgUFRNMl9JTiwgUFRNMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTTFfREFUQSwgUFRNMV9JTiwgUFRNMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTTBfREFUQSwgUFRNMF9JTiwgUFRNMF9PVVQpLAorCisJLyogUFROIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVE43X0RBVEEsIFBUTjdfSU4sIFBUTjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVE42X0RBVEEsIFBUTjZfSU4sIFBUTjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVE41X0RBVEEsIFBUTjVfSU4sIFBUTjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVE40X0RBVEEsIFBUTjRfSU4sIFBUTjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVE4zX0RBVEEsIFBUTjNfSU4sIFBUTjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVE4yX0RBVEEsIFBUTjJfSU4sIFBUTjJfT1VUKSwKKwlQSU5NVVhfREFUQShQVE4xX0RBVEEsIFBUTjFfSU4sIFBUTjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVE4wX0RBVEEsIFBUTjBfSU4sIFBUTjBfT1VUKSwKKworCS8qIFBUUSBHUElPICovCisJUElOTVVYX0RBVEEoUFRRM19EQVRBLCBQVFEzX0lOKSwKKwlQSU5NVVhfREFUQShQVFEyX0RBVEEsIFBUUTJfSU4pLAorCVBJTk1VWF9EQVRBKFBUUTFfREFUQSwgUFRRMV9JTiksCisJUElOTVVYX0RBVEEoUFRRMF9EQVRBLCBQVFEwX0lOKSwKKworCS8qIFBUUiBHUElPICovCisJUElOTVVYX0RBVEEoUFRSN19EQVRBLCBQVFI3X0lOLCBQVFI3X09VVCksCisJUElOTVVYX0RBVEEoUFRSNl9EQVRBLCBQVFI2X0lOLCBQVFI2X09VVCksCisJUElOTVVYX0RBVEEoUFRSNV9EQVRBLCBQVFI1X0lOLCBQVFI1X09VVCksCisJUElOTVVYX0RBVEEoUFRSNF9EQVRBLCBQVFI0X0lOLCBQVFI0X09VVCksCisJUElOTVVYX0RBVEEoUFRSM19EQVRBLCBQVFIzX0lOKSwKKwlQSU5NVVhfREFUQShQVFIyX0RBVEEsIFBUUjJfSU4sIFBUUjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjFfREFUQSwgUFRSMV9JTiwgUFRSMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUjBfREFUQSwgUFRSMF9JTiwgUFRSMF9PVVQpLAorCisJLyogUFRTIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFM3X0RBVEEsIFBUUzdfSU4sIFBUUzdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFM2X0RBVEEsIFBUUzZfSU4sIFBUUzZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFM1X0RBVEEsIFBUUzVfSU4sIFBUUzVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFM0X0RBVEEsIFBUUzRfSU4sIFBUUzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFMzX0RBVEEsIFBUUzNfSU4sIFBUUzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFMyX0RBVEEsIFBUUzJfSU4sIFBUUzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFMxX0RBVEEsIFBUUzFfSU4sIFBUUzFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfSU4sIFBUUzBfT1VUKSwKKworCS8qIFBUVCBHUElPICovCisJUElOTVVYX0RBVEEoUFRUNV9EQVRBLCBQVFQ1X0lOLCBQVFQ1X09VVCksCisJUElOTVVYX0RBVEEoUFRUNF9EQVRBLCBQVFQ0X0lOLCBQVFQ0X09VVCksCisJUElOTVVYX0RBVEEoUFRUM19EQVRBLCBQVFQzX0lOLCBQVFQzX09VVCksCisJUElOTVVYX0RBVEEoUFRUMl9EQVRBLCBQVFQyX0lOLCBQVFQyX09VVCksCisJUElOTVVYX0RBVEEoUFRUMV9EQVRBLCBQVFQxX0lOLCBQVFQxX09VVCksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX0lOLCBQVFQwX09VVCksCisKKwkvKiBQVFUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVTVfREFUQSwgUFRVNV9JTiwgUFRVNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVTRfREFUQSwgUFRVNF9JTiwgUFRVNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVTNfREFUQSwgUFRVM19JTiwgUFRVM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUVTJfREFUQSwgUFRVMl9JTiwgUFRVMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVTFfREFUQSwgUFRVMV9JTiwgUFRVMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9JTiwgUFRVMF9PVVQpLAorCisJLyogUFRWIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFY3X0RBVEEsIFBUVjdfSU4sIFBUVjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFY2X0RBVEEsIFBUVjZfSU4sIFBUVjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFY1X0RBVEEsIFBUVjVfSU4sIFBUVjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFY0X0RBVEEsIFBUVjRfSU4sIFBUVjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFYzX0RBVEEsIFBUVjNfSU4sIFBUVjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFYyX0RBVEEsIFBUVjJfSU4sIFBUVjJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFYxX0RBVEEsIFBUVjFfSU4sIFBUVjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFYwX0RBVEEsIFBUVjBfSU4sIFBUVjBfT1VUKSwKKworCS8qIFBUVyBHUElPICovCisJUElOTVVYX0RBVEEoUFRXN19EQVRBLCBQVFc3X0lOLCBQVFc3X09VVCksCisJUElOTVVYX0RBVEEoUFRXNl9EQVRBLCBQVFc2X0lOLCBQVFc2X09VVCksCisJUElOTVVYX0RBVEEoUFRXNV9EQVRBLCBQVFc1X0lOLCBQVFc1X09VVCksCisJUElOTVVYX0RBVEEoUFRXNF9EQVRBLCBQVFc0X0lOLCBQVFc0X09VVCksCisJUElOTVVYX0RBVEEoUFRXM19EQVRBLCBQVFczX0lOLCBQVFczX09VVCksCisJUElOTVVYX0RBVEEoUFRXMl9EQVRBLCBQVFcyX0lOLCBQVFcyX09VVCksCisJUElOTVVYX0RBVEEoUFRXMV9EQVRBLCBQVFcxX0lOLCBQVFcxX09VVCksCisJUElOTVVYX0RBVEEoUFRXMF9EQVRBLCBQVFcwX0lOLCBQVFcwX09VVCksCisKKwkvKiBQVFggR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUWDdfREFUQSwgUFRYN19JTiwgUFRYN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWDZfREFUQSwgUFRYNl9JTiwgUFRYNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWDVfREFUQSwgUFRYNV9JTiwgUFRYNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWDRfREFUQSwgUFRYNF9JTiwgUFRYNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWDNfREFUQSwgUFRYM19JTiwgUFRYM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWDJfREFUQSwgUFRYMl9JTiwgUFRYMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWDFfREFUQSwgUFRYMV9JTiwgUFRYMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWDBfREFUQSwgUFRYMF9JTiwgUFRYMF9PVVQpLAorCisJLyogUFRZIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFk3X0RBVEEsIFBUWTdfSU4sIFBUWTdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFk2X0RBVEEsIFBUWTZfSU4sIFBUWTZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFk1X0RBVEEsIFBUWTVfSU4sIFBUWTVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFk0X0RBVEEsIFBUWTRfSU4sIFBUWTRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFkzX0RBVEEsIFBUWTNfSU4sIFBUWTNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFkyX0RBVEEsIFBUWTJfSU4sIFBUWTJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFkxX0RBVEEsIFBUWTFfSU4sIFBUWTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFkwX0RBVEEsIFBUWTBfSU4sIFBUWTBfT1VUKSwKKworCS8qIFBUWiBHUElPICovCisJUElOTVVYX0RBVEEoUFRaN19EQVRBLCBQVFo3X0lOLCBQVFo3X09VVCksCisJUElOTVVYX0RBVEEoUFRaNl9EQVRBLCBQVFo2X0lOLCBQVFo2X09VVCksCisJUElOTVVYX0RBVEEoUFRaNV9EQVRBLCBQVFo1X0lOLCBQVFo1X09VVCksCisJUElOTVVYX0RBVEEoUFRaNF9EQVRBLCBQVFo0X0lOLCBQVFo0X09VVCksCisJUElOTVVYX0RBVEEoUFRaM19EQVRBLCBQVFozX0lOLCBQVFozX09VVCksCisJUElOTVVYX0RBVEEoUFRaMl9EQVRBLCBQVFoyX0lOLCBQVFoyX09VVCksCisJUElOTVVYX0RBVEEoUFRaMV9EQVRBLCBQVFoxX0lOLCBQVFoxX09VVCksCisJUElOTVVYX0RBVEEoUFRaMF9EQVRBLCBQVFowX0lOLCBQVFowX09VVCksCisKKwkvKiBQVEEgRk4gKi8KKwlQSU5NVVhfREFUQShEMjNfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQyX01BUkssIFBTQTE1X1BTQTE0X0ZOMiwgUFRBN19GTiksCisJUElOTVVYX0RBVEEoRDIyX01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUMV9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTZfRk4pLAorCVBJTk1VWF9EQVRBKEQyMV9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDBfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEE1X0ZOKSwKKwlQSU5NVVhfREFUQShEMjBfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEE0X0ZOKSwKKwlQSU5NVVhfREFUQShLRVlJTjRfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEEzX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlJTjNfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEEzX0ZOKSwKKwlQSU5NVVhfREFUQShEMThfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEEyX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlJTjJfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEEyX0ZOKSwKKwlQSU5NVVhfREFUQShEMTdfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEExX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlJTjFfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEExX0ZOKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEEwX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlJTjBfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEEwX0ZOKSwKKworCS8qIFBUQiBGTiAqLworCVBJTk1VWF9EQVRBKEQzMV9NQVJLLCBQVEI3X0ZOKSwKKwlQSU5NVVhfREFUQShEMzBfTUFSSywgUFRCNl9GTiksCisJUElOTVVYX0RBVEEoRDI5X01BUkssIFBUQjVfRk4pLAorCVBJTk1VWF9EQVRBKEQyOF9NQVJLLCBQVEI0X0ZOKSwKKwlQSU5NVVhfREFUQShEMjdfTUFSSywgUFRCM19GTiksCisJUElOTVVYX0RBVEEoRDI2X01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRCMl9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUNV9JTjVfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShEMjVfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEIxX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ0X0lONl9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQjFfRk4pLAorCVBJTk1VWF9EQVRBKEQyNF9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQjBfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDNfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEIwX0ZOKSwKKworCS8qIFBUQyBGTiAqLworCVBJTk1VWF9EQVRBKElERUQxNV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxQ0RfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEM3X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTRfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMVdQX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDNl9GTiksCisJUElOTVVYX0RBVEEoSURFRDEzX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoU0RISTFEM19NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzVfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxMl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxRDJfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEM0X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUQxX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDM19GTiksCisJUElOTVVYX0RBVEEoSURFRDEwX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoU0RISTFEMF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzJfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ5X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDMV9GTiksCisJUElOTVVYX0RBVEEoU0RISTFDTURfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEMxX0ZOKSwKKwlQSU5NVVhfREFUQShJREVEOF9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzBfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxQ0xLX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDMF9GTiksCisKKwkvKiBQVEQgRk4gKi8KKwlQSU5NVVhfREFUQShJREVEN19NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDdfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwQ0RfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREN19GTiksCisJUElOTVVYX0RBVEEoSURFRDZfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMFdQX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDZfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ1X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRENV9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEM19QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQ1X0ZOKSwKKwlQSU5NVVhfREFUQShJREVENF9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDRfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwRDJfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRENF9GTiksCisJUElOTVVYX0RBVEEoSURFRDNfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQzX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQxX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDNfRk4pLAorCVBJTk1VWF9EQVRBKElERUQyX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREMl9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEMF9QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQyX0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDFfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwQ01EX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDFfRk4pLAorCVBJTk1VWF9EQVRBKElERUQwX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREMF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTEtfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREMF9GTiksCisKKwkvKiBQVEUgRk4gKi8KKwlQSU5NVVhfREFUQShESVJFQ1RJT05fTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVEVfU0NLX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFNV9GTiksCisJUElOTVVYX0RBVEEoRVhCVUZfRU5CX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRFNF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUFRFX1JYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURTRfRk4pLAorCVBJTk1VWF9EQVRBKElERVJTVF9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURTNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY1X1BURV9UWERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEUzX0ZOKSwKKwlQSU5NVVhfREFUQShJT0RBQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVEVfU0NLX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFMl9GTiksCisJUElOTVVYX0RBVEEoSU9EUkVRX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRFMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUFRFX1JYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURTFfRk4pLAorCVBJTk1VWF9EQVRBKElERUlPUkRZX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRFMF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUFRFX1RYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURTBfRk4pLAorCisJLyogUFRGIEZOICovCisJUElOTVVYX0RBVEEoSURFSU5UX01BUkssIFBURjdfRk4pLAorCVBJTk1VWF9EQVRBKElERUlPV1JfTUFSSywgUFNBNV9QU0E0X0ZOMSwgUFRGNl9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9TUzJfTUFSSywgUFNBNV9QU0E0X0ZOMiwgUFRGNl9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9SU1lOQ19NQVJLLCBQU0E1X1BTQTRfRk4zLCBQVEY2X0ZOKSwKKwlQSU5NVVhfREFUQShJREVJT1JEX01BUkssIFBTQTVfUFNBNF9GTjEsIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfU1MxX01BUkssIFBTQTVfUFNBNF9GTjIsIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfUlNDS19NQVJLLCBQU0E1X1BTQTRfRk4zLCBQVEY1X0ZOKSwKKwlQSU5NVVhfREFUQShJREVDUzFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1RTWU5DX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRGNF9GTiksCisJUElOTVVYX0RBVEEoSURFQ1MwX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRGM19GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9UU0NLX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRGM19GTiksCisJUElOTVVYX0RBVEEoSURFQTJfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEYyX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1JYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKElERUExX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRGMV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9UWERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShJREVBMF9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURjBfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfTUNLX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRGMF9GTiksCisKKwkvKiBQVEcgRk4gKi8KKwlQSU5NVVhfREFUQShBVURDS19NQVJLLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShBVURTWU5DX01BUkssIFBURzRfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTNfTUFSSywgUFNBM19QU0EyX0ZOMSwgUFRHM19GTiksCisJUElOTVVYX0RBVEEoVFBVVE8zX01BUkssIFBTQTNfUFNBMl9GTjIsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTJfTUFSSywgUFNBM19QU0EyX0ZOMSwgUFRHMl9GTiksCisJUElOTVVYX0RBVEEoVFBVVE8yX01BUkssIFBTQTNfUFNBMl9GTjIsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTFfTUFSSywgUFNBM19QU0EyX0ZOMSwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoVFBVVE8xX01BUkssIFBTQTNfUFNBMl9GTjIsIFBURzFfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTBfTUFSSywgUFNBM19QU0EyX0ZOMSwgUFRHMF9GTiksCisJUElOTVVYX0RBVEEoVFBVVE8wX01BUkssIFBTQTNfUFNBMl9GTjIsIFBURzBfRk4pLAorCisJLyogUFRHIEZOICovCisJUElOTVVYX0RBVEEoTENEVkNQV0NfTUFSSywgUFRIN19GTiksCisJUElOTVVYX0RBVEEoTENEUkRfTUFSSywgUFNCMTVfUFNCMTRfRk4xLCBQVEg2X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9DTEtJX01BUkssIFBTQjE1X1BTQjE0X0ZOMiwgUFRINl9GTiksCisJUElOTVVYX0RBVEEoTENEVlNZTl9NQVJLLCBQU0IxNV9QU0IxNF9GTjEsIFBUSDVfRk4pLAorCVBJTk1VWF9EQVRBKERWX0NMS19NQVJLLCBQU0IxNV9QU0IxNF9GTjIsIFBUSDVfRk4pLAorCVBJTk1VWF9EQVRBKExDRERJU1BfTUFSSywgUFNCMTNfUFNCMTJfTENEQ19SR0IsIFBUSDRfRk4pLAorCVBJTk1VWF9EQVRBKExDRFJTX01BUkssIFBTQjEzX1BTQjEyX0xDRENfU1lTLCBQVEg0X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RIU1lOX01BUkssIFBTQjEzX1BTQjEyX0xDRENfUkdCLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RDU19NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywgUFRIM19GTiksCisJUElOTVVYX0RBVEEoTENERE9OX01BUkssIFBUSDJfRk4pLAorCVBJTk1VWF9EQVRBKExDRERDS19NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1JHQiwgUFRIMV9GTiksCisJUElOTVVYX0RBVEEoTENEV1JfTUFSSywgUFNCMTNfUFNCMTJfTENEQ19TWVMsIFBUSDFfRk4pLAorCVBJTk1VWF9EQVRBKExDRFZFUFdDX01BUkssIFBUSDBfRk4pLAorCisJLyogUFRKIEZOICovCisJUElOTVVYX0RBVEEoU1RBVFVTMF9NQVJLLCBQVEo3X0ZOKSwKKwlQSU5NVVhfREFUQShQRFNUQVRVU19NQVJLLCBQVEo1X0ZOKSwKKwlQSU5NVVhfREFUQShBMjVfTUFSSywgUFRKM19GTiksCisJUElOTVVYX0RBVEEoQTI0X01BUkssIFBUSjJfRk4pLAorCVBJTk1VWF9EQVRBKEEyM19NQVJLLCBQVEoxX0ZOKSwKKwlQSU5NVVhfREFUQShBMjJfTUFSSywgUFRKMF9GTiksCisKKwkvKiBQVEsgRk4gKi8KKwlQSU5NVVhfREFUQShTSVVBRkNLX01BUkssIFBUSzdfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUFJTFJfTUFSSywgUFNCOV9QU0I4X0ZOMSwgUFRLNl9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1NTMl9NQVJLLCBQU0I5X1BTQjhfRk4yLCBQVEs2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfUlNZTkNfTUFSSywgUFNCOV9QU0I4X0ZOMywgUFRLNl9GTiksCisJUElOTVVYX0RBVEEoU0lVQUlCVF9NQVJLLCBQU0I5X1BTQjhfRk4xLCBQVEs1X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfU1MxX01BUkssIFBTQjlfUFNCOF9GTjIsIFBUSzVfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SU0NLX01BUkssIFBTQjlfUFNCOF9GTjMsIFBUSzVfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUFJU0xEX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzRfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SWERfTUFSSywgUFNCN19QU0I2X0ZOMiwgUFRLNF9GTiksCisJUElOTVVYX0RBVEEoU0lVQU9MUl9NQVJLLCBQU0I3X1BTQjZfRk4xLCBQVEszX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfVFNZTkNfTUFSSywgUFNCN19QU0I2X0ZOMiwgUFRLM19GTiksCisJUElOTVVYX0RBVEEoU0lVQU9CVF9NQVJLLCBQU0I3X1BTQjZfRk4xLCBQVEsyX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfVFNDS19NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEsyX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0I3X1BTQjZfRk4xLCBQVEsxX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfUlhEX01BUkssIFBTQjdfUFNCNl9GTjIsIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUFNQ0tfTUFSSywgUFNCN19QU0I2X0ZOMSwgUFRLMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX01DS19NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEswX0ZOKSwKKworCS8qIFBUTCBGTiAqLworCVBJTk1VWF9EQVRBKExDREQxNV9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEw3X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTVfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMN19GTiksCisJUElOTVVYX0RBVEEoTENERDE0X01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDZfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxNF9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEw2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTNfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoRFZfRDEzX01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDVfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxMl9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEw0X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTJfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMNF9GTiksCisJUElOTVVYX0RBVEEoTENERDExX01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDNfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxMV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEwzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTBfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMMl9GTiksCisJUElOTVVYX0RBVEEoRFZfRDEwX01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDJfRk4pLAorCVBJTk1VWF9EQVRBKExDREQ5X01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDFfRk4pLAorCVBJTk1VWF9EQVRBKERWX0Q5X01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDFfRk4pLAorCVBJTk1VWF9EQVRBKExDREQ4X01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDBfRk4pLAorCVBJTk1VWF9EQVRBKERWX0Q4X01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDBfRk4pLAorCisJLyogUFRNIEZOICovCisJUElOTVVYX0RBVEEoTENERDdfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNN19GTiksCisJUElOTVVYX0RBVEEoRFZfRDdfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNN19GTiksCisJUElOTVVYX0RBVEEoTENERDZfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNNl9GTiksCisJUElOTVVYX0RBVEEoRFZfRDZfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNNl9GTiksCisJUElOTVVYX0RBVEEoTENERDVfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNNV9GTiksCisJUElOTVVYX0RBVEEoRFZfRDVfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNNV9GTiksCisJUElOTVVYX0RBVEEoTENERDRfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNNF9GTiksCisJUElOTVVYX0RBVEEoRFZfRDRfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNNF9GTiksCisJUElOTVVYX0RBVEEoTENERDNfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNM19GTiksCisJUElOTVVYX0RBVEEoRFZfRDNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNM19GTiksCisJUElOTVVYX0RBVEEoTENERDJfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNMl9GTiksCisJUElOTVVYX0RBVEEoRFZfRDJfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNMl9GTiksCisJUElOTVVYX0RBVEEoTENERDFfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNMV9GTiksCisJUElOTVVYX0RBVEEoRFZfRDFfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNMV9GTiksCisJUElOTVVYX0RBVEEoTENERDBfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRNMF9GTiksCisJUElOTVVYX0RBVEEoRFZfRDBfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRNMF9GTiksCisKKwkvKiBQVE4gRk4gKi8KKwlQSU5NVVhfREFUQShMQ0REMjNfTUFSSywgUFNCM19QU0IyX0ZOMSwgUFRON19GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUFROX1NDS19NQVJLLCBQU0IzX1BTQjJfRk4yLCBQVE43X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMjJfTUFSSywgUFNCM19QU0IyX0ZOMSwgUFRONl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUFROX1JYRF9NQVJLLCBQU0IzX1BTQjJfRk4yLCBQVE42X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMjFfTUFSSywgUFNCM19QU0IyX0ZOMSwgUFRONV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUFROX1RYRF9NQVJLLCBQU0IzX1BTQjJfRk4yLCBQVE41X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMjBfTUFSSywgUFNCM19QU0IyX0ZOMSwgUFRONF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUFROX1NDS19NQVJLLCBQU0IzX1BTQjJfRk4yLCBQVE40X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTlfTUFSSywgUFNCM19QU0IyX0ZOMSwgUFROM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUFROX1JYRF9NQVJLLCBQU0IzX1BTQjJfRk4yLCBQVE4zX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMThfTUFSSywgUFNCM19QU0IyX0ZOMSwgUFROMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUFROX1RYRF9NQVJLLCBQU0IzX1BTQjJfRk4yLCBQVE4yX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTdfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFROMV9GTiksCisJUElOTVVYX0RBVEEoRFZfVlNZTkNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFROMV9GTiksCisJUElOTVVYX0RBVEEoTENERDE2X01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTjBfRk4pLAorCVBJTk1VWF9EQVRBKERWX0hTWU5DX01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTjBfRk4pLAorCisJLyogUFRRIEZOICovCisJUElOTVVYX0RBVEEoQU4zX01BUkssIFBUUTNfRk4pLAorCVBJTk1VWF9EQVRBKEFOMl9NQVJLLCBQVFEyX0ZOKSwKKwlQSU5NVVhfREFUQShBTjFfTUFSSywgUFRRMV9GTiksCisJUElOTVVYX0RBVEEoQU4wX01BUkssIFBUUTBfRk4pLAorCisJLyogUFRSIEZOICovCisJUElOTVVYX0RBVEEoQ1M2Ql9DRTFCX01BUkssIFBUUjdfRk4pLAorCVBJTk1VWF9EQVRBKENTNkFfQ0UyQl9NQVJLLCBQVFI2X0ZOKSwKKwlQSU5NVVhfREFUQShDUzVCX0NFMUFfTUFSSywgUFRSNV9GTiksCisJUElOTVVYX0RBVEEoQ1M1QV9DRTJBX01BUkssIFBUUjRfRk4pLAorCVBJTk1VWF9EQVRBKElPSVMxNl9NQVJLLCBQU0ExM19QU0ExMl9GTjEsIFBUUjNfRk4pLAorCVBJTk1VWF9EQVRBKExDRExDTEtfUFRSX01BUkssIFBTQTEzX1BTQTEyX0ZOMiwgUFRSM19GTiksCisJUElOTVVYX0RBVEEoV0FJVF9NQVJLLCBQVFIyX0ZOKSwKKwlQSU5NVVhfREFUQShXRTNfSUNJT1dSX01BUkssIFBUUjFfRk4pLAorCVBJTk1VWF9EQVRBKFdFMl9JQ0lPUkRfTUFSSywgUFRSMF9GTiksCisKKwkvKiBQVFMgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMV9QVFNfU0NLX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTN19GTiksCisJUElOTVVYX0RBVEEoU0RISTBDRF9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFM3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFNfUlhEX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTNl9GTiksCisJUElOTVVYX0RBVEEoU0RISTBXUF9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFM2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFNfVFhEX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTNV9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEM19QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFM1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFNfQ1RTX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTNF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEMl9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFNfUlRTX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTM19GTiksCisJUElOTVVYX0RBVEEoU0RISTBEMV9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFMzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFNfU0NLX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTMl9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEMF9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFNfUlhEX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTMV9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTURfUFRTX01BUkssIFBTQzE1X1BTQzE0X0ZOMiwgUFRTMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUFRTX1RYRF9NQVJLLCBQU0MxNV9QU0MxNF9GTjEsIFBUUzBfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwQ0xLX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzBfRk4pLAorCisJLyogUFRUIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjBfUFRUX1NDS19NQVJLLCBQU0MxM19QU0MxMl9GTjEsIFBUVDVfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfVFNDS19NQVJLLCBQU0MxM19QU0MxMl9GTjIsIFBUVDVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVF9SWERfTUFSSywgUFNDMTNfUFNDMTJfRk4xLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1JYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjIsIFBUVDRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVF9UWERfTUFSSywgUFNDMTNfUFNDMTJfRk4xLCBQVFQzX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1RYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjIsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYyX1BUVF9TQ0tfTUFSSywgUFNDMTFfUFNDMTBfRk4xLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1RTWU5DX01BUkssIFBTQzExX1BTQzEwX0ZOMiwgUFRUMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRUX1JYRF9NQVJLLCBQU0MxMV9QU0MxMF9GTjEsIFBUVDFfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfU1MxX01BUkssIFBTQzExX1BTQzEwX0ZOMiwgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9SU0NLX01BUkssIFBTQzExX1BTQzEwX0ZOMywgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRUX1RYRF9NQVJLLCBQU0MxMV9QU0MxMF9GTjEsIFBUVDBfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfU1MyX01BUkssIFBTQzExX1BTQzEwX0ZOMiwgUFRUMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9SU1lOQ19NQVJLLCBQU0MxMV9QU0MxMF9GTjMsIFBUVDBfRk4pLAorCisJLyogUFRVIEZOICovCisJUElOTVVYX0RBVEEoRkNERV9NQVJLLCBQU0M5X1BTQzhfRk4xLCBQVFU1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9QVFVfU0NLX01BUkssIFBTQzlfUFNDOF9GTjIsIFBUVTVfRk4pLAorCVBJTk1VWF9EQVRBKEZTQ19NQVJLLCBQU0M5X1BTQzhfRk4xLCBQVFU0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9QVFVfUlhEX01BUkssIFBTQzlfUFNDOF9GTjIsIFBUVTRfRk4pLAorCVBJTk1VWF9EQVRBKEZXRV9NQVJLLCBQU0M5X1BTQzhfRk4xLCBQVFUzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9QVFVfVFhEX01BUkssIFBTQzlfUFNDOF9GTjIsIFBUVTNfRk4pLAorCVBJTk1VWF9EQVRBKEZPRV9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9QVFVfU0NLX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVTJfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19WRDJfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoRlJCX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVTFfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYyX1BUVV9SWERfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoVklPX0NMSzJfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoRkNFX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVTBfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYyX1BUVV9UWERfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoVklPX0hEMl9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFUwX0ZOKSwKKworCS8qIFBUViBGTiAqLworCVBJTk1VWF9EQVRBKE5BRjdfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRWN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfUFRWX1NDS19NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFY3X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDE1X01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjdfRk4pLAorCVBJTk1VWF9EQVRBKE5BRjZfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRWNl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfUFRWX1JYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFY2X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDE0X01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjZfRk4pLAorCVBJTk1VWF9EQVRBKE5BRjVfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRWNV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfUFRWX1RYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFY1X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDEzX01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjVfRk4pLAorCVBJTk1VWF9EQVRBKE5BRjRfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUFRWX0NUU19NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDEyX01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKE5BRjNfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRWM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUFRWX1JUU19NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDExX01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKE5BRjJfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRWMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUFRWX1NDS19NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDEwX01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKE5BRjFfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUFRWX1JYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFYxX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDlfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoTkFGMF9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYwX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfVFhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjBfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EOF9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFYwX0ZOKSwKKworCS8qIFBUVyBGTiAqLworCVBJTk1VWF9EQVRBKElSUTdfTUFSSywgUFRXN19GTiksCisJUElOTVVYX0RBVEEoSVJRNl9NQVJLLCBQVFc2X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIFBUVzVfRk4pLAorCVBJTk1VWF9EQVRBKElSUTRfTUFSSywgUFNEMTVfUFNEMTRfRk4xLCBQVFc0X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RMQ0xLX1BUV19NQVJLLCBQU0QxNV9QU0QxNF9GTjIsIFBUVzRfRk4pLAorCVBJTk1VWF9EQVRBKElSUTNfTUFSSywgUFNEMTNfUFNEMTJfRk4xLCBQVFczX0ZOKSwKKwlQSU5NVVhfREFUQShBRFRSR19NQVJLLCBQU0QxM19QU0QxMl9GTjIsIFBUVzNfRk4pLAorCVBJTk1VWF9EQVRBKElSUTJfTUFSSywgUFNEMTFfUFNEMTBfRk4xLCBQVFcyX0ZOKSwKKwlQSU5NVVhfREFUQShCU19NQVJLLCBQU0QxMV9QU0QxMF9GTjIsIFBUVzJfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19DS09fTUFSSywgUFNEMTFfUFNEMTBfRk4zLCBQVFcyX0ZOKSwKKwlQSU5NVVhfREFUQShJUlExX01BUkssIFBTRDlfUFNEOF9GTjEsIFBUVzFfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUFJU1BEX01BUkssIFBTRDlfUFNEOF9GTjIsIFBUVzFfRk4pLAorCVBJTk1VWF9EQVRBKElSUTBfTUFSSywgUFNEN19QU0Q2X0ZOMSwgUFRXMF9GTiksCisJUElOTVVYX0RBVEEoU0lVQU9TUERfTUFSSywgUFNEN19QU0Q2X0ZOMiwgUFRXMF9GTiksCisKKwkvKiBQVFggRk4gKi8KKwlQSU5NVVhfREFUQShEQUNLMV9NQVJLLCBQVFg3X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMV9NQVJLLCBQU0QzX1BTRDJfRk4xLCBQVFg2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRYX01DS19NQVJLLCBQU0QzX1BTRDJfRk4yLCBQVFg2X0ZOKSwKKwlQSU5NVVhfREFUQShEQUNLMV9NQVJLLCBQVFg1X0ZOKSwKKwlQSU5NVVhfREFUQShJUkRBX09VVF9NQVJLLCBQU0Q1X1BTRDRfRk4yLCBQVFg1X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMV9NQVJLLCBQVFg0X0ZOKSwKKwlQSU5NVVhfREFUQShJUkRBX0lOX01BUkssIFBTRDVfUFNENF9GTjIsIFBUWDRfRk4pLAorCVBJTk1VWF9EQVRBKFRTMF9TREFUX01BUkssIFBUWDNfRk4pLAorCVBJTk1VWF9EQVRBKFRTMF9TQ0tfTUFSSywgUFRYMl9GTiksCisJUElOTVVYX0RBVEEoVFMwX1NERU5fTUFSSywgUFRYMV9GTiksCisJUElOTVVYX0RBVEEoVFMwX1NQU1lOQ19NQVJLLCBQVFgwX0ZOKSwKKworCS8qIFBUWSBGTiAqLworCVBJTk1VWF9EQVRBKFZJT19EN19NQVJLLCBQVFk3X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDZfTUFSSywgUFRZNl9GTiksCisJUElOTVVYX0RBVEEoVklPX0Q1X01BUkssIFBUWTVfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19ENF9NQVJLLCBQVFk0X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDNfTUFSSywgUFRZM19GTiksCisJUElOTVVYX0RBVEEoVklPX0QyX01BUkssIFBUWTJfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMV9NQVJLLCBQVFkxX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDBfTUFSSywgUFRZMF9GTiksCisKKwkvKiBQVFogRk4gKi8KKwlQSU5NVVhfREFUQShTSVVCT0JUX01BUkssIFBUWjdfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJPTFJfTUFSSywgUFRaNl9GTiksCisJUElOTVVYX0RBVEEoU0lVQk9TTERfTUFSSywgUFRaNV9GTiksCisJUElOTVVYX0RBVEEoU0lVQk1DS19NQVJLLCBQVFo0X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRkxEX01BUkssIFBTRDFfUFNEMF9GTjEsIFBUWjNfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJGQ0tfTUFSSywgUFNEMV9QU0QwX0ZOMiwgUFRaM19GTiksCisJUElOTVVYX0RBVEEoVklPX0hEMV9NQVJLLCBQU0QxX1BTRDBfRk4xLCBQVFoyX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCSUxSX01BUkssIFBTRDFfUFNEMF9GTjIsIFBUWjJfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19WRDFfTUFSSywgUFNEMV9QU0QwX0ZOMSwgUFRaMV9GTiksCisJUElOTVVYX0RBVEEoU0lVQklCVF9NQVJLLCBQU0QxX1BTRDBfRk4yLCBQVFoxX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fQ0xLMV9NQVJLLCBQU0QxX1BTRDBfRk4xLCBQVFowX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCSVNMRF9NQVJLLCBQU0QxX1BTRDBfRk4yLCBQVFowX0ZOKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2dwaW8gcGlubXV4X2dwaW9zW10gPSB7CisJLyogUFRBICovCisJUElOTVVYX0dQSU8oR1BJT19QVEE3LCBQVEE3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNiwgUFRBNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTUsIFBUQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE0LCBQVEE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMywgUFRBM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTIsIFBUQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEExLCBQVEExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMCwgUFRBMF9EQVRBKSwKKworCS8qIFBUQiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRCNywgUFRCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjYsIFBUQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI1LCBQVEI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNCwgUFRCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjMsIFBUQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIyLCBQVEIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMSwgUFRCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjAsIFBUQjBfREFUQSksCisKKwkvKiBQVEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQzcsIFBUQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM2LCBQVEM2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNSwgUFRDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzQsIFBUQzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMzLCBQVEMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMiwgUFRDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzEsIFBUQzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMwLCBQVEMwX0RBVEEpLAorCisJLyogUFREICovCisJUElOTVVYX0dQSU8oR1BJT19QVEQ3LCBQVEQ3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENiwgUFRENl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDUsIFBURDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ0LCBQVEQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMywgUFREM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDIsIFBURDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQxLCBQVEQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMCwgUFREMF9EQVRBKSwKKworCS8qIFBURSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUzLCBQVEUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMiwgUFRFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTEsIFBURTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUwLCBQVEUwX0RBVEEpLAorCisJLyogUFRGICovCisJUElOTVVYX0dQSU8oR1BJT19QVEY3LCBQVEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNiwgUFRGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjUsIFBURjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY0LCBQVEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMywgUFRGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjIsIFBURjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYxLCBQVEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMCwgUFRGMF9EQVRBKSwKKworCS8qIFBURyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRHNSwgUFRHNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzQsIFBURzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEczLCBQVEczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMiwgUFRHMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzEsIFBURzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcwLCBQVEcwX0RBVEEpLAorCisJLyogUFRIICovCisJUElOTVVYX0dQSU8oR1BJT19QVEg3LCBQVEg3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINiwgUFRINl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDUsIFBUSDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg0LCBQVEg0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMywgUFRIM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDIsIFBUSDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgxLCBQVEgxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMCwgUFRIMF9EQVRBKSwKKworCS8qIFBUSiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRKNywgUFRKN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjUsIFBUSjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEozLCBQVEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMiwgUFRKMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjEsIFBUSjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEowLCBQVEowX0RBVEEpLAorCisJLyogUFRLICovCisJUElOTVVYX0dQSU8oR1BJT19QVEs3LCBQVEs3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLNiwgUFRLNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzUsIFBUSzVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs0LCBQVEs0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMywgUFRLM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzIsIFBUSzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEsxLCBQVEsxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMCwgUFRLMF9EQVRBKSwKKworCS8qIFBUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRMNywgUFRMN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDYsIFBUTDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw1LCBQVEw1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNCwgUFRMNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDMsIFBUTDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwyLCBQVEwyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMSwgUFRMMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDAsIFBUTDBfREFUQSksCisKKwkvKiBQVE0gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTTcsIFBUTTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE02LCBQVE02X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNSwgUFRNNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTQsIFBUTTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0zLCBQVE0zX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMiwgUFRNMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTEsIFBUTTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0wLCBQVE0wX0RBVEEpLAorCisJLyogUFROICovCisJUElOTVVYX0dQSU8oR1BJT19QVE43LCBQVE43X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONiwgUFRONl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjUsIFBUTjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE40LCBQVE40X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMywgUFROM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjIsIFBUTjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4xLCBQVE4xX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMCwgUFROMF9EQVRBKSwKKworCS8qIFBUUSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRRMywgUFRRM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTIsIFBUUTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFExLCBQVFExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMCwgUFRRMF9EQVRBKSwKKworCS8qIFBUUiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRSNywgUFRSN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjYsIFBUUjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI1LCBQVFI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNCwgUFRSNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjMsIFBUUjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIyLCBQVFIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMSwgUFRSMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjAsIFBUUjBfREFUQSksCisKKwkvKiBQVFMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUzcsIFBUUzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFM2LCBQVFM2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTNSwgUFRTNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzQsIFBUUzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMzLCBQVFMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMiwgUFRTMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzEsIFBUUzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMwLCBQVFMwX0RBVEEpLAorCisJLyogUFRUICovCisJUElOTVVYX0dQSU8oR1BJT19QVFQ1LCBQVFQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUNCwgUFRUNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDMsIFBUVDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQyLCBQVFQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMSwgUFRUMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDAsIFBUVDBfREFUQSksCisKKwkvKiBQVFUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVTUsIFBUVTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFU0LCBQVFU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMywgUFRVM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTIsIFBUVTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUxLCBQVFUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMCwgUFRVMF9EQVRBKSwKKworCS8qIFBUViAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRWNywgUFRWN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjYsIFBUVjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFY1LCBQVFY1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWNCwgUFRWNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjMsIFBUVjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYyLCBQVFYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMSwgUFRWMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjAsIFBUVjBfREFUQSksCisKKwkvKiBQVFcgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVzcsIFBUVzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFc2LCBQVFc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXNSwgUFRXNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzQsIFBUVzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFczLCBQVFczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMiwgUFRXMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzEsIFBUVzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcwLCBQVFcwX0RBVEEpLAorCisJLyogUFRYICovCisJUElOTVVYX0dQSU8oR1BJT19QVFg3LCBQVFg3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYNiwgUFRYNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDUsIFBUWDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFg0LCBQVFg0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMywgUFRYM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDIsIFBUWDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgxLCBQVFgxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMCwgUFRYMF9EQVRBKSwKKworCS8qIFBUWSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRZNywgUFRZN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTYsIFBUWTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFk1LCBQVFk1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZNCwgUFRZNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTMsIFBUWTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkyLCBQVFkyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMSwgUFRZMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTAsIFBUWTBfREFUQSksCisKKwkvKiBQVFogKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUWjcsIFBUWjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFo2LCBQVFo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaNSwgUFRaNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjQsIFBUWjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFozLCBQVFozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMiwgUFRaMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjEsIFBUWjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFowLCBQVFowX0RBVEEpLAorCisJLyogU0NJRjAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVF9UWEQsIFNDSUYwX1BUVF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFRfUlhELCBTQ0lGMF9QVFRfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRUX1NDSywgU0NJRjBfUFRUX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVV9UWEQsIFNDSUYwX1BUVV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFVfUlhELCBTQ0lGMF9QVFVfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRVX1NDSywgU0NJRjBfUFRVX1NDS19NQVJLKSwKKworCS8qIFNDSUYxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFNfVFhELCBTQ0lGMV9QVFNfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRTX1JYRCwgU0NJRjFfUFRTX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUU19TQ0ssIFNDSUYxX1BUU19TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFZfVFhELCBTQ0lGMV9QVFZfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRWX1JYRCwgU0NJRjFfUFRWX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUVl9TQ0ssIFNDSUYxX1BUVl9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRUX1RYRCwgU0NJRjJfUFRUX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVF9SWEQsIFNDSUYyX1BUVF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFRfU0NLLCBTQ0lGMl9QVFRfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRVX1RYRCwgU0NJRjJfUFRVX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVV9SWEQsIFNDSUYyX1BUVV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFVfU0NLLCBTQ0lGMl9QVFVfU0NLX01BUkspLAorCisJLyogU0NJRjMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19UWEQsIFNDSUYzX1BUU19UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFNfUlhELCBTQ0lGM19QVFNfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRTX1NDSywgU0NJRjNfUFRTX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19SVFMsIFNDSUYzX1BUU19SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFNfQ1RTLCBTQ0lGM19QVFNfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX1RYRCwgU0NJRjNfUFRWX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUVl9SWEQsIFNDSUYzX1BUVl9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFZfU0NLLCBTQ0lGM19QVFZfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX1JUUywgU0NJRjNfUFRWX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUVl9DVFMsIFNDSUYzX1BUVl9DVFNfTUFSSyksCisKKwkvKiBTQ0lGNCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFRFX1RYRCwgU0NJRjRfUFRFX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BURV9SWEQsIFNDSUY0X1BURV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVEVfU0NLLCBTQ0lGNF9QVEVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFROX1RYRCwgU0NJRjRfUFROX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BUTl9SWEQsIFNDSUY0X1BUTl9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVE5fU0NLLCBTQ0lGNF9QVE5fU0NLX01BUkspLAorCisJLyogU0NJRjUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BURV9UWEQsIFNDSUY1X1BURV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVEVfUlhELCBTQ0lGNV9QVEVfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFRFX1NDSywgU0NJRjVfUFRFX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BUTl9UWEQsIFNDSUY1X1BUTl9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVE5fUlhELCBTQ0lGNV9QVE5fUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFROX1NDSywgU0NJRjVfUFROX1NDS19NQVJLKSwKKworCS8qIENFVSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxNSwgVklPX0QxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTQsIFZJT19EMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEzLCBWSU9fRDEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMiwgVklPX0QxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTEsIFZJT19EMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEwLCBWSU9fRDEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q5LCBWSU9fRDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDgsIFZJT19EOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENywgVklPX0Q3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q2LCBWSU9fRDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDUsIFZJT19ENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENCwgVklPX0Q0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QzLCBWSU9fRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDIsIFZJT19EMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMSwgVklPX0QxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QwLCBWSU9fRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fQ0xLMSwgVklPX0NMSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fVkQxLCBWSU9fVkQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hEMSwgVklPX0hEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19GTEQsIFZJT19GTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fQ0tPLCBWSU9fQ0tPX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX1ZEMiwgVklPX1ZEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19IRDIsIFZJT19IRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fQ0xLMiwgVklPX0NMSzJfTUFSSyksCisKKwkvKiBMQ0RDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjMsIExDREQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMiwgTENERDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIxLCBMQ0REMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjAsIExDREQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxOSwgTENERDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE4LCBMQ0REMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTcsIExDREQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNiwgTENERDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE1LCBMQ0REMTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTQsIExDREQxNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMywgTENERDEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEyLCBMQ0REMTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTEsIExDREQxMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMCwgTENERDEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDksIExDREQ5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDgsIExDREQ4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDcsIExDREQ3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDYsIExDREQ2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDUsIExDREQ1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDQsIExDREQ0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDMsIExDREQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIsIExDREQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEsIExDREQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDAsIExDREQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENETENMS19QVFIsIExDRExDTEtfUFRSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENETENMS19QVFcsIExDRExDTEtfUFRXX01BUkspLAorCS8qIE1haW4gTENEICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RET04sIExDRERPTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZDUFdDLCBMQ0RWQ1BXQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZFUFdDLCBMQ0RWRVBXQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZTWU4sIExDRFZTWU5fTUFSSyksCisJLyogTWFpbiBMQ0QgLSBSR0IgTW9kZSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERENLLCBMQ0REQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RIU1lOLCBMQ0RIU1lOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERElTUCwgTENERElTUF9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFNZUyBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RSUywgTENEUlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RDUywgTENEQ1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RXUiwgTENEV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RSRCwgTENEUkRfTUFSSyksCisKKwkvKiBJUlEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTAsIElSUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlExLCBJUlExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMiwgSVJRMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTMsIElSUTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE0LCBJUlE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNSwgSVJRNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTYsIElSUTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE3LCBJUlE3X01BUkspLAorCisJLyogQVVEICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURDSywgQVVEQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURTWU5DLCBBVURTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMywgQVVEQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTIsIEFVREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEExLCBBVURBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMCwgQVVEQVRBMF9NQVJLKSwKKworCS8qIFNESEkwIChQVEQpICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMENEX1BURCwgU0RISTBDRF9QVERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMFdQX1BURCwgU0RISTBXUF9QVERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMEQzX1BURCwgU0RISTBEM19QVERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMEQyX1BURCwgU0RISTBEMl9QVERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMEQxX1BURCwgU0RISTBEMV9QVERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMEQwX1BURCwgU0RISTBEMF9QVERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMENNRF9QVEQsIFNESEkwQ01EX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ0xLX1BURCwgU0RISTBDTEtfUFREX01BUkspLAorCisJLyogU0RISTAgKFBUUykgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ0RfUFRTLCBTREhJMENEX1BUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwV1BfUFRTLCBTREhJMFdQX1BUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDNfUFRTLCBTREhJMEQzX1BUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDJfUFRTLCBTREhJMEQyX1BUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDFfUFRTLCBTREhJMEQxX1BUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDBfUFRTLCBTREhJMEQwX1BUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ01EX1BUUywgU0RISTBDTURfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDTEtfUFRTLCBTREhJMENMS19QVFNfTUFSSyksCisKKwkvKiBTREhJMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFDRCwgU0RISTFDRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxV1AsIFNESEkxV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUQzLCBTREhJMUQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFEMiwgU0RISTFEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxRDEsIFNESEkxRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUQwLCBTREhJMUQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFDTUQsIFNESEkxQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFDTEssIFNESEkxQ0xLX01BUkspLAorCisJLyogU0lVQSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQUZDSywgU0lVQUZDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJTFIsIFNJVUFJTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSUJULCBTSVVBSUJUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQUlTTEQsIFNJVUFJU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9MUiwgU0lVQU9MUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFPQlQsIFNJVUFPQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBT1NMRCwgU0lVQU9TTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBTUNLLCBTSVVBTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQUlTUEQsIFNJVUFJU1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVT1NQRCwgU0lVQU9TUERfTUFSSyksCisKKwkvKiBTSVVCICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCRkNLLCBTSVVCRkNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklMUiwgU0lVQklMUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJQlQsIFNJVUJJQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCSVNMRCwgU0lVQklTTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0xSLCBTSVVCT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk9CVCwgU0lVQk9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJPU0xELCBTSVVCT1NMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJNQ0ssIFNJVUJNQ0tfTUFSSyksCisKKwkvKiBJUkRBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX0lOLCBJUkRBX0lOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJEQV9PVVQsIElSREFfT1VUX01BUkspLAorCisJLyogVk9VICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9DTEtJLCBEVl9DTEtJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfQ0xLLCBEVl9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9IU1lOQywgRFZfSFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9WU1lOQywgRFZfVlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTUsIERWX0QxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxNCwgRFZfRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEzLCBEVl9EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTIsIERWX0QxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMSwgRFZfRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEwLCBEVl9EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOSwgRFZfRDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOCwgRFZfRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENywgRFZfRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENiwgRFZfRDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENSwgRFZfRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENCwgRFZfRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMywgRFZfRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMiwgRFZfRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMSwgRFZfRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMCwgRFZfRDBfTUFSSyksCisKKwkvKiBLRVlTQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4wLCBLRVlJTjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjEsIEtFWUlOMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMiwgS0VZSU4yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4zLCBLRVlJTjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjQsIEtFWUlONF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDAsIEtFWU9VVDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQxLCBLRVlPVVQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMiwgS0VZT1VUMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDMsIEtFWU9VVDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQ0X0lONiwgS0VZT1VUNF9JTjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQ1X0lONSwgS0VZT1VUNV9JTjVfTUFSSyksCisKKwkvKiBNU0lPRjAgKFBURikgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfVFhELCBNU0lPRjBfUFRGX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfUlhELCBNU0lPRjBfUFRGX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfTUNLLCBNU0lPRjBfUFRGX01DS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfVFNZTkMsIE1TSU9GMF9QVEZfVFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjBfUFRGX1RTQ0ssIE1TSU9GMF9QVEZfVFNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfUlNZTkMsIE1TSU9GMF9QVEZfUlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjBfUFRGX1JTQ0ssIE1TSU9GMF9QVEZfUlNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfU1MxLCBNU0lPRjBfUFRGX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfU1MyLCBNU0lPRjBfUFRGX1NTMl9NQVJLKSwKKworCS8qIE1TSU9GMCAoUFRUK1BUWCkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfVFhELCBNU0lPRjBfUFRUX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfUlhELCBNU0lPRjBfUFRUX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFhfTUNLLCBNU0lPRjBfUFRYX01DS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfVFNZTkMsIE1TSU9GMF9QVFRfVFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjBfUFRUX1RTQ0ssIE1TSU9GMF9QVFRfVFNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfUlNZTkMsIE1TSU9GMF9QVFRfUlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjBfUFRUX1JTQ0ssIE1TSU9GMF9QVFRfUlNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfU1MxLCBNU0lPRjBfUFRUX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfU1MyLCBNU0lPRjBfUFRUX1NTMl9NQVJLKSwKKworCS8qIE1TSU9GMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1RYRCwgTVNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9SWEQsIE1TSU9GMV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfTUNLLCBNU0lPRjFfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1RTWU5DLCBNU0lPRjFfVFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfVFNDSywgTVNJT0YxX1RTQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfUlNZTkMsIE1TSU9GMV9SU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9SU0NLLCBNU0lPRjFfUlNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9TUzEsIE1TSU9GMV9TUzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfU1MyLCBNU0lPRjFfU1MyX01BUkspLAorCisJLyogVFNJRiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NEQVQsIFRTMF9TREFUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NDSywgVFMwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTMF9TREVOLCBUUzBfU0RFTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTMF9TUFNZTkMsIFRTMF9TUFNZTkNfTUFSSyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNFLCBGQ0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY3LCBOQUY3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNiwgTkFGNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjUsIE5BRjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY0LCBOQUY0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMywgTkFGM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjIsIE5BRjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYxLCBOQUYxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMCwgTkFGMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDREUsIEZDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GT0UsIEZPRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZTQywgRlNDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRldFLCBGV0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsIEZSQl9NQVJLKSwKKworCS8qIERNQUMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxLCBEQUNLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExLCBEUkVRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swLCBEQUNLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwLCBEUkVRMF9NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4zLCBBTjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjIsIEFOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMSwgQU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4wLCBBTjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRFRSRywgQURUUkdfTUFSSyksCisKKwkvKiBDUEcgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QRFNUQVRVUywgUERTVEFUVVNfTUFSSyksCisKKwkvKiBUUFUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPMCwgVFBVVE8wX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVVE8xLCBUUFVUTzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVUTzIsIFRQVVRPMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPMywgVFBVVE8zX01BUkspLAorCisJLyogQlNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMzEsIEQzMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMCwgRDMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI5LCBEMjlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjgsIEQyOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNywgRDI3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI2LCBEMjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjUsIEQyNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNCwgRDI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIzLCBEMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjIsIEQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMSwgRDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIwLCBEMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTksIEQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOCwgRDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE3LCBEMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTYsIEQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPSVMxNiwgSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0FJVCwgV0FJVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JTLCBCU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyNSwgQTI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI0LCBBMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjMsIEEyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMiwgQTIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M2Ql9DRTFCLCBDUzZCX0NFMUJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZBX0NFMkIsIENTNkFfQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNUJfQ0UxQSwgQ1M1Ql9DRTFBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M1QV9DRTJBLCBDUzVBX0NFMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTNfSUNJT1dSLCBXRTNfSUNJT1dSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UyX0lDSU9SRCwgV0UyX0lDSU9SRF9NQVJLKSwKKworCS8qIEFUQVBJICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTUsIElERUQxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxNCwgSURFRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDEzLCBJREVEMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTIsIElERUQxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxMSwgSURFRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDEwLCBJREVEMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEOSwgSURFRDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEOCwgSURFRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVENywgSURFRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVENiwgSURFRDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVENSwgSURFRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVENCwgSURFRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMywgSURFRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMiwgSURFRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMSwgSURFRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMCwgSURFRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ESVJFQ1RJT04sIERJUkVDVElPTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VYQlVGX0VOQiwgRVhCVUZfRU5CX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFUlNULCBJREVSU1RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0RBQ0ssIElPREFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPRFJFUSwgSU9EUkVRX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFSU9SRFksIElERUlPUkRZX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFSU5ULCBJREVJTlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJT1dSLCBJREVJT1dSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFSU9SRCwgSURFSU9SRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUNTMSwgSURFQ1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFQ1MwLCBJREVDUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVBMiwgSURFQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVBMSwgSURFQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVBMCwgSURFQTBfTUFSSyksCisgfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJUFRBN19GTiwgUFRBN19PVVQsIDAsIFBUQTdfSU4sCisJCVBUQTZfRk4sIFBUQTZfT1VULCAwLCBQVEE2X0lOLAorCQlQVEE1X0ZOLCBQVEE1X09VVCwgMCwgUFRBNV9JTiwKKwkJUFRBNF9GTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUsIFBUQTRfSU4sCisJCVBUQTNfRk4sIFBUQTNfT1VULCBQVEEzX0lOX1BVLCBQVEEzX0lOLAorCQlQVEEyX0ZOLCBQVEEyX09VVCwgUFRBMl9JTl9QVSwgUFRBMl9JTiwKKwkJUFRBMV9GTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUsIFBUQTFfSU4sCisJCVBUQTBfRk4sIFBUQTBfT1VULCBQVEEwX0lOX1BVLCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlQVEI3X0ZOLCBQVEI3X09VVCwgMCwgUFRCN19JTiwKKwkJUFRCNl9GTiwgUFRCNl9PVVQsIDAsIFBUQjZfSU4sCisJCVBUQjVfRk4sIFBUQjVfT1VULCAwLCBQVEI1X0lOLAorCQlQVEI0X0ZOLCBQVEI0X09VVCwgMCwgUFRCNF9JTiwKKwkJUFRCM19GTiwgUFRCM19PVVQsIDAsIFBUQjNfSU4sCisJCVBUQjJfRk4sIFBUQjJfT1VULCBQVEIyX0lOX1BVLCBQVEIyX0lOLAorCQlQVEIxX0ZOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSwgUFRCMV9JTiwKKwkJUFRCMF9GTiwgUFRCMF9PVVQsIDAsIFBUQjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUiIsIDB4YTQwNTAxMDQsIDE2LCAyKSB7CisJCVBUQzdfRk4sIFBUQzdfT1VULCAwLCBQVEM3X0lOLAorCQlQVEM2X0ZOLCBQVEM2X09VVCwgMCwgUFRDNl9JTiwKKwkJUFRDNV9GTiwgUFRDNV9PVVQsIDAsIFBUQzVfSU4sCisJCVBUQzRfRk4sIFBUQzRfT1VULCAwLCBQVEM0X0lOLAorCQlQVEMzX0ZOLCBQVEMzX09VVCwgMCwgUFRDM19JTiwKKwkJUFRDMl9GTiwgUFRDMl9PVVQsIDAsIFBUQzJfSU4sCisJCVBUQzFfRk4sIFBUQzFfT1VULCAwLCBQVEMxX0lOLAorCQlQVEMwX0ZOLCBQVEMwX09VVCwgMCwgUFRDMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhhNDA1MDEwNiwgMTYsIDIpIHsKKwkJUFREN19GTiwgUFREN19PVVQsIDAsIFBURDdfSU4sCisJCVBURDZfRk4sIFBURDZfT1VULCAwLCBQVEQ2X0lOLAorCQlQVEQ1X0ZOLCBQVEQ1X09VVCwgMCwgUFRENV9JTiwKKwkJUFRENF9GTiwgUFRENF9PVVQsIDAsIFBURDRfSU4sCisJCVBURDNfRk4sIFBURDNfT1VULCAwLCBQVEQzX0lOLAorCQlQVEQyX0ZOLCBQVEQyX09VVCwgMCwgUFREMl9JTiwKKwkJUFREMV9GTiwgUFREMV9PVVQsIDAsIFBURDFfSU4sCisJCVBURDBfRk4sIFBURDBfT1VULCAwLCBQVEQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQVEU1X0ZOLCBQVEU1X09VVCwgMCwgUFRFNV9JTiwKKwkJUFRFNF9GTiwgUFRFNF9PVVQsIDAsIFBURTRfSU4sCisJCVBURTNfRk4sIFBURTNfT1VULCAwLCBQVEUzX0lOLAorCQlQVEUyX0ZOLCBQVEUyX09VVCwgMCwgUFRFMl9JTiwKKwkJUFRFMV9GTiwgUFRFMV9PVVQsIDAsIFBURTFfSU4sCisJCVBURTBfRk4sIFBURTBfT1VULCAwLCBQVEUwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1IiLCAweGE0MDUwMTBhLCAxNiwgMikgeworCQlQVEY3X0ZOLCBQVEY3X09VVCwgMCwgUFRGN19JTiwKKwkJUFRGNl9GTiwgUFRGNl9PVVQsIDAsIFBURjZfSU4sCisJCVBURjVfRk4sIFBURjVfT1VULCAwLCBQVEY1X0lOLAorCQlQVEY0X0ZOLCBQVEY0X09VVCwgMCwgUFRGNF9JTiwKKwkJUFRGM19GTiwgUFRGM19PVVQsIDAsIFBURjNfSU4sCisJCVBURjJfRk4sIFBURjJfT1VULCAwLCBQVEYyX0lOLAorCQlQVEYxX0ZOLCBQVEYxX09VVCwgMCwgUFRGMV9JTiwKKwkJUFRGMF9GTiwgUFRGMF9PVVQsIDAsIFBURjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4YTQwNTAxMGMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBURzVfRk4sIFBURzVfT1VULCAwLCAwLAorCQlQVEc0X0ZOLCBQVEc0X09VVCwgMCwgMCwKKwkJUFRHM19GTiwgUFRHM19PVVQsIDAsIDAsCisJCVBURzJfRk4sIFBURzJfT1VULCAwLCAwLAorCQlQVEcxX0ZOLCBQVEcxX09VVCwgMCwgMCwKKwkJUFRHMF9GTiwgUFRHMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEhDUiIsIDB4YTQwNTAxMGUsIDE2LCAyKSB7CisJCVBUSDdfRk4sIFBUSDdfT1VULCAwLCBQVEg3X0lOLAorCQlQVEg2X0ZOLCBQVEg2X09VVCwgMCwgUFRINl9JTiwKKwkJUFRINV9GTiwgUFRINV9PVVQsIDAsIFBUSDVfSU4sCisJCVBUSDRfRk4sIFBUSDRfT1VULCAwLCBQVEg0X0lOLAorCQlQVEgzX0ZOLCBQVEgzX09VVCwgMCwgUFRIM19JTiwKKwkJUFRIMl9GTiwgUFRIMl9PVVQsIDAsIFBUSDJfSU4sCisJCVBUSDFfRk4sIFBUSDFfT1VULCAwLCBQVEgxX0lOLAorCQlQVEgwX0ZOLCBQVEgwX09VVCwgMCwgUFRIMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSkNSIiwgMHhhNDA1MDExMCwgMTYsIDIpIHsKKwkJUFRKN19GTiwgUFRKN19PVVQsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSjVfRk4sIFBUSjVfT1VULCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQVEozX0ZOLCBQVEozX09VVCwgMCwgUFRKM19JTiwKKwkJUFRKMl9GTiwgUFRKMl9PVVQsIDAsIFBUSjJfSU4sCisJCVBUSjFfRk4sIFBUSjFfT1VULCAwLCBQVEoxX0lOLAorCQlQVEowX0ZOLCBQVEowX09VVCwgMCwgUFRKMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQS0NSIiwgMHhhNDA1MDExMiwgMTYsIDIpIHsKKwkJUFRLN19GTiwgUFRLN19PVVQsIDAsIFBUSzdfSU4sCisJCVBUSzZfRk4sIFBUSzZfT1VULCAwLCBQVEs2X0lOLAorCQlQVEs1X0ZOLCBQVEs1X09VVCwgMCwgUFRLNV9JTiwKKwkJUFRLNF9GTiwgUFRLNF9PVVQsIDAsIFBUSzRfSU4sCisJCVBUSzNfRk4sIFBUSzNfT1VULCAwLCBQVEszX0lOLAorCQlQVEsyX0ZOLCBQVEsyX09VVCwgMCwgUFRLMl9JTiwKKwkJUFRLMV9GTiwgUFRLMV9PVVQsIDAsIFBUSzFfSU4sCisJCVBUSzBfRk4sIFBUSzBfT1VULCAwLCBQVEswX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBMQ1IiLCAweGE0MDUwMTE0LCAxNiwgMikgeworCQlQVEw3X0ZOLCBQVEw3X09VVCwgMCwgUFRMN19JTiwKKwkJUFRMNl9GTiwgUFRMNl9PVVQsIDAsIFBUTDZfSU4sCisJCVBUTDVfRk4sIFBUTDVfT1VULCAwLCBQVEw1X0lOLAorCQlQVEw0X0ZOLCBQVEw0X09VVCwgMCwgUFRMNF9JTiwKKwkJUFRMM19GTiwgUFRMM19PVVQsIDAsIFBUTDNfSU4sCisJCVBUTDJfRk4sIFBUTDJfT1VULCAwLCBQVEwyX0lOLAorCQlQVEwxX0ZOLCBQVEwxX09VVCwgMCwgUFRMMV9JTiwKKwkJUFRMMF9GTiwgUFRMMF9PVVQsIDAsIFBUTDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUE1DUiIsIDB4YTQwNTAxMTYsIDE2LCAyKSB7CisJCVBUTTdfRk4sIFBUTTdfT1VULCAwLCBQVE03X0lOLAorCQlQVE02X0ZOLCBQVE02X09VVCwgMCwgUFRNNl9JTiwKKwkJUFRNNV9GTiwgUFRNNV9PVVQsIDAsIFBUTTVfSU4sCisJCVBUTTRfRk4sIFBUTTRfT1VULCAwLCBQVE00X0lOLAorCQlQVE0zX0ZOLCBQVE0zX09VVCwgMCwgUFRNM19JTiwKKwkJUFRNMl9GTiwgUFRNMl9PVVQsIDAsIFBUTTJfSU4sCisJCVBUTTFfRk4sIFBUTTFfT1VULCAwLCBQVE0xX0lOLAorCQlQVE0wX0ZOLCBQVE0wX09VVCwgMCwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTkNSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJUFRON19GTiwgUFRON19PVVQsIDAsIFBUTjdfSU4sCisJCVBUTjZfRk4sIFBUTjZfT1VULCAwLCBQVE42X0lOLAorCQlQVE41X0ZOLCBQVE41X09VVCwgMCwgUFRONV9JTiwKKwkJUFRONF9GTiwgUFRONF9PVVQsIDAsIFBUTjRfSU4sCisJCVBUTjNfRk4sIFBUTjNfT1VULCAwLCBQVE4zX0lOLAorCQlQVE4yX0ZOLCBQVE4yX09VVCwgMCwgUFROMl9JTiwKKwkJUFROMV9GTiwgUFROMV9PVVQsIDAsIFBUTjFfSU4sCisJCVBUTjBfRk4sIFBUTjBfT1VULCAwLCBQVE4wX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBRQ1IiLCAweGE0MDUwMTFhLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQVFEzX0ZOLCAwLCAwLCBQVFEzX0lOLAorCQlQVFEyX0ZOLCAwLCAwLCBQVFEyX0lOLAorCQlQVFExX0ZOLCAwLCAwLCBQVFExX0lOLAorCQlQVFEwX0ZOLCAwLCAwLCBQVFEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBSQ1IiLCAweGE0MDUwMTFjLCAxNiwgMikgeworCQlQVFI3X0ZOLCBQVFI3X09VVCwgMCwgUFRSN19JTiwKKwkJUFRSNl9GTiwgUFRSNl9PVVQsIDAsIFBUUjZfSU4sCisJCVBUUjVfRk4sIFBUUjVfT1VULCAwLCBQVFI1X0lOLAorCQlQVFI0X0ZOLCBQVFI0X09VVCwgMCwgUFRSNF9JTiwKKwkJUFRSM19GTiwgMCwgMCwgUFRSM19JTiwKKwkJUFRSMl9GTiwgMCwgUFRSMl9JTl9QVSwgUFRSMl9JTiwKKwkJUFRSMV9GTiwgUFRSMV9PVVQsIDAsIFBUUjFfSU4sCisJCVBUUjBfRk4sIFBUUjBfT1VULCAwLCBQVFIwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTQ1IiLCAweGE0MDUwMTFlLCAxNiwgMikgeworCQlQVFM3X0ZOLCBQVFM3X09VVCwgMCwgUFRTN19JTiwKKwkJUFRTNl9GTiwgUFRTNl9PVVQsIDAsIFBUUzZfSU4sCisJCVBUUzVfRk4sIFBUUzVfT1VULCAwLCBQVFM1X0lOLAorCQlQVFM0X0ZOLCBQVFM0X09VVCwgMCwgUFRTNF9JTiwKKwkJUFRTM19GTiwgUFRTM19PVVQsIDAsIFBUUzNfSU4sCisJCVBUUzJfRk4sIFBUUzJfT1VULCAwLCBQVFMyX0lOLAorCQlQVFMxX0ZOLCBQVFMxX09VVCwgMCwgUFRTMV9JTiwKKwkJUFRTMF9GTiwgUFRTMF9PVVQsIDAsIFBUUzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFRDUiIsIDB4YTQwNTAxNDAsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUVDVfRk4sIFBUVDVfT1VULCAwLCBQVFQ1X0lOLAorCQlQVFQ0X0ZOLCBQVFQ0X09VVCwgMCwgUFRUNF9JTiwKKwkJUFRUM19GTiwgUFRUM19PVVQsIDAsIFBUVDNfSU4sCisJCVBUVDJfRk4sIFBUVDJfT1VULCAwLCBQVFQyX0lOLAorCQlQVFQxX0ZOLCBQVFQxX09VVCwgMCwgUFRUMV9JTiwKKwkJUFRUMF9GTiwgUFRUMF9PVVQsIDAsIFBUVDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFVDUiIsIDB4YTQwNTAxNDIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUVTVfRk4sIFBUVTVfT1VULCAwLCBQVFU1X0lOLAorCQlQVFU0X0ZOLCBQVFU0X09VVCwgMCwgUFRVNF9JTiwKKwkJUFRVM19GTiwgUFRVM19PVVQsIDAsIFBUVTNfSU4sCisJCVBUVTJfRk4sIFBUVTJfT1VULCAwLCBQVFUyX0lOLAorCQlQVFUxX0ZOLCBQVFUxX09VVCwgMCwgUFRVMV9JTiwKKwkJUFRVMF9GTiwgUFRVMF9PVVQsIDAsIFBUVTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFZDUiIsIDB4YTQwNTAxNDQsIDE2LCAyKSB7CisJCVBUVjdfRk4sIFBUVjdfT1VULCAwLCBQVFY3X0lOLAorCQlQVFY2X0ZOLCBQVFY2X09VVCwgMCwgUFRWNl9JTiwKKwkJUFRWNV9GTiwgUFRWNV9PVVQsIDAsIFBUVjVfSU4sCisJCVBUVjRfRk4sIFBUVjRfT1VULCAwLCBQVFY0X0lOLAorCQlQVFYzX0ZOLCBQVFYzX09VVCwgMCwgUFRWM19JTiwKKwkJUFRWMl9GTiwgUFRWMl9PVVQsIDAsIFBUVjJfSU4sCisJCVBUVjFfRk4sIFBUVjFfT1VULCAwLCBQVFYxX0lOLAorCQlQVFYwX0ZOLCBQVFYwX09VVCwgMCwgUFRWMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQV0NSIiwgMHhhNDA1MDE0NiwgMTYsIDIpIHsKKwkJUFRXN19GTiwgUFRXN19PVVQsIDAsIFBUVzdfSU4sCisJCVBUVzZfRk4sIFBUVzZfT1VULCAwLCBQVFc2X0lOLAorCQlQVFc1X0ZOLCBQVFc1X09VVCwgMCwgUFRXNV9JTiwKKwkJUFRXNF9GTiwgUFRXNF9PVVQsIDAsIFBUVzRfSU4sCisJCVBUVzNfRk4sIFBUVzNfT1VULCAwLCBQVFczX0lOLAorCQlQVFcyX0ZOLCBQVFcyX09VVCwgMCwgUFRXMl9JTiwKKwkJUFRXMV9GTiwgUFRXMV9PVVQsIDAsIFBUVzFfSU4sCisJCVBUVzBfRk4sIFBUVzBfT1VULCAwLCBQVFcwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBYQ1IiLCAweGE0MDUwMTQ4LCAxNiwgMikgeworCQlQVFg3X0ZOLCBQVFg3X09VVCwgMCwgUFRYN19JTiwKKwkJUFRYNl9GTiwgUFRYNl9PVVQsIDAsIFBUWDZfSU4sCisJCVBUWDVfRk4sIFBUWDVfT1VULCAwLCBQVFg1X0lOLAorCQlQVFg0X0ZOLCBQVFg0X09VVCwgMCwgUFRYNF9JTiwKKwkJUFRYM19GTiwgUFRYM19PVVQsIDAsIFBUWDNfSU4sCisJCVBUWDJfRk4sIFBUWDJfT1VULCAwLCBQVFgyX0lOLAorCQlQVFgxX0ZOLCBQVFgxX09VVCwgMCwgUFRYMV9JTiwKKwkJUFRYMF9GTiwgUFRYMF9PVVQsIDAsIFBUWDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFlDUiIsIDB4YTQwNTAxNGEsIDE2LCAyKSB7CisJCVBUWTdfRk4sIFBUWTdfT1VULCAwLCBQVFk3X0lOLAorCQlQVFk2X0ZOLCBQVFk2X09VVCwgMCwgUFRZNl9JTiwKKwkJUFRZNV9GTiwgUFRZNV9PVVQsIDAsIFBUWTVfSU4sCisJCVBUWTRfRk4sIFBUWTRfT1VULCAwLCBQVFk0X0lOLAorCQlQVFkzX0ZOLCBQVFkzX09VVCwgMCwgUFRZM19JTiwKKwkJUFRZMl9GTiwgUFRZMl9PVVQsIDAsIFBUWTJfSU4sCisJCVBUWTFfRk4sIFBUWTFfT1VULCAwLCBQVFkxX0lOLAorCQlQVFkwX0ZOLCBQVFkwX09VVCwgMCwgUFRZMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWkNSIiwgMHhhNDA1MDE0YywgMTYsIDIpIHsKKwkJUFRaN19GTiwgUFRaN19PVVQsIDAsIFBUWjdfSU4sCisJCVBUWjZfRk4sIFBUWjZfT1VULCAwLCBQVFo2X0lOLAorCQlQVFo1X0ZOLCBQVFo1X09VVCwgMCwgUFRaNV9JTiwKKwkJUFRaNF9GTiwgUFRaNF9PVVQsIDAsIFBUWjRfSU4sCisJCVBUWjNfRk4sIFBUWjNfT1VULCAwLCBQVFozX0lOLAorCQlQVFoyX0ZOLCBQVFoyX09VVCwgMCwgUFRaMl9JTiwKKwkJUFRaMV9GTiwgUFRaMV9PVVQsIDAsIFBUWjFfSU4sCisJCVBUWjBfRk4sIFBUWjBfT1VULCAwLCBQVFowX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxBIiwgMHhhNDA1MDE0ZSwgMTYsIDIpIHsKKwkJUFNBMTVfUFNBMTRfRk4xLCBQU0ExNV9QU0ExNF9GTjIsIDAsIDAsCisJCVBTQTEzX1BTQTEyX0ZOMSwgUFNBMTNfUFNBMTJfRk4yLCAwLCAwLAorCQlQU0ExMV9QU0ExMF9GTjEsIFBTQTExX1BTQTEwX0ZOMiwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFNBNV9QU0E0X0ZOMSwgUFNBNV9QU0E0X0ZOMiwgUFNBNV9QU0E0X0ZOMywgMCwKKwkJUFNBM19QU0EyX0ZOMSwgUFNBM19QU0EyX0ZOMiwgMCwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMQiIsIDB4YTQwNTAxNTAsIDE2LCAyKSB7CisJCVBTQjE1X1BTQjE0X0ZOMSwgUFNCMTVfUFNCMTRfRk4yLCAwLCAwLAorCQlQU0IxM19QU0IxMl9MQ0RDX1JHQiwgUFNCMTNfUFNCMTJfTENEQ19TWVMsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBTQjlfUFNCOF9GTjEsIFBTQjlfUFNCOF9GTjIsIFBTQjlfUFNCOF9GTjMsIDAsCisJCVBTQjdfUFNCNl9GTjEsIFBTQjdfUFNCNl9GTjIsIDAsIDAsCisJCVBTQjVfUFNCNF9GTjEsIFBTQjVfUFNCNF9GTjIsIDAsIDAsCisJCVBTQjNfUFNCMl9GTjEsIFBTQjNfUFNCMl9GTjIsIDAsIDAsCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEMiLCAweGE0MDUwMTUyLCAxNiwgMikgeworCQlQU0MxNV9QU0MxNF9GTjEsIFBTQzE1X1BTQzE0X0ZOMiwgMCwgMCwKKwkJUFNDMTNfUFNDMTJfRk4xLCBQU0MxM19QU0MxMl9GTjIsIDAsIDAsCisJCVBTQzExX1BTQzEwX0ZOMSwgUFNDMTFfUFNDMTBfRk4yLCBQU0MxMV9QU0MxMF9GTjMsIDAsCisJCVBTQzlfUFNDOF9GTjEsIFBTQzlfUFNDOF9GTjIsIDAsIDAsCisJCVBTQzdfUFNDNl9GTjEsIFBTQzdfUFNDNl9GTjIsIFBTQzdfUFNDNl9GTjMsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEQiLCAweGE0MDUwMTU0LCAxNiwgMikgeworCQlQU0QxNV9QU0QxNF9GTjEsIFBTRDE1X1BTRDE0X0ZOMiwgMCwgMCwKKwkJUFNEMTNfUFNEMTJfRk4xLCBQU0QxM19QU0QxMl9GTjIsIDAsIDAsCisJCVBTRDExX1BTRDEwX0ZOMSwgUFNEMTFfUFNEMTBfRk4yLCBQU0QxMV9QU0QxMF9GTjMsIDAsCisJCVBTRDlfUFNEOF9GTjEsIFBTRDlfUFNEOF9GTjIsIDAsIDAsCisJCVBTRDdfUFNENl9GTjEsIFBTRDdfUFNENl9GTjIsIDAsIDAsCisJCVBTRDVfUFNENF9GTjEsIFBTRDVfUFNENF9GTjIsIDAsIDAsCisJCVBTRDNfUFNEMl9GTjEsIFBTRDNfUFNEMl9GTjIsIDAsIDAsCisJCVBTRDFfUFNEMF9GTjEsIFBTRDFfUFNEMF9GTjIsIDAsIDAgfQorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHBpbm11eF9kYXRhX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEFEUiIsIDB4YTQwNTAxMjAsIDgpIHsKKwkJUFRBN19EQVRBLCBQVEE2X0RBVEEsIFBUQTVfREFUQSwgUFRBNF9EQVRBLAorCQlQVEEzX0RBVEEsIFBUQTJfREFUQSwgUFRBMV9EQVRBLCBQVEEwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBCRFIiLCAweGE0MDUwMTIyLCA4KSB7CisJCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwkJUFRCM19EQVRBLCBQVEIyX0RBVEEsIFBUQjFfREFUQSwgUFRCMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQ0RSIiwgMHhhNDA1MDEyNCwgOCkgeworCQlQVEM3X0RBVEEsIFBUQzZfREFUQSwgUFRDNV9EQVRBLCBQVEM0X0RBVEEsCisJCVBUQzNfREFUQSwgUFRDMl9EQVRBLCBQVEMxX0RBVEEsIFBUQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4YTQwNTAxMjYsIDgpIHsKKwkJUFREN19EQVRBLCBQVEQ2X0RBVEEsIFBURDVfREFUQSwgUFRENF9EQVRBLAorCQlQVEQzX0RBVEEsIFBURDJfREFUQSwgUFREMV9EQVRBLCBQVEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFIiLCAweGE0MDUwMTI4LCA4KSB7CisJCTAsIDAsIFBURTVfREFUQSwgUFRFNF9EQVRBLAorCQlQVEUzX0RBVEEsIFBURTJfREFUQSwgUFRFMV9EQVRBLCBQVEUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFIiLCAweGE0MDUwMTJhLCA4KSB7CisJCVBURjdfREFUQSwgUFRGNl9EQVRBLCBQVEY1X0RBVEEsIFBURjRfREFUQSwKKwkJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQR0RSIiwgMHhhNDA1MDEyYywgOCkgeworCQkwLCAwLCBQVEc1X0RBVEEsIFBURzRfREFUQSwKKwkJUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSERSIiwgMHhhNDA1MDEyZSwgOCkgeworCQlQVEg3X0RBVEEsIFBUSDZfREFUQSwgUFRINV9EQVRBLCBQVEg0X0RBVEEsCisJCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEpEUiIsIDB4YTQwNTAxMzAsIDgpIHsKKwkJUFRKN19EQVRBLCAwLCBQVEo1X0RBVEEsIDAsCisJCVBUSjNfREFUQSwgUFRKMl9EQVRBLCBQVEoxX0RBVEEsIFBUSjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEtEUiIsIDB4YTQwNTAxMzIsIDgpIHsKKwkJUFRLN19EQVRBLCBQVEs2X0RBVEEsIFBUSzVfREFUQSwgUFRLNF9EQVRBLAorCQlQVEszX0RBVEEsIFBUSzJfREFUQSwgUFRLMV9EQVRBLCBQVEswX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBMRFIiLCAweGE0MDUwMTM0LCA4KSB7CisJCVBUTDdfREFUQSwgUFRMNl9EQVRBLCBQVEw1X0RBVEEsIFBUTDRfREFUQSwKKwkJUFRMM19EQVRBLCBQVEwyX0RBVEEsIFBUTDFfREFUQSwgUFRMMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTURSIiwgMHhhNDA1MDEzNiwgOCkgeworCQlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJCVBUTTNfREFUQSwgUFRNMl9EQVRBLCBQVE0xX0RBVEEsIFBUTTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE5EUiIsIDB4YTQwNTAxMzgsIDgpIHsKKwkJUFRON19EQVRBLCBQVE42X0RBVEEsIFBUTjVfREFUQSwgUFRONF9EQVRBLAorCQlQVE4zX0RBVEEsIFBUTjJfREFUQSwgUFROMV9EQVRBLCBQVE4wX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBRRFIiLCAweGE0MDUwMTNhLCA4KSB7CisJCTAsIDAsIDAsIDAsCisJCVBUUTNfREFUQSwgUFRRMl9EQVRBLCBQVFExX0RBVEEsIFBUUTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFJEUiIsIDB4YTQwNTAxM2MsIDgpIHsKKwkJUFRSN19EQVRBLCBQVFI2X0RBVEEsIFBUUjVfREFUQSwgUFRSNF9EQVRBLAorCQlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBTRFIiLCAweGE0MDUwMTNlLCA4KSB7CisJCVBUUzdfREFUQSwgUFRTNl9EQVRBLCBQVFM1X0RBVEEsIFBUUzRfREFUQSwKKwkJUFRTM19EQVRBLCBQVFMyX0RBVEEsIFBUUzFfREFUQSwgUFRTMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVERSIiwgMHhhNDA1MDE2MCwgOCkgeworCQkwLCAwLCBQVFQ1X0RBVEEsIFBUVDRfREFUQSwKKwkJUFRUM19EQVRBLCBQVFQyX0RBVEEsIFBUVDFfREFUQSwgUFRUMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVURSIiwgMHhhNDA1MDE2MiwgOCkgeworCQkwLCAwLCBQVFU1X0RBVEEsIFBUVTRfREFUQSwKKwkJUFRVM19EQVRBLCBQVFUyX0RBVEEsIFBUVTFfREFUQSwgUFRVMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVkRSIiwgMHhhNDA1MDE2NCwgOCkgeworCQlQVFY3X0RBVEEsIFBUVjZfREFUQSwgUFRWNV9EQVRBLCBQVFY0X0RBVEEsCisJCVBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFdEUiIsIDB4YTQwNTAxNjYsIDgpIHsKKwkJUFRXN19EQVRBLCBQVFc2X0RBVEEsIFBUVzVfREFUQSwgUFRXNF9EQVRBLAorCQlQVFczX0RBVEEsIFBUVzJfREFUQSwgUFRXMV9EQVRBLCBQVFcwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBYRFIiLCAweGE0MDUwMTY4LCA4KSB7CisJCVBUWDdfREFUQSwgUFRYNl9EQVRBLCBQVFg1X0RBVEEsIFBUWDRfREFUQSwKKwkJUFRYM19EQVRBLCBQVFgyX0RBVEEsIFBUWDFfREFUQSwgUFRYMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWURSIiwgMHhhNDA1MDE2YSwgOCkgeworCQlQVFk3X0RBVEEsIFBUWTZfREFUQSwgUFRZNV9EQVRBLCBQVFk0X0RBVEEsCisJCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFpEUiIsIDB4YTQwNTAxNmMsIDgpIHsKKwkJUFRaN19EQVRBLCBQVFo2X0RBVEEsIFBUWjVfREFUQSwgUFRaNF9EQVRBLAorCQlQVFozX0RBVEEsIFBUWjJfREFUQSwgUFRaMV9EQVRBLCBQVFowX0RBVEEgfQorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyBzaDc3MjNfcGlubXV4X2luZm8gPSB7CisJLm5hbWUgPSAic2g3NzIzX3BmYyIsCisJLnJlc2VydmVkX2lkID0gUElOTVVYX1JFU0VSVkVELAorCS5kYXRhID0geyBQSU5NVVhfREFUQV9CRUdJTiwgUElOTVVYX0RBVEFfRU5EIH0sCisJLmlucHV0ID0geyBQSU5NVVhfSU5QVVRfQkVHSU4sIFBJTk1VWF9JTlBVVF9FTkQgfSwKKwkuaW5wdXRfcHUgPSB7IFBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMVVBfRU5EIH0sCisJLm91dHB1dCA9IHsgUElOTVVYX09VVFBVVF9CRUdJTiwgUElOTVVYX09VVFBVVF9FTkQgfSwKKwkubWFyayA9IHsgUElOTVVYX01BUktfQkVHSU4sIFBJTk1VWF9NQVJLX0VORCB9LAorCS5mdW5jdGlvbiA9IHsgUElOTVVYX0ZVTkNUSU9OX0JFR0lOLCBQSU5NVVhfRlVOQ1RJT05fRU5EIH0sCisKKwkuZmlyc3RfZ3BpbyA9IEdQSU9fUFRBNywKKwkubGFzdF9ncGlvID0gR1BJT19GTl9JREVBMCwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X3Bpbm11eF9zZXR1cCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9waW5tdXgoJnNoNzcyM19waW5tdXhfaW5mbyk7Cit9CisKK2FyY2hfaW5pdGNhbGwocGxhdF9waW5tdXhfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4NS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYmMyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg1LmMKQEAgLTAsMCArMSwxMzEwIEBACisvKgorICogU0g3Nzg1IFBpbm11eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzc4NS5oPgorCitlbnVtIHsKKwlQSU5NVVhfUkVTRVJWRUQgPSAwLAorCisJUElOTVVYX0RBVEFfQkVHSU4sCisJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJUEEzX0RBVEEsIFBBMl9EQVRBLCBQQTFfREFUQSwgUEEwX0RBVEEsCisJUEI3X0RBVEEsIFBCNl9EQVRBLCBQQjVfREFUQSwgUEI0X0RBVEEsCisJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEsCisJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEsCisJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEsCisJUEU1X0RBVEEsIFBFNF9EQVRBLCBQRTNfREFUQSwgUEUyX0RBVEEsIFBFMV9EQVRBLCBQRTBfREFUQSwKKwlQRjdfREFUQSwgUEY2X0RBVEEsIFBGNV9EQVRBLCBQRjRfREFUQSwKKwlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSwKKwlQRzdfREFUQSwgUEc2X0RBVEEsIFBHNV9EQVRBLCBQRzRfREFUQSwKKwlQRzNfREFUQSwgUEcyX0RBVEEsIFBHMV9EQVRBLCBQRzBfREFUQSwKKwlQSDdfREFUQSwgUEg2X0RBVEEsIFBINV9EQVRBLCBQSDRfREFUQSwKKwlQSDNfREFUQSwgUEgyX0RBVEEsIFBIMV9EQVRBLCBQSDBfREFUQSwKKwlQSjdfREFUQSwgUEo2X0RBVEEsIFBKNV9EQVRBLCBQSjRfREFUQSwKKwlQSjNfREFUQSwgUEoyX0RBVEEsIFBKMV9EQVRBLCBQSjBfREFUQSwKKwlQSzdfREFUQSwgUEs2X0RBVEEsIFBLNV9EQVRBLCBQSzRfREFUQSwKKwlQSzNfREFUQSwgUEsyX0RBVEEsIFBLMV9EQVRBLCBQSzBfREFUQSwKKwlQTDdfREFUQSwgUEw2X0RBVEEsIFBMNV9EQVRBLCBQTDRfREFUQSwKKwlQTDNfREFUQSwgUEwyX0RBVEEsIFBMMV9EQVRBLCBQTDBfREFUQSwKKwlQTTFfREFUQSwgUE0wX0RBVEEsCisJUE43X0RBVEEsIFBONl9EQVRBLCBQTjVfREFUQSwgUE40X0RBVEEsCisJUE4zX0RBVEEsIFBOMl9EQVRBLCBQTjFfREFUQSwgUE4wX0RBVEEsCisJUFA1X0RBVEEsIFBQNF9EQVRBLCBQUDNfREFUQSwgUFAyX0RBVEEsIFBQMV9EQVRBLCBQUDBfREFUQSwKKwlQUTRfREFUQSwgUFEzX0RBVEEsIFBRMl9EQVRBLCBQUTFfREFUQSwgUFEwX0RBVEEsCisJUFIzX0RBVEEsIFBSMl9EQVRBLCBQUjFfREFUQSwgUFIwX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBBN19JTiwgUEE2X0lOLCBQQTVfSU4sIFBBNF9JTiwKKwlQQTNfSU4sIFBBMl9JTiwgUEExX0lOLCBQQTBfSU4sCisJUEI3X0lOLCBQQjZfSU4sIFBCNV9JTiwgUEI0X0lOLAorCVBCM19JTiwgUEIyX0lOLCBQQjFfSU4sIFBCMF9JTiwKKwlQQzdfSU4sIFBDNl9JTiwgUEM1X0lOLCBQQzRfSU4sCisJUEMzX0lOLCBQQzJfSU4sIFBDMV9JTiwgUEMwX0lOLAorCVBEN19JTiwgUEQ2X0lOLCBQRDVfSU4sIFBENF9JTiwKKwlQRDNfSU4sIFBEMl9JTiwgUEQxX0lOLCBQRDBfSU4sCisJUEU1X0lOLCBQRTRfSU4sIFBFM19JTiwgUEUyX0lOLCBQRTFfSU4sIFBFMF9JTiwKKwlQRjdfSU4sIFBGNl9JTiwgUEY1X0lOLCBQRjRfSU4sCisJUEYzX0lOLCBQRjJfSU4sIFBGMV9JTiwgUEYwX0lOLAorCVBHN19JTiwgUEc2X0lOLCBQRzVfSU4sIFBHNF9JTiwKKwlQRzNfSU4sIFBHMl9JTiwgUEcxX0lOLCBQRzBfSU4sCisJUEg3X0lOLCBQSDZfSU4sIFBINV9JTiwgUEg0X0lOLAorCVBIM19JTiwgUEgyX0lOLCBQSDFfSU4sIFBIMF9JTiwKKwlQSjdfSU4sIFBKNl9JTiwgUEo1X0lOLCBQSjRfSU4sCisJUEozX0lOLCBQSjJfSU4sIFBKMV9JTiwgUEowX0lOLAorCVBLN19JTiwgUEs2X0lOLCBQSzVfSU4sIFBLNF9JTiwKKwlQSzNfSU4sIFBLMl9JTiwgUEsxX0lOLCBQSzBfSU4sCisJUEw3X0lOLCBQTDZfSU4sIFBMNV9JTiwgUEw0X0lOLAorCVBMM19JTiwgUEwyX0lOLCBQTDFfSU4sIFBMMF9JTiwKKwlQTTFfSU4sIFBNMF9JTiwKKwlQTjdfSU4sIFBONl9JTiwgUE41X0lOLCBQTjRfSU4sCisJUE4zX0lOLCBQTjJfSU4sIFBOMV9JTiwgUE4wX0lOLAorCVBQNV9JTiwgUFA0X0lOLCBQUDNfSU4sIFBQMl9JTiwgUFAxX0lOLCBQUDBfSU4sCisJUFE0X0lOLCBQUTNfSU4sIFBRMl9JTiwgUFExX0lOLCBQUTBfSU4sCisJUFIzX0lOLCBQUjJfSU4sIFBSMV9JTiwgUFIwX0lOLAorCVBJTk1VWF9JTlBVVF9FTkQsCisKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLAorCVBBN19JTl9QVSwgUEE2X0lOX1BVLCBQQTVfSU5fUFUsIFBBNF9JTl9QVSwKKwlQQTNfSU5fUFUsIFBBMl9JTl9QVSwgUEExX0lOX1BVLCBQQTBfSU5fUFUsCisJUEI3X0lOX1BVLCBQQjZfSU5fUFUsIFBCNV9JTl9QVSwgUEI0X0lOX1BVLAorCVBCM19JTl9QVSwgUEIyX0lOX1BVLCBQQjFfSU5fUFUsIFBCMF9JTl9QVSwKKwlQQzdfSU5fUFUsIFBDNl9JTl9QVSwgUEM1X0lOX1BVLCBQQzRfSU5fUFUsCisJUEMzX0lOX1BVLCBQQzJfSU5fUFUsIFBDMV9JTl9QVSwgUEMwX0lOX1BVLAorCVBEN19JTl9QVSwgUEQ2X0lOX1BVLCBQRDVfSU5fUFUsIFBENF9JTl9QVSwKKwlQRDNfSU5fUFUsIFBEMl9JTl9QVSwgUEQxX0lOX1BVLCBQRDBfSU5fUFUsCisJUEU1X0lOX1BVLCBQRTRfSU5fUFUsIFBFM19JTl9QVSwgUEUyX0lOX1BVLCBQRTFfSU5fUFUsIFBFMF9JTl9QVSwKKwlQRjdfSU5fUFUsIFBGNl9JTl9QVSwgUEY1X0lOX1BVLCBQRjRfSU5fUFUsCisJUEYzX0lOX1BVLCBQRjJfSU5fUFUsIFBGMV9JTl9QVSwgUEYwX0lOX1BVLAorCVBHN19JTl9QVSwgUEc2X0lOX1BVLCBQRzVfSU5fUFUsIFBHNF9JTl9QVSwKKwlQRzNfSU5fUFUsIFBHMl9JTl9QVSwgUEcxX0lOX1BVLCBQRzBfSU5fUFUsCisJUEg3X0lOX1BVLCBQSDZfSU5fUFUsIFBINV9JTl9QVSwgUEg0X0lOX1BVLAorCVBIM19JTl9QVSwgUEgyX0lOX1BVLCBQSDFfSU5fUFUsIFBIMF9JTl9QVSwKKwlQSjdfSU5fUFUsIFBKNl9JTl9QVSwgUEo1X0lOX1BVLCBQSjRfSU5fUFUsCisJUEozX0lOX1BVLCBQSjJfSU5fUFUsIFBKMV9JTl9QVSwgUEowX0lOX1BVLAorCVBLN19JTl9QVSwgUEs2X0lOX1BVLCBQSzVfSU5fUFUsIFBLNF9JTl9QVSwKKwlQSzNfSU5fUFUsIFBLMl9JTl9QVSwgUEsxX0lOX1BVLCBQSzBfSU5fUFUsCisJUEw3X0lOX1BVLCBQTDZfSU5fUFUsIFBMNV9JTl9QVSwgUEw0X0lOX1BVLAorCVBMM19JTl9QVSwgUEwyX0lOX1BVLCBQTDFfSU5fUFUsIFBMMF9JTl9QVSwKKwlQTTFfSU5fUFUsIFBNMF9JTl9QVSwKKwlQTjdfSU5fUFUsIFBONl9JTl9QVSwgUE41X0lOX1BVLCBQTjRfSU5fUFUsCisJUE4zX0lOX1BVLCBQTjJfSU5fUFUsIFBOMV9JTl9QVSwgUE4wX0lOX1BVLAorCVBQNV9JTl9QVSwgUFA0X0lOX1BVLCBQUDNfSU5fUFUsIFBQMl9JTl9QVSwgUFAxX0lOX1BVLCBQUDBfSU5fUFUsCisJUFE0X0lOX1BVLCBQUTNfSU5fUFUsIFBRMl9JTl9QVSwgUFExX0lOX1BVLCBQUTBfSU5fUFUsCisJUFIzX0lOX1BVLCBQUjJfSU5fUFUsIFBSMV9JTl9QVSwgUFIwX0lOX1BVLAorCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQQTdfT1VULCBQQTZfT1VULCBQQTVfT1VULCBQQTRfT1VULAorCVBBM19PVVQsIFBBMl9PVVQsIFBBMV9PVVQsIFBBMF9PVVQsCisJUEI3X09VVCwgUEI2X09VVCwgUEI1X09VVCwgUEI0X09VVCwKKwlQQjNfT1VULCBQQjJfT1VULCBQQjFfT1VULCBQQjBfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDdfT1VULCBQRDZfT1VULCBQRDVfT1VULCBQRDRfT1VULAorCVBEM19PVVQsIFBEMl9PVVQsIFBEMV9PVVQsIFBEMF9PVVQsCisJUEU1X09VVCwgUEU0X09VVCwgUEUzX09VVCwgUEUyX09VVCwgUEUxX09VVCwgUEUwX09VVCwKKwlQRjdfT1VULCBQRjZfT1VULCBQRjVfT1VULCBQRjRfT1VULAorCVBGM19PVVQsIFBGMl9PVVQsIFBGMV9PVVQsIFBGMF9PVVQsCisJUEc3X09VVCwgUEc2X09VVCwgUEc1X09VVCwgUEc0X09VVCwKKwlQRzNfT1VULCBQRzJfT1VULCBQRzFfT1VULCBQRzBfT1VULAorCVBIN19PVVQsIFBINl9PVVQsIFBINV9PVVQsIFBINF9PVVQsCisJUEgzX09VVCwgUEgyX09VVCwgUEgxX09VVCwgUEgwX09VVCwKKwlQSjdfT1VULCBQSjZfT1VULCBQSjVfT1VULCBQSjRfT1VULAorCVBKM19PVVQsIFBKMl9PVVQsIFBKMV9PVVQsIFBKMF9PVVQsCisJUEs3X09VVCwgUEs2X09VVCwgUEs1X09VVCwgUEs0X09VVCwKKwlQSzNfT1VULCBQSzJfT1VULCBQSzFfT1VULCBQSzBfT1VULAorCVBMN19PVVQsIFBMNl9PVVQsIFBMNV9PVVQsIFBMNF9PVVQsCisJUEwzX09VVCwgUEwyX09VVCwgUEwxX09VVCwgUEwwX09VVCwKKwlQTTFfT1VULCBQTTBfT1VULAorCVBON19PVVQsIFBONl9PVVQsIFBONV9PVVQsIFBONF9PVVQsCisJUE4zX09VVCwgUE4yX09VVCwgUE4xX09VVCwgUE4wX09VVCwKKwlQUDVfT1VULCBQUDRfT1VULCBQUDNfT1VULCBQUDJfT1VULCBQUDFfT1VULCBQUDBfT1VULAorCVBRNF9PVVQsIFBRM19PVVQsIFBRMl9PVVQsIFBRMV9PVVQsIFBRMF9PVVQsCisJUFIzX09VVCwgUFIyX09VVCwgUFIxX09VVCwgUFIwX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQQTdfRk4sIFBBNl9GTiwgUEE1X0ZOLCBQQTRfRk4sCisJUEEzX0ZOLCBQQTJfRk4sIFBBMV9GTiwgUEEwX0ZOLAorCVBCN19GTiwgUEI2X0ZOLCBQQjVfRk4sIFBCNF9GTiwKKwlQQjNfRk4sIFBCMl9GTiwgUEIxX0ZOLCBQQjBfRk4sCisJUEM3X0ZOLCBQQzZfRk4sIFBDNV9GTiwgUEM0X0ZOLAorCVBDM19GTiwgUEMyX0ZOLCBQQzFfRk4sIFBDMF9GTiwKKwlQRDdfRk4sIFBENl9GTiwgUEQ1X0ZOLCBQRDRfRk4sCisJUEQzX0ZOLCBQRDJfRk4sIFBEMV9GTiwgUEQwX0ZOLAorCVBFNV9GTiwgUEU0X0ZOLCBQRTNfRk4sIFBFMl9GTiwgUEUxX0ZOLCBQRTBfRk4sCisJUEY3X0ZOLCBQRjZfRk4sIFBGNV9GTiwgUEY0X0ZOLAorCVBGM19GTiwgUEYyX0ZOLCBQRjFfRk4sIFBGMF9GTiwKKwlQRzdfRk4sIFBHNl9GTiwgUEc1X0ZOLCBQRzRfRk4sCisJUEczX0ZOLCBQRzJfRk4sIFBHMV9GTiwgUEcwX0ZOLAorCVBIN19GTiwgUEg2X0ZOLCBQSDVfRk4sIFBINF9GTiwKKwlQSDNfRk4sIFBIMl9GTiwgUEgxX0ZOLCBQSDBfRk4sCisJUEo3X0ZOLCBQSjZfRk4sIFBKNV9GTiwgUEo0X0ZOLAorCVBKM19GTiwgUEoyX0ZOLCBQSjFfRk4sIFBKMF9GTiwKKwlQSzdfRk4sIFBLNl9GTiwgUEs1X0ZOLCBQSzRfRk4sCisJUEszX0ZOLCBQSzJfRk4sIFBLMV9GTiwgUEswX0ZOLAorCVBMN19GTiwgUEw2X0ZOLCBQTDVfRk4sIFBMNF9GTiwKKwlQTDNfRk4sIFBMMl9GTiwgUEwxX0ZOLCBQTDBfRk4sCisJUE0xX0ZOLCBQTTBfRk4sCisJUE43X0ZOLCBQTjZfRk4sIFBONV9GTiwgUE40X0ZOLAorCVBOM19GTiwgUE4yX0ZOLCBQTjFfRk4sIFBOMF9GTiwKKwlQUDVfRk4sIFBQNF9GTiwgUFAzX0ZOLCBQUDJfRk4sIFBQMV9GTiwgUFAwX0ZOLAorCVBRNF9GTiwgUFEzX0ZOLCBQUTJfRk4sIFBRMV9GTiwgUFEwX0ZOLAorCVBSM19GTiwgUFIyX0ZOLCBQUjFfRk4sIFBSMF9GTiwKKwlQMU1TRUwxNV8wLCBQMU1TRUwxNV8xLAorCVAxTVNFTDE0XzAsIFAxTVNFTDE0XzEsCisJUDFNU0VMMTNfMCwgUDFNU0VMMTNfMSwKKwlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCVAxTVNFTDExXzAsIFAxTVNFTDExXzEsCisJUDFNU0VMMTBfMCwgUDFNU0VMMTBfMSwKKwlQMU1TRUw5XzAsIFAxTVNFTDlfMSwKKwlQMU1TRUw4XzAsIFAxTVNFTDhfMSwKKwlQMU1TRUw3XzAsIFAxTVNFTDdfMSwKKwlQMU1TRUw2XzAsIFAxTVNFTDZfMSwKKwlQMU1TRUw1XzAsCisJUDFNU0VMNF8wLCBQMU1TRUw0XzEsCisJUDFNU0VMM18wLCBQMU1TRUwzXzEsCisJUDFNU0VMMl8wLCBQMU1TRUwyXzEsCisJUDFNU0VMMV8wLCBQMU1TRUwxXzEsCisJUDFNU0VMMF8wLCBQMU1TRUwwXzEsCisJUDJNU0VMMl8wLCBQMk1TRUwyXzEsCisJUDJNU0VMMV8wLCBQMk1TRUwxXzEsCisJUDJNU0VMMF8wLCBQMk1TRUwwXzEsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCUQ2M19BRDMxX01BUkssCisJRDYyX0FEMzBfTUFSSywKKwlENjFfQUQyOV9NQVJLLAorCUQ2MF9BRDI4X01BUkssCisJRDU5X0FEMjdfTUFSSywKKwlENThfQUQyNl9NQVJLLAorCUQ1N19BRDI1X01BUkssCisJRDU2X0FEMjRfTUFSSywKKwlENTVfQUQyM19NQVJLLAorCUQ1NF9BRDIyX01BUkssCisJRDUzX0FEMjFfTUFSSywKKwlENTJfQUQyMF9NQVJLLAorCUQ1MV9BRDE5X01BUkssCisJRDUwX0FEMThfTUFSSywKKwlENDlfQUQxN19EQjVfTUFSSywKKwlENDhfQUQxNl9EQjRfTUFSSywKKwlENDdfQUQxNV9EQjNfTUFSSywKKwlENDZfQUQxNF9EQjJfTUFSSywKKwlENDVfQUQxM19EQjFfTUFSSywKKwlENDRfQUQxMl9EQjBfTUFSSywKKwlENDNfQUQxMV9ERzVfTUFSSywKKwlENDJfQUQxMF9ERzRfTUFSSywKKwlENDFfQUQ5X0RHM19NQVJLLAorCUQ0MF9BRDhfREcyX01BUkssCisJRDM5X0FEN19ERzFfTUFSSywKKwlEMzhfQUQ2X0RHMF9NQVJLLAorCUQzN19BRDVfRFI1X01BUkssCisJRDM2X0FENF9EUjRfTUFSSywKKwlEMzVfQUQzX0RSM19NQVJLLAorCUQzNF9BRDJfRFIyX01BUkssCisJRDMzX0FEMV9EUjFfTUFSSywKKwlEMzJfQUQwX0RSMF9NQVJLLAorCVJFUTFfTUFSSywKKwlSRVEyX01BUkssCisJUkVRM19NQVJLLAorCUdOVDFfTUFSSywKKwlHTlQyX01BUkssCisJR05UM19NQVJLLAorCU1NQ0NMS19NQVJLLAorCUQzMV9NQVJLLAorCUQzMF9NQVJLLAorCUQyOV9NQVJLLAorCUQyOF9NQVJLLAorCUQyN19NQVJLLAorCUQyNl9NQVJLLAorCUQyNV9NQVJLLAorCUQyNF9NQVJLLAorCUQyM19NQVJLLAorCUQyMl9NQVJLLAorCUQyMV9NQVJLLAorCUQyMF9NQVJLLAorCUQxOV9NQVJLLAorCUQxOF9NQVJLLAorCUQxN19NQVJLLAorCUQxNl9NQVJLLAorCVNDSUYxX1NDS19NQVJLLAorCVNDSUYxX1JYRF9NQVJLLAorCVNDSUYxX1RYRF9NQVJLLAorCVNDSUYwX0NUU19NQVJLLAorCUlOVERfTUFSSywKKwlGQ0VfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywKKwlIU1BJX0NTX01BUkssCisJRlNFX01BUkssCisJU0NJRjBfU0NLX01BUkssCisJSFNQSV9DTEtfTUFSSywKKwlGUkVfTUFSSywKKwlTQ0lGMF9SWERfTUFSSywKKwlIU1BJX1JYX01BUkssCisJRlJCX01BUkssCisJU0NJRjBfVFhEX01BUkssCisJSFNQSV9UWF9NQVJLLAorCUZXRV9NQVJLLAorCVNDSUY1X1RYRF9NQVJLLAorCUhBQzFfU1lOQ19NQVJLLAorCVNTSTFfV1NfTUFSSywKKwlTSU9GX1RYRF9QSl9NQVJLLAorCUhBQzBfU0RPVVRfTUFSSywKKwlTU0kwX1NEQVRBX01BUkssCisJU0lPRl9SWERfUEpfTUFSSywKKwlIQUMwX1NESU5fTUFSSywKKwlTU0kwX1NDS19NQVJLLAorCVNJT0ZfU1lOQ19QSl9NQVJLLAorCUhBQzBfU1lOQ19NQVJLLAorCVNTSTBfV1NfTUFSSywKKwlTSU9GX01DTEtfUEpfTUFSSywKKwlIQUNfUkVTX01BUkssCisJU0lPRl9TQ0tfUEpfTUFSSywKKwlIQUMwX0JJVENMS19NQVJLLAorCVNTSTBfQ0xLX01BUkssCisJSEFDMV9CSVRDTEtfTUFSSywKKwlTU0kxX0NMS19NQVJLLAorCVRDTEtfTUFSSywKKwlJT0lTMTZfTUFSSywKKwlTVEFUVVMwX01BUkssCisJRFJBSzBfUEszX01BUkssCisJU1RBVFVTMV9NQVJLLAorCURSQUsxX1BLMl9NQVJLLAorCURBQ0syX01BUkssCisJU0NJRjJfVFhEX01BUkssCisJTU1DQ01EX01BUkssCisJU0lPRl9UWERfUEtfTUFSSywKKwlEQUNLM19NQVJLLAorCVNDSUYyX1NDS19NQVJLLAorCU1NQ0RBVF9NQVJLLAorCVNJT0ZfU0NLX1BLX01BUkssCisJRFJFUTBfTUFSSywKKwlEUkVRMV9NQVJLLAorCURSQUswX1BLMV9NQVJLLAorCURSQUsxX1BLMF9NQVJLLAorCURSRVEyX01BUkssCisJSU5UQl9NQVJLLAorCURSRVEzX01BUkssCisJSU5UQ19NQVJLLAorCURSQUsyX01BUkssCisJQ0UyQV9NQVJLLAorCUlSTDRfTUFSSywKKwlGRDRfTUFSSywKKwlJUkw1X01BUkssCisJRkQ1X01BUkssCisJSVJMNl9NQVJLLAorCUZENl9NQVJLLAorCUlSTDdfTUFSSywKKwlGRDdfTUFSSywKKwlEUkFLM19NQVJLLAorCUNFMkJfTUFSSywKKwlCUkVRX0JTQUNLX01BUkssCisJQkFDS19CU1JFUV9NQVJLLAorCVNDSUY1X1JYRF9NQVJLLAorCUhBQzFfU0RJTl9NQVJLLAorCVNTSTFfU0NLX01BUkssCisJU0NJRjVfU0NLX01BUkssCisJSEFDMV9TRE9VVF9NQVJLLAorCVNTSTFfU0RBVEFfTUFSSywKKwlTQ0lGM19UWERfTUFSSywKKwlGQ0xFX01BUkssCisJU0NJRjNfUlhEX01BUkssCisJRkFMRV9NQVJLLAorCVNDSUYzX1NDS19NQVJLLAorCUZEMF9NQVJLLAorCVNDSUY0X1RYRF9NQVJLLAorCUZEMV9NQVJLLAorCVNDSUY0X1JYRF9NQVJLLAorCUZEMl9NQVJLLAorCVNDSUY0X1NDS19NQVJLLAorCUZEM19NQVJLLAorCURFVlNFTF9EQ0xLT1VUX01BUkssCisJU1RPUF9DREVfTUFSSywKKwlMT0NLX09EREZfTUFSSywKKwlUUkRZX0RJU1BMX01BUkssCisJSVJEWV9IU1lOQ19NQVJLLAorCVBDSUZSQU1FX1ZTWU5DX01BUkssCisJSU5UQV9NQVJLLAorCUdOVDBfR05USU5fTUFSSywKKwlSRVEwX1JFUU9VVF9NQVJLLAorCVBFUlJfTUFSSywKKwlTRVJSX01BUkssCisJV0U3X0NCRTNfTUFSSywKKwlXRTZfQ0JFMl9NQVJLLAorCVdFNV9DQkUxX01BUkssCisJV0U0X0NCRTBfTUFSSywKKwlTQ0lGMl9SWERfTUFSSywKKwlTSU9GX1JYRF9NQVJLLAorCU1SRVNFVE9VVF9NQVJLLAorCUlSUU9VVF9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSBHUElPICovCisJUElOTVVYX0RBVEEoUEE3X0RBVEEsIFBBN19JTiwgUEE3X09VVCwgUEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTZfREFUQSwgUEE2X0lOLCBQQTZfT1VULCBQQTZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4sIFBBNV9PVVQsIFBBNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEE0X0RBVEEsIFBBNF9JTiwgUEE0X09VVCwgUEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTNfREFUQSwgUEEzX0lOLCBQQTNfT1VULCBQQTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4sIFBBMl9PVVQsIFBBMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEExX0RBVEEsIFBBMV9JTiwgUEExX09VVCwgUEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTBfREFUQSwgUEEwX0lOLCBQQTBfT1VULCBQQTBfSU5fUFUpLAorCisJLyogUEIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBCN19EQVRBLCBQQjdfSU4sIFBCN19PVVQsIFBCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNl9JTiwgUEI2X09VVCwgUEI2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjVfREFUQSwgUEI1X0lOLCBQQjVfT1VULCBQQjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNF9EQVRBLCBQQjRfSU4sIFBCNF9PVVQsIFBCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM19JTiwgUEIzX09VVCwgUEIzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjJfREFUQSwgUEIyX0lOLCBQQjJfT1VULCBQQjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMV9EQVRBLCBQQjFfSU4sIFBCMV9PVVQsIFBCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCMF9JTiwgUEIwX09VVCwgUEIwX0lOX1BVKSwKKworCS8qIFBDIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQzdfREFUQSwgUEM3X0lOLCBQQzdfT1VULCBQQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNl9EQVRBLCBQQzZfSU4sIFBDNl9PVVQsIFBDNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEM1X0RBVEEsIFBDNV9JTiwgUEM1X09VVCwgUEM1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzRfREFUQSwgUEM0X0lOLCBQQzRfT1VULCBQQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDM19EQVRBLCBQQzNfSU4sIFBDM19PVVQsIFBDM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEMyX0RBVEEsIFBDMl9JTiwgUEMyX09VVCwgUEMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzFfREFUQSwgUEMxX0lOLCBQQzFfT1VULCBQQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMF9EQVRBLCBQQzBfSU4sIFBDMF9PVVQsIFBDMF9JTl9QVSksCisKKwkvKiBQRCBHUElPICovCisJUElOTVVYX0RBVEEoUEQ3X0RBVEEsIFBEN19JTiwgUEQ3X09VVCwgUEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDZfREFUQSwgUEQ2X0lOLCBQRDZfT1VULCBQRDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENV9EQVRBLCBQRDVfSU4sIFBENV9PVVQsIFBENV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ0X0RBVEEsIFBENF9JTiwgUEQ0X09VVCwgUEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDNfREFUQSwgUEQzX0lOLCBQRDNfT1VULCBQRDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMl9EQVRBLCBQRDJfSU4sIFBEMl9PVVQsIFBEMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQxX0RBVEEsIFBEMV9JTiwgUEQxX09VVCwgUEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDBfREFUQSwgUEQwX0lOLCBQRDBfT1VULCBQRDBfSU5fUFUpLAorCisJLyogUEUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBFNV9EQVRBLCBQRTVfSU4sIFBFNV9PVVQsIFBFNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEU0X0RBVEEsIFBFNF9JTiwgUEU0X09VVCwgUEU0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRTNfREFUQSwgUEUzX0lOLCBQRTNfT1VULCBQRTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBFMl9EQVRBLCBQRTJfSU4sIFBFMl9PVVQsIFBFMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEUxX0RBVEEsIFBFMV9JTiwgUEUxX09VVCwgUEUxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRTBfREFUQSwgUEUwX0lOLCBQRTBfT1VULCBQRTBfSU5fUFUpLAorCisJLyogUEYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBGN19EQVRBLCBQRjdfSU4sIFBGN19PVVQsIFBGN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEY2X0RBVEEsIFBGNl9JTiwgUEY2X09VVCwgUEY2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjVfREFUQSwgUEY1X0lOLCBQRjVfT1VULCBQRjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNF9EQVRBLCBQRjRfSU4sIFBGNF9PVVQsIFBGNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYzX0RBVEEsIFBGM19JTiwgUEYzX09VVCwgUEYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjJfREFUQSwgUEYyX0lOLCBQRjJfT1VULCBQRjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMV9EQVRBLCBQRjFfSU4sIFBGMV9PVVQsIFBGMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYwX0RBVEEsIFBGMF9JTiwgUEYwX09VVCwgUEYwX0lOX1BVKSwKKworCS8qIFBHIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRzdfREFUQSwgUEc3X0lOLCBQRzdfT1VULCBQRzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHNl9EQVRBLCBQRzZfSU4sIFBHNl9PVVQsIFBHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEc1X0RBVEEsIFBHNV9JTiwgUEc1X09VVCwgUEc1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRzRfREFUQSwgUEc0X0lOLCBQRzRfT1VULCBQRzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHM19EQVRBLCBQRzNfSU4sIFBHM19PVVQsIFBHM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEcyX0RBVEEsIFBHMl9JTiwgUEcyX09VVCwgUEcyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRzFfREFUQSwgUEcxX0lOLCBQRzFfT1VULCBQRzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHMF9EQVRBLCBQRzBfSU4sIFBHMF9PVVQsIFBHMF9JTl9QVSksCisKKwkvKiBQSCBHUElPICovCisJUElOTVVYX0RBVEEoUEg3X0RBVEEsIFBIN19JTiwgUEg3X09VVCwgUEg3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDZfREFUQSwgUEg2X0lOLCBQSDZfT1VULCBQSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINV9EQVRBLCBQSDVfSU4sIFBINV9PVVQsIFBINV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEg0X0RBVEEsIFBINF9JTiwgUEg0X09VVCwgUEg0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDNfREFUQSwgUEgzX0lOLCBQSDNfT1VULCBQSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMl9EQVRBLCBQSDJfSU4sIFBIMl9PVVQsIFBIMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEgxX0RBVEEsIFBIMV9JTiwgUEgxX09VVCwgUEgxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDBfREFUQSwgUEgwX0lOLCBQSDBfT1VULCBQSDBfSU5fUFUpLAorCisJLyogUEogR1BJTyAqLworCVBJTk1VWF9EQVRBKFBKN19EQVRBLCBQSjdfSU4sIFBKN19PVVQsIFBKN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEo2X0RBVEEsIFBKNl9JTiwgUEo2X09VVCwgUEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjVfREFUQSwgUEo1X0lOLCBQSjVfT1VULCBQSjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNF9EQVRBLCBQSjRfSU4sIFBKNF9PVVQsIFBKNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEozX0RBVEEsIFBKM19JTiwgUEozX09VVCwgUEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjJfREFUQSwgUEoyX0lOLCBQSjJfT1VULCBQSjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKMV9EQVRBLCBQSjFfSU4sIFBKMV9PVVQsIFBKMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEowX0RBVEEsIFBKMF9JTiwgUEowX09VVCwgUEowX0lOX1BVKSwKKworCS8qIFBLIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQSzdfREFUQSwgUEs3X0lOLCBQSzdfT1VULCBQSzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBLNl9EQVRBLCBQSzZfSU4sIFBLNl9PVVQsIFBLNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEs1X0RBVEEsIFBLNV9JTiwgUEs1X09VVCwgUEs1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSzRfREFUQSwgUEs0X0lOLCBQSzRfT1VULCBQSzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBLM19EQVRBLCBQSzNfSU4sIFBLM19PVVQsIFBLM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEsyX0RBVEEsIFBLMl9JTiwgUEsyX09VVCwgUEsyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSzFfREFUQSwgUEsxX0lOLCBQSzFfT1VULCBQSzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBLMF9EQVRBLCBQSzBfSU4sIFBLMF9PVVQsIFBLMF9JTl9QVSksCisKKwkvKiBQTCBHUElPICovCisJUElOTVVYX0RBVEEoUEw3X0RBVEEsIFBMN19JTiwgUEw3X09VVCwgUEw3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQTDZfREFUQSwgUEw2X0lOLCBQTDZfT1VULCBQTDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBMNV9EQVRBLCBQTDVfSU4sIFBMNV9PVVQsIFBMNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEw0X0RBVEEsIFBMNF9JTiwgUEw0X09VVCwgUEw0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQTDNfREFUQSwgUEwzX0lOLCBQTDNfT1VULCBQTDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBMMl9EQVRBLCBQTDJfSU4sIFBMMl9PVVQsIFBMMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEwxX0RBVEEsIFBMMV9JTiwgUEwxX09VVCwgUEwxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQTDBfREFUQSwgUEwwX0lOLCBQTDBfT1VULCBQTDBfSU5fUFUpLAorCisJLyogUE0gR1BJTyAqLworCVBJTk1VWF9EQVRBKFBNMV9EQVRBLCBQTTFfSU4sIFBNMV9PVVQsIFBNMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUE0wX0RBVEEsIFBNMF9JTiwgUE0wX09VVCwgUE0wX0lOX1BVKSwKKworCS8qIFBOIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQTjdfREFUQSwgUE43X0lOLCBQTjdfT1VULCBQTjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBONl9EQVRBLCBQTjZfSU4sIFBONl9PVVQsIFBONl9JTl9QVSksCisJUElOTVVYX0RBVEEoUE41X0RBVEEsIFBONV9JTiwgUE41X09VVCwgUE41X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQTjRfREFUQSwgUE40X0lOLCBQTjRfT1VULCBQTjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBOM19EQVRBLCBQTjNfSU4sIFBOM19PVVQsIFBOM19JTl9QVSksCisJUElOTVVYX0RBVEEoUE4yX0RBVEEsIFBOMl9JTiwgUE4yX09VVCwgUE4yX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQTjFfREFUQSwgUE4xX0lOLCBQTjFfT1VULCBQTjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBOMF9EQVRBLCBQTjBfSU4sIFBOMF9PVVQsIFBOMF9JTl9QVSksCisKKwkvKiBQUCBHUElPICovCisJUElOTVVYX0RBVEEoUFA1X0RBVEEsIFBQNV9JTiwgUFA1X09VVCwgUFA1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQUDRfREFUQSwgUFA0X0lOLCBQUDRfT1VULCBQUDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBQM19EQVRBLCBQUDNfSU4sIFBQM19PVVQsIFBQM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFAyX0RBVEEsIFBQMl9JTiwgUFAyX09VVCwgUFAyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQUDFfREFUQSwgUFAxX0lOLCBQUDFfT1VULCBQUDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBQMF9EQVRBLCBQUDBfSU4sIFBQMF9PVVQsIFBQMF9JTl9QVSksCisKKwkvKiBQUSBHUElPICovCisJUElOTVVYX0RBVEEoUFE0X0RBVEEsIFBRNF9JTiwgUFE0X09VVCwgUFE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQUTNfREFUQSwgUFEzX0lOLCBQUTNfT1VULCBQUTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBRMl9EQVRBLCBQUTJfSU4sIFBRMl9PVVQsIFBRMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFExX0RBVEEsIFBRMV9JTiwgUFExX09VVCwgUFExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQUTBfREFUQSwgUFEwX0lOLCBQUTBfT1VULCBQUTBfSU5fUFUpLAorCisJLyogUFIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBSM19EQVRBLCBQUjNfSU4sIFBSM19PVVQsIFBSM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFIyX0RBVEEsIFBSMl9JTiwgUFIyX09VVCwgUFIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQUjFfREFUQSwgUFIxX0lOLCBQUjFfT1VULCBQUjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBSMF9EQVRBLCBQUjBfSU4sIFBSMF9PVVQsIFBSMF9JTl9QVSksCisKKwkvKiBQQSBGTiAqLworCVBJTk1VWF9EQVRBKEQ2M19BRDMxX01BUkssIFBBN19GTiksCisJUElOTVVYX0RBVEEoRDYyX0FEMzBfTUFSSywgUEE2X0ZOKSwKKwlQSU5NVVhfREFUQShENjFfQUQyOV9NQVJLLCBQQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQ2MF9BRDI4X01BUkssIFBBNF9GTiksCisJUElOTVVYX0RBVEEoRDU5X0FEMjdfTUFSSywgUEEzX0ZOKSwKKwlQSU5NVVhfREFUQShENThfQUQyNl9NQVJLLCBQQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQ1N19BRDI1X01BUkssIFBBMV9GTiksCisJUElOTVVYX0RBVEEoRDU2X0FEMjRfTUFSSywgUEEwX0ZOKSwKKworCS8qIFBCIEZOICovCisJUElOTVVYX0RBVEEoRDU1X0FEMjNfTUFSSywgUEI3X0ZOKSwKKwlQSU5NVVhfREFUQShENTRfQUQyMl9NQVJLLCBQQjZfRk4pLAorCVBJTk1VWF9EQVRBKEQ1M19BRDIxX01BUkssIFBCNV9GTiksCisJUElOTVVYX0RBVEEoRDUyX0FEMjBfTUFSSywgUEI0X0ZOKSwKKwlQSU5NVVhfREFUQShENTFfQUQxOV9NQVJLLCBQQjNfRk4pLAorCVBJTk1VWF9EQVRBKEQ1MF9BRDE4X01BUkssIFBCMl9GTiksCisJUElOTVVYX0RBVEEoRDQ5X0FEMTdfREI1X01BUkssIFBCMV9GTiksCisJUElOTVVYX0RBVEEoRDQ4X0FEMTZfREI0X01BUkssIFBCMF9GTiksCisKKwkvKiBQQyBGTiAqLworCVBJTk1VWF9EQVRBKEQ0N19BRDE1X0RCM19NQVJLLCBQQzdfRk4pLAorCVBJTk1VWF9EQVRBKEQ0Nl9BRDE0X0RCMl9NQVJLLCBQQzZfRk4pLAorCVBJTk1VWF9EQVRBKEQ0NV9BRDEzX0RCMV9NQVJLLCBQQzVfRk4pLAorCVBJTk1VWF9EQVRBKEQ0NF9BRDEyX0RCMF9NQVJLLCBQQzRfRk4pLAorCVBJTk1VWF9EQVRBKEQ0M19BRDExX0RHNV9NQVJLLCBQQzNfRk4pLAorCVBJTk1VWF9EQVRBKEQ0Ml9BRDEwX0RHNF9NQVJLLCBQQzJfRk4pLAorCVBJTk1VWF9EQVRBKEQ0MV9BRDlfREczX01BUkssIFBDMV9GTiksCisJUElOTVVYX0RBVEEoRDQwX0FEOF9ERzJfTUFSSywgUEMwX0ZOKSwKKworCS8qIFBEIEZOICovCisJUElOTVVYX0RBVEEoRDM5X0FEN19ERzFfTUFSSywgUEQ3X0ZOKSwKKwlQSU5NVVhfREFUQShEMzhfQUQ2X0RHMF9NQVJLLCBQRDZfRk4pLAorCVBJTk1VWF9EQVRBKEQzN19BRDVfRFI1X01BUkssIFBENV9GTiksCisJUElOTVVYX0RBVEEoRDM2X0FENF9EUjRfTUFSSywgUEQ0X0ZOKSwKKwlQSU5NVVhfREFUQShEMzVfQUQzX0RSM19NQVJLLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKEQzNF9BRDJfRFIyX01BUkssIFBEMl9GTiksCisJUElOTVVYX0RBVEEoRDMzX0FEMV9EUjFfTUFSSywgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShEMzJfQUQwX0RSMF9NQVJLLCBQRDBfRk4pLAorCisJLyogUEUgRk4gKi8KKwlQSU5NVVhfREFUQShSRVExX01BUkssIFBFNV9GTiksCisJUElOTVVYX0RBVEEoUkVRMl9NQVJLLCBQRTRfRk4pLAorCVBJTk1VWF9EQVRBKFJFUTNfTUFSSywgUDJNU0VMMF8wLCBQRTNfRk4pLAorCVBJTk1VWF9EQVRBKEdOVDFfTUFSSywgUEUyX0ZOKSwKKwlQSU5NVVhfREFUQShHTlQyX01BUkssIFBFMV9GTiksCisJUElOTVVYX0RBVEEoR05UM19NQVJLLCBQMk1TRUwwXzAsIFBFMF9GTiksCisJUElOTVVYX0RBVEEoTU1DQ0xLX01BUkssIFAyTVNFTDBfMSwgUEUwX0ZOKSwKKworCS8qIFBGIEZOICovCisJUElOTVVYX0RBVEEoRDMxX01BUkssIFBGN19GTiksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBGNl9GTiksCisJUElOTVVYX0RBVEEoRDI5X01BUkssIFBGNV9GTiksCisJUElOTVVYX0RBVEEoRDI4X01BUkssIFBGNF9GTiksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBGM19GTiksCisJUElOTVVYX0RBVEEoRDI2X01BUkssIFBGMl9GTiksCisJUElOTVVYX0RBVEEoRDI1X01BUkssIFBGMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBGMF9GTiksCisKKwkvKiBQRiBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQRzdfRk4pLAorCVBJTk1VWF9EQVRBKEQyMl9NQVJLLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKEQyMV9NQVJLLCBQRzVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQRzRfRk4pLAorCVBJTk1VWF9EQVRBKEQxOV9NQVJLLCBQRzNfRk4pLAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQRzJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQRzFfRk4pLAorCVBJTk1VWF9EQVRBKEQxNl9NQVJLLCBQRzBfRk4pLAorCisJLyogUEggRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMV9TQ0tfTUFSSywgUEg3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SWERfTUFSSywgUEg2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywgUEg1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9DVFNfTUFSSywgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShJTlREX01BUkssIFAxTVNFTDdfMSwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUDFNU0VMOF8xLCBQMU1TRUw3XzAsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlRTX01BUkssIFAxTVNFTDhfMCwgUDFNU0VMN18wLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfQ1NfTUFSSywgUDFNU0VMOF8wLCBQMU1TRUw3XzEsIFBIM19GTiksCisJUElOTVVYX0RBVEEoRlNFX01BUkssIFAxTVNFTDhfMSwgUDFNU0VMN18wLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1NDS19NQVJLLCBQMU1TRUw4XzAsIFAxTVNFTDdfMCwgUEgyX0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX0NMS19NQVJLLCBQMU1TRUw4XzAsIFAxTVNFTDdfMSwgUEgyX0ZOKSwKKwlQSU5NVVhfREFUQShGUkVfTUFSSywgUDFNU0VMOF8xLCBQMU1TRUw3XzAsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlhEX01BUkssIFAxTVNFTDhfMCwgUDFNU0VMN18wLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfUlhfTUFSSywgUDFNU0VMOF8wLCBQMU1TRUw3XzEsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoRlJCX01BUkssIFAxTVNFTDhfMSwgUDFNU0VMN18wLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1RYRF9NQVJLLCBQMU1TRUw4XzAsIFAxTVNFTDdfMCwgUEgwX0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX1RYX01BUkssIFAxTVNFTDhfMCwgUDFNU0VMN18xLCBQSDBfRk4pLAorCVBJTk1VWF9EQVRBKEZXRV9NQVJLLCBQMU1TRUw4XzEsIFAxTVNFTDdfMCwgUEgwX0ZOKSwKKworCS8qIFBKIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjVfVFhEX01BUkssIFAxTVNFTDJfMCwgUDFNU0VMMV8wLCBQSjdfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzFfU1lOQ19NQVJLLCBQMU1TRUwyXzAsIFAxTVNFTDFfMSwgUEo3X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1dTX01BUkssIFAxTVNFTDJfMSwgUDFNU0VMMV8wLCBQSjdfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0ZfVFhEX1BKX01BUkssIFAyTVNFTDFfMCwgUDFNU0VMNF8wLCBQMU1TRUwzXzAsIFBKNl9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TRE9VVF9NQVJLLCBQMU1TRUw0XzAsIFAxTVNFTDNfMSwgUEo2X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1NEQVRBX01BUkssIFAxTVNFTDRfMSwgUDFNU0VMM18wLCBQSjZfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0ZfUlhEX1BKX01BUkssIFAyTVNFTDFfMCwgUDFNU0VMNF8wLCBQMU1TRUwzXzAsIFBKNV9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TRElOX01BUkssIFAxTVNFTDRfMCwgUDFNU0VMM18xLCBQSjVfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfU0NLX01BUkssIFAxTVNFTDRfMSwgUDFNU0VMM18wLCBQSjVfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0ZfU1lOQ19QSl9NQVJLLCBQMk1TRUwxXzAsIFAxTVNFTDRfMCwgUDFNU0VMM18wLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzBfU1lOQ19NQVJLLCBQMU1TRUw0XzAsIFAxTVNFTDNfMSwgUEo0X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1dTX01BUkssIFAxTVNFTDRfMSwgUDFNU0VMM18wLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0ZfTUNMS19QSl9NQVJLLCBQMk1TRUwxXzAsIFAxTVNFTDRfMCwgUDFNU0VMM18wLCBQSjNfRk4pLAorCVBJTk1VWF9EQVRBKEhBQ19SRVNfTUFSSywgUDFNU0VMNF8wLCBQMU1TRUwzXzEsIFBKM19GTiksCisJUElOTVVYX0RBVEEoU0lPRl9TQ0tfUEpfTUFSSywgUDJNU0VMMV8wLCBQMU1TRUw0XzAsIFAxTVNFTDNfMCwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX0JJVENMS19NQVJLLCBQMU1TRUw0XzAsIFAxTVNFTDNfMSwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX0NMS19NQVJLLCBQMU1TRUw0XzEsIFAxTVNFTDNfMCwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX0JJVENMS19NQVJLLCBQMU1TRUwyXzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoU1NJMV9DTEtfTUFSSywgUDFNU0VMMl8xLCBQMU1TRUwxXzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoVENMS19NQVJLLCBQMU1TRUw5XzAsIFBKMF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFAxTVNFTDlfMSwgUEowX0ZOKSwKKworCS8qIFBLIEZOICovCisJUElOTVVYX0RBVEEoU1RBVFVTMF9NQVJLLCBQMU1TRUwxNV8wLCBQSzdfRk4pLAorCVBJTk1VWF9EQVRBKERSQUswX1BLM19NQVJLLCBQMU1TRUwxNV8xLCBQSzdfRk4pLAorCVBJTk1VWF9EQVRBKFNUQVRVUzFfTUFSSywgUDFNU0VMMTVfMCwgUEs2X0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMV9QSzJfTUFSSywgUDFNU0VMMTVfMSwgUEs2X0ZOKSwKKwlQSU5NVVhfREFUQShEQUNLMl9NQVJLLCBQMU1TRUwxMl8wLCBQMU1TRUwxMV8wLCBQSzVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYyX1RYRF9NQVJLLCBQMU1TRUwxMl8xLCBQMU1TRUwxMV8wLCBQSzVfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ0NNRF9NQVJLLCBQMU1TRUwxMl8xLCBQMU1TRUwxMV8xLCBQSzVfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0ZfVFhEX1BLX01BUkssIFAyTVNFTDFfMSwKKwkJICAgIFAxTVNFTDEyXzAsIFAxTVNFTDExXzEsIFBLNV9GTiksCisJUElOTVVYX0RBVEEoREFDSzNfTUFSSywgUDFNU0VMMTJfMCwgUDFNU0VMMTFfMCwgUEs0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9TQ0tfTUFSSywgUDFNU0VMMTJfMSwgUDFNU0VMMTFfMCwgUEs0X0ZOKSwKKwlQSU5NVVhfREFUQShNTUNEQVRfTUFSSywgUDFNU0VMMTJfMSwgUDFNU0VMMTFfMSwgUEs0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GX1NDS19QS19NQVJLLCBQMk1TRUwxXzEsCisJCSAgICBQMU1TRUwxMl8wLCBQMU1TRUwxMV8xLCBQSzRfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIFBLM19GTiksCisJUElOTVVYX0RBVEEoRFJFUTFfTUFSSywgUEsyX0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMF9QSzFfTUFSSywgUEsxX0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMV9QSzBfTUFSSywgUEswX0ZOKSwKKworCS8qIFBMIEZOICovCisJUElOTVVYX0RBVEEoRFJFUTJfTUFSSywgUDFNU0VMMTNfMCwgUEw3X0ZOKSwKKwlQSU5NVVhfREFUQShJTlRCX01BUkssIFAxTVNFTDEzXzEsIFBMN19GTiksCisJUElOTVVYX0RBVEEoRFJFUTNfTUFSSywgUDFNU0VMMTNfMCwgUEw2X0ZOKSwKKwlQSU5NVVhfREFUQShJTlRDX01BUkssIFAxTVNFTDEzXzEsIFBMNl9GTiksCisJUElOTVVYX0RBVEEoRFJBSzJfTUFSSywgUDFNU0VMMTBfMCwgUEw1X0ZOKSwKKwlQSU5NVVhfREFUQShDRTJBX01BUkssIFAxTVNFTDEwXzEsIFBMNV9GTiksCisJUElOTVVYX0RBVEEoSVJMNF9NQVJLLCBQMU1TRUwxNF8wLCBQTDRfRk4pLAorCVBJTk1VWF9EQVRBKEZENF9NQVJLLCBQMU1TRUwxNF8xLCBQTDRfRk4pLAorCVBJTk1VWF9EQVRBKElSTDVfTUFSSywgUDFNU0VMMTRfMCwgUEwzX0ZOKSwKKwlQSU5NVVhfREFUQShGRDVfTUFSSywgUDFNU0VMMTRfMSwgUEwzX0ZOKSwKKwlQSU5NVVhfREFUQShJUkw2X01BUkssIFAxTVNFTDE0XzAsIFBMMl9GTiksCisJUElOTVVYX0RBVEEoRkQ2X01BUkssIFAxTVNFTDE0XzEsIFBMMl9GTiksCisJUElOTVVYX0RBVEEoSVJMN19NQVJLLCBQMU1TRUwxNF8wLCBQTDFfRk4pLAorCVBJTk1VWF9EQVRBKEZEN19NQVJLLCBQMU1TRUwxNF8xLCBQTDFfRk4pLAorCVBJTk1VWF9EQVRBKERSQUszX01BUkssIFAxTVNFTDEwXzAsIFBMMF9GTiksCisJUElOTVVYX0RBVEEoQ0UyQl9NQVJLLCBQMU1TRUwxMF8xLCBQTDBfRk4pLAorCisJLyogUE0gRk4gKi8KKwlQSU5NVVhfREFUQShCUkVRX0JTQUNLX01BUkssIFBNMV9GTiksCisJUElOTVVYX0RBVEEoQkFDS19CU1JFUV9NQVJLLCBQTTBfRk4pLAorCisJLyogUE4gRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGNV9SWERfTUFSSywgUDFNU0VMMl8wLCBQMU1TRUwxXzAsIFBON19GTiksCisJUElOTVVYX0RBVEEoSEFDMV9TRElOX01BUkssIFAxTVNFTDJfMCwgUDFNU0VMMV8xLCBQTjdfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfU0NLX01BUkssIFAxTVNFTDJfMSwgUDFNU0VMMV8wLCBQTjdfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY1X1NDS19NQVJLLCBQMU1TRUwyXzAsIFAxTVNFTDFfMCwgUE42X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX1NET1VUX01BUkssIFAxTVNFTDJfMCwgUDFNU0VMMV8xLCBQTjZfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfU0RBVEFfTUFSSywgUDFNU0VMMl8xLCBQMU1TRUwxXzAsIFBONl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfVFhEX01BUkssIFAxTVNFTDBfMCwgUE41X0ZOKSwKKwlQSU5NVVhfREFUQShGQ0xFX01BUkssIFAxTVNFTDBfMSwgUE41X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19SWERfTUFSSywgUDFNU0VMMF8wLCBQTjRfRk4pLAorCVBJTk1VWF9EQVRBKEZBTEVfTUFSSywgUDFNU0VMMF8xLCBQTjRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1NDS19NQVJLLCBQMU1TRUwwXzAsIFBOM19GTiksCisJUElOTVVYX0RBVEEoRkQwX01BUkssIFAxTVNFTDBfMSwgUE4zX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9UWERfTUFSSywgUDFNU0VMMF8wLCBQTjJfRk4pLAorCVBJTk1VWF9EQVRBKEZEMV9NQVJLLCBQMU1TRUwwXzEsIFBOMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUlhEX01BUkssIFAxTVNFTDBfMCwgUE4xX0ZOKSwKKwlQSU5NVVhfREFUQShGRDJfTUFSSywgUDFNU0VMMF8xLCBQTjFfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1NDS19NQVJLLCBQMU1TRUwwXzAsIFBOMF9GTiksCisJUElOTVVYX0RBVEEoRkQzX01BUkssIFAxTVNFTDBfMSwgUE4wX0ZOKSwKKworCS8qIFBQIEZOICovCisJUElOTVVYX0RBVEEoREVWU0VMX0RDTEtPVVRfTUFSSywgUFA1X0ZOKSwKKwlQSU5NVVhfREFUQShTVE9QX0NERV9NQVJLLCBQUDRfRk4pLAorCVBJTk1VWF9EQVRBKExPQ0tfT0RERl9NQVJLLCBQUDNfRk4pLAorCVBJTk1VWF9EQVRBKFRSRFlfRElTUExfTUFSSywgUFAyX0ZOKSwKKwlQSU5NVVhfREFUQShJUkRZX0hTWU5DX01BUkssIFBQMV9GTiksCisJUElOTVVYX0RBVEEoUENJRlJBTUVfVlNZTkNfTUFSSywgUFAwX0ZOKSwKKworCS8qIFBRIEZOICovCisJUElOTVVYX0RBVEEoSU5UQV9NQVJLLCBQUTRfRk4pLAorCVBJTk1VWF9EQVRBKEdOVDBfR05USU5fTUFSSywgUFEzX0ZOKSwKKwlQSU5NVVhfREFUQShSRVEwX1JFUU9VVF9NQVJLLCBQUTJfRk4pLAorCVBJTk1VWF9EQVRBKFBFUlJfTUFSSywgUFExX0ZOKSwKKwlQSU5NVVhfREFUQShTRVJSX01BUkssIFBRMF9GTiksCisKKwkvKiBQUiBGTiAqLworCVBJTk1VWF9EQVRBKFdFN19DQkUzX01BUkssIFBSM19GTiksCisJUElOTVVYX0RBVEEoV0U2X0NCRTJfTUFSSywgUFIyX0ZOKSwKKwlQSU5NVVhfREFUQShXRTVfQ0JFMV9NQVJLLCBQUjFfRk4pLAorCVBJTk1VWF9EQVRBKFdFNF9DQkUwX01BUkssIFBSMF9GTiksCisKKwkvKiBNSVNDIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjJfUlhEX01BUkssIFAxTVNFTDZfMCwgUDFNU0VMNV8wKSwKKwlQSU5NVVhfREFUQShTSU9GX1JYRF9NQVJLLCBQMk1TRUwxXzEsIFAxTVNFTDZfMSwgUDFNU0VMNV8wKSwKKwlQSU5NVVhfREFUQShNUkVTRVRPVVRfTUFSSywgUDJNU0VMMl8wKSwKKwlQSU5NVVhfREFUQShJUlFPVVRfTUFSSywgUDJNU0VMMl8xKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2dwaW8gcGlubXV4X2dwaW9zW10gPSB7CisJLyogUEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BBNywgUEE3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE2LCBQQTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTUsIFBBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNCwgUEE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEzLCBQQTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTIsIFBBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMSwgUEExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEwLCBQQTBfREFUQSksCisKKwkvKiBQQiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEI3LCBQQjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjYsIFBCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNSwgUEI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI0LCBQQjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjMsIFBCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMiwgUEIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIxLCBQQjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjAsIFBCMF9EQVRBKSwKKworCS8qIFBDICovCisJUElOTVVYX0dQSU8oR1BJT19QQzcsIFBDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNiwgUEM2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM1LCBQQzVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzQsIFBDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMywgUEMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMyLCBQQzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEsIFBDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMCwgUEMwX0RBVEEpLAorCisJLyogUEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BENywgUEQ3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ2LCBQRDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDUsIFBENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENCwgUEQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQzLCBQRDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDIsIFBEMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMSwgUEQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQwLCBQRDBfREFUQSksCisKKwkvKiBQRSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEU1LCBQRTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTQsIFBFNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMywgUEUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUyLCBQRTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEsIFBFMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMCwgUEUwX0RBVEEpLAorCisJLyogUEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BGNywgUEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY2LCBQRjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjUsIFBGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNCwgUEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYzLCBQRjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIsIFBGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMSwgUEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYwLCBQRjBfREFUQSksCisKKwkvKiBQRyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEc3LCBQRzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRzYsIFBHNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHNSwgUEc1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEc0LCBQRzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRzMsIFBHM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHMiwgUEcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEcxLCBQRzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRzAsIFBHMF9EQVRBKSwKKworCS8qIFBIICovCisJUElOTVVYX0dQSU8oR1BJT19QSDcsIFBIN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINiwgUEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg1LCBQSDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDQsIFBINF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMywgUEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgyLCBQSDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDEsIFBIMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMCwgUEgwX0RBVEEpLAorCisJLyogUEogKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BKNywgUEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo2LCBQSjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjUsIFBKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNCwgUEo0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEozLCBQSjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjIsIFBKMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMSwgUEoxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEowLCBQSjBfREFUQSksCisKKwkvKiBQSyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEs3LCBQSzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSzYsIFBLNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BLNSwgUEs1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEs0LCBQSzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSzMsIFBLM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BLMiwgUEsyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEsxLCBQSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSzAsIFBLMF9EQVRBKSwKKworCS8qIFBMICovCisJUElOTVVYX0dQSU8oR1BJT19QTDcsIFBMN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BMNiwgUEw2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEw1LCBQTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QTDQsIFBMNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BMMywgUEwzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEwyLCBQTDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QTDEsIFBMMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BMMCwgUEwwX0RBVEEpLAorCisJLyogUE0gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BNMSwgUE0xX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUE0wLCBQTTBfREFUQSksCisKKwkvKiBQTiAqLworCVBJTk1VWF9HUElPKEdQSU9fUE43LCBQTjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QTjYsIFBONl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BONSwgUE41X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUE40LCBQTjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QTjMsIFBOM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BOMiwgUE4yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUE4xLCBQTjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QTjAsIFBOMF9EQVRBKSwKKworCS8qIFBQICovCisJUElOTVVYX0dQSU8oR1BJT19QUDUsIFBQNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BQNCwgUFA0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFAzLCBQUDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QUDIsIFBQMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BQMSwgUFAxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFAwLCBQUDBfREFUQSksCisKKwkvKiBQUSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFE0LCBQUTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QUTMsIFBRM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BRMiwgUFEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFExLCBQUTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QUTAsIFBRMF9EQVRBKSwKKworCS8qIFBSICovCisJUElOTVVYX0dQSU8oR1BJT19QUjMsIFBSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BSMiwgUFIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFIxLCBQUjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QUjAsIFBSMF9EQVRBKSwKKworCS8qIEZOICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENjNfQUQzMSwgRDYzX0FEMzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENjJfQUQzMCwgRDYyX0FEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENjFfQUQyOSwgRDYxX0FEMjlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENjBfQUQyOCwgRDYwX0FEMjhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTlfQUQyNywgRDU5X0FEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENThfQUQyNiwgRDU4X0FEMjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTdfQUQyNSwgRDU3X0FEMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTZfQUQyNCwgRDU2X0FEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTVfQUQyMywgRDU1X0FEMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTRfQUQyMiwgRDU0X0FEMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTNfQUQyMSwgRDUzX0FEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTJfQUQyMCwgRDUyX0FEMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTFfQUQxOSwgRDUxX0FEMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENTBfQUQxOCwgRDUwX0FEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENDlfQUQxN19EQjUsIEQ0OV9BRDE3X0RCNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0Q0OF9BRDE2X0RCNCwgRDQ4X0FEMTZfREI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDQ3X0FEMTVfREIzLCBENDdfQUQxNV9EQjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENDZfQUQxNF9EQjIsIEQ0Nl9BRDE0X0RCMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0Q0NV9BRDEzX0RCMSwgRDQ1X0FEMTNfREIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDQ0X0FEMTJfREIwLCBENDRfQUQxMl9EQjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ENDNfQUQxMV9ERzUsIEQ0M19BRDExX0RHNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0Q0Ml9BRDEwX0RHNCwgRDQyX0FEMTBfREc0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDQxX0FEOV9ERzMsIEQ0MV9BRDlfREczX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDQwX0FEOF9ERzIsIEQ0MF9BRDhfREcyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDM5X0FEN19ERzEsIEQzOV9BRDdfREcxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDM4X0FENl9ERzAsIEQzOF9BRDZfREcwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDM3X0FENV9EUjUsIEQzN19BRDVfRFI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDM2X0FENF9EUjQsIEQzNl9BRDRfRFI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDM1X0FEM19EUjMsIEQzNV9BRDNfRFIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDM0X0FEMl9EUjIsIEQzNF9BRDJfRFIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMzX0FEMV9EUjEsIEQzM19BRDFfRFIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMyX0FEMF9EUjAsIEQzMl9BRDBfRFIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUkVRMSwgUkVRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1JFUTIsIFJFUTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRVEzLCBSRVEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fR05UMSwgR05UMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0dOVDIsIEdOVDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9HTlQzLCBHTlQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DQ0xLLCBNTUNDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMzEsIEQzMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMCwgRDMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI5LCBEMjlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjgsIEQyOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNywgRDI3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI2LCBEMjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjUsIEQyNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNCwgRDI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIzLCBEMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjIsIEQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMSwgRDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIwLCBEMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTksIEQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOCwgRDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE3LCBEMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTYsIEQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NDSywgU0NJRjFfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlhELCBTQ0lGMV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsIFNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX0NUUywgU0NJRjBfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU5URCwgSU5URF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDRSwgRkNFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlRTLCBTQ0lGMF9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX0NTLCBIU1BJX0NTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNFLCBGU0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfQ0xLLCBIU1BJX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSRSwgRlJFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlhELCBTQ0lGMF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX1JYLCBIU1BJX1JYX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlJCLCBGUkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9UWEQsIFNDSUYwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfVFgsIEhTUElfVFhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1RYRCwgU0NJRjVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TWU5DLCBIQUMxX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1dTLCBTU0kxX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRl9UWERfUEosIFNJT0ZfVFhEX1BKX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TRE9VVCwgSEFDMF9TRE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfU0RBVEEsIFNTSTBfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GX1JYRF9QSiwgU0lPRl9SWERfUEpfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NESU4sIEhBQzBfU0RJTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfU0NLLCBTU0kwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0ZfU1lOQ19QSiwgU0lPRl9TWU5DX1BKX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TWU5DLCBIQUMwX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1dTLCBTU0kwX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRl9NQ0xLX1BKLCBTSU9GX01DTEtfUEpfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUNfUkVTLCBIQUNfUkVTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRl9TQ0tfUEosIFNJT0ZfU0NLX1BKX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9CSVRDTEssIEhBQzBfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9DTEssIFNTSTBfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9CSVRDTEssIEhBQzFfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9DTEssIFNTSTFfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMSywgVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPSVMxNiwgSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1RBVFVTMCwgU1RBVFVTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUswX1BLMywgRFJBSzBfUEszX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1RBVFVTMSwgU1RBVFVTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsxX1BLMiwgRFJBSzFfUEsyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzIsIERBQ0syX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfVFhELCBTQ0lGMl9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNDTUQsIE1NQ0NNRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0ZfVFhEX1BLLCBTSU9GX1RYRF9QS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0szLCBEQUNLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1NDSywgU0NJRjJfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DREFULCBNTUNEQVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GX1NDS19QSywgU0lPRl9TQ0tfUEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwgRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMSwgRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMF9QSzEsIERSQUswX1BLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsxX1BLMCwgRFJBSzFfUEswX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTIsIERSRVEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU5UQiwgSU5UQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEzLCBEUkVRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lOVEMsIElOVENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMiwgRFJBSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJBLCBDRTJBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNCwgSVJMNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZENCwgRkQ0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNSwgSVJMNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZENSwgRkQ1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNiwgSVJMNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZENiwgRkQ2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNywgSVJMN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZENywgRkQ3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJBSzMsIERSQUszX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQiwgQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JSRVFfQlNBQ0ssIEJSRVFfQlNBQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CQUNLX0JTUkVRLCBCQUNLX0JTUkVRX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUlhELCBTQ0lGNV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NESU4sIEhBQzFfU0RJTl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfU0NLLCBTU0kxX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1NDSywgU0NJRjVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TRE9VVCwgSEFDMV9TRE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfU0RBVEEsIFNTSTFfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19UWEQsIFNDSUYzX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDTEUsIEZDTEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19SWEQsIFNDSUYzX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZBTEUsIEZBTEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19TQ0ssIFNDSUYzX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZEMCwgRkQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfVFhELCBTQ0lGNF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GRDEsIEZEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1JYRCwgU0NJRjRfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkQyLCBGRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9TQ0ssIFNDSUY0X1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZEMywgRkQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREVWU0VMX0RDTEtPVVQsIERFVlNFTF9EQ0xLT1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1RPUF9DREUsIFNUT1BfQ0RFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTE9DS19PRERGLCBMT0NLX09EREZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUkRZX0RJU1BMLCBUUkRZX0RJU1BMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJEWV9IU1lOQywgSVJEWV9IU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDSUZSQU1FX1ZTWU5DLCBQQ0lGUkFNRV9WU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lOVEEsIElOVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9HTlQwX0dOVElOLCBHTlQwX0dOVElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUkVRMF9SRVFPVVQsIFJFUTBfUkVRT1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUEVSUiwgUEVSUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NFUlIsIFNFUlJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTdfQ0JFMywgV0U3X0NCRTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTZfQ0JFMiwgV0U2X0NCRTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTVfQ0JFMSwgV0U1X0NCRTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTRfQ0JFMCwgV0U0X0NCRTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9SWEQsIFNDSUYyX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0ZfUlhELCBTSU9GX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01SRVNFVE9VVCwgTVJFU0VUT1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRT1VULCBJUlFPVVRfTUFSSyksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCXsgUElOTVVYX0NGR19SRUcoIlBBQ1IiLCAweGZmZTcwMDAwLCAxNiwgMikgeworCQlQQTdfRk4sIFBBN19PVVQsIFBBN19JTiwgUEE3X0lOX1BVLAorCQlQQTZfRk4sIFBBNl9PVVQsIFBBNl9JTiwgUEE2X0lOX1BVLAorCQlQQTVfRk4sIFBBNV9PVVQsIFBBNV9JTiwgUEE1X0lOX1BVLAorCQlQQTRfRk4sIFBBNF9PVVQsIFBBNF9JTiwgUEE0X0lOX1BVLAorCQlQQTNfRk4sIFBBM19PVVQsIFBBM19JTiwgUEEzX0lOX1BVLAorCQlQQTJfRk4sIFBBMl9PVVQsIFBBMl9JTiwgUEEyX0lOX1BVLAorCQlQQTFfRk4sIFBBMV9PVVQsIFBBMV9JTiwgUEExX0lOX1BVLAorCQlQQTBfRk4sIFBBMF9PVVQsIFBBMF9JTiwgUEEwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGZmZTcwMDAyLCAxNiwgMikgeworCQlQQjdfRk4sIFBCN19PVVQsIFBCN19JTiwgUEI3X0lOX1BVLAorCQlQQjZfRk4sIFBCNl9PVVQsIFBCNl9JTiwgUEI2X0lOX1BVLAorCQlQQjVfRk4sIFBCNV9PVVQsIFBCNV9JTiwgUEI1X0lOX1BVLAorCQlQQjRfRk4sIFBCNF9PVVQsIFBCNF9JTiwgUEI0X0lOX1BVLAorCQlQQjNfRk4sIFBCM19PVVQsIFBCM19JTiwgUEIzX0lOX1BVLAorCQlQQjJfRk4sIFBCMl9PVVQsIFBCMl9JTiwgUEIyX0lOX1BVLAorCQlQQjFfRk4sIFBCMV9PVVQsIFBCMV9JTiwgUEIxX0lOX1BVLAorCQlQQjBfRk4sIFBCMF9PVVQsIFBCMF9JTiwgUEIwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1IiLCAweGZmZTcwMDA0LCAxNiwgMikgeworCQlQQzdfRk4sIFBDN19PVVQsIFBDN19JTiwgUEM3X0lOX1BVLAorCQlQQzZfRk4sIFBDNl9PVVQsIFBDNl9JTiwgUEM2X0lOX1BVLAorCQlQQzVfRk4sIFBDNV9PVVQsIFBDNV9JTiwgUEM1X0lOX1BVLAorCQlQQzRfRk4sIFBDNF9PVVQsIFBDNF9JTiwgUEM0X0lOX1BVLAorCQlQQzNfRk4sIFBDM19PVVQsIFBDM19JTiwgUEMzX0lOX1BVLAorCQlQQzJfRk4sIFBDMl9PVVQsIFBDMl9JTiwgUEMyX0lOX1BVLAorCQlQQzFfRk4sIFBDMV9PVVQsIFBDMV9JTiwgUEMxX0lOX1BVLAorCQlQQzBfRk4sIFBDMF9PVVQsIFBDMF9JTiwgUEMwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGZmZTcwMDA2LCAxNiwgMikgeworCQlQRDdfRk4sIFBEN19PVVQsIFBEN19JTiwgUEQ3X0lOX1BVLAorCQlQRDZfRk4sIFBENl9PVVQsIFBENl9JTiwgUEQ2X0lOX1BVLAorCQlQRDVfRk4sIFBENV9PVVQsIFBENV9JTiwgUEQ1X0lOX1BVLAorCQlQRDRfRk4sIFBENF9PVVQsIFBENF9JTiwgUEQ0X0lOX1BVLAorCQlQRDNfRk4sIFBEM19PVVQsIFBEM19JTiwgUEQzX0lOX1BVLAorCQlQRDJfRk4sIFBEMl9PVVQsIFBEMl9JTiwgUEQyX0lOX1BVLAorCQlQRDFfRk4sIFBEMV9PVVQsIFBEMV9JTiwgUEQxX0lOX1BVLAorCQlQRDBfRk4sIFBEMF9PVVQsIFBEMF9JTiwgUEQwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGZmZTcwMDA4LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQRTVfRk4sIFBFNV9PVVQsIFBFNV9JTiwgUEU1X0lOX1BVLAorCQlQRTRfRk4sIFBFNF9PVVQsIFBFNF9JTiwgUEU0X0lOX1BVLAorCQlQRTNfRk4sIFBFM19PVVQsIFBFM19JTiwgUEUzX0lOX1BVLAorCQlQRTJfRk4sIFBFMl9PVVQsIFBFMl9JTiwgUEUyX0lOX1BVLAorCQlQRTFfRk4sIFBFMV9PVVQsIFBFMV9JTiwgUEUxX0lOX1BVLAorCQlQRTBfRk4sIFBFMF9PVVQsIFBFMF9JTiwgUEUwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1IiLCAweGZmZTcwMDBhLCAxNiwgMikgeworCQlQRjdfRk4sIFBGN19PVVQsIFBGN19JTiwgUEY3X0lOX1BVLAorCQlQRjZfRk4sIFBGNl9PVVQsIFBGNl9JTiwgUEY2X0lOX1BVLAorCQlQRjVfRk4sIFBGNV9PVVQsIFBGNV9JTiwgUEY1X0lOX1BVLAorCQlQRjRfRk4sIFBGNF9PVVQsIFBGNF9JTiwgUEY0X0lOX1BVLAorCQlQRjNfRk4sIFBGM19PVVQsIFBGM19JTiwgUEYzX0lOX1BVLAorCQlQRjJfRk4sIFBGMl9PVVQsIFBGMl9JTiwgUEYyX0lOX1BVLAorCQlQRjFfRk4sIFBGMV9PVVQsIFBGMV9JTiwgUEYxX0lOX1BVLAorCQlQRjBfRk4sIFBGMF9PVVQsIFBGMF9JTiwgUEYwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBHQ1IiLCAweGZmZTcwMDBjLCAxNiwgMikgeworCQlQRzdfRk4sIFBHN19PVVQsIFBHN19JTiwgUEc3X0lOX1BVLAorCQlQRzZfRk4sIFBHNl9PVVQsIFBHNl9JTiwgUEc2X0lOX1BVLAorCQlQRzVfRk4sIFBHNV9PVVQsIFBHNV9JTiwgUEc1X0lOX1BVLAorCQlQRzRfRk4sIFBHNF9PVVQsIFBHNF9JTiwgUEc0X0lOX1BVLAorCQlQRzNfRk4sIFBHM19PVVQsIFBHM19JTiwgUEczX0lOX1BVLAorCQlQRzJfRk4sIFBHMl9PVVQsIFBHMl9JTiwgUEcyX0lOX1BVLAorCQlQRzFfRk4sIFBHMV9PVVQsIFBHMV9JTiwgUEcxX0lOX1BVLAorCQlQRzBfRk4sIFBHMF9PVVQsIFBHMF9JTiwgUEcwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGZmZTcwMDBlLCAxNiwgMikgeworCQlQSDdfRk4sIFBIN19PVVQsIFBIN19JTiwgUEg3X0lOX1BVLAorCQlQSDZfRk4sIFBINl9PVVQsIFBINl9JTiwgUEg2X0lOX1BVLAorCQlQSDVfRk4sIFBINV9PVVQsIFBINV9JTiwgUEg1X0lOX1BVLAorCQlQSDRfRk4sIFBINF9PVVQsIFBINF9JTiwgUEg0X0lOX1BVLAorCQlQSDNfRk4sIFBIM19PVVQsIFBIM19JTiwgUEgzX0lOX1BVLAorCQlQSDJfRk4sIFBIMl9PVVQsIFBIMl9JTiwgUEgyX0lOX1BVLAorCQlQSDFfRk4sIFBIMV9PVVQsIFBIMV9JTiwgUEgxX0lOX1BVLAorCQlQSDBfRk4sIFBIMF9PVVQsIFBIMF9JTiwgUEgwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGZmZTcwMDEwLCAxNiwgMikgeworCQlQSjdfRk4sIFBKN19PVVQsIFBKN19JTiwgUEo3X0lOX1BVLAorCQlQSjZfRk4sIFBKNl9PVVQsIFBKNl9JTiwgUEo2X0lOX1BVLAorCQlQSjVfRk4sIFBKNV9PVVQsIFBKNV9JTiwgUEo1X0lOX1BVLAorCQlQSjRfRk4sIFBKNF9PVVQsIFBKNF9JTiwgUEo0X0lOX1BVLAorCQlQSjNfRk4sIFBKM19PVVQsIFBKM19JTiwgUEozX0lOX1BVLAorCQlQSjJfRk4sIFBKMl9PVVQsIFBKMl9JTiwgUEoyX0lOX1BVLAorCQlQSjFfRk4sIFBKMV9PVVQsIFBKMV9JTiwgUEoxX0lOX1BVLAorCQlQSjBfRk4sIFBKMF9PVVQsIFBKMF9JTiwgUEowX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBLQ1IiLCAweGZmZTcwMDEyLCAxNiwgMikgeworCQlQSzdfRk4sIFBLN19PVVQsIFBLN19JTiwgUEs3X0lOX1BVLAorCQlQSzZfRk4sIFBLNl9PVVQsIFBLNl9JTiwgUEs2X0lOX1BVLAorCQlQSzVfRk4sIFBLNV9PVVQsIFBLNV9JTiwgUEs1X0lOX1BVLAorCQlQSzRfRk4sIFBLNF9PVVQsIFBLNF9JTiwgUEs0X0lOX1BVLAorCQlQSzNfRk4sIFBLM19PVVQsIFBLM19JTiwgUEszX0lOX1BVLAorCQlQSzJfRk4sIFBLMl9PVVQsIFBLMl9JTiwgUEsyX0lOX1BVLAorCQlQSzFfRk4sIFBLMV9PVVQsIFBLMV9JTiwgUEsxX0lOX1BVLAorCQlQSzBfRk4sIFBLMF9PVVQsIFBLMF9JTiwgUEswX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBMQ1IiLCAweGZmZTcwMDE0LCAxNiwgMikgeworCQlQTDdfRk4sIFBMN19PVVQsIFBMN19JTiwgUEw3X0lOX1BVLAorCQlQTDZfRk4sIFBMNl9PVVQsIFBMNl9JTiwgUEw2X0lOX1BVLAorCQlQTDVfRk4sIFBMNV9PVVQsIFBMNV9JTiwgUEw1X0lOX1BVLAorCQlQTDRfRk4sIFBMNF9PVVQsIFBMNF9JTiwgUEw0X0lOX1BVLAorCQlQTDNfRk4sIFBMM19PVVQsIFBMM19JTiwgUEwzX0lOX1BVLAorCQlQTDJfRk4sIFBMMl9PVVQsIFBMMl9JTiwgUEwyX0lOX1BVLAorCQlQTDFfRk4sIFBMMV9PVVQsIFBMMV9JTiwgUEwxX0lOX1BVLAorCQlQTDBfRk4sIFBMMF9PVVQsIFBMMF9JTiwgUEwwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBNQ1IiLCAweGZmZTcwMDE2LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQTTFfRk4sIFBNMV9PVVQsIFBNMV9JTiwgUE0xX0lOX1BVLAorCQlQTTBfRk4sIFBNMF9PVVQsIFBNMF9JTiwgUE0wX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBOQ1IiLCAweGZmZTcwMDE4LCAxNiwgMikgeworCQlQTjdfRk4sIFBON19PVVQsIFBON19JTiwgUE43X0lOX1BVLAorCQlQTjZfRk4sIFBONl9PVVQsIFBONl9JTiwgUE42X0lOX1BVLAorCQlQTjVfRk4sIFBONV9PVVQsIFBONV9JTiwgUE41X0lOX1BVLAorCQlQTjRfRk4sIFBONF9PVVQsIFBONF9JTiwgUE40X0lOX1BVLAorCQlQTjNfRk4sIFBOM19PVVQsIFBOM19JTiwgUE4zX0lOX1BVLAorCQlQTjJfRk4sIFBOMl9PVVQsIFBOMl9JTiwgUE4yX0lOX1BVLAorCQlQTjFfRk4sIFBOMV9PVVQsIFBOMV9JTiwgUE4xX0lOX1BVLAorCQlQTjBfRk4sIFBOMF9PVVQsIFBOMF9JTiwgUE4wX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBQQ1IiLCAweGZmZTcwMDFhLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQUDVfRk4sIFBQNV9PVVQsIFBQNV9JTiwgUFA1X0lOX1BVLAorCQlQUDRfRk4sIFBQNF9PVVQsIFBQNF9JTiwgUFA0X0lOX1BVLAorCQlQUDNfRk4sIFBQM19PVVQsIFBQM19JTiwgUFAzX0lOX1BVLAorCQlQUDJfRk4sIFBQMl9PVVQsIFBQMl9JTiwgUFAyX0lOX1BVLAorCQlQUDFfRk4sIFBQMV9PVVQsIFBQMV9JTiwgUFAxX0lOX1BVLAorCQlQUDBfRk4sIFBQMF9PVVQsIFBQMF9JTiwgUFAwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBRQ1IiLCAweGZmZTcwMDFjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQUTRfRk4sIFBRNF9PVVQsIFBRNF9JTiwgUFE0X0lOX1BVLAorCQlQUTNfRk4sIFBRM19PVVQsIFBRM19JTiwgUFEzX0lOX1BVLAorCQlQUTJfRk4sIFBRMl9PVVQsIFBRMl9JTiwgUFEyX0lOX1BVLAorCQlQUTFfRk4sIFBRMV9PVVQsIFBRMV9JTiwgUFExX0lOX1BVLAorCQlQUTBfRk4sIFBRMF9PVVQsIFBRMF9JTiwgUFEwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBSQ1IiLCAweGZmZTcwMDFlLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQUjNfRk4sIFBSM19PVVQsIFBSM19JTiwgUFIzX0lOX1BVLAorCQlQUjJfRk4sIFBSMl9PVVQsIFBSMl9JTiwgUFIyX0lOX1BVLAorCQlQUjFfRk4sIFBSMV9PVVQsIFBSMV9JTiwgUFIxX0lOX1BVLAorCQlQUjBfRk4sIFBSMF9PVVQsIFBSMF9JTiwgUFIwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlAxTVNFTFIiLCAweGZmZTcwMDgwLCAxNiwgMSkgeworCQlQMU1TRUwxNV8wLCBQMU1TRUwxNV8xLAorCQlQMU1TRUwxNF8wLCBQMU1TRUwxNF8xLAorCQlQMU1TRUwxM18wLCBQMU1TRUwxM18xLAorCQlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCQlQMU1TRUwxMV8wLCBQMU1TRUwxMV8xLAorCQlQMU1TRUwxMF8wLCBQMU1TRUwxMF8xLAorCQlQMU1TRUw5XzAsIFAxTVNFTDlfMSwKKwkJUDFNU0VMOF8wLCBQMU1TRUw4XzEsCisJCVAxTVNFTDdfMCwgUDFNU0VMN18xLAorCQlQMU1TRUw2XzAsIFAxTVNFTDZfMSwKKwkJUDFNU0VMNV8wLCAwLAorCQlQMU1TRUw0XzAsIFAxTVNFTDRfMSwKKwkJUDFNU0VMM18wLCBQMU1TRUwzXzEsCisJCVAxTVNFTDJfMCwgUDFNU0VMMl8xLAorCQlQMU1TRUwxXzAsIFAxTVNFTDFfMSwKKwkJUDFNU0VMMF8wLCBQMU1TRUwwXzEgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUDJNU0VMUiIsIDB4ZmZlNzAwODIsIDE2LCAxKSB7CisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCVAyTVNFTDJfMCwgUDJNU0VMMl8xLAorCQlQMk1TRUwxXzAsIFAyTVNFTDFfMSwKKwkJUDJNU0VMMF8wLCBQMk1TRUwwXzEgfQorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHBpbm11eF9kYXRhX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEFEUiIsIDB4ZmZlNzAwMjAsIDgpIHsKKwkJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSIiwgMHhmZmU3MDAyMiwgOCkgeworCQlQQjdfREFUQSwgUEI2X0RBVEEsIFBCNV9EQVRBLCBQQjRfREFUQSwKKwkJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGZmZTcwMDI0LCA4KSB7CisJCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCQlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4ZmZlNzAwMjYsIDgpIHsKKwkJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJCVBEM19EQVRBLCBQRDJfREFUQSwgUEQxX0RBVEEsIFBEMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRURSIiwgMHhmZmU3MDAyOCwgOCkgeworCQkwLCAwLCBQRTVfREFUQSwgUEU0X0RBVEEsCisJCVBFM19EQVRBLCBQRTJfREFUQSwgUEUxX0RBVEEsIFBFMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSIiwgMHhmZmU3MDAyYSwgOCkgeworCQlQRjdfREFUQSwgUEY2X0RBVEEsIFBGNV9EQVRBLCBQRjRfREFUQSwKKwkJUEYzX0RBVEEsIFBGMl9EQVRBLCBQRjFfREFUQSwgUEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGZmZTcwMDJjLCA4KSB7CisJCVBHN19EQVRBLCBQRzZfREFUQSwgUEc1X0RBVEEsIFBHNF9EQVRBLAorCQlQRzNfREFUQSwgUEcyX0RBVEEsIFBHMV9EQVRBLCBQRzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4ZmZlNzAwMmUsIDgpIHsKKwkJUEg3X0RBVEEsIFBINl9EQVRBLCBQSDVfREFUQSwgUEg0X0RBVEEsCisJCVBIM19EQVRBLCBQSDJfREFUQSwgUEgxX0RBVEEsIFBIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhmZmU3MDAzMCwgOCkgeworCQlQSjdfREFUQSwgUEo2X0RBVEEsIFBKNV9EQVRBLCBQSjRfREFUQSwKKwkJUEozX0RBVEEsIFBKMl9EQVRBLCBQSjFfREFUQSwgUEowX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBLRFIiLCAweGZmZTcwMDMyLCA4KSB7CisJCVBLN19EQVRBLCBQSzZfREFUQSwgUEs1X0RBVEEsIFBLNF9EQVRBLAorCQlQSzNfREFUQSwgUEsyX0RBVEEsIFBLMV9EQVRBLCBQSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4ZmZlNzAwMzQsIDgpIHsKKwkJUEw3X0RBVEEsIFBMNl9EQVRBLCBQTDVfREFUQSwgUEw0X0RBVEEsCisJCVBMM19EQVRBLCBQTDJfREFUQSwgUEwxX0RBVEEsIFBMMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTURSIiwgMHhmZmU3MDAzNiwgOCkgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCBQTTFfREFUQSwgUE0wX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBORFIiLCAweGZmZTcwMDM4LCA4KSB7CisJCVBON19EQVRBLCBQTjZfREFUQSwgUE41X0RBVEEsIFBONF9EQVRBLAorCQlQTjNfREFUQSwgUE4yX0RBVEEsIFBOMV9EQVRBLCBQTjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFBEUiIsIDB4ZmZlNzAwM2EsIDgpIHsKKwkJMCwgMCwgUFA1X0RBVEEsIFBQNF9EQVRBLAorCQlQUDNfREFUQSwgUFAyX0RBVEEsIFBQMV9EQVRBLCBQUDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFFEUiIsIDB4ZmZlNzAwM2MsIDgpIHsKKwkJMCwgMCwgMCwgUFE0X0RBVEEsCisJCVBRM19EQVRBLCBQUTJfREFUQSwgUFExX0RBVEEsIFBRMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUkRSIiwgMHhmZmU3MDAzZSwgOCkgeworCQkwLCAwLCAwLCAwLAorCQlQUjNfREFUQSwgUFIyX0RBVEEsIFBSMV9EQVRBLCBQUjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzc4NV9waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3ODVfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fSVJRT1VULAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3Nzg1X3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwppbmRleCBlNWUwNjg0Li5iODg2OWFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0gtWDMgU01QCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE1hZ251cyBEYW1tCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTE0LDYgKzE0LDIyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorc3RhdGljIGlycXJldHVybl90IGlwaV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJdW5zaWduZWQgaW50IG1lc3NhZ2UgPSAodW5zaWduZWQgaW50KShsb25nKWFyZzsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG9mZnMgPSA0ICogY3B1OworCXVuc2lnbmVkIGludCB4OworCisJeCA9IGN0cmxfaW5sKDB4ZmU0MTAwNzAgKyBvZmZzKTsgLyogQzBJTklUSUNJLi5DbklOVElDSSAqLworCXggJj0gKDEgPDwgKG1lc3NhZ2UgPDwgMikpOworCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLworCisJc21wX21lc3NhZ2VfcmVjdihtZXNzYWdlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogdm9pZCBfX2luaXQgcGxhdF9zbXBfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKQEAgLTQwLDYgKzU2LDEzIEBACiAKIHZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlpbnQgaTsKKworCUJVSUxEX0JVR19PTihTTVBfTVNHX05SID49IDgpOworCisJZm9yIChpID0gMDsgaSA8IFNNUF9NU0dfTlI7IGkrKykKKwkJcmVxdWVzdF9pcnEoMTA0ICsgaSwgaXBpX2ludGVycnVwdF9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAorCQkJICAgICJJUEkiLCAodm9pZCAqKShsb25nKWkpOwogfQogCiAjZGVmaW5lIFNUQkNSX1JFRyhwaHlzX2lkKSAoMHhmZTQwMDAwNCB8IChwaHlzX2lkIDw8IDEyKSkKQEAgLTU5LDcgKzgyLDcgQEAKIAkJY3RybF9vdXRsKFNUQkNSX01TVFAsIFNUQkNSX1JFRyhjcHUpKTsKIAogCXdoaWxlICghKGN0cmxfaW5sKFNUQkNSX1JFRyhjcHUpKSAmIFNUQkNSX01TVFApKQotCQk7CisJCWNwdV9yZWxheCgpOwogCiAJLyogU3RhcnQgdXAgc2Vjb25kYXJ5IHByb2Nlc3NvciBieSBzZW5kaW5nIGEgcmVzZXQgKi8KIAljdHJsX291dGwoU1RCQ1JfQVBfVkFMLCBTVEJDUl9SRUcoY3B1KSk7CkBAIC03NSw0NiArOTgsNiBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9IDB4ZmU0MTAwNzAgKyAoY3B1ICogNCk7CiAKIAlCVUdfT04oY3B1ID49IDQpOwotCUJVR19PTihtZXNzYWdlID49IFNNUF9NU0dfTlIpOwogCiAJY3RybF9vdXRsKDEgPDwgKG1lc3NhZ2UgPDwgMiksIGFkZHIpOyAvKiBDMElOVElDSS4uQ25JTlRJQ0kgKi8KIH0KLQotc3RydWN0IGlwaV9kYXRhIHsKLQl2b2lkICgqaGFuZGxlcikodm9pZCAqKTsKLQl2b2lkICphcmc7Ci0JdW5zaWduZWQgaW50IG1lc3NhZ2U7Ci19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXBpX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaXBpX2RhdGEgKmlkID0gYXJnOwotCXVuc2lnbmVkIGludCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBpbnQgb2ZmcyA9IDQgKiBjcHU7Ci0JdW5zaWduZWQgaW50IHg7Ci0KLQl4ID0gY3RybF9pbmwoMHhmZTQxMDA3MCArIG9mZnMpOyAvKiBDMElOSVRJQ0kuLkNuSU5USUNJICovCi0JeCAmPSAoMSA8PCAoaWQtPm1lc3NhZ2UgPDwgMikpOwotCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLwotCi0JaWQtPmhhbmRsZXIoaWQtPmFyZyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBpX2RhdGEgaXBpX2hhbmRsZXJzW1NNUF9NU0dfTlJdOwotCi1pbnQgcGxhdF9yZWdpc3Rlcl9pcGlfaGFuZGxlcih1bnNpZ25lZCBpbnQgbWVzc2FnZSwKLQkJCSAgICAgIHZvaWQgKCpoYW5kbGVyKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGlwaV9kYXRhICppZCA9ICZpcGlfaGFuZGxlcnNbbWVzc2FnZV07Ci0KLQlCVUdfT04oU01QX01TR19OUiA+PSA4KTsKLQlCVUdfT04obWVzc2FnZSA+PSBTTVBfTVNHX05SKTsKLQotCWlkLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlpZC0+YXJnID0gYXJnOwotCWlkLT5tZXNzYWdlID0gbWVzc2FnZTsKLQotCXJldHVybiByZXF1ZXN0X2lycSgxMDQgKyBtZXNzYWdlLCBpcGlfaW50ZXJydXB0X2hhbmRsZXIsIDAsICJJUEkiLCBpZCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9NYWtlZmlsZQppbmRleCA4NjQ2MzYzLi5jZTQ2MDJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvTWFrZWZpbGUKQEAgLTUsMyArNSw4IEBACiAKIG9iai0kKENPTkZJR19TSF9GUFUpCQkrPSBmcHUubwogb2JqLSQoQ09ORklHX0tBTExTWU1TKQkJKz0gdW53aW5kLm8KKworIyBQcmltYXJ5IG9uLWNoaXAgY2xvY2tzIChjb21tb24pCitjbG9jay0kKENPTkZJR19DUFVfU0g1KQkJOj0gY2xvY2stc2g1Lm8KKworb2JqLXkJCQkrPSAkKGNsb2NrLXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM0OTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYworICoKKyAqIFNILTUgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBpZmNfdGFibGVbXSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNiwgMjQgfTsKKworLyogQ2xvY2ssIFBvd2VyIGFuZCBSZXNldCBDb250cm9sbGVyICovCisjZGVmaW5lCUNQUkNfQkxPQ0tfT0ZGCTB4MDEwMTAwMDAKKyNkZWZpbmUgQ1BSQ19CQVNFCShQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyBDUFJDX0JMT0NLX09GRikKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3ByY19iYXNlOworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CisJY2xrLT5yYXRlICo9IGlmY190YWJsZVtpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g1X21hc3Rlcl9jbGtfb3BzID0geworCS5pbml0CQk9IG1hc3Rlcl9jbGtfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDVfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSAmIDB4MDAwNyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDVfY2xrX29wc1tdID0geworCSZzaDVfbWFzdGVyX2Nsa19vcHMsCisJJnNoNV9tb2R1bGVfY2xrX29wcywKKwkmc2g1X2J1c19jbGtfb3BzLAorCSZzaDVfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwljcHJjX2Jhc2UgPSBvbmNoaXBfcmVtYXAoQ1BSQ19CQVNFLCAxMDI0LCAiQ1BSQyIpOworCUJVR19PTighY3ByY19iYXNlKTsKKworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNV9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNV9jbGtfb3BzW2lkeF07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggNGEyZWNiZS4uOTVkMjE2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMTAsNiArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R1bXBfdGFzay5jIGIvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjdjZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL2ZwdS5oPgotCi0vKgotICogQ2FwdHVyZSB0aGUgdXNlciBzcGFjZSByZWdpc3RlcnMgaWYgdGhlIHRhc2sgaXMgbm90IHJ1bm5pbmcgKGluIHVzZXIgc3BhY2UpCi0gKi8KLWludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZWxmX2dyZWdzZXRfdCAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7Ci0KLQlwdHJlZ3MgPSAqdGFza19wdF9yZWdzKHRzayk7Ci0JZWxmX2NvcmVfY29weV9yZWdzKHJlZ3MsICZwdHJlZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBkdW1wX3Rhc2tfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBlbGZfZnByZWdzZXRfdCAqZnB1KQotewotCWludCBmcHZhbGlkID0gMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKLQlmcHZhbGlkID0gISF0c2tfdXNlZF9tYXRoKHRzayk7Ci0JaWYgKGZwdmFsaWQpIHsKLQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKLQkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLCBzaXplb2YoKmZwdSkpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIGZwdmFsaWQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggZWZiYjQyNi4uMWE1Y2Y5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTM3MSwzICszNzEsNDcgQEAKICNlbmRpZgogNzoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9lbnRlcgogODoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9sZWF2ZQorCisjaWZkZWYgQ09ORklHX0ZUUkFDRQorCS5hbGlnbiAyCisJLmdsb2JsCV9tY291bnQKKwkudHlwZQlfbWNvdW50LEBmdW5jdGlvbgorCS5nbG9ibAltY291bnQKKwkudHlwZQltY291bnQsQGZ1bmN0aW9uCitfbWNvdW50OgorbWNvdW50OgorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI3LCBALXIxNQorCXN0cy5sCXByLCBALXIxNQorCisJbW92LmwJQCgyMCxyMTUpLHI0CisJc3RzCXByLCByNQorCisJbW92LmwJMWYsIHI2CisJbW92LmwJZnRyYWNlX3N0dWIsIHI3CQorCWNtcC9lcQlyNiwgcjcKKwlidAlza2lwX3RyYWNlCisKKwltb3YubAlAcjYsIHI2CisJanNyCUByNgorCSBub3AKKworc2tpcF90cmFjZToKKworCWxkcy5sCUByMTUrLCBwcgorCW1vdi5sCUByMTUrLCByNworCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNQorCXJ0cworCSBtb3YubAlAcjE1KywgcjQKKworCS5hbGlnbiAyCisxOgkubG9uZwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24KKworCS5nbG9ibAlmdHJhY2Vfc3R1YgorZnRyYWNlX3N0dWI6CisJcnRzCisJIG5vcAorI2VuZGlmIC8qIENPTkZJR19GVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2dwaW8uYyBiL2FyY2gvc2gva2VybmVsL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcxNjUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCkBAIC0wLDAgKzEsNTAyIEBACisvKgorICogUGlubXV4ZWQgR1BJTyBzdXBwb3J0IGZvciBTdXBlckguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQoreworCWlmICghcmVnaXN0ZXJlZF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKK30KKworc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKK3sKKwlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQorCQlyZXR1cm4gMDsKKworCWlmIChlbnVtX2lkID4gci0+ZW5kKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlYWRfd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCisJCQkgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBkb193cml0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGEsIG1hc2ssIHBvczsKKworCWRhdGEgPSAwOworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsIHJlZywgdmFsdWUsIHBvcywKKwkJcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisjZW5kaWYKKworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQlkYXRhID0gY3RybF9pbmIocmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJZGF0YSA9IGN0cmxfaW53KHJlZyk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRhdGEgPSBjdHJsX2lubChyZWcpOworCQlicmVhazsKKwl9CisKKwlpZiAoIWRvX3dyaXRlKQorCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7CisKKwlkYXRhICY9IH4obWFzayA8PCBwb3MpOworCWRhdGEgfD0gdmFsdWUgPDwgcG9zOworCisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCWN0cmxfb3V0YihkYXRhLCByZWcpOworCQlicmVhazsKKwljYXNlIDE2OgorCQljdHJsX291dHcoZGF0YSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkYXRhX3JlZzsKKwlpbnQgaywgbjsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gMDsKKwl3aGlsZSAoMSkgeworCQlkYXRhX3JlZyA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZGF0YV9yZWctPnJlZ193aWR0aCkKKwkJCWJyZWFrOworCisJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKKwkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgeworCQkJCSpkcnAgPSBkYXRhX3JlZzsKKwkJCQkqYml0cCA9IG47CisJCQkJcmV0dXJuIDA7CisKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHBpbm11eF9lbnVtX3QgZW51bV9pZCwKKwkJCSAgc3RydWN0IHBpbm11eF9jZmdfcmVnICoqY3JwLCBpbnQgKmluZGV4cCwKKwkJCSAgdW5zaWduZWQgbG9uZyAqKmNudHApCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjb25maWdfcmVnOworCXVuc2lnbmVkIGxvbmcgcl93aWR0aCwgZl93aWR0aDsKKwlpbnQgaywgbjsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWNvbmZpZ19yZWcgPSBncGlvYy0+Y2ZnX3JlZ3MgKyBrOworCisJCXJfd2lkdGggPSBjb25maWdfcmVnLT5yZWdfd2lkdGg7CisJCWZfd2lkdGggPSBjb25maWdfcmVnLT5maWVsZF93aWR0aDsKKworCQlpZiAoIXJfd2lkdGgpCisJCQlicmVhazsKKwkJZm9yIChuID0gMDsgbiA8IChyX3dpZHRoIC8gZl93aWR0aCkgKiAxIDw8IGZfd2lkdGg7IG4rKykgeworCQkJaWYgKGNvbmZpZ19yZWctPmVudW1faWRzW25dID09IGVudW1faWQpIHsKKwkJCQkqY3JwID0gY29uZmlnX3JlZzsKKwkJCQkqaW5kZXhwID0gbjsKKwkJCQkqY250cCA9ICZjb25maWdfcmVnLT5jbnRbbiAvICgxIDw8IGZfd2lkdGgpXTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9ncGlvX2VudW1faWQoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCSAgICBpbnQgcG9zLCBwaW5tdXhfZW51bV90ICplbnVtX2lkcCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlwaW5tdXhfZW51bV90ICpkYXRhID0gZ3Bpb2MtPmdwaW9fZGF0YTsKKwlpbnQgazsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKSB7CisJCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPm1hcmspKSB7CisJCQlwcl9lcnIoIm5vbiBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAocG9zKSB7CisJCSplbnVtX2lkcCA9IGRhdGFbcG9zICsgMV07CisJCXJldHVybiBwb3MgKyAxOworCX0KKworCWZvciAoayA9IDA7IGsgPCBncGlvYy0+Z3Bpb19kYXRhX3NpemU7IGsrKykgeworCQlpZiAoZGF0YVtrXSA9PSBlbnVtX2lkKSB7CisJCQkqZW51bV9pZHAgPSBkYXRhW2sgKyAxXTsKKwkJCXJldHVybiBrICsgMTsKKwkJfQorCX0KKworCXByX2VycigiY2Fubm90IGxvY2F0ZSBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJaWYgKHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgMCwgMCkgPT0gdmFsdWUpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitlbnVtIHsgR1BJT19DRkdfRFJZUlVOLCBHUElPX0NGR19SRVEsIEdQSU9fQ0ZHX0ZSRUUgfTsKKworaW50IHBpbm11eF9jb25maWdfZ3BpbyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkgICAgICAgaW50IHBpbm11eF90eXBlLCBpbnQgY2ZnX21vZGUpCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjciA9IE5VTEw7CisJcGlubXV4X2VudW1fdCBlbnVtX2lkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgKnJhbmdlOworCWludCBpbl9yYW5nZSwgcG9zLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nICpjbnRwOworCisJc3dpdGNoIChwaW5tdXhfdHlwZSkgeworCisJY2FzZSBQSU5NVVhfVFlQRV9GVU5DVElPTjoKKwkJcmFuZ2UgPSBOVUxMOworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCQlyYW5nZSA9ICZncGlvYy0+b3V0cHV0OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dDsKKwkJYnJlYWs7CisKKwljYXNlIFBJTk1VWF9UWVBFX0lOUFVUX1BVTExVUDoKKwkJcmFuZ2UgPSAmZ3Bpb2MtPmlucHV0X3B1OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVRfUFVMTERPV046CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dF9wZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlnb3RvIG91dF9lcnI7CisJfQorCisJcG9zID0gMDsKKwllbnVtX2lkID0gMDsKKwlpbmRleCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJcG9zID0gZ2V0X2dwaW9fZW51bV9pZChncGlvYywgZ3BpbywgcG9zLCAmZW51bV9pZCk7CisJCWlmIChwb3MgPD0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlpZiAoIWVudW1faWQpCisJCQlicmVhazsKKworCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5mdW5jdGlvbik7CisJCWlmICghaW5fcmFuZ2UgJiYgcmFuZ2UpIHsKKwkJCWluX3JhbmdlID0gZW51bV9pbl9yYW5nZShlbnVtX2lkLCByYW5nZSk7CisKKwkJCWlmIChpbl9yYW5nZSAmJiBlbnVtX2lkID09IHJhbmdlLT5mb3JjZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghaW5fcmFuZ2UpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X2NvbmZpZ19yZWcoZ3Bpb2MsIGVudW1faWQsICZjciwgJmluZGV4LCAmY250cCkgIT0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlzd2l0Y2ggKGNmZ19tb2RlKSB7CisJCWNhc2UgR1BJT19DRkdfRFJZUlVOOgorCQkJaWYgKCEqY250cCB8fCAhY2hlY2tfY29uZmlnX3JlZyhncGlvYywgY3IsIGluZGV4KSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfUkVROgorCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKKwkJCQlnb3RvIG91dF9lcnI7CisJCQkqY250cCA9ICpjbnRwICsgMTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfRlJFRToKKwkJCSpjbnRwID0gKmNudHAgLSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKyBvdXRfZXJyOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOworCitpbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmR1bW15OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJaWYgKChncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwkvKiBzZXR1cCBwaW4gZnVuY3Rpb24gaGVyZSBpZiBubyBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBwaW4gKi8KKworCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkdW1teSwgJmkpICE9IDApCisJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfRlVOQ1RJT047CisJZWxzZQorCQlwaW5tdXhfdHlwZSA9IFBJTk1VWF9UWVBFX0dQSU87CisKKwlpZiAocGlubXV4X3R5cGUgPT0gUElOTVVYX1RZUEVfRlVOQ1RJT04pIHsKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJCQkgICAgICAgcGlubXV4X3R5cGUsCisJCQkJICAgICAgIEdQSU9fQ0ZHX0RSWVJVTikgIT0gMCkKKwkJCWdvdG8gZXJyX3VubG9jazsKKworCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKKwkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQorCQkJQlVHKCk7CisJfQorCisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisgZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChfX2dwaW9fcmVxdWVzdCk7CisKK3ZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwaW5tdXhfdHlwZTsKKworCWlmICghZ3Bpb2MpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKwlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKK3N0YXRpYyBpbnQgcGlubXV4X2RpcmVjdGlvbihzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgIHVuc2lnbmVkIGdwaW8sIGludCBuZXdfcGlubXV4X3R5cGUpCit7CisJaW50IHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKworCXN3aXRjaCAocGlubXV4X3R5cGUpIHsKKwljYXNlIFBJTk1VWF9UWVBFX0dQSU86CisJCWJyZWFrOworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMVVA6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMRE9XTjoKKwkJcGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJICAgICAgIG5ld19waW5tdXhfdHlwZSwKKwkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCisJCWdvdG8gZXJyX291dDsKKworCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sCisJCQkgICAgICAgbmV3X3Bpbm11eF90eXBlLAorCQkJICAgICAgIEdQSU9fQ0ZHX1JFUSkgIT0gMCkKKwkJQlVHKCk7CisKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBuZXdfcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX0lOUFVUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKyBlcnJfb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKKworc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKKwkJCQlpbnQgZG9fd3JpdGUpCit7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOworCisJaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCQlCVUcoKTsKKwllbHNlCisJCXZhbHVlID0gcmVhZF93cml0ZV9yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwKKwkJCQkgICAgICAgMSwgYml0LCAhIXZhbHVlLCBkb193cml0ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK2ludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghZ3Bpb2MpCisJCWdvdG8gZXJyX291dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgdmFsdWUsIDEpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX09VVFBVVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisgZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9vdXRwdXQpOworCitpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHZhbHVlID0gMDsKKworCWlmICghZ3Bpb2MpCisJCUJVRygpOworCWVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCXZhbHVlID0gX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIDAsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZ2V0X3ZhbHVlKTsKKwordm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFncGlvYykKKwkJQlVHKCk7CisJZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChncGlvX3NldF92YWx1ZSk7CisKK2ludCByZWdpc3Rlcl9waW5tdXgoc3RydWN0IHBpbm11eF9pbmZvICpwaXApCit7CisJcmVnaXN0ZXJlZF9ncGlvID0gcGlwOworCXByX2luZm8oInBpbm11eDogJXMgaGFuZGxpbmcgZ3BpbyAlZCAtPiAlZFxuIiwKKwkJcGlwLT5uYW1lLCBwaXAtPmZpcnN0X2dwaW8sIHBpcC0+bGFzdF9ncGlvKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW8uYyBiL2FyY2gvc2gva2VybmVsL2lvLmMKaW5kZXggMmI4OTkxMi4uMjljZjQ1OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaW8uYworKysgYi9hcmNoL3NoL2tlcm5lbC9pby5jCkBAIC0xOSwxMiArMTksMTIgQEAKICAqIENvcHkgZGF0YSBmcm9tIElPIG1lbW9yeSBzcGFjZSB0byAicmVhbCIgbWVtb3J5IHNwYWNlLgogICogVGhpcyBuZWVkcyB0byBiZSBvcHRpbWl6ZWQuCiAgKi8KLXZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQordm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKnRvLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmZyb20sIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JY2hhciAqcCA9IHRvOworCXVuc2lnbmVkIGNoYXIgKnAgPSB0bzsKICAgICAgICAgd2hpbGUgKGNvdW50KSB7CiAgICAgICAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgICAgICAgICAqcCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilmcm9tKTsKKyAgICAgICAgICAgICAgICAqcCA9IHJlYWRiKGZyb20pOwogICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgICAgICBmcm9tKys7CiAgICAgICAgIH0KQEAgLTM3LDEwICszNywxMCBAQAogICovCiB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JY29uc3QgY2hhciAqcCA9IGZyb207CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IGZyb207CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICAgICAgd3JpdGViKCpwLCAodm9pZCBfX2lvbWVtICopdG8pOworICAgICAgICAgICAgICAgIHdyaXRlYigqcCwgdG8pOwogICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgICAgICB0bysrOwogICAgICAgICB9CkBAIC01NSw3ICs1NSw3IEBACiB7CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICAgICAgd3JpdGViKGMsICh2b2lkIF9faW9tZW0gKilkc3QpOworICAgICAgICAgICAgICAgIHdyaXRlYihjLCBkc3QpOwogICAgICAgICAgICAgICAgIGRzdCsrOwogICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKaW5kZXggZGI3Njk0NC4uNWE3ZjU1NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYwpAQCAtMTksMzggKzE5LDMzIEBACiAvKiBTSDMgaGFzIGEgUENNQ0lBIGJ1ZyB0aGF0IG5lZWRzIGEgZHVtbXkgcmVhZCBmcm9tIGFyZWEgNiBmb3IgYQogICogd29ya2Fyb3VuZC4gKi8KIC8qIEknbSBub3Qgc3VyZSBTSDc3MDkgaGFzIHRoaXMga2luZCBvZiBidWcgKi8KLSNkZWZpbmUgZHVtbXlfcmVhZCgpCWN0cmxfaW5iKDB4YmEwMDAwMDApCisjZGVmaW5lIGR1bW15X3JlYWQoKQlfX3Jhd19yZWFkYigweGJhMDAwMDAwKQogI2Vsc2UKICNkZWZpbmUgZHVtbXlfcmVhZCgpCiAjZW5kaWYKIAogdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2U7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh2b2lkKQotewotCWN0cmxfaW53KDB4YTAwMDAwMDApOwotfQotCiB1OCBnZW5lcmljX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5iKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKKwlyZXR1cm4gX19yYXdfcmVhZGIoX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKIH0KIAogdTE2IGdlbmVyaWNfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlyZXR1cm4gY3RybF9pbncoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgMikpOworCXJldHVybiBfX3Jhd19yZWFkdyhfX2lvcG9ydF9tYXAocG9ydCwgMikpOwogfQogCiB1MzIgZ2VuZXJpY19pbmwodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXJldHVybiBjdHJsX2lubCgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCA0KSk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKF9faW9wb3J0X21hcChwb3J0LCA0KSk7CiB9CiAKIHU4IGdlbmVyaWNfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewogCXVuc2lnbmVkIGxvbmcgdiA9IGdlbmVyaWNfaW5iKHBvcnQpOwogCi0JZGVsYXkoKTsKKwljdHJsX2RlbGF5KCk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTU4LDcgKzUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHYgPSBnZW5lcmljX2ludyhwb3J0KTsKIAotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogCXJldHVybiB2OwogfQogCkBAIC02Niw3ICs2MSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbmwocG9ydCk7CiAKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIAlyZXR1cm4gdjsKIH0KIApAQCAtODEsNyArNzYsNyBAQAogCXZvbGF0aWxlIHU4ICpwb3J0X2FkZHI7CiAJdTggKmJ1ZiA9IGRzdDsKIAotCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1OCAqKV9faW9wb3J0X21hcChwb3J0LCAxKTsKKwlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTggX19mb3JjZSAqKV9faW9wb3J0X21hcChwb3J0LCAxKTsKIAl3aGlsZSAoY291bnQtLSkKIAkJKmJ1ZisrID0gKnBvcnRfYWRkcjsKIH0KQEAgLTkxLDcgKzg2LDcgQEAKIAl2b2xhdGlsZSB1MTYgKnBvcnRfYWRkcjsKIAl1MTYgKmJ1ZiA9IGRzdDsKIAotCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MTYgKilfX2lvcG9ydF9tYXAocG9ydCwgMik7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopX19pb3BvcnRfbWFwKHBvcnQsIDIpOwogCXdoaWxlIChjb3VudC0tKQogCQkqYnVmKysgPSAqcG9ydF9hZGRyOwogCkBAIC0xMDMsNyArOTgsNyBAQAogCXZvbGF0aWxlIHUzMiAqcG9ydF9hZGRyOwogCXUzMiAqYnVmID0gZHN0OwogCi0JcG9ydF9hZGRyID0gKHZvbGF0aWxlIHUzMiAqKV9faW9wb3J0X21hcChwb3J0LCA0KTsKKwlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTMyIF9fZm9yY2UgKilfX2lvcG9ydF9tYXAocG9ydCwgNCk7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSpidWYrKyA9ICpwb3J0X2FkZHI7CiAKQEAgLTExMiwzNSArMTA3LDM1IEBACiAKIHZvaWQgZ2VuZXJpY19vdXRiKHU4IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQljdHJsX291dGIoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgMSkpOworCV9fcmF3X3dyaXRlYihiLCBfX2lvcG9ydF9tYXAocG9ydCwgMSkpOwogfQogCiB2b2lkIGdlbmVyaWNfb3V0dyh1MTYgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWN0cmxfb3V0dyhiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCAyKSk7CisJX19yYXdfd3JpdGV3KGIsIF9faW9wb3J0X21hcChwb3J0LCAyKSk7CiB9CiAKIHZvaWQgZ2VuZXJpY19vdXRsKHUzMiBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JY3RybF9vdXRsKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDQpKTsKKwlfX3Jhd193cml0ZWwoYiwgX19pb3BvcnRfbWFwKHBvcnQsIDQpKTsKIH0KIAogdm9pZCBnZW5lcmljX291dGJfcCh1OCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJZ2VuZXJpY19vdXRiKGIsIHBvcnQpOwotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogfQogCiB2b2lkIGdlbmVyaWNfb3V0d19wKHUxNiBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJZ2VuZXJpY19vdXR3KGIsIHBvcnQpOwotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogfQogCiB2b2lkIGdlbmVyaWNfb3V0bF9wKHUzMiBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJZ2VuZXJpY19vdXRsKGIsIHBvcnQpOwotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogfQogCiAvKgpAQCAtMTg0LDM2ICsxNzksNiBAQAogCWR1bW15X3JlYWQoKTsKIH0KIAotdTggZ2VuZXJpY19yZWFkYih2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuIGN0cmxfaW5iKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KLXUxNiBnZW5lcmljX3JlYWR3KHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gY3RybF9pbncoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdTMyIGdlbmVyaWNfcmVhZGwodm9pZCBfX2lvbWVtICphZGRyKQotewotCXJldHVybiBjdHJsX2lubCgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCi12b2lkIGdlbmVyaWNfd3JpdGViKHU4IGIsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQljdHJsX291dGIoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdm9pZCBnZW5lcmljX3dyaXRldyh1MTYgYiwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWN0cmxfb3V0dyhiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCi12b2lkIGdlbmVyaWNfd3JpdGVsKHUzMiBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JY3RybF9vdXRsKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KIHZvaWQgX19pb21lbSAqZ2VuZXJpY19pb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIGdlbmVyaWNfaW9fYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3NoL2tlcm5lbC9rcHJvYmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2ODUwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2twcm9iZXMuYwpAQCAtMCwwICsxLDU4NCBAQAorLyoKKyAqIEtlcm5lbCBwcm9iZXMgKGtwcm9iZXMpIGZvciBTdXBlckgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXMgU21pdGggPGNocmlzLnNtaXRoQHN0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBMaW5lbyBTb2x1dGlvbnMsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlICosIGN1cnJlbnRfa3Byb2JlKSA9IE5VTEw7CitERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CisKK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIHNhdmVkX2N1cnJlbnRfb3Bjb2RlOworc3RhdGljIHN0cnVjdCBrcHJvYmUgc2F2ZWRfbmV4dF9vcGNvZGU7CitzdGF0aWMgc3RydWN0IGtwcm9iZSBzYXZlZF9uZXh0X29wY29kZTI7CisKKyNkZWZpbmUgT1BDT0RFX0pNUCh4KQkoKCh4KSAmIDB4RjBGRikgPT0gMHg0MDJiKQorI2RlZmluZSBPUENPREVfSlNSKHgpCSgoKHgpICYgMHhGMEZGKSA9PSAweDQwMGIpCisjZGVmaW5lIE9QQ09ERV9CUkEoeCkJKCgoeCkgJiAweEYwMDApID09IDB4YTAwMCkKKyNkZWZpbmUgT1BDT0RFX0JSQUYoeCkJKCgoeCkgJiAweEYwRkYpID09IDB4MDAyMykKKyNkZWZpbmUgT1BDT0RFX0JTUih4KQkoKCh4KSAmIDB4RjAwMCkgPT0gMHhiMDAwKQorI2RlZmluZSBPUENPREVfQlNSRih4KQkoKCh4KSAmIDB4RjBGRikgPT0gMHgwMDAzKQorCisjZGVmaW5lIE9QQ09ERV9CRl9TKHgpCSgoKHgpICYgMHhGRjAwKSA9PSAweDhmMDApCisjZGVmaW5lIE9QQ09ERV9CVF9TKHgpCSgoKHgpICYgMHhGRjAwKSA9PSAweDhkMDApCisKKyNkZWZpbmUgT1BDT0RFX0JGKHgpCSgoKHgpICYgMHhGRjAwKSA9PSAweDhiMDApCisjZGVmaW5lIE9QQ09ERV9CVCh4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4OTAwKQorCisjZGVmaW5lIE9QQ09ERV9SVFMoeCkJKCgoeCkgJiAweDAwMEYpID09IDB4MDAwYikKKyNkZWZpbmUgT1BDT0RFX1JURSh4KQkoKCh4KSAmIDB4RkZGRikgPT0gMHgwMDJiKQorCitpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlID0gKihrcHJvYmVfb3Bjb2RlX3QgKikgKHAtPmFkZHIpOworCisJaWYgKE9QQ09ERV9SVEUob3Bjb2RlKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CS8qIEJhZCBicmVha3BvaW50ICovCisKKwlwLT5vcGNvZGUgPSBvcGNvZGU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9jb3B5X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCW1lbWNweShwLT5haW5zbi5pbnNuLCBwLT5hZGRyLCBNQVhfSU5TTl9TSVpFICogc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworCXAtPm9wY29kZSA9ICpwLT5hZGRyOworfQorCit2b2lkIF9fa3Byb2JlcyBhcmNoX2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwkqcC0+YWRkciA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT047CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIsCisJCQkgICAodW5zaWduZWQgbG9uZylwLT5hZGRyICsgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworfQorCit2b2lkIF9fa3Byb2JlcyBhcmNoX2Rpc2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwkqcC0+YWRkciA9IHAtPm9wY29kZTsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcC0+YWRkciwKKwkJCSAgICh1bnNpZ25lZCBsb25nKXAtPmFkZHIgKyBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7Cit9CisKK2ludCBfX2twcm9iZXMgYXJjaF90cmFtcG9saW5lX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCWlmICgqcC0+YWRkciA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIElmIGFuIGlsbGVnYWwgc2xvdCBpbnN0cnVjdGlvbiBleGNlcHRpb24gb2NjdXJzIGZvciBhbiBhZGRyZXNzCisgKiBjb250YWluaW5nIGEga3Byb2JlLCByZW1vdmUgdGhlIHByb2JlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgZXhjZXB0aW9uIHdhcyBoYW5kbGVkIHN1Y2Nlc3NmdWxseSwgMSBvdGhlcndpc2UuCisgKi8KK2ludCBfX2twcm9iZXMga3Byb2JlX2hhbmRsZV9pbGxzbG90KHVuc2lnbmVkIGxvbmcgcGMpCit7CisJc3RydWN0IGtwcm9iZSAqcCA9IGdldF9rcHJvYmUoKGtwcm9iZV9vcGNvZGVfdCAqKSBwYyArIDEpOworCisJaWYgKHAgIT0gTlVMTCkgeworCQlwcmludGsoIldhcm5pbmc6IHJlbW92aW5nIGtwcm9iZSBmcm9tIGRlbGF5IHNsb3Q6IDB4JS44eFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcGMgKyAyKTsKKwkJdW5yZWdpc3Rlcl9rcHJvYmUocCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCit2b2lkIF9fa3Byb2JlcyBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlpZiAoc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciAhPSAweDApIHsKKwkJYXJjaF9kaXNhcm1fa3Byb2JlKHApOworCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlKTsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IDB4MDsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUub3Bjb2RlID0gMHgwOworCisJCWlmIChzYXZlZF9uZXh0X29wY29kZTIuYWRkciAhPSAweDApIHsKKwkJCWFyY2hfZGlzYXJtX2twcm9iZSgmc2F2ZWRfbmV4dF9vcGNvZGUyKTsKKwkJCXNhdmVkX25leHRfb3Bjb2RlMi5hZGRyID0gMHgwOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLm9wY29kZSA9IDB4MDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCit7CisJa2NiLT5wcmV2X2twcm9iZS5rcCA9IGtwcm9iZV9ydW5uaW5nKCk7CisJa2NiLT5wcmV2X2twcm9iZS5zdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJIHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCit7CisJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOworfQorCisvKgorICogU2luZ2xlc3RlcCBpcyBpbXBsZW1lbnRlZCBieSBkaXNhYmxpbmcgdGhlIGN1cnJlbnQga3Byb2JlIGFuZCBzZXR0aW5nIG9uZQorICogb24gdGhlIG5leHQgaW5zdHJ1Y3Rpb24sIGZvbGxvd2luZyBicmFuY2hlcy4gVHdvIHByb2JlcyBhcmUgc2V0IGlmIHRoZQorICogYnJhbmNoIGlzIGNvbmRpdGlvbmFsLgorICovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWtwcm9iZV9vcGNvZGVfdCAqYWRkciA9IE5VTEw7CisJc2F2ZWRfY3VycmVudF9vcGNvZGUuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKHJlZ3MtPnBjKTsKKwlhZGRyID0gc2F2ZWRfY3VycmVudF9vcGNvZGUuYWRkcjsKKworCWlmIChwICE9IE5VTEwpIHsKKwkJYXJjaF9kaXNhcm1fa3Byb2JlKHApOworCisJCWlmIChPUENPREVfSlNSKHAtPm9wY29kZSkgfHwgT1BDT0RFX0pNUChwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgcmVnX25yID0gKChwLT5vcGNvZGUgPj4gOCkgJiAweDAwMEYpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSByZWdzLT5yZWdzW3JlZ19ucl07CisJCX0gZWxzZSBpZiAoT1BDT0RFX0JSQShwLT5vcGNvZGUpIHx8IE9QQ09ERV9CU1IocC0+b3Bjb2RlKSkgeworCQkJdW5zaWduZWQgbG9uZyBkaXNwID0gKHAtPm9wY29kZSAmIDB4MEZGRik7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0KKwkJCSAgICAoa3Byb2JlX29wY29kZV90ICopIChyZWdzLT5wYyArIDQgKyBkaXNwICogMik7CisKKwkJfSBlbHNlIGlmIChPUENPREVfQlJBRihwLT5vcGNvZGUpIHx8IE9QQ09ERV9CU1JGKHAtPm9wY29kZSkpIHsKKwkJCXVuc2lnbmVkIGludCByZWdfbnIgPSAoKHAtPm9wY29kZSA+PiA4KSAmIDB4MDAwRik7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0KKwkJCSAgICAoa3Byb2JlX29wY29kZV90ICopIChyZWdzLT5wYyArIDQgKworCQkJCQkJIHJlZ3MtPnJlZ3NbcmVnX25yXSk7CisKKwkJfSBlbHNlIGlmIChPUENPREVfUlRTKHAtPm9wY29kZSkpIHsKKwkJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIHJlZ3MtPnByOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX0JGKHAtPm9wY29kZSkgfHwgT1BDT0RFX0JUKHAtPm9wY29kZSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGlzcCA9IChwLT5vcGNvZGUgJiAweDAwRkYpOworCQkJLyogY2FzZSAxICovCisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gcC0+YWRkciArIDE7CisJCQkvKiBjYXNlIDIgKi8KKwkJCXNhdmVkX25leHRfb3Bjb2RlMi5hZGRyID0KKwkJCSAgICAoa3Byb2JlX29wY29kZV90ICopIChyZWdzLT5wYyArIDQgKyBkaXNwICogMik7CisJCQlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gKihzYXZlZF9uZXh0X29wY29kZTIuYWRkcik7CisJCQlhcmNoX2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlMik7CisKKwkJfSBlbHNlIGlmIChPUENPREVfQkZfUyhwLT5vcGNvZGUpIHx8IE9QQ09ERV9CVF9TKHAtPm9wY29kZSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGlzcCA9IChwLT5vcGNvZGUgJiAweDAwRkYpOworCQkJLyogY2FzZSAxICovCisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gcC0+YWRkciArIDI7CisJCQkvKiBjYXNlIDIgKi8KKwkJCXNhdmVkX25leHRfb3Bjb2RlMi5hZGRyID0KKwkJCSAgICAoa3Byb2JlX29wY29kZV90ICopIChyZWdzLT5wYyArIDQgKyBkaXNwICogMik7CisJCQlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gKihzYXZlZF9uZXh0X29wY29kZTIuYWRkcik7CisJCQlhcmNoX2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlMik7CisKKwkJfSBlbHNlIHsKKwkJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSBwLT5hZGRyICsgMTsKKwkJfQorCisJCXNhdmVkX25leHRfb3Bjb2RlLm9wY29kZSA9ICooc2F2ZWRfbmV4dF9vcGNvZGUuYWRkcik7CisJCWFyY2hfYXJtX2twcm9iZSgmc2F2ZWRfbmV4dF9vcGNvZGUpOworCX0KK30KKworLyogQ2FsbGVkIHdpdGgga3JldHByb2JlX2xvY2sgaGVsZCAqLwordm9pZCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyaS0+cmV0X2FkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIHJlZ3MtPnByOworCisJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KKwlyZWdzLT5wciA9ICh1bnNpZ25lZCBsb25nKWtyZXRwcm9iZV90cmFtcG9saW5lOworfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga3Byb2JlICpwOworCWludCByZXQgPSAwOworCWtwcm9iZV9vcGNvZGVfdCAqYWRkciA9IE5VTEw7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYjsKKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0byBiZSBwcmVlbXB0ZWQgZm9yIHRoZSBlbnRpcmUKKwkgKiBkdXJhdGlvbiBvZiBrcHJvYmUgcHJvY2Vzc2luZworCSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCWtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisKKwlhZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMpOworCisJLyogQ2hlY2sgd2UncmUgbm90IGFjdHVhbGx5IHJlY3Vyc2luZyAqLworCWlmIChrcHJvYmVfcnVubmluZygpKSB7CisJCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCQlpZiAocCkgeworCQkJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfSElUX1NTICYmCisJCQkgICAgKnAtPmFpbnNuLmluc24gPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgeworCQkJCWdvdG8gbm9fa3Byb2JlOworCQkJfQorCQkJLyogV2UgaGF2ZSByZWVudGVyZWQgdGhlIGtwcm9iZV9oYW5kbGVyKCksIHNpbmNlCisJCQkgKiBhbm90aGVyIHByb2JlIHdhcyBoaXQgd2hpbGUgd2l0aGluIHRoZSBoYW5kbGVyLgorCQkJICogV2UgaGVyZSBzYXZlIHRoZSBvcmlnaW5hbCBrcHJvYmVzIHZhcmlhYmxlcyBhbmQKKwkJCSAqIGp1c3Qgc2luZ2xlIHN0ZXAgb24gdGhlIGluc3RydWN0aW9uIG9mIHRoZSBuZXcgcHJvYmUKKwkJCSAqIHdpdGhvdXQgY2FsbGluZyBhbnkgdXNlciBoYW5kbGVycy4KKwkJCSAqLworCQkJc2F2ZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOworCQkJa3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChwKTsKKwkJCXByZXBhcmVfc2luZ2xlc3RlcChwLCByZWdzKTsKKwkJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9SRUVOVEVSOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CisJCQlpZiAocC0+YnJlYWtfaGFuZGxlciAmJiBwLT5icmVha19oYW5kbGVyKHAsIHJlZ3MpKSB7CisJCQkJZ290byBzc19wcm9iZTsKKwkJCX0KKwkJfQorCQlnb3RvIG5vX2twcm9iZTsKKwl9CisKKwlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwlpZiAoIXApIHsKKwkJLyogTm90IG9uZSBvZiBvdXJzOiBsZXQga2VybmVsIGhhbmRsZSBpdCAqLworCQlpZiAoKihrcHJvYmVfb3Bjb2RlX3QgKilhZGRyICE9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCS8qCisJCQkgKiBUaGUgYnJlYWtwb2ludCBpbnN0cnVjdGlvbiB3YXMgcmVtb3ZlZCByaWdodAorCQkJICogYWZ0ZXIgd2UgaGl0IGl0LiBBbm90aGVyIGNwdSBoYXMgcmVtb3ZlZAorCQkJICogZWl0aGVyIGEgcHJvYmVwb2ludCBvciBhIGRlYnVnZ2VyIGJyZWFrcG9pbnQKKwkJCSAqIGF0IHRoaXMgYWRkcmVzcy4gSW4gZWl0aGVyIGNhc2UsIG5vIGZ1cnRoZXIKKwkJCSAqIGhhbmRsaW5nIG9mIHRoaXMgaW50ZXJydXB0IGlzIGFwcHJvcHJpYXRlLgorCQkJICovCisJCQlyZXQgPSAxOworCQl9CisKKwkJZ290byBub19rcHJvYmU7CisJfQorCisJc2V0X2N1cnJlbnRfa3Byb2JlKHAsIHJlZ3MsIGtjYik7CisJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7CisKKwlpZiAocC0+cHJlX2hhbmRsZXIgJiYgcC0+cHJlX2hhbmRsZXIocCwgcmVncykpCisJCS8qIGhhbmRsZXIgaGFzIGFscmVhZHkgc2V0IHRoaW5ncyB1cCwgc28gc2tpcCBzcyBzZXR1cCAqLworCQlyZXR1cm4gMTsKKworc3NfcHJvYmU6CisJcHJlcGFyZV9zaW5nbGVzdGVwKHAsIHJlZ3MpOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1M7CisJcmV0dXJuIDE7CisKK25vX2twcm9iZToKKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEZvciBmdW5jdGlvbi1yZXR1cm4gcHJvYmVzLCBpbml0X2twcm9iZXMoKSBlc3RhYmxpc2hlcyBhIHByb2JlcG9pbnQKKyAqIGhlcmUuIFdoZW4gYSByZXRwcm9iZWQgZnVuY3Rpb24gcmV0dXJucywgdGhpcyBwcm9iZSBpcyBoaXQgYW5kCisgKiB0cmFtcG9saW5lX3Byb2JlX2hhbmRsZXIoKSBydW5zLCBjYWxsaW5nIHRoZSBrcmV0cHJvYmUncyBoYW5kbGVyLgorICovCitzdGF0aWMgdm9pZCBfX3VzZWQga3JldHByb2JlX3RyYW1wb2xpbmVfaG9sZGVyKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlICgiLmdsb2JsIGtyZXRwcm9iZV90cmFtcG9saW5lXG4iCisJCSAgICAgICJrcmV0cHJvYmVfdHJhbXBvbGluZTpcblx0IgorCQkgICAgICAibm9wXG4iKTsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHdlIGhpdCB0aGUgcHJvYmUgcG9pbnQgYXQga3JldHByb2JlX3RyYW1wb2xpbmUKKyAqLworaW50IF9fa3Byb2JlcyB0cmFtcG9saW5lX3Byb2JlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmkgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkLCBlbXB0eV9ycDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBvcmlnX3JldF9hZGRyZXNzID0gMDsKKwl1bnNpZ25lZCBsb25nIHRyYW1wb2xpbmVfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSZrcmV0cHJvYmVfdHJhbXBvbGluZTsKKworCUlOSVRfSExJU1RfSEVBRCgmZW1wdHlfcnApOworCWtyZXRwcm9iZV9oYXNoX2xvY2soY3VycmVudCwgJmhlYWQsICZmbGFncyk7CisKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuCisJICogdGFzayBlaXRoZXIgYmVjYXVzZSBhbiBtdWx0aXBsZSBmdW5jdGlvbnMgaW4gdGhlIGNhbGwgcGF0aAorCSAqIGhhdmUgYSByZXR1cm4gcHJvYmUgaW5zdGFsbGVkIG9uIHRoZW0sIGFuZC9vciBtb3JlIHRoZW4gb25lIHJldHVybgorCSAqIHJldHVybiBwcm9iZSB3YXMgcmVnaXN0ZXJlZCBmb3IgYSB0YXJnZXQgZnVuY3Rpb24uCisJICoKKwkgKiBXZSBjYW4gaGFuZGxlIHRoaXMgYmVjYXVzZToKKwkgKiAgICAgLSBpbnN0YW5jZXMgYXJlIGFsd2F5cyBpbnNlcnRlZCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdAorCSAqICAgICAtIHdoZW4gbXVsdGlwbGUgcmV0dXJuIHByb2JlcyBhcmUgcmVnaXN0ZXJlZCBmb3IgdGhlIHNhbWUKKwkgKiAgICAgICBmdW5jdGlvbiwgdGhlIGZpcnN0IGluc3RhbmNlJ3MgcmV0X2FkZHIgd2lsbCBwb2ludCB0byB0aGUKKwkgKiAgICAgICByZWFsIHJldHVybiBhZGRyZXNzLCBhbmQgYWxsIHRoZSByZXN0IHdpbGwgcG9pbnQgdG8KKwkgKiAgICAgICBrcmV0cHJvYmVfdHJhbXBvbGluZQorCSAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmksIG5vZGUsIHRtcCwgaGVhZCwgaGxpc3QpIHsKKwkJaWYgKHJpLT50YXNrICE9IGN1cnJlbnQpCisJCQkvKiBhbm90aGVyIHRhc2sgaXMgc2hhcmluZyBvdXIgaGFzaCBidWNrZXQgKi8KKwkJCWNvbnRpbnVlOworCisJCWlmIChyaS0+cnAgJiYgcmktPnJwLT5oYW5kbGVyKSB7CisJCQlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9ICZyaS0+cnAtPmtwOworCQkJcmktPnJwLT5oYW5kbGVyKHJpLCByZWdzKTsKKwkJCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gTlVMTDsKKwkJfQorCisJCW9yaWdfcmV0X2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZylyaS0+cmV0X2FkZHI7CisJCXJlY3ljbGVfcnBfaW5zdChyaSwgJmVtcHR5X3JwKTsKKworCQlpZiAob3JpZ19yZXRfYWRkcmVzcyAhPSB0cmFtcG9saW5lX2FkZHJlc3MpCisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgcmVhbCByZXR1cm4gYWRkcmVzcy4gQW55IG90aGVyCisJCQkgKiBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFzayBhcmUgZm9yCisJCQkgKiBvdGhlciBjYWxscyBkZWVwZXIgb24gdGhlIGNhbGwgc3RhY2sKKwkJCSAqLworCQkJYnJlYWs7CisJfQorCisJa3JldHByb2JlX2Fzc2VydChyaSwgb3JpZ19yZXRfYWRkcmVzcywgdHJhbXBvbGluZV9hZGRyZXNzKTsKKworCXJlZ3MtPnBjID0gb3JpZ19yZXRfYWRkcmVzczsKKwlrcmV0cHJvYmVfaGFzaF91bmxvY2soY3VycmVudCwgJmZsYWdzKTsKKworCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmksIG5vZGUsIHRtcCwgJmVtcHR5X3JwLCBobGlzdCkgeworCQlobGlzdF9kZWwoJnJpLT5obGlzdCk7CisJCWtmcmVlKHJpKTsKKwl9CisKKwlyZXR1cm4gb3JpZ19yZXRfYWRkcmVzczsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMgcG9zdF9rcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCWtwcm9iZV9vcGNvZGVfdCAqYWRkciA9IE5VTEw7CisJc3RydWN0IGtwcm9iZSAqcCA9IE5VTEw7CisKKwlpZiAoIWN1cikKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGtjYi0+a3Byb2JlX3N0YXR1cyAhPSBLUFJPQkVfUkVFTlRFUikgJiYgY3VyLT5wb3N0X2hhbmRsZXIpIHsKKwkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9TU0RPTkU7CisJCWN1ci0+cG9zdF9oYW5kbGVyKGN1ciwgcmVncywgMCk7CisJfQorCisJaWYgKHNhdmVkX25leHRfb3Bjb2RlLmFkZHIgIT0gMHgwKSB7CisJCWFyY2hfZGlzYXJtX2twcm9iZSgmc2F2ZWRfbmV4dF9vcGNvZGUpOworCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gMHgwOworCQlzYXZlZF9uZXh0X29wY29kZS5vcGNvZGUgPSAweDA7CisKKwkJYWRkciA9IHNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHI7CisJCXNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHIgPSAweDA7CisKKwkJcCA9IGdldF9rcHJvYmUoYWRkcik7CisJCWFyY2hfYXJtX2twcm9iZShwKTsKKworCQlpZiAoc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIgIT0gMHgwKSB7CisJCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlMik7CisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9IDB4MDsKKwkJCXNhdmVkX25leHRfb3Bjb2RlMi5vcGNvZGUgPSAweDA7CisJCX0KKwl9CisKKwkvKiBSZXN0b3JlIGJhY2sgdGhlIG9yaWdpbmFsIHNhdmVkIGtwcm9iZXMgdmFyaWFibGVzIGFuZCBjb250aW51ZS4gKi8KKwlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKSB7CisJCXJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CisJCWdvdG8gb3V0OworCX0KKworCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CisKK291dDoKKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisKKwlyZXR1cm4gMTsKK30KKworaW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK3sKKwlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmVudHJ5OworCisJc3dpdGNoIChrY2ItPmtwcm9iZV9zdGF0dXMpIHsKKwljYXNlIEtQUk9CRV9ISVRfU1M6CisJY2FzZSBLUFJPQkVfUkVFTlRFUjoKKwkJLyoKKwkJICogV2UgYXJlIGhlcmUgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcgc2luZ2xlCisJCSAqIHN0ZXBwZWQgY2F1c2VkIGEgcGFnZSBmYXVsdC4gV2UgcmVzZXQgdGhlIGN1cnJlbnQKKwkJICoga3Byb2JlLCBwb2ludCB0aGUgcGMgYmFjayB0byB0aGUgcHJvYmUgYWRkcmVzcworCQkgKiBhbmQgYWxsb3cgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciB0byBjb250aW51ZSBhcyBhCisJCSAqIG5vcm1hbCBwYWdlIGZhdWx0LgorCQkgKi8KKwkJcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZyljdXItPmFkZHI7CisJCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX1JFRU5URVIpCisJCQlyZXN0b3JlX3ByZXZpb3VzX2twcm9iZShrY2IpOworCQllbHNlCisJCQlyZXNldF9jdXJyZW50X2twcm9iZSgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCWJyZWFrOworCWNhc2UgS1BST0JFX0hJVF9BQ1RJVkU6CisJY2FzZSBLUFJPQkVfSElUX1NTRE9ORToKKwkJLyoKKwkJICogV2UgaW5jcmVtZW50IHRoZSBubWlzc2VkIGNvdW50IGZvciBhY2NvdW50aW5nLAorCQkgKiB3ZSBjYW4gYWxzbyB1c2UgbnByZS9ucG9zdGZhdWx0IGNvdW50IGZvciBhY2NvdW50aW5nCisJCSAqIHRoZXNlIHNwZWNpZmljIGZhdWx0IGNhc2VzLgorCQkgKi8KKwkJa3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChjdXIpOworCisJCS8qCisJCSAqIFdlIGNvbWUgaGVyZSBiZWNhdXNlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlL3Bvc3QKKwkJICogaGFuZGxlciBjYXVzZWQgdGhlIHBhZ2VfZmF1bHQsIHRoaXMgY291bGQgaGFwcGVuCisJCSAqIGlmIGhhbmRsZXIgdHJpZXMgdG8gYWNjZXNzIHVzZXIgc3BhY2UgYnkKKwkJICogY29weV9mcm9tX3VzZXIoKSwgZ2V0X3VzZXIoKSBldGMuIExldCB0aGUKKwkJICogdXNlci1zcGVjaWZpZWQgaGFuZGxlciB0cnkgdG8gZml4IGl0IGZpcnN0LgorCQkgKi8KKwkJaWYgKGN1ci0+ZmF1bHRfaGFuZGxlciAmJiBjdXItPmZhdWx0X2hhbmRsZXIoY3VyLCByZWdzLCB0cmFwbnIpKQorCQkJcmV0dXJuIDE7CisKKwkJLyoKKwkJICogSW4gY2FzZSB0aGUgdXNlci1zcGVjaWZpZWQgZmF1bHQgaGFuZGxlciByZXR1cm5lZAorCQkgKiB6ZXJvLCB0cnkgdG8gZml4IHVwLgorCQkgKi8KKwkJaWYgKChlbnRyeSA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPnBjKSkgIT0gTlVMTCkgeworCQkJcmVncy0+cGMgPSBlbnRyeS0+Zml4dXA7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qCisJCSAqIGZpeHVwX2V4Y2VwdGlvbigpIGNvdWxkIG5vdCBoYW5kbGUgaXQsCisJCSAqIExldCBkb19wYWdlX2ZhdWx0KCkgZml4IGl0LgorCQkgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcmFwcGVyIHJvdXRpbmUgdG8gZm9yIGhhbmRsaW5nIGV4Y2VwdGlvbnMuCisgKi8KK2ludCBfX2twcm9iZXMga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGtwcm9iZSAqcCA9IE5VTEw7CisJc3RydWN0IGRpZV9hcmdzICphcmdzID0gKHN0cnVjdCBkaWVfYXJncyAqKWRhdGE7CisJaW50IHJldCA9IE5PVElGWV9ET05FOworCWtwcm9iZV9vcGNvZGVfdCAqYWRkciA9IE5VTEw7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisKKwlhZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSAoYXJncy0+cmVncy0+cGMpOworCWlmICh2YWwgPT0gRElFX1RSQVApIHsKKwkJaWYgKCFrcHJvYmVfcnVubmluZygpKSB7CisJCQlpZiAoa3Byb2JlX2hhbmRsZXIoYXJncy0+cmVncykpIHsKKwkJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJCX0gZWxzZSB7CisJCQkJLyogTm90IGEga3Byb2JlIHRyYXAgKi8KKwkJCQlyZXQgPSBOT1RJRllfRE9ORTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCQkJaWYgKChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX0hJVF9TUykgfHwKKwkJCSAgICAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKSkgeworCQkJCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQkJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGtwcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKSB7CisJCQkJCXJldCA9IE5PVElGWV9TVE9QOworCQkJCX0gZWxzZSB7CisJCQkJCXAgPSBfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKTsKKwkJCQkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYKKwkJCQkJICAgIHAtPmJyZWFrX2hhbmRsZXIocCwgYXJncy0+cmVncykpCisJCQkJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19rcHJvYmVzIHNldGptcF9wcmVfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QganByb2JlICpqcCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QganByb2JlLCBrcCk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJa2NiLT5qcHJvYmVfc2F2ZWRfcmVncyA9ICpyZWdzOworCWtjYi0+anByb2JlX3NhdmVkX3IxNSA9IHJlZ3MtPnJlZ3NbMTVdOworCWFkZHIgPSBrY2ItPmpwcm9iZV9zYXZlZF9yMTU7CisKKwkvKgorCSAqIFRCRDogQXMgTGludXMgcG9pbnRlZCBvdXQsIGdjYyBhc3N1bWVzIHRoYXQgdGhlIGNhbGxlZQorCSAqIG93bnMgdGhlIGFyZ3VtZW50IHNwYWNlIGFuZCBjb3VsZCBvdmVyd3JpdGUgaXQsIGUuZy4KKwkgKiB0YWlsY2FsbCBvcHRpbWl6YXRpb24uIFNvLCB0byBiZSBhYnNvbHV0ZWx5IHNhZmUKKwkgKiB3ZSBhbHNvIHNhdmUgYW5kIHJlc3RvcmUgZW5vdWdoIHN0YWNrIGJ5dGVzIHRvIGNvdmVyCisJICogdGhlIGFyZ3VtZW50IGFyZWEuCisJICovCisJbWVtY3B5KGtjYi0+anByb2Jlc19zdGFjaywgKGtwcm9iZV9vcGNvZGVfdCAqKSBhZGRyLAorCSAgICAgICBNSU5fU1RBQ0tfU0laRShhZGRyKSk7CisKKwlyZWdzLT5wYyA9ICh1bnNpZ25lZCBsb25nKShqcC0+ZW50cnkpOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm4odm9pZCkKK3sKKwlhc20gdm9sYXRpbGUgKCJ0cmFwYSAjMHgzYVxuXHQiICJqcHJvYmVfcmV0dXJuX2VuZDpcblx0IiAibm9wXG5cdCIpOworfQorCitpbnQgX19rcHJvYmVzIGxvbmdqbXBfYnJlYWtfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwl1bnNpZ25lZCBsb25nIHN0YWNrX2FkZHIgPSBrY2ItPmpwcm9iZV9zYXZlZF9yMTU7CisJdTggKmFkZHIgPSAodTggKilyZWdzLT5wYzsKKworCWlmICgoYWRkciA+PSAodTggKilqcHJvYmVfcmV0dXJuKSAmJgorCSAgICAoYWRkciA8PSAodTggKilqcHJvYmVfcmV0dXJuX2VuZCkpIHsKKwkJKnJlZ3MgPSBrY2ItPmpwcm9iZV9zYXZlZF9yZWdzOworCisJCW1lbWNweSgoa3Byb2JlX29wY29kZV90ICopc3RhY2tfYWRkciwga2NiLT5qcHJvYmVzX3N0YWNrLAorCQkgICAgICAgTUlOX1NUQUNLX1NJWkUoc3RhY2tfYWRkcikpOworCisJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1M7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIHRyYW1wb2xpbmVfcCA9IHsKKwkuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikma3JldHByb2JlX3RyYW1wb2xpbmUsCisJLnByZV9oYW5kbGVyID0gdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyCit9OworCitpbnQgX19pbml0IGFyY2hfaW5pdF9rcHJvYmVzKHZvaWQpCit7CisJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IDB4MDsKKwlzYXZlZF9uZXh0X29wY29kZS5vcGNvZGUgPSAweDA7CisKKwlzYXZlZF9jdXJyZW50X29wY29kZS5hZGRyID0gMHgwOworCXNhdmVkX2N1cnJlbnRfb3Bjb2RlLm9wY29kZSA9IDB4MDsKKworCXNhdmVkX25leHRfb3Bjb2RlMi5hZGRyID0gMHgwOworCXNhdmVkX25leHRfb3Bjb2RlMi5vcGNvZGUgPSAweDA7CisKKwlyZXR1cm4gcmVnaXN0ZXJfa3Byb2JlKCZ0cmFtcG9saW5lX3ApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jIGIvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCmluZGV4IDEyOWIyY2YuLmMxZWE0MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMTI1LDkgKzEyNiw2IEBACiAJbXZfc2V0KGluc2IpOwltdl9zZXQoaW5zdyk7CW12X3NldChpbnNsKTsKIAltdl9zZXQob3V0c2IpOwltdl9zZXQob3V0c3cpOwltdl9zZXQob3V0c2wpOwogCi0JbXZfc2V0KHJlYWRiKTsJbXZfc2V0KHJlYWR3KTsJbXZfc2V0KHJlYWRsKTsKLQltdl9zZXQod3JpdGViKTsJbXZfc2V0KHdyaXRldyk7CW12X3NldCh3cml0ZWwpOwotCiAJbXZfc2V0KGlvcG9ydF9tYXApOwogCW12X3NldChpb3BvcnRfdW5tYXApOwogCW12X3NldChpcnFfZGVtdXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDMzMjZhNDUuLmI5NjVmMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTcsNyArNywxMSBAQAogICoKICAqICBTdXBlckggdmVyc2lvbjogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthICYgS2F6IEtvamltYQogICoJCSAgICAgQ29weXJpZ2h0IChDKSAyMDA2IExpbmVvIFNvbHV0aW9ucyBJbmMuIHN1cHBvcnQgU0g0QSBVQkMKLSAqCQkgICAgIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDcgIFBhdWwgTXVuZHQKKyAqCQkgICAgIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0yNiw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YmMuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAKIHN0YXRpYyBpbnQgaGx0X2NvdW50ZXI7CiBpbnQgdWJjX3VzZXJjbnQgPSAwOwpAQCAtMTExLDE1ICsxMTYsMjEgQEAKIHsKIAlwcmludGsoIlxuIik7CiAJcHJpbnRrKCJQaWQgOiAlZCwgQ29tbTogJTIwc1xuIiwgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0pOworCXByaW50aygiQ1BVIDogJWQgICAgJXMgICglcyAlLipzKVxuIiwKKwkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBwcmludF90YWludGVkKCksIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAorCSAgICAgICAoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCisJICAgICAgIGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKKwogCXByaW50X3N5bWJvbCgiUEMgaXMgYXQgJXNcbiIsIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykpOworCXByaW50X3N5bWJvbCgiUFIgaXMgYXQgJXNcbiIsIHJlZ3MtPnByKTsKKwogCXByaW50aygiUEMgIDogJTA4bHggU1AgIDogJTA4bHggU1IgIDogJTA4bHggIiwKIAkgICAgICAgcmVncy0+cGMsIHJlZ3MtPnJlZ3NbMTVdLCByZWdzLT5zcik7CiAjaWZkZWYgQ09ORklHX01NVQotCXByaW50aygiVEVBIDogJTA4eCAgICAiLCBjdHJsX2lubChNTVVfVEVBKSk7CisJcHJpbnRrKCJURUEgOiAlMDh4XG4iLCBjdHJsX2lubChNTVVfVEVBKSk7CiAjZWxzZQotCXByaW50aygiICAgICAgICAgICAgICAgICAgIik7CisJcHJpbnRrKCJcbiIpOwogI2VuZGlmCi0JcHJpbnRrKCIlc1xuIiwgcHJpbnRfdGFpbnRlZCgpKTsKIAogCXByaW50aygiUjAgIDogJTA4bHggUjEgIDogJTA4bHggUjIgIDogJTA4bHggUjMgIDogJTA4bHhcbiIsCiAJICAgICAgIHJlZ3MtPnJlZ3NbMF0scmVncy0+cmVnc1sxXSwKQEAgLTE2Miw2ICsxNzMsNyBAQAogaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwlpbnQgcGlkOwogCiAJbWVtc2V0KCZyZWdzLCAwLCBzaXplb2YocmVncykpOwogCXJlZ3MucmVnc1s0XSA9ICh1bnNpZ25lZCBsb25nKWFyZzsKQEAgLTE3MSw4ICsxODMsMTIgQEAKIAlyZWdzLnNyID0gKDEgPDwgMzApOwogCiAJLyogT2ssIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MuLiAqLwotCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwgMCwKLQkJICAgICAgICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKKwlwaWQgPSBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwgMCwKKwkJICAgICAgJnJlZ3MsIDAsIE5VTEwsIE5VTEwpOworCisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF9rdGhyZWFkX2NyZWF0ZSwgInBpZCAlZCBmbiAlcCIsIHBpZCwgZm4pOworCisJcmV0dXJuIHBpZDsKIH0KIAogLyoKQEAgLTIxMCwxMCArMjI2LDEwIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCiAJZnB2YWxpZCA9ICEhdHNrX3VzZWRfbWF0aCh0c2spOwotCWlmIChmcHZhbGlkKSB7Ci0JCXVubGF6eV9mcHUodHNrLCByZWdzKTsKLQkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLCBzaXplb2YoKmZwdSkpOwotCX0KKwlpZiAoZnB2YWxpZCkKKwkJZnB2YWxpZCA9ICFmcHJlZ3NfZ2V0KHRzaywgTlVMTCwgMCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCksCisJCQkJICAgICAgZnB1LCBOVUxMKTsKICNlbmRpZgogCiAJcmV0dXJuIGZwdmFsaWQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYjlkYmQyZC4uYjdhYTA5MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTM5NSw2ICszOTYsNyBAQAogaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwlpbnQgcGlkOwogCiAJbWVtc2V0KCZyZWdzLCAwLCBzaXplb2YocmVncykpOwogCXJlZ3MucmVnc1syXSA9ICh1bnNpZ25lZCBsb25nKWFyZzsKQEAgLTQwMyw4ICs0MDUsMTMgQEAKIAlyZWdzLnBjID0gKHVuc2lnbmVkIGxvbmcpa2VybmVsX3RocmVhZF9oZWxwZXI7CiAJcmVncy5zciA9ICgxIDw8IDMwKTsKIAotCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwgMCwKLQkJICAgICAgICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKKwkvKiBPaywgY3JlYXRlIHRoZSBuZXcgcHJvY2Vzcy4uICovCisJcGlkID0gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCisJCSAgICAgICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKKworCXRyYWNlX21hcmsoa2VybmVsX2FyY2hfa3RocmVhZF9jcmVhdGUsICJwaWQgJWQgZm4gJXAiLCBwaWQsIGZuKTsKKworCXJldHVybiBwaWQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCmluZGV4IDAzNWNiMzAuLjI5Y2EwOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCkBAIC0xLDEyICsxLDE0IEBACiAvKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMKKyAqIFN1cGVySCBwcm9jZXNzIHRyYWNpbmcKICAqCi0gKiBPcmlnaW5hbCB4ODYgaW1wbGVtZW50YXRpb246Ci0gKglCeSBSb3NzIEJpcm8gMS8yMy85MgotICoJZWRpdGVkIGJ5IExpbnVzIFRvcnZhbGRzCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIEtheiBLb2ppbWEgJiBOaWliZSBZdXRha2EKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKICAqCi0gKiBTdXBlckggdmVyc2lvbjogICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIEtheiBLb2ppbWEgJiBOaWliZSBZdXRha2EKLSAqIEF1ZGl0IHN1cHBvcnQ6IFl1aWNoaSBOYWthbXVyYSA8eW5ha2FtQGhpdGFjaGlzb2Z0LmpwPgorICogQXVkaXQgc3VwcG9ydCBieSBZdWljaGkgTmFrYW11cmEgPHluYWthbUBoaXRhY2hpc29mdC5qcD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yMiwxNiArMjQsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLQotLyoKLSAqIGRvZXMgbm90IHlldCBjYXRjaCBzaWduYWxzIHNlbnQgd2hlbiB0aGUgY2hpbGQgZGllcy4KLSAqIGluIGV4aXQuYyBvciBpbiBzaWduYWwuYy4KLSAqLworI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KIAogLyoKICAqIFRoaXMgcm91dGluZSB3aWxsIGdldCBhIHdvcmQgb2ZmIG9mIHRoZSBwcm9jZXNzIGtlcm5lbCBzdGFjay4KQEAgLTYxLDE2ICs2MiwxMiBAQAogCiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOwotCWxvbmcgcGM7Ci0KLQlwYyA9IGdldF9zdGFja19sb25nKGNoaWxkLCAobG9uZykmcmVncy0+cGMpOwotCiAJLyogTmV4dCBzY2hlZHVsaW5nIHdpbGwgc2V0IHVwIFVCQyAqLwogCWlmIChjaGlsZC0+dGhyZWFkLnViY19wYyA9PSAwKQogCQl1YmNfdXNlcmNudCArPSAxOwogCi0JY2hpbGQtPnRocmVhZC51YmNfcGMgPSBwYzsKKwljaGlsZC0+dGhyZWFkLnViY19wYyA9IGdldF9zdGFja19sb25nKGNoaWxkLAorCQkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOwogCiAJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NJTkdMRVNURVApOwogfQpAQCAtMTAyLDkgKzk5LDIxMyBAQAogCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7CiB9CiAKK3N0YXRpYyBpbnQgZ2VucmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHRhcmdldCk7CisJaW50IHJldDsKKworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICByZWdzLT5yZWdzLAorCQkJCSAgMCwgMTYgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmICghcmV0KQorCQkvKiBQQywgUFIsIFNSLCBHQlIsIE1BQ0gsIE1BQ0wsIFRSQSAqLworCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICZyZWdzLT5wYywKKwkJCQkJICBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCWlmICghcmV0KQorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0X3plcm8oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpLCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdlbnJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCWludCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJIHJlZ3MtPnJlZ3MsCisJCQkJIDAsIDE2ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAoIXJldCAmJiBjb3VudCA+IDApCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICZyZWdzLT5wYywKKwkJCQkJIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYyksCisJCQkJCSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluX2lnbm9yZSgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcHRfcmVncyksIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCitpbnQgZnByZWdzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkgICAgICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZnB1KHRhcmdldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwkJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCisJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICAgJnRhcmdldC0+dGhyZWFkLmZwdS5zb2Z0LCAwLCAtMSk7Cit9CisKK3N0YXRpYyBpbnQgZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZnB1KHRhcmdldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXJnZXQpOworCisJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQorCQlyZXR1cm4gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCisJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkgICZ0YXJnZXQtPnRocmVhZC5mcHUuc29mdCwgMCwgLTEpOworfQorCitzdGF0aWMgaW50IGZwcmVnc19hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQpCit7CisJcmV0dXJuIHRza191c2VkX21hdGgodGFyZ2V0KSA/IHJlZ3NldC0+biA6IDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TSF9EU1AKK3N0YXRpYyBpbnQgZHNwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWNvbnN0IHN0cnVjdCBwdF9kc3ByZWdzICpyZWdzID0gdGFza19wdF9kc3ByZWdzKHRhcmdldCk7CisJaW50IHJldDsKKworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsIHJlZ3MsCisJCQkJICAwLCBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSwgLTEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkc3ByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJc3RydWN0IHB0X2RzcHJlZ3MgKnJlZ3MgPSB0YXNrX3B0X2RzcHJlZ3ModGFyZ2V0KTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCByZWdzLAorCQkJCSAwLCBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluX2lnbm9yZSgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncyksIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHNwcmVnc19hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0KQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHRhcmdldCk7CisKKwlyZXR1cm4gcmVncy0+c3IgJiBTUl9EU1AgPyByZWdzZXQtPm4gOiAwOworfQorI2VuZGlmCisKKy8qCisgKiBUaGVzZSBhcmUgb3VyIG5hdGl2ZSByZWdzZXQgZmxhdm91cnMuCisgKi8KK2VudW0gc2hfcmVnc2V0IHsKKwlSRUdTRVRfR0VORVJBTCwKKyNpZmRlZiBDT05GSUdfU0hfRlBVCisJUkVHU0VUX0ZQVSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TSF9EU1AKKwlSRUdTRVRfRFNQLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHNoX3JlZ3NldHNbXSA9IHsKKwkvKgorCSAqIEZvcm1hdCBpczoKKwkgKglSMCAtLT4gUjE1CisJICoJUEMsIFBSLCBTUiwgR0JSLCBNQUNILCBNQUNMLCBUUkEKKwkgKi8KKwlbUkVHU0VUX0dFTkVSQUxdID0geworCQkuY29yZV9ub3RlX3R5cGUJPSBOVF9QUlNUQVRVUywKKwkJLm4JCT0gRUxGX05HUkVHLAorCQkuc2l6ZQkJPSBzaXplb2YobG9uZyksCisJCS5hbGlnbgkJPSBzaXplb2YobG9uZyksCisJCS5nZXQJCT0gZ2VucmVnc19nZXQsCisJCS5zZXQJCT0gZ2VucmVnc19zZXQsCisJfSwKKworI2lmZGVmIENPTkZJR19TSF9GUFUKKwlbUkVHU0VUX0ZQVV0gPSB7CisJCS5jb3JlX25vdGVfdHlwZQk9IE5UX1BSRlBSRUcsCisJCS5uCQk9IHNpemVvZihzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0KSAvIHNpemVvZihsb25nKSwKKwkJLnNpemUJCT0gc2l6ZW9mKGxvbmcpLAorCQkuYWxpZ24JCT0gc2l6ZW9mKGxvbmcpLAorCQkuZ2V0CQk9IGZwcmVnc19nZXQsCisJCS5zZXQJCT0gZnByZWdzX3NldCwKKwkJLmFjdGl2ZQkJPSBmcHJlZ3NfYWN0aXZlLAorCX0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TSF9EU1AKKwlbUkVHU0VUX0RTUF0gPSB7CisJCS5uCQk9IHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLyBzaXplb2YobG9uZyksCisJCS5zaXplCQk9IHNpemVvZihsb25nKSwKKwkJLmFsaWduCQk9IHNpemVvZihsb25nKSwKKwkJLmdldAkJPSBkc3ByZWdzX2dldCwKKwkJLnNldAkJPSBkc3ByZWdzX3NldCwKKwkJLmFjdGl2ZQkJPSBkc3ByZWdzX2FjdGl2ZSwKKwl9LAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgdXNlcl9zaF9uYXRpdmVfdmlldyA9IHsKKwkubmFtZQkJPSAic2giLAorCS5lX21hY2hpbmUJPSBFTV9TSCwKKwkucmVnc2V0cwk9IHNoX3JlZ3NldHMsCisJLm4JCT0gQVJSQVlfU0laRShzaF9yZWdzZXRzKSwKK307CisKK2NvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiAmdXNlcl9zaF9uYXRpdmVfdmlldzsKK30KKwogbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQogewogCXN0cnVjdCB1c2VyICogZHVtbXkgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgX191c2VyICpkYXRhcCA9ICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGE7CiAJaW50IHJldDsKIAogCXN3aXRjaCAocmVxdWVzdCkgewpAQCAtMTMzLDcgKzMzNCw3IEBACiAJCQl0bXAgPSAhIXRza191c2VkX21hdGgoY2hpbGQpOwogCQllbHNlCiAJCQl0bXAgPSAwOwotCQlyZXQgPSBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQlyZXQgPSBwdXRfdXNlcih0bXAsIGRhdGFwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNTcsMzQgKzM1OCwzOSBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBQVFJBQ0VfR0VUUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X3RvX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICBSRUdTRVRfR0VORVJBTCwKKwkJCQkJICAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwKKwkJCQkJICAgKHZvaWQgX191c2VyICopZGF0YSk7CisJY2FzZSBQVFJBQ0VfU0VUUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgICAgUkVHU0VUX0dFTkVSQUwsCisJCQkJCSAgICAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwKKwkJCQkJICAgICAoY29uc3Qgdm9pZCBfX3VzZXIgKilkYXRhKTsKKyNpZmRlZiBDT05GSUdfU0hfRlBVCisJY2FzZSBQVFJBQ0VfR0VURlBSRUdTOgorCQlyZXR1cm4gY29weV9yZWdzZXRfdG9fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgIFJFR1NFVF9GUFUsCisJCQkJCSAgIDAsIHNpemVvZihzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0KSwKKwkJCQkJICAgKHZvaWQgX191c2VyICopZGF0YSk7CisJY2FzZSBQVFJBQ0VfU0VURlBSRUdTOgorCQlyZXR1cm4gY29weV9yZWdzZXRfZnJvbV91c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgICBSRUdTRVRfRlBVLAorCQkJCQkgICAgIDAsIHNpemVvZihzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0KSwKKwkJCQkJICAgICAoY29uc3Qgdm9pZCBfX3VzZXIgKilkYXRhKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19TSF9EU1AKLQljYXNlIFBUUkFDRV9HRVREU1BSRUdTOiB7Ci0JCXVuc2lnbmVkIGxvbmcgZHA7Ci0KLQkJcmV0ID0gLUVJTzsKLQkJZHAgPSAoKHVuc2lnbmVkIGxvbmcpIGNoaWxkKSArIFRIUkVBRF9TSVpFIC0KLQkJCSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpOwotCQlpZiAoKigoaW50ICopIChkcCAtIDQpKSA9PSBTUl9GRCkgewotCQkJY29weV90b191c2VyKCh2b2lkICopYWRkciwgKHZvaWQgKikgZHAsCi0JCQkJc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSk7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgUFRSQUNFX1NFVERTUFJFR1M6IHsKLQkJdW5zaWduZWQgbG9uZyBkcDsKLQotCQlyZXQgPSAtRUlPOwotCQlkcCA9ICgodW5zaWduZWQgbG9uZykgY2hpbGQpICsgVEhSRUFEX1NJWkUgLQotCQkJIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncyk7Ci0JCWlmICgqKChpbnQgKikgKGRwIC0gNCkpID09IFNSX0ZEKSB7Ci0JCQljb3B5X2Zyb21fdXNlcigodm9pZCAqKSBkcCwgKHZvaWQgKilhZGRyLAotCQkJCXNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykpOwotCQkJcmV0ID0gMDsKLQkJfQotCQlicmVhazsKLQl9CisJY2FzZSBQVFJBQ0VfR0VURFNQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X3RvX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICBSRUdTRVRfRFNQLAorCQkJCQkgICAwLCBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpLAorCQkJCQkgICAodm9pZCBfX3VzZXIgKilkYXRhKTsKKwljYXNlIFBUUkFDRV9TRVREU1BSRUdTOgorCQlyZXR1cm4gY29weV9yZWdzZXRfZnJvbV91c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgICBSRUdTRVRfRFNQLAorCQkJCQkgICAgIDAsIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncyksCisJCQkJCSAgICAgKGNvbnN0IHZvaWQgX191c2VyICopZGF0YSk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQklORk1UX0VMRl9GRFBJQwogCWNhc2UgUFRSQUNFX0dFVEZEUElDOiB7CkBAIC0yMDIsNyArNDA4LDcgQEAKIAkJfQogCiAJCXJldCA9IDA7Ci0JCWlmIChwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nICopIGRhdGEpKSB7CisJCWlmIChwdXRfdXNlcih0bXAsIGRhdGFwKSkgewogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCmluZGV4IDljNjQyNDguLmUxNWIwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKIC8qIFRoaXMgbWFzayBkZWZpbmVzIHRoZSBiaXRzIG9mIHRoZSBTUiB3aGljaCB0aGUgdXNlciBpcyBub3QgYWxsb3dlZCB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggZGU4MzIwNS4uZTcxNTJjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTE0NCw2ICsxNDcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBmcmVlX21lbTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY3Jhc2hfc2l6ZSwgY3Jhc2hfYmFzZTsKKwl2b2lkICp2cDsKIAlpbnQgcmV0OwogCiAJZnJlZV9tZW0gPSAoKHVuc2lnbmVkIGxvbmcgbG9uZyltYXhfbG93X3BmbiAtIG1pbl9sb3dfcGZuKSA8PCBQQUdFX1NISUZUOwpAQCAtMTUyLDEyICsxNTYsMTQgQEAKIAkJCSZjcmFzaF9zaXplLCAmY3Jhc2hfYmFzZSk7CiAJaWYgKHJldCA9PSAwICYmIGNyYXNoX3NpemUpIHsKIAkJaWYgKGNyYXNoX2Jhc2UgPD0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3Jhc2hrZXJuZWwgcmVzZXJ2YXRpb24gZmFpbGVkIC0gIgotCQkJCQkieW91IGhhdmUgdG8gc3BlY2lmeSBhIGJhc2UgYWRkcmVzc1xuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAocmVzZXJ2ZV9ib290bWVtKGNyYXNoX2Jhc2UsIGNyYXNoX3NpemUsCisJCQl2cCA9IGFsbG9jX2Jvb3RtZW1fbm9wYW5pYyhjcmFzaF9zaXplKTsgCisJCQlpZiAoIXZwKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3Jhc2hrZXJuZWwgYWxsb2NhdGlvbiAiCisJCQkJICAgICAgICJmYWlsZWRcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWNyYXNoX2Jhc2UgPSBfX3BhKHZwKTsKKwkJfSBlbHNlIGlmIChyZXNlcnZlX2Jvb3RtZW0oY3Jhc2hfYmFzZSwgY3Jhc2hfc2l6ZSwKIAkJCQkJQk9PVE1FTV9FWENMVVNJVkUpIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3Jhc2hrZXJuZWwgcmVzZXJ2YXRpb24gZmFpbGVkIC0gIgogCQkJCQkibWVtb3J5IGlzIGluIHVzZVxuIik7CkBAIC0xNzksNiArMTg1LDI0IEBACiB7fQogI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZCit2b2lkIF9fY3B1aW5pdCBjYWxpYnJhdGVfZGVsYXkodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KE5VTEwsICJjcHVfY2xrIik7CisKKwlpZiAoSVNfRVJSKGNsaykpCisJCXBhbmljKCJOZWVkIGEgc2FuZSBDUFUgY2xvY2sgZGVmaW5pdGlvbiEiKTsKKworCWxvb3BzX3Blcl9qaWZmeSA9IChjbGtfZ2V0X3JhdGUoY2xrKSA+PiAxKSAvIEhaOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2FsaWJyYXRpbmcgZGVsYXkgbG9vcCAoc2tpcHBlZCkuLi4gIgorCQkJICIlbHUuJTAybHUgQm9nb01JUFMgUFJFU0VUIChscGo9JWx1KVxuIiwKKwkJCSBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCisJCQkgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpICUgMTAwLAorCQkJIGxvb3BzX3Blcl9qaWZmeSk7Cit9CisjZW5kaWYKKwogdm9pZCBfX2luaXQgX19hZGRfYWN0aXZlX3JhbmdlKHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewpAQCAtMjMyLDE1ICsyNTYsMTcgQEAKIAkgKiBjYXNlIG9mIHVzIGFjY2lkZW50YWxseSBpbml0aWFsaXppbmcgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIHdpdGgKIAkgKiBhbiBpbnZhbGlkIFJBTSBhcmVhLgogCSAqLwotCXJlc2VydmVfYm9vdG1lbShfX01FTU9SWV9TVEFSVCtQQUdFX1NJWkUsCi0JCShQRk5fUEhZUyhmcmVlX3BmbikrYm9vdG1hcF9zaXplK1BBR0VfU0laRS0xKS1fX01FTU9SWV9TVEFSVCwKLQkJQk9PVE1FTV9ERUZBVUxUKTsKKwlyZXNlcnZlX2Jvb3RtZW0oX19NRU1PUllfU1RBUlQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVCwKKwkJCShQRk5fUEhZUyhmcmVlX3BmbikgKyBib290bWFwX3NpemUgKyBQQUdFX1NJWkUgLSAxKSAtCisJCQkoX19NRU1PUllfU1RBUlQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVCksCisJCQlCT09UTUVNX0RFRkFVTFQpOwogCiAJLyoKIAkgKiByZXNlcnZlIHBoeXNpY2FsIHBhZ2UgMCAtIGl0J3MgYSBzcGVjaWFsIEJJT1MgcGFnZSBvbiBtYW55IGJveGVzLAogCSAqIGVuYWJsaW5nIGNsZWFuIHJlYm9vdHMsIFNNUCBvcGVyYXRpb24sIGxhcHRvcCBmdW5jdGlvbnMuCiAJICovCi0JcmVzZXJ2ZV9ib290bWVtKF9fTUVNT1JZX1NUQVJULCBQQUdFX1NJWkUsIEJPT1RNRU1fREVGQVVMVCk7CisJcmVzZXJ2ZV9ib290bWVtKF9fTUVNT1JZX1NUQVJULCBDT05GSUdfWkVST19QQUdFX09GRlNFVCwKKwkJCUJPT1RNRU1fREVGQVVMVCk7CiAKIAlzcGFyc2VfbWVtb3J5X3ByZXNlbnRfd2l0aF9hY3RpdmVfcmVnaW9ucygwKTsKIApAQCAtMjQ4LDE3ICsyNzQsMTggQEAKIAlST09UX0RFViA9IFJvb3RfUkFNMDsKIAogCWlmIChMT0FERVJfVFlQRSAmJiBJTklUUkRfU1RBUlQpIHsKLQkJaWYgKElOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFIDw9IChtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKSkgewotCQkJcmVzZXJ2ZV9ib290bWVtKElOSVRSRF9TVEFSVCArIF9fTUVNT1JZX1NUQVJULAotCQkJCQlJTklUUkRfU0laRSwgQk9PVE1FTV9ERUZBVUxUKTsKLQkJCWluaXRyZF9zdGFydCA9IElOSVRSRF9TVEFSVCArIFBBR0VfT0ZGU0VUICsKLQkJCQkJX19NRU1PUllfU1RBUlQ7CisJCXVuc2lnbmVkIGxvbmcgaW5pdHJkX3N0YXJ0X3BoeXMgPSBJTklUUkRfU1RBUlQgKyBfX01FTU9SWV9TVEFSVDsKKworCQlpZiAoaW5pdHJkX3N0YXJ0X3BoeXMgKyBJTklUUkRfU0laRSA8PSBQRk5fUEhZUyhtYXhfbG93X3BmbikpIHsKKwkJCXJlc2VydmVfYm9vdG1lbShpbml0cmRfc3RhcnRfcGh5cywgSU5JVFJEX1NJWkUsCisJCQkJCUJPT1RNRU1fREVGQVVMVCk7CisJCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGluaXRyZF9zdGFydF9waHlzKTsKIAkJCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBJTklUUkRfU0laRTsKIAkJfSBlbHNlIHsKIAkJCXByaW50aygiaW5pdHJkIGV4dGVuZHMgYmV5b25kIGVuZCBvZiBtZW1vcnkgIgotCQkJICAgICIoMHglMDhseCA+IDB4JTA4bHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAotCQkJCSAgICBJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSwKLQkJCQkgICAgbWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCk7CisJCQkgICAgICAgIigweCUwOGx4ID4gMHglMDhseClcbmRpc2FibGluZyBpbml0cmRcbiIsCisJCQkgICAgICAgaW5pdHJkX3N0YXJ0X3BoeXMgKyBJTklUUkRfU0laRSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZylQRk5fUEhZUyhtYXhfbG93X3BmbikpOwogCQkJaW5pdHJkX3N0YXJ0ID0gMDsKIAkJfQogCX0KQEAgLTUzMCw2ICs1NTcsOCBAQAogc3RhdGljIGludCBfX2luaXQgc2hfZGVidWdmc19pbml0KHZvaWQpCiB7CiAJc2hfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJzaCIsIE5VTEwpOworCWlmICghc2hfZGVidWdmc19yb290KQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoSVNfRVJSKHNoX2RlYnVnZnNfcm9vdCkpCiAJCXJldHVybiBQVFJfRVJSKHNoX2RlYnVnZnNfcm9vdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCmluZGV4IDZlMWIxYzIuLmQzNjZhNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCiBleHRlcm4gaW50IGR1bXBfZnB1KHN0cnVjdCBwdF9yZWdzICosIGVsZl9mcHJlZ3NldF90ICopOwogZXh0ZXJuIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBub19pcnFfdHlwZTsKQEAgLTEyNSw3ICsxMjYsNiBAQAogRVhQT1JUX1NZTUJPTChmbHVzaF9jYWNoZV9hbGwpOwogRVhQT1JUX1NZTUJPTChmbHVzaF9jYWNoZV9yYW5nZSk7CiBFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9wYWdlKTsKLUVYUE9SVF9TWU1CT0woX19mbHVzaF9wdXJnZV9yZWdpb24pOwogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDT05GSUdfQ0FDSEVfT0ZGKSAmJiBkZWZpbmVkKENPTkZJR19NTVUpICYmIFwKQEAgLTEzMyw2ICsxMzMsOSBAQAogRVhQT1JUX1NZTUJPTChjbGVhcl91c2VyX3BhZ2UpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlRSQUNFCitFWFBPUlRfU1lNQk9MKG1jb3VudCk7CisjZW5kaWYKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyk7CiAjaWZkZWYgQ09ORklHX0lQVjYKQEAgLTE0MywzICsxNDYsOSBAQAogRVhQT1JUX1NZTUJPTChfX2NsZWFyX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfZWJzcyk7CiBFWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7CisKKyNpZm5kZWYgQ09ORklHX0NBQ0hFX09GRgorRVhQT1JUX1NZTUJPTChfX2ZsdXNoX3B1cmdlX3JlZ2lvbik7CitFWFBPUlRfU1lNQk9MKF9fZmx1c2hfd2JhY2tfcmVnaW9uKTsKK0VYUE9SVF9TWU1CT0woX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggNTE2ODlkMi4uNjlkMDljMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCkBAIC0yMTUsNiArMjE2LDkgQEAKIAlzaWdzZXRfdCBzZXQ7CiAJaW50IHIwOwogCisgICAgICAgIC8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKKwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlnb3RvIGJhZGZyYW1lOwogCkBAIC0yNDcsOSArMjUxLDExIEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBSRUxPQ19ISURFKCZfX3JlZ3MsIDApOwogCXN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKilyZWdzLT5yZWdzWzE1XTsKIAlzaWdzZXRfdCBzZXQ7Ci0Jc3RhY2tfdCBzdDsKIAlpbnQgcjA7CiAKKwkvKiBBbHdheXMgbWFrZSBhbnkgcGVuZGluZyByZXN0YXJ0ZWQgc3lzdGVtIGNhbGxzIHJldHVybiAtRUlOVFIgKi8KKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2suZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7CisKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJZ290byBiYWRmcmFtZTsKIApAQCAtMjY1LDExICsyNzEsOSBAQAogCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJnIwKSkKIAkJZ290byBiYWRmcmFtZTsKIAotCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzdCwgJmZyYW1lLT51Yy51Y19zdGFjaywgc2l6ZW9mKHN0KSkpCisJaWYgKGRvX3NpZ2FsdHN0YWNrKCZmcmFtZS0+dWMudWNfc3RhY2ssIE5VTEwsCisJCQkgICByZWdzLT5yZWdzWzE1XSkgPT0gLUVGQVVMVCkKIAkJZ290byBiYWRmcmFtZTsKLQkvKiBJdCBpcyBtb3JlIGRpZmZpY3VsdCB0byBhdm9pZCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdGhhbiB0bwotCSAgIGNhbGwgaXQgYW5kIGlnbm9yZSBlcnJvcnMuICAqLwotCWRvX3NpZ2FsdHN0YWNrKChjb25zdCBzdGFja190IF9fdXNlciAqKSZzdCwgTlVMTCwgKHVuc2lnbmVkIGxvbmcpZnJhbWUpOwogCiAJcmV0dXJuIHIwOwogCkBAIC00MjksNyArNDMzLDcgQEAKIAogCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwogCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7CisJZXJyIHw9IF9fcHV0X3VzZXIoTlVMTCwgJmZyYW1lLT51Yy51Y19saW5rKTsKIAllcnIgfD0gX19wdXRfdXNlcigodm9pZCAqKWN1cnJlbnQtPnNhc19zc19zcCwKIAkJCSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoc2FzX3NzX2ZsYWdzKHJlZ3MtPnJlZ3NbMTVdKSwKQEAgLTQ5MiwzNyArNDk2LDQzIEBACiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAoraGFuZGxlX3N5c2NhbGxfcmVzdGFydCh1bnNpZ25lZCBsb25nIHNhdmVfcjAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgICAgc3RydWN0IHNpZ2FjdGlvbiAqc2EpCit7CisJLyogSWYgd2UncmUgbm90IGZyb20gYSBzeXNjYWxsLCBiYWlsIG91dCAqLworCWlmIChyZWdzLT50cmEgPCAwKQorCQlyZXR1cm47CisKKwkvKiBjaGVjayBmb3Igc3lzdGVtIGNhbGwgcmVzdGFydC4uICovCisJc3dpdGNoIChyZWdzLT5yZWdzWzBdKSB7CisJCWNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKKwkJY2FzZSAtRVJFU1RBUlROT0hBTkQ6CisJCW5vX3N5c3RlbV9jYWxsX3Jlc3RhcnQ6CisJCQlyZWdzLT5yZWdzWzBdID0gLUVJTlRSOworCQkJcmVncy0+c3IgfD0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgLUVSRVNUQVJUU1lTOgorCQkJaWYgKCEoc2EtPnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpCisJCQkJZ290byBub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OworCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKKwkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOworCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwkJCWJyZWFrOworCX0KK30KKwogLyoKICAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKICAqLwotCiBzdGF0aWMgaW50CiBoYW5kbGVfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCiAJICAgICAgc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBzYXZlX3IwKQogewogCWludCByZXQ7CiAKLQkvKiBBcmUgd2UgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwotCWlmIChyZWdzLT50cmEgPj0gMCkgewotCQkvKiBJZiBzbywgY2hlY2sgc3lzdGVtIGNhbGwgcmVzdGFydGluZy4uICovCi0JCXN3aXRjaCAocmVncy0+cmVnc1swXSkgewotCQkJY2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgotCQkJY2FzZSAtRVJFU1RBUlROT0hBTkQ6Ci0JCQlub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OgotCQkJCXJlZ3MtPnJlZ3NbMF0gPSAtRUlOVFI7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgLUVSRVNUQVJUU1lTOgotCQkJCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKQotCQkJCQlnb3RvIG5vX3N5c3RlbV9jYWxsX3Jlc3RhcnQ7Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwotCQkJY2FzZSAtRVJFU1RBUlROT0lOVFI6Ci0JCQkJcmVncy0+cmVnc1swXSA9IHNhdmVfcjA7Ci0JCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZSgKLQkJCQkJCWN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQogCiAJLyogU2V0IHVwIHRoZSBzdGFjayBmcmFtZSAqLwogCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQpAQCAtNTgwLDYgKzU5MCw5IEBACiAKIAlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKIAlpZiAoc2lnbnIgPiAwKSB7CisJCWlmIChyZWdzLT5zciAmIDEpCisJCQloYW5kbGVfc3lzY2FsbF9yZXN0YXJ0KHNhdmVfcjAsIHJlZ3MsICZrYS5zYSk7CisKIAkJLyogV2hlZSEgIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCiAJCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsCiAJCQkJICByZWdzLCBzYXZlX3IwKSA9PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IDFkNjJkZmUuLmNlM2U4NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCkBAIC00Myw2ICs0MywxMCBAQAogCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQogCitzdGF0aWMgdm9pZAoraGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc2lnaW5mb190ICppbmZvLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAorCQlzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworCiAvKgogICogTm90ZSB0aGF0ICdpbml0JyBpcyBhIHNwZWNpYWwgcHJvY2VzczogaXQgZG9lc24ndCBnZXQgc2lnbmFscyBpdCBkb2Vzbid0CiAgKiB3YW50IHRvIGhhbmRsZS4gVGh1cyB5b3UgY2Fubm90IGtpbGwgaW5pdCBldmVuIHdpdGggYSBTSUdLSUxMIGV2ZW4gYnkKQEAgLTM3MSw2ICszNzUsOSBAQAogCXNpZ3NldF90IHNldDsKIAlsb25nIGxvbmcgcmV0OwogCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKQEAgLTQwOCw2ICs0MTUsOSBAQAogCXN0YWNrX3QgX191c2VyIHN0OwogCWxvbmcgbG9uZyByZXQ7CiAKKwkvKiBBbHdheXMgbWFrZSBhbnkgcGVuZGluZyByZXN0YXJ0ZWQgc3lzdGVtIGNhbGxzIHJldHVybiAtRUlOVFIgKi8KKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2suZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7CisKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJZ290byBiYWRmcmFtZTsKIApAQCAtNTM1LDcgKzU0NSw3IEBACiAJCSAqIE9uIFNINSBhbGwgZWRpdGVkIHBvaW50ZXJzIGFyZSBzdWJqZWN0IHRvIE5FRkYKIAkJICovCiAJCURFUkVGX1JFR19QUiA9IChERVJFRl9SRUdfUFIgJiBORUZGX1NJR04pID8KLSAgICAgICAgCQkgCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOworCQkJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogRGlmZmVyZW50IGFwcHJvYWNoIG9uIFNINS4KQEAgLTU1MCwxMCArNTYwLDEwIEBACiAJCSAqLwogCQlERVJFRl9SRUdfUFIgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPnJldGNvZGUgfCAweDAxOwogCQlERVJFRl9SRUdfUFIgPSAoREVSRUZfUkVHX1BSICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIAkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKKwkJCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOwogCiAJCWlmIChfX2NvcHlfdG9fdXNlcihmcmFtZS0+cmV0Y29kZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2FfZGVmYXVsdF9yZXN0b3JlciAmICh+MSksIDE2KSAhPSAwKQorCQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpc2FfZGVmYXVsdF9yZXN0b3JlciAmICh+MSkpLCAxNikgIT0gMCkKIAkJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCiAJCS8qIENvaGVyZSB0aGUgdHJhbXBvbGluZSB3aXRoIHRoZSBJLWNhY2hlLiAqLwpAQCAtNTY2LDcgKzU3Niw3IEBACiAJICovCiAJcmVncy0+cmVnc1tSRUdfU1BdID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwogCXJlZ3MtPnJlZ3NbUkVHX1NQXSA9IChyZWdzLT5yZWdzW1JFR19TUF0gJiBORUZGX1NJR04pID8KLSAgICAgICAgCQkgKHJlZ3MtPnJlZ3NbUkVHX1NQXSB8IE5FRkZfTUFTSykgOiByZWdzLT5yZWdzW1JFR19TUF07CisJCSAocmVncy0+cmVnc1tSRUdfU1BdIHwgTkVGRl9NQVNLKSA6IHJlZ3MtPnJlZ3NbUkVHX1NQXTsKIAlyZWdzLT5yZWdzW1JFR19BUkcxXSA9IHNpZ25hbDsgLyogQXJnIGZvciBzaWduYWwgaGFuZGxlciAqLwogCiAgICAgICAgIC8qIEZJWE1FOgpAQCAtNjUyLDcgKzY2Miw3IEBACiAJCSAqIE9uIFNINSBhbGwgZWRpdGVkIHBvaW50ZXJzIGFyZSBzdWJqZWN0IHRvIE5FRkYKIAkJICovCiAJCURFUkVGX1JFR19QUiA9IChERVJFRl9SRUdfUFIgJiBORUZGX1NJR04pID8KLSAgICAgICAgCQkgCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOworCQkJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogRGlmZmVyZW50IGFwcHJvYWNoIG9uIFNINS4KQEAgLTY2OCwxMCArNjc4LDEwIEBACiAKIAkJREVSRUZfUkVHX1BSID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlIHwgMHgwMTsKIAkJREVSRUZfUkVHX1BSID0gKERFUkVGX1JFR19QUiAmIE5FRkZfU0lHTikgPwotICAgICAgICAJCSAJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CisJCQkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKIAogCQlpZiAoX19jb3B5X3RvX3VzZXIoZnJhbWUtPnJldGNvZGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXNhX2RlZmF1bHRfcnRfcmVzdG9yZXIgJiAofjEpLCAxNikgIT0gMCkKKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNhX2RlZmF1bHRfcnRfcmVzdG9yZXIgJiAofjEpKSwgMTYpICE9IDApCiAJCQlnb3RvIGdpdmVfc2lnc2VndjsKIAogCQlmbHVzaF9pY2FjaGVfcmFuZ2UoREVSRUZfUkVHX1BSLTEsIERFUkVGX1JFR19QUi0xKzE1KTsKQEAgLTY4Myw3ICs2OTMsNyBAQAogCSAqLwogCXJlZ3MtPnJlZ3NbUkVHX1NQXSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAlyZWdzLT5yZWdzW1JFR19TUF0gPSAocmVncy0+cmVnc1tSRUdfU1BdICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIChyZWdzLT5yZWdzW1JFR19TUF0gfCBORUZGX01BU0spIDogcmVncy0+cmVnc1tSRUdfU1BdOworCQkgKHJlZ3MtPnJlZ3NbUkVHX1NQXSB8IE5FRkZfTUFTSykgOiByZWdzLT5yZWdzW1JFR19TUF07CiAJcmVncy0+cmVnc1tSRUdfQVJHMV0gPSBzaWduYWw7IC8qIEFyZyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KIAlyZWdzLT5yZWdzW1JFR19BUkcyXSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKHVuc2lnbmVkIGxvbmcpKHNpZ25lZCBsb25nKSZmcmFtZS0+aW5mbzsKIAlyZWdzLT5yZWdzW1JFR19BUkczXSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKHVuc2lnbmVkIGxvbmcpKHNpZ25lZCBsb25nKSZmcmFtZS0+dWMudWNfbWNvbnRleHQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDAwMTc3OGYuLjNjNWFkMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFNNUCBzdXBwb3J0IGZvciB0aGUgU3VwZXJIIHByb2Nlc3NvcnMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4IFBhdWwgTXVuZHQKICAqIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgQWtpbyBJZGVoYXJhCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTg2LDkgKzg3LDEyIEBACiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKiBFbmFibGUgbG9jYWwgdGltZXJzICovCisJbG9jYWxfdGltZXJfc2V0dXAoY3B1KTsKIAljYWxpYnJhdGVfZGVsYXkoKTsKIAotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKIAogCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7CkBAIC0xODYsNiArMTkwLDQyIEBACiAJcGxhdF9zZW5kX2lwaShjcHUsIFNNUF9NU0dfRlVOQ1RJT05fU0lOR0xFKTsKIH0KIAordm9pZCBzbXBfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spCisJCXBsYXRfc2VuZF9pcGkoY3B1LCBTTVBfTVNHX1RJTUVSKTsKK30KKworc3RhdGljIHZvaWQgaXBpX3RpbWVyKHZvaWQpCit7CisJaXJxX2VudGVyKCk7CisJbG9jYWxfdGltZXJfaW50ZXJydXB0KCk7CisJaXJxX2V4aXQoKTsKK30KKwordm9pZCBzbXBfbWVzc2FnZV9yZWN2KHVuc2lnbmVkIGludCBtc2cpCit7CisJc3dpdGNoIChtc2cpIHsKKwljYXNlIFNNUF9NU0dfRlVOQ1RJT046CisJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJCWJyZWFrOworCWNhc2UgU01QX01TR19SRVNDSEVEVUxFOgorCQlicmVhazsKKwljYXNlIFNNUF9NU0dfRlVOQ1RJT05fU0lOR0xFOgorCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoKTsKKwkJYnJlYWs7CisJY2FzZSBTTVBfTVNHX1RJTUVSOgorCQlpcGlfdGltZXIoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU01QICVkOiAlcygpOiB1bmtub3duIElQSSAlZFxuIiwKKwkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIG1zZyk7CisJCWJyZWFrOworCX0KK30KKwogLyogTm90IHJlYWxseSBTTVAgc3R1ZmYgLi4uICovCiBpbnQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDU0ZDFmNjEuLjFhMmE1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogU3RhY2sgdHJhY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0zNiwzICszNiwyNCBAQAogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNhdmVfc3RhY2tfdHJhY2UpOworCit2b2lkIHNhdmVfc3RhY2tfdHJhY2VfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQoreworCXVuc2lnbmVkIGxvbmcgKnNwID0gKHVuc2lnbmVkIGxvbmcgKil0c2stPnRocmVhZC5zcDsKKworCXdoaWxlICgha3N0YWNrX2VuZChzcCkpIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gKnNwKys7CisKKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeworCQkJaWYgKGluX3NjaGVkX2Z1bmN0aW9ucyhhZGRyKSkKKwkJCQlicmVhazsKKwkJCWlmICh0cmFjZS0+c2tpcCA+IDApCisJCQkJdHJhY2UtPnNraXAtLTsKKwkJCWVsc2UKKwkJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7CisJCQlpZiAodHJhY2UtPm5yX2VudHJpZXMgPj0gdHJhY2UtPm1heF9lbnRyaWVzKQorCQkJCWJyZWFrOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc2F2ZV9zdGFja190cmFjZV90c2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMgYi9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYwppbmRleCA5MDYxYjg2Li4zOGYwOThjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYworKysgYi9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIApAQCAtMTcwLDYgKzE3MSw4IEBACiAJdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KIAljYWxsICY9IDB4ZmZmZjsKIAorCXRyYWNlX21hcmsoa2VybmVsX2FyY2hfaXBjX2NhbGwsICJjYWxsICV1IGZpcnN0ICVkIiwgY2FsbCwgZmlyc3QpOworCiAJaWYgKGNhbGwgPD0gU0VNVElNRURPUCkKIAkJc3dpdGNoIChjYWxsKSB7CiAJCWNhc2UgU0VNT1A6CkBAIC0xODYsNyArMTg5LDcgQEAKIAkJCXVuaW9uIHNlbXVuIGZvdXJ0aDsKIAkJCWlmICghcHRyKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgKiBfX3VzZXIgKikgcHRyKSkKKwkJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKSBwdHIpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJcmV0dXJuIHN5c19zZW1jdGwgKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOwogCQkJfQpAQCAtMjYxLDEzICsyNjQsMTMgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzX3VuYW1lKHN0cnVjdCBvbGRfdXRzbmFtZSAqIG5hbWUpCithc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqbmFtZSkKIHsKIAlpbnQgZXJyOwogCWlmICghbmFtZSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQllcnIgPSBjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YgKCpuYW1lKSk7CisJZXJyID0gY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKSwgc2l6ZW9mKCpuYW1lKSk7CiAJdXBfcmVhZCgmdXRzX3NlbSk7CiAJcmV0dXJuIGVycj8tRUZBVUxUOjA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNfc2gzMi5jIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoMzIuYwppbmRleCBmMGFhNWMzLi5kYmJhMWUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNfc2gzMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c19zaDMyLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogCiAvKgogICogc3lzX3BpcGUoKSBpcyB0aGUgbm9ybWFsIEMgY2FsbGluZyBzdGFuZGFyZCBmb3IgY3JlYXRpbmcKQEAgLTM3LDEzICszOCwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wcmVhZF93cmFwcGVyKHVuc2lnbmVkIGludCBmZCwgY2hhciAqIGJ1ZiwKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHJlYWRfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9uZyBkdW1teSwgbG9mZl90IHBvcykKIHsKIAlyZXR1cm4gc3lzX3ByZWFkNjQoZmQsIGJ1ZiwgY291bnQsIHBvcyk7CiB9CiAKLWFzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHdyaXRlX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjb25zdCBjaGFyICogYnVmLAorYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wd3JpdGVfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvbmcgZHVtbXksIGxvZmZfdCBwb3MpCiB7CiAJcmV0dXJuIHN5c19wd3JpdGU2NChmZCwgYnVmLCBjb3VudCwgcG9zKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYwppbmRleCAwNzU4YjVlLi4yM2NhNzExIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqICBhcmNoL3NoL2tlcm5lbC90aW1lLmMKKyAqICBhcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5ICBUZXRzdXlhIE9rYWRhICYgTmlpYmUgWXV0YWthCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA3ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwOCAgUGF1bCBNdW5kdAogICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24gIDxtcmJyb3duQGxpbnV4LXNoLm9yZz4KICAqCiAgKiAgU29tZSBjb2RlIHRha2VuIGZyb20gaTM4NiB2ZXJzaW9uLgpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4JLyogZm9yIHJ0Y19sb2NrICovCisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgpAQCAtMjUzLDYgKzI1NSwxMCBAQAogCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKIAkJCQkteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CiAKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKKwlsb2NhbF90aW1lcl9zZXR1cChzbXBfcHJvY2Vzc29yX2lkKCkpOworI2VuZGlmCisKIAkvKgogCSAqIEZpbmQgdGhlIHRpbWVyIHRvIHVzZSBhcyB0aGUgc3lzdGVtIHRpbWVyLCBpdCB3aWxsIGJlCiAJICogaW5pdGlhbGl6ZWQgZm9yIHVzLgpAQCAtMjYwLDYgKzI2Niw3IEBACiAJc3lzX3RpbWVyID0gZ2V0X3N5c190aW1lcigpOwogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nICVzIGZvciBzeXN0ZW0gdGltZXJcbiIsIHN5c190aW1lci0+bmFtZSk7CiAKKwogCWlmIChzeXNfdGltZXItPm9wcy0+cmVhZCkKIAkJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHN5c190aW1lci0+b3BzLT5yZWFkOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggNzkxZWRhYi4uYmJiMmFmMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVfNjQuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogCiAjZGVmaW5lIFRNVV9UT0NSX0lOSVQJMHgwMAogI2RlZmluZSBUTVUwX1RDUl9JTklUCTB4MDAyMApAQCAtNTEsMTQgKzUyLDYgQEAKICNkZWZpbmUgUlRDX1JDUjFfQ0lFCTB4MTAJLyogQ2FycnkgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBSVENfUkNSMQkocnRjX2Jhc2UgKyAweDM4KQogCi0vKiBDbG9jaywgUG93ZXIgYW5kIFJlc2V0IENvbnRyb2xsZXIgKi8KLSNkZWZpbmUJQ1BSQ19CTE9DS19PRkYJMHgwMTAxMDAwMAotI2RlZmluZSBDUFJDX0JBU0UJUEhZU19QRVJJUEhFUkFMX0JMT0NLICsgQ1BSQ19CTE9DS19PRkYKLQotI2RlZmluZSBGUlFDUgkJKGNwcmNfYmFzZSsweDApCi0jZGVmaW5lIFdUQ1NSCQkoY3ByY19iYXNlKzB4MDAxOCkKLSNkZWZpbmUgU1RCQ1IJCShjcHJjX2Jhc2UrMHgwMDMwKQotCiAvKiBUaW1lIE1hbmFnZW1lbnQgVW5pdCAqLwogI2RlZmluZQlUTVVfQkxPQ0tfT0ZGCTB4MDEwMjAwMDAKICNkZWZpbmUgVE1VX0JBU0UJUEhZU19QRVJJUEhFUkFMX0JMT0NLICsgVE1VX0JMT0NLX09GRgpAQCAtMjkzLDEwMyArMjg2LDE3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0KLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgaW50IGdldF9jcHVfaHoodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBfX2R1bW15OwotCXVuc2lnbmVkIGxvbmcgY3RjX3ZhbF9pbml0LCBjdGNfdmFsOwotCi0JLyoKLQkqKiBSZWdhcmRsZXNzIHRoZSB0b29sY2hhaW4sIGZvcmNlIHRoZSBjb21waWxlciB0byB1c2UgdGhlCi0JKiogYXJiaXRyYXJ5IHJlZ2lzdGVyIHIzIGFzIGEgY2xvY2sgdGljayBjb3VudGVyLgotCSoqIE5PVEU6IHIzIG11c3QgYmUgaW4gYWNjb3JkYW5jZSB3aXRoIHNoNjRfcnRjX2ludGVycnVwdCgpCi0JKi8KLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGxvbmcgIF9fcnRjX2lycV9mbGFnIF9fYXNtX18gKCJyMyIpOwotCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCWRvIHt9IHdoaWxlIChjdHJsX2luYihydGNfYmFzZSkgIT0gMCk7Ci0JY3RybF9vdXRiKFJUQ19SQ1IxX0NJRSwgUlRDX1JDUjEpOyAvKiBFbmFibGUgY2FycnkgaW50ZXJydXB0ICovCi0KLQkvKgotCSAqIHIzIGlzIGFyYml0cmFyeS4gQ0RDIGRvZXMgbm90IHN1cHBvcnQgIj16Ii4KLQkgKi8KLQljdGNfdmFsX2luaXQgPSAweGZmZmZmZmZmOwotCWN0Y192YWwgPSBjdGNfdmFsX2luaXQ7Ci0KLQlhc20gdm9sYXRpbGUoImdldHRyCXRyMCwgJTFcblx0IgotCQkgICAgICJwdXRjb24JJTAsICIgX19DVEMgIlxuXHQiCi0JCSAgICAgImFuZAklMiwgcjYzLCAlMlxuXHQiCi0JCSAgICAgInB0YQkkKzQsIHRyMFxuXHQiCi0JCSAgICAgImJlcS9sCSUyLCByNjMsIHRyMFxuXHQiCi0JCSAgICAgInB0YWJzCSUxLCB0cjBcblx0IgotCQkgICAgICJnZXRjb24JIiBfX0NUQyAiLCAlMFxuXHQiCi0JCTogIj1yIihjdGNfdmFsKSwgIj1yIiAoX19kdW1teSksICI9ciIgKF9fcnRjX2lycV9mbGFnKQotCQk6ICIwIiAoMCkpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JLyoKLQkgKiBTSC0zOgotCSAqIENQVSBjbG9jayA9IDQgc3RhZ2VzICogbG9vcAotCSAqIHRzdCAgICBybSxybSAgICAgIGlmIGlkIGV4Ci0JICogYnQvcyAgIDFiICAgICAgICAgICAgaWYgaWQgZXgKLQkgKiBhZGQgICAgIzEscmQgICAgICAgICAgICBpZiBpZCBleAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYpIHBpcGUgbGluZSBzdG9sZQotCSAqIHRzdCAgICBybSxybSAgICAgICAgICAgICAgICAgIGlmIGlkIGV4Ci0gICAgICAgICAqIC4uLi4KLQkgKgotCSAqCi0JICogU0gtNDoKLQkgKiBDUFUgY2xvY2sgPSA2IHN0YWdlcyAqIGxvb3AKLQkgKiBJIGRvbid0IGtub3cgd2h5LgotICAgICAgICAgKiAuLi4uCi0JICoKLQkgKiBTSC01OgotCSAqIFVzZSBDVEMgcmVnaXN0ZXIgdG8gY291bnQuICBUaGlzIGFwcHJvYWNoIHJldHVybnMgdGhlIHJpZ2h0IHZhbHVlCi0JICogZXZlbiBpZiB0aGUgSS1jYWNoZSBpcyBkaXNhYmxlZCAoZS5nLiB3aGlsc3QgZGVidWdnaW5nLikKLQkgKgotCSAqLwotCi0JY291bnQgPSBjdGNfdmFsX2luaXQgLSBjdGNfdmFsOyAvKiBDVEMgY291bnRzIGRvd24gKi8KLQotCS8qCi0JICogVGhpcyByZWFsbHkgaXMgY291bnQgYnkgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMKLSAgICAgICAgICogYnkgdGhlIHJhdGlvIGJldHdlZW4gYSBjb21wbGV0ZSBSNjRDTlQKLSAgICAgICAgICogd3JhcC1hcm91bmQgKDEyOCkgYW5kIENVSSBpbnRlcnJ1cHQgYmVpbmcgcmFpc2VkICg2NCkuCi0JICovCi0JcmV0dXJuIGNvdW50KjI7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzaDY0X3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7Ci0KLQljdHJsX291dGIoMCwgUlRDX1JDUjEpOwkvKiBEaXNhYmxlIENhcnJ5IEludGVycnVwdHMgKi8KLQlyZWdzLT5yZWdzWzNdID0gMTsJLyogVXNpbmcgcjMgKi8KLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKIAkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAidGltZXIiLAogfTsKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTEgID0gewotCS5oYW5kbGVyID0gc2g2NF9ydGNfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAotCS5uYW1lID0gInJ0YyIsCi19OwogCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1X2Nsb2NrLCBtYXN0ZXJfY2xvY2ssIGJ1c19jbG9jaywgbW9kdWxlX2Nsb2NrOwogCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7Ci0JdW5zaWduZWQgbG9uZyBmcnFjciwgaWZjLCBwZmM7Ci0Jc3RhdGljIGludCBpZmNfdGFibGVbXSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNiwgMjQgfTsKLSNkZWZpbmUgYmZjX3RhYmxlIGlmY190YWJsZQkvKiBTYW1lICovCi0jZGVmaW5lIHBmY190YWJsZSBpZmNfdGFibGUJLyogU2FtZSAqLworCXN0cnVjdCBjbGsgKmNsazsKIAogCXRtdV9iYXNlID0gb25jaGlwX3JlbWFwKFRNVV9CQVNFLCAxMDI0LCAiVE1VIik7CiAJaWYgKCF0bXVfYmFzZSkgewpAQCAtNDAxLDUwICszMDgsMTkgQEAKIAkJcGFuaWMoIlVuYWJsZSB0byByZW1hcCBSVENcbiIpOwogCX0KIAotCWNwcmNfYmFzZSA9IG9uY2hpcF9yZW1hcChDUFJDX0JBU0UsIDEwMjQsICJDUFJDIik7Ci0JaWYgKCFjcHJjX2Jhc2UpIHsKLQkJcGFuaWMoIlVuYWJsZSB0byByZW1hcCBDUFJDXG4iKTsKLQl9CisJY2xrID0gY2xrX2dldChOVUxMLCAiY3B1X2NsayIpOworCXNjYWxlZF9yZWNpcF9jdGNfdGlja3NfcGVyX2ppZmZ5ID0gKCgxVUxMIDw8IENUQ19KSUZGWV9TQ0FMRV9TSElGVCkgLworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoY2xrX2dldF9yYXRlKGNsaykgLyBIWikpOwogCiAJcnRjX3NoX2dldF90aW1lKCZ4dGltZSk7CiAKIAlzZXR1cF9pcnEoVElNRVJfSVJRLCAmaXJxMCk7Ci0Jc2V0dXBfaXJxKFJUQ19JUlEsICZpcnExKTsKIAotCS8qIENoZWNrIGhvdyBmYXN0IGl0IGlzLi4gKi8KLQljcHVfY2xvY2sgPSBnZXRfY3B1X2h6KCk7Ci0KLQkvKiBOb3RlIGNhcmVmdWwgb3JkZXIgb2Ygb3BlcmF0aW9ucyB0byBtYWludGFpbiByZWFzb25hYmxlIHByZWNpc2lvbiBhbmQgYXZvaWQgb3ZlcmZsb3cuICovCi0Jc2NhbGVkX3JlY2lwX2N0Y190aWNrc19wZXJfamlmZnkgPSAoKDFVTEwgPDwgQ1RDX0pJRkZZX1NDQUxFX1NISUZUKSAvICh1bnNpZ25lZCBsb25nIGxvbmcpKGNwdV9jbG9jayAvIEhaKSk7Ci0KLQlmcmVlX2lycShSVENfSVJRLCBOVUxMKTsKLQotCXByaW50aygiQ1BVIGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCSAgICAgICAoY3B1X2Nsb2NrIC8gMTAwMDAwMCksIChjcHVfY2xvY2sgJSAxMDAwMDAwKS8xMDAwMCk7Ci0JewotCQl1bnNpZ25lZCBzaG9ydCBiZmM7Ci0JCWZycWNyID0gY3RybF9pbmwoRlJRQ1IpOwotCQlpZmMgID0gaWZjX3RhYmxlWyhmcnFjcj4+IDYpICYgMHgwMDA3XTsKLQkJYmZjICA9IGJmY190YWJsZVsoZnJxY3I+PiAzKSAmIDB4MDAwN107Ci0JCXBmYyAgPSBwZmNfdGFibGVbKGZycWNyPj4gMTIpICYgMHgwMDA3XTsKLQkJbWFzdGVyX2Nsb2NrID0gY3B1X2Nsb2NrICogaWZjOwotCQlidXNfY2xvY2sgPSBtYXN0ZXJfY2xvY2svYmZjOwotCX0KLQotCXByaW50aygiQnVzIGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCSAgICAgICAoYnVzX2Nsb2NrLzEwMDAwMDApLCAoYnVzX2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotCW1vZHVsZV9jbG9jayA9IG1hc3Rlcl9jbG9jay9wZmM7Ci0JcHJpbnRrKCJNb2R1bGUgY2xvY2s6ICVkLiUwMmRNSHpcbiIsCi0JICAgICAgIChtb2R1bGVfY2xvY2svMTAwMDAwMCksIChtb2R1bGVfY2xvY2sgJSAxMDAwMDAwKS8xMDAwMCk7Ci0JaW50ZXJ2YWwgPSAobW9kdWxlX2Nsb2NrLyhIWio0KSk7CisJY2xrID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOworCWludGVydmFsID0gKGNsa19nZXRfcmF0ZShjbGspLyhIWio0KSk7CiAKIAlwcmludGsoIkludGVydmFsID0gJWxkXG4iLCBpbnRlcnZhbCk7CiAKLQljdXJyZW50X2NwdV9kYXRhLmNwdV9jbG9jayAgICA9IGNwdV9jbG9jazsKLQljdXJyZW50X2NwdV9kYXRhLm1hc3Rlcl9jbG9jayA9IG1hc3Rlcl9jbG9jazsKLQljdXJyZW50X2NwdV9kYXRhLmJ1c19jbG9jayAgICA9IGJ1c19jbG9jazsKLQljdXJyZW50X2NwdV9kYXRhLm1vZHVsZV9jbG9jayA9IG1vZHVsZV9jbG9jazsKLQogCS8qIFN0YXJ0IFRNVTAgKi8KIAljdHJsX291dGIoVE1VX1RTVFJfT0ZGLCBUTVVfVFNUUik7CiAJY3RybF9vdXRiKFRNVV9UT0NSX0lOSVQsIFRNVV9UT0NSKTsKQEAgLTQ1NCwzNiArMzMwLDYgQEAKIAljdHJsX291dGIoVE1VX1RTVFJfSU5JVCwgVE1VX1RTVFIpOwogfQogCi12b2lkIGVudGVyX2RlZXBfc3RhbmRieSh2b2lkKQotewotCS8qIERpc2FibGUgd2F0Y2hkb2cgdGltZXIgKi8KLQljdHJsX291dGwoMHhhNTAwMDAwMCwgV1RDU1IpOwotCS8qIENvbmZpZ3VyZSBkZWVwIHN0YW5kYnkgb24gc2xlZXAgKi8KLQljdHJsX291dGwoMHgwMywgU1RCQ1IpOwotCi0jaWZkZWYgQ09ORklHX1NIX0FMUEhBTlVNRVJJQwotCXsKLQkJZXh0ZXJuIHZvaWQgbWFjaF9hbHBoYW51bShpbnQgcG9zaXRpb24sIHVuc2lnbmVkIGNoYXIgdmFsdWUpOwotCQlleHRlcm4gdm9pZCBtYWNoX2FscGhhbnVtX2JyaWdodG5lc3MoaW50IHNldHRpbmcpOwotCQljaGFyIGhhbHRlZFtdID0gIkhhbHRlZC4gIjsKLQkJaW50IGk7Ci0JCW1hY2hfYWxwaGFudW1fYnJpZ2h0bmVzcyg2KTsgLyogZGltbWVzdCBzZXR0aW5nIGFib3ZlIG9mZiAqLwotCQlmb3IgKGk9MDsgaTw4OyBpKyspIHsKLQkJCW1hY2hfYWxwaGFudW0oaSwgaGFsdGVkW2ldKTsKLQkJfQotCQlhc20gX192b2xhdGlsZV9fICgic3luY28iKTsKLQl9Ci0jZW5kaWYKLQotCWFzbSBfX3ZvbGF0aWxlX18gKCJzbGVlcCIpOwotCWFzbSBfX3ZvbGF0aWxlX18gKCJzeW5jaSIpOwotCWFzbSBfX3ZvbGF0aWxlX18gKCJub3AiKTsKLQlhc20gX192b2xhdGlsZV9fICgibm9wIik7Ci0JYXNtIF9fdm9sYXRpbGVfXyAoIm5vcCIpOwotCWFzbSBfX3ZvbGF0aWxlX18gKCJub3AiKTsKLQlwYW5pYygiVW5leHBlY3RlZCB3YWtldXAhXG4iKTsKLX0KLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkvKiBSVEMgYmFzZSwgZmlsbGVkIGluIGJ5IHJ0Y19pbml0ICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvTWFrZWZpbGUKaW5kZXggYmNmMjQ0Zi4uMGI3Zjg1NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy9NYWtlZmlsZQpAQCAtOCwzICs4LDQgQEAKIG9iai0kKENPTkZJR19TSF9NVFUyKQkJKz0gdGltZXItbXR1Mi5vCiBvYmotJChDT05GSUdfU0hfQ01UKQkJKz0gdGltZXItY210Lm8KIAorb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUKQkrPSB0aW1lci1icm9hZGNhc3QubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWJyb2FkY2FzdC5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWJyb2FkY2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzE3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItYnJvYWRjYXN0LmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIER1bW15IGxvY2FsIHRpbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBQYXVsIE11bmR0CisgKgorICogY2xvbmVkIGZyb206CisgKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvbG9jYWx0aW1lci5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTHRkLgorICogIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxvY2FsX2Nsb2NrZXZlbnQpOworCisvKgorICogVXNlZCBvbiBTTVAgZm9yIGVpdGhlciB0aGUgbG9jYWwgdGltZXIgb3IgU01QX01TR19USU1FUgorICovCit2b2lkIGxvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsayA9ICZfX2dldF9jcHVfdmFyKGxvY2FsX2Nsb2NrZXZlbnQpOworCisJY2xrLT5ldmVudF9oYW5kbGVyKGNsayk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3RpbWVyX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCSBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGspCit7Cit9CisKK3ZvaWQgX19jcHVpbml0IGxvY2FsX3RpbWVyX3NldHVwKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrID0gJnBlcl9jcHUobG9jYWxfY2xvY2tldmVudCwgY3B1KTsKKworCWNsay0+bmFtZQkJPSAiZHVtbXlfdGltZXIiOworCWNsay0+ZmVhdHVyZXMJCT0gQ0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CisJY2xrLT5yYXRpbmcJCT0gMjAwOworCWNsay0+bXVsdAkJPSAxOworCWNsay0+c2V0X21vZGUJCT0gZHVtbXlfdGltZXJfc2V0X21vZGU7CisJY2xrLT5icm9hZGNhc3QJCT0gc21wX3RpbWVyX2Jyb2FkY2FzdDsKKwljbGstPmNwdW1hc2sJCT0gY3B1bWFza19vZl9jcHUoY3B1KTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjbGspOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCmluZGV4IGQyMGM4YzMuLmMxMjcyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgc3lzX3RpbWVyX29wcyBjbXRfdGltZXJfb3BzID0geworc3RhdGljIHN0cnVjdCBzeXNfdGltZXJfb3BzIGNtdF90aW1lcl9vcHMgPSB7CiAJLmluaXQJCT0gY210X3RpbWVyX2luaXQsCiAJLnN0YXJ0CQk9IGNtdF90aW1lcl9zdGFydCwKIAkuc3RvcAkJPSBjbXRfdGltZXJfc3RvcCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwppbmRleCAxY2E5YWQ0Li5hYWFmOTBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCkBAIC0yOCw0MyArMjgsOTAgQEAKICNkZWZpbmUgVE1VX1RPQ1JfSU5JVAkweDAwCiAjZGVmaW5lIFRNVV9UQ1JfSU5JVAkweDAwMjAKIAorI2RlZmluZSBUTVUwCQkoMCkKKyNkZWZpbmUgVE1VMQkJKDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdG11X3N0YXJ0KGludCB0bXVfbnVtKQoreworCWN0cmxfb3V0YihjdHJsX2luYihUTVVfMDEyX1RTVFIpIHwgKDB4MTw8dG11X251bSksIFRNVV8wMTJfVFNUUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdG11X3NldF9pcnEoaW50IHRtdV9udW0sIGludCBlbmFibGVkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdG11X3RjciA9IFRNVTBfVENSICsgKDB4Yyp0bXVfbnVtKTsKKwljdHJsX291dHcoIChlbmFibGVkID8gY3RybF9pbncodG11X3RjcikgfCAoMTw8NSkgOiBjdHJsX2ludyh0bXVfdGNyKSAmIH4oMTw8NSkpLCB0bXVfdGNyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF90bXVfc3RvcChpbnQgdG11X251bSkKK3sKKwljdHJsX291dGIoY3RybF9pbmIoVE1VXzAxMl9UU1RSKSAmIH4oMHgxPDx0bXVfbnVtKSwgVE1VXzAxMl9UU1RSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF90bXVfY2xlYXJfc3RhdHVzKGludCB0bXVfbnVtKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdG11X3RjciA9IFRNVTBfVENSICsgKDB4Yyp0bXVfbnVtKTsKKwkvKiBDbGVhciBVTkYgYml0ICovCisJY3RybF9vdXR3KGN0cmxfaW53KHRtdV90Y3IpICYgfjB4MTAwLCB0bXVfdGNyKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF90bXVfcmVhZChpbnQgdG11X251bSkKK3sKKyAgICAgICAgcmV0dXJuIGN0cmxfaW5sKFRNVTBfVENOVCsweEMqdG11X251bSk7Cit9CisKIHN0YXRpYyBpbnQgdG11X3RpbWVyX3N0YXJ0KHZvaWQpCiB7Ci0JY3RybF9vdXRiKGN0cmxfaW5iKFRNVV8wMTJfVFNUUikgfCAweDMsIFRNVV8wMTJfVFNUUik7CisJX3RtdV9zdGFydChUTVUwKTsKKwlfdG11X3N0YXJ0KFRNVTEpOworCV90bXVfc2V0X2lycShUTVUwLDEpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0bXUwX3RpbWVyX3NldF9pbnRlcnZhbCh1bnNpZ25lZCBsb25nIGludGVydmFsLCB1bnNpZ25lZCBpbnQgcmVsb2FkKQorc3RhdGljIGludCB0bXVfdGltZXJfc3RvcCh2b2lkKQogewotCWN0cmxfb3V0bChpbnRlcnZhbCwgVE1VMF9UQ05UKTsKKwlfdG11X3N0b3AoVE1VMCk7CisJX3RtdV9zdG9wKFRNVTEpOworCV90bXVfY2xlYXJfc3RhdHVzKFRNVTApOworCXJldHVybiAwOworfQorCisvKgorICogYWxzbyB3aGVuIHRoZSBtb2R1bGVfY2xrIGlzIHNjYWxlZCB0aGUgVE1VMQorICogd2lsbCBzaG93IHRoZSBzYW1lIGZyZXF1ZW5jeQorICovCitzdGF0aWMgaW50IHRtdXNfYXJlX3NjYWxlZDsKKworc3RhdGljIGN5Y2xlX3QgdG11X3RpbWVyX3JlYWQodm9pZCkKK3sKKwlyZXR1cm4gKChjeWNsZV90KSh+X3RtdV9yZWFkKFRNVTEpKSk8PHRtdXNfYXJlX3NjYWxlZDsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0bXVfbGF0ZXN0X2ludGVydmFsWzNdOworc3RhdGljIHZvaWQgdG11X3RpbWVyX3NldF9pbnRlcnZhbChpbnQgdG11X251bSwgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCwgdW5zaWduZWQgaW50IHJlbG9hZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtdV90Y250ID0gVE1VMF9UQ05UICsgdG11X251bSoweEM7CisJdW5zaWduZWQgbG9uZyB0bXVfdGNvciA9IFRNVTBfVENPUiArIHRtdV9udW0qMHhDOworCisJX3RtdV9zdG9wKHRtdV9udW0pOworCisJY3RybF9vdXRsKGludGVydmFsLCB0bXVfdGNudCk7CisJdG11X2xhdGVzdF9pbnRlcnZhbFt0bXVfbnVtXSA9IGludGVydmFsOwogCiAJLyoKIAkgKiBUQ05UIHJlbG9hZHMgZnJvbSBUQ09SIG9uIHVuZGVyZmxvdywgY2xlYXIgaXQgaWYgd2UgZG9uJ3QKIAkgKiBpbnRlbmQgdG8gYXV0by1yZWxvYWQKIAkgKi8KLQlpZiAocmVsb2FkKQotCQljdHJsX291dGwoaW50ZXJ2YWwsIFRNVTBfVENPUik7Ci0JZWxzZQotCQljdHJsX291dGwoMCwgVE1VMF9UQ09SKTsKKwljdHJsX291dGwoIHJlbG9hZCA/IGludGVydmFsIDogMCAsIHRtdV90Y29yKTsKIAotCXRtdV90aW1lcl9zdGFydCgpOwotfQotCi1zdGF0aWMgaW50IHRtdV90aW1lcl9zdG9wKHZvaWQpCi17Ci0JY3RybF9vdXRiKGN0cmxfaW5iKFRNVV8wMTJfVFNUUikgJiB+MHgzLCBUTVVfMDEyX1RTVFIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY3ljbGVfdCB0bXVfdGltZXJfcmVhZCh2b2lkKQotewotCXJldHVybiB+Y3RybF9pbmwoVE1VMV9UQ05UKTsKKwlfdG11X3N0YXJ0KHRtdV9udW0pOwogfQogCiBzdGF0aWMgaW50IHRtdV9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGN5Y2xlcywKIAkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKIHsKLQl0bXUwX3RpbWVyX3NldF9pbnRlcnZhbChjeWNsZXMsIDEpOworCXRtdV90aW1lcl9zZXRfaW50ZXJ2YWwoVE1VMCxjeWNsZXMsIGV2dC0+bW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQyk7CisJX3RtdV9zZXRfaXJxKFRNVTAsMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk2LDEyICsxNDMsOCBAQAogc3RhdGljIGlycXJldHVybl90IHRtdV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXkpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnRtdTBfY2xvY2tldmVudDsKLQl1bnNpZ25lZCBsb25nIHRpbWVyX3N0YXR1czsKLQotCS8qIENsZWFyIFVORiBiaXQgKi8KLQl0aW1lcl9zdGF0dXMgPSBjdHJsX2ludyhUTVUwX1RDUik7Ci0JdGltZXJfc3RhdHVzICY9IH4weDEwMDsKLQljdHJsX291dHcodGltZXJfc3RhdHVzLCBUTVUwX1RDUik7CisJX3RtdV9jbGVhcl9zdGF0dXMoVE1VMCk7CisJX3RtdV9zZXRfaXJxKFRNVTAsdG11MF9jbG9ja2V2ZW50Lm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CiAKIAlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKIApAQCAtMTA5LDU2ICsxNTIsNzMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdG11MF9pcnEgPSB7Ci0JLm5hbWUJCT0gInBlcmlvZGljIHRpbWVyIiwKKwkubmFtZQkJPSAicGVyaW9kaWMvb25lc2hvdCB0aW1lciIsCiAJLmhhbmRsZXIJPSB0bXVfdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkubWFzawkJPSBDUFVfTUFTS19OT05FLAogfTsKIAotc3RhdGljIHZvaWQgdG11MF9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCBfX2luaXQgdG11X2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1OCBkaXZpc29yID0gVE1VX1RDUl9JTklUICYgMHg3OwotCWN0cmxfb3V0dyhUTVVfVENSX0lOSVQsIFRNVTBfVENSKTsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKKwl1OCBkaXZpc29yICA9IFRNVV9UQ1JfSU5JVCAmIDB4NzsKKwlpbnQgdG11X251bSA9IGNsay0+bmFtZVszXS0nMCc7CisJY3RybF9vdXR3KFRNVV9UQ1JfSU5JVCwgVE1VMF9UQ1IrKHRtdV9udW0qMHhDKSk7CisJY2xrLT5yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKIH0KIAotc3RhdGljIHZvaWQgdG11MF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIHRtdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1OCBkaXZpc29yID0gY3RybF9pbncoVE1VMF9UQ1IpICYgMHg3OwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOworCWludCB0bXVfbnVtID0gY2xrLT5uYW1lWzNdLScwJzsKKwl1bnNpZ25lZCBsb25nIHByZXZfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggZGl2aXNvciA9IGN0cmxfaW53KFRNVTBfVENSK3RtdV9udW0qMHhDKSAmIDB4NzsKKwljbGstPnJhdGUgID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKKworCWlmKHByZXZfcmF0ZT09Y2xrX2dldF9yYXRlKGNsaykpCisJCXJldHVybjsKKworCWlmKHRtdV9udW0pCisJCXJldHVybjsgLyogTm8gbW9yZSB3b3JrIG9uIFRNVTEgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0bXVzX2FyZV9zY2FsZWQgPSAocHJldl9yYXRlID4gY2xrLT5yYXRlKTsKKworCV90bXVfc3RvcChUTVUwKTsKKworCXRtdTBfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGNsay0+cmF0ZSwgTlNFQ19QRVJfU0VDLAorCQkJCXRtdTBfY2xvY2tldmVudC5zaGlmdCk7CisJdG11MF9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJCQljbG9ja2V2ZW50X2RlbHRhMm5zKC0xLCAmdG11MF9jbG9ja2V2ZW50KTsKKwl0bXUwX2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KKwkJCWNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJnRtdTBfY2xvY2tldmVudCk7CisKKwlpZiAodG11c19hcmVfc2NhbGVkKQorCQl0bXVfbGF0ZXN0X2ludGVydmFsW1RNVTBdID4+PSAxOworCWVsc2UKKwkJdG11X2xhdGVzdF9pbnRlcnZhbFtUTVUwXSA8PD0gMTsKKworCXRtdV90aW1lcl9zZXRfaW50ZXJ2YWwoVE1VMCwKKwkJdG11X2xhdGVzdF9pbnRlcnZhbFtUTVUwXSwKKwkJdG11MF9jbG9ja2V2ZW50Lm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpOworCisJX3RtdV9zdGFydChUTVUwKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHRtdTBfY2xrX29wcyA9IHsKLQkuaW5pdAkJPSB0bXUwX2Nsa19pbml0LAotCS5yZWNhbGMJCT0gdG11MF9jbGtfcmVjYWxjLAorc3RhdGljIHN0cnVjdCBjbGtfb3BzIHRtdV9jbGtfb3BzID0geworCS5pbml0CQk9IHRtdV9jbGtfaW5pdCwKKwkucmVjYWxjCQk9IHRtdV9jbGtfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdG11MF9jbGsgPSB7CiAJLm5hbWUJCT0gInRtdTBfY2xrIiwKLQkub3BzCQk9ICZ0bXUwX2Nsa19vcHMsCi19OwotCi1zdGF0aWMgdm9pZCB0bXUxX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1OCBkaXZpc29yID0gVE1VX1RDUl9JTklUICYgMHg3OwotCWN0cmxfb3V0dyhkaXZpc29yLCBUTVUxX1RDUik7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRtdTFfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTggZGl2aXNvciA9IGN0cmxfaW53KFRNVTFfVENSKSAmIDB4NzsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHRtdTFfY2xrX29wcyA9IHsKLQkuaW5pdAkJPSB0bXUxX2Nsa19pbml0LAotCS5yZWNhbGMJCT0gdG11MV9jbGtfcmVjYWxjLAorCS5vcHMJCT0gJnRtdV9jbGtfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdG11MV9jbGsgPSB7CiAJLm5hbWUJCT0gInRtdTFfY2xrIiwKLQkub3BzCQk9ICZ0bXUxX2Nsa19vcHMsCisJLm9wcwkJPSAmdG11X2Nsa19vcHMsCiB9OwogCiBzdGF0aWMgaW50IHRtdV90aW1lcl9pbml0KHZvaWQpCkBAIC0xODksMTEgKzI0OSwxMiBAQAogCWZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MF9jbGspOwogCWludGVydmFsID0gKGZyZXF1ZW5jeSArIEhaIC8gMikgLyBIWjsKIAotCXNoX2hwdF9mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoJnRtdTFfY2xrKTsKLQljdHJsX291dGwofjAsIFRNVTFfVENOVCk7Ci0JY3RybF9vdXRsKH4wLCBUTVUxX1RDT1IpOworCXRtdV90aW1lcl9zZXRfaW50ZXJ2YWwoVE1VMCxpbnRlcnZhbCwgMSk7CisJdG11X3RpbWVyX3NldF9pbnRlcnZhbChUTVUxLH4wLDEpOwogCi0JdG11MF90aW1lcl9zZXRfaW50ZXJ2YWwoaW50ZXJ2YWwsIDEpOworCV90bXVfc3RhcnQoVE1VMSk7CisKKwlzaF9ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUxX2Nsayk7CiAKIAl0bXUwX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhmcmVxdWVuY3ksIE5TRUNfUEVSX1NFQywKIAkJCQkgICAgICB0bXUwX2Nsb2NrZXZlbnQuc2hpZnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggNTExYTk0Mi4uMWU1Yzc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgorI2luY2x1ZGUgPGFzbS9rcHJvYmVzLmg+CiAKICNpZmRlZiBDT05GSUdfU0hfS0dEQgogI2luY2x1ZGUgPGFzbS9rZ2RiLmg+CkBAIC0xMDQsNiArMTA1LDggQEAKIAkJZHVtcF9tZW0oIlN0YWNrOiAiLCByZWdzLT5yZWdzWzE1XSwgVEhSRUFEX1NJWkUgKwogCQkJICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShjdXJyZW50KSk7CiAKKwlub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwgMjU1LCBTSUdTRUdWKTsKKwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtMTkyLDYgKzE5NSw3IEBACiAJaW50IHJldCwgaW5kZXgsIGNvdW50OwogCXVuc2lnbmVkIGxvbmcgKnJtLCAqcm47CiAJdW5zaWduZWQgY2hhciAqc3JjLCAqZHN0OworCXVuc2lnbmVkIGNoYXIgX191c2VyICpzcmN1LCAqZHN0dTsKIAogCWluZGV4ID0gKGluc3RydWN0aW9uPj44KSYxNTsJLyogMHgwRjAwICovCiAJcm4gPSAmcmVncy0+cmVnc1tpbmRleF07CkBAIC0yMDYsMjggKzIxMCwyOCBAQAogCWNhc2UgMDogLyogbW92Lltid2xdIHRvL2Zyb20gbWVtb3J5IHZpYSByMCtybiAqLwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiA4KSB7CiAJCQkvKiBmcm9tIG1lbW9yeSAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07Ci0JCQlzcmMgKz0gcmVncy0+cmVnc1swXTsKLQkJCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgcm47Ci0JCQkqKHVuc2lnbmVkIGxvbmcqKWRzdCA9IDA7CisJCQlzcmN1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJtOworCQkJc3JjdSArPSByZWdzLT5yZWdzWzBdOworCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKilybjsKKwkJCSoodW5zaWduZWQgbG9uZyAqKWRzdCA9IDA7CiAKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJCWRzdCArPSA0LWNvdW50OwogI2VuZGlmCi0JCQlpZiAobWEtPmZyb20oZHN0LCBzcmMsIGNvdW50KSkKKwkJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIGNvdW50KSkKIAkJCQlnb3RvIGZldGNoX2ZhdWx0OwogCiAJCQlzaWduX2V4dGVuZChjb3VudCwgZHN0KTsKIAkJfSBlbHNlIHsKIAkJCS8qIHRvIG1lbW9yeSAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSBybTsKKwkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyICopcm07CiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlzcmMgKz0gNC1jb3VudDsKICNlbmRpZgotCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSAqcm47Ci0JCQlkc3QgKz0gcmVncy0+cmVnc1swXTsKKwkJCWRzdHUgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm47CisJCQlkc3R1ICs9IHJlZ3MtPnJlZ3NbMF07CiAKLQkJCWlmIChtYS0+dG8oZHN0LCBzcmMsIGNvdW50KSkKKwkJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCBjb3VudCkpCiAJCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJfQogCQlyZXQgPSAwOwpAQCAtMjM1LDEwICsyMzksMTAgQEAKIAogCWNhc2UgMTogLyogbW92LmwgUm0sQChkaXNwLFJuKSAqLwogCQlzcmMgPSAodW5zaWduZWQgY2hhciopIHJtOwotCQlkc3QgPSAodW5zaWduZWQgY2hhciopICpybjsKLQkJZHN0ICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOworCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJuOworCQlkc3R1ICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOwogCi0JCWlmIChtYS0+dG8oZHN0LCBzcmMsIDQpKQorCQlpZiAobWEtPnRvKGRzdHUsIHNyYywgNCkpCiAJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQlyZXQgPSAwOwogCQlicmVhazsKQEAgLTI0NywyOCArMjUxLDI4IEBACiAJCWlmIChpbnN0cnVjdGlvbiAmIDQpCiAJCQkqcm4gLT0gY291bnQ7CiAJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgcm07Ci0JCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgKnJuOworCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJuOwogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQlzcmMgKz0gNC1jb3VudDsKICNlbmRpZgotCQlpZiAobWEtPnRvKGRzdCwgc3JjLCBjb3VudCkpCisJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCBjb3VudCkpCiAJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQlyZXQgPSAwOwogCQlicmVhazsKIAogCWNhc2UgNTogLyogbW92LmwgQChkaXNwLFJtKSxSbiAqLwotCQlzcmMgPSAodW5zaWduZWQgY2hhciopICpybTsKLQkJc3JjICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOwotCQlkc3QgPSAodW5zaWduZWQgY2hhciopIHJuOwotCQkqKHVuc2lnbmVkIGxvbmcqKWRzdCA9IDA7CisJCXNyY3UgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm07CisJCXNyY3UgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAyOworCQlkc3QgPSAodW5zaWduZWQgY2hhciAqKXJuOworCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSAwOwogCi0JCWlmIChtYS0+ZnJvbShkc3QsIHNyYywgNCkpCisJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIDQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIDY6CS8qIG1vdi5bYndsXSBmcm9tIG1lbW9yeSwgcG9zc2libHkgd2l0aCBwb3N0LWluY3JlbWVudCAqLwotCQlzcmMgPSAodW5zaWduZWQgY2hhciopICpybTsKKwkJc3JjdSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsKIAkJaWYgKGluc3RydWN0aW9uICYgNCkKIAkJCSpybSArPSBjb3VudDsKIAkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSBybjsKQEAgLTI3Nyw3ICsyODEsNyBAQAogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQlkc3QgKz0gNC1jb3VudDsKICNlbmRpZgotCQlpZiAobWEtPmZyb20oZHN0LCBzcmMsIGNvdW50KSkKKwkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjdSwgY291bnQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJc2lnbl9leHRlbmQoY291bnQsIGRzdCk7CiAJCXJldCA9IDA7CkBAIC0yODYsMjggKzI5MCwyOCBAQAogCWNhc2UgODoKIAkJc3dpdGNoICgoaW5zdHJ1Y3Rpb24mMHhGRjAwKT4+OCkgewogCQljYXNlIDB4ODE6IC8qIG1vdi53IFIwLEAoZGlzcCxSbikgKi8KLQkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgJnJlZ3MtPnJlZ3NbMF07CisJCQlzcmMgPSAodW5zaWduZWQgY2hhciAqKSAmcmVncy0+cmVnc1swXTsKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJCXNyYyArPSAyOwogI2VuZGlmCi0JCQlkc3QgPSAodW5zaWduZWQgY2hhciopICpybTsgLyogY2FsbGVkIFJuIGluIHRoZSBzcGVjICovCi0JCQlkc3QgKz0gKGluc3RydWN0aW9uJjB4MDAwRik8PDE7CisJCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJtOyAvKiBjYWxsZWQgUm4gaW4gdGhlIHNwZWMgKi8KKwkJCWRzdHUgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAxOwogCi0JCQlpZiAobWEtPnRvKGRzdCwgc3JjLCAyKSkKKwkJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCAyKSkKIAkJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHg4NTogLyogbW92LncgQChkaXNwLFJtKSxSMCAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07Ci0JCQlzcmMgKz0gKGluc3RydWN0aW9uJjB4MDAwRik8PDE7Ci0JCQlkc3QgPSAodW5zaWduZWQgY2hhciopICZyZWdzLT5yZWdzWzBdOwotCQkJKih1bnNpZ25lZCBsb25nKilkc3QgPSAwOworCQkJc3JjdSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsKKwkJCXNyY3UgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAxOworCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKikgJnJlZ3MtPnJlZ3NbMF07CisJCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSAwOwogCiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlkc3QgKz0gMjsKICNlbmRpZgotCQkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjLCAyKSkKKwkJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIDIpKQogCQkJCWdvdG8gZmV0Y2hfZmF1bHQ7CiAJCQlzaWduX2V4dGVuZCgyLCBkc3QpOwogCQkJcmV0ID0gMDsKQEAgLTMzMyw3ICszMzcsOCBAQAogCQkJCSAgIHN0cnVjdCBtZW1fYWNjZXNzICptYSkKIHsKIAlvcGNvZGVfdCBpbnN0cnVjdGlvbjsKLQl2b2lkICphZGRyID0gKHZvaWQgKikocmVncy0+cGMgKyBpbnN0cnVjdGlvbl9zaXplKG9sZF9pbnN0cnVjdGlvbikpOworCXZvaWQgX191c2VyICphZGRyID0gKHZvaWQgX191c2VyICopKHJlZ3MtPnBjICsKKwkJaW5zdHJ1Y3Rpb25fc2l6ZShvbGRfaW5zdHJ1Y3Rpb24pKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sIGFkZHIsIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCS8qIHRoZSBpbnN0cnVjdGlvbi1mZXRjaCBmYXVsdGVkICovCkBAIC01MTEsMTQgKzUxNiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19DUFVfSEFTX1NSX1JCCi0jZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKHgpCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0YyByMl9iYW5rLCAlMFxuXHQiIDogIj1yIiAoKHgpKSkKLSNlbHNlCi0jZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKHgpCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiByNCwgJTBcblx0IiA6ICI9ciIgKCh4KSkpCi0jZW5kaWYKLQogLyoKICAqIEhhbmRsZSB2YXJpb3VzIGFkZHJlc3MgZXJyb3IgZXhjZXB0aW9uczoKICAqICAtIGluc3RydWN0aW9uIGFkZHJlc3MgZXJyb3I6CkBAIC01NDIsNyArNTM5LDcgQEAKIAogCS8qIEludGVudGlvbmFsIGlmZGVmICovCiAjaWZkZWYgQ09ORklHX0NQVV9IQVNfU1JfUkIKLQlsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcihlcnJvcl9jb2RlKTsKKwllcnJvcl9jb2RlID0gbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoKTsKICNlbmRpZgogCiAJb2xkZnMgPSBnZXRfZnMoKTsKQEAgLTU1OSw3ICs1NTYsNyBAQAogCQl9CiAKIAkJc2V0X2ZzKFVTRVJfRFMpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodm9pZCAqKShyZWdzLT5wYyksCisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sICh2b2lkIF9fdXNlciAqKShyZWdzLT5wYyksCiAJCQkJICAgc2l6ZW9mKGluc3RydWN0aW9uKSkpIHsKIAkJCS8qIEFyZ2guIEZhdWx0IG9uIHRoZSBpbnN0cnVjdGlvbiBpdHNlbGYuCiAJCQkgICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gbm9uLVNNUApAQCAtNTg5LDcgKzU4Niw3IEBACiAJCQlkaWUoInVuYWxpZ25lZCBwcm9ncmFtIGNvdW50ZXIiLCByZWdzLCBlcnJvcl9jb2RlKTsKIAogCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKHZvaWQgKikocmVncy0+cGMpLAorCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodm9pZCBfX3VzZXIgKikocmVncy0+cGMpLAogCQkJCSAgIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCQkvKiBBcmdoLiBGYXVsdCBvbiB0aGUgaW5zdHJ1Y3Rpb24gaXRzZWxmLgogCQkJICAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIG5vbi1TTVAKQEAgLTY4Myw3ICs2ODAsNyBAQAogCX0KICNlbmRpZgogCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXJyb3JfY29kZSk7CisJZXJyb3JfY29kZSA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJQ0hLX1JFTU9URV9ERUJVRyhyZWdzKTsKQEAgLTczOSwxMSArNzM2LDEzIEBACiAJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKLQl1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyBpbnN0OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLSNpZmRlZiBDT05GSUdfU0hfRlBVX0VNVQotCXVuc2lnbmVkIHNob3J0IGluc3QgPSAwOwogCisJaWYgKGtwcm9iZV9oYW5kbGVfaWxsc2xvdChyZWdzLT5wYykgPT0gMCkKKwkJcmV0dXJuOworCisjaWZkZWYgQ09ORklHX1NIX0ZQVV9FTVUKIAlnZXRfdXNlcihpbnN0LCAodW5zaWduZWQgc2hvcnQgKilyZWdzLT5wYyArIDEpOwogCWlmICghZG9fZnB1X2luc3QoaW5zdCwgcmVncykpIHsKIAkJZ2V0X3VzZXIoaW5zdCwgKHVuc2lnbmVkIHNob3J0ICopcmVncy0+cGMpOwpAQCAtNzU0LDEyICs3NTMsMTIgQEAKIAkvKiBub3QgYSBGUFUgaW5zdC4gKi8KICNlbmRpZgogCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXJyb3JfY29kZSk7CisJaW5zdCA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJQ0hLX1JFTU9URV9ERUJVRyhyZWdzKTsKIAlmb3JjZV9zaWcoU0lHSUxMLCB0c2spOwotCWRpZV9pZl9ub19maXh1cCgiaWxsZWdhbCBzbG90IGluc3RydWN0aW9uIiwgcmVncywgZXJyb3JfY29kZSk7CisJZGllX2lmX25vX2ZpeHVwKCJpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24iLCByZWdzLCBpbnN0KTsKIH0KIAogYXNtbGlua2FnZSB2b2lkIGRvX2V4Y2VwdGlvbl9lcnJvcih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LApAQCAtNzY5LDcgKzc2OCw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBSRUxPQ19ISURFKCZfX3JlZ3MsIDApOwogCWxvbmcgZXg7CiAKLQlsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcihleCk7CisJZXggPSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpOwogCWRpZV9pZl9rZXJuZWwoImV4Y2VwdGlvbiIsIHJlZ3MsIGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvZGl2NjQtZ2VuZXJpYy5jIGIvYXJjaC9zaC9saWIvZGl2NjQtZ2VuZXJpYy5jCmluZGV4IDRiZWYzYjUuLjYwZTc2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2RpdjY0LWdlbmVyaWMuYworKysgYi9hcmNoL3NoL2xpYi9kaXY2NC1nZW5lcmljLmMKQEAgLTMsNiArMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKIGV4dGVybiB1aW50NjRfdCBfX3hkaXY2NF8zMih1NjQgbiwgdTMyIGQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYi9pby5jIGIvYXJjaC9zaC9saWIvaW8uYwppbmRleCA0ZjU0ZWM0Li44OGRmZTZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYi9pby5jCisrKyBiL2FyY2gvc2gvbGliL2lvLmMKQEAgLTE0LDEyICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLXZvaWQgX19yYXdfcmVhZHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YXAsIGludCBsZW4pCit2b2lkIF9fcmF3X3JlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGFwLCBpbnQgbGVuKQogewogCXUzMiAqZGF0YTsKIAogCWZvciAoZGF0YSA9IGRhdGFwOyAobGVuICE9IDApICYmICgoKHUzMilkYXRhICYgMHgxZikgIT0gMCk7IGxlbi0tKQotCQkqZGF0YSsrID0gY3RybF9pbmwoYWRkcik7CisJCSpkYXRhKysgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAogCWlmIChsaWtlbHkobGVuID49ICgweDIwID4+IDIpKSkgewogCQlpbnQgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNjsKQEAgLTU5LDExICs1OSwxMSBAQAogCX0KIAogCWZvciAoOyBsZW4gIT0gMDsgbGVuLS0pCi0JCSpkYXRhKysgPSBjdHJsX2lubChhZGRyKTsKKwkJKmRhdGErKyA9IF9fcmF3X3JlYWRsKGFkZHIpOwogfQogRVhQT1JUX1NZTUJPTChfX3Jhd19yZWFkc2wpOwogCi12b2lkIF9fcmF3X3dyaXRlc2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQordm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAlpZiAobGlrZWx5KGxlbiAhPSAwKSkgewogCQlpbnQgdG1wMTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA4YTAzOTI2Li41NTVlYzk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0xMzIsNyArMTMyLDExIEBACiAKIGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTQorCWRlcGVuZHMgb24gU1BBUlNFTUVNICYmIE1NVQorCitjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBNTVUKIAogY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCiAJZGVmX2Jvb2wgeQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwppbmRleCAwZTE4OWNjLi41YmEwNjdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwpAQCAtMTMwLDEyICsxMzAsMTggQEAKIAlkY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGNhY2hlIiwgU19JUlVTUiwgc2hfZGVidWdmc19yb290LAogCQkJCQkgICAgKHVuc2lnbmVkIGludCAqKUNBQ0hFX1RZUEVfRENBQ0hFLAogCQkJCQkgICAgJmNhY2hlX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFkY2FjaGVfZGVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoSVNfRVJSKGRjYWNoZV9kZW50cnkpKQogCQlyZXR1cm4gUFRSX0VSUihkY2FjaGVfZGVudHJ5KTsKIAogCWljYWNoZV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpY2FjaGUiLCBTX0lSVVNSLCBzaF9kZWJ1Z2ZzX3Jvb3QsCiAJCQkJCSAgICAodW5zaWduZWQgaW50ICopQ0FDSEVfVFlQRV9JQ0FDSEUsCiAJCQkJCSAgICAmY2FjaGVfZGVidWdmc19mb3BzKTsKKwlpZiAoIWljYWNoZV9kZW50cnkpIHsKKwkJZGVidWdmc19yZW1vdmUoZGNhY2hlX2RlbnRyeSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlpZiAoSVNfRVJSKGljYWNoZV9kZW50cnkpKSB7CiAJCWRlYnVnZnNfcmVtb3ZlKGRjYWNoZV9kZW50cnkpOwogCQlyZXR1cm4gUFRSX0VSUihpY2FjaGVfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IDFmZGM4ZDkuLjVjZmUwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiB9CiAKIC8qIFRPRE86IFNlbGVjdGl2ZSBpY2FjaGUgaW52YWxpZGF0aW9uIHRocm91Z2ggSUMgYWRkcmVzcyBhcnJheS4uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNjcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwppbmRleCA2NGI4ZjdmLi45ZjhlYTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYworKysgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwpAQCAtMTYsMTQgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtIHsKLQl2b2lkCQkqdmlydF9iYXNlOwotCXUzMgkJZGV2aWNlX2Jhc2U7Ci0JaW50CQlzaXplOwotCWludAkJZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZwkqYml0bWFwOwotfTsKLQogdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCiB7CkBAIC00NCw3ICszNiw3IEBACiAJICovCiAJZG1hX2NhY2hlX3N5bmMoZGV2LCByZXQsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKIAotCXJldF9ub2NhY2hlID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhyZXQpLCBzaXplKTsKKwlyZXRfbm9jYWNoZSA9ICh2b2lkIF9fZm9yY2UgKilpb3JlbWFwX25vY2FjaGUodmlydF90b19waHlzKHJldCksIHNpemUpOwogCWlmICghcmV0X25vY2FjaGUpIHsKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyZXQsIG9yZGVyKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01OCwxMiArNTAsMTAgQEAKIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCSB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewotCXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICptZW0gPSBkZXYgPyBkZXYtPmRtYV9tZW0gOiBOVUxMOwogCWludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAogCWlmICghZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikpIHsKIAkJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwkvKiBmb3IgcG9ydGFiaWxpdHkgKi8KLQkJQlVHX09OKG1lbSAmJiBtZW0tPmZsYWdzICYgRE1BX01FTU9SWV9FWENMVVNJVkUpOwogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSwgb3JkZXIpOwogCQlpb3VubWFwKHZhZGRyKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKaW5kZXggMGM3NzZmZC4uODk4ZDQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgU0ggd2l0aCBhbiBNTVUuCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggIFBhdWwgTXVuZHQKICAqCiAgKiAgQmFzZWQgb24gbGludXgvYXJjaC9pMzg2L21tL2ZhdWx0LmM6CiAgKiAgIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8YXNtL2lvX3RyYXBwZWQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0zNywxMCArMzgsMTAgQEAKIAlpbnQgZmF1bHQ7CiAJc2lnaW5mb190IGluZm87CiAKLSNpZmRlZiBDT05GSUdfU0hfS0dEQgotCWlmIChrZ2RiX25vZmF1bHQgJiYga2dkYl9idXNfZXJyX2hvb2spCi0JCWtnZGJfYnVzX2Vycl9ob29rKCk7Ci0jZW5kaWYKKwkvKgorCSAqIFdlIGRvbid0IGJvdGhlciB3aXRoIGFueSBub3RpZmllciBjYWxsYmFja3MgaGVyZSwgYXMgdGhleSBhcmUKKwkgKiBhbGwgaGFuZGxlZCB0aHJvdWdoIHRoZSBfX2RvX3BhZ2VfZmF1bHQoKSBmYXN0LXBhdGguCisJICovCiAKIAl0c2sgPSBjdXJyZW50OwogCXNpX2NvZGUgPSBTRUdWX01BUEVSUjsKQEAgLTYxLDcgKzYyLDYgQEAKIAkJcGdkID0gZ2V0X1RUQigpICsgb2Zmc2V0OwogCQlwZ2RfayA9IHN3YXBwZXJfcGdfZGlyICsgb2Zmc2V0OwogCi0JCS8qIFRoaXMgd2lsbCBuZXZlciBoYXBwZW4gd2l0aCB0aGUgZm9sZGVkIHBhZ2UgdGFibGUuICovCiAJCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHsKIAkJCWlmICghcGdkX3ByZXNlbnQoKnBnZF9rKSkKIAkJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOwpAQCAtNzEsOSArNzEsMTMgQEAKIAogCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJCXB1ZF9rID0gcHVkX29mZnNldChwZ2RfaywgYWRkcmVzcyk7Ci0JCWlmIChwdWRfcHJlc2VudCgqcHVkKSB8fCAhcHVkX3ByZXNlbnQoKnB1ZF9rKSkKLQkJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7Ci0JCXNldF9wdWQocHVkLCAqcHVkX2spOworCisJCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpIHsKKwkJCWlmICghcHVkX3ByZXNlbnQoKnB1ZF9rKSkKKwkJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCQkJc2V0X3B1ZChwdWQsICpwdWRfayk7CisJCQlyZXR1cm47CisJCX0KIAogCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CkBAIC0yNDIsNiArMjQ2LDI1IEBACiAJCWdvdG8gbm9fY29udGV4dDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwKQoreworCWludCByZXQgPSAwOworCisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF90cmFwX2VudHJ5LCAidHJhcF9pZCAlZCBpcCAjcCVsZCIsCisJCSAgIHRyYXAgPj4gNSwgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSk7CisKKyNpZmRlZiBDT05GSUdfS1BST0JFUworCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCB0cmFwKSkKKwkJCXJldCA9IDE7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorCiAjaWZkZWYgQ09ORklHX1NIX1NUT1JFX1FVRVVFUwogLyoKICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBTSC00IHN0b3JlIHF1ZXVlcywgYXMgcGFnZXMgZm9yIHRoaXMKQEAgLTI2NSwxMiArMjg4LDE4IEBACiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCXB0ZV90IGVudHJ5OworCWludCByZXQgPSAwOworCisJaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MsIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCkpKQorCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19TSF9LR0RCCiAJaWYgKGtnZGJfbm9mYXVsdCAmJiBrZ2RiX2J1c19lcnJfaG9vaykKIAkJa2dkYl9idXNfZXJyX2hvb2soKTsKICNlbmRpZgogCisJcmV0ID0gMTsKKwogCS8qCiAJICogV2UgZG9uJ3QgdGFrZSBwYWdlIGZhdWx0cyBmb3IgUDEsIFAyLCBhbmQgcGFydHMgb2YgUDQsIHRoZXNlCiAJICogYXJlIGFsd2F5cyBtYXBwZWQsIHdoZXRoZXIgaXQgYmUgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvdXIgaW4KQEAgLTI4MCwyNCArMzA5LDIzIEBACiAJCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKIAl9IGVsc2UgewogCQlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBUQVNLX1NJWkUgfHwgIWN1cnJlbnQtPm1tKSkKLQkJCXJldHVybiAxOworCQkJZ290byBvdXQ7CiAKIAkJcGdkID0gcGdkX29mZnNldChjdXJyZW50LT5tbSwgYWRkcmVzcyk7CiAJfQogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKLQkJcmV0dXJuIDE7CisJCWdvdG8gb3V0OwogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCi0JCXJldHVybiAxOwotCisJCWdvdG8gb3V0OwogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CiAJZW50cnkgPSAqcHRlOwogCWlmICh1bmxpa2VseShwdGVfbm9uZShlbnRyeSkgfHwgcHRlX25vdF9wcmVzZW50KGVudHJ5KSkpCi0JCXJldHVybiAxOworCQlnb3RvIG91dDsKIAlpZiAodW5saWtlbHkod3JpdGVhY2Nlc3MgJiYgIXB0ZV93cml0ZShlbnRyeSkpKQotCQlyZXR1cm4gMTsKKwkJZ290byBvdXQ7CiAKIAlpZiAod3JpdGVhY2Nlc3MpCiAJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOwpAQCAtMzE0LDUgKzM0Miw4IEBACiAJc2V0X3B0ZShwdGUsIGVudHJ5KTsKIAl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIGFkZHJlc3MsIGVudHJ5KTsKIAotCXJldHVybiAwOworCXJldCA9IDA7CitvdXQ6CisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF90cmFwX2V4aXQsIE1BUktfTk9BUkdTKTsKKwlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCBiNzVhN2FjLi40YWJmMDAwIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMjMsNyArMjMsMTkgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07Ci11bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZCA9IDA7CisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKy8qCisgKiBIYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQgdW5jYWNoZWQKKyAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KKyAqIDUxMk1CIGxvd21lbS4KKyAqCisgKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIHVuY2FjaGVkIHNlY3Rpb24gZnJvbSBpdHMgY2FjaGVkIGFsaWFzLgorICogRGVmYXVsdCB2YWx1ZSBvbmx5IHZhbGlkIGluIDI5IGJpdCBtb2RlLCBpbiAzMmJpdCBtb2RlIHdpbGwgYmUKKyAqIG92ZXJyaWRkZW4gaW4gcG1iX2luaXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01NVQogc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQpAQCAtNTgsOSArNzAsNyBAQAogCX0KIAogCXNldF9wdGUocHRlLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgcHJvdCkpOwotCi0JaWYgKGNhY2hlZF90b191bmNhY2hlZCkKLQkJZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyKTsKKwlmbHVzaF90bGJfb25lKGdldF9hc2lkKCksIGFkZHIpOwogfQogCiAvKgpAQCAtMTEzLDcgKzEyMyw2IEBACiAJCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpIHsKIAkJCXB0ZV90ICpwdGVfdGFibGU7CiAJCQlwdGVfdGFibGUgPSAocHRlX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCQkJbWVtc2V0KHB0ZV90YWJsZSwgMCwgUEFHRV9TSVpFKTsKIAkJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgcHRlX3RhYmxlKTsKIAkJfQogCkBAIC0xNjUsMTUgKzE3NCw2IEBACiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCiAJLyogU2V0IHVwIHRoZSB1bmNhY2hlZCBmaXhtYXAgKi8KIAlzZXRfZml4bWFwX25vY2FjaGUoRklYX1VOQ0FDSEVELCBfX3BhKCZfX3VuY2FjaGVkX3N0YXJ0KSk7Ci0KLSNpZmRlZiBDT05GSUdfMjlCSVQKLQkvKgotCSAqIEhhbmRsZSB0cml2aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gY2FjaGVkIGFuZCB1bmNhY2hlZAotCSAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KLQkgKiA1MTJNQiBsb3dtZW0uCi0JICovCi0JY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKLSNlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTI2NSw2ICsyNjUsMzUgQEAKIH0KICNlbmRpZgogCisjaWYgVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfaW5mb19jYWNoZTsKKworc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCisJdGkgPSBrbWVtX2NhY2hlX2FsbG9jKHRocmVhZF9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkodGkgPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorCW1lbXNldCh0aSwgMCwgVEhSRUFEX1NJWkUpOworI2VuZGlmCisJcmV0dXJuIHRpOworfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUodGhyZWFkX2luZm9fY2FjaGUsIHRpKTsKK30KKwordm9pZCB0aHJlYWRfaW5mb19jYWNoZV9pbml0KHZvaWQpCit7CisJdGhyZWFkX2luZm9fY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidGhyZWFkX2luZm8iLCBUSFJFQURfU0laRSwKKwkJCQkJICAgICAgVEhSRUFEX1NJWkUsIDAsIE5VTEwpOworCUJVR19PTih0aHJlYWRfaW5mb19jYWNoZSA9PSBOVUxMKTsKK30KKyNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKQEAgLTI5Miw0ICszMjEsNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQpOwogI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGctbm9tbXUuYyBiL2FyY2gvc2gvbW0vcGctbm9tbXUuYwppbmRleCA2NzdkZDU3Li45MWVkNGU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BnLW5vbW11LmMKKysrIGIvYXJjaC9zaC9tbS9wZy1ub21tdS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCmluZGV4IGNlZjcyNzYuLjg0MjQxNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcG1iLmMKKysrIGIvYXJjaC9zaC9tbS9wbWIuYwpAQCAtMzk0LDYgKzM5NCw4IEBACiAKIAlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwbWIiLCBTX0lGUkVHIHwgU19JUlVHTywKIAkJCQkgICAgIHNoX2RlYnVnZnNfcm9vdCwgTlVMTCwgJnBtYl9kZWJ1Z2ZzX2ZvcHMpOworCWlmICghZGVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLW5vbW11LmMgYi9hcmNoL3NoL21tL3RsYi1ub21tdS5jCmluZGV4IDE1MTExYmMuLjcxYzc0MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLW5vbW11LmMKKysrIGIvYXJjaC9zaC9tbS90bGItbm9tbXUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogLyoKICAqIE5vdGhpbmcgdG9vIHRlcnJpYmx5IGV4Y2l0aW5nIGhlcmUgLi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwppbmRleCAwYTExY2MwOC4uZDRmYjExZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwpAQCAtMzAsNiArMzAsNyBAQAogRFJFQU1DQVNUCQlTSF9EUkVBTUNBU1QKIFNOQVBHRUFSCQlTSF9TRUNVUkVFREdFNTQxMAogRURPU0s3NzA1CQlTSF9FRE9TSzc3MDUKK0VET1NLNzc2MAkJU0hfRURPU0s3NzYwCiBTSDQyMDJfTUlDUk9ERVYJCVNIX1NINDIwMl9NSUNST0RFVgogU0gwMwkJCVNIX1NIMDMKIExBTkRJU0sJCQlTSF9MQU5ESVNLCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggOTc2NzFkYS4uZTU5NDU1OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMzcsNiArMzcsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJHZW5lcmFsIG1hY2hpbmUgc2V0dXAiCiAKIGNvbmZpZyBTTVAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaAppbmRleCAyOTg5OWZkLi44MGZlNTQ3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oCkBAIC0xMzUsNiArMTM1LDcgQEAKICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTkJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nCiAJCQkJCSAqIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTAKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTEJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC0xNDgsNiArMTQ5LDcgQEAKICNkZWZpbmUgX1RJRl9ET19OT1RJRllfUkVTVU1FX01BU0sJKF9USUZfTk9USUZZX1JFU1VNRSB8IFwKIAkJCQkJIF9USUZfU0lHUEVORElORyB8IFwKIAkJCQkJIF9USUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaAppbmRleCBjMGE3MzdkLi42MzlhYzgwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCkBAIC0yMzcsNiArMjM3LDcgQEAKICNkZWZpbmUgVElGX0FCSV9QRU5ESU5HCQkxMgogI2RlZmluZSBUSUZfTUVNRElFCQkxMwogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTQKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTUJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtMjQ5LDYgKzI1MCw3IEBACiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCiAjZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDE8PFRJRl9BQklfUEVORElORykKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSwkoKDB4ZmYgPDwgVElfRkxBR19XU0FWRURfU0hJRlQpIHwgXAogCQkJCSBfVElGX0RPX05PVElGWV9SRVNVTUVfTUFTSyB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKaW5kZXggNGRkMWJhNy4uOWMxMTU4MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgQVBDX0RFVk5BTUUgImFwYyIKIAogc3RhdGljIHU4IF9faW9tZW0gKnJlZ3M7Ci1zdGF0aWMgaW50IGFwY19ub19pZGxlIF9faW5pdGRhdGEgPSAwOworc3RhdGljIGludCBhcGNfbm9faWRsZSBfX2RldmluaXRkYXRhID0gMDsKIAogI2RlZmluZSBhcGNfcmVhZGIob2ZmcykJCShzYnVzX3JlYWRiKHJlZ3Mrb2ZmcykpCiAjZGVmaW5lIGFwY193cml0ZWIodmFsLCBvZmZzKSAJKHNidXNfd3JpdGViKHZhbCwgcmVncytvZmZzKSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUwppbmRleCAyZDMyNWZkLi4yZmUyYzExIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5TCkBAIC00NjUsNiArNDY1LDcgQEAKIAkJbW92CSVvNywgJWc0CQkhIFNhdmUgJW83CiAKIAkJLyogSnVtcCB0byBpdCwgYW5kIHByYXkuLi4gKi8KKwkJX19JTklUCiBjdXJyZW50X3BjOgogCQljYWxsCTFmCiAJCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKaW5kZXggOWFiODE1Yi4uMTdiYjYwMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICAKLWludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICogb3BzKQoraW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9LY29uZmlnIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKaW5kZXggNTQ0NmUyYS4uMDM1YjE1YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L0tjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKQEAgLTk2LDYgKzk2LDcgQEAKIAlkZWZfYm9vbCB5CiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhbXBvbGluZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKaW5kZXggNzA0YTNhZi4uODNhYmQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKQEAgLTMyOCw2ICszMjgsMTIgQEAKIAogCXdycHIJCSVnMCwgMCwgJXdzdGF0ZQogCisJc2V0aGkJCSVoaShwcm9tX2VudHJ5X2xvY2spLCAlZzIKKzE6CWxkc3R1YgkJWyVnMiArICVsbyhwcm9tX2VudHJ5X2xvY2spXSwgJWcxCisJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKKwlicm56LHBuCQklZzEsIDFiCisJIG5vcAorCiAJLyogQXMgYSBoYWNrLCBwdXQgJmluaXRfdGhyZWFkX3VuaW9uIGludG8gJWc2LgogCSAqIHByb21fd29ybGQoKSBsb2FkcyBmcm9tIGhlcmUgdG8gcmVzdG9yZSB0aGUgJWFzaQogCSAqIHJlZ2lzdGVyLgpAQCAtMzM3LDcgKzM0Myw3IEBACiAKIAlzZXRoaQkJJWhpKGlzX3N1bjR2KSwgJW8wCiAJbGR1dwkJWyVvMCArICVsbyhpc19zdW40dildLCAlbzAKLQlicnoscHQJCSVvMCwgMWYKKwlicnoscHQJCSVvMCwgMmYKIAkgbm9wCiAKIAlUUkFQX0xPQURfVFJBUF9CTE9DSyglZzIsICVnMykKQEAgLTM2OSwxMCArMzc1LDEwIEBACiAJY2FsbAkJJW8xCiAJIGFkZAkJJXNwLCAoMjA0NyArIDEyOCksICVvMAogCi0JYmEscHQJCSV4Y2MsIDJmCisJYmEscHQJCSV4Y2MsIDNmCiAJIG5vcAogCi0xOglzZXRoaQkJJWhpKHNwYXJjNjRfdHRhYmxlX3RsMCksICVvMAorMjoJc2V0aGkJCSVoaShzcGFyYzY0X3R0YWJsZV90bDApLCAlbzAKIAlzZXQJCXByb21fc2V0X3RyYXBfdGFibGVfbmFtZSwgJWcyCiAJc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwMF0KIAltb3YJCTEsICVnMgpAQCAtMzg2LDcgKzM5MiwxMSBAQAogCWNhbGwJCSVvMQogCSBhZGQJCSVzcCwgKDIwNDcgKyAxMjgpLCAlbzAKIAotMjoJbGR4CQlbJWwwXSwgJWc2CiszOglzZXRoaQkJJWhpKHByb21fZW50cnlfbG9jayksICVnMgorCXN0YgkJJWcwLCBbJWcyICsgJWxvKHByb21fZW50cnlfbG9jayldCisJbWVtYmFyCQkjU3RvcmVTdG9yZSB8ICNTdG9yZUxvYWQKKworCWxkeAkJWyVsMF0sICVnNgogCWxkeAkJWyVnNiArIFRJX1RBU0tdLCAlZzQKIAogCW1vdgkJMSwgJWc1CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zcGFyYzY0L29wcm9maWxlL2luaXQuYwppbmRleCA5YWI4MTViLi4xN2JiNjAzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvb3Byb2ZpbGUvaW5pdC5jCisrKyBiL2FyY2gvc3BhcmM2NC9vcHJvZmlsZS9pbml0LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICAKLWludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICogb3BzKQoraW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3NjgxMi4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotY29uZmlnIERFRkNPTkZJR19MSVNUCi0Jc3RyaW5nCi0Jb3B0aW9uIGRlZmNvbmZpZ19saXN0Ci0JZGVmYXVsdCAiYXJjaC8kQVJDSC9kZWZjb25maWciCi0KLSMgVU1MIHVzZXMgdGhlIGdlbmVyaWMgSVJRIHN1YnN5c3RlbQotY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBVTUwKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBNTVUKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBOT19JT01FTQotCWRlZl9ib29sIHkKLQotbWFpbm1lbnUgIkxpbnV4L1VzZXJtb2RlIEtlcm5lbCBDb25maWd1cmF0aW9uIgotCi1jb25maWcgSVNBCi0JYm9vbAotCi1jb25maWcgU0JVUwotCWJvb2wKLQotY29uZmlnIFBDSQotCWJvb2wKLQotY29uZmlnIFBDTUNJQQotCWJvb2wKLQotIyBZZXQgdG8gZG8hCi1jb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAotCWJvb2wKLQlkZWZhdWx0IG4KLQotY29uZmlnIExPQ0tERVBfU1VQUE9SVAotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVAotCWJvb2wKLQlkZWZhdWx0IG4KLQotY29uZmlnIEdFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19CVUcKLQlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBCVUcKLQotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKLQlib29sCi0JZGVmYXVsdCB5Ci0KLSMgVXNlZCBpbiBrZXJuZWwvaXJxL21hbmFnZS5jIGFuZCBpbmNsdWRlL2xpbnV4L2lycS5oCi1jb25maWcgSVJRX1JFTEVBU0VfTUVUSE9ECi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgSFoKLQlpbnQKLQlkZWZhdWx0IDEwMAotCi1tZW51ICJVTUwtc3BlY2lmaWMgb3B0aW9ucyIKLQotY29uZmlnIFNUQVRJQ19MSU5LCi0JYm9vbCAiRm9yY2UgYSBzdGF0aWMgbGluayIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gZm9yY2UgYSBzdGF0aWMgbGluayBvZiBVTUwuCi0JICBOb3JtYWxseSwgVU1MIGlzIGxpbmtlZCBhcyBhIHNoYXJlZCBiaW5hcnkuICBUaGlzIGlzIGluY29udmVuaWVudCBmb3IKLQkgIHVzZSBpbiBhIGNocm9vdCBqYWlsLiAgU28sIGlmIHlvdSBpbnRlbmQgdG8gcnVuIFVNTCBpbnNpZGUgYSBjaHJvb3QsCi0JICB5b3UgcHJvYmFibHkgd2FudCB0byBzYXkgWSBoZXJlLgotCSAgQWRkaXRpb25hbGx5LCB0aGlzIG9wdGlvbiBlbmFibGVzIHVzaW5nIGhpZ2hlciBtZW1vcnkgc3BhY2VzICh1cCB0bwotCSAgMi43NUcpIGZvciBVTUwuCi0KLXNvdXJjZSAiYXJjaC91bS9LY29uZmlnLmFyY2giCi1zb3VyY2UgIm1tL0tjb25maWciCi1zb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCi0KLWNvbmZpZyBMRF9TQ1JJUFRfU1RBVElDCi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gU1RBVElDX0xJTksKLQotY29uZmlnIExEX1NDUklQVF9EWU4KLQlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiAhTERfU0NSSVBUX1NUQVRJQwotCi1zb3VyY2UgImZzL0tjb25maWcuYmluZm10IgotCi1jb25maWcgSE9TVEZTCi0JdHJpc3RhdGUgIkhvc3QgZmlsZXN5c3RlbSIKLQloZWxwCi0gICAgICAgICAgV2hpbGUgdGhlIFVzZXItTW9kZSBMaW51eCBwb3J0IHVzZXMgaXRzIG93biByb290IGZpbGUgc3lzdGVtIGZvcgotICAgICAgICAgIGJvb3RpbmcgYW5kIG5vcm1hbCBmaWxlIGFjY2VzcywgdGhpcyBtb2R1bGUgbGV0cyB0aGUgVU1MIHVzZXIKLSAgICAgICAgICBhY2Nlc3MgZmlsZXMgc3RvcmVkIG9uIHRoZSBob3N0LiAgSXQgZG9lcyBub3QgcmVxdWlyZSBhbnkKLSAgICAgICAgICBuZXR3b3JrIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgSG9zdCBhbmQgVU1MLiAgQW4gZXhhbXBsZSB1c2Ugb2YKLSAgICAgICAgICB0aGlzIG1pZ2h0IGJlOgotCi0gICAgICAgICAgbW91bnQgbm9uZSAvdG1wL2Zyb21ob3N0IC10IGhvc3RmcyAtbyAvdG1wL3VtbHNoYXJlCi0KLSAgICAgICAgICB3aGVyZSAvdG1wL2Zyb21ob3N0IGlzIGFuIGVtcHR5IGRpcmVjdG9yeSBpbnNpZGUgVU1MIGFuZAotICAgICAgICAgIC90bXAvdW1sc2hhcmUgaXMgYSBkaXJlY3Rvcnkgb24gdGhlIGhvc3Qgd2l0aCBmaWxlcyB0aGUgVU1MIHVzZXIKLSAgICAgICAgICB3aXNoZXMgdG8gYWNjZXNzLgotCi0gICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQotICAgICAgICAgIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC9ob3N0ZnMuaHRtbD4uCi0KLSAgICAgICAgICBJZiB5b3UnZCBsaWtlIHRvIGJlIGFibGUgdG8gd29yayB3aXRoIGZpbGVzIHN0b3JlZCBvbiB0aGUgaG9zdCwKLSAgICAgICAgICBzYXkgWSBvciBNIGhlcmU7IG90aGVyd2lzZSBzYXkgTi4KLQotY29uZmlnIEhQUEZTCi0JdHJpc3RhdGUgIkhvbmV5UG90IFByb2NGUyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIGhwcGZzIChIb25leVBvdCBQcm9jRlMpIGlzIGEgZmlsZXN5c3RlbSB3aGljaCBhbGxvd3MgVU1MIC9wcm9jCi0JICBlbnRyaWVzIHRvIGJlIG92ZXJyaWRkZW4sIHJlbW92ZWQsIG9yIGZhYnJpY2F0ZWQgZnJvbSB0aGUgaG9zdC4KLQkgIEl0cyBwdXJwb3NlIGlzIHRvIGFsbG93IGEgVU1MIHRvIGFwcGVhciB0byBiZSBhIHBoeXNpY2FsIG1hY2hpbmUKLQkgIGJ5IHJlbW92aW5nIG9yIGNoYW5naW5nIGFueXRoaW5nIGluIC9wcm9jIHdoaWNoIGdpdmVzIGF3YXkgdGhlCi0JICBpZGVudGl0eSBvZiBhIFVNTC4KLQotCSAgU2VlIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNmLm5ldC9vbGQvaHBwZnMuaHRtbD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLQkgIFlvdSBvbmx5IG5lZWQgdGhpcyBpZiB5b3UgYXJlIHNldHRpbmcgdXAgYSBVTUwgaG9uZXlwb3QuICBPdGhlcndpc2UsCi0JICBpdCBpcyBzYWZlIHRvIHNheSAnTicgaGVyZS4KLQotY29uZmlnIE1DT05TT0xFCi0JYm9vbCAiTWFuYWdlbWVudCBjb25zb2xlIgotCWRlZmF1bHQgeQotCWhlbHAKLSAgICAgICAgICBUaGUgdXNlciBtb2RlIGxpbnV4IG1hbmFnZW1lbnQgY29uc29sZSBpcyBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgdG8KLSAgICAgICAgICB0aGUga2VybmVsLCBzb21ld2hhdCBsaWtlIHRoZSBpMzg2IFN5c1JxIGludGVyZmFjZS4gIFNpbmNlIHRoZXJlIGlzCi0gICAgICAgICAgYSBmdWxsLWJsb3duIG9wZXJhdGluZyBzeXN0ZW0gcnVubmluZyB1bmRlciBldmVyeSB1c2VyIG1vZGUgbGludXgKLSAgICAgICAgICBpbnN0YW5jZSwgdGhlcmUgaXMgbXVjaCBncmVhdGVyIGZsZXhpYmlsaXR5IHBvc3NpYmxlIHRoYW4gd2l0aCB0aGUKLSAgICAgICAgICBTeXNScSBtZWNoYW5pc20uCi0KLSAgICAgICAgICBJZiB5b3UgYW5zd2VyICdZJyB0byB0aGlzIG9wdGlvbiwgdG8gdXNlIHRoaXMgZmVhdHVyZSwgeW91IG5lZWQgdGhlCi0gICAgICAgICAgbWNvbnNvbGUgY2xpZW50IChjYWxsZWQgdW1sX21jb25zb2xlKSB3aGljaCBpcyBwcmVzZW50IGluIENWUyBpbgotICAgICAgICAgIDIuNC41LTl1bSBhbmQgbGF0ZXIgKHBhdGggL3Rvb2xzL21jb25zb2xlKSwgYW5kIGlzIGFsc28gaW4gdGhlCi0gICAgICAgICAgZGlzdHJpYnV0aW9uIFJQTSBwYWNrYWdlIGluIDIuNC42IGFuZCBsYXRlci4KLQotICAgICAgICAgIEl0IGlzIHNhZmUgdG8gc2F5ICdZJyBoZXJlLgotCi1jb25maWcgTUFHSUNfU1lTUlEKLQlib29sICJNYWdpYyBTeXNScSBrZXkiCi0JZGVwZW5kcyBvbiBNQ09OU09MRQotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBoYXZlIHNvbWUgY29udHJvbCBvdmVyIHRoZSBzeXN0ZW0gZXZlbgotCSAgaWYgdGhlIHN5c3RlbSBjcmFzaGVzIGZvciBleGFtcGxlIGR1cmluZyBrZXJuZWwgZGVidWdnaW5nIChlLmcuLCB5b3UKLQkgIHdpbGwgYmUgYWJsZSB0byBmbHVzaCB0aGUgYnVmZmVyIGNhY2hlIHRvIGRpc2ssIHJlYm9vdCB0aGUgc3lzdGVtCi0JICBpbW1lZGlhdGVseSBvciBkdW1wIHNvbWUgc3RhdHVzIGluZm9ybWF0aW9uKS4gQSBrZXkgZm9yIGVhY2ggb2YgdGhlCi0JICBwb3NzaWJsZSByZXF1ZXN0cyBpcyBwcm92aWRlZC4KLQotCSAgVGhpcyBpcyB0aGUgZmVhdHVyZSBub3JtYWxseSBhY2NvbXBsaXNoZWQgYnkgcHJlc3NpbmcgYSBrZXkKLQkgIHdoaWxlIGhvbGRpbmcgU3lzUnEgKEFsdCtQcmludFNjcmVlbikuCi0KLQkgIE9uIFVNTCwgdGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgc2VuZGluZyBhICJzeXNycSIgY29tbWFuZCB3aXRoCi0JICBtY29uc29sZSwgZm9sbG93ZWQgYnkgdGhlIGxldHRlciBmb3IgdGhlIHJlcXVlc3RlZCBjb21tYW5kLgotCi0JICBUaGUga2V5cyBhcmUgZG9jdW1lbnRlZCBpbiA8ZmlsZTpEb2N1bWVudGF0aW9uL3N5c3JxLnR4dD4uIERvbid0IHNheSBZCi0JICB1bmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgdGhpcyBoYWNrIGRvZXMuCi0KLWNvbmZpZyBTTVAKLQlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gQlJPS0VOCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBVTUwgU01QIHN1cHBvcnQuCi0JICBJdCBpcyBOT1QgcmVsYXRlZCB0byBoYXZpbmcgYSByZWFsIFNNUCBib3guIE5vdCBkaXJlY3RseSwgYXQgbGVhc3QuCi0KLQkgIFVNTCBpbXBsZW1lbnRzIHZpcnR1YWwgU01QIGJ5IGFsbG93aW5nIGFzIG1hbnkgcHJvY2Vzc2VzIHRvIHJ1bgotCSAgc2ltdWx0YW5lb3VzbHkgb24gdGhlIGhvc3QgYXMgdGhlcmUgYXJlIHZpcnR1YWwgcHJvY2Vzc29ycyBjb25maWd1cmVkLgotCi0JICBPYnZpb3VzbHksIGlmIHRoZSBob3N0IGlzIGEgdW5pcHJvY2Vzc29yLCB0aG9zZSBwcm9jZXNzZXMgd2lsbAotCSAgdGltZXNoYXJlLCBidXQsIGluc2lkZSBVTUwsIHdpbGwgYXBwZWFyIHRvIGJlIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkuCi0JICBJZiB0aGUgaG9zdCBpcyBhIG11bHRpcHJvY2Vzc29yLCB0aGVuIFVNTCBwcm9jZXNzZXMgbWF5IHJ1bgotCSAgc2ltdWx0YW5lb3VzbHksIGRlcGVuZGluZyBvbiB0aGUgaG9zdCBzY2hlZHVsZXIuCi0KLQkgIFRoaXMsIGhvd2V2ZXIsIGlzIHN1cHBvcnRlZCBvbmx5IGluIFRUIG1vZGUuIFNvLCBpZiB5b3UgdXNlIHRoZSBTS0FTCi0JICBwYXRjaCBvbiB5b3VyIGhvc3QsIHN3aXRjaGluZyB0byBUVCBtb2RlIGFuZCBlbmFibGluZyBTTVAgdXN1YWxseQotCSAgZ2l2ZXMJeW91IHdvcnNlIHBlcmZvcm1hbmNlcy4KLQkgIEFsc28sIHNpbmNlIHRoZSBzdXBwb3J0IGZvciBTTVAgaGFzIGJlZW4gdW5kZXItZGV2ZWxvcGVkLCB0aGVyZSBjb3VsZAotCSAgYmUgc29tZSBidWdzIGJlaW5nIGV4cG9zZWQgYnkgZW5hYmxpbmcgU01QLgotCi0JICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvLCBzYXkgTi4KLQotY29uZmlnIE5SX0NQVVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIENQVXMgKDItMzIpIgotCXJhbmdlIDIgMzIKLQlkZXBlbmRzIG9uIFNNUAotCWRlZmF1bHQgIjMyIgotCi1jb25maWcgSElHSE1FTQotCWJvb2wgIkhpZ2htZW0gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uICE2NEJJVCAmJiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIHdhcyB1c2VkIHRvIGFsbG93IFVNTCB0byBydW4gd2l0aCBiaWcgYW1vdW50cyBvZiBtZW1vcnkuCi0JICBDdXJyZW50bHkgaXQgaXMgdW5zdGFibGUsIHNvIGlmIHVuc3VyZSBzYXkgTi4KLQotCSAgVG8gdXNlIGJpZyBhbW91bnRzIG9mIG1lbW9yeSwgaXQgaXMgcmVjb21tZW5kZWQgZW5hYmxlIHN0YXRpYwotCSAgbGlua2luZyAoaS5lLiBDT05GSUdfU1RBVElDX0xJTkspIC0gdGhpcyBzaG91bGQgYWxsb3cgdGhlCi0JICBndWVzdCB0byB1c2UgdXAgdG8gMi43NUcgb2YgbWVtb3J5LgotCi1jb25maWcgS0VSTkVMX1NUQUNLX09SREVSCi0JaW50ICJLZXJuZWwgc3RhY2sgc2l6ZSBvcmRlciIKLQlkZWZhdWx0IDEgaWYgNjRCSVQKLQlyYW5nZSAxIDEwIGlmIDY0QklUCi0JZGVmYXVsdCAwIGlmICE2NEJJVAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIHNpemUgb2YgVU1MIGtlcm5lbCBzdGFja3MuICBUaGV5IHdpbGwKLQkgIGJlIDEgPDwgb3JkZXIgcGFnZXMuICBUaGUgZGVmYXVsdCBpcyBPSyB1bmxlc3MgeW91J3JlIHJ1bm5pbmcgVmFsZ3JpbmQKLQkgIG9uIFVNTCwgaW4gd2hpY2ggY2FzZSwgc2V0IHRoaXMgdG8gMy4KLQotZW5kbWVudQotCi1zb3VyY2UgImluaXQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL2Jsb2NrL0tjb25maWciCi0KLXNvdXJjZSAiYXJjaC91bS9LY29uZmlnLmNoYXIiCi0KLXNvdXJjZSAiZHJpdmVycy9iYXNlL0tjb25maWciCi0KLXNvdXJjZSAibmV0L0tjb25maWciCi0KLXNvdXJjZSAiYXJjaC91bS9LY29uZmlnLm5ldCIKLQotc291cmNlICJkcml2ZXJzL25ldC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvY29ubmVjdG9yL0tjb25maWciCi0KLXNvdXJjZSAiZnMvS2NvbmZpZyIKLQotc291cmNlICJzZWN1cml0eS9LY29uZmlnIgotCi1zb3VyY2UgImNyeXB0by9LY29uZmlnIgotCi1zb3VyY2UgImxpYi9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvc2NzaS9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvbWQvS2NvbmZpZyIKLQotaWYgQlJPS0VOCi0Jc291cmNlICJkcml2ZXJzL210ZC9LY29uZmlnIgotZW5kaWYKLQotc291cmNlICJkcml2ZXJzL2xlZHMvS2NvbmZpZyIKLQotI1RoaXMgaXMganVzdCB0byBzaHV0IHVwIHNvbWUgS2NvbmZpZyB3YXJuaW5ncywgc28gbm8gcHJvbXB0LgotY29uZmlnIElOUFVUCi0JYm9vbAotCWRlZmF1bHQgbgotCi1zb3VyY2UgImFyY2gvdW0vS2NvbmZpZy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5jb21tb24gYi9hcmNoL3VtL0tjb25maWcuY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjA3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL0tjb25maWcuY29tbW9uCkBAIC0wLDAgKzEsNzcgQEAKK2NvbmZpZyBERUZDT05GSUdfTElTVAorCXN0cmluZworCW9wdGlvbiBkZWZjb25maWdfbGlzdAorCWRlZmF1bHQgImFyY2gvJEFSQ0gvZGVmY29uZmlnIgorCisjIFVNTCB1c2VzIHRoZSBnZW5lcmljIElSUSBzdWJzeXN0ZW0KK2NvbmZpZyBHRU5FUklDX0hBUkRJUlFTCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgVU1MCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgTU1VCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgTk9fSU9NRU0KKwlkZWZfYm9vbCB5CisKK21haW5tZW51ICJMaW51eC9Vc2VybW9kZSBLZXJuZWwgQ29uZmlndXJhdGlvbiIKKworY29uZmlnIElTQQorCWJvb2wKKworY29uZmlnIFNCVVMKKwlib29sCisKK2NvbmZpZyBQQ0kKKwlib29sCisKK2NvbmZpZyBQQ01DSUEKKwlib29sCisKKyMgWWV0IHRvIGRvIQorY29uZmlnIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBMT0NLREVQX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQorCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEdFTkVSSUNfQlVHCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQlVHCisKK2NvbmZpZyBHRU5FUklDX1RJTUUKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCisJYm9vbAorCWRlZmF1bHQgeQorCisjIFVzZWQgaW4ga2VybmVsL2lycS9tYW5hZ2UuYyBhbmQgaW5jbHVkZS9saW51eC9pcnEuaAorY29uZmlnIElSUV9SRUxFQVNFX01FVEhPRAorCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEhaCisJaW50CisJZGVmYXVsdCAxMDAKKworY29uZmlnIFNVQkFSQ0gKKwlzdHJpbmcKKwlvcHRpb24gZW52PSJTVUJBUkNIIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLmkzODYgYi9hcmNoL3VtL0tjb25maWcuaTM4NgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY1N2MxMS4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL0tjb25maWcuaTM4NgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLW1lbnUgIkhvc3QgcHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgotCi1zb3VyY2UgImFyY2gveDg2L0tjb25maWcuY3B1IgotCi1lbmRtZW51Ci0KLWNvbmZpZyBVTUxfWDg2Ci0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgWDg2XzMyCi0JYm9vbAotCWRlZmF1bHQgeQotICAJc2VsZWN0IEhBVkVfQU9VVAotCi1jb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KLQlkZWZfYm9vbCB5Ci0KLWNvbmZpZyA2NEJJVAotCWJvb2wKLQlkZWZhdWx0IG4KLQotY29uZmlnIDNfTEVWRUxfUEdUQUJMRVMKLQlib29sICJUaHJlZS1sZXZlbCBwYWdldGFibGVzIChFWFBFUklNRU5UQUwpIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JaGVscAotCVRocmVlLWxldmVsIHBhZ2V0YWJsZXMgd2lsbCBsZXQgVU1MIGhhdmUgbW9yZSB0aGFuIDRHIG9mIHBoeXNpY2FsCi0JbWVtb3J5LiAgQWxsIHRoZSBtZW1vcnkgdGhhdCBjYW4ndCBiZSBtYXBwZWQgZGlyZWN0bHkgd2lsbCBiZSB0cmVhdGVkCi0JYXMgaGlnaCBtZW1vcnkuCi0KLQlIb3dldmVyLCB0aGlzIGl0IGV4cGVyaW1lbnRhbCBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcywgc28gaWYgdW5zdXJlIHNheQotCU4gKG9uIHg4Ni02NCBpdCdzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCwgaW5zdGVhZCwgYXMgaXQncyBzYWZlIHRoZXJlKS4KLQotY29uZmlnIEFSQ0hfSEFTX1NDX1NJR05BTFMKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX1JFVVNFX0hPU1RfVlNZU0NBTExfQVJFQQotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEdFTkVSSUNfSFdFSUdIVAotCWJvb2wKLQlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5yZXN0IGIvYXJjaC91bS9LY29uZmlnLnJlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1Y2VhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vS2NvbmZpZy5yZXN0CkBAIC0wLDAgKzEsNDIgQEAKK3NvdXJjZSAiaW5pdC9LY29uZmlnIgorCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKK3NvdXJjZSAiZHJpdmVycy9ibG9jay9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvdW0vS2NvbmZpZy5jaGFyIgorCitzb3VyY2UgImRyaXZlcnMvYmFzZS9LY29uZmlnIgorCitzb3VyY2UgIm5ldC9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvdW0vS2NvbmZpZy5uZXQiCisKK3NvdXJjZSAiZHJpdmVycy9uZXQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnIgorCitzb3VyY2UgImZzL0tjb25maWciCisKK3NvdXJjZSAic2VjdXJpdHkvS2NvbmZpZyIKKworc291cmNlICJjcnlwdG8vS2NvbmZpZyIKKworc291cmNlICJsaWIvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3Njc2kvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL21kL0tjb25maWciCisKK2lmIEJST0tFTgorCXNvdXJjZSAiZHJpdmVycy9tdGQvS2NvbmZpZyIKK2VuZGlmCisKK3NvdXJjZSAiZHJpdmVycy9sZWRzL0tjb25maWciCisKKyNUaGlzIGlzIGp1c3QgdG8gc2h1dCB1cCBzb21lIEtjb25maWcgd2FybmluZ3MsIHNvIG5vIHByb21wdC4KK2NvbmZpZyBJTlBVVAorCWJvb2wKKwlkZWZhdWx0IG4KKworc291cmNlICJhcmNoL3VtL0tjb25maWcuZGVidWciCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcudW0gYi9hcmNoL3VtL0tjb25maWcudW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyYjhkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vS2NvbmZpZy51bQpAQCAtMCwwICsxLDE0OSBAQAorY29uZmlnIFNUQVRJQ19MSU5LCisJYm9vbCAiRm9yY2UgYSBzdGF0aWMgbGluayIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gZm9yY2UgYSBzdGF0aWMgbGluayBvZiBVTUwuCisJICBOb3JtYWxseSwgVU1MIGlzIGxpbmtlZCBhcyBhIHNoYXJlZCBiaW5hcnkuICBUaGlzIGlzIGluY29udmVuaWVudCBmb3IKKwkgIHVzZSBpbiBhIGNocm9vdCBqYWlsLiAgU28sIGlmIHlvdSBpbnRlbmQgdG8gcnVuIFVNTCBpbnNpZGUgYSBjaHJvb3QsCisJICB5b3UgcHJvYmFibHkgd2FudCB0byBzYXkgWSBoZXJlLgorCSAgQWRkaXRpb25hbGx5LCB0aGlzIG9wdGlvbiBlbmFibGVzIHVzaW5nIGhpZ2hlciBtZW1vcnkgc3BhY2VzICh1cCB0bworCSAgMi43NUcpIGZvciBVTUwuCisKK3NvdXJjZSAibW0vS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL3RpbWUvS2NvbmZpZyIKKworY29uZmlnIExEX1NDUklQVF9TVEFUSUMKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBTVEFUSUNfTElOSworCitjb25maWcgTERfU0NSSVBUX0RZTgorCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uICFMRF9TQ1JJUFRfU1RBVElDCisKK3NvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCisKK2NvbmZpZyBIT1NURlMKKwl0cmlzdGF0ZSAiSG9zdCBmaWxlc3lzdGVtIgorCWhlbHAKKyAgICAgICAgICBXaGlsZSB0aGUgVXNlci1Nb2RlIExpbnV4IHBvcnQgdXNlcyBpdHMgb3duIHJvb3QgZmlsZSBzeXN0ZW0gZm9yCisgICAgICAgICAgYm9vdGluZyBhbmQgbm9ybWFsIGZpbGUgYWNjZXNzLCB0aGlzIG1vZHVsZSBsZXRzIHRoZSBVTUwgdXNlcgorICAgICAgICAgIGFjY2VzcyBmaWxlcyBzdG9yZWQgb24gdGhlIGhvc3QuICBJdCBkb2VzIG5vdCByZXF1aXJlIGFueQorICAgICAgICAgIG5ldHdvcmsgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBIb3N0IGFuZCBVTUwuICBBbiBleGFtcGxlIHVzZSBvZgorICAgICAgICAgIHRoaXMgbWlnaHQgYmU6CisKKyAgICAgICAgICBtb3VudCBub25lIC90bXAvZnJvbWhvc3QgLXQgaG9zdGZzIC1vIC90bXAvdW1sc2hhcmUKKworICAgICAgICAgIHdoZXJlIC90bXAvZnJvbWhvc3QgaXMgYW4gZW1wdHkgZGlyZWN0b3J5IGluc2lkZSBVTUwgYW5kCisgICAgICAgICAgL3RtcC91bWxzaGFyZSBpcyBhIGRpcmVjdG9yeSBvbiB0aGUgaG9zdCB3aXRoIGZpbGVzIHRoZSBVTUwgdXNlcgorICAgICAgICAgIHdpc2hlcyB0byBhY2Nlc3MuCisKKyAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisgICAgICAgICAgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2hvc3Rmcy5odG1sPi4KKworICAgICAgICAgIElmIHlvdSdkIGxpa2UgdG8gYmUgYWJsZSB0byB3b3JrIHdpdGggZmlsZXMgc3RvcmVkIG9uIHRoZSBob3N0LAorICAgICAgICAgIHNheSBZIG9yIE0gaGVyZTsgb3RoZXJ3aXNlIHNheSBOLgorCitjb25maWcgSFBQRlMKKwl0cmlzdGF0ZSAiSG9uZXlQb3QgUHJvY0ZTIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgaHBwZnMgKEhvbmV5UG90IFByb2NGUykgaXMgYSBmaWxlc3lzdGVtIHdoaWNoIGFsbG93cyBVTUwgL3Byb2MKKwkgIGVudHJpZXMgdG8gYmUgb3ZlcnJpZGRlbiwgcmVtb3ZlZCwgb3IgZmFicmljYXRlZCBmcm9tIHRoZSBob3N0LgorCSAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgYSBVTUwgdG8gYXBwZWFyIHRvIGJlIGEgcGh5c2ljYWwgbWFjaGluZQorCSAgYnkgcmVtb3Zpbmcgb3IgY2hhbmdpbmcgYW55dGhpbmcgaW4gL3Byb2Mgd2hpY2ggZ2l2ZXMgYXdheSB0aGUKKwkgIGlkZW50aXR5IG9mIGEgVU1MLgorCisJICBTZWUgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc2YubmV0L29sZC9ocHBmcy5odG1sPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCSAgWW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSBhcmUgc2V0dGluZyB1cCBhIFVNTCBob25leXBvdC4gIE90aGVyd2lzZSwKKwkgIGl0IGlzIHNhZmUgdG8gc2F5ICdOJyBoZXJlLgorCitjb25maWcgTUNPTlNPTEUKKwlib29sICJNYW5hZ2VtZW50IGNvbnNvbGUiCisJZGVmYXVsdCB5CisJaGVscAorICAgICAgICAgIFRoZSB1c2VyIG1vZGUgbGludXggbWFuYWdlbWVudCBjb25zb2xlIGlzIGEgbG93LWxldmVsIGludGVyZmFjZSB0bworICAgICAgICAgIHRoZSBrZXJuZWwsIHNvbWV3aGF0IGxpa2UgdGhlIGkzODYgU3lzUnEgaW50ZXJmYWNlLiAgU2luY2UgdGhlcmUgaXMKKyAgICAgICAgICBhIGZ1bGwtYmxvd24gb3BlcmF0aW5nIHN5c3RlbSBydW5uaW5nIHVuZGVyIGV2ZXJ5IHVzZXIgbW9kZSBsaW51eAorICAgICAgICAgIGluc3RhbmNlLCB0aGVyZSBpcyBtdWNoIGdyZWF0ZXIgZmxleGliaWxpdHkgcG9zc2libGUgdGhhbiB3aXRoIHRoZQorICAgICAgICAgIFN5c1JxIG1lY2hhbmlzbS4KKworICAgICAgICAgIElmIHlvdSBhbnN3ZXIgJ1knIHRvIHRoaXMgb3B0aW9uLCB0byB1c2UgdGhpcyBmZWF0dXJlLCB5b3UgbmVlZCB0aGUKKyAgICAgICAgICBtY29uc29sZSBjbGllbnQgKGNhbGxlZCB1bWxfbWNvbnNvbGUpIHdoaWNoIGlzIHByZXNlbnQgaW4gQ1ZTIGluCisgICAgICAgICAgMi40LjUtOXVtIGFuZCBsYXRlciAocGF0aCAvdG9vbHMvbWNvbnNvbGUpLCBhbmQgaXMgYWxzbyBpbiB0aGUKKyAgICAgICAgICBkaXN0cmlidXRpb24gUlBNIHBhY2thZ2UgaW4gMi40LjYgYW5kIGxhdGVyLgorCisgICAgICAgICAgSXQgaXMgc2FmZSB0byBzYXkgJ1knIGhlcmUuCisKK2NvbmZpZyBNQUdJQ19TWVNSUQorCWJvb2wgIk1hZ2ljIFN5c1JxIGtleSIKKwlkZXBlbmRzIG9uIE1DT05TT0xFCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGhhdmUgc29tZSBjb250cm9sIG92ZXIgdGhlIHN5c3RlbSBldmVuCisJICBpZiB0aGUgc3lzdGVtIGNyYXNoZXMgZm9yIGV4YW1wbGUgZHVyaW5nIGtlcm5lbCBkZWJ1Z2dpbmcgKGUuZy4sIHlvdQorCSAgd2lsbCBiZSBhYmxlIHRvIGZsdXNoIHRoZSBidWZmZXIgY2FjaGUgdG8gZGlzaywgcmVib290IHRoZSBzeXN0ZW0KKwkgIGltbWVkaWF0ZWx5IG9yIGR1bXAgc29tZSBzdGF0dXMgaW5mb3JtYXRpb24pLiBBIGtleSBmb3IgZWFjaCBvZiB0aGUKKwkgIHBvc3NpYmxlIHJlcXVlc3RzIGlzIHByb3ZpZGVkLgorCisJICBUaGlzIGlzIHRoZSBmZWF0dXJlIG5vcm1hbGx5IGFjY29tcGxpc2hlZCBieSBwcmVzc2luZyBhIGtleQorCSAgd2hpbGUgaG9sZGluZyBTeXNScSAoQWx0K1ByaW50U2NyZWVuKS4KKworCSAgT24gVU1MLCB0aGlzIGlzIGFjY29tcGxpc2hlZCBieSBzZW5kaW5nIGEgInN5c3JxIiBjb21tYW5kIHdpdGgKKwkgIG1jb25zb2xlLCBmb2xsb3dlZCBieSB0aGUgbGV0dGVyIGZvciB0aGUgcmVxdWVzdGVkIGNvbW1hbmQuCisKKwkgIFRoZSBrZXlzIGFyZSBkb2N1bWVudGVkIGluIDxmaWxlOkRvY3VtZW50YXRpb24vc3lzcnEudHh0Pi4gRG9uJ3Qgc2F5IFkKKwkgIHVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB0aGlzIGhhY2sgZG9lcy4KKworY29uZmlnIFNNUAorCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBCUk9LRU4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIFVNTCBTTVAgc3VwcG9ydC4KKwkgIEl0IGlzIE5PVCByZWxhdGVkIHRvIGhhdmluZyBhIHJlYWwgU01QIGJveC4gTm90IGRpcmVjdGx5LCBhdCBsZWFzdC4KKworCSAgVU1MIGltcGxlbWVudHMgdmlydHVhbCBTTVAgYnkgYWxsb3dpbmcgYXMgbWFueSBwcm9jZXNzZXMgdG8gcnVuCisJICBzaW11bHRhbmVvdXNseSBvbiB0aGUgaG9zdCBhcyB0aGVyZSBhcmUgdmlydHVhbCBwcm9jZXNzb3JzIGNvbmZpZ3VyZWQuCisKKwkgIE9idmlvdXNseSwgaWYgdGhlIGhvc3QgaXMgYSB1bmlwcm9jZXNzb3IsIHRob3NlIHByb2Nlc3NlcyB3aWxsCisJICB0aW1lc2hhcmUsIGJ1dCwgaW5zaWRlIFVNTCwgd2lsbCBhcHBlYXIgdG8gYmUgcnVubmluZyBzaW11bHRhbmVvdXNseS4KKwkgIElmIHRoZSBob3N0IGlzIGEgbXVsdGlwcm9jZXNzb3IsIHRoZW4gVU1MIHByb2Nlc3NlcyBtYXkgcnVuCisJICBzaW11bHRhbmVvdXNseSwgZGVwZW5kaW5nIG9uIHRoZSBob3N0IHNjaGVkdWxlci4KKworCSAgVGhpcywgaG93ZXZlciwgaXMgc3VwcG9ydGVkIG9ubHkgaW4gVFQgbW9kZS4gU28sIGlmIHlvdSB1c2UgdGhlIFNLQVMKKwkgIHBhdGNoIG9uIHlvdXIgaG9zdCwgc3dpdGNoaW5nIHRvIFRUIG1vZGUgYW5kIGVuYWJsaW5nIFNNUCB1c3VhbGx5CisJICBnaXZlcwl5b3Ugd29yc2UgcGVyZm9ybWFuY2VzLgorCSAgQWxzbywgc2luY2UgdGhlIHN1cHBvcnQgZm9yIFNNUCBoYXMgYmVlbiB1bmRlci1kZXZlbG9wZWQsIHRoZXJlIGNvdWxkCisJICBiZSBzb21lIGJ1Z3MgYmVpbmcgZXhwb3NlZCBieSBlbmFibGluZyBTTVAuCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8sIHNheSBOLgorCitjb25maWcgTlJfQ1BVUworCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi0zMikiCisJcmFuZ2UgMiAzMgorCWRlcGVuZHMgb24gU01QCisJZGVmYXVsdCAiMzIiCisKK2NvbmZpZyBISUdITUVNCisJYm9vbCAiSGlnaG1lbSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gITY0QklUICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgd2FzIHVzZWQgdG8gYWxsb3cgVU1MIHRvIHJ1biB3aXRoIGJpZyBhbW91bnRzIG9mIG1lbW9yeS4KKwkgIEN1cnJlbnRseSBpdCBpcyB1bnN0YWJsZSwgc28gaWYgdW5zdXJlIHNheSBOLgorCisJICBUbyB1c2UgYmlnIGFtb3VudHMgb2YgbWVtb3J5LCBpdCBpcyByZWNvbW1lbmRlZCBlbmFibGUgc3RhdGljCisJICBsaW5raW5nIChpLmUuIENPTkZJR19TVEFUSUNfTElOSykgLSB0aGlzIHNob3VsZCBhbGxvdyB0aGUKKwkgIGd1ZXN0IHRvIHVzZSB1cCB0byAyLjc1RyBvZiBtZW1vcnkuCisKK2NvbmZpZyBLRVJORUxfU1RBQ0tfT1JERVIKKwlpbnQgIktlcm5lbCBzdGFjayBzaXplIG9yZGVyIgorCWRlZmF1bHQgMSBpZiA2NEJJVAorCXJhbmdlIDEgMTAgaWYgNjRCSVQKKwlkZWZhdWx0IDAgaWYgITY0QklUCisJaGVscAorCSAgVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBVTUwga2VybmVsIHN0YWNrcy4gIFRoZXkgd2lsbAorCSAgYmUgMSA8PCBvcmRlciBwYWdlcy4gIFRoZSBkZWZhdWx0IGlzIE9LIHVubGVzcyB5b3UncmUgcnVubmluZyBWYWxncmluZAorCSAgb24gVU1MLCBpbiB3aGljaCBjYXNlLCBzZXQgdGhpcyB0byAzLgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLng4NiBiL2FyY2gvdW0vS2NvbmZpZy54ODYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlMzI4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vS2NvbmZpZy54ODYKQEAgLTAsMCArMSw1NiBAQAorc291cmNlICJhcmNoL3VtL0tjb25maWcuY29tbW9uIgorCittZW51ICJVTUwtc3BlY2lmaWMgb3B0aW9ucyIKKworbWVudSAiSG9zdCBwcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCisKK3NvdXJjZSAiYXJjaC94ODYvS2NvbmZpZy5jcHUiCisKK2VuZG1lbnUKKworY29uZmlnIFVNTF9YODYKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyA2NEJJVAorCWJvb2wKKwlkZWZhdWx0IFNVQkFSQ0ggPSAieDg2XzY0IgorCitjb25maWcgWDg2XzMyCisJZGVmX2Jvb2wgITY0QklUCisJc2VsZWN0IEhBVkVfQU9VVAorCitjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KKwlkZWZfYm9vbCBYODZfWEFERAorCitjb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSworCWRlZl9ib29sICFYODZfWEFERAorCitjb25maWcgM19MRVZFTF9QR1RBQkxFUworCWJvb2wgIlRocmVlLWxldmVsIHBhZ2V0YWJsZXMgKEVYUEVSSU1FTlRBTCkiIGlmICE2NEJJVAorCWRlZmF1bHQgNjRCSVQKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwlUaHJlZS1sZXZlbCBwYWdldGFibGVzIHdpbGwgbGV0IFVNTCBoYXZlIG1vcmUgdGhhbiA0RyBvZiBwaHlzaWNhbAorCW1lbW9yeS4gIEFsbCB0aGUgbWVtb3J5IHRoYXQgY2FuJ3QgYmUgbWFwcGVkIGRpcmVjdGx5IHdpbGwgYmUgdHJlYXRlZAorCWFzIGhpZ2ggbWVtb3J5LgorCisJSG93ZXZlciwgdGhpcyBpdCBleHBlcmltZW50YWwgb24gMzItYml0IGFyY2hpdGVjdHVyZXMsIHNvIGlmIHVuc3VyZSBzYXkKKwlOIChvbiB4ODYtNjQgaXQncyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQsIGluc3RlYWQsIGFzIGl0J3Mgc2FmZSB0aGVyZSkuCisKK2NvbmZpZyBBUkNIX0hBU19TQ19TSUdOQUxTCisJZGVmX2Jvb2wgITY0QklUCisKK2NvbmZpZyBBUkNIX1JFVVNFX0hPU1RfVlNZU0NBTExfQVJFQQorCWRlZl9ib29sICE2NEJJVAorCitjb25maWcgU01QX0JST0tFTgorCWRlZl9ib29sIDY0QklUCisKK2NvbmZpZyBHRU5FUklDX0hXRUlHSFQKKwlkZWZfYm9vbCB5CisKK3NvdXJjZSAiYXJjaC91bS9LY29uZmlnLnVtIgorCitlbmRtZW51CisKK3NvdXJjZSAiYXJjaC91bS9LY29uZmlnLnJlc3QiCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcueDg2XzY0IGIvYXJjaC91bS9LY29uZmlnLng4Nl82NApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiMzQwNy4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL0tjb25maWcueDg2XzY0CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotCi1tZW51ICJIb3N0IHByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKLQotc291cmNlICJhcmNoL3g4Ni9LY29uZmlnLmNwdSIKLQotZW5kbWVudQotCi1jb25maWcgVU1MX1g4NgotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIDY0QklUCi0JYm9vbAotCWRlZmF1bHQgeQotCi0jWFhYOiB0aGlzIGlzIHNvIGluIHRoZSB1bmRlcmx5aW5nIGFyY2gsIGJ1dCBpdCdzIHdyb25nISEhCi1jb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSwotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIDNfTEVWRUxfUEdUQUJMRVMKLSAgICAgICBib29sCi0gICAgICAgZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX0hBU19TQ19TSUdOQUxTCi0JYm9vbAotCWRlZmF1bHQgbgotCi1jb25maWcgQVJDSF9SRVVTRV9IT1NUX1ZTWVNDQUxMX0FSRUEKLQlib29sCi0JZGVmYXVsdCBuCi0KLWNvbmZpZyBTTVBfQlJPS0VOCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19IV0VJR0hUCi0JYm9vbAotCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZSBiL2FyY2gvdW0vTWFrZWZpbGUKaW5kZXggY2E0MDM5Ny4uZDk0NGMzNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZQorKysgYi9hcmNoL3VtL01ha2VmaWxlCkBAIC0xOCwyOCArMTgsMTYgQEAKIAkJCSAgICQoQVJDSF9ESVIpL2RyaXZlcnMvCQlcCiAJCQkgICAkKEFSQ0hfRElSKS9vcy0kKE9TKS8KIAotIyBIYXZlIHRvIHByZWNlZGUgdGhlIGluY2x1ZGUgYmVjYXVzZSB0aGUgaW5jbHVkZWQgTWFrZWZpbGVzIHJlZmVyZW5jZSB0aGVtLgotU1lNTElOS19IRUFERVJTIDo9IGFyY2hwYXJhbS5oIHN5c3RlbS5oIHNpZ2NvbnRleHQuaCBwcm9jZXNzb3IuaCBwdHJhY2UuaCBcCi0JbW9kdWxlLmggdm0tZmxhZ3MuaCBlbGYuaCBob3N0X2xkdC5oCi1TWU1MSU5LX0hFQURFUlMgOj0gJChmb3JlYWNoIGhlYWRlciwkKFNZTUxJTktfSEVBREVSUyksaW5jbHVkZS9hc20tdW0vJChoZWFkZXIpKQotCi0jIFhYWDogVGhlICJvcyIgc3ltbGluayBpcyBvbmx5IHVzZWQgYnkgYXJjaC91bS9pbmNsdWRlL29zLmgsIHdoaWNoIGluY2x1ZGVzCi0jIC4uL29zL2luY2x1ZGUvZmlsZS5oCi0jCi0jIFRoZXNlIGFyZSBjbGVhbmVkIHVwIGR1cmluZyBtcnByb3Blci4gUGxlYXNlIERPIE5PVCBmaXggaXQgYWdhaW4sIHRoaXMgaXMKLSMgdGhlIENvcnJlY3QgVGhpbmcodG0pIHRvIGRvIQotQVJDSF9TWU1MSU5LUyA9IGluY2x1ZGUvYXNtLXVtL2FyY2ggJChBUkNIX0RJUikvaW5jbHVkZS9zeXNkZXAgJChBUkNIX0RJUikvb3MgXAotCSQoU1lNTElOS19IRUFERVJTKSAkKEFSQ0hfRElSKS9pbmNsdWRlL3VtbC1jb25maWcuaAotCi1NT0RFX0lOQ0xVREUJKz0gLUkkKHNyY3RyZWUpLyQoQVJDSF9ESVIpL2luY2x1ZGUvc2thcworTU9ERV9JTkNMVURFCSs9IC1JJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlL3NoYXJlZC9za2FzCiAKIGluY2x1ZGUgJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9NYWtlZmlsZS1za2FzCiAKLUFSQ0hfSU5DTFVERQk6PSAtSSQoQVJDSF9ESVIpL2luY2x1ZGUKK0FSQ0hfSU5DTFVERQk6PSAtSSQoc3JjdHJlZSkvJChBUkNIX0RJUikvaW5jbHVkZS9zaGFyZWQKK0FSQ0hfSU5DTFVERQkrPSAtSSQoc3JjdHJlZSkvJChBUkNIX0RJUikvc3lzLSQoU1VCQVJDSCkvc2hhcmVkCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCi1BUkNIX0lOQ0xVREUJKz0gLUkkKHNyY3RyZWUpLyQoQVJDSF9ESVIpL2luY2x1ZGUKK0FSQ0hfSU5DTFVERQkrPSAtSSQoQVJDSF9ESVIpL2luY2x1ZGUvc2hhcmVkICMgZm9yIHR3byBnZW5lcmF0ZWQgZmlsZXMKIGVuZGlmCi1TWVNfRElSCQk6PSAkKEFSQ0hfRElSKS9pbmNsdWRlL3N5c2RlcC0kKFNVQkFSQ0gpCitLQlVJTERfQ1BQRkxBR1MgKz0gLUkkKHNyY3RyZWUpLyQoQVJDSF9ESVIpL3N5cy0kKFNVQkFSQ0gpCiAKICMgLUR2bWFwPWtlcm5lbF92bWFwIHByZXZlbnRzIGFueXRoaW5nIGZyb20gcmVmZXJlbmNpbmcgdGhlIGxpYnBjYXAubyBzeW1ib2wgc28KICMgbmFtZWQgLSBpdCdzIGEgY29tbW9uIHN5bWJvbCBpbiBsaWJwY2FwLCBzbyB3ZSBnZXQgYSBiaW5hcnkgd2hpY2ggY3Jhc2hlcy4KQEAgLTY1LDYgKzUzLDggQEAKICNUaGlzIHdpbGwgYWRqdXN0ICpGTEFHUyBhY2NvcmRpbmdseSB0byB0aGUgcGxhdGZvcm0uCiBpbmNsdWRlICQoc3JjdHJlZSkvJChBUkNIX0RJUikvTWFrZWZpbGUtb3MtJChPUykKIAorS0JVSUxEX0NQUEZMQUdTICs9IC1JJChzcmN0cmVlKS9hcmNoLyQoSEVBREVSX0FSQ0gpL2luY2x1ZGUKKwogIyAtRGVycm5vPWtlcm5lbF9lcnJubyAtIFRoaXMgdHVybnMgYWxsIGtlcm5lbCByZWZlcmVuY2VzIHRvIGVycm5vIGludG8KICMga2VybmVsX2Vycm5vIHRvIHNlcGFyYXRlIHRoZW0gZnJvbSB0aGUgbGliYyBlcnJuby4gIFRoaXMgYWxsb3dzIC1mbm8tY29tbW9uCiAjIGluIEtCVUlMRF9DRkxBR1MuICBPdGhlcndpc2UsIGl0IHdvdWxkIGNhdXNlIGxkIHRvIGNvbXBsYWluIGFib3V0IHRoZSB0d28gZGlmZmVyZW50CkBAIC05MywxNCArODMsMTAgQEAKICAgZWNobyAnCQkgICBmaW5kIGluIHRoZSBrZXJuZWwgcm9vdC4nCiBlbmRlZgogCi1pZm5lcSAoJChLQlVJTERfU1JDKSwpCi0kKHNoZWxsIG1rZGlyIC1wICQoQVJDSF9ESVIpICYmIGxuIC1mc24gJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9LY29uZmlnLiQoU1VCQVJDSCkgJChBUkNIX0RJUikvS2NvbmZpZy5hcmNoKQotZWxzZQotJChzaGVsbCBjZCAkKEFSQ0hfRElSKSAmJiBsbiAtc2YgS2NvbmZpZy4kKFNVQkFSQ0gpIEtjb25maWcuYXJjaCkKLWVuZGlmCitLQlVJTERfS0NPTkZJRyA6PSBhcmNoL3VtL0tjb25maWcuJChIRUFERVJfQVJDSCkKIAotYXJjaHByZXBhcmU6ICQoQVJDSF9TWU1MSU5LUykgJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oCi1wcmVwYXJlOiAkKEFSQ0hfRElSKS9pbmNsdWRlL2tlcm5fY29uc3RhbnRzLmgKK2FyY2hwcmVwYXJlOiAkKEFSQ0hfRElSKS9pbmNsdWRlL3NoYXJlZC91c2VyX2NvbnN0YW50cy5oCitwcmVwYXJlOiAkKEFSQ0hfRElSKS9pbmNsdWRlL3NoYXJlZC9rZXJuX2NvbnN0YW50cy5oCiAKIExJTkstJChDT05GSUdfTERfU0NSSVBUX1NUQVRJQykgKz0gLXN0YXRpYwogTElOSy0kKENPTkZJR19MRF9TQ1JJUFRfRFlOKSArPSAtV2wsLXJwYXRoLC9saWIKQEAgLTEzMiw2MiArMTE4LDE5IEBACiAKICMgV2hlbiBjbGVhbmluZyB3ZSBkb24ndCBpbmNsdWRlIC5jb25maWcsIHNvIHdlIGRvbid0IGluY2x1ZGUKICMgVFQgb3Igc2thcyBtYWtlZmlsZXMgYW5kIGRvbid0IGNsZWFuIHNrYXNfcHRyZWdzLmguCi1DTEVBTl9GSUxFUyArPSBsaW51eCB4LmkgZ21vbi5vdXQgJChBUkNIX0RJUikvaW5jbHVkZS91bWwtY29uZmlnLmggXAotCSQoQVJDSF9ESVIpL2luY2x1ZGUvdXNlcl9jb25zdGFudHMuaCBcCi0JJChBUkNIX0RJUikvaW5jbHVkZS9rZXJuX2NvbnN0YW50cy5oICQoQVJDSF9ESVIpL0tjb25maWcuYXJjaAotCi1NUlBST1BFUl9GSUxFUyArPSAkKEFSQ0hfU1lNTElOS1MpCitDTEVBTl9GSUxFUyArPSBsaW51eCB4LmkgZ21vbi5vdXQgXAorCSQoQVJDSF9ESVIpL2luY2x1ZGUvc2hhcmVkL3VzZXJfY29uc3RhbnRzLmggXAorCSQoQVJDSF9ESVIpL2luY2x1ZGUvc2hhcmVkL2tlcm5fY29uc3RhbnRzLmgKIAogYXJjaGNsZWFuOgogCUBmaW5kIC4gXCggLW5hbWUgJyouYmInIC1vIC1uYW1lICcqLmJiZycgLW8gLW5hbWUgJyouZGEnIFwKIAkJLW8gLW5hbWUgJyouZ2NvdicgXCkgLXR5cGUgZiAtcHJpbnQgfCB4YXJncyBybSAtZgogCi0kKFNZTUxJTktfSEVBREVSUyk6Ci0JQGVjaG8gJyAgU1lNTElOSyAkQCcKLWlmbmVxICgkKEtCVUlMRF9TUkMpLCkKLQkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9pbmNsdWRlL2FzbS11bQotCSQoUSlsbiAtZnNuICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tdW0vJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLSQoU1VCQVJDSCkkKHN1ZmZpeCAkQCkgJEAKLWVsc2UKLQkkKFEpY2QgJChzcmN0cmVlKS8kKGRpciAkQCkgOyBcCi0JbG4gLXNmICQoYmFzZW5hbWUgJChub3RkaXIgJEApKS0kKFNVQkFSQ0gpJChzdWZmaXggJEApICQobm90ZGlyICRAKQotZW5kaWYKLQotaW5jbHVkZS9hc20tdW0vYXJjaDoKLQlAZWNobyAnICBTWU1MSU5LICRAJwotaWZuZXEgKCQoS0JVSUxEX1NSQyksKQotCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL2luY2x1ZGUvYXNtLXVtCi0JJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKEhFQURFUl9BUkNIKSBpbmNsdWRlL2FzbS11bS9hcmNoCi1lbHNlCi0JJChRKWNkICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tdW0gJiYgbG4gLWZzbiAuLi9hc20tJChIRUFERVJfQVJDSCkgYXJjaAotZW5kaWYKLQotJChvYmp0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlOgorJChvYmp0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlL3NoYXJlZDoKIAlAZWNobyAnICBNS0RJUiAkQCcKIAkkKFEpbWtkaXIgLXAgJEAKIAotJChBUkNIX0RJUikvaW5jbHVkZS9zeXNkZXA6ICQob2JqdHJlZSkvJChBUkNIX0RJUikvaW5jbHVkZQotCUBlY2hvICcgIFNZTUxJTksgJEAnCi1pZm5lcSAoJChLQlVJTERfU1JDKSwpCi0JJChRKWxuIC1mc24gJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlL3N5c2RlcC0kKFNVQkFSQ0gpICQoQVJDSF9ESVIpL2luY2x1ZGUvc3lzZGVwCi1lbHNlCi0JJChRKWNkICQoQVJDSF9ESVIpL2luY2x1ZGUgJiYgbG4gLWZzbiBzeXNkZXAtJChTVUJBUkNIKSBzeXNkZXAKLWVuZGlmCi0KLSQoQVJDSF9ESVIpL29zOgotCUBlY2hvICcgIFNZTUxJTksgJEAnCi1pZm5lcSAoJChLQlVJTERfU1JDKSwpCi0JJChRKWxuIC1mc24gJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9vcy0kKE9TKSAkKEFSQ0hfRElSKS9vcwotZWxzZQotCSQoUSljZCAkKEFSQ0hfRElSKSAmJiBsbiAtZnNuIG9zLSQoT1MpIG9zCi1lbmRpZgotCiAjIEdlbmVyYXRlZCBmaWxlcwotZGVmaW5lIGZpbGVjaGtfdW1sY29uZmlnCi0Jc2VkICdzLyBDT05GSUcvIFVNTF9DT05GSUcvJwotZW5kZWYKLQotJChBUkNIX0RJUikvaW5jbHVkZS91bWwtY29uZmlnLmggOiBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgKLQkkKGNhbGwgZmlsZWNoayx1bWxjb25maWcpCiAKICQoQVJDSF9ESVIpL3N5cy0kKFNVQkFSQ0gpL3VzZXItb2Zmc2V0cy5zOiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoQVJDSF9ESVIpL3N5cy0kKFNVQkFSQ0gpICRACkBAIC0yMDUsMTEgKzE0OCwxMSBAQAogICAgICAgICAgZWNobyAiIjsgKQogZW5kZWYKIAotJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oOiAkKEFSQ0hfRElSKS9zeXMtJChTVUJBUkNIKS91c2VyLW9mZnNldHMucworJChBUkNIX0RJUikvaW5jbHVkZS9zaGFyZWQvdXNlcl9jb25zdGFudHMuaDogJChBUkNIX0RJUikvc3lzLSQoU1VCQVJDSCkvdXNlci1vZmZzZXRzLnMKIAkkKGNhbGwgZmlsZWNoayxnZW4tYXNtLW9mZnNldHMpCiAKLSQoQVJDSF9ESVIpL2luY2x1ZGUva2Vybl9jb25zdGFudHMuaDogJChvYmp0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlCiskKEFSQ0hfRElSKS9pbmNsdWRlL3NoYXJlZC9rZXJuX2NvbnN0YW50cy5oOiAkKG9ianRyZWUpLyQoQVJDSF9ESVIpL2luY2x1ZGUvc2hhcmVkCiAJQGVjaG8gJyAgU1lNTElOSyAkQCcKLQkkKFEpbG4gLXNmIC4uLy4uLy4uL2luY2x1ZGUvYXNtLXVtL2FzbS1vZmZzZXRzLmggJEAKKwkkKFEpbG4gLXNmIC4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmggJEAKIAotZXhwb3J0IFNVQkFSQ0ggVVNFUl9DRkxBR1MgQ0ZMQUdTX05PX0hBUkRFTklORyBPUyBIRUFERVJfQVJDSAorZXhwb3J0IFNVQkFSQ0ggVVNFUl9DRkxBR1MgQ0ZMQUdTX05PX0hBUkRFTklORyBPUyBIRUFERVJfQVJDSCBERVZfTlVMTF9QQVRICmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlLW9zLUxpbnV4IGIvYXJjaC91bS9NYWtlZmlsZS1vcy1MaW51eAppbmRleCA1Mjg1OTQ4Li4yYzhhNTk4IDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLW9zLUxpbnV4CisrKyBiL2FyY2gvdW0vTWFrZWZpbGUtb3MtTGludXgKQEAgLTYsMyArNiw0IEBACiAjIFRvIGdldCBhIGRlZmluaXRpb24gb2YgRl9TRVRTSUcKIFVTRVJfQ0ZMQUdTICs9IC1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFNjRfU09VUkNFCiBLQlVJTERfQ0ZMQUdTICs9IC1EX0xBUkdFRklMRTY0X1NPVVJDRQorREVWX05VTExfUEFUSCA9IFwiL2Rldi9udWxsXCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9NYWtlZmlsZSBiL2FyY2gvdW0vZHJpdmVycy9NYWtlZmlsZQppbmRleCBkMjgzZTdiLi4xZDliNmFlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9kcml2ZXJzL01ha2VmaWxlCkBAIC02Miw1ICs2Miw2IEBACiAKICMgcGNhcF91c2VyLm8gbXVzdCBiZSBhZGRlZCBleHBsaWNpdGx5LgogVVNFUl9PQkpTIDo9IGZkLm8gbnVsbC5vIHB0eS5vIHR0eS5vIHh0ZXJtLm8gc2xpcF9jb21tb24ubyBwY2FwX3VzZXIubyB2ZGVfdXNlci5vCitDRkxBR1NfbnVsbC5vID0gLURERVZfTlVMTD0kKERFVl9OVUxMX1BBVEgpCiAKIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IGI1OGZiODkuLjBhODY4MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC05OCw5ICs5OCw5IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgodWJkX2xvY2spOwogCi1zdGF0aWMgaW50IHViZF9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwotc3RhdGljIGludCB1YmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKTsKLXN0YXRpYyBpbnQgdWJkX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCitzdGF0aWMgaW50IHViZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSk7CitzdGF0aWMgaW50IHViZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpOworc3RhdGljIGludCB1YmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgdWJkX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7CiAKQEAgLTExMTIsOSArMTExMiw5IEBACiAKIGRldmljZV9pbml0Y2FsbCh1YmRfZHJpdmVyX2luaXQpOwogCi1zdGF0aWMgaW50IHViZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCB1YmRfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgdWJkICp1YmRfZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCBlcnIgPSAwOwogCkBAIC0xMTMxLDcgKzExMzEsNyBAQAogCiAJLyogVGhpcyBzaG91bGQgbm8gbW9yZSBiZSBuZWVkZWQuIEFuZCBpdCBkaWRuJ3Qgd29yayBhbnl3YXkgdG8gZXhjbHVkZQogCSAqIHJlYWQtd3JpdGUgcmVtb3VudGluZyBvZiBmaWxlc3lzdGVtcy4qLwotCS8qaWYoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAhdWJkX2Rldi0+b3BlbmZsYWdzLncpeworCS8qaWYoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgIXViZF9kZXYtPm9wZW5mbGFncy53KXsKIAkgICAgICAgIGlmKC0tdWJkX2Rldi0+Y291bnQgPT0gMCkgdWJkX2Nsb3NlX2Rldih1YmRfZGV2KTsKIAkgICAgICAgIGVyciA9IC1FUk9GUzsKIAl9Ki8KQEAgLTExMzksOSArMTEzOSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB1YmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQorc3RhdGljIGludCB1YmRfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgdWJkICp1YmRfZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJaWYoLS11YmRfZGV2LT5jb3VudCA9PSAwKQpAQCAtMTMwNiwxMCArMTMwNSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHViZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlLAorc3RhdGljIGludCB1YmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCB1YmQgKnViZF9kZXYgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHViZCAqdWJkX2RldiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaGRfZHJpdmVpZCB1YmRfaWQgPSB7CiAJCS5jeWxzCQk9IDAsCiAJCS5oZWFkcwkJPSAxMjgsCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXMtbGF5b3V0LmggYi9hcmNoL3VtL2luY2x1ZGUvYXMtbGF5b3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTg1MmQuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzLWxheW91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2lmbmRlZiBfX1NUQVJUX0hfXwotI2RlZmluZSBfX1NUQVJUX0hfXwotCi0jaW5jbHVkZSAidW1sLWNvbmZpZy5oIgotI2luY2x1ZGUgImtlcm5fY29uc3RhbnRzLmgiCi0KLS8qCi0gKiBTdG9sZW4gZnJvbSBsaW51eC9jb25zdC5oLCB3aGljaCBjYW4ndCBiZSBkaXJlY3RseSBpbmNsdWRlZCBzaW5jZQotICogdGhpcyBpcyB1c2VkIGluIHVzZXJzcGFjZSBjb2RlLCB3aGljaCBoYXMgbm8gYWNjZXNzIHRvIHRoZSBrZXJuZWwKLSAqIGhlYWRlcnMuICBDaGFuZ2VkIHRvIGJlIHN1aXRhYmxlIGZvciBhZGRpbmcgY2FzdHMgdG8gdGhlIHN0YXJ0LAotICogcmF0aGVyIHRoYW4gIlVMIiB0byB0aGUgZW5kLgotICovCi0KLS8qIFNvbWUgY29uc3RhbnQgbWFjcm9zIGFyZSB1c2VkIGluIGJvdGggYXNzZW1ibGVyIGFuZAotICogQyBjb2RlLiAgVGhlcmVmb3JlIHdlIGNhbm5vdCBhbm5vdGF0ZSB0aGVtIGFsd2F5cyB3aXRoCi0gKiAnVUwnIGFuZCBvdGhlciB0eXBlIHNwZWNpZmllcnMgdW5pbGF0ZXJhbGx5LiAgV2UKLSAqIHVzZSB0aGUgZm9sbG93aW5nIG1hY3JvcyB0byBkZWFsIHdpdGggdGhpcy4KLSAqLwotCi0jaWZkZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIF9VTUxfQUMoWCwgWSkJKFkpCi0jZWxzZQotI2RlZmluZSBfX1VNTF9BQyhYLCBZKQkoWChZKSkKLSNkZWZpbmUgX1VNTF9BQyhYLCBZKQlfX1VNTF9BQyhYLCBZKQotI2VuZGlmCi0KLSNkZWZpbmUgU1RVQl9TVEFSVCBfVU1MX0FDKCwgMHgxMDAwMDApCi0jZGVmaW5lIFNUVUJfQ09ERSBfVU1MX0FDKCh1bnNpZ25lZCBsb25nKSwgU1RVQl9TVEFSVCkKLSNkZWZpbmUgU1RVQl9EQVRBIF9VTUxfQUMoKHVuc2lnbmVkIGxvbmcpLCBTVFVCX0NPREUgKyBVTV9LRVJOX1BBR0VfU0laRSkKLSNkZWZpbmUgU1RVQl9FTkQgX1VNTF9BQygodW5zaWduZWQgbG9uZyksIFNUVUJfREFUQSArIFVNX0tFUk5fUEFHRV9TSVpFKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgotCi1zdHJ1Y3QgY3B1X3Rhc2sgewotCWludCBwaWQ7Ci0Jdm9pZCAqdGFzazsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgY3B1X3Rhc2sgY3B1X3Rhc2tzW107Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvd19waHlzbWVtOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaF9waHlzbWVtOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdW1sX3BoeXNtZW07Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB1bWxfcmVzZXJ2ZWQ7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBlbmRfdm07Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydF92bTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaGlnaG1lbTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX3N0ZXh0LCBfZXRleHQsIF9zZGF0YSwgX2VkYXRhLCBfX2Jzc19zdGFydCwgX2VuZDsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF91bnByb3RlY3RlZF9lbmQ7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBicmtfc3RhcnQ7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGhvc3RfdGFza19zaXplOwotCi1leHRlcm4gaW50IGxpbnV4X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKLQotZXh0ZXJuIHZvaWQgKCpzaWdfaW5mb1tdKShpbnQsIHN0cnVjdCB1bWxfcHRfcmVncyAqKTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYS5vdXQtY29yZS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9hLm91dC1jb3JlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2Eub3V0LWNvcmUuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9hLm91dC1jb3JlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2FwaWMuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vYXBpYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9hcGljLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vYXBpYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hdXh2ZWMuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vYXV4dmVjLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2F1eHZlYy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL2F1eHZlYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9idWdzLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2J1Z3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vYnVncy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL2J1Z3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY2FjaGUuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY2FjaGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vY2FjaGUuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9jYWNoZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jaGVja3N1bS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9jaGVja3N1bS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2NvbW1vbi5sZHMuUyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9jb21tb24ubGRzLlMKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jcHV0aW1lLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vY3B1dGltZS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY3VycmVudC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9jdXJyZW50LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2N1cnJlbnQuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9jdXJyZW50LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2RlbGF5LmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2RlbGF5LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2RlbGF5LmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vZGVsYXkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZGVzYy5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9kZXNjLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2Rlc2MuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9kZXNjLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2RldmljZS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9kZXZpY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGluY2x1ZGUvYXNtLXVtL2RldmljZS5oCmNvcHkgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9kZXZpY2UuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZG1hLW1hcHBpbmcuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vZG1hLW1hcHBpbmcuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9kbWEuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vZG1hLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2RtYS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL2RtYS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lbWVyZ2VuY3ktcmVzdGFydC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9lbWVyZ2VuY3ktcmVzdGFydC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW5jbHVkZS9hc20tdW0vZW1lcmdlbmN5LXJlc3RhcnQuaApjb3B5IHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vZW1lcmdlbmN5LXJlc3RhcnQuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vZml4bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljMDI1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTAsMCArMSw5OSBAQAorI2lmbmRlZiBfX1VNX0ZJWE1BUF9ICisjZGVmaW5lIF9fVU1fRklYTUFQX0gKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaHBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKKy8qCisgKiBIZXJlIHdlIGRlZmluZSBhbGwgdGhlIGNvbXBpbGUtdGltZSAnc3BlY2lhbCcgdmlydHVhbAorICogYWRkcmVzc2VzLiBUaGUgcG9pbnQgaXMgdG8gaGF2ZSBhIGNvbnN0YW50IGFkZHJlc3MgYXQKKyAqIGNvbXBpbGUgdGltZSwgYnV0IHRvIHNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvbmx5CisgKiBpbiB0aGUgYm9vdCBwcm9jZXNzLiBXZSBhbGxvY2F0ZSB0aGVzZSBzcGVjaWFsICBhZGRyZXNzZXMKKyAqIGZyb20gdGhlIGVuZCBvZiB2aXJ0dWFsIG1lbW9yeSAoMHhmZmZmZjAwMCkgYmFja3dhcmRzLgorICogQWxzbyB0aGlzIGxldHMgdXMgZG8gZmFpbC1zYWZlIHZtYWxsb2MoKSwgd2UKKyAqIGNhbiBndWFyYW50ZWUgdGhhdCB0aGVzZSBzcGVjaWFsIGFkZHJlc3NlcyBhbmQKKyAqIHZtYWxsb2MoKS1lZCBhZGRyZXNzZXMgbmV2ZXIgb3ZlcmxhcC4KKyAqCisgKiB0aGVzZSAnY29tcGlsZS10aW1lIGFsbG9jYXRlZCcgbWVtb3J5IGJ1ZmZlcnMgYXJlCisgKiBmaXhlZC1zaXplIDRrIHBhZ2VzLiAob3IgbGFyZ2VyIGlmIHVzZWQgd2l0aCBhbiBpbmNyZW1lbnQKKyAqIGhpZ2hnZXIgdGhhbiAxKSB1c2UgZml4bWFwX3NldChpZHgscGh5cykgdG8gYXNzb2NpYXRlCisgKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KKyAqCisgKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKKyAqIHRhc2sgc3dpdGNoZXMuCisgKi8KKworLyoKKyAqIG9uIFVQIGN1cnJlbnRseSB3ZSB3aWxsIGhhdmUgbm8gdHJhY2Ugb2YgdGhlIGZpeG1hcCBtZWNoYW5pem0sCisgKiBubyBwYWdlIHRhYmxlIGFsbG9jYXRpb25zLCBldGMuIFRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZQorICogZnV0dXJlLCBzYXkgZnJhbWVidWZmZXJzIGZvciB0aGUgY29uc29sZSBkcml2ZXIocykgY291bGQgYmUKKyAqIGZpeC1tYXBwZWQ/CisgKi8KK2VudW0gZml4ZWRfYWRkcmVzc2VzIHsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLworCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCisjZW5kaWYKKwlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKK307CisKK2V4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcCAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAorCQkJICB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKKworI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgXAorCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKKy8qCisgKiBTb21lIGhhcmR3YXJlIHdhbnRzIHRvIGdldCBmaXhtYXBwZWQgd2l0aG91dCBjYWNoaW5nLgorICovCisjZGVmaW5lIHNldF9maXhtYXBfbm9jYWNoZShpZHgsIHBoeXMpIFwKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUxfTk9DQUNIRSkKKy8qCisgKiB1c2VkIGJ5IHZtYWxsb2MuYy4KKyAqCisgKiBMZWF2ZSBvbmUgZW1wdHkgcGFnZSBiZXR3ZWVuIHZtYWxsb2MnZWQgYXJlYXMgYW5kCisgKiB0aGUgc3RhcnQgb2YgdGhlIGZpeG1hcCwgYW5kIGxlYXZlIG9uZSBwYWdlIGVtcHR5CisgKiBhdCB0aGUgdG9wIG9mIG1lbS4uCisgKi8KKworI2RlZmluZSBGSVhBRERSX1RPUAkoVEFTS19TSVpFIC0gMiAqIFBBR0VfU0laRSkKKyNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NJWkUpCisKKyNkZWZpbmUgX19maXhfdG9fdmlydCh4KQkoRklYQUREUl9UT1AgLSAoKHgpIDw8IFBBR0VfU0hJRlQpKQorI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpICAgICAgKChGSVhBRERSX1RPUCAtICgoeCkmUEFHRV9NQVNLKSkgPj4gUEFHRV9TSElGVCkKKworZXh0ZXJuIHZvaWQgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCh2b2lkKTsKKworLyoKKyAqICdpbmRleCB0byBhZGRyZXNzJyB0cmFuc2xhdGlvbi4gSWYgYW55b25lIHRyaWVzIHRvIHVzZSB0aGUgaWR4CisgKiBkaXJlY3RseSB3aXRob3V0IHRyYW5sYXRpb24sIHdlIGNhdGNoIHRoZSBidWcgd2l0aCBhIE5VTEwtZGVmZXJlbmNlCisgKiBrZXJuZWwgb29wcy4gSWxsZWdhbCByYW5nZXMgb2YgaW5jb21pbmcgaW5kaWNlcyBhcmUgY2F1Z2h0IHRvby4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpeF90b192aXJ0KGNvbnN0IHVuc2lnbmVkIGludCBpZHgpCit7CisJLyoKKwkgKiB0aGlzIGJyYW5jaCBnZXRzIGNvbXBsZXRlbHkgZWxpbWluYXRlZCBhZnRlciBpbmxpbmluZywKKwkgKiBleGNlcHQgd2hlbiBzb21lb25lIHRyaWVzIHRvIHVzZSBmaXhhZGRyIGluZGljZXMgaW4gYW4KKwkgKiBpbGxlZ2FsIHdheS4gKHN1Y2ggYXMgbWl4aW5nIHVwIGFkZHJlc3MgdHlwZXMgb3IgdXNpbmcKKwkgKiBvdXQtb2YtcmFuZ2UgaW5kaWNlcykuCisJICoKKwkgKiBJZiBpdCBkb2Vzbid0IGdldCByZW1vdmVkLCB0aGUgbGlua2VyIHdpbGwgY29tcGxhaW4KKwkgKiBsb3VkbHkgd2l0aCBhIHJlYXNvbmFibHkgY2xlYXIgZXJyb3IgbWVzc2FnZS4uCisJICovCisJaWYgKGlkeCA+PSBfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMpCisJCV9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3QoKTsKKworICAgICAgICByZXR1cm4gX19maXhfdG9fdmlydChpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19maXgoY29uc3QgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKyAgICAgIEJVR19PTih2YWRkciA+PSBGSVhBRERSX1RPUCB8fCB2YWRkciA8IEZJWEFERFJfU1RBUlQpOworICAgICAgcmV0dXJuIF9fdmlydF90b19maXgodmFkZHIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2Z1dGV4LmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2Z1dGV4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2Z1dGV4LmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vZnV0ZXguaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaGFyZGlycS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2hhcmRpcnEuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2h3X2lycS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9od19pcnEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vaHdfaXJxLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vaHdfaXJxLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2lvLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2lvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2lvLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vaW8uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaXJxLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2lycS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9pcnEuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9pcnEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaXJxX3JlZ3MuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vaXJxX3JlZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGluY2x1ZGUvYXNtLXVtL2lycV9yZWdzLmgKY29weSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL2lycV9yZWdzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2lycV92ZWN0b3JzLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2lycV92ZWN0b3JzLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaXJxZmxhZ3MuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vaXJxZmxhZ3MuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9rZGVidWcuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20va2RlYnVnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbmNsdWRlL2FzbS11bS9rZGVidWcuaApjb3B5IHRvIGFyY2gvdW0vaW5jbHVkZS9hc20va2RlYnVnLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2ttYXBfdHlwZXMuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20va21hcF90eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9rbWFwX3R5cGVzLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20va21hcF90eXBlcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9tbXUuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL21tdS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL21tdS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9tbXVfY29udGV4dC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9tbXVfY29udGV4dC5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL211dGV4LmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL211dGV4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbmNsdWRlL2FzbS11bS9tdXRleC5oCmNvcHkgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9tdXRleC5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjI4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDMgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QQUdFX0gKKyNkZWZpbmUgX19VTV9QQUdFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSwgVUwpIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwYWdlOworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXNkZXAvdm0tZmxhZ3MuaD4KKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCisgKi8KKworI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXNldCgodm9pZCAqKShwYWdlKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkJbWVtY3B5KCh2b2lkICopKHRvKSwgKHZvaWQgKikoZnJvbSksIFBBR0VfU0laRSkKKworI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UocGFnZSwgdmFkZHIsIHBnKQljbGVhcl9wYWdlKHBhZ2UpCisjZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCB2YWRkciwgcGcpCWNvcHlfcGFnZSh0bywgZnJvbSkKKworI2lmIGRlZmluZWQoQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMpICYmICFkZWZpbmVkKENPTkZJR182NEJJVCkKKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZV9sb3csIHB0ZV9oaWdoOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7CisjZGVmaW5lIHB0ZV92YWwoeCkgKCh4KS5wdGVfbG93IHwgKCh1bnNpZ25lZCBsb25nIGxvbmcpICh4KS5wdGVfaGlnaCA8PCAzMikpCisKKyNkZWZpbmUgcHRlX2dldF9iaXRzKHB0ZSwgYml0cykgKChwdGUpLnB0ZV9sb3cgJiAoYml0cykpCisjZGVmaW5lIHB0ZV9zZXRfYml0cyhwdGUsIGJpdHMpICgocHRlKS5wdGVfbG93IHw9IChiaXRzKSkKKyNkZWZpbmUgcHRlX2NsZWFyX2JpdHMocHRlLCBiaXRzKSAoKHB0ZSkucHRlX2xvdyAmPSB+KGJpdHMpKQorI2RlZmluZSBwdGVfY29weSh0bywgZnJvbSkgKHsgKHRvKS5wdGVfaGlnaCA9IChmcm9tKS5wdGVfaGlnaDsgXAorCQkJICAgICAgc21wX3dtYigpOyBcCisJCQkgICAgICAodG8pLnB0ZV9sb3cgPSAoZnJvbSkucHRlX2xvdzsgfSkKKyNkZWZpbmUgcHRlX2lzX3plcm8ocHRlKSAoISgocHRlKS5wdGVfbG93ICYgfl9QQUdFX05FV1BBR0UpICYmICEocHRlKS5wdGVfaGlnaCkKKyNkZWZpbmUgcHRlX3NldF92YWwocHRlLCBwaHlzLCBwcm90KSBcCisJKHsgKHB0ZSkucHRlX2hpZ2ggPSAocGh5cykgPj4gMzI7IFwKKwkgICAocHRlKS5wdGVfbG93ID0gKHBoeXMpIHwgcGdwcm90X3ZhbChwcm90KTsgfSkKKworI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBfX3BtZCh4KSAoKHBtZF90KSB7ICh4KSB9ICkKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgcGZuX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzX3Q7CisKKyNlbHNlCisKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OworCisjaWZkZWYgQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7CisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIF9fcG1kKHgpICgocG1kX3QpIHsgKHgpIH0gKQorI2VuZGlmCisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKworCisjZGVmaW5lIHB0ZV9nZXRfYml0cyhwLCBiaXRzKSAoKHApLnB0ZSAmIChiaXRzKSkKKyNkZWZpbmUgcHRlX3NldF9iaXRzKHAsIGJpdHMpICgocCkucHRlIHw9IChiaXRzKSkKKyNkZWZpbmUgcHRlX2NsZWFyX2JpdHMocCwgYml0cykgKChwKS5wdGUgJj0gfihiaXRzKSkKKyNkZWZpbmUgcHRlX2NvcHkodG8sIGZyb20pICgodG8pLnB0ZSA9IChmcm9tKS5wdGUpCisjZGVmaW5lIHB0ZV9pc196ZXJvKHApICghKChwKS5wdGUgJiB+X1BBR0VfTkVXUEFHRSkpCisjZGVmaW5lIHB0ZV9zZXRfdmFsKHAsIHBoeXMsIHByb3QpIChwKS5wdGUgPSAocGh5cyB8IHBncHJvdF92YWwocHJvdCkpCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZm5fdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX3Q7CisKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OworCit0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CisKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KSAoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ2QoeCkgKChwZ2RfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB1bWxfcGh5c21lbTsKKworI2RlZmluZSBQQUdFX09GRlNFVCAodW1sX3BoeXNtZW0pCisjZGVmaW5lIEtFUk5FTEJBU0UgUEFHRV9PRkZTRVQKKworI2RlZmluZSBfX3ZhX3NwYWNlICg4KjEwMjQqMTAyNCkKKworI2luY2x1ZGUgIm1lbS5oIgorCisvKiBDYXN0IHRvIHVuc2lnbmVkIGxvbmcgYmVmb3JlIGNhc3RpbmcgdG8gdm9pZCAqIHRvIGF2b2lkIGEgd2FybmluZyBmcm9tCisgKiBtbWFwX2ttZW0gYWJvdXQgY3V0dGluZyBhIGxvbmcgbG9uZyBkb3duIHRvIGEgdm9pZCAqLiAgTm90IHN1cmUgdGhhdAorICogY2FzdGluZyBpcyB0aGUgcmlnaHQgdGhpbmcsIGJ1dCAzMi1iaXQgVU1MIGNhbid0IGhhdmUgNjQtYml0IHZpcnR1YWwKKyAqIGFkZHJlc3NlcworICovCisjZGVmaW5lIF9fcGEodmlydCkgdG9fcGh5cygodm9pZCAqKSAodW5zaWduZWQgbG9uZykgKHZpcnQpKQorI2RlZmluZSBfX3ZhKHBoeXMpIHRvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpIChwaHlzKSkKKworI2RlZmluZSBwaHlzX3RvX3BmbihwKSAoKHBmbl90KSAoKHApID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwZm5fdG9fcGh5cyhwZm4pICgocGh5c190KSAoKHBmbikgPDwgUEFHRV9TSElGVCkpCisKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgKChwZm4pIDwgbWF4X21hcG5yKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQodikgcGZuX3ZhbGlkKHBoeXNfdG9fcGZuKF9fcGEodikpKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgorCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYJLyogX19VTV9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BhZ2Vfb2Zmc2V0LmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3BhZ2Vfb2Zmc2V0LmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGFyYW0uaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGFyYW0uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vcGFyYW0uaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9wYXJhbS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wY2kuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGNpLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3BjaS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3BjaS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZGEuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGRhLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3BkYS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3BkYS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZ2FsbG9jLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vcGdhbGxvYy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vcGd0YWJsZS0ybGV2ZWwuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9wZ3RhYmxlLTNsZXZlbC5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkYTI0OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0wLDAgKzEsMzY2IEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKiBEZXJpdmVkIGZyb20gaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fUEdUQUJMRV9ICisjZGVmaW5lIF9fVU1fUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMQorI2RlZmluZSBfUEFHRV9ORVdQQUdFCTB4MDAyCisjZGVmaW5lIF9QQUdFX05FV1BST1QJMHgwMDQKKyNkZWZpbmUgX1BBR0VfUlcJMHgwMjAKKyNkZWZpbmUgX1BBR0VfVVNFUgkweDA0MAorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDA4MAorI2RlZmluZSBfUEFHRV9ESVJUWQkweDEwMAorLyogSWYgX1BBR0VfUFJFU0VOVCBpcyBjbGVhciwgd2UgdXNlIHRoZXNlOiAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA4CS8qIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcsIHNhdmVkIFBURTsgdW5zZXQ6c3dhcCAqLworI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkweDAxMAkvKiBpZiB0aGUgdXNlciBtYXBwZWQgaXQgd2l0aCBQUk9UX05PTkU7CisJCQkJICAgcHRlX3ByZXNlbnQgZ2l2ZXMgdHJ1ZSAqLworCisjaWZkZWYgQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMKKyNpbmNsdWRlICJhc20vcGd0YWJsZS0zbGV2ZWwuaCIKKyNlbHNlCisjaW5jbHVkZSAiYXNtL3BndGFibGUtMmxldmVsLmgiCisjZW5kaWYKKworZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CisKKy8qIHplcm8gcGFnZSB1c2VkIGZvciB1bmluaXRpYWxpemVkIHN0dWZmICovCitleHRlcm4gdW5zaWduZWQgbG9uZyAqZW1wdHlfemVyb19wYWdlOworCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpIGRvIDsgd2hpbGUgKDApCisKKy8qIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX2lvbWVtOworCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCShfX3ZhX3NwYWNlKQorI2RlZmluZSBWTUFMTE9DX1NUQVJUICgoZW5kX2lvbWVtICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfU1RBUlQgLSBMQVNUX1BLTUFQICogUEFHRV9TSVpFKSAmIFBNRF9NQVNLKQorI2lmZGVmIENPTkZJR19ISUdITUVNCisjIGRlZmluZSBWTUFMTE9DX0VORAkoUEtNQVBfQkFTRS0yKlBBR0VfU0laRSkKKyNlbHNlCisjIGRlZmluZSBWTUFMTE9DX0VORAkoRklYQUREUl9TVEFSVC0yKlBBR0VfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIF9QQUdFX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgX0tFUk5QR19UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisKKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkKKworLyoKKyAqIFRoZSBpMzg2IGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IgZXhlY3V0ZSwgYW5kIGNvbnNpZGVycyB0aGF0IHRoZSBzYW1lCisgKiBhcmUgcmVhZC4KKyAqIEFsc28sIHdyaXRlIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuCisgKiBnZXQuLgorICovCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWQorCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVECisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgdmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkKKworI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkgcHRlX3NldF92YWwoKih4cCksIChwaHlzX3QpIDAsIF9fcGdwcm90KF9QQUdFX05FV1BBR0UpKQorCisjZGVmaW5lIHBtZF9ub25lKHgpCSghKCh1bnNpZ25lZCBsb25nKXBtZF92YWwoeCkgJiB+X1BBR0VfTkVXUEFHRSkpCisjZGVmaW5lCXBtZF9iYWQoeCkJKChwbWRfdmFsKHgpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCisKKyNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoeCkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBwbWRfY2xlYXIoeHApCWRvIHsgcG1kX3ZhbCgqKHhwKSkgPSBfUEFHRV9ORVdQQUdFOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9uZXdwYWdlKHgpICAocG1kX3ZhbCh4KSAmIF9QQUdFX05FV1BBR0UpCisjZGVmaW5lIHBtZF9ta3VwdG9kYXRlKHgpIChwbWRfdmFsKHgpICY9IH5fUEFHRV9ORVdQQUdFKQorCisjZGVmaW5lIHB1ZF9uZXdwYWdlKHgpICAocHVkX3ZhbCh4KSAmIF9QQUdFX05FV1BBR0UpCisjZGVmaW5lIHB1ZF9ta3VwdG9kYXRlKHgpIChwdWRfdmFsKHgpICY9IH5fUEFHRV9ORVdQQUdFKQorCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgcGh5c190b19wYWdlKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykKKworI2RlZmluZSBwdGVfcGFnZSh4KSBwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorCisjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCXB0ZV9nZXRfYml0cyh4LCAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogRmxhZ3MgY2hlY2tpbmcgc2VjdGlvbi4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX2lzX3plcm8ocHRlKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQoreyAKKwlyZXR1cm4oKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1VTRVIpKSAmJgorCSAgICAgICAhKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1BST1ROT05FKSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpeworCXJldHVybigocHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfVVNFUikpICYmCisJICAgICAgICEocHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfUFJPVE5PTkUpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCit7CisJcmV0dXJuKChwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9SVykpICYmCisJICAgICAgICEocHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfUFJPVE5PTkUpKSk7Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29ya3MgaWYgcHRlX3ByZXNlbnQoKSBpcyBub3QgdHJ1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfRElSVFkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9BQ0NFU1NFRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9uZXdwYWdlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfTkVXUEFHRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9uZXdwcm90KHB0ZV90IHB0ZSkKK3sgCisJcmV0dXJuKHB0ZV9wcmVzZW50KHB0ZSkgJiYgKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX05FV1BST1QpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogRmxhZ3Mgc2V0dGluZyBzZWN0aW9uLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtuZXdwcm90KHB0ZV90IHB0ZSkKK3sKKwlwdGVfc2V0X2JpdHMocHRlLCBfUEFHRV9ORVdQUk9UKTsKKwlyZXR1cm4ocHRlKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCit7CisJcHRlX2NsZWFyX2JpdHMocHRlLCBfUEFHRV9ESVJUWSk7CisJcmV0dXJuKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkJCit7IAorCXB0ZV9jbGVhcl9iaXRzKHB0ZSwgX1BBR0VfQUNDRVNTRUQpOworCXJldHVybihwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQoreyAKKwlwdGVfY2xlYXJfYml0cyhwdGUsIF9QQUdFX1JXKTsKKwlyZXR1cm4ocHRlX21rbmV3cHJvdChwdGUpKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCit7IAorCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX1VTRVIpOworCXJldHVybihwdGVfbWtuZXdwcm90KHB0ZSkpOyAKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCit7IAorCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX0RJUlRZKTsKKwlyZXR1cm4ocHRlKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCit7CisJcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfQUNDRVNTRUQpOworCXJldHVybihwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJCit7CisJcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfUlcpOworCXJldHVybihwdGVfbWtuZXdwcm90KHB0ZSkpOyAKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt1cHRvZGF0ZShwdGVfdCBwdGUpCQoreworCXB0ZV9jbGVhcl9iaXRzKHB0ZSwgX1BBR0VfTkVXUEFHRSk7CisJaWYocHRlX3ByZXNlbnQocHRlKSkKKwkJcHRlX2NsZWFyX2JpdHMocHRlLCBfUEFHRV9ORVdQUk9UKTsKKwlyZXR1cm4ocHRlKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rbmV3cGFnZShwdGVfdCBwdGUpCit7CisJcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfTkVXUEFHRSk7CisJcmV0dXJuKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpCit7CisJcmV0dXJuKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwdHIsIHB0ZV90IHB0ZXZhbCkKK3sKKwlwdGVfY29weSgqcHRlcHRyLCBwdGV2YWwpOworCisJLyogSWYgaXQncyBhIHN3YXAgZW50cnksIGl0IG5lZWRzIHRvIGJlIG1hcmtlZCBfUEFHRV9ORVdQQUdFIHNvCisJICogZml4X3JhbmdlIGtub3dzIHRvIHVubWFwIGl0LiAgX1BBR0VfTkVXUFJPVCBpcyBzcGVjaWZpYyB0bworCSAqIG1hcHBlZCBwYWdlcy4KKwkgKi8KKworCSpwdGVwdHIgPSBwdGVfbWtuZXdwYWdlKCpwdGVwdHIpOworCWlmKHB0ZV9wcmVzZW50KCpwdGVwdHIpKSAqcHRlcHRyID0gcHRlX21rbmV3cHJvdCgqcHRlcHRyKTsKK30KKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKworI2RlZmluZSBwaHlzX3RvX3BhZ2UocGh5cykgcGZuX3RvX3BhZ2UocGh5c190b19wZm4ocGh5cykpCisjZGVmaW5lIF9fdmlydF90b19wYWdlKHZpcnQpIHBoeXNfdG9fcGFnZShfX3BhKHZpcnQpKQorI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkgcGZuX3RvX3BoeXMoKHBmbl90KSBwYWdlX3RvX3BmbihwYWdlKSkKKyNkZWZpbmUgdmlydF90b19wYWdlKGFkZHIpIF9fdmlydF90b19wYWdlKChjb25zdCB1bnNpZ25lZCBsb25nKSBhZGRyKQorCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpIFwKKwkoeyBwdGVfdCBwdGU7CQkJCQlcCisJCQkJCQkJXAorCXB0ZV9zZXRfdmFsKHB0ZSwgcGFnZV90b19waHlzKHBhZ2UpLCAocGdwcm90KSk7CVwKKwlpZiAocHRlX3ByZXNlbnQocHRlKSkJCQkJXAorCQlwdGVfbWtuZXdwcm90KHB0ZV9ta25ld3BhZ2UocHRlKSk7CVwKKwlwdGU7fSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwlwdGVfc2V0X3ZhbChwdGUsIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSyksIG5ld3Byb3QpOworCXJldHVybiBwdGU7IAorfQorCisvKgorICogdGhlIHBnZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcGdkX3RbUFRSU19QRVJfUEdEXQorICoKKyAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwZ2QgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QtMSkpCisKKy8qCisgKiBwZ2Rfb2Zmc2V0KCkgcmV0dXJucyBhIChwZ2RfdCAqKQorICogcGdkX2luZGV4KCkgaXMgdXNlZCBnZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBwZ2QgcGFnZSdzIGFycmF5IG9mIHBnZF90J3M7CisgKi8KKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCtwZ2RfaW5kZXgoYWRkcmVzcykpCisKKy8qCisgKiBhIHNob3J0Y3V0IHdoaWNoIGltcGxpZXMgdGhlIHVzZSBvZiB0aGUga2VybmVsJ3MgcGdkLCBpbnN0ZWFkCisgKiBvZiBhIHByb2Nlc3MncworICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorCisvKgorICogdGhlIHBtZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcG1kX3RbUFRSU19QRVJfUE1EXQorICoKKyAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwbWQgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKSAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKQorCisjZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkgXAorCSgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgJiBQQUdFX01BU0spKQorCisvKgorICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQorICoKKyAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopIHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyAgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKworc3RydWN0IG1tX3N0cnVjdDsKK2V4dGVybiBwdGVfdCAqdmlydF90b19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CisKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcmVzcyxwdGUpIGRvIDsgd2hpbGUgKDApCisKKy8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiA0KSAmIDB4M2YpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDExKQorCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkgXAorCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCA0KSB8ICgob2Zmc2V0KSA8PCAxMSkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkgXAorCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGVfbWt1cHRvZGF0ZShwdGUpKSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKSAoMSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworLyogQ2xlYXIgYSBrZXJuZWwgUFRFIGFuZCBmbHVzaCBpdCBmcm9tIHRoZSBUTEIgKi8KKyNkZWZpbmUga3B0ZV9jbGVhcl9mbHVzaChwdGVwLCB2YWRkcikJCVwKK2RvIHsJCQkJCQlcCisJcHRlX2NsZWFyKCZpbml0X21tLCAodmFkZHIpLCAocHRlcCkpOwlcCisJX19mbHVzaF90bGJfb25lKCh2YWRkcikpOwkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wcm9jZXNzb3ItZ2VuZXJpYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1nZW5lcmljLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcHRyYWNlLWdlbmVyaWMuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcHRyYWNlLWdlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzg4OTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wdHJhY2UtZ2VuZXJpYy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1VNX1BUUkFDRV9HRU5FUklDX0gKKyNkZWZpbmUgX19VTV9QVFJBQ0VfR0VORVJJQ19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLWFiaS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgorCitzdHJ1Y3QgcHRfcmVncyB7CisJc3RydWN0IHVtbF9wdF9yZWdzIHJlZ3M7Cit9OworCisjZGVmaW5lIEVNUFRZX1JFR1MgeyAucmVncyA9IEVNUFRZX1VNTF9QVF9SRUdTIH0KKworI2RlZmluZSBQVF9SRUdTX0lQKHIpIFVQVF9JUCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1NQKHIpIFVQVF9TUCgmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFRyhyLCByZWcpIFVQVF9SRUcoJihyKS0+cmVncywgcmVnKQorI2RlZmluZSBQVF9SRUdTX1NFVChyLCByZWcsIHZhbCkgVVBUX1NFVCgmKHIpLT5yZWdzLCByZWcsIHZhbCkKKworI2RlZmluZSBQVF9SRUdTX1NFVF9TWVNDQUxMX1JFVFVSTihyLCByZXMpIFwKKwlVUFRfU0VUX1NZU0NBTExfUkVUVVJOKCYociktPnJlZ3MsIHJlcykKKyNkZWZpbmUgUFRfUkVHU19SRVNUQVJUX1NZU0NBTEwocikgVVBUX1JFU1RBUlRfU1lTQ0FMTCgmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFR1NfU1lTQ0FMTF9OUihyKSBVUFRfU1lTQ0FMTF9OUigmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFR1NfU0MocikgVVBUX1NDKCYociktPnJlZ3MpCisKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSBQVF9SRUdTX0lQKHJlZ3MpCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworZXh0ZXJuIGxvbmcgc3ViYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsCisJCQkgICBsb25nIGRhdGEpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0cmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCByZWdubyk7CitleHRlcm4gaW50IHB1dHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgcmVnbm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpOworZXh0ZXJuIGludCBnZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLAorCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiBpbnQgc2V0X2ZwcmVncyhzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKmJ1ZiwKKwkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CisKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiBpbnQgYXJjaF9jb3B5X3RscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7CitleHRlcm4gdm9pZCBjbGVhcl9mbHVzaGVkX3RscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9yZXF1aXJlZC1mZWF0dXJlcy5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9yZXF1aXJlZC1mZWF0dXJlcy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3JlcXVpcmVkLWZlYXR1cmVzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NlY3Rpb25zLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3NlY3Rpb25zLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vc2VjdGlvbnMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2VnbWVudC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9zZWdtZW50LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3NlZ21lbnQuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9zZWdtZW50LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NldHVwLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3NldHVwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3NldHVwLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vc2V0dXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc21wLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3NtcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9zbXAuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9zbXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3VzcGVuZC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3N1c3BlbmQuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzM0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX19VTV9TWVNURU1fR0VORVJJQ19ICisjZGVmaW5lIF9fVU1fU1lTVEVNX0dFTkVSSUNfSAorCisjaW5jbHVkZSAic3lzZGVwL3N5c3RlbS5oIgorCitleHRlcm4gdm9pZCAqc3dpdGNoX3RvKHZvaWQgKnByZXYsIHZvaWQgKm5leHQsIHZvaWQgKmxhc3QpOworCitleHRlcm4gaW50IGdldF9zaWduYWxzKHZvaWQpOworZXh0ZXJuIGludCBzZXRfc2lnbmFscyhpbnQgZW5hYmxlKTsKK2V4dGVybiBpbnQgZ2V0X3NpZ25hbHModm9pZCk7CitleHRlcm4gdm9pZCBibG9ja19zaWduYWxzKHZvaWQpOworZXh0ZXJuIHZvaWQgdW5ibG9ja19zaWduYWxzKHZvaWQpOworCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpIGRvIHsgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsgXAorCQkJCSAgICAgKGZsYWdzKSA9IGdldF9zaWduYWxzKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpIGRvIHsgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsgXAorCQkJCSAgICAgIHNldF9zaWduYWxzKGZsYWdzKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIGxvY2FsX2lycV9zYXZlKGZsYWdzKSBkbyB7IGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2lycV9kaXNhYmxlKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkgdW5ibG9ja19zaWduYWxzKCkKKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKSBibG9ja19zaWduYWxzKCkKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgICAgICAgXAorICAgICAgICBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsgICAgICAgIFwKKyAgICAgICAgKGZsYWdzID09IDApOyAgICAgICAgICAgICAgICAgICBcCit9KQorCitleHRlcm4gdm9pZCAqX3N3aXRjaF90byh2b2lkICpwcmV2LCB2b2lkICpuZXh0LCB2b2lkICpsYXN0KTsKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpIHByZXYgPSBfc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMjc0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9USFJFQURfSU5GT19ICisjZGVmaW5lIF9fVU1fVEhSRUFEX0lORk9fSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwlfX3UzMgkJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCisJaW50CQkJcHJlZW1wdF9jb3VudDsgIC8qIDAgPT4gcHJlZW1wdGFibGUsCisJCQkJCQkgICA8MCA9PiBCVUcgKi8KKwltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlOgorCQkJCQkgCSAgIDAtMHhCRkZGRkZGRiBmb3IgdXNlcgorCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwgKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworCXN0cnVjdCB0aHJlYWRfaW5mbwkqcmVhbF90aHJlYWQ7ICAgIC8qIFBvaW50cyB0byBub24tSVJRIHN0YWNrICovCit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKK3sJCQkJCQlcCisJLnRhc2sgPQkJJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluID0JJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuZmxhZ3MgPQkJMCwJCVwKKwkuY3B1ID0JCTAsCQkJXAorCS5wcmVlbXB0X2NvdW50ID0JMSwJCVwKKwkuYWRkcl9saW1pdCA9CUtFUk5FTF9EUywJCVwKKwkucmVzdGFydF9ibG9jayA9ICB7CQkJXAorCQkuZm4gPSAgZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCVwKKwkucmVhbF90aHJlYWQgPSBOVUxMLAkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisjZGVmaW5lIFRIUkVBRF9TSVpFICgoMSA8PCBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSAqIFBBR0VfU0laRSkKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gVEhSRUFEX1NJWkUgLSAxOworCXRpID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKCh1bnNpZ25lZCBsb25nKSAmdGkpICYgfm1hc2spOworCXJldHVybiB0aTsKK30KKworI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSCisKKyNlbmRpZgorCisjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDEwMDAwMDAwCisKKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMQkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTIJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcgICAgICAzICAgICAgIC8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgKiBUSUZfTkVFRF9SRVNDSEVECisJCQkJCSAqLworI2RlZmluZSBUSUZfUkVTVEFSVF9CTE9DSyAJNAorI2RlZmluZSBUSUZfTUVNRElFCSAJNQorI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk2CisjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNworI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLworCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDEgPDwgVElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRyAgICAgKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxIDw8IFRJRl9TWVNDQUxMX0FVRElUKQorI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90aW1leC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS90aW1leC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS90aW1leC5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3RpbWV4LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RsYi5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS90bGIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vdGxiLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vdGxiLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RsYmZsdXNoLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL3RsYmZsdXNoLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdG9wb2xvZ3kuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vdG9wb2xvZ3kuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vdWFjY2Vzcy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0veG9yLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3hvci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS94b3IuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL2FzbS94b3IuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2NvbW1vbi1vZmZzZXRzLmggYi9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0YmQzNS4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIGZvciB1c2UgYnkgc3lzLSRTVUJBUkNIL2tlcm5lbC1vZmZzZXRzLmMgKi8KLQotREVGSU5FKEtFUk5FTF9NQURWX1JFTU9WRSwgTUFEVl9SRU1PVkUpOwotCi1PRkZTRVQoSE9TVF9UQVNLX1JFR1MsIHRhc2tfc3RydWN0LCB0aHJlYWQucmVncyk7Ci1PRkZTRVQoSE9TVF9UQVNLX1BJRCwgdGFza19zdHJ1Y3QsIHBpZCk7Ci0KLURFRklORShVTV9LRVJOX1BBR0VfU0laRSwgUEFHRV9TSVpFKTsKLURFRklORShVTV9LRVJOX1BBR0VfTUFTSywgUEFHRV9NQVNLKTsKLURFRklORShVTV9LRVJOX1BBR0VfU0hJRlQsIFBBR0VfU0hJRlQpOwotREVGSU5FKFVNX05TRUNfUEVSX1NFQywgTlNFQ19QRVJfU0VDKTsKLQotREVGSU5FX1NUUihVTV9LRVJOX0VNRVJHLCBLRVJOX0VNRVJHKTsKLURFRklORV9TVFIoVU1fS0VSTl9BTEVSVCwgS0VSTl9BTEVSVCk7Ci1ERUZJTkVfU1RSKFVNX0tFUk5fQ1JJVCwgS0VSTl9DUklUKTsKLURFRklORV9TVFIoVU1fS0VSTl9FUlIsIEtFUk5fRVJSKTsKLURFRklORV9TVFIoVU1fS0VSTl9XQVJOSU5HLCBLRVJOX1dBUk5JTkcpOwotREVGSU5FX1NUUihVTV9LRVJOX05PVElDRSwgS0VSTl9OT1RJQ0UpOwotREVGSU5FX1NUUihVTV9LRVJOX0lORk8sIEtFUk5fSU5GTyk7Ci1ERUZJTkVfU1RSKFVNX0tFUk5fREVCVUcsIEtFUk5fREVCVUcpOwotREVGSU5FX1NUUihVTV9LRVJOX0NPTlQsIEtFUk5fQ09OVCk7Ci0KLURFRklORShVTV9FTEZfQ0xBU1MsIEVMRl9DTEFTUyk7Ci1ERUZJTkUoVU1fRUxGQ0xBU1MzMiwgRUxGQ0xBU1MzMik7Ci1ERUZJTkUoVU1fRUxGQ0xBU1M2NCwgRUxGQ0xBU1M2NCk7Ci0KLURFRklORShVTV9OUl9DUFVTLCBOUl9DUFVTKTsKLQotREVGSU5FKFVNX0dGUF9LRVJORUwsIEdGUF9LRVJORUwpOwotREVGSU5FKFVNX0dGUF9BVE9NSUMsIEdGUF9BVE9NSUMpOwotCi0vKiBGb3IgY3J5cHRvIGFzc2VtYmxlciBjb2RlLiAqLwotREVGSU5FKGNyeXB0b190Zm1fY3R4X29mZnNldCwgb2Zmc2V0b2Yoc3RydWN0IGNyeXB0b190Zm0sIF9fY3J0X2N0eCkpOwotCi1ERUZJTkUoVU1fVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKTsKLQotREVGSU5FKFVNX0haLCBIWik7Ci0KLURFRklORShVTV9VU0VDX1BFUl9TRUMsIFVTRUNfUEVSX1NFQyk7Ci1ERUZJTkUoVU1fTlNFQ19QRVJfU0VDLCBOU0VDX1BFUl9TRUMpOwotREVGSU5FKFVNX05TRUNfUEVSX1VTRUMsIE5TRUNfUEVSX1VTRUMpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL29zLmggYi9hcmNoL3VtL2luY2x1ZGUvb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI1YmU0Ni4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2lmbmRlZiBfX09TX0hfXwotI2RlZmluZSBfX09TX0hfXwotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSAiaXJxX3VzZXIuaCIKLSNpbmNsdWRlICJsb25nam1wLmgiCi0jaW5jbHVkZSAibW1faWQuaCIKLSNpbmNsdWRlICJzeXNkZXAvdGxzLmgiCi0jaW5jbHVkZSAiLi4vb3MvaW5jbHVkZS9maWxlLmgiCi0KLSNkZWZpbmUgQ0FUQ0hfRUlOVFIoZXhwcikgd2hpbGUgKChlcnJubyA9IDAsICgoZXhwcikgPCAwKSkgJiYgKGVycm5vID09IEVJTlRSKSkKLQotI2RlZmluZSBPU19UWVBFX0ZJTEUgMQotI2RlZmluZSBPU19UWVBFX0RJUiAyCi0jZGVmaW5lIE9TX1RZUEVfU1lNTElOSyAzCi0jZGVmaW5lIE9TX1RZUEVfQ0hBUkRFViA0Ci0jZGVmaW5lIE9TX1RZUEVfQkxPQ0tERVYgNQotI2RlZmluZSBPU19UWVBFX0ZJRk8gNgotI2RlZmluZSBPU19UWVBFX1NPQ0sgNwotCi0vKiBvc19hY2Nlc3MoKSBmbGFncyAqLwotI2RlZmluZSBPU19BQ0NfRl9PSyAgICAwICAgICAgIC8qIFRlc3QgZm9yIGV4aXN0ZW5jZS4gICovCi0jZGVmaW5lIE9TX0FDQ19YX09LICAgIDEgICAgICAgLyogVGVzdCBmb3IgZXhlY3V0ZSBwZXJtaXNzaW9uLiAgKi8KLSNkZWZpbmUgT1NfQUNDX1dfT0sgICAgMiAgICAgICAvKiBUZXN0IGZvciB3cml0ZSBwZXJtaXNzaW9uLiAgKi8KLSNkZWZpbmUgT1NfQUNDX1JfT0sgICAgNCAgICAgICAvKiBUZXN0IGZvciByZWFkIHBlcm1pc3Npb24uICAqLwotI2RlZmluZSBPU19BQ0NfUldfT0sgICAoT1NfQUNDX1dfT0sgfCBPU19BQ0NfUl9PSykgLyogVGVzdCBmb3IgUlcgcGVybWlzc2lvbiAqLwotCi0vKgotICogdHlwZXMgdGFrZW4gZnJvbSBzdGF0X2ZpbGUoKSBpbiBob3N0ZnNfdXNlci5jCi0gKiAoaWYgdGhleSBhcmUgd3JvbmcgaGVyZSwgdGhleSBhcmUgd3JvbmcgdGhlcmUuLi4pLgotICovCi1zdHJ1Y3QgdW1sX3N0YXQgewotCWludCAgICAgICAgICAgICAgICB1c3RfZGV2OyAgICAgICAgLyogZGV2aWNlICovCi0JdW5zaWduZWQgbG9uZyBsb25nIHVzdF9pbm87ICAgICAgICAvKiBpbm9kZSAqLwotCWludCAgICAgICAgICAgICAgICB1c3RfbW9kZTsgICAgICAgLyogcHJvdGVjdGlvbiAqLwotCWludCAgICAgICAgICAgICAgICB1c3Rfbmxpbms7ICAgICAgLyogbnVtYmVyIG9mIGhhcmQgbGlua3MgKi8KLQlpbnQgICAgICAgICAgICAgICAgdXN0X3VpZDsgICAgICAgIC8qIHVzZXIgSUQgb2Ygb3duZXIgKi8KLQlpbnQgICAgICAgICAgICAgICAgdXN0X2dpZDsgICAgICAgIC8qIGdyb3VwIElEIG9mIG93bmVyICovCi0JdW5zaWduZWQgbG9uZyBsb25nIHVzdF9zaXplOyAgICAgICAvKiB0b3RhbCBzaXplLCBpbiBieXRlcyAqLwotCWludCAgICAgICAgICAgICAgICB1c3RfYmxrc2l6ZTsgICAgLyogYmxvY2tzaXplIGZvciBmaWxlc3lzdGVtIEkvTyAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZyB1c3RfYmxvY2tzOyAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQgKi8KLQl1bnNpZ25lZCBsb25nICAgICAgdXN0X2F0aW1lOyAgICAgIC8qIHRpbWUgb2YgbGFzdCBhY2Nlc3MgKi8KLQl1bnNpZ25lZCBsb25nICAgICAgdXN0X210aW1lOyAgICAgIC8qIHRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24gKi8KLQl1bnNpZ25lZCBsb25nICAgICAgdXN0X2N0aW1lOyAgICAgIC8qIHRpbWUgb2YgbGFzdCBjaGFuZ2UgKi8KLX07Ci0KLXN0cnVjdCBvcGVuZmxhZ3MgewotCXVuc2lnbmVkIGludCByIDogMTsKLQl1bnNpZ25lZCBpbnQgdyA6IDE7Ci0JdW5zaWduZWQgaW50IHMgOiAxOwkvKiBPX1NZTkMgKi8KLQl1bnNpZ25lZCBpbnQgYyA6IDE7CS8qIE9fQ1JFQVQgKi8KLQl1bnNpZ25lZCBpbnQgdCA6IDE7CS8qIE9fVFJVTkMgKi8KLQl1bnNpZ25lZCBpbnQgYSA6IDE7CS8qIE9fQVBQRU5EICovCi0JdW5zaWduZWQgaW50IGUgOiAxOwkvKiBPX0VYQ0wgKi8KLQl1bnNpZ25lZCBpbnQgY2wgOiAxOyAgICAvKiBGRF9DTE9FWEVDICovCi19OwotCi0jZGVmaW5lIE9QRU5GTEFHUygpICgoc3RydWN0IG9wZW5mbGFncykgeyAuciA9IDAsIC53ID0gMCwgLnMgPSAwLCAuYyA9IDAsIFwKLQkJCQkJICAudCA9IDAsIC5hID0gMCwgLmUgPSAwLCAuY2wgPSAwIH0pCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG9wZW5mbGFncyBvZl9yZWFkKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCi17Ci0JZmxhZ3MuciA9IDE7Ci0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2Zfd3JpdGUoc3RydWN0IG9wZW5mbGFncyBmbGFncykKLXsKLQlmbGFncy53ID0gMTsKLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG9wZW5mbGFncyBvZl9yZHdyKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCi17Ci0JcmV0dXJuIG9mX3JlYWQob2Zfd3JpdGUoZmxhZ3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX3NldF9ydyhzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzLCBpbnQgciwgaW50IHcpCi17Ci0JZmxhZ3MuciA9IHI7Ci0JZmxhZ3MudyA9IHc7Ci0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2Zfc3luYyhzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzKQotewotCWZsYWdzLnMgPSAxOwotCXJldHVybiBmbGFnczsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX2NyZWF0ZShzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzKQotewotCWZsYWdzLmMgPSAxOwotCXJldHVybiBmbGFnczsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX3RydW5jKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCi17Ci0JZmxhZ3MudCA9IDE7Ci0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2ZfYXBwZW5kKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCi17Ci0JZmxhZ3MuYSA9IDE7Ci0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2ZfZXhjbChzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzKQotewotCWZsYWdzLmUgPSAxOwotCXJldHVybiBmbGFnczsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX2Nsb2V4ZWMoc3RydWN0IG9wZW5mbGFncyBmbGFncykKLXsKLQlmbGFncy5jbCA9IDE7Ci0JcmV0dXJuIGZsYWdzOwotfQotCi0vKiBmaWxlLmMgKi8KLWV4dGVybiBpbnQgb3Nfc3RhdF9maWxlKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHVtbF9zdGF0ICpidWYpOwotZXh0ZXJuIGludCBvc19zdGF0X2ZkKGNvbnN0IGludCBmZCwgc3RydWN0IHVtbF9zdGF0ICpidWYpOwotZXh0ZXJuIGludCBvc19hY2Nlc3MoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUpOwotZXh0ZXJuIGludCBvc19zZXRfZXhlY19jbG9zZShpbnQgZmQpOwotZXh0ZXJuIGludCBvc19pb2N0bF9nZW5lcmljKGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotZXh0ZXJuIGludCBvc19nZXRfaWZuYW1lKGludCBmZCwgY2hhciAqbmFtZWJ1Zik7Ci1leHRlcm4gaW50IG9zX3NldF9zbGlwKGludCBmZCk7Ci1leHRlcm4gaW50IG9zX21vZGVfZmQoaW50IGZkLCBpbnQgbW9kZSk7Ci0KLWV4dGVybiBpbnQgb3Nfc2Vla19maWxlKGludCBmZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCk7Ci1leHRlcm4gaW50IG9zX29wZW5fZmlsZShjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzLCBpbnQgbW9kZSk7Ci1leHRlcm4gaW50IG9zX3JlYWRfZmlsZShpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Ci1leHRlcm4gaW50IG9zX3dyaXRlX2ZpbGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIGludCBjb3VudCk7Ci1leHRlcm4gaW50IG9zX2ZpbGVfc2l6ZShjb25zdCBjaGFyICpmaWxlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemVfb3V0KTsKLWV4dGVybiBpbnQgb3NfZmlsZV9tb2R0aW1lKGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgKm1vZHRpbWUpOwotZXh0ZXJuIGludCBvc19waXBlKGludCAqZmQsIGludCBzdHJlYW0sIGludCBjbG9zZV9vbl9leGVjKTsKLWV4dGVybiBpbnQgb3Nfc2V0X2ZkX2FzeW5jKGludCBmZCk7Ci1leHRlcm4gaW50IG9zX2NsZWFyX2ZkX2FzeW5jKGludCBmZCk7Ci1leHRlcm4gaW50IG9zX3NldF9mZF9ibG9jayhpbnQgZmQsIGludCBibG9ja2luZyk7Ci1leHRlcm4gaW50IG9zX2FjY2VwdF9jb25uZWN0aW9uKGludCBmZCk7Ci1leHRlcm4gaW50IG9zX2NyZWF0ZV91bml4X3NvY2tldChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGVuLCBpbnQgY2xvc2Vfb25fZXhlYyk7Ci1leHRlcm4gaW50IG9zX3NodXRkb3duX3NvY2tldChpbnQgZmQsIGludCByLCBpbnQgdyk7Ci1leHRlcm4gdm9pZCBvc19jbG9zZV9maWxlKGludCBmZCk7Ci1leHRlcm4gaW50IG9zX3Jjdl9mZChpbnQgZmQsIGludCAqaGVscGVyX3BpZF9vdXQpOwotZXh0ZXJuIGludCBjcmVhdGVfdW5peF9zb2NrZXQoY2hhciAqZmlsZSwgaW50IGxlbiwgaW50IGNsb3NlX29uX2V4ZWMpOwotZXh0ZXJuIGludCBvc19jb25uZWN0X3NvY2tldChjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiBpbnQgb3NfZmlsZV90eXBlKGNoYXIgKmZpbGUpOwotZXh0ZXJuIGludCBvc19maWxlX21vZGUoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IG9wZW5mbGFncyAqbW9kZV9vdXQpOwotZXh0ZXJuIGludCBvc19sb2NrX2ZpbGUoaW50IGZkLCBpbnQgZXhjbCk7Ci1leHRlcm4gdm9pZCBvc19mbHVzaF9zdGRvdXQodm9pZCk7Ci1leHRlcm4gaW50IG9zX3N0YXRfZmlsZXN5c3RlbShjaGFyICpwYXRoLCBsb25nICpic2l6ZV9vdXQsCi0JCQkgICAgICBsb25nIGxvbmcgKmJsb2Nrc19vdXQsIGxvbmcgbG9uZyAqYmZyZWVfb3V0LAotCQkJICAgICAgbG9uZyBsb25nICpiYXZhaWxfb3V0LCBsb25nIGxvbmcgKmZpbGVzX291dCwKLQkJCSAgICAgIGxvbmcgbG9uZyAqZmZyZWVfb3V0LCB2b2lkICpmc2lkX291dCwKLQkJCSAgICAgIGludCBmc2lkX3NpemUsIGxvbmcgKm5hbWVsZW5fb3V0LAotCQkJICAgICAgbG9uZyAqc3BhcmVfb3V0KTsKLWV4dGVybiBpbnQgb3NfY2hhbmdlX2RpcihjaGFyICpkaXIpOwotZXh0ZXJuIGludCBvc19mY2hhbmdlX2RpcihpbnQgZmQpOwotCi0vKiBzdGFydF91cC5jICovCi1leHRlcm4gdm9pZCBvc19lYXJseV9jaGVja3Modm9pZCk7Ci1leHRlcm4gdm9pZCBjYW5fZG9fc2thcyh2b2lkKTsKLWV4dGVybiB2b2lkIG9zX2NoZWNrX2J1Z3Modm9pZCk7Ci1leHRlcm4gdm9pZCBjaGVja19ob3N0X3N1cHBvcnRzX3RscyhpbnQgKnN1cHBvcnRzX3RscywgaW50ICp0bHNfbWluKTsKLQotLyogbWVtLmMgKi8KLWV4dGVybiBpbnQgY3JlYXRlX21lbV9maWxlKHVuc2lnbmVkIGxvbmcgbG9uZyBsZW4pOwotCi0vKiBwcm9jZXNzLmMgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIG9zX3Byb2Nlc3NfcGMoaW50IHBpZCk7Ci1leHRlcm4gaW50IG9zX3Byb2Nlc3NfcGFyZW50KGludCBwaWQpOwotZXh0ZXJuIHZvaWQgb3Nfc3RvcF9wcm9jZXNzKGludCBwaWQpOwotZXh0ZXJuIHZvaWQgb3Nfa2lsbF9wcm9jZXNzKGludCBwaWQsIGludCByZWFwX2NoaWxkKTsKLWV4dGVybiB2b2lkIG9zX2tpbGxfcHRyYWNlZF9wcm9jZXNzKGludCBwaWQsIGludCByZWFwX2NoaWxkKTsKLWV4dGVybiBsb25nIG9zX3B0cmFjZV9sZHQobG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKLQotZXh0ZXJuIGludCBvc19nZXRwaWQodm9pZCk7Ci1leHRlcm4gaW50IG9zX2dldHBncnAodm9pZCk7Ci0KLWV4dGVybiB2b2lkIGluaXRfbmV3X3RocmVhZF9zaWduYWxzKHZvaWQpOwotZXh0ZXJuIGludCBydW5fa2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBqbXBfYnVmICoqam1wX3B0cik7Ci0KLWV4dGVybiBpbnQgb3NfbWFwX21lbW9yeSh2b2lkICp2aXJ0LCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmYsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCByLCBpbnQgdywgaW50IHgpOwotZXh0ZXJuIGludCBvc19wcm90ZWN0X21lbW9yeSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJCSAgICAgaW50IHIsIGludCB3LCBpbnQgeCk7Ci1leHRlcm4gaW50IG9zX3VubWFwX21lbW9yeSh2b2lkICphZGRyLCBpbnQgbGVuKTsKLWV4dGVybiBpbnQgb3NfZHJvcF9tZW1vcnkodm9pZCAqYWRkciwgaW50IGxlbmd0aCk7Ci1leHRlcm4gaW50IGNhbl9kcm9wX21lbW9yeSh2b2lkKTsKLWV4dGVybiB2b2lkIG9zX2ZsdXNoX3N0ZG91dCh2b2lkKTsKLQotLyogdWFjY2Vzcy5jICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2RvX3VzZXJfY29weSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgaW50IG4sCi0JCQkJICAgIHZvaWQgKipmYXVsdF9hZGRyLCBqbXBfYnVmICoqZmF1bHRfY2F0Y2hlciwKLQkJCQkgICAgdm9pZCAoKm9wKSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKLQkJCQkJICAgICAgIGludCBuKSwgaW50ICpmYXVsdGVkX291dCk7Ci0KLS8qIGV4ZWN2cC5jICovCi1leHRlcm4gaW50IGV4ZWN2cF9ub2FsbG9jKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZmlsZSwgY2hhciAqY29uc3QgYXJndltdKTsKLS8qIGhlbHBlci5jICovCi1leHRlcm4gaW50IHJ1bl9oZWxwZXIodm9pZCAoKnByZV9leGVjKSh2b2lkICopLCB2b2lkICpwcmVfZGF0YSwgY2hhciAqKmFyZ3YpOwotZXh0ZXJuIGludCBydW5faGVscGVyX3RocmVhZChpbnQgKCpwcm9jKSh2b2lkICopLCB2b2lkICphcmcsCi0JCQkgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgbG9uZyAqc3RhY2tfb3V0KTsKLWV4dGVybiBpbnQgaGVscGVyX3dhaXQoaW50IHBpZCk7Ci0KLQotLyogdGxzLmMgKi8KLWV4dGVybiBpbnQgb3Nfc2V0X3RocmVhZF9hcmVhKHVzZXJfZGVzY190ICppbmZvLCBpbnQgcGlkKTsKLWV4dGVybiBpbnQgb3NfZ2V0X3RocmVhZF9hcmVhKHVzZXJfZGVzY190ICppbmZvLCBpbnQgcGlkKTsKLQotLyogdW1pZC5jICovCi1leHRlcm4gaW50IHVtaWRfZmlsZV9uYW1lKGNoYXIgKm5hbWUsIGNoYXIgKmJ1ZiwgaW50IGxlbik7Ci1leHRlcm4gaW50IHNldF91bWlkKGNoYXIgKm5hbWUpOwotZXh0ZXJuIGNoYXIgKmdldF91bWlkKHZvaWQpOwotCi0vKiBzaWduYWwuYyAqLwotZXh0ZXJuIHZvaWQgdGltZXJfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHNldF9zaWdzdGFjayh2b2lkICpzaWdfc3RhY2ssIGludCBzaXplKTsKLWV4dGVybiB2b2lkIHJlbW92ZV9zaWdzdGFjayh2b2lkKTsKLWV4dGVybiB2b2lkIHNldF9oYW5kbGVyKGludCBzaWcsIHZvaWQgKCpoYW5kbGVyKShpbnQpLCBpbnQgZmxhZ3MsIC4uLik7Ci1leHRlcm4gaW50IGNoYW5nZV9zaWcoaW50IHNpZ25hbCwgaW50IG9uKTsKLWV4dGVybiB2b2lkIGJsb2NrX3NpZ25hbHModm9pZCk7Ci1leHRlcm4gdm9pZCB1bmJsb2NrX3NpZ25hbHModm9pZCk7Ci1leHRlcm4gaW50IGdldF9zaWduYWxzKHZvaWQpOwotZXh0ZXJuIGludCBzZXRfc2lnbmFscyhpbnQgZW5hYmxlKTsKLQotLyogdXRpbC5jICovCi1leHRlcm4gdm9pZCBzdGFja19wcm90ZWN0aW9ucyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotZXh0ZXJuIGludCByYXcoaW50IGZkKTsKLWV4dGVybiB2b2lkIHNldHVwX21hY2hpbmVuYW1lKGNoYXIgKm1hY2hpbmVfb3V0KTsKLWV4dGVybiB2b2lkIHNldHVwX2hvc3RpbmZvKGNoYXIgKmJ1ZiwgaW50IGxlbik7Ci1leHRlcm4gdm9pZCBvc19kdW1wX2NvcmUodm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Ci0KLS8qIHRpbWUuYyAqLwotZXh0ZXJuIHZvaWQgaWRsZV9zbGVlcCh1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MpOwotZXh0ZXJuIGludCBzZXRfaW50ZXJ2YWwodm9pZCk7Ci1leHRlcm4gaW50IHRpbWVyX29uZV9zaG90KGludCB0aWNrcyk7Ci1leHRlcm4gbG9uZyBsb25nIGRpc2FibGVfdGltZXIodm9pZCk7Ci1leHRlcm4gdm9pZCB1bWxfaWRsZV90aW1lcih2b2lkKTsKLWV4dGVybiBsb25nIGxvbmcgb3NfbnNlY3Modm9pZCk7Ci0KLS8qIHNrYXMvbWVtLmMgKi8KLWV4dGVybiBsb25nIHJ1bl9zeXNjYWxsX3N0dWIoc3RydWN0IG1tX2lkICogbW1faWRwLAotCQkJICAgICBpbnQgc3lzY2FsbCwgdW5zaWduZWQgbG9uZyAqYXJncywgbG9uZyBleHBlY3RlZCwKLQkJCSAgICAgdm9pZCAqKmFkZHIsIGludCBkb25lKTsKLWV4dGVybiBsb25nIHN5c2NhbGxfc3R1Yl9kYXRhKHN0cnVjdCBtbV9pZCAqIG1tX2lkcCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmRhdGEsIGludCBkYXRhX2NvdW50LAotCQkJICAgICAgdm9pZCAqKmFkZHIsIHZvaWQgKipzdHViX2FkZHIpOwotZXh0ZXJuIGludCBtYXAoc3RydWN0IG1tX2lkICogbW1faWRwLCB1bnNpZ25lZCBsb25nIHZpcnQsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgcHJvdCwgaW50IHBoeXNfZmQsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIGludCBkb25lLCB2b2lkICoqZGF0YSk7Ci1leHRlcm4gaW50IHVubWFwKHN0cnVjdCBtbV9pZCAqIG1tX2lkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJIGludCBkb25lLCB2b2lkICoqZGF0YSk7Ci1leHRlcm4gaW50IHByb3RlY3Qoc3RydWN0IG1tX2lkICogbW1faWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBpbnQgcHJvdCwgaW50IGRvbmUsIHZvaWQgKipkYXRhKTsKLQotLyogc2thcy9wcm9jZXNzLmMgKi8KLWV4dGVybiBpbnQgaXNfc2thc193aW5jaChpbnQgcGlkLCBpbnQgZmQsIHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCBzdGFydF91c2Vyc3BhY2UodW5zaWduZWQgbG9uZyBzdHViX3N0YWNrKTsKLWV4dGVybiBpbnQgY29weV9jb250ZXh0X3NrYXMwKHVuc2lnbmVkIGxvbmcgc3RhY2ssIGludCBwaWQpOwotZXh0ZXJuIHZvaWQgdXNlcnNwYWNlKHN0cnVjdCB1bWxfcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IG1hcF9zdHViX3BhZ2VzKGludCBmZCwgdW5zaWduZWQgbG9uZyBjb2RlLCB1bnNpZ25lZCBsb25nIGRhdGEsCi0JCQkgIHVuc2lnbmVkIGxvbmcgc3RhY2spOwotZXh0ZXJuIHZvaWQgbmV3X3RocmVhZCh2b2lkICpzdGFjaywgam1wX2J1ZiAqYnVmLCB2b2lkICgqaGFuZGxlcikodm9pZCkpOwotZXh0ZXJuIHZvaWQgc3dpdGNoX3RocmVhZHMoam1wX2J1ZiAqbWUsIGptcF9idWYgKnlvdSk7Ci1leHRlcm4gaW50IHN0YXJ0X2lkbGVfdGhyZWFkKHZvaWQgKnN0YWNrLCBqbXBfYnVmICpzd2l0Y2hfYnVmKTsKLWV4dGVybiB2b2lkIGluaXRpYWxfdGhyZWFkX2NiX3NrYXModm9pZCAoKnByb2MpKHZvaWQgKiksCi0JCQkJIHZvaWQgKmFyZyk7Ci1leHRlcm4gdm9pZCBoYWx0X3NrYXModm9pZCk7Ci1leHRlcm4gdm9pZCByZWJvb3Rfc2thcyh2b2lkKTsKLQotLyogaXJxLmMgKi8KLWV4dGVybiBpbnQgb3Nfd2FpdGluZ19mb3JfZXZlbnRzKHN0cnVjdCBpcnFfZmQgKmFjdGl2ZV9mZHMpOwotZXh0ZXJuIGludCBvc19jcmVhdGVfcG9sbGZkKGludCBmZCwgaW50IGV2ZW50cywgdm9pZCAqdG1wX3BmZCwgaW50IHNpemVfdG1wZmRzKTsKLWV4dGVybiB2b2lkIG9zX2ZyZWVfaXJxX2J5X2NiKGludCAoKnRlc3QpKHN0cnVjdCBpcnFfZmQgKiwgdm9pZCAqKSwgdm9pZCAqYXJnLAotCQlzdHJ1Y3QgaXJxX2ZkICphY3RpdmVfZmRzLCBzdHJ1Y3QgaXJxX2ZkICoqKmxhc3RfaXJxX3B0cjIpOwotZXh0ZXJuIHZvaWQgb3NfZnJlZV9pcnFfbGF0ZXIoc3RydWN0IGlycV9mZCAqYWN0aXZlX2ZkcywKLQkJaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLWV4dGVybiBpbnQgb3NfZ2V0X3BvbGxmZChpbnQgaSk7Ci1leHRlcm4gdm9pZCBvc19zZXRfcG9sbGZkKGludCBpLCBpbnQgZmQpOwotZXh0ZXJuIHZvaWQgb3Nfc2V0X2lvaWdub3JlKHZvaWQpOwotCi0vKiBzaWdpby5jICovCi1leHRlcm4gaW50IGFkZF9zaWdpb19mZChpbnQgZmQpOwotZXh0ZXJuIGludCBpZ25vcmVfc2lnaW9fZmQoaW50IGZkKTsKLWV4dGVybiB2b2lkIG1heWJlX3NpZ2lvX2Jyb2tlbihpbnQgZmQsIGludCByZWFkKTsKLWV4dGVybiB2b2lkIHNpZ2lvX2Jyb2tlbihpbnQgZmQsIGludCByZWFkKTsKLQotLyogc3lzLXg4Nl82NC9wcmN0bC5jICovCi1leHRlcm4gaW50IG9zX2FyY2hfcHJjdGwoaW50IHBpZCwgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgKmFkZHIpOwotCi0vKiB0dHkuYyAqLwotZXh0ZXJuIGludCBnZXRfcHR5KHZvaWQpOwotCi0vKiBzeXMtJEFSQ0gvdGFza19zaXplLmMgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIG9zX2dldF90b3BfYWRkcmVzcyh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYWlvLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2Fpby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvYWlvLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvYWlvLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hcmNoLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2FyY2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL2FyY2guaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9hcmNoLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvYXMtbGF5b3V0LmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2FzLWxheW91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MmI2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2FzLWxheW91dC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19TVEFSVF9IX18KKyNkZWZpbmUgX19TVEFSVF9IX18KKworI2luY2x1ZGUgImtlcm5fY29uc3RhbnRzLmgiCisKKy8qCisgKiBTdG9sZW4gZnJvbSBsaW51eC9jb25zdC5oLCB3aGljaCBjYW4ndCBiZSBkaXJlY3RseSBpbmNsdWRlZCBzaW5jZQorICogdGhpcyBpcyB1c2VkIGluIHVzZXJzcGFjZSBjb2RlLCB3aGljaCBoYXMgbm8gYWNjZXNzIHRvIHRoZSBrZXJuZWwKKyAqIGhlYWRlcnMuICBDaGFuZ2VkIHRvIGJlIHN1aXRhYmxlIGZvciBhZGRpbmcgY2FzdHMgdG8gdGhlIHN0YXJ0LAorICogcmF0aGVyIHRoYW4gIlVMIiB0byB0aGUgZW5kLgorICovCisKKy8qIFNvbWUgY29uc3RhbnQgbWFjcm9zIGFyZSB1c2VkIGluIGJvdGggYXNzZW1ibGVyIGFuZAorICogQyBjb2RlLiAgVGhlcmVmb3JlIHdlIGNhbm5vdCBhbm5vdGF0ZSB0aGVtIGFsd2F5cyB3aXRoCisgKiAnVUwnIGFuZCBvdGhlciB0eXBlIHNwZWNpZmllcnMgdW5pbGF0ZXJhbGx5LiAgV2UKKyAqIHVzZSB0aGUgZm9sbG93aW5nIG1hY3JvcyB0byBkZWFsIHdpdGggdGhpcy4KKyAqLworCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIF9VTUxfQUMoWCwgWSkJKFkpCisjZWxzZQorI2RlZmluZSBfX1VNTF9BQyhYLCBZKQkoWChZKSkKKyNkZWZpbmUgX1VNTF9BQyhYLCBZKQlfX1VNTF9BQyhYLCBZKQorI2VuZGlmCisKKyNkZWZpbmUgU1RVQl9TVEFSVCBfVU1MX0FDKCwgMHgxMDAwMDApCisjZGVmaW5lIFNUVUJfQ09ERSBfVU1MX0FDKCh1bnNpZ25lZCBsb25nKSwgU1RVQl9TVEFSVCkKKyNkZWZpbmUgU1RVQl9EQVRBIF9VTUxfQUMoKHVuc2lnbmVkIGxvbmcpLCBTVFVCX0NPREUgKyBVTV9LRVJOX1BBR0VfU0laRSkKKyNkZWZpbmUgU1RVQl9FTkQgX1VNTF9BQygodW5zaWduZWQgbG9uZyksIFNUVUJfREFUQSArIFVNX0tFUk5fUEFHRV9TSVpFKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgorCitzdHJ1Y3QgY3B1X3Rhc2sgeworCWludCBwaWQ7CisJdm9pZCAqdGFzazsKK307CisKK2V4dGVybiBzdHJ1Y3QgY3B1X3Rhc2sgY3B1X3Rhc2tzW107CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvd19waHlzbWVtOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaF9waHlzbWVtOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdW1sX3BoeXNtZW07CitleHRlcm4gdW5zaWduZWQgbG9uZyB1bWxfcmVzZXJ2ZWQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBlbmRfdm07CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydF92bTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaGlnaG1lbTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX3N0ZXh0LCBfZXRleHQsIF9zZGF0YSwgX2VkYXRhLCBfX2Jzc19zdGFydCwgX2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF91bnByb3RlY3RlZF9lbmQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBicmtfc3RhcnQ7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGhvc3RfdGFza19zaXplOworCitleHRlcm4gaW50IGxpbnV4X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworZXh0ZXJuIHZvaWQgKCpzaWdfaW5mb1tdKShpbnQsIHN0cnVjdCB1bWxfcHRfcmVncyAqKTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2NoYW5fa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9jaGFuX2tlcm4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL2NoYW5fa2Vybi5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2NoYW5fa2Vybi5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvY2hhbl91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2NoYW5fdXNlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvY2hhbl91c2VyLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvY2hhbl91c2VyLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvY29tbW9uLW9mZnNldHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvY29tbW9uLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjAwOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9jb21tb24tb2Zmc2V0cy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIGZvciB1c2UgYnkgc3lzLSRTVUJBUkNIL2tlcm5lbC1vZmZzZXRzLmMgKi8KKworREVGSU5FKEtFUk5FTF9NQURWX1JFTU9WRSwgTUFEVl9SRU1PVkUpOworCitPRkZTRVQoSE9TVF9UQVNLX1JFR1MsIHRhc2tfc3RydWN0LCB0aHJlYWQucmVncyk7CitPRkZTRVQoSE9TVF9UQVNLX1BJRCwgdGFza19zdHJ1Y3QsIHBpZCk7CisKK0RFRklORShVTV9LRVJOX1BBR0VfU0laRSwgUEFHRV9TSVpFKTsKK0RFRklORShVTV9LRVJOX1BBR0VfTUFTSywgUEFHRV9NQVNLKTsKK0RFRklORShVTV9LRVJOX1BBR0VfU0hJRlQsIFBBR0VfU0hJRlQpOworREVGSU5FKFVNX05TRUNfUEVSX1NFQywgTlNFQ19QRVJfU0VDKTsKKworREVGSU5FX1NUUihVTV9LRVJOX0VNRVJHLCBLRVJOX0VNRVJHKTsKK0RFRklORV9TVFIoVU1fS0VSTl9BTEVSVCwgS0VSTl9BTEVSVCk7CitERUZJTkVfU1RSKFVNX0tFUk5fQ1JJVCwgS0VSTl9DUklUKTsKK0RFRklORV9TVFIoVU1fS0VSTl9FUlIsIEtFUk5fRVJSKTsKK0RFRklORV9TVFIoVU1fS0VSTl9XQVJOSU5HLCBLRVJOX1dBUk5JTkcpOworREVGSU5FX1NUUihVTV9LRVJOX05PVElDRSwgS0VSTl9OT1RJQ0UpOworREVGSU5FX1NUUihVTV9LRVJOX0lORk8sIEtFUk5fSU5GTyk7CitERUZJTkVfU1RSKFVNX0tFUk5fREVCVUcsIEtFUk5fREVCVUcpOworREVGSU5FX1NUUihVTV9LRVJOX0NPTlQsIEtFUk5fQ09OVCk7CisKK0RFRklORShVTV9FTEZfQ0xBU1MsIEVMRl9DTEFTUyk7CitERUZJTkUoVU1fRUxGQ0xBU1MzMiwgRUxGQ0xBU1MzMik7CitERUZJTkUoVU1fRUxGQ0xBU1M2NCwgRUxGQ0xBU1M2NCk7CisKK0RFRklORShVTV9OUl9DUFVTLCBOUl9DUFVTKTsKKworREVGSU5FKFVNX0dGUF9LRVJORUwsIEdGUF9LRVJORUwpOworREVGSU5FKFVNX0dGUF9BVE9NSUMsIEdGUF9BVE9NSUMpOworCisvKiBGb3IgY3J5cHRvIGFzc2VtYmxlciBjb2RlLiAqLworREVGSU5FKGNyeXB0b190Zm1fY3R4X29mZnNldCwgb2Zmc2V0b2Yoc3RydWN0IGNyeXB0b190Zm0sIF9fY3J0X2N0eCkpOworCitERUZJTkUoVU1fVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKTsKKworREVGSU5FKFVNX0haLCBIWik7CisKK0RFRklORShVTV9VU0VDX1BFUl9TRUMsIFVTRUNfUEVSX1NFQyk7CitERUZJTkUoVU1fTlNFQ19QRVJfU0VDLCBOU0VDX1BFUl9TRUMpOworREVGSU5FKFVNX05TRUNfUEVSX1VTRUMsIE5TRUNfUEVSX1VTRUMpOworCisjaWZkZWYgQ09ORklHX1BSSU5USworREVGSU5FKFVNTF9DT05GSUdfUFJJTlRLLCBDT05GSUdfUFJJTlRLKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19OT19IWgorREVGSU5FKFVNTF9DT05GSUdfTk9fSFosIENPTkZJR19OT19IWik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVU1MX1g4NgorREVGSU5FKFVNTF9DT05GSUdfVU1MX1g4NiwgQ09ORklHX1VNTF9YODYpOworI2VuZGlmCisjaWZkZWYgQ09ORklHXzY0QklUCitERUZJTkUoVU1MX0NPTkZJR182NEJJVCwgQ09ORklHXzY0QklUKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2VsZl91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2VsZl91c2VyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9lbGZfdXNlci5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2VsZl91c2VyLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9mcmFtZV9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2ZyYW1lX2tlcm4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL2ZyYW1lX2tlcm4uaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9mcmFtZV9rZXJuLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9pbml0LmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2luaXQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL2luaXQuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pbml0LmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9pbml0cmQuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvaW5pdHJkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9pbml0cmQuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pbml0cmQuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2lycV9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2lycV9rZXJuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9pcnFfa2Vybi5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2lycV9rZXJuLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9pcnFfdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pcnFfdXNlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvaXJxX3VzZXIuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pcnFfdXNlci5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUva2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9rZXJuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9rZXJuLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQva2Vybi5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2tlcm5fdXRpbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQva2Vybl91dGlsLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbGR0LmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Zjk5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xkdC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBHbWJICisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKgorICogQXV0aG9yOiBCb2RvIFN0cm9lc3NlciA8YnN0cm9lc3NlckBmdWppdHN1LXNpZW1lbnMuY29tPgorICovCisKKyNpZm5kZWYgX19BU01fTERUX0gKKyNkZWZpbmUgX19BU01fTERUX0gKKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8c3lzZGVwL2hvc3RfbGR0Lmg+CisKK2V4dGVybiB2b2lkIGxkdF9ob3N0X2luZm8odm9pZCk7CisKKyNkZWZpbmUgTERUX1BBR0VTX01BWCBcCisJKChMRFRfRU5UUklFUyAqIExEVF9FTlRSWV9TSVpFKS9QQUdFX1NJWkUpCisjZGVmaW5lIExEVF9FTlRSSUVTX1BFUl9QQUdFIFwKKwkoUEFHRV9TSVpFL0xEVF9FTlRSWV9TSVpFKQorI2RlZmluZSBMRFRfRElSRUNUX0VOVFJJRVMgXAorCSgoTERUX1BBR0VTX01BWCpzaXplb2Yodm9pZCAqKSkvTERUX0VOVFJZX1NJWkUpCisKK3N0cnVjdCBsZHRfZW50cnkgeworCV9fdTMyIGE7CisJX191MzIgYjsKK307CisKK3R5cGVkZWYgc3RydWN0IHVtbF9sZHQgeworCWludCBlbnRyeV9jb3VudDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl1bmlvbiB7CisJCXN0cnVjdCBsZHRfZW50cnkgKiBwYWdlc1tMRFRfUEFHRVNfTUFYXTsKKwkJc3RydWN0IGxkdF9lbnRyeSBlbnRyaWVzW0xEVF9ESVJFQ1RfRU5UUklFU107CisJfSB1OworfSB1bWxfbGR0X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2xpbmUuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbGluZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvbGluZS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xpbmUuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2xvbmdqbXAuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbG9uZ2ptcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvbG9uZ2ptcC5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xvbmdqbXAuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL21jb25zb2xlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9tY29uc29sZS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL21jb25zb2xlLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9tY29uc29sZV9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL21jb25zb2xlX2tlcm4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL21jb25zb2xlX2tlcm4uaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tY29uc29sZV9rZXJuLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9tZW0uaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbWVtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9tZW0uaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tZW0uaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL21lbV9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL21lbV9rZXJuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9tZW1fa2Vybi5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL21lbV9rZXJuLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9tZW1fdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tZW1fdXNlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvbWVtX3VzZXIuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tZW1fdXNlci5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvbmV0X2tlcm4uaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbmV0X2tlcm4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL25ldF9rZXJuLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbmV0X2tlcm4uaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL25ldF91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF91c2VyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9uZXRfdXNlci5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF91c2VyLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQwZmRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX09TX0hfXworI2RlZmluZSBfX09TX0hfXworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAiaXJxX3VzZXIuaCIKKyNpbmNsdWRlICJsb25nam1wLmgiCisjaW5jbHVkZSAibW1faWQuaCIKKyNpbmNsdWRlICJzeXNkZXAvdGxzLmgiCisKKyNkZWZpbmUgQ0FUQ0hfRUlOVFIoZXhwcikgd2hpbGUgKChlcnJubyA9IDAsICgoZXhwcikgPCAwKSkgJiYgKGVycm5vID09IEVJTlRSKSkKKworI2RlZmluZSBPU19UWVBFX0ZJTEUgMQorI2RlZmluZSBPU19UWVBFX0RJUiAyCisjZGVmaW5lIE9TX1RZUEVfU1lNTElOSyAzCisjZGVmaW5lIE9TX1RZUEVfQ0hBUkRFViA0CisjZGVmaW5lIE9TX1RZUEVfQkxPQ0tERVYgNQorI2RlZmluZSBPU19UWVBFX0ZJRk8gNgorI2RlZmluZSBPU19UWVBFX1NPQ0sgNworCisvKiBvc19hY2Nlc3MoKSBmbGFncyAqLworI2RlZmluZSBPU19BQ0NfRl9PSyAgICAwICAgICAgIC8qIFRlc3QgZm9yIGV4aXN0ZW5jZS4gICovCisjZGVmaW5lIE9TX0FDQ19YX09LICAgIDEgICAgICAgLyogVGVzdCBmb3IgZXhlY3V0ZSBwZXJtaXNzaW9uLiAgKi8KKyNkZWZpbmUgT1NfQUNDX1dfT0sgICAgMiAgICAgICAvKiBUZXN0IGZvciB3cml0ZSBwZXJtaXNzaW9uLiAgKi8KKyNkZWZpbmUgT1NfQUNDX1JfT0sgICAgNCAgICAgICAvKiBUZXN0IGZvciByZWFkIHBlcm1pc3Npb24uICAqLworI2RlZmluZSBPU19BQ0NfUldfT0sgICAoT1NfQUNDX1dfT0sgfCBPU19BQ0NfUl9PSykgLyogVGVzdCBmb3IgUlcgcGVybWlzc2lvbiAqLworCisvKgorICogdHlwZXMgdGFrZW4gZnJvbSBzdGF0X2ZpbGUoKSBpbiBob3N0ZnNfdXNlci5jCisgKiAoaWYgdGhleSBhcmUgd3JvbmcgaGVyZSwgdGhleSBhcmUgd3JvbmcgdGhlcmUuLi4pLgorICovCitzdHJ1Y3QgdW1sX3N0YXQgeworCWludCAgICAgICAgICAgICAgICB1c3RfZGV2OyAgICAgICAgLyogZGV2aWNlICovCisJdW5zaWduZWQgbG9uZyBsb25nIHVzdF9pbm87ICAgICAgICAvKiBpbm9kZSAqLworCWludCAgICAgICAgICAgICAgICB1c3RfbW9kZTsgICAgICAgLyogcHJvdGVjdGlvbiAqLworCWludCAgICAgICAgICAgICAgICB1c3Rfbmxpbms7ICAgICAgLyogbnVtYmVyIG9mIGhhcmQgbGlua3MgKi8KKwlpbnQgICAgICAgICAgICAgICAgdXN0X3VpZDsgICAgICAgIC8qIHVzZXIgSUQgb2Ygb3duZXIgKi8KKwlpbnQgICAgICAgICAgICAgICAgdXN0X2dpZDsgICAgICAgIC8qIGdyb3VwIElEIG9mIG93bmVyICovCisJdW5zaWduZWQgbG9uZyBsb25nIHVzdF9zaXplOyAgICAgICAvKiB0b3RhbCBzaXplLCBpbiBieXRlcyAqLworCWludCAgICAgICAgICAgICAgICB1c3RfYmxrc2l6ZTsgICAgLyogYmxvY2tzaXplIGZvciBmaWxlc3lzdGVtIEkvTyAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyB1c3RfYmxvY2tzOyAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQgKi8KKwl1bnNpZ25lZCBsb25nICAgICAgdXN0X2F0aW1lOyAgICAgIC8qIHRpbWUgb2YgbGFzdCBhY2Nlc3MgKi8KKwl1bnNpZ25lZCBsb25nICAgICAgdXN0X210aW1lOyAgICAgIC8qIHRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nICAgICAgdXN0X2N0aW1lOyAgICAgIC8qIHRpbWUgb2YgbGFzdCBjaGFuZ2UgKi8KK307CisKK3N0cnVjdCBvcGVuZmxhZ3MgeworCXVuc2lnbmVkIGludCByIDogMTsKKwl1bnNpZ25lZCBpbnQgdyA6IDE7CisJdW5zaWduZWQgaW50IHMgOiAxOwkvKiBPX1NZTkMgKi8KKwl1bnNpZ25lZCBpbnQgYyA6IDE7CS8qIE9fQ1JFQVQgKi8KKwl1bnNpZ25lZCBpbnQgdCA6IDE7CS8qIE9fVFJVTkMgKi8KKwl1bnNpZ25lZCBpbnQgYSA6IDE7CS8qIE9fQVBQRU5EICovCisJdW5zaWduZWQgaW50IGUgOiAxOwkvKiBPX0VYQ0wgKi8KKwl1bnNpZ25lZCBpbnQgY2wgOiAxOyAgICAvKiBGRF9DTE9FWEVDICovCit9OworCisjZGVmaW5lIE9QRU5GTEFHUygpICgoc3RydWN0IG9wZW5mbGFncykgeyAuciA9IDAsIC53ID0gMCwgLnMgPSAwLCAuYyA9IDAsIFwKKwkJCQkJICAudCA9IDAsIC5hID0gMCwgLmUgPSAwLCAuY2wgPSAwIH0pCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9wZW5mbGFncyBvZl9yZWFkKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCit7CisJZmxhZ3MuciA9IDE7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2Zfd3JpdGUoc3RydWN0IG9wZW5mbGFncyBmbGFncykKK3sKKwlmbGFncy53ID0gMTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9wZW5mbGFncyBvZl9yZHdyKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCit7CisJcmV0dXJuIG9mX3JlYWQob2Zfd3JpdGUoZmxhZ3MpKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX3NldF9ydyhzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzLCBpbnQgciwgaW50IHcpCit7CisJZmxhZ3MuciA9IHI7CisJZmxhZ3MudyA9IHc7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2Zfc3luYyhzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzKQoreworCWZsYWdzLnMgPSAxOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX2NyZWF0ZShzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzKQoreworCWZsYWdzLmMgPSAxOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX3RydW5jKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCit7CisJZmxhZ3MudCA9IDE7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2ZfYXBwZW5kKHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MpCit7CisJZmxhZ3MuYSA9IDE7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvcGVuZmxhZ3Mgb2ZfZXhjbChzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzKQoreworCWZsYWdzLmUgPSAxOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3BlbmZsYWdzIG9mX2Nsb2V4ZWMoc3RydWN0IG9wZW5mbGFncyBmbGFncykKK3sKKwlmbGFncy5jbCA9IDE7CisJcmV0dXJuIGZsYWdzOworfQorCisvKiBmaWxlLmMgKi8KK2V4dGVybiBpbnQgb3Nfc3RhdF9maWxlKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHVtbF9zdGF0ICpidWYpOworZXh0ZXJuIGludCBvc19zdGF0X2ZkKGNvbnN0IGludCBmZCwgc3RydWN0IHVtbF9zdGF0ICpidWYpOworZXh0ZXJuIGludCBvc19hY2Nlc3MoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUpOworZXh0ZXJuIGludCBvc19zZXRfZXhlY19jbG9zZShpbnQgZmQpOworZXh0ZXJuIGludCBvc19pb2N0bF9nZW5lcmljKGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBvc19nZXRfaWZuYW1lKGludCBmZCwgY2hhciAqbmFtZWJ1Zik7CitleHRlcm4gaW50IG9zX3NldF9zbGlwKGludCBmZCk7CitleHRlcm4gaW50IG9zX21vZGVfZmQoaW50IGZkLCBpbnQgbW9kZSk7CisKK2V4dGVybiBpbnQgb3Nfc2Vla19maWxlKGludCBmZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCk7CitleHRlcm4gaW50IG9zX29wZW5fZmlsZShjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IG9zX3JlYWRfZmlsZShpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGxlbik7CitleHRlcm4gaW50IG9zX3dyaXRlX2ZpbGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIGludCBjb3VudCk7CitleHRlcm4gaW50IG9zX2ZpbGVfc2l6ZShjb25zdCBjaGFyICpmaWxlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemVfb3V0KTsKK2V4dGVybiBpbnQgb3NfZmlsZV9tb2R0aW1lKGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgKm1vZHRpbWUpOworZXh0ZXJuIGludCBvc19waXBlKGludCAqZmQsIGludCBzdHJlYW0sIGludCBjbG9zZV9vbl9leGVjKTsKK2V4dGVybiBpbnQgb3Nfc2V0X2ZkX2FzeW5jKGludCBmZCk7CitleHRlcm4gaW50IG9zX2NsZWFyX2ZkX2FzeW5jKGludCBmZCk7CitleHRlcm4gaW50IG9zX3NldF9mZF9ibG9jayhpbnQgZmQsIGludCBibG9ja2luZyk7CitleHRlcm4gaW50IG9zX2FjY2VwdF9jb25uZWN0aW9uKGludCBmZCk7CitleHRlcm4gaW50IG9zX2NyZWF0ZV91bml4X3NvY2tldChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGVuLCBpbnQgY2xvc2Vfb25fZXhlYyk7CitleHRlcm4gaW50IG9zX3NodXRkb3duX3NvY2tldChpbnQgZmQsIGludCByLCBpbnQgdyk7CitleHRlcm4gdm9pZCBvc19jbG9zZV9maWxlKGludCBmZCk7CitleHRlcm4gaW50IG9zX3Jjdl9mZChpbnQgZmQsIGludCAqaGVscGVyX3BpZF9vdXQpOworZXh0ZXJuIGludCBjcmVhdGVfdW5peF9zb2NrZXQoY2hhciAqZmlsZSwgaW50IGxlbiwgaW50IGNsb3NlX29uX2V4ZWMpOworZXh0ZXJuIGludCBvc19jb25uZWN0X3NvY2tldChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgb3NfZmlsZV90eXBlKGNoYXIgKmZpbGUpOworZXh0ZXJuIGludCBvc19maWxlX21vZGUoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IG9wZW5mbGFncyAqbW9kZV9vdXQpOworZXh0ZXJuIGludCBvc19sb2NrX2ZpbGUoaW50IGZkLCBpbnQgZXhjbCk7CitleHRlcm4gdm9pZCBvc19mbHVzaF9zdGRvdXQodm9pZCk7CitleHRlcm4gaW50IG9zX3N0YXRfZmlsZXN5c3RlbShjaGFyICpwYXRoLCBsb25nICpic2l6ZV9vdXQsCisJCQkgICAgICBsb25nIGxvbmcgKmJsb2Nrc19vdXQsIGxvbmcgbG9uZyAqYmZyZWVfb3V0LAorCQkJICAgICAgbG9uZyBsb25nICpiYXZhaWxfb3V0LCBsb25nIGxvbmcgKmZpbGVzX291dCwKKwkJCSAgICAgIGxvbmcgbG9uZyAqZmZyZWVfb3V0LCB2b2lkICpmc2lkX291dCwKKwkJCSAgICAgIGludCBmc2lkX3NpemUsIGxvbmcgKm5hbWVsZW5fb3V0LAorCQkJICAgICAgbG9uZyAqc3BhcmVfb3V0KTsKK2V4dGVybiBpbnQgb3NfY2hhbmdlX2RpcihjaGFyICpkaXIpOworZXh0ZXJuIGludCBvc19mY2hhbmdlX2RpcihpbnQgZmQpOworCisvKiBzdGFydF91cC5jICovCitleHRlcm4gdm9pZCBvc19lYXJseV9jaGVja3Modm9pZCk7CitleHRlcm4gdm9pZCBjYW5fZG9fc2thcyh2b2lkKTsKK2V4dGVybiB2b2lkIG9zX2NoZWNrX2J1Z3Modm9pZCk7CitleHRlcm4gdm9pZCBjaGVja19ob3N0X3N1cHBvcnRzX3RscyhpbnQgKnN1cHBvcnRzX3RscywgaW50ICp0bHNfbWluKTsKKworLyogbWVtLmMgKi8KK2V4dGVybiBpbnQgY3JlYXRlX21lbV9maWxlKHVuc2lnbmVkIGxvbmcgbG9uZyBsZW4pOworCisvKiBwcm9jZXNzLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG9zX3Byb2Nlc3NfcGMoaW50IHBpZCk7CitleHRlcm4gaW50IG9zX3Byb2Nlc3NfcGFyZW50KGludCBwaWQpOworZXh0ZXJuIHZvaWQgb3Nfc3RvcF9wcm9jZXNzKGludCBwaWQpOworZXh0ZXJuIHZvaWQgb3Nfa2lsbF9wcm9jZXNzKGludCBwaWQsIGludCByZWFwX2NoaWxkKTsKK2V4dGVybiB2b2lkIG9zX2tpbGxfcHRyYWNlZF9wcm9jZXNzKGludCBwaWQsIGludCByZWFwX2NoaWxkKTsKK2V4dGVybiBsb25nIG9zX3B0cmFjZV9sZHQobG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKKworZXh0ZXJuIGludCBvc19nZXRwaWQodm9pZCk7CitleHRlcm4gaW50IG9zX2dldHBncnAodm9pZCk7CisKK2V4dGVybiB2b2lkIGluaXRfbmV3X3RocmVhZF9zaWduYWxzKHZvaWQpOworZXh0ZXJuIGludCBydW5fa2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBqbXBfYnVmICoqam1wX3B0cik7CisKK2V4dGVybiBpbnQgb3NfbWFwX21lbW9yeSh2b2lkICp2aXJ0LCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmYsCisJCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCByLCBpbnQgdywgaW50IHgpOworZXh0ZXJuIGludCBvc19wcm90ZWN0X21lbW9yeSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCSAgICAgaW50IHIsIGludCB3LCBpbnQgeCk7CitleHRlcm4gaW50IG9zX3VubWFwX21lbW9yeSh2b2lkICphZGRyLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgb3NfZHJvcF9tZW1vcnkodm9pZCAqYWRkciwgaW50IGxlbmd0aCk7CitleHRlcm4gaW50IGNhbl9kcm9wX21lbW9yeSh2b2lkKTsKK2V4dGVybiB2b2lkIG9zX2ZsdXNoX3N0ZG91dCh2b2lkKTsKKworLyogdWFjY2Vzcy5jICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2RvX3VzZXJfY29weSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgaW50IG4sCisJCQkJICAgIHZvaWQgKipmYXVsdF9hZGRyLCBqbXBfYnVmICoqZmF1bHRfY2F0Y2hlciwKKwkJCQkgICAgdm9pZCAoKm9wKSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKKwkJCQkJICAgICAgIGludCBuKSwgaW50ICpmYXVsdGVkX291dCk7CisKKy8qIGV4ZWN2cC5jICovCitleHRlcm4gaW50IGV4ZWN2cF9ub2FsbG9jKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZmlsZSwgY2hhciAqY29uc3QgYXJndltdKTsKKy8qIGhlbHBlci5jICovCitleHRlcm4gaW50IHJ1bl9oZWxwZXIodm9pZCAoKnByZV9leGVjKSh2b2lkICopLCB2b2lkICpwcmVfZGF0YSwgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBydW5faGVscGVyX3RocmVhZChpbnQgKCpwcm9jKSh2b2lkICopLCB2b2lkICphcmcsCisJCQkgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgbG9uZyAqc3RhY2tfb3V0KTsKK2V4dGVybiBpbnQgaGVscGVyX3dhaXQoaW50IHBpZCk7CisKKworLyogdGxzLmMgKi8KK2V4dGVybiBpbnQgb3Nfc2V0X3RocmVhZF9hcmVhKHVzZXJfZGVzY190ICppbmZvLCBpbnQgcGlkKTsKK2V4dGVybiBpbnQgb3NfZ2V0X3RocmVhZF9hcmVhKHVzZXJfZGVzY190ICppbmZvLCBpbnQgcGlkKTsKKworLyogdW1pZC5jICovCitleHRlcm4gaW50IHVtaWRfZmlsZV9uYW1lKGNoYXIgKm5hbWUsIGNoYXIgKmJ1ZiwgaW50IGxlbik7CitleHRlcm4gaW50IHNldF91bWlkKGNoYXIgKm5hbWUpOworZXh0ZXJuIGNoYXIgKmdldF91bWlkKHZvaWQpOworCisvKiBzaWduYWwuYyAqLworZXh0ZXJuIHZvaWQgdGltZXJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9zaWdzdGFjayh2b2lkICpzaWdfc3RhY2ssIGludCBzaXplKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9zaWdzdGFjayh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9oYW5kbGVyKGludCBzaWcsIHZvaWQgKCpoYW5kbGVyKShpbnQpLCBpbnQgZmxhZ3MsIC4uLik7CitleHRlcm4gaW50IGNoYW5nZV9zaWcoaW50IHNpZ25hbCwgaW50IG9uKTsKK2V4dGVybiB2b2lkIGJsb2NrX3NpZ25hbHModm9pZCk7CitleHRlcm4gdm9pZCB1bmJsb2NrX3NpZ25hbHModm9pZCk7CitleHRlcm4gaW50IGdldF9zaWduYWxzKHZvaWQpOworZXh0ZXJuIGludCBzZXRfc2lnbmFscyhpbnQgZW5hYmxlKTsKKworLyogdXRpbC5jICovCitleHRlcm4gdm9pZCBzdGFja19wcm90ZWN0aW9ucyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworZXh0ZXJuIGludCByYXcoaW50IGZkKTsKK2V4dGVybiB2b2lkIHNldHVwX21hY2hpbmVuYW1lKGNoYXIgKm1hY2hpbmVfb3V0KTsKK2V4dGVybiB2b2lkIHNldHVwX2hvc3RpbmZvKGNoYXIgKmJ1ZiwgaW50IGxlbik7CitleHRlcm4gdm9pZCBvc19kdW1wX2NvcmUodm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisKKy8qIHRpbWUuYyAqLworZXh0ZXJuIHZvaWQgaWRsZV9zbGVlcCh1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MpOworZXh0ZXJuIGludCBzZXRfaW50ZXJ2YWwodm9pZCk7CitleHRlcm4gaW50IHRpbWVyX29uZV9zaG90KGludCB0aWNrcyk7CitleHRlcm4gbG9uZyBsb25nIGRpc2FibGVfdGltZXIodm9pZCk7CitleHRlcm4gdm9pZCB1bWxfaWRsZV90aW1lcih2b2lkKTsKK2V4dGVybiBsb25nIGxvbmcgb3NfbnNlY3Modm9pZCk7CisKKy8qIHNrYXMvbWVtLmMgKi8KK2V4dGVybiBsb25nIHJ1bl9zeXNjYWxsX3N0dWIoc3RydWN0IG1tX2lkICogbW1faWRwLAorCQkJICAgICBpbnQgc3lzY2FsbCwgdW5zaWduZWQgbG9uZyAqYXJncywgbG9uZyBleHBlY3RlZCwKKwkJCSAgICAgdm9pZCAqKmFkZHIsIGludCBkb25lKTsKK2V4dGVybiBsb25nIHN5c2NhbGxfc3R1Yl9kYXRhKHN0cnVjdCBtbV9pZCAqIG1tX2lkcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmRhdGEsIGludCBkYXRhX2NvdW50LAorCQkJICAgICAgdm9pZCAqKmFkZHIsIHZvaWQgKipzdHViX2FkZHIpOworZXh0ZXJuIGludCBtYXAoc3RydWN0IG1tX2lkICogbW1faWRwLCB1bnNpZ25lZCBsb25nIHZpcnQsCisJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgcHJvdCwgaW50IHBoeXNfZmQsCisJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIGludCBkb25lLCB2b2lkICoqZGF0YSk7CitleHRlcm4gaW50IHVubWFwKHN0cnVjdCBtbV9pZCAqIG1tX2lkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJIGludCBkb25lLCB2b2lkICoqZGF0YSk7CitleHRlcm4gaW50IHByb3RlY3Qoc3RydWN0IG1tX2lkICogbW1faWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBpbnQgcHJvdCwgaW50IGRvbmUsIHZvaWQgKipkYXRhKTsKKworLyogc2thcy9wcm9jZXNzLmMgKi8KK2V4dGVybiBpbnQgaXNfc2thc193aW5jaChpbnQgcGlkLCBpbnQgZmQsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBzdGFydF91c2Vyc3BhY2UodW5zaWduZWQgbG9uZyBzdHViX3N0YWNrKTsKK2V4dGVybiBpbnQgY29weV9jb250ZXh0X3NrYXMwKHVuc2lnbmVkIGxvbmcgc3RhY2ssIGludCBwaWQpOworZXh0ZXJuIHZvaWQgdXNlcnNwYWNlKHN0cnVjdCB1bWxfcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IG1hcF9zdHViX3BhZ2VzKGludCBmZCwgdW5zaWduZWQgbG9uZyBjb2RlLCB1bnNpZ25lZCBsb25nIGRhdGEsCisJCQkgIHVuc2lnbmVkIGxvbmcgc3RhY2spOworZXh0ZXJuIHZvaWQgbmV3X3RocmVhZCh2b2lkICpzdGFjaywgam1wX2J1ZiAqYnVmLCB2b2lkICgqaGFuZGxlcikodm9pZCkpOworZXh0ZXJuIHZvaWQgc3dpdGNoX3RocmVhZHMoam1wX2J1ZiAqbWUsIGptcF9idWYgKnlvdSk7CitleHRlcm4gaW50IHN0YXJ0X2lkbGVfdGhyZWFkKHZvaWQgKnN0YWNrLCBqbXBfYnVmICpzd2l0Y2hfYnVmKTsKK2V4dGVybiB2b2lkIGluaXRpYWxfdGhyZWFkX2NiX3NrYXModm9pZCAoKnByb2MpKHZvaWQgKiksCisJCQkJIHZvaWQgKmFyZyk7CitleHRlcm4gdm9pZCBoYWx0X3NrYXModm9pZCk7CitleHRlcm4gdm9pZCByZWJvb3Rfc2thcyh2b2lkKTsKKworLyogaXJxLmMgKi8KK2V4dGVybiBpbnQgb3Nfd2FpdGluZ19mb3JfZXZlbnRzKHN0cnVjdCBpcnFfZmQgKmFjdGl2ZV9mZHMpOworZXh0ZXJuIGludCBvc19jcmVhdGVfcG9sbGZkKGludCBmZCwgaW50IGV2ZW50cywgdm9pZCAqdG1wX3BmZCwgaW50IHNpemVfdG1wZmRzKTsKK2V4dGVybiB2b2lkIG9zX2ZyZWVfaXJxX2J5X2NiKGludCAoKnRlc3QpKHN0cnVjdCBpcnFfZmQgKiwgdm9pZCAqKSwgdm9pZCAqYXJnLAorCQlzdHJ1Y3QgaXJxX2ZkICphY3RpdmVfZmRzLCBzdHJ1Y3QgaXJxX2ZkICoqKmxhc3RfaXJxX3B0cjIpOworZXh0ZXJuIHZvaWQgb3NfZnJlZV9pcnFfbGF0ZXIoc3RydWN0IGlycV9mZCAqYWN0aXZlX2ZkcywKKwkJaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiBpbnQgb3NfZ2V0X3BvbGxmZChpbnQgaSk7CitleHRlcm4gdm9pZCBvc19zZXRfcG9sbGZkKGludCBpLCBpbnQgZmQpOworZXh0ZXJuIHZvaWQgb3Nfc2V0X2lvaWdub3JlKHZvaWQpOworCisvKiBzaWdpby5jICovCitleHRlcm4gaW50IGFkZF9zaWdpb19mZChpbnQgZmQpOworZXh0ZXJuIGludCBpZ25vcmVfc2lnaW9fZmQoaW50IGZkKTsKK2V4dGVybiB2b2lkIG1heWJlX3NpZ2lvX2Jyb2tlbihpbnQgZmQsIGludCByZWFkKTsKK2V4dGVybiB2b2lkIHNpZ2lvX2Jyb2tlbihpbnQgZmQsIGludCByZWFkKTsKKworLyogc3lzLXg4Nl82NC9wcmN0bC5jICovCitleHRlcm4gaW50IG9zX2FyY2hfcHJjdGwoaW50IHBpZCwgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCisvKiB0dHkuYyAqLworZXh0ZXJuIGludCBnZXRfcHR5KHZvaWQpOworCisvKiBzeXMtJEFSQ0gvdGFza19zaXplLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG9zX2dldF90b3BfYWRkcmVzcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvcHJvY2Vzcy5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9wcm9jZXNzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9wcm9jZXNzLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcHJvY2Vzcy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvcHRyYWNlX3VzZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcHRyYWNlX3VzZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3B0cmFjZV91c2VyLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcHRyYWNlX3VzZXIuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3JlZ2lzdGVycy5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9yZWdpc3RlcnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3JlZ2lzdGVycy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3JlZ2lzdGVycy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2lnaW8uaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvc2lnaW8uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3NpZ2lvLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvc2lnaW8uaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NrYXMvbW1faWQuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvc2thcy9tbV9pZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc2thcy9tbV9pZC5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3NrYXMvbW1faWQuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NrYXMvcHJvY19tbS5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9za2FzL3Byb2NfbW0uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3NrYXMvcHJvY19tbS5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3NrYXMvcHJvY19tbS5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2thcy9za2FzLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3NrYXMvc2thcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc2thcy9za2FzLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvc2thcy9za2FzLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9za2FzL3N0dWItZGF0YS5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9za2FzL3N0dWItZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc2thcy9zdHViLWRhdGEuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9za2FzL3N0dWItZGF0YS5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2thc19wdHJhY2UuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvc2thc19wdHJhY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3NrYXNfcHRyYWNlLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvc2thc19wdHJhY2UuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NrYXNfcHRyZWdzLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3NrYXNfcHRyZWdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9za2FzX3B0cmVncy5oCnJlbmFtZSB0byBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3NrYXNfcHRyZWdzLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNjYWxsLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3N5c2NhbGwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2NhbGwuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9zeXNjYWxsLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNycS5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9zeXNycS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzcnEuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9zeXNycS5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdGFzay5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC90YXNrLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS90YXNrLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdGFzay5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdGxiLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3RsYi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvdGxiLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdGxiLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS91YmRfdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91YmRfdXNlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvdWJkX3VzZXIuaApyZW5hbWUgdG8gYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91YmRfdXNlci5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdW1fbWFsbG9jLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21hbGxvYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvdW1fbWFsbG9jLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdW1fbWFsbG9jLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdW1fbW11LmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTdlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21tdS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfVU1fTU1VX0gKKyNkZWZpbmUgX19BUkNIX1VNX01NVV9ICisKKyNpbmNsdWRlICJtbV9pZC5oIgorI2luY2x1ZGUgImxkdC5oIgorCit0eXBlZGVmIHN0cnVjdCBtbV9jb250ZXh0IHsKKwlzdHJ1Y3QgbW1faWQgaWQ7CisJc3RydWN0IHVtbF9sZHQgbGR0OworCXN0cnVjdCBwYWdlICoqc3R1Yl9wYWdlczsKK30gbW1fY29udGV4dF90OworCitleHRlcm4gdm9pZCBfX3N3aXRjaF9tbShzdHJ1Y3QgbW1faWQgKiBtbV9pZHApOworCisvKiBBdm9pZCB0YW5nbGVkIGluY2x1c2lvbiB3aXRoIGFzbS9sZHQuaCAqLworZXh0ZXJuIGxvbmcgaW5pdF9uZXdfbGR0KHN0cnVjdCBtbV9jb250ZXh0ICp0b19tbSwgc3RydWN0IG1tX2NvbnRleHQgKmZyb21fbW0pOworZXh0ZXJuIHZvaWQgZnJlZV9sZHQoc3RydWN0IG1tX2NvbnRleHQgKm1tKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdW1fdWFjY2Vzcy5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91bV91YWNjZXNzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS91bV91YWNjZXNzLmgKcmVuYW1lIHRvIGFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdW1fdWFjY2Vzcy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VzZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5M2Y3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VzZXIuaApAQCAtMCwwICsxLDQ1IEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VU0VSX0hfXworI2RlZmluZSBfX1VTRVJfSF9fCisKKyNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgorCisvKgorICogVGhlIHVzdWFsIGRlZmluaXRpb24gLSBjb3BpZWQgaGVyZSBiZWNhdXNlIHRoZSBrZXJuZWwgcHJvdmlkZXMgaXRzIG93biwKKyAqIGZhbmNpZXIsIHR5cGUtc2FmZSwgZGVmaW5pdGlvbi4gIFVzaW5nIHRoYXQgb25lIHdvdWxkIHJlcXVpcmUKKyAqIGNvcHlpbmcgdG9vIG11Y2ggaW5mcmFzdHJ1Y3R1cmUgZm9yIG15IHRhc3RlLCBzbyB1c2Vyc3BhY2UgZmlsZXMKKyAqIGdldCBsZXNzIGNoZWNraW5nIHRoYW4ga2VybmVsIGZpbGVzLgorICovCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQorCisvKiBUaGlzIGlzIHRvIGdldCBzaXplX3QgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCisjaWZkZWYgVU1MX0NPTkZJR19QUklOVEsKK2V4dGVybiBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgc2NoZWR1bGUodm9pZCk7CitleHRlcm4gaW50IGluX2F0b24oY2hhciAqc3RyKTsKK2V4dGVybiBpbnQgb3Blbl9nZGJfY2hhbih2b2lkKTsKK2V4dGVybiBzaXplX3Qgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2lnY29udGV4dC5oIGIvYXJjaC91bS9pbmNsdWRlL3NpZ2NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4MTZjYS4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2lnY29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19VTUxfU0lHQ09OVEVYVF9IX18KLSNkZWZpbmUgX19VTUxfU0lHQ09OVEVYVF9IX18KLQotI2luY2x1ZGUgInN5c2RlcC9zaWdjb250ZXh0LmgiCi0KLWV4dGVybiBpbnQgc2Nfc2l6ZSh2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIHNjX3RvX3NjKHZvaWQgKnRvX3B0ciwgdm9pZCAqZnJvbV9wdHIpOwotCi0jZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9wdHJhY2UuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9wdHJhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFjMDg5Ni4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19TWVNERVBfSTM4Nl9QVFJBQ0VfSAotI2RlZmluZSBfX1NZU0RFUF9JMzg2X1BUUkFDRV9ICi0KLSNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCi0jaW5jbHVkZSAidXNlcl9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCi0KLSNkZWZpbmUgTUFYX1JFR19OUiAoVU1fRlJBTUVfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLSNkZWZpbmUgTUFYX1JFR19PRkZTRVQgKFVNX0ZSQU1FX1NJWkUpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfZGVidWdyZWdzKGludCBzZXEpIHt9Ci0KLS8qIHN5c2NhbGwgZW11bGF0aW9uIHBhdGggaW4gcHRyYWNlICovCi0KLSNpZm5kZWYgUFRSQUNFX1NZU0VNVQotI2RlZmluZSBQVFJBQ0VfU1lTRU1VIDMxCi0jZW5kaWYKLQotdm9pZCBzZXRfdXNpbmdfc3lzZW11KGludCB2YWx1ZSk7Ci1pbnQgZ2V0X3VzaW5nX3N5c2VtdSh2b2lkKTsKLWV4dGVybiBpbnQgc3lzZW11X3N1cHBvcnRlZDsKLQotI2luY2x1ZGUgInNrYXNfcHRyZWdzLmgiCi0KLSNkZWZpbmUgUkVHU19JUChyKSAoKHIpW0hPU1RfSVBdKQotI2RlZmluZSBSRUdTX1NQKHIpICgocilbSE9TVF9TUF0pCi0jZGVmaW5lIFJFR1NfRUZMQUdTKHIpICgocilbSE9TVF9FRkxBR1NdKQotI2RlZmluZSBSRUdTX0VBWChyKSAoKHIpW0hPU1RfRUFYXSkKLSNkZWZpbmUgUkVHU19FQlgocikgKChyKVtIT1NUX0VCWF0pCi0jZGVmaW5lIFJFR1NfRUNYKHIpICgocilbSE9TVF9FQ1hdKQotI2RlZmluZSBSRUdTX0VEWChyKSAoKHIpW0hPU1RfRURYXSkKLSNkZWZpbmUgUkVHU19FU0kocikgKChyKVtIT1NUX0VTSV0pCi0jZGVmaW5lIFJFR1NfRURJKHIpICgocilbSE9TVF9FREldKQotI2RlZmluZSBSRUdTX0VCUChyKSAoKHIpW0hPU1RfRUJQXSkKLSNkZWZpbmUgUkVHU19DUyhyKSAoKHIpW0hPU1RfQ1NdKQotI2RlZmluZSBSRUdTX1NTKHIpICgocilbSE9TVF9TU10pCi0jZGVmaW5lIFJFR1NfRFMocikgKChyKVtIT1NUX0RTXSkKLSNkZWZpbmUgUkVHU19FUyhyKSAoKHIpW0hPU1RfRVNdKQotI2RlZmluZSBSRUdTX0ZTKHIpICgocilbSE9TVF9GU10pCi0jZGVmaW5lIFJFR1NfR1MocikgKChyKVtIT1NUX0dTXSkKLQotI2RlZmluZSBSRUdTX1NFVF9TWVNDQUxMX1JFVFVSTihyLCByZXMpIFJFR1NfRUFYKHIpID0gKHJlcykKLQotI2RlZmluZSBSRUdTX1JFU1RBUlRfU1lTQ0FMTChyKSBJUF9SRVNUQVJUX1NZU0NBTEwoUkVHU19JUChyKSkKLQotI2lmbmRlZiBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAKLSNkZWZpbmUgUFRSQUNFX1NZU0VNVV9TSU5HTEVTVEVQIDMyCi0jZW5kaWYKLQotc3RydWN0IHVtbF9wdF9yZWdzIHsKLQl1bnNpZ25lZCBsb25nIGdwW01BWF9SRUdfTlJdOwotCXN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOwotCWxvbmcgc3lzY2FsbDsKLQlpbnQgaXNfdXNlcjsKLX07Ci0KLSNkZWZpbmUgRU1QVFlfVU1MX1BUX1JFR1MgeyB9Ci0KLSNkZWZpbmUgVVBUX0lQKHIpIFJFR1NfSVAoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX1NQKHIpIFJFR1NfU1AoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX0VGTEFHUyhyKSBSRUdTX0VGTEFHUygociktPmdwKQotI2RlZmluZSBVUFRfRUFYKHIpIFJFR1NfRUFYKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9FQlgocikgUkVHU19FQlgoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX0VDWChyKSBSRUdTX0VDWCgociktPmdwKQotI2RlZmluZSBVUFRfRURYKHIpIFJFR1NfRURYKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9FU0kocikgUkVHU19FU0koKHIpLT5ncCkKLSNkZWZpbmUgVVBUX0VESShyKSBSRUdTX0VESSgociktPmdwKQotI2RlZmluZSBVUFRfRUJQKHIpIFJFR1NfRUJQKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9PUklHX0VBWChyKSAoKHIpLT5zeXNjYWxsKQotI2RlZmluZSBVUFRfQ1MocikgUkVHU19DUygociktPmdwKQotI2RlZmluZSBVUFRfU1MocikgUkVHU19TUygociktPmdwKQotI2RlZmluZSBVUFRfRFMocikgUkVHU19EUygociktPmdwKQotI2RlZmluZSBVUFRfRVMocikgUkVHU19FUygociktPmdwKQotI2RlZmluZSBVUFRfRlMocikgUkVHU19GUygociktPmdwKQotI2RlZmluZSBVUFRfR1MocikgUkVHU19HUygociktPmdwKQotCi0jZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzEocikgVVBUX0VCWChyKQotI2RlZmluZSBVUFRfU1lTQ0FMTF9BUkcyKHIpIFVQVF9FQ1gocikKLSNkZWZpbmUgVVBUX1NZU0NBTExfQVJHMyhyKSBVUFRfRURYKHIpCi0jZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzQocikgVVBUX0VTSShyKQotI2RlZmluZSBVUFRfU1lTQ0FMTF9BUkc1KHIpIFVQVF9FREkocikKLSNkZWZpbmUgVVBUX1NZU0NBTExfQVJHNihyKSBVUFRfRUJQKHIpCi0KLWV4dGVybiBpbnQgdXNlcl9jb250ZXh0KHVuc2lnbmVkIGxvbmcgc3ApOwotCi0jZGVmaW5lIFVQVF9JU19VU0VSKHIpICgociktPmlzX3VzZXIpCi0KLXN0cnVjdCBzeXNjYWxsX2FyZ3MgewotCXVuc2lnbmVkIGxvbmcgYXJnc1s2XTsKLX07Ci0KLSNkZWZpbmUgU1lTQ0FMTF9BUkdTKHIpICgoc3RydWN0IHN5c2NhbGxfYXJncykgXAotCQkJIHsgLmFyZ3MgPSB7IFVQVF9TWVNDQUxMX0FSRzEociksCVwKLQkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzIociksCVwKLQkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzMociksCVwKLQkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzQociksCVwKLQkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzUociksCVwKLQkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzYocikgfSB9ICkKLQotI2RlZmluZSBVUFRfUkVHKHJlZ3MsIHJlZykgXAotCSh7CXVuc2lnbmVkIGxvbmcgdmFsOyBcCi0JCXN3aXRjaChyZWcpeyBcCi0JCWNhc2UgRUlQOiB2YWwgPSBVUFRfSVAocmVncyk7IGJyZWFrOyBcCi0JCWNhc2UgVUVTUDogdmFsID0gVVBUX1NQKHJlZ3MpOyBicmVhazsgXAotCQljYXNlIEVBWDogdmFsID0gVVBUX0VBWChyZWdzKTsgYnJlYWs7IFwKLQkJY2FzZSBFQlg6IHZhbCA9IFVQVF9FQlgocmVncyk7IGJyZWFrOyBcCi0JCWNhc2UgRUNYOiB2YWwgPSBVUFRfRUNYKHJlZ3MpOyBicmVhazsgXAotCQljYXNlIEVEWDogdmFsID0gVVBUX0VEWChyZWdzKTsgYnJlYWs7IFwKLQkJY2FzZSBFU0k6IHZhbCA9IFVQVF9FU0kocmVncyk7IGJyZWFrOyBcCi0JCWNhc2UgRURJOiB2YWwgPSBVUFRfRURJKHJlZ3MpOyBicmVhazsgXAotCQljYXNlIEVCUDogdmFsID0gVVBUX0VCUChyZWdzKTsgYnJlYWs7IFwKLQkJY2FzZSBPUklHX0VBWDogdmFsID0gVVBUX09SSUdfRUFYKHJlZ3MpOyBicmVhazsgXAotCQljYXNlIENTOiB2YWwgPSBVUFRfQ1MocmVncyk7IGJyZWFrOyBcCi0JCWNhc2UgU1M6IHZhbCA9IFVQVF9TUyhyZWdzKTsgYnJlYWs7IFwKLQkJY2FzZSBEUzogdmFsID0gVVBUX0RTKHJlZ3MpOyBicmVhazsgXAotCQljYXNlIEVTOiB2YWwgPSBVUFRfRVMocmVncyk7IGJyZWFrOyBcCi0JCWNhc2UgRlM6IHZhbCA9IFVQVF9GUyhyZWdzKTsgYnJlYWs7IFwKLQkJY2FzZSBHUzogdmFsID0gVVBUX0dTKHJlZ3MpOyBicmVhazsgXAotCQljYXNlIEVGTDogdmFsID0gVVBUX0VGTEFHUyhyZWdzKTsgYnJlYWs7IFwKLQkJZGVmYXVsdCA6ICBcCi0JCQlwYW5pYygiQmFkIHJlZ2lzdGVyIGluIFVQVF9SRUcgOiAlZFxuIiwgcmVnKTsgIFwKLQkJCXZhbCA9IC0xOyBcCi0JCX0gXAotCSAgICAgICAgdmFsOyBcCi0JfSkKLQotI2RlZmluZSBVUFRfU0VUKHJlZ3MsIHJlZywgdmFsKSBcCi0JZG8geyBcCi0JCXN3aXRjaChyZWcpeyBcCi0JCWNhc2UgRUlQOiBVUFRfSVAocmVncykgPSB2YWw7IGJyZWFrOyBcCi0JCWNhc2UgVUVTUDogVVBUX1NQKHJlZ3MpID0gdmFsOyBicmVhazsgXAotCQljYXNlIEVBWDogVVBUX0VBWChyZWdzKSA9IHZhbDsgYnJlYWs7IFwKLQkJY2FzZSBFQlg6IFVQVF9FQlgocmVncykgPSB2YWw7IGJyZWFrOyBcCi0JCWNhc2UgRUNYOiBVUFRfRUNYKHJlZ3MpID0gdmFsOyBicmVhazsgXAotCQljYXNlIEVEWDogVVBUX0VEWChyZWdzKSA9IHZhbDsgYnJlYWs7IFwKLQkJY2FzZSBFU0k6IFVQVF9FU0kocmVncykgPSB2YWw7IGJyZWFrOyBcCi0JCWNhc2UgRURJOiBVUFRfRURJKHJlZ3MpID0gdmFsOyBicmVhazsgXAotCQljYXNlIEVCUDogVVBUX0VCUChyZWdzKSA9IHZhbDsgYnJlYWs7IFwKLQkJY2FzZSBPUklHX0VBWDogVVBUX09SSUdfRUFYKHJlZ3MpID0gdmFsOyBicmVhazsgXAotCQljYXNlIENTOiBVUFRfQ1MocmVncykgPSB2YWw7IGJyZWFrOyBcCi0JCWNhc2UgU1M6IFVQVF9TUyhyZWdzKSA9IHZhbDsgYnJlYWs7IFwKLQkJY2FzZSBEUzogVVBUX0RTKHJlZ3MpID0gdmFsOyBicmVhazsgXAotCQljYXNlIEVTOiBVUFRfRVMocmVncykgPSB2YWw7IGJyZWFrOyBcCi0JCWNhc2UgRlM6IFVQVF9GUyhyZWdzKSA9IHZhbDsgYnJlYWs7IFwKLQkJY2FzZSBHUzogVVBUX0dTKHJlZ3MpID0gdmFsOyBicmVhazsgXAotCQljYXNlIEVGTDogVVBUX0VGTEFHUyhyZWdzKSA9IHZhbDsgYnJlYWs7IFwKLQkJZGVmYXVsdCA6ICBcCi0JCQlwYW5pYygiQmFkIHJlZ2lzdGVyIGluIFVQVF9TRVQgOiAlZFxuIiwgcmVnKTsgIFwKLQkJCWJyZWFrOyBcCi0JCX0gXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVVBUX1NFVF9TWVNDQUxMX1JFVFVSTihyLCByZXMpIFwKLQlSRUdTX1NFVF9TWVNDQUxMX1JFVFVSTigociktPnJlZ3MsIChyZXMpKQotCi0jZGVmaW5lIFVQVF9SRVNUQVJUX1NZU0NBTEwocikgUkVHU19SRVNUQVJUX1NZU0NBTEwoKHIpLT5ncCkKLQotI2RlZmluZSBVUFRfT1JJR19TWVNDQUxMKHIpIFVQVF9FQVgocikKLSNkZWZpbmUgVVBUX1NZU0NBTExfTlIocikgVVBUX09SSUdfRUFYKHIpCi0jZGVmaW5lIFVQVF9TWVNDQUxMX1JFVChyKSBVUFRfRUFYKHIpCi0KLSNkZWZpbmUgVVBUX0ZBVUxUSU5GTyhyKSAoJihyKS0+ZmF1bHRpbmZvKQotCi1leHRlcm4gdm9pZCBhcmNoX2luaXRfcmVnaXN0ZXJzKGludCBwaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zdHViLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc3R1Yi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzA5N2I4Li4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zdHViLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19TWVNERVBfU1RVQl9ICi0jZGVmaW5lIF9fU1lTREVQX1NUVUJfSAotCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgImFzLWxheW91dC5oIgotI2luY2x1ZGUgInN0dWItZGF0YS5oIgotI2luY2x1ZGUgImtlcm5fY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAidW1sLWNvbmZpZy5oIgotCi1leHRlcm4gdm9pZCBzdHViX3NlZ3ZfaGFuZGxlcihpbnQgc2lnKTsKLWV4dGVybiB2b2lkIHN0dWJfY2xvbmVfaGFuZGxlcih2b2lkKTsKLQotI2RlZmluZSBTVFVCX1NZU0NBTExfUkVUIEVBWAotI2RlZmluZSBTVFVCX01NQVBfTlIgX19OUl9tbWFwMgotI2RlZmluZSBNTUFQX09GRlNFVChvKSAoKG8pID4+IFVNX0tFUk5fUEFHRV9TSElGVCkKLQotc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDAobG9uZyBzeXNjYWxsKQotewotCWxvbmcgcmV0OwotCi0JX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgOiAiPWEiIChyZXQpIDogIjAiIChzeXNjYWxsKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgc3R1Yl9zeXNjYWxsMShsb25nIHN5c2NhbGwsIGxvbmcgYXJnMSkKLXsKLQlsb25nIHJldDsKLQotCV9fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIDogIj1hIiAocmV0KSA6ICIwIiAoc3lzY2FsbCksICJiIiAoYXJnMSkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDIobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMikKLXsKLQlsb25nIHJldDsKLQotCV9fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIDogIj1hIiAocmV0KSA6ICIwIiAoc3lzY2FsbCksICJiIiAoYXJnMSksCi0JCQkiYyIgKGFyZzIpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGwzKGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMykKLXsKLQlsb25nIHJldDsKLQotCV9fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIDogIj1hIiAocmV0KSA6ICIwIiAoc3lzY2FsbCksICJiIiAoYXJnMSksCi0JCQkiYyIgKGFyZzIpLCAiZCIgKGFyZzMpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGw0KGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMywKLQkJCQkgbG9uZyBhcmc0KQotewotCWxvbmcgcmV0OwotCi0JX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgOiAiPWEiIChyZXQpIDogIjAiIChzeXNjYWxsKSwgImIiIChhcmcxKSwKLQkJCSJjIiAoYXJnMiksICJkIiAoYXJnMyksICJTIiAoYXJnNCkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDUobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczLAotCQkJCSBsb25nIGFyZzQsIGxvbmcgYXJnNSkKLXsKLQlsb25nIHJldDsKLQotCV9fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIDogIj1hIiAocmV0KSA6ICIwIiAoc3lzY2FsbCksICJiIiAoYXJnMSksCi0JCQkiYyIgKGFyZzIpLCAiZCIgKGFyZzMpLCAiUyIgKGFyZzQpLCAiRCIgKGFyZzUpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFwX215c2VsZih2b2lkKQotewotCV9fYXNtKCJpbnQzIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1hcF9zdGFjayhpbnQgZmQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZsICUlZWF4LCUlZWJwIDsgbW92bCAlMCwlJWVheCA7IGludCAkMHg4MCA7IgotCQkJICAibW92bCAlNywgJSVlYnggOyBtb3ZsICUlZWF4LCAoJSVlYngpIgotCQkJICA6IDogImciIChTVFVCX01NQVBfTlIpLCAiYiIgKFNUVUJfREFUQSksCi0JCQkgICAgImMiIChVTV9LRVJOX1BBR0VfU0laRSksCi0JCQkgICAgImQiIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSwKLQkJCSAgICAiUyIgKE1BUF9GSVhFRCB8IE1BUF9TSEFSRUQpLCAiRCIgKGZkKSwKLQkJCSAgICAiYSIgKG9mZnNldCksCi0JCQkgICAgImkiICgmKChzdHJ1Y3Qgc3R1Yl9kYXRhICopIFNUVUJfREFUQSktPmVycikKLQkJCSAgOiAibWVtb3J5Iik7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3Rscy5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3Rscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MThmZDNjLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni90bHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpZm5kZWYgX1NZU0RFUF9UTFNfSAotI2RlZmluZSBfU1lTREVQX1RMU19ICi0KLSMgaWZuZGVmIF9fS0VSTkVMX18KLQotLyogQ2hhbmdlIG5hbWUgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIG9yaWdpbmFsIG9uZSBmcm9tIDxhc20vbGR0Lmg+LCB3aGljaAotICogbWF5IGJlIG5hbWVkIHVzZXJfZGVzYyAoYnV0IGluIDIuNCBhbmQgaW4gaGVhZGVyIG1hdGNoaW5nIGl0cyBBUEkgd2FzIG5hbWVkCi0gKiBtb2RpZnlfbGR0X2xkdF9zKS4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgdW1fZHVwX3VzZXJfZGVzYyB7Ci0JdW5zaWduZWQgaW50ICBlbnRyeV9udW1iZXI7Ci0JdW5zaWduZWQgaW50ICBiYXNlX2FkZHI7Ci0JdW5zaWduZWQgaW50ICBsaW1pdDsKLQl1bnNpZ25lZCBpbnQgIHNlZ18zMmJpdDoxOwotCXVuc2lnbmVkIGludCAgY29udGVudHM6MjsKLQl1bnNpZ25lZCBpbnQgIHJlYWRfZXhlY19vbmx5OjE7Ci0JdW5zaWduZWQgaW50ICBsaW1pdF9pbl9wYWdlczoxOwotCXVuc2lnbmVkIGludCAgc2VnX25vdF9wcmVzZW50OjE7Ci0JdW5zaWduZWQgaW50ICB1c2VhYmxlOjE7Ci19IHVzZXJfZGVzY190OwotCi0jIGVsc2UgLyogX19LRVJORUxfXyAqLwotCi0jICBpbmNsdWRlIDxhc20vbGR0Lmg+Ci10eXBlZGVmIHN0cnVjdCB1c2VyX2Rlc2MgdXNlcl9kZXNjX3Q7Ci0KLSMgZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUlOX0kzODYgNgotI2RlZmluZSBHRFRfRU5UUllfVExTX01JTl9YODZfNjQgMTIKLQotI2VuZGlmIC8qIF9TWVNERVBfVExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZS5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYTQ0ZDEuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19TWVNERVBfWDg2XzY0X1BUUkFDRV9ICi0jZGVmaW5lIF9fU1lTREVQX1g4Nl82NF9QVFJBQ0VfSAotCi0jaW5jbHVkZSAidW1sLWNvbmZpZy5oIgotI2luY2x1ZGUgInVzZXJfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3lzZGVwL2ZhdWx0aW5mby5oIgotCi0jZGVmaW5lIE1BWF9SRUdfT0ZGU0VUIChVTV9GUkFNRV9TSVpFKQotI2RlZmluZSBNQVhfUkVHX05SICgoTUFYX1JFR19PRkZTRVQpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCi0jaW5jbHVkZSAic2thc19wdHJlZ3MuaCIKLQotI2RlZmluZSBSRUdTX0lQKHIpICgocilbSE9TVF9JUF0pCi0jZGVmaW5lIFJFR1NfU1AocikgKChyKVtIT1NUX1NQXSkKLQotI2RlZmluZSBSRUdTX1JCWChyKSAoKHIpW0hPU1RfUkJYXSkKLSNkZWZpbmUgUkVHU19SQ1gocikgKChyKVtIT1NUX1JDWF0pCi0jZGVmaW5lIFJFR1NfUkRYKHIpICgocilbSE9TVF9SRFhdKQotI2RlZmluZSBSRUdTX1JTSShyKSAoKHIpW0hPU1RfUlNJXSkKLSNkZWZpbmUgUkVHU19SREkocikgKChyKVtIT1NUX1JESV0pCi0jZGVmaW5lIFJFR1NfUkJQKHIpICgocilbSE9TVF9SQlBdKQotI2RlZmluZSBSRUdTX1JBWChyKSAoKHIpW0hPU1RfUkFYXSkKLSNkZWZpbmUgUkVHU19SOChyKSAoKHIpW0hPU1RfUjhdKQotI2RlZmluZSBSRUdTX1I5KHIpICgocilbSE9TVF9SOV0pCi0jZGVmaW5lIFJFR1NfUjEwKHIpICgocilbSE9TVF9SMTBdKQotI2RlZmluZSBSRUdTX1IxMShyKSAoKHIpW0hPU1RfUjExXSkKLSNkZWZpbmUgUkVHU19SMTIocikgKChyKVtIT1NUX1IxMl0pCi0jZGVmaW5lIFJFR1NfUjEzKHIpICgocilbSE9TVF9SMTNdKQotI2RlZmluZSBSRUdTX1IxNChyKSAoKHIpW0hPU1RfUjE0XSkKLSNkZWZpbmUgUkVHU19SMTUocikgKChyKVtIT1NUX1IxNV0pCi0jZGVmaW5lIFJFR1NfQ1MocikgKChyKVtIT1NUX0NTXSkKLSNkZWZpbmUgUkVHU19FRkxBR1MocikgKChyKVtIT1NUX0VGTEFHU10pCi0jZGVmaW5lIFJFR1NfU1MocikgKChyKVtIT1NUX1NTXSkKLQotI2RlZmluZSBIT1NUX0ZTX0JBU0UgMjEKLSNkZWZpbmUgSE9TVF9HU19CQVNFIDIyCi0jZGVmaW5lIEhPU1RfRFMgMjMKLSNkZWZpbmUgSE9TVF9FUyAyNAotI2RlZmluZSBIT1NUX0ZTIDI1Ci0jZGVmaW5lIEhPU1RfR1MgMjYKLQotLyogQWxzbyBkZWZpbmVkIGluIGFzbS9wdHJhY2UteDg2XzY0LmgsIGJ1dCBub3QgaW4gbGliYyBoZWFkZXJzLiAgU28sIHRoZXNlCi0gKiBhcmUgYWxyZWFkeSBkZWZpbmVkIGZvciBrZXJuZWwgY29kZSwgYnV0IG5vdCBmb3IgdXNlcnNwYWNlIGNvZGUuCi0gKi8KLSNpZm5kZWYgRlNfQkFTRQotLyogVGhlc2UgYXJlbid0IGRlZmluZWQgaW4gcHRyYWNlLmgsIGJ1dCBleGlzdCBpbiBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCwKLSAqIHdoaWNoIGlzIHdoYXQgeDg2XzY0IHB0cmFjZSBhY3R1YWxseSB1c2VzLgotICovCi0jZGVmaW5lIEZTX0JBU0UgKEhPU1RfRlNfQkFTRSAqIHNpemVvZihsb25nKSkKLSNkZWZpbmUgR1NfQkFTRSAoSE9TVF9HU19CQVNFICogc2l6ZW9mKGxvbmcpKQotI2RlZmluZSBEUyAoSE9TVF9EUyAqIHNpemVvZihsb25nKSkKLSNkZWZpbmUgRVMgKEhPU1RfRVMgKiBzaXplb2YobG9uZykpCi0jZGVmaW5lIEZTIChIT1NUX0ZTICogc2l6ZW9mKGxvbmcpKQotI2RlZmluZSBHUyAoSE9TVF9HUyAqIHNpemVvZihsb25nKSkKLSNlbmRpZgotCi0jZGVmaW5lIFJFR1NfRlNfQkFTRShyKSAoKHIpW0hPU1RfRlNfQkFTRV0pCi0jZGVmaW5lIFJFR1NfR1NfQkFTRShyKSAoKHIpW0hPU1RfR1NfQkFTRV0pCi0jZGVmaW5lIFJFR1NfRFMocikgKChyKVtIT1NUX0RTXSkKLSNkZWZpbmUgUkVHU19FUyhyKSAoKHIpW0hPU1RfRVNdKQotI2RlZmluZSBSRUdTX0ZTKHIpICgocilbSE9TVF9GU10pCi0jZGVmaW5lIFJFR1NfR1MocikgKChyKVtIT1NUX0dTXSkKLQotI2RlZmluZSBSRUdTX09SSUdfUkFYKHIpICgocilbSE9TVF9PUklHX1JBWF0pCi0KLSNkZWZpbmUgUkVHU19TRVRfU1lTQ0FMTF9SRVRVUk4ociwgcmVzKSBSRUdTX1JBWChyKSA9IChyZXMpCi0KLSNkZWZpbmUgUkVHU19SRVNUQVJUX1NZU0NBTEwocikgSVBfUkVTVEFSVF9TWVNDQUxMKFJFR1NfSVAocikpCi0KLSNkZWZpbmUgUkVHU19TRUdWX0lTX0ZJWEFCTEUocikgU0VHVl9JU19GSVhBQkxFKChyKS0+dHJhcF90eXBlKQotCi0jZGVmaW5lIFJFR1NfRkFVTFRfQUREUihyKSAoKHIpLT5mYXVsdF9hZGRyKQotCi0jZGVmaW5lIFJFR1NfRkFVTFRfV1JJVEUocikgRkFVTFRfV1JJVEUoKHIpLT5mYXVsdF90eXBlKQotCi0jZGVmaW5lIFJFR1NfVFJBUChyKSAoKHIpLT50cmFwX3R5cGUpCi0KLSNkZWZpbmUgUkVHU19FUlIocikgKChyKS0+ZmF1bHRfdHlwZSkKLQotc3RydWN0IHVtbF9wdF9yZWdzIHsKLQl1bnNpZ25lZCBsb25nIGdwW01BWF9SRUdfTlJdOwotCXN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOwotCWxvbmcgc3lzY2FsbDsKLQlpbnQgaXNfdXNlcjsKLX07Ci0KLSNkZWZpbmUgRU1QVFlfVU1MX1BUX1JFR1MgeyB9Ci0KLSNkZWZpbmUgVVBUX1JCWChyKSBSRUdTX1JCWCgociktPmdwKQotI2RlZmluZSBVUFRfUkNYKHIpIFJFR1NfUkNYKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9SRFgocikgUkVHU19SRFgoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX1JTSShyKSBSRUdTX1JTSSgociktPmdwKQotI2RlZmluZSBVUFRfUkRJKHIpIFJFR1NfUkRJKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9SQlAocikgUkVHU19SQlAoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX1JBWChyKSBSRUdTX1JBWCgociktPmdwKQotI2RlZmluZSBVUFRfUjgocikgUkVHU19SOCgociktPmdwKQotI2RlZmluZSBVUFRfUjkocikgUkVHU19SOSgociktPmdwKQotI2RlZmluZSBVUFRfUjEwKHIpIFJFR1NfUjEwKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9SMTEocikgUkVHU19SMTEoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX1IxMihyKSBSRUdTX1IxMigociktPmdwKQotI2RlZmluZSBVUFRfUjEzKHIpIFJFR1NfUjEzKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9SMTQocikgUkVHU19SMTQoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX1IxNShyKSBSRUdTX1IxNSgociktPmdwKQotI2RlZmluZSBVUFRfQ1MocikgUkVHU19DUygociktPmdwKQotI2RlZmluZSBVUFRfRlNfQkFTRShyKSBSRUdTX0ZTX0JBU0UoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX0ZTKHIpIFJFR1NfRlMoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX0dTX0JBU0UocikgUkVHU19HU19CQVNFKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9HUyhyKSBSRUdTX0dTKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9EUyhyKSBSRUdTX0RTKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9FUyhyKSBSRUdTX0VTKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9DUyhyKSBSRUdTX0NTKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9TUyhyKSBSRUdTX1NTKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9PUklHX1JBWChyKSBSRUdTX09SSUdfUkFYKChyKS0+Z3ApCi0KLSNkZWZpbmUgVVBUX0lQKHIpIFJFR1NfSVAoKHIpLT5ncCkKLSNkZWZpbmUgVVBUX1NQKHIpIFJFR1NfU1AoKHIpLT5ncCkKLQotI2RlZmluZSBVUFRfRUZMQUdTKHIpIFJFR1NfRUZMQUdTKChyKS0+Z3ApCi0jZGVmaW5lIFVQVF9TWVNDQUxMX05SKHIpICgociktPnN5c2NhbGwpCi0jZGVmaW5lIFVQVF9TWVNDQUxMX1JFVChyKSBVUFRfUkFYKHIpCi0KLWV4dGVybiBpbnQgdXNlcl9jb250ZXh0KHVuc2lnbmVkIGxvbmcgc3ApOwotCi0jZGVmaW5lIFVQVF9JU19VU0VSKHIpICgociktPmlzX3VzZXIpCi0KLSNkZWZpbmUgVVBUX1NZU0NBTExfQVJHMShyKSBVUFRfUkRJKHIpCi0jZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzIocikgVVBUX1JTSShyKQotI2RlZmluZSBVUFRfU1lTQ0FMTF9BUkczKHIpIFVQVF9SRFgocikKLSNkZWZpbmUgVVBUX1NZU0NBTExfQVJHNChyKSBVUFRfUjEwKHIpCi0jZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzUocikgVVBUX1I4KHIpCi0jZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzYocikgVVBUX1I5KHIpCi0KLXN0cnVjdCBzeXNjYWxsX2FyZ3MgewotCXVuc2lnbmVkIGxvbmcgYXJnc1s2XTsKLX07Ci0KLSNkZWZpbmUgU1lTQ0FMTF9BUkdTKHIpICgoc3RydWN0IHN5c2NhbGxfYXJncykgXAotCQkJIHsgLmFyZ3MgPSB7IFVQVF9TWVNDQUxMX0FSRzEociksCSBcCi0JCQkJICAgICBVUFRfU1lTQ0FMTF9BUkcyKHIpLAkgXAotCQkJCSAgICAgVVBUX1NZU0NBTExfQVJHMyhyKSwJIFwKLQkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzQociksCSBcCi0JCQkJICAgICBVUFRfU1lTQ0FMTF9BUkc1KHIpLAkgXAotCQkJCSAgICAgVVBUX1NZU0NBTExfQVJHNihyKSB9IH0gKQotCi0jZGVmaW5lIFVQVF9SRUcocmVncywgcmVnKSBcCi0JKHsgICAgICB1bnNpZ25lZCBsb25nIHZhbDsJCVwKLQkJc3dpdGNoKHJlZyl7CQkJCQkJXAotCQljYXNlIFI4OiB2YWwgPSBVUFRfUjgocmVncyk7IGJyZWFrOwkJCVwKLQkJY2FzZSBSOTogdmFsID0gVVBUX1I5KHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgUjEwOiB2YWwgPSBVUFRfUjEwKHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgUjExOiB2YWwgPSBVUFRfUjExKHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgUjEyOiB2YWwgPSBVUFRfUjEyKHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgUjEzOiB2YWwgPSBVUFRfUjEzKHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgUjE0OiB2YWwgPSBVUFRfUjE0KHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgUjE1OiB2YWwgPSBVUFRfUjE1KHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgUklQOiB2YWwgPSBVUFRfSVAocmVncyk7IGJyZWFrOwkJCVwKLQkJY2FzZSBSU1A6IHZhbCA9IFVQVF9TUChyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIFJBWDogdmFsID0gVVBUX1JBWChyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIFJCWDogdmFsID0gVVBUX1JCWChyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIFJDWDogdmFsID0gVVBUX1JDWChyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIFJEWDogdmFsID0gVVBUX1JEWChyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIFJTSTogdmFsID0gVVBUX1JTSShyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIFJESTogdmFsID0gVVBUX1JESShyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIFJCUDogdmFsID0gVVBUX1JCUChyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIE9SSUdfUkFYOiB2YWwgPSBVUFRfT1JJR19SQVgocmVncyk7IGJyZWFrOwkJXAotCQljYXNlIENTOiB2YWwgPSBVUFRfQ1MocmVncyk7IGJyZWFrOwkJCVwKLQkJY2FzZSBTUzogdmFsID0gVVBUX1NTKHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgRlNfQkFTRTogdmFsID0gVVBUX0ZTX0JBU0UocmVncyk7IGJyZWFrOwkJXAotCQljYXNlIEdTX0JBU0U6IHZhbCA9IFVQVF9HU19CQVNFKHJlZ3MpOyBicmVhazsJCVwKLQkJY2FzZSBEUzogdmFsID0gVVBUX0RTKHJlZ3MpOyBicmVhazsJCQlcCi0JCWNhc2UgRVM6IHZhbCA9IFVQVF9FUyhyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIEZTIDogdmFsID0gVVBUX0ZTIChyZWdzKTsgYnJlYWs7CQkJXAotCQljYXNlIEdTOiB2YWwgPSBVUFRfR1MocmVncyk7IGJyZWFrOwkJCVwKLQkJY2FzZSBFRkxBR1M6IHZhbCA9IFVQVF9FRkxBR1MocmVncyk7IGJyZWFrOwkJXAotCQlkZWZhdWx0IDoJCQkJCQlcCi0JCQlwYW5pYygiQmFkIHJlZ2lzdGVyIGluIFVQVF9SRUcgOiAlZFxuIiwgcmVnKTsJXAotCQkJdmFsID0gLTE7CQkJCQlcCi0JCX0JCQkJCQkJXAotCQl2YWw7CQkJCQkJCVwKLQl9KQotCi0KLSNkZWZpbmUgVVBUX1NFVChyZWdzLCByZWcsIHZhbCkgXAotCSh7ICAgICAgdW5zaWduZWQgbG9uZyBfX3VwdF92YWwgPSB2YWw7CVwKLQkJc3dpdGNoKHJlZyl7CQkJCQkJXAotCQljYXNlIFI4OiBVUFRfUjgocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIFI5OiBVUFRfUjkocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIFIxMDogVVBUX1IxMChyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCi0JCWNhc2UgUjExOiBVUFRfUjExKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKLQkJY2FzZSBSMTI6IFVQVF9SMTIocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIFIxMzogVVBUX1IxMyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCi0JCWNhc2UgUjE0OiBVUFRfUjE0KHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKLQkJY2FzZSBSMTU6IFVQVF9SMTUocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIFJJUDogVVBUX0lQKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKLQkJY2FzZSBSU1A6IFVQVF9TUChyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCi0JCWNhc2UgUkFYOiBVUFRfUkFYKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKLQkJY2FzZSBSQlg6IFVQVF9SQlgocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIFJDWDogVVBUX1JDWChyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCi0JCWNhc2UgUkRYOiBVUFRfUkRYKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKLQkJY2FzZSBSU0k6IFVQVF9SU0kocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIFJESTogVVBUX1JESShyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCi0JCWNhc2UgUkJQOiBVUFRfUkJQKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKLQkJY2FzZSBPUklHX1JBWDogVVBUX09SSUdfUkFYKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJXAotCQljYXNlIENTOiBVUFRfQ1MocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIFNTOiBVUFRfU1MocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIEZTX0JBU0U6IFVQVF9GU19CQVNFKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJXAotCQljYXNlIEdTX0JBU0U6IFVQVF9HU19CQVNFKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJXAotCQljYXNlIERTOiBVUFRfRFMocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIEVTOiBVUFRfRVMocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIEZTOiBVUFRfRlMocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIEdTOiBVUFRfR1MocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAotCQljYXNlIEVGTEFHUzogVVBUX0VGTEFHUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CVwKLQkJZGVmYXVsdCA6CQkJCQkJXAotCQkJcGFuaWMoIkJhZCByZWdpc3RlciBpbiBVUFRfU0VUIDogJWRcbiIsIHJlZyk7CVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJfQkJCQkJCQlcCi0JCV9fdXB0X3ZhbDsJCQkJCQlcCi0JfSkKLQotI2RlZmluZSBVUFRfU0VUX1NZU0NBTExfUkVUVVJOKHIsIHJlcykgXAotCVJFR1NfU0VUX1NZU0NBTExfUkVUVVJOKChyKS0+cmVncywgKHJlcykpCi0KLSNkZWZpbmUgVVBUX1JFU1RBUlRfU1lTQ0FMTChyKSBSRUdTX1JFU1RBUlRfU1lTQ0FMTCgociktPmdwKQotCi0jZGVmaW5lIFVQVF9TRUdWX0lTX0ZJWEFCTEUocikgUkVHU19TRUdWX0lTX0ZJWEFCTEUoJnItPnNrYXMpCi0KLSNkZWZpbmUgVVBUX0ZBVUxUSU5GTyhyKSAoJihyKS0+ZmF1bHRpbmZvKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pbml0X3JlZ2lzdGVycyhpbnQgcGlkKQotewotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3N0dWIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3N0dWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU1ZjljMi4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zdHViLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19TWVNERVBfU1RVQl9ICi0jZGVmaW5lIF9fU1lTREVQX1NUVUJfSAotCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzZGVwL3B0cmFjZV91c2VyLmg+Ci0jaW5jbHVkZSAiYXMtbGF5b3V0LmgiCi0jaW5jbHVkZSAic3R1Yi1kYXRhLmgiCi0jaW5jbHVkZSAia2Vybl9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCi0KLWV4dGVybiB2b2lkIHN0dWJfc2Vndl9oYW5kbGVyKGludCBzaWcpOwotZXh0ZXJuIHZvaWQgc3R1Yl9jbG9uZV9oYW5kbGVyKHZvaWQpOwotCi0jZGVmaW5lIFNUVUJfU1lTQ0FMTF9SRVQgUFRfSU5ERVgoUkFYKQotI2RlZmluZSBTVFVCX01NQVBfTlIgX19OUl9tbWFwCi0jZGVmaW5lIE1NQVBfT0ZGU0VUKG8pIChvKQotCi0jZGVmaW5lIF9fc3lzY2FsbF9jbG9iYmVyICJyMTEiLCJyY3giLCJtZW1vcnkiCi0jZGVmaW5lIF9fc3lzY2FsbCAic3lzY2FsbCIKLQotc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDAobG9uZyBzeXNjYWxsKQotewotCWxvbmcgcmV0OwotCi0JX19hc21fXyB2b2xhdGlsZSAoX19zeXNjYWxsCi0JCTogIj1hIiAocmV0KQotCQk6ICIwIiAoc3lzY2FsbCkgOiBfX3N5c2NhbGxfY2xvYmJlciApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDIobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMikKLXsKLQlsb25nIHJldDsKLQotCV9fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbAotCQk6ICI9YSIgKHJldCkKLQkJOiAiMCIgKHN5c2NhbGwpLCAiRCIgKGFyZzEpLCAiUyIgKGFyZzIpIDogX19zeXNjYWxsX2Nsb2JiZXIgKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGwzKGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMykKLXsKLQlsb25nIHJldDsKLQotCV9fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbAotCQk6ICI9YSIgKHJldCkKLQkJOiAiMCIgKHN5c2NhbGwpLCAiRCIgKGFyZzEpLCAiUyIgKGFyZzIpLCAiZCIgKGFyZzMpCi0JCTogX19zeXNjYWxsX2Nsb2JiZXIgKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGw0KGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMywKLQkJCQkgbG9uZyBhcmc0KQotewotCWxvbmcgcmV0OwotCi0JX19hc21fXyB2b2xhdGlsZSAoIm1vdnEgJTUsJSVyMTAgOyAiIF9fc3lzY2FsbAotCQk6ICI9YSIgKHJldCkKLQkJOiAiMCIgKHN5c2NhbGwpLCAiRCIgKGFyZzEpLCAiUyIgKGFyZzIpLCAiZCIgKGFyZzMpLAotCQkgICJnIiAoYXJnNCkKLQkJOiBfX3N5c2NhbGxfY2xvYmJlciwgInIxMCIgKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGw1KGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMywKLQkJCQkgbG9uZyBhcmc0LCBsb25nIGFyZzUpCi17Ci0JbG9uZyByZXQ7Ci0KLQlfX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IG1vdnEgJTYsJSVyOCA7ICIgX19zeXNjYWxsCi0JCTogIj1hIiAocmV0KQotCQk6ICIwIiAoc3lzY2FsbCksICJEIiAoYXJnMSksICJTIiAoYXJnMiksICJkIiAoYXJnMyksCi0JCSAgImciIChhcmc0KSwgImciIChhcmc1KQotCQk6IF9fc3lzY2FsbF9jbG9iYmVyLCAicjEwIiwgInI4IiApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRyYXBfbXlzZWxmKHZvaWQpCi17Ci0JX19hc20oImludDMiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlbWFwX3N0YWNrKGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZxICU0LCUlcjEwIDsgbW92cSAlNSwlJXI4IDsgIgotCQkJICAibW92cSAlNiwgJSVyOTsgIiBfX3N5c2NhbGwgIjsgbW92cSAlNywgJSVyYnggOyAiCi0JCQkgICJtb3ZxICUlcmF4LCAoJSVyYngpIjoKLQkJCSAgOiAiYSIgKFNUVUJfTU1BUF9OUiksICJEIiAoU1RVQl9EQVRBKSwKLQkJCSAgICAiUyIgKFVNX0tFUk5fUEFHRV9TSVpFKSwKLQkJCSAgICAiZCIgKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnIiAoTUFQX0ZJWEVEIHwgTUFQX1NIQVJFRCksICJnIiAoZmQpLAotCQkJICAgICJnIiAob2Zmc2V0KSwKLQkJCSAgICAiaSIgKCYoKHN0cnVjdCBzdHViX2RhdGEgKikgU1RVQl9EQVRBKS0+ZXJyKQotCQkJICA6IF9fc3lzY2FsbF9jbG9iYmVyLCAicjEwIiwgInI4IiwgInI5IiApOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3Rscy5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvdGxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZjE5ZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvdGxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIF9TWVNERVBfVExTX0gKLSNkZWZpbmUgX1NZU0RFUF9UTFNfSAotCi0jIGlmbmRlZiBfX0tFUk5FTF9fCi0KLS8qIENoYW5nZSBuYW1lIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBvcmlnaW5hbCBvbmUgZnJvbSA8YXNtL2xkdC5oPiwgd2hpY2gKLSAqIG1heSBiZSBuYW1lZCB1c2VyX2Rlc2MgKGJ1dCBpbiAyLjQgYW5kIGluIGhlYWRlciBtYXRjaGluZyBpdHMgQVBJIHdhcyBuYW1lZAotICogbW9kaWZ5X2xkdF9sZHRfcykuICovCi0KLXR5cGVkZWYgc3RydWN0IHVtX2R1cF91c2VyX2Rlc2MgewotCXVuc2lnbmVkIGludCAgZW50cnlfbnVtYmVyOwotCXVuc2lnbmVkIGludCAgYmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCAgbGltaXQ7Ci0JdW5zaWduZWQgaW50ICBzZWdfMzJiaXQ6MTsKLQl1bnNpZ25lZCBpbnQgIGNvbnRlbnRzOjI7Ci0JdW5zaWduZWQgaW50ICByZWFkX2V4ZWNfb25seToxOwotCXVuc2lnbmVkIGludCAgbGltaXRfaW5fcGFnZXM6MTsKLQl1bnNpZ25lZCBpbnQgIHNlZ19ub3RfcHJlc2VudDoxOwotCXVuc2lnbmVkIGludCAgdXNlYWJsZToxOwotCXVuc2lnbmVkIGludCAgbG06MTsKLX0gdXNlcl9kZXNjX3Q7Ci0KLSMgZWxzZSAvKiBfX0tFUk5FTF9fICovCi0KLSMgIGluY2x1ZGUgPGFzbS9sZHQuaD4KLXR5cGVkZWYgc3RydWN0IHVzZXJfZGVzYyB1c2VyX2Rlc2NfdDsKLQotIyBlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX1NZU0RFUF9UTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3VtX21tdS5oIGIvYXJjaC91bS9pbmNsdWRlL3VtX21tdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTc1ZmY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vaW5jbHVkZS91bV9tbXUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfVU1fTU1VX0gKLSNkZWZpbmUgX19BUkNIX1VNX01NVV9ICi0KLSNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCi0jaW5jbHVkZSAibW1faWQuaCIKLSNpbmNsdWRlICJhc20vbGR0LmgiCi0KLXR5cGVkZWYgc3RydWN0IG1tX2NvbnRleHQgewotCXN0cnVjdCBtbV9pZCBpZDsKLQlzdHJ1Y3QgdW1sX2xkdCBsZHQ7Ci0Jc3RydWN0IHBhZ2UgKipzdHViX3BhZ2VzOwotfSBtbV9jb250ZXh0X3Q7Ci0KLWV4dGVybiB2b2lkIF9fc3dpdGNoX21tKHN0cnVjdCBtbV9pZCAqIG1tX2lkcCk7Ci0KLS8qIEF2b2lkIHRhbmdsZWQgaW5jbHVzaW9uIHdpdGggYXNtL2xkdC5oICovCi1leHRlcm4gbG9uZyBpbml0X25ld19sZHQoc3RydWN0IG1tX2NvbnRleHQgKnRvX21tLCBzdHJ1Y3QgbW1fY29udGV4dCAqZnJvbV9tbSk7Ci1leHRlcm4gdm9pZCBmcmVlX2xkdChzdHJ1Y3QgbW1fY29udGV4dCAqbW0pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvdXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIzZmFjLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vaW5jbHVkZS91c2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19VU0VSX0hfXwotI2RlZmluZSBfX1VTRVJfSF9fCi0KLSNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCi0KLS8qCi0gKiBUaGUgdXN1YWwgZGVmaW5pdGlvbiAtIGNvcGllZCBoZXJlIGJlY2F1c2UgdGhlIGtlcm5lbCBwcm92aWRlcyBpdHMgb3duLAotICogZmFuY2llciwgdHlwZS1zYWZlLCBkZWZpbml0aW9uLiAgVXNpbmcgdGhhdCBvbmUgd291bGQgcmVxdWlyZQotICogY29weWluZyB0b28gbXVjaCBpbmZyYXN0cnVjdHVyZSBmb3IgbXkgdGFzdGUsIHNvIHVzZXJzcGFjZSBmaWxlcwotICogZ2V0IGxlc3MgY2hlY2tpbmcgdGhhbiBrZXJuZWwgZmlsZXMuCi0gKi8KLSNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCi0KLS8qIFRoaXMgaXMgdG8gZ2V0IHNpemVfdCAqLwotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZgotCi1leHRlcm4gdm9pZCBwYW5pYyhjb25zdCBjaGFyICpmbXQsIC4uLikKLQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7Ci0KLSNpZmRlZiBVTUxfQ09ORklHX1BSSU5USwotZXh0ZXJuIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1leHRlcm4gdm9pZCBzY2hlZHVsZSh2b2lkKTsKLWV4dGVybiBpbnQgaW5fYXRvbihjaGFyICpzdHIpOwotZXh0ZXJuIGludCBvcGVuX2dkYl9jaGFuKHZvaWQpOwotZXh0ZXJuIHNpemVfdCBzdHJsY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwotZXh0ZXJuIHNpemVfdCBzdHJsY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2V4ZWMuYyBiL2FyY2gvdW0va2VybmVsL2V4ZWMuYwppbmRleCA1OTg3MTFjLi5mZGEzMGQyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9leGVjLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvZXhlYy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibWVtX3VzZXIuaCIKICNpbmNsdWRlICJza2FzLmgiCiAjaW5jbHVkZSAib3MuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaW50ZXJuYWwuaCBiL2FyY2gvdW0va2VybmVsL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkYTQzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0va2VybmVsL2ludGVybmFsLmgKQEAgLTAsMCArMSBAQAorZXh0ZXJuIGxvbmcgdW1fZXhlY3ZlKGNoYXIgKmZpbGUsIGNoYXIgX191c2VyICpfX3VzZXIgKmFyZ3YsIGNoYXIgX191c2VyICpfX3VzZXIgKmVudik7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvdW0va2VybmVsL3NpZ25hbC5jCmluZGV4IGIwZmNlNzIuLmI1YzA5NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NpZ25hbC5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgImZyYW1lX2tlcm4uaCIKICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKLSNpbmNsdWRlICJzaWdjb250ZXh0LmgiCisjaW5jbHVkZSA8c3lzZGVwL3NpZ2NvbnRleHQuaD4KIAogRVhQT1JUX1NZTUJPTChibG9ja19zaWduYWxzKTsKIEVYUE9SVF9TWU1CT0wodW5ibG9ja19zaWduYWxzKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYyBiL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYwppbmRleCAxMjhlZTg1Li5jNGRmNzA1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc3lzY2FsbC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiYXNtL21tYW4uaCIKICNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgogI2luY2x1ZGUgImFzbS91bmlzdGQuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBsb25nIHN5c19mb3JrKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2luY2x1ZGUvZmlsZS5oIGIvYXJjaC91bS9vcy1MaW51eC9pbmNsdWRlL2ZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU3MWJlMi4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2luY2x1ZGUvZmlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaWZuZGVmIF9fT1NfRklMRV9IX18KLSNkZWZpbmUgX19PU19GSUxFX0hfXwotCi0jZGVmaW5lIERFVl9OVUxMICIvZGV2L251bGwiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jCmluZGV4IDQ4NGU2OGYuLmQyNjFmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgogI2luY2x1ZGUgInN5c2RlcC9zdHViLmgiCi0jaW5jbHVkZSAidW1sLWNvbmZpZy5oIgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBiYXRjaF9zeXNjYWxsX3N0dWIsIF9fc3lzY2FsbF9zdHViX3N0YXJ0OwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2FzbS9hcmNocGFyYW0uaCBiL2FyY2gvdW0vc3lzLWkzODYvYXNtL2FyY2hwYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZmQ3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L2FzbS9hcmNocGFyYW0uaApAQCAtMCwwICsxLDI2IEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDMgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fQVJDSFBBUkFNX0kzODZfSAorI2RlZmluZSBfX1VNX0FSQ0hQQVJBTV9JMzg2X0gKKworI2lmZGVmIENPTkZJR19YODZfUEFFCisjZGVmaW5lIExBU1RfUEtNQVAgNTEyCisjZWxzZQorI2RlZmluZSBMQVNUX1BLTUFQIDEwMjQKKyNlbmRpZgorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2VsZi1pMzg2LmggYi9hcmNoL3VtL3N5cy1pMzg2L2FzbS9lbGYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vZWxmLWkzODYuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21vZHVsZS1pMzg2LmggYi9hcmNoL3VtL3N5cy1pMzg2L2FzbS9tb2R1bGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vbW9kdWxlLWkzODYuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMtaTM4Ni9hc20vbW9kdWxlLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhOTA2MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvYXNtL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QUk9DRVNTT1JfSTM4Nl9ICisjZGVmaW5lIF9fVU1fUFJPQ0VTU09SX0kzODZfSAorCisjaW5jbHVkZSAibGludXgvc3RyaW5nLmgiCisjaW5jbHVkZSA8c3lzZGVwL2hvc3RfbGR0Lmg+CisjaW5jbHVkZSAiYXNtL3NlZ21lbnQuaCIKKworZXh0ZXJuIGludCBob3N0X2hhc19jbW92OworCisvKiBpbmNsdWRlIGZhdWx0aW5mbyBzdHJ1Y3R1cmUgKi8KKyNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCisKK3N0cnVjdCB1bWxfdGxzX3N0cnVjdCB7CisJc3RydWN0IHVzZXJfZGVzYyB0bHM7CisJdW5zaWduZWQgZmx1c2hlZDoxOworCXVuc2lnbmVkIHByZXNlbnQ6MTsKK307CisKK3N0cnVjdCBhcmNoX3RocmVhZCB7CisJc3RydWN0IHVtbF90bHNfc3RydWN0IHRsc19hcnJheVtHRFRfRU5UUllfVExTX0VOVFJJRVNdOworCXVuc2lnbmVkIGxvbmcgZGVidWdyZWdzWzhdOworCWludCBkZWJ1Z3JlZ3Nfc2VxOworCXN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOworfTsKKworI2RlZmluZSBJTklUX0FSQ0hfVEhSRUFEIHsgXAorCS50bHNfYXJyYXkgIAkJPSB7IFsgMCAuLi4gR0RUX0VOVFJZX1RMU19FTlRSSUVTIC0gMSBdID0gXAorCQkJCSAgICB7IC5wcmVzZW50ID0gMCwgLmZsdXNoZWQgPSAwIH0gfSwgXAorCS5kZWJ1Z3JlZ3MgIAkJPSB7IFsgMCAuLi4gNyBdID0gMCB9LCBcCisJLmRlYnVncmVnc19zZXEJCT0gMCwgXAorCS5mYXVsdGluZm8JCT0geyAwLCAwLCAwIH0gXAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mbHVzaF90aHJlYWQoc3RydWN0IGFyY2hfdGhyZWFkICp0aHJlYWQpCit7CisJLyogQ2xlYXIgYW55IFRMUyBzdGlsbCBoYW5naW5nICovCisJbWVtc2V0KCZ0aHJlYWQtPnRsc19hcnJheSwgMCwgc2l6ZW9mKHRocmVhZC0+dGxzX2FycmF5KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NvcHlfdGhyZWFkKHN0cnVjdCBhcmNoX3RocmVhZCAqZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmNoX3RocmVhZCAqdG8pCit7CisgICAgICAgIG1lbWNweSgmdG8tPnRsc19hcnJheSwgJmZyb20tPnRsc19hcnJheSwgc2l6ZW9mKGZyb20tPnRsc19hcnJheSkpOworfQorCisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKworLyogUkVQIE5PUCAoUEFVU0UpIGlzIGEgZ29vZCB0aGluZyB0byBpbnNlcnQgaW50byBidXN5LXdhaXQgbG9vcHMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVwX25vcCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXA7bm9wIjogOiA6Im1lbW9yeSIpOworfQorCisjZGVmaW5lIGNwdV9yZWxheCgpCXJlcF9ub3AoKQorCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLiBTdG9sZW4KKyAqIGZyb20gYXNtLWkzODYvcHJvY2Vzc29yLmgKKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpIFwKKwkoeyB2b2lkICpwYzsgX19hc21fXygibW92bCAkMWYsJTBcbjE6IjoiPWciIChwYykpOyBwYzsgfSkKKworI2RlZmluZSBBUkNIX0lTX1NUQUNLR1JPVyhhZGRyZXNzKSBcCisgICAgICAgKGFkZHJlc3MgKyAzMiA+PSBVUFRfU1AoJmN1cnJlbnQtPnRocmVhZC5yZWdzLnJlZ3MpKQorCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgS1NUS19SRUcodHNrLCBFSVApCisjZGVmaW5lIEtTVEtfRVNQKHRzaykgS1NUS19SRUcodHNrLCBVRVNQKQorI2RlZmluZSBLU1RLX0VCUCh0c2spIEtTVEtfUkVHKHRzaywgRUJQKQorCisjaW5jbHVkZSAiYXNtL3Byb2Nlc3Nvci1nZW5lcmljLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9hc20vcHRyYWNlLmggYi9hcmNoL3VtL3N5cy1pMzg2L2FzbS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjczZTRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vcHRyYWNlLmgKQEAgLTAsMCArMSw1NiBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fUFRSQUNFX0kzODZfSAorI2RlZmluZSBfX1VNX1BUUkFDRV9JMzg2X0gKKworI2RlZmluZSBIT1NUX0FVRElUX0FSQ0ggQVVESVRfQVJDSF9JMzg2CisKKyNpbmNsdWRlICJsaW51eC9jb21waWxlci5oIgorI2luY2x1ZGUgImFzbS9wdHJhY2UtZ2VuZXJpYy5oIgorCisjZGVmaW5lIFBUX1JFR1NfRUFYKHIpIFVQVF9FQVgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19FQlgocikgVVBUX0VCWCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0VDWChyKSBVUFRfRUNYKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfRURYKHIpIFVQVF9FRFgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19FU0kocikgVVBUX0VTSSgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0VESShyKSBVUFRfRURJKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfRUJQKHIpIFVQVF9FQlAoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX0NTKHIpIFVQVF9DUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1NTKHIpIFVQVF9TUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0RTKHIpIFVQVF9EUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0VTKHIpIFVQVF9FUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0ZTKHIpIFVQVF9GUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0dTKHIpIFVQVF9HUygmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFR1NfRUZMQUdTKHIpIFVQVF9FRkxBR1MoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX09SSUdfU1lTQ0FMTChyKSBQVF9SRUdTX0VBWChyKQorI2RlZmluZSBQVF9SRUdTX1NZU0NBTExfUkVUKHIpIFBUX1JFR1NfRUFYKHIpCisjZGVmaW5lIFBUX0ZJWF9FWEVDX1NUQUNLKHNwKSBkbyA7IHdoaWxlKDApCisKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBQVF9SRUdTX0lQKHJlZ3MpCisKKyNkZWZpbmUgdXNlcl9tb2RlKHIpIFVQVF9JU19VU0VSKCYociktPnJlZ3MpCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGF2b2lkIGluY2x1ZGluZyBzeXNkZXAvdGxzLmgsIHdoaWNoIGNhdXNlcyBhCisgKiBjaXJjdWxhciBpbmNsdWRlLCBhbmQgY29tcGlsYXRpb24gZmFpbHVyZXMuCisgKi8KK3N0cnVjdCB1c2VyX2Rlc2M7CisKK2V4dGVybiBpbnQgZ2V0X2ZweHJlZ3Moc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpidWYsCisJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiBpbnQgc2V0X2ZweHJlZ3Moc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpidWYsCisJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKK2V4dGVybiBpbnQgcHRyYWNlX2dldF90aHJlYWRfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2VyX2Rlc2MgX191c2VyICp1c2VyX2Rlc2MpOworCitleHRlcm4gaW50IHB0cmFjZV9zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqdXNlcl9kZXNjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvYXJjaHNldGptcC5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2FyY2hzZXRqbXAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2FyY2hzZXRqbXAuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2FyY2hzZXRqbXAuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2JhcnJpZXIuaCBiL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9iYXJyaWVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9iYXJyaWVyLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9iYXJyaWVyLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9jaGVja3N1bS5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2NoZWNrc3VtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9jaGVja3N1bS5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvY2hlY2tzdW0uaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2ZhdWx0aW5mby5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2ZhdWx0aW5mby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvZmF1bHRpbmZvLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9mYXVsdGluZm8uaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2hvc3RfbGR0LmggYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvaG9zdF9sZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTUzY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2hvc3RfbGR0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfX0FTTV9IT1NUX0xEVF9JMzg2X0gKKyNkZWZpbmUgX19BU01fSE9TVF9MRFRfSTM4Nl9ICisKKyNpbmNsdWRlIDxhc20vbGR0Lmg+CisKKy8qCisgKiBtYWNyb3Mgc3RvbGVuIGZyb20gaW5jbHVkZS9hc20taTM4Ni9kZXNjLmgKKyAqLworI2RlZmluZSBMRFRfZW50cnlfYShpbmZvKSBcCisJKCgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwMDBmZmZmKSA8PCAxNikgfCAoKGluZm8pLT5saW1pdCAmIDB4MGZmZmYpKQorCisjZGVmaW5lIExEVF9lbnRyeV9iKGluZm8pIFwKKwkoKChpbmZvKS0+YmFzZV9hZGRyICYgMHhmZjAwMDAwMCkgfCBcCisJKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDBmZjAwMDApID4+IDE2KSB8IFwKKwkoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwgXAorCSgoKGluZm8pLT5yZWFkX2V4ZWNfb25seSBeIDEpIDw8IDkpIHwgXAorCSgoaW5mbyktPmNvbnRlbnRzIDw8IDEwKSB8IFwKKwkoKChpbmZvKS0+c2VnX25vdF9wcmVzZW50IF4gMSkgPDwgMTUpIHwgXAorCSgoaW5mbyktPnNlZ18zMmJpdCA8PCAyMikgfCBcCisJKChpbmZvKS0+bGltaXRfaW5fcGFnZXMgPDwgMjMpIHwgXAorCSgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwgXAorCTB4NzAwMCkKKworI2RlZmluZSBMRFRfZW1wdHkoaW5mbykgKFwKKwkoaW5mbyktPmJhc2VfYWRkcgk9PSAwCSYmIFwKKwkoaW5mbyktPmxpbWl0CQk9PSAwCSYmIFwKKwkoaW5mbyktPmNvbnRlbnRzCT09IDAJJiYgXAorCShpbmZvKS0+cmVhZF9leGVjX29ubHkJPT0gMQkmJiBcCisJKGluZm8pLT5zZWdfMzJiaXQJPT0gMAkmJiBcCisJKGluZm8pLT5saW1pdF9pbl9wYWdlcwk9PSAwCSYmIFwKKwkoaW5mbyktPnNlZ19ub3RfcHJlc2VudAk9PSAxCSYmIFwKKwkoaW5mbyktPnVzZWFibGUJCT09IDAJKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9rZXJuZWwtb2Zmc2V0cy5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2tlcm5lbC1vZmZzZXRzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9rZXJuZWwtb2Zmc2V0cy5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAva2VybmVsLW9mZnNldHMuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MGU2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fU1lTREVQX0kzODZfUFRSQUNFX0gKKyNkZWZpbmUgX19TWVNERVBfSTM4Nl9QVFJBQ0VfSAorCisjaW5jbHVkZSAidXNlcl9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCisKKyNkZWZpbmUgTUFYX1JFR19OUiAoVU1fRlJBTUVfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKyNkZWZpbmUgTUFYX1JFR19PRkZTRVQgKFVNX0ZSQU1FX1NJWkUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfZGVidWdyZWdzKGludCBzZXEpIHt9CisKKy8qIHN5c2NhbGwgZW11bGF0aW9uIHBhdGggaW4gcHRyYWNlICovCisKKyNpZm5kZWYgUFRSQUNFX1NZU0VNVQorI2RlZmluZSBQVFJBQ0VfU1lTRU1VIDMxCisjZW5kaWYKKwordm9pZCBzZXRfdXNpbmdfc3lzZW11KGludCB2YWx1ZSk7CitpbnQgZ2V0X3VzaW5nX3N5c2VtdSh2b2lkKTsKK2V4dGVybiBpbnQgc3lzZW11X3N1cHBvcnRlZDsKKworI2luY2x1ZGUgInNrYXNfcHRyZWdzLmgiCisKKyNkZWZpbmUgUkVHU19JUChyKSAoKHIpW0hPU1RfSVBdKQorI2RlZmluZSBSRUdTX1NQKHIpICgocilbSE9TVF9TUF0pCisjZGVmaW5lIFJFR1NfRUZMQUdTKHIpICgocilbSE9TVF9FRkxBR1NdKQorI2RlZmluZSBSRUdTX0VBWChyKSAoKHIpW0hPU1RfRUFYXSkKKyNkZWZpbmUgUkVHU19FQlgocikgKChyKVtIT1NUX0VCWF0pCisjZGVmaW5lIFJFR1NfRUNYKHIpICgocilbSE9TVF9FQ1hdKQorI2RlZmluZSBSRUdTX0VEWChyKSAoKHIpW0hPU1RfRURYXSkKKyNkZWZpbmUgUkVHU19FU0kocikgKChyKVtIT1NUX0VTSV0pCisjZGVmaW5lIFJFR1NfRURJKHIpICgocilbSE9TVF9FREldKQorI2RlZmluZSBSRUdTX0VCUChyKSAoKHIpW0hPU1RfRUJQXSkKKyNkZWZpbmUgUkVHU19DUyhyKSAoKHIpW0hPU1RfQ1NdKQorI2RlZmluZSBSRUdTX1NTKHIpICgocilbSE9TVF9TU10pCisjZGVmaW5lIFJFR1NfRFMocikgKChyKVtIT1NUX0RTXSkKKyNkZWZpbmUgUkVHU19FUyhyKSAoKHIpW0hPU1RfRVNdKQorI2RlZmluZSBSRUdTX0ZTKHIpICgocilbSE9TVF9GU10pCisjZGVmaW5lIFJFR1NfR1MocikgKChyKVtIT1NUX0dTXSkKKworI2RlZmluZSBSRUdTX1NFVF9TWVNDQUxMX1JFVFVSTihyLCByZXMpIFJFR1NfRUFYKHIpID0gKHJlcykKKworI2RlZmluZSBSRUdTX1JFU1RBUlRfU1lTQ0FMTChyKSBJUF9SRVNUQVJUX1NZU0NBTEwoUkVHU19JUChyKSkKKworI2lmbmRlZiBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAKKyNkZWZpbmUgUFRSQUNFX1NZU0VNVV9TSU5HTEVTVEVQIDMyCisjZW5kaWYKKworc3RydWN0IHVtbF9wdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGdwW01BWF9SRUdfTlJdOworCXN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOworCWxvbmcgc3lzY2FsbDsKKwlpbnQgaXNfdXNlcjsKK307CisKKyNkZWZpbmUgRU1QVFlfVU1MX1BUX1JFR1MgeyB9CisKKyNkZWZpbmUgVVBUX0lQKHIpIFJFR1NfSVAoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX1NQKHIpIFJFR1NfU1AoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX0VGTEFHUyhyKSBSRUdTX0VGTEFHUygociktPmdwKQorI2RlZmluZSBVUFRfRUFYKHIpIFJFR1NfRUFYKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9FQlgocikgUkVHU19FQlgoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX0VDWChyKSBSRUdTX0VDWCgociktPmdwKQorI2RlZmluZSBVUFRfRURYKHIpIFJFR1NfRURYKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9FU0kocikgUkVHU19FU0koKHIpLT5ncCkKKyNkZWZpbmUgVVBUX0VESShyKSBSRUdTX0VESSgociktPmdwKQorI2RlZmluZSBVUFRfRUJQKHIpIFJFR1NfRUJQKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9PUklHX0VBWChyKSAoKHIpLT5zeXNjYWxsKQorI2RlZmluZSBVUFRfQ1MocikgUkVHU19DUygociktPmdwKQorI2RlZmluZSBVUFRfU1MocikgUkVHU19TUygociktPmdwKQorI2RlZmluZSBVUFRfRFMocikgUkVHU19EUygociktPmdwKQorI2RlZmluZSBVUFRfRVMocikgUkVHU19FUygociktPmdwKQorI2RlZmluZSBVUFRfRlMocikgUkVHU19GUygociktPmdwKQorI2RlZmluZSBVUFRfR1MocikgUkVHU19HUygociktPmdwKQorCisjZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzEocikgVVBUX0VCWChyKQorI2RlZmluZSBVUFRfU1lTQ0FMTF9BUkcyKHIpIFVQVF9FQ1gocikKKyNkZWZpbmUgVVBUX1NZU0NBTExfQVJHMyhyKSBVUFRfRURYKHIpCisjZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzQocikgVVBUX0VTSShyKQorI2RlZmluZSBVUFRfU1lTQ0FMTF9BUkc1KHIpIFVQVF9FREkocikKKyNkZWZpbmUgVVBUX1NZU0NBTExfQVJHNihyKSBVUFRfRUJQKHIpCisKK2V4dGVybiBpbnQgdXNlcl9jb250ZXh0KHVuc2lnbmVkIGxvbmcgc3ApOworCisjZGVmaW5lIFVQVF9JU19VU0VSKHIpICgociktPmlzX3VzZXIpCisKK3N0cnVjdCBzeXNjYWxsX2FyZ3MgeworCXVuc2lnbmVkIGxvbmcgYXJnc1s2XTsKK307CisKKyNkZWZpbmUgU1lTQ0FMTF9BUkdTKHIpICgoc3RydWN0IHN5c2NhbGxfYXJncykgXAorCQkJIHsgLmFyZ3MgPSB7IFVQVF9TWVNDQUxMX0FSRzEociksCVwKKwkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzIociksCVwKKwkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzMociksCVwKKwkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzQociksCVwKKwkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzUociksCVwKKwkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzYocikgfSB9ICkKKworI2RlZmluZSBVUFRfUkVHKHJlZ3MsIHJlZykgXAorCSh7CXVuc2lnbmVkIGxvbmcgdmFsOyBcCisJCXN3aXRjaChyZWcpeyBcCisJCWNhc2UgRUlQOiB2YWwgPSBVUFRfSVAocmVncyk7IGJyZWFrOyBcCisJCWNhc2UgVUVTUDogdmFsID0gVVBUX1NQKHJlZ3MpOyBicmVhazsgXAorCQljYXNlIEVBWDogdmFsID0gVVBUX0VBWChyZWdzKTsgYnJlYWs7IFwKKwkJY2FzZSBFQlg6IHZhbCA9IFVQVF9FQlgocmVncyk7IGJyZWFrOyBcCisJCWNhc2UgRUNYOiB2YWwgPSBVUFRfRUNYKHJlZ3MpOyBicmVhazsgXAorCQljYXNlIEVEWDogdmFsID0gVVBUX0VEWChyZWdzKTsgYnJlYWs7IFwKKwkJY2FzZSBFU0k6IHZhbCA9IFVQVF9FU0kocmVncyk7IGJyZWFrOyBcCisJCWNhc2UgRURJOiB2YWwgPSBVUFRfRURJKHJlZ3MpOyBicmVhazsgXAorCQljYXNlIEVCUDogdmFsID0gVVBUX0VCUChyZWdzKTsgYnJlYWs7IFwKKwkJY2FzZSBPUklHX0VBWDogdmFsID0gVVBUX09SSUdfRUFYKHJlZ3MpOyBicmVhazsgXAorCQljYXNlIENTOiB2YWwgPSBVUFRfQ1MocmVncyk7IGJyZWFrOyBcCisJCWNhc2UgU1M6IHZhbCA9IFVQVF9TUyhyZWdzKTsgYnJlYWs7IFwKKwkJY2FzZSBEUzogdmFsID0gVVBUX0RTKHJlZ3MpOyBicmVhazsgXAorCQljYXNlIEVTOiB2YWwgPSBVUFRfRVMocmVncyk7IGJyZWFrOyBcCisJCWNhc2UgRlM6IHZhbCA9IFVQVF9GUyhyZWdzKTsgYnJlYWs7IFwKKwkJY2FzZSBHUzogdmFsID0gVVBUX0dTKHJlZ3MpOyBicmVhazsgXAorCQljYXNlIEVGTDogdmFsID0gVVBUX0VGTEFHUyhyZWdzKTsgYnJlYWs7IFwKKwkJZGVmYXVsdCA6ICBcCisJCQlwYW5pYygiQmFkIHJlZ2lzdGVyIGluIFVQVF9SRUcgOiAlZFxuIiwgcmVnKTsgIFwKKwkJCXZhbCA9IC0xOyBcCisJCX0gXAorCSAgICAgICAgdmFsOyBcCisJfSkKKworI2RlZmluZSBVUFRfU0VUKHJlZ3MsIHJlZywgdmFsKSBcCisJZG8geyBcCisJCXN3aXRjaChyZWcpeyBcCisJCWNhc2UgRUlQOiBVUFRfSVAocmVncykgPSB2YWw7IGJyZWFrOyBcCisJCWNhc2UgVUVTUDogVVBUX1NQKHJlZ3MpID0gdmFsOyBicmVhazsgXAorCQljYXNlIEVBWDogVVBUX0VBWChyZWdzKSA9IHZhbDsgYnJlYWs7IFwKKwkJY2FzZSBFQlg6IFVQVF9FQlgocmVncykgPSB2YWw7IGJyZWFrOyBcCisJCWNhc2UgRUNYOiBVUFRfRUNYKHJlZ3MpID0gdmFsOyBicmVhazsgXAorCQljYXNlIEVEWDogVVBUX0VEWChyZWdzKSA9IHZhbDsgYnJlYWs7IFwKKwkJY2FzZSBFU0k6IFVQVF9FU0kocmVncykgPSB2YWw7IGJyZWFrOyBcCisJCWNhc2UgRURJOiBVUFRfRURJKHJlZ3MpID0gdmFsOyBicmVhazsgXAorCQljYXNlIEVCUDogVVBUX0VCUChyZWdzKSA9IHZhbDsgYnJlYWs7IFwKKwkJY2FzZSBPUklHX0VBWDogVVBUX09SSUdfRUFYKHJlZ3MpID0gdmFsOyBicmVhazsgXAorCQljYXNlIENTOiBVUFRfQ1MocmVncykgPSB2YWw7IGJyZWFrOyBcCisJCWNhc2UgU1M6IFVQVF9TUyhyZWdzKSA9IHZhbDsgYnJlYWs7IFwKKwkJY2FzZSBEUzogVVBUX0RTKHJlZ3MpID0gdmFsOyBicmVhazsgXAorCQljYXNlIEVTOiBVUFRfRVMocmVncykgPSB2YWw7IGJyZWFrOyBcCisJCWNhc2UgRlM6IFVQVF9GUyhyZWdzKSA9IHZhbDsgYnJlYWs7IFwKKwkJY2FzZSBHUzogVVBUX0dTKHJlZ3MpID0gdmFsOyBicmVhazsgXAorCQljYXNlIEVGTDogVVBUX0VGTEFHUyhyZWdzKSA9IHZhbDsgYnJlYWs7IFwKKwkJZGVmYXVsdCA6ICBcCisJCQlwYW5pYygiQmFkIHJlZ2lzdGVyIGluIFVQVF9TRVQgOiAlZFxuIiwgcmVnKTsgIFwKKwkJCWJyZWFrOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBUX1NFVF9TWVNDQUxMX1JFVFVSTihyLCByZXMpIFwKKwlSRUdTX1NFVF9TWVNDQUxMX1JFVFVSTigociktPnJlZ3MsIChyZXMpKQorCisjZGVmaW5lIFVQVF9SRVNUQVJUX1NZU0NBTEwocikgUkVHU19SRVNUQVJUX1NZU0NBTEwoKHIpLT5ncCkKKworI2RlZmluZSBVUFRfT1JJR19TWVNDQUxMKHIpIFVQVF9FQVgocikKKyNkZWZpbmUgVVBUX1NZU0NBTExfTlIocikgVVBUX09SSUdfRUFYKHIpCisjZGVmaW5lIFVQVF9TWVNDQUxMX1JFVChyKSBVUFRfRUFYKHIpCisKKyNkZWZpbmUgVVBUX0ZBVUxUSU5GTyhyKSAoJihyKS0+ZmF1bHRpbmZvKQorCitleHRlcm4gdm9pZCBhcmNoX2luaXRfcmVnaXN0ZXJzKGludCBwaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9wdHJhY2VfdXNlci5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3B0cmFjZV91c2VyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9wdHJhY2VfdXNlci5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvcHRyYWNlX3VzZXIuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NjLmggYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvc2MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NjLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9zYy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc2lnY29udGV4dC5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3NpZ2NvbnRleHQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NpZ2NvbnRleHQuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3NpZ2NvbnRleHQuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NrYXNfcHRyYWNlLmggYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvc2thc19wdHJhY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NrYXNfcHRyYWNlLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9za2FzX3B0cmFjZS5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvc3R1Yi5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3N0dWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzdkZWRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3N0dWIuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19TWVNERVBfU1RVQl9ICisjZGVmaW5lIF9fU1lTREVQX1NUVUJfSAorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgImFzLWxheW91dC5oIgorI2luY2x1ZGUgInN0dWItZGF0YS5oIgorI2luY2x1ZGUgImtlcm5fY29uc3RhbnRzLmgiCisKK2V4dGVybiB2b2lkIHN0dWJfc2Vndl9oYW5kbGVyKGludCBzaWcpOworZXh0ZXJuIHZvaWQgc3R1Yl9jbG9uZV9oYW5kbGVyKHZvaWQpOworCisjZGVmaW5lIFNUVUJfU1lTQ0FMTF9SRVQgRUFYCisjZGVmaW5lIFNUVUJfTU1BUF9OUiBfX05SX21tYXAyCisjZGVmaW5lIE1NQVBfT0ZGU0VUKG8pICgobykgPj4gVU1fS0VSTl9QQUdFX1NISUZUKQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3R1Yl9zeXNjYWxsMChsb25nIHN5c2NhbGwpCit7CisJbG9uZyByZXQ7CisKKwlfX2FzbV9fIHZvbGF0aWxlICgiaW50ICQweDgwIiA6ICI9YSIgKHJldCkgOiAiMCIgKHN5c2NhbGwpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGwxKGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxKQoreworCWxvbmcgcmV0OworCisJX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgOiAiPWEiIChyZXQpIDogIjAiIChzeXNjYWxsKSwgImIiIChhcmcxKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3R1Yl9zeXNjYWxsMihsb25nIHN5c2NhbGwsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKQoreworCWxvbmcgcmV0OworCisJX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgOiAiPWEiIChyZXQpIDogIjAiIChzeXNjYWxsKSwgImIiIChhcmcxKSwKKwkJCSJjIiAoYXJnMikpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDMobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczKQoreworCWxvbmcgcmV0OworCisJX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgOiAiPWEiIChyZXQpIDogIjAiIChzeXNjYWxsKSwgImIiIChhcmcxKSwKKwkJCSJjIiAoYXJnMiksICJkIiAoYXJnMykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDQobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczLAorCQkJCSBsb25nIGFyZzQpCit7CisJbG9uZyByZXQ7CisKKwlfX2FzbV9fIHZvbGF0aWxlICgiaW50ICQweDgwIiA6ICI9YSIgKHJldCkgOiAiMCIgKHN5c2NhbGwpLCAiYiIgKGFyZzEpLAorCQkJImMiIChhcmcyKSwgImQiIChhcmczKSwgIlMiIChhcmc0KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3R1Yl9zeXNjYWxsNShsb25nIHN5c2NhbGwsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCisJCQkJIGxvbmcgYXJnNCwgbG9uZyBhcmc1KQoreworCWxvbmcgcmV0OworCisJX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgOiAiPWEiIChyZXQpIDogIjAiIChzeXNjYWxsKSwgImIiIChhcmcxKSwKKwkJCSJjIiAoYXJnMiksICJkIiAoYXJnMyksICJTIiAoYXJnNCksICJEIiAoYXJnNSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYXBfbXlzZWxmKHZvaWQpCit7CisJX19hc20oImludDMiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbWFwX3N0YWNrKGludCBmZCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJX19hc21fXyB2b2xhdGlsZSAoIm1vdmwgJSVlYXgsJSVlYnAgOyBtb3ZsICUwLCUlZWF4IDsgaW50ICQweDgwIDsiCisJCQkgICJtb3ZsICU3LCAlJWVieCA7IG1vdmwgJSVlYXgsICglJWVieCkiCisJCQkgIDogOiAiZyIgKFNUVUJfTU1BUF9OUiksICJiIiAoU1RVQl9EQVRBKSwKKwkJCSAgICAiYyIgKFVNX0tFUk5fUEFHRV9TSVpFKSwKKwkJCSAgICAiZCIgKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpLAorCQkJICAgICJTIiAoTUFQX0ZJWEVEIHwgTUFQX1NIQVJFRCksICJEIiAoZmQpLAorCQkJICAgICJhIiAob2Zmc2V0KSwKKwkJCSAgICAiaSIgKCYoKHN0cnVjdCBzdHViX2RhdGEgKikgU1RVQl9EQVRBKS0+ZXJyKQorCQkJICA6ICJtZW1vcnkiKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc3lzY2FsbHMuaCBiL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc3lzY2FsbHMuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3N5c2NhbGxzLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9zeXN0ZW0uaCBiL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI5M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3N5c3RlbS5oCkBAIC0wLDAgKzEsMTMyIEBACisjaWZuZGVmIF9BU01fWDg2X1NZU1RFTV9IXworI2RlZmluZSBfQVNNX1g4Nl9TWVNURU1fSF8KKworI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKyNpbmNsdWRlIDxhc20vbm9wcy5oPgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KKworLyogZW50cmllcyBpbiBBUkNIX0RMSU5GTzogKi8KKyNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KKyMgZGVmaW5lIEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggMgorI2Vsc2UKKyMgZGVmaW5lIEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggMQorI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFyY2hfYWxpZ25fc3RhY2sodW5zaWduZWQgbG9uZyBzcCk7CisKK3ZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpOworCisvKgorICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KKyAqIEFuZCB5ZXMsIHRoaXMgaXMgcmVxdWlyZWQgb24gVVAgdG9vIHdoZW4gd2UncmUgdGFsa2luZworICogdG8gZGV2aWNlcy4KKyAqLworI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBTb21lIG5vbi1JbnRlbCBjbG9uZXMgc3VwcG9ydCBvdXQgb2Ygb3JkZXIgc3RvcmUuIHdtYigpIGNlYXNlcyB0byBiZSBhCisgKiBub3AgZm9yIHRoZXNlLgorICovCisjZGVmaW5lIG1iKCkgYWx0ZXJuYXRpdmUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiLCAibWZlbmNlIiwgWDg2X0ZFQVRVUkVfWE1NMikKKyNkZWZpbmUgcm1iKCkgYWx0ZXJuYXRpdmUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiLCAibGZlbmNlIiwgWDg2X0ZFQVRVUkVfWE1NMikKKyNkZWZpbmUgd21iKCkgYWx0ZXJuYXRpdmUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiLCAic2ZlbmNlIiwgWDg2X0ZFQVRVUkVfWE1NKQorI2Vsc2UKKyNkZWZpbmUgbWIoKSAJYXNtIHZvbGF0aWxlKCJtZmVuY2UiOjo6Im1lbW9yeSIpCisjZGVmaW5lIHJtYigpCWFzbSB2b2xhdGlsZSgibGZlbmNlIjo6OiJtZW1vcnkiKQorI2RlZmluZSB3bWIoKQlhc20gdm9sYXRpbGUoInNmZW5jZSIgOjo6ICJtZW1vcnkiKQorI2VuZGlmCisKKy8qKgorICogcmVhZF9iYXJyaWVyX2RlcGVuZHMgLSBGbHVzaCBhbGwgcGVuZGluZyByZWFkcyB0aGF0IHN1YnNlcXVlbnRzIHJlYWRzCisgKiBkZXBlbmQgb24uCisgKgorICogTm8gZGF0YS1kZXBlbmRlbnQgcmVhZHMgZnJvbSBtZW1vcnktbGlrZSByZWdpb25zIGFyZSBldmVyIHJlb3JkZXJlZAorICogb3ZlciB0aGlzIGJhcnJpZXIuICBBbGwgcmVhZHMgcHJlY2VkaW5nIHRoaXMgcHJpbWl0aXZlIGFyZSBndWFyYW50ZWVkCisgKiB0byBhY2Nlc3MgbWVtb3J5IChidXQgbm90IG5lY2Vzc2FyaWx5IG90aGVyIENQVXMnIGNhY2hlcykgYmVmb3JlIGFueQorICogcmVhZHMgZm9sbG93aW5nIHRoaXMgcHJpbWl0aXZlIHRoYXQgZGVwZW5kIG9uIHRoZSBkYXRhIHJldHVybiBieQorICogYW55IG9mIHRoZSBwcmVjZWRpbmcgcmVhZHMuICBUaGlzIHByaW1pdGl2ZSBpcyBtdWNoIGxpZ2h0ZXIgd2VpZ2h0IHRoYW4KKyAqIHJtYigpIG9uIG1vc3QgQ1BVcywgYW5kIGlzIG5ldmVyIGhlYXZpZXIgd2VpZ2h0IHRoYW4gaXMKKyAqIHJtYigpLgorICoKKyAqIFRoZXNlIG9yZGVyaW5nIGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQgYnkgYm90aCB0aGUgbG9jYWwgQ1BVCisgKiBhbmQgdGhlIGNvbXBpbGVyLgorICoKKyAqIE9yZGVyaW5nIGlzIG5vdCBndWFyYW50ZWVkIGJ5IGFueXRoaW5nIG90aGVyIHRoYW4gdGhlc2UgcHJpbWl0aXZlcywKKyAqIG5vdCBldmVuIGJ5IGRhdGEgZGVwZW5kZW5jaWVzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorICogbWVtb3J5X2JhcnJpZXIoKSBmb3IgZXhhbXBsZXMgYW5kIFVSTHMgdG8gbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIGZvcmNlIG9yZGVyaW5nICh0aGUgaW5pdGlhbAorICogdmFsdWUgb2YgImEiIGlzIHplcm8sICJiIiBpcyBvbmUsIGFuZCAicCIgaXMgIiZhIik6CisgKgorICogPHByb2dyYW1saXN0aW5nPgorICoJQ1BVIDAJCQkJQ1BVIDEKKyAqCisgKgliID0gMjsKKyAqCW1lbW9yeV9iYXJyaWVyKCk7CisgKglwID0gJmI7CQkJCXEgPSBwOworICoJCQkJCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7CisgKgkJCQkJZCA9ICpxOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqCisgKiBiZWNhdXNlIHRoZSByZWFkIG9mICIqcSIgZGVwZW5kcyBvbiB0aGUgcmVhZCBvZiAicCIgYW5kIHRoZXNlCisgKiB0d28gcmVhZHMgYXJlIHNlcGFyYXRlZCBieSBhIHJlYWRfYmFycmllcl9kZXBlbmRzKCkuICBIb3dldmVyLAorICogdGhlIGZvbGxvd2luZyBjb2RlLCB3aXRoIHRoZSBzYW1lIGluaXRpYWwgdmFsdWVzIGZvciAiYSIgYW5kICJiIjoKKyAqCisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKglDUFUgMAkJCQlDUFUgMQorICoKKyAqCWEgPSAyOworICoJbWVtb3J5X2JhcnJpZXIoKTsKKyAqCWIgPSAzOwkJCQl5ID0gYjsKKyAqCQkJCQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOworICoJCQkJCXggPSBhOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqCisgKiBkb2VzIG5vdCBlbmZvcmNlIG9yZGVyaW5nLCBzaW5jZSB0aGVyZSBpcyBubyBkYXRhIGRlcGVuZGVuY3kgYmV0d2VlbgorICogdGhlIHJlYWQgb2YgImEiIGFuZCB0aGUgcmVhZCBvZiAiYiIuICBUaGVyZWZvcmUsIG9uIHNvbWUgQ1BVcywgc3VjaAorICogYXMgQWxwaGEsICJ5IiBjb3VsZCBiZSBzZXQgdG8gMyBhbmQgIngiIHRvIDAuICBVc2Ugcm1iKCkKKyAqIGluIGNhc2VzIGxpa2UgdGhpcyB3aGVyZSB0aGVyZSBhcmUgbm8gZGF0YSBkZXBlbmRlbmNpZXMuCisgKiovCisKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNpZmRlZiBDT05GSUdfWDg2X1BQUk9fRkVOQ0UKKyMgZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2Vsc2UKKyMgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQorIyBkZWZpbmUgc21wX3dtYigpIAl3bWIoKQorI2Vsc2UKKyMgZGVmaW5lIHNtcF93bWIoKQliYXJyaWVyKCkKKyNlbmRpZgorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7ICh2b2lkKXhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyBiYXJyaWVyKCk7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIFN0b3AgUkRUU0Mgc3BlY3VsYXRpb24uIFRoaXMgaXMgbmVlZGVkIHdoZW4geW91IG5lZWQgdG8gdXNlIFJEVFNDCisgKiAob3IgZ2V0X2N5Y2xlcyBvciB2cmVhZCB0aGF0IHBvc3NpYmx5IGFjY2Vzc2VzIHRoZSBUU0MpIGluIGEgZGVmaW5lZAorICogY29kZSByZWdpb24uCisgKgorICogKENvdWxkIHVzZSBhbiBhbHRlcm5hdGl2ZSB0aHJlZSB3YXkgZm9yIHRoaXMgaWYgdGhlcmUgd2FzIG9uZS4pCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZHRzY19iYXJyaWVyKHZvaWQpCit7CisJYWx0ZXJuYXRpdmUoQVNNX05PUDMsICJtZmVuY2UiLCBYODZfRkVBVFVSRV9NRkVOQ0VfUkRUU0MpOworCWFsdGVybmF0aXZlKEFTTV9OT1AzLCAibGZlbmNlIiwgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvdGxzLmggYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1NTA3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC90bHMuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9TWVNERVBfVExTX0gKKyNkZWZpbmUgX1NZU0RFUF9UTFNfSAorCisjIGlmbmRlZiBfX0tFUk5FTF9fCisKKy8qIENoYW5nZSBuYW1lIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBvcmlnaW5hbCBvbmUgZnJvbSA8YXNtL2xkdC5oPiwgd2hpY2gKKyAqIG1heSBiZSBuYW1lZCB1c2VyX2Rlc2MgKGJ1dCBpbiAyLjQgYW5kIGluIGhlYWRlciBtYXRjaGluZyBpdHMgQVBJIHdhcyBuYW1lZAorICogbW9kaWZ5X2xkdF9sZHRfcykuICovCisKK3R5cGVkZWYgc3RydWN0IHVtX2R1cF91c2VyX2Rlc2MgeworCXVuc2lnbmVkIGludCAgZW50cnlfbnVtYmVyOworCXVuc2lnbmVkIGludCAgYmFzZV9hZGRyOworCXVuc2lnbmVkIGludCAgbGltaXQ7CisJdW5zaWduZWQgaW50ICBzZWdfMzJiaXQ6MTsKKwl1bnNpZ25lZCBpbnQgIGNvbnRlbnRzOjI7CisJdW5zaWduZWQgaW50ICByZWFkX2V4ZWNfb25seToxOworCXVuc2lnbmVkIGludCAgbGltaXRfaW5fcGFnZXM6MTsKKwl1bnNpZ25lZCBpbnQgIHNlZ19ub3RfcHJlc2VudDoxOworCXVuc2lnbmVkIGludCAgdXNlYWJsZToxOworfSB1c2VyX2Rlc2NfdDsKKworIyBlbHNlIC8qIF9fS0VSTkVMX18gKi8KKworIyAgaW5jbHVkZSA8bGR0Lmg+Cit0eXBlZGVmIHN0cnVjdCB1c2VyX2Rlc2MgdXNlcl9kZXNjX3Q7CisKKyMgZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUlOX0kzODYgNgorI2RlZmluZSBHRFRfRU5UUllfVExTX01JTl9YODZfNjQgMTIKKworI2VuZGlmIC8qIF9TWVNERVBfVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3ZtLWZsYWdzLWkzODYuaCBiL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC92bS1mbGFncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS92bS1mbGFncy1pMzg2LmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC92bS1mbGFncy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwppbmRleCBmZDBjMjVhLi4xMjk2NDczIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKQEAgLTE3OSw3ICsxNzksOCBAQAogCWlmIChoYXZlX2ZweF9yZWdzKSB7CiAJCXN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IGZweDsKIAotCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LCAmc2MuZnBzdGF0ZS0+X2Z4c3JfZW52WzBdLAorCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LAorCQkJJigoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKXNjLmZwc3RhdGUpLT5fZnhzcl9lbnZbMF0sCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zdHViLlMgYi9hcmNoL3VtL3N5cy1pMzg2L3N0dWIuUwppbmRleCA3Njk5ZTg5Li5jNDFiMDRiIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3N0dWIuUworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N0dWIuUwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCiAjaW5jbHVkZSAiYXMtbGF5b3V0LmgiCiAKIAkuZ2xvYmwgc3lzY2FsbF9zdHViCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3N5c2NhbGxzLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c2NhbGxzLmMKaW5kZXggZTJkMTQyNi4uODU3Y2EwYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNjYWxscy5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgogI2luY2x1ZGUgImxpbnV4L3NobS5oIgogI2luY2x1ZGUgImxpbnV4L2lwYy5oIgorI2luY2x1ZGUgImxpbnV4L3N5c2NhbGxzLmgiCiAjaW5jbHVkZSAiYXNtL21tYW4uaCIKICNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgogI2luY2x1ZGUgImFzbS91bmlzdGQuaCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaWE2NC9wdHJhY2UuaCBiL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3B0cmFjZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWlhNjQvcHRyYWNlLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3B0cmFjZS5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWlhNjQvc2lnY29udGV4dC5oIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc2lnY29udGV4dC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWlhNjQvc2lnY29udGV4dC5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy1pYTY0L3N5c2RlcC9zaWdjb250ZXh0LmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaWE2NC9za2FzX3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc2thc19wdHJhY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pYTY0L3NrYXNfcHRyYWNlLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3NrYXNfcHRyYWNlLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaWE2NC9zeXNjYWxscy5oIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc3lzY2FsbHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pYTY0L3N5c2NhbGxzLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3N5c2NhbGxzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS1wcGMuaCBiL2FyY2gvdW0vc3lzLXBwYy9hc20vYXJjaHBhcmFtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS1wcGMuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMtcHBjL2FzbS9hcmNocGFyYW0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oIGIvYXJjaC91bS9zeXMtcHBjL2FzbS9lbGYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy1wcGMvYXNtL2VsZi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItcHBjLmggYi9hcmNoL3VtL3N5cy1wcGMvYXNtL3Byb2Nlc3Nvci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItcHBjLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXBwYy9hc20vcHJvY2Vzc29yLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtcHBjL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAtcHBjL3B0cmFjZS5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy1wcGMvc2hhcmVkL3N5c2RlcC9wdHJhY2UuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1wcGMvc2lnY29udGV4dC5oIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc2lnY29udGV4dC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXBwYy9zaWdjb250ZXh0LmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3NpZ2NvbnRleHQuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1wcGMvc2thc19wdHJhY2UuaCBiL2FyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3NrYXNfcHRyYWNlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAtcHBjL3NrYXNfcHRyYWNlLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3NrYXNfcHRyYWNlLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtcHBjL3N5c2NhbGxzLmggYi9hcmNoL3VtL3N5cy1wcGMvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXBwYy9zeXNjYWxscy5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy1wcGMvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0teDg2XzY0LmggYi9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL2FyY2hwYXJhbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS9hcmNocGFyYW0teDg2XzY0LmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXg4Nl82NC9hc20vYXJjaHBhcmFtLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vZWxmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMteDg2XzY0L2FzbS9lbGYuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbW9kdWxlLXg4Nl82NC5oIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9tb2R1bGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tdW0vbW9kdWxlLXg4Nl82NC5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy14ODZfNjQvYXNtL21vZHVsZS5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzVhMjZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QUk9DRVNTT1JfWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9QUk9DRVNTT1JfWDg2XzY0X0gKKworLyogaW5jbHVkZSBmYXVsdGluZm8gc3RydWN0dXJlICovCisjaW5jbHVkZSAic3lzZGVwL2ZhdWx0aW5mby5oIgorCitzdHJ1Y3QgYXJjaF90aHJlYWQgeworICAgICAgICB1bnNpZ25lZCBsb25nIGRlYnVncmVnc1s4XTsKKyAgICAgICAgaW50IGRlYnVncmVnc19zZXE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZnM7CisgICAgICAgIHN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOworfTsKKworLyogUkVQIE5PUCAoUEFVU0UpIGlzIGEgZ29vZCB0aGluZyB0byBpbnNlcnQgaW50byBidXN5LXdhaXQgbG9vcHMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVwX25vcCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXA7bm9wIjogOiA6Im1lbW9yeSIpOworfQorCisjZGVmaW5lIGNwdV9yZWxheCgpICAgcmVwX25vcCgpCisKKyNkZWZpbmUgSU5JVF9BUkNIX1RIUkVBRCB7IC5kZWJ1Z3JlZ3MgIAkJPSB7IFsgMCAuLi4gNyBdID0gMCB9LCBcCisJCQkgICAuZGVidWdyZWdzX3NlcQk9IDAsIFwKKwkJCSAgIC5mcwkJCT0gMCwgXAorCQkJICAgLmZhdWx0aW5mbwkJPSB7IDAsIDAsIDAgfSB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZsdXNoX3RocmVhZChzdHJ1Y3QgYXJjaF90aHJlYWQgKnRocmVhZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfY29weV90aHJlYWQoc3RydWN0IGFyY2hfdGhyZWFkICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyY2hfdGhyZWFkICp0bykKK3sKKwl0by0+ZnMgPSBmcm9tLT5mczsKK30KKworI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSBcCisJKHsgdm9pZCAqcGM7IF9fYXNtX18oIm1vdnEgJDFmLCUwXG4xOiI6Ij1nIiAocGMpKTsgcGM7IH0pCisKKyNkZWZpbmUgQVJDSF9JU19TVEFDS0dST1coYWRkcmVzcykgXAorICAgICAgICAoYWRkcmVzcyArIDEyOCA+PSBVUFRfU1AoJmN1cnJlbnQtPnRocmVhZC5yZWdzLnJlZ3MpKQorCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgS1NUS19SRUcodHNrLCBSSVApCisjZGVmaW5lIEtTVEtfRVNQKHRzaykgS1NUS19SRUcodHNrLCBSU1ApCisKKyNpbmNsdWRlICJhc20vcHJvY2Vzc29yLWdlbmVyaWMuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Q4YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9wdHJhY2UuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QVFJBQ0VfWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9QVFJBQ0VfWDg2XzY0X0gKKworI2luY2x1ZGUgImxpbnV4L2NvbXBpbGVyLmgiCisjaW5jbHVkZSAiYXNtL2Vycm5vLmgiCisKKyNkZWZpbmUgX19GUkFNRV9PRkZTRVRTIC8qIE5lZWRlZCB0byBnZXQgdGhlIFIqIG1hY3JvcyAqLworI2luY2x1ZGUgImFzbS9wdHJhY2UtZ2VuZXJpYy5oIgorCisjZGVmaW5lIEhPU1RfQVVESVRfQVJDSCBBVURJVF9BUkNIX1g4Nl82NAorCisjZGVmaW5lIFBUX1JFR1NfUkJYKHIpIFVQVF9SQlgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SQ1gocikgVVBUX1JDWCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1JEWChyKSBVUFRfUkRYKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUlNJKHIpIFVQVF9SU0koJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SREkocikgVVBUX1JESSgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1JCUChyKSBVUFRfUkJQKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUkFYKHIpIFVQVF9SQVgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SOChyKSBVUFRfUjgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SOShyKSBVUFRfUjkoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SMTAocikgVVBUX1IxMCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1IxMShyKSBVUFRfUjExKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUjEyKHIpIFVQVF9SMTIoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SMTMocikgVVBUX1IxMygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1IxNChyKSBVUFRfUjE0KCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUjE1KHIpIFVQVF9SMTUoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX0ZTKHIpIFVQVF9GUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0dTKHIpIFVQVF9HUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0RTKHIpIFVQVF9EUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0VTKHIpIFVQVF9FUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1NTKHIpIFVQVF9TUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0NTKHIpIFVQVF9DUygmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFR1NfT1JJR19SQVgocikgVVBUX09SSUdfUkFYKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUklQKHIpIFVQVF9JUCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1JTUChyKSBVUFRfU1AoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX0VGTEFHUyhyKSBVUFRfRUZMQUdTKCYociktPnJlZ3MpCisKKy8qIFhYWCAqLworI2RlZmluZSB1c2VyX21vZGUocikgVVBUX0lTX1VTRVIoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19PUklHX1NZU0NBTEwocikgUFRfUkVHU19SQVgocikKKyNkZWZpbmUgUFRfUkVHU19TWVNDQUxMX1JFVChyKSBQVF9SRUdTX1JBWChyKQorCisjZGVmaW5lIFBUX0ZJWF9FWEVDX1NUQUNLKHNwKSBkbyA7IHdoaWxlKDApCisKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBQVF9SRUdTX0lQKHJlZ3MpCisKK3N0cnVjdCB1c2VyX2Rlc2M7CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0cmFjZV9nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVzZXJfZGVzYykKK3sKKyAgICAgICAgcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0cmFjZV9zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVzZXJfZGVzYykKK3sKKyAgICAgICAgcmV0dXJuIC1FTk9TWVM7Cit9CisKK2V4dGVybiBsb25nIGFyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyICphZGRyKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvYXJjaHNldGptcC5oIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvYXJjaHNldGptcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9hcmNoc2V0am1wLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL2FyY2hzZXRqbXAuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvYmFycmllci5oIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvYmFycmllci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9iYXJyaWVyLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL2JhcnJpZXIuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvY2hlY2tzdW0uaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL2NoZWNrc3VtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2NoZWNrc3VtLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL2NoZWNrc3VtLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2ZhdWx0aW5mby5oIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvZmF1bHRpbmZvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2ZhdWx0aW5mby5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9mYXVsdGluZm8uaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvaG9zdF9sZHQuaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL2hvc3RfbGR0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMWJlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL2hvc3RfbGR0LmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBfX0FTTV9IT1NUX0xEVF9YODZfNjRfSAorI2RlZmluZSBfX0FTTV9IT1NUX0xEVF9YODZfNjRfSAorCisjaW5jbHVkZSA8YXNtL2xkdC5oPgorCisvKgorICogbWFjcm9zIHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLXg4Nl82NC9kZXNjLmgKKyAqLworI2RlZmluZSBMRFRfZW50cnlfYShpbmZvKSBcCisJKCgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwMDBmZmZmKSA8PCAxNikgfCAoKGluZm8pLT5saW1pdCAmIDB4MGZmZmYpKQorCisvKiBEb24ndCBhbGxvdyBzZXR0aW5nIG9mIHRoZSBsbSBiaXQuIEl0IGlzIHVzZWxlc3MgYW55d2F5cyBiZWNhdXNlCisgKiA2NGJpdCBzeXN0ZW0gY2FsbHMgcmVxdWlyZSBfX1VTRVJfQ1MuICovCisjZGVmaW5lIExEVF9lbnRyeV9iKGluZm8pIFwKKwkoKChpbmZvKS0+YmFzZV9hZGRyICYgMHhmZjAwMDAwMCkgfCBcCisJKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDBmZjAwMDApID4+IDE2KSB8IFwKKwkoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwgXAorCSgoKGluZm8pLT5yZWFkX2V4ZWNfb25seSBeIDEpIDw8IDkpIHwgXAorCSgoaW5mbyktPmNvbnRlbnRzIDw8IDEwKSB8IFwKKwkoKChpbmZvKS0+c2VnX25vdF9wcmVzZW50IF4gMSkgPDwgMTUpIHwgXAorCSgoaW5mbyktPnNlZ18zMmJpdCA8PCAyMikgfCBcCisJKChpbmZvKS0+bGltaXRfaW5fcGFnZXMgPDwgMjMpIHwgXAorCSgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwgXAorCS8qICgoaW5mbyktPmxtIDw8IDIxKSB8ICovIFwKKwkweDcwMDApCisKKyNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChcCisJKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJiBcCisJKGluZm8pLT5saW1pdAkJPT0gMAkmJiBcCisJKGluZm8pLT5jb250ZW50cwk9PSAwCSYmIFwKKwkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYgXAorCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYgXAorCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJiBcCisJKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJiBcCisJKGluZm8pLT51c2VhYmxlCQk9PSAwCSYmIFwKKwkoaW5mbyktPmxtICAgICAgICAgICAgICA9PSAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmggYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9rZXJuZWwtb2Zmc2V0cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9rZXJuZWwtb2Zmc2V0cy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9wdHJhY2UuaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYmE1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9wdHJhY2UuaApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19TWVNERVBfWDg2XzY0X1BUUkFDRV9ICisjZGVmaW5lIF9fU1lTREVQX1g4Nl82NF9QVFJBQ0VfSAorCisjaW5jbHVkZSAidXNlcl9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCisKKyNkZWZpbmUgTUFYX1JFR19PRkZTRVQgKFVNX0ZSQU1FX1NJWkUpCisjZGVmaW5lIE1BWF9SRUdfTlIgKChNQVhfUkVHX09GRlNFVCkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKyNpbmNsdWRlICJza2FzX3B0cmVncy5oIgorCisjZGVmaW5lIFJFR1NfSVAocikgKChyKVtIT1NUX0lQXSkKKyNkZWZpbmUgUkVHU19TUChyKSAoKHIpW0hPU1RfU1BdKQorCisjZGVmaW5lIFJFR1NfUkJYKHIpICgocilbSE9TVF9SQlhdKQorI2RlZmluZSBSRUdTX1JDWChyKSAoKHIpW0hPU1RfUkNYXSkKKyNkZWZpbmUgUkVHU19SRFgocikgKChyKVtIT1NUX1JEWF0pCisjZGVmaW5lIFJFR1NfUlNJKHIpICgocilbSE9TVF9SU0ldKQorI2RlZmluZSBSRUdTX1JESShyKSAoKHIpW0hPU1RfUkRJXSkKKyNkZWZpbmUgUkVHU19SQlAocikgKChyKVtIT1NUX1JCUF0pCisjZGVmaW5lIFJFR1NfUkFYKHIpICgocilbSE9TVF9SQVhdKQorI2RlZmluZSBSRUdTX1I4KHIpICgocilbSE9TVF9SOF0pCisjZGVmaW5lIFJFR1NfUjkocikgKChyKVtIT1NUX1I5XSkKKyNkZWZpbmUgUkVHU19SMTAocikgKChyKVtIT1NUX1IxMF0pCisjZGVmaW5lIFJFR1NfUjExKHIpICgocilbSE9TVF9SMTFdKQorI2RlZmluZSBSRUdTX1IxMihyKSAoKHIpW0hPU1RfUjEyXSkKKyNkZWZpbmUgUkVHU19SMTMocikgKChyKVtIT1NUX1IxM10pCisjZGVmaW5lIFJFR1NfUjE0KHIpICgocilbSE9TVF9SMTRdKQorI2RlZmluZSBSRUdTX1IxNShyKSAoKHIpW0hPU1RfUjE1XSkKKyNkZWZpbmUgUkVHU19DUyhyKSAoKHIpW0hPU1RfQ1NdKQorI2RlZmluZSBSRUdTX0VGTEFHUyhyKSAoKHIpW0hPU1RfRUZMQUdTXSkKKyNkZWZpbmUgUkVHU19TUyhyKSAoKHIpW0hPU1RfU1NdKQorCisjZGVmaW5lIEhPU1RfRlNfQkFTRSAyMQorI2RlZmluZSBIT1NUX0dTX0JBU0UgMjIKKyNkZWZpbmUgSE9TVF9EUyAyMworI2RlZmluZSBIT1NUX0VTIDI0CisjZGVmaW5lIEhPU1RfRlMgMjUKKyNkZWZpbmUgSE9TVF9HUyAyNgorCisvKiBBbHNvIGRlZmluZWQgaW4gYXNtL3B0cmFjZS14ODZfNjQuaCwgYnV0IG5vdCBpbiBsaWJjIGhlYWRlcnMuICBTbywgdGhlc2UKKyAqIGFyZSBhbHJlYWR5IGRlZmluZWQgZm9yIGtlcm5lbCBjb2RlLCBidXQgbm90IGZvciB1c2Vyc3BhY2UgY29kZS4KKyAqLworI2lmbmRlZiBGU19CQVNFCisvKiBUaGVzZSBhcmVuJ3QgZGVmaW5lZCBpbiBwdHJhY2UuaCwgYnV0IGV4aXN0IGluIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LAorICogd2hpY2ggaXMgd2hhdCB4ODZfNjQgcHRyYWNlIGFjdHVhbGx5IHVzZXMuCisgKi8KKyNkZWZpbmUgRlNfQkFTRSAoSE9TVF9GU19CQVNFICogc2l6ZW9mKGxvbmcpKQorI2RlZmluZSBHU19CQVNFIChIT1NUX0dTX0JBU0UgKiBzaXplb2YobG9uZykpCisjZGVmaW5lIERTIChIT1NUX0RTICogc2l6ZW9mKGxvbmcpKQorI2RlZmluZSBFUyAoSE9TVF9FUyAqIHNpemVvZihsb25nKSkKKyNkZWZpbmUgRlMgKEhPU1RfRlMgKiBzaXplb2YobG9uZykpCisjZGVmaW5lIEdTIChIT1NUX0dTICogc2l6ZW9mKGxvbmcpKQorI2VuZGlmCisKKyNkZWZpbmUgUkVHU19GU19CQVNFKHIpICgocilbSE9TVF9GU19CQVNFXSkKKyNkZWZpbmUgUkVHU19HU19CQVNFKHIpICgocilbSE9TVF9HU19CQVNFXSkKKyNkZWZpbmUgUkVHU19EUyhyKSAoKHIpW0hPU1RfRFNdKQorI2RlZmluZSBSRUdTX0VTKHIpICgocilbSE9TVF9FU10pCisjZGVmaW5lIFJFR1NfRlMocikgKChyKVtIT1NUX0ZTXSkKKyNkZWZpbmUgUkVHU19HUyhyKSAoKHIpW0hPU1RfR1NdKQorCisjZGVmaW5lIFJFR1NfT1JJR19SQVgocikgKChyKVtIT1NUX09SSUdfUkFYXSkKKworI2RlZmluZSBSRUdTX1NFVF9TWVNDQUxMX1JFVFVSTihyLCByZXMpIFJFR1NfUkFYKHIpID0gKHJlcykKKworI2RlZmluZSBSRUdTX1JFU1RBUlRfU1lTQ0FMTChyKSBJUF9SRVNUQVJUX1NZU0NBTEwoUkVHU19JUChyKSkKKworI2RlZmluZSBSRUdTX1NFR1ZfSVNfRklYQUJMRShyKSBTRUdWX0lTX0ZJWEFCTEUoKHIpLT50cmFwX3R5cGUpCisKKyNkZWZpbmUgUkVHU19GQVVMVF9BRERSKHIpICgociktPmZhdWx0X2FkZHIpCisKKyNkZWZpbmUgUkVHU19GQVVMVF9XUklURShyKSBGQVVMVF9XUklURSgociktPmZhdWx0X3R5cGUpCisKKyNkZWZpbmUgUkVHU19UUkFQKHIpICgociktPnRyYXBfdHlwZSkKKworI2RlZmluZSBSRUdTX0VSUihyKSAoKHIpLT5mYXVsdF90eXBlKQorCitzdHJ1Y3QgdW1sX3B0X3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgZ3BbTUFYX1JFR19OUl07CisJc3RydWN0IGZhdWx0aW5mbyBmYXVsdGluZm87CisJbG9uZyBzeXNjYWxsOworCWludCBpc191c2VyOworfTsKKworI2RlZmluZSBFTVBUWV9VTUxfUFRfUkVHUyB7IH0KKworI2RlZmluZSBVUFRfUkJYKHIpIFJFR1NfUkJYKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9SQ1gocikgUkVHU19SQ1goKHIpLT5ncCkKKyNkZWZpbmUgVVBUX1JEWChyKSBSRUdTX1JEWCgociktPmdwKQorI2RlZmluZSBVUFRfUlNJKHIpIFJFR1NfUlNJKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9SREkocikgUkVHU19SREkoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX1JCUChyKSBSRUdTX1JCUCgociktPmdwKQorI2RlZmluZSBVUFRfUkFYKHIpIFJFR1NfUkFYKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9SOChyKSBSRUdTX1I4KChyKS0+Z3ApCisjZGVmaW5lIFVQVF9SOShyKSBSRUdTX1I5KChyKS0+Z3ApCisjZGVmaW5lIFVQVF9SMTAocikgUkVHU19SMTAoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX1IxMShyKSBSRUdTX1IxMSgociktPmdwKQorI2RlZmluZSBVUFRfUjEyKHIpIFJFR1NfUjEyKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9SMTMocikgUkVHU19SMTMoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX1IxNChyKSBSRUdTX1IxNCgociktPmdwKQorI2RlZmluZSBVUFRfUjE1KHIpIFJFR1NfUjE1KChyKS0+Z3ApCisjZGVmaW5lIFVQVF9DUyhyKSBSRUdTX0NTKChyKS0+Z3ApCisjZGVmaW5lIFVQVF9GU19CQVNFKHIpIFJFR1NfRlNfQkFTRSgociktPmdwKQorI2RlZmluZSBVUFRfRlMocikgUkVHU19GUygociktPmdwKQorI2RlZmluZSBVUFRfR1NfQkFTRShyKSBSRUdTX0dTX0JBU0UoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX0dTKHIpIFJFR1NfR1MoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX0RTKHIpIFJFR1NfRFMoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX0VTKHIpIFJFR1NfRVMoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX0NTKHIpIFJFR1NfQ1MoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX1NTKHIpIFJFR1NfU1MoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX09SSUdfUkFYKHIpIFJFR1NfT1JJR19SQVgoKHIpLT5ncCkKKworI2RlZmluZSBVUFRfSVAocikgUkVHU19JUCgociktPmdwKQorI2RlZmluZSBVUFRfU1AocikgUkVHU19TUCgociktPmdwKQorCisjZGVmaW5lIFVQVF9FRkxBR1MocikgUkVHU19FRkxBR1MoKHIpLT5ncCkKKyNkZWZpbmUgVVBUX1NZU0NBTExfTlIocikgKChyKS0+c3lzY2FsbCkKKyNkZWZpbmUgVVBUX1NZU0NBTExfUkVUKHIpIFVQVF9SQVgocikKKworZXh0ZXJuIGludCB1c2VyX2NvbnRleHQodW5zaWduZWQgbG9uZyBzcCk7CisKKyNkZWZpbmUgVVBUX0lTX1VTRVIocikgKChyKS0+aXNfdXNlcikKKworI2RlZmluZSBVUFRfU1lTQ0FMTF9BUkcxKHIpIFVQVF9SREkocikKKyNkZWZpbmUgVVBUX1NZU0NBTExfQVJHMihyKSBVUFRfUlNJKHIpCisjZGVmaW5lIFVQVF9TWVNDQUxMX0FSRzMocikgVVBUX1JEWChyKQorI2RlZmluZSBVUFRfU1lTQ0FMTF9BUkc0KHIpIFVQVF9SMTAocikKKyNkZWZpbmUgVVBUX1NZU0NBTExfQVJHNShyKSBVUFRfUjgocikKKyNkZWZpbmUgVVBUX1NZU0NBTExfQVJHNihyKSBVUFRfUjkocikKKworc3RydWN0IHN5c2NhbGxfYXJncyB7CisJdW5zaWduZWQgbG9uZyBhcmdzWzZdOworfTsKKworI2RlZmluZSBTWVNDQUxMX0FSR1MocikgKChzdHJ1Y3Qgc3lzY2FsbF9hcmdzKSBcCisJCQkgeyAuYXJncyA9IHsgVVBUX1NZU0NBTExfQVJHMShyKSwJIFwKKwkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzIociksCSBcCisJCQkJICAgICBVUFRfU1lTQ0FMTF9BUkczKHIpLAkgXAorCQkJCSAgICAgVVBUX1NZU0NBTExfQVJHNChyKSwJIFwKKwkJCQkgICAgIFVQVF9TWVNDQUxMX0FSRzUociksCSBcCisJCQkJICAgICBVUFRfU1lTQ0FMTF9BUkc2KHIpIH0gfSApCisKKyNkZWZpbmUgVVBUX1JFRyhyZWdzLCByZWcpIFwKKwkoeyAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOwkJXAorCQlzd2l0Y2gocmVnKXsJCQkJCQlcCisJCWNhc2UgUjg6IHZhbCA9IFVQVF9SOChyZWdzKTsgYnJlYWs7CQkJXAorCQljYXNlIFI5OiB2YWwgPSBVUFRfUjkocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBSMTA6IHZhbCA9IFVQVF9SMTAocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBSMTE6IHZhbCA9IFVQVF9SMTEocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBSMTI6IHZhbCA9IFVQVF9SMTIocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBSMTM6IHZhbCA9IFVQVF9SMTMocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBSMTQ6IHZhbCA9IFVQVF9SMTQocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBSMTU6IHZhbCA9IFVQVF9SMTUocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBSSVA6IHZhbCA9IFVQVF9JUChyZWdzKTsgYnJlYWs7CQkJXAorCQljYXNlIFJTUDogdmFsID0gVVBUX1NQKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgUkFYOiB2YWwgPSBVUFRfUkFYKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgUkJYOiB2YWwgPSBVUFRfUkJYKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgUkNYOiB2YWwgPSBVUFRfUkNYKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgUkRYOiB2YWwgPSBVUFRfUkRYKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgUlNJOiB2YWwgPSBVUFRfUlNJKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgUkRJOiB2YWwgPSBVUFRfUkRJKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgUkJQOiB2YWwgPSBVUFRfUkJQKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgT1JJR19SQVg6IHZhbCA9IFVQVF9PUklHX1JBWChyZWdzKTsgYnJlYWs7CQlcCisJCWNhc2UgQ1M6IHZhbCA9IFVQVF9DUyhyZWdzKTsgYnJlYWs7CQkJXAorCQljYXNlIFNTOiB2YWwgPSBVUFRfU1MocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBGU19CQVNFOiB2YWwgPSBVUFRfRlNfQkFTRShyZWdzKTsgYnJlYWs7CQlcCisJCWNhc2UgR1NfQkFTRTogdmFsID0gVVBUX0dTX0JBU0UocmVncyk7IGJyZWFrOwkJXAorCQljYXNlIERTOiB2YWwgPSBVUFRfRFMocmVncyk7IGJyZWFrOwkJCVwKKwkJY2FzZSBFUzogdmFsID0gVVBUX0VTKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgRlMgOiB2YWwgPSBVUFRfRlMgKHJlZ3MpOyBicmVhazsJCQlcCisJCWNhc2UgR1M6IHZhbCA9IFVQVF9HUyhyZWdzKTsgYnJlYWs7CQkJXAorCQljYXNlIEVGTEFHUzogdmFsID0gVVBUX0VGTEFHUyhyZWdzKTsgYnJlYWs7CQlcCisJCWRlZmF1bHQgOgkJCQkJCVwKKwkJCXBhbmljKCJCYWQgcmVnaXN0ZXIgaW4gVVBUX1JFRyA6ICVkXG4iLCByZWcpOwlcCisJCQl2YWwgPSAtMTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXZhbDsJCQkJCQkJXAorCX0pCisKKworI2RlZmluZSBVUFRfU0VUKHJlZ3MsIHJlZywgdmFsKSBcCisJKHsgICAgICB1bnNpZ25lZCBsb25nIF9fdXB0X3ZhbCA9IHZhbDsJXAorCQlzd2l0Y2gocmVnKXsJCQkJCQlcCisJCWNhc2UgUjg6IFVQVF9SOChyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgUjk6IFVQVF9SOShyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgUjEwOiBVUFRfUjEwKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKKwkJY2FzZSBSMTE6IFVQVF9SMTEocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAorCQljYXNlIFIxMjogVVBUX1IxMihyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgUjEzOiBVUFRfUjEzKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKKwkJY2FzZSBSMTQ6IFVQVF9SMTQocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAorCQljYXNlIFIxNTogVVBUX1IxNShyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgUklQOiBVUFRfSVAocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAorCQljYXNlIFJTUDogVVBUX1NQKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKKwkJY2FzZSBSQVg6IFVQVF9SQVgocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAorCQljYXNlIFJCWDogVVBUX1JCWChyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgUkNYOiBVUFRfUkNYKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKKwkJY2FzZSBSRFg6IFVQVF9SRFgocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAorCQljYXNlIFJTSTogVVBUX1JTSShyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgUkRJOiBVUFRfUkRJKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJCVwKKwkJY2FzZSBSQlA6IFVQVF9SQlAocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwkJXAorCQljYXNlIE9SSUdfUkFYOiBVUFRfT1JJR19SQVgocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwlcCisJCWNhc2UgQ1M6IFVQVF9DUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgU1M6IFVQVF9TUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgRlNfQkFTRTogVVBUX0ZTX0JBU0UocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwlcCisJCWNhc2UgR1NfQkFTRTogVVBUX0dTX0JBU0UocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOwlcCisJCWNhc2UgRFM6IFVQVF9EUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgRVM6IFVQVF9FUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgRlM6IFVQVF9GUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgR1M6IFVQVF9HUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7CQlcCisJCWNhc2UgRUZMQUdTOiBVUFRfRUZMQUdTKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsJXAorCQlkZWZhdWx0IDoJCQkJCQlcCisJCQlwYW5pYygiQmFkIHJlZ2lzdGVyIGluIFVQVF9TRVQgOiAlZFxuIiwgcmVnKTsJXAorCQkJYnJlYWs7CQkJCQkJXAorCQl9CQkJCQkJCVwKKwkJX191cHRfdmFsOwkJCQkJCVwKKwl9KQorCisjZGVmaW5lIFVQVF9TRVRfU1lTQ0FMTF9SRVRVUk4ociwgcmVzKSBcCisJUkVHU19TRVRfU1lTQ0FMTF9SRVRVUk4oKHIpLT5yZWdzLCAocmVzKSkKKworI2RlZmluZSBVUFRfUkVTVEFSVF9TWVNDQUxMKHIpIFJFR1NfUkVTVEFSVF9TWVNDQUxMKChyKS0+Z3ApCisKKyNkZWZpbmUgVVBUX1NFR1ZfSVNfRklYQUJMRShyKSBSRUdTX1NFR1ZfSVNfRklYQUJMRSgmci0+c2thcykKKworI2RlZmluZSBVUFRfRkFVTFRJTkZPKHIpICgmKHIpLT5mYXVsdGluZm8pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2luaXRfcmVnaXN0ZXJzKGludCBwaWQpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlX3VzZXIuaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL3B0cmFjZV91c2VyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZV91c2VyLmgKcmVuYW1lIHRvIGFyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL3B0cmFjZV91c2VyLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NjLmggYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zYy5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zYy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zaWdjb250ZXh0LmggYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zaWdjb250ZXh0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NpZ2NvbnRleHQuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvc2lnY29udGV4dC5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9za2FzX3B0cmFjZS5oIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvc2thc19wdHJhY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc2thc19wdHJhY2UuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvc2thc19wdHJhY2UuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvc3R1Yi5oIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvc3R1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MzJhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zdHViLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fU1lTREVQX1NUVUJfSAorI2RlZmluZSBfX1NZU0RFUF9TVFVCX0gKKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5c2RlcC9wdHJhY2VfdXNlci5oPgorI2luY2x1ZGUgImFzLWxheW91dC5oIgorI2luY2x1ZGUgInN0dWItZGF0YS5oIgorI2luY2x1ZGUgImtlcm5fY29uc3RhbnRzLmgiCisKK2V4dGVybiB2b2lkIHN0dWJfc2Vndl9oYW5kbGVyKGludCBzaWcpOworZXh0ZXJuIHZvaWQgc3R1Yl9jbG9uZV9oYW5kbGVyKHZvaWQpOworCisjZGVmaW5lIFNUVUJfU1lTQ0FMTF9SRVQgUFRfSU5ERVgoUkFYKQorI2RlZmluZSBTVFVCX01NQVBfTlIgX19OUl9tbWFwCisjZGVmaW5lIE1NQVBfT0ZGU0VUKG8pIChvKQorCisjZGVmaW5lIF9fc3lzY2FsbF9jbG9iYmVyICJyMTEiLCJyY3giLCJtZW1vcnkiCisjZGVmaW5lIF9fc3lzY2FsbCAic3lzY2FsbCIKKworc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDAobG9uZyBzeXNjYWxsKQoreworCWxvbmcgcmV0OworCisJX19hc21fXyB2b2xhdGlsZSAoX19zeXNjYWxsCisJCTogIj1hIiAocmV0KQorCQk6ICIwIiAoc3lzY2FsbCkgOiBfX3N5c2NhbGxfY2xvYmJlciApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDIobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMikKK3sKKwlsb25nIHJldDsKKworCV9fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbAorCQk6ICI9YSIgKHJldCkKKwkJOiAiMCIgKHN5c2NhbGwpLCAiRCIgKGFyZzEpLCAiUyIgKGFyZzIpIDogX19zeXNjYWxsX2Nsb2JiZXIgKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGwzKGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMykKK3sKKwlsb25nIHJldDsKKworCV9fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbAorCQk6ICI9YSIgKHJldCkKKwkJOiAiMCIgKHN5c2NhbGwpLCAiRCIgKGFyZzEpLCAiUyIgKGFyZzIpLCAiZCIgKGFyZzMpCisJCTogX19zeXNjYWxsX2Nsb2JiZXIgKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGw0KGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMywKKwkJCQkgbG9uZyBhcmc0KQoreworCWxvbmcgcmV0OworCisJX19hc21fXyB2b2xhdGlsZSAoIm1vdnEgJTUsJSVyMTAgOyAiIF9fc3lzY2FsbAorCQk6ICI9YSIgKHJldCkKKwkJOiAiMCIgKHN5c2NhbGwpLCAiRCIgKGFyZzEpLCAiUyIgKGFyZzIpLCAiZCIgKGFyZzMpLAorCQkgICJnIiAoYXJnNCkKKwkJOiBfX3N5c2NhbGxfY2xvYmJlciwgInIxMCIgKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGw1KGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMywKKwkJCQkgbG9uZyBhcmc0LCBsb25nIGFyZzUpCit7CisJbG9uZyByZXQ7CisKKwlfX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IG1vdnEgJTYsJSVyOCA7ICIgX19zeXNjYWxsCisJCTogIj1hIiAocmV0KQorCQk6ICIwIiAoc3lzY2FsbCksICJEIiAoYXJnMSksICJTIiAoYXJnMiksICJkIiAoYXJnMyksCisJCSAgImciIChhcmc0KSwgImciIChhcmc1KQorCQk6IF9fc3lzY2FsbF9jbG9iYmVyLCAicjEwIiwgInI4IiApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYXBfbXlzZWxmKHZvaWQpCit7CisJX19hc20oImludDMiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbWFwX3N0YWNrKGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZxICU0LCUlcjEwIDsgbW92cSAlNSwlJXI4IDsgIgorCQkJICAibW92cSAlNiwgJSVyOTsgIiBfX3N5c2NhbGwgIjsgbW92cSAlNywgJSVyYnggOyAiCisJCQkgICJtb3ZxICUlcmF4LCAoJSVyYngpIjoKKwkJCSAgOiAiYSIgKFNUVUJfTU1BUF9OUiksICJEIiAoU1RVQl9EQVRBKSwKKwkJCSAgICAiUyIgKFVNX0tFUk5fUEFHRV9TSVpFKSwKKwkJCSAgICAiZCIgKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnIiAoTUFQX0ZJWEVEIHwgTUFQX1NIQVJFRCksICJnIiAoZmQpLAorCQkJICAgICJnIiAob2Zmc2V0KSwKKwkJCSAgICAiaSIgKCYoKHN0cnVjdCBzdHViX2RhdGEgKikgU1RVQl9EQVRBKS0+ZXJyKQorCQkJICA6IF9fc3lzY2FsbF9jbG9iYmVyLCAicjEwIiwgInI4IiwgInI5IiApOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3N5c2NhbGxzLmggYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zeXNjYWxscy5oCnJlbmFtZSB0byBhcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zeXN0ZW0uaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjkzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC9zeXN0ZW0uaApAQCAtMCwwICsxLDEzMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TWVNURU1fSF8KKyNkZWZpbmUgX0FTTV9YODZfU1lTVEVNX0hfCisKKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtL25vcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKKy8qIGVudHJpZXMgaW4gQVJDSF9ETElORk86ICovCisjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisjIGRlZmluZSBBVF9WRUNUT1JfU0laRV9BUkNIIDIKKyNlbHNlCisjIGRlZmluZSBBVF9WRUNUT1JfU0laRV9BUkNIIDEKKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApOworCit2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKTsKKworLyoKKyAqIEZvcmNlIHN0cmljdCBDUFUgb3JkZXJpbmcuCisgKiBBbmQgeWVzLCB0aGlzIGlzIHJlcXVpcmVkIG9uIFVQIHRvbyB3aGVuIHdlJ3JlIHRhbGtpbmcKKyAqIHRvIGRldmljZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogU29tZSBub24tSW50ZWwgY2xvbmVzIHN1cHBvcnQgb3V0IG9mIG9yZGVyIHN0b3JlLiB3bWIoKSBjZWFzZXMgdG8gYmUgYQorICogbm9wIGZvciB0aGVzZS4KKyAqLworI2RlZmluZSBtYigpIGFsdGVybmF0aXZlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiwgIm1mZW5jZSIsIFg4Nl9GRUFUVVJFX1hNTTIpCisjZGVmaW5lIHJtYigpIGFsdGVybmF0aXZlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiwgImxmZW5jZSIsIFg4Nl9GRUFUVVJFX1hNTTIpCisjZGVmaW5lIHdtYigpIGFsdGVybmF0aXZlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiwgInNmZW5jZSIsIFg4Nl9GRUFUVVJFX1hNTSkKKyNlbHNlCisjZGVmaW5lIG1iKCkgCWFzbSB2b2xhdGlsZSgibWZlbmNlIjo6OiJtZW1vcnkiKQorI2RlZmluZSBybWIoKQlhc20gdm9sYXRpbGUoImxmZW5jZSI6OjoibWVtb3J5IikKKyNkZWZpbmUgd21iKCkJYXNtIHZvbGF0aWxlKCJzZmVuY2UiIDo6OiAibWVtb3J5IikKKyNlbmRpZgorCisvKioKKyAqIHJlYWRfYmFycmllcl9kZXBlbmRzIC0gRmx1c2ggYWxsIHBlbmRpbmcgcmVhZHMgdGhhdCBzdWJzZXF1ZW50cyByZWFkcworICogZGVwZW5kIG9uLgorICoKKyAqIE5vIGRhdGEtZGVwZW5kZW50IHJlYWRzIGZyb20gbWVtb3J5LWxpa2UgcmVnaW9ucyBhcmUgZXZlciByZW9yZGVyZWQKKyAqIG92ZXIgdGhpcyBiYXJyaWVyLiAgQWxsIHJlYWRzIHByZWNlZGluZyB0aGlzIHByaW1pdGl2ZSBhcmUgZ3VhcmFudGVlZAorICogdG8gYWNjZXNzIG1lbW9yeSAoYnV0IG5vdCBuZWNlc3NhcmlseSBvdGhlciBDUFVzJyBjYWNoZXMpIGJlZm9yZSBhbnkKKyAqIHJlYWRzIGZvbGxvd2luZyB0aGlzIHByaW1pdGl2ZSB0aGF0IGRlcGVuZCBvbiB0aGUgZGF0YSByZXR1cm4gYnkKKyAqIGFueSBvZiB0aGUgcHJlY2VkaW5nIHJlYWRzLiAgVGhpcyBwcmltaXRpdmUgaXMgbXVjaCBsaWdodGVyIHdlaWdodCB0aGFuCisgKiBybWIoKSBvbiBtb3N0IENQVXMsIGFuZCBpcyBuZXZlciBoZWF2aWVyIHdlaWdodCB0aGFuIGlzCisgKiBybWIoKS4KKyAqCisgKiBUaGVzZSBvcmRlcmluZyBjb25zdHJhaW50cyBhcmUgcmVzcGVjdGVkIGJ5IGJvdGggdGhlIGxvY2FsIENQVQorICogYW5kIHRoZSBjb21waWxlci4KKyAqCisgKiBPcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBieSBhbnl0aGluZyBvdGhlciB0aGFuIHRoZXNlIHByaW1pdGl2ZXMsCisgKiBub3QgZXZlbiBieSBkYXRhIGRlcGVuZGVuY2llcy4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAqIG1lbW9yeV9iYXJyaWVyKCkgZm9yIGV4YW1wbGVzIGFuZCBVUkxzIHRvIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSB3b3VsZCBmb3JjZSBvcmRlcmluZyAodGhlIGluaXRpYWwKKyAqIHZhbHVlIG9mICJhIiBpcyB6ZXJvLCAiYiIgaXMgb25lLCBhbmQgInAiIGlzICImYSIpOgorICoKKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqCUNQVSAwCQkJCUNQVSAxCisgKgorICoJYiA9IDI7CisgKgltZW1vcnlfYmFycmllcigpOworICoJcCA9ICZiOwkJCQlxID0gcDsKKyAqCQkJCQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOworICoJCQkJCWQgPSAqcTsKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKgorICogYmVjYXVzZSB0aGUgcmVhZCBvZiAiKnEiIGRlcGVuZHMgb24gdGhlIHJlYWQgb2YgInAiIGFuZCB0aGVzZQorICogdHdvIHJlYWRzIGFyZSBzZXBhcmF0ZWQgYnkgYSByZWFkX2JhcnJpZXJfZGVwZW5kcygpLiAgSG93ZXZlciwKKyAqIHRoZSBmb2xsb3dpbmcgY29kZSwgd2l0aCB0aGUgc2FtZSBpbml0aWFsIHZhbHVlcyBmb3IgImEiIGFuZCAiYiI6CisgKgorICogPHByb2dyYW1saXN0aW5nPgorICoJQ1BVIDAJCQkJQ1BVIDEKKyAqCisgKglhID0gMjsKKyAqCW1lbW9yeV9iYXJyaWVyKCk7CisgKgliID0gMzsJCQkJeSA9IGI7CisgKgkJCQkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKyAqCQkJCQl4ID0gYTsKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKgorICogZG9lcyBub3QgZW5mb3JjZSBvcmRlcmluZywgc2luY2UgdGhlcmUgaXMgbm8gZGF0YSBkZXBlbmRlbmN5IGJldHdlZW4KKyAqIHRoZSByZWFkIG9mICJhIiBhbmQgdGhlIHJlYWQgb2YgImIiLiAgVGhlcmVmb3JlLCBvbiBzb21lIENQVXMsIHN1Y2gKKyAqIGFzIEFscGhhLCAieSIgY291bGQgYmUgc2V0IHRvIDMgYW5kICJ4IiB0byAwLiAgVXNlIHJtYigpCisgKiBpbiBjYXNlcyBsaWtlIHRoaXMgd2hlcmUgdGhlcmUgYXJlIG5vIGRhdGEgZGVwZW5kZW5jaWVzLgorICoqLworCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjaWZkZWYgQ09ORklHX1g4Nl9QUFJPX0ZFTkNFCisjIGRlZmluZSBzbXBfcm1iKCkJcm1iKCkKKyNlbHNlCisjIGRlZmluZSBzbXBfcm1iKCkJYmFycmllcigpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X09PU1RPUkUKKyMgZGVmaW5lIHNtcF93bWIoKSAJd21iKCkKKyNlbHNlCisjIGRlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZW5kaWYKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyAodm9pZCl4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIHNtcF9tYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcm1iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF93bWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyB2YXIgPSB2YWx1ZTsgYmFycmllcigpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBTdG9wIFJEVFNDIHNwZWN1bGF0aW9uLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHlvdSBuZWVkIHRvIHVzZSBSRFRTQworICogKG9yIGdldF9jeWNsZXMgb3IgdnJlYWQgdGhhdCBwb3NzaWJseSBhY2Nlc3NlcyB0aGUgVFNDKSBpbiBhIGRlZmluZWQKKyAqIGNvZGUgcmVnaW9uLgorICoKKyAqIChDb3VsZCB1c2UgYW4gYWx0ZXJuYXRpdmUgdGhyZWUgd2F5IGZvciB0aGlzIGlmIHRoZXJlIHdhcyBvbmUuKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmR0c2NfYmFycmllcih2b2lkKQoreworCWFsdGVybmF0aXZlKEFTTV9OT1AzLCAibWZlbmNlIiwgWDg2X0ZFQVRVUkVfTUZFTkNFX1JEVFNDKTsKKwlhbHRlcm5hdGl2ZShBU01fTk9QMywgImxmZW5jZSIsIFg4Nl9GRUFUVVJFX0xGRU5DRV9SRFRTQyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvdGxzLmggYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC90bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGMwMDBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvdGxzLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfU1lTREVQX1RMU19ICisjZGVmaW5lIF9TWVNERVBfVExTX0gKKworIyBpZm5kZWYgX19LRVJORUxfXworCisvKiBDaGFuZ2UgbmFtZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0aGUgb3JpZ2luYWwgb25lIGZyb20gPGFzbS9sZHQuaD4sIHdoaWNoCisgKiBtYXkgYmUgbmFtZWQgdXNlcl9kZXNjIChidXQgaW4gMi40IGFuZCBpbiBoZWFkZXIgbWF0Y2hpbmcgaXRzIEFQSSB3YXMgbmFtZWQKKyAqIG1vZGlmeV9sZHRfbGR0X3MpLiAqLworCit0eXBlZGVmIHN0cnVjdCB1bV9kdXBfdXNlcl9kZXNjIHsKKwl1bnNpZ25lZCBpbnQgIGVudHJ5X251bWJlcjsKKwl1bnNpZ25lZCBpbnQgIGJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgIGxpbWl0OworCXVuc2lnbmVkIGludCAgc2VnXzMyYml0OjE7CisJdW5zaWduZWQgaW50ICBjb250ZW50czoyOworCXVuc2lnbmVkIGludCAgcmVhZF9leGVjX29ubHk6MTsKKwl1bnNpZ25lZCBpbnQgIGxpbWl0X2luX3BhZ2VzOjE7CisJdW5zaWduZWQgaW50ICBzZWdfbm90X3ByZXNlbnQ6MTsKKwl1bnNpZ25lZCBpbnQgIHVzZWFibGU6MTsKKwl1bnNpZ25lZCBpbnQgIGxtOjE7Cit9IHVzZXJfZGVzY190OworCisjIGVsc2UgLyogX19LRVJORUxfXyAqLworCisjICBpbmNsdWRlIDxsZHQuaD4KK3R5cGVkZWYgc3RydWN0IHVzZXJfZGVzYyB1c2VyX2Rlc2NfdDsKKworIyBlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1NZU0RFUF9UTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdm0tZmxhZ3MteDg2XzY0LmggYi9hcmNoL3VtL3N5cy14ODZfNjQvc2hhcmVkL3N5c2RlcC92bS1mbGFncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS11bS92bS1mbGFncy14ODZfNjQuaApyZW5hbWUgdG8gYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvdm0tZmxhZ3MuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N0dWIuUyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zdHViLlMKaW5kZXggNTY4NzY4Ny4uNmQ5ZWRmOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3N0dWIuUworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3R1Yi5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgInVtbC1jb25maWcuaCIKICNpbmNsdWRlICJhcy1sYXlvdXQuaCIKIAogCS5nbG9ibCBzeXNjYWxsX3N0dWIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbF90YWJsZS5jCmluZGV4IDMyZjVmYmUuLmRkMjFkNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxfdGFibGUuYwpAQCAtNDEsMTIgKzQxLDEyIEBACiAjZGVmaW5lIHN0dWJfcnRfc2lncmV0dXJuIHN5c19ydF9zaWdyZXR1cm4KIAogI2RlZmluZSBfX1NZU0NBTEwobnIsIHN5bSkgZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzeW0odm9pZCkgOwotI3VuZGVmIEFTTV9YODZfX1VOSVNURF82NF9ICi0jaW5jbHVkZSA8YXNtLXg4Ni91bmlzdGRfNjQuaD4KKyN1bmRlZiBfQVNNX1g4Nl9VTklTVERfNjRfSAorI2luY2x1ZGUgIi4uLy4uL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCIKIAogI3VuZGVmIF9fU1lTQ0FMTAogI2RlZmluZSBfX1NZU0NBTEwobnIsIHN5bSkgWyBuciBdID0gc3ltLAotI3VuZGVmIEFTTV9YODZfX1VOSVNURF82NF9ICisjdW5kZWYgX0FTTV9YODZfVU5JU1REXzY0X0gKIAogdHlwZWRlZiB2b2lkICgqc3lzX2NhbGxfcHRyX3QpKHZvaWQpOwogCkBAIC02NCw3ICs2NCw3IEBACiAgKi8KIAogc3lzX2NhbGxfcHRyX3Qgc3lzX2NhbGxfdGFibGVbXSBfX2NhY2hlbGluZV9hbGlnbmVkID0gewotI2luY2x1ZGUgPGFzbS14ODYvdW5pc3RkXzY0Lmg+CisjaW5jbHVkZSAiLi4vLi4veDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oIgogfTsKIAogaW50IHN5c2NhbGxfdGFibGVfc2l6ZSA9IHNpemVvZihzeXNfY2FsbF90YWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCBiZDNjMmM1Li4zNTBiZWUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTI2LDYgKzI2LDcgQEAKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAJc2VsZWN0IEhBVkVfS1JFVFBST0JFUworCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVFJBQ0UKIAlzZWxlY3QgSEFWRV9LVk0gaWYgKChYODZfMzIgJiYgIVg4Nl9WT1lBR0VSICYmICFYODZfVklTV1MgJiYgIVg4Nl9OVU1BUSkgfHwgWDg2XzY0KQpAQCAtMTE1LDYgKzExNiw5IEBACiBjb25maWcgQVJDSF9IQVNfQ1BVX1JFTEFYCiAJZGVmX2Jvb2wgeQogCitjb25maWcgQVJDSF9IQVNfREVGQVVMVF9JRExFCisJZGVmX2Jvb2wgeQorCiBjb25maWcgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFCiAJZGVmX2Jvb2wgeQogCkBAIC0xOTMsNiArMTk3LDcgQEAKIGNvbmZpZyBLVElNRV9TQ0FMQVIKIAlkZWZfYm9vbCBYODZfMzIKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKQEAgLTEyNDEsMTQgKzEyNDYsNiBAQAogICAJcmVzdWx0YW50IGtlcm5lbCBzaG91bGQgY29udGludWUgdG8gYm9vdCBvbiBleGlzdGluZyBub24tRUZJCiAgIAlwbGF0Zm9ybXMuCiAKLWNvbmZpZyBJUlFCQUxBTkNFCi0JZGVmX2Jvb2wgeQotCXByb21wdCAiRW5hYmxlIGtlcm5lbCBpcnEgYmFsYW5jaW5nIgotCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUCAmJiBYODZfSU9fQVBJQwotCWhlbHAKLQkgIFRoZSBkZWZhdWx0IHllcyB3aWxsIGFsbG93IHRoZSBrZXJuZWwgdG8gZG8gaXJxIGxvYWQgYmFsYW5jaW5nLgotCSAgU2F5aW5nIG5vIHdpbGwga2VlcCB0aGUga2VybmVsIGZyb20gZG9pbmcgaXJxIGxvYWQgYmFsYW5jaW5nLgotCiBjb25maWcgU0VDQ09NUAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKQEAgLTE2NDEsNiArMTYzOCw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9jcHVpZGxlL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9pZGxlL0tjb25maWciCisKIGVuZG1lbnUKIAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IGY1NjMxZGEuLmQxYTQ3YWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC0xMTAsMTYgKzExMCwxNiBAQAogbWNvcmUteSAgOj0gYXJjaC94ODYvbWFjaC1kZWZhdWx0LwogCiAjIFZveWFnZXIgc3ViYXJjaCBzdXBwb3J0Ci1tZmxhZ3MtJChDT05GSUdfWDg2X1ZPWUFHRVIpCTo9IC1JaW5jbHVkZS9hc20teDg2L21hY2gtdm95YWdlcgorbWZsYWdzLSQoQ09ORklHX1g4Nl9WT1lBR0VSKQk6PSAtSWFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlcgogbWNvcmUtJChDT05GSUdfWDg2X1ZPWUFHRVIpCTo9IGFyY2gveDg2L21hY2gtdm95YWdlci8KIAogIyBnZW5lcmljIHN1YmFyY2hpdGVjdHVyZQotbWZsYWdzLSQoQ09ORklHX1g4Nl9HRU5FUklDQVJDSCk6PSAtSWluY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMKK21mbGFncy0kKENPTkZJR19YODZfR0VORVJJQ0FSQ0gpOj0gLUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMKIGZjb3JlLSQoQ09ORklHX1g4Nl9HRU5FUklDQVJDSCkJKz0gYXJjaC94ODYvbWFjaC1nZW5lcmljLwogbWNvcmUtJChDT05GSUdfWDg2X0dFTkVSSUNBUkNIKQk6PSBhcmNoL3g4Ni9tYWNoLWRlZmF1bHQvCiAKICMgZGVmYXVsdCBzdWJhcmNoIC5oIGZpbGVzCi1tZmxhZ3MteSArPSAtSWluY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQKK21mbGFncy15ICs9IC1JYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0CiAKICMgNjQgYml0IGRvZXMgbm90IHN1cHBvcnQgc3ViYXJjaCBzdXBwb3J0IC0gY2xlYXIgc3ViIGFyY2ggdmFyaWFibGVzCiBmY29yZS0kKENPTkZJR19YODZfNjQpICA6PQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggNTc4MGQzNi4uZGEwNjIyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKi8KICN1bmRlZiBDT05GSUdfUEFSQVZJUlQKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIEFTTV9YODZfX0RFU0NfSCAxCisjZGVmaW5lIF9BU01fWDg2X0RFU0NfSCAxCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tYmlvcy5jIGIvYXJjaC94ODYvYm9vdC92aWRlby1iaW9zLmMKaW5kZXggNDlmMjZhYS4uM2ZhOTc5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby1iaW9zLmMKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby1iaW9zLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlICJib290LmgiCiAjaW5jbHVkZSAidmlkZW8uaCIKIAotX192aWRlb2NhcmQgdmlkZW9fYmlvczsKK3N0YXRpYyBfX3ZpZGVvY2FyZCB2aWRlb19iaW9zOwogCiAvKiBTZXQgYSBjb252ZW50aW9uYWwgQklPUyBtb2RlICovCiBzdGF0aWMgaW50IHNldF9iaW9zX21vZGUodTggbW9kZSk7CkBAIC0xMTksNyArMTE5LDcgQEAKIAlyZXR1cm4gbm1vZGVzOwogfQogCi1fX3ZpZGVvY2FyZCB2aWRlb19iaW9zID0KK3N0YXRpYyBfX3ZpZGVvY2FyZCB2aWRlb19iaW9zID0KIHsKIAkuY2FyZF9uYW1lCT0gIkJJT1MiLAogCS5wcm9iZQkJPSBiaW9zX3Byb2JlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby12ZXNhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwppbmRleCA5OWIzMDc5Li43NTExNTg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwpAQCAtMjAsNyArMjAsNyBAQAogc3RhdGljIHN0cnVjdCB2ZXNhX2dlbmVyYWxfaW5mbyB2Z2luZm87CiBzdGF0aWMgc3RydWN0IHZlc2FfbW9kZV9pbmZvIHZtaW5mbzsKIAotX192aWRlb2NhcmQgdmlkZW9fdmVzYTsKK3N0YXRpYyBfX3ZpZGVvY2FyZCB2aWRlb192ZXNhOwogCiAjaWZuZGVmIF9XQUtFVVAKIHN0YXRpYyB2b2lkIHZlc2Ffc3RvcmVfbW9kZV9wYXJhbXNfZ3JhcGhpY3Modm9pZCk7CkBAIC0yOTMsNyArMjkzLDcgQEAKIAogI2VuZGlmIC8qIG5vdCBfV0FLRVVQICovCiAKLV9fdmlkZW9jYXJkIHZpZGVvX3Zlc2EgPQorc3RhdGljIF9fdmlkZW9jYXJkIHZpZGVvX3Zlc2EgPQogewogCS5jYXJkX25hbWUJPSAiVkVTQSIsCiAJLnByb2JlCQk9IHZlc2FfcHJvYmUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCA1MmQwMzU5Li4xM2I4Yzg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTI4Nyw3ICsyODcsNiBAQAogIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldAogQ09ORklHX1g4Nl9QQVQ9eQogQ09ORklHX0VGST15Ci0jIENPTkZJR19JUlFCQUxBTkNFIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L0tidWlsZCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL0tidWlsZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L0tidWlsZApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vS2J1aWxkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hLm91dC1jb3JlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hLm91dC1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4MjIyMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Eub3V0LWNvcmUuaApAQCAtMCwwICsxLDczIEBACisvKiBhLm91dCBjb3JlZHVtcCByZWdpc3RlciBkdW1wZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9BX09VVF9DT1JFX0gKKyNkZWZpbmUgX0FTTV9YODZfQV9PVVRfQ09SRV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCisjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KKworLyoKKyAqIGZpbGwgaW4gdGhlIHVzZXIgc3RydWN0dXJlIGZvciBhbiBhLm91dCBjb3JlIGR1bXAKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFvdXRfZHVtcF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyICpkdW1wKQoreworCXUxNiBnczsKKworLyogY2hhbmdlZCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgLSBzaG91bGQgaG9wZWZ1bGx5IHdvcmsgYmV0dGVyLiBsYnQgKi8KKwlkdW1wLT5tYWdpYyA9IENNQUdJQzsKKwlkdW1wLT5zdGFydF9jb2RlID0gMDsKKwlkdW1wLT5zdGFydF9zdGFjayA9IHJlZ3MtPnNwICYgfihQQUdFX1NJWkUgLSAxKTsKKwlkdW1wLT51X3RzaXplID0gKCh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPm1tLT5lbmRfY29kZSkgPj4gUEFHRV9TSElGVDsKKwlkdW1wLT51X2RzaXplID0gKCh1bnNpZ25lZCBsb25nKShjdXJyZW50LT5tbS0+YnJrICsgKFBBR0VfU0laRSAtIDEpKSkKKwkJCT4+IFBBR0VfU0hJRlQ7CisJZHVtcC0+dV9kc2l6ZSAtPSBkdW1wLT51X3RzaXplOworCWR1bXAtPnVfc3NpemUgPSAwOworCWR1bXAtPnVfZGVidWdyZWdbMF0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWcwOworCWR1bXAtPnVfZGVidWdyZWdbMV0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWcxOworCWR1bXAtPnVfZGVidWdyZWdbMl0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWcyOworCWR1bXAtPnVfZGVidWdyZWdbM10gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWczOworCWR1bXAtPnVfZGVidWdyZWdbNF0gPSAwOworCWR1bXAtPnVfZGVidWdyZWdbNV0gPSAwOworCWR1bXAtPnVfZGVidWdyZWdbNl0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWc2OworCWR1bXAtPnVfZGVidWdyZWdbN10gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWc3OworCisJaWYgKGR1bXAtPnN0YXJ0X3N0YWNrIDwgVEFTS19TSVpFKQorCQlkdW1wLT51X3NzaXplID0gKCh1bnNpZ25lZCBsb25nKShUQVNLX1NJWkUgLSBkdW1wLT5zdGFydF9zdGFjaykpCisJCQkJPj4gUEFHRV9TSElGVDsKKworCWR1bXAtPnJlZ3MuYnggPSByZWdzLT5ieDsKKwlkdW1wLT5yZWdzLmN4ID0gcmVncy0+Y3g7CisJZHVtcC0+cmVncy5keCA9IHJlZ3MtPmR4OworCWR1bXAtPnJlZ3Muc2kgPSByZWdzLT5zaTsKKwlkdW1wLT5yZWdzLmRpID0gcmVncy0+ZGk7CisJZHVtcC0+cmVncy5icCA9IHJlZ3MtPmJwOworCWR1bXAtPnJlZ3MuYXggPSByZWdzLT5heDsKKwlkdW1wLT5yZWdzLmRzID0gKHUxNilyZWdzLT5kczsKKwlkdW1wLT5yZWdzLmVzID0gKHUxNilyZWdzLT5lczsKKwlkdW1wLT5yZWdzLmZzID0gKHUxNilyZWdzLT5mczsKKwlzYXZlc2VnbWVudChncywgZ3MpOworCWR1bXAtPnJlZ3Mub3JpZ19heCA9IHJlZ3MtPm9yaWdfYXg7CisJZHVtcC0+cmVncy5pcCA9IHJlZ3MtPmlwOworCWR1bXAtPnJlZ3MuY3MgPSAodTE2KXJlZ3MtPmNzOworCWR1bXAtPnJlZ3MuZmxhZ3MgPSByZWdzLT5mbGFnczsKKwlkdW1wLT5yZWdzLnNwID0gcmVncy0+c3A7CisJZHVtcC0+cmVncy5zcyA9ICh1MTYpcmVncy0+c3M7CisKKwlkdW1wLT51X2ZwdmFsaWQgPSBkdW1wX2ZwdShyZWdzLCAmZHVtcC0+aTM4Nyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fWDg2X0FfT1VUX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4NGY5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Eub3V0LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BX09VVF9ICisjZGVmaW5lIF9BU01fWDg2X0FfT1VUX0gKKworc3RydWN0IGV4ZWMKK3sKKwl1bnNpZ25lZCBpbnQgYV9pbmZvOwkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisJdW5zaWduZWQgYV90ZXh0OwkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBhX2RhdGE7CS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvciBmaWxlLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGFfc3ltczsJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCisJdW5zaWduZWQgYV9lbnRyeTsJLyogc3RhcnQgYWRkcmVzcyAqLworCXVuc2lnbmVkIGFfdHJzaXplOwkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciB0ZXh0LCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGFfZHJzaXplOwkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLworfTsKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BX09VVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2NzZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtMCwwICsxLDE3OCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BQ1BJX0gKKyNkZWZpbmUgX0FTTV9YODZfQUNQSV9ICisKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdWwgRGllZmVuYmF1Z2ggPHBhdWwucy5kaWVmZW5iYXVnaEBpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisjaW5jbHVkZSA8YWNwaS9wZGNfaW50ZWwuaD4KKworI2luY2x1ZGUgPGFzbS9udW1hLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisKKyNkZWZpbmUgQ09NUElMRVJfREVQRU5ERU5UX0lOVDY0ICAgbG9uZyBsb25nCisjZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZworCisvKgorICogQ2FsbGluZyBjb252ZW50aW9uczoKKyAqCisgKiBBQ1BJX1NZU1RFTV9YRkFDRSAgICAgICAgLSBJbnRlcmZhY2VzIHRvIGhvc3QgT1MgKGhhbmRsZXJzLCB0aHJlYWRzKQorICogQUNQSV9FWFRFUk5BTF9YRkFDRSAgICAgIC0gRXh0ZXJuYWwgQUNQSSBpbnRlcmZhY2VzCisgKiBBQ1BJX0lOVEVSTkFMX1hGQUNFICAgICAgLSBJbnRlcm5hbCBBQ1BJIGludGVyZmFjZXMKKyAqIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFICAtIEludGVybmFsIHZhcmlhYmxlLXBhcmFtZXRlciBsaXN0IGludGVyZmFjZXMKKyAqLworI2RlZmluZSBBQ1BJX1NZU1RFTV9YRkFDRQorI2RlZmluZSBBQ1BJX0VYVEVSTkFMX1hGQUNFCisjZGVmaW5lIEFDUElfSU5URVJOQUxfWEZBQ0UKKyNkZWZpbmUgQUNQSV9JTlRFUk5BTF9WQVJfWEZBQ0UKKworLyogQXNtIG1hY3JvcyAqLworCisjZGVmaW5lIEFDUElfQVNNX01BQ1JPUworI2RlZmluZSBCUkVBS1BPSU5UMworI2RlZmluZSBBQ1BJX0RJU0FCTEVfSVJRUygpIGxvY2FsX2lycV9kaXNhYmxlKCkKKyNkZWZpbmUgQUNQSV9FTkFCTEVfSVJRUygpICBsb2NhbF9pcnFfZW5hYmxlKCkKKyNkZWZpbmUgQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKQl3YmludmQoKQorCitpbnQgX19hY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2sodW5zaWduZWQgaW50ICpsb2NrKTsKK2ludCBfX2FjcGlfcmVsZWFzZV9nbG9iYWxfbG9jayh1bnNpZ25lZCBpbnQgKmxvY2spOworCisjZGVmaW5lIEFDUElfQUNRVUlSRV9HTE9CQUxfTE9DSyhmYWNzLCBBY3EpIFwKKwkoKEFjcSkgPSBfX2FjcGlfYWNxdWlyZV9nbG9iYWxfbG9jaygmZmFjcy0+Z2xvYmFsX2xvY2spKQorCisjZGVmaW5lIEFDUElfUkVMRUFTRV9HTE9CQUxfTE9DSyhmYWNzLCBBY3EpIFwKKwkoKEFjcSkgPSBfX2FjcGlfcmVsZWFzZV9nbG9iYWxfbG9jaygmZmFjcy0+Z2xvYmFsX2xvY2spKQorCisvKgorICogTWF0aCBoZWxwZXIgYXNtIG1hY3JvcworICovCisjZGVmaW5lIEFDUElfRElWXzY0X0JZXzMyKG5faGksIG5fbG8sIGQzMiwgcTMyLCByMzIpIFwKKwlhc20oImRpdmwgJTI7IgkJCQkgICAgIFwKKwkgICAgOiAiPWEiKHEzMiksICI9ZCIocjMyKQkJICAgICBcCisJICAgIDogInIiKGQzMiksCQkJCSAgICAgXAorCSAgICAgIjAiKG5fbG8pLCAiMSIobl9oaSkpCisKKworI2RlZmluZSBBQ1BJX1NISUZUX1JJR0hUXzY0KG5faGksIG5fbG8pIFwKKwlhc20oInNocmwgICAkMSwlMgk7IglcCisJICAgICJyY3JsICAgJDEsJTM7IgkJXAorCSAgICA6ICI9ciIobl9oaSksICI9ciIobl9sbykJXAorCSAgICA6ICIwIihuX2hpKSwgIjEiKG5fbG8pKQorCisjaWZkZWYgQ09ORklHX0FDUEkKK2V4dGVybiBpbnQgYWNwaV9sYXBpYzsKK2V4dGVybiBpbnQgYWNwaV9pb2FwaWM7CitleHRlcm4gaW50IGFjcGlfbm9pcnE7CitleHRlcm4gaW50IGFjcGlfc3RyaWN0OworZXh0ZXJuIGludCBhY3BpX2Rpc2FibGVkOworZXh0ZXJuIGludCBhY3BpX2h0OworZXh0ZXJuIGludCBhY3BpX3BjaV9kaXNhYmxlZDsKK2V4dGVybiBpbnQgYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlOworZXh0ZXJuIGludCBhY3BpX3VzZV90aW1lcl9vdmVycmlkZTsKKworZXh0ZXJuIHU4IGFjcGlfc2NpX2ZsYWdzOworZXh0ZXJuIGludCBhY3BpX3NjaV9vdmVycmlkZV9nc2k7Cit2b2lkIGFjcGlfcGljX3NjaV9zZXRfdHJpZ2dlcih1bnNpZ25lZCBpbnQsIHUxNik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkKK3sKKwlhY3BpX2Rpc2FibGVkID0gMTsKKwlhY3BpX2h0ID0gMDsKKwlhY3BpX3BjaV9kaXNhYmxlZCA9IDE7CisJYWNwaV9ub2lycSA9IDE7Cit9CisKKy8qIEZpeG1hcCBwYWdlcyB0byByZXNlcnZlIGZvciBBQ1BJIGJvb3QtdGltZSB0YWJsZXMgKHNlZSBmaXhtYXAuaCkgKi8KKyNkZWZpbmUgRklYX0FDUElfUEFHRVMgNAorCitleHRlcm4gaW50IGFjcGlfZ3NpX3RvX2lycSh1MzIgZ3NpLCB1bnNpZ25lZCBpbnQgKmlycSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25vaXJxX3NldCh2b2lkKSB7IGFjcGlfbm9pcnEgPSAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9kaXNhYmxlX3BjaSh2b2lkKQoreworCWFjcGlfcGNpX2Rpc2FibGVkID0gMTsKKwlhY3BpX25vaXJxX3NldCgpOworfQorZXh0ZXJuIGludCBhY3BpX2lycV9iYWxhbmNlX3NldChjaGFyICpzdHIpOworCisvKiByb3V0aW5lcyBmb3Igc2F2aW5nL3Jlc3RvcmluZyBrZXJuZWwgc3RhdGUgKi8KK2V4dGVybiBpbnQgYWNwaV9zYXZlX3N0YXRlX21lbSh2b2lkKTsKK2V4dGVybiB2b2lkIGFjcGlfcmVzdG9yZV9zdGF0ZV9tZW0odm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFjcGlfd2FrZXVwX2FkZHJlc3M7CisKKy8qIGVhcmx5IGluaXRpYWxpemF0aW9uIHJvdXRpbmUgKi8KK2V4dGVybiB2b2lkIGFjcGlfcmVzZXJ2ZV9ib290bWVtKHZvaWQpOworCisvKgorICogQ2hlY2sgaWYgdGhlIENQVSBjYW4gaGFuZGxlIEMyIGFuZCBkZWVwZXIKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWNwaV9wcm9jZXNzb3JfY3N0YXRlX2NoZWNrKHVuc2lnbmVkIGludCBtYXhfY3N0YXRlKQoreworCS8qCisJICogRWFybHkgbW9kZWxzICg8PTUpIG9mIEFNRCBPcHRlcm9ucyBhcmUgbm90IHN1cHBvc2VkIHRvIGdvIGludG8KKwkgKiBDMiBzdGF0ZS4KKwkgKgorCSAqIFN0ZXBwaW5ncyAweDBBIGFuZCBsYXRlciBhcmUgZ29vZAorCSAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDBGICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgorCSAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PSAweDA1ICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPCAweDBBKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQU1EQzFFKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gbWF4X2NzdGF0ZTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCisKKyNkZWZpbmUgYWNwaV9sYXBpYyAwCisjZGVmaW5lIGFjcGlfaW9hcGljIDAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25vaXJxX3NldCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2Rpc2FibGVfcGNpKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYWNwaSh2b2lkKSB7IH0KKworI2VuZGlmIC8qICFDT05GSUdfQUNQSSAqLworCisjZGVmaW5lIEFSQ0hfSEFTX1BPV0VSX0lOSVQJMQorCitzdHJ1Y3QgYm9vdG5vZGU7CisKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCitleHRlcm4gaW50IGFjcGlfbnVtYTsKK2V4dGVybiBpbnQgYWNwaV9zY2FuX25vZGVzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNkZWZpbmUgTlJfTk9ERV9NRU1CTEtTIChNQVhfTlVNTk9ERVMqMikKK2V4dGVybiB2b2lkIGFjcGlfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKmZha2Vfbm9kZXMsCisJCQkJICAgaW50IG51bV9ub2Rlcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKmZha2Vfbm9kZXMsCisJCQkJICAgaW50IG51bV9ub2RlcykKK3sKK30KKyNlbmRpZgorCisjZGVmaW5lIGFjcGlfdW5sYXp5X3RsYih4KQlsZWF2ZV9tbSh4KQorCisjZW5kaWYgLyogX0FTTV9YODZfQUNQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZ3AuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FncC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjVjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZ3AuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9BU01fWDg2X0FHUF9ICisjZGVmaW5lIF9BU01fWDg2X0FHUF9ICisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKy8qCisgKiBGdW5jdGlvbnMgdG8ga2VlcCB0aGUgYWdwZ2FydCBtYXBwaW5ncyBjb2hlcmVudCB3aXRoIHRoZSBNTVUuIFRoZQorICogR0FSVCBnaXZlcyB0aGUgQ1BVIGEgcGh5c2ljYWwgYWxpYXMgb2YgcGFnZXMgaW4gbWVtb3J5LiBUaGUgYWxpYXMKKyAqIHJlZ2lvbiBpcyBtYXBwZWQgdW5jYWNoZWFibGUuIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gY29uZmxpY3RpbmcKKyAqIG1hcHBpbmdzIHdpdGggZGlmZmVyZW50IGNhY2hhYmlsaXR5IGF0dHJpYnV0ZXMgZm9yIHRoZSBzYW1lCisgKiBwYWdlLiBUaGlzIGF2b2lkcyBkYXRhIGNvcnJ1cHRpb24gb24gc29tZSBDUFVzLgorICovCisKKyNkZWZpbmUgbWFwX3BhZ2VfaW50b19hZ3AocGFnZSkgc2V0X3BhZ2VzX3VjKHBhZ2UsIDEpCisjZGVmaW5lIHVubWFwX3BhZ2VfZnJvbV9hZ3AocGFnZSkgc2V0X3BhZ2VzX3diKHBhZ2UsIDEpCisKKy8qCisgKiBDb3VsZCB1c2UgQ0xGTFVTSCBoZXJlIGlmIHRoZSBjcHUgc3VwcG9ydHMgaXQuIEJ1dCB0aGVuIGl0IHdvdWxkCisgKiBuZWVkIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBjYWNoZWxpbmUgb2YgdGhlIHdob2xlIHBhZ2Ugc28gaXQgbWF5CisgKiBub3QgYmUgd29ydGggaXQuIFdvdWxkIG5lZWQgYSBwYWdlIGZvciBpdC4KKyAqLworI2RlZmluZSBmbHVzaF9hZ3BfY2FjaGUoKSB3YmludmQoKQorCisvKiBDb252ZXJ0IGEgcGh5c2ljYWwgYWRkcmVzcyB0byBhbiBhZGRyZXNzIHN1aXRhYmxlIGZvciB0aGUgR0FSVC4gKi8KKyNkZWZpbmUgcGh5c190b19nYXJ0KHgpICh4KQorI2RlZmluZSBnYXJ0X3RvX3BoeXMoeCkgKHgpCisKKy8qIEdBVFQgYWxsb2NhdGlvbi4gUmV0dXJucy9hY2NlcHRzIEdBVFQga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gKi8KKyNkZWZpbmUgYWxsb2NfZ2F0dF9wYWdlcyhvcmRlcikJCVwKKwkoKGNoYXIgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIChvcmRlcikpKQorI2RlZmluZSBmcmVlX2dhdHRfcGFnZXModGFibGUsIG9yZGVyKQlcCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykodGFibGUpLCAob3JkZXIpKQorCisjZW5kaWYgLyogX0FTTV9YODZfQUdQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hbHRlcm5hdGl2ZS1hc20uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvYWx0ZXJuYXRpdmUtYXNtLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFhMThlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApAQCAtMCwwICsxLDE4MyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BTFRFUk5BVElWRV9ICisjZGVmaW5lIF9BU01fWDg2X0FMVEVSTkFUSVZFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgorCisvKgorICogQWx0ZXJuYXRpdmUgaW5saW5lIGFzc2VtYmx5IGZvciBTTVAuCisgKgorICogVGhlIExPQ0tfUFJFRklYIG1hY3JvIGRlZmluZWQgaGVyZSByZXBsYWNlcyB0aGUgTE9DSyBhbmQKKyAqIExPQ0tfUFJFRklYIG1hY3JvcyB1c2VkIGV2ZXJ5d2hlcmUgaW4gdGhlIHNvdXJjZSB0cmVlLgorICoKKyAqIFNNUCBhbHRlcm5hdGl2ZXMgdXNlIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcyBhcyB0aGUgb3RoZXIKKyAqIGFsdGVybmF0aXZlcyBhbmQgdGhlIFg4Nl9GRUFUVVJFX1VQIGZsYWcgdG8gaW5kaWNhdGUgdGhlIGNhc2Ugb2YgYQorICogVVAgc3lzdGVtIHJ1bm5pbmcgYSBTTVAga2VybmVsLiAgVGhlIGV4aXN0aW5nIGFwcGx5X2FsdGVybmF0aXZlcygpCisgKiB3b3JrcyBmaW5lIGZvciBwYXRjaGluZyBhIFNNUCBrZXJuZWwgZm9yIFVQLgorICoKKyAqIFRoZSBTTVAgYWx0ZXJuYXRpdmUgdGFibGVzIGNhbiBiZSBrZXB0IGFmdGVyIGJvb3QgYW5kIGNvbnRhaW4gYm90aAorICogVVAgYW5kIFNNUCB2ZXJzaW9ucyBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHRvIGFsbG93IHN3aXRjaGluZyBiYWNrIHRvCisgKiBTTVAgYXQgcnVudGltZSwgd2hlbiBob3RwbHVnZ2luZyBpbiBhIG5ldyBDUFUsIHdoaWNoIGlzIGVzcGVjaWFsbHkKKyAqIHVzZWZ1bCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCisgKgorICogVGhlIHZlcnkgY29tbW9uIGxvY2sgcHJlZml4IGlzIGhhbmRsZWQgYXMgc3BlY2lhbCBjYXNlIGluIGEKKyAqIHNlcGFyYXRlIHRhYmxlIHdoaWNoIGlzIGEgcHVyZSBhZGRyZXNzIGxpc3Qgd2l0aG91dCByZXBsYWNlbWVudCBwdHIKKyAqIGFuZCBzaXplIGluZm9ybWF0aW9uLiAgVGhhdCBrZWVwcyB0aGUgdGFibGUgc2l6ZXMgc21hbGwuCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgTE9DS19QUkVGSVggXAorCQkiLnNlY3Rpb24gLnNtcF9sb2NrcyxcImFcIlxuIglcCisJCV9BU01fQUxJR04gIlxuIgkJCVwKKwkJX0FTTV9QVFIgIjY2MWZcbiIgLyogYWRkcmVzcyAqLwlcCisJCSIucHJldmlvdXNcbiIJCQlcCisJCSI2NjE6XG5cdGxvY2s7ICIKKworI2Vsc2UgLyogISBDT05GSUdfU01QICovCisjZGVmaW5lIExPQ0tfUFJFRklYICIiCisjZW5kaWYKKworLyogVGhpcyBtdXN0IGJlIGluY2x1ZGVkICphZnRlciogdGhlIGRlZmluaXRpb24gb2YgTE9DS19QUkVGSVggKi8KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorCitzdHJ1Y3QgYWx0X2luc3RyIHsKKwl1OCAqaW5zdHI7CQkvKiBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCXU4ICpyZXBsYWNlbWVudDsKKwl1OCAgY3B1aWQ7CQkvKiBjcHVpZCBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLworCXU4ICBpbnN0cmxlbjsJCS8qIGxlbmd0aCBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCXU4ICByZXBsYWNlbWVudGxlbjsJLyogbGVuZ3RoIG9mIG5ldyBpbnN0cnVjdGlvbiwgPD0gaW5zdHJsZW4gKi8KKwl1OCAgcGFkMTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdTMyIHBhZDI7CisjZW5kaWYKK307CisKK2V4dGVybiB2b2lkIGFsdGVybmF0aXZlX2luc3RydWN0aW9ucyh2b2lkKTsKK2V4dGVybiB2b2lkIGFwcGx5X2FsdGVybmF0aXZlcyhzdHJ1Y3QgYWx0X2luc3RyICpzdGFydCwgc3RydWN0IGFsdF9pbnN0ciAqZW5kKTsKKworc3RydWN0IG1vZHVsZTsKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCisJCQkJCXZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCisJCQkJCXZvaWQgKnRleHQsIHZvaWQgKnRleHRfZW5kKTsKK2V4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2RlbChzdHJ1Y3QgbW9kdWxlICptb2QpOworZXh0ZXJuIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goaW50IHNtcCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCisJCQkJCSAgICAgICB2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAorCQkJCQkgICAgICAgdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKSB7fQorI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KKworY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKmZpbmRfbm9wX3RhYmxlKHZvaWQpOworCisvKgorICogQWx0ZXJuYXRpdmUgaW5zdHJ1Y3Rpb25zIGZvciBkaWZmZXJlbnQgQ1BVIHR5cGVzIG9yIGNhcGFiaWxpdGllcy4KKyAqCisgKiBUaGlzIGFsbG93cyB0byB1c2Ugb3B0aW1pemVkIGluc3RydWN0aW9ucyBldmVuIG9uIGdlbmVyaWMgYmluYXJ5CisgKiBrZXJuZWxzLgorICoKKyAqIGxlbmd0aCBvZiBvbGRpbnN0ciBtdXN0IGJlIGxvbmdlciBvciBlcXVhbCB0aGUgbGVuZ3RoIG9mIG5ld2luc3RyCisgKiBJdCBjYW4gYmUgcGFkZGVkIHdpdGggbm9wcyBhcyBuZWVkZWQuCisgKgorICogRm9yIG5vbiBiYXJyaWVyIGxpa2UgaW5saW5lcyBwbGVhc2UgZGVmaW5lIG5ldyB2YXJpYW50cworICogd2l0aG91dCB2b2xhdGlsZSBhbmQgbWVtb3J5IGNsb2JiZXIuCisgKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlKQkJCVwKKwlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIgkJCVwKKwkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCVwKKwkJICAgICAgX0FTTV9BTElHTiAiXG4iCQkJCQlcCisJCSAgICAgIF9BU01fUFRSICI2NjFiXG4iCQkvKiBsYWJlbCAqLwkJXAorCQkgICAgICBfQVNNX1BUUiAiNjYzZlxuIgkJLyogbmV3IGluc3RydWN0aW9uICovCVwKKwkJICAgICAgIgkgLmJ5dGUgJWMwXG4iCQkvKiBmZWF0dXJlIGJpdCAqLwlcCisJCSAgICAgICIJIC5ieXRlIDY2MmItNjYxYlxuIgkvKiBzb3VyY2VsZW4gKi8JCVwKKwkJICAgICAgIgkgLmJ5dGUgNjY0Zi02NjNmXG4iCS8qIHJlcGxhY2VtZW50bGVuICovCVwKKwkJICAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LFwiYXhcIlxuIgkJXAorCQkgICAgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgIC8qIHJlcGxhY2VtZW50ICovCVwKKwkJICAgICAgIi5wcmV2aW91cyIgOjogImkiIChmZWF0dXJlKSA6ICJtZW1vcnkiKQorCisvKgorICogQWx0ZXJuYXRpdmUgaW5saW5lIGFzc2VtYmx5IHdpdGggaW5wdXQuCisgKgorICogUGVjdWxhcml0aWVzOgorICogTm8gbWVtb3J5IGNsb2JiZXIgaGVyZS4KKyAqIEFyZ3VtZW50IG51bWJlcnMgc3RhcnQgd2l0aCAxLgorICogQmVzdCBpcyB0byB1c2UgY29uc3RyYWludHMgdGhhdCBhcmUgZml4ZWQgc2l6ZSAobGlrZSAoJTEpIC4uLiAiciIpCisgKiBJZiB5b3UgdXNlIHZhcmlhYmxlIHNpemVkIGNvbnN0cmFpbnRzIGxpa2UgIm0iIG9yICJnIiBpbiB0aGUKKyAqIHJlcGxhY2VtZW50IG1ha2Ugc3VyZSB0byBwYWQgdG8gdGhlIHdvcnN0IGNhc2UgbGVuZ3RoLgorICovCisjZGVmaW5lIGFsdGVybmF0aXZlX2lucHV0KG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSwgaW5wdXQuLi4pCVwKKwlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIgkJCVwKKwkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCVwKKwkJICAgICAgX0FTTV9BTElHTiAiXG4iCQkJCQlcCisJCSAgICAgIF9BU01fUFRSICI2NjFiXG4iCQkvKiBsYWJlbCAqLwkJXAorCQkgICAgICBfQVNNX1BUUiAiNjYzZlxuIgkJLyogbmV3IGluc3RydWN0aW9uICovCVwKKwkJICAgICAgIgkgLmJ5dGUgJWMwXG4iCQkvKiBmZWF0dXJlIGJpdCAqLwlcCisJCSAgICAgICIJIC5ieXRlIDY2MmItNjYxYlxuIgkvKiBzb3VyY2VsZW4gKi8JCVwKKwkJICAgICAgIgkgLmJ5dGUgNjY0Zi02NjNmXG4iCS8qIHJlcGxhY2VtZW50bGVuICovCVwKKwkJICAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LFwiYXhcIlxuIgkJXAorCQkgICAgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgIC8qIHJlcGxhY2VtZW50ICovCVwKKwkJICAgICAgIi5wcmV2aW91cyIgOjogImkiIChmZWF0dXJlKSwgIyNpbnB1dCkKKworLyogTGlrZSBhbHRlcm5hdGl2ZV9pbnB1dCwgYnV0IHdpdGggYSBzaW5nbGUgb3V0cHV0IGFyZ3VtZW50ICovCisjZGVmaW5lIGFsdGVybmF0aXZlX2lvKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSwgb3V0cHV0LCBpbnB1dC4uLikJXAorCWFzbSB2b2xhdGlsZSAoIjY2MTpcblx0IiBvbGRpbnN0ciAiXG42NjI6XG4iCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJXAorCQkgICAgICBfQVNNX0FMSUdOICJcbiIJCQkJCVwKKwkJICAgICAgX0FTTV9QVFIgIjY2MWJcbiIJCS8qIGxhYmVsICovCQlcCisJCSAgICAgIF9BU01fUFRSICI2NjNmXG4iCQkvKiBuZXcgaW5zdHJ1Y3Rpb24gKi8JXAorCQkgICAgICAiCSAuYnl0ZSAlY1tmZWF0XVxuIgkvKiBmZWF0dXJlIGJpdCAqLwlcCisJCSAgICAgICIJIC5ieXRlIDY2MmItNjYxYlxuIgkvKiBzb3VyY2VsZW4gKi8JCVwKKwkJICAgICAgIgkgLmJ5dGUgNjY0Zi02NjNmXG4iCS8qIHJlcGxhY2VtZW50bGVuICovCVwKKwkJICAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LFwiYXhcIlxuIgkJXAorCQkgICAgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgIC8qIHJlcGxhY2VtZW50ICovIFwKKwkJICAgICAgIi5wcmV2aW91cyIgOiBvdXRwdXQgOiBbZmVhdF0gImkiIChmZWF0dXJlKSwgIyNpbnB1dCkKKworLyoKKyAqIHVzZSB0aGlzIG1hY3JvKHMpIGlmIHlvdSBuZWVkIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHBhcmFtZXRlcgorICogaW4gYWx0ZXJuYXRpdmVfaW8KKyAqLworI2RlZmluZSBBU01fT1VUUFVUMihhLCBiKSBhLCBiCisKK3N0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlOworI2lmZGVmIENPTkZJR19QQVJBVklSVAordm9pZCBhcHBseV9wYXJhdmlydChzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSAqc3RhcnQsCisJCSAgICBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSAqZW5kKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlfcGFyYXZpcnQoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKnN0YXJ0LAorCQkJCSAgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKmVuZCkKK3t9CisjZGVmaW5lIF9fcGFyYWluc3RydWN0aW9ucwlOVUxMCisjZGVmaW5lIF9fcGFyYWluc3RydWN0aW9uc19lbmQJTlVMTAorI2VuZGlmCisKK2V4dGVybiB2b2lkIGFkZF9ub3BzKHZvaWQgKmluc25zLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoKKyAqIENsZWFyIGFuZCByZXN0b3JlIHRoZSBrZXJuZWwgd3JpdGUtcHJvdGVjdGlvbiBmbGFnIG9uIHRoZSBsb2NhbCBDUFUuCisgKiBBbGxvd3MgdGhlIGtlcm5lbCB0byBlZGl0IHJlYWQtb25seSBwYWdlcy4KKyAqIFNpZGUtZWZmZWN0OiBhbnkgaW50ZXJydXB0IGhhbmRsZXIgcnVubmluZyBiZXR3ZWVuIHNhdmUgYW5kIHJlc3RvcmUgd2lsbCBoYXZlCisgKiB0aGUgYWJpbGl0eSB0byB3cml0ZSB0byByZWFkLW9ubHkgcGFnZXMuCisgKgorICogV2FybmluZzoKKyAqIENvZGUgcGF0Y2hpbmcgaW4gdGhlIFVQIGNhc2UgaXMgc2FmZSBpZiBOTUlzIGFuZCBNQ0UgaGFuZGxlcnMgYXJlIHN0b3BwZWQgYW5kCisgKiBubyB0aHJlYWQgY2FuIGJlIHByZWVtcHRlZCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIGJlaW5nIG1vZGlmaWVkIChubyBpcmV0IHRvIGFuCisgKiBpbnZhbGlkIGluc3RydWN0aW9uIHBvc3NpYmxlKSBvciBpZiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjaGFuZ2VkIGZyb20gYQorICogY29uc2lzdGVudCBzdGF0ZSB0byBhbm90aGVyIGNvbnNpc3RlbnQgc3RhdGUgYXRvbWljYWxseS4KKyAqIE1vcmUgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gbW9kaWZ5aW5nIGNvZGUgaW4gdGhlIFNNUCBjYXNlIGJlY2F1c2Ugb2YKKyAqIEludGVsJ3MgZXJyYXRhLgorICogT24gdGhlIGxvY2FsIENQVSB5b3UgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYWdhaW4gTk1JIG9yIE1DRSBoYW5kbGVycyBzZWVpbmcgYW4KKyAqIGluY29uc2lzdGVudCBpbnN0cnVjdGlvbiB3aGlsZSB5b3UgcGF0Y2guCisgKiBUaGUgX2Vhcmx5IHZlcnNpb24gZXhwZWN0cyB0aGUgbWVtb3J5IHRvIGFscmVhZHkgYmUgUlcuCisgKi8KKworZXh0ZXJuIHZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOworCisjZW5kaWYgLyogX0FTTV9YODZfQUxURVJOQVRJVkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzEyMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIEF1dGhvcjogSm9lcmcgUm9lZGVsIDxqb2VyZy5yb2VkZWxAYW1kLmNvbT4KKyAqICAgICAgICAgTGVvIER1cmFuIDxsZW8uZHVyYW5AYW1kLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X0FNRF9JT01NVV9ICisjZGVmaW5lIF9BU01fWDg2X0FNRF9JT01NVV9ICisKKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKworI2lmZGVmIENPTkZJR19BTURfSU9NTVUKK2V4dGVybiBpbnQgYW1kX2lvbW11X2luaXQodm9pZCk7CitleHRlcm4gaW50IGFtZF9pb21tdV9pbml0X2RtYV9vcHModm9pZCk7CitleHRlcm4gdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90IGFtZF9pb21tdV9pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X2RldGVjdCh2b2lkKSB7IH0KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfQU1EX0lPTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzMGMwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV90eXBlcy5oCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgorICogICAgICAgICBMZW8gRHVyYW4gPGxlby5kdXJhbkBhbWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0FTTV9YODZfQU1EX0lPTU1VX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9YODZfQU1EX0lPTU1VX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKy8qCisgKiBzb21lIHNpemUgY2FsY3VsYXRpb24gY29uc3RhbnRzCisgKi8KKyNkZWZpbmUgREVWX1RBQkxFX0VOVFJZX1NJWkUJCTMyCisjZGVmaW5lIEFMSUFTX1RBQkxFX0VOVFJZX1NJWkUJCTIKKyNkZWZpbmUgUkxPT0tVUF9UQUJMRV9FTlRSWV9TSVpFCShzaXplb2Yodm9pZCAqKSkKKworLyogTGVuZ3RoIG9mIHRoZSBNTUlPIHJlZ2lvbiBmb3IgdGhlIEFNRCBJT01NVSAqLworI2RlZmluZSBNTUlPX1JFR0lPTl9MRU5HVEggICAgICAgMHg0MDAwCisKKy8qIENhcGFiaWxpdHkgb2Zmc2V0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgTU1JT19DQVBfSERSX09GRlNFVAkweDAwCisjZGVmaW5lIE1NSU9fUkFOR0VfT0ZGU0VUCTB4MGMKKyNkZWZpbmUgTU1JT19NSVNDX09GRlNFVAkweDEwCisKKy8qIE1hc2tzLCBzaGlmdHMgYW5kIG1hY3JvcyB0byBwYXJzZSB0aGUgZGV2aWNlIHJhbmdlIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgTU1JT19SQU5HRV9MRF9NQVNLCTB4ZmYwMDAwMDAKKyNkZWZpbmUgTU1JT19SQU5HRV9GRF9NQVNLCTB4MDBmZjAwMDAKKyNkZWZpbmUgTU1JT19SQU5HRV9CVVNfTUFTSwkweDAwMDBmZjAwCisjZGVmaW5lIE1NSU9fUkFOR0VfTERfU0hJRlQJMjQKKyNkZWZpbmUgTU1JT19SQU5HRV9GRF9TSElGVAkxNgorI2RlZmluZSBNTUlPX1JBTkdFX0JVU19TSElGVAk4CisjZGVmaW5lIE1NSU9fR0VUX0xEKHgpICAoKCh4KSAmIE1NSU9fUkFOR0VfTERfTUFTSykgPj4gTU1JT19SQU5HRV9MRF9TSElGVCkKKyNkZWZpbmUgTU1JT19HRVRfRkQoeCkgICgoKHgpICYgTU1JT19SQU5HRV9GRF9NQVNLKSA+PiBNTUlPX1JBTkdFX0ZEX1NISUZUKQorI2RlZmluZSBNTUlPX0dFVF9CVVMoeCkgKCgoeCkgJiBNTUlPX1JBTkdFX0JVU19NQVNLKSA+PiBNTUlPX1JBTkdFX0JVU19TSElGVCkKKyNkZWZpbmUgTU1JT19NU0lfTlVNKHgpCSgoeCkgJiAweDFmKQorCisvKiBGbGFnIG1hc2tzIGZvciB0aGUgQU1EIElPTU1VIGV4Y2x1c2lvbiByYW5nZSAqLworI2RlZmluZSBNTUlPX0VYQ0xfRU5BQkxFX01BU0sgMHgwMVVMTAorI2RlZmluZSBNTUlPX0VYQ0xfQUxMT1dfTUFTSyAgMHgwMlVMTAorCisvKiBVc2VkIG9mZnNldHMgaW50byB0aGUgTU1JTyBzcGFjZSAqLworI2RlZmluZSBNTUlPX0RFVl9UQUJMRV9PRkZTRVQgICAweDAwMDAKKyNkZWZpbmUgTU1JT19DTURfQlVGX09GRlNFVCAgICAgMHgwMDA4CisjZGVmaW5lIE1NSU9fRVZUX0JVRl9PRkZTRVQgICAgIDB4MDAxMAorI2RlZmluZSBNTUlPX0NPTlRST0xfT0ZGU0VUICAgICAweDAwMTgKKyNkZWZpbmUgTU1JT19FWENMX0JBU0VfT0ZGU0VUICAgMHgwMDIwCisjZGVmaW5lIE1NSU9fRVhDTF9MSU1JVF9PRkZTRVQgIDB4MDAyOAorI2RlZmluZSBNTUlPX0NNRF9IRUFEX09GRlNFVAkweDIwMDAKKyNkZWZpbmUgTU1JT19DTURfVEFJTF9PRkZTRVQJMHgyMDA4CisjZGVmaW5lIE1NSU9fRVZUX0hFQURfT0ZGU0VUCTB4MjAxMAorI2RlZmluZSBNTUlPX0VWVF9UQUlMX09GRlNFVAkweDIwMTgKKyNkZWZpbmUgTU1JT19TVEFUVVNfT0ZGU0VUCTB4MjAyMAorCisvKiBNTUlPIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIE1NSU9fU1RBVFVTX0NPTV9XQUlUX0lOVF9NQVNLCTB4MDQKKworLyogZXZlbnQgbG9nZ2luZyBjb25zdGFudHMgKi8KKyNkZWZpbmUgRVZFTlRfRU5UUllfU0laRQkweDEwCisjZGVmaW5lIEVWRU5UX1RZUEVfU0hJRlQJMjgKKyNkZWZpbmUgRVZFTlRfVFlQRV9NQVNLCQkweGYKKyNkZWZpbmUgRVZFTlRfVFlQRV9JTExfREVWCTB4MQorI2RlZmluZSBFVkVOVF9UWVBFX0lPX0ZBVUxUCTB4MgorI2RlZmluZSBFVkVOVF9UWVBFX0RFVl9UQUJfRVJSCTB4MworI2RlZmluZSBFVkVOVF9UWVBFX1BBR0VfVEFCX0VSUgkweDQKKyNkZWZpbmUgRVZFTlRfVFlQRV9JTExfQ01ECTB4NQorI2RlZmluZSBFVkVOVF9UWVBFX0NNRF9IQVJEX0VSUgkweDYKKyNkZWZpbmUgRVZFTlRfVFlQRV9JT1RMQl9JTlZfVE8JMHg3CisjZGVmaW5lIEVWRU5UX1RZUEVfSU5WX0RFVl9SRVEJMHg4CisjZGVmaW5lIEVWRU5UX0RFVklEX01BU0sJMHhmZmZmCisjZGVmaW5lIEVWRU5UX0RFVklEX1NISUZUCTAKKyNkZWZpbmUgRVZFTlRfRE9NSURfTUFTSwkweGZmZmYKKyNkZWZpbmUgRVZFTlRfRE9NSURfU0hJRlQJMAorI2RlZmluZSBFVkVOVF9GTEFHU19NQVNLCTB4ZmZmCisjZGVmaW5lIEVWRU5UX0ZMQUdTX1NISUZUCTB4MTAKKworLyogZmVhdHVyZSBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgQ09OVFJPTF9JT01NVV9FTiAgICAgICAgMHgwMFVMTAorI2RlZmluZSBDT05UUk9MX0hUX1RVTl9FTiAgICAgICAweDAxVUxMCisjZGVmaW5lIENPTlRST0xfRVZUX0xPR19FTiAgICAgIDB4MDJVTEwKKyNkZWZpbmUgQ09OVFJPTF9FVlRfSU5UX0VOICAgICAgMHgwM1VMTAorI2RlZmluZSBDT05UUk9MX0NPTVdBSVRfRU4gICAgICAweDA0VUxMCisjZGVmaW5lIENPTlRST0xfUEFTU1BXX0VOICAgICAgIDB4MDhVTEwKKyNkZWZpbmUgQ09OVFJPTF9SRVNQQVNTUFdfRU4gICAgMHgwOVVMTAorI2RlZmluZSBDT05UUk9MX0NPSEVSRU5UX0VOICAgICAweDBhVUxMCisjZGVmaW5lIENPTlRST0xfSVNPQ19FTiAgICAgICAgIDB4MGJVTEwKKyNkZWZpbmUgQ09OVFJPTF9DTURCVUZfRU4gICAgICAgMHgwY1VMTAorI2RlZmluZSBDT05UUk9MX1BQRkxPR19FTiAgICAgICAweDBkVUxMCisjZGVmaW5lIENPTlRST0xfUFBGSU5UX0VOICAgICAgIDB4MGVVTEwKKworLyogY29tbWFuZCBzcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIENNRF9DT01QTF9XQUlUICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ01EX0lOVl9ERVZfRU5UUlkgICAgICAgMHgwMgorI2RlZmluZSBDTURfSU5WX0lPTU1VX1BBR0VTICAgICAweDAzCisKKyNkZWZpbmUgQ01EX0NPTVBMX1dBSVRfU1RPUkVfTUFTSwkweDAxCisjZGVmaW5lIENNRF9DT01QTF9XQUlUX0lOVF9NQVNLCQkweDAyCisjZGVmaW5lIENNRF9JTlZfSU9NTVVfUEFHRVNfU0laRV9NQVNLCTB4MDEKKyNkZWZpbmUgQ01EX0lOVl9JT01NVV9QQUdFU19QREVfTUFTSwkweDAyCisKKyNkZWZpbmUgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUwkweDdmZmZmZmZmZmZmZmZmZmZVTEwKKworLyogbWFjcm9zIGFuZCBkZWZpbml0aW9ucyBmb3IgZGV2aWNlIHRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgREVWX0VOVFJZX1ZBTElEICAgICAgICAgMHgwMAorI2RlZmluZSBERVZfRU5UUllfVFJBTlNMQVRJT04gICAweDAxCisjZGVmaW5lIERFVl9FTlRSWV9JUiAgICAgICAgICAgIDB4M2QKKyNkZWZpbmUgREVWX0VOVFJZX0lXICAgICAgICAgICAgMHgzZQorI2RlZmluZSBERVZfRU5UUllfTk9fUEFHRV9GQVVMVAkweDYyCisjZGVmaW5lIERFVl9FTlRSWV9FWCAgICAgICAgICAgIDB4NjcKKyNkZWZpbmUgREVWX0VOVFJZX1NZU01HVDEgICAgICAgMHg2OAorI2RlZmluZSBERVZfRU5UUllfU1lTTUdUMiAgICAgICAweDY5CisjZGVmaW5lIERFVl9FTlRSWV9JTklUX1BBU1MgICAgIDB4YjgKKyNkZWZpbmUgREVWX0VOVFJZX0VJTlRfUEFTUyAgICAgMHhiOQorI2RlZmluZSBERVZfRU5UUllfTk1JX1BBU1MgICAgICAweGJhCisjZGVmaW5lIERFVl9FTlRSWV9MSU5UMF9QQVNTICAgIDB4YmUKKyNkZWZpbmUgREVWX0VOVFJZX0xJTlQxX1BBU1MgICAgMHhiZgorI2RlZmluZSBERVZfRU5UUllfTU9ERV9NQVNLCTB4MDcKKyNkZWZpbmUgREVWX0VOVFJZX01PREVfU0hJRlQJMHgwOQorCisvKiBjb25zdGFudHMgdG8gY29uZmlndXJlIHRoZSBjb21tYW5kIGJ1ZmZlciAqLworI2RlZmluZSBDTURfQlVGRkVSX1NJWkUgICAgODE5MgorI2RlZmluZSBDTURfQlVGRkVSX0VOVFJJRVMgNTEyCisjZGVmaW5lIE1NSU9fQ01EX1NJWkVfU0hJRlQgNTYKKyNkZWZpbmUgTU1JT19DTURfU0laRV81MTIgKDB4OVVMTCA8PCBNTUlPX0NNRF9TSVpFX1NISUZUKQorCisvKiBjb25zdGFudHMgZm9yIGV2ZW50IGJ1ZmZlciBoYW5kbGluZyAqLworI2RlZmluZSBFVlRfQlVGRkVSX1NJWkUJCTgxOTIgLyogNTEyIGVudHJpZXMgKi8KKyNkZWZpbmUgRVZUX0xFTl9NQVNLCQkoMHg5VUxMIDw8IDU2KQorCisjZGVmaW5lIFBBR0VfTU9ERV8xX0xFVkVMIDB4MDEKKyNkZWZpbmUgUEFHRV9NT0RFXzJfTEVWRUwgMHgwMgorI2RlZmluZSBQQUdFX01PREVfM19MRVZFTCAweDAzCisKKyNkZWZpbmUgSU9NTVVfUERFX05MXzAgICAweDAwMFVMTAorI2RlZmluZSBJT01NVV9QREVfTkxfMSAgIDB4MjAwVUxMCisjZGVmaW5lIElPTU1VX1BERV9OTF8yICAgMHg0MDBVTEwKKyNkZWZpbmUgSU9NTVVfUERFX05MXzMgICAweDYwMFVMTAorCisjZGVmaW5lIElPTU1VX1BURV9MMl9JTkRFWChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiAzMCkgJiAweDFmZlVMTCkKKyNkZWZpbmUgSU9NTVVfUFRFX0wxX0lOREVYKGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IDIxKSAmIDB4MWZmVUxMKQorI2RlZmluZSBJT01NVV9QVEVfTDBfSU5ERVgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gMTIpICYgMHgxZmZVTEwpCisKKyNkZWZpbmUgSU9NTVVfTUFQX1NJWkVfTDEgKDFVTEwgPDwgMjEpCisjZGVmaW5lIElPTU1VX01BUF9TSVpFX0wyICgxVUxMIDw8IDMwKQorI2RlZmluZSBJT01NVV9NQVBfU0laRV9MMyAoMVVMTCA8PCAzOSkKKworI2RlZmluZSBJT01NVV9QVEVfUCAgKDFVTEwgPDwgMCkKKyNkZWZpbmUgSU9NTVVfUFRFX1RWICgxVUxMIDw8IDEpCisjZGVmaW5lIElPTU1VX1BURV9VICAoMVVMTCA8PCA1OSkKKyNkZWZpbmUgSU9NTVVfUFRFX0ZDICgxVUxMIDw8IDYwKQorI2RlZmluZSBJT01NVV9QVEVfSVIgKDFVTEwgPDwgNjEpCisjZGVmaW5lIElPTU1VX1BURV9JVyAoMVVMTCA8PCA2MikKKworI2RlZmluZSBJT01NVV9MMV9QREUoYWRkcmVzcykgXAorCSgoYWRkcmVzcykgfCBJT01NVV9QREVfTkxfMSB8IElPTU1VX1BURV9QIHwgSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXKQorI2RlZmluZSBJT01NVV9MMl9QREUoYWRkcmVzcykgXAorCSgoYWRkcmVzcykgfCBJT01NVV9QREVfTkxfMiB8IElPTU1VX1BURV9QIHwgSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXKQorCisjZGVmaW5lIElPTU1VX1BBR0VfTUFTSyAoKCgxVUxMIDw8IDUyKSAtIDEpICYgfjB4ZmZmVUxMKQorI2RlZmluZSBJT01NVV9QVEVfUFJFU0VOVChwdGUpICgocHRlKSAmIElPTU1VX1BURV9QKQorI2RlZmluZSBJT01NVV9QVEVfUEFHRShwdGUpIChwaHlzX3RvX3ZpcnQoKHB0ZSkgJiBJT01NVV9QQUdFX01BU0spKQorI2RlZmluZSBJT01NVV9QVEVfTU9ERShwdGUpICgoKHB0ZSkgPj4gOSkgJiAweDA3KQorCisjZGVmaW5lIElPTU1VX1BST1RfTUFTSyAweDAzCisjZGVmaW5lIElPTU1VX1BST1RfSVIgMHgwMQorI2RlZmluZSBJT01NVV9QUk9UX0lXIDB4MDIKKworLyogSU9NTVUgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIElPTU1VX0NBUF9JT1RMQiAgIDI0CisjZGVmaW5lIElPTU1VX0NBUF9OUENBQ0hFIDI2CisKKyNkZWZpbmUgTUFYX0RPTUFJTl9JRCA2NTUzNgorCisvKiBGSVhNRTogbW92ZSB0aGlzIG1hY3JvIHRvIDxsaW51eC9wY2kuaD4gKi8KKyNkZWZpbmUgUENJX0JVUyh4KSAoKCh4KSA+PiA4KSAmIDB4ZmYpCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBnZW5lcmljIGRhdGEgZm9yICBJT01NVSBwcm90ZWN0aW9uIGRvbWFpbnMKKyAqIGluZGVwZW5kZW50IG9mIHRoZWlyIHVzZS4KKyAqLworc3RydWN0IHByb3RlY3Rpb25fZG9tYWluIHsKKwlzcGlubG9ja190IGxvY2s7IC8qIG1vc3RseSB1c2VkIHRvIGxvY2sgdGhlIHBhZ2UgdGFibGUqLworCXUxNiBpZDsJCSAvKiB0aGUgZG9tYWluIGlkIHdyaXR0ZW4gdG8gdGhlIGRldmljZSB0YWJsZSAqLworCWludCBtb2RlOwkgLyogcGFnaW5nIG1vZGUgKDAtNiBsZXZlbHMpICovCisJdTY0ICpwdF9yb290OwkgLyogcGFnZSB0YWJsZSByb290IHBvaW50ZXIgKi8KKwl2b2lkICpwcml2OwkgLyogcHJpdmF0ZSBkYXRhICovCit9OworCisvKgorICogRGF0YSBjb250YWluZXIgZm9yIGEgZG1hX29wcyBzcGVjaWZpYyBwcm90ZWN0aW9uIGRvbWFpbgorICovCitzdHJ1Y3QgZG1hX29wc19kb21haW4geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIGdlbmVyaWMgcHJvdGVjdGlvbiBkb21haW4gaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gZG9tYWluOworCisJLyogc2l6ZSBvZiB0aGUgYXBlcnR1cmUgZm9yIHRoZSBtYXBwaW5ncyAqLworCXVuc2lnbmVkIGxvbmcgYXBlcnR1cmVfc2l6ZTsKKworCS8qIGFkZHJlc3Mgd2Ugc3RhcnQgdG8gc2VhcmNoIGZvciBmcmVlIGFkZHJlc3NlcyAqLworCXVuc2lnbmVkIGxvbmcgbmV4dF9iaXQ7CisKKwkvKiBhZGRyZXNzIGFsbG9jYXRpb24gYml0bWFwICovCisJdW5zaWduZWQgbG9uZyAqYml0bWFwOworCisJLyoKKwkgKiBBcnJheSBvZiBQVEUgcGFnZXMgZm9yIHRoZSBhcGVydHVyZS4gSW4gdGhpcyBhcnJheSB3ZSBzYXZlIGFsbCB0aGUKKwkgKiBsZWFmIHBhZ2VzIG9mIHRoZSBkb21haW4gcGFnZSB0YWJsZSB1c2VkIGZvciB0aGUgYXBlcnR1cmUuIFRoaXMgd2F5CisJICogd2UgZG9uJ3QgbmVlZCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlIHRvIGZpbmQgYSBzcGVjaWZpYyBQVEUuIFdlIGNhbgorCSAqIGp1c3QgY2FsY3VsYXRlIGl0cyBhZGRyZXNzIGluIGNvbnN0YW50IHRpbWUuCisJICovCisJdTY0ICoqcHRlX3BhZ2VzOworCisJLyogVGhpcyB3aWxsIGJlIHNldCB0byB0cnVlIHdoZW4gVExCIG5lZWRzIHRvIGJlIGZsdXNoZWQgKi8KKwlib29sIG5lZWRfZmx1c2g7CisKKwkvKgorCSAqIGlmIHRoaXMgaXMgYSBwcmVhbGxvY2F0ZWQgZG9tYWluLCBrZWVwIHRoZSBkZXZpY2UgZm9yIHdoaWNoIGl0IHdhcworCSAqIHByZWFsbG9jYXRlZCBpbiB0aGlzIHZhcmlhYmxlCisJICovCisJdTE2IHRhcmdldF9kZXY7Cit9OworCisvKgorICogU3RydWN0dXJlIHdoZXJlIHdlIHNhdmUgaW5mb3JtYXRpb24gYWJvdXQgb25lIGhhcmR3YXJlIEFNRCBJT01NVSBpbiB0aGUKKyAqIHN5c3RlbS4KKyAqLworc3RydWN0IGFtZF9pb21tdSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogbG9ja3MgdGhlIGFjY2Vzc2VzIHRvIHRoZSBoYXJkd2FyZSAqLworCXNwaW5sb2NrX3QgbG9jazsKKworCS8qIFBvaW50ZXIgdG8gUENJIGRldmljZSBvZiB0aGlzIElPTU1VICovCisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCS8qCisJICogQ2FwYWJpbGl0eSBwb2ludGVyLiBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIElPTU1VIHBlciBQQ0kKKwkgKiBkZXZpY2UgZnVuY3Rpb24gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQU1EIElPTU1VIGNhcGFiaWxpdHkKKwkgKiBwb2ludGVycy4KKwkgKi8KKwl1MTYgY2FwX3B0cjsKKworCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgTU1JTyBzcGFjZSAqLworCXU2NCBtbWlvX3BoeXM7CisJLyogdmlydHVhbCBhZGRyZXNzIG9mIE1NSU8gc3BhY2UgKi8KKwl1OCAqbW1pb19iYXNlOworCisJLyogY2FwYWJpbGl0aWVzIG9mIHRoYXQgSU9NTVUgcmVhZCBmcm9tIEFDUEkgKi8KKwl1MzIgY2FwOworCisJLyogcGNpIGRvbWFpbiBvZiB0aGlzIElPTU1VICovCisJdTE2IHBjaV9zZWc7CisKKwkvKiBmaXJzdCBkZXZpY2UgdGhpcyBJT01NVSBoYW5kbGVzLiByZWFkIGZyb20gUENJICovCisJdTE2IGZpcnN0X2RldmljZTsKKwkvKiBsYXN0IGRldmljZSB0aGlzIElPTU1VIGhhbmRsZXMuIHJlYWQgZnJvbSBQQ0kgKi8KKwl1MTYgbGFzdF9kZXZpY2U7CisKKwkvKiBzdGFydCBvZiBleGNsdXNpb24gcmFuZ2Ugb2YgdGhhdCBJT01NVSAqLworCXU2NCBleGNsdXNpb25fc3RhcnQ7CisJLyogbGVuZ3RoIG9mIGV4Y2x1c2lvbiByYW5nZSBvZiB0aGF0IElPTU1VICovCisJdTY0IGV4Y2x1c2lvbl9sZW5ndGg7CisKKwkvKiBjb21tYW5kIGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl1OCAqY21kX2J1ZjsKKwkvKiBzaXplIG9mIGNvbW1hbmQgYnVmZmVyICovCisJdTMyIGNtZF9idWZfc2l6ZTsKKworCS8qIGV2ZW50IGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl1OCAqZXZ0X2J1ZjsKKwkvKiBzaXplIG9mIGV2ZW50IGJ1ZmZlciAqLworCXUzMiBldnRfYnVmX3NpemU7CisJLyogTVNJIG51bWJlciBmb3IgZXZlbnQgaW50ZXJydXB0ICovCisJdTE2IGV2dF9tc2lfbnVtOworCisJLyogaWYgb25lLCB3ZSBuZWVkIHRvIHNlbmQgYSBjb21wbGV0aW9uIHdhaXQgY29tbWFuZCAqLworCWludCBuZWVkX3N5bmM7CisKKwkvKiB0cnVlIGlmIGludGVycnVwdHMgZm9yIHRoaXMgSU9NTVUgYXJlIGFscmVhZHkgZW5hYmxlZCAqLworCWJvb2wgaW50X2VuYWJsZWQ7CisKKwkvKiBkZWZhdWx0IGRtYV9vcHMgZG9tYWluIGZvciB0aGF0IElPTU1VICovCisJc3RydWN0IGRtYV9vcHNfZG9tYWluICpkZWZhdWx0X2RvbTsKK307CisKKy8qCisgKiBMaXN0IHdpdGggYWxsIElPTU1VcyBpbiB0aGUgc3lzdGVtLiBUaGlzIGxpc3QgaXMgbm90IGxvY2tlZCBiZWNhdXNlIGl0IGlzCisgKiBvbmx5IHdyaXR0ZW4gYW5kIHJlYWQgYXQgZHJpdmVyIGluaXRpYWxpemF0aW9uIG9yIHN1c3BlbmQgdGltZQorICovCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhbWRfaW9tbXVfbGlzdDsKKworLyoKKyAqIFN0cnVjdHVyZSBkZWZpbmluZyBvbmUgZW50cnkgaW4gdGhlIGRldmljZSB0YWJsZQorICovCitzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5IHsKKwl1MzIgZGF0YVs4XTsKK307CisKKy8qCisgKiBPbmUgZW50cnkgZm9yIHVuaXR5IG1hcHBpbmdzIHBhcnNlZCBvdXQgb2YgdGhlIEFDUEkgdGFibGUuCisgKi8KK3N0cnVjdCB1bml0eV9tYXBfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIHN0YXJ0aW5nIGRldmljZSBpZCB0aGlzIGVudHJ5IGlzIHVzZWQgZm9yIChpbmNsdWRpbmcpICovCisJdTE2IGRldmlkX3N0YXJ0OworCS8qIGVuZCBkZXZpY2UgaWQgdGhpcyBlbnRyeSBpcyB1c2VkIGZvciAoaW5jbHVkaW5nKSAqLworCXUxNiBkZXZpZF9lbmQ7CisKKwkvKiBzdGFydCBhZGRyZXNzIHRvIHVuaXR5IG1hcCAoaW5jbHVkaW5nKSAqLworCXU2NCBhZGRyZXNzX3N0YXJ0OworCS8qIGVuZCBhZGRyZXNzIHRvIHVuaXR5IG1hcCAoaW5jbHVkaW5nKSAqLworCXU2NCBhZGRyZXNzX2VuZDsKKworCS8qIHJlcXVpcmVkIHByb3RlY3Rpb24gKi8KKwlpbnQgcHJvdDsKK307CisKKy8qCisgKiBMaXN0IG9mIGFsbCB1bml0eSBtYXBwaW5ncy4gSXQgaXMgbm90IGxvY2tlZCBiZWNhdXNlIGFzIHJ1bnRpbWUgaXQgaXMgb25seQorICogcmVhZC4gSXQgaXMgY3JlYXRlZCBhdCBBQ1BJIHRhYmxlIHBhcnNpbmcgdGltZS4KKyAqLworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYW1kX2lvbW11X3VuaXR5X21hcDsKKworLyoKKyAqIERhdGEgc3RydWN0dXJlcyBmb3IgZGV2aWNlIGhhbmRsaW5nCisgKi8KKworLyoKKyAqIERldmljZSB0YWJsZSB1c2VkIGJ5IGhhcmR3YXJlLiBSZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyBieSBzb2Z0d2FyZSBhcmUKKyAqIGxvY2tlZCB3aXRoIHRoZSBhbWRfaW9tbXVfcGRfdGFibGUgbG9jay4KKyAqLworZXh0ZXJuIHN0cnVjdCBkZXZfdGFibGVfZW50cnkgKmFtZF9pb21tdV9kZXZfdGFibGU7CisKKy8qCisgKiBBbGlhcyB0YWJsZSB0byBmaW5kIHJlcXVlc3RvciBpZHMgdG8gZGV2aWNlIGlkcy4gTm90IGxvY2tlZCBiZWNhdXNlIG9ubHkKKyAqIHJlYWQgb24gcnVudGltZS4KKyAqLworZXh0ZXJuIHUxNiAqYW1kX2lvbW11X2FsaWFzX3RhYmxlOworCisvKgorICogUmV2ZXJzZSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgSU9NTVUgd2hpY2ggdHJhbnNsYXRlcyBhIHNwZWNpZmljIGRldmljZS4KKyAqLworZXh0ZXJuIHN0cnVjdCBhbWRfaW9tbXUgKiphbWRfaW9tbXVfcmxvb2t1cF90YWJsZTsKKworLyogc2l6ZSBvZiB0aGUgZG1hX29wcyBhcGVydHVyZSBhcyBwb3dlciBvZiAyICovCitleHRlcm4gdW5zaWduZWQgYW1kX2lvbW11X2FwZXJ0dXJlX29yZGVyOworCisvKiBsYXJnZXN0IFBDSSBkZXZpY2UgaWQgd2UgZXhwZWN0IHRyYW5zbGF0aW9uIHJlcXVlc3RzIGZvciAqLworZXh0ZXJuIHUxNiBhbWRfaW9tbXVfbGFzdF9iZGY7CisKKy8qIGRhdGEgc3RydWN0dXJlcyBmb3IgcHJvdGVjdGlvbiBkb21haW4gaGFuZGxpbmcgKi8KK2V4dGVybiBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKiphbWRfaW9tbXVfcGRfdGFibGU7CisKKy8qIGFsbG9jYXRpb24gYml0bWFwIGZvciBkb21haW4gaWRzICovCitleHRlcm4gdW5zaWduZWQgbG9uZyAqYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcDsKKworLyogd2lsbCBiZSAxIGlmIGRldmljZSBpc29sYXRpb24gaXMgZW5hYmxlZCAqLworZXh0ZXJuIGludCBhbWRfaW9tbXVfaXNvbGF0ZTsKKworLyoKKyAqIElmIHRydWUsIHRoZSBhZGRyZXNzZXMgd2lsbCBiZSBmbHVzaGVkIG9uIHVubWFwIHRpbWUsIG5vdCB3aGVuCisgKiB0aGV5IGFyZSByZXVzZWQKKyAqLworZXh0ZXJuIGJvb2wgYW1kX2lvbW11X3VubWFwX2ZsdXNoOworCisvKiB0YWtlcyBhIFBDSSBkZXZpY2UgaWQgYW5kIHByaW50cyBpdCBvdXQgaW4gYSByZWFkYWJsZSBmb3JtICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfZGV2aWQodTE2IGRldmlkLCBpbnQgbmwpCit7CisJaW50IGJ1cyA9IGRldmlkID4+IDg7CisJaW50IGRldiA9IGRldmlkID4+IDMgJiAweDFmOworCWludCBmbiAgPSBkZXZpZCAmIDB4MDc7CisKKwlwcmludGsoIiUwMng6JTAyeC4leCIsIGJ1cywgZGV2LCBmbik7CisJaWYgKG5sKQorCQlwcmludGsoIlxuIik7Cit9CisKKy8qIHRha2VzIGJ1cyBhbmQgZGV2aWNlL2Z1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBkZXZpY2UgaWQKKyAqIEZJWE1FOiBzaG91bGQgdGhhdCBiZSBpbiBnZW5lcmljIFBDSSBjb2RlPyAqLworc3RhdGljIGlubGluZSB1MTYgY2FsY19kZXZpZCh1OCBidXMsIHU4IGRldmZuKQoreworCXJldHVybiAoKCh1MTYpYnVzKSA8PCA4KSB8IGRldmZuOworfQorCisjZW5kaWYgLyogX0FTTV9YODZfQU1EX0lPTU1VX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjE1MTBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCkBAIC0wLDAgKzEsMTk5IEBACisjaWZuZGVmIF9BU01fWDg2X0FQSUNfSAorI2RlZmluZSBfQVNNX1g4Nl9BUElDX0gKKworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisKKyNkZWZpbmUgQVJDSF9BUElDVElNRVJfU1RPUFNfT05fQzMJMQorCisvKgorICogRGVidWdnaW5nIG1hY3JvcworICovCisjZGVmaW5lIEFQSUNfUVVJRVQgICAwCisjZGVmaW5lIEFQSUNfVkVSQk9TRSAxCisjZGVmaW5lIEFQSUNfREVCVUcgICAyCisKKy8qCisgKiBEZWZpbmUgdGhlIGRlZmF1bHQgbGV2ZWwgb2Ygb3V0cHV0IHRvIGJlIHZlcnkgbGl0dGxlCisgKiBUaGlzIGNhbiBiZSB0dXJuZWQgdXAgYnkgdXNpbmcgYXBpYz12ZXJib3NlIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhbmQgYXBpYz1kZWJ1ZyBmb3IgX2xvdHNfIG9mIGluZm9ybWF0aW9uLgorICogYXBpY192ZXJib3NpdHkgaXMgZGVmaW5lZCBpbiBhcGljLmMKKyAqLworI2RlZmluZSBhcGljX3ByaW50ayh2LCBzLCBhLi4uKSBkbyB7ICAgICAgIFwKKwkJaWYgKCh2KSA8PSBhcGljX3ZlcmJvc2l0eSkgXAorCQkJcHJpbnRrKHMsICMjYSk7ICAgIFwKKwl9IHdoaWxlICgwKQorCisKK2V4dGVybiB2b2lkIGdlbmVyaWNfYXBpY19wcm9iZSh2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCitleHRlcm4gdW5zaWduZWQgaW50IGFwaWNfdmVyYm9zaXR5OworZXh0ZXJuIGludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOworCitleHRlcm4gaW50IGRpc2FibGVfYXBpYzsKKy8qCisgKiBCYXNpYyBmdW5jdGlvbnMgYWNjZXNzaW5nIEFQSUNzLgorICovCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZQorI2RlZmluZSBzZXR1cF9ib290X2Nsb2NrIHNldHVwX2Jvb3RfQVBJQ19jbG9jaworI2RlZmluZSBzZXR1cF9zZWNvbmRhcnlfY2xvY2sgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sKKyNlbmRpZgorCitleHRlcm4gaW50IGlzX3ZzbXBfYm94KHZvaWQpOworZXh0ZXJuIHZvaWQgeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKTsKK2V4dGVybiB1MzIgc2FmZV94YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpOworZXh0ZXJuIHU2NCB4YXBpY19pY3JfcmVhZCh2b2lkKTsKK2V4dGVybiB2b2lkIHhhcGljX2ljcl93cml0ZSh1MzIsIHUzMik7CitleHRlcm4gaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2FwaWNfbWVtX3dyaXRlKHUzMiByZWcsIHUzMiB2KQoreworCXZvbGF0aWxlIHUzMiAqYWRkciA9ICh2b2xhdGlsZSB1MzIgKikoQVBJQ19CQVNFICsgcmVnKTsKKworCWFsdGVybmF0aXZlX2lvKCJtb3ZsICUwLCAlMSIsICJ4Y2hnbCAlMCwgJTEiLCBYODZfRkVBVFVSRV8xMUFQLAorCQkgICAgICAgQVNNX09VVFBVVDIoIj1yIiAodiksICI9bSIgKCphZGRyKSksCisJCSAgICAgICBBU01fT1VUUFVUMigiMCIgKHYpLCAibSIgKCphZGRyKSkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBuYXRpdmVfYXBpY19tZW1fcmVhZCh1MzIgcmVnKQoreworCXJldHVybiAqKCh2b2xhdGlsZSB1MzIgKikoQVBJQ19CQVNFICsgcmVnKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfYXBpY19tc3Jfd3JpdGUodTMyIHJlZywgdTMyIHYpCit7CisJaWYgKHJlZyA9PSBBUElDX0RGUiB8fCByZWcgPT0gQVBJQ19JRCB8fCByZWcgPT0gQVBJQ19MRFIgfHwKKwkgICAgcmVnID09IEFQSUNfTFZSKQorCQlyZXR1cm47CisKKwl3cm1zcihBUElDX0JBU0VfTVNSICsgKHJlZyA+PiA0KSwgdiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG5hdGl2ZV9hcGljX21zcl9yZWFkKHUzMiByZWcpCit7CisJdTMyIGxvdywgaGlnaDsKKworCWlmIChyZWcgPT0gQVBJQ19ERlIpCisJCXJldHVybiAtMTsKKworCXJkbXNyKEFQSUNfQkFTRV9NU1IgKyAocmVnID4+IDQpLCBsb3csIGhpZ2gpOworCXJldHVybiBsb3c7Cit9CisKKyNpZm5kZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIGludCB4MmFwaWMsIHgyYXBpY19wcmVlbmFibGVkOworZXh0ZXJuIHZvaWQgY2hlY2tfeDJhcGljKHZvaWQpOworZXh0ZXJuIHZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCk7CitleHRlcm4gdm9pZCB4MmFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCk7CitzdGF0aWMgaW5saW5lIGludCB4MmFwaWNfZW5hYmxlZCh2b2lkKQoreworCWludCBtc3IsIG1zcjI7CisKKwlpZiAoIWNwdV9oYXNfeDJhcGljKQorCQlyZXR1cm4gMDsKKworCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOworCWlmIChtc3IgJiBYMkFQSUNfRU5BQkxFKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHgyYXBpY19lbmFibGVkKCkJMAorI2VuZGlmCisKK3N0cnVjdCBhcGljX29wcyB7CisJdTMyICgqcmVhZCkodTMyIHJlZyk7CisJdm9pZCAoKndyaXRlKSh1MzIgcmVnLCB1MzIgdik7CisJdTY0ICgqaWNyX3JlYWQpKHZvaWQpOworCXZvaWQgKCppY3Jfd3JpdGUpKHUzMiBsb3csIHUzMiBoaWdoKTsKKwl2b2lkICgqd2FpdF9pY3JfaWRsZSkodm9pZCk7CisJdTMyICgqc2FmZV93YWl0X2ljcl9pZGxlKSh2b2lkKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgYXBpY19vcHMgKmFwaWNfb3BzOworCisjZGVmaW5lIGFwaWNfcmVhZCAoYXBpY19vcHMtPnJlYWQpCisjZGVmaW5lIGFwaWNfd3JpdGUgKGFwaWNfb3BzLT53cml0ZSkKKyNkZWZpbmUgYXBpY19pY3JfcmVhZCAoYXBpY19vcHMtPmljcl9yZWFkKQorI2RlZmluZSBhcGljX2ljcl93cml0ZSAoYXBpY19vcHMtPmljcl93cml0ZSkKKyNkZWZpbmUgYXBpY193YWl0X2ljcl9pZGxlIChhcGljX29wcy0+d2FpdF9pY3JfaWRsZSkKKyNkZWZpbmUgc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUgKGFwaWNfb3BzLT5zYWZlX3dhaXRfaWNyX2lkbGUpCisKK2V4dGVybiBpbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfeDJBUElDX2lycSh2b2lkKQoreworCS8qIERvY3Mgc2F5IHVzZSAwIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eSAqLworCW5hdGl2ZV9hcGljX21zcl93cml0ZShBUElDX0VPSSwgMCk7Cit9CisjZW5kaWYKKworCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX0FQSUNfaXJxKHZvaWQpCit7CisJLyoKKwkgKiBhY2tfQVBJQ19pcnEoKSBhY3R1YWxseSBnZXRzIGNvbXBpbGVkIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uCisJICogLi4uIHl1bW1pZS4KKwkgKi8KKworCS8qIERvY3Mgc2F5IHVzZSAwIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eSAqLworCWFwaWNfd3JpdGUoQVBJQ19FT0ksIDApOworfQorCitleHRlcm4gaW50IGxhcGljX2dldF9tYXhsdnQodm9pZCk7CitleHRlcm4gdm9pZCBjbGVhcl9sb2NhbF9BUElDKHZvaWQpOworZXh0ZXJuIHZvaWQgY29ubmVjdF9ic3BfQVBJQyh2b2lkKTsKK2V4dGVybiB2b2lkIGRpc2Nvbm5lY3RfYnNwX0FQSUMoaW50IHZpcnRfd2lyZV9zZXR1cCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCk7CitleHRlcm4gdm9pZCBsYXBpY19zaHV0ZG93bih2b2lkKTsKK2V4dGVybiBpbnQgdmVyaWZ5X2xvY2FsX0FQSUModm9pZCk7CitleHRlcm4gdm9pZCBjYWNoZV9BUElDX3JlZ2lzdGVycyh2b2lkKTsKK2V4dGVybiB2b2lkIHN5bmNfQXJiX0lEcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfYnNwX0FQSUModm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpOworZXh0ZXJuIHZvaWQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgQVBJQ19pbml0X3VuaXByb2Nlc3Nvcih2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKHZvaWQpOworCisvKgorICogT24gMzJiaXQgdGhpcyBpcyBtYWNoLXh4eCBsb2NhbAorICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9sYXBpY19tYXBwaW5nKHZvaWQpOworZXh0ZXJuIGludCBhcGljX2lzX2NsdXN0ZXJlZF9ib3godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworZXh0ZXJuIHU4IHNldHVwX0FQSUNfZWlsdnRfbWNlKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spOworZXh0ZXJuIHU4IHNldHVwX0FQSUNfZWlsdnRfaWJzKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spOworCisKKyNlbHNlIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsYXBpY19zaHV0ZG93bih2b2lkKSB7IH0KKyNkZWZpbmUgbG9jYWxfYXBpY190aW1lcl9jMl9vawkJMQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKSB7IH0KKworI2VuZGlmIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMTM0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKQEAgLTAsMCArMSw0MTcgQEAKKyNpZm5kZWYgX0FTTV9YODZfQVBJQ0RFRl9ICisjZGVmaW5lIF9BU01fWDg2X0FQSUNERUZfSAorCisvKgorICogQ29uc3RhbnRzIGZvciB2YXJpb3VzIEludGVsIEFQSUNzLiAobG9jYWwgQVBJQywgSU9BUElDLCBldGMuKQorICoKKyAqIEFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+LCAxOTk1LgorICogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+LCAxOTk5LCAyMDAwCisgKi8KKworI2RlZmluZQlBUElDX0RFRkFVTFRfUEhZU19CQVNFCTB4ZmVlMDAwMDAKKworI2RlZmluZQlBUElDX0lECQkweDIwCisKKyNkZWZpbmUJQVBJQ19MVlIJMHgzMAorI2RlZmluZQkJQVBJQ19MVlJfTUFTSwkJMHhGRjAwRkYKKyNkZWZpbmUJCUdFVF9BUElDX1ZFUlNJT04oeCkJKCh4KSAmIDB4RkZ1KQorI2RlZmluZQkJR0VUX0FQSUNfTUFYTFZUKHgpCSgoKHgpID4+IDE2KSAmIDB4RkZ1KQorI2lmZGVmIENPTkZJR19YODZfMzIKKyMgIGRlZmluZQlBUElDX0lOVEVHUkFURUQoeCkJKCh4KSAmIDB4RjB1KQorI2Vsc2UKKyMgIGRlZmluZQlBUElDX0lOVEVHUkFURUQoeCkJKDEpCisjZW5kaWYKKyNkZWZpbmUJCUFQSUNfWEFQSUMoeCkJCSgoeCkgPj0gMHgxNCkKKyNkZWZpbmUJQVBJQ19UQVNLUFJJCTB4ODAKKyNkZWZpbmUJCUFQSUNfVFBSSV9NQVNLCQkweEZGdQorI2RlZmluZQlBUElDX0FSQlBSSQkweDkwCisjZGVmaW5lCQlBUElDX0FSQlBSSV9NQVNLCTB4RkZ1CisjZGVmaW5lCUFQSUNfUFJPQ1BSSQkweEEwCisjZGVmaW5lCUFQSUNfRU9JCTB4QjAKKyNkZWZpbmUJCUFQSUNfRUlPX0FDSwkJMHgwCisjZGVmaW5lCUFQSUNfUlJSCTB4QzAKKyNkZWZpbmUJQVBJQ19MRFIJMHhEMAorI2RlZmluZQkJQVBJQ19MRFJfTUFTSwkJKDB4RkZ1IDw8IDI0KQorI2RlZmluZQkJR0VUX0FQSUNfTE9HSUNBTF9JRCh4KQkoKCh4KSA+PiAyNCkgJiAweEZGdSkKKyNkZWZpbmUJCVNFVF9BUElDX0xPR0lDQUxfSUQoeCkJKCgoeCkgPDwgMjQpKQorI2RlZmluZQkJQVBJQ19BTExfQ1BVUwkJMHhGRnUKKyNkZWZpbmUJQVBJQ19ERlIJMHhFMAorI2RlZmluZQkJQVBJQ19ERlJfQ0xVU1RFUgkJMHgwRkZGRkZGRnVsCisjZGVmaW5lCQlBUElDX0RGUl9GTEFUCQkJMHhGRkZGRkZGRnVsCisjZGVmaW5lCUFQSUNfU1BJVgkweEYwCisjZGVmaW5lCQlBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQJKDEgPDwgOSkKKyNkZWZpbmUJCUFQSUNfU1BJVl9BUElDX0VOQUJMRUQJCSgxIDw8IDgpCisjZGVmaW5lCUFQSUNfSVNSCTB4MTAwCisjZGVmaW5lCUFQSUNfSVNSX05SICAgICAweDggICAgIC8qIE51bWJlciBvZiAzMiBiaXQgSVNSIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUJQVBJQ19UTVIJMHgxODAKKyNkZWZpbmUJQVBJQ19JUlIJMHgyMDAKKyNkZWZpbmUJQVBJQ19FU1IJMHgyODAKKyNkZWZpbmUJCUFQSUNfRVNSX1NFTkRfQ1MJMHgwMDAwMQorI2RlZmluZQkJQVBJQ19FU1JfUkVDVl9DUwkweDAwMDAyCisjZGVmaW5lCQlBUElDX0VTUl9TRU5EX0FDQwkweDAwMDA0CisjZGVmaW5lCQlBUElDX0VTUl9SRUNWX0FDQwkweDAwMDA4CisjZGVmaW5lCQlBUElDX0VTUl9TRU5ESUxMCTB4MDAwMjAKKyNkZWZpbmUJCUFQSUNfRVNSX1JFQ1ZJTEwJMHgwMDA0MAorI2RlZmluZQkJQVBJQ19FU1JfSUxMUkVHQQkweDAwMDgwCisjZGVmaW5lCUFQSUNfSUNSCTB4MzAwCisjZGVmaW5lCQlBUElDX0RFU1RfU0VMRgkJMHg0MDAwMAorI2RlZmluZQkJQVBJQ19ERVNUX0FMTElOQwkweDgwMDAwCisjZGVmaW5lCQlBUElDX0RFU1RfQUxMQlVUCTB4QzAwMDAKKyNkZWZpbmUJCUFQSUNfSUNSX1JSX01BU0sJMHgzMDAwMAorI2RlZmluZQkJQVBJQ19JQ1JfUlJfSU5WQUxJRAkweDAwMDAwCisjZGVmaW5lCQlBUElDX0lDUl9SUl9JTlBST0cJMHgxMDAwMAorI2RlZmluZQkJQVBJQ19JQ1JfUlJfVkFMSUQJMHgyMDAwMAorI2RlZmluZQkJQVBJQ19JTlRfTEVWRUxUUklHCTB4MDgwMDAKKyNkZWZpbmUJCUFQSUNfSU5UX0FTU0VSVAkJMHgwNDAwMAorI2RlZmluZQkJQVBJQ19JQ1JfQlVTWQkJMHgwMTAwMAorI2RlZmluZQkJQVBJQ19ERVNUX0xPR0lDQUwJMHgwMDgwMAorI2RlZmluZQkJQVBJQ19ERVNUX1BIWVNJQ0FMCTB4MDAwMDAKKyNkZWZpbmUJCUFQSUNfRE1fRklYRUQJCTB4MDAwMDAKKyNkZWZpbmUJCUFQSUNfRE1fTE9XRVNUCQkweDAwMTAwCisjZGVmaW5lCQlBUElDX0RNX1NNSQkJMHgwMDIwMAorI2RlZmluZQkJQVBJQ19ETV9SRU1SRAkJMHgwMDMwMAorI2RlZmluZQkJQVBJQ19ETV9OTUkJCTB4MDA0MDAKKyNkZWZpbmUJCUFQSUNfRE1fSU5JVAkJMHgwMDUwMAorI2RlZmluZQkJQVBJQ19ETV9TVEFSVFVQCQkweDAwNjAwCisjZGVmaW5lCQlBUElDX0RNX0VYVElOVAkJMHgwMDcwMAorI2RlZmluZQkJQVBJQ19WRUNUT1JfTUFTSwkweDAwMEZGCisjZGVmaW5lCUFQSUNfSUNSMgkweDMxMAorI2RlZmluZQkJR0VUX0FQSUNfREVTVF9GSUVMRCh4KQkoKCh4KSA+PiAyNCkgJiAweEZGKQorI2RlZmluZQkJU0VUX0FQSUNfREVTVF9GSUVMRCh4KQkoKHgpIDw8IDI0KQorI2RlZmluZQlBUElDX0xWVFQJMHgzMjAKKyNkZWZpbmUJQVBJQ19MVlRUSE1SCTB4MzMwCisjZGVmaW5lCUFQSUNfTFZUUEMJMHgzNDAKKyNkZWZpbmUJQVBJQ19MVlQwCTB4MzUwCisjZGVmaW5lCQlBUElDX0xWVF9USU1FUl9CQVNFX01BU0sJKDB4MyA8PCAxOCkKKyNkZWZpbmUJCUdFVF9BUElDX1RJTUVSX0JBU0UoeCkJCSgoKHgpID4+IDE4KSAmIDB4MykKKyNkZWZpbmUJCVNFVF9BUElDX1RJTUVSX0JBU0UoeCkJCSgoKHgpIDw8IDE4KSkKKyNkZWZpbmUJCUFQSUNfVElNRVJfQkFTRV9DTEtJTgkJMHgwCisjZGVmaW5lCQlBUElDX1RJTUVSX0JBU0VfVE1CQVNFCQkweDEKKyNkZWZpbmUJCUFQSUNfVElNRVJfQkFTRV9ESVYJCTB4MgorI2RlZmluZQkJQVBJQ19MVlRfVElNRVJfUEVSSU9ESUMJCSgxIDw8IDE3KQorI2RlZmluZQkJQVBJQ19MVlRfTUFTS0VECQkJKDEgPDwgMTYpCisjZGVmaW5lCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSCQkoMSA8PCAxNSkKKyNkZWZpbmUJCUFQSUNfTFZUX1JFTU9URV9JUlIJCSgxIDw8IDE0KQorI2RlZmluZQkJQVBJQ19JTlBVVF9QT0xBUklUWQkJKDEgPDwgMTMpCisjZGVmaW5lCQlBUElDX1NFTkRfUEVORElORwkJKDEgPDwgMTIpCisjZGVmaW5lCQlBUElDX01PREVfTUFTSwkJCTB4NzAwCisjZGVmaW5lCQlHRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHgpCSgoKHgpID4+IDgpICYgMHg3KQorI2RlZmluZQkJU0VUX0FQSUNfREVMSVZFUllfTU9ERSh4LCB5KQkoKCh4KSAmIH4weDcwMCkgfCAoKHkpIDw8IDgpKQorI2RlZmluZQkJCUFQSUNfTU9ERV9GSVhFRAkJMHgwCisjZGVmaW5lCQkJQVBJQ19NT0RFX05NSQkJMHg0CisjZGVmaW5lCQkJQVBJQ19NT0RFX0VYVElOVAkweDcKKyNkZWZpbmUJQVBJQ19MVlQxCTB4MzYwCisjZGVmaW5lCUFQSUNfTFZURVJSCTB4MzcwCisjZGVmaW5lCUFQSUNfVE1JQ1QJMHgzODAKKyNkZWZpbmUJQVBJQ19UTUNDVAkweDM5MAorI2RlZmluZQlBUElDX1REQ1IJMHgzRTAKKyNkZWZpbmUgQVBJQ19TRUxGX0lQSQkweDNGMAorI2RlZmluZQkJQVBJQ19URFJfRElWX1RNQkFTRQkoMSA8PCAyKQorI2RlZmluZQkJQVBJQ19URFJfRElWXzEJCTB4QgorI2RlZmluZQkJQVBJQ19URFJfRElWXzIJCTB4MAorI2RlZmluZQkJQVBJQ19URFJfRElWXzQJCTB4MQorI2RlZmluZQkJQVBJQ19URFJfRElWXzgJCTB4MgorI2RlZmluZQkJQVBJQ19URFJfRElWXzE2CQkweDMKKyNkZWZpbmUJCUFQSUNfVERSX0RJVl8zMgkJMHg4CisjZGVmaW5lCQlBUElDX1REUl9ESVZfNjQJCTB4OQorI2RlZmluZQkJQVBJQ19URFJfRElWXzEyOAkweEEKKyNkZWZpbmUJQVBJQ19FSUxWVDAgICAgIDB4NTAwCisjZGVmaW5lCQlBUElDX0VJTFZUX05SX0FNRF9LOAkxCS8qICMgb2YgZXh0ZW5kZWQgaW50ZXJydXB0cyAqLworI2RlZmluZQkJQVBJQ19FSUxWVF9OUl9BTURfMTBICTQKKyNkZWZpbmUJCUFQSUNfRUlMVlRfTFZUT0ZGKHgpCSgoKHgpID4+IDQpICYgMHhGKQorI2RlZmluZQkJQVBJQ19FSUxWVF9NU0dfRklYCTB4MAorI2RlZmluZQkJQVBJQ19FSUxWVF9NU0dfU01JCTB4MgorI2RlZmluZQkJQVBJQ19FSUxWVF9NU0dfTk1JCTB4NAorI2RlZmluZQkJQVBJQ19FSUxWVF9NU0dfRVhUCTB4NworI2RlZmluZQkJQVBJQ19FSUxWVF9NQVNLRUQJKDEgPDwgMTYpCisjZGVmaW5lCUFQSUNfRUlMVlQxICAgICAweDUxMAorI2RlZmluZQlBUElDX0VJTFZUMiAgICAgMHg1MjAKKyNkZWZpbmUJQVBJQ19FSUxWVDMgICAgIDB4NTMwCisKKyNkZWZpbmUgQVBJQ19CQVNFIChmaXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSkKKyNkZWZpbmUgQVBJQ19CQVNFX01TUgkweDgwMAorI2RlZmluZSBYMkFQSUNfRU5BQkxFCSgxVUwgPDwgMTApCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBNQVhfSU9fQVBJQ1MgNjQKKyNlbHNlCisjIGRlZmluZSBNQVhfSU9fQVBJQ1MgMTI4CisjIGRlZmluZSBNQVhfTE9DQUxfQVBJQyAzMjc2OAorI2VuZGlmCisKKy8qCisgKiBBbGwgeDg2LTY0IHN5c3RlbXMgYXJlIHhBUElDIGNvbXBhdGlibGUuCisgKiBJbiB0aGUgZm9sbG93aW5nLCAiYXBpY2lkIiBpcyBhIHBoeXNpY2FsIEFQSUMgSUQuCisgKi8KKyNkZWZpbmUgWEFQSUNfREVTVF9DUFVTX1NISUZUCTQKKyNkZWZpbmUgWEFQSUNfREVTVF9DUFVTX01BU0sJKCgxdSA8PCBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpIC0gMSkKKyNkZWZpbmUgWEFQSUNfREVTVF9DTFVTVEVSX01BU0sJKFhBUElDX0RFU1RfQ1BVU19NQVNLIDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkKKyNkZWZpbmUgQVBJQ19DTFVTVEVSKGFwaWNpZCkJKChhcGljaWQpICYgWEFQSUNfREVTVF9DTFVTVEVSX01BU0spCisjZGVmaW5lIEFQSUNfQ0xVU1RFUklEKGFwaWNpZCkJKEFQSUNfQ0xVU1RFUihhcGljaWQpID4+IFhBUElDX0RFU1RfQ1BVU19TSElGVCkKKyNkZWZpbmUgQVBJQ19DUFVJRChhcGljaWQpCSgoYXBpY2lkKSAmIFhBUElDX0RFU1RfQ1BVU19NQVNLKQorI2RlZmluZSBOVU1fQVBJQ19DTFVTVEVSUwkoKEJBRF9BUElDSUQgKyAxKSA+PiBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpCisKKy8qCisgKiB0aGUgbG9jYWwgQVBJQyByZWdpc3RlciBzdHJ1Y3R1cmUsIG1lbW9yeSBtYXBwZWQuIE5vdCB0ZXJyaWJseSB3ZWxsCisgKiB0ZXN0ZWQsIGJ1dCB3ZSBtaWdodCBldmVudHVhbGx5IHVzZSB0aGlzIG9uZSBpbiB0aGUgZnV0dXJlIC0gdGhlCisgKiBwcm9ibGVtIHdoeSB3ZSBjYW5ub3QgdXNlIGl0IHJpZ2h0IG5vdyBpcyB0aGUgUDUgQVBJQywgaXQgaGFzIGFuCisgKiBlcnJhdGEgd2hpY2ggY2Fubm90IHRha2UgOC1iaXQgcmVhZHMgYW5kIHdyaXRlcywgb25seSAzMi1iaXQgb25lcyAuLi4KKyAqLworI2RlZmluZSB1MzIgdW5zaWduZWQgaW50CisKK3N0cnVjdCBsb2NhbF9hcGljIHsKKworLyowMDAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAxOworCisvKjAxMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDI7CisKKy8qMDIwKi8Jc3RydWN0IHsgLyogQVBJQyBJRCBSZWdpc3RlciAqLworCQl1MzIgICBfX3Jlc2VydmVkXzEJOiAyNCwKKwkJCXBoeXNfYXBpY19pZAk6ICA0LAorCQkJX19yZXNlcnZlZF8yCTogIDQ7CisJCXUzMiBfX3Jlc2VydmVkWzNdOworCX0gaWQ7CisKKy8qMDMwKi8JY29uc3QKKwlzdHJ1Y3QgeyAvKiBBUElDIFZlcnNpb24gUmVnaXN0ZXIgKi8KKwkJdTMyICAgdmVyc2lvbgkJOiAgOCwKKwkJCV9fcmVzZXJ2ZWRfMQk6ICA4LAorCQkJbWF4X2x2dAkJOiAgOCwKKwkJCV9fcmVzZXJ2ZWRfMgk6ICA4OworCQl1MzIgX19yZXNlcnZlZFszXTsKKwl9IHZlcnNpb247CisKKy8qMDQwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMzsKKworLyowNTAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA0OworCisvKjA2MCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDU7CisKKy8qMDcwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNjsKKworLyowODAqLwlzdHJ1Y3QgeyAvKiBUYXNrIFByaW9yaXR5IFJlZ2lzdGVyICovCisJCXUzMiAgIHByaW9yaXR5CTogIDgsCisJCQlfX3Jlc2VydmVkXzEJOiAyNDsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IHRwcjsKKworLyowOTAqLwljb25zdAorCXN0cnVjdCB7IC8qIEFyYml0cmF0aW9uIFByaW9yaXR5IFJlZ2lzdGVyICovCisJCXUzMiAgIHByaW9yaXR5CTogIDgsCisJCQlfX3Jlc2VydmVkXzEJOiAyNDsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IGFwcjsKKworLyowQTAqLwljb25zdAorCXN0cnVjdCB7IC8qIFByb2Nlc3NvciBQcmlvcml0eSBSZWdpc3RlciAqLworCQl1MzIgICBwcmlvcml0eQk6ICA4LAorCQkJX19yZXNlcnZlZF8xCTogMjQ7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSBwcHI7CisKKy8qMEIwKi8Jc3RydWN0IHsgLyogRW5kIE9mIEludGVycnVwdCBSZWdpc3RlciAqLworCQl1MzIgICBlb2k7CisJCXUzMiBfX3Jlc2VydmVkWzNdOworCX0gZW9pOworCisvKjBDMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDc7CisKKy8qMEQwKi8Jc3RydWN0IHsgLyogTG9naWNhbCBEZXN0aW5hdGlvbiBSZWdpc3RlciAqLworCQl1MzIgICBfX3Jlc2VydmVkXzEJOiAyNCwKKwkJCWxvZ2ljYWxfZGVzdAk6ICA4OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gbGRyOworCisvKjBFMCovCXN0cnVjdCB7IC8qIERlc3RpbmF0aW9uIEZvcm1hdCBSZWdpc3RlciAqLworCQl1MzIgICBfX3Jlc2VydmVkXzEJOiAyOCwKKwkJCW1vZGVsCQk6ICA0OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gZGZyOworCisvKjBGMCovCXN0cnVjdCB7IC8qIFNwdXJpb3VzIEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgKi8KKwkJdTMyCXNwdXJpb3VzX3ZlY3Rvcgk6ICA4LAorCQkJYXBpY19lbmFibGVkCTogIDEsCisJCQlmb2N1c19jcHUJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgk6IDIyOworCQl1MzIgX19yZXNlcnZlZF8zWzNdOworCX0gc3ZyOworCisvKjEwMCovCXN0cnVjdCB7IC8qIEluIFNlcnZpY2UgUmVnaXN0ZXIgKi8KKy8qMTcwKi8JCXUzMiBiaXRmaWVsZDsKKwkJdTMyIF9fcmVzZXJ2ZWRbM107CisJfSBpc3IgWzhdOworCisvKjE4MCovCXN0cnVjdCB7IC8qIFRyaWdnZXIgTW9kZSBSZWdpc3RlciAqLworLyoxRjAqLwkJdTMyIGJpdGZpZWxkOworCQl1MzIgX19yZXNlcnZlZFszXTsKKwl9IHRtciBbOF07CisKKy8qMjAwKi8Jc3RydWN0IHsgLyogSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIgKi8KKy8qMjcwKi8JCXUzMiBiaXRmaWVsZDsKKwkJdTMyIF9fcmVzZXJ2ZWRbM107CisJfSBpcnIgWzhdOworCisvKjI4MCovCXVuaW9uIHsgLyogRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisJCXN0cnVjdCB7CisJCQl1MzIgICBzZW5kX2NzX2Vycm9yCQkJOiAgMSwKKwkJCQlyZWNlaXZlX2NzX2Vycm9yCQk6ICAxLAorCQkJCXNlbmRfYWNjZXB0X2Vycm9yCQk6ICAxLAorCQkJCXJlY2VpdmVfYWNjZXB0X2Vycm9yCQk6ICAxLAorCQkJCV9fcmVzZXJ2ZWRfMQkJCTogIDEsCisJCQkJc2VuZF9pbGxlZ2FsX3ZlY3RvcgkJOiAgMSwKKwkJCQlyZWNlaXZlX2lsbGVnYWxfdmVjdG9yCQk6ICAxLAorCQkJCWlsbGVnYWxfcmVnaXN0ZXJfYWRkcmVzcwk6ICAxLAorCQkJCV9fcmVzZXJ2ZWRfMgkJCTogMjQ7CisJCQl1MzIgX19yZXNlcnZlZF8zWzNdOworCQl9IGVycm9yX2JpdHM7CisJCXN0cnVjdCB7CisJCQl1MzIgZXJyb3JzOworCQkJdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKwkJfSBhbGxfZXJyb3JzOworCX0gZXNyOworCisvKjI5MCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDg7CisKKy8qMkEwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wOTsKKworLyoyQjAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEwOworCisvKjJDMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTE7CisKKy8qMkQwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMjsKKworLyoyRTAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEzOworCisvKjJGMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTQ7CisKKy8qMzAwKi8Jc3RydWN0IHsgLyogSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXIgMSAqLworCQl1MzIgICB2ZWN0b3IJCQk6ICA4LAorCQkJZGVsaXZlcnlfbW9kZQkJOiAgMywKKwkJCWRlc3RpbmF0aW9uX21vZGUJOiAgMSwKKwkJCWRlbGl2ZXJ5X3N0YXR1cwkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMQkJOiAgMSwKKwkJCWxldmVsCQkJOiAgMSwKKwkJCXRyaWdnZXIJCQk6ICAxLAorCQkJX19yZXNlcnZlZF8yCQk6ICAyLAorCQkJc2hvcnRoYW5kCQk6ICAyLAorCQkJX19yZXNlcnZlZF8zCQk6ICAxMjsKKwkJdTMyIF9fcmVzZXJ2ZWRfNFszXTsKKwl9IGljcjE7CisKKy8qMzEwKi8Jc3RydWN0IHsgLyogSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXIgMiAqLworCQl1bmlvbiB7CisJCQl1MzIgICBfX3Jlc2VydmVkXzEJOiAyNCwKKwkJCQlwaHlzX2Rlc3QJOiAgNCwKKwkJCQlfX3Jlc2VydmVkXzIJOiAgNDsKKwkJCXUzMiAgIF9fcmVzZXJ2ZWRfMwk6IDI0LAorCQkJCWxvZ2ljYWxfZGVzdAk6ICA4OworCQl9IGRlc3Q7CisJCXUzMiBfX3Jlc2VydmVkXzRbM107CisJfSBpY3IyOworCisvKjMyMCovCXN0cnVjdCB7IC8qIExWVCAtIFRpbWVyICovCisJCXUzMiAgIHZlY3RvcgkJOiAgOCwKKwkJCV9fcmVzZXJ2ZWRfMQk6ICA0LAorCQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCQlfX3Jlc2VydmVkXzIJOiAgMywKKwkJCW1hc2sJCTogIDEsCisJCQl0aW1lcl9tb2RlCTogIDEsCisJCQlfX3Jlc2VydmVkXzMJOiAxNDsKKwkJdTMyIF9fcmVzZXJ2ZWRfNFszXTsKKwl9IGx2dF90aW1lcjsKKworLyozMzAqLwlzdHJ1Y3QgeyAvKiBMVlQgLSBUaGVybWFsIFNlbnNvciAqLworCQl1MzIgIHZlY3RvcgkJOiAgOCwKKwkJCWRlbGl2ZXJ5X21vZGUJOiAgMywKKwkJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCQlfX3Jlc2VydmVkXzIJOiAgMywKKwkJCW1hc2sJCTogIDEsCisJCQlfX3Jlc2VydmVkXzMJOiAxNTsKKwkJdTMyIF9fcmVzZXJ2ZWRfNFszXTsKKwl9IGx2dF90aGVybWFsOworCisvKjM0MCovCXN0cnVjdCB7IC8qIExWVCAtIFBlcmZvcm1hbmNlIENvdW50ZXIgKi8KKwkJdTMyICAgdmVjdG9yCQk6ICA4LAorCQkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQkJX19yZXNlcnZlZF8xCTogIDEsCisJCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgk6ICAzLAorCQkJbWFzawkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMwk6IDE1OworCQl1MzIgX19yZXNlcnZlZF80WzNdOworCX0gbHZ0X3BjOworCisvKjM1MCovCXN0cnVjdCB7IC8qIExWVCAtIExJTlQwICovCisJCXUzMiAgIHZlY3RvcgkJOiAgOCwKKwkJCWRlbGl2ZXJ5X21vZGUJOiAgMywKKwkJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCQlwb2xhcml0eQk6ICAxLAorCQkJcmVtb3RlX2lycgk6ICAxLAorCQkJdHJpZ2dlcgkJOiAgMSwKKwkJCW1hc2sJCTogIDEsCisJCQlfX3Jlc2VydmVkXzIJOiAxNTsKKwkJdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKwl9IGx2dF9saW50MDsKKworLyozNjAqLwlzdHJ1Y3QgeyAvKiBMVlQgLSBMSU5UMSAqLworCQl1MzIgICB2ZWN0b3IJCTogIDgsCisJCQlkZWxpdmVyeV9tb2RlCTogIDMsCisJCQlfX3Jlc2VydmVkXzEJOiAgMSwKKwkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAorCQkJcG9sYXJpdHkJOiAgMSwKKwkJCXJlbW90ZV9pcnIJOiAgMSwKKwkJCXRyaWdnZXIJCTogIDEsCisJCQltYXNrCQk6ICAxLAorCQkJX19yZXNlcnZlZF8yCTogMTU7CisJCXUzMiBfX3Jlc2VydmVkXzNbM107CisJfSBsdnRfbGludDE7CisKKy8qMzcwKi8Jc3RydWN0IHsgLyogTFZUIC0gRXJyb3IgKi8KKwkJdTMyICAgdmVjdG9yCQk6ICA4LAorCQkJX19yZXNlcnZlZF8xCTogIDQsCisJCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgk6ICAzLAorCQkJbWFzawkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMwk6IDE1OworCQl1MzIgX19yZXNlcnZlZF80WzNdOworCX0gbHZ0X2Vycm9yOworCisvKjM4MCovCXN0cnVjdCB7IC8qIFRpbWVyIEluaXRpYWwgQ291bnQgUmVnaXN0ZXIgKi8KKwkJdTMyICAgaW5pdGlhbF9jb3VudDsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IHRpbWVyX2ljcjsKKworLyozOTAqLwljb25zdAorCXN0cnVjdCB7IC8qIFRpbWVyIEN1cnJlbnQgQ291bnQgUmVnaXN0ZXIgKi8KKwkJdTMyICAgY3Vycl9jb3VudDsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IHRpbWVyX2NjcjsKKworLyozQTAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE2OworCisvKjNCMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTc7CisKKy8qM0MwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xODsKKworLyozRDAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE5OworCisvKjNFMCovCXN0cnVjdCB7IC8qIFRpbWVyIERpdmlkZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJCXUzMiAgIGRpdmlzb3IJCTogIDQsCisJCQlfX3Jlc2VydmVkXzEJOiAyODsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IHRpbWVyX2RjcjsKKworLyozRjAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzIwOworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI3VuZGVmIHUzMgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorICNkZWZpbmUgQkFEX0FQSUNJRCAweEZGdQorI2Vsc2UKKyAjZGVmaW5lIEJBRF9BUElDSUQgMHhGRkZGdQorI2VuZGlmCisjZW5kaWYgLyogX0FTTV9YODZfQVBJQ0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcmNoX2hvb2tzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcmNoX2hvb2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNDk1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FyY2hfaG9va3MuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9BU01fWDg2X0FSQ0hfSE9PS1NfSAorI2RlZmluZSBfQVNNX1g4Nl9BUkNIX0hPT0tTX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisvKgorICoJbGludXgvaW5jbHVkZS9hc20vYXJjaF9ob29rcy5oCisgKgorICoJZGVmaW5lIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaG9va3MKKyAqLworCisvKiB0aGVzZSBhcmVuJ3QgYXJjaCBob29rcywgdGhleSBhcmUgZ2VuZXJpYyByb3V0aW5lcworICogdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgaG9va3MgKi8KK2V4dGVybiB2b2lkIGluaXRfSVNBX2lycXModm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKKy8qIHRoZXNlIGFyZSB0aGUgZGVmaW5lZCBob29rcyAqLworZXh0ZXJuIHZvaWQgaW50cl9pbml0X2hvb2sodm9pZCk7CitleHRlcm4gdm9pZCBwcmVfaW50cl9pbml0X2hvb2sodm9pZCk7CitleHRlcm4gdm9pZCBwcmVfc2V0dXBfYXJjaF9ob29rKHZvaWQpOworZXh0ZXJuIHZvaWQgdHJhcF9pbml0X2hvb2sodm9pZCk7CitleHRlcm4gdm9pZCBwcmVfdGltZV9pbml0X2hvb2sodm9pZCk7CitleHRlcm4gdm9pZCB0aW1lX2luaXRfaG9vayh2b2lkKTsKK2V4dGVybiB2b2lkIG1jYV9ubWlfaG9vayh2b2lkKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0FSQ0hfSE9PS1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXNtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJlNzhmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXNtLmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BU01fSAorI2RlZmluZSBfQVNNX1g4Nl9BU01fSAorCisjaWZkZWYgX19BU1NFTUJMWV9fCisjIGRlZmluZSBfX0FTTV9GT1JNKHgpCXgKKyMgZGVmaW5lIF9fQVNNX0VYX1NFQwkuc2VjdGlvbiBfX2V4X3RhYmxlCisjZWxzZQorIyBkZWZpbmUgX19BU01fRk9STSh4KQkiICIgI3ggIiAiCisjIGRlZmluZSBfX0FTTV9FWF9TRUMJIiAuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgZGVmaW5lIF9fQVNNX1NFTChhLGIpIF9fQVNNX0ZPUk0oYSkKKyNlbHNlCisjIGRlZmluZSBfX0FTTV9TRUwoYSxiKSBfX0FTTV9GT1JNKGIpCisjZW5kaWYKKworI2RlZmluZSBfX0FTTV9TSVpFKGluc3QpCV9fQVNNX1NFTChpbnN0IyNsLCBpbnN0IyNxKQorI2RlZmluZSBfX0FTTV9SRUcocmVnKQkJX19BU01fU0VMKGUjI3JlZywgciMjcmVnKQorCisjZGVmaW5lIF9BU01fUFRSCV9fQVNNX1NFTCgubG9uZywgLnF1YWQpCisjZGVmaW5lIF9BU01fQUxJR04JX19BU01fU0VMKC5iYWxpZ24gNCwgLmJhbGlnbiA4KQorCisjZGVmaW5lIF9BU01fTU9WCV9fQVNNX1NJWkUobW92KQorI2RlZmluZSBfQVNNX0lOQwlfX0FTTV9TSVpFKGluYykKKyNkZWZpbmUgX0FTTV9ERUMJX19BU01fU0laRShkZWMpCisjZGVmaW5lIF9BU01fQURECV9fQVNNX1NJWkUoYWRkKQorI2RlZmluZSBfQVNNX1NVQglfX0FTTV9TSVpFKHN1YikKKyNkZWZpbmUgX0FTTV9YQURECV9fQVNNX1NJWkUoeGFkZCkKKworI2RlZmluZSBfQVNNX0FYCQlfX0FTTV9SRUcoYXgpCisjZGVmaW5lIF9BU01fQlgJCV9fQVNNX1JFRyhieCkKKyNkZWZpbmUgX0FTTV9DWAkJX19BU01fUkVHKGN4KQorI2RlZmluZSBfQVNNX0RYCQlfX0FTTV9SRUcoZHgpCisjZGVmaW5lIF9BU01fU1AJCV9fQVNNX1JFRyhzcCkKKyNkZWZpbmUgX0FTTV9CUAkJX19BU01fUkVHKGJwKQorI2RlZmluZSBfQVNNX1NJCQlfX0FTTV9SRUcoc2kpCisjZGVmaW5lIF9BU01fREkJCV9fQVNNX1JFRyhkaSkKKworLyogRXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovCisjIGRlZmluZSBfQVNNX0VYVEFCTEUoZnJvbSx0bykgXAorCV9fQVNNX0VYX1NFQwlcCisJX0FTTV9BTElHTiAiXG4iIFwKKwlfQVNNX1BUUiAjZnJvbSAiLCIgI3RvICJcbiIgXAorCSIgLnByZXZpb3VzXG4iCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BU01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2F0b21pYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9hdG9taWMuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1YjlmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCkBAIC0wLDAgKzEsMjU5IEBACisjaWZuZGVmIF9BU01fWDg2X0FUT01JQ18zMl9ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQ18zMl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworLyoKKyAqIE1ha2Ugc3VyZSBnY2MgZG9lc24ndCB0cnkgdG8gYmUgY2xldmVyIGFuZCBtb3ZlIHRoaW5ncyBhcm91bmQKKyAqIG9uIHVzLiBXZSBuZWVkIHRvIHVzZSBfZXhhY3RseV8gdGhlIGFkZHJlc3MgdGhlIHVzZXIgZ2F2ZSB1cywKKyAqIG5vdCBzb21lIGFsaWFzIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgY291bnRlcjsKK30gYXRvbWljX3Q7CisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisvKioKKyAqIGF0b21pY19yZWFkIC0gcmVhZCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqLworI2RlZmluZSBhdG9taWNfcmVhZCh2KQkJKCh2KS0+Y291bnRlcikKKworLyoqCisgKiBhdG9taWNfc2V0IC0gc2V0IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IHJlcXVpcmVkIHZhbHVlCisgKgorICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KKyAqLworI2RlZmluZSBhdG9taWNfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworLyoqCisgKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQorCQkgICAgIDogImlyIiAoaSkpOworfQorCisvKioKKyAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCBpbnRlZ2VyIGZyb20gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQorCQkgICAgIDogImlyIiAoaSkpOworfQorCisvKioKKyAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMiwlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTAiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgorICogY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCisgKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCisgKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGludGVnZXIgYW5kIHJldHVybgorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCWludCBfX2k7CisjaWZkZWYgQ09ORklHX00zODYKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlmICh1bmxpa2VseShib290X2NwdV9kYXRhLng4NiA8PSAzKSkKKwkJZ290byBub194YWRkOworI2VuZGlmCisJLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCisJX19pID0gaTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKKwkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQorCQkgICAgIDogOiAibWVtb3J5Iik7CisJcmV0dXJuIGkgKyBfX2k7CisKKyNpZmRlZiBDT05GSUdfTTM4Ngorbm9feGFkZDogLyogTGVnYWN5IDM4NiBwcm9jZXNzb3IgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19pID0gYXRvbWljX3JlYWQodik7CisJYXRvbWljX3NldCh2LCBpICsgX19pKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGkgKyBfX2k7CisjZW5kaWYKK30KKworLyoqCisgKiBhdG9taWNfc3ViX3JldHVybiAtIHN1YnRyYWN0IGludGVnZXIgYW5kIHJldHVybgorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zIEB2IC0gQGkKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Cit9CisKKyNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG9sZCksIChuZXcpKSkKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIChuZXcpKSkKKworLyoqCisgKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhbHJlYWR5IGEgZ2l2ZW4gdmFsdWUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgQHYgd2FzIG5vdCBhbHJlYWR5IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCit7CisJaW50IGMsIG9sZDsKKwljID0gYXRvbWljX3JlYWQodik7CisJZm9yICg7OykgeworCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQorCQkJYnJlYWs7CisJCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CisJCWMgPSBvbGQ7CisJfQorCXJldHVybiBjICE9ICh1KTsKK30KKworI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKKworI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAgKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAgKGF0b21pY19zdWJfcmV0dXJuKDEsIHYpKQorCisvKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCisjZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJXAorCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQkJXAorCQkgICAgIDogOiAiciIgKG1hc2spLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisKKy8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLmg+CisjZW5kaWYgLyogX0FTTV9YODZfQVRPTUlDXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5ZDJhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY182NC5oCkBAIC0wLDAgKzEsNDczIEBACisjaWZuZGVmIF9BU01fWDg2X0FUT01JQ182NF9ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQ182NF9ICisKKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKiBhdG9taWNfdCBzaG91bGQgYmUgMzIgYml0IHNpZ25lZCB0eXBlICovCisKKy8qCisgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgorICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KKyAqLworCisvKgorICogTWFrZSBzdXJlIGdjYyBkb2Vzbid0IHRyeSB0byBiZSBjbGV2ZXIgYW5kIG1vdmUgdGhpbmdzIGFyb3VuZAorICogb24gdXMuIFdlIG5lZWQgdG8gdXNlIF9leGFjdGx5XyB0aGUgYWRkcmVzcyB0aGUgdXNlciBnYXZlIHVzLAorICogbm90IHNvbWUgYWxpYXMgdGhhdCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBjb3VudGVyOworfSBhdG9taWNfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKy8qKgorICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgorICovCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorCisvKioKKyAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogcmVxdWlyZWQgdmFsdWUKKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovCisjZGVmaW5lIGF0b21pY19zZXQodiwgaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworLyoqCisgKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMiwlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgorICogY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTIsJTA7IHNldHMgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJaW50IF9faSA9IGk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTEiCisJCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBpICsgX19pOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKC1pLCB2KTsKK30KKworI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAgKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAgKGF0b21pY19zdWJfcmV0dXJuKDEsIHYpKQorCisvKiBBbiA2NGJpdCBhdG9taWMgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJbG9uZyBjb3VudGVyOworfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQorCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgorICovCisjZGVmaW5lIGF0b21pYzY0X3JlYWQodikJCSgodiktPmNvdW50ZXIpCisKKy8qKgorICogYXRvbWljNjRfc2V0IC0gc2V0IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqIEBpOiByZXF1aXJlZCB2YWx1ZQorICoKKyAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfc2V0KHYsIGkpCQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisKKy8qKgorICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljNjQgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZHEgJTEsJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWM2NCB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zdWIobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VicSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdChsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUyLCUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jcSAlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9kZWMgLSBkZWNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNxICUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNxICUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfbmVnYXRpdmUobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMiwlMDsgc2V0cyAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pYzY0X2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyBfX2kgPSBpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZHEgJTAsICUxOyIKKwkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQorCQkgICAgIDogOiAibWVtb3J5Iik7CisJcmV0dXJuIGkgKyBfX2k7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljNjRfYWRkX3JldHVybigtaSwgdik7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KSAgKGF0b21pYzY0X2FkZF9yZXR1cm4oMSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSAgKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwgKHYpKSkKKworI2RlZmluZSBhdG9taWM2NF9jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvbGQpLCAobmV3KSkpCisjZGVmaW5lIGF0b21pYzY0X3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisKKyNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG9sZCksIChuZXcpKSkKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIChuZXcpKSkKKworLyoqCisgKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisvKioKKyAqIGF0b21pYzY0X2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKK3sKKwlsb25nIGMsIG9sZDsKKwljID0gYXRvbWljNjRfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljNjRfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKy8qKgorICogYXRvbWljX2luY19zaG9ydCAtIGluY3JlbWVudCBvZiBhIHNob3J0IGludGVnZXIKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgaW50CisgKgorICogQXRvbWljYWxseSBhZGRzIDEgdG8gQHYKKyAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiBAdQorICovCitzdGF0aWMgaW5saW5lIHNob3J0IGludCBhdG9taWNfaW5jX3Nob3J0KHNob3J0IGludCAqdikKK3sKKwlhc20oTE9DS19QUkVGSVggImFkZHcgJDEsICUwIiA6ICIrbSIgKCp2KSk7CisJcmV0dXJuICp2OworfQorCisvKioKKyAqIGF0b21pY19vcl9sb25nIC0gT1Igb2YgdHdvIGxvbmcgaW50ZWdlcnMKKyAqIEB2MTogcG9pbnRlciB0byB0eXBlIHVuc2lnbmVkIGxvbmcKKyAqIEB2MjogcG9pbnRlciB0byB0eXBlIHVuc2lnbmVkIGxvbmcKKyAqCisgKiBBdG9taWNhbGx5IE9ScyBAdjEgYW5kIEB2MgorICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBPUgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX29yX2xvbmcodW5zaWduZWQgbG9uZyAqdjEsIHVuc2lnbmVkIGxvbmcgdjIpCit7CisJYXNtKExPQ0tfUFJFRklYICJvcnEgJTEsICUwIiA6ICIrbSIgKCp2MSkgOiAiciIgKHYyKSk7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisvKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCisjZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRsICUwLCUxIgkJCQlcCisJCSAgICAgOiA6ICJyIiAofihtYXNrKSksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKKworI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQkJXAorCQkgICAgIDogOiAiciIgKCh1bnNpZ25lZCkobWFzaykpLCAibSIgKCooYWRkcikpCQlcCisJCSAgICAgOiAibWVtb3J5IikKKworLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMuaD4KKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXV4dmVjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdXh2ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzE2YjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXV4dmVjLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BVVhWRUNfSAorI2RlZmluZSBfQVNNX1g4Nl9BVVhWRUNfSAorLyoKKyAqIEFyY2hpdGVjdHVyZS1uZXV0cmFsIEFUXyB2YWx1ZXMgaW4gMC0xNywgbGVhdmUgc29tZSByb29tCisgKiBmb3IgbW9yZSBvZiB0aGVtLCBzdGFydCB0aGUgeDg2LXNwZWNpZmljIG9uZXMgYXQgMzIuCisgKi8KKyNpZmRlZiBfX2kzODZfXworI2RlZmluZSBBVF9TWVNJTkZPCQkzMgorI2VuZGlmCisjZGVmaW5lIEFUX1NZU0lORk9fRUhEUgkJMzMKKworI2VuZGlmIC8qIF9BU01fWDg2X0FVWFZFQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYmlnc21wL2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk1NDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYmlnc21wL2FwaWMuaApAQCAtMCwwICsxLDEzOSBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0FQSUNfSAorI2RlZmluZSBfX0FTTV9NQUNIX0FQSUNfSAorCisjZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIChwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkpCisjZGVmaW5lIGVzcl9kaXNhYmxlICgxKQorCitzdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCB0YXJnZXRfY3B1cyh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKyAgICAgICAgcmV0dXJuIGNwdV9vbmxpbmVfbWFwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOworI2VuZGlmCit9CisKKyN1bmRlZiBBUElDX0RFU1RfTE9HSUNBTAorI2RlZmluZSBBUElDX0RFU1RfTE9HSUNBTAkwCisjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfRkxBVCkKKyNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfRml4ZWQpCisjZGVmaW5lIElOVF9ERVNUX01PREUJCSgwKSAgICAvKiBwaHlzIGRlbGl2ZXJ5IHRvIHRhcmdldCBwcm9jICovCisjZGVmaW5lIE5PX0JBTEFOQ0VfSVJRCQkoMCkKKyNkZWZpbmUgV0FLRV9TRUNPTkRBUllfVklBX0lOSVQKKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCit7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCit7CisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9sZHIoaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgaWQ7CisJdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOworCWlkID0geGFwaWNfcGh5c190b19sb2dfYXBpY2lkKGNwdSk7CisJdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOworCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCisgKgorICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKKyAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCisgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7CisJdmFsID0gY2FsY3VsYXRlX2xkcihjcHUpOworCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKK3sKKwlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQkiUGh5c2ZsYXQiLCBucl9pb2FwaWNzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXVsdGlfdGltZXJfY2hlY2soaW50IGFwaWMsIGludCBpcnEpCit7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworCXJldHVybiBhcGljaWRfMl9ub2RlW2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCWlmIChtcHNfY3B1IDwgTlJfQ1BVUykKKwkJcmV0dXJuIChpbnQpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CisKKwlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGFwaWNpZF90b19jcHVfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZChwaHlzX2FwaWNpZCk7Cit9CisKK2V4dGVybiB1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtdOworLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworCWlmIChjcHUgPj0gTlJfQ1BVUykKKwkJcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIGNwdV9waHlzaWNhbF9pZChjcHUpOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCit7CisJLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCisJcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweEZGTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCXJldHVybiAoMSk7Cit9CisKKy8qIEFzIHdlIGFyZSB1c2luZyBzaW5nbGUgQ1BVIGFzIGRlc3RpbmF0aW9uLCBwaWNrIG9ubHkgb25lIENQVSBoZXJlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCit7CisJaW50IGNwdTsKKwlpbnQgYXBpY2lkOwkKKworCWNwdSA9IGZpcnN0X2NwdShjcHVtYXNrKTsKKwlhcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKKwlyZXR1cm4gYXBpY2lkOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBwaHlzX3BrZ19pZCh1MzIgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKK3sKKwlyZXR1cm4gY3B1aWRfYXBpYyA+PiBpbmRleF9tc2I7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2JpZ3NtcC9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvYXBpY2RlZi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvYmlnc21wL2FwaWNkZWYuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vYmlnc21wL2FwaWNkZWYuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2JpZ3NtcC9pcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9pcGkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L2JpZ3NtcC9pcGkuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vYmlnc21wL2lwaS5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaW9zX2ViZGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jpb3NfZWJkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzUyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaW9zX2ViZGEuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9BU01fWDg2X0JJT1NfRUJEQV9ICisjZGVmaW5lIF9BU01fWDg2X0JJT1NfRUJEQV9ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIHRoZXJlIGlzIGEgcmVhbC1tb2RlIHNlZ21lbnRlZCBwb2ludGVyIHBvaW50aW5nIHRvIHRoZQorICogNEsgRUJEQSBhcmVhIGF0IDB4NDBFLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfYmlvc19lYmRhKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGFkZHJlc3MgPSAqKHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KDB4NDBFKTsKKwlhZGRyZXNzIDw8PSA0OworCXJldHVybiBhZGRyZXNzOwkvKiAwIG1lYW5zIG5vbmUgKi8KK30KKwordm9pZCByZXNlcnZlX2ViZGFfcmVnaW9uKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04KKy8qCisgKiBUaGlzIGlzIG9idmlvdXNseSBub3QgYSBncmVhdCBwbGFjZSBmb3IgdGhpcywgYnV0IHdlIHdhbnQgdG8gYmUKKyAqIGFibGUgdG8gc2NhdHRlciBpdCBhcm91bmQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbC4KKyAqLwordm9pZCBjaGVja19mb3JfYmlvc19jb3JydXB0aW9uKHZvaWQpOwordm9pZCBzdGFydF9wZXJpb2RpY19jaGVja19mb3JfY29ycnVwdGlvbih2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfZm9yX2Jpb3NfY29ycnVwdGlvbih2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfcGVyaW9kaWNfY2hlY2tfZm9yX2NvcnJ1cHRpb24odm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfQklPU19FQkRBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMDEwMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0wLDAgKzEsNDUxIEBACisjaWZuZGVmIF9BU01fWDg2X0JJVE9QU19ICisjZGVmaW5lIF9BU01fWDg2X0JJVE9QU19ICisKKy8qCisgKiBDb3B5cmlnaHQgMTk5MiwgTGludXMgVG9ydmFsZHMuCisgKi8KKworI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisKKy8qCisgKiBUaGVzZSBoYXZlIHRvIGJlIGRvbmUgd2l0aCBpbmxpbmUgYXNzZW1ibHk6IHRoYXQgd2F5IHRoZSBiaXQtc2V0dGluZworICogaXMgZ3VhcmFudGVlZCB0byBiZSBhdG9taWMuIEFsbCBiaXQgb3BlcmF0aW9ucyByZXR1cm4gMCBpZiB0aGUgYml0CisgKiB3YXMgY2xlYXJlZCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBhbmQgIT0gMCBpZiBpdCB3YXMgbm90LgorICoKKyAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDMyIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCisgKi8KKworI2lmIF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDEpCisvKiBUZWNobmljYWxseSB3cm9uZywgYnV0IHRoaXMgYXZvaWRzIGNvbXBpbGF0aW9uIGVycm9ycyBvbiBzb21lIGdjYworICAgdmVyc2lvbnMuICovCisjZGVmaW5lIEJJVE9QX0FERFIoeCkgIj1tIiAoKih2b2xhdGlsZSBsb25nICopICh4KSkKKyNlbHNlCisjZGVmaW5lIEJJVE9QX0FERFIoeCkgIittIiAoKih2b2xhdGlsZSBsb25nICopICh4KSkKKyNlbmRpZgorCisjZGVmaW5lIEFERFIJCQkJQklUT1BfQUREUihhZGRyKQorCisvKgorICogV2UgZG8gdGhlIGxvY2tlZCBvcHMgdGhhdCBkb24ndCByZXR1cm4gdGhlIG9sZCB2YWx1ZSBhcworICogYSBtYXNrIG9wZXJhdGlvbiBvbiBhIGJ5dGUuCisgKi8KKyNkZWZpbmUgSVNfSU1NRURJQVRFKG5yKQkJKF9fYnVpbHRpbl9jb25zdGFudF9wKG5yKSkKKyNkZWZpbmUgQ09OU1RfTUFTS19BRERSKG5yLCBhZGRyKQlCSVRPUF9BRERSKCh2b2lkICopKGFkZHIpICsgKChucik+PjMpKQorI2RlZmluZSBDT05TVF9NQVNLKG5yKQkJCSgxIDw8ICgobnIpICYgNykpCisKKy8qKgorICogc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKKyAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCisgKgorICogTm90ZTogdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHJlb3JkZXJlZAorICogb24gbm9uIHg4NiBhcmNoaXRlY3R1cmVzLCBzbyBpZiB5b3UgYXJlIHdyaXRpbmcgcG9ydGFibGUgY29kZSwKKyAqIG1ha2Ugc3VyZSBub3QgdG8gcmVseSBvbiBpdHMgcmVvcmRlcmluZyBndWFyYW50ZWVzLgorICoKKyAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKKyAqIHJlc3RyaWN0ZWQgdG8gYWN0aW5nIG9uIGEgc2luZ2xlLXdvcmQgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KHVuc2lnbmVkIGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpZiAoSVNfSU1NRURJQVRFKG5yKSkgeworCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9yYiAlMSwlMCIKKwkJCTogQ09OU1RfTUFTS19BRERSKG5yLCBhZGRyKQorCQkJOiAiaXEiICgodTgpQ09OU1RfTUFTSyhucikpCisJCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0cyAlMSwlMCIKKwkJCTogQklUT1BfQUREUihhZGRyKSA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKKwl9Cit9CisKKy8qKgorICogX19zZXRfYml0IC0gU2V0IGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBVbmxpa2Ugc2V0X2JpdCgpLCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCisgKiBJZiBpdCdzIGNhbGxlZCBvbiB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IHNpbXVsdGFuZW91c2x5LCB0aGUgZWZmZWN0CisgKiBtYXkgYmUgdGhhdCBvbmx5IG9uZSBvcGVyYXRpb24gc3VjY2VlZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWFzbSB2b2xhdGlsZSgiYnRzICUxLCUwIiA6IEFERFIgOiAiSXIiIChucikgOiAibWVtb3J5Iik7Cit9CisKKy8qKgorICogY2xlYXJfYml0IC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBjbGVhcl9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgSG93ZXZlciwgaXQgZG9lcworICogbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IgbG9ja2luZyBwdXJwb3NlcywKKyAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQorICogaW4gb3JkZXIgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgcHJvY2Vzc29ycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJaWYgKElTX0lNTUVESUFURShucikpIHsKKwkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRiICUxLCUwIgorCQkJOiBDT05TVF9NQVNLX0FERFIobnIsIGFkZHIpCisJCQk6ICJpcSIgKCh1OCl+Q09OU1RfTUFTSyhucikpKTsKKwl9IGVsc2UgeworCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0ciAlMSwlMCIKKwkJCTogQklUT1BfQUREUihhZGRyKQorCQkJOiAiSXIiIChucikpOworCX0KK30KKworLyoKKyAqIGNsZWFyX2JpdF91bmxvY2sgLSBDbGVhcnMgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIGNsZWFyX2JpdCgpIGlzIGF0b21pYyBhbmQgaW1wbGllcyByZWxlYXNlIHNlbWFudGljcyBiZWZvcmUgdGhlIG1lbW9yeQorICogb3BlcmF0aW9uLiBJdCBjYW4gYmUgdXNlZCBmb3IgYW4gdW5sb2NrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0X3VubG9jayh1bnNpZ25lZCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwliYXJyaWVyKCk7CisJY2xlYXJfYml0KG5yLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlhc20gdm9sYXRpbGUoImJ0ciAlMSwlMCIgOiBBRERSIDogIklyIiAobnIpKTsKK30KKworLyoKKyAqIF9fY2xlYXJfYml0X3VubG9jayAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogX19jbGVhcl9iaXQoKSBpcyBub24tYXRvbWljIGFuZCBpbXBsaWVzIHJlbGVhc2Ugc2VtYW50aWNzIGJlZm9yZSB0aGUgbWVtb3J5CisgKiBvcGVyYXRpb24uIEl0IGNhbiBiZSB1c2VkIGZvciBhbiB1bmxvY2sgaWYgbm8gb3RoZXIgQ1BVcyBjYW4gY29uY3VycmVudGx5CisgKiBtb2RpZnkgb3RoZXIgYml0cyBpbiB0aGUgd29yZC4KKyAqCisgKiBObyBtZW1vcnkgYmFycmllciBpcyByZXF1aXJlZCBoZXJlLCBiZWNhdXNlIHg4NiBjYW5ub3QgcmVvcmRlciBzdG9yZXMgcGFzdAorICogb2xkZXIgbG9hZHMuIFNhbWUgcHJpbmNpcGxlIGFzIHNwaW5fdW5sb2NrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXRfdW5sb2NrKHVuc2lnbmVkIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWJhcnJpZXIoKTsKKwlfX2NsZWFyX2JpdChuciwgYWRkcik7Cit9CisKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCisKKy8qKgorICogX19jaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIGNoYW5nZQorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBVbmxpa2UgY2hhbmdlX2JpdCgpLCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCisgKiBJZiBpdCdzIGNhbGxlZCBvbiB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IHNpbXVsdGFuZW91c2x5LCB0aGUgZWZmZWN0CisgKiBtYXkgYmUgdGhhdCBvbmx5IG9uZSBvcGVyYXRpb24gc3VjY2VlZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWFzbSB2b2xhdGlsZSgiYnRjICUxLCUwIiA6IEFERFIgOiAiSXIiIChucikpOworfQorCisvKioKKyAqIGNoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBjaGFuZ2VfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4KKyAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKKyAqIHJlc3RyaWN0ZWQgdG8gYWN0aW5nIG9uIGEgc2luZ2xlLXdvcmQgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0YyAlMSwlMCIgOiBBRERSIDogIklyIiAobnIpKTsKK30KKworLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0cyAlMiwlMVxuXHQiCisJCSAgICAgInNiYiAlMCwlMCIgOiAiPXIiIChvbGRiaXQpLCBBRERSIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworCisJcmV0dXJuIG9sZGJpdDsKK30KKworLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0X2xvY2sgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlIGZvciBsb2NrCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRlc3RfYW5kX3NldF9iaXQgb24geDg2LgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0X2xvY2soaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KG5yLCBhZGRyKTsKK30KKworLyoqCisgKiBfX3Rlc3RfYW5kX3NldF9iaXQgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLgorICogSWYgdHdvIGV4YW1wbGVzIG9mIHRoaXMgb3BlcmF0aW9uIHJhY2UsIG9uZSBjYW4gYXBwZWFyIHRvIHN1Y2NlZWQKKyAqIGJ1dCBhY3R1YWxseSBmYWlsLiAgWW91IG11c3QgcHJvdGVjdCBtdWx0aXBsZSBhY2Nlc3NlcyB3aXRoIGEgbG9jay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJYXNtKCJidHMgJTIsJTFcblx0IgorCSAgICAic2JiICUwLCUwIgorCSAgICA6ICI9ciIgKG9sZGJpdCksIEFERFIKKwkgICAgOiAiSXIiIChucikpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKy8qKgorICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0ciAlMiwlMVxuXHQiCisJCSAgICAgInNiYiAlMCwlMCIKKwkJICAgICA6ICI9ciIgKG9sZGJpdCksIEFERFIgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gb2xkYml0OworfQorCisvKioKKyAqIF9fdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCisgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAorICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCWFzbSB2b2xhdGlsZSgiYnRyICUyLCUxXG5cdCIKKwkJICAgICAic2JiICUwLCUwIgorCQkgICAgIDogIj1yIiAob2xkYml0KSwgQUREUgorCQkgICAgIDogIklyIiAobnIpKTsKKwlyZXR1cm4gb2xkYml0OworfQorCisvKiBXQVJOSU5HOiBub24gYXRvbWljIGFuZCBpdCBjYW4gYmUgcmVvcmRlcmVkISAqLworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJYXNtIHZvbGF0aWxlKCJidGMgJTIsJTFcblx0IgorCQkgICAgICJzYmIgJTAsJTAiCisJCSAgICAgOiAiPXIiIChvbGRiaXQpLCBBRERSCisJCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gb2xkYml0OworfQorCisvKioKKyAqIHRlc3RfYW5kX2NoYW5nZV9iaXQgLSBDaGFuZ2UgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYnRjICUyLCUxXG5cdCIKKwkJICAgICAic2JiICUwLCUwIgorCQkgICAgIDogIj1yIiAob2xkYml0KSwgQUREUiA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBvbGRiaXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlyZXR1cm4gKCgxVUwgPDwgKG5yICUgQklUU19QRVJfTE9ORykpICYKKwkJKCgodW5zaWduZWQgbG9uZyAqKWFkZHIpW25yIC8gQklUU19QRVJfTE9OR10pKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB2YXJpYWJsZV90ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCWFzbSB2b2xhdGlsZSgiYnQgJTIsJTFcblx0IgorCQkgICAgICJzYmIgJTAsJTAiCisJCSAgICAgOiAiPXIiIChvbGRiaXQpCisJCSAgICAgOiAibSIgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpLCAiSXIiIChucikpOworCisJcmV0dXJuIG9sZGJpdDsKK30KKworI2lmIDAgLyogRm9vbCBrZXJuZWwtZG9jIHNpbmNlIGl0IGRvZXNuJ3QgZG8gbWFjcm9zIHlldCAqLworLyoqCisgKiB0ZXN0X2JpdCAtIERldGVybWluZSB3aGV0aGVyIGEgYml0IGlzIHNldAorICogQG5yOiBiaXQgbnVtYmVyIHRvIHRlc3QKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqLworc3RhdGljIGludCB0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworI2VuZGlmCisKKyNkZWZpbmUgdGVzdF9iaXQobnIsIGFkZHIpCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcCgobnIpKQkJXAorCSA/IGNvbnN0YW50X3Rlc3RfYml0KChuciksIChhZGRyKSkJXAorCSA6IHZhcmlhYmxlX3Rlc3RfYml0KChuciksIChhZGRyKSkpCisKKy8qKgorICogX19mZnMgLSBmaW5kIGZpcnN0IHNldCBiaXQgaW4gd29yZAorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJYXNtKCJic2YgJTEsJTAiCisJCTogIj1yIiAod29yZCkKKwkJOiAicm0iICh3b3JkKSk7CisJcmV0dXJuIHdvcmQ7Cit9CisKKy8qKgorICogZmZ6IC0gZmluZCBmaXJzdCB6ZXJvIGJpdCBpbiB3b3JkCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQoreworCWFzbSgiYnNmICUxLCUwIgorCQk6ICI9ciIgKHdvcmQpCisJCTogInIiICh+d29yZCkpOworCXJldHVybiB3b3JkOworfQorCisvKgorICogX19mbHM6IGZpbmQgbGFzdCBzZXQgYml0IGluIHdvcmQKKyAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBVbmRlZmluZWQgaWYgbm8gc2V0IGJpdCBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmxzKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlhc20oImJzciAlMSwlMCIKKwkgICAgOiAiPXIiICh3b3JkKQorCSAgICA6ICJybSIgKHdvcmQpKTsKKwlyZXR1cm4gd29yZDsKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qKgorICogZmZzIC0gZmluZCBmaXJzdCBzZXQgYml0IGluIHdvcmQKKyAqIEB4OiB0aGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcworICogcm91dGluZXMsIHRoZXJlZm9yZSBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBvdGhlciBiaXRvcHMuCisgKgorICogZmZzKHZhbHVlKSByZXR1cm5zIDAgaWYgdmFsdWUgaXMgMCBvciB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0CisgKiBzZXQgYml0IGlmIHZhbHVlIGlzIG5vbnplcm8uIFRoZSBmaXJzdCAobGVhc3Qgc2lnbmlmaWNhbnQpIGJpdAorICogaXMgYXQgcG9zaXRpb24gMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmZzKGludCB4KQoreworCWludCByOworI2lmZGVmIENPTkZJR19YODZfQ01PVgorCWFzbSgiYnNmbCAlMSwlMFxuXHQiCisJICAgICJjbW92emwgJTIsJTAiCisJICAgIDogIj1yIiAocikgOiAicm0iICh4KSwgInIiICgtMSkpOworI2Vsc2UKKwlhc20oImJzZmwgJTEsJTBcblx0IgorCSAgICAiam56IDFmXG5cdCIKKwkgICAgIm1vdmwgJC0xLCUwXG4iCisJICAgICIxOiIgOiAiPXIiIChyKSA6ICJybSIgKHgpKTsKKyNlbmRpZgorCXJldHVybiByICsgMTsKK30KKworLyoqCisgKiBmbHMgLSBmaW5kIGxhc3Qgc2V0IGJpdCBpbiB3b3JkCisgKiBAeDogdGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVGhpcyBpcyBkZWZpbmVkIGluIGEgc2ltaWxhciB3YXkgYXMgdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4KKyAqIGZmcywgYnV0IHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IHNldCBiaXQuCisgKgorICogZmxzKHZhbHVlKSByZXR1cm5zIDAgaWYgdmFsdWUgaXMgMCBvciB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QKKyAqIHNldCBiaXQgaWYgdmFsdWUgaXMgbm9uemVyby4gVGhlIGxhc3QgKG1vc3Qgc2lnbmlmaWNhbnQpIGJpdCBpcworICogYXQgcG9zaXRpb24gMzIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZscyhpbnQgeCkKK3sKKwlpbnQgcjsKKyNpZmRlZiBDT05GSUdfWDg2X0NNT1YKKwlhc20oImJzcmwgJTEsJTBcblx0IgorCSAgICAiY21vdnpsICUyLCUwIgorCSAgICA6ICI9JnIiIChyKSA6ICJybSIgKHgpLCAicm0iICgtMSkpOworI2Vsc2UKKwlhc20oImJzcmwgJTEsJTBcblx0IgorCSAgICAiam56IDFmXG5cdCIKKwkgICAgIm1vdmwgJC0xLCUwXG4iCisJICAgICIxOiIgOiAiPXIiIChyKSA6ICJybSIgKHgpKTsKKyNlbmRpZgorCXJldHVybiByICsgMTsKK30KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyN1bmRlZiBBRERSCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KKworI2RlZmluZSBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIgMQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQkJXAorCXRlc3RfYW5kX3NldF9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikJCQlcCisJdGVzdF9hbmRfY2xlYXJfYml0KChuciksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9YODZfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDYxNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX0FTTV9YODZfQk9PVF9ICisjZGVmaW5lIF9BU01fWDg2X0JPT1RfSAorCisvKiBEb24ndCB0b3VjaCB0aGVzZSwgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gKi8KKyNkZWZpbmUgREVGX1NZU1NFRwkweDEwMDAKKyNkZWZpbmUgREVGX1NZU1NJWkUJMHg3RjAwCisKKy8qIEludGVybmFsIHN2Z2Egc3RhcnR1cCBjb25zdGFudHMgKi8KKyNkZWZpbmUgTk9STUFMX1ZHQQkweGZmZmYJCS8qIDgweDI1IG1vZGUgKi8KKyNkZWZpbmUgRVhURU5ERURfVkdBCTB4ZmZmZQkJLyogODB4NTAgbW9kZSAqLworI2RlZmluZSBBU0tfVkdBCQkweGZmZmQJCS8qIGFzayBmb3IgaXQgYXQgYm9vdHVwICovCisKKy8qIFBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUga2VybmVsIHNob3VsZCBiZSBsb2FkZWQuICovCisjZGVmaW5lIExPQURfUEhZU0lDQUxfQUREUiAoKENPTkZJR19QSFlTSUNBTF9TVEFSVCBcCisJCQkJKyAoQ09ORklHX1BIWVNJQ0FMX0FMSUdOIC0gMSkpIFwKKwkJCQkmIH4oQ09ORklHX1BIWVNJQ0FMX0FMSUdOIC0gMSkpCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIEJPT1RfSEVBUF9TSVpFCTB4NzAwMAorI2RlZmluZSBCT09UX1NUQUNLX1NJWkUJMHg0MDAwCisjZWxzZQorI2RlZmluZSBCT09UX0hFQVBfU0laRQkweDQwMDAKKyNkZWZpbmUgQk9PVF9TVEFDS19TSVpFCTB4MTAwMAorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9CT09UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdHBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzYWRhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oCkBAIC0wLDAgKzEsMTExIEBACisjaWZuZGVmIF9BU01fWDg2X0JPT1RQQVJBTV9ICisjZGVmaW5lIF9BU01fWDg2X0JPT1RQQVJBTV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9lZGQuaD4KKyNpbmNsdWRlIDxhc20vZTgyMC5oPgorI2luY2x1ZGUgPGFzbS9pc3QuaD4KKyNpbmNsdWRlIDx2aWRlby9lZGlkLmg+CisKKy8qIHNldHVwIGRhdGEgdHlwZXMgKi8KKyNkZWZpbmUgU0VUVVBfTk9ORQkJCTAKKyNkZWZpbmUgU0VUVVBfRTgyMF9FWFQJCQkxCisKKy8qIGV4dGVuc2libGUgc2V0dXAgZGF0YSBsaXN0IG5vZGUgKi8KK3N0cnVjdCBzZXR1cF9kYXRhIHsKKwlfX3U2NCBuZXh0OworCV9fdTMyIHR5cGU7CisJX191MzIgbGVuOworCV9fdTggZGF0YVswXTsKK307CisKK3N0cnVjdCBzZXR1cF9oZWFkZXIgeworCV9fdTgJc2V0dXBfc2VjdHM7CisJX191MTYJcm9vdF9mbGFnczsKKwlfX3UzMglzeXNzaXplOworCV9fdTE2CXJhbV9zaXplOworI2RlZmluZSBSQU1ESVNLX0lNQUdFX1NUQVJUX01BU0sJMHgwN0ZGCisjZGVmaW5lIFJBTURJU0tfUFJPTVBUX0ZMQUcJCTB4ODAwMAorI2RlZmluZSBSQU1ESVNLX0xPQURfRkxBRwkJMHg0MDAwCisJX191MTYJdmlkX21vZGU7CisJX191MTYJcm9vdF9kZXY7CisJX191MTYJYm9vdF9mbGFnOworCV9fdTE2CWp1bXA7CisJX191MzIJaGVhZGVyOworCV9fdTE2CXZlcnNpb247CisJX191MzIJcmVhbG1vZGVfc3d0Y2g7CisJX191MTYJc3RhcnRfc3lzOworCV9fdTE2CWtlcm5lbF92ZXJzaW9uOworCV9fdTgJdHlwZV9vZl9sb2FkZXI7CisJX191OAlsb2FkZmxhZ3M7CisjZGVmaW5lIExPQURFRF9ISUdICSgxPDwwKQorI2RlZmluZSBRVUlFVF9GTEFHCSgxPDw1KQorI2RlZmluZSBLRUVQX1NFR01FTlRTCSgxPDw2KQorI2RlZmluZSBDQU5fVVNFX0hFQVAJKDE8PDcpCisJX191MTYJc2V0dXBfbW92ZV9zaXplOworCV9fdTMyCWNvZGUzMl9zdGFydDsKKwlfX3UzMglyYW1kaXNrX2ltYWdlOworCV9fdTMyCXJhbWRpc2tfc2l6ZTsKKwlfX3UzMglib290c2VjdF9rbHVkZ2U7CisJX191MTYJaGVhcF9lbmRfcHRyOworCV9fdTE2CV9wYWQxOworCV9fdTMyCWNtZF9saW5lX3B0cjsKKwlfX3UzMglpbml0cmRfYWRkcl9tYXg7CisJX191MzIJa2VybmVsX2FsaWdubWVudDsKKwlfX3U4CXJlbG9jYXRhYmxlX2tlcm5lbDsKKwlfX3U4CV9wYWQyWzNdOworCV9fdTMyCWNtZGxpbmVfc2l6ZTsKKwlfX3UzMgloYXJkd2FyZV9zdWJhcmNoOworCV9fdTY0CWhhcmR3YXJlX3N1YmFyY2hfZGF0YTsKKwlfX3UzMglwYXlsb2FkX29mZnNldDsKKwlfX3UzMglwYXlsb2FkX2xlbmd0aDsKKwlfX3U2NAlzZXR1cF9kYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHN5c19kZXNjX3RhYmxlIHsKKwlfX3UxNiBsZW5ndGg7CisJX191OCAgdGFibGVbMTRdOworfTsKKworc3RydWN0IGVmaV9pbmZvIHsKKwlfX3UzMiBlZmlfbG9hZGVyX3NpZ25hdHVyZTsKKwlfX3UzMiBlZmlfc3lzdGFiOworCV9fdTMyIGVmaV9tZW1kZXNjX3NpemU7CisJX191MzIgZWZpX21lbWRlc2NfdmVyc2lvbjsKKwlfX3UzMiBlZmlfbWVtbWFwOworCV9fdTMyIGVmaV9tZW1tYXBfc2l6ZTsKKwlfX3UzMiBlZmlfc3lzdGFiX2hpOworCV9fdTMyIGVmaV9tZW1tYXBfaGk7Cit9OworCisvKiBUaGUgc28tY2FsbGVkICJ6ZXJvcGFnZSIgKi8KK3N0cnVjdCBib290X3BhcmFtcyB7CisJc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvOwkJCS8qIDB4MDAwICovCisJc3RydWN0IGFwbV9iaW9zX2luZm8gYXBtX2Jpb3NfaW5mbzsJCS8qIDB4MDQwICovCisJX191OCAgX3BhZDJbMTJdOwkJCQkvKiAweDA1NCAqLworCXN0cnVjdCBpc3RfaW5mbyBpc3RfaW5mbzsJCQkvKiAweDA2MCAqLworCV9fdTggIF9wYWQzWzE2XTsJCQkJLyogMHgwNzAgKi8KKwlfX3U4ICBoZDBfaW5mb1sxNl07CS8qIG9ic29sZXRlISAqLwkJLyogMHgwODAgKi8KKwlfX3U4ICBoZDFfaW5mb1sxNl07CS8qIG9ic29sZXRlISAqLwkJLyogMHgwOTAgKi8KKwlzdHJ1Y3Qgc3lzX2Rlc2NfdGFibGUgc3lzX2Rlc2NfdGFibGU7CQkvKiAweDBhMCAqLworCV9fdTggIF9wYWQ0WzE0NF07CQkJCS8qIDB4MGIwICovCisJc3RydWN0IGVkaWRfaW5mbyBlZGlkX2luZm87CQkJLyogMHgxNDAgKi8KKwlzdHJ1Y3QgZWZpX2luZm8gZWZpX2luZm87CQkJLyogMHgxYzAgKi8KKwlfX3UzMiBhbHRfbWVtX2s7CQkJCS8qIDB4MWUwICovCisJX191MzIgc2NyYXRjaDsJCS8qIFNjcmF0Y2ggZmllbGQhICovCS8qIDB4MWU0ICovCisJX191OCAgZTgyMF9lbnRyaWVzOwkJCQkvKiAweDFlOCAqLworCV9fdTggIGVkZGJ1Zl9lbnRyaWVzOwkJCQkvKiAweDFlOSAqLworCV9fdTggIGVkZF9tYnJfc2lnX2J1Zl9lbnRyaWVzOwkJCS8qIDB4MWVhICovCisJX191OCAgX3BhZDZbNl07CQkJCQkvKiAweDFlYiAqLworCXN0cnVjdCBzZXR1cF9oZWFkZXIgaGRyOyAgICAvKiBzZXR1cCBoZWFkZXIgKi8JLyogMHgxZjEgKi8KKwlfX3U4ICBfcGFkN1sweDI5MC0weDFmMS1zaXplb2Yoc3RydWN0IHNldHVwX2hlYWRlcildOworCV9fdTMyIGVkZF9tYnJfc2lnX2J1ZmZlcltFRERfTUJSX1NJR19NQVhdOwkvKiAweDI5MCAqLworCXN0cnVjdCBlODIwZW50cnkgZTgyMF9tYXBbRTgyME1BWF07CQkvKiAweDJkMCAqLworCV9fdTggIF9wYWQ4WzQ4XTsJCQkJLyogMHhjZDAgKi8KKwlzdHJ1Y3QgZWRkX2luZm8gZWRkYnVmW0VERE1BWE5SXTsJCS8qIDB4ZDAwICovCisJX191OCAgX3BhZDlbMjc2XTsJCQkJLyogMHhlZWMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9CT09UUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGVmMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYnVnLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9CVUdfSAorI2RlZmluZSBfQVNNX1g4Nl9CVUdfSAorCisjaWZkZWYgQ09ORklHX0JVRworI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisKKyNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgX19CVUdfQzAJIjI6XHQubG9uZyAxYiwgJWMwXG4iCisjZWxzZQorIyBkZWZpbmUgX19CVUdfQzAJIjI6XHQucXVhZCAxYiwgJWMwXG4iCisjZW5kaWYKKworI2RlZmluZSBCVUcoKQkJCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCIxOlx0dWQyXG4iCQkJCVwKKwkJICAgICAiLnB1c2hzZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQlcCisJCSAgICAgX19CVUdfQzAJCQkJCVwKKwkJICAgICAiXHQud29yZCAlYzEsIDBcbiIJCQkJXAorCQkgICAgICJcdC5vcmcgMmIrJWMyXG4iCQkJCVwKKwkJICAgICAiLnBvcHNlY3Rpb24iCQkJCVwKKwkJICAgICA6IDogImkiIChfX0ZJTEVfXyksICJpIiAoX19MSU5FX18pLAlcCisJCSAgICAgImkiIChzaXplb2Yoc3RydWN0IGJ1Z19lbnRyeSkpKTsJCVwKKwlmb3IgKDs7KSA7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUgQlVHKCkJCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgidWQyIik7CQkJCQlcCisJZm9yICg7OykgOwkJCQkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmIC8qICFDT05GSUdfQlVHICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKyNlbmRpZiAvKiBfQVNNX1g4Nl9CVUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYnVncy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YWJmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWdzLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9CVUdTX0gKKyNkZWZpbmUgX0FTTV9YODZfQlVHU19ICisKK2V4dGVybiB2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VQX0lOVEVMKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCitpbnQgcHByb193aXRoX3JhbV9idWcodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcHByb193aXRoX3JhbV9idWcodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9CVUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyYWUyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgX0FTTV9YODZfQllURU9SREVSX0gKKyNkZWZpbmUgX0FTTV9YODZfQllURU9SREVSX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZmRlZiBfX0dOVUNfXworCisjaWZkZWYgX19pMzg2X18KKworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQoreworI2lmZGVmIENPTkZJR19YODZfQlNXQVAKKwlhc20oImJzd2FwICUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7CisjZWxzZQorCWFzbSgieGNoZ2IgJWIwLCVoMFxuXHQiCS8qIHN3YXAgbG93ZXIgYnl0ZXMJKi8KKwkgICAgInJvcmwgJDE2LCUwXG5cdCIJLyogc3dhcCB3b3JkcwkJKi8KKwkgICAgInhjaGdiICViMCwlaDAiCS8qIHN3YXAgaGlnaGVyIGJ5dGVzCSovCisJICAgIDogIj1xIiAoeCkKKwkgICAgOiAiMCIgKHgpKTsKKyNlbmRpZgorCXJldHVybiB4OworfQorCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHZhbCkKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UzMiBhOworCQkJX191MzIgYjsKKwkJfSBzOworCQlfX3U2NCB1OworCX0gdjsKKwl2LnUgPSB2YWw7CisjaWZkZWYgQ09ORklHX1g4Nl9CU1dBUAorCWFzbSgiYnN3YXBsICUwIDsgYnN3YXBsICUxIDsgeGNoZ2wgJTAsJTEiCisJICAgIDogIj1yIiAodi5zLmEpLCAiPXIiICh2LnMuYikKKwkgICAgOiAiMCIgKHYucy5hKSwgIjEiICh2LnMuYikpOworI2Vsc2UKKwl2LnMuYSA9IF9fX2FyY2hfX3N3YWIzMih2LnMuYSk7CisJdi5zLmIgPSBfX19hcmNoX19zd2FiMzIodi5zLmIpOworCWFzbSgieGNoZ2wgJTAsJTEiCisJICAgIDogIj1yIiAodi5zLmEpLCAiPXIiICh2LnMuYikKKwkgICAgOiAiMCIgKHYucy5hKSwgIjEiICh2LnMuYikpOworI2VuZGlmCisJcmV0dXJuIHYudTsKK30KKworI2Vsc2UgLyogX19pMzg2X18gKi8KKworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fX2FyY2hfX3N3YWI2NChfX3U2NCB4KQoreworCWFzbSgiYnN3YXBxICUwIgorCSAgICA6ICI9ciIgKHgpCisJICAgIDogIjAiICh4KSk7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKK3sKKwlhc20oImJzd2FwbCAlMCIKKwkgICAgOiAiPXIiICh4KQorCSAgICA6ICIwIiAoeCkpOworCXJldHVybiB4OworfQorCisjZW5kaWYKKworLyogRG8gbm90IGRlZmluZSBzd2FiMTYuICBHY2MgaXMgc21hcnQgZW5vdWdoIHRvIHJlY29nbml6ZSAiQyIgdmVyc2lvbiBhbmQKKyAgIGNvbnZlcnQgaXQgaW50byByb3RhdGlvbiBvciBleGhhbmdlLiAgKi8KKworI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSBfX19hcmNoX19zd2FiNjQoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgX19fYXJjaF9fc3dhYjMyKHgpCisKKyNkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9BU01fWDg2X0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDM2N2NhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9BU01fWDg2X0NBQ0hFX0gKKyNkZWZpbmUgX0FTTV9YODZfQ0FDSEVfSAorCisvKiBMMSBjYWNoZSBsaW5lIHNpemUgKi8KKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCisjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCisjaWZkZWYgQ09ORklHX1g4Nl9WU01QCisvKiB2U01QIEludGVybm9kZSBjYWNoZWxpbmUgc2hpZnQgKi8KKyNkZWZpbmUgSU5URVJOT0RFX0NBQ0hFX1NISUZUICgxMikKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMSA8PCAoSU5URVJOT0RFX0NBQ0hFX1NISUZUKSkpKQlcCisJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBhZ2VfYWxpZ25lZCIpKSkKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4NDY2NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9YODZfQ0FDSEVGTFVTSF9ICisKKy8qIEtlZXAgaW5jbHVkZXMgdGhlIHNhbWUgYWNyb3NzIGFyY2hlcy4gICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8KKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwZywgYWRyLCBsZW4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKQlcCisJbWVtY3B5KChkc3QpLCAoc3JjKSwgKGxlbikpCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJXAorCW1lbWNweSgoZHN0KSwgKHNyYyksIChsZW4pKQorCisjZGVmaW5lIFBHX25vbl9XQgkJCQlQR19hcmNoXzEKK1BBR0VGTEFHKE5vbldCLCBub25fV0IpCisKKy8qCisgKiBUaGUgc2V0X21lbW9yeV8qIEFQSSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdmFyaW91cyBhdHRyaWJ1dGVzIG9mIGEgdmlydHVhbAorICogYWRkcmVzcyByYW5nZS4gVGhlIGF0dHJpYnV0ZXMgaW5jbHVkZToKKyAqIENhY2hhYmlsaXR5ICAgOiBVbkNhY2hlZCwgV3JpdGVDb21iaW5pbmcsIFdyaXRlQmFjaworICogRXhlY3V0YWJpbGl0eSA6IGVYZXV0YWJsZSwgTm90ZVhlY3V0YWJsZQorICogUmVhZC9Xcml0ZSAgICA6IFJlYWRPbmx5LCBSZWFkV3JpdGUKKyAqIFByZXNlbmNlICAgICAgOiBOb3RQcmVzZW50CisgKgorICogV2l0aGluIGEgY2F0YWdvcnksIHRoZSBhdHRyaWJ1dGVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgQVBJIHdpbGwgdGFrZSBjYXJlIG9mIHZhcmlvdXMgYXNwZWN0cyB0aGF0CisgKiBhcmUgYXNzb2NpYXRlZCB3aXRoIGNoYW5naW5nIHN1Y2ggYXR0cmlidXRlcywgc3VjaCBhczoKKyAqIC0gRmx1c2hpbmcgVExCcworICogLSBGbHVzaGluZyBDUFUgY2FjaGVzCisgKiAtIE1ha2luZyBzdXJlIGFsaWFzZXMgb2YgdGhlIG1lbW9yeSBiZWhpbmQgdGhlIG1hcHBpbmcgZG9uJ3QgdmlvbGF0ZQorICogICBjb2hlcmVuY3kgcnVsZXMgYXMgZGVmaW5lZCBieSB0aGUgQ1BVIGluIHRoZSBzeXN0ZW0uCisgKgorICogV2hhdCB0aGlzIEFQSSBkb2VzIG5vdCBkbzoKKyAqIC0gUHJvdmlkZSBleGNsdXNpb24gYmV0d2VlbiB2YXJpb3VzIGNhbGxlcnMgLSBpbmNsdWRpbmcgY2FsbGVycyB0aGF0CisgKiAgIG9wZXJhdGlvbiBvbiBvdGhlciBtYXBwaW5ncyBvZiB0aGUgc2FtZSBwaHlzaWNhbCBwYWdlCisgKiAtIFJlc3RvcmUgZGVmYXVsdCBhdHRyaWJ1dGVzIHdoZW4gYSBwYWdlIGlzIGZyZWVkCisgKiAtIEd1YXJhbnRlZSB0aGF0IG1hcHBpbmdzIG90aGVyIHRoYW4gdGhlIHJlcXVlc3RlZCBvbmUgYXJlCisgKiAgIGluIGFueSBzdGF0ZSwgb3RoZXIgdGhhbiB0aGF0IHRoZXNlIGRvIG5vdCB2aW9sYXRlIHJ1bGVzIGZvcgorICogICB0aGUgQ1BVIHlvdSBoYXZlLiBEbyBub3QgZGVwZW5kIG9uIGFueSBlZmZlY3RzIG9uIG90aGVyIG1hcHBpbmdzLAorICogICBDUFVzIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UgaGF2ZSBtYXkgaGF2ZSBtb3JlIHJlbGF4ZWQgcnVsZXMuCisgKiBUaGUgY2FsbGVyIGlzIHJlcXVpcmVkIHRvIHRha2UgY2FyZSBvZiB0aGVzZS4KKyAqLworCitpbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOworaW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBzZXRfbWVtb3J5XzRrKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKKworaW50IHNldF9tZW1vcnlfYXJyYXlfdWModW5zaWduZWQgbG9uZyAqYWRkciwgaW50IGFkZHJpbmFycmF5KTsKK2ludCBzZXRfbWVtb3J5X2FycmF5X3diKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSk7CisKKy8qCisgKiBGb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIEFQSXMsIGEgZmV3IGZ1bmN0aW9ucworICogYXJlIHByb3ZpZGVkIHRoYXQgd29yayBvbiBhICJzdHJ1Y3QgcGFnZSIuCisgKiBUaGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBPTkxZIG9uIHRoZSAxOjEga2VybmVsIG1hcHBpbmcgb2YgdGhlCisgKiBtZW1vcnkgdGhhdCB0aGUgc3RydWN0IHBhZ2UgcmVwcmVzZW50cywgYW5kIGludGVybmFsbHkganVzdAorICogY2FsbCB0aGUgc2V0X21lbW9yeV8qIGZ1bmN0aW9uLiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZQorICogc2V0X21lbW9yeV8qIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gY29udmVudGlvbnMuCisgKgorICogVGhlc2UgQVBJcyBzaG91bGQgYmUgY29uc2lkZXJlZCAqZGVwcmVjYXRlZCogYW5kIGFyZSBsaWtlbHkgZ29pbmcgdG8KKyAqIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKyAqIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhlIGltcGxpY2l0IG9wZXJhdGlvbiBvbiB0aGUgMToxIG1hcHBpbmcgb25seSwKKyAqIG1ha2luZyB0aGlzIG5vdCBhIGdlbmVyYWxseSB1c2VmdWwgQVBJLgorICoKKyAqIFNwZWNpZmljYWxseSwgbWFueSB1c2VycyBvZiB0aGUgb2xkIEFQSXMgaGFkIGEgdmlydHVhbCBhZGRyZXNzLAorICogY2FsbGVkIHZpcnRfdG9fcGFnZSgpIG9yIHZtYWxsb2NfdG9fcGFnZSgpIG9uIHRoYXQgYWRkcmVzcyB0bworICogZ2V0IGEgc3RydWN0IHBhZ2UqIHRoYXQgdGhlIG9sZCBBUEkgcmVxdWlyZWQuCisgKiBUbyBjb252ZXJ0IHRoZXNlIGNhc2VzLCB1c2Ugc2V0X21lbW9yeV8qKCkgb24gdGhlIG9yaWdpbmFsCisgKiB2aXJ0dWFsIGFkZHJlc3MsIGRvIG5vdCB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCisKK2ludCBzZXRfcGFnZXNfdWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOworaW50IHNldF9wYWdlc194KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOworaW50IHNldF9wYWdlc19ueChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTsKK2ludCBzZXRfcGFnZXNfcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X3BhZ2VzX3J3KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOworCisKK3ZvaWQgY2xmbHVzaF9jYWNoZV9yYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCit2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpOworZXh0ZXJuIGNvbnN0IGludCByb2RhdGFfdGVzdF9kYXRhOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBX1RFU1QKK2ludCByb2RhdGFfdGVzdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCByb2RhdGFfdGVzdCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGdhcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGdhcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNiZWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FsZ2FyeS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBEZXJpdmVkIGZyb20gaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwNi0yMDA3CisgKgorICogQXV0aG9yOiBKb24gTWFzb24gPGpkbWFzb25AdXMuaWJtLmNvbT4KKyAqIEF1dGhvcjogTXVsaSBCZW4tWWVodWRhIDxtdWxpQGlsLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9DQUxHQVJZX0gKKyNkZWZpbmUgX0FTTV9YODZfQ0FMR0FSWV9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IGlvbW11X3RhYmxlIHsKKwlzdHJ1Y3QgY2FsX2NoaXBzZXRfb3BzICpjaGlwX29wczsgLyogY2hpcHNldCBzcGVjaWZpYyBmdW5jcyAqLworCXVuc2lnbmVkIGxvbmcgIGl0X2Jhc2U7ICAgICAgLyogbWFwcGVkIGFkZHJlc3Mgb2YgdGNlIHRhYmxlICovCisJdW5zaWduZWQgbG9uZyAgaXRfaGludDsgICAgICAvKiBIaW50IGZvciBuZXh0IGFsbG9jICovCisJdW5zaWduZWQgbG9uZyAqaXRfbWFwOyAgICAgICAvKiBBIHNpbXBsZSBhbGxvY2F0aW9uIGJpdG1hcCBmb3Igbm93ICovCisJdm9pZCBfX2lvbWVtICAqYmJhcjsgICAgICAgICAvKiBCcmlkZ2UgQkFSICovCisJdTY0CSAgICAgICB0YXJfdmFsOyAgICAgIC8qIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKwlzcGlubG9ja190ICAgICBpdF9sb2NrOyAgICAgIC8qIFByb3RlY3RzIGl0X21hcCAqLworCXVuc2lnbmVkIGludCAgIGl0X3NpemU7ICAgICAgLyogU2l6ZSBvZiBpb21tdSB0YWJsZSBpbiBlbnRyaWVzICovCisJdW5zaWduZWQgY2hhciAgaXRfYnVzbm87ICAgICAvKiBCdXMgbnVtYmVyIHRoaXMgdGFibGUgYmVsb25ncyB0byAqLworfTsKKworc3RydWN0IGNhbF9jaGlwc2V0X29wcyB7CisJdm9pZCAoKmhhbmRsZV9xdWlya3MpKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKwl2b2lkICgqdGNlX2NhY2hlX2JsYXN0KShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCk7CisJdm9pZCAoKmR1bXBfZXJyb3JfcmVncykoc3RydWN0IGlvbW11X3RhYmxlICp0YmwpOworfTsKKworI2RlZmluZSBUQ0VfVEFCTEVfU0laRV9VTlNQRUNJRklFRAl+MAorI2RlZmluZSBUQ0VfVEFCTEVfU0laRV82NEsJCTAKKyNkZWZpbmUgVENFX1RBQkxFX1NJWkVfMTI4SwkJMQorI2RlZmluZSBUQ0VfVEFCTEVfU0laRV8yNTZLCQkyCisjZGVmaW5lIFRDRV9UQUJMRV9TSVpFXzUxMksJCTMKKyNkZWZpbmUgVENFX1RBQkxFX1NJWkVfMU0JCTQKKyNkZWZpbmUgVENFX1RBQkxFX1NJWkVfMk0JCTUKKyNkZWZpbmUgVENFX1RBQkxFX1NJWkVfNE0JCTYKKyNkZWZpbmUgVENFX1RBQkxFX1NJWkVfOE0JCTcKKworZXh0ZXJuIGludCB1c2VfY2FsZ2FyeTsKKworI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VCitleHRlcm4gaW50IGNhbGdhcnlfaW9tbXVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGRldGVjdF9jYWxnYXJ5KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGNhbGdhcnlfaW9tbXVfaW5pdCh2b2lkKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV0ZWN0X2NhbGdhcnkodm9pZCkgeyByZXR1cm47IH0KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfQ0FMR0FSWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY2FsbGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FsbGluZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvY2FsbGluZy5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWxsaW5nLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9jaGVja3N1bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2hlY2tzdW0uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L2NoZWNrc3VtLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNWVmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oCkBAIC0wLDAgKzEsMTg5IEBACisjaWZuZGVmIF9BU01fWDg2X0NIRUNLU1VNXzMyX0gKKyNkZWZpbmUgX0FTTV9YODZfQ0hFQ0tTVU1fMzJfSAorCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2FzbWxpbmthZ2UgX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zLCBhbmQgaGFuZGxlcyB1c2VyLXNwYWNlIHBvaW50ZXIgZXhjZXB0aW9ucyBjb3JyZWN0bHksIHdoZW4gbmVlZGVkLgorICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworCithc21saW5rYWdlIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCQkgICAgaW50IGxlbiwgX193c3VtIHN1bSwKKwkJCQkJICAgIGludCAqc3JjX2Vycl9wdHIsIGludCAqZHN0X2Vycl9wdHIpOworCisvKgorICoJTm90ZTogd2hlbiB5b3UgZ2V0IGEgTlVMTCBwb2ludGVyIGV4Y2VwdGlvbiBoZXJlIHRoaXMgbWVhbnMgc29tZW9uZQorICoJcGFzc2VkIGluIGFuIGluY29ycmVjdCBrZXJuZWwgYWRkcmVzcyB0byBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqCUlmIHlvdSB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IHBsZWFzZSBkb24ndCBmb3JnZXQgdGhlCisgKglhY2Nlc3Nfb2soKS4KKyAqLworc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJICAgICAgIGludCBsZW4sIF9fd3N1bSBzdW0pCit7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJCQkgdm9pZCAqZHN0LAorCQkJCQkJIGludCBsZW4sIF9fd3N1bSBzdW0sCisJCQkJCQkgaW50ICplcnJfcHRyKQoreworCW1pZ2h0X3NsZWVwKCk7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKXNyYywgZHN0LAorCQkJCQkgbGVuLCBzdW0sIGVycl9wdHIsIE5VTEwpOworfQorCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKglCeSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQgZm9yIGxpbnV4IGJ5CisgKglBcm50IEd1bGJyYW5kc2VuLgorICovCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKK3sKKwl1bnNpZ25lZCBpbnQgc3VtOworCisJYXNtIHZvbGF0aWxlKCJtb3ZsICglMSksICUwCTtcbiIKKwkJICAgICAic3VibCAkNCwgJTIJO1xuIgorCQkgICAgICJqYmUgMmYJCTtcbiIKKwkJICAgICAiYWRkbCA0KCUxKSwgJTAJO1xuIgorCQkgICAgICJhZGNsIDgoJTEpLCAlMAk7XG4iCisJCSAgICAgImFkY2wgMTIoJTEpLCAlMDtcbiIKKwkJICAgICAiMToJYWRjbCAxNiglMSksICUwCTtcbiIKKwkJICAgICAibGVhIDQoJTEpLCAlMQk7XG4iCisJCSAgICAgImRlY2wgJTIJO1xuIgorCQkgICAgICJqbmUgMWIJCTtcbiIKKwkJICAgICAiYWRjbCAkMCwgJTAJO1xuIgorCQkgICAgICJtb3ZsICUwLCAlMgk7XG4iCisJCSAgICAgInNocmwgJDE2LCAlMAk7XG4iCisJCSAgICAgImFkZHcgJXcyLCAldzAJO1xuIgorCQkgICAgICJhZGNsICQwLCAlMAk7XG4iCisJCSAgICAgIm5vdGwgJTAJO1xuIgorCQkgICAgICIyOgkJO1xuIgorCS8qIFNpbmNlIHRoZSBpbnB1dCByZWdpc3RlcnMgd2hpY2ggYXJlIGxvYWRlZCB3aXRoIGlwaCBhbmQgaWhsCisJICAgYXJlIG1vZGlmaWVkLCB3ZSBtdXN0IGFsc28gc3BlY2lmeSB0aGVtIGFzIG91dHB1dHMsIG9yIGdjYworCSAgIHdpbGwgYXNzdW1lIHRoZXkgY29udGFpbiB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuICovCisJCSAgICAgOiAiPXIiIChzdW0pLCAiPXIiIChpcGgpLCAiPXIiIChpaGwpCisJCSAgICAgOiAiMSIgKGlwaCksICIyIiAoaWhsKQorCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KXN1bTsKK30KKworLyoKKyAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCisgKi8KKworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQoreworCWFzbSgiYWRkbCAlMSwgJTAJCTtcbiIKKwkgICAgImFkY2wgJDB4ZmZmZiwgJTAJO1xuIgorCSAgICA6ICI9ciIgKHN1bSkKKwkgICAgOiAiciIgKChfX2ZvcmNlIHUzMilzdW0gPDwgMTYpLAorCSAgICAgICIwIiAoKF9fZm9yY2UgdTMyKXN1bSAmIDB4ZmZmZjAwMDApKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikofihfX2ZvcmNlIHUzMilzdW0gPj4gMTYpOworfQorCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCV9fd3N1bSBzdW0pCit7CisJYXNtKCJhZGRsICUxLCAlMAk7XG4iCisJICAgICJhZGNsICUyLCAlMAk7XG4iCisJICAgICJhZGNsICUzLCAlMAk7XG4iCisJICAgICJhZGNsICQwLCAlMAk7XG4iCisJICAgIDogIj1yIiAoc3VtKQorCSAgICA6ICJnIiAoZGFkZHIpLCAiZyIoc2FkZHIpLAorCSAgICAgICJnIiAoKGxlbiArIHByb3RvKSA8PCA4KSwgIjAiIChzdW0pKTsKKwlyZXR1cm4gc3VtOworfQorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJCQkJdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJX193c3VtIHN1bSkKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIGxlbiwgcHJvdG8sIHN1bSkpOworfQorCisvKgorICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQorICogaW4gaWNtcC5jCisgKi8KKworc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQoreworICAgIHJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkgICAgICBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCSAgICAgIF9fd3N1bSBzdW0pCit7CisJYXNtKCJhZGRsIDAoJTEpLCAlMAk7XG4iCisJICAgICJhZGNsIDQoJTEpLCAlMAk7XG4iCisJICAgICJhZGNsIDgoJTEpLCAlMAk7XG4iCisJICAgICJhZGNsIDEyKCUxKSwgJTAJO1xuIgorCSAgICAiYWRjbCAwKCUyKSwgJTAJO1xuIgorCSAgICAiYWRjbCA0KCUyKSwgJTAJO1xuIgorCSAgICAiYWRjbCA4KCUyKSwgJTAJO1xuIgorCSAgICAiYWRjbCAxMiglMiksICUwCTtcbiIKKwkgICAgImFkY2wgJTMsICUwCTtcbiIKKwkgICAgImFkY2wgJTQsICUwCTtcbiIKKwkgICAgImFkY2wgJDAsICUwCTtcbiIKKwkgICAgOiAiPSZyIiAoc3VtKQorCSAgICA6ICJyIiAoc2FkZHIpLCAiciIgKGRhZGRyKSwKKwkgICAgICAiciIgKGh0b25sKGxlbikpLCAiciIgKGh0b25sKHByb3RvKSksICIwIiAoc3VtKSk7CisKKwlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cit9CisKKy8qCisgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCisgKi8KKyNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV9hbmRfY29weV90b191c2VyKGNvbnN0IHZvaWQgKnNyYywKKwkJCQkJICAgdm9pZCBfX3VzZXIgKmRzdCwKKwkJCQkJICAgaW50IGxlbiwgX193c3VtIHN1bSwKKwkJCQkJICAgaW50ICplcnJfcHRyKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkKKwkJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCAoX19mb3JjZSB2b2lkICopZHN0LAorCQkJCQkJIGxlbiwgc3VtLCBOVUxMLCBlcnJfcHRyKTsKKworCWlmIChsZW4pCisJCSplcnJfcHRyID0gLUVGQVVMVDsKKworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KK30KKworI2VuZGlmIC8qIF9BU01fWDg2X0NIRUNLU1VNXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmRjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV82NC5oCkBAIC0wLDAgKzEsMTkxIEBACisjaWZuZGVmIF9BU01fWDg2X0NIRUNLU1VNXzY0X0gKKyNkZWZpbmUgX0FTTV9YODZfQ0hFQ0tTVU1fNjRfSAorCisvKgorICogQ2hlY2tzdW1zIGZvciB4ODYtNjQKKyAqIENvcHlyaWdodCAyMDAyIGJ5IEFuZGkgS2xlZW4sIFN1U0UgTGFicworICogd2l0aCBzb21lIGNvZGUgZnJvbSBhc20teDg2L2NoZWNrc3VtLmgKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoqCisgKiBjc3VtX2ZvbGQgLSBGb2xkIGFuZCBpbnZlcnQgYSAzMmJpdCBjaGVja3N1bS4KKyAqIHN1bTogMzJiaXQgdW5mb2xkZWQgc3VtCisgKgorICogRm9sZCBhIDMyYml0IHJ1bm5pbmcgY2hlY2tzdW0gdG8gMTZiaXQgYW5kIGludmVydCBpdC4gVGhpcyBpcyB1c3VhbGx5CisgKiB0aGUgbGFzdCBzdGVwIGJlZm9yZSBwdXR0aW5nIGEgY2hlY2tzdW0gaW50byBhIHBhY2tldC4KKyAqIE1ha2Ugc3VyZSBub3QgdG8gbWl4IHdpdGggNjRiaXQgY2hlY2tzdW1zLgorICovCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCit7CisJYXNtKCIgIGFkZGwgJTEsJTBcbiIKKwkgICAgIiAgYWRjbCAkMHhmZmZmLCUwIgorCSAgICA6ICI9ciIgKHN1bSkKKwkgICAgOiAiciIgKChfX2ZvcmNlIHUzMilzdW0gPDwgMTYpLAorCSAgICAgICIwIiAoKF9fZm9yY2UgdTMyKXN1bSAmIDB4ZmZmZjAwMDApKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikofihfX2ZvcmNlIHUzMilzdW0gPj4gMTYpOworfQorCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKglCeSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQgZm9yIGxpbnV4IGJ5CisgKglBcm50IEd1bGJyYW5kc2VuLgorICovCisKKy8qKgorICogaXBfZmFzdF9jc3VtIC0gQ29tcHV0ZSB0aGUgSVB2NCBoZWFkZXIgY2hlY2tzdW0gZWZmaWNpZW50bHkuCisgKiBpcGg6IGlwdjQgaGVhZGVyCisgKiBpaGw6IGxlbmd0aCBvZiBoZWFkZXIgLyA0CisgKi8KK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQoreworCXVuc2lnbmVkIGludCBzdW07CisKKwlhc20oIiAgbW92bCAoJTEpLCAlMFxuIgorCSAgICAiICBzdWJsICQ0LCAlMlxuIgorCSAgICAiICBqYmUgMmZcbiIKKwkgICAgIiAgYWRkbCA0KCUxKSwgJTBcbiIKKwkgICAgIiAgYWRjbCA4KCUxKSwgJTBcbiIKKwkgICAgIiAgYWRjbCAxMiglMSksICUwXG4iCisJICAgICIxOiBhZGNsIDE2KCUxKSwgJTBcbiIKKwkgICAgIiAgbGVhIDQoJTEpLCAlMVxuIgorCSAgICAiICBkZWNsICUyXG4iCisJICAgICIgIGpuZQkxYlxuIgorCSAgICAiICBhZGNsICQwLCAlMFxuIgorCSAgICAiICBtb3ZsICUwLCAlMlxuIgorCSAgICAiICBzaHJsICQxNiwgJTBcbiIKKwkgICAgIiAgYWRkdyAldzIsICV3MFxuIgorCSAgICAiICBhZGNsICQwLCAlMFxuIgorCSAgICAiICBub3RsICUwXG4iCisJICAgICIyOiIKKwkvKiBTaW5jZSB0aGUgaW5wdXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSBsb2FkZWQgd2l0aCBpcGggYW5kIGlobAorCSAgIGFyZSBtb2RpZmllZCwgd2UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlbSBhcyBvdXRwdXRzLCBvciBnY2MKKwkgICB3aWxsIGFzc3VtZSB0aGV5IGNvbnRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiAqLworCSAgICA6ICI9ciIgKHN1bSksICI9ciIgKGlwaCksICI9ciIgKGlobCkKKwkgICAgOiAiMSIgKGlwaCksICIyIiAoaWhsKQorCSAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNilzdW07Cit9CisKKy8qKgorICogY3N1bV90Y3B1cF9ub2ZvbGQgLSBDb21wdXRlIGFuIElQdjQgcHNldWRvIGhlYWRlciBjaGVja3N1bS4KKyAqIEBzYWRkcjogc291cmNlIGFkZHJlc3MKKyAqIEBkYWRkcjogZGVzdGluYXRpb24gYWRkcmVzcworICogQGxlbjogbGVuZ3RoIG9mIHBhY2tldAorICogQHByb3RvOiBpcCBwcm90b2NvbCBvZiBwYWNrZXQKKyAqIEBzdW06IGluaXRpYWwgc3VtIHRvIGJlIGFkZGVkIGluICgzMmJpdCB1bmZvbGRlZCkKKyAqCisgKiBSZXR1cm5zIHRoZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtIHRoZSBpbnB1dCBkYXRhLiBSZXN1bHQgaXMKKyAqIDMyYml0IHVuZm9sZGVkLgorICovCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQoreworCWFzbSgiICBhZGRsICUxLCAlMFxuIgorCSAgICAiICBhZGNsICUyLCAlMFxuIgorCSAgICAiICBhZGNsICUzLCAlMFxuIgorCSAgICAiICBhZGNsICQwLCAlMFxuIgorCSAgICA6ICI9ciIgKHN1bSkKKwkgICAgOiAiZyIgKGRhZGRyKSwgImciIChzYWRkciksCisJICAgICAgImciICgobGVuICsgcHJvdG8pPDw4KSwgIjAiIChzdW0pKTsKKwlyZXR1cm4gc3VtOworfQorCisKKy8qKgorICogY3N1bV90Y3B1cF9tYWdpYyAtIENvbXB1dGUgYW4gSVB2NCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLgorICogQHNhZGRyOiBzb3VyY2UgYWRkcmVzcworICogQGRhZGRyOiBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAbGVuOiBsZW5ndGggb2YgcGFja2V0CisgKiBAcHJvdG86IGlwIHByb3RvY29sIG9mIHBhY2tldAorICogQHN1bTogaW5pdGlhbCBzdW0gdG8gYmUgYWRkZWQgaW4gKDMyYml0IHVuZm9sZGVkKQorICoKKyAqIFJldHVybnMgdGhlIDE2Yml0IHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gdGhlIGlucHV0IGRhdGEgYWxyZWFkeQorICogY29tcGxlbWVudGVkIGFuZCByZWFkeSB0byBiZSBmaWxsZWQgaW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJCQkJdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIGxlbiwgcHJvdG8sIHN1bSkpOworfQorCisvKioKKyAqIGNzdW1fcGFydGlhbCAtIENvbXB1dGUgYW4gaW50ZXJuZXQgY2hlY2tzdW0uCisgKiBAYnVmZjogYnVmZmVyIHRvIGJlIGNoZWNrc3VtbWVkCisgKiBAbGVuOiBsZW5ndGggb2YgYnVmZmVyLgorICogQHN1bTogaW5pdGlhbCBzdW0gdG8gYmUgYWRkZWQgaW4gKDMyYml0IHVuZm9sZGVkKQorICoKKyAqIFJldHVybnMgdGhlIDMyYml0IHVuZm9sZGVkIGludGVybmV0IGNoZWNrc3VtIG9mIHRoZSBidWZmZXIuCisgKiBCZWZvcmUgZmlsbGluZyBpdCBpbiBpdCBuZWVkcyB0byBiZSBjc3VtX2ZvbGQoKSdlZC4KKyAqIGJ1ZmYgc2hvdWxkIGJlIGFsaWduZWQgdG8gYSA2NGJpdCBib3VuZGFyeSBpZiBwb3NzaWJsZS4KKyAqLworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSk7CisKKyNkZWZpbmUgIF9IQVZFX0FSQ0hfQ09QWV9BTkRfQ1NVTV9GUk9NX1VTRVIgMQorI2RlZmluZSBIQVZFX0NTVU1fQ09QWV9VU0VSIDEKKworCisvKiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgdGhlIHdyYXBwZXJzIGJlbG93ICovCitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3Qgdm9pZCAqc3JjLCBjb25zdCB2b2lkICpkc3QsCisJCQkJCWludCBsZW4sIF9fd3N1bSBzdW0sCisJCQkJCWludCAqc3JjX2Vycl9wdHIsIGludCAqZHN0X2Vycl9wdHIpOworCisKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJICBpbnQgbGVuLCBfX3dzdW0gaXN1bSwgaW50ICplcnJwKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsIHZvaWQgX191c2VyICpkc3QsCisJCQkJCWludCBsZW4sIF9fd3N1bSBpc3VtLCBpbnQgKmVycnApOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtKTsKKworLyogT2xkIG5hbWVzLiBUbyBiZSByZW1vdmVkLiAqLworI2RlZmluZSBjc3VtX2FuZF9jb3B5X3RvX3VzZXIgY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcgorI2RlZmluZSBjc3VtX2FuZF9jb3B5X2Zyb21fdXNlciBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIKKworLyoqCisgKiBpcF9jb21wdXRlX2NzdW0gLSBDb21wdXRlIGFuIDE2Yml0IElQIGNoZWNrc3VtLgorICogQGJ1ZmY6IGJ1ZmZlciBhZGRyZXNzLgorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIHRoZSAxNmJpdCBmb2xkZWQvaW52ZXJ0ZWQgY2hlY2tzdW0gb2YgdGhlIHBhc3NlZCBidWZmZXIuCisgKiBSZWFkeSB0byBmaWxsIGluLgorICovCitleHRlcm4gX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbik7CisKKy8qKgorICogY3N1bV9pcHY2X21hZ2ljIC0gQ29tcHV0ZSBjaGVja3N1bSBvZiBhbiBJUHY2IHBzZXVkbyBoZWFkZXIuCisgKiBAc2FkZHI6IHNvdXJjZSBhZGRyZXNzCisgKiBAZGFkZHI6IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBsZW46IGxlbmd0aCBvZiBwYWNrZXQKKyAqIEBwcm90bzogcHJvdG9jb2wgb2YgcGFja2V0CisgKiBAc3VtOiBpbml0aWFsIHN1bSAoMzJiaXQgdW5mb2xkZWQpIHRvIGJlIGFkZGVkIGluCisgKgorICogQ29tcHV0ZXMgYW4gSVB2NiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLiBUaGlzIHN1bSBpcyBhZGRlZCB0aGUgY2hlY2tzdW0KKyAqIGludG8gVURQL1RDUCBwYWNrZXRzIGFuZCBjb250YWlucyBzb21lIGxpbmsgbGF5ZXIgaW5mb3JtYXRpb24uCisgKiBSZXR1cm5zIHRoZSB1bmZvbGRlZCAzMmJpdCBjaGVja3N1bS4KKyAqLworCitzdHJ1Y3QgaW42X2FkZHI7CisKKyNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0gMQorZXh0ZXJuIF9fc3VtMTYKK2NzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQlfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBhZGQzMl93aXRoX2NhcnJ5KHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIpCit7CisJYXNtKCJhZGRsICUyLCUwXG5cdCIKKwkgICAgImFkY2wgJDAsJTAiCisJICAgIDogIj1yIiAoYSkKKwkgICAgOiAiMCIgKGEpLCAiciIgKGIpKTsKKwlyZXR1cm4gYTsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X0NIRUNLU1VNXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGcuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyY2ViNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKQEAgLTAsMCArMSwzNDQgQEAKKyNpZm5kZWYgX0FTTV9YODZfQ01QWENIR18zMl9ICisjZGVmaW5lIF9BU01fWDg2X0NNUFhDSEdfMzJfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+IC8qIGZvciBMT0NLX1BSRUZJWCAqLworCisvKgorICogTm90ZTogaWYgeW91IHVzZSBzZXQ2NF9iaXQoKSwgX19jbXB4Y2hnNjQoKSwgb3IgdGhlaXIgdmFyaWFudHMsIHlvdQorICogICAgICAgeW91IG5lZWQgdG8gdGVzdCBmb3IgdGhlIGZlYXR1cmUgaW4gYm9vdF9jcHVfZGF0YS4KKyAqLworCisjZGVmaW5lIHhjaGcocHRyLCB2KQkJCQkJCQlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwgKHB0ciksIHNpemVvZigqKHB0cikpKSkKKworc3RydWN0IF9feGNoZ19kdW1teSB7CisJdW5zaWduZWQgbG9uZyBhWzEwMF07Cit9OworI2RlZmluZSBfX3hnKHgpICgoc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKKworLyoKKyAqIFRoZSBzZW1hbnRpY3Mgb2YgWENIR0NNUDhCIGFyZSBhIGJpdCBzdHJhbmdlLCB0aGlzIGlzIHdoeQorICogdGhlcmUgaXMgYSBsb29wIGFuZCB0aGUgbG9hZGluZyBvZiAlJWVheCBhbmQgJSVlZHggaGFzIHRvCisgKiBiZSBpbnNpZGUuIFRoaXMgaW5saW5lcyB3ZWxsIGluIG1vc3QgY2FzZXMsIHRoZSBjYWNoZWQKKyAqIGNvc3QgaXMgYXJvdW5kIH4zOCBjeWNsZXMuIChpbiB0aGUgZnV0dXJlIHdlIG1pZ2h0IHdhbnQKKyAqIHRvIGRvIGFuIFNJTUQvM0ROT1chL01NWC9GUFUgNjQtYml0IHN0b3JlIGhlcmUsIGJ1dCB0aGF0CisgKiBtaWdodCBoYXZlIGFuIGltcGxpY2l0IEZQVS1zYXZlIGFzIGEgY29zdCwgc28gaXQncyBub3QKKyAqIGNsZWFyIHdoaWNoIHBhdGggdG8gZ28uKQorICoKKyAqIGNtcHhjaGc4YiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgbG9jayBwcmVmaXggaGVyZSB0byBhbGxvdworICogdGhlIGluc3RydWN0aW9uIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHksIHNlZSBwYWdlIDMtMTAyCisgKiBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2V0IHJlZmVyZW5jZSAyNDMxOTEwMi5wZGYuIFdlIG5lZWQKKyAqIHRoZSByZWFkZXIgc2lkZSB0byBzZWUgdGhlIGNvaGVyZW50IDY0Yml0IHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXQodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gpCit7CisJYXNtIHZvbGF0aWxlKCJcbjE6XHQiCisJCSAgICAgIm1vdmwgKCUwKSwgJSVlYXhcblx0IgorCQkgICAgICJtb3ZsIDQoJTApLCAlJWVkeFxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggImNtcHhjaGc4YiAoJTApXG5cdCIKKwkJICAgICAiam56IDFiIgorCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkgICAgIDogIkQiKHB0ciksCisJCSAgICAgICAiYiIobG93KSwKKwkJICAgICAgICJjIihoaWdoKQorCQkgICAgIDogImF4IiwgImR4IiwgIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfY29uc3RhbnQodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKK3sKKwlfX3NldF82NGJpdChwdHIsICh1bnNpZ25lZCBpbnQpdmFsdWUsICh1bnNpZ25lZCBpbnQpKHZhbHVlID4+IDMyKSk7Cit9CisKKyNkZWZpbmUgbGxfbG93KHgpCSooKCh1bnNpZ25lZCBpbnQgKikmKHgpKSArIDApCisjZGVmaW5lIGxsX2hpZ2goeCkJKigoKHVuc2lnbmVkIGludCAqKSYoeCkpICsgMSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X3Zhcih1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCit7CisJX19zZXRfNjRiaXQocHRyLCBsbF9sb3codmFsdWUpLCBsbF9oaWdoKHZhbHVlKSk7Cit9CisKKyNkZWZpbmUgc2V0XzY0Yml0KHB0ciwgdmFsdWUpCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcCgodmFsdWUpKQkJXAorCSA/IF9fc2V0XzY0Yml0X2NvbnN0YW50KChwdHIpLCAodmFsdWUpKQlcCisJIDogX19zZXRfNjRiaXRfdmFyKChwdHIpLCAodmFsdWUpKSkKKworI2RlZmluZSBfc2V0XzY0Yml0KHB0ciwgdmFsdWUpCQkJCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWx1ZSkJCQkJCVwKKwkgPyBfX3NldF82NGJpdChwdHIsICh1bnNpZ25lZCBpbnQpKHZhbHVlKSwJCQlcCisJCSAgICAgICAodW5zaWduZWQgaW50KSgodmFsdWUpID4+IDMyKSkJCQlcCisJIDogX19zZXRfNjRiaXQocHRyLCBsbF9sb3coKHZhbHVlKSksIGxsX2hpZ2goKHZhbHVlKSkpKQorCisvKgorICogTm90ZTogbm8gImxvY2siIHByZWZpeCBldmVuIG9uIFNNUDogeGNoZyBhbHdheXMgaW1wbGllcyBsb2NrIGFueXdheQorICogTm90ZSAyOiB4Y2hnIGhhcyBzaWRlIGVmZmVjdCwgc28gdGhhdCBhdHRyaWJ1dGUgdm9sYXRpbGUgaXMgbmVjZXNzYXJ5LAorICoJICBidXQgZ2VuZXJhbGx5IHRoZSBwcmltaXRpdmUgaXMgaW52YWxpZCwgKnB0ciBpcyBvdXRwdXQgYXJndW1lbnQuIC0tQU5LCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICpwdHIsCisJCQkJICAgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlhc20gdm9sYXRpbGUoInhjaGdiICViMCwlMSIKKwkJCSAgICAgOiAiPXEiICh4KQorCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hndyAldzAsJTEiCisJCQkgICAgIDogIj1yIiAoeCkKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWFzbSB2b2xhdGlsZSgieGNoZ2wgJTAsJTEiCisJCQkgICAgIDogIj1yIiAoeCkKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAorICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCisgKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KKyAqLworCisjaWZkZWYgQ09ORklHX1g4Nl9DTVBYQ0hHCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQorI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikJCQkJCQlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKG4pLAkJXAorCQkJCSAgICAgICBzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHN5bmNfY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fc3luY19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKShuKSwJCVwKKwkJCQkJICAgIHNpemVvZigqKHB0cikpKSkKKyNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCQlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCQkJICAgICAodW5zaWduZWQgbG9uZykobiksCVwKKwkJCQkJICAgICBzaXplb2YoKihwdHIpKSkpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfQ01QWENIRzY0CisjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0KChwdHIpLCAodW5zaWduZWQgbG9uZyBsb25nKShvKSwgXAorCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykobikpKQorI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0X2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZyBsb25nKShvKSwgXAorCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykobikpKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hnYiAlYjEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDI6CisJCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ3cgJXcxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSA0OgorCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdsICUxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKy8qCisgKiBBbHdheXMgdXNlIGxvY2tlZCBvcGVyYXRpb25zIHdoZW4gdG91Y2hpbmcgbWVtb3J5IHNoYXJlZCB3aXRoIGEKKyAqIGh5cGVydmlzb3IsIHNpbmNlIHRoZSBzeXN0ZW0gbWF5IGJlIFNNUCBldmVuIGlmIHRoZSBndWVzdCBrZXJuZWwKKyAqIGlzbid0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zeW5jX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCWFzbSB2b2xhdGlsZSgibG9jazsgY21weGNoZ2IgJWIxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSAyOgorCQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnbCAlMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCX0KKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCWFzbSB2b2xhdGlsZSgiY21weGNoZ2IgJWIxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSAyOgorCQlhc20gdm9sYXRpbGUoImNtcHhjaGd3ICV3MSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hnbCAlMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCX0KKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NtcHhjaGc2NCh2b2xhdGlsZSB2b2lkICpwdHIsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9sZCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2OworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZzhiICUzIgorCQkgICAgIDogIj1BIihwcmV2KQorCQkgICAgIDogImIiKCh1bnNpZ25lZCBsb25nKW5ldyksCisJCSAgICAgICAiYyIoKHVuc2lnbmVkIGxvbmcpKG5ldyA+PiAzMikpLAorCQkgICAgICAgIm0iKCpfX3hnKHB0cikpLAorCQkgICAgICAgIjAiKG9sZCkKKwkJICAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX19jbXB4Y2hnNjRfbG9jYWwodm9sYXRpbGUgdm9pZCAqcHRyLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG9sZCwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHByZXY7CisJYXNtIHZvbGF0aWxlKCJjbXB4Y2hnOGIgJTMiCisJCSAgICAgOiAiPUEiKHByZXYpCisJCSAgICAgOiAiYiIoKHVuc2lnbmVkIGxvbmcpbmV3KSwKKwkJICAgICAgICJjIigodW5zaWduZWQgbG9uZykobmV3ID4+IDMyKSksCisJCSAgICAgICAibSIoKl9feGcocHRyKSksCisJCSAgICAgICAiMCIob2xkKQorCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiBwcmV2OworfQorCisjaWZuZGVmIENPTkZJR19YODZfQ01QWENIRworLyoKKyAqIEJ1aWxkaW5nIGEga2VybmVsIGNhcGFibGUgcnVubmluZyBvbiA4MDM4Ni4gSXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworICogc2ltdWxhdGUgdGhlIGNtcHhjaGcgb24gdGhlIDgwMzg2IENQVS4gRm9yIHRoYXQgcHVycG9zZSB3ZSBkZWZpbmUKKyAqIGEgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIHNpemVzIHdlIHN1cHBvcnQuCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTgodm9sYXRpbGUgdm9pZCAqLCB1OCwgdTgpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTE2KHZvbGF0aWxlIHZvaWQgKiwgdTE2LCB1MTYpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTMyKHZvbGF0aWxlIHZvaWQgKiwgdTMyLCB1MzIpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODYodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkJdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcmV0dXJuIGNtcHhjaGdfMzg2X3U4KHB0ciwgb2xkLCBuZXcpOworCWNhc2UgMjoKKwkJcmV0dXJuIGNtcHhjaGdfMzg2X3UxNihwdHIsIG9sZCwgbmV3KTsKKwljYXNlIDQ6CisJCXJldHVybiBjbXB4Y2hnXzM4Nl91MzIocHRyLCBvbGQsIG5ldyk7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKyNkZWZpbmUgY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAorCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSkJCQkJXAorCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLAkJXAorCQkJCSh1bnNpZ25lZCBsb25nKShvKSwgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCisJCQkJc2l6ZW9mKCoocHRyKSkpOwkJCVwKKwllbHNlCQkJCQkJCQlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzM4NigocHRyKSwJCVwKKwkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAorCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgbywgbikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKKwlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gMykpCQkJCVwKKwkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZ19sb2NhbCgocHRyKSwJXAorCQkJCSh1bnNpZ25lZCBsb25nKShvKSwgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCisJCQkJc2l6ZW9mKCoocHRyKSkpOwkJCVwKKwllbHNlCQkJCQkJCQlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzM4NigocHRyKSwJCVwKKwkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAorCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1g4Nl9DTVBYQ0hHNjQKKy8qCisgKiBCdWlsZGluZyBhIGtlcm5lbCBjYXBhYmxlIHJ1bm5pbmcgb24gODAzODYgYW5kIDgwNDg2LiBJdCBtYXkgYmUgbmVjZXNzYXJ5CisgKiB0byBzaW11bGF0ZSB0aGUgY21weGNoZzhiIG9uIHRoZSA4MDM4NiBhbmQgODA0ODYgQ1BVLgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY21weGNoZ180ODZfdTY0KHZvbGF0aWxlIHZvaWQgKiwgdTY0LCB1NjQpOworCisjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAorCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiA0KSkJCQkJXAorCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjQoKHB0ciksCQlcCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKWNtcHhjaGdfNDg2X3U2NCgocHRyKSwJXAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCQlcCisJaWYgKGxpa2VseShib290X2NwdV9kYXRhLng4NiA+IDQpKQkJCQlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NF9sb2NhbCgocHRyKSwJXAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKKwllbHNlCQkJCQkJCQlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X0NNUFhDSEdfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGU3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzY0LmgKQEAgLTAsMCArMSwxODUgQEAKKyNpZm5kZWYgX0FTTV9YODZfQ01QWENIR182NF9ICisjZGVmaW5lIF9BU01fWDg2X0NNUFhDSEdfNjRfSAorCisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+IC8qIFByb3ZpZGVzIExPQ0tfUFJFRklYICovCisKKyNkZWZpbmUgeGNoZyhwdHIsIHYpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykodiksIFwKKwkJCQkJCSAocHRyKSwgc2l6ZW9mKCoocHRyKSkpKQorCisjZGVmaW5lIF9feGcoeCkgKCh2b2xhdGlsZSBsb25nICopKHgpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0XzY0Yml0KHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJKnB0ciA9IHZhbDsKK30KKworI2RlZmluZSBfc2V0XzY0Yml0IHNldF82NGJpdAorCisvKgorICogTm90ZTogbm8gImxvY2siIHByZWZpeCBldmVuIG9uIFNNUDogeGNoZyBhbHdheXMgaW1wbGllcyBsb2NrIGFueXdheQorICogTm90ZSAyOiB4Y2hnIGhhcyBzaWRlIGVmZmVjdCwgc28gdGhhdCBhdHRyaWJ1dGUgdm9sYXRpbGUgaXMgbmVjZXNzYXJ5LAorICoJICBidXQgZ2VuZXJhbGx5IHRoZSBwcmltaXRpdmUgaXMgaW52YWxpZCwgKnB0ciBpcyBvdXRwdXQgYXJndW1lbnQuIC0tQU5LCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICpwdHIsCisJCQkJICAgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlhc20gdm9sYXRpbGUoInhjaGdiICViMCwlMSIKKwkJCSAgICAgOiAiPXEiICh4KQorCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hndyAldzAsJTEiCisJCQkgICAgIDogIj1yIiAoeCkKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWFzbSB2b2xhdGlsZSgieGNoZ2wgJWswLCUxIgorCQkJICAgICA6ICI9ciIgKHgpCisJCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlhc20gdm9sYXRpbGUoInhjaGdxICUwLCUxIgorCQkJICAgICA6ICI9ciIgKHgpCisJCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB4OworfQorCisvKgorICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKKyAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcworICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCisgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHByZXY7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdiICViMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgMjoKKwkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hndyAldzEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDQ6CisJCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ2wgJWsxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSA4OgorCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdxICUxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKy8qCisgKiBBbHdheXMgdXNlIGxvY2tlZCBvcGVyYXRpb25zIHdoZW4gdG91Y2hpbmcgbWVtb3J5IHNoYXJlZCB3aXRoIGEKKyAqIGh5cGVydmlzb3IsIHNpbmNlIHRoZSBzeXN0ZW0gbWF5IGJlIFNNUCBldmVuIGlmIHRoZSBndWVzdCBrZXJuZWwKKyAqIGlzbid0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zeW5jX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCWFzbSB2b2xhdGlsZSgibG9jazsgY21weGNoZ2IgJWIxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSAyOgorCQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnbCAlMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCX0KKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCWFzbSB2b2xhdGlsZSgiY21weGNoZ2IgJWIxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSAyOgorCQlhc20gdm9sYXRpbGUoImNtcHhjaGd3ICV3MSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hnbCAlazEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDg6CisJCWFzbSB2b2xhdGlsZSgiY21weGNoZ3EgJTEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwl9CisJcmV0dXJuIG9sZDsKK30KKworI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikJCQkJCQlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQlcCisJY21weGNoZygocHRyKSwgKG8pLCAobikpOwkJCQkJXAorfSkKKyNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCQlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCQkJICAgICAodW5zaWduZWQgbG9uZykobiksCVwKKwkJCQkJICAgICBzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHN5bmNfY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fc3luY19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKShuKSwJCVwKKwkJCQkJICAgIHNpemVvZigqKHB0cikpKSkKKyNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCUJVSUxEX0JVR19PTihzaXplb2YoKihwdHIpKSAhPSA4KTsJCQkJXAorCWNtcHhjaGdfbG9jYWwoKHB0ciksIChvKSwgKG4pKTsJCQkJCVwKK30pCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9DTVBYQ0hHXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5YzdiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NvbXBhdC5oCkBAIC0wLDAgKzEsMjE4IEBACisjaWZuZGVmIF9BU01fWDg2X0NPTVBBVF9ICisjZGVmaW5lIF9BU01fWDg2X0NPTVBBVF9ICisKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS91c2VyMzIuaD4KKworI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKKwordHlwZWRlZiB1MzIJCWNvbXBhdF9zaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3NzaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3RpbWVfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfY2xvY2tfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfcGlkX3Q7Cit0eXBlZGVmIHUxNgkJX19jb21wYXRfdWlkX3Q7Cit0eXBlZGVmIHUxNgkJX19jb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIHUzMgkJX19jb21wYXRfdWlkMzJfdDsKK3R5cGVkZWYgdTMyCQlfX2NvbXBhdF9naWQzMl90OwordHlwZWRlZiB1MTYJCWNvbXBhdF9tb2RlX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2lub190OwordHlwZWRlZiB1MTYJCWNvbXBhdF9kZXZfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfb2ZmX3Q7Cit0eXBlZGVmIHM2NAkJY29tcGF0X2xvZmZfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfbmxpbmtfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfaXBjX3BpZF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9kYWRkcl90OwordHlwZWRlZiB1MzIJCWNvbXBhdF9jYWRkcl90OwordHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJY29tcGF0X2ZzaWRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfdGltZXJfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfa2V5X3Q7CisKK3R5cGVkZWYgczMyCQljb21wYXRfaW50X3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2xvbmdfdDsKK3R5cGVkZWYgczY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSBjb21wYXRfczY0OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7Cit0eXBlZGVmIHU2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSkgY29tcGF0X3U2NDsKKworc3RydWN0IGNvbXBhdF90aW1lc3BlYyB7CisJY29tcGF0X3RpbWVfdAl0dl9zZWM7CisJczMyCQl0dl9uc2VjOworfTsKKworc3RydWN0IGNvbXBhdF90aW1ldmFsIHsKKwljb21wYXRfdGltZV90CXR2X3NlYzsKKwlzMzIJCXR2X3VzZWM7Cit9OworCitzdHJ1Y3QgY29tcGF0X3N0YXQgeworCWNvbXBhdF9kZXZfdAlzdF9kZXY7CisJdTE2CQlfX3BhZDE7CisJY29tcGF0X2lub190CXN0X2lubzsKKwljb21wYXRfbW9kZV90CXN0X21vZGU7CisJY29tcGF0X25saW5rX3QJc3Rfbmxpbms7CisJX19jb21wYXRfdWlkX3QJc3RfdWlkOworCV9fY29tcGF0X2dpZF90CXN0X2dpZDsKKwljb21wYXRfZGV2X3QJc3RfcmRldjsKKwl1MTYJCV9fcGFkMjsKKwl1MzIJCXN0X3NpemU7CisJdTMyCQlzdF9ibGtzaXplOworCXUzMgkJc3RfYmxvY2tzOworCXUzMgkJc3RfYXRpbWU7CisJdTMyCQlzdF9hdGltZV9uc2VjOworCXUzMgkJc3RfbXRpbWU7CisJdTMyCQlzdF9tdGltZV9uc2VjOworCXUzMgkJc3RfY3RpbWU7CisJdTMyCQlzdF9jdGltZV9uc2VjOworCXUzMgkJX191bnVzZWQ0OworCXUzMgkJX191bnVzZWQ1OworfTsKKworc3RydWN0IGNvbXBhdF9mbG9jayB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X29mZl90CWxfc3RhcnQ7CisJY29tcGF0X29mZl90CWxfbGVuOworCWNvbXBhdF9waWRfdAlsX3BpZDsKK307CisKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkxMworI2RlZmluZSBGX1NFVExLVzY0CTE0CisKKy8qCisgKiBJQTMyIHVzZXMgNCBieXRlIGFsaWdubWVudCBmb3IgNjQgYml0IHF1YW50aXRpZXMsCisgKiBzbyB3ZSBuZWVkIHRvIHBhY2sgdGhpcyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBjb21wYXRfZmxvY2s2NCB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X2xvZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9sb2ZmX3QJbF9sZW47CisJY29tcGF0X3BpZF90CWxfcGlkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnMgeworCWludAkJZl90eXBlOworCWludAkJZl9ic2l6ZTsKKwlpbnQJCWZfYmxvY2tzOworCWludAkJZl9iZnJlZTsKKwlpbnQJCWZfYmF2YWlsOworCWludAkJZl9maWxlczsKKwlpbnQJCWZfZmZyZWU7CisJY29tcGF0X2ZzaWRfdAlmX2ZzaWQ7CisJaW50CQlmX25hbWVsZW47CS8qIFN1bk9TIGlnbm9yZXMgdGhpcyBmaWVsZC4gKi8KKwlpbnQJCWZfZnJzaXplOworCWludAkJZl9zcGFyZVs1XTsKK307CisKKyNkZWZpbmUgQ09NUEFUX1JMSU1fT0xEX0lORklOSVRZCTB4N2ZmZmZmZmYKKyNkZWZpbmUgQ09NUEFUX1JMSU1fSU5GSU5JVFkJCTB4ZmZmZmZmZmYKKwordHlwZWRlZiB1MzIJCWNvbXBhdF9vbGRfc2lnc2V0X3Q7CS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKworI2RlZmluZSBfQ09NUEFUX05TSUcJCTY0CisjZGVmaW5lIF9DT01QQVRfTlNJR19CUFcJMzIKKwordHlwZWRlZiB1MzIgICAgICAgICAgICAgICBjb21wYXRfc2lnc2V0X3dvcmQ7CisKKyNkZWZpbmUgQ09NUEFUX09GRl9UX01BWAkweDdmZmZmZmZmCisjZGVmaW5lIENPTVBBVF9MT0ZGX1RfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkwKKworc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHsKKwljb21wYXRfa2V5X3Qga2V5OworCV9fY29tcGF0X3VpZDMyX3QgdWlkOworCV9fY29tcGF0X2dpZDMyX3QgZ2lkOworCV9fY29tcGF0X3VpZDMyX3QgY3VpZDsKKwlfX2NvbXBhdF9naWQzMl90IGNnaWQ7CisJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQgc2VxOworCXVuc2lnbmVkIHNob3J0IF9fcGFkMjsKKwljb21wYXRfdWxvbmdfdCB1bnVzZWQxOworCWNvbXBhdF91bG9uZ190IHVudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NlbWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzZW1fcGVybTsKKwljb21wYXRfdGltZV90ICBzZW1fb3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQxOworCWNvbXBhdF90aW1lX3QgIHNlbV9jdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDI7CisJY29tcGF0X3Vsb25nX3Qgc2VtX25zZW1zOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMzsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7Cit9OworCitzdHJ1Y3QgY29tcGF0X21zcWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBtc2dfcGVybTsKKwljb21wYXRfdGltZV90ICBtc2dfc3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQxOworCWNvbXBhdF90aW1lX3QgIG1zZ19ydGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDI7CisJY29tcGF0X3RpbWVfdCAgbXNnX2N0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMzsKKwljb21wYXRfdWxvbmdfdCBtc2dfY2J5dGVzOworCWNvbXBhdF91bG9uZ190IG1zZ19xbnVtOworCWNvbXBhdF91bG9uZ190IG1zZ19xYnl0ZXM7CisJY29tcGF0X3BpZF90ICAgbXNnX2xzcGlkOworCWNvbXBhdF9waWRfdCAgIG1zZ19scnBpZDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQ1OworfTsKKworc3RydWN0IGNvbXBhdF9zaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgY29tcGF0X2lwYzY0X3Blcm0gc2htX3Blcm07CisJY29tcGF0X3NpemVfdCAgc2htX3NlZ3N6OworCWNvbXBhdF90aW1lX3QgIHNobV9hdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3RpbWVfdCAgc2htX2R0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKKwljb21wYXRfdGltZV90ICBzaG1fY3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOworCWNvbXBhdF9waWRfdCAgIHNobV9jcGlkOworCWNvbXBhdF9waWRfdCAgIHNobV9scGlkOworCWNvbXBhdF91bG9uZ190IHNobV9uYXR0Y2g7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQ0OworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNTsKK307CisKKy8qCisgKiBUaGUgdHlwZSBvZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzLnByX3JlZyBpbiBjb21wYXRpYmxlIGNvcmUgZHVtcHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMiBjb21wYXRfZWxmX2dyZWdzZXRfdDsKKworLyoKKyAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAorICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQorICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQorICogYXBwcm9wcmlhdGVseSBjb252ZXJ0ZWQgdGhlbSBhbHJlYWR5LgorICovCit0eXBlZGVmCXUzMgkJY29tcGF0X3VwdHJfdDsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X3B0cihjb21wYXRfdXB0cl90IHVwdHIpCit7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29tcGF0X3VwdHJfdCBwdHJfdG9fY29tcGF0KHZvaWQgX191c2VyICp1cHRyKQoreworCXJldHVybiAodTMyKSh1bnNpZ25lZCBsb25nKXVwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmNvbXBhdF9hbGxvY191c2VyX3NwYWNlKGxvbmcgbGVuKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCXJldHVybiAodm9pZCBfX3VzZXIgKilyZWdzLT5zcCAtIGxlbjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfY29tcGF0X3Rhc2sodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJiBUU19DT01QQVQ7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU0ODJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9DUFVfSAorI2RlZmluZSBfQVNNX1g4Nl9DUFVfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCitzdHJ1Y3QgeDg2X2NwdSB7CisJc3RydWN0IGNwdSBjcHU7Cit9OworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitleHRlcm4gaW50IGFyY2hfcmVnaXN0ZXJfY3B1KGludCBudW0pOworZXh0ZXJuIHZvaWQgYXJjaF91bnJlZ2lzdGVyX2NwdShpbnQpOworI2VuZGlmCisKK0RFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSk7CisjZW5kaWYgLyogX0FTTV9YODZfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNlOTVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogRGVmaW5lcyB4ODYgQ1BVIGZlYXR1cmUgYml0cworICovCisjaWZuZGVmIF9BU01fWDg2X0NQVUZFQVRVUkVfSAorI2RlZmluZSBfQVNNX1g4Nl9DUFVGRUFUVVJFX0gKKworI2luY2x1ZGUgPGFzbS9yZXF1aXJlZC1mZWF0dXJlcy5oPgorCisjZGVmaW5lIE5DQVBJTlRTCTkJLyogTiAzMi1iaXQgd29yZHMgd29ydGggb2YgaW5mbyAqLworCisvKgorICogTm90ZTogSWYgdGhlIGNvbW1lbnQgYmVnaW5zIHdpdGggYSBxdW90ZWQgc3RyaW5nLCB0aGF0IHN0cmluZyBpcyB1c2VkCisgKiBpbiAvcHJvYy9jcHVpbmZvIGluc3RlYWQgb2YgdGhlIG1hY3JvIG5hbWUuICBJZiB0aGUgc3RyaW5nIGlzICIiLAorICogdGhpcyBmZWF0dXJlIGJpdCBpcyBub3QgZGlzcGxheWVkIGluIC9wcm9jL2NwdWluZm8gYXQgYWxsLgorICovCisKKy8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxIChlZHgpLCB3b3JkIDAgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlBVCQkoMCozMisgMCkgLyogT25ib2FyZCBGUFUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVk1FCQkoMCozMisgMSkgLyogVmlydHVhbCBNb2RlIEV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfREUJCSgwKjMyKyAyKSAvKiBEZWJ1Z2dpbmcgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QU0UJCSgwKjMyKyAzKSAvKiBQYWdlIFNpemUgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9UU0MJCSgwKjMyKyA0KSAvKiBUaW1lIFN0YW1wIENvdW50ZXIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVNSCQkoMCozMisgNSkgLyogTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BBRQkJKDAqMzIrIDYpIC8qIFBoeXNpY2FsIEFkZHJlc3MgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NQ0UJCSgwKjMyKyA3KSAvKiBNYWNoaW5lIENoZWNrIEFyY2hpdGVjdHVyZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DWDgJCSgwKjMyKyA4KSAvKiBDTVBYQ0hHOCBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9BUElDCSgwKjMyKyA5KSAvKiBPbmJvYXJkIEFQSUMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU0VQCQkoMCozMisxMSkgLyogU1lTRU5URVIvU1lTRVhJVCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NVFJSCSgwKjMyKzEyKSAvKiBNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUEdFCQkoMCozMisxMykgLyogUGFnZSBHbG9iYWwgRW5hYmxlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01DQQkJKDAqMzIrMTQpIC8qIE1hY2hpbmUgQ2hlY2sgQXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NNT1YJKDAqMzIrMTUpIC8qIENNT1YgaW5zdHJ1Y3Rpb25zICovCisJCQkJCSAgLyogKHBsdXMgRkNNT1ZjYywgRkNPTUkgd2l0aCBGUFUpICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BBVAkJKDAqMzIrMTYpIC8qIFBhZ2UgQXR0cmlidXRlIFRhYmxlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BTRTM2CSgwKjMyKzE3KSAvKiAzNi1iaXQgUFNFcyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QTgkJKDAqMzIrMTgpIC8qIFByb2Nlc3NvciBzZXJpYWwgbnVtYmVyICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NMRkxTSAkoMCozMisxOSkgLyogImNsZmx1c2giIENMRkxVU0ggaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRFMJCSgwKjMyKzIxKSAvKiAiZHRzIiBEZWJ1ZyBTdG9yZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9BQ1BJCSgwKjMyKzIyKSAvKiBBQ1BJIHZpYSBNU1IgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTU1YCQkoMCozMisyMykgLyogTXVsdGltZWRpYSBFeHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZYU1IJKDAqMzIrMjQpIC8qIEZYU0FWRS9GWFJTVE9SLCBDUjQuT1NGWFNSICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTQkJKDAqMzIrMjUpIC8qICJzc2UiICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTTIJKDAqMzIrMjYpIC8qICJzc2UyIiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TRUxGU05PT1AJKDAqMzIrMjcpIC8qICJzcyIgQ1BVIHNlbGYgc25vb3AgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSFQJCSgwKjMyKzI4KSAvKiBIeXBlci1UaHJlYWRpbmcgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNDCQkoMCozMisyOSkgLyogInRtIiBBdXRvbWF0aWMgY2xvY2sgY29udHJvbCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9JQTY0CSgwKjMyKzMwKSAvKiBJQS02NCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUEJFCQkoMCozMiszMSkgLyogUGVuZGluZyBCcmVhayBFbmFibGUgKi8KKworLyogQU1ELWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDgwMDAwMDAxLCB3b3JkIDEgKi8KKy8qIERvbid0IGR1cGxpY2F0ZSBmZWF0dXJlIGZsYWdzIHdoaWNoIGFyZSByZWR1bmRhbnQgd2l0aCBJbnRlbCEgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU1lTQ0FMTAkoMSozMisxMSkgLyogU1lTQ0FMTC9TWVNSRVQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVAJCSgxKjMyKzE5KSAvKiBNUCBDYXBhYmxlLiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9OWAkJKDEqMzIrMjApIC8qIEV4ZWN1dGUgRGlzYWJsZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NTVhFWFQJKDEqMzIrMjIpIC8qIEFNRCBNTVggZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GWFNSX09QVAkoMSozMisyNSkgLyogRlhTQVZFL0ZYUlNUT1Igb3B0aW1pemF0aW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9HQlBBR0VTCSgxKjMyKzI2KSAvKiAicGRwZTFnYiIgR0IgcGFnZXMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUkRUU0NQCSgxKjMyKzI3KSAvKiBSRFRTQ1AgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTE0JCSgxKjMyKzI5KSAvKiBMb25nIE1vZGUgKHg4Ni02NCkgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfM0ROT1dFWFQJKDEqMzIrMzApIC8qIEFNRCAzRE5vdyEgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PVwkoMSozMiszMSkgLyogM0ROb3chICovCisKKy8qIFRyYW5zbWV0YS1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHg4MDg2MDAwMSwgd29yZCAyICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JFQ09WRVJZCSgyKjMyKyAwKSAvKiBDUFUgaW4gcmVjb3ZlcnkgbW9kZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MT05HUlVOCSgyKjMyKyAxKSAvKiBMb25ncnVuIHBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTFJUSQkoMiozMisgMykgLyogTG9uZ1J1biB0YWJsZSBpbnRlcmZhY2UgKi8KKworLyogT3RoZXIgZmVhdHVyZXMsIExpbnV4LWRlZmluZWQgbWFwcGluZywgd29yZCAzICovCisvKiBUaGlzIHJhbmdlIGlzIHVzZWQgZm9yIGZlYXR1cmUgYml0cyB3aGljaCBjb25mbGljdCBvciBhcmUgc3ludGhlc2l6ZWQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1hNTVgJKDMqMzIrIDApIC8qIEN5cml4IE1NWCBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0s2X01UUlIJKDMqMzIrIDEpIC8qIEFNRCBLNiBub25zdGFuZGFyZCBNVFJScyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DWVJJWF9BUlIJKDMqMzIrIDIpIC8qIEN5cml4IEFSUnMgKD0gTVRSUnMpICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSCSgzKjMyKyAzKSAvKiBDZW50YXVyIE1DUnMgKD0gTVRSUnMpICovCisvKiBjcHUgdHlwZXMgZm9yIHNwZWNpZmljIHR1bmluZ3M6ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4CQkoMyozMisgNCkgLyogIiIgT3B0ZXJvbiwgQXRobG9uNjQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSzcJCSgzKjMyKyA1KSAvKiAiIiBBdGhsb24gKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUDMJCSgzKjMyKyA2KSAvKiAiIiBQMyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QNAkJKDMqMzIrIDcpIC8qICIiIFA0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyAoMyozMisgOCkgLyogVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9VUAkJKDMqMzIrIDkpIC8qIHNtcCBrZXJuZWwgcnVubmluZyBvbiB1cCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyAoMyozMisxMCkgLyogIiIgRlhTQVZFIGxlYWtzIEZPUC9GSVAvRk9QICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTiAoMyozMisxMSkgLyogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmTW9uICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05PUEwJKDMqMzIrMjApIC8qIFRoZSBOT1BMICgwRiAxRikgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BFQlMJKDMqMzIrMTIpIC8qIFByZWNpc2UtRXZlbnQgQmFzZWQgU2FtcGxpbmcgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQlRTCQkoMyozMisxMykgLyogQnJhbmNoIFRyYWNlIFN0b3JlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NZU0NBTEwzMgkoMyozMisxNCkgLyogIiIgc3lzY2FsbCBpbiBpYTMyIHVzZXJzcGFjZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TWVNFTlRFUjMyCSgzKjMyKzE1KSAvKiAiIiBzeXNlbnRlciBpbiBpYTMyIHVzZXJzcGFjZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9SRVBfR09PRAkoMyozMisxNikgLyogcmVwIG1pY3JvY29kZSB3b3JrcyB3ZWxsICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01GRU5DRV9SRFRTQyAoMyozMisxNykgLyogIiIgTWZlbmNlIHN5bmNocm9uaXplcyBSRFRTQyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MgKDMqMzIrMTgpIC8qICIiIExmZW5jZSBzeW5jaHJvbml6ZXMgUkRUU0MgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfMTFBUAkoMyozMisxOSkgLyogIiIgQmFkIGxvY2FsIEFQSUMgYWthIDExQVAgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9QTAkoMyozMisyMCkgLyogVGhlIE5PUEwgKDBGIDFGKSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQU1EQzFFCSgzKjMyKzIxKSAvKiBBTUQgQzFFIGRldGVjdGVkICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hUT1BPTE9HWQkoMyozMisyMSkgLyogY3B1IHRvcG9sb2d5IGVudW0gZXh0ZW5zaW9ucyAqLworCisvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwMSAoZWN4KSwgd29yZCA0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTTMJKDQqMzIrIDApIC8qICJwbmkiIFNTRS0zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BDTE1VTFFEUQkoNCozMisgMSkgLyogUENMTVVMUURRIGluc3RydWN0aW9uICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0RURVM2NAkoNCozMisgMikgLyogNjQtYml0IERlYnVnIFN0b3JlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01XQUlUCSg0KjMyKyAzKSAvKiAibW9uaXRvciIgTW9uaXRvci9Nd2FpdCBzdXBwb3J0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0RTQ1BMCSg0KjMyKyA0KSAvKiAiZHNfY3BsIiBDUEwgUXVhbC4gRGVidWcgU3RvcmUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVk1YCQkoNCozMisgNSkgLyogSGFyZHdhcmUgdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU01YCQkoNCozMisgNikgLyogU2FmZXIgbW9kZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9FU1QJCSg0KjMyKyA3KSAvKiBFbmhhbmNlZCBTcGVlZFN0ZXAgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVE0yCQkoNCozMisgOCkgLyogVGhlcm1hbCBNb25pdG9yIDIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU1NTRTMJKDQqMzIrIDkpIC8qIFN1cHBsZW1lbnRhbCBTU0UtMyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DSUQJCSg0KjMyKzEwKSAvKiBDb250ZXh0IElEICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZNQQkJKDQqMzIrMTIpIC8qIEZ1c2VkIG11bHRpcGx5LWFkZCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DWDE2CSg0KjMyKzEzKSAvKiBDTVBYQ0hHMTZCICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hUUFIJKDQqMzIrMTQpIC8qIFNlbmQgVGFzayBQcmlvcml0eSBNZXNzYWdlcyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QRENNCSg0KjMyKzE1KSAvKiBQZXJmb3JtYW5jZSBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRENBCQkoNCozMisxOCkgLyogRGlyZWN0IENhY2hlIEFjY2VzcyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YTU00XzEJKDQqMzIrMTkpIC8qICJzc2U0XzEiIFNTRS00LjEgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NNF8yCSg0KjMyKzIwKSAvKiAic3NlNF8yIiBTU0UtNC4yICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1gyQVBJQwkoNCozMisyMSkgLyogeDJBUElDICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FFUwkJKDQqMzIrMjUpIC8qIEFFUyBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNBVkUJKDQqMzIrMjYpIC8qIFhTQVZFL1hSU1RPUi9YU0VUQlYvWEdFVEJWICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX09TWFNBVkUJKDQqMzIrMjcpIC8qICIiIFhTQVZFIGVuYWJsZWQgaW4gdGhlIE9TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FWWAkJKDQqMzIrMjgpIC8qIEFkdmFuY2VkIFZlY3RvciBFeHRlbnNpb25zICovCisKKy8qIFZJQS9DeXJpeC9DZW50YXVyLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweEMwMDAwMDAxLCB3b3JkIDUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNUT1JFCSg1KjMyKyAyKSAvKiAicm5nIiBSTkcgcHJlc2VudCAoeHN0b3JlKSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YU1RPUkVfRU4JKDUqMzIrIDMpIC8qICJybmdfZW4iIFJORyBlbmFibGVkICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hDUllQVAkoNSozMisgNikgLyogImFjZSIgb24tQ1BVIGNyeXB0byAoeGNyeXB0KSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YQ1JZUFRfRU4JKDUqMzIrIDcpIC8qICJhY2VfZW4iIG9uLUNQVSBjcnlwdG8gZW5hYmxlZCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9BQ0UyCSg1KjMyKyA4KSAvKiBBZHZhbmNlZCBDcnlwdG9ncmFwaHkgRW5naW5lIHYyICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FDRTJfRU4JKDUqMzIrIDkpIC8qIEFDRSB2MiBlbmFibGVkICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BIRQkJKDUqMzIrMTApIC8qIFBhZExvY2sgSGFzaCBFbmdpbmUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUEhFX0VOCSg1KjMyKzExKSAvKiBQSEUgZW5hYmxlZCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QTU0JCSg1KjMyKzEyKSAvKiBQYWRMb2NrIE1vbnRnb21lcnkgTXVsdGlwbGllciAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QTU1fRU4JKDUqMzIrMTMpIC8qIFBNTSBlbmFibGVkICovCisKKy8qIE1vcmUgZXh0ZW5kZWQgQU1EIGZsYWdzOiBDUFVJRCBsZXZlbCAweDgwMDAwMDAxLCBlY3gsIHdvcmQgNiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MQUhGX0xNCSg2KjMyKyAwKSAvKiBMQUhGL1NBSEYgaW4gbG9uZyBtb2RlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kJKDYqMzIrIDEpIC8qIElmIHllcyBIeXBlclRocmVhZGluZyBub3QgdmFsaWQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZNCQkoNiozMisgMikgLyogU2VjdXJlIHZpcnR1YWwgbWFjaGluZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9FWFRBUElDCSg2KjMyKyAzKSAvKiBFeHRlbmRlZCBBUElDIHNwYWNlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NSOF9MRUdBQ1kJKDYqMzIrIDQpIC8qIENSOCBpbiAzMi1iaXQgbW9kZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9BQk0JCSg2KjMyKyA1KSAvKiBBZHZhbmNlZCBiaXQgbWFuaXB1bGF0aW9uICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NTRTRBCSg2KjMyKyA2KSAvKiBTU0UtNEEgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTUlTQUxJR05TU0UgKDYqMzIrIDcpIC8qIE1pc2FsaWduZWQgU1NFIG1vZGUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfM0ROT1dQUkVGRVRDSCAoNiozMisgOCkgLyogM0ROb3cgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX09TVlcJKDYqMzIrIDkpIC8qIE9TIFZpc2libGUgV29ya2Fyb3VuZCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9JQlMJCSg2KjMyKzEwKSAvKiBJbnN0cnVjdGlvbiBCYXNlZCBTYW1wbGluZyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TU0U1CSg2KjMyKzExKSAvKiBTU0UtNSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TS0lOSVQJKDYqMzIrMTIpIC8qIFNLSU5JVC9TVEdJIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9XRFQJCSg2KjMyKzEzKSAvKiBXYXRjaGRvZyB0aW1lciAqLworCisvKgorICogQXV4aWxpYXJ5IGZsYWdzOiBMaW51eCBkZWZpbmVkIC0gRm9yIGZlYXR1cmVzIHNjYXR0ZXJlZCBpbiB2YXJpb3VzCisgKiBDUFVJRCBsZXZlbHMgbGlrZSAweDYsIDB4QSBldGMKKyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9JREEJCSg3KjMyKyAwKSAvKiBJbnRlbCBEeW5hbWljIEFjY2VsZXJhdGlvbiAqLworCisvKiBWaXJ0dWFsaXphdGlvbiBmbGFnczogTGludXggZGVmaW5lZCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9UUFJfU0hBRE9XICAoOCozMisgMCkgLyogSW50ZWwgVFBSIFNoYWRvdyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9WTk1JICAgICAgICAoOCozMisgMSkgLyogSW50ZWwgVmlydHVhbCBOTUkgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRkxFWFBSSU9SSVRZICg4KjMyKyAyKSAvKiBJbnRlbCBGbGV4UHJpb3JpdHkgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRVBUICAgICAgICAgKDgqMzIrIDMpIC8qIEludGVsIEV4dGVuZGVkIFBhZ2UgVGFibGUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVlBJRCAgICAgICAgKDgqMzIrIDQpIC8qIEludGVsIFZpcnR1YWwgUHJvY2Vzc29yIElEICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHg4Nl9jYXBfZmxhZ3NbTkNBUElOVFMqMzJdOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCB4ODZfcG93ZXJfZmxhZ3NbMzJdOworCisjZGVmaW5lIHRlc3RfY3B1X2NhcChjLCBiaXQpCQkJCQkJXAorCSB0ZXN0X2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopKChjKS0+eDg2X2NhcGFiaWxpdHkpKQorCisjZGVmaW5lIGNwdV9oYXMoYywgYml0KQkJCQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKGJpdCkgJiYJCQkJCVwKKwkgKCAoKChiaXQpPj41KT09MCAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzApKSB8fAlcCisJICAgKCgoYml0KT4+NSk9PTEgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0sxKSkgfHwJXAorCSAgICgoKGJpdCk+PjUpPT0yICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMikpIHx8CVwKKwkgICAoKChiaXQpPj41KT09MyAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzMpKSB8fAlcCisJICAgKCgoYml0KT4+NSk9PTQgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s0KSkgfHwJXAorCSAgICgoKGJpdCk+PjUpPT01ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNSkpIHx8CVwKKwkgICAoKChiaXQpPj41KT09NiAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzYpKSB8fAlcCisJICAgKCgoYml0KT4+NSk9PTcgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s3KSkgKQlcCisJICA/IDEgOgkJCQkJCQkJXAorCSB0ZXN0X2NwdV9jYXAoYywgYml0KSkKKworI2RlZmluZSBib290X2NwdV9oYXMoYml0KQljcHVfaGFzKCZib290X2NwdV9kYXRhLCBiaXQpCisKKyNkZWZpbmUgc2V0X2NwdV9jYXAoYywgYml0KQlzZXRfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikoKGMpLT54ODZfY2FwYWJpbGl0eSkpCisjZGVmaW5lIGNsZWFyX2NwdV9jYXAoYywgYml0KQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSgoYyktPng4Nl9jYXBhYmlsaXR5KSkKKyNkZWZpbmUgc2V0dXBfY2xlYXJfY3B1X2NhcChiaXQpIGRvIHsgXAorCWNsZWFyX2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIGJpdCk7CVwKKwlzZXRfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKiljbGVhcmVkX2NwdV9jYXBzKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0dXBfZm9yY2VfY3B1X2NhcChiaXQpIGRvIHsgXAorCXNldF9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBiaXQpOwlcCisJY2xlYXJfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKiljbGVhcmVkX2NwdV9jYXBzKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBjcHVfaGFzX2ZwdQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZQVSkKKyNkZWZpbmUgY3B1X2hhc192bWUJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9WTUUpCisjZGVmaW5lIGNwdV9oYXNfZGUJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9ERSkKKyNkZWZpbmUgY3B1X2hhc19wc2UJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpCisjZGVmaW5lIGNwdV9oYXNfdHNjCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDKQorI2RlZmluZSBjcHVfaGFzX3BhZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BBRSkKKyNkZWZpbmUgY3B1X2hhc19wZ2UJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QR0UpCisjZGVmaW5lIGNwdV9oYXNfYXBpYwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpCisjZGVmaW5lIGNwdV9oYXNfc2VwCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VQKQorI2RlZmluZSBjcHVfaGFzX210cnIJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9NVFJSKQorI2RlZmluZSBjcHVfaGFzX21teAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01NWCkKKyNkZWZpbmUgY3B1X2hhc19meHNyCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfRlhTUikKKyNkZWZpbmUgY3B1X2hhc194bW0JCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0pCisjZGVmaW5lIGNwdV9oYXNfeG1tMgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTIpCisjZGVmaW5lIGNwdV9oYXNfeG1tMwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTMpCisjZGVmaW5lIGNwdV9oYXNfaHQJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9IVCkKKyNkZWZpbmUgY3B1X2hhc19tcAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01QKQorI2RlZmluZSBjcHVfaGFzX254CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpCisjZGVmaW5lIGNwdV9oYXNfazZfbXRycgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0s2X01UUlIpCisjZGVmaW5lIGNwdV9oYXNfY3lyaXhfYXJyCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWVJJWF9BUlIpCisjZGVmaW5lIGNwdV9oYXNfY2VudGF1cl9tY3IJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSKQorI2RlZmluZSBjcHVfaGFzX3hzdG9yZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hTVE9SRSkKKyNkZWZpbmUgY3B1X2hhc194c3RvcmVfZW5hYmxlZAlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNUT1JFX0VOKQorI2RlZmluZSBjcHVfaGFzX3hjcnlwdAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hDUllQVCkKKyNkZWZpbmUgY3B1X2hhc194Y3J5cHRfZW5hYmxlZAlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWENSWVBUX0VOKQorI2RlZmluZSBjcHVfaGFzX2FjZTIJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BQ0UyKQorI2RlZmluZSBjcHVfaGFzX2FjZTJfZW5hYmxlZAlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQUNFMl9FTikKKyNkZWZpbmUgY3B1X2hhc19waGUJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QSEUpCisjZGVmaW5lIGNwdV9oYXNfcGhlX2VuYWJsZWQJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BIRV9FTikKKyNkZWZpbmUgY3B1X2hhc19wbW0JCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QTU0pCisjZGVmaW5lIGNwdV9oYXNfcG1tX2VuYWJsZWQJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BNTV9FTikKKyNkZWZpbmUgY3B1X2hhc19kcwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RTKQorI2RlZmluZSBjcHVfaGFzX3BlYnMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QRUJTKQorI2RlZmluZSBjcHVfaGFzX2NsZmx1c2gJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMU0gpCisjZGVmaW5lIGNwdV9oYXNfYnRzCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQlRTKQorI2RlZmluZSBjcHVfaGFzX2dicGFnZXMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKQorI2RlZmluZSBjcHVfaGFzX2FyY2hfcGVyZm1vbglib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKQorI2RlZmluZSBjcHVfaGFzX3BhdAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BBVCkKKyNkZWZpbmUgY3B1X2hhc194bW00XzEJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU00XzEpCisjZGVmaW5lIGNwdV9oYXNfeG1tNF8yCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NNF8yKQorI2RlZmluZSBjcHVfaGFzX3gyYXBpYwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1gyQVBJQykKKyNkZWZpbmUgY3B1X2hhc194c2F2ZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hTQVZFKQorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lOVkxQRykgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorIyBkZWZpbmUgY3B1X2hhc19pbnZscGcJCTEKKyNlbHNlCisjIGRlZmluZSBjcHVfaGFzX2ludmxwZwkJKGJvb3RfY3B1X2RhdGEueDg2ID4gMykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCisjdW5kZWYgIGNwdV9oYXNfdm1lCisjZGVmaW5lIGNwdV9oYXNfdm1lCQkwCisKKyN1bmRlZiAgY3B1X2hhc19wYWUKKyNkZWZpbmUgY3B1X2hhc19wYWUJCV9fX0JVR19fXworCisjdW5kZWYgIGNwdV9oYXNfbXAKKyNkZWZpbmUgY3B1X2hhc19tcAkJMQorCisjdW5kZWYgIGNwdV9oYXNfazZfbXRycgorI2RlZmluZSBjcHVfaGFzX2s2X210cnIJCTAKKworI3VuZGVmICBjcHVfaGFzX2N5cml4X2FycgorI2RlZmluZSBjcHVfaGFzX2N5cml4X2FycgkwCisKKyN1bmRlZiAgY3B1X2hhc19jZW50YXVyX21jcgorI2RlZmluZSBjcHVfaGFzX2NlbnRhdXJfbWNyCTAKKworI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogX0FTTV9YODZfQ1BVRkVBVFVSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY3B1dGltZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1dGltZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvY3B1dGltZS5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2N1cnJlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTMwYjRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3VycmVudC5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgX0FTTV9YODZfQ1VSUkVOVF9ICisjZGVmaW5lIF9BU01fWDg2X0NVUlJFTlRfSAorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3VycmVudF90YXNrKTsKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybiB4ODZfcmVhZF9wZXJjcHUoY3VycmVudF90YXNrKTsKK30KKworI2Vsc2UgLyogWDg2XzMyICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3BkYS5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybiByZWFkX3BkYShwY3VycmVudCk7Cit9CisKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLworCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjZGVmaW5lIEdFVF9DVVJSRU5UKHJlZykgbW92cSAlZ3M6KHBkYV9wY3VycmVudCkscmVnCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIFg4Nl8zMiAqLworCisjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQorCisjZW5kaWYgLyogX0FTTV9YODZfQ1VSUkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWE2ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIF9BU01fWDg2X0RFQlVHUkVHX0gKKyNkZWZpbmUgX0FTTV9YODZfREVCVUdSRUdfSAorCisKKy8qIEluZGljYXRlIHRoZSByZWdpc3RlciBudW1iZXJzIGZvciBhIG51bWJlciBvZiB0aGUgc3BlY2lmaWMKKyAgIGRlYnVnIHJlZ2lzdGVycy4gIFJlZ2lzdGVycyAwLTMgY29udGFpbiB0aGUgYWRkcmVzc2VzIHdlIHdpc2ggdG8gdHJhcCBvbiAqLworI2RlZmluZSBEUl9GSVJTVEFERFIgMCAgICAgICAgLyogdV9kZWJ1Z3JlZ1tEUl9GSVJTVEFERFJdICovCisjZGVmaW5lIERSX0xBU1RBRERSIDMgICAgICAgICAvKiB1X2RlYnVncmVnW0RSX0xBU1RBRERSXSAgKi8KKworI2RlZmluZSBEUl9TVEFUVVMgNiAgICAgICAgICAgLyogdV9kZWJ1Z3JlZ1tEUl9TVEFUVVNdICAgICAqLworI2RlZmluZSBEUl9DT05UUk9MIDcgICAgICAgICAgLyogdV9kZWJ1Z3JlZ1tEUl9DT05UUk9MXSAqLworCisvKiBEZWZpbmUgYSBmZXcgdGhpbmdzIGZvciB0aGUgc3RhdHVzIHJlZ2lzdGVyLiAgV2UgY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZQorICAgd2hpY2ggZGVidWdnaW5nIHJlZ2lzdGVyIHdhcyByZXNwb25zaWJsZSBmb3IgdGhlIHRyYXAuICBUaGUgb3RoZXIgYml0cworICAgYXJlIGVpdGhlciByZXNlcnZlZCBvciBub3Qgb2YgaW50ZXJlc3QgdG8gdXMuICovCisKKyNkZWZpbmUgRFJfVFJBUDAJKDB4MSkJCS8qIGRiMCAqLworI2RlZmluZSBEUl9UUkFQMQkoMHgyKQkJLyogZGIxICovCisjZGVmaW5lIERSX1RSQVAyCSgweDQpCQkvKiBkYjIgKi8KKyNkZWZpbmUgRFJfVFJBUDMJKDB4OCkJCS8qIGRiMyAqLworCisjZGVmaW5lIERSX1NURVAJCSgweDQwMDApCS8qIHNpbmdsZS1zdGVwICovCisjZGVmaW5lIERSX1NXSVRDSAkoMHg4MDAwKQkvKiB0YXNrIHN3aXRjaCAqLworCisvKiBOb3cgZGVmaW5lIGEgYnVuY2ggb2YgdGhpbmdzIGZvciBtYW5pcHVsYXRpbmcgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCisgICBUaGUgdG9wIHR3byBieXRlcyBvZiB0aGUgY29udHJvbCByZWdpc3RlciBjb25zaXN0IG9mIDQgZmllbGRzIG9mIDQKKyAgIGJpdHMgLSBlYWNoIGZpZWxkIGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgZm91ciBkZWJ1ZyByZWdpc3RlcnMsCisgICBhbmQgaW5kaWNhdGVzIHdoYXQgdHlwZXMgb2YgYWNjZXNzIHdlIHRyYXAgb24sIGFuZCBob3cgbGFyZ2UgdGhlIGRhdGEKKyAgIGZpZWxkIGlzIHRoYXQgd2UgYXJlIGxvb2tpbmcgYXQgKi8KKworI2RlZmluZSBEUl9DT05UUk9MX1NISUZUIDE2IC8qIFNraXAgdGhpcyBtYW55IGJpdHMgaW4gY3RsIHJlZ2lzdGVyICovCisjZGVmaW5lIERSX0NPTlRST0xfU0laRSA0ICAgLyogNCBjb250cm9sIGJpdHMgcGVyIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgRFJfUldfRVhFQ1VURSAoMHgwKSAgIC8qIFNldHRpbmdzIGZvciB0aGUgYWNjZXNzIHR5cGVzIHRvIHRyYXAgb24gKi8KKyNkZWZpbmUgRFJfUldfV1JJVEUgKDB4MSkKKyNkZWZpbmUgRFJfUldfUkVBRCAoMHgzKQorCisjZGVmaW5lIERSX0xFTl8xICgweDApIC8qIFNldHRpbmdzIGZvciBkYXRhIGxlbmd0aCB0byB0cmFwIG9uICovCisjZGVmaW5lIERSX0xFTl8yICgweDQpCisjZGVmaW5lIERSX0xFTl80ICgweEMpCisjZGVmaW5lIERSX0xFTl84ICgweDgpCisKKy8qIFRoZSBsb3cgYnl0ZSB0byB0aGUgY29udHJvbCByZWdpc3RlciBkZXRlcm1pbmUgd2hpY2ggcmVnaXN0ZXJzIGFyZQorICAgZW5hYmxlZC4gIFRoZXJlIGFyZSA0IGZpZWxkcyBvZiB0d28gYml0cy4gIE9uZSBiaXQgaXMgImxvY2FsIiwgbWVhbmluZworICAgdGhhdCB0aGUgcHJvY2Vzc29yIHdpbGwgcmVzZXQgdGhlIGJpdCBhZnRlciBhIHRhc2sgc3dpdGNoIGFuZCB0aGUgb3RoZXIKKyAgIGlzIGdsb2JhbCBtZWFuaW5nIHRoYXQgd2UgaGF2ZSB0byBleHBsaWNpdGx5IHJlc2V0IHRoZSBiaXQuICBXaXRoIGxpbnV4LAorICAgeW91IGNhbiB1c2UgZWl0aGVyIG9uZSwgc2luY2Ugd2UgZXhwbGljaXRseSB6ZXJvIHRoZSByZWdpc3RlciB3aGVuIHdlIGVudGVyCisgICBrZXJuZWwgbW9kZS4gKi8KKworI2RlZmluZSBEUl9MT0NBTF9FTkFCTEVfU0hJRlQgMCAgICAvKiBFeHRyYSBzaGlmdCB0byB0aGUgbG9jYWwgZW5hYmxlIGJpdCAqLworI2RlZmluZSBEUl9HTE9CQUxfRU5BQkxFX1NISUZUIDEgICAvKiBFeHRyYSBzaGlmdCB0byB0aGUgZ2xvYmFsIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgRFJfRU5BQkxFX1NJWkUgMiAgICAgICAgICAgLyogMiBlbmFibGUgYml0cyBwZXIgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBEUl9MT0NBTF9FTkFCTEVfTUFTSyAoMHg1NSkgIC8qIFNldCAgbG9jYWwgYml0cyBmb3IgYWxsIDQgcmVncyAqLworI2RlZmluZSBEUl9HTE9CQUxfRU5BQkxFX01BU0sgKDB4QUEpIC8qIFNldCBnbG9iYWwgYml0cyBmb3IgYWxsIDQgcmVncyAqLworCisvKiBUaGUgc2Vjb25kIGJ5dGUgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgaGFzIGEgZmV3IHNwZWNpYWwgdGhpbmdzLgorICAgV2UgY2FuIHNsb3cgdGhlIGluc3RydWN0aW9uIHBpcGVsaW5lIGZvciBpbnN0cnVjdGlvbnMgY29taW5nIHZpYSB0aGUKKyAgIGdkdCBvciB0aGUgbGR0IGlmIHdlIHdhbnQgdG8uICBJIGFtIG5vdCBzdXJlIHdoeSB0aGlzIGlzIGFuIGFkdmFudGFnZSAqLworCisjaWZkZWYgX19pMzg2X18KKyNkZWZpbmUgRFJfQ09OVFJPTF9SRVNFUlZFRCAoMHhGQzAwKSAvKiBSZXNlcnZlZCBieSBJbnRlbCAqLworI2Vsc2UKKyNkZWZpbmUgRFJfQ09OVFJPTF9SRVNFUlZFRCAoMHhGRkZGRkZGRjAwMDBGQzAwVUwpIC8qIFJlc2VydmVkICovCisjZW5kaWYKKworI2RlZmluZSBEUl9MT0NBTF9TTE9XRE9XTiAoMHgxMDApICAgLyogTG9jYWwgc2xvdyB0aGUgcGlwZWxpbmUgKi8KKyNkZWZpbmUgRFJfR0xPQkFMX1NMT1dET1dOICgweDIwMCkgIC8qIEdsb2JhbCBzbG93IHRoZSBwaXBlbGluZSAqLworCisjZW5kaWYgLyogX0FTTV9YODZfREVCVUdSRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVsYXkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5YTY0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlbGF5LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9ERUxBWV9ICisjZGVmaW5lIF9BU01fWDg2X0RFTEFZX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5MyBMaW51cyBUb3J2YWxkcworICoKKyAqIERlbGF5IHJvdXRpbmVzIGNhbGxpbmcgZnVuY3Rpb25zIGluIGFyY2gveDg2L2xpYi9kZWxheS5jCisgKi8KKworLyogVW5kZWZpbmVkIGZ1bmN0aW9ucyB0byBnZXQgY29tcGlsZS10aW1lIGVycm9ycyAqLworZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOworZXh0ZXJuIHZvaWQgX19iYWRfbmRlbGF5KHZvaWQpOworCitleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpOworZXh0ZXJuIHZvaWQgX19jb25zdF91ZGVsYXkodW5zaWduZWQgbG9uZyB4bG9vcHMpOworZXh0ZXJuIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKTsKKworLyogMHgxMGM3IGlzIDIqKjMyIC8gMTAwMDAwMCAocm91bmRlZCB1cCkgKi8KKyNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKwkoKG4pID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KChuKSAqIDB4MTBjN3VsKSkgOiBcCisJX191ZGVsYXkobikpCisKKy8qIDB4NSBpcyAyKiozMiAvIDEwMDAwMDAwMDAgKHJvdW5kZWQgdXApICovCisjZGVmaW5lIG5kZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisJKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6IFwKKwlfX25kZWxheShuKSkKKwordm9pZCB1c2VfdHNjX2RlbGF5KHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9YODZfREVMQVlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YjgyYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC0wLDAgKzEsNDA5IEBACisjaWZuZGVmIF9BU01fWDg2X0RFU0NfSAorI2RlZmluZSBfQVNNX1g4Nl9ERVNDX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+CisjaW5jbHVkZSA8YXNtL2xkdC5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxfbGR0KHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKQoreworCWRlc2MtPmxpbWl0MCA9IGluZm8tPmxpbWl0ICYgMHgwZmZmZjsKKwlkZXNjLT5iYXNlMCA9IGluZm8tPmJhc2VfYWRkciAmIDB4MDAwMGZmZmY7CisKKwlkZXNjLT5iYXNlMSA9IChpbmZvLT5iYXNlX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwlkZXNjLT50eXBlID0gKGluZm8tPnJlYWRfZXhlY19vbmx5IF4gMSkgPDwgMTsKKwlkZXNjLT50eXBlIHw9IGluZm8tPmNvbnRlbnRzIDw8IDI7CisJZGVzYy0+cyA9IDE7CisJZGVzYy0+ZHBsID0gMHgzOworCWRlc2MtPnAgPSBpbmZvLT5zZWdfbm90X3ByZXNlbnQgXiAxOworCWRlc2MtPmxpbWl0ID0gKGluZm8tPmxpbWl0ICYgMHhmMDAwMCkgPj4gMTY7CisJZGVzYy0+YXZsID0gaW5mby0+dXNlYWJsZTsKKwlkZXNjLT5kID0gaW5mby0+c2VnXzMyYml0OworCWRlc2MtPmcgPSBpbmZvLT5saW1pdF9pbl9wYWdlczsKKwlkZXNjLT5iYXNlMiA9IChpbmZvLT5iYXNlX2FkZHIgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwkvKgorCSAqIERvbid0IGFsbG93IHNldHRpbmcgb2YgdGhlIGxtIGJpdC4gSXQgaXMgdXNlbGVzcyBhbnl3YXkKKwkgKiBiZWNhdXNlIDY0Yml0IHN5c3RlbSBjYWxscyByZXF1aXJlIF9fVVNFUl9DUzoKKwkgKi8KKwlkZXNjLT5sID0gMDsKK30KKworZXh0ZXJuIHN0cnVjdCBkZXNjX3B0ciBpZHRfZGVzY3I7CitleHRlcm4gZ2F0ZV9kZXNjIGlkdF90YWJsZVtdOworCitzdHJ1Y3QgZ2R0X3BhZ2UgeworCXN0cnVjdCBkZXNjX3N0cnVjdCBnZHRbR0RUX0VOVFJJRVNdOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdldF9jcHVfZ2R0X3RhYmxlKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHBlcl9jcHUoZ2R0X3BhZ2UsIGNwdSkuZ2R0OworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFja19nYXRlKGdhdGVfZGVzYyAqZ2F0ZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgbG9uZyBmdW5jLAorCQkJICAgICB1bnNpZ25lZCBkcGwsIHVuc2lnbmVkIGlzdCwgdW5zaWduZWQgc2VnKQoreworCWdhdGUtPm9mZnNldF9sb3cgPSBQVFJfTE9XKGZ1bmMpOworCWdhdGUtPnNlZ21lbnQgPSBfX0tFUk5FTF9DUzsKKwlnYXRlLT5pc3QgPSBpc3Q7CisJZ2F0ZS0+cCA9IDE7CisJZ2F0ZS0+ZHBsID0gZHBsOworCWdhdGUtPnplcm8wID0gMDsKKwlnYXRlLT56ZXJvMSA9IDA7CisJZ2F0ZS0+dHlwZSA9IHR5cGU7CisJZ2F0ZS0+b2Zmc2V0X21pZGRsZSA9IFBUUl9NSURETEUoZnVuYyk7CisJZ2F0ZS0+b2Zmc2V0X2hpZ2ggPSBQVFJfSElHSChmdW5jKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWNrX2dhdGUoZ2F0ZV9kZXNjICpnYXRlLCB1bnNpZ25lZCBjaGFyIHR5cGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgZHBsLCB1bnNpZ25lZCBmbGFncywKKwkJCSAgICAgdW5zaWduZWQgc2hvcnQgc2VnKQoreworCWdhdGUtPmEgPSAoc2VnIDw8IDE2KSB8IChiYXNlICYgMHhmZmZmKTsKKwlnYXRlLT5iID0gKGJhc2UgJiAweGZmZmYwMDAwKSB8CisJCSAgKCgoMHg4MCB8IHR5cGUgfCAoZHBsIDw8IDUpKSAmIDB4ZmYpIDw8IDgpOworfQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgZGVzY19lbXB0eShjb25zdCB2b2lkICpwdHIpCit7CisJY29uc3QgdTMyICpkZXNjID0gcHRyOworCXJldHVybiAhKGRlc2NbMF0gfCBkZXNjWzFdKTsKK30KKworI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKyNkZWZpbmUgbG9hZF9UUl9kZXNjKCkgbmF0aXZlX2xvYWRfdHJfZGVzYygpCisjZGVmaW5lIGxvYWRfZ2R0KGR0cikgbmF0aXZlX2xvYWRfZ2R0KGR0cikKKyNkZWZpbmUgbG9hZF9pZHQoZHRyKSBuYXRpdmVfbG9hZF9pZHQoZHRyKQorI2RlZmluZSBsb2FkX3RyKHRyKSBhc20gdm9sYXRpbGUoImx0ciAlMCI6OiJtIiAodHIpKQorI2RlZmluZSBsb2FkX2xkdChsZHQpIGFzbSB2b2xhdGlsZSgibGxkdCAlMCI6OiJtIiAobGR0KSkKKworI2RlZmluZSBzdG9yZV9nZHQoZHRyKSBuYXRpdmVfc3RvcmVfZ2R0KGR0cikKKyNkZWZpbmUgc3RvcmVfaWR0KGR0cikgbmF0aXZlX3N0b3JlX2lkdChkdHIpCisjZGVmaW5lIHN0b3JlX3RyKHRyKSAodHIgPSBuYXRpdmVfc3RvcmVfdHIoKSkKKyNkZWZpbmUgc3RvcmVfbGR0KGxkdCkgYXNtKCJzbGR0ICUwIjoiPW0iIChsZHQpKQorCisjZGVmaW5lIGxvYWRfVExTKHQsIGNwdSkgbmF0aXZlX2xvYWRfdGxzKHQsIGNwdSkKKyNkZWZpbmUgc2V0X2xkdCBuYXRpdmVfc2V0X2xkdAorCisjZGVmaW5lIHdyaXRlX2xkdF9lbnRyeShkdCwgZW50cnksIGRlc2MpCVwKKwluYXRpdmVfd3JpdGVfbGR0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYykKKyNkZWZpbmUgd3JpdGVfZ2R0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYywgdHlwZSkJCVwKKwluYXRpdmVfd3JpdGVfZ2R0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYywgdHlwZSkKKyNkZWZpbmUgd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeSwgZykJCVwKKwluYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeSwgZykKKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FsbG9jX2xkdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgdW5zaWduZWQgZW50cmllcykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2ZyZWVfbGR0KHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKQoreworfQorI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2lkdF9lbnRyeShnYXRlX2Rlc2MgKmlkdCwgaW50IGVudHJ5LAorCQkJCQkgIGNvbnN0IGdhdGVfZGVzYyAqZ2F0ZSkKK3sKKwltZW1jcHkoJmlkdFtlbnRyeV0sIGdhdGUsIHNpemVvZigqZ2F0ZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2xkdF9lbnRyeShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgaW50IGVudHJ5LAorCQkJCQkgIGNvbnN0IHZvaWQgKmRlc2MpCit7CisJbWVtY3B5KCZsZHRbZW50cnldLCBkZXNjLCA4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9nZHRfZW50cnkoc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQsIGludCBlbnRyeSwKKwkJCQkJICBjb25zdCB2b2lkICpkZXNjLCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIERFU0NfVFNTOgorCQlzaXplID0gc2l6ZW9mKHRzc19kZXNjKTsKKwkJYnJlYWs7CisJY2FzZSBERVNDX0xEVDoKKwkJc2l6ZSA9IHNpemVvZihsZHRfZGVzYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IGRlc2Nfc3RydWN0KTsKKwkJYnJlYWs7CisJfQorCW1lbWNweSgmZ2R0W2VudHJ5XSwgZGVzYywgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWNrX2Rlc2NyaXB0b3Ioc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1bnNpZ25lZCBsb25nIGJhc2UsCisJCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdCwgdW5zaWduZWQgY2hhciB0eXBlLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MpCit7CisJZGVzYy0+YSA9ICgoYmFzZSAmIDB4ZmZmZikgPDwgMTYpIHwgKGxpbWl0ICYgMHhmZmZmKTsKKwlkZXNjLT5iID0gKGJhc2UgJiAweGZmMDAwMDAwKSB8ICgoYmFzZSAmIDB4ZmYwMDAwKSA+PiAxNikgfAorCQkobGltaXQgJiAweDAwMGYwMDAwKSB8ICgodHlwZSAmIDB4ZmYpIDw8IDgpIHwKKwkJKChmbGFncyAmIDB4ZikgPDwgMjApOworCWRlc2MtPnAgPSAxOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHNzbGR0X2Rlc2NyaXB0b3Iodm9pZCAqZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc3RydWN0IGxkdHRzc19kZXNjNjQgKmRlc2MgPSBkOworCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKKwlkZXNjLT5saW1pdDAgPSBzaXplICYgMHhGRkZGOworCWRlc2MtPmJhc2UwID0gUFRSX0xPVyhhZGRyKTsKKwlkZXNjLT5iYXNlMSA9IFBUUl9NSURETEUoYWRkcikgJiAweEZGOworCWRlc2MtPnR5cGUgPSB0eXBlOworCWRlc2MtPnAgPSAxOworCWRlc2MtPmxpbWl0MSA9IChzaXplID4+IDE2KSAmIDB4RjsKKwlkZXNjLT5iYXNlMiA9IChQVFJfTUlERExFKGFkZHIpID4+IDgpICYgMHhGRjsKKwlkZXNjLT5iYXNlMyA9IFBUUl9ISUdIKGFkZHIpOworI2Vsc2UKKwlwYWNrX2Rlc2NyaXB0b3IoKHN0cnVjdCBkZXNjX3N0cnVjdCAqKWQsIGFkZHIsIHNpemUsIDB4ODAgfCB0eXBlLCAwKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfdHNzX2Rlc2ModW5zaWduZWQgY3B1LCB1bnNpZ25lZCBpbnQgZW50cnksIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IGRlc2Nfc3RydWN0ICpkID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKKwl0c3NfZGVzYyB0c3M7CisKKwkvKgorCSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSBjb21pbmcgZnJvbSBhbiBleHRyYSAibG9uZyIgYXQgdGhlIGVuZAorCSAqIG9mIHRoZSBpb2JpdG1hcC4gU2VlIHRzc19zdHJ1Y3QgZGVmaW5pdGlvbiBpbiBwcm9jZXNzb3IuaAorCSAqCisJICogLTE/IHNlZyBiYXNlK2xpbWl0IHNob3VsZCBiZSBwb2ludGluZyB0byB0aGUgYWRkcmVzcyBvZiB0aGUKKwkgKiBsYXN0IHZhbGlkIGJ5dGUKKwkgKi8KKwlzZXRfdHNzbGR0X2Rlc2NyaXB0b3IoJnRzcywgKHVuc2lnbmVkIGxvbmcpYWRkciwgREVTQ19UU1MsCisJCQkgICAgICBJT19CSVRNQVBfT0ZGU0VUICsgSU9fQklUTUFQX0JZVEVTICsKKwkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpOworCXdyaXRlX2dkdF9lbnRyeShkLCBlbnRyeSwgJnRzcywgREVTQ19UU1MpOworfQorCisjZGVmaW5lIHNldF90c3NfZGVzYyhjcHUsIGFkZHIpIF9fc2V0X3Rzc19kZXNjKGNwdSwgR0RUX0VOVFJZX1RTUywgYWRkcikKKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfbGR0KGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBlbnRyaWVzKQoreworCWlmIChsaWtlbHkoZW50cmllcyA9PSAwKSkKKwkJYXNtIHZvbGF0aWxlKCJsbGR0ICV3MCI6OiJxIiAoMCkpOworCWVsc2UgeworCQl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCWxkdF9kZXNjIGxkdDsKKworCQlzZXRfdHNzbGR0X2Rlc2NyaXB0b3IoJmxkdCwgKHVuc2lnbmVkIGxvbmcpYWRkciwgREVTQ19MRFQsCisJCQkJICAgICAgZW50cmllcyAqIExEVF9FTlRSWV9TSVpFIC0gMSk7CisJCXdyaXRlX2dkdF9lbnRyeShnZXRfY3B1X2dkdF90YWJsZShjcHUpLCBHRFRfRU5UUllfTERULAorCQkJCSZsZHQsIERFU0NfTERUKTsKKwkJYXNtIHZvbGF0aWxlKCJsbGR0ICV3MCI6OiJxIiAoR0RUX0VOVFJZX0xEVCo4KSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2xvYWRfdHJfZGVzYyh2b2lkKQoreworCWFzbSB2b2xhdGlsZSgibHRyICV3MCI6OiJxIiAoR0RUX0VOVFJZX1RTUyo4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfbG9hZF9nZHQoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpkdHIpCit7CisJYXNtIHZvbGF0aWxlKCJsZ2R0ICUwIjo6Im0iICgqZHRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfbG9hZF9pZHQoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpkdHIpCit7CisJYXNtIHZvbGF0aWxlKCJsaWR0ICUwIjo6Im0iICgqZHRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc3RvcmVfZ2R0KHN0cnVjdCBkZXNjX3B0ciAqZHRyKQoreworCWFzbSB2b2xhdGlsZSgic2dkdCAlMCI6Ij1tIiAoKmR0cikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3N0b3JlX2lkdChzdHJ1Y3QgZGVzY19wdHIgKmR0cikKK3sKKwlhc20gdm9sYXRpbGUoInNpZHQgJTAiOiI9bSIgKCpkdHIpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9zdG9yZV90cih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdHI7CisJYXNtIHZvbGF0aWxlKCJzdHIgJTAiOiI9ciIgKHRyKSk7CisJcmV0dXJuIHRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2xvYWRfdGxzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKKworCWZvciAoaSA9IDA7IGkgPCBHRFRfRU5UUllfVExTX0VOVFJJRVM7IGkrKykKKwkJZ2R0W0dEVF9FTlRSWV9UTFNfTUlOICsgaV0gPSB0LT50bHNfYXJyYXlbaV07Cit9CisKKyNkZWZpbmUgX0xEVF9lbXB0eShpbmZvKQkJCQlcCisJKChpbmZvKS0+YmFzZV9hZGRyCQk9PSAwCSYmCVwKKwkgKGluZm8pLT5saW1pdAkJCT09IDAJJiYJXAorCSAoaW5mbyktPmNvbnRlbnRzCQk9PSAwCSYmCVwKKwkgKGluZm8pLT5yZWFkX2V4ZWNfb25seQkJPT0gMQkmJglcCisJIChpbmZvKS0+c2VnXzMyYml0CQk9PSAwCSYmCVwKKwkgKGluZm8pLT5saW1pdF9pbl9wYWdlcwkJPT0gMAkmJglcCisJIChpbmZvKS0+c2VnX25vdF9wcmVzZW50CT09IDEJJiYJXAorCSAoaW5mbyktPnVzZWFibGUJCT09IDApCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoX0xEVF9lbXB0eShpbmZvKSAmJiAoKGluZm8pLT5sbSA9PSAwKSkKKyNlbHNlCisjZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoX0xEVF9lbXB0eShpbmZvKSkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfTERUKHZvaWQpCit7CisJc2V0X2xkdChOVUxMLCAwKTsKK30KKworLyoKKyAqIGxvYWQgb25lIHBhcnRpY3VsYXIgTERUIGludG8gdGhlIGN1cnJlbnQgQ1BVCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX0xEVF9ub2xvY2sobW1fY29udGV4dF90ICpwYykKK3sKKwlzZXRfbGR0KHBjLT5sZHQsIHBjLT5zaXplKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfTERUKG1tX2NvbnRleHRfdCAqcGMpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJbG9hZF9MRFRfbm9sb2NrKHBjKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2Rlc2NfYmFzZShjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MpCit7CisJcmV0dXJuIGRlc2MtPmJhc2UwIHwgKChkZXNjLT5iYXNlMSkgPDwgMTYpIHwgKChkZXNjLT5iYXNlMikgPDwgMjQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2Rlc2NfbGltaXQoY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQoreworCXJldHVybiBkZXNjLT5saW1pdDAgfCAoZGVzYy0+bGltaXQgPDwgMTYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NldF9nYXRlKGludCBnYXRlLCB1bnNpZ25lZCB0eXBlLCB2b2lkICphZGRyLAorCQkJICAgICB1bnNpZ25lZCBkcGwsIHVuc2lnbmVkIGlzdCwgdW5zaWduZWQgc2VnKQoreworCWdhdGVfZGVzYyBzOworCXBhY2tfZ2F0ZSgmcywgdHlwZSwgKHVuc2lnbmVkIGxvbmcpYWRkciwgZHBsLCBpc3QsIHNlZyk7CisJLyoKKwkgKiBkb2VzIG5vdCBuZWVkIHRvIGJlIGF0b21pYyBiZWNhdXNlIGl0IGlzIG9ubHkgZG9uZSBvbmNlIGF0CisJICogc2V0dXAgdGltZQorCSAqLworCXdyaXRlX2lkdF9lbnRyeShpZHRfdGFibGUsIGdhdGUsICZzKTsKK30KKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gdXNlICdpZHRfdGFibGUnIHJhdGhlciB0aGFuICdpZHQnLCBhbmQKKyAqIHRodXMgdXNlIHRoZSBfbm9ubWFwcGVkXyB2ZXJzaW9uIG9mIHRoZSBJRFQsIGFzIHRoZQorICogUGVudGl1bSBGMCAwRiBidWdmaXggY2FuIGhhdmUgcmVzdWx0ZWQgaW4gdGhlIG1hcHBlZAorICogSURUIGJlaW5nIHdyaXRlLXByb3RlY3RlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIHZvaWQgKmFkZHIpCit7CisJQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7CisJX3NldF9nYXRlKG4sIEdBVEVfSU5URVJSVVBULCBhZGRyLCAwLCAwLCBfX0tFUk5FTF9DUyk7Cit9CisKKyNkZWZpbmUgU1lTX1ZFQ1RPUl9GUkVFCQkwCisjZGVmaW5lIFNZU19WRUNUT1JfQUxMT0NFRAkxCisKK2V4dGVybiBpbnQgZmlyc3Rfc3lzdGVtX3ZlY3RvcjsKK2V4dGVybiBjaGFyIHN5c3RlbV92ZWN0b3JzW107CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zeXN0ZW1fdmVjdG9yKGludCB2ZWN0b3IpCit7CisJaWYgKHN5c3RlbV92ZWN0b3JzW3ZlY3Rvcl0gPT0gU1lTX1ZFQ1RPUl9GUkVFKSB7CisJCXN5c3RlbV92ZWN0b3JzW3ZlY3Rvcl0gPSBTWVNfVkVDVE9SX0FMTE9DRUQ7CisJCWlmIChmaXJzdF9zeXN0ZW1fdmVjdG9yID4gdmVjdG9yKQorCQkJZmlyc3Rfc3lzdGVtX3ZlY3RvciA9IHZlY3RvcjsKKwl9IGVsc2UKKwkJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIHZvaWQgKmFkZHIpCit7CisJYWxsb2Nfc3lzdGVtX3ZlY3RvcihuKTsKKwlzZXRfaW50cl9nYXRlKG4sIGFkZHIpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHNldHMgdXAgYW4gaW50ZXJydXB0IGdhdGUgYXQgZGlyZWN0b3J5IHByaXZpbGVnZSBsZXZlbCAzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N5c3RlbV9pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIHZvaWQgKmFkZHIpCit7CisJQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7CisJX3NldF9nYXRlKG4sIEdBVEVfSU5URVJSVVBULCBhZGRyLCAweDMsIDAsIF9fS0VSTkVMX0NTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zeXN0ZW1fdHJhcF9nYXRlKHVuc2lnbmVkIGludCBuLCB2b2lkICphZGRyKQoreworCUJVR19PTigodW5zaWduZWQpbiA+IDB4RkYpOworCV9zZXRfZ2F0ZShuLCBHQVRFX1RSQVAsIGFkZHIsIDB4MywgMCwgX19LRVJORUxfQ1MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RyYXBfZ2F0ZSh1bnNpZ25lZCBpbnQgbiwgdm9pZCAqYWRkcikKK3sKKwlCVUdfT04oKHVuc2lnbmVkKW4gPiAweEZGKTsKKwlfc2V0X2dhdGUobiwgR0FURV9UUkFQLCBhZGRyLCAwLCAwLCBfX0tFUk5FTF9DUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19nYXRlKHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgZ2R0X2VudHJ5KQoreworCUJVR19PTigodW5zaWduZWQpbiA+IDB4RkYpOworCV9zZXRfZ2F0ZShuLCBHQVRFX1RBU0ssICh2b2lkICopMCwgMCwgMCwgKGdkdF9lbnRyeTw8MykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ludHJfZ2F0ZV9pc3QoaW50IG4sIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGlzdCkKK3sKKwlCVUdfT04oKHVuc2lnbmVkKW4gPiAweEZGKTsKKwlfc2V0X2dhdGUobiwgR0FURV9JTlRFUlJVUFQsIGFkZHIsIDAsIGlzdCwgX19LRVJORUxfQ1MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N5c3RlbV9pbnRyX2dhdGVfaXN0KGludCBuLCB2b2lkICphZGRyLCB1bnNpZ25lZCBpc3QpCit7CisJQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7CisJX3NldF9nYXRlKG4sIEdBVEVfSU5URVJSVVBULCBhZGRyLCAweDMsIGlzdCwgX19LRVJORUxfQ1MpOworfQorCisjZWxzZQorLyoKKyAqIEdFVF9ERVNDX0JBU0UgcmVhZHMgdGhlIGRlc2NyaXB0b3IgYmFzZSBvZiB0aGUgc3BlY2lmaWVkIHNlZ21lbnQuCisgKgorICogQXJnczoKKyAqICAgIGlkeCAtIGRlc2NyaXB0b3IgaW5kZXgKKyAqICAgIGdkdCAtIEdEVCBwb2ludGVyCisgKiAgICBiYXNlIC0gMzJiaXQgcmVnaXN0ZXIgdG8gd2hpY2ggdGhlIGJhc2Ugd2lsbCBiZSB3cml0dGVuCisgKiAgICBsb193IC0gbG8gd29yZCBvZiB0aGUgImJhc2UiIHJlZ2lzdGVyCisgKiAgICBsb19iIC0gbG8gYnl0ZSBvZiB0aGUgImJhc2UiIHJlZ2lzdGVyCisgKiAgICBoaV9iIC0gaGkgYnl0ZSBvZiB0aGUgbG93IHdvcmQgb2YgdGhlICJiYXNlIiByZWdpc3RlcgorICoKKyAqIEV4YW1wbGU6CisgKiAgICBHRVRfREVTQ19CQVNFKEdEVF9FTlRSWV9FU1BGSVhfU1MsICVlYngsICVlYXgsICVheCwgJWFsLCAlYWgpCisgKiAgICBXaWxsIHJlYWQgdGhlIGJhc2UgYWRkcmVzcyBvZiBHRFRfRU5UUllfRVNQRklYX1NTIGFuZCBwdXQgaXQgaW50byAlZWF4LgorICovCisjZGVmaW5lIEdFVF9ERVNDX0JBU0UoaWR4LCBnZHQsIGJhc2UsIGxvX3csIGxvX2IsIGhpX2IpIFwKKwltb3ZiIGlkeCAqIDggKyA0KGdkdCksIGxvX2I7CQkJXAorCW1vdmIgaWR4ICogOCArIDcoZ2R0KSwgaGlfYjsJCQlcCisJc2hsbCAkMTYsIGJhc2U7CQkJCQlcCisJbW92dyBpZHggKiA4ICsgMihnZHQpLCBsb193OworCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X0RFU0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzY19kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFkZWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzY19kZWZzLmgKQEAgLTAsMCArMSw5NSBAQAorLyogV3JpdHRlbiAyMDAwIGJ5IEFuZGkgS2xlZW4gKi8KKyNpZm5kZWYgX0FTTV9YODZfREVTQ19ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfREVTQ19ERUZTX0gKKworLyoKKyAqIFNlZ21lbnQgZGVzY3JpcHRvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIHVzYWJsZSBmcm9tIGJvdGggeDg2XzY0IGFuZCBpMzg2CisgKiBhcmNocy4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIEZJWE1FOiBBY2Vzc2luZyB0aGUgZGVzY19zdHJ1Y3QgdGhyb3VnaCBpdHMgZmllbGRzIGlzIG1vcmUgZWxlZ2FudCwKKyAqIGFuZCBzaG91bGQgYmUgdGhlIG9uZSB2YWxpZCB0aGluZyB0byBkby4gSG93ZXZlciwgYSBsb3Qgb2Ygb3BlbiBjb2RlCisgKiBzdGlsbCB0b3VjaGVzIHRoZSBhIGFuZCBiIGFjZXNzb3JzLCBhbmQgZG9pbmcgdGhpcyBhbGxvdyB1cyB0byBkbyBpdAorICogaW5jcmVtZW50YWxseS4gV2Uga2VlcCB0aGUgc2lnbmF0dXJlIGFzIGEgc3RydWN0LCByYXRoZXIgdGhhbiBhbiB1bmlvbiwKKyAqIHNvIHdlIGNhbiBnZXQgcmlkIG9mIGl0IHRyYW5zcGFyZW50bHkgaW4gdGhlIGZ1dHVyZSAtLSBnbG9tbWVyCisgKi8KKy8qIDggYnl0ZSBzZWdtZW50IGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBkZXNjX3N0cnVjdCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IGE7CisJCQl1bnNpZ25lZCBpbnQgYjsKKwkJfTsKKwkJc3RydWN0IHsKKwkJCXUxNiBsaW1pdDA7CisJCQl1MTYgYmFzZTA7CisJCQl1bnNpZ25lZCBiYXNlMTogOCwgdHlwZTogNCwgczogMSwgZHBsOiAyLCBwOiAxOworCQkJdW5zaWduZWQgbGltaXQ6IDQsIGF2bDogMSwgbDogMSwgZDogMSwgZzogMSwgYmFzZTI6IDg7CisJCX07CisJfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK2VudW0geworCUdBVEVfSU5URVJSVVBUID0gMHhFLAorCUdBVEVfVFJBUCA9IDB4RiwKKwlHQVRFX0NBTEwgPSAweEMsCisJR0FURV9UQVNLID0gMHg1LAorfTsKKworLyogMTZieXRlIGdhdGUgKi8KK3N0cnVjdCBnYXRlX3N0cnVjdDY0IHsKKwl1MTYgb2Zmc2V0X2xvdzsKKwl1MTYgc2VnbWVudDsKKwl1bnNpZ25lZCBpc3QgOiAzLCB6ZXJvMCA6IDUsIHR5cGUgOiA1LCBkcGwgOiAyLCBwIDogMTsKKwl1MTYgb2Zmc2V0X21pZGRsZTsKKwl1MzIgb2Zmc2V0X2hpZ2g7CisJdTMyIHplcm8xOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBQVFJfTE9XKHgpICgodW5zaWduZWQgbG9uZyBsb25nKSh4KSAmIDB4RkZGRikKKyNkZWZpbmUgUFRSX01JRERMRSh4KSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgUFRSX0hJR0goeCkgKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpID4+IDMyKQorCitlbnVtIHsKKwlERVNDX1RTUyA9IDB4OSwKKwlERVNDX0xEVCA9IDB4MiwKKwlERVNDVFlQRV9TID0gMHgxMCwJLyogIXN5c3RlbSAqLworfTsKKworLyogTERUIG9yIFRTUyBkZXNjcmlwdG9yIGluIHRoZSBHRFQuIDE2IGJ5dGVzLiAqLworc3RydWN0IGxkdHRzc19kZXNjNjQgeworCXUxNiBsaW1pdDA7CisJdTE2IGJhc2UwOworCXVuc2lnbmVkIGJhc2UxIDogOCwgdHlwZSA6IDUsIGRwbCA6IDIsIHAgOiAxOworCXVuc2lnbmVkIGxpbWl0MSA6IDQsIHplcm8wIDogMywgZyA6IDEsIGJhc2UyIDogODsKKwl1MzIgYmFzZTM7CisJdTMyIHplcm8xOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKK3R5cGVkZWYgc3RydWN0IGdhdGVfc3RydWN0NjQgZ2F0ZV9kZXNjOwordHlwZWRlZiBzdHJ1Y3QgbGR0dHNzX2Rlc2M2NCBsZHRfZGVzYzsKK3R5cGVkZWYgc3RydWN0IGxkdHRzc19kZXNjNjQgdHNzX2Rlc2M7CisjZGVmaW5lIGdhdGVfb2Zmc2V0KGcpICgoZykub2Zmc2V0X2xvdyB8ICgodW5zaWduZWQgbG9uZykoZykub2Zmc2V0X21pZGRsZSA8PCAxNikgfCAoKHVuc2lnbmVkIGxvbmcpKGcpLm9mZnNldF9oaWdoIDw8IDMyKSkKKyNkZWZpbmUgZ2F0ZV9zZWdtZW50KGcpICgoZykuc2VnbWVudCkKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBkZXNjX3N0cnVjdCBnYXRlX2Rlc2M7Cit0eXBlZGVmIHN0cnVjdCBkZXNjX3N0cnVjdCBsZHRfZGVzYzsKK3R5cGVkZWYgc3RydWN0IGRlc2Nfc3RydWN0IHRzc19kZXNjOworI2RlZmluZSBnYXRlX29mZnNldChnKQkJKCgoZykuYiAmIDB4ZmZmZjAwMDApIHwgKChnKS5hICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIGdhdGVfc2VnbWVudChnKQkJKChnKS5hID4+IDE2KQorI2VuZGlmCisKK3N0cnVjdCBkZXNjX3B0ciB7CisJdW5zaWduZWQgc2hvcnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X0RFU0NfREVGU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDM0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9BU01fWDg2X0RFVklDRV9ICisjZGVmaW5lIF9BU01fWDg2X0RFVklDRV9ICisKK3N0cnVjdCBkZXZfYXJjaGRhdGEgeworI2lmZGVmIENPTkZJR19BQ1BJCisJdm9pZAkqYWNwaV9oYW5kbGU7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0RNQVIKKwl2b2lkICppb21tdTsgLyogaG9vayBmb3IgSU9NTVUgc3BlY2lmaWMgZXh0ZW5zaW9uICovCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGl2NjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyZDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RpdjY0LmgKQEAgLTAsMCArMSw2MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9ESVY2NF9ICisjZGVmaW5lIF9BU01fWDg2X0RJVjY0X0gKKworI2lmZGVmIENPTkZJR19YODZfMzIKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBkb19kaXYoKSBpcyBOT1QgYSBDIGZ1bmN0aW9uLiBJdCB3YW50cyB0byByZXR1cm4KKyAqIHR3byB2YWx1ZXMgKHRoZSBxdW90aWVudCBhbmQgdGhlIHJlbWFpbmRlciksIGJ1dAorICogc2luY2UgdGhhdCBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIGluIEMsIHdoYXQgaXQKKyAqIGRvZXMgaXM6CisgKgorICogLSBtb2RpZmllcyB0aGUgNjQtYml0IGRpdmlkZW5kIF9pbl9wbGFjZV8KKyAqIC0gcmV0dXJucyB0aGUgMzItYml0IHJlbWFpbmRlcgorICoKKyAqIFRoaXMgZW5kcyB1cCBiZWluZyB0aGUgbW9zdCBlZmZpY2llbnQgImNhbGxpbmcKKyAqIGNvbnZlbnRpb24iIG9uIHg4Ni4KKyAqLworI2RlZmluZSBkb19kaXYobiwgYmFzZSkJCQkJCQlcCisoewkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX191cHBlciwgX19sb3csIF9faGlnaCwgX19tb2QsIF9fYmFzZTsJXAorCV9fYmFzZSA9IChiYXNlKTsJCQkJCVwKKwlhc20oIiI6Ij1hIiAoX19sb3cpLCAiPWQiIChfX2hpZ2gpIDogIkEiIChuKSk7CQlcCisJX191cHBlciA9IF9faGlnaDsJCQkJCVwKKwlpZiAoX19oaWdoKSB7CQkJCQkJXAorCQlfX3VwcGVyID0gX19oaWdoICUgKF9fYmFzZSk7CQkJXAorCQlfX2hpZ2ggPSBfX2hpZ2ggLyAoX19iYXNlKTsJCQlcCisJfQkJCQkJCQlcCisJYXNtKCJkaXZsICUyIjoiPWEiIChfX2xvdyksICI9ZCIgKF9fbW9kKQkJXAorCSAgICA6ICJybSIgKF9fYmFzZSksICIwIiAoX19sb3cpLCAiMSIgKF9fdXBwZXIpKTsJXAorCWFzbSgiIjoiPUEiIChuKSA6ICJhIiAoX19sb3cpLCAiZCIgKF9faGlnaCkpOwkJXAorCV9fbW9kOwkJCQkJCQlcCit9KQorCitzdGF0aWMgaW5saW5lIHU2NCBkaXZfdTY0X3JlbSh1NjQgZGl2aWRlbmQsIHUzMiBkaXZpc29yLCB1MzIgKnJlbWFpbmRlcikKK3sKKwl1bmlvbiB7CisJCXU2NCB2NjQ7CisJCXUzMiB2MzJbMl07CisJfSBkID0geyBkaXZpZGVuZCB9OworCXUzMiB1cHBlcjsKKworCXVwcGVyID0gZC52MzJbMV07CisJZC52MzJbMV0gPSAwOworCWlmICh1cHBlciA+PSBkaXZpc29yKSB7CisJCWQudjMyWzFdID0gdXBwZXIgLyBkaXZpc29yOworCQl1cHBlciAlPSBkaXZpc29yOworCX0KKwlhc20gKCJkaXZsICUyIiA6ICI9YSIgKGQudjMyWzBdKSwgIj1kIiAoKnJlbWFpbmRlcikgOgorCQkicm0iIChkaXZpc29yKSwgIjAiIChkLnYzMlswXSksICIxIiAodXBwZXIpKTsKKwlyZXR1cm4gZC52NjQ7Cit9CisjZGVmaW5lIGRpdl91NjRfcmVtCWRpdl91NjRfcmVtCisKKyNlbHNlCisjIGluY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCisjZW5kaWYgLyogX0FTTV9YODZfRElWNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1Mzk3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwzMDggQEAKKyNpZm5kZWYgX0FTTV9YODZfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX1g4Nl9ETUFfTUFQUElOR19ICisKKy8qCisgKiBJT01NVSBpbnRlcmZhY2UuIFNlZSBEb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dCBhbmQgRE1BLUFQSS50eHQgZm9yCisgKiBkb2N1bWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zd2lvdGxiLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLWNvaGVyZW50Lmg+CisKK2V4dGVybiBkbWFfYWRkcl90IGJhZF9kbWFfYWRkcmVzczsKK2V4dGVybiBpbnQgaW9tbXVfbWVyZ2U7CitleHRlcm4gc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldjsKK2V4dGVybiBpbnQgcGFuaWNfb25fb3ZlcmZsb3c7CisKK3N0cnVjdCBkbWFfbWFwcGluZ19vcHMgeworCWludCAgICAgICAgICAgICAoKm1hcHBpbmdfZXJyb3IpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIGRtYV9hZGRyX3QgZG1hX2FkZHIpOworCXZvaWQqICAgICAgICAgICAoKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCk7CisJdm9pZCAgICAgICAgICAgICgqZnJlZV9jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKwlkbWFfYWRkcl90ICAgICAgKCptYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcHRyLAorCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCWludCBkaXJlY3Rpb24pOworCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCWludCBkaXJlY3Rpb24pOworCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2dfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQlpbnQgZGlyZWN0aW9uKTsKKwlpbnQgICAgICAgICAgICAgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCWludCBuZW50cywgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCQlpbnQgZGlyZWN0aW9uKTsKKwlpbnQgICAgICAgICAgICAgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOworCWludAkJaXNfcGh5czsKK307CisKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJcmV0dXJuIGRtYV9vcHM7CisjZWxzZQorCWlmICh1bmxpa2VseSghZGV2KSB8fCAhZGV2LT5hcmNoZGF0YS5kbWFfb3BzKQorCQlyZXR1cm4gZG1hX29wczsKKwllbHNlCisJCXJldHVybiBkZXYtPmFyY2hkYXRhLmRtYV9vcHM7CisjZW5kaWYgLyogX0FTTV9YODZfRE1BX01BUFBJTkdfSCAqLworfQorCisvKiBNYWtlIHN1cmUgd2Uga2VlcCB0aGUgc2FtZSBiZWhhdmlvdXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJcmV0dXJuIDA7CisjZWxzZQorCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJaWYgKG9wcy0+bWFwcGluZ19lcnJvcikKKwkJcmV0dXJuIG9wcy0+bWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKTsKKworCXJldHVybiAoZG1hX2FkZHIgPT0gYmFkX2RtYV9hZGRyZXNzKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKKyNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKKyNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDEpCisKK2V4dGVybiBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOworZXh0ZXJuIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CisKK2V4dGVybiB2b2lkICpkbWFfZ2VuZXJpY19hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCQlkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZmxhZyk7CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAorZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJICAgICAgIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCXJldHVybiBvcHMtPm1hcF9zaW5nbGUoaHdkZXYsIHZpcnRfdG9fcGh5cyhwdHIpLCBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLAorCQkgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCWlmIChvcHMtPnVubWFwX3NpbmdsZSkKKwkJb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCXJldHVybiBvcHMtPm1hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgICAgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJaWYgKG9wcy0+dW5tYXBfc2cpCisJCW9wcy0+dW5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCWlmIChvcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUpCisJCW9wcy0+c3luY19zaW5nbGVfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlpZiAob3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKQorCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCWlmIChvcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpCisJCW9wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgb2Zmc2V0LAorCQkJCQkgICAgICAgc2l6ZSwgZGlyZWN0aW9uKTsKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlpZiAob3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKQorCQlvcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoaHdkZXYsIGRtYV9oYW5kbGUsCisJCQkJCQkgIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCWlmIChvcHMtPnN5bmNfc2dfZm9yX2NwdSkKKwkJb3BzLT5zeW5jX3NnX2Zvcl9jcHUoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcmVjdGlvbik7CisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlpZiAob3BzLT5zeW5jX3NnX2Zvcl9kZXZpY2UpCisJCW9wcy0+c3luY19zZ19mb3JfZGV2aWNlKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOworCisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCXJldHVybiBvcHMtPm1hcF9zaW5nbGUoZGV2LCBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQsCisJCQkgICAgICAgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJZG1hX3VubWFwX3NpbmdsZShkZXYsIGFkZHIsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKK3sKKwkvKiBubyBlYXN5IHdheSB0byBnZXQgY2FjaGUgc2l6ZSBvbiBhbGwgeDg2LCBzbyByZXR1cm4gdGhlCisJICogbWF4aW11bSBwb3NzaWJsZSwgdG8gYmUgc2FmZSAqLworCXJldHVybiBib290X2NwdV9kYXRhLng4Nl9jbGZsdXNoX3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkbWFfYWxsb2NfY29oZXJlbnRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgICAgZ2ZwX3QgZ2ZwKQoreworCXVuc2lnbmVkIGxvbmcgZG1hX21hc2sgPSAwOworCisJZG1hX21hc2sgPSBkZXYtPmNvaGVyZW50X2RtYV9tYXNrOworCWlmICghZG1hX21hc2spCisJCWRtYV9tYXNrID0gKGdmcCAmIEdGUF9ETUEpID8gRE1BXzI0QklUX01BU0sgOiBETUFfMzJCSVRfTUFTSzsKKworCXJldHVybiBkbWFfbWFzazsKK30KKworc3RhdGljIGlubGluZSBnZnBfdCBkbWFfYWxsb2NfY29oZXJlbnRfZ2ZwX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwl1bnNpZ25lZCBsb25nIGRtYV9tYXNrID0gZG1hX2FsbG9jX2NvaGVyZW50X21hc2soZGV2LCBnZnApOworCisJaWYgKGRtYV9tYXNrIDw9IERNQV8zMkJJVF9NQVNLICYmICEoZ2ZwICYgR0ZQX0RNQSkpCisJCWdmcCB8PSBHRlBfRE1BMzI7CisjZW5kaWYKKyAgICAgICByZXR1cm4gZ2ZwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCisJCWdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXZvaWQgKm1lbW9yeTsKKworCWdmcCAmPSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9ETUEzMik7CisKKwlpZiAoZG1hX2FsbG9jX2Zyb21fY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCAmbWVtb3J5KSkKKwkJcmV0dXJuIG1lbW9yeTsKKworCWlmICghZGV2KSB7CisJCWRldiA9ICZ4ODZfZG1hX2ZhbGxiYWNrX2RldjsKKwkJZ2ZwIHw9IEdGUF9ETUE7CisJfQorCisJaWYgKCFpc19kZXZpY2VfZG1hX2NhcGFibGUoZGV2KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIW9wcy0+YWxsb2NfY29oZXJlbnQpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIG9wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLAorCQkJCSAgIGRtYV9hbGxvY19jb2hlcmVudF9nZnBfZmxhZ3MoZGV2LCBnZnApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBidXMpCit7CisJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKworCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsgICAgICAgLyogZm9yIHBvcnRhYmlsaXR5ICovCisKKwlpZiAoZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIGdldF9vcmRlcihzaXplKSwgdmFkZHIpKQorCQlyZXR1cm47CisKKwlpZiAob3BzLT5mcmVlX2NvaGVyZW50KQorCQlvcHMtPmZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgYnVzKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTA5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2RtYS5oOiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuCisgKiBXcml0dGVuIGJ5IEhlbm51cyBCZXJnbWFuLCAxOTkyLgorICogSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuCisgKiBhbmQgSm9obiBCb3lkLCBOb3YuIDE5OTIuCisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9ETUFfSAorI2RlZmluZSBfQVNNX1g4Nl9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JLyogQW5kIHNwaW5sb2NrcyAqLworI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2lmZGVmIEhBVkVfUkVBTExZX1NMT1dfRE1BX0NPTlRST0xMRVIKKyNkZWZpbmUgZG1hX291dGIJb3V0Yl9wCisjZWxzZQorI2RlZmluZSBkbWFfb3V0YglvdXRiCisjZW5kaWYKKworI2RlZmluZSBkbWFfaW5iCQlpbmIKKworLyoKKyAqIE5PVEVTIGFib3V0IERNQSB0cmFuc2ZlcnM6CisgKgorICogIGNvbnRyb2xsZXIgMTogY2hhbm5lbHMgMC0zLCBieXRlIG9wZXJhdGlvbnMsIHBvcnRzIDAwLTFGCisgKiAgY29udHJvbGxlciAyOiBjaGFubmVscyA0LTcsIHdvcmQgb3BlcmF0aW9ucywgcG9ydHMgQzAtREYKKyAqCisgKiAgLSBBTEwgcmVnaXN0ZXJzIGFyZSA4IGJpdHMgb25seSwgcmVnYXJkbGVzcyBvZiB0cmFuc2ZlciBzaXplCisgKiAgLSBjaGFubmVsIDQgaXMgbm90IHVzZWQgLSBjYXNjYWRlcyAxIGludG8gMi4KKyAqICAtIGNoYW5uZWxzIDAtMyBhcmUgYnl0ZSAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCBieXRlcworICogIC0gY2hhbm5lbHMgNS03IGFyZSB3b3JkIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIHdvcmRzCisgKiAgLSB0cmFuc2ZlcnMgbXVzdCBub3QgY3Jvc3MgcGh5c2ljYWwgNjRLICgwLTMpIG9yIDEyOEsgKDUtNykgYm91bmRhcmllcworICogIC0gdHJhbnNmZXIgY291bnQgbG9hZGVkIHRvIHJlZ2lzdGVycyBpcyAxIGxlc3MgdGhhbiBhY3R1YWwgY291bnQKKyAqICAtIGNvbnRyb2xsZXIgMiBvZmZzZXRzIGFyZSBhbGwgZXZlbiAoMnggb2Zmc2V0cyBmb3IgY29udHJvbGxlciAxKQorICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDUtNyBkb24ndCB1c2UgZGF0YSBiaXQgMCwgcmVwcmVzZW50IDEyOEsgcGFnZXMKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciAwLTMgdXNlIGJpdCAwLCByZXByZXNlbnQgNjRLIHBhZ2VzCisgKgorICogRE1BIHRyYW5zZmVycyBhcmUgbGltaXRlZCB0byB0aGUgbG93ZXIgMTZNQiBvZiBfcGh5c2ljYWxfIG1lbW9yeS4KKyAqIE5vdGUgdGhhdCBhZGRyZXNzZXMgbG9hZGVkIGludG8gcmVnaXN0ZXJzIG11c3QgYmUgX3BoeXNpY2FsXyBhZGRyZXNzZXMsCisgKiBub3QgbG9naWNhbCBhZGRyZXNzZXMgKHdoaWNoIG1heSBkaWZmZXIgaWYgcGFnaW5nIGlzIGFjdGl2ZSkuCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgMC0zOgorICoKKyAqICAgQTIzIC4uLiBBMTYgQTE1IC4uLiBBOCAgQTcgLi4uIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgIFA3ICAuLi4gIFAwICBBNyAuLi4gQTAgIEE3IC4uLiBBMAorICogfCAgICBQYWdlICAgIHwgQWRkciBNU0IgfCBBZGRyIExTQiB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgNS03OgorICoKKyAqICAgQTIzIC4uLiBBMTcgQTE2IEExNSAuLi4gQTkgQTggQTcgLi4uIEExIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXCAgXAorICogICAgfCAgLi4uICB8ICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICAobm90IHVzZWQpCisgKiAgICB8ICAuLi4gIHwgICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcCisgKiAgIFA3ICAuLi4gIFAxICgwKSBBNyBBNiAgLi4uIEEwIEE3IEE2IC4uLiBBMAorICogfCAgICAgIFBhZ2UgICAgICB8ICBBZGRyIE1TQiAgIHwgIEFkZHIgTFNCICB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogQWdhaW4sIGNoYW5uZWxzIDUtNyB0cmFuc2ZlciBfcGh5c2ljYWxfIHdvcmRzICgxNiBiaXRzKSwgc28gYWRkcmVzc2VzCisgKiBhbmQgY291bnRzIF9tdXN0XyBiZSB3b3JkLWFsaWduZWQgKHRoZSBsb3dlc3QgYWRkcmVzcyBiaXQgaXMgX2lnbm9yZWRfIGF0CisgKiB0aGUgaGFyZHdhcmUgbGV2ZWwsIHNvIG9kZC1ieXRlIHRyYW5zZmVycyBhcmVuJ3QgcG9zc2libGUpLgorICoKKyAqIFRyYW5zZmVyIGNvdW50IChfbm90ICMgYnl0ZXNfKSBpcyBsaW1pdGVkIHRvIDY0SywgcmVwcmVzZW50ZWQgYXMgYWN0dWFsCisgKiBjb3VudCAtIDEgOiA2NEsgPT4gMHhGRkZGLCAxID0+IDB4MDAwMC4gIFRodXMsIGNvdW50IGlzIGFsd2F5cyAxIG9yIG1vcmUsCisgKiBhbmQgdXAgdG8gMTI4SyBieXRlcyBtYXkgYmUgdHJhbnNmZXJyZWQgb24gY2hhbm5lbHMgNS03IGluIG9uZSBvcGVyYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisKKy8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIERNQSB0cmFuc2ZlciB0byBvbiB0aGlzIHBsYXRmb3JtICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMCkKKworI2Vsc2UKKworLyogMTZNQiBJU0EgRE1BIHpvbmUgKi8KKyNkZWZpbmUgTUFYX0RNQV9QRk4gICAoKDE2ICogMTAyNCAqIDEwMjQpID4+IFBBR0VfU0hJRlQpCisKKy8qIDRHQiBicm9rZW4gUENJL0FHUCBoYXJkd2FyZSBidXMgbWFzdGVyIHpvbmUgKi8KKyNkZWZpbmUgTUFYX0RNQTMyX1BGTiAoKDRVTCAqIDEwMjQgKiAxMDI0ICogMTAyNCkgPj4gUEFHRV9TSElGVCkKKworLyogQ29tcGF0IGRlZmluZSBmb3Igb2xkIGRtYSB6b25lICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAoKHVuc2lnbmVkIGxvbmcpX192YShNQVhfRE1BX1BGTiA8PCBQQUdFX1NISUZUKSkKKworI2VuZGlmCisKKy8qIDgyMzcgRE1BIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIElPX0RNQTFfQkFTRQkweDAwCS8qIDggYml0IHNsYXZlIERNQSwgY2hhbm5lbHMgMC4uMyAqLworI2RlZmluZSBJT19ETUEyX0JBU0UJMHhDMAkvKiAxNiBiaXQgbWFzdGVyIERNQSwgY2ggNCg9c2xhdmUgaW5wdXQpLi43ICovCisKKy8qIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUExX0NNRF9SRUcJCTB4MDgJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9TVEFUX1JFRwkJMHgwOAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVRX1JFRwkJMHgwOSAgICAvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX01BU0tfUkVHCQkweDBBCS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTFfTU9ERV9SRUcJCTB4MEIJLyogbW9kZSByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9DTEVBUl9GRl9SRUcJMHgwQwkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KKyNkZWZpbmUgRE1BMV9URU1QX1JFRwkJMHgwRCAgICAvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVTRVRfUkVHCQkweDBECS8qIE1hc3RlciBDbGVhciAodykgKi8KKyNkZWZpbmUgRE1BMV9DTFJfTUFTS19SRUcgICAgICAgMHgwRSAgICAvKiBDbGVhciBNYXNrICovCisjZGVmaW5lIERNQTFfTUFTS19BTExfUkVHICAgICAgIDB4MEYgICAgLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCisKKyNkZWZpbmUgRE1BMl9DTURfUkVHCQkweEQwCS8qIGNvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfU1RBVF9SRUcJCTB4RDAJLyogc3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFUV9SRUcJCTB4RDIgICAgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9NQVNLX1JFRwkJMHhENAkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUEyX01PREVfUkVHCQkweEQ2CS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xFQVJfRkZfUkVHCTB4RDgJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTJfVEVNUF9SRUcJCTB4REEgICAgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFU0VUX1JFRwkJMHhEQQkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHICAgICAgIDB4REMgICAgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRyAgICAgICAweERFICAgIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQV9BRERSXzAJCTB4MDAgICAgLyogRE1BIGFkZHJlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9BRERSXzEJCTB4MDIKKyNkZWZpbmUgRE1BX0FERFJfMgkJMHgwNAorI2RlZmluZSBETUFfQUREUl8zCQkweDA2CisjZGVmaW5lIERNQV9BRERSXzQJCTB4QzAKKyNkZWZpbmUgRE1BX0FERFJfNQkJMHhDNAorI2RlZmluZSBETUFfQUREUl82CQkweEM4CisjZGVmaW5lIERNQV9BRERSXzcJCTB4Q0MKKworI2RlZmluZSBETUFfQ05UXzAJCTB4MDEgICAgLyogRE1BIGNvdW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UXzEJCTB4MDMKKyNkZWZpbmUgRE1BX0NOVF8yCQkweDA1CisjZGVmaW5lIERNQV9DTlRfMwkJMHgwNworI2RlZmluZSBETUFfQ05UXzQJCTB4QzIKKyNkZWZpbmUgRE1BX0NOVF81CQkweEM2CisjZGVmaW5lIERNQV9DTlRfNgkJMHhDQQorI2RlZmluZSBETUFfQ05UXzcJCTB4Q0UKKworI2RlZmluZSBETUFfUEFHRV8wCQkweDg3ICAgIC8qIERNQSBwYWdlIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfUEFHRV8xCQkweDgzCisjZGVmaW5lIERNQV9QQUdFXzIJCTB4ODEKKyNkZWZpbmUgRE1BX1BBR0VfMwkJMHg4MgorI2RlZmluZSBETUFfUEFHRV81CQkweDhCCisjZGVmaW5lIERNQV9QQUdFXzYJCTB4ODkKKyNkZWZpbmUgRE1BX1BBR0VfNwkJMHg4QQorCisvKiBJL08gdG8gbWVtb3J5LCBubyBhdXRvaW5pdCwgaW5jcmVtZW50LCBzaW5nbGUgbW9kZSAqLworI2RlZmluZSBETUFfTU9ERV9SRUFECQkweDQ0CisvKiBtZW1vcnkgdG8gSS9PLCBubyBhdXRvaW5pdCwgaW5jcmVtZW50LCBzaW5nbGUgbW9kZSAqLworI2RlZmluZSBETUFfTU9ERV9XUklURQkJMHg0OAorLyogcGFzcyB0aHJ1IERSRVEtPkhSUSwgREFDSzwtSExEQSBvbmx5ICovCisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUJMHhDMAorCisjZGVmaW5lIERNQV9BVVRPSU5JVAkJMHgxMAorCisKK2V4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9kbWFfbG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKK30KKworLyogZW5hYmxlL2Rpc2FibGUgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFuciA8PSAzKQorCQlkbWFfb3V0YihkbWFuciwgRE1BMV9NQVNLX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YihkbWFuciAmIDMsIERNQTJfTUFTS19SRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFuciA8PSAzKQorCQlkbWFfb3V0YihkbWFuciB8IDQsIERNQTFfTUFTS19SRUcpOworCWVsc2UKKwkJZG1hX291dGIoKGRtYW5yICYgMykgfCA0LCBETUEyX01BU0tfUkVHKTsKK30KKworLyogQ2xlYXIgdGhlICdETUEgUG9pbnRlciBGbGlwIEZsb3AnLgorICogV3JpdGUgMCBmb3IgTFNCL01TQiwgMSBmb3IgTVNCL0xTQiBhY2Nlc3MuCisgKiBVc2UgdGhpcyBvbmNlIHRvIGluaXRpYWxpemUgdGhlIEZGIHRvIGEga25vd24gc3RhdGUuCisgKiBBZnRlciB0aGF0LCBrZWVwIHRyYWNrIG9mIGl0LiA6LSkKKyAqIC0tLSBJbiBvcmRlciB0byBkbyB0aGF0LCB0aGUgRE1BIHJvdXRpbmVzIGJlbG93IHNob3VsZCAtLS0KKyAqIC0tLSBvbmx5IGJlIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUgRE1BIGxvY2sgISAtLS0KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2RtYV9mZih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yIDw9IDMpCisJCWRtYV9vdXRiKDAsIERNQTFfQ0xFQVJfRkZfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKDAsIERNQTJfQ0xFQVJfRkZfUkVHKTsKK30KKworLyogc2V0IG1vZGUgKGFib3ZlKSBmb3IgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKwlpZiAoZG1hbnIgPD0gMykKKwkJZG1hX291dGIobW9kZSB8IGRtYW5yLCBETUExX01PREVfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKG1vZGUgfCAoZG1hbnIgJiAzKSwgRE1BMl9NT0RFX1JFRyk7Cit9CisKKy8qIFNldCBvbmx5IHRoZSBwYWdlIHJlZ2lzdGVyIGJpdHMgb2YgdGhlIHRyYW5zZmVyIGFkZHJlc3MuCisgKiBUaGlzIGlzIHVzZWQgZm9yIHN1Y2Nlc3NpdmUgdHJhbnNmZXJzIHdoZW4gd2Uga25vdyB0aGUgY29udGVudHMgb2YKKyAqIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSBETUEgY3VycmVudCBhZGRyZXNzIHJlZ2lzdGVyLCBidXQgYSA2NGsgYm91bmRhcnkKKyAqIG1heSBoYXZlIGJlZW4gY3Jvc3NlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfcGFnZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgcGFnZW5yKQoreworCXN3aXRjaCAoZG1hbnIpIHsKKwljYXNlIDA6CisJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX1BBR0VfMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZG1hX291dGIocGFnZW5yLCBETUFfUEFHRV8xKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzIpOworCQlicmVhazsKKwljYXNlIDM6CisJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX1BBR0VfMyk7CisJCWJyZWFrOworCWNhc2UgNToKKwkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX1BBR0VfNSk7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX1BBR0VfNik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX1BBR0VfNyk7CisJCWJyZWFrOworCX0KK30KKworCisvKiBTZXQgdHJhbnNmZXIgYWRkcmVzcyAmIHBhZ2UgYml0cyBmb3Igc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBBc3N1bWVzIGRtYSBmbGlwZmxvcCBpcyBjbGVhci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhKQoreworCXNldF9kbWFfcGFnZShkbWFuciwgYT4+MTYpOworCWlmIChkbWFuciA8PSAzKSAgeworCQlkbWFfb3V0YihhICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDEpICsgSU9fRE1BMV9CQVNFKTsKKwkJZG1hX291dGIoKGEgPj4gOCkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMSkgKyBJT19ETUExX0JBU0UpOworCX0gIGVsc2UgIHsKKwkJZG1hX291dGIoKGEgPj4gMSkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMikgKyBJT19ETUEyX0JBU0UpOworCQlkbWFfb3V0YigoYSA+PiA5KSAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAyKSArIElPX0RNQTJfQkFTRSk7CisJfQorfQorCisKKy8qIFNldCB0cmFuc2ZlciBzaXplIChtYXggNjRrIGZvciBETUEwLi4zLCAxMjhrIGZvciBETUE1Li43KSBmb3IKKyAqIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBZb3UgbXVzdCBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkLgorICogTk9URTogZnJvbSBhIG1hbnVhbDogInRoZSBudW1iZXIgb2YgdHJhbnNmZXJzIGlzIG9uZSBtb3JlCisgKiB0aGFuIHRoZSBpbml0aWFsIHdvcmQgY291bnQiISBUaGlzIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqIEFzc3VtZXMgZG1hIGZsaXAtZmxvcCBpcyBjbGVhci4KKyAqIE5PVEUgMjogImNvdW50IiByZXByZXNlbnRzIF9ieXRlc18gYW5kIG11c3QgYmUgZXZlbiBmb3IgY2hhbm5lbHMgNS03LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwljb3VudC0tOworCWlmIChkbWFuciA8PSAzKSAgeworCQlkbWFfb3V0Yihjb3VudCAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAxKSArIDEgKyBJT19ETUExX0JBU0UpOworCQlkbWFfb3V0YigoY291bnQgPj4gOCkgJiAweGZmLAorCQkJICgoZG1hbnIgJiAzKSA8PCAxKSArIDEgKyBJT19ETUExX0JBU0UpOworCX0gZWxzZSB7CisJCWRtYV9vdXRiKChjb3VudCA+PiAxKSAmIDB4ZmYsCisJCQkgKChkbWFuciAmIDMpIDw8IDIpICsgMiArIElPX0RNQTJfQkFTRSk7CisJCWRtYV9vdXRiKChjb3VudCA+PiA5KSAmIDB4ZmYsCisJCQkgKChkbWFuciAmIDMpIDw8IDIpICsgMiArIElPX0RNQTJfQkFTRSk7CisJfQorfQorCisKKy8qIEdldCBETUEgcmVzaWR1ZSBjb3VudC4gQWZ0ZXIgYSBETUEgdHJhbnNmZXIsIHRoaXMKKyAqIHNob3VsZCByZXR1cm4gemVyby4gUmVhZGluZyB0aGlzIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzcyB3aWxsIHJldHVybiB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgKiBJZiBjYWxsZWQgYmVmb3JlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQsIGl0IG1heSByZXR1cm4gMS4KKyAqIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KKyAqCisgKiBBc3N1bWVzIERNQSBmbGlwLWZsb3AgaXMgY2xlYXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJdW5zaWduZWQgaW50IGlvX3BvcnQ7CisJLyogdXNpbmcgc2hvcnQgdG8gZ2V0IDE2LWJpdCB3cmFwIGFyb3VuZCAqLworCXVuc2lnbmVkIHNob3J0IGNvdW50OworCisJaW9fcG9ydCA9IChkbWFuciA8PSAzKSA/ICgoZG1hbnIgJiAzKSA8PCAxKSArIDEgKyBJT19ETUExX0JBU0UKKwkJOiAoKGRtYW5yICYgMykgPDwgMikgKyAyICsgSU9fRE1BMl9CQVNFOworCisJY291bnQgPSAxICsgZG1hX2luYihpb19wb3J0KTsKKwljb3VudCArPSBkbWFfaW5iKGlvX3BvcnQpIDw8IDg7CisKKwlyZXR1cm4gKGRtYW5yIDw9IDMpID8gY291bnQgOiAoY291bnQgPDwgMSk7Cit9CisKKworLyogVGhlc2UgYXJlIGluIGtlcm5lbC9kbWEuYzogKi8KK2V4dGVybiBpbnQgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsKKworLyogRnJvbSBQQ0kgKi8KKworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CisjZWxzZQorI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneQkoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2ODIxMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX0FTTV9YODZfRE1JX0gKKyNkZWZpbmUgX0FTTV9YODZfRE1JX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIERNSV9NQVhfREFUQSAyMDQ4CisKK2V4dGVybiBpbnQgZG1pX2FsbG9jX2luZGV4OworZXh0ZXJuIGNoYXIgZG1pX2FsbG9jX2RhdGFbRE1JX01BWF9EQVRBXTsKKworLyogVGhpcyBpcyBzbyBlYXJseSB0aGF0IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGFsbG9jYXRlIGR5bmFtaWMgbWVtb3J5LgorICAgQWxsb2NhdGUgZGF0YSBpbiBhbiBCU1MgYXJyYXkuICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmRtaV9hbGxvYyh1bnNpZ25lZCBsZW4pCit7CisJaW50IGlkeCA9IGRtaV9hbGxvY19pbmRleDsKKwlpZiAoKGRtaV9hbGxvY19pbmRleCArIGxlbikgPiBETUlfTUFYX0RBVEEpCisJCXJldHVybiBOVUxMOworCWRtaV9hbGxvY19pbmRleCArPSBsZW47CisJcmV0dXJuIGRtaV9hbGxvY19kYXRhICsgaWR4OworfQorCisvKiBVc2UgZWFybHkgSU8gbWFwcGluZ3MgZm9yIERNSSBiZWNhdXNlIGl0J3MgaW5pdGlhbGl6ZWQgZWFybHkgKi8KKyNkZWZpbmUgZG1pX2lvcmVtYXAgZWFybHlfaW9yZW1hcAorI2RlZmluZSBkbWlfaW91bm1hcCBlYXJseV9pb3VubWFwCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9ETUlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjNWExOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RzLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBEZWJ1ZyBTdG9yZSAoRFMpIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb3ZpZGVzIGEgbG93LWxldmVsIGludGVyZmFjZSB0byB0aGUgaGFyZHdhcmUncyBEZWJ1ZyBTdG9yZQorICogZmVhdHVyZSB0aGF0IGlzIHVzZWQgZm9yIGJyYW5jaCB0cmFjZSBzdG9yZSAoQlRTKSBhbmQKKyAqIHByZWNpc2UtZXZlbnQgYmFzZWQgc2FtcGxpbmcgKFBFQlMpLgorICoKKyAqIEl0IG1hbmFnZXM6CisgKiAtIHBlci10aHJlYWQgYW5kIHBlci1jcHUgYWxsb2NhdGlvbiBvZiBCVFMgYW5kIFBFQlMKKyAqIC0gYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uIChvcHRpb25hbCkKKyAqIC0gYnVmZmVyIG92ZXJmbG93IGhhbmRsaW5nCisgKiAtIGJ1ZmZlciBhY2Nlc3MKKyAqCisgKiBJdCBhc3N1bWVzOgorICogLSBnZXRfdGFza19zdHJ1Y3Qgb24gYWxsIHBhcmFtZXRlciB0YXNrcworICogLSBjdXJyZW50IGlzIGFsbG93ZWQgdG8gdHJhY2UgcGFyYW1ldGVyIHRhc2tzCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uLgorICogTWFya3VzIE1ldHpnZXIgPG1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPiwgMjAwNy0yMDA4CisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9EU19ICisjZGVmaW5lIF9BU01fWDg2X0RTX0gKKworI2lmZGVmIENPTkZJR19YODZfRFMKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworLyoKKyAqIFJlcXVlc3QgQlRTIG9yIFBFQlMKKyAqCisgKiBEdWUgdG8gYWxpZ25lbWVudCBjb25zdHJhaW50cywgdGhlIGFjdHVhbCBidWZmZXIgbWF5IGJlIHNsaWdodGx5CisgKiBzbWFsbGVyIHRoYW4gdGhlIHJlcXVlc3RlZCBvciBwcm92aWRlZCBidWZmZXIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC1FZXJybm8gb3RoZXJ3aXNlCisgKgorICogdGFzazogdGhlIHRhc2sgdG8gcmVxdWVzdCByZWNvcmRpbmcgZm9yOworICogICAgICAgTlVMTCBmb3IgcGVyLWNwdSByZWNvcmRpbmcgb24gdGhlIGN1cnJlbnQgY3B1CisgKiBiYXNlOiB0aGUgYmFzZSBwb2ludGVyIGZvciB0aGUgKG5vbi1wYWdlYWJsZSkgYnVmZmVyOworICogICAgICAgTlVMTCBpZiBidWZmZXIgYWxsb2NhdGlvbiByZXF1ZXN0ZWQKKyAqIHNpemU6IHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0ZWQgb3IgcHJvdmlkZWQgYnVmZmVyCisgKiBvdmZsOiBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGJ1ZmZlciBvdmVyZmxvdzsKKyAqICAgICAgIE5VTEwgaWYgY3ljbGljIGJ1ZmZlciByZXF1ZXN0ZWQKKyAqLwordHlwZWRlZiB2b2lkICgqZHNfb3ZmbF9jYWxsYmFja190KShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gaW50IGRzX3JlcXVlc3RfYnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYmFzZSwgc2l6ZV90IHNpemUsCisJCQkgIGRzX292ZmxfY2FsbGJhY2tfdCBvdmZsKTsKK2V4dGVybiBpbnQgZHNfcmVxdWVzdF9wZWJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYmFzZSwgc2l6ZV90IHNpemUsCisJCQkgICBkc19vdmZsX2NhbGxiYWNrX3Qgb3ZmbCk7CisKKy8qCisgKiBSZWxlYXNlIEJUUyBvciBQRUJTIHJlc291cmNlcworICoKKyAqIEZyZWVzIGJ1ZmZlcnMgYWxsb2NhdGVkIG9uIGRzX3JlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC1FZXJybm8gb3RoZXJ3aXNlCisgKgorICogdGFzazogdGhlIHRhc2sgdG8gcmVsZWFzZSByZXNvdXJjZXMgZm9yOworICogICAgICAgTlVMTCB0byByZWxlYXNlIHJlc291cmNlcyBmb3IgdGhlIGN1cnJlbnQgY3B1CisgKi8KK2V4dGVybiBpbnQgZHNfcmVsZWFzZV9idHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiBpbnQgZHNfcmVsZWFzZV9wZWJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisKKy8qCisgKiBSZXR1cm4gdGhlIChhcnJheSkgaW5kZXggb2YgdGhlIHdyaXRlIHBvaW50ZXIuCisgKiAoYXNzdW1pbmcgYW4gYXJyYXkgb2YgQlRTL1BFQlMgcmVjb3JkcykKKyAqCisgKiBSZXR1cm5zIC1FZXJybm8gb24gZXJyb3IKKyAqCisgKiB0YXNrOiB0aGUgdGFzayB0byBhY2Nlc3M7CisgKiAgICAgICBOVUxMIHRvIGFjY2VzcyB0aGUgY3VycmVudCBjcHUKKyAqIHBvcyAob3V0KTogaWYgbm90IE5VTEwsIHdpbGwgaG9sZCB0aGUgcmVzdWx0CisgKi8KK2V4dGVybiBpbnQgZHNfZ2V0X2J0c19pbmRleChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHNpemVfdCAqcG9zKTsKK2V4dGVybiBpbnQgZHNfZ2V0X3BlYnNfaW5kZXgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzaXplX3QgKnBvcyk7CisKKy8qCisgKiBSZXR1cm4gdGhlIChhcnJheSkgaW5kZXggb25lIHJlY29yZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCisgKiAoYXNzdW1pbmcgYW4gYXJyYXkgb2YgQlRTL1BFQlMgcmVjb3JkcykKKyAqCisgKiBSZXR1cm5zIC1FZXJybm8gb24gZXJyb3IKKyAqCisgKiB0YXNrOiB0aGUgdGFzayB0byBhY2Nlc3M7CisgKiAgICAgICBOVUxMIHRvIGFjY2VzcyB0aGUgY3VycmVudCBjcHUKKyAqIHBvcyAob3V0KTogaWYgbm90IE5VTEwsIHdpbGwgaG9sZCB0aGUgcmVzdWx0CisgKi8KK2V4dGVybiBpbnQgZHNfZ2V0X2J0c19lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzaXplX3QgKnBvcyk7CitleHRlcm4gaW50IGRzX2dldF9wZWJzX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHNpemVfdCAqcG9zKTsKKworLyoKKyAqIFByb3ZpZGUgYSBwb2ludGVyIHRvIHRoZSBCVFMvUEVCUyByZWNvcmQgYXQgcGFyYW1ldGVyIGluZGV4LgorICogKGFzc3VtaW5nIGFuIGFycmF5IG9mIEJUUy9QRUJTIHJlY29yZHMpCisgKgorICogVGhlIHBvaW50ZXIgcG9pbnRzIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlci4gVGhlIHVzZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBjb3B5aW5nIHRoZSByZWNvcmQuCisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiBhIHNpbmdsZSByZWNvcmQgb24gc3VjY2VzczsgLUVlcnJubyBvbiBlcnJvcgorICoKKyAqIHRhc2s6IHRoZSB0YXNrIHRvIGFjY2VzczsKKyAqICAgICAgIE5VTEwgdG8gYWNjZXNzIHRoZSBjdXJyZW50IGNwdQorICogaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgcmVxdWVzdGVkIHJlY29yZAorICogcmVjb3JkIChvdXQpOiBwb2ludGVyIHRvIHRoZSByZXF1ZXN0ZWQgcmVjb3JkCisgKi8KK2V4dGVybiBpbnQgZHNfYWNjZXNzX2J0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkgc2l6ZV90IGluZGV4LCBjb25zdCB2b2lkICoqcmVjb3JkKTsKK2V4dGVybiBpbnQgZHNfYWNjZXNzX3BlYnMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJICBzaXplX3QgaW5kZXgsIGNvbnN0IHZvaWQgKipyZWNvcmQpOworCisvKgorICogV3JpdGUgb25lIG9yIG1vcmUgQlRTL1BFQlMgcmVjb3JkcyBhdCB0aGUgd3JpdGUgcG9pbnRlciBpbmRleCBhbmQKKyAqIGFkdmFuY2UgdGhlIHdyaXRlIHBvaW50ZXIuCisgKgorICogSWYgc2l6ZSBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgcmVjb3JkIHNpemUsIHRyYWlsaW5nIGJ5dGVzIGFyZQorICogemVyb2VkIG91dC4KKyAqCisgKiBNYXkgcmVzdWx0IGluIG9uZSBvciBtb3JlIG92ZXJmbG93IG5vdGlmaWNhdGlvbnMuCisgKgorICogSWYgY2FsbGVkIGR1cmluZyBvdmVyZmxvdyBoYW5kbGluZywgdGhhdCBpcywgd2l0aCBpbmRleCA+PQorICogaW50ZXJydXB0IHRocmVzaG9sZCwgdGhlIHdyaXRlIHdpbGwgd3JhcCBhcm91bmQuCisgKgorICogQW4gb3ZlcmZsb3cgbm90aWZpY2F0aW9uIGlzIGdpdmVuIGlmIGFuZCB3aGVuIHRoZSBpbnRlcnJ1cHQKKyAqIHRocmVzaG9sZCBpcyByZWFjaGVkIGR1cmluZyBvciBhZnRlciB0aGUgd3JpdGUuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgLUVlcnJuby4KKyAqCisgKiB0YXNrOiB0aGUgdGFzayB0byBhY2Nlc3M7CisgKiAgICAgICBOVUxMIHRvIGFjY2VzcyB0aGUgY3VycmVudCBjcHUKKyAqIGJ1ZmZlcjogdGhlIGJ1ZmZlciB0byB3cml0ZQorICogc2l6ZTogdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgorICovCitleHRlcm4gaW50IGRzX3dyaXRlX2J0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQljb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgZHNfd3JpdGVfcGVicyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKKy8qCisgKiBTYW1lIGFzIGRzX3dyaXRlX2J0cy9wZWJzLCBidXQgb21pdCBvd25lcnNoaXAgY2hlY2tzLgorICoKKyAqIFRoaXMgaXMgbmVlZGVkIHRvIGhhdmUgc29tZSBvdGhlciB0YXNrIHRoYW4gdGhlIG93bmVyIG9mIHRoZQorICogQlRTL1BFQlMgYnVmZmVyIG9yIHRoZSBwYXJhbWV0ZXIgdGFzayBpdHNlbGYgd3JpdGUgaW50byB0aGUKKyAqIHJlc3BlY3RpdmUgYnVmZmVyLgorICovCitleHRlcm4gaW50IGRzX3VuY2hlY2tlZF93cml0ZV9idHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IGRzX3VuY2hlY2tlZF93cml0ZV9wZWJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworLyoKKyAqIFJlc2V0IHRoZSB3cml0ZSBwb2ludGVyIG9mIHRoZSBCVFMvUEVCUyBidWZmZXIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC1FZXJybm8gb24gZXJyb3IKKyAqCisgKiB0YXNrOiB0aGUgdGFzayB0byBhY2Nlc3M7CisgKiAgICAgICBOVUxMIHRvIGFjY2VzcyB0aGUgY3VycmVudCBjcHUKKyAqLworZXh0ZXJuIGludCBkc19yZXNldF9idHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiBpbnQgZHNfcmVzZXRfcGVicyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCisvKgorICogQ2xlYXIgdGhlIEJUUy9QRUJTIGJ1ZmZlciBhbmQgcmVzZXQgdGhlIHdyaXRlIHBvaW50ZXIuCisgKiBUaGUgZW50aXJlIGJ1ZmZlciB3aWxsIGJlIHplcm9lZCBvdXQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC1FZXJybm8gb24gZXJyb3IKKyAqCisgKiB0YXNrOiB0aGUgdGFzayB0byBhY2Nlc3M7CisgKiAgICAgICBOVUxMIHRvIGFjY2VzcyB0aGUgY3VycmVudCBjcHUKKyAqLworZXh0ZXJuIGludCBkc19jbGVhcl9idHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiBpbnQgZHNfY2xlYXJfcGVicyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCisvKgorICogUHJvdmlkZSB0aGUgUEVCUyBjb3VudGVyIHJlc2V0IHZhbHVlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtRWVycm5vIG9uIGVycm9yCisgKgorICogdGFzazogdGhlIHRhc2sgdG8gYWNjZXNzOworICogICAgICAgTlVMTCB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgY3B1CisgKiB2YWx1ZSAob3V0KTogdGhlIGNvdW50ZXIgcmVzZXQgdmFsdWUKKyAqLworZXh0ZXJuIGludCBkc19nZXRfcGVic19yZXNldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCAqdmFsdWUpOworCisvKgorICogU2V0IHRoZSBQRUJTIGNvdW50ZXIgcmVzZXQgdmFsdWUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC1FZXJybm8gb24gZXJyb3IKKyAqCisgKiB0YXNrOiB0aGUgdGFzayB0byBhY2Nlc3M7CisgKiAgICAgICBOVUxMIHRvIGFjY2VzcyB0aGUgY3VycmVudCBjcHUKKyAqIHZhbHVlOiB0aGUgbmV3IGNvdW50ZXIgcmVzZXQgdmFsdWUKKyAqLworZXh0ZXJuIGludCBkc19zZXRfcGVic19yZXNldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCB2YWx1ZSk7CisKKy8qCisgKiBJbml0aWFsaXphdGlvbgorICovCitzdHJ1Y3QgY3B1aW5mb194ODY7CitleHRlcm4gdm9pZCBfX2NwdWluaXQgZHNfaW5pdF9pbnRlbChzdHJ1Y3QgY3B1aW5mb194ODYgKik7CisKKworCisvKgorICogVGhlIERTIGNvbnRleHQgLSBwYXJ0IG9mIHN0cnVjdCB0aHJlYWRfc3RydWN0LgorICovCitzdHJ1Y3QgZHNfY29udGV4dCB7CisJLyogcG9pbnRlciB0byB0aGUgRFMgY29uZmlndXJhdGlvbjsgZ29lcyBpbnRvIE1TUl9JQTMyX0RTX0FSRUEgKi8KKwl1bnNpZ25lZCBjaGFyICpkczsKKwkvKiB0aGUgb3duZXIgb2YgdGhlIEJUUyBhbmQgUEVCUyBjb25maWd1cmF0aW9uLCByZXNwZWN0aXZlbHkgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyWzJdOworCS8qIGJ1ZmZlciBvdmVyZmxvdyBub3RpZmljYXRpb24gZnVuY3Rpb24gZm9yIEJUUyBhbmQgUEVCUyAqLworCWRzX292ZmxfY2FsbGJhY2tfdCBjYWxsYmFja1syXTsKKwkvKiB0aGUgb3JpZ2luYWwgYnVmZmVyIGFkZHJlc3MgKi8KKwl2b2lkICpidWZmZXJbMl07CisJLyogdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgcGFnZXMgZm9yIG9uLXJlcXVlc3QgYWxsb2NhdGVkIGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNbMl07CisJLyogdXNlIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwkvKiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRleHQgbG9jYXRpb24gaW5zaWRlIHRoZSB0aHJlYWRfc3RydWN0CisJICogb3IgdGhlIHBlcl9jcHUgY29udGV4dCBhcnJheSAqLworCXN0cnVjdCBkc19jb250ZXh0ICoqdGhpczsKKwkvKiBhIHBvaW50ZXIgdG8gdGhlIHRhc2sgb3duaW5nIHRoaXMgY29udGV4dCwgb3IgTlVMTCwgaWYgdGhlCisJICogY29udGV4dCBpcyBvd25lZCBieSBhIGNwdSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKK307CisKKy8qIGNhbGxlZCBieSBleGl0X3RocmVhZCgpIHRvIGZyZWUgbGVmdG92ZXIgY29udGV4dHMgKi8KK2V4dGVybiB2b2lkIGRzX2ZyZWUoc3RydWN0IGRzX2NvbnRleHQgKmNvbnRleHQpOworCisjZWxzZSAvKiBDT05GSUdfWDg2X0RTICovCisKKyNkZWZpbmUgZHNfaW5pdF9pbnRlbChjb25maWcpIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl9EUyAqLworI2VuZGlmIC8qIF9BU01fWDg2X0RTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2R3YXJmMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZHdhcmYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0YjZlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2R3YXJmMi5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX0FTTV9YODZfRFdBUkYyX0gKKyNkZWZpbmUgX0FTTV9YODZfRFdBUkYyX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyN3YXJuaW5nICJhc20vZHdhcmYyLmggc2hvdWxkIGJlIG9ubHkgaW5jbHVkZWQgaW4gcHVyZSBhc3NlbWJseSBmaWxlcyIKKyNlbmRpZgorCisvKgorICAgTWFjcm9zIGZvciBkd2FyZjIgQ0ZJIHVud2luZCB0YWJsZSBlbnRyaWVzLgorICAgU2VlICJhcy5pbmZvIiBmb3IgZGV0YWlscyBvbiB0aGVzZSBwc2V1ZG8gb3BzLiBVbmZvcnR1bmF0ZWx5CisgICB0aGV5IGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB2ZXJ5IG5ldyBiaW51dGlscywgc28gZGVmaW5lIHRoZW0KKyAgIGF3YXkgZm9yIG9sZGVyIHZlcnNpb24uCisgKi8KKworI2lmZGVmIENPTkZJR19BU19DRkkKKworI2RlZmluZSBDRklfU1RBUlRQUk9DIC5jZmlfc3RhcnRwcm9jCisjZGVmaW5lIENGSV9FTkRQUk9DIC5jZmlfZW5kcHJvYworI2RlZmluZSBDRklfREVGX0NGQSAuY2ZpX2RlZl9jZmEKKyNkZWZpbmUgQ0ZJX0RFRl9DRkFfUkVHSVNURVIgLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyCisjZGVmaW5lIENGSV9ERUZfQ0ZBX09GRlNFVCAuY2ZpX2RlZl9jZmFfb2Zmc2V0CisjZGVmaW5lIENGSV9BREpVU1RfQ0ZBX09GRlNFVCAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjZGVmaW5lIENGSV9PRkZTRVQgLmNmaV9vZmZzZXQKKyNkZWZpbmUgQ0ZJX1JFTF9PRkZTRVQgLmNmaV9yZWxfb2Zmc2V0CisjZGVmaW5lIENGSV9SRUdJU1RFUiAuY2ZpX3JlZ2lzdGVyCisjZGVmaW5lIENGSV9SRVNUT1JFIC5jZmlfcmVzdG9yZQorI2RlZmluZSBDRklfUkVNRU1CRVJfU1RBVEUgLmNmaV9yZW1lbWJlcl9zdGF0ZQorI2RlZmluZSBDRklfUkVTVE9SRV9TVEFURSAuY2ZpX3Jlc3RvcmVfc3RhdGUKKyNkZWZpbmUgQ0ZJX1VOREVGSU5FRCAuY2ZpX3VuZGVmaW5lZAorCisjaWZkZWYgQ09ORklHX0FTX0NGSV9TSUdOQUxfRlJBTUUKKyNkZWZpbmUgQ0ZJX1NJR05BTF9GUkFNRSAuY2ZpX3NpZ25hbF9mcmFtZQorI2Vsc2UKKyNkZWZpbmUgQ0ZJX1NJR05BTF9GUkFNRQorI2VuZGlmCisKKyNlbHNlCisKKy8qIER1ZSB0byB0aGUgc3RydWN0dXJlIG9mIHByZS1leGlzaXRpbmcgY29kZSwgZG9uJ3QgdXNlIGFzc2VtYmxlciBsaW5lCisgICBjb21tZW50IGNoYXJhY3RlciAjIHRvIGlnbm9yZSB0aGUgYXJndW1lbnRzLiBJbnN0ZWFkLCB1c2UgYSBkdW1teSBtYWNyby4gKi8KKy5tYWNybyBjZmlfaWdub3JlIGE9MCwgYj0wLCBjPTAsIGQ9MAorLmVuZG0KKworI2RlZmluZSBDRklfU1RBUlRQUk9DCWNmaV9pZ25vcmUKKyNkZWZpbmUgQ0ZJX0VORFBST0MJY2ZpX2lnbm9yZQorI2RlZmluZSBDRklfREVGX0NGQQljZmlfaWdub3JlCisjZGVmaW5lIENGSV9ERUZfQ0ZBX1JFR0lTVEVSCWNmaV9pZ25vcmUKKyNkZWZpbmUgQ0ZJX0RFRl9DRkFfT0ZGU0VUCWNmaV9pZ25vcmUKKyNkZWZpbmUgQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUCWNmaV9pZ25vcmUKKyNkZWZpbmUgQ0ZJX09GRlNFVAljZmlfaWdub3JlCisjZGVmaW5lIENGSV9SRUxfT0ZGU0VUCWNmaV9pZ25vcmUKKyNkZWZpbmUgQ0ZJX1JFR0lTVEVSCWNmaV9pZ25vcmUKKyNkZWZpbmUgQ0ZJX1JFU1RPUkUJY2ZpX2lnbm9yZQorI2RlZmluZSBDRklfUkVNRU1CRVJfU1RBVEUgY2ZpX2lnbm9yZQorI2RlZmluZSBDRklfUkVTVE9SRV9TVEFURSBjZmlfaWdub3JlCisjZGVmaW5lIENGSV9VTkRFRklORUQgY2ZpX2lnbm9yZQorI2RlZmluZSBDRklfU0lHTkFMX0ZSQU1FIGNmaV9pZ25vcmUKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9EV0FSRjJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOGNlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmgKQEAgLTAsMCArMSwxNDYgQEAKKyNpZm5kZWYgX0FTTV9YODZfRTgyMF9ICisjZGVmaW5lIF9BU01fWDg2X0U4MjBfSAorI2RlZmluZSBFODIwTUFQCTB4MmQwCQkvKiBvdXIgbWFwICovCisjZGVmaW5lIEU4MjBNQVgJMTI4CQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBFODIwTUFQICovCisKKy8qCisgKiBMZWdhY3kgRTgyMCBCSU9TIGxpbWl0cyB1cyB0byAxMjggKEU4MjBNQVgpIG5vZGVzIGR1ZSB0byB0aGUKKyAqIGNvbnN0cmFpbmVkIHNwYWNlIGluIHRoZSB6ZXJvcGFnZS4gIElmIHdlIGhhdmUgbW9yZSBub2RlcyB0aGFuCisgKiB0aGF0LCBhbmQgaWYgd2UndmUgYm9vdGVkIG9mZiBFRkkgZmlybXdhcmUsIHRoZW4gdGhlIEVGSSB0YWJsZXMKKyAqIHBhc3NlZCB1cyBmcm9tIHRoZSBFRkkgZmlybXdhcmUgY2FuIGxpc3QgbW9yZSBub2Rlcy4gIFNpemUgb3VyCisgKiBpbnRlcm5hbCBtZW1vcnkgbWFwIHRhYmxlcyB0byBoYXZlIHJvb20gZm9yIHRoZXNlIGFkZGl0aW9uYWwKKyAqIG5vZGVzLCBiYXNlZCBvbiB1cCB0byB0aHJlZSBlbnRyaWVzIHBlciBub2RlIGZvciB3aGljaCB0aGUKKyAqIGtlcm5lbCB3YXMgYnVpbHQ6IE1BWF9OVU1OT0RFUyA9PSAoMSA8PCBDT05GSUdfTk9ERVNfU0hJRlQpLAorICogcGx1cyBFODIwTUFYLCBhbGxvd2luZyBzcGFjZSBmb3IgdGhlIHBvc3NpYmxlIGR1cGxpY2F0ZSBFODIwCisgKiBlbnRyaWVzIHRoYXQgbWlnaHQgbmVlZCByb29tIGluIHRoZSBzYW1lIGFycmF5cywgcHJpb3IgdG8gdGhlCisgKiBjYWxsIHRvIHNhbml0aXplX2U4MjBfbWFwKCkgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMuICBUaGUgYWxsb3dhbmNlCisgKiBvZiB0aHJlZSBtZW1vcnkgbWFwIGVudHJpZXMgcGVyIG5vZGUgaXMgImVub3VnaCIgZW50cmllcyBmb3IKKyAqIHRoZSBpbml0aWFsIGhhcmR3YXJlIHBsYXRmb3JtIG1vdGl2YXRpbmcgdGhpcyBtZWNoYW5pc20gdG8gbWFrZQorICogdXNlIG9mIGFkZGl0aW9uYWwgRUZJIG1hcCBlbnRyaWVzLiAgRnV0dXJlIHBsYXRmb3JtcyBtYXkgd2FudAorICogdG8gYWxsb3cgbW9yZSB0aGFuIHRocmVlIGVudHJpZXMgcGVyIG5vZGUgb3Igb3RoZXJ3aXNlIHJlZmluZQorICogdGhpcyBzaXplLgorICovCisKKy8qCisgKiBPZGQ6ICdtYWtlIGhlYWRlcnNfY2hlY2snIGNvbXBsYWlucyBhYm91dCBudW1hLmggaWYgSSB0cnkKKyAqIHRvIGNvbGxhcHNlIHRoZSBuZXh0IHR3byAjaWZkZWYgbGluZXMgdG8gYSBzaW5nbGUgbGluZToKKyAqCSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoQ09ORklHX0VGSSkKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZmRlZiBDT05GSUdfRUZJCisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorI2RlZmluZSBFODIwX1hfTUFYIChFODIwTUFYICsgMyAqIE1BWF9OVU1OT0RFUykKKyNlbHNlCS8qICEgQ09ORklHX0VGSSAqLworI2RlZmluZSBFODIwX1hfTUFYIEU4MjBNQVgKKyNlbmRpZgorI2Vsc2UJLyogISBfX0tFUk5FTF9fICovCisjZGVmaW5lIEU4MjBfWF9NQVggRTgyME1BWAorI2VuZGlmCisKKyNkZWZpbmUgRTgyME5SCTB4MWU4CQkvKiAjIGVudHJpZXMgaW4gRTgyME1BUCAqLworCisjZGVmaW5lIEU4MjBfUkFNCTEKKyNkZWZpbmUgRTgyMF9SRVNFUlZFRAkyCisjZGVmaW5lIEU4MjBfQUNQSQkzCisjZGVmaW5lIEU4MjBfTlZTCTQKKyNkZWZpbmUgRTgyMF9VTlVTQUJMRQk1CisKKy8qIHJlc2VydmVkIFJBTSB1c2VkIGJ5IGtlcm5lbCBpdHNlbGYgKi8KKyNkZWZpbmUgRTgyMF9SRVNFUlZFRF9LRVJOICAgICAgICAxMjgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBlODIwZW50cnkgeworCV9fdTY0IGFkZHI7CS8qIHN0YXJ0IG9mIG1lbW9yeSBzZWdtZW50ICovCisJX191NjQgc2l6ZTsJLyogc2l6ZSBvZiBtZW1vcnkgc2VnbWVudCAqLworCV9fdTMyIHR5cGU7CS8qIHR5cGUgb2YgbWVtb3J5IHNlZ21lbnQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBlODIwbWFwIHsKKwlfX3UzMiBucl9tYXA7CisJc3RydWN0IGU4MjBlbnRyeSBtYXBbRTgyMF9YX01BWF07Cit9OworCisjaWZkZWYgX19LRVJORUxfXworLyogc2VlIGNvbW1lbnQgaW4gYXJjaC94ODYva2VybmVsL2U4MjAuYyAqLworZXh0ZXJuIHN0cnVjdCBlODIwbWFwIGU4MjA7CitleHRlcm4gc3RydWN0IGU4MjBtYXAgZTgyMF9zYXZlZDsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX21lbV9zdGFydDsKK2V4dGVybiBpbnQgZTgyMF9hbnlfbWFwcGVkKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgdHlwZSk7CitleHRlcm4gaW50IGU4MjBfYWxsX21hcHBlZCh1NjQgc3RhcnQsIHU2NCBlbmQsIHVuc2lnbmVkIHR5cGUpOworZXh0ZXJuIHZvaWQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKTsKK2V4dGVybiB2b2lkIGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobyk7CitleHRlcm4gaW50CitzYW5pdGl6ZV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICpiaW9zbWFwLCBpbnQgbWF4X25yX21hcCwgaW50ICpwbnJfbWFwKTsKK2V4dGVybiB1NjQgZTgyMF91cGRhdGVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCisJCQkgICAgICAgdW5zaWduZWQgbmV3X3R5cGUpOworZXh0ZXJuIHU2NCBlODIwX3JlbW92ZV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKKwkJCSAgICAgaW50IGNoZWNrdHlwZSk7CitleHRlcm4gdm9pZCB1cGRhdGVfZTgyMCh2b2lkKTsKK2V4dGVybiB2b2lkIGU4MjBfc2V0dXBfZ2FwKHZvaWQpOworZXh0ZXJuIGludCBlODIwX3NlYXJjaF9nYXAodW5zaWduZWQgbG9uZyAqZ2Fwc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmdhcHNpemUsCisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbmRfYWRkcik7CitzdHJ1Y3Qgc2V0dXBfZGF0YTsKK2V4dGVybiB2b2lkIHBhcnNlX2U4MjBfZXh0KHN0cnVjdCBzZXR1cF9kYXRhICpkYXRhLCB1bnNpZ25lZCBsb25nIHBhX2RhdGEpOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBcCisJKGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgZGVmaW5lZChDT05GSUdfSElCRVJOQVRJT04pKQorZXh0ZXJuIHZvaWQgZTgyMF9tYXJrX25vc2F2ZV9yZWdpb25zKHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZTgyMF9tYXJrX25vc2F2ZV9yZWdpb25zKHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUVNVEVTVAorZXh0ZXJuIHZvaWQgZWFybHlfbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X21lbXRlc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX3VzZXJfcGZuOworCitleHRlcm4gdTY0IGZpbmRfZTgyMF9hcmVhKHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbik7CitleHRlcm4gdTY0IGZpbmRfZTgyMF9hcmVhX3NpemUodTY0IHN0YXJ0LCB1NjQgKnNpemVwLCB1NjQgYWxpZ24pOworZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9lYXJseV9vdmVybGFwX29rKHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBmcmVlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCk7CitleHRlcm4gdm9pZCBlYXJseV9yZXNfdG9fYm9vdG1lbSh1NjQgc3RhcnQsIHU2NCBlbmQpOworZXh0ZXJuIHU2NCBlYXJseV9yZXNlcnZlX2U4MjAodTY0IHN0YXJ0dCwgdTY0IHNpemV0LCB1NjQgYWxpZ24pOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBlODIwX2VuZF9vZl9yYW1fcGZuKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfbG93X3JhbV9wZm4odm9pZCk7CitleHRlcm4gaW50IGU4MjBfZmluZF9hY3RpdmVfcmVnaW9uKGNvbnN0IHN0cnVjdCBlODIwZW50cnkgKmVpLAorCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQkJICB1bnNpZ25lZCBsb25nIGxhc3RfcGZuLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqZWlfc3RhcnRwZm4sCisJCQkJICB1bnNpZ25lZCBsb25nICplaV9lbmRwZm4pOworZXh0ZXJuIHZvaWQgZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CitleHRlcm4gdTY0IGU4MjBfaG9sZV9zaXplKHU2NCBzdGFydCwgdTY0IGVuZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfZTgyMF9wYXJzaW5nKHZvaWQpOworZXh0ZXJuIHZvaWQgZTgyMF9yZXNlcnZlX3Jlc291cmNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXNfbGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHNldHVwX21lbW9yeV9tYXAodm9pZCk7CitleHRlcm4gY2hhciAqZGVmYXVsdF9tYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKTsKK2V4dGVybiBjaGFyICptYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKTsKK2V4dGVybiBjaGFyICptZW1vcnlfc2V0dXAodm9pZCk7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIElTQV9TVEFSVF9BRERSRVNTCTB4YTAwMDAKKyNkZWZpbmUgSVNBX0VORF9BRERSRVNTCQkweDEwMDAwMAorI2RlZmluZSBpc19JU0FfcmFuZ2UocywgZSkgKChzKSA+PSBJU0FfU1RBUlRfQUREUkVTUyAmJiAoZSkgPCBJU0FfRU5EX0FERFJFU1MpCisKKyNkZWZpbmUgQklPU19CRUdJTgkJMHgwMDBhMDAwMAorI2RlZmluZSBCSU9TX0VORAkJMHgwMDEwMDAwMAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIEhJR0hfTUVNT1JZCSgxMDI0KjEwMjQpCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfRTgyMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZGFjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZGFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliNTdlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VkYWMuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fWDg2X0VEQUNfSAorI2RlZmluZSBfQVNNX1g4Nl9FREFDX0gKKworLyogRUNDIGF0b21pYywgRE1BLCBTTVAgYW5kIGludGVycnVwdCBzYWZlIHNjcnViIGZ1bmN0aW9uICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2NydWIodm9pZCAqdmEsIHUzMiBzaXplKQoreworCXUzMiBpLCAqdmlydF9hZGRyID0gdmE7CisKKwkvKgorCSAqIFZlcnkgY2FyZWZ1bGx5IHJlYWQgYW5kIHdyaXRlIHRvIG1lbW9yeSBhdG9taWNhbGx5IHNvIHdlCisJICogYXJlIGludGVycnVwdCwgRE1BIGFuZCBTTVAgc2FmZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIDQ7IGkrKywgdmlydF9hZGRyKyspCisJCWFzbSB2b2xhdGlsZSgibG9jazsgYWRkbCAkMCwgJTAiOjoibSIgKCp2aXJ0X2FkZHIpKTsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X0VEQUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU1NDVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNpZm5kZWYgX0FTTV9YODZfRUZJX0gKKyNkZWZpbmUgX0FTTV9YODZfRUZJX0gKKworI2lmZGVmIENPTkZJR19YODZfMzIKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXNtbGlua2FnZSBlZmlfY2FsbF9waHlzKHZvaWQgKiwgLi4uKTsKKworI2RlZmluZSBlZmlfY2FsbF9waHlzMChmKQkJZWZpX2NhbGxfcGh5cyhmKQorI2RlZmluZSBlZmlfY2FsbF9waHlzMShmLCBhMSkJCWVmaV9jYWxsX3BoeXMoZiwgYTEpCisjZGVmaW5lIGVmaV9jYWxsX3BoeXMyKGYsIGExLCBhMikJZWZpX2NhbGxfcGh5cyhmLCBhMSwgYTIpCisjZGVmaW5lIGVmaV9jYWxsX3BoeXMzKGYsIGExLCBhMiwgYTMpCWVmaV9jYWxsX3BoeXMoZiwgYTEsIGEyLCBhMykKKyNkZWZpbmUgZWZpX2NhbGxfcGh5czQoZiwgYTEsIGEyLCBhMywgYTQpCVwKKwllZmlfY2FsbF9waHlzKGYsIGExLCBhMiwgYTMsIGE0KQorI2RlZmluZSBlZmlfY2FsbF9waHlzNShmLCBhMSwgYTIsIGEzLCBhNCwgYTUpCVwKKwllZmlfY2FsbF9waHlzKGYsIGExLCBhMiwgYTMsIGE0LCBhNSkKKyNkZWZpbmUgZWZpX2NhbGxfcGh5czYoZiwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikJXAorCWVmaV9jYWxsX3BoeXMoZiwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKKy8qCisgKiBXcmFwIGFsbCB0aGUgdmlydHVhbCBjYWxscyBpbiBhIHdheSB0aGF0IGZvcmNlcyB0aGUgcGFyYW1ldGVycyBvbiB0aGUgc3RhY2suCisgKi8KKworI2RlZmluZSBlZmlfY2FsbF92aXJ0KGYsIGFyZ3MuLi4pIFwKKwkoKGVmaV8jI2YjI190IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSopZWZpLnN5c3RhYi0+cnVudGltZS0+ZikoYXJncykKKworI2RlZmluZSBlZmlfY2FsbF92aXJ0MChmKQkJZWZpX2NhbGxfdmlydChmKQorI2RlZmluZSBlZmlfY2FsbF92aXJ0MShmLCBhMSkJCWVmaV9jYWxsX3ZpcnQoZiwgYTEpCisjZGVmaW5lIGVmaV9jYWxsX3ZpcnQyKGYsIGExLCBhMikJZWZpX2NhbGxfdmlydChmLCBhMSwgYTIpCisjZGVmaW5lIGVmaV9jYWxsX3ZpcnQzKGYsIGExLCBhMiwgYTMpCWVmaV9jYWxsX3ZpcnQoZiwgYTEsIGEyLCBhMykKKyNkZWZpbmUgZWZpX2NhbGxfdmlydDQoZiwgYTEsIGEyLCBhMywgYTQpCVwKKwllZmlfY2FsbF92aXJ0KGYsIGExLCBhMiwgYTMsIGE0KQorI2RlZmluZSBlZmlfY2FsbF92aXJ0NShmLCBhMSwgYTIsIGEzLCBhNCwgYTUpCVwKKwllZmlfY2FsbF92aXJ0KGYsIGExLCBhMiwgYTMsIGE0LCBhNSkKKyNkZWZpbmUgZWZpX2NhbGxfdmlydDYoZiwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikJXAorCWVmaV9jYWxsX3ZpcnQoZiwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKKworI2RlZmluZSBlZmlfaW9yZW1hcChhZGRyLCBzaXplKQkJCWlvcmVtYXBfY2FjaGUoYWRkciwgc2l6ZSkKKworI2Vsc2UgLyogIUNPTkZJR19YODZfMzIgKi8KKworI2RlZmluZSBNQVhfRUZJX0lPX1BBR0VTCTEwMAorCitleHRlcm4gdTY0IGVmaV9jYWxsMCh2b2lkICpmcCk7CitleHRlcm4gdTY0IGVmaV9jYWxsMSh2b2lkICpmcCwgdTY0IGFyZzEpOworZXh0ZXJuIHU2NCBlZmlfY2FsbDIodm9pZCAqZnAsIHU2NCBhcmcxLCB1NjQgYXJnMik7CitleHRlcm4gdTY0IGVmaV9jYWxsMyh2b2lkICpmcCwgdTY0IGFyZzEsIHU2NCBhcmcyLCB1NjQgYXJnMyk7CitleHRlcm4gdTY0IGVmaV9jYWxsNCh2b2lkICpmcCwgdTY0IGFyZzEsIHU2NCBhcmcyLCB1NjQgYXJnMywgdTY0IGFyZzQpOworZXh0ZXJuIHU2NCBlZmlfY2FsbDUodm9pZCAqZnAsIHU2NCBhcmcxLCB1NjQgYXJnMiwgdTY0IGFyZzMsCisJCSAgICAgdTY0IGFyZzQsIHU2NCBhcmc1KTsKK2V4dGVybiB1NjQgZWZpX2NhbGw2KHZvaWQgKmZwLCB1NjQgYXJnMSwgdTY0IGFyZzIsIHU2NCBhcmczLAorCQkgICAgIHU2NCBhcmc0LCB1NjQgYXJnNSwgdTY0IGFyZzYpOworCisjZGVmaW5lIGVmaV9jYWxsX3BoeXMwKGYpCQkJXAorCWVmaV9jYWxsMCgodm9pZCAqKShmKSkKKyNkZWZpbmUgZWZpX2NhbGxfcGh5czEoZiwgYTEpCQkJXAorCWVmaV9jYWxsMSgodm9pZCAqKShmKSwgKHU2NCkoYTEpKQorI2RlZmluZSBlZmlfY2FsbF9waHlzMihmLCBhMSwgYTIpCQkJXAorCWVmaV9jYWxsMigodm9pZCAqKShmKSwgKHU2NCkoYTEpLCAodTY0KShhMikpCisjZGVmaW5lIGVmaV9jYWxsX3BoeXMzKGYsIGExLCBhMiwgYTMpCQkJCVwKKwllZmlfY2FsbDMoKHZvaWQgKikoZiksICh1NjQpKGExKSwgKHU2NCkoYTIpLCAodTY0KShhMykpCisjZGVmaW5lIGVmaV9jYWxsX3BoeXM0KGYsIGExLCBhMiwgYTMsIGE0KQkJCQlcCisJZWZpX2NhbGw0KCh2b2lkICopKGYpLCAodTY0KShhMSksICh1NjQpKGEyKSwgKHU2NCkoYTMpLAkJXAorCQkgICh1NjQpKGE0KSkKKyNkZWZpbmUgZWZpX2NhbGxfcGh5czUoZiwgYTEsIGEyLCBhMywgYTQsIGE1KQkJCQlcCisJZWZpX2NhbGw1KCh2b2lkICopKGYpLCAodTY0KShhMSksICh1NjQpKGEyKSwgKHU2NCkoYTMpLAkJXAorCQkgICh1NjQpKGE0KSwgKHU2NCkoYTUpKQorI2RlZmluZSBlZmlfY2FsbF9waHlzNihmLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KQkJCVwKKwllZmlfY2FsbDYoKHZvaWQgKikoZiksICh1NjQpKGExKSwgKHU2NCkoYTIpLCAodTY0KShhMyksCQlcCisJCSAgKHU2NCkoYTQpLCAodTY0KShhNSksICh1NjQpKGE2KSkKKworI2RlZmluZSBlZmlfY2FsbF92aXJ0MChmKQkJCQlcCisJZWZpX2NhbGwwKCh2b2lkICopKGVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpKQorI2RlZmluZSBlZmlfY2FsbF92aXJ0MShmLCBhMSkJCQkJCVwKKwllZmlfY2FsbDEoKHZvaWQgKikoZWZpLnN5c3RhYi0+cnVudGltZS0+ZiksICh1NjQpKGExKSkKKyNkZWZpbmUgZWZpX2NhbGxfdmlydDIoZiwgYTEsIGEyKQkJCQkJXAorCWVmaV9jYWxsMigodm9pZCAqKShlZmkuc3lzdGFiLT5ydW50aW1lLT5mKSwgKHU2NCkoYTEpLCAodTY0KShhMikpCisjZGVmaW5lIGVmaV9jYWxsX3ZpcnQzKGYsIGExLCBhMiwgYTMpCQkJCQlcCisJZWZpX2NhbGwzKCh2b2lkICopKGVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpLCAodTY0KShhMSksICh1NjQpKGEyKSwgXAorCQkgICh1NjQpKGEzKSkKKyNkZWZpbmUgZWZpX2NhbGxfdmlydDQoZiwgYTEsIGEyLCBhMywgYTQpCQkJCVwKKwllZmlfY2FsbDQoKHZvaWQgKikoZWZpLnN5c3RhYi0+cnVudGltZS0+ZiksICh1NjQpKGExKSwgKHU2NCkoYTIpLCBcCisJCSAgKHU2NCkoYTMpLCAodTY0KShhNCkpCisjZGVmaW5lIGVmaV9jYWxsX3ZpcnQ1KGYsIGExLCBhMiwgYTMsIGE0LCBhNSkJCQkJXAorCWVmaV9jYWxsNSgodm9pZCAqKShlZmkuc3lzdGFiLT5ydW50aW1lLT5mKSwgKHU2NCkoYTEpLCAodTY0KShhMiksIFwKKwkJICAodTY0KShhMyksICh1NjQpKGE0KSwgKHU2NCkoYTUpKQorI2RlZmluZSBlZmlfY2FsbF92aXJ0NihmLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KQkJCVwKKwllZmlfY2FsbDYoKHZvaWQgKikoZWZpLnN5c3RhYi0+cnVudGltZS0+ZiksICh1NjQpKGExKSwgKHU2NCkoYTIpLCBcCisJCSAgKHU2NCkoYTMpLCAodTY0KShhNCksICh1NjQpKGE1KSwgKHU2NCkoYTYpKQorCitleHRlcm4gdm9pZCBfX2lvbWVtICplZmlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKK2V4dGVybiB2b2lkIGVmaV9yZXNlcnZlX2Vhcmx5KHZvaWQpOworZXh0ZXJuIHZvaWQgZWZpX2NhbGxfcGh5c19wcmVsb2codm9pZCk7CitleHRlcm4gdm9pZCBlZmlfY2FsbF9waHlzX2VwaWxvZyh2b2lkKTsKKworI2lmbmRlZiBDT05GSUdfRUZJCisvKgorICogSUYgRUZJIGlzIG5vdCBjb25maWd1cmVkLCBoYXZlIHRoZSBFRkkgY2FsbHMgcmV0dXJuIC1FTk9TWVMuCisgKi8KKyNkZWZpbmUgZWZpX2NhbGwwKF9mKQkJCQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsMShfZiwgX2ExKQkJCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGwyKF9mLCBfYTEsIF9hMikJCQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsMyhfZiwgX2ExLCBfYTIsIF9hMykJCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGw0KF9mLCBfYTEsIF9hMiwgX2EzLCBfYTQpCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGw1KF9mLCBfYTEsIF9hMiwgX2EzLCBfYTQsIF9hNSkJCSgtRU5PU1lTKQorI2RlZmluZSBlZmlfY2FsbDYoX2YsIF9hMSwgX2EyLCBfYTMsIF9hNCwgX2E1LCBfYTYpCSgtRU5PU1lTKQorI2VuZGlmIC8qIENPTkZJR19FRkkgKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X0VGSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwY2ExYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMCwwICsxLDMzNiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9FTEZfSAorI2RlZmluZSBfQVNNX1g4Nl9FTEZfSAorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKKworI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCit0eXBlZGVmIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IGVsZl9mcHJlZ3NldF90OworCisjaWZkZWYgX19pMzg2X18KKwordHlwZWRlZiBzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCBlbGZfZnB4cmVnc2V0X3Q7CisKKyNkZWZpbmUgUl8zODZfTk9ORQkwCisjZGVmaW5lIFJfMzg2XzMyCTEKKyNkZWZpbmUgUl8zODZfUEMzMgkyCisjZGVmaW5lIFJfMzg2X0dPVDMyCTMKKyNkZWZpbmUgUl8zODZfUExUMzIJNAorI2RlZmluZSBSXzM4Nl9DT1BZCTUKKyNkZWZpbmUgUl8zODZfR0xPQl9EQVQJNgorI2RlZmluZSBSXzM4Nl9KTVBfU0xPVAk3CisjZGVmaW5lIFJfMzg2X1JFTEFUSVZFCTgKKyNkZWZpbmUgUl8zODZfR09UT0ZGCTkKKyNkZWZpbmUgUl8zODZfR09UUEMJMTAKKyNkZWZpbmUgUl8zODZfTlVNCTExCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfQVJDSAlFTV8zODYKKworI2Vsc2UKKworLyogeDg2LTY0IHJlbG9jYXRpb24gdHlwZXMgKi8KKyNkZWZpbmUgUl9YODZfNjRfTk9ORQkJMAkvKiBObyByZWxvYyAqLworI2RlZmluZSBSX1g4Nl82NF82NAkJMQkvKiBEaXJlY3QgNjQgYml0ICAqLworI2RlZmluZSBSX1g4Nl82NF9QQzMyCQkyCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCBzaWduZWQgKi8KKyNkZWZpbmUgUl9YODZfNjRfR09UMzIJCTMJLyogMzIgYml0IEdPVCBlbnRyeSAqLworI2RlZmluZSBSX1g4Nl82NF9QTFQzMgkJNAkvKiAzMiBiaXQgUExUIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9YODZfNjRfQ09QWQkJNQkvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lICovCisjZGVmaW5lIFJfWDg2XzY0X0dMT0JfREFUCTYJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSX1g4Nl82NF9KVU1QX1NMT1QJNwkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfWDg2XzY0X1JFTEFUSVZFCTgJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworI2RlZmluZSBSX1g4Nl82NF9HT1RQQ1JFTAk5CS8qIDMyIGJpdCBzaWduZWQgcGMgcmVsYXRpdmUKKwkJCQkJICAgb2Zmc2V0IHRvIEdPVCAqLworI2RlZmluZSBSX1g4Nl82NF8zMgkJMTAJLyogRGlyZWN0IDMyIGJpdCB6ZXJvIGV4dGVuZGVkICovCisjZGVmaW5lIFJfWDg2XzY0XzMyUwkJMTEJLyogRGlyZWN0IDMyIGJpdCBzaWduIGV4dGVuZGVkICovCisjZGVmaW5lIFJfWDg2XzY0XzE2CQkxMgkvKiBEaXJlY3QgMTYgYml0IHplcm8gZXh0ZW5kZWQgKi8KKyNkZWZpbmUgUl9YODZfNjRfUEMxNgkJMTMJLyogMTYgYml0IHNpZ24gZXh0ZW5kZWQgcGMgcmVsYXRpdmUgKi8KKyNkZWZpbmUgUl9YODZfNjRfOAkJMTQJLyogRGlyZWN0IDggYml0IHNpZ24gZXh0ZW5kZWQgICovCisjZGVmaW5lIFJfWDg2XzY0X1BDOAkJMTUJLyogOCBiaXQgc2lnbiBleHRlbmRlZCBwYyByZWxhdGl2ZSAqLworCisjZGVmaW5lIFJfWDg2XzY0X05VTQkJMTYKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzY0CisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTFNCCisjZGVmaW5lIEVMRl9BUkNICUVNX1g4Nl82NAorCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmRzb19lbmFibGVkOworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaF9pYTMyKHgpIFwKKwkoKCh4KS0+ZV9tYWNoaW5lID09IEVNXzM4NikgfHwgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzQ4NikpCisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisKKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkJZWxmX2NoZWNrX2FyY2hfaWEzMih4KQorCisvKiBTVlI0L2kzODYgQUJJIChwYWdlcyAzLTMxLCAzLTMyKSBzYXlzIHRoYXQgd2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgJWVkeAorICAgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUgcmVnaXN0ZXJlZCB1c2luZyBgYXRleGl0Jy4KKyAgIFRoaXMgcHJvdmlkZXMgYSBtZWFuIGZvciB0aGUgZHluYW1pYyBsaW5rZXIgdG8gY2FsbCBEVF9GSU5JIGZ1bmN0aW9ucyBmb3IKKyAgIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCBoYXZlIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUgY29kZSBydW5zLgorCisgICBBIHZhbHVlIG9mIDAgdGVsbHMgd2UgaGF2ZSBubyBzdWNoIGhhbmRsZXIuCisKKyAgIFdlIG1pZ2h0IGFzIHdlbGwgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgZWxzZSBpcyBjbGVhcmVkIHRvbyAoZXhjZXB0IGZvciAlZXNwKSwKKyAgIGp1c3QgdG8gbWFrZSB0aGluZ3MgbW9yZSBkZXRlcm1pbmlzdGljLgorICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJCVwKKwlkbyB7CQkJCQlcCisJX3ItPmJ4ID0gMDsgX3ItPmN4ID0gMDsgX3ItPmR4ID0gMDsJXAorCV9yLT5zaSA9IDA7IF9yLT5kaSA9IDA7IF9yLT5icCA9IDA7CVwKKwlfci0+YXggPSAwOwkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogcmVncyBpcyBzdHJ1Y3QgcHRfcmVncywgcHJfcmVnIGlzIGVsZl9ncmVnc2V0X3QgKHdoaWNoIGlzCisgKiBub3cgc3RydWN0X3VzZXJfcmVncywgdGhleSBhcmUgZGlmZmVyZW50KQorICovCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJXAorZG8gewkJCQkJCVwKKwlwcl9yZWdbMF0gPSByZWdzLT5ieDsJCQlcCisJcHJfcmVnWzFdID0gcmVncy0+Y3g7CQkJXAorCXByX3JlZ1syXSA9IHJlZ3MtPmR4OwkJCVwKKwlwcl9yZWdbM10gPSByZWdzLT5zaTsJCQlcCisJcHJfcmVnWzRdID0gcmVncy0+ZGk7CQkJXAorCXByX3JlZ1s1XSA9IHJlZ3MtPmJwOwkJCVwKKwlwcl9yZWdbNl0gPSByZWdzLT5heDsJCQlcCisJcHJfcmVnWzddID0gcmVncy0+ZHMgJiAweGZmZmY7CQlcCisJcHJfcmVnWzhdID0gcmVncy0+ZXMgJiAweGZmZmY7CQlcCisJcHJfcmVnWzldID0gcmVncy0+ZnMgJiAweGZmZmY7CQlcCisJc2F2ZXNlZ21lbnQoZ3MsIHByX3JlZ1sxMF0pOwkJXAorCXByX3JlZ1sxMV0gPSByZWdzLT5vcmlnX2F4OwkJXAorCXByX3JlZ1sxMl0gPSByZWdzLT5pcDsJCQlcCisJcHJfcmVnWzEzXSA9IHJlZ3MtPmNzICYgMHhmZmZmOwkJXAorCXByX3JlZ1sxNF0gPSByZWdzLT5mbGFnczsJCVwKKwlwcl9yZWdbMTVdID0gcmVncy0+c3A7CQkJXAorCXByX3JlZ1sxNl0gPSByZWdzLT5zcyAmIDB4ZmZmZjsJCVwKK30gd2hpbGUgKDApOworCisjZGVmaW5lIEVMRl9QTEFURk9STQkodXRzbmFtZSgpLT5tYWNoaW5lKQorI2RlZmluZSBzZXRfcGVyc29uYWxpdHlfNjRiaXQoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkJCQlcCisJKCh4KS0+ZV9tYWNoaW5lID09IEVNX1g4Nl82NCkKKworI2RlZmluZSBjb21wYXRfZWxmX2NoZWNrX2FyY2goeCkJZWxmX2NoZWNrX2FyY2hfaWEzMih4KQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaWEzMl90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpcCwgdTMyIHNwKQoreworCWxvYWRzZWdtZW50KGZzLCAwKTsKKwlsb2Fkc2VnbWVudChkcywgX19VU0VSMzJfRFMpOworCWxvYWRzZWdtZW50KGVzLCBfX1VTRVIzMl9EUyk7CisJbG9hZF9nc19pbmRleCgwKTsKKwlyZWdzLT5pcCA9IGlwOworCXJlZ3MtPnNwID0gc3A7CisJcmVncy0+ZmxhZ3MgPSBYODZfRUZMQUdTX0lGOworCXJlZ3MtPmNzID0gX19VU0VSMzJfQ1M7CisJcmVncy0+c3MgPSBfX1VTRVIzMl9EUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVsZl9jb21tb25faW5pdChzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwKKwkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgdTE2IGRzKQoreworCXJlZ3MtPmF4ID0gcmVncy0+YnggPSByZWdzLT5jeCA9IHJlZ3MtPmR4ID0gMDsKKwlyZWdzLT5zaSA9IHJlZ3MtPmRpID0gcmVncy0+YnAgPSAwOworCXJlZ3MtPnI4ID0gcmVncy0+cjkgPSByZWdzLT5yMTAgPSByZWdzLT5yMTEgPSAwOworCXJlZ3MtPnIxMiA9IHJlZ3MtPnIxMyA9IHJlZ3MtPnIxNCA9IHJlZ3MtPnIxNSA9IDA7CisJdC0+ZnMgPSB0LT5ncyA9IDA7CisJdC0+ZnNpbmRleCA9IHQtPmdzaW5kZXggPSAwOworCXQtPmRzID0gdC0+ZXMgPSBkczsKK30KKworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCQkJXAorZG8gewkJCQkJCQlcCisJZWxmX2NvbW1vbl9pbml0KCZjdXJyZW50LT50aHJlYWQsIF9yLCAwKTsJXAorCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JQTMyKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCUNPTVBBVF9FTEZfUExBVF9JTklUKHJlZ3MsIGxvYWRfYWRkcikJCVwKKwllbGZfY29tbW9uX2luaXQoJmN1cnJlbnQtPnRocmVhZCwgcmVncywgX19VU0VSX0RTKQorCisjZGVmaW5lCWNvbXBhdF9zdGFydF90aHJlYWQocmVncywgaXAsIHNwKQkJXAorZG8gewkJCQkJCQlcCisJc3RhcnRfaWEzMl90aHJlYWQocmVncywgaXAsIHNwKTsJCVwKKwlzZXRfZnMoVVNFUl9EUyk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09NUEFUX1NFVF9QRVJTT05BTElUWShleCkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikpCQkJXAorCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwlcCisJZWxzZQkJCQkJCVwKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CVwKKwljdXJyZW50LT5wZXJzb25hbGl0eSB8PSBmb3JjZV9wZXJzb25hbGl0eTMyOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBBVF9FTEZfUExBVEZPUk0JCQkoImk2ODYiKQorCisvKgorICogcmVncyBpcyBzdHJ1Y3QgcHRfcmVncywgcHJfcmVnIGlzIGVsZl9ncmVnc2V0X3QgKHdoaWNoIGlzCisgKiBub3cgc3RydWN0X3VzZXJfcmVncywgdGhleSBhcmUgZGlmZmVyZW50KS4gQXNzdW1lcyBjdXJyZW50IGlzIHRoZSBwcm9jZXNzCisgKiBnZXR0aW5nIGR1bXBlZC4KKyAqLworCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCQkJXAorZG8gewkJCQkJCQkJXAorCXVuc2lnbmVkIHY7CQkJCQkJXAorCShwcl9yZWcpWzBdID0gKHJlZ3MpLT5yMTU7CQkJCVwKKwkocHJfcmVnKVsxXSA9IChyZWdzKS0+cjE0OwkJCQlcCisJKHByX3JlZylbMl0gPSAocmVncyktPnIxMzsJCQkJXAorCShwcl9yZWcpWzNdID0gKHJlZ3MpLT5yMTI7CQkJCVwKKwkocHJfcmVnKVs0XSA9IChyZWdzKS0+YnA7CQkJCVwKKwkocHJfcmVnKVs1XSA9IChyZWdzKS0+Yng7CQkJCVwKKwkocHJfcmVnKVs2XSA9IChyZWdzKS0+cjExOwkJCQlcCisJKHByX3JlZylbN10gPSAocmVncyktPnIxMDsJCQkJXAorCShwcl9yZWcpWzhdID0gKHJlZ3MpLT5yOTsJCQkJXAorCShwcl9yZWcpWzldID0gKHJlZ3MpLT5yODsJCQkJXAorCShwcl9yZWcpWzEwXSA9IChyZWdzKS0+YXg7CQkJCVwKKwkocHJfcmVnKVsxMV0gPSAocmVncyktPmN4OwkJCQlcCisJKHByX3JlZylbMTJdID0gKHJlZ3MpLT5keDsJCQkJXAorCShwcl9yZWcpWzEzXSA9IChyZWdzKS0+c2k7CQkJCVwKKwkocHJfcmVnKVsxNF0gPSAocmVncyktPmRpOwkJCQlcCisJKHByX3JlZylbMTVdID0gKHJlZ3MpLT5vcmlnX2F4OwkJCQlcCisJKHByX3JlZylbMTZdID0gKHJlZ3MpLT5pcDsJCQkJXAorCShwcl9yZWcpWzE3XSA9IChyZWdzKS0+Y3M7CQkJCVwKKwkocHJfcmVnKVsxOF0gPSAocmVncyktPmZsYWdzOwkJCQlcCisJKHByX3JlZylbMTldID0gKHJlZ3MpLT5zcDsJCQkJXAorCShwcl9yZWcpWzIwXSA9IChyZWdzKS0+c3M7CQkJCVwKKwkocHJfcmVnKVsyMV0gPSBjdXJyZW50LT50aHJlYWQuZnM7CQkJXAorCShwcl9yZWcpWzIyXSA9IGN1cnJlbnQtPnRocmVhZC5nczsJCQlcCisJYXNtKCJtb3ZsICUlZHMsJTAiIDogIj1yIiAodikpOyAocHJfcmVnKVsyM10gPSB2OwlcCisJYXNtKCJtb3ZsICUlZXMsJTAiIDogIj1yIiAodikpOyAocHJfcmVnKVsyNF0gPSB2OwlcCisJYXNtKCJtb3ZsICUlZnMsJTAiIDogIj1yIiAodikpOyAocHJfcmVnKVsyNV0gPSB2OwlcCisJYXNtKCJtb3ZsICUlZ3MsJTAiIDogIj1yIiAodikpOyAocHJfcmVnKVsyNl0gPSB2OwlcCit9IHdoaWxlICgwKTsKKworLyogSSdtIG5vdCBzdXJlIGlmIHdlIGNhbiB1c2UgJy0nIGhlcmUgKi8KKyNkZWZpbmUgRUxGX1BMQVRGT1JNICAgICAgICgieDg2XzY0IikKK2V4dGVybiB2b2lkIHNldF9wZXJzb25hbGl0eV82NGJpdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3ZzeXNjYWxsMzI7CitleHRlcm4gaW50IGZvcmNlX3BlcnNvbmFsaXR5MzI7CisKKyNlbmRpZiAvKiAhQ09ORklHX1g4Nl8zMiAqLworCisjZGVmaW5lIENPUkVfRFVNUF9VU0VfUkVHU0VUCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkoVEFTS19TSVpFIC8gMyAqIDIpCisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIENQVSBzdXBwb3J0cy4gIFRoaXMgY291bGQgYmUgZG9uZSBpbiB1c2VyIHNwYWNlLAorICAgYnV0IGl0J3Mgbm90IGVhc3ksIGFuZCB3ZSd2ZSBhbHJlYWR5IGRvbmUgaXQgaGVyZS4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCQkoYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eVswXSkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisKKyAgIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9ubHkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIEludGVsIGdlbmVyYXRpb25zLAorICAgYnV0IHRoYXQgY291bGQgY2hhbmdlLi4uICovCisKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHlfNjRiaXQoKQorCisvKgorICogQW4gZXhlY3V0YWJsZSBmb3Igd2hpY2ggZWxmX3JlYWRfaW1wbGllc19leGVjKCkgcmV0dXJucyBUUlVFIHdpbGwKKyAqIGhhdmUgdGhlIFJFQURfSU1QTElFU19FWEVDIHBlcnNvbmFsaXR5IGZsYWcgc2V0IGF1dG9tYXRpY2FsbHkuCisgKi8KKyNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBleGVjdXRhYmxlX3N0YWNrKQlcCisJKGV4ZWN1dGFibGVfc3RhY2sgIT0gRVhTVEFDS19ESVNBQkxFX1gpCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2RlZmluZQlBUkNIX0RMSU5GT19JQTMyKHZkc29fZW5hYmxlZCkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHZkc29fZW5hYmxlZCkgewkJCQkJCVwKKwkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GTywJVkRTT19FTlRSWSk7CQkJXAorCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPX0VIRFIsIFZEU09fQ1VSUkVOVF9CQVNFKTsJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisKKyNkZWZpbmUgVkRTT19ISUdIX0JBU0UJCShfX2ZpeF90b192aXJ0KEZJWF9WRFNPKSkKKworI2RlZmluZSBBUkNIX0RMSU5GTwkJQVJDSF9ETElORk9fSUEzMih2ZHNvX2VuYWJsZWQpCisKKy8qIHVwZGF0ZSBBVF9WRUNUT1JfU0laRV9BUkNIIGlmIHRoZSBudW1iZXIgb2YgTkVXX0FVWF9FTlQgZW50cmllcyBjaGFuZ2VzICovCisKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKworI2RlZmluZSBWRFNPX0hJR0hfQkFTRQkJMHhmZmZmZTAwMFUgLyogQ09ORklHX0NPTVBBVF9WRFNPIGFkZHJlc3MgKi8KKworLyogMUdCIGZvciA2NGJpdCwgOE1CIGZvciAzMmJpdCAqLworI2RlZmluZSBTVEFDS19STkRfTUFTSyAodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgPyAweDdmZiA6IDB4M2ZmZmZmKQorCisjZGVmaW5lIEFSQ0hfRExJTkZPCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHZkc29fZW5hYmxlZCkJCQkJCQlcCisJCU5FV19BVVhfRU5UKEFUX1NZU0lORk9fRUhEUiwJCQkJXAorCQkJICAgICh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc28pOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFUX1NZU0lORk8JCTMyCisKKyNkZWZpbmUgQ09NUEFUX0FSQ0hfRExJTkZPCUFSQ0hfRExJTkZPX0lBMzIoc3lzY3RsX3ZzeXNjYWxsMzIpCisKKyNkZWZpbmUgQ09NUEFUX0VMRl9FVF9EWU5fQkFTRQkoVEFTS19VTk1BUFBFRF9CQVNFICsgMHgxMDAwMDAwKQorCisjZW5kaWYgLyogIUNPTkZJR19YODZfMzIgKi8KKworI2RlZmluZSBWRFNPX0NVUlJFTlRfQkFTRQkoKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+bW0tPmNvbnRleHQudmRzbykKKworI2RlZmluZSBWRFNPX0VOVFJZCQkJCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpVkRTTzMyX1NZTUJPTChWRFNPX0NVUlJFTlRfQkFTRSwgdnN5c2NhbGwpKQorCitzdHJ1Y3QgbGludXhfYmlucHJtOworCisjZGVmaW5lIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMgMQorZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCQkgICAgICAgaW50IGV4ZWN1dGFibGVfc3RhY2spOworCitleHRlcm4gaW50IHN5c2NhbGwzMl9zZXR1cF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICosIGludCBleHN0YWNrKTsKKyNkZWZpbmUgY29tcGF0X2FyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcwlzeXNjYWxsMzJfc2V0dXBfcGFnZXMKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNkZWZpbmUgYXJjaF9yYW5kb21pemVfYnJrIGFyY2hfcmFuZG9taXplX2JyaworCisjZW5kaWYgLyogX0FTTV9YODZfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbWVyZ2VuY3ktcmVzdGFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ODI2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbWVyZ2VuY3ktcmVzdGFydC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX0FTTV9YODZfRU1FUkdFTkNZX1JFU1RBUlRfSAorI2RlZmluZSBfQVNNX1g4Nl9FTUVSR0VOQ1lfUkVTVEFSVF9ICisKK2VudW0gcmVib290X3R5cGUgeworCUJPT1RfVFJJUExFID0gJ3QnLAorCUJPT1RfS0JEID0gJ2snLAorI2lmZGVmIENPTkZJR19YODZfMzIKKwlCT09UX0JJT1MgPSAnYicsCisjZW5kaWYKKwlCT09UX0FDUEkgPSAnYScsCisJQk9PVF9FRkkgPSAnZScKK307CisKK2V4dGVybiBlbnVtIHJlYm9vdF90eXBlIHJlYm9vdF90eXBlOworCitleHRlcm4gdm9pZCBtYWNoaW5lX2VtZXJnZW5jeV9yZXN0YXJ0KHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9YODZfRU1FUkdFTkNZX1JFU1RBUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2Vycm5vLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lcnJuby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvZXJybm8uaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vZXJybm8uaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwZjBiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljLmgKQEAgLTAsMCArMSwxOTMgQEAKKyNpZm5kZWYgX19BU01fRVM3MDAwX0FQSUNfSAorI2RlZmluZSBfX0FTTV9FUzcwMDBfQVBJQ19ICisKKyNkZWZpbmUgeGFwaWNfcGh5c190b19sb2dfYXBpY2lkKGNwdSkgcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpCisjZGVmaW5lIGVzcl9kaXNhYmxlICgxKQorCitzdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwkgICAgICAgIHJldHVybiAoMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHRhcmdldF9jcHVzKHZvaWQpCit7CisjaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCisJcmV0dXJuIENQVV9NQVNLX0FMTDsKKyNlbHNlCisJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQgQ09ORklHX0VTNzAwMF9DTFVTVEVSRURfQVBJQworI2RlZmluZSBBUElDX0RGUl9WQUxVRQkJKEFQSUNfREZSX0NMVVNURVIpCisjZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFCShkZXN0X0xvd2VzdFByaW8pCisjZGVmaW5lIElOVF9ERVNUX01PREUJCSgxKSAgICAvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgcHJvY3MgKi8KKyNkZWZpbmUgTk9fQkFMQU5DRV9JUlEJCSgxKQorI3VuZGVmICBXQUtFX1NFQ09OREFSWV9WSUFfSU5JVAorI2RlZmluZSBXQUtFX1NFQ09OREFSWV9WSUFfTUlQCisjZWxzZQorI2RlZmluZSBBUElDX0RGUl9WQUxVRQkJKEFQSUNfREZSX0ZMQVQpCisjZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFCShkZXN0X0ZpeGVkKQorI2RlZmluZSBJTlRfREVTVF9NT0RFCQkoMCkgICAgLyogcGh5cyBkZWxpdmVyeSB0byB0YXJnZXQgcHJvY3MgKi8KKyNkZWZpbmUgTk9fQkFMQU5DRV9JUlEJCSgwKQorI3VuZGVmICBBUElDX0RFU1RfTE9HSUNBTAorI2RlZmluZSBBUElDX0RFU1RfTE9HSUNBTAkweDAKKyNkZWZpbmUgV0FLRV9TRUNPTkRBUllfVklBX0lOSVQKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCisjZGVmaW5lIGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgKGFwaWNpZCAmIDB4RjApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfbGRyKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBpZDsKKwlpZCA9IHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpOworCXJldHVybiAoU0VUX0FQSUNfTE9HSUNBTF9JRChpZCkpOworfQorCisvKgorICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgorICoKKyAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTGRSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCisgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAorICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJYXBpY193cml0ZShBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOworCXZhbCA9IGNhbGN1bGF0ZV9sZHIoY3B1KTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOworfQorCisjaWZuZGVmIENPTkZJR19YODZfR0VORVJJQ0FSQ0gKK2V4dGVybiB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCk7CisjZW5kaWYKKworZXh0ZXJuIGludCBhcGljX3ZlcnNpb24gW01BWF9BUElDU107CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit7CisJaW50IGFwaWMgPSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJpbnRrKCJFbmFibGluZyBBUElDIG1vZGU6ICAlcy4gIFVzaW5nICVkIEkvTyBBUElDcywgdGFyZ2V0IGNwdXMgJWx4XG4iLAorCQkoYXBpY192ZXJzaW9uW2FwaWNdID09IDB4MTQpID8KKwkJIlBoeXNpY2FsIENsdXN0ZXIiIDogIkxvZ2ljYWwgQ2x1c3RlciIsIG5yX2lvYXBpY3MsIGNwdXNfYWRkcih0YXJnZXRfY3B1cygpKVswXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCWlmICghbXBzX2NwdSkKKwkJcmV0dXJuIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKKwllbHNlIGlmIChtcHNfY3B1IDwgTlJfQ1BVUykKKwkJcmV0dXJuIChpbnQpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGFwaWNpZF90b19jcHVfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCit7CisJc3RhdGljIGludCBpZCA9IDA7CisJcGh5c2lkX21hc2tfdCBtYXNrOworCW1hc2sgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoaWQpOworCSsraWQ7CisJcmV0dXJuIG1hc2s7Cit9CisKK2V4dGVybiB1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtdOworLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKyAgICAgICBpZiAoY3B1ID49IE5SX0NQVVMpCisJICAgICAgIHJldHVybiBCQURfQVBJQ0lEOworICAgICAgIHJldHVybiAoaW50KWNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07CisjZWxzZQorCXJldHVybiBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCit7CisJLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCisJcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweGZmKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCit7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgY3B1X3BoeXNpY2FsX2FwaWNpZCkKK3sKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCit7CisJaW50IG51bV9iaXRzX3NldDsKKwlpbnQgY3B1c19mb3VuZCA9IDA7CisJaW50IGNwdTsKKwlpbnQgYXBpY2lkOworCisJbnVtX2JpdHNfc2V0ID0gY3B1c193ZWlnaHQoY3B1bWFzayk7CisJLyogUmV0dXJuIGlkIHRvIGFsbCAqLworCWlmIChudW1fYml0c19zZXQgPT0gTlJfQ1BVUykKKyNpZiBkZWZpbmVkIENPTkZJR19FUzcwMDBfQ0xVU1RFUkVEX0FQSUMKKwkJcmV0dXJuIDB4RkY7CisjZWxzZQorCQlyZXR1cm4gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKDApOworI2VuZGlmCisJLyoKKwkgKiBUaGUgY3B1cyBpbiB0aGUgbWFzayBtdXN0IGFsbCBiZSBvbiB0aGUgYXBpYyBjbHVzdGVyLiAgSWYgYXJlIG5vdAorCSAqIG9uIHRoZSBzYW1lIGFwaWNpZCBjbHVzdGVyIHJldHVybiBkZWZhdWx0IHZhbHVlIG9mIFRBUkdFVF9DUFVTLgorCSAqLworCWNwdSA9IGZpcnN0X2NwdShjcHVtYXNrKTsKKwlhcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKKwl3aGlsZSAoY3B1c19mb3VuZCA8IG51bV9iaXRzX3NldCkgeworCQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1bWFzaykpIHsKKwkJCWludCBuZXdfYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CisJCQlpZiAoYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAhPQorCQkJCQlhcGljaWRfY2x1c3RlcihuZXdfYXBpY2lkKSl7CisJCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7CisjaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCisJCQkJcmV0dXJuIDB4RkY7CisjZWxzZQorCQkJCXJldHVybiBjcHVfdG9fbG9naWNhbF9hcGljaWQoMCk7CisjZW5kaWYKKwkJCX0KKwkJCWFwaWNpZCA9IG5ld19hcGljaWQ7CisJCQljcHVzX2ZvdW5kKys7CisJCX0KKwkJY3B1Kys7CisJfQorCXJldHVybiBhcGljaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworI2VuZGlmIC8qIF9fQVNNX0VTNzAwMF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2FwaWNkZWYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L2VzNzAwMC9hcGljZGVmLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljZGVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvaXBpLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9lczcwMDAvaXBpLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9pcGkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VzNzAwMC9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvbXBwYXJzZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvZXM3MDAwL21wcGFyc2UuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL21wcGFyc2UuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VzNzAwMC93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvd2FrZWNwdS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvZXM3MDAwL3dha2VjcHUuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL3dha2VjcHUuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwMTg0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9GQl9ICisjZGVmaW5lIF9BU01fWDg2X0ZCX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZmJfcGdwcm90ZWN0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQl1bnNpZ25lZCBsb25nIG9mZikKK3sKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQorCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitleHRlcm4gaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9GQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZmNudGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZjbnRsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9mY250bC5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9mY250bC5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NjhhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIF9BU01fWDg2X0ZJWE1BUF9ICisjZGVmaW5lIF9BU01fWDg2X0ZJWE1BUF9ICisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGluY2x1ZGUgImZpeG1hcF8zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAiZml4bWFwXzY0LmgiCisjZW5kaWYKKworZXh0ZXJuIGludCBmaXhtYXBzX3NldDsKKwordm9pZCBfX25hdGl2ZV9zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgcHRlX3QgcHRlKTsKK3ZvaWQgbmF0aXZlX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CisKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCQl1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKQoreworCW5hdGl2ZV9zZXRfZml4bWFwKGlkeCwgcGh5cywgZmxhZ3MpOworfQorI2VuZGlmCisKKyNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpCQkJCVwKKwlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKKworLyoKKyAqIFNvbWUgaGFyZHdhcmUgd2FudHMgdG8gZ2V0IGZpeG1hcHBlZCB3aXRob3V0IGNhY2hpbmcuCisgKi8KKyNkZWZpbmUgc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgcGh5cykJCQlcCisJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUxfTk9DQUNIRSkKKworI2RlZmluZSBjbGVhcl9maXhtYXAoaWR4KQkJCVwKKwlfX3NldF9maXhtYXAoaWR4LCAwLCBfX3BncHJvdCgwKSkKKworI2RlZmluZSBfX2ZpeF90b192aXJ0KHgpCShGSVhBRERSX1RPUCAtICgoeCkgPDwgUEFHRV9TSElGVCkpCisjZGVmaW5lIF9fdmlydF90b19maXgoeCkJKChGSVhBRERSX1RPUCAtICgoeCkmUEFHRV9NQVNLKSkgPj4gUEFHRV9TSElGVCkKKworZXh0ZXJuIHZvaWQgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCh2b2lkKTsKKworLyoKKyAqICdpbmRleCB0byBhZGRyZXNzJyB0cmFuc2xhdGlvbi4gSWYgYW55b25lIHRyaWVzIHRvIHVzZSB0aGUgaWR4CisgKiBkaXJlY3RseSB3aXRob3V0IHRyYW5zbGF0aW9uLCB3ZSBjYXRjaCB0aGUgYnVnIHdpdGggYSBOVUxMLWRlZmVyZW5jZQorICoga2VybmVsIG9vcHMuIElsbGVnYWwgcmFuZ2VzIG9mIGluY29taW5nIGluZGljZXMgYXJlIGNhdWdodCB0b28uCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBmaXhfdG9fdmlydChjb25zdCB1bnNpZ25lZCBpbnQgaWR4KQoreworCS8qCisJICogdGhpcyBicmFuY2ggZ2V0cyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQgYWZ0ZXIgaW5saW5pbmcsCisJICogZXhjZXB0IHdoZW4gc29tZW9uZSB0cmllcyB0byB1c2UgZml4YWRkciBpbmRpY2VzIGluIGFuCisJICogaWxsZWdhbCB3YXkuIChzdWNoIGFzIG1peGluZyB1cCBhZGRyZXNzIHR5cGVzIG9yIHVzaW5nCisJICogb3V0LW9mLXJhbmdlIGluZGljZXMpLgorCSAqCisJICogSWYgaXQgZG9lc24ndCBnZXQgcmVtb3ZlZCwgdGhlIGxpbmtlciB3aWxsIGNvbXBsYWluCisJICogbG91ZGx5IHdpdGggYSByZWFzb25hYmx5IGNsZWFyIGVycm9yIG1lc3NhZ2UuLgorCSAqLworCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKQorCQlfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KCk7CisKKwlyZXR1cm4gX19maXhfdG9fdmlydChpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19maXgoY29uc3QgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlCVUdfT04odmFkZHIgPj0gRklYQUREUl9UT1AgfHwgdmFkZHIgPCBGSVhBRERSX1NUQVJUKTsKKwlyZXR1cm4gX192aXJ0X3RvX2ZpeCh2YWRkcik7Cit9CisjZW5kaWYgLyogX0FTTV9YODZfRklYTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmMjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF8zMi5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogZml4bWFwLmg6IGNvbXBpbGUtdGltZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEluZ28gTW9sbmFyCisgKgorICogU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X0ZJWE1BUF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X0ZJWE1BUF8zMl9ICisKKworLyogdXNlZCBieSB2bWFsbG9jLmMsIHZzeXNjYWxsLmxkcy5TLgorICoKKyAqIExlYXZlIG9uZSBlbXB0eSBwYWdlIGJldHdlZW4gdm1hbGxvYydlZCBhcmVhcyBhbmQKKyAqIHRoZSBzdGFydCBvZiB0aGUgZml4bWFwLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX0ZJWEFERFJfVE9QOworI2RlZmluZSBGSVhBRERSX1VTRVJfU1RBUlQgICAgIF9fZml4X3RvX3ZpcnQoRklYX1ZEU08pCisjZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQgICAgICAgX19maXhfdG9fdmlydChGSVhfVkRTTyAtIDEpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNlbmRpZgorCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMKKyAqIGZyb20gdGhlIGVuZCBvZiB2aXJ0dWFsIG1lbW9yeSAoMHhmZmZmZjAwMCkgYmFja3dhcmRzLgorICogQWxzbyB0aGlzIGxldHMgdXMgZG8gZmFpbC1zYWZlIHZtYWxsb2MoKSwgd2UKKyAqIGNhbiBndWFyYW50ZWUgdGhhdCB0aGVzZSBzcGVjaWFsIGFkZHJlc3NlcyBhbmQKKyAqIHZtYWxsb2MoKS1lZCBhZGRyZXNzZXMgbmV2ZXIgb3ZlcmxhcC4KKyAqCisgKiB0aGVzZSAnY29tcGlsZS10aW1lIGFsbG9jYXRlZCcgbWVtb3J5IGJ1ZmZlcnMgYXJlCisgKiBmaXhlZC1zaXplIDRrIHBhZ2VzLiAob3IgbGFyZ2VyIGlmIHVzZWQgd2l0aCBhbiBpbmNyZW1lbnQKKyAqIGhpZ2hnZXIgdGhhbiAxKSB1c2UgZml4bWFwX3NldChpZHgscGh5cykgdG8gYXNzb2NpYXRlCisgKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KKyAqCisgKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKKyAqIHRhc2sgc3dpdGNoZXMuCisgKi8KK2VudW0gZml4ZWRfYWRkcmVzc2VzIHsKKwlGSVhfSE9MRSwKKwlGSVhfVkRTTywKKwlGSVhfREJHUF9CQVNFLAorCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJRklYX0lPX0FQSUNfQkFTRV8wLAorCUZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgTUFYX0lPX0FQSUNTLTEsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X1ZJU1dTX0FQSUMKKwlGSVhfQ09fQ1BVLAkvKiBDb2JhbHQgdGltZXIgKi8KKwlGSVhfQ09fQVBJQywJLyogQ29iYWx0IEFQSUMgUmVkaXJlY3Rpb24gVGFibGUgKi8KKwlGSVhfTElfUENJQSwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEEgKi8KKwlGSVhfTElfUENJQiwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEIgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfRjAwRl9CVUcKKwlGSVhfRjAwRl9JRFQsCS8qIFZpcnR1YWwgbWFwcGluZyBmb3IgSURUICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0NZQ0xPTkVfVElNRVIKKwlGSVhfQ1lDTE9ORV9USU1FUiwgLypjeWNsb25lIHRpbWVyIHJlZ2lzdGVyKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISUdITUVNCisJRklYX0tNQVBfQkVHSU4sCS8qIHJlc2VydmVkIHB0ZSdzIGZvciB0ZW1wb3Jhcnkga2VybmVsIG1hcHBpbmdzICovCisJRklYX0tNQVBfRU5EID0gRklYX0tNQVBfQkVHSU4rKEtNX1RZUEVfTlIqTlJfQ1BVUyktMSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0lfTU1DT05GSUcKKwlGSVhfUENJRV9NQ0ZHLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisJRklYX1BBUkFWSVJUX0JPT1RNQVAsCisjZW5kaWYKKwlfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAorCS8qCisJICogMjU2IHRlbXBvcmFyeSBib290LXRpbWUgbWFwcGluZ3MsIHVzZWQgYnkgZWFybHlfaW9yZW1hcCgpLAorCSAqIGJlZm9yZSBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4KKwkgKgorCSAqIFdlIHJvdW5kIGl0IHVwIHRvIHRoZSBuZXh0IDI1NiBwYWdlcyBib3VuZGFyeSBzbyB0aGF0IHdlCisJICogY2FuIGhhdmUgYSBzaW5nbGUgcGdkIGVudHJ5IGFuZCBhIHNpbmdsZSBwdGUgdGFibGU6CisJICovCisjZGVmaW5lIE5SX0ZJWF9CVE1BUFMJCTY0CisjZGVmaW5lIEZJWF9CVE1BUFNfU0xPVFMJNAorCUZJWF9CVE1BUF9FTkQgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgMjU2IC0KKwkJCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgMjU1KSwKKwlGSVhfQlRNQVBfQkVHSU4gPSBGSVhfQlRNQVBfRU5EICsgTlJfRklYX0JUTUFQUypGSVhfQlRNQVBTX1NMT1RTIC0gMSwKKwlGSVhfV1BfVEVTVCwKKyNpZmRlZiBDT05GSUdfQUNQSQorCUZJWF9BQ1BJX0JFR0lOLAorCUZJWF9BQ1BJX0VORCA9IEZJWF9BQ1BJX0JFR0lOICsgRklYX0FDUElfUEFHRVMgLSAxLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKKwlGSVhfT0hDSTEzOTRfQkFTRSwKKyNlbmRpZgorCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcworfTsKKworZXh0ZXJuIHZvaWQgcmVzZXJ2ZV90b3BfYWRkcmVzcyh1bnNpZ25lZCBsb25nIHJlc2VydmUpOworCisKKyNkZWZpbmUgRklYQUREUl9UT1AJKCh1bnNpZ25lZCBsb25nKV9fRklYQUREUl9UT1ApCisKKyNkZWZpbmUgX19GSVhBRERSX1NJWkUJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgX19GSVhBRERSX0JPT1RfU0laRQkoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIEZJWEFERFJfU1RBUlQJCShGSVhBRERSX1RPUCAtIF9fRklYQUREUl9TSVpFKQorI2RlZmluZSBGSVhBRERSX0JPT1RfU1RBUlQJKEZJWEFERFJfVE9QIC0gX19GSVhBRERSX0JPT1RfU0laRSkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX1g4Nl9GSVhNQVBfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXBfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGEzMGFiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBmaXhtYXAuaDogY29tcGlsZS10aW1lIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X0ZJWE1BUF82NF9ICisjZGVmaW5lIF9BU01fWDg2X0ZJWE1BUF82NF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KKyNpbmNsdWRlIDxhc20vZWZpLmg+CisKKy8qCisgKiBIZXJlIHdlIGRlZmluZSBhbGwgdGhlIGNvbXBpbGUtdGltZSAnc3BlY2lhbCcgdmlydHVhbAorICogYWRkcmVzc2VzLiBUaGUgcG9pbnQgaXMgdG8gaGF2ZSBhIGNvbnN0YW50IGFkZHJlc3MgYXQKKyAqIGNvbXBpbGUgdGltZSwgYnV0IHRvIHNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvbmx5CisgKiBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICoKKyAqIFRoZXNlICdjb21waWxlLXRpbWUgYWxsb2NhdGVkJyBtZW1vcnkgYnVmZmVycyBhcmUKKyAqIGZpeGVkLXNpemUgNGsgcGFnZXMgKG9yIGxhcmdlciBpZiB1c2VkIHdpdGggYW4gaW5jcmVtZW50CisgKiBoaWdoZXIgdGhhbiAxKS4gVXNlIHNldF9maXhtYXAoaWR4LHBoeXMpIHRvIGFzc29jaWF0ZQorICogcGh5c2ljYWwgbWVtb3J5IHdpdGggZml4bWFwIGluZGljZXMuCisgKgorICogVExCIGVudHJpZXMgb2Ygc3VjaCBidWZmZXJzIHdpbGwgbm90IGJlIGZsdXNoZWQgYWNyb3NzCisgKiB0YXNrIHN3aXRjaGVzLgorICovCisKK2VudW0gZml4ZWRfYWRkcmVzc2VzIHsKKwlWU1lTQ0FMTF9MQVNUX1BBR0UsCisJVlNZU0NBTExfRklSU1RfUEFHRSA9IFZTWVNDQUxMX0xBU1RfUEFHRQorCQkJICAgICsgKChWU1lTQ0FMTF9FTkQtVlNZU0NBTExfU1RBUlQpID4+IFBBR0VfU0hJRlQpIC0gMSwKKwlWU1lTQ0FMTF9IUEVULAorCUZJWF9EQkdQX0JBU0UsCisJRklYX0VBUkxZQ09OX01FTV9CQVNFLAorCUZJWF9BUElDX0JBU0UsCS8qIGxvY2FsIChDUFUpIEFQSUMpIC0tIHJlcXVpcmVkIGZvciBTTVAgb3Igbm90ICovCisJRklYX0lPX0FQSUNfQkFTRV8wLAorCUZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgTUFYX0lPX0FQSUNTIC0gMSwKKwlGSVhfRUZJX0lPX01BUF9MQVNUX1BBR0UsCisJRklYX0VGSV9JT19NQVBfRklSU1RfUEFHRSA9IEZJWF9FRklfSU9fTUFQX0xBU1RfUEFHRQorCQkJCSAgKyBNQVhfRUZJX0lPX1BBR0VTIC0gMSwKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKwlGSVhfUEFSQVZJUlRfQk9PVE1BUCwKKyNlbmRpZgorCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCisjaWZkZWYgQ09ORklHX0FDUEkKKwlGSVhfQUNQSV9CRUdJTiwKKwlGSVhfQUNQSV9FTkQgPSBGSVhfQUNQSV9CRUdJTiArIEZJWF9BQ1BJX1BBR0VTIC0gMSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUk9WSURFX09IQ0kxMzk0X0RNQV9JTklUCisJRklYX09IQ0kxMzk0X0JBU0UsCisjZW5kaWYKKwkvKgorCSAqIDI1NiB0ZW1wb3JhcnkgYm9vdC10aW1lIG1hcHBpbmdzLCB1c2VkIGJ5IGVhcmx5X2lvcmVtYXAoKSwKKwkgKiBiZWZvcmUgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwuCisJICoKKwkgKiBXZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28gdGhhdCB3ZQorCSAqIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgorCSAqLworI2RlZmluZSBOUl9GSVhfQlRNQVBTCQk2NAorI2RlZmluZSBGSVhfQlRNQVBTX1NMT1RTCTQKKwlGSVhfQlRNQVBfRU5EID0gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIDI1NiAtCisJCQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIDI1NSksCisJRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMqRklYX0JUTUFQU19TTE9UUyAtIDEsCisJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCit9OworCisjZGVmaW5lIEZJWEFERFJfVE9QCShWU1lTQ0FMTF9FTkQtUEFHRV9TSVpFKQorI2RlZmluZSBGSVhBRERSX1NJWkUJKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBGSVhBRERSX1NUQVJUCShGSVhBRERSX1RPUCAtIEZJWEFERFJfU0laRSkKKworLyogT25seSBjb3ZlcnMgMzJiaXQgdnN5c2NhbGxzIGN1cnJlbnRseS4gTmVlZCBhbm90aGVyIHNldCBmb3IgNjRiaXQuICovCisjZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVAkoKHVuc2lnbmVkIGxvbmcpVlNZU0NBTEwzMl9WU1lTQ0FMTCkKKyNkZWZpbmUgRklYQUREUl9VU0VSX0VORAkoRklYQUREUl9VU0VSX1NUQVJUICsgUEFHRV9TSVpFKQorCisjZW5kaWYgLyogX0FTTV9YODZfRklYTUFQXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Zsb3BweS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlODJhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Zsb3BweS5oCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1CisgKi8KKyNpZm5kZWYgX0FTTV9YODZfRkxPUFBZX0gKKyNkZWZpbmUgX0FTTV9YODZfRkxPUFBZX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworLyoKKyAqIFRoZSBETUEgY2hhbm5lbCB1c2VkIGJ5IHRoZSBmbG9wcHkgY29udHJvbGxlciBjYW5ub3QgYWNjZXNzIGRhdGEgYXQKKyAqIGFkZHJlc3NlcyA+PSAxNk1CCisgKgorICogV2VudCBiYWNrIHRvIHRoZSAxTUIgbGltaXQsIGFzIHNvbWUgcGVvcGxlIGhhZCBwcm9ibGVtcyB3aXRoIHRoZSBmbG9wcHkKKyAqIGRyaXZlciBvdGhlcndpc2UuIEl0IGRvZXNuJ3QgbWF0dGVyIG11Y2ggZm9yIHBlcmZvcm1hbmNlIGFueXdheSwgYXMgbW9zdAorICogZmxvcHB5IGFjY2Vzc2VzIGdvIHRocm91Z2ggdGhlIHRyYWNrIGJ1ZmZlci4KKyAqLworI2RlZmluZSBfQ1JPU1NfNjRLQihhLCBzLCB2ZG1hKQkJCQkJCVwKKwkoISh2ZG1hKSAmJgkJCQkJCQlcCisJICgodW5zaWduZWQgbG9uZykoYSkvS182NCAhPSAoKHVuc2lnbmVkIGxvbmcpKGEpICsgKHMpIC0gMSkgLyBLXzY0KSkKKworI2RlZmluZSBDUk9TU182NEtCKGEsIHMpIF9DUk9TU182NEtCKGEsIHMsIHVzZV92aXJ0dWFsX2RtYSAmIDEpCisKKworI2RlZmluZSBTVyBmZF9yb3V0aW5lW3VzZV92aXJ0dWFsX2RtYSAmIDFdCisjZGVmaW5lIENTVyBmZF9yb3V0aW5lW2Nhbl91c2VfdmlydHVhbF9kbWEgJiAxXQorCisKKyNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmJfcChwb3J0KQorI2RlZmluZSBmZF9vdXRiKHZhbHVlLCBwb3J0KQlvdXRiX3AodmFsdWUsIHBvcnQpCisKKyNkZWZpbmUgZmRfcmVxdWVzdF9kbWEoKQlDU1cuX3JlcXVlc3RfZG1hKEZMT1BQWV9ETUEsICJmbG9wcHkiKQorI2RlZmluZSBmZF9mcmVlX2RtYSgpCQlDU1cuX2ZyZWVfZG1hKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2VuYWJsZV9pcnEoKQkJZW5hYmxlX2lycShGTE9QUFlfSVJRKQorI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpCWRpc2FibGVfaXJxKEZMT1BQWV9JUlEpCisjZGVmaW5lIGZkX2ZyZWVfaXJxKCkJCWZyZWVfaXJxKEZMT1BQWV9JUlEsIE5VTEwpCisjZGVmaW5lIGZkX2dldF9kbWFfcmVzaWR1ZSgpCVNXLl9nZXRfZG1hX3Jlc2lkdWUoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZG1hX21lbV9hbGxvYyhzaXplKQlTVy5fZG1hX21lbV9hbGxvYyhzaXplKQorI2RlZmluZSBmZF9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pIFNXLl9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pCisKKyNkZWZpbmUgRkxPUFBZX0NBTl9GQUxMQkFDS19PTl9OT0RNQQorCitzdGF0aWMgaW50IHZpcnR1YWxfZG1hX2NvdW50Oworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9yZXNpZHVlOworc3RhdGljIGNoYXIgKnZpcnR1YWxfZG1hX2FkZHI7CitzdGF0aWMgaW50IHZpcnR1YWxfZG1hX21vZGU7CitzdGF0aWMgaW50IGRvaW5nX3BkbWE7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBmbG9wcHlfaGFyZGludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdW5zaWduZWQgY2hhciBzdDsKKworI3VuZGVmIFRSQUNFX0ZMUFlfSU5UCisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCXN0YXRpYyBpbnQgY2FsbHM7CisJc3RhdGljIGludCBieXRlczsKKwlzdGF0aWMgaW50IGRtYV93YWl0OworI2VuZGlmCisJaWYgKCFkb2luZ19wZG1hKQorCQlyZXR1cm4gZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCk7CisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWlmICghY2FsbHMpCisJCWJ5dGVzID0gdmlydHVhbF9kbWFfY291bnQ7CisjZW5kaWYKKworCXsKKwkJaW50IGxjb3VudDsKKwkJY2hhciAqbHB0cjsKKworCQlzdCA9IDE7CisJCWZvciAobGNvdW50ID0gdmlydHVhbF9kbWFfY291bnQsIGxwdHIgPSB2aXJ0dWFsX2RtYV9hZGRyOworCQkgICAgIGxjb3VudDsgbGNvdW50LS0sIGxwdHIrKykgeworCQkJc3QgPSBpbmIodmlydHVhbF9kbWFfcG9ydCArIDQpICYgMHhhMDsKKwkJCWlmIChzdCAhPSAweGEwKQorCQkJCWJyZWFrOworCQkJaWYgKHZpcnR1YWxfZG1hX21vZGUpCisJCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0ICsgNSk7CisJCQllbHNlCisJCQkJKmxwdHIgPSBpbmJfcCh2aXJ0dWFsX2RtYV9wb3J0ICsgNSk7CisJCX0KKwkJdmlydHVhbF9kbWFfY291bnQgPSBsY291bnQ7CisJCXZpcnR1YWxfZG1hX2FkZHIgPSBscHRyOworCQlzdCA9IGluYih2aXJ0dWFsX2RtYV9wb3J0ICsgNCk7CisJfQorCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwljYWxscysrOworI2VuZGlmCisJaWYgKHN0ID09IDB4MjApCisJCXJldHVybiBJUlFfSEFORExFRDsKKwlpZiAoIShzdCAmIDB4MjApKSB7CisJCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7CisJCXZpcnR1YWxfZG1hX2NvdW50ID0gMDsKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCQlwcmludGsoImNvdW50PSV4LCByZXNpZHVlPSV4IGNhbGxzPSVkIGJ5dGVzPSVkIGRtYV93YWl0PSVkXG4iLAorCQkgICAgICAgdmlydHVhbF9kbWFfY291bnQsIHZpcnR1YWxfZG1hX3Jlc2lkdWUsIGNhbGxzLCBieXRlcywKKwkJICAgICAgIGRtYV93YWl0KTsKKwkJY2FsbHMgPSAwOworCQlkbWFfd2FpdCA9IDA7CisjZW5kaWYKKwkJZG9pbmdfcGRtYSA9IDA7CisJCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJaWYgKCF2aXJ0dWFsX2RtYV9jb3VudCkKKwkJZG1hX3dhaXQrKzsKKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgZmRfZGlzYWJsZV9kbWEodm9pZCkKK3sKKwlpZiAoIShjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMSkpCisJCWRpc2FibGVfZG1hKEZMT1BQWV9ETUEpOworCWRvaW5nX3BkbWEgPSAwOworCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7CisJdmlydHVhbF9kbWFfY291bnQgPSAwOworfQorCitzdGF0aWMgaW50IHZkbWFfcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZkbWFfbm9wKHVuc2lnbmVkIGludCBkdW1teSkKK3sKK30KKworCitzdGF0aWMgaW50IHZkbWFfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkdW1teSkKK3sKKwlyZXR1cm4gdmlydHVhbF9kbWFfY291bnQgKyB2aXJ0dWFsX2RtYV9yZXNpZHVlOworfQorCisKK3N0YXRpYyBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKK3sKKwlpZiAoY2FuX3VzZV92aXJ0dWFsX2RtYSkKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LAorCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAorCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX05PUkVUUlksIGdldF9vcmRlcihzaXplKSk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdmRtYV9tZW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZyl2bWFsbG9jKHNpemUpOworCit9CisKKyNkZWZpbmUgbm9kbWFfbWVtX2FsbG9jKHNpemUpIHZkbWFfbWVtX2FsbG9jKHNpemUpCisKK3N0YXRpYyB2b2lkIF9mZF9kbWFfbWVtX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpCisJCXZmcmVlKCh2b2lkICopYWRkcik7CisJZWxzZQorCQlmcmVlX3BhZ2VzKGFkZHIsIGdldF9vcmRlcihzaXplKSk7Cit9CisKKyNkZWZpbmUgZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpICBfZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpCisKK3N0YXRpYyB2b2lkIF9mZF9jaG9zZV9kbWFfbW9kZShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKGNhbl91c2VfdmlydHVhbF9kbWEgPT0gMikgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSB8fAorCQkgICAgaXNhX3ZpcnRfdG9fYnVzKGFkZHIpID49IDB4MTAwMDAwMCB8fAorCQkgICAgX0NST1NTXzY0S0IoYWRkciwgc2l6ZSwgMCkpCisJCQl1c2VfdmlydHVhbF9kbWEgPSAxOworCQllbHNlCisJCQl1c2VfdmlydHVhbF9kbWEgPSAwOworCX0gZWxzZSB7CisJCXVzZV92aXJ0dWFsX2RtYSA9IGNhbl91c2VfdmlydHVhbF9kbWEgJiAxOworCX0KK30KKworI2RlZmluZSBmZF9jaG9zZV9kbWFfbW9kZShhZGRyLCBzaXplKSBfZmRfY2hvc2VfZG1hX21vZGUoYWRkciwgc2l6ZSkKKworCitzdGF0aWMgaW50IHZkbWFfZG1hX3NldHVwKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbykKK3sKKwlkb2luZ19wZG1hID0gMTsKKwl2aXJ0dWFsX2RtYV9wb3J0ID0gaW87CisJdmlydHVhbF9kbWFfbW9kZSA9IChtb2RlID09IERNQV9NT0RFX1dSSVRFKTsKKwl2aXJ0dWFsX2RtYV9hZGRyID0gYWRkcjsKKwl2aXJ0dWFsX2RtYV9jb3VudCA9IHNpemU7CisJdmlydHVhbF9kbWFfcmVzaWR1ZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFyZF9kbWFfc2V0dXAoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKQoreworI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKKwlpZiAoQ1JPU1NfNjRLQihhZGRyLCBzaXplKSkgeworCQlwcmludGsoIkRNQSBjcm9zc2luZyA2NC1LIGJvdW5kYXJ5ICVwLSVwXG4iLCBhZGRyLCBhZGRyK3NpemUpOworCQlyZXR1cm4gLTE7CisJfQorI2VuZGlmCisJLyogYWN0dWFsLCBwaHlzaWNhbCBETUEgKi8KKwlkb2luZ19wZG1hID0gMDsKKwljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7CisJc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsIG1vZGUpOworCXNldF9kbWFfYWRkcihGTE9QUFlfRE1BLCBpc2FfdmlydF90b19idXMoYWRkcikpOworCXNldF9kbWFfY291bnQoRkxPUFBZX0RNQSwgc2l6ZSk7CisJZW5hYmxlX2RtYShGTE9QUFlfRE1BKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmZF9yb3V0aW5lX2wgeworCWludCAoKl9yZXF1ZXN0X2RtYSkodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpOworCXZvaWQgKCpfZnJlZV9kbWEpKHVuc2lnbmVkIGludCBkbWFucik7CisJaW50ICgqX2dldF9kbWFfcmVzaWR1ZSkodW5zaWduZWQgaW50IGR1bW15KTsKKwl1bnNpZ25lZCBsb25nICgqX2RtYV9tZW1fYWxsb2MpKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisJaW50ICgqX2RtYV9zZXR1cCkoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKTsKK30gZmRfcm91dGluZVtdID0geworCXsKKwkJcmVxdWVzdF9kbWEsCisJCWZyZWVfZG1hLAorCQlnZXRfZG1hX3Jlc2lkdWUsCisJCWRtYV9tZW1fYWxsb2MsCisJCWhhcmRfZG1hX3NldHVwCisJfSwKKwl7CisJCXZkbWFfcmVxdWVzdF9kbWEsCisJCXZkbWFfbm9wLAorCQl2ZG1hX2dldF9kbWFfcmVzaWR1ZSwKKwkJdmRtYV9tZW1fYWxsb2MsCisJCXZkbWFfZG1hX3NldHVwCisJfQorfTsKKworCitzdGF0aWMgaW50IEZEQzEgPSAweDNmMDsKK3N0YXRpYyBpbnQgRkRDMiA9IC0xOworCisvKgorICogRmxvcHB5IHR5cGVzIGFyZSBzdG9yZWQgaW4gdGhlIHJ0YydzIENNT1MgUkFNIGFuZCBzbyBydGNfbG9jaworICogaXMgbmVlZGVkIHRvIHByZXZlbnQgY29ycnVwdGVkIENNT1MgUkFNIGluIGNhc2UgImluc21vZCBmbG9wcHkiCisgKiBjb2luY2lkZXMgd2l0aCBhbm90aGVyIHJ0YyBDTU9TIHVzZXIuCQlQYXVsIEcuCisgKi8KKyNkZWZpbmUgRkxPUFBZMF9UWVBFCQkJCQlcCisoewkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJXAorCXVuc2lnbmVkIGNoYXIgdmFsOwkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CQlcCisJdmFsID0gKENNT1NfUkVBRCgweDEwKSA+PiA0KSAmIDE1OwkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CVwKKwl2YWw7CQkJCQkJXAorfSkKKworI2RlZmluZSBGTE9QUFkxX1RZUEUJCQkJCVwKKyh7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQlcCisJdW5zaWduZWQgY2hhciB2YWw7CQkJCVwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsJCVwKKwl2YWwgPSBDTU9TX1JFQUQoMHgxMCkgJiAxNTsJCQlcCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsJXAorCXZhbDsJCQkJCQlcCit9KQorCisjZGVmaW5lIE5fRkRDIDIKKyNkZWZpbmUgTl9EUklWRSA4CisKKyNkZWZpbmUgRVhUUkFfRkxPUFBZX1BBUkFNUworCisjZW5kaWYgLyogX0FTTV9YODZfRkxPUFBZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9mcmFtZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnJhbWUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L2ZyYW1lLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2ZyYW1lLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmN2U2NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX0FTTV9YODZfRlRSQUNFX0gKKyNkZWZpbmUgX0FTTV9YODZfRlRSQUNFX0gKKworI2lmZGVmIENPTkZJR19GVFJBQ0UKKyNkZWZpbmUgTUNPVU5UX0FERFIJCSgobG9uZykobWNvdW50KSkKKyNkZWZpbmUgTUNPVU5UX0lOU05fU0laRQk1IC8qIHNpemVvZiBtY291bnQgY2FsbCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWNvdW50KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfYWRqdXN0KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkvKgorCSAqIGNhbGwgbWNvdW50IGlzICJlOCA8NCBieXRlIG9mZnNldD4iCisJICogVGhlIGFkZHIgcG9pbnRzIHRvIHRoZSA0IGJ5dGUgb2Zmc2V0IGFuZCB0aGUgY2FsbGVyIG9mIHRoaXMKKwkgKiBmdW5jdGlvbiB3YW50cyB0aGUgcG9pbnRlciB0byBlOC4gU2ltcGx5IHN1YnRyYWN0IG9uZS4KKwkgKi8KKwlyZXR1cm4gYWRkciAtIDE7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19GVFJBQ0UgKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdXRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjExY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnV0ZXguaApAQCAtMCwwICsxLDE0MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9GVVRFWF9ICisjZGVmaW5lIF9BU01fWDg2X0ZVVEVYX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AxKGluc24sIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpCVwKKwlhc20gdm9sYXRpbGUoIjE6XHQiIGluc24gIlxuIgkJCQlcCisJCSAgICAgIjI6XHQuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCisJCSAgICAgIjM6XHRtb3ZcdCUzLCAlMVxuIgkJCVwKKwkJICAgICAiXHRqbXBcdDJiXG4iCQkJCVwKKwkJICAgICAiXHQucHJldmlvdXNcbiIJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCQkJXAorCQkgICAgIDogIj1yIiAob2xkdmFsKSwgIj1yIiAocmV0KSwgIittIiAoKnVhZGRyKQlcCisJCSAgICAgOiAiaSIgKC1FRkFVTFQpLCAiMCIgKG9wYXJnKSwgIjEiICgwKSkKKworI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcDIoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykJXAorCWFzbSB2b2xhdGlsZSgiMTpcdG1vdmwJJTIsICUwXG4iCQkJXAorCQkgICAgICJcdG1vdmxcdCUwLCAlM1xuIgkJCQlcCisJCSAgICAgIlx0IiBpbnNuICJcbiIJCQkJXAorCQkgICAgICIyOlx0IiBMT0NLX1BSRUZJWCAiY21weGNoZ2wgJTMsICUyXG4iCVwKKwkJICAgICAiXHRqbnpcdDFiXG4iCQkJCVwKKwkJICAgICAiMzpcdC5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCVwKKwkJICAgICAiNDpcdG1vdlx0JTUsICUxXG4iCQkJXAorCQkgICAgICJcdGptcFx0M2JcbiIJCQkJXAorCQkgICAgICJcdC5wcmV2aW91c1xuIgkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCA0YikJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDJiLCA0YikJCQlcCisJCSAgICAgOiAiPSZhIiAob2xkdmFsKSwgIj0mciIgKHJldCksCQlcCisJCSAgICAgICAiK20iICgqdWFkZHIpLCAiPSZyIiAodGVtKQkJXAorCQkgICAgIDogInIiIChvcGFyZyksICJpIiAoLUVGQVVMVCksICIxIiAoMCkpCisKK3N0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2F0b21pY19vcF9pbnVzZXIoaW50IGVuY29kZWRfb3AsIGludCBfX3VzZXIgKnVhZGRyKQoreworCWludCBvcCA9IChlbmNvZGVkX29wID4+IDI4KSAmIDc7CisJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OworCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOworCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7CisJaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCisJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQorCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2X0JTV0FQKQorCS8qIFJlYWwgaTM4NiBtYWNoaW5lcyBjYW4gb25seSBzdXBwb3J0IEZVVEVYX09QX1NFVCAqLworCWlmIChvcCAhPSBGVVRFWF9PUF9TRVQgJiYgYm9vdF9jcHVfZGF0YS54ODYgPT0gMykKKwkJcmV0dXJuIC1FTk9TWVM7CisjZW5kaWYKKworCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBGVVRFWF9PUF9TRVQ6CisJCV9fZnV0ZXhfYXRvbWljX29wMSgieGNoZ2wgJTAsICUyIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQUREOgorCQlfX2Z1dGV4X2F0b21pY19vcDEoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMiIsIHJldCwgb2xkdmFsLAorCQkJCSAgIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfT1I6CisJCV9fZnV0ZXhfYXRvbWljX29wMigib3JsICU0LCAlMyIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FORE46CisJCV9fZnV0ZXhfYXRvbWljX29wMigiYW5kbCAlNCwgJTMiLCByZXQsIG9sZHZhbCwgdWFkZHIsIH5vcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfWE9SOgorCQlfX2Z1dGV4X2F0b21pY19vcDIoInhvcmwgJTQsICUzIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJfQorCisJcGFnZWZhdWx0X2VuYWJsZSgpOworCisJaWYgKCFyZXQpIHsKKwkJc3dpdGNoIChjbXApIHsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6CisJCQlyZXQgPSAob2xkdmFsID09IGNtcGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTkU6CisJCQlyZXQgPSAob2xkdmFsICE9IGNtcGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTFQ6CisJCQlyZXQgPSAob2xkdmFsIDwgY21wYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HRToKKwkJCXJldCA9IChvbGR2YWwgPj0gY21wYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MRToKKwkJCXJldCA9IChvbGR2YWwgPD0gY21wYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HVDoKKwkJCXJldCA9IChvbGR2YWwgPiBjbXBhcmcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PU1lTOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLAorCQkJCQkJaW50IG5ld3ZhbCkKK3sKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9CU1dBUCkKKwkvKiBSZWFsIGkzODYgbWFjaGluZXMgaGF2ZSBubyBjbXB4Y2hnIGluc3RydWN0aW9uICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDMpCisJCXJldHVybiAtRU5PU1lTOworI2VuZGlmCisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJYXNtIHZvbGF0aWxlKCIxOlx0IiBMT0NLX1BSRUZJWCAiY21weGNoZ2wgJTMsICUxXG4iCisJCSAgICAgIjI6XHQuc2VjdGlvbiAuZml4dXAsIFwiYXhcIlxuIgorCQkgICAgICIzOlx0bW92ICAgICAlMiwgJTBcbiIKKwkJICAgICAiXHRqbXAgICAgIDJiXG4iCisJCSAgICAgIlx0LnByZXZpb3VzXG4iCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikKKwkJICAgICA6ICI9YSIgKG9sZHZhbCksICIrbSIgKCp1YWRkcikKKwkJICAgICA6ICJpIiAoLUVGQVVMVCksICJyIiAobmV3dmFsKSwgIjAiIChvbGR2YWwpCisJCSAgICAgOiAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gb2xkdmFsOworfQorCisjZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1g4Nl9GVVRFWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nYXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nYXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyNTIyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dhcnQuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9BU01fWDg2X0dBUlRfSAorI2RlZmluZSBfQVNNX1g4Nl9HQVJUX0gKKworI2luY2x1ZGUgPGFzbS9lODIwLmg+CisKK2V4dGVybiB2b2lkIHNldF91cF9nYXJ0X3Jlc3VtZSh1MzIsIHUzMik7CisKK2V4dGVybiBpbnQgZmFsbGJhY2tfYXBlcl9vcmRlcjsKK2V4dGVybiBpbnQgZmFsbGJhY2tfYXBlcl9mb3JjZTsKK2V4dGVybiBpbnQgZml4X2FwZXJ0dXJlOworCisvKiBQVEUgYml0cy4gKi8KKyNkZWZpbmUgR1BURV9WQUxJRAkxCisjZGVmaW5lIEdQVEVfQ09IRVJFTlQJMgorCisvKiBBcGVydHVyZSBjb250cm9sIHJlZ2lzdGVyIGJpdHMuICovCisjZGVmaW5lIEdBUlRFTgkJKDE8PDApCisjZGVmaW5lIERJU0dBUlRDUFUJKDE8PDQpCisjZGVmaW5lIERJU0dBUlRJTwkoMTw8NSkKKworLyogR0FSVCBjYWNoZSBjb250cm9sIHJlZ2lzdGVyIGJpdHMuICovCisjZGVmaW5lIElOVkdBUlQJCSgxPDwwKQorI2RlZmluZSBHQVJUUFRFRVJSCSgxPDwxKQorCisvKiBLOCBPbi1jcHUgR0FSVCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQU1ENjRfR0FSVEFQRVJUVVJFQ1RMCTB4OTAKKyNkZWZpbmUgQU1ENjRfR0FSVEFQRVJUVVJFQkFTRQkweDk0CisjZGVmaW5lIEFNRDY0X0dBUlRUQUJMRUJBU0UJMHg5OAorI2RlZmluZSBBTUQ2NF9HQVJUQ0FDSEVDVEwJMHg5YworI2RlZmluZSBBTUQ2NF9HQVJURU4JCSgxPDwwKQorCitleHRlcm4gaW50IGFncF9hbWQ2NF9pbml0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2dhcnRfdHJhbnNsYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IGFkZHIpCit7CisJdTMyIHRtcCwgY3RsOworCisgICAgICAgIC8qIGFkZHJlc3Mgb2YgdGhlIG1hcHBpbmdzIHRhYmxlICovCisgICAgICAgIGFkZHIgPj49IDEyOworICAgICAgICB0bXAgPSAodTMyKSBhZGRyPDw0OworICAgICAgICB0bXAgJj0gfjB4ZjsKKyAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRUQUJMRUJBU0UsIHRtcCk7CisKKyAgICAgICAgLyogRW5hYmxlIEdBUlQgdHJhbnNsYXRpb24gZm9yIHRoaXMgaGFtbWVyLiAqLworICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsICZjdGwpOworICAgICAgICBjdGwgfD0gR0FSVEVOOworICAgICAgICBjdGwgJj0gfihESVNHQVJUQ1BVIHwgRElTR0FSVElPKTsKKyAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRBUEVSVFVSRUNUTCwgY3RsKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBlcnR1cmVfdmFsaWQodTY0IGFwZXJfYmFzZSwgdTMyIGFwZXJfc2l6ZSwgdTMyIG1pbl9zaXplKQoreworCWlmICghYXBlcl9iYXNlKQorCQlyZXR1cm4gMDsKKworCWlmIChhcGVyX2Jhc2UgKyBhcGVyX3NpemUgPiAweDEwMDAwMDAwMFVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJBcGVydHVyZSBiZXlvbmQgNEdCLiBJZ25vcmluZy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGU4MjBfYW55X21hcHBlZChhcGVyX2Jhc2UsIGFwZXJfYmFzZSArIGFwZXJfc2l6ZSwgRTgyMF9SQU0pKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkFwZXJ0dXJlIHBvaW50aW5nIHRvIGU4MjAgUkFNLiBJZ25vcmluZy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGFwZXJfc2l6ZSA8IG1pbl9zaXplKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkFwZXJ0dXJlIHRvbyBzbWFsbCAoJWQgTUIpIHRoYW4gKCVkIE1CKVxuIiwKKwkJCQkgYXBlcl9zaXplPj4yMCwgbWluX3NpemU+PjIwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9HQVJUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9nZW5hcGljLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2dlbmFwaWMuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmQ0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljXzMyLmgKQEAgLTAsMCArMSwxMjYgQEAKKyNpZm5kZWYgX0FTTV9YODZfR0VOQVBJQ18zMl9ICisjZGVmaW5lIF9BU01fWDg2X0dFTkFQSUNfMzJfSAorCisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorCisvKgorICogR2VuZXJpYyBBUElDIGRyaXZlciBpbnRlcmZhY2UuCisgKgorICogQW4gc3RyYWlnaHQgZm9yd2FyZCBtYXBwaW5nIG9mIHRoZSBBUElDIHJlbGF0ZWQgcGFydHMgb2YgdGhlCisgKiB4ODYgc3ViYXJjaGl0ZWN0dXJlIGludGVyZmFjZSB0byBhIGR5bmFtaWMgb2JqZWN0LgorICoKKyAqIFRoaXMgaXMgdXNlZCBieSB0aGUgImdlbmVyaWMiIHg4NiBzdWJhcmNoaXRlY3R1cmUuCisgKgorICogQ29weXJpZ2h0IDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICovCisKK3N0cnVjdCBtcGNfY29uZmlnX2J1czsKK3N0cnVjdCBtcF9jb25maWdfdGFibGU7CitzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3I7CisKK3N0cnVjdCBnZW5hcGljIHsKKwljaGFyICpuYW1lOworCWludCAoKnByb2JlKSh2b2lkKTsKKworCWludCAoKmFwaWNfaWRfcmVnaXN0ZXJlZCkodm9pZCk7CisJY3B1bWFza190ICgqdGFyZ2V0X2NwdXMpKHZvaWQpOworCWludCBpbnRfZGVsaXZlcnlfbW9kZTsKKwlpbnQgaW50X2Rlc3RfbW9kZTsKKwlpbnQgRVNSX0RJU0FCTEU7CisJaW50IGFwaWNfZGVzdGluYXRpb25fbG9naWNhbDsKKwl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3VzZWQpKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKTsKKwl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3ByZXNlbnQpKGludCBhcGljaWQpOworCWludCBub19iYWxhbmNlX2lycTsKKwlpbnQgbm9faW9hcGljX2NoZWNrOworCXZvaWQgKCppbml0X2FwaWNfbGRyKSh2b2lkKTsKKwlwaHlzaWRfbWFza190ICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190IG1hcCk7CisKKwl2b2lkICgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKKwlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOworCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOworCWludCAoKmNwdV90b19sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7CisJaW50ICgqY3B1X3ByZXNlbnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7CisJcGh5c2lkX21hc2tfdCAoKmFwaWNpZF90b19jcHVfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKKwl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKKwlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKwl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7CisJdTMyICgqcGh5c19wa2dfaWQpKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKKworCS8qIG1wcGFyc2UgKi8KKwkvKiBXaGVuIG9uZSBvZiB0aGUgbmV4dCB0d28gaG9va3MgcmV0dXJucyAxIHRoZSBnZW5hcGljCisJICAgaXMgc3dpdGNoZWQgdG8gdGhpcy4gRXNzZW50aWFsbHkgdGhleSBhcmUgYWRkaXRpb25hbCBwcm9iZQorCSAgIGZ1bmN0aW9ucy4gKi8KKwlpbnQgKCptcHNfb2VtX2NoZWNrKShzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKwkJCSAgICAgY2hhciAqcHJvZHVjdGlkKTsKKwlpbnQgKCphY3BpX21hZHRfb2VtX2NoZWNrKShjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCk7CisKKwl1bnNpZ25lZCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOworCXVuc2lnbmVkIGxvbmcgYXBpY19pZF9tYXNrOworCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY3B1bWFza190IGNwdW1hc2spOworCWNwdW1hc2tfdCAoKnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJLyogaXBpICovCisJdm9pZCAoKnNlbmRfSVBJX21hc2spKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKTsKKwl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7CisjZW5kaWYKK307CisKKyNkZWZpbmUgQVBJQ0ZVTkMoeCkgLnggPSB4LAorCisvKiBNb3JlIGZ1bmN0aW9ucyBjb3VsZCBiZSBwcm9iYWJseSBtYXJrZWQgSVBJRlVOQyBhbmQgc2F2ZSBzb21lIHNwYWNlCisgICBpbiBVUCBHRU5FUklDQVJDSCBrZXJuZWxzLCBidXQgSSBkb24ndCBoYXZlIHRoZSBuZXJ2ZSByaWdodCBub3cKKyAgIHRvIHVudGFuZ2xlIHRoaXMgbWVzcy4gLUFLICAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgSVBJRlVOQyh4KSBBUElDRlVOQyh4KQorI2Vsc2UKKyNkZWZpbmUgSVBJRlVOQyh4KQorI2VuZGlmCisKKyNkZWZpbmUgQVBJQ19JTklUKGFuYW1lLCBhcHJvYmUpCQkJXAorewkJCQkJCQlcCisJLm5hbWUgPSBhbmFtZSwJCQkJCVwKKwkucHJvYmUgPSBhcHJvYmUsCQkJCVwKKwkuaW50X2RlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERSwJCVwKKwkuaW50X2Rlc3RfbW9kZSA9IElOVF9ERVNUX01PREUsCQkJXAorCS5ub19iYWxhbmNlX2lycSA9IE5PX0JBTEFOQ0VfSVJRLAkJXAorCS5FU1JfRElTQUJMRSA9IGVzcl9kaXNhYmxlLAkJCVwKKwkuYXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsID0gQVBJQ19ERVNUX0xPR0lDQUwsCVwKKwlBUElDRlVOQyhhcGljX2lkX3JlZ2lzdGVyZWQpCQkJXAorCUFQSUNGVU5DKHRhcmdldF9jcHVzKQkJCQlcCisJQVBJQ0ZVTkMoY2hlY2tfYXBpY2lkX3VzZWQpCQkJXAorCUFQSUNGVU5DKGNoZWNrX2FwaWNpZF9wcmVzZW50KQkJCVwKKwlBUElDRlVOQyhpbml0X2FwaWNfbGRyKQkJCQlcCisJQVBJQ0ZVTkMoaW9hcGljX3BoeXNfaWRfbWFwKQkJCVwKKwlBUElDRlVOQyhzZXR1cF9hcGljX3JvdXRpbmcpCQkJXAorCUFQSUNGVU5DKG11bHRpX3RpbWVyX2NoZWNrKQkJCVwKKwlBUElDRlVOQyhhcGljaWRfdG9fbm9kZSkJCQlcCisJQVBJQ0ZVTkMoY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKQkJCVwKKwlBUElDRlVOQyhjcHVfcHJlc2VudF90b19hcGljaWQpCQkJXAorCUFQSUNGVU5DKGFwaWNpZF90b19jcHVfcHJlc2VudCkJCQlcCisJQVBJQ0ZVTkMoc2V0dXBfcG9ydGlvX3JlbWFwKQkJCVwKKwlBUElDRlVOQyhjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KQkJXAorCUFQSUNGVU5DKG1wc19vZW1fY2hlY2spCQkJCVwKKwlBUElDRlVOQyhnZXRfYXBpY19pZCkJCQkJXAorCS5hcGljX2lkX21hc2sgPSBBUElDX0lEX01BU0ssCQkJXAorCUFQSUNGVU5DKGNwdV9tYXNrX3RvX2FwaWNpZCkJCQlcCisJQVBJQ0ZVTkModmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQkJCVwKKwlBUElDRlVOQyhhY3BpX21hZHRfb2VtX2NoZWNrKQkJCVwKKwlJUElGVU5DKHNlbmRfSVBJX21hc2spCQkJCVwKKwlJUElGVU5DKHNlbmRfSVBJX2FsbGJ1dHNlbGYpCQkJXAorCUlQSUZVTkMoc2VuZF9JUElfYWxsKQkJCQlcCisJQVBJQ0ZVTkMoZW5hYmxlX2FwaWNfbW9kZSkJCQlcCisJQVBJQ0ZVTkMocGh5c19wa2dfaWQpCQkJCVwKK30KKworZXh0ZXJuIHN0cnVjdCBnZW5hcGljICpnZW5hcGljOworCitlbnVtIHV2X3N5c3RlbV90eXBlIHtVVl9OT05FLCBVVl9MRUdBQ1lfQVBJQywgVVZfWDJBUElDLCBVVl9OT05fVU5JUVVFX0FQSUN9OworI2RlZmluZSBnZXRfdXZfc3lzdGVtX3R5cGUoKQkJVVZfTk9ORQorI2RlZmluZSBpc191dl9zeXN0ZW0oKQkJCTAKKyNkZWZpbmUgdXZfd2FrZXVwX3NlY29uZGFyeShhLCBiKQkxCisjZGVmaW5lIHV2X3N5c3RlbV9pbml0KCkJCWRvIHt9IHdoaWxlICgwKQorCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9HRU5BUElDXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlbmFwaWNfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlbmFwaWNfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2M0ZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY182NC5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX0FTTV9YODZfR0VOQVBJQ182NF9ICisjZGVmaW5lIF9BU01fWDg2X0dFTkFQSUNfNjRfSAorCisvKgorICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgorICoKKyAqIEdlbmVyaWMgQVBJQyBzdWItYXJjaCBkYXRhIHN0cnVjdC4KKyAqCisgKiBIYWNrZWQgZm9yIHg4Ni02NCBieSBKYW1lcyBDbGV2ZXJkb24gZnJvbSBpMzg2IGFyY2hpdGVjdHVyZSBjb2RlIGJ5CisgKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAorICogSmFtZXMgQ2xldmVyZG9uLgorICovCisKK3N0cnVjdCBnZW5hcGljIHsKKwljaGFyICpuYW1lOworCWludCAoKmFjcGlfbWFkdF9vZW1fY2hlY2spKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKTsKKwl1MzIgaW50X2RlbGl2ZXJ5X21vZGU7CisJdTMyIGludF9kZXN0X21vZGU7CisJaW50ICgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKKwljcHVtYXNrX3QgKCp0YXJnZXRfY3B1cykodm9pZCk7CisJY3B1bWFza190ICgqdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKShpbnQgY3B1KTsKKwl2b2lkICgqaW5pdF9hcGljX2xkcikodm9pZCk7CisJLyogaXBpICovCisJdm9pZCAoKnNlbmRfSVBJX21hc2spKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKTsKKwl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX3NlbGYpKGludCB2ZWN0b3IpOworCS8qICovCisJdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkKShjcHVtYXNrX3QgY3B1bWFzayk7CisJdW5zaWduZWQgaW50ICgqcGh5c19wa2dfaWQpKGludCBpbmRleF9tc2IpOworCXVuc2lnbmVkIGludCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOworCXVuc2lnbmVkIGxvbmcgKCpzZXRfYXBpY19pZCkodW5zaWduZWQgaW50IGlkKTsKKwl1bnNpZ25lZCBsb25nIGFwaWNfaWRfbWFzazsKK307CisKK2V4dGVybiBzdHJ1Y3QgZ2VuYXBpYyAqZ2VuYXBpYzsKKworZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfZmxhdDsKK2V4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3BoeXNmbGF0OworZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX2NsdXN0ZXI7CitleHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfcGh5czsKK2V4dGVybiBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICosIGNoYXIgKik7CisKK2V4dGVybiB2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKK2VudW0gdXZfc3lzdGVtX3R5cGUge1VWX05PTkUsIFVWX0xFR0FDWV9BUElDLCBVVl9YMkFQSUMsIFVWX05PTl9VTklRVUVfQVBJQ307CitleHRlcm4gZW51bSB1dl9zeXN0ZW1fdHlwZSBnZXRfdXZfc3lzdGVtX3R5cGUodm9pZCk7CitleHRlcm4gaW50IGlzX3V2X3N5c3RlbSh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX3V2X3g7CitERUNMQVJFX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7CitleHRlcm4gdm9pZCB1dl9jcHVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHV2X3N5c3RlbV9pbml0KHZvaWQpOworZXh0ZXJuIGludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCk7CisKK2V4dGVybiB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0dFTkFQSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VvZGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzYzJlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlb2RlLmgKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBBTUQgR2VvZGUgZGVmaW5pdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9HRU9ERV9ICisjZGVmaW5lIF9BU01fWDg2X0dFT0RFX0gKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKiBHZW5lcmljIHNvdXRoYnJpZGdlIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIEdFT0RFX0RFVl9QTVMgMAorI2RlZmluZSBHRU9ERV9ERVZfQUNQSSAxCisjZGVmaW5lIEdFT0RFX0RFVl9HUElPIDIKKyNkZWZpbmUgR0VPREVfREVWX01GR1BUIDMKKworZXh0ZXJuIGludCBnZW9kZV9nZXRfZGV2X2Jhc2UodW5zaWduZWQgaW50IGRldik7CisKKy8qIFVzZWZ1bCBtYWNyb3MgKi8KKyNkZWZpbmUgZ2VvZGVfcG1zX2Jhc2UoKQlnZW9kZV9nZXRfZGV2X2Jhc2UoR0VPREVfREVWX1BNUykKKyNkZWZpbmUgZ2VvZGVfYWNwaV9iYXNlKCkJZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9BQ1BJKQorI2RlZmluZSBnZW9kZV9ncGlvX2Jhc2UoKQlnZW9kZV9nZXRfZGV2X2Jhc2UoR0VPREVfREVWX0dQSU8pCisjZGVmaW5lIGdlb2RlX21mZ3B0X2Jhc2UoKQlnZW9kZV9nZXRfZGV2X2Jhc2UoR0VPREVfREVWX01GR1BUKQorCisvKiBNU1JTICovCisKKyNkZWZpbmUgTVNSX0dMSVVfUDJEX1JPMAkweDEwMDAwMDI5CisKKyNkZWZpbmUgTVNSX0xYX0dMRF9NU1JfQ09ORklHCTB4NDgwMDIwMDEKKyNkZWZpbmUgTVNSX0xYX01TUl9QQURTRUwJMHg0ODAwMjAxMQkvKiBOT1QgMHg0ODAwMDAxMTsgdGhlIGRhdGEKKwkJCQkJCSAqIHNoZWV0IGhhcyB0aGUgd3JvbmcgdmFsdWUgKi8KKyNkZWZpbmUgTVNSX0dMQ1BfU1lTX1JTVFBMTAkweDRDMDAwMDE0CisjZGVmaW5lIE1TUl9HTENQX0RPVFBMTAkJMHg0QzAwMDAxNQorCisjZGVmaW5lIE1TUl9MQkFSX1NNQgkJMHg1MTQwMDAwQgorI2RlZmluZSBNU1JfTEJBUl9HUElPCQkweDUxNDAwMDBDCisjZGVmaW5lIE1TUl9MQkFSX01GR1BUCQkweDUxNDAwMDBECisjZGVmaW5lIE1TUl9MQkFSX0FDUEkJCTB4NTE0MDAwMEUKKyNkZWZpbmUgTVNSX0xCQVJfUE1TCQkweDUxNDAwMDBGCisKKyNkZWZpbmUgTVNSX0RJVklMX1NPRlRfUkVTRVQJMHg1MTQwMDAxNworCisjZGVmaW5lIE1TUl9QSUNfWVNFTF9MT1cJMHg1MTQwMDAyMAorI2RlZmluZSBNU1JfUElDX1lTRUxfSElHSAkweDUxNDAwMDIxCisjZGVmaW5lIE1TUl9QSUNfWlNFTF9MT1cJMHg1MTQwMDAyMgorI2RlZmluZSBNU1JfUElDX1pTRUxfSElHSAkweDUxNDAwMDIzCisjZGVmaW5lIE1TUl9QSUNfSVJRTV9MUEMJMHg1MTQwMDAyNQorCisjZGVmaW5lIE1TUl9NRkdQVF9JUlEJCTB4NTE0MDAwMjgKKyNkZWZpbmUgTVNSX01GR1BUX05SCQkweDUxNDAwMDI5CisjZGVmaW5lIE1TUl9NRkdQVF9TRVRVUAkJMHg1MTQwMDAyQgorCisjZGVmaW5lIE1TUl9MWF9TUEFSRV9NU1IJMHg4MDAwMDAxMQkvKiBEQy1zcGVjaWZpYyAqLworCisjZGVmaW5lIE1TUl9HWF9HTERfTVNSX0NPTkZJRwkweEMwMDAyMDAxCisjZGVmaW5lIE1TUl9HWF9NU1JfUEFEU0VMCTB4QzAwMDIwMTEKKworLyogUmVzb3VyY2UgU2l6ZXMgKi8KKworI2RlZmluZSBMQkFSX0dQSU9fU0laRQkJMHhGRgorI2RlZmluZSBMQkFSX01GR1BUX1NJWkUJCTB4NDAKKyNkZWZpbmUgTEJBUl9BQ1BJX1NJWkUJCTB4NDAKKyNkZWZpbmUgTEJBUl9QTVNfU0laRQkJMHg4MAorCisvKiBBQ1BJIHJlZ2lzdGVycyAoUE1TIGJsb2NrKSAqLworCisvKgorICogUE0xX0VOIGlzIG9ubHkgdmFsaWQgd2hlbiBWU0EgaXMgZW5hYmxlZCBmb3IgMTYgYml0IHJlYWRzLgorICogV2hlbiBWU0EgaXMgbm90IGVuYWJsZWQsICphbHdheXMqIHJlYWQgYm90aCBQTTFfU1RTIGFuZCBQTTFfRU4KKyAqIHdpdGggYSAzMiBiaXQgcmVhZCBhdCBvZmZzZXQgMHgwCisgKi8KKworI2RlZmluZSBQTTFfU1RTCQkJMHgwMAorI2RlZmluZSBQTTFfRU4JCQkweDAyCisjZGVmaW5lIFBNMV9DTlQJCQkweDA4CisjZGVmaW5lIFBNMl9DTlQJCQkweDBDCisjZGVmaW5lIFBNX1RNUgkJCTB4MTAKKyNkZWZpbmUgUE1fR1BFMF9TVFMJCTB4MTgKKyNkZWZpbmUgUE1fR1BFMF9FTgkJMHgxQworCisvKiBQTUMgcmVnaXN0ZXJzIChQTVMgYmxvY2spICovCisKKyNkZWZpbmUgUE1fU1NECQkJMHgwMAorI2RlZmluZSBQTV9TQ1hBCQkJMHgwNAorI2RlZmluZSBQTV9TQ1lBCQkJMHgwOAorI2RlZmluZSBQTV9PVVRfU0xQQ1RMCQkweDBDCisjZGVmaW5lIFBNX1NDTEsJCQkweDEwCisjZGVmaW5lIFBNX1NFRAkJCTB4MQorI2RlZmluZSBQTV9TQ1hECQkJMHgxOAorI2RlZmluZSBQTV9TQ1lECQkJMHgxQworI2RlZmluZSBQTV9JTl9TTFBDVEwJCTB4MjAKKyNkZWZpbmUgUE1fV0tECQkJMHgzMAorI2RlZmluZSBQTV9XS1hECQkJMHgzNAorI2RlZmluZSBQTV9SRAkJCTB4MzgKKyNkZWZpbmUgUE1fV0tYQQkJCTB4M0MKKyNkZWZpbmUgUE1fRlNECQkJMHg0MAorI2RlZmluZSBQTV9UU0QJCQkweDQ0CisjZGVmaW5lIFBNX1BTRAkJCTB4NDgKKyNkZWZpbmUgUE1fTldLRAkJCTB4NEMKKyNkZWZpbmUgUE1fQVdLRAkJCTB4NTAKKyNkZWZpbmUgUE1fU1NDCQkJMHg1NAorCisvKiBWU0EyIG1hZ2ljIHZhbHVlcyAqLworCisjZGVmaW5lIFZTQV9WUkNfSU5ERVgJCTB4QUMxQworI2RlZmluZSBWU0FfVlJDX0RBVEEJCTB4QUMxRQorI2RlZmluZSBWU0FfVlJfVU5MT0NLCQkweEZDNTMJLyogdW5sb2NrIHZpcnR1YWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlNBX1ZSX1NJR05BVFVSRQkweDAwMDMKKyNkZWZpbmUgVlNBX1ZSX01FTV9TSVpFCQkweDAyMDAKKyNkZWZpbmUgQU1EX1ZTQV9TSUcJCTB4NDEzMgkvKiBzaWduYXR1cmUgaXMgYXNjaWkgJ1ZTQTInICovCisjZGVmaW5lIEdTV19WU0FfU0lHCQkweDUzNGQgIC8qIEdlbmVyYWwgU29mdHdhcmUgc2lnbmF0dXJlICovCisvKiBHUElPICovCisKKyNkZWZpbmUgR1BJT19PVVRQVVRfVkFMCQkweDAwCisjZGVmaW5lIEdQSU9fT1VUUFVUX0VOQUJMRQkweDA0CisjZGVmaW5lIEdQSU9fT1VUUFVUX09QRU5fRFJBSU4JMHgwOAorI2RlZmluZSBHUElPX09VVFBVVF9JTlZFUlQJMHgwQworI2RlZmluZSBHUElPX09VVFBVVF9BVVgxCTB4MTAKKyNkZWZpbmUgR1BJT19PVVRQVVRfQVVYMgkweDE0CisjZGVmaW5lIEdQSU9fUFVMTF9VUAkJMHgxOAorI2RlZmluZSBHUElPX1BVTExfRE9XTgkJMHgxQworI2RlZmluZSBHUElPX0lOUFVUX0VOQUJMRQkweDIwCisjZGVmaW5lIEdQSU9fSU5QVVRfSU5WRVJUCTB4MjQKKyNkZWZpbmUgR1BJT19JTlBVVF9GSUxURVIJMHgyOAorI2RlZmluZSBHUElPX0lOUFVUX0VWRU5UX0NPVU5UCTB4MkMKKyNkZWZpbmUgR1BJT19SRUFEX0JBQ0sJCTB4MzAKKyNkZWZpbmUgR1BJT19JTlBVVF9BVVgxCQkweDM0CisjZGVmaW5lIEdQSU9fRVZFTlRTX0VOQUJMRQkweDM4CisjZGVmaW5lIEdQSU9fTE9DS19FTkFCTEUJMHgzQworI2RlZmluZSBHUElPX1BPU0lUSVZFX0VER0VfRU4JMHg0MAorI2RlZmluZSBHUElPX05FR0FUSVZFX0VER0VfRU4JMHg0NAorI2RlZmluZSBHUElPX1BPU0lUSVZFX0VER0VfU1RTCTB4NDgKKyNkZWZpbmUgR1BJT19ORUdBVElWRV9FREdFX1NUUwkweDRDCisKKyNkZWZpbmUgR1BJT19NQVBfWAkJMHhFMAorI2RlZmluZSBHUElPX01BUF9ZCQkweEU0CisjZGVmaW5lIEdQSU9fTUFQX1oJCTB4RTgKKyNkZWZpbmUgR1BJT19NQVBfVwkJMHhFQworCitzdGF0aWMgaW5saW5lIHUzMiBnZW9kZV9ncGlvKHVuc2lnbmVkIGludCBucikKK3sKKwlCVUdfT04obnIgPiAyOCk7CisJcmV0dXJuIDEgPDwgbnI7Cit9CisKK2V4dGVybiB2b2lkIGdlb2RlX2dwaW9fc2V0KHUzMiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGdlb2RlX2dwaW9fY2xlYXIodTMyLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBnZW9kZV9ncGlvX2lzc2V0KHUzMiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGdlb2RlX2dwaW9fc2V0dXBfZXZlbnQodW5zaWduZWQgaW50LCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBnZW9kZV9ncGlvX3NldF9pcnEodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VvZGVfZ3Bpb19ldmVudF9pcnEodW5zaWduZWQgaW50IGdwaW8sIGludCBwYWlyKQoreworCWdlb2RlX2dwaW9fc2V0dXBfZXZlbnQoZ3BpbywgcGFpciwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW9kZV9ncGlvX2V2ZW50X3BtZSh1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHBhaXIpCit7CisJZ2VvZGVfZ3Bpb19zZXR1cF9ldmVudChncGlvLCBwYWlyLCAxKTsKK30KKworLyogU3BlY2lmaWMgZ2VvZGUgdGVzdHMgKi8KKworc3RhdGljIGlubGluZSBpbnQgaXNfZ2VvZGVfZ3godm9pZCkKK3sKKwlyZXR1cm4gKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9OU0MpICYmCisJCShib290X2NwdV9kYXRhLng4NiA9PSA1KSAmJgorCQkoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gNSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19nZW9kZV9seCh2b2lkKQoreworCXJldHVybiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYKKwkJKGJvb3RfY3B1X2RhdGEueDg2ID09IDUpICYmCisJCShib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxMCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19nZW9kZSh2b2lkKQoreworCXJldHVybiAoaXNfZ2VvZGVfZ3goKSB8fCBpc19nZW9kZV9seCgpKTsKK30KKworI2lmZGVmIENPTkZJR19NR0VPREVfTFgKK2V4dGVybiBpbnQgZ2VvZGVfaGFzX3ZzYTIodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZ2VvZGVfaGFzX3ZzYTIodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKiBNRkdQVHMgKi8KKworI2RlZmluZSBNRkdQVF9NQVhfVElNRVJTCTgKKyNkZWZpbmUgTUZHUFRfVElNRVJfQU5ZCQkoLTEpCisKKyNkZWZpbmUgTUZHUFRfRE9NQUlOX1dPUktJTkcJMQorI2RlZmluZSBNRkdQVF9ET01BSU5fU1RBTkRCWQkyCisjZGVmaW5lIE1GR1BUX0RPTUFJTl9BTlkJKE1GR1BUX0RPTUFJTl9XT1JLSU5HIHwgTUZHUFRfRE9NQUlOX1NUQU5EQlkpCisKKyNkZWZpbmUgTUZHUFRfQ01QMQkJMAorI2RlZmluZSBNRkdQVF9DTVAyCQkxCisKKyNkZWZpbmUgTUZHUFRfRVZFTlRfSVJRCQkwCisjZGVmaW5lIE1GR1BUX0VWRU5UX05NSQkJMQorI2RlZmluZSBNRkdQVF9FVkVOVF9SRVNFVAkzCisKKyNkZWZpbmUgTUZHUFRfUkVHX0NNUDEJCTAKKyNkZWZpbmUgTUZHUFRfUkVHX0NNUDIJCTIKKyNkZWZpbmUgTUZHUFRfUkVHX0NPVU5URVIJNAorI2RlZmluZSBNRkdQVF9SRUdfU0VUVVAJCTYKKworI2RlZmluZSBNRkdQVF9TRVRVUF9DTlRFTgkoMSA8PCAxNSkKKyNkZWZpbmUgTUZHUFRfU0VUVVBfQ01QMgkoMSA8PCAxNCkKKyNkZWZpbmUgTUZHUFRfU0VUVVBfQ01QMQkoMSA8PCAxMykKKyNkZWZpbmUgTUZHUFRfU0VUVVBfU0VUVVAJKDEgPDwgMTIpCisjZGVmaW5lIE1GR1BUX1NFVFVQX1NUT1BFTgkoMSA8PCAxMSkKKyNkZWZpbmUgTUZHUFRfU0VUVVBfRVhURU4JKDEgPDwgMTApCisjZGVmaW5lIE1GR1BUX1NFVFVQX1JFVkVOCSgxIDw8IDUpCisjZGVmaW5lIE1GR1BUX1NFVFVQX0NMS1NFTAkoMSA8PCA0KQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VvZGVfbWZncHRfd3JpdGUoaW50IHRpbWVyLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJdTMyIGJhc2UgPSBnZW9kZV9nZXRfZGV2X2Jhc2UoR0VPREVfREVWX01GR1BUKTsKKwlvdXR3KHZhbHVlLCBiYXNlICsgcmVnICsgKHRpbWVyICogOCkpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBnZW9kZV9tZmdwdF9yZWFkKGludCB0aW1lciwgdTE2IHJlZykKK3sKKwl1MzIgYmFzZSA9IGdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfTUZHUFQpOworCXJldHVybiBpbncoYmFzZSArIHJlZyArICh0aW1lciAqIDgpKTsKK30KKworZXh0ZXJuIGludCBnZW9kZV9tZmdwdF90b2dnbGVfZXZlbnQoaW50IHRpbWVyLCBpbnQgY21wLCBpbnQgZXZlbnQsIGludCBlbmFibGUpOworZXh0ZXJuIGludCBnZW9kZV9tZmdwdF9zZXRfaXJxKGludCB0aW1lciwgaW50IGNtcCwgaW50ICppcnEsIGludCBlbmFibGUpOworZXh0ZXJuIGludCBnZW9kZV9tZmdwdF9hbGxvY190aW1lcihpbnQgdGltZXIsIGludCBkb21haW4pOworCisjZGVmaW5lIGdlb2RlX21mZ3B0X3NldHVwX2lycSh0LCBjLCBpKSBnZW9kZV9tZmdwdF9zZXRfaXJxKCh0KSwgKGMpLCAoaSksIDEpCisjZGVmaW5lIGdlb2RlX21mZ3B0X3JlbGVhc2VfaXJxKHQsIGMsIGkpIGdlb2RlX21mZ3B0X3NldF9pcnEoKHQpLCAoYyksIChpKSwgMCkKKworI2lmZGVmIENPTkZJR19HRU9ERV9NRkdQVF9USU1FUgorZXh0ZXJuIGludCBfX2luaXQgbWZncHRfdGltZXJfc2V0dXAodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbWZncHRfdGltZXJfc2V0dXAodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9HRU9ERV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkYmZkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogR2VuZXJpYyBHUElPIEFQSSBpbXBsZW1lbnRhdGlvbiBmb3IgeDg2LgorICoKKyAqIERlcml2ZWQgZnJvbSB0aGUgZ2VuZXJpYyBHUElPIEFQSSBmb3IgcG93ZXJwYzoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCAgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X0dQSU9fSAorI2RlZmluZSBfQVNNX1g4Nl9HUElPX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2lmZGVmIENPTkZJR19HUElPTElCCisKKy8qCisgKiBKdXN0IGNhbGwgZ3Bpb2xpYi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbHVlKQoreworCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2NhbnNsZWVwKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7Cit9CisKKy8qCisgKiBOb3QgaW1wbGVtZW50ZWQsIHlldC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfR1BJT0xJQiAqLworCisjZW5kaWYgLyogX0FTTV9YODZfR1BJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaGFyZGlycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvaGFyZGlycS5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ExMzVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX0FTTV9YODZfSEFSRElSUV8zMl9ICisjZGVmaW5lIF9BU01fWDg2X0hBUkRJUlFfMzJfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCXVuc2lnbmVkIGxvbmcgaWRsZV90aW1lc3RhbXA7CisJdW5zaWduZWQgaW50IF9fbm1pX2NvdW50OwkvKiBhcmNoIGRlcGVuZGVudCAqLworCXVuc2lnbmVkIGludCBhcGljX3RpbWVyX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCisJdW5zaWduZWQgaW50IGlycTBfaXJxczsKKwl1bnNpZ25lZCBpbnQgaXJxX3Jlc2NoZWRfY291bnQ7CisJdW5zaWduZWQgaW50IGlycV9jYWxsX2NvdW50OworCXVuc2lnbmVkIGludCBpcnFfdGxiX2NvdW50OworCXVuc2lnbmVkIGludCBpcnFfdGhlcm1hbF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX3NwdXJpb3VzX2NvdW50OworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworREVDTEFSRV9QRVJfQ1BVKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKKworI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQKKyNkZWZpbmUgX19JUlFfU1RBVChjcHUsIG1lbWJlcikgKHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkubWVtYmVyKQorCit2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9IQVJESVJRXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmEzODFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycV82NC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0FTTV9YODZfSEFSRElSUV82NF9ICisjZGVmaW5lIF9BU01fWDg2X0hBUkRJUlFfNjRfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZGEuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCisvKiBXZSBjYW4gaGF2ZSBhdCBtb3N0IE5SX1ZFQ1RPUlMgaXJxcyByb3V0ZWQgdG8gYSBjcHUgYXQgYSB0aW1lICovCisjZGVmaW5lIE1BWF9IQVJESVJRU19QRVJfQ1BVIE5SX1ZFQ1RPUlMKKworI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQgMQorCisjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpIHJlYWRfcGRhKF9fc29mdGlycV9wZW5kaW5nKQorCisjZGVmaW5lIF9fQVJDSF9TRVRfU09GVElSUV9QRU5ESU5HIDEKKworI2RlZmluZSBzZXRfc29mdGlycV9wZW5kaW5nKHgpIHdyaXRlX3BkYShfX3NvZnRpcnFfcGVuZGluZywgKHgpKQorI2RlZmluZSBvcl9zb2Z0aXJxX3BlbmRpbmcoeCkgIG9yX3BkYShfX3NvZnRpcnFfcGVuZGluZywgKHgpKQorCitleHRlcm4gdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0hBUkRJUlFfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjNiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIGhpZ2htZW0uaDogdmlydHVhbCBrZXJuZWwgbWVtb3J5IG1hcHBpbmdzIGZvciBoaWdoIG1lbW9yeQorICoKKyAqIFVzZWQgaW4gQ09ORklHX0hJR0hNRU0gc3lzdGVtcyBmb3IgbWVtb3J5IHBhZ2VzIHdoaWNoCisgKiBhcmUgbm90IGFkZHJlc3NhYmxlIGJ5IGRpcmVjdCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRworICoJCSAgICAgIEdlcmhhcmQuV2ljaGVydEBwZGIuc2llbWVucy5kZQorICoKKyAqCisgKiBSZWRlc2lnbmVkIHRoZSB4ODYgMzItYml0IFZNIGFyY2hpdGVjdHVyZSB0byBkZWFsIHdpdGgKKyAqIHVwIHRvIDE2IFRlcmFieXRlIHBoeXNpY2FsIG1lbW9yeS4gV2l0aCBjdXJyZW50IHg4NiBDUFVzCisgKiB3ZSBub3cgc3VwcG9ydCB1cCB0byA2NCBHaWdhYnl0ZXMgcGh5c2ljYWwgUkFNLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X0hJR0hNRU1fSAorI2RlZmluZSBfQVNNX1g4Nl9ISUdITUVNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorCisvKiBkZWNsYXJhdGlvbnMgZm9yIGhpZ2htZW0uYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaHN0YXJ0X3BmbiwgaGlnaGVuZF9wZm47CisKK2V4dGVybiBwdGVfdCAqa21hcF9wdGU7CitleHRlcm4gcGdwcm90X3Qga21hcF9wcm90OworZXh0ZXJuIHB0ZV90ICpwa21hcF9wYWdlX3RhYmxlOworCisvKgorICogUmlnaHQgbm93IHdlIGluaXRpYWxpemUgb25seSBhIHNpbmdsZSBwdGUgdGFibGUuIEl0IGNhbiBiZSBleHRlbmRlZAorICogZWFzaWx5LCBzdWJzZXF1ZW50IHB0ZSB0YWJsZXMgaGF2ZSB0byBiZSBhbGxvY2F0ZWQgaW4gb25lIHBoeXNpY2FsCisgKiBjaHVuayBvZiBSQU0uCisgKi8KKy8qCisgKiBPcmRlcmluZyBpczoKKyAqCisgKiBGSVhBRERSX1RPUAorICogCQkJZml4ZWRfYWRkcmVzc2VzCisgKiBGSVhBRERSX1NUQVJUCisgKiAJCQl0ZW1wIGZpeGVkIGFkZHJlc3NlcworICogRklYQUREUl9CT09UX1NUQVJUCisgKiAJCQlQZXJzaXN0ZW50IGttYXAgYXJlYQorICogUEtNQVBfQkFTRQorICogVk1BTExPQ19FTkQKKyAqIAkJCVZtYWxsb2MgYXJlYQorICogVk1BTExPQ19TVEFSVAorICogaGlnaF9tZW1vcnkKKyAqLworI2RlZmluZSBMQVNUX1BLTUFQX01BU0sgKExBU1RfUEtNQVAtMSkKKyNkZWZpbmUgUEtNQVBfTlIodmlydCkgICgodmlydC1QS01BUF9CQVNFKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBQS01BUF9BRERSKG5yKSAgKFBLTUFQX0JBU0UgKyAoKG5yKSA8PCBQQUdFX1NISUZUKSkKKworZXh0ZXJuIHZvaWQgKmttYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK3ZvaWQgKmttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCBrdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCAqa21hcF9hdG9taWNfcHJvdChzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpOwordm9pZCAqa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKK3ZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKK3ZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpOworc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKTsKKworI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKKyNkZWZpbmUga21hcF9hdG9taWNfcHRlKHBhZ2UsIHR5cGUpCWttYXBfYXRvbWljKHBhZ2UsIHR5cGUpCisjZW5kaWYKKworI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4pOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfSElHSE1FTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ocGV0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ocGV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyMmNiMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hwZXQuaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9IUEVUX0gKKyNkZWZpbmUgX0FTTV9YODZfSFBFVF9ICisKKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKworI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCisKKyNkZWZpbmUgSFBFVF9NTUFQX1NJWkUJCTEwMjQKKworI2RlZmluZSBIUEVUX0lECQkJMHgwMDAKKyNkZWZpbmUgSFBFVF9QRVJJT0QJCTB4MDA0CisjZGVmaW5lIEhQRVRfQ0ZHCQkweDAxMAorI2RlZmluZSBIUEVUX1NUQVRVUwkJMHgwMjAKKyNkZWZpbmUgSFBFVF9DT1VOVEVSCQkweDBmMAorCisjZGVmaW5lIEhQRVRfVG5fQ0ZHKG4pCQkoMHgxMDAgKyAweDIwICogbikKKyNkZWZpbmUgSFBFVF9Ubl9DTVAobikJCSgweDEwOCArIDB4MjAgKiBuKQorI2RlZmluZSBIUEVUX1RuX1JPVVRFKG4pCSgweDExMCArIDB4MjAgKiBuKQorCisjZGVmaW5lIEhQRVRfVDBfQ0ZHCQkweDEwMAorI2RlZmluZSBIUEVUX1QwX0NNUAkJMHgxMDgKKyNkZWZpbmUgSFBFVF9UMF9ST1VURQkJMHgxMTAKKyNkZWZpbmUgSFBFVF9UMV9DRkcJCTB4MTIwCisjZGVmaW5lIEhQRVRfVDFfQ01QCQkweDEyOAorI2RlZmluZSBIUEVUX1QxX1JPVVRFCQkweDEzMAorI2RlZmluZSBIUEVUX1QyX0NGRwkJMHgxNDAKKyNkZWZpbmUgSFBFVF9UMl9DTVAJCTB4MTQ4CisjZGVmaW5lIEhQRVRfVDJfUk9VVEUJCTB4MTUwCisKKyNkZWZpbmUgSFBFVF9JRF9SRVYJCTB4MDAwMDAwZmYKKyNkZWZpbmUgSFBFVF9JRF9OVU1CRVIJCTB4MDAwMDFmMDAKKyNkZWZpbmUgSFBFVF9JRF82NEJJVAkJMHgwMDAwMjAwMAorI2RlZmluZSBIUEVUX0lEX0xFR1NVUAkJMHgwMDAwODAwMAorI2RlZmluZSBIUEVUX0lEX1ZFTkRPUgkJMHhmZmZmMDAwMAorI2RlZmluZQlIUEVUX0lEX05VTUJFUl9TSElGVAk4CisjZGVmaW5lIEhQRVRfSURfVkVORE9SX1NISUZUCTE2CisKKyNkZWZpbmUgSFBFVF9JRF9WRU5ET1JfODA4NgkweDgwODYKKworI2RlZmluZSBIUEVUX0NGR19FTkFCTEUJCTB4MDAxCisjZGVmaW5lIEhQRVRfQ0ZHX0xFR0FDWQkJMHgwMDIKKyNkZWZpbmUJSFBFVF9MRUdBQ1lfODI1NAkyCisjZGVmaW5lCUhQRVRfTEVHQUNZX1JUQwkJOAorCisjZGVmaW5lIEhQRVRfVE5fTEVWRUwJCTB4MDAwMgorI2RlZmluZSBIUEVUX1ROX0VOQUJMRQkJMHgwMDA0CisjZGVmaW5lIEhQRVRfVE5fUEVSSU9ESUMJMHgwMDA4CisjZGVmaW5lIEhQRVRfVE5fUEVSSU9ESUNfQ0FQCTB4MDAxMAorI2RlZmluZSBIUEVUX1ROXzY0QklUX0NBUAkweDAwMjAKKyNkZWZpbmUgSFBFVF9UTl9TRVRWQUwJCTB4MDA0MAorI2RlZmluZSBIUEVUX1ROXzMyQklUCQkweDAxMDAKKyNkZWZpbmUgSFBFVF9UTl9ST1VURQkJMHgzZTAwCisjZGVmaW5lIEhQRVRfVE5fRlNCCQkweDQwMDAKKyNkZWZpbmUgSFBFVF9UTl9GU0JfQ0FQCQkweDgwMDAKKyNkZWZpbmUgSFBFVF9UTl9ST1VURV9TSElGVAk5CisKKy8qIE1heCBIUEVUIFBlcmlvZCBpcyAxMF44IGZlbXRvIHNlYyBhcyBpbiBIUEVUIHNwZWMgKi8KKyNkZWZpbmUgSFBFVF9NQVhfUEVSSU9ECQkxMDAwMDAwMDBVTAorLyoKKyAqIE1pbiBIUEVUIHBlcmlvZCBpcyAxMF41IGZlbXRvIHNlYyBqdXN0IGZvciBzYWZldHkuIElmIGl0IGlzIGxlc3MgdGhhbiB0aGlzLAorICogdGhlbiAzMiBiaXQgSFBFVCBjb3VudGVyIHdyYXBzYXJvdW5kIGluIGxlc3MgdGhhbiAwLjUgc2VjLgorICovCisjZGVmaW5lIEhQRVRfTUlOX1BFUklPRAkJMTAwMDAwVUwKKworLyogaHBldCBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfYWRkcmVzczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZvcmNlX2hwZXRfYWRkcmVzczsKK2V4dGVybiBpbnQgaHBldF9mb3JjZV91c2VyOworZXh0ZXJuIGludCBpc19ocGV0X2VuYWJsZWQodm9pZCk7CitleHRlcm4gaW50IGhwZXRfZW5hYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgaHBldF9kaXNhYmxlKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF9yZWFkbCh1bnNpZ25lZCBsb25nIGEpOworZXh0ZXJuIHZvaWQgZm9yY2VfaHBldF9yZXN1bWUodm9pZCk7CisKK2V4dGVybiB2b2lkIGhwZXRfbXNpX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGhwZXRfbXNpX21hc2sodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBocGV0X21zaV93cml0ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKK2V4dGVybiB2b2lkIGhwZXRfbXNpX3JlYWQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorZXh0ZXJuIGludCBhcmNoX3NldHVwX2hwZXRfbXNpKHVuc2lnbmVkIGludCBpcnEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc2V0dXBfaHBldF9tc2kodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCit0eXBlZGVmIGlycXJldHVybl90ICgqcnRjX2lycV9oYW5kbGVyKShpbnQgaW50ZXJydXB0LCB2b2lkICpjb29raWUpOworZXh0ZXJuIGludCBocGV0X21hc2tfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzayk7CitleHRlcm4gaW50IGhwZXRfc2V0X3J0Y19pcnFfYml0KHVuc2lnbmVkIGxvbmcgYml0X21hc2spOworZXh0ZXJuIGludCBocGV0X3NldF9hbGFybV90aW1lKHVuc2lnbmVkIGNoYXIgaHJzLCB1bnNpZ25lZCBjaGFyIG1pbiwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHNlYyk7CitleHRlcm4gaW50IGhwZXRfc2V0X3BlcmlvZGljX2ZyZXEodW5zaWduZWQgbG9uZyBmcmVxKTsKK2V4dGVybiBpbnQgaHBldF9ydGNfZHJvcHBlZF9pcnEodm9pZCk7CitleHRlcm4gaW50IGhwZXRfcnRjX3RpbWVyX2luaXQodm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgaHBldF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gaW50IGhwZXRfcmVnaXN0ZXJfaXJxX2hhbmRsZXIocnRjX2lycV9oYW5kbGVyIGhhbmRsZXIpOworZXh0ZXJuIHZvaWQgaHBldF91bnJlZ2lzdGVyX2lycV9oYW5kbGVyKHJ0Y19pcnFfaGFuZGxlciBoYW5kbGVyKTsKKworI2VuZGlmIC8qIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDICovCisKKyNlbHNlIC8qIENPTkZJR19IUEVUX1RJTUVSICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGhwZXRfZW5hYmxlKHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKSB7IHJldHVybiAwOyB9CisjZGVmaW5lIGhwZXRfcmVhZGwoYSkgMAorCisjZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1g4Nl9IUEVUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzlhOWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBAIC0wLDAgKzEsOTMgQEAKKyNpZm5kZWYgX0FTTV9YODZfSFVHRVRMQl9ICisjZGVmaW5lIF9BU01fWDg2X0hVR0VUTEJfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworCitzdGF0aWMgaW5saW5lIGludCBpc19odWdlcGFnZV9vbmx5X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgdW5zaWduZWQgbG9uZyBsZW4pIHsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIHRoZSBhcmNoIGRvZXNuJ3Qgc3VwcGx5IHNvbWV0aGluZyBlbHNlLCBhc3N1bWUgdGhhdCBodWdlcGFnZQorICogc2l6ZSBhbGlnbmVkIHJlZ2lvbnMgYXJlIG9rIHdpdGhvdXQgZnVydGhlciBwcmVwYXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHJlcGFyZV9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpOworCWlmIChsZW4gJiB+aHVnZV9wYWdlX21hc2soaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChhZGRyICYgfmh1Z2VfcGFnZV9tYXNrKGgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfcHJlZmF1bHRfYXJjaF9ob29rKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGZsb29yLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgY2VpbGluZykKK3sKKwlmcmVlX3BnZF9yYW5nZSh0bGIsIGFkZHIsIGVuZCwgZmxvb3IsIGNlaWxpbmcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlyZXR1cm4gcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlX25vbmUocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfbm9uZShwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV93cnByb3RlY3QocHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXB0ZXBfc2V0X3dycHJvdGVjdChtbSwgYWRkciwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCisJCQkJCSAgICAgcHRlX3QgcHRlLCBpbnQgZGlydHkpCit7CisJcmV0dXJuIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIGFkZHIsIHB0ZXAsIHB0ZSwgZGlydHkpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQocHRlX3QgKnB0ZXApCit7CisJcmV0dXJuICpwdGVwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlbGVhc2VfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9IVUdFVExCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3YWVjYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0wLDAgKzEsMTMxIEBACisjaWZuZGVmIF9BU01fWDg2X0hXX0lSUV9ICisjZGVmaW5lIF9BU01fWDg2X0hXX0lSUV9ICisKKy8qCisgKiAoQykgMTk5MiwgMTk5MyBMaW51cyBUb3J2YWxkcywgKEMpIDE5OTcgSW5nbyBNb2xuYXIKKyAqCisgKiBtb3ZlZCBzb21lIG9mIHRoZSBvbGQgYXJjaC9pMzg2L2tlcm5lbC9pcnEuaCB0byBoZXJlLiBWWQorICoKKyAqIElSUS9JUEkgY2hhbmdlcyB0YWtlbiBmcm9tIHdvcmsgYnkgVGhvbWFzIFJhZGtlCisgKiA8dG9tc29mdEBpbmZvcm1hdGlrLnR1LWNoZW1uaXR6LmRlPgorICoKKyAqIGhhY2tlZCBieSBBbmRpIEtsZWVuIGZvciB4ODYtNjQuCisgKiB1bmlmaWVkIGJ5IHRnbHgKKyAqLworCisjaW5jbHVkZSA8YXNtL2lycV92ZWN0b3JzLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorCisjZGVmaW5lIHBsYXRmb3JtX2xlZ2FjeV9pcnEoaXJxKQkoKGlycSkgPCAxNikKKworLyogSW50ZXJydXB0IGhhbmRsZXJzIHJlZ2lzdGVyZWQgZHVyaW5nIGluaXRfSVJRICovCitleHRlcm4gdm9pZCBhcGljX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIGVycm9yX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIHRoZXJtYWxfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzY2hlZHVsZV9pbnRlcnJ1cHQodm9pZCk7CisKK2V4dGVybiB2b2lkIGludmFsaWRhdGVfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQwKHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQxKHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQyKHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQzKHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQ0KHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQ1KHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQ2KHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQ3KHZvaWQpOworCitleHRlcm4gdm9pZCBpcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIHRocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCk7CisKK2V4dGVybiB2b2lkIGNhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KHZvaWQpOworCisvKiBQSUMgc3BlY2lmaWMgZnVuY3Rpb25zICovCitleHRlcm4gdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgaW5pdF84MjU5QShpbnQgYWVvaSk7CisKKy8qIElPQVBJQyAqLworI2RlZmluZSBJT19BUElDX0lSUSh4KSAoKCh4KSA+PSAxNikgfHwgKCgxPDwoeCkpICYgaW9fYXBpY19pcnFzKSkKK2V4dGVybiB1bnNpZ25lZCBsb25nIGlvX2FwaWNfaXJxczsKKworZXh0ZXJuIHZvaWQgaW5pdF9WSVNXU19BUElDX2lycXModm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9JT19BUElDKHZvaWQpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9JT19BUElDKHZvaWQpOworZXh0ZXJuIGludCBJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3RvcihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZuKTsKK2V4dGVybiB2b2lkIHNldHVwX2lvYXBpY19kZXN0KHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorZXh0ZXJuIHZvaWQgZW5hYmxlX0lPX0FQSUModm9pZCk7CisjZW5kaWYKKworLyogSVBJIGZ1bmN0aW9ucyAqLworI2lmZGVmIENPTkZJR19YODZfMzIKK2V4dGVybiB2b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3Rvcik7CisjZW5kaWYKK2V4dGVybiB2b2lkIHNlbmRfSVBJKGludCBkZXN0LCBpbnQgdmVjdG9yKTsKKworLyogU3RhdGlzdGljcyAqLworZXh0ZXJuIGF0b21pY190IGlycV9lcnJfY291bnQ7CitleHRlcm4gYXRvbWljX3QgaXJxX21pc19jb3VudDsKKworLyogRUlTQSAqLworZXh0ZXJuIHZvaWQgZWlzYV9zZXRfbGV2ZWxfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisvKiBWb3lhZ2VyIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB2aWNfY3BpX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgdmljX3N5c19pbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHZpY19jbW5faW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfaW52YWxpZGF0ZV9pbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY19yZXNjaGVkdWxlX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgcWljX2VuYWJsZV9pcnFfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7CisKKy8qIFNNUCAqLworZXh0ZXJuIHZvaWQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgc21wX3NwdXJpb3VzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CisjaWZkZWYgQ09ORklHX1g4Nl9TTVAKK2V4dGVybiB2b2lkIHNtcF9yZXNjaGVkdWxlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOworI2Vsc2UKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKK2V4dGVybiB2b2lkICgqY29uc3QgaW50ZXJydXB0W05SX1ZFQ1RPUlNdKSh2b2lkKTsKKyNlbmRpZgorCit0eXBlZGVmIGludCB2ZWN0b3JfaXJxX3RbTlJfVkVDVE9SU107CitERUNMQVJFX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworZXh0ZXJuIHZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIHVubG9ja192ZWN0b3JfbG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIF9fc2V0dXBfdmVjdG9yX2lycShpbnQgY3B1KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVubG9ja192ZWN0b3JfbG9jayh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIF9fc2V0dXBfdmVjdG9yX2lycShpbnQgY3B1KSB7fQorI2VuZGlmCisKKyNlbmRpZiAvKiAhQVNTRU1CTFlfICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ0cmFuc3BvcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h5cGVydHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0YjFhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h5cGVydHJhbnNwb3J0LmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9IWVBFUlRSQU5TUE9SVF9ICisjZGVmaW5lIF9BU01fWDg2X0hZUEVSVFJBTlNQT1JUX0gKKworLyoKKyAqIENvbnN0YW50cyBmb3IgeDg2IEh5cGVydHJhbnNwb3J0IEludGVycnVwdHMuCisgKi8KKworI2RlZmluZSBIVF9JUlFfTE9XX0JBU0UJCQkweGY4MDAwMDAwCisKKyNkZWZpbmUgSFRfSVJRX0xPV19WRUNUT1JfU0hJRlQJCTE2CisjZGVmaW5lIEhUX0lSUV9MT1dfVkVDVE9SX01BU0sJCTB4MDBmZjAwMDAKKyNkZWZpbmUgSFRfSVJRX0xPV19WRUNUT1IodikJCQkJCQlcCisJKCgodikgPDwgSFRfSVJRX0xPV19WRUNUT1JfU0hJRlQpICYgSFRfSVJRX0xPV19WRUNUT1JfTUFTSykKKworI2RlZmluZSBIVF9JUlFfTE9XX0RFU1RfSURfU0hJRlQJOAorI2RlZmluZSBIVF9JUlFfTE9XX0RFU1RfSURfTUFTSwkJMHgwMDAwZmYwMAorI2RlZmluZSBIVF9JUlFfTE9XX0RFU1RfSUQodikJCQkJCQlcCisJKCgodikgPDwgSFRfSVJRX0xPV19ERVNUX0lEX1NISUZUKSAmIEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLKQorCisjZGVmaW5lIEhUX0lSUV9MT1dfRE1fUEhZU0lDQUwJCTB4MDAwMDAwMAorI2RlZmluZSBIVF9JUlFfTE9XX0RNX0xPR0lDQUwJCTB4MDAwMDA0MAorCisjZGVmaW5lIEhUX0lSUV9MT1dfUlFFT0lfRURHRQkJMHgwMDAwMDAwCisjZGVmaW5lIEhUX0lSUV9MT1dfUlFFT0lfTEVWRUwJCTB4MDAwMDAyMAorCisKKyNkZWZpbmUgSFRfSVJRX0xPV19NVF9GSVhFRAkJMHgwMDAwMDAwCisjZGVmaW5lIEhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRAkweDAwMDAwMDQKKyNkZWZpbmUgSFRfSVJRX0xPV19NVF9TTUkJCTB4MDAwMDAwOAorI2RlZmluZSBIVF9JUlFfTE9XX01UX05NSQkJMHgwMDAwMDBjCisjZGVmaW5lIEhUX0lSUV9MT1dfTVRfSU5JVAkJMHgwMDAwMDEwCisjZGVmaW5lIEhUX0lSUV9MT1dfTVRfU1RBUlRVUAkJMHgwMDAwMDE0CisjZGVmaW5lIEhUX0lSUV9MT1dfTVRfRVhUSU5UCQkweDAwMDAwMTgKKyNkZWZpbmUgSFRfSVJRX0xPV19NVF9MSU5UMQkJMHgwMDAwMDhjCisjZGVmaW5lIEhUX0lSUV9MT1dfTVRfTElOVDAJCTB4MDAwMDA5OAorCisjZGVmaW5lIEhUX0lSUV9MT1dfSVJRX01BU0tFRAkJMHgwMDAwMDAxCisKKworI2RlZmluZSBIVF9JUlFfSElHSF9ERVNUX0lEX1NISUZUCTAKKyNkZWZpbmUgSFRfSVJRX0hJR0hfREVTVF9JRF9NQVNLCTB4MDBmZmZmZmYKKyNkZWZpbmUgSFRfSVJRX0hJR0hfREVTVF9JRCh2KQkJCQkJCVwKKwkoKCgodikgPj4gOCkgPDwgSFRfSVJRX0hJR0hfREVTVF9JRF9TSElGVCkgJiBIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9IWVBFUlRSQU5TUE9SVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmMDAwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBMaW51cyBUb3J2YWxkcworICoKKyAqIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0CisgKiBHZW5lcmFsIEZQVSBzdGF0ZSBoYW5kbGluZyBjbGVhbnVwcworICoJR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPiwgTWF5IDIwMDAKKyAqIHg4Ni02NCB3b3JrIGJ5IEFuZGkgS2xlZW4gMjAwMgorICovCisKKyNpZm5kZWYgX0FTTV9YODZfSTM4N19ICisjZGVmaW5lIF9BU01fWDg2X0kzODdfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3NldC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS94c2F2ZS5oPgorCitleHRlcm4gdW5zaWduZWQgaW50IHNpZ194c3RhdGVfc2l6ZTsKK2V4dGVybiB2b2lkIGZwdV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQodm9pZCk7CitleHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtYXRoX3N0YXRlX3Jlc3RvcmUodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X3RocmVhZF94c3RhdGUodm9pZCk7CitleHRlcm4gaW50IGR1bXBfZnB1KHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0ICopOworCitleHRlcm4gdXNlcl9yZWdzZXRfYWN0aXZlX2ZuIGZwcmVnc19hY3RpdmUsIHhmcHJlZ3NfYWN0aXZlOworZXh0ZXJuIHVzZXJfcmVnc2V0X2dldF9mbiBmcHJlZ3NfZ2V0LCB4ZnByZWdzX2dldCwgZnByZWdzX3NvZnRfZ2V0OworZXh0ZXJuIHVzZXJfcmVnc2V0X3NldF9mbiBmcHJlZ3Nfc2V0LCB4ZnByZWdzX3NldCwgZnByZWdzX3NvZnRfc2V0OworCitleHRlcm4gc3RydWN0IF9mcHhfc3dfYnl0ZXMgZnhfc3dfcmVzZXJ2ZWQ7CisjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCitleHRlcm4gdW5zaWduZWQgaW50IHNpZ194c3RhdGVfaWEzMl9zaXplOworZXh0ZXJuIHN0cnVjdCBfZnB4X3N3X2J5dGVzIGZ4X3N3X3Jlc2VydmVkX2lhMzI7CitzdHJ1Y3QgX2Zwc3RhdGVfaWEzMjsKK3N0cnVjdCBfeHN0YXRlX2lhMzI7CitleHRlcm4gaW50IHNhdmVfaTM4N194c3RhdGVfaWEzMih2b2lkIF9fdXNlciAqYnVmKTsKK2V4dGVybiBpbnQgcmVzdG9yZV9pMzg3X3hzdGF0ZV9pYTMyKHZvaWQgX191c2VyICpidWYpOworI2VuZGlmCisKKyNkZWZpbmUgWDg3X0ZTV19FUyAoMSA8PCA3KQkvKiBFeGNlcHRpb24gU3VtbWFyeSAqLworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCisvKiBJZ25vcmUgZGVsYXllZCBleGNlcHRpb25zIGZyb20gdXNlciBzcGFjZSAqLworc3RhdGljIGlubGluZSB2b2lkIHRvbGVyYW50X2Z3YWl0KHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCIxOiBmd2FpdFxuIgorCQkgICAgICIyOlxuIgorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgMmIpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnhyc3Rvcl9jaGVja2luZyhzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCkKK3sKKwlpbnQgZXJyOworCisJYXNtIHZvbGF0aWxlKCIxOiAgcmV4NjQvZnhyc3RvciAoJVtmeF0pXG5cdCIKKwkJICAgICAiMjpcbiIKKwkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCQkgICAgICIzOiAgbW92bCAkLTEsJVtlcnJdXG4iCisJCSAgICAgIiAgICBqbXAgIDJiXG4iCisJCSAgICAgIi5wcmV2aW91c1xuIgorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCisJCSAgICAgOiBbZXJyXSAiPXIiIChlcnIpCisjaWYgMCAvKiBTZWUgY29tbWVudCBpbiBfX3NhdmVfaW5pdF9mcHUoKSBiZWxvdy4gKi8KKwkJICAgICA6IFtmeF0gInIiIChmeCksICJtIiAoKmZ4KSwgIjAiICgwKSk7CisjZWxzZQorCQkgICAgIDogW2Z4XSAiY2RhU0RiIiAoZngpLCAibSIgKCpmeCksICIwIiAoMCkpOworI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmVzdG9yZV9mcHVfY2hlY2tpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICYgVFNfWFNBVkUpCisJCXJldHVybiB4cnN0b3JfY2hlY2tpbmcoJnRzay0+dGhyZWFkLnhzdGF0ZS0+eHNhdmUpOworCWVsc2UKKwkJcmV0dXJuIGZ4cnN0b3JfY2hlY2tpbmcoJnRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKTsKK30KKworLyogQU1EIENQVXMgZG9uJ3Qgc2F2ZS9yZXN0b3JlIEZEUC9GSVAvRk9QIHVubGVzcyBhbiBleGNlcHRpb24KKyAgIGlzIHBlbmRpbmcuIENsZWFyIHRoZSB4ODcgc3RhdGUgaGVyZSBieSBzZXR0aW5nIGl0IHRvIGZpeGVkCisgICB2YWx1ZXMuIFRoZSBrZXJuZWwgZGF0YSBzZWdtZW50IGNhbiBiZSBzb21ldGltZXMgMCBhbmQgc29tZXRpbWVzCisgICBuZXcgdXNlciB2YWx1ZS4gQm90aCBzaG91bGQgYmUgb2suCisgICBVc2UgdGhlIFBEQSBhcyBzYWZlIGFkZHJlc3MgYmVjYXVzZSBpdCBzaG91bGQgYmUgYWxyZWFkeSBpbiBMMS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9mcHVfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHhzYXZlX3N0cnVjdCAqeHN0YXRlID0gJnRzay0+dGhyZWFkLnhzdGF0ZS0+eHNhdmU7CisJc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnggPSAmdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmU7CisKKwkvKgorCSAqIHhzYXZlIGhlYWRlciBtYXkgaW5kaWNhdGUgdGhlIGluaXQgc3RhdGUgb2YgdGhlIEZQLgorCSAqLworCWlmICgodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19YU0FWRSkgJiYKKwkgICAgISh4c3RhdGUtPnhzYXZlX2hkci54c3RhdGVfYnYgJiBYU1RBVEVfRlApKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoZngtPnN3ZCAmIFg4N19GU1dfRVMpKQorCQlhc20gdm9sYXRpbGUoImZuY2xleCIpOworCWFsdGVybmF0aXZlX2lucHV0KEFTTV9OT1A4IEFTTV9OT1AyLAorCQkJICAiICAgIGVtbXNcbiIJCS8qIGNsZWFyIHN0YWNrIHRhZ3MgKi8KKwkJCSAgIiAgICBmaWxkbCAlJWdzOjAiLAkvKiBsb2FkIHRvIGNsZWFyIHN0YXRlICovCisJCQkgIFg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnhzYXZlX3VzZXIoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBfX3VzZXIgKmZ4KQoreworCWludCBlcnI7CisKKwlhc20gdm9sYXRpbGUoIjE6ICByZXg2NC9meHNhdmUgKCVbZnhdKVxuXHQiCisJCSAgICAgIjI6XG4iCisJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJICAgICAiMzogIG1vdmwgJC0xLCVbZXJyXVxuIgorCQkgICAgICIgICAgam1wICAyYlxuIgorCQkgICAgICIucHJldmlvdXNcbiIKKwkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDNiKQorCQkgICAgIDogW2Vycl0gIj1yIiAoZXJyKSwgIj1tIiAoKmZ4KQorI2lmIDAgLyogU2VlIGNvbW1lbnQgaW4gX19meHNhdmVfY2xlYXIoKSBiZWxvdy4gKi8KKwkJICAgICA6IFtmeF0gInIiIChmeCksICIwIiAoMCkpOworI2Vsc2UKKwkJICAgICA6IFtmeF0gImNkYVNEYiIgKGZ4KSwgIjAiICgwKSk7CisjZW5kaWYKKwlpZiAodW5saWtlbHkoZXJyKSAmJgorCSAgICBfX2NsZWFyX3VzZXIoZngsIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSkpCisJCWVyciA9IC1FRkFVTFQ7CisJLyogTm8gbmVlZCB0byBjbGVhciBoZXJlIGJlY2F1c2UgdGhlIGNhbGxlciBjbGVhcnMgVVNFRF9NQVRIICovCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZ4c2F2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwkvKiBVc2luZyAicmV4NjQ7IGZ4c2F2ZSAlMCIgaXMgYnJva2VuIGJlY2F1c2UsIGlmIHRoZSBtZW1vcnkgb3BlcmFuZAorCSAgIHVzZXMgYW55IGV4dGVuZGVkIHJlZ2lzdGVycyBmb3IgYWRkcmVzc2luZywgYSBzZWNvbmQgUkVYIHByZWZpeAorCSAgIHdpbGwgYmUgZ2VuZXJhdGVkICh0byB0aGUgYXNzZW1ibGVyLCByZXg2NCBmb2xsb3dlZCBieSBzZW1pY29sb24KKwkgICBpcyBhIHNlcGFyYXRlIGluc3RydWN0aW9uKSwgYW5kIGhlbmNlIHRoZSA2NC1iaXRuZXNzIGlzIGxvc3QuICovCisjaWYgMAorCS8qIFVzaW5nICJmeHNhdmVxICUwIiB3b3VsZCBiZSB0aGUgaWRlYWwgY2hvaWNlLCBidXQgaXMgb25seSBzdXBwb3J0ZWQKKwkgICBzdGFydGluZyB3aXRoIGdhcyAyLjE2LiAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJmeHNhdmVxICUwIgorCQkJICAgICA6ICI9bSIgKHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKSk7CisjZWxpZiAwCisJLyogVXNpbmcsIGFzIGEgd29ya2Fyb3VuZCwgdGhlIHByb3Blcmx5IHByZWZpeGVkIGZvcm0gYmVsb3cgaXNuJ3QKKwkgICBhY2NlcHRlZCBieSBhbnkgYmludXRpbHMgdmVyc2lvbiBzbyBmYXIgcmVsZWFzZWQsIGNvbXBsYWluaW5nIHRoYXQKKwkgICB0aGUgc2FtZSB0eXBlIG9mIHByZWZpeCBpcyB1c2VkIHR3aWNlIGlmIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIGlzCisJICAgbmVlZGVkIGZvciBhZGRyZXNzaW5nIChmaXggc3VibWl0dGVkIHRvIG1haW5saW5lIDIwMDUtMTEtMjEpLiAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXg2NC9meHNhdmUgJTAiCisJCQkgICAgIDogIj1tIiAodHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUpKTsKKyNlbHNlCisJLyogVGhpcywgaG93ZXZlciwgd2UgY2FuIHdvcmsgYXJvdW5kIGJ5IGZvcmNpbmcgdGhlIGNvbXBpbGVyIHRvIHNlbGVjdAorCSAgIGFuIGFkZHJlc3NpbmcgbW9kZSB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBleHRlbmRlZCByZWdpc3RlcnMuICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJleDY0L2Z4c2F2ZSAoJTEpIgorCQkJICAgICA6ICI9bSIgKHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKQorCQkJICAgICA6ICJjZGFTRGIiICgmdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zYXZlX2luaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1hTQVZFKQorCQl4c2F2ZSh0c2spOworCWVsc2UKKwkJZnhzYXZlKHRzayk7CisKKwljbGVhcl9mcHVfc3RhdGUodHNrKTsKKwl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKK30KKworI2Vsc2UgIC8qIENPTkZJR19YODZfMzIgKi8KKworZXh0ZXJuIHZvaWQgZmluaXQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0b2xlcmFudF9md2FpdCh2b2lkKQoreworCWFzbSB2b2xhdGlsZSgiZm5jbGV4IDsgZndhaXQiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1hTQVZFKSB7CisJCXhyc3Rvcl9jaGVja2luZygmdHNrLT50aHJlYWQueHN0YXRlLT54c2F2ZSk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBUaGUgIm5vcCIgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGluc3RydWN0aW9ucyB0aGUgc2FtZQorCSAqIGxlbmd0aC4KKwkgKi8KKwlhbHRlcm5hdGl2ZV9pbnB1dCgKKwkJIm5vcCA7IGZyc3RvciAlMSIsCisJCSJmeHJzdG9yICUxIiwKKwkJWDg2X0ZFQVRVUkVfRlhTUiwKKwkJIm0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSkpOworfQorCisvKiBXZSBuZWVkIGEgc2FmZSBhZGRyZXNzIHRoYXQgaXMgY2hlYXAgdG8gZmluZCBhbmQgdGhhdCBpcyBhbHJlYWR5CisgICBpbiBMMSBkdXJpbmcgY29udGV4dCBzd2l0Y2guIFRoZSBiZXN0IGNob2ljZXMgYXJlIHVuZm9ydHVuYXRlbHkKKyAgIGRpZmZlcmVudCBmb3IgVVAgYW5kIFNNUCAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc2FmZV9hZGRyZXNzIChfX3Blcl9jcHVfb2Zmc2V0WzBdKQorI2Vsc2UKKyNkZWZpbmUgc2FmZV9hZGRyZXNzIChrc3RhdF9jcHUoMCkuY3B1c3RhdC51c2VyKQorI2VuZGlmCisKKy8qCisgKiBUaGVzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgZGlzYWJsZWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2F2ZV9pbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19YU0FWRSkgeworCQlzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c3RhdGUgPSAmdHNrLT50aHJlYWQueHN0YXRlLT54c2F2ZTsKKwkJc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnggPSAmdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmU7CisKKwkJeHNhdmUodHNrKTsKKworCQkvKgorCQkgKiB4c2F2ZSBoZWFkZXIgbWF5IGluZGljYXRlIHRoZSBpbml0IHN0YXRlIG9mIHRoZSBGUC4KKwkJICovCisJCWlmICghKHhzdGF0ZS0+eHNhdmVfaGRyLnhzdGF0ZV9idiAmIFhTVEFURV9GUCkpCisJCQlnb3RvIGVuZDsKKworCQlpZiAodW5saWtlbHkoZngtPnN3ZCAmIFg4N19GU1dfRVMpKQorCQkJYXNtIHZvbGF0aWxlKCJmbmNsZXgiKTsKKworCQkvKgorCQkgKiB3ZSBjYW4gZG8gYSBzaW1wbGUgcmV0dXJuIGhlcmUgb3IgYmUgcGFyYW5vaWQgOikKKwkJICovCisJCWdvdG8gY2xlYXJfc3RhdGU7CisJfQorCisJLyogVXNlIG1vcmUgbm9wcyB0aGFuIHN0cmljdGx5IG5lZWRlZCBpbiBjYXNlIHRoZSBjb21waWxlcgorCSAgIHZhcmllcyBjb2RlICovCisJYWx0ZXJuYXRpdmVfaW5wdXQoCisJCSJmbnNhdmUgJVtmeF0gO2Z3YWl0OyIgR0VORVJJQ19OT1A4IEdFTkVSSUNfTk9QNCwKKwkJImZ4c2F2ZSAlW2Z4XVxuIgorCQkiYnQgJDcsJVtmc3ddIDsgam5jIDFmIDsgZm5jbGV4XG4xOiIsCisJCVg4Nl9GRUFUVVJFX0ZYU1IsCisJCVtmeF0gIm0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSksCisJCVtmc3ddICJtIiAodHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUuc3dkKSA6ICJtZW1vcnkiKTsKK2NsZWFyX3N0YXRlOgorCS8qIEFNRCBLNy9LOCBDUFVzIGRvbid0IHNhdmUvcmVzdG9yZSBGRFAvRklQL0ZPUCB1bmxlc3MgYW4gZXhjZXB0aW9uCisJICAgaXMgcGVuZGluZy4gIENsZWFyIHRoZSB4ODcgc3RhdGUgaGVyZSBieSBzZXR0aW5nIGl0IHRvIGZpeGVkCisJICAgdmFsdWVzLiBzYWZlX2FkZHJlc3MgaXMgYSByYW5kb20gdmFyaWFibGUgdGhhdCBzaG91bGQgYmUgaW4gTDEgKi8KKwlhbHRlcm5hdGl2ZV9pbnB1dCgKKwkJR0VORVJJQ19OT1A4IEdFTkVSSUNfTk9QMiwKKwkJImVtbXNcblx0IgkgIAkvKiBjbGVhciBzdGFjayB0YWdzICovCisJCSJmaWxkbCAlW2FkZHJdIiwgCS8qIHNldCBGP1AgdG8gZGVmaW5lZCB2YWx1ZSAqLworCQlYODZfRkVBVFVSRV9GWFNBVkVfTEVBSywKKwkJW2FkZHJdICJtIiAoc2FmZV9hZGRyZXNzKSk7CitlbmQ6CisJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qCisgKiBTaWduYWwgZnJhbWUgaGFuZGxlcnMuLi4KKyAqLworZXh0ZXJuIGludCBzYXZlX2kzODdfeHN0YXRlKHZvaWQgX191c2VyICpidWYpOworZXh0ZXJuIGludCByZXN0b3JlX2kzODdfeHN0YXRlKHZvaWQgX191c2VyICpidWYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX191bmxhenlfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1VTRURGUFUpIHsKKwkJX19zYXZlX2luaXRfZnB1KHRzayk7CisJCXN0dHMoKTsKKwl9IGVsc2UKKwkJdHNrLT5mcHVfY291bnRlciA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19VU0VERlBVKSB7CisJCXRvbGVyYW50X2Z3YWl0KCk7CisJCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICY9IH5UU19VU0VERlBVOworCQlzdHRzKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX2ZwdV9iZWdpbih2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqbWUgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKG1lLT5zdGF0dXMgJiBUU19VU0VERlBVKQorCQlfX3NhdmVfaW5pdF9mcHUobWUtPnRhc2spOworCWVsc2UKKwkJY2x0cygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX2ZwdV9lbmQodm9pZCkKK3sKKwlzdHRzKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworLyoKKyAqIFNvbWUgaW5zdHJ1Y3Rpb25zIGxpa2UgVklBJ3MgcGFkbG9jayBpbnN0cnVjdGlvbnMgZ2VuZXJhdGUgYSBzcHVyaW91cworICogRE5BIGZhdWx0IGJ1dCBkb24ndCBtb2RpZnkgU1NFIHJlZ2lzdGVycy4gQW5kIHRoZXNlIGluc3RydWN0aW9ucworICogZ2V0IHVzZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBhc3dlbGwuIFRvIHByZXZlbnQgdGhlc2Uga2VybmVsIGluc3RydWN0aW9ucworICogaW4gaW50ZXJydXB0IGNvbnRleHQgaW50ZXJhY3Qgd3JvbmdseSB3aXRoIG90aGVyIHVzZXIva2VybmVsIGZwdSB1c2FnZSwgd2UKKyAqIHNob3VsZCB1c2UgdGhlbSBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGlycV90c19zYXZlL3Jlc3RvcmUoKQorICovCitzdGF0aWMgaW5saW5lIGludCBpcnFfdHNfc2F2ZSh2b2lkKQoreworCS8qCisJICogSWYgd2UgYXJlIGluIHByb2Nlc3MgY29udGV4dCwgd2UgYXJlIG9rIHRvIHRha2UgYSBzcHVyaW91cyBETkEgZmF1bHQuCisJICogT3RoZXJ3aXNlLCBkb2luZyBjbHRzKCkgaW4gcHJvY2VzcyBjb250ZXh0IHJlcXVpcmUgcHJlLWVtcHRpb24gdG8KKwkgKiBiZSBkaXNhYmxlZCBvciBzb21lIGhlYXZ5IGxpZnRpbmcgbGlrZSBrZXJuZWxfZnB1X2JlZ2luKCkKKwkgKi8KKwlpZiAoIWluX2ludGVycnVwdCgpKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWFkX2NyMCgpICYgWDg2X0NSMF9UUykgeworCQljbHRzKCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3RzX3Jlc3RvcmUoaW50IFRTX3N0YXRlKQoreworCWlmIChUU19zdGF0ZSkKKwkJc3R0cygpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9pbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlfX3NhdmVfaW5pdF9mcHUodHNrKTsKKwlzdHRzKCk7Cit9CisKKyNkZWZpbmUgdW5sYXp5X2ZwdQlfX3VubGF6eV9mcHUKKyNkZWZpbmUgY2xlYXJfZnB1CV9fY2xlYXJfZnB1CisKKyNlbHNlICAvKiBDT05GSUdfWDg2XzMyICovCisKKy8qCisgKiBUaGVzZSBkaXNhYmxlIHByZWVtcHRpb24gb24gdGhlaXIgb3duIGFuZCBhcmUgc2FmZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9pbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfX3NhdmVfaW5pdF9mcHUodHNrKTsKKwlzdHRzKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubGF6eV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJX191bmxhenlfZnB1KHRzayk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfX2NsZWFyX2ZwdSh0c2spOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qCisgKiBpMzg3IHN0YXRlIGludGVyYWN0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZ2V0X2ZwdV9jd2Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKGNwdV9oYXNfZnhzcikgeworCQlyZXR1cm4gdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUuY3dkOworCX0gZWxzZSB7CisJCXJldHVybiAodW5zaWduZWQgc2hvcnQpdHNrLT50aHJlYWQueHN0YXRlLT5mc2F2ZS5jd2Q7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGdldF9mcHVfc3dkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmIChjcHVfaGFzX2Z4c3IpIHsKKwkJcmV0dXJuIHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLnN3ZDsKKwl9IGVsc2UgeworCQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KXRzay0+dGhyZWFkLnhzdGF0ZS0+ZnNhdmUuc3dkOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBnZXRfZnB1X214Y3NyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmIChjcHVfaGFzX3htbSkgeworCQlyZXR1cm4gdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUubXhjc3I7CisJfSBlbHNlIHsKKwkJcmV0dXJuIE1YQ1NSX0RFRkFVTFQ7CisJfQorfQorCisjZW5kaWYgLyogX0FTTV9YODZfSTM4N19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1My5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWRiZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTMuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fWDg2X0k4MjUzX0gKKyNkZWZpbmUgX0FTTV9YODZfSTgyNTNfSAorCisvKiBpODI1M0EgUElUIHJlZ2lzdGVycyAqLworI2RlZmluZSBQSVRfTU9ERQkJMHg0MworI2RlZmluZSBQSVRfQ0gwCQkJMHg0MAorI2RlZmluZSBQSVRfQ0gyCQkJMHg0MgorCitleHRlcm4gc3BpbmxvY2tfdCBpODI1M19sb2NrOworCitleHRlcm4gc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZ2xvYmFsX2Nsb2NrX2V2ZW50OworCitleHRlcm4gdm9pZCBzZXR1cF9waXRfdGltZXIodm9pZCk7CisKKyNkZWZpbmUgaW5iX3BpdAkJaW5iX3AKKyNkZWZpbmUgb3V0Yl9waXQJb3V0Yl9wCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JODI1M19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1OS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ3MDkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaApAQCAtMCwwICsxLDYzIEBACisjaWZuZGVmIF9BU01fWDg2X0k4MjU5X0gKKyNkZWZpbmUgX0FTTV9YODZfSTgyNTlfSAorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGludCBjYWNoZWRfaXJxX21hc2s7CisKKyNkZWZpbmUgX19ieXRlKHgsIHkpCQkoKCh1bnNpZ25lZCBjaGFyICopJih5KSlbeF0pCisjZGVmaW5lIGNhY2hlZF9tYXN0ZXJfbWFzawkoX19ieXRlKDAsIGNhY2hlZF9pcnFfbWFzaykpCisjZGVmaW5lIGNhY2hlZF9zbGF2ZV9tYXNrCShfX2J5dGUoMSwgY2FjaGVkX2lycV9tYXNrKSkKKworLyogaTgyNTlBIFBJQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUElDX01BU1RFUl9DTUQJCTB4MjAKKyNkZWZpbmUgUElDX01BU1RFUl9JTVIJCTB4MjEKKyNkZWZpbmUgUElDX01BU1RFUl9JU1IJCVBJQ19NQVNURVJfQ01ECisjZGVmaW5lIFBJQ19NQVNURVJfUE9MTAkJUElDX01BU1RFUl9JU1IKKyNkZWZpbmUgUElDX01BU1RFUl9PQ1czCQlQSUNfTUFTVEVSX0lTUgorI2RlZmluZSBQSUNfU0xBVkVfQ01ECQkweGEwCisjZGVmaW5lIFBJQ19TTEFWRV9JTVIJCTB4YTEKKworLyogaTgyNTlBIFBJQyByZWxhdGVkIHZhbHVlICovCisjZGVmaW5lIFBJQ19DQVNDQURFX0lSCQkyCisjZGVmaW5lIE1BU1RFUl9JQ1c0X0RFRkFVTFQJMHgwMQorI2RlZmluZSBTTEFWRV9JQ1c0X0RFRkFVTFQJMHgwMQorI2RlZmluZSBQSUNfSUNXNF9BRU9JCQkyCisKK2V4dGVybiBzcGlubG9ja190IGk4MjU5QV9sb2NrOworCitleHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSk7CitleHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdW5zaWduZWQgaW50IHN0YXJ0dXBfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisvKiB0aGUgUElDIG1heSBuZWVkIGEgY2FyZWZ1bCBkZWxheSBvbiBzb21lIHBsYXRmb3JtcywgaGVuY2Ugc3BlY2lmaWMgY2FsbHMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpbmJfcGljKHVuc2lnbmVkIGludCBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgdmFsdWUgPSBpbmIocG9ydCk7CisKKwkvKgorCSAqIGRlbGF5IGZvciBzb21lIGFjY2Vzc2VzIHRvIFBJQyBvbiBtb3RoZXJib2FyZCBvciBpbiBjaGlwc2V0CisJICogbXVzdCBiZSBhdCBsZWFzdCBvbmUgbWljcm9zZWNvbmQsIHNvIGJlIHNhZmUgaGVyZToKKwkgKi8KKwl1ZGVsYXkoMik7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRiX3BpYyh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwlvdXRiKHZhbHVlLCBwb3J0KTsKKwkvKgorCSAqIGRlbGF5IGZvciBzb21lIGFjY2Vzc2VzIHRvIFBJQyBvbiBtb3RoZXJib2FyZCBvciBpbiBjaGlwc2V0CisJICogbXVzdCBiZSBhdCBsZWFzdCBvbmUgbWljcm9zZWNvbmQsIHNvIGJlIHNhZmUgaGVyZToKKwkgKi8KKwl1ZGVsYXkoMik7Cit9CisKK2V4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgaTgyNTlBX2NoaXA7CisKK2V4dGVybiB2b2lkIG1hc2tfODI1OUEodm9pZCk7CitleHRlcm4gdm9pZCB1bm1hc2tfODI1OUEodm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JODI1OV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5ODljMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lhMzIuaApAQCAtMCwwICsxLDE3MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9JQTMyX0gKKyNkZWZpbmUgX0FTTV9YODZfSUEzMl9ICisKKworI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisKKy8qCisgKiAzMiBiaXQgc3RydWN0dXJlcyBmb3IgSUEzMiBzdXBwb3J0LgorICovCisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dDMyLmg+CisKKy8qIHNpZ25hbC5oICovCitzdHJ1Y3Qgc2lnYWN0aW9uMzIgeworCXVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbAorCQkJCQkgICB3aXRoIDMyIGJpdHMgKi8KKwl1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7CisJdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCisJY29tcGF0X3NpZ3NldF90IHNhX21hc2s7CS8qIEEgMzIgYml0IG1hc2sgKi8KK307CisKK3N0cnVjdCBvbGRfc2lnYWN0aW9uMzIgeworCXVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbAorCQkJCQkgICB3aXRoIDMyIGJpdHMgKi8KKwljb21wYXRfb2xkX3NpZ3NldF90IHNhX21hc2s7CS8qIEEgMzIgYml0IG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7CisJdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCit9OworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFja19pYTMyIHsKKwl1bnNpZ25lZCBpbnQJc3Nfc3A7CisJaW50CQlzc19mbGFnczsKKwl1bnNpZ25lZCBpbnQJc3Nfc2l6ZTsKK30gc3RhY2tfaWEzMl90OworCitzdHJ1Y3QgdWNvbnRleHRfaWEzMiB7CisJdW5zaWduZWQgaW50CSAgdWNfZmxhZ3M7CisJdW5zaWduZWQgaW50IAkgIHVjX2xpbms7CisJc3RhY2tfaWEzMl90CSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHRfaWEzMiB1Y19tY29udGV4dDsKKwljb21wYXRfc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4yLCBoZW5jZSB0aGUgYWJzb2x1dGVseQorICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KKyAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBjaGFyCQlfX3BhZDBbNF07CisKKyNkZWZpbmUgU1RBVDY0X0hBU19CUk9LRU5fU1RfSU5PCTEKKwl1bnNpZ25lZCBpbnQJCV9fc3RfaW5vOworCisJdW5zaWduZWQgaW50CQlzdF9tb2RlOworCXVuc2lnbmVkIGludAkJc3Rfbmxpbms7CisKKwl1bnNpZ25lZCBpbnQJCXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJCXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OworCXVuc2lnbmVkIGNoYXIJCV9fcGFkM1s0XTsKKworCWxvbmcgbG9uZwkJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCXN0X2Jsa3NpemU7CisKKwlsb25nIGxvbmcJCXN0X2Jsb2NrczsvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZCAqLworCisJdW5zaWduZWQgCQlzdF9hdGltZTsKKwl1bnNpZ25lZCAJCXN0X2F0aW1lX25zZWM7CisJdW5zaWduZWQgCQlzdF9tdGltZTsKKwl1bnNpZ25lZCAJCXN0X210aW1lX25zZWM7CisJdW5zaWduZWQgCQlzdF9jdGltZTsKKwl1bnNpZ25lZCAJCXN0X2N0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8geworCWludCBzaV9zaWdubzsKKwlpbnQgc2lfZXJybm87CisJaW50IHNpX2NvZGU7CisKKwl1bmlvbiB7CisJCWludCBfcGFkWygoMTI4IC8gc2l6ZW9mKGludCkpIC0gMyldOworCisJCS8qIGtpbGwoKSAqLworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLworCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9raWxsOworCisJCS8qIFBPU0lYLjFiIHRpbWVycyAqLworCQlzdHJ1Y3QgeworCQkJY29tcGF0X3RpbWVyX3QgX3RpZDsJLyogdGltZXIgaWQgKi8KKwkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KKwkJCWNvbXBhdF9zaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCisJCQlpbnQgX3N5c19wcml2YXRlOwkvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KKwkJCWludCBfb3ZlcnJ1bl9pbmNyOwkvKiBhbW91bnQgdG8gYWRkIHRvIG92ZXJydW4gKi8KKwkJfSBfdGltZXI7CisKKwkJLyogUE9TSVguMWIgc2lnbmFscyAqLworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLworCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLworCQkJY29tcGF0X3NpZ3ZhbF90IF9zaWd2YWw7CisJCX0gX3J0OworCisJCS8qIFNJR0NITEQgKi8KKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLworCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLworCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KKwkJCWNvbXBhdF9jbG9ja190IF91dGltZTsKKwkJCWNvbXBhdF9jbG9ja190IF9zdGltZTsKKwkJfSBfc2lnY2hsZDsKKworCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBpbnQgX2FkZHI7CS8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KKwkJfSBfc2lnZmF1bHQ7CisKKwkJLyogU0lHUE9MTCAqLworCQlzdHJ1Y3QgeworCQkJaW50IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KKwkJCWludCBfZmQ7CisJCX0gX3NpZ3BvbGw7CisJfSBfc2lmaWVsZHM7Cit9IGNvbXBhdF9zaWdpbmZvX3Q7CisKK3N0cnVjdCBzaWdmcmFtZTMyIHsKKwl1MzIgcHJldGNvZGU7CisJaW50IHNpZzsKKwlzdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIHNjOworCXN0cnVjdCBfZnBzdGF0ZV9pYTMyIGZwc3RhdGU7CisJdW5zaWduZWQgaW50IGV4dHJhbWFza1tfQ09NUEFUX05TSUdfV09SRFMtMV07Cit9OworCitzdHJ1Y3QgcnRfc2lnZnJhbWUzMiB7CisJdTMyIHByZXRjb2RlOworCWludCBzaWc7CisJdTMyIHBpbmZvOworCXUzMiBwdWM7CisJY29tcGF0X3NpZ2luZm9fdCBpbmZvOworCXN0cnVjdCB1Y29udGV4dF9pYTMyIHVjOworCXN0cnVjdCBfZnBzdGF0ZV9pYTMyIGZwc3RhdGU7Cit9OworCitzdHJ1Y3QgdXN0YXQzMiB7CisJX191MzIJCQlmX3RmcmVlOworCWNvbXBhdF9pbm9fdAkJZl90aW5vZGU7CisJY2hhcgkJCWZfZm5hbWVbNl07CisJY2hhcgkJCWZfZnBhY2tbNl07Cit9OworCisjZGVmaW5lIElBMzJfU1RBQ0tfVE9QIElBMzJfUEFHRV9PRkZTRVQKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBsaW51eF9iaW5wcm07CitleHRlcm4gaW50IGlhMzJfc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCisJCQkJdW5zaWduZWQgbG9uZyBzdGFja190b3AsIGludCBleGVjX3N0YWNrKTsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitleHRlcm4gdm9pZCBpYTMyX3BpY2tfbW1hcF9sYXlvdXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCisjZW5kaWYKKworI2VuZGlmIC8qICFDT05GSUdfSUEzMl9TVVBQT1JUICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JQTMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lhMzJfdW5pc3RkLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyX3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmY2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyX3VuaXN0ZC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX0FTTV9YODZfSUEzMl9VTklTVERfSAorI2RlZmluZSBfQVNNX1g4Nl9JQTMyX1VOSVNURF9ICisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMgb2YgdGhlIGlhMzIgcG9ydCwKKyAqIHRoaXMgaXMgZm9yIHRoZSBrZXJuZWwgb25seS4KKyAqIE9ubHkgYWRkIHN5c2NhbGxzIGhlcmUgd2hlcmUgc29tZSBwYXJ0IG9mIHRoZSBrZXJuZWwgbmVlZHMgdG8ga25vdworICogdGhlIG51bWJlci4gVGhpcyBzaG91bGQgYmUgb3RoZXJ3aXNlIGluIHN5bmMgd2l0aCBhc20teDg2L3VuaXN0ZF8zMi5oLiAtQUsKKyAqLworCisjZGVmaW5lIF9fTlJfaWEzMl9yZXN0YXJ0X3N5c2NhbGwgMAorI2RlZmluZSBfX05SX2lhMzJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfaWEzMl9yZWFkCQkgIDMKKyNkZWZpbmUgX19OUl9pYTMyX3dyaXRlCQkgIDQKKyNkZWZpbmUgX19OUl9pYTMyX3NpZ3JldHVybgkxMTkKKyNkZWZpbmUgX19OUl9pYTMyX3J0X3NpZ3JldHVybgkxNzMKKworI2VuZGlmIC8qIF9BU01fWDg2X0lBMzJfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lkbGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lkbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM4OWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaWRsZS5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0FTTV9YODZfSURMRV9ICisjZGVmaW5lIF9BU01fWDg2X0lETEVfSAorCisjZGVmaW5lIElETEVfU1RBUlQgMQorI2RlZmluZSBJRExFX0VORCAyCisKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKK3ZvaWQgaWRsZV9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pOwordm9pZCBpZGxlX25vdGlmaWVyX3VucmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKTsKKwordm9pZCBlbnRlcl9pZGxlKHZvaWQpOwordm9pZCBleGl0X2lkbGUodm9pZCk7CisKK3ZvaWQgYzFlX3JlbW92ZV9jcHUoaW50IGNwdSk7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JRExFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX2FyY2hfcGVyZm1vbi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW50ZWxfYXJjaF9wZXJmbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwZmQwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX2FyY2hfcGVyZm1vbi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU5URUxfQVJDSF9QRVJGTU9OX0gKKyNkZWZpbmUgX0FTTV9YODZfSU5URUxfQVJDSF9QRVJGTU9OX0gKKworI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwCQkweGMxCisjZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjEJCTB4YzIKKworI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMAkJMHgxODYKKyNkZWZpbmUgTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDEJCTB4MTg3CisKKyNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUJKDEgPDwgMjIpCisjZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9JTlQJKDEgPDwgMjApCisjZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUwkoMSA8PCAxNykKKyNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUgkoMSA8PCAxNikKKworI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfU0VMCSgweDNjKQorI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfVU1BU0sJKDB4MDAgPDwgOCkKKyNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYICgwKQorI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfUFJFU0VOVCBcCisJKDEgPDwgKEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19JTkRFWCkpCisKK3VuaW9uIGNwdWlkMTBfZWF4IHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgdmVyc2lvbl9pZDo4OworCQl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOjg7CisJCXVuc2lnbmVkIGludCBiaXRfd2lkdGg6ODsKKwkJdW5zaWduZWQgaW50IG1hc2tfbGVuZ3RoOjg7CisJfSBzcGxpdDsKKwl1bnNpZ25lZCBpbnQgZnVsbDsKK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JTlRFTF9BUkNIX1BFUkZNT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxOGExMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKQEAgLTAsMCArMSw5MSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9JT19ICisjZGVmaW5lIF9BU01fWDg2X0lPX0gKKworI2RlZmluZSBBUkNIX0hBU19JT1JFTUFQX1dDCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjZGVmaW5lIGJ1aWxkX21taW9fcmVhZChuYW1lLCBzaXplLCB0eXBlLCByZWcsIGJhcnJpZXIpIFwKK3N0YXRpYyBpbmxpbmUgdHlwZSBuYW1lKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikgXAoreyB0eXBlIHJldDsgYXNtIHZvbGF0aWxlKCJtb3YiIHNpemUgIiAlMSwlMCI6cmVnIChyZXQpIFwKKzoibSIgKCoodm9sYXRpbGUgdHlwZSBfX2ZvcmNlICopYWRkcikgYmFycmllcik7IHJldHVybiByZXQ7IH0KKworI2RlZmluZSBidWlsZF9tbWlvX3dyaXRlKG5hbWUsIHNpemUsIHR5cGUsIHJlZywgYmFycmllcikgXAorc3RhdGljIGlubGluZSB2b2lkIG5hbWUodHlwZSB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikgXAoreyBhc20gdm9sYXRpbGUoIm1vdiIgc2l6ZSAiICUwLCUxIjogOnJlZyAodmFsKSwgXAorIm0iICgqKHZvbGF0aWxlIHR5cGUgX19mb3JjZSAqKWFkZHIpIGJhcnJpZXIpOyB9CisKK2J1aWxkX21taW9fcmVhZChyZWFkYiwgImIiLCB1bnNpZ25lZCBjaGFyLCAiPXEiLCA6Im1lbW9yeSIpCitidWlsZF9tbWlvX3JlYWQocmVhZHcsICJ3IiwgdW5zaWduZWQgc2hvcnQsICI9ciIsIDoibWVtb3J5IikKK2J1aWxkX21taW9fcmVhZChyZWFkbCwgImwiLCB1bnNpZ25lZCBpbnQsICI9ciIsIDoibWVtb3J5IikKKworYnVpbGRfbW1pb19yZWFkKF9fcmVhZGIsICJiIiwgdW5zaWduZWQgY2hhciwgIj1xIiwgKQorYnVpbGRfbW1pb19yZWFkKF9fcmVhZHcsICJ3IiwgdW5zaWduZWQgc2hvcnQsICI9ciIsICkKK2J1aWxkX21taW9fcmVhZChfX3JlYWRsLCAibCIsIHVuc2lnbmVkIGludCwgIj1yIiwgKQorCitidWlsZF9tbWlvX3dyaXRlKHdyaXRlYiwgImIiLCB1bnNpZ25lZCBjaGFyLCAicSIsIDoibWVtb3J5IikKK2J1aWxkX21taW9fd3JpdGUod3JpdGV3LCAidyIsIHVuc2lnbmVkIHNob3J0LCAiciIsIDoibWVtb3J5IikKK2J1aWxkX21taW9fd3JpdGUod3JpdGVsLCAibCIsIHVuc2lnbmVkIGludCwgInIiLCA6Im1lbW9yeSIpCisKK2J1aWxkX21taW9fd3JpdGUoX193cml0ZWIsICJiIiwgdW5zaWduZWQgY2hhciwgInEiLCApCitidWlsZF9tbWlvX3dyaXRlKF9fd3JpdGV3LCAidyIsIHVuc2lnbmVkIHNob3J0LCAiciIsICkKK2J1aWxkX21taW9fd3JpdGUoX193cml0ZWwsICJsIiwgdW5zaWduZWQgaW50LCAiciIsICkKKworI2RlZmluZSByZWFkYl9yZWxheGVkKGEpIF9fcmVhZGIoYSkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKSBfX3JlYWR3KGEpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYSkgX19yZWFkbChhKQorI2RlZmluZSBfX3Jhd19yZWFkYiBfX3JlYWRiCisjZGVmaW5lIF9fcmF3X3JlYWR3IF9fcmVhZHcKKyNkZWZpbmUgX19yYXdfcmVhZGwgX19yZWFkbAorCisjZGVmaW5lIF9fcmF3X3dyaXRlYiBfX3dyaXRlYgorI2RlZmluZSBfX3Jhd193cml0ZXcgX193cml0ZXcKKyNkZWZpbmUgX19yYXdfd3JpdGVsIF9fd3JpdGVsCisKKyNkZWZpbmUgbW1pb3diKCkgYmFycmllcigpCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitidWlsZF9tbWlvX3JlYWQocmVhZHEsICJxIiwgdW5zaWduZWQgbG9uZywgIj1yIiwgOiJtZW1vcnkiKQorYnVpbGRfbW1pb19yZWFkKF9fcmVhZHEsICJxIiwgdW5zaWduZWQgbG9uZywgIj1yIiwgKQorYnVpbGRfbW1pb193cml0ZSh3cml0ZXEsICJxIiwgdW5zaWduZWQgbG9uZywgInIiLCA6Im1lbW9yeSIpCitidWlsZF9tbWlvX3dyaXRlKF9fd3JpdGVxLCAicSIsIHVuc2lnbmVkIGxvbmcsICJyIiwgKQorCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkgX19yZWFkcShhKQorI2RlZmluZSBfX3Jhd19yZWFkcSBfX3JlYWRxCisjZGVmaW5lIF9fcmF3X3dyaXRlcSB3cml0ZXEKKworLyogTGV0IHBlb3BsZSBrbm93IHdlIGhhdmUgdGhlbSAqLworI2RlZmluZSByZWFkcSByZWFkcQorI2RlZmluZSB3cml0ZXEgd3JpdGVxCisjZW5kaWYKKworZXh0ZXJuIGludCBpb21tdV9iaW9fbWVyZ2U7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGluY2x1ZGUgImlvXzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJpb182NC5oIgorI2VuZGlmCisKK2V4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOworZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpOworCitleHRlcm4gaW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgcHJvdF92YWwpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF93Yyh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoKKyAqIGVhcmx5X2lvcmVtYXAoKSBhbmQgZWFybHlfaW91bm1hcCgpIGFyZSBmb3IgdGVtcG9yYXJ5IGVhcmx5IGJvb3QtdGltZQorICogbWFwcGluZ3MsIGJlZm9yZSB0aGUgcmVhbCBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4KKyAqIEEgYm9vdC10aW1lIG1hcHBpbmcgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gYXQgbW9zdCAxNiBwYWdlcy4KKyAqLworZXh0ZXJuIHZvaWQgZWFybHlfaW9yZW1hcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfaW9yZW1hcF9jbGVhcih2b2lkKTsKK2V4dGVybiB2b2lkIGVhcmx5X2lvcmVtYXBfcmVzZXQodm9pZCk7CitleHRlcm4gdm9pZCAqZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkICplYXJseV9tZW1yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGVhcmx5X2lvdW5tYXAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmZpeF9pb3JlbWFwKHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgbG9uZyBwaHlzKTsKKworCisjZW5kaWYgLyogX0FTTV9YODZfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlMjQyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKQEAgLTAsMCArMSwyODQgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU9fMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9JT18zMl9ICisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIHg4NiBJTyBpbnN0cnVjdGlvbnMKKyAqIGluYi9pbncvaW5sL291dGIvb3V0dy9vdXRsIGFuZCB0aGUgInN0cmluZyB2ZXJzaW9ucyIgb2YgdGhlIHNhbWUKKyAqIChpbnNiL2luc3cvaW5zbC9vdXRzYi9vdXRzdy9vdXRzbCkuIFlvdSBjYW4gYWxzbyB1c2UgInBhdXNpbmciCisgKiB2ZXJzaW9ucyBvZiB0aGUgc2luZ2xlLUlPIGluc3RydWN0aW9ucyAoaW5iX3AvaW53X3AvLi4pLgorICoKKyAqIFRoaXMgZmlsZSBpcyBub3QgbWVhbnQgdG8gYmUgb2JmdXNjYXRpbmc6IGl0J3MganVzdCBjb21wbGljYXRlZAorICogdG8gKGEpIGhhbmRsZSBpdCBhbGwgaW4gYSB3YXkgdGhhdCBtYWtlcyBnY2MgYWJsZSB0byBvcHRpbWl6ZSBpdAorICogYXMgd2VsbCBhcyBwb3NzaWJsZSBhbmQgKGIpIHRyeWluZyB0byBhdm9pZCB3cml0aW5nIHRoZSBzYW1lIHRoaW5nCisgKiBvdmVyIGFuZCBvdmVyIGFnYWluIHdpdGggc2xpZ2h0IHZhcmlhdGlvbnMgYW5kIHBvc3NpYmx5IG1ha2luZyBhCisgKiBtaXN0YWtlIHNvbWV3aGVyZS4KKyAqLworCisvKgorICogVGhhbmtzIHRvIEphbWVzIHZhbiBBcnRzZGFsZW4gZm9yIGEgYmV0dGVyIHRpbWluZy1maXggdGhhbgorICogdGhlIHR3byBzaG9ydCBqdW1wczogdXNpbmcgb3V0YidzIHRvIGEgbm9uZXhpc3RlbnQgcG9ydCBzZWVtcworICogdG8gZ3VhcmFudGVlIGJldHRlciB0aW1pbmdzIGV2ZW4gb24gZmFzdCBtYWNoaW5lcy4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgSSdkIGxpa2UgdG8gYmUgc3VyZSBvZiBhIG5vbi1leGlzdGVudCBwb3J0OgorICogSSBmZWVsIGEgYml0IHVuc2FmZSBhYm91dCB1c2luZyAweDgwIChzaG91bGQgYmUgc2FmZSwgdGhvdWdoKQorICoKKyAqCQlMaW51cworICovCisKKyAvKgorICAqICBCaXQgc2ltcGxpZmllZCBhbmQgb3B0aW1pemVkIGJ5IEphbiBIdWJpY2thCisgICogIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5LgorICAqCisgICogIGlzYV9tZW1zZXRfaW8sIGlzYV9tZW1jcHlfZnJvbWlvLCBpc2FfbWVtY3B5X3RvaW8gYWRkZWQsCisgICogIGlzYV9yZWFkW3dsXSBhbmQgaXNhX3dyaXRlW3dsXSBmaXhlZAorICAqICAtIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgorICAqLworCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgorCisjZGVmaW5lIFhRVUFEX1BPUlRJT19CQVNFIDB4ZmU0MDAwMDAKKyNkZWZpbmUgWFFVQURfUE9SVElPX1FVQUQgMHg0MDAwMCAgLyogMjU2ayBwZXIgcXVhZC4gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworLyoqCisgKgl2aXJ0X3RvX3BoeXMJLQltYXAgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwKKyAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCisgKgorICoJVGhlIHJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MgaXMgdGhlIHBoeXNpY2FsIChDUFUpIG1hcHBpbmcgZm9yCisgKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KKyAqCWFkZHJlc3NlcyBkaXJlY3RseSBtYXBwZWQgb3IgYWxsb2NhdGVkIHZpYSBrbWFsbG9jLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZ2l2ZSBidXMgbWFwcGluZ3MgZm9yIERNQSB0cmFuc2ZlcnMuIEluCisgKglhbG1vc3QgYWxsIGNvbmNlaXZhYmxlIGNhc2VzIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGJlIHVzaW5nCisgKgl0aGlzIGZ1bmN0aW9uCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKQoreworCXJldHVybiBfX3BhKGFkZHJlc3MpOworfQorCisvKioKKyAqCXBoeXNfdG9fdmlydAktCW1hcCBwaHlzaWNhbCBhZGRyZXNzIHRvIHZpcnR1YWwKKyAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCisgKgorICoJVGhlIHJldHVybmVkIHZpcnR1YWwgYWRkcmVzcyBpcyBhIGN1cnJlbnQgQ1BVIG1hcHBpbmcgZm9yCisgKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KKyAqCWFkZHJlc3NlcyB0aGF0IGhhdmUgYSBrZXJuZWwgbWFwcGluZworICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqCXRoaXMgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgKnBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIF9fdmEoYWRkcmVzcyk7Cit9CisKKy8qCisgKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgorICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAoKGRtYV9hZGRyX3QpcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKKworLyoqCisgKiBpb3JlbWFwICAgICAtICAgbWFwIGJ1cyBtZW1vcnkgaW50byBDUFUgc3BhY2UKKyAqIEBvZmZzZXQ6ICAgIGJ1cyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKyAqIEBzaXplOiAgICAgIHNpemUgb2YgdGhlIHJlc291cmNlIHRvIG1hcAorICoKKyAqIGlvcmVtYXAgcGVyZm9ybXMgYSBwbGF0Zm9ybSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHRvCisgKiBtYWtlIGJ1cyBtZW1vcnkgQ1BVIGFjY2Vzc2libGUgdmlhIHRoZSByZWFkYi9yZWFkdy9yZWFkbC93cml0ZWIvCisgKiB3cml0ZXcvd3JpdGVsIGZ1bmN0aW9ucyBhbmQgdGhlIG90aGVyIG1taW8gaGVscGVycy4gVGhlIHJldHVybmVkCisgKiBhZGRyZXNzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHVzYWJsZSBkaXJlY3RseSBhcyBhIHZpcnR1YWwKKyAqIGFkZHJlc3MuCisgKgorICogSWYgdGhlIGFyZWEgeW91IGFyZSB0cnlpbmcgdG8gbWFwIGlzIGEgUENJIEJBUiB5b3Ugc2hvdWxkIGhhdmUgYQorICogbG9vayBhdCBwY2lfaW9tYXAoKS4KKyAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3Byb3QocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgcHJvdF92YWwpOworCisvKgorICogVGhlIGRlZmF1bHQgaW9yZW1hcCgpIGJlaGF2aW9yIGlzIG5vbi1jYWNoZWQ6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSk7Cit9CisKK2V4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKworLyoKKyAqIElTQSBJL08gYnVzIG1lbW9yeSBhZGRyZXNzZXMgYXJlIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgorICovCisjZGVmaW5lIGlzYV92aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgaXNhX3BhZ2VfdG9fYnVzIHBhZ2VfdG9fcGh5cworI2RlZmluZSBpc2FfYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0CisKKy8qCisgKiBIb3dldmVyIFBDSSBvbmVzIGFyZSBub3QgbmVjZXNzYXJpbHkgMToxIGFuZCB0aGVyZWZvcmUgdGhlc2UgaW50ZXJmYWNlcworICogYXJlIGZvcmJpZGRlbiBpbiBwb3J0YWJsZSBQQ0kgZHJpdmVycy4KKyAqCisgKiBBbGxvdyB0aGVtIG9uIHg4NiBmb3IgbGVnYWN5IGRyaXZlcnMsIHRob3VnaC4KKyAqLworI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIGludCBjb3VudCkKK3sKKwltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgaW50IGNvdW50KQoreworCV9fbWVtY3B5KGRzdCwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXNyYywgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjb3VudCkKK3sKKwlfX21lbWNweSgodm9pZCBfX2ZvcmNlICopZHN0LCBzcmMsIGNvdW50KTsKK30KKworLyoKKyAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KKyAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCisgKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCisgKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCisgKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQorICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6CisgKi8KKyNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCisKKy8qCisgKglDYWNoZSBtYW5hZ2VtZW50CisgKgorICoJVGhpcyBuZWVkZWQgZm9yIHR3byBjYXNlcworICoJMS4gT3V0IG9mIG9yZGVyIGF3YXJlIHByb2Nlc3NvcnMKKyAqCTIuIEFjY2lkZW50YWxseSBvdXQgb2Ygb3JkZXIgcHJvY2Vzc29ycyAoUFBybyBlcnJhdGEgIzUxKQorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF93cml0ZV9idWZmZXJzKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOworfQorCisjZWxzZQorCisjZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitleHRlcm4gdm9pZCBuYXRpdmVfaW9fZGVsYXkodm9pZCk7CisKK2V4dGVybiBpbnQgaW9fZGVsYXlfdHlwZTsKK2V4dGVybiB2b2lkIGlvX2RlbGF5X2luaXQodm9pZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd25faW8odm9pZCkKK3sKKwluYXRpdmVfaW9fZGVsYXkoKTsKKyNpZmRlZiBSRUFMTFlfU0xPV19JTworCW5hdGl2ZV9pb19kZWxheSgpOworCW5hdGl2ZV9pb19kZWxheSgpOworCW5hdGl2ZV9pb19kZWxheSgpOworI2VuZGlmCit9CisKKyNlbmRpZgorCisjZGVmaW5lIF9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKK3sJCQkJCQkJCVwKKwlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQlcCit7CQkJCQkJCQlcCisJcmV0dXJuIGluIyNid2wjI19sb2NhbChwb3J0KTsJCQkJXAorfQorCisjZGVmaW5lIEJVSUxESU8oYndsLCBidywgdHlwZSkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAorewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIm91dCIgI2J3bCAiICUiICNidyAiMCwgJXcxIgkJXAorCQkgICAgIDogOiAiYSIodmFsdWUpLCAiTmQiKHBvcnQpKTsJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbChpbnQgcG9ydCkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHR5cGUgdmFsdWU7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIJCVwKKwkJICAgICA6ICI9YSIodmFsdWUpIDogIk5kIihwb3J0KSk7CQkJXAorCXJldHVybiB2YWx1ZTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKK3sJCQkJCQkJCQlcCisJb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7CQkJCQlcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsX3AoaW50IHBvcnQpCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCVwKKwlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAorCXJldHVybiB2YWx1ZTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK19fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCQlcCit7CQkJCQkJCQkJXAorCW91dCMjYndsKHZhbHVlLCBwb3J0KTsJCQkJCQlcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bChwb3J0KTsJCQkJXAorCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCisJcmV0dXJuIHZhbHVlOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bChpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgXAorewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoInJlcDsgb3V0cyIgI2J3bAkJCQkJXAorCQkgICAgIDogIitTIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOwkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bChpbnQgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkJXAorewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoInJlcDsgaW5zIiAjYndsCQkJCQlcCisJCSAgICAgOiAiK0QiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCit9CisKK0JVSUxESU8oYiwgYiwgY2hhcikKK0JVSUxESU8odywgdywgc2hvcnQpCitCVUlMRElPKGwsICwgaW50KQorCisjZW5kaWYgLyogX0FTTV9YODZfSU9fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhMzI1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKQEAgLTAsMCArMSwyNDQgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU9fNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9JT182NF9ICisKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCisgKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCisgKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgorICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKKyAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKKyAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZworICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQorICogbWlzdGFrZSBzb21ld2hlcmUuCisgKi8KKworLyoKKyAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KKyAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKKyAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCisgKgorICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKKyAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKKyAqCisgKgkJTGludXMKKyAqLworCisgLyoKKyAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQorICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KKyAgKgorICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAorICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKKyAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAgKi8KKworZXh0ZXJuIHZvaWQgbmF0aXZlX2lvX2RlbGF5KHZvaWQpOworCitleHRlcm4gaW50IGlvX2RlbGF5X3R5cGU7CitleHRlcm4gdm9pZCBpb19kZWxheV9pbml0KHZvaWQpOworCisjaWYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duX2lvKHZvaWQpCit7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisjaWZkZWYgUkVBTExZX1NMT1dfSU8KKwluYXRpdmVfaW9fZGVsYXkoKTsKKwluYXRpdmVfaW9fZGVsYXkoKTsKKwluYXRpdmVfaW9fZGVsYXkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qCisgKiBUYWxrIGFib3V0IG1pc3VzaW5nIG1hY3Jvcy4uCisgKi8KKyNkZWZpbmUgX19PVVQxKHMsIHgpCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI3ModW5zaWduZWQgeCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCkgeworCisjZGVmaW5lIF9fT1VUMihzLCBzMSwgczIpCQkJCVwKK2FzbSB2b2xhdGlsZSAoIm91dCIgI3MgIiAlIiBzMSAiMCwlIiBzMiAiMSIKKworI2lmbmRlZiBSRUFMTFlfU0xPV19JTworI2RlZmluZSBSRUFMTFlfU0xPV19JTworI2RlZmluZSBVTlNFVF9SRUFMTFlfU0xPV19JTworI2VuZGlmCisKKyNkZWZpbmUgX19PVVQocywgczEsIHgpCQkJCQkJCVwKKwlfX09VVDEocywgeCkgX19PVVQyKHMsIHMxLCAidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOwlcCisJfQkJCQkJCQkJXAorCV9fT1VUMShzIyNfcCwgeCkgX19PVVQyKHMsIHMxLCAidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyBcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKK30KKworI2RlZmluZSBfX0lOMShzKQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIFJFVFVSTl9UWVBFIGluIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQpCQkJXAorewkJCQkJCQkJCVwKKwlSRVRVUk5fVFlQRSBfdjsKKworI2RlZmluZSBfX0lOMihzLCBzMSwgczIpCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoImluIiAjcyAiICUiIHMyICIxLCUiIHMxICIwIgorCisjZGVmaW5lIF9fSU4ocywgczEsIGkuLi4pCQkJCQkJXAorCV9fSU4xKHMpIF9fSU4yKHMsIHMxLCAidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCksICMjaSk7CVwKKwlyZXR1cm4gX3Y7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19JTjEocyMjX3ApIF9fSU4yKHMsIHMxLCAidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCksICMjaSk7CVwKKwlzbG93X2Rvd25faW8oKTsgXAorCXJldHVybiBfdjsgfQorCisjaWZkZWYgVU5TRVRfUkVBTExZX1NMT1dfSU8KKyN1bmRlZiBSRUFMTFlfU0xPV19JTworI2VuZGlmCisKKyNkZWZpbmUgX19JTlMocykJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIGlucyMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICphZGRyLAkJXAorCQkJICB1bnNpZ25lZCBsb25nIGNvdW50KQkJCQlcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoInJlcCA7IGlucyIgI3MJCQkJCVwKKwkJICAgICAgOiAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJXAorCQkgICAgICA6ICJkIiAocG9ydCksICIwIiAoYWRkciksICIxIiAoY291bnQpKTsJCVwKK30KKworI2RlZmluZSBfX09VVFMocykJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dHMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwJXAorCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAorewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJyZXAgOyBvdXRzIiAjcwkJCQkJXAorCQkgICAgICA6ICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJCQlcCisJCSAgICAgIDogImQiIChwb3J0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkpOwkJXAorfQorCisjZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGNoYXIKK19fSU4oYiwgIiIpCisjdW5kZWYgUkVUVVJOX1RZUEUKKyNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgc2hvcnQKK19fSU4odywgIiIpCisjdW5kZWYgUkVUVVJOX1RZUEUKKyNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgaW50CitfX0lOKGwsICIiKQorI3VuZGVmIFJFVFVSTl9UWVBFCisKK19fT1VUKGIsICJiIiwgY2hhcikKK19fT1VUKHcsICJ3Iiwgc2hvcnQpCitfX09VVChsLCAsIGludCkKKworX19JTlMoYikKK19fSU5TKHcpCitfX0lOUyhsKQorCitfX09VVFMoYikKK19fT1VUUyh3KQorX19PVVRTKGwpCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2lmbmRlZiBfX2kzODZfXworLyoKKyAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgorICogVGhlc2UgYXJlIHByZXR0eSB0cml2aWFsCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKK3sKKwlyZXR1cm4gX19wYShhZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBfX3ZhKGFkZHJlc3MpOworfQorI2VuZGlmCisKKy8qCisgKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgorICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAoKGRtYV9hZGRyX3QpcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+CisKKy8qCisgKiBUaGlzIG9uZSBtYXBzIGhpZ2ggYWRkcmVzcyBkZXZpY2UgbWVtb3J5IGFuZCB0dXJucyBvZmYgY2FjaGluZyBmb3IgdGhhdCBhcmVhLgorICogaXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZCB3cml0ZSBjb21iaW5pbmcKKyAqIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgorICovCitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCk7CisKKy8qCisgKiBUaGUgZGVmYXVsdCBpb3JlbWFwKCkgYmVoYXZpb3IgaXMgbm9uLWNhY2hlZDoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKK30KKworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworCitleHRlcm4gdm9pZCBfX2lvbWVtICpmaXhfaW9yZW1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cyk7CisKKy8qCisgKiBJU0EgSS9PIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KKyAqLworI2RlZmluZSBpc2FfdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGlzYV9wYWdlX3RvX2J1cyBwYWdlX3RvX3BoeXMKKyNkZWZpbmUgaXNhX2J1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisvKgorICogSG93ZXZlciBQQ0kgb25lcyBhcmUgbm90IG5lY2Vzc2FyaWx5IDE6MSBhbmQgdGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMKKyAqIGFyZSBmb3JiaWRkZW4gaW4gcG9ydGFibGUgUENJIGRyaXZlcnMuCisgKgorICogQWxsb3cgdGhlbSBvbiB4ODYgZm9yIGxlZ2FjeSBkcml2ZXJzLCB0aG91Z2guCisgKi8KKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCit2b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKK3ZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKKworc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwKKwkJCQkgdW5zaWduZWQgbGVuKQoreworCV9fbWVtY3B5X2Zyb21pbyh0bywgKHVuc2lnbmVkIGxvbmcpZnJvbSwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCisJCQkgICAgICAgdW5zaWduZWQgbGVuKQoreworCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIGxlbik7Cit9CisKK3ZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKTsKKworLyoKKyAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KKyAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCisgKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCisgKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCisgKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQorICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6CisgKi8KKyNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCisKKyNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCisKKyNkZWZpbmUgQklPX1ZNRVJHRV9CT1VOREFSWSBpb21tdV9iaW9fbWVyZ2UKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfSU9fNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmQ5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKQEAgLTAsMCArMSwyMDQgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU9fQVBJQ19ICisjZGVmaW5lIF9BU01fWDg2X0lPX0FQSUNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KKworLyoKKyAqIEludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgU01QIGFuZCBVUCBzeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBJbmdvIE1vbG5hcgorICovCisKKy8qIEkvTyBVbml0IFJlZGlyZWN0aW9uIFRhYmxlICovCisjZGVmaW5lIElPX0FQSUNfUkVESVJfVkVDVE9SX01BU0sJMHgwMDBGRgorI2RlZmluZSBJT19BUElDX1JFRElSX0RFU1RfTE9HSUNBTAkweDAwODAwCisjZGVmaW5lIElPX0FQSUNfUkVESVJfREVTVF9QSFlTSUNBTAkweDAwMDAwCisjZGVmaW5lIElPX0FQSUNfUkVESVJfU0VORF9QRU5ESU5HCSgxIDw8IDEyKQorI2RlZmluZSBJT19BUElDX1JFRElSX1JFTU9URV9JUlIJKDEgPDwgMTQpCisjZGVmaW5lIElPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUgkoMSA8PCAxNSkKKyNkZWZpbmUgSU9fQVBJQ19SRURJUl9NQVNLRUQJCSgxIDw8IDE2KQorCisvKgorICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgSU8tQVBJQzoKKyAqLwordW5pb24gSU9fQVBJQ19yZWdfMDAgeworCXUzMglyYXc7CisJc3RydWN0IHsKKwkJdTMyCV9fcmVzZXJ2ZWRfMgk6IDE0LAorCQkJTFRTCQk6ICAxLAorCQkJZGVsaXZlcnlfdHlwZQk6ICAxLAorCQkJX19yZXNlcnZlZF8xCTogIDgsCisJCQlJRAkJOiAgODsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworfTsKKwordW5pb24gSU9fQVBJQ19yZWdfMDEgeworCXUzMglyYXc7CisJc3RydWN0IHsKKwkJdTMyCXZlcnNpb24JCTogIDgsCisJCQlfX3Jlc2VydmVkXzIJOiAgNywKKwkJCVBSUQkJOiAgMSwKKwkJCWVudHJpZXMJCTogIDgsCisJCQlfX3Jlc2VydmVkXzEJOiAgODsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworfTsKKwordW5pb24gSU9fQVBJQ19yZWdfMDIgeworCXUzMglyYXc7CisJc3RydWN0IHsKKwkJdTMyCV9fcmVzZXJ2ZWRfMgk6IDI0LAorCQkJYXJiaXRyYXRpb24JOiAgNCwKKwkJCV9fcmVzZXJ2ZWRfMQk6ICA0OworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJpdHM7Cit9OworCit1bmlvbiBJT19BUElDX3JlZ18wMyB7CisJdTMyCXJhdzsKKwlzdHJ1Y3QgeworCQl1MzIJYm9vdF9EVAkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMQk6IDMxOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJpdHM7Cit9OworCitlbnVtIGlvYXBpY19pcnFfZGVzdGluYXRpb25fdHlwZXMgeworCWRlc3RfRml4ZWQgPSAwLAorCWRlc3RfTG93ZXN0UHJpbyA9IDEsCisJZGVzdF9TTUkgPSAyLAorCWRlc3RfX3Jlc2VydmVkXzEgPSAzLAorCWRlc3RfTk1JID0gNCwKKwlkZXN0X0lOSVQgPSA1LAorCWRlc3RfX3Jlc2VydmVkXzIgPSA2LAorCWRlc3RfRXh0SU5UID0gNworfTsKKworc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgeworCV9fdTMyCXZlY3RvcgkJOiAgOCwKKwkJZGVsaXZlcnlfbW9kZQk6ICAzLAkvKiAwMDA6IEZJWEVECisJCQkJCSAqIDAwMTogbG93ZXN0IHByaW8KKwkJCQkJICogMTExOiBFeHRJTlQKKwkJCQkJICovCisJCWRlc3RfbW9kZQk6ICAxLAkvKiAwOiBwaHlzaWNhbCwgMTogbG9naWNhbCAqLworCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJcG9sYXJpdHkJOiAgMSwKKwkJaXJyCQk6ICAxLAorCQl0cmlnZ2VyCQk6ICAxLAkvKiAwOiBlZGdlLCAxOiBsZXZlbCAqLworCQltYXNrCQk6ICAxLAkvKiAwOiBlbmFibGVkLCAxOiBkaXNhYmxlZCAqLworCQlfX3Jlc2VydmVkXzIJOiAxNTsKKworCV9fdTMyCV9fcmVzZXJ2ZWRfMwk6IDI0LAorCQlkZXN0CQk6ICA4OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5IHsKKwlfX3U2NAl2ZWN0b3IJCTogOCwKKwkJemVybwkJOiAzLAorCQlpbmRleDIJCTogMSwKKwkJZGVsaXZlcnlfc3RhdHVzIDogMSwKKwkJcG9sYXJpdHkJOiAxLAorCQlpcnIJCTogMSwKKwkJdHJpZ2dlcgkJOiAxLAorCQltYXNrCQk6IDEsCisJCXJlc2VydmVkCTogMzEsCisJCWZvcm1hdAkJOiAxLAorCQlpbmRleAkJOiAxNTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisKKy8qCisgKiAjIG9mIElPLUFQSUNzIGFuZCAjIG9mIElSUSByb3V0aW5nIHJlZ2lzdGVycworICovCitleHRlcm4gaW50IG5yX2lvYXBpY3M7CitleHRlcm4gaW50IG5yX2lvYXBpY19yZWdpc3RlcnNbTUFYX0lPX0FQSUNTXTsKKworLyoKKyAqIE1QLUJJT1MgaXJxIGNvbmZpZ3VyYXRpb24gdGFibGUgc3RydWN0dXJlczoKKyAqLworCisjZGVmaW5lIE1QX01BWF9JT0FQSUNfUElOIDEyNworCitzdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyB7CisJdW5zaWduZWQgbG9uZyBtcF9hcGljYWRkcjsKKwl1bnNpZ25lZCBpbnQgbXBfYXBpY2lkOworCXVuc2lnbmVkIGNoYXIgbXBfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIG1wX2FwaWN2ZXI7CisJdW5zaWduZWQgY2hhciBtcF9mbGFnczsKK307CisKK3N0cnVjdCBtcF9jb25maWdfaW50c3JjIHsKKwl1bnNpZ25lZCBpbnQgbXBfZHN0YXBpYzsKKwl1bnNpZ25lZCBjaGFyIG1wX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcF9pcnF0eXBlOworCXVuc2lnbmVkIHNob3J0IG1wX2lycWZsYWc7CisJdW5zaWduZWQgY2hhciBtcF9zcmNidXM7CisJdW5zaWduZWQgY2hhciBtcF9zcmNidXNpcnE7CisJdW5zaWduZWQgY2hhciBtcF9kc3RpcnE7Cit9OworCisvKiBJL08gQVBJQyBlbnRyaWVzICovCitleHRlcm4gc3RydWN0IG1wX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOworCisvKiAjIG9mIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLworZXh0ZXJuIGludCBtcF9pcnFfZW50cmllczsKKworLyogTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCitleHRlcm4gc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOworCisvKiBub24tMCBpZiBkZWZhdWx0ICh0YWJsZS1sZXNzKSBNUCBjb25maWd1cmF0aW9uICovCitleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CisKKy8qIE9sZGVyIFNpUyBBUElDIHJlcXVpcmVzIHdlIHJld3JpdGUgdGhlIGluZGV4IHJlZ2lzdGVyICovCitleHRlcm4gaW50IHNpc19hcGljX2J1ZzsKKworLyogMSBpZiAibm9hcGljIiBib290IG9wdGlvbiBwYXNzZWQgKi8KK2V4dGVybiBpbnQgc2tpcF9pb2FwaWNfc2V0dXA7CisKKy8qIDEgaWYgdGhlIHRpbWVyIElSUSB1c2VzIHRoZSAnODI1OUEgVmlydHVhbCBXaXJlJyBtb2RlICovCitleHRlcm4gaW50IHRpbWVyX3Rocm91Z2hfODI1OTsKKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfaW9hcGljX3NldHVwKHZvaWQpCit7CisJc2tpcF9pb2FwaWNfc2V0dXAgPSAxOworfQorCisvKgorICogSWYgd2UgdXNlIHRoZSBJTy1BUElDIGZvciBJUlEgcm91dGluZywgZGlzYWJsZSBhdXRvbWF0aWMKKyAqIGFzc2lnbm1lbnQgb2YgUENJIElSUSdzLgorICovCisjZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIFwKKwkobXBfaXJxX2VudHJpZXMgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIGlvX2FwaWNfaXJxcykKKworI2lmZGVmIENPTkZJR19BQ1BJCitleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3VuaXF1ZV9pZChpbnQgaW9hcGljLCBpbnQgYXBpY19pZCk7CitleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaW50IGlvYXBpYyk7CitleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaW50IGlvYXBpYyk7CitleHRlcm4gaW50IGlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsCisJCQkJICAgaW50IGVkZ2VfbGV2ZWwsIGludCBhY3RpdmVfaGlnaF9sb3cpOworI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCisKK2V4dGVybiBpbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorZXh0ZXJuIGludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIHJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoaW50KTsKKyNlbmRpZgorCitleHRlcm4gaW50IHByb2JlX25yX2lycXModm9pZCk7CisKKyNlbHNlICAvKiAhQ09ORklHX1g4Nl9JT19BUElDICovCisjZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIDAKK3N0YXRpYyBjb25zdCBpbnQgdGltZXJfdGhyb3VnaF84MjU5ID0gMDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKSB7IH0KKworc3RhdGljIGlubGluZSBpbnQgcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCXJldHVybiBOUl9JUlFTOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JT19BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pb2N0bC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9jdGwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L2lvY3RsLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2lvY3RsLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ1YjIzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU9DVExTX0gKKyNkZWZpbmUgX0FTTV9YODZfSU9DVExTX0gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyIC8qIENsYXNoZXMgd2l0aCBTTkRDVExfVE1SX1NUQVJUIHNvdW5kIGlvY3RsICovCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisvKiAjZGVmaW5lIFRJT0NUVFlHU1RSVUNUIDB4NTQyNiAtIEZvcm1lciBkZWJ1Z2dpbmctb25seSBpb2N0bCAqLworI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVENHRVRTMgkJX0lPUignVCcsIDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsIDB4MkIsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsIDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsIDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVElPQ0dSUzQ4NQkweDU0MkUKKyNkZWZpbmUgVElPQ1NSUzQ4NQkweDU0MkYKKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkKKwkJCQkvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsIDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUQ0dFVFgJCTB4NTQzMiAvKiBTWVM1IFRDR0VUWCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRDU0VUWAkJMHg1NDMzCisjZGVmaW5lIFRDU0VUWEYJCTB4NTQzNAorI2RlZmluZSBUQ1NFVFhXCQkweDU0MzUKKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAKKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBUSU9DR0hBWUVTRVNQICAgMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVElPQ1NIQVlFU0VTUCAgIDB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEZJT1FTSVpFCTB4NTQ2MAorCisvKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLworI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0CisjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JT0NUTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tbXUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlMjhlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9JT01NVV9ICisjZGVmaW5lIF9BU01fWDg2X0lPTU1VX0gKKworZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3NodXRkb3duKHZvaWQpOworZXh0ZXJuIHZvaWQgbm9faW9tbXVfaW5pdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIG5vbW11X2RtYV9vcHM7CitleHRlcm4gaW50IGZvcmNlX2lvbW11LCBub19pb21tdTsKK2V4dGVybiBpbnQgaW9tbXVfZGV0ZWN0ZWQ7CitleHRlcm4gaW50IGRtYXJfZGlzYWJsZWQ7CitleHRlcm4gaW50IGZvcmJpZF9kYWM7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGlvbW11X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOworCisvKiAxMCBzZWNvbmRzICovCisjZGVmaW5lIERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgKChjeWNsZXNfdCkgdHNjX2toeioxMCoxMDAwKQorCisjaWZkZWYgQ09ORklHX0dBUlRfSU9NTVUKK2V4dGVybiBpbnQgZ2FydF9pb21tdV9hcGVydHVyZTsKK2V4dGVybiBpbnQgZ2FydF9pb21tdV9hcGVydHVyZV9hbGxvd2VkOworZXh0ZXJuIGludCBnYXJ0X2lvbW11X2FwZXJ0dXJlX2Rpc2FibGVkOworCitleHRlcm4gdm9pZCBlYXJseV9nYXJ0X2lvbW11X2NoZWNrKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2FydF9pb21tdV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2FydF9pb21tdV9zaHV0ZG93bih2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBnYXJ0X3BhcnNlX29wdGlvbnMoY2hhciAqKTsKK2V4dGVybiB2b2lkIGdhcnRfaW9tbXVfaG9sZV9pbml0KHZvaWQpOworCisjZWxzZQorI2RlZmluZSBnYXJ0X2lvbW11X2FwZXJ0dXJlICAgICAgICAgICAgMAorI2RlZmluZSBnYXJ0X2lvbW11X2FwZXJ0dXJlX2FsbG93ZWQgICAgMAorI2RlZmluZSBnYXJ0X2lvbW11X2FwZXJ0dXJlX2Rpc2FibGVkICAgMQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfZ2FydF9pb21tdV9jaGVjayh2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGdhcnRfaW9tbXVfaW5pdCh2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGdhcnRfaW9tbXVfc2h1dGRvd24odm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBnYXJ0X3BhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucykKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBnYXJ0X2lvbW11X2hvbGVfaW5pdCh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JT01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcGNidWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjc4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcGNidWYuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9BU01fWDg2X0lQQ0JVRl9ICisjZGVmaW5lIF9BU01fWDg2X0lQQ0JVRl9ICisKKy8qCisgKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIHg4NiBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0geworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkMzJfdAl1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAlnaWQ7CisJX19rZXJuZWxfdWlkMzJfdAljdWlkOworCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAkJc2VxOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JUENCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODlkZmZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXBpLmgKQEAgLTAsMCArMSwxMzggQEAKKyNpZm5kZWYgX0FTTV9YODZfSVBJX0gKKyNkZWZpbmUgX0FTTV9YODZfSVBJX0gKKworLyoKKyAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgorICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKKyAqCisgKiBHZW5lcmljIEFQSUMgSW50ZXJQcm9jZXNzb3IgSW50ZXJydXB0IGNvZGUuCisgKgorICogTW92ZWQgdG8gaW5jbHVkZSBmaWxlIGJ5IEphbWVzIENsZXZlcmRvbiBmcm9tCisgKiBhcmNoL3g4Ni02NC9rZXJuZWwvc21wLmMKKyAqCisgKiBDb3B5cmlnaHRzIGZyb20ga2VybmVsL3NtcC5jOgorICoKKyAqIChjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgorICogKGMpIDE5OTgtOTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKiAoYykgMjAwMiwyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KKyAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCisgKi8KKworI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRlYWwgd2l0aCBzZW5kaW5nIElQSXMgYmV0d2VlbiBDUFVzLgorICoKKyAqIFdlIHVzZSAnYnJvYWRjYXN0JywgQ1BVLT5DUFUgSVBJcyBhbmQgc2VsZi1JUElzIHRvby4KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3ByZXBhcmVfSUNSKHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvciwKKwkJCQkJIHVuc2lnbmVkIGludCBkZXN0KQoreworCXVuc2lnbmVkIGludCBpY3IgPSBzaG9ydGN1dCB8IGRlc3Q7CisKKwlzd2l0Y2ggKHZlY3RvcikgeworCWRlZmF1bHQ6CisJCWljciB8PSBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yOworCQlicmVhazsKKwljYXNlIE5NSV9WRUNUT1I6CisJCWljciB8PSBBUElDX0RNX05NSTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBpY3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcHJlcGFyZV9JQ1IyKHVuc2lnbmVkIGludCBtYXNrKQoreworCXJldHVybiBTRVRfQVBJQ19ERVNUX0ZJRUxEKG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX194YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJd2hpbGUgKG5hdGl2ZV9hcGljX21lbV9yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1kpCisJCWNwdV9yZWxheCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZW5kX0lQSV9zaG9ydGN1dCh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBkZXN0KQoreworCS8qCisJICogU3VidGxlLiBJbiB0aGUgY2FzZSBvZiB0aGUgJ25ldmVyIGRvIGRvdWJsZSB3cml0ZXMnIHdvcmthcm91bmQKKwkgKiB3ZSBoYXZlIHRvIGxvY2sgb3V0IGludGVycnVwdHMgdG8gYmUgc2FmZS4gIEFzIHdlIGRvbid0IGNhcmUKKwkgKiBvZiB0aGUgdmFsdWUgcmVhZCB3ZSB1c2UgYW4gYXRvbWljIHJtdyBhY2Nlc3MgdG8gYXZvaWQgY29zdGx5CisJICogY2xpL3N0aS4gIE90aGVyd2lzZSB3ZSB1c2UgYW4gZXZlbiBjaGVhcGVyIHNpbmdsZSBhdG9taWMgd3JpdGUKKwkgKiB0byB0aGUgQVBJQy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJLyoKKwkgKiBXYWl0IGZvciBpZGxlLgorCSAqLworCV9feGFwaWNfd2FpdF9pY3JfaWRsZSgpOworCisJLyoKKwkgKiBObyBuZWVkIHRvIHRvdWNoIHRoZSB0YXJnZXQgY2hpcCBmaWVsZAorCSAqLworCWNmZyA9IF9fcHJlcGFyZV9JQ1Ioc2hvcnRjdXQsIHZlY3RvciwgZGVzdCk7CisKKwkvKgorCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgorCSAqLworCW5hdGl2ZV9hcGljX21lbV93cml0ZShBUElDX0lDUiwgY2ZnKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBzZW5kIGFuIElQSSB3aXRoIG5vIHNob3J0aGFuZCBub3RhdGlvbiAodGhlIGRlc3RpbmF0aW9uIGlzCisgKiBzcGVjaWZpZWQgaW4gYml0cyA1NiB0byA2MyBvZiB0aGUgSUNSKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2VuZF9JUElfZGVzdF9maWVsZCh1bnNpZ25lZCBpbnQgbWFzaywgaW50IHZlY3RvciwKKwkJCQkJIHVuc2lnbmVkIGludCBkZXN0KQoreworCXVuc2lnbmVkIGxvbmcgY2ZnOworCisJLyoKKwkgKiBXYWl0IGZvciBpZGxlLgorCSAqLworCWlmICh1bmxpa2VseSh2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikpCisJCXNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7CisJZWxzZQorCQlfX3hhcGljX3dhaXRfaWNyX2lkbGUoKTsKKworCS8qCisJICogcHJlcGFyZSB0YXJnZXQgY2hpcCBmaWVsZAorCSAqLworCWNmZyA9IF9fcHJlcGFyZV9JQ1IyKG1hc2spOworCW5hdGl2ZV9hcGljX21lbV93cml0ZShBUElDX0lDUjIsIGNmZyk7CisKKwkvKgorCSAqIHByb2dyYW0gdGhlIElDUgorCSAqLworCWNmZyA9IF9fcHJlcGFyZV9JQ1IoMCwgdmVjdG9yLCBkZXN0KTsKKworCS8qCisJICogU2VuZCB0aGUgSVBJLiBUaGUgd3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuCisJICovCisJbmF0aXZlX2FwaWNfbWVtX3dyaXRlKEFQSUNfSUNSLCBjZmcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCisJLyoKKwkgKiBIYWNrLiBUaGUgY2x1c3RlcmVkIEFQSUMgYWRkcmVzc2luZyBtb2RlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZAorCSAqIHRvIGFuIGFyYml0cmFyeSBtYXNrLCBzbyBJIGRvIGEgdW5pY2FzdCB0byBlYWNoIENQVSBpbnN0ZWFkLgorCSAqIC0gbWJsaWdoCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvcl9lYWNoX2NwdV9tYXNrX25yKHF1ZXJ5X2NwdSwgbWFzaykgeworCQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKKwkJCQkgICAgICB2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X0lQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTBlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9BU01fWDg2X0lSUV9ICisjZGVmaW5lIF9BU01fWDg2X0lSUV9ICisvKgorICoJKEMpIDE5OTIsIDE5OTMgTGludXMgVG9ydmFsZHMsIChDKSAxOTk3IEluZ28gTW9sbmFyCisgKgorICoJSVJRL0lQSSBjaGFuZ2VzIHRha2VuIGZyb20gd29yayBieSBUaG9tYXMgUmFka2UKKyAqCTx0b21zb2Z0QGluZm9ybWF0aWsudHUtY2hlbW5pdHouZGU+CisgKi8KKworI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CisjaW5jbHVkZSA8YXNtL2lycV92ZWN0b3JzLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gKChpcnEgPT0gMikgPyA5IDogaXJxKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworIyBkZWZpbmUgQVJDSF9IQVNfTk1JX1dBVENIRE9HCisjZW5kaWYKKworI2lmZGVmIENPTkZJR180S1NUQUNLUworICBleHRlcm4gdm9pZCBpcnFfY3R4X2luaXQoaW50IGNwdSk7CisgIGV4dGVybiB2b2lkIGlycV9jdHhfZXhpdChpbnQgY3B1KTsKKyMgZGVmaW5lIF9fQVJDSF9IQVNfRE9fU09GVElSUQorI2Vsc2UKKyMgZGVmaW5lIGlycV9jdHhfaW5pdChjcHUpIGRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGlycV9jdHhfZXhpdChjcHUpIGRvIHsgfSB3aGlsZSAoMCkKKyMgaWZkZWYgQ09ORklHX1g4Nl82NAorIyAgZGVmaW5lIF9fQVJDSF9IQVNfRE9fU09GVElSUQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVJRQkFMQU5DRQorZXh0ZXJuIGludCBpcnFiYWxhbmNlX2Rpc2FibGUoY2hhciAqc3RyKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorZXh0ZXJuIHZvaWQgZml4dXBfaXJxcyhjcHVtYXNrX3QgbWFwKTsKKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgaW50IGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBpbml0X0lSUSh2b2lkKTsKK2V4dGVybiB2b2lkIG5hdGl2ZV9pbml0X0lSUSh2b2lkKTsKKworLyogSW50ZXJydXB0IHZlY3RvciBtYW5hZ2VtZW50ICovCitleHRlcm4gREVDTEFSRV9CSVRNQVAodXNlZF92ZWN0b3JzLCBOUl9WRUNUT1JTKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaXJxX3JlZ3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9pcnFfcmVncy5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVncy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVnc18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3NfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjJmMDJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3NfMzIuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogUGVyLWNwdSBjdXJyZW50IGZyYW1lIHBvaW50ZXIgLSB0aGUgbG9jYXRpb24gb2YgdGhlIGxhc3QgZXhjZXB0aW9uIGZyYW1lIG9uCisgKiB0aGUgc3RhY2ssIHN0b3JlZCBpbiB0aGUgcGVyLWNwdSBhcmVhLgorICoKKyAqIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUBnb29wLm9yZz4KKyAqLworI2lmbmRlZiBfQVNNX1g4Nl9JUlFfUkVHU18zMl9ICisjZGVmaW5lIF9BU01fWDg2X0lSUV9SRUdTXzMyX0gKKworI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzICosIGlycV9yZWdzKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRfcmVncyAqZ2V0X2lycV9yZWdzKHZvaWQpCit7CisJcmV0dXJuIHg4Nl9yZWFkX3BlcmNwdShpcnFfcmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB0X3JlZ3MgKnNldF9pcnFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqbmV3X3JlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOworCisJb2xkX3JlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKwl4ODZfd3JpdGVfcGVyY3B1KGlycV9yZWdzLCBuZXdfcmVncyk7CisKKwlyZXR1cm4gb2xkX3JlZ3M7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JUlFfUkVHU18zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaXJxX3JlZ3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzXzY0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9pcnFfcmVnc182NC5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVnc182NC5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlMWZkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0FTTV9YODZfSVJRX1JFTUFQUElOR19ICisjZGVmaW5lIF9BU01fWDg2X0lSUV9SRU1BUFBJTkdfSAorCitleHRlcm4gaW50IHgyYXBpYzsKKworI2RlZmluZSBJUlRFX0RFU1QoZGVzdCkgKCh4MmFwaWMpID8gZGVzdCA6IGRlc3QgPDwgOCkKKworI2VuZGlmCS8qIF9BU01fWDg2X0lSUV9SRU1BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0M2VkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKQEAgLTAsMCArMSwxNjQgQEAKKyNpZm5kZWYgX0FTTV9YODZfSVJRX1ZFQ1RPUlNfSAorI2RlZmluZSBfQVNNX1g4Nl9JUlFfVkVDVE9SU19ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKKyNkZWZpbmUgTk1JX1ZFQ1RPUgkJMHgwMgorCisvKgorICogSURUIHZlY3RvcnMgdXNhYmxlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyBzdGFydAorICogYXQgMHgyMDoKKyAqLworI2RlZmluZSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IJMHgyMAorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgU1lTQ0FMTF9WRUNUT1IJCTB4ODAKKyNlbHNlCisjIGRlZmluZSBJQTMyX1NZU0NBTExfVkVDVE9SCTB4ODAKKyNlbmRpZgorCisvKgorICogUmVzZXJ2ZSB0aGUgbG93ZXN0IHVzYWJsZSBwcmlvcml0eSBsZXZlbCAweDIwIC0gMHgyZiBmb3IgdHJpZ2dlcmluZworICogY2xlYW51cCBhZnRlciBpcnEgbWlncmF0aW9uLgorICovCisjZGVmaW5lIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SCUZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgorCisvKgorICogVmVjdG9ycyAweDMwLTB4M2YgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgorICovCisjZGVmaW5lIElSUTBfVkVDVE9SCQkoRklSU1RfRVhURVJOQUxfVkVDVE9SICsgMHgxMCkKKyNkZWZpbmUgSVJRMV9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDEpCisjZGVmaW5lIElSUTJfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAyKQorI2RlZmluZSBJUlEzX1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgMykKKyNkZWZpbmUgSVJRNF9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDQpCisjZGVmaW5lIElSUTVfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA1KQorI2RlZmluZSBJUlE2X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgNikKKyNkZWZpbmUgSVJRN19WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDcpCisjZGVmaW5lIElSUThfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA4KQorI2RlZmluZSBJUlE5X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgOSkKKyNkZWZpbmUgSVJRMTBfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMCkKKyNkZWZpbmUgSVJRMTFfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMSkKKyNkZWZpbmUgSVJRMTJfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMikKKyNkZWZpbmUgSVJRMTNfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMykKKyNkZWZpbmUgSVJRMTRfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxNCkKKyNkZWZpbmUgSVJRMTVfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxNSkKKworLyoKKyAqIFNwZWNpYWwgSVJRIHZlY3RvcnMgdXNlZCBieSB0aGUgU01QIGFyY2hpdGVjdHVyZSwgMHhmMC0weGZmCisgKgorICogIHNvbWUgb2YgdGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSAncmFyZScsIHRoZXkgYXJlIG1lcmdlZAorICogIGludG8gYSBzaW5nbGUgdmVjdG9yIChDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikgdG8gc2F2ZSB2ZWN0b3Igc3BhY2UuCisgKiAgVExCLCByZXNjaGVkdWxlIGFuZCBsb2NhbCBBUElDIHZlY3RvcnMgYXJlIHBlcmZvcm1hbmNlLWNyaXRpY2FsLgorICoKKyAqICBWZWN0b3JzIDB4ZjAtMHhmYSBhcmUgZnJlZSAocmVzZXJ2ZWQgZm9yIGZ1dHVyZSBMaW51eCB1c2UpLgorICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCisjIGRlZmluZSBTUFVSSU9VU19BUElDX1ZFQ1RPUgkJMHhmZgorIyBkZWZpbmUgRVJST1JfQVBJQ19WRUNUT1IJCTB4ZmUKKyMgZGVmaW5lIElOVkFMSURBVEVfVExCX1ZFQ1RPUgkJMHhmZAorIyBkZWZpbmUgUkVTQ0hFRFVMRV9WRUNUT1IJCTB4ZmMKKyMgZGVmaW5lIENBTExfRlVOQ1RJT05fVkVDVE9SCQkweGZiCisjIGRlZmluZSBDQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IJMHhmYQorIyBkZWZpbmUgVEhFUk1BTF9BUElDX1ZFQ1RPUgkJMHhmMAorCisjZWxzZQorCisjZGVmaW5lIFNQVVJJT1VTX0FQSUNfVkVDVE9SCQkweGZmCisjZGVmaW5lIEVSUk9SX0FQSUNfVkVDVE9SCQkweGZlCisjZGVmaW5lIFJFU0NIRURVTEVfVkVDVE9SCQkweGZkCisjZGVmaW5lIENBTExfRlVOQ1RJT05fVkVDVE9SCQkweGZjCisjZGVmaW5lIENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUgkweGZiCisjZGVmaW5lIFRIRVJNQUxfQVBJQ19WRUNUT1IJCTB4ZmEKKyNkZWZpbmUgVEhSRVNIT0xEX0FQSUNfVkVDVE9SCQkweGY5CisjZGVmaW5lIFVWX0JBVV9NRVNTQUdFCQkJMHhmOAorI2RlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1JfRU5ECTB4ZjcKKyNkZWZpbmUgSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUCTB4ZjAJLyogZjAtZjcgdXNlZCBmb3IgVExCIGZsdXNoICovCisKKyNkZWZpbmUgTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMJOAorCisjZW5kaWYKKworLyoKKyAqIExvY2FsIEFQSUMgdGltZXIgSVJRIHZlY3RvciBpcyBvbiBhIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbCwKKyAqIHRvIHdvcmsgYXJvdW5kIHRoZSAnbG9zdCBsb2NhbCBpbnRlcnJ1cHQgaWYgbW9yZSB0aGFuIDIgSVJRCisgKiBzb3VyY2VzIHBlciBsZXZlbCcgZXJyYXRhLgorICovCisjZGVmaW5lIExPQ0FMX1RJTUVSX1ZFQ1RPUgkweGVmCisKKy8qCisgKiBGaXJzdCBBUElDIHZlY3RvciBhdmFpbGFibGUgdG8gZHJpdmVyczogKHZlY3RvcnMgMHgzMC0weGVlKSB3ZQorICogc3RhcnQgYXQgMHgzMSgweDQxKSB0byBzcHJlYWQgb3V0IHZlY3RvcnMgZXZlbmx5IGJldHdlZW4gcHJpb3JpdHkKKyAqIGxldmVscy4gKDB4ODAgaXMgdGhlIHN5c2NhbGwgdmVjdG9yKQorICovCisjZGVmaW5lIEZJUlNUX0RFVklDRV9WRUNUT1IJKElSUTE1X1ZFQ1RPUiArIDIpCisKKyNkZWZpbmUgTlJfVkVDVE9SUwkJMjU2CisKKyNkZWZpbmUgRlBVX0lSUQkJCTEzCisKKyNkZWZpbmUJRklSU1RfVk04Nl9JUlEJCTMKKyNkZWZpbmUgTEFTVF9WTTg2X0lSUQkJMTUKKyNkZWZpbmUgaW52YWxpZF92bTg2X2lycShpcnEpCSgoaXJxKSA8IDMgfHwgKGlycSkgPiAxNSkKKworI2lmZGVmIENPTkZJR19YODZfNjQKKyMgaWYgTlJfQ1BVUyA8IE1BWF9JT19BUElDUworIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoMzIgKiBOUl9DUFVTKSkKKyMgZWxzZQorIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoMzIgKiBNQVhfSU9fQVBJQ1MpKQorIyBlbmRpZgorCisjZWxpZiAhZGVmaW5lZChDT05GSUdfWDg2X1ZPWUFHRVIpCisKKyMgaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpIHx8IGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKSB8fCBkZWZpbmVkKENPTkZJR19YODZfVklTV1MpCisKKyMgIGRlZmluZSBOUl9JUlFTCQkyMjQKKworIyBlbHNlIC8qIElPX0FQSUMgfHwgUEFSQVZJUlQgKi8KKworIyAgZGVmaW5lIE5SX0lSUVMJCTE2CisKKyMgZW5kaWYKKworI2Vsc2UgLyogIVZJU1dTICYmICFWT1lBR0VSICovCisKKyMgZGVmaW5lIE5SX0lSUVMJCTIyNAorCisjZW5kaWYgLyogVklTV1MgKi8KKworLyogVm95YWdlciBzcGVjaWZpYyBkZWZpbmVzICovCisvKiBUaGVzZSBkZWZpbmUgdGhlIENQSXMgd2UgdXNlIGluIGxpbnV4ICovCisjZGVmaW5lIFZJQ19DUElfTEVWRUwwCQkJMAorI2RlZmluZSBWSUNfQ1BJX0xFVkVMMQkJCTEKKy8qIG5vdyB0aGUgZmFrZSBDUElzICovCisjZGVmaW5lIFZJQ19USU1FUl9DUEkJCQkyCisjZGVmaW5lIFZJQ19JTlZBTElEQVRFX0NQSQkJMworI2RlZmluZSBWSUNfUkVTQ0hFRFVMRV9DUEkJCTQKKyNkZWZpbmUgVklDX0VOQUJMRV9JUlFfQ1BJCQk1CisjZGVmaW5lIFZJQ19DQUxMX0ZVTkNUSU9OX0NQSQkJNgorI2RlZmluZSBWSUNfQ0FMTF9GVU5DVElPTl9TSU5HTEVfQ1BJCTcKKworLyogTm93IHRoZSBRSUMgQ1BJczogIFNpbmNlIHdlIGRvbid0IG5lZWQgdGhlIHR3byBpbml0aWFsIGxldmVscywKKyAqIHRoZXNlIGFyZSAyIGxlc3MgdGhhbiB0aGUgVklDIENQSXMgKi8KKyNkZWZpbmUgUUlDX0NQSV9PRkZTRVQJCQkxCisjZGVmaW5lIFFJQ19USU1FUl9DUEkJCQkoVklDX1RJTUVSX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQorI2RlZmluZSBRSUNfSU5WQUxJREFURV9DUEkJCShWSUNfSU5WQUxJREFURV9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKKyNkZWZpbmUgUUlDX1JFU0NIRURVTEVfQ1BJCQkoVklDX1JFU0NIRURVTEVfQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCisjZGVmaW5lIFFJQ19FTkFCTEVfSVJRX0NQSQkJKFZJQ19FTkFCTEVfSVJRX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQorI2RlZmluZSBRSUNfQ0FMTF9GVU5DVElPTl9DUEkJCShWSUNfQ0FMTF9GVU5DVElPTl9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKKyNkZWZpbmUgUUlDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSQkoVklDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQorCisjZGVmaW5lIFZJQ19TVEFSVF9GQUtFX0NQSQkJVklDX1RJTUVSX0NQSQorI2RlZmluZSBWSUNfRU5EX0ZBS0VfQ1BJCQlWSUNfQ0FMTF9GVU5DVElPTl9TSU5HTEVfQ1BJCisKKy8qIHRoaXMgaXMgdGhlIFNZU19JTlQgQ1BJLiAqLworI2RlZmluZSBWSUNfU1lTX0lOVAkJCTgKKyNkZWZpbmUgVklDX0NNTl9JTlQJCQkxNQorCisvKiBUaGlzIGlzIHRoZSBib290IENQSSBmb3IgYWx0ZXJuYXRlIHByb2Nlc3NvcnMuICBJdCBnZXRzIG92ZXJ3cml0dGVuCisgKiBieSB0aGUgYWJvdmUgb25jZSB0aGUgc3lzdGVtIGhhcyBhY3RpdmF0ZWQgYWxsIGF2YWlsYWJsZSBwcm9jZXNzb3JzICovCisjZGVmaW5lIFZJQ19DUFVfQk9PVF9DUEkJCVZJQ19DUElfTEVWRUwwCisjZGVmaW5lIFZJQ19DUFVfQk9PVF9FUlJBVEFfQ1BJCQkoVklDX0NQSV9MRVZFTDAgKyA4KQorCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JUlFfVkVDVE9SU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaXJxZmxhZ3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9pcnFmbGFncy5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNWRmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pc3QuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9BU01fWDg2X0lTVF9ICisjZGVmaW5lIF9BU01fWDg2X0lTVF9ICisKKy8qCisgKiBJbmNsdWRlIGZpbGUgZm9yIHRoZSBpbnRlcmZhY2UgdG8gSVNUIEJJT1MKKyAqIENvcHlyaWdodCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGlzdF9pbmZvIHsKKwlfX3UzMiBzaWduYXR1cmU7CisJX191MzIgY29tbWFuZDsKKwlfX3UzMiBldmVudDsKKwlfX3UzMiBwZXJmX2xldmVsOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIHN0cnVjdCBpc3RfaW5mbyBpc3RfaW5mbzsKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfQVNNX1g4Nl9JU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vazguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2s4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjOGNjNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2s4LmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9LOF9ICisjZGVmaW5lIF9BU01fWDg2X0s4X0gKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitleHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgazhfbmJfaWRzW107CisKK2V4dGVybiBpbnQgZWFybHlfaXNfazhfbmIodTMyIHZhbHVlKTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2RldiAqKms4X25vcnRoYnJpZGdlczsKK2V4dGVybiBpbnQgbnVtX2s4X25vcnRoYnJpZGdlczsKK2V4dGVybiBpbnQgY2FjaGVfazhfbm9ydGhicmlkZ2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgazhfZmx1c2hfZ2FydHModm9pZCk7CitleHRlcm4gaW50IGs4X3NjYW5fbm9kZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworCisjZW5kaWYgLyogX0FTTV9YODZfSzhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdjMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9LREVCVUdfSAorI2RlZmluZSBfQVNNX1g4Nl9LREVCVUdfSAorCisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKKy8qIEdyb3NzbHkgbWlzbmFtZWQuICovCitlbnVtIGRpZV92YWwgeworCURJRV9PT1BTID0gMSwKKwlESUVfSU5UMywKKwlESUVfREVCVUcsCisJRElFX1BBTklDLAorCURJRV9OTUksCisJRElFX0RJRSwKKwlESUVfTk1JV0FUQ0hET0csCisJRElFX0tFUk5FTERFQlVHLAorCURJRV9UUkFQLAorCURJRV9HUEYsCisJRElFX0NBTEwsCisJRElFX05NSV9JUEksCisJRElFX1BBR0VfRkFVTFQsCisJRElFX05NSVVOS05PV04sCit9OworCitleHRlcm4gdm9pZCBwcmludGtfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCByZWxpYWJsZSk7CitleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLGxvbmcpOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgX19kaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2V4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwKTsKK2V4dGVybiB2b2lkIF9fc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWxsKTsKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvb3BzX2JlZ2luKHZvaWQpOworZXh0ZXJuIHZvaWQgb29wc19lbmQodW5zaWduZWQgbG9uZywgc3RydWN0IHB0X3JlZ3MgKiwgaW50IHNpZ25yKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0tERUJVR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWYyMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtMCwwICsxLDE3NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9LRVhFQ19ICisjZGVmaW5lIF9BU01fWDg2X0tFWEVDX0gKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgZGVmaW5lIFBBX0NPTlRST0xfUEFHRQkwCisjIGRlZmluZSBWQV9DT05UUk9MX1BBR0UJMQorIyBkZWZpbmUgUEFfUEdECQkJMgorIyBkZWZpbmUgVkFfUEdECQkJMworIyBkZWZpbmUgUEFfUFRFXzAJCTQKKyMgZGVmaW5lIFZBX1BURV8wCQk1CisjIGRlZmluZSBQQV9QVEVfMQkJNgorIyBkZWZpbmUgVkFfUFRFXzEJCTcKKyMgZGVmaW5lIFBBX1NXQVBfUEFHRQkJOAorIyBpZmRlZiBDT05GSUdfWDg2X1BBRQorIyAgZGVmaW5lIFBBX1BNRF8wCQk5CisjICBkZWZpbmUgVkFfUE1EXzAJCTEwCisjICBkZWZpbmUgUEFfUE1EXzEJCTExCisjICBkZWZpbmUgVkFfUE1EXzEJCTEyCisjICBkZWZpbmUgUEFHRVNfTlIJCTEzCisjIGVsc2UKKyMgIGRlZmluZSBQQUdFU19OUgkJOQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIFBBX0NPTlRST0xfUEFHRQkwCisjIGRlZmluZSBWQV9DT05UUk9MX1BBR0UJMQorIyBkZWZpbmUgUEFfUEdECQkJMgorIyBkZWZpbmUgVkFfUEdECQkJMworIyBkZWZpbmUgUEFfUFVEXzAJCTQKKyMgZGVmaW5lIFZBX1BVRF8wCQk1CisjIGRlZmluZSBQQV9QTURfMAkJNgorIyBkZWZpbmUgVkFfUE1EXzAJCTcKKyMgZGVmaW5lIFBBX1BURV8wCQk4CisjIGRlZmluZSBWQV9QVEVfMAkJOQorIyBkZWZpbmUgUEFfUFVEXzEJCTEwCisjIGRlZmluZSBWQV9QVURfMQkJMTEKKyMgZGVmaW5lIFBBX1BNRF8xCQkxMgorIyBkZWZpbmUgVkFfUE1EXzEJCTEzCisjIGRlZmluZSBQQV9QVEVfMQkJMTQKKyMgZGVmaW5lIFZBX1BURV8xCQkxNQorIyBkZWZpbmUgUEFfVEFCTEVfUEFHRQkJMTYKKyMgZGVmaW5lIFBBR0VTX05SCQkxNworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUJMjA0OAorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogS0VYRUNfU09VUkNFX01FTU9SWV9MSU1JVCBtYXhpbXVtIHBhZ2UgZ2V0X2ZyZWVfcGFnZSBjYW4gcmV0dXJuLgorICogSS5lLiBNYXhpbXVtIHBhZ2UgdGhhdCBpcyBtYXBwZWQgZGlyZWN0bHkgaW50byBrZXJuZWwgbWVtb3J5LAorICogYW5kIGttYXAgaXMgbm90IHJlcXVpcmVkLgorICoKKyAqIFNvIGZhciB4ODZfNjQgaXMgbGltaXRlZCB0byA0MCBwaHlzaWNhbCBhZGRyZXNzIGJpdHMuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKiBNYXhpbXVtIHBoeXNpY2FsIGFkZHJlc3Mgd2UgY2FuIHVzZSBwYWdlcyBmcm9tICovCisjIGRlZmluZSBLRVhFQ19TT1VSQ0VfTUVNT1JZX0xJTUlUICgtMVVMKQorLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiByZWFjaCBpbiBwaHlzaWNhbCBhZGRyZXNzIG1vZGUgKi8KKyMgZGVmaW5lIEtFWEVDX0RFU1RJTkFUSU9OX01FTU9SWV9MSU1JVCAoLTFVTCkKKy8qIE1heGltdW0gYWRkcmVzcyB3ZSBjYW4gdXNlIGZvciB0aGUgY29udHJvbCBjb2RlIGJ1ZmZlciAqLworIyBkZWZpbmUgS0VYRUNfQ09OVFJPTF9NRU1PUllfTElNSVQgVEFTS19TSVpFCisKKyMgZGVmaW5lIEtFWEVDX0NPTlRST0xfUEFHRV9TSVpFCTQwOTYKKworLyogVGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUgKi8KKyMgZGVmaW5lIEtFWEVDX0FSQ0ggS0VYRUNfQVJDSF8zODYKKworLyogV2UgY2FuIGFsc28gaGFuZGxlIGNyYXNoIGR1bXBzIGZyb20gNjQgYml0IGtlcm5lbC4gKi8KKyMgZGVmaW5lIHZtY29yZV9lbGZfY2hlY2tfYXJjaF9jcm9zcyh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fWDg2XzY0KQorI2Vsc2UKKy8qIE1heGltdW0gcGh5c2ljYWwgYWRkcmVzcyB3ZSBjYW4gdXNlIHBhZ2VzIGZyb20gKi8KKyMgZGVmaW5lIEtFWEVDX1NPVVJDRV9NRU1PUllfTElNSVQgICAgICAoMHhGRkZGRkZGRkZGVUwpCisvKiBNYXhpbXVtIGFkZHJlc3Mgd2UgY2FuIHJlYWNoIGluIHBoeXNpY2FsIGFkZHJlc3MgbW9kZSAqLworIyBkZWZpbmUgS0VYRUNfREVTVElOQVRJT05fTUVNT1JZX0xJTUlUICgweEZGRkZGRkZGRkZVTCkKKy8qIE1heGltdW0gYWRkcmVzcyB3ZSBjYW4gdXNlIGZvciB0aGUgY29udHJvbCBwYWdlcyAqLworIyBkZWZpbmUgS0VYRUNfQ09OVFJPTF9NRU1PUllfTElNSVQgICAgICgweEZGRkZGRkZGRkZVTCkKKworLyogQWxsb2NhdGUgb25lIHBhZ2UgZm9yIHRoZSBwZHAgYW5kIHRoZSBzZWNvbmQgZm9yIHRoZSBjb2RlICovCisjIGRlZmluZSBLRVhFQ19DT05UUk9MX1BBR0VfU0laRSAgKDQwOTZVTCArIDQwOTZVTCkKKworLyogVGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUgKi8KKyMgZGVmaW5lIEtFWEVDX0FSQ0ggS0VYRUNfQVJDSF9YODZfNjQKKyNlbmRpZgorCisvKgorICogQ1BVIGRvZXMgbm90IHNhdmUgc3MgYW5kIHNwIG9uIHN0YWNrIGlmIGV4ZWN1dGlvbiBpcyBhbHJlYWR5CisgKiBydW5uaW5nIGluIGtlcm5lbCBtb2RlIGF0IHRoZSB0aW1lIG9mIE5NSSBvY2N1cnJlbmNlLiBUaGlzIGNvZGUKKyAqIGZpeGVzIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfZml4dXBfc3NfZXNwKHN0cnVjdCBwdF9yZWdzICpuZXdyZWdzLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpvbGRyZWdzKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwluZXdyZWdzLT5zcCA9ICh1bnNpZ25lZCBsb25nKSYob2xkcmVncy0+c3ApOworCWFzbSB2b2xhdGlsZSgieG9ybCAlJWVheCwgJSVlYXhcblx0IgorCQkgICAgICJtb3Z3ICUlc3MsICUlYXhcblx0IgorCQkgICAgIDoiPWEiKG5ld3JlZ3MtPnNzKSk7CisjZW5kaWYKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNhcHR1cmluZyByZWdpc3RlciBzdGF0ZXMgaWYgY29taW5nCisgKiB2aWEgcGFuaWMgb3RoZXJ3aXNlIGp1c3QgZml4IHVwIHRoZSBzcyBhbmQgc3AgaWYgY29taW5nIHZpYSBrZXJuZWwKKyAqIG1vZGUgZXhjZXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfc2V0dXBfcmVncyhzdHJ1Y3QgcHRfcmVncyAqbmV3cmVncywKKwkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MpCit7CisJaWYgKG9sZHJlZ3MpIHsKKwkJbWVtY3B5KG5ld3JlZ3MsIG9sZHJlZ3MsIHNpemVvZigqbmV3cmVncykpOworCQljcmFzaF9maXh1cF9zc19lc3AobmV3cmVncywgb2xkcmVncyk7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVieCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmJ4KSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVjeCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmN4KSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVkeCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmR4KSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzaSwlMCIgOiAiPW0iKG5ld3JlZ3MtPnNpKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVkaSwlMCIgOiAiPW0iKG5ld3JlZ3MtPmRpKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVicCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmJwKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVheCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmF4KSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzcCwlMCIgOiAiPW0iKG5ld3JlZ3MtPnNwKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJXNzLCAlJWVheDsiIDoiPWEiKG5ld3JlZ3MtPnNzKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWNzLCAlJWVheDsiIDoiPWEiKG5ld3JlZ3MtPmNzKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWRzLCAlJWVheDsiIDoiPWEiKG5ld3JlZ3MtPmRzKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzLCAlJWVheDsiIDoiPWEiKG5ld3JlZ3MtPmVzKSk7CisJCWFzbSB2b2xhdGlsZSgicHVzaGZsOyBwb3BsICUwIiA6Ij1tIihuZXdyZWdzLT5mbGFncykpOworI2Vsc2UKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcmJ4LCUwIiA6ICI9bSIobmV3cmVncy0+YngpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcmN4LCUwIiA6ICI9bSIobmV3cmVncy0+Y3gpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcmR4LCUwIiA6ICI9bSIobmV3cmVncy0+ZHgpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcnNpLCUwIiA6ICI9bSIobmV3cmVncy0+c2kpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcmRpLCUwIiA6ICI9bSIobmV3cmVncy0+ZGkpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcmJwLCUwIiA6ICI9bSIobmV3cmVncy0+YnApKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcmF4LCUwIiA6ICI9bSIobmV3cmVncy0+YXgpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcnNwLCUwIiA6ICI9bSIobmV3cmVncy0+c3ApKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcjgsJTAiIDogIj1tIihuZXdyZWdzLT5yOCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyOSwlMCIgOiAiPW0iKG5ld3JlZ3MtPnI5KSk7CisJCWFzbSB2b2xhdGlsZSgibW92cSAlJXIxMCwlMCIgOiAiPW0iKG5ld3JlZ3MtPnIxMCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyMTEsJTAiIDogIj1tIihuZXdyZWdzLT5yMTEpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcjEyLCUwIiA6ICI9bSIobmV3cmVncy0+cjEyKSk7CisJCWFzbSB2b2xhdGlsZSgibW92cSAlJXIxMywlMCIgOiAiPW0iKG5ld3JlZ3MtPnIxMykpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyMTQsJTAiIDogIj1tIihuZXdyZWdzLT5yMTQpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcjE1LCUwIiA6ICI9bSIobmV3cmVncy0+cjE1KSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJXNzLCAlJWVheDsiIDoiPWEiKG5ld3JlZ3MtPnNzKSk7CisJCWFzbSB2b2xhdGlsZSgibW92bCAlJWNzLCAlJWVheDsiIDoiPWEiKG5ld3JlZ3MtPmNzKSk7CisJCWFzbSB2b2xhdGlsZSgicHVzaGZxOyBwb3BxICUwIiA6Ij1tIihuZXdyZWdzLT5mbGFncykpOworI2VuZGlmCisJCW5ld3JlZ3MtPmlwID0gKHVuc2lnbmVkIGxvbmcpY3VycmVudF90ZXh0X2FkZHIoKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCithc21saW5rYWdlIHVuc2lnbmVkIGxvbmcKK3JlbG9jYXRlX2tlcm5lbCh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCisJCXVuc2lnbmVkIGxvbmcgY29udHJvbF9wYWdlLAorCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsCisJCXVuc2lnbmVkIGludCBoYXNfcGFlLAorCQl1bnNpZ25lZCBpbnQgcHJlc2VydmVfY29udGV4dCk7CisjZWxzZQorTk9SRVRfVFlQRSB2b2lkCityZWxvY2F0ZV9rZXJuZWwodW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAorCQl1bnNpZ25lZCBsb25nIHBhZ2VfbGlzdCwKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzKSBBVFRSSUJfTk9SRVQ7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfS0VYRUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va2dkYi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2dkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzZjODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZ2RiLmgKQEAgLTAsMCArMSw3OSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9LR0RCX0gKKyNkZWZpbmUgX0FTTV9YODZfS0dEQl9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBBbWl0IFMuIEthbGUKKyAqIENvcHlyaWdodCAoQykgMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyAqLworCisvKgorICogQlVGTUFYIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gaW5ib3VuZC9vdXRib3VuZAorICogYnVmZmVycyBhdCBsZWFzdCBOVU1SRUdCWVRFUyoyIGFyZSBuZWVkZWQgZm9yIHJlZ2lzdGVyIHBhY2tldHMKKyAqIExvbmdlciBidWZmZXIgaXMgbmVlZGVkIHRvIGxpc3QgYWxsIHRocmVhZHMKKyAqLworI2RlZmluZSBCVUZNQVgJCQkxMDI0CisKKy8qCisgKiAgTm90ZSB0aGF0IHRoaXMgcmVnaXN0ZXIgaW1hZ2UgaXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbgorICogIHRoZSByZWdpc3RlciBpbWFnZSB0aGF0IExpbnV4IHByb2R1Y2VzIGF0IGludGVycnVwdCB0aW1lLgorICoKKyAqICBMaW51eCdzIHJlZ2lzdGVyIGltYWdlIGlzIGRlZmluZWQgYnkgc3RydWN0IHB0X3JlZ3MgaW4gcHRyYWNlLmguCisgKiAgSnVzdCB3aHkgR0RCIHVzZXMgYSBkaWZmZXJlbnQgb3JkZXIgaXMgYSBoaXN0b3JpY2FsIG15c3RlcnkuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCitlbnVtIHJlZ25hbWVzIHsKKwlHREJfQVgsCQkJLyogMCAqLworCUdEQl9DWCwJCQkvKiAxICovCisJR0RCX0RYLAkJCS8qIDIgKi8KKwlHREJfQlgsCQkJLyogMyAqLworCUdEQl9TUCwJCQkvKiA0ICovCisJR0RCX0JQLAkJCS8qIDUgKi8KKwlHREJfU0ksCQkJLyogNiAqLworCUdEQl9ESSwJCQkvKiA3ICovCisJR0RCX1BDLAkJCS8qIDggYWxzbyBrbm93biBhcyBlaXAgKi8KKwlHREJfUFMsCQkJLyogOSBhbHNvIGtub3duIGFzIGVmbGFncyAqLworCUdEQl9DUywJCQkvKiAxMCAqLworCUdEQl9TUywJCQkvKiAxMSAqLworCUdEQl9EUywJCQkvKiAxMiAqLworCUdEQl9FUywJCQkvKiAxMyAqLworCUdEQl9GUywJCQkvKiAxNCAqLworCUdEQl9HUywJCQkvKiAxNSAqLworfTsKKyNkZWZpbmUgTlVNUkVHQllURVMJCSgoR0RCX0dTKzEpKjQpCisjZWxzZSAvKiAhIENPTkZJR19YODZfMzIgKi8KK2VudW0gcmVnbmFtZXM2NCB7CisJR0RCX0FYLAkJCS8qIDAgKi8KKwlHREJfQlgsCQkJLyogMSAqLworCUdEQl9DWCwJCQkvKiAyICovCisJR0RCX0RYLAkJCS8qIDMgKi8KKwlHREJfU0ksCQkJLyogNCAqLworCUdEQl9ESSwJCQkvKiA1ICovCisJR0RCX0JQLAkJCS8qIDYgKi8KKwlHREJfU1AsCQkJLyogNyAqLworCUdEQl9SOCwJCQkvKiA4ICovCisJR0RCX1I5LAkJCS8qIDkgKi8KKwlHREJfUjEwLAkJLyogMTAgKi8KKwlHREJfUjExLAkJLyogMTEgKi8KKwlHREJfUjEyLAkJLyogMTIgKi8KKwlHREJfUjEzLAkJLyogMTMgKi8KKwlHREJfUjE0LAkJLyogMTQgKi8KKwlHREJfUjE1LAkJLyogMTUgKi8KKwlHREJfUEMsCQkJLyogMTYgKi8KK307CisKK2VudW0gcmVnbmFtZXMzMiB7CisJR0RCX1BTID0gMzQsCisJR0RCX0NTLAorCUdEQl9TUywKK307CisjZGVmaW5lIE5VTVJFR0JZVEVTCQkoKEdEQl9TUysxKSo0KQorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2dkYl9icmVha3BvaW50KHZvaWQpCit7CisJYXNtKCIgICBpbnQgJDMiKTsKK30KKyNkZWZpbmUgQlJFQUtfSU5TVFJfU0laRQkxCisjZGVmaW5lIENBQ0hFX0ZMVVNIX0lTX1NBRkUJMQorCisjZW5kaWYgLyogX0FTTV9YODZfS0dEQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1OWMxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9BU01fWDg2X0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX1g4Nl9LTUFQX1RZUEVTX0gKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfSElHSE1FTSkKKyMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLAorI2Vsc2UKKyMgZGVmaW5lIEQobikKKyNlbmRpZgorCitlbnVtIGttX3R5cGUgeworRCgwKQlLTV9CT1VOQ0VfUkVBRCwKK0QoMSkJS01fU0tCX1NVTlJQQ19EQVRBLAorRCgyKQlLTV9TS0JfREFUQV9TT0ZUSVJRLAorRCgzKQlLTV9VU0VSMCwKK0QoNCkJS01fVVNFUjEsCitEKDUpCUtNX0JJT19TUkNfSVJRLAorRCg2KQlLTV9CSU9fRFNUX0lSUSwKK0QoNykJS01fUFRFMCwKK0QoOCkJS01fUFRFMSwKK0QoOSkJS01fSVJRMCwKK0QoMTApCUtNX0lSUTEsCitEKDExKQlLTV9TT0ZUSVJRMCwKK0QoMTIpCUtNX1NPRlRJUlExLAorRCgxMykJS01fVFlQRV9OUgorfTsKKworI3VuZGVmIEQKKworI2VuZGlmIC8qIF9BU01fWDg2X0tNQVBfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3Byb2Jlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTY4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9LUFJPQkVTX0gKKyNkZWZpbmUgX0FTTV9YODZfS1BST0JFU19ICisvKgorICogIEtlcm5lbCBQcm9iZXMgKEtQcm9iZXMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMiwgMjAwNAorICoKKyAqIFNlZSBhcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGZvciB4ODYga3Byb2JlcyBoaXN0b3J5LgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworI2RlZmluZSAgX19BUkNIX1dBTlRfS1BST0JFU19JTlNOX1NMT1QKKworc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3Qga3Byb2JlOworCit0eXBlZGVmIHU4IGtwcm9iZV9vcGNvZGVfdDsKKyNkZWZpbmUgQlJFQUtQT0lOVF9JTlNUUlVDVElPTgkweGNjCisjZGVmaW5lIFJFTEFUSVZFSlVNUF9JTlNUUlVDVElPTiAweGU5CisjZGVmaW5lIE1BWF9JTlNOX1NJWkUgMTYKKyNkZWZpbmUgTUFYX1NUQUNLX1NJWkUgNjQKKyNkZWZpbmUgTUlOX1NUQUNLX1NJWkUoQUREUikJCQkJCSAgICAgICBcCisJKCgoTUFYX1NUQUNLX1NJWkUpIDwgKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgXAorCQkJICAgICAgVEhSRUFEX1NJWkUgLSAodW5zaWduZWQgbG9uZykoQUREUikpKSAgICBcCisJID8gKE1BWF9TVEFDS19TSVpFKQkJCQkJICAgICAgIFwKKwkgOiAoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKwkJICAgICAgIFwKKwkgICAgVEhSRUFEX1NJWkUgLSAodW5zaWduZWQgbG9uZykoQUREUikpKQorCisjZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBjb25zdCBpbnQga3JldHByb2JlX2JsYWNrbGlzdF9zaXplOworCit2b2lkIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKTsKK3ZvaWQga3JldHByb2JlX3RyYW1wb2xpbmUodm9pZCk7CisKKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKi8KK3N0cnVjdCBhcmNoX3NwZWNpZmljX2luc24geworCS8qIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJa3Byb2JlX29wY29kZV90ICppbnNuOworCS8qCisJICogYm9vc3RhYmxlID0gLTE6IFRoaXMgaW5zdHJ1Y3Rpb24gdHlwZSBpcyBub3QgYm9vc3RhYmxlLgorCSAqIGJvb3N0YWJsZSA9IDA6IFRoaXMgaW5zdHJ1Y3Rpb24gdHlwZSBpcyBib29zdGFibGUuCisJICogYm9vc3RhYmxlID0gMTogVGhpcyBpbnN0cnVjdGlvbiBoYXMgYmVlbiBib29zdGVkOiB3ZSBoYXZlCisJICogYWRkZWQgYSByZWxhdGl2ZSBqdW1wIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBjb3B5IGluIGluc24sCisJICogc28gbm8gc2luZ2xlLXN0ZXAgYW5kIGZpeHVwIGFyZSBuZWVkZWQgKHVubGVzcyB0aGVyZSdzCisJICogYSBwb3N0X2hhbmRsZXIgb3IgYnJlYWtfaGFuZGxlcikuCisJICovCisJaW50IGJvb3N0YWJsZTsKK307CisKK3N0cnVjdCBwcmV2X2twcm9iZSB7CisJc3RydWN0IGtwcm9iZSAqa3A7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBvbGRfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzYXZlZF9mbGFnczsKK307CisKKy8qIHBlci1jcHUga3Byb2JlIGNvbnRyb2wgYmxvY2sgKi8KK3N0cnVjdCBrcHJvYmVfY3RsYmxrIHsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfb2xkX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcga3Byb2JlX3NhdmVkX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgKmpwcm9iZV9zYXZlZF9zcDsKKwlzdHJ1Y3QgcHRfcmVncyBqcHJvYmVfc2F2ZWRfcmVnczsKKwlrcHJvYmVfb3Bjb2RlX3QganByb2Jlc19zdGFja1tNQVhfU1RBQ0tfU0laRV07CisJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlOworfTsKKworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CitleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKKyNlbmRpZiAvKiBfQVNNX1g4Nl9LUFJPQkVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1MTYyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCkBAIC0wLDAgKzEsMjExIEBACisjaWZuZGVmIF9BU01fWDg2X0tWTV9ICisjZGVmaW5lIF9BU01fWDg2X0tWTV9ICisKKy8qCisgKiBLVk0geDg2IHNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisvKiBBcmNoaXRlY3R1cmFsIGludGVycnVwdCBsaW5lIGNvdW50LiAqLworI2RlZmluZSBLVk1fTlJfSU5URVJSVVBUUyAyNTYKKworc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMgeworCV9fdTMyIHNsb3Q7ICAvKiB0aGlzIGhhcyBhIGRpZmZlcmVudCBuYW1lc3BhY2UgdGhhbiBtZW1vcnkgc2xvdHMgKi8KKwlfX3UzMiBmbGFnczsKKwlfX3U2NCBndWVzdF9waHlzX2FkZHI7CisJX191NjQgbWVtb3J5X3NpemU7CisJX191NjQgdGFyZ2V0X3BoeXNfYWRkcjsKK307CisKKy8qIGZvciBLVk1fR0VUX0lSUUNISVAgYW5kIEtWTV9TRVRfSVJRQ0hJUCAqLworc3RydWN0IGt2bV9waWNfc3RhdGUgeworCV9fdTggbGFzdF9pcnI7CS8qIGVkZ2UgZGV0ZWN0aW9uICovCisJX191OCBpcnI7CQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCByZWdpc3RlciAqLworCV9fdTggaW1yOwkJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKwlfX3U4IGlzcjsJCS8qIGludGVycnVwdCBzZXJ2aWNlIHJlZ2lzdGVyICovCisJX191OCBwcmlvcml0eV9hZGQ7CS8qIGhpZ2hlc3QgaXJxIHByaW9yaXR5ICovCisJX191OCBpcnFfYmFzZTsKKwlfX3U4IHJlYWRfcmVnX3NlbGVjdDsKKwlfX3U4IHBvbGw7CisJX191OCBzcGVjaWFsX21hc2s7CisJX191OCBpbml0X3N0YXRlOworCV9fdTggYXV0b19lb2k7CisJX191OCByb3RhdGVfb25fYXV0b19lb2k7CisJX191OCBzcGVjaWFsX2Z1bGx5X25lc3RlZF9tb2RlOworCV9fdTggaW5pdDQ7CQkvKiB0cnVlIGlmIDQgYnl0ZSBpbml0ICovCisJX191OCBlbGNyOwkJLyogUElJWCBlZGdlL3RyaWdnZXIgc2VsZWN0aW9uICovCisJX191OCBlbGNyX21hc2s7Cit9OworCisjZGVmaW5lIEtWTV9JT0FQSUNfTlVNX1BJTlMgIDI0CitzdHJ1Y3Qga3ZtX2lvYXBpY19zdGF0ZSB7CisJX191NjQgYmFzZV9hZGRyZXNzOworCV9fdTMyIGlvcmVnc2VsOworCV9fdTMyIGlkOworCV9fdTMyIGlycjsKKwlfX3UzMiBwYWQ7CisJdW5pb24geworCQlfX3U2NCBiaXRzOworCQlzdHJ1Y3QgeworCQkJX191OCB2ZWN0b3I7CisJCQlfX3U4IGRlbGl2ZXJ5X21vZGU6MzsKKwkJCV9fdTggZGVzdF9tb2RlOjE7CisJCQlfX3U4IGRlbGl2ZXJ5X3N0YXR1czoxOworCQkJX191OCBwb2xhcml0eToxOworCQkJX191OCByZW1vdGVfaXJyOjE7CisJCQlfX3U4IHRyaWdfbW9kZToxOworCQkJX191OCBtYXNrOjE7CisJCQlfX3U4IHJlc2VydmU6NzsKKwkJCV9fdTggcmVzZXJ2ZWRbNF07CisJCQlfX3U4IGRlc3RfaWQ7CisJCX0gZmllbGRzOworCX0gcmVkaXJ0YmxbS1ZNX0lPQVBJQ19OVU1fUElOU107Cit9OworCisjZGVmaW5lIEtWTV9JUlFDSElQX1BJQ19NQVNURVIgICAwCisjZGVmaW5lIEtWTV9JUlFDSElQX1BJQ19TTEFWRSAgICAxCisjZGVmaW5lIEtWTV9JUlFDSElQX0lPQVBJQyAgICAgICAyCisKKy8qIGZvciBLVk1fR0VUX1JFR1MgYW5kIEtWTV9TRVRfUkVHUyAqLworc3RydWN0IGt2bV9yZWdzIHsKKwkvKiBvdXQgKEtWTV9HRVRfUkVHUykgLyBpbiAoS1ZNX1NFVF9SRUdTKSAqLworCV9fdTY0IHJheCwgcmJ4LCByY3gsIHJkeDsKKwlfX3U2NCByc2ksIHJkaSwgcnNwLCByYnA7CisJX191NjQgcjgsICByOSwgIHIxMCwgcjExOworCV9fdTY0IHIxMiwgcjEzLCByMTQsIHIxNTsKKwlfX3U2NCByaXAsIHJmbGFnczsKK307CisKKy8qIGZvciBLVk1fR0VUX0xBUElDIGFuZCBLVk1fU0VUX0xBUElDICovCisjZGVmaW5lIEtWTV9BUElDX1JFR19TSVpFIDB4NDAwCitzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIHsKKwljaGFyIHJlZ3NbS1ZNX0FQSUNfUkVHX1NJWkVdOworfTsKKworc3RydWN0IGt2bV9zZWdtZW50IHsKKwlfX3U2NCBiYXNlOworCV9fdTMyIGxpbWl0OworCV9fdTE2IHNlbGVjdG9yOworCV9fdTggIHR5cGU7CisJX191OCAgcHJlc2VudCwgZHBsLCBkYiwgcywgbCwgZywgYXZsOworCV9fdTggIHVudXNhYmxlOworCV9fdTggIHBhZGRpbmc7Cit9OworCitzdHJ1Y3Qga3ZtX2R0YWJsZSB7CisJX191NjQgYmFzZTsKKwlfX3UxNiBsaW1pdDsKKwlfX3UxNiBwYWRkaW5nWzNdOworfTsKKworCisvKiBmb3IgS1ZNX0dFVF9TUkVHUyBhbmQgS1ZNX1NFVF9TUkVHUyAqLworc3RydWN0IGt2bV9zcmVncyB7CisJLyogb3V0IChLVk1fR0VUX1NSRUdTKSAvIGluIChLVk1fU0VUX1NSRUdTKSAqLworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgZHMsIGVzLCBmcywgZ3MsIHNzOworCXN0cnVjdCBrdm1fc2VnbWVudCB0ciwgbGR0OworCXN0cnVjdCBrdm1fZHRhYmxlIGdkdCwgaWR0OworCV9fdTY0IGNyMCwgY3IyLCBjcjMsIGNyNCwgY3I4OworCV9fdTY0IGVmZXI7CisJX191NjQgYXBpY19iYXNlOworCV9fdTY0IGludGVycnVwdF9iaXRtYXBbKEtWTV9OUl9JTlRFUlJVUFRTICsgNjMpIC8gNjRdOworfTsKKworLyogZm9yIEtWTV9HRVRfRlBVIGFuZCBLVk1fU0VUX0ZQVSAqLworc3RydWN0IGt2bV9mcHUgeworCV9fdTggIGZwcls4XVsxNl07CisJX191MTYgZmN3OworCV9fdTE2IGZzdzsKKwlfX3U4ICBmdHd4OyAgLyogaW4gZnhzYXZlIGZvcm1hdCAqLworCV9fdTggIHBhZDE7CisJX191MTYgbGFzdF9vcGNvZGU7CisJX191NjQgbGFzdF9pcDsKKwlfX3U2NCBsYXN0X2RwOworCV9fdTggIHhtbVsxNl1bMTZdOworCV9fdTMyIG14Y3NyOworCV9fdTMyIHBhZDI7Cit9OworCitzdHJ1Y3Qga3ZtX21zcl9lbnRyeSB7CisJX191MzIgaW5kZXg7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgZGF0YTsKK307CisKKy8qIGZvciBLVk1fR0VUX01TUlMgYW5kIEtWTV9TRVRfTVNSUyAqLworc3RydWN0IGt2bV9tc3JzIHsKKwlfX3UzMiBubXNyczsgLyogbnVtYmVyIG9mIG1zcnMgaW4gZW50cmllcyAqLworCV9fdTMyIHBhZDsKKworCXN0cnVjdCBrdm1fbXNyX2VudHJ5IGVudHJpZXNbMF07Cit9OworCisvKiBmb3IgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVCAqLworc3RydWN0IGt2bV9tc3JfbGlzdCB7CisJX191MzIgbm1zcnM7IC8qIG51bWJlciBvZiBtc3JzIGluIGVudHJpZXMgKi8KKwlfX3UzMiBpbmRpY2VzWzBdOworfTsKKworCitzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5IHsKKwlfX3UzMiBmdW5jdGlvbjsKKwlfX3UzMiBlYXg7CisJX191MzIgZWJ4OworCV9fdTMyIGVjeDsKKwlfX3UzMiBlZHg7CisJX191MzIgcGFkZGluZzsKK307CisKKy8qIGZvciBLVk1fU0VUX0NQVUlEICovCitzdHJ1Y3Qga3ZtX2NwdWlkIHsKKwlfX3UzMiBuZW50OworCV9fdTMyIHBhZGRpbmc7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgeworCV9fdTMyIGZ1bmN0aW9uOworCV9fdTMyIGluZGV4OworCV9fdTMyIGZsYWdzOworCV9fdTMyIGVheDsKKwlfX3UzMiBlYng7CisJX191MzIgZWN4OworCV9fdTMyIGVkeDsKKwlfX3UzMiBwYWRkaW5nWzNdOworfTsKKworI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYIDEKKyNkZWZpbmUgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVGVUxfRlVOQyAgICAyCisjZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NUQVRFX1JFQURfTkVYVCAgNAorCisvKiBmb3IgS1ZNX1NFVF9DUFVJRDIgKi8KK3N0cnVjdCBrdm1fY3B1aWQyIHsKKwlfX3UzMiBuZW50OworCV9fdTMyIHBhZGRpbmc7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgZW50cmllc1swXTsKK307CisKKy8qIGZvciBLVk1fR0VUX1BJVCBhbmQgS1ZNX1NFVF9QSVQgKi8KK3N0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgeworCV9fdTMyIGNvdW50OyAvKiBjYW4gYmUgNjU1MzYgKi8KKwlfX3UxNiBsYXRjaGVkX2NvdW50OworCV9fdTggY291bnRfbGF0Y2hlZDsKKwlfX3U4IHN0YXR1c19sYXRjaGVkOworCV9fdTggc3RhdHVzOworCV9fdTggcmVhZF9zdGF0ZTsKKwlfX3U4IHdyaXRlX3N0YXRlOworCV9fdTggd3JpdGVfbGF0Y2g7CisJX191OCByd19tb2RlOworCV9fdTggbW9kZTsKKwlfX3U4IGJjZDsKKwlfX3U4IGdhdGU7CisJX19zNjQgY291bnRfbG9hZF90aW1lOworfTsKKworc3RydWN0IGt2bV9waXRfc3RhdGUgeworCXN0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgY2hhbm5lbHNbM107Cit9OworI2VuZGlmIC8qIF9BU01fWDg2X0tWTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTY3OWQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMCwwICsxLDc1MiBAQAorLyoKKyAqIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgZHJpdmVyIGZvciBMaW51eAorICoKKyAqIFRoaXMgaGVhZGVyIGRlZmluZXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGludGVyZmFjZXMsIHg4NiB2ZXJzaW9uCisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X0tWTV9IT1NUX0gKKyNkZWZpbmUgX0FTTV9YODZfS1ZNX0hPU1RfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorCisjaW5jbHVkZSA8bGludXgva3ZtLmg+CisjaW5jbHVkZSA8bGludXgva3ZtX3BhcmEuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1fdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9wdmNsb2NrLWFiaS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisKKyNkZWZpbmUgS1ZNX01BWF9WQ1BVUyAxNgorI2RlZmluZSBLVk1fTUVNT1JZX1NMT1RTIDMyCisvKiBtZW1vcnkgc2xvdHMgdGhhdCBkb2VzIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSAqLworI2RlZmluZSBLVk1fUFJJVkFURV9NRU1fU0xPVFMgNAorCisjZGVmaW5lIEtWTV9QSU9fUEFHRV9PRkZTRVQgMQorI2RlZmluZSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQgMgorCisjZGVmaW5lIENSM19QQUVfUkVTRVJWRURfQklUUyAoKFg4Nl9DUjNfUFdUIHwgWDg2X0NSM19QQ0QpIC0gMSkKKyNkZWZpbmUgQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTICgoUEFHRV9TSVpFLTEpICYgfihYODZfQ1IzX1BXVCB8IFg4Nl9DUjNfUENEKSkKKyNkZWZpbmUgQ1IzX0xfTU9ERV9SRVNFUlZFRF9CSVRTIChDUjNfTk9OUEFFX1JFU0VSVkVEX0JJVFMgfAlcCisJCQkJICAweEZGRkZGRjAwMDAwMDAwMDBVTEwpCisKKyNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLCQkJCSAgIFwKKwkoWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUgfCBYODZfQ1IwX1dQIHwgWDg2X0NSMF9ORSBcCisJIHwgWDg2X0NSMF9OVyB8IFg4Nl9DUjBfQ0QpCisjZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OCQkJCQkJXAorCShYODZfQ1IwX1BHIHwgWDg2X0NSMF9QRSB8IFg4Nl9DUjBfV1AgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9UUyBcCisJIHwgWDg2X0NSMF9NUCkKKyNkZWZpbmUgS1ZNX0dVRVNUX0NSNF9NQVNLCQkJCQkJXAorCShYODZfQ1I0X1ZNRSB8IFg4Nl9DUjRfUFNFIHwgWDg2X0NSNF9QQUUgfCBYODZfQ1I0X1BHRSB8IFg4Nl9DUjRfVk1YRSkKKyNkZWZpbmUgS1ZNX1BNT0RFX1ZNX0NSNF9BTFdBWVNfT04gKFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9WTVhFKQorI2RlZmluZSBLVk1fUk1PREVfVk1fQ1I0X0FMV0FZU19PTiAoWDg2X0NSNF9WTUUgfCBYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfVk1YRSkKKworI2RlZmluZSBJTlZBTElEX1BBR0UgKH4oaHBhX3QpMCkKKyNkZWZpbmUgVU5NQVBQRURfR1ZBICh+KGdwYV90KTApCisKKy8qIHNoYWRvdyB0YWJsZXMgYXJlIFBBRSBldmVuIG9uIG5vbi1QQUUgaG9zdHMgKi8KKyNkZWZpbmUgS1ZNX0hQQUdFX1NISUZUIDIxCisjZGVmaW5lIEtWTV9IUEFHRV9TSVpFICgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKQorI2RlZmluZSBLVk1fSFBBR0VfTUFTSyAofihLVk1fSFBBR0VfU0laRSAtIDEpKQorCisjZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UgKEtWTV9IUEFHRV9TSVpFIC8gUEFHRV9TSVpFKQorCisjZGVmaW5lIERFX1ZFQ1RPUiAwCisjZGVmaW5lIERCX1ZFQ1RPUiAxCisjZGVmaW5lIEJQX1ZFQ1RPUiAzCisjZGVmaW5lIE9GX1ZFQ1RPUiA0CisjZGVmaW5lIEJSX1ZFQ1RPUiA1CisjZGVmaW5lIFVEX1ZFQ1RPUiA2CisjZGVmaW5lIE5NX1ZFQ1RPUiA3CisjZGVmaW5lIERGX1ZFQ1RPUiA4CisjZGVmaW5lIFRTX1ZFQ1RPUiAxMAorI2RlZmluZSBOUF9WRUNUT1IgMTEKKyNkZWZpbmUgU1NfVkVDVE9SIDEyCisjZGVmaW5lIEdQX1ZFQ1RPUiAxMworI2RlZmluZSBQRl9WRUNUT1IgMTQKKyNkZWZpbmUgTUZfVkVDVE9SIDE2CisjZGVmaW5lIE1DX1ZFQ1RPUiAxOAorCisjZGVmaW5lIFNFTEVDVE9SX1RJX01BU0sgKDEgPDwgMikKKyNkZWZpbmUgU0VMRUNUT1JfUlBMX01BU0sgMHgwMworCisjZGVmaW5lIElPUExfU0hJRlQgMTIKKworI2RlZmluZSBLVk1fQUxJQVNfU0xPVFMgNAorCisjZGVmaW5lIEtWTV9QRVJNSUxMRV9NTVVfUEFHRVMgMjAKKyNkZWZpbmUgS1ZNX01JTl9BTExPQ19NTVVfUEFHRVMgNjQKKyNkZWZpbmUgS1ZNX01NVV9IQVNIX1NISUZUIDEwCisjZGVmaW5lIEtWTV9OVU1fTU1VX1BBR0VTICgxIDw8IEtWTV9NTVVfSEFTSF9TSElGVCkKKyNkZWZpbmUgS1ZNX01JTl9GUkVFX01NVV9QQUdFUyA1CisjZGVmaW5lIEtWTV9SRUZJTExfUEFHRVMgMjUKKyNkZWZpbmUgS1ZNX01BWF9DUFVJRF9FTlRSSUVTIDQwCisjZGVmaW5lIEtWTV9OUl9WQVJfTVRSUiA4CisKK2V4dGVybiBzcGlubG9ja190IGt2bV9sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdm1fbGlzdDsKKworc3RydWN0IGt2bV92Y3B1Oworc3RydWN0IGt2bTsKKworZW51bSBrdm1fcmVnIHsKKwlWQ1BVX1JFR1NfUkFYID0gMCwKKwlWQ1BVX1JFR1NfUkNYID0gMSwKKwlWQ1BVX1JFR1NfUkRYID0gMiwKKwlWQ1BVX1JFR1NfUkJYID0gMywKKwlWQ1BVX1JFR1NfUlNQID0gNCwKKwlWQ1BVX1JFR1NfUkJQID0gNSwKKwlWQ1BVX1JFR1NfUlNJID0gNiwKKwlWQ1BVX1JFR1NfUkRJID0gNywKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJVkNQVV9SRUdTX1I4ID0gOCwKKwlWQ1BVX1JFR1NfUjkgPSA5LAorCVZDUFVfUkVHU19SMTAgPSAxMCwKKwlWQ1BVX1JFR1NfUjExID0gMTEsCisJVkNQVV9SRUdTX1IxMiA9IDEyLAorCVZDUFVfUkVHU19SMTMgPSAxMywKKwlWQ1BVX1JFR1NfUjE0ID0gMTQsCisJVkNQVV9SRUdTX1IxNSA9IDE1LAorI2VuZGlmCisJVkNQVV9SRUdTX1JJUCwKKwlOUl9WQ1BVX1JFR1MKK307CisKK2VudW0geworCVZDUFVfU1JFR19FUywKKwlWQ1BVX1NSRUdfQ1MsCisJVkNQVV9TUkVHX1NTLAorCVZDUFVfU1JFR19EUywKKwlWQ1BVX1NSRUdfRlMsCisJVkNQVV9TUkVHX0dTLAorCVZDUFVfU1JFR19UUiwKKwlWQ1BVX1NSRUdfTERUUiwKK307CisKKyNpbmNsdWRlIDxhc20va3ZtX3g4Nl9lbXVsYXRlLmg+CisKKyNkZWZpbmUgS1ZNX05SX01FTV9PQkpTIDQwCisKK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgeworCWludCBlbmFibGVkOworCXVuc2lnbmVkIGxvbmcgYnBbNF07CisJaW50IHNpbmdsZXN0ZXA7Cit9OworCisvKgorICogV2UgZG9uJ3Qgd2FudCBhbGxvY2F0aW9uIGZhaWx1cmVzIHdpdGhpbiB0aGUgbW11IGNvZGUsIHNvIHdlIHByZWFsbG9jYXRlCisgKiBlbm91Z2ggbWVtb3J5IGZvciBhIHNpbmdsZSBwYWdlIGZhdWx0IGluIGEgY2FjaGUuCisgKi8KK3N0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSB7CisJaW50IG5vYmpzOworCXZvaWQgKm9iamVjdHNbS1ZNX05SX01FTV9PQkpTXTsKK307CisKKyNkZWZpbmUgTlJfUFRFX0NIQUlOX0VOVFJJRVMgNQorCitzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiB7CisJdTY0ICpwYXJlbnRfcHRlc1tOUl9QVEVfQ0hBSU5fRU5UUklFU107CisJc3RydWN0IGhsaXN0X25vZGUgbGluazsKK307CisKKy8qCisgKiBrdm1fbW11X3BhZ2Vfcm9sZSwgYmVsb3csIGlzIGRlZmluZWQgYXM6CisgKgorICogICBiaXRzIDA6MyAtIHRvdGFsIGd1ZXN0IHBhZ2luZyBsZXZlbHMgKDItNCwgb3IgemVybyBmb3IgcmVhbCBtb2RlKQorICogICBiaXRzIDQ6NyAtIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIHRoaXMgc2hhZG93ICgxLTQpCisgKiAgIGJpdHMgODo5IC0gcGFnZSB0YWJsZSBxdWFkcmFudCBmb3IgMi1sZXZlbCBndWVzdHMKKyAqICAgYml0ICAgMTYgLSAibWV0YXBoeXNpY2FsIiAtIGdmbiBpcyBub3QgYSByZWFsIHBhZ2UgKGh1Z2UgcGFnZS9yZWFsIG1vZGUpCisgKiAgIGJpdHMgMTc6MTkgLSBjb21tb24gYWNjZXNzIHBlcm1pc3Npb25zIGZvciBhbGwgcHRlcyBpbiB0aGlzIHNoYWRvdyBwYWdlCisgKi8KK3VuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHsKKwl1bnNpZ25lZCB3b3JkOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGdsZXZlbHM6NDsKKwkJdW5zaWduZWQgbGV2ZWw6NDsKKwkJdW5zaWduZWQgcXVhZHJhbnQ6MjsKKwkJdW5zaWduZWQgcGFkX2Zvcl9uaWNlX2hleF9vdXRwdXQ6NjsKKwkJdW5zaWduZWQgbWV0YXBoeXNpY2FsOjE7CisJCXVuc2lnbmVkIGFjY2VzczozOworCQl1bnNpZ25lZCBpbnZhbGlkOjE7CisJfTsKK307CisKK3N0cnVjdCBrdm1fbW11X3BhZ2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoX2xpbms7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdHdvIGVudHJpZXMgYXJlIHVzZWQgdG8ga2V5IHRoZSBzaGFkb3cgcGFnZSBpbiB0aGUKKwkgKiBoYXNoIHRhYmxlLgorCSAqLworCWdmbl90IGdmbjsKKwl1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSByb2xlOworCisJdTY0ICpzcHQ7CisJLyogaG9sZCB0aGUgZ2ZuIG9mIGVhY2ggc3B0ZSBpbnNpZGUgc3B0ICovCisJZ2ZuX3QgKmdmbnM7CisJdW5zaWduZWQgbG9uZyBzbG90X2JpdG1hcDsgLyogT25lIGJpdCBzZXQgcGVyIHNsb3Qgd2hpY2ggaGFzIG1lbW9yeQorCQkJCSAgICAqIGluIHRoaXMgc2hhZG93IHBhZ2UuCisJCQkJICAgICovCisJaW50IG11bHRpbWFwcGVkOyAgICAgICAgIC8qIE1vcmUgdGhhbiBvbmUgcGFyZW50X3B0ZT8gKi8KKwlpbnQgcm9vdF9jb3VudDsgICAgICAgICAgLyogQ3VycmVudGx5IHNlcnZpbmcgYXMgYWN0aXZlIHJvb3QgKi8KKwlib29sIHVuc3luYzsKKwlib29sIHVuc3luY19jaGlsZHJlbjsKKwl1bmlvbiB7CisJCXU2NCAqcGFyZW50X3B0ZTsgICAgICAgICAgICAgICAvKiAhbXVsdGltYXBwZWQgKi8KKwkJc3RydWN0IGhsaXN0X2hlYWQgcGFyZW50X3B0ZXM7IC8qIG11bHRpbWFwcGVkLCBrdm1fcHRlX2NoYWluICovCisJfTsKKwlERUNMQVJFX0JJVE1BUCh1bnN5bmNfY2hpbGRfYml0bWFwLCA1MTIpOworfTsKKworc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyIHsKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgbGVuOworCXVuc2lnbmVkIHByb2Nlc3NlZDsKKwljaGFyIGJ1Zls1MTJdIF9fYWxpZ25lZChzaXplb2YobG9uZykpOworfTsKKworLyoKKyAqIHg4NiBzdXBwb3J0cyAzIHBhZ2luZyBtb2RlcyAoNC1sZXZlbCA2NC1iaXQsIDMtbGV2ZWwgNjQtYml0LCBhbmQgMi1sZXZlbAorICogMzItYml0KS4gIFRoZSBrdm1fbW11IHN0cnVjdHVyZSBhYnN0cmFjdHMgdGhlIGRldGFpbHMgb2YgdGhlIGN1cnJlbnQgbW11CisgKiBtb2RlLgorICovCitzdHJ1Y3Qga3ZtX21tdSB7CisJdm9pZCAoKm5ld19jcjMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqcGFnZV9mYXVsdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHUzMiBlcnIpOworCXZvaWQgKCpmcmVlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWdwYV90ICgqZ3ZhX3RvX2dwYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpOworCXZvaWQgKCpwcmVmZXRjaF9wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlKTsKKwlpbnQgKCpzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CisJdm9pZCAoKmludmxwZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpOworCWhwYV90IHJvb3RfaHBhOworCWludCByb290X2xldmVsOworCWludCBzaGFkb3dfcm9vdF9sZXZlbDsKKworCXU2NCAqcGFlX3Jvb3Q7Cit9OworCitzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CisJdTY0IGhvc3RfdHNjOworCWludCBpbnRlcnJ1cHRfd2luZG93X29wZW47CisJdW5zaWduZWQgbG9uZyBpcnFfc3VtbWFyeTsgLyogYml0IHZlY3RvcjogMSBwZXIgd29yZCBpbiBpcnFfcGVuZGluZyAqLworCURFQ0xBUkVfQklUTUFQKGlycV9wZW5kaW5nLCBLVk1fTlJfSU5URVJSVVBUUyk7CisJLyoKKwkgKiByaXAgYW5kIHJlZ3MgYWNjZXNzZXMgbXVzdCBnbyB0aHJvdWdoCisJICoga3ZtX3tyZWdpc3RlcixyaXB9X3tyZWFkLHdyaXRlfSBmdW5jdGlvbnMuCisJICovCisJdW5zaWduZWQgbG9uZyByZWdzW05SX1ZDUFVfUkVHU107CisJdTMyIHJlZ3NfYXZhaWw7CisJdTMyIHJlZ3NfZGlydHk7CisKKwl1bnNpZ25lZCBsb25nIGNyMDsKKwl1bnNpZ25lZCBsb25nIGNyMjsKKwl1bnNpZ25lZCBsb25nIGNyMzsKKwl1bnNpZ25lZCBsb25nIGNyNDsKKwl1bnNpZ25lZCBsb25nIGNyODsKKwl1NjQgcGRwdHJzWzRdOyAvKiBwYWUgKi8KKwl1NjQgc2hhZG93X2VmZXI7CisJdTY0IGFwaWNfYmFzZTsKKwlzdHJ1Y3Qga3ZtX2xhcGljICphcGljOyAgICAvKiBrZXJuZWwgaXJxY2hpcCBjb250ZXh0ICovCisJaW50IG1wX3N0YXRlOworCWludCBzaXBpX3ZlY3RvcjsKKwl1NjQgaWEzMl9taXNjX2VuYWJsZV9tc3I7CisJYm9vbCB0cHJfYWNjZXNzX3JlcG9ydGluZzsKKworCXN0cnVjdCBrdm1fbW11IG1tdTsKKwkvKiBvbmx5IG5lZWRlZCBpbiBrdm1fcHZfbW11X29wKCkgcGF0aCwgYnV0IGl0J3MgaG90IHNvCisJICogcHV0IGl0IGhlcmUgdG8gYXZvaWQgYWxsb2NhdGlvbiAqLworCXN0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciBtbXVfb3BfYnVmZmVyOworCisJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9wdGVfY2hhaW5fY2FjaGU7CisJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9ybWFwX2Rlc2NfY2FjaGU7CisJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9wYWdlX2NhY2hlOworCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfcGFnZV9oZWFkZXJfY2FjaGU7CisKKwlnZm5fdCBsYXN0X3B0X3dyaXRlX2dmbjsKKwlpbnQgICBsYXN0X3B0X3dyaXRlX2NvdW50OworCXU2NCAgKmxhc3RfcHRlX3VwZGF0ZWQ7CisJZ2ZuX3QgbGFzdF9wdGVfZ2ZuOworCisJc3RydWN0IHsKKwkJZ2ZuX3QgZ2ZuOwkvKiBwcmVzdW1lZCBnZm4gZHVyaW5nIGd1ZXN0IHB0ZSB1cGRhdGUgKi8KKwkJcGZuX3QgcGZuOwkvKiBwZm4gY29ycmVzcG9uZGluZyB0byB0aGF0IGdmbiAqLworCQlpbnQgbGFyZ2VwYWdlOworCQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CisJfSB1cGRhdGVfcHRlOworCisJc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBob3N0X2Z4X2ltYWdlOworCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgZ3Vlc3RfZnhfaW1hZ2U7CisKKwlndmFfdCBtbWlvX2ZhdWx0X2NyMjsKKwlzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHBpbzsKKwl2b2lkICpwaW9fZGF0YTsKKworCXN0cnVjdCBrdm1fcXVldWVkX2V4Y2VwdGlvbiB7CisJCWJvb2wgcGVuZGluZzsKKwkJYm9vbCBoYXNfZXJyb3JfY29kZTsKKwkJdTggbnI7CisJCXUzMiBlcnJvcl9jb2RlOworCX0gZXhjZXB0aW9uOworCisJc3RydWN0IGt2bV9xdWV1ZWRfaW50ZXJydXB0IHsKKwkJYm9vbCBwZW5kaW5nOworCQl1OCBucjsKKwl9IGludGVycnVwdDsKKworCXN0cnVjdCB7CisJCWludCBhY3RpdmU7CisJCXU4IHNhdmVfaW9wbDsKKwkJc3RydWN0IGt2bV9zYXZlX3NlZ21lbnQgeworCQkJdTE2IHNlbGVjdG9yOworCQkJdW5zaWduZWQgbG9uZyBiYXNlOworCQkJdTMyIGxpbWl0OworCQkJdTMyIGFyOworCQl9IHRyLCBlcywgZHMsIGZzLCBnczsKKwl9IHJtb2RlOworCWludCBoYWx0X3JlcXVlc3Q7IC8qIHJlYWwgbW9kZSBvbiBJbnRlbCBvbmx5ICovCisKKwlpbnQgY3B1aWRfbmVudDsKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBjcHVpZF9lbnRyaWVzW0tWTV9NQVhfQ1BVSURfRU5UUklFU107CisJLyogZW11bGF0ZSBjb250ZXh0ICovCisKKwlzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBlbXVsYXRlX2N0eHQ7CisKKwlncGFfdCB0aW1lOworCXN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrOworCXVuc2lnbmVkIGludCBodl9jbG9ja190c2Nfa2h6OworCXVuc2lnbmVkIGludCB0aW1lX29mZnNldDsKKwlzdHJ1Y3QgcGFnZSAqdGltZV9wYWdlOworCisJYm9vbCBubWlfcGVuZGluZzsKKwlib29sIG5taV9pbmplY3RlZDsKKworCXU2NCBtdHJyWzB4MTAwXTsKK307CisKK3N0cnVjdCBrdm1fbWVtX2FsaWFzIHsKKwlnZm5fdCBiYXNlX2dmbjsKKwl1bnNpZ25lZCBsb25nIG5wYWdlczsKKwlnZm5fdCB0YXJnZXRfZ2ZuOworfTsKKworc3RydWN0IGt2bV9hcmNoeworCWludCBuYWxpYXNlczsKKwlzdHJ1Y3Qga3ZtX21lbV9hbGlhcyBhbGlhc2VzW0tWTV9BTElBU19TTE9UU107CisKKwl1bnNpZ25lZCBpbnQgbl9mcmVlX21tdV9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbl9yZXF1ZXN0ZWRfbW11X3BhZ2VzOworCXVuc2lnbmVkIGludCBuX2FsbG9jX21tdV9wYWdlczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBtbXVfcGFnZV9oYXNoW0tWTV9OVU1fTU1VX1BBR0VTXTsKKwkvKgorCSAqIEhhc2ggdGFibGUgb2Ygc3RydWN0IGt2bV9tbXVfcGFnZS4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9tbXVfcGFnZXM7CisJc3RydWN0IGxpc3RfaGVhZCBhc3NpZ25lZF9kZXZfaGVhZDsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmludGVsX2lvbW11X2RvbWFpbjsKKwlzdHJ1Y3Qga3ZtX3BpYyAqdnBpYzsKKwlzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYzsKKwlzdHJ1Y3Qga3ZtX3BpdCAqdnBpdDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBpcnFfYWNrX25vdGlmaWVyX2xpc3Q7CisKKwlpbnQgcm91bmRfcm9iaW5fcHJldl92Y3B1OworCXVuc2lnbmVkIGludCB0c3NfYWRkcjsKKwlzdHJ1Y3QgcGFnZSAqYXBpY19hY2Nlc3NfcGFnZTsKKworCWdwYV90IHdhbGxfY2xvY2s7CisKKwlzdHJ1Y3QgcGFnZSAqZXB0X2lkZW50aXR5X3BhZ2V0YWJsZTsKKwlib29sIGVwdF9pZGVudGl0eV9wYWdldGFibGVfZG9uZTsKK307CisKK3N0cnVjdCBrdm1fdm1fc3RhdCB7CisJdTMyIG1tdV9zaGFkb3dfemFwcGVkOworCXUzMiBtbXVfcHRlX3dyaXRlOworCXUzMiBtbXVfcHRlX3VwZGF0ZWQ7CisJdTMyIG1tdV9wZGVfemFwcGVkOworCXUzMiBtbXVfZmxvb2RlZDsKKwl1MzIgbW11X3JlY3ljbGVkOworCXUzMiBtbXVfY2FjaGVfbWlzczsKKwl1MzIgbW11X3Vuc3luYzsKKwl1MzIgcmVtb3RlX3RsYl9mbHVzaDsKKwl1MzIgbHBhZ2VzOworfTsKKworc3RydWN0IGt2bV92Y3B1X3N0YXQgeworCXUzMiBwZl9maXhlZDsKKwl1MzIgcGZfZ3Vlc3Q7CisJdTMyIHRsYl9mbHVzaDsKKwl1MzIgaW52bHBnOworCisJdTMyIGV4aXRzOworCXUzMiBpb19leGl0czsKKwl1MzIgbW1pb19leGl0czsKKwl1MzIgc2lnbmFsX2V4aXRzOworCXUzMiBpcnFfd2luZG93X2V4aXRzOworCXUzMiBubWlfd2luZG93X2V4aXRzOworCXUzMiBoYWx0X2V4aXRzOworCXUzMiBoYWx0X3dha2V1cDsKKwl1MzIgcmVxdWVzdF9pcnFfZXhpdHM7CisJdTMyIGlycV9leGl0czsKKwl1MzIgaG9zdF9zdGF0ZV9yZWxvYWQ7CisJdTMyIGVmZXJfcmVsb2FkOworCXUzMiBmcHVfcmVsb2FkOworCXUzMiBpbnNuX2VtdWxhdGlvbjsKKwl1MzIgaW5zbl9lbXVsYXRpb25fZmFpbDsKKwl1MzIgaHlwZXJjYWxsczsKKwl1MzIgaXJxX2luamVjdGlvbnM7Cit9OworCitzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSB7CisJdTE2IGxpbWl0OworCXVuc2lnbmVkIGxvbmcgYmFzZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBrdm1feDg2X29wcyB7CisJaW50ICgqY3B1X2hhc19rdm1fc3VwcG9ydCkodm9pZCk7ICAgICAgICAgIC8qIF9faW5pdCAqLworCWludCAoKmRpc2FibGVkX2J5X2Jpb3MpKHZvaWQpOyAgICAgICAgICAgICAvKiBfX2luaXQgKi8KKwl2b2lkICgqaGFyZHdhcmVfZW5hYmxlKSh2b2lkICpkdW1teSk7ICAgICAgLyogX19pbml0ICovCisJdm9pZCAoKmhhcmR3YXJlX2Rpc2FibGUpKHZvaWQgKmR1bW15KTsKKwl2b2lkICgqY2hlY2tfcHJvY2Vzc29yX2NvbXBhdGliaWxpdHkpKHZvaWQgKnJ0bik7CisJaW50ICgqaGFyZHdhcmVfc2V0dXApKHZvaWQpOyAgICAgICAgICAgICAgIC8qIF9faW5pdCAqLworCXZvaWQgKCpoYXJkd2FyZV91bnNldHVwKSh2b2lkKTsgICAgICAgICAgICAvKiBfX2V4aXQgKi8KKwlib29sICgqY3B1X2hhc19hY2NlbGVyYXRlZF90cHIpKHZvaWQpOworCisJLyogQ3JlYXRlLCBidXQgZG8gbm90IGF0dGFjaCB0aGlzIFZDUFUgKi8KKwlzdHJ1Y3Qga3ZtX3ZjcHUgKigqdmNwdV9jcmVhdGUpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaWQpOworCXZvaWQgKCp2Y3B1X2ZyZWUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqdmNwdV9yZXNldCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKworCXZvaWQgKCpwcmVwYXJlX2d1ZXN0X3N3aXRjaCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwl2b2lkICgqdmNwdV9sb2FkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOworCXZvaWQgKCp2Y3B1X3B1dCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKworCWludCAoKnNldF9ndWVzdF9kZWJ1Zykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZyk7CisJdm9pZCAoKmd1ZXN0X2RlYnVnX3ByZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwlpbnQgKCpnZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCAqcGRhdGEpOworCWludCAoKnNldF9tc3IpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0IGRhdGEpOworCXU2NCAoKmdldF9zZWdtZW50X2Jhc2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZyk7CisJdm9pZCAoKmdldF9zZWdtZW50KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpOworCWludCAoKmdldF9jcGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKnNldF9zZWdtZW50KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpOworCXZvaWQgKCpnZXRfY3NfZGJfbF9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqZGIsIGludCAqbCk7CisJdm9pZCAoKmRlY2FjaGVfY3I0X2d1ZXN0X2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKnNldF9jcjApKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApOworCXZvaWQgKCpzZXRfY3IzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKKwl2b2lkICgqc2V0X2NyNCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCk7CisJdm9pZCAoKnNldF9lZmVyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKTsKKwl2b2lkICgqZ2V0X2lkdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpOworCXZvaWQgKCpzZXRfaWR0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCk7CisJdm9pZCAoKmdldF9nZHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKmR0KTsKKwl2b2lkICgqc2V0X2dkdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKTsKKwl2b2lkICgqc2V0X2RyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSwKKwkJICAgICAgIGludCAqZXhjZXB0aW9uKTsKKwl2b2lkICgqY2FjaGVfcmVnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0ga3ZtX3JlZyByZWcpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfcmZsYWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCpzZXRfcmZsYWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmZsYWdzKTsKKworCXZvaWQgKCp0bGJfZmx1c2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKKwl2b2lkICgqcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pOworCWludCAoKmhhbmRsZV9leGl0KShzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCpwYXRjaF9oeXBlcmNhbGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQl1bnNpZ25lZCBjaGFyICpoeXBlcmNhbGxfYWRkcik7CisJaW50ICgqZ2V0X2lycSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwl2b2lkICgqc2V0X2lycSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjKTsKKwl2b2lkICgqcXVldWVfZXhjZXB0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIG5yLAorCQkJCWJvb2wgaGFzX2Vycm9yX2NvZGUsIHUzMiBlcnJvcl9jb2RlKTsKKwlib29sICgqZXhjZXB0aW9uX2luamVjdGVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCppbmplY3RfcGVuZGluZ19pcnEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKmluamVjdF9wZW5kaW5nX3ZlY3RvcnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgICAgc3RydWN0IGt2bV9ydW4gKnJ1bik7CisKKwlpbnQgKCpzZXRfdHNzX2FkZHIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpOworCWludCAoKmdldF90ZHBfbGV2ZWwpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyAqa3ZtX3g4Nl9vcHM7CisKK2ludCBrdm1fbW11X21vZHVsZV9pbml0KHZvaWQpOwordm9pZCBrdm1fbW11X21vZHVsZV9leGl0KHZvaWQpOworCit2b2lkIGt2bV9tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQga3ZtX21tdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fbW11X3NldF9ub25wcmVzZW50X3B0ZXModTY0IHRyYXBfcHRlLCB1NjQgbm90cmFwX3B0ZSk7Cit2b2lkIGt2bV9tbXVfc2V0X2Jhc2VfcHRlcyh1NjQgYmFzZV9wdGUpOwordm9pZCBrdm1fbW11X3NldF9tYXNrX3B0ZXModTY0IHVzZXJfbWFzaywgdTY0IGFjY2Vzc2VkX21hc2ssCisJCXU2NCBkaXJ0eV9tYXNrLCB1NjQgbnhfbWFzaywgdTY0IHhfbWFzayk7CisKK2ludCBrdm1fbW11X3Jlc2V0X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdCk7Cit2b2lkIGt2bV9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pOwordW5zaWduZWQgaW50IGt2bV9tbXVfY2FsY3VsYXRlX21tdV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pOwordm9pZCBrdm1fbW11X2NoYW5nZV9tbXVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQga3ZtX25yX21tdV9wYWdlcyk7CisKK2ludCBsb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKKworaW50IGVtdWxhdG9yX3dyaXRlX3BoeXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCisJCQkgIGNvbnN0IHZvaWQgKnZhbCwgaW50IGJ5dGVzKTsKK2ludCBrdm1fcHZfbW11X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJICBncGFfdCBhZGRyLCB1bnNpZ25lZCBsb25nICpyZXQpOworCitleHRlcm4gYm9vbCB0ZHBfZW5hYmxlZDsKKworZW51bSBlbXVsYXRpb25fcmVzdWx0IHsKKwlFTVVMQVRFX0RPTkUsICAgICAgIC8qIG5vIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLworCUVNVUxBVEVfRE9fTU1JTywgICAgICAvKiBrdm1fcnVuIGZpbGxlZCB3aXRoIG1taW8gcmVxdWVzdCAqLworCUVNVUxBVEVfRkFJTCwgICAgICAgICAvKiBjYW4ndCBlbXVsYXRlIHRoaXMgaW5zdHJ1Y3Rpb24gKi8KK307CisKKyNkZWZpbmUgRU1VTFRZUEVfTk9fREVDT0RFCSAgICAoMSA8PCAwKQorI2RlZmluZSBFTVVMVFlQRV9UUkFQX1VECSAgICAoMSA8PCAxKQoraW50IGVtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLAorCQkJdW5zaWduZWQgbG9uZyBjcjIsIHUxNiBlcnJvcl9jb2RlLCBpbnQgZW11bGF0aW9uX3R5cGUpOwordm9pZCBrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKHN0cnVjdCBrdm1fdmNwdSAqY3ZwdSwgY29uc3QgY2hhciAqY29udGV4dCk7Cit2b2lkIHJlYWxtb2RlX2xnZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2l6ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK3ZvaWQgcmVhbG1vZGVfbGlkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzaXplLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwordm9pZCByZWFsbW9kZV9sbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3csCisJCSAgIHVuc2lnbmVkIGxvbmcgKnJmbGFncyk7CisKK3Vuc2lnbmVkIGxvbmcgcmVhbG1vZGVfZ2V0X2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNyKTsKK3ZvaWQgcmVhbG1vZGVfc2V0X2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNyLCB1bnNpZ25lZCBsb25nIHZhbHVlLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgKnJmbGFncyk7Cit2b2lkIGt2bV9lbmFibGVfZWZlcl9iaXRzKHU2NCk7CitpbnQga3ZtX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKmRhdGEpOworaW50IGt2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0IGRhdGEpOworCitzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dDsKKworaW50IGt2bV9lbXVsYXRlX3BpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sIGludCBpbiwKKwkJICAgICBpbnQgc2l6ZSwgdW5zaWduZWQgcG9ydCk7CitpbnQga3ZtX2VtdWxhdGVfcGlvX3N0cmluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sIGludCBpbiwKKwkJCSAgIGludCBzaXplLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgZG93biwKKwkJCSAgICBndmFfdCBhZGRyZXNzLCBpbnQgcmVwLCB1bnNpZ25lZCBwb3J0KTsKK3ZvaWQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQgZW11bGF0ZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyZXNzKTsKK2ludCBlbXVsYXRlX2NsdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBlbXVsYXRvcl9nZXRfZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBkciwKKwkJICAgIHVuc2lnbmVkIGxvbmcgKmRlc3QpOworaW50IGVtdWxhdG9yX3NldF9kcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLAorCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisKK3ZvaWQga3ZtX2dldF9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpOworaW50IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwKKwkJCQlpbnQgdHlwZV9iaXRzLCBpbnQgc2VnKTsKKworaW50IGt2bV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsIGludCByZWFzb24pOworCit2b2lkIGt2bV9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApOwordm9pZCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKK3ZvaWQga3ZtX3NldF9jcjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCk7Cit2b2lkIGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpOwordW5zaWduZWQgbG9uZyBrdm1fZ2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fbG1zdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbXN3KTsKK3ZvaWQga3ZtX2dldF9jc19kYl9sX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKmRiLCBpbnQgKmwpOworCitpbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSk7CitpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpOworCit2b2lkIGt2bV9xdWV1ZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBucik7Cit2b2lkIGt2bV9xdWV1ZV9leGNlcHRpb25fZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIG5yLCB1MzIgZXJyb3JfY29kZSk7Cit2b2lkIGt2bV9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IyLAorCQkJICAgdTMyIGVycm9yX2NvZGUpOworCit2b2lkIGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCk7CisKK3ZvaWQga3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwordm9pZCBmeF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKK2ludCBlbXVsYXRvcl9yZWFkX3N0ZCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgICAgIHZvaWQgKnZhbCwKKwkJICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICBjb25zdCB2b2lkICp2YWwsCisJCQkgICAgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKK3Vuc2lnbmVkIGxvbmcgc2VnbWVudF9iYXNlKHUxNiBzZWxlY3Rvcik7CisKK3ZvaWQga3ZtX21tdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX21tdV9wdGVfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCisJCSAgICAgICBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpOworaW50IGt2bV9tbXVfdW5wcm90ZWN0X3BhZ2VfdmlydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7Cit2b2lkIF9fa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fbW11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX21tdV91bmxvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX21tdV9zeW5jX3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKK2ludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKworaW50IGt2bV9maXhfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKK2ludCBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHUzMiBlcnJvcl9jb2RlKTsKK3ZvaWQga3ZtX21tdV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpOworCit2b2lkIGt2bV9lbmFibGVfdGRwKHZvaWQpOwordm9pZCBrdm1fZGlzYWJsZV90ZHAodm9pZCk7CisKK2ludCBsb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKK2ludCBjb21wbGV0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlX2hlYWRlcihocGFfdCBzaGFkb3dfcGFnZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHNoYWRvd19wYWdlID4+IFBBR0VfU0hJRlQpOworCisJcmV0dXJuIChzdHJ1Y3Qga3ZtX21tdV9wYWdlICopcGFnZV9wcml2YXRlKHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBrdm1fcmVhZF9mcyh2b2lkKQoreworCXUxNiBzZWc7CisJYXNtKCJtb3YgJSVmcywgJTAiIDogIj1nIihzZWcpKTsKKwlyZXR1cm4gc2VnOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBrdm1fcmVhZF9ncyh2b2lkKQoreworCXUxNiBzZWc7CisJYXNtKCJtb3YgJSVncywgJTAiIDogIj1nIihzZWcpKTsKKwlyZXR1cm4gc2VnOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBrdm1fcmVhZF9sZHQodm9pZCkKK3sKKwl1MTYgbGR0OworCWFzbSgic2xkdCAlMCIgOiAiPWciKGxkdCkpOworCXJldHVybiBsZHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbG9hZF9mcyh1MTYgc2VsKQoreworCWFzbSgibW92ICUwLCAlJWZzIiA6IDogInJtIihzZWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9sb2FkX2dzKHUxNiBzZWwpCit7CisJYXNtKCJtb3YgJTAsICUlZ3MiIDogOiAicm0iKHNlbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xvYWRfbGR0KHUxNiBzZWwpCit7CisJYXNtKCJsbGR0ICUwIiA6IDogInJtIihzZWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9nZXRfaWR0KHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICp0YWJsZSkKK3sKKwlhc20oInNpZHQgJTAiIDogIj1tIigqdGFibGUpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9nZXRfZ2R0KHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICp0YWJsZSkKK3sKKwlhc20oInNnZHQgJTAiIDogIj1tIigqdGFibGUpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yZWFkX3RyX2Jhc2Uodm9pZCkKK3sKKwl1MTYgdHI7CisJYXNtKCJzdHIgJTAiIDogIj1nIih0cikpOworCXJldHVybiBzZWdtZW50X2Jhc2UodHIpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfbXNyKHVuc2lnbmVkIGxvbmcgbXNyKQoreworCXU2NCB2YWx1ZTsKKworCXJkbXNybChtc3IsIHZhbHVlKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9meF9zYXZlKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmltYWdlKQoreworCWFzbSgiZnhzYXZlICglMCkiOjogInIiIChpbWFnZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2Z4X3Jlc3RvcmUoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqaW1hZ2UpCit7CisJYXNtKCJmeHJzdG9yICglMCkiOjogInIiIChpbWFnZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2Z4X2Zpbml0KHZvaWQpCit7CisJYXNtKCJmaW5pdCIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfcmR4X2luaXRfdmFsKHZvaWQpCit7CisJcmV0dXJuIDB4NjAwOyAvKiBQNiBmYW1pbHkgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9pbmplY3RfZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZXJyb3JfY29kZSkKK3sKKwlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgR1BfVkVDVE9SLCBlcnJvcl9jb2RlKTsKK30KKworI2RlZmluZSBBU01fVk1YX1ZNQ0xFQVJfUkFYICAgICAgICIuYnl0ZSAweDY2LCAweDBmLCAweGM3LCAweDMwIgorI2RlZmluZSBBU01fVk1YX1ZNTEFVTkNIICAgICAgICAgICIuYnl0ZSAweDBmLCAweDAxLCAweGMyIgorI2RlZmluZSBBU01fVk1YX1ZNUkVTVU1FICAgICAgICAgICIuYnl0ZSAweDBmLCAweDAxLCAweGMzIgorI2RlZmluZSBBU01fVk1YX1ZNUFRSTERfUkFYICAgICAgICIuYnl0ZSAweDBmLCAweGM3LCAweDMwIgorI2RlZmluZSBBU01fVk1YX1ZNUkVBRF9SRFhfUkFYICAgICIuYnl0ZSAweDBmLCAweDc4LCAweGQwIgorI2RlZmluZSBBU01fVk1YX1ZNV1JJVEVfUkFYX1JEWCAgICIuYnl0ZSAweDBmLCAweDc5LCAweGQwIgorI2RlZmluZSBBU01fVk1YX1ZNV1JJVEVfUlNQX1JEWCAgICIuYnl0ZSAweDBmLCAweDc5LCAweGQ0IgorI2RlZmluZSBBU01fVk1YX1ZNWE9GRiAgICAgICAgICAgICIuYnl0ZSAweDBmLCAweDAxLCAweGM0IgorI2RlZmluZSBBU01fVk1YX1ZNWE9OX1JBWCAgICAgICAgICIuYnl0ZSAweGYzLCAweDBmLCAweGM3LCAweDMwIgorI2RlZmluZSBBU01fVk1YX0lOVkVQVAkJICAiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHg4MCwgMHgwOCIKKyNkZWZpbmUgQVNNX1ZNWF9JTlZWUElECQkgICIuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweDgxLCAweDA4IgorCisjZGVmaW5lIE1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUgkJMHgwMTAKKworI2RlZmluZSBUU1NfSU9QQl9CQVNFX09GRlNFVCAweDY2CisjZGVmaW5lIFRTU19CQVNFX1NJWkUgMHg2OAorI2RlZmluZSBUU1NfSU9QQl9TSVpFICg2NTUzNiAvIDgpCisjZGVmaW5lIFRTU19SRURJUkVDVElPTl9TSVpFICgyNTYgLyA4KQorI2RlZmluZSBSTU9ERV9UU1NfU0laRQkJCQkJCQlcCisJKFRTU19CQVNFX1NJWkUgKyBUU1NfUkVESVJFQ1RJT05fU0laRSArIFRTU19JT1BCX1NJWkUgKyAxKQorCitlbnVtIHsKKwlUQVNLX1NXSVRDSF9DQUxMID0gMCwKKwlUQVNLX1NXSVRDSF9JUkVUID0gMSwKKwlUQVNLX1NXSVRDSF9KTVAgPSAyLAorCVRBU0tfU1dJVENIX0dBVEUgPSAzLAorfTsKKworLyoKKyAqIEhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgbWF5IGZhdWx0IGlmIGEKKyAqIHJlYm9vdCB0dXJucyBvZmYgdmlydHVhbGl6YXRpb24gd2hpbGUgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgorICogVHJhcCB0aGUgZmF1bHQgYW5kIGlnbm9yZSB0aGUgaW5zdHJ1Y3Rpb24gaWYgdGhhdCBoYXBwZW5zLgorICovCithc21saW5rYWdlIHZvaWQga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3Qodm9pZCk7CisKKyNkZWZpbmUgX19rdm1faGFuZGxlX2ZhdWx0X29uX3JlYm9vdChpbnNuKSBcCisJIjY2NjogIiBpbnNuICJcblx0IiBcCisJIi5wdXNoc2VjdGlvbiAuZml4dXAsIFwiYXhcIiBcbiIgXAorCSI2Njc6IFxuXHQiIFwKKwlfX0FTTV9TSVpFKHB1c2gpICIgJDY2NmIgXG5cdCIJICAgICAgXAorCSJqbXAga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QgXG5cdCIgXAorCSIucG9wc2VjdGlvbiBcblx0IiBcCisJIi5wdXNoc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIiBcblx0IiBcCisJX0FTTV9QVFIgIiA2NjZiLCA2NjdiIFxuXHQiIFwKKwkiLnBvcHNlY3Rpb24iCisKKyNkZWZpbmUgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKK2ludCBrdm1fdW5tYXBfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOworaW50IGt2bV9hZ2VfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOworCisjZW5kaWYgLyogX0FTTV9YODZfS1ZNX0hPU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhMzMwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKQEAgLTAsMCArMSwxNDcgQEAKKyNpZm5kZWYgX0FTTV9YODZfS1ZNX1BBUkFfSAorI2RlZmluZSBfQVNNX1g4Nl9LVk1fUEFSQV9ICisKKy8qIFRoaXMgQ1BVSUQgcmV0dXJucyB0aGUgc2lnbmF0dXJlICdLVk1LVk1LVk0nIGluIGVieCwgZWN4LCBhbmQgZWR4LiAgSXQKKyAqIHNob3VsZCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGF0IGEgVk0gaXMgcnVubmluZyB1bmRlciBLVk0uCisgKi8KKyNkZWZpbmUgS1ZNX0NQVUlEX1NJR05BVFVSRQkweDQwMDAwMDAwCisKKy8qIFRoaXMgQ1BVSUQgcmV0dXJucyBhIGZlYXR1cmUgYml0bWFwIGluIGVheC4gIEJlZm9yZSBlbmFibGluZyBhIHBhcnRpY3VsYXIKKyAqIHBhcmF2aXJ0dWFsaXphdGlvbiwgdGhlIGFwcHJvcHJpYXRlIGZlYXR1cmUgYml0IHNob3VsZCBiZSBjaGVja2VkLgorICovCisjZGVmaW5lIEtWTV9DUFVJRF9GRUFUVVJFUwkweDQwMDAwMDAxCisjZGVmaW5lIEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFCQkwCisjZGVmaW5lIEtWTV9GRUFUVVJFX05PUF9JT19ERUxBWQkxCisjZGVmaW5lIEtWTV9GRUFUVVJFX01NVV9PUAkJMgorCisjZGVmaW5lIE1TUl9LVk1fV0FMTF9DTE9DSyAgMHgxMQorI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FIDB4MTIKKworI2RlZmluZSBLVk1fTUFYX01NVV9PUF9CQVRDSCAgICAgICAgICAgMzIKKworLyogT3BlcmF0aW9ucyBmb3IgS1ZNX0hDX01NVV9PUCAqLworI2RlZmluZSBLVk1fTU1VX09QX1dSSVRFX1BURSAgICAgICAgICAgIDEKKyNkZWZpbmUgS1ZNX01NVV9PUF9GTFVTSF9UTEIJICAgICAgICAyCisjZGVmaW5lIEtWTV9NTVVfT1BfUkVMRUFTRV9QVAkgICAgICAgIDMKKworLyogUGF5bG9hZCBmb3IgS1ZNX0hDX01NVV9PUCAqLworc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIHsKKwlfX3UzMiBvcDsKKwlfX3UzMiBwYWQ7Cit9OworCitzdHJ1Y3Qga3ZtX21tdV9vcF93cml0ZV9wdGUgeworCXN0cnVjdCBrdm1fbW11X29wX2hlYWRlciBoZWFkZXI7CisJX191NjQgcHRlX3BoeXM7CisJX191NjQgcHRlX3ZhbDsKK307CisKK3N0cnVjdCBrdm1fbW11X29wX2ZsdXNoX3RsYiB7CisJc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIGhlYWRlcjsKK307CisKK3N0cnVjdCBrdm1fbW11X29wX3JlbGVhc2VfcHQgeworCXN0cnVjdCBrdm1fbW11X29wX2hlYWRlciBoZWFkZXI7CisJX191NjQgcHRfcGh5czsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitleHRlcm4gdm9pZCBrdm1jbG9ja19pbml0KHZvaWQpOworCisKKy8qIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgdm1jYWxsLiAgT24gbm9uLVZUIGFyY2hpdGVjdHVyZXMsIGl0IHdpbGwgZ2VuZXJhdGUgYQorICogdHJhcCB0aGF0IHdlIHdpbGwgdGhlbiByZXdyaXRlIHRvIHRoZSBhcHByb3ByaWF0ZSBpbnN0cnVjdGlvbi4KKyAqLworI2RlZmluZSBLVk1fSFlQRVJDQUxMICIuYnl0ZSAweDBmLDB4MDEsMHhjMSIKKworLyogRm9yIEtWTSBoeXBlcmNhbGxzLCBhIHRocmVlLWJ5dGUgc2VxdWVuY2Ugb2YgZWl0aGVyIHRoZSB2bXJ1biBvciB0aGUgdm1tcnVuCisgKiBpbnN0cnVjdGlvbi4gIFRoZSBoeXBlcnZpc29yIG1heSByZXBsYWNlIGl0IHdpdGggc29tZXRoaW5nIGVsc2UgYnV0IG9ubHkgdGhlCisgKiBpbnN0cnVjdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkLgorICoKKyAqIFVwIHRvIGZvdXIgYXJndW1lbnRzIG1heSBiZSBwYXNzZWQgaW4gcmJ4LCByY3gsIHJkeCwgYW5kIHJzaSByZXNwZWN0aXZlbHkuCisgKiBUaGUgaHlwZXJjYWxsIG51bWJlciBzaG91bGQgYmUgcGxhY2VkIGluIHJheCBhbmQgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlCisgKiBwbGFjZWQgaW4gcmF4LiAgTm8gb3RoZXIgcmVnaXN0ZXJzIHdpbGwgYmUgY2xvYmJlcmVkIHVubGVzcyBleHBsaWNpdGVkCisgKiBub3RlZCBieSB0aGUgcGFydGljdWxhciBoeXBlcmNhbGwuCisgKi8KKworc3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwwKHVuc2lnbmVkIGludCBucikKK3sKKwlsb25nIHJldDsKKwlhc20gdm9sYXRpbGUoS1ZNX0hZUEVSQ0FMTAorCQkgICAgIDogIj1hIihyZXQpCisJCSAgICAgOiAiYSIobnIpCisJCSAgICAgOiAibWVtb3J5Iik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwxKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSkKK3sKKwlsb25nIHJldDsKKwlhc20gdm9sYXRpbGUoS1ZNX0hZUEVSQ0FMTAorCQkgICAgIDogIj1hIihyZXQpCisJCSAgICAgOiAiYSIobnIpLCAiYiIocDEpCisJCSAgICAgOiAibWVtb3J5Iik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwyKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcDIpCit7CisJbG9uZyByZXQ7CisJYXNtIHZvbGF0aWxlKEtWTV9IWVBFUkNBTEwKKwkJICAgICA6ICI9YSIocmV0KQorCQkgICAgIDogImEiKG5yKSwgImIiKHAxKSwgImMiKHAyKQorCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsCisJCQkJICB1bnNpZ25lZCBsb25nIHAyLCB1bnNpZ25lZCBsb25nIHAzKQoreworCWxvbmcgcmV0OworCWFzbSB2b2xhdGlsZShLVk1fSFlQRVJDQUxMCisJCSAgICAgOiAiPWEiKHJldCkKKwkJICAgICA6ICJhIihuciksICJiIihwMSksICJjIihwMiksICJkIihwMykKKwkJICAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDQodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLAorCQkJCSAgdW5zaWduZWQgbG9uZyBwMiwgdW5zaWduZWQgbG9uZyBwMywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcDQpCit7CisJbG9uZyByZXQ7CisJYXNtIHZvbGF0aWxlKEtWTV9IWVBFUkNBTEwKKwkJICAgICA6ICI9YSIocmV0KQorCQkgICAgIDogImEiKG5yKSwgImIiKHAxKSwgImMiKHAyKSwgImQiKHAzKSwgIlMiKHA0KQorCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CisJY2hhciBzaWduYXR1cmVbMTNdOworCisJY3B1aWQoS1ZNX0NQVUlEX1NJR05BVFVSRSwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisJbWVtY3B5KHNpZ25hdHVyZSArIDAsICZlYngsIDQpOworCW1lbWNweShzaWduYXR1cmUgKyA0LCAmZWN4LCA0KTsKKwltZW1jcHkoc2lnbmF0dXJlICsgOCwgJmVkeCwgNCk7CisJc2lnbmF0dXJlWzEyXSA9IDA7CisKKwlpZiAoc3RyY21wKHNpZ25hdHVyZSwgIktWTUtWTUtWTSIpID09IDApCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGt2bV9hcmNoX3BhcmFfZmVhdHVyZXModm9pZCkKK3sKKwlyZXR1cm4gY3B1aWRfZWF4KEtWTV9DUFVJRF9GRUFUVVJFUyk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfS1ZNX1BBUkFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3g4Nl9lbXVsYXRlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1feDg2X2VtdWxhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTE3OWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3g4Nl9lbXVsYXRlLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHg4Nl9lbXVsYXRlLmgKKyAqCisgKiBHZW5lcmljIHg4NiAoMzItYml0IGFuZCA2NC1iaXQpIGluc3RydWN0aW9uIGRlY29kZXIgYW5kIGVtdWxhdG9yLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBLZWlyIEZyYXNlcgorICoKKyAqIEZyb206IHhlbi11bnN0YWJsZSAxMDY3NjphZjk4MDlmNTFmODFhM2M0M2YyNzZmMDBjODFhNTJlZjU1OGFmZGE0CisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9LVk1fWDg2X0VNVUxBVEVfSAorI2RlZmluZSBfQVNNX1g4Nl9LVk1fWDg2X0VNVUxBVEVfSAorCitzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dDsKKworLyoKKyAqIHg4Nl9lbXVsYXRlX29wczoKKyAqCisgKiBUaGVzZSBvcGVyYXRpb25zIHJlcHJlc2VudCB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IncyBpbnRlcmZhY2UgdG8gbWVtb3J5LgorICogVGhlcmUgYXJlIHR3byBjYXRlZ29yaWVzIG9mIG9wZXJhdGlvbjogdGhvc2UgdGhhdCBhY3Qgb24gb3JkaW5hcnkgbWVtb3J5CisgKiByZWdpb25zICgqX3N0ZCksIGFuZCB0aG9zZSB0aGF0IGFjdCBvbiBtZW1vcnkgcmVnaW9ucyBrbm93biB0byByZXF1aXJlCisgKiBzcGVjaWFsIHRyZWF0bWVudCBvciBlbXVsYXRpb24gKCpfZW11bGF0ZWQpLgorICoKKyAqIFRoZSBlbXVsYXRvciBhc3N1bWVzIHRoYXQgYW4gaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgb25seSBvbmUgJ2VtdWxhdGVkIG1lbW9yeScKKyAqIGxvY2F0aW9uLCB0aGF0IHRoaXMgbG9jYXRpb24gaXMgdGhlIGdpdmVuIGxpbmVhciBmYXVsdGluZyBhZGRyZXNzIChjcjIpLCBhbmQKKyAqIHRoYXQgdGhpcyBpcyBvbmUgb2YgdGhlIGluc3RydWN0aW9uJ3MgZGF0YSBvcGVyYW5kcy4gSW5zdHJ1Y3Rpb24gZmV0Y2hlcyBhbmQKKyAqIHN0YWNrIG9wZXJhdGlvbnMgYXJlIGFzc3VtZWQgbmV2ZXIgdG8gYWNjZXNzIGVtdWxhdGVkIG1lbW9yeS4gVGhlIGVtdWxhdG9yCisgKiBhdXRvbWF0aWNhbGx5IGRlZHVjZXMgd2hpY2ggb3BlcmFuZCBvZiBhIHN0cmluZy1tb3ZlIG9wZXJhdGlvbiBpcyBhY2Nlc3NpbmcKKyAqIGVtdWxhdGVkIG1lbW9yeSwgYW5kIGFzc3VtZXMgdGhhdCB0aGUgb3RoZXIgb3BlcmFuZCBhY2Nlc3NlcyBub3JtYWwgbWVtb3J5LgorICoKKyAqIE5PVEVTOgorICogIDEuIFRoZSBlbXVsYXRvciBpc24ndCB2ZXJ5IHNtYXJ0IGFib3V0IGVtdWxhdGVkIHZzLiBzdGFuZGFyZCBtZW1vcnkuCisgKiAgICAgJ0VtdWxhdGVkIG1lbW9yeScgYWNjZXNzIGFkZHJlc3NlcyBzaG91bGQgYmUgY2hlY2tlZCBmb3Igc2FuaXR5LgorICogICAgICdOb3JtYWwgbWVtb3J5JyBhY2Nlc3NlcyBtYXkgZmF1bHQsIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSB0bworICogICAgIGRldGVjdCBhbmQgaGFuZGxlIHJlZW50cmFuY3kgaW50byB0aGUgZW11bGF0b3IgdmlhIHJlY3Vyc2l2ZSBmYXVsdHMuCisgKiAgICAgQWNjZXNzZXMgbWF5IGJlIHVuYWxpZ25lZCBhbmQgbWF5IGNyb3NzIHBhZ2UgYm91bmRhcmllcy4KKyAqICAyLiBJZiB0aGUgYWNjZXNzIGZhaWxzIChjYW5ub3QgZW11bGF0ZSwgb3IgYSBzdGFuZGFyZCBhY2Nlc3MgZmF1bHRzKSB0aGVuCisgKiAgICAgaXQgaXMgdXAgdG8gdGhlIG1lbW9wIHRvIHByb3BhZ2F0ZSB0aGUgZmF1bHQgdG8gdGhlIGd1ZXN0IFZNIHZpYQorICogICAgIHNvbWUgb3V0LW9mLWJhbmQgbWVjaGFuaXNtLCB1bmtub3duIHRvIHRoZSBlbXVsYXRvci4gVGhlIG1lbW9wIHNpZ25hbHMKKyAqICAgICBmYWlsdXJlIGJ5IHJldHVybmluZyBYODZFTVVMX1BST1BBR0FURV9GQVVMVCB0byB0aGUgZW11bGF0b3IsIHdoaWNoIHdpbGwKKyAqICAgICB0aGVuIGltbWVkaWF0ZWx5IGJhaWwuCisgKiAgMy4gVmFsaWQgYWNjZXNzIHNpemVzIGFyZSAxLCAyLCA0IGFuZCA4IGJ5dGVzLiBPbiB4ODYvMzIgc3lzdGVtcyBvbmx5CisgKiAgICAgY21weGNoZzhiX2VtdWxhdGVkIG5lZWQgc3VwcG9ydCA4LWJ5dGUgYWNjZXNzZXMuCisgKiAgNC4gVGhlIGVtdWxhdG9yIGNhbm5vdCBoYW5kbGUgNjQtYml0IG1vZGUgZW11bGF0aW9uIG9uIGFuIHg4Ni8zMiBzeXN0ZW0uCisgKi8KKy8qIEFjY2VzcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiBjb250aW51ZSBlbXVsYXRpb24gYXMgbm9ybWFsLiAqLworI2RlZmluZSBYODZFTVVMX0NPTlRJTlVFICAgICAgICAwCisvKiBBY2Nlc3MgaXMgdW5oYW5kbGVhYmxlOiBiYWlsIGZyb20gZW11bGF0aW9uIGFuZCByZXR1cm4gZXJyb3IgdG8gY2FsbGVyLiAqLworI2RlZmluZSBYODZFTVVMX1VOSEFORExFQUJMRSAgICAxCisvKiBUZXJtaW5hdGUgZW11bGF0aW9uIGJ1dCByZXR1cm4gc3VjY2VzcyB0byB0aGUgY2FsbGVyLiAqLworI2RlZmluZSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCAyIC8qIHByb3BhZ2F0ZSBhIGdlbmVyYXRlZCBmYXVsdCB0byBndWVzdCAqLworI2RlZmluZSBYODZFTVVMX1JFVFJZX0lOU1RSICAgICAyIC8qIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiBmb3Igc29tZSByZWFzb24gKi8KKyNkZWZpbmUgWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRCAgMiAvKiBjbXB4Y2hnIGRpZCBub3Qgc2VlIGV4cGVjdGVkIHZhbHVlICovCitzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHsKKwkvKgorCSAqIHJlYWRfc3RkOiBSZWFkIGJ5dGVzIG9mIHN0YW5kYXJkIChub24tZW11bGF0ZWQvc3BlY2lhbCkgbWVtb3J5LgorCSAqICAgICAgICAgICBVc2VkIGZvciBpbnN0cnVjdGlvbiBmZXRjaCwgc3RhY2sgb3BlcmF0aW9ucywgYW5kIG90aGVycy4KKwkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIHJlYWQuCisJICogIEB2YWw6ICAgW09VVF0gVmFsdWUgcmVhZCBmcm9tIG1lbW9yeSwgemVyby1leHRlbmRlZCB0byAndV9sb25nJy4KKwkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIG1lbW9yeS4KKwkgKi8KKwlpbnQgKCpyZWFkX3N0ZCkodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCisJCQl1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKKwkvKgorCSAqIHJlYWRfZW11bGF0ZWQ6IFJlYWQgYnl0ZXMgZnJvbSBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLgorCSAqICBAYWRkcjogIFtJTiBdIExpbmVhciBhZGRyZXNzIGZyb20gd2hpY2ggdG8gcmVhZC4KKwkgKiAgQHZhbDogICBbT1VUXSBWYWx1ZSByZWFkIGZyb20gbWVtb3J5LCB6ZXJvLWV4dGVuZGVkIHRvICd1X2xvbmcnLgorCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gbWVtb3J5LgorCSAqLworCWludCAoKnJlYWRfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgdm9pZCAqdmFsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKKwkvKgorCSAqIHdyaXRlX2VtdWxhdGVkOiBSZWFkIGJ5dGVzIGZyb20gZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KKwkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyB0byB3aGljaCB0byB3cml0ZS4KKwkgKiAgQHZhbDogICBbSU4gXSBWYWx1ZSB0byB3cml0ZSB0byBtZW1vcnkgKGxvdy1vcmRlciBieXRlcyB1c2VkIGFzCisJICogICAgICAgICAgICAgICAgcmVxdWlyZWQpLgorCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byB3cml0ZSB0byBtZW1vcnkuCisJICovCisJaW50ICgqd3JpdGVfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKKwkJCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKKwkvKgorCSAqIGNtcHhjaGdfZW11bGF0ZWQ6IEVtdWxhdGUgYW4gYXRvbWljIChMT0NLZWQpIENNUFhDSEcgb3BlcmF0aW9uIG9uIGFuCisJICogICAgICAgICAgICAgICAgICAgZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KKwkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyB0byBhY2Nlc3MuCisJICogIEBvbGQ6ICAgW0lOIF0gVmFsdWUgZXhwZWN0ZWQgdG8gYmUgY3VycmVudCBhdCBAYWRkci4KKwkgKiAgQG5ldzogICBbSU4gXSBWYWx1ZSB0byB3cml0ZSB0byBAYWRkci4KKwkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gYWNjZXNzIHVzaW5nIENNUFhDSEcuCisJICovCisJaW50ICgqY21weGNoZ19lbXVsYXRlZCkodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCWNvbnN0IHZvaWQgKm9sZCwKKwkJCQljb25zdCB2b2lkICpuZXcsCisJCQkJdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKK307CisKKy8qIFR5cGUsIGFkZHJlc3Mtb2YsIGFuZCB2YWx1ZSBvZiBhbiBpbnN0cnVjdGlvbidzIG9wZXJhbmQuICovCitzdHJ1Y3Qgb3BlcmFuZCB7CisJZW51bSB7IE9QX1JFRywgT1BfTUVNLCBPUF9JTU0sIE9QX05PTkUgfSB0eXBlOworCXVuc2lnbmVkIGludCBieXRlczsKKwl1bnNpZ25lZCBsb25nIHZhbCwgb3JpZ192YWwsICpwdHI7Cit9OworCitzdHJ1Y3QgZmV0Y2hfY2FjaGUgeworCXU4IGRhdGFbMTVdOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7Cit9OworCitzdHJ1Y3QgZGVjb2RlX2NhY2hlIHsKKwl1OCB0d29ieXRlOworCXU4IGI7CisJdTggbG9ja19wcmVmaXg7CisJdTggcmVwX3ByZWZpeDsKKwl1OCBvcF9ieXRlczsKKwl1OCBhZF9ieXRlczsKKwl1OCByZXhfcHJlZml4OworCXN0cnVjdCBvcGVyYW5kIHNyYzsKKwlzdHJ1Y3Qgb3BlcmFuZCBkc3Q7CisJYm9vbCBoYXNfc2VnX292ZXJyaWRlOworCXU4IHNlZ19vdmVycmlkZTsKKwl1bnNpZ25lZCBpbnQgZDsKKwl1bnNpZ25lZCBsb25nIHJlZ3NbTlJfVkNQVV9SRUdTXTsKKwl1bnNpZ25lZCBsb25nIGVpcDsKKwkvKiBtb2RybSAqLworCXU4IG1vZHJtOworCXU4IG1vZHJtX21vZDsKKwl1OCBtb2RybV9yZWc7CisJdTggbW9kcm1fcm07CisJdTggdXNlX21vZHJtX2VhOworCWJvb2wgcmlwX3JlbGF0aXZlOworCXVuc2lnbmVkIGxvbmcgbW9kcm1fZWE7CisJdm9pZCAqbW9kcm1fcHRyOworCXVuc2lnbmVkIGxvbmcgbW9kcm1fdmFsOworCXN0cnVjdCBmZXRjaF9jYWNoZSBmZXRjaDsKK307CisKK3N0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHsKKwkvKiBSZWdpc3RlciBzdGF0ZSBiZWZvcmUvYWZ0ZXIgZW11bGF0aW9uLiAqLworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKworCS8qIExpbmVhciBmYXVsdGluZyBhZGRyZXNzIChpZiBlbXVsYXRpbmcgYSBwYWdlLWZhdWx0aW5nIGluc3RydWN0aW9uKSAqLworCXVuc2lnbmVkIGxvbmcgZWZsYWdzOworCisJLyogRW11bGF0ZWQgZXhlY3V0aW9uIG1vZGUsIHJlcHJlc2VudGVkIGJ5IGFuIFg4NkVNVUxfTU9ERSB2YWx1ZS4gKi8KKwlpbnQgbW9kZTsKKworCXUzMiBjc19iYXNlOworCisJLyogZGVjb2RlIGNhY2hlICovCisKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlIGRlY29kZTsKK307CisKKy8qIFJlcGVhdCBTdHJpbmcgT3BlcmF0aW9uIFByZWZpeCAqLworI2RlZmluZSBSRVBFX1BSRUZJWCAgMQorI2RlZmluZSBSRVBORV9QUkVGSVggICAgMgorCisvKiBFeGVjdXRpb24gbW9kZSwgcGFzc2VkIHRvIHRoZSBlbXVsYXRvci4gKi8KKyNkZWZpbmUgWDg2RU1VTF9NT0RFX1JFQUwgICAgIDAJLyogUmVhbCBtb2RlLiAgICAgICAgICAgICAqLworI2RlZmluZSBYODZFTVVMX01PREVfUFJPVDE2ICAgMgkvKiAxNi1iaXQgcHJvdGVjdGVkIG1vZGUuICovCisjZGVmaW5lIFg4NkVNVUxfTU9ERV9QUk9UMzIgICA0CS8qIDMyLWJpdCBwcm90ZWN0ZWQgbW9kZS4gKi8KKyNkZWZpbmUgWDg2RU1VTF9NT0RFX1BST1Q2NCAgIDgJLyogNjQtYml0IChsb25nKSBtb2RlLiAgICAqLworCisvKiBIb3N0IGV4ZWN1dGlvbiBtb2RlLiAqLworI2lmIGRlZmluZWQoX19pMzg2X18pCisjZGVmaW5lIFg4NkVNVUxfTU9ERV9IT1NUIFg4NkVNVUxfTU9ERV9QUk9UMzIKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKyNkZWZpbmUgWDg2RU1VTF9NT0RFX0hPU1QgWDg2RU1VTF9NT0RFX1BST1Q2NAorI2VuZGlmCisKK2ludCB4ODZfZGVjb2RlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpOworaW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCSAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0tWTV9YODZfRU1VTEFURV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzI3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZHQuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogbGR0LmgKKyAqCisgKiBEZWZpbml0aW9ucyBvZiBzdHJ1Y3R1cmVzIHVzZWQgd2l0aCB0aGUgbW9kaWZ5X2xkdCBzeXN0ZW0gY2FsbC4KKyAqLworI2lmbmRlZiBfQVNNX1g4Nl9MRFRfSAorI2RlZmluZSBfQVNNX1g4Nl9MRFRfSAorCisvKiBNYXhpbXVtIG51bWJlciBvZiBMRFQgZW50cmllcyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIExEVF9FTlRSSUVTCTgxOTIKKy8qIFRoZSBzaXplIG9mIGVhY2ggTERUIGVudHJ5LiAqLworI2RlZmluZSBMRFRfRU5UUllfU0laRQk4CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogTm90ZSBvbiA2NGJpdCBiYXNlIGFuZCBsaW1pdCBpcyBpZ25vcmVkIGFuZCB5b3UgY2Fubm90IHNldCBEUy9FUy9DUworICogbm90IHRvIHRoZSBkZWZhdWx0IHZhbHVlcyBpZiB5b3Ugc3RpbGwgd2FudCB0byBkbyBzeXNjYWxscy4gVGhpcworICogY2FsbCBpcyBtb3JlIGZvciAzMmJpdCBtb2RlIHRoZXJlZm9yZS4KKyAqLworc3RydWN0IHVzZXJfZGVzYyB7CisJdW5zaWduZWQgaW50ICBlbnRyeV9udW1iZXI7CisJdW5zaWduZWQgaW50ICBiYXNlX2FkZHI7CisJdW5zaWduZWQgaW50ICBsaW1pdDsKKwl1bnNpZ25lZCBpbnQgIHNlZ18zMmJpdDoxOworCXVuc2lnbmVkIGludCAgY29udGVudHM6MjsKKwl1bnNpZ25lZCBpbnQgIHJlYWRfZXhlY19vbmx5OjE7CisJdW5zaWduZWQgaW50ICBsaW1pdF9pbl9wYWdlczoxOworCXVuc2lnbmVkIGludCAgc2VnX25vdF9wcmVzZW50OjE7CisJdW5zaWduZWQgaW50ICB1c2VhYmxlOjE7CisjaWZkZWYgX194ODZfNjRfXworCXVuc2lnbmVkIGludCAgbG06MTsKKyNlbmRpZgorfTsKKworI2RlZmluZSBNT0RJRllfTERUX0NPTlRFTlRTX0RBVEEJMAorI2RlZmluZSBNT0RJRllfTERUX0NPTlRFTlRTX1NUQUNLCTEKKyNkZWZpbmUgTU9ESUZZX0xEVF9DT05URU5UU19DT0RFCTIKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX1g4Nl9MRFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGd1ZXN0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjhhNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGd1ZXN0LmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9MR1VFU1RfSAorI2RlZmluZSBfQVNNX1g4Nl9MR1VFU1RfSAorCisjZGVmaW5lIEdEVF9FTlRSWV9MR1VFU1RfQ1MJMTAKKyNkZWZpbmUgR0RUX0VOVFJZX0xHVUVTVF9EUwkxMQorI2RlZmluZSBMR1VFU1RfQ1MJCShHRFRfRU5UUllfTEdVRVNUX0NTICogOCkKKyNkZWZpbmUgTEdVRVNUX0RTCQkoR0RUX0VOVFJZX0xHVUVTVF9EUyAqIDgpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKworI2RlZmluZSBHVUVTVF9QTCAxCisKKy8qIEV2ZXJ5IGd1ZXN0IG1hcHMgdGhlIGNvcmUgc3dpdGNoZXIgY29kZS4gKi8KKyNkZWZpbmUgU0hBUkVEX1NXSVRDSEVSX1BBR0VTIFwKKwlESVZfUk9VTkRfVVAoZW5kX3N3aXRjaGVyX3RleHQgLSBzdGFydF9zd2l0Y2hlcl90ZXh0LCBQQUdFX1NJWkUpCisvKiBQYWdlcyBmb3Igc3dpdGNoZXIgaXRzZWxmLCB0aGVuIHR3byBwYWdlcyBwZXIgY3B1ICovCisjZGVmaW5lIFRPVEFMX1NXSVRDSEVSX1BBR0VTIChTSEFSRURfU1dJVENIRVJfUEFHRVMgKyAyICogTlJfQ1BVUykKKworLyogV2UgbWFwIGF0IC00TSBmb3IgZWFzZSBvZiBtYXBwaW5nIGludG8gdGhlIGd1ZXN0IChvbmUgUFRFIHBhZ2UpLiAqLworI2RlZmluZSBTV0lUQ0hFUl9BRERSIDB4RkZDMDAwMDAKKworLyogRm91bmQgaW4gc3dpdGNoZXIuUyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9pZHRfZW50cmllc1tdOworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGRlZmluaXRpb25zIGluIGxndWVzdF9ndWVzdC5TICovCitleHRlcm4gY2hhciBsZ3Vlc3Rfbm9pcnFfc3RhcnRbXSwgbGd1ZXN0X25vaXJxX2VuZFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgbGdzdGFydF9jbGlbXSwgbGdlbmRfY2xpW107CitleHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X3N0aVtdLCBsZ2VuZF9zdGlbXTsKK2V4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfcG9wZltdLCBsZ2VuZF9wb3BmW107CitleHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X3B1c2hmW10sIGxnZW5kX3B1c2hmW107CitleHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X2lyZXRbXSwgbGdlbmRfaXJldFtdOworCitleHRlcm4gdm9pZCBsZ3Vlc3RfaXJldCh2b2lkKTsKK2V4dGVybiB2b2lkIGxndWVzdF9pbml0KHZvaWQpOworCitzdHJ1Y3QgbGd1ZXN0X3JlZ3MgeworCS8qIE1hbnVhbGx5IHNhdmVkIHBhcnQuICovCisJdW5zaWduZWQgbG9uZyBlYXgsIGVieCwgZWN4LCBlZHg7CisJdW5zaWduZWQgbG9uZyBlc2ksIGVkaSwgZWJwOworCXVuc2lnbmVkIGxvbmcgZ3M7CisJdW5zaWduZWQgbG9uZyBmcywgZHMsIGVzOworCXVuc2lnbmVkIGxvbmcgdHJhcG51bSwgZXJyY29kZTsKKwkvKiBUcmFwIHB1c2hlZCBwYXJ0ICovCisJdW5zaWduZWQgbG9uZyBlaXA7CisJdW5zaWduZWQgbG9uZyBjczsKKwl1bnNpZ25lZCBsb25nIGVmbGFnczsKKwl1bnNpZ25lZCBsb25nIGVzcDsKKwl1bnNpZ25lZCBsb25nIHNzOworfTsKKworLyogVGhpcyBpcyBhIGd1ZXN0LXNwZWNpZmljIHBhZ2UgKG1hcHBlZCBybykgaW50byB0aGUgZ3Vlc3QuICovCitzdHJ1Y3QgbGd1ZXN0X3JvX3N0YXRlIHsKKwkvKiBIb3N0IGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gcmVzdG9yZSB3aGVuIHdlIHN3aXRjaCBiYWNrLiAqLworCXUzMiBob3N0X2NyMzsKKwlzdHJ1Y3QgZGVzY19wdHIgaG9zdF9pZHRfZGVzYzsKKwlzdHJ1Y3QgZGVzY19wdHIgaG9zdF9nZHRfZGVzYzsKKwl1MzIgaG9zdF9zcDsKKworCS8qIEZpZWxkcyB3aGljaCBhcmUgdXNlZCB3aGVuIGd1ZXN0IGlzIHJ1bm5pbmcuICovCisJc3RydWN0IGRlc2NfcHRyIGd1ZXN0X2lkdF9kZXNjOworCXN0cnVjdCBkZXNjX3B0ciBndWVzdF9nZHRfZGVzYzsKKwlzdHJ1Y3QgeDg2X2h3X3RzcyBndWVzdF90c3M7CisJc3RydWN0IGRlc2Nfc3RydWN0IGd1ZXN0X2lkdFtJRFRfRU5UUklFU107CisJc3RydWN0IGRlc2Nfc3RydWN0IGd1ZXN0X2dkdFtHRFRfRU5UUklFU107Cit9OworCitzdHJ1Y3QgbGdfY3B1X2FyY2ggeworCS8qIFRoZSBHRFQgZW50cmllcyBjb3BpZWQgaW50byBsZ3Vlc3Rfcm9fc3RhdGUgd2hlbiBydW5uaW5nLiAqLworCXN0cnVjdCBkZXNjX3N0cnVjdCBnZHRbR0RUX0VOVFJJRVNdOworCisJLyogVGhlIElEVCBlbnRyaWVzOiBzb21lIGNvcGllZCBpbnRvIGxndWVzdF9yb19zdGF0ZSB3aGVuIHJ1bm5pbmcuICovCisJc3RydWN0IGRlc2Nfc3RydWN0IGlkdFtJRFRfRU5UUklFU107CisKKwkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgbGFzdCBndWVzdC12aXNpYmxlIHBhZ2VmYXVsdCAoaWUuIGNyMikuICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3BhZ2VmYXVsdDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsZ3Vlc3Rfc2V0X3RzKHZvaWQpCit7CisJdTMyIGNyMDsKKworCWNyMCA9IHJlYWRfY3IwKCk7CisJaWYgKCEoY3IwICYgOCkpCisJCXdyaXRlX2NyMChjcjAgfCA4KTsKK30KKworLyogRnVsbCA0RyBzZWdtZW50IGRlc2NyaXB0b3JzLCBzdWl0YWJsZSBmb3IgQ1MgYW5kIERTLiAqLworI2RlZmluZSBGVUxMX0VYRUNfU0VHTUVOVCAoKHN0cnVjdCBkZXNjX3N0cnVjdCl7IHsgezB4MDAwMGZmZmYsIDB4MDBjZjliMDB9IH0gfSkKKyNkZWZpbmUgRlVMTF9TRUdNRU5UICgoc3RydWN0IGRlc2Nfc3RydWN0KXsgeyB7MHgwMDAwZmZmZiwgMHgwMGNmOTMwMH0gfSB9KQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9MR1VFU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGd1ZXN0X2hjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3RfaGNhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzg5NDQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGd1ZXN0X2hjYWxsLmgKQEAgLTAsMCArMSw3MSBAQAorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBvcnRpb24gb2YgdGhlIGxndWVzdCBoeXBlcmNhbGxzICovCisjaWZuZGVmIF9BU01fWDg2X0xHVUVTVF9IQ0FMTF9ICisjZGVmaW5lIF9BU01fWDg2X0xHVUVTVF9IQ0FMTF9ICisKKyNkZWZpbmUgTEhDQUxMX0ZMVVNIX0FTWU5DCTAKKyNkZWZpbmUgTEhDQUxMX0xHVUVTVF9JTklUCTEKKyNkZWZpbmUgTEhDQUxMX1NIVVRET1dOCQkyCisjZGVmaW5lIExIQ0FMTF9MT0FEX0dEVAkJMworI2RlZmluZSBMSENBTExfTkVXX1BHVEFCTEUJNAorI2RlZmluZSBMSENBTExfRkxVU0hfVExCCTUKKyNkZWZpbmUgTEhDQUxMX0xPQURfSURUX0VOVFJZCTYKKyNkZWZpbmUgTEhDQUxMX1NFVF9TVEFDSwk3CisjZGVmaW5lIExIQ0FMTF9UUwkJOAorI2RlZmluZSBMSENBTExfU0VUX0NMT0NLRVZFTlQJOQorI2RlZmluZSBMSENBTExfSEFMVAkJMTAKKyNkZWZpbmUgTEhDQUxMX1NFVF9QVEUJCTE0CisjZGVmaW5lIExIQ0FMTF9TRVRfUE1ECQkxNQorI2RlZmluZSBMSENBTExfTE9BRF9UTFMJCTE2CisjZGVmaW5lIExIQ0FMTF9OT1RJRlkJCTE3CisKKyNkZWZpbmUgTEdVRVNUX1RSQVBfRU5UUlkgMHgxRgorCisvKiBBcmd1bWVudCBudW1iZXIgMyB0byBMSENBTExfTEdVRVNUX1NIVVRET1dOICovCisjZGVmaW5lIExHVUVTVF9TSFVURE9XTl9QT1dFUk9GRgkxCisjZGVmaW5lIExHVUVTVF9TSFVURE9XTl9SRVNUQVJUCQkyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorCisvKkc6MDMxIEJ1dCBmaXJzdCwgaG93IGRvZXMgb3VyIEd1ZXN0IGNvbnRhY3QgdGhlIEhvc3QgdG8gYXNrIGZvciBwcml2aWxlZ2VkCisgKiBvcGVyYXRpb25zPyAgVGhlcmUgYXJlIHR3byB3YXlzOiB0aGUgZGlyZWN0IHdheSBpcyB0byBtYWtlIGEgImh5cGVyY2FsbCIsCisgKiB0byBtYWtlIHJlcXVlc3RzIG9mIHRoZSBIb3N0IEl0c2VsZi4KKyAqCisgKiBPdXIgaHlwZXJjYWxsIG1lY2hhbmlzbSB1c2VzIHRoZSBoaWdoZXN0IHVudXNlZCB0cmFwIGNvZGUgKHRyYXBzIDMyIGFuZAorICogYWJvdmUgYXJlIHVzZWQgYnkgcmVhbCBoYXJkd2FyZSBpbnRlcnJ1cHRzKS4gIEZpZnRlZW4gaHlwZXJjYWxscyBhcmUKKyAqIGF2YWlsYWJsZTogdGhlIGh5cGVyY2FsbCBudW1iZXIgaXMgcHV0IGluIHRoZSAlZWF4IHJlZ2lzdGVyLCBhbmQgdGhlCisgKiBhcmd1bWVudHMgKHdoZW4gcmVxdWlyZWQpIGFyZSBwbGFjZWQgaW4gJWVkeCwgJWVieCBhbmQgJWVjeC4gIElmIGEgcmV0dXJuCisgKiB2YWx1ZSBtYWtlcyBzZW5zZSwgaXQncyByZXR1cm5lZCBpbiAlZWF4LgorICoKKyAqIEdyb3NzbHkgaW52YWxpZCBjYWxscyByZXN1bHQgaW4gU3VkZGVuIERlYXRoIGF0IHRoZSBoYW5kcyBvZiB0aGUgdmVuZ2VmdWwKKyAqIEhvc3QsIHJhdGhlciB0aGFuIHJldHVybmluZyBmYWlsdXJlLiAgVGhpcyByZWZsZWN0cyBXaW5zdG9uIENodXJjaGlsbCdzCisgKiBkZWZpbml0aW9uIG9mIGEgZ2VudGxlbWFuOiAic29tZW9uZSB3aG8gaXMgb25seSBydWRlIGludGVudGlvbmFsbHkiLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitoY2FsbCh1bnNpZ25lZCBsb25nIGNhbGwsCisgICAgICB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKQoreworCS8qICJpbnQiIGlzIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiB0byB0cmlnZ2VyIGEgdHJhcC4gKi8KKwlhc20gdm9sYXRpbGUoImludCAkIiBfX3N0cmluZ2lmeShMR1VFU1RfVFJBUF9FTlRSWSkKKwkJICAgICAvKiBUaGUgY2FsbCBpbiAlZWF4IChha2EgImEiKSBtaWdodCBiZSBvdmVyd3JpdHRlbiAqLworCQkgICAgIDogIj1hIihjYWxsKQorCQkgICAgICAgLyogVGhlIGFyZ3VtZW50cyBhcmUgaW4gJWVheCwgJWVkeCwgJWVieCAmICVlY3ggKi8KKwkJICAgICA6ICJhIihjYWxsKSwgImQiKGFyZzEpLCAiYiIoYXJnMiksICJjIihhcmczKQorCQkgICAgICAgLyogIm1lbW9yeSIgbWVhbnMgdGhpcyBtaWdodCB3cml0ZSBzb21ld2hlcmUgaW4gbWVtb3J5LgorCQkJKiBUaGlzIGlzbid0IHRydWUgZm9yIGFsbCBjYWxscywgYnV0IGl0J3Mgc2FmZSB0byB0ZWxsCisJCQkqIGdjYyB0aGF0IGl0IG1pZ2h0IGhhcHBlbiBzbyBpdCBkb2Vzbid0IGdldCBjbGV2ZXIuICovCisJCSAgICAgOiAibWVtb3J5Iik7CisJcmV0dXJuIGNhbGw7Cit9CisvKjoqLworCisvKiBDYW4ndCB1c2Ugb3VyIG1pbigpIG1hY3JvIGhlcmU6IG5lZWRzIHRvIGJlIGEgY29uc3RhbnQgKi8KKyNkZWZpbmUgTEdVRVNUX0lSUVMgKE5SX0lSUVMgPCAzMiA/IE5SX0lSUVM6IDMyKQorCisjZGVmaW5lIExIQ0FMTF9SSU5HX1NJWkUgNjQKK3N0cnVjdCBoY2FsbF9hcmdzIHsKKwkvKiBUaGVzZSBtYXAgZGlyZWN0bHkgb250byBlYXgsIGVieCwgZWN4LCBlZHggaW4gc3RydWN0IGxndWVzdF9yZWdzICovCisJdW5zaWduZWQgbG9uZyBhcmcwLCBhcmcyLCBhcmczLCBhcmcxOworfTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX1g4Nl9MR1VFU1RfSENBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MWVlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9MSU5LQUdFX0gKKyNkZWZpbmUgX0FTTV9YODZfTElOS0FHRV9ICisKKyN1bmRlZiBub3RyYWNlCisjZGVmaW5lIG5vdHJhY2UgX19hdHRyaWJ1dGVfXygobm9faW5zdHJ1bWVudF9mdW5jdGlvbikpCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIF9fQUxJR04gLnAyYWxpZ24gNCwsMTUKKyNkZWZpbmUgX19BTElHTl9TVFIgIi5wMmFsaWduIDQsLDE1IgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIGFzbWxpbmthZ2UgQ1BQX0FTTUxJTktBR0UgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpCisvKgorICogRm9yIDMyLWJpdCBVTUwgLSBtYXJrIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJseSB0aGF0IHVzZQorICogcmVncGFybSBpbnB1dCBwYXJhbWV0ZXJzOgorICovCisjZGVmaW5lIGFzbXJlZ3Bhcm0gX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpCisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgZG8gYW55dGhpbmcgc3R1cGlkIHdpdGggdGhlCisgKiBhcmd1bWVudHMgb24gdGhlIHN0YWNrIC0gdGhleSBhcmUgb3duZWQgYnkgdGhlICpjYWxsZXIqLCBub3QKKyAqIHRoZSBjYWxsZWUuIFRoaXMganVzdCBmb29scyBnY2MgaW50byBub3Qgc3BpbGxpbmcgaW50byB0aGVtLAorICogYW5kIGtlZXBzIGl0IGZyb20gZG9pbmcgdGFpbGNhbGwgcmVjdXJzaW9uIGFuZC9vciB1c2luZyB0aGUKKyAqIHN0YWNrIHNsb3RzIGZvciB0ZW1wb3Jhcmllcywgc2luY2UgdGhleSBhcmUgbGl2ZSBhbmQgInVzZWQiCisgKiBhbGwgdGhlIHdheSB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KKyAqCisgKiBOT1RFISBPbiB4ODYtNjQsIGFsbCB0aGUgYXJndW1lbnRzIGFyZSBpbiByZWdpc3RlcnMsIHNvIHRoaXMKKyAqIG9ubHkgbWF0dGVycyBvbiBhIDMyLWJpdCBrZXJuZWwuCisgKi8KKyNkZWZpbmUgYXNtbGlua2FnZV9wcm90ZWN0KG4sIHJldCwgYXJncy4uLikgXAorCV9fYXNtbGlua2FnZV9wcm90ZWN0IyNuKHJldCwgIyNhcmdzKQorI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgYXJncy4uLikgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6ICI9ciIgKHJldCkgOiAiMCIgKHJldCksICMjYXJncykKKyNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3QwKHJldCkgXAorCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0KQorI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdDEocmV0LCBhcmcxKSBcCisJX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsICJnIiAoYXJnMSkpCisjZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0MihyZXQsIGFyZzEsIGFyZzIpIFwKKwlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSwgImciIChhcmcyKSkKKyNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3QzKHJldCwgYXJnMSwgYXJnMiwgYXJnMykgXAorCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCAiZyIgKGFyZzEpLCAiZyIgKGFyZzIpLCAiZyIgKGFyZzMpKQorI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdDQocmV0LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KSBcCisJX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsICJnIiAoYXJnMSksICJnIiAoYXJnMiksICJnIiAoYXJnMyksIFwKKwkJCSAgICAgICJnIiAoYXJnNCkpCisjZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0NShyZXQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIFwKKwlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSwgImciIChhcmcyKSwgImciIChhcmczKSwgXAorCQkJICAgICAgImciIChhcmc0KSwgImciIChhcmc1KSkKKyNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3Q2KHJldCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNikgXAorCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCAiZyIgKGFyZzEpLCAiZyIgKGFyZzIpLCAiZyIgKGFyZzMpLCBcCisJCQkgICAgICAiZyIgKGFyZzQpLCAiZyIgKGFyZzUpLCAiZyIgKGFyZzYpKQorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfQUxJR05NRU5UXzE2CisjZGVmaW5lIF9fQUxJR04gLmFsaWduIDE2LDB4OTAKKyNkZWZpbmUgX19BTElHTl9TVFIgIi5hbGlnbiAxNiwweDkwIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9MSU5LQUdFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbG9jYWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiOWI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xvY2FsLmgKQEAgLTAsMCArMSwyMzUgQEAKKyNpZm5kZWYgX0FTTV9YODZfTE9DQUxfSAorI2RlZmluZSBfQVNNX1g4Nl9MT0NBTF9ICisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJYXRvbWljX2xvbmdfdCBhOworfSBsb2NhbF90OworCisjZGVmaW5lIExPQ0FMX0lOSVQoaSkJeyBBVE9NSUNfTE9OR19JTklUKGkpIH0KKworI2RlZmluZSBsb2NhbF9yZWFkKGwpCWF0b21pY19sb25nX3JlYWQoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWxfc2V0KGwsIGkpCWF0b21pY19sb25nX3NldCgmKGwpLT5hLCAoaSkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pbmMobG9jYWxfdCAqbCkKK3sKKwlhc20gdm9sYXRpbGUoX0FTTV9JTkMgIiUwIgorCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9kZWMobG9jYWxfdCAqbCkKK3sKKwlhc20gdm9sYXRpbGUoX0FTTV9ERUMgIiUwIgorCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9hZGQobG9uZyBpLCBsb2NhbF90ICpsKQoreworCWFzbSB2b2xhdGlsZShfQVNNX0FERCAiJTEsJTAiCisJCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9zdWIobG9uZyBpLCBsb2NhbF90ICpsKQoreworCWFzbSB2b2xhdGlsZShfQVNNX1NVQiAiJTEsJTAiCisJCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKKy8qKgorICogbG9jYWxfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAbDogcG9pbnRlciB0byB0eXBlIGxvY2FsX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEBsIGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxvY2FsX3N1Yl9hbmRfdGVzdChsb25nIGksIGxvY2FsX3QgKmwpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKF9BU01fU1VCICIlMiwlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogbG9jYWxfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAbDogcG9pbnRlciB0byB0eXBlIGxvY2FsX3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQGwgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBsb2NhbF9kZWNfYW5kX3Rlc3QobG9jYWxfdCAqbCkKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoX0FTTV9ERUMgIiUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGxvY2FsX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQGw6IHBvaW50ZXIgdG8gdHlwZSBsb2NhbF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEBsIGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbG9jYWxfaW5jX2FuZF90ZXN0KGxvY2FsX3QgKmwpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKF9BU01fSU5DICIlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBsb2NhbF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQGw6IHBvaW50ZXIgdG8gdHlwZSBsb2NhbF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEBsIGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbG9jYWxfYWRkX25lZ2F0aXZlKGxvbmcgaSwgbG9jYWxfdCAqbCkKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoX0FTTV9BREQgIiUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBsb2NhbF9hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQGw6IHBvaW50ZXIgdG8gdHlwZSBsb2NhbF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEBsIGFuZCByZXR1cm5zIEBpICsgQGwKKyAqLworc3RhdGljIGlubGluZSBsb25nIGxvY2FsX2FkZF9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICpsKQoreworCWxvbmcgX19pOworI2lmZGVmIENPTkZJR19NMzg2CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPD0gMykpCisJCWdvdG8gbm9feGFkZDsKKyNlbmRpZgorCS8qIE1vZGVybiA0ODYrIHByb2Nlc3NvciAqLworCV9faSA9IGk7CisJYXNtIHZvbGF0aWxlKF9BU01fWEFERCAiJTAsICUxOyIKKwkJICAgICA6ICIrciIgKGkpLCAiK20iIChsLT5hLmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gaSArIF9faTsKKworI2lmZGVmIENPTkZJR19NMzg2Citub194YWRkOiAvKiBMZWdhY3kgMzg2IHByb2Nlc3NvciAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2kgPSBsb2NhbF9yZWFkKGwpOworCWxvY2FsX3NldChsLCBpICsgX19pKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGkgKyBfX2k7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBsb25nIGxvY2FsX3N1Yl9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICpsKQoreworCXJldHVybiBsb2NhbF9hZGRfcmV0dXJuKC1pLCBsKTsKK30KKworI2RlZmluZSBsb2NhbF9pbmNfcmV0dXJuKGwpICAobG9jYWxfYWRkX3JldHVybigxLCBsKSkKKyNkZWZpbmUgbG9jYWxfZGVjX3JldHVybihsKSAgKGxvY2FsX3N1Yl9yZXR1cm4oMSwgbCkpCisKKyNkZWZpbmUgbG9jYWxfY21weGNoZyhsLCBvLCBuKSBcCisJKGNtcHhjaGdfbG9jYWwoJigobCktPmEuY291bnRlciksIChvKSwgKG4pKSkKKy8qIEFsd2F5cyBoYXMgYSBsb2NrIHByZWZpeCAqLworI2RlZmluZSBsb2NhbF94Y2hnKGwsIG4pICh4Y2hnKCYoKGwpLT5hLmNvdW50ZXIpLCAobikpKQorCisvKioKKyAqIGxvY2FsX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQGw6IHBvaW50ZXIgb2YgdHlwZSBsb2NhbF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gbC4uLgorICogQHU6IC4uLnVubGVzcyBsIGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEBsLCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEBsIHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworI2RlZmluZSBsb2NhbF9hZGRfdW5sZXNzKGwsIGEsIHUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBjLCBvbGQ7CQkJCQkJXAorCWMgPSBsb2NhbF9yZWFkKChsKSk7CQkJCQlcCisJZm9yICg7OykgewkJCQkJCVwKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJCW9sZCA9IGxvY2FsX2NtcHhjaGcoKGwpLCBjLCBjICsgKGEpKTsJCVwKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQljID0gb2xkOwkJCQkJXAorCX0JCQkJCQkJXAorCWMgIT0gKHUpOwkJCQkJCVwKK30pCisjZGVmaW5lIGxvY2FsX2luY19ub3RfemVybyhsKSBsb2NhbF9hZGRfdW5sZXNzKChsKSwgMSwgMCkKKworLyogT24geDg2XzMyLCB0aGVzZSBhcmUgbm8gYmV0dGVyIHRoYW4gdGhlIGF0b21pYyB2YXJpYW50cy4KKyAqIE9uIHg4Ni02NCB0aGVzZSBhcmUgYmV0dGVyIHRoYW4gdGhlIGF0b21pYyB2YXJpYW50cyBvbiBTTVAga2VybmVscworICogYmVjYXVzZSB0aGV5IGRvbnQgdXNlIGEgbG9jayBwcmVmaXguCisgKi8KKyNkZWZpbmUgX19sb2NhbF9pbmMobCkJCWxvY2FsX2luYyhsKQorI2RlZmluZSBfX2xvY2FsX2RlYyhsKQkJbG9jYWxfZGVjKGwpCisjZGVmaW5lIF9fbG9jYWxfYWRkKGksIGwpCWxvY2FsX2FkZCgoaSksIChsKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSwgbCkJbG9jYWxfc3ViKChpKSwgKGwpKQorCisvKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCisgKgorICogWDg2XzY0OiBUaGlzIGNvdWxkIGJlIGRvbmUgYmV0dGVyIGlmIHdlIG1vdmVkIHRoZSBwZXIgY3B1IGRhdGEgZGlyZWN0bHkKKyAqIGFmdGVyIEdTLgorICovCisKKy8qIE5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGUgY3B1IGxvY2FsIGNvdW50ZXJzIG90aGVyd2lzZSB3ZSBjb3VsZAorICAgc3RpbGwgYWNjZXNzIGEgdmFyaWFibGUgb2YgYSBwcmV2aW91cyBDUFUgaW4gYSBub24gYXRvbWljIHdheS4gKi8KKyNkZWZpbmUgY3B1X2xvY2FsX3dyYXBfdihsKQkJXAorKHsJCQkJCVwKKwlsb2NhbF90IHJlc19fOwkJCVwKKwlwcmVlbXB0X2Rpc2FibGUoKTsgCQlcCisJcmVzX18gPSAobCk7CQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQlcCisJcmVzX187CQkJCVwKK30pCisjZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpCQlcCisoewkJCQkJXAorCXByZWVtcHRfZGlzYWJsZSgpOwkJXAorCShsKTsJCQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQlcCit9KQkJCQkJXAorCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcigobCkpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKChsKSksIChpKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9pbmMobCkgICAgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2luYygmX19nZXRfY3B1X3ZhcigobCkpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKChsKSkpKQorI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcigobCkpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIoKGwpKSkpCisKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCWNwdV9sb2NhbF9pbmMoKGwpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJY3B1X2xvY2FsX2RlYygobCkpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCBsKQljcHVfbG9jYWxfYWRkKChpKSwgKGwpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgbCkJY3B1X2xvY2FsX3N1YigoaSksIChsKSkKKworI2VuZGlmIC8qIF9BU01fWDg2X0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9hcG0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9hcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDM3MGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L2FwbS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgTWFjaGluZSBzcGVjaWZpYyBBUE0gQklPUyBmdW5jdGlvbnMgZm9yIGdlbmVyaWMuCisgKiAgU3BsaXQgb3V0IGZyb20gYXBtLmMgYnkgT3NhbXUgVG9taXRhIDx0b21pdGFAY2luZXQuY28uanA+CisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfQVBNX0gKKyNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX0FQTV9ICisKKyNpZmRlZiBBUE1fWkVST19TRUdTCisjCWRlZmluZSBBUE1fRE9fWkVST19TRUdTIFwKKwkJInB1c2hsICUlZHNcblx0IiBcCisJCSJwdXNobCAlJWVzXG5cdCIgXAorCQkieG9ybCAlJWVkeCwgJSVlZHhcblx0IiBcCisJCSJtb3YgJSVkeCwgJSVkc1xuXHQiIFwKKwkJIm1vdiAlJWR4LCAlJWVzXG5cdCIgXAorCQkibW92ICUlZHgsICUlZnNcblx0IiBcCisJCSJtb3YgJSVkeCwgJSVnc1xuXHQiCisjCWRlZmluZSBBUE1fRE9fUE9QX1NFR1MgXAorCQkicG9wbCAlJWVzXG5cdCIgXAorCQkicG9wbCAlJWRzXG5cdCIKKyNlbHNlCisjCWRlZmluZSBBUE1fRE9fWkVST19TRUdTCisjCWRlZmluZSBBUE1fRE9fUE9QX1NFR1MKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBtX2Jpb3NfY2FsbF9hc20odTMyIGZ1bmMsIHUzMiBlYnhfaW4sIHUzMiBlY3hfaW4sCisJCQkJCXUzMiAqZWF4LCB1MzIgKmVieCwgdTMyICplY3gsCisJCQkJCXUzMiAqZWR4LCB1MzIgKmVzaSkKK3sKKwkvKgorCSAqIE4uQi4gV2UgZG8gTk9UIG5lZWQgYSBjbGQgYWZ0ZXIgdGhlIEJJT1MgY2FsbAorCSAqIGJlY2F1c2Ugd2UgYWx3YXlzIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGZsYWdzLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKEFQTV9ET19aRVJPX1NFR1MKKwkJInB1c2hsICUlZWRpXG5cdCIKKwkJInB1c2hsICUlZWJwXG5cdCIKKwkJImxjYWxsIColJWNzOmFwbV9iaW9zX2VudHJ5XG5cdCIKKwkJInNldGMgJSVhbFxuXHQiCisJCSJwb3BsICUlZWJwXG5cdCIKKwkJInBvcGwgJSVlZGlcblx0IgorCQlBUE1fRE9fUE9QX1NFR1MKKwkJOiAiPWEiICgqZWF4KSwgIj1iIiAoKmVieCksICI9YyIgKCplY3gpLCAiPWQiICgqZWR4KSwKKwkJICAiPVMiICgqZXNpKQorCQk6ICJhIiAoZnVuYyksICJiIiAoZWJ4X2luKSwgImMiIChlY3hfaW4pCisJCTogIm1lbW9yeSIsICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGFwbV9iaW9zX2NhbGxfc2ltcGxlX2FzbSh1MzIgZnVuYywgdTMyIGVieF9pbiwKKwkJCQkJCXUzMiBlY3hfaW4sIHUzMiAqZWF4KQoreworCWludAljeCwgZHgsIHNpOworCXU4CWVycm9yOworCisJLyoKKwkgKiBOLkIuIFdlIGRvIE5PVCBuZWVkIGEgY2xkIGFmdGVyIHRoZSBCSU9TIGNhbGwKKwkgKiBiZWNhdXNlIHdlIGFsd2F5cyBzYXZlIGFuZCByZXN0b3JlIHRoZSBmbGFncy4KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyhBUE1fRE9fWkVST19TRUdTCisJCSJwdXNobCAlJWVkaVxuXHQiCisJCSJwdXNobCAlJWVicFxuXHQiCisJCSJsY2FsbCAqJSVjczphcG1fYmlvc19lbnRyeVxuXHQiCisJCSJzZXRjICUlYmxcblx0IgorCQkicG9wbCAlJWVicFxuXHQiCisJCSJwb3BsICUlZWRpXG5cdCIKKwkJQVBNX0RPX1BPUF9TRUdTCisJCTogIj1hIiAoKmVheCksICI9YiIgKGVycm9yKSwgIj1jIiAoY3gpLCAiPWQiIChkeCksCisJCSAgIj1TIiAoc2kpCisJCTogImEiIChmdW5jKSwgImIiIChlYnhfaW4pLCAiYyIgKGVjeF9pbikKKwkJOiAibWVtb3J5IiwgImNjIik7CisJcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgLyogX0FTTV9YODZfTUFDSF9ERUZBVUxUX0FQTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvZG9fdGltZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvZG9fdGltZXIuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L2VudHJ5X2FyY2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxYWRkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBkZXNpZ25lZCB0byBjb250YWluIHRoZSBCVUlMRF9JTlRFUlJVUFQgc3BlY2lmaWNhdGlvbnMgZm9yCisgKiBhbGwgb2YgdGhlIGV4dHJhIG5hbWVkIGludGVycnVwdCB2ZWN0b3JzIHVzZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4KKyAqIFVzdWFsbHkgdGhpcyBpcyB0aGUgSW50ZXIgUHJvY2VzcyBJbnRlcnJ1cHRzIChJUElzKQorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHZlY3RvcnMgYXJlIHBhcnQgb2YgdGhlIExpbnV4IGFyY2hpdGVjdHVyZSwgdGhlcmUKKyAqIGlzIG5vIGhhcmR3YXJlIElSUSBwaW4gZXF1aXZhbGVudCBmb3IgdGhlbSwgdGhleSBhcmUgdHJpZ2dlcmVkCisgKiB0aHJvdWdoIHRoZSBJQ0MgYnkgdXMgKElQSXMpCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X1NNUAorQlVJTERfSU5URVJSVVBUKHJlc2NoZWR1bGVfaW50ZXJydXB0LFJFU0NIRURVTEVfVkVDVE9SKQorQlVJTERfSU5URVJSVVBUKGludmFsaWRhdGVfaW50ZXJydXB0LElOVkFMSURBVEVfVExCX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX2ludGVycnVwdCxDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SKQorQlVJTERfSU5URVJSVVBUKGlycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0LElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKQorI2VuZGlmCisKKy8qCisgKiBldmVyeSBwZW50aXVtIGxvY2FsIEFQSUMgaGFzIHR3byAnbG9jYWwgaW50ZXJydXB0cycsIHdpdGggYQorICogc29mdC1kZWZpbmFibGUgdmVjdG9yIGF0dGFjaGVkIHRvIGJvdGggaW50ZXJydXB0cywgb25lIG9mCisgKiB3aGljaCBpcyBhIHRpbWVyIGludGVycnVwdCwgdGhlIG90aGVyIG9uZSBpcyBlcnJvciBjb3VudGVyCisgKiBvdmVyZmxvdy4gTGludXggdXNlcyB0aGUgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQgdG8gZ2V0CisgKiBhIG11Y2ggc2ltcGxlciBTTVAgdGltZSBhcmNoaXRlY3R1cmU6CisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKK0JVSUxEX0lOVEVSUlVQVChhcGljX3RpbWVyX2ludGVycnVwdCxMT0NBTF9USU1FUl9WRUNUT1IpCitCVUlMRF9JTlRFUlJVUFQoZXJyb3JfaW50ZXJydXB0LEVSUk9SX0FQSUNfVkVDVE9SKQorQlVJTERfSU5URVJSVVBUKHNwdXJpb3VzX2ludGVycnVwdCxTUFVSSU9VU19BUElDX1ZFQ1RPUikKKworI2lmZGVmIENPTkZJR19YODZfTUNFX1A0VEhFUk1BTAorQlVJTERfSU5URVJSVVBUKHRoZXJtYWxfaW50ZXJydXB0LFRIRVJNQUxfQVBJQ19WRUNUT1IpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzYTZjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaApAQCAtMCwwICsxLDE1NiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9BUElDX0gKKyNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfQVBJQ19ICisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKworI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfRkxBVCkKKworc3RhdGljIGlubGluZSBjcHVtYXNrX3QgdGFyZ2V0X2NwdXModm9pZCkKK3sgCisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBjcHVfb25saW5lX21hcDsKKyNlbHNlCisJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOworI2VuZGlmCit9IAorCisjZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgwKQorI2RlZmluZSBlc3JfZGlzYWJsZSAoMCkKKworI2lmZGVmIENPTkZJR19YODZfNjQKKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZ2VuYXBpYy0+aW50X2RlbGl2ZXJ5X21vZGUpCisjZGVmaW5lIElOVF9ERVNUX01PREUgKGdlbmFwaWMtPmludF9kZXN0X21vZGUpCisjZGVmaW5lIFRBUkdFVF9DUFVTCSAgKGdlbmFwaWMtPnRhcmdldF9jcHVzKCkpCisjZGVmaW5lIGFwaWNfaWRfcmVnaXN0ZXJlZCAoZ2VuYXBpYy0+YXBpY19pZF9yZWdpc3RlcmVkKQorI2RlZmluZSBpbml0X2FwaWNfbGRyIChnZW5hcGljLT5pbml0X2FwaWNfbGRyKQorI2RlZmluZSBjcHVfbWFza190b19hcGljaWQgKGdlbmFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZCkKKyNkZWZpbmUgcGh5c19wa2dfaWQJKGdlbmFwaWMtPnBoeXNfcGtnX2lkKQorI2RlZmluZSB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gICAgKGdlbmFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikKKyNkZWZpbmUgcmVhZF9hcGljX2lkKCkgIChHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpKQorI2RlZmluZSBzZW5kX0lQSV9zZWxmIChnZW5hcGljLT5zZW5kX0lQSV9zZWxmKQorZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgZGVzdF9Mb3dlc3RQcmlvCisjZGVmaW5lIElOVF9ERVNUX01PREUgMSAgICAgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCisjZGVmaW5lIFRBUkdFVF9DUFVTICh0YXJnZXRfY3B1cygpKQorLyoKKyAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KKyAqCisgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZworICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKKyAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7CisJdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOworCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF9hcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQoreworCXJldHVybiBjcHVzX2FkZHIoY3B1bWFzaylbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCisJCQkJCSJGbGF0IiwgbnJfaW9hcGljcyk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gYXBpY2lkXzJfbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworICAgICAgICAvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworICAgICAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorICAgICAgICAgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKyAgICAgICAgICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisgICAgICAgICAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisgICAgICAgICAqLworICAgICAgICBjcHVtYXNrX3QgZG9tYWluID0geyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKyAgICAgICAgcmV0dXJuIGRvbWFpbjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChhcGljaWQsIGJpdG1hcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KQoreworCXJldHVybiBwaHlzaWRfaXNzZXQoYml0LCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwlyZXR1cm4gcGh5c19tYXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQoreworCXJldHVybiAwOworfQorCisvKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLworc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisJcmV0dXJuIDEgPDwgY3B1OworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKG1wc19jcHUgPCBOUl9DUFVTICYmIGNwdV9wcmVzZW50KG1wc19jcHUpKQorCQlyZXR1cm4gKGludClwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIG1wc19jcHUpOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQoreworCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c19hcGljaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQoreworfQorI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTc5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9hcGljZGVmLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9BUElDREVGX0gKKyNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfQVBJQ0RFRl9ICisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZQlBUElDX0lEX01BU0sJCShnZW5hcGljLT5hcGljX2lkX21hc2spCisjZGVmaW5lIEdFVF9BUElDX0lEKHgpCQkoZ2VuYXBpYy0+Z2V0X2FwaWNfaWQoeCkpCisjZGVmaW5lCVNFVF9BUElDX0lEKHgpCQkoZ2VuYXBpYy0+c2V0X2FwaWNfaWQoeCkpCisjZWxzZQorI2RlZmluZQkJQVBJQ19JRF9NQVNLCQkoMHhGPDwyNCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KSAKK3sKKwl1bnNpZ25lZCBpbnQgdmVyID0gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKKwlpZiAoQVBJQ19YQVBJQyh2ZXIpKQorCQlyZXR1cm4gKCgoeCk+PjI0KSYweEZGKTsKKwllbHNlCisJCXJldHVybiAoKCh4KT4+MjQpJjB4Rik7Cit9IAorCisjZGVmaW5lCQlHRVRfQVBJQ19JRCh4KQlnZXRfYXBpY19pZCh4KQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9BUElDREVGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfaXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiY2EwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfSVBJX0gKKyNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfSVBJX0gKKworLyogQXZvaWQgaW5jbHVkZSBoZWxsICovCisjZGVmaW5lIE5NSV9WRUNUT1IgMHgwMgorCit2b2lkIHNlbmRfSVBJX21hc2tfYml0bWFzayhjcHVtYXNrX3QgbWFzaywgaW50IHZlY3Rvcik7Cit2b2lkIF9fc2VuZF9JUElfc2hvcnRjdXQodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yKTsKKworZXh0ZXJuIGludCBub19icm9hZGNhc3Q7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KKyNkZWZpbmUgc2VuZF9JUElfbWFzayAoZ2VuYXBpYy0+c2VuZF9JUElfbWFzaykKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfbWFzayhjcHVtYXNrX3QgbWFzaywgaW50IHZlY3RvcikKK3sKKwlzZW5kX0lQSV9tYXNrX2JpdG1hc2sobWFzaywgdmVjdG9yKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX19sb2NhbF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJaWYgKG5vX2Jyb2FkY2FzdCB8fCB2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikgeworCQljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCisJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOworCQlzZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3Rvcik7CisJfSBlbHNlCisJCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTEJVVCwgdmVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbG9jYWxfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJaWYgKG5vX2Jyb2FkY2FzdCB8fCB2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikKKwkJc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hcCwgdmVjdG9yKTsKKwllbHNlCisJCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTElOQywgdmVjdG9yKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgc2VuZF9JUElfYWxsYnV0c2VsZiAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZikKKyNkZWZpbmUgc2VuZF9JUElfYWxsIChnZW5hcGljLT5zZW5kX0lQSV9hbGwpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwkvKgorCSAqIGlmIHRoZXJlIGFyZSBubyBvdGhlciBDUFVzIGluIHRoZSBzeXN0ZW0gdGhlbiB3ZSBnZXQgYW4gQVBJQyBzZW5kIAorCSAqIGVycm9yIGlmIHdlIHRyeSB0byBicm9hZGNhc3QsIHRodXMgYXZvaWQgc2VuZGluZyBJUElzIGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAoIShudW1fb25saW5lX2NwdXMoKSA+IDEpKQorCQlyZXR1cm47CisKKwlfX2xvY2FsX3NlbmRfSVBJX2FsbGJ1dHNlbGYodmVjdG9yKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwlfX2xvY2FsX3NlbmRfSVBJX2FsbCh2ZWN0b3IpOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWVhMjEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBQQVJTRV9ICisjZGVmaW5lIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX01QUEFSU0VfSAorCitzdGF0aWMgaW5saW5lIGludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcF9jb25maWdfdGFibGUgKm1wYywgY2hhciAqb2VtLCAKKwkJY2hhciAqcHJvZHVjdGlkKQoreworCXJldHVybiAwOworfQorCisvKiBIb29rIGZyb20gZ2VuZXJpYyBBQ1BJIHRhYmxlcy5jICovCitzdGF0aWMgaW5saW5lIGludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCXJldHVybiAwOworfQorCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9NUFBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX21wc3BlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfbXBzcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1ZWRlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX21wc3BlYy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBTUEVDX0gKKyNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBTUEVDX0gKKworI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgMjU2CisKKyNpZiBDT05GSUdfQkFTRV9TTUFMTCA9PSAwCisjZGVmaW5lIE1BWF9NUF9CVVNTRVMgMjU2CisjZWxzZQorI2RlZmluZSBNQVhfTVBfQlVTU0VTIDMyCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTM3Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogIE1hY2hpbmUgc3BlY2lmaWMgY2FsaWJyYXRlX3RzYygpIGZvciBnZW5lcmljLgorICogIFNwbGl0IG91dCBmcm9tIHRpbWVyX3RzYy5jIGJ5IE9zYW11IFRvbWl0YSA8dG9taXRhQGNpbmV0LmNvLmpwPgorICovCisvKiAtLS0tLS0gQ2FsaWJyYXRlIHRoZSBUU0MgLS0tLS0tLSAKKyAqIFJldHVybiAyXjMyICogKDEgLyAoVFNDIGNsb2NrcyBwZXIgdXNlYykpIGZvciBkb19mYXN0X2dldHRpbWVvZmZzZXQoKS4KKyAqIFRvbyBtdWNoIDY0LWJpdCBhcml0aG1ldGljIGhlcmUgdG8gZG8gdGhpcyBjbGVhbmx5IGluIEMsIGFuZCBmb3IKKyAqIGFjY3VyYWN5J3Mgc2FrZSB3ZSB3YW50IHRvIGtlZXAgdGhlIG92ZXJoZWFkIG9uIHRoZSBDVEMgc3BlYWtlciAoY2hhbm5lbCAyKQorICogb3V0cHV0IGJ1c3kgbG9vcCBhcyBsb3cgYXMgcG9zc2libGUuIFdlIGF2b2lkIHJlYWRpbmcgdGhlIENUQyByZWdpc3RlcnMKKyAqIGRpcmVjdGx5IGJlY2F1c2Ugb2YgdGhlIGF3a3dhcmQgOC1iaXQgYWNjZXNzIG1lY2hhbmlzbSBvZiB0aGUgODJDNTQKKyAqIGRldmljZS4KKyAqLworI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9USU1FUl9ICisjZGVmaW5lIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX1RJTUVSX0gKKworI2RlZmluZSBDQUxJQlJBVEVfVElNRV9NU0VDIDMwIC8qIDMwIG1zZWNzICovCisjZGVmaW5lIENBTElCUkFURV9MQVRDSAlcCisJKChDTE9DS19USUNLX1JBVEUgKiBDQUxJQlJBVEVfVElNRV9NU0VDICsgMTAwMC8yKS8xMDAwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjaF9wcmVwYXJlX2NvdW50ZXIodm9pZCkKK3sKKyAgICAgICAvKiBTZXQgdGhlIEdhdGUgaGlnaCwgZGlzYWJsZSBzcGVha2VyICovCisJb3V0YigoaW5iKDB4NjEpICYgfjB4MDIpIHwgMHgwMSwgMHg2MSk7CisKKwkvKgorCSAqIE5vdyBsZXQncyB0YWtlIGNhcmUgb2YgQ1RDIGNoYW5uZWwgMgorCSAqCisJICogU2V0IHRoZSBHYXRlIGhpZ2gsIHByb2dyYW0gQ1RDIGNoYW5uZWwgMiBmb3IgbW9kZSAwLAorCSAqIChpbnRlcnJ1cHQgb24gdGVybWluYWwgY291bnQgbW9kZSksIGJpbmFyeSBjb3VudCwKKwkgKiBsb2FkIDUgKiBMQVRDSCBjb3VudCwgKExTQiBhbmQgTVNCKSB0byBiZWdpbiBjb3VudGRvd24uCisJICoKKwkgKiBTb21lIGRldmljZXMgbmVlZCBhIGRlbGF5IGhlcmUuCisJICovCisJb3V0YigweGIwLCAweDQzKTsJCQkvKiBiaW5hcnksIG1vZGUgMCwgTFNCL01TQiwgQ2ggMiAqLworCW91dGJfcChDQUxJQlJBVEVfTEFUQ0ggJiAweGZmLCAweDQyKTsJLyogTFNCIG9mIGNvdW50ICovCisJb3V0Yl9wKENBTElCUkFURV9MQVRDSCA+PiA4LCAweDQyKTsgICAgICAgLyogTVNCIG9mIGNvdW50ICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWNoX2NvdW50dXAodW5zaWduZWQgbG9uZyAqY291bnRfcCkKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKKwlkbyB7CisJCWNvdW50Kys7CisJfSB3aGlsZSAoKGluYl9wKDB4NjEpICYgMHgyMCkgPT0gMCk7CisJKmNvdW50X3AgPSBjb3VudDsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX3RyYXBzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTIwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgTWFjaGluZSBzcGVjaWZpYyBOTUkgaGFuZGxpbmcgZm9yIGdlbmVyaWMuCisgKiAgU3BsaXQgb3V0IGZyb20gdHJhcHMuYyBieSBPc2FtdSBUb21pdGEgPHRvbWl0YUBjaW5ldC5jby5qcD4KKyAqLworI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9UUkFQU19ICisjZGVmaW5lIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX1RSQVBTX0gKKworI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZ2V0X25taV9yZWFzb24odm9pZCkKK3sKKwlyZXR1cm4gaW5iKDB4NjEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhc3NlcnRfbm1pKHZvaWQpCit7CisJaW50IG9sZF9yZWcgPSAtMTsKKworCWlmIChkb19pX2hhdmVfbG9ja19jbW9zKCkpCisJCW9sZF9yZWcgPSBjdXJyZW50X2xvY2tfY21vc19yZWcoKTsKKwllbHNlCisJCWxvY2tfY21vcygwKTsgLyogcmVnaXN0ZXIgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLworCW91dGIoMHg4ZiwgMHg3MCk7CisJaW5iKDB4NzEpOwkJLyogZHVtbXkgKi8KKwlvdXRiKDB4MGYsIDB4NzApOworCWluYigweDcxKTsJCS8qIGR1bW15ICovCisJaWYgKG9sZF9yZWcgPj0gMCkKKwkJb3V0YihvbGRfcmVnLCAweDcwKTsKKwllbHNlCisJCXVubG9ja19jbW9zKCk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9UUkFQU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjMGI4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX1dBS0VDUFVfSAorI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9XQUtFQ1BVX0gKKworLyogCisgKiBUaGlzIGZpbGUgY29wZXMgd2l0aCBtYWNoaW5lcyB0aGF0IHdha2V1cCBzZWNvbmRhcnkgQ1BVcyBieSB0aGUKKyAqIElOSVQsIElOSVQsIFNUQVJUVVAgc2VxdWVuY2UuCisgKi8KKworI2RlZmluZSBXQUtFX1NFQ09OREFSWV9WSUFfSU5JVAorCisjZGVmaW5lIFRSQU1QT0xJTkVfTE9XIHBoeXNfdG9fdmlydCgweDQ2NykKKyNkZWZpbmUgVFJBTVBPTElORV9ISUdIIHBoeXNfdG9fdmlydCgweDQ2OSkKKworI2RlZmluZSBib290X2NwdV9hcGljaWQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KGF0b21pY190ICpkZWFzc2VydCkKK3sKKwl3aGlsZSAoIWF0b21pY19yZWFkKGRlYXNzZXJ0KSkKKwkJY3B1X3JlbGF4KCk7CisJcmV0dXJuOworfQorCisvKiBOb3RoaW5nIHRvIGRvIGZvciBtb3N0IHBsYXRmb3Jtcywgc2luY2UgY2xlYXJlZCBieSB0aGUgSU5JVCBjeWNsZSAqLworc3RhdGljIGlubGluZSB2b2lkIHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYyh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKK3sKK30KKworI2lmIEFQSUNfREVCVUcKKyAjZGVmaW5lIGlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKSBfX2lucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKQorI2Vsc2UKKyAjZGVmaW5lIGlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKSB7fQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9XQUtFQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvcGNpLWZ1bmN0aW9ucy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3BjaS1mdW5jdGlvbnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9wY2ktZnVuY3Rpb25zLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9wY2ktZnVuY3Rpb25zLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvc2V0dXBfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3NldHVwX2FyY2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9zZXR1cF9hcmNoLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9zZXR1cF9hcmNoLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3NtcGJvb3RfaG9va3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9ncGlvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NWM0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvZ3Bpby5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0FTTV9YODZfTUFDSF9HRU5FUklDX0dQSU9fSAorI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfR1BJT19ICisKK2ludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwordm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7CitpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CitpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Cit2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CitpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3Bpbyk7CitpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKTsKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4gICAgICAgICAgIC8qIGNhbnNsZWVwIHdyYXBwZXJzICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE4MGJkNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNfSAorI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9BUElDX0gKKworI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CisKKyNkZWZpbmUgZXNyX2Rpc2FibGUgKGdlbmFwaWMtPkVTUl9ESVNBQkxFKQorI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoZ2VuYXBpYy0+bm9fYmFsYW5jZV9pcnEpCisjZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIChnZW5hcGljLT5pbnRfZGVsaXZlcnlfbW9kZSkKKyNkZWZpbmUgSU5UX0RFU1RfTU9ERSAoZ2VuYXBpYy0+aW50X2Rlc3RfbW9kZSkKKyN1bmRlZiBBUElDX0RFU1RfTE9HSUNBTAorI2RlZmluZSBBUElDX0RFU1RfTE9HSUNBTCAoZ2VuYXBpYy0+YXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsKQorI2RlZmluZSBUQVJHRVRfQ1BVUwkgIChnZW5hcGljLT50YXJnZXRfY3B1cygpKQorI2RlZmluZSBhcGljX2lkX3JlZ2lzdGVyZWQgKGdlbmFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCkKKyNkZWZpbmUgaW5pdF9hcGljX2xkciAoZ2VuYXBpYy0+aW5pdF9hcGljX2xkcikKKyNkZWZpbmUgaW9hcGljX3BoeXNfaWRfbWFwIChnZW5hcGljLT5pb2FwaWNfcGh5c19pZF9tYXApCisjZGVmaW5lIHNldHVwX2FwaWNfcm91dGluZyAoZ2VuYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKQorI2RlZmluZSBtdWx0aV90aW1lcl9jaGVjayAoZ2VuYXBpYy0+bXVsdGlfdGltZXJfY2hlY2spCisjZGVmaW5lIGFwaWNpZF90b19ub2RlIChnZW5hcGljLT5hcGljaWRfdG9fbm9kZSkKKyNkZWZpbmUgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkIChnZW5hcGljLT5jcHVfdG9fbG9naWNhbF9hcGljaWQpIAorI2RlZmluZSBjcHVfcHJlc2VudF90b19hcGljaWQgKGdlbmFwaWMtPmNwdV9wcmVzZW50X3RvX2FwaWNpZCkKKyNkZWZpbmUgYXBpY2lkX3RvX2NwdV9wcmVzZW50IChnZW5hcGljLT5hcGljaWRfdG9fY3B1X3ByZXNlbnQpCisjZGVmaW5lIHNldHVwX3BvcnRpb19yZW1hcCAoZ2VuYXBpYy0+c2V0dXBfcG9ydGlvX3JlbWFwKQorI2RlZmluZSBjaGVja19hcGljaWRfcHJlc2VudCAoZ2VuYXBpYy0+Y2hlY2tfYXBpY2lkX3ByZXNlbnQpCisjZGVmaW5lIGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpCisjZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkIChnZW5hcGljLT5jaGVja19hcGljaWRfdXNlZCkKKyNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCisjZGVmaW5lIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiAoZ2VuYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQorI2RlZmluZSBlbmFibGVfYXBpY19tb2RlIChnZW5hcGljLT5lbmFibGVfYXBpY19tb2RlKQorI2RlZmluZSBwaHlzX3BrZ19pZCAoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCisKK2V4dGVybiB2b2lkIGdlbmVyaWNfYmlnc21wX3Byb2JlKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2FwaWNkZWYuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNERUZfSAorI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9BUElDREVGX0gKKworI2lmbmRlZiBBUElDX0RFRklOSVRJT04KKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorCisjZGVmaW5lIEdFVF9BUElDX0lEIChnZW5hcGljLT5nZXRfYXBpY19pZCkKKyNkZWZpbmUgQVBJQ19JRF9NQVNLIChnZW5hcGljLT5hcGljX2lkX21hc2spCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ2MzdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfaXBpLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9JUElfSAorI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9JUElfSAorCisjaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KKworI2RlZmluZSBzZW5kX0lQSV9tYXNrIChnZW5hcGljLT5zZW5kX0lQSV9tYXNrKQorI2RlZmluZSBzZW5kX0lQSV9hbGxidXRzZWxmIChnZW5hcGljLT5zZW5kX0lQSV9hbGxidXRzZWxmKQorI2RlZmluZSBzZW5kX0lQSV9hbGwgKGdlbmFwaWMtPnNlbmRfSVBJX2FsbCkKKworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0lQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4ZjFkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX21wcGFyc2UuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX01QUEFSU0VfSAorI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFBBUlNFX0gKKworCitleHRlcm4gaW50IG1wc19vZW1fY2hlY2soc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sCisJCQkgY2hhciAqcHJvZHVjdGlkKTsKKworZXh0ZXJuIGludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX01QUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9tcHNwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmFiNWNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFNQRUNfSAorI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFNQRUNfSAorCisjZGVmaW5lIE1BWF9JUlFfU09VUkNFUyAyNTYKKworLyogU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzIG5lZWQgbG90cyBvZiBidXMgZW50cmllcy4gKi8KKy8qIE1heGltdW0gMjU2IFBDSSBidXNzZXMsIHBsdXMgMSBJU0EgYnVzIGluIGVhY2ggb2YgNCBjYWJpbmV0cy4gKi8KKyNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNjAKKworZXh0ZXJuIHZvaWQgbnVtYXFfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKwkJCQljaGFyICpwcm9kdWN0aWQpOworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXJkYzMyMXgvZ3Bpby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1yZGMzMjF4L2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjEwYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1yZGMzMjF4L2dwaW8uaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIF9BU01fWDg2X01BQ0hfUkRDMzIxWF9HUElPX0gKKyNkZWZpbmUgX0FTTV9YODZfTUFDSF9SREMzMjFYX0dQSU9fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK2V4dGVybiBpbnQgcmRjX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOworZXh0ZXJuIHZvaWQgcmRjX2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CitleHRlcm4gaW50IHJkY19ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKK2V4dGVybiBpbnQgcmRjX2dwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCByZGNfZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKK2V4dGVybiB2b2lkIHJkY19ncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7CitleHRlcm4gdm9pZCBfX2luaXQgcmRjMzIxeF9ncGlvX3NldHVwKHZvaWQpOworCisvKiBXcmFwcGVycyBmb3IgdGhlIGFyY2gtbmV1dHJhbCBHUElPIEFQSSAqLworCitzdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCit7CisJcmV0dXJuIHJkY19ncGlvX3JlcXVlc3QoZ3BpbywgbGFiZWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlyZGNfZ3Bpb19mcmVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiByZGNfZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIHJkY19ncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiByZGNfZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJcmRjX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gZ3BpbzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQoreworCXJldHVybiBpcnE7Cit9CisKKy8qIEZvciBjYW5zbGVlcCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfUkRDMzIxWF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtcmRjMzIxeC9yZGMzMjF4X2RlZnMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtdm95YWdlci9kb190aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9tYWNoLXZveWFnZXIvZG9fdGltZXIuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZveWFnZXIvZW50cnlfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL2VudHJ5X2FyY2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L21hY2gtdm95YWdlci9lbnRyeV9hcmNoLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9lbnRyeV9hcmNoLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZveWFnZXIvc2V0dXBfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL3NldHVwX2FyY2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L21hY2gtdm95YWdlci9zZXR1cF9hcmNoLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9zZXR1cF9hcmNoLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hdGhfZW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjViMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0FTTV9YODZfTUFUSF9FTVVfSAorI2RlZmluZSBfQVNNX1g4Nl9NQVRIX0VNVV9ICisKKy8qIFRoaXMgc3RydWN0dXJlIG1hdGNoZXMgdGhlIGxheW91dCBvZiB0aGUgZGF0YSBzYXZlZCB0byB0aGUgc3RhY2sKKyAgIGZvbGxvd2luZyBhIGRldmljZS1ub3QtcHJlc2VudCBpbnRlcnJ1cHQsIHBhcnQgb2YgaXQgc2F2ZWQKKyAgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIDgwMzg2LzgwNDg2LgorICAgKi8KK3N0cnVjdCBpbmZvIHsKKwlsb25nIF9fX29yaWdfZWlwOworCWxvbmcgX19fZWJ4OworCWxvbmcgX19fZWN4OworCWxvbmcgX19fZWR4OworCWxvbmcgX19fZXNpOworCWxvbmcgX19fZWRpOworCWxvbmcgX19fZWJwOworCWxvbmcgX19fZWF4OworCWxvbmcgX19fZHM7CisJbG9uZyBfX19lczsKKwlsb25nIF9fX2ZzOworCWxvbmcgX19fb3JpZ19lYXg7CisJbG9uZyBfX19laXA7CisJbG9uZyBfX19jczsKKwlsb25nIF9fX2VmbGFnczsKKwlsb25nIF9fX2VzcDsKKwlsb25nIF9fX3NzOworCWxvbmcgX19fdm04Nl9lczsgLyogVGhpcyBhbmQgdGhlIGZvbGxvd2luZyBvbmx5IGluIHZtODYgbW9kZSAqLworCWxvbmcgX19fdm04Nl9kczsKKwlsb25nIF9fX3ZtODZfZnM7CisJbG9uZyBfX192bTg2X2dzOworfTsKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQVRIX0VNVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWZkZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9YODZfTUMxNDY4MThSVENfSAorI2RlZmluZSBfQVNNX1g4Nl9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisKKyNpZm5kZWYgUlRDX1BPUlQKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4NzAgKyAoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTEJLyogUlRDIG9wZXJhdGVzIGluIGJpbmFyeSBtb2RlICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgZGVmaW5lZChfX0hBVkVfQVJDSF9DTVBYQ0hHKQorLyoKKyAqIFRoaXMgbG9jayBwcm92aWRlcyBubWkgYWNjZXNzIHRvIHRoZSBDTU9TL1JUQyByZWdpc3RlcnMuICBJdCBoYXMgc29tZQorICogc3BlY2lhbCBwcm9wZXJ0aWVzLiAgSXQgaXMgb3duZWQgYnkgYSBDUFUgYW5kIHN0b3JlcyB0aGUgaW5kZXggcmVnaXN0ZXIKKyAqIGN1cnJlbnRseSBiZWluZyBhY2Nlc3NlZCAoaWYgb3duZWQpLiAgVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGl0IHdvcmtzCisgKiBsaWtlIGEgbm9ybWFsIGxvY2sgKG5vcm1hbGx5KS4gIEhvd2V2ZXIsIGluIGFuIE5NSSwgdGhlIE5NSSBjb2RlIHdpbGwKKyAqIGZpcnN0IGNoZWNrIHRvIHNlZSBpZiBpdHMgQ1BVIG93bnMgdGhlIGxvY2ssIG1lYW5pbmcgdGhhdCB0aGUgTk1JCisgKiBpbnRlcnJ1cHRlZCBkdXJpbmcgdGhlIHJlYWQvd3JpdGUgb2YgdGhlIGRldmljZS4gIElmIGl0IGRvZXMsIGl0IGdvZXMgYWhlYWQKKyAqIGFuZCBwZXJmb3JtcyB0aGUgYWNjZXNzIGFuZCB0aGVuIHJlc3RvcmVzIHRoZSBpbmRleCByZWdpc3Rlci4gIElmIGl0IGRvZXMKKyAqIG5vdCwgaXQgbG9ja3Mgbm9ybWFsbHkuCisgKgorICogTm90ZSB0aGF0IHNpbmNlIHdlIGFyZSB3b3JraW5nIHdpdGggTk1Jcywgd2UgbmVlZCB0aGlzIGxvY2sgZXZlbiBpbgorICogYSBub24tU01QIG1hY2hpbmUganVzdCB0byBtYXJrIHRoYXQgdGhlIGxvY2sgaXMgb3duZWQuCisgKgorICogVGhpcyBvbmx5IHdvcmtzIHdpdGggY29tcGFyZS1hbmQtc3dhcC4gIFRoZXJlIGlzIG5vIG90aGVyIHdheSB0bworICogYXRvbWljYWxseSBjbGFpbSB0aGUgbG9jayBhbmQgc2V0IHRoZSBvd25lci4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY21vc19sb2NrOworCisvKgorICogQWxsIG9mIHRoZXNlIGJlbG93IG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBvZmYsIHByZWVtcHQKKyAqIGRpc2FibGVkLCBldGMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfY21vcyh1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIG5ldzsKKwluZXcgPSAoKHNtcF9wcm9jZXNzb3JfaWQoKSArIDEpIDw8IDgpIHwgcmVnOworCWZvciAoOzspIHsKKwkJaWYgKGNtb3NfbG9jaykgeworCQkJY3B1X3JlbGF4KCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoX19jbXB4Y2hnKCZjbW9zX2xvY2ssIDAsIG5ldywgc2l6ZW9mKGNtb3NfbG9jaykpID09IDApCisJCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2Ntb3Modm9pZCkKK3sKKwljbW9zX2xvY2sgPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkb19pX2hhdmVfbG9ja19jbW9zKHZvaWQpCit7CisJcmV0dXJuIChjbW9zX2xvY2sgPj4gOCkgPT0gKHNtcF9wcm9jZXNzb3JfaWQoKSArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY3VycmVudF9sb2NrX2Ntb3NfcmVnKHZvaWQpCit7CisJcmV0dXJuIGNtb3NfbG9jayAmIDB4ZmY7Cit9CisKKyNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpCQkJXAorCWRvIHsJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBjbW9zX2ZsYWdzOwlcCisJCWxvY2FsX2lycV9zYXZlKGNtb3NfZmxhZ3MpOwlcCisJCWxvY2tfY21vcyhyZWcpCisKKyNkZWZpbmUgbG9ja19jbW9zX3N1ZmZpeChyZWcpCQkJXAorCXVubG9ja19jbW9zKCk7CQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShjbW9zX2ZsYWdzKTsJCVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrX2Ntb3Nfc3VmZml4KHJlZykgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tfY21vcyhyZWcpCisjZGVmaW5lIHVubG9ja19jbW9zKCkKKyNkZWZpbmUgZG9faV9oYXZlX2xvY2tfY21vcygpIDAKKyNkZWZpbmUgY3VycmVudF9sb2NrX2Ntb3NfcmVnKCkgMAorI2VuZGlmCisKKy8qCisgKiBUaGUgeWV0IHN1cHBvcnRlZCBtYWNoaW5lcyBhbGwgYWNjZXNzIHRoZSBSVEMgaW5kZXggcmVnaXN0ZXIgdmlhCisgKiBhbiBJU0EgcG9ydCBhY2Nlc3MgYnV0IHRoZSB3YXkgdG8gYWNjZXNzIHRoZSBkYXRlIHJlZ2lzdGVyIGRpZmZlcnMgLi4uCisgKi8KKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpIHJ0Y19jbW9zX3JlYWQoYWRkcikKKyNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpIHJ0Y19jbW9zX3dyaXRlKHZhbCwgYWRkcikKK3Vuc2lnbmVkIGNoYXIgcnRjX2Ntb3NfcmVhZCh1bnNpZ25lZCBjaGFyIGFkZHIpOwordm9pZCBydGNfY21vc193cml0ZSh1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKTsKKworZXh0ZXJuIGludCBtYWNoX3NldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjaF9nZXRfY21vc190aW1lKHZvaWQpOworCisjZGVmaW5lIFJUQ19JUlEgOAorCisjZW5kaWYgLyogX0FTTV9YODZfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWRiYjZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNhLmgKQEAgLTAsMCArMSw0MyBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLworCisvKiBQbGF0Zm9ybSBzcGVjaWZpYyBNQ0EgZGVmaW5lcyAqLworI2lmbmRlZiBfQVNNX1g4Nl9NQ0FfSAorI2RlZmluZSBfQVNNX1g4Nl9NQ0FfSAorCisvKiBNYXhpbWFsIG51bWJlciBvZiBNQ0Egc2xvdHMgLSBhY3R1YWxseSwgc29tZSBtYWNoaW5lcyBoYXZlIGxlc3MsIGJ1dAorICogdGhleSBhbGwgaGF2ZSBzdWZmaWNpZW50IG51bWJlciBvZiBQT1MgcmVnaXN0ZXJzIHRvIGNvdmVyIDguCisgKi8KKyNkZWZpbmUgTUNBX01BWF9TTE9UX05SICA4CisKKy8qIE1vc3QgbWFjaGluZXMgaGF2ZSBvbmx5IG9uZSBNQ0EgYnVzLiAgVGhlIG9ubHkgbXVsdGlwbGUgYnVzIG1hY2hpbmVzCisgKiBJIGtub3cgaGF2ZSBhdCBtb3N0IHR3byAqLworI2RlZmluZSBNQVhfTUNBX0JVU1NFUyAyCisKKyNkZWZpbmUgTUNBX1BSSU1BUllfQlVTCQkwCisjZGVmaW5lIE1DQV9TRUNPTkRBUllfQlVTCTEKKworLyogRHVtbXkgc2xvdCBudW1iZXJzIG9uIHByaW1hcnkgTUNBIGZvciBpbnRlZ3JhdGVkIGZ1bmN0aW9ucyAqLworI2RlZmluZSBNQ0FfSU5URUdTQ1NJCShNQ0FfTUFYX1NMT1RfTlIpCisjZGVmaW5lIE1DQV9JTlRFR1ZJREVPCShNQ0FfTUFYX1NMT1RfTlIrMSkKKyNkZWZpbmUgTUNBX01PVEhFUkJPQVJEIChNQ0FfTUFYX1NMT1RfTlIrMikKKworLyogRHVtbXkgUE9TIHZhbHVlcyBmb3IgaW50ZWdyYXRlZCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgTUNBX0RVTU1ZX1BPU19TVEFSVAkweDEwMDAwCisjZGVmaW5lIE1DQV9JTlRFR1NDU0lfUE9TCShNQ0FfRFVNTVlfUE9TX1NUQVJUKzEpCisjZGVmaW5lIE1DQV9JTlRFR1ZJREVPX1BPUwkoTUNBX0RVTU1ZX1BPU19TVEFSVCsyKQorI2RlZmluZSBNQ0FfTU9USEVSQk9BUkRfUE9TCShNQ0FfRFVNTVlfUE9TX1NUQVJUKzMpCisKKy8qIE1DQSByZWdpc3RlcnMgKi8KKworI2RlZmluZSBNQ0FfTU9USEVSQk9BUkRfU0VUVVBfUkVHCTB4OTQKKyNkZWZpbmUgTUNBX0FEQVBURVJfU0VUVVBfUkVHCQkweDk2CisjZGVmaW5lIE1DQV9QT1NfUkVHKG4pCQkJKDB4MTAwKyhuKSkKKworI2RlZmluZSBNQ0FfRU5BQkxFRAkweDAxCS8qIFBPUyAyLCBzZXQgaWYgYWRhcHRlciBlbmFibGVkICovCisKKy8qIE1heCBudW1iZXIgb2YgYWRhcHRlcnMsIGluY2x1ZGluZyBib3RoIHNsb3RzIGFuZCB2YXJpb3VzIGludGVncmF0ZWQKKyAqIHRoaW5ncy4KKyAqLworI2RlZmluZSBNQ0FfTlVNQURBUFRFUlMgKE1DQV9NQVhfU0xPVF9OUiszKQorCisjZW5kaWYgLyogX0FTTV9YODZfTUNBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jYV9kbWEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jYV9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTI3MWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNhX2RtYS5oCkBAIC0wLDAgKzEsMjAxIEBACisjaWZuZGVmIF9BU01fWDg2X01DQV9ETUFfSAorI2RlZmluZSBfQVNNX1g4Nl9NQ0FfRE1BX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisvKgorICogTWljcm9jaGFubmVsIHNwZWNpZmljIERNQSBzdHVmZi4gIERNQSBvbiBhbiBNQ0EgbWFjaGluZSBpcyBmYWlybHkgc2ltaWxhciB0bworICogICBzdGFuZGFyZCBQQyBkbWEsIGJ1dCBpdCBjZXJ0YWlubHkgaGFzIGl0cyBxdWlya3MuICBETUEgcmVnaXN0ZXIgYWRkcmVzc2VzCisgKiAgIGFyZSBpbiBhIGRpZmZlcmVudCBwbGFjZSBhbmQgdGhlcmUgYXJlIHNvbWUgYWRkZWQgZnVuY3Rpb25zLiAgTW9zdCBvZiB0aGlzCisgKiAgIHNob3VsZCBiZSBwcmV0dHkgb2J2aW91cyBvbiBpbnNwZWN0aW9uLiAgTm90ZSB0aGF0IHRoZSB1c2VyIG11c3QgZGl2aWRlCisgKiAgIGNvdW50IGJ5IDIgd2hlbiB1c2luZyAxNi1iaXQgZG1hOyB0aGF0IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucy4KKyAqCisgKiBSYW1lbiBOb29kbGVzIGFyZSB5dW1teS4KKyAqCisgKiAgMTk5OCBUeW1tIFR3aWxsbWFuIDx0eW1tQGNvbXB1dGVyLm9yZz4KKyAqLworCisvKgorICogUmVnaXN0ZXJzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIERNQSBjb250cm9sbGVyOyBGTiBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0ZXIKKyAqICAgKHRlbGwgdGhlIGNvbnRyb2xsZXIgd2hhdCB0byBkbykgYW5kIEVYRSBpcyB0aGUgZXhlY3V0aW9uIHJlZ2lzdGVyIChob3cKKyAqICAgdG8gZG8gaXQpCisgKi8KKworI2RlZmluZSBNQ0FfRE1BX1JFR19GTiAgMHgxOAorI2RlZmluZSBNQ0FfRE1BX1JFR19FWEUgMHgxQQorCisvKgorICogRnVuY3Rpb25zIHRoYXQgdGhlIERNQSBjb250cm9sbGVyIGNhbiBkbworICovCisKKyNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfSU8gICAgICAgMHgwMAorI2RlZmluZSBNQ0FfRE1BX0ZOX1NFVF9BRERSICAgICAweDIwCisjZGVmaW5lIE1DQV9ETUFfRk5fR0VUX0FERFIgICAgIDB4MzAKKyNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfQ09VTlQgICAgMHg0MAorI2RlZmluZSBNQ0FfRE1BX0ZOX0dFVF9DT1VOVCAgICAweDUwCisjZGVmaW5lIE1DQV9ETUFfRk5fR0VUX1NUQVRVUyAgIDB4NjAKKyNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfTU9ERSAgICAgMHg3MAorI2RlZmluZSBNQ0FfRE1BX0ZOX1NFVF9BUkJVUyAgICAweDgwCisjZGVmaW5lIE1DQV9ETUFfRk5fTUFTSyAgICAgICAgIDB4OTAKKyNkZWZpbmUgTUNBX0RNQV9GTl9SRVNFVF9NQVNLICAgMHhBMAorI2RlZmluZSBNQ0FfRE1BX0ZOX01BU1RFUl9DTEVBUiAweEQwCisKKy8qCisgKiBNb2RlcyAodXNlZCBieSBzZXR0aW5nIE1DQV9ETUFfRk5fTU9ERSBpbiB0aGUgZnVuY3Rpb24gcmVnaXN0ZXIpCisgKgorICogTm90ZSB0aGF0IHRoZSBNT0RFX1JFQUQgaXMgcmVhZCBmcm9tIG1lbW9yeSAod3JpdGUgdG8gZGV2aWNlKSwgYW5kCisgKiAgIE1PREVfV1JJVEUgaXMgdmljZS12ZXJzYS4KKyAqLworCisjZGVmaW5lIE1DQV9ETUFfTU9ERV9YRkVSICAweDA0ICAvKiByZWFkIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgTUNBX0RNQV9NT0RFX1JFQUQgIDB4MDQgIC8qIHNhbWUgYXMgWEZFUiAqLworI2RlZmluZSBNQ0FfRE1BX01PREVfV1JJVEUgMHgwOCAgLyogT1Igd2l0aCBNT0RFX1hGRVIgdG8gdXNlICovCisjZGVmaW5lIE1DQV9ETUFfTU9ERV9JTyAgICAweDAxICAvKiBETUEgZnJvbSBJTyByZWdpc3RlciAqLworI2RlZmluZSBNQ0FfRE1BX01PREVfMTYgICAgMHg0MCAgLyogMTYgYml0IHhmZXJzICovCisKKworLyoqCisgKgltY2FfZW5hYmxlX2RtYQktCWNoYW5uZWwgdG8gZW5hYmxlIERNQSBvbgorICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoKKyAqCUVuYWJsZSB0aGUgTUNBIGJ1cyBETUEgb24gYSBjaGFubmVsLiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbQorICoJSVJRIGNvbnRleHQuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG1jYV9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlvdXRiKE1DQV9ETUFfRk5fUkVTRVRfTUFTSyB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7Cit9CisKKy8qKgorICoJbWNhX2Rpc2JsZV9kbWEJLQljaGFubmVsIHRvIGRpc2FibGUgRE1BIG9uCisgKglAZG1hbnI6IERNQSBjaGFubmVsCisgKgorICoJRW5hYmxlIHRoZSBNQ0EgYnVzIERNQSBvbiBhIGNoYW5uZWwuIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tCisgKglJUlEgY29udGV4dC4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbWNhX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlvdXRiKE1DQV9ETUFfRk5fTUFTSyB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7Cit9CisKKy8qKgorICoJbWNhX3NldF9kbWFfYWRkciAtCWxvYWQgYSAyNGJpdCBETUEgYWRkcmVzcworICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoJQGE6IDI0Yml0IGJ1cyBhZGRyZXNzCisgKgorICoJTG9hZCB0aGUgYWRkcmVzcyByZWdpc3RlciBpbiB0aGUgRE1BIGNvbnRyb2xsZXIuIFRoaXMgaGFzIGEgMjRiaXQKKyAqCWxpbWl0YXRpb24gKDE2TWIpLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2Ffc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCit7CisJb3V0YihNQ0FfRE1BX0ZOX1NFVF9BRERSIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKKwlvdXRiKGEgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOworCW91dGIoKGEgPj4gOCkgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOworCW91dGIoKGEgPj4gMTYpICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKK30KKworLyoqCisgKgltY2FfZ2V0X2RtYV9hZGRyIC0JbG9hZCBhIDI0Yml0IERNQSBhZGRyZXNzCisgKglAZG1hbnI6IERNQSBjaGFubmVsCisgKgorICoJUmVhZCB0aGUgYWRkcmVzcyByZWdpc3RlciBpbiB0aGUgRE1BIGNvbnRyb2xsZXIuIFRoaXMgaGFzIGEgMjRiaXQKKyAqCWxpbWl0YXRpb24gKDE2TWIpLiBUaGUgcmV0dXJuIGlzIGEgYnVzIGFkZHJlc3MuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWNhX2dldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJdW5zaWduZWQgaW50IGFkZHI7CisKKwlvdXRiKE1DQV9ETUFfRk5fR0VUX0FERFIgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOworCWFkZHIgPSBpbmIoTUNBX0RNQV9SRUdfRVhFKTsKKwlhZGRyIHw9IGluYihNQ0FfRE1BX1JFR19FWEUpIDw8IDg7CisJYWRkciB8PSBpbmIoTUNBX0RNQV9SRUdfRVhFKSA8PCAxNjsKKworCXJldHVybiBhZGRyOworfQorCisvKioKKyAqCW1jYV9zZXRfZG1hX2NvdW50IC0JbG9hZCBhIDE2Yml0IHRyYW5zZmVyIGNvdW50CisgKglAZG1hbnI6IERNQSBjaGFubmVsCisgKglAY291bnQ6IGNvdW50CisgKgorICoJU2V0IHRoZSBETUEgY291bnQgZm9yIHRoaXMgY2hhbm5lbC4gVGhpcyBjYW4gYmUgdXAgdG8gNjRLYnl0ZXMuCisgKglTZXR0aW5nIGEgY291bnQgb2YgemVybyB3aWxsIG5vdCBkbyB3aGF0IHlvdSBleHBlY3QuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG1jYV9zZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCWNvdW50LS07ICAvKiB0cmFuc2ZlcnMgb25lIG1vcmUgdGhhbiBjb3VudCAtLSBjb3JyZWN0IGZvciB0aGlzICovCisKKwlvdXRiKE1DQV9ETUFfRk5fU0VUX0NPVU5UIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKKwlvdXRiKGNvdW50ICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKKwlvdXRiKChjb3VudCA+PiA4KSAmIDB4ZmYsIE1DQV9ETUFfUkVHX0VYRSk7Cit9CisKKy8qKgorICoJbWNhX2dldF9kbWFfcmVzaWR1ZSAtCWdldCB0aGUgcmVtYWluaW5nIGJ5dGVzIHRvIHRyYW5zZmVyCisgKglAZG1hbnI6IERNQSBjaGFubmVsCisgKgorICoJVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB0cmFuc2ZlcgorICoJb24gdGhpcyBETUEgY2hhbm5lbC4KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtY2FfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBzaG9ydCBjb3VudDsKKworCW91dGIoTUNBX0RNQV9GTl9HRVRfQ09VTlQgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOworCWNvdW50ID0gMSArIGluYihNQ0FfRE1BX1JFR19FWEUpOworCWNvdW50ICs9IGluYihNQ0FfRE1BX1JFR19FWEUpIDw8IDg7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICoJbWNhX3NldF9kbWFfaW8gLQlzZXQgdGhlIHBvcnQgZm9yIGFuIEkvTyB0cmFuc2ZlcgorICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoJQGlvX2FkZHI6IGFuIEkvTyBwb3J0IG51bWJlcgorICoKKyAqCVVubGlrZSB0aGUgSVNBIGJ1cyBETUEgY29udHJvbGxlcnMgdGhlIERNQSBvbiBNQ0EgYnVzIGNhbiB0cmFuc2ZlcgorICoJd2l0aCBhbiBJL08gcG9ydCB0YXJnZXQuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG1jYV9zZXRfZG1hX2lvKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGlvX2FkZHIpCit7CisJLyoKKwkgKiBETUEgZnJvbSBhIHBvcnQgYWRkcmVzcyAtLSBzZXQgdGhlIGlvIGFkZHJlc3MKKwkgKi8KKworCW91dGIoTUNBX0RNQV9GTl9TRVRfSU8gfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOworCW91dGIoaW9fYWRkciAmIDB4ZmYsIE1DQV9ETUFfUkVHX0VYRSk7CisJb3V0YigoaW9fYWRkciA+PiAgOCkgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOworfQorCisvKioKKyAqCW1jYV9zZXRfZG1hX21vZGUgLQlzZXQgdGhlIERNQSBtb2RlCisgKglAZG1hbnI6IERNQSBjaGFubmVsCisgKglAbW9kZTogbW9kZSB0byBzZXQKKyAqCisgKglUaGUgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydHMgc2V2ZXJhbCBtb2Rlcy4gVGhlIG1vZGUgdmFsdWVzIHlvdSBjYW4KKyAqCXNldCBhcmUtCisgKgorICoJJU1DQV9ETUFfTU9ERV9SRUFEIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBETUEgZGV2aWNlLgorICoKKyAqCSVNQ0FfRE1BX01PREVfV1JJVEUgdG8gd3JpdGluZyB0byB0aGUgRE1BIGRldmljZS4KKyAqCisgKgklTUNBX0RNQV9NT0RFX0lPIHRvIGRvIERNQSB0byBvciBmcm9tIGFuIEkvTyBwb3J0LgorICoKKyAqCSVNQ0FfRE1BX01PREVfMTYgdG8gZG8gMTZiaXQgdHJhbnNmZXJzLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2Ffc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJb3V0YihNQ0FfRE1BX0ZOX1NFVF9NT0RFIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKKwlvdXRiKG1vZGUsIE1DQV9ETUFfUkVHX0VYRSk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NQ0FfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2ZTE3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCkBAIC0wLDAgKzEsMTMwIEBACisjaWZuZGVmIF9BU01fWDg2X01DRV9ICisjZGVmaW5lIF9BU01fWDg2X01DRV9ICisKKyNpZmRlZiBfX3g4Nl82NF9fCisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qCisgKiBNYWNoaW5lIENoZWNrIHN1cHBvcnQgZm9yIHg4NgorICovCisKKyNkZWZpbmUgTUNHX0NUTF9QCSAoMVVMPDw4KSAgIC8qIE1DR19DQVAgcmVnaXN0ZXIgYXZhaWxhYmxlICovCisKKyNkZWZpbmUgTUNHX1NUQVRVU19SSVBWICAoMVVMPDwwKSAgIC8qIHJlc3RhcnQgaXAgdmFsaWQgKi8KKyNkZWZpbmUgTUNHX1NUQVRVU19FSVBWICAoMVVMPDwxKSAgIC8qIGlwIHBvaW50cyB0byBjb3JyZWN0IGluc3RydWN0aW9uICovCisjZGVmaW5lIE1DR19TVEFUVVNfTUNJUCAgKDFVTDw8MikgICAvKiBtYWNoaW5lIGNoZWNrIGluIHByb2dyZXNzICovCisKKyNkZWZpbmUgTUNJX1NUQVRVU19WQUwgICAoMVVMPDw2MykgIC8qIHZhbGlkIGVycm9yICovCisjZGVmaW5lIE1DSV9TVEFUVVNfT1ZFUiAgKDFVTDw8NjIpICAvKiBwcmV2aW91cyBlcnJvcnMgbG9zdCAqLworI2RlZmluZSBNQ0lfU1RBVFVTX1VDICAgICgxVUw8PDYxKSAgLyogdW5jb3JyZWN0ZWQgZXJyb3IgKi8KKyNkZWZpbmUgTUNJX1NUQVRVU19FTiAgICAoMVVMPDw2MCkgIC8qIGVycm9yIGVuYWJsZWQgKi8KKyNkZWZpbmUgTUNJX1NUQVRVU19NSVNDViAoMVVMPDw1OSkgIC8qIG1pc2MgZXJyb3IgcmVnLiB2YWxpZCAqLworI2RlZmluZSBNQ0lfU1RBVFVTX0FERFJWICgxVUw8PDU4KSAgLyogYWRkciByZWcuIHZhbGlkICovCisjZGVmaW5lIE1DSV9TVEFUVVNfUENDICAgKDFVTDw8NTcpICAvKiBwcm9jZXNzb3IgY29udGV4dCBjb3JydXB0ICovCisKKy8qIEZpZWxkcyBhcmUgemVybyB3aGVuIG5vdCBhdmFpbGFibGUgKi8KK3N0cnVjdCBtY2UgeworCV9fdTY0IHN0YXR1czsKKwlfX3U2NCBtaXNjOworCV9fdTY0IGFkZHI7CisJX191NjQgbWNnc3RhdHVzOworCV9fdTY0IGlwOworCV9fdTY0IHRzYzsJLyogY3B1IHRpbWUgc3RhbXAgY291bnRlciAqLworCV9fdTY0IHJlczE7CS8qIGZvciBmdXR1cmUgZXh0ZW5zaW9uICovCisJX191NjQgcmVzMjsJLyogZGl0by4gKi8KKwlfX3U4ICBjczsJCS8qIGNvZGUgc2VnbWVudCAqLworCV9fdTggIGJhbms7CS8qIG1hY2hpbmUgY2hlY2sgYmFuayAqLworCV9fdTggIGNwdTsJLyogY3B1IHRoYXQgcmFpc2VkIHRoZSBlcnJvciAqLworCV9fdTggIGZpbmlzaGVkOyAgIC8qIGVudHJ5IGlzIHZhbGlkICovCisJX191MzIgcGFkOworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBkYXRhIHJlbGF0ZWQgdG8gdGhlIE1DRSBsb2cuICBBbHNvCisgKiBjYXJyaWVzIGEgc2lnbmF0dXJlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgZnJvbSBleHRlcm5hbAorICogZGVidWdnaW5nIHRvb2xzLiAgRWFjaCBlbnRyeSBpcyBvbmx5IHZhbGlkIHdoZW4gaXRzIGZpbmlzaGVkIGZsYWcKKyAqIGlzIHNldC4KKyAqLworCisjZGVmaW5lIE1DRV9MT0dfTEVOIDMyCisKK3N0cnVjdCBtY2VfbG9nIHsKKwljaGFyIHNpZ25hdHVyZVsxMl07IC8qICJNQUNISU5FQ0hFQ0siICovCisJdW5zaWduZWQgbGVuOwkgICAgLyogPSBNQ0VfTE9HX0xFTiAqLworCXVuc2lnbmVkIG5leHQ7CisJdW5zaWduZWQgZmxhZ3M7CisJdW5zaWduZWQgcGFkMDsKKwlzdHJ1Y3QgbWNlIGVudHJ5W01DRV9MT0dfTEVOXTsKK307CisKKyNkZWZpbmUgTUNFX09WRVJGTE9XIDAJCS8qIGJpdCAwIGluIGZsYWdzIG1lYW5zIG92ZXJmbG93ICovCisKKyNkZWZpbmUgTUNFX0xPR19TSUdOQVRVUkUJIk1BQ0hJTkVDSEVDSyIKKworI2RlZmluZSBNQ0VfR0VUX1JFQ09SRF9MRU4gICBfSU9SKCdNJywgMSwgaW50KQorI2RlZmluZSBNQ0VfR0VUX0xPR19MRU4gICAgICBfSU9SKCdNJywgMiwgaW50KQorI2RlZmluZSBNQ0VfR0VUQ0xFQVJfRkxBR1MgICBfSU9SKCdNJywgMywgaW50KQorCisvKiBTb2Z0d2FyZSBkZWZpbmVkIGJhbmtzICovCisjZGVmaW5lIE1DRV9FWFRFTkRFRF9CQU5LCTEyOAorI2RlZmluZSBNQ0VfVEhFUk1BTF9CQU5LCU1DRV9FWFRFTkRFRF9CQU5LICsgMAorCisjZGVmaW5lIEs4X01DRV9USFJFU0hPTERfQkFTRSAgICAgIChNQ0VfRVhURU5ERURfQkFOSyArIDEpICAgICAgLyogTUNFX0FNRCAqLworI2RlZmluZSBLOF9NQ0VfVEhSRVNIT0xEX0JBTktfMCAgICAoTUNFX1RIUkVTSE9MRF9CQVNFICsgMCAqIDkpCisjZGVmaW5lIEs4X01DRV9USFJFU0hPTERfQkFOS18xICAgIChNQ0VfVEhSRVNIT0xEX0JBU0UgKyAxICogOSkKKyNkZWZpbmUgSzhfTUNFX1RIUkVTSE9MRF9CQU5LXzIgICAgKE1DRV9USFJFU0hPTERfQkFTRSArIDIgKiA5KQorI2RlZmluZSBLOF9NQ0VfVEhSRVNIT0xEX0JBTktfMyAgICAoTUNFX1RIUkVTSE9MRF9CQVNFICsgMyAqIDkpCisjZGVmaW5lIEs4X01DRV9USFJFU0hPTERfQkFOS180ICAgIChNQ0VfVEhSRVNIT0xEX0JBU0UgKyA0ICogOSkKKyNkZWZpbmUgSzhfTUNFX1RIUkVTSE9MRF9CQU5LXzUgICAgKE1DRV9USFJFU0hPTERfQkFTRSArIDUgKiA5KQorI2RlZmluZSBLOF9NQ0VfVEhSRVNIT0xEX0RSQU1fRUNDICAoTUNFX1RIUkVTSE9MRF9CQU5LXzQgKyAwKQorCisjZW5kaWYgLyogX194ODZfNjRfXyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIGludCBtY2VfZGlzYWJsZWQ7CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3ZvaWQgbWNlX2xvZyhzdHJ1Y3QgbWNlICptKTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc3lzX2RldmljZSwgZGV2aWNlX21jZSk7CitleHRlcm4gdm9pZCAoKnRocmVzaG9sZF9jcHVfY2FsbGJhY2spKHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB1bnNpZ25lZCBpbnQgY3B1KTsKKworI2lmZGVmIENPTkZJR19YODZfTUNFX0lOVEVMCit2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbWNlX2ludGVsX2ZlYXR1cmVfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpIHsgfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2X01DRV9BTUQKK3ZvaWQgbWNlX2FtZF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbWNlX2FtZF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKSB7IH0KKyNlbmRpZgorCit2b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQodW5zaWduZWQgaW50IGNwdSwgX191NjQgc3RhdHVzKTsKKworZXh0ZXJuIGF0b21pY190IG1jZV9lbnRyeTsKKworZXh0ZXJuIHZvaWQgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2V4dGVybiBpbnQgbWNlX25vdGlmeV91c2VyKHZvaWQpOworCisjZW5kaWYgLyogIUNPTkZJR19YODZfMzIgKi8KKworCisKKyNpZmRlZiBDT05GSUdfWDg2X01DRQorZXh0ZXJuIHZvaWQgbWNoZWNrX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKyNlbHNlCisjZGVmaW5lIG1jaGVja19pbml0KGMpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorZXh0ZXJuIHZvaWQgc3RvcF9tY2Uodm9pZCk7CitleHRlcm4gdm9pZCByZXN0YXJ0X21jZSh2b2lkKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X01DRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ODI2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9BU01fWDg2X01JQ1JPQ09ERV9ICisjZGVmaW5lIF9BU01fWDg2X01JQ1JPQ09ERV9ICisKK3N0cnVjdCBjcHVfc2lnbmF0dXJlIHsKKwl1bnNpZ25lZCBpbnQgc2lnOworCXVuc2lnbmVkIGludCBwZjsKKwl1bnNpZ25lZCBpbnQgcmV2OworfTsKKworc3RydWN0IGRldmljZTsKKworc3RydWN0IG1pY3JvY29kZV9vcHMgeworCWludCAgKCpyZXF1ZXN0X21pY3JvY29kZV91c2VyKSAoaW50IGNwdSwgY29uc3Qgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUpOworCWludCAgKCpyZXF1ZXN0X21pY3JvY29kZV9mdykgKGludCBjcHUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CisKKwl2b2lkICgqYXBwbHlfbWljcm9jb2RlKSAoaW50IGNwdSk7CisKKwlpbnQgICgqY29sbGVjdF9jcHVfaW5mbykgKGludCBjcHUsIHN0cnVjdCBjcHVfc2lnbmF0dXJlICpjc2lnKTsKKwl2b2lkICgqbWljcm9jb2RlX2ZpbmlfY3B1KSAoaW50IGNwdSk7Cit9OworCitzdHJ1Y3QgdWNvZGVfY3B1X2luZm8geworCXN0cnVjdCBjcHVfc2lnbmF0dXJlIGNwdV9zaWc7CisJaW50IHZhbGlkOworCXZvaWQgKm1jOworfTsKK2V4dGVybiBzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gdWNvZGVfY3B1X2luZm9bXTsKKworI2lmZGVmIENPTkZJR19NSUNST0NPREVfSU5URUwKK2V4dGVybiBzdHJ1Y3QgbWljcm9jb2RlX29wcyAqIF9faW5pdCBpbml0X2ludGVsX21pY3JvY29kZSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtaWNyb2NvZGVfb3BzICogX19pbml0IGluaXRfaW50ZWxfbWljcm9jb2RlKHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX01JQ1JPQ09ERV9JTlRFTCAqLworCisjaWZkZWYgQ09ORklHX01JQ1JPQ09ERV9BTUQKK2V4dGVybiBzdHJ1Y3QgbWljcm9jb2RlX29wcyAqIF9faW5pdCBpbml0X2FtZF9taWNyb2NvZGUodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWljcm9jb2RlX29wcyAqIF9faW5pdCBpbml0X2FtZF9taWNyb2NvZGUodm9pZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfTUlDUk9DT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJjNDEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0FTTV9YODZfTU1BTl9ICisjZGVmaW5lIF9BU01fWDg2X01NQU5fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgorCisjZGVmaW5lIE1BUF8zMkJJVAkweDQwCQkvKiBvbmx5IGdpdmUgb3V0IDMyYml0IGFkZHJlc3NlcyAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKyNkZWZpbmUgTUFQX1NUQUNLCTB4MjAwMDAJCS8qIGdpdmUgb3V0IGFuIGFkZHJlc3MgdGhhdCBpcyBiZXN0IHN1aXRlZCBmb3IgcHJvY2Vzcy90aHJlYWQgc3RhY2tzICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfTU1BTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbWNvbmZpZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjExOWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW1jb25maWcuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01fWDg2X01NQ09ORklHX0gKKyNkZWZpbmUgX0FTTV9YODZfTU1DT05GSUdfSAorCisjaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRworZXh0ZXJuIHZvaWQgX19jcHVpbml0IGZhbTEwaF9jaGVja19lbmFibGVfbW1jZmcodm9pZCk7CitleHRlcm4gdm9pZCBfX2NwdWluaXQgY2hlY2tfZW5hYmxlX2FtZF9tbWNvbmZfZG1pKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYW0xMGhfY2hlY2tfZW5hYmxlX21tY2ZnKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2VuYWJsZV9hbWRfbW1jb25mX2RtaSh2b2lkKSB7IH0KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfTU1DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGExZGVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11LmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NTVVfSAorI2RlZmluZSBfQVNNX1g4Nl9NTVVfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisvKgorICogVGhlIHg4NiBkb2Vzbid0IGhhdmUgYSBtbXUgY29udGV4dCwgYnV0CisgKiB3ZSBwdXQgdGhlIHNlZ21lbnQgaW5mb3JtYXRpb24gaGVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvaWQgKmxkdDsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl2b2lkICp2ZHNvOworfSBtbV9jb250ZXh0X3Q7CisKKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIGxlYXZlX21tKGludCBjcHUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWF2ZV9tbShpbnQgY3B1KQoreworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlZWIzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fWDg2X01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjaWZuZGVmIENPTkZJR19QQVJBVklSVAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQoreworfQorI2VuZGlmCS8qICFDT05GSUdfUEFSQVZJUlQgKi8KKworLyoKKyAqIFVzZWQgZm9yIExEVCBjb3B5L2Rlc3RydWN0aW9uLgorICovCitpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwordm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBpbmNsdWRlICJtbXVfY29udGV4dF8zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAibW11X2NvbnRleHRfNjQuaCIKKyNlbmRpZgorCisjZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsIG5leHQpCQkJXAorZG8gewkJCQkJCVwKKwlwYXJhdmlydF9hY3RpdmF0ZV9tbSgocHJldiksIChuZXh0KSk7CVwKKwlzd2l0Y2hfbW0oKHByZXYpLCAobmV4dCksIE5VTEwpOwlcCit9IHdoaWxlICgwKTsKKworCisjZW5kaWYgLyogX0FTTV9YODZfTU1VX0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxMDAxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X01NVV9DT05URVhUXzMyX0gKKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmIChwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9PSBUTEJTVEFURV9PSykKKwkJcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPSBUTEJTVEFURV9MQVpZOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwKKwkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgeworCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLworCQljcHVfY2xlYXIoY3B1LCBwcmV2LT5jcHVfdm1fbWFzayk7CisjaWZkZWYgQ09ORklHX1NNUAorCQlwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9IFRMQlNUQVRFX09LOworCQlwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5hY3RpdmVfbW0gPSBuZXh0OworI2VuZGlmCisJCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7CisKKwkJLyogUmUtbG9hZCBwYWdlIHRhYmxlcyAqLworCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOworCisJCS8qCisJCSAqIGxvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQ6CisJCSAqLworCQlpZiAodW5saWtlbHkocHJldi0+Y29udGV4dC5sZHQgIT0gbmV4dC0+Y29udGV4dC5sZHQpKQorCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKKwl9CisjaWZkZWYgQ09ORklHX1NNUAorCWVsc2UgeworCQlwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9IFRMQlNUQVRFX09LOworCQlCVUdfT04ocGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuYWN0aXZlX21tICE9IG5leHQpOworCisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKSkgeworCQkJLyogV2Ugd2VyZSBpbiBsYXp5IHRsYiBtb2RlIGFuZCBsZWF2ZV9tbSBkaXNhYmxlZAorCQkJICogdGxiIGZsdXNoIElQSSBkZWxpdmVyeS4gV2UgbXVzdCByZWxvYWQgJWNyMy4KKwkJCSAqLworCQkJbG9hZF9jcjMobmV4dC0+cGdkKTsKKwkJCWxvYWRfTERUX25vbG9jaygmbmV4dC0+Y29udGV4dCk7CisJCX0KKwl9CisjZW5kaWYKK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzaywgbW0pCQkJXAorCWFzbSgibW92bCAlMCwlJWdzIjogOiJyIiAoMCkpOworCisjZW5kaWYgLyogX0FTTV9YODZfTU1VX0NPTlRFWFRfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3ZDM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF82NF9ICisjZGVmaW5lIF9BU01fWDg2X01NVV9DT05URVhUXzY0X0gKKworI2luY2x1ZGUgPGFzbS9wZGEuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfT0spCisJCXdyaXRlX3BkYShtbXVfc3RhdGUsIFRMQlNUQVRFX0xBWlkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgeworCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLworCQljcHVfY2xlYXIoY3B1LCBwcmV2LT5jcHVfdm1fbWFzayk7CisjaWZkZWYgQ09ORklHX1NNUAorCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9PSyk7CisJCXdyaXRlX3BkYShhY3RpdmVfbW0sIG5leHQpOworI2VuZGlmCisJCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7CisJCWxvYWRfY3IzKG5leHQtPnBnZCk7CisKKwkJaWYgKHVubGlrZWx5KG5leHQtPmNvbnRleHQubGR0ICE9IHByZXYtPmNvbnRleHQubGR0KSkKKwkJCWxvYWRfTERUX25vbG9jaygmbmV4dC0+Y29udGV4dCk7CisJfQorI2lmZGVmIENPTkZJR19TTVAKKwllbHNlIHsKKwkJd3JpdGVfcGRhKG1tdV9zdGF0ZSwgVExCU1RBVEVfT0spOworCQlpZiAocmVhZF9wZGEoYWN0aXZlX21tKSAhPSBuZXh0KQorCQkJQlVHKCk7CisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKSkgeworCQkJLyogV2Ugd2VyZSBpbiBsYXp5IHRsYiBtb2RlIGFuZCBsZWF2ZV9tbSBkaXNhYmxlZAorCQkJICogdGxiIGZsdXNoIElQSSBkZWxpdmVyeS4gV2UgbXVzdCByZWxvYWQgQ1IzCisJCQkgKiB0byBtYWtlIHN1cmUgdG8gdXNlIG5vIGZyZWVkIHBhZ2UgdGFibGVzLgorCQkJICovCisJCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOworCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKKwkJfQorCX0KKyNlbmRpZgorfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkJCQlcCitkbyB7CQkJCQkJXAorCWxvYWRfZ3NfaW5kZXgoMCk7CQkJXAorCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWZzIjo6InIiKDApKTsJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fWDg2X01NVV9DT05URVhUXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21teC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW14LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiZjMxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21teC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9YODZfTU1YX0gKKyNkZWZpbmUgX0FTTV9YODZfTU1YX0gKKworLyoKKyAqCU1NWCAzRG5vdyEgaGVscGVyIG9wZXJhdGlvbnMKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgKl9tbXhfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBtbXhfY2xlYXJfcGFnZSh2b2lkICpwYWdlKTsKK2V4dGVybiB2b2lkIG1teF9jb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOworCisjZW5kaWYgLyogX0FTTV9YODZfTU1YX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvbW16b25lLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZS5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWJkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIFdyaXR0ZW4gYnkgUGF0IEdhdWdoZW4gKGdvbmVAdXMuaWJtLmNvbSkgTWFyIDIwMDIKKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9NTVpPTkVfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9NTVpPTkVfMzJfSAorCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisjaWZkZWYgQ09ORklHX05VTUEKK2V4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOworI2RlZmluZSBOT0RFX0RBVEEobmlkKQkobm9kZV9kYXRhW25pZF0pCisKKyNpbmNsdWRlIDxhc20vbnVtYXEuaD4KKy8qIHN1bW1pdCBvciBnZW5lcmljIGFyY2ggKi8KKyNpbmNsdWRlIDxhc20vc3JhdC5oPgorCitleHRlcm4gaW50IGdldF9tZW1jZmdfbnVtYV9mbGF0KHZvaWQpOworLyoKKyAqIFRoaXMgYWxsb3dzIGFueSBvbmUgTlVNQSBhcmNoaXRlY3R1cmUgdG8gYmUgY29tcGlsZWQKKyAqIGZvciwgYW5kIHN0aWxsIGZhbGwgYmFjayB0byB0aGUgZmxhdCBmdW5jdGlvbiBpZiBpdAorICogZmFpbHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbWVtY2ZnX251bWEodm9pZCkKK3sKKworCWlmIChnZXRfbWVtY2ZnX251bWFxKCkpCisJCXJldHVybjsKKwlpZiAoZ2V0X21lbWNmZ19mcm9tX3NyYXQoKSkKKwkJcmV0dXJuOworCWdldF9tZW1jZmdfbnVtYV9mbGF0KCk7Cit9CisKK2V4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7CisKKyNlbHNlIC8qICFDT05GSUdfTlVNQSAqLworCisjZGVmaW5lIGdldF9tZW1jZmdfbnVtYSBnZXRfbWVtY2ZnX251bWFfZmxhdAorCisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworLyoKKyAqIGdlbmVyaWMgbm9kZSBtZW1vcnkgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucyBhcHBseToKKyAqCisgKiAxKSBtZW1vcnkgY29tZXMgaW4gNjRNYiBjb250aWdpb3VzIGNodW5rcyB3aGljaCBhcmUgZWl0aGVyIHByZXNlbnQgb3Igbm90CisgKiAyKSB3ZSB3aWxsIG5vdCBoYXZlIG1vcmUgdGhhbiA2NEdiIGluIHRvdGFsCisgKgorICogZm9yIG5vdyBhc3N1bWUgdGhhdCA2NEdiIGlzIG1heCBhbW91bnQgb2YgUkFNIGZvciB3aG9sZSBzeXN0ZW0KKyAqICAgIDY0R2IgLyA0MDk2Ynl0ZXMvcGFnZSA9IDE2Nzc3MjE2IHBhZ2VzCisgKi8KKyNkZWZpbmUgTUFYX05SX1BBR0VTIDE2Nzc3MjE2CisjZGVmaW5lIE1BWF9FTEVNRU5UUyAxMDI0CisjZGVmaW5lIFBBR0VTX1BFUl9FTEVNRU5UIChNQVhfTlJfUEFHRVMvTUFYX0VMRU1FTlRTKQorCitleHRlcm4gczggcGh5c25vZGVfbWFwW107CisKK3N0YXRpYyBpbmxpbmUgaW50IHBmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisjaWZkZWYgQ09ORklHX05VTUEKKwlyZXR1cm4oKGludCkgcGh5c25vZGVfbWFwWyhwZm4pIC8gUEFHRVNfUEVSX0VMRU1FTlRdKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoKKyAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgZWFjaCBudW1hIGltcGxtZW50YXRpb24gbXVzdCBkZWZpbmUuCisgKi8KKworI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCisjZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJcGdfZGF0YV90ICpfX3BnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CQkJCVwKKwlfX3BnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIF9fcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlczsJCVwKK30pCisKK3N0YXRpYyBpbmxpbmUgaW50IHBmbl92YWxpZChpbnQgcGZuKQoreworCWludCBuaWQgPSBwZm5fdG9fbmlkKHBmbik7CisKKwlpZiAobmlkID49IDApCisJCXJldHVybiAocGZuIDwgbm9kZV9lbmRfcGZuKG5pZCkpOworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKworLyoKKyAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoaXMgbnVtYSBwbGF0Zm9ybS4KKyAqLworI2RlZmluZSByZXNlcnZlX2Jvb3RtZW0oYWRkciwgc2l6ZSwgZmxhZ3MpIFwKKwlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIChhZGRyKSwgKHNpemUpLCAoZmxhZ3MpKQorI2RlZmluZSBhbGxvY19ib290bWVtKHgpIFwKKwlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4KSBcCisJX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBcCisJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKQorI2RlZmluZSBhbGxvY19ib290bWVtX2xvdyh4KSBcCisJX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFNNUF9DQUNIRV9CWVRFUywgMCkKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9wYWdlcyh4KSBcCisJX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKQorI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vcGFuaWMoeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgXAorCQkJCV9fcGEoTUFYX0RNQV9BRERSRVNTKSkKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBwZ2xpc3RfZGF0YSAgX19tYXliZV91bnVzZWQJCQlcCisJCQkJKl9fYWxsb2NfYm9vdG1lbV9ub2RlX19wZ2RhdCA9IChwZ2RhdCk7CVwKKwlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLAlcCisJCQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwlcCit9KQorI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpCQkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBwZ2xpc3RfZGF0YSAgX19tYXliZV91bnVzZWQJCQlcCisJCQkJKl9fYWxsb2NfYm9vdG1lbV9ub2RlX19wZ2RhdCA9IChwZ2RhdCk7CVwKKwlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgUEFHRV9TSVpFLAkJXAorCQkJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKTsJXAorfSkKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShwZ2RhdCwgeCkJCQkJXAorKHsJCQkJCQkJCQlcCisJc3RydWN0IHBnbGlzdF9kYXRhICBfX21heWJlX3VudXNlZAkJCVwKKwkJCQkqX19hbGxvY19ib290bWVtX25vZGVfX3BnZGF0ID0gKHBnZGF0KTsJXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApOwkJXAorfSkKKyNlbmRpZiAvKiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfTU1aT05FXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViMzgxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qIEs4IE5VTUEgc3VwcG9ydCAqLworLyogQ29weXJpZ2h0IDIwMDIsMjAwMyBieSBBbmRpIEtsZWVuLCBTdVNFIExhYnMgKi8KKy8qIDIuNSBWZXJzaW9uIGxvb3NlbHkgYmFzZWQgb24gdGhlIE5VTUFRIENvZGUgYnkgUGF0IEdhdWdoZW4uICovCisjaWZuZGVmIF9BU01fWDg2X01NWk9ORV82NF9ICisjZGVmaW5lIF9BU01fWDg2X01NWk9ORV82NF9ICisKKworI2lmZGVmIENPTkZJR19OVU1BCisKKyNpbmNsdWRlIDxsaW51eC9tbWRlYnVnLmg+CisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKy8qIFNpbXBsZSBwZXJmZWN0IGhhc2ggdG8gbWFwIHBoeXNpY2FsIGFkZHJlc3NlcyB0byBub2RlIG51bWJlcnMgKi8KK3N0cnVjdCBtZW1ub2RlIHsKKwlpbnQgc2hpZnQ7CisJdW5zaWduZWQgaW50IG1hcHNpemU7CisJczE2ICptYXA7CisJczE2IGVtYmVkZGVkX21hcFs2NCAtIDhdOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7IC8qIHRvdGFsIHNpemUgPSAxMjggYnl0ZXMgKi8KK2V4dGVybiBzdHJ1Y3QgbWVtbm9kZSBtZW1ub2RlOworI2RlZmluZSBtZW1ub2RlX3NoaWZ0IG1lbW5vZGUuc2hpZnQKKyNkZWZpbmUgbWVtbm9kZW1hcCBtZW1ub2RlLm1hcAorI2RlZmluZSBtZW1ub2RlbWFwc2l6ZSBtZW1ub2RlLm1hcHNpemUKKworZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107CisKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygocHVyZSkpIGludCBwaHlzX3RvX25pZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbmlkOworCVZJUlRVQUxfQlVHX09OKCFtZW1ub2RlbWFwKTsKKwluaWQgPSBtZW1ub2RlbWFwW2FkZHIgPj4gbWVtbm9kZV9zaGlmdF07CisJVklSVFVBTF9CVUdfT04obmlkID49IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9kYXRhW25pZF0pOworCXJldHVybiBuaWQ7Cit9CisKKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCShub2RlX2RhdGFbbmlkXSkKKworI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCisjZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpICAgICAgIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4gKwlcCisJCQkJIE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMpCisKK2V4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7CisKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKKyNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSg2NCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxVUwpKQorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmIC8qIF9BU01fWDg2X01NWk9ORV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZDYyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIF9BU01fWDg2X01PRFVMRV9ICisjZGVmaW5lIF9BU01fWDg2X01PRFVMRV9ICisKKy8qIHg4Nl8zMi82NCBhcmUgc2ltcGxlICovCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge307CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjIGRlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQorIyBkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorI2Vsc2UKKyMgZGVmaW5lIEVsZl9TaGRyIEVsZjY0X1NoZHIKKyMgZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCisjIGRlZmluZSBFbGZfRWhkciBFbGY2NF9FaGRyCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qIFg4Nl82NCBkb2VzIG5vdCBkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICovCisjZWxpZiBkZWZpbmVkIENPTkZJR19NMzg2CisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiMzg2ICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX000ODYKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICI0ODYgIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTTU4NgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjU4NiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NNTg2VFNDCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiNTg2VFNDICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX001ODZNTVgKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICI1ODZNTVggIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTUNPUkUyCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiQ09SRTIgIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTTY4NgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjY4NiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTUlJCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiUEVOVElVTUlJICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01QRU5USVVNSUlJCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiUEVOVElVTUlJSSAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTU0KKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJQRU5USVVNTSAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTTQKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJQRU5USVVNNCAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NSzYKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLNiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NSzcKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLNyAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NSzgKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLOCAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19YODZfRUxBTgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkVMQU4gIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTUNSVVNPRQorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkNSVVNPRSAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NRUZGSUNFT04KKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJFRkZJQ0VPTiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NV0lOQ0hJUEM2CisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiV0lOQ0hJUEM2ICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01XSU5DSElQM0QKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJXSU5DSElQM0QgIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTUNZUklYSUlJCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiQ1lSSVhJSUkgIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTVZJQUMzXzIKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJWSUFDMy0yICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01WSUFDNworI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlZJQUM3ICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01HRU9ERUdYMQorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkdFT0RFR1gxICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01HRU9ERV9MWAorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkdFT0RFICIKKyNlbHNlCisjZXJyb3IgdW5rbm93biBwcm9jZXNzb3IgZmFtaWx5CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgaWZkZWYgQ09ORklHXzRLU1RBQ0tTCisjICBkZWZpbmUgTU9EVUxFX1NUQUNLU0laRSAiNEtTVEFDS1MgIgorIyBlbHNlCisjICBkZWZpbmUgTU9EVUxFX1NUQUNLU0laRSAiIgorIyBlbmRpZgorIyBkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMgTU9EVUxFX1BST0NfRkFNSUxZIE1PRFVMRV9TVEFDS1NJWkUKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4ODVjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oCkBAIC0wLDAgKzEsMTQ1IEBACisjaWZuZGVmIF9BU01fWDg2X01QU1BFQ19ICisjZGVmaW5lIF9BU01fWDg2X01QU1BFQ19ICisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbXBzcGVjX2RlZi5oPgorCitleHRlcm4gaW50IGFwaWNfdmVyc2lvbltNQVhfQVBJQ1NdOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2luY2x1ZGUgPG1hY2hfbXBzcGVjLmg+CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZGVmX3RvX2JpZ3NtcDsKK2V4dGVybiB1OCBhcGljaWRfMl9ub2RlW107CitleHRlcm4gaW50IHBpY19tb2RlOworCisjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQorZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fbm9kZVtNQVhfTVBfQlVTU0VTXTsKK2V4dGVybiBpbnQgbXBfYnVzX2lkX3RvX2xvY2FsW01BWF9NUF9CVVNTRVNdOworZXh0ZXJuIGludCBxdWFkX2xvY2FsX3RvX21wX2J1c19pZCBbTlJfQ1BVUy80XVs0XTsKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9BUElDSUQgMjU2CisKKyNlbHNlCisKKyNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNTYKKy8qIEVhY2ggUENJIHNsb3QgbWF5IGJlIGEgY29tYm8gY2FyZCB3aXRoIGl0cyBvd24gYnVzLiAgNCBJUlEgcGlucyBwZXIgc2xvdC4gKi8KKyNkZWZpbmUgTUFYX0lSUV9TT1VSQ0VTIChNQVhfTVBfQlVTU0VTICogNCkKKworI2VuZGlmCisKK2V4dGVybiB2b2lkIGVhcmx5X2ZpbmRfc21wX2NvbmZpZyh2b2lkKTsKK2V4dGVybiB2b2lkIGVhcmx5X2dldF9zbXBfY29uZmlnKHZvaWQpOworCisjaWYgZGVmaW5lZChDT05GSUdfTUNBKSB8fCBkZWZpbmVkKENPTkZJR19FSVNBKQorZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fdHlwZVtNQVhfTVBfQlVTU0VTXTsKKyNlbmRpZgorCitleHRlcm4gREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOworCitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWF4X3BoeXNpY2FsX2FwaWNpZDsKK2V4dGVybiBpbnQgc21wX2ZvdW5kX2NvbmZpZzsKK2V4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7CisKK2V4dGVybiB2b2lkIGZpbmRfc21wX2NvbmZpZyh2b2lkKTsKK2V4dGVybiB2b2lkIGdldF9zbXBfY29uZmlnKHZvaWQpOworI2lmZGVmIENPTkZJR19YODZfTVBQQVJTRQorZXh0ZXJuIHZvaWQgZWFybHlfcmVzZXJ2ZV9lODIwX21wY19uZXcodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X3Jlc2VydmVfZTgyMF9tcGNfbmV3KHZvaWQpIHsgfQorI2VuZGlmCisKK3ZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pOworI2lmZGVmIENPTkZJR19BQ1BJCitleHRlcm4gdm9pZCBtcF9yZWdpc3Rlcl9pb2FwaWMoaW50IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKTsKK2V4dGVybiB2b2lkIG1wX292ZXJyaWRlX2xlZ2FjeV9pcnEodTggYnVzX2lycSwgdTggcG9sYXJpdHksIHU4IHRyaWdnZXIsCisJCQkJICAgdTMyIGdzaSk7CitleHRlcm4gdm9pZCBtcF9jb25maWdfYWNwaV9sZWdhY3lfaXJxcyh2b2lkKTsKK2V4dGVybiBpbnQgbXBfcmVnaXN0ZXJfZ3NpKHUzMiBnc2ksIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKK2V4dGVybiBpbnQgbXBfY29uZmlnX2FjcGlfZ3NpKHVuc2lnbmVkIGNoYXIgbnVtYmVyLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBpbiwKKwkJCQl1MzIgZ3NpLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludAorbXBfY29uZmlnX2FjcGlfZ3NpKHVuc2lnbmVkIGNoYXIgbnVtYmVyLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBpbiwKKwkJICAgdTMyIGdzaSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCisKKyNkZWZpbmUgUEhZU0lEX0FSUkFZX1NJWkUJQklUU19UT19MT05HUyhNQVhfQVBJQ1MpCisKK3N0cnVjdCBwaHlzaWRfbWFzayB7CisJdW5zaWduZWQgbG9uZyBtYXNrW1BIWVNJRF9BUlJBWV9TSVpFXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHBoeXNpZF9tYXNrIHBoeXNpZF9tYXNrX3Q7CisKKyNkZWZpbmUgcGh5c2lkX3NldChwaHlzaWQsIG1hcCkJCQlzZXRfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKKyNkZWZpbmUgcGh5c2lkX2NsZWFyKHBoeXNpZCwgbWFwKQkJY2xlYXJfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKKyNkZWZpbmUgcGh5c2lkX2lzc2V0KHBoeXNpZCwgbWFwKQkJdGVzdF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorI2RlZmluZSBwaHlzaWRfdGVzdF9hbmRfc2V0KHBoeXNpZCwgbWFwKQkJCVwKKwl0ZXN0X2FuZF9zZXRfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKKworI2RlZmluZSBwaHlzaWRzX2FuZChkc3QsIHNyYzEsIHNyYzIpCQkJCQlcCisJYml0bWFwX2FuZCgoZHN0KS5tYXNrLCAoc3JjMSkubWFzaywgKHNyYzIpLm1hc2ssIE1BWF9BUElDUykKKworI2RlZmluZSBwaHlzaWRzX29yKGRzdCwgc3JjMSwgc3JjMikJCQkJCVwKKwliaXRtYXBfb3IoKGRzdCkubWFzaywgKHNyYzEpLm1hc2ssIChzcmMyKS5tYXNrLCBNQVhfQVBJQ1MpCisKKyNkZWZpbmUgcGh5c2lkc19jbGVhcihtYXApCQkJCQlcCisJYml0bWFwX3plcm8oKG1hcCkubWFzaywgTUFYX0FQSUNTKQorCisjZGVmaW5lIHBoeXNpZHNfY29tcGxlbWVudChkc3QsIHNyYykJCQkJXAorCWJpdG1hcF9jb21wbGVtZW50KChkc3QpLm1hc2ssIChzcmMpLm1hc2ssIE1BWF9BUElDUykKKworI2RlZmluZSBwaHlzaWRzX2VtcHR5KG1hcCkJCQkJCVwKKwliaXRtYXBfZW1wdHkoKG1hcCkubWFzaywgTUFYX0FQSUNTKQorCisjZGVmaW5lIHBoeXNpZHNfZXF1YWwobWFwMSwgbWFwMikJCQkJXAorCWJpdG1hcF9lcXVhbCgobWFwMSkubWFzaywgKG1hcDIpLm1hc2ssIE1BWF9BUElDUykKKworI2RlZmluZSBwaHlzaWRzX3dlaWdodChtYXApCQkJCQlcCisJYml0bWFwX3dlaWdodCgobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCisKKyNkZWZpbmUgcGh5c2lkc19zaGlmdF9yaWdodChkLCBzLCBuKQkJCQlcCisJYml0bWFwX3NoaWZ0X3JpZ2h0KChkKS5tYXNrLCAocykubWFzaywgbiwgTUFYX0FQSUNTKQorCisjZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKQkJCQlcCisJYml0bWFwX3NoaWZ0X2xlZnQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfQVBJQ1MpCisKKyNkZWZpbmUgcGh5c2lkc19jb2VyY2UobWFwKQkJCSgobWFwKS5tYXNrWzBdKQorCisjZGVmaW5lIHBoeXNpZHNfcHJvbW90ZShwaHlzaWRzKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQlcCisJCV9fcGh5c2lkX21hc2subWFza1swXSA9IHBoeXNpZHM7CQkJXAorCQlfX3BoeXNpZF9tYXNrOwkJCQkJCVwKKwl9KQorCisvKiBOb3RlOiB3aWxsIGNyZWF0ZSB2ZXJ5IGxhcmdlIHN0YWNrIGZyYW1lcyBpZiBwaHlzaWRfbWFza190IGlzIGJpZyAqLworI2RlZmluZSBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c2lkKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQlcCisJCXBoeXNpZF9zZXQocGh5c2lkLCBfX3BoeXNpZF9tYXNrKTsJCQlcCisJCV9fcGh5c2lkX21hc2s7CQkJCQkJXAorCX0pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGludCBwaHlzaWQsIHBoeXNpZF9tYXNrX3QgKm1hcCkKK3sKKwlwaHlzaWRzX2NsZWFyKCptYXApOworCXBoeXNpZF9zZXQocGh5c2lkLCAqbWFwKTsKK30KKworI2RlZmluZSBQSFlTSURfTUFTS19BTEwJCXsge1swIC4uLiBQSFlTSURfQVJSQVlfU0laRS0xXSA9IH4wVUx9IH0KKyNkZWZpbmUgUEhZU0lEX01BU0tfTk9ORQl7IHtbMCAuLi4gUEhZU0lEX0FSUkFZX1NJWkUtMV0gPSAwVUx9IH0KKworZXh0ZXJuIHBoeXNpZF9tYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NUFNQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjX2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWNlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWNfZGVmLmgKQEAgLTAsMCArMSwxODAgQEAKKyNpZm5kZWYgX0FTTV9YODZfTVBTUEVDX0RFRl9ICisjZGVmaW5lIF9BU01fWDg2X01QU1BFQ19ERUZfSAorCisvKgorICogU3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBTTVAgbWFjaGluZXMgZm9sbG93aW5nIHRoZQorICogSW50ZWwgTXVsdGlwcm9jZXNzaW5nIFNwZWNpZmljYXRpb24gMS4xIGFuZCAxLjQuCisgKi8KKworLyoKKyAqIFRoaXMgdGFnIGlkZW50aWZpZXMgd2hlcmUgdGhlIFNNUCBjb25maWd1cmF0aW9uCisgKiBpbmZvcm1hdGlvbiBpcy4KKyAqLworCisjZGVmaW5lIFNNUF9NQUdJQ19JREVOVAkoKCdfJzw8MjQpIHwgKCdQJzw8MTYpIHwgKCdNJzw8OCkgfCAnXycpCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBNQVhfTVBDX0VOVFJZIDEwMjQKKyMgZGVmaW5lIE1BWF9BUElDUyAgICAgIDI1NgorI2Vsc2UKKyMgaWYgTlJfQ1BVUyA8PSAyNTUKKyMgIGRlZmluZSBNQVhfQVBJQ1MgICAgIDI1NQorIyBlbHNlCisjICBkZWZpbmUgTUFYX0FQSUNTICAgMzI3NjgKKyMgZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgeworCWNoYXIgbXBmX3NpZ25hdHVyZVs0XTsJCS8qICJfTVBfIgkJCSovCisJdW5zaWduZWQgaW50IG1wZl9waHlzcHRyOwkvKiBDb25maWd1cmF0aW9uIHRhYmxlIGFkZHJlc3MJKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9sZW5ndGg7CS8qIE91ciBsZW5ndGggKHBhcmFncmFwaHMpCSovCisJdW5zaWduZWQgY2hhciBtcGZfc3BlY2lmaWNhdGlvbjsvKiBTcGVjaWZpY2F0aW9uIHZlcnNpb24JKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9jaGVja3N1bTsJLyogQ2hlY2tzdW0gKG1ha2VzIHN1bSAwKQkqLworCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmUxOwkvKiBTdGFuZGFyZCBvciBjb25maWd1cmF0aW9uID8JKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMjsJLyogQml0NyBzZXQgZm9yIElNQ1J8UElDCSovCisJdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTM7CS8qIFVudXNlZCAoMCkJCQkqLworCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmU0OwkvKiBVbnVzZWQgKDApCQkJKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlNTsJLyogVW51c2VkICgwKQkJCSovCit9OworCisjZGVmaW5lIE1QQ19TSUdOQVRVUkUgIlBDTVAiCisKK3N0cnVjdCBtcF9jb25maWdfdGFibGUgeworCWNoYXIgbXBjX3NpZ25hdHVyZVs0XTsKKwl1bnNpZ25lZCBzaG9ydCBtcGNfbGVuZ3RoOwkvKiBTaXplIG9mIHRhYmxlICovCisJY2hhciBtcGNfc3BlYzsJCQkvKiAweDAxICovCisJY2hhciBtcGNfY2hlY2tzdW07CisJY2hhciBtcGNfb2VtWzhdOworCWNoYXIgbXBjX3Byb2R1Y3RpZFsxMl07CisJdW5zaWduZWQgaW50IG1wY19vZW1wdHI7CS8qIDAgaWYgbm90IHByZXNlbnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBtcGNfb2Vtc2l6ZTsJLyogMCBpZiBub3QgcHJlc2VudCAqLworCXVuc2lnbmVkIHNob3J0IG1wY19vZW1jb3VudDsKKwl1bnNpZ25lZCBpbnQgbXBjX2xhcGljOwkvKiBBUElDIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ7Cit9OworCisvKiBGb2xsb3dlZCBieSBlbnRyaWVzICovCisKKyNkZWZpbmUJTVBfUFJPQ0VTU09SCQkwCisjZGVmaW5lCU1QX0JVUwkJCTEKKyNkZWZpbmUJTVBfSU9BUElDCQkyCisjZGVmaW5lCU1QX0lOVFNSQwkJMworI2RlZmluZQlNUF9MSU5UU1JDCQk0CisvKiBVc2VkIGJ5IElCTSBOVU1BLVEgdG8gZGVzY3JpYmUgbm9kZSBsb2NhbGl0eSAqLworI2RlZmluZQlNUF9UUkFOU0xBVElPTgkJMTkyCisKKyNkZWZpbmUgQ1BVX0VOQUJMRUQJCTEJLyogUHJvY2Vzc29yIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBDUFVfQk9PVFBST0NFU1NPUgkyCS8qIFByb2Nlc3NvciBpcyB0aGUgQlAgKi8KKworI2RlZmluZSBDUFVfU1RFUFBJTkdfTUFTSwkweDAwMEYKKyNkZWZpbmUgQ1BVX01PREVMX01BU0sJCTB4MDBGMAorI2RlZmluZSBDUFVfRkFNSUxZX01BU0sJCTB4MEYwMAorCitzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgeworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOwkvKiBMb2NhbCBBUElDIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CS8qIEl0cyB2ZXJzaW9ucyAqLworCXVuc2lnbmVkIGNoYXIgbXBjX2NwdWZsYWc7CisJdW5zaWduZWQgaW50IG1wY19jcHVmZWF0dXJlOworCXVuc2lnbmVkIGludCBtcGNfZmVhdHVyZWZsYWc7CS8qIENQVUlEIGZlYXR1cmUgdmFsdWUgKi8KKwl1bnNpZ25lZCBpbnQgbXBjX3Jlc2VydmVkWzJdOworfTsKKworc3RydWN0IG1wY19jb25maWdfYnVzIHsKKwl1bnNpZ25lZCBjaGFyIG1wY190eXBlOworCXVuc2lnbmVkIGNoYXIgbXBjX2J1c2lkOworCXVuc2lnbmVkIGNoYXIgbXBjX2J1c3R5cGVbNl07Cit9OworCisvKiBMaXN0IG9mIEJ1cyBUeXBlIHN0cmluZyB2YWx1ZXMsIEludGVsIE1QIFNwZWMuICovCisjZGVmaW5lIEJVU1RZUEVfRUlTQQkiRUlTQSIKKyNkZWZpbmUgQlVTVFlQRV9JU0EJIklTQSIKKyNkZWZpbmUgQlVTVFlQRV9JTlRFUk4JIklOVEVSTiIJLyogSW50ZXJuYWwgQlVTICovCisjZGVmaW5lIEJVU1RZUEVfTUNBCSJNQ0EiCisjZGVmaW5lIEJVU1RZUEVfVkwJIlZMIgkJLyogTG9jYWwgYnVzICovCisjZGVmaW5lIEJVU1RZUEVfUENJCSJQQ0kiCisjZGVmaW5lIEJVU1RZUEVfUENNQ0lBCSJQQ01DSUEiCisjZGVmaW5lIEJVU1RZUEVfQ0JVUwkiQ0JVUyIKKyNkZWZpbmUgQlVTVFlQRV9DQlVTSUkJIkNCVVNJSSIKKyNkZWZpbmUgQlVTVFlQRV9GVVRVUkUJIkZVVFVSRSIKKyNkZWZpbmUgQlVTVFlQRV9NQkkJIk1CSSIKKyNkZWZpbmUgQlVTVFlQRV9NQklJCSJNQklJIgorI2RlZmluZSBCVVNUWVBFX01QSQkiTVBJIgorI2RlZmluZSBCVVNUWVBFX01QU0EJIk1QU0EiCisjZGVmaW5lIEJVU1RZUEVfTlVCVVMJIk5VQlVTIgorI2RlZmluZSBCVVNUWVBFX1RDCSJUQyIKKyNkZWZpbmUgQlVTVFlQRV9WTUUJIlZNRSIKKyNkZWZpbmUgQlVTVFlQRV9YUFJFU1MJIlhQUkVTUyIKKworI2RlZmluZSBNUENfQVBJQ19VU0FCTEUJCTB4MDEKKworc3RydWN0IG1wY19jb25maWdfaW9hcGljIHsKKwl1bnNpZ25lZCBjaGFyIG1wY190eXBlOworCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWNpZDsKKwl1bnNpZ25lZCBjaGFyIG1wY19hcGljdmVyOworCXVuc2lnbmVkIGNoYXIgbXBjX2ZsYWdzOworCXVuc2lnbmVkIGludCBtcGNfYXBpY2FkZHI7Cit9OworCitzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgeworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBtcGNfaXJxZmxhZzsKKwl1bnNpZ25lZCBjaGFyIG1wY19zcmNidXM7CisJdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaXJxOworCXVuc2lnbmVkIGNoYXIgbXBjX2RzdGFwaWM7CisJdW5zaWduZWQgY2hhciBtcGNfZHN0aXJxOworfTsKKworZW51bSBtcF9pcnFfc291cmNlX3R5cGVzIHsKKwltcF9JTlQgPSAwLAorCW1wX05NSSA9IDEsCisJbXBfU01JID0gMiwKKwltcF9FeHRJTlQgPSAzCit9OworCisjZGVmaW5lIE1QX0lSUURJUl9ERUZBVUxUCTAKKyNkZWZpbmUgTVBfSVJRRElSX0hJR0gJCTEKKyNkZWZpbmUgTVBfSVJRRElSX0xPVwkJMworCisjZGVmaW5lIE1QX0FQSUNfQUxMCTB4RkYKKworc3RydWN0IG1wY19jb25maWdfbGludHNyYyB7CisJdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIG1wY19pcnF0eXBlOworCXVuc2lnbmVkIHNob3J0IG1wY19pcnFmbGFnOworCXVuc2lnbmVkIGNoYXIgbXBjX3NyY2J1c2lkOworCXVuc2lnbmVkIGNoYXIgbXBjX3NyY2J1c2lycTsKKwl1bnNpZ25lZCBjaGFyIG1wY19kZXN0YXBpYzsKKwl1bnNpZ25lZCBjaGFyIG1wY19kZXN0YXBpY2xpbnQ7Cit9OworCisjZGVmaW5lIE1QQ19PRU1fU0lHTkFUVVJFICJfT0VNIgorCitzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlIHsKKwljaGFyIG9lbV9zaWduYXR1cmVbNF07CisJdW5zaWduZWQgc2hvcnQgb2VtX2xlbmd0aDsJLyogU2l6ZSBvZiB0YWJsZSAqLworCWNoYXIgIG9lbV9yZXY7CQkJLyogMHgwMSAqLworCWNoYXIgIG9lbV9jaGVja3N1bTsKKwljaGFyICBtcGNfb2VtWzhdOworfTsKKworLyoKKyAqCURlZmF1bHQgY29uZmlndXJhdGlvbnMKKyAqCisgKgkxCTIgQ1BVIElTQSA4MjQ4OURYCisgKgkyCTIgQ1BVIEVJU0EgODI0ODlEWCBuZWl0aGVyIElSUSAwIHRpbWVyIG5vciBJUlEgMTMgRE1BIGNoYWluaW5nCisgKgkzCTIgQ1BVIEVJU0EgODI0ODlEWAorICoJNAkyIENQVSBNQ0EgODI0ODlEWAorICoJNQkyIENQVSBJU0ErUENJCisgKgk2CTIgQ1BVIEVJU0ErUENJCisgKgk3CTIgQ1BVIE1DQStQQ0kKKyAqLworCitlbnVtIG1wX2J1c3R5cGUgeworCU1QX0JVU19JU0EgPSAxLAorCU1QX0JVU19FSVNBLAorCU1QX0JVU19QQ0ksCisJTVBfQlVTX01DQSwKK307CisjZW5kaWYgLyogX0FTTV9YODZfTVBTUEVDX0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2didWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNGU5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2didWYuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIF9BU01fWDg2X01TR0JVRl9ICisjZGVmaW5lIF9BU01fWDg2X01TR0JVRl9ICisKKy8qCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGkzODYgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2Ugb24gaTM4NiBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKgorICogUGFkIHNwYWNlIG9uIHg4NjY0IGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCitzdHJ1Y3QgbXNxaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworI2lmZGVmIF9faTM4Nl9fCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisjZW5kaWYKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisjaWZkZWYgX19pMzg2X18KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKyNlbmRpZgorCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKyNpZmRlZiBfX2kzODZfXworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworI2VuZGlmCisJdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NU0dCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2lkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzA2YjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9NU0lERUZfSAorI2RlZmluZSBfQVNNX1g4Nl9NU0lERUZfSAorCisvKgorICogQ29uc3RhbnRzIGZvciBJbnRlbCBBUElDIGJhc2VkIE1TSSBtZXNzYWdlcy4KKyAqLworCisvKgorICogU2hpZnRzIGZvciBNU0kgZGF0YQorICovCisKKyNkZWZpbmUgTVNJX0RBVEFfVkVDVE9SX1NISUZUCQkwCisjZGVmaW5lICBNU0lfREFUQV9WRUNUT1JfTUFTSwkJMHgwMDAwMDBmZgorI2RlZmluZQkgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpICYgXAorCQkJCQkgTVNJX0RBVEFfVkVDVE9SX01BU0spCisKKyNkZWZpbmUgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVAk4CisjZGVmaW5lICBNU0lfREFUQV9ERUxJVkVSWV9GSVhFRAkoMCA8PCBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUKQorI2RlZmluZSAgTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJCSgxIDw8IE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQpCisKKyNkZWZpbmUgTVNJX0RBVEFfTEVWRUxfU0hJRlQJCTE0CisjZGVmaW5lCSBNU0lfREFUQV9MRVZFTF9ERUFTU0VSVAkoMCA8PCBNU0lfREFUQV9MRVZFTF9TSElGVCkKKyNkZWZpbmUJIE1TSV9EQVRBX0xFVkVMX0FTU0VSVAkJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCisKKyNkZWZpbmUgTVNJX0RBVEFfVFJJR0dFUl9TSElGVAkJMTUKKyNkZWZpbmUgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkJKDAgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKyNkZWZpbmUgIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwJCSgxIDw8IE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQpCisKKy8qCisgKiBTaGlmdC9tYXNrIGZpZWxkcyBmb3IgbXNpIGFkZHJlc3MKKyAqLworCisjZGVmaW5lIE1TSV9BRERSX0JBU0VfSEkJCTAKKyNkZWZpbmUgTVNJX0FERFJfQkFTRV9MTwkJMHhmZWUwMDAwMAorCisjZGVmaW5lIE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVAkyCisjZGVmaW5lICBNU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUwJKDAgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQorI2RlZmluZQkgTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwJKDEgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQorCisjZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKKyNkZWZpbmUgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKwkJCQkJLyogZGVkaWNhdGVkIGNwdSAqLworI2RlZmluZSAgTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJCSgxIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQorCQkJCQkvKiBsb3dlc3QgcHJpb3JpdHkgKi8KKworI2RlZmluZSBNU0lfQUREUl9ERVNUX0lEX1NISUZUCQkxMgorI2RlZmluZQkgTVNJX0FERFJfREVTVF9JRF9NQVNLCQkweDAwZmZmZjAKKyNkZWZpbmUgIE1TSV9BRERSX0RFU1RfSUQoZGVzdCkJCSgoKGRlc3QpIDw8IE1TSV9BRERSX0RFU1RfSURfU0hJRlQpICYgXAorCQkJCQkgTVNJX0FERFJfREVTVF9JRF9NQVNLKQorCisjZGVmaW5lIE1TSV9BRERSX0lSX0VYVF9JTlQJCSgxIDw8IDQpCisjZGVmaW5lIE1TSV9BRERSX0lSX1NIVgkJCSgxIDw8IDMpCisjZGVmaW5lIE1TSV9BRERSX0lSX0lOREVYMShpbmRleCkJKChpbmRleCAmIDB4ODAwMCkgPj4gMTMpCisjZGVmaW5lIE1TSV9BRERSX0lSX0lOREVYMihpbmRleCkJKChpbmRleCAmIDB4N2ZmZikgPDwgNSkKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NU0lERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg4NTlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTAsMCArMSwzMzIgQEAKKyNpZm5kZWYgX0FTTV9YODZfTVNSX0lOREVYX0gKKyNkZWZpbmUgX0FTTV9YODZfTVNSX0lOREVYX0gKKworLyogQ1BVIG1vZGVsIHNwZWNpZmljIHJlZ2lzdGVyIChNU1IpIG51bWJlcnMgKi8KKworLyogeDg2LTY0IHNwZWNpZmljIE1TUnMgKi8KKyNkZWZpbmUgTVNSX0VGRVIJCTB4YzAwMDAwODAgLyogZXh0ZW5kZWQgZmVhdHVyZSByZWdpc3RlciAqLworI2RlZmluZSBNU1JfU1RBUgkJMHhjMDAwMDA4MSAvKiBsZWdhY3kgbW9kZSBTWVNDQUxMIHRhcmdldCAqLworI2RlZmluZSBNU1JfTFNUQVIJCTB4YzAwMDAwODIgLyogbG9uZyBtb2RlIFNZU0NBTEwgdGFyZ2V0ICovCisjZGVmaW5lIE1TUl9DU1RBUgkJMHhjMDAwMDA4MyAvKiBjb21wYXQgbW9kZSBTWVNDQUxMIHRhcmdldCAqLworI2RlZmluZSBNU1JfU1lTQ0FMTF9NQVNLCTB4YzAwMDAwODQgLyogRUZMQUdTIG1hc2sgZm9yIHN5c2NhbGwgKi8KKyNkZWZpbmUgTVNSX0ZTX0JBU0UJCTB4YzAwMDAxMDAgLyogNjRiaXQgRlMgYmFzZSAqLworI2RlZmluZSBNU1JfR1NfQkFTRQkJMHhjMDAwMDEwMSAvKiA2NGJpdCBHUyBiYXNlICovCisjZGVmaW5lIE1TUl9LRVJORUxfR1NfQkFTRQkweGMwMDAwMTAyIC8qIFN3YXBHUyBHUyBzaGFkb3cgKi8KKworLyogRUZFUiBiaXRzOiAqLworI2RlZmluZSBfRUZFUl9TQ0UJCTAgIC8qIFNZU0NBTEwvU1lTUkVUICovCisjZGVmaW5lIF9FRkVSX0xNRQkJOCAgLyogTG9uZyBtb2RlIGVuYWJsZSAqLworI2RlZmluZSBfRUZFUl9MTUEJCTEwIC8qIExvbmcgbW9kZSBhY3RpdmUgKHJlYWQtb25seSkgKi8KKyNkZWZpbmUgX0VGRVJfTlgJCTExIC8qIE5vIGV4ZWN1dGUgZW5hYmxlICovCisKKyNkZWZpbmUgRUZFUl9TQ0UJCSgxPDxfRUZFUl9TQ0UpCisjZGVmaW5lIEVGRVJfTE1FCQkoMTw8X0VGRVJfTE1FKQorI2RlZmluZSBFRkVSX0xNQQkJKDE8PF9FRkVSX0xNQSkKKyNkZWZpbmUgRUZFUl9OWAkJCSgxPDxfRUZFUl9OWCkKKworLyogSW50ZWwgTVNScy4gU29tZSBhbHNvIGF2YWlsYWJsZSBvbiBvdGhlciBDUFVzICovCisjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIwCQkweDAwMDAwMGMxCisjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxCQkweDAwMDAwMGMyCisjZGVmaW5lIE1TUl9GU0JfRlJFUQkJCTB4MDAwMDAwY2QKKworI2RlZmluZSBNU1JfTVRSUmNhcAkJCTB4MDAwMDAwZmUKKyNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NUTAkJMHgwMDAwMDExOQorCisjZGVmaW5lIE1TUl9JQTMyX1NZU0VOVEVSX0NTCQkweDAwMDAwMTc0CisjZGVmaW5lIE1TUl9JQTMyX1NZU0VOVEVSX0VTUAkJMHgwMDAwMDE3NQorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9FSVAJCTB4MDAwMDAxNzYKKworI2RlZmluZSBNU1JfSUEzMl9NQ0dfQ0FQCQkweDAwMDAwMTc5CisjZGVmaW5lIE1TUl9JQTMyX01DR19TVEFUVVMJCTB4MDAwMDAxN2EKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0NUTAkJMHgwMDAwMDE3YgorCisjZGVmaW5lIE1TUl9JQTMyX1BFQlNfRU5BQkxFCQkweDAwMDAwM2YxCisjZGVmaW5lIE1TUl9JQTMyX0RTX0FSRUEJCTB4MDAwMDA2MDAKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMJMHgwMDAwMDM0NQorCisjZGVmaW5lIE1TUl9NVFJSZml4NjRLXzAwMDAwCQkweDAwMDAwMjUwCisjZGVmaW5lIE1TUl9NVFJSZml4MTZLXzgwMDAwCQkweDAwMDAwMjU4CisjZGVmaW5lIE1TUl9NVFJSZml4MTZLX0EwMDAwCQkweDAwMDAwMjU5CisjZGVmaW5lIE1TUl9NVFJSZml4NEtfQzAwMDAJCTB4MDAwMDAyNjgKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19DODAwMAkJMHgwMDAwMDI2OQorI2RlZmluZSBNU1JfTVRSUmZpeDRLX0QwMDAwCQkweDAwMDAwMjZhCisjZGVmaW5lIE1TUl9NVFJSZml4NEtfRDgwMDAJCTB4MDAwMDAyNmIKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19FMDAwMAkJMHgwMDAwMDI2YworI2RlZmluZSBNU1JfTVRSUmZpeDRLX0U4MDAwCQkweDAwMDAwMjZkCisjZGVmaW5lIE1TUl9NVFJSZml4NEtfRjAwMDAJCTB4MDAwMDAyNmUKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19GODAwMAkJMHgwMDAwMDI2ZgorI2RlZmluZSBNU1JfTVRSUmRlZlR5cGUJCQkweDAwMDAwMmZmCisKKyNkZWZpbmUgTVNSX0lBMzJfQ1JfUEFUCQkJMHgwMDAwMDI3NworCisjZGVmaW5lIE1TUl9JQTMyX0RFQlVHQ1RMTVNSCQkweDAwMDAwMWQ5CisjZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hGUk9NSVAJMHgwMDAwMDFkYgorI2RlZmluZSBNU1JfSUEzMl9MQVNUQlJBTkNIVE9JUAkJMHgwMDAwMDFkYworI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQCQkweDAwMDAwMWRkCisjZGVmaW5lIE1TUl9JQTMyX0xBU1RJTlRUT0lQCQkweDAwMDAwMWRlCisKKy8qIERFQlVHQ1RMTVNSIGJpdHMgKG90aGVycyB2YXJ5IGJ5IG1vZGVsKTogKi8KKyNkZWZpbmUgX0RFQlVHQ1RMTVNSX0xCUgkwIC8qIGxhc3QgYnJhbmNoIHJlY29yZGluZyAqLworI2RlZmluZSBfREVCVUdDVExNU1JfQlRGCTEgLyogc2luZ2xlLXN0ZXAgb24gYnJhbmNoZXMgKi8KKworI2RlZmluZSBERUJVR0NUTE1TUl9MQlIJCSgxVUwgPDwgX0RFQlVHQ1RMTVNSX0xCUikKKyNkZWZpbmUgREVCVUdDVExNU1JfQlRGCQkoMVVMIDw8IF9ERUJVR0NUTE1TUl9CVEYpCisKKyNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTAkJMHgwMDAwMDQwMAorI2RlZmluZSBNU1JfSUEzMl9NQzBfU1RBVFVTCQkweDAwMDAwNDAxCisjZGVmaW5lIE1TUl9JQTMyX01DMF9BRERSCQkweDAwMDAwNDAyCisjZGVmaW5lIE1TUl9JQTMyX01DMF9NSVNDCQkweDAwMDAwNDAzCisKKyNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHgwMDAwMDBjMQorI2RlZmluZSBNU1JfUDZfUEVSRkNUUjEJCQkweDAwMDAwMGMyCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MDAwMDAxODYKKyNkZWZpbmUgTVNSX1A2X0VWTlRTRUwxCQkJMHgwMDAwMDE4NworCisvKiBBTUQ2NCBNU1JzLiBOb3QgY29tcGxldGUuIFNlZSB0aGUgYXJjaGl0ZWN0dXJlIG1hbnVhbCBmb3IgYSBtb3JlCisgICBjb21wbGV0ZSBsaXN0LiAqLworCisjZGVmaW5lIE1TUl9BTUQ2NF9OQl9DRkcJCTB4YzAwMTAwMWYKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIQ1RMCQkweGMwMDExMDMwCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSExJTkFECQkweGMwMDExMDMxCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSFBIWVNBRAkweGMwMDExMDMyCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUENUTAkJMHhjMDAxMTAzMworI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BSSVAJCTB4YzAwMTEwMzQKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU09QREFUQQkJMHhjMDAxMTAzNQorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBMgkJMHhjMDAxMTAzNgorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBMwkJMHhjMDAxMTAzNworI2RlZmluZSBNU1JfQU1ENjRfSUJTRENMSU5BRAkJMHhjMDAxMTAzOAorI2RlZmluZSBNU1JfQU1ENjRfSUJTRENQSFlTQUQJCTB4YzAwMTEwMzkKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0NUTAkJMHhjMDAxMTAzYQorCisvKiBGYW0gMTBoIE1TUnMgKi8KKyNkZWZpbmUgTVNSX0ZBTTEwSF9NTUlPX0NPTkZfQkFTRQkweGMwMDEwMDU4CisjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfRU5BQkxFCQkoMTw8MCkKKyNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9NQVNLCTB4ZgorI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0JVU1JBTkdFX1NISUZUIDIKKyNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CQVNFX01BU0sJMHhmZmZmZmZmCisjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQkFTRV9TSElGVAkyMAorCisvKiBLOCBNU1JzICovCisjZGVmaW5lIE1TUl9LOF9UT1BfTUVNMQkJCTB4YzAwMTAwMWEKKyNkZWZpbmUgTVNSX0s4X1RPUF9NRU0yCQkJMHhjMDAxMDAxZAorI2RlZmluZSBNU1JfSzhfU1lTQ0ZHCQkJMHhjMDAxMDAxMAorI2RlZmluZSBNU1JfSzhfSFdDUgkJCTB4YzAwMTAwMTUKKyNkZWZpbmUgTVNSX0s4X0lOVF9QRU5ESU5HX01TRwkJMHhjMDAxMDA1NQorLyogQzFFIGFjdGl2ZSBiaXRzIGluIGludCBwZW5kaW5nIG1lc3NhZ2UgKi8KKyNkZWZpbmUgSzhfSU5UUF9DMUVfQUNUSVZFX01BU0sJCTB4MTgwMDAwMDAKKyNkZWZpbmUgTVNSX0s4X1RTRUdfQUREUgkJMHhjMDAxMDExMgorI2RlZmluZSBLOF9NVFJSRklYUkFOR0VfRFJBTV9FTkFCTEUJMHgwMDA0MDAwMCAvKiBNdHJyRml4RHJhbUVuIGJpdCAgICAqLworI2RlZmluZSBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlkJMHgwMDA4MDAwMCAvKiBNdHJyRml4RHJhbU1vZEVuIGJpdCAqLworI2RlZmluZSBLOF9NVFJSX1JETUVNX1dSTUVNX01BU0sJMHgxODE4MTgxOCAvKiBNYXNrOiBSZE1lbXxXck1lbSAgICAqLworCisvKiBLNyBNU1JzICovCisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMAkJCTB4YzAwMTAwMDAKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIwCQkJMHhjMDAxMDAwNAorI2RlZmluZSBNU1JfSzdfRVZOVFNFTDEJCQkweGMwMDEwMDAxCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMQkJCTB4YzAwMTAwMDUKKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyCQkJMHhjMDAxMDAwMgorI2RlZmluZSBNU1JfSzdfUEVSRkNUUjIJCQkweGMwMDEwMDA2CisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMwkJCTB4YzAwMTAwMDMKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIzCQkJMHhjMDAxMDAwNworI2RlZmluZSBNU1JfSzdfQ0xLX0NUTAkJCTB4YzAwMTAwMWIKKyNkZWZpbmUgTVNSX0s3X0hXQ1IJCQkweGMwMDEwMDE1CisjZGVmaW5lIE1TUl9LN19GSURfVklEX0NUTAkJMHhjMDAxMDA0MQorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9TVEFUVVMJCTB4YzAwMTAwNDIKKworLyogSzYgTVNScyAqLworI2RlZmluZSBNU1JfSzZfRUZFUgkJCTB4YzAwMDAwODAKKyNkZWZpbmUgTVNSX0s2X1NUQVIJCQkweGMwMDAwMDgxCisjZGVmaW5lIE1TUl9LNl9XSENSCQkJMHhjMDAwMDA4MgorI2RlZmluZSBNU1JfSzZfVVdDQ1IJCQkweGMwMDAwMDg1CisjZGVmaW5lIE1TUl9LNl9FUE1SCQkJMHhjMDAwMDA4NgorI2RlZmluZSBNU1JfSzZfUFNPUgkJCTB4YzAwMDAwODcKKyNkZWZpbmUgTVNSX0s2X1BGSVIJCQkweGMwMDAwMDg4CisKKy8qIENlbnRhdXItSGF1bHMvSURUIGRlZmluZWQgTVNScy4gKi8KKyNkZWZpbmUgTVNSX0lEVF9GQ1IxCQkJMHgwMDAwMDEwNworI2RlZmluZSBNU1JfSURUX0ZDUjIJCQkweDAwMDAwMTA4CisjZGVmaW5lIE1TUl9JRFRfRkNSMwkJCTB4MDAwMDAxMDkKKyNkZWZpbmUgTVNSX0lEVF9GQ1I0CQkJMHgwMDAwMDEwYQorCisjZGVmaW5lIE1TUl9JRFRfTUNSMAkJCTB4MDAwMDAxMTAKKyNkZWZpbmUgTVNSX0lEVF9NQ1IxCQkJMHgwMDAwMDExMQorI2RlZmluZSBNU1JfSURUX01DUjIJCQkweDAwMDAwMTEyCisjZGVmaW5lIE1TUl9JRFRfTUNSMwkJCTB4MDAwMDAxMTMKKyNkZWZpbmUgTVNSX0lEVF9NQ1I0CQkJMHgwMDAwMDExNAorI2RlZmluZSBNU1JfSURUX01DUjUJCQkweDAwMDAwMTE1CisjZGVmaW5lIE1TUl9JRFRfTUNSNgkJCTB4MDAwMDAxMTYKKyNkZWZpbmUgTVNSX0lEVF9NQ1I3CQkJMHgwMDAwMDExNworI2RlZmluZSBNU1JfSURUX01DUl9DVFJMCQkweDAwMDAwMTIwCisKKy8qIFZJQSBDeXJpeCBkZWZpbmVkIE1TUnMqLworI2RlZmluZSBNU1JfVklBX0ZDUgkJCTB4MDAwMDExMDcKKyNkZWZpbmUgTVNSX1ZJQV9MT05HSEFVTAkJMHgwMDAwMTEwYQorI2RlZmluZSBNU1JfVklBX1JORwkJCTB4MDAwMDExMGIKKyNkZWZpbmUgTVNSX1ZJQV9CQ1IyCQkJMHgwMDAwMTE0NworCisvKiBUcmFuc21ldGEgZGVmaW5lZCBNU1JzICovCisjZGVmaW5lIE1TUl9UTVRBX0xPTkdSVU5fQ1RSTAkJMHg4MDg2ODAxMAorI2RlZmluZSBNU1JfVE1UQV9MT05HUlVOX0ZMQUdTCQkweDgwODY4MDExCisjZGVmaW5lIE1TUl9UTVRBX0xSVElfUkVBRE9VVAkJMHg4MDg2ODAxOAorI2RlZmluZSBNU1JfVE1UQV9MUlRJX1ZPTFRfTUhaCQkweDgwODY4MDFhCisKKy8qIEludGVsIGRlZmluZWQgTVNScy4gKi8KKyNkZWZpbmUgTVNSX0lBMzJfUDVfTUNfQUREUgkJMHgwMDAwMDAwMAorI2RlZmluZSBNU1JfSUEzMl9QNV9NQ19UWVBFCQkweDAwMDAwMDAxCisjZGVmaW5lIE1TUl9JQTMyX1RTQwkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTVNSX0lBMzJfUExBVEZPUk1fSUQJCTB4MDAwMDAwMTcKKyNkZWZpbmUgTVNSX0lBMzJfRUJMX0NSX1BPV0VST04JCTB4MDAwMDAwMmEKKyNkZWZpbmUgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MICAgICAgICAweDAwMDAwMDNhCisKKyNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX0xPQ0tFRAkJKDE8PDApCisjZGVmaW5lIEZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVECSgxPDwyKQorCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFCQkweDAwMDAwMDFiCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JTUAkJKDE8PDgpCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRQkoMTw8MTEpCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0UJCSgweGZmZmZmPDwxMikKKworI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9XUklURQkJMHgwMDAwMDA3OQorI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9SRVYJCTB4MDAwMDAwOGIKKworI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUwkJMHgwMDAwMDE5OAorI2RlZmluZSBNU1JfSUEzMl9QRVJGX0NUTAkJMHgwMDAwMDE5OQorCisjZGVmaW5lIE1TUl9JQTMyX01QRVJGCQkJMHgwMDAwMDBlNworI2RlZmluZSBNU1JfSUEzMl9BUEVSRgkJCTB4MDAwMDAwZTgKKworI2RlZmluZSBNU1JfSUEzMl9USEVSTV9DT05UUk9MCQkweDAwMDAwMTlhCisjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDAwMDAwMTliCisjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX1NUQVRVUwkJMHgwMDAwMDE5YworI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRQkJMHgwMDAwMDFhMAorCisvKiBJbnRlbCBNb2RlbCA2ICovCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MDAwMDAxODYKKyNkZWZpbmUgTVNSX1A2X0VWTlRTRUwxCQkJMHgwMDAwMDE4NworCisvKiBQNC9YZW9uKyBzcGVjaWZpYyAqLworI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUFYCQkweDAwMDAwMTgwCisjZGVmaW5lIE1TUl9JQTMyX01DR19FQlgJCTB4MDAwMDAxODEKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VDWAkJMHgwMDAwMDE4MgorI2RlZmluZSBNU1JfSUEzMl9NQ0dfRURYCQkweDAwMDAwMTgzCisjZGVmaW5lIE1TUl9JQTMyX01DR19FU0kJCTB4MDAwMDAxODQKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESQkJMHgwMDAwMDE4NQorI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUJQCQkweDAwMDAwMTg2CisjZGVmaW5lIE1TUl9JQTMyX01DR19FU1AJCTB4MDAwMDAxODcKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUwkJMHgwMDAwMDE4OAorI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUlQCQkweDAwMDAwMTg5CisjZGVmaW5lIE1TUl9JQTMyX01DR19SRVNFUlZFRAkJMHgwMDAwMDE4YQorCisvKiBQZW50aXVtIElWIHBlcmZvcm1hbmNlIGNvdW50ZXIgTVNScyAqLworI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwCQkweDAwMDAwMzAwCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjEJCTB4MDAwMDAzMDEKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMgkJMHgwMDAwMDMwMgorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzCQkweDAwMDAwMzAzCisjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMAkJMHgwMDAwMDMwNAorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjEJCTB4MDAwMDAzMDUKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyCQkweDAwMDAwMzA2CisjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMwkJMHgwMDAwMDMwNworI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjAJCTB4MDAwMDAzMDgKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxCQkweDAwMDAwMzA5CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMgkJMHgwMDAwMDMwYQorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjMJCTB4MDAwMDAzMGIKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwCQkweDAwMDAwMzBjCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMQkJMHgwMDAwMDMwZAorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjIJCTB4MDAwMDAzMGUKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzCQkweDAwMDAwMzBmCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNAkJMHgwMDAwMDMxMAorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjUJCTB4MDAwMDAzMTEKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMAkJMHgwMDAwMDM2MAorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IxCQkweDAwMDAwMzYxCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjIJCTB4MDAwMDAzNjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMwkJMHgwMDAwMDM2MworI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjAJCQkweDAwMDAwMzY0CisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMQkJCTB4MDAwMDAzNjUKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IyCQkJMHgwMDAwMDM2NgorI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjMJCQkweDAwMDAwMzY3CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMAkJMHgwMDAwMDM2OAorI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjEJCTB4MDAwMDAzNjkKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IyCQkweDAwMDAwMzZhCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMwkJMHgwMDAwMDM2YgorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAJCQkweDAwMDAwMzZjCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMQkJCTB4MDAwMDAzNmQKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IyCQkJMHgwMDAwMDM2ZQorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjMJCQkweDAwMDAwMzZmCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNAkJCTB4MDAwMDAzNzAKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I1CQkJMHgwMDAwMDM3MQorI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IwCQkweDAwMDAwM2NhCisjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjEJCTB4MDAwMDAzY2IKKyNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMAkJMHgwMDAwMDNiMgorI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IxCQkweDAwMDAwM2IzCisjZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjAJCTB4MDAwMDAzYTAKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMQkJMHgwMDAwMDNhMQorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwCQkweDAwMDAwM2I4CisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjEJCTB4MDAwMDAzYjkKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMgkJMHgwMDAwMDNjYworI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IzCQkweDAwMDAwM2NkCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjQJCTB4MDAwMDAzZTAKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNQkJMHgwMDAwMDNlMQorI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IwCQkweDAwMDAwM2E4CisjZGVmaW5lIE1TUl9QNF9EQUNfRVNDUjEJCTB4MDAwMDAzYTkKKyNkZWZpbmUgTVNSX1A0X0ZJUk1fRVNDUjAJCTB4MDAwMDAzYTQKKyNkZWZpbmUgTVNSX1A0X0ZJUk1fRVNDUjEJCTB4MDAwMDAzYTUKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IwCQkweDAwMDAwM2E2CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMQkJMHgwMDAwMDNhNworI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IwCQkweDAwMDAwM2EyCisjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjEJCTB4MDAwMDAzYTMKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IwCQkJMHgwMDAwMDNiYQorI2RlZmluZSBNU1JfUDRfSVFfRVNDUjEJCQkweDAwMDAwM2JiCisjZGVmaW5lIE1TUl9QNF9JU19FU0NSMAkJCTB4MDAwMDAzYjQKKyNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IxCQkJMHgwMDAwMDNiNQorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMAkJMHgwMDAwMDNiNgorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMQkJMHgwMDAwMDNiNworI2RlZmluZSBNU1JfUDRfSVhfRVNDUjAJCQkweDAwMDAwM2M4CisjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMQkJCTB4MDAwMDAzYzkKKyNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMAkJMHgwMDAwMDNhYQorI2RlZmluZSBNU1JfUDRfTU9CX0VTQ1IxCQkweDAwMDAwM2FiCisjZGVmaW5lIE1TUl9QNF9NU19FU0NSMAkJCTB4MDAwMDAzYzAKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IxCQkJMHgwMDAwMDNjMQorI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IwCQkweDAwMDAwM2FjCisjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjEJCTB4MDAwMDAzYWQKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMAkJMHgwMDAwMDNiYworI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IxCQkweDAwMDAwM2JkCisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwCQkweDAwMDAwM2FlCisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IxCQkweDAwMDAwM2FmCisjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjAJCTB4MDAwMDAzYmUKKyNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMQkJMHgwMDAwMDNiZiAvKiBndWVzczogbm90IGluIG1hbnVhbCAqLworCisjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IwCQkweDAwMDAwM2MyCisjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IxCQkweDAwMDAwM2MzCisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMAkJCTB4MDAwMDAzYzQKKyNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IxCQkJMHgwMDAwMDNjNQorI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IwCQkweDAwMDAwM2IwCisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjEJCTB4MDAwMDAzYjEKKworLyogSW50ZWwgQ29yZS1iYXNlZCBDUFUgcGVyZm9ybWFuY2UgY291bnRlcnMgKi8KKyNkZWZpbmUgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIwCTB4MDAwMDAzMDkKKyNkZWZpbmUgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIxCTB4MDAwMDAzMGEKKyNkZWZpbmUgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIyCTB4MDAwMDAzMGIKKyNkZWZpbmUgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTAkweDAwMDAwMzhkCisjZGVmaW5lIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUwkweDAwMDAwMzhlCisjZGVmaW5lIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwJMHgwMDAwMDM4ZgorI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTAkweDAwMDAwMzkwCisKKy8qIEdlb2RlIGRlZmluZWQgTVNScyAqLworI2RlZmluZSBNU1JfR0VPREVfQlVTQ09OVF9DT05GMAkJMHgwMDAwMTkwMAorCisvKiBJbnRlbCBWVCBNU1JzICovCisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9CQVNJQyAgICAgICAgICAgICAgMHgwMDAwMDQ4MAorI2RlZmluZSBNU1JfSUEzMl9WTVhfUElOQkFTRURfQ1RMUyAgICAgIDB4MDAwMDA0ODEKKyNkZWZpbmUgTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTICAgICAweDAwMDAwNDgyCisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FWElUX0NUTFMgICAgICAgICAgMHgwMDAwMDQ4MworI2RlZmluZSBNU1JfSUEzMl9WTVhfRU5UUllfQ1RMUyAgICAgICAgIDB4MDAwMDA0ODQKKyNkZWZpbmUgTVNSX0lBMzJfVk1YX01JU0MgICAgICAgICAgICAgICAweDAwMDAwNDg1CisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjBfRklYRUQwICAgICAgICAgMHgwMDAwMDQ4NgorI2RlZmluZSBNU1JfSUEzMl9WTVhfQ1IwX0ZJWEVEMSAgICAgICAgIDB4MDAwMDA0ODcKKyNkZWZpbmUgTVNSX0lBMzJfVk1YX0NSNF9GSVhFRDAgICAgICAgICAweDAwMDAwNDg4CisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjRfRklYRUQxICAgICAgICAgMHgwMDAwMDQ4OQorI2RlZmluZSBNU1JfSUEzMl9WTVhfVk1DU19FTlVNICAgICAgICAgIDB4MDAwMDA0OGEKKyNkZWZpbmUgTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMiAgICAweDAwMDAwNDhiCisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FUFRfVlBJRF9DQVAgICAgICAgMHgwMDAwMDQ4YworCisjZW5kaWYgLyogX0FTTV9YODZfTVNSX0lOREVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiZTJmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCkBAIC0wLDAgKzEsMjQ3IEBACisjaWZuZGVmIF9BU01fWDg2X01TUl9ICisjZGVmaW5lIF9BU01fWDg2X01TUl9ICisKKyNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX3RzY3AodW5zaWduZWQgaW50ICphdXgpCit7CisJdW5zaWduZWQgbG9uZyBsb3csIGhpZ2g7CisJYXNtIHZvbGF0aWxlKCIuYnl0ZSAweDBmLDB4MDEsMHhmOSIKKwkJICAgICA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpLCAiPWMiICgqYXV4KSk7CisJcmV0dXJuIGxvdyB8ICgodTY0KWhpZ2ggPDwgMzIpOworfQorCisvKgorICogaTM4NiBjYWxsaW5nIGNvbnZlbnRpb24gcmV0dXJucyA2NC1iaXQgdmFsdWUgaW4gZWR4OmVheCwgd2hpbGUKKyAqIHg4Nl82NCByZXR1cm5zIGF0IHJheC4gQWxzbywgdGhlICJBIiBjb25zdHJhaW50IGRvZXMgbm90IHJlYWxseQorICogbWVhbiByZHg6cmF4IGluIHg4Nl82NCwgc28gd2UgbmVlZCBzcGVjaWFsaXplZCBiZWhhdmlvdXIgZm9yIGVhY2gKKyAqIGFyY2hpdGVjdHVyZQorICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBERUNMQVJFX0FSR1ModmFsLCBsb3csIGhpZ2gpCXVuc2lnbmVkIGxvdywgaGlnaAorI2RlZmluZSBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCkJKChsb3cpIHwgKCh1NjQpKGhpZ2gpIDw8IDMyKSkKKyNkZWZpbmUgRUFYX0VEWF9BUkdTKHZhbCwgbG93LCBoaWdoKQkiYSIgKGxvdyksICJkIiAoaGlnaCkKKyNkZWZpbmUgRUFYX0VEWF9SRVQodmFsLCBsb3csIGhpZ2gpCSI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpCisjZWxzZQorI2RlZmluZSBERUNMQVJFX0FSR1ModmFsLCBsb3csIGhpZ2gpCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwKKyNkZWZpbmUgRUFYX0VEWF9WQUwodmFsLCBsb3csIGhpZ2gpCSh2YWwpCisjZGVmaW5lIEVBWF9FRFhfQVJHUyh2YWwsIGxvdywgaGlnaCkJIkEiICh2YWwpCisjZGVmaW5lIEVBWF9FRFhfUkVUKHZhbCwgbG93LCBoaWdoKQkiPUEiICh2YWwpCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3JlYWRfbXNyKHVuc2lnbmVkIGludCBtc3IpCit7CisJREVDTEFSRV9BUkdTKHZhbCwgbG93LCBoaWdoKTsKKworCWFzbSB2b2xhdGlsZSgicmRtc3IiIDogRUFYX0VEWF9SRVQodmFsLCBsb3csIGhpZ2gpIDogImMiIChtc3IpKTsKKwlyZXR1cm4gRUFYX0VEWF9WQUwodmFsLCBsb3csIGhpZ2gpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF9tc3Jfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLAorCQkJCQkJICAgICAgaW50ICplcnIpCit7CisJREVDTEFSRV9BUkdTKHZhbCwgbG93LCBoaWdoKTsKKworCWFzbSB2b2xhdGlsZSgiMjogcmRtc3IgOyB4b3IgJVtlcnJdLCVbZXJyXVxuIgorCQkgICAgICIxOlxuXHQiCisJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcblx0IgorCQkgICAgICIzOiAgbW92ICVbZmF1bHRdLCVbZXJyXSA7IGptcCAxYlxuXHQiCisJCSAgICAgIi5wcmV2aW91c1xuXHQiCisJCSAgICAgX0FTTV9FWFRBQkxFKDJiLCAzYikKKwkJICAgICA6IFtlcnJdICI9ciIgKCplcnIpLCBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkKKwkJICAgICA6ICJjIiAobXNyKSwgW2ZhdWx0XSAiaSIgKC1FRkFVTFQpKTsKKwlyZXR1cm4gRUFYX0VEWF9WQUwodmFsLCBsb3csIGhpZ2gpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF9tc3JfYW1kX3NhZmUodW5zaWduZWQgaW50IG1zciwKKwkJCQkJCSAgICAgIGludCAqZXJyKQoreworCURFQ0xBUkVfQVJHUyh2YWwsIGxvdywgaGlnaCk7CisKKwlhc20gdm9sYXRpbGUoIjI6IHJkbXNyIDsgeG9yICUwLCUwXG4iCisJCSAgICAgIjE6XG5cdCIKKwkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuXHQiCisJCSAgICAgIjM6ICBtb3YgJTMsJTAgOyBqbXAgMWJcblx0IgorCQkgICAgICIucHJldmlvdXNcblx0IgorCQkgICAgIF9BU01fRVhUQUJMRSgyYiwgM2IpCisJCSAgICAgOiAiPXIiICgqZXJyKSwgRUFYX0VEWF9SRVQodmFsLCBsb3csIGhpZ2gpCisJCSAgICAgOiAiYyIgKG1zciksICJEIiAoMHg5YzVhMjAzYSksICJpIiAoLUVGQVVMVCkpOworCXJldHVybiBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfbXNyKHVuc2lnbmVkIGludCBtc3IsCisJCQkJICAgIHVuc2lnbmVkIGxvdywgdW5zaWduZWQgaGlnaCkKK3sKKwlhc20gdm9sYXRpbGUoIndybXNyIiA6IDogImMiIChtc3IpLCAiYSIobG93KSwgImQiIChoaWdoKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmF0aXZlX3dyaXRlX21zcl9zYWZlKHVuc2lnbmVkIGludCBtc3IsCisJCQkJCXVuc2lnbmVkIGxvdywgdW5zaWduZWQgaGlnaCkKK3sKKwlpbnQgZXJyOworCWFzbSB2b2xhdGlsZSgiMjogd3Jtc3IgOyB4b3IgJVtlcnJdLCVbZXJyXVxuIgorCQkgICAgICIxOlxuXHQiCisJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcblx0IgorCQkgICAgICIzOiAgbW92ICVbZmF1bHRdLCVbZXJyXSA7IGptcCAxYlxuXHQiCisJCSAgICAgIi5wcmV2aW91c1xuXHQiCisJCSAgICAgX0FTTV9FWFRBQkxFKDJiLCAzYikKKwkJICAgICA6IFtlcnJdICI9YSIgKGVycikKKwkJICAgICA6ICJjIiAobXNyKSwgIjAiIChsb3cpLCAiZCIgKGhpZ2gpLAorCQkgICAgICAgW2ZhdWx0XSAiaSIgKC1FRkFVTFQpCisJCSAgICAgOiAibWVtb3J5Iik7CisJcmV0dXJuIGVycjsKK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF90c2Modm9pZCk7CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fbmF0aXZlX3JlYWRfdHNjKHZvaWQpCit7CisJREVDTEFSRV9BUkdTKHZhbCwgbG93LCBoaWdoKTsKKworCXJkdHNjX2JhcnJpZXIoKTsKKwlhc20gdm9sYXRpbGUoInJkdHNjIiA6IEVBWF9FRFhfUkVUKHZhbCwgbG93LCBoaWdoKSk7CisJcmR0c2NfYmFycmllcigpOworCisJcmV0dXJuIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3JlYWRfcG1jKGludCBjb3VudGVyKQoreworCURFQ0xBUkVfQVJHUyh2YWwsIGxvdywgaGlnaCk7CisKKwlhc20gdm9sYXRpbGUoInJkcG1jIiA6IEVBWF9FRFhfUkVUKHZhbCwgbG93LCBoaWdoKSA6ICJjIiAoY291bnRlcikpOworCXJldHVybiBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKy8qCisgKiBBY2Nlc3MgdG8gbWFjaGluZS1zcGVjaWZpYyByZWdpc3RlcnMgKGF2YWlsYWJsZSBvbiA1ODYgYW5kIGJldHRlciBvbmx5KQorICogTm90ZTogdGhlIHJkKiBvcGVyYXRpb25zIG1vZGlmeSB0aGUgcGFyYW1ldGVycyBkaXJlY3RseSAod2l0aG91dCB1c2luZworICogcG9pbnRlciBpbmRpcmVjdGlvbiksIHRoaXMgYWxsb3dzIGdjYyB0byBvcHRpbWl6ZSBiZXR0ZXIKKyAqLworCisjZGVmaW5lIHJkbXNyKG1zciwgdmFsMSwgdmFsMikJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1NjQgX192YWwgPSBuYXRpdmVfcmVhZF9tc3IoKG1zcikpOwkJCVwKKwkodmFsMSkgPSAodTMyKV9fdmFsOwkJCQkJXAorCSh2YWwyKSA9ICh1MzIpKF9fdmFsID4+IDMyKTsJCQkJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHdybXNyKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKQoreworCW5hdGl2ZV93cml0ZV9tc3IobXNyLCBsb3csIGhpZ2gpOworfQorCisjZGVmaW5lIHJkbXNybChtc3IsIHZhbCkJCQlcCisJKCh2YWwpID0gbmF0aXZlX3JlYWRfbXNyKChtc3IpKSkKKworI2RlZmluZSB3cm1zcmwobXNyLCB2YWwpCQkJCQkJXAorCW5hdGl2ZV93cml0ZV9tc3IoKG1zciksICh1MzIpKCh1NjQpKHZhbCkpLCAodTMyKSgodTY0KSh2YWwpID4+IDMyKSkKKworLyogd3Jtc3Igd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdybXNyX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpCit7CisJcmV0dXJuIG5hdGl2ZV93cml0ZV9tc3Jfc2FmZShtc3IsIGxvdywgaGlnaCk7Cit9CisKKy8qIHJkbXNyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nICovCisjZGVmaW5lIHJkbXNyX3NhZmUobXNyLCBwMSwgcDIpCQkJCQlcCisoewkJCQkJCQkJXAorCWludCBfX2VycjsJCQkJCQlcCisJdTY0IF9fdmFsID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUoKG1zciksICZfX2Vycik7CVwKKwkoKnAxKSA9ICh1MzIpX192YWw7CQkJCQlcCisJKCpwMikgPSAodTMyKShfX3ZhbCA+PiAzMik7CQkJCVwKKwlfX2VycjsJCQkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSBpbnQgcmRtc3JsX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCit7CisJaW50IGVycjsKKworCSpwID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUobXNyLCAmZXJyKTsKKwlyZXR1cm4gZXJyOworfQorc3RhdGljIGlubGluZSBpbnQgcmRtc3JsX2FtZF9zYWZlKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG9uZyBsb25nICpwKQoreworCWludCBlcnI7CisKKwkqcCA9IG5hdGl2ZV9yZWFkX21zcl9hbWRfc2FmZShtc3IsICZlcnIpOworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgcmR0c2NsKGxvdykJCQkJCQlcCisJKChsb3cpID0gKHUzMiluYXRpdmVfcmVhZF90c2MoKSkKKworI2RlZmluZSByZHRzY2xsKHZhbCkJCQkJCQlcCisJKCh2YWwpID0gbmF0aXZlX3JlYWRfdHNjKCkpCisKKyNkZWZpbmUgcmRwbWMoY291bnRlciwgbG93LCBoaWdoKQkJCVwKK2RvIHsJCQkJCQkJXAorCXU2NCBfbCA9IG5hdGl2ZV9yZWFkX3BtYygoY291bnRlcikpOwkJXAorCShsb3cpICA9ICh1MzIpX2w7CQkJCVwKKwkoaGlnaCkgPSAodTMyKShfbCA+PiAzMik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSByZHRzY3AobG93LCBoaWdoLCBhdXgpCQkJCQlcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGxvbmcgbG9uZyBfdmFsID0gbmF0aXZlX3JlYWRfdHNjcCgmKGF1eCkpOyAgICAgXAorCShsb3cpID0gKHUzMilfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShoaWdoKSA9ICh1MzIpKF92YWwgPj4gMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSByZHRzY3BsbCh2YWwsIGF1eCkgKHZhbCkgPSBuYXRpdmVfcmVhZF90c2NwKCYoYXV4KSkKKworI2VuZGlmCS8qICFDT05GSUdfUEFSQVZJUlQgKi8KKworCisjZGVmaW5lIGNoZWNraW5nX3dybXNybChtc3IsIHZhbCkgd3Jtc3Jfc2FmZSgobXNyKSwgKHUzMikodmFsKSwJCVwKKwkJCQkJICAgICAodTMyKSgodmFsKSA+PiAzMikpCisKKyNkZWZpbmUgd3JpdGVfdHNjKHZhbDEsIHZhbDIpIHdybXNyKDB4MTAsICh2YWwxKSwgKHZhbDIpKQorCisjZGVmaW5lIHdyaXRlX3JkdHNjcF9hdXgodmFsKSB3cm1zcigweGMwMDAwMTAzLCAodmFsKSwgMCkKKworI2lmZGVmIENPTkZJR19TTVAKK2ludCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpOworaW50IHdybXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpOworaW50IHJkbXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKTsKK2ludCB3cm1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpOworI2Vsc2UgIC8qICBDT05GSUdfU01QICAqLworc3RhdGljIGlubGluZSBpbnQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQoreworCXJkbXNyKG1zcl9ubywgKmwsICpoKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHdybXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpCit7CisJd3Jtc3IobXNyX25vLCBsLCBoKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHJkbXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sCisJCQkJICAgIHUzMiAqbCwgdTMyICpoKQoreworCXJldHVybiByZG1zcl9zYWZlKG1zcl9ubywgbCwgaCk7Cit9CitzdGF0aWMgaW5saW5lIGludCB3cm1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpCit7CisJcmV0dXJuIHdybXNyX3NhZmUobXNyX25vLCBsLCBoKTsKK30KKyNlbmRpZiAgLyogQ09ORklHX1NNUCAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisjZW5kaWYgLyogX0FTTV9YODZfTVNSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL210cnIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL210cnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzFlNDI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXRyci5oCkBAIC0wLDAgKzEsMTczIEBACisvKiAgR2VuZXJpYyBNVFJSIChNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3RlcikgaW9jdGxzLgorCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgIFJpY2hhcmQgR29vY2gKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICAgUmljaGFyZCBHb29jaCBtYXkgYmUgcmVhY2hlZCBieSBlbWFpbCBhdCAgcmdvb2NoQGF0bmYuY3Npcm8uYXUKKyAgICBUaGUgcG9zdGFsIGFkZHJlc3MgaXM6CisgICAgICBSaWNoYXJkIEdvb2NoLCBjL28gQVRORiwgUC4gTy4gQm94IDc2LCBFcHBpbmcsIE4uUy5XLiwgMjEyMSwgQXVzdHJhbGlhLgorKi8KKyNpZm5kZWYgX0FTTV9YODZfTVRSUl9ICisjZGVmaW5lIF9BU01fWDg2X01UUlJfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjZGVmaW5lCU1UUlJfSU9DVExfQkFTRQknTScKKworc3RydWN0IG10cnJfc2VudHJ5IHsKKyAgICB1bnNpZ25lZCBsb25nIGJhc2U7ICAgIC8qICBCYXNlIGFkZHJlc3MgICAgICovCisgICAgdW5zaWduZWQgaW50IHNpemU7ICAgIC8qICBTaXplIG9mIHJlZ2lvbiAgICovCisgICAgdW5zaWduZWQgaW50IHR5cGU7ICAgICAvKiAgVHlwZSBvZiByZWdpb24gICAqLworfTsKKworLyogV2FybmluZzogdGhpcyBzdHJ1Y3R1cmUgaGFzIGEgZGlmZmVyZW50IG9yZGVyIGZyb20gaTM4NgorICAgb24geDg2LTY0LiBUaGUgMzJiaXQgZW11bGF0aW9uIGNvZGUgdGFrZXMgY2FyZSBvZiB0aGF0LgorICAgQnV0IHlvdSBuZWVkIHRvIHVzZSB0aGlzIGZvciA2NGJpdCwgb3RoZXJ3aXNlIHlvdXIgWCBzZXJ2ZXIKKyAgIHdpbGwgYnJlYWsuICovCisKKyNpZmRlZiBfX2kzODZfXworc3RydWN0IG10cnJfZ2VudHJ5IHsKKyAgICB1bnNpZ25lZCBpbnQgcmVnbnVtOyAgIC8qICBSZWdpc3RlciBudW1iZXIgICovCisgICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLworICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLworICAgIHVuc2lnbmVkIGludCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KK307CisKKyNlbHNlIC8qIF9faTM4Nl9fICovCisKK3N0cnVjdCBtdHJyX2dlbnRyeSB7CisgICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLworICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLworICAgIHVuc2lnbmVkIGludCByZWdudW07ICAgLyogIFJlZ2lzdGVyIG51bWJlciAgKi8KKyAgICB1bnNpZ25lZCBpbnQgdHlwZTsgICAgIC8qICBUeXBlIG9mIHJlZ2lvbiAgICovCit9OworI2VuZGlmIC8qICFfX2kzODZfXyAqLworCisvKiAgVGhlc2UgYXJlIHRoZSB2YXJpb3VzIGlvY3RscyAgKi8KKyNkZWZpbmUgTVRSUklPQ19BRERfRU5UUlkgICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMCwgc3RydWN0IG10cnJfc2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX1NFVF9FTlRSWSAgICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICAxLCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfREVMX0VOVFJZICAgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDIsIHN0cnVjdCBtdHJyX3NlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19HRVRfRU5UUlkgICAgICAgIF9JT1dSKE1UUlJfSU9DVExfQkFTRSwgMywgc3RydWN0IG10cnJfZ2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX0tJTExfRU5UUlkgICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA0LCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfQUREX1BBR0VfRU5UUlkgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDUsIHN0cnVjdCBtdHJyX3NlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19TRVRfUEFHRV9FTlRSWSAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNiwgc3RydWN0IG10cnJfc2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX0RFTF9QQUdFX0VOVFJZICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA3LCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfR0VUX1BBR0VfRU5UUlkgICBfSU9XUihNVFJSX0lPQ1RMX0JBU0UsIDgsIHN0cnVjdCBtdHJyX2dlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19LSUxMX1BBR0VfRU5UUlkgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgOSwgc3RydWN0IG10cnJfc2VudHJ5KQorCisvKiAgVGhlc2UgYXJlIHRoZSByZWdpb24gdHlwZXMgICovCisjZGVmaW5lIE1UUlJfVFlQRV9VTkNBQ0hBQkxFIDAKKyNkZWZpbmUgTVRSUl9UWVBFX1dSQ09NQiAgICAgMQorLyojZGVmaW5lIE1UUlJfVFlQRV8gICAgICAgICAyKi8KKy8qI2RlZmluZSBNVFJSX1RZUEVfICAgICAgICAgMyovCisjZGVmaW5lIE1UUlJfVFlQRV9XUlRIUk9VR0ggIDQKKyNkZWZpbmUgTVRSUl9UWVBFX1dSUFJPVCAgICAgNQorI2RlZmluZSBNVFJSX1RZUEVfV1JCQUNLICAgICA2CisjZGVmaW5lIE1UUlJfTlVNX1RZUEVTICAgICAgIDcKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBmb3IgdXNlIGJ5IG90aGVyIGRyaXZlcnMgICovCisjIGlmZGVmIENPTkZJR19NVFJSCitleHRlcm4gdTggbXRycl90eXBlX2xvb2t1cCh1NjQgYWRkciwgdTY0IGVuZCk7CitleHRlcm4gdm9pZCBtdHJyX3NhdmVfZml4ZWRfcmFuZ2VzKHZvaWQgKik7CitleHRlcm4gdm9pZCBtdHJyX3NhdmVfc3RhdGUodm9pZCk7CitleHRlcm4gaW50IG10cnJfYWRkKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KTsKK2V4dGVybiBpbnQgbXRycl9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBpbmNyZW1lbnQpOworZXh0ZXJuIGludCBtdHJyX2RlbChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IG10cnJfZGVsX3BhZ2UoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgbXRycl9jZW50YXVyX3JlcG9ydF9tY3IoaW50IG1jciwgdTMyIGxvLCB1MzIgaGkpOworZXh0ZXJuIHZvaWQgbXRycl9hcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbXRycl9icF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CitleHRlcm4gaW50IGFtZF9zcGVjaWFsX2RlZmF1bHRfbXRycih2b2lkKTsKKyMgIGVsc2UKK3N0YXRpYyBpbmxpbmUgdTggbXRycl90eXBlX2xvb2t1cCh1NjQgYWRkciwgdTY0IGVuZCkKK3sKKwkvKgorCSAqIFJldHVybiBuby1NVFJSczoKKwkgKi8KKwlyZXR1cm4gMHhmZjsKK30KKyNkZWZpbmUgbXRycl9zYXZlX2ZpeGVkX3JhbmdlcyhhcmcpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBtdHJyX3NhdmVfc3RhdGUoKSBkbyB7fSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgaW50IG10cnJfYWRkKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KQoreworICAgIHJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSBpbnQgbXRycl9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQl1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBpbmNyZW1lbnQpCit7CisgICAgcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgaW5saW5lIGludCBtdHJyX2RlbChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgICByZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG10cnJfZGVsX3BhZ2UoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgICAgcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgaW5saW5lIGludCBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHJyX2NlbnRhdXJfcmVwb3J0X21jcihpbnQgbWNyLCB1MzIgbG8sIHUzMiBoaSkKK3sKK30KKworI2RlZmluZSBtdHJyX2FwX2luaXQoKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgbXRycl9icF9pbml0KCkgZG8ge30gd2hpbGUgKDApCisjICBlbmRpZgorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorCitzdHJ1Y3QgbXRycl9zZW50cnkzMiB7CisgICAgY29tcGF0X3Vsb25nX3QgYmFzZTsgICAgLyogIEJhc2UgYWRkcmVzcyAgICAgKi8KKyAgICBjb21wYXRfdWludF90IHNpemU7ICAgIC8qICBTaXplIG9mIHJlZ2lvbiAgICovCisgICAgY29tcGF0X3VpbnRfdCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KK307CisKK3N0cnVjdCBtdHJyX2dlbnRyeTMyIHsKKyAgICBjb21wYXRfdWxvbmdfdCByZWdudW07ICAgLyogIFJlZ2lzdGVyIG51bWJlciAgKi8KKyAgICBjb21wYXRfdWludF90IGJhc2U7ICAgIC8qICBCYXNlIGFkZHJlc3MgICAgICovCisgICAgY29tcGF0X3VpbnRfdCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLworICAgIGNvbXBhdF91aW50X3QgdHlwZTsgICAgIC8qICBUeXBlIG9mIHJlZ2lvbiAgICovCit9OworCisjZGVmaW5lIE1UUlJfSU9DVExfQkFTRSAnTScKKworI2RlZmluZSBNVFJSSU9DMzJfQUREX0VOVFJZICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICAwLCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKKyNkZWZpbmUgTVRSUklPQzMyX1NFVF9FTlRSWSAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCisjZGVmaW5lIE1UUlJJT0MzMl9ERUxfRU5UUlkgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDIsIHN0cnVjdCBtdHJyX3NlbnRyeTMyKQorI2RlZmluZSBNVFJSSU9DMzJfR0VUX0VOVFJZICAgICAgX0lPV1IoTVRSUl9JT0NUTF9CQVNFLCAzLCBzdHJ1Y3QgbXRycl9nZW50cnkzMikKKyNkZWZpbmUgTVRSUklPQzMyX0tJTExfRU5UUlkgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNCwgc3RydWN0IG10cnJfc2VudHJ5MzIpCisjZGVmaW5lIE1UUlJJT0MzMl9BRERfUEFHRV9FTlRSWSBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDUsIHN0cnVjdCBtdHJyX3NlbnRyeTMyKQorI2RlZmluZSBNVFJSSU9DMzJfU0VUX1BBR0VfRU5UUlkgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA2LCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKKyNkZWZpbmUgTVRSUklPQzMyX0RFTF9QQUdFX0VOVFJZIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNywgc3RydWN0IG10cnJfc2VudHJ5MzIpCisjZGVmaW5lIE1UUlJJT0MzMl9HRVRfUEFHRV9FTlRSWSBfSU9XUihNVFJSX0lPQ1RMX0JBU0UsIDgsIHN0cnVjdCBtdHJyX2dlbnRyeTMyKQorI2RlZmluZSBNVFJSSU9DMzJfS0lMTF9QQUdFX0VOVFJZCQlcCisJCQkJIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgOSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfTVRSUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXV0ZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL211dGV4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9tdXRleC5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tdXRleC5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tdXRleF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXV0ZXhfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Y5MGM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXV0ZXhfMzIuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIEFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBtdXRleCBmYXN0cGF0aCwgYmFzZWQgb24gYXRvbWljCisgKiBkZWNyZW1lbnQvaW5jcmVtZW50LgorICoKKyAqIHN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXI6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqLworI2lmbmRlZiBfQVNNX1g4Nl9NVVRFWF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X01VVEVYXzMyX0gKKworI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorCisvKioKKyAqICBfX211dGV4X2Zhc3RwYXRoX2xvY2sgLSB0cnkgdG8gdGFrZSB0aGUgbG9jayBieSBtb3ZpbmcgdGhlIGNvdW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAxIHRvIGEgMCB2YWx1ZQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBvcmlnaW5hbCB2YWx1ZSB3YXMgbm90IDEKKyAqCisgKiBDaGFuZ2UgdGhlIGNvdW50IGZyb20gMSB0byBhIHZhbHVlIGxvd2VyIHRoYW4gMSwgYW5kIGNhbGwgPGZuPiBpZiBpdAorICogd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiBNVVNUIGxlYXZlIHRoZSB2YWx1ZSBsb3dlciB0aGFuIDEKKyAqIGV2ZW4gd2hlbiB0aGUgIjEiIGFzc2VydGlvbiB3YXNuJ3QgdHJ1ZS4KKyAqLworI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2soY291bnQsIGZhaWxfZm4pCQkJXAorZG8gewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBkdW1teTsJCQkJCVwKKwkJCQkJCQkJXAorCXR5cGVjaGVjayhhdG9taWNfdCAqLCBjb3VudCk7CQkJCVwKKwl0eXBlY2hlY2tfZm4odm9pZCAoKikoYXRvbWljX3QgKiksIGZhaWxfZm4pOwkJXAorCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICIgICBkZWNsICglJWVheClcbiIJCVwKKwkJICAgICAiICAgam5zIDFmCVxuIgkJCQlcCisJCSAgICAgIiAgIGNhbGwgIiAjZmFpbF9mbiAiXG4iCQkJXAorCQkgICAgICIxOlxuIgkJCQkJXAorCQkgICAgIDogIj1hIiAoZHVtbXkpCQkJCVwKKwkJICAgICA6ICJhIiAoY291bnQpCQkJCVwKKwkJICAgICA6ICJtZW1vcnkiLCAiZWN4IiwgImVkeCIpOwkJCVwKK30gd2hpbGUgKDApCisKKworLyoqCisgKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbCAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAxIHRvIGEgMCB2YWx1ZQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBub3QgMQorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLCBhbmQgY2FsbCA8ZmFpbF9mbj4gaWYgaXQKKyAqIHdhc24ndCAxIG9yaWdpbmFsbHkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSBmYXN0cGF0aCBzdWNjZWVkcywKKyAqIG9yIGFueXRoaW5nIHRoZSBzbG93IHBhdGggZnVuY3Rpb24gcmV0dXJucworICovCitzdGF0aWMgaW5saW5lIGludCBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGF0b21pY190ICpjb3VudCwKKwkJCQkJICAgICAgIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybihjb3VudCkgPCAwKSkKKwkJcmV0dXJuIGZhaWxfZm4oY291bnQpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIF9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrIC0gdHJ5IHRvIHByb21vdGUgdGhlIG11dGV4IGZyb20gMCB0byAxCisgKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqICBAZmFpbF9mbjogZnVuY3Rpb24gdG8gY2FsbCBpZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIG5vdCAwCisgKgorICogdHJ5IHRvIHByb21vdGUgdGhlIG11dGV4IGZyb20gMCB0byAxLiBpZiBpdCB3YXNuJ3QgMCwgY2FsbCA8ZmFpbF9mbj4uCisgKiBJbiB0aGUgZmFpbHVyZSBjYXNlLCB0aGlzIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gZWl0aGVyIHNldCB0aGUgdmFsdWUKKyAqIHRvIDEsIG9yIHRvIHNldCBpdCB0byBhIHZhbHVlIGxvd2VyIHRoYW4gMS4KKyAqCisgKiBJZiB0aGUgaW1wbGVtZW50YXRpb24gc2V0cyBpdCB0byBhIHZhbHVlIG9mIGxvd2VyIHRoYW4gMSwgdGhlCisgKiBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpIG1hY3JvIG5lZWRzIHRvIHJldHVybiAxLCBpdCBuZWVkcworICogdG8gcmV0dXJuIDAgb3RoZXJ3aXNlLgorICovCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrKGNvdW50LCBmYWlsX2ZuKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZHVtbXk7CQkJCQlcCisJCQkJCQkJCVwKKwl0eXBlY2hlY2soYXRvbWljX3QgKiwgY291bnQpOwkJCQlcCisJdHlwZWNoZWNrX2ZuKHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKKwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiICAgaW5jbCAoJSVlYXgpXG4iCQlcCisJCSAgICAgIiAgIGpnCTFmXG4iCQkJCVwKKwkJICAgICAiICAgY2FsbCAiICNmYWlsX2ZuICJcbiIJCQlcCisJCSAgICAgIjE6XG4iCQkJCQlcCisJCSAgICAgOiAiPWEiIChkdW1teSkJCQkJXAorCQkgICAgIDogImEiIChjb3VudCkJCQkJXAorCQkgICAgIDogIm1lbW9yeSIsICJlY3giLCAiZWR4Iik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpCTEKKworLyoqCisgKiBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2sgLSB0cnkgdG8gYWNxdWlyZSB0aGUgbXV0ZXgsIHdpdGhvdXQgd2FpdGluZworICoKKyAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogIEBmYWlsX2ZuOiBmYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLCBhbmQgcmV0dXJuIDAgKGZhaWx1cmUpCisgKiBpZiBpdCB3YXNuJ3QgMSBvcmlnaW5hbGx5LCBvciByZXR1cm4gMSAoc3VjY2Vzcykgb3RoZXJ3aXNlLiBUaGlzIGZ1bmN0aW9uCisgKiBNVVNUIGxlYXZlIHRoZSB2YWx1ZSBsb3dlciB0aGFuIDEgZXZlbiB3aGVuIHRoZSAiMSIgYXNzZXJ0aW9uIHdhc24ndCB0cnVlLgorICogQWRkaXRpb25hbGx5LCBpZiB0aGUgdmFsdWUgd2FzIDwgMCBvcmlnaW5hbGx5LCB0aGlzIGZ1bmN0aW9uIG11c3Qgbm90IGxlYXZlCisgKiBpdCB0byAwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsCisJCQkJCSAgIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCS8qCisJICogV2UgaGF2ZSB0d28gdmFyaWFudHMgaGVyZS4gVGhlIGNtcHhjaGcgYmFzZWQgb25lIGlzIHRoZSBiZXN0IG9uZQorCSAqIGJlY2F1c2UgaXQgbmV2ZXIgaW5kdWNlIGEgZmFsc2UgY29udGVudGlvbiBzdGF0ZS4gIEl0IGlzIGluY2x1ZGVkCisJICogaGVyZSBiZWNhdXNlIGFyY2hpdGVjdHVyZXMgdXNpbmcgdGhlIGluYy9kZWMgYWxnb3JpdGhtcyBvdmVyIHRoZQorCSAqIHhjaGcgb25lcyBhcmUgbXVjaCBtb3JlIGxpa2VseSB0byBzdXBwb3J0IGNtcHhjaGcgbmF0aXZlbHkuCisJICoKKwkgKiBJZiBub3Qgd2UgZmFsbCBiYWNrIHRvIHRoZSBzcGlubG9jayBiYXNlZCB2YXJpYW50IC0gdGhhdCBpcworCSAqIGp1c3QgYXMgZWZmaWNpZW50IChhbmQgc2ltcGxlcikgYXMgYSAnZGVzdHJ1Y3RpdmUnIHByb2Jpbmcgb2YKKwkgKiB0aGUgbXV0ZXggc3RhdGUgd291bGQgYmUuCisJICovCisjaWZkZWYgX19IQVZFX0FSQ0hfQ01QWENIRworCWlmIChsaWtlbHkoYXRvbWljX2NtcHhjaGcoY291bnQsIDEsIDApID09IDEpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIGZhaWxfZm4oY291bnQpOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9NVVRFWF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tdXRleF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXV0ZXhfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGE4N2IwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXV0ZXhfNjQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIEFzc2VtYmx5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBtdXRleCBmYXN0cGF0aCwgYmFzZWQgb24gYXRvbWljCisgKiBkZWNyZW1lbnQvaW5jcmVtZW50LgorICoKKyAqIHN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXI6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqLworI2lmbmRlZiBfQVNNX1g4Nl9NVVRFWF82NF9ICisjZGVmaW5lIF9BU01fWDg2X01VVEVYXzY0X0gKKworLyoqCisgKiBfX211dGV4X2Zhc3RwYXRoX2xvY2sgLSBkZWNyZW1lbnQgYW5kIGNhbGwgZnVuY3Rpb24gaWYgbmVnYXRpdmUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYW5kIGNhbGxzIDxmYWlsX2ZuPiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgorICovCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayh2LCBmYWlsX2ZuKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGR1bW15OwkJCQkJXAorCQkJCQkJCQlcCisJdHlwZWNoZWNrKGF0b21pY190ICosIHYpOwkJCQlcCisJdHlwZWNoZWNrX2ZuKHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKKwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiICAgZGVjbCAoJSVyZGkpXG4iCQlcCisJCSAgICAgIiAgIGpucyAxZgkJXG4iCQkJXAorCQkgICAgICIgICBjYWxsICIgI2ZhaWxfZm4gIlxuIgkJCVwKKwkJICAgICAiMToiCQkJCQlcCisJCSAgICAgOiAiPUQiIChkdW1teSkJCQkJXAorCQkgICAgIDogIkQiICh2KQkJCQkJXAorCQkgICAgIDogInJheCIsICJyc2kiLCAicmR4IiwgInJjeCIsCQlcCisJCSAgICAgICAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsICJtZW1vcnkiKTsJXAorfSB3aGlsZSAoMCkKKworLyoqCisgKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbCAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAxIHRvIGEgMCB2YWx1ZQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBub3QgMQorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLCBhbmQgY2FsbCA8ZmFpbF9mbj4gaWYKKyAqIGl0IHdhc24ndCAxIG9yaWdpbmFsbHkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSBmYXN0cGF0aCBzdWNjZWVkcywKKyAqIG9yIGFueXRoaW5nIHRoZSBzbG93IHBhdGggZnVuY3Rpb24gcmV0dXJucworICovCitzdGF0aWMgaW5saW5lIGludCBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGF0b21pY190ICpjb3VudCwKKwkJCQkJICAgICAgIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybihjb3VudCkgPCAwKSkKKwkJcmV0dXJuIGZhaWxfZm4oY291bnQpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX19tdXRleF9mYXN0cGF0aF91bmxvY2sgLSBpbmNyZW1lbnQgYW5kIGNhbGwgZnVuY3Rpb24gaWYgbm9ucG9zaXRpdmUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSByZXN1bHQgaXMgbm9ucG9zaXRpdmUKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYW5kIGNhbGxzIDxmYWlsX2ZuPiBpZiB0aGUgcmVzdWx0IGlzIG5vbnBvc2l0aXZlLgorICovCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrKHYsIGZhaWxfZm4pCQkJXAorZG8gewkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZHVtbXk7CQkJCQlcCisJCQkJCQkJCVwKKwl0eXBlY2hlY2soYXRvbWljX3QgKiwgdik7CQkJCVwKKwl0eXBlY2hlY2tfZm4odm9pZCAoKikoYXRvbWljX3QgKiksIGZhaWxfZm4pOwkJXAorCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICIgICBpbmNsICglJXJkaSlcbiIJCVwKKwkJICAgICAiICAgamcgMWZcbiIJCQkJXAorCQkgICAgICIgICBjYWxsICIgI2ZhaWxfZm4gIlxuIgkJCVwKKwkJICAgICAiMToiCQkJCQlcCisJCSAgICAgOiAiPUQiIChkdW1teSkJCQkJXAorCQkgICAgIDogIkQiICh2KQkJCQkJXAorCQkgICAgIDogInJheCIsICJyc2kiLCAicmR4IiwgInJjeCIsCQlcCisJCSAgICAgICAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsICJtZW1vcnkiKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpCTEKKworLyoqCisgKiBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2sgLSB0cnkgdG8gYWNxdWlyZSB0aGUgbXV0ZXgsIHdpdGhvdXQgd2FpdGluZworICoKKyAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogIEBmYWlsX2ZuOiBmYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIDAgYW5kIHJldHVybiAxIChzdWNjZXNzKSwgb3IgcmV0dXJuIDAgKGZhaWx1cmUpCisgKiBpZiBpdCB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBbdGhlIGZhbGxiYWNrIGZ1bmN0aW9uIGlzIG5ldmVyIHVzZWQgb24KKyAqIHg4Nl82NCwgYmVjYXVzZSBhbGwgeDg2XzY0IENQVXMgaGF2ZSBhIENNUFhDSEcgaW5zdHJ1Y3Rpb24uXQorICovCitzdGF0aWMgaW5saW5lIGludCBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soYXRvbWljX3QgKmNvdW50LAorCQkJCQkgICBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3sKKwlpZiAobGlrZWx5KGF0b21pY19jbXB4Y2hnKGNvdW50LCAxLCAwKSA9PSAxKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X01VVEVYXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1YTBhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgX0FTTV9YODZfTk1JX0gKKyNkZWZpbmUgX0FTTV9YODZfTk1JX0gKKworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZkZWYgQVJDSF9IQVNfTk1JX1dBVENIRE9HCisKKy8qKgorICogZG9fbm1pX2NhbGxiYWNrCisgKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgY2FsbGJhY2sgZXhpc3RzIGFuZCBleGVjdXRlIGl0LiAgUmV0dXJuIDEKKyAqIGlmIHRoZSBoYW5kbGVyIGV4aXN0cyBhbmQgd2FzIGhhbmRsZWQgc3VjY2Vzc2Z1bGx5LgorICovCitpbnQgZG9fbm1pX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgZGllX25taShjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZG9fcGFuaWMpOworZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gaW50IG5taV93YXRjaGRvZ19lbmFibGVkOworZXh0ZXJuIGludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgcmVzZXJ2ZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCByZXNlcnZlX2V2bnRzZWxfbm1pKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCByZWxlYXNlX2V2bnRzZWxfbm1pKHVuc2lnbmVkIGludCk7CisKK2V4dGVybiB2b2lkIHNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKHZvaWQgKik7CitleHRlcm4gdm9pZCBzdG9wX2FwaWNfbm1pX3dhdGNoZG9nKHZvaWQgKik7CitleHRlcm4gdm9pZCBkaXNhYmxlX3RpbWVyX25taV93YXRjaGRvZyh2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV90aW1lcl9ubWlfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gaW50IG5taV93YXRjaGRvZ190aWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCByZWFzb24pOworZXh0ZXJuIHZvaWQgY3B1X25taV9zZXRfd2RfZW5hYmxlZCh2b2lkKTsKKworZXh0ZXJuIGF0b21pY190IG5taV9hY3RpdmU7CitleHRlcm4gdW5zaWduZWQgaW50IG5taV93YXRjaGRvZzsKKyNkZWZpbmUgTk1JX05PTkUJMAorI2RlZmluZSBOTUlfSU9fQVBJQwkxCisjZGVmaW5lIE5NSV9MT0NBTF9BUElDCTIKKyNkZWZpbmUgTk1JX0lOVkFMSUQJMworCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IGZpbGU7CitleHRlcm4gaW50IHByb2Nfbm1pX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLCBzdHJ1Y3QgZmlsZSAqLAorCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7CisKK3ZvaWQgX190cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKHZvaWQpOworI2RlZmluZSB0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkgX190cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkKKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsaXNlX25taV93YXRjaGRvZyh2b2lkKQoreworCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpCisJCW5taV93YXRjaGRvZyA9IE5NSV9MT0NBTF9BUElDOworfQorCisvKiBjaGVjayBpZiBubWlfd2F0Y2hkb2cgaXMgYWN0aXZlIChpZSB3YXMgc3BlY2lmaWVkIGF0IGJvb3QpICovCitzdGF0aWMgaW5saW5lIGludCBubWlfd2F0Y2hkb2dfYWN0aXZlKHZvaWQpCit7CisJLyoKKwkgKiBhY3R1YWxseSBpdCBzaG91bGQgYmU6CisJICogCXJldHVybiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDIHx8CisJICogCQlubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpCisJICogYnV0IHNpbmNlIHRoZXkgYXJlIHBvd2VyIG9mIHR3byB3ZSBjb3VsZCB1c2UgYQorCSAqIGNoZWFwZXIgd2F5IC0tY3ZnCisJICovCisJcmV0dXJuIG5taV93YXRjaGRvZyAmIDB4MzsKK30KKyNlbmRpZgorCit2b2lkIGxhcGljX3dhdGNoZG9nX3N0b3Aodm9pZCk7CitpbnQgbGFwaWNfd2F0Y2hkb2dfaW5pdCh1bnNpZ25lZCBubWlfaHopOworaW50IGxhcGljX3dkX2V2ZW50KHVuc2lnbmVkIG5taV9oeik7Cit1bnNpZ25lZCBsYXBpY19hZGp1c3Rfbm1pX2h6KHVuc2lnbmVkIGh6KTsKK2ludCBsYXBpY193YXRjaGRvZ19vayh2b2lkKTsKK3ZvaWQgZGlzYWJsZV9sYXBpY19ubWlfd2F0Y2hkb2codm9pZCk7Cit2b2lkIGVuYWJsZV9sYXBpY19ubWlfd2F0Y2hkb2codm9pZCk7Cit2b2lkIHN0b3Bfbm1pKHZvaWQpOwordm9pZCByZXN0YXJ0X25taSh2b2lkKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X05NSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ub3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ub3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyNjY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL25vcHMuaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9OT1BTX0gKKyNkZWZpbmUgX0FTTV9YODZfTk9QU19ICisKKy8qIERlZmluZSBub3BzIGZvciB1c2Ugd2l0aCBhbHRlcm5hdGl2ZSgpICovCisKKy8qIGdlbmVyaWMgdmVyc2lvbnMgZnJvbSBnYXMKKyAgIDE6IG5vcAorICAgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgYXJlIE5PVCBub3BzIGluIDY0LWJpdCBtb2RlLAorICAgZm9yIDY0LWJpdCBtb2RlIHVzZSBLOCBvciBQNiBub3BzIGluc3RlYWQKKyAgIDI6IG1vdmwgJWVzaSwlZXNpCisgICAzOiBsZWFsIDB4MDAoJWVzaSksJWVzaQorICAgNDogbGVhbCAweDAwKCwlZXNpLDEpLCVlc2kKKyAgIDY6IGxlYWwgMHgwMDAwMDAwMCglZXNpKSwlZXNpCisgICA3OiBsZWFsIDB4MDAwMDAwMDAoLCVlc2ksMSksJWVzaQorKi8KKyNkZWZpbmUgR0VORVJJQ19OT1AxICIuYnl0ZSAweDkwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QMiAiLmJ5dGUgMHg4OSwweGY2XG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QMyAiLmJ5dGUgMHg4ZCwweDc2LDB4MDBcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1A0ICIuYnl0ZSAweDhkLDB4NzQsMHgyNiwweDAwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QNSBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A0CisjZGVmaW5lIEdFTkVSSUNfTk9QNiAiLmJ5dGUgMHg4ZCwweGI2LDB4MDAsMHgwMCwweDAwLDB4MDBcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1A3ICIuYnl0ZSAweDhkLDB4YjQsMHgyNiwweDAwLDB4MDAsMHgwMCwweDAwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QOCBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A3CisKKy8qIE9wdGVyb24gNjRiaXQgbm9wcworICAgMTogbm9wCisgICAyOiBvc3Agbm9wCisgICAzOiBvc3Agb3NwIG5vcAorICAgNDogb3NwIG9zcCBvc3Agbm9wCisqLworI2RlZmluZSBLOF9OT1AxIEdFTkVSSUNfTk9QMQorI2RlZmluZSBLOF9OT1AyCSIuYnl0ZSAweDY2LDB4OTBcbiIKKyNkZWZpbmUgSzhfTk9QMwkiLmJ5dGUgMHg2NiwweDY2LDB4OTBcbiIKKyNkZWZpbmUgSzhfTk9QNAkiLmJ5dGUgMHg2NiwweDY2LDB4NjYsMHg5MFxuIgorI2RlZmluZSBLOF9OT1A1CUs4X05PUDMgSzhfTk9QMgorI2RlZmluZSBLOF9OT1A2CUs4X05PUDMgSzhfTk9QMworI2RlZmluZSBLOF9OT1A3CUs4X05PUDQgSzhfTk9QMworI2RlZmluZSBLOF9OT1A4CUs4X05PUDQgSzhfTk9QNAorCisvKiBLNyBub3BzCisgICB1c2VzIGVheCBkZXBlbmRlbmNpZXMgKGFyYml0YXJ5IGNob2ljZSkKKyAgIDE6IG5vcAorICAgMjogbW92bCAlZWF4LCVlYXgKKyAgIDM6IGxlYWwgKCwlZWF4LDEpLCVlYXgKKyAgIDQ6IGxlYWwgMHgwMCgsJWVheCwxKSwlZWF4CisgICA2OiBsZWFsIDB4MDAwMDAwMDAoJWVheCksJWVheAorICAgNzogbGVhbCAweDAwMDAwMDAwKCwlZWF4LDEpLCVlYXgKKyovCisjZGVmaW5lIEs3X05PUDEJR0VORVJJQ19OT1AxCisjZGVmaW5lIEs3X05PUDIJIi5ieXRlIDB4OGIsMHhjMFxuIgorI2RlZmluZSBLN19OT1AzCSIuYnl0ZSAweDhkLDB4MDQsMHgyMFxuIgorI2RlZmluZSBLN19OT1A0CSIuYnl0ZSAweDhkLDB4NDQsMHgyMCwweDAwXG4iCisjZGVmaW5lIEs3X05PUDUJSzdfTk9QNCBBU01fTk9QMQorI2RlZmluZSBLN19OT1A2CSIuYnl0ZSAweDhkLDB4ODAsMCwwLDAsMFxuIgorI2RlZmluZSBLN19OT1A3CSIuYnl0ZSAweDhELDB4MDQsMHgwNSwwLDAsMCwwXG4iCisjZGVmaW5lIEs3X05PUDgJSzdfTk9QNyBBU01fTk9QMQorCisvKiBQNiBub3BzCisgICB1c2VzIGVheCBkZXBlbmRlbmNpZXMgKEludGVsLXJlY29tbWVuZGVkIGNob2ljZSkKKyAgIDE6IG5vcAorICAgMjogb3NwIG5vcAorICAgMzogbm9wbCAoJWVheCkKKyAgIDQ6IG5vcGwgMHgwMCglZWF4KQorICAgNTogbm9wbCAweDAwKCVlYXgsJWVheCwxKQorICAgNjogb3NwIG5vcGwgMHgwMCglZWF4LCVlYXgsMSkKKyAgIDc6IG5vcGwgMHgwMDAwMDAwMCglZWF4KQorICAgODogbm9wbCAweDAwMDAwMDAwKCVlYXgsJWVheCwxKQorKi8KKyNkZWZpbmUgUDZfTk9QMQlHRU5FUklDX05PUDEKKyNkZWZpbmUgUDZfTk9QMgkiLmJ5dGUgMHg2NiwweDkwXG4iCisjZGVmaW5lIFA2X05PUDMJIi5ieXRlIDB4MGYsMHgxZiwweDAwXG4iCisjZGVmaW5lIFA2X05PUDQJIi5ieXRlIDB4MGYsMHgxZiwweDQwLDBcbiIKKyNkZWZpbmUgUDZfTk9QNQkiLmJ5dGUgMHgwZiwweDFmLDB4NDQsMHgwMCwwXG4iCisjZGVmaW5lIFA2X05PUDYJIi5ieXRlIDB4NjYsMHgwZiwweDFmLDB4NDQsMHgwMCwwXG4iCisjZGVmaW5lIFA2X05PUDcJIi5ieXRlIDB4MGYsMHgxZiwweDgwLDAsMCwwLDBcbiIKKyNkZWZpbmUgUDZfTk9QOAkiLmJ5dGUgMHgwZiwweDFmLDB4ODQsMHgwMCwwLDAsMCwwXG4iCisKKyNpZiBkZWZpbmVkKENPTkZJR19NSzcpCisjZGVmaW5lIEFTTV9OT1AxIEs3X05PUDEKKyNkZWZpbmUgQVNNX05PUDIgSzdfTk9QMgorI2RlZmluZSBBU01fTk9QMyBLN19OT1AzCisjZGVmaW5lIEFTTV9OT1A0IEs3X05PUDQKKyNkZWZpbmUgQVNNX05PUDUgSzdfTk9QNQorI2RlZmluZSBBU01fTk9QNiBLN19OT1A2CisjZGVmaW5lIEFTTV9OT1A3IEs3X05PUDcKKyNkZWZpbmUgQVNNX05PUDggSzdfTk9QOAorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2X1A2X05PUCkKKyNkZWZpbmUgQVNNX05PUDEgUDZfTk9QMQorI2RlZmluZSBBU01fTk9QMiBQNl9OT1AyCisjZGVmaW5lIEFTTV9OT1AzIFA2X05PUDMKKyNkZWZpbmUgQVNNX05PUDQgUDZfTk9QNAorI2RlZmluZSBBU01fTk9QNSBQNl9OT1A1CisjZGVmaW5lIEFTTV9OT1A2IFA2X05PUDYKKyNkZWZpbmUgQVNNX05PUDcgUDZfTk9QNworI2RlZmluZSBBU01fTk9QOCBQNl9OT1A4CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjZGVmaW5lIEFTTV9OT1AxIEs4X05PUDEKKyNkZWZpbmUgQVNNX05PUDIgSzhfTk9QMgorI2RlZmluZSBBU01fTk9QMyBLOF9OT1AzCisjZGVmaW5lIEFTTV9OT1A0IEs4X05PUDQKKyNkZWZpbmUgQVNNX05PUDUgSzhfTk9QNQorI2RlZmluZSBBU01fTk9QNiBLOF9OT1A2CisjZGVmaW5lIEFTTV9OT1A3IEs4X05PUDcKKyNkZWZpbmUgQVNNX05PUDggSzhfTk9QOAorI2Vsc2UKKyNkZWZpbmUgQVNNX05PUDEgR0VORVJJQ19OT1AxCisjZGVmaW5lIEFTTV9OT1AyIEdFTkVSSUNfTk9QMgorI2RlZmluZSBBU01fTk9QMyBHRU5FUklDX05PUDMKKyNkZWZpbmUgQVNNX05PUDQgR0VORVJJQ19OT1A0CisjZGVmaW5lIEFTTV9OT1A1IEdFTkVSSUNfTk9QNQorI2RlZmluZSBBU01fTk9QNiBHRU5FUklDX05PUDYKKyNkZWZpbmUgQVNNX05PUDcgR0VORVJJQ19OT1A3CisjZGVmaW5lIEFTTV9OT1A4IEdFTkVSSUNfTk9QOAorI2VuZGlmCisKKyNkZWZpbmUgQVNNX05PUF9NQVggOAorCisjZW5kaWYgLyogX0FTTV9YODZfTk9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbnVtYS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvbnVtYS5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWY1ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV8zMi5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX0FTTV9YODZfTlVNQV8zMl9ICisjZGVmaW5lIF9BU01fWDg2X05VTUFfMzJfSAorCitleHRlcm4gaW50IHB4bV90b19uaWQoaW50IHB4bSk7CitleHRlcm4gdm9pZCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfTlVNQQorZXh0ZXJuIHZvaWQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdCh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfTlVNQV8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ZWQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9BU01fWDg2X05VTUFfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9OVU1BXzY0X0gKKworI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKworc3RydWN0IGJvb3Rub2RlIHsKKwl1NjQgc3RhcnQ7CisJdTY0IGVuZDsKK307CisKK2V4dGVybiBpbnQgY29tcHV0ZV9oYXNoX3NoaWZ0KHN0cnVjdCBib290bm9kZSAqbm9kZXMsIGludCBudW1ibGtzLAorCQkJICAgICAgaW50ICpub2RlaWRzKTsKKworI2RlZmluZSBaT05FX0FMSUdOICgxVUwgPDwgKE1BWF9PUkRFUitQQUdFX1NISUZUKSkKKworZXh0ZXJuIHZvaWQgbnVtYV9pbml0X2FycmF5KHZvaWQpOworZXh0ZXJuIGludCBudW1hX29mZjsKKworZXh0ZXJuIHZvaWQgc3JhdF9yZXNlcnZlX2FkZF9hcmVhKGludCBub2RlaWQpOworZXh0ZXJuIGludCBob3RhZGRfcGVyY2VudDsKKworZXh0ZXJuIHMxNiBhcGljaWRfdG9fbm9kZVtNQVhfTE9DQUxfQVBJQ107CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG51bWFfZnJlZV9hbGxfYm9vdG1lbSh2b2lkKTsKK2V4dGVybiB2b2lkIHNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKKworI2lmZGVmIENPTkZJR19OVU1BCitleHRlcm4gdm9pZCBfX2luaXQgaW5pdF9jcHVfdG9fbm9kZSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKTsKK2V4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX2NsZWFyX25vZGUoaW50IGNwdSk7CitleHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpOworZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jcHVfdG9fbm9kZSh2b2lkKQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYV9zZXRfbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hX2FkZF9jcHUoaW50IGNwdSwgaW50IG5vZGUpCXsgfQorc3RhdGljIGlubGluZSB2b2lkIG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQkJeyB9CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X05VTUFfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4YmQzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBXcml0dGVuIGJ5OiBQYXRyaWNpYSBHYXVnaGVuLCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIElCTSBDb3JwLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogU2VuZCBmZWVkYmFjayB0byA8Z29uZUB1cy5pYm0uY29tPgorICovCisKKyNpZm5kZWYgX0FTTV9YODZfTlVNQVFfSAorI2RlZmluZSBfQVNNX1g4Nl9OVU1BUV9ICisKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisKK2V4dGVybiBpbnQgZm91bmRfbnVtYXE7CitleHRlcm4gaW50IGdldF9tZW1jZmdfbnVtYXEodm9pZCk7CisKKy8qCisgKiBTWVNfQ0ZHX0RBVEFfUFJJVl9BRERSLCBzdHJ1Y3QgZWFjaHF1YWRtZW0sIGFuZCBzdHJ1Y3Qgc3lzX2NmZ19kYXRhIGFyZSB0aGUKKyAqLworI2RlZmluZSBTWVNfQ0ZHX0RBVEFfUFJJVl9BRERSCQkweDAwMDlkMDAwIC8qIHBsYWNlIGZvciBzY2QgaW4gcHJpdmF0ZQorCQkJCQkJICAgICAgcXVhZCBzcGFjZSAqLworCisvKgorICogQ29tbXVuaWNhdGlvbiBhcmVhIGZvciBlYWNoIHByb2Nlc3NvciBvbiBseW54ZXItcHJvY2Vzc29yIHRlc3RzLgorICoKKyAqIE5PVEU6IElmIHlvdSBjaGFuZ2UgdGhlIHNpemUgb2YgdGhpcyBlYWNocHJvYyBzdHJ1Y3R1cmUgeW91IG5lZWQKKyAqICAgICAgIHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBmb3IgRUFDSF9RVUFEX1NJWkUuCisgKi8KK3N0cnVjdCBlYWNocXVhZG1lbSB7CisJdW5zaWduZWQgaW50CXByaXZfbWVtX3N0YXJ0OwkJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCisJCQkJCQkvKiBxdWFkJ3MgcHJpdmF0ZSBtZW1vcnkuICovCisJCQkJCQkvKiBUaGlzIGlzIGFsd2F5cyAwLiAqLworCQkJCQkJLyogSW4gTUIuICovCisJdW5zaWduZWQgaW50CXByaXZfbWVtX3NpemU7CQkvKiBTaXplIG9mIHRoaXMgcXVhZCdzICovCisJCQkJCQkvKiBwcml2YXRlIG1lbW9yeS4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAlsb3dfc2hyZF9tZW1fc3RycF9zdGFydDsvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KKwkJCQkJCS8qIHF1YWQncyBsb3cgc2hhcmVkIGJsb2NrICovCisJCQkJCQkvKiAodW50cmFuc2xhdGVkKS4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAlsb3dfc2hyZF9tZW1fc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIGxvdyBzaGFyZWQgbWVtb3J5ICovCisJCQkJCQkvKiAodW50cmFuc2xhdGVkKS4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAlsb3dfc2hyZF9tZW1fc2l6ZTsJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyBsb3cgKi8KKwkJCQkJCS8qIHNoYXJlZCBtZW1vcnkuICovCisJCQkJCQkvKiBJbiBNQi4gKi8KKwl1bnNpZ25lZCBpbnQJbG1taW9fY29wYl9zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCisJCQkJCQkvKiBxdWFkJ3MgbG9jYWwgbWVtb3J5ICovCisJCQkJCQkvKiBtYXBwZWQgSS9PIGluIHRoZSAqLworCQkJCQkJLyogY29tcGF0aWJpbGl0eSBPUEIuICovCisJCQkJCQkvKiBJbiBNQi4gKi8KKwl1bnNpZ25lZCBpbnQJbG1taW9fY29wYl9zaXplOwkvKiBTaXplIG9mIHRoaXMgcXVhZCdzIGxvY2FsICovCisJCQkJCQkvKiBtZW1vcnkgbWFwcGVkIEkvTyBpbiB0aGUgKi8KKwkJCQkJCS8qIGNvbXBhdGliaWxpdHkgT1BCLiAqLworCQkJCQkJLyogSW4gTUIuICovCisJdW5zaWduZWQgaW50CWxtbWlvX25vcGJfc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIGxvY2FsIG1lbW9yeSAqLworCQkJCQkJLyogbWFwcGVkIEkvTyBpbiB0aGUgKi8KKwkJCQkJCS8qIG5vbi1jb21wYXRpYmlsaXR5IE9QQi4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAlsbW1pb19ub3BiX3NpemU7CS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgbG9jYWwgKi8KKwkJCQkJCS8qIG1lbW9yeSBtYXBwZWQgSS9PIGluIHRoZSAqLworCQkJCQkJLyogbm9uLWNvbXBhdGliaWxpdHkgT1BCLiAqLworCQkJCQkJLyogSW4gTUIuICovCisJdW5zaWduZWQgaW50CWlvX2FwaWNfMF9zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiBJL08gKi8KKwkJCQkJCS8qIEFQSUMgMC4gKi8KKwl1bnNpZ25lZCBpbnQJaW9fYXBpY18wX3N6OwkJLyogU2l6ZSBJL08gQVBJQyAwLiAqLworCXVuc2lnbmVkIGludAlpb19hcGljXzFfc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgSS9PICovCisJCQkJCQkvKiBBUElDIDEuICovCisJdW5zaWduZWQgaW50CWlvX2FwaWNfMV9zejsJCS8qIFNpemUgSS9PIEFQSUMgMS4gKi8KKwl1bnNpZ25lZCBpbnQJaGlfc2hyZF9tZW1fc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIGhpZ2ggc2hhcmVkIG1lbW9yeS4qLworCQkJCQkJLyogSW4gTUIuICovCisJdW5zaWduZWQgaW50CWhpX3NocmRfbWVtX3NpemU7CS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgaGlnaCAqLworCQkJCQkJLyogc2hhcmVkIG1lbW9yeS4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAltcHNfdGFibGVfYWRkcjsJCS8qIEFkZHJlc3Mgb2YgdGhpcyBxdWFkJ3MgKi8KKwkJCQkJCS8qIE1QUyB0YWJsZXMgZnJvbSBCSU9TLCAqLworCQkJCQkJLyogaW4gc3lzdGVtIHNwYWNlLiovCisJdW5zaWduZWQgaW50CWxjbF9NRENfcGlvX2FkZHI7CS8qIFBvcnQtSS9PIGFkZHJlc3MgZm9yICovCisJCQkJCQkvKiBsb2NhbCBhY2Nlc3Mgb2YgTURDLiAqLworCXVuc2lnbmVkIGludAlybXRfTURDX21tcGlvX2FkZHI7CS8qIE1NLVBvcnQtSS9PIGFkZHJlc3MgZm9yICovCisJCQkJCQkvKiByZW1vdGUgYWNjZXNzIG9mIE1EQy4gKi8KKwl1bnNpZ25lZCBpbnQJbW1fcG9ydF9pb19zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCisJCQkJCQkvKiBxdWFkJ3MgbWVtb3J5IG1hcHBlZCBQb3J0ICovCisJCQkJCQkvKiBJL08gc3BhY2UuICovCisJdW5zaWduZWQgaW50CW1tX3BvcnRfaW9fc2l6ZTsJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyBtZW1vcnkqLworCQkJCQkJLyogbWFwcGVkIFBvcnQgSS9PIHNwYWNlLiAqLworCXVuc2lnbmVkIGludAltbV9ybXRfaW9fYXBpY19zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCisJCQkJCQkvKiBxdWFkJ3MgbWVtb3J5IG1hcHBlZCAqLworCQkJCQkJLyogcmVtb3RlIEkvTyBBUElDIHNwYWNlLiAqLworCXVuc2lnbmVkIGludAltbV9ybXRfaW9fYXBpY19zaXplOwkvKiBTaXplIG9mIHRoaXMgcXVhZCdzIG1lbW9yeSovCisJCQkJCQkvKiBtYXBwZWQgcmVtb3RlIEkvTyBBUElDICovCisJCQkJCQkvKiBzcGFjZS4gKi8KKwl1bnNpZ25lZCBpbnQJbW1faXNhX3N0YXJ0OwkJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCisJCQkJCQkvKiBxdWFkJ3MgbWVtb3J5IG1hcHBlZCBJU0EgKi8KKwkJCQkJCS8qIHNwYWNlIChjb250YWlucyBNREMgKi8KKwkJCQkJCS8qIG1lbW9yeSBzcGFjZSkuICovCisJdW5zaWduZWQgaW50CW1tX2lzYV9zaXplOwkJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyBtZW1vcnkqLworCQkJCQkJLyogbWFwcGVkIElTQSBzcGFjZSAoY29udGFpbnMqLworCQkJCQkJLyogTURDIG1lbW9yeSBzcGFjZSkuICovCisJdW5zaWduZWQgaW50CXJtdF9xbWlfYWRkcjsJCS8qIFJlbW90ZSBhZGRyIHRvIGFjY2VzcyBRTUkuKi8KKwl1bnNpZ25lZCBpbnQJbGNsX3FtaV9hZGRyOwkJLyogTG9jYWwgYWRkciB0byBhY2Nlc3MgUU1JLiAqLworfTsKKworLyoKKyAqIE5vdGU6IFRoaXMgc3RydWN0dXJlIG11c3QgYmUgTk9UIGJlIGNoYW5nZWQgdW5sZXNzIHRoZSBtdWx0aXByb2MgYW5kCisgKiBPUyBhcmUgY2hhbmdlZCB0byByZWZsZWN0IHRoZSBuZXcgc3RydWN0dXJlLgorICovCitzdHJ1Y3Qgc3lzX2NmZ19kYXRhIHsKKwl1bnNpZ25lZCBpbnQJcXVhZF9pZDsKKwl1bnNpZ25lZCBpbnQJYnNwX3Byb2NfaWQ7IC8qIEJvb3QgU3RyYXAgUHJvY2Vzc29yIGluIHRoaXMgcXVhZC4gKi8KKwl1bnNpZ25lZCBpbnQJc2NkX3ZlcnNpb247IC8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgdGFibGUuICovCisJdW5zaWduZWQgaW50CWZpcnN0X3F1YWRfaWQ7CisJdW5zaWduZWQgaW50CXF1YWRzX3ByZXNlbnQzMV8wOyAvKiAxIGJpdCBmb3IgZWFjaCBxdWFkICovCisJdW5zaWduZWQgaW50CXF1YWRzX3ByZXNlbnQ2M18zMjsgLyogMSBiaXQgZm9yIGVhY2ggcXVhZCAqLworCXVuc2lnbmVkIGludAljb25maWdfZmxhZ3M7CisJdW5zaWduZWQgaW50CWJvb3RfZmxhZ3M7CisJdW5zaWduZWQgaW50CWNzcl9zdGFydF9hZGRyOyAvKiBBYnNvbHV0ZSB2YWx1ZSAobm90IGluIE1CKSAqLworCXVuc2lnbmVkIGludAljc3Jfc2l6ZTsgLyogQWJzb2x1dGUgdmFsdWUgKG5vdCBpbiBNQikgKi8KKwl1bnNpZ25lZCBpbnQJbGNsX2FwaWNfc3RhcnRfYWRkcjsgLyogQWJzb2x1dGUgdmFsdWUgKG5vdCBpbiBNQikgKi8KKwl1bnNpZ25lZCBpbnQJbGNsX2FwaWNfc2l6ZTsgLyogQWJzb2x1dGUgdmFsdWUgKG5vdCBpbiBNQikgKi8KKwl1bnNpZ25lZCBpbnQJbG93X3NocmRfbWVtX2Jhc2U7IC8qIDAgb3IgNTEyTUIgb3IgMUdCICovCisJdW5zaWduZWQgaW50CWxvd19zaHJkX21lbV9xdWFkX29mZnNldDsgLyogMCwxMjhNLDI1Nk0sNTEyTSwxRyAqLworCQkJCQkvKiBtYXkgbm90IGJlIHRvdGFsbHkgcG9wdWxhdGVkICovCisJdW5zaWduZWQgaW50CXNwbGl0X21lbV9lbmJsOyAvKiAwIGZvciBubyBsb3cgc2hhcmVkIG1lbW9yeSAqLworCXVuc2lnbmVkIGludAltbWlvX3N6OyAvKiBTaXplIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnkgbWFwcGVkIEkvTyAqLworCQkJCSAvKiAoaW4gTUIpLiAqLworCXVuc2lnbmVkIGludAlxdWFkX3NwaW5fbG9jazsgLyogU3BhcmUgbG9jYXRpb24gdXNlZCBmb3IgcXVhZCAqLworCQkJCQkvKiBicmluZ3VwLiAqLworCXVuc2lnbmVkIGludAlub256ZXJvNTU7IC8qIEZvciBjaGVja3N1bW1pbmcuICovCisJdW5zaWduZWQgaW50CW5vbnplcm9hYTsgLyogRm9yIGNoZWNrc3VtbWluZy4gKi8KKwl1bnNpZ25lZCBpbnQJc2NkX21hZ2ljX251bWJlcjsKKwl1bnNpZ25lZCBpbnQJc3lzdGVtX3R5cGU7CisJdW5zaWduZWQgaW50CWNoZWNrc3VtOworCS8qCisJICoJbWVtb3J5IGNvbmZpZ3VyYXRpb24gYXJlYSBmb3IgZWFjaCBxdWFkCisJICovCisJc3RydWN0CQllYWNocXVhZG1lbSBlcVtNQVhfTlVNTk9ERVNdOwkvKiBpbmRleGVkIGJ5IHF1YWQgaWQgKi8KK307CisKK3ZvaWQgbnVtYXFfdHNjX2Rpc2FibGUodm9pZCk7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBnZXRfbWVtY2ZnX251bWFxKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9OVU1BUSAqLworI2VuZGlmIC8qIF9BU01fWDg2X05VTUFRX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvYXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZjJhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljLmgKQEAgLTAsMCArMSwxMzYgQEAKKyNpZm5kZWYgX19BU01fTlVNQVFfQVBJQ19ICisjZGVmaW5lIF9fQVNNX05VTUFRX0FQSUNfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KKworI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKKworc3RhdGljIGlubGluZSBjcHVtYXNrX3QgdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gQ1BVX01BU0tfQUxMOworfQorCisjZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgxKQorI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKKworI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSBkZXN0X0xvd2VzdFByaW8KKyNkZWZpbmUgSU5UX0RFU1RfTU9ERSAwICAgICAvKiBwaHlzaWNhbCBkZWxpdmVyeSBvbiBMT0NBTCBxdWFkICovCisgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChhcGljaWQsIGJpdG1hcCk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorI2RlZmluZSBhcGljaWRfY2x1c3RlcihhcGljaWQpIChhcGljaWQgJiAweEYwKQorCitzdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKK3sKKwkvKiBBbHJlYWR5IGRvbmUgaW4gTlVNQS1RIGZpcm13YXJlICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKK3sKKwlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQkiTlVNQS1RIiwgbnJfaW9hcGljcyk7Cit9CisKKy8qCisgKiBTa2lwIGFkZGluZyB0aGUgdGltZXIgaW50IG9uIHNlY29uZGFyeSBub2Rlcywgd2hpY2ggY2F1c2VzCisgKiBhIHNtYWxsIGJ1dCBwYWluZnVsIHJpZnQgaW4gdGhlIHRpbWUtc3BhY2UgY29udGludXVtLgorICovCitzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKK3sKKwlyZXR1cm4gYXBpYyAhPSAwICYmIGlycSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCit7CisJLyogV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLworCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhGVUwpOworfQorCisvKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLworZXh0ZXJuIHU4IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW107CitzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKK3sKKyAgICAgICBpZiAoY3B1ID49IE5SX0NQVVMpCisJICAgICAgIHJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiAoaW50KWNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07Cit9CisKKy8qCisgKiBTdXBwb3J0aW5nIG92ZXIgNjAgY3B1cyBvbiBOVU1BLVEgcmVxdWlyZXMgYSBsb2NhbGl0eS1kZXBlbmRlbnQKKyAqIGNwdSB0byBBUElDIElEIHJlbGF0aW9uIHRvIHByb3Blcmx5IGludGVyYWN0IHdpdGggdGhlIGludGVsbGlnZW50CisgKiBtb2RlIG9mIHRoZSBjbHVzdGVyIGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKK3sKKwlpZiAobXBzX2NwdSA8IDYwKQorCQlyZXR1cm4gKChtcHNfY3B1ID4+IDIpIDw8IDQpIHwgKDEgPDwgKG1wc19jcHUgJiAweDMpKTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpIAoreworCXJldHVybiBsb2dpY2FsX2FwaWNpZCA+PiA0OworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBsb2dpY2FsX2FwaWNpZCkKK3sKKwlpbnQgbm9kZSA9IGFwaWNpZF90b19ub2RlKGxvZ2ljYWxfYXBpY2lkKTsKKwlpbnQgY3B1ID0gX19mZnMobG9naWNhbF9hcGljaWQgJiAweGYpOworCisJcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZChjcHUgKyA0Km5vZGUpOworfQorCitleHRlcm4gdm9pZCAqeHF1YWRfcG9ydGlvOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCit7CisJaW50IG51bV9xdWFkcyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKKworCWlmIChudW1fcXVhZHMgPD0gMSkKKyAgICAgICAJCXJldHVybjsKKworCXByaW50aygiUmVtYXBwaW5nIGNyb3NzLXF1YWQgcG9ydCBJL08gZm9yICVkIHF1YWRzXG4iLCBudW1fcXVhZHMpOworCXhxdWFkX3BvcnRpbyA9IGlvcmVtYXAoWFFVQURfUE9SVElPX0JBU0UsIG51bV9xdWFkcypYUVVBRF9QT1JUSU9fUVVBRCk7CisJcHJpbnRrKCJ4cXVhZF9wb3J0aW8gdmFkZHIgMHglMDhseCwgbGVuICUwOGx4XG4iLAorCQkodV9sb25nKSB4cXVhZF9wb3J0aW8sICh1X2xvbmcpIG51bV9xdWFkcypYUVVBRF9QT1JUSU9fUVVBRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQoreworfQorCisvKgorICogV2UgdXNlIHBoeXNpY2FsIGFwaWNpZHMgaGVyZSwgbm90IGxvZ2ljYWwsIHNvIGp1c3QgcmV0dXJuIHRoZSBkZWZhdWx0CisgKiBwaHlzaWNhbCBicm9hZGNhc3QgdG8gc3RvcCBwZW9wbGUgZnJvbSBicmVha2luZyB1cworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCit7CisJcmV0dXJuIChpbnQpIDB4RjsKK30KKworLyogTm8gTlVNQS1RIGJveCBoYXMgYSBIVCBDUFUsIGJ1dCBpdCBjYW4ndCBodXJ0IHRvIHVzZSB0aGUgZGVmYXVsdCBjb2RlLiAqLworc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOworfQorCisjZW5kaWYgLyogX19BU01fTlVNQVFfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvYXBpY2RlZi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpY2RlZi5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljZGVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS9pcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2lwaS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvbnVtYXEvaXBpLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2lwaS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbnVtYXEvbXBwYXJzZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvbXBwYXJzZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvbnVtYXEvbXBwYXJzZS5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9tcHBhcnNlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS93YWtlY3B1LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9udW1hcS93YWtlY3B1LmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL3dha2VjcHUuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNGEzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qIE9MUEMgbWFjaGluZSBzcGVjaWZpYyBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIF9BU01fWDg2X09MUENfSAorI2RlZmluZSBfQVNNX1g4Nl9PTFBDX0gKKworI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgorCitzdHJ1Y3Qgb2xwY19wbGF0Zm9ybV90IHsKKwlpbnQgZmxhZ3M7CisJdWludDMyX3QgYm9hcmRyZXY7CisJaW50IGVjdmVyOworfTsKKworI2RlZmluZSBPTFBDX0ZfUFJFU0VOVAkJMHgwMQorI2RlZmluZSBPTFBDX0ZfRENPTgkJMHgwMgorI2RlZmluZSBPTFBDX0ZfVlNBCQkweDA0CisKKyNpZmRlZiBDT05GSUdfT0xQQworCitleHRlcm4gc3RydWN0IG9scGNfcGxhdGZvcm1fdCBvbHBjX3BsYXRmb3JtX2luZm87CisKKy8qCisgKiBPTFBDIGJvYXJkIElEcyBjb250YWluIHRoZSBtYWpvciBidWlsZCBudW1iZXIgd2l0aGluIHRoZSBtYXNrIDB4MGZmMCwKKyAqIGFuZCB0aGUgbWlub3IgYnVpbGQgbnVtYmVyIHdpdGhpbmcgMHgwMDBmLiAgUHJlLWJ1aWxkcyBoYXZlIGEgbWlub3IKKyAqIG51bWJlciBsZXNzIHRoYW4gOCwgYW5kIG5vcm1hbCBidWlsZHMgc3RhcnQgYXQgOC4gIEZvciBleGFtcGxlLCAweDBCMTAKKyAqIGlzIGEgUHJlQjEsIGFuZCAweDBDMTggaXMgYSBDMS4KKyAqLworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG9scGNfYm9hcmQodWludDhfdCBpZCkKK3sKKwlyZXR1cm4gKGlkIDw8IDQpIHwgMHg4OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG9scGNfYm9hcmRfcHJlKHVpbnQ4X3QgaWQpCit7CisJcmV0dXJuIGlkIDw8IDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hY2hpbmVfaXNfb2xwYyh2b2lkKQoreworCXJldHVybiAob2xwY19wbGF0Zm9ybV9pbmZvLmZsYWdzICYgT0xQQ19GX1BSRVNFTlQpID8gMSA6IDA7Cit9CisKKy8qCisgKiBUaGUgRENPTiBpcyBPTFBDJ3MgRGlzcGxheSBDb250cm9sbGVyLiAgSXQgaGFzIGEgbnVtYmVyIG9mIHVuaXF1ZQorICogZmVhdHVyZXMgdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgYWR2YW50YWdlIG9mLi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgb2xwY19oYXNfZGNvbih2b2lkKQoreworCXJldHVybiAob2xwY19wbGF0Zm9ybV9pbmZvLmZsYWdzICYgT0xQQ19GX0RDT04pID8gMSA6IDA7Cit9CisKKy8qCisgKiBUaGUgVlNBIGlzIHNvZnR3YXJlIGZyb20gQU1EIHRoYXQgdHlwaWNhbCBHZW9kZSBiaW9zZXMgd2lsbCBpbmNsdWRlLgorICogSXQgaXMgdXNlZCB0byBlbXVsYXRlIHRoZSBQQ0kgYnVzLCBWR0EsIGV0Yy4gIE9MUEMncyBPcGVuIEZpcm13YXJlIGRvZXMKKyAqIG5vdCBpbmNsdWRlIHRoZSBWU0E7IGluc3RlYWQsIFBDSSBpcyBlbXVsYXRlZCBieSB0aGUga2VybmVsLgorICoKKyAqIFRoZSBWU0EgaXMgZGVzY3JpYmVkIGZ1cnRoZXIgaW4gYXJjaC94ODYvcGNpL29scGMuYy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgb2xwY19oYXNfdnNhKHZvaWQpCit7CisJcmV0dXJuIChvbHBjX3BsYXRmb3JtX2luZm8uZmxhZ3MgJiBPTFBDX0ZfVlNBKSA/IDEgOiAwOworfQorCisvKgorICogVGhlICJNYXNzIFByb2R1Y3Rpb24iIHZlcnNpb24gb2YgT0xQQydzIFhPIGlzIGlkZW50aWZpZWQgYXMgYmVpbmcgbW9kZWwKKyAqIEMyLiAgRHVyaW5nIHRoZSBwcm90b3R5cGUgcGhhc2UsIHRoZSBmb2xsb3dpbmcgbW9kZWxzIChpbiBjaHJvbm9sb2dpY2FsCisgKiBvcmRlcikgd2VyZSBjcmVhdGVkOiBBMSwgQjEsIEIyLCBCMywgQjQsIEMxLiAgVGhlIEExIHRocm91Z2ggQjIgbW9kZWxzCisgKiB3ZXJlIGJhc2VkIG9uIEdlb2RlIEdYIENQVXMsIGFuZCBtb2RlbHMgYWZ0ZXIgdGhhdCB3ZXJlIGJhc2VkIHVwb24KKyAqIEdlb2RlIExYIENQVXMuICBUaGVyZSB3ZXJlIGFsc28gc29tZSBoYW5kLWFzc2VtYmxlZCBtb2RlbHMgZmxvYXRpbmcKKyAqIGFyb3VuZCwgcmVmZXJyZWQgdG8gYXMgUHJlQjEsIFByZUIyLCBldGMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9scGNfYm9hcmRfYXRfbGVhc3QodWludDMyX3QgcmV2KQoreworCXJldHVybiBvbHBjX3BsYXRmb3JtX2luZm8uYm9hcmRyZXYgPj0gcmV2OworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBtYWNoaW5lX2lzX29scGModm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2xwY19oYXNfZGNvbih2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBvbHBjX2hhc192c2Eodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKy8qIEVDIHJlbGF0ZWQgZnVuY3Rpb25zICovCisKK2V4dGVybiBpbnQgb2xwY19lY19jbWQodW5zaWduZWQgY2hhciBjbWQsIHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5sZW4sCisJCXVuc2lnbmVkIGNoYXIgKm91dGJ1Ziwgc2l6ZV90IG91dGxlbik7CisKK2V4dGVybiBpbnQgb2xwY19lY19tYXNrX3NldCh1aW50OF90IGJpdHMpOworZXh0ZXJuIGludCBvbHBjX2VjX21hc2tfdW5zZXQodWludDhfdCBiaXRzKTsKKworLyogRUMgY29tbWFuZHMgKi8KKworI2RlZmluZSBFQ19GSVJNV0FSRV9SRVYJCTB4MDgKKworLyogU0NJIHNvdXJjZSB2YWx1ZXMgKi8KKworI2RlZmluZSBFQ19TQ0lfU1JDX0VNUFRZCTB4MDAKKyNkZWZpbmUgRUNfU0NJX1NSQ19HQU1FCQkweDAxCisjZGVmaW5lIEVDX1NDSV9TUkNfQkFUVEVSWQkweDAyCisjZGVmaW5lIEVDX1NDSV9TUkNfQkFUU09DCTB4MDQKKyNkZWZpbmUgRUNfU0NJX1NSQ19CQVRFUlIJMHgwOAorI2RlZmluZSBFQ19TQ0lfU1JDX0VCT09LCTB4MTAKKyNkZWZpbmUgRUNfU0NJX1NSQ19XTEFOCQkweDIwCisjZGVmaW5lIEVDX1NDSV9TUkNfQUNQV1IJMHg0MAorI2RlZmluZSBFQ19TQ0lfU1JDX0FMTAkJMHg3RgorCisvKiBHUElPIGFzc2lnbm1lbnRzICovCisKKyNkZWZpbmUgT0xQQ19HUElPX01JQ19BQwlnZW9kZV9ncGlvKDEpCisjZGVmaW5lIE9MUENfR1BJT19EQ09OX0lSUQlnZW9kZV9ncGlvKDcpCisjZGVmaW5lIE9MUENfR1BJT19USFJNX0FMUk0JZ2VvZGVfZ3BpbygxMCkKKyNkZWZpbmUgT0xQQ19HUElPX1NNQl9DTEsJZ2VvZGVfZ3BpbygxNCkKKyNkZWZpbmUgT0xQQ19HUElPX1NNQl9EQVRBCWdlb2RlX2dwaW8oMTUpCisjZGVmaW5lIE9MUENfR1BJT19XT1JLQVVYCWdlb2RlX2dwaW8oMjQpCisjZGVmaW5lIE9MUENfR1BJT19MSUQJCWdlb2RlX2dwaW8oMjYpCisjZGVmaW5lIE9MUENfR1BJT19FQ1NDSQkJZ2VvZGVfZ3BpbygyNykKKworI2VuZGlmIC8qIF9BU01fWDg2X09MUENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODczYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTAsMCArMSwyMDkgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFHRV9ICisjZGVmaW5lIF9BU01fWDg2X1BBR0VfSAorCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgorI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLFVMKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIF9fUEhZU0lDQUxfTUFTSwkJKChwaHlzX2FkZHJfdCkoMVVMTCA8PCBfX1BIWVNJQ0FMX01BU0tfU0hJRlQpIC0gMSkKKyNkZWZpbmUgX19WSVJUVUFMX01BU0sJCSgoMVVMIDw8IF9fVklSVFVBTF9NQVNLX1NISUZUKSAtIDEpCisKKy8qIENhc3QgUEFHRV9NQVNLIHRvIGEgc2lnbmVkIHR5cGUgc28gdGhhdCBpdCBpcyBzaWduLWV4dGVuZGVkIGlmCisgICB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgMzItYml0cyBidXQgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSBsYXJnZXIKKyAgIChpZSwgMzItYml0IFBBRSkuICovCisjZGVmaW5lIFBIWVNJQ0FMX1BBR0VfTUFTSwkoKChzaWduZWQgbG9uZylQQUdFX01BU0spICYgX19QSFlTSUNBTF9NQVNLKQorCisvKiBQVEVfUEZOX01BU0sgZXh0cmFjdHMgdGhlIFBGTiBmcm9tIGEgKHB0ZXxwbWR8cHVkfHBnZCl2YWxfdCAqLworI2RlZmluZSBQVEVfUEZOX01BU0sJCSgocHRldmFsX3QpUEhZU0lDQUxfUEFHRV9NQVNLKQorCisvKiBQVEVfRkxBR1NfTUFTSyBleHRyYWN0cyB0aGUgZmxhZ3MgZnJvbSBhIChwdGV8cG1kfHB1ZHxwZ2QpdmFsX3QgKi8KKyNkZWZpbmUgUFRFX0ZMQUdTX01BU0sJCSh+UFRFX1BGTl9NQVNLKQorCisjZGVmaW5lIFBNRF9QQUdFX1NJWkUJCShfQUMoMSwgVUwpIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX1BBR0VfTUFTSwkJKH4oUE1EX1BBR0VfU0laRS0xKSkKKworI2RlZmluZSBIUEFHRV9TSElGVAkJUE1EX1NISUZUCisjZGVmaW5lIEhQQUdFX1NJWkUJCShfQUMoMSxVTCkgPDwgSFBBR0VfU0hJRlQpCisjZGVmaW5lIEhQQUdFX01BU0sJCSh+KEhQQUdFX1NJWkUgLSAxKSkKKyNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgSFVHRV9NQVhfSFNUQVRFIDIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjaW5jbHVkZSA8YXNtL3BhZ2VfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL3BhZ2VfMzIuaD4KKyNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCSgodW5zaWduZWQgbG9uZylfX1BBR0VfT0ZGU0VUKQorCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUyBcCisJKCgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAorCSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHsgcGdkdmFsX3QgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyBwZ3Byb3R2YWxfdCBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKK2V4dGVybiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpOworZXh0ZXJuIGludCBwYWdlcmFuZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOworZXh0ZXJuIHZvaWQgbWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgcGdwcm90X3Qgdm1hX3Byb3QpOworZXh0ZXJuIHZvaWQgdW5tYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgcGdwcm90X3Qgdm1hX3Byb3QpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuX21hcHBlZDsKKworc3RydWN0IHBhZ2U7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwkJCQlzdHJ1Y3QgcGFnZSAqcGcpCit7CisJY2xlYXJfcGFnZShwYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJCXN0cnVjdCBwYWdlICp0b3BhZ2UpCit7CisJY29weV9wYWdlKHRvLCBmcm9tKTsKK30KKworI2RlZmluZSBfX2FsbG9jX3plcm9lZF91c2VyX2hpZ2hwYWdlKG1vdmFibGVmbGFncywgdm1hLCB2YWRkcikgXAorCWFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8gfCBtb3ZhYmxlZmxhZ3MsIHZtYSwgdmFkZHIpCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKK3N0YXRpYyBpbmxpbmUgcGdkX3QgbmF0aXZlX21ha2VfcGdkKHBnZHZhbF90IHZhbCkKK3sKKwlyZXR1cm4gKHBnZF90KSB7IHZhbCB9OworfQorCitzdGF0aWMgaW5saW5lIHBnZHZhbF90IG5hdGl2ZV9wZ2RfdmFsKHBnZF90IHBnZCkKK3sKKwlyZXR1cm4gcGdkLnBnZDsKK30KKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPj0gMworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAordHlwZWRlZiBzdHJ1Y3QgeyBwdWR2YWxfdCBwdWQ7IH0gcHVkX3Q7CisKK3N0YXRpYyBpbmxpbmUgcHVkX3QgbmF0aXZlX21ha2VfcHVkKHBtZHZhbF90IHZhbCkKK3sKKwlyZXR1cm4gKHB1ZF90KSB7IHZhbCB9OworfQorCitzdGF0aWMgaW5saW5lIHB1ZHZhbF90IG5hdGl2ZV9wdWRfdmFsKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gcHVkLnB1ZDsKK30KKyNlbHNlCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gMyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworc3RhdGljIGlubGluZSBwdWR2YWxfdCBuYXRpdmVfcHVkX3ZhbChwdWRfdCBwdWQpCit7CisJcmV0dXJuIG5hdGl2ZV9wZ2RfdmFsKHB1ZC5wZ2QpOworfQorI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLworCit0eXBlZGVmIHN0cnVjdCB7IHBtZHZhbF90IHBtZDsgfSBwbWRfdDsKKworc3RhdGljIGlubGluZSBwbWRfdCBuYXRpdmVfbWFrZV9wbWQocG1kdmFsX3QgdmFsKQoreworCXJldHVybiAocG1kX3QpIHsgdmFsIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgcG1kdmFsX3QgbmF0aXZlX3BtZF92YWwocG1kX3QgcG1kKQoreworCXJldHVybiBwbWQucG1kOworfQorI2Vsc2UgIC8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gMiAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKworc3RhdGljIGlubGluZSBwbWR2YWxfdCBuYXRpdmVfcG1kX3ZhbChwbWRfdCBwbWQpCit7CisJcmV0dXJuIG5hdGl2ZV9wZ2RfdmFsKHBtZC5wdWQucGdkKTsKK30KKyNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID49IDMgKi8KKworc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfbWFrZV9wdGUocHRldmFsX3QgdmFsKQoreworCXJldHVybiAocHRlX3QpIHsgLnB0ZSA9IHZhbCB9OworfQorCitzdGF0aWMgaW5saW5lIHB0ZXZhbF90IG5hdGl2ZV9wdGVfdmFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlLnB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGV2YWxfdCBuYXRpdmVfcHRlX2ZsYWdzKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gbmF0aXZlX3B0ZV92YWwocHRlKSAmIFBURV9GTEFHU19NQVNLOworfQorCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQorCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLworCisjZGVmaW5lIHBnZF92YWwoeCkJbmF0aXZlX3BnZF92YWwoeCkKKyNkZWZpbmUgX19wZ2QoeCkJbmF0aXZlX21ha2VfcGdkKHgpCisKKyNpZm5kZWYgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAorI2RlZmluZSBwdWRfdmFsKHgpCW5hdGl2ZV9wdWRfdmFsKHgpCisjZGVmaW5lIF9fcHVkKHgpCW5hdGl2ZV9tYWtlX3B1ZCh4KQorI2VuZGlmCisKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAorI2RlZmluZSBwbWRfdmFsKHgpCW5hdGl2ZV9wbWRfdmFsKHgpCisjZGVmaW5lIF9fcG1kKHgpCW5hdGl2ZV9tYWtlX3BtZCh4KQorI2VuZGlmCisKKyNkZWZpbmUgcHRlX3ZhbCh4KQluYXRpdmVfcHRlX3ZhbCh4KQorI2RlZmluZSBwdGVfZmxhZ3MoeCkJbmF0aXZlX3B0ZV9mbGFncyh4KQorI2RlZmluZSBfX3B0ZSh4KQluYXRpdmVfbWFrZV9wdGUoeCkKKworI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLworCisjZGVmaW5lIF9fcGEoeCkJCV9fcGh5c19hZGRyKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgX19wYV9ub2RlYnVnKHgpCV9fcGh5c19hZGRyX25vZGVidWcoKHVuc2lnbmVkIGxvbmcpKHgpKQorLyogX19wYV9zeW1ib2wgc2hvdWxkIGJlIHVzZWQgZm9yIEMgdmlzaWJsZSBzeW1ib2xzLgorICAgVGhpcyBzZWVtcyB0byBiZSB0aGUgb2ZmaWNpYWwgZ2NjIGJsZXNzZWQgd2F5IHRvIGRvIHN1Y2ggYXJpdGhtZXRpYy4gKi8KKyNkZWZpbmUgX19wYV9zeW1ib2woeCkJX19wYShfX3BoeXNfcmVsb2NfaGlkZSgodW5zaWduZWQgbG9uZykoeCkpKQorCisjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpK1BBR0VfT0ZGU0VUKSkKKworI2RlZmluZSBfX2Jvb3RfdmEoeCkJCV9fdmEoeCkKKyNkZWZpbmUgX19ib290X3BhKHgpCQlfX3BhKHgpCisKKy8qCisgKiB2aXJ0X3RvX3BhZ2Uoa2FkZHIpIHJldHVybnMgYSB2YWxpZCBwb2ludGVyIGlmIGFuZCBvbmx5IGlmCisgKiB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpIHJldHVybnMgdHJ1ZS4KKyAqLworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pICAgICAgX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQorZXh0ZXJuIGJvb2wgX192aXJ0X2FkZHJfdmFsaWQodW5zaWduZWQgbG9uZyBrYWRkcik7CisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJX192aXJ0X2FkZHJfdmFsaWQoKHVuc2lnbmVkIGxvbmcpIChrYWRkcikpCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhZ2UuaD4KKworI2RlZmluZSBfX0hBVkVfQVJDSF9HQVRFX0FSRUEgMQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fWDg2X1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZGUwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKQEAgLTAsMCArMSwxMzYgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFHRV8zMl9ICisjZGVmaW5lIF9BU01fWDg2X1BBR0VfMzJfSAorCisvKgorICogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLgorICoKKyAqIEEgX19QQUdFX09GRlNFVCBvZiAweEMwMDAwMDAwIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBoYXMKKyAqIGEgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIG9uZSBnaWdhYnl0ZSwgd2hpY2ggbGltaXRzIHRoZQorICogYW1vdW50IG9mIHBoeXNpY2FsIG1lbW9yeSB5b3UgY2FuIHVzZSB0byBhYm91dCA5NTBNQi4KKyAqCisgKiBJZiB5b3Ugd2FudCBtb3JlIHBoeXNpY2FsIG1lbW9yeSB0aGFuIHRoaXMgdGhlbiBzZWUgdGhlIENPTkZJR19ISUdITUVNNEcKKyAqIGFuZCBDT05GSUdfSElHSE1FTTY0RyBvcHRpb25zIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAqLworI2RlZmluZSBfX1BBR0VfT0ZGU0VUCQlfQUMoQ09ORklHX1BBR0VfT0ZGU0VULCBVTCkKKworI2lmZGVmIENPTkZJR180S1NUQUNLUworI2RlZmluZSBUSFJFQURfT1JERVIJMAorI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX09SREVSCTEKKyNlbmRpZgorI2RlZmluZSBUSFJFQURfU0laRSAJKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCisKKyNkZWZpbmUgU1RBQ0tGQVVMVF9TVEFDSyAwCisjZGVmaW5lIERPVUJMRUZBVUxUX1NUQUNLIDEKKyNkZWZpbmUgTk1JX1NUQUNLIDAKKyNkZWZpbmUgREVCVUdfU1RBQ0sgMAorI2RlZmluZSBNQ0VfU1RBQ0sgMAorI2RlZmluZSBOX0VYQ0VQVElPTl9TVEFDS1MgMQorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKy8qIDQ0PTMyKzEyLCB0aGUgbGltaXQgd2UgY2FuIGZpdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcgcGZuICovCisjZGVmaW5lIF9fUEhZU0lDQUxfTUFTS19TSElGVAk0NAorI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAkzMgorI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgdTY0CXB0ZXZhbF90OwordHlwZWRlZiB1NjQJcG1kdmFsX3Q7Cit0eXBlZGVmIHU2NAlwdWR2YWxfdDsKK3R5cGVkZWYgdTY0CXBnZHZhbF90OwordHlwZWRlZiB1NjQJcGdwcm90dmFsX3Q7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgcHRlX2xvdywgcHRlX2hpZ2g7CisJfTsKKwlwdGV2YWxfdCBwdGU7Cit9IHB0ZV90OworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXworICovCisjZWxzZSAgLyogIUNPTkZJR19YODZfUEFFICovCisjZGVmaW5lIF9fUEhZU0lDQUxfTUFTS19TSElGVAkzMgorI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAkzMgorI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwdGV2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwbWR2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwdWR2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ2R2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ3Byb3R2YWxfdDsKKwordHlwZWRlZiB1bmlvbiB7CisJcHRldmFsX3QgcHRlOworCXB0ZXZhbF90IHB0ZV9sb3c7Cit9IHB0ZV90OworCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorI2RlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgX19waHlzX2FkZHJfbm9kZWJ1Zyh4KQkoKHgpIC0gUEFHRV9PRkZTRVQpCisjaWZkZWYgQ09ORklHX0RFQlVHX1ZJUlRVQUwKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcpOworI2Vsc2UKKyNkZWZpbmUgX19waHlzX2FkZHIoeCkJCV9fcGh5c19hZGRyX25vZGVidWcoeCkKKyNlbmRpZgorI2RlZmluZSBfX3BoeXNfcmVsb2NfaGlkZSh4KQlSRUxPQ19ISURFKCh4KSwgMCkKKworI2lmZGVmIENPTkZJR19GTEFUTUVNCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCisjZW5kaWYgLyogQ09ORklHX0ZMQVRNRU0gKi8KKworZXh0ZXJuIGludCBueF9lbmFibGVkOworCisvKgorICogVGhpcyBtdWNoIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIHZtYWxsb2MoKSBhbmQgaW9tYXAoKQorICogYXMgd2VsbCBhcyBmaXhtYXAgbWFwcGluZ3MuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19WTUFMTE9DX1JFU0VSVkU7CitleHRlcm4gaW50IHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OworCitleHRlcm4gdm9pZCBmaW5kX2xvd19wZm5fcmFuZ2Uodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9ib290bWVtX2FsbG9jYXRvcih2b2lkKTsKKworCisjaWZkZWYgQ09ORklHX1g4Nl9VU0VfM0ROT1cKKyNpbmNsdWRlIDxhc20vbW14Lmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCit7CisJbW14X2NsZWFyX3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pCit7CisJbW14X2NvcHlfcGFnZSh0bywgZnJvbSk7Cit9CisjZWxzZSAgLyogIUNPTkZJR19YODZfVVNFXzNETk9XICovCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCit7CisJbWVtc2V0KHBhZ2UsIDAsIFBBR0VfU0laRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pCit7CisJbWVtY3B5KHRvLCBmcm9tLCBQQUdFX1NJWkUpOworfQorI2VuZGlmCS8qIENPTkZJR19YODZfM0ROT1cgKi8KKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QQUdFXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJjYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIF9BU01fWDg2X1BBR0VfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9QQUdFXzY0X0gKKworI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTQKKworI2RlZmluZSBUSFJFQURfT1JERVIJMQorI2RlZmluZSBUSFJFQURfU0laRSAgKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCisjZGVmaW5lIENVUlJFTlRfTUFTSyAofihUSFJFQURfU0laRSAtIDEpKQorCisjZGVmaW5lIEVYQ0VQVElPTl9TVEFDS19PUkRFUiAwCisjZGVmaW5lIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFIDw8IEVYQ0VQVElPTl9TVEFDS19PUkRFUikKKworI2RlZmluZSBERUJVR19TVEFDS19PUkRFUiAoRVhDRVBUSU9OX1NUQUNLX09SREVSICsgMSkKKyNkZWZpbmUgREVCVUdfU1RLU1ogKFBBR0VfU0laRSA8PCBERUJVR19TVEFDS19PUkRFUikKKworI2RlZmluZSBJUlFTVEFDS19PUkRFUiAyCisjZGVmaW5lIElSUVNUQUNLU0laRSAoUEFHRV9TSVpFIDw8IElSUVNUQUNLX09SREVSKQorCisjZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQorI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyCisjZGVmaW5lIE5NSV9TVEFDSyAzCisjZGVmaW5lIERFQlVHX1NUQUNLIDQKKyNkZWZpbmUgTUNFX1NUQUNLIDUKKyNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCisKKyNkZWZpbmUgUFVEX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQorI2RlZmluZSBQVURfUEFHRV9NQVNLCQkofihQVURfUEFHRV9TSVpFLTEpKQorCisvKgorICogU2V0IF9fUEFHRV9PRkZTRVQgdG8gdGhlIG1vc3QgbmVnYXRpdmUgcG9zc2libGUgYWRkcmVzcyArCisgKiBQR0RJUl9TSVpFKjE2IChwZ2Qgc2xvdCAyNzIpLiAgVGhlIGdhcCBpcyB0byBhbGxvdyBhIHNwYWNlIGZvciBhCisgKiBoeXBlcnZpc29yIHRvIGZpdC4gIENob29zaW5nIDE2IHNsb3RzIGhlcmUgaXMgYXJiaXRyYXJ5LCBidXQgaXQncworICogd2hhdCBYZW4gcmVxdWlyZXMuCisgKi8KKyNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgX0FDKDB4ZmZmZjg4MDAwMDAwMDAwMCwgVUwpCisKKyNkZWZpbmUgX19QSFlTSUNBTF9TVEFSVAlDT05GSUdfUEhZU0lDQUxfU1RBUlQKKyNkZWZpbmUgX19LRVJORUxfQUxJR04JCTB4MjAwMDAwCisKKy8qCisgKiBNYWtlIHN1cmUga2VybmVsIGlzIGFsaWduZWQgdG8gMk1CIGFkZHJlc3MuIENhdGNoaW5nIGl0IGF0IGNvbXBpbGUKKyAqIHRpbWUgaXMgYmV0dGVyLiBDaGFuZ2UgeW91ciBjb25maWcgZmlsZSBhbmQgY29tcGlsZSB0aGUga2VybmVsCisgKiBmb3IgYSAyTUIgYWxpZ25lZCBhZGRyZXNzIChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCisgKi8KKyNpZiAoQ09ORklHX1BIWVNJQ0FMX1NUQVJUICUgX19LRVJORUxfQUxJR04pICE9IDAKKyNlcnJvciAiQ09ORklHX1BIWVNJQ0FMX1NUQVJUIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyTUIiCisjZW5kaWYKKworI2RlZmluZSBfX1NUQVJUX0tFUk5FTAkJKF9fU1RBUlRfS0VSTkVMX21hcCArIF9fUEhZU0lDQUxfU1RBUlQpCisjZGVmaW5lIF9fU1RBUlRfS0VSTkVMX21hcAlfQUMoMHhmZmZmZmZmZjgwMDAwMDAwLCBVTCkKKworLyogU2VlIERvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVtb3J5IG1hcC4gKi8KKyNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ2CisjZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTQ4CisKKy8qCisgKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGxldmVsMl9rZXJuZWxfcGd0IGluCisgKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TKSwgYW5kIGl0IGlzIG1hcHBlZCBoZXJlOgorICovCisjZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgS0VSTkVMX0lNQUdFX1NUQVJUCV9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwordm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOworCisvKiBkdXBsaWNhdGVkIHRvIHRoZSBvbmUgaW4gYm9vdG1lbS5oICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKKyNkZWZpbmUgX19waHlzX3JlbG9jX2hpZGUoeCkJKHgpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHRldmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcG1kdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeyBwdGV2YWxfdCBwdGU7IH0gcHRlX3Q7CisKKyNkZWZpbmUgdm1lbW1hcCAoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOworCitleHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CitleHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CisKK2V4dGVybiB2b2lkIGluaXRfZXh0cmFfbWFwcGluZ191Yyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBpbml0X2V4dHJhX21hcHBpbmdfd2IodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgICAgICAgICAgKChwZm4pIDwgbWF4X3BmbikKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QQUdFXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGQwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhbS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFSQU1fSAorI2RlZmluZSBfQVNNX1g4Nl9QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgKi8KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKSAgICAgICAvKiBpbiAidGlja3MiIGxpa2UgdGltZXMoKSAqLworI2VuZGlmCisKKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFogMTAwCisjZW5kaWYKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhM2UyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC0wLDAgKzEsMTY1MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QQVJBVklSVF9ICisjZGVmaW5lIF9BU01fWDg2X1BBUkFWSVJUX0gKKy8qIFZhcmlvdXMgaW5zdHJ1Y3Rpb25zIG9uIHg4NiBuZWVkIHRvIGJlIHJlcGxhY2VkIGZvcgorICogcGFyYS12aXJ0dWFsaXphdGlvbjogdGhvc2UgaG9va3MgYXJlIGRlZmluZWQgaGVyZS4gKi8KKworI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgorCisvKiBCaXRtYXNrIG9mIHdoYXQgY2FuIGJlIGNsb2JiZXJlZDogdXN1YWxseSBhdCBsZWFzdCBlYXguICovCisjZGVmaW5lIENMQlJfTk9ORSAwCisjZGVmaW5lIENMQlJfRUFYICAoMSA8PCAwKQorI2RlZmluZSBDTEJSX0VDWCAgKDEgPDwgMSkKKyNkZWZpbmUgQ0xCUl9FRFggICgxIDw8IDIpCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIENMQlJfUlNJICAoMSA8PCAzKQorI2RlZmluZSBDTEJSX1JESSAgKDEgPDwgNCkKKyNkZWZpbmUgQ0xCUl9SOCAgICgxIDw8IDUpCisjZGVmaW5lIENMQlJfUjkgICAoMSA8PCA2KQorI2RlZmluZSBDTEJSX1IxMCAgKDEgPDwgNykKKyNkZWZpbmUgQ0xCUl9SMTEgICgxIDw8IDgpCisjZGVmaW5lIENMQlJfQU5ZICAoKDEgPDwgOSkgLSAxKQorI2luY2x1ZGUgPGFzbS9kZXNjX2RlZnMuaD4KKyNlbHNlCisvKiBDTEJSX0FOWSBzaG91bGQgbWF0Y2ggYWxsIHJlZ3MgcGxhdGZvcm0gaGFzLiBGb3IgaTM4NiwgdGhhdCdzIGp1c3QgaXQgKi8KKyNkZWZpbmUgQ0xCUl9BTlkgICgoMSA8PCAzKSAtIDEpCisjZW5kaWYgLyogWDg2XzY0ICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+CisKK3N0cnVjdCBwYWdlOworc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CitzdHJ1Y3QgZGVzY19wdHI7CitzdHJ1Y3QgdHNzX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3QgZGVzY19zdHJ1Y3Q7CisKKy8qIGdlbmVyYWwgaW5mbyAqLworc3RydWN0IHB2X2luZm8geworCXVuc2lnbmVkIGludCBrZXJuZWxfcnBsOworCWludCBzaGFyZWRfa2VybmVsX3BtZDsKKwlpbnQgcGFyYXZpcnRfZW5hYmxlZDsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RydWN0IHB2X2luaXRfb3BzIHsKKwkvKgorCSAqIFBhdGNoIG1heSByZXBsYWNlIG9uZSBvZiB0aGUgZGVmaW5lZCBjb2RlIHNlcXVlbmNlcyB3aXRoCisJICogYXJiaXRyYXJ5IGNvZGUsIHN1YmplY3QgdG8gdGhlIHNhbWUgcmVnaXN0ZXIgY29uc3RyYWludHMuCisJICogVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhlIGNvZGUgaXMgbm90IGZyZWUgdG8gY2xvYmJlciBhbnkKKwkgKiByZWdpc3RlcnMgb3RoZXIgdGhhbiBFQVguICBUaGUgcGF0Y2ggZnVuY3Rpb24gc2hvdWxkIHJldHVybgorCSAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgY29kZSBnZW5lcmF0ZWQsIGFzIHdlIG5vcCBwYWQgdGhlCisJICogcmVzdCBpbiBnZW5lcmljIGNvZGUuCisJICovCisJdW5zaWduZWQgKCpwYXRjaCkodTggdHlwZSwgdTE2IGNsb2JiZXIsIHZvaWQgKmluc25idWYsCisJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKKworCS8qIEJhc2ljIGFyY2gtc3BlY2lmaWMgc2V0dXAgKi8KKwl2b2lkICgqYXJjaF9zZXR1cCkodm9pZCk7CisJY2hhciAqKCptZW1vcnlfc2V0dXApKHZvaWQpOworCXZvaWQgKCpwb3N0X2FsbG9jYXRvcl9pbml0KSh2b2lkKTsKKworCS8qIFByaW50IGEgYmFubmVyIHRvIGlkZW50aWZ5IHRoZSBlbnZpcm9ubWVudCAqLworCXZvaWQgKCpiYW5uZXIpKHZvaWQpOworfTsKKworCitzdHJ1Y3QgcHZfbGF6eV9vcHMgeworCS8qIFNldCBkZWZlcnJlZCB1cGRhdGUgbW9kZSwgdXNlZCBmb3IgYmF0Y2hpbmcgb3BlcmF0aW9ucy4gKi8KKwl2b2lkICgqZW50ZXIpKHZvaWQpOworCXZvaWQgKCpsZWF2ZSkodm9pZCk7Cit9OworCitzdHJ1Y3QgcHZfdGltZV9vcHMgeworCXZvaWQgKCp0aW1lX2luaXQpKHZvaWQpOworCisJLyogU2V0IGFuZCBzZXQgdGltZSBvZiBkYXkgKi8KKwl1bnNpZ25lZCBsb25nICgqZ2V0X3dhbGxjbG9jaykodm9pZCk7CisJaW50ICgqc2V0X3dhbGxjbG9jaykodW5zaWduZWQgbG9uZyk7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcgKCpzY2hlZF9jbG9jaykodm9pZCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF90c2Nfa2h6KSh2b2lkKTsKK307CisKK3N0cnVjdCBwdl9jcHVfb3BzIHsKKwkvKiBob29rcyBmb3IgdmFyaW91cyBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyAqLworCXVuc2lnbmVkIGxvbmcgKCpnZXRfZGVidWdyZWcpKGludCByZWdubyk7CisJdm9pZCAoKnNldF9kZWJ1Z3JlZykoaW50IHJlZ25vLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKKworCXZvaWQgKCpjbHRzKSh2b2lkKTsKKworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMCkodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyMCkodW5zaWduZWQgbG9uZyk7CisKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjRfc2FmZSkodm9pZCk7CisJdW5zaWduZWQgbG9uZyAoKnJlYWRfY3I0KSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfY3I0KSh1bnNpZ25lZCBsb25nKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjgpKHZvaWQpOworCXZvaWQgKCp3cml0ZV9jcjgpKHVuc2lnbmVkIGxvbmcpOworI2VuZGlmCisKKwkvKiBTZWdtZW50IGRlc2NyaXB0b3IgaGFuZGxpbmcgKi8KKwl2b2lkICgqbG9hZF90cl9kZXNjKSh2b2lkKTsKKwl2b2lkICgqbG9hZF9nZHQpKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKTsKKwl2b2lkICgqbG9hZF9pZHQpKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKTsKKwl2b2lkICgqc3RvcmVfZ2R0KShzdHJ1Y3QgZGVzY19wdHIgKik7CisJdm9pZCAoKnN0b3JlX2lkdCkoc3RydWN0IGRlc2NfcHRyICopOworCXZvaWQgKCpzZXRfbGR0KShjb25zdCB2b2lkICpkZXNjLCB1bnNpZ25lZCBlbnRyaWVzKTsKKwl1bnNpZ25lZCBsb25nICgqc3RvcmVfdHIpKHZvaWQpOworCXZvaWQgKCpsb2FkX3Rscykoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHVuc2lnbmVkIGludCBjcHUpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwl2b2lkICgqbG9hZF9nc19pbmRleCkodW5zaWduZWQgaW50IGlkeCk7CisjZW5kaWYKKwl2b2lkICgqd3JpdGVfbGR0X2VudHJ5KShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgaW50IGVudHJ5bnVtLAorCQkJCWNvbnN0IHZvaWQgKmRlc2MpOworCXZvaWQgKCp3cml0ZV9nZHRfZW50cnkpKHN0cnVjdCBkZXNjX3N0cnVjdCAqLAorCQkJCWludCBlbnRyeW51bSwgY29uc3Qgdm9pZCAqZGVzYywgaW50IHNpemUpOworCXZvaWQgKCp3cml0ZV9pZHRfZW50cnkpKGdhdGVfZGVzYyAqLAorCQkJCWludCBlbnRyeW51bSwgY29uc3QgZ2F0ZV9kZXNjICpnYXRlKTsKKwl2b2lkICgqYWxsb2NfbGR0KShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgdW5zaWduZWQgZW50cmllcyk7CisJdm9pZCAoKmZyZWVfbGR0KShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgdW5zaWduZWQgZW50cmllcyk7CisKKwl2b2lkICgqbG9hZF9zcDApKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0KTsKKworCXZvaWQgKCpzZXRfaW9wbF9tYXNrKSh1bnNpZ25lZCBtYXNrKTsKKworCXZvaWQgKCp3YmludmQpKHZvaWQpOworCXZvaWQgKCppb19kZWxheSkodm9pZCk7CisKKwkvKiBjcHVpZCBlbXVsYXRpb24sIG1vc3RseSBzbyB0aGF0IGNhcHMgYml0cyBjYW4gYmUgZGlzYWJsZWQgKi8KKwl2b2lkICgqY3B1aWQpKHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKKwkJICAgICAgdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGludCAqZWR4KTsKKworCS8qIE1TUiwgUE1DIGFuZCBUU1Igb3BlcmF0aW9ucy4KKwkgICBlcnIgPSAwLy1FRkFVTFQuICB3cm1zciByZXR1cm5zIDAvLUVGQVVMVC4gKi8KKwl1NjQgKCpyZWFkX21zcl9hbWQpKHVuc2lnbmVkIGludCBtc3IsIGludCAqZXJyKTsKKwl1NjQgKCpyZWFkX21zcikodW5zaWduZWQgaW50IG1zciwgaW50ICplcnIpOworCWludCAoKndyaXRlX21zcikodW5zaWduZWQgaW50IG1zciwgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKTsKKworCXU2NCAoKnJlYWRfdHNjKSh2b2lkKTsKKwl1NjQgKCpyZWFkX3BtYykoaW50IGNvdW50ZXIpOworCXVuc2lnbmVkIGxvbmcgbG9uZyAoKnJlYWRfdHNjcCkodW5zaWduZWQgaW50ICphdXgpOworCisJLyoKKwkgKiBBdG9taWNhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZXR1cm4gdG8gdXNlcnNwYWNlLiAgVGhpcworCSAqIGlzIG9ubHkgZXZlciB1c2VkIHRvIHJldHVybiB0byAzMi1iaXQgcHJvY2Vzc2VzOyBpbiBhCisJICogNjQtYml0IGtlcm5lbCwgaXQncyB1c2VkIGZvciAzMi1vbi02NCBjb21wYXQgcHJvY2Vzc2VzLCBidXQKKwkgKiBuZXZlciBuYXRpdmUgNjQtYml0IHByb2Nlc3Nlcy4gIChKdW1wLCBub3QgY2FsbC4pCisJICovCisJdm9pZCAoKmlycV9lbmFibGVfc3lzZXhpdCkodm9pZCk7CisKKwkvKgorCSAqIFN3aXRjaCB0byB1c2VybW9kZSBncyBhbmQgcmV0dXJuIHRvIDY0LWJpdCB1c2VybW9kZSB1c2luZworCSAqIHN5c3JldC4gIE9ubHkgdXNlZCBpbiA2NC1iaXQga2VybmVscyB0byByZXR1cm4gdG8gNjQtYml0CisJICogcHJvY2Vzc2VzLiAgVXNlcm1vZGUgcmVnaXN0ZXIgc3RhdGUsIGluY2x1ZGluZyAlcnNwLCBtdXN0CisJICogYWxyZWFkeSBiZSByZXN0b3JlZC4KKwkgKi8KKwl2b2lkICgqdXNlcmdzX3N5c3JldDY0KSh2b2lkKTsKKworCS8qCisJICogU3dpdGNoIHRvIHVzZXJtb2RlIGdzIGFuZCByZXR1cm4gdG8gMzItYml0IHVzZXJtb2RlIHVzaW5nCisJICogc3lzcmV0LiAgVXNlZCB0byByZXR1cm4gdG8gMzItb24tNjQgY29tcGF0IHByb2Nlc3Nlcy4KKwkgKiBPdGhlciB1c2VybW9kZSByZWdpc3RlciBzdGF0ZSwgaW5jbHVkaW5nICVlc3AsIG11c3QgYWxyZWFkeQorCSAqIGJlIHJlc3RvcmVkLgorCSAqLworCXZvaWQgKCp1c2VyZ3Nfc3lzcmV0MzIpKHZvaWQpOworCisJLyogTm9ybWFsIGlyZXQuICBKdW1wIHRvIHRoaXMgd2l0aCB0aGUgc3RhbmRhcmQgaXJldCBzdGFjaworCSAgIGZyYW1lIHNldCB1cC4gKi8KKwl2b2lkICgqaXJldCkodm9pZCk7CisKKwl2b2lkICgqc3dhcGdzKSh2b2lkKTsKKworCXN0cnVjdCBwdl9sYXp5X29wcyBsYXp5X21vZGU7Cit9OworCitzdHJ1Y3QgcHZfaXJxX29wcyB7CisJdm9pZCAoKmluaXRfSVJRKSh2b2lkKTsKKworCS8qCisJICogR2V0L3NldCBpbnRlcnJ1cHQgc3RhdGUuICBzYXZlX2ZsIGFuZCByZXN0b3JlX2ZsIGFyZSBvbmx5CisJICogZXhwZWN0ZWQgdG8gdXNlIFg4Nl9FRkxBR1NfSUY7IGFsbCBvdGhlciBiaXRzCisJICogcmV0dXJuZWQgZnJvbSBzYXZlX2ZsIGFyZSB1bmRlZmluZWQsIGFuZCBtYXkgYmUgaWdub3JlZCBieQorCSAqIHJlc3RvcmVfZmwuCisJICovCisJdW5zaWduZWQgbG9uZyAoKnNhdmVfZmwpKHZvaWQpOworCXZvaWQgKCpyZXN0b3JlX2ZsKSh1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqaXJxX2Rpc2FibGUpKHZvaWQpOworCXZvaWQgKCppcnFfZW5hYmxlKSh2b2lkKTsKKwl2b2lkICgqc2FmZV9oYWx0KSh2b2lkKTsKKwl2b2lkICgqaGFsdCkodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdm9pZCAoKmFkanVzdF9leGNlcHRpb25fZnJhbWUpKHZvaWQpOworI2VuZGlmCit9OworCitzdHJ1Y3QgcHZfYXBpY19vcHMgeworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXZvaWQgKCpzZXR1cF9ib290X2Nsb2NrKSh2b2lkKTsKKwl2b2lkICgqc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKSh2b2lkKTsKKworCXZvaWQgKCpzdGFydHVwX2lwaV9ob29rKShpbnQgcGh5c19hcGljaWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X2VzcCk7CisjZW5kaWYKK307CisKK3N0cnVjdCBwdl9tbXVfb3BzIHsKKwkvKgorCSAqIENhbGxlZCBiZWZvcmUvYWZ0ZXIgaW5pdF9tbSBwYWdldGFibGUgc2V0dXAuIHNldHVwX3N0YXJ0CisJICogbWF5IHJlc2V0ICVjcjMsIGFuZCBtYXkgcHJlLWluc3RhbGwgcGFydHMgb2YgdGhlIHBhZ2V0YWJsZTsKKwkgKiBwYWdldGFibGUgc2V0dXAgaXMgZXhwZWN0ZWQgdG8gcHJlc2VydmUgYW55IGV4aXN0aW5nCisJICogbWFwcGluZy4KKwkgKi8KKwl2b2lkICgqcGFnZXRhYmxlX3NldHVwX3N0YXJ0KShwZ2RfdCAqcGdkX2Jhc2UpOworCXZvaWQgKCpwYWdldGFibGVfc2V0dXBfZG9uZSkocGdkX3QgKnBnZF9iYXNlKTsKKworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMikodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyMikodW5zaWduZWQgbG9uZyk7CisKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjMpKHZvaWQpOworCXZvaWQgKCp3cml0ZV9jcjMpKHVuc2lnbmVkIGxvbmcpOworCisJLyoKKwkgKiBIb29rcyBmb3IgaW50ZXJjZXB0aW5nIHRoZSBjcmVhdGlvbi91c2UvZGVzdHJ1Y3Rpb24gb2YgYW4KKwkgKiBtbV9zdHJ1Y3QuCisJICovCisJdm9pZCAoKmFjdGl2YXRlX21tKShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAorCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpOworCXZvaWQgKCpkdXBfbW1hcCkoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sCisJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCXZvaWQgKCpleGl0X21tYXApKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworCisJLyogVExCIG9wZXJhdGlvbnMgKi8KKwl2b2lkICgqZmx1c2hfdGxiX3VzZXIpKHZvaWQpOworCXZvaWQgKCpmbHVzaF90bGJfa2VybmVsKSh2b2lkKTsKKwl2b2lkICgqZmx1c2hfdGxiX3NpbmdsZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKKwl2b2lkICgqZmx1c2hfdGxiX290aGVycykoY29uc3QgY3B1bWFza190ICpjcHVzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgdW5zaWduZWQgbG9uZyB2YSk7CisKKwkvKiBIb29rcyBmb3IgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHBhZ2V0YWJsZSB0b3AtbGV2ZWwgKi8KKwlpbnQgICgqcGdkX2FsbG9jKShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisJdm9pZCAoKnBnZF9mcmVlKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7CisKKwkvKgorCSAqIEhvb2tzIGZvciBhbGxvY2F0aW5nL3JlbGVhc2luZyBwYWdldGFibGUgcGFnZXMgd2hlbiB0aGV5J3JlCisJICogYXR0YWNoZWQgdG8gYSBwYWdldGFibGUKKwkgKi8KKwl2b2lkICgqYWxsb2NfcHRlKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pOworCXZvaWQgKCphbGxvY19wbWQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbik7CisJdm9pZCAoKmFsbG9jX3BtZF9jbG9uZSkodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgY2xvbmVwZm4sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCXZvaWQgKCphbGxvY19wdWQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbik7CisJdm9pZCAoKnJlbGVhc2VfcHRlKSh1bnNpZ25lZCBsb25nIHBmbik7CisJdm9pZCAoKnJlbGVhc2VfcG1kKSh1bnNpZ25lZCBsb25nIHBmbik7CisJdm9pZCAoKnJlbGVhc2VfcHVkKSh1bnNpZ25lZCBsb25nIHBmbik7CisKKwkvKiBQYWdldGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqLworCXZvaWQgKCpzZXRfcHRlKShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKTsKKwl2b2lkICgqc2V0X3B0ZV9hdCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOworCXZvaWQgKCpzZXRfcG1kKShwbWRfdCAqcG1kcCwgcG1kX3QgcG1kdmFsKTsKKwl2b2lkICgqcHRlX3VwZGF0ZSkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgIHB0ZV90ICpwdGVwKTsKKwl2b2lkICgqcHRlX3VwZGF0ZV9kZWZlcikoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApOworCisJcHRlX3QgKCpwdGVwX21vZGlmeV9wcm90X3N0YXJ0KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQlwdGVfdCAqcHRlcCk7CisJdm9pZCAoKnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKKworCXB0ZXZhbF90ICgqcHRlX3ZhbCkocHRlX3QpOworCXB0ZXZhbF90ICgqcHRlX2ZsYWdzKShwdGVfdCk7CisJcHRlX3QgKCptYWtlX3B0ZSkocHRldmFsX3QgcHRlKTsKKworCXBnZHZhbF90ICgqcGdkX3ZhbCkocGdkX3QpOworCXBnZF90ICgqbWFrZV9wZ2QpKHBnZHZhbF90IHBnZCk7CisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCXZvaWQgKCpzZXRfcHRlX2F0b21pYykocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CisJdm9pZCAoKnNldF9wdGVfcHJlc2VudCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKKwl2b2lkICgqcHRlX2NsZWFyKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICBwdGVfdCAqcHRlcCk7CisJdm9pZCAoKnBtZF9jbGVhcikocG1kX3QgKnBtZHApOworCisjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KKworCXZvaWQgKCpzZXRfcHVkKShwdWRfdCAqcHVkcCwgcHVkX3QgcHVkdmFsKTsKKworCXBtZHZhbF90ICgqcG1kX3ZhbCkocG1kX3QpOworCXBtZF90ICgqbWFrZV9wbWQpKHBtZHZhbF90IHBtZCk7CisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKKwlwdWR2YWxfdCAoKnB1ZF92YWwpKHB1ZF90KTsKKwlwdWRfdCAoKm1ha2VfcHVkKShwdWR2YWxfdCBwdWQpOworCisJdm9pZCAoKnNldF9wZ2QpKHBnZF90ICpwdWRwLCBwZ2RfdCBwZ2R2YWwpOworI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLworI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPj0gMyAqLworCisjaWZkZWYgQ09ORklHX0hJR0hQVEUKKwl2b2lkICooKmttYXBfYXRvbWljX3B0ZSkoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKKyNlbmRpZgorCisJc3RydWN0IHB2X2xhenlfb3BzIGxhenlfbW9kZTsKKworCS8qIGRvbTAgb3BzICovCisKKwkvKiBTb21ldGltZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgYSBwZm4sIGFuZCBzb21ldGltZXMgaXRzCisJICAgYW4gbWZuLiAgV2UgY2FuIHRlbGwgd2hpY2ggaXMgd2hpY2ggZnJvbSB0aGUgaW5kZXguICovCisJdm9pZCAoKnNldF9maXhtYXApKHVuc2lnbmVkIC8qIGVudW0gZml4ZWRfYWRkcmVzc2VzICovIGlkeCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOworfTsKKworc3RydWN0IHJhd19zcGlubG9jazsKK3N0cnVjdCBwdl9sb2NrX29wcyB7CisJaW50ICgqc3Bpbl9pc19sb2NrZWQpKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOworCWludCAoKnNwaW5faXNfY29udGVuZGVkKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqc3Bpbl9sb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqc3Bpbl9sb2NrX2ZsYWdzKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwlpbnQgKCpzcGluX3RyeWxvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOworCXZvaWQgKCpzcGluX3VubG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7Cit9OworCisvKiBUaGlzIGNvbnRhaW5zIGFsbCB0aGUgcGFyYXZpcnQgc3RydWN0dXJlczogd2UgZ2V0IGEgY29udmVuaWVudAorICogbnVtYmVyIGZvciBlYWNoIGZ1bmN0aW9uIHVzaW5nIHRoZSBvZmZzZXQgd2hpY2ggd2UgdXNlIHRvIGluZGljYXRlCisgKiB3aGF0IHRvIHBhdGNoLiAqLworc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlIHsKKwlzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7CisJc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOworCXN0cnVjdCBwdl9jcHVfb3BzIHB2X2NwdV9vcHM7CisJc3RydWN0IHB2X2lycV9vcHMgcHZfaXJxX29wczsKKwlzdHJ1Y3QgcHZfYXBpY19vcHMgcHZfYXBpY19vcHM7CisJc3RydWN0IHB2X21tdV9vcHMgcHZfbW11X29wczsKKwlzdHJ1Y3QgcHZfbG9ja19vcHMgcHZfbG9ja19vcHM7Cit9OworCitleHRlcm4gc3RydWN0IHB2X2luZm8gcHZfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7CitleHRlcm4gc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOworZXh0ZXJuIHN0cnVjdCBwdl9jcHVfb3BzIHB2X2NwdV9vcHM7CitleHRlcm4gc3RydWN0IHB2X2lycV9vcHMgcHZfaXJxX29wczsKK2V4dGVybiBzdHJ1Y3QgcHZfYXBpY19vcHMgcHZfYXBpY19vcHM7CitleHRlcm4gc3RydWN0IHB2X21tdV9vcHMgcHZfbW11X29wczsKK2V4dGVybiBzdHJ1Y3QgcHZfbG9ja19vcHMgcHZfbG9ja19vcHM7CisKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0goeCkJCQkJCVwKKwkob2Zmc2V0b2Yoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlLCB4KSAvIHNpemVvZih2b2lkICopKQorCisjZGVmaW5lIHBhcmF2aXJ0X3R5cGUob3ApCQkJCVwKKwlbcGFyYXZpcnRfdHlwZW51bV0gImkiIChQQVJBVklSVF9QQVRDSChvcCkpLAlcCisJW3BhcmF2aXJ0X29wcHRyXSAibSIgKG9wKQorI2RlZmluZSBwYXJhdmlydF9jbG9iYmVyKGNsb2JiZXIpCQlcCisJW3BhcmF2aXJ0X2Nsb2JiZXJdICJpIiAoY2xvYmJlcikKKworLyoKKyAqIEdlbmVyYXRlIHNvbWUgY29kZSwgYW5kIG1hcmsgaXQgYXMgcGF0Y2hhYmxlIGJ5IHRoZQorICogYXBwbHlfcGFyYXZpcnQoKSBhbHRlcm5hdGUgaW5zdHJ1Y3Rpb24gcGF0Y2hlci4KKyAqLworI2RlZmluZSBfcGFyYXZpcnRfYWx0KGluc25fc3RyaW5nLCB0eXBlLCBjbG9iYmVyKQlcCisJIjc3MTpcblx0IiBpbnNuX3N0cmluZyAiXG4iICI3NzI6XG4iCQlcCisJIi5wdXNoc2VjdGlvbiAucGFyYWluc3RydWN0aW9ucyxcImFcIlxuIglcCisJX0FTTV9BTElHTiAiXG4iCQkJCQlcCisJX0FTTV9QVFIgIiA3NzFiXG4iCQkJCVwKKwkiICAuYnl0ZSAiIHR5cGUgIlxuIgkJCQlcCisJIiAgLmJ5dGUgNzcyYi03NzFiXG4iCQkJCVwKKwkiICAuc2hvcnQgIiBjbG9iYmVyICJcbiIJCQlcCisJIi5wb3BzZWN0aW9uXG4iCisKKy8qIEdlbmVyYXRlIHBhdGNoYWJsZSBjb2RlLCB3aXRoIHRoZSBkZWZhdWx0IGFzbSBwYXJhbWV0ZXJzLiAqLworI2RlZmluZSBwYXJhdmlydF9hbHQoaW5zbl9zdHJpbmcpCQkJCQlcCisJX3BhcmF2aXJ0X2FsdChpbnNuX3N0cmluZywgIiVjW3BhcmF2aXJ0X3R5cGVudW1dIiwgIiVjW3BhcmF2aXJ0X2Nsb2JiZXJdIikKKworLyogU2ltcGxlIGluc3RydWN0aW9uIHBhdGNoaW5nIGNvZGUuICovCisjZGVmaW5lIERFRl9OQVRJVkUob3BzLCBuYW1lLCBjb2RlKSAJCQkJCVwKKwlleHRlcm4gY29uc3QgY2hhciBzdGFydF8jI29wcyMjXyMjbmFtZVtdLCBlbmRfIyNvcHMjI18jI25hbWVbXTsJXAorCWFzbSgic3RhcnRfIiAjb3BzICJfIiAjbmFtZSAiOiAiIGNvZGUgIjsgZW5kXyIgI29wcyAiXyIgI25hbWUgIjoiKQorCit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9ub3Aodm9pZCk7Cit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZ25vcmUodW5zaWduZWQgbGVuKTsKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2NhbGwodm9pZCAqaW5zbmJ1ZiwKKwkJCSAgICAgY29uc3Qgdm9pZCAqdGFyZ2V0LCB1MTYgdGd0X2Nsb2JiZXJzLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBzaXRlX2Nsb2JiZXJzLAorCQkJICAgICB1bnNpZ25lZCBsZW4pOwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfam1wKHZvaWQgKmluc25idWYsIGNvbnN0IHZvaWQgKnRhcmdldCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7Cit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9kZWZhdWx0KHU4IHR5cGUsIHUxNiBjbG9iYmVycywgdm9pZCAqaW5zbmJ1ZiwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7CisKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2luc25zKHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpOworCit1bnNpZ25lZCBuYXRpdmVfcGF0Y2godTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppYnVmLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7CisKK2ludCBwYXJhdmlydF9kaXNhYmxlX2lvc3BhY2Uodm9pZCk7CisKKy8qCisgKiBUaGlzIGdlbmVyYXRlcyBhbiBpbmRpcmVjdCBjYWxsIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24gdHlwZSBudW1iZXIuCisgKiBUaGUgdHlwZSBudW1iZXIsIGNvbXB1dGVkIGluIFBBUkFWSVJUX1BBVENILCBpcyBkZXJpdmVkIGZyb20gdGhlCisgKiBvZmZzZXQgaW50byB0aGUgcGFyYXZpcnRfcGF0Y2hfdGVtcGxhdGUgc3RydWN0dXJlLCBhbmQgY2FuIHRoZXJlZm9yZSBiZQorICogZnJlZWx5IGNvbnZlcnRlZCBiYWNrIGludG8gYSBzdHJ1Y3R1cmUgb2Zmc2V0LgorICovCisjZGVmaW5lIFBBUkFWSVJUX0NBTEwJImNhbGwgKiVbcGFyYXZpcnRfb3BwdHJdOyIKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBhcmUgaW50ZW5kZWQgdG8gd3JhcCBjYWxscyB0aHJvdWdoIG9uZSBvZiB0aGUgcGFyYXZpcnQKKyAqIG9wcyBzdHJ1Y3RzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGxhdGVyIGlkZW50aWZpZWQgYW5kIHBhdGNoZWQgYXQKKyAqIHJ1bnRpbWUuCisgKgorICogTm9ybWFsbHksIGEgY2FsbCB0byBhIHB2X29wIGZ1bmN0aW9uIGlzIGEgc2ltcGxlIGluZGlyZWN0IGNhbGw6CisgKiAocHZfb3Bfc3RydWN0Lm9wZXJhdGlvbnMpKGFyZ3MuLi4pLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgYSByZWxhdGl2ZWx5IHNsb3cgb3BlcmF0aW9uIGZvciBtb2Rlcm4gQ1BVcywKKyAqIGJlY2F1c2UgaXQgY2Fubm90IG5lY2Vzc2FyaWx5IGRldGVybWluZSB3aGF0IHRoZSBkZXN0aW5hdGlvbgorICogYWRkcmVzcyBpcy4gIEluIHRoaXMgY2FzZSwgdGhlIGFkZHJlc3MgaXMgYSBydW50aW1lIGNvbnN0YW50LCBzbyBhdAorICogdGhlIHZlcnkgbGVhc3Qgd2UgY2FuIHBhdGNoIHRoZSBjYWxsIHRvIGUgYSBzaW1wbGUgZGlyZWN0IGNhbGwsIG9yCisgKiBpZGVhbGx5LCBwYXRjaCBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gaW50byB0aGUgY2FsbHNpdGUuICAoRGlyZWN0CisgKiBjYWxscyBhcmUgZXNzZW50aWFsbHkgZnJlZSwgYmVjYXVzZSB0aGUgY2FsbCBhbmQgcmV0dXJuIGFkZHJlc3NlcworICogYXJlIGNvbXBsZXRlbHkgcHJlZGljdGFibGUuKQorICoKKyAqIEZvciBpMzg2LCB0aGVzZSBtYWNyb3MgcmVseSBvbiB0aGUgc3RhbmRhcmQgZ2NjICJyZWdwYXJtKDMpIiBjYWxsaW5nCisgKiBjb252ZW50aW9uLCBpbiB3aGljaCB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4gJWVheCwKKyAqICVlZHgsICVlY3ggKGluIHRoYXQgb3JkZXIpLCBhbmQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHBsYWNlZAorICogb24gdGhlIHN0YWNrLiAgQWxsIGNhbGxlci1zYXZlIHJlZ2lzdGVycyAoZWF4LGVkeCxlY3gpIGFyZSBleHBlY3RlZAorICogdG8gYmUgbW9kaWZpZWQgKGVpdGhlciBjbG9iYmVyZWQgb3IgdXNlZCBmb3IgcmV0dXJuIHZhbHVlcykuCisgKiBYODZfNjQsIG9uIHRoZSBvdGhlciBoYW5kLCBhbHJlYWR5IHNwZWNpZmllcyBhIHJlZ2lzdGVyLWJhc2VkIGNhbGxpbmcKKyAqIGNvbnZlbnRpb25zLCByZXR1cm5pbmcgYXQgJXJheCwgd2l0aCBwYXJhbWV0ZXJlcyBnb2luZyBvbiAlcmRpLCAlcnNpLAorICogJXJkeCwgYW5kICVyY3guIE5vdGUgdGhhdCBmb3IgdGhpcyByZWFzb24sIHg4Nl82NCBkb2VzIG5vdCBuZWVkIGFueQorICogc3BlY2lhbCBoYW5kbGluZyBmb3IgZGVhbGluZyB3aXRoIDQgYXJndW1lbnRzLCB1bmxpa2UgaTM4Ni4KKyAqIEhvd2V2ZXIsIHg4Nl82NCBhbHNvIGhhdmUgdG8gY2xvYmJlciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycywgd2hpY2gKKyAqIHVuZm9ydHVuYXRlbHksIGFyZSBxdWl0ZSBhIGJpdCAocjggLSByMTEpCisgKgorICogVGhlIGNhbGwgaW5zdHJ1Y3Rpb24gaXRzZWxmIGlzIG1hcmtlZCBieSBwbGFjaW5nIGl0cyBzdGFydCBhZGRyZXNzCisgKiBhbmQgc2l6ZSBpbnRvIHRoZSAucGFyYWluc3RydWN0aW9ucyBzZWN0aW9uLCBzbyB0aGF0CisgKiBhcHBseV9wYXJhdmlydCgpIGluIGFyY2gvaTM4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBjYW4gZG8gdGhlCisgKiBhcHByb3ByaWF0ZSBwYXRjaGluZyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgYmFja2VuZCBwdl9pbml0X29wcworICogaW1wbGVtZW50YXRpb24uCisgKgorICogVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byBnZXQgZ2NjIHRvIGdlbmVyYXRlIHRoZSBhcmdzIHNldHVwCisgKiBmb3IgdGhlIGNhbGwsIGFuZCB0aGVuIGFsbG93IHRoZSBjYWxsIGl0c2VsZiB0byBiZSBnZW5lcmF0ZWQgYnkgYW4KKyAqIGlubGluZSBhc20uICBCZWNhdXNlIG9mIHRoaXMsIHdlIG11c3QgZG8gdGhlIGNvbXBsZXRlIGFyZyBzZXR1cCBhbmQKKyAqIHJldHVybiB2YWx1ZSBoYW5kbGluZyBmcm9tIHdpdGhpbiB0aGVzZSBtYWNyb3MuICBUaGlzIGlzIGZhaXJseQorICogY3VtYmVyc29tZS4KKyAqCisgKiBUaGVyZSBhcmUgNSBzZXRzIG9mIFBWT1BfKiBtYWNyb3MgZm9yIGRlYWxpbmcgd2l0aCAwLTQgYXJndW1lbnRzLgorICogSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gbW9yZSBhcmd1bWVudHMsIGJ1dCB0aGVyZSB3b3VsZCBiZSBsaXR0bGUKKyAqIHRvIGJlIGdhaW5lZCBmcm9tIHRoYXQuICBGb3IgZWFjaCBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVyZSBhcmUKKyAqIHRoZSB0d28gVkNBTEwgYW5kIENBTEwgdmFyaWFudHMgZm9yIHZvaWQgYW5kIG5vbi12b2lkIGZ1bmN0aW9ucy4KKyAqCisgKiBXaGVuIHRoZXJlIGlzIGEgcmV0dXJuIHZhbHVlLCB0aGUgaW52b2tlciBvZiB0aGUgbWFjcm8gbXVzdCBzcGVjaWZ5CisgKiB0aGUgcmV0dXJuIHR5cGUuICBUaGUgbWFjcm8gdGhlbiB1c2VzIHNpemVvZigpIG9uIHRoYXQgdHlwZSB0bworICogZGV0ZXJtaW5lIHdoZXRoZXIgaXRzIGEgMzIgb3IgNjQgYml0IHZhbHVlLCBhbmQgcGxhY2VzIHRoZSByZXR1cm4KKyAqIGluIHRoZSByaWdodCByZWdpc3RlcihzKSAoanVzdCAlZWF4IGZvciAzMi1iaXQsIGFuZCAlZWR4OiVlYXggZm9yCisgKiA2NC1iaXQpLiBGb3IgeDg2XzY0IG1hY2hpbmVzLCBpdCBqdXN0IHJldHVybnMgYXQgJXJheCByZWdhcmRsZXNzIG9mCisgKiB0aGUgcmV0dXJuIHZhbHVlIHNpemUuCisgKgorICogNjQtYml0IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGFzIGEgcGFpciBvZiBhZGphY2VudCAzMi1iaXQgYXJndW1lbnRzCisgKiBpMzg2IGFsc28gcGFzc2VzIDY0LWJpdCBhcmd1bWVudHMgYXMgYSBwYWlyIG9mIGFkamFjZW50IDMyLWJpdCBhcmd1bWVudHMKKyAqIGluIGxvdyxoaWdoIG9yZGVyCisgKgorICogU21hbGwgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGFuZCByZXR1cm5lZCBpbiByZWdpc3RlcnMuICBUaGUgbWFjcm8KKyAqIGNhbGxpbmcgY29udmVudGlvbiBjYW4ndCBkaXJlY3RseSBkZWFsIHdpdGggdGhpcywgc28gdGhlIHdyYXBwZXIKKyAqIGZ1bmN0aW9ucyBtdXN0IGRvIHRoaXMuCisgKgorICogVGhlc2UgUFZPUF8qIG1hY3JvcyBhcmUgb25seSBkZWZpbmVkIHdpdGhpbiB0aGlzIGhlYWRlci4gIFRoaXMKKyAqIG1lYW5zIHRoYXQgYWxsIHVzZXMgbXVzdCBiZSB3cmFwcGVkIGluIGlubGluZSBmdW5jdGlvbnMuICBUaGlzIGFsc28KKyAqIG1ha2VzIHN1cmUgdGhlIGluY29taW5nIGFuZCBvdXRnb2luZyB0eXBlcyBhcmUgYWx3YXlzIGNvcnJlY3QuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIFBWT1BfVkNBTExfQVJHUwkJCXVuc2lnbmVkIGxvbmcgX19lYXgsIF9fZWR4LCBfX2VjeAorI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJCVBWT1BfVkNBTExfQVJHUworI2RlZmluZSBQVk9QX1ZDQUxMX0NMT0JCRVJTCQkiPWEiIChfX2VheCksICI9ZCIgKF9fZWR4KSwJXAorCQkJCQkiPWMiIChfX2VjeCkKKyNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCQlQVk9QX1ZDQUxMX0NMT0JCRVJTCisjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCisjZGVmaW5lIFZFWFRSQV9DTE9CQkVSUworI2Vsc2UKKyNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQl1bnNpZ25lZCBsb25nIF9fZWRpLCBfX2VzaSwgX19lZHgsIF9fZWN4CisjZGVmaW5lIFBWT1BfQ0FMTF9BUkdTCQlQVk9QX1ZDQUxMX0FSR1MsIF9fZWF4CisjZGVmaW5lIFBWT1BfVkNBTExfQ0xPQkJFUlMJIj1EIiAoX19lZGkpLAkJCQlcCisJCQkJIj1TIiAoX19lc2kpLCAiPWQiIChfX2VkeCksCQlcCisJCQkJIj1jIiAoX19lY3gpCisKKyNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCVBWT1BfVkNBTExfQ0xPQkJFUlMsICI9YSIgKF9fZWF4KQorCisjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCSAsICJyOCIsICJyOSIsICJyMTAiLCAicjExIgorI2RlZmluZSBWRVhUUkFfQ0xPQkJFUlMJICwgInJheCIsICJyOCIsICJyOSIsICJyMTAiLCAicjExIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlRfREVCVUcKKyNkZWZpbmUgUFZPUF9URVNUX05VTEwob3ApCUJVR19PTihvcCA9PSBOVUxMKQorI2Vsc2UKKyNkZWZpbmUgUFZPUF9URVNUX05VTEwob3ApCSgodm9pZClvcCkKKyNlbmRpZgorCisjZGVmaW5lIF9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCisJKHsJCQkJCQkJCVwKKwkJcmV0dHlwZSBfX3JldDsJCQkJCQlcCisJCVBWT1BfQ0FMTF9BUkdTOwkJCQkJXAorCQlQVk9QX1RFU1RfTlVMTChvcCk7CQkJCQlcCisJCS8qIFRoaXMgaXMgMzItYml0IHNwZWNpZmljLCBidXQgaXMgb2theSBpbiA2NC1iaXQgKi8JXAorCQkvKiBzaW5jZSB0aGlzIGNvbmRpdGlvbiB3aWxsIG5ldmVyIGhvbGQgKi8JCVwKKwkJaWYgKHNpemVvZihyZXR0eXBlKSA+IHNpemVvZih1bnNpZ25lZCBsb25nKSkgewkJXAorCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCisJCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAorCQkJCSAgICAgcG9zdAkJCQlcCisJCQkJICAgICA6IFBWT1BfQ0FMTF9DTE9CQkVSUwkJXAorCQkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCVwKKwkJCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0FOWSksCVwKKwkJCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCVwKKwkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgRVhUUkFfQ0xPQkJFUlMpOwlcCisJCQlfX3JldCA9IChyZXR0eXBlKSgoKCh1NjQpX19lZHgpIDw8IDMyKSB8IF9fZWF4KTsgXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCWFzbSB2b2xhdGlsZShwcmUJCQkJXAorCQkJCSAgICAgcGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCVwKKwkJCQkgICAgIHBvc3QJCQkJXAorCQkJCSAgICAgOiBQVk9QX0NBTExfQ0xPQkJFUlMJCVwKKwkJCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQlcCisJCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9BTlkpLAlcCisJCQkJICAgICAgICMjX19WQV9BUkdTX18JCQlcCisJCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIEVYVFJBX0NMT0JCRVJTKTsJXAorCQkJX19yZXQgPSAocmV0dHlwZSlfX2VheDsJCQkJXAorCQl9CQkJCQkJCVwKKwkJX19yZXQ7CQkJCQkJCVwKKwl9KQorI2RlZmluZSBfX1BWT1BfVkNBTEwob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJUFZPUF9WQ0FMTF9BUkdTOwkJCQkJXAorCQlQVk9QX1RFU1RfTlVMTChvcCk7CQkJCQlcCisJCWFzbSB2b2xhdGlsZShwcmUJCQkJCVwKKwkJCSAgICAgcGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCQlcCisJCQkgICAgIHBvc3QJCQkJCVwKKwkJCSAgICAgOiBQVk9QX1ZDQUxMX0NMT0JCRVJTCQkJXAorCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJCVwKKwkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfQU5ZKSwJCVwKKwkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJCVwKKwkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBWRVhUUkFfQ0xPQkJFUlMpOwkJXAorCX0pCisKKyNkZWZpbmUgUFZPUF9DQUxMMChyZXR0eXBlLCBvcCkJCQkJCQlcCisJX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIikKKyNkZWZpbmUgUFZPUF9WQ0FMTDAob3ApCQkJCQkJCVwKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIikKKworI2RlZmluZSBQVk9QX0NBTEwxKHJldHR5cGUsIG9wLCBhcmcxKQkJCQkJXAorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTDEob3AsIGFyZzEpCQkJCQkJXAorCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLCAiMCIgKCh1bnNpZ25lZCBsb25nKShhcmcxKSkpCisKKyNkZWZpbmUgUFZPUF9DQUxMMihyZXR0eXBlLCBvcCwgYXJnMSwgYXJnMikJCQkJXAorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwgCVwKKwkiMSIgKCh1bnNpZ25lZCBsb25nKShhcmcyKSkpCisjZGVmaW5lIFBWT1BfVkNBTEwyKG9wLCBhcmcxLCBhcmcyKQkJCQkJXAorCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLCAiMCIgKCh1bnNpZ25lZCBsb25nKShhcmcxKSksIAkJXAorCSIxIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSkKKworI2RlZmluZSBQVk9QX0NBTEwzKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczKQkJCVwKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLCAiMCIgKCh1bnNpZ25lZCBsb25nKShhcmcxKSksCVwKKwkiMSIoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSwgIjIiKCh1bnNpZ25lZCBsb25nKShhcmczKSkpCisjZGVmaW5lIFBWT1BfVkNBTEwzKG9wLCBhcmcxLCBhcmcyLCBhcmczKQkJCQlcCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJCVwKKwkiMSIoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSwgIjIiKCh1bnNpZ25lZCBsb25nKShhcmczKSkpCisKKy8qIFRoaXMgaXMgdGhlIG9ubHkgZGlmZmVyZW5jZSBpbiB4ODZfNjQuIFdlIGNhbiBtYWtlIGl0IG11Y2ggc2ltcGxlciAqLworI2lmZGVmIENPTkZJR19YODZfMzIKKyNkZWZpbmUgUFZPUF9DQUxMNChyZXR0eXBlLCBvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQlcCisJX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsCQkJCQlcCisJCSAgICAicHVzaCAlW19hcmc0XTsiLCAibGVhIDQoJSVlc3ApLCUlZXNwOyIsCQlcCisJCSAgICAiMCIgKCh1MzIpKGFyZzEpKSwgIjEiICgodTMyKShhcmcyKSksCQlcCisJCSAgICAiMiIgKCh1MzIpKGFyZzMpKSwgW19hcmc0XSAibXIiICgodTMyKShhcmc0KSkpCisjZGVmaW5lIFBWT1BfVkNBTEw0KG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCQlcCisJX19QVk9QX1ZDQUxMKG9wLAkJCQkJCVwKKwkJICAgICJwdXNoICVbX2FyZzRdOyIsICJsZWEgNCglJWVzcCksJSVlc3A7IiwJCVwKKwkJICAgICIwIiAoKHUzMikoYXJnMSkpLCAiMSIgKCh1MzIpKGFyZzIpKSwJCVwKKwkJICAgICIyIiAoKHUzMikoYXJnMykpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKKyNlbHNlCisjZGVmaW5lIFBWT1BfQ0FMTDQocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJXAorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJXAorCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSwJCVwKKwkiMyIoKHVuc2lnbmVkIGxvbmcpKGFyZzQpKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTDQob3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJCVwKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLAkJXAorCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSwJCVwKKwkiMyIoKHVuc2lnbmVkIGxvbmcpKGFyZzQpKSkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBwYXJhdmlydF9lbmFibGVkKHZvaWQpCit7CisJcmV0dXJuIHB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfc3AwKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsCisJCQkgICAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCit7CisJUFZPUF9WQ0FMTDIocHZfY3B1X29wcy5sb2FkX3NwMCwgdHNzLCB0aHJlYWQpOworfQorCisjZGVmaW5lIEFSQ0hfU0VUVVAJCQlwdl9pbml0X29wcy5hcmNoX3NldHVwKCk7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3dhbGxjbG9jayh2b2lkKQoreworCXJldHVybiBQVk9QX0NBTEwwKHVuc2lnbmVkIGxvbmcsIHB2X3RpbWVfb3BzLmdldF93YWxsY2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZXRfd2FsbGNsb2NrKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMShpbnQsIHB2X3RpbWVfb3BzLnNldF93YWxsY2xvY2ssIG5vd3RpbWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKCpjaG9vc2VfdGltZV9pbml0KHZvaWQpKSh2b2lkKQoreworCXJldHVybiBwdl90aW1lX29wcy50aW1lX2luaXQ7Cit9CisKKy8qIFRoZSBwYXJhdmlydHVhbGl6ZWQgQ1BVSUQgaW5zdHJ1Y3Rpb24uICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19jcHVpZCh1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCisJCQkgICB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpCit7CisJUFZPUF9WQ0FMTDQocHZfY3B1X29wcy5jcHVpZCwgZWF4LCBlYngsIGVjeCwgZWR4KTsKK30KKworLyoKKyAqIFRoZXNlIHNwZWNpYWwgbWFjcm9zIGNhbiBiZSB1c2VkIHRvIGdldCBvciBzZXQgYSBkZWJ1Z2dpbmcgcmVnaXN0ZXIKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhcmF2aXJ0X2dldF9kZWJ1Z3JlZyhpbnQgcmVnKQoreworCXJldHVybiBQVk9QX0NBTEwxKHVuc2lnbmVkIGxvbmcsIHB2X2NwdV9vcHMuZ2V0X2RlYnVncmVnLCByZWcpOworfQorI2RlZmluZSBnZXRfZGVidWdyZWcodmFyLCByZWcpIHZhciA9IHBhcmF2aXJ0X2dldF9kZWJ1Z3JlZyhyZWcpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RlYnVncmVnKHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgcmVnKQoreworCVBWT1BfVkNBTEwyKHB2X2NwdV9vcHMuc2V0X2RlYnVncmVnLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbHRzKHZvaWQpCit7CisJUFZPUF9WQ0FMTDAocHZfY3B1X29wcy5jbHRzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3IwKHZvaWQpCit7CisJcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfY3B1X29wcy5yZWFkX2NyMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjAodW5zaWduZWQgbG9uZyB4KQoreworCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMud3JpdGVfY3IwLCB4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3IyKHZvaWQpCit7CisJcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfbW11X29wcy5yZWFkX2NyMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjIodW5zaWduZWQgbG9uZyB4KQoreworCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMud3JpdGVfY3IyLCB4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3IzKHZvaWQpCit7CisJcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfbW11X29wcy5yZWFkX2NyMyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjModW5zaWduZWQgbG9uZyB4KQoreworCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMud3JpdGVfY3IzLCB4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3I0KHZvaWQpCit7CisJcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfY3B1X29wcy5yZWFkX2NyNCk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjRfc2FmZSh2b2lkKQoreworCXJldHVybiBQVk9QX0NBTEwwKHVuc2lnbmVkIGxvbmcsIHB2X2NwdV9vcHMucmVhZF9jcjRfc2FmZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjQodW5zaWduZWQgbG9uZyB4KQoreworCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMud3JpdGVfY3I0LCB4KTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyOCh2b2lkKQoreworCXJldHVybiBQVk9QX0NBTEwwKHVuc2lnbmVkIGxvbmcsIHB2X2NwdV9vcHMucmVhZF9jcjgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3I4KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlQVk9QX1ZDQUxMMShwdl9jcHVfb3BzLndyaXRlX2NyOCwgeCk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHJhd19zYWZlX2hhbHQodm9pZCkKK3sKKwlQVk9QX1ZDQUxMMChwdl9pcnFfb3BzLnNhZmVfaGFsdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYWx0KHZvaWQpCit7CisJUFZPUF9WQ0FMTDAocHZfaXJxX29wcy5zYWZlX2hhbHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2JpbnZkKHZvaWQpCit7CisJUFZPUF9WQ0FMTDAocHZfY3B1X29wcy53YmludmQpOworfQorCisjZGVmaW5lIGdldF9rZXJuZWxfcnBsKCkgIChwdl9pbmZvLmtlcm5lbF9ycGwpCisKK3N0YXRpYyBpbmxpbmUgdTY0IHBhcmF2aXJ0X3JlYWRfbXNyKHVuc2lnbmVkIG1zciwgaW50ICplcnIpCit7CisJcmV0dXJuIFBWT1BfQ0FMTDIodTY0LCBwdl9jcHVfb3BzLnJlYWRfbXNyLCBtc3IsIGVycik7Cit9CitzdGF0aWMgaW5saW5lIHU2NCBwYXJhdmlydF9yZWFkX21zcl9hbWQodW5zaWduZWQgbXNyLCBpbnQgKmVycikKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMih1NjQsIHB2X2NwdV9vcHMucmVhZF9tc3JfYW1kLCBtc3IsIGVycik7Cit9CitzdGF0aWMgaW5saW5lIGludCBwYXJhdmlydF93cml0ZV9tc3IodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpCit7CisJcmV0dXJuIFBWT1BfQ0FMTDMoaW50LCBwdl9jcHVfb3BzLndyaXRlX21zciwgbXNyLCBsb3csIGhpZ2gpOworfQorCisvKiBUaGVzZSBzaG91bGQgYWxsIGRvIEJVR19PTihfZXJyKSwgYnV0IG91ciBoZWFkZXJzIGFyZSB0b28gdGFuZ2xlZC4gKi8KKyNkZWZpbmUgcmRtc3IobXNyLCB2YWwxLCB2YWwyKQkJCVwKK2RvIHsJCQkJCQlcCisJaW50IF9lcnI7CQkJCVwKKwl1NjQgX2wgPSBwYXJhdmlydF9yZWFkX21zcihtc3IsICZfZXJyKTsJXAorCXZhbDEgPSAodTMyKV9sOwkJCQlcCisJdmFsMiA9IF9sID4+IDMyOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgd3Jtc3IobXNyLCB2YWwxLCB2YWwyKQkJCVwKK2RvIHsJCQkJCQlcCisJcGFyYXZpcnRfd3JpdGVfbXNyKG1zciwgdmFsMSwgdmFsMik7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgcmRtc3JsKG1zciwgdmFsKQkJCVwKK2RvIHsJCQkJCQlcCisJaW50IF9lcnI7CQkJCVwKKwl2YWwgPSBwYXJhdmlydF9yZWFkX21zcihtc3IsICZfZXJyKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSB3cm1zcmwobXNyLCB2YWwpCXdybXNyKG1zciwgKHUzMikoKHU2NCkodmFsKSksICgodTY0KSh2YWwpKT4+MzIpCisjZGVmaW5lIHdybXNyX3NhZmUobXNyLCBhLCBiKQlwYXJhdmlydF93cml0ZV9tc3IobXNyLCBhLCBiKQorCisvKiByZG1zciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyAqLworI2RlZmluZSByZG1zcl9zYWZlKG1zciwgYSwgYikJCQlcCisoewkJCQkJCVwKKwlpbnQgX2VycjsJCQkJXAorCXU2NCBfbCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJl9lcnIpOwlcCisJKCphKSA9ICh1MzIpX2w7CQkJCVwKKwkoKmIpID0gX2wgPj4gMzI7CQkJXAorCV9lcnI7CQkJCQlcCit9KQorCitzdGF0aWMgaW5saW5lIGludCByZG1zcmxfc2FmZSh1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcCkKK3sKKwlpbnQgZXJyOworCisJKnAgPSBwYXJhdmlydF9yZWFkX21zcihtc3IsICZlcnIpOworCXJldHVybiBlcnI7Cit9CitzdGF0aWMgaW5saW5lIGludCByZG1zcmxfYW1kX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCit7CisJaW50IGVycjsKKworCSpwID0gcGFyYXZpcnRfcmVhZF9tc3JfYW1kKG1zciwgJmVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB1NjQgcGFyYXZpcnRfcmVhZF90c2Modm9pZCkKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMCh1NjQsIHB2X2NwdV9vcHMucmVhZF90c2MpOworfQorCisjZGVmaW5lIHJkdHNjbChsb3cpCQkJCVwKK2RvIHsJCQkJCQlcCisJdTY0IF9sID0gcGFyYXZpcnRfcmVhZF90c2MoKTsJCVwKKwlsb3cgPSAoaW50KV9sOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHJkdHNjbGwodmFsKSAodmFsID0gcGFyYXZpcnRfcmVhZF90c2MoKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcGFyYXZpcnRfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMCh1bnNpZ25lZCBsb25nIGxvbmcsIHB2X3RpbWVfb3BzLnNjaGVkX2Nsb2NrKTsKK30KKyNkZWZpbmUgY2FsaWJyYXRlX3RzYygpIChwdl90aW1lX29wcy5nZXRfdHNjX2toeigpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBwYXJhdmlydF9yZWFkX3BtYyhpbnQgY291bnRlcikKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMSh1NjQsIHB2X2NwdV9vcHMucmVhZF9wbWMsIGNvdW50ZXIpOworfQorCisjZGVmaW5lIHJkcG1jKGNvdW50ZXIsIGxvdywgaGlnaCkJCVwKK2RvIHsJCQkJCQlcCisJdTY0IF9sID0gcGFyYXZpcnRfcmVhZF9wbWMoY291bnRlcik7CVwKKwlsb3cgPSAodTMyKV9sOwkJCQlcCisJaGlnaCA9IF9sID4+IDMyOwkJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHBhcmF2aXJ0X3JkdHNjcCh1bnNpZ25lZCBpbnQgKmF1eCkKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMSh1NjQsIHB2X2NwdV9vcHMucmVhZF90c2NwLCBhdXgpOworfQorCisjZGVmaW5lIHJkdHNjcChsb3csIGhpZ2gsIGF1eCkJCQkJXAorZG8gewkJCQkJCQlcCisJaW50IF9fYXV4OwkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX192YWwgPSBwYXJhdmlydF9yZHRzY3AoJl9fYXV4KTsJXAorCShsb3cpID0gKHUzMilfX3ZhbDsJCQkJXAorCShoaWdoKSA9ICh1MzIpKF9fdmFsID4+IDMyKTsJCQlcCisJKGF1eCkgPSBfX2F1eDsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgcmR0c2NwbGwodmFsLCBhdXgpCQkJCVwKK2RvIHsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19hdXg7IAkJCQlcCisJdmFsID0gcGFyYXZpcnRfcmR0c2NwKCZfX2F1eCk7CQkJXAorCShhdXgpID0gX19hdXg7CQkJCQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYWxsb2NfbGR0KHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKQoreworCVBWT1BfVkNBTEwyKHB2X2NwdV9vcHMuYWxsb2NfbGR0LCBsZHQsIGVudHJpZXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfZnJlZV9sZHQoc3RydWN0IGRlc2Nfc3RydWN0ICpsZHQsIHVuc2lnbmVkIGVudHJpZXMpCit7CisJUFZPUF9WQ0FMTDIocHZfY3B1X29wcy5mcmVlX2xkdCwgbGR0LCBlbnRyaWVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfVFJfZGVzYyh2b2lkKQoreworCVBWT1BfVkNBTEwwKHB2X2NwdV9vcHMubG9hZF90cl9kZXNjKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2dkdChjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKmR0cikKK3sKKwlQVk9QX1ZDQUxMMShwdl9jcHVfb3BzLmxvYWRfZ2R0LCBkdHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIGxvYWRfaWR0KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZHRyKQoreworCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMubG9hZF9pZHQsIGR0cik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2xkdChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBlbnRyaWVzKQoreworCVBWT1BfVkNBTEwyKHB2X2NwdV9vcHMuc2V0X2xkdCwgYWRkciwgZW50cmllcyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfZ2R0KHN0cnVjdCBkZXNjX3B0ciAqZHRyKQoreworCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMuc3RvcmVfZ2R0LCBkdHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX2lkdChzdHJ1Y3QgZGVzY19wdHIgKmR0cikKK3sKKwlQVk9QX1ZDQUxMMShwdl9jcHVfb3BzLnN0b3JlX2lkdCwgZHRyKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYXJhdmlydF9zdG9yZV90cih2b2lkKQoreworCXJldHVybiBQVk9QX0NBTEwwKHVuc2lnbmVkIGxvbmcsIHB2X2NwdV9vcHMuc3RvcmVfdHIpOworfQorI2RlZmluZSBzdG9yZV90cih0cikJKCh0cikgPSBwYXJhdmlydF9zdG9yZV90cigpKQorc3RhdGljIGlubGluZSB2b2lkIGxvYWRfVExTKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBjcHUpCit7CisJUFZPUF9WQ0FMTDIocHZfY3B1X29wcy5sb2FkX3RscywgdCwgY3B1KTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2dzX2luZGV4KHVuc2lnbmVkIGludCBncykKK3sKKwlQVk9QX1ZDQUxMMShwdl9jcHVfb3BzLmxvYWRfZ3NfaW5kZXgsIGdzKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfbGR0X2VudHJ5KHN0cnVjdCBkZXNjX3N0cnVjdCAqZHQsIGludCBlbnRyeSwKKwkJCQkgICBjb25zdCB2b2lkICpkZXNjKQoreworCVBWT1BfVkNBTEwzKHB2X2NwdV9vcHMud3JpdGVfbGR0X2VudHJ5LCBkdCwgZW50cnksIGRlc2MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZ2R0X2VudHJ5KHN0cnVjdCBkZXNjX3N0cnVjdCAqZHQsIGludCBlbnRyeSwKKwkJCQkgICB2b2lkICpkZXNjLCBpbnQgdHlwZSkKK3sKKwlQVk9QX1ZDQUxMNChwdl9jcHVfb3BzLndyaXRlX2dkdF9lbnRyeSwgZHQsIGVudHJ5LCBkZXNjLCB0eXBlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2lkdF9lbnRyeShnYXRlX2Rlc2MgKmR0LCBpbnQgZW50cnksIGNvbnN0IGdhdGVfZGVzYyAqZykKK3sKKwlQVk9QX1ZDQUxMMyhwdl9jcHVfb3BzLndyaXRlX2lkdF9lbnRyeSwgZHQsIGVudHJ5LCBnKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW9wbF9tYXNrKHVuc2lnbmVkIG1hc2spCit7CisJUFZPUF9WQ0FMTDEocHZfY3B1X29wcy5zZXRfaW9wbF9tYXNrLCBtYXNrKTsKK30KKworLyogVGhlIHBhcmF2aXJ0dWFsaXplZCBJL08gZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duX2lvKHZvaWQpCit7CisJcHZfY3B1X29wcy5pb19kZWxheSgpOworI2lmZGVmIFJFQUxMWV9TTE9XX0lPCisJcHZfY3B1X29wcy5pb19kZWxheSgpOworCXB2X2NwdV9vcHMuaW9fZGVsYXkoKTsKKwlwdl9jcHVfb3BzLmlvX2RlbGF5KCk7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2Jvb3RfY2xvY2sodm9pZCkKK3sKKwlQVk9QX1ZDQUxMMChwdl9hcGljX29wcy5zZXR1cF9ib290X2Nsb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKQoreworCVBWT1BfVkNBTEwwKHB2X2FwaWNfb3BzLnNldHVwX3NlY29uZGFyeV9jbG9jayk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQodm9pZCkKK3sKKwlpZiAocHZfaW5pdF9vcHMucG9zdF9hbGxvY2F0b3JfaW5pdCkKKwkJKCpwdl9pbml0X29wcy5wb3N0X2FsbG9jYXRvcl9pbml0KSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKQoreworCSgqcHZfbW11X29wcy5wYWdldGFibGVfc2V0dXBfc3RhcnQpKGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpCit7CisJKCpwdl9tbXVfb3BzLnBhZ2V0YWJsZV9zZXR1cF9kb25lKShiYXNlKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydHVwX2lwaV9ob29rKGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXAsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfZXNwKQoreworCVBWT1BfVkNBTEwzKHB2X2FwaWNfb3BzLnN0YXJ0dXBfaXBpX2hvb2ssCisJCSAgICBwaHlzX2FwaWNpZCwgc3RhcnRfZWlwLCBzdGFydF9lc3ApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQoreworCVBWT1BfVkNBTEwyKHB2X21tdV9vcHMuYWN0aXZhdGVfbW0sIHByZXYsIG5leHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJUFZPUF9WQ0FMTDIocHZfbW11X29wcy5kdXBfbW1hcCwgb2xkbW0sIG1tKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMuZXhpdF9tbWFwLCBtbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYih2b2lkKQoreworCVBWT1BfVkNBTEwwKHB2X21tdV9vcHMuZmx1c2hfdGxiX3VzZXIpOworfQorc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX2dsb2JhbCh2b2lkKQoreworCVBWT1BfVkNBTEwwKHB2X21tdV9vcHMuZmx1c2hfdGxiX2tlcm5lbCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfc2luZ2xlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlQVk9QX1ZDQUxMMShwdl9tbXVfb3BzLmZsdXNoX3RsYl9zaW5nbGUsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX290aGVycyhjcHVtYXNrX3QgY3B1bWFzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmEpCit7CisJUFZPUF9WQ0FMTDMocHZfbW11X29wcy5mbHVzaF90bGJfb3RoZXJzLCAmY3B1bWFzaywgbW0sIHZhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyYXZpcnRfcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBQVk9QX0NBTEwxKGludCwgcHZfbW11X29wcy5wZ2RfYWxsb2MsIG1tKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3BnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQoreworCVBWT1BfVkNBTEwyKHB2X21tdV9vcHMucGdkX2ZyZWUsIG1tLCBwZ2QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYWxsb2NfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLmFsbG9jX3B0ZSwgbW0sIHBmbik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcmVsZWFzZV9wdGUodW5zaWduZWQgbG9uZyBwZm4pCit7CisJUFZPUF9WQ0FMTDEocHZfbW11X29wcy5yZWxlYXNlX3B0ZSwgcGZuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FsbG9jX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCit7CisJUFZPUF9WQ0FMTDIocHZfbW11X29wcy5hbGxvY19wbWQsIG1tLCBwZm4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYWxsb2NfcG1kX2Nsb25lKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNsb25lcGZuLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlQVk9QX1ZDQUxMNChwdl9tbXVfb3BzLmFsbG9jX3BtZF9jbG9uZSwgcGZuLCBjbG9uZXBmbiwgc3RhcnQsIGNvdW50KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9yZWxlYXNlX3BtZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlQVk9QX1ZDQUxMMShwdl9tbXVfb3BzLnJlbGVhc2VfcG1kLCBwZm4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYWxsb2NfcHVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLmFsbG9jX3B1ZCwgbW0sIHBmbik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcmVsZWFzZV9wdWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJUFZPUF9WQ0FMTDEocHZfbW11X29wcy5yZWxlYXNlX3B1ZCwgcGZuKTsKK30KKworI2lmZGVmIENPTkZJR19ISUdIUFRFCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfYXRvbWljX3B0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJcmV0ID0gUFZPUF9DQUxMMih1bnNpZ25lZCBsb25nLCBwdl9tbXVfb3BzLmttYXBfYXRvbWljX3B0ZSwgcGFnZSwgdHlwZSk7CisJcmV0dXJuICh2b2lkICopcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdXBkYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICBwdGVfdCAqcHRlcCkKK3sKKwlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLnB0ZV91cGRhdGUsIG1tLCBhZGRyLCBwdGVwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV91cGRhdGVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgcHRlX3QgKnB0ZXApCit7CisJUFZPUF9WQ0FMTDMocHZfbW11X29wcy5wdGVfdXBkYXRlX2RlZmVyLCBtbSwgYWRkciwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGUocHRldmFsX3QgdmFsKQoreworCXB0ZXZhbF90IHJldDsKKworCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQorCQlyZXQgPSBQVk9QX0NBTEwyKHB0ZXZhbF90LAorCQkJCSBwdl9tbXVfb3BzLm1ha2VfcHRlLAorCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKKwllbHNlCisJCXJldCA9IFBWT1BfQ0FMTDEocHRldmFsX3QsCisJCQkJIHB2X21tdV9vcHMubWFrZV9wdGUsCisJCQkJIHZhbCk7CisKKwlyZXR1cm4gKHB0ZV90KSB7IC5wdGUgPSByZXQgfTsKK30KKworc3RhdGljIGlubGluZSBwdGV2YWxfdCBwdGVfdmFsKHB0ZV90IHB0ZSkKK3sKKwlwdGV2YWxfdCByZXQ7CisKKwlpZiAoc2l6ZW9mKHB0ZXZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJcmV0ID0gUFZPUF9DQUxMMihwdGV2YWxfdCwgcHZfbW11X29wcy5wdGVfdmFsLAorCQkJCSBwdGUucHRlLCAodTY0KXB0ZS5wdGUgPj4gMzIpOworCWVsc2UKKwkJcmV0ID0gUFZPUF9DQUxMMShwdGV2YWxfdCwgcHZfbW11X29wcy5wdGVfdmFsLAorCQkJCSBwdGUucHRlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRldmFsX3QgcHRlX2ZsYWdzKHB0ZV90IHB0ZSkKK3sKKwlwdGV2YWxfdCByZXQ7CisKKwlpZiAoc2l6ZW9mKHB0ZXZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJcmV0ID0gUFZPUF9DQUxMMihwdGV2YWxfdCwgcHZfbW11X29wcy5wdGVfZmxhZ3MsCisJCQkJIHB0ZS5wdGUsICh1NjQpcHRlLnB0ZSA+PiAzMik7CisJZWxzZQorCQlyZXQgPSBQVk9QX0NBTEwxKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV9mbGFncywKKwkJCQkgcHRlLnB0ZSk7CisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlRfREVCVUcKKwlCVUdfT04ocmV0ICYgUFRFX1BGTl9NQVNLKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdkX3QgX19wZ2QocGdkdmFsX3QgdmFsKQoreworCXBnZHZhbF90IHJldDsKKworCWlmIChzaXplb2YocGdkdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQorCQlyZXQgPSBQVk9QX0NBTEwyKHBnZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcGdkLAorCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKKwllbHNlCisJCXJldCA9IFBWT1BfQ0FMTDEocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCisJCQkJIHZhbCk7CisKKwlyZXR1cm4gKHBnZF90KSB7IHJldCB9OworfQorCitzdGF0aWMgaW5saW5lIHBnZHZhbF90IHBnZF92YWwocGdkX3QgcGdkKQoreworCXBnZHZhbF90IHJldDsKKworCWlmIChzaXplb2YocGdkdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQorCQlyZXQgPSAgUFZPUF9DQUxMMihwZ2R2YWxfdCwgcHZfbW11X29wcy5wZ2RfdmFsLAorCQkJCSAgcGdkLnBnZCwgKHU2NClwZ2QucGdkID4+IDMyKTsKKwllbHNlCisJCXJldCA9ICBQVk9QX0NBTEwxKHBnZHZhbF90LCBwdl9tbXVfb3BzLnBnZF92YWwsCisJCQkJICBwZ2QucGdkKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgIF9fSEFWRV9BUkNIX1BURVBfTU9ESUZZX1BST1RfVFJBTlNBQ1RJT04KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgICBwdGVfdCAqcHRlcCkKK3sKKwlwdGV2YWxfdCByZXQ7CisKKwlyZXQgPSBQVk9QX0NBTEwzKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQsCisJCQkgbW0sIGFkZHIsIHB0ZXApOworCisJcmV0dXJuIChwdGVfdCkgeyAucHRlID0gcmV0IH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQorCQkvKiA1IGFyZyB3b3JkcyAqLworCQlwdl9tbXVfb3BzLnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KG1tLCBhZGRyLCBwdGVwLCBwdGUpOworCWVsc2UKKwkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5wdGVwX21vZGlmeV9wcm90X2NvbW1pdCwKKwkJCSAgICBtbSwgYWRkciwgcHRlcCwgcHRlLnB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJaWYgKHNpemVvZihwdGV2YWxfdCkgPiBzaXplb2YobG9uZykpCisJCVBWT1BfVkNBTEwzKHB2X21tdV9vcHMuc2V0X3B0ZSwgcHRlcCwKKwkJCSAgICBwdGUucHRlLCAodTY0KXB0ZS5wdGUgPj4gMzIpOworCWVsc2UKKwkJUFZPUF9WQ0FMTDIocHZfbW11X29wcy5zZXRfcHRlLCBwdGVwLAorCQkJICAgIHB0ZS5wdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwlpZiAoc2l6ZW9mKHB0ZXZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJLyogNSBhcmcgd29yZHMgKi8KKwkJcHZfbW11X29wcy5zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpOworCWVsc2UKKwkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcHRlX2F0LCBtbSwgYWRkciwgcHRlcCwgcHRlLnB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpCit7CisJcG1kdmFsX3QgdmFsID0gbmF0aXZlX3BtZF92YWwocG1kKTsKKworCWlmIChzaXplb2YocG1kdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQorCQlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLnNldF9wbWQsIHBtZHAsIHZhbCwgKHU2NCl2YWwgPj4gMzIpOworCWVsc2UKKwkJUFZPUF9WQ0FMTDIocHZfbW11X29wcy5zZXRfcG1kLCBwbWRwLCB2YWwpOworfQorCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCitzdGF0aWMgaW5saW5lIHBtZF90IF9fcG1kKHBtZHZhbF90IHZhbCkKK3sKKwlwbWR2YWxfdCByZXQ7CisKKwlpZiAoc2l6ZW9mKHBtZHZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJcmV0ID0gUFZPUF9DQUxMMihwbWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3BtZCwKKwkJCQkgdmFsLCAodTY0KXZhbCA+PiAzMik7CisJZWxzZQorCQlyZXQgPSBQVk9QX0NBTEwxKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAorCQkJCSB2YWwpOworCisJcmV0dXJuIChwbWRfdCkgeyByZXQgfTsKK30KKworc3RhdGljIGlubGluZSBwbWR2YWxfdCBwbWRfdmFsKHBtZF90IHBtZCkKK3sKKwlwbWR2YWxfdCByZXQ7CisKKwlpZiAoc2l6ZW9mKHBtZHZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJcmV0ID0gIFBWT1BfQ0FMTDIocG1kdmFsX3QsIHB2X21tdV9vcHMucG1kX3ZhbCwKKwkJCQkgIHBtZC5wbWQsICh1NjQpcG1kLnBtZCA+PiAzMik7CisJZWxzZQorCQlyZXQgPSAgUFZPUF9DQUxMMShwbWR2YWxfdCwgcHZfbW11X29wcy5wbWRfdmFsLAorCQkJCSAgcG1kLnBtZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQoreworCXB1ZHZhbF90IHZhbCA9IG5hdGl2ZV9wdWRfdmFsKHB1ZCk7CisKKwlpZiAoc2l6ZW9mKHB1ZHZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJUFZPUF9WQ0FMTDMocHZfbW11X29wcy5zZXRfcHVkLCBwdWRwLAorCQkJICAgIHZhbCwgKHU2NCl2YWwgPj4gMzIpOworCWVsc2UKKwkJUFZPUF9WQ0FMTDIocHZfbW11X29wcy5zZXRfcHVkLCBwdWRwLAorCQkJICAgIHZhbCk7Cit9CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CitzdGF0aWMgaW5saW5lIHB1ZF90IF9fcHVkKHB1ZHZhbF90IHZhbCkKK3sKKwlwdWR2YWxfdCByZXQ7CisKKwlpZiAoc2l6ZW9mKHB1ZHZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJcmV0ID0gUFZPUF9DQUxMMihwdWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3B1ZCwKKwkJCQkgdmFsLCAodTY0KXZhbCA+PiAzMik7CisJZWxzZQorCQlyZXQgPSBQVk9QX0NBTEwxKHB1ZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcHVkLAorCQkJCSB2YWwpOworCisJcmV0dXJuIChwdWRfdCkgeyByZXQgfTsKK30KKworc3RhdGljIGlubGluZSBwdWR2YWxfdCBwdWRfdmFsKHB1ZF90IHB1ZCkKK3sKKwlwdWR2YWxfdCByZXQ7CisKKwlpZiAoc2l6ZW9mKHB1ZHZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJcmV0ID0gIFBWT1BfQ0FMTDIocHVkdmFsX3QsIHB2X21tdV9vcHMucHVkX3ZhbCwKKwkJCQkgIHB1ZC5wdWQsICh1NjQpcHVkLnB1ZCA+PiAzMik7CisJZWxzZQorCQlyZXQgPSAgUFZPUF9DQUxMMShwdWR2YWxfdCwgcHZfbW11X29wcy5wdWRfdmFsLAorCQkJCSAgcHVkLnB1ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BnZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkKQoreworCXBnZHZhbF90IHZhbCA9IG5hdGl2ZV9wZ2RfdmFsKHBnZCk7CisKKwlpZiAoc2l6ZW9mKHBnZHZhbF90KSA+IHNpemVvZihsb25nKSkKKwkJUFZPUF9WQ0FMTDMocHZfbW11X29wcy5zZXRfcGdkLCBwZ2RwLAorCQkJICAgIHZhbCwgKHU2NCl2YWwgPj4gMzIpOworCWVsc2UKKwkJUFZPUF9WQ0FMTDIocHZfbW11X29wcy5zZXRfcGdkLCBwZ2RwLAorCQkJICAgIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKnBnZHApCit7CisJc2V0X3BnZChwZ2RwLCBfX3BnZCgwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdWRfY2xlYXIocHVkX3QgKnB1ZHApCit7CisJc2V0X3B1ZChwdWRwLCBfX3B1ZCgwKSk7Cit9CisKKyNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID09IDQgKi8KKworI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPj0gMyAqLworCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKy8qIFNwZWNpYWwtY2FzZSBwdGUtc2V0dGluZyBvcGVyYXRpb25zIGZvciBQQUUsIHdoaWNoIGNhbid0IHVwZGF0ZSBhCisgICA2NC1iaXQgcHRlIGF0b21pY2FsbHkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCVBWT1BfVkNBTEwzKHB2X21tdV9vcHMuc2V0X3B0ZV9hdG9taWMsIHB0ZXAsCisJCSAgICBwdGUucHRlLCBwdGUucHRlID4+IDMyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJLyogNSBhcmcgd29yZHMgKi8KKwlwdl9tbXVfb3BzLnNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICBwdGVfdCAqcHRlcCkKK3sKKwlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLnB0ZV9jbGVhciwgbW0sIGFkZHIsIHB0ZXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICpwbWRwKQoreworCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMucG1kX2NsZWFyLCBwbWRwKTsKK30KKyNlbHNlICAvKiAhQ09ORklHX1g4Nl9QQUUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXNldF9wdGUocHRlcCwgcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJc2V0X3B0ZShwdGVwLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgIHB0ZV90ICpwdGVwKQoreworCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKDApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqcG1kcCkKK3sKKwlzZXRfcG1kKHBtZHAsIF9fcG1kKDApKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLworCisvKiBMYXp5IG1vZGUgZm9yIGJhdGNoaW5nIHVwZGF0ZXMgLyBjb250ZXh0IHN3aXRjaCAqLworZW51bSBwYXJhdmlydF9sYXp5X21vZGUgeworCVBBUkFWSVJUX0xBWllfTk9ORSwKKwlQQVJBVklSVF9MQVpZX01NVSwKKwlQQVJBVklSVF9MQVpZX0NQVSwKK307CisKK2VudW0gcGFyYXZpcnRfbGF6eV9tb2RlIHBhcmF2aXJ0X2dldF9sYXp5X21vZGUodm9pZCk7Cit2b2lkIHBhcmF2aXJ0X2VudGVyX2xhenlfY3B1KHZvaWQpOwordm9pZCBwYXJhdmlydF9sZWF2ZV9sYXp5X2NwdSh2b2lkKTsKK3ZvaWQgcGFyYXZpcnRfZW50ZXJfbGF6eV9tbXUodm9pZCk7Cit2b2lkIHBhcmF2aXJ0X2xlYXZlX2xhenlfbW11KHZvaWQpOwordm9pZCBwYXJhdmlydF9sZWF2ZV9sYXp5KGVudW0gcGFyYXZpcnRfbGF6eV9tb2RlIG1vZGUpOworCisjZGVmaW5lICBfX0hBVkVfQVJDSF9FTlRFUl9MQVpZX0NQVV9NT0RFCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X2NwdV9tb2RlKHZvaWQpCit7CisJUFZPUF9WQ0FMTDAocHZfY3B1X29wcy5sYXp5X21vZGUuZW50ZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9sZWF2ZV9sYXp5X2NwdV9tb2RlKHZvaWQpCit7CisJUFZPUF9WQ0FMTDAocHZfY3B1X29wcy5sYXp5X21vZGUubGVhdmUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mbHVzaF9sYXp5X2NwdV9tb2RlKHZvaWQpCit7CisJaWYgKHVubGlrZWx5KHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX0NQVSkpIHsKKwkJYXJjaF9sZWF2ZV9sYXp5X2NwdV9tb2RlKCk7CisJCWFyY2hfZW50ZXJfbGF6eV9jcHVfbW9kZSgpOworCX0KK30KKworCisjZGVmaW5lICBfX0hBVkVfQVJDSF9FTlRFUl9MQVpZX01NVV9NT0RFCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpCit7CisJUFZPUF9WQ0FMTDAocHZfbW11X29wcy5sYXp5X21vZGUuZW50ZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpCit7CisJUFZPUF9WQ0FMTDAocHZfbW11X29wcy5sYXp5X21vZGUubGVhdmUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpCit7CisJaWYgKHVubGlrZWx5KHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX01NVSkpIHsKKwkJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CisJCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2ZpeG1hcCh1bnNpZ25lZCAvKiBlbnVtIGZpeGVkX2FkZHJlc3NlcyAqLyBpZHgsCisJCQkJdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncykKK3sKKwlwdl9tbXVfb3BzLnNldF9maXhtYXAoaWR4LCBwaHlzLCBmbGFncyk7Cit9CisKK3ZvaWQgX3BhcmF2aXJ0X25vcCh2b2lkKTsKKyNkZWZpbmUgcGFyYXZpcnRfbm9wCSgodm9pZCAqKV9wYXJhdmlydF9ub3ApCisKK3ZvaWQgcGFyYXZpcnRfdXNlX2J5dGVsb2Nrcyh2b2lkKTsKKworI2lmZGVmIENPTkZJR19TTVAKKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19sb2NrZWQoc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMShpbnQsIHB2X2xvY2tfb3BzLnNwaW5faXNfbG9ja2VkLCBsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQoc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMShpbnQsIHB2X2xvY2tfb3BzLnNwaW5faXNfY29udGVuZGVkLCBsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQoreworCVBWT1BfVkNBTEwxKHB2X2xvY2tfb3BzLnNwaW5fbG9jaywgbG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2tfZmxhZ3Moc3RydWN0IHJhd19zcGlubG9jayAqbG9jaywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlQVk9QX1ZDQUxMMihwdl9sb2NrX29wcy5zcGluX2xvY2tfZmxhZ3MsIGxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCit7CisJcmV0dXJuIFBWT1BfQ0FMTDEoaW50LCBwdl9sb2NrX29wcy5zcGluX3RyeWxvY2ssIGxvY2spOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlQVk9QX1ZDQUxMMShwdl9sb2NrX29wcy5zcGluX3VubG9jaywgbG9jayk7Cit9CisKKyNlbmRpZgorCisvKiBUaGVzZSBhbGwgc2l0IGluIHRoZSAucGFyYWluc3RydWN0aW9ucyBzZWN0aW9uIHRvIHRlbGwgdXMgd2hhdCB0byBwYXRjaC4gKi8KK3N0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlIHsKKwl1OCAqaW5zdHI7IAkJLyogb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zICovCisJdTggaW5zdHJ0eXBlOwkJLyogdHlwZSBvZiB0aGlzIGluc3RydWN0aW9uICovCisJdTggbGVuOwkJCS8qIGxlbmd0aCBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCXUxNiBjbG9iYmVyczsJCS8qIHdoYXQgcmVnaXN0ZXJzIHlvdSBtYXkgY2xvYmJlciAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlIF9fcGFyYWluc3RydWN0aW9uc1tdLAorCV9fcGFyYWluc3RydWN0aW9uc19lbmRbXTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyNkZWZpbmUgUFZfU0FWRV9SRUdTICJwdXNobCAlJWVjeDsgcHVzaGwgJSVlZHg7IgorI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgInBvcGwgJSVlZHg7IHBvcGwgJSVlY3giCisjZGVmaW5lIFBWX0ZMQUdTX0FSRyAiMCIKKyNkZWZpbmUgUFZfRVhUUkFfQ0xPQkJFUlMKKyNkZWZpbmUgUFZfVkVYVFJBX0NMT0JCRVJTCisjZWxzZQorLyogV2Ugc2F2ZSBzb21lIHJlZ2lzdGVycywgYnV0IGFsbCBvZiB0aGVtLCB0aGF0J3MgdG9vIG11Y2guIFdlIGNsb2JiZXIgYWxsCisgKiBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzIGJ1dCB0aGUgYXJndW1lbnQgcGFyYW1ldGVyICovCisjZGVmaW5lIFBWX1NBVkVfUkVHUyAicHVzaHEgJSVyZGk7IgorI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgInBvcHEgJSVyZGk7IgorI2RlZmluZSBQVl9FWFRSQV9DTE9CQkVSUyBFWFRSQV9DTE9CQkVSUywgInJjeCIgLCAicmR4IiwgInJzaSIKKyNkZWZpbmUgUFZfVkVYVFJBX0NMT0JCRVJTIEVYVFJBX0NMT0JCRVJTLCAicmRpIiwgInJjeCIgLCAicmR4IiwgInJzaSIKKyNkZWZpbmUgUFZfRkxBR1NfQVJHICJEIgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmOworCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQVl9TQVZFX1JFR1MKKwkJCQkgIFBBUkFWSVJUX0NBTEwKKwkJCQkgIFBWX1JFU1RPUkVfUkVHUykKKwkJICAgICA6ICI9YSIoZikKKwkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5zYXZlX2ZsKSwKKwkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCisJCSAgICAgOiAibWVtb3J5IiwgImNjIiBQVl9WRVhUUkFfQ0xPQkJFUlMpOworCXJldHVybiBmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZikKK3sKKwlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBWX1NBVkVfUkVHUworCQkJCSAgUEFSQVZJUlRfQ0FMTAorCQkJCSAgUFZfUkVTVE9SRV9SRUdTKQorCQkgICAgIDogIj1hIihmKQorCQkgICAgIDogUFZfRkxBR1NfQVJHKGYpLAorCQkgICAgICAgcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnJlc3RvcmVfZmwpLAorCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFBWX0VYVFJBX0NMT0JCRVJTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCisJCQkJICBQQVJBVklSVF9DQUxMCisJCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJCSAgICAgOgorCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9kaXNhYmxlKSwKKwkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCisJCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIgUFZfRVhUUkFfQ0xPQkJFUlMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9lbmFibGUodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBWX1NBVkVfUkVHUworCQkJCSAgUEFSQVZJUlRfQ0FMTAorCQkJCSAgUFZfUkVTVE9SRV9SRUdTKQorCQkgICAgIDoKKwkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZW5hYmxlKSwKKwkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCisJCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIgUFZfRVhUUkFfQ0xPQkJFUlMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfaXJxX3NhdmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGY7CisKKwlmID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOworCXJhd19sb2NhbF9pcnFfZGlzYWJsZSgpOworCXJldHVybiBmOworfQorCisKKy8qIE1ha2Ugc3VyZSBhcyBsaXR0bGUgYXMgcG9zc2libGUgb2YgdGhpcyBtZXNzIGVzY2FwZXMuICovCisjdW5kZWYgUEFSQVZJUlRfQ0FMTAorI3VuZGVmIF9fUFZPUF9DQUxMCisjdW5kZWYgX19QVk9QX1ZDQUxMCisjdW5kZWYgUFZPUF9WQ0FMTDAKKyN1bmRlZiBQVk9QX0NBTEwwCisjdW5kZWYgUFZPUF9WQ0FMTDEKKyN1bmRlZiBQVk9QX0NBTEwxCisjdW5kZWYgUFZPUF9WQ0FMTDIKKyN1bmRlZiBQVk9QX0NBTEwyCisjdW5kZWYgUFZPUF9WQ0FMTDMKKyN1bmRlZiBQVk9QX0NBTEwzCisjdW5kZWYgUFZPUF9WQ0FMTDQKKyN1bmRlZiBQVk9QX0NBTEw0CisKKyNlbHNlICAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBfUFZTSVRFKHB0eXBlLCBjbG9iYmVycywgb3BzLCB3b3JkLCBhbGduKQlcCis3NzE6OwkJCQkJCVwKKwlvcHM7CQkJCQlcCis3NzI6OwkJCQkJCVwKKwkucHVzaHNlY3Rpb24gLnBhcmFpbnN0cnVjdGlvbnMsImEiOwlcCisJIC5hbGlnbglhbGduOwkJCQlcCisJIHdvcmQgNzcxYjsJCQkJXAorCSAuYnl0ZSBwdHlwZTsJCQkJXAorCSAuYnl0ZSA3NzJiLTc3MWI7CQkJXAorCSAuc2hvcnQgY2xvYmJlcnM7CQkJXAorCS5wb3BzZWN0aW9uCisKKworI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgUFZfU0FWRV9SRUdTCQkJCVwKKwlwdXNoICVyYXg7CQkJCVwKKwlwdXNoICVyY3g7CQkJCVwKKwlwdXNoICVyZHg7CQkJCVwKKwlwdXNoICVyc2k7CQkJCVwKKwlwdXNoICVyZGk7CQkJCVwKKwlwdXNoICVyODsJCQkJXAorCXB1c2ggJXI5OwkJCQlcCisJcHVzaCAlcjEwOwkJCQlcCisJcHVzaCAlcjExCisjZGVmaW5lIFBWX1JFU1RPUkVfUkVHUwkJCQlcCisJcG9wICVyMTE7CQkJCVwKKwlwb3AgJXIxMDsJCQkJXAorCXBvcCAlcjk7CQkJCVwKKwlwb3AgJXI4OwkJCQlcCisJcG9wICVyZGk7CQkJCVwKKwlwb3AgJXJzaTsJCQkJXAorCXBvcCAlcmR4OwkJCQlcCisJcG9wICVyY3g7CQkJCVwKKwlwb3AgJXJheAorI2RlZmluZSBQQVJBX1BBVENIKHN0cnVjdCwgb2ZmKSAgICAgICAgKChQQVJBVklSVF9QQVRDSF8jI3N0cnVjdCArIChvZmYpKSAvIDgpCisjZGVmaW5lIFBBUkFfU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcykgX1BWU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcywgLnF1YWQsIDgpCisjZGVmaW5lIFBBUkFfSU5ESVJFQ1QoYWRkcikJKmFkZHIoJXJpcCkKKyNlbHNlCisjZGVmaW5lIFBWX1NBVkVfUkVHUyAgIHB1c2hsICVlYXg7IHB1c2hsICVlZGk7IHB1c2hsICVlY3g7IHB1c2hsICVlZHgKKyNkZWZpbmUgUFZfUkVTVE9SRV9SRUdTIHBvcGwgJWVkeDsgcG9wbCAlZWN4OyBwb3BsICVlZGk7IHBvcGwgJWVheAorI2RlZmluZSBQQVJBX1BBVENIKHN0cnVjdCwgb2ZmKSAgICAgICAgKChQQVJBVklSVF9QQVRDSF8jI3N0cnVjdCArIChvZmYpKSAvIDQpCisjZGVmaW5lIFBBUkFfU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcykgX1BWU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcywgLmxvbmcsIDQpCisjZGVmaW5lIFBBUkFfSU5ESVJFQ1QoYWRkcikJKiVjczphZGRyCisjZW5kaWYKKworI2RlZmluZSBJTlRFUlJVUFRfUkVUVVJOCQkJCQkJXAorCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV9pcmV0KSwgQ0xCUl9OT05FLAlcCisJCSAgam1wIFBBUkFfSU5ESVJFQ1QocHZfY3B1X29wcytQVl9DUFVfaXJldCkpCisKKyNkZWZpbmUgRElTQUJMRV9JTlRFUlJVUFRTKGNsb2JiZXJzKQkJCQkJXAorCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2lycV9vcHMsIFBWX0lSUV9pcnFfZGlzYWJsZSksIGNsb2JiZXJzLCBcCisJCSAgUFZfU0FWRV9SRUdTOwkJCQkJCVwKKwkJICBjYWxsIFBBUkFfSU5ESVJFQ1QocHZfaXJxX29wcytQVl9JUlFfaXJxX2Rpc2FibGUpOwlcCisJCSAgUFZfUkVTVE9SRV9SRUdTOykJCQlcCisKKyNkZWZpbmUgRU5BQkxFX0lOVEVSUlVQVFMoY2xvYmJlcnMpCQkJCQlcCisJUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfaXJxX29wcywgUFZfSVJRX2lycV9lbmFibGUpLCBjbG9iYmVycywJXAorCQkgIFBWX1NBVkVfUkVHUzsJCQkJCQlcCisJCSAgY2FsbCBQQVJBX0lORElSRUNUKHB2X2lycV9vcHMrUFZfSVJRX2lycV9lbmFibGUpOwlcCisJCSAgUFZfUkVTVE9SRV9SRUdTOykKKworI2RlZmluZSBVU0VSR1NfU1lTUkVUMzIJCQkJCQkJXAorCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV91c2VyZ3Nfc3lzcmV0MzIpLAlcCisJCSAgQ0xCUl9OT05FLAkJCQkJCVwKKwkJICBqbXAgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV91c2VyZ3Nfc3lzcmV0MzIpKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBHRVRfQ1IwX0lOVE9fRUFYCQkJCVwKKwlwdXNoICVlY3g7IHB1c2ggJWVkeDsJCQkJXAorCWNhbGwgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9yZWFkX2NyMCk7CVwKKwlwb3AgJWVkeDsgcG9wICVlY3gKKworI2RlZmluZSBFTkFCTEVfSU5URVJSVVBUU19TWVNFWElUCQkJCQlcCisJUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX2lycV9lbmFibGVfc3lzZXhpdCksCVwKKwkJICBDTEJSX05PTkUsCQkJCQkJXAorCQkgIGptcCBQQVJBX0lORElSRUNUKHB2X2NwdV9vcHMrUFZfQ1BVX2lycV9lbmFibGVfc3lzZXhpdCkpCisKKworI2Vsc2UJLyogIUNPTkZJR19YODZfMzIgKi8KKworLyoKKyAqIElmIHN3YXBncyBpcyB1c2VkIHdoaWxlIHRoZSB1c2Vyc3BhY2Ugc3RhY2sgaXMgc3RpbGwgY3VycmVudCwKKyAqIHRoZXJlJ3Mgbm8gd2F5IHRvIGNhbGwgYSBwdm9wLiAgVGhlIFBWIHJlcGxhY2VtZW50ICptdXN0KiBiZQorICogaW5saW5lZCwgb3IgdGhlIHN3YXBncyBpbnN0cnVjdGlvbiBtdXN0IGJlIHRyYXBwZWQgYW5kIGVtdWxhdGVkLgorICovCisjZGVmaW5lIFNXQVBHU19VTlNBRkVfU1RBQ0sJCQkJCQlcCisJUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX3N3YXBncyksIENMQlJfTk9ORSwJXAorCQkgIHN3YXBncykKKworI2RlZmluZSBTV0FQR1MJCQkJCQkJCVwKKwlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9jcHVfb3BzLCBQVl9DUFVfc3dhcGdzKSwgQ0xCUl9OT05FLAlcCisJCSAgUFZfU0FWRV9SRUdTOwkJCQkJCVwKKwkJICBjYWxsIFBBUkFfSU5ESVJFQ1QocHZfY3B1X29wcytQVl9DUFVfc3dhcGdzKTsJCVwKKwkJICBQVl9SRVNUT1JFX1JFR1MJCQkJCVwKKwkJICkKKworI2RlZmluZSBHRVRfQ1IyX0lOVE9fUkNYCQkJCVwKKwljYWxsIFBBUkFfSU5ESVJFQ1QocHZfbW11X29wcytQVl9NTVVfcmVhZF9jcjIpOwlcCisJbW92cSAlcmF4LCAlcmN4OwkJCQlcCisJeG9ycSAlcmF4LCAlcmF4OworCisjZGVmaW5lIFBBUkFWSVJUX0FESlVTVF9FWENFUFRJT05fRlJBTUUJCQkJCVwKKwlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9pcnFfb3BzLCBQVl9JUlFfYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSksIFwKKwkJICBDTEJSX05PTkUsCQkJCQkJXAorCQkgIGNhbGwgUEFSQV9JTkRJUkVDVChwdl9pcnFfb3BzK1BWX0lSUV9hZGp1c3RfZXhjZXB0aW9uX2ZyYW1lKSkKKworI2RlZmluZSBVU0VSR1NfU1lTUkVUNjQJCQkJCQkJXAorCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV91c2VyZ3Nfc3lzcmV0NjQpLAlcCisJCSAgQ0xCUl9OT05FLAkJCQkJCVwKKwkJICBqbXAgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV91c2VyZ3Nfc3lzcmV0NjQpKQorCisjZGVmaW5lIEVOQUJMRV9JTlRFUlJVUFRTX1NZU0VYSVQzMgkJCQkJXAorCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV9pcnFfZW5hYmxlX3N5c2V4aXQpLAlcCisJCSAgQ0xCUl9OT05FLAkJCQkJCVwKKwkJICBqbXAgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9pcnFfZW5hYmxlX3N5c2V4aXQpKQorI2VuZGlmCS8qIENPTkZJR19YODZfMzIgKi8KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVCAqLworI2VuZGlmIC8qIF9BU01fWDg2X1BBUkFWSVJUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcnBvcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRmZmViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFycG9ydC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fWDg2X1BBUlBPUlRfSAorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3sKKwlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyhhdXRvaXJxLCBhdXRvZG1hKTsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X1BBUlBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGF0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQ5M2IzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGF0LmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QQVRfSAorI2RlZmluZSBfQVNNX1g4Nl9QQVRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmZGVmIENPTkZJR19YODZfUEFUCitleHRlcm4gaW50IHBhdF9lbmFibGVkOworZXh0ZXJuIHZvaWQgdmFsaWRhdGVfcGF0X3N1cHBvcnQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKyNlbHNlCitzdGF0aWMgY29uc3QgaW50IHBhdF9lbmFibGVkOworc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX3BhdF9zdXBwb3J0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykgeyB9CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgcGF0X2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgcmVzZXJ2ZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJdW5zaWduZWQgbG9uZyByZXFfdHlwZSwgdW5zaWduZWQgbG9uZyAqcmV0X3R5cGUpOworZXh0ZXJuIGludCBmcmVlX21lbXR5cGUodTY0IHN0YXJ0LCB1NjQgZW5kKTsKKworZXh0ZXJuIHZvaWQgcGF0X2Rpc2FibGUoY2hhciAqcmVhc29uKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1BBVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2ktZGlyZWN0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2ktZGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlN2E0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS1kaXJlY3QuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9BU01fWDg2X1BDSV9ESVJFQ1RfSAorI2RlZmluZSBfQVNNX1g4Nl9QQ0lfRElSRUNUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIERpcmVjdCBQQ0kgYWNjZXNzLiBUaGlzIGlzIHVzZWQgZm9yIFBDSSBhY2Nlc3NlcyBpbiBlYXJseSBib290IGJlZm9yZQorICAgdGhlIFBDSSBzdWJzeXN0ZW0gd29ya3MuICovCisKK2V4dGVybiB1MzIgcmVhZF9wY2lfY29uZmlnKHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0KTsKK2V4dGVybiB1OCByZWFkX3BjaV9jb25maWdfYnl0ZSh1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCk7CitleHRlcm4gdTE2IHJlYWRfcGNpX2NvbmZpZ18xNih1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCk7CitleHRlcm4gdm9pZCB3cml0ZV9wY2lfY29uZmlnKHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0LCB1MzIgdmFsKTsKK2V4dGVybiB2b2lkIHdyaXRlX3BjaV9jb25maWdfYnl0ZSh1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCwgdTggdmFsKTsKK2V4dGVybiB2b2lkIHdyaXRlX3BjaV9jb25maWdfMTYodTggYnVzLCB1OCBzbG90LCB1OCBmdW5jLCB1OCBvZmZzZXQsIHUxNiB2YWwpOworCitleHRlcm4gaW50IGVhcmx5X3BjaV9hbGxvd2VkKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgaW50IHBjaV9lYXJseV9kdW1wX3JlZ3M7CitleHRlcm4gdm9pZCBlYXJseV9kdW1wX3BjaV9kZXZpY2UodTggYnVzLCB1OCBzbG90LCB1OCBmdW5jKTsKK2V4dGVybiB2b2lkIGVhcmx5X2R1bXBfcGNpX2RldmljZXModm9pZCk7CisjZW5kaWYgLyogX0FTTV9YODZfUENJX0RJUkVDVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NWIzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QQ0lfSAorI2RlZmluZSBfQVNNX1g4Nl9QQ0lfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4gLyogZm9yIHN0cnVjdCBwYWdlICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBwY2lfc3lzZGF0YSB7CisJaW50CQlkb21haW47CQkvKiBQQ0kgZG9tYWluICovCisJaW50CQlub2RlOwkJLyogTlVNQSBub2RlICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXZvaWQJCSppb21tdTsJCS8qIElPTU1VIHByaXZhdGUgZGF0YSAqLworI2VuZGlmCit9OworCitleHRlcm4gaW50IHBjaV9yb3V0ZWlycTsKKworLyogc2NhbiBhIGJ1cyBhZnRlciBhbGxvY2F0aW5nIGEgcGNpX3N5c2RhdGEgZm9yIGl0ICovCitleHRlcm4gc3RydWN0IHBjaV9idXMgKnBjaV9zY2FuX2J1c19vbl9ub2RlKGludCBidXNubywgc3RydWN0IHBjaV9vcHMgKm9wcywKKwkJCQkJICAgIGludCBub2RlKTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX3NjYW5fYnVzX3dpdGhfc3lzZGF0YShpbnQgYnVzbm8pOworCitzdGF0aWMgaW5saW5lIGludCBwY2lfZG9tYWluX25yKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9zeXNkYXRhICpzZCA9IGJ1cy0+c3lzZGF0YTsKKwlyZXR1cm4gc2QtPmRvbWFpbjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGNpX3Byb2NfZG9tYWluKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJcmV0dXJuIHBjaV9kb21haW5fbnIoYnVzKTsKK30KKworCisvKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgbG9naWMgaW4gcGNpX3NjYW5fYnVzIGZvciBza2lwcGluZworICAgYWxyZWFkeS1jb25maWd1cmVkIGJ1cyBudW1iZXJzIC0gdG8gYmUgdXNlZCBmb3IgYnVnZ3kgQklPU2VzCisgICBvciBhcmNoaXRlY3R1cmVzIHdpdGggaW5jb21wbGV0ZSBQQ0kgc2V0dXAgYnkgdGhlIGxvYWRlciAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKKyNlbmRpZgorI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9tZW1fc3RhcnQ7CisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDEwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkocGNpX21lbV9zdGFydCkKKworI2RlZmluZSBQQ0lCSU9TX01JTl9DQVJEQlVTX0lPCTB4NDAwMAorCit2b2lkIHBjaWJpb3NfY29uZmlnX2luaXQodm9pZCk7CitzdHJ1Y3QgcGNpX2J1cyAqcGNpYmlvc19zY2FuX3Jvb3QoaW50IGJ1cyk7CisKK3ZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSk7CitzdHJ1Y3QgaXJxX3JvdXRpbmdfdGFibGUgKnBjaWJpb3NfZ2V0X2lycV9yb3V0aW5nX3RhYmxlKHZvaWQpOworaW50IHBjaWJpb3Nfc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwaW4sIGludCBpcnEpOworCisKKyNkZWZpbmUgSEFWRV9QQ0lfTU1BUAorZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwKKwkJCSAgICAgICBpbnQgd3JpdGVfY29tYmluZSk7CisKKworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiB2b2lkIGVhcmx5X3F1aXJrcyh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX2J1cnN0X2FkdmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJZW51bSBwY2lfZG1hX2J1cnN0X3N0cmF0ZWd5ICpzdHJhdCwKKwkJCQkJdW5zaWduZWQgbG9uZyAqc3RyYXRlZ3lfcGFyYW1ldGVyKQoreworCSpzdHJhdCA9IFBDSV9ETUFfQlVSU1RfSU5GSU5JVFk7CisJKnN0cmF0ZWd5X3BhcmFtZXRlciA9IH4wVUw7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X3F1aXJrcyh2b2lkKSB7IH0KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgaW5jbHVkZSAicGNpXzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJwY2lfNjQuaCIKKyNlbmRpZgorCisvKiBpbXBsZW1lbnQgdGhlIHBjaV8gRE1BIEFQSSBpbiB0ZXJtcyBvZiB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hXyBvbmUgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCisvKiBnZW5lcmljIHBjaSBzdHVmZiAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgorCisjaWZkZWYgQ09ORklHX05VTUEKKy8qIFJldHVybnMgdGhlIG5vZGUgYmFzZWQgb24gcGNpIGJ1cyAqLworc3RhdGljIGlubGluZSBpbnQgX19wY2lidXNfdG9fbm9kZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfc3lzZGF0YSAqc2QgPSBidXMtPnN5c2RhdGE7CisKKwlyZXR1cm4gc2QtPm5vZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IF9fcGNpYnVzX3RvX2NwdW1hc2soc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlyZXR1cm4gbm9kZV90b19jcHVtYXNrKF9fcGNpYnVzX3RvX25vZGUoYnVzKSk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMTIxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfMzIuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9BU01fWDg2X1BDSV8zMl9ICisjZGVmaW5lIF9BU01fWDg2X1BDSV8zMl9ICisKKworI2lmZGVmIF9fS0VSTkVMX18KKworCisvKiBEeW5hbWljIERNQSBtYXBwaW5nIHN0dWZmLgorICogaTM4NiBoYXMgZXZlcnl0aGluZyBtYXBwZWQgc3RhdGljYWxseS4KKyAqLworCitzdHJ1Y3QgcGNpX2RldjsKKworLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeQorICogYWRkcmVzcyBzcGFjZS4gIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZQorICogdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyIGRlY2lzaW9ucy4KKyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgxKQorCisvKiBwY2lfdW5tYXBfe3BhZ2Usc2luZ2xlfSBpcyBhIG5vcCBzby4uLiAqLworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJZG1hX2FkZHJfdCBBRERSX05BTUVbMF07CisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJdW5zaWduZWQgTEVOX05BTUVbMF07CisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQlzaXplb2YoKFBUUiktPkFERFJfTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpIFwKKwlkbyB7IGJyZWFrOyB9IHdoaWxlIChwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkpCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCXNpemVvZigoUFRSKS0+TEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkgXAorCWRvIHsgYnJlYWs7IH0gd2hpbGUgKHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkpCisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisjZW5kaWYgLyogX0FTTV9YODZfUENJXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyODk5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCkBAIC0wLDAgKzEsNjYgQEAKKyNpZm5kZWYgX0FTTV9YODZfUENJXzY0X0gKKyNkZWZpbmUgX0FTTV9YODZfUENJXzY0X0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VCitzdGF0aWMgaW5saW5lIHZvaWQgKnBjaV9pb21tdShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfc3lzZGF0YSAqc2QgPSBidXMtPnN5c2RhdGE7CisJcmV0dXJuIHNkLT5pb21tdTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wY2lfaW9tbXUoc3RydWN0IHBjaV9idXMgKmJ1cywgdm9pZCAqdmFsKQoreworCXN0cnVjdCBwY2lfc3lzZGF0YSAqc2QgPSBidXMtPnN5c2RhdGE7CisJc2QtPmlvbW11ID0gdmFsOworfQorI2VuZGlmIC8qIENPTkZJR19DQUxHQVJZX0lPTU1VICovCisKK2V4dGVybiBpbnQgKCpwY2lfY29uZmlnX3JlYWQpKGludCBzZWcsIGludCBidXMsIGludCBkZXYsIGludCBmbiwKKwkJCSAgICAgIGludCByZWcsIGludCBsZW4sIHUzMiAqdmFsdWUpOworZXh0ZXJuIGludCAoKnBjaV9jb25maWdfd3JpdGUpKGludCBzZWcsIGludCBidXMsIGludCBkZXYsIGludCBmbiwKKwkJCSAgICAgICBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgdmFsdWUpOworCitleHRlcm4gdm9pZCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9pZCk7CitleHRlcm4gdm9pZCBwY2lfaW9tbXVfYWxsb2Modm9pZCk7CisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMKKyAqCisgKiBPbiBBTUQ2NCBpdCBtb3N0bHkgZXF1YWxzLCBidXQgd2Ugc2V0IGl0IHRvIHplcm8gaWYgYSBoYXJkd2FyZQorICogSU9NTVUgKGdhcnQpIG9mIHNvdHdhcmUgSU9NTVUgKHN3aW90bGIpIGlzIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTIChkbWFfb3BzLT5pc19waHlzKQorCisjaWYgZGVmaW5lZChDT05GSUdfR0FSVF9JT01NVSkgfHwgZGVmaW5lZChDT05GSUdfQ0FMR0FSWV9JT01NVSkKKworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJXAorCWRtYV9hZGRyX3QgQUREUl9OQU1FOworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCQlcCisJX191MzIgTEVOX05BTUU7CisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJCVwKKwkoKFBUUiktPkFERFJfTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkJXAorCSgoUFRSKS0+TEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJCVwKKwkoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKKworI2Vsc2UKKy8qIE5vIElPTU1VICovCisKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKDApCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1BDSV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYmZmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZGEuaApAQCAtMCwwICsxLDEzNyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QREFfSAorI2RlZmluZSBfQVNNX1g4Nl9QREFfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKiBQZXIgcHJvY2Vzc29yIGRhdGFzdHJ1Y3R1cmUuICVncyBwb2ludHMgdG8gaXQgd2hpbGUgdGhlIGtlcm5lbCBydW5zICovCitzdHJ1Y3QgeDg2NjRfcGRhIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBjdXJyZW50OwkvKiAwICBDdXJyZW50IHByb2Nlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGRhdGFfb2Zmc2V0OwkvKiA4IFBlciBjcHUgZGF0YSBvZmZzZXQgZnJvbSBsaW5rZXIKKwkJCQkJICAgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcga2VybmVsc3RhY2s7CS8qIDE2IHRvcCBvZiBrZXJuZWwgc3RhY2sgZm9yIGN1cnJlbnQgKi8KKwl1bnNpZ25lZCBsb25nIG9sZHJzcDsJCS8qIDI0IHVzZXIgcnNwIGZvciBzeXN0ZW0gY2FsbCAqLworCWludCBpcnFjb3VudDsJCQkvKiAzMiBJcnEgbmVzdGluZyBjb3VudGVyLiBTdGFydHMgLTEgKi8KKwl1bnNpZ25lZCBpbnQgY3B1bnVtYmVyOwkJLyogMzYgTG9naWNhbCBDUFUgbnVtYmVyICovCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisJdW5zaWduZWQgbG9uZyBzdGFja19jYW5hcnk7CS8qIDQwIHN0YWNrIGNhbmFyeSB2YWx1ZSAqLworCQkJCQkvKiBnY2MtQUJJOiB0aGlzIGNhbmFyeSBNVVNUIGJlIGF0CisJCQkJCSAgIG9mZnNldCA0MCEhISAqLworI2VuZGlmCisJY2hhciAqaXJxc3RhY2twdHI7CisJc2hvcnQgbm9kZW51bWJlcjsJCS8qIG51bWJlciBvZiBjdXJyZW50IG5vZGUgKDMyayBtYXgpICovCisJc2hvcnQgaW5fYm9vdG1lbTsJCS8qIHBkYSBsaXZlcyBpbiBib290bWVtICovCisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCXVuc2lnbmVkIGludCBfX25taV9jb3VudDsJLyogbnVtYmVyIG9mIE5NSSBvbiB0aGlzIENQVXMgKi8KKwlzaG9ydCBtbXVfc3RhdGU7CisJc2hvcnQgaXNpZGxlOworCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbTsKKwl1bnNpZ25lZCBhcGljX3RpbWVyX2lycXM7CisJdW5zaWduZWQgaXJxMF9pcnFzOworCXVuc2lnbmVkIGlycV9yZXNjaGVkX2NvdW50OworCXVuc2lnbmVkIGlycV9jYWxsX2NvdW50OworCXVuc2lnbmVkIGlycV90bGJfY291bnQ7CisJdW5zaWduZWQgaXJxX3RoZXJtYWxfY291bnQ7CisJdW5zaWduZWQgaXJxX3RocmVzaG9sZF9jb3VudDsKKwl1bnNpZ25lZCBpcnFfc3B1cmlvdXNfY291bnQ7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisKK2V4dGVybiBzdHJ1Y3QgeDg2NjRfcGRhICoqX2NwdV9wZGE7CitleHRlcm4gdm9pZCBwZGFfaW5pdChpbnQpOworCisjZGVmaW5lIGNwdV9wZGEoaSkgKF9jcHVfcGRhW2ldKQorCisvKgorICogVGhlcmUgaXMgbm8gZmFzdCB3YXkgdG8gZ2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFBEQSwgYWxsIHRoZSBhY2Nlc3NlcworICogaGF2ZSB0byBtZW50aW9uICVmcy8lZ3MuICBTbyBpdCBuZWVkcyB0byBiZSBkb25lIHRoaXMgVG9ydmFsZGlhbiB3YXkuCisgKi8KK2V4dGVybiB2b2lkIF9fYmFkX3BkYV9maWVsZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCisvKgorICogcHJveHlfcGRhIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QsIGJ1dCB0ZWxsIGdjYyBpdCBpcyBhY2Nlc3NlZCBmb3IKKyAqIGFsbCBQREEgYWNjZXNzZXMgc28gaXQgZ2V0cyByZWFkL3dyaXRlIGRlcGVuZGVuY2llcyByaWdodC4KKyAqLworZXh0ZXJuIHN0cnVjdCB4ODY2NF9wZGEgX3Byb3h5X3BkYTsKKworI2RlZmluZSBwZGFfb2Zmc2V0KGZpZWxkKSBvZmZzZXRvZihzdHJ1Y3QgeDg2NjRfcGRhLCBmaWVsZCkKKworI2RlZmluZSBwZGFfdG9fb3Aob3AsIGZpZWxkLCB2YWwpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXR5cGVkZWYgdHlwZW9mKF9wcm94eV9wZGEuZmllbGQpIFRfXzsJCQkJXAorCWlmICgwKSB7IFRfXyB0bXBfXzsgdG1wX18gPSAodmFsKTsgfQkvKiB0eXBlIGNoZWNraW5nICovCVwKKwlzd2l0Y2ggKHNpemVvZihfcHJveHlfcGRhLmZpZWxkKSkgewkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlhc20ob3AgIncgJTEsJSVnczolYzIiIDoJCQkJXAorCQkgICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOgkJCQlcCisJCSAgICAicmkiICgoVF9fKXZhbCksCQkJCQlcCisJCSAgICAiaSIocGRhX29mZnNldChmaWVsZCkpKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJYXNtKG9wICJsICUxLCUlZ3M6JWMyIiA6CQkJCVwKKwkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAorCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAorCQkgICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSkpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJXAorCQlhc20ob3AgInEgJTEsJSVnczolYzIiOgkJCQkJXAorCQkgICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOgkJCQlcCisJCSAgICAicmkiICgoVF9fKXZhbCksCQkJCQlcCisJCSAgICAiaSIocGRhX29mZnNldChmaWVsZCkpKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19iYWRfcGRhX2ZpZWxkKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBwZGFfZnJvbV9vcChvcCwgZmllbGQpCQkJXAorKHsJCQkJCQlcCisJdHlwZW9mKF9wcm94eV9wZGEuZmllbGQpIHJldF9fOwkJXAorCXN3aXRjaCAoc2l6ZW9mKF9wcm94eV9wZGEuZmllbGQpKSB7CVwKKwljYXNlIDI6CQkJCQlcCisJCWFzbShvcCAidyAlJWdzOiVjMSwlMCIgOglcCisJCSAgICAiPXIiIChyZXRfXykgOgkJXAorCQkgICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSksCVwKKwkJICAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOwlcCisJCWJyZWFrOwkJCQlcCisJY2FzZSA0OgkJCQkJXAorCQlhc20ob3AgImwgJSVnczolYzEsJTAiOgkJXAorCQkgICAgIj1yIiAocmV0X18pOgkJXAorCQkgICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSksCVwKKwkJICAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOwlcCisJCWJyZWFrOwkJCQlcCisJY2FzZSA4OgkJCQkJXAorCQlhc20ob3AgInEgJSVnczolYzEsJTAiOgkJXAorCQkgICAgIj1yIiAocmV0X18pIDoJCVwKKwkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCisJCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAorCQlicmVhazsJCQkJXAorCWRlZmF1bHQ6CQkJCVwKKwkJX19iYWRfcGRhX2ZpZWxkKCk7CQlcCisJfQkJCQkJXAorCXJldF9fOwkJCQkJXAorfSkKKworI2RlZmluZSByZWFkX3BkYShmaWVsZCkJCXBkYV9mcm9tX29wKCJtb3YiLCBmaWVsZCkKKyNkZWZpbmUgd3JpdGVfcGRhKGZpZWxkLCB2YWwpCXBkYV90b19vcCgibW92IiwgZmllbGQsIHZhbCkKKyNkZWZpbmUgYWRkX3BkYShmaWVsZCwgdmFsKQlwZGFfdG9fb3AoImFkZCIsIGZpZWxkLCB2YWwpCisjZGVmaW5lIHN1Yl9wZGEoZmllbGQsIHZhbCkJcGRhX3RvX29wKCJzdWIiLCBmaWVsZCwgdmFsKQorI2RlZmluZSBvcl9wZGEoZmllbGQsIHZhbCkJcGRhX3RvX29wKCJvciIsIGZpZWxkLCB2YWwpCisKKy8qIFRoaXMgaXMgbm90IGF0b21pYyBhZ2FpbnN0IG90aGVyIENQVXMgLS0gQ1BVIHByZWVtcHRpb24gbmVlZHMgdG8gYmUgb2ZmICovCisjZGVmaW5lIHRlc3RfYW5kX2NsZWFyX2JpdF9wZGEoYml0LCBmaWVsZCkJCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IG9sZF9fOwkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJidHIgJTIsJSVnczolYzNcblx0c2JibCAlMCwlMCIJCQlcCisJCSAgICAgOiAiPXIiIChvbGRfXyksICIrbSIgKF9wcm94eV9wZGEuZmllbGQpCQlcCisJCSAgICAgOiAiZElyIiAoYml0KSwgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSkgOiAibWVtb3J5Iik7XAorCW9sZF9fOwkJCQkJCQkJXAorfSkKKworI2VuZGlmCisKKyNkZWZpbmUgUERBX1NUQUNLT0ZGU0VUICg1KjgpCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QREFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2U3MjA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTAsMCArMSwyMTggQEAKKyNpZm5kZWYgX0FTTV9YODZfUEVSQ1BVX0gKKyNkZWZpbmUgX0FTTV9YODZfUEVSQ1BVX0gKKworI2lmZGVmIENPTkZJR19YODZfNjQKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBTYW1lIGFzIGFzbS1nZW5lcmljL3BlcmNwdS5oLCBleGNlcHQgdGhhdCB3ZSBzdG9yZSB0aGUgcGVyIGNwdSBvZmZzZXQKKyAgIGluIHRoZSBQREEuIExvbmdlciB0ZXJtIHRoZSBQREEgYW5kIGV2ZXJ5IHBlciBjcHUgdmFyaWFibGUKKyAgIHNob3VsZCBiZSBqdXN0IHB1dCBpbnRvIGEgc2luZ2xlIHNlY3Rpb24gYW5kIHJlZmVyZW5jZWQgZGlyZWN0bHkKKyAgIGZyb20gJWdzICovCisKKyNpZmRlZiBDT05GSUdfU01QCisjaW5jbHVkZSA8YXNtL3BkYS5oPgorCisjZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAoY3B1X3BkYShjcHUpLT5kYXRhX29mZnNldCkKKyNkZWZpbmUgX19teV9jcHVfb2Zmc2V0IHJlYWRfcGRhKGRhdGFfb2Zmc2V0KQorCisjZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0KHgpKQorCisjZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCB4ODY2NF9wZGEsIHBkYSk7CisKKy8qCisgKiBUaGVzZSBhcmUgc3VwcG9zZWQgdG8gYmUgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gd2hpY2gKKyAqIG9wZXJhdGVzIG9uIHRoZSBwZXItY3B1IGRhdGEgYmFzZSBzZWdtZW50LiAgeDg2LTY0IGRvZXNuJ3QgaGF2ZQorICogdGhhdCB5ZXQsIHNvIHRoaXMgaXMgYSBmYWlybHkgaW5lZmZpY2llbnQgd29ya2Fyb3VuZCBmb3IgdGhlCisgKiBtZWFudGltZS4gIFRoZSBzaW5nbGUgaW5zdHJ1Y3Rpb24gaXMgYXRvbWljIHdpdGggcmVzcGVjdCB0bworICogcHJlZW1wdGlvbiBhbmQgaW50ZXJydXB0cywgc28gd2UgbmVlZCB0byBleHBsaWNpdGx5IGRpc2FibGUKKyAqIGludGVycnVwdHMgaGVyZSB0byBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdC4gIEhvd2V2ZXIsIGJlY2F1c2UgaXQKKyAqIGNhbiBiZSB1c2VkIGZyb20gd2l0aGluIGludGVycnVwdC1kaXNhYmxlL2VuYWJsZSwgd2UgY2FuJ3QgYWN0dWFsbHkKKyAqIGRpc2FibGUgaW50ZXJydXB0czsgZGlzYWJsaW5nIHByZWVtcHRpb24gaXMgZW5vdWdoLgorICovCisjZGVmaW5lIHg4Nl9yZWFkX3BlcmNwdSh2YXIpCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXR5cGVvZihwZXJfY3B1X3Zhcih2YXIpKSBfX3RtcDsJCQkJXAorCQlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCVwKKwkJX190bXAgPSBfX2dldF9jcHVfdmFyKHZhcik7CQkJCVwKKwkJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKKwkJX190bXA7CQkJCQkJCVwKKwl9KQorCisjZGVmaW5lIHg4Nl93cml0ZV9wZXJjcHUodmFyLCB2YWwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCVwKKwkJX19nZXRfY3B1X3Zhcih2YXIpID0gKHZhbCk7CQkJCVwKKwkJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKKwl9IHdoaWxlKDApCisKKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogUEVSX0NQVSBmaW5kcyBhbiBhZGRyZXNzIG9mIGEgcGVyLWNwdSB2YXJpYWJsZS4KKyAqCisgKiBBcmdzOgorICogICAgdmFyIC0gdmFyaWFibGUgbmFtZQorICogICAgcmVnIC0gMzJiaXQgcmVnaXN0ZXIKKyAqCisgKiBUaGUgcmVzdWx0aW5nIGFkZHJlc3MgaXMgc3RvcmVkIGluIHRoZSAicmVnIiBhcmd1bWVudC4KKyAqCisgKiBFeGFtcGxlOgorICogICAgUEVSX0NQVShjcHVfZ2R0X2Rlc2NyLCAlZWJ4KQorICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCQlcCisJbW92bCAlZnM6cGVyX2NwdV9fIyN0aGlzX2NwdV9vZmYsIHJlZzsJCVwKKwlsZWEgcGVyX2NwdV9fIyN2YXIocmVnKSwgcmVnCisjZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJJWZzOnBlcl9jcHVfXyMjdmFyCisjZWxzZSAvKiAhIFNNUCAqLworI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCVwKKwltb3ZsICRwZXJfY3B1X18jI3ZhciwgcmVnCisjZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJcGVyX2NwdV9fIyN2YXIKKyNlbmRpZgkvKiBTTVAgKi8KKworI2Vsc2UgLyogLi4uIUFTU0VNQkxZICovCisKKy8qCisgKiBQRVJfQ1BVIGZpbmRzIGFuIGFkZHJlc3Mgb2YgYSBwZXItY3B1IHZhcmlhYmxlLgorICoKKyAqIEFyZ3M6CisgKiAgICB2YXIgLSB2YXJpYWJsZSBuYW1lCisgKiAgICBjcHUgLSAzMmJpdCByZWdpc3RlciBjb250YWluaW5nIHRoZSBjdXJyZW50IENQVSBudW1iZXIKKyAqCisgKiBUaGUgcmVzdWx0aW5nIGFkZHJlc3MgaXMgc3RvcmVkIGluIHRoZSAiY3B1IiBhcmd1bWVudC4KKyAqCisgKiBFeGFtcGxlOgorICogICAgUEVSX0NQVShjcHVfZ2R0X2Rlc2NyLCAlZWJ4KQorICovCisjaWZkZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIF9fbXlfY3B1X29mZnNldCB4ODZfcmVhZF9wZXJjcHUodGhpc19jcHVfb2ZmKQorCisvKiBmcyBzZWdtZW50IHN0YXJ0cyBhdCAocG9zaXRpdmUpIG9mZnNldCA9PSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gKi8KKyNkZWZpbmUgX19wZXJjcHVfc2VnICIlJWZzOiIKKworI2Vsc2UgIC8qICFTTVAgKi8KKworI2RlZmluZSBfX3BlcmNwdV9zZWcgIiIKKworI2VuZGlmCS8qIFNNUCAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CisKKy8qIFdlIGNhbiB1c2UgdGhpcyBkaXJlY3RseSBmb3IgbG9jYWwgQ1BVIChmYXN0ZXIpLiAqLworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRoaXNfY3B1X29mZik7CisKKy8qIEZvciBhcmNoLXNwZWNpZmljIGNvZGUsIHdlIGNhbiB1c2UgZGlyZWN0IHNpbmdsZS1pbnNuIG9wcyAodGhleQorICogZG9uJ3QgZ2l2ZSBhbiBsdmFsdWUgdGhvdWdoKS4gKi8KK2V4dGVybiB2b2lkIF9fYmFkX3BlcmNwdV9zaXplKHZvaWQpOworCisjZGVmaW5lIHBlcmNwdV90b19vcChvcCwgdmFyLCB2YWwpCQkJXAorZG8gewkJCQkJCQlcCisJdHlwZWRlZiB0eXBlb2YodmFyKSBUX187CQkJXAorCWlmICgwKSB7CQkJCQlcCisJCVRfXyB0bXBfXzsJCQkJXAorCQl0bXBfXyA9ICh2YWwpOwkJCQlcCisJfQkJCQkJCVwKKwlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCVwKKwljYXNlIDE6CQkJCQkJXAorCQlhc20ob3AgImIgJTEsIl9fcGVyY3B1X3NlZyIlMCIJCVwKKwkJICAgIDogIittIiAodmFyKQkJCVwKKwkJICAgIDogInJpIiAoKFRfXyl2YWwpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMjoJCQkJCQlcCisJCWFzbShvcCAidyAlMSwiX19wZXJjcHVfc2VnIiUwIgkJXAorCQkgICAgOiAiK20iICh2YXIpCQkJXAorCQkgICAgOiAicmkiICgoVF9fKXZhbCkpOwkJCVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSA0OgkJCQkJCVwKKwkJYXNtKG9wICJsICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCisJCSAgICA6ICIrbSIgKHZhcikJCQlcCisJCSAgICA6ICJyaSIgKChUX18pdmFsKSk7CQkJXAorCQlicmVhazsJCQkJCVwKKwlkZWZhdWx0OiBfX2JhZF9wZXJjcHVfc2l6ZSgpOwkJCVwKKwl9CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBwZXJjcHVfZnJvbV9vcChvcCwgdmFyKQkJCQlcCisoewkJCQkJCQlcCisJdHlwZW9mKHZhcikgcmV0X187CQkJCVwKKwlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCVwKKwljYXNlIDE6CQkJCQkJXAorCQlhc20ob3AgImIgIl9fcGVyY3B1X3NlZyIlMSwlMCIJCVwKKwkJICAgIDogIj1yIiAocmV0X18pCQkJXAorCQkgICAgOiAibSIgKHZhcikpOwkJCVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSAyOgkJCQkJCVwKKwkJYXNtKG9wICJ3ICJfX3BlcmNwdV9zZWciJTEsJTAiCQlcCisJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgNDoJCQkJCQlcCisJCWFzbShvcCAibCAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQkgICAgOiAiPXIiIChyZXRfXykJCQlcCisJCSAgICA6ICJtIiAodmFyKSk7CQkJXAorCQlicmVhazsJCQkJCVwKKwlkZWZhdWx0OiBfX2JhZF9wZXJjcHVfc2l6ZSgpOwkJCVwKKwl9CQkJCQkJXAorCXJldF9fOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgeDg2X3JlYWRfcGVyY3B1KHZhcikgcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyKQorI2RlZmluZSB4ODZfd3JpdGVfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHg4Nl9hZGRfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoImFkZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHg4Nl9zdWJfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoInN1YiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHg4Nl9vcl9wZXJjcHUodmFyLCB2YWwpIHBlcmNwdV90b19vcCgib3IiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQorI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiAhQ09ORklHX1g4Nl82NCAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCisvKgorICogRGVmaW5lIHRoZSAiRUFSTFlfUEVSX0NQVSIgbWFjcm9zLiAgVGhlc2UgYXJlIHVzZWQgZm9yIHNvbWUgcGVyX2NwdQorICogdmFyaWFibGVzIHRoYXQgYXJlIGluaXRpYWxpemVkIGFuZCBhY2Nlc3NlZCBiZWZvcmUgdGhlcmUgYXJlIHBlcl9jcHUKKyAqIGFyZWFzIGFsbG9jYXRlZC4KKyAqLworCisjZGVmaW5lCURFRklORV9FQVJMWV9QRVJfQ1BVKF90eXBlLCBfbmFtZSwgX2luaXR2YWx1ZSkJCQlcCisJREVGSU5FX1BFUl9DUFUoX3R5cGUsIF9uYW1lKSA9IF9pbml0dmFsdWU7CQkJXAorCV9fdHlwZW9mX18oX3R5cGUpIF9uYW1lIyNfZWFybHlfbWFwW05SX0NQVVNdIF9faW5pdGRhdGEgPQlcCisJCQkJeyBbMCAuLi4gTlJfQ1BVUy0xXSA9IF9pbml0dmFsdWUgfTsJXAorCV9fdHlwZW9mX18oX3R5cGUpICpfbmFtZSMjX2Vhcmx5X3B0ciBfX3JlZmRhdGEgPSBfbmFtZSMjX2Vhcmx5X21hcAorCisjZGVmaW5lIEVYUE9SVF9FQVJMWV9QRVJfQ1BVX1NZTUJPTChfbmFtZSkJCQlcCisJRVhQT1JUX1BFUl9DUFVfU1lNQk9MKF9uYW1lKQorCisjZGVmaW5lIERFQ0xBUkVfRUFSTFlfUEVSX0NQVShfdHlwZSwgX25hbWUpCQkJXAorCURFQ0xBUkVfUEVSX0NQVShfdHlwZSwgX25hbWUpOwkJCQlcCisJZXh0ZXJuIF9fdHlwZW9mX18oX3R5cGUpICpfbmFtZSMjX2Vhcmx5X3B0cjsJCVwKKwlleHRlcm4gX190eXBlb2ZfXyhfdHlwZSkgIF9uYW1lIyNfZWFybHlfbWFwW10KKworI2RlZmluZQllYXJseV9wZXJfY3B1X3B0cihfbmFtZSkgKF9uYW1lIyNfZWFybHlfcHRyKQorI2RlZmluZQllYXJseV9wZXJfY3B1X21hcChfbmFtZSwgX2lkeCkgKF9uYW1lIyNfZWFybHlfbWFwW19pZHhdKQorI2RlZmluZQllYXJseV9wZXJfY3B1KF9uYW1lLCBfY3B1KSAJCQkJXAorCShlYXJseV9wZXJfY3B1X3B0cihfbmFtZSkgPwkJCQlcCisJCWVhcmx5X3Blcl9jcHVfcHRyKF9uYW1lKVtfY3B1XSA6CQlcCisJCXBlcl9jcHUoX25hbWUsIF9jcHUpKQorCisjZWxzZQkvKiAhQ09ORklHX1NNUCAqLworI2RlZmluZQlERUZJTkVfRUFSTFlfUEVSX0NQVShfdHlwZSwgX25hbWUsIF9pbml0dmFsdWUpCQlcCisJREVGSU5FX1BFUl9DUFUoX3R5cGUsIF9uYW1lKSA9IF9pbml0dmFsdWUKKworI2RlZmluZSBFWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woX25hbWUpCQkJXAorCUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChfbmFtZSkKKworI2RlZmluZSBERUNMQVJFX0VBUkxZX1BFUl9DUFUoX3R5cGUsIF9uYW1lKQkJCVwKKwlERUNMQVJFX1BFUl9DUFUoX3R5cGUsIF9uYW1lKQorCisjZGVmaW5lCWVhcmx5X3Blcl9jcHUoX25hbWUsIF9jcHUpIHBlcl9jcHUoX25hbWUsIF9jcHUpCisjZGVmaW5lCWVhcmx5X3Blcl9jcHVfcHRyKF9uYW1lKSBOVUxMCisvKiBubyBlYXJseV9wZXJfY3B1X21hcCgpICovCisKKyNlbmRpZgkvKiAhQ09ORklHX1NNUCAqLworCisjZW5kaWYgLyogX0FTTV9YODZfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdjMTUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0wLDAgKzEsMTE0IEBACisjaWZuZGVmIF9BU01fWDg2X1BHQUxMT0NfSAorI2RlZmluZSBfQVNNX1g4Nl9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogZm9yIHN0cnVjdCBwYWdlICovCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCitzdGF0aWMgaW5saW5lIGludCAgX19wYXJhdmlydF9wZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH0KKworI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKyNkZWZpbmUgcGFyYXZpcnRfcGdkX2FsbG9jKG1tKQlfX3BhcmF2aXJ0X3BnZF9hbGxvYyhtbSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9wZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hbGxvY19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQl7fQorc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FsbG9jX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCXt9CitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYWxsb2NfcG1kX2Nsb25lKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNsb25lcGZuLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hbGxvY19wdWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQl7fQorc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3JlbGVhc2VfcHRlKHVuc2lnbmVkIGxvbmcgcGZuKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3JlbGVhc2VfcG1kKHVuc2lnbmVkIGxvbmcgcGZuKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3JlbGVhc2VfcHVkKHVuc2lnbmVkIGxvbmcgcGZuKSB7fQorI2VuZGlmCisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KKyAqLworZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKKworZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CisKKy8qIFNob3VsZCByZWFsbHkgaW1wbGVtZW50IGdjIGZvciBmcmVlIHBhZ2UgdGFibGUgcGFnZXMuIFRoaXMgY291bGQgYmUKKyAgIGRvbmUgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBpbiBzdHJ1Y3QgcGFnZS4gKi8KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZSkKK3sKKwlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcHRlICYgKFBBR0VfU0laRS0xKSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwlfX2ZyZWVfcGFnZShwdGUpOworfQorCitleHRlcm4gdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcHRlKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgIHBtZF90ICpwbWQsIHB0ZV90ICpwdGUpCit7CisJcGFyYXZpcnRfYWxsb2NfcHRlKG1tLCBfX3BhKHB0ZSkgPj4gUEFHRV9TSElGVCk7CisJc2V0X3BtZChwbWQsIF9fcG1kKF9fcGEocHRlKSB8IF9QQUdFX1RBQkxFKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJCQkJc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHB0ZSk7CisKKwlwYXJhdmlydF9hbGxvY19wdGUobW0sIHBmbik7CisJc2V0X3BtZChwbWQsIF9fcG1kKCgocHRldmFsX3QpcGZuIDw8IFBBR0VfU0hJRlQpIHwgX1BBR0VfVEFCTEUpKTsKK30KKworI2RlZmluZSBwbWRfcGd0YWJsZShwbWQpIHBtZF9wYWdlKHBtZCkKKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAyCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIChwbWRfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKK3sKKwlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcG1kICYgKFBBR0VfU0laRS0xKSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBtZCk7Cit9CisKK2V4dGVybiB2b2lkIF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKK2V4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpOworI2Vsc2UJLyogIUNPTkZJR19YODZfUEFFICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKQoreworCXBhcmF2aXJ0X2FsbG9jX3BtZChtbSwgX19wYShwbWQpID4+IFBBR0VfU0hJRlQpOworCXNldF9wdWQocHVkLCBfX3B1ZChfUEFHRV9UQUJMRSB8IF9fcGEocG1kKSkpOworfQorI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMworc3RhdGljIGlubGluZSB2b2lkIHBnZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwgcHVkX3QgKnB1ZCkKK3sKKwlwYXJhdmlydF9hbGxvY19wdWQobW0sIF9fcGEocHVkKSA+PiBQQUdFX1NISUZUKTsKKwlzZXRfcGdkKHBnZCwgX19wZ2QoX1BBR0VfVEFCTEUgfCBfX3BhKHB1ZCkpKTsKK30KKworc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAocHVkX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQpCit7CisJQlVHX09OKCh1bnNpZ25lZCBsb25nKXB1ZCAmIChQQUdFX1NJWkUtMSkpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdWQpOworfQorCitleHRlcm4gdm9pZCBfX3B1ZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdWRfdCAqcHVkKTsKKyNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID4gMyAqLworI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPiAyICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLWRlZnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdkYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtZGVmcy5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICisjZGVmaW5lIF9BU01fWDg2X1BHVEFCTEVfMkxFVkVMX0RFRlNfSAorCisjZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECTAKKworLyoKKyAqIHRyYWRpdGlvbmFsIGkzODYgdHdvLWxldmVsIHBhZ2luZyBzdHJ1Y3R1cmU6CisgKi8KKworI2RlZmluZSBQR0RJUl9TSElGVAkyMgorI2RlZmluZSBQVFJTX1BFUl9QR0QJMTAyNAorCisvKgorICogdGhlIGkzODYgaXMgdHdvLWxldmVsLCBzbyB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhbnkKKyAqIFBNRCBkaXJlY3RvcnkgcGh5c2ljYWxseS4KKyAqLworCisjZGVmaW5lIFBUUlNfUEVSX1BURQkxMDI0CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFXzJMRVZFTF9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxN2VkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfSAorI2RlZmluZSBfQVNNX1g4Nl9QR1RBQkxFXzJMRVZFTF9ICisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAoZSkucHRlX2xvdykKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisvKgorICogQ2VydGFpbiBhcmNoaXRlY3R1cmVzIG5lZWQgdG8gZG8gc3BlY2lhbCB0aGluZ3Mgd2hlbiBQVEVzCisgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJlY3RseSBtb2RpZmllZC4gIFRodXMsIHRoZSBmb2xsb3dpbmcKKyAqIGhvb2sgaXMgbWFkZSBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZShwdGVfdCAqcHRlcCAsIHB0ZV90IHB0ZSkKK3sKKwkqcHRlcCA9IHB0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpCit7CisJKnBtZHAgPSBwbWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9hdG9taWMocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwluYXRpdmVfc2V0X3B0ZShwdGVwLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwluYXRpdmVfc2V0X3B0ZShwdGVwLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3BtZF9jbGVhcihwbWRfdCAqcG1kcCkKK3sKKwluYXRpdmVfc2V0X3BtZChwbWRwLCBfX3BtZCgwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICp4cCkKK3sKKwkqeHAgPSBuYXRpdmVfbWFrZV9wdGUoMCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHB0ZV90IG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIocHRlX3QgKnhwKQoreworCXJldHVybiBfX3B0ZSh4Y2hnKCZ4cC0+cHRlX2xvdywgMCkpOworfQorI2Vsc2UKKyNkZWZpbmUgbmF0aXZlX3B0ZXBfZ2V0X2FuZF9jbGVhcih4cCkgbmF0aXZlX2xvY2FsX3B0ZXBfZ2V0X2FuZF9jbGVhcih4cCkKKyNlbmRpZgorCisjZGVmaW5lIHB0ZV9ub25lKHgpCQkoISh4KS5wdGVfbG93KQorCisvKgorICogQml0cyAwLCA2IGFuZCA3IGFyZSB0YWtlbiwgc3BsaXQgdXAgdGhlIDI5IGJpdHMgb2Ygb2Zmc2V0CisgKiBpbnRvIHRoaXMgcmFuZ2U6CisgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjkKKworI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkJCQkJCVwKKwkoKCgocHRlKS5wdGVfbG93ID4+IDEpICYgMHgxZikgKyAoKChwdGUpLnB0ZV9sb3cgPj4gOCkgPDwgNSkpCisKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJCQkJCQlcCisJKChwdGVfdCkgeyAucHRlX2xvdyA9ICgoKG9mZikgJiAweDFmKSA8PCAxKSArCQkJXAorCQkJKCgob2ZmKSA+PiA1KSA8PCA4KSArIF9QQUdFX0ZJTEUgfSkKKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDEpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gOCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkJCQlcCisJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwgKChvZmZzZXQpIDw8IDgpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IChwdGUpLnB0ZV9sb3cgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7IC5wdGUgPSAoeCkudmFsIH0pCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFXzJMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC1kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1NjEzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLWRlZnMuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9BU01fWDg2X1BHVEFCTEVfM0xFVkVMX0RFRlNfSAorI2RlZmluZSBfQVNNX1g4Nl9QR1RBQkxFXzNMRVZFTF9ERUZTX0gKKworI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2RlZmluZSBTSEFSRURfS0VSTkVMX1BNRAkocHZfaW5mby5zaGFyZWRfa2VybmVsX3BtZCkKKyNlbHNlCisjZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECTEKKyNlbmRpZgorCisvKgorICogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdG9wLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcAorICovCisjZGVmaW5lIFBHRElSX1NISUZUCTMwCisjZGVmaW5lIFBUUlNfUEVSX1BHRAk0CisKKy8qCisgKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIG1pZGRsZS1sZXZlbAorICogcGFnZSB0YWJsZSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUE1EX1NISUZUCTIxCisjZGVmaW5lIFBUUlNfUEVSX1BNRAk1MTIKKworLyoKKyAqIGVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsCisgKi8KKyNkZWZpbmUgUFRSU19QRVJfUFRFCTUxMgorCisjZW5kaWYgLyogX0FTTV9YODZfUEdUQUJMRV8zTEVWRUxfREVGU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE2Y2VjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApAQCAtMCwwICsxLDE3NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzNMRVZFTF9ICisjZGVmaW5lIF9BU01fWDg2X1BHVEFCTEVfM0xFVkVMX0gKKworLyoKKyAqIEludGVsIFBoeXNpY2FsIEFkZHJlc3MgRXh0ZW5zaW9uIChQQUUpIE1vZGUgLSB0aHJlZS1sZXZlbCBwYWdlCisgKiB0YWJsZXMgb24gUFBybysgQ1BVcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKi8KKworI2RlZmluZSBwdGVfRVJST1IoZSkJCQkJCQkJXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTA4bHglMDhseCkuXG4iLAkJCVwKKwkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCAoZSkucHRlX2hpZ2gsIChlKS5wdGVfbG93KQorI2RlZmluZSBwbWRfRVJST1IoZSkJCQkJCQkJXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJXAoJTAxNkx4KS5cbiIsCQkJCVwKKwkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkJCQkJCQkJXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNkx4KS5cbiIsCQkJCVwKKwkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwZ2RfdmFsKGUpKQorCitzdGF0aWMgaW5saW5lIGludCBwdWRfbm9uZShwdWRfdCBwdWQpCit7CisJcmV0dXJuIHB1ZF92YWwocHVkKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gKHB1ZF92YWwocHVkKSAmIH4oUFRFX1BGTl9NQVNLIHwgX0tFUk5QR19UQUJMRSB8IF9QQUdFX1VTRVIpKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpCit7CisJcmV0dXJuIHB1ZF92YWwocHVkKSAmIF9QQUdFX1BSRVNFTlQ7Cit9CisKKy8qIFJ1bGVzIGZvciB1c2luZyBzZXRfcHRlOiB0aGUgcHRlIGJlaW5nIGFzc2lnbmVkICptdXN0KiBiZQorICogZWl0aGVyIG5vdCBwcmVzZW50IG9yIGluIGEgc3RhdGUgd2hlcmUgdGhlIGhhcmR3YXJlIHdpbGwKKyAqIG5vdCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgcHRlLiAgSW4gcGxhY2VzIHdoZXJlIHRoaXMgaXMKKyAqIG5vdCBwb3NzaWJsZSwgdXNlIHB0ZV9nZXRfYW5kX2NsZWFyIHRvIG9idGFpbiB0aGUgb2xkIHB0ZQorICogdmFsdWUgYW5kIHRoZW4gdXNlIHNldF9wdGUgdG8gdXBkYXRlIGl0LiAgLWJlbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKKwlzbXBfd21iKCk7CisJcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OworfQorCisvKgorICogU2luY2UgdGhpcyBpcyBvbmx5IGNhbGxlZCBvbiB1c2VyIFBURXMsIGFuZCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyCisgKiBtdXN0IGhhbmRsZSB0aGUgYWxyZWFkeSByYWN5IHNpdHVhdGlvbiBvZiBzaW11bHRhbmVvdXMgcGFnZSBmYXVsdHMsCisgKiB3ZSBhcmUganVzdGlmaWVkIGluIG1lcmVseSBjbGVhcmluZyB0aGUgUFRFIHByZXNlbnQgYml0LCBmb2xsb3dlZAorICogYnkgYSBzZXQuICBUaGUgb3JkZXJpbmcgaGVyZSBpcyBpbXBvcnRhbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXB0ZXAtPnB0ZV9sb3cgPSAwOworCXNtcF93bWIoKTsKKwlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKKwlzbXBfd21iKCk7CisJcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocHRlcCksIG5hdGl2ZV9wdGVfdmFsKHB0ZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKK3sKKwlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwbWRwKSwgbmF0aXZlX3BtZF92YWwocG1kKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQoreworCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB1ZHApLCBuYXRpdmVfcHVkX3ZhbChwdWQpKTsKK30KKworLyoKKyAqIEZvciBQVEVzIGFuZCBQREVzLCB3ZSBtdXN0IGNsZWFyIHRoZSBQLWJpdCBmaXJzdCB3aGVuIGNsZWFyaW5nIGEgcGFnZSB0YWJsZQorICogZW50cnksIHNvIGNsZWFyIHRoZSBib3R0b20gaGFsZiBmaXJzdCBhbmQgZW5mb3JjZSBvcmRlcmluZyB3aXRoIGEgY29tcGlsZXIKKyAqIGJhcnJpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgIHB0ZV90ICpwdGVwKQoreworCXB0ZXAtPnB0ZV9sb3cgPSAwOworCXNtcF93bWIoKTsKKwlwdGVwLT5wdGVfaGlnaCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcG1kX2NsZWFyKHBtZF90ICpwbWQpCit7CisJdTMyICp0bXAgPSAodTMyICopcG1kOworCSp0bXAgPSAwOworCXNtcF93bWIoKTsKKwkqKHRtcCArIDEpID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkcCkKK3sKKwl1bnNpZ25lZCBsb25nIHBnZDsKKworCXNldF9wdWQocHVkcCwgX19wdWQoMCkpOworCisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gSW50ZWwgQXBwIG5vdGUgIlRMQnMsIFBhZ2luZy1TdHJ1Y3R1cmUgQ2FjaGVzLAorCSAqIGFuZCBUaGVpciBJbnZhbGlkYXRpb24iLCBBcHJpbCAyMDA3LCBkb2N1bWVudCAzMTcwODAtMDAxLAorCSAqIHNlY3Rpb24gOC4xOiBpbiBQQUUgbW9kZSB3ZSBleHBsaWNpdGx5IGhhdmUgdG8gZmx1c2ggdGhlCisJICogVExCIHZpYSBjcjMgaWYgdGhlIHRvcC1sZXZlbCBwZ2QgaXMgY2hhbmdlZC4uLgorCSAqCisJICogTWFrZSBzdXJlIHRoZSBwdWQgZW50cnkgd2UncmUgdXBkYXRpbmcgaXMgd2l0aGluIHRoZQorCSAqIGN1cnJlbnQgcGdkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFRMQiBmbHVzaGVzLgorCSAqLworCXBnZCA9IHJlYWRfY3IzKCk7CisJaWYgKF9fcGEocHVkcCkgPj0gcGdkICYmIF9fcGEocHVkcCkgPAorCSAgICAocGdkICsgc2l6ZW9mKHBnZF90KSpQVFJTX1BFUl9QR0QpKQorCQl3cml0ZV9jcjMocGdkKTsKK30KKworI2RlZmluZSBwdWRfcGFnZShwdWQpICgoc3RydWN0IHBhZ2UgKikgX192YShwdWRfdmFsKHB1ZCkgJiBQVEVfUEZOX01BU0spKQorCisjZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBURV9QRk5fTUFTSykpCisKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworI2RlZmluZSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykgKChwbWRfdCAqKXB1ZF9wYWdlKCoocHVkKSkgKwlcCisJCQkJICBwbWRfaW5kZXgoYWRkcmVzcykpCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHB0ZV90IG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIocHRlX3QgKnB0ZXApCit7CisJcHRlX3QgcmVzOworCisJLyogeGNoZyBhY3RzIGFzIGEgYmFycmllciBiZWZvcmUgdGhlIHNldHRpbmcgb2YgdGhlIGhpZ2ggYml0cyAqLworCXJlcy5wdGVfbG93ID0geGNoZygmcHRlcC0+cHRlX2xvdywgMCk7CisJcmVzLnB0ZV9oaWdoID0gcHRlcC0+cHRlX2hpZ2g7CisJcHRlcC0+cHRlX2hpZ2ggPSAwOworCisJcmV0dXJuIHJlczsKK30KKyNlbHNlCisjZGVmaW5lIG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIoeHApIG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIoeHApCisjZW5kaWYKKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQorc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgYSwgcHRlX3QgYikKK3sKKwlyZXR1cm4gYS5wdGVfbG93ID09IGIucHRlX2xvdyAmJiBhLnB0ZV9oaWdoID09IGIucHRlX2hpZ2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gIXB0ZS5wdGVfbG93ICYmICFwdGUucHRlX2hpZ2g7Cit9CisKKy8qCisgKiBCaXRzIDAsIDYgYW5kIDcgYXJlIHRha2VuIGluIHRoZSBsb3cgcGFydCBvZiB0aGUgcHRlLAorICogcHV0IHRoZSAzMiBiaXRzIG9mIG9mZnNldCBpbnRvIHRoZSBoaWdoIHBhcnQuCisgKi8KKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgKChwdGUpLnB0ZV9oaWdoKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJCQkJCVwKKwkoKHB0ZV90KSB7IHsgLnB0ZV9sb3cgPSBfUEFHRV9GSUxFLCAucHRlX2hpZ2ggPSAob2ZmKSB9IH0pCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTICAgICAgIDMyCisKKy8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCkgJiAweDFmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiA1KQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpCSgoc3dwX2VudHJ5X3Qpeyh0eXBlKSB8IChvZmZzZXQpIDw8IDV9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCl7IChwdGUpLnB0ZV9oaWdoIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCl7IHsgLnB0ZV9oaWdoID0gKHgpLnZhbCB9IH0pCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFXzNMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxMmYzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMCwwICsxLDU2MiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFX0gKKyNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV9ICisKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKworI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkwCS8qIGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1JXCQkxCS8qIHdyaXRlYWJsZSAqLworI2RlZmluZSBfUEFHRV9CSVRfVVNFUgkJMgkvKiB1c2Vyc3BhY2UgYWRkcmVzc2FibGUgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1BXVAkJMwkvKiBwYWdlIHdyaXRlIHRocm91Z2ggKi8KKyNkZWZpbmUgX1BBR0VfQklUX1BDRAkJNAkvKiBwYWdlIGNhY2hlIGRpc2FibGVkICovCisjZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAk1CS8qIHdhcyBhY2Nlc3NlZCAocmFpc2VkIGJ5IENQVSkgKi8KKyNkZWZpbmUgX1BBR0VfQklUX0RJUlRZCQk2CS8qIHdhcyB3cml0dGVuIHRvIChyYWlzZWQgYnkgQ1BVKSAqLworI2RlZmluZSBfUEFHRV9CSVRfRklMRQkJNgorI2RlZmluZSBfUEFHRV9CSVRfUFNFCQk3CS8qIDQgTUIgKG9yIDJNQikgcGFnZSAqLworI2RlZmluZSBfUEFHRV9CSVRfUEFUCQk3CS8qIG9uIDRLQiBwYWdlcyAqLworI2RlZmluZSBfUEFHRV9CSVRfR0xPQkFMCTgJLyogR2xvYmFsIFRMQiBlbnRyeSBQUHJvKyAqLworI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMQk5CS8qIGF2YWlsYWJsZSBmb3IgcHJvZ3JhbW1lciAqLworI2RlZmluZSBfUEFHRV9CSVRfSU9NQVAJCTEwCS8qIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSBJTyBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQzCTExCisjZGVmaW5lIF9QQUdFX0JJVF9QQVRfTEFSR0UJMTIJLyogT24gMk1CIG9yIDFHQiBwYWdlcyAqLworI2RlZmluZSBfUEFHRV9CSVRfU1BFQ0lBTAlfUEFHRV9CSVRfVU5VU0VEMQorI2RlZmluZSBfUEFHRV9CSVRfQ1BBX1RFU1QJX1BBR0VfQklUX1VOVVNFRDEKKyNkZWZpbmUgX1BBR0VfQklUX05YICAgICAgICAgICA2MyAgICAgICAvKiBObyBleGVjdXRlOiBvbmx5IHZhbGlkIGFmdGVyIGNwdWlkIGNoZWNrICovCisKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFJFU0VOVCkKKyNkZWZpbmUgX1BBR0VfUlcJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1JXKQorI2RlZmluZSBfUEFHRV9VU0VSCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9VU0VSKQorI2RlZmluZSBfUEFHRV9QV1QJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BXVCkKKyNkZWZpbmUgX1BBR0VfUENECShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQ0QpCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9BQ0NFU1NFRCkKKyNkZWZpbmUgX1BBR0VfRElSVFkJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0RJUlRZKQorI2RlZmluZSBfUEFHRV9QU0UJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BTRSkKKyNkZWZpbmUgX1BBR0VfR0xPQkFMCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9HTE9CQUwpCisjZGVmaW5lIF9QQUdFX1VOVVNFRDEJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VOVVNFRDEpCisjZGVmaW5lIF9QQUdFX0lPTUFQCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9JT01BUCkKKyNkZWZpbmUgX1BBR0VfVU5VU0VEMwkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfVU5VU0VEMykKKyNkZWZpbmUgX1BBR0VfUEFUCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQVQpCisjZGVmaW5lIF9QQUdFX1BBVF9MQVJHRSAoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUEFUX0xBUkdFKQorI2RlZmluZSBfUEFHRV9TUEVDSUFMCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9TUEVDSUFMKQorI2RlZmluZSBfUEFHRV9DUEFfVEVTVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfQ1BBX1RFU1QpCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCisjZGVmaW5lIF9QQUdFX05YCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9OWCkKKyNlbHNlCisjZGVmaW5lIF9QQUdFX05YCShfQVQocHRldmFsX3QsIDApKQorI2VuZGlmCisKKy8qIElmIF9QQUdFX1BSRVNFTlQgaXMgY2xlYXIsIHdlIHVzZSB0aGVzZTogKi8KKyNkZWZpbmUgX1BBR0VfRklMRQlfUEFHRV9ESVJUWQkvKiBub25saW5lYXIgZmlsZSBtYXBwaW5nLAorCQkJCQkgKiBzYXZlZCBQVEU7IHVuc2V0OnN3YXAgKi8KKyNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJX1BBR0VfUFNFCS8qIGlmIHRoZSB1c2VyIG1hcHBlZCBpdCB3aXRoIFBST1RfTk9ORTsKKwkJCQkJICAgcHRlX3ByZXNlbnQgZ2l2ZXMgdHJ1ZSAqLworCisjZGVmaW5lIF9QQUdFX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwJXAorCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisjZGVmaW5lIF9LRVJOUEdfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwJXAorCQkJIF9QQUdFX0RJUlRZKQorCisvKiBTZXQgb2YgYml0cyBub3QgY2hhbmdlZCBpbiBwdGVfbW9kaWZ5ICovCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQVEVfUEZOX01BU0sgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QgfAkJXAorCQkJIF9QQUdFX1NQRUNJQUwgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorCisjZGVmaW5lIF9QQUdFX0NBQ0hFX01BU0sJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX1BBR0VfQ0FDSEVfV0IJCSgwKQorI2RlZmluZSBfUEFHRV9DQUNIRV9XQwkJKF9QQUdFX1BXVCkKKyNkZWZpbmUgX1BBR0VfQ0FDSEVfVUNfTUlOVVMJKF9QQUdFX1BDRCkKKyNkZWZpbmUgX1BBR0VfQ0FDSEVfVUMJCShfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCisKKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBcCisJCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisKKyNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfAlcCisJCQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQorI2RlZmluZSBQQUdFX0NPUFlfRVhFQwkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZCQlQQUdFX0NPUFlfTk9FWEVDCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAorCQkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAorCQkJCQkgX1BBR0VfQUNDRVNTRUQpCisKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9FWEVDCQkJCQkJXAorCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfR0xPQkFMKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMCQkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfTlgpCisKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9STwkJKF9fUEFHRV9LRVJORUwgJiB+X1BBR0VfUlcpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfUlgJCShfX1BBR0VfS0VSTkVMX0VYRUMgJiB+X1BBR0VfUlcpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfV0MJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfV0MpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfVUNfTUlOVVMJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUENEKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMCQkoX19QQUdFX0tFUk5FTF9SWCB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QU0UpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0NBQ0hFX1VDIHwgX1BBR0VfUFNFKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BTRSkKKworI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0lPTUFQKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfTk9DQUNIRSB8IF9QQUdFX0lPTUFQKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX1VDX01JTlVTCShfX1BBR0VfS0VSTkVMX1VDX01JTlVTIHwgX1BBR0VfSU9NQVApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fV0MJCShfX1BBR0VfS0VSTkVMX1dDIHwgX1BBR0VfSU9NQVApCisKKyNkZWZpbmUgUEFHRV9LRVJORUwJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfUk8pCisjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfRVhFQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfUlgJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JYKQorI2RlZmluZSBQQUdFX0tFUk5FTF9XQwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfV0MpCisjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTk9DQUNIRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVUNfTUlOVVMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0UJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0UpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9FWEVDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMKQorI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRSkKKworI2RlZmluZSBQQUdFX0tFUk5FTF9JTwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU8pCisjZGVmaW5lIFBBR0VfS0VSTkVMX0lPX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fTk9DQUNIRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1dDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1dDKQorCisvKiAgICAgICAgIHh3ciAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9FWEVDCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfRVhFQworCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX0VYRUMKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX0VYRUMKKworLyoKKyAqIGVhcmx5IGlkZW50aXR5IG1hcHBpbmcgIHB0ZSBhdHRyaWIgbWFjcm9zLgorICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lERU5UX0xBUkdFX0VYRUMJX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDCisjZWxzZQorLyoKKyAqIEZvciBQREVfSURFTlRfQVRUUiBpbmNsdWRlIFVTRVIgYml0LiBBcyB0aGUgUERFIGFuZCBQVEUgcHJvdGVjdGlvbgorICogYml0cyBhcmUgY29tYmluZWQsIHRoaXMgd2lsbCBhbG93IHVzZXIgdG8gYWNjZXNzIHRoZSBoaWdoIGFkZHJlc3MgbWFwcGVkCisgKiBWRFNPIGluIHRoZSBwcmVzZW5jZSBvZiBDT05GSUdfQ09NUEFUX1ZEU08KKyAqLworI2RlZmluZSBQVEVfSURFTlRfQVRUUgkgMHgwMDMJCS8qIFBSRVNFTlQrUlcgKi8KKyNkZWZpbmUgUERFX0lERU5UX0FUVFIJIDB4MDY3CQkvKiBQUkVTRU5UK1JXK1VTRVIrRElSVFkrQUNDRVNTRUQgKi8KKyNkZWZpbmUgUEdEX0lERU5UX0FUVFIJIDB4MDAxCQkvKiBQUkVTRU5UIChubyBvdGhlciBhdHRyaWJ1dGVzKSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisKK2V4dGVybiBzcGlubG9ja190IHBnZF9sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcGdkX2xpc3Q7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfRElSVFk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfQUNDRVNTRUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfUlc7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX2ZsYWdzKHB0ZSkgJiBfUEFHRV9GSUxFOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfaHVnZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfUFNFOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZ2xvYmFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX2ZsYWdzKHB0ZSkgJiBfUEFHRV9HTE9CQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gIShwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX05YKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX1NQRUNJQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGZuKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIFBURV9QRk5fTUFTSykgPj4gUEFHRV9TSElGVDsKK30KKworI2RlZmluZSBwdGVfcGFnZShwdGUpCXBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkKKworc3RhdGljIGlubGluZSBpbnQgcG1kX2xhcmdlKHBtZF90IHB0ZSkKK3sKKwlyZXR1cm4gKHBtZF92YWwocHRlKSAmIChfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKSkgPT0KKwkJKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0RJUlRZKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfQUNDRVNTRUQpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUlcpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2V4ZWMocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfTlgpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRElSVFkpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQUNDRVNTRUQpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUlcpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9QU0UpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9jbHJodWdlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX1BTRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZ2xvYmFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfR0xPQkFMKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfY2xyZ2xvYmFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0dMT0JBTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpCit7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1NQRUNJQUwpOworfQorCitleHRlcm4gcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2s7CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBhZ2VfbnIsIHBncHJvdF90IHBncHJvdCkKK3sKKwlyZXR1cm4gX19wdGUoKCgocGh5c19hZGRyX3QpcGFnZV9uciA8PCBQQUdFX1NISUZUKSB8CisJCSAgICAgIHBncHJvdF92YWwocGdwcm90KSkgJiBfX3N1cHBvcnRlZF9wdGVfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgcGZuX3BtZCh1bnNpZ25lZCBsb25nIHBhZ2VfbnIsIHBncHJvdF90IHBncHJvdCkKK3sKKwlyZXR1cm4gX19wbWQoKCgocGh5c19hZGRyX3QpcGFnZV9uciA8PCBQQUdFX1NISUZUKSB8CisJCSAgICAgIHBncHJvdF92YWwocGdwcm90KSkgJiBfX3N1cHBvcnRlZF9wdGVfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcHRldmFsX3QgdmFsID0gcHRlX3ZhbChwdGUpOworCisJLyoKKwkgKiBDaG9wIG9mZiB0aGUgTlggYml0IChpZiBwcmVzZW50KSwgYW5kIGFkZCB0aGUgTlggcG9ydGlvbiBvZgorCSAqIHRoZSBuZXdwcm90IChpZiBwcmVzZW50KToKKwkgKi8KKwl2YWwgJj0gX1BBR0VfQ0hHX01BU0s7CisJdmFsIHw9IHBncHJvdF92YWwobmV3cHJvdCkgJiAofl9QQUdFX0NIR19NQVNLKSAmIF9fc3VwcG9ydGVkX3B0ZV9tYXNrOworCisJcmV0dXJuIF9fcHRlKHZhbCk7Cit9CisKKy8qIG1wcm90ZWN0IG5lZWRzIHRvIHByZXNlcnZlIFBBVCBiaXRzIHdoZW4gdXBkYXRpbmcgdm1fcGFnZV9wcm90ICovCisjZGVmaW5lIHBncHJvdF9tb2RpZnkgcGdwcm90X21vZGlmeQorc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcGdwcm90dmFsX3QgcHJlc2VydmViaXRzID0gcGdwcm90X3ZhbChvbGRwcm90KSAmIF9QQUdFX0NIR19NQVNLOworCXBncHJvdHZhbF90IGFkZGJpdHMgPSBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXJldHVybiBfX3BncHJvdChwcmVzZXJ2ZWJpdHMgfCBhZGRiaXRzKTsKK30KKworI2RlZmluZSBwdGVfcGdwcm90KHgpIF9fcGdwcm90KHB0ZV9mbGFncyh4KSAmIFBURV9GTEFHU19NQVNLKQorCisjZGVmaW5lIGNhbm9uX3BncHJvdChwKSBfX3BncHJvdChwZ3Byb3RfdmFsKHApICYgX19zdXBwb3J0ZWRfcHRlX21hc2spCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIF9fSEFWRV9QSFlTX01FTV9BQ0NFU1NfUFJPVAorc3RydWN0IGZpbGU7CitwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKK2ludCBwaHlzX21lbV9hY2Nlc3NfcHJvdF9hbGxvd2VkKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnZtYV9wcm90KTsKKyNlbmRpZgorCisvKiBJbnN0YWxsIGEgcHRlIGZvciBhIHBhcnRpY3VsYXIgdmFkZHIgaW4ga2VybmVsIHNwYWNlLiAqLwordm9pZCBzZXRfcHRlX3ZhZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IHB0ZSk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitleHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKTsKK2V4dGVybiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKSB7fQorI2VuZGlmCisKK3N0cnVjdCBzZXFfZmlsZTsKK2V4dGVybiB2b2lkIGFyY2hfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKTsKKworI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UgIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KKyNkZWZpbmUgc2V0X3B0ZShwdGVwLCBwdGUpCQluYXRpdmVfc2V0X3B0ZShwdGVwLCBwdGUpCisjZGVmaW5lIHNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkJbmF0aXZlX3NldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkKKworI2RlZmluZSBzZXRfcHRlX3ByZXNlbnQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkJCQkJXAorCW5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkKKyNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcCwgcHRlKQkJCQkJXAorCW5hdGl2ZV9zZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCisKKyNkZWZpbmUgc2V0X3BtZChwbWRwLCBwbWQpCQluYXRpdmVfc2V0X3BtZChwbWRwLCBwbWQpCisKKyNpZm5kZWYgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAorI2RlZmluZSBzZXRfcGdkKHBnZHAsIHBnZCkJCW5hdGl2ZV9zZXRfcGdkKHBnZHAsIHBnZCkKKyNkZWZpbmUgcGdkX2NsZWFyKHBnZCkJCQluYXRpdmVfcGdkX2NsZWFyKHBnZCkKKyNlbmRpZgorCisjaWZuZGVmIHNldF9wdWQKKyMgZGVmaW5lIHNldF9wdWQocHVkcCwgcHVkKQkJbmF0aXZlX3NldF9wdWQocHVkcCwgcHVkKQorI2VuZGlmCisKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAorI2RlZmluZSBwdWRfY2xlYXIocHVkKQkJCW5hdGl2ZV9wdWRfY2xlYXIocHVkKQorI2VuZGlmCisKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKQluYXRpdmVfcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKQorI2RlZmluZSBwbWRfY2xlYXIocG1kKQkJCW5hdGl2ZV9wbWRfY2xlYXIocG1kKQorCisjZGVmaW5lIHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXApICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91cGRhdGVfZGVmZXIobW0sIGFkZHIsIHB0ZXApICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGFyYXZpcnRfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKQoreworCW5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQoYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGFyYXZpcnRfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpCit7CisJbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lKGJhc2UpOworfQorI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLworCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGluY2x1ZGUgInBndGFibGVfMzIuaCIKKyNlbHNlCisjIGluY2x1ZGUgInBndGFibGVfNjQuaCIKKyNlbmRpZgorCisvKgorICogdGhlIHBnZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcGdkX3RbUFRSU19QRVJfUEdEXQorICoKKyAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwZ2QgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QgLSAxKSkKKworLyoKKyAqIHBnZF9vZmZzZXQoKSByZXR1cm5zIGEgKHBnZF90ICopCisgKiBwZ2RfaW5kZXgoKSBpcyB1c2VkIGdldCB0aGUgb2Zmc2V0IGludG8gdGhlIHBnZCBwYWdlJ3MgYXJyYXkgb2YgcGdkX3QnczsKKyAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKSAoKG1tKS0+cGdkICsgcGdkX2luZGV4KChhZGRyZXNzKSkpCisvKgorICogYSBzaG9ydGN1dCB3aGljaCBpbXBsaWVzIHRoZSB1c2Ugb2YgdGhlIGtlcm5lbCdzIHBnZCwgaW5zdGVhZAorICogb2YgYSBwcm9jZXNzJ3MKKyAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgKGFkZHJlc3MpKQorCisKKyNkZWZpbmUgS0VSTkVMX1BHRF9CT1VOREFSWQlwZ2RfaW5kZXgoUEFHRV9PRkZTRVQpCisjZGVmaW5lIEtFUk5FTF9QR0RfUFRSUwkJKFBUUlNfUEVSX1BHRCAtIEtFUk5FTF9QR0RfQk9VTkRBUlkpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2VudW0geworCVBHX0xFVkVMX05PTkUsCisJUEdfTEVWRUxfNEssCisJUEdfTEVWRUxfMk0sCisJUEdfTEVWRUxfMUcsCisJUEdfTEVWRUxfTlVNCit9OworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBwYWdlcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBwYWdlcykgeyB9CisjZW5kaWYKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGtlcm5lbCBwYWdldGFibGUgZW50cnkgY29udHJvbGxpbmcKKyAqIHRoZSB2aXJ0dWFsIGFkZHJlc3MgJ2FkZHJlc3MnLiBOVUxMIG1lYW5zIG5vIHBhZ2V0YWJsZSBlbnRyeSBwcmVzZW50LgorICogTk9URTogdGhlIHJldHVybiB0eXBlIGlzIHB0ZV90IGJ1dCBpZiB0aGUgcG1kIGlzIFBTRSB0aGVuIHdlIHJldHVybiBpdAorICogYXMgYSBwdGUgdG9vLgorICovCitleHRlcm4gcHRlX3QgKmxvb2t1cF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50ICpsZXZlbCk7CisKKy8qIGxvY2FsIHB0ZSB1cGRhdGVzIG5lZWQgbm90IHVzZSB4Y2hnIGZvciBsb2NraW5nICovCitzdGF0aWMgaW5saW5lIHB0ZV90IG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIocHRlX3QgKnB0ZXApCit7CisJcHRlX3QgcmVzID0gKnB0ZXA7CisKKwkvKiBQdXJlIG5hdGl2ZSBmdW5jdGlvbiBuZWVkcyBubyBpbnB1dCBmb3IgbW0sIGFkZHIgKi8KKwluYXRpdmVfcHRlX2NsZWFyKE5VTEwsIDAsIHB0ZXApOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgcHRlX3QgKnB0ZXAgLCBwdGVfdCBwdGUpCit7CisJbmF0aXZlX3NldF9wdGUocHRlcCwgcHRlKTsKK30KKworI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKKy8qCisgKiBSdWxlcyBmb3IgdXNpbmcgcHRlX3VwZGF0ZSAtIGl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIGFueSBQVEUgdXBkYXRlIHdoaWNoCisgKiBoYXMgbm90IGJlZW4gZG9uZSB1c2luZyB0aGUgc2V0X3B0ZSAvIGNsZWFyX3B0ZSBpbnRlcmZhY2VzLiAgSXQgaXMgdXNlZCBieQorICogc2hhZG93IG1vZGUgaHlwZXJ2aXNvcnMgdG8gcmVzeW5jaHJvbml6ZSB0aGUgc2hhZG93IHBhZ2UgdGFibGVzLiAgS2VybmVsIFBURQorICogdXBkYXRlcyBzaG91bGQgZWl0aGVyIGJlIHNldHMsIGNsZWFycywgb3Igc2V0X3B0ZV9hdG9taWMgZm9yIFAtPlAKKyAqIHRyYW5zaXRpb25zLCB3aGljaCBtZWFucyB0aGlzIGhvb2sgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciB1c2VyIFBURXMuCisgKiBUaGlzIGhvb2sgaW1wbGllcyBhIFAtPlAgcHJvdGVjdGlvbiBvciBhY2Nlc3MgY2hhbmdlIGhhcyB0YWtlbiBwbGFjZSwgd2hpY2gKKyAqIHJlcXVpcmVzIGEgc3Vic2VxdWVudCBUTEIgZmx1c2guICBUaGUgbm90aWZpY2F0aW9uIGNhbiBvcHRpb25hbGx5IGJlIGRlbGF5ZWQKKyAqIHVudGlsIHRoZSBUTEIgZmx1c2ggZXZlbnQgYnkgdXNpbmcgdGhlIHB0ZV91cGRhdGVfZGVmZXIgZm9ybSBvZiB0aGUKKyAqIGludGVyZmFjZSwgYnV0IGNhcmUgbXVzdCBiZSB0YWtlbiB0byBhc3N1cmUgdGhhdCB0aGUgZmx1c2ggaGFwcGVucyB3aGlsZQorICogc3RpbGwgaG9sZGluZyB0aGUgc2FtZSBwYWdlIHRhYmxlIGxvY2sgc28gdGhhdCB0aGUgc2hhZG93IGFuZCBwcmltYXJ5IHBhZ2VzCisgKiBkbyBub3QgYmVjb21lIG91dCBvZiBzeW5jIG9uIFNNUC4KKyAqLworI2RlZmluZSBwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfdXBkYXRlX2RlZmVyKG1tLCBhZGRyLCBwdGVwKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIFdlIG9ubHkgdXBkYXRlIHRoZSBkaXJ0eS9hY2Nlc3NlZCBzdGF0ZSBpZiB3ZSBzZXQKKyAqIHRoZSBkaXJ0eSBiaXQgYnkgaGFuZCBpbiB0aGUga2VybmVsLCBzaW5jZSB0aGUgaGFyZHdhcmUKKyAqIHdpbGwgZG8gdGhlIGFjY2Vzc2VkIGJpdCBmb3IgdXMsIGFuZCB3ZSBkb24ndCB3YW50IHRvCisgKiByYWNlIHdpdGggb3RoZXIgQ1BVJ3MgdGhhdCBtaWdodCBiZSB1cGRhdGluZyB0aGUgZGlydHkKKyAqIGJpdCBhdCB0aGUgc2FtZSB0aW1lLgorICovCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKKyNkZWZpbmUgIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworZXh0ZXJuIGludCBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsCisJCQkJIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKK2V4dGVybiBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfWU9VTkdfRkxVU0gKK2V4dGVybiBpbnQgcHRlcF9jbGVhcl9mbHVzaF95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgorc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgICAgcHRlX3QgKnB0ZXApCit7CisJcHRlX3QgcHRlID0gbmF0aXZlX3B0ZXBfZ2V0X2FuZF9jbGVhcihwdGVwKTsKKwlwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwKTsKKwlyZXR1cm4gcHRlOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUl9GVUxMCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwKKwkJCQkJICAgIGludCBmdWxsKQoreworCXB0ZV90IHB0ZTsKKwlpZiAoZnVsbCkgeworCQkvKgorCQkgKiBGdWxsIGFkZHJlc3MgZGVzdHJ1Y3Rpb24gaW4gcHJvZ3Jlc3M7IHBhcmF2aXJ0IGRvZXMgbm90CisJCSAqIGNhcmUgYWJvdXQgdXBkYXRlcyBhbmQgbmF0aXZlIG5lZWRzIG5vIGxvY2tpbmcKKwkJICovCisJCXB0ZSA9IG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIocHRlcCk7CisJfSBlbHNlIHsKKwkJcHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKKwl9CisJcmV0dXJuIHB0ZTsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwljbGVhcl9iaXQoX1BBR0VfQklUX1JXLCAodW5zaWduZWQgbG9uZyAqKSZwdGVwLT5wdGUpOworCXB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXApOworfQorCisvKgorICogY2xvbmVfcGdkX3JhbmdlKHBnZF90ICpkc3QsIHBnZF90ICpzcmMsIGludCBjb3VudCk7CisgKgorICogIGRzdCAtIHBvaW50ZXIgdG8gcGdkIHJhbmdlIGFud2hlcmUgb24gYSBwZ2QgcGFnZQorICogIHNyYyAtICIiCisgKiAgY291bnQgLSB0aGUgbnVtYmVyIG9mIHBnZHMgdG8gY29weS4KKyAqCisgKiBkc3QgYW5kIHNyYyBjYW4gYmUgb24gdGhlIHNhbWUgcGFnZSwgYnV0IHRoZSByYW5nZSBtdXN0IG5vdCBvdmVybGFwLAorICogYW5kIG11c3Qgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsb25lX3BnZF9yYW5nZShwZ2RfdCAqZHN0LCBwZ2RfdCAqc3JjLCBpbnQgY291bnQpCit7CisgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBjb3VudCAqIHNpemVvZihwZ2RfdCkpOworfQorCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ1ODg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0wLDAgKzEsMTkxIEBACisjaWZuZGVmIF9BU01fWDg2X1BHVEFCTEVfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9QR1RBQkxFXzMyX0gKKworCisvKgorICogVGhlIExpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IGFzc3VtZXMgYSB0aHJlZS1sZXZlbCBwYWdlIHRhYmxlIHNldHVwLiBPbgorICogdGhlIGkzODYsIHdlIHVzZSB0aGF0LCBidXQgImZvbGQiIHRoZSBtaWQgbGV2ZWwgaW50byB0aGUgdG9wLWxldmVsIHBhZ2UKKyAqIHRhYmxlLCBzbyB0aGF0IHdlIHBoeXNpY2FsbHkgaGF2ZSB0aGUgc2FtZSB0d28tbGV2ZWwgcGFnZSB0YWJsZSBhcyB0aGUKKyAqIGkzODYgbW11IGV4cGVjdHMuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgYW5kIGRlZmluZXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSBhbmQgdXNlCisgKiB0aGUgaTM4NiBwYWdlIHRhYmxlIHRyZWUuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKKworc3RhdGljIGlubGluZSB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCkgeyB9Cit2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBzZXRfcG1kX3Bmbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCk7CisKKy8qCisgKiBUaGUgTGludXggeDg2IHBhZ2luZyBhcmNoaXRlY3R1cmUgaXMgJ2NvbXBpbGUtdGltZSBkdWFsLW1vZGUnLCBpdAorICogaW1wbGVtZW50cyBib3RoIHRoZSB0cmFkaXRpb25hbCAyLWxldmVsIHg4NiBwYWdlIHRhYmxlcyBhbmQgdGhlCisgKiBuZXdlciAzLWxldmVsIFBBRS1tb2RlIHBhZ2UgdGFibGVzLgorICovCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKyMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLWRlZnMuaD4KKyMgZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorIyBkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKKyNlbHNlCisjIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmg+CisjZW5kaWYKKworI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRSAtIDEpKQorCisvKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSg4ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKyNkZWZpbmUgTEFTVF9QS01BUCA1MTIKKyNlbHNlCisjZGVmaW5lIExBU1RfUEtNQVAgMTAyNAorI2VuZGlmCisKKyNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfQk9PVF9TVEFSVCAtIFBBR0VfU0laRSAqIChMQVNUX1BLTUFQICsgMSkpCVwKKwkJICAgICYgUE1EX01BU0spCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorIyBkZWZpbmUgVk1BTExPQ19FTkQJKFBLTUFQX0JBU0UgLSAyICogUEFHRV9TSVpFKQorI2Vsc2UKKyMgZGVmaW5lIFZNQUxMT0NfRU5ECShGSVhBRERSX1NUQVJUIC0gMiAqIFBBR0VfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWE1FTQkoVk1BTExPQ19FTkQgLSBQQUdFX09GRlNFVCAtIF9fVk1BTExPQ19SRVNFUlZFKQorCisvKgorICogRGVmaW5lIHRoaXMgaWYgdGhpbmdzIHdvcmsgZGlmZmVyZW50bHkgb24gYW4gaTM4NiBhbmQgYW4gaTQ4NjoKKyAqIGl0IHdpbGwgKG9uIGFuIGk0ODYpIHdhcm4gYWJvdXQga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGFyZQorICogZG9uZSB3aXRob3V0IGEgJ2FjY2Vzc19vayhWRVJJRllfV1JJVEUsLi4pJworICovCisjdW5kZWYgVEVTVF9BQ0NFU1NfT0sKKworLyogVGhlIGJvb3QgcGFnZSB0YWJsZXMgKGFsbCBjcmVhdGVkIGFzIGEgc2luZ2xlIGFycmF5KSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGcwW107CisKKyNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKCh4KS5wdGVfbG93ICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCisKKy8qIFRvIGF2b2lkIGhhcm1mdWwgcmFjZXMsIHBtZF9ub25lKHgpIHNob3VsZCBjaGVjayBvbmx5IHRoZSBsb3dlciB3aGVuIFBBRSAqLworI2RlZmluZSBwbWRfbm9uZSh4KQkoISh1bnNpZ25lZCBsb25nKXBtZF92YWwoKHgpKSkKKyNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoKHgpKSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHBtZF9iYWQoeCkgKChwbWRfdmFsKHgpICYgKFBURV9GTEFHU19NQVNLICYgfl9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFKQorCisjZGVmaW5lIHBhZ2VzX3RvX21iKHgpICgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKyMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KKyNlbmRpZgorCisvKgorICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgorICogT24gcHJvY2Vzc29ycyB3aGljaCBkbyBub3Qgc3VwcG9ydCBpdCwgdGhpcyBpcyBhIG5vLW9wLgorICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJCQkJCVwKKwkoKGJvb3RfY3B1X2RhdGEueDg2ID4gMykJCQkJXAorCSA/IChfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKSkJXAorCSA6IChwcm90KSkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9sYXJnZShwdWRfdCBwdWQpIHsgcmV0dXJuIDA7IH0KKworLyoKKyAqIHRoZSBwbWQgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHBtZF90W1BUUlNfUEVSX1BNRF0KKyAqCisgKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcG1kIHBhZ2Ugd2hpY2ggd291bGQKKyAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcworICovCisjZGVmaW5lIHBtZF9pbmRleChhZGRyZXNzKQkJCQlcCisJKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSkKKworLyoKKyAqIHRoZSBwdGUgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHB0ZV90W1BUUlNfUEVSX1BURV0KKyAqCisgKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcHRlIHBhZ2Ugd2hpY2ggd291bGQKKyAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcworICovCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKQkJCQkJXAorCSgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpCQkJCVwKKwkoKHB0ZV90ICopcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArICBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKKworI2RlZmluZSBwbWRfcGFnZShwbWQpIChwZm5fdG9fcGFnZShwbWRfdmFsKChwbWQpKSA+PiBQQUdFX1NISUZUKSkKKworI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpCQkJCQlcCisJKCh1bnNpZ25lZCBsb25nKV9fdmEocG1kX3ZhbCgocG1kKSkgJiBQVEVfUEZOX01BU0spKQorCisjaWYgZGVmaW5lZChDT05GSUdfSElHSFBURSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQkJCQkJXAorCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMCkgKwkJXAorCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykJCQkJXAorCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMSkgKwkJXAorCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkga3VubWFwX2F0b21pYygocHRlKSwgS01fUFRFMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGt1bm1hcF9hdG9taWMoKHB0ZSksIEtNX1BURTEpCisjZWxzZQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCQkJCQlcCisJKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIHB0ZV9pbmRleCgoYWRkcmVzcykpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X21hcCgoZGlyKSwgKGFkZHJlc3MpKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogQ2xlYXIgYSBrZXJuZWwgUFRFIGFuZCBmbHVzaCBpdCBmcm9tIHRoZSBUTEIgKi8KKyNkZWZpbmUga3B0ZV9jbGVhcl9mbHVzaChwdGVwLCB2YWRkcikJCVwKK2RvIHsJCQkJCQlcCisJcHRlX2NsZWFyKCZpbml0X21tLCAodmFkZHIpLCAocHRlcCkpOwlcCisJX19mbHVzaF90bGJfb25lKCh2YWRkcikpOwkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIFRoZSBpMzg2IGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZXJuYWwgTU1VIGluZm86IHRoZSBrZXJuZWwgcGFnZQorICogdGFibGVzIGNvbnRhaW4gYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCisgKi8KKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICoga2Vybl9hZGRyX3ZhbGlkKCkgaXMgKDEpIGZvciBGTEFUTUVNIGFuZCAoMCkgZm9yCisgKiBTUEFSU0VNRU0gYW5kIERJU0NPTlRJR01FTQorICovCisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorI2Vsc2UKKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGthZGRyKQkoMCkKKyNlbmRpZgorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCVwKKwlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQorCisjZW5kaWYgLyogX0FTTV9YODZfUEdUQUJMRV8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1YTBlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtMCwwICsxLDI4NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzY0X0gKKyNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV82NF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQorICogdGhlIHg4Ni02NCBwYWdlIHRhYmxlIHRyZWUuCisgKi8KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9wZGEuaD4KKworZXh0ZXJuIHB1ZF90IGxldmVsM19rZXJuZWxfcGd0WzUxMl07CitleHRlcm4gcHVkX3QgbGV2ZWwzX2lkZW50X3BndFs1MTJdOworZXh0ZXJuIHBtZF90IGxldmVsMl9rZXJuZWxfcGd0WzUxMl07CitleHRlcm4gcG1kX3QgbGV2ZWwyX2ZpeG1hcF9wZ3RbNTEyXTsKK2V4dGVybiBwbWRfdCBsZXZlbDJfaWRlbnRfcGd0WzUxMl07CitleHRlcm4gcGdkX3QgaW5pdF9sZXZlbDRfcGd0W107CisKKyNkZWZpbmUgc3dhcHBlcl9wZ19kaXIgaW5pdF9sZXZlbDRfcGd0CisKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECTAKKworLyoKKyAqIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRvcC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAKKyAqLworI2RlZmluZSBQR0RJUl9TSElGVAkzOQorI2RlZmluZSBQVFJTX1BFUl9QR0QJNTEyCisKKy8qCisgKiAzcmQgbGV2ZWwgcGFnZQorICovCisjZGVmaW5lIFBVRF9TSElGVAkzMAorI2RlZmluZSBQVFJTX1BFUl9QVUQJNTEyCisKKy8qCisgKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIG1pZGRsZS1sZXZlbAorICogcGFnZSB0YWJsZSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUE1EX1NISUZUCTIxCisjZGVmaW5lIFBUUlNfUEVSX1BNRAk1MTIKKworLyoKKyAqIGVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsCisgKi8KKyNkZWZpbmUgUFRSU19QRVJfUFRFCTUxMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIHB0ZV9FUlJPUihlKQkJCQkJXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTAxNmx4KS5cbiIsCQlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcHRlX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpCQkJCQlcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlcCglMDE2bHgpLlxuIiwJCVwKKwkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwdWRfRVJST1IoZSkJCQkJCVwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHVkICVwKCUwMTZseCkuXG4iLAkJXAorCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHB1ZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKQkJCQkJXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNmx4KS5cbiIsCQlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcGdkX3ZhbChlKSkKKworI2RlZmluZSBwZ2Rfbm9uZSh4KQkoIXBnZF92YWwoeCkpCisjZGVmaW5lIHB1ZF9ub25lKHgpCSghcHVkX3ZhbCh4KSkKKworc3RydWN0IG1tX3N0cnVjdDsKKwordm9pZCBzZXRfcHRlX3ZhZGRyX3B1ZChwdWRfdCAqcHVkX3BhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IG5ld19wdGUpOworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgIHB0ZV90ICpwdGVwKQoreworCSpwdGVwID0gbmF0aXZlX21ha2VfcHRlKDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwkqcHRlcCA9IHB0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgbmF0aXZlX3B0ZXBfZ2V0X2FuZF9jbGVhcihwdGVfdCAqeHApCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBuYXRpdmVfbWFrZV9wdGUoeGNoZygmeHAtPnB0ZSwgMCkpOworI2Vsc2UKKwkvKiBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyLAorCSAgIGJ1dCBkdXBsaWNhdGVkIGJlY2F1c2Ugb2YgY3ljbGljIGRlcGVuZGVuY3kgKi8KKwlwdGVfdCByZXQgPSAqeHA7CisJbmF0aXZlX3B0ZV9jbGVhcihOVUxMLCAwLCB4cCk7CisJcmV0dXJuIHJldDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKK3sKKwkqcG1kcCA9IHBtZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wbWRfY2xlYXIocG1kX3QgKnBtZCkKK3sKKwluYXRpdmVfc2V0X3BtZChwbWQsIG5hdGl2ZV9tYWtlX3BtZCgwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQoreworCSpwdWRwID0gcHVkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3B1ZF9jbGVhcihwdWRfdCAqcHVkKQoreworCW5hdGl2ZV9zZXRfcHVkKHB1ZCwgbmF0aXZlX21ha2VfcHVkKDApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcGdkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QpCit7CisJKnBnZHAgPSBwZ2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGdkX2NsZWFyKHBnZF90ICpwZ2QpCit7CisJbmF0aXZlX3NldF9wZ2QocGdkLCBuYXRpdmVfbWFrZV9wZ2QoMCkpOworfQorCisjZGVmaW5lIHB0ZV9zYW1lKGEsIGIpCQkoKGEpLnB0ZSA9PSAoYikucHRlKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFBNRF9TSVpFCShfQUMoMSwgVUwpIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKKyNkZWZpbmUgUFVEX1NJWkUJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQorI2RlZmluZSBQVURfTUFTSwkofihQVURfU0laRSAtIDEpKQorI2RlZmluZSBQR0RJUl9TSVpFCShfQUMoMSwgVUwpIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUgLSAxKSkKKworCisjZGVmaW5lIE1BWE1FTQkJIF9BQygweDAwMDAzZmZmZmZmZmZmZmYsIFVMKQorI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgIF9BQygweGZmZmZjMjAwMDAwMDAwMDAsIFVMKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgIF9BQygweGZmZmZlMWZmZmZmZmZmZmYsIFVMKQorI2RlZmluZSBWTUVNTUFQX1NUQVJUCSBfQUMoMHhmZmZmZTIwMDAwMDAwMDAwLCBVTCkKKyNkZWZpbmUgTU9EVUxFU19WQUREUiAgICBfQUMoMHhmZmZmZmZmZmEwMDAwMDAwLCBVTCkKKyNkZWZpbmUgTU9EVUxFU19FTkQgICAgICBfQUMoMHhmZmZmZmZmZmZmMDAwMDAwLCBVTCkKKyNkZWZpbmUgTU9EVUxFU19MRU4gICAoTU9EVUxFU19FTkQgLSBNT0RVTEVTX1ZBRERSKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkKK3sKKwlyZXR1cm4gKHBnZF92YWwocGdkKSAmIH4oUFRFX1BGTl9NQVNLIHwgX1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKQoreworCXJldHVybiAocHVkX3ZhbChwdWQpICYgfihQVEVfUEZOX01BU0sgfCBfUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1kX2JhZChwbWRfdCBwbWQpCit7CisJcmV0dXJuIChwbWRfdmFsKHBtZCkgJiB+KFBURV9QRk5fTUFTSyB8IF9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFOworfQorCisjZGVmaW5lIHB0ZV9ub25lKHgpCSghcHRlX3ZhbCgoeCkpKQorI2RlZmluZSBwdGVfcHJlc2VudCh4KQkocHRlX3ZhbCgoeCkpICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCisKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkJKCh4KSA+PiAoMjAgLSBQQUdFX1NISUZUKSkgICAvKiBGSVhNRTogaXMgdGhpcyByaWdodD8gKi8KKworLyoKKyAqIE1hY3JvIHRvIG1hcmsgYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgInVuY2FjaGVhYmxlIi4KKyAqLworI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQlcCisJKF9fcGdwcm90KHBncHJvdF92YWwoKHByb3QpKSB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpCisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqLworCisvKgorICogTGV2ZWwgNCBhY2Nlc3MuCisgKi8KKyNkZWZpbmUgcGdkX3BhZ2VfdmFkZHIocGdkKQkJCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpX192YSgodW5zaWduZWQgbG9uZylwZ2RfdmFsKChwZ2QpKSAmIFBURV9QRk5fTUFTSykpCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCShwZm5fdG9fcGFnZShwZ2RfdmFsKChwZ2QpKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKSAocGdkX3ZhbChwZ2QpICYgX1BBR0VfUFJFU0VOVCkKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9sYXJnZShwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0KKyNkZWZpbmUgbWtfa2VybmVsX3BnZChhZGRyZXNzKSBfX3BnZCgoYWRkcmVzcykgfCBfS0VSTlBHX1RBQkxFKQorCisvKiBQVUQgLSBMZXZlbDMgYWNjZXNzICovCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCisjZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkJCQkJCQlcCisJKCh1bnNpZ25lZCBsb25nKV9fdmEocHVkX3ZhbCgocHVkKSkgJiBQSFlTSUNBTF9QQUdFX01BU0spKQorI2RlZmluZSBwdWRfcGFnZShwdWQpCShwZm5fdG9fcGFnZShwdWRfdmFsKChwdWQpKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcHVkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpCisjZGVmaW5lIHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKQkJCQkJXAorCSgocHVkX3QgKilwZ2RfcGFnZV92YWRkcigqKHBnZCkpICsgcHVkX2luZGV4KChhZGRyZXNzKSkpCisjZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkgKHB1ZF92YWwoKHB1ZCkpICYgX1BBR0VfUFJFU0VOVCkKKworc3RhdGljIGlubGluZSBpbnQgcHVkX2xhcmdlKHB1ZF90IHB0ZSkKK3sKKwlyZXR1cm4gKHB1ZF92YWwocHRlKSAmIChfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKSkgPT0KKwkJKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpOworfQorCisvKiBQTUQgIC0gTGV2ZWwgMiBhY2Nlc3MgKi8KKyNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKSAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbCgocG1kKSkgJiBQVEVfUEZOX01BU0spKQorI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3ZhbCgocG1kKSkgPj4gUEFHRV9TSElGVCkpCisKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpCisjZGVmaW5lIHBtZF9vZmZzZXQoZGlyLCBhZGRyZXNzKSAoKHBtZF90ICopcHVkX3BhZ2VfdmFkZHIoKihkaXIpKSArIFwKKwkJCQkgIHBtZF9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKCh4KSkpCisjZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKCh4KSkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBwZm5fcG1kKG5yLCBwcm90KSAoX19wbWQoKChucikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKChwcm90KSkpKQorI2RlZmluZSBwbWRfcGZuKHgpICAoKHBtZF92YWwoKHgpKSAmIF9fUEhZU0lDQUxfTUFTSykgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZV92YWwoKHB0ZSkpICYgUEhZU0lDQUxfUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7IC5wdGUgPSAoKG9mZikgPDwgUEFHRV9TSElGVCkgfAlcCisJCQkJCSAgICBfUEFHRV9GSUxFIH0pCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTIF9fUEhZU0lDQUxfTUFTS19TSElGVAorCisvKiBQVEUgLSBMZXZlbCAxIGFjY2Vzcy4gKi8KKworLyogcGFnZSwgcHJvdGVjdGlvbiAtPiBwdGUgKi8KKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbigocGFnZSkpLCAocGdwcm90KSkKKworI2RlZmluZSBwdGVfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgKChwdGVfdCAqKSBwbWRfcGFnZV92YWRkcigqKGRpcikpICsgXAorCQkJCQkgcHRlX2luZGV4KChhZGRyZXNzKSkpCisKKy8qIHg4Ni02NCBhbHdheXMgaGFzIGFsbCBwYWdlIHRhYmxlcyBtYXBwZWQuICovCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkgLyogTk9QICovCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSAvKiBOT1AgKi8KKworI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKSBkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBpbnQgZGlyZWN0X2dicGFnZXM7CisKKy8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiAxKSAmIDB4M2YpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDgpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwgXAorCQkJCQkJCSAoKG9mZnNldCkgPDwgOCkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbCgocHRlKSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7IC5wdGUgPSAoeCkudmFsIH0pCisKK2V4dGVybiBpbnQga2Vybl9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBjbGVhbnVwX2hpZ2htYXAodm9pZCk7CisKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAorCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUFfVE9QRE9XTgorCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKSAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQQUdFX0FHUCAgICBQQUdFX0tFUk5FTF9OT0NBQ0hFCisjZGVmaW5lIEhBVkVfUEFHRV9BR1AgMQorCisvKiBmcy9wcm9jL2tjb3JlLmMgKi8KKyNkZWZpbmUJa2NfdmFkZHJfdG9fb2Zmc2V0KHYpICgodikgJiBfX1ZJUlRVQUxfTUFTSykKKyNkZWZpbmUJa2Nfb2Zmc2V0X3RvX3ZhZGRyKG8pCQkJCVwKKwkoKChvKSAmICgxVUwgPDwgKF9fVklSVFVBTF9NQVNLX1NISUZUIC0gMSkpKQlcCisJID8gKChvKSB8IH5fX1ZJUlRVQUxfTUFTSykJCQlcCisJIDogKG8pKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TQU1FCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfUEdUQUJMRV82NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcG9sbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcG9sbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3BvbGwuaApjb3B5IHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BvbGwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Bvc2l4X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvcG9zaXhfdHlwZXMuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXNfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkOWFkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzXzMyLmgKQEAgLTAsMCArMSw4NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QT1NJWF9UWVBFU18zMl9ICisjZGVmaW5lIF9BU01fWDg2X1BPU0lYX1RZUEVTXzMyX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmFsbHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlLCBzbyB5b3UgbmVlZCB0bworICogYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBuYW1lc3BhY2UgcG9sbHV0aW9uIGV0Yy4gIEFsc28sIHdlIGNhbm5vdAorICogYXNzdW1lIEdDQyBpcyBiZWluZyB1c2VkLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfc3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9wdHJkaWZmX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfdGltZXJfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfZGFkZHJfdDsKK3R5cGVkZWYgY2hhciAqCQlfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAl2YWxbMl07Cit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKworI3VuZGVmCV9fRkRfU0VUCisjZGVmaW5lIF9fRkRfU0VUKGZkLGZkc2V0cCkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImJ0c2wgJTEsJTAiOgkJCQlcCisJCSAgICAgIittIiAoKihfX2tlcm5lbF9mZF9zZXQgKikoZmRzZXRwKSkJXAorCQkgICAgIDogInIiICgoaW50KShmZCkpKQorCisjdW5kZWYJX19GRF9DTFIKKyNkZWZpbmUgX19GRF9DTFIoZmQsZmRzZXRwKQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiYnRybCAlMSwlMCI6CQkJCVwKKwkJICAgICAiK20iICgqKF9fa2VybmVsX2ZkX3NldCAqKShmZHNldHApKQlcCisJCSAgICAgOiAiciIgKChpbnQpIChmZCkpKQorCisjdW5kZWYJX19GRF9JU1NFVAorI2RlZmluZSBfX0ZEX0lTU0VUKGZkLGZkc2V0cCkJCQkJCVwKKwkoX19leHRlbnNpb25fXwkJCQkJCVwKKwkgKHsJCQkJCQkJXAorCSB1bnNpZ25lZCBjaGFyIF9fcmVzdWx0OwkJCQlcCisJIGFzbSB2b2xhdGlsZSgiYnRsICUxLCUyIDsgc2V0YiAlMCIJCQlcCisJCSAgICAgIDogIj1xIiAoX19yZXN1bHQpCQkJCVwKKwkJICAgICAgOiAiciIgKChpbnQpKGZkKSksCQkJXAorCQkJIm0iICgqKF9fa2VybmVsX2ZkX3NldCAqKShmZHNldHApKSk7CVwKKwkgX19yZXN1bHQ7CQkJCQkJXAorfSkpCisKKyN1bmRlZglfX0ZEX1pFUk8KKyNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpbnQgX19kMCwgX19kMTsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjbGQgOyByZXAgOyBzdG9zbCIJCQlcCisJCSAgICAgOiAiPW0iICgqKF9fa2VybmVsX2ZkX3NldCAqKShmZHNldHApKSwJXAorCQkgICAgICAgIj0mYyIgKF9fZDApLCAiPSZEIiAoX19kMSkJCVwKKwkJICAgICA6ICJhIiAoMCksICIxIiAoX19GRFNFVF9MT05HUyksCQlcCisJCSAgICAgICAiMiIgKChfX2tlcm5lbF9mZF9zZXQgKikoZmRzZXRwKSkJXAorCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogZGVmaW5lZChfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogX0FTTV9YODZfUE9TSVhfVFlQRVNfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXNfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4ZDJkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzXzY0LmgKQEAgLTAsMCArMSwxMTkgQEAKKyNpZm5kZWYgX0FTTV9YODZfUE9TSVhfVFlQRVNfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9QT1NJWF9UWVBFU182NF9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7CisKKyNpZmRlZiBfX0dOVUNfXwordHlwZWRlZiBsb25nIGxvbmcJX19rZXJuZWxfbG9mZl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQJdmFsWzJdOworfSBfX2tlcm5lbF9mc2lkX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3VpZF90IF9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZF90IF9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9vbGRfZGV2X3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyN1bmRlZiBfX0ZEX1NFVAorc3RhdGljIGlubGluZSB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gfD0gKDFVTDw8X3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0NMUgorc3RhdGljIGlubGluZSB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOworfQorCisjdW5kZWYgX19GRF9JU1NFVAorc3RhdGljIGlubGluZSBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2NvbnN0X18gX19rZXJuZWxfZmRfc2V0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZXMgKDggb3IgMzIgbG9uZ3MsCisgKiBmb3IgMjU2IGFuZCAxMDI0LWJpdCBmZF9zZXRzIHJlc3BlY3RpdmVseSkKKyAqLworI3VuZGVmIF9fRkRfWkVSTworc3RhdGljIGlubGluZSB2b2lkIF9fRkRfWkVSTyhfX2tlcm5lbF9mZF9zZXQgKnApCit7CisJdW5zaWduZWQgbG9uZyAqdG1wID0gcC0+ZmRzX2JpdHM7CisJaW50IGk7CisKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKKwkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7CisJCWNhc2UgMzI6CisJCQl0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCXRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCQkJdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7CisJCQl0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKKwkJCXRtcFsxNl0gPSAwOyB0bXBbMTddID0gMDsgdG1wWzE4XSA9IDA7IHRtcFsxOV0gPSAwOworCQkJdG1wWzIwXSA9IDA7IHRtcFsyMV0gPSAwOyB0bXBbMjJdID0gMDsgdG1wWzIzXSA9IDA7CisJCQl0bXBbMjRdID0gMDsgdG1wWzI1XSA9IDA7IHRtcFsyNl0gPSAwOyB0bXBbMjddID0gMDsKKwkJCXRtcFsyOF0gPSAwOyB0bXBbMjldID0gMDsgdG1wWzMwXSA9IDA7IHRtcFszMV0gPSAwOworCQkJcmV0dXJuOworCQljYXNlIDE2OgorCQkJdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQl0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCXRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOworCQkJdG1wWzEyXSA9IDA7IHRtcFsxM10gPSAwOyB0bXBbMTRdID0gMDsgdG1wWzE1XSA9IDA7CisJCQlyZXR1cm47CisJCWNhc2UgODoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQlyZXR1cm47CisJCWNhc2UgNDoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJcmV0dXJuOworCQl9CisJfQorCWkgPSBfX0ZEU0VUX0xPTkdTOworCXdoaWxlIChpKSB7CisJCWktLTsKKwkJKnRtcCA9IDA7CisJCXRtcCsrOworCX0KK30KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1BPU0lYX1RZUEVTXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjgxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0FTTV9YODZfUFJDVExfSAorI2RlZmluZSBfQVNNX1g4Nl9QUkNUTF9ICisKKyNkZWZpbmUgQVJDSF9TRVRfR1MgMHgxMDAxCisjZGVmaW5lIEFSQ0hfU0VUX0ZTIDB4MTAwMgorI2RlZmluZSBBUkNIX0dFVF9GUyAweDEwMDMKKyNkZWZpbmUgQVJDSF9HRVRfR1MgMHgxMDA0CisKKworI2VuZGlmIC8qIF9BU01fWDg2X1BSQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3ItY3lyaXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1jeXJpeC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLWN5cml4LmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1jeXJpeC5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3ItZmxhZ3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhM2U4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3ItZmxhZ3MuaApAQCAtMCwwICsxLDEwMCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QUk9DRVNTT1JfRkxBR1NfSAorI2RlZmluZSBfQVNNX1g4Nl9QUk9DRVNTT1JfRkxBR1NfSAorLyogVmFyaW91cyBmbGFncyBkZWZpbmVkOiBjYW4gYmUgaW5jbHVkZWQgZnJvbSBhc3NlbWJsZXIuICovCisKKy8qCisgKiBFRkxBR1MgYml0cworICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfQ0YJMHgwMDAwMDAwMSAvKiBDYXJyeSBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfUEYJMHgwMDAwMDAwNCAvKiBQYXJpdHkgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX0FGCTB4MDAwMDAwMTAgLyogQXV4aWxsYXJ5IGNhcnJ5IEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19aRgkweDAwMDAwMDQwIC8qIFplcm8gRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX1NGCTB4MDAwMDAwODAgLyogU2lnbiBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfVEYJMHgwMDAwMDEwMCAvKiBUcmFwIEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19JRgkweDAwMDAwMjAwIC8qIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfREYJMHgwMDAwMDQwMCAvKiBEaXJlY3Rpb24gRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX09GCTB4MDAwMDA4MDAgLyogT3ZlcmZsb3cgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX0lPUEwJMHgwMDAwMzAwMCAvKiBJT1BMIG1hc2sgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19OVAkweDAwMDA0MDAwIC8qIE5lc3RlZCBUYXNrICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfUkYJMHgwMDAxMDAwMCAvKiBSZXN1bWUgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX1ZNCTB4MDAwMjAwMDAgLyogVmlydHVhbCBNb2RlICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfQUMJMHgwMDA0MDAwMCAvKiBBbGlnbm1lbnQgQ2hlY2sgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19WSUYJMHgwMDA4MDAwMCAvKiBWaXJ0dWFsIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfVklQCTB4MDAxMDAwMDAgLyogVmlydHVhbCBJbnRlcnJ1cHQgUGVuZGluZyAqLworI2RlZmluZSBYODZfRUZMQUdTX0lECTB4MDAyMDAwMDAgLyogQ1BVSUQgZGV0ZWN0aW9uIGZsYWcgKi8KKworLyoKKyAqIEJhc2ljIENQVSBjb250cm9sIGluIENSMAorICovCisjZGVmaW5lIFg4Nl9DUjBfUEUJMHgwMDAwMDAwMSAvKiBQcm90ZWN0aW9uIEVuYWJsZSAqLworI2RlZmluZSBYODZfQ1IwX01QCTB4MDAwMDAwMDIgLyogTW9uaXRvciBDb3Byb2Nlc3NvciAqLworI2RlZmluZSBYODZfQ1IwX0VNCTB4MDAwMDAwMDQgLyogRW11bGF0aW9uICovCisjZGVmaW5lIFg4Nl9DUjBfVFMJMHgwMDAwMDAwOCAvKiBUYXNrIFN3aXRjaGVkICovCisjZGVmaW5lIFg4Nl9DUjBfRVQJMHgwMDAwMDAxMCAvKiBFeHRlbnNpb24gVHlwZSAqLworI2RlZmluZSBYODZfQ1IwX05FCTB4MDAwMDAwMjAgLyogTnVtZXJpYyBFcnJvciAqLworI2RlZmluZSBYODZfQ1IwX1dQCTB4MDAwMTAwMDAgLyogV3JpdGUgUHJvdGVjdCAqLworI2RlZmluZSBYODZfQ1IwX0FNCTB4MDAwNDAwMDAgLyogQWxpZ25tZW50IE1hc2sgKi8KKyNkZWZpbmUgWDg2X0NSMF9OVwkweDIwMDAwMDAwIC8qIE5vdCBXcml0ZS10aHJvdWdoICovCisjZGVmaW5lIFg4Nl9DUjBfQ0QJMHg0MDAwMDAwMCAvKiBDYWNoZSBEaXNhYmxlICovCisjZGVmaW5lIFg4Nl9DUjBfUEcJMHg4MDAwMDAwMCAvKiBQYWdpbmcgKi8KKworLyoKKyAqIFBhZ2luZyBvcHRpb25zIGluIENSMworICovCisjZGVmaW5lIFg4Nl9DUjNfUFdUCTB4MDAwMDAwMDggLyogUGFnZSBXcml0ZSBUaHJvdWdoICovCisjZGVmaW5lIFg4Nl9DUjNfUENECTB4MDAwMDAwMTAgLyogUGFnZSBDYWNoZSBEaXNhYmxlICovCisKKy8qCisgKiBJbnRlbCBDUFUgZmVhdHVyZXMgaW4gQ1I0CisgKi8KKyNkZWZpbmUgWDg2X0NSNF9WTUUJMHgwMDAwMDAwMSAvKiBlbmFibGUgdm04NiBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9DUjRfUFZJCTB4MDAwMDAwMDIgLyogdmlydHVhbCBpbnRlcnJ1cHRzIGZsYWcgZW5hYmxlICovCisjZGVmaW5lIFg4Nl9DUjRfVFNECTB4MDAwMDAwMDQgLyogZGlzYWJsZSB0aW1lIHN0YW1wIGF0IGlwbCAzICovCisjZGVmaW5lIFg4Nl9DUjRfREUJMHgwMDAwMDAwOCAvKiBlbmFibGUgZGVidWdnaW5nIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QU0UJMHgwMDAwMDAxMCAvKiBlbmFibGUgcGFnZSBzaXplIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QQUUJMHgwMDAwMDAyMCAvKiBlbmFibGUgcGh5c2ljYWwgYWRkcmVzcyBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9DUjRfTUNFCTB4MDAwMDAwNDAgLyogTWFjaGluZSBjaGVjayBlbmFibGUgKi8KKyNkZWZpbmUgWDg2X0NSNF9QR0UJMHgwMDAwMDA4MCAvKiBlbmFibGUgZ2xvYmFsIHBhZ2VzICovCisjZGVmaW5lIFg4Nl9DUjRfUENFCTB4MDAwMDAxMDAgLyogZW5hYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGF0IGlwbCAzICovCisjZGVmaW5lIFg4Nl9DUjRfT1NGWFNSCTB4MDAwMDAyMDAgLyogZW5hYmxlIGZhc3QgRlBVIHNhdmUgYW5kIHJlc3RvcmUgKi8KKyNkZWZpbmUgWDg2X0NSNF9PU1hNTUVYQ1BUIDB4MDAwMDA0MDAgLyogZW5hYmxlIHVubWFza2VkIFNTRSBleGNlcHRpb25zICovCisjZGVmaW5lIFg4Nl9DUjRfVk1YRQkweDAwMDAyMDAwIC8qIGVuYWJsZSBWTVggdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgWDg2X0NSNF9PU1hTQVZFIDB4MDAwNDAwMDAgLyogZW5hYmxlIHhzYXZlIGFuZCB4cmVzdG9yZSAqLworCisvKgorICogeDg2LTY0IFRhc2sgUHJpb3JpdHkgUmVnaXN0ZXIsIENSOAorICovCisjZGVmaW5lIFg4Nl9DUjhfVFBSCTB4MDAwMDAwMEYgLyogdGFzayBwcmlvcml0eSByZWdpc3RlciAqLworCisvKgorICogQU1EIGFuZCBUcmFuc21ldGEgdXNlIE1TUnMgZm9yIGNvbmZpZ3VyYXRpb247IHNlZSA8YXNtL21zci1pbmRleC5oPgorICovCisKKy8qCisgKiAgICAgIE5TQy9DeXJpeCBDUFUgY29uZmlndXJhdGlvbiByZWdpc3RlciBpbmRleGVzCisgKi8KKyNkZWZpbmUgQ1g4Nl9QQ1IwCTB4MjAKKyNkZWZpbmUgQ1g4Nl9HQ1IJMHhiOAorI2RlZmluZSBDWDg2X0NDUjAJMHhjMAorI2RlZmluZSBDWDg2X0NDUjEJMHhjMQorI2RlZmluZSBDWDg2X0NDUjIJMHhjMgorI2RlZmluZSBDWDg2X0NDUjMJMHhjMworI2RlZmluZSBDWDg2X0NDUjQJMHhlOAorI2RlZmluZSBDWDg2X0NDUjUJMHhlOQorI2RlZmluZSBDWDg2X0NDUjYJMHhlYQorI2RlZmluZSBDWDg2X0NDUjcJMHhlYgorI2RlZmluZSBDWDg2X1BDUjEJMHhmMAorI2RlZmluZSBDWDg2X0RJUjAJMHhmZQorI2RlZmluZSBDWDg2X0RJUjEJMHhmZgorI2RlZmluZSBDWDg2X0FSUl9CQVNFCTB4YzQKKyNkZWZpbmUgQ1g4Nl9SQ1JfQkFTRQkweGRjCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZkZWYgQ09ORklHX1ZNODYKKyNkZWZpbmUgWDg2X1ZNX01BU0sJWDg2X0VGTEFHU19WTQorI2Vsc2UKKyNkZWZpbmUgWDg2X1ZNX01BU0sJMCAvKiBObyBWTTg2IHN1cHBvcnQgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QUk9DRVNTT1JfRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2EwMWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTAsMCArMSw5MzYgQEAKKyNpZm5kZWYgX0FTTV9YODZfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX0FTTV9YODZfUFJPQ0VTU09SX0gKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKyNpbmNsdWRlIDxhc20vdm04Ni5oPgorI2luY2x1ZGUgPGFzbS9tYXRoX2VtdS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+CisjaW5jbHVkZSA8YXNtL25vcHMuaD4KKyNpbmNsdWRlIDxhc20vZHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICpjdXJyZW50X3RleHRfYWRkcih2b2lkKQoreworCXZvaWQgKnBjOworCisJYXNtIHZvbGF0aWxlKCJtb3YgJDFmLCAlMDsgMToiOiI9ciIgKHBjKSk7CisKKwlyZXR1cm4gcGM7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2X1ZTTVAKKyMgZGVmaW5lIEFSQ0hfTUlOX1RBU0tBTElHTgkJKDEgPDwgSU5URVJOT0RFX0NBQ0hFX1NISUZUKQorIyBkZWZpbmUgQVJDSF9NSU5fTU1TVFJVQ1RfQUxJR04JKDEgPDwgSU5URVJOT0RFX0NBQ0hFX1NISUZUKQorI2Vsc2UKKyMgZGVmaW5lIEFSQ0hfTUlOX1RBU0tBTElHTgkJMTYKKyMgZGVmaW5lIEFSQ0hfTUlOX01NU1RSVUNUX0FMSUdOCTAKKyNlbmRpZgorCisvKgorICogIENQVSB0eXBlIGFuZCBoYXJkd2FyZSBidWcgZmxhZ3MuIEtlcHQgc2VwYXJhdGVseSBmb3IgZWFjaCBDUFUuCisgKiAgTWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgcmVmZXJlbmNlZCBpbiBoZWFkLlMsIHNvIHRoaW5rIHR3aWNlCisgKiAgYmVmb3JlIHRvdWNoaW5nIHRoZW0uIFttal0KKyAqLworCitzdHJ1Y3QgY3B1aW5mb194ODYgeworCV9fdTgJCQl4ODY7CQkvKiBDUFUgZmFtaWx5ICovCisJX191OAkJCXg4Nl92ZW5kb3I7CS8qIENQVSB2ZW5kb3IgKi8KKwlfX3U4CQkJeDg2X21vZGVsOworCV9fdTgJCQl4ODZfbWFzazsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJY2hhcgkJCXdwX3dvcmtzX29rOwkvKiBJdCBkb2Vzbid0IG9uIDM4NidzICovCisKKwkvKiBQcm9ibGVtcyBvbiBzb21lIDQ4NkR4NCdzIGFuZCBvbGQgMzg2J3M6ICovCisJY2hhcgkJCWhsdF93b3Jrc19vazsKKwljaGFyCQkJaGFyZF9tYXRoOworCWNoYXIJCQlyZnU7CisJY2hhcgkJCWZkaXZfYnVnOworCWNoYXIJCQlmMDBmX2J1ZzsKKwljaGFyCQkJY29tYV9idWc7CisJY2hhcgkJCXBhZDA7CisjZWxzZQorCS8qIE51bWJlciBvZiA0SyBwYWdlcyBpbiBEVExCL0lUTEIgY29tYmluZWQoaW4gcGFnZXMpOiAqLworCWludAkJCSB4ODZfdGxic2l6ZTsKKwlfX3U4CQkJeDg2X3ZpcnRfYml0czsKKwlfX3U4CQkJeDg2X3BoeXNfYml0czsKKyNlbmRpZgorCS8qIENQVUlEIHJldHVybmVkIGNvcmUgaWQgYml0czogKi8KKwlfX3U4CQkJeDg2X2NvcmVpZF9iaXRzOworCS8qIE1heCBleHRlbmRlZCBDUFVJRCBmdW5jdGlvbiBzdXBwb3J0ZWQ6ICovCisJX191MzIJCQlleHRlbmRlZF9jcHVpZF9sZXZlbDsKKwkvKiBNYXhpbXVtIHN1cHBvcnRlZCBDUFVJRCBsZXZlbCwgLTE9bm8gQ1BVSUQ6ICovCisJaW50CQkJY3B1aWRfbGV2ZWw7CisJX191MzIJCQl4ODZfY2FwYWJpbGl0eVtOQ0FQSU5UU107CisJY2hhcgkJCXg4Nl92ZW5kb3JfaWRbMTZdOworCWNoYXIJCQl4ODZfbW9kZWxfaWRbNjRdOworCS8qIGluIEtCIC0gdmFsaWQgZm9yIENQVVMgd2hpY2ggc3VwcG9ydCB0aGlzIGNhbGw6ICovCisJaW50CQkJeDg2X2NhY2hlX3NpemU7CisJaW50CQkJeDg2X2NhY2hlX2FsaWdubWVudDsJLyogSW4gYnl0ZXMgKi8KKwlpbnQJCQl4ODZfcG93ZXI7CisJdW5zaWduZWQgbG9uZwkJbG9vcHNfcGVyX2ppZmZ5OworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBjcHVzIHNoYXJpbmcgdGhlIGxhc3QgbGV2ZWwgY2FjaGU6ICovCisJY3B1bWFza190CQlsbGNfc2hhcmVkX21hcDsKKyNlbmRpZgorCS8qIGNwdWlkIHJldHVybmVkIG1heCBjb3JlcyB2YWx1ZTogKi8KKwl1MTYJCQkgeDg2X21heF9jb3JlczsKKwl1MTYJCQlhcGljaWQ7CisJdTE2CQkJaW5pdGlhbF9hcGljaWQ7CisJdTE2CQkJeDg2X2NsZmx1c2hfc2l6ZTsKKyNpZmRlZiBDT05GSUdfU01QCisJLyogbnVtYmVyIG9mIGNvcmVzIGFzIHNlZW4gYnkgdGhlIE9TOiAqLworCXUxNgkJCWJvb3RlZF9jb3JlczsKKwkvKiBQaHlzaWNhbCBwcm9jZXNzb3IgaWQ6ICovCisJdTE2CQkJcGh5c19wcm9jX2lkOworCS8qIENvcmUgaWQ6ICovCisJdTE2CQkJY3B1X2NvcmVfaWQ7CisJLyogSW5kZXggaW50byBwZXJfY3B1IGxpc3Q6ICovCisJdTE2CQkJY3B1X2luZGV4OworI2VuZGlmCit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKTsKKworI2RlZmluZSBYODZfVkVORE9SX0lOVEVMCTAKKyNkZWZpbmUgWDg2X1ZFTkRPUl9DWVJJWAkxCisjZGVmaW5lIFg4Nl9WRU5ET1JfQU1ECQkyCisjZGVmaW5lIFg4Nl9WRU5ET1JfVU1DCQkzCisjZGVmaW5lIFg4Nl9WRU5ET1JfQ0VOVEFVUgk1CisjZGVmaW5lIFg4Nl9WRU5ET1JfVFJBTlNNRVRBCTcKKyNkZWZpbmUgWDg2X1ZFTkRPUl9OU0MJCTgKKyNkZWZpbmUgWDg2X1ZFTkRPUl9OVU0JCTkKKworI2RlZmluZSBYODZfVkVORE9SX1VOS05PV04JMHhmZgorCisvKgorICogY2FwYWJpbGl0aWVzIG9mIENQVXMKKyAqLworZXh0ZXJuIHN0cnVjdCBjcHVpbmZvX3g4Nglib290X2NwdV9kYXRhOworZXh0ZXJuIHN0cnVjdCBjcHVpbmZvX3g4NgluZXdfY3B1X2RhdGE7CisKK2V4dGVybiBzdHJ1Y3QgdHNzX3N0cnVjdAlkb3VibGVmYXVsdF90c3M7CitleHRlcm4gX191MzIJCQljbGVhcmVkX2NwdV9jYXBzW05DQVBJTlRTXTsKKworI2lmZGVmIENPTkZJR19TTVAKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKKyNkZWZpbmUgY3B1X2RhdGEoY3B1KQkJcGVyX2NwdShjcHVfaW5mbywgY3B1KQorI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhCV9fZ2V0X2NwdV92YXIoY3B1X2luZm8pCisjZWxzZQorI2RlZmluZSBjcHVfZGF0YShjcHUpCQlib290X2NwdV9kYXRhCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEJYm9vdF9jcHVfZGF0YQorI2VuZGlmCisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKKworc3RhdGljIGlubGluZSBpbnQgaGx0X3dvcmtzKGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXJldHVybiBjcHVfZGF0YShjcHUpLmhsdF93b3Jrc19vazsKKyNlbHNlCisJcmV0dXJuIDE7CisjZW5kaWYKK30KKworI2RlZmluZSBjYWNoZV9saW5lX3NpemUoKQkoYm9vdF9jcHVfZGF0YS54ODZfY2FjaGVfYWxpZ25tZW50KQorCitleHRlcm4gdm9pZCBjcHVfZGV0ZWN0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CisKK2V4dGVybiBzdHJ1Y3QgcHRfcmVncyAqaWRsZV9yZWdzKHN0cnVjdCBwdF9yZWdzICopOworCitleHRlcm4gdm9pZCBlYXJseV9jcHVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpOworZXh0ZXJuIHZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKik7CitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7CitleHRlcm4gdm9pZCBpbml0X3NjYXR0ZXJlZF9jcHVpZF9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpbml0X2ludGVsX2NhY2hlaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG51bV9jYWNoZV9sZWF2ZXM7CisKK2V4dGVybiB2b2lkIGRldGVjdF9leHRlbmRlZF90b3BvbG9neShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworZXh0ZXJuIHZvaWQgZGV0ZWN0X2h0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfY3B1aWQodW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAorCQkJCXVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCkKK3sKKwkvKiBlY3ggaXMgb2Z0ZW4gYW4gaW5wdXQgYXMgd2VsbCBhcyBhbiBvdXRwdXQuICovCisJYXNtKCJjcHVpZCIKKwkgICAgOiAiPWEiICgqZWF4KSwKKwkgICAgICAiPWIiICgqZWJ4KSwKKwkgICAgICAiPWMiICgqZWN4KSwKKwkgICAgICAiPWQiICgqZWR4KQorCSAgICA6ICIwIiAoKmVheCksICIyIiAoKmVjeCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9jcjMocGdkX3QgKnBnZGlyKQoreworCXdyaXRlX2NyMyhfX3BhKHBnZGlyKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKiBUaGlzIGlzIHRoZSBUU1MgZGVmaW5lZCBieSB0aGUgaGFyZHdhcmUuICovCitzdHJ1Y3QgeDg2X2h3X3RzcyB7CisJdW5zaWduZWQgc2hvcnQJCWJhY2tfbGluaywgX19ibGg7CisJdW5zaWduZWQgbG9uZwkJc3AwOworCXVuc2lnbmVkIHNob3J0CQlzczAsIF9fc3MwaDsKKwl1bnNpZ25lZCBsb25nCQlzcDE7CisJLyogc3MxIGNhY2hlcyBNU1JfSUEzMl9TWVNFTlRFUl9DUzogKi8KKwl1bnNpZ25lZCBzaG9ydAkJc3MxLCBfX3NzMWg7CisJdW5zaWduZWQgbG9uZwkJc3AyOworCXVuc2lnbmVkIHNob3J0CQlzczIsIF9fc3MyaDsKKwl1bnNpZ25lZCBsb25nCQlfX2NyMzsKKwl1bnNpZ25lZCBsb25nCQlpcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bnNpZ25lZCBsb25nCQlheDsKKwl1bnNpZ25lZCBsb25nCQljeDsKKwl1bnNpZ25lZCBsb25nCQlkeDsKKwl1bnNpZ25lZCBsb25nCQlieDsKKwl1bnNpZ25lZCBsb25nCQlzcDsKKwl1bnNpZ25lZCBsb25nCQlicDsKKwl1bnNpZ25lZCBsb25nCQlzaTsKKwl1bnNpZ25lZCBsb25nCQlkaTsKKwl1bnNpZ25lZCBzaG9ydAkJZXMsIF9fZXNoOworCXVuc2lnbmVkIHNob3J0CQljcywgX19jc2g7CisJdW5zaWduZWQgc2hvcnQJCXNzLCBfX3NzaDsKKwl1bnNpZ25lZCBzaG9ydAkJZHMsIF9fZHNoOworCXVuc2lnbmVkIHNob3J0CQlmcywgX19mc2g7CisJdW5zaWduZWQgc2hvcnQJCWdzLCBfX2dzaDsKKwl1bnNpZ25lZCBzaG9ydAkJbGR0LCBfX2xkdGg7CisJdW5zaWduZWQgc2hvcnQJCXRyYWNlOworCXVuc2lnbmVkIHNob3J0CQlpb19iaXRtYXBfYmFzZTsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNlbHNlCitzdHJ1Y3QgeDg2X2h3X3RzcyB7CisJdTMyCQkJcmVzZXJ2ZWQxOworCXU2NAkJCXNwMDsKKwl1NjQJCQlzcDE7CisJdTY0CQkJc3AyOworCXU2NAkJCXJlc2VydmVkMjsKKwl1NjQJCQlpc3RbN107CisJdTMyCQkJcmVzZXJ2ZWQzOworCXUzMgkJCXJlc2VydmVkNDsKKwl1MTYJCQlyZXNlcnZlZDU7CisJdTE2CQkJaW9fYml0bWFwX2Jhc2U7CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgX19fX2NhY2hlbGluZV9hbGlnbmVkOworI2VuZGlmCisKKy8qCisgKiBJTy1iaXRtYXAgc2l6ZXM6CisgKi8KKyNkZWZpbmUgSU9fQklUTUFQX0JJVFMJCQk2NTUzNgorI2RlZmluZSBJT19CSVRNQVBfQllURVMJCQkoSU9fQklUTUFQX0JJVFMvOCkKKyNkZWZpbmUgSU9fQklUTUFQX0xPTkdTCQkJKElPX0JJVE1BUF9CWVRFUy9zaXplb2YobG9uZykpCisjZGVmaW5lIElPX0JJVE1BUF9PRkZTRVQJCW9mZnNldG9mKHN0cnVjdCB0c3Nfc3RydWN0LCBpb19iaXRtYXApCisjZGVmaW5lIElOVkFMSURfSU9fQklUTUFQX09GRlNFVAkweDgwMDAKKyNkZWZpbmUgSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUX0xBWlkJMHg5MDAwCisKK3N0cnVjdCB0c3Nfc3RydWN0IHsKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSBzdGF0ZToKKwkgKi8KKwlzdHJ1Y3QgeDg2X2h3X3Rzcwl4ODZfdHNzOworCisJLyoKKwkgKiBUaGUgZXh0cmEgMSBpcyB0aGVyZSBiZWNhdXNlIHRoZSBDUFUgd2lsbCBhY2Nlc3MgYW4KKwkgKiBhZGRpdGlvbmFsIGJ5dGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIElPIHBlcm1pc3Npb24KKwkgKiBiaXRtYXAuIFRoZSBleHRyYSBieXRlIG11c3QgYmUgYWxsIDEgYml0cywgYW5kIG11c3QKKwkgKiBiZSB3aXRoaW4gdGhlIGxpbWl0LgorCSAqLworCXVuc2lnbmVkIGxvbmcJCWlvX2JpdG1hcFtJT19CSVRNQVBfTE9OR1MgKyAxXTsKKwkvKgorCSAqIENhY2hlIHRoZSBjdXJyZW50IG1heGltdW0gYW5kIHRoZSBsYXN0IHRhc2sgdGhhdCB1c2VkIHRoZSBiaXRtYXA6CisJICovCisJdW5zaWduZWQgbG9uZwkJaW9fYml0bWFwX21heDsKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdAkqaW9fYml0bWFwX293bmVyOworCisJLyoKKwkgKiAuLiBhbmQgdGhlbiBhbm90aGVyIDB4MTAwIGJ5dGVzIGZvciB0aGUgZW1lcmdlbmN5IGtlcm5lbCBzdGFjazoKKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGFja1s2NF07CisKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRzc19zdHJ1Y3QsIGluaXRfdHNzKTsKKworLyoKKyAqIFNhdmUgdGhlIG9yaWdpbmFsIGlzdCB2YWx1ZXMgZm9yIGNoZWNraW5nIHN0YWNrIHBvaW50ZXJzIGR1cmluZyBkZWJ1Z2dpbmcKKyAqLworc3RydWN0IG9yaWdfaXN0IHsKKwl1bnNpZ25lZCBsb25nCQlpc3RbN107Cit9OworCisjZGVmaW5lCU1YQ1NSX0RFRkFVTFQJCTB4MWY4MAorCitzdHJ1Y3QgaTM4N19mc2F2ZV9zdHJ1Y3QgeworCXUzMgkJCWN3ZDsJLyogRlBVIENvbnRyb2wgV29yZAkJKi8KKwl1MzIJCQlzd2Q7CS8qIEZQVSBTdGF0dXMgV29yZAkJKi8KKwl1MzIJCQl0d2Q7CS8qIEZQVSBUYWcgV29yZAkJCSovCisJdTMyCQkJZmlwOwkvKiBGUFUgSVAgT2Zmc2V0CQkqLworCXUzMgkJCWZjczsJLyogRlBVIElQIFNlbGVjdG9yCQkqLworCXUzMgkJCWZvbzsJLyogRlBVIE9wZXJhbmQgUG9pbnRlciBPZmZzZXQJKi8KKwl1MzIJCQlmb3M7CS8qIEZQVSBPcGVyYW5kIFBvaW50ZXIgU2VsZWN0b3IJKi8KKworCS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXM6CQkJKi8KKwl1MzIJCQlzdF9zcGFjZVsyMF07CisKKwkvKiBTb2Z0d2FyZSBzdGF0dXMgaW5mb3JtYXRpb24gW25vdCB0b3VjaGVkIGJ5IEZTQVZFIF06CQkqLworCXUzMgkJCXN0YXR1czsKK307CisKK3N0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgeworCXUxNgkJCWN3ZDsgLyogQ29udHJvbCBXb3JkCQkJKi8KKwl1MTYJCQlzd2Q7IC8qIFN0YXR1cyBXb3JkCQkJKi8KKwl1MTYJCQl0d2Q7IC8qIFRhZyBXb3JkCQkJKi8KKwl1MTYJCQlmb3A7IC8qIExhc3QgSW5zdHJ1Y3Rpb24gT3Bjb2RlCQkqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU2NAlyaXA7IC8qIEluc3RydWN0aW9uIFBvaW50ZXIJCSovCisJCQl1NjQJcmRwOyAvKiBEYXRhIFBvaW50ZXIJCQkqLworCQl9OworCQlzdHJ1Y3QgeworCQkJdTMyCWZpcDsgLyogRlBVIElQIE9mZnNldAkJCSovCisJCQl1MzIJZmNzOyAvKiBGUFUgSVAgU2VsZWN0b3IJCQkqLworCQkJdTMyCWZvbzsgLyogRlBVIE9wZXJhbmQgT2Zmc2V0CQkqLworCQkJdTMyCWZvczsgLyogRlBVIE9wZXJhbmQgU2VsZWN0b3IJCSovCisJCX07CisJfTsKKwl1MzIJCQlteGNzcjsJCS8qIE1YQ1NSIFJlZ2lzdGVyIFN0YXRlICovCisJdTMyCQkJbXhjc3JfbWFzazsJLyogTVhDU1IgTWFzawkJKi8KKworCS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gMTI4IGJ5dGVzOgkJCSovCisJdTMyCQkJc3Rfc3BhY2VbMzJdOworCisJLyogMTYqMTYgYnl0ZXMgZm9yIGVhY2ggWE1NLXJlZyA9IDI1NiBieXRlczoJCQkqLworCXUzMgkJCXhtbV9zcGFjZVs2NF07CisKKwl1MzIJCQlwYWRkaW5nWzEyXTsKKworCXVuaW9uIHsKKwkJdTMyCQlwYWRkaW5nMVsxMl07CisJCXUzMgkJc3dfcmVzZXJ2ZWRbMTJdOworCX07CisKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKworc3RydWN0IGkzODdfc29mdF9zdHJ1Y3QgeworCXUzMgkJCWN3ZDsKKwl1MzIJCQlzd2Q7CisJdTMyCQkJdHdkOworCXUzMgkJCWZpcDsKKwl1MzIJCQlmY3M7CisJdTMyCQkJZm9vOworCXUzMgkJCWZvczsKKwkvKiA4KjEwIGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDgwIGJ5dGVzOiAqLworCXUzMgkJCXN0X3NwYWNlWzIwXTsKKwl1OAkJCWZ0b3A7CisJdTgJCQljaGFuZ2VkOworCXU4CQkJbG9va2FoZWFkOworCXU4CQkJbm9fdXBkYXRlOworCXU4CQkJcm07CisJdTgJCQlhbGltaXQ7CisJc3RydWN0IGluZm8JCSppbmZvOworCXUzMgkJCWVudHJ5X2VpcDsKK307CisKK3N0cnVjdCB4c2F2ZV9oZHJfc3RydWN0IHsKKwl1NjQgeHN0YXRlX2J2OworCXU2NCByZXNlcnZlZDFbMl07CisJdTY0IHJlc2VydmVkMls1XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB4c2F2ZV9zdHJ1Y3QgeworCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgaTM4NzsKKwlzdHJ1Y3QgeHNhdmVfaGRyX3N0cnVjdCB4c2F2ZV9oZHI7CisJLyogbmV3IHByb2Nlc3NvciBzdGF0ZSBleHRlbnNpb25zIHdpbGwgZ28gaGVyZSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkICg2NCkpKTsKKwordW5pb24gdGhyZWFkX3hzdGF0ZSB7CisJc3RydWN0IGkzODdfZnNhdmVfc3RydWN0CWZzYXZlOworCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QJZnhzYXZlOworCXN0cnVjdCBpMzg3X3NvZnRfc3RydWN0CQlzb2Z0OworCXN0cnVjdCB4c2F2ZV9zdHJ1Y3QJCXhzYXZlOworfTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgb3JpZ19pc3QsIG9yaWdfaXN0KTsKKyNlbmRpZgorCitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7CitleHRlcm4gdW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfeHN0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOworZXh0ZXJuIHZvaWQgaW5pdF9zY2F0dGVyZWRfY3B1aWRfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaW5pdF9pbnRlbF9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBudW1fY2FjaGVfbGVhdmVzOworCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJLyogQ2FjaGVkIFRMUyBkZXNjcmlwdG9yczogKi8KKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QJdGxzX2FycmF5W0dEVF9FTlRSWV9UTFNfRU5UUklFU107CisJdW5zaWduZWQgbG9uZwkJc3AwOworCXVuc2lnbmVkIGxvbmcJCXNwOworI2lmZGVmIENPTkZJR19YODZfMzIKKwl1bnNpZ25lZCBsb25nCQlzeXNlbnRlcl9jczsKKyNlbHNlCisJdW5zaWduZWQgbG9uZwkJdXNlcnNwOwkvKiBDb3B5IGZyb20gUERBICovCisJdW5zaWduZWQgc2hvcnQJCWVzOworCXVuc2lnbmVkIHNob3J0CQlkczsKKwl1bnNpZ25lZCBzaG9ydAkJZnNpbmRleDsKKwl1bnNpZ25lZCBzaG9ydAkJZ3NpbmRleDsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcJCWlwOworCXVuc2lnbmVkIGxvbmcJCWZzOworCXVuc2lnbmVkIGxvbmcJCWdzOworCS8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnM6ICovCisJdW5zaWduZWQgbG9uZwkJZGVidWdyZWcwOworCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnMTsKKwl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzI7CisJdW5zaWduZWQgbG9uZwkJZGVidWdyZWczOworCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnNjsKKwl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzc7CisJLyogRmF1bHQgaW5mbzogKi8KKwl1bnNpZ25lZCBsb25nCQljcjI7CisJdW5zaWduZWQgbG9uZwkJdHJhcF9ubzsKKwl1bnNpZ25lZCBsb25nCQllcnJvcl9jb2RlOworCS8qIGZsb2F0aW5nIHBvaW50IGFuZCBleHRlbmRlZCBwcm9jZXNzb3Igc3RhdGUgKi8KKwl1bmlvbiB0aHJlYWRfeHN0YXRlCSp4c3RhdGU7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIFZpcnR1YWwgODYgbW9kZSBpbmZvICovCisJc3RydWN0IHZtODZfc3RydWN0IF9fdXNlciAqdm04Nl9pbmZvOworCXVuc2lnbmVkIGxvbmcJCXNjcmVlbl9iaXRtYXA7CisJdW5zaWduZWQgbG9uZwkJdjg2ZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJdjg2bWFzazsKKwl1bnNpZ25lZCBsb25nCQlzYXZlZF9zcDA7CisJdW5zaWduZWQgaW50CQlzYXZlZF9mczsKKwl1bnNpZ25lZCBpbnQJCXNhdmVkX2dzOworI2VuZGlmCisJLyogSU8gcGVybWlzc2lvbnM6ICovCisJdW5zaWduZWQgbG9uZwkJKmlvX2JpdG1hcF9wdHI7CisJdW5zaWduZWQgbG9uZwkJaW9wbDsKKwkvKiBNYXggYWxsb3dlZCBwb3J0IGluIHRoZSBiaXRtYXAsIGluIGJ5dGVzOiAqLworCXVuc2lnbmVkCQlpb19iaXRtYXBfbWF4OworLyogTVNSX0lBMzJfREVCVUdDVExNU1IgdmFsdWUgdG8gc3dpdGNoIGluIGlmIFRJRl9ERUJVR0NUTE1TUiBpcyBzZXQuICAqLworCXVuc2lnbmVkIGxvbmcJZGVidWdjdGxtc3I7CisjaWZkZWYgQ09ORklHX1g4Nl9EUworLyogRGVidWcgU3RvcmUgY29udGV4dDsgc2VlIGluY2x1ZGUvYXNtLXg4Ni9kcy5oOyBnb2VzIGludG8gTVNSX0lBMzJfRFNfQVJFQSAqLworCXN0cnVjdCBkc19jb250ZXh0CSpkc19jdHg7CisjZW5kaWYgLyogQ09ORklHX1g4Nl9EUyAqLworI2lmZGVmIENPTkZJR19YODZfUFRSQUNFX0JUUworLyogdGhlIHNpZ25hbCB0byBzZW5kIG9uIGEgYnRzIGJ1ZmZlciBvdmVyZmxvdyAqLworCXVuc2lnbmVkIGludAlidHNfb3ZmbF9zaWduYWw7CisjZW5kaWYgLyogQ09ORklHX1g4Nl9QVFJBQ0VfQlRTICovCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2dldF9kZWJ1Z3JlZyhpbnQgcmVnbm8pCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAwOwkvKiBEYW1uIHlvdSwgZ2NjISAqLworCisJc3dpdGNoIChyZWdubykgeworCWNhc2UgMDoKKwkJYXNtKCJtb3YgJSVkYjAsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXNtKCJtb3YgJSVkYjEsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXNtKCJtb3YgJSVkYjIsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXNtKCJtb3YgJSVkYjMsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJYXNtKCJtb3YgJSVkYjYsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJYXNtKCJtb3YgJSVkYjcsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9kZWJ1Z3JlZyhpbnQgcmVnbm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJc3dpdGNoIChyZWdubykgeworCWNhc2UgMDoKKwkJYXNtKCJtb3YgJTAsICUlZGIwIgk6OiJyIiAodmFsdWUpKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhc20oIm1vdiAlMCwgJSVkYjEiCTo6InIiICh2YWx1ZSkpOworCQlicmVhazsKKwljYXNlIDI6CisJCWFzbSgibW92ICUwLCAlJWRiMiIJOjoiciIgKHZhbHVlKSk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXNtKCJtb3YgJTAsICUlZGIzIgk6OiJyIiAodmFsdWUpKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlhc20oIm1vdiAlMCwgJSVkYjYiCTo6InIiICh2YWx1ZSkpOworCQlicmVhazsKKwljYXNlIDc6CisJCWFzbSgibW92ICUwLCAlJWRiNyIJOjoiciIgKHZhbHVlKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworLyoKKyAqIFNldCBJT1BMIGJpdHMgaW4gRUZMQUdTIGZyb20gZ2l2ZW4gbWFzaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9pb3BsX21hc2sodW5zaWduZWQgbWFzaykKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJdW5zaWduZWQgaW50IHJlZzsKKworCWFzbSB2b2xhdGlsZSAoInB1c2hmbDsiCisJCSAgICAgICJwb3BsICUwOyIKKwkJICAgICAgImFuZGwgJTEsICUwOyIKKwkJICAgICAgIm9ybCAlMiwgJTA7IgorCQkgICAgICAicHVzaGwgJTA7IgorCQkgICAgICAicG9wZmwiCisJCSAgICAgIDogIj0mciIgKHJlZykKKwkJICAgICAgOiAiaSIgKH5YODZfRUZMQUdTX0lPUEwpLCAiciIgKG1hc2spKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25hdGl2ZV9sb2FkX3NwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLCBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQoreworCXRzcy0+eDg2X3Rzcy5zcDAgPSB0aHJlYWQtPnNwMDsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyogT25seSBoYXBwZW5zIHdoZW4gU0VQIGlzIGVuYWJsZWQsIG5vIG5lZWQgdG8gdGVzdCAiU0VQImFyYXRlbHk6ICovCisJaWYgKHVubGlrZWx5KHRzcy0+eDg2X3Rzcy5zczEgIT0gdGhyZWFkLT5zeXNlbnRlcl9jcykpIHsKKwkJdHNzLT54ODZfdHNzLnNzMSA9IHRocmVhZC0+c3lzZW50ZXJfY3M7CisJCXdybXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NTLCB0aHJlYWQtPnN5c2VudGVyX2NzLCAwKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zd2FwZ3Modm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJYXNtIHZvbGF0aWxlKCJzd2FwZ3MiIDo6OiAibWVtb3J5Iik7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKyNkZWZpbmUgX19jcHVpZAkJCW5hdGl2ZV9jcHVpZAorI2RlZmluZSBwYXJhdmlydF9lbmFibGVkKCkJMAorCisvKgorICogVGhlc2Ugc3BlY2lhbCBtYWNyb3MgY2FuIGJlIHVzZWQgdG8gZ2V0IG9yIHNldCBhIGRlYnVnZ2luZyByZWdpc3RlcgorICovCisjZGVmaW5lIGdldF9kZWJ1Z3JlZyh2YXIsIHJlZ2lzdGVyKQkJCQlcCisJKHZhcikgPSBuYXRpdmVfZ2V0X2RlYnVncmVnKHJlZ2lzdGVyKQorI2RlZmluZSBzZXRfZGVidWdyZWcodmFsdWUsIHJlZ2lzdGVyKQkJCQlcCisJbmF0aXZlX3NldF9kZWJ1Z3JlZyhyZWdpc3RlciwgdmFsdWUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX3NwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLAorCQkJICAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCit7CisJbmF0aXZlX2xvYWRfc3AwKHRzcywgdGhyZWFkKTsKK30KKworI2RlZmluZSBzZXRfaW9wbF9tYXNrIG5hdGl2ZV9zZXRfaW9wbF9tYXNrCisjZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCisKKy8qCisgKiBTYXZlIHRoZSBjcjQgZmVhdHVyZSBzZXQgd2UncmUgdXNpbmcgKGllCisgKiBQZW50aXVtIDRNQiBlbmFibGUgYW5kIFBQcm8gR2xvYmFsIHBhZ2UKKyAqIGVuYWJsZSksIHNvIHRoYXQgYW55IENQVSdzIHRoYXQgYm9vdCB1cAorICogYWZ0ZXIgdXMgY2FuIGdldCB0aGUgY29ycmVjdCBmbGFncy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCW1tdV9jcjRfZmVhdHVyZXM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5fY3I0KHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwl1bnNpZ25lZCBjcjQ7CisKKwltbXVfY3I0X2ZlYXR1cmVzIHw9IG1hc2s7CisJY3I0ID0gcmVhZF9jcjQoKTsKKwljcjQgfD0gbWFzazsKKwl3cml0ZV9jcjQoY3I0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2luX2NyNCh1bnNpZ25lZCBsb25nIG1hc2spCit7CisJdW5zaWduZWQgY3I0OworCisJbW11X2NyNF9mZWF0dXJlcyAmPSB+bWFzazsKKwljcjQgPSByZWFkX2NyNCgpOworCWNyNCAmPSB+bWFzazsKKwl3cml0ZV9jcjQoY3I0KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJCXNlZzsKK30gbW1fc2VnbWVudF90OworCisKKy8qCisgKiBjcmVhdGUgYSBrZXJuZWwgdGhyZWFkIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0YXNrbGlzdHMKKyAqLworZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KK2V4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0ZSAqLworZXh0ZXJuIHZvaWQgcHJlcGFyZV90b19jb3B5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworLyoKKyAqIEdlbmVyaWMgQ1BVSUQgZnVuY3Rpb24KKyAqIGNsZWFyICVlY3ggc2luY2Ugc29tZSBjcHVzIChDeXJpeCBNSUkpIGRvIG5vdCBzZXQgb3IgY2xlYXIgJWVjeAorICogcmVzdWx0aW5nIGluIHN0YWxlIHJlZ2lzdGVyIGNvbnRlbnRzIGJlaW5nIHJldHVybmVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWQodW5zaWduZWQgaW50IG9wLAorCQkJIHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKKwkJCSB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpCit7CisJKmVheCA9IG9wOworCSplY3ggPSAwOworCV9fY3B1aWQoZWF4LCBlYngsIGVjeCwgZWR4KTsKK30KKworLyogU29tZSBDUFVJRCBjYWxscyB3YW50ICdjb3VudCcgdG8gYmUgcGxhY2VkIGluIGVjeCAqLworc3RhdGljIGlubGluZSB2b2lkIGNwdWlkX2NvdW50KHVuc2lnbmVkIGludCBvcCwgaW50IGNvdW50LAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpCit7CisJKmVheCA9IG9wOworCSplY3ggPSBjb3VudDsKKwlfX2NwdWlkKGVheCwgZWJ4LCBlY3gsIGVkeCk7Cit9CisKKy8qCisgKiBDUFVJRCBmdW5jdGlvbnMgcmV0dXJuaW5nIGEgc2luZ2xlIGRhdHVtCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VheCh1bnNpZ25lZCBpbnQgb3ApCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKKworCWNwdWlkKG9wLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCXJldHVybiBlYXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VieCh1bnNpZ25lZCBpbnQgb3ApCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKKworCWNwdWlkKG9wLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCXJldHVybiBlYng7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBpbnQgb3ApCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKKworCWNwdWlkKG9wLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCXJldHVybiBlY3g7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VkeCh1bnNpZ25lZCBpbnQgb3ApCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKKworCWNwdWlkKG9wLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCXJldHVybiBlZHg7Cit9CisKKy8qIFJFUCBOT1AgKFBBVVNFKSBpcyBhIGdvb2QgdGhpbmcgdG8gaW5zZXJ0IGludG8gYnVzeS13YWl0IGxvb3BzLiAqLworc3RhdGljIGlubGluZSB2b2lkIHJlcF9ub3Aodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUoInJlcDsgbm9wIiA6OjogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpCit7CisJcmVwX25vcCgpOworfQorCisvKiBTdG9wIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbjogKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX2NvcmUodm9pZCkKK3sKKwlpbnQgdG1wOworCisJYXNtIHZvbGF0aWxlKCJjcHVpZCIgOiAiPWEiICh0bXApIDogIjAiICgxKQorCQkgICAgIDogImVieCIsICJlY3giLCAiZWR4IiwgIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19tb25pdG9yKGNvbnN0IHZvaWQgKmVheCwgdW5zaWduZWQgbG9uZyBlY3gsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZWR4KQoreworCS8qICJtb25pdG9yICVlYXgsICVlY3gsICVlZHg7IiAqLworCWFzbSB2b2xhdGlsZSgiLmJ5dGUgMHgwZiwgMHgwMSwgMHhjODsiCisJCSAgICAgOjogImEiIChlYXgpLCAiYyIgKGVjeCksICJkIihlZHgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbXdhaXQodW5zaWduZWQgbG9uZyBlYXgsIHVuc2lnbmVkIGxvbmcgZWN4KQoreworCS8qICJtd2FpdCAlZWF4LCAlZWN4OyIgKi8KKwlhc20gdm9sYXRpbGUoIi5ieXRlIDB4MGYsIDB4MDEsIDB4Yzk7IgorCQkgICAgIDo6ICJhIiAoZWF4KSwgImMiIChlY3gpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc3RpX213YWl0KHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCkKK3sKKwl0cmFjZV9oYXJkaXJxc19vbigpOworCS8qICJtd2FpdCAlZWF4LCAlZWN4OyIgKi8KKwlhc20gdm9sYXRpbGUoInN0aTsgLmJ5dGUgMHgwZiwgMHgwMSwgMHhjOTsiCisJCSAgICAgOjogImEiIChlYXgpLCAiYyIgKGVjeCkpOworfQorCitleHRlcm4gdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBlYXgsIHVuc2lnbmVkIGxvbmcgZWN4KTsKKworZXh0ZXJuIHZvaWQgc2VsZWN0X2lkbGVfcm91dGluZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworCitleHRlcm4gdW5zaWduZWQgbG9uZwkJYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nCQlpZGxlX2hhbHQ7CitleHRlcm4gdW5zaWduZWQgbG9uZwkJaWRsZV9ub213YWl0OworCisvKgorICogb24gc3lzdGVtcyB3aXRoIGNhY2hlcywgY2FjaGVzIG11c3QgYmUgZmxhc2hlZCBhcyB0aGUgYWJzb2x1dGUKKyAqIGxhc3QgaW5zdHJ1Y3Rpb24gYmVmb3JlIGdvaW5nIGludG8gYSBzdXNwZW5kZWQgaGFsdC4gIE90aGVyd2lzZSwKKyAqIGRpcnR5IGRhdGEgY2FuIGxpbmdlciBpbiB0aGUgY2FjaGUgYW5kIGJlY29tZSBzdGFsZSBvbiByZXN1bWUsCisgKiBsZWFkaW5nIHRvIHN0cmFuZ2UgZXJyb3JzLgorICoKKyAqIHBlcmZvcm0gYSB2YXJpZXR5IG9mIG9wZXJhdGlvbnMgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGNvbXBpbGVyCisgKiB3aWxsIG5vdCByZW9yZGVyIGluc3RydWN0aW9ucy4gIHdiaW52ZCBpdHNlbGYgaXMgc2VyaWFsaXppbmcKKyAqIHNvIHRoZSBwcm9jZXNzb3Igd2lsbCBub3QgcmVvcmRlci4KKyAqCisgKiBTeXN0ZW1zIHdpdGhvdXQgY2FjaGUgY2FuIGp1c3QgZ28gaW50byBoYWx0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2JpbnZkX2hhbHQodm9pZCkKK3sKKwltYigpOworCS8qIGNoZWNrIGZvciBjbGZsdXNoIHRvIGRldGVybWluZSBpZiB3YmludmQgaXMgbGVnYWwgKi8KKwlpZiAoY3B1X2hhc19jbGZsdXNoKQorCQlhc20gdm9sYXRpbGUoImNsaTsgd2JpbnZkOyAxOiBobHQ7IGptcCAxYiIgOiA6IDogIm1lbW9yeSIpOworCWVsc2UKKwkJd2hpbGUgKDEpCisJCQloYWx0KCk7Cit9CisKK2V4dGVybiB2b2lkIGVuYWJsZV9zZXBfY3B1KHZvaWQpOworZXh0ZXJuIGludCBzeXNlbnRlcl9zZXR1cCh2b2lkKTsKKworLyogRGVmaW5lZCBpbiBoZWFkLlMgKi8KK2V4dGVybiBzdHJ1Y3QgZGVzY19wdHIJCWVhcmx5X2dkdF9kZXNjcjsKKworZXh0ZXJuIHZvaWQgY3B1X3NldF9nZHQoaW50KTsKK2V4dGVybiB2b2lkIHN3aXRjaF90b19uZXdfZ2R0KHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2dkdChpbnQgY3B1KTsKKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9kZWJ1Z2N0bG1zcih1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyKQoreworI2lmbmRlZiBDT05GSUdfWDg2X0RFQlVHQ1RMTVNSCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgNikKKwkJcmV0dXJuOworI2VuZGlmCisJd3Jtc3JsKE1TUl9JQTMyX0RFQlVHQ1RMTVNSLCBkZWJ1Z2N0bG1zcik7Cit9CisKKy8qCisgKiBmcm9tIHN5c3RlbSBkZXNjcmlwdGlvbiB0YWJsZSBpbiBCSU9TLiBNb3N0bHkgZm9yIE1DQSB1c2UsIGJ1dAorICogb3RoZXJzIG1heSBmaW5kIGl0IHVzZWZ1bDoKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludAkJbWFjaGluZV9pZDsKK2V4dGVybiB1bnNpZ25lZCBpbnQJCW1hY2hpbmVfc3VibW9kZWxfaWQ7CitleHRlcm4gdW5zaWduZWQgaW50CQlCSU9TX3JldmlzaW9uOworCisvKiBCb290IGxvYWRlciB0eXBlIGZyb20gdGhlIHNldHVwIGhlYWRlcjogKi8KK2V4dGVybiBpbnQJCQlib290bG9hZGVyX3R5cGU7CisKK2V4dGVybiBjaGFyCQkJaWdub3JlX2ZwdV9pcnE7CisKKyNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQgMQorI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFcKKyNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0gKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgZGVmaW5lIEJBU0VfUFJFRkVUQ0gJCUFTTV9OT1A0CisjIGRlZmluZSBBUkNIX0hBU19QUkVGRVRDSAorI2Vsc2UKKyMgZGVmaW5lIEJBU0VfUFJFRkVUQ0gJCSJwcmVmZXRjaHQwICglMSkiCisjZW5kaWYKKworLyoKKyAqIFByZWZldGNoIGluc3RydWN0aW9ucyBmb3IgUGVudGl1bSBJSUkgKCspIGFuZCBBTUQgQXRobG9uICgrKQorICoKKyAqIEl0J3Mgbm90IHdvcnRoIHRvIGNhcmUgYWJvdXQgM2Rub3cgcHJlZmV0Y2hlcyBmb3IgdGhlIEs2CisgKiBiZWNhdXNlIHRoZXkgYXJlIG1pY3JvY29kZWQgdGhlcmUgYW5kIHZlcnkgc2xvdy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpCit7CisJYWx0ZXJuYXRpdmVfaW5wdXQoQkFTRV9QUkVGRVRDSCwKKwkJCSAgInByZWZldGNobnRhICglMSkiLAorCQkJICBYODZfRkVBVFVSRV9YTU0sCisJCQkgICJyIiAoeCkpOworfQorCisvKgorICogM2Rub3cgcHJlZmV0Y2ggdG8gZ2V0IGFuIGV4Y2x1c2l2ZSBjYWNoZSBsaW5lLgorICogVXNlZnVsIGZvciBzcGlubG9ja3MgdG8gYXZvaWQgb25lIHN0YXRlIHRyYW5zaXRpb24gaW4gdGhlCisgKiBjYWNoZSBjb2hlcmVuY3kgcHJvdG9jb2w6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeCkKK3sKKwlhbHRlcm5hdGl2ZV9pbnB1dChCQVNFX1BSRUZFVENILAorCQkJICAicHJlZmV0Y2h3ICglMSkiLAorCQkJICBYODZfRkVBVFVSRV8zRE5PVywKKwkJCSAgInIiICh4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGluX2xvY2tfcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkKK3sKKwlwcmVmZXRjaHcoeCk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemU6IDNHQiAoZGVmYXVsdCkuCisgKi8KKyNkZWZpbmUgVEFTS19TSVpFCQlQQUdFX09GRlNFVAorI2RlZmluZSBTVEFDS19UT1AJCVRBU0tfU0laRQorI2RlZmluZSBTVEFDS19UT1BfTUFYCQlTVEFDS19UT1AKKworI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCQkJCQkgIFwKKwkuc3AwCQkJPSBzaXplb2YoaW5pdF9zdGFjaykgKyAobG9uZykmaW5pdF9zdGFjaywgXAorCS52bTg2X2luZm8JCT0gTlVMTCwJCQkJCSAgXAorCS5zeXNlbnRlcl9jcwkJPSBfX0tFUk5FTF9DUywJCQkJICBcCisJLmlvX2JpdG1hcF9wdHIJCT0gTlVMTCwJCQkJCSAgXAorCS5mcwkJCT0gX19LRVJORUxfUEVSQ1BVLAkJCSAgXAorfQorCisvKgorICogTm90ZSB0aGF0IHRoZSAuaW9fYml0bWFwIG1lbWJlciBtdXN0IGJlIGV4dHJhLWJpZy4gVGhpcyBpcyBiZWNhdXNlCisgKiB0aGUgQ1BVIHdpbGwgYWNjZXNzIGFuIGFkZGl0aW9uYWwgYnl0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgSU8KKyAqIHBlcm1pc3Npb24gYml0bWFwLiBUaGUgZXh0cmEgYnl0ZSBtdXN0IGJlIGFsbCAxIGJpdHMsIGFuZCBtdXN0CisgKiBiZSB3aXRoaW4gdGhlIGxpbWl0LgorICovCisjZGVmaW5lIElOSVRfVFNTICB7CQkJCQkJCSAgXAorCS54ODZfdHNzID0gewkJCQkJCQkgIFwKKwkJLnNwMAkJPSBzaXplb2YoaW5pdF9zdGFjaykgKyAobG9uZykmaW5pdF9zdGFjaywgXAorCQkuc3MwCQk9IF9fS0VSTkVMX0RTLAkJCQkgIFwKKwkJLnNzMQkJPSBfX0tFUk5FTF9DUywJCQkJICBcCisJCS5pb19iaXRtYXBfYmFzZQk9IElOVkFMSURfSU9fQklUTUFQX09GRlNFVCwJCSAgXAorCSB9LAkJCQkJCQkJICBcCisJLmlvX2JpdG1hcAkJPSB7IFswIC4uLiBJT19CSVRNQVBfTE9OR1NdID0gfjAgfSwJICBcCit9CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKyNkZWZpbmUgVEhSRUFEX1NJWkVfTE9OR1MgICAgICAoVEhSRUFEX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorI2RlZmluZSBLU1RLX1RPUChpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1bnNpZ25lZCBsb25nICpfX3B0ciA9ICh1bnNpZ25lZCBsb25nICopKGluZm8pOyAgICAgICAgICAgICAgICAgXAorICAgICAgICh1bnNpZ25lZCBsb25nKSgmX19wdHJbVEhSRUFEX1NJWkVfTE9OR1NdKTsgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisvKgorICogVGhlIGJlbG93IC04IGlzIHRvIHJlc2VydmUgOCBieXRlcyBvbiB0b3Agb2YgdGhlIHJpbmcwIHN0YWNrLgorICogVGhpcyBpcyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGVudGlyZSAic3RydWN0IHB0X3JlZ3MiCisgKiBpcyBhY2Nlc3NhYmxlIGV2ZW4gaWYgdGhlIENQVSBoYXZlbid0IHN0b3JlZCB0aGUgU1MvRVNQIHJlZ2lzdGVycworICogb24gdGhlIHN0YWNrIChpbnRlcnJ1cHQgZ2F0ZSBkb2VzIG5vdCBzYXZlIHRoZXNlIHJlZ2lzdGVycworICogd2hlbiBzd2l0Y2hpbmcgdG8gdGhlIHNhbWUgcHJpdiByaW5nKS4KKyAqIFRoZXJlZm9yZSBiZXdhcmU6IGFjY2Vzc2luZyB0aGUgc3MvZXNwIGZpZWxkcyBvZiB0aGUKKyAqICJzdHJ1Y3QgcHRfcmVncyIgaXMgcG9zc2libGUsIGJ1dCB0aGV5IG1heSBjb250YWluIHRoZQorICogY29tcGxldGVseSB3cm9uZyB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgc3RydWN0IHB0X3JlZ3MgKl9fcmVnc19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX3JlZ3NfXyA9IChzdHJ1Y3QgcHRfcmVncyAqKShLU1RLX1RPUCh0YXNrX3N0YWNrX3BhZ2UodGFzaykpLTgpOyBcCisgICAgICAgX19yZWdzX18gLSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgS1NUS19FU1AodGFzaykJCSh0YXNrX3B0X3JlZ3ModGFzayktPnNwKQorCisjZWxzZQorLyoKKyAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplLiA0N2JpdHMgbWludXMgb25lIGd1YXJkIHBhZ2UuCisgKi8KKyNkZWZpbmUgVEFTS19TSVpFNjQJKCgxVUwgPDwgNDcpIC0gUEFHRV9TSVpFKQorCisvKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCisgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgorICovCisjZGVmaW5lIElBMzJfUEFHRV9PRkZTRVQJKChjdXJyZW50LT5wZXJzb25hbGl0eSAmIEFERFJfTElNSVRfM0dCKSA/IFwKKwkJCQkJMHhjMDAwMDAwMCA6IDB4RkZGRmUwMDApCisKKyNkZWZpbmUgVEFTS19TSVpFCQkodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgPyBcCisJCQkJCUlBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkU2NCkKKyNkZWZpbmUgVEFTS19TSVpFX09GKGNoaWxkKQkoKHRlc3RfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfSUEzMikpID8gXAorCQkJCQlJQTMyX1BBR0VfT0ZGU0VUIDogVEFTS19TSVpFNjQpCisKKyNkZWZpbmUgU1RBQ0tfVE9QCQlUQVNLX1NJWkUKKyNkZWZpbmUgU1RBQ0tfVE9QX01BWAkJVEFTS19TSVpFNjQKKworI2RlZmluZSBJTklUX1RIUkVBRCAgeyBcCisJLnNwMCA9ICh1bnNpZ25lZCBsb25nKSZpbml0X3N0YWNrICsgc2l6ZW9mKGluaXRfc3RhY2spIFwKK30KKworI2RlZmluZSBJTklUX1RTUyAgeyBcCisJLng4Nl90c3Muc3AwID0gKHVuc2lnbmVkIGxvbmcpJmluaXRfc3RhY2sgKyBzaXplb2YoaW5pdF9zdGFjaykgXAorfQorCisvKgorICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuCisgKiBXaGF0IGlzIHRoaXMgZ29vZCBmb3I/IGl0IHdpbGwgYmUgYWx3YXlzIHRoZSBzY2hlZHVsZXIgb3IgcmV0X2Zyb21fZm9yay4KKyAqLworI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModCkJKCoodW5zaWduZWQgbG9uZyAqKSgodCktPnRocmVhZC5zcCAtIDgpKQorCisjZGVmaW5lIHRhc2tfcHRfcmVncyh0c2spCSgoc3RydWN0IHB0X3JlZ3MgKikodHNrKS0+dGhyZWFkLnNwMCAtIDEpCisjZGVmaW5lIEtTVEtfRVNQKHRzaykJCS0xIC8qIHNvcnJ5LiBkb2Vzbid0IHdvcmsgZm9yIHN5c2NhbGwuICovCisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCitleHRlcm4gdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X2lwLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBuZXdfc3ApOworCisvKgorICogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKFBBR0VfQUxJR04oVEFTS19TSVpFIC8gMykpCisKKyNkZWZpbmUgS1NUS19FSVAodGFzaykJCSh0YXNrX3B0X3JlZ3ModGFzayktPmlwKQorCisvKiBHZXQvc2V0IGEgcHJvY2VzcycgYWJpbGl0eSB0byB1c2UgdGhlIHRpbWVzdGFtcCBjb3VudGVyIGluc3RydWN0aW9uICovCisjZGVmaW5lIEdFVF9UU0NfQ1RMKGFkcikJZ2V0X3RzY19tb2RlKChhZHIpKQorI2RlZmluZSBTRVRfVFNDX0NUTCh2YWwpCXNldF90c2NfbW9kZSgodmFsKSkKKworZXh0ZXJuIGludCBnZXRfdHNjX21vZGUodW5zaWduZWQgbG9uZyBhZHIpOworZXh0ZXJuIGludCBzZXRfdHNjX21vZGUodW5zaWduZWQgaW50IHZhbCk7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvdG8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhMjJmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QUk9UT19ICisjZGVmaW5lIF9BU01fWDg2X1BST1RPX0gKKworI2luY2x1ZGUgPGFzbS9sZHQuaD4KKworLyogbWlzYyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcHJvdG90eXBlcyAqLworCitleHRlcm4gdm9pZCBlYXJseV9pZHRfaGFuZGxlcih2b2lkKTsKKworZXh0ZXJuIHZvaWQgc3lzdGVtX2NhbGwodm9pZCk7CitleHRlcm4gdm9pZCBzeXNjYWxsX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGlhMzJfc3lzY2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGlhMzJfY3N0YXJfdGFyZ2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgaWEzMl9zeXNlbnRlcl90YXJnZXQodm9pZCk7CisKK2V4dGVybiB2b2lkIHN5c2NhbGwzMl9jcHVfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfZWZlcih2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfQklPU19SRUJPT1QKK2V4dGVybiBpbnQgcmVib290X2ZvcmNlOworI2Vsc2UKK3N0YXRpYyBjb25zdCBpbnQgcmVib290X2ZvcmNlID0gMDsKKyNlbmRpZgorCitsb25nIGRvX2FyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKworI2RlZmluZSByb3VuZF91cCh4LCB5KSAoKCh4KSArICh5KSAtIDEpICYgfigoeSkgLSAxKSkKKyNkZWZpbmUgcm91bmRfZG93bih4LCB5KSAoKHgpICYgfigoeSkgLSAxKSkKKworI2VuZGlmIC8qIF9BU01fWDg2X1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS1hYmkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS1hYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWYxYmI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLWFiaS5oCkBAIC0wLDAgKzEsMTQ1IEBACisjaWZuZGVmIF9BU01fWDg2X1BUUkFDRV9BQklfSAorI2RlZmluZSBfQVNNX1g4Nl9QVFJBQ0VfQUJJX0gKKworI2lmZGVmIF9faTM4Nl9fCisKKyNkZWZpbmUgRUJYIDAKKyNkZWZpbmUgRUNYIDEKKyNkZWZpbmUgRURYIDIKKyNkZWZpbmUgRVNJIDMKKyNkZWZpbmUgRURJIDQKKyNkZWZpbmUgRUJQIDUKKyNkZWZpbmUgRUFYIDYKKyNkZWZpbmUgRFMgNworI2RlZmluZSBFUyA4CisjZGVmaW5lIEZTIDkKKyNkZWZpbmUgR1MgMTAKKyNkZWZpbmUgT1JJR19FQVggMTEKKyNkZWZpbmUgRUlQIDEyCisjZGVmaW5lIENTICAxMworI2RlZmluZSBFRkwgMTQKKyNkZWZpbmUgVUVTUCAxNQorI2RlZmluZSBTUyAgIDE2CisjZGVmaW5lIEZSQU1FX1NJWkUgMTcKKworI2Vsc2UgLyogX19pMzg2X18gKi8KKworI2lmIGRlZmluZWQoX19BU1NFTUJMWV9fKSB8fCBkZWZpbmVkKF9fRlJBTUVfT0ZGU0VUUykKKyNkZWZpbmUgUjE1IDAKKyNkZWZpbmUgUjE0IDgKKyNkZWZpbmUgUjEzIDE2CisjZGVmaW5lIFIxMiAyNAorI2RlZmluZSBSQlAgMzIKKyNkZWZpbmUgUkJYIDQwCisvKiBhcmd1bWVudHM6IGludGVycnVwdHMvbm9uIHRyYWNpbmcgc3lzY2FsbHMgb25seSBzYXZlIHVwdG8gaGVyZSovCisjZGVmaW5lIFIxMSA0OAorI2RlZmluZSBSMTAgNTYKKyNkZWZpbmUgUjkgNjQKKyNkZWZpbmUgUjggNzIKKyNkZWZpbmUgUkFYIDgwCisjZGVmaW5lIFJDWCA4OAorI2RlZmluZSBSRFggOTYKKyNkZWZpbmUgUlNJIDEwNAorI2RlZmluZSBSREkgMTEyCisjZGVmaW5lIE9SSUdfUkFYIDEyMCAgICAgICAvKiA9IEVSUk9SICovCisvKiBlbmQgb2YgYXJndW1lbnRzICovCisvKiBjcHUgZXhjZXB0aW9uIGZyYW1lIG9yIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhc3Qgc3lzY2FsbC4gKi8KKyNkZWZpbmUgUklQIDEyOAorI2RlZmluZSBDUyAxMzYKKyNkZWZpbmUgRUZMQUdTIDE0NAorI2RlZmluZSBSU1AgMTUyCisjZGVmaW5lIFNTIDE2MAorI2RlZmluZSBBUkdPRkZTRVQgUjExCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIHRvcCBvZiBzdGFjayBwYWdlICovCisjZGVmaW5lIEZSQU1FX1NJWkUgMTY4CisKKyNlbmRpZiAvKiAhX19pMzg2X18gKi8KKworLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTICAgICAgICAgICAgMTIKKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgICAgICAgICAgICAxMworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKKyNkZWZpbmUgUFRSQUNFX0dFVEZQWFJFR1MgICAgICAgICAxOAorI2RlZmluZSBQVFJBQ0VfU0VURlBYUkVHUyAgICAgICAgIDE5CisKKyNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgICAgICAyMQorCisvKiBvbmx5IHVzZWZ1bCBmb3IgYWNjZXNzIDMyYml0IHByb2dyYW1zIC8ga2VybmVscyAqLworI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBICAgIDI1CisjZGVmaW5lIFBUUkFDRV9TRVRfVEhSRUFEX0FSRUEgICAgMjYKKworI2lmZGVmIF9feDg2XzY0X18KKyMgZGVmaW5lIFBUUkFDRV9BUkNIX1BSQ1RMCSAgMzAKKyNlbmRpZgorCisjZGVmaW5lIFBUUkFDRV9TWVNFTVUJCSAgMzEKKyNkZWZpbmUgUFRSQUNFX1NZU0VNVV9TSU5HTEVTVEVQICAzMgorCisjZGVmaW5lIFBUUkFDRV9TSU5HTEVCTE9DSwkzMwkvKiByZXN1bWUgZXhlY3V0aW9uIHVudGlsIG5leHQgYnJhbmNoICovCisKKyNpZmRlZiBDT05GSUdfWDg2X1BUUkFDRV9CVFMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyogY29uZmlndXJhdGlvbi9zdGF0dXMgc3RydWN0dXJlIHVzZWQgaW4gUFRSQUNFX0JUU19DT05GSUcgYW5kCisgICBQVFJBQ0VfQlRTX1NUQVRVUyBjb21tYW5kcy4KKyovCitzdHJ1Y3QgcHRyYWNlX2J0c19jb25maWcgeworCS8qIHJlcXVlc3RlZCBvciBhY3R1YWwgc2l6ZSBvZiBCVFMgYnVmZmVyIGluIGJ5dGVzICovCisJX191MzIgc2l6ZTsKKwkvKiBiaXRtYXNrIG9mIGJlbG93IGZsYWdzICovCisJX191MzIgZmxhZ3M7CisJLyogYnVmZmVyIG92ZXJmbG93IHNpZ25hbCAqLworCV9fdTMyIHNpZ25hbDsKKwkvKiBhY3R1YWwgc2l6ZSBvZiBidHNfc3RydWN0IGluIGJ5dGVzICovCisJX191MzIgYnRzX3NpemU7Cit9OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFBUUkFDRV9CVFNfT19UUkFDRQkweDEgLyogYnJhbmNoIHRyYWNlICovCisjZGVmaW5lIFBUUkFDRV9CVFNfT19TQ0hFRAkweDIgLyogc2NoZWR1bGluZyBldmVudHMgdy8gamlmZmllcyAqLworI2RlZmluZSBQVFJBQ0VfQlRTX09fU0lHTkFMICAgICAweDQgLyogc2VuZCBTSUc8c2lnbmFsPiBvbiBidWZmZXIgb3ZlcmZsb3cKKwkJCQkgICAgICAgaW5zdGVhZCBvZiB3cmFwcGluZyBhcm91bmQgKi8KKyNkZWZpbmUgUFRSQUNFX0JUU19PX0FMTE9DCTB4OCAvKiAocmUpYWxsb2NhdGUgYnVmZmVyICovCisKKyNkZWZpbmUgUFRSQUNFX0JUU19DT05GSUcJNDAKKy8qIENvbmZpZ3VyZSBicmFuY2ggdHJhY2UgcmVjb3JkaW5nLgorICAgQUREUiBwb2ludHMgdG8gYSBzdHJ1Y3QgcHRyYWNlX2J0c19jb25maWcuCisgICBEQVRBIGdpdmVzIHRoZSBzaXplIG9mIHRoYXQgYnVmZmVyLgorICAgQSBuZXcgYnVmZmVyIGlzIGFsbG9jYXRlZCwgaWYgcmVxdWVzdGVkIGluIHRoZSBmbGFncy4KKyAgIEFuIG92ZXJmbG93IHNpZ25hbCBtYXkgb25seSBiZSByZXF1ZXN0ZWQgZm9yIG5ldyBidWZmZXJzLgorICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisqLworI2RlZmluZSBQVFJBQ0VfQlRTX1NUQVRVUwk0MQorLyogUmV0dXJuIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gYSBzdHJ1Y3QgcHRyYWNlX2J0c19jb25maWcKKyAgIHBvaW50ZWQgdG8gYnkgQUREUjsgREFUQSBnaXZlcyB0aGUgc2l6ZSBvZiB0aGF0IGJ1ZmZlci4KKyAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorKi8KKyNkZWZpbmUgUFRSQUNFX0JUU19TSVpFCQk0MgorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIEJUUyByZWNvcmRzIGZvciBkcmFpbmluZy4KKyAgIERBVEEgYW5kIEFERFIgYXJlIGlnbm9yZWQuCisqLworI2RlZmluZSBQVFJBQ0VfQlRTX0dFVAkJNDMKKy8qIEdldCBhIHNpbmdsZSBCVFMgcmVjb3JkLgorICAgREFUQSBkZWZpbmVzIHRoZSBpbmRleCBpbnRvIHRoZSBCVFMgYXJyYXksIHdoZXJlIDAgaXMgdGhlIG5ld2VzdAorICAgZW50cnksIGFuZCBoaWdoZXIgaW5kaWNlcyByZWZlciB0byBvbGRlciBlbnRyaWVzLgorICAgQUREUiBpcyBwb2ludGluZyB0byBzdHJ1Y3QgYnRzX3N0cnVjdCAoc2VlIGFzbS9kcy5oKS4KKyovCisjZGVmaW5lIFBUUkFDRV9CVFNfQ0xFQVIJNDQKKy8qIENsZWFyIHRoZSBCVFMgYnVmZmVyLgorICAgREFUQSBhbmQgQUREUiBhcmUgaWdub3JlZC4KKyovCisjZGVmaW5lIFBUUkFDRV9CVFNfRFJBSU4JNDUKKy8qIFJlYWQgYWxsIGF2YWlsYWJsZSBCVFMgcmVjb3JkcyBhbmQgY2xlYXIgdGhlIGJ1ZmZlci4KKyAgIEFERFIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBidHNfc3RydWN0LgorICAgREFUQSBnaXZlcyB0aGUgc2l6ZSBvZiB0aGF0IGJ1ZmZlci4KKyAgIEJUUyByZWNvcmRzIGFyZSByZWFkIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKyAgIFJldHVybnMgbnVtYmVyIG9mIEJUUyByZWNvcmRzIGRyYWluZWQuCisqLworI2VuZGlmIC8qIENPTkZJR19YODZfUFRSQUNFX0JUUyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfUFRSQUNFX0FCSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTMxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMCwwICsxLDI4MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QVFJBQ0VfSAorI2RlZmluZSBfQVNNX1g4Nl9QVFJBQ0VfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogRm9yIF9fdXNlciAqLworI2luY2x1ZGUgPGFzbS9wdHJhY2UtYWJpLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9kcy5oPgkJLyogdGhlIERTIEJUUyBzdHJ1Y3QgaXMgdXNlZCBmb3IgcHRyYWNlIHRvbyAqLworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmZGVmIF9faTM4Nl9fCisvKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCisKKyNpZm5kZWYgX19LRVJORUxfXworCitzdHJ1Y3QgcHRfcmVncyB7CisJbG9uZyBlYng7CisJbG9uZyBlY3g7CisJbG9uZyBlZHg7CisJbG9uZyBlc2k7CisJbG9uZyBlZGk7CisJbG9uZyBlYnA7CisJbG9uZyBlYXg7CisJaW50ICB4ZHM7CisJaW50ICB4ZXM7CisJaW50ICB4ZnM7CisJLyogaW50ICBnczsgKi8KKwlsb25nIG9yaWdfZWF4OworCWxvbmcgZWlwOworCWludCAgeGNzOworCWxvbmcgZWZsYWdzOworCWxvbmcgZXNwOworCWludCAgeHNzOworfTsKKworI2Vsc2UgLyogX19LRVJORUxfXyAqLworCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyBieDsKKwl1bnNpZ25lZCBsb25nIGN4OworCXVuc2lnbmVkIGxvbmcgZHg7CisJdW5zaWduZWQgbG9uZyBzaTsKKwl1bnNpZ25lZCBsb25nIGRpOworCXVuc2lnbmVkIGxvbmcgYnA7CisJdW5zaWduZWQgbG9uZyBheDsKKwl1bnNpZ25lZCBsb25nIGRzOworCXVuc2lnbmVkIGxvbmcgZXM7CisJdW5zaWduZWQgbG9uZyBmczsKKwkvKiBpbnQgIGdzOyAqLworCXVuc2lnbmVkIGxvbmcgb3JpZ19heDsKKwl1bnNpZ25lZCBsb25nIGlwOworCXVuc2lnbmVkIGxvbmcgY3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNwOworCXVuc2lnbmVkIGxvbmcgc3M7Cit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZWxzZSAvKiBfX2kzODZfXyAqLworCisjaWZuZGVmIF9fS0VSTkVMX18KKworc3RydWN0IHB0X3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgcjE1OworCXVuc2lnbmVkIGxvbmcgcjE0OworCXVuc2lnbmVkIGxvbmcgcjEzOworCXVuc2lnbmVkIGxvbmcgcjEyOworCXVuc2lnbmVkIGxvbmcgcmJwOworCXVuc2lnbmVkIGxvbmcgcmJ4OworLyogYXJndW1lbnRzOiBub24gaW50ZXJydXB0cy9ub24gdHJhY2luZyBzeXNjYWxscyBvbmx5IHNhdmUgdXB0byBoZXJlKi8KKwl1bnNpZ25lZCBsb25nIHIxMTsKKwl1bnNpZ25lZCBsb25nIHIxMDsKKwl1bnNpZ25lZCBsb25nIHI5OworCXVuc2lnbmVkIGxvbmcgcjg7CisJdW5zaWduZWQgbG9uZyByYXg7CisJdW5zaWduZWQgbG9uZyByY3g7CisJdW5zaWduZWQgbG9uZyByZHg7CisJdW5zaWduZWQgbG9uZyByc2k7CisJdW5zaWduZWQgbG9uZyByZGk7CisJdW5zaWduZWQgbG9uZyBvcmlnX3JheDsKKy8qIGVuZCBvZiBhcmd1bWVudHMgKi8KKy8qIGNwdSBleGNlcHRpb24gZnJhbWUgb3IgdW5kZWZpbmVkICovCisJdW5zaWduZWQgbG9uZyByaXA7CisJdW5zaWduZWQgbG9uZyBjczsKKwl1bnNpZ25lZCBsb25nIGVmbGFnczsKKwl1bnNpZ25lZCBsb25nIHJzcDsKKwl1bnNpZ25lZCBsb25nIHNzOworLyogdG9wIG9mIHN0YWNrIHBhZ2UgKi8KK307CisKKyNlbHNlIC8qIF9fS0VSTkVMX18gKi8KKworc3RydWN0IHB0X3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgcjE1OworCXVuc2lnbmVkIGxvbmcgcjE0OworCXVuc2lnbmVkIGxvbmcgcjEzOworCXVuc2lnbmVkIGxvbmcgcjEyOworCXVuc2lnbmVkIGxvbmcgYnA7CisJdW5zaWduZWQgbG9uZyBieDsKKy8qIGFyZ3VtZW50czogbm9uIGludGVycnVwdHMvbm9uIHRyYWNpbmcgc3lzY2FsbHMgb25seSBzYXZlIHVwdG8gaGVyZSovCisJdW5zaWduZWQgbG9uZyByMTE7CisJdW5zaWduZWQgbG9uZyByMTA7CisJdW5zaWduZWQgbG9uZyByOTsKKwl1bnNpZ25lZCBsb25nIHI4OworCXVuc2lnbmVkIGxvbmcgYXg7CisJdW5zaWduZWQgbG9uZyBjeDsKKwl1bnNpZ25lZCBsb25nIGR4OworCXVuc2lnbmVkIGxvbmcgc2k7CisJdW5zaWduZWQgbG9uZyBkaTsKKwl1bnNpZ25lZCBsb25nIG9yaWdfYXg7CisvKiBlbmQgb2YgYXJndW1lbnRzICovCisvKiBjcHUgZXhjZXB0aW9uIGZyYW1lIG9yIHVuZGVmaW5lZCAqLworCXVuc2lnbmVkIGxvbmcgaXA7CisJdW5zaWduZWQgbG9uZyBjczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc3A7CisJdW5zaWduZWQgbG9uZyBzczsKKy8qIHRvcCBvZiBzdGFjayBwYWdlICovCit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICFfX2kzODZfXyAqLworCisKKyNpZmRlZiBDT05GSUdfWDg2X1BUUkFDRV9CVFMKKy8qIGEgYnJhbmNoIHRyYWNlIHJlY29yZCBlbnRyeQorICoKKyAqIEluIG9yZGVyIHRvIHVuaWZ5IHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB2YXJpb3VzIHByb2Nlc3NvciB2ZXJzaW9ucywKKyAqIHdlIHVzZSB0aGUgYmVsb3cgZGF0YSBzdHJ1Y3R1cmUgZm9yIGFsbCBwcm9jZXNzb3JzLgorICovCitlbnVtIGJ0c19xdWFsaWZpZXIgeworCUJUU19JTlZBTElEID0gMCwKKwlCVFNfQlJBTkNILAorCUJUU19UQVNLX0FSUklWRVMsCisJQlRTX1RBU0tfREVQQVJUUworfTsKKworc3RydWN0IGJ0c19zdHJ1Y3QgeworCV9fdTY0IHF1YWxpZmllcjsKKwl1bmlvbiB7CisJCS8qIEJUU19CUkFOQ0ggKi8KKwkJc3RydWN0IHsKKwkJCV9fdTY0IGZyb21faXA7CisJCQlfX3U2NCB0b19pcDsKKwkJfSBsYnI7CisJCS8qIEJUU19UQVNLX0FSUklWRVMgb3IKKwkJICAgQlRTX1RBU0tfREVQQVJUUyAqLworCQlfX3U2NCBqaWZmaWVzOworCX0gdmFyaWFudDsKK307CisjZW5kaWYgLyogQ09ORklHX1g4Nl9QVFJBQ0VfQlRTICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK3N0cnVjdCBjcHVpbmZvX3g4NjsKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2lmZGVmIENPTkZJR19YODZfUFRSQUNFX0JUUworZXh0ZXJuIHZvaWQgX19jcHVpbml0IHB0cmFjZV9idHNfaW5pdF9pbnRlbChzdHJ1Y3QgY3B1aW5mb194ODYgKik7CitleHRlcm4gdm9pZCBwdHJhY2VfYnRzX3Rha2VfdGltZXN0YW1wKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbnVtIGJ0c19xdWFsaWZpZXIpOworI2Vsc2UKKyNkZWZpbmUgcHRyYWNlX2J0c19pbml0X2ludGVsKGNvbmZpZykgZG8ge30gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX1g4Nl9QVFJBQ0VfQlRTICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitleHRlcm4gdW5zaWduZWQgbG9uZworY29udmVydF9pcF90b19saW5lYXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgc2VuZF9zaWd0cmFwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSBpbnQgZXJyb3JfY29kZSwgaW50IHNpX2NvZGUpOwordm9pZCBzaWduYWxfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgX191c2VyICpmcmFtZSwgY2hhciAqd2hlcmUpOworCitleHRlcm4gbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgc3lzY2FsbF90cmFjZV9sZWF2ZShzdHJ1Y3QgcHRfcmVncyAqKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlZ3NfcmV0dXJuX3ZhbHVlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5heDsKK30KKworLyoKKyAqIHVzZXJfbW9kZV92bShyZWdzKSBkZXRlcm1pbmVzIHdoZXRoZXIgYSByZWdpc3RlciBzZXQgY2FtZSBmcm9tIHVzZXIgbW9kZS4KKyAqIFRoaXMgaXMgdHJ1ZSBpZiBWODA4NiBtb2RlIHdhcyBlbmFibGVkIE9SIGlmIHRoZSByZWdpc3RlciBzZXQgd2FzIGZyb20KKyAqIHByb3RlY3RlZCBtb2RlIHdpdGggUlBMLTMgQ1MgdmFsdWUuICBUaGlzIHRyaWNreSB0ZXN0IGNoZWNrcyB0aGF0IHdpdGgKKyAqIG9uZSBjb21wYXJpc29uLiAgTWFueSBwbGFjZXMgaW4gdGhlIGtlcm5lbCBjYW4gYnlwYXNzIHRoaXMgZnVsbCBjaGVjaworICogaWYgdGhleSBoYXZlIGFscmVhZHkgcnVsZWQgb3V0IFY4MDg2IG1vZGUsIHNvIHVzZXJfbW9kZShyZWdzKSBjYW4gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNlcl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlyZXR1cm4gKHJlZ3MtPmNzICYgU0VHTUVOVF9SUExfTUFTSykgPT0gVVNFUl9SUEw7CisjZWxzZQorCXJldHVybiAhIShyZWdzLT5jcyAmIDMpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVzZXJfbW9kZV92bShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJcmV0dXJuICgocmVncy0+Y3MgJiBTRUdNRU5UX1JQTF9NQVNLKSB8IChyZWdzLT5mbGFncyAmIFg4Nl9WTV9NQVNLKSkgPj0KKwkJVVNFUl9SUEw7CisjZWxzZQorCXJldHVybiB1c2VyX21vZGUocmVncyk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgdjgwODZfbW9kZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJcmV0dXJuIChyZWdzLT5mbGFncyAmIFg4Nl9WTV9NQVNLKTsKKyNlbHNlCisJcmV0dXJuIDA7CS8qIE5vIFY4NiBtb2RlIHN1cHBvcnQgaW4gbG9uZyBtb2RlICovCisjZW5kaWYKK30KKworLyoKKyAqIFg4Nl8zMiBDUFVzIGRvbid0IHNhdmUgc3MgYW5kIGVzcCBpZiB0aGUgQ1BVIGlzIGFscmVhZHkgaW4ga2VybmVsIG1vZGUKKyAqIHdoZW4gaXQgdHJhcHMuICBTbyByZWdzIHdpbGwgYmUgdGhlIGN1cnJlbnQgc3AuCisgKgorICogVGhpcyBpcyB2YWxpZCBvbmx5IGZvciBrZXJuZWwgbW9kZSB0cmFwcy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGtlcm5lbF90cmFwX3NwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpcmVnczsKKyNlbHNlCisJcmV0dXJuIHJlZ3MtPnNwOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5pcDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZyYW1lX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPmJwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXNlcl9zdGFja19wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5zcDsKK30KKworLyoKKyAqIFRoZXNlIGFyZSBkZWZpbmVkIGFzIHBlciBsaW51eC9wdHJhY2UuaCwgd2hpY2ggc2VlLgorICovCisjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCitleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOworCitleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9ibG9ja19zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKyNpZmRlZiBDT05GSUdfWDg2X0RFQlVHQ1RMTVNSCisjZGVmaW5lIGFyY2hfaGFzX2Jsb2NrX3N0ZXAoKQkoMSkKKyNlbHNlCisjZGVmaW5lIGFyY2hfaGFzX2Jsb2NrX3N0ZXAoKQkoYm9vdF9jcHVfZGF0YS54ODYgPj0gNikKKyNlbmRpZgorCitzdHJ1Y3QgdXNlcl9kZXNjOworZXh0ZXJuIGludCBkb19nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgaWR4LAorCQkJICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKmluZm8pOworZXh0ZXJuIGludCBkb19zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgaWR4LAorCQkJICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKmluZm8sIGludCBjYW5fYWxsb2NhdGUpOworCisjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUFRSQUNFCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHZjbG9jay1hYmkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B2Y2xvY2stYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ5MzUwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B2Y2xvY2stYWJpLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QVkNMT0NLX0FCSV9ICisjZGVmaW5lIF9BU01fWDg2X1BWQ0xPQ0tfQUJJX0gKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBUaGVzZSBzdHJ1Y3RzIE1VU1QgTk9UIGJlIGNoYW5nZWQuCisgKiBUaGV5IGFyZSB0aGUgQUJJIGJldHdlZW4gaHlwZXJ2aXNvciBhbmQgZ3Vlc3QgT1MuCisgKiBCb3RoIFhlbiBhbmQgS1ZNIGFyZSB1c2luZyB0aGlzLgorICoKKyAqIHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaG9sZHMgdGhlIHN5c3RlbSB0aW1lIGFuZCB0aGUgdHNjIHRpbWVzdGFtcAorICogb2YgdGhlIGxhc3QgdXBkYXRlLiBTbyB0aGUgZ3Vlc3QgY2FuIHVzZSB0aGUgdHNjIGRlbHRhIHRvIGdldCBhCisgKiBtb3JlIHByZWNpc2Ugc3lzdGVtIHRpbWUuICBUaGVyZSBpcyBvbmUgcGVyIHZpcnR1YWwgY3B1LgorICoKKyAqIHB2Y2xvY2tfd2FsbF9jbG9jayByZWZlcmVuY2VzIHRoZSBwb2ludCBpbiB0aW1lIHdoZW4gdGhlIHN5c3RlbQorICogdGltZSB3YXMgemVybyAodXN1YWxseSBib290IHRpbWUpLCB0aHVzIHRoZSBndWVzdCBjYWxjdWxhdGVzIHRoZQorICogY3VycmVudCB3YWxsIGNsb2NrIGJ5IGFkZGluZyB0aGUgc3lzdGVtIHRpbWUuCisgKgorICogUHJvdG9jb2wgZm9yIHRoZSAidmVyc2lvbiIgZmllbGRzIGlzOiBoeXBlcnZpc29yIHJhaXNlcyBpdCAobWFraW5nCisgKiBpdCB1bmV2ZW4pIGJlZm9yZSBpdCBzdGFydHMgdXBkYXRpbmcgdGhlIGZpZWxkcyBhbmQgcmFpc2VzIGl0IGFnYWluCisgKiAobWFraW5nIGl0IGV2ZW4pIHdoZW4gaXQgaXMgZG9uZS4gIFRodXMgdGhlIGd1ZXN0IGNhbiBtYWtlIHN1cmUgdGhlCisgKiB0aW1lIHZhbHVlcyBpdCBnb3QgYXJlIGNvbnNpc3RlbnQgYnkgY2hlY2tpbmcgdGhlIHZlcnNpb24gYmVmb3JlCisgKiBhbmQgYWZ0ZXIgcmVhZGluZyB0aGVtLgorICovCisKK3N0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIHsKKwl1MzIgICB2ZXJzaW9uOworCXUzMiAgIHBhZDA7CisJdTY0ICAgdHNjX3RpbWVzdGFtcDsKKwl1NjQgICBzeXN0ZW1fdGltZTsKKwl1MzIgICB0c2NfdG9fc3lzdGVtX211bDsKKwlzOCAgICB0c2Nfc2hpZnQ7CisJdTggICAgcGFkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7IC8qIDMyIGJ5dGVzICovCisKK3N0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgeworCXUzMiAgIHZlcnNpb247CisJdTMyICAgc2VjOworCXUzMiAgIG5zZWM7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fWDg2X1BWQ0xPQ0tfQUJJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B2Y2xvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B2Y2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzIzNWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHZjbG9jay5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9YODZfUFZDTE9DS19ICisjZGVmaW5lIF9BU01fWDg2X1BWQ0xPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxhc20vcHZjbG9jay1hYmkuaD4KKworLyogc29tZSBoZWxwZXIgZnVuY3Rpb25zIGZvciB4ZW4gYW5kIGt2bSBwdiBjbG9jayBzb3VyY2VzICovCitjeWNsZV90IHB2Y2xvY2tfY2xvY2tzb3VyY2VfcmVhZChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqc3JjKTsKK3Vuc2lnbmVkIGxvbmcgcHZjbG9ja190c2Nfa2h6KHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpzcmMpOwordm9pZCBwdmNsb2NrX3JlYWRfd2FsbGNsb2NrKHN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgKndhbGwsCisJCQkgICAgc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnZjcHUsCisJCQkgICAgc3RydWN0IHRpbWVzcGVjICp0cyk7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QVkNMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JlYm9vdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcmVib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3NzEwMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JlYm9vdC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0FTTV9YODZfUkVCT09UX0gKKyNkZWZpbmUgX0FTTV9YODZfUkVCT09UX0gKKworc3RydWN0IHB0X3JlZ3M7CisKK3N0cnVjdCBtYWNoaW5lX29wcyB7CisJdm9pZCAoKnJlc3RhcnQpKGNoYXIgKmNtZCk7CisJdm9pZCAoKmhhbHQpKHZvaWQpOworCXZvaWQgKCpwb3dlcl9vZmYpKHZvaWQpOworCXZvaWQgKCpzaHV0ZG93bikodm9pZCk7CisJdm9pZCAoKmNyYXNoX3NodXRkb3duKShzdHJ1Y3QgcHRfcmVncyAqKTsKKwl2b2lkICgqZW1lcmdlbmN5X3Jlc3RhcnQpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBtYWNoaW5lX29wcyBtYWNoaW5lX29wczsKKwordm9pZCBuYXRpdmVfbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIG5hdGl2ZV9tYWNoaW5lX3NodXRkb3duKHZvaWQpOwordm9pZCBtYWNoaW5lX3JlYWxfcmVzdGFydChjb25zdCB1bnNpZ25lZCBjaGFyICpjb2RlLCBpbnQgbGVuZ3RoKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1JFQk9PVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZWJvb3RfZml4dXBzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZWJvb3RfZml4dXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1ZGViZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JlYm9vdF9maXh1cHMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9YODZfUkVCT09UX0ZJWFVQU19ICisjZGVmaW5lIF9BU01fWDg2X1JFQk9PVF9GSVhVUFNfSAorCitleHRlcm4gdm9pZCBtYWNoX3JlYm9vdF9maXh1cHModm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9SRUJPT1RfRklYVVBTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JlcXVpcmVkLWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2Q2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oCkBAIC0wLDAgKzEsODIgQEAKKyNpZm5kZWYgX0FTTV9YODZfUkVRVUlSRURfRkVBVFVSRVNfSAorI2RlZmluZSBfQVNNX1g4Nl9SRVFVSVJFRF9GRUFUVVJFU19ICisKKy8qIERlZmluZSBtaW5pbXVtIENQVUlEIGZlYXR1cmUgc2V0IGZvciBrZXJuZWwgVGhlc2UgYml0cyBhcmUgY2hlY2tlZAorICAgcmVhbGx5IGVhcmx5IHRvIGFjdHVhbGx5IGRpc3BsYXkgYSB2aXNpYmxlIGVycm9yIG1lc3NhZ2UgYmVmb3JlIHRoZQorICAga2VybmVsIGRpZXMuICBNYWtlIHN1cmUgdG8gYXNzaWduIGZlYXR1cmVzIHRvIHRoZSBwcm9wZXIgbWFzayEKKworICAgU29tZSByZXF1aXJlbWVudHMgdGhhdCBhcmUgbm90IGluIENQVUlEIHlldCBhcmUgYWxzbyBpbiB0aGUKKyAgIENPTkZJR19YODZfTUlOSU1VTV9DUFVfRkFNSUxZIHdoaWNoIGlzIGNoZWNrZWQgdG9vLgorCisgICBUaGUgcmVhbCBpbmZvcm1hdGlvbiBpcyBpbiBhcmNoL3g4Ni9LY29uZmlnLmNwdSwgdGhpcyBqdXN0IGNvbnZlcnRzCisgICB0aGUgQ09ORklHcyBpbnRvIGEgYml0bWFzayAqLworCisjaWZuZGVmIENPTkZJR19NQVRIX0VNVUxBVElPTgorIyBkZWZpbmUgTkVFRF9GUFUJKDE8PChYODZfRkVBVFVSRV9GUFUgJiAzMSkpCisjZWxzZQorIyBkZWZpbmUgTkVFRF9GUFUJMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfUEFFKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjIGRlZmluZSBORUVEX1BBRQkoMTw8KFg4Nl9GRUFUVVJFX1BBRSAmIDMxKSkKKyNlbHNlCisjIGRlZmluZSBORUVEX1BBRQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfQ01QWENIRzY0CisjIGRlZmluZSBORUVEX0NYOAkoMTw8KFg4Nl9GRUFUVVJFX0NYOCAmIDMxKSkKKyNlbHNlCisjIGRlZmluZSBORUVEX0NYOAkwCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9DTU9WKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjIGRlZmluZSBORUVEX0NNT1YJKDE8PChYODZfRkVBVFVSRV9DTU9WICYgMzEpKQorI2Vsc2UKKyMgZGVmaW5lIE5FRURfQ01PVgkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfVVNFXzNETk9XCisjIGRlZmluZSBORUVEXzNETk9XCSgxPDwoWDg2X0ZFQVRVUkVfM0ROT1cgJiAzMSkpCisjZWxzZQorIyBkZWZpbmUgTkVFRF8zRE5PVwkwCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9QNl9OT1ApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKyMgZGVmaW5lIE5FRURfTk9QTAkoMTw8KFg4Nl9GRUFUVVJFX05PUEwgJiAzMSkpCisjZWxzZQorIyBkZWZpbmUgTkVFRF9OT1BMCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBORUVEX1BTRQkwCisjZGVmaW5lIE5FRURfTVNSCSgxPDwoWDg2X0ZFQVRVUkVfTVNSICYgMzEpKQorI2RlZmluZSBORUVEX1BHRQkoMTw8KFg4Nl9GRUFUVVJFX1BHRSAmIDMxKSkKKyNkZWZpbmUgTkVFRF9GWFNSCSgxPDwoWDg2X0ZFQVRVUkVfRlhTUiAmIDMxKSkKKyNkZWZpbmUgTkVFRF9YTU0JKDE8PChYODZfRkVBVFVSRV9YTU0gJiAzMSkpCisjZGVmaW5lIE5FRURfWE1NMgkoMTw8KFg4Nl9GRUFUVVJFX1hNTTIgJiAzMSkpCisjZGVmaW5lIE5FRURfTE0JCSgxPDwoWDg2X0ZFQVRVUkVfTE0gJiAzMSkpCisjZWxzZQorI2RlZmluZSBORUVEX1BTRQkwCisjZGVmaW5lIE5FRURfTVNSCTAKKyNkZWZpbmUgTkVFRF9QR0UJMAorI2RlZmluZSBORUVEX0ZYU1IJMAorI2RlZmluZSBORUVEX1hNTQkwCisjZGVmaW5lIE5FRURfWE1NMgkwCisjZGVmaW5lIE5FRURfTE0JCTAKKyNlbmRpZgorCisjZGVmaW5lIFJFUVVJUkVEX01BU0swCShORUVEX0ZQVXxORUVEX1BTRXxORUVEX01TUnxORUVEX1BBRXxcCisJCQkgTkVFRF9DWDh8TkVFRF9QR0V8TkVFRF9GWFNSfE5FRURfQ01PVnxcCisJCQkgTkVFRF9YTU18TkVFRF9YTU0yKQorI2RlZmluZSBTU0VfTUFTSwkoTkVFRF9YTU18TkVFRF9YTU0yKQorCisjZGVmaW5lIFJFUVVJUkVEX01BU0sxCShORUVEX0xNfE5FRURfM0ROT1cpCisKKyNkZWZpbmUgUkVRVUlSRURfTUFTSzIJMAorI2RlZmluZSBSRVFVSVJFRF9NQVNLMwkoTkVFRF9OT1BMKQorI2RlZmluZSBSRVFVSVJFRF9NQVNLNAkwCisjZGVmaW5lIFJFUVVJUkVEX01BU0s1CTAKKyNkZWZpbmUgUkVRVUlSRURfTUFTSzYJMAorI2RlZmluZSBSRVFVSVJFRF9NQVNLNwkwCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9SRVFVSVJFRF9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcmVzb3VyY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Jlc291cmNlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9yZXNvdXJjZS5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXN1bWUtdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Jlc3VtZS10cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjFjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXN1bWUtdHJhY2UuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9BU01fWDg2X1JFU1VNRV9UUkFDRV9ICisjZGVmaW5lIF9BU01fWDg2X1JFU1VNRV9UUkFDRV9ICisKKyNpbmNsdWRlIDxhc20vYXNtLmg+CisKKyNkZWZpbmUgVFJBQ0VfUkVTVU1FKHVzZXIpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKHBtX3RyYWNlX2VuYWJsZWQpIHsJCQkJCVwKKwkJY29uc3Qgdm9pZCAqdHJhY2VkYXRhOwkJCQlcCisJCWFzbSB2b2xhdGlsZShfQVNNX01PViAiICQxZiwlMFxuIgkJXAorCQkJICAgICAiLnNlY3Rpb24gLnRyYWNlZGF0YSxcImFcIlxuIglcCisJCQkgICAgICIxOlx0LndvcmQgJWMxXG5cdCIJCVwKKwkJCSAgICAgX0FTTV9QVFIgIiAlYzJcbiIJCQlcCisJCQkgICAgICIucHJldmlvdXMiCQkJXAorCQkJICAgICA6Ij1yIiAodHJhY2VkYXRhKQkJCVwKKwkJCSAgICAgOiAiaSIgKF9fTElORV9fKSwgImkiIChfX0ZJTEVfXykpOwlcCisJCWdlbmVyYXRlX3Jlc3VtZV90cmFjZSh0cmFjZWRhdGEsIHVzZXIpOwkJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fWDg2X1JFU1VNRV9UUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Jpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YmFiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yaW8uaApAQCAtMCwwICsxLDYzIEBACisvKgorICogRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX21wcGFyc2UuaAorICogICAgICAgICAgYW5kIGluY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvYmlvc19lYmRhLmgKKyAqCisgKiBBdXRob3I6IExhdXJlbnQgVml2aWVyIDxMYXVyZW50LlZpdmllckBidWxsLm5ldD4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1JJT19ICisjZGVmaW5lIF9BU01fWDg2X1JJT19ICisKKyNkZWZpbmUgUklPX1RBQkxFX1ZFUlNJT04JMworCitzdHJ1Y3QgcmlvX3RhYmxlX2hkciB7CisJdTggdmVyc2lvbjsJCS8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgICovCisJdTggbnVtX3NjYWxfZGV2OwkvKiAjIG9mIFNjYWxhYmlsaXR5IGRldmljZXMgICAgICAgICAgICAgICAqLworCXU4IG51bV9yaW9fZGV2OwkJLyogIyBvZiBSSU8gSS9PIGRldmljZXMgICAgICAgICAgICAgICAgICAgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzY2FsX2RldGFpbCB7CisJdTggbm9kZV9pZDsJCS8qIFNjYWxhYmlsaXR5IE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICovCisJdTMyIENCQVI7CQkvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAqLworCXU4IHBvcnQwbm9kZTsJCS8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkY9Tm9uZSAgICovCisJdTggcG9ydDBwb3J0OwkJLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KKwkJCQkvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXU4IHBvcnQxbm9kZTsJCS8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkYgPSBOb25lICovCisJdTggcG9ydDFwb3J0OwkJLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KKwkJCQkvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXU4IHBvcnQybm9kZTsJCS8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkYgPSBOb25lICovCisJdTggcG9ydDJwb3J0OwkJLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KKwkJCQkvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXU4IGNoYXNzaXNfbnVtOwkJLyogMSBiYXNlZCBDaGFzc2lzIG51bWJlciAoMSA9IGJvb3Qgbm9kZSkgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCByaW9fZGV0YWlsIHsKKwl1OCBub2RlX2lkOwkJLyogUklPIE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1MzIgQkJBUjsJCS8qIEFkZHJlc3Mgb2YgMU1CIHJlZ2lzdGVyIHNwYWNlICAgICAgICAgICovCisJdTggdHlwZTsJCS8qIFR5cGUgb2YgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggb3duZXJfaWQ7CQkvKiBOb2RlIElEIG9mIEh1cnJpY2FuZSB0aGF0IG93bnMgdGhpcyAgICAqLworCQkJCS8qIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggcG9ydDBub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KKwl1OCBwb3J0MHBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLworCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggcG9ydDFub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KKwl1OCBwb3J0MXBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLworCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggZmlyc3Rfc2xvdDsJCS8qIExvd2VzdCBzbG90IG51bWJlciBiZWxvdyB0aGlzIENhbGdhcnkgICovCisJdTggc3RhdHVzOwkJLyogQml0IDAgPSAxIDogdGhlIFhBUElDIGlzIHVzZWQgICAgICAgICAgKi8KKwkJCQkvKiAgICAgICA9IDAgOiB0aGUgWEFQSUMgaXMgbm90IHVzZWQsIGllOiAqLworCQkJCS8qICAgICAgICAgICAgaW50cyBmd2RlZCB0byBhbm90aGVyIFhBUElDICovCisJCQkJLyogICAgICAgICAgIEJpdHMxOjcgUmVzZXJ2ZWQgICAgICAgICAgICAgKi8KKwl1OCBXUF9pbmRleDsJCS8qIGluc3RhbmNlIGluZGV4IC0gbG93ZXIgb25lcyBoYXZlICAgICAgICovCisJCQkJLyogICAgIGxvd2VyIHNsb3QgbnVtYmVycy9QQ0kgYnVzIG51bWJlcnMgKi8KKwl1OCBjaGFzc2lzX251bTsJCS8qIDEgYmFzZWQgQ2hhc3NpcyBudW1iZXIgICAgICAgICAgICAgICAgICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIHsKKwlIVVJSX1NDQUxBQklMVFkJPSAwLAkvKiBIdXJyaWNhbmUgU2NhbGFiaWxpdHkgaW5mbyAqLworCUhVUlJfUklPSUIJPSAyLAkvKiBIdXJyaWNhbmUgUklPSUIgaW5mbyAgICAgICAqLworCUNPTVBBVF9DQUxHQVJZCT0gNCwJLyogQ29tcGF0aWJpbGl0eSBDYWxnYXJ5ICAgICAgKi8KKwlBTFRfQ0FMR0FSWQk9IDUsCS8qIFNlY29uZCBQbGFuYXIgQ2FsZ2FyeSAgICAgICovCit9OworCisjZW5kaWYgLyogX0FTTV9YODZfUklPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9ydGMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J0Yy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvcnRjLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3J0Yy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd2xvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3bG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOGMwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd2xvY2suaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0FTTV9YODZfUldMT0NLX0gKKyNkZWZpbmUgX0FTTV9YODZfUldMT0NLX0gKKworI2RlZmluZSBSV19MT0NLX0JJQVMJCSAweDAxMDAwMDAwCisKKy8qIEFjdHVhbCBjb2RlIGlzIGluIGFzbS9zcGlubG9jay5oIG9yIGluIGFyY2gveDg2L2xpYi9yd2xvY2suUyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfUldMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNzUxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC0wLDAgKzEsMjY1IEBACisvKiByd3NlbS5oOiBSL1cgc2VtYXBob3JlcyBpbXBsZW1lbnRlZCB1c2luZyBYQUREL0NNUFhDSEcgZm9yIGk0ODYrCisgKgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKS4KKyAqCisgKiBEZXJpdmVkIGZyb20gYXNtLXg4Ni9zZW1hcGhvcmUuaAorICoKKyAqCisgKiBUaGUgTVNXIG9mIHRoZSBjb3VudCBpcyB0aGUgbmVnYXRlZCBudW1iZXIgb2YgYWN0aXZlIHdyaXRlcnMgYW5kIHdhaXRpbmcKKyAqIGxvY2tlcnMsIGFuZCB0aGUgTFNXIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYWN0aXZlIGxvY2tzCisgKgorICogVGhlIGxvY2sgY291bnQgaXMgaW5pdGlhbGl6ZWQgdG8gMCAobm8gYWN0aXZlIGFuZCBubyB3YWl0aW5nIGxvY2tlcnMpLgorICoKKyAqIFdoZW4gYSB3cml0ZXIgc3VidHJhY3RzIFdSSVRFX0JJQVMsIGl0J2xsIGdldCAweGZmZmYwMDAxIGZvciB0aGUgY2FzZSBvZiBhbgorICogdW5jb250ZW5kZWQgbG9jay4gVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBiZWNhdXNlIFhBREQgcmV0dXJucyB0aGUgb2xkIHZhbHVlLgorICogUmVhZGVycyBpbmNyZW1lbnQgYnkgMSBhbmQgc2VlIGEgcG9zaXRpdmUgdmFsdWUgd2hlbiB1bmNvbnRlbmRlZCwgbmVnYXRpdmUKKyAqIGlmIHRoZXJlIGFyZSB3cml0ZXJzIChhbmQgbWF5YmUpIHJlYWRlcnMgd2FpdGluZyAoaW4gd2hpY2ggY2FzZSBpdCBnb2VzIHRvCisgKiBzbGVlcCkuCisgKgorICogVGhlIHZhbHVlIG9mIFdBSVRJTkdfQklBUyBzdXBwb3J0cyB1cCB0byAzMjc2NiB3YWl0aW5nIHByb2Nlc3Nlcy4gVGhpcyBjYW4KKyAqIGJlIGV4dGVuZGVkIHRvIDY1NTM0IGJ5IG1hbnVhbGx5IGNoZWNraW5nIHRoZSB3aG9sZSBNU1cgcmF0aGVyIHRoYW4gcmVseWluZworICogb24gdGhlIFMgZmxhZy4KKyAqCisgKiBUaGUgdmFsdWUgb2YgQUNUSVZFX0JJQVMgc3VwcG9ydHMgdXAgdG8gNjU1MzUgYWN0aXZlIHByb2Nlc3Nlcy4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSB0b3RhbGx5IGZhaXIgLSBpZiBhbnl0aGluZyBpcyB3YWl0aW5nLCBhIHByb2Nlc3MgdGhhdCB3YW50cyBhCisgKiBsb2NrIHdpbGwgZ28gdG8gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLiBXaGVuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxvY2sgaXMKKyAqIHJlbGVhc2VkLCBpZiB0aGVyZSdzIGEgd3JpdGVyIGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUsIHRoZW4gdGhhdCBhbmQgb25seQorICogdGhhdCB3aWxsIGJlIHdva2VuIHVwOyBpZiB0aGVyZSdzIGEgYnVuY2ggb2YgY29uc2VxdXRpdmUgcmVhZGVycyBhdCB0aGUKKyAqIGZyb250LCB0aGVuIHRoZXknbGwgYWxsIGJlIHdva2VuIHVwLCBidXQgbm8gb3RoZXIgcmVhZGVycyB3aWxsIGJlLgorICovCisKKyNpZm5kZWYgX0FTTV9YODZfUldTRU1fSAorI2RlZmluZSBfQVNNX1g4Nl9SV1NFTV9ICisKKyNpZm5kZWYgX0xJTlVYX1JXU0VNX0gKKyNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgYXNtL3J3c2VtLmggZGlyZWN0bHksIHVzZSBsaW51eC9yd3NlbS5oIGluc3RlYWQiCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKworc3RydWN0IHJ3c2VtX3dhaXRlcjsKKworZXh0ZXJuIGFzbXJlZ3Bhcm0gc3RydWN0IHJ3X3NlbWFwaG9yZSAqCisgcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIGFzbXJlZ3Bhcm0gc3RydWN0IHJ3X3NlbWFwaG9yZSAqCisgcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBhc21yZWdwYXJtIHN0cnVjdCByd19zZW1hcGhvcmUgKgorIHJ3c2VtX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKTsKK2V4dGVybiBhc21yZWdwYXJtIHN0cnVjdCByd19zZW1hcGhvcmUgKgorIHJ3c2VtX2Rvd25ncmFkZV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CisKKy8qCisgKiB0aGUgc2VtYXBob3JlIGRlZmluaXRpb24KKyAqLworCisjZGVmaW5lIFJXU0VNX1VOTE9DS0VEX1ZBTFVFCQkweDAwMDAwMDAwCisjZGVmaW5lIFJXU0VNX0FDVElWRV9CSUFTCQkweDAwMDAwMDAxCisjZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCQkweDAwMDBmZmZmCisjZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJKC0weDAwMDEwMDAwKQorI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUworI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQorCitzdHJ1Y3Qgcndfc2VtYXBob3JlIHsKKwlzaWduZWQgbG9uZwkJY291bnQ7CisJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgX19SV1NFTV9ERVBfTUFQX0lOSVQobG9ja25hbWUpICwgLmRlcF9tYXAgPSB7IC5uYW1lID0gI2xvY2tuYW1lIH0KKyNlbHNlCisjIGRlZmluZSBfX1JXU0VNX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkKKyNlbmRpZgorCisKKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQkJCQlcCit7CQkJCQkJCQlcCisJUldTRU1fVU5MT0NLRURfVkFMVUUsIF9fU1BJTl9MT0NLX1VOTE9DS0VEKChuYW1lKS53YWl0X2xvY2spLCBcCisJTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgX19SV1NFTV9ERVBfTUFQX0lOSVQobmFtZSkgXAorfQorCisjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkJCQkJCVwKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCisKK2V4dGVybiB2b2lkIF9faW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOworCisjZGVmaW5lIGluaXRfcndzZW0oc2VtKQkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJCQkJCQkJXAorCV9faW5pdF9yd3NlbSgoc2VtKSwgI3NlbSwgJl9fa2V5KTsJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogbG9jayBmb3IgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgZG93bl9yZWFkXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICBpbmNsICAgICAgKCUlZWF4KVxuXHQiCisJCSAgICAgLyogYWRkcyAweDAwMDAwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJICAgICAiICBqbnMgICAgICAgIDFmXG4iCisJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWRcbiIKKwkJICAgICAiMTpcblx0IgorCQkgICAgICIjIGVuZGluZyBkb3duX3JlYWRcblx0IgorCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKKwkJICAgICA6ICJhIiAoc2VtKQorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworfQorCisvKgorICogdHJ5bG9jayBmb3IgcmVhZGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fczMyIHJlc3VsdCwgdG1wOworCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX19kb3duX3JlYWRfdHJ5bG9ja1xuXHQiCisJCSAgICAgIiAgbW92bCAgICAgICUwLCUxXG5cdCIKKwkJICAgICAiMTpcblx0IgorCQkgICAgICIgIG1vdmwJICAgICAlMSwlMlxuXHQiCisJCSAgICAgIiAgYWRkbCAgICAgICUzLCUyXG5cdCIKKwkJICAgICAiICBqbGUJICAgICAyZlxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgY21weGNoZ2wgICUyLCUwXG5cdCIKKwkJICAgICAiICBqbnoJICAgICAxYlxuXHQiCisJCSAgICAgIjI6XG5cdCIKKwkJICAgICAiIyBlbmRpbmcgX19kb3duX3JlYWRfdHJ5bG9ja1xuXHQiCisJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KSwgIj0mYSIgKHJlc3VsdCksICI9JnIiICh0bXApCisJCSAgICAgOiAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CisJcmV0dXJuIHJlc3VsdCA+PSAwID8gMSA6IDA7Cit9CisKKy8qCisgKiBsb2NrIGZvciB3cml0aW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGVfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKQoreworCWludCB0bXA7CisKKwl0bXAgPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKKwlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fd3JpdGVcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIKKwkJICAgICAvKiBzdWJ0cmFjdCAweDAwMDBmZmZmLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJICAgICAiICB0ZXN0bCAgICAgJSVlZHgsJSVlZHhcblx0IgorCQkgICAgIC8qIHdhcyB0aGUgY291bnQgMCBiZWZvcmU/ICovCisJCSAgICAgIiAganogICAgICAgIDFmXG4iCisJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkXG4iCisJCSAgICAgIjE6XG4iCisJCSAgICAgIiMgZW5kaW5nIGRvd25fd3JpdGUiCisJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KSwgIj1kIiAodG1wKQorCQkgICAgIDogImEiIChzZW0pLCAiMSIgKHRtcCkKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJX19kb3duX3dyaXRlX25lc3RlZChzZW0sIDApOworfQorCisvKgorICogdHJ5bG9jayBmb3Igd3JpdGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzaWduZWQgbG9uZyByZXQgPSBjbXB4Y2hnKCZzZW0tPmNvdW50LAorCQkJCSAgUldTRU1fVU5MT0NLRURfVkFMVUUsCisJCQkJICBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CisJaWYgKHJldCA9PSBSV1NFTV9VTkxPQ0tFRF9WQUxVRSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1bmxvY2sgYWZ0ZXIgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlfX3MzMiB0bXAgPSAtUldTRU1fQUNUSVZFX1JFQURfQklBUzsKKwlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIC8qIHN1YnRyYWN0cyAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJICAgICAiICBqbnMgICAgICAgIDFmXG5cdCIKKwkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fd2FrZVxuIgorCQkgICAgICIxOlxuIgorCQkgICAgICIjIGVuZGluZyBfX3VwX3JlYWRcbiIKKwkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpLCAiPWQiICh0bXApCisJCSAgICAgOiAiYSIgKHNlbSksICIxIiAodG1wKQorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworfQorCisvKgorICogdW5sb2NrIGFmdGVyIHdyaXRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX191cF93cml0ZVxuXHQiCisJCSAgICAgIiAgbW92bCAgICAgICUyLCUlZWR4XG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkbCAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCisJCSAgICAgLyogdHJpZXMgdG8gdHJhbnNpdGlvbgorCQkJMHhmZmZmMDAwMSAtPiAweDAwMDAwMDAwICovCisJCSAgICAgIiAganogICAgICAgMWZcbiIKKwkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fd2FrZVxuIgorCQkgICAgICIxOlxuXHQiCisJCSAgICAgIiMgZW5kaW5nIF9fdXBfd3JpdGVcbiIKKwkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCisJCSAgICAgOiAiYSIgKHNlbSksICJpIiAoLVJXU0VNX0FDVElWRV9XUklURV9CSUFTKQorCQkgICAgIDogIm1lbW9yeSIsICJjYyIsICJlZHgiKTsKK30KKworLyoKKyAqIGRvd25ncmFkZSB3cml0ZSBsb2NrIHRvIHJlYWQgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX19kb3duZ3JhZGVfd3JpdGVcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIGFkZGwgICAgICAlMiwoJSVlYXgpXG5cdCIKKwkJICAgICAvKiB0cmFuc2l0aW9ucyAweFpaWlowMDAxIC0+IDB4WVlZWTAwMDEgKi8KKwkJICAgICAiICBqbnMgICAgICAgMWZcblx0IgorCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duZ3JhZGVfd2FrZVxuIgorCQkgICAgICIxOlxuXHQiCisJCSAgICAgIiMgZW5kaW5nIF9fZG93bmdyYWRlX3dyaXRlXG4iCisJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQorCQkgICAgIDogImEiIChzZW0pLCAiaSIgKC1SV1NFTV9XQUlUSU5HX0JJQVMpCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7Cit9CisKKy8qCisgKiBpbXBsZW1lbnQgYXRvbWljIGFkZCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCisJCSAgICAgOiAiaXIiIChkZWx0YSkpOworfQorCisvKgorICogaW1wbGVtZW50IGV4Y2hhbmdlIGFuZCBhZGQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgaW5saW5lIGludCByd3NlbV9hdG9taWNfdXBkYXRlKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXAgPSBkZWx0YTsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZCAlMCwlMSIKKwkJICAgICA6ICIrciIgKHRtcCksICIrbSIgKHNlbS0+Y291bnQpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKworCXJldHVybiB0bXAgKyBkZWx0YTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcndzZW1faXNfbG9ja2VkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlyZXR1cm4gKHNlbS0+Y291bnQgIT0gMCk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9YODZfUldTRU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzZDM5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9BU01fWDg2X1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworI2lmZGVmIENPTkZJR19ERUJVR19TRworCXVuc2lnbmVkIGxvbmcJc2dfbWFnaWM7CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nCXBhZ2VfbGluazsKKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OworCXVuc2lnbmVkIGludAlsZW5ndGg7CisJZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQJZG1hX2xlbmd0aDsKK307CisKKyNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCisKKy8qCisgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBzZ19kbWFfbGVuKHNnKQkJKChzZyktPmxlbmd0aCkKKyNlbHNlCisjIGRlZmluZSBzZ19kbWFfbGVuKHNnKQkJKChzZyktPmRtYV9sZW5ndGgpCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zZWNjb21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9zZWNjb21wLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3NlY2NvbXAuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjY29tcF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjY29tcF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWQ4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wXzMyLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TRUNDT01QXzMyX0gKKyNkZWZpbmUgX0FTTV9YODZfU0VDQ09NUF8zMl9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCisjaWZkZWYgVElGXzMyQklUCisjZXJyb3IgInVuZXhwZWN0ZWQgVElGXzMyQklUIG9uIGkzODYiCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkIF9fTlJfcmVhZAorI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGUgX19OUl93cml0ZQorI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdCBfX05SX2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybiBfX05SX3NpZ3JldHVybgorCisjZW5kaWYgLyogX0FTTV9YODZfU0VDQ09NUF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWNjb21wXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3MWJiNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY2NvbXBfNjQuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9BU01fWDg2X1NFQ0NPTVBfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9TRUNDT01QXzY0X0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKKyNpZmRlZiBUSUZfMzJCSVQKKyNlcnJvciAidW5leHBlY3RlZCBUSUZfMzJCSVQgb24geDg2XzY0IgorI2Vsc2UKKyNkZWZpbmUgVElGXzMyQklUIFRJRl9JQTMyCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9pYTMyX3VuaXN0ZC5oPgorCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkIF9fTlJfcmVhZAorI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGUgX19OUl93cml0ZQorI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdCBfX05SX2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybiBfX05SX3J0X3NpZ3JldHVybgorCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyIF9fTlJfaWEzMl9yZWFkCisjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZV8zMiBfX05SX2lhMzJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIgX19OUl9pYTMyX2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMiBfX05SX2lhMzJfc2lncmV0dXJuCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TRUNDT01QXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zZWN0aW9ucy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L3NlY3Rpb25zLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlZ21lbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMxYjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VnbWVudC5oCkBAIC0wLDAgKzEsMjA5IEBACisjaWZuZGVmIF9BU01fWDg2X1NFR01FTlRfSAorI2RlZmluZSBfQVNNX1g4Nl9TRUdNRU5UX0gKKworLyogQ29uc3RydWN0b3IgZm9yIGEgY29udmVudGlvbmFsIHNlZ21lbnQgR0RUIChvciBMRFQpIGVudHJ5ICovCisvKiBUaGlzIGlzIGEgbWFjcm8gc28gaXQgY2FuIGJlIHVzZWQgaW4gaW5pdGlhbGl6ZXJzICovCisjZGVmaW5lIEdEVF9FTlRSWShmbGFncywgYmFzZSwgbGltaXQpCQkJXAorCSgoKChiYXNlKSAgJiAweGZmMDAwMDAwVUxMKSA8PCAoNTYtMjQpKSB8CVwKKwkgKCgoZmxhZ3MpICYgMHgwMDAwZjBmZlVMTCkgPDwgNDApIHwJCVwKKwkgKCgobGltaXQpICYgMHgwMDBmMDAwMFVMTCkgPDwgKDQ4LTE2KSkgfAlcCisJICgoKGJhc2UpICAmIDB4MDBmZmZmZmZVTEwpIDw8IDE2KSB8CQlcCisJICgoKGxpbWl0KSAmIDB4MDAwMGZmZmZVTEwpKSkKKworLyogU2ltcGxlIGFuZCBzbWFsbCBHRFQgZW50cmllcyBmb3IgYm9vdGluZyBvbmx5ICovCisKKyNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfQ1MJMgorI2RlZmluZSBfX0JPT1RfQ1MJCShHRFRfRU5UUllfQk9PVF9DUyAqIDgpCisKKyNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfRFMJKEdEVF9FTlRSWV9CT09UX0NTICsgMSkKKyNkZWZpbmUgX19CT09UX0RTCQkoR0RUX0VOVFJZX0JPT1RfRFMgKiA4KQorCisjZGVmaW5lIEdEVF9FTlRSWV9CT09UX1RTUwkoR0RUX0VOVFJZX0JPT1RfQ1MgKyAyKQorI2RlZmluZSBfX0JPT1RfVFNTCQkoR0RUX0VOVFJZX0JPT1RfVFNTICogOCkKKworI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBUaGUgbGF5b3V0IG9mIHRoZSBwZXItQ1BVIEdEVCB1bmRlciBMaW51eDoKKyAqCisgKiAgIDAgLSBudWxsCisgKiAgIDEgLSByZXNlcnZlZAorICogICAyIC0gcmVzZXJ2ZWQKKyAqICAgMyAtIHJlc2VydmVkCisgKgorICogICA0IC0gdW51c2VkCQkJPD09PT0gbmV3IGNhY2hlbGluZQorICogICA1IC0gdW51c2VkCisgKgorICogIC0tLS0tLS0gc3RhcnQgb2YgVExTIChUaHJlYWQtTG9jYWwgU3RvcmFnZSkgc2VnbWVudHM6CisgKgorICogICA2IC0gVExTIHNlZ21lbnQgIzEJCQlbIGdsaWJjJ3MgVExTIHNlZ21lbnQgXQorICogICA3IC0gVExTIHNlZ21lbnQgIzIJCQlbIFdpbmUncyAlZnMgV2luMzIgc2VnbWVudCBdCisgKiAgIDggLSBUTFMgc2VnbWVudCAjMworICogICA5IC0gcmVzZXJ2ZWQKKyAqICAxMCAtIHJlc2VydmVkCisgKiAgMTEgLSByZXNlcnZlZAorICoKKyAqICAtLS0tLS0tIHN0YXJ0IG9mIGtlcm5lbCBzZWdtZW50czoKKyAqCisgKiAgMTIgLSBrZXJuZWwgY29kZSBzZWdtZW50CQk8PT09PSBuZXcgY2FjaGVsaW5lCisgKiAgMTMgLSBrZXJuZWwgZGF0YSBzZWdtZW50CisgKiAgMTQgLSBkZWZhdWx0IHVzZXIgQ1MKKyAqICAxNSAtIGRlZmF1bHQgdXNlciBEUworICogIDE2IC0gVFNTCisgKiAgMTcgLSBMRFQKKyAqICAxOCAtIFBOUEJJT1Mgc3VwcG9ydCAoMTYtPjMyIGdhdGUpCisgKiAgMTkgLSBQTlBCSU9TIHN1cHBvcnQKKyAqICAyMCAtIFBOUEJJT1Mgc3VwcG9ydAorICogIDIxIC0gUE5QQklPUyBzdXBwb3J0CisgKiAgMjIgLSBQTlBCSU9TIHN1cHBvcnQKKyAqICAyMyAtIEFQTSBCSU9TIHN1cHBvcnQKKyAqICAyNCAtIEFQTSBCSU9TIHN1cHBvcnQKKyAqICAyNSAtIEFQTSBCSU9TIHN1cHBvcnQKKyAqCisgKiAgMjYgLSBFU1BGSVggc21hbGwgU1MKKyAqICAyNyAtIHBlci1jcHUJCQlbIG9mZnNldCB0byBwZXItY3B1IGRhdGEgYXJlYSBdCisgKiAgMjggLSB1bnVzZWQKKyAqICAyOSAtIHVudXNlZAorICogIDMwIC0gdW51c2VkCisgKiAgMzEgLSBUU1MgZm9yIGRvdWJsZSBmYXVsdCBoYW5kbGVyCisgKi8KKyNkZWZpbmUgR0RUX0VOVFJZX1RMU19NSU4JNgorI2RlZmluZSBHRFRfRU5UUllfVExTX01BWCAJKEdEVF9FTlRSWV9UTFNfTUlOICsgR0RUX0VOVFJZX1RMU19FTlRSSUVTIC0gMSkKKworI2RlZmluZSBHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTCTE0CisKKyNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUwkxNQorCisjZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfQkFTRQkxMgorCisjZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfQ1MJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAwKQorCisjZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfRFMJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxKQorCisjZGVmaW5lIEdEVF9FTlRSWV9UU1MJCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgNCkKKyNkZWZpbmUgR0RUX0VOVFJZX0xEVAkJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA1KQorCisjZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA2KQorI2RlZmluZSBHRFRfRU5UUllfQVBNQklPU19CQVNFCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMTEpCisKKyNkZWZpbmUgR0RUX0VOVFJZX0VTUEZJWF9TUwkJKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDE0KQorI2RlZmluZSBfX0VTUEZJWF9TUyAoR0RUX0VOVFJZX0VTUEZJWF9TUyAqIDgpCisKKyNkZWZpbmUgR0RUX0VOVFJZX1BFUkNQVQkJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxNSkKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIF9fS0VSTkVMX1BFUkNQVSAoR0RUX0VOVFJZX1BFUkNQVSAqIDgpCisjZWxzZQorI2RlZmluZSBfX0tFUk5FTF9QRVJDUFUgMAorI2VuZGlmCisKKyNkZWZpbmUgR0RUX0VOVFJZX0RPVUJMRUZBVUxUX1RTUwkzMQorCisvKgorICogVGhlIEdEVCBoYXMgMzIgZW50cmllcworICovCisjZGVmaW5lIEdEVF9FTlRSSUVTIDMyCisKKy8qIFRoZSBQblAgQklPUyBlbnRyaWVzIGluIHRoZSBHRFQgKi8KKyNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMgkJKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyAwKQorI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19DUzE2CQkoR0RUX0VOVFJZX1BOUEJJT1NfQkFTRSArIDEpCisjZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX0RTCQkoR0RUX0VOVFJZX1BOUEJJT1NfQkFTRSArIDIpCisjZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX1RTMQkJKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyAzKQorI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19UUzIJCShHRFRfRU5UUllfUE5QQklPU19CQVNFICsgNCkKKworLyogVGhlIFBuUCBCSU9TIHNlbGVjdG9ycyAqLworI2RlZmluZSBQTlBfQ1MzMiAgIChHRFRfRU5UUllfUE5QQklPU19DUzMyICogOCkJLyogc2VnbWVudCBmb3IgY2FsbGluZyBmbiAqLworI2RlZmluZSBQTlBfQ1MxNiAgIChHRFRfRU5UUllfUE5QQklPU19DUzE2ICogOCkJLyogY29kZSBzZWdtZW50IGZvciBCSU9TICovCisjZGVmaW5lIFBOUF9EUyAgICAgKEdEVF9FTlRSWV9QTlBCSU9TX0RTICogOCkJLyogZGF0YSBzZWdtZW50IGZvciBCSU9TICovCisjZGVmaW5lIFBOUF9UUzEgICAgKEdEVF9FTlRSWV9QTlBCSU9TX1RTMSAqIDgpCS8qIHRyYW5zZmVyIGRhdGEgc2VnbWVudCAqLworI2RlZmluZSBQTlBfVFMyICAgIChHRFRfRU5UUllfUE5QQklPU19UUzIgKiA4KQkvKiBhbm90aGVyIGRhdGEgc2VnbWVudCAqLworCisvKiBCb3R0b20gdHdvIGJpdHMgb2Ygc2VsZWN0b3IgZ2l2ZSB0aGUgcmluZyBwcml2aWxlZ2UgbGV2ZWwgKi8KKyNkZWZpbmUgU0VHTUVOVF9SUExfTUFTSwkweDMKKy8qIEJpdCAyIGlzIHRhYmxlIGluZGljYXRvciAoTERUL0dEVCkgKi8KKyNkZWZpbmUgU0VHTUVOVF9USV9NQVNLCQkweDQKKworLyogVXNlciBtb2RlIGlzIHByaXZpbGVnZSBsZXZlbCAzICovCisjZGVmaW5lIFVTRVJfUlBMCQkweDMKKy8qIExEVCBzZWdtZW50IGhhcyBUSSBzZXQsIEdEVCBoYXMgaXQgY2xlYXJlZCAqLworI2RlZmluZSBTRUdNRU5UX0xEVAkJMHg0CisjZGVmaW5lIFNFR01FTlRfR0RUCQkweDAKKworLyoKKyAqIE1hdGNoaW5nIHJ1bGVzIGZvciBjZXJ0YWluIHR5cGVzIG9mIHNlZ21lbnRzLgorICovCisKKy8qIE1hdGNoZXMgUE5QX0NTMzIgYW5kIFBOUF9DUzE2ICh0aGV5IG11c3QgYmUgY29uc2VjdXRpdmUpICovCisjZGVmaW5lIFNFR01FTlRfSVNfUE5QX0NPREUoeCkgICAoKCh4KSAmIDB4ZjQpID09IEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKiA4KQorCisKKyNlbHNlCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisKKyNkZWZpbmUgR0RUX0VOVFJZX0tFUk5FTDMyX0NTIDEKKyNkZWZpbmUgR0RUX0VOVFJZX0tFUk5FTF9DUyAyCisjZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfRFMgMworCisjZGVmaW5lIF9fS0VSTkVMMzJfQ1MgICAoR0RUX0VOVFJZX0tFUk5FTDMyX0NTICogOCkKKworLyoKKyAqIHdlIGNhbm5vdCB1c2UgdGhlIHNhbWUgY29kZSBzZWdtZW50IGRlc2NyaXB0b3IgZm9yIHVzZXIgYW5kIGtlcm5lbAorICogLS0gbm90IGV2ZW4gaW4gdGhlIGxvbmcgZmxhdCBtb2RlLCBiZWNhdXNlIG9mIGRpZmZlcmVudCBEUEwgL2trZWlsCisgKiBUaGUgc2VnbWVudCBvZmZzZXQgbmVlZHMgdG8gY29udGFpbiBhIFJQTC4gR3JyLiAtQUsKKyAqIEdEVCBsYXlvdXQgdG8gZ2V0IDY0Yml0IHN5c2NhbGwgcmlnaHQgKHN5c3JldCBoYXJkY29kZXMgZ2R0IG9mZnNldHMpCisgKi8KKyNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTIDQKKyNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUyA1CisjZGVmaW5lIEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1MgNgorI2RlZmluZSBfX1VTRVIzMl9DUyAgIChHRFRfRU5UUllfREVGQVVMVF9VU0VSMzJfQ1MgKiA4ICsgMykKKyNkZWZpbmUgX19VU0VSMzJfRFMJX19VU0VSX0RTCisKKyNkZWZpbmUgR0RUX0VOVFJZX1RTUyA4CS8qIG5lZWRzIHR3byBlbnRyaWVzICovCisjZGVmaW5lIEdEVF9FTlRSWV9MRFQgMTAgLyogbmVlZHMgdHdvIGVudHJpZXMgKi8KKyNkZWZpbmUgR0RUX0VOVFJZX1RMU19NSU4gMTIKKyNkZWZpbmUgR0RUX0VOVFJZX1RMU19NQVggMTQKKworI2RlZmluZSBHRFRfRU5UUllfUEVSX0NQVSAxNQkvKiBBYnVzZWQgdG8gbG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBsaW1pdCAqLworI2RlZmluZSBfX1BFUl9DUFVfU0VHCShHRFRfRU5UUllfUEVSX0NQVSAqIDggKyAzKQorCisvKiBUTFMgaW5kZXhlcyBmb3IgNjRiaXQgLSBoYXJkY29kZWQgaW4gYXJjaF9wcmN0bCAqLworI2RlZmluZSBGU19UTFMgMAorI2RlZmluZSBHU19UTFMgMQorCisjZGVmaW5lIEdTX1RMU19TRUwgKChHRFRfRU5UUllfVExTX01JTitHU19UTFMpKjggKyAzKQorI2RlZmluZSBGU19UTFNfU0VMICgoR0RUX0VOVFJZX1RMU19NSU4rRlNfVExTKSo4ICsgMykKKworI2RlZmluZSBHRFRfRU5UUklFUyAxNgorCisjZW5kaWYKKworI2RlZmluZSBfX0tFUk5FTF9DUwkoR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCisjZGVmaW5lIF9fS0VSTkVMX0RTCShHRFRfRU5UUllfS0VSTkVMX0RTICogOCkKKyNkZWZpbmUgX19VU0VSX0RTICAgICAoR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUyogOCArIDMpCisjZGVmaW5lIF9fVVNFUl9DUyAgICAgKEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1MqIDggKyAzKQorI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKKyNkZWZpbmUgZ2V0X2tlcm5lbF9ycGwoKSAgMAorI2VuZGlmCisKKy8qIFVzZXIgbW9kZSBpcyBwcml2aWxlZ2UgbGV2ZWwgMyAqLworI2RlZmluZSBVU0VSX1JQTAkJMHgzCisvKiBMRFQgc2VnbWVudCBoYXMgVEkgc2V0LCBHRFQgaGFzIGl0IGNsZWFyZWQgKi8KKyNkZWZpbmUgU0VHTUVOVF9MRFQJCTB4NAorI2RlZmluZSBTRUdNRU5UX0dEVAkJMHgwCisKKy8qIEJvdHRvbSB0d28gYml0cyBvZiBzZWxlY3RvciBnaXZlIHRoZSByaW5nIHByaXZpbGVnZSBsZXZlbCAqLworI2RlZmluZSBTRUdNRU5UX1JQTF9NQVNLCTB4MworLyogQml0IDIgaXMgdGFibGUgaW5kaWNhdG9yIChMRFQvR0RUKSAqLworI2RlZmluZSBTRUdNRU5UX1RJX01BU0sJCTB4NAorCisjZGVmaW5lIElEVF9FTlRSSUVTIDI1NgorI2RlZmluZSBOVU1fRVhDRVBUSU9OX1ZFQ1RPUlMgMzIKKyNkZWZpbmUgR0RUX1NJWkUgKEdEVF9FTlRSSUVTICogOCkKKyNkZWZpbmUgR0RUX0VOVFJZX1RMU19FTlRSSUVTIDMKKyNkZWZpbmUgVExTX1NJWkUgKEdEVF9FTlRSWV9UTFNfRU5UUklFUyAqIDgpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIGNvbnN0IGNoYXIgZWFybHlfaWR0X2hhbmRsZXJzW05VTV9FWENFUFRJT05fVkVDVE9SU11bMTBdOworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VtYnVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTUwYzgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VtYnVmLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TRU1CVUZfSAorI2RlZmluZSBfQVNNX1g4Nl9TRU1CVUZfSAorCisvKgorICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciB4ODYgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VyaWFsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjhjODAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VyaWFsLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TRVJJQUxfSAorI2RlZmluZSBfQVNNX1g4Nl9TRVJJQUxfSAorCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgorICoKKyAqIEl0J2QgYmUgbmljZSBpZiBzb21lb25lIGJ1aWx0IGEgc2VyaWFsIGNhcmQgd2l0aCBhIDI0LjU3NiBNSHoKKyAqIGNsb2NrLCBzaW5jZSB0aGUgMTY1NTBBIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgYSB0b3Agc3BlZWQgb2YgMS41CisgKiBtZWdhYml0cy9zZWNvbmQ7IGJ1dCB0aGlzIHJlcXVpcmVzIHRoZSBmYXN0ZXIgY2xvY2suCisgKi8KKyNkZWZpbmUgQkFTRV9CQVVEICggMTg0MzIwMCAvIDE2ICkKKworLyogU3RhbmRhcmQgQ09NIGZsYWdzIChleGNlcHQgZm9yIENPTTQsIGJlY2F1c2Ugb2YgdGhlIDg1MTQgcHJvYmxlbSkgKi8KKyNpZmRlZiBDT05GSUdfU0VSSUFMX0RFVEVDVF9JUlEKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJRKQorI2RlZmluZSBTVERfQ09NNF9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX0FVVE9fSVJRKQorI2Vsc2UKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCkKKyNkZWZpbmUgU1REX0NPTTRfRkxBR1MgQVNZTkNfQk9PVF9BVVRPQ09ORgorI2VuZGlmCisKKyNkZWZpbmUgU0VSSUFMX1BPUlRfREZOUwkJCVwKKwkvKiBVQVJUIENMSyAgIFBPUlQgSVJRICAgICBGTEFHUyAgICAgICAgKi8JCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyRjgsIDMsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDNFOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkU4LCAzLCBTVERfQ09NNF9GTEFHUyB9LAkvKiB0dHlTMyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMmQzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIF9BU01fWDg2X1NFVFVQX0gKKyNkZWZpbmUgX0FTTV9YODZfU0VUVVBfSAorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDIwNDgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogSW50ZXJydXB0IGNvbnRyb2wgZm9yIHZTTVBvd2VyZWQgeDg2XzY0IHN5c3RlbXMgKi8KK3ZvaWQgdnNtcF9pbml0KHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9WSVNXUworZXh0ZXJuIHZvaWQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpOworZXh0ZXJuIGludCBpc192aXN3c19ib3godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Zpc3dzX2JveCh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworLyoKKyAqIEFueSBzZXR1cCBxdWlya3MgdG8gYmUgcGVyZm9ybWVkPworICovCitzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3I7CitzdHJ1Y3QgbXBjX2NvbmZpZ19idXM7CitzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlOworc3RydWN0IHg4Nl9xdWlya3MgeworCWludCAoKmFyY2hfcHJlX3RpbWVfaW5pdCkodm9pZCk7CisJaW50ICgqYXJjaF90aW1lX2luaXQpKHZvaWQpOworCWludCAoKmFyY2hfcHJlX2ludHJfaW5pdCkodm9pZCk7CisJaW50ICgqYXJjaF9pbnRyX2luaXQpKHZvaWQpOworCWludCAoKmFyY2hfdHJhcF9pbml0KSh2b2lkKTsKKwljaGFyICogKCphcmNoX21lbW9yeV9zZXR1cCkodm9pZCk7CisJaW50ICgqbWFjaF9nZXRfc21wX2NvbmZpZykodW5zaWduZWQgaW50IGVhcmx5KTsKKwlpbnQgKCptYWNoX2ZpbmRfc21wX2NvbmZpZykodW5zaWduZWQgaW50IHJlc2VydmUpOworCisJaW50ICptcGNfcmVjb3JkOworCWludCAoKm1wY19hcGljX2lkKShzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pOworCXZvaWQgKCptcGNfb2VtX2J1c19pbmZvKShzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIGNoYXIgKm5hbWUpOworCXZvaWQgKCptcGNfb2VtX3BjaV9idXMpKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSk7CisJdm9pZCAoKnNtcF9yZWFkX21wY19vZW0pKHN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKm9lbXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2Vtc2l6ZSk7CisJaW50ICgqc2V0dXBfaW9hcGljX2lkcykodm9pZCk7Cit9OworCitleHRlcm4gc3RydWN0IHg4Nl9xdWlya3MgKng4Nl9xdWlya3M7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF92aWRlb19tb2RlOworCisjaWZuZGVmIENPTkZJR19QQVJBVklSVAorI2RlZmluZSBwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIF9faTM4Nl9fCisKKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKy8qCisgKiBSZXNlcnZlZCBzcGFjZSBmb3Igdm1hbGxvYyBhbmQgaW9tYXAgLSBkZWZpbmVkIGluIGFzbS9wYWdlLmgKKyAqLworI2RlZmluZSBNQVhNRU1fUEZOCVBGTl9ET1dOKE1BWE1FTSkKKyNkZWZpbmUgTUFYX05PTlBBRV9QRk4JKDEgPDwgMjApCisKKyNlbmRpZiAvKiBfX2kzODZfXyAqLworCisjZGVmaW5lIFBBUkFNX1NJWkUgNDA5NgkJLyogc2l6ZW9mKHN0cnVjdCBib290X3BhcmFtcykgKi8KKworI2RlZmluZSBPTERfQ0xfTUFHSUMJCTB4QTMzRgorI2RlZmluZSBPTERfQ0xfQUREUkVTUwkJMHgwMjAJLyogUmVsYXRpdmUgdG8gcmVhbCBtb2RlIGRhdGEgKi8KKyNkZWZpbmUgTkVXX0NMX1BPSU5URVIJCTB4MjI4CS8qIFJlbGF0aXZlIHRvIHJlYWwgbW9kZSBkYXRhICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgorCisjaWZuZGVmIF9TRVRVUAorCisvKgorICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCisgKi8KK2V4dGVybiBzdHJ1Y3QgYm9vdF9wYXJhbXMgYm9vdF9wYXJhbXM7CisKKy8qCisgKiBEbyBOT1QgRVZFUiBsb29rIGF0IHRoZSBCSU9TIG1lbW9yeSBzaXplIGxvY2F0aW9uLgorICogSXQgZG9lcyBub3Qgd29yayBvbiBtYW55IG1hY2hpbmVzLgorICovCisjZGVmaW5lIExPV01FTVNJWkUoKQkoMHg5ZjAwMCkKKworI2lmZGVmIF9faTM4Nl9fCisKK3ZvaWQgX19pbml0IGkzODZfc3RhcnRfa2VybmVsKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJvYmVfcm9tcyh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19lbmQ7CisKKyNlbHNlCit2b2lkIF9faW5pdCB4ODZfNjRfaW5pdF9wZGEodm9pZCk7Cit2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKnJlYWxfbW9kZSk7Cit2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfcmVzZXJ2YXRpb25zKGNoYXIgKnJlYWxfbW9kZV9kYXRhKTsKKworI2VuZGlmIC8qIF9faTM4Nl9fICovCisjZW5kaWYgLyogX1NFVFVQICovCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLworCisjZW5kaWYgLyogX0FTTV9YODZfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2htYnVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaG1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTE0MTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2htYnVmLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TSE1CVUZfSAorI2RlZmluZSBfQVNNX1g4Nl9TSE1CVUZfSAorCisvKgorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciB4ODYgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2Ugb24gMzIgYml0IGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqCisgKiBQYWQgc3BhY2Ugb24gNjQgYml0IGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisjaWZkZWYgX19pMzg2X18KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisjZW5kaWYKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworI2lmZGVmIF9faTM4Nl9fCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworI2VuZGlmCisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKyNpZmRlZiBfX2kzODZfXworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKyNlbmRpZgorCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ1OworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FTTV9YODZfU0hNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NobXBhcmFtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ODBjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaG1wYXJhbS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TSE1QQVJBTV9ICisjZGVmaW5lIF9BU01fWDg2X1NITVBBUkFNX0gKKworI2RlZmluZSBTSE1MQkEgUEFHRV9TSVpFCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1NITVBBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWZjYjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMjg0IEBACisjaWZuZGVmIF9BU01fWDg2X1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX1g4Nl9TSUdDT05URVhUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgRlBfWFNUQVRFX01BR0lDMQkweDQ2NTA1ODUzVQorI2RlZmluZSBGUF9YU1RBVEVfTUFHSUMyCTB4NDY1MDU4NDVVCisjZGVmaW5lIEZQX1hTVEFURV9NQUdJQzJfU0laRQlzaXplb2YoRlBfWFNUQVRFX01BR0lDMikKKworLyoKKyAqIGJ5dGVzIDQ2NC4uNTExIGluIHRoZSBjdXJyZW50IDUxMmJ5dGUgbGF5b3V0IG9mIGZ4c2F2ZS9meHJzdG9yIGZyYW1lCisgKiBhcmUgcmVzZXJ2ZWQgZm9yIFNXIHVzYWdlLiBPbiBjcHUncyBzdXBwb3J0aW5nIHhzYXZlL3hyc3RvciwgdGhlc2UgYnl0ZXMKKyAqIGFyZSB1c2VkIHRvIGV4dGVuZGVkIHRoZSBmcHN0YXRlIHBvaW50ZXIgaW4gdGhlIHNpZ2NvbnRleHQsIHdoaWNoIG5vdworICogaW5jbHVkZXMgdGhlIGV4dGVuZGVkIHN0YXRlIGluZm9ybWF0aW9uIGFsb25nIHdpdGggZnBzdGF0ZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBQcmVzZW5jZSBvZiBGUF9YU1RBVEVfTUFHSUMxIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBTVyByZXNlcnZlZAorICogYXJlYSBhbmQgRlBfWFNUQVRFX01BR0lDMiBhdCB0aGUgZW5kIG9mIG1lbW9yeSBsYXlvdXQKKyAqIChleHRlbmRlZF9zaXplIC0gRlBfWFNUQVRFX01BR0lDMl9TSVpFKSBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIHRoZQorICogZXh0ZW5kZWQgc3RhdGUgaW5mb3JtYXRpb24gaW4gdGhlIG1lbW9yeSBsYXlvdXQgcG9pbnRlZCBieSB0aGUgZnBzdGF0ZQorICogcG9pbnRlciBpbiBzaWdjb250ZXh0LgorICovCitzdHJ1Y3QgX2ZweF9zd19ieXRlcyB7CisJX191MzIgbWFnaWMxOwkJLyogRlBfWFNUQVRFX01BR0lDMSAqLworCV9fdTMyIGV4dGVuZGVkX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgdGhlIGxheW91dCByZWZlcnJlZCBieQorCQkJCSAqIGZwc3RhdGUgcG9pbnRlciBpbiB0aGUgc2lnY29udGV4dC4KKwkJCQkgKi8KKwlfX3U2NCB4c3RhdGVfYnY7CisJCQkJLyogZmVhdHVyZSBiaXQgbWFzayAoaW5jbHVkaW5nIGZwL3NzZS9leHRlbmRlZAorCQkJCSAqIHN0YXRlKSB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIG1lbW9yeQorCQkJCSAqIGxheW91dC4KKwkJCQkgKi8KKwlfX3UzMiB4c3RhdGVfc2l6ZTsJLyogYWN0dWFsIHhzYXZlIHN0YXRlIHNpemUsIGJhc2VkIG9uIHRoZQorCQkJCSAqIGZlYXR1cmVzIHNhdmVkIGluIHRoZSBsYXlvdXQuCisJCQkJICogJ2V4dGVuZGVkX3NpemUnIHdpbGwgYmUgZ3JlYXRlciB0aGFuCisJCQkJICogJ3hzdGF0ZV9zaXplJy4KKwkJCQkgKi8KKwlfX3UzMiBwYWRkaW5nWzddOwkvKiAgZm9yIGZ1dHVyZSB1c2UuICovCit9OworCisjaWZkZWYgX19pMzg2X18KKy8qCisgKiBBcyBkb2N1bWVudGVkIGluIHRoZSBpQkNTMiBzdGFuZGFyZC4uCisgKgorICogVGhlIGZpcnN0IHBhcnQgb2YgInN0cnVjdCBfZnBzdGF0ZSIgaXMganVzdCB0aGUgbm9ybWFsIGkzODcKKyAqIGhhcmR3YXJlIHNldHVwLCB0aGUgZXh0cmEgInN0YXR1cyIgd29yZCBpcyB1c2VkIHRvIHNhdmUgdGhlCisgKiBjb3Byb2Nlc3NvciBzdGF0dXMgd29yZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGhhbmRsZXIuCisgKgorICogUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKKyAqCUdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCisgKgorICogVGhlIEZQVSBzdGF0ZSBkYXRhIHN0cnVjdHVyZSBoYXMgaGFkIHRvIGdyb3cgdG8gYWNjb21tb2RhdGUgdGhlCisgKiBleHRlbmRlZCBGUFUgc3RhdGUgcmVxdWlyZWQgYnkgdGhlIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMuCisgKiBUaGVyZSBpcyBubyBkb2N1bWVudGVkIHN0YW5kYXJkIHRvIGFjY29tcGxpc2ggdGhpcyBhdCB0aGUgbW9tZW50LgorICovCitzdHJ1Y3QgX2ZwcmVnIHsKKwl1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKKwl1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKK307CisKK3N0cnVjdCBfZnB4cmVnIHsKKwl1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKKwl1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKKwl1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOworfTsKKworc3RydWN0IF94bW1yZWcgeworCXVuc2lnbmVkIGxvbmcgZWxlbWVudFs0XTsKK307CisKK3N0cnVjdCBfZnBzdGF0ZSB7CisJLyogUmVndWxhciBGUFUgZW52aXJvbm1lbnQgKi8KKwl1bnNpZ25lZCBsb25nCWN3OworCXVuc2lnbmVkIGxvbmcJc3c7CisJdW5zaWduZWQgbG9uZwl0YWc7CisJdW5zaWduZWQgbG9uZwlpcG9mZjsKKwl1bnNpZ25lZCBsb25nCWNzc2VsOworCXVuc2lnbmVkIGxvbmcJZGF0YW9mZjsKKwl1bnNpZ25lZCBsb25nCWRhdGFzZWw7CisJc3RydWN0IF9mcHJlZwlfc3RbOF07CisJdW5zaWduZWQgc2hvcnQJc3RhdHVzOworCXVuc2lnbmVkIHNob3J0CW1hZ2ljOwkJLyogMHhmZmZmID0gcmVndWxhciBGUFUgZGF0YSBvbmx5ICovCisKKwkvKiBGWFNSIEZQVSBlbnZpcm9ubWVudCAqLworCXVuc2lnbmVkIGxvbmcJX2Z4c3JfZW52WzZdOwkvKiBGWFNSIEZQVSBlbnYgaXMgaWdub3JlZCAqLworCXVuc2lnbmVkIGxvbmcJbXhjc3I7CisJdW5zaWduZWQgbG9uZwlyZXNlcnZlZDsKKwlzdHJ1Y3QgX2ZweHJlZwlfZnhzcl9zdFs4XTsJLyogRlhTUiBGUFUgcmVnIGRhdGEgaXMgaWdub3JlZCAqLworCXN0cnVjdCBfeG1tcmVnCV94bW1bOF07CisJdW5zaWduZWQgbG9uZwlwYWRkaW5nMVs0NF07CisKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcJcGFkZGluZzJbMTJdOworCQlzdHJ1Y3QgX2ZweF9zd19ieXRlcyBzd19yZXNlcnZlZDsgLyogcmVwcmVzZW50cyB0aGUgZXh0ZW5kZWQKKwkJCQkJCSAgICogc3RhdGUgaW5mbyAqLworCX07Cit9OworCisjZGVmaW5lIFg4Nl9GWFNSX01BR0lDCQkweDAwMDAKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7CisJdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOworCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKKwl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CisJdW5zaWduZWQgbG9uZyBkaTsKKwl1bnNpZ25lZCBsb25nIHNpOworCXVuc2lnbmVkIGxvbmcgYnA7CisJdW5zaWduZWQgbG9uZyBzcDsKKwl1bnNpZ25lZCBsb25nIGJ4OworCXVuc2lnbmVkIGxvbmcgZHg7CisJdW5zaWduZWQgbG9uZyBjeDsKKwl1bnNpZ25lZCBsb25nIGF4OworCXVuc2lnbmVkIGxvbmcgdHJhcG5vOworCXVuc2lnbmVkIGxvbmcgZXJyOworCXVuc2lnbmVkIGxvbmcgaXA7CisJdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzcF9hdF9zaWduYWw7CisJdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOworCisJLyoKKwkgKiBmcHN0YXRlIGlzIHJlYWxseSAoc3RydWN0IF9mcHN0YXRlICopIG9yIChzdHJ1Y3QgX3hzdGF0ZSAqKQorCSAqIGRlcGVuZGluZyBvbiB0aGUgRlBfWFNUQVRFX01BR0lDMSBlbmNvZGVkIGluIHRoZSBTVyByZXNlcnZlZAorCSAqIGJ5dGVzIG9mIChzdHJ1Y3QgX2Zwc3RhdGUpIGFuZCBGUF9YU1RBVEVfTUFHSUMyIHByZXNlbnQgYXQgdGhlIGVuZAorCSAqIG9mIGV4dGVuZGVkIG1lbW9yeSBsYXlvdXQuIFNlZSBjb21tZW50cyBhdCB0aGUgZGVmaW50aW9uIG9mCisJICogKHN0cnVjdCBfZnB4X3N3X2J5dGVzKQorCSAqLworCXZvaWQgX191c2VyICpmcHN0YXRlOwkJLyogemVybyB3aGVuIG5vIEZQVS9leHRlbmRlZCBjb250ZXh0ICovCisJdW5zaWduZWQgbG9uZyBvbGRtYXNrOworCXVuc2lnbmVkIGxvbmcgY3IyOworfTsKKyNlbHNlIC8qIF9fS0VSTkVMX18gKi8KKy8qCisgKiBVc2VyLXNwYWNlIG1pZ2h0IHN0aWxsIHJlbHkgb24gdGhlIG9sZCBkZWZpbml0aW9uOgorICovCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOworCXVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKKwl1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CisJdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOworCXVuc2lnbmVkIGxvbmcgZWRpOworCXVuc2lnbmVkIGxvbmcgZXNpOworCXVuc2lnbmVkIGxvbmcgZWJwOworCXVuc2lnbmVkIGxvbmcgZXNwOworCXVuc2lnbmVkIGxvbmcgZWJ4OworCXVuc2lnbmVkIGxvbmcgZWR4OworCXVuc2lnbmVkIGxvbmcgZWN4OworCXVuc2lnbmVkIGxvbmcgZWF4OworCXVuc2lnbmVkIGxvbmcgdHJhcG5vOworCXVuc2lnbmVkIGxvbmcgZXJyOworCXVuc2lnbmVkIGxvbmcgZWlwOworCXVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKKwl1bnNpZ25lZCBsb25nIGVmbGFnczsKKwl1bnNpZ25lZCBsb25nIGVzcF9hdF9zaWduYWw7CisJdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwc3RhdGU7CisJdW5zaWduZWQgbG9uZyBvbGRtYXNrOworCXVuc2lnbmVkIGxvbmcgY3IyOworfTsKKyNlbmRpZiAvKiAhX19LRVJORUxfXyAqLworCisjZWxzZSAvKiBfX2kzODZfXyAqLworCisvKiBGWFNBVkUgZnJhbWUgKi8KKy8qIE5vdGU6IHJlc2VydmVkMS8yIG1heSBzb21lZGF5IGNvbnRhaW4gdmFsdWFibGUgZGF0YS4gQWx3YXlzIHNhdmUvcmVzdG9yZQorICAgdGhlbSB3aGVuIHlvdSBjaGFuZ2Ugc2lnbmFsIGZyYW1lcy4gKi8KK3N0cnVjdCBfZnBzdGF0ZSB7CisJX191MTYJY3dkOworCV9fdTE2CXN3ZDsKKwlfX3UxNgl0d2Q7CQkvKiBOb3RlIHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZQorCQkJCSAgIDMyYml0L3g4Ny9GU0FWRSB0d2QgKi8KKwlfX3UxNglmb3A7CisJX191NjQJcmlwOworCV9fdTY0CXJkcDsKKwlfX3UzMglteGNzcjsKKwlfX3UzMglteGNzcl9tYXNrOworCV9fdTMyCXN0X3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgKi8KKwlfX3UzMgl4bW1fc3BhY2VbNjRdOwkvKiAxNioxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnICAqLworCV9fdTMyCXJlc2VydmVkMlsxMl07CisJdW5pb24geworCQlfX3UzMglyZXNlcnZlZDNbMTJdOworCQlzdHJ1Y3QgX2ZweF9zd19ieXRlcyBzd19yZXNlcnZlZDsgLyogcmVwcmVzZW50cyB0aGUgZXh0ZW5kZWQKKwkJCQkJCSAgICogc3RhdGUgaW5mb3JtYXRpb24gKi8KKwl9OworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHI4OworCXVuc2lnbmVkIGxvbmcgcjk7CisJdW5zaWduZWQgbG9uZyByMTA7CisJdW5zaWduZWQgbG9uZyByMTE7CisJdW5zaWduZWQgbG9uZyByMTI7CisJdW5zaWduZWQgbG9uZyByMTM7CisJdW5zaWduZWQgbG9uZyByMTQ7CisJdW5zaWduZWQgbG9uZyByMTU7CisJdW5zaWduZWQgbG9uZyBkaTsKKwl1bnNpZ25lZCBsb25nIHNpOworCXVuc2lnbmVkIGxvbmcgYnA7CisJdW5zaWduZWQgbG9uZyBieDsKKwl1bnNpZ25lZCBsb25nIGR4OworCXVuc2lnbmVkIGxvbmcgYXg7CisJdW5zaWduZWQgbG9uZyBjeDsKKwl1bnNpZ25lZCBsb25nIHNwOworCXVuc2lnbmVkIGxvbmcgaXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBjczsKKwl1bnNpZ25lZCBzaG9ydCBnczsKKwl1bnNpZ25lZCBzaG9ydCBmczsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDA7CisJdW5zaWduZWQgbG9uZyBlcnI7CisJdW5zaWduZWQgbG9uZyB0cmFwbm87CisJdW5zaWduZWQgbG9uZyBvbGRtYXNrOworCXVuc2lnbmVkIGxvbmcgY3IyOworCisJLyoKKwkgKiBmcHN0YXRlIGlzIHJlYWxseSAoc3RydWN0IF9mcHN0YXRlICopIG9yIChzdHJ1Y3QgX3hzdGF0ZSAqKQorCSAqIGRlcGVuZGluZyBvbiB0aGUgRlBfWFNUQVRFX01BR0lDMSBlbmNvZGVkIGluIHRoZSBTVyByZXNlcnZlZAorCSAqIGJ5dGVzIG9mIChzdHJ1Y3QgX2Zwc3RhdGUpIGFuZCBGUF9YU1RBVEVfTUFHSUMyIHByZXNlbnQgYXQgdGhlIGVuZAorCSAqIG9mIGV4dGVuZGVkIG1lbW9yeSBsYXlvdXQuIFNlZSBjb21tZW50cyBhdCB0aGUgZGVmaW50aW9uIG9mCisJICogKHN0cnVjdCBfZnB4X3N3X2J5dGVzKQorCSAqLworCXZvaWQgX191c2VyICpmcHN0YXRlOwkJLyogemVybyB3aGVuIG5vIEZQVS9leHRlbmRlZCBjb250ZXh0ICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDFbOF07Cit9OworI2Vsc2UgLyogX19LRVJORUxfXyAqLworLyoKKyAqIFVzZXItc3BhY2UgbWlnaHQgc3RpbGwgcmVseSBvbiB0aGUgb2xkIGRlZmluaXRpb246CisgKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHI4OworCXVuc2lnbmVkIGxvbmcgcjk7CisJdW5zaWduZWQgbG9uZyByMTA7CisJdW5zaWduZWQgbG9uZyByMTE7CisJdW5zaWduZWQgbG9uZyByMTI7CisJdW5zaWduZWQgbG9uZyByMTM7CisJdW5zaWduZWQgbG9uZyByMTQ7CisJdW5zaWduZWQgbG9uZyByMTU7CisJdW5zaWduZWQgbG9uZyByZGk7CisJdW5zaWduZWQgbG9uZyByc2k7CisJdW5zaWduZWQgbG9uZyByYnA7CisJdW5zaWduZWQgbG9uZyByYng7CisJdW5zaWduZWQgbG9uZyByZHg7CisJdW5zaWduZWQgbG9uZyByYXg7CisJdW5zaWduZWQgbG9uZyByY3g7CisJdW5zaWduZWQgbG9uZyByc3A7CisJdW5zaWduZWQgbG9uZyByaXA7CisJdW5zaWduZWQgbG9uZyBlZmxhZ3M7CQkvKiBSRkxBR1MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjczsKKwl1bnNpZ25lZCBzaG9ydCBnczsKKwl1bnNpZ25lZCBzaG9ydCBmczsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDA7CisJdW5zaWduZWQgbG9uZyBlcnI7CisJdW5zaWduZWQgbG9uZyB0cmFwbm87CisJdW5zaWduZWQgbG9uZyBvbGRtYXNrOworCXVuc2lnbmVkIGxvbmcgY3IyOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwc3RhdGU7CS8qIHplcm8gd2hlbiBubyBGUFUgY29udGV4dCAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQxWzhdOworfTsKKyNlbmRpZiAvKiAhX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIV9faTM4Nl9fICovCisKK3N0cnVjdCBfeHNhdmVfaGRyIHsKKwlfX3U2NCB4c3RhdGVfYnY7CisJX191NjQgcmVzZXJ2ZWQxWzJdOworCV9fdTY0IHJlc2VydmVkMls1XTsKK307CisKKy8qCisgKiBFeHRlbmRlZCBzdGF0ZSBwb2ludGVkIGJ5IHRoZSBmcHN0YXRlIHBvaW50ZXIgaW4gdGhlIHNpZ2NvbnRleHQuCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgZnBzdGF0ZSwgaW5mb3JtYXRpb24gZW5jb2RlZCBpbiB0aGUgeHN0YXRlX2hkcgorICogaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiBvdGhlciBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbgorICogc3VwcG9ydGVkIGJ5IHRoZSBwcm9jZXNzb3IgYW5kIE9TLgorICovCitzdHJ1Y3QgX3hzdGF0ZSB7CisJc3RydWN0IF9mcHN0YXRlIGZwc3RhdGU7CisJc3RydWN0IF94c2F2ZV9oZHIgeHN0YXRlX2hkcjsKKwkvKiBuZXcgcHJvY2Vzc29yIHN0YXRlIGV4dGVuc2lvbnMgZ28gaGVyZSAqLworfTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1NJR0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2lnY29udGV4dDMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaWdjb250ZXh0MzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI2MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2lnY29udGV4dDMyLmgKQEAgLTAsMCArMSw3NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TSUdDT05URVhUMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9TSUdDT05URVhUMzJfSAorCisvKiBzaWduYWwgY29udGV4dCBmb3IgMzJiaXQgcHJvZ3JhbXMuICovCisKKyNkZWZpbmUgWDg2X0ZYU1JfTUFHSUMJCTB4MDAwMAorCitzdHJ1Y3QgX2ZwcmVnIHsKKwl1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKKwl1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKK307CisKK3N0cnVjdCBfZnB4cmVnIHsKKwl1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKKwl1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKKwl1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOworfTsKKworc3RydWN0IF94bW1yZWcgeworCV9fdTMyCWVsZW1lbnRbNF07Cit9OworCisvKiBGU0FWRSBmcmFtZSB3aXRoIGV4dGVuc2lvbnMgKi8KK3N0cnVjdCBfZnBzdGF0ZV9pYTMyIHsKKwkvKiBSZWd1bGFyIEZQVSBlbnZpcm9ubWVudCAqLworCV9fdTMyIAljdzsKKwlfX3UzMglzdzsKKwlfX3UzMgl0YWc7CS8qIG5vdCBjb21wYXRpYmxlIHRvIDY0Yml0IHR3ZCAqLworCV9fdTMyCWlwb2ZmOworCV9fdTMyCWNzc2VsOworCV9fdTMyCWRhdGFvZmY7CisJX191MzIJZGF0YXNlbDsKKwlzdHJ1Y3QgX2ZwcmVnCV9zdFs4XTsKKwl1bnNpZ25lZCBzaG9ydAlzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQJbWFnaWM7CQkvKiAweGZmZmYgPSByZWd1bGFyIEZQVSBkYXRhIG9ubHkgKi8KKworCS8qIEZYU1IgRlBVIGVudmlyb25tZW50ICovCisJX191MzIJX2Z4c3JfZW52WzZdOworCV9fdTMyCW14Y3NyOworCV9fdTMyCXJlc2VydmVkOworCXN0cnVjdCBfZnB4cmVnCV9meHNyX3N0WzhdOworCXN0cnVjdCBfeG1tcmVnCV94bW1bOF07CS8qIEl0J3MgYWN0dWFsbHkgMTYgKi8KKwlfX3UzMglwYWRkaW5nWzQ0XTsKKwl1bmlvbiB7CisJCV9fdTMyIHBhZGRpbmcyWzEyXTsKKwkJc3RydWN0IF9mcHhfc3dfYnl0ZXMgc3dfcmVzZXJ2ZWQ7CisJfTsKK307CisKK3N0cnVjdCBzaWdjb250ZXh0X2lhMzIgeworICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKKyAgICAgICB1bnNpZ25lZCBzaG9ydCBmcywgX19mc2g7CisgICAgICAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOworICAgICAgIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKKyAgICAgICB1bnNpZ25lZCBpbnQgZGk7CisgICAgICAgdW5zaWduZWQgaW50IHNpOworICAgICAgIHVuc2lnbmVkIGludCBicDsKKyAgICAgICB1bnNpZ25lZCBpbnQgc3A7CisgICAgICAgdW5zaWduZWQgaW50IGJ4OworICAgICAgIHVuc2lnbmVkIGludCBkeDsKKyAgICAgICB1bnNpZ25lZCBpbnQgY3g7CisgICAgICAgdW5zaWduZWQgaW50IGF4OworICAgICAgIHVuc2lnbmVkIGludCB0cmFwbm87CisgICAgICAgdW5zaWduZWQgaW50IGVycjsKKyAgICAgICB1bnNpZ25lZCBpbnQgaXA7CisgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOworICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICAgICB1bnNpZ25lZCBpbnQgc3BfYXRfc2lnbmFsOworICAgICAgIHVuc2lnbmVkIHNob3J0IHNzLCBfX3NzaDsKKyAgICAgICB1bnNpZ25lZCBpbnQgZnBzdGF0ZTsJCS8qIHJlYWxseSAoc3RydWN0IF9mcHN0YXRlX2lhMzIgKikgKi8KKyAgICAgICB1bnNpZ25lZCBpbnQgb2xkbWFzazsKKyAgICAgICB1bnNpZ25lZCBpbnQgY3IyOworfTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1NJR0NPTlRFWFQzMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaWdpbmZvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxYWE1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NpZ2luZm8uaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9BU01fWDg2X1NJR0lORk9fSAorI2RlZmluZSBfQVNNX1g4Nl9TSUdJTkZPX0gKKworI2lmZGVmIF9feDg2XzY0X18KKyMgZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFCSg0ICogc2l6ZW9mKGludCkpCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2VuZGlmIC8qIF9BU01fWDg2X1NJR0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2lnbmFsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFjNDRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwyNjIgQEAKKyNpZm5kZWYgX0FTTV9YODZfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTV9YODZfU0lHTkFMX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKworI2lmZGVmIF9faTM4Nl9fCisjIGRlZmluZSBfTlNJR19CUFcJMzIKKyNlbHNlCisjIGRlZmluZSBfTlNJR19CUFcJNjQKKyNlbmRpZgorCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKKyAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgorICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KKyAqCisgKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCisgKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDF1CisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAydQorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDR1CisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMHUKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwdQorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDB1CisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwdQorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAorCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmZGVmIF9faTM4Nl9fCisjIGlmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Cit9OworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7CisJc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKworZXh0ZXJuIHZvaWQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqLCB2b2lkICosIF9fdTMyKTsKKworIyBlbHNlIC8qIF9fS0VSTkVMX18gKi8KKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjIGVuZGlmIC8qICEgX19LRVJORUxfXyAqLworI2Vsc2UgLyogX19pMzg2X18gKi8KKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisKKyNlbmRpZiAvKiAhX19pMzg2X18gKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQgX191c2VyICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworI2lmZGVmIF9faTM4Nl9fCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUworCisjZGVmaW5lIHNpZ2FkZHNldChzZXQsc2lnKQkJICAgIFwKKwkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKQkgICAgXAorCSA/IF9fY29uc3Rfc2lnYWRkc2V0KChzZXQpLCAoc2lnKSkgIFwKKwkgOiBfX2dlbl9zaWdhZGRzZXQoKHNldCksIChzaWcpKSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fZ2VuX3NpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlhc20oImJ0c2wgJTEsJTAiIDogIittIigqc2V0KSA6ICJJciIoX3NpZyAtIDEpIDogImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvbnN0X3NpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOworCXNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gfD0gMSA8PCAoc2lnICUgX05TSUdfQlBXKTsKK30KKworI2RlZmluZSBzaWdkZWxzZXQoc2V0LCBzaWcpCQkgICAgXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChzaWcpCSAgICBcCisJID8gX19jb25zdF9zaWdkZWxzZXQoKHNldCksIChzaWcpKSAgXAorCSA6IF9fZ2VuX3NpZ2RlbHNldCgoc2V0KSwgKHNpZykpKQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2dlbl9zaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJYXNtKCJidHJsICUxLCUwIiA6ICIrbSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jb25zdF9zaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKKwlzZXQtPnNpZ1tzaWcgLyBfTlNJR19CUFddICY9IH4oMSA8PCAoc2lnICUgX05TSUdfQlBXKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29uc3Rfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKKwlyZXR1cm4gMSAmIChzZXQtPnNpZ1tzaWcgLyBfTlNJR19CUFddID4+IChzaWcgJSBfTlNJR19CUFcpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19nZW5fc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJaW50IHJldDsKKwlhc20oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCSAgICA6ICI9ciIocmV0KSA6ICJtIigqc2V0KSwgIklyIihfc2lnLTEpIDogImNjIik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBzaWdpc21lbWJlcihzZXQsIHNpZykJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpZykJCVwKKwkgPyBfX2NvbnN0X3NpZ2lzbWVtYmVyKChzZXQpLCAoc2lnKSkJXAorCSA6IF9fZ2VuX3NpZ2lzbWVtYmVyKChzZXQpLCAoc2lnKSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3JkKQoreworCWFzbSgiYnNmbCAlMSwlMCIgOiAiPXIiKHdvcmQpIDogInJtIih3b3JkKSA6ICJjYyIpOworCXJldHVybiB3b3JkOworfQorCitzdHJ1Y3QgcHRfcmVnczsKKworI2Vsc2UgLyogX19pMzg2X18gKi8KKworI3VuZGVmIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKKworI2VuZGlmIC8qICFfX2kzODZfXyAqLworCisjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NjYwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMCwwICsxLDIyOSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TTVBfSAorI2RlZmluZSBfQVNNX1g4Nl9TTVBfSAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKworLyoKKyAqIFdlIG5lZWQgdGhlIEFQSUMgZGVmaW5pdGlvbnMgYXV0b21hdGljYWxseSBhcyBwYXJ0IG9mICdzbXAuaCcKKyAqLworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworIyBpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjIGluY2x1ZGUgPGFzbS9hcGljLmg+CisjIGlmZGVmIENPTkZJR19YODZfSU9fQVBJQworIyAgaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9wZGEuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CitleHRlcm4gY3B1bWFza190IGNwdV9pbml0aWFsaXplZDsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CisKK2V4dGVybiB2b2lkICgqbXRycl9ob29rKSh2b2lkKTsKK2V4dGVybiB2b2lkIHphcF9sb3dfbWFwcGluZ3Modm9pZCk7CisKK2V4dGVybiBpbnQgX19jcHVpbml0IGdldF9sb2NhbF9wZGEoaW50IGNwdSk7CisKK2V4dGVybiBpbnQgc21wX251bV9zaWJsaW5nczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NvcnM7CitleHRlcm4gY3B1bWFza190IGNwdV9pbml0aWFsaXplZDsKKworREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X3NpYmxpbmdfbWFwKTsKK0RFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9jb3JlX21hcCk7CitERUNMQVJFX1BFUl9DUFUodTE2LCBjcHVfbGxjX2lkKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfbnVtYmVyKTsKKyNlbmRpZgorCitERUNMQVJFX0VBUkxZX1BFUl9DUFUodTE2LCB4ODZfY3B1X3RvX2FwaWNpZCk7CitERUNMQVJFX0VBUkxZX1BFUl9DUFUodTE2LCB4ODZfYmlvc19jcHVfYXBpY2lkKTsKKworLyogU3RhdGljIHN0YXRlIGluIGhlYWQuUyB1c2VkIHRvIHNldCB1cCBhIENQVSAqLworZXh0ZXJuIHN0cnVjdCB7CisJdm9pZCAqc3A7CisJdW5zaWduZWQgc2hvcnQgc3M7Cit9IHN0YWNrX3N0YXJ0OworCitzdHJ1Y3Qgc21wX29wcyB7CisJdm9pZCAoKnNtcF9wcmVwYXJlX2Jvb3RfY3B1KSh2b2lkKTsKKwl2b2lkICgqc21wX3ByZXBhcmVfY3B1cykodW5zaWduZWQgbWF4X2NwdXMpOworCXZvaWQgKCpzbXBfY3B1c19kb25lKSh1bnNpZ25lZCBtYXhfY3B1cyk7CisKKwl2b2lkICgqc21wX3NlbmRfc3RvcCkodm9pZCk7CisJdm9pZCAoKnNtcF9zZW5kX3Jlc2NoZWR1bGUpKGludCBjcHUpOworCisJaW50ICgqY3B1X3VwKSh1bnNpZ25lZCBjcHUpOworCWludCAoKmNwdV9kaXNhYmxlKSh2b2lkKTsKKwl2b2lkICgqY3B1X2RpZSkodW5zaWduZWQgaW50IGNwdSk7CisJdm9pZCAoKnBsYXlfZGVhZCkodm9pZCk7CisKKwl2b2lkICgqc2VuZF9jYWxsX2Z1bmNfaXBpKShjcHVtYXNrX3QgbWFzayk7CisJdm9pZCAoKnNlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkpKGludCBjcHUpOworfTsKKworLyogR2xvYmFscyBkdWUgdG8gcGFyYXZpcnQgKi8KK2V4dGVybiB2b2lkIHNldF9jcHVfc2libGluZ19tYXAoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfU01QCisjaWZuZGVmIENPTkZJR19QQVJBVklSVAorI2RlZmluZSBzdGFydHVwX2lwaV9ob29rKHBoeXNfYXBpY2lkLCBzdGFydF9laXAsIHN0YXJ0X2VzcCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCitleHRlcm4gc3RydWN0IHNtcF9vcHMgc21wX29wczsKKworc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKK3sKKwlzbXBfb3BzLnNtcF9zZW5kX3N0b3AoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCit7CisJc21wX29wcy5zbXBfcHJlcGFyZV9ib290X2NwdSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJc21wX29wcy5zbXBfcHJlcGFyZV9jcHVzKG1heF9jcHVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCXNtcF9vcHMuc21wX2NwdXNfZG9uZShtYXhfY3B1cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHNtcF9vcHMuY3B1X3VwKGNwdSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1X2Rpc2FibGUodm9pZCkKK3sKKwlyZXR1cm4gc21wX29wcy5jcHVfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisJc21wX29wcy5jcHVfZGllKGNwdSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF5X2RlYWQodm9pZCkKK3sKKwlzbXBfb3BzLnBsYXlfZGVhZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQoreworCXNtcF9vcHMuc21wX3NlbmRfcmVzY2hlZHVsZShjcHUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQoreworCXNtcF9vcHMuc2VuZF9jYWxsX2Z1bmNfc2luZ2xlX2lwaShjcHUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKQoreworCXNtcF9vcHMuc2VuZF9jYWxsX2Z1bmNfaXBpKG1hc2spOworfQorCit2b2lkIGNwdV9kaXNhYmxlX2NvbW1vbih2b2lkKTsKK3ZvaWQgbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpOwordm9pZCBuYXRpdmVfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwordm9pZCBuYXRpdmVfc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOworaW50IG5hdGl2ZV9jcHVfdXAodW5zaWduZWQgaW50IGNwdW51bSk7CitpbnQgbmF0aXZlX2NwdV9kaXNhYmxlKHZvaWQpOwordm9pZCBuYXRpdmVfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKK3ZvaWQgbmF0aXZlX3BsYXlfZGVhZCh2b2lkKTsKK3ZvaWQgcGxheV9kZWFkX2NvbW1vbih2b2lkKTsKKwordm9pZCBuYXRpdmVfc2VuZF9jYWxsX2Z1bmNfaXBpKGNwdW1hc2tfdCBtYXNrKTsKK3ZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkoaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpOworCit2b2lkIHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpOworI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpCisKKy8qIFdlIGRvbid0IG1hcmsgQ1BVcyBvbmxpbmUgdW50aWwgX19jcHVfdXAoKSwgc28gd2UgbmVlZCBhbm90aGVyIG1lYXN1cmUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG51bV9ib290aW5nX2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmlsbF9wb3NzaWJsZV9tYXAodm9pZCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK2V4dGVybiB1bnNpZ25lZCBkaXNhYmxlZF9jcHVzIF9fY3B1aW5pdGRhdGE7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyX1NNUAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIGJ5IGFsbCBTTVAgc3lzdGVtcy4gSXQgbXVzdCBfYWx3YXlzXyBiZSB2YWxpZAorICogZnJvbSB0aGUgaW5pdGlhbCBzdGFydHVwLiBXZSBtYXAgQVBJQ19CQVNFIHZlcnkgZWFybHkgaW4gcGFnZV9zZXR1cCgpLAorICogc28gdGhpcyBpcyBjb3JyZWN0IGluIHRoZSB4ODYgY2FzZS4KKyAqLworI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICh4ODZfcmVhZF9wZXJjcHUoY3B1X251bWJlcikpCitleHRlcm4gaW50IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0X1NNUCkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQlyZWFkX3BkYShjcHVudW1iZXIpCisKKyNkZWZpbmUgc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpCQkJCQlcCisoewkJCQkJCQkJXAorCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CQkJCQkJXAorCV9fYXNtX18oImFuZHEgJSVyc3AsJTA7ICI6Ij1yIiAodGkpIDogIjAiIChDVVJSRU5UX01BU0spKTsJXAorCXRpLT5jcHU7CQkJCQkJCVwKK30pCisjZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpCQlzbXBfcHJvY2Vzc29yX2lkKCkKKworI2Vsc2UgLyogIUNPTkZJR19YODZfMzJfU01QICYmICFDT05GSUdfWDg2XzY0X1NNUCAqLworI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCisjZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCisjZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKSAJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKworI2lmbmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW5saW5lIGludCBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCisJcmV0dXJuIEdFVF9BUElDX0xPR0lDQUxfSUQoKih1MzIgKikoQVBJQ19CQVNFICsgQVBJQ19MRFIpKTsKK30KKworI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9hcGljX2lkKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9ICoodTMyICopKEFQSUNfQkFTRSArIEFQSUNfSUQpOworCisJcmV0dXJuIEdFVF9BUElDX0lEKHJlZyk7Cit9CisjZW5kaWYKKworCisjIGlmIGRlZmluZWQoQVBJQ19ERUZJTklUSU9OKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCitleHRlcm4gaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKKyMgZWxzZQorI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorc3RhdGljIGlubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLworCXJldHVybiByZWFkX2FwaWNfaWQoKTsKK30KKyMgZW5kaWYgLyogQVBJQ19ERUZJTklUSU9OICovCisKKyNlbHNlIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLworCisjIGlmbmRlZiBDT05GSUdfU01QCisjICBkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJMAorIyBlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX1g4Nl9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWI5Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TT0NLRVRfSAorI2RlZmluZSBfQVNNX1g4Nl9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHQoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkxCisKKyNkZWZpbmUgU09fREVCVUcJMQorI2RlZmluZSBTT19SRVVTRUFERFIJMgorI2RlZmluZSBTT19UWVBFCQkzCisjZGVmaW5lIFNPX0VSUk9SCTQKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTUKKyNkZWZpbmUgU09fQlJPQURDQVNUCTYKKyNkZWZpbmUgU09fU05EQlVGCTcKKyNkZWZpbmUgU09fUkNWQlVGCTgKKyNkZWZpbmUgU09fU05EQlVGRk9SQ0UJMzIKKyNkZWZpbmUgU09fUkNWQlVGRk9SQ0UJMzMKKyNkZWZpbmUgU09fS0VFUEFMSVZFCTkKKyNkZWZpbmUgU09fT09CSU5MSU5FCTEwCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0xJTkdFUgkxMworI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMTUgKi8KKyNkZWZpbmUgU09fUEFTU0NSRUQJMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQJMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQJMTgKKyNkZWZpbmUgU09fU05ETE9XQVQJMTkKKyNkZWZpbmUgU09fUkNWVElNRU8JMjAKKyNkZWZpbmUgU09fU05EVElNRU8JMjEKKworLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KKyNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTIyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTIzCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UJMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSICAgICAgICAyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FCQkyOAorI2RlZmluZSBTT19USU1FU1RBTVAJCTI5CisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCisKKyNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKyNkZWZpbmUgU09fUEFTU1NFQwkJMzQKKyNkZWZpbmUgU09fVElNRVNUQU1QTlMJCTM1CisjZGVmaW5lIFNDTV9USU1FU1RBTVBOUwkJU09fVElNRVNUQU1QTlMKKworI2RlZmluZSBTT19NQVJLCQkJMzYKKworI2VuZGlmIC8qIF9BU01fWDg2X1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NraW9zLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljYzcyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tpb3MuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9BU01fWDg2X1NPQ0tJT1NfSAorI2RlZmluZSBfQVNNX1g4Nl9TT0NLSU9TX0gKKworLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBGSU9TRVRPV04JMHg4OTAxCisjZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMworI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1CisjZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKHRpbWV2YWwpICovCisjZGVmaW5lIFNJT0NHU1RBTVBOUwkweDg5MDcJCS8qIEdldCBzdGFtcCAodGltZXNwZWMpICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TT0NLSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwYXJzZW1lbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0NGY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwYXJzZW1lbS5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgX0FTTV9YODZfU1BBUlNFTUVNX0gKKyNkZWZpbmUgX0FTTV9YODZfU1BBUlNFTUVNX0gKKworI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKy8qCisgKiBnZW5lcmljIG5vbi1saW5lYXIgbWVtb3J5IHN1cHBvcnQ6CisgKgorICogMSkgd2Ugd2lsbCBub3Qgc3BsaXQgbWVtb3J5IGludG8gbW9yZSBjaHVua3MgdGhhbiB3aWxsIGZpdCBpbnRvIHRoZSBmbGFncworICogICAgZmllbGQgb2YgdGhlIHN0cnVjdCBwYWdlCisgKgorICogU0VDVElPTl9TSVpFX0JJVFMJCTJebjogc2l6ZSBvZiBlYWNoIHNlY3Rpb24KKyAqIE1BWF9QSFlTQUREUl9CSVRTCQkyXm46IG1heCBzaXplIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKKyAqIE1BWF9QSFlTTUVNX0JJVFMJCTJebjogaG93IG11Y2ggbWVtb3J5IHdlIGNhbiBoYXZlIGluIHRoYXQgc3BhY2UKKyAqCisgKi8KKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgaWZkZWYgQ09ORklHX1g4Nl9QQUUKKyMgIGRlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyOQorIyAgZGVmaW5lIE1BWF9QSFlTQUREUl9CSVRTCTM2CisjICBkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkzNgorIyBlbHNlCisjICBkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMJMjYKKyMgIGRlZmluZSBNQVhfUEhZU0FERFJfQklUUwkzMgorIyAgZGVmaW5lIE1BWF9QSFlTTUVNX0JJVFMJMzIKKyMgZW5kaWYKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKyMgZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCTI3IC8qIG1hdHQgLSAxMjggaXMgY29udmVuaWVudCByaWdodCBub3cgKi8KKyMgZGVmaW5lIE1BWF9QSFlTQUREUl9CSVRTCTQ0CisjIGRlZmluZSBNQVhfUEhZU01FTV9CSVRTCTQ0CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KKyNlbmRpZiAvKiBfQVNNX1g4Nl9TUEFSU0VNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3YzkxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTAsMCArMSwzNjQgQEAKKyNpZm5kZWYgX0FTTV9YODZfU1BJTkxPQ0tfSAorI2RlZmluZSBfQVNNX1g4Nl9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3J3bG9jay5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisvKgorICogWW91ciBiYXNpYyBTTVAgc3BpbmxvY2tzLCBhbGxvd2luZyBvbmx5IGEgc2luZ2xlIENQVSBhbnl3aGVyZQorICoKKyAqIFNpbXBsZSBzcGluIGxvY2sgb3BlcmF0aW9ucy4gIFRoZXJlIGFyZSB0d28gdmFyaWFudHMsIG9uZSBjbGVhcnMgSVJRJ3MKKyAqIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IsIG9uZSBkb2VzIG5vdC4KKyAqCisgKiBUaGVzZSBhcmUgZmFpciBGSUZPIHRpY2tldCBsb2Nrcywgd2hpY2ggYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIDI1NgorICogQ1BVcy4KKyAqCisgKiAodGhlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluIGFzbS9zcGlubG9ja190eXBlcy5oKQorICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBMT0NLX1BUUl9SRUcgImEiCisjIGRlZmluZSBSRUdfUFRSX01PREUgImsiCisjZWxzZQorIyBkZWZpbmUgTE9DS19QVFJfUkVHICJEIgorIyBkZWZpbmUgUkVHX1BUUl9NT0RFICJxIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmIFwKKwkoZGVmaW5lZChDT05GSUdfWDg2X09PU1RPUkUpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QUFJPX0ZFTkNFKSkKKy8qCisgKiBPbiBQUHJvIFNNUCBvciBpZiB3ZSBhcmUgdXNpbmcgT09TVE9SRSwgd2UgdXNlIGEgbG9ja2VkIG9wZXJhdGlvbiB0byB1bmxvY2sKKyAqIChQUHJvIGVycmF0YSA2NiwgOTIpCisgKi8KKyMgZGVmaW5lIFVOTE9DS19MT0NLX1BSRUZJWCBMT0NLX1BSRUZJWAorI2Vsc2UKKyMgZGVmaW5lIFVOTE9DS19MT0NLX1BSRUZJWAorI2VuZGlmCisKKy8qCisgKiBUaWNrZXQgbG9ja3MgYXJlIGNvbmNlcHR1YWxseSB0d28gcGFydHMsIG9uZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IGhlYWQgb2YKKyAqIHRoZSBxdWV1ZSwgYW5kIHRoZSBvdGhlciBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRhaWwuIFRoZSBsb2NrIGlzIGFjcXVpcmVkCisgKiBieSBhdG9taWNhbGx5IG5vdGluZyB0aGUgdGFpbCBhbmQgaW5jcmVtZW50aW5nIGl0IGJ5IG9uZSAodGh1cyBhZGRpbmcKKyAqIG91cnNlbGYgdG8gdGhlIHF1ZXVlIGFuZCBub3Rpbmcgb3VyIHBvc2l0aW9uKSwgdGhlbiB3YWl0aW5nIHVudGlsIHRoZSBoZWFkCisgKiBiZWNvbWVzIGVxdWFsIHRvIHRoZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGFpbC4KKyAqCisgKiBXZSB1c2UgYW4geGFkZCBjb3ZlcmluZyAqYm90aCogcGFydHMgb2YgdGhlIGxvY2ssIHRvIGluY3JlbWVudCB0aGUgdGFpbCBhbmQKKyAqIGFsc28gbG9hZCB0aGUgcG9zaXRpb24gb2YgdGhlIGhlYWQsIHdoaWNoIHRha2VzIGNhcmUgb2YgbWVtb3J5IG9yZGVyaW5nCisgKiBpc3N1ZXMgYW5kIHNob3VsZCBiZSBvcHRpbWFsIGZvciB0aGUgdW5jb250ZW5kZWQgY2FzZS4gTm90ZSB0aGUgdGFpbCBtdXN0IGJlCisgKiBpbiB0aGUgaGlnaCBwYXJ0LCBiZWNhdXNlIGEgd2lkZSB4YWRkIGluY3JlbWVudCBvZiB0aGUgbG93IHBhcnQgd291bGQgY2FycnkKKyAqIHVwIGFuZCBjb250YW1pbmF0ZSB0aGUgaGlnaCBwYXJ0LgorICoKKyAqIFdpdGggZmV3ZXIgdGhhbiAyXjggcG9zc2libGUgQ1BVcywgd2UgY2FuIHVzZSB4ODYncyBwYXJ0aWFsIHJlZ2lzdGVycyB0bworICogc2F2ZSBzb21lIGluc3RydWN0aW9ucyBhbmQgbWFrZSB0aGUgY29kZSBtb3JlIGVsZWdhbnQuIFRoZXJlIHJlYWxseSBpc24ndAorICogbXVjaCBiZXR3ZWVuIHRoZW0gaW4gcGVyZm9ybWFuY2UgdGhvdWdoLCBlc3BlY2lhbGx5IGFzIGxvY2tzIGFyZSBvdXQgb2YgbGluZS4KKyAqLworI2lmIChOUl9DUFVTIDwgMjU2KQorI2RlZmluZSBUSUNLRVRfU0hJRlQgOAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXNob3J0IGluYyA9IDB4MDEwMDsKKworCWFzbSB2b2xhdGlsZSAoCisJCUxPQ0tfUFJFRklYICJ4YWRkdyAldzAsICUxXG4iCisJCSIxOlx0IgorCQkiY21wYiAlaDAsICViMFxuXHQiCisJCSJqZSAyZlxuXHQiCisJCSJyZXAgOyBub3Bcblx0IgorCQkibW92YiAlMSwgJWIwXG5cdCIKKwkJLyogZG9uJ3QgbmVlZCBsZmVuY2UgaGVyZSwgYmVjYXVzZSBsb2FkcyBhcmUgaW4tb3JkZXIgKi8KKwkJImptcCAxYlxuIgorCQkiMjoiCisJCTogIitRIiAoaW5jKSwgIittIiAobG9jay0+c2xvY2spCisJCToKKwkJOiAibWVtb3J5IiwgImNjIik7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlpbnQgdG1wLCBuZXc7CisKKwlhc20gdm9sYXRpbGUoIm1vdnp3bCAlMiwgJTBcblx0IgorCQkgICAgICJjbXBiICVoMCwlYjBcblx0IgorCQkgICAgICJsZWFsIDB4MTAwKCUiIFJFR19QVFJfTU9ERSAiMCksICUxXG5cdCIKKwkJICAgICAiam5lIDFmXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiY21weGNoZ3cgJXcxLCUyXG5cdCIKKwkJICAgICAiMToiCisJCSAgICAgInNldGUgJWIxXG5cdCIKKwkJICAgICAibW92emJsICViMSwlMFxuXHQiCisJCSAgICAgOiAiPSZhIiAodG1wKSwgIj0mcSIgKG5ldyksICIrbSIgKGxvY2stPnNsb2NrKQorCQkgICAgIDoKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlhc20gdm9sYXRpbGUoVU5MT0NLX0xPQ0tfUFJFRklYICJpbmNiICUwIgorCQkgICAgIDogIittIiAobG9jay0+c2xvY2spCisJCSAgICAgOgorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworfQorI2Vsc2UKKyNkZWZpbmUgVElDS0VUX1NISUZUIDE2CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJaW50IGluYyA9IDB4MDAwMTAwMDA7CisJaW50IHRtcDsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxXG4iCisJCSAgICAgIm1vdnp3bCAldzAsICUyXG5cdCIKKwkJICAgICAic2hybCAkMTYsICUwXG5cdCIKKwkJICAgICAiMTpcdCIKKwkJICAgICAiY21wbCAlMCwgJTJcblx0IgorCQkgICAgICJqZSAyZlxuXHQiCisJCSAgICAgInJlcCA7IG5vcFxuXHQiCisJCSAgICAgIm1vdnp3bCAlMSwgJTJcblx0IgorCQkgICAgIC8qIGRvbid0IG5lZWQgbGZlbmNlIGhlcmUsIGJlY2F1c2UgbG9hZHMgYXJlIGluLW9yZGVyICovCisJCSAgICAgImptcCAxYlxuIgorCQkgICAgICIyOiIKKwkJICAgICA6ICIrciIgKGluYyksICIrbSIgKGxvY2stPnNsb2NrKSwgIj0mciIgKHRtcCkKKwkJICAgICA6CisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlpbnQgdG1wOworCWludCBuZXc7CisKKwlhc20gdm9sYXRpbGUoIm1vdmwgJTIsJTBcblx0IgorCQkgICAgICJtb3ZsICUwLCUxXG5cdCIKKwkJICAgICAicm9sbCAkMTYsICUwXG5cdCIKKwkJICAgICAiY21wbCAlMCwlMVxuXHQiCisJCSAgICAgImxlYWwgMHgwMDAxMDAwMCglIiBSRUdfUFRSX01PREUgIjApLCAlMVxuXHQiCisJCSAgICAgImpuZSAxZlxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggImNtcHhjaGdsICUxLCUyXG5cdCIKKwkJICAgICAiMToiCisJCSAgICAgInNldGUgJWIxXG5cdCIKKwkJICAgICAibW92emJsICViMSwlMFxuXHQiCisJCSAgICAgOiAiPSZhIiAodG1wKSwgIj0mcSIgKG5ldyksICIrbSIgKGxvY2stPnNsb2NrKQorCQkgICAgIDoKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlhc20gdm9sYXRpbGUoVU5MT0NLX0xPQ0tfUFJFRklYICJpbmN3ICUwIgorCQkgICAgIDogIittIiAobG9jay0+c2xvY2spCisJCSAgICAgOgorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWludCB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5zbG9jayk7CisKKwlyZXR1cm4gISEoKCh0bXAgPj4gVElDS0VUX1NISUZUKSBeIHRtcCkgJiAoKDEgPDwgVElDS0VUX1NISUZUKSAtIDEpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190aWNrZXRfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnNsb2NrKTsKKworCXJldHVybiAoKCh0bXAgPj4gVElDS0VUX1NISUZUKSAtIHRtcCkgJiAoKDEgPDwgVElDS0VUX1NISUZUKSAtIDEpKSA+IDE7Cit9CisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKy8qCisgKiBEZWZpbmUgdmlydHVhbGl6YXRpb24tZnJpZW5kbHkgb2xkLXN0eWxlIGxvY2sgYnl0ZSBsb2NrLCBmb3IgdXNlIGluCisgKiBwdl9sb2NrX29wcyBpZiBkZXNpcmVkLgorICoKKyAqIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBwcmUtMi42LjI0IHNwaW5sb2NrIGJ5IGFsd2F5cyB1c2luZyB4Y2hnYgorICogcmF0aGVyIHRoYW4gZGVjYiB0byB0YWtlIHRoZSBsb2NrOyB0aGlzIGFsbG93cyBpdCB0byB1c2UgYQorICogemVyby1pbml0aWFsaXplZCBsb2NrIHN0cnVjdHVyZS4gIEl0IGFsc28gbWFpbnRhaW5zIGEgMS1ieXRlCisgKiBjb250ZW50aW9uIGNvdW50ZXIsIHNvIHRoYXQgd2UgY2FuIGltcGxlbWVudAorICogX19ieXRlX3NwaW5faXNfY29udGVuZGVkLgorICovCitzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrIHsKKwlzOCBsb2NrOworCXM4IHNwaW5uZXJzOworfTsKKworc3RhdGljIGlubGluZSBpbnQgX19ieXRlX3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOworCXJldHVybiBibC0+bG9jayAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2J5dGVfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqYmwgPSAoc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqKWxvY2s7CisJcmV0dXJuIGJsLT5zcGlubmVycyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19ieXRlX3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKKwlzOCB2YWwgPSAxOworCisJYXNtKCIxOiB4Y2hnYiAlMSwgJTBcbiIKKwkgICAgIiAgIHRlc3QgJTEsJTFcbiIKKwkgICAgIiAgIGp6IDNmXG4iCisJICAgICIgICAiIExPQ0tfUFJFRklYICJpbmNiICUyXG4iCisJICAgICIyOiByZXA7bm9wXG4iCisJICAgICIgICBjbXBiICQxLCAlMFxuIgorCSAgICAiICAgamUgMmJcbiIKKwkgICAgIiAgICIgTE9DS19QUkVGSVggImRlY2IgJTJcbiIKKwkgICAgIiAgIGptcCAxYlxuIgorCSAgICAiMzoiCisJICAgIDogIittIiAoYmwtPmxvY2spLCAiK3EiICh2YWwpLCAiK20iIChibC0+c3Bpbm5lcnMpOiA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19ieXRlX3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKKwl1OCBvbGQgPSAxOworCisJYXNtKCJ4Y2hnYiAlMSwlMCIKKwkgICAgOiAiK20iIChibC0+bG9jayksICIrcSIgKG9sZCkgOiA6ICJtZW1vcnkiKTsKKworCXJldHVybiBvbGQgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fYnl0ZV9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKKwlzbXBfd21iKCk7CisJYmwtPmxvY2sgPSAwOworfQorI2Vsc2UgIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGxvY2spOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fbG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX3RyeWxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX3Jhd19zcGluX2xvY2sobG9jayk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUEFSQVZJUlQgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKQorCQljcHVfcmVsYXgoKTsKK30KKworLyoKKyAqIFJlYWQtd3JpdGUgc3BpbmxvY2tzLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzCisgKiBidXQgb25seSBvbmUgd3JpdGVyLgorICoKKyAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50ZXJydXB0cworICogYnV0IG5vIGludGVycnVwdCB3cml0ZXJzLiBGb3IgdGhvc2UgY2lyY3Vtc3RhbmNlcyB3ZQorICogY2FuICJtaXgiIGlycS1zYWZlIGxvY2tzIC0gYW55IHdyaXRlciBuZWVkcyB0byBnZXQgYQorICogaXJxLXNhZmUgd3JpdGUtbG9jaywgYnV0IHJlYWRlcnMgY2FuIGdldCBub24taXJxc2FmZQorICogcmVhZC1sb2Nrcy4KKyAqCisgKiBPbiB4ODYsIHdlIGltcGxlbWVudCByZWFkLXdyaXRlIGxvY2tzIGFzIGEgMzItYml0IGNvdW50ZXIKKyAqIHdpdGggdGhlIGhpZ2ggYml0IChzaWduKSBiZWluZyB0aGUgImNvbnRlbmRlZCIgYml0LgorICovCisKKy8qKgorICogcmVhZF9jYW5fbG9jayAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/CisgKiBAbG9jazogdGhlIHJ3bG9jayBpbiBxdWVzdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF9jYW5fbG9jayhyYXdfcndsb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIChpbnQpKGxvY2spLT5sb2NrID4gMDsKK30KKworLyoqCisgKiB3cml0ZV9jYW5fbG9jayAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPworICogQGxvY2s6IHRoZSByd2xvY2sgaW4gcXVlc3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gKGxvY2spLT5sb2NrID09IFJXX0xPQ0tfQklBUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiIHN1YmwgJDEsKCUwKVxuXHQiCisJCSAgICAgImpucyAxZlxuIgorCQkgICAgICJjYWxsIF9fcmVhZF9sb2NrX2ZhaWxlZFxuXHQiCisJCSAgICAgIjE6XG4iCisJCSAgICAgOjpMT0NLX1BUUl9SRUcgKHJ3KSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpydykKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIiBzdWJsICUxLCglMClcblx0IgorCQkgICAgICJqeiAxZlxuIgorCQkgICAgICJjYWxsIF9fd3JpdGVfbG9ja19mYWlsZWRcblx0IgorCQkgICAgICIxOlxuIgorCQkgICAgIDo6TE9DS19QVFJfUkVHIChydyksICJpIiAoUldfTE9DS19CSUFTKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3sKKwlhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QgKilsb2NrOworCisJYXRvbWljX2RlYyhjb3VudCk7CisJaWYgKGF0b21pY19yZWFkKGNvdW50KSA+PSAwKQorCQlyZXR1cm4gMTsKKwlhdG9taWNfaW5jKGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKmxvY2spCit7CisJYXRvbWljX3QgKmNvdW50ID0gKGF0b21pY190ICopbG9jazsKKworCWlmIChhdG9taWNfc3ViX2FuZF90ZXN0KFJXX0xPQ0tfQklBUywgY291bnQpKQorCQlyZXR1cm4gMTsKKwlhdG9taWNfYWRkKFJXX0xPQ0tfQklBUywgY291bnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiIDoiK20iIChydy0+bG9jaykgOiA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwgJTAiCisJCSAgICAgOiAiK20iIChydy0+bG9jaykgOiAiaSIgKFJXX0xPQ0tfQklBUykgOiAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVmODFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9BU01fWDg2X1NQSU5MT0NLX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9YODZfU1BJTkxPQ0tfVFlQRVNfSAorCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfSAorIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHJhd19zcGlubG9jayB7CisJdW5zaWduZWQgaW50IHNsb2NrOworfSByYXdfc3BpbmxvY2tfdDsKKworI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBsb2NrOworfSByYXdfcndsb2NrX3Q7CisKKyNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyBSV19MT0NLX0JJQVMgfQorCisjZW5kaWYgLyogX0FTTV9YODZfU1BJTkxPQ0tfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3JhdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3JhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDhkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcmF0LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIFNvbWUgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGhhcyBiZWVuIGdsZWFuZWQgZnJvbSB0aGUgNjQgYml0CisgKiBkaXNjb250aWdtZW0gc3VwcG9ydCBjb2RlIGJhc2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJQk0gQ29ycC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG8gUGF0IEdhdWdoZW4gPGdvbmVAdXMuaWJtLmNvbT4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1NSQVRfSAorI2RlZmluZSBfQVNNX1g4Nl9TUkFUX0gKKworI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKK2V4dGVybiBpbnQgZ2V0X21lbWNmZ19mcm9tX3NyYXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZ2V0X21lbWNmZ19mcm9tX3NyYXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfU1JBVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxNzk0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9BU01fWDg2X1NUQUNLVFJBQ0VfSAorI2RlZmluZSBfQVNNX1g4Nl9TVEFDS1RSQUNFX0gKKworZXh0ZXJuIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7CisKKy8qIEdlbmVyaWMgc3RhY2sgdHJhY2VyIHdpdGggY2FsbGJhY2tzICovCisKK3N0cnVjdCBzdGFja3RyYWNlX29wcyB7CisJdm9pZCAoKndhcm5pbmcpKHZvaWQgKmRhdGEsIGNoYXIgKm1zZyk7CisJLyogbXNnIG11c3QgY29udGFpbiAlcyBmb3IgdGhlIHN5bWJvbCAqLworCXZvaWQgKCp3YXJuaW5nX3N5bWJvbCkodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCk7CisJdm9pZCAoKmFkZHJlc3MpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHJlbGlhYmxlKTsKKwkvKiBPbiBuZWdhdGl2ZSByZXR1cm4gc3RvcCBkdW1waW5nICovCisJaW50ICgqc3RhY2spKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpOworfTsKKwordm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1NUQUNLVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjFkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGF0LmgKQEAgLTAsMCArMSwxMTQgQEAKKyNpZm5kZWYgX0FTTV9YODZfU1RBVF9ICisjZGVmaW5lIF9BU01fWDg2X1NUQVRfSAorCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgbG9uZyAgc3RfZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgbG9uZyAgc3RfcmRldjsKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsa3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTwkxCisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseQorICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KKyAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBjaGFyCV9fcGFkMFs0XTsKKworCXVuc2lnbmVkIGxvbmcJX19zdF9pbm87CisKKwl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7CisKKwl1bnNpZ25lZCBsb25nCXN0X3VpZDsKKwl1bnNpZ25lZCBsb25nCXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OworCXVuc2lnbmVkIGNoYXIJX19wYWQzWzRdOworCisJbG9uZyBsb25nCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCisJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2Jsb2NrczsKKworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKK307CisKKyNlbHNlIC8qIF9faTM4Nl9fICovCisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBsb25nCXN0X2lubzsKKwl1bnNpZ25lZCBsb25nCXN0X25saW5rOworCisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOworCXVuc2lnbmVkIGludAlfX3BhZDA7CisJdW5zaWduZWQgbG9uZwlzdF9yZGV2OworCWxvbmcJCXN0X3NpemU7CisJbG9uZwkJc3RfYmxrc2l6ZTsKKwlsb25nCQlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworCisJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nICAgc3RfY3RpbWVfbnNlYzsKKwlsb25nCQlfX3VudXNlZFszXTsKK307CisjZW5kaWYKKworLyogZm9yIDMyYml0IGVtdWxhdGlvbiBhbmQgMzIgYml0IGtlcm5lbHMgKi8KK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKyNpZmRlZiBfX2kzODZfXworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7CisjZWxzZQorCXVuc2lnbmVkIGludCAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgIHN0X2F0aW1lOworCXVuc2lnbmVkIGludCAgc3RfbXRpbWU7CisJdW5zaWduZWQgaW50ICBzdF9jdGltZTsKKyNlbmRpZgorfTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1NUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDBhZGJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TVEFURlNfSAorI2RlZmluZSBfQVNNX1g4Nl9TVEFURlNfSAorCisvKgorICogV2UgbmVlZCBjb21wYXRfc3RhdGZzNjQgdG8gYmUgcGFja2VkLCBiZWNhdXNlIHRoZSBpMzg2IEFCSSB3b24ndAorICogYWRkIHBhZGRpbmcgYXQgdGhlIGVuZCB0byBicmluZyBpdCB0byBhIG11bHRpcGxlIG9mIDggYnl0ZXMsIGJ1dAorICogdGhlIHg4Nl82NCBBQkkgd2lsbC4KKyAqLworI2RlZmluZSBBUkNIX1BBQ0tfQ09NUEFUX1NUQVRGUzY0IF9fYXR0cmlidXRlX18oKHBhY2tlZCxhbGlnbmVkKDQpKSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgorI2VuZGlmIC8qIF9BU01fWDg2X1NUQVRGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3RyaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L3N0cmluZy5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmcuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTBlM2JhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmgKQEAgLTAsMCArMSwzMjYgQEAKKyNpZm5kZWYgX0FTTV9YODZfU1RSSU5HXzMyX0gKKyNkZWZpbmUgX0FTTV9YODZfU1RSSU5HXzMyX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogTGV0IGdjYyBkZWNpZGUgd2hldGhlciB0byBpbmxpbmUgb3IgdXNlIHRoZSBvdXQgb2YgbGluZSBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDUFkKK2V4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ1BZCitleHRlcm4gY2hhciAqc3RybmNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBjb3VudCk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0FUCitleHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNBVAorZXh0ZXJuIGNoYXIgKnN0cm5jYXQoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgY291bnQpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNNUAorZXh0ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QCitleHRlcm4gaW50IHN0cm5jbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0LCBzaXplX3QgY291bnQpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNIUgorZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYyk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOCitleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKTsKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IG4pCit7CisJaW50IGQwLCBkMSwgZDI7CisJYXNtIHZvbGF0aWxlKCJyZXAgOyBtb3ZzbFxuXHQiCisJCSAgICAgIm1vdmwgJTQsJSVlY3hcblx0IgorCQkgICAgICJhbmRsICQzLCUlZWN4XG5cdCIKKwkJICAgICAianogMWZcblx0IgorCQkgICAgICJyZXAgOyBtb3ZzYlxuXHQiCisJCSAgICAgIjE6IgorCQkgICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKQorCQkgICAgIDogIjAiIChuIC8gNCksICJnIiAobiksICIxIiAoKGxvbmcpdG8pLCAiMiIgKChsb25nKWZyb20pCisJCSAgICAgOiAibWVtb3J5Iik7CisJcmV0dXJuIHRvOworfQorCisvKgorICogVGhpcyBsb29rcyB1Z2x5LCBidXQgdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZSBpdCB0b3RhbGx5LAorICogYXMgdGhlIGNvdW50IGlzIGNvbnN0YW50LgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLAorCQkJCQkgICAgICAgc2l6ZV90IG4pCit7CisJbG9uZyBlc2ksIGVkaTsKKwlpZiAoIW4pCisJCXJldHVybiB0bzsKKworCXN3aXRjaCAobikgeworCWNhc2UgMToKKwkJKihjaGFyICopdG8gPSAqKGNoYXIgKilmcm9tOworCQlyZXR1cm4gdG87CisJY2FzZSAyOgorCQkqKHNob3J0ICopdG8gPSAqKHNob3J0ICopZnJvbTsKKwkJcmV0dXJuIHRvOworCWNhc2UgNDoKKwkJKihpbnQgKil0byA9ICooaW50ICopZnJvbTsKKwkJcmV0dXJuIHRvOworCisJY2FzZSAzOgorCQkqKHNob3J0ICopdG8gPSAqKHNob3J0ICopZnJvbTsKKwkJKigoY2hhciAqKXRvICsgMikgPSAqKChjaGFyICopZnJvbSArIDIpOworCQlyZXR1cm4gdG87CisJY2FzZSA1OgorCQkqKGludCAqKXRvID0gKihpbnQgKilmcm9tOworCQkqKChjaGFyICopdG8gKyA0KSA9ICooKGNoYXIgKilmcm9tICsgNCk7CisJCXJldHVybiB0bzsKKwljYXNlIDY6CisJCSooaW50ICopdG8gPSAqKGludCAqKWZyb207CisJCSooKHNob3J0ICopdG8gKyAyKSA9ICooKHNob3J0ICopZnJvbSArIDIpOworCQlyZXR1cm4gdG87CisJY2FzZSA4OgorCQkqKGludCAqKXRvID0gKihpbnQgKilmcm9tOworCQkqKChpbnQgKil0byArIDEpID0gKigoaW50ICopZnJvbSArIDEpOworCQlyZXR1cm4gdG87CisJfQorCisJZXNpID0gKGxvbmcpZnJvbTsKKwllZGkgPSAobG9uZyl0bzsKKwlpZiAobiA+PSA1ICogNCkgeworCQkvKiBsYXJnZSBibG9jazogdXNlIHJlcCBwcmVmaXggKi8KKwkJaW50IGVjeDsKKwkJYXNtIHZvbGF0aWxlKCJyZXAgOyBtb3ZzbCIKKwkJCSAgICAgOiAiPSZjIiAoZWN4KSwgIj0mRCIgKGVkaSksICI9JlMiIChlc2kpCisJCQkgICAgIDogIjAiIChuIC8gNCksICIxIiAoZWRpKSwgIjIiIChlc2kpCisJCQkgICAgIDogIm1lbW9yeSIKKwkJKTsKKwl9IGVsc2UgeworCQkvKiBzbWFsbCBibG9jazogZG9uJ3QgY2xvYmJlciBlY3ggKyBzbWFsbGVyIGNvZGUgKi8KKwkJaWYgKG4gPj0gNCAqIDQpCisJCQlhc20gdm9sYXRpbGUoIm1vdnNsIgorCQkJCSAgICAgOiAiPSZEIihlZGkpLCAiPSZTIihlc2kpCisJCQkJICAgICA6ICIwIihlZGkpLCAiMSIoZXNpKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCWlmIChuID49IDMgKiA0KQorCQkJYXNtIHZvbGF0aWxlKCJtb3ZzbCIKKwkJCQkgICAgIDogIj0mRCIoZWRpKSwgIj0mUyIoZXNpKQorCQkJCSAgICAgOiAiMCIoZWRpKSwgIjEiKGVzaSkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlpZiAobiA+PSAyICogNCkKKwkJCWFzbSB2b2xhdGlsZSgibW92c2wiCisJCQkJICAgICA6ICI9JkQiKGVkaSksICI9JlMiKGVzaSkKKwkJCQkgICAgIDogIjAiKGVkaSksICIxIihlc2kpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJaWYgKG4gPj0gMSAqIDQpCisJCQlhc20gdm9sYXRpbGUoIm1vdnNsIgorCQkJCSAgICAgOiAiPSZEIihlZGkpLCAiPSZTIihlc2kpCisJCQkJICAgICA6ICIwIihlZGkpLCAiMSIoZXNpKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJfQorCXN3aXRjaCAobiAlIDQpIHsKKwkJLyogdGFpbCAqLworCWNhc2UgMDoKKwkJcmV0dXJuIHRvOworCWNhc2UgMToKKwkJYXNtIHZvbGF0aWxlKCJtb3ZzYiIKKwkJCSAgICAgOiAiPSZEIihlZGkpLCAiPSZTIihlc2kpCisJCQkgICAgIDogIjAiKGVkaSksICIxIihlc2kpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gdG87CisJY2FzZSAyOgorCQlhc20gdm9sYXRpbGUoIm1vdnN3IgorCQkJICAgICA6ICI9JkQiKGVkaSksICI9JlMiKGVzaSkKKwkJCSAgICAgOiAiMCIoZWRpKSwgIjEiKGVzaSkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiB0bzsKKwlkZWZhdWx0OgorCQlhc20gdm9sYXRpbGUoIm1vdnN3XG5cdG1vdnNiIgorCQkJICAgICA6ICI9JkQiKGVkaSksICI9JlMiKGVzaSkKKwkJCSAgICAgOiAiMCIoZWRpKSwgIjEiKGVzaSkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiB0bzsKKwl9Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCisKKyNpZmRlZiBDT05GSUdfWDg2X1VTRV8zRE5PVworCisjaW5jbHVkZSA8YXNtL21teC5oPgorCisvKgorICoJVGhpcyBDUFUgZmF2b3VycyAzRE5vdyBzdHJvbmdseSAoZWcgQU1EIEF0aGxvbikKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfbWVtY3B5M2Qodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBsZW4pCit7CisJaWYgKGxlbiA8IDUxMikKKwkJcmV0dXJuIF9fY29uc3RhbnRfbWVtY3B5KHRvLCBmcm9tLCBsZW4pOworCXJldHVybiBfbW14X21lbWNweSh0bywgZnJvbSwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpfX21lbWNweTNkKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPCA1MTIpCisJCXJldHVybiBfX21lbWNweSh0bywgZnJvbSwgbGVuKTsKKwlyZXR1cm4gX21teF9tZW1jcHkodG8sIGZyb20sIGxlbik7Cit9CisKKyNkZWZpbmUgbWVtY3B5KHQsIGYsIG4pCQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AoKG4pKQkJXAorCSA/IF9fY29uc3RhbnRfbWVtY3B5M2QoKHQpLCAoZiksIChuKSkJXAorCSA6IF9fbWVtY3B5M2QoKHQpLCAoZiksIChuKSkpCisKKyNlbHNlCisKKy8qCisgKglObyAzRCBOb3chCisgKi8KKworI2RlZmluZSBtZW1jcHkodCwgZiwgbikJCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcCgobikpCQlcCisJID8gX19jb25zdGFudF9tZW1jcHkoKHQpLCAoZiksIChuKSkJXAorCSA6IF9fbWVtY3B5KCh0KSwgKGYpLCAobikpKQorCisjZW5kaWYKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCit2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOworCisjZGVmaW5lIG1lbWNtcCBfX2J1aWx0aW5fbWVtY21wCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ0hSCitleHRlcm4gdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKmNzLCBpbnQgYywgc2l6ZV90IGNvdW50KTsKKworc3RhdGljIGlubGluZSB2b2lkICpfX21lbXNldF9nZW5lcmljKHZvaWQgKnMsIGNoYXIgYywgc2l6ZV90IGNvdW50KQoreworCWludCBkMCwgZDE7CisJYXNtIHZvbGF0aWxlKCJyZXBcblx0IgorCQkgICAgICJzdG9zYiIKKwkJICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkKKwkJICAgICA6ICJhIiAoYyksICIxIiAocyksICIwIiAoY291bnQpCisJCSAgICAgOiAibWVtb3J5Iik7CisJcmV0dXJuIHM7Cit9CisKKy8qIHdlIG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3B0aW1pemVkIHZlcnNpb25zIG9mIHRoZXNlIGxhdGVyICovCisjZGVmaW5lIF9fY29uc3RhbnRfY291bnRfbWVtc2V0KHMsIGMsIGNvdW50KSBfX21lbXNldF9nZW5lcmljKChzKSwgKGMpLCAoY291bnQpKQorCisvKgorICogbWVtc2V0KHgsIDAsIHkpIGlzIGEgcmVhc29uYWJseSBjb21tb24gdGhpbmcgdG8gZG8sIHNvIHdlIHdhbnQgdG8gZmlsbAorICogdGhpbmdzIDMyIGJpdHMgYXQgYSB0aW1lIGV2ZW4gd2hlbiB3ZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHRoZQorICogYXJlYSBhdCBjb21waWxlLXRpbWUuLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lCit2b2lkICpfX2NvbnN0YW50X2NfbWVtc2V0KHZvaWQgKnMsIHVuc2lnbmVkIGxvbmcgYywgc2l6ZV90IGNvdW50KQoreworCWludCBkMCwgZDE7CisJYXNtIHZvbGF0aWxlKCJyZXAgOyBzdG9zbFxuXHQiCisJCSAgICAgInRlc3RiICQyLCViM1xuXHQiCisJCSAgICAgImplIDFmXG5cdCIKKwkJICAgICAic3Rvc3dcbiIKKwkJICAgICAiMTpcdHRlc3RiICQxLCViM1xuXHQiCisJCSAgICAgImplIDJmXG5cdCIKKwkJICAgICAic3Rvc2JcbiIKKwkJICAgICAiMjoiCisJCSAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCisJCSAgICAgOiAiYSIgKGMpLCAicSIgKGNvdW50KSwgIjAiIChjb3VudC80KSwgIjEiICgobG9uZylzKQorCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiBzOworfQorCisvKiBBZGRlZCBieSBHZXJ0amFuIHZhbiBXaW5nZXJkZSB0byBtYWtlIG1pbml4IGFuZCBzeXN2IG1vZHVsZSB3b3JrICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5MRU4KK2V4dGVybiBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICpzLCBzaXplX3QgY291bnQpOworLyogZW5kIG9mIGFkZGl0aW9uYWwgc3R1ZmYgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJTVFIKK2V4dGVybiBjaGFyICpzdHJzdHIoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKKworLyoKKyAqIFRoaXMgbG9va3MgaG9ycmlibHkgdWdseSwgYnV0IHRoZSBjb21waWxlciBjYW4gb3B0aW1pemUgaXQgdG90YWxseSwKKyAqIGFzIHdlIGJ5IG5vdyBrbm93IHRoYXQgYm90aCBwYXR0ZXJuIGFuZCBjb3VudCBpcyBjb25zdGFudC4uCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUKK3ZvaWQgKl9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KHZvaWQgKnMsIHVuc2lnbmVkIGxvbmcgcGF0dGVybiwKKwkJCQkgICAgc2l6ZV90IGNvdW50KQoreworCXN3aXRjaCAoY291bnQpIHsKKwljYXNlIDA6CisJCXJldHVybiBzOworCWNhc2UgMToKKwkJKih1bnNpZ25lZCBjaGFyICopcyA9IHBhdHRlcm4gJiAweGZmOworCQlyZXR1cm4gczsKKwljYXNlIDI6CisJCSoodW5zaWduZWQgc2hvcnQgKilzID0gcGF0dGVybiAmIDB4ZmZmZjsKKwkJcmV0dXJuIHM7CisJY2FzZSAzOgorCQkqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm4gJiAweGZmZmY7CisJCSooKHVuc2lnbmVkIGNoYXIgKilzICsgMikgPSBwYXR0ZXJuICYgMHhmZjsKKwkJcmV0dXJuIHM7CisJY2FzZSA0OgorCQkqKHVuc2lnbmVkIGxvbmcgKilzID0gcGF0dGVybjsKKwkJcmV0dXJuIHM7CisJfQorCisjZGVmaW5lIENPTU1PTih4KQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJyZXAgOyBzdG9zbCIJCQkJCVwKKwkJICAgICB4CQkJCQkJCVwKKwkJICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkJCQkJXAorCQkgICAgIDogImEiIChlYXgpLCAiMCIgKGNvdW50LzQpLCAiMSIgKChsb25nKXMpCVwKKwkJICAgICA6ICJtZW1vcnkiKQorCisJeworCQlpbnQgZDAsIGQxOworI2lmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMAorCQkvKiBXb3JrYXJvdW5kIGZvciBicm9rZW4gZ2NjIDQuMCAqLworCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGVheCBhc20oIiVlYXgiKSA9IHBhdHRlcm47CisjZWxzZQorCQl1bnNpZ25lZCBsb25nIGVheCA9IHBhdHRlcm47CisjZW5kaWYKKworCQlzd2l0Y2ggKGNvdW50ICUgNCkgeworCQljYXNlIDA6CisJCQlDT01NT04oIiIpOworCQkJcmV0dXJuIHM7CisJCWNhc2UgMToKKwkJCUNPTU1PTigiXG5cdHN0b3NiIik7CisJCQlyZXR1cm4gczsKKwkJY2FzZSAyOgorCQkJQ09NTU9OKCJcblx0c3Rvc3ciKTsKKwkJCXJldHVybiBzOworCQlkZWZhdWx0OgorCQkJQ09NTU9OKCJcblx0c3Rvc3dcblx0c3Rvc2IiKTsKKwkJCXJldHVybiBzOworCQl9CisJfQorCisjdW5kZWYgQ09NTU9OCit9CisKKyNkZWZpbmUgX19jb25zdGFudF9jX3hfbWVtc2V0KHMsIGMsIGNvdW50KQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AoY291bnQpCQkJCVwKKwkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgocyksIChjKSwgKGNvdW50KSkJXAorCSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpKQorCisjZGVmaW5lIF9fbWVtc2V0KHMsIGMsIGNvdW50KQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KQkJCVwKKwkgPyBfX2NvbnN0YW50X2NvdW50X21lbXNldCgocyksIChjKSwgKGNvdW50KSkJXAorCSA6IF9fbWVtc2V0X2dlbmVyaWMoKHMpLCAoYyksIChjb3VudCkpKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorI2RlZmluZSBtZW1zZXQocywgYywgY291bnQpCQkJCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChjKQkJCQkJXAorCSA/IF9fY29uc3RhbnRfY194X21lbXNldCgocyksICgweDAxMDEwMTAxVUwgKiAodW5zaWduZWQgY2hhcikoYykpLCBcCisJCQkJIChjb3VudCkpCQkJCVwKKwkgOiBfX21lbXNldCgocyksIChjKSwgKGNvdW50KSkpCisKKy8qCisgKiBmaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGJ5dGUgJ2MnLCBvciAxIHBhc3QgdGhlIGFyZWEgaWYgbm9uZQorICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNDQU4KK2V4dGVybiB2b2lkICptZW1zY2FuKHZvaWQgKmFkZHIsIGludCBjLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TVFJJTkdfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWZlMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKQEAgLTAsMCArMSw2MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TVFJJTkdfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9TVFJJTkdfNjRfSAorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqLworCisvKiBPbmx5IHVzZWQgZm9yIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4gU3RvbGVuIGZyb20gaTM4Ni9zdHJpbmcuaCAqLworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2lubGluZV9tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQoreworCXVuc2lnbmVkIGxvbmcgZDAsIGQxLCBkMjsKKwlhc20gdm9sYXRpbGUoInJlcCA7IG1vdnNsXG5cdCIKKwkJICAgICAidGVzdGIgJDIsJWI0XG5cdCIKKwkJICAgICAiamUgMWZcblx0IgorCQkgICAgICJtb3Zzd1xuIgorCQkgICAgICIxOlx0dGVzdGIgJDEsJWI0XG5cdCIKKwkJICAgICAiamUgMmZcblx0IgorCQkgICAgICJtb3ZzYlxuIgorCQkgICAgICIyOiIKKwkJICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikKKwkJICAgICA6ICIwIiAobiAvIDQpLCAicSIgKG4pLCAiMSIgKChsb25nKXRvKSwgIjIiICgobG9uZylmcm9tKQorCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiB0bzsKK30KKworLyogRXZlbiB3aXRoIF9fYnVpbHRpbl8gdGhlIGNvbXBpbGVyIG1heSBkZWNpZGUgdG8gdXNlIHRoZSBvdXQgb2YgbGluZQorICAgZnVuY3Rpb24uICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZIDEKKyNpZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDQKK2V4dGVybiB2b2lkICptZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBsZW4pOworI2Vsc2UKK2V4dGVybiB2b2lkICpfX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbik7CisjZGVmaW5lIG1lbWNweShkc3QsIHNyYywgbGVuKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlzaXplX3QgX19sZW4gPSAobGVuKTsJCQkJCVwKKwl2b2lkICpfX3JldDsJCQkJCQlcCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGxlbikgJiYgX19sZW4gPj0gNjQpCQlcCisJCV9fcmV0ID0gX19tZW1jcHkoKGRzdCksIChzcmMpLCBfX2xlbik7CQlcCisJZWxzZQkJCQkJCQlcCisJCV9fcmV0ID0gX19idWlsdGluX21lbWNweSgoZHN0KSwgKHNyYyksIF9fbGVuKTsJXAorCV9fcmV0OwkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCit2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KTsKKworaW50IG1lbWNtcChjb25zdCB2b2lkICpjcywgY29uc3Qgdm9pZCAqY3QsIHNpemVfdCBjb3VudCk7CitzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpOworY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CitjaGFyICpzdHJjYXQoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKK2ludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1NUUklOR182NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjMwNzBmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2FwaWMuaApAQCAtMCwwICsxLDE4NCBAQAorI2lmbmRlZiBfX0FTTV9TVU1NSVRfQVBJQ19ICisjZGVmaW5lIF9fQVNNX1NVTU1JVF9BUElDX0gKKworI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKKyNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKDApCisKKy8qIEluIGNsdXN0ZXJlZCBtb2RlLCB0aGUgaGlnaCBuaWJibGUgb2YgQVBJQyBJRCBpcyBhIGNsdXN0ZXIgbnVtYmVyLgorICogVGhlIGxvdyBuaWJibGUgaXMgYSA0LWJpdCBiaXRtYXAuICovCisjZGVmaW5lIFhBUElDX0RFU1RfQ1BVU19TSElGVAk0CisjZGVmaW5lIFhBUElDX0RFU1RfQ1BVU19NQVNLCSgoMXUgPDwgWEFQSUNfREVTVF9DUFVTX1NISUZUKSAtIDEpCisjZGVmaW5lIFhBUElDX0RFU1RfQ0xVU1RFUl9NQVNLCShYQVBJQ19ERVNUX0NQVVNfTUFTSyA8PCBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpCisKKyNkZWZpbmUgQVBJQ19ERlJfVkFMVUUJKEFQSUNfREZSX0NMVVNURVIpCisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHRhcmdldF9jcHVzKHZvaWQpCit7CisJLyogQ1BVX01BU0tfQUxMICgweGZmKSBoYXMgdW5kZWZpbmVkIGJlaGF2aW91ciB3aXRoCisJICogZGVzdF9Mb3dlc3RQcmlvIG1vZGUgbG9naWNhbCBjbHVzdGVyZWQgYXBpYyBpbnRlcnJ1cHQgcm91dGluZworCSAqIEp1c3Qgc3RhcnQgb24gY3B1IDAuICBJUlEgYmFsYW5jaW5nIHdpbGwgc3ByZWFkIGxvYWQKKwkgKi8KKwlyZXR1cm4gY3B1bWFza19vZl9jcHUoMCk7Cit9CisKKyNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgKGRlc3RfTG93ZXN0UHJpbykKKyNkZWZpbmUgSU5UX0RFU1RfTU9ERSAxICAgICAvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgcHJvY3MgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQoreworCXJldHVybiAwOworfQorCisvKiB3ZSBkb24ndCB1c2UgdGhlIHBoeXNfY3B1X3ByZXNlbnRfbWFwIHRvIGluZGljYXRlIGFwaWNpZCBwcmVzZW5jZSAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCit7CisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAoKGFwaWNpZCkgJiBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSykKKworZXh0ZXJuIHU4IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW107CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIGlkOworCWludCBjb3VudCA9IDA7CisJdTggbXlfaWQgPSAodTgpaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJdTggbXlfY2x1c3RlciA9ICh1OClhcGljaWRfY2x1c3RlcihteV9pZCk7CisjaWZkZWYgQ09ORklHX1NNUAorCXU4IGxpZDsKKwlpbnQgaTsKKworCS8qIENyZWF0ZSBsb2dpY2FsIEFQSUMgSURzIGJ5IGNvdW50aW5nIENQVXMgYWxyZWFkeSBpbiBjbHVzdGVyLiAqLworCWZvciAoY291bnQgPSAwLCBpID0gTlJfQ1BVUzsgLS1pID49IDA7ICkgeworCQlsaWQgPSBjcHVfMl9sb2dpY2FsX2FwaWNpZFtpXTsKKwkJaWYgKGxpZCAhPSBCQURfQVBJQ0lEICYmIGFwaWNpZF9jbHVzdGVyKGxpZCkgPT0gbXlfY2x1c3RlcikKKwkJCSsrY291bnQ7CisJfQorI2VuZGlmCisJLyogV2Ugb25seSBoYXZlIGEgNCB3aWRlIGJpdG1hcCBpbiBjbHVzdGVyIG1vZGUuICBJZiBhIGRlcmFuZ2VkCisJICogQklPUyBwdXRzIDUgQ1BVcyBpbiBvbmUgQVBJQyBjbHVzdGVyLCB3ZSdyZSBob3NlZC4gKi8KKwlCVUdfT04oY291bnQgPj0gWEFQSUNfREVTVF9DUFVTX1NISUZUKTsKKwlpZCA9IG15X2NsdXN0ZXIgfCAoMVVMIDw8IGNvdW50KTsKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7CisJdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOworCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKGlkKTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKK3sKKwlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogIFN1bW1pdC4gIFVzaW5nICVkIEkvTyBBUElDc1xuIiwKKwkJCQkJCW5yX2lvYXBpY3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBhcGljaWRfMl9ub2RlW2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKyAgICAgICBpZiAoY3B1ID49IE5SX0NQVVMpCisJICAgICAgIHJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiAoaW50KWNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07CisjZWxzZQorCXJldHVybiBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKG1wc19jcHUgPCBOUl9DUFVTKQorCQlyZXR1cm4gKGludClwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIG1wc19jcHUpOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX2lkX21hcCkKK3sKKwkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KKwlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4MEYpOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBhcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZCgwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9tYXNrX3RvX2FwaWNpZChjcHVtYXNrX3QgY3B1bWFzaykKK3sKKwlpbnQgbnVtX2JpdHNfc2V0OworCWludCBjcHVzX2ZvdW5kID0gMDsKKwlpbnQgY3B1OworCWludCBhcGljaWQ7CisKKwludW1fYml0c19zZXQgPSBjcHVzX3dlaWdodChjcHVtYXNrKTsKKwkvKiBSZXR1cm4gaWQgdG8gYWxsICovCisJaWYgKG51bV9iaXRzX3NldCA9PSBOUl9DUFVTKQorCQlyZXR1cm4gKGludCkgMHhGRjsKKwkvKgorCSAqIFRoZSBjcHVzIGluIHRoZSBtYXNrIG11c3QgYWxsIGJlIG9uIHRoZSBhcGljIGNsdXN0ZXIuICBJZiBhcmUgbm90CisJICogb24gdGhlIHNhbWUgYXBpY2lkIGNsdXN0ZXIgcmV0dXJuIGRlZmF1bHQgdmFsdWUgb2YgVEFSR0VUX0NQVVMuCisJICovCisJY3B1ID0gZmlyc3RfY3B1KGNwdW1hc2spOworCWFwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworCXdoaWxlIChjcHVzX2ZvdW5kIDwgbnVtX2JpdHNfc2V0KSB7CisJCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVtYXNrKSkgeworCQkJaW50IG5ld19hcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKKwkJCWlmIChhcGljaWRfY2x1c3RlcihhcGljaWQpICE9CisJCQkJCWFwaWNpZF9jbHVzdGVyKG5ld19hcGljaWQpKXsKKwkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsIF9fZnVuY19fKTsKKwkJCQlyZXR1cm4gMHhGRjsKKwkJCX0KKwkJCWFwaWNpZCA9IGFwaWNpZCB8IG5ld19hcGljaWQ7CisJCQljcHVzX2ZvdW5kKys7CisJCX0KKwkJY3B1Kys7CisJfQorCXJldHVybiBhcGljaWQ7Cit9CisKKy8qIGNwdWlkIHJldHVybnMgdGhlIHZhbHVlIGxhdGNoZWQgaW4gdGhlIEhXIGF0IHJlc2V0LCBub3QgdGhlIEFQSUMgSUQKKyAqIHJlZ2lzdGVyJ3MgdmFsdWUuICBGb3IgYW55IGJveCB3aG9zZSBCSU9TIGNoYW5nZXMgQVBJQyBJRHMsIGxpa2UKKyAqIGNsdXN0ZXJlZCBBUElDIHN5c3RlbXMsIHdlIG11c3QgdXNlIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZC4KKyAqCisgKiBTZWUgSW50ZWwncyBJQS0zMiBTVyBEZXYncyBNYW51YWwgVm9sMiB1bmRlciBDUFVJRC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpID4+IGluZGV4X21zYjsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NVTU1JVF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2FwaWNkZWYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L3N1bW1pdC9hcGljZGVmLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9hcGljZGVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvaXBpLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9zdW1taXQvaXBpLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9pcGkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvbXBwYXJzZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvc3VtbWl0L21wcGFyc2UuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L21wcGFyc2UuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N1c3BlbmQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1c3BlbmQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L3N1c3BlbmQuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vc3VzcGVuZC5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdXNwZW5kXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdXNwZW5kXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwNzRiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1c3BlbmRfMzIuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDEtMjAwMiBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiBCYXNlZCBvbiBjb2RlCisgKiBDb3B5cmlnaHQgMjAwMSBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPgorICovCisjaWZuZGVmIF9BU01fWDg2X1NVU1BFTkRfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9TVVNQRU5EXzMyX0gKKworI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKworc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkgeyByZXR1cm4gMDsgfQorCisvKiBpbWFnZSBvZiB0aGUgc2F2ZWQgcHJvY2Vzc29yIHN0YXRlICovCitzdHJ1Y3Qgc2F2ZWRfY29udGV4dCB7CisJdTE2IGVzLCBmcywgZ3MsIHNzOworCXVuc2lnbmVkIGxvbmcgY3IwLCBjcjIsIGNyMywgY3I0OworCXN0cnVjdCBkZXNjX3B0ciBnZHQ7CisJc3RydWN0IGRlc2NfcHRyIGlkdDsKKwl1MTYgbGR0OworCXUxNiB0c3M7CisJdW5zaWduZWQgbG9uZyB0cjsKKwl1bnNpZ25lZCBsb25nIHNhZmV0eTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2lmZGVmIENPTkZJR19BQ1BJCitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9laXA7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lc3A7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lYnA7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lYng7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lc2k7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lZGk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3NhdmVfcmVnaXN0ZXJfc3RhdGUodW5zaWduZWQgbG9uZyByZXR1cm5fcG9pbnQpCit7CisJc2F2ZWRfZWlwID0gcmV0dXJuX3BvaW50OworCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzcCwlMCIgOiAiPW0iIChzYXZlZF9lc3ApKTsKKwlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYnAsJTAiIDogIj1tIiAoc2F2ZWRfZWJwKSk7CisJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWJ4LCUwIiA6ICI9bSIgKHNhdmVkX2VieCkpOworCWFzbSB2b2xhdGlsZSgibW92bCAlJWVkaSwlMCIgOiAiPW0iIChzYXZlZF9lZGkpKTsKKwlhc20gdm9sYXRpbGUoIm1vdmwgJSVlc2ksJTAiIDogIj1tIiAoc2F2ZWRfZXNpKSk7Cit9CisKKyNkZWZpbmUgYWNwaV9yZXN0b3JlX3JlZ2lzdGVyX3N0YXRlKCkgIGRvIHt9IHdoaWxlICgwKQorCisvKiByb3V0aW5lcyBmb3Igc2F2aW5nL3Jlc3RvcmluZyBrZXJuZWwgc3RhdGUgKi8KK2V4dGVybiBpbnQgYWNwaV9zYXZlX3N0YXRlX21lbSh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfU1VTUEVORF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdXNwZW5kXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdXNwZW5kXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYyODRmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1c3BlbmRfNjQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDEtMjAwMyBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiBCYXNlZCBvbiBjb2RlCisgKiBDb3B5cmlnaHQgMjAwMSBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPgorICovCisjaWZuZGVmIF9BU01fWDg2X1NVU1BFTkRfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9TVVNQRU5EXzY0X0gKKworI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKworc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEltYWdlIG9mIHRoZSBzYXZlZCBwcm9jZXNzb3Igc3RhdGUsIHVzZWQgYnkgdGhlIGxvdyBsZXZlbCBBQ1BJIHN1c3BlbmQgdG8KKyAqIFJBTSBjb2RlIGFuZCBieSB0aGUgbG93IGxldmVsIGhpYmVybmF0aW9uIGNvZGUuCisgKgorICogSWYgeW91IG1vZGlmeSBpdCwgZml4IGFyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TIGFuZCBtYWtlIHN1cmUgdGhhdAorICogX19zYXZlL19fcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKSwgZGVmaW5lZCBpbiBhcmNoL3g4Ni9rZXJuZWwvc3VzcGVuZF82NC5jLAorICogc3RpbGwgd29yayBhcyByZXF1aXJlZC4KKyAqLworc3RydWN0IHNhdmVkX2NvbnRleHQgeworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJdTE2IGRzLCBlcywgZnMsIGdzLCBzczsKKwl1bnNpZ25lZCBsb25nIGdzX2Jhc2UsIGdzX2tlcm5lbF9iYXNlLCBmc19iYXNlOworCXVuc2lnbmVkIGxvbmcgY3IwLCBjcjIsIGNyMywgY3I0LCBjcjg7CisJdW5zaWduZWQgbG9uZyBlZmVyOworCXUxNiBnZHRfcGFkOworCXUxNiBnZHRfbGltaXQ7CisJdW5zaWduZWQgbG9uZyBnZHRfYmFzZTsKKwl1MTYgaWR0X3BhZDsKKwl1MTYgaWR0X2xpbWl0OworCXVuc2lnbmVkIGxvbmcgaWR0X2Jhc2U7CisJdTE2IGxkdDsKKwl1MTYgdHNzOworCXVuc2lnbmVkIGxvbmcgdHI7CisJdW5zaWduZWQgbG9uZyBzYWZldHk7CisJdW5zaWduZWQgbG9uZyByZXR1cm5fYWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgbG9hZGRlYnVnKHRocmVhZCxyZWdpc3RlcikgXAorCXNldF9kZWJ1Z3JlZygodGhyZWFkKS0+ZGVidWdyZWcjI3JlZ2lzdGVyLCByZWdpc3RlcikKKworLyogcm91dGluZXMgZm9yIHNhdmluZy9yZXN0b3Jpbmcga2VybmVsIHN0YXRlICovCitleHRlcm4gaW50IGFjcGlfc2F2ZV9zdGF0ZV9tZW0odm9pZCk7CitleHRlcm4gY2hhciBjb3JlX3Jlc3RvcmVfY29kZTsKK2V4dGVybiBjaGFyIHJlc3RvcmVfcmVnaXN0ZXJzOworCisjZW5kaWYgLyogX0FTTV9YODZfU1VTUEVORF82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zd2lvdGxiLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zd2lvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmYjJjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aW90bGIuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9BU01fWDg2X1NXSU9UTEJfSAorI2RlZmluZSBfQVNNX1g4Nl9TV0lPVExCX0gKKworI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgorCisvKiBTV0lPVExCIGludGVyZmFjZSAqLworCitleHRlcm4gZG1hX2FkZHJfdCBzd2lvdGxiX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwKKwkJCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKK2V4dGVybiB2b2lkICpzd2lvdGxiX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQkJZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkJc2l6ZV90IHNpemUsIGludCBkaXIpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCQkgICBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CitleHRlcm4gdm9pZCBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJCSAgICAgIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CitleHRlcm4gdm9pZCBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJCQkgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CitleHRlcm4gdm9pZCBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQkgICAgaW50IGRpcik7CitleHRlcm4gdm9pZCBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQkgICAgICAgaW50IGRpcik7CitleHRlcm4gaW50IHN3aW90bGJfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgc3dpb3RsYl91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiBpbnQgc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkcik7CitleHRlcm4gdm9pZCBzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CitleHRlcm4gaW50IHN3aW90bGJfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0KHZvaWQpOworCitleHRlcm4gaW50IHN3aW90bGJfZm9yY2U7CisKKyNpZmRlZiBDT05GSUdfU1dJT1RMQgorZXh0ZXJuIGludCBzd2lvdGxiOworZXh0ZXJuIHZvaWQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIHN3aW90bGIgMAorc3RhdGljIGlubGluZSB2b2lkIHBjaV9zd2lvdGxiX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX21hcmtfY2xlYW4odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHt9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TV0lPVExCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5bmNfYml0b3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeW5jX2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDliNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeW5jX2JpdG9wcy5oCkBAIC0wLDAgKzEsMTMwIEBACisjaWZuZGVmIF9BU01fWDg2X1NZTkNfQklUT1BTX0gKKyNkZWZpbmUgX0FTTV9YODZfU1lOQ19CSVRPUFNfSAorCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICovCisKKy8qCisgKiBUaGVzZSBoYXZlIHRvIGJlIGRvbmUgd2l0aCBpbmxpbmUgYXNzZW1ibHk6IHRoYXQgd2F5IHRoZSBiaXQtc2V0dGluZworICogaXMgZ3VhcmFudGVlZCB0byBiZSBhdG9taWMuIEFsbCBiaXQgb3BlcmF0aW9ucyByZXR1cm4gMCBpZiB0aGUgYml0CisgKiB3YXMgY2xlYXJlZCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBhbmQgIT0gMCBpZiBpdCB3YXMgbm90LgorICoKKyAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDMyIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCisgKi8KKworI2RlZmluZSBBRERSICgqKHZvbGF0aWxlIGxvbmcgKilhZGRyKQorCisvKioKKyAqIHN5bmNfc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKKyAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCisgKgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN5bmNfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJYXNtIHZvbGF0aWxlKCJsb2NrOyBidHNsICUxLCUwIgorCQkgICAgIDogIittIiAoQUREUikKKwkJICAgICA6ICJJciIgKG5yKQorCQkgICAgIDogIm1lbW9yeSIpOworfQorCisvKioKKyAqIHN5bmNfY2xlYXJfYml0IC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBzeW5jX2NsZWFyX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBIb3dldmVyLCBpdCBkb2VzCisgKiBub3QgY29udGFpbiBhIG1lbW9yeSBiYXJyaWVyLCBzbyBpZiBpdCBpcyB1c2VkIGZvciBsb2NraW5nIHB1cnBvc2VzLAorICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCisgKiBpbiBvcmRlciB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWFzbSB2b2xhdGlsZSgibG9jazsgYnRybCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKEFERFIpCisJCSAgICAgOiAiSXIiIChucikKKwkJICAgICA6ICJtZW1vcnkiKTsKK30KKworLyoqCisgKiBzeW5jX2NoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBzeW5jX2NoYW5nZV9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN5bmNfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJYXNtIHZvbGF0aWxlKCJsb2NrOyBidGNsICUxLCUwIgorCQkgICAgIDogIittIiAoQUREUikKKwkJICAgICA6ICJJciIgKG5yKQorCQkgICAgIDogIm1lbW9yeSIpOworfQorCisvKioKKyAqIHN5bmNfdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCBzeW5jX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlhc20gdm9sYXRpbGUoImxvY2s7IGJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJICAgICA6ICI9ciIgKG9sZGJpdCksICIrbSIgKEFERFIpCisJCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CisJcmV0dXJuIG9sZGJpdDsKK30KKworLyoqCisgKiBzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3luY190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlhc20gdm9sYXRpbGUoImxvY2s7IGJ0cmwgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJICAgICA6ICI9ciIgKG9sZGJpdCksICIrbSIgKEFERFIpCisJCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CisJcmV0dXJuIG9sZGJpdDsKK30KKworLyoqCisgKiBzeW5jX3Rlc3RfYW5kX2NoYW5nZV9iaXQgLSBDaGFuZ2UgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3luY190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJYXNtIHZvbGF0aWxlKCJsb2NrOyBidGNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCSAgICAgOiAiPXIiIChvbGRiaXQpLCAiK20iIChBRERSKQorCQkgICAgIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKyNkZWZpbmUgc3luY190ZXN0X2JpdChuciwgYWRkcikgdGVzdF9iaXQobnIsIGFkZHIpCisKKyN1bmRlZiBBRERSCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TWU5DX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyZjM5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIEFjY2VzcyB0byB1c2VyIHN5c3RlbSBjYWxsIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKKyAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLgorICoKKyAqIFNlZSBhc20tZ2VuZXJpYy9zeXNjYWxsLmggZm9yIGRlc2NyaXB0aW9ucyBvZiB3aGF0IHdlIG11c3QgZG8gaGVyZS4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1NZU0NBTExfSAorI2RlZmluZSBfQVNNX1g4Nl9TWVNDQUxMX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKgorCSAqIFdlIGFsd2F5cyBzaWduLWV4dGVuZCBhIC0xIHZhbHVlIGJlaW5nIHNldCBoZXJlLAorCSAqIHNvIHRoaXMgaXMgYWx3YXlzIGVpdGhlciAtMUwgb3IgYSBzeXNjYWxsIG51bWJlci4KKwkgKi8KKwlyZXR1cm4gcmVncy0+b3JpZ19heDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfcm9sbGJhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdzLT5heCA9IHJlZ3MtPm9yaWdfYXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9lcnJvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGVycm9yID0gcmVncy0+YXg7CisjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJLyoKKwkgKiBUU19DT01QQVQgaXMgc2V0IGZvciAzMi1iaXQgc3lzY2FsbCBlbnRyaWVzIGFuZCB0aGVuCisJICogcmVtYWlucyBzZXQgdW50aWwgd2UgcmV0dXJuIHRvIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAodGFza190aHJlYWRfaW5mbyh0YXNrKS0+c3RhdHVzICYgVFNfQ09NUEFUKQorCQkvKgorCQkgKiBTaWduLWV4dGVuZCB0aGUgdmFsdWUgc28gKGludCktRUZPTyBiZWNvbWVzIChsb25nKS1FRk9PCisJCSAqIGFuZCB3aWxsIG1hdGNoIGNvcnJlY3RseSBpbiBjb21wYXJpc29ucy4KKwkJICovCisJCWVycm9yID0gKGxvbmcpIChpbnQpIGVycm9yOworI2VuZGlmCisJcmV0dXJuIElTX0VSUl9WQUxVRShlcnJvcikgPyBlcnJvciA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPmF4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgaW50IGVycm9yLCBsb25nIHZhbCkKK3sKKwlyZWdzLT5heCA9IChsb25nKSBlcnJvciA/OiB2YWw7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSB1bnNpZ25lZCBsb25nICphcmdzKQoreworCUJVR19PTihpICsgbiA+IDYpOworCW1lbWNweShhcmdzLCAmcmVncy0+YnggKyBpLCBuICogc2l6ZW9mKGFyZ3NbMF0pKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X2FyZ3VtZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJIHVuc2lnbmVkIGludCBpLCB1bnNpZ25lZCBpbnQgbiwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJQlVHX09OKGkgKyBuID4gNik7CisJbWVtY3B5KCZyZWdzLT5ieCArIGksIGFyZ3MsIG4gKiBzaXplb2YoYXJnc1swXSkpOworfQorCisjZWxzZQkgLyogQ09ORklHX1g4Nl82NCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9nZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCQkJCQkgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKyMgaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJaWYgKHRhc2tfdGhyZWFkX2luZm8odGFzayktPnN0YXR1cyAmIFRTX0NPTVBBVCkKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCSphcmdzKysgPSByZWdzLT5ieDsKKwkJY2FzZSAxOgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJKmFyZ3MrKyA9IHJlZ3MtPmN4OworCQljYXNlIDI6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+ZHg7CisJCWNhc2UgMzoKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCSphcmdzKysgPSByZWdzLT5zaTsKKwkJY2FzZSA0OgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJKmFyZ3MrKyA9IHJlZ3MtPmRpOworCQljYXNlIDU6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+YnA7CisJCWNhc2UgNjoKKwkJCWlmICghbi0tKSBicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwllbHNlCisjIGVuZGlmCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+ZGk7CisJCWNhc2UgMToKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCSphcmdzKysgPSByZWdzLT5zaTsKKwkJY2FzZSAyOgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJKmFyZ3MrKyA9IHJlZ3MtPmR4OworCQljYXNlIDM6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+cjEwOworCQljYXNlIDQ6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQkqYXJncysrID0gcmVncy0+cjg7CisJCWNhc2UgNToKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCSphcmdzKysgPSByZWdzLT5yOTsKKwkJY2FzZSA2OgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCQkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKyMgaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJaWYgKHRhc2tfdGhyZWFkX2luZm8odGFzayktPnN0YXR1cyAmIFRTX0NPTVBBVCkKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCXJlZ3MtPmJ4ID0gKmFyZ3MrKzsKKwkJY2FzZSAxOgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+Y3ggPSAqYXJncysrOworCQljYXNlIDI6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQlyZWdzLT5keCA9ICphcmdzKys7CisJCWNhc2UgMzoKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCXJlZ3MtPnNpID0gKmFyZ3MrKzsKKwkJY2FzZSA0OgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+ZGkgPSAqYXJncysrOworCQljYXNlIDU6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQlyZWdzLT5icCA9ICphcmdzKys7CisJCWNhc2UgNjoKKwkJCWlmICghbi0tKSBicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwllbHNlCisjIGVuZGlmCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQlyZWdzLT5kaSA9ICphcmdzKys7CisJCWNhc2UgMToKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCXJlZ3MtPnNpID0gKmFyZ3MrKzsKKwkJY2FzZSAyOgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQkJcmVncy0+ZHggPSAqYXJncysrOworCQljYXNlIDM6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQlyZWdzLT5yMTAgPSAqYXJncysrOworCQljYXNlIDQ6CisJCQlpZiAoIW4tLSkgYnJlYWs7CisJCQlyZWdzLT5yOCA9ICphcmdzKys7CisJCWNhc2UgNToKKwkJCWlmICghbi0tKSBicmVhazsKKwkJCXJlZ3MtPnI5ID0gKmFyZ3MrKzsKKwkJY2FzZSA2OgorCQkJaWYgKCFuLS0pIGJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorfQorCisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLworCisjZW5kaWYJLyogX0FTTV9YODZfU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3lzY2FsbHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9zeXNjYWxscy5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDNmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMCwwICsxLDQyNSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TWVNURU1fSAorI2RlZmluZSBfQVNNX1g4Nl9TWVNURU1fSAorCisjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorI2luY2x1ZGUgPGFzbS9ub3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorCisvKiBlbnRyaWVzIGluIEFSQ0hfRExJTkZPOiAqLworI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorIyBkZWZpbmUgQVRfVkVDVE9SX1NJWkVfQVJDSCAyCisjZWxzZQorIyBkZWZpbmUgQVRfVkVDVE9SX1NJWkVfQVJDSCAxCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKworc3RydWN0IHRhc2tfc3RydWN0OyAvKiBvbmUgb2YgdGhlIHN0cmFuZ2VyIGFzcGVjdHMgb2YgQyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKKworLyoKKyAqIFNhdmluZyBlZmxhZ3MgaXMgaW1wb3J0YW50LiBJdCBzd2l0Y2hlcyBub3Qgb25seSBJT1BMIGJldHdlZW4gdGFza3MsCisgKiBpdCBhbHNvIHByb3RlY3RzIG90aGVyIHRhc2tzIGZyb20gTlQgbGVha2luZyB0aHJvdWdoIHN5c2VudGVyIGV0Yy4KKyAqLworI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJLyoJCQkJCQkJCVwKKwkgKiBDb250ZXh0LXN3aXRjaGluZyBjbG9iYmVycyBhbGwgcmVnaXN0ZXJzLCBzbyB3ZSBjbG9iYmVyCVwKKwkgKiB0aGVtIGV4cGxpY2l0bHksIHZpYSB1bnVzZWQgb3V0cHV0IHZhcmlhYmxlcy4JCVwKKwkgKiAoRUFYIGFuZCBFQlAgaXMgbm90IGxpc3RlZCBiZWNhdXNlIEVCUCBpcyBzYXZlZC9yZXN0b3JlZAlcCisJICogZXhwbGljaXRseSBmb3Igd2NoYW4gYWNjZXNzIGFuZCBFQVggaXMgdGhlIHJldHVybiB2YWx1ZSBvZglcCisJICogX19zd2l0Y2hfdG8oKSkJCQkJCQlcCisJICovCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBlYngsIGVjeCwgZWR4LCBlc2ksIGVkaTsJCQkJXAorCQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicHVzaGZsXG5cdCIJCS8qIHNhdmUgICAgZmxhZ3MgKi8JXAorCQkgICAgICJwdXNobCAlJWVicFxuXHQiCQkvKiBzYXZlICAgIEVCUCAgICovCVwKKwkJICAgICAibW92bCAlJWVzcCwlW3ByZXZfc3BdXG5cdCIJLyogc2F2ZSAgICBFU1AgICAqLyBcCisJCSAgICAgIm1vdmwgJVtuZXh0X3NwXSwlJWVzcFxuXHQiCS8qIHJlc3RvcmUgRVNQICAgKi8gXAorCQkgICAgICJtb3ZsICQxZiwlW3ByZXZfaXBdXG5cdCIJLyogc2F2ZSAgICBFSVAgICAqLwlcCisJCSAgICAgInB1c2hsICVbbmV4dF9pcF1cblx0IgkvKiByZXN0b3JlIEVJUCAgICovCVwKKwkJICAgICAiam1wIF9fc3dpdGNoX3RvXG4iCS8qIHJlZ3Bhcm0gY2FsbCAgKi8JXAorCQkgICAgICIxOlx0IgkJCQkJCVwKKwkJICAgICAicG9wbCAlJWVicFxuXHQiCQkvKiByZXN0b3JlIEVCUCAgICovCVwKKwkJICAgICAicG9wZmxcbiIJCQkvKiByZXN0b3JlIGZsYWdzICovCVwKKwkJCQkJCQkJCVwKKwkJICAgICAvKiBvdXRwdXQgcGFyYW1ldGVycyAqLwkJCQlcCisJCSAgICAgOiBbcHJldl9zcF0gIj1tIiAocHJldi0+dGhyZWFkLnNwKSwJCVwKKwkJICAgICAgIFtwcmV2X2lwXSAiPW0iIChwcmV2LT50aHJlYWQuaXApLAkJXAorCQkgICAgICAgIj1hIiAobGFzdCksCQkJCQlcCisJCQkJCQkJCQlcCisJCSAgICAgICAvKiBjbG9iYmVyZWQgb3V0cHV0IHJlZ2lzdGVyczogKi8JCVwKKwkJICAgICAgICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCksCQlcCisJCSAgICAgICAiPVMiIChlc2kpLCAiPUQiIChlZGkpCQkJCVwKKwkJICAgICAgIAkJCQkJCQlcCisJCSAgICAgICAvKiBpbnB1dCBwYXJhbWV0ZXJzOiAqLwkJCQlcCisJCSAgICAgOiBbbmV4dF9zcF0gICJtIiAobmV4dC0+dGhyZWFkLnNwKSwJCVwKKwkJICAgICAgIFtuZXh0X2lwXSAgIm0iIChuZXh0LT50aHJlYWQuaXApLAkJXAorCQkgICAgICAgCQkJCQkJCVwKKwkJICAgICAgIC8qIHJlZ3Bhcm0gcGFyYW1ldGVycyBmb3IgX19zd2l0Y2hfdG8oKTogKi8JXAorCQkgICAgICAgW3ByZXZdICAgICAiYSIgKHByZXYpLAkJCQlcCisJCSAgICAgICBbbmV4dF0gICAgICJkIiAobmV4dCkJCQkJXAorCQkJCQkJCQkJXAorCQkgICAgIDogLyogcmVsb2FkZWQgc2VnbWVudCByZWdpc3RlcnMgKi8JCQlcCisJCQkibWVtb3J5Iik7CQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogZGlzYWJsZSBobHQgZHVyaW5nIGNlcnRhaW4gY3JpdGljYWwgaS9vIG9wZXJhdGlvbnMKKyAqLworI2RlZmluZSBIQVZFX0RJU0FCTEVfSExUCisjZWxzZQorI2RlZmluZSBfX1NBVkUocmVnLCBvZmZzZXQpICJtb3ZxICUlIiAjcmVnICIsKDE0LSIgI29mZnNldCAiKSo4KCUlcnNwKVxuXHQiCisjZGVmaW5lIF9fUkVTVE9SRShyZWcsIG9mZnNldCkgIm1vdnEgKDE0LSIgI29mZnNldCAiKSo4KCUlcnNwKSwlJSIgI3JlZyAiXG5cdCIKKworLyogZnJhbWUgcG9pbnRlciBtdXN0IGJlIGxhc3QgZm9yIGdldF93Y2hhbiAqLworI2RlZmluZSBTQVZFX0NPTlRFWFQgICAgInB1c2hmIDsgcHVzaHEgJSVyYnAgOyBtb3ZxICUlcnNpLCUlcmJwXG5cdCIKKyNkZWZpbmUgUkVTVE9SRV9DT05URVhUICJtb3ZxICUlcmJwLCUlcnNpIDsgcG9wcSAlJXJicCA7IHBvcGZcdCIKKworI2RlZmluZSBfX0VYVFJBX0NMT0JCRVIgIFwKKwksICJyY3giLCAicmJ4IiwgInJkeCIsICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgXAorCSAgInIxMiIsICJyMTMiLCAicjE0IiwgInIxNSIKKworLyogU2F2ZSByZXN0b3JlIGZsYWdzIHRvIGNsZWFyIGhhbmRsZSBsZWFraW5nIE5UICovCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBcCisJYXNtIHZvbGF0aWxlKFNBVkVfQ09OVEVYVAkJCQkJCSAgICBcCisJICAgICAibW92cSAlJXJzcCwlUFt0aHJlYWRyc3BdKCVbcHJldl0pXG5cdCIgLyogc2F2ZSBSU1AgKi8JICBcCisJICAgICAibW92cSAlUFt0aHJlYWRyc3BdKCVbbmV4dF0pLCUlcnNwXG5cdCIgLyogcmVzdG9yZSBSU1AgKi8JICBcCisJICAgICAiY2FsbCBfX3N3aXRjaF90b1xuXHQiCQkJCQkgIFwKKwkgICAgICIuZ2xvYmwgdGhyZWFkX3JldHVyblxuIgkJCQkJICBcCisJICAgICAidGhyZWFkX3JldHVybjpcblx0IgkJCQkJICBcCisJICAgICAibW92cSAlJWdzOiVQW3BkYV9wY3VycmVudF0sJSVyc2lcblx0IgkJCSAgXAorCSAgICAgIm1vdnEgJVBbdGhyZWFkX2luZm9dKCUlcnNpKSwlJXI4XG5cdCIJCQkgIFwKKwkgICAgIExPQ0tfUFJFRklYICJidHIgICVbdGlmX2ZvcmtdLCVQW3RpX2ZsYWdzXSglJXI4KVxuXHQiCSAgXAorCSAgICAgIm1vdnEgJSVyYXgsJSVyZGlcblx0IiAJCQkJCSAgXAorCSAgICAgImpjICAgcmV0X2Zyb21fZm9ya1xuXHQiCQkJCQkgIFwKKwkgICAgIFJFU1RPUkVfQ09OVEVYVAkJCQkJCSAgXAorCSAgICAgOiAiPWEiIChsYXN0KQkJCQkJICAJICBcCisJICAgICA6IFtuZXh0XSAiUyIgKG5leHQpLCBbcHJldl0gIkQiIChwcmV2KSwJCQkgIFwKKwkgICAgICAgW3RocmVhZHJzcF0gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5zcCkpLCBcCisJICAgICAgIFt0aV9mbGFnc10gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZsYWdzKSksCSAgXAorCSAgICAgICBbdGlmX2ZvcmtdICJpIiAoVElGX0ZPUkspLAkJCSAgCSAgXAorCSAgICAgICBbdGhyZWFkX2luZm9dICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpLCAgIFwKKwkgICAgICAgW3BkYV9wY3VycmVudF0gImkiIChvZmZzZXRvZihzdHJ1Y3QgeDg2NjRfcGRhLCBwY3VycmVudCkpICBcCisJICAgICA6ICJtZW1vcnkiLCAiY2MiIF9fRVhUUkFfQ0xPQkJFUikKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfc2V0X2Jhc2UoYWRkciwgYmFzZSkgZG8geyB1bnNpZ25lZCBsb25nIF9fcHI7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgibW92dyAlJWR4LCUxXG5cdCIgXAorCSJyb3JsICQxNiwlJWVkeFxuXHQiIFwKKwkibW92YiAlJWRsLCUyXG5cdCIgXAorCSJtb3ZiICUlZGgsJTMiIFwKKwk6Ij0mZCIgKF9fcHIpIFwKKwk6Im0iICgqKChhZGRyKSsyKSksIFwKKwkgIm0iICgqKChhZGRyKSs0KSksIFwKKwkgIm0iICgqKChhZGRyKSs3KSksIFwKKwkgIjAiIChiYXNlKSBcCisJKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfc2V0X2xpbWl0KGFkZHIsIGxpbWl0KSBkbyB7IHVuc2lnbmVkIGxvbmcgX19scjsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Z3ICUlZHgsJTFcblx0IiBcCisJInJvcmwgJDE2LCUlZWR4XG5cdCIgXAorCSJtb3ZiICUyLCUlZGhcblx0IiBcCisJImFuZGIgJDB4ZjAsJSVkaFxuXHQiIFwKKwkib3JiICUlZGgsJSVkbFxuXHQiIFwKKwkibW92YiAlJWRsLCUyIiBcCisJOiI9JmQiIChfX2xyKSBcCisJOiJtIiAoKihhZGRyKSksIFwKKwkgIm0iICgqKChhZGRyKSs2KSksIFwKKwkgIjAiIChsaW1pdCkgXAorCSk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgc2V0X2Jhc2UobGR0LCBiYXNlKSBfc2V0X2Jhc2UoKChjaGFyICopJihsZHQpKSAsIChiYXNlKSkKKyNkZWZpbmUgc2V0X2xpbWl0KGxkdCwgbGltaXQpIF9zZXRfbGltaXQoKChjaGFyICopJihsZHQpKSAsICgobGltaXQpLTEpKQorCitleHRlcm4gdm9pZCBuYXRpdmVfbG9hZF9nc19pbmRleCh1bnNpZ25lZCk7CisKKy8qCisgKiBMb2FkIGEgc2VnbWVudC4gRmFsbCBiYWNrIG9uIGxvYWRpbmcgdGhlIHplcm8KKyAqIHNlZ21lbnQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuLgorICovCisjZGVmaW5lIGxvYWRzZWdtZW50KHNlZywgdmFsdWUpCQkJXAorCWFzbSB2b2xhdGlsZSgiXG4iCQkJXAorCQkgICAgICIxOlx0IgkJCVwKKwkJICAgICAibW92bCAlazAsJSUiICNzZWcgIlxuIglcCisJCSAgICAgIjI6XG4iCQkJXAorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCVwKKwkJICAgICAiMzpcdCIJCQlcCisJCSAgICAgIm1vdmwgJWsxLCAlJSIgI3NlZyAiXG5cdCIJXAorCQkgICAgICJqbXAgMmJcbiIJCQlcCisJCSAgICAgIi5wcmV2aW91c1xuIgkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwzYikJXAorCQkgICAgIDogOiJyIiAodmFsdWUpLCAiciIgKDApIDogIm1lbW9yeSIpCisKKworLyoKKyAqIFNhdmUgYSBzZWdtZW50IHJlZ2lzdGVyIGF3YXkKKyAqLworI2RlZmluZSBzYXZlc2VnbWVudChzZWcsIHZhbHVlKQkJCQlcCisJYXNtKCJtb3YgJSUiICNzZWcgIiwlMCI6Ij1yIiAodmFsdWUpIDogOiAibWVtb3J5IikKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9saW1pdCh1bnNpZ25lZCBsb25nIHNlZ21lbnQpCit7CisJdW5zaWduZWQgbG9uZyBfX2xpbWl0OworCWFzbSgibHNsbCAlMSwlMCIgOiAiPXIiIChfX2xpbWl0KSA6ICJyIiAoc2VnbWVudCkpOworCXJldHVybiBfX2xpbWl0ICsgMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9jbHRzKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCJjbHRzIik7Cit9CisKKy8qCisgKiBWb2xhdGlsZSBpc24ndCBlbm91Z2ggdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSByZW9yZGVyaW5nIHRoZQorICogcmVhZC93cml0ZSBmdW5jdGlvbnMgZm9yIHRoZSBjb250cm9sIHJlZ2lzdGVycyBhbmQgbWVzc2luZyBldmVyeXRoaW5nIHVwLgorICogQSBtZW1vcnkgY2xvYmJlciB3b3VsZCBzb2x2ZSB0aGUgcHJvYmxlbSwgYnV0IHdvdWxkIHByZXZlbnQgcmVvcmRlcmluZyBvZgorICogYWxsIGxvYWRzIHN0b3JlcyBhcm91bmQgaXQsIHdoaWNoIGNhbiBodXJ0IHBlcmZvcm1hbmNlLiBTb2x1dGlvbiBpcyB0bworICogdXNlIGEgdmFyaWFibGUgYW5kIG1pbWljIHJlYWRzIGFuZCB3cml0ZXMgdG8gaXQgdG8gZW5mb3JjZSBzZXJpYWxpemF0aW9uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9yY2Vfb3JkZXI7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlhc20gdm9sYXRpbGUoIm1vdiAlJWNyMCwlMFxuXHQiIDogIj1yIiAodmFsKSwgIj1tIiAoX19mb3JjZV9vcmRlcikpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfY3IwKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibW92ICUwLCUlY3IwIjogOiAiciIgKHZhbCksICJtIiAoX19mb3JjZV9vcmRlcikpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3IyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJYXNtIHZvbGF0aWxlKCJtb3YgJSVjcjIsJTBcblx0IiA6ICI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1vdiAlMCwlJWNyMiI6IDogInIiICh2YWwpLCAibSIgKF9fZm9yY2Vfb3JkZXIpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyMyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWFzbSB2b2xhdGlsZSgibW92ICUlY3IzLCUwXG5cdCIgOiAiPXIiICh2YWwpLCAiPW0iIChfX2ZvcmNlX29yZGVyKSk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9jcjModW5zaWduZWQgbG9uZyB2YWwpCit7CisJYXNtIHZvbGF0aWxlKCJtb3YgJTAsJSVjcjMiOiA6ICJyIiAodmFsKSwgIm0iIChfX2ZvcmNlX29yZGVyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlhc20gdm9sYXRpbGUoIm1vdiAlJWNyNCwlMFxuXHQiIDogIj1yIiAodmFsKSwgIj1tIiAoX19mb3JjZV9vcmRlcikpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjRfc2FmZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCS8qIFRoaXMgY291bGQgZmF1bHQgaWYgJWNyNCBkb2VzIG5vdCBleGlzdC4gSW4geDg2XzY0LCBhIGNyNCBhbHdheXMKKwkgKiBleGlzdHMsIHNvIGl0IHdpbGwgbmV2ZXIgZmFpbC4gKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJYXNtIHZvbGF0aWxlKCIxOiBtb3YgJSVjcjQsICUwXG4iCisJCSAgICAgIjI6XG4iCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAyYikKKwkJICAgICA6ICI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpIDogIjAiICgwKSk7CisjZWxzZQorCXZhbCA9IG5hdGl2ZV9yZWFkX2NyNCgpOworI2VuZGlmCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9jcjQodW5zaWduZWQgbG9uZyB2YWwpCit7CisJYXNtIHZvbGF0aWxlKCJtb3YgJTAsJSVjcjQiOiA6ICJyIiAodmFsKSwgIm0iIChfX2ZvcmNlX29yZGVyKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3I4KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjcjg7CisJYXNtIHZvbGF0aWxlKCJtb3ZxICUlY3I4LCUwIiA6ICI9ciIgKGNyOCkpOworCXJldHVybiBjcjg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfY3I4KHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibW92cSAlMCwlJWNyOCIgOjogInIiICh2YWwpIDogIm1lbW9yeSIpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd2JpbnZkKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCJ3YmludmQiOiA6IDoibWVtb3J5Iik7Cit9CisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNlbHNlCisjZGVmaW5lIHJlYWRfY3IwKCkJKG5hdGl2ZV9yZWFkX2NyMCgpKQorI2RlZmluZSB3cml0ZV9jcjAoeCkJKG5hdGl2ZV93cml0ZV9jcjAoeCkpCisjZGVmaW5lIHJlYWRfY3IyKCkJKG5hdGl2ZV9yZWFkX2NyMigpKQorI2RlZmluZSB3cml0ZV9jcjIoeCkJKG5hdGl2ZV93cml0ZV9jcjIoeCkpCisjZGVmaW5lIHJlYWRfY3IzKCkJKG5hdGl2ZV9yZWFkX2NyMygpKQorI2RlZmluZSB3cml0ZV9jcjMoeCkJKG5hdGl2ZV93cml0ZV9jcjMoeCkpCisjZGVmaW5lIHJlYWRfY3I0KCkJKG5hdGl2ZV9yZWFkX2NyNCgpKQorI2RlZmluZSByZWFkX2NyNF9zYWZlKCkJKG5hdGl2ZV9yZWFkX2NyNF9zYWZlKCkpCisjZGVmaW5lIHdyaXRlX2NyNCh4KQkobmF0aXZlX3dyaXRlX2NyNCh4KSkKKyNkZWZpbmUgd2JpbnZkKCkJKG5hdGl2ZV93YmludmQoKSkKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIHJlYWRfY3I4KCkJKG5hdGl2ZV9yZWFkX2NyOCgpKQorI2RlZmluZSB3cml0ZV9jcjgoeCkJKG5hdGl2ZV93cml0ZV9jcjgoeCkpCisjZGVmaW5lIGxvYWRfZ3NfaW5kZXggICBuYXRpdmVfbG9hZF9nc19pbmRleAorI2VuZGlmCisKKy8qIENsZWFyIHRoZSAnVFMnIGJpdCAqLworI2RlZmluZSBjbHRzKCkJCShuYXRpdmVfY2x0cygpKQorCisjZW5kaWYvKiBDT05GSUdfUEFSQVZJUlQgKi8KKworI2RlZmluZSBzdHRzKCkgd3JpdGVfY3IwKHJlYWRfY3IwKCkgfCBYODZfQ1IwX1RTKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xmbHVzaCh2b2xhdGlsZSB2b2lkICpfX3ApCit7CisJYXNtIHZvbGF0aWxlKCJjbGZsdXNoICUwIiA6ICIrbSIgKCoodm9sYXRpbGUgY2hhciBfX2ZvcmNlICopX19wKSk7Cit9CisKKyNkZWZpbmUgbm9wKCkgYXNtIHZvbGF0aWxlICgibm9wIikKKwordm9pZCBkaXNhYmxlX2hsdCh2b2lkKTsKK3ZvaWQgZW5hYmxlX2hsdCh2b2lkKTsKKwordm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApOworZXh0ZXJuIHZvaWQgZnJlZV9pbml0X3BhZ2VzKGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKTsKKwordm9pZCBkZWZhdWx0X2lkbGUodm9pZCk7CisKKy8qCisgKiBGb3JjZSBzdHJpY3QgQ1BVIG9yZGVyaW5nLgorICogQW5kIHllcywgdGhpcyBpcyByZXF1aXJlZCBvbiBVUCB0b28gd2hlbiB3ZSdyZSB0YWxraW5nCisgKiB0byBkZXZpY2VzLgorICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIFNvbWUgbm9uLUludGVsIGNsb25lcyBzdXBwb3J0IG91dCBvZiBvcmRlciBzdG9yZS4gd21iKCkgY2Vhc2VzIHRvIGJlIGEKKyAqIG5vcCBmb3IgdGhlc2UuCisgKi8KKyNkZWZpbmUgbWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJtZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0yKQorI2RlZmluZSBybWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJsZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0yKQorI2RlZmluZSB3bWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJzZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0pCisjZWxzZQorI2RlZmluZSBtYigpIAlhc20gdm9sYXRpbGUoIm1mZW5jZSI6OjoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJYXNtIHZvbGF0aWxlKCJsZmVuY2UiOjo6Im1lbW9yeSIpCisjZGVmaW5lIHdtYigpCWFzbSB2b2xhdGlsZSgic2ZlbmNlIiA6OjogIm1lbW9yeSIpCisjZW5kaWYKKworLyoqCisgKiByZWFkX2JhcnJpZXJfZGVwZW5kcyAtIEZsdXNoIGFsbCBwZW5kaW5nIHJlYWRzIHRoYXQgc3Vic2VxdWVudHMgcmVhZHMKKyAqIGRlcGVuZCBvbi4KKyAqCisgKiBObyBkYXRhLWRlcGVuZGVudCByZWFkcyBmcm9tIG1lbW9yeS1saWtlIHJlZ2lvbnMgYXJlIGV2ZXIgcmVvcmRlcmVkCisgKiBvdmVyIHRoaXMgYmFycmllci4gIEFsbCByZWFkcyBwcmVjZWRpbmcgdGhpcyBwcmltaXRpdmUgYXJlIGd1YXJhbnRlZWQKKyAqIHRvIGFjY2VzcyBtZW1vcnkgKGJ1dCBub3QgbmVjZXNzYXJpbHkgb3RoZXIgQ1BVcycgY2FjaGVzKSBiZWZvcmUgYW55CisgKiByZWFkcyBmb2xsb3dpbmcgdGhpcyBwcmltaXRpdmUgdGhhdCBkZXBlbmQgb24gdGhlIGRhdGEgcmV0dXJuIGJ5CisgKiBhbnkgb2YgdGhlIHByZWNlZGluZyByZWFkcy4gIFRoaXMgcHJpbWl0aXZlIGlzIG11Y2ggbGlnaHRlciB3ZWlnaHQgdGhhbgorICogcm1iKCkgb24gbW9zdCBDUFVzLCBhbmQgaXMgbmV2ZXIgaGVhdmllciB3ZWlnaHQgdGhhbiBpcworICogcm1iKCkuCisgKgorICogVGhlc2Ugb3JkZXJpbmcgY29uc3RyYWludHMgYXJlIHJlc3BlY3RlZCBieSBib3RoIHRoZSBsb2NhbCBDUFUKKyAqIGFuZCB0aGUgY29tcGlsZXIuCisgKgorICogT3JkZXJpbmcgaXMgbm90IGd1YXJhbnRlZWQgYnkgYW55dGhpbmcgb3RoZXIgdGhhbiB0aGVzZSBwcmltaXRpdmVzLAorICogbm90IGV2ZW4gYnkgZGF0YSBkZXBlbmRlbmNpZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisgKiBtZW1vcnlfYmFycmllcigpIGZvciBleGFtcGxlcyBhbmQgVVJMcyB0byBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgd291bGQgZm9yY2Ugb3JkZXJpbmcgKHRoZSBpbml0aWFsCisgKiB2YWx1ZSBvZiAiYSIgaXMgemVybywgImIiIGlzIG9uZSwgYW5kICJwIiBpcyAiJmEiKToKKyAqCisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKglDUFUgMAkJCQlDUFUgMQorICoKKyAqCWIgPSAyOworICoJbWVtb3J5X2JhcnJpZXIoKTsKKyAqCXAgPSAmYjsJCQkJcSA9IHA7CisgKgkJCQkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKyAqCQkJCQlkID0gKnE7CisgKiA8L3Byb2dyYW1saXN0aW5nPgorICoKKyAqIGJlY2F1c2UgdGhlIHJlYWQgb2YgIipxIiBkZXBlbmRzIG9uIHRoZSByZWFkIG9mICJwIiBhbmQgdGhlc2UKKyAqIHR3byByZWFkcyBhcmUgc2VwYXJhdGVkIGJ5IGEgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKS4gIEhvd2V2ZXIsCisgKiB0aGUgZm9sbG93aW5nIGNvZGUsIHdpdGggdGhlIHNhbWUgaW5pdGlhbCB2YWx1ZXMgZm9yICJhIiBhbmQgImIiOgorICoKKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqCUNQVSAwCQkJCUNQVSAxCisgKgorICoJYSA9IDI7CisgKgltZW1vcnlfYmFycmllcigpOworICoJYiA9IDM7CQkJCXkgPSBiOworICoJCQkJCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7CisgKgkJCQkJeCA9IGE7CisgKiA8L3Byb2dyYW1saXN0aW5nPgorICoKKyAqIGRvZXMgbm90IGVuZm9yY2Ugb3JkZXJpbmcsIHNpbmNlIHRoZXJlIGlzIG5vIGRhdGEgZGVwZW5kZW5jeSBiZXR3ZWVuCisgKiB0aGUgcmVhZCBvZiAiYSIgYW5kIHRoZSByZWFkIG9mICJiIi4gIFRoZXJlZm9yZSwgb24gc29tZSBDUFVzLCBzdWNoCisgKiBhcyBBbHBoYSwgInkiIGNvdWxkIGJlIHNldCB0byAzIGFuZCAieCIgdG8gMC4gIFVzZSBybWIoKQorICogaW4gY2FzZXMgbGlrZSB0aGlzIHdoZXJlIHRoZXJlIGFyZSBubyBkYXRhIGRlcGVuZGVuY2llcy4KKyAqKi8KKworI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX21iKCkJbWIoKQorI2lmZGVmIENPTkZJR19YODZfUFBST19GRU5DRQorIyBkZWZpbmUgc21wX3JtYigpCXJtYigpCisjZWxzZQorIyBkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9PT1NUT1JFCisjIGRlZmluZSBzbXBfd21iKCkgCXdtYigpCisjZWxzZQorIyBkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2VuZGlmCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCXJlYWRfYmFycmllcl9kZXBlbmRzKCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgKHZvaWQpeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgdmFyID0gdmFsdWU7IGJhcnJpZXIoKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogU3RvcCBSRFRTQyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBuZWVkZWQgd2hlbiB5b3UgbmVlZCB0byB1c2UgUkRUU0MKKyAqIChvciBnZXRfY3ljbGVzIG9yIHZyZWFkIHRoYXQgcG9zc2libHkgYWNjZXNzZXMgdGhlIFRTQykgaW4gYSBkZWZpbmVkCisgKiBjb2RlIHJlZ2lvbi4KKyAqCisgKiAoQ291bGQgdXNlIGFuIGFsdGVybmF0aXZlIHRocmVlIHdheSBmb3IgdGhpcyBpZiB0aGVyZSB3YXMgb25lLikKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJkdHNjX2JhcnJpZXIodm9pZCkKK3sKKwlhbHRlcm5hdGl2ZShBU01fTk9QMywgIm1mZW5jZSIsIFg4Nl9GRUFUVVJFX01GRU5DRV9SRFRTQyk7CisJYWx0ZXJuYXRpdmUoQVNNX05PUDMsICJsZmVuY2UiLCBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MpOworfQorCisjZW5kaWYgLyogX0FTTV9YODZfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1OWUwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FTTV9YODZfU1lTVEVNXzY0X0gKKyNkZWZpbmUgX0FTTV9YODZfU1lTVEVNXzY0X0gKKworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjgodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNyODsKKwlhc20gdm9sYXRpbGUoIm1vdnEgJSVjcjgsJTAiIDogIj1yIiAoY3I4KSk7CisJcmV0dXJuIGNyODsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyOCh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjgiIDo6ICJyIiAodmFsKSA6ICJtZW1vcnkiKTsKK30KKworI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9TWVNURU1fNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90Y2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTY2NzdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGNlLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYXNtLXBvd2VycGMvdGNlLmguCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDYKKyAqCisgKiBBdXRob3I6IE11bGkgQmVuLVllaHVkYSA8bXVsaUBpbC5pYm0uY29tPgorICogQXV0aG9yOiBKb24gTWFzb24gPGpkbWFzb25AdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1RDRV9ICisjZGVmaW5lIF9BU01fWDg2X1RDRV9ICisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3BlY2lmaWVkX3RhYmxlX3NpemU7CitzdHJ1Y3QgaW9tbXVfdGFibGU7CisKKyNkZWZpbmUgVENFX0VOVFJZX1NJWkUgICA4ICAgLyogaW4gYnl0ZXMgKi8KKworI2RlZmluZSBUQ0VfUkVBRF9TSElGVCAgIDAKKyNkZWZpbmUgVENFX1dSSVRFX1NISUZUICAxCisjZGVmaW5lIFRDRV9IVUJJRF9TSElGVCAgMiAgIC8qIHVudXNlZCAqLworI2RlZmluZSBUQ0VfUlNWRF9TSElGVCAgIDggICAvKiB1bnVzZWQgKi8KKyNkZWZpbmUgVENFX1JQTl9TSElGVCAgICAxMgorI2RlZmluZSBUQ0VfVU5VU0VEX1NISUZUIDQ4ICAvKiB1bnVzZWQgKi8KKworI2RlZmluZSBUQ0VfUlBOX01BU0sgICAgIDB4MDAwMGZmZmZmZmZmZjAwMFVMTAorCitleHRlcm4gdm9pZCB0Y2VfYnVpbGQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHVuc2lnbmVkIGxvbmcgaW5kZXgsCisJCSAgICAgIHVuc2lnbmVkIGludCBucGFnZXMsIHVuc2lnbmVkIGxvbmcgdWFkZHIsIGludCBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgdGNlX2ZyZWUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGludCBucGFnZXMpOworZXh0ZXJuIHZvaWQgKiBfX2luaXQgYWxsb2NfdGNlX3RhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGZyZWVfdGNlX3RhYmxlKHZvaWQgKnRibCk7CitleHRlcm4gaW50IF9faW5pdCBidWlsZF90Y2VfdGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICpiYmFyKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1RDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjFiNzBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGVybWJpdHMuaApAQCAtMCwwICsxLDE5OCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9URVJNQklUU19ICisjZGVmaW5lIF9BU01fWDg2X1RFUk1CSVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworc3RydWN0IHRlcm1pb3MyIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKK3N0cnVjdCBrdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKy8qIGNfaWZsYWcgYml0cyAqLworI2RlZmluZSBJR05CUksJMDAwMDAwMQorI2RlZmluZSBCUktJTlQJMDAwMDAwMgorI2RlZmluZSBJR05QQVIJMDAwMDAwNAorI2RlZmluZSBQQVJNUksJMDAwMDAxMAorI2RlZmluZSBJTlBDSwkwMDAwMDIwCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCisjZGVmaW5lIElOTENSCTAwMDAxMDAKKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAorI2RlZmluZSBJQ1JOTAkwMDAwNDAwCisjZGVmaW5lIElVQ0xDCTAwMDEwMDAKKyNkZWZpbmUgSVhPTgkwMDAyMDAwCisjZGVmaW5lIElYQU5ZCTAwMDQwMDAKKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAorI2RlZmluZSBJTUFYQkVMCTAwMjAwMDAKKyNkZWZpbmUgSVVURjgJMDA0MDAwMAorCisvKiBjX29mbGFnIGJpdHMgKi8KKyNkZWZpbmUgT1BPU1QJMDAwMDAwMQorI2RlZmluZSBPTENVQwkwMDAwMDAyCisjZGVmaW5lIE9OTENSCTAwMDAwMDQKKyNkZWZpbmUgT0NSTkwJMDAwMDAxMAorI2RlZmluZSBPTk9DUgkwMDAwMDIwCisjZGVmaW5lIE9OTFJFVAkwMDAwMDQwCisjZGVmaW5lIE9GSUxMCTAwMDAxMDAKKyNkZWZpbmUgT0ZERUwJMDAwMDIwMAorI2RlZmluZSBOTERMWQkwMDAwNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAKKyNkZWZpbmUgICBOTDEJMDAwMDQwMAorI2RlZmluZSBDUkRMWQkwMDAzMDAwCisjZGVmaW5lICAgQ1IwCTAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMAorI2RlZmluZSAgIENSMgkwMDAyMDAwCisjZGVmaW5lICAgQ1IzCTAwMDMwMDAKKyNkZWZpbmUgVEFCRExZCTAwMTQwMDAKKyNkZWZpbmUgICBUQUIwCTAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDQwMDAKKyNkZWZpbmUgICBUQUIyCTAwMTAwMDAKKyNkZWZpbmUgICBUQUIzCTAwMTQwMDAKKyNkZWZpbmUgICBYVEFCUwkwMDE0MDAwCisjZGVmaW5lIEJTRExZCTAwMjAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMAorI2RlZmluZSAgIEJTMQkwMDIwMDAwCisjZGVmaW5lIFZURExZCTAwNDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMAorI2RlZmluZSAgIFZUMQkwMDQwMDAwCisjZGVmaW5lIEZGRExZCTAxMDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMAorI2RlZmluZSAgIEZGMQkwMTAwMDAwCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJMDAxMDAxNworI2RlZmluZSAgQjAJMDAwMDAwMAkJLyogaGFuZyB1cCAqLworI2RlZmluZSAgQjUwCTAwMDAwMDEKKyNkZWZpbmUgIEI3NQkwMDAwMDAyCisjZGVmaW5lICBCMTEwCTAwMDAwMDMKKyNkZWZpbmUgIEIxMzQJMDAwMDAwNAorI2RlZmluZSAgQjE1MAkwMDAwMDA1CisjZGVmaW5lICBCMjAwCTAwMDAwMDYKKyNkZWZpbmUgIEIzMDAJMDAwMDAwNworI2RlZmluZSAgQjYwMAkwMDAwMDEwCisjZGVmaW5lICBCMTIwMAkwMDAwMDExCisjZGVmaW5lICBCMTgwMAkwMDAwMDEyCisjZGVmaW5lICBCMjQwMAkwMDAwMDEzCisjZGVmaW5lICBCNDgwMAkwMDAwMDE0CisjZGVmaW5lICBCOTYwMAkwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAJMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwCTAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ1NJWkUJMDAwMDA2MAorI2RlZmluZSAgIENTNQkwMDAwMDAwCisjZGVmaW5lICAgQ1M2CTAwMDAwMjAKKyNkZWZpbmUgICBDUzcJMDAwMDA0MAorI2RlZmluZSAgIENTOAkwMDAwMDYwCisjZGVmaW5lIENTVE9QQgkwMDAwMTAwCisjZGVmaW5lIENSRUFECTAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CCTAwMDA0MDAKKyNkZWZpbmUgUEFST0RECTAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wJMDAwMjAwMAorI2RlZmluZSBDTE9DQUwJMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUJICAgQk9USEVSIDAwMTAwMDAJCS8qIG5vbiBzdGFuZGFyZCByYXRlICovCisjZGVmaW5lICAgIEI1NzYwMCAwMDEwMDAxCisjZGVmaW5lICAgQjExNTIwMCAwMDEwMDAyCisjZGVmaW5lICAgQjIzMDQwMCAwMDEwMDAzCisjZGVmaW5lICAgQjQ2MDgwMCAwMDEwMDA0CisjZGVmaW5lICAgQjUwMDAwMCAwMDEwMDA1CisjZGVmaW5lICAgQjU3NjAwMCAwMDEwMDA2CisjZGVmaW5lICAgQjkyMTYwMCAwMDEwMDA3CisjZGVmaW5lICBCMTAwMDAwMCAwMDEwMDEwCisjZGVmaW5lICBCMTE1MjAwMCAwMDEwMDExCisjZGVmaW5lICBCMTUwMDAwMCAwMDEwMDEyCisjZGVmaW5lICBCMjAwMDAwMCAwMDEwMDEzCisjZGVmaW5lICBCMjUwMDAwMCAwMDEwMDE0CisjZGVmaW5lICBCMzAwMDAwMCAwMDEwMDE1CisjZGVmaW5lICBCMzUwMDAwMCAwMDEwMDE2CisjZGVmaW5lICBCNDAwMDAwMCAwMDEwMDE3CisjZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkvKiBpbnB1dCBiYXVkIHJhdGUgKi8KKyNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KKyNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkvKiBmbG93IGNvbnRyb2wgKi8KKworI2RlZmluZSBJQlNISUZUCSAgMTYJCS8qIFNoaWZ0IGZyb20gQ0JBVUQgdG8gQ0lCQVVEICovCisKKy8qIGNfbGZsYWcgYml0cyAqLworI2RlZmluZSBJU0lHCTAwMDAwMDEKKyNkZWZpbmUgSUNBTk9OCTAwMDAwMDIKKyNkZWZpbmUgWENBU0UJMDAwMDAwNAorI2RlZmluZSBFQ0hPCTAwMDAwMTAKKyNkZWZpbmUgRUNIT0UJMDAwMDAyMAorI2RlZmluZSBFQ0hPSwkwMDAwMDQwCisjZGVmaW5lIEVDSE9OTAkwMDAwMTAwCisjZGVmaW5lIE5PRkxTSAkwMDAwMjAwCisjZGVmaW5lIFRPU1RPUAkwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwJMDAwMTAwMAorI2RlZmluZSBFQ0hPUFJUCTAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFCTAwMDQwMDAKKyNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKKyNkZWZpbmUgUEVORElOCTAwNDAwMDAKKyNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmIC8qIF9BU01fWDg2X1RFUk1CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzI5NTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGVybWlvcy5oCkBAIC0wLDAgKzEsMTEzIEBACisjaWZuZGVmIF9BU01fWDg2X1RFUk1JT1NfSAorI2RlZmluZSBfQVNNX1g4Nl9URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworc3RydWN0IHdpbnNpemUgeworCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKKwl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CisJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOworCXVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKK307CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8geworCXVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBjX2xpbmU7CQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoJaW50cj1eQwkJcXVpdD1eXAkJZXJhc2U9ZGVsCWtpbGw9XlUKKwllb2Y9XkQJCXZ0aW1lPVwwCXZtaW49XDEJCXN4dGM9XDAKKwlzdGFydD1eUQlzdG9wPV5TCQlzdXNwPV5aCQllb2w9XDAKKwlyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCisJZW9sMj1cMAorKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwXDFcMFwwMjFcMDIzXDAzMlwwXDAyMlwwMTdcMDI3XDAyNlwwIgorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KKyAqLworI2RlZmluZSBTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIHgpIHsgXAorCXVuc2lnbmVkIHNob3J0IF9fdG1wOyBcCisJZ2V0X3VzZXIoX190bXAsJih0ZXJtaW8pLT54KTsgXAorCSoodW5zaWduZWQgc2hvcnQgKikgJih0ZXJtaW9zKS0+eCA9IF9fdG1wOyBcCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCQkJCXN0cnVjdCB0ZXJtaW8gX191c2VyICp0ZXJtaW8pCit7CisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2lmbGFnKTsKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfb2ZsYWcpOworCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7CisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2xmbGFnKTsKKwlyZXR1cm4gY29weV9mcm9tX3VzZXIodGVybWlvcy0+Y19jYywgdGVybWlvLT5jX2NjLCBOQ0MpOworfQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworc3RhdGljIGlubGluZSBpbnQga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8oc3RydWN0IHRlcm1pbyBfX3VzZXIgKnRlcm1pbywKKwkJCQkJICAgIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcykKK3sKKwlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7CisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOworCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7CisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7CisJcmV0dXJuIGNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3Moc3RydWN0IGt0ZXJtaW9zICprLAorCQkJCQkJIHN0cnVjdCB0ZXJtaW9zMiBfX3VzZXIgKnUpCit7CisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvczIpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHN0cnVjdCB0ZXJtaW9zMiBfX3VzZXIgKnUsCisJCQkJCQkgc3RydWN0IGt0ZXJtaW9zICprKQoreworCXJldHVybiBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpOworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3NfMShzdHJ1Y3Qga3Rlcm1pb3MgKmssCisJCQkJCQkgICBzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKnUpCit7CisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOworfQorCitzdGF0aWMgaW5saW5lIGludCBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3NfMShzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKnUsCisJCQkJCQkgICBzdHJ1Y3Qga3Rlcm1pb3MgKmspCit7CisJcmV0dXJuIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKTsKK30KKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1RFUk1JT1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhlcm1fdGhyb3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RoZXJtX3Rocm90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyMzQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RoZXJtX3Rocm90LmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9BU01fWDg2X1RIRVJNX1RIUk9UX0gKKyNkZWZpbmUgX0FTTV9YODZfVEhFUk1fVEhST1RfSAorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitleHRlcm4gYXRvbWljX3QgdGhlcm1fdGhyb3RfZW47CitpbnQgdGhlcm1fdGhyb3RfcHJvY2VzcyhpbnQgY3Vycik7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9USEVSTV9USFJPVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRkMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDI2NCBAQAorLyogdGhyZWFkX2luZm8uaDogbG93LWxldmVsIHRocmVhZCBpbmZvcm1hdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gSW5jb3Jwb3JhdGluZyBzdWdnZXN0aW9ucyBtYWRlIGJ5IExpbnVzIFRvcnZhbGRzIGFuZCBEYXZlIE1pbGxlcgorICovCisKKyNpZm5kZWYgX0FTTV9YODZfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1g4Nl9USFJFQURfSU5GT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qCisgKiBsb3cgbGV2ZWwgdGFzayBkYXRhIHRoYXQgZW50cnkuUyBuZWVkcyBpbW1lZGlhdGUgYWNjZXNzIHRvCisgKiAtIHRoaXMgc3RydWN0IHNob3VsZCBmaXQgZW50aXJlbHkgaW5zaWRlIG9mIG9uZSBjYWNoZSBsaW5lCisgKiAtIHRoaXMgc3RydWN0IHNoYXJlcyB0aGUgc3VwZXJ2aXNvciBzdGFjayBwYWdlcworICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IHRhc2tfc3RydWN0Oworc3RydWN0IGV4ZWNfZG9tYWluOworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RydWN0IHRocmVhZF9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCisJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCisJX191MzIJCQlzdGF0dXM7CQkvKiB0aHJlYWQgc3luY2hyb25vdXMgZmxhZ3MgKi8KKwlfX3UzMgkJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCisJaW50CQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwKKwkJCQkJCSAgIDwwID0+IEJVRyAqLworCW1tX3NlZ21lbnRfdAkJYWRkcl9saW1pdDsKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworCXZvaWQgX191c2VyCQkqc3lzZW50ZXJfcmV0dXJuOworI2lmZGVmIENPTkZJR19YODZfMzIKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBwcmV2aW91c19lc3A7ICAgLyogRVNQIG9mIHRoZSBwcmV2aW91cyBzdGFjayBpbgorCQkJCQkJICAgY2FzZSBvZiBuZXN0ZWQgKElSUSkgc3RhY2tzCisJCQkJCQkqLworCV9fdTgJCQlzdXBlcnZpc29yX3N0YWNrWzBdOworI2VuZGlmCit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKK3sJCQkJCQlcCisJLnRhc2sJCT0gJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluCT0gJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuZmxhZ3MJCT0gMCwJCQlcCisJLmNwdQkJPSAwLAkJCVwKKwkucHJlZW1wdF9jb3VudAk9IDEsCQkJXAorCS5hZGRyX2xpbWl0CT0gS0VSTkVMX0RTLAkJXAorCS5yZXN0YXJ0X2Jsb2NrID0gewkJCVwKKwkJLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCisKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworI2VuZGlmCisKKy8qCisgKiB0aHJlYWQgaW5mb3JtYXRpb24gZmxhZ3MKKyAqIC0gdGhlc2UgYXJlIHByb2Nlc3Mgc3RhdGUgZmxhZ3MgdGhhdCB2YXJpb3VzIGFzc2VtYmx5IGZpbGVzCisgKiAgIG1heSBuZWVkIHRvIGFjY2VzcworICogLSBwZW5kaW5nIHdvcmstdG8tYmUtZG9uZSBmbGFncyBhcmUgaW4gTFNXCisgKiAtIG90aGVyIGZsYWdzIGluIE1TVworICogV2FybmluZzogbGF5b3V0IG9mIExTVyBpcyBoYXJkY29kZWQgaW4gZW50cnkuUworICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTAJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJMQkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KKyNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTIJLyogc2lnbmFsIHBlbmRpbmcgKi8KKyNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkzCS8qIHJlc2NoZWR1bGluZyBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgVElGX1NJTkdMRVNURVAJCTQJLyogcmVlbmFibGUgc2luZ2xlc3RlcCBvbiB1c2VyIHJldHVybiovCisjZGVmaW5lIFRJRl9JUkVUCQk1CS8qIGZvcmNlIElSRVQgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfRU1VCQk2CS8qIHN5c2NhbGwgZW11bGF0aW9uIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk3CS8qIHN5c2NhbGwgYXVkaXRpbmcgYWN0aXZlICovCisjZGVmaW5lIFRJRl9TRUNDT01QCQk4CS8qIHNlY3VyZSBjb21wdXRpbmcgKi8KKyNkZWZpbmUgVElGX01DRV9OT1RJRlkJCTEwCS8qIG5vdGlmeSB1c2Vyc3BhY2Ugb2YgYW4gTUNFICovCisjZGVmaW5lIFRJRl9OT1RTQwkJMTYJLyogVFNDIGlzIG5vdCBhY2Nlc3NpYmxlIGluIHVzZXJsYW5kICovCisjZGVmaW5lIFRJRl9JQTMyCQkxNwkvKiAzMmJpdCBwcm9jZXNzICovCisjZGVmaW5lIFRJRl9GT1JLCQkxOAkvKiByZXRfZnJvbV9mb3JrICovCisjZGVmaW5lIFRJRl9BQklfUEVORElORwkJMTkKKyNkZWZpbmUgVElGX01FTURJRQkJMjAKKyNkZWZpbmUgVElGX0RFQlVHCQkyMQkvKiB1c2VzIGRlYnVnIHJlZ2lzdGVycyAqLworI2RlZmluZSBUSUZfSU9fQklUTUFQCQkyMgkvKiB1c2VzIEkvTyBiaXRtYXAgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMjMJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KKyNkZWZpbmUgVElGX0ZPUkNFRF9URgkJMjQJLyogdHJ1ZSBpZiBURiBpbiBlZmxhZ3MgYXJ0aWZpY2lhbGx5ICovCisjZGVmaW5lIFRJRl9ERUJVR0NUTE1TUgkJMjUJLyogdXNlcyB0aHJlYWRfc3RydWN0LmRlYnVnY3RsbXNyICovCisjZGVmaW5lIFRJRl9EU19BUkVBX01TUgkJMjYgICAgICAvKiB1c2VzIHRocmVhZF9zdHJ1Y3QuZHNfYXJlYV9tc3IgKi8KKyNkZWZpbmUgVElGX0JUU19UUkFDRV9UUwkyNyAgICAgIC8qIHJlY29yZCBzY2hlZHVsaW5nIGV2ZW50IHRpbWVzdGFtcHMgKi8KKworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKKyNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMSA8PCBUSUZfU0lOR0xFU1RFUCkKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDEgPDwgVElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9JUkVUCQkoMSA8PCBUSUZfSVJFVCkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0VNVQkoMSA8PCBUSUZfU1lTQ0FMTF9FTVUpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMSA8PCBUSUZfU0VDQ09NUCkKKyNkZWZpbmUgX1RJRl9NQ0VfTk9USUZZCQkoMSA8PCBUSUZfTUNFX05PVElGWSkKKyNkZWZpbmUgX1RJRl9OT1RTQwkJKDEgPDwgVElGX05PVFNDKQorI2RlZmluZSBfVElGX0lBMzIJCSgxIDw8IFRJRl9JQTMyKQorI2RlZmluZSBfVElGX0ZPUksJCSgxIDw8IFRJRl9GT1JLKQorI2RlZmluZSBfVElGX0FCSV9QRU5ESU5HCSgxIDw8IFRJRl9BQklfUEVORElORykKKyNkZWZpbmUgX1RJRl9ERUJVRwkJKDEgPDwgVElGX0RFQlVHKQorI2RlZmluZSBfVElGX0lPX0JJVE1BUAkJKDEgPDwgVElGX0lPX0JJVE1BUCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCisjZGVmaW5lIF9USUZfRk9SQ0VEX1RGCQkoMSA8PCBUSUZfRk9SQ0VEX1RGKQorI2RlZmluZSBfVElGX0RFQlVHQ1RMTVNSCSgxIDw8IFRJRl9ERUJVR0NUTE1TUikKKyNkZWZpbmUgX1RJRl9EU19BUkVBX01TUgkoMSA8PCBUSUZfRFNfQVJFQV9NU1IpCisjZGVmaW5lIF9USUZfQlRTX1RSQUNFX1RTCSgxIDw8IFRJRl9CVFNfVFJBQ0VfVFMpCisKKy8qIHdvcmsgdG8gZG8gaW4gc3lzY2FsbF90cmFjZV9lbnRlcigpICovCisjZGVmaW5lIF9USUZfV09SS19TWVNDQUxMX0VOVFJZCVwKKwkoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0VNVSB8IFwKKwkgX1RJRl9TWVNDQUxMX0FVRElUIHwgX1RJRl9TRUNDT01QIHwgX1RJRl9TSU5HTEVTVEVQKQorCisvKiB3b3JrIHRvIGRvIGluIHN5c2NhbGxfdHJhY2VfbGVhdmUoKSAqLworI2RlZmluZSBfVElGX1dPUktfU1lTQ0FMTF9FWElUCVwKKwkoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUIHwgX1RJRl9TSU5HTEVTVEVQKQorCisvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkJCQkJCVwKKwkoMHgwMDAwRkZGRiAmCQkJCQkJCVwKKwkgfihfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfAkJCVwKKwkgICBfVElGX1NJTkdMRVNURVB8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9FTVUpKQorCisvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdXNlciBzcGFjZSAqLworI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSyAoMHgwMDAwRkZGRiAmIH5fVElGX1NFQ0NPTVApCisKKy8qIE9ubHkgdXNlZCBmb3IgNjQgYml0ICovCisjZGVmaW5lIF9USUZfRE9fTk9USUZZX01BU0sJCQkJCQlcCisJKF9USUZfU0lHUEVORElOR3xfVElGX01DRV9OT1RJRll8X1RJRl9OT1RJRllfUkVTVU1FKQorCisvKiBmbGFncyB0byBjaGVjayBpbiBfX3N3aXRjaF90bygpICovCisjZGVmaW5lIF9USUZfV09SS19DVFhTVwkJCQkJCQlcCisJKF9USUZfSU9fQklUTUFQfF9USUZfREVCVUdDVExNU1J8X1RJRl9EU19BUkVBX01TUnxfVElGX0JUU19UUkFDRV9UU3wgXAorCQkJCQkJCQlfVElGX05PVFNDKQorCisjZGVmaW5lIF9USUZfV09SS19DVFhTV19QUkVWIF9USUZfV09SS19DVFhTVworI2RlZmluZSBfVElGX1dPUktfQ1RYU1dfTkVYVCAoX1RJRl9XT1JLX0NUWFNXfF9USUZfREVCVUcpCisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4MTAwMDAwMDAKKworLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKyNkZWZpbmUgVEhSRUFEX0ZMQUdTIChHRlBfS0VSTkVMIHwgX19HRlBfWkVSTykKKyNlbHNlCisjZGVmaW5lIFRIUkVBRF9GTEFHUyBHRlBfS0VSTkVMCisjZW5kaWYKKworI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKKworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCQkJCQkJXAorCSgoc3RydWN0IHRocmVhZF9pbmZvICopX19nZXRfZnJlZV9wYWdlcyhUSFJFQURfRkxBR1MsIFRIUkVBRF9PUkRFUikpCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisKKyNkZWZpbmUgU1RBQ0tfV0FSTgkoVEhSRUFEX1NJWkUvOCkKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworCisvKiBob3cgdG8gZ2V0IHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIgZnJvbSBDICovCityZWdpc3RlciB1bnNpZ25lZCBsb25nIGN1cnJlbnRfc3RhY2tfcG9pbnRlciBhc20oImVzcCIpIF9fdXNlZDsKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCit7CisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKKwkJKGN1cnJlbnRfc3RhY2tfcG9pbnRlciAmIH4oVEhSRUFEX1NJWkUgLSAxKSk7Cit9CisKKyNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEFTTSAqLworI2RlZmluZSBHRVRfVEhSRUFEX0lORk8ocmVnKQkgXAorCW1vdmwgJC1USFJFQURfU0laRSwgcmVnOyBcCisJYW5kbCAlZXNwLCByZWcKKworLyogdXNlIHRoaXMgb25lIGlmIHJlZyBhbHJlYWR5IGNvbnRhaW5zICVlc3AgKi8KKyNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPX1dJVEhfRVNQKHJlZykgXAorCWFuZGwgJC1USFJFQURfU0laRSwgcmVnCisKKyNlbmRpZgorCisjZWxzZSAvKiBYODZfMzIgKi8KKworI2luY2x1ZGUgPGFzbS9wZGEuaD4KKworLyoKKyAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCisgKiBwcmVlbXB0X2NvdW50IG5lZWRzIHRvIGJlIDEgaW5pdGlhbGx5LCB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIGZ1bmN0aW9uYWwuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJdGkgPSAodm9pZCAqKShyZWFkX3BkYShrZXJuZWxzdGFjaykgKyBQREFfU1RBQ0tPRkZTRVQgLSBUSFJFQURfU0laRSk7CisJcmV0dXJuIHRpOworfQorCisvKiBkbyBub3QgdXNlIGluIGludGVycnVwdCBjb250ZXh0ICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqc3RhY2tfdGhyZWFkX2luZm8odm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCWFzbSgiYW5kcSAlJXJzcCwlMDsgIiA6ICI9ciIgKHRpKSA6ICIwIiAofihUSFJFQURfU0laRSAtIDEpKSk7CisJcmV0dXJuIHRpOworfQorCisjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KKyNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykgXAorCW1vdnEgJWdzOnBkYV9rZXJuZWxzdGFjayxyZWcgOyBcCisJc3VicSAkKFRIUkVBRF9TSVpFLVBEQV9TVEFDS09GRlNFVCkscmVnCisKKyNlbmRpZgorCisjZW5kaWYgLyogIVg4Nl8zMiAqLworCisvKgorICogVGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cy4KKyAqCisgKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmbGFncyBpbiB0aGF0IG5vYm9keSBlbHNlCisgKiBldmVyIHRvdWNoZXMgb3VyIHRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMsIHNvIHdlIGRvbid0CisgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IGF0b21pYyBhY2Nlc3Nlcy4KKyAqLworI2RlZmluZSBUU19VU0VERlBVCQkweDAwMDEJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzaworCQkJCQkgICB0aGlzIHF1YW50dW0gKFNNUCkgKi8KKyNkZWZpbmUgVFNfQ09NUEFUCQkweDAwMDIJLyogMzJiaXQgc3lzY2FsbCBhY3RpdmUgKDY0QklUKSovCisjZGVmaW5lIFRTX1BPTExJTkcJCTB4MDAwNAkvKiB0cnVlIGlmIGluIGlkbGUgbG9vcAorCQkJCQkgICBhbmQgbm90IHNsZWVwaW5nICovCisjZGVmaW5lIFRTX1JFU1RPUkVfU0lHTUFTSwkweDAwMDgJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLworI2RlZmluZSBUU19YU0FWRQkJMHgwMDEwCS8qIFVzZSB4c2F2ZS94cnN0b3IgKi8KKworI2RlZmluZSB0c2tfaXNfcG9sbGluZyh0KSAodGFza190aHJlYWRfaW5mbyh0KS0+c3RhdHVzICYgVFNfUE9MTElORykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSEFWRV9TRVRfUkVTVE9SRV9TSUdNQVNLCTEKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcmVzdG9yZV9zaWdtYXNrKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwl0aS0+c3RhdHVzIHw9IFRTX1JFU1RPUkVfU0lHTUFTSzsKKwlzZXRfYml0KFRJRl9TSUdQRU5ESU5HLCAodW5zaWduZWQgbG9uZyAqKSZ0aS0+ZmxhZ3MpOworfQorI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGFyY2hfdGFza19jYWNoZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKTsKK2V4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTsKKyNkZWZpbmUgYXJjaF90YXNrX2NhY2hlX2luaXQgYXJjaF90YXNrX2NhY2hlX2luaXQKKyNlbmRpZgorI2VuZGlmIC8qIF9BU01fWDg2X1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGM3MzNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZS5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgX0FTTV9YODZfVElNRV9ICisjZGVmaW5lIF9BU01fWDg2X1RJTUVfSAorCitleHRlcm4gdm9pZCBocGV0X3RpbWVfaW5pdCh2b2lkKTsKKworI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgorI2lmZGVmIENPTkZJR19YODZfMzIKKyNpbmNsdWRlIDxsaW51eC9lZmkuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9nZXRfd2FsbGNsb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisKKwlpZiAoZWZpX2VuYWJsZWQpCisJCXJldHZhbCA9IGVmaV9nZXRfdGltZSgpOworCWVsc2UKKwkJcmV0dmFsID0gbWFjaF9nZXRfY21vc190aW1lKCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBuYXRpdmVfc2V0X3dhbGxjbG9jayh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJaW50IHJldHZhbDsKKworCWlmIChlZmlfZW5hYmxlZCkKKwkJcmV0dmFsID0gZWZpX3NldF9ydGNfbW1zcyhub3d0aW1lKTsKKwllbHNlCisJCXJldHZhbCA9IG1hY2hfc2V0X3J0Y19tbXNzKG5vd3RpbWUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2Vsc2UKK2V4dGVybiB2b2lkIG5hdGl2ZV90aW1lX2luaXRfaG9vayh2b2lkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9nZXRfd2FsbGNsb2NrKHZvaWQpCit7CisJcmV0dXJuIG1hY2hfZ2V0X2Ntb3NfdGltZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBuYXRpdmVfc2V0X3dhbGxjbG9jayh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJcmV0dXJuIG1hY2hfc2V0X3J0Y19tbXNzKG5vd3RpbWUpOworfQorCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgdGltZV9pbml0KHZvaWQpOworCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZSAvKiAhQ09ORklHX1BBUkFWSVJUICovCisKKyNkZWZpbmUgZ2V0X3dhbGxjbG9jaygpIG5hdGl2ZV9nZXRfd2FsbGNsb2NrKCkKKyNkZWZpbmUgc2V0X3dhbGxjbG9jayh4KSBuYXRpdmVfc2V0X3dhbGxjbG9jayh4KQorI2RlZmluZSBjaG9vc2VfdGltZV9pbml0KCkgaHBldF90aW1lX2luaXQKKworI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVCAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgY2FsaWJyYXRlX2NwdSh2b2lkKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1RJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiNmE4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTAsMCArMSw2NiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9USU1FUl9ICisjZGVmaW5lIF9BU01fWDg2X1RJTUVSX0gKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworI2RlZmluZSBUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfc2NoZWRfY2xvY2sodm9pZCk7Cit1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIGludCB0aW1lcl9hY2s7CitleHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCitleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOworCisjaWZuZGVmIENPTkZJR19QQVJBVklSVAorI2RlZmluZSBjYWxpYnJhdGVfdHNjKCkgbmF0aXZlX2NhbGlicmF0ZV90c2MoKQorI2VuZGlmCisKKy8qIEFjY2VsZXJhdG9ycyBmb3Igc2NoZWRfY2xvY2soKQorICogY29udmVydCBmcm9tIGN5Y2xlcyg2NGJpdHMpID0+IG5hbm9zZWNvbmRzICg2NGJpdHMpCisgKiAgYmFzaWMgZXF1YXRpb246CisgKgkJbnMgPSBjeWNsZXMgLyAoZnJlcSAvIG5zX3Blcl9zZWMpCisgKgkJbnMgPSBjeWNsZXMgKiAobnNfcGVyX3NlYyAvIGZyZXEpCisgKgkJbnMgPSBjeWNsZXMgKiAoMTBeOSAvIChjcHVfa2h6ICogMTBeMykpCisgKgkJbnMgPSBjeWNsZXMgKiAoMTBeNiAvIGNwdV9raHopCisgKgorICoJVGhlbiB3ZSB1c2Ugc2NhbGluZyBtYXRoIChzdWdnZXN0ZWQgYnkgZ2VvcmdlQG12aXN0YS5jb20pIHRvIGdldDoKKyAqCQlucyA9IGN5Y2xlcyAqICgxMF42ICogU0MgLyBjcHVfa2h6KSAvIFNDCisgKgkJbnMgPSBjeWNsZXMgKiBjeWMybnNfc2NhbGUgLyBTQworICoKKyAqCUFuZCBzaW5jZSBTQyBpcyBhIGNvbnN0YW50IHBvd2VyIG9mIHR3bywgd2UgY2FuIGNvbnZlcnQgdGhlIGRpdgorICogIGludG8gYSBzaGlmdC4KKyAqCisgKiAgV2UgY2FuIHVzZSBraHogZGl2aXNvciBpbnN0ZWFkIG9mIG1oeiB0byBrZWVwIGEgYmV0dGVyIHByZWNpc2lvbiwgc2luY2UKKyAqICBjeWMybnNfc2NhbGUgaXMgbGltaXRlZCB0byAxMF42ICogMl4xMCwgd2hpY2ggZml0cyBpbiAzMiBiaXRzLgorICogIChtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhKQorICoKKyAqCQkJLWpvaG5zdHVsQHVzLmlibS5jb20gIm1hdGggaXMgaGFyZCwgbGV0cyBnbyBzaG9wcGluZyEiCisgKi8KKworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGN5YzJucyk7CisKKyNkZWZpbmUgQ1lDMk5TX1NDQUxFX0ZBQ1RPUiAxMCAvKiAyXjEwLCBjYXJlZnVsbHkgY2hvc2VuICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fY3ljbGVzXzJfbnModW5zaWduZWQgbG9uZyBsb25nIGN5YykKK3sKKwlyZXR1cm4gY3ljICogcGVyX2NwdShjeWMybnMsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPj4gQ1lDMk5TX1NDQUxFX0ZBQ1RPUjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzXzJfbnModW5zaWduZWQgbG9uZyBsb25nIGN5YykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlucyA9IF9fY3ljbGVzXzJfbnMoY3ljKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gbnM7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1leC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjg3ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXguaApAQCAtMCwwICsxLDE5IEBACisvKiB4ODYgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zICovCisjaWZuZGVmIF9BU01fWDg2X1RJTUVYX0gKKyNkZWZpbmUgX0FTTV9YODZfVElNRVhfSAorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS90c2MuaD4KKworI2lmZGVmIENPTkZJR19YODZfRUxBTgorIyAgZGVmaW5lIFBJVF9USUNLX1JBVEUgMTE4OTIwMCAvKiBBTUQgRWxhbiBoYXMgZGlmZmVyZW50IGZyZXF1ZW5jeSEgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl9SREMzMjFYKQorIyAgZGVmaW5lIFBJVF9USUNLX1JBVEUgMTA0MTY2NyAvKiBVbmRlcmx5aW5nIEhaIGZvciBSODYxMCAqLworI2Vsc2UKKyMgIGRlZmluZSBQSVRfVElDS19SQVRFIDExOTMxODIgLyogVW5kZXJseWluZyBIWiAqLworI2VuZGlmCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQlQSVRfVElDS19SQVRFCisKKyNkZWZpbmUgQVJDSF9IQVNfUkVBRF9DVVJSRU5UX1RJTUVSCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTIxNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGIuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9BU01fWDg2X1RMQl9ICisjZGVmaW5lIF9BU01fWDg2X1RMQl9ICisKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZmx1c2godGxiKSBmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3YmJiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTAsMCArMSwxNzggQEAKKyNpZm5kZWYgX0FTTV9YODZfVExCRkxVU0hfSAorI2RlZmluZSBfQVNNX1g4Nl9UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZQorI2RlZmluZSBfX2ZsdXNoX3RsYigpIF9fbmF0aXZlX2ZsdXNoX3RsYigpCisjZGVmaW5lIF9fZmx1c2hfdGxiX2dsb2JhbCgpIF9fbmF0aXZlX2ZsdXNoX3RsYl9nbG9iYWwoKQorI2RlZmluZSBfX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikgX19uYXRpdmVfZmx1c2hfdGxiX3NpbmdsZShhZGRyKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX25hdGl2ZV9mbHVzaF90bGIodm9pZCkKK3sKKwl3cml0ZV9jcjMocmVhZF9jcjMoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX25hdGl2ZV9mbHVzaF90bGJfZ2xvYmFsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGNyNDsKKworCS8qCisJICogUmVhZC1tb2RpZnktd3JpdGUgdG8gQ1I0IC0gcHJvdGVjdCBpdCBmcm9tIHByZWVtcHRpb24gYW5kCisJICogZnJvbSBpbnRlcnJ1cHRzLiAoVXNlIHRoZSByYXcgdmFyaWFudCBiZWNhdXNlIHRoaXMgY29kZSBjYW4KKwkgKiBiZSBjYWxsZWQgZnJvbSBkZWVwIGluc2lkZSBkZWJ1Z2dpbmcgY29kZS4pCisJICovCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNyNCA9IHJlYWRfY3I0KCk7CisJLyogY2xlYXIgUEdFICovCisJd3JpdGVfY3I0KGNyNCAmIH5YODZfQ1I0X1BHRSk7CisJLyogd3JpdGUgb2xkIFBHRSBhZ2FpbiBhbmQgZmx1c2ggVExCcyAqLworCXdyaXRlX2NyNChjcjQpOworCisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbmF0aXZlX2ZsdXNoX3RsYl9zaW5nbGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWFzbSB2b2xhdGlsZSgiaW52bHBnICglMCkiIDo6InIiIChhZGRyKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCWlmIChjcHVfaGFzX3BnZSkKKwkJX19mbHVzaF90bGJfZ2xvYmFsKCk7CisJZWxzZQorCQlfX2ZsdXNoX3RsYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoY3B1X2hhc19pbnZscGcpCisJCV9fZmx1c2hfdGxiX3NpbmdsZShhZGRyKTsKKwllbHNlCisJCV9fZmx1c2hfdGxiKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBUTEJfRkxVU0hfQUxMCTB4ZmZmZmZmZmYKKyNlbHNlCisjIGRlZmluZSBUTEJfRkxVU0hfQUxMCS0xVUxMCisjZW5kaWYKKworLyoKKyAqIFRMQiBmbHVzaGluZzoKKyAqCisgKiAgLSBmbHVzaF90bGIoKSBmbHVzaGVzIHRoZSBjdXJyZW50IG1tIHN0cnVjdCBUTEJzCisgKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQnMKKyAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MKKyAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCisgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKKyAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcworICogIC0gZmx1c2hfdGxiX290aGVycyhjcHVtYXNrLCBtbSwgdmEpIGZsdXNoZXMgVExCcyBvbiBvdGhlciBjcHVzCisgKgorICogLi5idXQgdGhlIGkzODYgaGFzIHNvbWV3aGF0IGxpbWl0ZWQgdGxiIGZsdXNoaW5nIGNhcGFiaWxpdGllcywKKyAqIGFuZCBwYWdlLWdyYW51bGFyIGZsdXNoZXMgYXJlIGF2YWlsYWJsZSBvbmx5IG9uIGk0ODYgYW5kIHVwLgorICoKKyAqIHg4Ni02NCBjYW4gb25seSBmbHVzaCBpbmRpdmlkdWFsIHBhZ2VzIG9yIGZ1bGwgVk1zLiBGb3IgYSByYW5nZSBmbHVzaAorICogd2UgYWx3YXlzIGRvIHRoZSBmdWxsIFZNLiBNaWdodCBiZSB3b3J0aCB0cnlpbmcgaWYgZm9yIGEgc21hbGwKKyAqIHJhbmdlIGEgZmV3IElOVkxQR3MgaW4gYSByb3cgYXJlIGEgd2luLgorICovCisKKyNpZm5kZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpIF9fZmx1c2hfdGxiX2FsbCgpCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX2ZsdXNoX3RsYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX2ZsdXNoX3RsYl9vbmUoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX2ZsdXNoX3RsYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrLAorCQkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyB2YSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCkKK3sKK30KKworI2Vsc2UgIC8qIFNNUCAqLworCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9jdXJyZW50X3Rhc2sodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKKworI2RlZmluZSBmbHVzaF90bGIoKQlmbHVzaF90bGJfY3VycmVudF90YXNrKCkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfbW0odm1hLT52bV9tbSk7Cit9CisKK3ZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSk7CisKKyNkZWZpbmUgVExCU1RBVEVfT0sJMQorI2RlZmluZSBUTEJTVEFURV9MQVpZCTIKKworI2lmZGVmIENPTkZJR19YODZfMzIKK3N0cnVjdCB0bGJfc3RhdGUgeworCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbTsKKwlpbnQgc3RhdGU7CisJY2hhciBfX2NhY2hlbGluZV9wYWRkaW5nW0wxX0NBQ0hFX0JZVEVTLThdOworfTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpOworCit2b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYJLyogU01QICovCisKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCisjZGVmaW5lIGZsdXNoX3RsYl9vdGhlcnMobWFzaywgbW0sIHZhKQluYXRpdmVfZmx1c2hfdGxiX290aGVycygmbWFzaywgbW0sIHZhKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZmx1c2hfdGxiX2FsbCgpOworfQorCisjZW5kaWYgLyogX0FTTV9YODZfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBhYzc3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBXcml0dGVuIGJ5OiBNYXR0aGV3IERvYnNvbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJQk0gQ29ycC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG8gPGNvbHBhdGNoQHVzLmlibS5jb20+CisgKi8KKyNpZm5kZWYgX0FTTV9YODZfVE9QT0xPR1lfSAorI2RlZmluZSBfQVNNX1g4Nl9UT1BPTE9HWV9ICisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGlmZGVmIENPTkZJR19YODZfSFQKKyMgIGRlZmluZSBFTkFCTEVfVE9QT19ERUZJTkVTCisjIGVuZGlmCisjZWxzZQorIyBpZmRlZiBDT05GSUdfU01QCisjICBkZWZpbmUgRU5BQkxFX1RPUE9fREVGSU5FUworIyBlbmRpZgorI2VuZGlmCisKKy8qIE5vZGUgbm90IHByZXNlbnQgKi8KKyNkZWZpbmUgTlVNQV9OT19OT0RFCSgtMSkKKworI2lmZGVmIENPTkZJR19OVU1BCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKworI2lmZGVmIENPTkZJR19YODZfMzIKKworLyogTWFwcGluZ3MgYmV0d2VlbiBub2RlIG51bWJlciBhbmQgY3B1cyBvbiB0aGF0IG5vZGUuICovCitleHRlcm4gY3B1bWFza190IG5vZGVfdG9fY3B1bWFza19tYXBbXTsKKworLyogTWFwcGluZ3MgYmV0d2VlbiBsb2dpY2FsIGNwdSBudW1iZXIgYW5kIG5vZGUgbnVtYmVyICovCitleHRlcm4gaW50IGNwdV90b19ub2RlX21hcFtdOworCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBDUFUgJ2NwdScgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV90b19ub2RlKGludCBjcHUpCit7CisJcmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdOworfQorI2RlZmluZSBlYXJseV9jcHVfdG9fbm9kZShjcHUpCWNwdV90b19ub2RlKGNwdSkKKworLyogUmV0dXJucyBhIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4KKyAqCisgKiBTaWRlIG5vdGU6IHRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgcmV0dXJuZWQgY3B1bWFzayBvbiB0aGUgc3RhY2sKKyAqIHNvIHdpdGggYSBoaWdoIE5SX0NQVVMgY291bnQsIGV4Y2Vzc2l2ZSBzdGFjayBzcGFjZSBpcyB1c2VkLiAgVGhlCisgKiBub2RlX3RvX2NwdW1hc2tfcHRyIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLgorICovCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCit7CisJcmV0dXJuIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Cit9CisKKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KKworLyogTWFwcGluZ3MgYmV0d2VlbiBub2RlIG51bWJlciBhbmQgY3B1cyBvbiB0aGF0IG5vZGUuICovCitleHRlcm4gY3B1bWFza190ICpub2RlX3RvX2NwdW1hc2tfbWFwOworCisvKiBNYXBwaW5ncyBiZXR3ZWVuIGxvZ2ljYWwgY3B1IG51bWJlciBhbmQgbm9kZSBudW1iZXIgKi8KK0RFQ0xBUkVfRUFSTFlfUEVSX0NQVShpbnQsIHg4Nl9jcHVfdG9fbm9kZV9tYXApOworCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgTm9kZS4gKi8KKyNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCXJlYWRfcGRhKG5vZGVudW1iZXIpCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCitleHRlcm4gaW50IGNwdV90b19ub2RlKGludCBjcHUpOworZXh0ZXJuIGludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KTsKK2V4dGVybiBjb25zdCBjcHVtYXNrX3QgKl9ub2RlX3RvX2NwdW1hc2tfcHRyKGludCBub2RlKTsKK2V4dGVybiBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKTsKKworI2Vsc2UJLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KKworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgQ1BVICdjcHUnICovCitzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQoreworCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Cit9CisKKy8qIFNhbWUgZnVuY3Rpb24gYnV0IHVzZWQgaWYgY2FsbGVkIGJlZm9yZSBwZXJfY3B1IGFyZWFzIGFyZSBzZXR1cCAqLworc3RhdGljIGlubGluZSBpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSkKK3sKKwlpZiAoZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCkpCisJCXJldHVybiBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKVtjcHVdOworCisJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKK30KKworLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNwdW1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4gKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICpfbm9kZV90b19jcHVtYXNrX3B0cihpbnQgbm9kZSkKK3sKKwlyZXR1cm4gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Cit9CisKKy8qIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuICovCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCit7CisJcmV0dXJuIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Cit9CisKKyNlbmRpZiAvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLworCisvKiBSZXBsYWNlIGRlZmF1bHQgbm9kZV90b19jcHVtYXNrX3B0ciB3aXRoIG9wdGltaXplZCB2ZXJzaW9uICovCisjZGVmaW5lIG5vZGVfdG9fY3B1bWFza19wdHIodiwgbm9kZSkJCVwKKwkJY29uc3QgY3B1bWFza190ICp2ID0gX25vZGVfdG9fY3B1bWFza19wdHIobm9kZSkKKworI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJXAorCQkJICAgdiA9IF9ub2RlX3RvX2NwdW1hc2tfcHRyKG5vZGUpCisKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBOb2RlICdub2RlJy4gVGhpcworICogYXJjaGl0ZWN0dXJlIGlzIGZsYXQsIHNvIGl0IGlzIGEgcHJldHR5IHNpbXBsZSBmdW5jdGlvbiEKKyAqLworI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKSAobm9kZSkKKworI2RlZmluZSBwY2lidXNfdG9fbm9kZShidXMpIF9fcGNpYnVzX3RvX25vZGUoYnVzKQorI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpIF9fcGNpYnVzX3RvX2NwdW1hc2soYnVzKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm5bXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfZW5kX3BmbltdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZW1hcF9zaXplW107CisjZGVmaW5lIG5vZGVfaGFzX29ubGluZV9tZW0obmlkKSAobm9kZV9zdGFydF9wZm5bbmlkXSAhPSBub2RlX2VuZF9wZm5bbmlkXSkKKworIyBkZWZpbmUgU0RfQ0FDSEVfTklDRV9UUklFUwkxCisjIGRlZmluZSBTRF9JRExFX0lEWAkJMQorIyBkZWZpbmUgU0RfTkVXSURMRV9JRFgJCTIKKyMgZGVmaW5lIFNEX0ZPUktFWEVDX0lEWAkwCisKKyNlbHNlCisKKyMgZGVmaW5lIFNEX0NBQ0hFX05JQ0VfVFJJRVMJMgorIyBkZWZpbmUgU0RfSURMRV9JRFgJCTIKKyMgZGVmaW5lIFNEX05FV0lETEVfSURYCQkyCisjIGRlZmluZSBTRF9GT1JLRVhFQ19JRFgJMQorCisjZW5kaWYKKworLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIE5VTUFRIG1hY2hpbmVzICovCisjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAorCS5taW5faW50ZXJ2YWwJCT0gOCwJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAzMiwJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCVwKKwkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAorCS5jYWNoZV9uaWNlX3RyaWVzCT0gU0RfQ0FDSEVfTklDRV9UUklFUywJXAorCS5idXN5X2lkeAkJPSAzLAkJCVwKKwkuaWRsZV9pZHgJCT0gU0RfSURMRV9JRFgsCQlcCisJLm5ld2lkbGVfaWR4CQk9IFNEX05FV0lETEVfSURYLAlcCisJLndha2VfaWR4CQk9IDEsCQkJXAorCS5mb3JrZXhlY19pZHgJCT0gU0RfRk9SS0VYRUNfSURYLAlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAorCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKKwkJCQl8IFNEX0JBTEFOQ0VfRk9SSwlcCisJCQkJfCBTRF9TRVJJQUxJWkUJCVwKKwkJCQl8IFNEX1dBS0VfQkFMQU5DRSwJXAorCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKKwkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAorfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NF9BQ1BJX05VTUEKK2V4dGVybiBpbnQgX19ub2RlX2Rpc3RhbmNlKGludCwgaW50KTsKKyNkZWZpbmUgbm9kZV9kaXN0YW5jZShhLCBiKSBfX25vZGVfZGlzdGFuY2UoYSwgYikKKyNlbmRpZgorCisjZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KKworI2RlZmluZSBudW1hX25vZGVfaWQoKQkJMAorI2RlZmluZQljcHVfdG9fbm9kZShjcHUpCTAKKyNkZWZpbmUJZWFybHlfY3B1X3RvX25vZGUoY3B1KQkwCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICpfbm9kZV90b19jcHVtYXNrX3B0cihpbnQgbm9kZSkKK3sKKwlyZXR1cm4gJmNwdV9vbmxpbmVfbWFwOworfQorc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQoreworCXJldHVybiBjcHVfb25saW5lX21hcDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG5vZGVfdG9fZmlyc3RfY3B1KGludCBub2RlKQoreworCXJldHVybiBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworfQorCisvKiBSZXBsYWNlIGRlZmF1bHQgbm9kZV90b19jcHVtYXNrX3B0ciB3aXRoIG9wdGltaXplZCB2ZXJzaW9uICovCisjZGVmaW5lIG5vZGVfdG9fY3B1bWFza19wdHIodiwgbm9kZSkJCVwKKwkJY29uc3QgY3B1bWFza190ICp2ID0gX25vZGVfdG9fY3B1bWFza19wdHIobm9kZSkKKworI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJXAorCQkJICAgdiA9IF9ub2RlX3RvX2NwdW1hc2tfcHRyKG5vZGUpCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKKyNpZmRlZiBDT05GSUdfTlVNQQorLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBDUFUgb24gTm9kZSAnbm9kZScuICovCitzdGF0aWMgaW5saW5lIGludCBub2RlX3RvX2ZpcnN0X2NwdShpbnQgbm9kZSkKK3sKKwlub2RlX3RvX2NwdW1hc2tfcHRyKG1hc2ssIG5vZGUpOworCXJldHVybiBmaXJzdF9jcHUoKm1hc2spOworfQorI2VuZGlmCisKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAoaW50IGNwdSk7CisKKyNpZmRlZiBFTkFCTEVfVE9QT19ERUZJTkVTCisjZGVmaW5lIHRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KQkoY3B1X2RhdGEoY3B1KS5waHlzX3Byb2NfaWQpCisjZGVmaW5lIHRvcG9sb2d5X2NvcmVfaWQoY3B1KQkJCShjcHVfZGF0YShjcHUpLmNwdV9jb3JlX2lkKQorI2RlZmluZSB0b3BvbG9neV9jb3JlX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSkKKyNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKKworLyogaW5kaWNhdGVzIHRoYXQgcG9pbnRlcnMgdG8gdGhlIHRvcG9sb2d5IGNwdW1hc2tfdCBtYXBzIGFyZSB2YWxpZCAqLworI2RlZmluZSBhcmNoX3Byb3ZpZGVzX3RvcG9sb2d5X3BvaW50ZXJzCQl5ZXMKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9maXhfcGh5c19wYWNrYWdlX2lkKGludCBudW0sIHUzMiBzbG90KQoreworfQorCitzdHJ1Y3QgcGNpX2J1czsKK3ZvaWQgc2V0X3BjaV9idXNfcmVzb3VyY2VzX2FyY2hfZGVmYXVsdChzdHJ1Y3QgcGNpX2J1cyAqYik7CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIG1jX2NhcGFibGUoKQkJCShib290X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgPiAxKQorI2RlZmluZSBzbXRfY2FwYWJsZSgpCQkJKHNtcF9udW1fc2libGluZ3MgPiAxKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTlVNQQorZXh0ZXJuIGludCBnZXRfbXBfYnVzX3RvX25vZGUoaW50IGJ1c251bSk7CitleHRlcm4gdm9pZCBzZXRfbXBfYnVzX3RvX25vZGUoaW50IGJ1c251bSwgaW50IG5vZGUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9tcF9idXNfdG9fbm9kZShpbnQgYnVzbnVtKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHNldF9tcF9idXNfdG9fbm9kZShpbnQgYnVzbnVtLCBpbnQgbm9kZSkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhbXBvbGluZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhbXBvbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGQ3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFtcG9saW5lLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9UUkFNUE9MSU5FX0gKKyNkZWZpbmUgX0FTTV9YODZfVFJBTVBPTElORV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBUcmFtcG9saW5lIDgweDg2IHByb2dyYW0gYXMgYW4gYXJyYXkuCisgKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHRyYW1wb2xpbmVfZGF0YSBbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHRyYW1wb2xpbmVfZW5kICBbXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICp0cmFtcG9saW5lX2Jhc2U7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfcnNwOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdGlhbF9jb2RlOworCisjZGVmaW5lIFRSQU1QT0xJTkVfQkFTRSAweDYwMDAKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNldHVwX3RyYW1wb2xpbmUodm9pZCk7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1RSQU1QT0xJTkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkZWUyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9UUkFQU19ICisjZGVmaW5lIF9BU01fWDg2X1RSQVBTX0gKKworI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBkb3RyYXBsaW5rYWdlCisjZWxzZQorI2RlZmluZSBkb3RyYXBsaW5rYWdlIGFzbWxpbmthZ2UKKyNlbmRpZgorCithc21saW5rYWdlIHZvaWQgZGl2aWRlX2Vycm9yKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGRlYnVnKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIG5taSh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBpbnQzKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIG92ZXJmbG93KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGJvdW5kcyh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBpbnZhbGlkX29wKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGRldmljZV9ub3RfYXZhaWxhYmxlKHZvaWQpOworI2lmZGVmIENPTkZJR19YODZfNjQKK2FzbWxpbmthZ2Ugdm9pZCBkb3VibGVfZmF1bHQodm9pZCk7CisjZW5kaWYKK2FzbWxpbmthZ2Ugdm9pZCBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4odm9pZCk7Cithc21saW5rYWdlIHZvaWQgaW52YWxpZF9UU1Modm9pZCk7Cithc21saW5rYWdlIHZvaWQgc2VnbWVudF9ub3RfcHJlc2VudCh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBzdGFja19zZWdtZW50KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGdlbmVyYWxfcHJvdGVjdGlvbih2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBwYWdlX2ZhdWx0KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHNwdXJpb3VzX2ludGVycnVwdF9idWcodm9pZCk7Cithc21saW5rYWdlIHZvaWQgY29wcm9jZXNzb3JfZXJyb3Iodm9pZCk7Cithc21saW5rYWdlIHZvaWQgYWxpZ25tZW50X2NoZWNrKHZvaWQpOworI2lmZGVmIENPTkZJR19YODZfTUNFCithc21saW5rYWdlIHZvaWQgbWFjaGluZV9jaGVjayh2b2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2X01DRSAqLworYXNtbGlua2FnZSB2b2lkIHNpbWRfY29wcm9jZXNzb3JfZXJyb3Iodm9pZCk7CisKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGVidWcoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fbm1pKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludDMoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fYm91bmRzKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfb3Aoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfVFNTKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX3NlZ21lbnRfbm90X3ByZXNlbnQoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fc3RhY2tfc2VnbWVudChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19nZW5lcmFsX3Byb3RlY3Rpb24oc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nKTsKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19zcHVyaW91c19pbnRlcnJ1cHRfYnVnKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2FsaWdubWVudF9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKKyNpZmRlZiBDT05GSUdfWDg2X01DRQorZG90cmFwbGlua2FnZSB2b2lkIGRvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CisjZW5kaWYKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19zaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworI2lmZGVmIENPTkZJR19YODZfMzIKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19pcmV0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9zaV9jb2RlKHVuc2lnbmVkIGxvbmcgY29uZGl0aW9uKQoreworCWlmIChjb25kaXRpb24gJiBEUl9TVEVQKQorCQlyZXR1cm4gVFJBUF9UUkFDRTsKKwllbHNlIGlmIChjb25kaXRpb24gJiAoRFJfVFJBUDB8RFJfVFJBUDF8RFJfVFJBUDJ8RFJfVFJBUDMpKQorCQlyZXR1cm4gVFJBUF9IV0JLUFQ7CisJZWxzZQorCQlyZXR1cm4gVFJBUF9CUktQVDsKK30KKworZXh0ZXJuIGludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7CitleHRlcm4gaW50IGtzdGFja19kZXB0aF90b19wcmludDsKKworI2lmZGVmIENPTkZJR19YODZfMzIKK3ZvaWQgbWF0aF9lcnJvcih2b2lkIF9fdXNlciAqKTsKK3Vuc2lnbmVkIGxvbmcgcGF0Y2hfZXNwZml4X2Rlc2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cithc21saW5rYWdlIHZvaWQgbWF0aF9lbXVsYXRlKGxvbmcpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9UUkFQU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWUxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogeDg2IFRTQyByZWxhdGVkIGZ1bmN0aW9ucworICovCisjaWZuZGVmIF9BU01fWDg2X1RTQ19ICisjZGVmaW5lIF9BU01fWDg2X1RTQ19ICisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgTlNfU0NBTEUJMTAgLyogMl4xMCwgY2FyZWZ1bGx5IGNob3NlbiAqLworI2RlZmluZSBVU19TQ0FMRQkzMiAvKiAyXjMyLCBhcmJpdHJhbHJpbHkgY2hvc2VuICovCisKKy8qCisgKiBTdGFuZGFyZCB3YXkgdG8gYWNjZXNzIHRoZSBjeWNsZSBjb3VudGVyLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfdDsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBjcHVfa2h6OworZXh0ZXJuIHVuc2lnbmVkIGludCB0c2Nfa2h6OworCitleHRlcm4gdm9pZCBkaXNhYmxlX1RTQyh2b2lkKTsKKworc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJldCA9IDA7CisKKyNpZm5kZWYgQ09ORklHX1g4Nl9UU0MKKwlpZiAoIWNwdV9oYXNfdHNjKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCXJkdHNjbGwocmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgY3ljbGVzX3QgdmdldF9jeWNsZXModm9pZCkKK3sKKwkvKgorCSAqIFdlIG9ubHkgZG8gVkRTT3Mgb24gVFNDIGNhcGFibGUgQ1BVcywgc28gdGhpcyBzaG91bGRudAorCSAqIGFjY2VzcyBib290X2NwdV9kYXRhICh3aGljaCBpcyBub3QgVkRTTy1zYWZlKToKKwkgKi8KKyNpZm5kZWYgQ09ORklHX1g4Nl9UU0MKKwlpZiAoIWNwdV9oYXNfdHNjKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCXJldHVybiAoY3ljbGVzX3QpX19uYXRpdmVfcmVhZF90c2MoKTsKK30KKworZXh0ZXJuIHZvaWQgdHNjX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBtYXJrX3RzY191bnN0YWJsZShjaGFyICpyZWFzb24pOworZXh0ZXJuIGludCB1bnN5bmNocm9uaXplZF90c2Modm9pZCk7CitpbnQgY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpOworCisvKgorICogQm9vdC10aW1lIGNoZWNrIHdoZXRoZXIgdGhlIFRTQ3MgYXJlIHN5bmNocm9uaXplZCBhY3Jvc3MKKyAqIGFsbCBDUFVzL2NvcmVzOgorICovCitleHRlcm4gdm9pZCBjaGVja190c2Nfc3luY19zb3VyY2UoaW50IGNwdSk7CitleHRlcm4gdm9pZCBjaGVja190c2Nfc3luY190YXJnZXQodm9pZCk7CisKK2V4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1RTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmY3MzYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9BU01fWDg2X1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9YODZfVFlQRVNfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjaWZkZWYgX19LRVJORUxfXworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgQklUU19QRVJfTE9ORyAzMgorI2Vsc2UKKyMgZGVmaW5lIEJJVFNfUEVSX0xPTkcgNjQKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7CisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19ISUdITUVNNjRHKQorLyogRE1BIGFkZHJlc3NlcyBjb21lIGluIDMyLWJpdCBhbmQgNjQtYml0IGZsYXZvdXJzLiAqLwordHlwZWRlZiB1NjQgZG1hX2FkZHJfdDsKKyNlbHNlCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9UWVBFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNTQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMCwwICsxLDQ1NCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9VQUNDRVNTX0gKKyNkZWZpbmUgX0FTTV9YODZfVUFDQ0VTU19ICisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBWRVJJRllfUkVBRCAwCisjZGVmaW5lIFZFUklGWV9XUklURSAxCisKKy8qCisgKiBUaGUgZnMgdmFsdWUgZGV0ZXJtaW5lcyB3aGV0aGVyIGFyZ3VtZW50IHZhbGlkaXR5IGNoZWNraW5nIHNob3VsZCBiZQorICogcGVyZm9ybWVkIG9yIG5vdC4gIElmIGdldF9mcygpID09IFVTRVJfRFMsIGNoZWNraW5nIGlzIHBlcmZvcm1lZCwgd2l0aAorICogZ2V0X2ZzKCkgPT0gS0VSTkVMX0RTLCBjaGVja2luZyBpcyBieXBhc3NlZC4KKyAqCisgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVzZSBtYWNyb3MgYXJlIGdyb3NzbHkgbWlzbmFtZWQuCisgKi8KKworI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKKworI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoLTFVTCkKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoUEFHRV9PRkZTRVQpCisKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKyNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLCBiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZGVmaW5lIF9fYWRkcl9vayhhZGRyKQkJCQkJXAorCSgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKShhZGRyKSA8CQlcCisJIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSkKKworLyoKKyAqIFRlc3Qgd2hldGhlciBhIGJsb2NrIG9mIG1lbW9yeSBpcyBhIHZhbGlkIHVzZXIgc3BhY2UgYWRkcmVzcy4KKyAqIFJldHVybnMgMCBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQsIG5vbnplcm8gb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHRlc3Q6CisgKiAodTMzKWFkZHIgKyAodTMzKXNpemUgPj0gKHUzMyljdXJyZW50LT5hZGRyX2xpbWl0LnNlZyAodTY1IGZvciB4ODZfNjQpCisgKgorICogVGhpcyBuZWVkcyAzMy1iaXQgKDY1LWJpdCBmb3IgeDg2XzY0KSBhcml0aG1ldGljLiBXZSBoYXZlIGEgY2FycnkuLi4KKyAqLworCisjZGVmaW5lIF9fcmFuZ2Vfbm90X29rKGFkZHIsIHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWcsIHJva3N1bTsJCQkJCVwKKwlfX2Noa191c2VyX3B0cihhZGRyKTsJCQkJCQlcCisJYXNtKCJhZGQgJTMsJTEgOyBzYmIgJTAsJTAgOyBjbXAgJTEsJTQgOyBzYmIgJDAsJTAiCQlcCisJICAgIDogIj0mciIgKGZsYWcpLCAiPXIiIChyb2tzdW0pCQkJCVwKKwkgICAgOiAiMSIgKGFkZHIpLCAiZyIgKChsb25nKShzaXplKSksCQkJCVwKKwkgICAgICAicm0iIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSk7CQlcCisJZmxhZzsJCQkJCQkJCVwKK30pCisKKy8qKgorICogYWNjZXNzX29rOiAtIENoZWNrcyBpZiBhIHVzZXIgc3BhY2UgcG9pbnRlciBpcyB2YWxpZAorICogQHR5cGU6IFR5cGUgb2YgYWNjZXNzOiAlVkVSSUZZX1JFQUQgb3IgJVZFUklGWV9XUklURS4gIE5vdGUgdGhhdAorICogICAgICAgICVWRVJJRllfV1JJVEUgaXMgYSBzdXBlcnNldCBvZiAlVkVSSUZZX1JFQUQgLSBpZiBpdCBpcyBzYWZlCisgKiAgICAgICAgdG8gd3JpdGUgdG8gYSBibG9jaywgaXQgaXMgYWx3YXlzIHNhZmUgdG8gcmVhZCBmcm9tIGl0LgorICogQGFkZHI6IFVzZXIgc3BhY2UgcG9pbnRlciB0byBzdGFydCBvZiBibG9jayB0byBjaGVjaworICogQHNpemU6IFNpemUgb2YgYmxvY2sgdG8gY2hlY2sKKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIENoZWNrcyBpZiBhIHBvaW50ZXIgdG8gYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZSBpcyB2YWxpZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgKG5vbnplcm8pIGlmIHRoZSBtZW1vcnkgYmxvY2sgbWF5IGJlIHZhbGlkLCBmYWxzZSAoemVybykKKyAqIGlmIGl0IGlzIGRlZmluaXRlbHkgaW52YWxpZC4KKyAqCisgKiBOb3RlIHRoYXQsIGRlcGVuZGluZyBvbiBhcmNoaXRlY3R1cmUsIHRoaXMgZnVuY3Rpb24gcHJvYmFibHkganVzdAorICogY2hlY2tzIHRoYXQgdGhlIHBvaW50ZXIgaXMgaW4gdGhlIHVzZXIgc3BhY2UgcmFuZ2UgLSBhZnRlciBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uLCBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucyBtYXkgc3RpbGwgcmV0dXJuIC1FRkFVTFQuCisgKi8KKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpIChsaWtlbHkoX19yYW5nZV9ub3Rfb2soYWRkciwgc2l6ZSkgPT0gMCkpCisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICovCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCitleHRlcm4gaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5CisgKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCisgKgorICogVGhpcyBnZXRzIGtpbmQgb2YgdWdseS4gV2Ugd2FudCB0byByZXR1cm4gX3R3b18gdmFsdWVzIGluICJnZXRfdXNlcigpIgorICogYW5kIHlldCB3ZSBkb24ndCB3YW50IHRvIGRvIGFueSBwb2ludGVycywgYmVjYXVzZSB0aGF0IGlzIHRvbyBtdWNoCisgKiBvZiBhIHBlcmZvcm1hbmNlIGltcGFjdC4gVGh1cyB3ZSBoYXZlIGEgZmV3IHJhdGhlciB1Z2x5IG1hY3JvcyBoZXJlLAorICogYW5kIGhpZGUgYWxsIHRoZSB1Z2xpbmVzcyBmcm9tIHRoZSB1c2VyLgorICoKKyAqIFRoZSAiX194eHgiIHZlcnNpb25zIG9mIHRoZSB1c2VyIGFjY2VzcyBmdW5jdGlvbnMgYXJlIHZlcnNpb25zIHRoYXQKKyAqIGRvIG5vdCB2ZXJpZnkgdGhlIGFkZHJlc3Mgc3BhY2UsIHRoYXQgbXVzdCBoYXZlIGJlZW4gZG9uZSBwcmV2aW91c2x5CisgKiB3aXRoIGEgc2VwYXJhdGUgImFjY2Vzc19vaygpIiBjYWxsICh0aGlzIGlzIHVzZWQgd2hlbiB3ZSBkbyBtdWx0aXBsZQorICogYWNjZXNzZXMgdG8gdGhlIHNhbWUgYXJlYSBvZiB1c2VyIG1lbW9yeSkuCisgKi8KKworZXh0ZXJuIGludCBfX2dldF91c2VyXzEodm9pZCk7CitleHRlcm4gaW50IF9fZ2V0X3VzZXJfMih2b2lkKTsKK2V4dGVybiBpbnQgX19nZXRfdXNlcl80KHZvaWQpOworZXh0ZXJuIGludCBfX2dldF91c2VyXzgodm9pZCk7CitleHRlcm4gaW50IF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLCByZXQsIHgsIHB0cikJCSAgICAgIFwKKwlhc20gdm9sYXRpbGUoImNhbGwgX19nZXRfdXNlcl8iICNzaXplCSAgICAgIFwKKwkJICAgICA6ICI9YSIgKHJldCksIj1kIiAoeCkJICAgICAgXAorCQkgICAgIDogIjAiIChwdHIpKQkJICAgICAgXAorCisvKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlcgorICogZm9yIHNpZ24gcmVhc29ucyAqLworCisvKioKKyAqIGdldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UuCisgKiBAeDogICBWYXJpYWJsZSB0byBzdG9yZSByZXN1bHQuCisgKiBAcHRyOiBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIFRoaXMgbWFjcm8gY29waWVzIGEgc2luZ2xlIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsCisgKiBzcGFjZS4gIEl0IHN1cHBvcnRzIHNpbXBsZSB0eXBlcyBsaWtlIGNoYXIgYW5kIGludCwgYnV0IG5vdCBsYXJnZXIKKyAqIGRhdGEgdHlwZXMgbGlrZSBzdHJ1Y3R1cmVzIG9yIGFycmF5cy4KKyAqCisgKiBAcHRyIG11c3QgaGF2ZSBwb2ludGVyLXRvLXNpbXBsZS12YXJpYWJsZSB0eXBlLCBhbmQgdGhlIHJlc3VsdCBvZgorICogZGVyZWZlcmVuY2luZyBAcHRyIG11c3QgYmUgYXNzaWduYWJsZSB0byBAeCB3aXRob3V0IGEgY2FzdC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIF9fZ2V0X3VzZXJfOChfX3JldF9ndSwgX192YWxfZ3UsIHB0cikJCQkJXAorCQlfX2dldF91c2VyX3goWCwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpCisjZWxzZQorI2RlZmluZSBfX2dldF91c2VyXzgoX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpCQkJCVwKKwkJX19nZXRfdXNlcl94KDgsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKQorI2VuZGlmCisKKyNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldF9ndTsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX192YWxfZ3U7CQkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfeCgxLCBfX3JldF9ndSwgX192YWxfZ3UsIHB0cik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX3goMiwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl94KDQsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfOChfX3JldF9ndSwgX192YWxfZ3UsIHB0cik7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl94KFgsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX3ZhbF9ndTsJCQkJXAorCV9fcmV0X2d1OwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfeChzaXplLCB4LCBwdHIsIF9fcmV0X3B1KQkJCVwKKwlhc20gdm9sYXRpbGUoImNhbGwgX19wdXRfdXNlcl8iICNzaXplIDogIj1hIiAoX19yZXRfcHUpCVwKKwkJICAgICA6IjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpIDogImVieCIpCisKKworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBhZGRyLCBlcnIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCIxOgltb3ZsICUlZWF4LDAoJTIpXG4iCQkJXAorCQkgICAgICIyOgltb3ZsICUlZWR4LDQoJTIpXG4iCQkJXAorCQkgICAgICIzOlxuIgkJCQkJCVwKKwkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisJCSAgICAgIjQ6CW1vdmwgJTMsJTBcbiIJCQkJXAorCQkgICAgICIJam1wIDNiXG4iCQkJCQlcCisJCSAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgNGIpCQkJCVwKKwkJICAgICBfQVNNX0VYVEFCTEUoMmIsIDRiKQkJCQlcCisJCSAgICAgOiAiPXIiIChlcnIpCQkJCQlcCisJCSAgICAgOiAiQSIgKHgpLCAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisKKyNkZWZpbmUgX19wdXRfdXNlcl94OCh4LCBwdHIsIF9fcmV0X3B1KQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfOCIgOiAiPWEiIChfX3JldF9wdSkJXAorCQkgICAgIDogIkEiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpIDogImVieCIpCisjZWxzZQorI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBwdHIsIHJldHZhbCkgXAorCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAicSIsICIiLCAiWnIiLCAtRUZBVUxUKQorI2RlZmluZSBfX3B1dF91c2VyX3g4KHgsIHB0ciwgX19yZXRfcHUpIF9fcHV0X3VzZXJfeCg4LCB4LCBwdHIsIF9fcmV0X3B1KQorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfYmFkKHZvaWQpOworCisvKgorICogU3RyYW5nZSBtYWdpYyBjYWxsaW5nIGNvbnZlbnRpb246IHBvaW50ZXIgaW4gJWVjeCwKKyAqIHZhbHVlIGluICVlYXgoOiVlZHgpLCByZXR1cm4gdmFsdWUgaW4gJWVheC4gY2xvYmJlcnMgJXJieAorICovCitleHRlcm4gdm9pZCBfX3B1dF91c2VyXzEodm9pZCk7CitleHRlcm4gdm9pZCBfX3B1dF91c2VyXzIodm9pZCk7CitleHRlcm4gdm9pZCBfX3B1dF91c2VyXzQodm9pZCk7CitleHRlcm4gdm9pZCBfX3B1dF91c2VyXzgodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X1dQX1dPUktTX09LCisKKy8qKgorICogcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLgorICogQHg6ICAgVmFsdWUgdG8gY29weSB0byB1c2VyIHNwYWNlLgorICogQHB0cjogRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIFRoaXMgbWFjcm8gY29waWVzIGEgc2luZ2xlIHNpbXBsZSB2YWx1ZSBmcm9tIGtlcm5lbCBzcGFjZSB0byB1c2VyCisgKiBzcGFjZS4gIEl0IHN1cHBvcnRzIHNpbXBsZSB0eXBlcyBsaWtlIGNoYXIgYW5kIGludCwgYnV0IG5vdCBsYXJnZXIKKyAqIGRhdGEgdHlwZXMgbGlrZSBzdHJ1Y3R1cmVzIG9yIGFycmF5cy4KKyAqCisgKiBAcHRyIG11c3QgaGF2ZSBwb2ludGVyLXRvLXNpbXBsZS12YXJpYWJsZSB0eXBlLCBhbmQgQHggbXVzdCBiZSBhc3NpZ25hYmxlCisgKiB0byB0aGUgcmVzdWx0IG9mIGRlcmVmZXJlbmNpbmcgQHB0ci4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqLworI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCQlcCisoewkJCQkJCQkJXAorCWludCBfX3JldF9wdTsJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsOwkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKKwlfX3B1X3ZhbCA9IHg7CQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJXAorCWNhc2UgMToJCQkJCQkJXAorCQlfX3B1dF91c2VyX3goMSwgX19wdV92YWwsIHB0ciwgX19yZXRfcHUpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl94KDIsIF9fcHVfdmFsLCBwdHIsIF9fcmV0X3B1KTsJXAorCQlicmVhazsJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQlcCisJCV9fcHV0X3VzZXJfeCg0LCBfX3B1X3ZhbCwgcHRyLCBfX3JldF9wdSk7CVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgODoJCQkJCQkJXAorCQlfX3B1dF91c2VyX3g4KF9fcHVfdmFsLCBwdHIsIF9fcmV0X3B1KTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJXAorCQlfX3B1dF91c2VyX3goWCwgX19wdV92YWwsIHB0ciwgX19yZXRfcHUpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwl9CQkJCQkJCVwKKwlfX3JldF9wdTsJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCwgZXJycmV0KQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJcmV0dmFsID0gMDsJCQkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImIiLCAiYiIsICJpcSIsIGVycnJldCk7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAidyIsICJ3IiwgImlyIiwgZXJycmV0KTsJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJsIiwgImsiLCAgImlyIiwgZXJycmV0KTtcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX3U2NCgoX190eXBlb2ZfXygqcHRyKSkoeCksIHB0ciwgcmV0dmFsKTsJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCwgZXJycmV0KQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpX19wdXNfdG1wID0geDsJCQkJXAorCXJldHZhbCA9IDA7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoX19jb3B5X3RvX3VzZXJfbGwocHRyLCAmX19wdXNfdG1wLCBzaXplKSAhPSAwKSkJXAorCQlyZXR2YWwgPSBlcnJyZXQ7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHB1dF91c2VyKHgsIHB0cikJCQkJCVwKKyh7CQkJCQkJCQlcCisJaW50IF9fcmV0X3B1OwkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSlfX3B1c190bXAgPSB4OwkJCVwKKwlfX3JldF9wdSA9IDA7CQkJCQkJXAorCWlmICh1bmxpa2VseShfX2NvcHlfdG9fdXNlcl9sbChwdHIsICZfX3B1c190bXAsCQlcCisJCQkJICAgICAgIHNpemVvZigqKHB0cikpKSAhPSAwKSkJXAorCQlfX3JldF9wdSA9IC1FRkFVTFQ7CQkJCVwKKwlfX3JldF9wdTsJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX3U2NCh4LCBwdHIsIHJldHZhbCwgZXJycmV0KQkoeCkgPSBfX2dldF91c2VyX2JhZCgpCisjZWxzZQorI2RlZmluZSBfX2dldF91c2VyX2FzbV91NjQoeCwgcHRyLCByZXR2YWwsIGVycnJldCkgXAorCSBfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgInEiLCAiIiwgIj1yIiwgZXJycmV0KQorI2VuZGlmCisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsLCBlcnJyZXQpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAiYiIsICJiIiwgIj1xIiwgZXJycmV0KTsJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJ3IiwgInciLCAiPXIiLCBlcnJyZXQpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImwiLCAiayIsICI9ciIsIGVycnJldCk7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtX3U2NCh4LCBwdHIsIHJldHZhbCwgZXJycmV0KTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCSh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlLCBydHlwZSwgbHR5cGUsIGVycnJldCkJXAorCWFzbSB2b2xhdGlsZSgiMToJbW92Iml0eXBlIiAlMiwlInJ0eXBlIjFcbiIJCVwKKwkJICAgICAiMjpcbiIJCQkJCQlcCisJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorCQkgICAgICIzOgltb3YgJTMsJTBcbiIJCQkJXAorCQkgICAgICIJeG9yIml0eXBlIiAlInJ0eXBlIjEsJSJydHlwZSIxXG4iCQlcCisJCSAgICAgIglqbXAgMmJcbiIJCQkJCVwKKwkJICAgICAiLnByZXZpb3VzXG4iCQkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikJCQkJXAorCQkgICAgIDogIj1yIiAoZXJyKSwgbHR5cGUoeCkJCQkJXAorCQkgICAgIDogIm0iIChfX20oYWRkcikpLCAiaSIgKGVycnJldCksICIwIiAoZXJyKSkKKworI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX3B1X2VycjsJCQkJCQlcCisJX19wdXRfdXNlcl9zaXplKCh4KSwgKHB0ciksIChzaXplKSwgX19wdV9lcnIsIC1FRkFVTFQpOwlcCisJX19wdV9lcnI7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyOwkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCQlcCisJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCAocHRyKSwgKHNpemUpLCBfX2d1X2VyciwgLUVGQVVMVCk7CVwKKwkoeCkgPSAoX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCit9KQorCisvKiBGSVhNRTogdGhpcyBoYWNrIGlzIGRlZmluaXRlbHkgd3JvbmcgLUFLICovCitzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OworI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0IF9fdXNlciAqKSh4KSkKKworLyoKKyAqIFRlbGwgZ2NjIHdlIHJlYWQgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiB3cml0aW5nOiB0aGlzIGlzIGJlY2F1c2UKKyAqIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUgYXJlIG5vCisgKiBhbGlhc2luZyBpc3N1ZXMuCisgKi8KKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBpdHlwZSwgcnR5cGUsIGx0eXBlLCBlcnJyZXQpCVwKKwlhc20gdm9sYXRpbGUoIjE6CW1vdiJpdHlwZSIgJSJydHlwZSIxLCUyXG4iCQlcCisJCSAgICAgIjI6XG4iCQkJCQkJXAorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKKwkJICAgICAiMzoJbW92ICUzLCUwXG4iCQkJCVwKKwkJICAgICAiCWptcCAyYlxuIgkJCQkJXAorCQkgICAgICIucHJldmlvdXNcbiIJCQkJCVwKKwkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDNiKQkJCQlcCisJCSAgICAgOiAiPXIiKGVycikJCQkJCVwKKwkJICAgICA6IGx0eXBlKHgpLCAibSIgKF9fbShhZGRyKSksICJpIiAoZXJycmV0KSwgIjAiIChlcnIpKQorLyoqCisgKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB4OiAgIFZhcmlhYmxlIHRvIHN0b3JlIHJlc3VsdC4KKyAqIEBwdHI6IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCB0aGUgcmVzdWx0IG9mCisgKiBkZXJlZmVyZW5jaW5nIEBwdHIgbXVzdCBiZSBhc3NpZ25hYmxlIHRvIEB4IHdpdGhvdXQgYSBjYXN0LgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgorICovCisKKyNkZWZpbmUgX19nZXRfdXNlcih4LCBwdHIpCQkJCQkJXAorCV9fZ2V0X3VzZXJfbm9jaGVjaygoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKKy8qKgorICogX19wdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB4OiAgIFZhbHVlIHRvIGNvcHkgdG8gdXNlciBzcGFjZS4KKyAqIEBwdHI6IERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIG1hY3JvIGNvcGllcyBhIHNpbmdsZSBzaW1wbGUgdmFsdWUgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlcgorICogc3BhY2UuICBJdCBzdXBwb3J0cyBzaW1wbGUgdHlwZXMgbGlrZSBjaGFyIGFuZCBpbnQsIGJ1dCBub3QgbGFyZ2VyCisgKiBkYXRhIHR5cGVzIGxpa2Ugc3RydWN0dXJlcyBvciBhcnJheXMuCisgKgorICogQHB0ciBtdXN0IGhhdmUgcG9pbnRlci10by1zaW1wbGUtdmFyaWFibGUgdHlwZSwgYW5kIEB4IG11c3QgYmUgYXNzaWduYWJsZQorICogdG8gdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIEBwdHIuCisgKgorICogQ2FsbGVyIG11c3QgY2hlY2sgdGhlIHBvaW50ZXIgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqLworCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKwlfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKKworI2RlZmluZSBfX2dldF91c2VyX3VuYWxpZ25lZCBfX2dldF91c2VyCisjZGVmaW5lIF9fcHV0X3VzZXJfdW5hbGlnbmVkIF9fcHV0X3VzZXIKKworLyoKKyAqIG1vdnNsIGNhbiBiZSBzbG93IHdoZW4gc291cmNlIGFuZCBkZXN0IGFyZSBub3QgYm90aCA4LWJ5dGUgYWxpZ25lZAorICovCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9VU0VSQ09QWQorZXh0ZXJuIHN0cnVjdCBtb3ZzbF9tYXNrIHsKKwlpbnQgbWFzazsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBtb3ZzbF9tYXNrOworI2VuZGlmCisKKyNkZWZpbmUgQVJDSF9IQVNfTk9DQUNIRV9VQUNDRVNTIDEKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgaW5jbHVkZSAidWFjY2Vzc18zMi5oIgorI2Vsc2UKKyMgZGVmaW5lIEFSQ0hfSEFTX1NFQVJDSF9FWFRBQkxFCisjIGluY2x1ZGUgInVhY2Nlc3NfNjQuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfVUFDQ0VTU19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDk1YTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCkBAIC0wLDAgKzEsMjE4IEBACisjaWZuZGVmIF9BU01fWDg2X1VBQ0NFU1NfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9VQUNDRVNTXzMyX0gKKworLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfdG9fdXNlcl9sbAorCQkodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwordW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X2Zyb21fdXNlcl9sbAorCQkodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwordW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X2Zyb21fdXNlcl9sbF9ub3plcm8KKwkJKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK3Vuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfbGxfbm9jYWNoZQorCQkodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwordW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X2Zyb21fdXNlcl9sbF9ub2NhY2hlX25vemVybworCQkodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworCisvKioKKyAqIF9fY29weV90b191c2VyX2luYXRvbWljOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGludG8gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgorICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAZnJvbTogU291cmNlIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4KKyAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4KKyAqCisgKiBDb3B5IGRhdGEgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4gIENhbGxlciBtdXN0IGNoZWNrCisgKiB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGFsc28gbWFrZSBzdXJlIGhlIHBpbnMgdGhlIHVzZXIgc3BhY2UgYWRkcmVzcworICogc28gdGhhdCB0aGUgd2UgZG9uJ3QgcmVzdWx0IGluIHBhZ2UgZmF1bHQgYW5kIHNsZWVwLgorICoKKyAqIEhlcmUgd2Ugc3BlY2lhbC1jYXNlIDEsIDIgYW5kIDQtYnl0ZSBjb3B5XypfdXNlciBpbnZvY2F0aW9ucy4gIE9uIGEgZmF1bHQKKyAqIHdlIHJldHVybiB0aGUgaW5pdGlhbCByZXF1ZXN0IHNpemUgKDEsIDIgb3IgNCksIGFzIGNvcHlfKl91c2VyIHNob3VsZCBkby4KKyAqIElmIGEgc3RvcmUgY3Jvc3NlcyBhIHBhZ2UgYm91bmRhcnkgYW5kIGdldHMgYSBmYXVsdCwgdGhlIHg4NiB3aWxsIG5vdCB3cml0ZQorICogYW55dGhpbmcsIHNvIHRoaXMgaXMgYWNjdXJhdGUuCisgKi8KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjaworX19jb3B5X3RvX3VzZXJfaW5hdG9taWModm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pKSB7CisJCXVuc2lnbmVkIGxvbmcgcmV0OworCisJCXN3aXRjaCAobikgeworCQljYXNlIDE6CisJCQlfX3B1dF91c2VyX3NpemUoKih1OCAqKWZyb20sICh1OCBfX3VzZXIgKil0bywKKwkJCQkJMSwgcmV0LCAxKTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgMjoKKwkJCV9fcHV0X3VzZXJfc2l6ZSgqKHUxNiAqKWZyb20sICh1MTYgX191c2VyICopdG8sCisJCQkJCTIsIHJldCwgMik7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIDQ6CisJCQlfX3B1dF91c2VyX3NpemUoKih1MzIgKilmcm9tLCAodTMyIF9fdXNlciAqKXRvLAorCQkJCQk0LCByZXQsIDQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gX19jb3B5X3RvX3VzZXJfbGwodG8sIGZyb20sIG4pOworfQorCisvKioKKyAqIF9fY29weV90b191c2VyOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGludG8gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgorICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAZnJvbTogU291cmNlIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4KKyAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIENvcHkgZGF0YSBmcm9tIGtlcm5lbCBzcGFjZSB0byB1c2VyIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKKyAqIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNvcGllZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCitfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICAgICBtaWdodF9zbGVlcCgpOworICAgICAgIHJldHVybiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh0bywgZnJvbSwgbik7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZworX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwkvKiBBdm9pZCB6ZXJvaW5nIHRoZSB0YWlsIGlmIHRoZSBjb3B5IGZhaWxzLi4KKwkgKiBJZiAnbicgaXMgY29uc3RhbnQgYW5kIDEsIDIsIG9yIDQsIHdlIGRvIHN0aWxsIHplcm8gb24gYSBmYWlsdXJlLAorCSAqIGJ1dCBhcyB0aGUgemVyb2luZyBiZWhhdmlvdXIgaXMgb25seSBzaWduaWZpY2FudCB3aGVuIG4gaXMgbm90CisJICogY29uc3RhbnQsIHRoYXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4KKwkgKi8KKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikpIHsKKwkJdW5zaWduZWQgbG9uZyByZXQ7CisKKwkJc3dpdGNoIChuKSB7CisJCWNhc2UgMToKKwkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHU4ICopdG8sIGZyb20sIDEsIHJldCwgMSk7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIDI6CisJCQlfX2dldF91c2VyX3NpemUoKih1MTYgKil0bywgZnJvbSwgMiwgcmV0LCAyKTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgNDoKKwkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHUzMiAqKXRvLCBmcm9tLCA0LCByZXQsIDQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gX19jb3B5X2Zyb21fdXNlcl9sbF9ub3plcm8odG8sIGZyb20sIG4pOworfQorCisvKioKKyAqIF9fY29weV9mcm9tX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgZnJvbSB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwgc3BhY2UuICBDYWxsZXIgbXVzdCBjaGVjaworICogdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKgorICogSWYgc29tZSBkYXRhIGNvdWxkIG5vdCBiZSBjb3BpZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBwYWQgdGhlIGNvcGllZAorICogZGF0YSB0byB0aGUgcmVxdWVzdGVkIHNpemUgdXNpbmcgemVybyBieXRlcy4KKyAqCisgKiBBbiBhbHRlcm5hdGUgdmVyc2lvbiAtIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoKSAtIG1heSBiZSBjYWxsZWQgZnJvbQorICogYXRvbWljIGNvbnRleHQgYW5kIHdpbGwgZmFpbCByYXRoZXIgdGhhbiBzbGVlcC4gIEluIHRoaXMgY2FzZSB0aGUKKyAqIHVuY29waWVkIGJ5dGVzIHdpbGwgKk5PVCogYmUgcGFkZGVkIHdpdGggemVyb3MuICBTZWUgZnMvZmlsZW1hcC5oCisgKiBmb3IgZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgaXMgbmVlZGVkLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikpIHsKKwkJdW5zaWduZWQgbG9uZyByZXQ7CisKKwkJc3dpdGNoIChuKSB7CisJCWNhc2UgMToKKwkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHU4ICopdG8sIGZyb20sIDEsIHJldCwgMSk7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIDI6CisJCQlfX2dldF91c2VyX3NpemUoKih1MTYgKil0bywgZnJvbSwgMiwgcmV0LCAyKTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgNDoKKwkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHUzMiAqKXRvLCBmcm9tLCA0LCByZXQsIDQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gX19jb3B5X2Zyb21fdXNlcl9sbCh0bywgZnJvbSwgbik7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NvcHlfZnJvbV91c2VyX25vY2FjaGUodm9pZCAqdG8sCisJCQkJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwltaWdodF9zbGVlcCgpOworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSkgeworCQl1bnNpZ25lZCBsb25nIHJldDsKKworCQlzd2l0Y2ggKG4pIHsKKwkJY2FzZSAxOgorCQkJX19nZXRfdXNlcl9zaXplKCoodTggKil0bywgZnJvbSwgMSwgcmV0LCAxKTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgMjoKKwkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHUxNiAqKXRvLCBmcm9tLCAyLCByZXQsIDIpOworCQkJcmV0dXJuIHJldDsKKwkJY2FzZSA0OgorCQkJX19nZXRfdXNlcl9zaXplKCoodTMyICopdG8sIGZyb20sIDQsIHJldCwgNCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiBfX2NvcHlfZnJvbV91c2VyX2xsX25vY2FjaGUodG8sIGZyb20sIG4pOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJICB1bnNpZ25lZCBsb25nIG4pCit7CisgICAgICAgcmV0dXJuIF9fY29weV9mcm9tX3VzZXJfbGxfbm9jYWNoZV9ub3plcm8odG8sIGZyb20sIG4pOworfQorCit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLAorCQkJCQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwordW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sCisJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBuKTsKK2xvbmcgX19tdXN0X2NoZWNrIHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywKKwkJCQkgICAgbG9uZyBjb3VudCk7Citsb25nIF9fbXVzdF9jaGVjayBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwKKwkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KTsKKworLyoqCisgKiBzdHJsZW5fdXNlcjogLSBHZXQgdGhlIHNpemUgb2YgYSBzdHJpbmcgaW4gdXNlciBzcGFjZS4KKyAqIEBzdHI6IFRoZSBzdHJpbmcgdG8gbWVhc3VyZS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIEdldCB0aGUgc2l6ZSBvZiBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB1c2VyIHNwYWNlLgorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHN0cmluZyBJTkNMVURJTkcgdGhlIHRlcm1pbmF0aW5nIE5VTC4KKyAqIE9uIGV4Y2VwdGlvbiwgcmV0dXJucyAwLgorICoKKyAqIElmIHRoZXJlIGlzIGEgbGltaXQgb24gdGhlIGxlbmd0aCBvZiBhIHZhbGlkIHN0cmluZywgeW91IG1heSB3aXNoIHRvCisgKiBjb25zaWRlciB1c2luZyBzdHJubGVuX3VzZXIoKSBpbnN0ZWFkLgorICovCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikgc3Rybmxlbl91c2VyKHN0ciwgTE9OR19NQVgpCisKK2xvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbik7Cit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjbGVhcl91c2VyKHZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKK3Vuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VQUNDRVNTXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjRmMTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0wLDAgKzEsMjAyIEBACisjaWZuZGVmIF9BU01fWDg2X1VBQ0NFU1NfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9VQUNDRVNTXzY0X0gKKworLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogQ29weSBUby9Gcm9tIFVzZXJzcGFjZQorICovCisKKy8qIEhhbmRsZXMgZXhjZXB0aW9ucyBpbiBib3RoIHRvIGFuZCBmcm9tLCBidXQgZG9lc24ndCBkbyBhY2Nlc3Nfb2sgKi8KK19fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCitjb3B5X3VzZXJfZ2VuZXJpYyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKKworX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKK2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CitfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZworY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsZW4pOworX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKK2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsZW4pOworCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjaworaW50IF9fY29weV9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKQoreworCWludCByZXQgPSAwOworCWlmICghX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpCisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYyhkc3QsIChfX2ZvcmNlIHZvaWQgKilzcmMsIHNpemUpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMTpfX2dldF91c2VyX2FzbSgqKHU4ICopZHN0LCAodTggX191c2VyICopc3JjLAorCQkJICAgICAgcmV0LCAiYiIsICJiIiwgIj1xIiwgMSk7CisJCXJldHVybiByZXQ7CisJY2FzZSAyOl9fZ2V0X3VzZXJfYXNtKCoodTE2ICopZHN0LCAodTE2IF9fdXNlciAqKXNyYywKKwkJCSAgICAgIHJldCwgInciLCAidyIsICI9ciIsIDIpOworCQlyZXR1cm4gcmV0OworCWNhc2UgNDpfX2dldF91c2VyX2FzbSgqKHUzMiAqKWRzdCwgKHUzMiBfX3VzZXIgKilzcmMsCisJCQkgICAgICByZXQsICJsIiwgImsiLCAiPXIiLCA0KTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIDg6X19nZXRfdXNlcl9hc20oKih1NjQgKilkc3QsICh1NjQgX191c2VyICopc3JjLAorCQkJICAgICAgcmV0LCAicSIsICIiLCAiPXIiLCA4KTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIDEwOgorCQlfX2dldF91c2VyX2FzbSgqKHU2NCAqKWRzdCwgKHU2NCBfX3VzZXIgKilzcmMsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiPXIiLCAxNik7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwkJX19nZXRfdXNlcl9hc20oKih1MTYgKikoOCArIChjaGFyICopZHN0KSwKKwkJCSAgICAgICAodTE2IF9fdXNlciAqKSg4ICsgKGNoYXIgX191c2VyICopc3JjKSwKKwkJCSAgICAgICByZXQsICJ3IiwgInciLCAiPXIiLCAyKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIDE2OgorCQlfX2dldF91c2VyX2FzbSgqKHU2NCAqKWRzdCwgKHU2NCBfX3VzZXIgKilzcmMsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiPXIiLCAxNik7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwkJX19nZXRfdXNlcl9hc20oKih1NjQgKikoOCArIChjaGFyICopZHN0KSwKKwkJCSAgICAgICAodTY0IF9fdXNlciAqKSg4ICsgKGNoYXIgX191c2VyICopc3JjKSwKKwkJCSAgICAgICByZXQsICJxIiwgIiIsICI9ciIsIDgpOworCQlyZXR1cm4gcmV0OworCWRlZmF1bHQ6CisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYyhkc3QsIChfX2ZvcmNlIHZvaWQgKilzcmMsIHNpemUpOworCX0KK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sKK2ludCBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIHNpemUpCit7CisJaW50IHJldCA9IDA7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkKKwkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3QsIHNyYywgc2l6ZSk7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOl9fcHV0X3VzZXJfYXNtKCoodTggKilzcmMsICh1OCBfX3VzZXIgKilkc3QsCisJCQkgICAgICByZXQsICJiIiwgImIiLCAiaXEiLCAxKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIDI6X19wdXRfdXNlcl9hc20oKih1MTYgKilzcmMsICh1MTYgX191c2VyICopZHN0LAorCQkJICAgICAgcmV0LCAidyIsICJ3IiwgImlyIiwgMik7CisJCXJldHVybiByZXQ7CisJY2FzZSA0Ol9fcHV0X3VzZXJfYXNtKCoodTMyICopc3JjLCAodTMyIF9fdXNlciAqKWRzdCwKKwkJCSAgICAgIHJldCwgImwiLCAiayIsICJpciIsIDQpOworCQlyZXR1cm4gcmV0OworCWNhc2UgODpfX3B1dF91c2VyX2FzbSgqKHU2NCAqKXNyYywgKHU2NCBfX3VzZXIgKilkc3QsCisJCQkgICAgICByZXQsICJxIiwgIiIsICJpciIsIDgpOworCQlyZXR1cm4gcmV0OworCWNhc2UgMTA6CisJCV9fcHV0X3VzZXJfYXNtKCoodTY0ICopc3JjLCAodTY0IF9fdXNlciAqKWRzdCwKKwkJCSAgICAgICByZXQsICJxIiwgIiIsICJpciIsIDEwKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlyZXR1cm4gcmV0OworCQlhc20oIiI6OjoibWVtb3J5Iik7CisJCV9fcHV0X3VzZXJfYXNtKDRbKHUxNiAqKXNyY10sIDQgKyAodTE2IF9fdXNlciAqKWRzdCwKKwkJCSAgICAgICByZXQsICJ3IiwgInciLCAiaXIiLCAyKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIDE2OgorCQlfX3B1dF91c2VyX2FzbSgqKHU2NCAqKXNyYywgKHU2NCBfX3VzZXIgKilkc3QsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiaXIiLCAxNik7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwkJYXNtKCIiOjo6Im1lbW9yeSIpOworCQlfX3B1dF91c2VyX2FzbSgxWyh1NjQgKilzcmNdLCAxICsgKHU2NCBfX3VzZXIgKilkc3QsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiaXIiLCA4KTsKKwkJcmV0dXJuIHJldDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwgc3JjLCBzaXplKTsKKwl9Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrCitpbnQgX19jb3B5X2luX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKQorCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwKKwkJCQkJIChfX2ZvcmNlIHZvaWQgKilzcmMsIHNpemUpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMTogeworCQl1OCB0bXA7CisJCV9fZ2V0X3VzZXJfYXNtKHRtcCwgKHU4IF9fdXNlciAqKXNyYywKKwkJCSAgICAgICByZXQsICJiIiwgImIiLCAiPXEiLCAxKTsKKwkJaWYgKGxpa2VseSghcmV0KSkKKwkJCV9fcHV0X3VzZXJfYXNtKHRtcCwgKHU4IF9fdXNlciAqKWRzdCwKKwkJCQkgICAgICAgcmV0LCAiYiIsICJiIiwgImlxIiwgMSk7CisJCXJldHVybiByZXQ7CisJfQorCWNhc2UgMjogeworCQl1MTYgdG1wOworCQlfX2dldF91c2VyX2FzbSh0bXAsICh1MTYgX191c2VyICopc3JjLAorCQkJICAgICAgIHJldCwgInciLCAidyIsICI9ciIsIDIpOworCQlpZiAobGlrZWx5KCFyZXQpKQorCQkJX19wdXRfdXNlcl9hc20odG1wLCAodTE2IF9fdXNlciAqKWRzdCwKKwkJCQkgICAgICAgcmV0LCAidyIsICJ3IiwgImlyIiwgMik7CisJCXJldHVybiByZXQ7CisJfQorCisJY2FzZSA0OiB7CisJCXUzMiB0bXA7CisJCV9fZ2V0X3VzZXJfYXNtKHRtcCwgKHUzMiBfX3VzZXIgKilzcmMsCisJCQkgICAgICAgcmV0LCAibCIsICJrIiwgIj1yIiwgNCk7CisJCWlmIChsaWtlbHkoIXJldCkpCisJCQlfX3B1dF91c2VyX2FzbSh0bXAsICh1MzIgX191c2VyICopZHN0LAorCQkJCSAgICAgICByZXQsICJsIiwgImsiLCAiaXIiLCA0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY2FzZSA4OiB7CisJCXU2NCB0bXA7CisJCV9fZ2V0X3VzZXJfYXNtKHRtcCwgKHU2NCBfX3VzZXIgKilzcmMsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiPXIiLCA4KTsKKwkJaWYgKGxpa2VseSghcmV0KSkKKwkJCV9fcHV0X3VzZXJfYXNtKHRtcCwgKHU2NCBfX3VzZXIgKilkc3QsCisJCQkJICAgICAgIHJldCwgInEiLCAiIiwgImlyIiwgOCk7CisJCXJldHVybiByZXQ7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LAorCQkJCQkgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSk7CisJfQorfQorCitfX211c3RfY2hlY2sgbG9uZworc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KTsKK19fbXVzdF9jaGVjayBsb25nCitfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7CitfX211c3RfY2hlY2sgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKTsKK19fbXVzdF9jaGVjayBsb25nIF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbik7CitfX211c3RfY2hlY2sgbG9uZyBzdHJsZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyKTsKK19fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nIGNsZWFyX3VzZXIodm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOworX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKKworX19tdXN0X2NoZWNrIGxvbmcgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJCSAgICB1bnNpZ25lZCBzaXplKTsKKworc3RhdGljIF9fbXVzdF9jaGVjayBfX2Fsd2F5c19pbmxpbmUgaW50CitfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIHNpemUpCit7CisJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3QsIHNyYywgc2l6ZSk7Cit9CisKK2V4dGVybiBsb25nIF9fY29weV91c2VyX25vY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLAorCQkJCXVuc2lnbmVkIHNpemUsIGludCB6ZXJvcmVzdCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29weV9mcm9tX3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJCSAgIHVuc2lnbmVkIHNpemUpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlyZXR1cm4gX19jb3B5X3VzZXJfbm9jYWNoZShkc3QsIHNyYywgc2l6ZSwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZSh2b2lkICpkc3QsCisJCQkJCQkgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKKwkJCQkJCSAgICB1bnNpZ25lZCBzaXplKQoreworCXJldHVybiBfX2NvcHlfdXNlcl9ub2NhY2hlKGRzdCwgc3JjLCBzaXplLCAwKTsKK30KKwordW5zaWduZWQgbG9uZworY29weV91c2VyX2hhbmRsZV90YWlsKGNoYXIgKnRvLCBjaGFyICpmcm9tLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIHplcm9yZXN0KTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1VBQ0NFU1NfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczMjRjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fWDg2X1VDT05URVhUX0gKKworI2RlZmluZSBVQ19GUF9YU1RBVEUJMHgxCS8qIGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgZXh0ZW5kZWQgc3RhdGUKKwkJCQkgKiBpbmZvcm1hdGlvbiBpbiB0aGUgbWVtb3J5IGxheW91dCBwb2ludGVkCisJCQkJICogYnkgdGhlIGZwc3RhdGUgcG9pbnRlciBpbiB0aGUgdWNvbnRleHQncworCQkJCSAqIHNpZ2NvbnRleHQgc3RydWN0ICh1Y19tY29udGV4dCkuCisJCQkJICovCisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1VDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiZDQxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9YODZfVU5BTElHTkVEX0gKKyNkZWZpbmUgX0FTTV9YODZfVU5BTElHTkVEX0gKKworLyoKKyAqIFRoZSB4ODYgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9hY2Nlc3Nfb2suaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgorCisjZGVmaW5lIGdldF91bmFsaWduZWQgX19nZXRfdW5hbGlnbmVkX2xlCisjZGVmaW5lIHB1dF91bmFsaWduZWQgX19wdXRfdW5hbGlnbmVkX2xlCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3VuaXN0ZC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni91bmlzdGQuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiYmE3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCkBAIC0wLDAgKzEsMzc5IEBACisjaWZuZGVmIF9BU01fWDg2X1VOSVNURF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X1VOSVNURF8zMl9ICisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCisgKi8KKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAKKyNkZWZpbmUgX19OUl9leGl0CQkgIDEKKyNkZWZpbmUgX19OUl9mb3JrCQkgIDIKKyNkZWZpbmUgX19OUl9yZWFkCQkgIDMKKyNkZWZpbmUgX19OUl93cml0ZQkJICA0CisjZGVmaW5lIF9fTlJfb3BlbgkJICA1CisjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgorI2RlZmluZSBfX05SX3dhaXRwaWQJCSAgNworI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKKyNkZWZpbmUgX19OUl9saW5rCQkgIDkKKyNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCisjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgorI2RlZmluZSBfX05SX3RpbWUJCSAxMworI2RlZmluZSBfX05SX21rbm9kCQkgMTQKKyNkZWZpbmUgX19OUl9jaG1vZAkJIDE1CisjZGVmaW5lIF9fTlJfbGNob3duCQkgMTYKKyNkZWZpbmUgX19OUl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAorI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKyNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CisjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKKyNkZWZpbmUgX19OUl9zdHR5CQkgMzEKKyNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworI2RlZmluZSBfX05SX25pY2UJCSAzNAorI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisjZGVmaW5lIF9fTlJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfYnJrCQkgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgorI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9hY2N0CQkgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKKyNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pb2N0bAkJIDU0CisjZGVmaW5lIF9fTlJfZmNudGwJCSA1NQorI2RlZmluZSBfX05SX21weAkJIDU2CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3CisjZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKKyNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2ICAgLyogQmFjayBjb21wYXRpYmxlIDJHaWcgbGltaXRlZCBybGltaXQgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCSA3NworI2RlZmluZSBfX05SX2dldHRpbWVvZmRheQkgNzgKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJIDc5CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkgODAKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCSA4MQorI2RlZmluZSBfX05SX3NlbGVjdAkJIDgyCisjZGVmaW5lIF9fTlJfc3ltbGluawkJIDgzCisjZGVmaW5lIF9fTlJfb2xkbHN0YXQJCSA4NAorI2RlZmluZSBfX05SX3JlYWRsaW5rCQkgODUKKyNkZWZpbmUgX19OUl91c2VsaWIJCSA4NgorI2RlZmluZSBfX05SX3N3YXBvbgkJIDg3CisjZGVmaW5lIF9fTlJfcmVib290CQkgODgKKyNkZWZpbmUgX19OUl9yZWFkZGlyCQkgODkKKyNkZWZpbmUgX19OUl9tbWFwCQkgOTAKKyNkZWZpbmUgX19OUl9tdW5tYXAJCSA5MQorI2RlZmluZSBfX05SX3RydW5jYXRlCQkgOTIKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUJCSA5MworI2RlZmluZSBfX05SX2ZjaG1vZAkJIDk0CisjZGVmaW5lIF9fTlJfZmNob3duCQkgOTUKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkgOTYKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTcKKyNkZWZpbmUgX19OUl9wcm9maWwJCSA5OAorI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5CisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCisjZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKKyNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMworI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKKyNkZWZpbmUgX19OUl9zdGF0CQkxMDYKKyNkZWZpbmUgX19OUl9sc3RhdAkJMTA3CisjZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAorI2RlZmluZSBfX05SX29sZHVuYW1lCQkxMDkKKyNkZWZpbmUgX19OUl9pb3BsCQkxMTAKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pZGxlCQkxMTIKKyNkZWZpbmUgX19OUl92bTg2b2xkCQkxMTMKKyNkZWZpbmUgX19OUl93YWl0NAkJMTE0CisjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CisjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2CisjZGVmaW5lIF9fTlJfaXBjCQkxMTcKKyNkZWZpbmUgX19OUl9mc3luYwkJMTE4CisjZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKKyNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKKyNkZWZpbmUgX19OUl91bmFtZQkJMTIyCisjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdAkJMTIzCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAorI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkxMjYKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5CisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTEzMAorI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKKyNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMworI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAorI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCTEzOAorI2RlZmluZSBfX05SX3NldGZzZ2lkCQkxMzkKKyNkZWZpbmUgX19OUl9fbGxzZWVrCQkxNDAKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJMTQxCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJMTQyCisjZGVmaW5lIF9fTlJfZmxvY2sJCTE0MworI2RlZmluZSBfX05SX21zeW5jCQkxNDQKKyNkZWZpbmUgX19OUl9yZWFkdgkJMTQ1CisjZGVmaW5lIF9fTlJfd3JpdGV2CQkxNDYKKyNkZWZpbmUgX19OUl9nZXRzaWQJCTE0NworI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJMTQ4CisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJMTQ5CisjZGVmaW5lIF9fTlJfbWxvY2sJCTE1MAorI2RlZmluZSBfX05SX211bmxvY2sJCTE1MQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkxNTIKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkxNTMKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTU0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTE1NQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkxNTcKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJMTU4CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCTE2MAorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkxNjEKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCTE2MgorI2RlZmluZSBfX05SX21yZW1hcAkJMTYzCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQorI2RlZmluZSBfX05SX3ZtODYJCTE2NgorI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKKyNkZWZpbmUgX19OUl9wb2xsCQkxNjgKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkxNjkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCTE3MAorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJMTcxCisjZGVmaW5lIF9fTlJfcHJjdGwgICAgICAgICAgICAgIDE3MgorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkxNzMKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JMTc0CisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJMTc1CisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkxNzYKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJMTc3CisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCTE3OAorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJMTc5CisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJMTgwCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQJCTE4MQorI2RlZmluZSBfX05SX2Nob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCS8qIFN1UyBjb21wbGlhbnQgZ2V0cmxpbWl0ICovCisjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1CisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfbGNob3duMzIJCTE5OAorI2RlZmluZSBfX05SX2dldHVpZDMyCQkxOTkKKyNkZWZpbmUgX19OUl9nZXRnaWQzMgkJMjAwCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyCQkyMDEKKyNkZWZpbmUgX19OUl9nZXRlZ2lkMzIJCTIwMgorI2RlZmluZSBfX05SX3NldHJldWlkMzIJCTIwMworI2RlZmluZSBfX05SX3NldHJlZ2lkMzIJCTIwNAorI2RlZmluZSBfX05SX2dldGdyb3VwczMyCTIwNQorI2RlZmluZSBfX05SX3NldGdyb3VwczMyCTIwNgorI2RlZmluZSBfX05SX2ZjaG93bjMyCQkyMDcKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMgkyMDgKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMgkyMDkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMgkyMTAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMgkyMTEKKyNkZWZpbmUgX19OUl9jaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX21pbmNvcmUJCTIxOAorI2RlZmluZSBfX05SX21hZHZpc2UJCTIxOQorI2RlZmluZSBfX05SX21hZHZpc2UxCQkyMTkJLyogZGVsZXRlIHdoZW4gQyBsaWIgc3R1YiBpcyByZW1vdmVkICovCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMjIwCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMjIxCisvKiAyMjMgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfZ2V0dGlkCQkyMjQKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCTIyNQorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjYKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNworI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI4CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyOQorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjMwCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMzEKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIzMgorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMworI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzNAorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzNQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzYKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM3CisjZGVmaW5lIF9fTlJfdGtpbGwJCTIzOAorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzOQorI2RlZmluZSBfX05SX2Z1dGV4CQkyNDAKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkyNDEKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkyNDIKKyNkZWZpbmUgX19OUl9zZXRfdGhyZWFkX2FyZWEJMjQzCisjZGVmaW5lIF9fTlJfZ2V0X3RocmVhZF9hcmVhCTI0NAorI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNDUKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDYKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQ3CisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNDgKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0OQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjUwCisvKiAyNTEgaXMgYXZhaWxhYmxlIGZvciByZXVzZSAod2FzIGJyaWVmbHkgc3lzX3NldF96b25lX3JlY2xhaW0pICovCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMjUyCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUJMjUzCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCTI1NAorI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJMjU1CisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjU2CisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkyNTcKKyNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJMjU4CisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI1OQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzEpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrMikKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCShfX05SX3RpbWVyX2NyZWF0ZSszKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkoX19OUl90aW1lcl9jcmVhdGUrNCkKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSs1KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzYpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCShfX05SX3RpbWVyX2NyZWF0ZSs3KQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkoX19OUl90aW1lcl9jcmVhdGUrOCkKKyNkZWZpbmUgX19OUl9zdGF0ZnM2NAkJMjY4CisjZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkyNjkKKyNkZWZpbmUgX19OUl90Z2tpbGwJCTI3MAorI2RlZmluZSBfX05SX3V0aW1lcwkJMjcxCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0CTI3MgorI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI3MworI2RlZmluZSBfX05SX21iaW5kCQkyNzQKKyNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5CTI3NQorI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJMjc2CisjZGVmaW5lIF9fTlJfbXFfb3BlbiAJCTI3NworI2RlZmluZSBfX05SX21xX3VubGluawkJKF9fTlJfbXFfb3BlbisxKQorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkoX19OUl9tcV9vcGVuKzIpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCShfX05SX21xX29wZW4rMykKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCShfX05SX21xX29wZW4rNCkKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCShfX05SX21xX29wZW4rNSkKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyODMKKyNkZWZpbmUgX19OUl93YWl0aWQJCTI4NAorLyogI2RlZmluZSBfX05SX3N5c19zZXRhbHRyb290CTI4NSAqLworI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4NgorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4NworI2RlZmluZSBfX05SX2tleWN0bAkJMjg4CisjZGVmaW5lIF9fTlJfaW9wcmlvX3NldAkJMjg5CisjZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJMjkwCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0CTI5MQorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCTI5MgorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJMjkzCisjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkyOTQKKyNkZWZpbmUgX19OUl9vcGVuYXQJCTI5NQorI2RlZmluZSBfX05SX21rZGlyYXQJCTI5NgorI2RlZmluZSBfX05SX21rbm9kYXQJCTI5NworI2RlZmluZSBfX05SX2ZjaG93bmF0CQkyOTgKKyNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCTI5OQorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMzAwCisjZGVmaW5lIF9fTlJfdW5saW5rYXQJCTMwMQorI2RlZmluZSBfX05SX3JlbmFtZWF0CQkzMDIKKyNkZWZpbmUgX19OUl9saW5rYXQJCTMwMworI2RlZmluZSBfX05SX3N5bWxpbmthdAkJMzA0CisjZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJMzA1CisjZGVmaW5lIF9fTlJfZmNobW9kYXQJCTMwNgorI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMzA3CisjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwOAorI2RlZmluZSBfX05SX3Bwb2xsCQkzMDkKKyNkZWZpbmUgX19OUl91bnNoYXJlCQkzMTAKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzExCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMxMgorI2RlZmluZSBfX05SX3NwbGljZQkJMzEzCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTMxNAorI2RlZmluZSBfX05SX3RlZQkJMzE1CisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTMxNgorI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMxNworI2RlZmluZSBfX05SX2dldGNwdQkJMzE4CisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzE5CisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMjAKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzIxCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJMzIyCisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzIzCisjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkzMjQKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzI1CisjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMyNgorI2RlZmluZSBfX05SX3NpZ25hbGZkNAkJMzI3CisjZGVmaW5lIF9fTlJfZXZlbnRmZDIJCTMyOAorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJMzI5CisjZGVmaW5lIF9fTlJfZHVwMwkJMzMwCisjZGVmaW5lIF9fTlJfcGlwZTIJCTMzMQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzMyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAorCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICoKKyAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCisgKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKKyAqLworI2lmbmRlZiBjb25kX3N5c2NhbGwKKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9YODZfVU5JU1REXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0YjJjMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC0wLDAgKzEsNjkzIEBACisjaWZuZGVmIF9BU01fWDg2X1VOSVNURF82NF9ICisjZGVmaW5lIF9BU01fWDg2X1VOSVNURF82NF9ICisKKyNpZm5kZWYgX19TWVNDQUxMCisjZGVmaW5lIF9fU1lTQ0FMTChhLCBiKQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCisgKgorICogTm90ZTogaG9sZXMgYXJlIG5vdCBhbGxvd2VkLgorICovCisKKy8qIGF0IGxlYXN0IDggc3lzY2FsbCBwZXIgY2FjaGVsaW5lICovCisjZGVmaW5lIF9fTlJfcmVhZAkJCQkwCitfX1NZU0NBTEwoX19OUl9yZWFkLCBzeXNfcmVhZCkKKyNkZWZpbmUgX19OUl93cml0ZQkJCQkxCitfX1NZU0NBTEwoX19OUl93cml0ZSwgc3lzX3dyaXRlKQorI2RlZmluZSBfX05SX29wZW4JCQkJMgorX19TWVNDQUxMKF9fTlJfb3Blbiwgc3lzX29wZW4pCisjZGVmaW5lIF9fTlJfY2xvc2UJCQkJMworX19TWVNDQUxMKF9fTlJfY2xvc2UsIHN5c19jbG9zZSkKKyNkZWZpbmUgX19OUl9zdGF0CQkJCTQKK19fU1lTQ0FMTChfX05SX3N0YXQsIHN5c19uZXdzdGF0KQorI2RlZmluZSBfX05SX2ZzdGF0CQkJCTUKK19fU1lTQ0FMTChfX05SX2ZzdGF0LCBzeXNfbmV3ZnN0YXQpCisjZGVmaW5lIF9fTlJfbHN0YXQJCQkJNgorX19TWVNDQUxMKF9fTlJfbHN0YXQsIHN5c19uZXdsc3RhdCkKKyNkZWZpbmUgX19OUl9wb2xsCQkJCTcKK19fU1lTQ0FMTChfX05SX3BvbGwsIHN5c19wb2xsKQorCisjZGVmaW5lIF9fTlJfbHNlZWsJCQkJOAorX19TWVNDQUxMKF9fTlJfbHNlZWssIHN5c19sc2VlaykKKyNkZWZpbmUgX19OUl9tbWFwCQkJCTkKK19fU1lTQ0FMTChfX05SX21tYXAsIHN5c19tbWFwKQorI2RlZmluZSBfX05SX21wcm90ZWN0CQkJCTEwCitfX1NZU0NBTEwoX19OUl9tcHJvdGVjdCwgc3lzX21wcm90ZWN0KQorI2RlZmluZSBfX05SX211bm1hcAkJCQkxMQorX19TWVNDQUxMKF9fTlJfbXVubWFwLCBzeXNfbXVubWFwKQorI2RlZmluZSBfX05SX2JyawkJCQkxMgorX19TWVNDQUxMKF9fTlJfYnJrLCBzeXNfYnJrKQorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkJCTEzCitfX1NZU0NBTEwoX19OUl9ydF9zaWdhY3Rpb24sIHN5c19ydF9zaWdhY3Rpb24pCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJCQkxNAorX19TWVNDQUxMKF9fTlJfcnRfc2lncHJvY21hc2ssIHN5c19ydF9zaWdwcm9jbWFzaykKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JCQkxNQorX19TWVNDQUxMKF9fTlJfcnRfc2lncmV0dXJuLCBzdHViX3J0X3NpZ3JldHVybikKKworI2RlZmluZSBfX05SX2lvY3RsCQkJCTE2CitfX1NZU0NBTEwoX19OUl9pb2N0bCwgc3lzX2lvY3RsKQorI2RlZmluZSBfX05SX3ByZWFkNjQJCQkJMTcKK19fU1lTQ0FMTChfX05SX3ByZWFkNjQsIHN5c19wcmVhZDY0KQorI2RlZmluZSBfX05SX3B3cml0ZTY0CQkJCTE4CitfX1NZU0NBTEwoX19OUl9wd3JpdGU2NCwgc3lzX3B3cml0ZTY0KQorI2RlZmluZSBfX05SX3JlYWR2CQkJCTE5CitfX1NZU0NBTEwoX19OUl9yZWFkdiwgc3lzX3JlYWR2KQorI2RlZmluZSBfX05SX3dyaXRldgkJCQkyMAorX19TWVNDQUxMKF9fTlJfd3JpdGV2LCBzeXNfd3JpdGV2KQorI2RlZmluZSBfX05SX2FjY2VzcwkJCQkyMQorX19TWVNDQUxMKF9fTlJfYWNjZXNzLCBzeXNfYWNjZXNzKQorI2RlZmluZSBfX05SX3BpcGUJCQkJMjIKK19fU1lTQ0FMTChfX05SX3BpcGUsIHN5c19waXBlKQorI2RlZmluZSBfX05SX3NlbGVjdAkJCQkyMworX19TWVNDQUxMKF9fTlJfc2VsZWN0LCBzeXNfc2VsZWN0KQorCisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQJCQkyNAorX19TWVNDQUxMKF9fTlJfc2NoZWRfeWllbGQsIHN5c19zY2hlZF95aWVsZCkKKyNkZWZpbmUgX19OUl9tcmVtYXAJCQkJMjUKK19fU1lTQ0FMTChfX05SX21yZW1hcCwgc3lzX21yZW1hcCkKKyNkZWZpbmUgX19OUl9tc3luYwkJCQkyNgorX19TWVNDQUxMKF9fTlJfbXN5bmMsIHN5c19tc3luYykKKyNkZWZpbmUgX19OUl9taW5jb3JlCQkJCTI3CitfX1NZU0NBTEwoX19OUl9taW5jb3JlLCBzeXNfbWluY29yZSkKKyNkZWZpbmUgX19OUl9tYWR2aXNlCQkJCTI4CitfX1NZU0NBTEwoX19OUl9tYWR2aXNlLCBzeXNfbWFkdmlzZSkKKyNkZWZpbmUgX19OUl9zaG1nZXQJCQkJMjkKK19fU1lTQ0FMTChfX05SX3NobWdldCwgc3lzX3NobWdldCkKKyNkZWZpbmUgX19OUl9zaG1hdAkJCQkzMAorX19TWVNDQUxMKF9fTlJfc2htYXQsIHN5c19zaG1hdCkKKyNkZWZpbmUgX19OUl9zaG1jdGwJCQkJMzEKK19fU1lTQ0FMTChfX05SX3NobWN0bCwgc3lzX3NobWN0bCkKKworI2RlZmluZSBfX05SX2R1cAkJCQkzMgorX19TWVNDQUxMKF9fTlJfZHVwLCBzeXNfZHVwKQorI2RlZmluZSBfX05SX2R1cDIJCQkJMzMKK19fU1lTQ0FMTChfX05SX2R1cDIsIHN5c19kdXAyKQorI2RlZmluZSBfX05SX3BhdXNlCQkJCTM0CitfX1NZU0NBTEwoX19OUl9wYXVzZSwgc3lzX3BhdXNlKQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJCQkzNQorX19TWVNDQUxMKF9fTlJfbmFub3NsZWVwLCBzeXNfbmFub3NsZWVwKQorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJCQkzNgorX19TWVNDQUxMKF9fTlJfZ2V0aXRpbWVyLCBzeXNfZ2V0aXRpbWVyKQorI2RlZmluZSBfX05SX2FsYXJtCQkJCTM3CitfX1NZU0NBTEwoX19OUl9hbGFybSwgc3lzX2FsYXJtKQorI2RlZmluZSBfX05SX3NldGl0aW1lcgkJCQkzOAorX19TWVNDQUxMKF9fTlJfc2V0aXRpbWVyLCBzeXNfc2V0aXRpbWVyKQorI2RlZmluZSBfX05SX2dldHBpZAkJCQkzOQorX19TWVNDQUxMKF9fTlJfZ2V0cGlkLCBzeXNfZ2V0cGlkKQorCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCQkJNDAKK19fU1lTQ0FMTChfX05SX3NlbmRmaWxlLCBzeXNfc2VuZGZpbGU2NCkKKyNkZWZpbmUgX19OUl9zb2NrZXQJCQkJNDEKK19fU1lTQ0FMTChfX05SX3NvY2tldCwgc3lzX3NvY2tldCkKKyNkZWZpbmUgX19OUl9jb25uZWN0CQkJCTQyCitfX1NZU0NBTEwoX19OUl9jb25uZWN0LCBzeXNfY29ubmVjdCkKKyNkZWZpbmUgX19OUl9hY2NlcHQJCQkJNDMKK19fU1lTQ0FMTChfX05SX2FjY2VwdCwgc3lzX2FjY2VwdCkKKyNkZWZpbmUgX19OUl9zZW5kdG8JCQkJNDQKK19fU1lTQ0FMTChfX05SX3NlbmR0bywgc3lzX3NlbmR0bykKKyNkZWZpbmUgX19OUl9yZWN2ZnJvbQkJCQk0NQorX19TWVNDQUxMKF9fTlJfcmVjdmZyb20sIHN5c19yZWN2ZnJvbSkKKyNkZWZpbmUgX19OUl9zZW5kbXNnCQkJCTQ2CitfX1NZU0NBTEwoX19OUl9zZW5kbXNnLCBzeXNfc2VuZG1zZykKKyNkZWZpbmUgX19OUl9yZWN2bXNnCQkJCTQ3CitfX1NZU0NBTEwoX19OUl9yZWN2bXNnLCBzeXNfcmVjdm1zZykKKworI2RlZmluZSBfX05SX3NodXRkb3duCQkJCTQ4CitfX1NZU0NBTEwoX19OUl9zaHV0ZG93biwgc3lzX3NodXRkb3duKQorI2RlZmluZSBfX05SX2JpbmQJCQkJNDkKK19fU1lTQ0FMTChfX05SX2JpbmQsIHN5c19iaW5kKQorI2RlZmluZSBfX05SX2xpc3RlbgkJCQk1MAorX19TWVNDQUxMKF9fTlJfbGlzdGVuLCBzeXNfbGlzdGVuKQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lCQkJNTEKK19fU1lTQ0FMTChfX05SX2dldHNvY2tuYW1lLCBzeXNfZ2V0c29ja25hbWUpCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUJCQk1MgorX19TWVNDQUxMKF9fTlJfZ2V0cGVlcm5hbWUsIHN5c19nZXRwZWVybmFtZSkKKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyCQkJCTUzCitfX1NZU0NBTEwoX19OUl9zb2NrZXRwYWlyLCBzeXNfc29ja2V0cGFpcikKKyNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0CQkJCTU0CitfX1NZU0NBTEwoX19OUl9zZXRzb2Nrb3B0LCBzeXNfc2V0c29ja29wdCkKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0CQkJCTU1CitfX1NZU0NBTEwoX19OUl9nZXRzb2Nrb3B0LCBzeXNfZ2V0c29ja29wdCkKKworI2RlZmluZSBfX05SX2Nsb25lCQkJCTU2CitfX1NZU0NBTEwoX19OUl9jbG9uZSwgc3R1Yl9jbG9uZSkKKyNkZWZpbmUgX19OUl9mb3JrCQkJCTU3CitfX1NZU0NBTEwoX19OUl9mb3JrLCBzdHViX2ZvcmspCisjZGVmaW5lIF9fTlJfdmZvcmsJCQkJNTgKK19fU1lTQ0FMTChfX05SX3Zmb3JrLCBzdHViX3Zmb3JrKQorI2RlZmluZSBfX05SX2V4ZWN2ZQkJCQk1OQorX19TWVNDQUxMKF9fTlJfZXhlY3ZlLCBzdHViX2V4ZWN2ZSkKKyNkZWZpbmUgX19OUl9leGl0CQkJCTYwCitfX1NZU0NBTEwoX19OUl9leGl0LCBzeXNfZXhpdCkKKyNkZWZpbmUgX19OUl93YWl0NAkJCQk2MQorX19TWVNDQUxMKF9fTlJfd2FpdDQsIHN5c193YWl0NCkKKyNkZWZpbmUgX19OUl9raWxsCQkJCTYyCitfX1NZU0NBTEwoX19OUl9raWxsLCBzeXNfa2lsbCkKKyNkZWZpbmUgX19OUl91bmFtZQkJCQk2MworX19TWVNDQUxMKF9fTlJfdW5hbWUsIHN5c191bmFtZSkKKworI2RlZmluZSBfX05SX3NlbWdldAkJCQk2NAorX19TWVNDQUxMKF9fTlJfc2VtZ2V0LCBzeXNfc2VtZ2V0KQorI2RlZmluZSBfX05SX3NlbW9wCQkJCTY1CitfX1NZU0NBTEwoX19OUl9zZW1vcCwgc3lzX3NlbW9wKQorI2RlZmluZSBfX05SX3NlbWN0bAkJCQk2NgorX19TWVNDQUxMKF9fTlJfc2VtY3RsLCBzeXNfc2VtY3RsKQorI2RlZmluZSBfX05SX3NobWR0CQkJCTY3CitfX1NZU0NBTEwoX19OUl9zaG1kdCwgc3lzX3NobWR0KQorI2RlZmluZSBfX05SX21zZ2dldAkJCQk2OAorX19TWVNDQUxMKF9fTlJfbXNnZ2V0LCBzeXNfbXNnZ2V0KQorI2RlZmluZSBfX05SX21zZ3NuZAkJCQk2OQorX19TWVNDQUxMKF9fTlJfbXNnc25kLCBzeXNfbXNnc25kKQorI2RlZmluZSBfX05SX21zZ3JjdgkJCQk3MAorX19TWVNDQUxMKF9fTlJfbXNncmN2LCBzeXNfbXNncmN2KQorI2RlZmluZSBfX05SX21zZ2N0bAkJCQk3MQorX19TWVNDQUxMKF9fTlJfbXNnY3RsLCBzeXNfbXNnY3RsKQorCisjZGVmaW5lIF9fTlJfZmNudGwJCQkJNzIKK19fU1lTQ0FMTChfX05SX2ZjbnRsLCBzeXNfZmNudGwpCisjZGVmaW5lIF9fTlJfZmxvY2sJCQkJNzMKK19fU1lTQ0FMTChfX05SX2Zsb2NrLCBzeXNfZmxvY2spCisjZGVmaW5lIF9fTlJfZnN5bmMJCQkJNzQKK19fU1lTQ0FMTChfX05SX2ZzeW5jLCBzeXNfZnN5bmMpCisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkJCTc1CitfX1NZU0NBTEwoX19OUl9mZGF0YXN5bmMsIHN5c19mZGF0YXN5bmMpCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCQkJNzYKK19fU1lTQ0FMTChfX05SX3RydW5jYXRlLCBzeXNfdHJ1bmNhdGUpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkJCTc3CitfX1NZU0NBTEwoX19OUl9mdHJ1bmNhdGUsIHN5c19mdHJ1bmNhdGUpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHMJCQkJNzgKK19fU1lTQ0FMTChfX05SX2dldGRlbnRzLCBzeXNfZ2V0ZGVudHMpCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkJCTc5CitfX1NZU0NBTEwoX19OUl9nZXRjd2QsIHN5c19nZXRjd2QpCisKKyNkZWZpbmUgX19OUl9jaGRpcgkJCQk4MAorX19TWVNDQUxMKF9fTlJfY2hkaXIsIHN5c19jaGRpcikKKyNkZWZpbmUgX19OUl9mY2hkaXIJCQkJODEKK19fU1lTQ0FMTChfX05SX2ZjaGRpciwgc3lzX2ZjaGRpcikKKyNkZWZpbmUgX19OUl9yZW5hbWUJCQkJODIKK19fU1lTQ0FMTChfX05SX3JlbmFtZSwgc3lzX3JlbmFtZSkKKyNkZWZpbmUgX19OUl9ta2RpcgkJCQk4MworX19TWVNDQUxMKF9fTlJfbWtkaXIsIHN5c19ta2RpcikKKyNkZWZpbmUgX19OUl9ybWRpcgkJCQk4NAorX19TWVNDQUxMKF9fTlJfcm1kaXIsIHN5c19ybWRpcikKKyNkZWZpbmUgX19OUl9jcmVhdAkJCQk4NQorX19TWVNDQUxMKF9fTlJfY3JlYXQsIHN5c19jcmVhdCkKKyNkZWZpbmUgX19OUl9saW5rCQkJCTg2CitfX1NZU0NBTEwoX19OUl9saW5rLCBzeXNfbGluaykKKyNkZWZpbmUgX19OUl91bmxpbmsJCQkJODcKK19fU1lTQ0FMTChfX05SX3VubGluaywgc3lzX3VubGluaykKKworI2RlZmluZSBfX05SX3N5bWxpbmsJCQkJODgKK19fU1lTQ0FMTChfX05SX3N5bWxpbmssIHN5c19zeW1saW5rKQorI2RlZmluZSBfX05SX3JlYWRsaW5rCQkJCTg5CitfX1NZU0NBTEwoX19OUl9yZWFkbGluaywgc3lzX3JlYWRsaW5rKQorI2RlZmluZSBfX05SX2NobW9kCQkJCTkwCitfX1NZU0NBTEwoX19OUl9jaG1vZCwgc3lzX2NobW9kKQorI2RlZmluZSBfX05SX2ZjaG1vZAkJCQk5MQorX19TWVNDQUxMKF9fTlJfZmNobW9kLCBzeXNfZmNobW9kKQorI2RlZmluZSBfX05SX2Nob3duCQkJCTkyCitfX1NZU0NBTEwoX19OUl9jaG93biwgc3lzX2Nob3duKQorI2RlZmluZSBfX05SX2ZjaG93bgkJCQk5MworX19TWVNDQUxMKF9fTlJfZmNob3duLCBzeXNfZmNob3duKQorI2RlZmluZSBfX05SX2xjaG93bgkJCQk5NAorX19TWVNDQUxMKF9fTlJfbGNob3duLCBzeXNfbGNob3duKQorI2RlZmluZSBfX05SX3VtYXNrCQkJCTk1CitfX1NZU0NBTEwoX19OUl91bWFzaywgc3lzX3VtYXNrKQorCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CQkJOTYKK19fU1lTQ0FMTChfX05SX2dldHRpbWVvZmRheSwgc3lzX2dldHRpbWVvZmRheSkKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCQkJOTcKK19fU1lTQ0FMTChfX05SX2dldHJsaW1pdCwgc3lzX2dldHJsaW1pdCkKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCQkJOTgKK19fU1lTQ0FMTChfX05SX2dldHJ1c2FnZSwgc3lzX2dldHJ1c2FnZSkKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkJCTk5CitfX1NZU0NBTEwoX19OUl9zeXNpbmZvLCBzeXNfc3lzaW5mbykKKyNkZWZpbmUgX19OUl90aW1lcwkJCQkxMDAKK19fU1lTQ0FMTChfX05SX3RpbWVzLCBzeXNfdGltZXMpCisjZGVmaW5lIF9fTlJfcHRyYWNlCQkJCTEwMQorX19TWVNDQUxMKF9fTlJfcHRyYWNlLCBzeXNfcHRyYWNlKQorI2RlZmluZSBfX05SX2dldHVpZAkJCQkxMDIKK19fU1lTQ0FMTChfX05SX2dldHVpZCwgc3lzX2dldHVpZCkKKyNkZWZpbmUgX19OUl9zeXNsb2cJCQkJMTAzCitfX1NZU0NBTEwoX19OUl9zeXNsb2csIHN5c19zeXNsb2cpCisKKy8qIGF0IHRoZSB2ZXJ5IGVuZCB0aGUgc3R1ZmYgdGhhdCBuZXZlciBydW5zIGR1cmluZyB0aGUgYmVuY2htYXJrcyAqLworI2RlZmluZSBfX05SX2dldGdpZAkJCQkxMDQKK19fU1lTQ0FMTChfX05SX2dldGdpZCwgc3lzX2dldGdpZCkKKyNkZWZpbmUgX19OUl9zZXR1aWQJCQkJMTA1CitfX1NZU0NBTEwoX19OUl9zZXR1aWQsIHN5c19zZXR1aWQpCisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkJCTEwNgorX19TWVNDQUxMKF9fTlJfc2V0Z2lkLCBzeXNfc2V0Z2lkKQorI2RlZmluZSBfX05SX2dldGV1aWQJCQkJMTA3CitfX1NZU0NBTEwoX19OUl9nZXRldWlkLCBzeXNfZ2V0ZXVpZCkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkJCTEwOAorX19TWVNDQUxMKF9fTlJfZ2V0ZWdpZCwgc3lzX2dldGVnaWQpCisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJCQkxMDkKK19fU1lTQ0FMTChfX05SX3NldHBnaWQsIHN5c19zZXRwZ2lkKQorI2RlZmluZSBfX05SX2dldHBwaWQJCQkJMTEwCitfX1NZU0NBTEwoX19OUl9nZXRwcGlkLCBzeXNfZ2V0cHBpZCkKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkJCTExMQorX19TWVNDQUxMKF9fTlJfZ2V0cGdycCwgc3lzX2dldHBncnApCisKKyNkZWZpbmUgX19OUl9zZXRzaWQJCQkJMTEyCitfX1NZU0NBTEwoX19OUl9zZXRzaWQsIHN5c19zZXRzaWQpCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCQkJMTEzCitfX1NZU0NBTEwoX19OUl9zZXRyZXVpZCwgc3lzX3NldHJldWlkKQorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkJCTExNAorX19TWVNDQUxMKF9fTlJfc2V0cmVnaWQsIHN5c19zZXRyZWdpZCkKKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCQkJMTE1CitfX1NZU0NBTEwoX19OUl9nZXRncm91cHMsIHN5c19nZXRncm91cHMpCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkJCTExNgorX19TWVNDQUxMKF9fTlJfc2V0Z3JvdXBzLCBzeXNfc2V0Z3JvdXBzKQorI2RlZmluZSBfX05SX3NldHJlc3VpZAkJCQkxMTcKK19fU1lTQ0FMTChfX05SX3NldHJlc3VpZCwgc3lzX3NldHJlc3VpZCkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCQkJMTE4CitfX1NZU0NBTEwoX19OUl9nZXRyZXN1aWQsIHN5c19nZXRyZXN1aWQpCisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkCQkJCTExOQorX19TWVNDQUxMKF9fTlJfc2V0cmVzZ2lkLCBzeXNfc2V0cmVzZ2lkKQorCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkJCTEyMAorX19TWVNDQUxMKF9fTlJfZ2V0cmVzZ2lkLCBzeXNfZ2V0cmVzZ2lkKQorI2RlZmluZSBfX05SX2dldHBnaWQJCQkJMTIxCitfX1NZU0NBTEwoX19OUl9nZXRwZ2lkLCBzeXNfZ2V0cGdpZCkKKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJCQkxMjIKK19fU1lTQ0FMTChfX05SX3NldGZzdWlkLCBzeXNfc2V0ZnN1aWQpCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCQkJMTIzCitfX1NZU0NBTEwoX19OUl9zZXRmc2dpZCwgc3lzX3NldGZzZ2lkKQorI2RlZmluZSBfX05SX2dldHNpZAkJCQkxMjQKK19fU1lTQ0FMTChfX05SX2dldHNpZCwgc3lzX2dldHNpZCkKKyNkZWZpbmUgX19OUl9jYXBnZXQJCQkJMTI1CitfX1NZU0NBTEwoX19OUl9jYXBnZXQsIHN5c19jYXBnZXQpCisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkJCTEyNgorX19TWVNDQUxMKF9fTlJfY2Fwc2V0LCBzeXNfY2Fwc2V0KQorCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkJCTEyNworX19TWVNDQUxMKF9fTlJfcnRfc2lncGVuZGluZywgc3lzX3J0X3NpZ3BlbmRpbmcpCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CQkJMTI4CitfX1NZU0NBTEwoX19OUl9ydF9zaWd0aW1lZHdhaXQsIHN5c19ydF9zaWd0aW1lZHdhaXQpCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCQkJMTI5CitfX1NZU0NBTEwoX19OUl9ydF9zaWdxdWV1ZWluZm8sIHN5c19ydF9zaWdxdWV1ZWluZm8pCisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkJCTEzMAorX19TWVNDQUxMKF9fTlJfcnRfc2lnc3VzcGVuZCwgc3lzX3J0X3NpZ3N1c3BlbmQpCisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJCQkxMzEKK19fU1lTQ0FMTChfX05SX3NpZ2FsdHN0YWNrLCBzdHViX3NpZ2FsdHN0YWNrKQorI2RlZmluZSBfX05SX3V0aW1lCQkJCTEzMgorX19TWVNDQUxMKF9fTlJfdXRpbWUsIHN5c191dGltZSkKKyNkZWZpbmUgX19OUl9ta25vZAkJCQkxMzMKK19fU1lTQ0FMTChfX05SX21rbm9kLCBzeXNfbWtub2QpCisKKy8qIE9ubHkgbmVlZGVkIGZvciBhLm91dCAqLworI2RlZmluZSBfX05SX3VzZWxpYgkJCQkxMzQKK19fU1lTQ0FMTChfX05SX3VzZWxpYiwgc3lzX25pX3N5c2NhbGwpCisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJCQkxMzUKK19fU1lTQ0FMTChfX05SX3BlcnNvbmFsaXR5LCBzeXNfcGVyc29uYWxpdHkpCisKKyNkZWZpbmUgX19OUl91c3RhdAkJCQkxMzYKK19fU1lTQ0FMTChfX05SX3VzdGF0LCBzeXNfdXN0YXQpCisjZGVmaW5lIF9fTlJfc3RhdGZzCQkJCTEzNworX19TWVNDQUxMKF9fTlJfc3RhdGZzLCBzeXNfc3RhdGZzKQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCQkJMTM4CitfX1NZU0NBTEwoX19OUl9mc3RhdGZzLCBzeXNfZnN0YXRmcykKKyNkZWZpbmUgX19OUl9zeXNmcwkJCQkxMzkKK19fU1lTQ0FMTChfX05SX3N5c2ZzLCBzeXNfc3lzZnMpCisKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkJCTE0MAorX19TWVNDQUxMKF9fTlJfZ2V0cHJpb3JpdHksIHN5c19nZXRwcmlvcml0eSkKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkJCTE0MQorX19TWVNDQUxMKF9fTlJfc2V0cHJpb3JpdHksIHN5c19zZXRwcmlvcml0eSkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJCTE0MgorX19TWVNDQUxMKF9fTlJfc2NoZWRfc2V0cGFyYW0sIHN5c19zY2hlZF9zZXRwYXJhbSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJCTE0MworX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0cGFyYW0sIHN5c19zY2hlZF9nZXRwYXJhbSkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIJCQkxNDQKK19fU1lTQ0FMTChfX05SX3NjaGVkX3NldHNjaGVkdWxlciwgc3lzX3NjaGVkX3NldHNjaGVkdWxlcikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCQkxNDUKK19fU1lTQ0FMTChfX05SX3NjaGVkX2dldHNjaGVkdWxlciwgc3lzX3NjaGVkX2dldHNjaGVkdWxlcikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CQkxNDYKK19fU1lTQ0FMTChfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JCTE0NworX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4pCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCQkxNDgKK19fU1lTQ0FMTChfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbCkKKworI2RlZmluZSBfX05SX21sb2NrCQkJCTE0OQorX19TWVNDQUxMKF9fTlJfbWxvY2ssIHN5c19tbG9jaykKKyNkZWZpbmUgX19OUl9tdW5sb2NrCQkJCTE1MAorX19TWVNDQUxMKF9fTlJfbXVubG9jaywgc3lzX211bmxvY2spCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCQkJMTUxCitfX1NZU0NBTEwoX19OUl9tbG9ja2FsbCwgc3lzX21sb2NrYWxsKQorI2RlZmluZSBfX05SX211bmxvY2thbGwJCQkJMTUyCitfX1NZU0NBTEwoX19OUl9tdW5sb2NrYWxsLCBzeXNfbXVubG9ja2FsbCkKKworI2RlZmluZSBfX05SX3ZoYW5ndXAJCQkJMTUzCitfX1NZU0NBTEwoX19OUl92aGFuZ3VwLCBzeXNfdmhhbmd1cCkKKworI2RlZmluZSBfX05SX21vZGlmeV9sZHQJCQkJMTU0CitfX1NZU0NBTEwoX19OUl9tb2RpZnlfbGR0LCBzeXNfbW9kaWZ5X2xkdCkKKworI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCQkJMTU1CitfX1NZU0NBTEwoX19OUl9waXZvdF9yb290LCBzeXNfcGl2b3Rfcm9vdCkKKworI2RlZmluZSBfX05SX19zeXNjdGwJCQkJMTU2CitfX1NZU0NBTEwoX19OUl9fc3lzY3RsLCBzeXNfc3lzY3RsKQorCisjZGVmaW5lIF9fTlJfcHJjdGwJCQkJMTU3CitfX1NZU0NBTEwoX19OUl9wcmN0bCwgc3lzX3ByY3RsKQorI2RlZmluZSBfX05SX2FyY2hfcHJjdGwJCQkJMTU4CitfX1NZU0NBTEwoX19OUl9hcmNoX3ByY3RsLCBzeXNfYXJjaF9wcmN0bCkKKworI2RlZmluZSBfX05SX2FkanRpbWV4CQkJCTE1OQorX19TWVNDQUxMKF9fTlJfYWRqdGltZXgsIHN5c19hZGp0aW1leCkKKworI2RlZmluZSBfX05SX3NldHJsaW1pdAkJCQkxNjAKK19fU1lTQ0FMTChfX05SX3NldHJsaW1pdCwgc3lzX3NldHJsaW1pdCkKKworI2RlZmluZSBfX05SX2Nocm9vdAkJCQkxNjEKK19fU1lTQ0FMTChfX05SX2Nocm9vdCwgc3lzX2Nocm9vdCkKKworI2RlZmluZSBfX05SX3N5bmMJCQkJMTYyCitfX1NZU0NBTEwoX19OUl9zeW5jLCBzeXNfc3luYykKKworI2RlZmluZSBfX05SX2FjY3QJCQkJMTYzCitfX1NZU0NBTEwoX19OUl9hY2N0LCBzeXNfYWNjdCkKKworI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkJCTE2NAorX19TWVNDQUxMKF9fTlJfc2V0dGltZW9mZGF5LCBzeXNfc2V0dGltZW9mZGF5KQorCisjZGVmaW5lIF9fTlJfbW91bnQJCQkJMTY1CitfX1NZU0NBTEwoX19OUl9tb3VudCwgc3lzX21vdW50KQorI2RlZmluZSBfX05SX3Vtb3VudDIJCQkJMTY2CitfX1NZU0NBTEwoX19OUl91bW91bnQyLCBzeXNfdW1vdW50KQorCisjZGVmaW5lIF9fTlJfc3dhcG9uCQkJCTE2NworX19TWVNDQUxMKF9fTlJfc3dhcG9uLCBzeXNfc3dhcG9uKQorI2RlZmluZSBfX05SX3N3YXBvZmYJCQkJMTY4CitfX1NZU0NBTEwoX19OUl9zd2Fwb2ZmLCBzeXNfc3dhcG9mZikKKworI2RlZmluZSBfX05SX3JlYm9vdAkJCQkxNjkKK19fU1lTQ0FMTChfX05SX3JlYm9vdCwgc3lzX3JlYm9vdCkKKworI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCQkJMTcwCitfX1NZU0NBTEwoX19OUl9zZXRob3N0bmFtZSwgc3lzX3NldGhvc3RuYW1lKQorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJCQkxNzEKK19fU1lTQ0FMTChfX05SX3NldGRvbWFpbm5hbWUsIHN5c19zZXRkb21haW5uYW1lKQorCisjZGVmaW5lIF9fTlJfaW9wbAkJCQkxNzIKK19fU1lTQ0FMTChfX05SX2lvcGwsIHN0dWJfaW9wbCkKKyNkZWZpbmUgX19OUl9pb3Blcm0JCQkJMTczCitfX1NZU0NBTEwoX19OUl9pb3Blcm0sIHN5c19pb3Blcm0pCisKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCQkJMTc0CitfX1NZU0NBTEwoX19OUl9jcmVhdGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCkKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkJCTE3NQorX19TWVNDQUxMKF9fTlJfaW5pdF9tb2R1bGUsIHN5c19pbml0X21vZHVsZSkKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCQkJMTc2CitfX1NZU0NBTEwoX19OUl9kZWxldGVfbW9kdWxlLCBzeXNfZGVsZXRlX21vZHVsZSkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJCQkxNzcKK19fU1lTQ0FMTChfX05SX2dldF9rZXJuZWxfc3ltcywgc3lzX25pX3N5c2NhbGwpCisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCQkJMTc4CitfX1NZU0NBTEwoX19OUl9xdWVyeV9tb2R1bGUsIHN5c19uaV9zeXNjYWxsKQorCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCQkJMTc5CitfX1NZU0NBTEwoX19OUl9xdW90YWN0bCwgc3lzX3F1b3RhY3RsKQorCisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJCQkxODAKK19fU1lTQ0FMTChfX05SX25mc3NlcnZjdGwsIHN5c19uZnNzZXJ2Y3RsKQorCisvKiByZXNlcnZlZCBmb3IgTGlTL1NUUkVBTVMgKi8KKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkJCTE4MQorX19TWVNDQUxMKF9fTlJfZ2V0cG1zZywgc3lzX25pX3N5c2NhbGwpCisjZGVmaW5lIF9fTlJfcHV0cG1zZwkJCQkxODIKK19fU1lTQ0FMTChfX05SX3B1dHBtc2csIHN5c19uaV9zeXNjYWxsKQorCisvKiByZXNlcnZlZCBmb3IgQUZTICovCisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwJCQkxODMKK19fU1lTQ0FMTChfX05SX2Fmc19zeXNjYWxsLCBzeXNfbmlfc3lzY2FsbCkKKworLyogcmVzZXJ2ZWQgZm9yIHR1eCAqLworI2RlZmluZSBfX05SX3R1eGNhbGwJCQkJMTg0CitfX1NZU0NBTEwoX19OUl90dXhjYWxsLCBzeXNfbmlfc3lzY2FsbCkKKworI2RlZmluZSBfX05SX3NlY3VyaXR5CQkJCTE4NQorX19TWVNDQUxMKF9fTlJfc2VjdXJpdHksIHN5c19uaV9zeXNjYWxsKQorCisjZGVmaW5lIF9fTlJfZ2V0dGlkCQkJCTE4NgorX19TWVNDQUxMKF9fTlJfZ2V0dGlkLCBzeXNfZ2V0dGlkKQorCisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkCQkJCTE4NworX19TWVNDQUxMKF9fTlJfcmVhZGFoZWFkLCBzeXNfcmVhZGFoZWFkKQorI2RlZmluZSBfX05SX3NldHhhdHRyCQkJCTE4OAorX19TWVNDQUxMKF9fTlJfc2V0eGF0dHIsIHN5c19zZXR4YXR0cikKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCQkJMTg5CitfX1NZU0NBTEwoX19OUl9sc2V0eGF0dHIsIHN5c19sc2V0eGF0dHIpCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkJCTE5MAorX19TWVNDQUxMKF9fTlJfZnNldHhhdHRyLCBzeXNfZnNldHhhdHRyKQorI2RlZmluZSBfX05SX2dldHhhdHRyCQkJCTE5MQorX19TWVNDQUxMKF9fTlJfZ2V0eGF0dHIsIHN5c19nZXR4YXR0cikKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCQkJMTkyCitfX1NZU0NBTEwoX19OUl9sZ2V0eGF0dHIsIHN5c19sZ2V0eGF0dHIpCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkJCTE5MworX19TWVNDQUxMKF9fTlJfZmdldHhhdHRyLCBzeXNfZmdldHhhdHRyKQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJCQkxOTQKK19fU1lTQ0FMTChfX05SX2xpc3R4YXR0ciwgc3lzX2xpc3R4YXR0cikKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkJCTE5NQorX19TWVNDQUxMKF9fTlJfbGxpc3R4YXR0ciwgc3lzX2xsaXN0eGF0dHIpCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJCQkxOTYKK19fU1lTQ0FMTChfX05SX2ZsaXN0eGF0dHIsIHN5c19mbGlzdHhhdHRyKQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCQkJMTk3CitfX1NZU0NBTEwoX19OUl9yZW1vdmV4YXR0ciwgc3lzX3JlbW92ZXhhdHRyKQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkJCTE5OAorX19TWVNDQUxMKF9fTlJfbHJlbW92ZXhhdHRyLCBzeXNfbHJlbW92ZXhhdHRyKQorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkJCTE5OQorX19TWVNDQUxMKF9fTlJfZnJlbW92ZXhhdHRyLCBzeXNfZnJlbW92ZXhhdHRyKQorI2RlZmluZSBfX05SX3RraWxsCQkJCTIwMAorX19TWVNDQUxMKF9fTlJfdGtpbGwsIHN5c190a2lsbCkKKyNkZWZpbmUgX19OUl90aW1lCQkJCTIwMQorX19TWVNDQUxMKF9fTlJfdGltZSwgc3lzX3RpbWUpCisjZGVmaW5lIF9fTlJfZnV0ZXgJCQkJMjAyCitfX1NZU0NBTEwoX19OUl9mdXRleCwgc3lzX2Z1dGV4KQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CQkJMjAzCitfX1NZU0NBTEwoX19OUl9zY2hlZF9zZXRhZmZpbml0eSwgc3lzX3NjaGVkX3NldGFmZmluaXR5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CQkJMjA0CitfX1NZU0NBTEwoX19OUl9zY2hlZF9nZXRhZmZpbml0eSwgc3lzX3NjaGVkX2dldGFmZmluaXR5KQorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkJCTIwNQorX19TWVNDQUxMKF9fTlJfc2V0X3RocmVhZF9hcmVhLCBzeXNfbmlfc3lzY2FsbCkJLyogdXNlIGFyY2hfcHJjdGwgKi8KKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCQkyMDYKK19fU1lTQ0FMTChfX05SX2lvX3NldHVwLCBzeXNfaW9fc2V0dXApCisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCQkyMDcKK19fU1lTQ0FMTChfX05SX2lvX2Rlc3Ryb3ksIHN5c19pb19kZXN0cm95KQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJCTIwOAorX19TWVNDQUxMKF9fTlJfaW9fZ2V0ZXZlbnRzLCBzeXNfaW9fZ2V0ZXZlbnRzKQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCQkyMDkKK19fU1lTQ0FMTChfX05SX2lvX3N1Ym1pdCwgc3lzX2lvX3N1Ym1pdCkKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkJMjEwCitfX1NZU0NBTEwoX19OUl9pb19jYW5jZWwsIHN5c19pb19jYW5jZWwpCisjZGVmaW5lIF9fTlJfZ2V0X3RocmVhZF9hcmVhCQkJMjExCitfX1NZU0NBTEwoX19OUl9nZXRfdGhyZWFkX2FyZWEsIHN5c19uaV9zeXNjYWxsKQkvKiB1c2UgYXJjaF9wcmN0bCAqLworI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCQkJMjEyCitfX1NZU0NBTEwoX19OUl9sb29rdXBfZGNvb2tpZSwgc3lzX2xvb2t1cF9kY29va2llKQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkJCTIxMworX19TWVNDQUxMKF9fTlJfZXBvbGxfY3JlYXRlLCBzeXNfZXBvbGxfY3JlYXRlKQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bF9vbGQJCQkyMTQKK19fU1lTQ0FMTChfX05SX2Vwb2xsX2N0bF9vbGQsIHN5c19uaV9zeXNjYWxsKQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXRfb2xkCQkJMjE1CitfX1NZU0NBTEwoX19OUl9lcG9sbF93YWl0X29sZCwgc3lzX25pX3N5c2NhbGwpCisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkJCTIxNgorX19TWVNDQUxMKF9fTlJfcmVtYXBfZmlsZV9wYWdlcywgc3lzX3JlbWFwX2ZpbGVfcGFnZXMpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJCQkyMTcKK19fU1lTQ0FMTChfX05SX2dldGRlbnRzNjQsIHN5c19nZXRkZW50czY0KQorI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkJCTIxOAorX19TWVNDQUxMKF9fTlJfc2V0X3RpZF9hZGRyZXNzLCBzeXNfc2V0X3RpZF9hZGRyZXNzKQorI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbAkJCTIxOQorX19TWVNDQUxMKF9fTlJfcmVzdGFydF9zeXNjYWxsLCBzeXNfcmVzdGFydF9zeXNjYWxsKQorI2RlZmluZSBfX05SX3NlbXRpbWVkb3AJCQkJMjIwCitfX1NZU0NBTEwoX19OUl9zZW10aW1lZG9wLCBzeXNfc2VtdGltZWRvcCkKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjQJCQkJMjIxCitfX1NZU0NBTEwoX19OUl9mYWR2aXNlNjQsIHN5c19mYWR2aXNlNjQpCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCQkJMjIyCitfX1NZU0NBTEwoX19OUl90aW1lcl9jcmVhdGUsIHN5c190aW1lcl9jcmVhdGUpCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkJCTIyMworX19TWVNDQUxMKF9fTlJfdGltZXJfc2V0dGltZSwgc3lzX3RpbWVyX3NldHRpbWUpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkJCTIyNAorX19TWVNDQUxMKF9fTlJfdGltZXJfZ2V0dGltZSwgc3lzX3RpbWVyX2dldHRpbWUpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkJCTIyNQorX19TWVNDQUxMKF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biwgc3lzX3RpbWVyX2dldG92ZXJydW4pCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCQkJMjI2CitfX1NZU0NBTEwoX19OUl90aW1lcl9kZWxldGUsIHN5c190aW1lcl9kZWxldGUpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkJCTIyNworX19TWVNDQUxMKF9fTlJfY2xvY2tfc2V0dGltZSwgc3lzX2Nsb2NrX3NldHRpbWUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkJCTIyOAorX19TWVNDQUxMKF9fTlJfY2xvY2tfZ2V0dGltZSwgc3lzX2Nsb2NrX2dldHRpbWUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCQkJMjI5CitfX1NZU0NBTEwoX19OUl9jbG9ja19nZXRyZXMsIHN5c19jbG9ja19nZXRyZXMpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCQkJMjMwCitfX1NZU0NBTEwoX19OUl9jbG9ja19uYW5vc2xlZXAsIHN5c19jbG9ja19uYW5vc2xlZXApCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJCQkyMzEKK19fU1lTQ0FMTChfX05SX2V4aXRfZ3JvdXAsIHN5c19leGl0X2dyb3VwKQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCQkJMjMyCitfX1NZU0NBTEwoX19OUl9lcG9sbF93YWl0LCBzeXNfZXBvbGxfd2FpdCkKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCQkJMjMzCitfX1NZU0NBTEwoX19OUl9lcG9sbF9jdGwsIHN5c19lcG9sbF9jdGwpCisjZGVmaW5lIF9fTlJfdGdraWxsCQkJCTIzNAorX19TWVNDQUxMKF9fTlJfdGdraWxsLCBzeXNfdGdraWxsKQorI2RlZmluZSBfX05SX3V0aW1lcwkJCQkyMzUKK19fU1lTQ0FMTChfX05SX3V0aW1lcywgc3lzX3V0aW1lcykKKyNkZWZpbmUgX19OUl92c2VydmVyCQkJCTIzNgorX19TWVNDQUxMKF9fTlJfdnNlcnZlciwgc3lzX25pX3N5c2NhbGwpCisjZGVmaW5lIF9fTlJfbWJpbmQJCQkJMjM3CitfX1NZU0NBTEwoX19OUl9tYmluZCwgc3lzX21iaW5kKQorI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJCQkyMzgKK19fU1lTQ0FMTChfX05SX3NldF9tZW1wb2xpY3ksIHN5c19zZXRfbWVtcG9saWN5KQorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJCQkyMzkKK19fU1lTQ0FMTChfX05SX2dldF9tZW1wb2xpY3ksIHN5c19nZXRfbWVtcG9saWN5KQorI2RlZmluZSBfX05SX21xX29wZW4JCQkJMjQwCitfX1NZU0NBTEwoX19OUl9tcV9vcGVuLCBzeXNfbXFfb3BlbikKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCQkJMjQxCitfX1NZU0NBTEwoX19OUl9tcV91bmxpbmssIHN5c19tcV91bmxpbmspCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCQkJMjQyCitfX1NZU0NBTEwoX19OUl9tcV90aW1lZHNlbmQsIHN5c19tcV90aW1lZHNlbmQpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCQkJMjQzCitfX1NZU0NBTEwoX19OUl9tcV90aW1lZHJlY2VpdmUsIHN5c19tcV90aW1lZHJlY2VpdmUpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkJCTI0NAorX19TWVNDQUxMKF9fTlJfbXFfbm90aWZ5LCBzeXNfbXFfbm90aWZ5KQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJCQkyNDUKK19fU1lTQ0FMTChfX05SX21xX2dldHNldGF0dHIsIHN5c19tcV9nZXRzZXRhdHRyKQorI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCQkJMjQ2CitfX1NZU0NBTEwoX19OUl9rZXhlY19sb2FkLCBzeXNfa2V4ZWNfbG9hZCkKKyNkZWZpbmUgX19OUl93YWl0aWQJCQkJMjQ3CitfX1NZU0NBTEwoX19OUl93YWl0aWQsIHN5c193YWl0aWQpCisjZGVmaW5lIF9fTlJfYWRkX2tleQkJCQkyNDgKK19fU1lTQ0FMTChfX05SX2FkZF9rZXksIHN5c19hZGRfa2V5KQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CQkJMjQ5CitfX1NZU0NBTEwoX19OUl9yZXF1ZXN0X2tleSwgc3lzX3JlcXVlc3Rfa2V5KQorI2RlZmluZSBfX05SX2tleWN0bAkJCQkyNTAKK19fU1lTQ0FMTChfX05SX2tleWN0bCwgc3lzX2tleWN0bCkKKyNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkJCTI1MQorX19TWVNDQUxMKF9fTlJfaW9wcmlvX3NldCwgc3lzX2lvcHJpb19zZXQpCisjZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJCQkyNTIKK19fU1lTQ0FMTChfX05SX2lvcHJpb19nZXQsIHN5c19pb3ByaW9fZ2V0KQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdAkJCTI1MworX19TWVNDQUxMKF9fTlJfaW5vdGlmeV9pbml0LCBzeXNfaW5vdGlmeV9pbml0KQorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCQkJMjU0CitfX1NZU0NBTEwoX19OUl9pbm90aWZ5X2FkZF93YXRjaCwgc3lzX2lub3RpZnlfYWRkX3dhdGNoKQorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJCQkyNTUKK19fU1lTQ0FMTChfX05SX2lub3RpZnlfcm1fd2F0Y2gsIHN5c19pbm90aWZ5X3JtX3dhdGNoKQorI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJCQkyNTYKK19fU1lTQ0FMTChfX05SX21pZ3JhdGVfcGFnZXMsIHN5c19taWdyYXRlX3BhZ2VzKQorI2RlZmluZSBfX05SX29wZW5hdAkJCQkyNTcKK19fU1lTQ0FMTChfX05SX29wZW5hdCwgc3lzX29wZW5hdCkKKyNkZWZpbmUgX19OUl9ta2RpcmF0CQkJCTI1OAorX19TWVNDQUxMKF9fTlJfbWtkaXJhdCwgc3lzX21rZGlyYXQpCisjZGVmaW5lIF9fTlJfbWtub2RhdAkJCQkyNTkKK19fU1lTQ0FMTChfX05SX21rbm9kYXQsIHN5c19ta25vZGF0KQorI2RlZmluZSBfX05SX2ZjaG93bmF0CQkJCTI2MAorX19TWVNDQUxMKF9fTlJfZmNob3duYXQsIHN5c19mY2hvd25hdCkKKyNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCQkJMjYxCitfX1NZU0NBTEwoX19OUl9mdXRpbWVzYXQsIHN5c19mdXRpbWVzYXQpCisjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdAkJCQkyNjIKK19fU1lTQ0FMTChfX05SX25ld2ZzdGF0YXQsIHN5c19uZXdmc3RhdGF0KQorI2RlZmluZSBfX05SX3VubGlua2F0CQkJCTI2MworX19TWVNDQUxMKF9fTlJfdW5saW5rYXQsIHN5c191bmxpbmthdCkKKyNkZWZpbmUgX19OUl9yZW5hbWVhdAkJCQkyNjQKK19fU1lTQ0FMTChfX05SX3JlbmFtZWF0LCBzeXNfcmVuYW1lYXQpCisjZGVmaW5lIF9fTlJfbGlua2F0CQkJCTI2NQorX19TWVNDQUxMKF9fTlJfbGlua2F0LCBzeXNfbGlua2F0KQorI2RlZmluZSBfX05SX3N5bWxpbmthdAkJCQkyNjYKK19fU1lTQ0FMTChfX05SX3N5bWxpbmthdCwgc3lzX3N5bWxpbmthdCkKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkJCTI2NworX19TWVNDQUxMKF9fTlJfcmVhZGxpbmthdCwgc3lzX3JlYWRsaW5rYXQpCisjZGVmaW5lIF9fTlJfZmNobW9kYXQJCQkJMjY4CitfX1NZU0NBTEwoX19OUl9mY2htb2RhdCwgc3lzX2ZjaG1vZGF0KQorI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJCQkyNjkKK19fU1lTQ0FMTChfX05SX2ZhY2Nlc3NhdCwgc3lzX2ZhY2Nlc3NhdCkKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCQkyNzAKK19fU1lTQ0FMTChfX05SX3BzZWxlY3Q2LCBzeXNfcHNlbGVjdDYpCisjZGVmaW5lIF9fTlJfcHBvbGwJCQkJMjcxCitfX1NZU0NBTEwoX19OUl9wcG9sbCwJc3lzX3Bwb2xsKQorI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkJMjcyCitfX1NZU0NBTEwoX19OUl91bnNoYXJlLAlzeXNfdW5zaGFyZSkKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJCQkyNzMKK19fU1lTQ0FMTChfX05SX3NldF9yb2J1c3RfbGlzdCwgc3lzX3NldF9yb2J1c3RfbGlzdCkKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCQkyNzQKK19fU1lTQ0FMTChfX05SX2dldF9yb2J1c3RfbGlzdCwgc3lzX2dldF9yb2J1c3RfbGlzdCkKKyNkZWZpbmUgX19OUl9zcGxpY2UJCQkJMjc1CitfX1NZU0NBTEwoX19OUl9zcGxpY2UsIHN5c19zcGxpY2UpCisjZGVmaW5lIF9fTlJfdGVlCQkJCTI3NgorX19TWVNDQUxMKF9fTlJfdGVlLCBzeXNfdGVlKQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJCTI3NworX19TWVNDQUxMKF9fTlJfc3luY19maWxlX3JhbmdlLCBzeXNfc3luY19maWxlX3JhbmdlKQorI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkJCTI3OAorX19TWVNDQUxMKF9fTlJfdm1zcGxpY2UsIHN5c192bXNwbGljZSkKKyNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkJCTI3OQorX19TWVNDQUxMKF9fTlJfbW92ZV9wYWdlcywgc3lzX21vdmVfcGFnZXMpCisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkJCTI4MAorX19TWVNDQUxMKF9fTlJfdXRpbWVuc2F0LCBzeXNfdXRpbWVuc2F0KQorI2RlZmluZSBfX0lHTk9SRV9nZXRjcHUJCS8qIGltcGxlbWVudGVkIGFzIGEgdnN5c2NhbGwgKi8KKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkJCTI4MQorX19TWVNDQUxMKF9fTlJfZXBvbGxfcHdhaXQsIHN5c19lcG9sbF9wd2FpdCkKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJCQkyODIKK19fU1lTQ0FMTChfX05SX3NpZ25hbGZkLCBzeXNfc2lnbmFsZmQpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJCQkyODMKK19fU1lTQ0FMTChfX05SX3RpbWVyZmRfY3JlYXRlLCBzeXNfdGltZXJmZF9jcmVhdGUpCisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJCQkyODQKK19fU1lTQ0FMTChfX05SX2V2ZW50ZmQsIHN5c19ldmVudGZkKQorI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJCQkyODUKK19fU1lTQ0FMTChfX05SX2ZhbGxvY2F0ZSwgc3lzX2ZhbGxvY2F0ZSkKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJCQkyODYKK19fU1lTQ0FMTChfX05SX3RpbWVyZmRfc2V0dGltZSwgc3lzX3RpbWVyZmRfc2V0dGltZSkKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJCQkyODcKK19fU1lTQ0FMTChfX05SX3RpbWVyZmRfZ2V0dGltZSwgc3lzX3RpbWVyZmRfZ2V0dGltZSkKKyNkZWZpbmUgX19OUl9wYWNjZXB0CQkJCTI4OAorX19TWVNDQUxMKF9fTlJfcGFjY2VwdCwgc3lzX3BhY2NlcHQpCisjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkJCTI4OQorX19TWVNDQUxMKF9fTlJfc2lnbmFsZmQ0LCBzeXNfc2lnbmFsZmQ0KQorI2RlZmluZSBfX05SX2V2ZW50ZmQyCQkJCTI5MAorX19TWVNDQUxMKF9fTlJfZXZlbnRmZDIsIHN5c19ldmVudGZkMikKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxCQkJMjkxCitfX1NZU0NBTEwoX19OUl9lcG9sbF9jcmVhdGUxLCBzeXNfZXBvbGxfY3JlYXRlMSkKKyNkZWZpbmUgX19OUl9kdXAzCQkJCTI5MgorX19TWVNDQUxMKF9fTlJfZHVwMywgc3lzX2R1cDMpCisjZGVmaW5lIF9fTlJfcGlwZTIJCQkJMjkzCitfX1NZU0NBTEwoX19OUl9waXBlMiwgc3lzX3BpcGUyKQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCQkyOTQKK19fU1lTQ0FMTChfX05SX2lub3RpZnlfaW5pdDEsIHN5c19pbm90aWZ5X2luaXQxKQorCisKKyNpZm5kZWYgX19OT19TVFVCUworI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCisjZW5kaWYJLyogX19OT19TVFVCUyAqLworCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1VOSVNURF82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bndpbmQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Vud2luZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDY0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bndpbmQuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9BU01fWDg2X1VOV0lORF9ICisjZGVmaW5lIF9BU01fWDg2X1VOV0lORF9ICisKKyNkZWZpbmUgVU5XX1BDKGZyYW1lKSAoKHZvaWQpKGZyYW1lKSwgMFVMKQorI2RlZmluZSBVTldfU1AoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwVUwpCisjZGVmaW5lIFVOV19GUChmcmFtZSkgKCh2b2lkKShmcmFtZSksIDBVTCkKKworc3RhdGljIGlubGluZSBpbnQgYXJjaF91bndfdXNlcl9tb2RlKGNvbnN0IHZvaWQgKmluZm8pCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VTldJTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3VzZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L3VzZXIuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vdXNlci5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Y2JiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyMzIuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIF9BU01fWDg2X1VTRVIzMl9ICisjZGVmaW5lIF9BU01fWDg2X1VTRVIzMl9ICisKKy8qIElBMzIgY29tcGF0aWJsZSB1c2VyIHN0cnVjdHVyZXMgZm9yIHB0cmFjZS4KKyAqIFRoZXNlIHNob3VsZCBiZSB1c2VkIGZvciAzMmJpdCBjb3JlZHVtcHMgdG9vLiAqLworCitzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IHsKKwl1MzIJY3dkOworCXUzMglzd2Q7CisJdTMyCXR3ZDsKKwl1MzIJZmlwOworCXUzMglmY3M7CisJdTMyCWZvbzsKKwl1MzIJZm9zOworCXUzMglzdF9zcGFjZVsyMF07ICAgLyogOCoxMCBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSA4MCBieXRlcyAqLworfTsKKworLyogRlNBVkUgZnJhbWUgd2l0aCBleHRlbnNpb25zICovCitzdHJ1Y3QgdXNlcjMyX2Z4c3Jfc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljd2Q7CisJdW5zaWduZWQgc2hvcnQJc3dkOworCXVuc2lnbmVkIHNob3J0CXR3ZDsJLyogbm90IGNvbXBhdGlibGUgdG8gNjRiaXQgdHdkICovCisJdW5zaWduZWQgc2hvcnQJZm9wOworCWludAlmaXA7CisJaW50CWZjczsKKwlpbnQJZm9vOworCWludAlmb3M7CisJaW50CW14Y3NyOworCWludAlyZXNlcnZlZDsKKwlpbnQJc3Rfc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDEyOCBieXRlcyAqLworCWludAl4bW1fc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIFhNTS1yZWcgPSAxMjggYnl0ZXMgKi8KKwlpbnQJcGFkZGluZ1s1Nl07Cit9OworCitzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyIHsKKwlfX3UzMiBlYngsIGVjeCwgZWR4LCBlc2ksIGVkaSwgZWJwLCBlYXg7CisJdW5zaWduZWQgc2hvcnQgZHMsIF9fZHMsIGVzLCBfX2VzOworCXVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzLCBncywgX19nczsKKwlfX3UzMiBvcmlnX2VheCwgZWlwOworCXVuc2lnbmVkIHNob3J0IGNzLCBfX2NzOworCV9fdTMyIGVmbGFncywgZXNwOworCXVuc2lnbmVkIHNob3J0IHNzLCBfX3NzOworfTsKKworc3RydWN0IHVzZXIzMiB7CisgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIgcmVnczsgLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisgIGludCB1X2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICovCisJCQkJLyogZm9yIHRoaXMgbWVzcy4gTm90IHlldCB1c2VkLiAqLworICBzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IGkzODc7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHJlZ2lzdGVycy4gKi8KKy8qIFRoZSByZXN0IG9mIHRoaXMganVuayBpcyB0byBoZWxwIGdkYiBmaWd1cmUgb3V0IHdoYXQgZ29lcyB3aGVyZSAqLworICBfX3UzMiB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICBfX3UzMiB1X2RzaXplOwkvKiBEYXRhIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICBfX3UzMiB1X3NzaXplOwkvKiBTdGFjayBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgX191MzIgc3RhcnRfY29kZTsgICAgIC8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiB0ZXh0LiAqLworICBfX3UzMiBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCisJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKwkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCisJCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KKyAgX191MzIgc2lnbmFsOyAgICAgCQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIF9fdTMyZXIgdXNlZCAqLworICBfX3UzMiB1X2FyMDsJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KKyAgX191MzIgdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyLiAqLworICBfX3UzMiBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworICBpbnQgdV9kZWJ1Z3JlZ1s4XTsKK307CisKKworI2VuZGlmIC8qIF9BU01fWDg2X1VTRVIzMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViZmQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXJfMzIuaApAQCAtMCwwICsxLDEzMSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9VU0VSXzMyX0gKKyNkZWZpbmUgX0FTTV9YODZfVVNFUl8zMl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorLyogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAgIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAgIGxpbnV4IHdlIHVzZSB0aGUgJ3RyYWQtY29yZScgYmZkKS4gIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZgorICAgb2JzdGFjbGVzIHRvIGJlaW5nIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50CisgICByZWdpc3RlcnMsIGFuZCB1bnRpbCB0aGVzZSBhcmUgc29sdmVkIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHZpZXcgdGhlCisgICBjb250ZW50cyBvZiB0aGVtLiAgQWN0dWFsbHksIHlvdSBjYW4gcmVhZCBpbiB0aGUgY29yZSBmaWxlIGFuZCBsb29rIGF0CisgICB0aGUgY29udGVudHMgb2YgdGhlIHVzZXIgc3RydWN0IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGZsb2F0aW5nIHBvaW50CisgICByZWdpc3RlcnMgY29udGFpbi4KKyAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKKyAgIFVQQUdFOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiIHdoYXQgaXMgcHJlc2VudAorICAgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEgY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoCisgICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCisgICBBbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZAorICAgYWx3YXlzIGJlIG9ubHkgb25lIHBhZ2UuCisgICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworICAgY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFsbG9jZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEgcGFnZQorICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKKyAgIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFuIGludGVncmFsCisgICBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisgICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KKyAgIGN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIG9mZiBpbiBvcmRlciB0byBiZSBhYmxlCisgICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKyAgIFRoZSBtaW5pbXVtIGNvcmUgZmlsZSBzaXplIGlzIDMgcGFnZXMsIG9yIDEyMjg4IGJ5dGVzLgorKi8KKworLyoKKyAqIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0CisgKglHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAorICoKKyAqIFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdEQiA1LjArIFBUUkFDRV97R0VUfFNFVH1GUFhSRUdTIHJlcXVlc3RzIGZvcgorICogaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRlhTUi1mb3JtYXQgZmxvYXRpbmcgcG9pbnQgZW52aXJvbm1lbnQuICBGbG9hdGluZworICogcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHJlZ3VsYXIgZm9ybWF0IGluIHRoZSB1c3VhbCBtYW5uZXIsCisgKiBhbmQgYm90aCB0aGUgc3RhbmRhcmQgYW5kIFNJTUQgZmxvYXRpbmcgcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhCisgKiB0aGUgbmV3IHB0cmFjZSByZXF1ZXN0cy4gIEluIGVpdGhlciBjYXNlLCBjaGFuZ2VzIHRvIHRoZSBGUFUgZW52aXJvbm1lbnQKKyAqIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSB0YXNrJ3Mgc3RhdGUgYXMgZXhwZWN0ZWQuCisgKi8KKworc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgeworCWxvbmcJY3dkOworCWxvbmcJc3dkOworCWxvbmcJdHdkOworCWxvbmcJZmlwOworCWxvbmcJZmNzOworCWxvbmcJZm9vOworCWxvbmcJZm9zOworCWxvbmcJc3Rfc3BhY2VbMjBdOwkvKiA4KjEwIGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDgwIGJ5dGVzICovCit9OworCitzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY3dkOworCXVuc2lnbmVkIHNob3J0CXN3ZDsKKwl1bnNpZ25lZCBzaG9ydAl0d2Q7CisJdW5zaWduZWQgc2hvcnQJZm9wOworCWxvbmcJZmlwOworCWxvbmcJZmNzOworCWxvbmcJZm9vOworCWxvbmcJZm9zOworCWxvbmcJbXhjc3I7CisJbG9uZwlyZXNlcnZlZDsKKwlsb25nCXN0X3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSAxMjggYnl0ZXMgKi8KKwlsb25nCXhtbV9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggWE1NLXJlZyA9IDEyOCBieXRlcyAqLworCWxvbmcJcGFkZGluZ1s1Nl07Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgb2xkIGxheW91dCBvZiAic3RydWN0IHB0X3JlZ3MiLCBhbmQKKyAqIGlzIHN0aWxsIHRoZSBsYXlvdXQgdXNlZCBieSB1c2VyIG1vZGUgKHRoZSBuZXcKKyAqIHB0X3JlZ3MgZG9lc24ndCBoYXZlIGFsbCByZWdpc3RlcnMgYXMgdGhlIGtlcm5lbAorICogZG9lc24ndCB1c2UgdGhlIGV4dHJhIHNlZ21lbnQgcmVnaXN0ZXJzKQorICovCitzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZwlieDsKKwl1bnNpZ25lZCBsb25nCWN4OworCXVuc2lnbmVkIGxvbmcJZHg7CisJdW5zaWduZWQgbG9uZwlzaTsKKwl1bnNpZ25lZCBsb25nCWRpOworCXVuc2lnbmVkIGxvbmcJYnA7CisJdW5zaWduZWQgbG9uZwlheDsKKwl1bnNpZ25lZCBsb25nCWRzOworCXVuc2lnbmVkIGxvbmcJZXM7CisJdW5zaWduZWQgbG9uZwlmczsKKwl1bnNpZ25lZCBsb25nCWdzOworCXVuc2lnbmVkIGxvbmcJb3JpZ19heDsKKwl1bnNpZ25lZCBsb25nCWlwOworCXVuc2lnbmVkIGxvbmcJY3M7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXNwOworCXVuc2lnbmVkIGxvbmcJc3M7Cit9OworCisvKiBXaGVuIHRoZSBrZXJuZWwgZHVtcHMgY29yZSwgaXQgc3RhcnRzIGJ5IGR1bXBpbmcgdGhlIHVzZXIgc3RydWN0IC0KKyAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworICAgYXJlIHdpdGhpbiB0aGUgZmlsZSwgYW5kIHdoYXQgdmlydHVhbCBhZGRyZXNzZXMgdG8gdXNlLiAqLworc3RydWN0IHVzZXJ7CisvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAorICAgZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCisgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CS8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLworLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLworICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLworCQkJCS8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KKyAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgaTM4NzsJLyogTWF0aCBDby1wcm9jZXNzb3IgcmVnaXN0ZXJzLiAqLworLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KKyAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCisJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKwkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCisJCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KKyAgbG9uZyBpbnQgc2lnbmFsOyAgICAgCQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIGxvbmdlciB1c2VkICovCisgIHVuc2lnbmVkIGxvbmcgdV9hcjA7CQkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KKwkJCQkvKiB0aGUgcmVnaXN0ZXJzLiAqLworICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyLiAqLworICB1bnNpZ25lZCBsb25nIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KKyAgY2hhciB1X2NvbW1bMzJdOwkJLyogVXNlciBjb21tYW5kIHRoYXQgd2FzIHJlc3BvbnNpYmxlICovCisgIGludCB1X2RlYnVncmVnWzhdOworfTsKKyNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTIDEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VU0VSXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXJfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXJfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWYyY2QzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXNlcl82NC5oCkBAIC0wLDAgKzEsMTM3IEBACisjaWZuZGVmIF9BU01fWDg2X1VTRVJfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9VU0VSXzY0X0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisvKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICAgY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyLgorICAgVGhlcmUgYXJlIHF1aXRlIGEgbnVtYmVyIG9mIG9ic3RhY2xlcyB0byBiZWluZyBhYmxlIHRvIHZpZXcgdGhlCisgICBjb250ZW50cyBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLCBhbmQgdW50aWwgdGhlc2UgYXJlCisgICBzb2x2ZWQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlbS4KKyAgIEFjdHVhbGx5LCB5b3UgY2FuIHJlYWQgaW4gdGhlIGNvcmUgZmlsZSBhbmQgbG9vayBhdCB0aGUgY29udGVudHMgb2YKKyAgIHRoZSB1c2VyIHN0cnVjdCB0byBmaW5kIG91dCB3aGF0IHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMKKyAgIGNvbnRhaW4uCisKKyAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKKyAgIFVQQUdFOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiIHdoYXQgaXMgcHJlc2VudAorICAgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEgY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoCisgICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCisgICBBbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZAorICAgYWx3YXlzIGJlIG9ubHkgb25lIHBhZ2UuCisgICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworICAgY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFsbG9jZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEgcGFnZQorICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKKyAgIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFuIGludGVncmFsCisgICBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisgICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KKyAgIGN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIG9mZiBpbiBvcmRlciB0byBiZSBhYmxlCisgICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKyAgIFRoZSBtaW5pbXVtIGNvcmUgZmlsZSBzaXplIGlzIDMgcGFnZXMsIG9yIDEyMjg4IGJ5dGVzLiAgKi8KKworLyoKKyAqIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0CisgKglHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAorICoKKyAqIFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdEQiA1LjArIFBUUkFDRV97R0VUfFNFVH1GUFhSRUdTIHJlcXVlc3RzIGZvcgorICogaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRlhTUi1mb3JtYXQgZmxvYXRpbmcgcG9pbnQgZW52aXJvbm1lbnQuICBGbG9hdGluZworICogcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHJlZ3VsYXIgZm9ybWF0IGluIHRoZSB1c3VhbCBtYW5uZXIsCisgKiBhbmQgYm90aCB0aGUgc3RhbmRhcmQgYW5kIFNJTUQgZmxvYXRpbmcgcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhCisgKiB0aGUgbmV3IHB0cmFjZSByZXF1ZXN0cy4gIEluIGVpdGhlciBjYXNlLCBjaGFuZ2VzIHRvIHRoZSBGUFUgZW52aXJvbm1lbnQKKyAqIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSB0YXNrJ3Mgc3RhdGUgYXMgZXhwZWN0ZWQuCisgKgorICogeDg2LTY0IHN1cHBvcnQgYnkgQW5kaSBLbGVlbi4KKyAqLworCisvKiBUaGlzIG1hdGNoZXMgdGhlIDY0Yml0IEZYU0FWRSBmb3JtYXQgYXMgZGVmaW5lZCBieSBBTUQuIEl0IGlzIHRoZSBzYW1lCisgICBhcyB0aGUgMzJiaXQgZm9ybWF0IGRlZmluZWQgYnkgSW50ZWwsIGV4Y2VwdCB0aGF0IHRoZSBzZWxlY3RvcjpvZmZzZXQgcGFpcnMKKyAgIGZvciBkYXRhIGFuZCBlaXAgYXJlIHJlcGxhY2VkIHdpdGggZmxhdCA2NGJpdCBwb2ludGVycy4gKi8KK3N0cnVjdCB1c2VyX2kzODdfc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljd2Q7CisJdW5zaWduZWQgc2hvcnQJc3dkOworCXVuc2lnbmVkIHNob3J0CXR3ZDsJLyogTm90ZSB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcworCQkJCSAgIHRoZSAzMmJpdC94ODcvRlNBVkUgdHdkICovCisJdW5zaWduZWQgc2hvcnQJZm9wOworCV9fdTY0CXJpcDsKKwlfX3U2NAlyZHA7CisJX191MzIJbXhjc3I7CisJX191MzIJbXhjc3JfbWFzazsKKwlfX3UzMglzdF9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gMTI4IGJ5dGVzICovCisJX191MzIJeG1tX3NwYWNlWzY0XTsJLyogMTYqMTYgYnl0ZXMgZm9yIGVhY2ggWE1NLXJlZyA9IDI1NiBieXRlcyAqLworCV9fdTMyCXBhZGRpbmdbMjRdOworfTsKKworLyoKKyAqIFNlZ21lbnQgcmVnaXN0ZXIgbGF5b3V0IGluIGNvcmVkdW1wcy4KKyAqLworc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJcjE1OworCXVuc2lnbmVkIGxvbmcJcjE0OworCXVuc2lnbmVkIGxvbmcJcjEzOworCXVuc2lnbmVkIGxvbmcJcjEyOworCXVuc2lnbmVkIGxvbmcJYnA7CisJdW5zaWduZWQgbG9uZwlieDsKKwl1bnNpZ25lZCBsb25nCXIxMTsKKwl1bnNpZ25lZCBsb25nCXIxMDsKKwl1bnNpZ25lZCBsb25nCXI5OworCXVuc2lnbmVkIGxvbmcJcjg7CisJdW5zaWduZWQgbG9uZwlheDsKKwl1bnNpZ25lZCBsb25nCWN4OworCXVuc2lnbmVkIGxvbmcJZHg7CisJdW5zaWduZWQgbG9uZwlzaTsKKwl1bnNpZ25lZCBsb25nCWRpOworCXVuc2lnbmVkIGxvbmcJb3JpZ19heDsKKwl1bnNpZ25lZCBsb25nCWlwOworCXVuc2lnbmVkIGxvbmcJY3M7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXNwOworCXVuc2lnbmVkIGxvbmcJc3M7CisJdW5zaWduZWQgbG9uZwlmc19iYXNlOworCXVuc2lnbmVkIGxvbmcJZ3NfYmFzZTsKKwl1bnNpZ25lZCBsb25nCWRzOworCXVuc2lnbmVkIGxvbmcJZXM7CisJdW5zaWduZWQgbG9uZwlmczsKKwl1bnNpZ25lZCBsb25nCWdzOworfTsKKworLyogV2hlbiB0aGUga2VybmVsIGR1bXBzIGNvcmUsIGl0IHN0YXJ0cyBieSBkdW1waW5nIHRoZSB1c2VyIHN0cnVjdCAtCisgICB0aGlzIHdpbGwgYmUgdXNlZCBieSBnZGIgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGF0YSBhbmQgc3RhY2sgc2VnbWVudHMKKyAgIGFyZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB3aGF0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHVzZS4gKi8KKworc3RydWN0IHVzZXIgeworLyogV2Ugc3RhcnQgd2l0aCB0aGUgcmVnaXN0ZXJzLCB0byBtaW1pYyB0aGUgd2F5IHRoYXQgIm1lbW9yeSIgaXMgcmV0dXJuZWQKKyAgIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwkvKiBXaGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBzdG9yZWQgKi8KKy8qIHB0cmFjZSBkb2VzIG5vdCB5ZXQgc3VwcGx5IHRoZXNlLiAgU29tZWRheS4uLi4gKi8KKyAgaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gKi8KKwkJCQkvKiBmb3IgdGhpcyBtZXNzLiBOb3QgeWV0IHVzZWQuICovCisgIGludCBwYWQwOworICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBpMzg3OwkvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMuICovCisvKiBUaGUgcmVzdCBvZiB0aGlzIGp1bmsgaXMgdG8gaGVscCBnZGIgZmlndXJlIG91dCB3aGF0IGdvZXMgd2hlcmUgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsJLyogVGV4dCBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsJLyogRGF0YSBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsJLyogU3RhY2sgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsgICAgIC8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiB0ZXh0LiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwkvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhY2sgYXJlYS4KKwkJCQkgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorCQkJCSAgIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIGFsd2F5cyBmb3VuZCBpbiB0aGUKKwkJCQkgICBlc3AgcmVnaXN0ZXIuICAqLworICBsb25nIGludCBzaWduYWw7CQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIGxvbmdlciB1c2VkICovCisgIGludCBwYWQxOworICB1bnNpZ25lZCBsb25nIHVfYXIwOwkJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KKyAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgKnVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlci4gKi8KKyAgdW5zaWduZWQgbG9uZyBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworICB1bnNpZ25lZCBsb25nIHVfZGVidWdyZWdbOF07CisgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZTsgLyogQ1BVIGVycm9yIGNvZGUgb3IgMCAqLworICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3M7IC8qIENSMyBvciAwICovCit9OworI2RlZmluZSBOQlBHIFBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMgMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSICh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmIC8qIF9BU01fWDg2X1VTRVJfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzFkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9VVl9CSU9TX0gKKyNkZWZpbmUgX0FTTV9YODZfVVZfQklPU19ICisKKy8qCisgKiBVViBCSU9TIGxheWVyIGRlZmluaXRpb25zLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworLyoKKyAqIFZhbHVlcyBmb3IgdGhlIEJJT1MgY2FsbHMuICBJdCBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0ICogYXJndW1lbnQgaW4gdGhlCisgKiBCSU9TIGNhbGwuICBQYXNzaW5nIGFueSBvdGhlciB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCByZXN1bHQKKyAqIGluIGEgQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRCByZXR1cm4gc3RhdHVzLgorICovCitlbnVtIHV2X2Jpb3NfY21kIHsKKwlVVl9CSU9TX0NPTU1PTiwKKwlVVl9CSU9TX0dFVF9TTl9JTkZPLAorCVVWX0JJT1NfRlJFUV9CQVNFCit9OworCisvKgorICogU3RhdHVzIHZhbHVlcyByZXR1cm5lZCBmcm9tIGEgQklPUyBjYWxsLgorICovCitlbnVtIHsKKwlCSU9TX1NUQVRVU19TVUNDRVNTCQk9ICAwLAorCUJJT1NfU1RBVFVTX1VOSU1QTEVNRU5URUQJPSAtRU5PU1lTLAorCUJJT1NfU1RBVFVTX0VJTlZBTAkJPSAtRUlOVkFMLAorCUJJT1NfU1RBVFVTX1VOQVZBSUwJCT0gLUVCVVNZCit9OworCisvKgorICogVGhlIFVWIHN5c3RlbSB0YWJsZSBkZXNjcmliZXMgc3BlY2lmaWMgZmlybXdhcmUKKyAqIGNhcGFiaWxpdGllcyBhdmFpbGFibGUgdG8gdGhlIExpbnV4IGtlcm5lbCBhdCBydW50aW1lLgorICovCitzdHJ1Y3QgdXZfc3lzdGFiIHsKKwljaGFyIHNpZ25hdHVyZVs0XTsJLyogbXVzdCBiZSAiVVZTVCIgKi8KKwl1MzIgcmV2aXNpb247CQkvKiBkaXN0aW5ndWlzaCBkaWZmZXJlbnQgZmlybXdhcmUgcmV2cyAqLworCXU2NCBmdW5jdGlvbjsJCS8qIEJJT1MgcnVudGltZSBjYWxsYmFjayBmdW5jdGlvbiBwdHIgKi8KK307CisKK2VudW0geworCUJJT1NfRlJFUV9CQVNFX1BMQVRGT1JNID0gMCwKKwlCSU9TX0ZSRVFfQkFTRV9JTlRFUlZBTF9USU1FUiA9IDEsCisJQklPU19GUkVRX0JBU0VfUkVBTFRJTUVfQ0xPQ0sgPSAyCit9OworCit1bmlvbiBwYXJ0aXRpb25faW5mb191IHsKKwl1NjQJdmFsOworCXN0cnVjdCB7CisJCXU2NAlodWJfdmVyc2lvbgk6ICA4LAorCQkJcGFydGl0aW9uX2lkCTogMTYsCisJCQljb2hlcmVuY2VfaWQJOiAxNiwKKwkJCXJlZ2lvbl9zaXplCTogMjQ7CisJfTsKK307CisKKy8qCisgKiBiaW9zIGNhbGxzIGhhdmUgNiBwYXJhbWV0ZXJzCisgKi8KK2V4dGVybiBzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiBzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOworZXh0ZXJuIHM2NCB1dl9iaW9zX2NhbGxfcmVlbnRyYW50KGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKKworZXh0ZXJuIHM2NCB1dl9iaW9zX2dldF9zbl9pbmZvKGludCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBsb25nICopOworZXh0ZXJuIHM2NCB1dl9iaW9zX2ZyZXFfYmFzZSh1NjQsIHU2NCAqKTsKKworZXh0ZXJuIHZvaWQgdXZfYmlvc19pbml0KHZvaWQpOworCitleHRlcm4gaW50IHV2X3R5cGU7CitleHRlcm4gbG9uZyBzbl9wYXJ0aXRpb25faWQ7CitleHRlcm4gbG9uZyB1dl9jb2hlcmVuY3lfaWQ7CitleHRlcm4gbG9uZyB1dl9yZWdpb25fc2l6ZTsKKyNkZWZpbmUgcGFydGl0aW9uX2NvaGVyZW5jZV9pZCgpCSh1dl9jb2hlcmVuY3lfaWQpCisKK2V4dGVybiBzdHJ1Y3Qga29iamVjdCAqc2dpX3V2X2tvYmo7CS8qIC9zeXMvZmlybXdhcmUvc2dpX3V2ICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VVl9CSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzNjMyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIEJyb2FkY2FzdCBBc3Npc3QgVW5pdCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9VVl9VVl9CQVVfSAorI2RlZmluZSBfQVNNX1g4Nl9VVl9VVl9CQVVfSAorCisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjZGVmaW5lIEJJVFNQRVJCWVRFIDgKKworLyoKKyAqIEJyb2FkY2FzdCBBc3Npc3QgVW5pdCBtZXNzYWdpbmcgc3RydWN0dXJlcworICoKKyAqIFNlbGVjdGl2ZSBCcm9hZGNhc3QgYWN0aXZhdGlvbnMgYXJlIGluZHVjZWQgYnkgc29mdHdhcmUgYWN0aW9uCisgKiBzcGVjaWZ5aW5nIGEgcGFydGljdWxhciA4LWRlc2NyaXB0b3IgInNldCIgdmlhIGEgNi1iaXQgaW5kZXggd3JpdHRlbgorICogdG8gYW4gTU1SLgorICogVGh1cyB0aGVyZSBhcmUgNjQgdW5pcXVlIDUxMi1ieXRlIHNldHMgb2YgU0IgZGVzY3JpcHRvcnMgLSBvbmUgc2V0IGZvcgorICogZWFjaCA2LWJpdCBpbmRleCB2YWx1ZS4gVGhlc2UgZGVzY3JpcHRvciBzZXRzIGFyZSBtYXBwZWQgaW4gc2VxdWVuY2UKKyAqIHN0YXJ0aW5nIHdpdGggc2V0IDAgbG9jYXRlZCBhdCB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgaW4gdGhlCisgKiBCQVVfU0JfREVTQ1JJUFRPUl9CQVNFIHJlZ2lzdGVyLCBzZXQgMSBpcyBsb2NhdGVkIGF0IEJBU0UgKyA1MTIsCisgKiBzZXQgMiBpcyBhdCBCQVNFICsgMio1MTIsIHNldCAzIGF0IEJBU0UgKyAzKjUxMiwgYW5kIHNvIG9uLgorICoKKyAqIFdlIHdpbGwgdXNlIDMxIHNldHMsIG9uZSBmb3Igc2VuZGluZyBCQVUgbWVzc2FnZXMgZnJvbSBlYWNoIG9mIHRoZSAzMgorICogY3B1J3Mgb24gdGhlIG5vZGUuCisgKgorICogVExCIHNob290ZG93biB3aWxsIHVzZSB0aGUgZmlyc3Qgb2YgdGhlIDggZGVzY3JpcHRvcnMgb2YgZWFjaCBzZXQuCisgKiBFYWNoIG9mIHRoZSBkZXNjcmlwdG9ycyBpcyA2NCBieXRlcyBpbiBzaXplICg4KjY0ID0gNTEyIGJ5dGVzIGluIGEgc2V0KS4KKyAqLworCisjZGVmaW5lIFVWX0lURU1TX1BFUl9ERVNDUklQVE9SCQk4CisjZGVmaW5lIFVWX0NQVVNfUEVSX0FDVF9TVEFUVVMJCTMyCisjZGVmaW5lIFVWX0FDVF9TVEFUVVNfTUFTSwkJMHgzCisjZGVmaW5lIFVWX0FDVF9TVEFUVVNfU0laRQkJMgorI2RlZmluZSBVVl9BQ1RJVkFUSU9OX0RFU0NSSVBUT1JfU0laRQkzMgorI2RlZmluZSBVVl9ESVNUUklCVVRJT05fU0laRQkJMjU2CisjZGVmaW5lIFVWX1NXX0FDS19OUEVORElORwkJOAorI2RlZmluZSBVVl9ORVRfRU5EUE9JTlRfSU5URAkJMHgzOAorI2RlZmluZSBVVl9ERVNDX0JBU0VfUE5PREVfU0hJRlQJNDkKKyNkZWZpbmUgVVZfUEFZTE9BRFFfUE5PREVfU0hJRlQJCTQ5CisjZGVmaW5lIFVWX1BUQ19CQVNFTkFNRQkJCSJzZ2lfdXYvcHRjX3N0YXRpc3RpY3MiCisjZGVmaW5lIHV2X3BoeXNub2RlYWRkcih4KQkJKChfX3BhKCh1bnNpZ25lZCBsb25nKSh4KSkgJiB1dl9tbWFzaykpCisKKy8qCisgKiBiaXRzIGluIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMC8xCisgKi8KKyNkZWZpbmUgREVTQ19TVEFUVVNfSURMRQkJMAorI2RlZmluZSBERVNDX1NUQVRVU19BQ1RJVkUJCTEKKyNkZWZpbmUgREVTQ19TVEFUVVNfREVTVElOQVRJT05fVElNRU9VVAkyCisjZGVmaW5lIERFU0NfU1RBVFVTX1NPVVJDRV9USU1FT1VUCTMKKworLyoKKyAqIHNvdXJjZSBzaWRlIHRocmVzaGhvbGRzIGF0IHdoaWNoIG1lc3NhZ2UgcmV0cmllcyBwcmludCBhIHdhcm5pbmcKKyAqLworI2RlZmluZSBTT1VSQ0VfVElNRU9VVF9MSU1JVAkJMjAKKyNkZWZpbmUgREVTVElOQVRJT05fVElNRU9VVF9MSU1JVAkyMAorCisvKgorICogbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRlc3RpbmF0aW9uIHNpZGUgcGF5bG9hZCBxdWV1ZQorICovCisjZGVmaW5lIERFU1RfUV9TSVpFCQkJMTcKKy8qCisgKiBudW1iZXIgb2YgZGVzdGluYXRpb24gc2lkZSBzb2Z0d2FyZSBhY2sgcmVzb3VyY2VzCisgKi8KKyNkZWZpbmUgREVTVF9OVU1fUkVTT1VSQ0VTCQk4CisjZGVmaW5lIE1BWF9DUFVTX1BFUl9OT0RFCQkzMgorLyoKKyAqIGNvbXBsZXRpb24gc3RhdHVzZXMgZm9yIHNlbmRpbmcgYSBUTEIgZmx1c2ggbWVzc2FnZQorICovCisjZGVmaW5lCUZMVVNIX1JFVFJZCQkJMQorI2RlZmluZQlGTFVTSF9HSVZFVVAJCQkyCisjZGVmaW5lCUZMVVNIX0NPTVBMRVRFCQkJMworCisvKgorICogRGlzdHJpYnV0aW9uOiAzMiBieXRlcyAoMjU2IGJpdHMpIChieXRlcyAwLTB4MWYgb2YgZGVzY3JpcHRvcikKKyAqIElmIHRoZSAnbXVsdGlsZXZlbCcgZmxhZyBpbiB0aGUgaGVhZGVyIHBvcnRpb24gb2YgdGhlIGRlc2NyaXB0b3IKKyAqIGhhcyBiZWVuIHNldCB0byAwLCB0aGVuIGVuZHBvaW50IG11bHRpLXVuaWNhc3QgbW9kZSBpcyBzZWxlY3RlZC4KKyAqIFRoZSBkaXN0cmlidXRpb24gc3BlY2lmaWNhdGlvbiAoMzIgYnl0ZXMpIGlzIGludGVycHJldGVkIGFzIGEgMjU2LWJpdAorICogZGlzdHJpYnV0aW9uIHZlY3Rvci4gQWRqYWNlbnQgYml0cyBjb3JyZXNwb25kIHRvIGNvbnNlY3V0aXZlIGV2ZW4gbnVtYmVyZWQKKyAqIG5vZGVJRHMuIFRoZSByZXN1bHQgb2YgYWRkaW5nIHRoZSBpbmRleCBvZiBhIGdpdmVuIGJpdCB0byB0aGUgMTUtYml0CisgKiAnYmFzZV9kZXN0X25vZGVpZCcgZmllbGQgb2YgdGhlIGhlYWRlciBjb3JyZXNwb25kcyB0byB0aGUKKyAqIGRlc3RpbmF0aW9uIG5vZGVJRCBhc3NvY2lhdGVkIHdpdGggdGhhdCBzcGVjaWZpZWQgYml0LgorICovCitzdHJ1Y3QgYmF1X3RhcmdldF9ub2RlbWFzayB7CisJdW5zaWduZWQgbG9uZyBiaXRzW0JJVFNfVE9fTE9OR1MoMjU2KV07Cit9OworCisvKgorICogbWFzayBvZiBjcHUncyBvbiBhIG5vZGUKKyAqIChkdXJpbmcgaW5pdGlhbGl6YXRpb24gd2UgbmVlZCB0byBjaGVjayB0aGF0IHVuc2lnbmVkIGxvbmcgaGFzCisgKiAgZW5vdWdoIGJpdHMgZm9yIG1heC4gY3B1J3MgcGVyIG5vZGUpCisgKi8KK3N0cnVjdCBiYXVfbG9jYWxfY3B1bWFzayB7CisJdW5zaWduZWQgbG9uZyBiaXRzOworfTsKKworLyoKKyAqIFBheWxvYWQ6IDE2IGJ5dGVzICgxMjggYml0cykgKGJ5dGVzIDB4MjAtMHgyZiBvZiBkZXNjcmlwdG9yKQorICogb25seSAxMiBieXRlcyAoOTYgYml0cykgb2YgdGhlIHBheWxvYWQgYXJlYSBhcmUgdXNhYmxlLgorICogQW4gYWRkaXRpb25hbCAzIGJ5dGVzIChiaXRzIDI3OjQpIG9mIHRoZSBoZWFkZXIgYWRkcmVzcyBhcmUgY2FycmllZAorICogdG8gdGhlIG5leHQgYnl0ZXMgb2YgdGhlIGRlc3RpbmF0aW9uIHBheWxvYWQgcXVldWUuCisgKiBBbmQgYW4gYWRkaXRpb25hbCAyIGJ5dGVzIG9mIHRoZSBoZWFkZXIgU3VwcGxfQSBmaWVsZCBhcmUgYWxzbworICogY2FycmllZCB0byB0aGUgZGVzdGluYXRpb24gcGF5bG9hZCBxdWV1ZS4KKyAqIEJ1dCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgU3VwcGxfQSBiZWNvbWVzIGJpdHMgMTI3OjEyMCAodGhlIDE2dGggYnl0ZSkKKyAqIG9mIHRoZSBkZXN0aW5hdGlvbiBwYXlsb2FkIHF1ZXVlLCB3aGljaCBpcyB3cml0dGVuIGJ5IHRoZSBoYXJkd2FyZQorICogd2l0aCB0aGUgcy93IGFjayByZXNvdXJjZSBiaXQgdmVjdG9yLgorICogWyBlZmZlY3RpdmUgbWVzc2FnZSBjb250ZW50cyAoMTYgYnl0ZXMgKDEyOCBiaXRzKSBtYXhpbXVtKSwgbm90IGNvdW50aW5nCisgKiAgIHRoZSBzL3cgYWNrIGJpdCB2ZWN0b3IgIF0KKyAqLworCisvKgorICogVGhlIHBheWxvYWQgaXMgc29mdHdhcmUtZGVmaW5lZCBmb3IgSU5URCB0cmFuc2FjdGlvbnMKKyAqLworc3RydWN0IGJhdV9tc2dfcGF5bG9hZCB7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwkJLyogc2lnbmlmaWVzIGEgcGFnZSBvciBhbGwgVExCJ3MKKwkJCQkJCW9mIHRoZSBjcHUgKi8KKwkvKiA2NCBiaXRzICovCisJdW5zaWduZWQgc2hvcnQgc2VuZGluZ19jcHU7CS8qIGZpbGxlZCBpbiBieSBzZW5kZXIgKi8KKwkvKiAxNiBiaXRzICovCisJdW5zaWduZWQgc2hvcnQgYWNrbm93bGVkZ2VfY291bnQ7LyogZmlsbGVkIGluIGJ5IGRlc3RpbmF0aW9uICovCisJLyogMTYgYml0cyAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDE6MzI7CS8qIG5vdCB1c2FibGUgKi8KK307CisKKworLyoKKyAqIE1lc3NhZ2UgaGVhZGVyOiAgMTYgYnl0ZXMgKDEyOCBiaXRzKSAoYnl0ZXMgMHgzMC0weDNmIG9mIGRlc2NyaXB0b3IpCisgKiBzZWUgdGFibGUgNC4yLjMuMC4xIGluIGJyb2FjYXN0X2Fzc2lzdCBzcGVjLgorICovCitzdHJ1Y3QgYmF1X21zZ19oZWFkZXIgeworCWludCBkZXN0X3N1Ym5vZGVpZDo2OwkvKiBtdXN0IGJlIHplcm8gKi8KKwkvKiBiaXRzIDU6MCAqLworCWludCBiYXNlX2Rlc3Rfbm9kZWlkOjE1OyAvKiBuYXNpZD4+MSAocG5vZGUpIG9mIGZpcnN0IGJpdCBpbiBub2RlX21hcCAqLworCS8qIGJpdHMgMjA6NiAqLworCWludCBjb21tYW5kOjg7CQkvKiBtZXNzYWdlIHR5cGUgKi8KKwkvKiBiaXRzIDI4OjIxICovCisJCQkJLyogMHgzODogU04zbmV0IEVuZFBvaW50IE1lc3NhZ2UgKi8KKwlpbnQgcnN2ZF8xOjM7CQkvKiBtdXN0IGJlIHplcm8gKi8KKwkvKiBiaXRzIDMxOjI5ICovCisJCQkJLyogaW50IHdpbGwgYWxpZ24gb24gMzIgYml0cyAqLworCWludCByc3ZkXzI6OTsJCS8qIG11c3QgYmUgemVybyAqLworCS8qIGJpdHMgNDA6MzIgKi8KKwkJCQkvKiBTdXBwbF9BIGlzIDU2LTQxICovCisJaW50IHBheWxvYWRfMmE6ODsJLyogYmVjb21lcyBieXRlIDE2IG9mIG1zZyAqLworCS8qIGJpdHMgNDg6NDEgKi8JLyogbm90IGN1cnJlbnRseSB1c2luZyAqLworCWludCBwYXlsb2FkXzJiOjg7CS8qIGJlY29tZXMgYnl0ZSAxNyBvZiBtc2cgKi8KKwkvKiBiaXRzIDU2OjQ5ICovCS8qIG5vdCBjdXJyZW50bHkgdXNpbmcgKi8KKwkJCQkvKiBBZGRyZXNzIGZpZWxkICg5Njo1NykgaXMgbmV2ZXIgdXNlZCBhcyBhbgorCQkJCSAgIGFkZHJlc3MgKHRoZXNlIGFyZSBhZGRyZXNzIGJpdHMgNDI6MykgKi8KKwlpbnQgcnN2ZF8zOjE7CQkvKiBtdXN0IGJlIHplcm8gKi8KKwkvKiBiaXQgNTcgKi8KKwkJCQkvKiBhZGRyZXNzIGJpdHMgMjc6NCBhcmUgcGF5bG9hZCAqLworCQkJCS8qIHRoZXNlIDI0IGJpdHMgYmVjb21lIGJ5dGVzIDEyLTE0IG9mIG1zZyAqLworCWludCByZXBsaWVkX3RvOjE7CS8qIHNlbnQgYXMgMCBieSB0aGUgc291cmNlIHRvIGJ5dGUgMTIgKi8KKwkvKiBiaXQgNTggKi8KKworCWludCBwYXlsb2FkXzFhOjU7CS8qIG5vdCBjdXJyZW50bHkgdXNlZCAqLworCS8qIGJpdHMgNjM6NTkgKi8KKwlpbnQgcGF5bG9hZF8xYjo4OwkvKiBub3QgY3VycmVudGx5IHVzZWQgKi8KKwkvKiBiaXRzIDcxOjY0ICovCisJaW50IHBheWxvYWRfMWM6ODsJLyogbm90IGN1cnJlbnRseSB1c2VkICovCisJLyogYml0cyA3OTo3MiAqLworCWludCBwYXlsb2FkXzFkOjI7CS8qIG5vdCBjdXJyZW50bHkgdXNlZCAqLworCS8qIGJpdHMgODE6ODAgKi8KKworCWludCByc3ZkXzQ6NzsJCS8qIG11c3QgYmUgemVybyAqLworCS8qIGJpdHMgODg6ODIgKi8KKwlpbnQgc3dfYWNrX2ZsYWc6MTsJLyogc29mdHdhcmUgYWNrbm93bGVkZ2UgZmxhZyAqLworCS8qIGJpdCA4OSAqLworCQkJCS8qIElOVEQgdHJhc2FjdGlvbnMgYXQgZGVzdGluYXRpb24gYXJlIHRvCisJCQkJICAgd2FpdCBmb3Igc29mdHdhcmUgYWNrbm93bGVkZ2UgKi8KKwlpbnQgcnN2ZF81OjY7CQkvKiBtdXN0IGJlIHplcm8gKi8KKwkvKiBiaXRzIDk1OjkwICovCisJaW50IHJzdmRfNjo1OwkJLyogbXVzdCBiZSB6ZXJvICovCisJLyogYml0cyAxMDA6OTYgKi8KKwlpbnQgaW50X2JvdGg6MTsJCS8qIGlmIDEsIGludGVycnVwdCBib3RoIHNvY2tldHMgb24gdGhlIGJsYWRlICovCisJLyogYml0IDEwMSovCisJaW50IGZhaXJuZXNzOjM7CQkvKiB1c3VhbGx5IHplcm8gKi8KKwkvKiBiaXRzIDEwNDoxMDIgKi8KKwlpbnQgbXVsdGlsZXZlbDoxOwkvKiBtdWx0aS1sZXZlbCBtdWx0aWNhc3QgZm9ybWF0ICovCisJLyogYml0IDEwNSAqLworCQkJCS8qIDAgZm9yIFRMQjogZW5kcG9pbnQgbXVsdGktdW5pY2FzdCBtZXNzYWdlcyAqLworCWludCBjaGFpbmluZzoxOwkJLyogbmV4dCBkZXNjcmlwdG9yIGlzIHBhcnQgb2YgdGhpcyBhY3RpdmF0aW9uKi8KKwkvKiBiaXQgMTA2ICovCisJaW50IHJzdmRfNzoyMTsJCS8qIG11c3QgYmUgemVybyAqLworCS8qIGJpdHMgMTI3OjEwNyAqLworfTsKKworLyoKKyAqIFRoZSBhY3RpdmF0aW9uIGRlc2NyaXB0b3I6CisgKiBUaGUgZm9ybWF0IG9mIHRoZSBtZXNzYWdlIHRvIHNlbmQsIHBsdXMgYWxsIGFjY29tcGFueWluZyBjb250cm9sCisgKiBTaG91bGQgYmUgNjQgYnl0ZXMKKyAqLworc3RydWN0IGJhdV9kZXNjIHsKKwlzdHJ1Y3QgYmF1X3RhcmdldF9ub2RlbWFzayBkaXN0cmlidXRpb247CisJLyoKKwkgKiBtZXNzYWdlIHRlbXBsYXRlLCBjb25zaXN0aW5nIG9mIGhlYWRlciBhbmQgcGF5bG9hZDoKKwkgKi8KKwlzdHJ1Y3QgYmF1X21zZ19oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBiYXVfbXNnX3BheWxvYWQgcGF5bG9hZDsKK307CisvKgorICogICAtcGF5bG9hZC0tICAgIC0tLS0tLS0tLWhlYWRlci0tLS0tLQorICogICBieXRlcyAwLTExICAgIGJpdHMgNDEtNTYgIGJpdHMgNTgtODEKKyAqICAgICAgIEEgICAgICAgICAgIEIgICgyKSAgICAgIEMgKDMpCisgKgorICogICAgICAgICAgICBBL0IvQyBhcmUgbW92ZWQgdG86CisgKiAgICAgICBBICAgICAgICAgICAgQyAgICAgICAgICBCCisgKiAgIGJ5dGVzIDAtMTEgIGJ5dGVzIDEyLTE0ICBieXRlcyAxNi0xNyAgKGJ5dGUgMTUgZmlsbGVkIGluIGJ5IGh3IGFzIHZlY3RvcikKKyAqICAgLS0tLS0tLS0tLS0tcGF5bG9hZCBxdWV1ZS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFRoZSBwYXlsb2FkIHF1ZXVlIG9uIHRoZSBkZXN0aW5hdGlvbiBzaWRlIGlzIGFuIGFycmF5IG9mIHRoZXNlLgorICogV2l0aCBCQVVfTUlTQ19DT05UUk9MIHNldCBmb3Igc29mdHdhcmUgYWNrbm93bGVkZ2UgbW9kZSwgdGhlIG1lc3NhZ2VzCisgKiBhcmUgMzIgYnl0ZXMgKDIgbWljcm9wYWNrZXRzKSAoMjU2IGJpdHMpIGluIGxlbmd0aCwgYnV0IGNvbnRhaW4gb25seSAxNworICogYnl0ZXMgb2YgdXNhYmxlIGRhdGEsIGluY2x1ZGluZyB0aGUgc3cgYWNrIHZlY3RvciBpbiBieXRlIDE1IChiaXRzIDEyNzoxMjApCisgKiAoMTIgYnl0ZXMgY29tZSBmcm9tIGJhdV9tc2dfcGF5bG9hZCwgMyBmcm9tIHBheWxvYWRfMSwgMiBmcm9tCisgKiAgc3dfYWNrX3ZlY3RvciBhbmQgcGF5bG9hZF8yKQorICogIkVuYWJsaW5nIFNvZnR3YXJlIEFja25vd2xlZGdtZW50IG1vZGUgKHNlZSBTZWN0aW9uIDQuMy4zIFNvZnR3YXJlCisgKiAgQWNrbm93bGVkZ2UgUHJvY2Vzc2luZykgYWxzbyBzZWxlY3RzIDMyIGJ5dGUgKDE3IGJ5dGVzIHVzYWJsZSkgcGF5bG9hZAorICogIG9wZXJhdGlvbi4iCisgKi8KK3N0cnVjdCBiYXVfcGF5bG9hZF9xdWV1ZV9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwkJLyogc2lnbmlmaWVzIGEgcGFnZSBvciBhbGwgVExCJ3MKKwkJCQkJCW9mIHRoZSBjcHUgKi8KKwkvKiA2NCBiaXRzLCBieXRlcyAwLTcgKi8KKworCXVuc2lnbmVkIHNob3J0IHNlbmRpbmdfY3B1OwkvKiBjcHUgdGhhdCBzZW50IHRoZSBtZXNzYWdlICovCisJLyogMTYgYml0cywgYnl0ZXMgOC05ICovCisKKwl1bnNpZ25lZCBzaG9ydCBhY2tub3dsZWRnZV9jb3VudDsgLyogZmlsbGVkIGluIGJ5IGRlc3RpbmF0aW9uICovCisJLyogMTYgYml0cywgYnl0ZXMgMTAtMTEgKi8KKworCXVuc2lnbmVkIHNob3J0IHJlcGxpZWRfdG86MTsJLyogc2VudCBhcyAwIGJ5IHRoZSBzb3VyY2UgKi8KKwkvKiAxIGJpdCAqLworCXVuc2lnbmVkIHNob3J0IHVudXNlZDE6NzsgICAgICAgLyogbm90IGN1cnJlbnRseSB1c2luZyAqLworCS8qIDcgYml0czogYnl0ZSAxMikgKi8KKworCXVuc2lnbmVkIGNoYXIgdW51c2VkMlsyXTsJLyogbm90IGN1cnJlbnRseSB1c2luZyAqLworCS8qIGJ5dGVzIDEzLTE0ICovCisKKwl1bnNpZ25lZCBjaGFyIHN3X2Fja192ZWN0b3I7CS8qIGZpbGxlZCBpbiBieSB0aGUgaGFyZHdhcmUgKi8KKwkvKiBieXRlIDE1IChiaXRzIDEyNzoxMjApICovCisKKwl1bnNpZ25lZCBjaGFyIHVudXNlZDRbM107CS8qIG5vdCBjdXJyZW50bHkgdXNpbmcgYnl0ZXMgMTctMTkgKi8KKwkvKiBieXRlcyAxNy0xOSAqLworCisJaW50IG51bWJlcl9vZl9jcHVzOwkJLyogZmlsbGVkIGluIGF0IGRlc3RpbmF0aW9uICovCisJLyogMzIgYml0cywgYnl0ZXMgMjAtMjMgKGFsaWduZWQpICovCisKKwl1bnNpZ25lZCBjaGFyIHVudXNlZDVbOF07ICAgICAgIC8qIG5vdCB1c2luZyAqLworCS8qIGJ5dGVzIDI0LTMxICovCit9OworCisvKgorICogb25lIGZvciBldmVyeSBzbG90IGluIHRoZSBkZXN0aW5hdGlvbiBwYXlsb2FkIHF1ZXVlCisgKi8KK3N0cnVjdCBiYXVfbXNnX3N0YXR1cyB7CisJc3RydWN0IGJhdV9sb2NhbF9jcHVtYXNrIHNlZW5fYnk7CS8qIG1hcCBvZiBjcHUncyAqLworfTsKKworLyoKKyAqIG9uZSBmb3IgZXZlcnkgc2xvdCBpbiB0aGUgZGVzdGluYXRpb24gc29mdHdhcmUgYWNrIHJlc291cmNlcworICovCitzdHJ1Y3QgYmF1X3N3X2Fja19zdGF0dXMgeworCXN0cnVjdCBiYXVfcGF5bG9hZF9xdWV1ZV9lbnRyeSAqbXNnOwkvKiBhc3NvY2lhdGVkIG1lc3NhZ2UgKi8KKwlpbnQgd2F0Y2hlcjsJCQkJLyogY3B1IG1vbml0b3JpbmcsIG9yIC0xICovCit9OworCisvKgorICogb25lIG9uIGV2ZXJ5IG5vZGUgYW5kIHBlci1jcHU7IHRvIGxvY2F0ZSB0aGUgc29mdHdhcmUgdGFibGVzCisgKi8KK3N0cnVjdCBiYXVfY29udHJvbCB7CisJc3RydWN0IGJhdV9kZXNjICpkZXNjcmlwdG9yX2Jhc2U7CisJc3RydWN0IGJhdV9wYXlsb2FkX3F1ZXVlX2VudHJ5ICpiYXVfbXNnX2hlYWQ7CisJc3RydWN0IGJhdV9wYXlsb2FkX3F1ZXVlX2VudHJ5ICp2YV9xdWV1ZV9maXJzdDsKKwlzdHJ1Y3QgYmF1X3BheWxvYWRfcXVldWVfZW50cnkgKnZhX3F1ZXVlX2xhc3Q7CisJc3RydWN0IGJhdV9tc2dfc3RhdHVzICptc2dfc3RhdHVzZXM7CisJaW50ICp3YXRjaGluZzsgLyogcG9pbnRlciB0byBhcnJheSAqLworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBwZXJfY3B1IGZvciBVViBUTEIgc2hvb3Rkb3duIHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCBwdGNfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgcHRjX2k7CS8qIG51bWJlciBvZiBJUEktc3R5bGUgZmx1c2hlcyAqLworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdG9yOwkvKiBudW1iZXIgb2Ygbm9kZXMgdGhpcyBjcHUgc2VudCB0byAqLworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdGVlOwkvKiB0aW1lcyBjcHUgd2FzIHJlbW90ZWx5IHJlcXVlc3RlZCAqLworCXVuc2lnbmVkIGxvbmcgYWxsdGxiOwkvKiB0aW1lcyBhbGwgdGxiJ3Mgb24gdGhpcyBjcHUgd2VyZSBmbHVzaGVkICovCisJdW5zaWduZWQgbG9uZyBvbmV0bGI7CS8qIHRpbWVzIGp1c3Qgb25lIHRsYiBvbiB0aGlzIGNwdSB3YXMgZmx1c2hlZCAqLworCXVuc2lnbmVkIGxvbmcgc19yZXRyeTsJLyogcmV0cmllcyBvbiBzb3VyY2Ugc2lkZSB0aW1lb3V0cyAqLworCXVuc2lnbmVkIGxvbmcgZF9yZXRyeTsJLyogcmV0cmllcyBvbiBkZXN0aW5hdGlvbiBzaWRlIHRpbWVvdXRzICovCisJdW5zaWduZWQgbG9uZyBzZmx1c2g7CS8qIGN5Y2xlcyBzcGVudCBpbiB1dl9mbHVzaF90bGJfb3RoZXJzICovCisJdW5zaWduZWQgbG9uZyBkZmx1c2g7CS8qIGN5Y2xlcyBzcGVudCBvbiBkZXN0aW5hdGlvbiBzaWRlICovCisJdW5zaWduZWQgbG9uZyByZXRyaWVzb2s7IC8qIHN1Y2Nlc3NlcyBvbiByZXRyaWVzICovCisJdW5zaWduZWQgbG9uZyBub21zZzsJLyogaW50ZXJydXB0cyB3aXRoIG5vIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZCBsb25nIG11bHRtc2c7CS8qIGludGVycnVwdHMgd2l0aCBtdWx0aXBsZSBtZXNzYWdlcyAqLworCXVuc2lnbmVkIGxvbmcgbnRhcmdldGVkOy8qIG5vZGVzIHRhcmdldGVkICovCit9OworCitzdGF0aWMgaW5saW5lIGludCBiYXVfbm9kZV9pc3NldChpbnQgbm9kZSwgc3RydWN0IGJhdV90YXJnZXRfbm9kZW1hc2sgKmRzdHApCit7CisJcmV0dXJuIGNvbnN0YW50X3Rlc3RfYml0KG5vZGUsICZkc3RwLT5iaXRzWzBdKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBiYXVfbm9kZV9zZXQoaW50IG5vZGUsIHN0cnVjdCBiYXVfdGFyZ2V0X25vZGVtYXNrICpkc3RwKQoreworCV9fc2V0X2JpdChub2RlLCAmZHN0cC0+Yml0c1swXSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYmF1X25vZGVzX2NsZWFyKHN0cnVjdCBiYXVfdGFyZ2V0X25vZGVtYXNrICpkc3RwLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX3plcm8oJmRzdHAtPmJpdHNbMF0sIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJhdV9jcHViaXRzX2NsZWFyKHN0cnVjdCBiYXVfbG9jYWxfY3B1bWFzayAqZHN0cCwgaW50IG5iaXRzKQoreworCWJpdG1hcF96ZXJvKCZkc3RwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgY3B1Yml0X2lzc2V0KGNwdSwgYmF1X2xvY2FsX2NwdW1hc2spIFwKKwl0ZXN0X2JpdCgoY3B1KSwgKGJhdV9sb2NhbF9jcHVtYXNrKS5iaXRzKQorCitleHRlcm4gaW50IHV2X2ZsdXNoX3RsYl9vdGhlcnMoY3B1bWFza190ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCB1dl9iYXVfbWVzc2FnZV9pbnRyMSh2b2lkKTsKK2V4dGVybiB2b2lkIHV2X2JhdV90aW1lb3V0X2ludHIxKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9YODZfVVZfVVZfQkFVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIGFyY2hpdGVjdHVyYWwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfQVNNX1g4Nl9VVl9VVl9IVUJfSAorI2RlZmluZSBfQVNNX1g4Nl9VVl9VVl9IVUJfSAorCisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKworCisvKgorICogQWRkcmVzc2luZyBUZXJtaW5vbG9neQorICoKKyAqCU0gICAgICAgLSBUaGUgbG93IE0gYml0cyBvZiBhIHBoeXNpY2FsIGFkZHJlc3MgcmVwcmVzZW50IHRoZSBvZmZzZXQKKyAqCQkgIGludG8gdGhlIGJsYWRlIGxvY2FsIG1lbW9yeS4gUkFNIG1lbW9yeSBvbiBhIGJsYWRlIGlzIHBoeXNpY2FsbHkKKyAqCQkgIGNvbnRpZ3VvdXMgKGFsdGhvdWdoIHZhcmlvdXMgSU8gc3BhY2VzIG1heSBwdW5jaCBob2xlcyBpbgorICoJCSAgaXQpLi4KKyAqCisgKiAJTgktIE51bWJlciBvZiBiaXRzIGluIHRoZSBub2RlIHBvcnRpb24gb2YgYSBzb2NrZXQgcGh5c2ljYWwKKyAqIAkJICBhZGRyZXNzLgorICoKKyAqIAlOQVNJRCAgIC0gbmV0d29yayBJRCBvZiBhIHJvdXRlciwgTWJyaWNrIG9yIENicmljay4gTmFzaWQgdmFsdWVzIG9mCisgKiAJIAkgIHJvdXRlcnMgYWx3YXlzIGhhdmUgbG93IGJpdCBvZiAxLCBDL01Ccmlja3MgaGF2ZSBsb3cgYml0CisgKiAJCSAgZXF1YWwgdG8gMC4gTW9zdCBhZGRyZXNzaW5nIG1hY3JvcyB0aGF0IHRhcmdldCBVViBodWIgY2hpcHMKKyAqIAkJICByaWdodCBzaGlmdCB0aGUgTkFTSUQgYnkgMSB0byBleGNsdWRlIHRoZSBhbHdheXMtemVybyBiaXQuCisgKiAJCSAgTkFTSURzIGNvbnRhaW4gdXAgdG8gMTUgYml0cy4KKyAqCisgKglHTk9ERSAgIC0gTkFTSUQgcmlnaHQgc2hpZnRlZCBieSAxIGJpdC4gTW9zdCBtbXJzIGNvbnRhaW4gZ25vZGVzIGluc3RlYWQKKyAqCQkgIG9mIG5hc2lkcy4KKyAqCisgKiAJUE5PREUgICAtIHRoZSBsb3cgTiBiaXRzIG9mIHRoZSBHTk9ERS4gVGhlIFBOT0RFIGlzIHRoZSBtb3N0IHVzZWZ1bCB2YXJpYW50CisgKiAJCSAgb2YgdGhlIG5hc2lkIGZvciBzb2NrZXQgdXNhZ2UuCisgKgorICoKKyAqICBOdW1hTGluayBHbG9iYWwgUGh5c2ljYWwgQWRkcmVzcyBGb3JtYXQ6CisgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICB8MDAuLjAwMHwgICAgICBHTk9ERSAgICAgICAgICAgICB8ICAgICAgTm9kZU9mZnNldCAgICAgfAorICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICB8PC0tLS0tLS01MyAtIE0gYml0cyAtLS0+fDwtLS0tLS0tLU0gYml0cyAtLS0tLT4KKyAqCisgKglNIC0gbnVtYmVyIG9mIG5vZGUgb2Zmc2V0IGJpdHMgKDM1IC4uIDQwKQorICoKKyAqCisgKiAgTWVtb3J5L1VWLUhVQiBQcm9jZXNzb3IgU29ja2V0IEFkZHJlc3MgRm9ybWF0OgorICogICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgfDAwLi4wMDAwMDAwMDAwMDB8ICAgUE5PREUgICAgICAgfCAgICAgIE5vZGVPZmZzZXQgICAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgPC0tLSBOIGJpdHMgLS0tPnw8LS0tLS0tLS1NIGJpdHMgLS0tLS0+CisgKgorICoJTSAtIG51bWJlciBvZiBub2RlIG9mZnNldCBiaXRzICgzNSAuLiA0MCkKKyAqCU4gLSBudW1iZXIgb2YgUE5PREUgYml0cyAoMCAuLiAxMCkKKyAqCisgKgkJTm90ZTogTSArIE4gY2Fubm90IGN1cnJlbnRseSBleGNlZWQgNDQgKHg4Nl82NCkgb3IgNDYgKElBNjQpLgorICoJCVRoZSBhY3R1YWwgdmFsdWVzIGFyZSBjb25maWd1cmF0aW9uIGRlcGVuZGVudCBhbmQgYXJlIHNldCBhdAorICoJCWJvb3QgdGltZS4gTSAmIE4gdmFsdWVzIGFyZSBzZXQgYnkgdGhlIGhhcmR3YXJlL0JJT1MgYXQgYm9vdC4KKyAqCisgKgorICogQVBJQ0lEIGZvcm1hdAorICogCU5PVEUhISEhISEgVGhpcyBpcyB0aGUgY3VycmVudCBmb3JtYXQgb2YgdGhlIEFQSUNJRC4gSG93ZXZlciwgY29kZQorICogCXNob3VsZCBhc3N1bWUgdGhhdCB0aGlzIHdpbGwgY2hhbmdlIGluIHRoZSBmdXR1cmUuIFVzZSBmdW5jdGlvbnMKKyAqIAlpbiB0aGlzIGZpbGUgZm9yIGFsbCBBUElDSUQgYml0IG1hbmlwdWxhdGlvbnMgYW5kIGNvbnZlcnNpb24uCisgKgorICogCQkxMTExMTEwMDAwMDAwMDAwCisgKiAJCTU0MzIxMDk4NzY1NDMyMTAKKyAqCQlwcHBwcHBwcHBwbGMwY2NoCisgKgkJc3Nzc3Nzc3Nzc3MKKyAqCisgKgkJCXAgID0gcG5vZGUgYml0cworICoJCQlsID0gIHNvY2tldCBudW1iZXIgb24gYm9hcmQKKyAqCQkJYyAgPSBjb3JlCisgKgkJCWggID0gaHlwZXJ0aHJlYWQKKyAqCQkJcyAgPSBiaXRzIHRoYXQgYXJlIGluIHRoZSBTT0NLRVRfSUQgQ1NSCisgKgorICoJTm90ZTogUHJvY2Vzc29yIG9ubHkgc3VwcG9ydHMgMTIgYml0cyBpbiB0aGUgQVBJQ0lEIHJlZ2lzdGVyLiBUaGUgQUNQSQorICoJICAgICAgdGFibGVzIGhvbGQgYWxsIDE2IGJpdHMuIFNvZnR3YXJlIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHRoaXMuCisgKgorICogCSAgICAgIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBhbGwgcmVmZXJlbmNlcyB0byBBUElDSUQgcmVmZXIgdG8KKyAqIAkgICAgICB0aGUgRlVMTCB2YWx1ZSBjb250YWluZWQgaW4gQUNQSSB0YWJsZXMsIG5vdCB0aGUgc3Vic2V0IGluIHRoZQorICogCSAgICAgIHByb2Nlc3NvciBBUElDSUQgcmVnaXN0ZXIuCisgKi8KKworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgYnJpY2tzIGluIGFsbCBwYXJ0aXRpb25zIGFuZCBpbiBhbGwgY29oZXJlbmN5IGRvbWFpbnMuCisgKiBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnJpY2tzIGFjY2Vzc2libGUgaW4gdGhlIG51bWFsaW5rIGZhYnJpYy4gSXQKKyAqIGluY2x1ZGVzIGFsbCBDICYgTSBicmlja3MuIFJvdXRlcnMgYXJlIE5PVCBpbmNsdWRlZC4KKyAqCisgKiBUaGlzIHZhbHVlIGlzIGFsc28gdGhlIHZhbHVlIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub24tcm91dGVyIE5BU0lEcworICogaW4gdGhlIG51bWFsaW5rIGZhYnJpYy4KKyAqCisgKiBOT1RFOiBhIGJyaWNrIG1heSBjb250YWluIDEgb3IgMiBPUyBub2Rlcy4gRG9uJ3QgZ2V0IHRoZXNlIGNvbmZ1c2VkLgorICovCisjZGVmaW5lIFVWX01BWF9OVU1BTElOS19CTEFERVMJMTYzODQKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIEMvTWJyaWNrcyB3aXRoaW4gYSBzb2Z0d2FyZSBTU0kgKGhhcmR3YXJlIG1heSBzdXBwb3J0CisgKiBtb3JlKS4KKyAqLworI2RlZmluZSBVVl9NQVhfU1NJX0JMQURFUwkyNTYKKworLyoKKyAqIFRoZSBsYXJnZXN0IHBvc3NpYmxlIE5BU0lEIG9mIGEgQyBvciBNIGJyaWNrICgrIDIpCisgKi8KKyNkZWZpbmUgVVZfTUFYX05BU0lEX1ZBTFVFCShVVl9NQVhfTlVNQUxJTktfTk9ERVMgKiAyKQorCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGF0dHJpYnV0ZXMgb2YgdGhlIEhVQiBjaGlwLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZQorICogZnJlcXVlbnRseSByZWZlcmVuY2VkIGFuZCBhcmUga2VwdCBpbiB0aGUgcGVyLWNwdSBkYXRhIGFyZWFzIG9mIGVhY2ggY3B1LgorICogVGhleSBhcmUga2VwdCB0b2dldGhlciBpbiBhIHN0cnVjdCB0byBtaW5pbWl6ZSBjYWNoZSBtaXNzZXMuCisgKi8KK3N0cnVjdCB1dl9odWJfaW5mb19zIHsKKwl1bnNpZ25lZCBsb25nCWdsb2JhbF9tbXJfYmFzZTsKKwl1bnNpZ25lZCBsb25nCWdwYV9tYXNrOworCXVuc2lnbmVkIGxvbmcJZ25vZGVfdXBwZXI7CisJdW5zaWduZWQgbG9uZwlsb3dtZW1fcmVtYXBfdG9wOworCXVuc2lnbmVkIGxvbmcJbG93bWVtX3JlbWFwX2Jhc2U7CisJdW5zaWduZWQgc2hvcnQJcG5vZGU7CisJdW5zaWduZWQgc2hvcnQJcG5vZGVfbWFzazsKKwl1bnNpZ25lZCBzaG9ydAljb2hlcmVuY3lfZG9tYWluX251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydAludW1hX2JsYWRlX2lkOworCXVuc2lnbmVkIGNoYXIJYmxhZGVfcHJvY2Vzc29yX2lkOworCXVuc2lnbmVkIGNoYXIJbV92YWw7CisJdW5zaWduZWQgY2hhcgluX3ZhbDsKK307CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHV2X2h1Yl9pbmZvX3MsIF9fdXZfaHViX2luZm8pOworI2RlZmluZSB1dl9odWJfaW5mbyAJCSgmX19nZXRfY3B1X3ZhcihfX3V2X2h1Yl9pbmZvKSkKKyNkZWZpbmUgdXZfY3B1X2h1Yl9pbmZvKGNwdSkJKCZwZXJfY3B1KF9fdXZfaHViX2luZm8sIGNwdSkpCisKKy8qCisgKiBMb2NhbCAmIEdsb2JhbCBNTVIgc3BhY2UgbWFjcm9zLgorICogCU5vdGU6IG1hY3JvcyBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBPTkxZIGJ5IGlubGluZSBmdW5jdGlvbnMKKyAqIAlpbiB0aGlzIGZpbGUgLSBub3QgYnkgb3RoZXIga2VybmVsIGNvZGUuCisgKiAJCW4gLSAgTkFTSUQgKGZ1bGwgMTUtYml0IGdsb2JhbCBuYXNpZCkKKyAqIAkJZyAtICBHTk9ERSAoZnVsbCAxNS1iaXQgZ2xvYmFsIG5hc2lkLCByaWdodCBzaGlmdGVkIDEpCisgKiAJCXAgLSAgUE5PREUgKGxvY2FsIHBhcnQgb2YgbnNpZHMsIHJpZ2h0IHNoaWZ0ZWQgMSkKKyAqLworI2RlZmluZSBVVl9OQVNJRF9UT19QTk9ERShuKQkJKCgobikgPj4gMSkgJiB1dl9odWJfaW5mby0+cG5vZGVfbWFzaykKKyNkZWZpbmUgVVZfUE5PREVfVE9fTkFTSUQocCkJCSgoKHApIDw8IDEpIHwgdXZfaHViX2luZm8tPmdub2RlX3VwcGVyKQorCisjZGVmaW5lIFVWX0xPQ0FMX01NUl9CQVNFCQkweGY0MDAwMDAwVUwKKyNkZWZpbmUgVVZfR0xPQkFMX01NUjMyX0JBU0UJCTB4ZjgwMDAwMDBVTAorI2RlZmluZSBVVl9HTE9CQUxfTU1SNjRfQkFTRQkJKHV2X2h1Yl9pbmZvLT5nbG9iYWxfbW1yX2Jhc2UpCisjZGVmaW5lIFVWX0xPQ0FMX01NUl9TSVpFCQkoNjRVTCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfU0laRQkJKDY0VUwgKiAxMDI0ICogMTAyNCkKKworI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfUE5PREVfU0hJRlQJMTUKKyNkZWZpbmUgVVZfR0xPQkFMX01NUjY0X1BOT0RFX1NISUZUCTI2CisKKyNkZWZpbmUgVVZfR0xPQkFMX01NUjMyX1BOT0RFX0JJVFMocCkJKChwKSA8PCAoVVZfR0xPQkFMX01NUjMyX1BOT0RFX1NISUZUKSkKKworI2RlZmluZSBVVl9HTE9CQUxfTU1SNjRfUE5PREVfQklUUyhwKQkJCQkJXAorCSgodW5zaWduZWQgbG9uZykocCkgPDwgVVZfR0xPQkFMX01NUjY0X1BOT0RFX1NISUZUKQorCisjZGVmaW5lIFVWX0FQSUNfUE5PREVfU0hJRlQJNgorCisvKgorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLCBzb2NrZXQgbG9jYWwgcGh5c2ljYWwKKyAqIGFkZHJlc3NlcywgYW5kIFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKiAJTm90ZTogdXNlIHRoZSBzdGFuZGFyZCBfX3BhKCkgJiBfX3ZhKCkgbWFjcm9zIGZvciBjb252ZXJ0aW5nCisgKiAJICAgICAgYmV0d2VlbiBzb2NrZXQgdmlydHVhbCBhbmQgc29ja2V0IHBoeXNpY2FsIGFkZHJlc3Nlcy4KKyAqLworCisvKiBzb2NrZXQgcGh5cyBSQU0gLS0+IFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfc29jX3BoeXNfcmFtX3RvX2dwYSh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWlmIChwYWRkciA8IHV2X2h1Yl9pbmZvLT5sb3dtZW1fcmVtYXBfdG9wKQorCQlwYWRkciArPSB1dl9odWJfaW5mby0+bG93bWVtX3JlbWFwX2Jhc2U7CisJcmV0dXJuIHBhZGRyIHwgdXZfaHViX2luZm8tPmdub2RlX3VwcGVyOworfQorCisKKy8qIHNvY2tldCB2aXJ0dWFsIC0tPiBVViBnbG9iYWwgcGh5c2ljYWwgYWRkcmVzcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X2dwYSh2b2lkICp2KQoreworCXJldHVybiBfX3BhKHYpIHwgdXZfaHViX2luZm8tPmdub2RlX3VwcGVyOworfQorCisvKiBzb2NrZXQgdmlydHVhbCAtLT4gVVYgZ2xvYmFsIHBoeXNpY2FsIGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdXZfdmdwYSh2b2lkICp2KQoreworCXJldHVybiAodm9pZCAqKXV2X2dwYSh2KTsKK30KKworLyogVVYgZ2xvYmFsIHBoeXNpY2FsIGFkZHJlc3MgLS0+IHNvY2tldCB2aXJ0dWFsICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnV2X3ZhKHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXJldHVybiBfX3ZhKGdwYSAmIHV2X2h1Yl9pbmZvLT5ncGFfbWFzayk7Cit9CisKKy8qIHBub2RlLCBvZmZzZXQgLS0+IHNvY2tldCB2aXJ0dWFsICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnV2X3Bub2RlX29mZnNldF90b192YWRkcihpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiBfX3ZhKCgodW5zaWduZWQgbG9uZylwbm9kZSA8PCB1dl9odWJfaW5mby0+bV92YWwpIHwgb2Zmc2V0KTsKK30KKworCisvKgorICogRXh0cmFjdCBhIFBOT0RFIGZyb20gYW4gQVBJQ0lEIChmdWxsIGFwaWNpZCwgbm90IHByb2Nlc3NvciBzdWJzZXQpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X2FwaWNpZF90b19wbm9kZShpbnQgYXBpY2lkKQoreworCXJldHVybiAoYXBpY2lkID4+IFVWX0FQSUNfUE5PREVfU0hJRlQpOworfQorCisvKgorICogQWNjZXNzIGdsb2JhbCBNTVJzIHVzaW5nIHRoZSBsb3cgbWVtb3J5IE1NUjMyIHNwYWNlLiBUaGlzIHJlZ2lvbiBzdXBwb3J0cworICogZmFzdGVyIE1NUiBhY2Nlc3MgYnV0IG5vdCBhbGwgTU1ScyBhcmUgYWNjZXNzaWJsZSBpbiB0aGlzIHNwYWNlLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKGludCBwbm9kZSwKKwkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gX192YShVVl9HTE9CQUxfTU1SMzJfQkFTRSB8CisJCSAgICAgICBVVl9HTE9CQUxfTU1SMzJfUE5PREVfQklUUyhwbm9kZSkgfCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfZ2xvYmFsX21tcjMyKGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCSp1dl9nbG9iYWxfbW1yMzJfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X3JlYWRfZ2xvYmFsX21tcjMyKGludCBwbm9kZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gKnV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKHBub2RlLCBvZmZzZXQpOworfQorCisvKgorICogQWNjZXNzIEdsb2JhbCBNTVIgc3BhY2UgdXNpbmcgdGhlIE1NUiBzcGFjZSBsb2NhdGVkIGF0IHRoZSB0b3Agb2YgcGh5c2ljYWwKKyAqIG1lbW9yeS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICp1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhpbnQgcG5vZGUsCisJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIF9fdmEoVVZfR0xPQkFMX01NUjY0X0JBU0UgfAorCQkgICAgVVZfR0xPQkFMX01NUjY0X1BOT0RFX0JJVFMocG5vZGUpIHwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2dsb2JhbF9tbXI2NChpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCXVuc2lnbmVkIGxvbmcgdmFsKQoreworCSp1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X3JlYWRfZ2xvYmFsX21tcjY0KGludCBwbm9kZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKHBub2RlLCBvZmZzZXQpOworfQorCisvKgorICogQWNjZXNzIGh1YiBsb2NhbCBNTVJzLiBGYXN0ZXIgdGhhbiB1c2luZyBnbG9iYWwgc3BhY2UgYnV0IG9ubHkgbG9jYWwgTU1ScworICogYXJlIGFjY2Vzc2libGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqdXZfbG9jYWxfbW1yX2FkZHJlc3ModW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIF9fdmEoVVZfTE9DQUxfTU1SX0JBU0UgfCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9sb2NhbF9tbXIodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuICp1dl9sb2NhbF9tbXJfYWRkcmVzcyhvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfbG9jYWxfbW1yKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwkqdXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSA9IHZhbDsKK30KKworLyoKKyAqIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gY3B1LCBub2RlLCBwbm9kZSwgYW5kIGJsYWRlCisgKiBudW1iZXJzLgorICovCitzdHJ1Y3QgdXZfYmxhZGVfaW5mbyB7CisJdW5zaWduZWQgc2hvcnQJbnJfcG9zc2libGVfY3B1czsKKwl1bnNpZ25lZCBzaG9ydAlucl9vbmxpbmVfY3B1czsKKwl1bnNpZ25lZCBzaG9ydAlwbm9kZTsKK307CitleHRlcm4gc3RydWN0IHV2X2JsYWRlX2luZm8gKnV2X2JsYWRlX2luZm87CitleHRlcm4gc2hvcnQgKnV2X25vZGVfdG9fYmxhZGU7CitleHRlcm4gc2hvcnQgKnV2X2NwdV90b19ibGFkZTsKK2V4dGVybiBzaG9ydCB1dl9wb3NzaWJsZV9ibGFkZXM7CisKKy8qIEJsYWRlLWxvY2FsIGNwdSBudW1iZXIgb2YgY3VycmVudCBjcHUuIE51bWJlcmVkIDAgLi4gPCMgY3B1cyBvbiB0aGUgYmxhZGU+ICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ibGFkZV9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlyZXR1cm4gdXZfaHViX2luZm8tPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKK30KKworLyogQmxhZGUgbnVtYmVyIG9mIGN1cnJlbnQgY3B1LiBOdW1uYmVyZWQgMCAuLiA8I2JsYWRlcyAtMT4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X251bWFfYmxhZGVfaWQodm9pZCkKK3sKKwlyZXR1cm4gdXZfaHViX2luZm8tPm51bWFfYmxhZGVfaWQ7Cit9CisKKy8qIENvbnZlcnQgYSBjcHUgbnVtYmVyIHRvIHRoZSB0aGUgVVYgYmxhZGUgbnVtYmVyICovCitzdGF0aWMgaW5saW5lIGludCB1dl9jcHVfdG9fYmxhZGVfaWQoaW50IGNwdSkKK3sKKwlyZXR1cm4gdXZfY3B1X3RvX2JsYWRlW2NwdV07Cit9CisKKy8qIENvbnZlcnQgbGludXggbm9kZSBudW1iZXIgdG8gdGhlIFVWIGJsYWRlIG51bWJlciAqLworc3RhdGljIGlubGluZSBpbnQgdXZfbm9kZV90b19ibGFkZV9pZChpbnQgbmlkKQoreworCXJldHVybiB1dl9ub2RlX3RvX2JsYWRlW25pZF07Cit9CisKKy8qIENvbnZlcnQgYSBibGFkZSBpZCB0byB0aGUgUE5PREUgb2YgdGhlIGJsYWRlICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ibGFkZV90b19wbm9kZShpbnQgYmlkKQoreworCXJldHVybiB1dl9ibGFkZV9pbmZvW2JpZF0ucG5vZGU7Cit9CisKKy8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGNwdXMgb24gYSBibGFkZSAqLworc3RhdGljIGlubGluZSBpbnQgdXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyhpbnQgYmlkKQoreworCXJldHVybiB1dl9ibGFkZV9pbmZvW2JpZF0ubnJfcG9zc2libGVfY3B1czsKK30KKworLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb25saW5lIGNwdXMgb24gYSBibGFkZSAqLworc3RhdGljIGlubGluZSBpbnQgdXZfYmxhZGVfbnJfb25saW5lX2NwdXMoaW50IGJpZCkKK3sKKwlyZXR1cm4gdXZfYmxhZGVfaW5mb1tiaWRdLm5yX29ubGluZV9jcHVzOworfQorCisvKiBDb252ZXJ0IGEgY3B1IGlkIHRvIHRoZSBQTk9ERSBvZiB0aGUgYmxhZGUgY29udGFpbmluZyB0aGUgY3B1ICovCitzdGF0aWMgaW5saW5lIGludCB1dl9jcHVfdG9fcG5vZGUoaW50IGNwdSkKK3sKKwlyZXR1cm4gdXZfYmxhZGVfaW5mb1t1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KV0ucG5vZGU7Cit9CisKKy8qIENvbnZlcnQgYSBsaW51eCBub2RlIG51bWJlciB0byB0aGUgUE5PREUgb2YgdGhlIGJsYWRlICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ub2RlX3RvX3Bub2RlKGludCBuaWQpCit7CisJcmV0dXJuIHV2X2JsYWRlX2luZm9bdXZfbm9kZV90b19ibGFkZV9pZChuaWQpXS5wbm9kZTsKK30KKworLyogTWF4aW11bSBwb3NzaWJsZSBudW1iZXIgb2YgYmxhZGVzICovCitzdGF0aWMgaW5saW5lIGludCB1dl9udW1fcG9zc2libGVfYmxhZGVzKHZvaWQpCit7CisJcmV0dXJuIHV2X3Bvc3NpYmxlX2JsYWRlczsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X1VWX1VWX0hVQl9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxM2M4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2lycS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTR0kgVVYgSVJRIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1VWX1VWX0lSUV9ICisjZGVmaW5lIF9BU01fWDg2X1VWX1VWX0lSUV9ICisKKy8qIElmIGEgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0dXJlIGdldHMgZGVmaW5lZCwgZWxpbWluYXRlIHRoaXMgb25lLiAqLworc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgeworCV9fdTY0CXZlY3RvcgkJOiAgOCwKKwkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQlkZXN0X21vZGUJOiAgMSwKKwkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCXBvbGFyaXR5CTogIDEsCisJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQl0cmlnZ2VyCQk6ICAxLAorCQltYXNrCQk6ICAxLAorCQlfX3Jlc2VydmVkXzIJOiAxNSwKKwkJZGVzdAkJOiAzMjsKK307CisKK2V4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgdXZfaXJxX2NoaXA7CisKK2V4dGVybiBpbnQgYXJjaF9lbmFibGVfdXZfaXJxKGNoYXIgKiwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBhcmNoX2Rpc2FibGVfdXZfaXJxKGludCwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgdXZfdGVhcmRvd25faXJxKHVuc2lnbmVkIGludCwgaW50LCB1bnNpZ25lZCBsb25nKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1VWX1VWX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2Mjc3OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaApAQCAtMCwwICsxLDEyOTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTR0kgVVYgTU1SIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX0FTTV9YODZfVVZfVVZfTU1SU19ICisjZGVmaW5lIF9BU01fWDg2X1VWX1VWX01NUlNfSAorCisjZGVmaW5lIFVWX01NUl9FTkFCTEUJCSgxVUwgPDwgNjMpCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0JBVV9EQVRBX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJRyAweDYxNjgwVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR18zMiAweDA0MzgKKworI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2JhdV9kYXRhX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9iYXVfZGF0YV9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfRVZFTlRfT0NDVVJSRUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwIDB4NzAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwXzMyIDB4MDA1ZTgKKworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0hDRVJSX1NIRlQgMAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAxVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjBfSENFUlJfU0hGVCAxCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IwX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAyVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjFfSENFUlJfU0hGVCAyCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IxX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA0VUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MSF9IQ0VSUl9TSEZUIDMKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MSF9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwOFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfSENFUlJfU0hGVCA0CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMTBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1hOX0hDRVJSX1NIRlQgNQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1hOX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDIwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TSV9IQ0VSUl9TSEZUIDYKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TSV9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDA0MFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfQU9FUlIwX1NIRlQgNworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDA4MFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IwX0FPRVJSMF9TSEZUIDgKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjBfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwMTAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjFfQU9FUlIwX1NIRlQgOQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMV9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDAyMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xIX0FPRVJSMF9TSEZUIDEwCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEhfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwNDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9BT0VSUjBfU0hGVCAxMQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfWE5fQU9FUlIwX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9YTl9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NJX0FPRVJSMF9TSEZUIDEzCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU0lfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9BT0VSUjFfU0hGVCAxNAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDAwNDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IwX0FPRVJSMV9TSEZUIDE1CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IwX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IxX0FPRVJSMV9TSEZUIDE2CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IxX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEhfQU9FUlIxX1NIRlQgMTcKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MSF9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwMjAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX0FPRVJSMV9TSEZUIDE4CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDQwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9YTl9BT0VSUjFfU0hGVCAxOQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1hOX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDA4MDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU0lfQU9FUlIxX1NIRlQgMjAKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TSV9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAxMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX1ZQSV9JTlRfU0hGVCAyMQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX1ZQSV9JTlRfTUFTSyAweDAwMDAwMDAwMDAyMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NZU1RFTV9TSFVURE9XTl9JTlRfU0hGVCAyMgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NZU1RFTV9TSFVURE9XTl9JTlRfTUFTSyAweDAwMDAwMDAwMDA0MDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMF9TSEZUIDIzCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8wX01BU0sgMHgwMDAwMDAwMDAwODAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzFfU0hGVCAyNAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMV9NQVNLIDB4MDAwMDAwMDAwMTAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8yX1NIRlQgMjUKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzJfTUFTSyAweDAwMDAwMDAwMDIwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfM19TSEZUIDI2CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8zX01BU0sgMHgwMDAwMDAwMDA0MDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzRfU0hGVCAyNworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfNF9NQVNLIDB4MDAwMDAwMDAwODAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF81X1NIRlQgMjgKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzVfTUFTSyAweDAwMDAwMDAwMTAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfNl9TSEZUIDI5CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF82X01BU0sgMHgwMDAwMDAwMDIwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzdfU0hGVCAzMAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfN19NQVNLIDB4MDAwMDAwMDA0MDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF84X1NIRlQgMzEKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzhfTUFTSyAweDAwMDAwMDAwODAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfOV9TSEZUIDMyCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF85X01BU0sgMHgwMDAwMDAwMTAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzEwX1NIRlQgMzMKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzEwX01BU0sgMHgwMDAwMDAwMjAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzExX1NIRlQgMzQKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzExX01BU0sgMHgwMDAwMDAwNDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzEyX1NIRlQgMzUKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzEyX01BU0sgMHgwMDAwMDAwODAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzEzX1NIRlQgMzYKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzEzX01BU0sgMHgwMDAwMDAxMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzE0X1NIRlQgMzcKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzE0X01BU0sgMHgwMDAwMDAyMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzE1X1NIRlQgMzgKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzE1X01BU0sgMHgwMDAwMDA0MDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MMV9OTUlfSU5UX1NIRlQgMzkKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MMV9OTUlfSU5UX01BU0sgMHgwMDAwMDA4MDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TVE9QX0NMT0NLX1NIRlQgNDAKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TVE9QX0NMT0NLX01BU0sgMHgwMDAwMDEwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9BU0lDX1RPX0wxX1NIRlQgNDEKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9BU0lDX1RPX0wxX01BU0sgMHgwMDAwMDIwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MMV9UT19BU0lDX1NIRlQgNDIKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MMV9UT19BU0lDX01BU0sgMHgwMDAwMDQwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MVENfSU5UX1NIRlQgNDMKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MVENfSU5UX01BU0sgMHgwMDAwMDgwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQV9TRVFfVFJJR0dFUl9TSEZUIDQ0CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEFfU0VRX1RSSUdHRVJfTUFTSyAweDAwMDAxMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0lQSV9JTlRfU0hGVCA0NQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0lQSV9JTlRfTUFTSyAweDAwMDAyMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDBfU0hGVCA0NgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDBfTUFTSyAweDAwMDA0MDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDFfU0hGVCA0NworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDFfTUFTSyAweDAwMDA4MDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDJfU0hGVCA0OAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDJfTUFTSyAweDAwMDEwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDNfU0hGVCA0OQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0VYVElPX0lOVDNfTUFTSyAweDAwMDIwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1BST0ZJTEVfSU5UX1NIRlQgNTAKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9QUk9GSUxFX0lOVF9NQVNLIDB4MDAwNDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMF9TSEZUIDUxCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMF9NQVNLIDB4MDAwODAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMV9TSEZUIDUyCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMV9NQVNLIDB4MDAxMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMl9TSEZUIDUzCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMl9NQVNLIDB4MDAyMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDM19TSEZUIDU0CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDM19NQVNLIDB4MDA0MDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQkFVX0RBVEFfU0hGVCA1NQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0JBVV9EQVRBX01BU0sgMHgwMDgwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9QT1dFUl9NQU5BR0VNRU5UX1JFUV9TSEZUIDU2CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUE9XRVJfTUFOQUdFTUVOVF9SRVFfTUFTSyAweDAxMDAwMDAwMDAwMDAwMDBVTAordW5pb24gdXZoX2V2ZW50X29jY3VycmVkMF91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ldmVudF9vY2N1cnJlZDBfcyB7CisJdW5zaWduZWQgbG9uZwlsYl9oY2VyciAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJZ3IwX2hjZXJyICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWdyMV9oY2VyciAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsaF9oY2VyciAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcmhfaGNlcnIgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXhuX2hjZXJyICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlzaV9oY2VyciAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfYW9lcnIwICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWdyMF9hb2VycjAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlncjFfYW9lcnIwICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGhfYW9lcnIwICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXJoX2FvZXJyMCAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwl4bl9hb2VycjAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJc2lfYW9lcnIwICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2FvZXJyMSAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlncjBfYW9lcnIxICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJZ3IxX2FvZXJyMSAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxoX2FvZXJyMSAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlyaF9hb2VycjEgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJeG5fYW9lcnIxICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXNpX2FvZXJyMSAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlyaF92cGlfaW50ICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJc3lzdGVtX3NodXRkb3duX2ludCAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMCAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzEgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8yICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMyAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzQgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF81ICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfNiAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzcgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF84ICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfOSAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzEwICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xMSAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTIgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzEzICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xNCAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTUgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsMV9ubWlfaW50ICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJc3RvcF9jbG9jayAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWFzaWNfdG9fbDEgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsMV90b19hc2ljICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbHRjX2ludCAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxhX3NlcV90cmlnZ2VyICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlpcGlfaW50ICAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJZXh0aW9faW50MCAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWV4dGlvX2ludDEgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlleHRpb19pbnQyICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJZXh0aW9faW50MyAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXByb2ZpbGVfaW50ICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlydGMwICAgICAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcnRjMSAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXJ0YzIgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlydGMzICAgICAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJYmF1X2RhdGEgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXBvd2VyX21hbmFnZW1lbnRfcmVxIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzU3XzYzICAgICAgICAgICA6ICA3OyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQUxJQVMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQUxJQVMgMHgwMDAwMDAwMDAwMDcwMDA4VUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9BTElBU18zMiAweDAwNWYwCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9JTlRfQ01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0lOVF9DTVBCIDB4MjIwODBVTAorCisjZGVmaW5lIFVWSF9JTlRfQ01QQl9SRUFMX1RJTUVfQ01QQl9TSEZUIDAKKyNkZWZpbmUgVVZIX0lOVF9DTVBCX1JFQUxfVElNRV9DTVBCX01BU0sgMHgwMGZmZmZmZmZmZmZmZmZmVUwKKwordW5pb24gdXZoX2ludF9jbXBiX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2ludF9jbXBiX3MgeworCXVuc2lnbmVkIGxvbmcJcmVhbF90aW1lX2NtcGIgOiA1NjsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzU2XzYzICAgICA6ICA4OyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfSU5UX0NNUEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9JTlRfQ01QQyAweDIyMTAwVUwKKworI2RlZmluZSBVVkhfSU5UX0NNUENfUkVBTF9USU1FX0NNUENfU0hGVCAwCisjZGVmaW5lIFVWSF9JTlRfQ01QQ19SRUFMX1RJTUVfQ01QQ19NQVNLIDB4MDBmZmZmZmZmZmZmZmZmZlVMCisKK3VuaW9uIHV2aF9pbnRfY21wY191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9pbnRfY21wY19zIHsKKwl1bnNpZ25lZCBsb25nCXJlYWxfdGltZV9jbXBjIDogNTY7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MyAgICAgOiAgODsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0lOVF9DTVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfSU5UX0NNUEQgMHgyMjE4MFVMCisKKyNkZWZpbmUgVVZIX0lOVF9DTVBEX1JFQUxfVElNRV9DTVBEX1NIRlQgMAorI2RlZmluZSBVVkhfSU5UX0NNUERfUkVBTF9USU1FX0NNUERfTUFTSyAweDAwZmZmZmZmZmZmZmZmZmZVTAorCit1bmlvbiB1dmhfaW50X2NtcGRfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfaW50X2NtcGRfcyB7CisJdW5zaWduZWQgbG9uZwlyZWFsX3RpbWVfY21wZCA6IDU2OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNTZfNjMgICAgIDogIDg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9JUElfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0lQSV9JTlQgMHg2MDUwMFVMCisjZGVmaW5lIFVWSF9JUElfSU5UXzMyIDB4MDM0OAorCisjZGVmaW5lIFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0lQSV9JTlRfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0lQSV9JTlRfREVMSVZFUllfTU9ERV9TSEZUIDgKKyNkZWZpbmUgVVZIX0lQSV9JTlRfREVMSVZFUllfTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9JUElfSU5UX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0lQSV9JTlRfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0lQSV9JTlRfQVBJQ19JRF9NQVNLIDB4MDAwMGZmZmZmZmZmMDAwMFVMCisjZGVmaW5lIFVWSF9JUElfSU5UX1NFTkRfU0hGVCA2MworI2RlZmluZSBVVkhfSVBJX0lOVF9TRU5EX01BU0sgMHg4MDAwMDAwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX2lwaV9pbnRfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfaXBpX2ludF9zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gICAgICAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZWxpdmVyeV9tb2RlIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTJfMTUgICAgOiAgNDsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICAgICAgIDogMzI7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80OF82MiAgICA6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXNlbmQgICAgICAgICAgOiAgMTsgIC8qIFdQICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1QgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVCAweDMyMDA1MFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0ZJUlNUXzMyIDB4MDA5YzAKKworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVF9BRERSRVNTX1NIRlQgNAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVF9BRERSRVNTX01BU0sgMHgwMDAwMDdmZmZmZmZmZmYwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1RfTk9ERV9JRF9TSEZUIDQ5CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0ZJUlNUX05PREVfSURfTUFTSyAweDdmZmUwMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfbGJfYmF1X2ludGRfcGF5bG9hZF9xdWV1ZV9maXJzdF91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9sYl9iYXVfaW50ZF9wYXlsb2FkX3F1ZXVlX2ZpcnN0X3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzM6ICA0OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFkZHJlc3MgOiAzOTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQzXzQ4OiAgNjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlub2RlX2lkIDogMTQ7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF82MyA6ICAxOyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfTEFTVCAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0xBU1QgMHgzMjAwNjBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9MQVNUXzMyIDB4MDA5YzgKKworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9MQVNUX0FERFJFU1NfU0hGVCA0CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0xBU1RfQUREUkVTU19NQVNLIDB4MDAwMDA3ZmZmZmZmZmZmMFVMCisKK3VuaW9uIHV2aF9sYl9iYXVfaW50ZF9wYXlsb2FkX3F1ZXVlX2xhc3RfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfbGJfYmF1X2ludGRfcGF5bG9hZF9xdWV1ZV9sYXN0X3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzM6ICA0OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFkZHJlc3MgOiAzOTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQzXzYzOiAyMTsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX1RBSUwgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9UQUlMIDB4MzIwMDcwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfVEFJTF8zMiAweDAwOWQwCisKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfVEFJTF9BRERSRVNTX1NIRlQgNAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9UQUlMX0FERFJFU1NfTUFTSyAweDAwMDAwN2ZmZmZmZmZmZjBVTAorCit1bmlvbiB1dmhfbGJfYmF1X2ludGRfcGF5bG9hZF9xdWV1ZV90YWlsX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2xiX2JhdV9pbnRkX3BheWxvYWRfcXVldWVfdGFpbF9zIHsKKwl1bnNpZ25lZCBsb25nCXJzdmRfMF8zOiAgNDsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhZGRyZXNzIDogMzk7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80M182MzogMjE7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRSAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFIDB4MzIwMDgwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFXzMyIDB4MGE2OAorCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzBfU0hGVCAwCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzBfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDFVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18xX1NIRlQgMQorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18xX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAyVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfMl9TSEZUIDIKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfMl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwNFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzNfU0hGVCAzCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzNfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDhVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR180X1NIRlQgNAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR180X01BU0sgMHgwMDAwMDAwMDAwMDAwMDEwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfNV9TSEZUIDUKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfNV9NQVNLIDB4MDAwMDAwMDAwMDAwMDAyMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzZfU0hGVCA2CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzZfTUFTSyAweDAwMDAwMDAwMDAwMDAwNDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR183X1NIRlQgNworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR183X01BU0sgMHgwMDAwMDAwMDAwMDAwMDgwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfMF9TSEZUIDgKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDEwMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzFfU0hGVCA5CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzFfTUFTSyAweDAwMDAwMDAwMDAwMDAyMDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8yX1NIRlQgMTAKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfMl9NQVNLIDB4MDAwMDAwMDAwMDAwMDQwMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzNfU0hGVCAxMQorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8zX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfNF9TSEZUIDEyCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzRfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF81X1NIRlQgMTMKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfNV9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzZfU0hGVCAxNAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF82X01BU0sgMHgwMDAwMDAwMDAwMDA0MDAwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfN19TSEZUIDE1CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzdfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAordW5pb24gdXZoX2xiX2JhdV9pbnRkX3NvZnR3YXJlX2Fja25vd2xlZGdlX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2xiX2JhdV9pbnRkX3NvZnR3YXJlX2Fja25vd2xlZGdlX3MgeworCXVuc2lnbmVkIGxvbmcJcGVuZGluZ18wIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlwZW5kaW5nXzEgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXBlbmRpbmdfMiA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcGVuZGluZ18zIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlwZW5kaW5nXzQgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXBlbmRpbmdfNSA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcGVuZGluZ182IDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlwZW5kaW5nXzcgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVvdXRfMCA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJdGltZW91dF8xIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwl0aW1lb3V0XzIgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVvdXRfMyA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJdGltZW91dF80IDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwl0aW1lb3V0XzUgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVvdXRfNiA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJdGltZW91dF83IDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE2XzYzOiA0ODsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX0FMSUFTICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfQUxJQVMgMHgwMDAwMDAwMDAwMzIwMDg4VUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX0FMSUFTXzMyIDB4MGE3MAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MIDB4MzIwMDIwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfMzIgMHgwMDlhOAorCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MX0lOREVYX1NIRlQgMAorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fQ09OVFJPTF9JTkRFWF9NQVNLIDB4MDAwMDAwMDAwMDAwMDAzZlVMCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MX1BVU0hfU0hGVCA2MgorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fQ09OVFJPTF9QVVNIX01BU0sgMHg0MDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfSU5JVF9TSEZUIDYzCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MX0lOSVRfTUFTSyAweDgwMDAwMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfbGJfYmF1X3NiX2FjdGl2YXRpb25fY29udHJvbF91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9jb250cm9sX3MgeworCXVuc2lnbmVkIGxvbmcJaW5kZXggOiAgNjsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzZfNjE6IDU2OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXB1c2ggIDogIDE7ICAvKiBXUCAqLworCXVuc2lnbmVkIGxvbmcJaW5pdCAgOiAgMTsgIC8qIFdQICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMCAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fU1RBVFVTXzAgMHgzMjAwMzBVTAorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fU1RBVFVTXzBfMzIgMHgwMDliMAorCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMF9TVEFUVVNfU0hGVCAwCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMF9TVEFUVVNfTUFTSyAweGZmZmZmZmZmZmZmZmZmZmZVTAorCit1bmlvbiB1dmhfbGJfYmF1X3NiX2FjdGl2YXRpb25fc3RhdHVzXzBfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfbGJfYmF1X3NiX2FjdGl2YXRpb25fc3RhdHVzXzBfcyB7CisJdW5zaWduZWQgbG9uZwlzdGF0dXMgOiA2NDsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMSAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fU1RBVFVTXzEgMHgzMjAwNDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fU1RBVFVTXzFfMzIgMHgwMDliOAorCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMV9TVEFUVVNfU0hGVCAwCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMV9TVEFUVVNfTUFTSyAweGZmZmZmZmZmZmZmZmZmZmZVTAorCit1bmlvbiB1dmhfbGJfYmF1X3NiX2FjdGl2YXRpb25fc3RhdHVzXzFfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfbGJfYmF1X3NiX2FjdGl2YXRpb25fc3RhdHVzXzFfcyB7CisJdW5zaWduZWQgbG9uZwlzdGF0dXMgOiA2NDsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSAweDMyMDAxMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFXzMyIDB4MDA5YTAKKworI2RlZmluZSBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRV9QQUdFX0FERFJFU1NfU0hGVCAxMgorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRV9QQUdFX0FERFJFU1NfTUFTSyAweDAwMDAwN2ZmZmZmZmYwMDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRV9OT0RFX0lEX1NIRlQgNDkKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0VfTk9ERV9JRF9NQVNLIDB4N2ZmZTAwMDAwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9sYl9iYXVfc2JfZGVzY3JpcHRvcl9iYXNlX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2xiX2JhdV9zYl9kZXNjcmlwdG9yX2Jhc2VfcyB7CisJdW5zaWduZWQgbG9uZwlyc3ZkXzBfMTEgICAgOiAxMjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlwYWdlX2FkZHJlc3MgOiAzMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQzXzQ4ICAgOiAgNjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlub2RlX2lkICAgICAgOiAxNDsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzYzICAgICAgOiAgMTsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEUgMHg1MGIyMFVMCisKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX09CRVNFX01TR19TSEZUIDAKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX09CRVNFX01TR19NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMVVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQ0FTVF9EQVRBX1NCX0VSUl9TSEZUIDEKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX0RBVEFfU0JfRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAyVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX05BQ0tfQlVGRl9QQVJJVFlfU0hGVCAyCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQ0FTVF9OQUNLX0JVRkZfUEFSSVRZX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA0VUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX1RJTUVPVVRfU0hGVCAzCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQ0FTVF9USU1FT1VUX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA4VUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX0lOQUNUSVZFX1JFUExZX1NIRlQgNAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfSU5BQ1RJVkVfUkVQTFlfTUFTSyAweDAwMDAwMDAwMDAwMDAwMTBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfVVBHUkFERV9FUlJPUl9TSEZUIDUKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX1VQR1JBREVfRVJST1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwMjBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfUkVHX0NPVU5UX1VOREVSRkxPV19TSEZUIDYKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX1JFR19DT1VOVF9VTkRFUkZMT1dfTUFTSyAweDAwMDAwMDAwMDAwMDAwNDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfUkVQX09CRVNFX01TR19TSEZUIDcKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX1JFUF9PQkVTRV9NU0dfTUFTSyAweDAwMDAwMDAwMDAwMDAwODBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUV9SVU5UX01TR19TSEZUIDgKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVFfUlVOVF9NU0dfTUFTSyAweDAwMDAwMDAwMDAwMDAxMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUV9PQkVTRV9NU0dfU0hGVCA5CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVRX09CRVNFX01TR19NQVNLIDB4MDAwMDAwMDAwMDAwMDIwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVRX0RBVEFfU0JfRVJSX1NIRlQgMTAKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVFfREFUQV9TQl9FUlJfTUFTSyAweDAwMDAwMDAwMDAwMDA0MDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUF9SVU5UX01TR19TSEZUIDExCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVQX1JVTlRfTVNHX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVBfT0JFU0VfTVNHX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVBfT0JFU0VfTVNHX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVBfREFUQV9TQl9FUlJfU0hGVCAxMworI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUF9EQVRBX1NCX0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVQX0NPTU1BTkRfRVJSX1NIRlQgMTQKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVBfQ09NTUFORF9FUlJfTUFTSyAweDAwMDAwMDAwMDAwMDQwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1BFTkRfVElNRU9VVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUEVORF9USU1FT1VUX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUkVRX1JVTlRfTVNHX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUkVRX1JVTlRfTVNHX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUkVRX09CRVNFX01TR19TSEZUIDE3CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUV9PQkVTRV9NU0dfTUFTSyAweDAwMDAwMDAwMDAwMjAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVFfREFUQV9TQl9FUlJfU0hGVCAxOAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVFfREFUQV9TQl9FUlJfTUFTSyAweDAwMDAwMDAwMDAwNDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVBfUlVOVF9NU0dfU0hGVCAxOQorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVBfUlVOVF9NU0dfTUFTSyAweDAwMDAwMDAwMDAwODAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVBfT0JFU0VfTVNHX1NIRlQgMjAKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUkVQX09CRVNFX01TR19NQVNLIDB4MDAwMDAwMDAwMDEwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUF9EQVRBX1NCX0VSUl9TSEZUIDIxCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUF9EQVRBX1NCX0VSUl9NQVNLIDB4MDAwMDAwMDAwMDIwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX0FNT19USU1FT1VUX1NIRlQgMjIKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfQU1PX1RJTUVPVVRfTUFTSyAweDAwMDAwMDAwMDA0MDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19QVVRfVElNRU9VVF9TSEZUIDIzCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1BVVF9USU1FT1VUX01BU0sgMHgwMDAwMDAwMDAwODAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfU1BVUklPVVNfRVZFTlRfU0hGVCAyNAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19TUFVSSU9VU19FVkVOVF9NQVNLIDB4MDAwMDAwMDAwMTAwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9JT0hfREVTVElOQVRJT05fVEFCTEVfUEFSSVRZX1NIRlQgMjUKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lPSF9ERVNUSU5BVElPTl9UQUJMRV9QQVJJVFlfTUFTSyAweDAwMDAwMDAwMDIwMDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfR0VUX0hBRF9FUlJPUl9SRVBMWV9TSEZUIDI2CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9HRVRfSEFEX0VSUk9SX1JFUExZX01BU0sgMHgwMDAwMDAwMDA0MDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0dFVF9USU1FT1VUX1NIRlQgMjcKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0dFVF9USU1FT1VUX01BU0sgMHgwMDAwMDAwMDA4MDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0xPQ0tfTUFOQUdFUl9IQURfRVJST1JfUkVQTFlfU0hGVCAyOAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTE9DS19NQU5BR0VSX0hBRF9FUlJPUl9SRVBMWV9NQVNLIDB4MDAwMDAwMDAxMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9QVVRfSEFEX0VSUk9SX1JFUExZX1NIRlQgMjkKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1BVVF9IQURfRVJST1JfUkVQTFlfTUFTSyAweDAwMDAwMDAwMjAwMDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfUFVUX1RJTUVPVVRfU0hGVCAzMAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfUFVUX1RJTUVPVVRfTUFTSyAweDAwMDAwMDAwNDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfU0JfQUNUSVZBVElPTl9PVkVSUlVOX1NIRlQgMzEKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1NCX0FDVElWQVRJT05fT1ZFUlJVTl9NQVNLIDB4MDAwMDAwMDA4MDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9DT01QTEVURURfR0JfQUNUSVZBVElPTl9IQURfRVJST1JfUkVQTFlfU0hGVCAzMgorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfQ09NUExFVEVEX0dCX0FDVElWQVRJT05fSEFEX0VSUk9SX1JFUExZX01BU0sgMHgwMDAwMDAwMTAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0NPTVBMRVRFRF9HQl9BQ1RJVkFUSU9OX1RJTUVPVVRfU0hGVCAzMworI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfQ09NUExFVEVEX0dCX0FDVElWQVRJT05fVElNRU9VVF9NQVNLIDB4MDAwMDAwMDIwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9ERVNDUklQVE9SX0JVRkZFUl8wX1BBUklUWV9TSEZUIDM0CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9ERVNDUklQVE9SX0JVRkZFUl8wX1BBUklUWV9NQVNLIDB4MDAwMDAwMDQwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9ERVNDUklQVE9SX0JVRkZFUl8xX1BBUklUWV9TSEZUIDM1CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9ERVNDUklQVE9SX0JVRkZFUl8xX1BBUklUWV9NQVNLIDB4MDAwMDAwMDgwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9TT0NLRVRfREVTVElOQVRJT05fVEFCTEVfUEFSSVRZX1NIRlQgMzYKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1NPQ0tFVF9ERVNUSU5BVElPTl9UQUJMRV9QQVJJVFlfTUFTSyAweDAwMDAwMDEwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfQkFVX1JFUExZX1BBWUxPQURfQ09SUlVQVElPTl9TSEZUIDM3CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9CQVVfUkVQTFlfUEFZTE9BRF9DT1JSVVBUSU9OX01BU0sgMHgwMDAwMDAyMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lPX1BPUlRfREVTVElOQVRJT05fVEFCTEVfUEFSSVRZX1NIRlQgMzgKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lPX1BPUlRfREVTVElOQVRJT05fVEFCTEVfUEFSSVRZX01BU0sgMHgwMDAwMDA0MDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lOVERfU09GVF9BQ0tfVElNRU9VVF9TSEZUIDM5CisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9JTlREX1NPRlRfQUNLX1RJTUVPVVRfTUFTSyAweDAwMDAwMDgwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU5UX1JFUF9PQkVTRV9NU0dfU0hGVCA0MAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU5UX1JFUF9PQkVTRV9NU0dfTUFTSyAweDAwMDAwMTAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU5UX1JFUF9DT01NQU5EX0VSUl9TSEZUIDQxCisjZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9JTlRfUkVQX0NPTU1BTkRfRVJSX01BU0sgMHgwMDAwMDIwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lOVF9USU1FT1VUX1NIRlQgNDIKKyNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lOVF9USU1FT1VUX01BU0sgMHgwMDAwMDQwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX2xiX21jYXN0X2FvZXJyMF9ycHRfZW5hYmxlX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2xiX21jYXN0X2FvZXJyMF9ycHRfZW5hYmxlX3MgeworCXVuc2lnbmVkIGxvbmcJbWNhc3Rfb2Jlc2VfbXNnICAgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWNhc3RfZGF0YV9zYl9lcnIgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWNhc3RfbmFja19idWZmX3Bhcml0eSAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWNhc3RfdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWNhc3RfaW5hY3RpdmVfcmVwbHkgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWNhc3RfdXBncmFkZV9lcnJvciAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWNhc3RfcmVnX2NvdW50X3VuZGVyZmxvdyAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWNhc3RfcmVwX29iZXNlX21zZyAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3JlcV9ydW50X21zZyAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3JlcV9vYmVzZV9tc2cgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3JlcV9kYXRhX3NiX2VyciAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3JlcF9ydW50X21zZyAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3JlcF9vYmVzZV9tc2cgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3JlcF9kYXRhX3NiX2VyciAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3JlcF9jb21tYW5kX2VyciAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJdWNhY2hlX3BlbmRfdGltZW91dCAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19yZXFfcnVudF9tc2cgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19yZXFfb2Jlc2VfbXNnICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19yZXFfZGF0YV9zYl9lcnIgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19yZXBfcnVudF9tc2cgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19yZXBfb2Jlc2VfbXNnICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19yZXBfZGF0YV9zYl9lcnIgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19hbW9fdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19wdXRfdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbWFjY19zcHVyaW91c19ldmVudCAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJaW9oX2Rlc3RpbmF0aW9uX3RhYmxlX3Bhcml0eSAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZ2V0X2hhZF9lcnJvcl9yZXBseSAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZ2V0X3RpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbG9ja19tYW5hZ2VyX2hhZF9lcnJvcl9yZXBseSAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcHV0X2hhZF9lcnJvcl9yZXBseSAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcHV0X3RpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc2JfYWN0aXZhdGlvbl9vdmVycnVuICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJY29tcGxldGVkX2diX2FjdGl2YXRpb25faGFkX2Vycm9yX3JlcGx5IDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJY29tcGxldGVkX2diX2FjdGl2YXRpb25fdGltZW91dCAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzY3JpcHRvcl9idWZmZXJfMF9wYXJpdHkgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzY3JpcHRvcl9idWZmZXJfMV9wYXJpdHkgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc29ja2V0X2Rlc3RpbmF0aW9uX3RhYmxlX3Bhcml0eSAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJYmF1X3JlcGx5X3BheWxvYWRfY29ycnVwdGlvbiAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJaW9fcG9ydF9kZXN0aW5hdGlvbl90YWJsZV9wYXJpdHkgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJaW50ZF9zb2Z0X2Fja190aW1lb3V0ICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJaW50X3JlcF9vYmVzZV9tc2cgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJaW50X3JlcF9jb21tYW5kX2VyciAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJaW50X3RpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80M182MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMjE7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfTE9DQUxfSU5UMF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHIDB4NjEwMDBVTAorCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9sb2NhbF9pbnQwX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9sb2NhbF9pbnQwX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRSAweDY1MDAwVUwKKworI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSENFUlJfU0hGVCAwCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMVVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjBfSENFUlJfU0hGVCAxCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjBfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfR1IxX0hDRVJSX1NIRlQgMgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfR1IxX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA0VUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xIX0hDRVJSX1NIRlQgMworI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEhfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDhVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfUkhfSENFUlJfU0hGVCA0CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9SSF9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAxMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9YTl9IQ0VSUl9TSEZUIDUKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1hOX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDIwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NJX0hDRVJSX1NIRlQgNgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfU0lfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwNDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfQU9FUlIwX1NIRlQgNworI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwMDgwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMF9BT0VSUjBfU0hGVCA4CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjBfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwMTAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMV9BT0VSUjBfU0hGVCA5CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjFfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwMjAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xIX0FPRVJSMF9TSEZUIDEwCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MSF9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDA0MDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfUkhfQU9FUlIwX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1JIX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9YTl9BT0VSUjBfU0hGVCAxMgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfWE5fQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NJX0FPRVJSMF9TSEZUIDEzCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9TSV9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfQU9FUlIxX1NIRlQgMTQKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDAwNDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjBfQU9FUlIxX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMF9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfR1IxX0FPRVJSMV9TSEZUIDE2CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjFfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xIX0FPRVJSMV9TSEZUIDE3CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MSF9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwMjAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfUkhfQU9FUlIxX1NIRlQgMTgKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1JIX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDA0MDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9YTl9BT0VSUjFfU0hGVCAxOQorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfWE5fQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDgwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NJX0FPRVJSMV9TSEZUIDIwCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9TSV9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAxMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfUkhfVlBJX0lOVF9TSEZUIDIxCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9SSF9WUElfSU5UX01BU0sgMHgwMDAwMDAwMDAwMjAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NZU1RFTV9TSFVURE9XTl9JTlRfU0hGVCAyMgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfU1lTVEVNX1NIVVRET1dOX0lOVF9NQVNLIDB4MDAwMDAwMDAwMDQwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzBfU0hGVCAyMworI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8wX01BU0sgMHgwMDAwMDAwMDAwODAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMV9TSEZUIDI0CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzFfTUFTSyAweDAwMDAwMDAwMDEwMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8yX1NIRlQgMjUKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMl9NQVNLIDB4MDAwMDAwMDAwMjAwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzNfU0hGVCAyNgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8zX01BU0sgMHgwMDAwMDAwMDA0MDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfNF9TSEZUIDI3CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzRfTUFTSyAweDAwMDAwMDAwMDgwMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF81X1NIRlQgMjgKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfNV9NQVNLIDB4MDAwMDAwMDAxMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzZfU0hGVCAyOQorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF82X01BU0sgMHgwMDAwMDAwMDIwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfN19TSEZUIDMwCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzdfTUFTSyAweDAwMDAwMDAwNDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF84X1NIRlQgMzEKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfOF9NQVNLIDB4MDAwMDAwMDA4MDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzlfU0hGVCAzMgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF85X01BU0sgMHgwMDAwMDAwMTAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTBfU0hGVCAzMworI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xMF9NQVNLIDB4MDAwMDAwMDIwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzExX1NIRlQgMzQKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTFfTUFTSyAweDAwMDAwMDA0MDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xMl9TSEZUIDM1CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzEyX01BU0sgMHgwMDAwMDAwODAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTNfU0hGVCAzNgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xM19NQVNLIDB4MDAwMDAwMTAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzE0X1NIRlQgMzcKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTRfTUFTSyAweDAwMDAwMDIwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xNV9TSEZUIDM4CisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzE1X01BU0sgMHgwMDAwMDA0MDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0wxX05NSV9JTlRfU0hGVCAzOQorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTDFfTk1JX0lOVF9NQVNLIDB4MDAwMDAwODAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9TVE9QX0NMT0NLX1NIRlQgNDAKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NUT1BfQ0xPQ0tfTUFTSyAweDAwMDAwMTAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfQVNJQ19UT19MMV9TSEZUIDQxCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9BU0lDX1RPX0wxX01BU0sgMHgwMDAwMDIwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0wxX1RPX0FTSUNfU0hGVCA0MgorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTDFfVE9fQVNJQ19NQVNLIDB4MDAwMDA0MDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MVENfSU5UX1NIRlQgNDMKKyNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xUQ19JTlRfTUFTSyAweDAwMDAwODAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEFfU0VRX1RSSUdHRVJfU0hGVCA0NAorI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEFfU0VRX1RSSUdHRVJfTUFTSyAweDAwMDAxMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfbG9jYWxfaW50MF9lbmFibGVfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfbG9jYWxfaW50MF9lbmFibGVfcyB7CisJdW5zaWduZWQgbG9uZwlsYl9oY2VyciAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZ3IwX2hjZXJyICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWdyMV9oY2VyciAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsaF9oY2VyciAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcmhfaGNlcnIgICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXhuX2hjZXJyICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzaV9oY2VyciAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbGJfYW9lcnIwICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWdyMF9hb2VycjAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlncjFfYW9lcnIwICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbGhfYW9lcnIwICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJoX2FvZXJyMCAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwl4bl9hb2VycjAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc2lfYW9lcnIwICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2FvZXJyMSAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlncjBfYW9lcnIxICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZ3IxX2FvZXJyMSAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxoX2FvZXJyMSAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyaF9hb2VycjEgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJeG5fYW9lcnIxICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXNpX2FvZXJyMSAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyaF92cGlfaW50ICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3lzdGVtX3NodXRkb3duX2ludCA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMCAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzEgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8yICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMyAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzQgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF81ICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfNiAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzcgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF84ICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfOSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzEwICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xMSAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTIgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzEzICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xNCAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTUgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsMV9ubWlfaW50ICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RvcF9jbG9jayAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWFzaWNfdG9fbDEgICAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlsMV90b19hc2ljICAgICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJbHRjX2ludCAgICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWxhX3NlcV90cmlnZ2VyICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQ1XzYzICAgICAgICAgIDogMTk7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9OT0RFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX05PREVfSUQgMHgwVUwKKworI2RlZmluZSBVVkhfTk9ERV9JRF9GT1JDRTFfU0hGVCAwCisjZGVmaW5lIFVWSF9OT0RFX0lEX0ZPUkNFMV9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMVVMCisjZGVmaW5lIFVWSF9OT0RFX0lEX01BTlVGQUNUVVJFUl9TSEZUIDEKKyNkZWZpbmUgVVZIX05PREVfSURfTUFOVUZBQ1RVUkVSX01BU0sgMHgwMDAwMDAwMDAwMDAwZmZlVUwKKyNkZWZpbmUgVVZIX05PREVfSURfUEFSVF9OVU1CRVJfU0hGVCAxMgorI2RlZmluZSBVVkhfTk9ERV9JRF9QQVJUX05VTUJFUl9NQVNLIDB4MDAwMDAwMDAwZmZmZjAwMFVMCisjZGVmaW5lIFVWSF9OT0RFX0lEX1JFVklTSU9OX1NIRlQgMjgKKyNkZWZpbmUgVVZIX05PREVfSURfUkVWSVNJT05fTUFTSyAweDAwMDAwMDAwZjAwMDAwMDBVTAorI2RlZmluZSBVVkhfTk9ERV9JRF9OT0RFX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX05PREVfSURfTk9ERV9JRF9NQVNLIDB4MDAwMDdmZmYwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9OT0RFX0lEX05PREVTX1BFUl9CSVRfU0hGVCA0OAorI2RlZmluZSBVVkhfTk9ERV9JRF9OT0RFU19QRVJfQklUX01BU0sgMHgwMDdmMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX05PREVfSURfTklfUE9SVF9TSEZUIDU2CisjZGVmaW5lIFVWSF9OT0RFX0lEX05JX1BPUlRfTUFTSyAweDBmMDAwMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfbm9kZV9pZF91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ub2RlX2lkX3MgeworCXVuc2lnbmVkIGxvbmcJZm9yY2UxICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW1hbnVmYWN0dXJlciAgOiAxMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwYXJ0X251bWJlciAgIDogMTY7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcmV2aXNpb24gICAgICA6ICA0OyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW5vZGVfaWQgICAgICAgOiAxNTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQ3ICAgICAgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJbm9kZXNfcGVyX2JpdCA6ICA3OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNTUgICAgICAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwluaV9wb3J0ICAgICAgIDogIDQ7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF82MF82MyAgICA6ICA0OyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX05PREVfUFJFU0VOVF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9OT0RFX1BSRVNFTlRfVEFCTEUgMHgxNDAwVUwKKyNkZWZpbmUgVVZIX05PREVfUFJFU0VOVF9UQUJMRV9ERVBUSCAxNgorCisjZGVmaW5lIFVWSF9OT0RFX1BSRVNFTlRfVEFCTEVfTk9ERVNfU0hGVCAwCisjZGVmaW5lIFVWSF9OT0RFX1BSRVNFTlRfVEFCTEVfTk9ERVNfTUFTSyAweGZmZmZmZmZmZmZmZmZmZmZVTAorCit1bmlvbiB1dmhfbm9kZV9wcmVzZW50X3RhYmxlX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX25vZGVfcHJlc2VudF90YWJsZV9zIHsKKwl1bnNpZ25lZCBsb25nCW5vZGVzIDogNjQ7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzBfTU1SICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMF9NTVIgMHgxNjAwMGQwVUwKKworI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18wX01NUl9ERVNUX0JBU0VfU0hGVCAyNAorI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18wX01NUl9ERVNUX0JBU0VfTUFTSyAweDAwMDAzZmZmZmYwMDAwMDBVTAorCit1bmlvbiB1dmhfcmhfZ2FtX2FsaWFzMjEwX3JlZGlyZWN0X2NvbmZpZ18wX21tcl91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzBfbW1yX3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzIzIDogMjQ7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZGVzdF9iYXNlIDogMjI7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80Nl82MzogMTg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzFfTU1SICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMV9NTVIgMHgxNjAwMGUwVUwKKworI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18xX01NUl9ERVNUX0JBU0VfU0hGVCAyNAorI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18xX01NUl9ERVNUX0JBU0VfTUFTSyAweDAwMDAzZmZmZmYwMDAwMDBVTAorCit1bmlvbiB1dmhfcmhfZ2FtX2FsaWFzMjEwX3JlZGlyZWN0X2NvbmZpZ18xX21tcl91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzFfbW1yX3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzIzIDogMjQ7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZGVzdF9iYXNlIDogMjI7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80Nl82MzogMTg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzJfTU1SICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMl9NTVIgMHgxNjAwMGYwVUwKKworI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18yX01NUl9ERVNUX0JBU0VfU0hGVCAyNAorI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18yX01NUl9ERVNUX0JBU0VfTUFTSyAweDAwMDAzZmZmZmYwMDAwMDBVTAorCit1bmlvbiB1dmhfcmhfZ2FtX2FsaWFzMjEwX3JlZGlyZWN0X2NvbmZpZ18yX21tcl91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzJfbW1yX3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzIzIDogMjQ7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZGVzdF9iYXNlIDogMjI7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80Nl82MzogMTg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICBVVkhfUkhfR0FNX0NGR19PVkVSTEFZX0NPTkZJR19NTVIgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JIX0dBTV9DRkdfT1ZFUkxBWV9DT05GSUdfTU1SIDB4MTYwMDAyMFVMCisKKyNkZWZpbmUgVVZIX1JIX0dBTV9DRkdfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfU0hGVCAyNgorI2RlZmluZSBVVkhfUkhfR0FNX0NGR19PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9NQVNLIDB4MDAwMDNmZmZmYzAwMDAwMFVMCisjZGVmaW5lIFVWSF9SSF9HQU1fQ0ZHX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfU0hGVCA2MworI2RlZmluZSBVVkhfUkhfR0FNX0NGR19PVkVSTEFZX0NPTkZJR19NTVJfRU5BQkxFX01BU0sgMHg4MDAwMDAwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX3JoX2dhbV9jZmdfb3ZlcmxheV9jb25maWdfbW1yX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3JoX2dhbV9jZmdfb3ZlcmxheV9jb25maWdfbW1yX3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzI1OiAyNjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwliYXNlICAgOiAyMDsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQ2XzYyOiAxNzsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwllbmFibGUgOiAgMTsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUiAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVIgMHgxNjAwMDEwVUwKKworI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUIDI4CisjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX01BU0sgMHgwMDAwM2ZmZmYwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0dSNF9TSEZUIDQ4CisjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9HUjRfTUFTSyAweDAwMDEwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfTl9HUlVfU0hGVCA1MgorI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfTl9HUlVfTUFTSyAweDAwZjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfRU5BQkxFX1NIRlQgNjMKKyNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0VOQUJMRV9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9yaF9nYW1fZ3J1X292ZXJsYXlfY29uZmlnX21tcl91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9yaF9nYW1fZ3J1X292ZXJsYXlfY29uZmlnX21tcl9zIHsKKwl1bnNpZ25lZCBsb25nCXJzdmRfMF8yNzogMjg7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYmFzZSAgIDogMTg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80Nl80NzogIDI7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZ3I0ICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80OV81MTogIDM7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJbl9ncnUgIDogIDQ7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MjogIDc7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZW5hYmxlIDogIDE7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVIgMHgxNjAwMDMwVUwKKworI2RlZmluZSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX1NIRlQgMzAKKyNkZWZpbmUgVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9NQVNLIDB4MDAwMDNmZmZjMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SX01fSU9fU0hGVCA0NgorI2RlZmluZSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUl9NX0lPX01BU0sgMHgwMDBmYzAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVJfTl9JT19TSEZUIDUyCisjZGVmaW5lIFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SX05fSU9fTUFTSyAweDAwZjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfU0hGVCA2MworI2RlZmluZSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfTUFTSyAweDgwMDAwMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfcmhfZ2FtX21taW9oX292ZXJsYXlfY29uZmlnX21tcl91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9yaF9nYW1fbW1pb2hfb3ZlcmxheV9jb25maWdfbW1yX3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzI5OiAzMDsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwliYXNlICAgOiAxNjsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwltX2lvICAgOiAgNjsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwluX2lvICAgOiAgNDsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzU2XzYyOiAgNzsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwllbmFibGUgOiAgMTsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUiAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVIgMHgxNjAwMDI4VUwKKworI2RlZmluZSBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUIDI2CisjZGVmaW5lIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX01BU0sgMHgwMDAwM2ZmZmZjMDAwMDAwVUwKKyNkZWZpbmUgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0RVQUxfSFVCX1NIRlQgNDYKKyNkZWZpbmUgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0RVQUxfSFVCX01BU0sgMHgwMDAwNDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0VOQUJMRV9TSEZUIDYzCisjZGVmaW5lIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfTUFTSyAweDgwMDAwMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfcmhfZ2FtX21tcl9vdmVybGF5X2NvbmZpZ19tbXJfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfcmhfZ2FtX21tcl9vdmVybGF5X2NvbmZpZ19tbXJfcyB7CisJdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjU6IDI2OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWJhc2UgICAgIDogMjA7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZHVhbF9odWIgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQ3XzYyOiAxNjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwllbmFibGUgICA6ICAxOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9SVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9SVEMgMHgzNDAwMDBVTAorCisjZGVmaW5lIFVWSF9SVENfUkVBTF9USU1FX0NMT0NLX1NIRlQgMAorI2RlZmluZSBVVkhfUlRDX1JFQUxfVElNRV9DTE9DS19NQVNLIDB4MDBmZmZmZmZmZmZmZmZmZlVMCisKK3VuaW9uIHV2aF9ydGNfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfcnRjX3MgeworCXVuc2lnbmVkIGxvbmcJcmVhbF90aW1lX2Nsb2NrIDogNTY7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MyAgICAgIDogIDg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1JUQzFfSU5UX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJRyAweDYxNWMwVUwKKworI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX3J0YzFfaW50X2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ydGMxX2ludF9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfUlRDMl9JTlRfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHIDB4NjE2MDBVTAorCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfcnRjMl9pbnRfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3J0YzJfaW50X2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9SVEMzX0lOVF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUcgMHg2MTY0MFVMCisKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ydGMzX2ludF9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfcnRjM19pbnRfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9SVENfSU5DX1JBVElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JUQ19JTkNfUkFUSU8gMHgzNTAwMDBVTAorCisjZGVmaW5lIFVWSF9SVENfSU5DX1JBVElPX0ZSQUNUSU9OX1NIRlQgMAorI2RlZmluZSBVVkhfUlRDX0lOQ19SQVRJT19GUkFDVElPTl9NQVNLIDB4MDAwMDAwMDAwMDBmZmZmZlVMCisjZGVmaW5lIFVWSF9SVENfSU5DX1JBVElPX1JBVElPX1NIRlQgMjAKKyNkZWZpbmUgVVZIX1JUQ19JTkNfUkFUSU9fUkFUSU9fTUFTSyAweDAwMDAwMDAwMDA3MDAwMDBVTAorCit1bmlvbiB1dmhfcnRjX2luY19yYXRpb191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ydGNfaW5jX3JhdGlvX3MgeworCXVuc2lnbmVkIGxvbmcJZnJhY3Rpb24gOiAyMDsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyYXRpbyAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMjNfNjM6IDQxOyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1NJX0FERFJfTUFQX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9TSV9BRERSX01BUF9DT05GSUcgMHhjODAwMDBVTAorCisjZGVmaW5lIFVWSF9TSV9BRERSX01BUF9DT05GSUdfTV9TS1RfU0hGVCAwCisjZGVmaW5lIFVWSF9TSV9BRERSX01BUF9DT05GSUdfTV9TS1RfTUFTSyAweDAwMDAwMDAwMDAwMDAwM2ZVTAorI2RlZmluZSBVVkhfU0lfQUREUl9NQVBfQ09ORklHX05fU0tUX1NIRlQgOAorI2RlZmluZSBVVkhfU0lfQUREUl9NQVBfQ09ORklHX05fU0tUX01BU0sgMHgwMDAwMDAwMDAwMDAwZjAwVUwKKwordW5pb24gdXZoX3NpX2FkZHJfbWFwX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9zaV9hZGRyX21hcF9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwltX3NrdCA6ICA2OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNl83OiAgMjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwluX3NrdCA6ICA0OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTJfNjM6IDUyOyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUcgMHhjODAwMDhVTAorCisjZGVmaW5lIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUdfQkFTRV9TSEZUIDI0CisjZGVmaW5lIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUdfQkFTRV9NQVNLIDB4MDAwMDAwMDBmZjAwMDAwMFVMCisjZGVmaW5lIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUdfTV9BTElBU19TSEZUIDQ4CisjZGVmaW5lIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUdfTV9BTElBU19NQVNLIDB4MDAxZjAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUdfRU5BQkxFX1NIRlQgNjMKKyNkZWZpbmUgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJR19FTkFCTEVfTUFTSyAweDgwMDAwMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfc2lfYWxpYXMwX292ZXJsYXlfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3NpX2FsaWFzMF9vdmVybGF5X2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXJzdmRfMF8yMzogMjQ7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYmFzZSAgICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMzJfNDc6IDE2OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCW1fYWxpYXMgOiAgNTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzUzXzYyOiAxMDsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwllbmFibGUgIDogIDE7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJRyAweGM4MDAxMFVMCisKKyNkZWZpbmUgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJR19CQVNFX1NIRlQgMjQKKyNkZWZpbmUgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJR19CQVNFX01BU0sgMHgwMDAwMDAwMGZmMDAwMDAwVUwKKyNkZWZpbmUgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJR19NX0FMSUFTX1NIRlQgNDgKKyNkZWZpbmUgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJR19NX0FMSUFTX01BU0sgMHgwMDFmMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJR19FTkFCTEVfU0hGVCA2MworI2RlZmluZSBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHX0VOQUJMRV9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9zaV9hbGlhczFfb3ZlcmxheV9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfc2lfYWxpYXMxX292ZXJsYXlfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzIzOiAyNDsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwliYXNlICAgIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8zMl80NzogMTY7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJbV9hbGlhcyA6ICA1OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNTNfNjI6IDEwOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWVuYWJsZSAgOiAgMTsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHIDB4YzgwMDE4VUwKKworI2RlZmluZSBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHX0JBU0VfU0hGVCAyNAorI2RlZmluZSBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHX0JBU0VfTUFTSyAweDAwMDAwMDAwZmYwMDAwMDBVTAorI2RlZmluZSBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHX01fQUxJQVNfU0hGVCA0OAorI2RlZmluZSBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHX01fQUxJQVNfTUFTSyAweDAwMWYwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHX0VOQUJMRV9TSEZUIDYzCisjZGVmaW5lIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUdfRU5BQkxFX01BU0sgMHg4MDAwMDAwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX3NpX2FsaWFzMl9vdmVybGF5X2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9zaV9hbGlhczJfb3ZlcmxheV9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjM6IDI0OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWJhc2UgICAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzMyXzQ3OiAxNjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwltX2FsaWFzIDogIDU7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81M182MjogMTA7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZW5hYmxlICA6ICAxOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VVl9VVl9NTVJTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Zkc28uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Zkc28uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY0MDUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmRzby5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgX0FTTV9YODZfVkRTT19ICisjZGVmaW5lIF9BU01fWDg2X1ZEU09fSAorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorZXh0ZXJuIGNvbnN0IGNoYXIgVkRTTzY0X1BSRUxJTktbXTsKKworLyoKKyAqIEdpdmVuIGEgcG9pbnRlciB0byB0aGUgdkRTTyBpbWFnZSwgZmluZCB0aGUgcG9pbnRlciB0byBWRFNPNjRfbmFtZQorICogYXMgdGhhdCBzeW1ib2wgaXMgZGVmaW5lZCBpbiB0aGUgdkRTTyBzb3VyY2VzIG9yIGxpbmtlciBzY3JpcHQuCisgKi8KKyNkZWZpbmUgVkRTTzY0X1NZTUJPTChiYXNlLCBuYW1lKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJZXh0ZXJuIGNvbnN0IGNoYXIgVkRTTzY0XyMjbmFtZVtdOwkJCQlcCisJKHZvaWQgKikoVkRTTzY0XyMjbmFtZSAtIFZEU082NF9QUkVMSU5LICsgKHVuc2lnbmVkIGxvbmcpKGJhc2UpKTsgXAorfSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0NPTVBBVAorZXh0ZXJuIGNvbnN0IGNoYXIgVkRTTzMyX1BSRUxJTktbXTsKKworLyoKKyAqIEdpdmVuIGEgcG9pbnRlciB0byB0aGUgdkRTTyBpbWFnZSwgZmluZCB0aGUgcG9pbnRlciB0byBWRFNPMzJfbmFtZQorICogYXMgdGhhdCBzeW1ib2wgaXMgZGVmaW5lZCBpbiB0aGUgdkRTTyBzb3VyY2VzIG9yIGxpbmtlciBzY3JpcHQuCisgKi8KKyNkZWZpbmUgVkRTTzMyX1NZTUJPTChiYXNlLCBuYW1lKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJZXh0ZXJuIGNvbnN0IGNoYXIgVkRTTzMyXyMjbmFtZVtdOwkJCQlcCisJKHZvaWQgKikoVkRTTzMyXyMjbmFtZSAtIFZEU08zMl9QUkVMSU5LICsgKHVuc2lnbmVkIGxvbmcpKGJhc2UpKTsgXAorfSkKKyNlbmRpZgorCisvKgorICogVGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCB3aXRoIHRoZSBhZGRyZXNzZXMgaW4gdGhlIHZzeXNjYWxsIHBhZ2UuCisgKiBTZWUgdnN5c2NhbGwtc2lncmV0dXJuLlMuCisgKi8KK2V4dGVybiB2b2lkIF9fdXNlciBfX2tlcm5lbF9zaWdyZXR1cm47CitleHRlcm4gdm9pZCBfX3VzZXIgX19rZXJuZWxfcnRfc2lncmV0dXJuOworCisvKgorICogVGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBieSB2ZHNvMzIuUyB0byBtYXJrIHRoZSBib3VuZHMKKyAqIG9mIHRoZSBFTEYgRFNPIGltYWdlcyBpbmNsdWRlZCB0aGVyZWluLgorICovCitleHRlcm4gY29uc3QgY2hhciB2ZHNvMzJfaW50ODBfc3RhcnQsIHZkc28zMl9pbnQ4MF9lbmQ7CitleHRlcm4gY29uc3QgY2hhciB2ZHNvMzJfc3lzY2FsbF9zdGFydCwgdmRzbzMyX3N5c2NhbGxfZW5kOworZXh0ZXJuIGNvbnN0IGNoYXIgdmRzbzMyX3N5c2VudGVyX3N0YXJ0LCB2ZHNvMzJfc3lzZW50ZXJfZW5kOworCisjZW5kaWYgLyogX0FTTV9YODZfVkRTT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z2EuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjlkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z2EuaApAQCAtMCwwICsxLDIwIEBACisvKgorICoJQWNjZXNzIHRvIFZHQSB2aWRlb3JhbQorICoKKyAqCShjKSAxOTk4IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICovCisKKyNpZm5kZWYgX0FTTV9YODZfVkdBX0gKKyNkZWZpbmUgX0FTTV9YODZfVkdBX0gKKworLyoKKyAqCU9uIHRoZSBQQywgd2UgY2FuIGp1c3QgcmVjYWxjdWxhdGUgYWRkcmVzc2VzIGFuZCB0aGVuCisgKglhY2Nlc3MgdGhlIHZpZGVvcmFtIGRpcmVjdGx5IHdpdGhvdXQgYW55IGJsYWNrIG1hZ2ljLgorICovCisKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCwgcykgKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHgpCisKKyNkZWZpbmUgdmdhX3JlYWRiKHgpICgqKHgpKQorI2RlZmluZSB2Z2Ffd3JpdGViKHgsIHkpICgqKHkpID0gKHgpKQorCisjZW5kaWYgLyogX0FTTV9YODZfVkdBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZndG9kLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMjdhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX0FTTV9YODZfVkdUT0RfSAorI2RlZmluZSBfQVNNX1g4Nl9WR1RPRF9ICisKKyNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorCitzdHJ1Y3QgdnN5c2NhbGxfZ3RvZF9kYXRhIHsKKwlzZXFsb2NrX3QJbG9jazsKKworCS8qIG9wZW4gY29kZWQgJ3N0cnVjdCB0aW1lc3BlYycgKi8KKwl0aW1lX3QJCXdhbGxfdGltZV9zZWM7CisJdTMyCQl3YWxsX3RpbWVfbnNlYzsKKworCWludAkJc3lzY3RsX2VuYWJsZWQ7CisJc3RydWN0IHRpbWV6b25lIHN5c190ejsKKwlzdHJ1Y3QgeyAvKiBleHRyYWN0IG9mIGEgY2xvY2tzb3VyY2Ugc3RydWN0ICovCisJCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7CisJCWN5Y2xlX3QJY3ljbGVfbGFzdDsKKwkJY3ljbGVfdAltYXNrOworCQl1MzIJbXVsdDsKKwkJdTMyCXNoaWZ0OworCX0gY2xvY2s7CisJc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fbW9ub3RvbmljOworfTsKK2V4dGVybiBzdHJ1Y3QgdnN5c2NhbGxfZ3RvZF9kYXRhIF9fdnN5c2NhbGxfZ3RvZF9kYXRhCitfX3NlY3Rpb25fdnN5c2NhbGxfZ3RvZF9kYXRhOworZXh0ZXJuIHN0cnVjdCB2c3lzY2FsbF9ndG9kX2RhdGEgdnN5c2NhbGxfZ3RvZF9kYXRhOworCisjZW5kaWYgLyogX0FTTV9YODZfVkdUT0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3ZpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmljLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni92aWMuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vdmljLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Zpc3dzL2NvYmFsdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlzd3MvY29iYWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2YWRmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Zpc3dzL2NvYmFsdC5oCkBAIC0wLDAgKzEsMTI1IEBACisjaWZuZGVmIF9BU01fWDg2X1ZJU1dTX0NPQkFMVF9ICisjZGVmaW5lIF9BU01fWDg2X1ZJU1dTX0NPQkFMVF9ICisKKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKy8qCisgKiBDb2JhbHQgU0dJIFZpc3VhbCBXb3Jrc3RhdGlvbiBzeXN0ZW0gQVNJQworICovIAorCisjZGVmaW5lIENPX0NQVV9OVU1fUEhZUyAweDFlMDAKKyNkZWZpbmUgQ09fQ1BVX1RBQl9QSFlTIChDT19DUFVfTlVNX1BIWVMgKyAyKQorCisjZGVmaW5lIENPX0NQVV9NQVggNAorCisjZGVmaW5lCUNPX0NQVV9QSFlTCQkweGMyMDAwMDAwCisjZGVmaW5lCUNPX0FQSUNfUEhZUwkJMHhjNDAwMDAwMAorCisvKiBzZWUgc2V0X2ZpeG1hcCgpIGFuZCBhc20vZml4bWFwLmggKi8KKyNkZWZpbmUJQ09fQ1BVX1ZBRERSCQkoZml4X3RvX3ZpcnQoRklYX0NPX0NQVSkpCisjZGVmaW5lCUNPX0FQSUNfVkFERFIJCShmaXhfdG9fdmlydChGSVhfQ09fQVBJQykpCisKKy8qIENvYmFsdCBDUFUgcmVnaXN0ZXJzIC0tIHJlbGF0aXZlIHRvIENPX0NQVV9WQUREUiwgdXNlIGNvX2NwdV8qKCkgKi8KKyNkZWZpbmUJQ09fQ1BVX1JFVgkJMHgwOAorI2RlZmluZQlDT19DUFVfQ1RSTAkJMHgxMAorI2RlZmluZQlDT19DUFVfU1RBVAkJMHgyMAorI2RlZmluZQlDT19DUFVfVElNRVZBTAkJMHgzMAorCisvKiBDT19DUFVfQ1RSTCBiaXRzICovCisjZGVmaW5lCUNPX0NUUkxfVElNRVJVTgkJMHgwNAkJLyogMCA9PSBkaXNhYmxlZCAqLworI2RlZmluZQlDT19DVFJMX1RJTUVNQVNLCTB4MDgJCS8qIDAgPT0gdW5tYXNrZWQgKi8KKworLyogQ09fQ1BVX1NUQVRVUyBiaXRzICovCisjZGVmaW5lCUNPX1NUQVRfVElNRUlOVFIJMHgwMgkvKiAocikgMSA9PSBpbnQgcGVuZCwgKHcpIDAgPT0gY2xlYXIgKi8KKworLyogQ09fQ1BVX1RJTUVWQUwgdmFsdWUgKi8KKyNkZWZpbmUJQ09fVElNRV9IWgkJMTAwMDAwMDAwCS8qIENvYmFsdCBjb3JlIHJhdGUgKi8KKworLyogQ29iYWx0IEFQSUMgcmVnaXN0ZXJzIC0tIHJlbGF0aXZlIHRvIENPX0FQSUNfVkFERFIsIHVzZSBjb19hcGljXyooKSAqLworI2RlZmluZQlDT19BUElDX0hJKG4pCQkoKChuKSAqIDB4MTApICsgNCkKKyNkZWZpbmUJQ09fQVBJQ19MTyhuKQkJKChuKSAqIDB4MTApCisjZGVmaW5lCUNPX0FQSUNfSUQJCTB4MGZmYworCisvKiBDT19BUElDX0lEIGJpdHMgKi8KKyNkZWZpbmUJQ09fQVBJQ19FTkFCTEUJCTB4MDAwMDAxMDAKKworLyogQ09fQVBJQ19MTyBiaXRzICovCisjZGVmaW5lCUNPX0FQSUNfTUFTSwkJMHgwMDAxMDAwMAkvKiAwID0gZW5hYmxlZCAqLworI2RlZmluZQlDT19BUElDX0xFVkVMCQkweDAwMDA4MDAwCS8qIDAgPSBlZGdlICovCisKKy8qCisgKiBXaGVyZSB0aGluZ3MgYXJlIHBoeXNpY2FsbHkgd2lyZWQgdG8gQ29iYWx0CisgKiAjZGVmaW5lcyB3aXRoIG5vIGJvYXJkIF88dHlwZT5fPHJldj5fIGFyZSBjb21tb24gdG8gYWxsICh0aHVzIGZhcikKKyAqLworI2RlZmluZQlDT19BUElDX0lERTAJCTQKKyNkZWZpbmUgQ09fQVBJQ19JREUxCQkyCQkvKiBPbmx5IG9uIDMyMCAqLworCisjZGVmaW5lCUNPX0FQSUNfODI1OQkJMTIJCS8qIHNlcmlhbCwgZmxvcHB5LCBwYXItbC1sICovCisKKy8qIExpdGhpdW0gUENJIEJyaWRnZSBBIC0tICJ0aGUgb25lIHdpdGggODI1NTcgRXRoZXJuZXQiICovCisjZGVmaW5lCUNPX0FQSUNfUENJQV9CQVNFMAkwIC8qIGFuZCAxICovCS8qIHNsb3QgMCwgbGluZSAwICovCisjZGVmaW5lCUNPX0FQSUNfUENJQV9CQVNFMTIzCTUgLyogYW5kIDYgKi8JLyogc2xvdCAwLCBsaW5lIDEgKi8KKworI2RlZmluZQlDT19BUElDX1BJSVg0X1VTQgk3CQkvKiB0aGlzIG9uZSBpcyB3ZWlyZCAqLworCisvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQiAtLSAidGhlIG9uZSB3aXRoIFBJSVg0IiAqLworI2RlZmluZQlDT19BUElDX1BDSUJfQkFTRTAJOCAvKiBhbmQgOS0xMiAqLy8qIHNsb3QgMCwgbGluZSAwICovCisjZGVmaW5lCUNPX0FQSUNfUENJQl9CQVNFMTIzCTEzIC8qIDE0LjE1ICovCS8qIHNsb3QgMCwgbGluZSAxICovCisKKyNkZWZpbmUJQ09fQVBJQ19WSURPVVQwCQkxNgorI2RlZmluZQlDT19BUElDX1ZJRE9VVDEJCTE3CisjZGVmaW5lCUNPX0FQSUNfVklESU4wCQkxOAorI2RlZmluZQlDT19BUElDX1ZJRElOMQkJMTkKKworI2RlZmluZQlDT19BUElDX0xJX0FVRElPCTIyCisKKyNkZWZpbmUJQ09fQVBJQ19BUwkJMjQKKyNkZWZpbmUJQ09fQVBJQ19SRQkJMjUKKworI2RlZmluZSBDT19BUElDX0NQVQkJMjgJCS8qIFRpbWVyIGFuZCBDYWNoZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJQ09fQVBJQ19OTUkJCTI5CisjZGVmaW5lCUNPX0FQSUNfTEFTVAkJQ09fQVBJQ19OTUkKKworLyoKKyAqIFRoaXMgaXMgaG93IGlycXMgYXJlIGFzc2lnbmVkIG9uIHRoZSBWaXN1YWwgV29ya3N0YXRpb24uCisgKiBMZWdhY3kgZGV2aWNlcyBnZXQgaXJxJ3MgMS0xNSAoc3lzdGVtIGNsb2NrIGlzIDAgYW5kIGlzIENPX0FQSUNfQ1BVKS4KKyAqIEFsbCBvdGhlciBkZXZpY2VzIChpbmNsdWRpbmcgUENJKSBnbyB0byBDb2JhbHQgYW5kIGFyZSBpcnEncyAxNiBvbiB1cC4KKyAqLworI2RlZmluZQlDT19JUlFfQVBJQzAJMTYJCQkvKiBpcnEgb2YgYXBpYyBlbnRyeSAwICovCisjZGVmaW5lCUlTX0NPX0FQSUMoaXJxKQkoKGlycSkgPj0gQ09fSVJRX0FQSUMwKQorI2RlZmluZQlDT19JUlEoYXBpYykJKENPX0lSUV9BUElDMCArIChhcGljKSkJLyogYXBpYyBlbnQgdG8gaXJxICovCisjZGVmaW5lCUNPX0FQSUMoaXJxKQkoKGlycSkgLSBDT19JUlFfQVBJQzApCS8qIGlycSB0byBhcGljIGVudCAqLworI2RlZmluZSBDT19JUlFfSURFMAkxNAkJCS8qIGtub3dsZWRnZSBvZi4uLiAqLworI2RlZmluZSBDT19JUlFfSURFMQkxNQkJCS8qIC4uLiBpZGUgZHJpdmVyIGRlZmF1bHRzISAqLworI2RlZmluZQlDT19JUlFfODI1OQlDT19JUlEoQ09fQVBJQ184MjU5KQorCisjaWZkZWYgQ09ORklHX1g4Nl9WSVNXU19BUElDCitzdGF0aWMgaW5saW5lIHZvaWQgY29fY3B1X3dyaXRlKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHYpCit7CisJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShDT19DUFVfVkFERFIrcmVnKSk9djsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvX2NwdV9yZWFkKHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKENPX0NQVV9WQUREUityZWcpKTsKK30gICAgICAgICAgICAKKyAgICAgICAgICAgICAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb19hcGljX3dyaXRlKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHYpCit7CisJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShDT19BUElDX1ZBRERSK3JlZykpPXY7Cit9ICAgICAgICAgICAgCisgICAgICAgICAgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29fYXBpY19yZWFkKHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKENPX0FQSUNfVkFERFIrcmVnKSk7Cit9CisjZW5kaWYKKworZXh0ZXJuIGNoYXIgdmlzd3NfYm9hcmRfdHlwZTsKKworI2RlZmluZQlWSVNXU18zMjAJMAorI2RlZmluZQlWSVNXU181NDAJMQorCitleHRlcm4gY2hhciB2aXN3c19ib2FyZF9yZXY7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9WSVNXU19DT0JBTFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlzd3MvbGl0aGl1bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlzd3MvbGl0aGl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMGQ4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXN3cy9saXRoaXVtLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9WSVNXU19MSVRISVVNX0gKKyNkZWZpbmUgX0FTTV9YODZfVklTV1NfTElUSElVTV9ICisKKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKy8qCisgKiBMaXRoaXVtIGlzIHRoZSBTR0kgVmlzdWFsIFdvcmtzdGF0aW9uIEkvTyBBU0lDCisgKi8KKworI2RlZmluZQlMSV9QQ0lfQV9QSFlTCQkweGZjMDAwMDAwCS8qIEVuZXQgaXMgZGV2IDMgKi8KKyNkZWZpbmUJTElfUENJX0JfUEhZUwkJMHhmZDAwMDAwMAkvKiBQSUlYNCBpcyBoZXJlICovCisKKy8qIHNlZSBzZXRfZml4bWFwKCkgYW5kIGFzbS9maXhtYXAuaCAqLworI2RlZmluZSBMSV9QQ0lBX1ZBRERSICAgKGZpeF90b192aXJ0KEZJWF9MSV9QQ0lBKSkKKyNkZWZpbmUgTElfUENJQl9WQUREUiAgIChmaXhfdG9fdmlydChGSVhfTElfUENJQikpCisKKy8qIE5vdCBhIHN0YW5kYXJkIFBDST8gKG5vdCBpbiBsaW51eC9wY2kuaCkgKi8KKyNkZWZpbmUJTElfUENJX0JVU05VTQkweDQ0CQkJLyogbG84OiBwcmltYXJ5LCBoaTg6IHN1YiAqLworI2RlZmluZSBMSV9QQ0lfSU5URU4gICAgMHg0NgorCisvKiBMSV9QQ0lfSU5URU5UIGJpdHMgKi8KKyNkZWZpbmUJTElfSU5UQV8wCTB4MDAwMQorI2RlZmluZQlMSV9JTlRBXzEJMHgwMDAyCisjZGVmaW5lCUxJX0lOVEFfMgkweDAwMDQKKyNkZWZpbmUJTElfSU5UQV8zCTB4MDAwOAorI2RlZmluZQlMSV9JTlRBXzQJMHgwMDEwCisjZGVmaW5lCUxJX0lOVEIJCTB4MDAyMAorI2RlZmluZQlMSV9JTlRDCQkweDAwNDAKKyNkZWZpbmUJTElfSU5URAkJMHgwMDgwCisKKy8qIE1vcmUgc3BlY2lhbCBwdXJwb3NlIG1hY3Jvcy4uLiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpX3BjaWFfd3JpdGUxNih1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgc2hvcnQgdikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShMSV9QQ0lBX1ZBRERSK3JlZykpPXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbGlfcGNpYV9yZWFkMTYodW5zaWduZWQgbG9uZyByZWcpCit7CisJIHJldHVybiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShMSV9QQ0lBX1ZBRERSK3JlZykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlfcGNpYl93cml0ZTE2KHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBzaG9ydCB2KQoreworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKExJX1BDSUJfVkFERFIrcmVnKSk9djsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBsaV9wY2liX3JlYWQxNih1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlyZXR1cm4gKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoTElfUENJQl9WQUREUityZWcpKTsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X1ZJU1dTX0xJVEhJVU1fSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXN3cy9waWl4NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlzd3MvcGlpeDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGFmNGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlzd3MvcGlpeDQuaApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9WSVNXU19QSUlYNF9ICisjZGVmaW5lIF9BU01fWDg2X1ZJU1dTX1BJSVg0X0gKKworLyoKKyAqIFBJSVg0IGFzIHVzZWQgb24gU0dJIFZpc3VhbCBXb3Jrc3RhdGlvbnMKKyAqLworCisjZGVmaW5lCVBJSVhfUE1fU1RBUlQJCTB4MEY4MAorCisjZGVmaW5lCVNJT19HUElPX1NUQVJUCQkweDBGQzAKKworI2RlZmluZQlTSU9fUE1fU1RBUlQJCTB4MEZDOAorCisjZGVmaW5lCVBNQkFTRQkJCVBJSVhfUE1fU1RBUlQKKyNkZWZpbmUJR1BJUkVHMAkJCShQTUJBU0UrMHgzMCkKKyNkZWZpbmUJR1BJUkVHKHgpCQkoR1BJUkVHMCsoKHgpLzgpKQorI2RlZmluZQlHUElCSVQoeCkJCSgxIDw8ICgoeCklOCkpCisKKyNkZWZpbmUJUElJWF9HUElfQkRfSUQxCQkxOAorI2RlZmluZQlQSUlYX0dQSV9CRF9JRDIJCTE5CisjZGVmaW5lCVBJSVhfR1BJX0JEX0lEMwkJMjAKKyNkZWZpbmUJUElJWF9HUElfQkRfSUQ0CQkyMQorI2RlZmluZQlQSUlYX0dQSV9CRF9SRUcJCUdQSVJFRyhQSUlYX0dQSV9CRF9JRDEpCisjZGVmaW5lCVBJSVhfR1BJX0JEX01BU0sJKEdQSUJJVChQSUlYX0dQSV9CRF9JRDEpIHwgXAorCQkJCUdQSUJJVChQSUlYX0dQSV9CRF9JRDIpIHwgXAorCQkJCUdQSUJJVChQSUlYX0dQSV9CRF9JRDMpIHwgXAorCQkJCUdQSUJJVChQSUlYX0dQSV9CRF9JRDQpICkKKworI2RlZmluZQlQSUlYX0dQSV9CRF9TSElGVAkoUElJWF9HUElfQkRfSUQxICUgOCkKKworI2RlZmluZQlTSU9fSU5ERVgJCTB4MmUKKyNkZWZpbmUJU0lPX0RBVEEJCTB4MmYKKworI2RlZmluZQlTSU9fREVWX1NFTAkJMHg3CisjZGVmaW5lCVNJT19ERVZfRU5CCQkweDMwCisjZGVmaW5lCVNJT19ERVZfTVNCCQkweDYwCisjZGVmaW5lCVNJT19ERVZfTFNCCQkweDYxCisKKyNkZWZpbmUJU0lPX0dQX0RFVgkJMHg3CisKKyNkZWZpbmUJU0lPX0dQX0JBU0UJCVNJT19HUElPX1NUQVJUCisjZGVmaW5lCVNJT19HUF9NU0IJCShTSU9fR1BfQkFTRT4+OCkKKyNkZWZpbmUJU0lPX0dQX0xTQgkJKFNJT19HUF9CQVNFJjB4ZmYpCisKKyNkZWZpbmUJU0lPX0dQX0RBVEExCQkoU0lPX0dQX0JBU0UrMCkKKworI2RlZmluZQlTSU9fUE1fREVWCQkweDgKKworI2RlZmluZQlTSU9fUE1fQkFTRQkJU0lPX1BNX1NUQVJUCisjZGVmaW5lCVNJT19QTV9NU0IJCShTSU9fUE1fQkFTRT4+OCkKKyNkZWZpbmUJU0lPX1BNX0xTQgkJKFNJT19QTV9CQVNFJjB4ZmYpCisjZGVmaW5lCVNJT19QTV9JTkRFWAkJKFNJT19QTV9CQVNFKzApCisjZGVmaW5lCVNJT19QTV9EQVRBCQkoU0lPX1BNX0JBU0UrMSkKKworI2RlZmluZQlTSU9fUE1fRkVSMgkJMHgxCisKKyNkZWZpbmUJU0lPX1BNX0dQX0VOCQkweDgwCisKKworCisvKgorICogVGhpcyBpcyB0aGUgZGV2L3JlZyB3aGVyZSBnZW5lcmF0aW5nIGEgY29uZmlnIGN5Y2xlIHdpbGwKKyAqIHJlc3VsdCBpbiBhIFBDSSBzcGVjaWFsIGN5Y2xlLgorICovCisjZGVmaW5lIFNQRUNJQUxfREVWCQkweGZmCisjZGVmaW5lIFNQRUNJQUxfUkVHCQkweDAwCisKKy8qCisgKiBQSUlYNCBuZWVkcyB0byBzZWUgYSBzcGVjaWFsIGN5Y2xlIHdpdGggdGhlIGZvbGxvd2luZyBkYXRhCisgKiB0byBiZSBjb252aW5jZWQgdGhlIHByb2Nlc3NvciBoYXMgZ29uZSBpbnRvIHRoZSBzdG9wIGdyYW50CisgKiBzdGF0ZS4gIFBJSVg0IGluc2lzdHMgb24gc2VlaW5nIHRoaXMgYmVmb3JlIGl0IHdpbGwgcG93ZXIKKyAqIGRvd24gYSBzeXN0ZW0uCisgKi8KKyNkZWZpbmUgUElJWF9TUEVDSUFMX1NUT1AJCTB4MDAxMjAwMDIKKworI2RlZmluZSBQSUlYNF9SRVNFVF9QT1JUCTB4Y2Y5CisjZGVmaW5lIFBJSVg0X1JFU0VUX1ZBTAkJMHg2CisKKyNkZWZpbmUgUE1TVFNfUE9SVAkJMHhmODAJLy8gMiBieXRlcwlQTSBTdGF0dXMKKyNkZWZpbmUgUE1FTl9QT1JUCQkweGY4MgkvLyAyIGJ5dGVzCVBNIEVuYWJsZQorI2RlZmluZQlQTUNOVFJMX1BPUlQJCTB4Zjg0CS8vIDIgYnl0ZXMJUE0gQ29udHJvbAorCisjZGVmaW5lIFBNX1NVU1BFTkRfRU5BQkxFCTB4MjAwMAkvLyBzdGFydCBzZXF1ZW5jZSB0byBzdXNwZW5kIHN0YXRlCisKKy8qCisgKiBQTVNUUyBhbmQgUE1FTiBJL08gYml0IGRlZmluaXRpb25zLgorICogKEJpdHMgYXJlIHRoZSBzYW1lIGluIGJvdGggcmVnaXN0ZXJzKQorICovCisjZGVmaW5lIFBNX1NUU19SU00JCSgxPDwxNSkJLy8gUmVzdW1lIFN0YXR1cworI2RlZmluZSBQTV9TVFNfUFdSQlROT1IJCSgxPDwxMSkJLy8gUG93ZXIgQnV0dG9uIE92ZXJyaWRlCisjZGVmaW5lIFBNX1NUU19SVEMJCSgxPDwxMCkJLy8gUlRDIHN0YXR1cworI2RlZmluZSBQTV9TVFNfUFdSQlROCQkoMTw8OCkJLy8gUG93ZXIgQnV0dG9uIFByZXNzZWQ/CisjZGVmaW5lIFBNX1NUU19HQkwJCSgxPDw1KQkvLyBHbG9iYWwgU3RhdHVzCisjZGVmaW5lIFBNX1NUU19CTQkJKDE8PDQpCS8vIEJ1cyBNYXN0ZXIgU3RhdHVzCisjZGVmaW5lIFBNX1NUU19UTVJPRgkJKDE8PDApCS8vIFRpbWVyIE92ZXJmbG93IFN0YXR1cy4KKworLyoKKyAqIFN0b3AgY2xvY2sgR1BJIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUElJWF9HUElSRUcwCQkJKDB4ZjgwICsgMHgzMCkKKworLyoKKyAqIFN0b3AgY2xvY2sgR1BJIGJpdCBpbiBHUElSRUcwCisgKi8KKyNkZWZpbmUJUElJWF9HUElfU1RQQ0xLCQkweDQJLy8gU1RQQ0xLIHNpZ25hbCByb3V0ZWQgYmFjayBpbgorCisjZW5kaWYgLyogX0FTTV9YODZfVklTV1NfUElJWDRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Zpc3dzL3NnaXZ3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXN3cy9zZ2l2dy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODYvdmlzd3Mvc2dpdncuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vdmlzd3Mvc2dpdncuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm04Ni5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm04Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzAzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bTg2LmgKQEAgLTAsMCArMSwyMDggQEAKKyNpZm5kZWYgX0FTTV9YODZfVk04Nl9ICisjZGVmaW5lIF9BU01fWDg2X1ZNODZfSAorCisvKgorICogSSdtIGd1ZXNzaW5nIGF0IHRoZSBWSUYvVklQIGZsYWcgdXNhZ2UsIGJ1dCBob3BlIHRoYXQgdGhpcyBpcyBob3cKKyAqIHRoZSBQZW50aXVtIHVzZXMgdGhlbS4gTGludXggd2lsbCByZXR1cm4gZnJvbSB2bTg2IG1vZGUgd2hlbiBib3RoCisgKiBWSUYgYW5kIFZJUCBpcyBzZXQuCisgKgorICogT24gYSBQZW50aXVtLCB3ZSBjb3VsZCBwcm9iYWJseSBvcHRpbWl6ZSB0aGUgdmlydHVhbCBmbGFncyBkaXJlY3RseQorICogaW4gdGhlIGVmbGFncyByZWdpc3RlciBpbnN0ZWFkIG9mIGRvaW5nIGl0ICJieSBoYW5kIiBpbiB2ZmxhZ3MuLi4KKyAqCisgKiBMaW51cworICovCisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisKKyNkZWZpbmUgQklPU1NFRwkJMHgwZjAwMAorCisjZGVmaW5lIENQVV8wODYJCTAKKyNkZWZpbmUgQ1BVXzE4NgkJMQorI2RlZmluZSBDUFVfMjg2CQkyCisjZGVmaW5lIENQVV8zODYJCTMKKyNkZWZpbmUgQ1BVXzQ4NgkJNAorI2RlZmluZSBDUFVfNTg2CQk1CisKKy8qCisgKiBSZXR1cm4gdmFsdWVzIGZvciB0aGUgJ3ZtODYoKScgc3lzdGVtIGNhbGwKKyAqLworI2RlZmluZSBWTTg2X1RZUEUocmV0dmFsKQkoKHJldHZhbCkgJiAweGZmKQorI2RlZmluZSBWTTg2X0FSRyhyZXR2YWwpCSgocmV0dmFsKSA+PiA4KQorCisjZGVmaW5lIFZNODZfU0lHTkFMCTAJLyogcmV0dXJuIGR1ZSB0byBzaWduYWwgKi8KKyNkZWZpbmUgVk04Nl9VTktOT1dOCTEJLyogdW5oYW5kbGVkIEdQIGZhdWx0CisJCQkJICAgLSBJTy1pbnN0cnVjdGlvbiBvciBzaW1pbGFyICovCisjZGVmaW5lIFZNODZfSU5UeAkyCS8qIGludDMvaW50IHggaW5zdHJ1Y3Rpb24gKEFSRyA9IHgpICovCisjZGVmaW5lIFZNODZfU1RJCTMJLyogc3RpL3BvcGYvaXJldCBpbnN0cnVjdGlvbiBlbmFibGVkCisJCQkJICAgdmlydHVhbCBpbnRlcnJ1cHRzICovCisKKy8qCisgKiBBZGRpdGlvbmFsIHJldHVybiB2YWx1ZXMgd2hlbiBpbnZva2luZyBuZXcgdm04NigpCisgKi8KKyNkZWZpbmUgVk04Nl9QSUNSRVRVUk4JNAkvKiByZXR1cm4gZHVlIHRvIHBlbmRpbmcgUElDIHJlcXVlc3QgKi8KKyNkZWZpbmUgVk04Nl9UUkFQCTYJLyogcmV0dXJuIGR1ZSB0byBET1MtZGVidWdnZXIgcmVxdWVzdCAqLworCisvKgorICogZnVuY3Rpb24gY29kZXMgd2hlbiBpbnZva2luZyBuZXcgdm04NigpCisgKi8KKyNkZWZpbmUgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0sJMAorI2RlZmluZSBWTTg2X0VOVEVSCQkxCisjZGVmaW5lIFZNODZfRU5URVJfTk9fQllQQVNTCTIKKyNkZWZpbmUJVk04Nl9SRVFVRVNUX0lSUQkzCisjZGVmaW5lIFZNODZfRlJFRV9JUlEJCTQKKyNkZWZpbmUgVk04Nl9HRVRfSVJRX0JJVFMJNQorI2RlZmluZSBWTTg2X0dFVF9BTkRfUkVTRVRfSVJRCTYKKworLyoKKyAqIFRoaXMgaXMgdGhlIHN0YWNrLWxheW91dCBzZWVuIGJ5IHRoZSB1c2VyIHNwYWNlIHByb2dyYW0gd2hlbiB3ZSBoYXZlCisgKiBkb25lIGEgdHJhbnNsYXRpb24gb2YgIlNBVkVfQUxMIiBmcm9tIHZtODYgbW9kZS4gVGhlIHJlYWwga2VybmVsIGxheW91dAorICogaXMgJ2tlcm5lbF92bTg2X3JlZ3MnIChzZWUgYmVsb3cpLgorICovCisKK3N0cnVjdCB2bTg2X3JlZ3MgeworLyoKKyAqIG5vcm1hbCByZWdzLCB3aXRoIHNwZWNpYWwgbWVhbmluZyBmb3IgdGhlIHNlZ21lbnQgZGVzY3JpcHRvcnMuLgorICovCisJbG9uZyBlYng7CisJbG9uZyBlY3g7CisJbG9uZyBlZHg7CisJbG9uZyBlc2k7CisJbG9uZyBlZGk7CisJbG9uZyBlYnA7CisJbG9uZyBlYXg7CisJbG9uZyBfX251bGxfZHM7CisJbG9uZyBfX251bGxfZXM7CisJbG9uZyBfX251bGxfZnM7CisJbG9uZyBfX251bGxfZ3M7CisJbG9uZyBvcmlnX2VheDsKKwlsb25nIGVpcDsKKwl1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CisJbG9uZyBlZmxhZ3M7CisJbG9uZyBlc3A7CisJdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOworLyoKKyAqIHRoZXNlIGFyZSBzcGVjaWZpYyB0byB2ODYgbW9kZToKKyAqLworCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKKwl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CisJdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOworCXVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKK307CisKK3N0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBfX21hcFs4XTsJCQkvKiAyNTYgYml0cyAqLworfTsKKworc3RydWN0IHZtODZfc3RydWN0IHsKKwlzdHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CisJdW5zaWduZWQgbG9uZyBjcHVfdHlwZTsKKwlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50X3JldmVjdG9yZWQ7CisJc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludDIxX3JldmVjdG9yZWQ7Cit9OworCisvKgorICogZmxhZ3MgbWFza3MKKyAqLworI2RlZmluZSBWTTg2X1NDUkVFTl9CSVRNQVAJMHgwMDAxCisKK3N0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBmb3JjZV9yZXR1cm5fZm9yX3BpYzoxOworCXVuc2lnbmVkIGxvbmcgdm04NmRiZ19hY3RpdmU6MTsgICAgICAgLyogZm9yIGRlYnVnZ2VyICovCisJdW5zaWduZWQgbG9uZyB2bTg2ZGJnX1RGcGVuZGlnOjE7ICAgICAvKiBmb3IgZGVidWdnZXIgKi8KKwl1bnNpZ25lZCBsb25nIHVudXNlZDoyODsKKwl1bnNpZ25lZCBsb25nIGlzX3ZtODZwdXM6MTsJICAgICAgLyogZm9yIHZtODYgaW50ZXJuYWwgdXNlICovCisJdW5zaWduZWQgY2hhciB2bTg2ZGJnX2ludHh4dGFiWzMyXTsgICAvKiBmb3IgZGVidWdnZXIgKi8KK307CitzdHJ1Y3Qgdm04NnBsdXNfc3RydWN0IHsKKwlzdHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CisJdW5zaWduZWQgbG9uZyBjcHVfdHlwZTsKKwlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50X3JldmVjdG9yZWQ7CisJc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludDIxX3JldmVjdG9yZWQ7CisJc3RydWN0IHZtODZwbHVzX2luZm9fc3RydWN0IHZtODZwbHVzOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIChrZXJuZWwpIHN0YWNrLWxheW91dCB3aGVuIHdlIGhhdmUgZG9uZSBhICJTQVZFX0FMTCIgZnJvbSB2bTg2CisgKiBtb2RlIC0gdGhlIG1haW4gY2hhbmdlIGlzIHRoYXQgdGhlIG9sZCBzZWdtZW50IGRlc2NyaXB0b3JzIGFyZW4ndAorICogdXNlZnVsIGFueSBtb3JlIGFuZCBhcmUgZm9yY2VkIHRvIGJlIHplcm8gYnkgdGhlIGtlcm5lbCAoYW5kIHRoZQorICogaGFyZHdhcmUgd2hlbiBhIHRyYXAgb2NjdXJzKSwgYW5kIHRoZSByZWFsIHNlZ21lbnQgZGVzY3JpcHRvcnMgYXJlCisgKiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuIExvb2sgYXQgcHRyYWNlLmggdG8gc2VlIHRoZSAibm9ybWFsIgorICogc2V0dXAuIEZvciB1c2VyIHNwYWNlIGxheW91dCBzZWUgJ3N0cnVjdCB2bTg2X3JlZ3MnIGFib3ZlLgorICovCisKK3N0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHsKKy8qCisgKiBub3JtYWwgcmVncywgd2l0aCBzcGVjaWFsIG1lYW5pbmcgZm9yIHRoZSBzZWdtZW50IGRlc2NyaXB0b3JzLi4KKyAqLworCXN0cnVjdCBwdF9yZWdzIHB0OworLyoKKyAqIHRoZXNlIGFyZSBzcGVjaWZpYyB0byB2ODYgbW9kZToKKyAqLworCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKKwl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CisJdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOworCXVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKK307CisKK3N0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QgeworCXN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHJlZ3M7CisvKgorICogdGhlIGJlbG93IHBhcnQgcmVtYWlucyBvbiB0aGUga2VybmVsIHN0YWNrIHdoaWxlIHdlIGFyZSBpbiBWTTg2IG1vZGUuCisgKiAndHNzLmVzcDAnIHRoZW4gY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgVk04Nl9UU1NfRVNQMCBiZWxvdywgYW5kIHdoZW4gd2UKKyAqIGdldCBmb3JjZWQgYmFjayBmcm9tIFZNODYsIHRoZSBDUFUgYW5kICJTQVZFX0FMTCIgd2lsbCByZXN0b3JlIHRoZSBhYm92ZQorICogJ3N0cnVjdCBrZXJuZWxfdm04Nl9yZWdzJyB3aXRoIHRoZSB0aGVuIGFjdHVhbCB2YWx1ZXMuCisgKiBUaGVyZWZvcmUsIHB0X3JlZ3MgaW4gZmFjdCBwb2ludHMgdG8gYSBjb21wbGV0ZSAna2VybmVsX3ZtODZfc3RydWN0JworICogaW4ga2VybmVsc3BhY2UsIGhlbmNlIHdlIG5lZWQgbm90IHJlZ2V0IHRoZSBkYXRhIGZyb20gdXNlcnNwYWNlLgorICovCisjZGVmaW5lIFZNODZfVFNTX0VTUDAgZmxhZ3MKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKKwl1bnNpZ25lZCBsb25nIGNwdV90eXBlOworCXN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2ZWN0b3JlZDsKKwlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3JlZDsKKwlzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3Qgdm04NnBsdXM7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MzMjsgICAvKiBoZXJlIHdlIHNhdmUgdGhlIHBvaW50ZXIgdG8gdGhlIG9sZCByZWdzICovCisvKgorICogVGhlIGJlbG93IGlzIG5vdCBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0aGUgc3RhY2sgbGF5b3V0IGNvbnRpbnVlcworICogdGhpcyB3YXkuIEluIGZyb250IG9mICdyZXR1cm4tZWlwJyBtYXkgYmUgc29tZSBkYXRhLCBkZXBlbmRpbmcgb24KKyAqIGNvbXBpbGF0aW9uLCBzbyB3ZSBkb24ndCByZWx5IG9uIHRoaXMgYW5kIHNhdmUgdGhlIHBvaW50ZXIgdG8gJ29sZHJlZ3MnCisgKiBpbiAncmVnczMyJyBhYm92ZS4KKyAqIEhvd2V2ZXIsIHdpdGggR0NDLTIuNy4yIGFuZCB0aGUgY3VycmVudCBDRkxBR1MgeW91IHNlZSBleGFjdGx5IHRoaXM6CisKKwlsb25nIHJldHVybi1laXA7ICAgICAgICBmcm9tIGNhbGwgdG8gdm04NigpCisJc3RydWN0IHB0X3JlZ3Mgb2xkcmVnczsgIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGFzIHNhdmVkIGJ5IHN5c2NhbGwKKyAqLworfTsKKworI2lmZGVmIENPTkZJR19WTTg2CisKK3ZvaWQgaGFuZGxlX3ZtODZfZmF1bHQoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiwgbG9uZyk7CitpbnQgaGFuZGxlX3ZtODZfdHJhcChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqLCBsb25nLCBpbnQpOworc3RydWN0IHB0X3JlZ3MgKnNhdmVfdjg2X3N0YXRlKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopOworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7Cit2b2lkIHJlbGVhc2Vfdm04Nl9pcnFzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworI2Vsc2UKKworI2RlZmluZSBoYW5kbGVfdm04Nl9mYXVsdChhLCBiKQorI2RlZmluZSByZWxlYXNlX3ZtODZfaXJxcyhhKQorCitzdGF0aWMgaW5saW5lIGludCBoYW5kbGVfdm04Nl90cmFwKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICphLCBsb25nIGIsIGludCBjKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1ZNODYgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X1ZNODZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3ZtaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm1pLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni92bWkuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vdm1pLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZtaV90aW1lLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bWlfdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTBiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bWlfdGltZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBWTUkgVGltZSB3cmFwcGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgVk13YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogU2VuZCBmZWVkYmFjayB0byBkaGVjaHRAdm13YXJlLmNvbQorICoKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1ZNSV9USU1FX0gKKyNkZWZpbmUgX0FTTV9YODZfVk1JX1RJTUVfSAorCisvKgorICogUmF3IFZNSSBjYWxsIGluZGljZXMgZm9yIHRpbWVyIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFZNSV9DQUxMX0dldEN5Y2xlRnJlcXVlbmN5CTY2CisjZGVmaW5lIFZNSV9DQUxMX0dldEN5Y2xlQ291bnRlcgk2NworI2RlZmluZSBWTUlfQ0FMTF9TZXRBbGFybQkJNjgKKyNkZWZpbmUgVk1JX0NBTExfQ2FuY2VsQWxhcm0JCTY5CisjZGVmaW5lIFZNSV9DQUxMX0dldFdhbGxjbG9ja1RpbWUJNzAKKyNkZWZpbmUgVk1JX0NBTExfV2FsbGNsb2NrVXBkYXRlZAk3MQorCisvKiBDYWNoZWQgVk1JIHRpbWVyIG9wZXJhdGlvbnMgKi8KK2V4dGVybiBzdHJ1Y3Qgdm1pX3RpbWVyX29wcyB7CisJdTY0ICgqZ2V0X2N5Y2xlX2ZyZXF1ZW5jeSkodm9pZCk7CisJdTY0ICgqZ2V0X2N5Y2xlX2NvdW50ZXIpKGludCk7CisJdTY0ICgqZ2V0X3dhbGxjbG9jaykodm9pZCk7CisJaW50ICgqd2FsbGNsb2NrX3VwZGF0ZWQpKHZvaWQpOworCXZvaWQgKCpzZXRfYWxhcm0pKHUzMiBmbGFncywgdTY0IGV4cGlyeSwgdTY0IHBlcmlvZCk7CisJdm9pZCAoKmNhbmNlbF9hbGFybSkodTMyIGZsYWdzKTsKK30gdm1pX3RpbWVyX29wczsKKworLyogUHJvdG90eXBlcyAqLworZXh0ZXJuIHZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2bWlfZ2V0X3dhbGxjbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgdm1pX3NldF93YWxsY2xvY2sodW5zaWduZWQgbG9uZyBub3cpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB2bWlfc2NoZWRfY2xvY2sodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2bWlfdHNjX2toeih2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworZXh0ZXJuIHZvaWQgX19kZXZpbml0IHZtaV90aW1lX2JzcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19kZXZpbml0IHZtaV90aW1lX2FwX2luaXQodm9pZCk7CisjZW5kaWYKKworLyoKKyAqIFdoZW4gcnVuIHVuZGVyIGEgaHlwZXJ2aXNvciwgYSB2Y3B1IGlzIGFsd2F5cyBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOgorICogcnVubmluZywgaGFsdGVkLCBvciByZWFkeS4gIFRoZSB2Y3B1IGlzIGluIHRoZSAncnVubmluZycgc3RhdGUgaWYgaXQKKyAqIGlzIGV4ZWN1dGluZy4gIFdoZW4gdGhlIHZjcHUgZXhlY3V0ZXMgdGhlIGhhbHQgaW50ZXJmYWNlLCB0aGUgdmNwdQorICogZW50ZXJzIHRoZSAnaGFsdGVkJyBzdGF0ZSBhbmQgcmVtYWlucyBoYWx0ZWQgdW50aWwgdGhlcmUgaXMgc29tZSB3b3JrCisgKiBwZW5kaW5nIGZvciB0aGUgdmNwdSAoZS5nLiBhbiBhbGFybSBleHBpcmVzLCBob3N0IEkvTyBjb21wbGV0ZXMgb24KKyAqIGJlaGFsZiBvZiB2aXJ0dWFsIEkvTykuICBBdCB0aGlzIHBvaW50LCB0aGUgdmNwdSBlbnRlcnMgdGhlICdyZWFkeScKKyAqIHN0YXRlICh3YWl0aW5nIGZvciB0aGUgaHlwZXJ2aXNvciB0byByZXNjaGVkdWxlIGl0KS4gIEZpbmFsbHksIGF0IGFueQorICogdGltZSB3aGVuIHRoZSB2Y3B1IGlzIG5vdCBpbiB0aGUgJ3J1bm5pbmcnIHN0YXRlIG5vciB0aGUgJ2hhbHRlZCcKKyAqIHN0YXRlLCBpdCBpcyBpbiB0aGUgJ3JlYWR5JyBzdGF0ZS4KKyAqCisgKiBSZWFsIHRpbWUgaXMgYWR2YW5jZXMgd2hpbGUgdGhlIHZjcHUgaXMgJ3J1bm5pbmcnLCAncmVhZHknLCBvcgorICogJ2hhbHRlZCcuICBTdG9sZW4gdGltZSBpcyB0aGUgdGltZSBpbiB3aGljaCB0aGUgdmNwdSBpcyBpbiB0aGUKKyAqICdyZWFkeScgc3RhdGUuICBBdmFpbGFibGUgdGltZSBpcyB0aGUgcmVtYWluaW5nIHRpbWUgLS0gdGhlIHZjcHUgaXMKKyAqIGVpdGhlciAncnVubmluZycgb3IgJ2hhbHRlZCcuCisgKgorICogQWxsIHRocmVlIHZpZXdzIG9mIHRpbWUgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVk1JIGN5Y2xlCisgKiBjb3VudGVycy4KKyAqLworCisvKiBUaGUgY3ljbGUgY291bnRlcnMuICovCisjZGVmaW5lIFZNSV9DWUNMRVNfUkVBTCAgICAgICAgIDAKKyNkZWZpbmUgVk1JX0NZQ0xFU19BVkFJTEFCTEUgICAgMQorI2RlZmluZSBWTUlfQ1lDTEVTX1NUT0xFTiAgICAgICAyCisKKy8qIFRoZSBhbGFybSBpbnRlcmZhY2UgJ2ZsYWdzJyBiaXRzICovCisjZGVmaW5lIFZNSV9BTEFSTV9DT1VOVEVSUyAgICAgIDIKKworI2RlZmluZSBWTUlfQUxBUk1fQ09VTlRFUl9NQVNLICAweDAwMDAwMGZmCisKKyNkZWZpbmUgVk1JX0FMQVJNX1dJUkVEX0lSUTAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWTUlfQUxBUk1fV0lSRURfTFZUVCAgICAweDAwMDEwMDAwCisKKyNkZWZpbmUgVk1JX0FMQVJNX0lTX09ORVNIT1QgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWTUlfQUxBUk1fSVNfUEVSSU9ESUMgICAweDAwMDAwMTAwCisKKyNkZWZpbmUgQ09ORklHX1ZNSV9BTEFSTV9IWgkxMDAKKworI2VuZGlmIC8qIF9BU01fWDg2X1ZNSV9USU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni92b3lhZ2VyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92b3lhZ2VyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni92b3lhZ2VyLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3ZveWFnZXIuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdnN5c2NhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5ODNkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9WU1lTQ0FMTF9ICisjZGVmaW5lIF9BU01fWDg2X1ZTWVNDQUxMX0gKKworZW51bSB2c3lzY2FsbF9udW0geworCV9fTlJfdmdldHRpbWVvZmRheSwKKwlfX05SX3Z0aW1lLAorCV9fTlJfdmdldGNwdSwKK307CisKKyNkZWZpbmUgVlNZU0NBTExfU1RBUlQgKC0xMFVMIDw8IDIwKQorI2RlZmluZSBWU1lTQ0FMTF9TSVpFIDEwMjQKKyNkZWZpbmUgVlNZU0NBTExfRU5EICgtMlVMIDw8IDIwKQorI2RlZmluZSBWU1lTQ0FMTF9NQVBQRURfUEFHRVMgMQorI2RlZmluZSBWU1lTQ0FMTF9BRERSKHZzeXNjYWxsX25yKSAoVlNZU0NBTExfU1RBUlQrVlNZU0NBTExfU0laRSoodnN5c2NhbGxfbnIpKQorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KKworI2RlZmluZSBfX3NlY3Rpb25fdmdldGNwdV9tb2RlIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnZnZXRjcHVfbW9kZSIpLCBhbGlnbmVkKDE2KSkpCisjZGVmaW5lIF9fc2VjdGlvbl9qaWZmaWVzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLmppZmZpZXMiKSwgYWxpZ25lZCgxNikpKQorCisvKiBEZWZpbml0aW9ucyBmb3IgQ09ORklHX0dFTkVSSUNfVElNRSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBfX3NlY3Rpb25fdnN5c2NhbGxfZ3RvZF9kYXRhIF9fYXR0cmlidXRlX18gXAorCSgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi52c3lzY2FsbF9ndG9kX2RhdGEiKSxhbGlnbmVkKDE2KSkpCisjZGVmaW5lIF9fc2VjdGlvbl92c3lzY2FsbF9jbG9jayBfX2F0dHJpYnV0ZV9fIFwKKwkoKHVudXNlZCwgX19zZWN0aW9uX18gKCIudnN5c2NhbGxfY2xvY2siKSxhbGlnbmVkKDE2KSkpCisjZGVmaW5lIF9fdnN5c2NhbGxfZm4gXAorCV9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fKCIudnN5c2NhbGxfZm4iKSkpIG5vdHJhY2UKKworI2RlZmluZSBWR0VUQ1BVX1JEVFNDUAkxCisjZGVmaW5lIFZHRVRDUFVfTFNMCTIKKworZXh0ZXJuIGludCBfX3ZnZXRjcHVfbW9kZTsKK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9famlmZmllczsKKworLyoga2VybmVsIHNwYWNlICh3cml0ZWFibGUpICovCitleHRlcm4gaW50IHZnZXRjcHVfbW9kZTsKK2V4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OworCitleHRlcm4gdm9pZCBtYXBfdnN5c2NhbGwodm9pZCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9WU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGNyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94Y3IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L3hjci5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS94Y3IuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MTQ0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9YRU5fRVZFTlRTX0gKKyNkZWZpbmUgX0FTTV9YODZfWEVOX0VWRU5UU19ICisKK2VudW0gaXBpX3ZlY3RvciB7CisJWEVOX1JFU0NIRURVTEVfVkVDVE9SLAorCVhFTl9DQUxMX0ZVTkNUSU9OX1ZFQ1RPUiwKKwlYRU5fQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SLAorCVhFTl9TUElOX1VOTE9DS19WRUNUT1IsCisKKwlYRU5fTlJfSVBJUywKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHhlbl9pcnFzX2Rpc2FibGVkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByYXdfaXJxc19kaXNhYmxlZF9mbGFncyhyZWdzLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fZG9fSVJRKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3MtPm9yaWdfYXggPSB+aXJxOworCWRvX0lSUShyZWdzKTsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X1hFTl9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2dyYW50X3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vZ3JhbnRfdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGJiYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2dyYW50X3RhYmxlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fWDg2X1hFTl9HUkFOVF9UQUJMRV9ICisjZGVmaW5lIF9BU01fWDg2X1hFTl9HUkFOVF9UQUJMRV9ICisKKyNkZWZpbmUgeGVuX2FsbG9jX3ZtX2FyZWEoc2l6ZSkJYWxsb2Nfdm1fYXJlYShzaXplKQorI2RlZmluZSB4ZW5fZnJlZV92bV9hcmVhKGFyZWEpCWZyZWVfdm1fYXJlYShhcmVhKQorCisjZW5kaWYgLyogX0FTTV9YODZfWEVOX0dSQU5UX1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYwMDBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCkBAIC0wLDAgKzEsNTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBoeXBlcmNhbGwuaAorICoKKyAqIExpbnV4LXNwZWNpZmljIGh5cGVydmlzb3IgaGFuZGxpbmcuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0FTTV9YODZfWEVOX0hZUEVSQ0FMTF9ICisjZGVmaW5lIF9BU01fWDg2X1hFTl9IWVBFUkNBTExfSAorCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9zY2hlZC5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvcGh5c2Rldi5oPgorCisvKgorICogVGhlIGh5cGVyY2FsbCBhc21zIGhhdmUgdG8gbWVldCBzZXZlcmFsIGNvbnN0cmFpbnRzOgorICogLSBXb3JrIG9uIDMyLSBhbmQgNjQtYml0LgorICogICAgVGhlIHR3byBhcmNoaXRlY3R1cmVzIHB1dCB0aGVpciBhcmd1bWVudHMgaW4gZGlmZmVyZW50IHNldHMgb2YKKyAqICAgIHJlZ2lzdGVycy4KKyAqCisgKiAtIFdvcmsgYXJvdW5kIGFzbSBzeW50YXggcXVpcmtzCisgKiAgICBJdCBpc24ndCBwb3NzaWJsZSB0byBzcGVjaWZ5IG9uZSBvZiB0aGUgck5OIHJlZ2lzdGVycyBpbiBhCisgKiAgICBjb25zdHJhaW50LCBzbyB3ZSB1c2UgZXhwbGljaXQgcmVnaXN0ZXIgdmFyaWFibGVzIHRvIGdldCB0aGUKKyAqICAgIGFyZ3MgaW50byB0aGUgcmlnaHQgcGxhY2UuCisgKgorICogLSBNYXJrIGFsbCByZWdpc3RlcnMgYXMgcG90ZW50aWFsbHkgY2xvYmJlcmVkCisgKiAgICBFdmVuIHVudXNlZCBwYXJhbWV0ZXJzIGNhbiBiZSBjbG9iYmVyZWQgYnkgdGhlIGh5cGVydmlzb3IsIHNvIHdlCisgKiAgICBuZWVkIHRvIG1ha2Ugc3VyZSBnY2Mga25vd3MgaXQuCisgKgorICogLSBBdm9pZCBjb21waWxlciBidWdzLgorICogICAgVGhpcyBpcyB0aGUgdHJpY2t5IHBhcnQuICBCZWNhdXNlIHg4Nl8zMiBoYXMgc3VjaCBhIGNvbnN0cmFpbmVkCisgKiAgICByZWdpc3RlciBzZXQsIGdjYyB2ZXJzaW9ucyBiZWxvdyA0LjMgaGF2ZSB0cm91YmxlIGdlbmVyYXRpbmcKKyAqICAgIGNvZGUgd2hlbiBhbGwgdGhlIGFyZyByZWdpc3RlcnMgYW5kIG1lbW9yeSBhcmUgdHJhc2hlZCBieSB0aGUKKyAqICAgIGFzbS4gIFRoZXJlIGFyZSBzeW50YWN0aWNhbGx5IHNpbXBsZXIgd2F5cyBvZiBhY2hpZXZpbmcgdGhlCisgKiAgICBzZW1hbnRpY3MgYmVsb3csIGJ1dCB0aGV5IGNhdXNlIHRoZSBjb21waWxlciB0byBjcmFzaC4KKyAqCisgKiAgICBUaGUgb25seSBjb21iaW5hdGlvbiBJIGZvdW5kIHdoaWNoIHdvcmtzIGlzOgorICogICAgIC0gYXNzaWduIHRoZSBfX2FyZ1ggdmFyaWFibGVzIGZpcnN0CisgKiAgICAgLSBsaXN0IGFsbCBhY3R1YWxseSB1c2VkIHBhcmFtZXRlcnMgYXMgIityIiAoX19hcmdYKQorICogICAgIC0gY2xvYmJlciB0aGUgcmVzdAorICoKKyAqIFRoZSByZXN1bHQgY2VydGFpbmx5IGlzbid0IHByZXR0eSwgYW5kIGl0IHJlYWxseSBzaG93cyB1cCBjcHAncworICogd2Vha25lc3MgYXMgYXMgbWFjcm8gbGFuZ3VhZ2UuICBTb3JyeS4gIChCdXQgbGV0J3MganVzdCBnaXZlIHRoYW5rcworICogdGhlcmUgYXJlbid0IG1vcmUgdGhhbiA1IGFyZ3VtZW50cy4uLikKKyAqLworCitleHRlcm4gc3RydWN0IHsgY2hhciBfZW50cnlbMzJdOyB9IGh5cGVyY2FsbF9wYWdlW107CisKKyNkZWZpbmUgX19IWVBFUkNBTEwJCSJjYWxsIGh5cGVyY2FsbF9wYWdlKyVjW29mZnNldF0iCisjZGVmaW5lIF9fSFlQRVJDQUxMX0VOVFJZKHgpCQkJCQkJXAorCVtvZmZzZXRdICJpIiAoX19IWVBFUlZJU09SXyMjeCAqIHNpemVvZihoeXBlcmNhbGxfcGFnZVswXSkpCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIF9fSFlQRVJDQUxMX1JFVFJFRwkiZWF4IgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkcxUkVHCSJlYngiCisjZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzJSRUcJImVjeCIKKyNkZWZpbmUgX19IWVBFUkNBTExfQVJHM1JFRwkiZWR4IgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkc0UkVHCSJlc2kiCisjZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzVSRUcJImVkaSIKKyNlbHNlCisjZGVmaW5lIF9fSFlQRVJDQUxMX1JFVFJFRwkicmF4IgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkcxUkVHCSJyZGkiCisjZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzJSRUcJInJzaSIKKyNkZWZpbmUgX19IWVBFUkNBTExfQVJHM1JFRwkicmR4IgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkc0UkVHCSJyMTAiCisjZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzVSRUcJInI4IgorI2VuZGlmCisKKyNkZWZpbmUgX19IWVBFUkNBTExfREVDTFMJCQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyAgYXNtKF9fSFlQRVJDQUxMX1JFVFJFRyk7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzEgYXNtKF9fSFlQRVJDQUxMX0FSRzFSRUcpID0gX19hcmcxOyBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzIgYXNtKF9fSFlQRVJDQUxMX0FSRzJSRUcpID0gX19hcmcyOyBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzMgYXNtKF9fSFlQRVJDQUxMX0FSRzNSRUcpID0gX19hcmczOyBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzQgYXNtKF9fSFlQRVJDQUxMX0FSRzRSRUcpID0gX19hcmc0OyBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzUgYXNtKF9fSFlQRVJDQUxMX0FSRzVSRUcpID0gX19hcmc1OworCisjZGVmaW5lIF9fSFlQRVJDQUxMXzBQQVJBTQkiPXIiIChfX3JlcykKKyNkZWZpbmUgX19IWVBFUkNBTExfMVBBUkFNCV9fSFlQRVJDQUxMXzBQQVJBTSwgIityIiAoX19hcmcxKQorI2RlZmluZSBfX0hZUEVSQ0FMTF8yUEFSQU0JX19IWVBFUkNBTExfMVBBUkFNLCAiK3IiIChfX2FyZzIpCisjZGVmaW5lIF9fSFlQRVJDQUxMXzNQQVJBTQlfX0hZUEVSQ0FMTF8yUEFSQU0sICIrciIgKF9fYXJnMykKKyNkZWZpbmUgX19IWVBFUkNBTExfNFBBUkFNCV9fSFlQRVJDQUxMXzNQQVJBTSwgIityIiAoX19hcmc0KQorI2RlZmluZSBfX0hZUEVSQ0FMTF81UEFSQU0JX19IWVBFUkNBTExfNFBBUkFNLCAiK3IiIChfX2FyZzUpCisKKyNkZWZpbmUgX19IWVBFUkNBTExfMEFSRygpCisjZGVmaW5lIF9fSFlQRVJDQUxMXzFBUkcoYTEpCQkJCQkJXAorCV9fSFlQRVJDQUxMXzBBUkcoKQkJX19hcmcxID0gKHVuc2lnbmVkIGxvbmcpKGExKTsKKyNkZWZpbmUgX19IWVBFUkNBTExfMkFSRyhhMSxhMikJCQkJCQlcCisJX19IWVBFUkNBTExfMUFSRyhhMSkJCV9fYXJnMiA9ICh1bnNpZ25lZCBsb25nKShhMik7CisjZGVmaW5lIF9fSFlQRVJDQUxMXzNBUkcoYTEsYTIsYTMpCQkJCQlcCisJX19IWVBFUkNBTExfMkFSRyhhMSxhMikJCV9fYXJnMyA9ICh1bnNpZ25lZCBsb25nKShhMyk7CisjZGVmaW5lIF9fSFlQRVJDQUxMXzRBUkcoYTEsYTIsYTMsYTQpCQkJCQlcCisJX19IWVBFUkNBTExfM0FSRyhhMSxhMixhMykJX19hcmc0ID0gKHVuc2lnbmVkIGxvbmcpKGE0KTsKKyNkZWZpbmUgX19IWVBFUkNBTExfNUFSRyhhMSxhMixhMyxhNCxhNSkJCQkJXAorCV9fSFlQRVJDQUxMXzRBUkcoYTEsYTIsYTMsYTQpCV9fYXJnNSA9ICh1bnNpZ25lZCBsb25nKShhNSk7CisKKyNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjUJIm1lbW9yeSIKKyNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjQJX19IWVBFUkNBTExfQ0xPQkJFUjUsIF9fSFlQRVJDQUxMX0FSRzVSRUcKKyNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjMJX19IWVBFUkNBTExfQ0xPQkJFUjQsIF9fSFlQRVJDQUxMX0FSRzRSRUcKKyNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjIJX19IWVBFUkNBTExfQ0xPQkJFUjMsIF9fSFlQRVJDQUxMX0FSRzNSRUcKKyNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjEJX19IWVBFUkNBTExfQ0xPQkJFUjIsIF9fSFlQRVJDQUxMX0FSRzJSRUcKKyNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjAJX19IWVBFUkNBTExfQ0xPQkJFUjEsIF9fSFlQRVJDQUxMX0FSRzFSRUcKKworI2RlZmluZSBfaHlwZXJjYWxsMCh0eXBlLCBuYW1lKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKKwlfX0hZUEVSQ0FMTF8wQVJHKCk7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF8wUEFSQU0JCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZKG5hbWUpCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSMCk7CQkJCVwKKwkodHlwZSlfX3JlczsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfaHlwZXJjYWxsMSh0eXBlLCBuYW1lLCBhMSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKKwlfX0hZUEVSQ0FMTF8xQVJHKGExKTsJCQkJCQlcCisJYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMXzFQQVJBTQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVIxKTsJCQkJXAorCSh0eXBlKV9fcmVzOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9oeXBlcmNhbGwyKHR5cGUsIG5hbWUsIGExLCBhMikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKKwlfX0hZUEVSQ0FMTF8yQVJHKGExLCBhMik7CQkJCQlcCisJYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMXzJQQVJBTQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVIyKTsJCQkJXAorCSh0eXBlKV9fcmVzOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9oeXBlcmNhbGwzKHR5cGUsIG5hbWUsIGExLCBhMiwgYTMpCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKKwlfX0hZUEVSQ0FMTF8zQVJHKGExLCBhMiwgYTMpOwkJCQkJXAorCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF8zUEFSQU0JCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZKG5hbWUpCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSMyk7CQkJCVwKKwkodHlwZSlfX3JlczsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfaHlwZXJjYWxsNCh0eXBlLCBuYW1lLCBhMSwgYTIsIGEzLCBhNCkJCQkJXAorKHsJCQkJCQkJCQlcCisJX19IWVBFUkNBTExfREVDTFM7CQkJCQkJXAorCV9fSFlQRVJDQUxMXzRBUkcoYTEsIGEyLCBhMywgYTQpOwkJCQlcCisJYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMXzRQQVJBTQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVI0KTsJCQkJXAorCSh0eXBlKV9fcmVzOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9oeXBlcmNhbGw1KHR5cGUsIG5hbWUsIGExLCBhMiwgYTMsIGE0LCBhNSkJCQlcCisoewkJCQkJCQkJCVwKKwlfX0hZUEVSQ0FMTF9ERUNMUzsJCQkJCQlcCisJX19IWVBFUkNBTExfNUFSRyhhMSwgYTIsIGEzLCBhNCwgYTUpOwkJCQlcCisJYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMXzVQQVJBTQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVI1KTsJCQkJXAorCSh0eXBlKV9fcmVzOwkJCQkJCQlcCit9KQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9zZXRfdHJhcF90YWJsZShzdHJ1Y3QgdHJhcF9pbmZvICp0YWJsZSkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDEoaW50LCBzZXRfdHJhcF90YWJsZSwgdGFibGUpOworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9tbXVfdXBkYXRlKHN0cnVjdCBtbXVfdXBkYXRlICpyZXEsIGludCBjb3VudCwKKwkJICAgICAgaW50ICpzdWNjZXNzX2NvdW50LCBkb21pZF90IGRvbWlkKQoreworCXJldHVybiBfaHlwZXJjYWxsNChpbnQsIG1tdV91cGRhdGUsIHJlcSwgY291bnQsIHN1Y2Nlc3NfY291bnQsIGRvbWlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfbW11ZXh0X29wKHN0cnVjdCBtbXVleHRfb3AgKm9wLCBpbnQgY291bnQsCisJCSAgICAgaW50ICpzdWNjZXNzX2NvdW50LCBkb21pZF90IGRvbWlkKQoreworCXJldHVybiBfaHlwZXJjYWxsNChpbnQsIG1tdWV4dF9vcCwgb3AsIGNvdW50LCBzdWNjZXNzX2NvdW50LCBkb21pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3NldF9nZHQodW5zaWduZWQgbG9uZyAqZnJhbWVfbGlzdCwgaW50IGVudHJpZXMpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X2dkdCwgZnJhbWVfbGlzdCwgZW50cmllcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3N0YWNrX3N3aXRjaCh1bnNpZ25lZCBsb25nIHNzLCB1bnNpZ25lZCBsb25nIGVzcCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBzdGFja19zd2l0Y2gsIHNzLCBlc3ApOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcyh1bnNpZ25lZCBsb25nIGV2ZW50X3NlbGVjdG9yLAorCQkJIHVuc2lnbmVkIGxvbmcgZXZlbnRfYWRkcmVzcywKKwkJCSB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX3NlbGVjdG9yLAorCQkJIHVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfYWRkcmVzcykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCBzZXRfY2FsbGJhY2tzLAorCQkJICAgZXZlbnRfc2VsZWN0b3IsIGV2ZW50X2FkZHJlc3MsCisJCQkgICBmYWlsc2FmZV9zZWxlY3RvciwgZmFpbHNhZmVfYWRkcmVzcyk7Cit9CisjZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcyh1bnNpZ25lZCBsb25nIGV2ZW50X2FkZHJlc3MsCisJCQl1bnNpZ25lZCBsb25nIGZhaWxzYWZlX2FkZHJlc3MsCisJCQl1bnNpZ25lZCBsb25nIHN5c2NhbGxfYWRkcmVzcykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBzZXRfY2FsbGJhY2tzLAorCQkJICAgZXZlbnRfYWRkcmVzcywgZmFpbHNhZmVfYWRkcmVzcywKKwkJCSAgIHN5c2NhbGxfYWRkcmVzcyk7Cit9CisjZW5kaWYgIC8qIENPTkZJR19YODZfezMyLDY0fSAqLworCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9jYWxsYmFja19vcChpbnQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgY2FsbGJhY2tfb3AsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfZnB1X3Rhc2tzd2l0Y2goaW50IHNldCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDEoaW50LCBmcHVfdGFza3N3aXRjaCwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc2NoZWRfb3AoaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHNjaGVkX29wX25ldywgY21kLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcKK0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wKHU2NCB0aW1lb3V0KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dF9oaSA9ICh1bnNpZ25lZCBsb25nKSh0aW1lb3V0Pj4zMik7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2xvID0gKHVuc2lnbmVkIGxvbmcpdGltZW91dDsKKwlyZXR1cm4gX2h5cGVyY2FsbDIobG9uZywgc2V0X3RpbWVyX29wLCB0aW1lb3V0X2xvLCB0aW1lb3V0X2hpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc2V0X2RlYnVncmVnKGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X2RlYnVncmVnLCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitIWVBFUlZJU09SX2dldF9kZWJ1Z3JlZyhpbnQgcmVnKQoreworCXJldHVybiBfaHlwZXJjYWxsMSh1bnNpZ25lZCBsb25nLCBnZXRfZGVidWdyZWcsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3VwZGF0ZV9kZXNjcmlwdG9yKHU2NCBtYSwgdTY0IGRlc2MpCit7CisJcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgdXBkYXRlX2Rlc2NyaXB0b3IsIG1hLCBtYT4+MzIsIGRlc2MsIGRlc2M+PjMyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfbWVtb3J5X29wKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBtZW1vcnlfb3AsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfbXVsdGljYWxsKHZvaWQgKmNhbGxfbGlzdCwgaW50IG5yX2NhbGxzKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIG11bHRpY2FsbCwgY2FsbF9saXN0LCBucl9jYWxscyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmEsIHB0ZV90IG5ld192YWwsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWYgKHNpemVvZihuZXdfdmFsKSA9PSBzaXplb2YobG9uZykpCisJCXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIHVwZGF0ZV92YV9tYXBwaW5nLCB2YSwKKwkJCQkgICBuZXdfdmFsLnB0ZSwgZmxhZ3MpOworCWVsc2UKKwkJcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgdXBkYXRlX3ZhX21hcHBpbmcsIHZhLAorCQkJCSAgIG5ld192YWwucHRlLCBuZXdfdmFsLnB0ZSA+PiAzMiwgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9ldmVudF9jaGFubmVsX29wKGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIGV2ZW50X2NoYW5uZWxfb3AsIGNtZCwgYXJnKTsKKwlpZiAodW5saWtlbHkocmMgPT0gLUVOT1NZUykpIHsKKwkJc3RydWN0IGV2dGNobl9vcCBvcDsKKwkJb3AuY21kID0gY21kOworCQltZW1jcHkoJm9wLnUsIGFyZywgc2l6ZW9mKG9wLnUpKTsKKwkJcmMgPSBfaHlwZXJjYWxsMShpbnQsIGV2ZW50X2NoYW5uZWxfb3BfY29tcGF0LCAmb3ApOworCQltZW1jcHkoYXJnLCAmb3AudSwgc2l6ZW9mKG9wLnUpKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl94ZW5fdmVyc2lvbihpbnQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgeGVuX3ZlcnNpb24sIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfY29uc29sZV9pbyhpbnQgY21kLCBpbnQgY291bnQsIGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBjb25zb2xlX2lvLCBjbWQsIGNvdW50LCBzdHIpOworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9waHlzZGV2X29wKGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIHBoeXNkZXZfb3AsIGNtZCwgYXJnKTsKKwlpZiAodW5saWtlbHkocmMgPT0gLUVOT1NZUykpIHsKKwkJc3RydWN0IHBoeXNkZXZfb3Agb3A7CisJCW9wLmNtZCA9IGNtZDsKKwkJbWVtY3B5KCZvcC51LCBhcmcsIHNpemVvZihvcC51KSk7CisJCXJjID0gX2h5cGVyY2FsbDEoaW50LCBwaHlzZGV2X29wX2NvbXBhdCwgJm9wKTsKKwkJbWVtY3B5KGFyZywgJm9wLnUsIHNpemVvZihvcC51KSk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqdW9wLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwzKGludCwgZ3JhbnRfdGFibGVfb3AsIGNtZCwgdW9wLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKHVuc2lnbmVkIGxvbmcgdmEsIHB0ZV90IG5ld192YWwsCisJCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLCBkb21pZF90IGRvbWlkKQoreworCWlmIChzaXplb2YobmV3X3ZhbCkgPT0gc2l6ZW9mKGxvbmcpKQorCQlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbiwgdmEsCisJCQkJICAgbmV3X3ZhbC5wdGUsIGZsYWdzLCBkb21pZCk7CisJZWxzZQorCQlyZXR1cm4gX2h5cGVyY2FsbDUoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbiwgdmEsCisJCQkJICAgbmV3X3ZhbC5wdGUsIG5ld192YWwucHRlID4+IDMyLAorCQkJCSAgIGZsYWdzLCBkb21pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3ZtX2Fzc2lzdCh1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCB2bV9hc3Npc3QsIGNtZCwgdHlwZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3ZjcHVfb3AoaW50IGNtZCwgaW50IHZjcHVpZCwgdm9pZCAqZXh0cmFfYXJncykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCB2Y3B1X29wLCBjbWQsIHZjcHVpZCwgZXh0cmFfYXJncyk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9zZXRfc2VnbWVudF9iYXNlKGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X3NlZ21lbnRfYmFzZSwgcmVnLCB2YWx1ZSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc3VzcGVuZCh1bnNpZ25lZCBsb25nIHNyZWMpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwzKGludCwgc2NoZWRfb3AsIFNDSEVET1Bfc2h1dGRvd24sCisJCQkgICBTSFVURE9XTl9zdXNwZW5kLCBzcmVjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfbm1pX29wKHVuc2lnbmVkIGxvbmcgb3AsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIG5taV9vcCwgb3AsIGFyZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorTVVMVElfZnB1X3Rhc2tzd2l0Y2goc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCBpbnQgc2V0KQoreworCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfZnB1X3Rhc2tzd2l0Y2g7CisJbWNsLT5hcmdzWzBdID0gc2V0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK01VTFRJX3VwZGF0ZV92YV9tYXBwaW5nKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwgdW5zaWduZWQgbG9uZyB2YSwKKwkJCXB0ZV90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZzsKKwltY2wtPmFyZ3NbMF0gPSB2YTsKKwlpZiAoc2l6ZW9mKG5ld192YWwpID09IHNpemVvZihsb25nKSkgeworCQltY2wtPmFyZ3NbMV0gPSBuZXdfdmFsLnB0ZTsKKwkJbWNsLT5hcmdzWzJdID0gZmxhZ3M7CisJfSBlbHNlIHsKKwkJbWNsLT5hcmdzWzFdID0gbmV3X3ZhbC5wdGU7CisJCW1jbC0+YXJnc1syXSA9IG5ld192YWwucHRlID4+IDMyOworCQltY2wtPmFyZ3NbM10gPSBmbGFnczsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorTVVMVElfZ3JhbnRfdGFibGVfb3Aoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgICAgIHZvaWQgKnVvcCwgdW5zaWduZWQgaW50IGNvdW50KQoreworCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3A7CisJbWNsLT5hcmdzWzBdID0gY21kOworCW1jbC0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKXVvcDsKKwltY2wtPmFyZ3NbMl0gPSBjb3VudDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV91cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbihzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5ICptY2wsIHVuc2lnbmVkIGxvbmcgdmEsCisJCQkJICAgIHB0ZV90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJICAgIGRvbWlkX3QgZG9taWQpCit7CisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbjsKKwltY2wtPmFyZ3NbMF0gPSB2YTsKKwlpZiAoc2l6ZW9mKG5ld192YWwpID09IHNpemVvZihsb25nKSkgeworCQltY2wtPmFyZ3NbMV0gPSBuZXdfdmFsLnB0ZTsKKwkJbWNsLT5hcmdzWzJdID0gZmxhZ3M7CisJCW1jbC0+YXJnc1szXSA9IGRvbWlkOworCX0gZWxzZSB7CisJCW1jbC0+YXJnc1sxXSA9IG5ld192YWwucHRlOworCQltY2wtPmFyZ3NbMl0gPSBuZXdfdmFsLnB0ZSA+PiAzMjsKKwkJbWNsLT5hcmdzWzNdID0gZmxhZ3M7CisJCW1jbC0+YXJnc1s0XSA9IGRvbWlkOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV91cGRhdGVfZGVzY3JpcHRvcihzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5ICptY2wsIHU2NCBtYWRkciwKKwkJCXN0cnVjdCBkZXNjX3N0cnVjdCBkZXNjKQoreworCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3I7CisJaWYgKHNpemVvZihtYWRkcikgPT0gc2l6ZW9mKGxvbmcpKSB7CisJCW1jbC0+YXJnc1swXSA9IG1hZGRyOworCQltY2wtPmFyZ3NbMV0gPSAqKHVuc2lnbmVkIGxvbmcgKikmZGVzYzsKKwl9IGVsc2UgeworCQltY2wtPmFyZ3NbMF0gPSBtYWRkcjsKKwkJbWNsLT5hcmdzWzFdID0gbWFkZHIgPj4gMzI7CisJCW1jbC0+YXJnc1syXSA9IGRlc2MuYTsKKwkJbWNsLT5hcmdzWzNdID0gZGVzYy5iOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV9tZW1vcnlfb3Aoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9tZW1vcnlfb3A7CisJbWNsLT5hcmdzWzBdID0gY21kOworCW1jbC0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWFyZzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV9tbXVfdXBkYXRlKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwgc3RydWN0IG1tdV91cGRhdGUgKnJlcSwKKwkJIGludCBjb3VudCwgaW50ICpzdWNjZXNzX2NvdW50LCBkb21pZF90IGRvbWlkKQoreworCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfbW11X3VwZGF0ZTsKKwltY2wtPmFyZ3NbMF0gPSAodW5zaWduZWQgbG9uZylyZXE7CisJbWNsLT5hcmdzWzFdID0gY291bnQ7CisJbWNsLT5hcmdzWzJdID0gKHVuc2lnbmVkIGxvbmcpc3VjY2Vzc19jb3VudDsKKwltY2wtPmFyZ3NbM10gPSBkb21pZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV9tbXVleHRfb3Aoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCBzdHJ1Y3QgbW11ZXh0X29wICpvcCwgaW50IGNvdW50LAorCQlpbnQgKnN1Y2Nlc3NfY291bnQsIGRvbWlkX3QgZG9taWQpCit7CisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9tbXVleHRfb3A7CisJbWNsLT5hcmdzWzBdID0gKHVuc2lnbmVkIGxvbmcpb3A7CisJbWNsLT5hcmdzWzFdID0gY291bnQ7CisJbWNsLT5hcmdzWzJdID0gKHVuc2lnbmVkIGxvbmcpc3VjY2Vzc19jb3VudDsKKwltY2wtPmFyZ3NbM10gPSBkb21pZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitNVUxUSV9zZXRfZ2R0KHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwgdW5zaWduZWQgbG9uZyAqZnJhbWVzLCBpbnQgZW50cmllcykKK3sKKwltY2wtPm9wID0gX19IWVBFUlZJU09SX3NldF9nZHQ7CisJbWNsLT5hcmdzWzBdID0gKHVuc2lnbmVkIGxvbmcpZnJhbWVzOworCW1jbC0+YXJnc1sxXSA9IGVudHJpZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorTVVMVElfc3RhY2tfc3dpdGNoKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwKKwkJICAgdW5zaWduZWQgbG9uZyBzcywgdW5zaWduZWQgbG9uZyBlc3ApCit7CisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9zdGFja19zd2l0Y2g7CisJbWNsLT5hcmdzWzBdID0gc3M7CisJbWNsLT5hcmdzWzFdID0gZXNwOworfQorCisjZW5kaWYgLyogX0FTTV9YODZfWEVOX0hZUEVSQ0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVydmlzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzhkMjVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVydmlzb3IuaApAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBoeXBlcnZpc29yLmgKKyAqCisgKiBMaW51eC1zcGVjaWZpYyBoeXBlcnZpc29yIGhhbmRsaW5nLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LCBLIEEgRnJhc2VyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgb3IsIHdoZW4gZGlzdHJpYnV0ZWQKKyAqIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvIG90aGVyCisgKiBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1hFTl9IWVBFUlZJU09SX0gKKyNkZWZpbmUgX0FTTV9YODZfWEVOX0hZUEVSVklTT1JfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2lmIGRlZmluZWQoX19pMzg2X18pCisjICBpZmRlZiBDT05GSUdfWDg2X1BBRQorIyAgIGluY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKyMgIGVsc2UKKyMgICBpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisjICBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KKworLyogYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jICovCitleHRlcm4gc3RydWN0IHNoYXJlZF9pbmZvICpIWVBFUlZJU09SX3NoYXJlZF9pbmZvOworZXh0ZXJuIHN0cnVjdCBzdGFydF9pbmZvICp4ZW5fc3RhcnRfaW5mbzsKKworLyogYXJjaC9pMzg2L21hY2gteGVuL2V2dGNobi5jICovCisvKiBGb3JjZSBhIHByb3BlciBldmVudC1jaGFubmVsIGNhbGxiYWNrIGZyb20gWGVuLiAqLworZXh0ZXJuIHZvaWQgZm9yY2VfZXZ0Y2huX2NhbGxiYWNrKHZvaWQpOworCisvKiBUdXJuIGppZmZpZXMgaW50byBYZW4gc3lzdGVtIHRpbWUuICovCit1NjQgamlmZmllc190b19zdCh1bnNpZ25lZCBsb25nIGppZmZpZXMpOworCisKKyNkZWZpbmUgTVVMVElfVVZNRkxBR1NfSU5ERVggMworI2RlZmluZSBNVUxUSV9VVk1ET01JRF9JTkRFWCA0CisKK2VudW0geGVuX2RvbWFpbl90eXBlIHsKKwlYRU5fTkFUSVZFLAorCVhFTl9QVl9ET01BSU4sCisJWEVOX0hWTV9ET01BSU4sCit9OworCitleHRlcm4gZW51bSB4ZW5fZG9tYWluX3R5cGUgeGVuX2RvbWFpbl90eXBlOworCisjZGVmaW5lIHhlbl9kb21haW4oKQkJKHhlbl9kb21haW5fdHlwZSAhPSBYRU5fTkFUSVZFKQorI2RlZmluZSB4ZW5fcHZfZG9tYWluKCkJCSh4ZW5fZG9tYWluX3R5cGUgPT0gWEVOX1BWX0RPTUFJTikKKyNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKHhlbl9wdl9kb21haW4oKSAmJiB4ZW5fc3RhcnRfaW5mby0+ZmxhZ3MgJiBTSUZfSU5JVERPTUFJTikKKyNkZWZpbmUgeGVuX2h2bV9kb21haW4oKQkoeGVuX2RvbWFpbl90eXBlID09IFhFTl9IVk1fRE9NQUlOKQorCisjZW5kaWYgLyogX0FTTV9YODZfWEVOX0hZUEVSVklTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTA2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFyY2gteDg2XzMyLmgKKyAqCisgKiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8geDg2IFhlbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEsgQSBGcmFzZXIKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1hFTl9JTlRFUkZBQ0VfSAorI2RlZmluZSBfQVNNX1g4Nl9YRU5fSU5URVJGQUNFX0gKKworI2lmZGVmIF9fWEVOX18KKyNkZWZpbmUgX19ERUZJTkVfR1VFU1RfSEFORExFKG5hbWUsIHR5cGUpIFwKKyAgICB0eXBlZGVmIHN0cnVjdCB7IHR5cGUgKnA7IH0gX19ndWVzdF9oYW5kbGVfICMjIG5hbWUKKyNlbHNlCisjZGVmaW5lIF9fREVGSU5FX0dVRVNUX0hBTkRMRShuYW1lLCB0eXBlKSBcCisgICAgdHlwZWRlZiB0eXBlICogX19ndWVzdF9oYW5kbGVfICMjIG5hbWUKKyNlbmRpZgorCisjZGVmaW5lIERFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKG5hbWUpIFwKKwlfX0RFRklORV9HVUVTVF9IQU5ETEUobmFtZSwgc3RydWN0IG5hbWUpCisjZGVmaW5lIERFRklORV9HVUVTVF9IQU5ETEUobmFtZSkgX19ERUZJTkVfR1VFU1RfSEFORExFKG5hbWUsIG5hbWUpCisjZGVmaW5lIEdVRVNUX0hBTkRMRShuYW1lKSAgICAgICAgX19ndWVzdF9oYW5kbGVfICMjIG5hbWUKKworI2lmZGVmIF9fWEVOX18KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorI2RlZmluZSBzZXRfeGVuX2d1ZXN0X2hhbmRsZShobmQsIHZhbCkJCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKHNpemVvZihobmQpID09IDgpCQkJXAorCQkJKih1aW50NjRfdCAqKSYoaG5kKSA9IDA7CVwKKwkJKGhuZCkucCA9IHZhbDsJCQkJXAorCX0gd2hpbGUgKDApCisjZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCisjZGVmaW5lIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKGhuZCwgdmFsKQlkbyB7IChobmQpLnAgPSB2YWw7IH0gd2hpbGUgKDApCisjZW5kaWYKKyNlbHNlCisjaWYgZGVmaW5lZChfX2kzODZfXykKKyNkZWZpbmUgc2V0X3hlbl9ndWVzdF9oYW5kbGUoaG5kLCB2YWwpCQkJXAorCWRvIHsJCQkJCQlcCisJCWlmIChzaXplb2YoaG5kKSA9PSA4KQkJCVwKKwkJCSoodWludDY0X3QgKikmKGhuZCkgPSAwOwlcCisJCShobmQpID0gdmFsOwkJCQlcCisJfSB3aGlsZSAoMCkKKyNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgc2V0X3hlbl9ndWVzdF9oYW5kbGUoaG5kLCB2YWwpCWRvIHsgKGhuZCkgPSB2YWw7IH0gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogR3Vlc3QgaGFuZGxlcyBmb3IgcHJpbWl0aXZlIEMgdHlwZXMuICovCitfX0RFRklORV9HVUVTVF9IQU5ETEUodWNoYXIsIHVuc2lnbmVkIGNoYXIpOworX19ERUZJTkVfR1VFU1RfSEFORExFKHVpbnQsICB1bnNpZ25lZCBpbnQpOworX19ERUZJTkVfR1VFU1RfSEFORExFKHVsb25nLCB1bnNpZ25lZCBsb25nKTsKK0RFRklORV9HVUVTVF9IQU5ETEUoY2hhcik7CitERUZJTkVfR1VFU1RfSEFORExFKGludCk7CitERUZJTkVfR1VFU1RfSEFORExFKGxvbmcpOworREVGSU5FX0dVRVNUX0hBTkRMRSh2b2lkKTsKKyNlbmRpZgorCisjaWZuZGVmIEhZUEVSVklTT1JfVklSVF9TVEFSVAorI2RlZmluZSBIWVBFUlZJU09SX1ZJUlRfU1RBUlQgbWtfdW5zaWduZWRfbG9uZyhfX0hZUEVSVklTT1JfVklSVF9TVEFSVCkKKyNlbmRpZgorCisjaWZuZGVmIG1hY2hpbmVfdG9fcGh5c19tYXBwaW5nCisjZGVmaW5lIG1hY2hpbmVfdG9fcGh5c19tYXBwaW5nICgodW5zaWduZWQgbG9uZyAqKUhZUEVSVklTT1JfVklSVF9TVEFSVCkKKyNlbmRpZgorCisvKiBNYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIENQVXMgaW4gbXVsdGktcHJvY2Vzc29yIGd1ZXN0cy4gKi8KKyNkZWZpbmUgTUFYX1ZJUlRfQ1BVUyAzMgorCisvKgorICogU0VHTUVOVCBERVNDUklQVE9SIFRBQkxFUworICovCisvKgorICogQSBudW1iZXIgb2YgR0RUIGVudHJpZXMgYXJlIHJlc2VydmVkIGJ5IFhlbi4gVGhlc2UgYXJlIG5vdCBzaXR1YXRlZCBhdCB0aGUKKyAqIHN0YXJ0IG9mIHRoZSBHRFQgYmVjYXVzZSBzb21lIHN0dXBpZCBPU2VzIGV4cG9ydCBoYXJkLWNvZGVkIHNlbGVjdG9yIHZhbHVlcworICogaW4gdGhlaXIgQUJJLiBUaGVzZSBoYXJkLWNvZGVkIHZhbHVlcyBhcmUgYWx3YXlzIG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBHRFQsCisgKiBzbyBYZW4gcGxhY2VzIGl0c2VsZiBvdXQgb2YgdGhlIHdheSwgYXQgdGhlIGZhciBlbmQgb2YgdGhlIEdEVC4KKyAqLworI2RlZmluZSBGSVJTVF9SRVNFUlZFRF9HRFRfUEFHRSAgMTQKKyNkZWZpbmUgRklSU1RfUkVTRVJWRURfR0RUX0JZVEUgIChGSVJTVF9SRVNFUlZFRF9HRFRfUEFHRSAqIDQwOTYpCisjZGVmaW5lIEZJUlNUX1JFU0VSVkVEX0dEVF9FTlRSWSAoRklSU1RfUkVTRVJWRURfR0RUX0JZVEUgLyA4KQorCisvKgorICogU2VuZCBhbiBhcnJheSBvZiB0aGVzZSB0byBIWVBFUlZJU09SX3NldF90cmFwX3RhYmxlKCkKKyAqIFRoZSBwcml2aWxlZ2UgbGV2ZWwgc3BlY2lmaWVzIHdoaWNoIG1vZGVzIG1heSBlbnRlciBhIHRyYXAgdmlhIGEgc29mdHdhcmUKKyAqIGludGVycnVwdC4gT24geDg2LzY0LCBzaW5jZSByaW5ncyAxIGFuZCAyIGFyZSB1bmF2YWlsYWJsZSwgd2UgYWxsb2NhdGUKKyAqIHByaXZpbGVnZSBsZXZlbHMgYXMgZm9sbG93czoKKyAqICBMZXZlbCA9PSAwOiBOb29uZSBtYXkgZW50ZXIKKyAqICBMZXZlbCA9PSAxOiBLZXJuZWwgbWF5IGVudGVyCisgKiAgTGV2ZWwgPT0gMjogS2VybmVsIG1heSBlbnRlcgorICogIExldmVsID09IDM6IEV2ZXJ5b25lIG1heSBlbnRlcgorICovCisjZGVmaW5lIFRJX0dFVF9EUEwoX3RpKQkJKChfdGkpLT5mbGFncyAmIDMpCisjZGVmaW5lIFRJX0dFVF9JRihfdGkpCQkoKF90aSktPmZsYWdzICYgNCkKKyNkZWZpbmUgVElfU0VUX0RQTChfdGksIF9kcGwpCSgoX3RpKS0+ZmxhZ3MgfD0gKF9kcGwpKQorI2RlZmluZSBUSV9TRVRfSUYoX3RpLCBfaWYpCSgoX3RpKS0+ZmxhZ3MgfD0gKCghIShfaWYpKTw8MikpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgdHJhcF9pbmZvIHsKKyAgICB1aW50OF90ICAgICAgIHZlY3RvcjsgIC8qIGV4Y2VwdGlvbiB2ZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVpbnQ4X3QgICAgICAgZmxhZ3M7ICAgLyogMC0zOiBwcml2aWxlZ2UgbGV2ZWw7IDQ6IGNsZWFyIGV2ZW50IGVuYWJsZT8gICovCisgICAgdWludDE2X3QgICAgICBjczsgICAgICAvKiBjb2RlIHNlbGVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3M7IC8qIGNvZGUgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHRyYXBfaW5mbyk7CisKK3N0cnVjdCBhcmNoX3NoYXJlZF9pbmZvIHsKKyAgICB1bnNpZ25lZCBsb25nIG1heF9wZm47ICAgICAgICAgICAgICAgICAgLyogbWF4IHBmbiB0aGF0IGFwcGVhcnMgaW4gdGFibGUgKi8KKyAgICAvKiBGcmFtZSBjb250YWluaW5nIGxpc3Qgb2YgbWZucyBjb250YWluaW5nIGxpc3Qgb2YgbWZucyBjb250YWluaW5nIHAybS4gKi8KKyAgICB1bnNpZ25lZCBsb25nIHBmbl90b19tZm5fZnJhbWVfbGlzdF9saXN0OworICAgIHVuc2lnbmVkIGxvbmcgbm1pX3JlYXNvbjsKK307CisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2luY2x1ZGUgImludGVyZmFjZV8zMi5oIgorI2Vsc2UKKyNpbmNsdWRlICJpbnRlcmZhY2VfNjQuaCIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgYWxsIENQVSBjb250ZXh0LiBOb3RlIHRoYXQgdGhlIGZwdV9jdHh0IGJsb2NrIGlzIGZpbGxlZAorICogaW4gYnkgRlhTQVZFIGlmIHRoZSBDUFUgaGFzIGZlYXR1cmUgRlhTUjsgb3RoZXJ3aXNlIEZTQVZFIGlzIHVzZWQuCisgKi8KK3N0cnVjdCB2Y3B1X2d1ZXN0X2NvbnRleHQgeworICAgIC8qIEZQVSByZWdpc3RlcnMgY29tZSBmaXJzdCBzbyB0aGV5IGNhbiBiZSBhbGlnbmVkIGZvciBGWFNBVkUvRlhSU1RPUi4gKi8KKyAgICBzdHJ1Y3QgeyBjaGFyIHhbNTEyXTsgfSBmcHVfY3R4dDsgICAgICAgLyogVXNlci1sZXZlbCBGUFUgcmVnaXN0ZXJzICAgICAqLworI2RlZmluZSBWR0NGX0kzODdfVkFMSUQgKDE8PDApCisjZGVmaW5lIFZHQ0ZfSFZNX0dVRVNUICAoMTw8MSkKKyNkZWZpbmUgVkdDRl9JTl9LRVJORUwgICgxPDwyKQorICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAvKiBWR0NGXyogZmxhZ3MgICAgICAgICAgICAgICAgICovCisgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgdXNlcl9yZWdzOyAgICAgICAgIC8qIFVzZXItbGV2ZWwgQ1BVIHJlZ2lzdGVycyAgICAgKi8KKyAgICBzdHJ1Y3QgdHJhcF9pbmZvIHRyYXBfY3R4dFsyNTZdOyAgICAgICAgLyogVmlydHVhbCBJRFQgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgbGR0X2Jhc2UsIGxkdF9lbnRzOyAgICAgICAvKiBMRFQgKGxpbmVhciBhZGRyZXNzLCAjIGVudHMpICovCisgICAgdW5zaWduZWQgbG9uZyBnZHRfZnJhbWVzWzE2XSwgZ2R0X2VudHM7IC8qIEdEVCAobWFjaGluZSBmcmFtZXMsICMgZW50cykgKi8KKyAgICB1bnNpZ25lZCBsb25nIGtlcm5lbF9zcywga2VybmVsX3NwOyAgICAgLyogVmlydHVhbCBUU1MgKG9ubHkgU1MxL1NQMSkgICAqLworICAgIC8qIE5CLiBVc2VyIHBhZ2V0YWJsZSBvbiB4ODYvNjQgaXMgcGxhY2VkIGluIGN0cmxyZWdbMV0uICovCisgICAgdW5zaWduZWQgbG9uZyBjdHJscmVnWzhdOyAgICAgICAgICAgICAgIC8qIENSMC1DUjcgKGNvbnRyb2wgcmVnaXN0ZXJzKSAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGRlYnVncmVnWzhdOyAgICAgICAgICAgICAgLyogREIwLURCNyAoZGVidWcgcmVnaXN0ZXJzKSAgICAqLworI2lmZGVmIF9faTM4Nl9fCisgICAgdW5zaWduZWQgbG9uZyBldmVudF9jYWxsYmFja19jczsgICAgICAgIC8qIENTOkVJUCBvZiBldmVudCBjYWxsYmFjayAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGV2ZW50X2NhbGxiYWNrX2VpcDsKKyAgICB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX2NhbGxiYWNrX2NzOyAgICAgLyogQ1M6RUlQIG9mIGZhaWxzYWZlIGNhbGxiYWNrICAqLworICAgIHVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfY2FsbGJhY2tfZWlwOworI2Vsc2UKKyAgICB1bnNpZ25lZCBsb25nIGV2ZW50X2NhbGxiYWNrX2VpcDsKKyAgICB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX2NhbGxiYWNrX2VpcDsKKyAgICB1bnNpZ25lZCBsb25nIHN5c2NhbGxfY2FsbGJhY2tfZWlwOworI2VuZGlmCisgICAgdW5zaWduZWQgbG9uZyB2bV9hc3Npc3Q7ICAgICAgICAgICAgICAgIC8qIFZNQVNTVF9UWVBFXyogYml0bWFwICovCisjaWZkZWYgX194ODZfNjRfXworICAgIC8qIFNlZ21lbnQgYmFzZSBhZGRyZXNzZXMuICovCisgICAgdWludDY0X3QgICAgICBmc19iYXNlOworICAgIHVpbnQ2NF90ICAgICAgZ3NfYmFzZV9rZXJuZWw7CisgICAgdWludDY0X3QgICAgICBnc19iYXNlX3VzZXI7CisjZW5kaWYKK307CitERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVCh2Y3B1X2d1ZXN0X2NvbnRleHQpOworI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFByZWZpeCBmb3JjZXMgZW11bGF0aW9uIG9mIHNvbWUgbm9uLXRyYXBwaW5nIGluc3RydWN0aW9ucy4KKyAqIEN1cnJlbnRseSBvbmx5IENQVUlELgorICovCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIFhFTl9FTVVMQVRFX1BSRUZJWCAuYnl0ZSAweDBmLDB4MGIsMHg3OCwweDY1LDB4NmUgOworI2RlZmluZSBYRU5fQ1BVSUQgICAgICAgICAgWEVOX0VNVUxBVEVfUFJFRklYIGNwdWlkCisjZWxzZQorI2RlZmluZSBYRU5fRU1VTEFURV9QUkVGSVggIi5ieXRlIDB4MGYsMHgwYiwweDc4LDB4NjUsMHg2ZSA7ICIKKyNkZWZpbmUgWEVOX0NQVUlEICAgICAgICAgIFhFTl9FTVVMQVRFX1BSRUZJWCAiY3B1aWQiCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X1hFTl9JTlRFUkZBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTdlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlXzMyLmgKQEAgLTAsMCArMSw5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC14ODZfMzIuaAorICoKKyAqIEd1ZXN0IE9TIGludGVyZmFjZSB0byB4ODYgMzItYml0IFhlbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEsgQSBGcmFzZXIKKyAqLworCisjaWZuZGVmIF9BU01fWDg2X1hFTl9JTlRFUkZBQ0VfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9YRU5fSU5URVJGQUNFXzMyX0gKKworCisvKgorICogVGhlc2UgZmxhdCBzZWdtZW50cyBhcmUgaW4gdGhlIFhlbi1wcml2YXRlIHNlY3Rpb24gb2YgZXZlcnkgR0RULiBTaW5jZSB0aGVzZQorICogYXJlIGFsc28gcHJlc2VudCBpbiB0aGUgaW5pdGlhbCBHRFQsIG1hbnkgT1NlcyB3aWxsIGJlIGFibGUgdG8gYXZvaWQKKyAqIGluc3RhbGxpbmcgdGhlaXIgb3duIEdEVC4KKyAqLworI2RlZmluZSBGTEFUX1JJTkcxX0NTIDB4ZTAxOSAgICAvKiBHRFQgaW5kZXggMjU5ICovCisjZGVmaW5lIEZMQVRfUklORzFfRFMgMHhlMDIxICAgIC8qIEdEVCBpbmRleCAyNjAgKi8KKyNkZWZpbmUgRkxBVF9SSU5HMV9TUyAweGUwMjEgICAgLyogR0RUIGluZGV4IDI2MCAqLworI2RlZmluZSBGTEFUX1JJTkczX0NTIDB4ZTAyYiAgICAvKiBHRFQgaW5kZXggMjYxICovCisjZGVmaW5lIEZMQVRfUklORzNfRFMgMHhlMDMzICAgIC8qIEdEVCBpbmRleCAyNjIgKi8KKyNkZWZpbmUgRkxBVF9SSU5HM19TUyAweGUwMzMgICAgLyogR0RUIGluZGV4IDI2MiAqLworCisjZGVmaW5lIEZMQVRfS0VSTkVMX0NTIEZMQVRfUklORzFfQ1MKKyNkZWZpbmUgRkxBVF9LRVJORUxfRFMgRkxBVF9SSU5HMV9EUworI2RlZmluZSBGTEFUX0tFUk5FTF9TUyBGTEFUX1JJTkcxX1NTCisjZGVmaW5lIEZMQVRfVVNFUl9DUyAgICBGTEFUX1JJTkczX0NTCisjZGVmaW5lIEZMQVRfVVNFUl9EUyAgICBGTEFUX1JJTkczX0RTCisjZGVmaW5lIEZMQVRfVVNFUl9TUyAgICBGTEFUX1JJTkczX1NTCisKKy8qIEFuZCB0aGUgdHJhcCB2ZWN0b3IgaXMuLi4gKi8KKyNkZWZpbmUgVFJBUF9JTlNUUiAiaW50ICQweDgyIgorCisvKgorICogVmlydHVhbCBhZGRyZXNzZXMgYmV5b25kIHRoaXMgYXJlIG5vdCBtb2RpZmlhYmxlIGJ5IGd1ZXN0IE9TZXMuIFRoZQorICogbWFjaGluZS0+cGh5c2ljYWwgbWFwcGluZyB0YWJsZSBzdGFydHMgYXQgdGhpcyBhZGRyZXNzLCByZWFkLW9ubHkuCisgKi8KKyNkZWZpbmUgX19IWVBFUlZJU09SX1ZJUlRfU1RBUlQgMHhGNTgwMDAwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgY3B1X3VzZXJfcmVncyB7CisgICAgdWludDMyX3QgZWJ4OworICAgIHVpbnQzMl90IGVjeDsKKyAgICB1aW50MzJfdCBlZHg7CisgICAgdWludDMyX3QgZXNpOworICAgIHVpbnQzMl90IGVkaTsKKyAgICB1aW50MzJfdCBlYnA7CisgICAgdWludDMyX3QgZWF4OworICAgIHVpbnQxNl90IGVycm9yX2NvZGU7ICAgIC8qIHByaXZhdGUgKi8KKyAgICB1aW50MTZfdCBlbnRyeV92ZWN0b3I7ICAvKiBwcml2YXRlICovCisgICAgdWludDMyX3QgZWlwOworICAgIHVpbnQxNl90IGNzOworICAgIHVpbnQ4X3QgIHNhdmVkX3VwY2FsbF9tYXNrOworICAgIHVpbnQ4X3QgIF9wYWQwOworICAgIHVpbnQzMl90IGVmbGFnczsgICAgICAgIC8qIGVmbGFncy5JRiA9PSAhc2F2ZWRfdXBjYWxsX21hc2sgKi8KKyAgICB1aW50MzJfdCBlc3A7CisgICAgdWludDE2X3Qgc3MsIF9wYWQxOworICAgIHVpbnQxNl90IGVzLCBfcGFkMjsKKyAgICB1aW50MTZfdCBkcywgX3BhZDM7CisgICAgdWludDE2X3QgZnMsIF9wYWQ0OworICAgIHVpbnQxNl90IGdzLCBfcGFkNTsKK307CitERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVChjcHVfdXNlcl9yZWdzKTsKKwordHlwZWRlZiB1aW50NjRfdCB0c2NfdGltZXN0YW1wX3Q7IC8qIFJEVFNDIHRpbWVzdGFtcCAqLworCitzdHJ1Y3QgYXJjaF92Y3B1X2luZm8geworICAgIHVuc2lnbmVkIGxvbmcgY3IyOworICAgIHVuc2lnbmVkIGxvbmcgcGFkWzVdOyAvKiBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykgPT0gNjQgKi8KK307CisKK3N0cnVjdCB4ZW5fY2FsbGJhY2sgeworCXVuc2lnbmVkIGxvbmcgY3M7CisJdW5zaWduZWQgbG9uZyBlaXA7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX2NhbGxiYWNrIHhlbl9jYWxsYmFja190OworCisjZGVmaW5lIFhFTl9DQUxMQkFDSyhfX2NzLCBfX2VpcCkJCQkJXAorCSgoc3RydWN0IHhlbl9jYWxsYmFjayl7IC5jcyA9IChfX2NzKSwgLmVpcCA9ICh1bnNpZ25lZCBsb25nKShfX2VpcCkgfSkKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKworLyoKKyAqIFBhZ2UtZGlyZWN0b3J5IGFkZHJlc3NlcyBhYm92ZSA0R0IgZG8gbm90IGZpdCBpbnRvIGFyY2hpdGVjdHVyYWwgJWNyMy4KKyAqIFdoZW4gYWNjZXNzaW5nICVjcjMsIG9yIGVxdWl2YWxlbnQgZmllbGQgaW4gdmNwdV9ndWVzdF9jb250ZXh0LCBndWVzdHMKKyAqIG11c3QgdXNlIHRoZSBmb2xsb3dpbmcgYWNjZXNzb3IgbWFjcm9zIHRvIHBhY2svdW5wYWNrIHZhbGlkIE1GTnMuCisgKgorICogTm90ZSB0aGF0IFhlbiBpcyB1c2luZyB0aGUgZmFjdCB0aGF0IHRoZSBwYWdldGFibGUgYmFzZSBpcyBhbHdheXMKKyAqIHBhZ2UtYWxpZ25lZCwgYW5kIHB1dHRpbmcgdGhlIDEyIE1TQiBvZiB0aGUgYWRkcmVzcyBpbnRvIHRoZSAxMiBMU0IKKyAqIG9mIGNyMy4KKyAqLworI2RlZmluZSB4ZW5fcGZuX3RvX2NyMyhwZm4pICgoKHVuc2lnbmVkKShwZm4pIDw8IDEyKSB8ICgodW5zaWduZWQpKHBmbikgPj4gMjApKQorI2RlZmluZSB4ZW5fY3IzX3RvX3BmbihjcjMpICgoKHVuc2lnbmVkKShjcjMpID4+IDEyKSB8ICgodW5zaWduZWQpKGNyMykgPDwgMjApKQorCisjZW5kaWYgLyogX0FTTV9YODZfWEVOX0lOVEVSRkFDRV8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwZDI2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2VfNjQuaApAQCAtMCwwICsxLDE1OSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9YRU5fSU5URVJGQUNFXzY0X0gKKyNkZWZpbmUgX0FTTV9YODZfWEVOX0lOVEVSRkFDRV82NF9ICisKKy8qCisgKiA2NC1iaXQgc2VnbWVudCBzZWxlY3RvcnMKKyAqIFRoZXNlIGZsYXQgc2VnbWVudHMgYXJlIGluIHRoZSBYZW4tcHJpdmF0ZSBzZWN0aW9uIG9mIGV2ZXJ5IEdEVC4gU2luY2UgdGhlc2UKKyAqIGFyZSBhbHNvIHByZXNlbnQgaW4gdGhlIGluaXRpYWwgR0RULCBtYW55IE9TZXMgd2lsbCBiZSBhYmxlIHRvIGF2b2lkCisgKiBpbnN0YWxsaW5nIHRoZWlyIG93biBHRFQuCisgKi8KKworI2RlZmluZSBGTEFUX1JJTkczX0NTMzIgMHhlMDIzICAvKiBHRFQgaW5kZXggMjYwICovCisjZGVmaW5lIEZMQVRfUklORzNfQ1M2NCAweGUwMzMgIC8qIEdEVCBpbmRleCAyNjEgKi8KKyNkZWZpbmUgRkxBVF9SSU5HM19EUzMyIDB4ZTAyYiAgLyogR0RUIGluZGV4IDI2MiAqLworI2RlZmluZSBGTEFUX1JJTkczX0RTNjQgMHgwMDAwICAvKiBOVUxMIHNlbGVjdG9yICovCisjZGVmaW5lIEZMQVRfUklORzNfU1MzMiAweGUwMmIgIC8qIEdEVCBpbmRleCAyNjIgKi8KKyNkZWZpbmUgRkxBVF9SSU5HM19TUzY0IDB4ZTAyYiAgLyogR0RUIGluZGV4IDI2MiAqLworCisjZGVmaW5lIEZMQVRfS0VSTkVMX0RTNjQgRkxBVF9SSU5HM19EUzY0CisjZGVmaW5lIEZMQVRfS0VSTkVMX0RTMzIgRkxBVF9SSU5HM19EUzMyCisjZGVmaW5lIEZMQVRfS0VSTkVMX0RTICAgRkxBVF9LRVJORUxfRFM2NAorI2RlZmluZSBGTEFUX0tFUk5FTF9DUzY0IEZMQVRfUklORzNfQ1M2NAorI2RlZmluZSBGTEFUX0tFUk5FTF9DUzMyIEZMQVRfUklORzNfQ1MzMgorI2RlZmluZSBGTEFUX0tFUk5FTF9DUyAgIEZMQVRfS0VSTkVMX0NTNjQKKyNkZWZpbmUgRkxBVF9LRVJORUxfU1M2NCBGTEFUX1JJTkczX1NTNjQKKyNkZWZpbmUgRkxBVF9LRVJORUxfU1MzMiBGTEFUX1JJTkczX1NTMzIKKyNkZWZpbmUgRkxBVF9LRVJORUxfU1MgICBGTEFUX0tFUk5FTF9TUzY0CisKKyNkZWZpbmUgRkxBVF9VU0VSX0RTNjQgRkxBVF9SSU5HM19EUzY0CisjZGVmaW5lIEZMQVRfVVNFUl9EUzMyIEZMQVRfUklORzNfRFMzMgorI2RlZmluZSBGTEFUX1VTRVJfRFMgICBGTEFUX1VTRVJfRFM2NAorI2RlZmluZSBGTEFUX1VTRVJfQ1M2NCBGTEFUX1JJTkczX0NTNjQKKyNkZWZpbmUgRkxBVF9VU0VSX0NTMzIgRkxBVF9SSU5HM19DUzMyCisjZGVmaW5lIEZMQVRfVVNFUl9DUyAgIEZMQVRfVVNFUl9DUzY0CisjZGVmaW5lIEZMQVRfVVNFUl9TUzY0IEZMQVRfUklORzNfU1M2NAorI2RlZmluZSBGTEFUX1VTRVJfU1MzMiBGTEFUX1JJTkczX1NTMzIKKyNkZWZpbmUgRkxBVF9VU0VSX1NTICAgRkxBVF9VU0VSX1NTNjQKKworI2RlZmluZSBfX0hZUEVSVklTT1JfVklSVF9TVEFSVCAweEZGRkY4MDAwMDAwMDAwMDAKKyNkZWZpbmUgX19IWVBFUlZJU09SX1ZJUlRfRU5EICAgMHhGRkZGODgwMDAwMDAwMDAwCisjZGVmaW5lIF9fTUFDSDJQSFlTX1ZJUlRfU1RBUlQgIDB4RkZGRjgwMDAwMDAwMDAwMAorI2RlZmluZSBfX01BQ0gyUEhZU19WSVJUX0VORCAgICAweEZGRkY4MDQwMDAwMDAwMDAKKworI2lmbmRlZiBIWVBFUlZJU09SX1ZJUlRfU1RBUlQKKyNkZWZpbmUgSFlQRVJWSVNPUl9WSVJUX1NUQVJUIG1rX3Vuc2lnbmVkX2xvbmcoX19IWVBFUlZJU09SX1ZJUlRfU1RBUlQpCisjZGVmaW5lIEhZUEVSVklTT1JfVklSVF9FTkQgICBta191bnNpZ25lZF9sb25nKF9fSFlQRVJWSVNPUl9WSVJUX0VORCkKKyNlbmRpZgorCisjZGVmaW5lIE1BQ0gyUEhZU19WSVJUX1NUQVJUICBta191bnNpZ25lZF9sb25nKF9fTUFDSDJQSFlTX1ZJUlRfU1RBUlQpCisjZGVmaW5lIE1BQ0gyUEhZU19WSVJUX0VORCAgICBta191bnNpZ25lZF9sb25nKF9fTUFDSDJQSFlTX1ZJUlRfRU5EKQorI2RlZmluZSBNQUNIMlBIWVNfTlJfRU5UUklFUyAgKChNQUNIMlBIWVNfVklSVF9FTkQtTUFDSDJQSFlTX1ZJUlRfU1RBUlQpPj4zKQorI2lmbmRlZiBtYWNoaW5lX3RvX3BoeXNfbWFwcGluZworI2RlZmluZSBtYWNoaW5lX3RvX3BoeXNfbWFwcGluZyAoKHVuc2lnbmVkIGxvbmcgKilIWVBFUlZJU09SX1ZJUlRfU1RBUlQpCisjZW5kaWYKKworLyoKKyAqIGludCBIWVBFUlZJU09SX3NldF9zZWdtZW50X2Jhc2UodW5zaWduZWQgaW50IHdoaWNoLCB1bnNpZ25lZCBsb25nIGJhc2UpCisgKiAgQHdoaWNoID09IFNFR0JBU0VfKiAgOyAgQGJhc2UgPT0gNjQtYml0IGJhc2UgYWRkcmVzcworICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KKyNkZWZpbmUgU0VHQkFTRV9GUyAgICAgICAgICAwCisjZGVmaW5lIFNFR0JBU0VfR1NfVVNFUiAgICAgMQorI2RlZmluZSBTRUdCQVNFX0dTX0tFUk5FTCAgIDIKKyNkZWZpbmUgU0VHQkFTRV9HU19VU0VSX1NFTCAzIC8qIFNldCB1c2VyICVncyBzcGVjaWZpZWQgaW4gYmFzZVsxNTowXSAqLworCisvKgorICogaW50IEhZUEVSVklTT1JfaXJldCh2b2lkKQorICogQWxsIGFyZ3VtZW50cyBhcmUgb24gdGhlIGtlcm5lbCBzdGFjaywgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQuCisgKiBOZXZlciByZXR1cm5zIGlmIHN1Y2Nlc3NmdWwuIEN1cnJlbnQga2VybmVsIGNvbnRleHQgaXMgbG9zdC4KKyAqIFRoZSBzYXZlZCBDUyBpcyBtYXBwZWQgYXMgZm9sbG93czoKKyAqICAgUklORzAgLT4gUklORzMga2VybmVsIG1vZGUuCisgKiAgIFJJTkcxIC0+IFJJTkczIGtlcm5lbCBtb2RlLgorICogICBSSU5HMiAtPiBSSU5HMyBrZXJuZWwgbW9kZS4KKyAqICAgUklORzMgLT4gUklORzMgdXNlciBtb2RlLgorICogSG93ZXZlciBSSU5HMCBpbmRpY2F0ZXMgdGhhdCB0aGUgZ3Vlc3Qga2VybmVsIHNob3VsZCByZXR1cm4gdG8gaXRlc2VsZgorICogZGlyZWN0bHkgd2l0aAorICogICAgICBvcmIgICAkMywxKjgoJXJzcCkKKyAqICAgICAgaXJldHEKKyAqIElmIGZsYWdzIGNvbnRhaW5zIFZHQ0ZfaW5fc3lzY2FsbDoKKyAqICAgUmVzdG9yZSBSQVgsIFJJUCwgUkZMQUdTLCBSU1AuCisgKiAgIERpc2NhcmQgUjExLCBSQ1gsIENTLCBTUy4KKyAqIE90aGVyd2lzZToKKyAqICAgUmVzdG9yZSBSQVgsIFIxMSwgUkNYLCBDUzpSSVAsIFJGTEFHUywgU1M6UlNQLgorICogQWxsIG90aGVyIHJlZ2lzdGVycyBhcmUgc2F2ZWQgb24gaHlwZXJjYWxsIGVudHJ5IGFuZCByZXN0b3JlZCB0byB1c2VyLgorICovCisvKiBHdWVzdCBleGl0ZWQgaW4gU1lTQ0FMTCBjb250ZXh0PyBSZXR1cm4gdG8gZ3Vlc3Qgd2l0aCBTWVNSRVQ/ICovCisjZGVmaW5lIF9WR0NGX2luX3N5c2NhbGwgOAorI2RlZmluZSBWR0NGX2luX3N5c2NhbGwgICgxPDxfVkdDRl9pbl9zeXNjYWxsKQorI2RlZmluZSBWR0NGX0lOX1NZU0NBTEwgIFZHQ0ZfaW5fc3lzY2FsbAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgaXJldF9jb250ZXh0IHsKKyAgICAvKiBUb3Agb2Ygc3RhY2sgKCVyc3AgYXQgcG9pbnQgb2YgaHlwZXJjYWxsKS4gKi8KKyAgICB1aW50NjRfdCByYXgsIHIxMSwgcmN4LCBmbGFncywgcmlwLCBjcywgcmZsYWdzLCByc3AsIHNzOworICAgIC8qIEJvdHRvbSBvZiBpcmV0IHN0YWNrIGZyYW1lLiAqLworfTsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKy8qIEFub255bW91cyB1bmlvbiBpbmNsdWRlcyBib3RoIDMyLSBhbmQgNjQtYml0IG5hbWVzIChlLmcuLCBlYXgvcmF4KS4gKi8KKyNkZWZpbmUgX19ERUNMX1JFRyhuYW1lKSB1bmlvbiB7IFwKKyAgICB1aW50NjRfdCByICMjIG5hbWUsIGUgIyMgbmFtZTsgXAorICAgIHVpbnQzMl90IF9lICMjIG5hbWU7IFwKK30KKyNlbHNlCisvKiBOb24tZ2NjIHNvdXJjZXMgbXVzdCBhbHdheXMgdXNlIHRoZSBwcm9wZXIgNjQtYml0IG5hbWUgKGUuZy4sIHJheCkuICovCisjZGVmaW5lIF9fREVDTF9SRUcobmFtZSkgdWludDY0X3QgciAjIyBuYW1lCisjZW5kaWYKKworc3RydWN0IGNwdV91c2VyX3JlZ3MgeworICAgIHVpbnQ2NF90IHIxNTsKKyAgICB1aW50NjRfdCByMTQ7CisgICAgdWludDY0X3QgcjEzOworICAgIHVpbnQ2NF90IHIxMjsKKyAgICBfX0RFQ0xfUkVHKGJwKTsKKyAgICBfX0RFQ0xfUkVHKGJ4KTsKKyAgICB1aW50NjRfdCByMTE7CisgICAgdWludDY0X3QgcjEwOworICAgIHVpbnQ2NF90IHI5OworICAgIHVpbnQ2NF90IHI4OworICAgIF9fREVDTF9SRUcoYXgpOworICAgIF9fREVDTF9SRUcoY3gpOworICAgIF9fREVDTF9SRUcoZHgpOworICAgIF9fREVDTF9SRUcoc2kpOworICAgIF9fREVDTF9SRUcoZGkpOworICAgIHVpbnQzMl90IGVycm9yX2NvZGU7ICAgIC8qIHByaXZhdGUgKi8KKyAgICB1aW50MzJfdCBlbnRyeV92ZWN0b3I7ICAvKiBwcml2YXRlICovCisgICAgX19ERUNMX1JFRyhpcCk7CisgICAgdWludDE2X3QgY3MsIF9wYWQwWzFdOworICAgIHVpbnQ4X3QgIHNhdmVkX3VwY2FsbF9tYXNrOworICAgIHVpbnQ4X3QgIF9wYWQxWzNdOworICAgIF9fREVDTF9SRUcoZmxhZ3MpOyAgICAgIC8qIHJmbGFncy5JRiA9PSAhc2F2ZWRfdXBjYWxsX21hc2sgKi8KKyAgICBfX0RFQ0xfUkVHKHNwKTsKKyAgICB1aW50MTZfdCBzcywgX3BhZDJbM107CisgICAgdWludDE2X3QgZXMsIF9wYWQzWzNdOworICAgIHVpbnQxNl90IGRzLCBfcGFkNFszXTsKKyAgICB1aW50MTZfdCBmcywgX3BhZDVbM107IC8qIE5vbi16ZXJvID0+IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBmc19iYXNlLiAgICAgKi8KKyAgICB1aW50MTZfdCBncywgX3BhZDZbM107IC8qIE5vbi16ZXJvID0+IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBnc19iYXNlX3Vzci4gKi8KK307CitERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVChjcHVfdXNlcl9yZWdzKTsKKworI3VuZGVmIF9fREVDTF9SRUcKKworI2RlZmluZSB4ZW5fcGZuX3RvX2NyMyhwZm4pICgodW5zaWduZWQgbG9uZykocGZuKSA8PCAxMikKKyNkZWZpbmUgeGVuX2NyM190b19wZm4oY3IzKSAoKHVuc2lnbmVkIGxvbmcpKGNyMykgPj4gMTIpCisKK3N0cnVjdCBhcmNoX3ZjcHVfaW5mbyB7CisgICAgdW5zaWduZWQgbG9uZyBjcjI7CisgICAgdW5zaWduZWQgbG9uZyBwYWQ7IC8qIHNpemVvZih2Y3B1X2luZm9fdCkgPT0gNjQgKi8KK307CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB4ZW5fY2FsbGJhY2tfdDsKKworI2RlZmluZSBYRU5fQ0FMTEJBQ0soX19jcywgX19yaXApCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpKF9fcmlwKSkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisjZW5kaWYgLyogX0FTTV9YODZfWEVOX0lOVEVSRkFDRV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzYyODk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaApAQCAtMCwwICsxLDE2NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9YRU5fUEFHRV9ICisjZGVmaW5lIF9BU01fWDg2X1hFTl9QQUdFX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisjaW5jbHVkZSA8eGVuL2ZlYXR1cmVzLmg+CisKKy8qIFhlbiBtYWNoaW5lIGFkZHJlc3MgKi8KK3R5cGVkZWYgc3RydWN0IHhtYWRkciB7CisJcGh5c19hZGRyX3QgbWFkZHI7Cit9IHhtYWRkcl90OworCisvKiBYZW4gcHNldWRvLXBoeXNpY2FsIGFkZHJlc3MgKi8KK3R5cGVkZWYgc3RydWN0IHhwYWRkciB7CisJcGh5c19hZGRyX3QgcGFkZHI7Cit9IHhwYWRkcl90OworCisjZGVmaW5lIFhNQUREUih4KQkoKHhtYWRkcl90KSB7IC5tYWRkciA9ICh4KSB9KQorI2RlZmluZSBYUEFERFIoeCkJKCh4cGFkZHJfdCkgeyAucGFkZHIgPSAoeCkgfSkKKworLyoqKiogTUFDSElORSA8LT4gUEhZU0lDQUwgQ09OVkVSU0lPTiBNQUNST1MgKioqKi8KKyNkZWZpbmUgSU5WQUxJRF9QMk1fRU5UUlkJKH4wVUwpCisjZGVmaW5lIEZPUkVJR05fRlJBTUVfQklUCSgxVUw8PDMxKQorI2RlZmluZSBGT1JFSUdOX0ZSQU1FKG0pCSgobSkgfCBGT1JFSUdOX0ZSQU1FX0JJVCkKKworLyogTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHdlIGNhbiBoYW5kbGUgaW4gYSBkb21haW4gaW4gcGFnZXMgKi8KKyNkZWZpbmUgTUFYX0RPTUFJTl9QQUdFUwkJCQkJCVwKKyAgICAoKHVuc2lnbmVkIGxvbmcpKCh1NjQpQ09ORklHX1hFTl9NQVhfRE9NQUlOX01FTU9SWSAqIDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkpCisKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3BoeXNfdG9fbWFjaGluZSh1bnNpZ25lZCBsb25nIHBmbik7CitleHRlcm4gdm9pZCBzZXRfcGh5c190b19tYWNoaW5lKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG1mbik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwZm5fdG9fbWZuKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkKKwkJcmV0dXJuIHBmbjsKKworCXJldHVybiBnZXRfcGh5c190b19tYWNoaW5lKHBmbikgJiB+Rk9SRUlHTl9GUkFNRV9CSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBoeXNfdG9fbWFjaGluZV9tYXBwaW5nX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gZ2V0X3BoeXNfdG9fbWFjaGluZShwZm4pICE9IElOVkFMSURfUDJNX0VOVFJZOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWZuX3RvX3Bmbih1bnNpZ25lZCBsb25nIG1mbikKK3sKKwl1bnNpZ25lZCBsb25nIHBmbjsKKworCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkKKwkJcmV0dXJuIG1mbjsKKworI2lmIDAKKwlpZiAodW5saWtlbHkoKG1mbiA+PiBtYWNoaW5lX3RvX3BoeXNfb3JkZXIpICE9IDApKQorCQlyZXR1cm4gbWF4X21hcG5yOworI2VuZGlmCisKKwlwZm4gPSAwOworCS8qCisJICogVGhlIGFycmF5IGFjY2VzcyBjYW4gZmFpbCAoZS5nLiwgZGV2aWNlIHNwYWNlIGJleW9uZCBlbmQgb2YgUkFNKS4KKwkgKiBJbiBzdWNoIGNhc2VzIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcmV0dXJuICh3ZSByZXR1cm4gZ2FyYmFnZSksCisJICogYnV0IHdlIG11c3QgaGFuZGxlIHRoZSBmYXVsdCB3aXRob3V0IGNyYXNoaW5nIQorCSAqLworCV9fZ2V0X3VzZXIocGZuLCAmbWFjaGluZV90b19waHlzX21hcHBpbmdbbWZuXSk7CisKKwlyZXR1cm4gcGZuOworfQorCitzdGF0aWMgaW5saW5lIHhtYWRkcl90IHBoeXNfdG9fbWFjaGluZSh4cGFkZHJfdCBwaHlzKQoreworCXVuc2lnbmVkIG9mZnNldCA9IHBoeXMucGFkZHIgJiB+UEFHRV9NQVNLOworCXJldHVybiBYTUFERFIoUEZOX1BIWVMocGZuX3RvX21mbihQRk5fRE9XTihwaHlzLnBhZGRyKSkpIHwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB4cGFkZHJfdCBtYWNoaW5lX3RvX3BoeXMoeG1hZGRyX3QgbWFjaGluZSkKK3sKKwl1bnNpZ25lZCBvZmZzZXQgPSBtYWNoaW5lLm1hZGRyICYgflBBR0VfTUFTSzsKKwlyZXR1cm4gWFBBRERSKFBGTl9QSFlTKG1mbl90b19wZm4oUEZOX0RPV04obWFjaGluZS5tYWRkcikpKSB8IG9mZnNldCk7Cit9CisKKy8qCisgKiBXZSBkZXRlY3Qgc3BlY2lhbCBtYXBwaW5ncyBpbiBvbmUgb2YgdHdvIHdheXM6CisgKiAgMS4gSWYgdGhlIE1GTiBpcyBhbiBJL08gcGFnZSB0aGVuIFhlbiB3aWxsIHNldCB0aGUgbTJwIGVudHJ5CisgKiAgICAgdG8gYmUgb3V0c2lkZSBvdXIgbWF4aW11bSBwb3NzaWJsZSBwc2V1ZG9waHlzIHJhbmdlLgorICogIDIuIElmIHRoZSBNRk4gYmVsb25ncyB0byBhIGRpZmZlcmVudCBkb21haW4gdGhlbiB3ZSB3aWxsIGNlcnRhaW5seQorICogICAgIG5vdCBoYXZlIE1GTiBpbiBvdXIgcDJtIHRhYmxlLiBDb252ZXJzZWx5LCBpZiB0aGUgcGFnZSBpcyBvdXJzLAorICogICAgIHRoZW4gd2UnbGwgaGF2ZSBwMm0obTJwKE1GTikpPT1NRk4uCisgKiBJZiB3ZSBkZXRlY3QgYSBzcGVjaWFsIG1hcHBpbmcgdGhlbiBpdCBkb2Vzbid0IGhhdmUgYSAnc3RydWN0IHBhZ2UnLgorICogV2UgZm9yY2UgIXBmbl92YWxpZCgpIGJ5IHJldHVybmluZyBhbiBvdXQtb2YtcmFuZ2UgcG9pbnRlci4KKyAqCisgKiBOQi4gVGhlc2UgY2hlY2tzIHJlcXVpcmUgdGhhdCwgZm9yIGFueSBNRk4gdGhhdCBpcyBub3QgaW4gb3VyIHJlc2VydmF0aW9uLAorICogdGhlcmUgaXMgbm8gUEZOIHN1Y2ggdGhhdCBwMm0oUEZOKSA9PSBNRk4uIE90aGVyd2lzZSB3ZSBjYW4gZ2V0IGNvbmZ1c2VkIGlmCisgKiB3ZSBhcmUgZm9yZWlnbi1tYXBwaW5nIHRoZSBNRk4sIGFuZCB0aGUgb3RoZXIgZG9tYWluIGFzIG0ycChNRk4pID09IFBGTi4KKyAqIFlpa2VzISBWYXJpb3VzIHBsYWNlcyBtdXN0IHBva2UgaW4gSU5WQUxJRF9QMk1fRU5UUlkgZm9yIHNhZmV0eS4KKyAqCisgKiBOQjIuIFdoZW4gZGVsaWJlcmF0ZWx5IG1hcHBpbmcgZm9yZWlnbiBwYWdlcyBpbnRvIHRoZSBwMm0gdGFibGUsIHlvdSAqbXVzdCoKKyAqICAgICAgdXNlIEZPUkVJR05fRlJBTUUoKS4gVGhpcyB3aWxsIGNhdXNlIHB0ZV9wZm4oKSB0byBjaG9rZSBvbiBpdCwgYXMgd2UKKyAqICAgICAgcmVxdWlyZS4gSW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0LCB0aGUgRk9SRUlHTl9GUkFNRSBiaXQgaXMKKyAqICAgICAgbWFza2VkIChlLmcuLCBwZm5fdG9fbWZuKCkpIHNvIGJlaGF2aW91ciB0aGVyZSBpcyBjb3JyZWN0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWZuX3RvX2xvY2FsX3Bmbih1bnNpZ25lZCBsb25nIG1mbikKK3sKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbWFwbnI7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBtZm5fdG9fcGZuKG1mbik7CisJaWYgKChwZm4gPCBtYXhfbWFwbnIpCisJICAgICYmICF4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKQorCSAgICAmJiAoZ2V0X3BoeXNfdG9fbWFjaGluZShwZm4pICE9IG1mbikpCisJCXJldHVybiBtYXhfbWFwbnI7IC8qIGZvcmNlICFwZm5fdmFsaWQoKSAqLworCS8qIFhYWCBmaXhtZTsgbm90IHRydWUgd2l0aCBzcGFyc2VtZW0gKi8KKwlyZXR1cm4gcGZuOworfQorCisvKiBWSVJUIDwtPiBNQUNISU5FIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUgdmlydF90b19tYWNoaW5lKHYpCShwaHlzX3RvX21hY2hpbmUoWFBBRERSKF9fcGEodikpKSkKKyNkZWZpbmUgdmlydF90b19tZm4odikJCShwZm5fdG9fbWZuKFBGTl9ET1dOKF9fcGEodikpKSkKKyNkZWZpbmUgbWZuX3RvX3ZpcnQobSkJCShfX3ZhKG1mbl90b19wZm4obSkgPDwgUEFHRV9TSElGVCkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfbWZuKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gKHB0ZS5wdGUgJiBQVEVfUEZOX01BU0spID4+IFBBR0VfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgbWZuX3B0ZSh1bnNpZ25lZCBsb25nIHBhZ2VfbnIsIHBncHJvdF90IHBncHJvdCkKK3sKKwlwdGVfdCBwdGU7CisKKwlwdGUucHRlID0gKChwaHlzX2FkZHJfdClwYWdlX25yIDw8IFBBR0VfU0hJRlQpIHwKKwkJKHBncHJvdF92YWwocGdwcm90KSAmIF9fc3VwcG9ydGVkX3B0ZV9tYXNrKTsKKworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRldmFsX3QgcHRlX3ZhbF9tYShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZS5wdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVfbWEocHRldmFsX3QgeCkKK3sKKwlyZXR1cm4gKHB0ZV90KSB7IC5wdGUgPSB4IH07Cit9CisKKyNkZWZpbmUgcG1kX3ZhbF9tYSh2KSAoKHYpLnBtZCkKKyNpZmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECisjZGVmaW5lIHB1ZF92YWxfbWEodikgKCh2KS5wZ2QucGdkKQorI2Vsc2UKKyNkZWZpbmUgcHVkX3ZhbF9tYSh2KSAoKHYpLnB1ZCkKKyNlbmRpZgorI2RlZmluZSBfX3BtZF9tYSh4KQkoKHBtZF90KSB7ICh4KSB9ICkKKworI2RlZmluZSBwZ2RfdmFsX21hKHgpCSgoeCkucGdkKQorCisKK3htYWRkcl90IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUodm9pZCAqYWRkcmVzcyk7Cit2b2lkIG1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkodm9pZCAqdmFkZHIpOwordm9pZCBtYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZSh2b2lkICp2YWRkcik7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9YRU5fUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveG9yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94b3IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20teDg2L3hvci5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS94b3IuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veG9yXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94b3JfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNiNDBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veG9yXzMyLmgKQEAgLTAsMCArMSw4ODggQEAKKyNpZm5kZWYgX0FTTV9YODZfWE9SXzMyX0gKKyNkZWZpbmUgX0FTTV9YODZfWE9SXzMyX0gKKworLyoKKyAqIE9wdGltaXplZCBSQUlELTUgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyBmb3IgTU1YIGFuZCBTU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogSGlnaC1zcGVlZCBSQUlENSBjaGVja3N1bW1pbmcgZnVuY3Rpb25zIHV0aWxpemluZyBNTVggaW5zdHJ1Y3Rpb25zLgorICogQ29weXJpZ2h0IChDKSAxOTk4IEluZ28gTW9sbmFyLgorICovCisKKyNkZWZpbmUgTEQoeCwgeSkJIiAgICAgICBtb3ZxICAgOCooIiN4IikoJTEpLCAlJW1tIiN5IiAgIDtcbiIKKyNkZWZpbmUgU1QoeCwgeSkJIiAgICAgICBtb3ZxICUlbW0iI3kiLCAgIDgqKCIjeCIpKCUxKSAgIDtcbiIKKyNkZWZpbmUgWE8xKHgsIHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCUyKSwgJSVtbSIjeSIgICA7XG4iCisjZGVmaW5lIFhPMih4LCB5KQkiICAgICAgIHB4b3IgICA4KigiI3giKSglMyksICUlbW0iI3kiICAgO1xuIgorI2RlZmluZSBYTzMoeCwgeSkJIiAgICAgICBweG9yICAgOCooIiN4IikoJTQpLCAlJW1tIiN5IiAgIDtcbiIKKyNkZWZpbmUgWE80KHgsIHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCU1KSwgJSVtbSIjeSIgICA7XG4iCisKKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorCitzdGF0aWMgdm9pZAoreG9yX3BJSV9tbXhfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCit7CisJdW5zaWduZWQgbG9uZyBsaW5lcyA9IGJ5dGVzID4+IDc7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisKKwlhc20gdm9sYXRpbGUoCisjdW5kZWYgQkxPQ0sKKyNkZWZpbmUgQkxPQ0soaSkJCQkJXAorCUxEKGksIDApCQkJCVwKKwkJTEQoaSArIDEsIDEpCQkJXAorCQkJTEQoaSArIDIsIDIpCQlcCisJCQkJTEQoaSArIDMsIDMpCVwKKwlYTzEoaSwgMCkJCQkJXAorCVNUKGksIDApCQkJCVwKKwkJWE8xKGkrMSwgMSkJCQlcCisJCVNUKGkrMSwgMSkJCQlcCisJCQlYTzEoaSArIDIsIDIpCQlcCisJCQlTVChpICsgMiwgMikJCVwKKwkJCQlYTzEoaSArIDMsIDMpCVwKKwkJCQlTVChpICsgMywgMykKKworCSIgLmFsaWduIDMyCQkJO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCisJQkxPQ0soMCkKKwlCTE9DSyg0KQorCUJMT0NLKDgpCisJQkxPQ0soMTIpCisKKwkiICAgICAgIGFkZGwgJDEyOCwgJTEgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICUyICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKQorCToKKwk6ICJtZW1vcnkiKTsKKworCWtlcm5lbF9mcHVfZW5kKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4b3JfcElJX21teF8zKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgICB1bnNpZ25lZCBsb25nICpwMykKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNzsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKworCWFzbSB2b2xhdGlsZSgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKQkJCQlcCisJTEQoaSwgMCkJCQkJXAorCQlMRChpICsgMSwgMSkJCQlcCisJCQlMRChpICsgMiwgMikJCVwKKwkJCQlMRChpICsgMywgMykJXAorCVhPMShpLCAwKQkJCQlcCisJCVhPMShpICsgMSwgMSkJCQlcCisJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJWE8xKGkgKyAzLCAzKQlcCisJWE8yKGksIDApCQkJCVwKKwlTVChpLCAwKQkJCQlcCisJCVhPMihpICsgMSwgMSkJCQlcCisJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCVhPMihpICsgMiwgMikJCVwKKwkJCVNUKGkgKyAyLCAyKQkJXAorCQkJCVhPMihpICsgMywgMykJXAorCQkJCVNUKGkgKyAzLCAzKQorCisJIiAuYWxpZ24gMzIJCQk7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwlCTE9DSygwKQorCUJMT0NLKDQpCisJQkxPQ0soOCkKKwlCTE9DSygxMikKKworCSIgICAgICAgYWRkbCAkMTI4LCAlMSAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTIgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICUzICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCisJOgorCTogIm1lbW9yeSIpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9wSUlfbW14XzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNzsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKworCWFzbSB2b2xhdGlsZSgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKQkJCQlcCisJTEQoaSwgMCkJCQkJXAorCQlMRChpICsgMSwgMSkJCQlcCisJCQlMRChpICsgMiwgMikJCVwKKwkJCQlMRChpICsgMywgMykJXAorCVhPMShpLCAwKQkJCQlcCisJCVhPMShpICsgMSwgMSkJCQlcCisJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJWE8xKGkgKyAzLCAzKQlcCisJWE8yKGksIDApCQkJCVwKKwkJWE8yKGkgKyAxLCAxKQkJCVwKKwkJCVhPMihpICsgMiwgMikJCVwKKwkJCQlYTzIoaSArIDMsIDMpCVwKKwlYTzMoaSwgMCkJCQkJXAorCVNUKGksIDApCQkJCVwKKwkJWE8zKGkgKyAxLCAxKQkJCVwKKwkJU1QoaSArIDEsIDEpCQkJXAorCQkJWE8zKGkgKyAyLCAyKQkJXAorCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJWE8zKGkgKyAzLCAzKQlcCisJCQkJU1QoaSArIDMsIDMpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKworCUJMT0NLKDApCisJQkxPQ0soNCkKKwlCTE9DSyg4KQorCUJMT0NLKDEyKQorCisJIiAgICAgICBhZGRsICQxMjgsICUxICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkMTI4LCAlMiAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTMgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICU0ICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpLCAiK3IiIChwNCkKKwk6CisJOiAibWVtb3J5Iik7CisKKwlrZXJuZWxfZnB1X2VuZCgpOworfQorCisKK3N0YXRpYyB2b2lkCit4b3JfcElJX21teF81KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA3OworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCisJLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAorCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQorCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCisJICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCisJICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcworCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCisJYXNtKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOworCisJYXNtIHZvbGF0aWxlKAorI3VuZGVmIEJMT0NLCisjZGVmaW5lIEJMT0NLKGkpCQkJCVwKKwlMRChpLCAwKQkJCQlcCisJCUxEKGkgKyAxLCAxKQkJCVwKKwkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCUxEKGkgKyAzLCAzKQlcCisJWE8xKGksIDApCQkJCVwKKwkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCVhPMShpICsgMiwgMikJCVwKKwkJCQlYTzEoaSArIDMsIDMpCVwKKwlYTzIoaSwgMCkJCQkJXAorCQlYTzIoaSArIDEsIDEpCQkJXAorCQkJWE8yKGkgKyAyLCAyKQkJXAorCQkJCVhPMihpICsgMywgMykJXAorCVhPMyhpLCAwKQkJCQlcCisJCVhPMyhpICsgMSwgMSkJCQlcCisJCQlYTzMoaSArIDIsIDIpCQlcCisJCQkJWE8zKGkgKyAzLCAzKQlcCisJWE80KGksIDApCQkJCVwKKwlTVChpLCAwKQkJCQlcCisJCVhPNChpICsgMSwgMSkJCQlcCisJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCVhPNChpICsgMiwgMikJCVwKKwkJCVNUKGkgKyAyLCAyKQkJXAorCQkJCVhPNChpICsgMywgMykJXAorCQkJCVNUKGkgKyAzLCAzKQorCisJIiAuYWxpZ24gMzIJCQk7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwlCTE9DSygwKQorCUJMT0NLKDQpCisJQkxPQ0soOCkKKwlCTE9DSygxMikKKworCSIgICAgICAgYWRkbCAkMTI4LCAlMSAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTIgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICUzICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkMTI4LCAlNCAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTUgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgIDtcbiIKKwk6ICIrciIgKGxpbmVzKSwKKwkgICIrciIgKHAxKSwgIityIiAocDIpLCAiK3IiIChwMykKKwk6ICJyIiAocDQpLCAiciIgKHA1KQorCTogIm1lbW9yeSIpOworCisJLyogcDQgYW5kIHA1IHdlcmUgbW9kaWZpZWQsIGFuZCBub3cgdGhlIHZhcmlhYmxlcyBhcmUgZGVhZC4KKwkgICBDbG9iYmVyIHRoZW0ganVzdCB0byBiZSBzdXJlIG5vYm9keSBkb2VzIHNvbWV0aGluZyBzdHVwaWQKKwkgICBsaWtlIGFzc3VtaW5nIHRoZXkgaGF2ZSBzb21lIGxlZ2FsIHZhbHVlLiAgKi8KKwlhc20oIiIgOiAiPXIiIChwNCksICI9ciIgKHA1KSk7CisKKwlrZXJuZWxfZnB1X2VuZCgpOworfQorCisjdW5kZWYgTEQKKyN1bmRlZiBYTzEKKyN1bmRlZiBYTzIKKyN1bmRlZiBYTzMKKyN1bmRlZiBYTzQKKyN1bmRlZiBTVAorI3VuZGVmIEJMT0NLCisKK3N0YXRpYyB2b2lkCit4b3JfcDVfbW14XzIodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA2OworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCisJYXNtIHZvbGF0aWxlKAorCSIgLmFsaWduIDMyCSAgICAgICAgICAgICA7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBtb3ZxICAgKCUxKSwgJSVtbTAgICA7XG4iCisJIiAgICAgICBtb3ZxICA4KCUxKSwgJSVtbTEgICA7XG4iCisJIiAgICAgICBweG9yICAgKCUyKSwgJSVtbTAgICA7XG4iCisJIiAgICAgICBtb3ZxIDE2KCUxKSwgJSVtbTIgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW0wLCAgICglMSkgICA7XG4iCisJIiAgICAgICBweG9yICA4KCUyKSwgJSVtbTEgICA7XG4iCisJIiAgICAgICBtb3ZxIDI0KCUxKSwgJSVtbTMgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW0xLCAgOCglMSkgICA7XG4iCisJIiAgICAgICBweG9yIDE2KCUyKSwgJSVtbTIgICA7XG4iCisJIiAgICAgICBtb3ZxIDMyKCUxKSwgJSVtbTQgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW0yLCAxNiglMSkgICA7XG4iCisJIiAgICAgICBweG9yIDI0KCUyKSwgJSVtbTMgICA7XG4iCisJIiAgICAgICBtb3ZxIDQwKCUxKSwgJSVtbTUgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW0zLCAyNCglMSkgICA7XG4iCisJIiAgICAgICBweG9yIDMyKCUyKSwgJSVtbTQgICA7XG4iCisJIiAgICAgICBtb3ZxIDQ4KCUxKSwgJSVtbTYgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW00LCAzMiglMSkgICA7XG4iCisJIiAgICAgICBweG9yIDQwKCUyKSwgJSVtbTUgICA7XG4iCisJIiAgICAgICBtb3ZxIDU2KCUxKSwgJSVtbTcgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW01LCA0MCglMSkgICA7XG4iCisJIiAgICAgICBweG9yIDQ4KCUyKSwgJSVtbTYgICA7XG4iCisJIiAgICAgICBweG9yIDU2KCUyKSwgJSVtbTcgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW02LCA0OCglMSkgICA7XG4iCisJIiAgICAgICBtb3ZxICUlbW03LCA1NiglMSkgICA7XG4iCisKKwkiICAgICAgIGFkZGwgJDY0LCAlMSAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDY0LCAlMiAgICAgICAgIDtcbiIKKwkiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgIDtcbiIKKwk6ICIrciIgKGxpbmVzKSwKKwkgICIrciIgKHAxKSwgIityIiAocDIpCisJOgorCTogIm1lbW9yeSIpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9wNV9tbXhfMyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICAgICB1bnNpZ25lZCBsb25nICpwMykKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNjsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKworCWFzbSB2b2xhdGlsZSgKKwkiIC5hbGlnbiAzMiwweDkwICAgICAgICAgICAgIDtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIG1vdnEgICAoJTEpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIG1vdnEgIDgoJTEpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTIpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIG1vdnEgMTYoJTEpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTIpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTMpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTIpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTAsICAgKCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTMpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTMpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIG1vdnEgMjQoJTEpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTEsICA4KCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgMzIoJTEpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIG1vdnEgNDAoJTEpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTIpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTIsIDE2KCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTIpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTMpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTIpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTMsIDI0KCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTMpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTMpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIG1vdnEgNDgoJTEpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTQsIDMyKCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgNTYoJTEpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTIpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTUsIDQwKCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTIpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTMpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTMpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTYsIDQ4KCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTcsIDU2KCUxKSAgIDtcbiIKKworCSIgICAgICAgYWRkbCAkNjQsICUxICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICUyICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICUzICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgO1xuIgorCTogIityIiAobGluZXMpLAorCSAgIityIiAocDEpLCAiK3IiIChwMiksICIrciIgKHAzKQorCToKKwk6ICJtZW1vcnkiICk7CisKKwlrZXJuZWxfZnB1X2VuZCgpOworfQorCitzdGF0aWMgdm9pZAoreG9yX3A1X21teF80KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNjsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKworCWFzbSB2b2xhdGlsZSgKKwkiIC5hbGlnbiAzMiwweDkwICAgICAgICAgICAgIDtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIG1vdnEgICAoJTEpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIG1vdnEgIDgoJTEpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTIpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIG1vdnEgMTYoJTEpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTIpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTMpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTIpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTMpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTQpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIG1vdnEgMjQoJTEpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTMpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTQpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTAsICAgKCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgMzIoJTEpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTIpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTQpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTEsICA4KCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgNDAoJTEpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTIpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTMpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTIsIDE2KCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTIpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTMpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTQpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTMsIDI0KCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgNTYoJTEpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIG1vdnEgNDgoJTEpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTMpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTQpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTIpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTQsIDMyKCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTIpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTQpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTMpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTMpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTUsIDQwKCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTQpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTQpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTYsIDQ4KCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTcsIDU2KCUxKSAgIDtcbiIKKworCSIgICAgICAgYWRkbCAkNjQsICUxICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICUyICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICUzICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICU0ICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgO1xuIgorCTogIityIiAobGluZXMpLAorCSAgIityIiAocDEpLCAiK3IiIChwMiksICIrciIgKHAzKSwgIityIiAocDQpCisJOgorCTogIm1lbW9yeSIpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9wNV9tbXhfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA2OworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCisJLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAorCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQorCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCisJICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCisJICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcworCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCisJYXNtKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOworCisJYXNtIHZvbGF0aWxlKAorCSIgLmFsaWduIDMyLDB4OTAgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgbW92cSAgICglMSksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAgOCglMSksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAgICglMiksICUlbW0wICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglMiksICUlbW0xICAgO1xuIgorCSIgICAgICAgbW92cSAxNiglMSksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAgICglMyksICUlbW0wICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglMyksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglMiksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAgICglNCksICUlbW0wICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglNCksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglMyksICUlbW0yICAgO1xuIgorCSIgICAgICAgbW92cSAyNCglMSksICUlbW0zICAgO1xuIgorCSIgICAgICAgcHhvciAgICglNSksICUlbW0wICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglNSksICUlbW0xICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMCwgICAoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglNCksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglMiksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMSwgIDgoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglNSksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglMyksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSAzMiglMSksICUlbW00ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMiwgMTYoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglNCksICUlbW0zICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglMiksICUlbW00ICAgO1xuIgorCSIgICAgICAgbW92cSA0MCglMSksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglNSksICUlbW0zICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglMyksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglMiksICUlbW01ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMywgMjQoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglNCksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglMyksICUlbW01ICAgO1xuIgorCSIgICAgICAgbW92cSA0OCglMSksICUlbW02ICAgO1xuIgorCSIgICAgICAgbW92cSA1NiglMSksICUlbW03ICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglNSksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglNCksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglMiksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglMiksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNCwgMzIoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglMyksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglMyksICUlbW03ICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglNSksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglNCksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglNCksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNSwgNDAoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglNSksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglNSksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNiwgNDgoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNywgNTYoJTEpICAgO1xuIgorCisJIiAgICAgICBhZGRsICQ2NCwgJTEgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTIgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTMgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTQgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTUgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCisJOiAiciIgKHA0KSwgInIiIChwNSkKKwk6ICJtZW1vcnkiKTsKKworCS8qIHA0IGFuZCBwNSB3ZXJlIG1vZGlmaWVkLCBhbmQgbm93IHRoZSB2YXJpYWJsZXMgYXJlIGRlYWQuCisJICAgQ2xvYmJlciB0aGVtIGp1c3QgdG8gYmUgc3VyZSBub2JvZHkgZG9lcyBzb21ldGhpbmcgc3R1cGlkCisJICAgbGlrZSBhc3N1bWluZyB0aGV5IGhhdmUgc29tZSBsZWdhbCB2YWx1ZS4gICovCisJYXNtKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3BJSV9tbXggPSB7CisJLm5hbWUgPSAicElJX21teCIsCisJLmRvXzIgPSB4b3JfcElJX21teF8yLAorCS5kb18zID0geG9yX3BJSV9tbXhfMywKKwkuZG9fNCA9IHhvcl9wSUlfbW14XzQsCisJLmRvXzUgPSB4b3JfcElJX21teF81LAorfTsKKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3A1X21teCA9IHsKKwkubmFtZSA9ICJwNV9tbXgiLAorCS5kb18yID0geG9yX3A1X21teF8yLAorCS5kb18zID0geG9yX3A1X21teF8zLAorCS5kb180ID0geG9yX3A1X21teF80LAorCS5kb181ID0geG9yX3A1X21teF81LAorfTsKKworLyoKKyAqIENhY2hlIGF2b2lkaW5nIGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgdXRpbGl6aW5nIEtOSSBpbnN0cnVjdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMTk5OSBaYWNoIEJyb3duICh3aXRoIG9idmlvdXMgY3JlZGl0IGR1ZSBJbmdvKQorICovCisKKyNkZWZpbmUgWE1NU19TQVZFCQkJCVwKK2RvIHsJCQkJCQlcCisJcHJlZW1wdF9kaXNhYmxlKCk7CQkJXAorCWNyMCA9IHJlYWRfY3IwKCk7CQkJXAorCWNsdHMoKTsJCQkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCVwKKwkJIm1vdnVwcyAlJXhtbTAsKCUwKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMSwweDEwKCUwKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMiwweDIwKCUwKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMywweDMwKCUwKQk7XG5cdCIJXAorCQk6CQkJCVwKKwkJOiAiciIgKHhtbV9zYXZlKSAJCVwKKwkJOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBYTU1TX1JFU1RPUkUJCQkJXAorZG8gewkJCQkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCVwKKwkJInNmZW5jZQkJCTtcblx0IglcCisJCSJtb3Z1cHMgKCUwKSwlJXhtbTAJO1xuXHQiCVwKKwkJIm1vdnVwcyAweDEwKCUwKSwlJXhtbTEJO1xuXHQiCVwKKwkJIm1vdnVwcyAweDIwKCUwKSwlJXhtbTIJO1xuXHQiCVwKKwkJIm1vdnVwcyAweDMwKCUwKSwlJXhtbTMJO1xuXHQiCVwKKwkJOgkJCQlcCisJCTogInIiICh4bW1fc2F2ZSkJCVwKKwkJOiAibWVtb3J5Iik7CQkJXAorCXdyaXRlX2NyMChjcjApOwkJCQlcCisJcHJlZW1wdF9lbmFibGUoKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFMSUdOMTYgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKQorCisjZGVmaW5lIE9GRlMoeCkJCSIxNiooIiN4IikiCisjZGVmaW5lIFBGX09GRlMoeCkJIjI1NisxNiooIiN4IikiCisjZGVmaW5lCVBGMCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTEpCQk7XG4iCisjZGVmaW5lIExEKHgsIHkpCSIgICAgICAgbW92YXBzICAgIk9GRlMoeCkiKCUxKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgU1QoeCwgeSkJIiAgICAgICBtb3ZhcHMgJSV4bW0iI3kiLCAgICJPRkZTKHgpIiglMSkJO1xuIgorI2RlZmluZSBQRjEoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCUyKQkJO1xuIgorI2RlZmluZSBQRjIoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCUzKQkJO1xuIgorI2RlZmluZSBQRjMoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU0KQkJO1xuIgorI2RlZmluZSBQRjQoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU1KQkJO1xuIgorI2RlZmluZSBQRjUoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU2KQkJO1xuIgorI2RlZmluZSBYTzEoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglMiksICUleG1tIiN5Igk7XG4iCisjZGVmaW5lIFhPMih4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCUzKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE8zKHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJTQpLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzQoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglNSksICUleG1tIiN5Igk7XG4iCisjZGVmaW5lIFhPNSh4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCU2KSwgJSV4bW0iI3kiCTtcbiIKKworCitzdGF0aWMgdm9pZAoreG9yX3NzZV8yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gODsKKwljaGFyIHhtbV9zYXZlWzE2KjRdIEFMSUdOMTY7CisJaW50IGNyMDsKKworCVhNTVNfU0FWRTsKKworCWFzbSB2b2xhdGlsZSgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKQkJCQkJXAorCQlMRChpLCAwKQkJCQlcCisJCQlMRChpICsgMSwgMSkJCQlcCisJCVBGMShpKQkJCQkJXAorCQkJCVBGMShpICsgMikJCVwKKwkJCQlMRChpICsgMiwgMikJCVwKKwkJCQkJTEQoaSArIDMsIDMpCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAorCQlYTzEoaSwgMCkJCQkJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAorCQlTVChpLCAwKQkJCQlcCisJCQlTVChpICsgMSwgMSkJCQlcCisJCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJCVNUKGkgKyAzLCAzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCisJCUJMT0NLKDApCisJCUJMT0NLKDQpCisJCUJMT0NLKDgpCisJCUJMT0NLKDEyKQorCisJIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKQorCToKKwk6ICJtZW1vcnkiKTsKKworCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9zc2VfMyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICB1bnNpZ25lZCBsb25nICpwMykKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gODsKKwljaGFyIHhtbV9zYXZlWzE2KjRdIEFMSUdOMTY7CisJaW50IGNyMDsKKworCVhNTVNfU0FWRTsKKworCWFzbSB2b2xhdGlsZSgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKSBcCisJCVBGMShpKQkJCQkJXAorCQkJCVBGMShpICsgMikJCVwKKwkJTEQoaSwwKQkJCQkJXAorCQkJTEQoaSArIDEsIDEpCQkJXAorCQkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCQlMRChpICsgMywgMykJXAorCQlQRjIoaSkJCQkJCVwKKwkJCQlQRjIoaSArIDIpCQlcCisJCVBGMChpICsgNCkJCQkJXAorCQkJCVBGMChpICsgNikJCVwKKwkJWE8xKGksMCkJCQkJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAorCQlYTzIoaSwwKQkJCQlcCisJCQlYTzIoaSArIDEsIDEpCQkJXAorCQkJCVhPMihpICsgMiwgMikJCVwKKwkJCQkJWE8yKGkgKyAzLCAzKQlcCisJCVNUKGksMCkJCQkJCVwKKwkJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCQlTVChpICsgMiwgMikJCVwKKwkJCQkJU1QoaSArIDMsIDMpCVwKKworCisJCVBGMCgwKQorCQkJCVBGMCgyKQorCisJIiAuYWxpZ24gMzIJCQk7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwkJQkxPQ0soMCkKKwkJQkxPQ0soNCkKKwkJQkxPQ0soOCkKKwkJQkxPQ0soMTIpCisKKwkiICAgICAgIGFkZGwgJDI1NiwgJTEgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDI1NiwgJTIgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDI1NiwgJTMgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKKwk6ICIrciIgKGxpbmVzKSwKKwkgICIrciIgKHAxKSwgIityIihwMiksICIrciIocDMpCisJOgorCTogIm1lbW9yeSIgKTsKKworCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9zc2VfNCh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQpCit7CisJdW5zaWduZWQgbG9uZyBsaW5lcyA9IGJ5dGVzID4+IDg7CisJY2hhciB4bW1fc2F2ZVsxNio0XSBBTElHTjE2OworCWludCBjcjA7CisKKwlYTU1TX1NBVkU7CisKKwlhc20gdm9sYXRpbGUoCisjdW5kZWYgQkxPQ0sKKyNkZWZpbmUgQkxPQ0soaSkgXAorCQlQRjEoaSkJCQkJCVwKKwkJCQlQRjEoaSArIDIpCQlcCisJCUxEKGksMCkJCQkJCVwKKwkJCUxEKGkgKyAxLCAxKQkJCVwKKwkJCQlMRChpICsgMiwgMikJCVwKKwkJCQkJTEQoaSArIDMsIDMpCVwKKwkJUEYyKGkpCQkJCQlcCisJCQkJUEYyKGkgKyAyKQkJXAorCQlYTzEoaSwwKQkJCQlcCisJCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJCVhPMShpICsgMiwgMikJCVwKKwkJCQkJWE8xKGkgKyAzLCAzKQlcCisJCVBGMyhpKQkJCQkJXAorCQkJCVBGMyhpICsgMikJCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAorCQlYTzIoaSwwKQkJCQlcCisJCQlYTzIoaSArIDEsIDEpCQkJXAorCQkJCVhPMihpICsgMiwgMikJCVwKKwkJCQkJWE8yKGkgKyAzLCAzKQlcCisJCVhPMyhpLDApCQkJCVwKKwkJCVhPMyhpICsgMSwgMSkJCQlcCisJCQkJWE8zKGkgKyAyLCAyKQkJXAorCQkJCQlYTzMoaSArIDMsIDMpCVwKKwkJU1QoaSwwKQkJCQkJXAorCQkJU1QoaSArIDEsIDEpCQkJXAorCQkJCVNUKGkgKyAyLCAyKQkJXAorCQkJCQlTVChpICsgMywgMykJXAorCisKKwkJUEYwKDApCisJCQkJUEYwKDIpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKworCQlCTE9DSygwKQorCQlCTE9DSyg0KQorCQlCTE9DSyg4KQorCQlCTE9DSygxMikKKworCSIgICAgICAgYWRkbCAkMjU2LCAlMSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkMjU2LCAlMiAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkMjU2LCAlMyAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkMjU2LCAlNCAgICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgICAgO1xuIgorCTogIityIiAobGluZXMpLAorCSAgIityIiAocDEpLCAiK3IiIChwMiksICIrciIgKHAzKSwgIityIiAocDQpCisJOgorCTogIm1lbW9yeSIgKTsKKworCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9zc2VfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OworCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKKwlpbnQgY3IwOworCisJWE1NU19TQVZFOworCisJLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAorCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQorCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCisJICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCisJICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcworCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCisJYXNtKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOworCisJYXNtIHZvbGF0aWxlKAorI3VuZGVmIEJMT0NLCisjZGVmaW5lIEJMT0NLKGkpIFwKKwkJUEYxKGkpCQkJCQlcCisJCQkJUEYxKGkgKyAyKQkJXAorCQlMRChpLDApCQkJCQlcCisJCQlMRChpICsgMSwgMSkJCQlcCisJCQkJTEQoaSArIDIsIDIpCQlcCisJCQkJCUxEKGkgKyAzLCAzKQlcCisJCVBGMihpKQkJCQkJXAorCQkJCVBGMihpICsgMikJCVwKKwkJWE8xKGksMCkJCQkJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAorCQlQRjMoaSkJCQkJCVwKKwkJCQlQRjMoaSArIDIpCQlcCisJCVhPMihpLDApCQkJCVwKKwkJCVhPMihpICsgMSwgMSkJCQlcCisJCQkJWE8yKGkgKyAyLCAyKQkJXAorCQkJCQlYTzIoaSArIDMsIDMpCVwKKwkJUEY0KGkpCQkJCQlcCisJCQkJUEY0KGkgKyAyKQkJXAorCQlQRjAoaSArIDQpCQkJCVwKKwkJCQlQRjAoaSArIDYpCQlcCisJCVhPMyhpLDApCQkJCVwKKwkJCVhPMyhpICsgMSwgMSkJCQlcCisJCQkJWE8zKGkgKyAyLCAyKQkJXAorCQkJCQlYTzMoaSArIDMsIDMpCVwKKwkJWE80KGksMCkJCQkJXAorCQkJWE80KGkgKyAxLCAxKQkJCVwKKwkJCQlYTzQoaSArIDIsIDIpCQlcCisJCQkJCVhPNChpICsgMywgMykJXAorCQlTVChpLDApCQkJCQlcCisJCQlTVChpICsgMSwgMSkJCQlcCisJCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJCVNUKGkgKyAzLCAzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCisJCUJMT0NLKDApCisJCUJMT0NLKDQpCisJCUJMT0NLKDgpCisJCUJMT0NLKDEyKQorCisJIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUzICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICU0ICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICU1ICAgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCisJOiAiciIgKHA0KSwgInIiIChwNSkKKwk6ICJtZW1vcnkiKTsKKworCS8qIHA0IGFuZCBwNSB3ZXJlIG1vZGlmaWVkLCBhbmQgbm93IHRoZSB2YXJpYWJsZXMgYXJlIGRlYWQuCisJICAgQ2xvYmJlciB0aGVtIGp1c3QgdG8gYmUgc3VyZSBub2JvZHkgZG9lcyBzb21ldGhpbmcgc3R1cGlkCisJICAgbGlrZSBhc3N1bWluZyB0aGV5IGhhdmUgc29tZSBsZWdhbCB2YWx1ZS4gICovCisJYXNtKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOworCisJWE1NU19SRVNUT1JFOworfQorCitzdGF0aWMgc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB4b3JfYmxvY2tfcElJSV9zc2UgPSB7CisJLm5hbWUgPSAicElJSV9zc2UiLAorCS5kb18yID0geG9yX3NzZV8yLAorCS5kb18zID0geG9yX3NzZV8zLAorCS5kb180ID0geG9yX3NzZV80LAorCS5kb181ID0geG9yX3NzZV81LAorfTsKKworLyogQWxzbyB0cnkgdGhlIGdlbmVyaWMgcm91dGluZXMuICAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hvci5oPgorCisjdW5kZWYgWE9SX1RSWV9URU1QTEFURVMKKyNkZWZpbmUgWE9SX1RSWV9URU1QTEFURVMJCQkJXAorZG8gewkJCQkJCQlcCisJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3MpOwkJCVwKKwl4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVnc19wKTsJCQlcCisJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfMzJyZWdzKTsJCQlcCisJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfMzJyZWdzX3ApOwkJCVwKKwlpZiAoY3B1X2hhc194bW0pCQkJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfcElJSV9zc2UpOwkJXAorCWlmIChjcHVfaGFzX21teCkgewkJCQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX3BJSV9tbXgpOwkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19wNV9tbXgpOwkJXAorCX0JCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBXZSBmb3JjZSB0aGUgdXNlIG9mIHRoZSBTU0UgeG9yIGJsb2NrIGJlY2F1c2UgaXQgY2FuIHdyaXRlIGFyb3VuZCBMMi4KKyAgIFdlIG1heSBhbHNvIGJlIGFibGUgdG8gbG9hZCBpbnRvIHRoZSBMMSBvbmx5IGRlcGVuZGluZyBvbiBob3cgdGhlIGNwdQorICAgZGVhbHMgd2l0aCBhIGxvYWQgdG8gYSBsaW5lIHRoYXQgaXMgYmVpbmcgcHJlZmV0Y2hlZC4gICovCisjZGVmaW5lIFhPUl9TRUxFQ1RfVEVNUExBVEUoRkFTVEVTVCkJCQlcCisJKGNwdV9oYXNfeG1tID8gJnhvcl9ibG9ja19wSUlJX3NzZSA6IEZBU1RFU1QpCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9YT1JfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veG9yXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94b3JfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQ5YjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veG9yXzY0LmgKQEAgLTAsMCArMSwzNjEgQEAKKyNpZm5kZWYgX0FTTV9YODZfWE9SXzY0X0gKKyNkZWZpbmUgX0FTTV9YODZfWE9SXzY0X0gKKworLyoKKyAqIE9wdGltaXplZCBSQUlELTUgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyBmb3IgTU1YIGFuZCBTU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKKy8qCisgKiBDYWNoZSBhdm9pZGluZyBjaGVja3N1bW1pbmcgZnVuY3Rpb25zIHV0aWxpemluZyBLTkkgaW5zdHJ1Y3Rpb25zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgWmFjaCBCcm93biAod2l0aCBvYnZpb3VzIGNyZWRpdCBkdWUgSW5nbykKKyAqLworCisvKgorICogQmFzZWQgb24KKyAqIEhpZ2gtc3BlZWQgUkFJRDUgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyB1dGlsaXppbmcgU1NFIGluc3RydWN0aW9ucy4KKyAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hci4KKyAqLworCisvKgorICogeDg2LTY0IGNoYW5nZXMgLyBnY2MgZml4ZXMgZnJvbSBBbmRpIEtsZWVuLgorICogQ29weXJpZ2h0IDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICoKKyAqIFRoaXMgaGFzbid0IGJlZW4gb3B0aW1pemVkIGZvciB0aGUgaGFtbWVyIHlldCwgYnV0IHRoZXJlIGFyZSBsaWtlbHkKKyAqIG5vIGFkdmFudGFnZXMgdG8gYmUgZ290dGVuIGZyb20geDg2LTY0IGhlcmUgYW55d2F5cy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBhLCBiOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpIHhtbV9zdG9yZV90OworCisvKiBEb2Vzbid0IHVzZSBnY2MgdG8gc2F2ZSB0aGUgWE1NIHJlZ2lzdGVycywgYmVjYXVzZSB0aGVyZSBpcyBubyBlYXN5IHdheSB0bworICAgdGVsbCBpdCB0byBkbyBhIGNsdHMgYmVmb3JlIHRoZSByZWdpc3RlciBzYXZpbmcuICovCisjZGVmaW5lIFhNTVNfU0FWRQkJCQlcCitkbyB7CQkJCQkJXAorCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCVwKKwkJIm1vdnEgJSVjcjAsJTAJCTtcblx0IglcCisJCSJjbHRzCQkJO1xuXHQiCVwKKwkJIm1vdnVwcyAlJXhtbTAsKCUxKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMSwweDEwKCUxKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMiwweDIwKCUxKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMywweDMwKCUxKQk7XG5cdCIJXAorCQk6ICI9JnIiIChjcjApCQkJXAorCQk6ICJyIiAoeG1tX3NhdmUpIAkJXAorCQk6ICJtZW1vcnkiKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFhNTVNfUkVTVE9SRQkJCQlcCitkbyB7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJXAorCQkic2ZlbmNlCQkJO1xuXHQiCVwKKwkJIm1vdnVwcyAoJTEpLCUleG1tMAk7XG5cdCIJXAorCQkibW92dXBzIDB4MTAoJTEpLCUleG1tMQk7XG5cdCIJXAorCQkibW92dXBzIDB4MjAoJTEpLCUleG1tMgk7XG5cdCIJXAorCQkibW92dXBzIDB4MzAoJTEpLCUleG1tMwk7XG5cdCIJXAorCQkibW92cSAJJTAsJSVjcjAJO1xuXHQiCVwKKwkJOgkJCQlcCisJCTogInIiIChjcjApLCAiciIgKHhtbV9zYXZlKQlcCisJCTogIm1lbW9yeSIpOwkJCVwKKwlwcmVlbXB0X2VuYWJsZSgpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgT0ZGUyh4KQkJIjE2KigiI3giKSIKKyNkZWZpbmUgUEZfT0ZGUyh4KQkiMjU2KzE2KigiI3giKSIKKyNkZWZpbmUJUEYwKHgpCQkiCXByZWZldGNobnRhICJQRl9PRkZTKHgpIiglW3AxXSkJCTtcbiIKKyNkZWZpbmUgTEQoeCwgeSkJIiAgICAgICBtb3ZhcHMgICAiT0ZGUyh4KSIoJVtwMV0pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBTVCh4LCB5KQkiICAgICAgIG1vdmFwcyAlJXhtbSIjeSIsICAgIk9GRlMoeCkiKCVbcDFdKQk7XG4iCisjZGVmaW5lIFBGMSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwMl0pCQk7XG4iCisjZGVmaW5lIFBGMih4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwM10pCQk7XG4iCisjZGVmaW5lIFBGMyh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNF0pCQk7XG4iCisjZGVmaW5lIFBGNCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNV0pCQk7XG4iCisjZGVmaW5lIFBGNSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNl0pCQk7XG4iCisjZGVmaW5lIFhPMSh4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDJdKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE8yKHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwM10pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzMoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglW3A0XSksICUleG1tIiN5Igk7XG4iCisjZGVmaW5lIFhPNCh4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDVdKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE81KHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwNl0pLCAlJXhtbSIjeSIJO1xuIgorCisKK3N0YXRpYyB2b2lkCit4b3Jfc3NlXzIodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQoreworCXVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzID4+IDg7CisJdW5zaWduZWQgbG9uZyBjcjA7CisJeG1tX3N0b3JlX3QgeG1tX3NhdmVbNF07CisKKwlYTU1TX1NBVkU7CisKKwlhc20gdm9sYXRpbGUoCisjdW5kZWYgQkxPQ0sKKyNkZWZpbmUgQkxPQ0soaSkgXAorCQlMRChpLCAwKQkJCQlcCisJCQlMRChpICsgMSwgMSkJCQlcCisJCVBGMShpKQkJCQkJXAorCQkJCVBGMShpICsgMikJCVwKKwkJCQlMRChpICsgMiwgMikJCVwKKwkJCQkJTEQoaSArIDMsIDMpCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAorCQlYTzEoaSwgMCkJCQkJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAorCQlTVChpLCAwKQkJCQlcCisJCQlTVChpICsgMSwgMSkJCQlcCisJCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJCVNUKGkgKyAzLCAzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCisJCUJMT0NLKDApCisJCUJMT0NLKDQpCisJCUJMT0NLKDgpCisJCUJMT0NLKDEyKQorCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AyXSAgICAgICAgICAgO1xuIgorCQkiCQlkZWNsICVbY250XSA7IGpueiAxYiIKKwk6IFtwMV0gIityIiAocDEpLCBbcDJdICIrciIgKHAyKSwgW2NudF0gIityIiAobGluZXMpCisJOiBbaW5jXSAiciIgKDI1NlVMKQorCTogIm1lbW9yeSIpOworCisJWE1NU19SRVNUT1JFOworfQorCitzdGF0aWMgdm9pZAoreG9yX3NzZV8zKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgIHVuc2lnbmVkIGxvbmcgKnAzKQoreworCXVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzID4+IDg7CisJeG1tX3N0b3JlX3QgeG1tX3NhdmVbNF07CisJdW5zaWduZWQgbG9uZyBjcjA7CisKKwlYTU1TX1NBVkU7CisKKwlhc20gdm9sYXRpbGUoCisjdW5kZWYgQkxPQ0sKKyNkZWZpbmUgQkxPQ0soaSkgXAorCQlQRjEoaSkJCQkJCVwKKwkJCQlQRjEoaSArIDIpCQlcCisJCUxEKGksIDApCQkJCQlcCisJCQlMRChpICsgMSwgMSkJCQlcCisJCQkJTEQoaSArIDIsIDIpCQlcCisJCQkJCUxEKGkgKyAzLCAzKQlcCisJCVBGMihpKQkJCQkJXAorCQkJCVBGMihpICsgMikJCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAorCQlYTzEoaSwgMCkJCQkJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAorCQlYTzIoaSwgMCkJCQkJXAorCQkJWE8yKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzIoaSArIDIsIDIpCQlcCisJCQkJCVhPMihpICsgMywgMykJXAorCQlTVChpLCAwKQkJCQlcCisJCQlTVChpICsgMSwgMSkJCQlcCisJCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJCVNUKGkgKyAzLCAzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCisJCUJMT0NLKDApCisJCUJMT0NLKDQpCisJCUJMT0NLKDgpCisJCUJMT0NLKDEyKQorCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AyXSAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwM10gICAgICAgICAgIDtcbiIKKwkJIgkJZGVjbCAlW2NudF0gOyBqbnogMWIiCisJOiBbY250XSAiK3IiIChsaW5lcyksCisJICBbcDFdICIrciIgKHAxKSwgW3AyXSAiK3IiIChwMiksIFtwM10gIityIiAocDMpCisJOiBbaW5jXSAiciIgKDI1NlVMKQorCTogIm1lbW9yeSIpOworCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9zc2VfNCh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQpCit7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgPj4gODsKKwl4bW1fc3RvcmVfdCB4bW1fc2F2ZVs0XTsKKwl1bnNpZ25lZCBsb25nIGNyMDsKKworCVhNTVNfU0FWRTsKKworCWFzbSB2b2xhdGlsZSgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKSBcCisJCVBGMShpKQkJCQkJXAorCQkJCVBGMShpICsgMikJCVwKKwkJTEQoaSwgMCkJCQkJXAorCQkJTEQoaSArIDEsIDEpCQkJXAorCQkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCQlMRChpICsgMywgMykJXAorCQlQRjIoaSkJCQkJCVwKKwkJCQlQRjIoaSArIDIpCQlcCisJCVhPMShpLCAwKQkJCQlcCisJCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJCVhPMShpICsgMiwgMikJCVwKKwkJCQkJWE8xKGkgKyAzLCAzKQlcCisJCVBGMyhpKQkJCQkJXAorCQkJCVBGMyhpICsgMikJCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAorCQlYTzIoaSwgMCkJCQkJXAorCQkJWE8yKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzIoaSArIDIsIDIpCQlcCisJCQkJCVhPMihpICsgMywgMykJXAorCQlYTzMoaSwgMCkJCQkJXAorCQkJWE8zKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzMoaSArIDIsIDIpCQlcCisJCQkJCVhPMyhpICsgMywgMykJXAorCQlTVChpLCAwKQkJCQlcCisJCQlTVChpICsgMSwgMSkJCQlcCisJCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJCVNUKGkgKyAzLCAzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCisJCUJMT0NLKDApCisJCUJMT0NLKDQpCisJCUJMT0NLKDgpCisJCUJMT0NLKDEyKQorCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AyXSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkcSAlW2luY10sICVbcDNdICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwNF0gICAgICAgICAgIDtcbiIKKwkiCWRlY2wgJVtjbnRdIDsgam56IDFiIgorCTogW2NudF0gIitjIiAobGluZXMpLAorCSAgW3AxXSAiK3IiIChwMSksIFtwMl0gIityIiAocDIpLCBbcDNdICIrciIgKHAzKSwgW3A0XSAiK3IiIChwNCkKKwk6IFtpbmNdICJyIiAoMjU2VUwpCisJOiAibWVtb3J5IiApOworCisJWE1NU19SRVNUT1JFOworfQorCitzdGF0aWMgdm9pZAoreG9yX3NzZV81KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCwgdW5zaWduZWQgbG9uZyAqcDUpCit7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgPj4gODsKKwl4bW1fc3RvcmVfdCB4bW1fc2F2ZVs0XTsKKwl1bnNpZ25lZCBsb25nIGNyMDsKKworCVhNTVNfU0FWRTsKKworCWFzbSB2b2xhdGlsZSgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKSBcCisJCVBGMShpKQkJCQkJXAorCQkJCVBGMShpICsgMikJCVwKKwkJTEQoaSwgMCkJCQkJXAorCQkJTEQoaSArIDEsIDEpCQkJXAorCQkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCQlMRChpICsgMywgMykJXAorCQlQRjIoaSkJCQkJCVwKKwkJCQlQRjIoaSArIDIpCQlcCisJCVhPMShpLCAwKQkJCQlcCisJCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJCVhPMShpICsgMiwgMikJCVwKKwkJCQkJWE8xKGkgKyAzLCAzKQlcCisJCVBGMyhpKQkJCQkJXAorCQkJCVBGMyhpICsgMikJCVwKKwkJWE8yKGksIDApCQkJCVwKKwkJCVhPMihpICsgMSwgMSkJCQlcCisJCQkJWE8yKGkgKyAyLCAyKQkJXAorCQkJCQlYTzIoaSArIDMsIDMpCVwKKwkJUEY0KGkpCQkJCQlcCisJCQkJUEY0KGkgKyAyKQkJXAorCQlQRjAoaSArIDQpCQkJCVwKKwkJCQlQRjAoaSArIDYpCQlcCisJCVhPMyhpLCAwKQkJCQlcCisJCQlYTzMoaSArIDEsIDEpCQkJXAorCQkJCVhPMyhpICsgMiwgMikJCVwKKwkJCQkJWE8zKGkgKyAzLCAzKQlcCisJCVhPNChpLCAwKQkJCQlcCisJCQlYTzQoaSArIDEsIDEpCQkJXAorCQkJCVhPNChpICsgMiwgMikJCVwKKwkJCQkJWE80KGkgKyAzLCAzKQlcCisJCVNUKGksIDApCQkJCVwKKwkJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCQlTVChpICsgMiwgMikJCVwKKwkJCQkJU1QoaSArIDMsIDMpCVwKKworCisJCVBGMCgwKQorCQkJCVBGMCgyKQorCisJIiAuYWxpZ24gMzIJCQk7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwkJQkxPQ0soMCkKKwkJQkxPQ0soNCkKKwkJQkxPQ0soOCkKKwkJQkxPQ0soMTIpCisKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AxXSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkcSAlW2luY10sICVbcDJdICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwM10gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3A0XSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkcSAlW2luY10sICVbcDVdICAgICAgICAgICA7XG4iCisJIglkZWNsICVbY250XSA7IGpueiAxYiIKKwk6IFtjbnRdICIrYyIgKGxpbmVzKSwKKwkgIFtwMV0gIityIiAocDEpLCBbcDJdICIrciIgKHAyKSwgW3AzXSAiK3IiIChwMyksIFtwNF0gIityIiAocDQpLAorCSAgW3A1XSAiK3IiIChwNSkKKwk6IFtpbmNdICJyIiAoMjU2VUwpCisJOiAibWVtb3J5Iik7CisKKwlYTU1TX1JFU1RPUkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19zc2UgPSB7CisJLm5hbWUgPSAiZ2VuZXJpY19zc2UiLAorCS5kb18yID0geG9yX3NzZV8yLAorCS5kb18zID0geG9yX3NzZV8zLAorCS5kb180ID0geG9yX3NzZV80LAorCS5kb181ID0geG9yX3NzZV81LAorfTsKKworI3VuZGVmIFhPUl9UUllfVEVNUExBVEVTCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCQkJXAorZG8gewkJCQkJCVwKKwl4b3Jfc3BlZWQoJnhvcl9ibG9ja19zc2UpOwkJXAorfSB3aGlsZSAoMCkKKworLyogV2UgZm9yY2UgdGhlIHVzZSBvZiB0aGUgU1NFIHhvciBibG9jayBiZWNhdXNlIGl0IGNhbiB3cml0ZSBhcm91bmQgTDIuCisgICBXZSBtYXkgYWxzbyBiZSBhYmxlIHRvIGxvYWQgaW50byB0aGUgTDEgb25seSBkZXBlbmRpbmcgb24gaG93IHRoZSBjcHUKKyAgIGRlYWxzIHdpdGggYSBsb2FkIHRvIGEgbGluZSB0aGF0IGlzIGJlaW5nIHByZWZldGNoZWQuICAqLworI2RlZmluZSBYT1JfU0VMRUNUX1RFTVBMQVRFKEZBU1RFU1QpICgmeG9yX2Jsb2NrX3NzZSkKKworI2VuZGlmIC8qIF9BU01fWDg2X1hPUl82NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveHNhdmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni94c2F2ZS5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMGQ0MWYwMy4uZDdlNWE1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMjMsNyArMjMsNyBAQAogQ0ZMQUdTX3RzYy5vCQk6PSAkKG5vc3RhY2twKQogCiBvYmoteQkJCTo9IHByb2Nlc3NfJChCSVRTKS5vIHNpZ25hbF8kKEJJVFMpLm8gZW50cnlfJChCSVRTKS5vCi1vYmoteQkJCSs9IHRyYXBzLm8gaXJxXyQoQklUUykubyBkdW1wc3RhY2tfJChCSVRTKS5vCitvYmoteQkJCSs9IHRyYXBzLm8gaXJxLm8gaXJxXyQoQklUUykubyBkdW1wc3RhY2tfJChCSVRTKS5vCiBvYmoteQkJCSs9IHRpbWVfJChCSVRTKS5vIGlvcG9ydC5vIGxkdC5vCiBvYmoteQkJCSs9IHNldHVwLm8gaTgyNTkubyBpcnFpbml0XyQoQklUUykubyBzZXR1cF9wZXJjcHUubwogb2JqLSQoQ09ORklHX1g4Nl9WSVNXUykJKz0gdmlzd3NfcXVpcmtzLm8KQEAgLTYwLDggKzYwLDggQEAKIG9iai0kKENPTkZJR19YODZfNjRfU01QKQkrPSB0c2Nfc3luYy5vIHNtcGNvbW1vbi5vCiBvYmotJChDT05GSUdfWDg2X1RSQU1QT0xJTkUpCSs9IHRyYW1wb2xpbmVfJChCSVRTKS5vCiBvYmotJChDT05GSUdfWDg2X01QUEFSU0UpCSs9IG1wcGFyc2Uubwotb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljXyQoQklUUykubyBubWkubwotb2JqLSQoQ09ORklHX1g4Nl9JT19BUElDKQkrPSBpb19hcGljXyQoQklUUykubworb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljLm8gbm1pLm8KK29iai0kKENPTkZJR19YODZfSU9fQVBJQykJKz0gaW9fYXBpYy5vCiBvYmotJChDT05GSUdfWDg2X1JFQk9PVEZJWFVQUykJKz0gcmVib290X2ZpeHVwc18zMi5vCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjXyQoQklUUykubwpAQCAtMTA4LDcgKzEwOCw3IEBACiAjIDY0IGJpdCBzcGVjaWZpYyBmaWxlcwogaWZlcSAoJChDT05GSUdfWDg2XzY0KSx5KQogICAgICAgICBvYmoteQkJCQkrPSBnZW5hcGljXzY0Lm8gZ2VuYXBpY19mbGF0XzY0Lm8gZ2VueDJhcGljX3V2X3gubyB0bGJfdXYubwotCW9iai15CQkJCSs9IGJpb3NfdXYubworCW9iai15CQkJCSs9IGJpb3NfdXYubyB1dl9pcnEubyB1dl9zeXNmcy5vCiAgICAgICAgIG9iai15CQkJCSs9IGdlbngyYXBpY19jbHVzdGVyLm8KICAgICAgICAgb2JqLXkJCQkJKz0gZ2VueDJhcGljX3BoeXMubwogICAgICAgICBvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBwbXRpbWVyXzY0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBlYjg3NWNkLi44YzFmNzZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0xNTMsMTIgKzE1MywxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRworCitzdGF0aWMgaW50IGFjcGlfbWNmZ182NGJpdF9iYXNlX2FkZHIgX19pbml0ZGF0YSA9IEZBTFNFOworCiAvKiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgTU1DT05GSUcgYXBlcnR1cmUuICBTZXQgZnJvbSBBQ1BJIHRhYmxlcy4gKi8KIHN0cnVjdCBhY3BpX21jZmdfYWxsb2NhdGlvbiAqcGNpX21tY2ZnX2NvbmZpZzsKIGludCBwY2lfbW1jZmdfY29uZmlnX251bTsKIAotc3RhdGljIGludCBhY3BpX21jZmdfNjRiaXRfYmFzZV9hZGRyIF9faW5pdGRhdGEgPSBGQUxTRTsKLQogc3RhdGljIGludCBfX2luaXQgYWNwaV9tY2ZnX29lbV9jaGVjayhzdHJ1Y3QgYWNwaV90YWJsZV9tY2ZnICptY2ZnKQogewogCWlmICghc3RyY21wKG1jZmctPmhlYWRlci5vZW1faWQsICJTR0kiKSkKQEAgLTExMzYsNyArMTEzNyw3IEBACiAJCXJldHVybiBnc2k7CiAJfQogCWlmICh0ZXN0X2JpdChpb2FwaWNfcGluLCBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLnBpbl9wcm9ncmFtbWVkKSkgewotCQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICJQaW4gJWQtJWQgYWxyZWFkeSBwcm9ncmFtbWVkXG4iLAorCQlwcl9kZWJ1ZygiUGluICVkLSVkIGFscmVhZHkgcHJvZ3JhbW1lZFxuIiwKIAkJCSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmFwaWNfaWQsIGlvYXBpY19waW4pOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAkJcmV0dXJuIChnc2kgPCBJUlFfQ09NUFJFU1NJT05fU1RBUlQgPyBnc2kgOiBnc2lfdG9faXJxW2dzaV0pOwpAQCAtMTI1Niw3ICsxMjU3LDcgQEAKIAogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0lOVEVSUlVQVF9PVkVSUklERSwgYWNwaV9wYXJzZV9pbnRfc3JjX292ciwKLQkJCQkgIE5SX0lSUV9WRUNUT1JTKTsKKwkJCQkgIG5yX2lycXMpOwogCWlmIChjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAogCQkgICAgICAgIkVycm9yIHBhcnNpbmcgaW50ZXJydXB0IHNvdXJjZSBvdmVycmlkZXMgZW50cnlcbiIpOwpAQCAtMTI3Niw3ICsxMjc3LDcgQEAKIAogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX05NSV9TT1VSQ0UsIGFjcGlfcGFyc2Vfbm1pX3NyYywKLQkJCQkgIE5SX0lSUV9WRUNUT1JTKTsKKwkJCQkgIG5yX2lycXMpOwogCWlmIChjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgcGFyc2luZyBOTUkgU1JDIGVudHJ5XG4iKTsKIAkJLyogVEJEOiBDbGVhbnVwIHRvIGFsbG93IGZhbGxiYWNrIHRvIE1QUyAqLwpAQCAtMTU5OCw2ICsxNTk5LDExIEBACiAJCSAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJUcmF2ZWxNYXRlIDM2MCIpLAogCQkgICAgIH0sCiAJIH0sCisJe30KK307CisKKy8qIHNlY29uZCB0YWJsZSBmb3IgRE1JIGNoZWNrcyB0aGF0IHNob3VsZCBydW4gYWZ0ZXIgZWFybHktcXVpcmtzICovCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBhY3BpX2RtaV90YWJsZV9sYXRlW10gPSB7CiAJLyoKIAkgKiBIUCBsYXB0b3BzIHdoaWNoIHVzZSBhIERTRFQgcmVwb3J0aW5nIGFzIEhQL1NCNDAwLzEwMDAwLAogCSAqIHdoaWNoIGluY2x1ZGVzIHNvbWUgY29kZSB3aGljaCBvdmVycmlkZXMgYWxsIHRlbXBlcmF0dXJlCkBAIC0xNzI2LDYgKzE3MzIsOSBAQAogCiBpbnQgX19pbml0IGFjcGlfYm9vdF9pbml0KHZvaWQpCiB7CisJLyogdGhvc2UgYXJlIGV4ZWN1dGVkIGFmdGVyIGVhcmx5LXF1aXJrcyBhcmUgZXhlY3V0ZWQgKi8KKwlkbWlfY2hlY2tfc3lzdGVtKGFjcGlfZG1pX3RhYmxlX2xhdGUpOworCiAJLyoKIAkgKiBJZiBhY3BpX2Rpc2FibGVkLCBiYWlsIG91dAogCSAqIE9uZSBleGNlcHRpb246IGFjcGk9aHQgY29udGludWVzIGZhciBlbm91Z2ggdG8gZW51bWVyYXRlIExBUElDcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKaW5kZXggNDI2ZTVkOS4uODA2YjRlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KIAogI2luY2x1ZGUgInJlYWxtb2RlL3dha2V1cC5oIgogI2luY2x1ZGUgInNsZWVwLmgiCkBAIC0yMSw3ICsyMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhY3BpX3JlYWxtb2RlOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVCkKLXN0YXRpYyBjaGFyIHRlbXBfc3RhY2tbMTAyNDBdOworc3RhdGljIGNoYXIgdGVtcF9zdGFja1s0MDk2XTsKICNlbmRpZgogCiAvKioKQEAgLTk3LDcgKzk4LDkgQEAKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLwogCWhlYWRlci0+dHJhbXBvbGluZV9zZWdtZW50ID0gc2V0dXBfdHJhbXBvbGluZSgpID4+IDQ7CiAjaWZkZWYgQ09ORklHX1NNUAotCXN0YWNrX3N0YXJ0LnNwID0gdGVtcF9zdGFjayArIDQwOTY7CisJc3RhY2tfc3RhcnQuc3AgPSB0ZW1wX3N0YWNrICsgc2l6ZW9mKHRlbXBfc3RhY2spOworCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0KKwkJCSh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAjZW5kaWYKIAlpbml0aWFsX2NvZGUgPSAodW5zaWduZWQgbG9uZyl3YWtldXBfbG9uZzY0OwogCXNhdmVkX21hZ2ljID0gMHgxMjM0NTY3ODlhYmNkZWYwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwppbmRleCA0Y2Q4MDgzLi4wY2RjZGEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAvKiBQcm9ncmFtcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHRhYmxlIGludG8gdGhlIElPTU1VIGhhcmR3YXJlICovCiBzdGF0aWMgdm9pZCBfX2luaXQgaW9tbXVfc2V0X2RldmljZV90YWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIHsKLQl1MzIgZW50cnk7CisJdTY0IGVudHJ5OwogCiAJQlVHX09OKGlvbW11LT5tbWlvX2Jhc2UgPT0gTlVMTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTdmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCkBAIC0wLDAgKzEsMjIzOCBAQAorLyoKKyAqCUxvY2FsIEFQSUMgaGFuZGxpbmcsIGxvY2FsIEFQSUMgdGltZXJzCisgKgorICoJKGMpIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICoJRml4ZXMKKyAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOworICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKKyAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCisgKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkuCisgKglNYWNpZWogVy4gUm96eWNraQk6CVZhcmlvdXMgdXBkYXRlcyBhbmQgZml4ZXMuCisgKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBvd2VyIE1hbmFnZW1lbnQgZm9yIFVQLUFQSUMuCisgKglQYXZlbCBNYWNoZWsgYW5kCisgKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvZG1hci5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9pODI1My5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisKKyNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKyNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxtYWNoX2lwaS5oPgorCisvKgorICogU2FuaXR5IGNoZWNrCisgKi8KKyNpZiAoKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgwRikgIT0gMHgwRikKKyMgZXJyb3IgU1BVUklPVVNfQVBJQ19WRUNUT1IgZGVmaW5pdGlvbiBlcnJvcgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogS25vYiB0byBjb250cm9sIG91ciB3aWxsaW5nbmVzcyB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMuCisgKgorICogKzE9Zm9yY2UtZW5hYmxlCisgKi8KK3N0YXRpYyBpbnQgZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWM7CisvKgorICogQVBJQyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycworICovCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9sYXBpYyhjaGFyICphcmcpCit7CisJZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWMgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImxhcGljIiwgcGFyc2VfbGFwaWMpOworLyogTG9jYWwgQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCAqLworc3RhdGljIGludCBlbmFibGVkX3ZpYV9hcGljYmFzZTsKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW50IGFwaWNfY2FsaWJyYXRlX3BtdG1yIF9faW5pdGRhdGE7CitzdGF0aWMgX19pbml0IGludCBzZXR1cF9hcGljcG10aW1lcihjaGFyICpzKQoreworCWFwaWNfY2FsaWJyYXRlX3BtdG1yID0gMTsKKwlub3RzY19zZXR1cChOVUxMKTsKKwlyZXR1cm4gMDsKK30KK19fc2V0dXAoImFwaWNwbXRpbWVyIiwgc2V0dXBfYXBpY3BtdGltZXIpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIEhBVkVfWDJBUElDCisjZW5kaWYKKworI2lmZGVmIEhBVkVfWDJBUElDCitpbnQgeDJhcGljOworLyogeDJhcGljIGVuYWJsZWQgYmVmb3JlIE9TIGhhbmRvdmVyICovCitpbnQgeDJhcGljX3ByZWVuYWJsZWQ7CitpbnQgZGlzYWJsZV94MmFwaWM7CitzdGF0aWMgX19pbml0IGludCBzZXR1cF9ub3gyYXBpYyhjaGFyICpzdHIpCit7CisJZGlzYWJsZV94MmFwaWMgPSAxOworCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfWDJBUElDKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub3gyYXBpYyIsIHNldHVwX25veDJhcGljKTsKKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7CitpbnQgZGlzYWJsZV9hcGljOworLyogRGlzYWJsZSBsb2NhbCBBUElDIHRpbWVyIGZyb20gdGhlIGtlcm5lbCBjb21tYW5kbGluZSBvciB2aWEgZG1pIHF1aXJrICovCitzdGF0aWMgaW50IGRpc2FibGVfYXBpY190aW1lciBfX2NwdWluaXRkYXRhOworLyogTG9jYWwgQVBJQyB0aW1lciB3b3JrcyBpbiBDMiAqLworaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7CitFWFBPUlRfU1lNQk9MX0dQTChsb2NhbF9hcGljX3RpbWVyX2MyX29rKTsKKworaW50IGZpcnN0X3N5c3RlbV92ZWN0b3IgPSAweGZlOworCitjaGFyIHN5c3RlbV92ZWN0b3JzW05SX1ZFQ1RPUlNdID0geyBbMCAuLi4gTlJfVkVDVE9SUy0xXSA9IFNZU19WRUNUT1JfRlJFRX07CisKKy8qCisgKiBEZWJ1ZyBsZXZlbCwgZXhwb3J0ZWQgZm9yIGlvX2FwaWMuYworICovCit1bnNpZ25lZCBpbnQgYXBpY192ZXJib3NpdHk7CisKK2ludCBwaWNfbW9kZTsKKworLyogSGF2ZSB3ZSBmb3VuZCBhbiBNUCB0YWJsZSAqLworaW50IHNtcF9mb3VuZF9jb25maWc7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGFwaWNfcmVzb3VyY2UgPSB7CisJLm5hbWUgPSAiTG9jYWwgQVBJQyIsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1ksCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGlicmF0aW9uX3Jlc3VsdDsKKworc3RhdGljIGludCBsYXBpY19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzayk7CitzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpOworCisvKgorICogVGhlIGxvY2FsIGFwaWMgdGltZXIgY2FuIGJlIHVzZWQgZm9yIGFueSBmdW5jdGlvbiB3aGljaCBpcyBDUFUgbG9jYWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGxhcGljX2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUJCT0gImxhcGljIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QKKwkJCXwgQ0xPQ0tfRVZUX0ZFQVRfQzNTVE9QIHwgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVksCisJLnNoaWZ0CQk9IDMyLAorCS5zZXRfbW9kZQk9IGxhcGljX3RpbWVyX3NldHVwLAorCS5zZXRfbmV4dF9ldmVudAk9IGxhcGljX25leHRfZXZlbnQsCisJLmJyb2FkY2FzdAk9IGxhcGljX3RpbWVyX2Jyb2FkY2FzdCwKKwkucmF0aW5nCQk9IDEwMCwKKwkuaXJxCQk9IC0xLAorfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBsYXBpY19ldmVudHMpOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhcGljX3BoeXM7CisKKy8qCisgKiBHZXQgdGhlIExBUElDIHZlcnNpb24KKyAqLworc3RhdGljIGlubGluZSBpbnQgbGFwaWNfZ2V0X3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKK30KKworLyoKKyAqIENoZWNrLCBpZiB0aGUgQVBJQyBpcyBpbnRlZ3JhdGVkIG9yIGEgc2VwYXJhdGUgY2hpcAorICovCitzdGF0aWMgaW5saW5lIGludCBsYXBpY19pc19pbnRlZ3JhdGVkKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXJldHVybiAxOworI2Vsc2UKKwlyZXR1cm4gQVBJQ19JTlRFR1JBVEVEKGxhcGljX2dldF92ZXJzaW9uKCkpOworI2VuZGlmCit9CisKKy8qCisgKiBDaGVjaywgd2hldGhlciB0aGlzIGlzIGEgbW9kZXJuIG9yIGEgZmlyc3QgZ2VuZXJhdGlvbiBBUElDCisgKi8KK3N0YXRpYyBpbnQgbW9kZXJuX2FwaWModm9pZCkKK3sKKwkvKiBBTUQgc3lzdGVtcyB1c2Ugb2xkIEFQSUMgdmVyc2lvbnMsIHNvIGNoZWNrIHRoZSBDUFUgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIGxhcGljX2dldF92ZXJzaW9uKCkgPj0gMHgxNDsKK30KKworLyoKKyAqIFBhcmF2aXJ0IGtlcm5lbHMgYWxzbyBtaWdodCBiZSB1c2luZyB0aGVzZSBiZWxvdyBvcHMuIFNvIHdlIHN0aWxsCisgKiB1c2UgZ2VuZXJpYyBhcGljX3JlYWQoKS9hcGljX3dyaXRlKCksIHdoaWNoIG1pZ2h0IGJlIHBvaW50aW5nIHRvIGRpZmZlcmVudAorICogb3BzIGluIFBBUkFWSVJUIGNhc2UuCisgKi8KK3ZvaWQgeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQoreworCXdoaWxlIChhcGljX3JlYWQoQVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKK3UzMiBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwl1MzIgc2VuZF9zdGF0dXM7CisJaW50IHRpbWVvdXQ7CisKKwl0aW1lb3V0ID0gMDsKKwlkbyB7CisJCXNlbmRfc3RhdHVzID0gYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1k7CisJCWlmICghc2VuZF9zdGF0dXMpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwMCk7CisJfSB3aGlsZSAodGltZW91dCsrIDwgMTAwMCk7CisKKwlyZXR1cm4gc2VuZF9zdGF0dXM7Cit9CisKK3ZvaWQgeGFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCkKK3sKKwlhcGljX3dyaXRlKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChpZCkpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGxvdyk7Cit9CisKK3U2NCB4YXBpY19pY3JfcmVhZCh2b2lkKQoreworCXUzMiBpY3IxLCBpY3IyOworCisJaWNyMiA9IGFwaWNfcmVhZChBUElDX0lDUjIpOworCWljcjEgPSBhcGljX3JlYWQoQVBJQ19JQ1IpOworCisJcmV0dXJuIGljcjEgfCAoKHU2NClpY3IyIDw8IDMyKTsKK30KKworc3RhdGljIHN0cnVjdCBhcGljX29wcyB4YXBpY19vcHMgPSB7CisJLnJlYWQgPSBuYXRpdmVfYXBpY19tZW1fcmVhZCwKKwkud3JpdGUgPSBuYXRpdmVfYXBpY19tZW1fd3JpdGUsCisJLmljcl9yZWFkID0geGFwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZSA9IHhhcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZSA9IHhhcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZSA9IHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSwKK307CisKK3N0cnVjdCBhcGljX29wcyBfX3JlYWRfbW9zdGx5ICphcGljX29wcyA9ICZ4YXBpY19vcHM7CitFWFBPUlRfU1lNQk9MX0dQTChhcGljX29wcyk7CisKKyNpZmRlZiBIQVZFX1gyQVBJQworc3RhdGljIHZvaWQgeDJhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwkvKiBubyBuZWVkIHRvIHdhaXQgZm9yIGljciBpZGxlIGluIHgyYXBpYyAqLworCXJldHVybjsKK30KKworc3RhdGljIHUzMiBzYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCB4MmFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCkKK3sKKwl3cm1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgKChfX3U2NCkgaWQpIDw8IDMyIHwgbG93KTsKK30KKwordTY0IHgyYXBpY19pY3JfcmVhZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJcmRtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBhcGljX29wcyB4MmFwaWNfb3BzID0geworCS5yZWFkID0gbmF0aXZlX2FwaWNfbXNyX3JlYWQsCisJLndyaXRlID0gbmF0aXZlX2FwaWNfbXNyX3dyaXRlLAorCS5pY3JfcmVhZCA9IHgyYXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlID0geDJhcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZSA9IHgyYXBpY193YWl0X2ljcl9pZGxlLAorCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSBzYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlLAorfTsKKyNlbmRpZgorCisvKioKKyAqIGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwIC0gZW5hYmxlIE5NSSB0aHJvdWdoIGxvY2FsIHZlY3RvciB0YWJsZSAwCisgKi8KK3ZvaWQgX19jcHVpbml0IGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwkvKiB1bm1hc2sgYW5kIHNldCB0byBOTUkgKi8KKwl2ID0gQVBJQ19ETV9OTUk7CisKKwkvKiBMZXZlbCB0cmlnZ2VyZWQgZm9yIDgyNDg5RFggKDMyYml0IG1vZGUpICovCisJaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCisJCXYgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKKworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2KTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKKy8qKgorICogZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCAtIEdldCBudW1iZXIgb2YgcGh5c2ljYWwgYnJvYWRjYXN0IElEcworICovCitpbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKQoreworCXJldHVybiBtb2Rlcm5fYXBpYygpID8gMHhmZiA6IDB4ZjsKK30KKyNlbmRpZgorCisvKioKKyAqIGxhcGljX2dldF9tYXhsdnQgLSBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHZlY3RvciB0YWJsZSBlbnRyaWVzCisgKi8KK2ludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwkvKgorCSAqIC0gd2UgYWx3YXlzIGhhdmUgQVBJQyBpbnRlZ3JhdGVkIG9uIDY0Yml0IG1vZGUKKwkgKiAtIDgyNDg5RFhzIGRvIG5vdCByZXBvcnQgIyBvZiBMVlQgZW50cmllcworCSAqLworCXJldHVybiBBUElDX0lOVEVHUkFURUQoR0VUX0FQSUNfVkVSU0lPTih2KSkgPyBHRVRfQVBJQ19NQVhMVlQodikgOiAyOworfQorCisvKgorICogTG9jYWwgQVBJQyB0aW1lcgorICovCisKKy8qIENsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUgQVBJQ19ESVZJU09SIDE2CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGxvY2FsIEFQSUMgdGltZXIsIHdpdGggYSB0aW1lb3V0IG9mCisgKiAnY2xvY2tzJyBBUElDIGJ1cyBjbG9jay4gRHVyaW5nIGNhbGlicmF0aW9uIHdlIGFjdHVhbGx5IGNhbGwKKyAqIHRoaXMgZnVuY3Rpb24gdHdpY2Ugb24gdGhlIGJvb3QgQ1BVLCBvbmNlIHdpdGggYSBib2d1cyB0aW1lb3V0CisgKiB2YWx1ZSwgc2Vjb25kIHRpbWUgZm9yIHJlYWwuIFRoZSBvdGhlciAobm9uY2FsaWJyYXRpbmcpIENQVXMKKyAqIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IG9uY2UsIHdpdGggdGhlIHJlYWwsIGNhbGlicmF0ZWQgdmFsdWUuCisgKgorICogV2UgZG8gcmVhZHMgYmVmb3JlIHdyaXRlcyBldmVuIGlmIHVubmVjZXNzYXJ5LCB0byBnZXQgYXJvdW5kIHRoZQorICogUDUgQVBJQyBkb3VibGUgd3JpdGUgYnVnLgorICovCitzdGF0aWMgdm9pZCBfX3NldHVwX0FQSUNfTFZUVCh1bnNpZ25lZCBpbnQgY2xvY2tzLCBpbnQgb25lc2hvdCwgaW50IGlycWVuKQoreworCXVuc2lnbmVkIGludCBsdnR0X3ZhbHVlLCB0bXBfdmFsdWU7CisKKwlsdnR0X3ZhbHVlID0gTE9DQUxfVElNRVJfVkVDVE9SOworCWlmICghb25lc2hvdCkKKwkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9USU1FUl9QRVJJT0RJQzsKKwlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKKwkJbHZ0dF92YWx1ZSB8PSBTRVRfQVBJQ19USU1FUl9CQVNFKEFQSUNfVElNRVJfQkFTRV9ESVYpOworCisJaWYgKCFpcnFlbikKKwkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9NQVNLRUQ7CisKKwlhcGljX3dyaXRlKEFQSUNfTFZUVCwgbHZ0dF92YWx1ZSk7CisKKwkvKgorCSAqIERpdmlkZSBQSUNMSyBieSAxNgorCSAqLworCXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOworCWFwaWNfd3JpdGUoQVBJQ19URENSLAorCQkodG1wX3ZhbHVlICYgfihBUElDX1REUl9ESVZfMSB8IEFQSUNfVERSX0RJVl9UTUJBU0UpKSB8CisJCUFQSUNfVERSX0RJVl8xNik7CisKKwlpZiAoIW9uZXNob3QpCisJCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgY2xvY2tzIC8gQVBJQ19ESVZJU09SKTsKK30KKworLyoKKyAqIFNldHVwIGV4dGVuZGVkIExWVCwgQU1EIHNwZWNpZmljIChLOCwgZmFtaWx5IDEwaCkKKyAqCisgKiBWZWN0b3IgbWFwcGluZ3MgYXJlIGhhcmQgY29kZWQuIE9uIEs4IG9ubHkgb2Zmc2V0IDAgKEFQSUM1MDApIGFuZAorICogTUNFIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZC4gVGh1cyBNQ0Ugb2Zmc2V0IG11c3QgYmUgc2V0IHRvIDAuCisgKgorICogSWYgbWFzaz0xLCB0aGUgTFZUIGVudHJ5IGRvZXMgbm90IGdlbmVyYXRlIGludGVycnVwdHMgd2hpbGUgbWFzaz0wCisgKiBlbmFibGVzIHRoZSB2ZWN0b3IuIFNlZSBhbHNvIHRoZSBCS0RHcy4KKyAqLworCisjZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX01DRSAwCisjZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUyAxCisKK3N0YXRpYyB2b2lkIHNldHVwX0FQSUNfZWlsdnQodTggbHZ0X29mZiwgdTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChsdnRfb2ZmIDw8IDQpICsgQVBJQ19FSUxWVDA7CisJdW5zaWduZWQgaW50ICB2ICAgPSAobWFzayA8PCAxNikgfCAobXNnX3R5cGUgPDwgOCkgfCB2ZWN0b3I7CisKKwlhcGljX3dyaXRlKHJlZywgdik7Cit9CisKK3U4IHNldHVwX0FQSUNfZWlsdnRfbWNlKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCit7CisJc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9NQ0UsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOworCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9NQ0U7Cit9CisKK3U4IHNldHVwX0FQSUNfZWlsdnRfaWJzKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCit7CisJc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9JQlMsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOworCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9JQlM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZXR1cF9BUElDX2VpbHZ0X2licyk7CisKKy8qCisgKiBQcm9ncmFtIHRoZSBuZXh0IGV2ZW50LCByZWxhdGl2ZSB0byBub3cKKyAqLworc3RhdGljIGludCBsYXBpY19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgZGVsdGEpOworCXJldHVybiAwOworfQorCisvKgorICogU2V0dXAgdGhlIGxhcGljIHRpbWVyIGluIHBlcmlvZGljIG9yIG9uZXNob3QgbW9kZQorICovCitzdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2OworCisJLyogTGFwaWMgdXNlZCBhcyBkdW1teSBmb3IgYnJvYWRjYXN0ID8gKi8KKwlpZiAoZXZ0LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0RVTU1ZKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJX19zZXR1cF9BUElDX0xWVFQoY2FsaWJyYXRpb25fcmVzdWx0LAorCQkJCSAgbW9kZSAhPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQywgMSk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKKwkJdiB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKKwkJYXBpY193cml0ZShBUElDX0xWVFQsIHYpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJLyogTm90aGluZyB0byBkbyBoZXJlICovCisJCWJyZWFrOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIExvY2FsIEFQSUMgdGltZXIgYnJvYWRjYXN0IGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzaykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJc2VuZF9JUElfbWFzayhtYXNrLCBMT0NBTF9USU1FUl9WRUNUT1IpOworI2VuZGlmCit9CisKKy8qCisgKiBTZXR1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciBmb3IgdGhpcyBDUFUuIENvcHkgdGhlIGluaXRpbGl6ZWQgdmFsdWVzCisgKiBvZiB0aGUgYm9vdCBDUFUgYW5kIHJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBpbiB0aGUgZnJhbWV3b3JrLgorICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc2V0dXBfQVBJQ190aW1lcih2b2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOworCisJbWVtY3B5KGxldnQsICZsYXBpY19jbG9ja2V2ZW50LCBzaXplb2YoKmxldnQpKTsKKwlsZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShsZXZ0KTsKK30KKworLyoKKyAqIEluIHRoaXMgZnVuY3Rpb25zIHdlIGNhbGlicmF0ZSBBUElDIGJ1cyBjbG9ja3MgdG8gdGhlIGV4dGVybmFsIHRpbWVyLgorICoKKyAqIFdlIHdhbnQgdG8gZG8gdGhlIGNhbGlicmF0aW9uIG9ubHkgb25jZSBzaW5jZSB3ZSB3YW50IHRvIGhhdmUgbG9jYWwgdGltZXIKKyAqIGlycXMgc3luY3Jvbi4gQ1BVcyBjb25uZWN0ZWQgYnkgdGhlIHNhbWUgQVBJQyBidXMgaGF2ZSB0aGUgdmVyeSBzYW1lIGJ1cworICogZnJlcXVlbmN5LgorICoKKyAqIFRoaXMgd2FzIHByZXZpb3VzbHkgZG9uZSBieSByZWFkaW5nIHRoZSBQSVQvSFBFVCBhbmQgd2FpdGluZyBmb3IgYSB3cmFwCisgKiBhcm91bmQgdG8gZmluZCBvdXQsIHRoYXQgYSB0aWNrIGhhcyBlbGFwc2VkLiBJIGhhdmUgYSBib3gsIHdoZXJlIHRoZSBQSVQKKyAqIHJlYWRvdXQgaXMgYnJva2VuLCBzbyBpdCBuZXZlciBnZXRzIG91dCBvZiB0aGUgd2FpdCBsb29wIGFnYWluLiBUaGlzIHdhcworICogYWxzbyByZXBvcnRlZCBieSBvdGhlcnMuCisgKgorICogTW9uaXRvcmluZyB0aGUgamlmZmllcyB2YWx1ZSBpcyBpbmFjY3VyYXRlIGFuZCB0aGUgY2xvY2tldmVudHMKKyAqIGluZnJhc3RydWN0dXJlIGFsbG93cyB1cyB0byBkbyBhIHNpbXBsZSBzdWJzdGl0dXRpb24gb2YgdGhlIGludGVycnVwdAorICogaGFuZGxlci4KKyAqCisgKiBUaGUgY2FsaWJyYXRpb24gcm91dGluZSBhbHNvIHVzZXMgdGhlIHBtX3RpbWVyIHdoZW4gcG9zc2libGUsIGFzIHRoZSBQSVQKKyAqIGhhcHBlbnMgdG8gcnVuIHdheSB0b28gc2xvdyAoZmFjdG9yIDIuMyBvbiBteSBWQUlPIENvcmVEdW8sIHdoaWNoIGdvZXMKKyAqIGJhY2sgdG8gbm9ybWFsIGxhdGVyIGluIHRoZSBib290IHByb2Nlc3MpLgorICovCisKKyNkZWZpbmUgTEFQSUNfQ0FMX0xPT1BTCQkoSFovMTApCisKK3N0YXRpYyBfX2luaXRkYXRhIGludCBsYXBpY19jYWxfbG9vcHMgPSAtMTsKK3N0YXRpYyBfX2luaXRkYXRhIGxvbmcgbGFwaWNfY2FsX3QxLCBsYXBpY19jYWxfdDI7CitzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxvbmcgbGFwaWNfY2FsX3RzYzEsIGxhcGljX2NhbF90c2MyOworc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBsYXBpY19jYWxfcG0xLCBsYXBpY19jYWxfcG0yOworc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBsYXBpY19jYWxfajEsIGxhcGljX2NhbF9qMjsKKworLyoKKyAqIFRlbXBvcmFyeSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGxhcGljX2NhbF9oYW5kbGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHNjID0gMDsKKwlsb25nIHRhcGljID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOworCXVuc2lnbmVkIGxvbmcgcG0gPSBhY3BpX3BtX3JlYWRfZWFybHkoKTsKKworCWlmIChjcHVfaGFzX3RzYykKKwkJcmR0c2NsbCh0c2MpOworCisJc3dpdGNoIChsYXBpY19jYWxfbG9vcHMrKykgeworCWNhc2UgMDoKKwkJbGFwaWNfY2FsX3QxID0gdGFwaWM7CisJCWxhcGljX2NhbF90c2MxID0gdHNjOworCQlsYXBpY19jYWxfcG0xID0gcG07CisJCWxhcGljX2NhbF9qMSA9IGppZmZpZXM7CisJCWJyZWFrOworCisJY2FzZSBMQVBJQ19DQUxfTE9PUFM6CisJCWxhcGljX2NhbF90MiA9IHRhcGljOworCQlsYXBpY19jYWxfdHNjMiA9IHRzYzsKKwkJaWYgKHBtIDwgbGFwaWNfY2FsX3BtMSkKKwkJCXBtICs9IEFDUElfUE1fT1ZSUlVOOworCQlsYXBpY19jYWxfcG0yID0gcG07CisJCWxhcGljX2NhbF9qMiA9IGppZmZpZXM7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX2J5X3BtdGltZXIobG9uZyBkZWx0YXBtLCBsb25nICpkZWx0YSkKK3sKKwljb25zdCBsb25nIHBtXzEwMG1zID0gUE1UTVJfVElDS1NfUEVSX1NFQyAvIDEwOworCWNvbnN0IGxvbmcgcG1fdGhyZXNoID0gcG1fMTAwbXMgLyAxMDA7CisJdW5zaWduZWQgbG9uZyBtdWx0OworCXU2NCByZXM7CisKKyNpZm5kZWYgQ09ORklHX1g4Nl9QTV9USU1FUgorCXJldHVybiAtMTsKKyNlbmRpZgorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIFBNIHRpbWVyIGRlbHRhID0gJWxkXG4iLCBkZWx0YXBtKTsKKworCS8qIENoZWNrLCBpZiB0aGUgUE0gdGltZXIgaXMgYXZhaWxhYmxlICovCisJaWYgKCFkZWx0YXBtKQorCQlyZXR1cm4gLTE7CisKKwltdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChQTVRNUl9USUNLU19QRVJfU0VDLCAyMik7CisKKwlpZiAoZGVsdGFwbSA+IChwbV8xMDBtcyAtIHBtX3RocmVzaCkgJiYKKwkgICAgZGVsdGFwbSA8IChwbV8xMDBtcyArIHBtX3RocmVzaCkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIFBNIHRpbWVyIHJlc3VsdCBva1xuIik7CisJfSBlbHNlIHsKKwkJcmVzID0gKCgodTY0KWRlbHRhcG0pICogIG11bHQpID4+IDIyOworCQlkb19kaXYocmVzLCAxMDAwMDAwKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBjYWxpYnJhdGlvbiBub3QgY29uc2lzdGVudCAiCisJCQkid2l0aCBQTSBUaW1lcjogJWxkbXMgaW5zdGVhZCBvZiAxMDBtc1xuIiwKKwkJCShsb25nKXJlcyk7CisJCS8qIENvcnJlY3QgdGhlIGxhcGljIGNvdW50ZXIgdmFsdWUgKi8KKwkJcmVzID0gKCgodTY0KSgqZGVsdGEpKSAqIHBtXzEwMG1zKTsKKwkJZG9fZGl2KHJlcywgZGVsdGFwbSk7CisJCXByaW50ayhLRVJOX0lORk8gIkFQSUMgZGVsdGEgYWRqdXN0ZWQgdG8gUE0tVGltZXI6ICIKKwkJCSIlbHUgKCVsZClcbiIsICh1bnNpZ25lZCBsb25nKXJlcywgKmRlbHRhKTsKKwkJKmRlbHRhID0gKGxvbmcpcmVzOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOworCXZvaWQgKCpyZWFsX2hhbmRsZXIpKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldik7CisJdW5zaWduZWQgbG9uZyBkZWx0YWo7CisJbG9uZyBkZWx0YTsKKwlpbnQgcG1fcmVmZXJlbmNlZCA9IDA7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJLyogUmVwbGFjZSB0aGUgZ2xvYmFsIGludGVycnVwdCBoYW5kbGVyICovCisJcmVhbF9oYW5kbGVyID0gZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyOworCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlciA9IGxhcGljX2NhbF9oYW5kbGVyOworCisJLyoKKwkgKiBTZXR1cCB0aGUgQVBJQyBjb3VudGVyIHRvIG1heGltdW0uIFRoZXJlIGlzIG5vIHdheSB0aGUgbGFwaWMKKwkgKiBjYW4gdW5kZXJmbG93IGluIHRoZSAxMDBtcyBkZXRlY3Rpb24gdGltZSBmcmFtZQorCSAqLworCV9fc2V0dXBfQVBJQ19MVlRUKDB4ZmZmZmZmZmYsIDAsIDApOworCisJLyogTGV0IHRoZSBpbnRlcnJ1cHRzIHJ1biAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXdoaWxlIChsYXBpY19jYWxfbG9vcHMgPD0gTEFQSUNfQ0FMX0xPT1BTKQorCQljcHVfcmVsYXgoKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBSZXN0b3JlIHRoZSByZWFsIGV2ZW50IGhhbmRsZXIgKi8KKwlnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXIgPSByZWFsX2hhbmRsZXI7CisKKwkvKiBCdWlsZCBkZWx0YSB0MS10MiBhcyBhcGljIHRpbWVyIGNvdW50cyBkb3duICovCisJZGVsdGEgPSBsYXBpY19jYWxfdDEgLSBsYXBpY19jYWxfdDI7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGxhcGljIGRlbHRhID0gJWxkXG4iLCBkZWx0YSk7CisKKwkvKiB3ZSB0cnVzdCB0aGUgUE0gYmFzZWQgY2FsaWJyYXRpb24gaWYgcG9zc2libGUgKi8KKwlwbV9yZWZlcmVuY2VkID0gIWNhbGlicmF0ZV9ieV9wbXRpbWVyKGxhcGljX2NhbF9wbTIgLSBsYXBpY19jYWxfcG0xLAorCQkJCQkmZGVsdGEpOworCisJLyogQ2FsY3VsYXRlIHRoZSBzY2FsZWQgbWF0aCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKwlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoZGVsdGEsIFRJQ0tfTlNFQyAqIExBUElDX0NBTF9MT09QUywKKwkJCQkgICAgICAgbGFwaWNfY2xvY2tldmVudC5zaGlmdCk7CisJbGFwaWNfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGLCAmbGFwaWNfY2xvY2tldmVudCk7CisJbGFwaWNfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJmxhcGljX2Nsb2NrZXZlbnQpOworCisJY2FsaWJyYXRpb25fcmVzdWx0ID0gKGRlbHRhICogQVBJQ19ESVZJU09SKSAvIExBUElDX0NBTF9MT09QUzsKKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGRlbHRhICVsZFxuIiwgZGVsdGEpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIG11bHQ6ICVsZFxuIiwgbGFwaWNfY2xvY2tldmVudC5tdWx0KTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBjYWxpYnJhdGlvbiByZXN1bHQ6ICV1XG4iLAorCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0KTsKKworCWlmIChjcHVfaGFzX3RzYykgeworCQlkZWx0YSA9IChsb25nKShsYXBpY19jYWxfdHNjMiAtIGxhcGljX2NhbF90c2MxKTsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gQ1BVIGNsb2NrIHNwZWVkIGlzICIKKwkJCSAgICAiJWxkLiUwNGxkIE1Iei5cbiIsCisJCQkgICAgKGRlbHRhIC8gTEFQSUNfQ0FMX0xPT1BTKSAvICgxMDAwMDAwIC8gSFopLAorCQkJICAgIChkZWx0YSAvIExBUElDX0NBTF9MT09QUykgJSAoMTAwMDAwMCAvIEhaKSk7CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gaG9zdCBidXMgY2xvY2sgc3BlZWQgaXMgIgorCQkgICAgIiV1LiUwNHUgTUh6LlxuIiwKKwkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCAvICgxMDAwMDAwIC8gSFopLAorCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0ICUgKDEwMDAwMDAgLyBIWikpOworCisJLyoKKwkgKiBEbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgQVBJQyBjYWxpYnJhdGlvbiByZXN1bHQKKwkgKi8KKwlpZiAoY2FsaWJyYXRpb25fcmVzdWx0IDwgKDEwMDAwMDAgLyBIWikpIHsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiQVBJQyBmcmVxdWVuY3kgdG9vIHNsb3csIGRpc2FibGluZyBhcGljIHRpbWVyXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxldnQtPmZlYXR1cmVzICY9IH5DTE9DS19FVlRfRkVBVF9EVU1NWTsKKworCS8qCisJICogUE0gdGltZXIgY2FsaWJyYXRpb24gZmFpbGVkIG9yIG5vdCB0dXJuZWQgb24KKwkgKiBzbyBsZXRzIHRyeSBBUElDIHRpbWVyIGJhc2VkIGNhbGlicmF0aW9uCisJICovCisJaWYgKCFwbV9yZWZlcmVuY2VkKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiB2ZXJpZnkgQVBJQyB0aW1lclxuIik7CisKKwkJLyoKKwkJICogU2V0dXAgdGhlIGFwaWMgdGltZXIgbWFudWFsbHkKKwkJICovCisJCWxldnQtPmV2ZW50X2hhbmRsZXIgPSBsYXBpY19jYWxfaGFuZGxlcjsKKwkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMsIGxldnQpOworCQlsYXBpY19jYWxfbG9vcHMgPSAtMTsKKworCQkvKiBMZXQgdGhlIGludGVycnVwdHMgcnVuICovCisJCWxvY2FsX2lycV9lbmFibGUoKTsKKworCQl3aGlsZSAobGFwaWNfY2FsX2xvb3BzIDw9IExBUElDX0NBTF9MT09QUykKKwkJCWNwdV9yZWxheCgpOworCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkJLyogU3RvcCB0aGUgbGFwaWMgdGltZXIgKi8KKwkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sIGxldnQpOworCisJCWxvY2FsX2lycV9lbmFibGUoKTsKKworCQkvKiBKaWZmaWVzIGRlbHRhICovCisJCWRlbHRhaiA9IGxhcGljX2NhbF9qMiAtIGxhcGljX2NhbF9qMTsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGppZmZpZXMgZGVsdGEgPSAlbHVcbiIsIGRlbHRhaik7CisKKwkJLyogQ2hlY2ssIGlmIHRoZSBqaWZmaWVzIHJlc3VsdCBpcyBjb25zaXN0ZW50ICovCisJCWlmIChkZWx0YWogPj0gTEFQSUNfQ0FMX0xPT1BTLTIgJiYgZGVsdGFqIDw9IExBUElDX0NBTF9MT09QUysyKQorCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGppZmZpZXMgcmVzdWx0IG9rXG4iKTsKKwkJZWxzZQorCQkJbGV2dC0+ZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CisJfSBlbHNlCisJCWxvY2FsX2lycV9lbmFibGUoKTsKKworCWlmIChsZXZ0LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0RVTU1ZKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJBUElDIHRpbWVyIGRpc2FibGVkIGR1ZSB0byB2ZXJpZmljYXRpb24gZmFpbHVyZS5cbiIpOworCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0dXAgdGhlIGJvb3QgQVBJQworICoKKyAqIENhbGlicmF0ZSBhbmQgdmVyaWZ5IHRoZSByZXN1bHQuCisgKi8KK3ZvaWQgX19pbml0IHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKQoreworCS8qCisJICogVGhlIGxvY2FsIGFwaWMgdGltZXIgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUga2VybmVsCisJICogY29tbWFuZGxpbmUgb3IgZnJvbSB0aGUgQ1BVIGRldGVjdGlvbiBjb2RlLiBSZWdpc3RlciB0aGUgbGFwaWMKKwkgKiB0aW1lciBhcyBhIGR1bW15IGNsb2NrIGV2ZW50IHNvdXJjZSBvbiBTTVAgc3lzdGVtcywgc28gdGhlCisJICogYnJvYWRjYXN0IG1lY2hhbmlzbSBpcyB1c2VkLiBPbiBVUCBzeXN0ZW1zIHNpbXBseSBpZ25vcmUgaXQuCisJICovCisJaWYgKGRpc2FibGVfYXBpY190aW1lcikgeworCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgQVBJQyB0aW1lclxuIik7CisJCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCisJCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgeworCQkJbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gMTsKKwkJCXNldHVwX0FQSUNfdGltZXIoKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiVXNpbmcgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHRzLlxuIgorCQkgICAgImNhbGlicmF0aW5nIEFQSUMgdGltZXIgLi4uXG4iKTsKKworCWlmIChjYWxpYnJhdGVfQVBJQ19jbG9jaygpKSB7CisJCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCisJCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkKKwkJCXNldHVwX0FQSUNfdGltZXIoKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgbm1pX3dhdGNoZG9nIGlzIHNldCB0byBJT19BUElDLCB3ZSBuZWVkIHRoZQorCSAqIFBJVC9IUEVUIGdvaW5nLiAgT3RoZXJ3aXNlIHJlZ2lzdGVyIGxhcGljIGFzIGEgZHVtbXkKKwkgKiBkZXZpY2UuCisJICovCisJaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfSU9fQVBJQykKKwkJbGFwaWNfY2xvY2tldmVudC5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CisJZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIHRpbWVyIHJlZ2lzdGVyZWQgYXMgZHVtbXksIgorCQkJIiBkdWUgdG8gbm1pX3dhdGNoZG9nPSVkIVxuIiwgbm1pX3dhdGNoZG9nKTsKKworCS8qIFNldHVwIHRoZSBsYXBpYyBvciByZXF1ZXN0IHRoZSBicm9hZGNhc3QgKi8KKwlzZXR1cF9BUElDX3RpbWVyKCk7Cit9CisKK3ZvaWQgX19jcHVpbml0IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpCit7CisJc2V0dXBfQVBJQ190aW1lcigpOworfQorCisvKgorICogVGhlIGd1dHMgb2YgdGhlIGFwaWMgdGltZXIgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcGVyX2NwdShsYXBpY19ldmVudHMsIGNwdSk7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIHNob3VsZCBub3QgYmUgaGVyZSB0aWxsIExBUElDIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dAorCSAqIGluIHNvbWUgY2FzZXMgbGlrZSBrZHVtcCwgaXRzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBwZW5kaW5nIExBUElDCisJICogdGltZXIgaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsJ3MgY29udGV4dCBhbmQgaXMgZGVsaXZlcmVkIGluCisJICogbmV3IGtlcm5lbCB0aGUgbW9tZW50IGludGVycnVwdHMgYXJlIGVuYWJsZWQuCisJICoKKwkgKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGVhcmx5IGFuZCBMQVBJQyBpcyBzZXR1cCBtdWNoIGxhdGVyLCBoZW5jZQorCSAqIGl0cyBwb3NzaWJsZSB0aGF0IHdoZW4gd2UgZ2V0IGhlcmUgZXZ0LT5ldmVudF9oYW5kbGVyIGlzIE5VTEwuCisJICogQ2hlY2sgZm9yIGV2ZW50X2hhbmRsZXIgYmVpbmcgTlVMTCBhbmQgZGlzY2FyZCB0aGUgaW50ZXJydXB0IGFzCisJICogc3B1cmlvdXMuCisJICovCisJaWYgKCFldnQtPmV2ZW50X2hhbmRsZXIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlNwdXJpb3VzIExBUElDIHRpbWVyIGludGVycnVwdCBvbiBjcHUgJWRcbiIsIGNwdSk7CisJCS8qIFN3aXRjaCBpdCBvZmYgKi8KKwkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sIGV2dCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIHRoZSBOTUkgZGVhZGxvY2stZGV0ZWN0b3IgdXNlcyB0aGlzLgorCSAqLworI2lmZGVmIENPTkZJR19YODZfNjQKKwlhZGRfcGRhKGFwaWNfdGltZXJfaXJxcywgMSk7CisjZWxzZQorCXBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzKys7CisjZW5kaWYKKworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworfQorCisvKgorICogTG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQuIFRoaXMgaXMgdGhlIG1vc3QgbmF0dXJhbCB3YXkgZm9yIGRvaW5nCisgKiBsb2NhbCBpbnRlcnJ1cHRzLCBidXQgbG9jYWwgdGltZXIgaW50ZXJydXB0cyBjYW4gYmUgZW11bGF0ZWQgYnkKKyAqIGJyb2FkY2FzdCBpbnRlcnJ1cHRzIHRvby4gW2luIGNhc2UgdGhlIGh3IGRvZXNuJ3Qgc3VwcG9ydCBBUElDIHRpbWVyc10KKyAqCisgKiBbIGlmIGEgc2luZ2xlLUNQVSBzeXN0ZW0gcnVucyBhbiBTTVAga2VybmVsIHRoZW4gd2UgY2FsbCB0aGUgbG9jYWwKKyAqICAgaW50ZXJydXB0IGFzIHdlbGwuIFRodXMgd2UgY2Fubm90IGlubGluZSB0aGUgbG9jYWwgaXJxIC4uLiBdCisgKi8KK3ZvaWQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKworCS8qCisJICogTk9URSEgV2UnZCBiZXR0ZXIgQUNLIHRoZSBpcnEgaW1tZWRpYXRlbHksCisJICogYmVjYXVzZSB0aW1lciBoYW5kbGluZyBjYW4gYmUgc2xvdy4KKwkgKi8KKwlhY2tfQVBJQ19pcnEoKTsKKwkvKgorCSAqIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCkgZXhwZWN0cyB1cyB0byBoYXZlIGRvbmUgaXJxX2VudGVyKCkuCisJICogQmVzaWRlcywgaWYgd2UgZG9uJ3QgdGltZXIgaW50ZXJydXB0cyBpZ25vcmUgdGhlIGdsb2JhbAorCSAqIGludGVycnVwdCBsb2NrLCB3aGljaCBpcyB0aGUgV3JvbmdUaGluZyAodG0pIHRvIGRvLgorCSAqLworI2lmZGVmIENPTkZJR19YODZfNjQKKwlleGl0X2lkbGUoKTsKKyNlbmRpZgorCWlycV9lbnRlcigpOworCWxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KCk7CisJaXJxX2V4aXQoKTsKKworCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Cit9CisKK2ludCBzZXR1cF9wcm9maWxpbmdfdGltZXIodW5zaWduZWQgaW50IG11bHRpcGxpZXIpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBMb2NhbCBBUElDIHN0YXJ0IGFuZCBzaHV0ZG93bgorICovCisKKy8qKgorICogY2xlYXJfbG9jYWxfQVBJQyAtIHNodXRkb3duIHRoZSBsb2NhbCBBUElDCisgKgorICogVGhpcyBpcyBjYWxsZWQsIHdoZW4gYSBDUFUgaXMgZGlzYWJsZWQgYW5kIGJlZm9yZSByZWJvb3RpbmcsIHNvIHRoZSBzdGF0ZSBvZgorICogdGhlIGxvY2FsIEFQSUMgaGFzIG5vIGRhbmdsaW5nIGxlZnRvdmVycy4gQWxzbyB1c2VkIHRvIGNsZWFub3V0IGFueSBCSU9TCisgKiBsZWZ0b3ZlcnMgZHVyaW5nIGJvb3QuCisgKi8KK3ZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKQoreworCWludCBtYXhsdnQ7CisJdTMyIHY7CisKKwkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KKwlpZiAoIWFwaWNfcGh5cykKKwkJcmV0dXJuOworCisJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOworCS8qCisJICogTWFza2luZyBhbiBMVlQgZW50cnkgY2FuIHRyaWdnZXIgYSBsb2NhbCBBUElDIGVycm9yCisJICogaWYgdGhlIHZlY3RvciBpcyB6ZXJvLiBNYXNrIExWVEVSUiBmaXJzdCB0byBwcmV2ZW50IHRoaXMuCisJICovCisJaWYgKG1heGx2dCA+PSAzKSB7CisJCXYgPSBFUlJPUl9BUElDX1ZFQ1RPUjsgLyogYW55IG5vbi16ZXJvIHZlY3RvciB3aWxsIGRvICovCisJCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCX0KKwkvKgorCSAqIENhcmVmdWw6IHdlIGhhdmUgdG8gc2V0IG1hc2tzIG9ubHkgZmlyc3QgdG8gZGVhc3NlcnQKKwkgKiBhbnkgbGV2ZWwtdHJpZ2dlcmVkIHNvdXJjZXMuCisJICovCisJdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJaWYgKG1heGx2dCA+PSA0KSB7CisJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7CisJCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJfQorCisJLyogbGV0cyBub3QgdG91Y2ggdGhpcyBpZiB3ZSBkaWRuJ3QgZnJvYiBpdCAqLworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKFg4Nl9NQ0VfSU5URUwpCisJaWYgKG1heGx2dCA+PSA1KSB7CisJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKKwkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCX0KKyNlbmRpZgorCS8qCisJICogQ2xlYW4gQVBJQyBzdGF0ZSBmb3Igb3RoZXIgT1NzOgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBBUElDX0xWVF9NQVNLRUQpOworCWlmIChtYXhsdnQgPj0gMykKKwkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgQVBJQ19MVlRfTUFTS0VEKTsKKwlpZiAobWF4bHZ0ID49IDQpCisJCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIEludGVncmF0ZWQgQVBJQyAoITgyNDg5RFgpID8gKi8KKwlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7CisJCWlmIChtYXhsdnQgPiAzKQorCQkJLyogQ2xlYXIgRVNSIGR1ZSB0byBQZW50aXVtIGVycmF0YSAzQVAgYW5kIDExQVAgKi8KKwkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCQlhcGljX3JlYWQoQVBJQ19FU1IpOworCX0KK30KKworLyoqCisgKiBkaXNhYmxlX2xvY2FsX0FQSUMgLSBjbGVhciBhbmQgZGlzYWJsZSB0aGUgbG9jYWwgQVBJQworICovCit2b2lkIGRpc2FibGVfbG9jYWxfQVBJQyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWNsZWFyX2xvY2FsX0FQSUMoKTsKKworCS8qCisJICogRGlzYWJsZSBBUElDIChpbXBsaWVzIGNsZWFyaW5nIG9mIHJlZ2lzdGVycworCSAqIGZvciA4MjQ4OURYISkuCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwl2YWx1ZSAmPSB+QVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKKwlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogV2hlbiBMQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCwKKwkgKiByZXN0b3JlIHRoZSBkaXNhYmxlZCBzdGF0ZS4KKwkgKi8KKwlpZiAoZW5hYmxlZF92aWFfYXBpY2Jhc2UpIHsKKwkJdW5zaWduZWQgaW50IGwsIGg7CisKKwkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7CisJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIElmIExpbnV4IGVuYWJsZWQgdGhlIExBUElDIGFnYWluc3QgdGhlIEJJT1MgZGVmYXVsdCBkaXNhYmxlIGl0IGRvd24gYmVmb3JlCisgKiByZS1lbnRlcmluZyB0aGUgQklPUyBvbiBzaHV0ZG93bi4gIE90aGVyd2lzZSB0aGUgQklPUyBtYXkgZ2V0IGNvbmZ1c2VkIGFuZAorICogbm90IHBvd2VyLW9mZi4gIEFkZGl0aW9uYWxseSBjbGVhciBhbGwgTFZUIGVudHJpZXMgYmVmb3JlIGRpc2FibGVfbG9jYWxfQVBJQworICogZm9yIHRoZSBjYXNlIHdoZXJlIExpbnV4IGRpZG4ndCBlbmFibGUgdGhlIExBUElDLgorICovCit2b2lkIGxhcGljX3NodXRkb3duKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY3B1X2hhc19hcGljKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCFlbmFibGVkX3ZpYV9hcGljYmFzZSkKKwkJY2xlYXJfbG9jYWxfQVBJQygpOworCWVsc2UKKyNlbmRpZgorCQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKKworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVGhpcyBpcyB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcmVhbCBsb2NhbCBBUElDLgorICogQ2hlY2sgdGhlc2UgYWdhaW5zdCB5b3VyIGJvYXJkIGlmIHRoZSBDUFVzIGFyZW4ndCBnZXR0aW5nCisgKiBzdGFydGVkIGZvciBubyBhcHBhcmVudCByZWFzb24uCisgKi8KK2ludCBfX2luaXQgdmVyaWZ5X2xvY2FsX0FQSUModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnMCwgcmVnMTsKKworCS8qCisJICogVGhlIHZlcnNpb24gcmVnaXN0ZXIgaXMgcmVhZC1vbmx5IGluIGEgcmVhbCBBUElDLgorCSAqLworCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlIpOworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIFZFUlNJT046ICV4XG4iLCByZWcwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZSLCByZWcwIF4gQVBJQ19MVlJfTUFTSyk7CisJcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzEpOworCisJLyoKKwkgKiBUaGUgdHdvIHZlcnNpb24gcmVhZHMgYWJvdmUgc2hvdWxkIHByaW50IHRoZSBzYW1lCisJICogbnVtYmVycy4gIElmIHRoZSBzZWNvbmQgb25lIGlzIGRpZmZlcmVudCwgdGhlbiB3ZQorCSAqIHBva2UgYXQgYSBub24tQVBJQy4KKwkgKi8KKwlpZiAocmVnMSAhPSByZWcwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHZlcnNpb24gbG9va3MgcmVhc29uYWJseS4KKwkgKi8KKwlyZWcxID0gR0VUX0FQSUNfVkVSU0lPTihyZWcwKTsKKwlpZiAocmVnMSA9PSAweDAwIHx8IHJlZzEgPT0gMHhmZikKKwkJcmV0dXJuIDA7CisJcmVnMSA9IGxhcGljX2dldF9tYXhsdnQoKTsKKwlpZiAocmVnMSA8IDB4MDIgfHwgcmVnMSA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhlIElEIHJlZ2lzdGVyIGlzIHJlYWQvd3JpdGUgaW4gYSByZWFsIEFQSUMuCisJICovCisJcmVnMCA9IGFwaWNfcmVhZChBUElDX0lEKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzApOworCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCBeIEFQSUNfSURfTUFTSyk7CisJcmVnMSA9IGFwaWNfcmVhZChBUElDX0lEKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzEpOworCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCk7CisJaWYgKHJlZzEgIT0gKHJlZzAgXiBBUElDX0lEX01BU0spKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhlIG5leHQgdHdvIGFyZSBqdXN0IHRvIHNlZSBpZiB3ZSBoYXZlIHNhbmUgdmFsdWVzLgorCSAqIFRoZXkncmUgb25seSByZWFsbHkgcmVsZXZhbnQgaWYgd2UncmUgaW4gVmlydHVhbCBXaXJlCisJICogY29tcGF0aWJpbGl0eSBtb2RlLCBidXQgbW9zdCBib3hlcyBhcmUgYW55bW9yZS4KKwkgKi8KKwlyZWcwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgTFZUMDogJXhcbiIsIHJlZzApOworCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQxOiAleFxuIiwgcmVnMSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBzeW5jX0FyYl9JRHMgLSBzeW5jaHJvbml6ZSBBUElDIGJ1cyBhcmJpdHJhdGlvbiBJRHMKKyAqLwordm9pZCBfX2luaXQgc3luY19BcmJfSURzKHZvaWQpCit7CisJLyoKKwkgKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMSBBbmQgbm90CisJICogbmVlZGVkIG9uIEFNRC4KKwkgKi8KKwlpZiAobW9kZXJuX2FwaWMoKSB8fCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpCisJCXJldHVybjsKKworCS8qCisJICogV2FpdCBmb3IgaWRsZS4KKwkgKi8KKwlhcGljX3dhaXRfaWNyX2lkbGUoKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJTeW5jaHJvbml6aW5nIEFyYiBJRHMuXG4iKTsKKwlhcGljX3dyaXRlKEFQSUNfSUNSLCBBUElDX0RFU1RfQUxMSU5DIHwKKwkJCUFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7Cit9CisKKy8qCisgKiBBbiBpbml0aWFsIHNldHVwIG9mIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KKyAqLwordm9pZCBfX2luaXQgaW5pdF9ic3BfQVBJQyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCS8qCisJICogRG9uJ3QgZG8gdGhlIHNldHVwIG5vdyBpZiB3ZSBoYXZlIGEgU01QIEJJT1MgYXMgdGhlCisJICogdGhyb3VnaC1JL08tQVBJQyB2aXJ0dWFsIHdpcmUgbW9kZSBtaWdodCBiZSBhY3RpdmUuCisJICovCisJaWYgKHNtcF9mb3VuZF9jb25maWcgfHwgIWNwdV9oYXNfYXBpYykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgorCSAqLworCWNsZWFyX2xvY2FsX0FQSUMoKTsKKworCS8qCisJICogRW5hYmxlIEFQSUMuCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKKwl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIFRoaXMgYml0IGlzIHJlc2VydmVkIG9uIFA0L1hlb24gYW5kIHNob3VsZCBiZSBjbGVhcmVkICovCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKKwkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKKwkJdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKKwllbHNlCisjZW5kaWYKKwkJdmFsdWUgfD0gQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOworCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOworCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKKwl2YWx1ZSA9IEFQSUNfRE1fTk1JOworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLworCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBsYXBpY19zZXR1cF9lc3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgb2xkdmFsdWUsIHZhbHVlLCBtYXhsdnQ7CisKKwlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlc3JfZGlzYWJsZSkgeworCQkvKgorCQkgKiBTb21ldGhpbmcgdW50cmFjZWFibGUgaXMgY3JlYXRpbmcgYmFkIGludGVycnVwdHMgb24KKwkJICogc2Vjb25kYXJ5IHF1YWRzIC4uLiBmb3IgdGhlIG1vbWVudCwganVzdCBsZWF2ZSB0aGUKKwkJICogRVNSIGRpc2FibGVkIC0gd2UgY2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlCisJCSAqIGVycm9ycyBhbnl3YXkgLSBtYmxpZ2gKKwkJICovCisJCXByaW50ayhLRVJOX0lORk8gIkxlYXZpbmcgRVNSIGRpc2FibGVkLlxuIik7CisJCXJldHVybjsKKwl9CisKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCW9sZHZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKworCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KKwl2YWx1ZSA9IEVSUk9SX0FQSUNfVkVDVE9SOworCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHZhbHVlKTsKKworCS8qCisJICogc3BlYyBzYXlzIGNsZWFyIGVycm9ycyBhZnRlciBlbmFibGluZyB2ZWN0b3IuCisJICovCisJaWYgKG1heGx2dCA+IDMpCisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKwlpZiAodmFsdWUgIT0gb2xkdmFsdWUpCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVTUiB2YWx1ZSBiZWZvcmUgZW5hYmxpbmcgIgorCQkJInZlY3RvcjogMHglMDh4ICBhZnRlcjogMHglMDh4XG4iLAorCQkJb2xkdmFsdWUsIHZhbHVlKTsKK30KKworCisvKioKKyAqIHNldHVwX2xvY2FsX0FQSUMgLSBzZXR1cCB0aGUgbG9jYWwgQVBJQworICovCit2b2lkIF9fY3B1aW5pdCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWludCBpLCBqOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIFBvdW5kIHRoZSBFU1IgcmVhbGx5IGhhcmQgb3ZlciB0aGUgaGVhZCB3aXRoIGEgYmlnIGhhbW1lciAtIG1ibGlnaCAqLworCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkgJiYgZXNyX2Rpc2FibGUpIHsKKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJfQorI2VuZGlmCisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCS8qCisJICogRG91YmxlLWNoZWNrIHdoZXRoZXIgdGhpcyBBUElDIGlzIHJlYWxseSByZWdpc3RlcmVkLgorCSAqIFRoaXMgaXMgbWVhbmluZ2xlc3MgaW4gY2x1c3RlcmVkIGFwaWMgbW9kZSwgc28gd2Ugc2tpcCBpdC4KKwkgKi8KKwlpZiAoIWFwaWNfaWRfcmVnaXN0ZXJlZCgpKQorCQlCVUcoKTsKKworCS8qCisJICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKKwkgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAorCSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCisJICovCisJaW5pdF9hcGljX2xkcigpOworCisJLyoKKwkgKiBTZXQgVGFzayBQcmlvcml0eSB0byAnYWNjZXB0IGFsbCcuIFdlIG5ldmVyIGNoYW5nZSB0aGlzCisJICogbGF0ZXIgb24uCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKKwl2YWx1ZSAmPSB+QVBJQ19UUFJJX01BU0s7CisJYXBpY193cml0ZShBUElDX1RBU0tQUkksIHZhbHVlKTsKKworCS8qCisJICogQWZ0ZXIgYSBjcmFzaCwgd2Ugbm8gbG9uZ2VyIHNlcnZpY2UgdGhlIGludGVycnVwdHMgYW5kIGEgcGVuZGluZworCSAqIGludGVycnVwdCBmcm9tIHByZXZpb3VzIGtlcm5lbCBtaWdodCBzdGlsbCBoYXZlIElTUiBiaXQgc2V0LgorCSAqCisJICogTW9zdCBwcm9iYWJseSBieSBub3cgQ1BVIGhhcyBzZXJ2aWNlZCB0aGF0IHBlbmRpbmcgaW50ZXJydXB0IGFuZAorCSAqIGl0IG1pZ2h0IG5vdCBoYXZlIGRvbmUgdGhlIGFja19BUElDX2lycSgpIGJlY2F1c2UgaXQgdGhvdWdodCwKKwkgKiBpbnRlcnJ1cHQgY2FtZSBmcm9tIGk4MjU5IGFzIEV4dEludC4gTEFQSUMgZGlkIG5vdCBnZXQgRU9JIHNvIGl0CisJICogZG9lcyBub3QgY2xlYXIgdGhlIElTUiBiaXQgYW5kIGNwdSB0aGlua3MgaXQgaGFzIGFscmVhZHkgc2VyaXZjZWQKKwkgKiB0aGUgaW50ZXJydXB0LiBIZW5jZSBhIHZlY3RvciBtaWdodCBnZXQgbG9ja2VkLiBJdCB3YXMgbm90aWNlZAorCSAqIGZvciB0aW1lciBpcnEgKHZlY3RvciAweDMxKS4gSXNzdWUgYW4gZXh0cmEgRU9JIHRvIGNsZWFyIElTUi4KKwkgKi8KKwlmb3IgKGkgPSBBUElDX0lTUl9OUiAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfSVNSICsgaSoweDEwKTsKKwkJZm9yIChqID0gMzE7IGogPj0gMDsgai0tKSB7CisJCQlpZiAodmFsdWUgJiAoMTw8aikpCisJCQkJYWNrX0FQSUNfaXJxKCk7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGFyZSBhbGwgc2V0IHVwLCBlbmFibGUgdGhlIEFQSUMKKwkgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOworCS8qCisJICogRW5hYmxlIEFQSUMKKwkgKi8KKwl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogU29tZSB1bmtub3duIEludGVsIElPL0FQSUMgKG9yIEFQSUMpIGVycmF0YSBpcyBiaXRpbmcgdXMgd2l0aAorCSAqIGNlcnRhaW4gbmV0d29ya2luZyBjYXJkcy4gSWYgaGlnaCBmcmVxdWVuY3kgaW50ZXJydXB0cyBhcmUKKwkgKiBoYXBwZW5pbmcgb24gYSBwYXJ0aWN1bGFyIElPQVBJQyBwaW4sIHBsdXMgdGhlIElPQVBJQyByb3V0aW5nCisJICogZW50cnkgaXMgbWFza2VkL3VubWFza2VkIGF0IGEgaGlnaCByYXRlIGFzIHdlbGwgdGhlbiBzb29uZXIgb3IKKwkgKiBsYXRlciBJT0FQSUMgbGluZSBnZXRzICdzdHVjaycsIG5vIG1vcmUgaW50ZXJydXB0cyBhcmUgcmVjZWl2ZWQKKwkgKiBmcm9tIHRoZSBkZXZpY2UuIElmIGZvY3VzIENQVSBpcyBkaXNhYmxlZCB0aGVuIHRoZSBoYW5nIGdvZXMKKwkgKiBhd2F5LCBvaCB3ZWxsIDotKAorCSAqCisJICogWyBUaGlzIGJ1ZyBjYW4gYmUgcmVwcm9kdWNlZCBlYXNpbHkgd2l0aCBhIGxldmVsLXRyaWdnZXJlZAorCSAqICAgUENJIE5lMjAwMCBuZXR3b3JraW5nIGNhcmRzIGFuZCBQSUkvUElJSSBwcm9jZXNzb3JzLCBkdWFsCisJICogICBCWCBjaGlwc2V0LiBdCisJICovCisJLyoKKwkgKiBBY3R1YWxseSBkaXNhYmxpbmcgdGhlIGZvY3VzIENQVSBjaGVjayBqdXN0IG1ha2VzIHRoZSBoYW5nIGxlc3MKKwkgKiBmcmVxdWVudCBhcyBpdCBtYWtlcyB0aGUgaW50ZXJydXB0IGRpc3RyaWJ1dG9uIG1vZGVsIGJlIG1vcmUKKwkgKiBsaWtlIExSVSB0aGFuIE1SVSAodGhlIHNob3J0LXRlcm0gbG9hZCBpcyBtb3JlIGV2ZW4gYWNyb3NzIENQVXMpLgorCSAqIFNlZSBhbHNvIHRoZSBjb21tZW50IGluIGVuZF9sZXZlbF9pb2FwaWNfaXJxKCkuICAtLW1hY3JvCisJICovCisKKwkvKgorCSAqIC0gZW5hYmxlIGZvY3VzIHByb2Nlc3NvciAoYml0PT0wKQorCSAqIC0gNjRiaXQgbW9kZSBhbHdheXMgdXNlIHByb2Nlc3NvciBmb2N1cworCSAqICAgc28gbm8gbmVlZCB0byBzZXQgaXQKKwkgKi8KKwl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOworI2VuZGlmCisKKwkvKgorCSAqIFNldCBzcHVyaW91cyBJUlEgdmVjdG9yCisJICovCisJdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7CisJYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKKworCS8qCisJICogU2V0IHVwIExWVDAsIExWVDE6CisJICoKKwkgKiBzZXQgdXAgdGhyb3VnaC1sb2NhbC1BUElDIG9uIHRoZSBCUCdzIExJTlQwLiBUaGlzIGlzIG5vdAorCSAqIHN0cmljdGx5IG5lY2Vzc2FyeSBpbiBwdXJlIHN5bW1ldHJpYy1JTyBtb2RlLCBidXQgc29tZXRpbWVzCisJICogd2UgZGVsZWdhdGUgaW50ZXJydXB0cyB0byB0aGUgODI1OUEuCisJICovCisJLyoKKwkgKiBUT0RPOiBzZXQgdXAgdGhyb3VnaC1sb2NhbC1BUElDIGZyb20gdGhyb3VnaC1JL08tQVBJQz8gLS1tYWNybworCSAqLworCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCkgJiBBUElDX0xWVF9NQVNLRUQ7CisJaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkgJiYgKHBpY19tb2RlIHx8ICF2YWx1ZSkpIHsKKwkJdmFsdWUgPSBBUElDX0RNX0VYVElOVDsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZW5hYmxlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAorCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBBUElDX0RNX0VYVElOVCB8IEFQSUNfTFZUX01BU0tFRDsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFza2VkIEV4dElOVCBvbiBDUFUjJWRcbiIsCisJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl9CisJYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKKworCS8qCisJICogb25seSB0aGUgQlAgc2hvdWxkIHNlZSB0aGUgTElOVDEgTk1JIHNpZ25hbCwgb2J2aW91c2x5LgorCSAqLworCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQl2YWx1ZSA9IEFQSUNfRE1fTk1JOworCWVsc2UKKwkJdmFsdWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsKKwlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkJCS8qIDgyNDg5RFggKi8KKwkJdmFsdWUgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOworCisJcHJlZW1wdF9lbmFibGUoKTsKK30KKwordm9pZCBfX2NwdWluaXQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKK3sKKwlsYXBpY19zZXR1cF9lc3IoKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwl7CisJCXVuc2lnbmVkIGludCB2YWx1ZTsKKwkJLyogRGlzYWJsZSB0aGUgbG9jYWwgYXBpYyB0aW1lciAqLworCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVFQpOworCQl2YWx1ZSB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKKwkJYXBpY193cml0ZShBUElDX0xWVFQsIHZhbHVlKTsKKwl9CisjZW5kaWYKKworCXNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKE5VTEwpOworCWFwaWNfcG1fYWN0aXZhdGUoKTsKK30KKworI2lmZGVmIEhBVkVfWDJBUElDCit2b2lkIGNoZWNrX3gyYXBpYyh2b2lkKQoreworCWludCBtc3IsIG1zcjI7CisKKwlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKKworCWlmIChtc3IgJiBYMkFQSUNfRU5BQkxFKSB7CisJCXByaW50aygieDJhcGljIGVuYWJsZWQgYnkgQklPUywgc3dpdGNoaW5nIHRvIHgyYXBpYyBvcHNcbiIpOworCQl4MmFwaWNfcHJlZW5hYmxlZCA9IHgyYXBpYyA9IDE7CisJCWFwaWNfb3BzID0gJngyYXBpY19vcHM7CisJfQorfQorCit2b2lkIGVuYWJsZV94MmFwaWModm9pZCkKK3sKKwlpbnQgbXNyLCBtc3IyOworCisJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciwgbXNyMik7CisJaWYgKCEobXNyICYgWDJBUElDX0VOQUJMRSkpIHsKKwkJcHJpbnRrKCJFbmFibGluZyB4MmFwaWNcbiIpOworCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyIHwgWDJBUElDX0VOQUJMRSwgMCk7CisJfQorfQorCit2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY3B1X2hhc194MmFwaWMpCisJCXJldHVybjsKKworCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgZGlzYWJsZV94MmFwaWMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIlNraXBwZWQgZW5hYmxpbmcgeDJhcGljIGFuZCBJbnRlcnJ1cHQtcmVtYXBwaW5nICIKKwkJICAgICAgICJiZWNhdXNlIG9mIG5veDJhcGljXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykKKwkJcGFuaWMoIkJpb3MgYWxyZWFkeSBlbmFibGVkIHgyYXBpYywgY2FuJ3QgZW5mb3JjZSBub3gyYXBpYyIpOworCisJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBza2lwX2lvYXBpY19zZXR1cCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgorCQkgICAgICAgImJlY2F1c2Ugb2Ygc2tpcHBpbmcgaW8tYXBpYyBzZXR1cFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBkbWFyX3RhYmxlX2luaXQoKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJkbWFyX3RhYmxlX2luaXQoKSBmYWlsZWQgd2l0aCAlZDpcbiIsIHJldCk7CisKKwkJaWYgKHgyYXBpY19wcmVlbmFibGVkKQorCQkJcGFuaWMoIngyYXBpYyBlbmFibGVkIGJ5IGJpb3MuIEJ1dCBJUiBlbmFibGluZyBmYWlsZWQiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJOb3QgZW5hYmxpbmcgeDJhcGljLEludHItcmVtYXBwaW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltYXNrXzgyNTlBKCk7CisKKwlyZXQgPSBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU2F2aW5nIElPLUFQSUMgc3RhdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlbmQ7CisJfQorCisJcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOworCisJaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7CisJfQorCisJaWYgKHJldCkKKwkJZ290byBlbmRfcmVzdG9yZTsKKworCWlmICgheDJhcGljKSB7CisJCXgyYXBpYyA9IDE7CisJCWFwaWNfb3BzID0gJngyYXBpY19vcHM7CisJCWVuYWJsZV94MmFwaWMoKTsKKwl9CisKK2VuZF9yZXN0b3JlOgorCWlmIChyZXQpCisJCS8qCisJCSAqIElSIGVuYWJsaW5nIGZhaWxlZAorCQkgKi8KKwkJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7CisJZWxzZQorCQlyZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKHgyYXBpY19wcmVlbmFibGVkKTsKKworZW5kOgorCXVubWFza184MjU5QSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWlmICghcmV0KSB7CisJCWlmICgheDJhcGljX3ByZWVuYWJsZWQpCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIkVuYWJsZWQgeDJhcGljIGFuZCBpbnRlcnJ1cHQtcmVtYXBwaW5nXG4iKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJGYWlsZWQgdG8gZW5hYmxlIEludGVycnVwdC1yZW1hcHBpbmcgYW5kIHgyYXBpY1xuIik7CisjZWxzZQorCWlmICghY3B1X2hhc194MmFwaWMpCisJCXJldHVybjsKKworCWlmICh4MmFwaWNfcHJlZW5hYmxlZCkKKwkJcGFuaWMoIngyYXBpYyBlbmFibGVkIHByaW9yIE9TIGhhbmRvdmVyLCIKKwkJICAgICAgIiBlbmFibGUgQ09ORklHX0lOVFJfUkVNQVAiKTsKKworCXByaW50ayhLRVJOX0lORk8gIkVuYWJsZSBDT05GSUdfSU5UUl9SRU1BUCBmb3IgZW5hYmxpbmcgaW50ci1yZW1hcHBpbmcgIgorCSAgICAgICAiIGFuZCB4MmFwaWNcbiIpOworI2VuZGlmCisKKwlyZXR1cm47Cit9CisjZW5kaWYgLyogSEFWRV9YMkFQSUMgKi8KKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qCisgKiBEZXRlY3QgYW5kIGVuYWJsZSBsb2NhbCBBUElDcyBvbiBub24tU01QIGJvYXJkcy4KKyAqIE9yaWdpbmFsIGNvZGUgd3JpdHRlbiBieSBLZWlyIEZyYXNlci4KKyAqIE9uIEFNRDY0IHdlIHRydXN0IHRoZSBCSU9TIC0gaWYgaXQgc2F5cyBubyBBUElDIGl0IGlzIGxpa2VseQorICogbm90IGNvcnJlY3RseSBzZXQgdXAgKHVzdWFsbHkgdGhlIEFQSUMgdGltZXIgd29uJ3Qgd29yayBldGMuKQorICovCitzdGF0aWMgaW50IF9faW5pdCBkZXRlY3RfaW5pdF9BUElDKHZvaWQpCit7CisJaWYgKCFjcHVfaGFzX2FwaWMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbG9jYWwgQVBJQyBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IDA7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorLyoKKyAqIERldGVjdCBhbmQgaW5pdGlhbGl6ZSBBUElDCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGRldGVjdF9pbml0X0FQSUModm9pZCkKK3sKKwl1MzIgaCwgbCwgZmVhdHVyZXM7CisKKwkvKiBEaXNhYmxlZCBieSBrZXJuZWwgb3B0aW9uPyAqLworCWlmIChkaXNhYmxlX2FwaWMpCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJaWYgKChib290X2NwdV9kYXRhLng4NiA9PSA2ICYmIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID4gMSkgfHwKKwkJICAgIChib290X2NwdV9kYXRhLng4NiA9PSAxNSkpCisJCQlicmVhazsKKwkJZ290byBub19hcGljOworCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUgfHwKKwkJICAgIChib290X2NwdV9kYXRhLng4NiA9PSA1ICYmIGNwdV9oYXNfYXBpYykpCisJCQlicmVhazsKKwkJZ290byBub19hcGljOworCWRlZmF1bHQ6CisJCWdvdG8gbm9fYXBpYzsKKwl9CisKKwlpZiAoIWNwdV9oYXNfYXBpYykgeworCQkvKgorCQkgKiBPdmVyLXJpZGUgQklPUyBhbmQgdHJ5IHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQyBvbmx5IGlmCisJCSAqICJsYXBpYyIgc3BlY2lmaWVkLgorCQkgKi8KKwkJaWYgKCFmb3JjZV9lbmFibGVfbG9jYWxfYXBpYykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiTG9jYWwgQVBJQyBkaXNhYmxlZCBieSBCSU9TIC0tICIKKwkJCSAgICAgICAieW91IGNhbiBlbmFibGUgaXQgd2l0aCBcImxhcGljXCJcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qCisJCSAqIFNvbWUgQklPU2VzIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMgaW4gdGhlIEFQSUNfQkFTRQorCQkgKiBNU1IuIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBpbiBzb2Z0d2FyZSBmb3IgSW50ZWwgUDYgb3IgbGF0ZXIKKwkJICogYW5kIEFNRCBLNyAoTW9kZWwgPiAxKSBvciBsYXRlci4KKwkJICovCisJCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwkJaWYgKCEobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiTG9jYWwgQVBJQyBkaXNhYmxlZCBieSBCSU9TIC0tIHJlZW5hYmxpbmcuXG4iKTsKKwkJCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7CisJCQlsIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSB8IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisJCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CisJCQllbmFibGVkX3ZpYV9hcGljYmFzZSA9IDE7CisJCX0KKwl9CisJLyoKKwkgKiBUaGUgQVBJQyBmZWF0dXJlIGJpdCBzaG91bGQgbm93IGJlIGVuYWJsZWQKKwkgKiBpbiBgY3B1aWQnCisJICovCisJZmVhdHVyZXMgPSBjcHVpZF9lZHgoMSk7CisJaWYgKCEoZmVhdHVyZXMgJiAoMSA8PCBYODZfRkVBVFVSRV9BUElDKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGQgbm90IGVuYWJsZSBBUElDIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJc2V0X2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FQSUMpOworCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOworCisJLyogVGhlIEJJT1MgbWF5IGhhdmUgc2V0IHVwIHRoZSBBUElDIGF0IHNvbWUgb3RoZXIgYWRkcmVzcyAqLworCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwlpZiAobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkKKwkJbXBfbGFwaWNfYWRkciA9IGwgJiBNU1JfSUEzMl9BUElDQkFTRV9CQVNFOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgYW5kIGVuYWJsZWQgbG9jYWwgQVBJQyFcbiIpOworCisJYXBpY19wbV9hY3RpdmF0ZSgpOworCisJcmV0dXJuIDA7CisKK25vX2FwaWM6CisJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbG9jYWwgQVBJQyBwcmVzZW50IG9yIGhhcmR3YXJlIGRpc2FibGVkXG4iKTsKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfbGFwaWNfbWFwcGluZyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOworCisJLyoKKwkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIGdvIG91dAorCSAqIDogaXQgbWVhbnMgdGhlcmUgaXMgbm8gbXBhdGFibGUgYW5kIE1BRFQKKwkgKi8KKwlpZiAoIXNtcF9mb3VuZF9jb25maWcpCisJCXJldHVybjsKKworCXBoeXNfYWRkciA9IG1wX2xhcGljX2FkZHI7CisKKwlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgcGh5c19hZGRyKTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXBwZWQgQVBJQyB0byAlMTZseCAoJTE2bHgpXG4iLAorCQkgICAgQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCisJLyoKKwkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCisJICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KKwkgKi8KKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKK30KKyNlbmRpZgorCisvKioKKyAqIGluaXRfYXBpY19tYXBwaW5ncyAtIGluaXRpYWxpemUgQVBJQyBtYXBwaW5ncworICovCit2b2lkIF9faW5pdCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCkKK3sKKyNpZmRlZiBIQVZFX1gyQVBJQworCWlmICh4MmFwaWMpIHsKKwkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKworCS8qCisJICogSWYgbm8gbG9jYWwgQVBJQyBjYW4gYmUgZm91bmQgdGhlbiBzZXQgdXAgYSBmYWtlIGFsbAorCSAqIHplcm9lcyBwYWdlIHRvIHNpbXVsYXRlIHRoZSBsb2NhbCBBUElDIGFuZCBhbm90aGVyCisJICogb25lIGZvciB0aGUgSU8tQVBJQy4KKwkgKi8KKwlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgZGV0ZWN0X2luaXRfQVBJQygpKSB7CisJCWFwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CisJCWFwaWNfcGh5cyA9IF9fcGEoYXBpY19waHlzKTsKKwl9IGVsc2UKKwkJYXBpY19waHlzID0gbXBfbGFwaWNfYWRkcjsKKworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhcGljX3BoeXMpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUwOGx4ICglMDhseClcbiIsCisJCQkJQVBJQ19CQVNFLCBhcGljX3BoeXMpOworCisJLyoKKwkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCisJICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KKwkgKi8KKwlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID09IC0xVSkKKwkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Cit9CisKKy8qCisgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFuZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKKyAqIGEgVVAga2VybmVsLgorICovCitpbnQgYXBpY192ZXJzaW9uW01BWF9BUElDU107CisKK2ludCBfX2luaXQgQVBJQ19pbml0X3VuaXByb2Nlc3Nvcih2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAoZGlzYWJsZV9hcGljKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkFwaWMgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghY3B1X2hhc19hcGljKSB7CisJCWRpc2FibGVfYXBpYyA9IDE7CisJCXByaW50ayhLRVJOX0lORk8gIkFwaWMgZGlzYWJsZWQgYnkgQklPU1xuIik7CisJCXJldHVybiAtMTsKKwl9CisjZWxzZQorCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiAhY3B1X2hhc19hcGljKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIENvbXBsYWluIGlmIHRoZSBCSU9TIHByZXRlbmRzIHRoZXJlIGlzIG9uZS4KKwkgKi8KKwlpZiAoIWNwdV9oYXNfYXBpYyAmJgorCSAgICBBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIGxvY2FsIEFQSUMgMHgleCBub3QgZGV0ZWN0ZWQhLi4uXG4iLAorCQkgICAgICAgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKwkJY2xlYXJfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7CisJCXJldHVybiAtMTsKKwl9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfWDJBUElDCisJZW5hYmxlX0lSX3gyYXBpYygpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNldHVwX2FwaWNfcm91dGluZygpOworI2VuZGlmCisKKwl2ZXJpZnlfbG9jYWxfQVBJQygpOworCWNvbm5lY3RfYnNwX0FQSUMoKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlhcGljX3dyaXRlKEFQSUNfSUQsIFNFVF9BUElDX0lEKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkpOworI2Vsc2UKKwkvKgorCSAqIEhhY2s6IEluIGNhc2Ugb2Yga2R1bXAsIGFmdGVyIGEgY3Jhc2gsIGtlcm5lbCBtaWdodCBiZSBib290aW5nCisJICogb24gYSBjcHUgd2l0aCBub24temVybyBsYXBpYyBpZC4gQnV0IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCisJICovCisjIGlmZGVmIENPTkZJR19DUkFTSF9EVU1QCisJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7CisjIGVuZGlmCisjZW5kaWYKKwlwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgJnBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwlzZXR1cF9sb2NhbF9BUElDKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyoKKwkgKiBOb3cgZW5hYmxlIElPLUFQSUNzLCBhY3R1YWxseSBjYWxsIGNsZWFyX0lPX0FQSUMKKwkgKiBXZSBuZWVkIGNsZWFyX0lPX0FQSUMgYmVmb3JlIGVuYWJsaW5nIHZlY3RvciBvbiBCUAorCSAqLworCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKKwkJZW5hYmxlX0lPX0FQSUMoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJaWYgKCFzbXBfZm91bmRfY29uZmlnIHx8IHNraXBfaW9hcGljX3NldHVwIHx8ICFucl9pb2FwaWNzKQorI2VuZGlmCisJCWxvY2FsaXNlX25taV93YXRjaGRvZygpOworCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlpZiAoc21wX2ZvdW5kX2NvbmZpZyAmJiAhc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKKwkJc2V0dXBfSU9fQVBJQygpOworIyBpZmRlZiBDT05GSUdfWDg2XzY0CisJZWxzZQorCQlucl9pb2FwaWNzID0gMDsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNldHVwX2Jvb3RfQVBJQ19jbG9jaygpOworCWNoZWNrX25taV93YXRjaGRvZygpOworI2Vsc2UKKwlzZXR1cF9ib290X2Nsb2NrKCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKgorICogTG9jYWwgQVBJQyBpbnRlcnJ1cHRzCisgKi8KKworLyoKKyAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBfbmV2ZXJfIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKKyAqLwordm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiB2OworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWV4aXRfaWRsZSgpOworI2VuZGlmCisJaXJxX2VudGVyKCk7CisJLyoKKwkgKiBDaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIHNwdXJpb3VzIGludGVycnVwdCBhbmQgQUNLIGl0CisJICogaWYgaXQgaXMgYSB2ZWN0b3JlZCBvbmUuICBKdXN0IGluIGNhc2UuLi4KKwkgKiBTcHVyaW91cyBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgQUNLZWQuCisJICovCisJdiA9IGFwaWNfcmVhZChBUElDX0lTUiArICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiB+MHgxZikgPj4gMSkpOworCWlmICh2ICYgKDEgPDwgKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgxZikpKQorCQlhY2tfQVBJQ19pcnEoKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlhZGRfcGRhKGlycV9zcHVyaW91c19jb3VudCwgMSk7CisjZWxzZQorCS8qIHNlZSBzdy1kZXYtbWFuIHZvbCAzLCBjaGFwdGVyIDcuNC4xMy41ICovCisJcHJpbnRrKEtFUk5fSU5GTyAic3B1cmlvdXMgQVBJQyBpbnRlcnJ1cHQgb24gQ1BVIyVkLCAiCisJICAgICAgICJzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfc3B1cmlvdXNfY291bnQrKzsKKyNlbmRpZgorCWlycV9leGl0KCk7Cit9CisKKy8qCisgKiBUaGlzIGludGVycnVwdCBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQorICovCit2b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIHYsIHYxOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWV4aXRfaWRsZSgpOworI2VuZGlmCisJaXJxX2VudGVyKCk7CisJLyogRmlyc3QgdGlja2xlIHRoZSBoYXJkd2FyZSwgb25seSB0aGVuIHJlcG9ydCB3aGF0IHdlbnQgb24uIC0tIFJFVyAqLworCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCXYxID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKwlhY2tfQVBJQ19pcnEoKTsKKwlhdG9taWNfaW5jKCZpcnFfZXJyX2NvdW50KTsKKworCS8qIEhlcmUgaXMgd2hhdCB0aGUgQVBJQyBlcnJvciBiaXRzIG1lYW46CisJICAgMDogU2VuZCBDUyBlcnJvcgorCSAgIDE6IFJlY2VpdmUgQ1MgZXJyb3IKKwkgICAyOiBTZW5kIGFjY2VwdCBlcnJvcgorCSAgIDM6IFJlY2VpdmUgYWNjZXB0IGVycm9yCisJICAgNDogUmVzZXJ2ZWQKKwkgICA1OiBTZW5kIGlsbGVnYWwgdmVjdG9yCisJICAgNjogUmVjZWl2ZWQgaWxsZWdhbCB2ZWN0b3IKKwkgICA3OiBJbGxlZ2FsIHJlZ2lzdGVyIGFkZHJlc3MKKwkqLworCXByaW50ayhLRVJOX0RFQlVHICJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJ4KCUwMngpXG4iLAorCQlzbXBfcHJvY2Vzc29yX2lkKCksIHYgLCB2MSk7CisJaXJxX2V4aXQoKTsKK30KKworLyoqCisgKiBjb25uZWN0X2JzcF9BUElDIC0gYXR0YWNoIHRoZSBBUElDIHRvIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCisgKi8KK3ZvaWQgX19pbml0IGNvbm5lY3RfYnNwX0FQSUModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKHBpY19tb2RlKSB7CisJCS8qCisJCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCisJCSAqLworCQljbGVhcl9sb2NhbF9BUElDKCk7CisJCS8qCisJCSAqIFBJQyBtb2RlLCBlbmFibGUgQVBJQyBtb2RlIGluIHRoZSBJTUNSLCBpLmUuICBjb25uZWN0IEJTUCdzCisJCSAqIGxvY2FsIEFQSUMgdG8gSU5UIGFuZCBOTUkgbGluZXMuCisJCSAqLworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJsZWF2aW5nIFBJQyBtb2RlLCAiCisJCQkJImVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOworCQlvdXRiKDB4NzAsIDB4MjIpOworCQlvdXRiKDB4MDEsIDB4MjMpOworCX0KKyNlbmRpZgorCWVuYWJsZV9hcGljX21vZGUoKTsKK30KKworLyoqCisgKiBkaXNjb25uZWN0X2JzcF9BUElDIC0gZGV0YWNoIHRoZSBBUElDIGZyb20gdGhlIGludGVycnVwdCBzeXN0ZW0KKyAqIEB2aXJ0X3dpcmVfc2V0dXA6CWluZGljYXRlcywgd2hldGhlciB2aXJ0dWFsIHdpcmUgbW9kZSBpcyBzZWxlY3RlZAorICoKKyAqIFZpcnR1YWwgd2lyZSBtb2RlIGlzIG5lY2Vzc2FyeSB0byBkZWxpdmVyIGxlZ2FjeSBpbnRlcnJ1cHRzIGV2ZW4gd2hlbiB0aGUKKyAqIEFQSUMgaXMgZGlzYWJsZWQuCisgKi8KK3ZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyhpbnQgdmlydF93aXJlX3NldHVwKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAocGljX21vZGUpIHsKKwkJLyoKKwkJICogUHV0IHRoZSBib2FyZCBiYWNrIGludG8gUElDIG1vZGUgKGhhcyBhbiBlZmZlY3Qgb25seSBvbgorCQkgKiBjZXJ0YWluIG9sZGVyIGJvYXJkcykuICBOb3RlIHRoYXQgQVBJQyBpbnRlcnJ1cHRzLCBpbmNsdWRpbmcKKwkJICogSVBJcywgd29uJ3Qgd29yayBiZXlvbmQgdGhpcyBwb2ludCEgIFRoZSBvbmx5IGV4Y2VwdGlvbiBhcmUKKwkJICogSU5JVCBJUElzLgorCQkgKi8KKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZGlzYWJsaW5nIEFQSUMgbW9kZSwgIgorCQkJCSJlbnRlcmluZyBQSUMgbW9kZS5cbiIpOworCQlvdXRiKDB4NzAsIDB4MjIpOworCQlvdXRiKDB4MDAsIDB4MjMpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwkvKiBHbyBiYWNrIHRvIFZpcnR1YWwgV2lyZSBjb21wYXRpYmlsaXR5IG1vZGUgKi8KKworCS8qIEZvciB0aGUgc3B1cmlvdXMgaW50ZXJydXB0IHVzZSB2ZWN0b3IgRiwgYW5kIGVuYWJsZSBpdCAqLworCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7CisJdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7CisJdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKKwl2YWx1ZSB8PSAweGY7CisJYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKKworCWlmICghdmlydF93aXJlX3NldHVwKSB7CisJCS8qCisJCSAqIEZvciBMVlQwIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLAorCQkgKiBleHRlcm5hbCBhbmQgZW5hYmxlZAorCQkgKi8KKwkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwkJdmFsdWUgJj0gfihBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKKwkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKKwkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOworCQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7CisJCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX0VYVElOVCk7CisJCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWx1ZSk7CisJfSBlbHNlIHsKKwkJLyogRGlzYWJsZSBMVlQwICovCisJCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOworCX0KKworCS8qCisJICogRm9yIExWVDEgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsCisJICogbm1pIGFuZCBlbmFibGVkCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKKwl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAorCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAorCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiB8IEFQSUNfTFZUX01BU0tFRCk7CisJdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOworCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX05NSSk7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKK30KKwordm9pZCBfX2NwdWluaXQgZ2VuZXJpY19wcm9jZXNzb3JfaW5mbyhpbnQgYXBpY2lkLCBpbnQgdmVyc2lvbikKK3sKKwlpbnQgY3B1OworCWNwdW1hc2tfdCB0bXBfbWFwOworCisJLyoKKwkgKiBWYWxpZGF0ZSB2ZXJzaW9uCisJICovCisJaWYgKHZlcnNpb24gPT0gMHgwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgYnVnLCBBUElDIHZlcnNpb24gaXMgMCBmb3IgQ1BVIyVkISAiCisJCQkJImZpeGluZyB1cCB0byAweDEwLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCisJCQkJdmVyc2lvbik7CisJCXZlcnNpb24gPSAweDEwOworCX0KKwlhcGljX3ZlcnNpb25bYXBpY2lkXSA9IHZlcnNpb247CisKKwlpZiAobnVtX3Byb2Nlc3NvcnMgPj0gTlJfQ1BVUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBOUl9DUFVTIGxpbWl0IG9mICVpIHJlYWNoZWQuIgorCQkJIiAgUHJvY2Vzc29yIGlnbm9yZWQuXG4iLCBOUl9DUFVTKTsKKwkJcmV0dXJuOworCX0KKworCW51bV9wcm9jZXNzb3JzKys7CisJY3B1c19jb21wbGVtZW50KHRtcF9tYXAsIGNwdV9wcmVzZW50X21hcCk7CisJY3B1ID0gZmlyc3RfY3B1KHRtcF9tYXApOworCisJcGh5c2lkX3NldChhcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwlpZiAoYXBpY2lkID09IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkgeworCQkvKgorCQkgKiB4ODZfYmlvc19jcHVfYXBpY2lkIGlzIHJlcXVpcmVkIHRvIGhhdmUgcHJvY2Vzc29ycyBsaXN0ZWQKKwkJICogaW4gc2FtZSBvcmRlciBhcyBsb2dpY2FsIGNwdSBudW1iZXJzLiBIZW5jZSB0aGUgZmlyc3QKKwkJICogZW50cnkgaXMgQlNQLCBhbmQgc28gb24uCisJCSAqLworCQljcHUgPSAwOworCX0KKwlpZiAoYXBpY2lkID4gbWF4X3BoeXNpY2FsX2FwaWNpZCkKKwkJbWF4X3BoeXNpY2FsX2FwaWNpZCA9IGFwaWNpZDsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKgorCSAqIFdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3dpdGNoIHRvIGJpZ3NtcCB3aGVuIENPTkZJR19IT1RQTFVHX0NQVT15CisJICogYnV0IHdlIG5lZWQgdG8gd29yayBvdGhlciBkZXBlbmRlbmNpZXMgbGlrZSBTTVBfU1VTUEVORCBldGMKKwkgKiBiZWZvcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IHNvbWUgY29uZnVzaW9uLgorCSAqIGlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IG51bV9wcm9jZXNzb3JzID4gOCkKKwkgKiAgICAgICAtIEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KKwkgKi8KKwlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KSB7CisJCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJCWlmICghQVBJQ19YQVBJQyh2ZXJzaW9uKSkgeworCQkJCWRlZl90b19iaWdzbXAgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogSWYgUDQgYW5kIGFib3ZlIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQkJZGVmX3RvX2JpZ3NtcCA9IDE7CisJCX0KKwl9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwkvKiBhcmUgd2UgYmVpbmcgY2FsbGVkIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwPyAqLworCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCkpIHsKKwkJdTE2ICpjcHVfdG9fYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpOworCQl1MTYgKmJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOworCisJCWNwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKKwkJYmlvc19jcHVfYXBpY2lkW2NwdV0gPSBhcGljaWQ7CisJfSBlbHNlIHsKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKKwkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0gYXBpY2lkOworCX0KKyNlbmRpZgorCisJY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOworCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAoraW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCXJldHVybiByZWFkX2FwaWNfaWQoKTsKK30KKyNlbmRpZgorCisvKgorICogUG93ZXIgbWFuYWdlbWVudAorICovCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBzdHJ1Y3QgeworCS8qCisJICogJ2FjdGl2ZScgaXMgdHJ1ZSBpZiB0aGUgbG9jYWwgQVBJQyB3YXMgZW5hYmxlZCBieSB1cyBhbmQKKwkgKiBub3QgdGhlIEJJT1M7IHRoaXMgc2lnbmlmaWVzIHRoYXQgd2UgYXJlIGFsc28gcmVzcG9uc2libGUKKwkgKiBmb3IgZGlzYWJsaW5nIGl0IGJlZm9yZSBlbnRlcmluZyBhcG0vYWNwaSBzdXNwZW5kCisJICovCisJaW50IGFjdGl2ZTsKKwkvKiByL3cgYXBpYyBmaWVsZHMgKi8KKwl1bnNpZ25lZCBpbnQgYXBpY19pZDsKKwl1bnNpZ25lZCBpbnQgYXBpY190YXNrcHJpOworCXVuc2lnbmVkIGludCBhcGljX2xkcjsKKwl1bnNpZ25lZCBpbnQgYXBpY19kZnI7CisJdW5zaWduZWQgaW50IGFwaWNfc3BpdjsKKwl1bnNpZ25lZCBpbnQgYXBpY19sdnR0OworCXVuc2lnbmVkIGludCBhcGljX2x2dHBjOworCXVuc2lnbmVkIGludCBhcGljX2x2dDA7CisJdW5zaWduZWQgaW50IGFwaWNfbHZ0MTsKKwl1bnNpZ25lZCBpbnQgYXBpY19sdnRlcnI7CisJdW5zaWduZWQgaW50IGFwaWNfdG1pY3Q7CisJdW5zaWduZWQgaW50IGFwaWNfdGRjcjsKKwl1bnNpZ25lZCBpbnQgYXBpY190aG1yOworfSBhcGljX3BtX3N0YXRlOworCitzdGF0aWMgaW50IGxhcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG1heGx2dDsKKworCWlmICghYXBpY19wbV9zdGF0ZS5hY3RpdmUpCisJCXJldHVybiAwOworCisJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOworCisJYXBpY19wbV9zdGF0ZS5hcGljX2lkID0gYXBpY19yZWFkKEFQSUNfSUQpOworCWFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7CisJYXBpY19wbV9zdGF0ZS5hcGljX2xkciA9IGFwaWNfcmVhZChBUElDX0xEUik7CisJYXBpY19wbV9zdGF0ZS5hcGljX2RmciA9IGFwaWNfcmVhZChBUElDX0RGUik7CisJYXBpY19wbV9zdGF0ZS5hcGljX3NwaXYgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0dCA9IGFwaWNfcmVhZChBUElDX0xWVFQpOworCWlmIChtYXhsdnQgPj0gNCkKKwkJYXBpY19wbV9zdGF0ZS5hcGljX2x2dHBjID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOworCWFwaWNfcG1fc3RhdGUuYXBpY19sdnQwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJYXBpY19wbV9zdGF0ZS5hcGljX2x2dDEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0ZXJyID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfdG1pY3QgPSBhcGljX3JlYWQoQVBJQ19UTUlDVCk7CisJYXBpY19wbV9zdGF0ZS5hcGljX3RkY3IgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKKwlpZiAobWF4bHZ0ID49IDUpCisJCWFwaWNfcG1fc3RhdGUuYXBpY190aG1yID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7CisjZW5kaWYKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFwaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IGwsIGg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbWF4bHZ0OworCisJaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKKwkJcmV0dXJuIDA7CisKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyNpZmRlZiBIQVZFX1gyQVBJQworCWlmICh4MmFwaWMpCisJCWVuYWJsZV94MmFwaWMoKTsKKwllbHNlCisjZW5kaWYKKwl7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgQVBJQ0JBU0UgcG9pbnRzIHRvIHRoZSByaWdodCBhZGRyZXNzCisJCSAqCisJCSAqIEZJWE1FISBUaGlzIHdpbGwgYmUgd3JvbmcgaWYgd2UgZXZlciBzdXBwb3J0IHN1c3BlbmQgb24KKwkJICogU01QISBXZSdsbCBuZWVkIHRvIGRvIHRoaXMgYXMgcGFydCBvZiB0aGUgQ1BVIHJlc3RvcmUhCisJCSAqLworCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CisJCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7CisJCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgbXBfbGFwaWNfYWRkcjsKKwkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCX0KKworCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEVSUk9SX0FQSUNfVkVDVE9SIHwgQVBJQ19MVlRfTUFTS0VEKTsKKwlhcGljX3dyaXRlKEFQSUNfSUQsIGFwaWNfcG1fc3RhdGUuYXBpY19pZCk7CisJYXBpY193cml0ZShBUElDX0RGUiwgYXBpY19wbV9zdGF0ZS5hcGljX2Rmcik7CisJYXBpY193cml0ZShBUElDX0xEUiwgYXBpY19wbV9zdGF0ZS5hcGljX2xkcik7CisJYXBpY193cml0ZShBUElDX1RBU0tQUkksIGFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpKTsKKwlhcGljX3dyaXRlKEFQSUNfU1BJViwgYXBpY19wbV9zdGF0ZS5hcGljX3NwaXYpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCk7CisJYXBpY193cml0ZShBUElDX0xWVDEsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQxKTsKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKKwlpZiAobWF4bHZ0ID49IDUpCisJCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCBhcGljX3BtX3N0YXRlLmFwaWNfdGhtcik7CisjZW5kaWYKKwlpZiAobWF4bHZ0ID49IDQpCisJCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHBjKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUVCwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQpOworCWFwaWNfd3JpdGUoQVBJQ19URENSLCBhcGljX3BtX3N0YXRlLmFwaWNfdGRjcik7CisJYXBpY193cml0ZShBUElDX1RNSUNULCBhcGljX3BtX3N0YXRlLmFwaWNfdG1pY3QpOworCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCWFwaWNfcmVhZChBUElDX0VTUik7CisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVycik7CisJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJYXBpY19yZWFkKEFQSUNfRVNSKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBkZXZpY2UgaGFzIG5vIHNodXRkb3duIG1ldGhvZCAtIGZ1bGx5IGZ1bmN0aW9uaW5nIGxvY2FsIEFQSUNzCisgKiBhcmUgbmVlZGVkIG9uIGV2ZXJ5IENQVSB1cCB1bnRpbCBtYWNoaW5lX2hhbHQvcmVzdGFydC9wb3dlcm9mZi4KKyAqLworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBsYXBpY19zeXNjbGFzcyA9IHsKKwkubmFtZQkJPSAibGFwaWMiLAorCS5yZXN1bWUJCT0gbGFwaWNfcmVzdW1lLAorCS5zdXNwZW5kCT0gbGFwaWNfc3VzcGVuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfbGFwaWMgPSB7CisJLmlkCT0gMCwKKwkuY2xzCT0gJmxhcGljX3N5c2NsYXNzLAorfTsKKworc3RhdGljIHZvaWQgX19jcHVpbml0IGFwaWNfcG1fYWN0aXZhdGUodm9pZCkKK3sKKwlhcGljX3BtX3N0YXRlLmFjdGl2ZSA9IDE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbGFwaWNfc3lzZnModm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWNwdV9oYXNfYXBpYykKKwkJcmV0dXJuIDA7CisJLyogWFhYOiByZW1vdmUgc3VzcGVuZC9yZXN1bWUgcHJvY3MgaWYgIWFwaWNfcG1fc3RhdGUuYWN0aXZlPyAqLworCisJZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmxhcGljX3N5c2NsYXNzKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2xhcGljKTsKKwlyZXR1cm4gZXJyb3I7Cit9CitkZXZpY2VfaW5pdGNhbGwoaW5pdF9sYXBpY19zeXNmcyk7CisKKyNlbHNlCS8qIENPTkZJR19QTSAqLworCitzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpIHsgfQorCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKgorICogYXBpY19pc19jbHVzdGVyZWRfYm94KCkgLS0gQ2hlY2sgaWYgd2UgY2FuIGV4cGVjdCBnb29kIFRTQworICoKKyAqIFRodXMgZmFyLCB0aGUgbWFqb3IgdXNlciBvZiB0aGlzIGlzIElCTSdzIFN1bW1pdDIgc2VyaWVzOgorICoKKyAqIENsdXN0ZXJlZCBib3hlcyBtYXkgaGF2ZSB1bnN5bmNlZCBUU0MgcHJvYmxlbXMgaWYgdGhleSBhcmUKKyAqIG11bHRpLWNoYXNzaXMuIFVzZSBhdmFpbGFibGUgZGF0YSB0byB0YWtlIGEgZ29vZCBndWVzcy4KKyAqIElmIGluIGRvdWJ0LCBnbyBIUEVULgorICovCitfX2NwdWluaXQgaW50IGFwaWNfaXNfY2x1c3RlcmVkX2JveCh2b2lkKQoreworCWludCBpLCBjbHVzdGVycywgemVyb3M7CisJdW5zaWduZWQgaWQ7CisJdTE2ICpiaW9zX2NwdV9hcGljaWQ7CisJREVDTEFSRV9CSVRNQVAoY2x1c3Rlcm1hcCwgTlVNX0FQSUNfQ0xVU1RFUlMpOworCisJLyoKKwkgKiB0aGVyZSBpcyBub3QgdGhpcyBraW5kIG9mIGJveCB3aXRoIEFNRCBDUFUgeWV0LgorCSAqIFNvbWUgQU1EIGJveCB3aXRoIHF1YWRjb3JlIGNwdSBhbmQgOCBzb2NrZXRzIGFwaWNpZAorCSAqIHdpbGwgYmUgWzQsIDB4MjNdIG9yIFs4LCAweDI3XSBjb3VsZCBiZSB0aG91Z2h0IHRvCisJICogdnNtcCBib3ggc3RpbGwgbmVlZCBjaGVja2luZy4uLgorCSAqLworCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJiAhaXNfdnNtcF9ib3goKSkKKwkJcmV0dXJuIDA7CisKKwliaW9zX2NwdV9hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKTsKKwliaXRtYXBfemVybyhjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCisJCWlmIChiaW9zX2NwdV9hcGljaWQpIHsKKwkJCWlkID0gYmlvc19jcHVfYXBpY2lkW2ldOworCQl9CisJCWVsc2UgaWYgKGkgPCBucl9jcHVfaWRzKSB7CisJCQlpZiAoY3B1X3ByZXNlbnQoaSkpCisJCQkJaWQgPSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGkpOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UKKwkJCWJyZWFrOworCisJCWlmIChpZCAhPSBCQURfQVBJQ0lEKQorCQkJX19zZXRfYml0KEFQSUNfQ0xVU1RFUklEKGlkKSwgY2x1c3Rlcm1hcCk7CisJfQorCisJLyogUHJvYmxlbTogIFBhcnRpYWxseSBwb3B1bGF0ZWQgY2hhc3NpcyBtYXkgbm90IGhhdmUgQ1BVcyBpbiBzb21lIG9mCisJICogdGhlIEFQSUMgY2x1c3RlcnMgdGhleSBoYXZlIGJlZW4gYWxsb2NhdGVkLiAgT25seSBwcmVzZW50IENQVXMgaGF2ZQorCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgZW50cmllcywgdGh1cyBjYXVzaW5nIHplcm9lcyBpbiB0aGUgYml0bWFwLgorCSAqIFNpbmNlIGNsdXN0ZXJzIGFyZSBhbGxvY2F0ZWQgc2VxdWVudGlhbGx5LCBjb3VudCB6ZXJvcyBvbmx5IGlmCisJICogdGhleSBhcmUgYm91bmRlZCBieSBvbmVzLgorCSAqLworCWNsdXN0ZXJzID0gMDsKKwl6ZXJvcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5VTV9BUElDX0NMVVNURVJTOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIGNsdXN0ZXJtYXApKSB7CisJCQljbHVzdGVycyArPSAxICsgemVyb3M7CisJCQl6ZXJvcyA9IDA7CisJCX0gZWxzZQorCQkJKyt6ZXJvczsKKwl9CisKKwkvKiBTY2FsZU1QIHZTTVBvd2VyZWQgYm94ZXMgaGF2ZSBvbmUgY2x1c3RlciBwZXIgYm9hcmQgYW5kIFRTQ3MgYXJlCisJICogbm90IGd1YXJhbnRlZWQgdG8gYmUgc3luY2VkIGJldHdlZW4gYm9hcmRzCisJICovCisJaWYgKGlzX3ZzbXBfYm94KCkgJiYgY2x1c3RlcnMgPiAxKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogSWYgY2x1c3RlcnMgPiAyLCB0aGVuIHNob3VsZCBiZSBtdWx0aS1jaGFzc2lzLgorCSAqIE1heSBoYXZlIHRvIHJldmlzaXQgdGhpcyB3aGVuIG11bHRpLWNvcmUgKyBoeXBlcnRocmVhZGVkIENQVXMgY29tZQorCSAqIG91dCwgYnV0IEFGQUlLIHRoaXMgd2lsbCB3b3JrIGV2ZW4gZm9yIHRoZW0uCisJICovCisJcmV0dXJuIChjbHVzdGVycyA+IDIpOworfQorI2VuZGlmCisKKy8qCisgKiBBUElDIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Rpc2FibGVhcGljKGNoYXIgKmFyZykKK3sKKwlkaXNhYmxlX2FwaWMgPSAxOworCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfQVBJQyk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZGlzYWJsZWFwaWMiLCBzZXR1cF9kaXNhYmxlYXBpYyk7CisKKy8qIHNhbWUgYXMgZGlzYWJsZWFwaWMsIGZvciBjb21wYXRpYmlsaXR5ICovCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ub2xhcGljKGNoYXIgKmFyZykKK3sKKwlyZXR1cm4gc2V0dXBfZGlzYWJsZWFwaWMoYXJnKTsKK30KK2Vhcmx5X3BhcmFtKCJub2xhcGljIiwgc2V0dXBfbm9sYXBpYyk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKGNoYXIgKmFyZykKK3sKKwlsb2NhbF9hcGljX3RpbWVyX2MyX29rID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJsYXBpY190aW1lcl9jMl9vayIsIHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKGNoYXIgKmFyZykKK3sKKwlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vYXBpY3RpbWVyIiwgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9sYXBpY190aW1lcihjaGFyICphcmcpCit7CisJZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub2xhcGljX3RpbWVyIiwgcGFyc2Vfbm9sYXBpY190aW1lcik7CisKK3N0YXRpYyBpbnQgX19pbml0IGFwaWNfc2V0X3ZlcmJvc2l0eShjaGFyICphcmcpCit7CisJaWYgKCFhcmcpICB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlza2lwX2lvYXBpY19zZXR1cCA9IDA7CisJCXJldHVybiAwOworI2VuZGlmCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdHJjbXAoImRlYnVnIiwgYXJnKSA9PSAwKQorCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfREVCVUc7CisJZWxzZSBpZiAoc3RyY21wKCJ2ZXJib3NlIiwgYXJnKSA9PSAwKQorCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfVkVSQk9TRTsKKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBWZXJib3NpdHkgbGV2ZWwgJXMgbm90IHJlY29nbmlzZWQiCisJCQkiIHVzZSBhcGljPXZlcmJvc2Ugb3IgYXBpYz1kZWJ1Z1xuIiwgYXJnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiYXBpYyIsIGFwaWNfc2V0X3ZlcmJvc2l0eSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGxhcGljX2luc2VydF9yZXNvdXJjZSh2b2lkKQoreworCWlmICghYXBpY19waHlzKQorCQlyZXR1cm4gLTE7CisKKwkvKiBQdXQgbG9jYWwgQVBJQyBpbnRvIHRoZSByZXNvdXJjZSBtYXAuICovCisJbGFwaWNfcmVzb3VyY2Uuc3RhcnQgPSBhcGljX3BoeXM7CisJbGFwaWNfcmVzb3VyY2UuZW5kID0gbGFwaWNfcmVzb3VyY2Uuc3RhcnQgKyBQQUdFX1NJWkUgLSAxOworCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsYXBpY19yZXNvdXJjZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5lZWQgY2FsbCBpbnNlcnQgYWZ0ZXIgZTgyMF9yZXNlcnZlX3Jlc291cmNlcygpCisgKiB0aGF0IGlzIHVzaW5nIHJlcXVlc3RfcmVzb3VyY2UKKyAqLworbGF0ZV9pbml0Y2FsbChsYXBpY19pbnNlcnRfcmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYzgzMWQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MTkgKzAsMCBAQAotLyoKLSAqCUxvY2FsIEFQSUMgaGFuZGxpbmcsIGxvY2FsIEFQSUMgdGltZXJzCi0gKgotICoJKGMpIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkuCi0gKglNYWNpZWogVy4gUm96eWNraQk6CVZhcmlvdXMgdXBkYXRlcyBhbmQgZml4ZXMuCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBvd2VyIE1hbmFnZW1lbnQgZm9yIFVQLUFQSUMuCi0gKglQYXZlbCBNYWNoZWsgYW5kCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KLSNpbmNsdWRlIDxhc20vaHBldC5oPgotI2luY2x1ZGUgPGFzbS9pODI1My5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLQotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0KLS8qCi0gKiBTYW5pdHkgY2hlY2sKLSAqLwotI2lmICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDBGKSAhPSAweDBGKQotIyBlcnJvciBTUFVSSU9VU19BUElDX1ZFQ1RPUiBkZWZpbml0aW9uIGVycm9yCi0jZW5kaWYKLQotdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOwotCi0vKgotICogS25vYiB0byBjb250cm9sIG91ciB3aWxsaW5nbmVzcyB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMuCi0gKgotICogKzE9Zm9yY2UtZW5hYmxlCi0gKi8KLXN0YXRpYyBpbnQgZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWM7Ci1pbnQgZGlzYWJsZV9hcGljOwotCi0vKiBEaXNhYmxlIGxvY2FsIEFQSUMgdGltZXIgZnJvbSB0aGUga2VybmVsIGNvbW1hbmRsaW5lIG9yIHZpYSBkbWkgcXVpcmsgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV9hcGljX3RpbWVyIF9fY3B1aW5pdGRhdGE7Ci0vKiBMb2NhbCBBUElDIHRpbWVyIHdvcmtzIGluIEMyICovCi1pbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKLUVYUE9SVF9TWU1CT0xfR1BMKGxvY2FsX2FwaWNfdGltZXJfYzJfb2spOwotCi1pbnQgZmlyc3Rfc3lzdGVtX3ZlY3RvciA9IDB4ZmU7Ci0KLWNoYXIgc3lzdGVtX3ZlY3RvcnNbTlJfVkVDVE9SU10gPSB7IFswIC4uLiBOUl9WRUNUT1JTLTFdID0gU1lTX1ZFQ1RPUl9GUkVFfTsKLQotLyoKLSAqIERlYnVnIGxldmVsLCBleHBvcnRlZCBmb3IgaW9fYXBpYy5jCi0gKi8KLXVuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKLQotaW50IHBpY19tb2RlOwotCi0vKiBIYXZlIHdlIGZvdW5kIGFuIE1QIHRhYmxlICovCi1pbnQgc21wX2ZvdW5kX2NvbmZpZzsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJMb2NhbCBBUElDIiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsaWJyYXRpb25fcmVzdWx0OwotCi1zdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKLQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKTsKLXN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCk7Ci0KLS8qCi0gKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgdXNlZCBmb3IgYW55IGZ1bmN0aW9uIHdoaWNoIGlzIENQVSBsb2NhbC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbGFwaWNfY2xvY2tldmVudCA9IHsKLQkubmFtZQkJPSAibGFwaWMiLAotCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVAotCQkJfCBDTE9DS19FVlRfRkVBVF9DM1NUT1AgfCBDTE9DS19FVlRfRkVBVF9EVU1NWSwKLQkuc2hpZnQJCT0gMzIsCi0JLnNldF9tb2RlCT0gbGFwaWNfdGltZXJfc2V0dXAsCi0JLnNldF9uZXh0X2V2ZW50CT0gbGFwaWNfbmV4dF9ldmVudCwKLQkuYnJvYWRjYXN0CT0gbGFwaWNfdGltZXJfYnJvYWRjYXN0LAotCS5yYXRpbmcJCT0gMTAwLAotCS5pcnEJCT0gLTEsCi19Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxhcGljX2V2ZW50cyk7Ci0KLS8qIExvY2FsIEFQSUMgd2FzIGRpc2FibGVkIGJ5IHRoZSBCSU9TIGFuZCBlbmFibGVkIGJ5IHRoZSBrZXJuZWwgKi8KLXN0YXRpYyBpbnQgZW5hYmxlZF92aWFfYXBpY2Jhc2U7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwaWNfcGh5czsKLQotLyoKLSAqIEdldCB0aGUgTEFQSUMgdmVyc2lvbgotICovCi1zdGF0aWMgaW5saW5lIGludCBsYXBpY19nZXRfdmVyc2lvbih2b2lkKQotewotCXJldHVybiBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOwotfQotCi0vKgotICogQ2hlY2ssIGlmIHRoZSBBUElDIGlzIGludGVncmF0ZWQgb3IgYSBzZXBhcmF0ZSBjaGlwCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxhcGljX2lzX2ludGVncmF0ZWQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmV0dXJuIDE7Ci0jZWxzZQotCXJldHVybiBBUElDX0lOVEVHUkFURUQobGFwaWNfZ2V0X3ZlcnNpb24oKSk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIENoZWNrLCB3aGV0aGVyIHRoaXMgaXMgYSBtb2Rlcm4gb3IgYSBmaXJzdCBnZW5lcmF0aW9uIEFQSUMKLSAqLwotc3RhdGljIGludCBtb2Rlcm5fYXBpYyh2b2lkKQotewotCS8qIEFNRCBzeXN0ZW1zIHVzZSBvbGQgQVBJQyB2ZXJzaW9ucywgc28gY2hlY2sgdGhlIENQVSAqLwotCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKLQkgICAgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gbGFwaWNfZ2V0X3ZlcnNpb24oKSA+PSAweDE0OwotfQotCi0vKgotICogUGFyYXZpcnQga2VybmVscyBhbHNvIG1pZ2h0IGJlIHVzaW5nIHRoZXNlIGJlbG93IG9wcy4gU28gd2Ugc3RpbGwKLSAqIHVzZSBnZW5lcmljIGFwaWNfcmVhZCgpL2FwaWNfd3JpdGUoKSwgd2hpY2ggbWlnaHQgYmUgcG9pbnRpbmcgdG8gZGlmZmVyZW50Ci0gKiBvcHMgaW4gUEFSQVZJUlQgY2FzZS4KLSAqLwotdm9pZCB4YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0Jd2hpbGUgKGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZKQotCQljcHVfcmVsYXgoKTsKLX0KLQotdTMyIHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCXUzMiBzZW5kX3N0YXR1czsKLQlpbnQgdGltZW91dDsKLQotCXRpbWVvdXQgPSAwOwotCWRvIHsKLQkJc2VuZF9zdGF0dXMgPSBhcGljX3JlYWQoQVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWTsKLQkJaWYgKCFzZW5kX3N0YXR1cykKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTAwKTsKLQl9IHdoaWxlICh0aW1lb3V0KysgPCAxMDAwKTsKLQotCXJldHVybiBzZW5kX3N0YXR1czsKLX0KLQotdm9pZCB4YXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQotewotCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGlkKSk7Ci0JYXBpY193cml0ZShBUElDX0lDUiwgbG93KTsKLX0KLQotdTY0IHhhcGljX2ljcl9yZWFkKHZvaWQpCi17Ci0JdTMyIGljcjEsIGljcjI7Ci0KLQlpY3IyID0gYXBpY19yZWFkKEFQSUNfSUNSMik7Ci0JaWNyMSA9IGFwaWNfcmVhZChBUElDX0lDUik7Ci0KLQlyZXR1cm4gaWNyMSB8ICgodTY0KWljcjIgPDwgMzIpOwotfQotCi1zdGF0aWMgc3RydWN0IGFwaWNfb3BzIHhhcGljX29wcyA9IHsKLQkucmVhZCA9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAotCS53cml0ZSA9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKLQkuaWNyX3JlYWQgPSB4YXBpY19pY3JfcmVhZCwKLQkuaWNyX3dyaXRlID0geGFwaWNfaWNyX3dyaXRlLAotCS53YWl0X2ljcl9pZGxlID0geGFwaWNfd2FpdF9pY3JfaWRsZSwKLQkuc2FmZV93YWl0X2ljcl9pZGxlID0gc2FmZV94YXBpY193YWl0X2ljcl9pZGxlLAotfTsKLQotc3RydWN0IGFwaWNfb3BzIF9fcmVhZF9tb3N0bHkgKmFwaWNfb3BzID0gJnhhcGljX29wczsKLUVYUE9SVF9TWU1CT0xfR1BMKGFwaWNfb3BzKTsKLQotLyoqCi0gKiBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCAtIGVuYWJsZSBOTUkgdGhyb3VnaCBsb2NhbCB2ZWN0b3IgdGFibGUgMAotICovCi12b2lkIF9fY3B1aW5pdCBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCi0JLyogdW5tYXNrIGFuZCBzZXQgdG8gTk1JICovCi0JdiA9IEFQSUNfRE1fTk1JOwotCi0JLyogTGV2ZWwgdHJpZ2dlcmVkIGZvciA4MjQ4OURYICgzMmJpdCBtb2RlKSAqLwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQotCQl2IHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdik7Ci19Ci0KLS8qKgotICogZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCAtIEdldCBudW1iZXIgb2YgcGh5c2ljYWwgYnJvYWRjYXN0IElEcwotICovCi1pbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKQotewotCXJldHVybiBtb2Rlcm5fYXBpYygpID8gMHhmZiA6IDB4ZjsKLX0KLQotLyoqCi0gKiBsYXBpY19nZXRfbWF4bHZ0IC0gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2NhbCB2ZWN0b3IgdGFibGUgZW50cmllcwotICovCi1pbnQgbGFwaWNfZ2V0X21heGx2dCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JLyoKLQkgKiAtIHdlIGFsd2F5cyBoYXZlIEFQSUMgaW50ZWdyYXRlZCBvbiA2NGJpdCBtb2RlCi0JICogLSA4MjQ4OURYcyBkbyBub3QgcmVwb3J0ICMgb2YgTFZUIGVudHJpZXMKLQkgKi8KLQlyZXR1cm4gQVBJQ19JTlRFR1JBVEVEKEdFVF9BUElDX1ZFUlNJT04odikpID8gR0VUX0FQSUNfTUFYTFZUKHYpIDogMjsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIKLSAqLwotCi0vKiBDbG9jayBkaXZpc29yICovCi0jaWZkZWYgQ09ORkdfWDg2XzY0Ci0jZGVmaW5lIEFQSUNfRElWSVNPUiAxCi0jZWxzZQotI2RlZmluZSBBUElDX0RJVklTT1IgMTYKLSNlbmRpZgotCi0vKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBsb2NhbCBBUElDIHRpbWVyLCB3aXRoIGEgdGltZW91dCBvZgotICogJ2Nsb2NrcycgQVBJQyBidXMgY2xvY2suIER1cmluZyBjYWxpYnJhdGlvbiB3ZSBhY3R1YWxseSBjYWxsCi0gKiB0aGlzIGZ1bmN0aW9uIHR3aWNlIG9uIHRoZSBib290IENQVSwgb25jZSB3aXRoIGEgYm9ndXMgdGltZW91dAotICogdmFsdWUsIHNlY29uZCB0aW1lIGZvciByZWFsLiBUaGUgb3RoZXIgKG5vbmNhbGlicmF0aW5nKSBDUFVzCi0gKiBjYWxsIHRoaXMgZnVuY3Rpb24gb25seSBvbmNlLCB3aXRoIHRoZSByZWFsLCBjYWxpYnJhdGVkIHZhbHVlLgotICoKLSAqIFdlIGRvIHJlYWRzIGJlZm9yZSB3cml0ZXMgZXZlbiBpZiB1bm5lY2Vzc2FyeSwgdG8gZ2V0IGFyb3VuZCB0aGUKLSAqIFA1IEFQSUMgZG91YmxlIHdyaXRlIGJ1Zy4KLSAqLwotc3RhdGljIHZvaWQgX19zZXR1cF9BUElDX0xWVFQodW5zaWduZWQgaW50IGNsb2NrcywgaW50IG9uZXNob3QsIGludCBpcnFlbikKLXsKLQl1bnNpZ25lZCBpbnQgbHZ0dF92YWx1ZSwgdG1wX3ZhbHVlOwotCi0JbHZ0dF92YWx1ZSA9IExPQ0FMX1RJTUVSX1ZFQ1RPUjsKLQlpZiAoIW9uZXNob3QpCi0JCWx2dHRfdmFsdWUgfD0gQVBJQ19MVlRfVElNRVJfUEVSSU9ESUM7Ci0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCi0JCWx2dHRfdmFsdWUgfD0gU0VUX0FQSUNfVElNRVJfQkFTRShBUElDX1RJTUVSX0JBU0VfRElWKTsKLQotCWlmICghaXJxZW4pCi0JCWx2dHRfdmFsdWUgfD0gQVBJQ19MVlRfTUFTS0VEOwotCi0JYXBpY193cml0ZShBUElDX0xWVFQsIGx2dHRfdmFsdWUpOwotCi0JLyoKLQkgKiBEaXZpZGUgUElDTEsgYnkgMTYKLQkgKi8KLQl0bXBfdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLQlhcGljX3dyaXRlKEFQSUNfVERDUiwKLQkJKHRtcF92YWx1ZSAmIH4oQVBJQ19URFJfRElWXzEgfCBBUElDX1REUl9ESVZfVE1CQVNFKSkgfAotCQlBUElDX1REUl9ESVZfMTYpOwotCi0JaWYgKCFvbmVzaG90KQotCQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGNsb2NrcyAvIEFQSUNfRElWSVNPUik7Ci19Ci0KLS8qCi0gKiBTZXR1cCBleHRlbmRlZCBMVlQsIEFNRCBzcGVjaWZpYyAoSzgsIGZhbWlseSAxMGgpCi0gKgotICogVmVjdG9yIG1hcHBpbmdzIGFyZSBoYXJkIGNvZGVkLiBPbiBLOCBvbmx5IG9mZnNldCAwIChBUElDNTAwKSBhbmQKLSAqIE1DRSBpbnRlcnJ1cHRzIGFyZSBzdXBwb3J0ZWQuIFRodXMgTUNFIG9mZnNldCBtdXN0IGJlIHNldCB0byAwLgotICoKLSAqIElmIG1hc2s9MSwgdGhlIExWVCBlbnRyeSBkb2VzIG5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIHdoaWxlIG1hc2s9MAotICogZW5hYmxlcyB0aGUgdmVjdG9yLiBTZWUgYWxzbyB0aGUgQktER3MuCi0gKi8KLQotI2RlZmluZSBBUElDX0VJTFZUX0xWVE9GRl9NQ0UgMAotI2RlZmluZSBBUElDX0VJTFZUX0xWVE9GRl9JQlMgMQotCi1zdGF0aWMgdm9pZCBzZXR1cF9BUElDX2VpbHZ0KHU4IGx2dF9vZmYsIHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyByZWcgPSAobHZ0X29mZiA8PCA0KSArIEFQSUNfRUlMVlQwOwotCXVuc2lnbmVkIGludCAgdiAgID0gKG1hc2sgPDwgMTYpIHwgKG1zZ190eXBlIDw8IDgpIHwgdmVjdG9yOwotCi0JYXBpY193cml0ZShyZWcsIHYpOwotfQotCi11OCBzZXR1cF9BUElDX2VpbHZ0X21jZSh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfTUNFLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKLQlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfTUNFOwotfQotCi11OCBzZXR1cF9BUElDX2VpbHZ0X2licyh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfSUJTLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKLQlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfSUJTOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc2V0dXBfQVBJQ19laWx2dF9pYnMpOwotCi0vKgotICogUHJvZ3JhbSB0aGUgbmV4dCBldmVudCwgcmVsYXRpdmUgdG8gbm93Ci0gKi8KLXN0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGRlbHRhKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBsYXBpYyB0aW1lciBpbiBwZXJpb2RpYyBvciBvbmVzaG90IG1vZGUKLSAqLwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCS8qIExhcGljIHVzZWQgYXMgZHVtbXkgZm9yIGJyb2FkY2FzdCA/ICovCi0JaWYgKGV2dC0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9EVU1NWSkKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCV9fc2V0dXBfQVBJQ19MVlRUKGNhbGlicmF0aW9uX3Jlc3VsdCwKLQkJCQkgIG1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMsIDEpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JCXYgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2KTsKLQkJYnJlYWs7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6Ci0JCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwotCQlicmVhazsKLQl9Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHRpbWVyIGJyb2FkY2FzdCBmdW5jdGlvbgotICovCi1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNlbmRfSVBJX21hc2sobWFzaywgTE9DQUxfVElNRVJfVkVDVE9SKTsKLSNlbmRpZgotfQotCi0vKgotICogU2V0dXAgdGhlIGxvY2FsIEFQSUMgdGltZXIgZm9yIHRoaXMgQ1BVLiBDb3B5IHRoZSBpbml0aWxpemVkIHZhbHVlcwotICogb2YgdGhlIGJvb3QgQ1BVIGFuZCByZWdpc3RlciB0aGUgY2xvY2sgZXZlbnQgaW4gdGhlIGZyYW1ld29yay4KLSAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHNldHVwX0FQSUNfdGltZXIodm9pZCkKLXsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gJl9fZ2V0X2NwdV92YXIobGFwaWNfZXZlbnRzKTsKLQotCW1lbWNweShsZXZ0LCAmbGFwaWNfY2xvY2tldmVudCwgc2l6ZW9mKCpsZXZ0KSk7Ci0JbGV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UobGV2dCk7Ci19Ci0KLS8qCi0gKiBJbiB0aGlzIGZ1bmN0aW9ucyB3ZSBjYWxpYnJhdGUgQVBJQyBidXMgY2xvY2tzIHRvIHRoZSBleHRlcm5hbCB0aW1lci4KLSAqCi0gKiBXZSB3YW50IHRvIGRvIHRoZSBjYWxpYnJhdGlvbiBvbmx5IG9uY2Ugc2luY2Ugd2Ugd2FudCB0byBoYXZlIGxvY2FsIHRpbWVyCi0gKiBpcnFzIHN5bmNyb24uIENQVXMgY29ubmVjdGVkIGJ5IHRoZSBzYW1lIEFQSUMgYnVzIGhhdmUgdGhlIHZlcnkgc2FtZSBidXMKLSAqIGZyZXF1ZW5jeS4KLSAqCi0gKiBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgYnkgcmVhZGluZyB0aGUgUElUL0hQRVQgYW5kIHdhaXRpbmcgZm9yIGEgd3JhcAotICogYXJvdW5kIHRvIGZpbmQgb3V0LCB0aGF0IGEgdGljayBoYXMgZWxhcHNlZC4gSSBoYXZlIGEgYm94LCB3aGVyZSB0aGUgUElUCi0gKiByZWFkb3V0IGlzIGJyb2tlbiwgc28gaXQgbmV2ZXIgZ2V0cyBvdXQgb2YgdGhlIHdhaXQgbG9vcCBhZ2Fpbi4gVGhpcyB3YXMKLSAqIGFsc28gcmVwb3J0ZWQgYnkgb3RoZXJzLgotICoKLSAqIE1vbml0b3JpbmcgdGhlIGppZmZpZXMgdmFsdWUgaXMgaW5hY2N1cmF0ZSBhbmQgdGhlIGNsb2NrZXZlbnRzCi0gKiBpbmZyYXN0cnVjdHVyZSBhbGxvd3MgdXMgdG8gZG8gYSBzaW1wbGUgc3Vic3RpdHV0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKLSAqIGhhbmRsZXIuCi0gKgotICogVGhlIGNhbGlicmF0aW9uIHJvdXRpbmUgYWxzbyB1c2VzIHRoZSBwbV90aW1lciB3aGVuIHBvc3NpYmxlLCBhcyB0aGUgUElUCi0gKiBoYXBwZW5zIHRvIHJ1biB3YXkgdG9vIHNsb3cgKGZhY3RvciAyLjMgb24gbXkgVkFJTyBDb3JlRHVvLCB3aGljaCBnb2VzCi0gKiBiYWNrIHRvIG5vcm1hbCBsYXRlciBpbiB0aGUgYm9vdCBwcm9jZXNzKS4KLSAqLwotCi0jZGVmaW5lIExBUElDX0NBTF9MT09QUwkJKEhaLzEwKQotCi1zdGF0aWMgX19pbml0ZGF0YSBpbnQgbGFwaWNfY2FsX2xvb3BzID0gLTE7Ci1zdGF0aWMgX19pbml0ZGF0YSBsb25nIGxhcGljX2NhbF90MSwgbGFwaWNfY2FsX3QyOwotc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBsb25nIGxhcGljX2NhbF90c2MxLCBsYXBpY19jYWxfdHNjMjsKLXN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbGFwaWNfY2FsX3BtMSwgbGFwaWNfY2FsX3BtMjsKLXN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbGFwaWNfY2FsX2oxLCBsYXBpY19jYWxfajI7Ci0KLS8qCi0gKiBUZW1wb3JhcnkgaW50ZXJydXB0IGhhbmRsZXIuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBsYXBpY19jYWxfaGFuZGxlcihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRzYyA9IDA7Ci0JbG9uZyB0YXBpYyA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQl1bnNpZ25lZCBsb25nIHBtID0gYWNwaV9wbV9yZWFkX2Vhcmx5KCk7Ci0KLQlpZiAoY3B1X2hhc190c2MpCi0JCXJkdHNjbGwodHNjKTsKLQotCXN3aXRjaCAobGFwaWNfY2FsX2xvb3BzKyspIHsKLQljYXNlIDA6Ci0JCWxhcGljX2NhbF90MSA9IHRhcGljOwotCQlsYXBpY19jYWxfdHNjMSA9IHRzYzsKLQkJbGFwaWNfY2FsX3BtMSA9IHBtOwotCQlsYXBpY19jYWxfajEgPSBqaWZmaWVzOwotCQlicmVhazsKLQotCWNhc2UgTEFQSUNfQ0FMX0xPT1BTOgotCQlsYXBpY19jYWxfdDIgPSB0YXBpYzsKLQkJbGFwaWNfY2FsX3RzYzIgPSB0c2M7Ci0JCWlmIChwbSA8IGxhcGljX2NhbF9wbTEpCi0JCQlwbSArPSBBQ1BJX1BNX09WUlJVTjsKLQkJbGFwaWNfY2FsX3BtMiA9IHBtOwotCQlsYXBpY19jYWxfajIgPSBqaWZmaWVzOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7Ci0JY29uc3QgbG9uZyBwbV8xMDBtcyA9IFBNVE1SX1RJQ0tTX1BFUl9TRUMvMTA7Ci0JY29uc3QgbG9uZyBwbV90aHJlc2ggPSBwbV8xMDBtcy8xMDA7Ci0Jdm9pZCAoKnJlYWxfaGFuZGxlcikoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKLQl1bnNpZ25lZCBsb25nIGRlbHRhajsKLQlsb25nIGRlbHRhLCBkZWx0YXBtOwotCWludCBwbV9yZWZlcmVuY2VkID0gMDsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQkvKiBSZXBsYWNlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlyZWFsX2hhbmRsZXIgPSBnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXI7Ci0JZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7Ci0KLQkvKgotCSAqIFNldHVwIHRoZSBBUElDIGNvdW50ZXIgdG8gMWU5LiBUaGVyZSBpcyBubyB3YXkgdGhlIGxhcGljCi0JICogY2FuIHVuZGVyZmxvdyBpbiB0aGUgMTAwbXMgZGV0ZWN0aW9uIHRpbWUgZnJhbWUKLQkgKi8KLQlfX3NldHVwX0FQSUNfTFZUVCgxMDAwMDAwMDAwLCAwLCAwKTsKLQotCS8qIExldCB0aGUgaW50ZXJydXB0cyBydW4gKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQl3aGlsZSAobGFwaWNfY2FsX2xvb3BzIDw9IExBUElDX0NBTF9MT09QUykKLQkJY3B1X3JlbGF4KCk7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JLyogUmVzdG9yZSB0aGUgcmVhbCBldmVudCBoYW5kbGVyICovCi0JZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyID0gcmVhbF9oYW5kbGVyOwotCi0JLyogQnVpbGQgZGVsdGEgdDEtdDIgYXMgYXBpYyB0aW1lciBjb3VudHMgZG93biAqLwotCWRlbHRhID0gbGFwaWNfY2FsX3QxIC0gbGFwaWNfY2FsX3QyOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBsYXBpYyBkZWx0YSA9ICVsZFxuIiwgZGVsdGEpOwotCi0JLyogQ2hlY2ssIGlmIHRoZSBQTSB0aW1lciBpcyBhdmFpbGFibGUgKi8KLQlkZWx0YXBtID0gbGFwaWNfY2FsX3BtMiAtIGxhcGljX2NhbF9wbTE7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIFBNIHRpbWVyIGRlbHRhID0gJWxkXG4iLCBkZWx0YXBtKTsKLQotCWlmIChkZWx0YXBtKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbXVsdDsKLQkJdTY0IHJlczsKLQotCQltdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChQTVRNUl9USUNLU19QRVJfU0VDLCAyMik7Ci0KLQkJaWYgKGRlbHRhcG0gPiAocG1fMTAwbXMgLSBwbV90aHJlc2gpICYmCi0JCSAgICBkZWx0YXBtIDwgKHBtXzEwMG1zICsgcG1fdGhyZXNoKSkgewotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIFBNIHRpbWVyIHJlc3VsdCBva1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlyZXMgPSAoKCh1NjQpIGRlbHRhcG0pICogIG11bHQpID4+IDIyOwotCQkJZG9fZGl2KHJlcywgMTAwMDAwMCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIGNhbGlicmF0aW9uIG5vdCBjb25zaXN0ZW50ICIKLQkJCSAgICAgICAid2l0aCBQTSBUaW1lcjogJWxkbXMgaW5zdGVhZCBvZiAxMDBtc1xuIiwKLQkJCSAgICAgICAobG9uZylyZXMpOwotCQkJLyogQ29ycmVjdCB0aGUgbGFwaWMgY291bnRlciB2YWx1ZSAqLwotCQkJcmVzID0gKCgodTY0KSBkZWx0YSkgKiBwbV8xMDBtcyk7Ci0JCQlkb19kaXYocmVzLCBkZWx0YXBtKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkFQSUMgZGVsdGEgYWRqdXN0ZWQgdG8gUE0tVGltZXI6ICIKLQkJCSAgICAgICAiJWx1ICglbGQpXG4iLCAodW5zaWduZWQgbG9uZykgcmVzLCBkZWx0YSk7Ci0JCQlkZWx0YSA9IChsb25nKSByZXM7Ci0JCX0KLQkJcG1fcmVmZXJlbmNlZCA9IDE7Ci0JfQotCi0JLyogQ2FsY3VsYXRlIHRoZSBzY2FsZWQgbWF0aCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KLQlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoZGVsdGEsIFRJQ0tfTlNFQyAqIExBUElDX0NBTF9MT09QUywKLQkJCQkgICAgICAgbGFwaWNfY2xvY2tldmVudC5zaGlmdCk7Ci0JbGFwaWNfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGLCAmbGFwaWNfY2xvY2tldmVudCk7Ci0JbGFwaWNfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJmxhcGljX2Nsb2NrZXZlbnQpOwotCi0JY2FsaWJyYXRpb25fcmVzdWx0ID0gKGRlbHRhICogQVBJQ19ESVZJU09SKSAvIExBUElDX0NBTF9MT09QUzsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGRlbHRhICVsZFxuIiwgZGVsdGEpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIG11bHQ6ICVsZFxuIiwgbGFwaWNfY2xvY2tldmVudC5tdWx0KTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBjYWxpYnJhdGlvbiByZXN1bHQ6ICV1XG4iLAotCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0KTsKLQotCWlmIChjcHVfaGFzX3RzYykgewotCQlkZWx0YSA9IChsb25nKShsYXBpY19jYWxfdHNjMiAtIGxhcGljX2NhbF90c2MxKTsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gQ1BVIGNsb2NrIHNwZWVkIGlzICIKLQkJCSAgICAiJWxkLiUwNGxkIE1Iei5cbiIsCi0JCQkgICAgKGRlbHRhIC8gTEFQSUNfQ0FMX0xPT1BTKSAvICgxMDAwMDAwIC8gSFopLAotCQkJICAgIChkZWx0YSAvIExBUElDX0NBTF9MT09QUykgJSAoMTAwMDAwMCAvIEhaKSk7Ci0JfQotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gaG9zdCBidXMgY2xvY2sgc3BlZWQgaXMgIgotCQkgICAgIiV1LiUwNHUgTUh6LlxuIiwKLQkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCAvICgxMDAwMDAwIC8gSFopLAotCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0ICUgKDEwMDAwMDAgLyBIWikpOwotCi0JLyoKLQkgKiBEbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgQVBJQyBjYWxpYnJhdGlvbiByZXN1bHQKLQkgKi8KLQlpZiAoY2FsaWJyYXRpb25fcmVzdWx0IDwgKDEwMDAwMDAgLyBIWikpIHsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiQVBJQyBmcmVxdWVuY3kgdG9vIHNsb3csIGRpc2FibGluZyBhcGljIHRpbWVyXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWxldnQtPmZlYXR1cmVzICY9IH5DTE9DS19FVlRfRkVBVF9EVU1NWTsKLQotCS8qIFdlIHRydXN0IHRoZSBwbSB0aW1lciBiYXNlZCBjYWxpYnJhdGlvbiAqLwotCWlmICghcG1fcmVmZXJlbmNlZCkgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gdmVyaWZ5IEFQSUMgdGltZXJcbiIpOwotCi0JCS8qCi0JCSAqIFNldHVwIHRoZSBhcGljIHRpbWVyIG1hbnVhbGx5Ci0JCSAqLwotCQlsZXZ0LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7Ci0JCWxhcGljX3RpbWVyX3NldHVwKENMT0NLX0VWVF9NT0RFX1BFUklPRElDLCBsZXZ0KTsKLQkJbGFwaWNfY2FsX2xvb3BzID0gLTE7Ci0KLQkJLyogTGV0IHRoZSBpbnRlcnJ1cHRzIHJ1biAqLwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkJd2hpbGUgKGxhcGljX2NhbF9sb29wcyA8PSBMQVBJQ19DQUxfTE9PUFMpCi0JCQljcHVfcmVsYXgoKTsKLQotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JCS8qIFN0b3AgdGhlIGxhcGljIHRpbWVyICovCi0JCWxhcGljX3RpbWVyX3NldHVwKENMT0NLX0VWVF9NT0RFX1NIVVRET1dOLCBsZXZ0KTsKLQotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkJLyogSmlmZmllcyBkZWx0YSAqLwotCQlkZWx0YWogPSBsYXBpY19jYWxfajIgLSBsYXBpY19jYWxfajE7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBqaWZmaWVzIGRlbHRhID0gJWx1XG4iLCBkZWx0YWopOwotCi0JCS8qIENoZWNrLCBpZiB0aGUgamlmZmllcyByZXN1bHQgaXMgY29uc2lzdGVudCAqLwotCQlpZiAoZGVsdGFqID49IExBUElDX0NBTF9MT09QUy0yICYmIGRlbHRhaiA8PSBMQVBJQ19DQUxfTE9PUFMrMikKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBqaWZmaWVzIHJlc3VsdCBva1xuIik7Ci0JCWVsc2UKLQkJCWxldnQtPmZlYXR1cmVzIHw9IENMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCX0gZWxzZQotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQlpZiAobGV2dC0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9EVU1NWSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiQVBJQyB0aW1lciBkaXNhYmxlZCBkdWUgdG8gdmVyaWZpY2F0aW9uIGZhaWx1cmUuXG4iKTsKLQkJCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBib290IEFQSUMKLSAqCi0gKiBDYWxpYnJhdGUgYW5kIHZlcmlmeSB0aGUgcmVzdWx0LgotICovCi12b2lkIF9faW5pdCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCkKLXsKLQkvKgotCSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlIGtlcm5lbAotCSAqIGNvbW1hbmRsaW5lIG9yIGZyb20gdGhlIENQVSBkZXRlY3Rpb24gY29kZS4gUmVnaXN0ZXIgdGhlIGxhcGljCi0JICogdGltZXIgYXMgYSBkdW1teSBjbG9jayBldmVudCBzb3VyY2Ugb24gU01QIHN5c3RlbXMsIHNvIHRoZQotCSAqIGJyb2FkY2FzdCBtZWNoYW5pc20gaXMgdXNlZC4gT24gVVAgc3lzdGVtcyBzaW1wbHkgaWdub3JlIGl0LgotCSAqLwotCWlmIChkaXNhYmxlX2FwaWNfdGltZXIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIEFQSUMgdGltZXJcbiIpOwotCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLwotCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpIHsKLQkJCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IDE7Ci0JCQlzZXR1cF9BUElDX3RpbWVyKCk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlVzaW5nIGxvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0cy5cbiIKLQkJICAgICJjYWxpYnJhdGluZyBBUElDIHRpbWVyIC4uLlxuIik7Ci0KLQlpZiAoY2FsaWJyYXRlX0FQSUNfY2xvY2soKSkgewotCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLwotCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCi0JCQlzZXR1cF9BUElDX3RpbWVyKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIG5taV93YXRjaGRvZyBpcyBzZXQgdG8gSU9fQVBJQywgd2UgbmVlZCB0aGUKLQkgKiBQSVQvSFBFVCBnb2luZy4gIE90aGVyd2lzZSByZWdpc3RlciBsYXBpYyBhcyBhIGR1bW15Ci0JICogZGV2aWNlLgotCSAqLwotCWlmIChubWlfd2F0Y2hkb2cgIT0gTk1JX0lPX0FQSUMpCi0JCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyB0aW1lciByZWdpc3RlcmVkIGFzIGR1bW15LCIKLQkJCSIgZHVlIHRvIG5taV93YXRjaGRvZz0lZCFcbiIsIG5taV93YXRjaGRvZyk7Ci0KLQkvKiBTZXR1cCB0aGUgbGFwaWMgb3IgcmVxdWVzdCB0aGUgYnJvYWRjYXN0ICovCi0Jc2V0dXBfQVBJQ190aW1lcigpOwotfQotCi12b2lkIF9fZGV2aW5pdCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKQotewotCXNldHVwX0FQSUNfdGltZXIoKTsKLX0KLQotLyoKLSAqIFRoZSBndXRzIG9mIHRoZSBhcGljIHRpbWVyIGludGVycnVwdAotICovCi1zdGF0aWMgdm9pZCBsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnBlcl9jcHUobGFwaWNfZXZlbnRzLCBjcHUpOwotCi0JLyoKLQkgKiBOb3JtYWxseSB3ZSBzaG91bGQgbm90IGJlIGhlcmUgdGlsbCBMQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZCBidXQKLQkgKiBpbiBzb21lIGNhc2VzIGxpa2Uga2R1bXAsIGl0cyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIGEgcGVuZGluZyBMQVBJQwotCSAqIHRpbWVyIGludGVycnVwdCBmcm9tIHByZXZpb3VzIGtlcm5lbCdzIGNvbnRleHQgYW5kIGlzIGRlbGl2ZXJlZCBpbgotCSAqIG5ldyBrZXJuZWwgdGhlIG1vbWVudCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgotCSAqCi0JICogSW50ZXJydXB0cyBhcmUgZW5hYmxlZCBlYXJseSBhbmQgTEFQSUMgaXMgc2V0dXAgbXVjaCBsYXRlciwgaGVuY2UKLQkgKiBpdHMgcG9zc2libGUgdGhhdCB3aGVuIHdlIGdldCBoZXJlIGV2dC0+ZXZlbnRfaGFuZGxlciBpcyBOVUxMLgotCSAqIENoZWNrIGZvciBldmVudF9oYW5kbGVyIGJlaW5nIE5VTEwgYW5kIGRpc2NhcmQgdGhlIGludGVycnVwdCBhcwotCSAqIHNwdXJpb3VzLgotCSAqLwotCWlmICghZXZ0LT5ldmVudF9oYW5kbGVyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJTcHVyaW91cyBMQVBJQyB0aW1lciBpbnRlcnJ1cHQgb24gY3B1ICVkXG4iLCBjcHUpOwotCQkvKiBTd2l0Y2ggaXQgb2ZmICovCi0JCWxhcGljX3RpbWVyX3NldHVwKENMT0NLX0VWVF9NT0RFX1NIVVRET1dOLCBldnQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiB0aGUgTk1JIGRlYWRsb2NrLWRldGVjdG9yIHVzZXMgdGhpcy4KLQkgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JYWRkX3BkYShhcGljX3RpbWVyX2lycXMsIDEpOwotI2Vsc2UKLQlwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxcysrOwotI2VuZGlmCi0KLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0LiBUaGlzIGlzIHRoZSBtb3N0IG5hdHVyYWwgd2F5IGZvciBkb2luZwotICogbG9jYWwgaW50ZXJydXB0cywgYnV0IGxvY2FsIHRpbWVyIGludGVycnVwdHMgY2FuIGJlIGVtdWxhdGVkIGJ5Ci0gKiBicm9hZGNhc3QgaW50ZXJydXB0cyB0b28uIFtpbiBjYXNlIHRoZSBodyBkb2Vzbid0IHN1cHBvcnQgQVBJQyB0aW1lcnNdCi0gKgotICogWyBpZiBhIHNpbmdsZS1DUFUgc3lzdGVtIHJ1bnMgYW4gU01QIGtlcm5lbCB0aGVuIHdlIGNhbGwgdGhlIGxvY2FsCi0gKiAgIGludGVycnVwdCBhcyB3ZWxsLiBUaHVzIHdlIGNhbm5vdCBpbmxpbmUgdGhlIGxvY2FsIGlycSAuLi4gXQotICovCi12b2lkIHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7Ci0KLQkvKgotCSAqIE5PVEUhIFdlJ2QgYmV0dGVyIEFDSyB0aGUgaXJxIGltbWVkaWF0ZWx5LAotCSAqIGJlY2F1c2UgdGltZXIgaGFuZGxpbmcgY2FuIGJlIHNsb3cuCi0JICovCi0JYWNrX0FQSUNfaXJxKCk7Ci0JLyoKLQkgKiB1cGRhdGVfcHJvY2Vzc190aW1lcygpIGV4cGVjdHMgdXMgdG8gaGF2ZSBkb25lIGlycV9lbnRlcigpLgotCSAqIEJlc2lkZXMsIGlmIHdlIGRvbid0IHRpbWVyIGludGVycnVwdHMgaWdub3JlIHRoZSBnbG9iYWwKLQkgKiBpbnRlcnJ1cHQgbG9jaywgd2hpY2ggaXMgdGhlIFdyb25nVGhpbmcgKHRtKSB0byBkby4KLQkgKi8KLQlpcnFfZW50ZXIoKTsKLQlsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCgpOwotCWlycV9leGl0KCk7Ci0KLQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwotfQotCi1pbnQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKgotICogTG9jYWwgQVBJQyBzdGFydCBhbmQgc2h1dGRvd24KLSAqLwotCi0vKioKLSAqIGNsZWFyX2xvY2FsX0FQSUMgLSBzaHV0ZG93biB0aGUgbG9jYWwgQVBJQwotICoKLSAqIFRoaXMgaXMgY2FsbGVkLCB3aGVuIGEgQ1BVIGlzIGRpc2FibGVkIGFuZCBiZWZvcmUgcmVib290aW5nLCBzbyB0aGUgc3RhdGUgb2YKLSAqIHRoZSBsb2NhbCBBUElDIGhhcyBubyBkYW5nbGluZyBsZWZ0b3ZlcnMuIEFsc28gdXNlZCB0byBjbGVhbm91dCBhbnkgQklPUwotICogbGVmdG92ZXJzIGR1cmluZyBib290LgotICovCi12b2lkIGNsZWFyX2xvY2FsX0FQSUModm9pZCkKLXsKLQlpbnQgbWF4bHZ0OwotCXUzMiB2OwotCi0JLyogQVBJQyBoYXNuJ3QgYmVlbiBtYXBwZWQgeWV0ICovCi0JaWYgKCFhcGljX3BoeXMpCi0JCXJldHVybjsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQkvKgotCSAqIE1hc2tpbmcgYW4gTFZUIGVudHJ5IGNhbiB0cmlnZ2VyIGEgbG9jYWwgQVBJQyBlcnJvcgotCSAqIGlmIHRoZSB2ZWN0b3IgaXMgemVyby4gTWFzayBMVlRFUlIgZmlyc3QgdG8gcHJldmVudCB0aGlzLgotCSAqLwotCWlmIChtYXhsdnQgPj0gMykgewotCQl2ID0gRVJST1JfQVBJQ19WRUNUT1I7IC8qIGFueSBub24temVybyB2ZWN0b3Igd2lsbCBkbyAqLwotCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0JLyoKLQkgKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIHNldCBtYXNrcyBvbmx5IGZpcnN0IHRvIGRlYXNzZXJ0Ci0JICogYW55IGxldmVsLXRyaWdnZXJlZCBzb3VyY2VzLgotCSAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCWlmIChtYXhsdnQgPj0gNCkgewotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQotCS8qIGxldHMgbm90IHRvdWNoIHRoaXMgaWYgd2UgZGlkbid0IGZyb2IgaXQgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChYODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkgewotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0jZW5kaWYKLQkvKgotCSAqIENsZWFuIEFQSUMgc3RhdGUgZm9yIG90aGVyIE9TczoKLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDMpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfTFZUX01BU0tFRCk7Ci0KLQkvKiBJbnRlZ3JhdGVkIEFQSUMgKCE4MjQ4OURYKSA/ICovCi0JaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSkgewotCQlpZiAobWF4bHZ0ID4gMykKLQkJCS8qIENsZWFyIEVTUiBkdWUgdG8gUGVudGl1bSBlcnJhdGEgM0FQIGFuZCAxMUFQICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY19yZWFkKEFQSUNfRVNSKTsKLQl9Ci19Ci0KLS8qKgotICogZGlzYWJsZV9sb2NhbF9BUElDIC0gY2xlYXIgYW5kIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMKLSAqLwotdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQljbGVhcl9sb2NhbF9BUElDKCk7Ci0KLQkvKgotCSAqIERpc2FibGUgQVBJQyAoaW1wbGllcyBjbGVhcmluZyBvZiByZWdpc3RlcnMKLQkgKiBmb3IgODI0ODlEWCEpLgotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIFdoZW4gTEFQSUMgd2FzIGRpc2FibGVkIGJ5IHRoZSBCSU9TIGFuZCBlbmFibGVkIGJ5IHRoZSBrZXJuZWwsCi0JICogcmVzdG9yZSB0aGUgZGlzYWJsZWQgc3RhdGUuCi0JICovCi0JaWYgKGVuYWJsZWRfdmlhX2FwaWNiYXNlKSB7Ci0JCXVuc2lnbmVkIGludCBsLCBoOwotCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFOwotCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JfQotI2VuZGlmCi19Ci0KLS8qCi0gKiBJZiBMaW51eCBlbmFibGVkIHRoZSBMQVBJQyBhZ2FpbnN0IHRoZSBCSU9TIGRlZmF1bHQgZGlzYWJsZSBpdCBkb3duIGJlZm9yZQotICogcmUtZW50ZXJpbmcgdGhlIEJJT1Mgb24gc2h1dGRvd24uICBPdGhlcndpc2UgdGhlIEJJT1MgbWF5IGdldCBjb25mdXNlZCBhbmQKLSAqIG5vdCBwb3dlci1vZmYuICBBZGRpdGlvbmFsbHkgY2xlYXIgYWxsIExWVCBlbnRyaWVzIGJlZm9yZSBkaXNhYmxlX2xvY2FsX0FQSUMKLSAqIGZvciB0aGUgY2FzZSB3aGVyZSBMaW51eCBkaWRuJ3QgZW5hYmxlIHRoZSBMQVBJQy4KLSAqLwotdm9pZCBsYXBpY19zaHV0ZG93bih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmICghZW5hYmxlZF92aWFfYXBpY2Jhc2UpCi0JCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQllbHNlCi0jZW5kaWYKLQkJZGlzYWJsZV9sb2NhbF9BUElDKCk7Ci0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdG8gdmVyaWZ5IHRoYXQgd2UncmUgbG9va2luZyBhdCBhIHJlYWwgbG9jYWwgQVBJQy4KLSAqIENoZWNrIHRoZXNlIGFnYWluc3QgeW91ciBib2FyZCBpZiB0aGUgQ1BVcyBhcmVuJ3QgZ2V0dGluZwotICogc3RhcnRlZCBmb3Igbm8gYXBwYXJlbnQgcmVhc29uLgotICovCi1pbnQgX19pbml0IHZlcmlmeV9sb2NhbF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHJlZzAsIHJlZzE7Ci0KLQkvKgotCSAqIFRoZSB2ZXJzaW9uIHJlZ2lzdGVyIGlzIHJlYWQtb25seSBpbiBhIHJlYWwgQVBJQy4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBWRVJTSU9OOiAleFxuIiwgcmVnMCk7Ci0JYXBpY193cml0ZShBUElDX0xWUiwgcmVnMCBeIEFQSUNfTFZSX01BU0spOwotCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIFZFUlNJT046ICV4XG4iLCByZWcxKTsKLQotCS8qCi0JICogVGhlIHR3byB2ZXJzaW9uIHJlYWRzIGFib3ZlIHNob3VsZCBwcmludCB0aGUgc2FtZQotCSAqIG51bWJlcnMuICBJZiB0aGUgc2Vjb25kIG9uZSBpcyBkaWZmZXJlbnQsIHRoZW4gd2UKLQkgKiBwb2tlIGF0IGEgbm9uLUFQSUMuCi0JICovCi0JaWYgKHJlZzEgIT0gcmVnMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZSB2ZXJzaW9uIGxvb2tzIHJlYXNvbmFibHkuCi0JICovCi0JcmVnMSA9IEdFVF9BUElDX1ZFUlNJT04ocmVnMCk7Ci0JaWYgKHJlZzEgPT0gMHgwMCB8fCByZWcxID09IDB4ZmYpCi0JCXJldHVybiAwOwotCXJlZzEgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0JaWYgKHJlZzEgPCAweDAyIHx8IHJlZzEgPT0gMHhmZikKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoZSBJRCByZWdpc3RlciBpcyByZWFkL3dyaXRlIGluIGEgcmVhbCBBUElDLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgSUQ6ICV4XG4iLCByZWcwKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIHJlZzAgXiBBUElDX0lEX01BU0spOwotCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgSUQ6ICV4XG4iLCByZWcxKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIHJlZzApOwotCWlmIChyZWcxICE9IChyZWcwIF4gQVBJQ19JRF9NQVNLKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoZSBuZXh0IHR3byBhcmUganVzdCB0byBzZWUgaWYgd2UgaGF2ZSBzYW5lIHZhbHVlcy4KLQkgKiBUaGV5J3JlIG9ubHkgcmVhbGx5IHJlbGV2YW50IGlmIHdlJ3JlIGluIFZpcnR1YWwgV2lyZQotCSAqIGNvbXBhdGliaWxpdHkgbW9kZSwgYnV0IG1vc3QgYm94ZXMgYXJlIGFueW1vcmUuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIExWVDA6ICV4XG4iLCByZWcwKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgTFZUMTogJXhcbiIsIHJlZzEpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qKgotICogc3luY19BcmJfSURzIC0gc3luY2hyb25pemUgQVBJQyBidXMgYXJiaXRyYXRpb24gSURzCi0gKi8KLXZvaWQgX19pbml0IHN5bmNfQXJiX0lEcyh2b2lkKQotewotCS8qCi0JICogVW5zdXBwb3J0ZWQgb24gUDQgLSBzZWUgSW50ZWwgRGV2LiBNYW51YWwgVm9sLiAzLCBDaC4gOC42LjEgQW5kIG5vdAotCSAqIG5lZWRlZCBvbiBBTUQuCi0JICovCi0JaWYgKG1vZGVybl9hcGljKCkgfHwgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGlkbGUuCi0JICovCi0JYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiU3luY2hyb25pemluZyBBcmIgSURzLlxuIik7Ci0JYXBpY193cml0ZShBUElDX0lDUiwgQVBJQ19ERVNUX0FMTElOQyB8Ci0JCQlBUElDX0lOVF9MRVZFTFRSSUcgfCBBUElDX0RNX0lOSVQpOwotfQotCi0vKgotICogQW4gaW5pdGlhbCBzZXR1cCBvZiB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCi0gKi8KLXZvaWQgX19pbml0IGluaXRfYnNwX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQkvKgotCSAqIERvbid0IGRvIHRoZSBzZXR1cCBub3cgaWYgd2UgaGF2ZSBhIFNNUCBCSU9TIGFzIHRoZQotCSAqIHRocm91Z2gtSS9PLUFQSUMgdmlydHVhbCB3aXJlIG1vZGUgbWlnaHQgYmUgYWN0aXZlLgotCSAqLwotCWlmIChzbXBfZm91bmRfY29uZmlnIHx8ICFjcHVfaGFzX2FwaWMpCi0JCXJldHVybjsKLQotCS8qCi0JICogRG8gbm90IHRydXN0IHRoZSBsb2NhbCBBUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cC4KLQkgKi8KLQljbGVhcl9sb2NhbF9BUElDKCk7Ci0KLQkvKgotCSAqIEVuYWJsZSBBUElDLgotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKiBUaGlzIGJpdCBpcyByZXNlcnZlZCBvbiBQNC9YZW9uIGFuZCBzaG91bGQgYmUgY2xlYXJlZCAqLwotCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpICYmCi0JICAgIChib290X2NwdV9kYXRhLng4NiA9PSAxNSkpCi0JCXZhbHVlICY9IH5BUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0JZWxzZQotI2VuZGlmCi0JCXZhbHVlIHw9IEFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKLQl2YWx1ZSB8PSBTUFVSSU9VU19BUElDX1ZFQ1RPUjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JLyoKLQkgKiBTZXQgdXAgdGhlIHZpcnR1YWwgd2lyZSBtb2RlLgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7Ci0JdmFsdWUgPSBBUElDX0RNX05NSTsKLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkJCS8qIDgyNDg5RFggKi8KLQkJdmFsdWUgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgbGFwaWNfc2V0dXBfZXNyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBvbGR2YWx1ZSwgdmFsdWUsIG1heGx2dDsKLQlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpICYmICFlc3JfZGlzYWJsZSkgewotCQlpZiAoZXNyX2Rpc2FibGUpIHsKLQkJCS8qCi0JCQkgKiBTb21ldGhpbmcgdW50cmFjZWFibGUgaXMgY3JlYXRpbmcgYmFkIGludGVycnVwdHMgb24KLQkJCSAqIHNlY29uZGFyeSBxdWFkcyAuLi4gZm9yIHRoZSBtb21lbnQsIGp1c3QgbGVhdmUgdGhlCi0JCQkgKiBFU1IgZGlzYWJsZWQgLSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUKLQkJCSAqIGVycm9ycyBhbnl3YXkgLSBtYmxpZ2gKLQkJCSAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTGVhdmluZyBFU1IgZGlzYWJsZWQuXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiAhODI0ODlEWCAqLwotCQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0JCWlmIChtYXhsdnQgPiAzKQkJLyogRHVlIHRvIHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLiAqLwotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCW9sZHZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQotCQkvKiBlbmFibGVzIHNlbmRpbmcgZXJyb3JzICovCi0JCXZhbHVlID0gRVJST1JfQVBJQ19WRUNUT1I7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHZhbHVlKTsKLQkJLyoKLQkJICogc3BlYyBzYXlzIGNsZWFyIGVycm9ycyBhZnRlciBlbmFibGluZyB2ZWN0b3IuCi0JCSAqLwotCQlpZiAobWF4bHZ0ID4gMykKLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JCWlmICh2YWx1ZSAhPSBvbGR2YWx1ZSkKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVTUiB2YWx1ZSBiZWZvcmUgZW5hYmxpbmcgIgotCQkJCSJ2ZWN0b3I6IDB4JTA4bHggIGFmdGVyOiAweCUwOGx4XG4iLAotCQkJCW9sZHZhbHVlLCB2YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gRVNSIGZvciA4MjQ4OURYLlxuIik7Ci0JfQotfQotCi0KLS8qKgotICogc2V0dXBfbG9jYWxfQVBJQyAtIHNldHVwIHRoZSBsb2NhbCBBUElDCi0gKi8KLXZvaWQgX19jcHVpbml0IHNldHVwX2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnRlZ3JhdGVkOwotCWludCBpLCBqOwotCi0JLyogUG91bmQgdGhlIEVTUiByZWFsbHkgaGFyZCBvdmVyIHRoZSBoZWFkIHdpdGggYSBiaWcgaGFtbWVyIC0gbWJsaWdoICovCi0JaWYgKGVzcl9kaXNhYmxlKSB7Ci0JCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCX0KLQotCWludGVncmF0ZWQgPSBsYXBpY19pc19pbnRlZ3JhdGVkKCk7Ci0KLQkvKgotCSAqIERvdWJsZS1jaGVjayB3aGV0aGVyIHRoaXMgQVBJQyBpcyByZWFsbHkgcmVnaXN0ZXJlZC4KLQkgKi8KLQlpZiAoIWFwaWNfaWRfcmVnaXN0ZXJlZCgpKQotCQlXQVJOX09OX09OQ0UoMSk7Ci0KLQkvKgotCSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCi0JICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKLQkgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgotCSAqLwotCWluaXRfYXBpY19sZHIoKTsKLQotCS8qCi0JICogU2V0IFRhc2sgUHJpb3JpdHkgdG8gJ2FjY2VwdCBhbGwnLiBXZSBuZXZlciBjaGFuZ2UgdGhpcwotCSAqIGxhdGVyIG9uLgotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7Ci0JdmFsdWUgJj0gfkFQSUNfVFBSSV9NQVNLOwotCWFwaWNfd3JpdGUoQVBJQ19UQVNLUFJJLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIEFmdGVyIGEgY3Jhc2gsIHdlIG5vIGxvbmdlciBzZXJ2aWNlIHRoZSBpbnRlcnJ1cHRzIGFuZCBhIHBlbmRpbmcKLQkgKiBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwgbWlnaHQgc3RpbGwgaGF2ZSBJU1IgYml0IHNldC4KLQkgKgotCSAqIE1vc3QgcHJvYmFibHkgYnkgbm93IENQVSBoYXMgc2VydmljZWQgdGhhdCBwZW5kaW5nIGludGVycnVwdCBhbmQKLQkgKiBpdCBtaWdodCBub3QgaGF2ZSBkb25lIHRoZSBhY2tfQVBJQ19pcnEoKSBiZWNhdXNlIGl0IHRob3VnaHQsCi0JICogaW50ZXJydXB0IGNhbWUgZnJvbSBpODI1OSBhcyBFeHRJbnQuIExBUElDIGRpZCBub3QgZ2V0IEVPSSBzbyBpdAotCSAqIGRvZXMgbm90IGNsZWFyIHRoZSBJU1IgYml0IGFuZCBjcHUgdGhpbmtzIGl0IGhhcyBhbHJlYWR5IHNlcml2Y2VkCi0JICogdGhlIGludGVycnVwdC4gSGVuY2UgYSB2ZWN0b3IgbWlnaHQgZ2V0IGxvY2tlZC4gSXQgd2FzIG5vdGljZWQKLQkgKiBmb3IgdGltZXIgaXJxICh2ZWN0b3IgMHgzMSkuIElzc3VlIGFuIGV4dHJhIEVPSSB0byBjbGVhciBJU1IuCi0JICovCi0JZm9yIChpID0gQVBJQ19JU1JfTlIgLSAxOyBpID49IDA7IGktLSkgewotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0lTUiArIGkqMHgxMCk7Ci0JCWZvciAoaiA9IDMxOyBqID49IDA7IGotLSkgewotCQkJaWYgKHZhbHVlICYgKDE8PGopKQotCQkJCWFja19BUElDX2lycSgpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSBhcmUgYWxsIHNldCB1cCwgZW5hYmxlIHRoZSBBUElDCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQkvKgotCSAqIEVuYWJsZSBBUElDCi0JICovCi0JdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQotCS8qCi0JICogU29tZSB1bmtub3duIEludGVsIElPL0FQSUMgKG9yIEFQSUMpIGVycmF0YSBpcyBiaXRpbmcgdXMgd2l0aAotCSAqIGNlcnRhaW4gbmV0d29ya2luZyBjYXJkcy4gSWYgaGlnaCBmcmVxdWVuY3kgaW50ZXJydXB0cyBhcmUKLQkgKiBoYXBwZW5pbmcgb24gYSBwYXJ0aWN1bGFyIElPQVBJQyBwaW4sIHBsdXMgdGhlIElPQVBJQyByb3V0aW5nCi0JICogZW50cnkgaXMgbWFza2VkL3VubWFza2VkIGF0IGEgaGlnaCByYXRlIGFzIHdlbGwgdGhlbiBzb29uZXIgb3IKLQkgKiBsYXRlciBJT0FQSUMgbGluZSBnZXRzICdzdHVjaycsIG5vIG1vcmUgaW50ZXJydXB0cyBhcmUgcmVjZWl2ZWQKLQkgKiBmcm9tIHRoZSBkZXZpY2UuIElmIGZvY3VzIENQVSBpcyBkaXNhYmxlZCB0aGVuIHRoZSBoYW5nIGdvZXMKLQkgKiBhd2F5LCBvaCB3ZWxsIDotKAotCSAqCi0JICogWyBUaGlzIGJ1ZyBjYW4gYmUgcmVwcm9kdWNlZCBlYXNpbHkgd2l0aCBhIGxldmVsLXRyaWdnZXJlZAotCSAqICAgUENJIE5lMjAwMCBuZXR3b3JraW5nIGNhcmRzIGFuZCBQSUkvUElJSSBwcm9jZXNzb3JzLCBkdWFsCi0JICogICBCWCBjaGlwc2V0LiBdCi0JICovCi0JLyoKLQkgKiBBY3R1YWxseSBkaXNhYmxpbmcgdGhlIGZvY3VzIENQVSBjaGVjayBqdXN0IG1ha2VzIHRoZSBoYW5nIGxlc3MKLQkgKiBmcmVxdWVudCBhcyBpdCBtYWtlcyB0aGUgaW50ZXJydXB0IGRpc3RyaWJ1dG9uIG1vZGVsIGJlIG1vcmUKLQkgKiBsaWtlIExSVSB0aGFuIE1SVSAodGhlIHNob3J0LXRlcm0gbG9hZCBpcyBtb3JlIGV2ZW4gYWNyb3NzIENQVXMpLgotCSAqIFNlZSBhbHNvIHRoZSBjb21tZW50IGluIGVuZF9sZXZlbF9pb2FwaWNfaXJxKCkuICAtLW1hY3JvCi0JICovCi0KLQkvKiBFbmFibGUgZm9jdXMgcHJvY2Vzc29yIChiaXQ9PTApICovCi0JdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKLQotCS8qCi0JICogU2V0IHNwdXJpb3VzIElSUSB2ZWN0b3IKLQkgKi8KLQl2YWx1ZSB8PSBTUFVSSU9VU19BUElDX1ZFQ1RPUjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JLyoKLQkgKiBTZXQgdXAgTFZUMCwgTFZUMToKLQkgKgotCSAqIHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgb24gdGhlIEJQJ3MgTElOVDAuIFRoaXMgaXMgbm90Ci0JICogc3RyaWN0bHkgbmVjZXNzYXJ5IGluIHB1cmUgc3ltbWV0cmljLUlPIG1vZGUsIGJ1dCBzb21ldGltZXMKLQkgKiB3ZSBkZWxlZ2F0ZSBpbnRlcnJ1cHRzIHRvIHRoZSA4MjU5QS4KLQkgKi8KLQkvKgotCSAqIFRPRE86IHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgZnJvbSB0aHJvdWdoLUkvTy1BUElDPyAtLW1hY3JvCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKSAmIEFQSUNfTFZUX01BU0tFRDsKLQlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiAocGljX21vZGUgfHwgIXZhbHVlKSkgewotCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJlbmFibGVkIEV4dElOVCBvbiBDUFUjJWRcbiIsCi0JCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9IGVsc2UgewotCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UIHwgQVBJQ19MVlRfTUFTS0VEOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXNrZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKLQkJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOwotCX0KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOwotCi0JLyoKLQkgKiBvbmx5IHRoZSBCUCBzaG91bGQgc2VlIHRoZSBMSU5UMSBOTUkgc2lnbmFsLCBvYnZpb3VzbHkuCi0JICovCi0JaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCXZhbHVlID0gQVBJQ19ETV9OTUk7Ci0JZWxzZQotCQl2YWx1ZSA9IEFQSUNfRE1fTk1JIHwgQVBJQ19MVlRfTUFTS0VEOwotCWlmICghaW50ZWdyYXRlZCkJCS8qIDgyNDg5RFggKi8KLQkJdmFsdWUgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotfQotCi12b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQotewotCWxhcGljX3NldHVwX2VzcigpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXsKLQkJdW5zaWduZWQgaW50IHZhbHVlOwotCQkvKiBEaXNhYmxlIHRoZSBsb2NhbCBhcGljIHRpbWVyICovCi0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JCXZhbHVlIHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdmFsdWUpOwotCX0KLSNlbmRpZgotCi0Jc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7Ci0JYXBpY19wbV9hY3RpdmF0ZSgpOwotfQotCi0vKgotICogRGV0ZWN0IGFuZCBpbml0aWFsaXplIEFQSUMKLSAqLwotc3RhdGljIGludCBfX2luaXQgZGV0ZWN0X2luaXRfQVBJQyh2b2lkKQotewotCXUzMiBoLCBsLCBmZWF0dXJlczsKLQotCS8qIERpc2FibGVkIGJ5IGtlcm5lbCBvcHRpb24/ICovCi0JaWYgKGRpc2FibGVfYXBpYykKLQkJcmV0dXJuIC0xOwotCi0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKLQljYXNlIFg4Nl9WRU5ET1JfQU1EOgotCQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPiAxKSB8fAotCQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKLQkJCWJyZWFrOwotCQlnb3RvIG5vX2FwaWM7Ci0JY2FzZSBYODZfVkVORE9SX0lOVEVMOgotCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiB8fCBib290X2NwdV9kYXRhLng4NiA9PSAxNSB8fAotCQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDUgJiYgY3B1X2hhc19hcGljKSkKLQkJCWJyZWFrOwotCQlnb3RvIG5vX2FwaWM7Ci0JZGVmYXVsdDoKLQkJZ290byBub19hcGljOwotCX0KLQotCWlmICghY3B1X2hhc19hcGljKSB7Ci0JCS8qCi0JCSAqIE92ZXItcmlkZSBCSU9TIGFuZCB0cnkgdG8gZW5hYmxlIHRoZSBsb2NhbCBBUElDIG9ubHkgaWYKLQkJICogImxhcGljIiBzcGVjaWZpZWQuCi0JCSAqLwotCQlpZiAoIWZvcmNlX2VuYWJsZV9sb2NhbF9hcGljKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJMb2NhbCBBUElDIGRpc2FibGVkIGJ5IEJJT1MgLS0gIgotCQkJICAgICAgICJ5b3UgY2FuIGVuYWJsZSBpdCB3aXRoIFwibGFwaWNcIlxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJLyoKLQkJICogU29tZSBCSU9TZXMgZGlzYWJsZSB0aGUgbG9jYWwgQVBJQyBpbiB0aGUgQVBJQ19CQVNFCi0JCSAqIE1TUi4gVGhpcyBjYW4gb25seSBiZSBkb25lIGluIHNvZnR3YXJlIGZvciBJbnRlbCBQNiBvciBsYXRlcgotCQkgKiBhbmQgQU1EIEs3IChNb2RlbCA+IDEpIG9yIGxhdGVyLgotCQkgKi8KLQkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQlpZiAoIShsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJMb2NhbCBBUElDIGRpc2FibGVkIGJ5IEJJT1MgLS0gcmVlbmFibGluZy5cbiIpOwotCQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKLQkJCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKLQkJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJCWVuYWJsZWRfdmlhX2FwaWNiYXNlID0gMTsKLQkJfQotCX0KLQkvKgotCSAqIFRoZSBBUElDIGZlYXR1cmUgYml0IHNob3VsZCBub3cgYmUgZW5hYmxlZAotCSAqIGluIGBjcHVpZCcKLQkgKi8KLQlmZWF0dXJlcyA9IGNwdWlkX2VkeCgxKTsKLQlpZiAoIShmZWF0dXJlcyAmICgxIDw8IFg4Nl9GRUFUVVJFX0FQSUMpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgZW5hYmxlIEFQSUMhXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlzZXRfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7Ci0JbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7Ci0KLQkvKiBUaGUgQklPUyBtYXkgaGF2ZSBzZXQgdXAgdGhlIEFQSUMgYXQgc29tZSBvdGhlciBhZGRyZXNzICovCi0JcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCWlmIChsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKQotCQltcF9sYXBpY19hZGRyID0gbCAmIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBhbmQgZW5hYmxlZCBsb2NhbCBBUElDIVxuIik7Ci0KLQlhcGljX3BtX2FjdGl2YXRlKCk7Ci0KLQlyZXR1cm4gMDsKLQotbm9fYXBpYzoKLQlwcmludGsoS0VSTl9JTkZPICJObyBsb2NhbCBBUElDIHByZXNlbnQgb3IgaGFyZHdhcmUgZGlzYWJsZWRcbiIpOwotCXJldHVybiAtMTsKLX0KLQotLyoqCi0gKiBpbml0X2FwaWNfbWFwcGluZ3MgLSBpbml0aWFsaXplIEFQSUMgbWFwcGluZ3MKLSAqLwotdm9pZCBfX2luaXQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpCi17Ci0JLyoKLQkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIHNldCB1cCBhIGZha2UgYWxsCi0JICogemVyb2VzIHBhZ2UgdG8gc2ltdWxhdGUgdGhlIGxvY2FsIEFQSUMgYW5kIGFub3RoZXIKLQkgKiBvbmUgZm9yIHRoZSBJTy1BUElDLgotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiBkZXRlY3RfaW5pdF9BUElDKCkpIHsKLQkJYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJYXBpY19waHlzID0gX19wYShhcGljX3BoeXMpOwotCX0gZWxzZQotCQlhcGljX3BoeXMgPSBtcF9sYXBpY19hZGRyOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFwaWNfcGh5cyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIm1hcHBlZCBBUElDIHRvICUwOGx4ICglMDhseClcbiIsIEFQSUNfQkFTRSwKLQkgICAgICAgYXBpY19waHlzKTsKLQotCS8qCi0JICogRmV0Y2ggdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBpbiBjYXNlIHdlIGhhdmUgYQotCSAqIGRlZmF1bHQgY29uZmlndXJhdGlvbiAob3IgdGhlIE1QIHRhYmxlIGlzIGJyb2tlbikuCi0JICovCi0JaWYgKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9PSAtMVUpCi0JCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwotCi19Ci0KLS8qCi0gKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFuZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKLSAqIGEgVVAga2VybmVsLgotICovCi0KLWludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKLQotaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCi17Ci0JaWYgKCFzbXBfZm91bmRfY29uZmlnICYmICFjcHVfaGFzX2FwaWMpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogQ29tcGxhaW4gaWYgdGhlIEJJT1MgcHJldGVuZHMgdGhlcmUgaXMgb25lLgotCSAqLwotCWlmICghY3B1X2hhc19hcGljICYmCi0JICAgIEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAjJWQgbm90IGRldGVjdGVkIS4uLlxuIiwKLQkJICAgICAgIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Ci0JCWNsZWFyX2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FQSUMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JdmVyaWZ5X2xvY2FsX0FQSUMoKTsKLQotCWNvbm5lY3RfYnNwX0FQSUMoKTsKLQotCS8qCi0JICogSGFjazogSW4gY2FzZSBvZiBrZHVtcCwgYWZ0ZXIgYSBjcmFzaCwga2VybmVsIG1pZ2h0IGJlIGJvb3RpbmcKLQkgKiBvbiBhIGNwdSB3aXRoIG5vbi16ZXJvIGxhcGljIGlkLiBCdXQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCi0JICogbWlnaHQgYmUgemVybyBpZiByZWFkIGZyb20gTVAgdGFibGVzLiBHZXQgaXQgZnJvbSBMQVBJQy4KLQkgKi8KLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAotCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwotI2VuZGlmCi0JcGh5c2lkX3NldF9tYXNrX29mX3BoeXNpZChib290X2NwdV9waHlzaWNhbF9hcGljaWQsICZwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0KLQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQlpZiAoIXNtcF9mb3VuZF9jb25maWcgfHwgc2tpcF9pb2FwaWNfc2V0dXAgfHwgIW5yX2lvYXBpY3MpCi0jZW5kaWYKLQkJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7Ci0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQlpZiAoc21wX2ZvdW5kX2NvbmZpZykKLQkJaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQotCQkJc2V0dXBfSU9fQVBJQygpOwotI2VuZGlmCi0Jc2V0dXBfYm9vdF9jbG9jaygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIGludGVycnVwdHMKLSAqLwotCi0vKgotICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIF9uZXZlcl8gaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQotICovCi12b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyB2OwotCi0JaXJxX2VudGVyKCk7Ci0JLyoKLQkgKiBDaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIHNwdXJpb3VzIGludGVycnVwdCBhbmQgQUNLIGl0Ci0JICogaWYgaXQgaXMgYSB2ZWN0b3JlZCBvbmUuICBKdXN0IGluIGNhc2UuLi4KLQkgKiBTcHVyaW91cyBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgQUNLZWQuCi0JICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0lTUiArICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiB+MHgxZikgPj4gMSkpOwotCWlmICh2ICYgKDEgPDwgKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgxZikpKQotCQlhY2tfQVBJQ19pcnEoKTsKLQotCS8qIHNlZSBzdy1kZXYtbWFuIHZvbCAzLCBjaGFwdGVyIDcuNC4xMy41ICovCi0JcHJpbnRrKEtFUk5fSU5GTyAic3B1cmlvdXMgQVBJQyBpbnRlcnJ1cHQgb24gQ1BVIyVkLCAiCi0JICAgICAgICJzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfc3B1cmlvdXNfY291bnQrKzsKLQlpcnFfZXhpdCgpOwotfQotCi0vKgotICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKLSAqLwotdm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgdiwgdjE7Ci0KLQlpcnFfZW50ZXIoKTsKLQkvKiBGaXJzdCB0aWNrbGUgdGhlIGhhcmR3YXJlLCBvbmx5IHRoZW4gcmVwb3J0IHdoYXQgd2VudCBvbi4gLS0gUkVXICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JdjEgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFja19BUElDX2lycSgpOwotCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOwotCi0JLyogSGVyZSBpcyB3aGF0IHRoZSBBUElDIGVycm9yIGJpdHMgbWVhbjoKLQkgICAwOiBTZW5kIENTIGVycm9yCi0JICAgMTogUmVjZWl2ZSBDUyBlcnJvcgotCSAgIDI6IFNlbmQgYWNjZXB0IGVycm9yCi0JICAgMzogUmVjZWl2ZSBhY2NlcHQgZXJyb3IKLQkgICA0OiBSZXNlcnZlZAotCSAgIDU6IFNlbmQgaWxsZWdhbCB2ZWN0b3IKLQkgICA2OiBSZWNlaXZlZCBpbGxlZ2FsIHZlY3RvcgotCSAgIDc6IElsbGVnYWwgcmVnaXN0ZXIgYWRkcmVzcwotCSovCi0JcHJpbnRrKEtFUk5fREVCVUcgIkFQSUMgZXJyb3Igb24gQ1BVJWQ6ICUwMmx4KCUwMmx4KVxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ICwgdjEpOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qKgotICogY29ubmVjdF9ic3BfQVBJQyAtIGF0dGFjaCB0aGUgQVBJQyB0byB0aGUgaW50ZXJydXB0IHN5c3RlbQotICovCi12b2lkIF9faW5pdCBjb25uZWN0X2JzcF9BUElDKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgotCQkgKi8KLQkJY2xlYXJfbG9jYWxfQVBJQygpOwotCQkvKgotCQkgKiBQSUMgbW9kZSwgZW5hYmxlIEFQSUMgbW9kZSBpbiB0aGUgSU1DUiwgaS5lLiAgY29ubmVjdCBCU1AncwotCQkgKiBsb2NhbCBBUElDIHRvIElOVCBhbmQgTk1JIGxpbmVzLgotCQkgKi8KLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibGVhdmluZyBQSUMgbW9kZSwgIgotCQkJCSJlbmFibGluZyBBUElDIG1vZGUuXG4iKTsKLQkJb3V0YigweDcwLCAweDIyKTsKLQkJb3V0YigweDAxLCAweDIzKTsKLQl9Ci0jZW5kaWYKLQllbmFibGVfYXBpY19tb2RlKCk7Ci19Ci0KLS8qKgotICogZGlzY29ubmVjdF9ic3BfQVBJQyAtIGRldGFjaCB0aGUgQVBJQyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCi0gKiBAdmlydF93aXJlX3NldHVwOglpbmRpY2F0ZXMsIHdoZXRoZXIgdmlydHVhbCB3aXJlIG1vZGUgaXMgc2VsZWN0ZWQKLSAqCi0gKiBWaXJ0dWFsIHdpcmUgbW9kZSBpcyBuZWNlc3NhcnkgdG8gZGVsaXZlciBsZWdhY3kgaW50ZXJydXB0cyBldmVuIHdoZW4gdGhlCi0gKiBBUElDIGlzIGRpc2FibGVkLgotICovCi12b2lkIGRpc2Nvbm5lY3RfYnNwX0FQSUMoaW50IHZpcnRfd2lyZV9zZXR1cCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKHBpY19tb2RlKSB7Ci0JCS8qCi0JCSAqIFB1dCB0aGUgYm9hcmQgYmFjayBpbnRvIFBJQyBtb2RlIChoYXMgYW4gZWZmZWN0IG9ubHkgb24KLQkJICogY2VydGFpbiBvbGRlciBib2FyZHMpLiAgTm90ZSB0aGF0IEFQSUMgaW50ZXJydXB0cywgaW5jbHVkaW5nCi0JCSAqIElQSXMsIHdvbid0IHdvcmsgYmV5b25kIHRoaXMgcG9pbnQhICBUaGUgb25seSBleGNlcHRpb24gYXJlCi0JCSAqIElOSVQgSVBJcy4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImRpc2FibGluZyBBUElDIG1vZGUsICIKLQkJCQkiZW50ZXJpbmcgUElDIG1vZGUuXG4iKTsKLQkJb3V0YigweDcwLCAweDIyKTsKLQkJb3V0YigweDAwLCAweDIzKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCi0JLyogR28gYmFjayB0byBWaXJ0dWFsIFdpcmUgY29tcGF0aWJpbGl0eSBtb2RlICovCi0KLQkvKiBGb3IgdGhlIHNwdXJpb3VzIGludGVycnVwdCB1c2UgdmVjdG9yIEYsIGFuZCBlbmFibGUgaXQgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0JdmFsdWUgfD0gMHhmOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQlpZiAoIXZpcnRfd2lyZV9zZXR1cCkgewotCQkvKgotCQkgKiBGb3IgTFZUMCBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKLQkJICogZXh0ZXJuYWwgYW5kIGVuYWJsZWQKLQkJICovCi0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8Ci0JCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQkJdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOwotCQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9FWFRJTlQpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOwotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgTFZUMCAqLwotCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0KLQkvKgotCSAqIEZvciBMVlQxIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLAotCSAqIG5taSBhbmQgZW5hYmxlZAotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JdmFsdWUgJj0gfihBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKLQkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKLQkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOwotCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKLQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9OTUkpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCi17Ci0JaW50IGNwdTsKLQljcHVtYXNrX3QgdG1wX21hcDsKLQotCS8qCi0JICogVmFsaWRhdGUgdmVyc2lvbgotCSAqLwotCWlmICh2ZXJzaW9uID09IDB4MCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJCSU9TIGJ1ZywgQVBJQyB2ZXJzaW9uIGlzIDAgZm9yIENQVSMlZCEgIgotCQkJCSJmaXhpbmcgdXAgdG8gMHgxMC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCXZlcnNpb24pOwotCQl2ZXJzaW9uID0gMHgxMDsKLQl9Ci0JYXBpY192ZXJzaW9uW2FwaWNpZF0gPSB2ZXJzaW9uOwotCi0JaWYgKG51bV9wcm9jZXNzb3JzID49IE5SX0NQVVMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogTlJfQ1BVUyBsaW1pdCBvZiAlaSByZWFjaGVkLiIKLQkJCSIgIFByb2Nlc3NvciBpZ25vcmVkLlxuIiwgTlJfQ1BVUyk7Ci0JCXJldHVybjsKLQl9Ci0KLQludW1fcHJvY2Vzc29ycysrOwotCWNwdXNfY29tcGxlbWVudCh0bXBfbWFwLCBjcHVfcHJlc2VudF9tYXApOwotCWNwdSA9IGZpcnN0X2NwdSh0bXBfbWFwKTsKLQotCXBoeXNpZF9zZXQoYXBpY2lkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0JaWYgKGFwaWNpZCA9PSBib290X2NwdV9waHlzaWNhbF9hcGljaWQpIHsKLQkJLyoKLQkJICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBpcyByZXF1aXJlZCB0byBoYXZlIHByb2Nlc3NvcnMgbGlzdGVkCi0JCSAqIGluIHNhbWUgb3JkZXIgYXMgbG9naWNhbCBjcHUgbnVtYmVycy4gSGVuY2UgdGhlIGZpcnN0Ci0JCSAqIGVudHJ5IGlzIEJTUCwgYW5kIHNvIG9uLgotCQkgKi8KLQkJY3B1ID0gMDsKLQl9Ci0JaWYgKGFwaWNpZCA+IG1heF9waHlzaWNhbF9hcGljaWQpCi0JCW1heF9waHlzaWNhbF9hcGljaWQgPSBhcGljaWQ7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBXb3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBiaWdzbXAgd2hlbiBDT05GSUdfSE9UUExVR19DUFU9eQotCSAqIGJ1dCB3ZSBuZWVkIHRvIHdvcmsgb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2UgU01QX1NVU1BFTkQgZXRjCi0JICogYmVmb3JlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBzb21lIGNvbmZ1c2lvbi4KLQkgKiBpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCBudW1fcHJvY2Vzc29ycyA+IDgpCi0JICogICAgICAgLSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0JICovCi0JaWYgKG1heF9waHlzaWNhbF9hcGljaWQgPj0gOCkgewotCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKLQkJCQlkZWZfdG9fYmlnc21wID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJCWRlZl90b19iaWdzbXAgPSAxOwotCQl9Ci0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfU01QKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0JLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KLQlpZiAoZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpKSB7Ci0JCXUxNiAqY3B1X3RvX2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKTsKLQkJdTE2ICpiaW9zX2NwdV9hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKTsKLQotCQljcHVfdG9fYXBpY2lkW2NwdV0gPSBhcGljaWQ7Ci0JCWJpb3NfY3B1X2FwaWNpZFtjcHVdID0gYXBpY2lkOwotCX0gZWxzZSB7Ci0JCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkgPSBhcGljaWQ7Ci0JCXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKLQl9Ci0jZW5kaWYKLQotCWNwdV9zZXQoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKLQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotLyoKLSAqIFBvd2VyIG1hbmFnZW1lbnQKLSAqLwotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgc3RydWN0IHsKLQkvKgotCSAqICdhY3RpdmUnIGlzIHRydWUgaWYgdGhlIGxvY2FsIEFQSUMgd2FzIGVuYWJsZWQgYnkgdXMgYW5kCi0JICogbm90IHRoZSBCSU9TOyB0aGlzIHNpZ25pZmllcyB0aGF0IHdlIGFyZSBhbHNvIHJlc3BvbnNpYmxlCi0JICogZm9yIGRpc2FibGluZyBpdCBiZWZvcmUgZW50ZXJpbmcgYXBtL2FjcGkgc3VzcGVuZAotCSAqLwotCWludCBhY3RpdmU7Ci0JLyogci93IGFwaWMgZmllbGRzICovCi0JdW5zaWduZWQgaW50IGFwaWNfaWQ7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGFza3ByaTsKLQl1bnNpZ25lZCBpbnQgYXBpY19sZHI7Ci0JdW5zaWduZWQgaW50IGFwaWNfZGZyOwotCXVuc2lnbmVkIGludCBhcGljX3NwaXY7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0dDsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnRwYzsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnQwOwotCXVuc2lnbmVkIGludCBhcGljX2x2dDE7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0ZXJyOwotCXVuc2lnbmVkIGludCBhcGljX3RtaWN0OwotCXVuc2lnbmVkIGludCBhcGljX3RkY3I7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGhtcjsKLX0gYXBpY19wbV9zdGF0ZTsKLQotc3RhdGljIGludCBsYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtYXhsdnQ7Ci0KLQlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCWFwaWNfcG1fc3RhdGUuYXBpY19pZCA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdGFza3ByaSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sZHIgPSBhcGljX3JlYWQoQVBJQ19MRFIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19kZnIgPSBhcGljX3JlYWQoQVBJQ19ERlIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19zcGl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRwYyA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnQxID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVyciA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3RtaWN0ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190ZGNyID0gYXBpY19yZWFkKEFQSUNfVERDUik7Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KQotCQlhcGljX3BtX3N0YXRlLmFwaWNfdGhtciA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOwotI2VuZGlmCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGlzYWJsZV9sb2NhbF9BUElDKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxhcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGludCBsLCBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1heGx2dDsKLQotCWlmICghYXBpY19wbV9zdGF0ZS5hY3RpdmUpCi0JCXJldHVybiAwOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmICh4MmFwaWMpCi0JCWVuYWJsZV94MmFwaWMoKTsKLQllbHNlCi0jZW5kaWYKLQl7Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGUgQVBJQ0JBU0UgcG9pbnRzIHRvIHRoZSByaWdodCBhZGRyZXNzCi0JCSAqCi0JCSAqIEZJWE1FISBUaGlzIHdpbGwgYmUgd3JvbmcgaWYgd2UgZXZlciBzdXBwb3J0IHN1c3BlbmQgb24KLQkJICogU01QISBXZSdsbCBuZWVkIHRvIGRvIHRoaXMgYXMgcGFydCBvZiB0aGUgQ1BVIHJlc3RvcmUhCi0JCSAqLwotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0JCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgbXBfbGFwaWNfYWRkcjsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCX0KLQotCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEVSUk9SX0FQSUNfVkVDVE9SIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIGFwaWNfcG1fc3RhdGUuYXBpY19pZCk7Ci0JYXBpY193cml0ZShBUElDX0RGUiwgYXBpY19wbV9zdGF0ZS5hcGljX2Rmcik7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgYXBpY19wbV9zdGF0ZS5hcGljX2xkcik7Ci0JYXBpY193cml0ZShBUElDX1RBU0tQUkksIGFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpKTsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgYXBpY19wbV9zdGF0ZS5hcGljX3NwaXYpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQxKTsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKLQlpZiAobWF4bHZ0ID49IDUpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCBhcGljX3BtX3N0YXRlLmFwaWNfdGhtcik7Ci0jZW5kaWYKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHBjKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQpOwotCWFwaWNfd3JpdGUoQVBJQ19URENSLCBhcGljX3BtX3N0YXRlLmFwaWNfdGRjcik7Ci0JYXBpY193cml0ZShBUElDX1RNSUNULCBhcGljX3BtX3N0YXRlLmFwaWNfdG1pY3QpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCWFwaWNfcmVhZChBUElDX0VTUik7Ci0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVycik7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JYXBpY19yZWFkKEFQSUNfRVNSKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBkZXZpY2UgaGFzIG5vIHNodXRkb3duIG1ldGhvZCAtIGZ1bGx5IGZ1bmN0aW9uaW5nIGxvY2FsIEFQSUNzCi0gKiBhcmUgbmVlZGVkIG9uIGV2ZXJ5IENQVSB1cCB1bnRpbCBtYWNoaW5lX2hhbHQvcmVzdGFydC9wb3dlcm9mZi4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBsYXBpY19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibGFwaWMiLAotCS5yZXN1bWUJCT0gbGFwaWNfcmVzdW1lLAotCS5zdXNwZW5kCT0gbGFwaWNfc3VzcGVuZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfbGFwaWMgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJmxhcGljX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGFwaWNfcG1fYWN0aXZhdGUodm9pZCkKLXsKLQlhcGljX3BtX3N0YXRlLmFjdGl2ZSA9IDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfbGFwaWNfc3lzZnModm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuIDA7Ci0JLyogWFhYOiByZW1vdmUgc3VzcGVuZC9yZXN1bWUgcHJvY3MgaWYgIWFwaWNfcG1fc3RhdGUuYWN0aXZlPyAqLwotCi0JZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmxhcGljX3N5c2NsYXNzKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2xhcGljKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoaW5pdF9sYXBpY19zeXNmcyk7Ci0KLSNlbHNlCS8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpIHsgfQotCi0jZW5kaWYJLyogQ09ORklHX1BNICovCi0KLS8qCi0gKiBBUElDIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljKGNoYXIgKmFyZykKLXsKLQlmb3JjZV9lbmFibGVfbG9jYWxfYXBpYyA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibGFwaWMiLCBwYXJzZV9sYXBpYyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2Rpc2FibGVhcGljKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX2FwaWMgPSAxOwotCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfQVBJQyk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGlzYWJsZWFwaWMiLCBzZXR1cF9kaXNhYmxlYXBpYyk7Ci0KLS8qIHNhbWUgYXMgZGlzYWJsZWFwaWMsIGZvciBjb21wYXRpYmlsaXR5ICovCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ub2xhcGljKGNoYXIgKmFyZykKLXsKLQlyZXR1cm4gc2V0dXBfZGlzYWJsZWFwaWMoYXJnKTsKLX0KLWVhcmx5X3BhcmFtKCJub2xhcGljIiwgc2V0dXBfbm9sYXBpYyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKGNoYXIgKmFyZykKLXsKLQlsb2NhbF9hcGljX3RpbWVyX2MyX29rID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJsYXBpY190aW1lcl9jMl9vayIsIHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vYXBpY3RpbWVyIiwgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9sYXBpY190aW1lcihjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2xhcGljX3RpbWVyIiwgcGFyc2Vfbm9sYXBpY190aW1lcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFwaWNfc2V0X3ZlcmJvc2l0eShjaGFyICphcmcpCi17Ci0JaWYgKCFhcmcpICB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQlza2lwX2lvYXBpY19zZXR1cCA9IDA7Ci0JCWlvYXBpY19mb3JjZSA9IDE7Ci0JCXJldHVybiAwOwotI2VuZGlmCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChzdHJjbXAoImRlYnVnIiwgYXJnKSA9PSAwKQotCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfREVCVUc7Ci0JZWxzZSBpZiAoc3RyY21wKCJ2ZXJib3NlIiwgYXJnKSA9PSAwKQotCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfVkVSQk9TRTsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBWZXJib3NpdHkgbGV2ZWwgJXMgbm90IHJlY29nbmlzZWQiCi0JCQkiIHVzZSBhcGljPXZlcmJvc2Ugb3IgYXBpYz1kZWJ1Z1xuIiwgYXJnKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiYXBpYyIsIGFwaWNfc2V0X3ZlcmJvc2l0eSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGxhcGljX2luc2VydF9yZXNvdXJjZSh2b2lkKQotewotCWlmICghYXBpY19waHlzKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBQdXQgbG9jYWwgQVBJQyBpbnRvIHRoZSByZXNvdXJjZSBtYXAuICovCi0JbGFwaWNfcmVzb3VyY2Uuc3RhcnQgPSBhcGljX3BoeXM7Ci0JbGFwaWNfcmVzb3VyY2UuZW5kID0gbGFwaWNfcmVzb3VyY2Uuc3RhcnQgKyBQQUdFX1NJWkUgLSAxOwotCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsYXBpY19yZXNvdXJjZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG5lZWQgY2FsbCBpbnNlcnQgYWZ0ZXIgZTgyMF9yZXNlcnZlX3Jlc291cmNlcygpCi0gKiB0aGF0IGlzIHVzaW5nIHJlcXVlc3RfcmVzb3VyY2UKLSAqLwotbGF0ZV9pbml0Y2FsbChsYXBpY19pbnNlcnRfcmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZGRiNjlhLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQ4ICswLDAgQEAKLS8qCi0gKglMb2NhbCBBUElDIGhhbmRsaW5nLCBsb2NhbCBBUElDIHRpbWVycwotICoKLSAqCShjKSAxOTk5LCAyMDAwIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICoKLSAqCUZpeGVzCi0gKglNYWNpZWogVy4gUm96eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsKLSAqCQkJCQl0aGFua3MgdG8gRXJpYyBHaWxtb3JlCi0gKgkJCQkJYW5kIFJvbGYgRy4gVGV3cwotICoJCQkJCWZvciB0ZXN0aW5nIHRoZXNlIGV4dGVuc2l2ZWx5LgotICoJTWFjaWVqIFcuIFJvenlja2kJOglWYXJpb3VzIHVwZGF0ZXMgYW5kIGZpeGVzLgotICoJTWlrYWVsIFBldHRlcnNzb24JOglQb3dlciBNYW5hZ2VtZW50IGZvciBVUC1BUElDLgotICoJUGF2ZWwgTWFjaGVrIGFuZAotICoJTWlrYWVsIFBldHRlcnNzb24JOglQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaV9wbXRtci5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2hwZXQuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLSNpbmNsdWRlIDxhc20vaWRsZS5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0KLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotCi0vKiBEaXNhYmxlIGxvY2FsIEFQSUMgdGltZXIgZnJvbSB0aGUga2VybmVsIGNvbW1hbmRsaW5lIG9yIHZpYSBkbWkgcXVpcmsgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV9hcGljX3RpbWVyIF9fY3B1aW5pdGRhdGE7Ci1zdGF0aWMgaW50IGFwaWNfY2FsaWJyYXRlX3BtdG1yIF9faW5pdGRhdGE7Ci1pbnQgZGlzYWJsZV9hcGljOwotaW50IGRpc2FibGVfeDJhcGljOwotaW50IHgyYXBpYzsKLQotLyogeDJhcGljIGVuYWJsZWQgYmVmb3JlIE9TIGhhbmRvdmVyICovCi1pbnQgeDJhcGljX3ByZWVuYWJsZWQ7Ci0KLS8qIExvY2FsIEFQSUMgdGltZXIgd29ya3MgaW4gQzIgKi8KLWludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOwotRVhQT1JUX1NZTUJPTF9HUEwobG9jYWxfYXBpY190aW1lcl9jMl9vayk7Ci0KLS8qCi0gKiBEZWJ1ZyBsZXZlbCwgZXhwb3J0ZWQgZm9yIGlvX2FwaWMuYwotICovCi11bnNpZ25lZCBpbnQgYXBpY192ZXJib3NpdHk7Ci0KLS8qIEhhdmUgd2UgZm91bmQgYW4gTVAgdGFibGUgKi8KLWludCBzbXBfZm91bmRfY29uZmlnOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxhcGljX3Jlc291cmNlID0gewotCS5uYW1lID0gIkxvY2FsIEFQSUMiLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBjYWxpYnJhdGlvbl9yZXN1bHQ7Ci0KLXN0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spOwotc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTsKLQotLyoKLSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSB1c2VkIGZvciBhbnkgZnVuY3Rpb24gd2hpY2ggaXMgQ1BVIGxvY2FsLgotICovCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBsYXBpY19jbG9ja2V2ZW50ID0gewotCS5uYW1lCQk9ICJsYXBpYyIsCi0JLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9UCi0JCQl8IENMT0NLX0VWVF9GRUFUX0MzU1RPUCB8IENMT0NLX0VWVF9GRUFUX0RVTU1ZLAotCS5zaGlmdAkJPSAzMiwKLQkuc2V0X21vZGUJPSBsYXBpY190aW1lcl9zZXR1cCwKLQkuc2V0X25leHRfZXZlbnQJPSBsYXBpY19uZXh0X2V2ZW50LAotCS5icm9hZGNhc3QJPSBsYXBpY190aW1lcl9icm9hZGNhc3QsCi0JLnJhdGluZwkJPSAxMDAsCi0JLmlycQkJPSAtMSwKLX07Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbGFwaWNfZXZlbnRzKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBpY19waHlzOwotCi11bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7Ci0KLS8qCi0gKiBHZXQgdGhlIExBUElDIHZlcnNpb24KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbGFwaWNfZ2V0X3ZlcnNpb24odm9pZCkKLXsKLQlyZXR1cm4gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKLX0KLQotLyoKLSAqIENoZWNrLCBpZiB0aGUgQVBJQyBpcyBpbnRlZ3JhdGVkIG9yIGEgc2VwYXJhdGUgY2hpcAotICovCi1zdGF0aWMgaW5saW5lIGludCBsYXBpY19pc19pbnRlZ3JhdGVkKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiAxOwotI2Vsc2UKLQlyZXR1cm4gQVBJQ19JTlRFR1JBVEVEKGxhcGljX2dldF92ZXJzaW9uKCkpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBDaGVjaywgd2hldGhlciB0aGlzIGlzIGEgbW9kZXJuIG9yIGEgZmlyc3QgZ2VuZXJhdGlvbiBBUElDCi0gKi8KLXN0YXRpYyBpbnQgbW9kZXJuX2FwaWModm9pZCkKLXsKLQkvKiBBTUQgc3lzdGVtcyB1c2Ugb2xkIEFQSUMgdmVyc2lvbnMsIHNvIGNoZWNrIHRoZSBDUFUgKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCi0JICAgIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIGxhcGljX2dldF92ZXJzaW9uKCkgPj0gMHgxNDsKLX0KLQotLyoKLSAqIFBhcmF2aXJ0IGtlcm5lbHMgYWxzbyBtaWdodCBiZSB1c2luZyB0aGVzZSBiZWxvdyBvcHMuIFNvIHdlIHN0aWxsCi0gKiB1c2UgZ2VuZXJpYyBhcGljX3JlYWQoKS9hcGljX3dyaXRlKCksIHdoaWNoIG1pZ2h0IGJlIHBvaW50aW5nIHRvIGRpZmZlcmVudAotICogb3BzIGluIFBBUkFWSVJUIGNhc2UuCi0gKi8KLXZvaWQgeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCXdoaWxlIChhcGljX3JlYWQoQVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KLXUzMiBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQl1MzIgc2VuZF9zdGF0dXM7Ci0JaW50IHRpbWVvdXQ7Ci0KLQl0aW1lb3V0ID0gMDsKLQlkbyB7Ci0JCXNlbmRfc3RhdHVzID0gYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1k7Ci0JCWlmICghc2VuZF9zdGF0dXMpCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwMCk7Ci0JfSB3aGlsZSAodGltZW91dCsrIDwgMTAwMCk7Ci0KLQlyZXR1cm4gc2VuZF9zdGF0dXM7Ci19Ci0KLXZvaWQgeGFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCkKLXsKLQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChpZCkpOwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGxvdyk7Ci19Ci0KLXU2NCB4YXBpY19pY3JfcmVhZCh2b2lkKQotewotCXUzMiBpY3IxLCBpY3IyOwotCi0JaWNyMiA9IGFwaWNfcmVhZChBUElDX0lDUjIpOwotCWljcjEgPSBhcGljX3JlYWQoQVBJQ19JQ1IpOwotCi0JcmV0dXJuIGljcjEgfCAoKHU2NClpY3IyIDw8IDMyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhcGljX29wcyB4YXBpY19vcHMgPSB7Ci0JLnJlYWQgPSBuYXRpdmVfYXBpY19tZW1fcmVhZCwKLQkud3JpdGUgPSBuYXRpdmVfYXBpY19tZW1fd3JpdGUsCi0JLmljcl9yZWFkID0geGFwaWNfaWNyX3JlYWQsCi0JLmljcl93cml0ZSA9IHhhcGljX2ljcl93cml0ZSwKLQkud2FpdF9pY3JfaWRsZSA9IHhhcGljX3dhaXRfaWNyX2lkbGUsCi0JLnNhZmVfd2FpdF9pY3JfaWRsZSA9IHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSwKLX07Ci0KLXN0cnVjdCBhcGljX29wcyBfX3JlYWRfbW9zdGx5ICphcGljX29wcyA9ICZ4YXBpY19vcHM7Ci1FWFBPUlRfU1lNQk9MX0dQTChhcGljX29wcyk7Ci0KLXN0YXRpYyB2b2lkIHgyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0JLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB1MzIgc2FmZV94MmFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCS8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgaWNyIGlkbGUgaW4geDJhcGljICovCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgeDJhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCi17Ci0Jd3Jtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksICgoX191NjQpIGlkKSA8PCAzMiB8IGxvdyk7Ci19Ci0KLXU2NCB4MmFwaWNfaWNyX3JlYWQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCXJkbXNybChBUElDX0JBU0VfTVNSICsgKEFQSUNfSUNSID4+IDQpLCB2YWwpOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXBpY19vcHMgeDJhcGljX29wcyA9IHsKLQkucmVhZCA9IG5hdGl2ZV9hcGljX21zcl9yZWFkLAotCS53cml0ZSA9IG5hdGl2ZV9hcGljX21zcl93cml0ZSwKLQkuaWNyX3JlYWQgPSB4MmFwaWNfaWNyX3JlYWQsCi0JLmljcl93cml0ZSA9IHgyYXBpY19pY3Jfd3JpdGUsCi0JLndhaXRfaWNyX2lkbGUgPSB4MmFwaWNfd2FpdF9pY3JfaWRsZSwKLQkuc2FmZV93YWl0X2ljcl9pZGxlID0gc2FmZV94MmFwaWNfd2FpdF9pY3JfaWRsZSwKLX07Ci0KLS8qKgotICogZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgLSBlbmFibGUgTk1JIHRocm91Z2ggbG9jYWwgdmVjdG9yIHRhYmxlIDAKLSAqLwotdm9pZCBfX2NwdWluaXQgZW5hYmxlX05NSV90aHJvdWdoX0xWVDAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCS8qIHVubWFzayBhbmQgc2V0IHRvIE5NSSAqLwotCXYgPSBBUElDX0RNX05NSTsKLQotCS8qIExldmVsIHRyaWdnZXJlZCBmb3IgODI0ODlEWCAoMzJiaXQgbW9kZSkgKi8KLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKLQkJdiB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCi0JYXBpY193cml0ZShBUElDX0xWVDAsIHYpOwotfQotCi0vKioKLSAqIGxhcGljX2dldF9tYXhsdnQgLSBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHZlY3RvciB0YWJsZSBlbnRyaWVzCi0gKi8KLWludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQkvKgotCSAqIC0gd2UgYWx3YXlzIGhhdmUgQVBJQyBpbnRlZ3JhdGVkIG9uIDY0Yml0IG1vZGUKLQkgKiAtIDgyNDg5RFhzIGRvIG5vdCByZXBvcnQgIyBvZiBMVlQgZW50cmllcwotCSAqLwotCXJldHVybiBBUElDX0lOVEVHUkFURUQoR0VUX0FQSUNfVkVSU0lPTih2KSkgPyBHRVRfQVBJQ19NQVhMVlQodikgOiAyOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lcgotICovCi0KLS8qIENsb2NrIGRpdmlzb3IgKi8KLSNpZmRlZiBDT05GR19YODZfNjQKLSNkZWZpbmUgQVBJQ19ESVZJU09SIDEKLSNlbHNlCi0jZGVmaW5lIEFQSUNfRElWSVNPUiAxNgotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGxvY2FsIEFQSUMgdGltZXIsIHdpdGggYSB0aW1lb3V0IG9mCi0gKiAnY2xvY2tzJyBBUElDIGJ1cyBjbG9jay4gRHVyaW5nIGNhbGlicmF0aW9uIHdlIGFjdHVhbGx5IGNhbGwKLSAqIHRoaXMgZnVuY3Rpb24gdHdpY2Ugb24gdGhlIGJvb3QgQ1BVLCBvbmNlIHdpdGggYSBib2d1cyB0aW1lb3V0Ci0gKiB2YWx1ZSwgc2Vjb25kIHRpbWUgZm9yIHJlYWwuIFRoZSBvdGhlciAobm9uY2FsaWJyYXRpbmcpIENQVXMKLSAqIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IG9uY2UsIHdpdGggdGhlIHJlYWwsIGNhbGlicmF0ZWQgdmFsdWUuCi0gKgotICogV2UgZG8gcmVhZHMgYmVmb3JlIHdyaXRlcyBldmVuIGlmIHVubmVjZXNzYXJ5LCB0byBnZXQgYXJvdW5kIHRoZQotICogUDUgQVBJQyBkb3VibGUgd3JpdGUgYnVnLgotICovCi1zdGF0aWMgdm9pZCBfX3NldHVwX0FQSUNfTFZUVCh1bnNpZ25lZCBpbnQgY2xvY2tzLCBpbnQgb25lc2hvdCwgaW50IGlycWVuKQotewotCXVuc2lnbmVkIGludCBsdnR0X3ZhbHVlLCB0bXBfdmFsdWU7Ci0KLQlsdnR0X3ZhbHVlID0gTE9DQUxfVElNRVJfVkVDVE9SOwotCWlmICghb25lc2hvdCkKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9USU1FUl9QRVJJT0RJQzsKLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKLQkJbHZ0dF92YWx1ZSB8PSBTRVRfQVBJQ19USU1FUl9CQVNFKEFQSUNfVElNRVJfQkFTRV9ESVYpOwotCi0JaWYgKCFpcnFlbikKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9NQVNLRUQ7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgbHZ0dF92YWx1ZSk7Ci0KLQkvKgotCSAqIERpdmlkZSBQSUNMSyBieSAxNgotCSAqLwotCXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCWFwaWNfd3JpdGUoQVBJQ19URENSLAotCQkodG1wX3ZhbHVlICYgfihBUElDX1REUl9ESVZfMSB8IEFQSUNfVERSX0RJVl9UTUJBU0UpKSB8Ci0JCUFQSUNfVERSX0RJVl8xNik7Ci0KLQlpZiAoIW9uZXNob3QpCi0JCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgY2xvY2tzIC8gQVBJQ19ESVZJU09SKTsKLX0KLQotLyoKLSAqIFNldHVwIGV4dGVuZGVkIExWVCwgQU1EIHNwZWNpZmljIChLOCwgZmFtaWx5IDEwaCkKLSAqCi0gKiBWZWN0b3IgbWFwcGluZ3MgYXJlIGhhcmQgY29kZWQuIE9uIEs4IG9ubHkgb2Zmc2V0IDAgKEFQSUM1MDApIGFuZAotICogTUNFIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZC4gVGh1cyBNQ0Ugb2Zmc2V0IG11c3QgYmUgc2V0IHRvIDAuCi0gKgotICogSWYgbWFzaz0xLCB0aGUgTFZUIGVudHJ5IGRvZXMgbm90IGdlbmVyYXRlIGludGVycnVwdHMgd2hpbGUgbWFzaz0wCi0gKiBlbmFibGVzIHRoZSB2ZWN0b3IuIFNlZSBhbHNvIHRoZSBCS0RHcy4KLSAqLwotCi0jZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX01DRSAwCi0jZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUyAxCi0KLXN0YXRpYyB2b2lkIHNldHVwX0FQSUNfZWlsdnQodTggbHZ0X29mZiwgdTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IChsdnRfb2ZmIDw8IDQpICsgQVBJQ19FSUxWVDA7Ci0JdW5zaWduZWQgaW50ICB2ICAgPSAobWFzayA8PCAxNikgfCAobXNnX3R5cGUgPDwgOCkgfCB2ZWN0b3I7Ci0KLQlhcGljX3dyaXRlKHJlZywgdik7Ci19Ci0KLXU4IHNldHVwX0FQSUNfZWlsdnRfbWNlKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0Jc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9NQ0UsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOwotCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9NQ0U7Ci19Ci0KLXU4IHNldHVwX0FQSUNfZWlsdnRfaWJzKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0Jc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9JQlMsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOwotCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9JQlM7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzZXR1cF9BUElDX2VpbHZ0X2licyk7Ci0KLS8qCi0gKiBQcm9ncmFtIHRoZSBuZXh0IGV2ZW50LCByZWxhdGl2ZSB0byBub3cKLSAqLwotc3RhdGljIGludCBsYXBpY19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCi0JCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgZGVsdGEpOwotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0dXAgdGhlIGxhcGljIHRpbWVyIGluIHBlcmlvZGljIG9yIG9uZXNob3QgbW9kZQotICovCi1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCB2OwotCi0JLyogTGFwaWMgdXNlZCBhcyBkdW1teSBmb3IgYnJvYWRjYXN0ID8gKi8KLQlpZiAoZXZ0LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0RVTU1ZKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQkJX19zZXR1cF9BUElDX0xWVFQoY2FsaWJyYXRpb25fcmVzdWx0LAotCQkJCSAgbW9kZSAhPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQywgMSk7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQkJdiB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFQsIHYpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCi0JCWJyZWFrOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIgYnJvYWRjYXN0IGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIGxhcGljX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzaykKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc2VuZF9JUElfbWFzayhtYXNrLCBMT0NBTF9USU1FUl9WRUNUT1IpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciBmb3IgdGhpcyBDUFUuIENvcHkgdGhlIGluaXRpbGl6ZWQgdmFsdWVzCi0gKiBvZiB0aGUgYm9vdCBDUFUgYW5kIHJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBpbiB0aGUgZnJhbWV3b3JrLgotICovCi1zdGF0aWMgdm9pZCBzZXR1cF9BUElDX3RpbWVyKHZvaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7Ci0KLQltZW1jcHkobGV2dCwgJmxhcGljX2Nsb2NrZXZlbnQsIHNpemVvZigqbGV2dCkpOwotCWxldnQtPmNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGxldnQpOwotfQotCi0vKgotICogSW4gdGhpcyBmdW5jdGlvbiB3ZSBjYWxpYnJhdGUgQVBJQyBidXMgY2xvY2tzIHRvIHRoZSBleHRlcm5hbAotICogdGltZXIuIFVuZm9ydHVuYXRlbHkgd2UgY2Fubm90IHVzZSBqaWZmaWVzIGFuZCB0aGUgdGltZXIgaXJxCi0gKiB0byBjYWxpYnJhdGUsIHNpbmNlIHNvbWUgbGF0ZXIgYm9vdHVwIGNvZGUgZGVwZW5kcyBvbiBnZXR0aW5nCi0gKiB0aGUgZmlyc3QgaXJxPyBVZ2guCi0gKgotICogV2Ugd2FudCB0byBkbyB0aGUgY2FsaWJyYXRpb24gb25seSBvbmNlIHNpbmNlIHdlCi0gKiB3YW50IHRvIGhhdmUgbG9jYWwgdGltZXIgaXJxcyBzeW5jcm9uLiBDUFVzIGNvbm5lY3RlZAotICogYnkgdGhlIHNhbWUgQVBJQyBidXMgaGF2ZSB0aGUgdmVyeSBzYW1lIGJ1cyBmcmVxdWVuY3kuCi0gKiBBbmQgd2Ugd2FudCB0byBoYXZlIGlycXMgb2ZmIGFueXdheXMsIG5vIGFjY2lkZW50YWwKLSAqIEFQSUMgaXJxIHRoYXQgd2F5LgotICovCi0KLSNkZWZpbmUgVElDS19DT1VOVCAxMDAwMDAwMDAKLQotc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZCkKLXsKLQl1bnNpZ25lZCBhcGljLCBhcGljX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgdHNjLCB0c2Nfc3RhcnQ7Ci0JaW50IHJlc3VsdDsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQkvKgotCSAqIFB1dCB3aGF0ZXZlciBhcmJpdHJhcnkgKGJ1dCBsb25nIGVub3VnaCkgdGltZW91dAotCSAqIHZhbHVlIGludG8gdGhlIEFQSUMgY2xvY2ssIHdlIGp1c3Qgd2FudCB0byBnZXQgdGhlCi0JICogY291bnRlciBydW5uaW5nIGZvciBjYWxpYnJhdGlvbi4KLQkgKgotCSAqIE5vIGludGVycnVwdCBlbmFibGUgIQotCSAqLwotCV9fc2V0dXBfQVBJQ19MVlRUKDI1MDAwMDAwMCwgMCwgMCk7Ci0KLQlhcGljX3N0YXJ0ID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotI2lmZGVmIENPTkZJR19YODZfUE1fVElNRVIKLQlpZiAoYXBpY19jYWxpYnJhdGVfcG10bXIgJiYgcG10bXJfaW9wb3J0KSB7Ci0JCXBtdGltZXJfd2FpdCg1MDAwKTsgIC8qIDVtcyB3YWl0ICovCi0JCWFwaWMgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7Ci0JCXJlc3VsdCA9IChhcGljX3N0YXJ0IC0gYXBpYykgKiAxMDAwTCAvIDU7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7Ci0JCXJkdHNjbGwodHNjX3N0YXJ0KTsKLQotCQlkbyB7Ci0JCQlhcGljID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCQkJcmR0c2NsbCh0c2MpOwotCQl9IHdoaWxlICgodHNjIC0gdHNjX3N0YXJ0KSA8IFRJQ0tfQ09VTlQgJiYKLQkJCQkoYXBpY19zdGFydCAtIGFwaWMpIDwgVElDS19DT1VOVCk7Ci0KLQkJcmVzdWx0ID0gKGFwaWNfc3RhcnQgLSBhcGljKSAqIDEwMDBMICogdHNjX2toeiAvCi0JCQkJCSh0c2MgLSB0c2Nfc3RhcnQpOwotCX0KLQotCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJBUElDIHRpbWVyIGNhbGlicmF0aW9uIHJlc3VsdCAlZFxuIiwgcmVzdWx0KTsKLQotCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkICVkLiUwM2QgTUh6IEFQSUMgdGltZXIuXG4iLAotCQlyZXN1bHQgLyAxMDAwIC8gMTAwMCwgcmVzdWx0IC8gMTAwMCAlIDEwMDApOwotCi0JLyogQ2FsY3VsYXRlIHRoZSBzY2FsZWQgbWF0aCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KLQlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MocmVzdWx0LCBOU0VDX1BFUl9TRUMsCi0JCQkJICAgICAgIGxhcGljX2Nsb2NrZXZlbnQuc2hpZnQpOwotCWxhcGljX2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRiwgJmxhcGljX2Nsb2NrZXZlbnQpOwotCWxhcGljX2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZsYXBpY19jbG9ja2V2ZW50KTsKLQotCWNhbGlicmF0aW9uX3Jlc3VsdCA9IChyZXN1bHQgKiBBUElDX0RJVklTT1IpIC8gSFo7Ci0KLQkvKgotCSAqIERvIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBBUElDIGNhbGlicmF0aW9uIHJlc3VsdAotCSAqLwotCWlmIChjYWxpYnJhdGlvbl9yZXN1bHQgPCAoMTAwMDAwMCAvIEhaKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiQVBJQyBmcmVxdWVuY3kgdG9vIHNsb3csIGRpc2FibGluZyBhcGljIHRpbWVyXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0dXAgdGhlIGJvb3QgQVBJQwotICoKLSAqIENhbGlicmF0ZSBhbmQgdmVyaWZ5IHRoZSByZXN1bHQuCi0gKi8KLXZvaWQgX19pbml0IHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKQotewotCS8qCi0JICogVGhlIGxvY2FsIGFwaWMgdGltZXIgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUga2VybmVsCi0JICogY29tbWFuZGxpbmUgb3IgZnJvbSB0aGUgQ1BVIGRldGVjdGlvbiBjb2RlLiBSZWdpc3RlciB0aGUgbGFwaWMKLQkgKiB0aW1lciBhcyBhIGR1bW15IGNsb2NrIGV2ZW50IHNvdXJjZSBvbiBTTVAgc3lzdGVtcywgc28gdGhlCi0JICogYnJvYWRjYXN0IG1lY2hhbmlzbSBpcyB1c2VkLiBPbiBVUCBzeXN0ZW1zIHNpbXBseSBpZ25vcmUgaXQuCi0JICovCi0JaWYgKGRpc2FibGVfYXBpY190aW1lcikgewotCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgQVBJQyB0aW1lclxuIik7Ci0JCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgewotCQkJbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gMTsKLQkJCXNldHVwX0FQSUNfdGltZXIoKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiVXNpbmcgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHRzLlxuIgotCQkgICAgImNhbGlicmF0aW5nIEFQSUMgdGltZXIgLi4uXG4iKTsKLQotCWlmIChjYWxpYnJhdGVfQVBJQ19jbG9jaygpKSB7Ci0JCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkKLQkJCXNldHVwX0FQSUNfdGltZXIoKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgbm1pX3dhdGNoZG9nIGlzIHNldCB0byBJT19BUElDLCB3ZSBuZWVkIHRoZQotCSAqIFBJVC9IUEVUIGdvaW5nLiAgT3RoZXJ3aXNlIHJlZ2lzdGVyIGxhcGljIGFzIGEgZHVtbXkKLQkgKiBkZXZpY2UuCi0JICovCi0JaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfSU9fQVBJQykKLQkJbGFwaWNfY2xvY2tldmVudC5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIHRpbWVyIHJlZ2lzdGVyZWQgYXMgZHVtbXksIgotCQkJIiBkdWUgdG8gbm1pX3dhdGNoZG9nPSVkIVxuIiwgbm1pX3dhdGNoZG9nKTsKLQotCS8qIFNldHVwIHRoZSBsYXBpYyBvciByZXF1ZXN0IHRoZSBicm9hZGNhc3QgKi8KLQlzZXR1cF9BUElDX3RpbWVyKCk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpCi17Ci0Jc2V0dXBfQVBJQ190aW1lcigpOwotfQotCi0vKgotICogVGhlIGd1dHMgb2YgdGhlIGFwaWMgdGltZXIgaW50ZXJydXB0Ci0gKi8KLXN0YXRpYyB2b2lkIGxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcGVyX2NwdShsYXBpY19ldmVudHMsIGNwdSk7Ci0KLQkvKgotCSAqIE5vcm1hbGx5IHdlIHNob3VsZCBub3QgYmUgaGVyZSB0aWxsIExBUElDIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dAotCSAqIGluIHNvbWUgY2FzZXMgbGlrZSBrZHVtcCwgaXRzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBwZW5kaW5nIExBUElDCi0JICogdGltZXIgaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsJ3MgY29udGV4dCBhbmQgaXMgZGVsaXZlcmVkIGluCi0JICogbmV3IGtlcm5lbCB0aGUgbW9tZW50IGludGVycnVwdHMgYXJlIGVuYWJsZWQuCi0JICoKLQkgKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGVhcmx5IGFuZCBMQVBJQyBpcyBzZXR1cCBtdWNoIGxhdGVyLCBoZW5jZQotCSAqIGl0cyBwb3NzaWJsZSB0aGF0IHdoZW4gd2UgZ2V0IGhlcmUgZXZ0LT5ldmVudF9oYW5kbGVyIGlzIE5VTEwuCi0JICogQ2hlY2sgZm9yIGV2ZW50X2hhbmRsZXIgYmVpbmcgTlVMTCBhbmQgZGlzY2FyZCB0aGUgaW50ZXJydXB0IGFzCi0JICogc3B1cmlvdXMuCi0JICovCi0JaWYgKCFldnQtPmV2ZW50X2hhbmRsZXIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIlNwdXJpb3VzIExBUElDIHRpbWVyIGludGVycnVwdCBvbiBjcHUgJWRcbiIsIGNwdSk7Ci0JCS8qIFN3aXRjaCBpdCBvZmYgKi8KLQkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sIGV2dCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIHRoZSBOTUkgZGVhZGxvY2stZGV0ZWN0b3IgdXNlcyB0aGlzLgotCSAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLQlhZGRfcGRhKGFwaWNfdGltZXJfaXJxcywgMSk7Ci0jZWxzZQotCXBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzKys7Ci0jZW5kaWYKLQotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQuIFRoaXMgaXMgdGhlIG1vc3QgbmF0dXJhbCB3YXkgZm9yIGRvaW5nCi0gKiBsb2NhbCBpbnRlcnJ1cHRzLCBidXQgbG9jYWwgdGltZXIgaW50ZXJydXB0cyBjYW4gYmUgZW11bGF0ZWQgYnkKLSAqIGJyb2FkY2FzdCBpbnRlcnJ1cHRzIHRvby4gW2luIGNhc2UgdGhlIGh3IGRvZXNuJ3Qgc3VwcG9ydCBBUElDIHRpbWVyc10KLSAqCi0gKiBbIGlmIGEgc2luZ2xlLUNQVSBzeXN0ZW0gcnVucyBhbiBTTVAga2VybmVsIHRoZW4gd2UgY2FsbCB0aGUgbG9jYWwKLSAqICAgaW50ZXJydXB0IGFzIHdlbGwuIFRodXMgd2UgY2Fubm90IGlubGluZSB0aGUgbG9jYWwgaXJxIC4uLiBdCi0gKi8KLXZvaWQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKLQotCS8qCi0JICogTk9URSEgV2UnZCBiZXR0ZXIgQUNLIHRoZSBpcnEgaW1tZWRpYXRlbHksCi0JICogYmVjYXVzZSB0aW1lciBoYW5kbGluZyBjYW4gYmUgc2xvdy4KLQkgKi8KLQlhY2tfQVBJQ19pcnEoKTsKLQkvKgotCSAqIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCkgZXhwZWN0cyB1cyB0byBoYXZlIGRvbmUgaXJxX2VudGVyKCkuCi0JICogQmVzaWRlcywgaWYgd2UgZG9uJ3QgdGltZXIgaW50ZXJydXB0cyBpZ25vcmUgdGhlIGdsb2JhbAotCSAqIGludGVycnVwdCBsb2NrLCB3aGljaCBpcyB0aGUgV3JvbmdUaGluZyAodG0pIHRvIGRvLgotCSAqLwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCWxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KCk7Ci0JaXJxX2V4aXQoKTsKLQotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci19Ci0KLWludCBzZXR1cF9wcm9maWxpbmdfdGltZXIodW5zaWduZWQgaW50IG11bHRpcGxpZXIpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLQotLyoKLSAqIExvY2FsIEFQSUMgc3RhcnQgYW5kIHNodXRkb3duCi0gKi8KLQotLyoqCi0gKiBjbGVhcl9sb2NhbF9BUElDIC0gc2h1dGRvd24gdGhlIGxvY2FsIEFQSUMKLSAqCi0gKiBUaGlzIGlzIGNhbGxlZCwgd2hlbiBhIENQVSBpcyBkaXNhYmxlZCBhbmQgYmVmb3JlIHJlYm9vdGluZywgc28gdGhlIHN0YXRlIG9mCi0gKiB0aGUgbG9jYWwgQVBJQyBoYXMgbm8gZGFuZ2xpbmcgbGVmdG92ZXJzLiBBbHNvIHVzZWQgdG8gY2xlYW5vdXQgYW55IEJJT1MKLSAqIGxlZnRvdmVycyBkdXJpbmcgYm9vdC4KLSAqLwotdm9pZCBjbGVhcl9sb2NhbF9BUElDKHZvaWQpCi17Ci0JaW50IG1heGx2dDsKLQl1MzIgdjsKLQotCS8qIEFQSUMgaGFzbid0IGJlZW4gbWFwcGVkIHlldCAqLwotCWlmICghYXBpY19waHlzKQotCQlyZXR1cm47Ci0KLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0JLyoKLQkgKiBNYXNraW5nIGFuIExWVCBlbnRyeSBjYW4gdHJpZ2dlciBhIGxvY2FsIEFQSUMgZXJyb3IKLQkgKiBpZiB0aGUgdmVjdG9yIGlzIHplcm8uIE1hc2sgTFZURVJSIGZpcnN0IHRvIHByZXZlbnQgdGhpcy4KLQkgKi8KLQlpZiAobWF4bHZ0ID49IDMpIHsKLQkJdiA9IEVSUk9SX0FQSUNfVkVDVE9SOyAvKiBhbnkgbm9uLXplcm8gdmVjdG9yIHdpbGwgZG8gKi8KLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCS8qCi0JICogQ2FyZWZ1bDogd2UgaGF2ZSB0byBzZXQgbWFza3Mgb25seSBmaXJzdCB0byBkZWFzc2VydAotCSAqIGFueSBsZXZlbC10cmlnZ2VyZWQgc291cmNlcy4KLQkgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JYXBpY193cml0ZShBUElDX0xWVFQsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDQpIHsKLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0KLQkvKiBsZXRzIG5vdCB0b3VjaCB0aGlzIGlmIHdlIGRpZG4ndCBmcm9iIGl0ICovCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoWDg2X01DRV9JTlRFTCkKLQlpZiAobWF4bHZ0ID49IDUpIHsKLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotI2VuZGlmCi0JLyoKLQkgKiBDbGVhbiBBUElDIHN0YXRlIGZvciBvdGhlciBPU3M6Ci0JICovCi0JYXBpY193cml0ZShBUElDX0xWVFQsIEFQSUNfTFZUX01BU0tFRCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSAzKQotCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBBUElDX0xWVF9NQVNLRUQpOwotCWlmIChtYXhsdnQgPj0gNCkKLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0xWVF9NQVNLRUQpOwotCi0JLyogSW50ZWdyYXRlZCBBUElDICghODI0ODlEWCkgPyAqLwotCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkpIHsKLQkJaWYgKG1heGx2dCA+IDMpCi0JCQkvKiBDbGVhciBFU1IgZHVlIHRvIFBlbnRpdW0gZXJyYXRhIDNBUCBhbmQgMTFBUCAqLwotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCWFwaWNfcmVhZChBUElDX0VTUik7Ci0JfQotfQotCi0vKioKLSAqIGRpc2FibGVfbG9jYWxfQVBJQyAtIGNsZWFyIGFuZCBkaXNhYmxlIHRoZSBsb2NhbCBBUElDCi0gKi8KLXZvaWQgZGlzYWJsZV9sb2NhbF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JY2xlYXJfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBEaXNhYmxlIEFQSUMgKGltcGxpZXMgY2xlYXJpbmcgb2YgcmVnaXN0ZXJzCi0JICogZm9yIDgyNDg5RFghKS4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBXaGVuIExBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsLAotCSAqIHJlc3RvcmUgdGhlIGRpc2FibGVkIHN0YXRlLgotCSAqLwotCWlmIChlbmFibGVkX3ZpYV9hcGljYmFzZSkgewotCQl1bnNpZ25lZCBpbnQgbCwgaDsKLQotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRTsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCX0KLSNlbmRpZgotfQotCi0vKgotICogSWYgTGludXggZW5hYmxlZCB0aGUgTEFQSUMgYWdhaW5zdCB0aGUgQklPUyBkZWZhdWx0IGRpc2FibGUgaXQgZG93biBiZWZvcmUKLSAqIHJlLWVudGVyaW5nIHRoZSBCSU9TIG9uIHNodXRkb3duLiAgT3RoZXJ3aXNlIHRoZSBCSU9TIG1heSBnZXQgY29uZnVzZWQgYW5kCi0gKiBub3QgcG93ZXItb2ZmLiAgQWRkaXRpb25hbGx5IGNsZWFyIGFsbCBMVlQgZW50cmllcyBiZWZvcmUgZGlzYWJsZV9sb2NhbF9BUElDCi0gKiBmb3IgdGhlIGNhc2Ugd2hlcmUgTGludXggZGlkbid0IGVuYWJsZSB0aGUgTEFQSUMuCi0gKi8KLXZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFjcHVfaGFzX2FwaWMpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAoIWVuYWJsZWRfdmlhX2FwaWNiYXNlKQotCQljbGVhcl9sb2NhbF9BUElDKCk7Ci0JZWxzZQotI2VuZGlmCi0JCWRpc2FibGVfbG9jYWxfQVBJQygpOwotCi0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYSByZWFsIGxvY2FsIEFQSUMuCi0gKiBDaGVjayB0aGVzZSBhZ2FpbnN0IHlvdXIgYm9hcmQgaWYgdGhlIENQVXMgYXJlbid0IGdldHRpbmcKLSAqIHN0YXJ0ZWQgZm9yIG5vIGFwcGFyZW50IHJlYXNvbi4KLSAqLwotaW50IF9faW5pdCB2ZXJpZnlfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCByZWcwLCByZWcxOwotCi0JLyoKLQkgKiBUaGUgdmVyc2lvbiByZWdpc3RlciBpcyByZWFkLW9ubHkgaW4gYSByZWFsIEFQSUMuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlIsIHJlZzAgXiBBUElDX0xWUl9NQVNLKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBWRVJTSU9OOiAleFxuIiwgcmVnMSk7Ci0KLQkvKgotCSAqIFRoZSB0d28gdmVyc2lvbiByZWFkcyBhYm92ZSBzaG91bGQgcHJpbnQgdGhlIHNhbWUKLQkgKiBudW1iZXJzLiAgSWYgdGhlIHNlY29uZCBvbmUgaXMgZGlmZmVyZW50LCB0aGVuIHdlCi0JICogcG9rZSBhdCBhIG5vbi1BUElDLgotCSAqLwotCWlmIChyZWcxICE9IHJlZzApCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgdmVyc2lvbiBsb29rcyByZWFzb25hYmx5LgotCSAqLwotCXJlZzEgPSBHRVRfQVBJQ19WRVJTSU9OKHJlZzApOwotCWlmIChyZWcxID09IDB4MDAgfHwgcmVnMSA9PSAweGZmKQotCQlyZXR1cm4gMDsKLQlyZWcxID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCWlmIChyZWcxIDwgMHgwMiB8fCByZWcxID09IDB4ZmYpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGUgSUQgcmVnaXN0ZXIgaXMgcmVhZC93cml0ZSBpbiBhIHJlYWwgQVBJQy4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMCk7Ci0JYXBpY193cml0ZShBUElDX0lELCByZWcwIF4gQVBJQ19JRF9NQVNLKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMSk7Ci0JYXBpY193cml0ZShBUElDX0lELCByZWcwKTsKLQlpZiAocmVnMSAhPSAocmVnMCBeIEFQSUNfSURfTUFTSykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGUgbmV4dCB0d28gYXJlIGp1c3QgdG8gc2VlIGlmIHdlIGhhdmUgc2FuZSB2YWx1ZXMuCi0JICogVGhleSdyZSBvbmx5IHJlYWxseSByZWxldmFudCBpZiB3ZSdyZSBpbiBWaXJ0dWFsIFdpcmUKLQkgKiBjb21wYXRpYmlsaXR5IG1vZGUsIGJ1dCBtb3N0IGJveGVzIGFyZSBhbnltb3JlLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQwOiAleFxuIiwgcmVnMCk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIExWVDE6ICV4XG4iLCByZWcxKTsKLQotCXJldHVybiAxOwotfQotCi0vKioKLSAqIHN5bmNfQXJiX0lEcyAtIHN5bmNocm9uaXplIEFQSUMgYnVzIGFyYml0cmF0aW9uIElEcwotICovCi12b2lkIF9faW5pdCBzeW5jX0FyYl9JRHModm9pZCkKLXsKLQkvKgotCSAqIFVuc3VwcG9ydGVkIG9uIFA0IC0gc2VlIEludGVsIERldi4gTWFudWFsIFZvbC4gMywgQ2guIDguNi4xIEFuZCBub3QKLQkgKiBuZWVkZWQgb24gQU1ELgotCSAqLwotCWlmIChtb2Rlcm5fYXBpYygpIHx8IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCWFwaWNfd2FpdF9pY3JfaWRsZSgpOwotCi0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIlN5bmNocm9uaXppbmcgQXJiIElEcy5cbiIpOwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIEFQSUNfREVTVF9BTExJTkMgfAotCQkJQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19ETV9JTklUKTsKLX0KLQotLyoKLSAqIEFuIGluaXRpYWwgc2V0dXAgb2YgdGhlIHZpcnR1YWwgd2lyZSBtb2RlLgotICovCi12b2lkIF9faW5pdCBpbml0X2JzcF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JLyoKLQkgKiBEb24ndCBkbyB0aGUgc2V0dXAgbm93IGlmIHdlIGhhdmUgYSBTTVAgQklPUyBhcyB0aGUKLQkgKiB0aHJvdWdoLUkvTy1BUElDIHZpcnR1YWwgd2lyZSBtb2RlIG1pZ2h0IGJlIGFjdGl2ZS4KLQkgKi8KLQlpZiAoc21wX2ZvdW5kX2NvbmZpZyB8fCAhY3B1X2hhc19hcGljKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCi0JICovCi0JY2xlYXJfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBFbmFibGUgQVBJQy4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogVGhpcyBiaXQgaXMgcmVzZXJ2ZWQgb24gUDQvWGVvbiBhbmQgc2hvdWxkIGJlIGNsZWFyZWQgKi8KLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSAmJgotCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQotCQl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwotCWVsc2UKLSNlbmRpZgotCQl2YWx1ZSB8PSBBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0JdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotCS8qCi0JICogU2V0IHVwIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9FWFRJTlQpOwotCXZhbHVlID0gQVBJQ19ETV9OTUk7Ci0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCQkvKiA4MjQ4OURYICovCi0JCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGxhcGljX3NldHVwX2Vzcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgb2xkdmFsdWUsIHZhbHVlLCBtYXhsdnQ7Ci0JaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSAmJiAhZXNyX2Rpc2FibGUpIHsKLQkJaWYgKGVzcl9kaXNhYmxlKSB7Ci0JCQkvKgotCQkJICogU29tZXRoaW5nIHVudHJhY2VhYmxlIGlzIGNyZWF0aW5nIGJhZCBpbnRlcnJ1cHRzIG9uCi0JCQkgKiBzZWNvbmRhcnkgcXVhZHMgLi4uIGZvciB0aGUgbW9tZW50LCBqdXN0IGxlYXZlIHRoZQotCQkJICogRVNSIGRpc2FibGVkIC0gd2UgY2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlCi0JCQkgKiBlcnJvcnMgYW55d2F5IC0gbWJsaWdoCi0JCQkgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIkxlYXZpbmcgRVNSIGRpc2FibGVkLlxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogITgyNDg5RFggKi8KLQkJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCQlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlvbGR2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0KLQkJLyogZW5hYmxlcyBzZW5kaW5nIGVycm9ycyAqLwotCQl2YWx1ZSA9IEVSUk9SX0FQSUNfVkVDVE9SOwotCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2YWx1ZSk7Ci0JCS8qCi0JCSAqIHNwZWMgc2F5cyBjbGVhciBlcnJvcnMgYWZ0ZXIgZW5hYmxpbmcgdmVjdG9yLgotCQkgKi8KLQkJaWYgKG1heGx2dCA+IDMpCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCQlpZiAodmFsdWUgIT0gb2xkdmFsdWUpCi0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJFU1IgdmFsdWUgYmVmb3JlIGVuYWJsaW5nICIKLQkJCQkidmVjdG9yOiAweCUwOGx4ICBhZnRlcjogMHglMDhseFxuIiwKLQkJCQlvbGR2YWx1ZSwgdmFsdWUpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5vIEVTUiBmb3IgODI0ODlEWC5cbiIpOwotCX0KLX0KLQotCi0vKioKLSAqIHNldHVwX2xvY2FsX0FQSUMgLSBzZXR1cCB0aGUgbG9jYWwgQVBJQwotICovCi12b2lkIF9fY3B1aW5pdCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCWludCBpLCBqOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCi0JQlVJTERfQlVHX09OKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MGYpICE9IDB4MGYpOwotCi0JLyoKLQkgKiBEb3VibGUtY2hlY2sgd2hldGhlciB0aGlzIEFQSUMgaXMgcmVhbGx5IHJlZ2lzdGVyZWQuCi0JICogVGhpcyBpcyBtZWFuaW5nbGVzcyBpbiBjbHVzdGVyZWQgYXBpYyBtb2RlLCBzbyB3ZSBza2lwIGl0LgotCSAqLwotCWlmICghYXBpY19pZF9yZWdpc3RlcmVkKCkpCi0JCUJVRygpOwotCi0JLyoKLQkgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZwotCSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCi0JICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KLQkgKi8KLQlpbml0X2FwaWNfbGRyKCk7Ci0KLQkvKgotCSAqIFNldCBUYXNrIFByaW9yaXR5IHRvICdhY2NlcHQgYWxsJy4gV2UgbmV2ZXIgY2hhbmdlIHRoaXMKLQkgKiBsYXRlciBvbi4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCXZhbHVlICY9IH5BUElDX1RQUklfTUFTSzsKLQlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgdmFsdWUpOwotCi0JLyoKLQkgKiBBZnRlciBhIGNyYXNoLCB3ZSBubyBsb25nZXIgc2VydmljZSB0aGUgaW50ZXJydXB0cyBhbmQgYSBwZW5kaW5nCi0JICogaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsIG1pZ2h0IHN0aWxsIGhhdmUgSVNSIGJpdCBzZXQuCi0JICoKLQkgKiBNb3N0IHByb2JhYmx5IGJ5IG5vdyBDUFUgaGFzIHNlcnZpY2VkIHRoYXQgcGVuZGluZyBpbnRlcnJ1cHQgYW5kCi0JICogaXQgbWlnaHQgbm90IGhhdmUgZG9uZSB0aGUgYWNrX0FQSUNfaXJxKCkgYmVjYXVzZSBpdCB0aG91Z2h0LAotCSAqIGludGVycnVwdCBjYW1lIGZyb20gaTgyNTkgYXMgRXh0SW50LiBMQVBJQyBkaWQgbm90IGdldCBFT0kgc28gaXQKLQkgKiBkb2VzIG5vdCBjbGVhciB0aGUgSVNSIGJpdCBhbmQgY3B1IHRoaW5rcyBpdCBoYXMgYWxyZWFkeSBzZXJpdmNlZAotCSAqIHRoZSBpbnRlcnJ1cHQuIEhlbmNlIGEgdmVjdG9yIG1pZ2h0IGdldCBsb2NrZWQuIEl0IHdhcyBub3RpY2VkCi0JICogZm9yIHRpbWVyIGlycSAodmVjdG9yIDB4MzEpLiBJc3N1ZSBhbiBleHRyYSBFT0kgdG8gY2xlYXIgSVNSLgotCSAqLwotCWZvciAoaSA9IEFQSUNfSVNSX05SIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyBpKjB4MTApOwotCQlmb3IgKGogPSAzMTsgaiA+PSAwOyBqLS0pIHsKLQkJCWlmICh2YWx1ZSAmICgxPDxqKSkKLQkJCQlhY2tfQVBJQ19pcnEoKTsKLQkJfQotCX0KLQotCS8qCi0JICogTm93IHRoYXQgd2UgYXJlIGFsbCBzZXQgdXAsIGVuYWJsZSB0aGUgQVBJQwotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JLyoKLQkgKiBFbmFibGUgQVBJQwotCSAqLwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0KLQkvKiBXZSBhbHdheXMgdXNlIHByb2Nlc3NvciBmb2N1cyAqLwotCi0JLyoKLQkgKiBTZXQgc3B1cmlvdXMgSVJRIHZlY3RvcgotCSAqLwotCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIFNldCB1cCBMVlQwLCBMVlQxOgotCSAqCi0JICogc2V0IHVwIHRocm91Z2gtbG9jYWwtQVBJQyBvbiB0aGUgQlAncyBMSU5UMC4gVGhpcyBpcyBub3QKLQkgKiBzdHJpY3RseSBuZWNlc3NhcnkgaW4gcHVyZSBzeW1tZXRyaWMtSU8gbW9kZSwgYnV0IHNvbWV0aW1lcwotCSAqIHdlIGRlbGVnYXRlIGludGVycnVwdHMgdG8gdGhlIDgyNTlBLgotCSAqLwotCS8qCi0JICogVE9ETzogc2V0IHVwIHRocm91Z2gtbG9jYWwtQVBJQyBmcm9tIHRocm91Z2gtSS9PLUFQSUM/IC0tbWFjcm8KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApICYgQVBJQ19MVlRfTUFTS0VEOwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpICYmICF2YWx1ZSkgewotCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJlbmFibGVkIEV4dElOVCBvbiBDUFUjJWRcbiIsCi0JCQkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9IGVsc2UgewotCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UIHwgQVBJQ19MVlRfTUFTS0VEOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXNrZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKLQkJCSAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCX0KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOwotCi0JLyoKLQkgKiBvbmx5IHRoZSBCUCBzaG91bGQgc2VlIHRoZSBMSU5UMSBOTUkgc2lnbmFsLCBvYnZpb3VzbHkuCi0JICovCi0JaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCXZhbHVlID0gQVBJQ19ETV9OTUk7Ci0JZWxzZQotCQl2YWx1ZSA9IEFQSUNfRE1fTk1JIHwgQVBJQ19MVlRfTUFTS0VEOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKLXsKLQlsYXBpY19zZXR1cF9lc3IoKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQl7Ci0JCXVuc2lnbmVkIGludCB2YWx1ZTsKLQkJLyogRGlzYWJsZSB0aGUgbG9jYWwgYXBpYyB0aW1lciAqLwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCQl2YWx1ZSB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFQsIHZhbHVlKTsKLQl9Ci0jZW5kaWYKLQotCXNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKE5VTEwpOwotCWFwaWNfcG1fYWN0aXZhdGUoKTsKLX0KLQotdm9pZCBjaGVja194MmFwaWModm9pZCkKLXsKLQlpbnQgbXNyLCBtc3IyOwotCi0JcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciwgbXNyMik7Ci0KLQlpZiAobXNyICYgWDJBUElDX0VOQUJMRSkgewotCQlwcmludGsoIngyYXBpYyBlbmFibGVkIGJ5IEJJT1MsIHN3aXRjaGluZyB0byB4MmFwaWMgb3BzXG4iKTsKLQkJeDJhcGljX3ByZWVuYWJsZWQgPSB4MmFwaWMgPSAxOwotCQlhcGljX29wcyA9ICZ4MmFwaWNfb3BzOwotCX0KLX0KLQotdm9pZCBlbmFibGVfeDJhcGljKHZvaWQpCi17Ci0JaW50IG1zciwgbXNyMjsKLQotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOwotCWlmICghKG1zciAmIFgyQVBJQ19FTkFCTEUpKSB7Ci0JCXByaW50aygiRW5hYmxpbmcgeDJhcGljXG4iKTsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciB8IFgyQVBJQ19FTkFCTEUsIDApOwotCX0KLX0KLQotdm9pZCBlbmFibGVfSVJfeDJhcGljKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWNwdV9oYXNfeDJhcGljKQotCQlyZXR1cm47Ci0KLQlpZiAoIXgyYXBpY19wcmVlbmFibGVkICYmIGRpc2FibGVfeDJhcGljKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJTa2lwcGVkIGVuYWJsaW5nIHgyYXBpYyBhbmQgSW50ZXJydXB0LXJlbWFwcGluZyAiCi0JCSAgICAgICAiYmVjYXVzZSBvZiBub3gyYXBpY1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoeDJhcGljX3ByZWVuYWJsZWQgJiYgZGlzYWJsZV94MmFwaWMpCi0JCXBhbmljKCJCaW9zIGFscmVhZHkgZW5hYmxlZCB4MmFwaWMsIGNhbid0IGVuZm9yY2Ugbm94MmFwaWMiKTsKLQotCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgc2tpcF9pb2FwaWNfc2V0dXApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIlNraXBwZWQgZW5hYmxpbmcgeDJhcGljIGFuZCBJbnRlcnJ1cHQtcmVtYXBwaW5nICIKLQkJICAgICAgICJiZWNhdXNlIG9mIHNraXBwaW5nIGlvLWFwaWMgc2V0dXBcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcmV0ID0gZG1hcl90YWJsZV9pbml0KCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiZG1hcl90YWJsZV9pbml0KCkgZmFpbGVkIHdpdGggJWQ6XG4iLCByZXQpOwotCi0JCWlmICh4MmFwaWNfcHJlZW5hYmxlZCkKLQkJCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiTm90IGVuYWJsaW5nIHgyYXBpYyxJbnRyLXJlbWFwcGluZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbWFza184MjU5QSgpOwotCXNhdmVfbWFza19JT19BUElDX3NldHVwKCk7Ci0KLQlyZXQgPSBlbmFibGVfaW50cl9yZW1hcHBpbmcoMSk7Ci0KLQlpZiAocmV0ICYmIHgyYXBpY19wcmVlbmFibGVkKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcGFuaWMoIngyYXBpYyBlbmFibGVkIGJ5IGJpb3MuIEJ1dCBJUiBlbmFibGluZyBmYWlsZWQiKTsKLQl9Ci0KLQlpZiAocmV0KQotCQlnb3RvIGVuZDsKLQotCWlmICgheDJhcGljKSB7Ci0JCXgyYXBpYyA9IDE7Ci0JCWFwaWNfb3BzID0gJngyYXBpY19vcHM7Ci0JCWVuYWJsZV94MmFwaWMoKTsKLQl9Ci1lbmQ6Ci0JaWYgKHJldCkKLQkJLyoKLQkJICogSVIgZW5hYmxpbmcgZmFpbGVkCi0JCSAqLwotCQlyZXN0b3JlX0lPX0FQSUNfc2V0dXAoKTsKLQllbHNlCi0JCXJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoeDJhcGljX3ByZWVuYWJsZWQpOwotCi0JdW5tYXNrXzgyNTlBKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKCFyZXQpIHsKLQkJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCkKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiRW5hYmxlZCB4MmFwaWMgYW5kIGludGVycnVwdC1yZW1hcHBpbmdcbiIpOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIkVuYWJsZWQgSW50ZXJydXB0LXJlbWFwcGluZ1xuIik7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIkZhaWxlZCB0byBlbmFibGUgSW50ZXJydXB0LXJlbWFwcGluZyBhbmQgeDJhcGljXG4iKTsKLSNlbHNlCi0JaWYgKCFjcHVfaGFzX3gyYXBpYykKLQkJcmV0dXJuOwotCi0JaWYgKHgyYXBpY19wcmVlbmFibGVkKQotCQlwYW5pYygieDJhcGljIGVuYWJsZWQgcHJpb3IgT1MgaGFuZG92ZXIsIgotCQkgICAgICAiIGVuYWJsZSBDT05GSUdfSU5UUl9SRU1BUCIpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxlIENPTkZJR19JTlRSX1JFTUFQIGZvciBlbmFibGluZyBpbnRyLXJlbWFwcGluZyAiCi0JICAgICAgICIgYW5kIHgyYXBpY1xuIik7Ci0jZW5kaWYKLQotCXJldHVybjsKLX0KLQotLyoKLSAqIERldGVjdCBhbmQgZW5hYmxlIGxvY2FsIEFQSUNzIG9uIG5vbi1TTVAgYm9hcmRzLgotICogT3JpZ2luYWwgY29kZSB3cml0dGVuIGJ5IEtlaXIgRnJhc2VyLgotICogT24gQU1ENjQgd2UgdHJ1c3QgdGhlIEJJT1MgLSBpZiBpdCBzYXlzIG5vIEFQSUMgaXQgaXMgbGlrZWx5Ci0gKiBub3QgY29ycmVjdGx5IHNldCB1cCAodXN1YWxseSB0aGUgQVBJQyB0aW1lciB3b24ndCB3b3JrIGV0Yy4pCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRldGVjdF9pbml0X0FQSUModm9pZCkKLXsKLQlpZiAoIWNwdV9oYXNfYXBpYykgewotCQlwcmludGsoS0VSTl9JTkZPICJObyBsb2NhbCBBUElDIHByZXNlbnRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7Ci0JYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgZWFybHlfaW5pdF9sYXBpY19tYXBwaW5nKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7Ci0KLQkvKgotCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gZ28gb3V0Ci0JICogOiBpdCBtZWFucyB0aGVyZSBpcyBubyBtcGF0YWJsZSBhbmQgTUFEVAotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZykKLQkJcmV0dXJuOwotCi0JcGh5c19hZGRyID0gbXBfbGFwaWNfYWRkcjsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBwaHlzX2FkZHIpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCi0JCSAgICBBUElDX0JBU0UsIHBoeXNfYWRkcik7Ci0KLQkvKgotCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKLQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgotCSAqLwotCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwotfQotCi0vKioKLSAqIGluaXRfYXBpY19tYXBwaW5ncyAtIGluaXRpYWxpemUgQVBJQyBtYXBwaW5ncwotICovCi12b2lkIF9faW5pdCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCkKLXsKLQlpZiAoeDJhcGljKSB7Ci0JCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIHNldCB1cCBhIGZha2UgYWxsCi0JICogemVyb2VzIHBhZ2UgdG8gc2ltdWxhdGUgdGhlIGxvY2FsIEFQSUMgYW5kIGFub3RoZXIKLQkgKiBvbmUgZm9yIHRoZSBJTy1BUElDLgotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiBkZXRlY3RfaW5pdF9BUElDKCkpIHsKLQkJYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJYXBpY19waHlzID0gX19wYShhcGljX3BoeXMpOwotCX0gZWxzZQotCQlhcGljX3BoeXMgPSBtcF9sYXBpY19hZGRyOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFwaWNfcGh5cyk7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFwcGVkIEFQSUMgdG8gJTE2bHggKCUxNmx4KVxuIiwKLQkJCQlBUElDX0JBU0UsIGFwaWNfcGh5cyk7Ci0KLQkvKgotCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKLQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgotCSAqLwotCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwotfQotCi0vKgotICogVGhpcyBpbml0aWFsaXplcyB0aGUgSU8tQVBJQyBhbmQgQVBJQyBoYXJkd2FyZSBpZiB0aGlzIGlzCi0gKiBhIFVQIGtlcm5lbC4KLSAqLwotaW50IGFwaWNfdmVyc2lvbltNQVhfQVBJQ1NdOwotCi1pbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCkKLXsKLQlpZiAoZGlzYWJsZV9hcGljKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkFwaWMgZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmICghY3B1X2hhc19hcGljKSB7Ci0JCWRpc2FibGVfYXBpYyA9IDE7Ci0JCXByaW50ayhLRVJOX0lORk8gIkFwaWMgZGlzYWJsZWQgYnkgQklPU1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQllbmFibGVfSVJfeDJhcGljKCk7Ci0Jc2V0dXBfYXBpY19yb3V0aW5nKCk7Ci0KLQl2ZXJpZnlfbG9jYWxfQVBJQygpOwotCi0JY29ubmVjdF9ic3BfQVBJQygpOwotCi0JcGh5c2lkX3NldF9tYXNrX29mX3BoeXNpZChib290X2NwdV9waHlzaWNhbF9hcGljaWQsICZwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0JYXBpY193cml0ZShBUElDX0lELCBTRVRfQVBJQ19JRChib290X2NwdV9waHlzaWNhbF9hcGljaWQpKTsKLQotCXNldHVwX2xvY2FsX0FQSUMoKTsKLQotCS8qCi0JICogTm93IGVuYWJsZSBJTy1BUElDcywgYWN0dWFsbHkgY2FsbCBjbGVhcl9JT19BUElDCi0JICogV2UgbmVlZCBjbGVhcl9JT19BUElDIGJlZm9yZSBlbmFibGluZyB2ZWN0b3Igb24gQlAKLQkgKi8KLQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCWVuYWJsZV9JT19BUElDKCk7Ci0KLQlpZiAoIXNtcF9mb3VuZF9jb25maWcgfHwgc2tpcF9pb2FwaWNfc2V0dXAgfHwgIW5yX2lvYXBpY3MpCi0JCWxvY2FsaXNlX25taV93YXRjaGRvZygpOwotCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7Ci0KLQlpZiAoc21wX2ZvdW5kX2NvbmZpZyAmJiAhc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKLQkJc2V0dXBfSU9fQVBJQygpOwotCWVsc2UKLQkJbnJfaW9hcGljcyA9IDA7Ci0Jc2V0dXBfYm9vdF9BUElDX2Nsb2NrKCk7Ci0JY2hlY2tfbm1pX3dhdGNoZG9nKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIGludGVycnVwdHMKLSAqLwotCi0vKgotICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIF9uZXZlcl8gaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQotICovCi1hc21saW5rYWdlIHZvaWQgc21wX3NwdXJpb3VzX2ludGVycnVwdCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCS8qCi0JICogQ2hlY2sgaWYgdGhpcyByZWFsbHkgaXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgYW5kIEFDSyBpdAotCSAqIGlmIGl0IGlzIGEgdmVjdG9yZWQgb25lLiAgSnVzdCBpbiBjYXNlLi4uCi0JICogU3B1cmlvdXMgaW50ZXJydXB0cyBzaG91bGQgbm90IGJlIEFDS2VkLgotCSAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyAoKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgfjB4MWYpID4+IDEpKTsKLQlpZiAodiAmICgxIDw8IChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MWYpKSkKLQkJYWNrX0FQSUNfaXJxKCk7Ci0KLQlhZGRfcGRhKGlycV9zcHVyaW91c19jb3VudCwgMSk7Ci0JaXJxX2V4aXQoKTsKLX0KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBuZXZlciBoYXBwZW4gd2l0aCBvdXIgQVBJQy9TTVAgYXJjaGl0ZWN0dXJlCi0gKi8KLWFzbWxpbmthZ2Ugdm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHYsIHYxOwotCi0JZXhpdF9pZGxlKCk7Ci0JaXJxX2VudGVyKCk7Ci0JLyogRmlyc3QgdGlja2xlIHRoZSBoYXJkd2FyZSwgb25seSB0aGVuIHJlcG9ydCB3aGF0IHdlbnQgb24uIC0tIFJFVyAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCXYxID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhY2tfQVBJQ19pcnEoKTsKLQlhdG9taWNfaW5jKCZpcnFfZXJyX2NvdW50KTsKLQotCS8qIEhlcmUgaXMgd2hhdCB0aGUgQVBJQyBlcnJvciBiaXRzIG1lYW46Ci0JICAgMDogU2VuZCBDUyBlcnJvcgotCSAgIDE6IFJlY2VpdmUgQ1MgZXJyb3IKLQkgICAyOiBTZW5kIGFjY2VwdCBlcnJvcgotCSAgIDM6IFJlY2VpdmUgYWNjZXB0IGVycm9yCi0JICAgNDogUmVzZXJ2ZWQKLQkgICA1OiBTZW5kIGlsbGVnYWwgdmVjdG9yCi0JICAgNjogUmVjZWl2ZWQgaWxsZWdhbCB2ZWN0b3IKLQkgICA3OiBJbGxlZ2FsIHJlZ2lzdGVyIGFkZHJlc3MKLQkqLwotCXByaW50ayhLRVJOX0RFQlVHICJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJ4KCUwMngpXG4iLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIHYgLCB2MSk7Ci0JaXJxX2V4aXQoKTsKLX0KLQotLyoqCi0gKiBjb25uZWN0X2JzcF9BUElDIC0gYXR0YWNoIHRoZSBBUElDIHRvIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCi0gKi8KLXZvaWQgX19pbml0IGNvbm5lY3RfYnNwX0FQSUModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKHBpY19tb2RlKSB7Ci0JCS8qCi0JCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCi0JCSAqLwotCQljbGVhcl9sb2NhbF9BUElDKCk7Ci0JCS8qCi0JCSAqIFBJQyBtb2RlLCBlbmFibGUgQVBJQyBtb2RlIGluIHRoZSBJTUNSLCBpLmUuICBjb25uZWN0IEJTUCdzCi0JCSAqIGxvY2FsIEFQSUMgdG8gSU5UIGFuZCBOTUkgbGluZXMuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJsZWF2aW5nIFBJQyBtb2RlLCAiCi0JCQkJImVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOwotCQlvdXRiKDB4NzAsIDB4MjIpOwotCQlvdXRiKDB4MDEsIDB4MjMpOwotCX0KLSNlbmRpZgotCWVuYWJsZV9hcGljX21vZGUoKTsKLX0KLQotLyoqCi0gKiBkaXNjb25uZWN0X2JzcF9BUElDIC0gZGV0YWNoIHRoZSBBUElDIGZyb20gdGhlIGludGVycnVwdCBzeXN0ZW0KLSAqIEB2aXJ0X3dpcmVfc2V0dXA6CWluZGljYXRlcywgd2hldGhlciB2aXJ0dWFsIHdpcmUgbW9kZSBpcyBzZWxlY3RlZAotICoKLSAqIFZpcnR1YWwgd2lyZSBtb2RlIGlzIG5lY2Vzc2FyeSB0byBkZWxpdmVyIGxlZ2FjeSBpbnRlcnJ1cHRzIGV2ZW4gd2hlbiB0aGUKLSAqIEFQSUMgaXMgZGlzYWJsZWQuCi0gKi8KLXZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyhpbnQgdmlydF93aXJlX3NldHVwKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAocGljX21vZGUpIHsKLQkJLyoKLQkJICogUHV0IHRoZSBib2FyZCBiYWNrIGludG8gUElDIG1vZGUgKGhhcyBhbiBlZmZlY3Qgb25seSBvbgotCQkgKiBjZXJ0YWluIG9sZGVyIGJvYXJkcykuICBOb3RlIHRoYXQgQVBJQyBpbnRlcnJ1cHRzLCBpbmNsdWRpbmcKLQkJICogSVBJcywgd29uJ3Qgd29yayBiZXlvbmQgdGhpcyBwb2ludCEgIFRoZSBvbmx5IGV4Y2VwdGlvbiBhcmUKLQkJICogSU5JVCBJUElzLgotCQkgKi8KLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZGlzYWJsaW5nIEFQSUMgbW9kZSwgIgotCQkJCSJlbnRlcmluZyBQSUMgbW9kZS5cbiIpOwotCQlvdXRiKDB4NzAsIDB4MjIpOwotCQlvdXRiKDB4MDAsIDB4MjMpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0KLQkvKiBHbyBiYWNrIHRvIFZpcnR1YWwgV2lyZSBjb21wYXRpYmlsaXR5IG1vZGUgKi8KLQotCS8qIEZvciB0aGUgc3B1cmlvdXMgaW50ZXJydXB0IHVzZSB2ZWN0b3IgRiwgYW5kIGVuYWJsZSBpdCAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQl2YWx1ZSB8PSAweGY7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotCWlmICghdmlydF93aXJlX3NldHVwKSB7Ci0JCS8qCi0JCSAqIEZvciBMVlQwIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLAotCQkgKiBleHRlcm5hbCBhbmQgZW5hYmxlZAotCQkgKi8KLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQkJdmFsdWUgJj0gfihBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKLQkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKLQkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOwotCQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7Ci0JCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX0VYVElOVCk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSBMVlQwICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQotCS8qCi0JICogRm9yIExWVDEgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsCi0JICogbm1pIGFuZCBlbmFibGVkCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAotCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAotCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOwotCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX05NSSk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgZ2VuZXJpY19wcm9jZXNzb3JfaW5mbyhpbnQgYXBpY2lkLCBpbnQgdmVyc2lvbikKLXsKLQlpbnQgY3B1OwotCWNwdW1hc2tfdCB0bXBfbWFwOwotCi0JLyoKLQkgKiBWYWxpZGF0ZSB2ZXJzaW9uCi0JICovCi0JaWYgKHZlcnNpb24gPT0gMHgwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgYnVnLCBBUElDIHZlcnNpb24gaXMgMCBmb3IgQ1BVIyVkISAiCi0JCQkJImZpeGluZyB1cCB0byAweDEwLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCi0JCQkJdmVyc2lvbik7Ci0JCXZlcnNpb24gPSAweDEwOwotCX0KLQlhcGljX3ZlcnNpb25bYXBpY2lkXSA9IHZlcnNpb247Ci0KLQlpZiAobnVtX3Byb2Nlc3NvcnMgPj0gTlJfQ1BVUykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBOUl9DUFVTIGxpbWl0IG9mICVpIHJlYWNoZWQuIgotCQkJIiAgUHJvY2Vzc29yIGlnbm9yZWQuXG4iLCBOUl9DUFVTKTsKLQkJcmV0dXJuOwotCX0KLQotCW51bV9wcm9jZXNzb3JzKys7Ci0JY3B1c19jb21wbGVtZW50KHRtcF9tYXAsIGNwdV9wcmVzZW50X21hcCk7Ci0JY3B1ID0gZmlyc3RfY3B1KHRtcF9tYXApOwotCi0JcGh5c2lkX3NldChhcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQlpZiAoYXBpY2lkID09IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkgewotCQkvKgotCQkgKiB4ODZfYmlvc19jcHVfYXBpY2lkIGlzIHJlcXVpcmVkIHRvIGhhdmUgcHJvY2Vzc29ycyBsaXN0ZWQKLQkJICogaW4gc2FtZSBvcmRlciBhcyBsb2dpY2FsIGNwdSBudW1iZXJzLiBIZW5jZSB0aGUgZmlyc3QKLQkJICogZW50cnkgaXMgQlNQLCBhbmQgc28gb24uCi0JCSAqLwotCQljcHUgPSAwOwotCX0KLQlpZiAoYXBpY2lkID4gbWF4X3BoeXNpY2FsX2FwaWNpZCkKLQkJbWF4X3BoeXNpY2FsX2FwaWNpZCA9IGFwaWNpZDsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIFdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3dpdGNoIHRvIGJpZ3NtcCB3aGVuIENPTkZJR19IT1RQTFVHX0NQVT15Ci0JICogYnV0IHdlIG5lZWQgdG8gd29yayBvdGhlciBkZXBlbmRlbmNpZXMgbGlrZSBTTVBfU1VTUEVORCBldGMKLQkgKiBiZWZvcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IHNvbWUgY29uZnVzaW9uLgotCSAqIGlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IG51bV9wcm9jZXNzb3JzID4gOCkKLQkgKiAgICAgICAtIEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KLQkgKi8KLQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KSB7Ci0JCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7Ci0JCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJCWlmICghQVBJQ19YQVBJQyh2ZXJzaW9uKSkgewotCQkJCWRlZl90b19iaWdzbXAgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogSWYgUDQgYW5kIGFib3ZlIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgotCQkJZGVmX3RvX2JpZ3NtcCA9IDE7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQkvKiBhcmUgd2UgYmVpbmcgY2FsbGVkIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwPyAqLwotCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCkpIHsKLQkJdTE2ICpjcHVfdG9fYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpOwotCQl1MTYgKmJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwotCi0JCWNwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKLQkJYmlvc19jcHVfYXBpY2lkW2NwdV0gPSBhcGljaWQ7Ci0JfSBlbHNlIHsKLQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKLQkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0gYXBpY2lkOwotCX0KLSNlbmRpZgotCi0JY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOwotCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotfQotCi1pbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JcmV0dXJuIHJlYWRfYXBpY19pZCgpOwotfQotCi0vKgotICogUG93ZXIgbWFuYWdlbWVudAotICovCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBzdHJ1Y3QgewotCS8qCi0JICogJ2FjdGl2ZScgaXMgdHJ1ZSBpZiB0aGUgbG9jYWwgQVBJQyB3YXMgZW5hYmxlZCBieSB1cyBhbmQKLQkgKiBub3QgdGhlIEJJT1M7IHRoaXMgc2lnbmlmaWVzIHRoYXQgd2UgYXJlIGFsc28gcmVzcG9uc2libGUKLQkgKiBmb3IgZGlzYWJsaW5nIGl0IGJlZm9yZSBlbnRlcmluZyBhcG0vYWNwaSBzdXNwZW5kCi0JICovCi0JaW50IGFjdGl2ZTsKLQkvKiByL3cgYXBpYyBmaWVsZHMgKi8KLQl1bnNpZ25lZCBpbnQgYXBpY19pZDsKLQl1bnNpZ25lZCBpbnQgYXBpY190YXNrcHJpOwotCXVuc2lnbmVkIGludCBhcGljX2xkcjsKLQl1bnNpZ25lZCBpbnQgYXBpY19kZnI7Ci0JdW5zaWduZWQgaW50IGFwaWNfc3BpdjsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnR0OwotCXVuc2lnbmVkIGludCBhcGljX2x2dHBjOwotCXVuc2lnbmVkIGludCBhcGljX2x2dDA7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0MTsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnRlcnI7Ci0JdW5zaWduZWQgaW50IGFwaWNfdG1pY3Q7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGRjcjsKLQl1bnNpZ25lZCBpbnQgYXBpY190aG1yOwotfSBhcGljX3BtX3N0YXRlOwotCi1zdGF0aWMgaW50IGxhcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1heGx2dDsKLQotCWlmICghYXBpY19wbV9zdGF0ZS5hY3RpdmUpCi0JCXJldHVybiAwOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JYXBpY19wbV9zdGF0ZS5hcGljX2lkID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2xkciA9IGFwaWNfcmVhZChBUElDX0xEUik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2RmciA9IGFwaWNfcmVhZChBUElDX0RGUik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3NwaXYgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0dCA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCWlmIChtYXhsdnQgPj0gNCkKLQkJYXBpY19wbV9zdGF0ZS5hcGljX2x2dHBjID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnQwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dDEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0ZXJyID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdG1pY3QgPSBhcGljX3JlYWQoQVBJQ19UTUlDVCk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3RkY3IgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKLQlpZiAobWF4bHZ0ID49IDUpCi0JCWFwaWNfcG1fc3RhdGUuYXBpY190aG1yID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7Ci0jZW5kaWYKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFwaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgaW50IGwsIGg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbWF4bHZ0OwotCi0JaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JaWYgKHgyYXBpYykKLQkJZW5hYmxlX3gyYXBpYygpOwotCWVsc2UKLSNlbmRpZgotCXsKLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoZSBBUElDQkFTRSBwb2ludHMgdG8gdGhlIHJpZ2h0IGFkZHJlc3MKLQkJICoKLQkJICogRklYTUUhIFRoaXMgd2lsbCBiZSB3cm9uZyBpZiB3ZSBldmVyIHN1cHBvcnQgc3VzcGVuZCBvbgotCQkgKiBTTVAhIFdlJ2xsIG5lZWQgdG8gZG8gdGhpcyBhcyBwYXJ0IG9mIHRoZSBDUFUgcmVzdG9yZSEKLQkJICovCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKLQkJbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBtcF9sYXBpY19hZGRyOwotCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JfQotCi0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgRVJST1JfQVBJQ19WRUNUT1IgfCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgYXBpY19wbV9zdGF0ZS5hcGljX2lkKTsKLQlhcGljX3dyaXRlKEFQSUNfREZSLCBhcGljX3BtX3N0YXRlLmFwaWNfZGZyKTsKLQlhcGljX3dyaXRlKEFQSUNfTERSLCBhcGljX3BtX3N0YXRlLmFwaWNfbGRyKTsKLQlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkpOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCBhcGljX3BtX3N0YXRlLmFwaWNfc3Bpdik7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dDEpOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkKLQkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIGFwaWNfcG1fc3RhdGUuYXBpY190aG1yKTsKLSNlbmRpZgotCWlmIChtYXhsdnQgPj0gNCkKLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0dCk7Ci0JYXBpY193cml0ZShBUElDX1REQ1IsIGFwaWNfcG1fc3RhdGUuYXBpY190ZGNyKTsKLQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGFwaWNfcG1fc3RhdGUuYXBpY190bWljdCk7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0ZXJyKTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIGRldmljZSBoYXMgbm8gc2h1dGRvd24gbWV0aG9kIC0gZnVsbHkgZnVuY3Rpb25pbmcgbG9jYWwgQVBJQ3MKLSAqIGFyZSBuZWVkZWQgb24gZXZlcnkgQ1BVIHVwIHVudGlsIG1hY2hpbmVfaGFsdC9yZXN0YXJ0L3Bvd2Vyb2ZmLgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGxhcGljX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJsYXBpYyIsCi0JLnJlc3VtZQkJPSBsYXBpY19yZXN1bWUsCi0JLnN1c3BlbmQJPSBsYXBpY19zdXNwZW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9sYXBpYyA9IHsKLQkuaWQJPSAwLAotCS5jbHMJPSAmbGFwaWNfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKQotewotCWFwaWNfcG1fc3RhdGUuYWN0aXZlID0gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9sYXBpY19zeXNmcyh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWlmICghY3B1X2hhc19hcGljKQotCQlyZXR1cm4gMDsKLQkvKiBYWFg6IHJlbW92ZSBzdXNwZW5kL3Jlc3VtZSBwcm9jcyBpZiAhYXBpY19wbV9zdGF0ZS5hY3RpdmU/ICovCi0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGFwaWNfc3lzY2xhc3MpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfbGFwaWMpOwotCXJldHVybiBlcnJvcjsKLX0KLWRldmljZV9pbml0Y2FsbChpbml0X2xhcGljX3N5c2ZzKTsKLQotI2Vsc2UJLyogQ09ORklHX1BNICovCi0KLXN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCkgeyB9Ci0KLSNlbmRpZgkvKiBDT05GSUdfUE0gKi8KLQotLyoKLSAqIGFwaWNfaXNfY2x1c3RlcmVkX2JveCgpIC0tIENoZWNrIGlmIHdlIGNhbiBleHBlY3QgZ29vZCBUU0MKLSAqCi0gKiBUaHVzIGZhciwgdGhlIG1ham9yIHVzZXIgb2YgdGhpcyBpcyBJQk0ncyBTdW1taXQyIHNlcmllczoKLSAqCi0gKiBDbHVzdGVyZWQgYm94ZXMgbWF5IGhhdmUgdW5zeW5jZWQgVFNDIHByb2JsZW1zIGlmIHRoZXkgYXJlCi0gKiBtdWx0aS1jaGFzc2lzLiBVc2UgYXZhaWxhYmxlIGRhdGEgdG8gdGFrZSBhIGdvb2QgZ3Vlc3MuCi0gKiBJZiBpbiBkb3VidCwgZ28gSFBFVC4KLSAqLwotX19jcHVpbml0IGludCBhcGljX2lzX2NsdXN0ZXJlZF9ib3godm9pZCkKLXsKLQlpbnQgaSwgY2x1c3RlcnMsIHplcm9zOwotCXVuc2lnbmVkIGlkOwotCXUxNiAqYmlvc19jcHVfYXBpY2lkOwotCURFQ0xBUkVfQklUTUFQKGNsdXN0ZXJtYXAsIE5VTV9BUElDX0NMVVNURVJTKTsKLQotCS8qCi0JICogdGhlcmUgaXMgbm90IHRoaXMga2luZCBvZiBib3ggd2l0aCBBTUQgQ1BVIHlldC4KLQkgKiBTb21lIEFNRCBib3ggd2l0aCBxdWFkY29yZSBjcHUgYW5kIDggc29ja2V0cyBhcGljaWQKLQkgKiB3aWxsIGJlIFs0LCAweDIzXSBvciBbOCwgMHgyN10gY291bGQgYmUgdGhvdWdodCB0bwotCSAqIHZzbXAgYm94IHN0aWxsIG5lZWQgY2hlY2tpbmcuLi4KLQkgKi8KLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYgIWlzX3ZzbXBfYm94KCkpCi0JCXJldHVybiAwOwotCi0JYmlvc19jcHVfYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCk7Ci0JYml0bWFwX3plcm8oY2x1c3Rlcm1hcCwgTlVNX0FQSUNfQ0xVU1RFUlMpOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQkvKiBhcmUgd2UgYmVpbmcgY2FsbGVkIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwPyAqLwotCQlpZiAoYmlvc19jcHVfYXBpY2lkKSB7Ci0JCQlpZCA9IGJpb3NfY3B1X2FwaWNpZFtpXTsKLQkJfQotCQllbHNlIGlmIChpIDwgbnJfY3B1X2lkcykgewotCQkJaWYgKGNwdV9wcmVzZW50KGkpKQotCQkJCWlkID0gcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBpKTsKLQkJCWVsc2UKLQkJCQljb250aW51ZTsKLQkJfQotCQllbHNlCi0JCQlicmVhazsKLQotCQlpZiAoaWQgIT0gQkFEX0FQSUNJRCkKLQkJCV9fc2V0X2JpdChBUElDX0NMVVNURVJJRChpZCksIGNsdXN0ZXJtYXApOwotCX0KLQotCS8qIFByb2JsZW06ICBQYXJ0aWFsbHkgcG9wdWxhdGVkIGNoYXNzaXMgbWF5IG5vdCBoYXZlIENQVXMgaW4gc29tZSBvZgotCSAqIHRoZSBBUElDIGNsdXN0ZXJzIHRoZXkgaGF2ZSBiZWVuIGFsbG9jYXRlZC4gIE9ubHkgcHJlc2VudCBDUFVzIGhhdmUKLQkgKiB4ODZfYmlvc19jcHVfYXBpY2lkIGVudHJpZXMsIHRodXMgY2F1c2luZyB6ZXJvZXMgaW4gdGhlIGJpdG1hcC4KLQkgKiBTaW5jZSBjbHVzdGVycyBhcmUgYWxsb2NhdGVkIHNlcXVlbnRpYWxseSwgY291bnQgemVyb3Mgb25seSBpZgotCSAqIHRoZXkgYXJlIGJvdW5kZWQgYnkgb25lcy4KLQkgKi8KLQljbHVzdGVycyA9IDA7Ci0JemVyb3MgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQVBJQ19DTFVTVEVSUzsgaSsrKSB7Ci0JCWlmICh0ZXN0X2JpdChpLCBjbHVzdGVybWFwKSkgewotCQkJY2x1c3RlcnMgKz0gMSArIHplcm9zOwotCQkJemVyb3MgPSAwOwotCQl9IGVsc2UKLQkJCSsremVyb3M7Ci0JfQotCi0JLyogU2NhbGVNUCB2U01Qb3dlcmVkIGJveGVzIGhhdmUgb25lIGNsdXN0ZXIgcGVyIGJvYXJkIGFuZCBUU0NzIGFyZQotCSAqIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN5bmNlZCBiZXR3ZWVuIGJvYXJkcwotCSAqLwotCWlmIChpc192c21wX2JveCgpICYmIGNsdXN0ZXJzID4gMSkKLQkJcmV0dXJuIDE7Ci0KLQkvKgotCSAqIElmIGNsdXN0ZXJzID4gMiwgdGhlbiBzaG91bGQgYmUgbXVsdGktY2hhc3Npcy4KLQkgKiBNYXkgaGF2ZSB0byByZXZpc2l0IHRoaXMgd2hlbiBtdWx0aS1jb3JlICsgaHlwZXJ0aHJlYWRlZCBDUFVzIGNvbWUKLQkgKiBvdXQsIGJ1dCBBRkFJSyB0aGlzIHdpbGwgd29yayBldmVuIGZvciB0aGVtLgotCSAqLwotCXJldHVybiAoY2x1c3RlcnMgPiAyKTsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfbm94MmFwaWMoY2hhciAqc3RyKQotewotCWRpc2FibGVfeDJhcGljID0gMTsKLQljbGVhcl9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9YMkFQSUMpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5veDJhcGljIiwgc2V0dXBfbm94MmFwaWMpOwotCi0KLS8qCi0gKiBBUElDIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2Rpc2FibGVhcGljKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX2FwaWMgPSAxOwotCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfQVBJQyk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGlzYWJsZWFwaWMiLCBzZXR1cF9kaXNhYmxlYXBpYyk7Ci0KLS8qIHNhbWUgYXMgZGlzYWJsZWFwaWMsIGZvciBjb21wYXRpYmlsaXR5ICovCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ub2xhcGljKGNoYXIgKmFyZykKLXsKLQlyZXR1cm4gc2V0dXBfZGlzYWJsZWFwaWMoYXJnKTsKLX0KLWVhcmx5X3BhcmFtKCJub2xhcGljIiwgc2V0dXBfbm9sYXBpYyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKGNoYXIgKmFyZykKLXsKLQlsb2NhbF9hcGljX3RpbWVyX2MyX29rID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJsYXBpY190aW1lcl9jMl9vayIsIHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vYXBpY3RpbWVyIiwgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9sYXBpY190aW1lcihjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2xhcGljX3RpbWVyIiwgcGFyc2Vfbm9sYXBpY190aW1lcik7Ci0KLXN0YXRpYyBfX2luaXQgaW50IHNldHVwX2FwaWNwbXRpbWVyKGNoYXIgKnMpCi17Ci0JYXBpY19jYWxpYnJhdGVfcG10bXIgPSAxOwotCW5vdHNjX3NldHVwKE5VTEwpOwotCXJldHVybiAwOwotfQotX19zZXR1cCgiYXBpY3BtdGltZXIiLCBzZXR1cF9hcGljcG10aW1lcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFwaWNfc2V0X3ZlcmJvc2l0eShjaGFyICphcmcpCi17Ci0JaWYgKCFhcmcpICB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQlza2lwX2lvYXBpY19zZXR1cCA9IDA7Ci0JCWlvYXBpY19mb3JjZSA9IDE7Ci0JCXJldHVybiAwOwotI2VuZGlmCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChzdHJjbXAoImRlYnVnIiwgYXJnKSA9PSAwKQotCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfREVCVUc7Ci0JZWxzZSBpZiAoc3RyY21wKCJ2ZXJib3NlIiwgYXJnKSA9PSAwKQotCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfVkVSQk9TRTsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBWZXJib3NpdHkgbGV2ZWwgJXMgbm90IHJlY29nbmlzZWQiCi0JCQkiIHVzZSBhcGljPXZlcmJvc2Ugb3IgYXBpYz1kZWJ1Z1xuIiwgYXJnKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiYXBpYyIsIGFwaWNfc2V0X3ZlcmJvc2l0eSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGxhcGljX2luc2VydF9yZXNvdXJjZSh2b2lkKQotewotCWlmICghYXBpY19waHlzKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBQdXQgbG9jYWwgQVBJQyBpbnRvIHRoZSByZXNvdXJjZSBtYXAuICovCi0JbGFwaWNfcmVzb3VyY2Uuc3RhcnQgPSBhcGljX3BoeXM7Ci0JbGFwaWNfcmVzb3VyY2UuZW5kID0gbGFwaWNfcmVzb3VyY2Uuc3RhcnQgKyBQQUdFX1NJWkUgLSAxOwotCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsYXBpY19yZXNvdXJjZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG5lZWQgY2FsbCBpbnNlcnQgYWZ0ZXIgZTgyMF9yZXNlcnZlX3Jlc291cmNlcygpCi0gKiB0aGF0IGlzIHVzaW5nIHJlcXVlc3RfcmVzb3VyY2UKLSAqLwotbGF0ZV9pbml0Y2FsbChsYXBpY19pbnNlcnRfcmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwppbmRleCA1MDU1NDNhLi43ZmNmNjNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwpAQCAtMjIsNyArMjIsNyBAQAogCiAjZGVmaW5lIF9fTk9fU1RVQlMgMQogI3VuZGVmIF9fU1lTQ0FMTAotI3VuZGVmIEFTTV9YODZfX1VOSVNURF82NF9ICisjdW5kZWYgX0FTTV9YODZfVU5JU1REXzY0X0gKICNkZWZpbmUgX19TWVNDQUxMKG5yLCBzeW0pIFtucl0gPSAxLAogc3RhdGljIGNoYXIgc3lzY2FsbHNbXSA9IHsKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwppbmRleCBmZGQ1ODVmLi5mMGRmZTZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogQklPUyBydW4gdGltZSBpbnRlcmZhY2Ugcm91dGluZXMuCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTE2LDMzICsxNCwxMjggQEAKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lZmkuaD4KKyNpbmNsdWRlIDxhc20vZWZpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vdXYvYmlvcy5oPgorI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KIAotY29uc3QgY2hhciAqCi14ODZfYmlvc19zdHJlcnJvcihsb25nIHN0YXR1cykKK3N0cnVjdCB1dl9zeXN0YWIgdXZfc3lzdGFiOworCitzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsIHU2NCBhNCwgdTY0IGE1KQogewotCWNvbnN0IGNoYXIgKnN0cjsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgIDA6IHN0ciA9ICJDYWxsIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yIjsJYnJlYWs7Ci0JY2FzZSAtMTogc3RyID0gIk5vdCBpbXBsZW1lbnRlZCI7CQlicmVhazsKLQljYXNlIC0yOiBzdHIgPSAiSW52YWxpZCBhcmd1bWVudCI7CQlicmVhazsKLQljYXNlIC0zOiBzdHIgPSAiQ2FsbCBjb21wbGV0ZWQgd2l0aCBlcnJvciI7CWJyZWFrOwotCWRlZmF1bHQ6IHN0ciA9ICJVbmtub3duIEJJT1Mgc3RhdHVzIGNvZGUiOwlicmVhazsKKwlzdHJ1Y3QgdXZfc3lzdGFiICp0YWIgPSAmdXZfc3lzdGFiOworCisJaWYgKCF0YWItPmZ1bmN0aW9uKQorCQkvKgorCQkgKiBCSU9TIGRvZXMgbm90IHN1cHBvcnQgVVYgc3lzdGFiCisJCSAqLworCQlyZXR1cm4gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKKworCXJldHVybiBlZmlfY2FsbDYoKHZvaWQgKilfX3ZhKHRhYi0+ZnVuY3Rpb24pLAorCQkJCQkodTY0KXdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworfQorCitzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywKKwkJCQkJdTY0IGE0LCB1NjQgYTUpCit7CisJdW5zaWduZWQgbG9uZyBiaW9zX2ZsYWdzOworCXM2NCByZXQ7CisKKwlsb2NhbF9pcnFfc2F2ZShiaW9zX2ZsYWdzKTsKKwlyZXQgPSB1dl9iaW9zX2NhbGwod2hpY2gsIGExLCBhMiwgYTMsIGE0LCBhNSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoYmlvc19mbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzNjQgdXZfYmlvc19jYWxsX3JlZW50cmFudChlbnVtIHV2X2Jpb3NfY21kIHdoaWNoLCB1NjQgYTEsIHU2NCBhMiwgdTY0IGEzLAorCQkJCQl1NjQgYTQsIHU2NCBhNSkKK3sKKwlzNjQgcmV0OworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcmV0ID0gdXZfYmlvc19jYWxsKHdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK2xvbmcgc25fcGFydGl0aW9uX2lkOworRVhQT1JUX1NZTUJPTF9HUEwoc25fcGFydGl0aW9uX2lkKTsKK2xvbmcgdXZfY29oZXJlbmN5X2lkOworRVhQT1JUX1NZTUJPTF9HUEwodXZfY29oZXJlbmN5X2lkKTsKK2xvbmcgdXZfcmVnaW9uX3NpemU7CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9yZWdpb25fc2l6ZSk7CitpbnQgdXZfdHlwZTsKKworCitzNjQgdXZfYmlvc19nZXRfc25faW5mbyhpbnQgZmMsIGludCAqdXZ0eXBlLCBsb25nICpwYXJ0aWQsIGxvbmcgKmNvaGVyLAorCQlsb25nICpyZWdpb24pCit7CisJczY0IHJldDsKKwl1NjQgdjAsIHYxOworCXVuaW9uIHBhcnRpdGlvbl9pbmZvX3UgcGFydDsKKworCXJldCA9IHV2X2Jpb3NfY2FsbF9pcnFzYXZlKFVWX0JJT1NfR0VUX1NOX0lORk8sIGZjLAorCQkJCSh1NjQpKCZ2MCksICh1NjQpKCZ2MSksIDAsIDApOworCWlmIChyZXQgIT0gQklPU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIHJldDsKKworCXBhcnQudmFsID0gdjA7CisJaWYgKHV2dHlwZSkKKwkJKnV2dHlwZSA9IHBhcnQuaHViX3ZlcnNpb247CisJaWYgKHBhcnRpZCkKKwkJKnBhcnRpZCA9IHBhcnQucGFydGl0aW9uX2lkOworCWlmIChjb2hlcikKKwkJKmNvaGVyID0gcGFydC5jb2hlcmVuY2VfaWQ7CisJaWYgKHJlZ2lvbikKKwkJKnJlZ2lvbiA9IHBhcnQucmVnaW9uX3NpemU7CisJcmV0dXJuIHJldDsKK30KKworCitzNjQgdXZfYmlvc19mcmVxX2Jhc2UodTY0IGNsb2NrX3R5cGUsIHU2NCAqdGlja3NfcGVyX3NlY29uZCkKK3sKKwlyZXR1cm4gdXZfYmlvc19jYWxsKFVWX0JJT1NfRlJFUV9CQVNFLCBjbG9ja190eXBlLAorCQkJICAgKHU2NCl0aWNrc19wZXJfc2Vjb25kLCAwLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X2Jpb3NfZnJlcV9iYXNlKTsKKworCisjaWZkZWYgQ09ORklHX0VGSQordm9pZCB1dl9iaW9zX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdXZfc3lzdGFiICp0YWI7CisKKwlpZiAoKGVmaS51dl9zeXN0YWIgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgfHwKKwkgICAgKGVmaS51dl9zeXN0YWIgPT0gKHVuc2lnbmVkIGxvbmcpTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiTm8gRUZJIFVWIFN5c3RlbSBUYWJsZS5cbiIpOworCQl1dl9zeXN0YWIuZnVuY3Rpb24gPSAodW5zaWduZWQgbG9uZylOVUxMOworCQlyZXR1cm47CiAJfQotCXJldHVybiBzdHI7Ci19CiAKLWxvbmcKLXg4Nl9iaW9zX2ZyZXFfYmFzZSh1bnNpZ25lZCBsb25nIHdoaWNoLCB1bnNpZ25lZCBsb25nICp0aWNrc19wZXJfc2Vjb25kLAotCQkgICB1bnNpZ25lZCBsb25nICpkcmlmdF9pbmZvKQotewotCXN0cnVjdCB1dl9iaW9zX3JldHZhbCBpc3J2OworCXRhYiA9IChzdHJ1Y3QgdXZfc3lzdGFiICopaW9yZW1hcChlZmkudXZfc3lzdGFiLAorCQkJCQlzaXplb2Yoc3RydWN0IHV2X3N5c3RhYikpOworCWlmIChzdHJuY21wKHRhYi0+c2lnbmF0dXJlLCAiVVZTVCIsIDQpICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiYmFkIHNpZ25hdHVyZSBpbiBVViBzeXN0ZW0gdGFibGUhIik7CiAKLQlCSU9TX0NBTEwoaXNydiwgQklPU19GUkVRX0JBU0UsIHdoaWNoLCAwLCAwLCAwLCAwLCAwLCAwKTsKLQkqdGlja3NfcGVyX3NlY29uZCA9IGlzcnYudjA7Ci0JKmRyaWZ0X2luZm8gPSBpc3J2LnYxOwotCXJldHVybiBpc3J2LnN0YXR1czsKKwkvKgorCSAqIENvcHkgdGFibGUgdG8gcGVybWFuZW50IHNwb3QgZm9yIGxhdGVyIHVzZS4KKwkgKi8KKwltZW1jcHkoJnV2X3N5c3RhYiwgdGFiLCBzaXplb2Yoc3RydWN0IHV2X3N5c3RhYikpOworCWlvdW5tYXAodGFiKTsKKworCXByaW50ayhLRVJOX0lORk8gIkVGSSBVViBTeXN0ZW0gVGFibGUgUmV2aXNpb24gJWRcbiIsIHRhYi0+cmV2aXNpb24pOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoeDg2X2Jpb3NfZnJlcV9iYXNlKTsKKyNlbHNlCS8qICFDT05GSUdfRUZJICovCisKK3ZvaWQgdXZfYmlvc19pbml0KHZvaWQpIHsgfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvLmdpdGlnbm9yZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjdkZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK2NhcGZsYWdzLmMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IDdmMGI0NWEuLjgyZWM2MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMjUsNyArMjUsNyBAQAogcXVpZXRfY21kX21rY2FwZmxhZ3MgPSBNS0NBUCAgICRACiAgICAgICBjbWRfbWtjYXBmbGFncyA9ICQoUEVSTCkgJChzcmN0cmVlKS8kKHNyYykvbWtjYXBmbGFncy5wbCAkPCAkQAogCi1jcHVmZWF0dXJlID0gJChzcmMpLy4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKK2NwdWZlYXR1cmUgPSAkKHNyYykvLi4vLi4vaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCiAKIHRhcmdldHMgKz0gY2FwZmxhZ3MuYwogJChvYmopL2NhcGZsYWdzLmM6ICQoY3B1ZmVhdHVyZSkgJChzcmMpL21rY2FwZmxhZ3MucGwgRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDMyZTczNTIuLjhmMWUzMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJfQogCW51bWFfc2V0X25vZGUoY3B1LCBub2RlKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZC8leCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkLzB4JXggLT4gTm9kZSAlZFxuIiwgY3B1LCBhcGljaWQsIG5vZGUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCBjMjRjNGE0Li44ZTQ4YzVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC03ODAsNiArNzgwLDkgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAwOworCiAJZHByaW50aygiYWNwaV9jcHVmcmVxX2luaXRcbiIpOwogCiAJcmV0ID0gYWNwaV9jcHVmcmVxX2Vhcmx5X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggMDZmY2NlNS4uYjA0NjE4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIChDKSAyMDAxLTIwMDQgIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqICAoQykgMjAwMS0yMDA0ICBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqICAoQykgMjAwMiAgUGFkcmFpZyBCcmFkeS4gPHBhZHJhaWdAYW50ZWZhY3RvLmNvbT4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIG1vZHVsZV9wYXJhbShyZXZpZF9lcnJhdGEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJldmlkX2VycmF0YSwgIklnbm9yZSBDUFUgUmV2aXNpb24gSUQiKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJMb25naGF1bCBkcml2ZXIgZm9yIFZJQSBDeXJpeCBwcm9jZXNzb3JzLiIpOwogTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwppbmRleCBiNWNlZDgwLi5jMWFjNTc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUigiQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW52QHJlZGhhdC5jb20+LCBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkFyamFuIHZhbiBkZSBWZW4sIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyTm93ISBkcml2ZXIgZm9yIEFNRCBLNi0yKyAvIEs2LTMrIHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKaW5kZXggMGE2MTE1OS4uN2M3ZDU2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIEFNRCBLNyBQb3dlcm5vdyBkcml2ZXIuCi0gKiAgKEMpIDIwMDMgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+IG9uIGJlaGFsZiBvZiBTdVNFIExhYnMuCisgKiAgKEMpIDIwMDMgRGF2ZSBKb25lcyBvbiBiZWhhbGYgb2YgU3VTRSBMYWJzLgogICogIChDKSAyMDAzLTIwMDQgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgpAQCAtNjkyLDcgKzY5Miw3IEBACiBtb2R1bGVfcGFyYW0oYWNwaV9mb3JjZSwgIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFjcGlfZm9yY2UsICJGb3JjZSBBQ1BJIHRvIGJlIHVzZWQuIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiUG93ZXJub3cgZHJpdmVyIGZvciBBTUQgSzcgcHJvY2Vzc29ycy4iKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggODRiYjM5NS4uZDNkY2Q1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTcsNyArNyw3IEBACiAgKiAgU3VwcG9ydCA6IG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20KICAqCiAgKiAgQmFzZWQgb24gdGhlIHBvd2Vybm93LWs3LmMgbW9kdWxlIHdyaXR0ZW4gYnkgRGF2ZSBKb25lcy4KLSAqICAoQykgMjAwMyBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4gb24gYmVoYWxmIG9mIFN1U0UgTGFicworICogIChDKSAyMDAzIERhdmUgSm9uZXMgb24gYmVoYWxmIG9mIFN1U0UgTGFicwogICogIChDKSAyMDA0IERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4KICAqICAoQykgMjAwNCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgpAQCAtNDUsNyArNDUsNiBAQAogI2VuZGlmCiAKICNkZWZpbmUgUEZYICJwb3dlcm5vdy1rODogIgotI2RlZmluZSBCRlggUEZYICJCSU9TIGVycm9yOiAiCiAjZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMi4yMC4wMCIKICNpbmNsdWRlICJwb3dlcm5vdy1rOC5oIgogCkBAIC01MzYsMzUgKzUzNSw0MCBAQAogCiAJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bXBzOyBqKyspIHsKIAkJaWYgKHBzdFtqXS52aWQgPiBMRUFTVF9WSUQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggInZpZCAlZCBpbnZhbGlkIDogMHgleFxuIiwgaiwgcHN0W2pdLnZpZCk7CisJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAidmlkICVkIGludmFsaWQgOiAweCV4XG4iLAorCQkJICAgICAgIGosIHBzdFtqXS52aWQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHBzdFtqXS52aWQgPCBkYXRhLT5ydm8pIHsJLyogdmlkICsgcnZvID49IDAgKi8KLQkJCXByaW50ayhLRVJOX0VSUiBCRlggIjAgdmlkIGV4Y2VlZGVkIHdpdGggcHN0YXRlICVkXG4iLCBqKTsKKwkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICIwIHZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSIKKwkJCSAgICAgICAiICVkXG4iLCBqKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWlmIChwc3Rbal0udmlkIDwgbWF4dmlkICsgZGF0YS0+cnZvKSB7CS8qIHZpZCArIHJ2byA+PSBtYXh2aWQgKi8KLQkJCXByaW50ayhLRVJOX0VSUiBCRlggIm1heHZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSAlZFxuIiwgaik7CisJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAibWF4dmlkIGV4Y2VlZGVkIHdpdGggcHN0YXRlIgorCQkJICAgICAgICIgJWRcbiIsIGopOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAkJaWYgKHBzdFtqXS5maWQgPiBNQVhfRklEKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgQkZYICJtYXhmaWQgZXhjZWVkZWQgd2l0aCBwc3RhdGUgJWRcbiIsIGopOworCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIm1heGZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSIKKwkJCSAgICAgICAiICVkXG4iLCBqKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWlmIChqICYmIChwc3Rbal0uZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKIAkJCS8qIE9ubHkgZmlyc3QgZmlkIGlzIGFsbG93ZWQgdG8gYmUgaW4gImxvdyIgcmFuZ2UgKi8KLQkJCXByaW50ayhLRVJOX0VSUiBCRlggInR3byBsb3cgZmlkcyAtICVkIDogMHgleFxuIiwgaiwgcHN0W2pdLmZpZCk7CisJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAidHdvIGxvdyBmaWRzIC0gJWQgOiAiCisJCQkgICAgICAgIjB4JXhcbiIsIGosIHBzdFtqXS5maWQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHBzdFtqXS5maWQgPCBsYXN0ZmlkKQogCQkJbGFzdGZpZCA9IHBzdFtqXS5maWQ7CiAJfQogCWlmIChsYXN0ZmlkICYgMSkgewotCQlwcmludGsoS0VSTl9FUlIgQkZYICJsYXN0ZmlkIGludmFsaWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAibGFzdGZpZCBpbnZhbGlkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChsYXN0ZmlkID4gTE9fRklEX1RBQkxFX1RPUCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBCRlggICJmaXJzdCBmaWQgbm90IGZyb20gbG8gZnJlcSB0YWJsZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gRldfQlVHIFBGWCAgImZpcnN0IGZpZCBub3QgZnJvbSBsbyBmcmVxIHRhYmxlXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjcyLDEzICs2NzYsMTMgQEAKIAogCQlkcHJpbnRrKCJ0YWJsZSB2ZXJzOiAweCV4XG4iLCBwc2ItPnRhYmxldmVyc2lvbik7CiAJCWlmIChwc2ItPnRhYmxldmVyc2lvbiAhPSBQU0JfVkVSU0lPTl8xXzQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBCRlggIlBTQiB0YWJsZSBpcyBub3QgdjEuNFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiUFNCIHRhYmxlIGlzIG5vdCB2MS40XG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKIAkJZHByaW50aygiZmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MxKTsKIAkJaWYgKHBzYi0+ZmxhZ3MxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgQkZYICJ1bmtub3duIGZsYWdzXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJ1bmtub3duIGZsYWdzXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKQEAgLTcwNSw3ICs3MDksNyBAQAogCQkJfQogCQl9CiAJCWlmIChjcHN0ICE9IDEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBCRlggIm51bXBzdCBtdXN0IGJlIDFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIm51bXBzdCBtdXN0IGJlIDFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMTEzMCwxNyArMTEzNCwxOSBAQAogCQkJICAgICAgICJBQ1BJIFByb2Nlc3NvciBtb2R1bGUgYmVmb3JlIHN0YXJ0aW5nIHRoaXMgIgogCQkJICAgICAgICJkcml2ZXIuXG4iKTsKICNlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJZb3VyIEJJT1MgZG9lcyBub3QgcHJvdmlkZSBBQ1BJICIKLQkJCSAgICAgICAiX1BTUyBvYmplY3RzIGluIGEgd2F5IHRoYXQgTGludXggdW5kZXJzdGFuZHMuICIKLQkJCSAgICAgICAiUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHRoZSBMaW51eCBBQ1BJIG1haW50YWluZXJzIgotCQkJICAgICAgICIgYW5kIGNvbXBsYWluIHRvIHlvdXIgQklPUyB2ZW5kb3IuXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJZb3VyIEJJT1MgZG9lcyBub3QgcHJvdmlkZSIKKwkJCSAgICAgICAiIEFDUEkgX1BTUyBvYmplY3RzIGluIGEgd2F5IHRoYXQgTGludXggIgorCQkJICAgICAgICJ1bmRlcnN0YW5kcy4gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHRoZSBMaW51eCAiCisJCQkgICAgICAgIkFDUEkgbWFpbnRhaW5lcnMgYW5kIGNvbXBsYWluIHRvIHlvdXIgQklPUyAiCisJCQkgICAgICAgInZlbmRvci5cbiIpOwogI2VuZGlmCiAJCQlrZnJlZShkYXRhKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWlmIChwb2wtPmNwdSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBBQ1BJIF9QU1Mgb2JqZWN0cyBmb3IgQ1BVIG90aGVyIHRoYW4gIgotCQkJICAgICAgICJDUFUwLiBDb21wbGFpbiB0byB5b3VyIEJJT1MgdmVuZG9yLlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiTm8gQUNQSSBfUFNTIG9iamVjdHMgZm9yICIKKwkJCSAgICAgICAiQ1BVIG90aGVyIHRoYW4gQ1BVMC4gQ29tcGxhaW4gdG8geW91ciBCSU9TICIKKwkJCSAgICAgICAidmVuZG9yLlxuIik7CiAJCQlrZnJlZShkYXRhKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC0xMTkzLDcgKzExOTksNyBAQAogCiAJLyogbWluL21heCB0aGUgY3B1IGlzIGNhcGFibGUgb2YgKi8KIAlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIHBvd2Vybm93X3RhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggImludmFsaWQgcG93ZXJub3dfdGFibGVcbiIpOwogCQlwb3dlcm5vd19rOF9jcHVfZXhpdF9hY3BpKGRhdGEpOwogCQlrZnJlZShkYXRhLT5wb3dlcm5vd190YWJsZSk7CiAJCWtmcmVlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggMTkxZjcyNi4uMDRkMDM3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCkBAIC00MzEsNyArNDMxLDcgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzIHdpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOwogTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDk5NDY4ZGIuLmNjZTBiNjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCQlub2RlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwogCW51bWFfc2V0X25vZGUoY3B1LCBub2RlKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZC8leCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkLzB4JXggLT4gTm9kZSAlZFxuIiwgY3B1LCBhcGljaWQsIG5vZGUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jCmluZGV4IGYzOTBjOWYuLmRkM2FmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svazcuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBBdGhsb24vSGFtbWVyIHNwZWNpZmljIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZwotICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogQXRobG9uIHNwZWNpZmljIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZworICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKaW5kZXggNzc0ZDg3Yy4uMGViZjNmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbWNlLmMgLSB4ODYgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCi0gKiAoYykgMjAwMiBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiAoYykgMjAwMiBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYwppbmRleCBjYzFmY2NkLi5hNzRhZjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBOb24gRmF0YWwgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCiAgKgotICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gY2hlY2sgZm9yIG5vbi1mYXRhbCBNQ0VzIGV2ZXJ5IDE1cwogICoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggNmJmZjM4Mi4uOWFiZDQ4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pbnRlbF9hcmNoX3BlcmZtb24uaD4KIApAQCAtMzM2LDcgKzMzOCw4IEBACiAJcmVsZWFzZV9wZXJmY3RyX25taSh3ZF9vcHMtPnBlcmZjdHIpOwogfQogCi1zdGF0aWMgdm9pZCBzaW5nbGVfbXNyX3JlYXJtKHN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCwgdW5zaWduZWQgbm1pX2h6KQorc3RhdGljIHZvaWQgX19rcHJvYmVzCitzaW5nbGVfbXNyX3JlYXJtKHN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCwgdW5zaWduZWQgbm1pX2h6KQogewogCS8qIHN0YXJ0IHRoZSBjeWNsZSBvdmVyIGFnYWluICovCiAJd3JpdGVfd2F0Y2hkb2dfY291bnRlcih3ZC0+cGVyZmN0cl9tc3IsIE5VTEwsIG5taV9oeik7CkBAIC00MDEsNyArNDA0LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcDZfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcDZfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCiB7CiAJLyoKIAkgKiBQNiBiYXNlZCBQZW50aXVtIE0gbmVlZCB0byByZS11bm1hc2sKQEAgLTYwNSw3ICs2MDgsNyBAQAogCXJlbGVhc2VfcGVyZmN0cl9ubWkoTVNSX1A0X0lRX1BFUkZDVFIwKTsKIH0KIAotc3RhdGljIHZvaWQgcDRfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcDRfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCiB7CiAJdW5zaWduZWQgZHVtbXk7CiAJLyoKQEAgLTc4NCw3ICs3ODcsNyBAQAogCXJldHVybiBoejsKIH0KIAotaW50IGxhcGljX3dkX2V2ZW50KHVuc2lnbmVkIG5taV9oeikKK2ludCBfX2twcm9iZXMgbGFwaWNfd2RfZXZlbnQodW5zaWduZWQgbm1pX2h6KQogewogCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwogCXU2NCBjdHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCmluZGV4IGEyNmM0ODAuLjAxYjEyNDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCkBAIC0xNjAsMTQgKzE2MCwxNiBAQAogewogCWlmICgqcG9zID09IDApCS8qIGp1c3QgaW4gY2FzZSwgY3B1IDAgaXMgbm90IHRoZSBmaXJzdCAqLwogCQkqcG9zID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoKCpwb3MpIDwgbnJfY3B1X2lkcyAmJiBjcHVfb25saW5lKCpwb3MpKQorCWVsc2UKKwkJKnBvcyA9IG5leHRfY3B1X25yKCpwb3MgLSAxLCBjcHVfb25saW5lX21hcCk7CisJaWYgKCgqcG9zKSA8IG5yX2NwdV9pZHMpCiAJCXJldHVybiAmY3B1X2RhdGEoKnBvcyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQkqcG9zID0gbmV4dF9jcHUoKnBvcywgY3B1X29ubGluZV9tYXApOworCSgqcG9zKSsrOwogCXJldHVybiBjX3N0YXJ0KG0sIHBvcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCmluZGV4IDcyZDBjNTYuLmY3Y2RiM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwpAQCAtMTMsNiArMTMsOSBAQAogCiBzdGF0aWMgdm9pZCAqa2R1bXBfYnVmX3BhZ2U7CiAKKy8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwordW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYwppbmRleCBlOTBhNjBlLi4wNDViMzZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzY0LmMKQEAgLTEwLDYgKzEwLDkgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwppbmRleCAxYTc4MTgwLi5iMzYxNDc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC00MDUsNyArNDA1LDYgQEAKIAkJcGFuaWMoIk5vbiBtYXNrYWJsZSBpbnRlcnJ1cHQiKTsKIAljb25zb2xlX3NpbGVudCgpOwogCXNwaW5fdW5sb2NrKCZubWlfcHJpbnRfbG9jayk7Ci0JYnVzdF9zcGlubG9ja3MoMCk7CiAKIAkvKgogCSAqIElmIHdlIGFyZSBpbiBrZXJuZWwgd2UgYXJlIHByb2JhYmx5IG5lc3RlZCB1cCBwcmV0dHkgYmFkCkBAIC00MTYsNiArNDE1LDcgQEAKIAkJY3Jhc2hfa2V4ZWMocmVncyk7CiAJfQogCisJYnVzdF9zcGlubG9ja3MoMCk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jCmluZGV4IDczM2M0ZjguLjNjZTAyOWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKQEAgLTk1LDcgKzk1LDggQEAKIAogfQogCi1zdGF0aWMgdTMyIGF0aV9peHA0eDBfcmV2KGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKKyNpZiBkZWZpbmVkKENPTkZJR19BQ1BJKSAmJiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKK3N0YXRpYyB1MzIgX19pbml0IGF0aV9peHA0eDBfcmV2KGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKIHsKIAl1MzIgZDsKIAl1OCAgYjsKQEAgLTExNSw3ICsxMTYsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXRpX2J1Z3MoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jKQogewotI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpICYmIGRlZmluZWQgKENPTkZJR19YODZfSU9fQVBJQykKIAl1MzIgZDsKIAl1OCAgYjsKIApAQCAtMTM4LDkgKzEzOCw1NiBAQAogCQlwcmludGsoS0VSTl9JTkZPICJJZiB5b3UgZ290IHRpbWVyIHRyb3VibGUgIgogCQkgICAgICAgInRyeSBhY3BpX3VzZV90aW1lcl9vdmVycmlkZVxuIik7CiAJfQotI2VuZGlmCiB9CiAKK3N0YXRpYyB1MzIgX19pbml0IGF0aV9zYngwMF9yZXYoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jKQoreworCXUzMiBvbGQsIGQ7CisKKwlkID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg3MCk7CisJb2xkID0gZDsKKwlkICY9IH4oMTw8OCk7CisJd3JpdGVfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NzAsIGQpOworCWQgPSByZWFkX3BjaV9jb25maWcobnVtLCBzbG90LCBmdW5jLCAweDgpOworCWQgJj0gMHhmZjsKKwl3cml0ZV9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg3MCwgb2xkKTsKKworCXJldHVybiBkOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYXRpX2J1Z3NfY29udGQoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jKQoreworCXUzMiBkLCByZXY7CisKKwlpZiAoYWNwaV91c2VfdGltZXJfb3ZlcnJpZGUpCisJCXJldHVybjsKKworCXJldiA9IGF0aV9zYngwMF9yZXYobnVtLCBzbG90LCBmdW5jKTsKKwlpZiAocmV2ID4gMHgxMykKKwkJcmV0dXJuOworCisJLyogY2hlY2sgZm9yIElSUTAgaW50ZXJydXB0IHN3YXAgKi8KKwlkID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg2NCk7CisJaWYgKCEoZCAmICgxPDwxNCkpKQorCQlhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgPSAxOworCisJaWYgKGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJTQjYwMCByZXZpc2lvbiAweCV4XG4iLCByZXYpOworCQlwcmludGsoS0VSTl9JTkZPICJJZ25vcmluZyBBQ1BJIHRpbWVyIG92ZXJyaWRlLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIklmIHlvdSBnb3QgdGltZXIgdHJvdWJsZSAiCisJCSAgICAgICAidHJ5IGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlXG4iKTsKKwl9Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGF0aV9idWdzKGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKK3sKK30KKworc3RhdGljIHZvaWQgX19pbml0IGF0aV9idWdzX2NvbnRkKGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKK3sKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0RNQVIKIHN0YXRpYyB2b2lkIF9faW5pdCBpbnRlbF9nMzNfZG1hcihpbnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1bmMpCiB7CkBAIC0xNzYsNiArMjIzLDggQEAKIAkgIFBDSV9DTEFTU19CUklER0VfSE9TVCwgUENJX0FOWV9JRCwgMCwgZml4X2h5cGVydHJhbnNwb3J0X2NvbmZpZyB9LAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TTUJVUywKIAkgIFBDSV9DTEFTU19TRVJJQUxfU01CVVMsIFBDSV9BTllfSUQsIDAsIGF0aV9idWdzIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMsCisJICBQQ0lfQ0xBU1NfU0VSSUFMX1NNQlVTLCBQQ0lfQU5ZX0lELCAwLCBhdGlfYnVnc19jb250ZCB9LAogI2lmZGVmIENPTkZJR19ETUFSCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI5YzAsCiAJICBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QsIFBDSV9BTllfSUQsIDAsIGludGVsX2czM19kbWFyIH0sCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKaW5kZXggOTQ1YTMxYy4uMTExOWQyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwpAQCAtMzY3LDYgKzM2NywxMCBAQAogCQkJZWZpLnNtYmlvcyA9IGNvbmZpZ190YWJsZXNbaV0udGFibGU7CiAJCQlwcmludGsoIiBTTUJJT1M9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CiAJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKGNvbmZpZ190YWJsZXNbaV0uZ3VpZCwKKwkJCQkJVVZfU1lTVEVNX1RBQkxFX0dVSUQpKSB7CisJCQllZmkudXZfc3lzdGFiID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKKwkJCXByaW50aygiIFVWc3lzdGFiPTB4JWx4ICIsIGNvbmZpZ190YWJsZXNbaV0udGFibGUpOworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChjb25maWdfdGFibGVzW2ldLmd1aWQsCiAJCQkJCUhDRFBfVEFCTEVfR1VJRCkpIHsKIAkJCWVmaS5oY2RwID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKIAkJCXByaW50aygiIEhDRFA9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IGIyMWZiZmEuLmRkNjUxNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC02MjksNyArNjI5LDcgQEAKIEVOVFJZKGlycV9lbnRyaWVzX3N0YXJ0KQogCVJJTkcwX0lOVF9GUkFNRQogdmVjdG9yPTAKLS5yZXB0IE5SX0lSUVMKKy5yZXB0IE5SX1ZFQ1RPUlMKIAlBTElHTgogIC5pZiB2ZWN0b3IKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKQEAgLTEwMjQsNyArMTAyNCw3IEBACiAJUklORzBfSU5UX0ZSQU1FCiAJcHVzaGwgJDAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCXB1c2hsICRkb19tYWNoaW5lX2NoZWNrCisJcHVzaGwgbWFjaGluZV9jaGVja192ZWN0b3IKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCWptcCBlcnJvcl9jb2RlCiAJQ0ZJX0VORFBST0MKQEAgLTExNTMsMjAgKzExNTMsNiBAQAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCiBFTlRSWShtY291bnQpCi0JcHVzaGwgJWVheAotCXB1c2hsICVlY3gKLQlwdXNobCAlZWR4Ci0JbW92bCAweGMoJWVzcCksICVlYXgKLQlzdWJsICRNQ09VTlRfSU5TTl9TSVpFLCAlZWF4Ci0KLS5nbG9ibCBtY291bnRfY2FsbAotbWNvdW50X2NhbGw6Ci0JY2FsbCBmdHJhY2Vfc3R1YgotCi0JcG9wbCAlZWR4Ci0JcG9wbCAlZWN4Ci0JcG9wbCAlZWF4Ci0KIAlyZXQKIEVORChtY291bnQpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggMWRiNmNlNC4uMDllNzE0NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTY0LDMyICs2NCw2IEBACiAjaWZkZWYgQ09ORklHX0ZUUkFDRQogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogRU5UUlkobWNvdW50KQotCi0Jc3VicSAkMHgzOCwgJXJzcAotCW1vdnEgJXJheCwgKCVyc3ApCi0JbW92cSAlcmN4LCA4KCVyc3ApCi0JbW92cSAlcmR4LCAxNiglcnNwKQotCW1vdnEgJXJzaSwgMjQoJXJzcCkKLQltb3ZxICVyZGksIDMyKCVyc3ApCi0JbW92cSAlcjgsIDQwKCVyc3ApCi0JbW92cSAlcjksIDQ4KCVyc3ApCi0KLQltb3ZxIDB4MzgoJXJzcCksICVyZGkKLQlzdWJxICRNQ09VTlRfSU5TTl9TSVpFLCAlcmRpCi0KLS5nbG9ibCBtY291bnRfY2FsbAotbWNvdW50X2NhbGw6Ci0JY2FsbCBmdHJhY2Vfc3R1YgotCi0JbW92cSA0OCglcnNwKSwgJXI5Ci0JbW92cSA0MCglcnNwKSwgJXI4Ci0JbW92cSAzMiglcnNwKSwgJXJkaQotCW1vdnEgMjQoJXJzcCksICVyc2kKLQltb3ZxIDE2KCVyc3ApLCAlcmR4Ci0JbW92cSA4KCVyc3ApLCAlcmN4Ci0JbW92cSAoJXJzcCksICVyYXgKLQlhZGRxICQweDM4LCAlcnNwCi0KIAlyZXRxCiBFTkQobWNvdW50KQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYWIxMTVjZC4uZDA3M2Q5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMTEsMTcgKzExLDE4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAotI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vbm9wcy5oPgogCiAKIC8qIExvbmcgaXMgZmluZSwgZXZlbiBpZiBpdCBpcyBvbmx5IDQgYnl0ZXMgOy0pICovCi1zdGF0aWMgbG9uZyAqZnRyYWNlX25vcDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpmdHJhY2Vfbm9wOwogCiB1bmlvbiBmdHJhY2VfY29kZV91bmlvbiB7CiAJY2hhciBjb2RlW01DT1VOVF9JTlNOX1NJWkVdOwpAQCAtNjAsMTEgKzYxLDcgQEAKIGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBjaGFyICpvbGRfY29kZSwKIAkJICAgdW5zaWduZWQgY2hhciAqbmV3X2NvZGUpCiB7Ci0JdW5zaWduZWQgcmVwbGFjZWQ7Ci0JdW5zaWduZWQgb2xkID0gKih1bnNpZ25lZCAqKW9sZF9jb2RlOyAvKiA0IGJ5dGVzICovCi0JdW5zaWduZWQgbmV3ID0gKih1bnNpZ25lZCAqKW5ld19jb2RlOyAvKiA0IGJ5dGVzICovCi0JdW5zaWduZWQgY2hhciBuZXdjaCA9IG5ld19jb2RlWzRdOwotCWludCBmYXVsdGVkID0gMDsKKwl1bnNpZ25lZCBjaGFyIHJlcGxhY2VkW01DT1VOVF9JTlNOX1NJWkVdOwogCiAJLyoKIAkgKiBOb3RlOiBEdWUgdG8gbW9kdWxlcyBhbmQgX19pbml0LCBjb2RlIGNhbgpAQCAtNzIsMjkgKzY5LDIwIEBACiAJICogIGFzIHdlbGwgYXMgY29kZSBjaGFuZ2luZy4KIAkgKgogCSAqIE5vIHJlYWwgbG9ja2luZyBuZWVkZWQsIHRoaXMgY29kZSBpcyBydW4gdGhyb3VnaAotCSAqIGtzdG9wX21hY2hpbmUuCisJICoga3N0b3BfbWFjaGluZSwgb3IgYmVmb3JlIFNNUCBzdGFydHMuCiAJICovCi0JYXNtIHZvbGF0aWxlICgKLQkJIjE6IGxvY2tcbiIKLQkJIiAgIGNtcHhjaGcgJTMsICglMilcbiIKLQkJIiAgIGpueiAyZlxuIgotCQkiICAgbW92YiAlYjQsIDQoJTIpXG4iCi0JCSIyOlxuIgotCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKLQkJIjM6CW1vdmwgJDEsICUwXG4iCi0JCSIJam1wIDJiXG4iCi0JCSIucHJldmlvdXNcbiIKLQkJX0FTTV9FWFRBQkxFKDFiLCAzYikKLQkJOiAiPXIiKGZhdWx0ZWQpLCAiPWEiKHJlcGxhY2VkKQotCQk6ICJyIihpcCksICJyIihuZXcpLCAiYyIobmV3Y2gpLAotCQkgICIwIihmYXVsdGVkKSwgImEiKG9sZCkKLQkJOiAibWVtb3J5Iik7CisJaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMocmVwbGFjZWQsIChjaGFyIF9fdXNlciAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWVtY21wKHJlcGxhY2VkLCBvbGRfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwkJcmV0dXJuIDI7CisKKwlXQVJOX09OX09OQ0UoX19jb3B5X3RvX3VzZXJfaW5hdG9taWMoKGNoYXIgX191c2VyICopaXAsIG5ld19jb2RlLAorCQkJCSAgICBNQ09VTlRfSU5TTl9TSVpFKSk7CisKIAlzeW5jX2NvcmUoKTsKIAotCWlmIChyZXBsYWNlZCAhPSBvbGQgJiYgcmVwbGFjZWQgIT0gbmV3KQotCQlmYXVsdGVkID0gMjsKLQotCXJldHVybiBmYXVsdGVkOworCXJldHVybiAwOwogfQogCiBub3RyYWNlIGludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYykKQEAgLTExMiwzMCArMTAwLDc2IEBACiAKIG5vdHJhY2UgaW50IGZ0cmFjZV9tY291bnRfc2V0KHVuc2lnbmVkIGxvbmcgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpcCA9IChsb25nKSgmbWNvdW50X2NhbGwpOwotCXVuc2lnbmVkIGxvbmcgKmFkZHIgPSBkYXRhOwotCXVuc2lnbmVkIGNoYXIgb2xkW01DT1VOVF9JTlNOX1NJWkVdLCAqbmV3OwotCi0JLyoKLQkgKiBSZXBsYWNlIHRoZSBtY291bnQgc3R1YiB3aXRoIGEgcG9pbnRlciB0byB0aGUKLQkgKiBpcCByZWNvcmRlciBmdW5jdGlvbi4KLQkgKi8KLQltZW1jcHkob2xkLCAmbWNvdW50X2NhbGwsIE1DT1VOVF9JTlNOX1NJWkUpOwotCW5ldyA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsICphZGRyKTsKLQkqYWRkciA9IGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgb2xkLCBuZXcpOwotCisJLyogbWNvdW50IGlzIGluaXRpYWxpemVkIGFzIGEgbm9wICovCisJKmRhdGEgPSAwOwogCXJldHVybiAwOwogfQogCiBpbnQgX19pbml0IGZ0cmFjZV9keW5fYXJjaF9pbml0KHZvaWQgKmRhdGEpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKm5vcHRhYmxlID0gZmluZF9ub3BfdGFibGUoKTsKKwlleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBmdHJhY2VfdGVzdF9wNm5vcFtdOworCWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGZ0cmFjZV90ZXN0X25vcDVbXTsKKwlleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBmdHJhY2VfdGVzdF9qbXBbXTsKKwlpbnQgZmF1bHRlZCA9IDA7CiAKLQkvKiBUaGlzIGlzIHJ1bm5pbmcgaW4ga3N0b3BfbWFjaGluZSAqLworCS8qCisJICogVGhlcmUgaXMgbm8gZ29vZCBub3AgZm9yIGFsbCB4ODYgYXJjaHMuCisJICogV2Ugd2lsbCBkZWZhdWx0IHRvIHVzaW5nIHRoZSBQNl9OT1A1LCBidXQgZmlyc3Qgd2UKKwkgKiB3aWxsIHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5vcCB3aWxsIGFjdHVhbGx5CisJICogd29yayBvbiB0aGlzIENQVS4gSWYgaXQgZmF1bHRzLCB3ZSB3aWxsIHRoZW4KKwkgKiBnbyB0byBhIGxlc3NlciBlZmZpY2llbnQgNSBieXRlIG5vcC4gSWYgdGhhdCBmYWlscworCSAqIHdlIHRoZW4ganVzdCB1c2UgYSBqbXAgYXMgb3VyIG5vcC4gVGhpcyBpc24ndCB0aGUgbW9zdAorCSAqIGVmZmljaWVudCBub3AsIGJ1dCB3ZSBjYW4gbm90IHVzZSBhIG11bHRpIHBhcnQgbm9wCisJICogc2luY2Ugd2Ugd291bGQgdGhlbiByaXNrIGJlaW5nIHByZWVtcHRlZCBpbiB0aGUgbWlkZGxlCisJICogb2YgdGhhdCBub3AsIGFuZCBpZiB3ZSBlbmFibGVkIHRyYWNpbmcgdGhlbiwgaXQgbWlnaHQKKwkgKiBjYXVzZSBhIHN5c3RlbSBjcmFzaC4KKwkgKgorCSAqIFRPRE86IGNoZWNrIHRoZSBjcHVpZCB0byBkZXRlcm1pbmUgdGhlIGJlc3Qgbm9wLgorCSAqLworCWFzbSB2b2xhdGlsZSAoCisJCSJqbXAgZnRyYWNlX3Rlc3Rfam1wXG4iCisJCS8qIFRoaXMgY29kZSBuZWVkcyB0byBzdGF5IGFyb3VuZCAqLworCQkiLnNlY3Rpb24gLnRleHQsIFwiYXhcIlxuIgorCQkiZnRyYWNlX3Rlc3Rfam1wOiIKKwkJImptcCBmdHJhY2VfdGVzdF9wNm5vcFxuIgorCQkibm9wXG4iCisJCSJub3BcbiIKKwkJIm5vcFxuIiAgLyogMiBieXRlIGptcCArIDMgYnl0ZXMgKi8KKwkJImZ0cmFjZV90ZXN0X3A2bm9wOiIKKwkJUDZfTk9QNQorCQkiam1wIDFmXG4iCisJCSJmdHJhY2VfdGVzdF9ub3A1OiIKKwkJIi5ieXRlIDB4NjYsMHg2NiwweDY2LDB4NjYsMHg5MFxuIgorCQkiam1wIDFmXG4iCisJCSIucHJldmlvdXNcbiIKKwkJIjE6IgorCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKKwkJIjI6CW1vdmwgJDEsICUwXG4iCisJCSIJam1wIGZ0cmFjZV90ZXN0X25vcDVcbiIKKwkJIjM6CW1vdmwgJDIsICUwXG4iCisJCSIJam1wIDFiXG4iCisJCSIucHJldmlvdXNcbiIKKwkJX0FTTV9FWFRBQkxFKGZ0cmFjZV90ZXN0X3A2bm9wLCAyYikKKwkJX0FTTV9FWFRBQkxFKGZ0cmFjZV90ZXN0X25vcDUsIDNiKQorCQk6ICI9ciIoZmF1bHRlZCkgOiAiMCIgKGZhdWx0ZWQpKTsKIAotCWZ0cmFjZV9tY291bnRfc2V0KGRhdGEpOworCXN3aXRjaCAoZmF1bHRlZCkgeworCWNhc2UgMDoKKwkJcHJfaW5mbygiZnRyYWNlOiBjb252ZXJ0aW5nIG1jb3VudCBjYWxscyB0byAwZiAxZiA0NCAwMCAwMFxuIik7CisJCWZ0cmFjZV9ub3AgPSAodW5zaWduZWQgbG9uZyAqKWZ0cmFjZV90ZXN0X3A2bm9wOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oImZ0cmFjZTogY29udmVydGluZyBtY291bnQgY2FsbHMgdG8gNjYgNjYgNjYgNjYgOTBcbiIpOworCQlmdHJhY2Vfbm9wID0gKHVuc2lnbmVkIGxvbmcgKilmdHJhY2VfdGVzdF9ub3A1OworCQlicmVhazsKKwljYXNlIDI6CisJCXByX2luZm8oImZ0cmFjZTogY29udmVydGluZyBtY291bnQgY2FsbHMgdG8gam1wIC4gKyA1XG4iKTsKKwkJZnRyYWNlX25vcCA9ICh1bnNpZ25lZCBsb25nICopZnRyYWNlX3Rlc3Rfam1wOworCQlicmVhazsKKwl9CiAKLQlmdHJhY2Vfbm9wID0gKHVuc2lnbmVkIGxvbmcgKilub3B0YWJsZVtNQ09VTlRfSU5TTl9TSVpFXTsKKwkvKiBUaGUgcmV0dXJuIGNvZGUgaXMgcmV0dXJlZCB2aWEgZGF0YSAqLworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSAwOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKaW5kZXggOWVjYTViYS4uYzAyNjI3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCitzdGF0aWMgaW50IGZsYXRfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKIHsKIAlyZXR1cm4gMTsKIH0KQEAgLTE3MCw3ICsxNzAsNyBAQAogICogV2UgY2Fubm90IHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IGluIHRoaXMgY2FzZSBiZWNhdXNlIHRoZSBtYXNrCiAgKiBvdmVyZmxvd3MsIHNvIHVzZSBwaHlzaWNhbCBtb2RlLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBwaHlzZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQorc3RhdGljIGludCBwaHlzZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQogewogI2lmZGVmIENPTkZJR19BQ1BJCiAJLyoKQEAgLTE3OSw4ICsxNzksMTAgQEAKIAkgKiBpcyBhbiBleGFtcGxlKS4KIAkgKi8KIAlpZiAoYWNwaV9nYmxfRkFEVC5oZWFkZXIucmV2aXNpb24gPiBGQURUMl9SRVZJU0lPTl9JRCAmJgotCQkoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9BUElDX1BIWVNJQ0FMKSkKKwkJKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInN5c3RlbSBBUElDIG9ubHkgY2FuIHVzZSBwaHlzaWNhbCBmbGF0Iik7CiAJCXJldHVybiAxOworCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX2NsdXN0ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfY2x1c3Rlci5jCmluZGV4IGU0YmYyY2MuLmY2YTJjOGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfY2x1c3Rlci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfY2x1c3Rlci5jCkBAIC0xMiw3ICsxMiw3IEBACiAKIERFRklORV9QRVJfQ1BVKHUzMiwgeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IHgyYXBpY19hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQorc3RhdGljIGludCB4MmFwaWNfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKIHsKIAlpZiAoY3B1X2hhc194MmFwaWMpCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY19waHlzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3BoeXMuYwppbmRleCA4ZjEzNDNkLi5kMDQyMjExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3BoeXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3BoeXMuYwpAQCAtMTksNyArMTksNyBAQAogfQogZWFybHlfcGFyYW0oIngyYXBpY19waHlzIiwgc2V0X3gyYXBpY19waHlzX21vZGUpOwogCi1zdGF0aWMgaW50IF9faW5pdCB4MmFwaWNfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3N0YXRpYyBpbnQgeDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCiB7CiAJaWYgKGNwdV9oYXNfeDJhcGljICYmIHgyYXBpY19waHlzKQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMKaW5kZXggMzM1ODFkOS4uNjgwYTA2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIGVudW0gdXZfc3lzdGVtX3R5cGUgdXZfc3lzdGVtX3R5cGU7CiAKLXN0YXRpYyBpbnQgX19pbml0IHV2X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCitzdGF0aWMgaW50IHV2X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCiB7CiAJaWYgKCFzdHJjbXAob2VtX2lkLCAiU0dJIikpIHsKIAkJaWYgKCFzdHJjbXAob2VtX3RhYmxlX2lkLCAiVVZMIikpCkBAIC0zNDEsMTIgKzM0MSwxMiBAQAogCiBzdGF0aWMgX19pbml0IHZvaWQgdXZfcnRjX2luaXQodm9pZCkKIHsKLQlsb25nIHN0YXR1cywgdGlja3NfcGVyX3NlYywgZHJpZnQ7CisJbG9uZyBzdGF0dXM7CisJdTY0IHRpY2tzX3Blcl9zZWM7CiAKLQlzdGF0dXMgPQotCSAgICB4ODZfYmlvc19mcmVxX2Jhc2UoQklPU19GUkVRX0JBU0VfUkVBTFRJTUVfQ0xPQ0ssICZ0aWNrc19wZXJfc2VjLAotCQkJCQkmZHJpZnQpOwotCWlmIChzdGF0dXMgIT0gMCB8fCB0aWNrc19wZXJfc2VjIDwgMTAwMDAwKSB7CisJc3RhdHVzID0gdXZfYmlvc19mcmVxX2Jhc2UoQklPU19GUkVRX0JBU0VfUkVBTFRJTUVfQ0xPQ0ssCisJCQkJCSZ0aWNrc19wZXJfc2VjKTsKKwlpZiAoc3RhdHVzICE9IEJJT1NfU1RBVFVTX1NVQ0NFU1MgfHwgdGlja3NfcGVyX3NlYyA8IDEwMDAwMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkidW5hYmxlIHRvIGRldGVybWluZSBwbGF0Zm9ybSBSVEMgY2xvY2sgZnJlcXVlbmN5LCAiCiAJCQkiZ3Vlc3NpbmcuXG4iKTsKQEAgLTM1Niw3ICszNTYsMjIgQEAKIAkJc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kID0gdGlja3NfcGVyX3NlYzsKIH0KIAotc3RhdGljIGJvb2wgdXZfc3lzdGVtX2luaXRlZDsKKy8qCisgKiBDYWxsZWQgb24gZWFjaCBjcHUgdG8gaW5pdGlhbGl6ZSB0aGUgcGVyX2NwdSBVViBkYXRhIGFyZWEuCisgKiAJWlpaIGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKKyAqLwordm9pZCBfX2NwdWluaXQgdXZfY3B1X2luaXQodm9pZCkKK3sKKwkvKiBDUFUgMCBpbml0aWxpemF0aW9uIHdpbGwgYmUgZG9uZSB2aWEgdXZfc3lzdGVtX2luaXQuICovCisJaWYgKCF1dl9ibGFkZV9pbmZvKQorCQlyZXR1cm47CisKKwl1dl9ibGFkZV9pbmZvW3V2X251bWFfYmxhZGVfaWQoKV0ubnJfb25saW5lX2NwdXMrKzsKKworCWlmIChnZXRfdXZfc3lzdGVtX3R5cGUoKSA9PSBVVl9OT05fVU5JUVVFX0FQSUMpCisJCXNldF94MmFwaWNfZXh0cmFfYml0cyh1dl9odWJfaW5mby0+cG5vZGUpOworfQorCiAKIHZvaWQgX19pbml0IHV2X3N5c3RlbV9pbml0KHZvaWQpCiB7CkBAIC00MTIsNiArNDI3LDkgQEAKIAlnbm9kZV91cHBlciA9ICgoKHVuc2lnbmVkIGxvbmcpbm9kZV9pZC5zLm5vZGVfaWQpICYKIAkJICAgICAgIH4oKDEgPDwgbl92YWwpIC0gMSkpIDw8IG1fdmFsOwogCisJdXZfYmlvc19pbml0KCk7CisJdXZfYmlvc19nZXRfc25faW5mbygwLCAmdXZfdHlwZSwgJnNuX3BhcnRpdGlvbl9pZCwKKwkJCSAgICAmdXZfY29oZXJlbmN5X2lkLCAmdXZfcmVnaW9uX3NpemUpOwogCXV2X3J0Y19pbml0KCk7CiAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKQEAgLTQzMyw3ICs0NTEsNyBAQAogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMSA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbG9iYWxfbW1yX2Jhc2UgPSBtbXJfYmFzZTsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmNvaGVyZW5jeV9kb21haW5fbnVtYmVyID0gMDsvKiBaWlogKi8KKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmNvaGVyZW5jeV9kb21haW5fbnVtYmVyID0gdXZfY29oZXJlbmN5X2lkOwogCQl1dl9ub2RlX3RvX2JsYWRlW25pZF0gPSBibGFkZTsKIAkJdXZfY3B1X3RvX2JsYWRlW2NwdV0gPSBibGFkZTsKIAkJbWF4X3Bub2RlID0gbWF4KHBub2RlLCBtYXhfcG5vZGUpOwpAQCAtNDQ4LDIxICs0NjYsNiBAQAogCW1hcF9tbXJfaGlnaChtYXhfcG5vZGUpOwogCW1hcF9jb25maWdfaGlnaChtYXhfcG5vZGUpOwogCW1hcF9tbWlvaF9oaWdoKG1heF9wbm9kZSk7Ci0JdXZfc3lzdGVtX2luaXRlZCA9IHRydWU7CisKKwl1dl9jcHVfaW5pdCgpOwogfQotCi0vKgotICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgotICogCVpaWiBob3RwbHVnIG5vdCBzdXBwb3J0ZWQgeWV0Ci0gKi8KLXZvaWQgX19jcHVpbml0IHV2X2NwdV9pbml0KHZvaWQpCi17Ci0JQlVHX09OKCF1dl9zeXN0ZW1faW5pdGVkKTsKLQotCXV2X2JsYWRlX2luZm9bdXZfbnVtYV9ibGFkZV9pZCgpXS5ucl9vbmxpbmVfY3B1cysrOwotCi0JaWYgKGdldF91dl9zeXN0ZW1fdHlwZSgpID09IFVWX05PTl9VTklRVUVfQVBJQykKLQkJc2V0X3gyYXBpY19leHRyYV9iaXRzKHV2X2h1Yl9pbmZvLT5wbm9kZSk7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggYWNmNjJmYy4uNzcwMTdlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC0xLDI5ICsxLDQ5IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgotI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAjaW5jbHVkZSA8YXNtL2k4MjUzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KIAotI2RlZmluZSBIUEVUX01BU0sJQ0xPQ0tTT1VSQ0VfTUFTSygzMikKLSNkZWZpbmUgSFBFVF9TSElGVAkyMgorI2RlZmluZSBIUEVUX01BU0sJCQlDTE9DS1NPVVJDRV9NQVNLKDMyKQorI2RlZmluZSBIUEVUX1NISUZUCQkJMjIKIAogLyogRlNFQyA9IDEwXi0xNQogICAgTlNFQyA9IDEwXi05ICovCi0jZGVmaW5lIEZTRUNfUEVSX05TRUMJMTAwMDAwMEwKKyNkZWZpbmUgRlNFQ19QRVJfTlNFQwkJCTEwMDAwMDBMCisKKyNkZWZpbmUgSFBFVF9ERVZfVVNFRF9CSVQJCTIKKyNkZWZpbmUgSFBFVF9ERVZfVVNFRAkJCSgxIDw8IEhQRVRfREVWX1VTRURfQklUKQorI2RlZmluZSBIUEVUX0RFVl9WQUxJRAkJCTB4OAorI2RlZmluZSBIUEVUX0RFVl9GU0JfQ0FQCQkweDEwMDAKKyNkZWZpbmUgSFBFVF9ERVZfUEVSSV9DQVAJCTB4MjAwMAorCisjZGVmaW5lIEVWVF9UT19IUEVUX0RFVihldnQpIGNvbnRhaW5lcl9vZihldnQsIHN0cnVjdCBocGV0X2RldiwgZXZ0KQogCiAvKgogICogSFBFVCBhZGRyZXNzIGlzIHNldCBpbiBhY3BpL2Jvb3QuYywgd2hlbiBhbiBBQ1BJIGVudHJ5IGV4aXN0cwogICovCi11bnNpZ25lZCBsb25nIGhwZXRfYWRkcmVzczsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKmhwZXRfdmlydF9hZGRyZXNzOwordW5zaWduZWQgbG9uZwkJCQlocGV0X2FkZHJlc3M7Cit1bnNpZ25lZCBsb25nCQkJCWhwZXRfbnVtX3RpbWVyczsKK3N0YXRpYyB2b2lkIF9faW9tZW0JCQkqaHBldF92aXJ0X2FkZHJlc3M7CisKK3N0cnVjdCBocGV0X2RldiB7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZQlldnQ7CisJdW5zaWduZWQgaW50CQkJbnVtOworCWludAkJCQljcHU7CisJdW5zaWduZWQgaW50CQkJaXJxOworCXVuc2lnbmVkIGludAkJCWZsYWdzOworCWNoYXIJCQkJbmFtZVsxMF07Cit9OwogCiB1bnNpZ25lZCBsb25nIGhwZXRfcmVhZGwodW5zaWduZWQgbG9uZyBhKQogewpAQCAtNTksNyArNzksNyBAQAogc3RhdGljIGludCBib290X2hwZXRfZGlzYWJsZTsKIGludCBocGV0X2ZvcmNlX3VzZXI7CiAKLXN0YXRpYyBpbnQgX19pbml0IGhwZXRfc2V0dXAoY2hhciogc3RyKQorc3RhdGljIGludCBfX2luaXQgaHBldF9zZXR1cChjaGFyICpzdHIpCiB7CiAJaWYgKHN0cikgewogCQlpZiAoIXN0cm5jbXAoImRpc2FibGUiLCBzdHIsIDcpKQpAQCAtODAsNyArMTAwLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfaHBldF9jYXBhYmxlKHZvaWQpCiB7Ci0JcmV0dXJuICghYm9vdF9ocGV0X2Rpc2FibGUgJiYgaHBldF9hZGRyZXNzKTsKKwlyZXR1cm4gIWJvb3RfaHBldF9kaXNhYmxlICYmIGhwZXRfYWRkcmVzczsKIH0KIAogLyoKQEAgLTEwMiw2ICsxMjIsOSBAQAogICogdGltZXIgMCBhbmQgdGltZXIgMSBpbiBjYXNlIG9mIFJUQyBlbXVsYXRpb24uCiAgKi8KICNpZmRlZiBDT05GSUdfSFBFVAorCitzdGF0aWMgdm9pZCBocGV0X3Jlc2VydmVfbXNpX3RpbWVycyhzdHJ1Y3QgaHBldF9kYXRhICpoZCk7CisKIHN0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnModW5zaWduZWQgbG9uZyBpZCkKIHsKIAlzdHJ1Y3QgaHBldCBfX2lvbWVtICpocGV0ID0gaHBldF92aXJ0X2FkZHJlc3M7CkBAIC0xMTEsMTAgKzEzNCwxMCBAQAogCiAJbnJ0aW1lcnMgPSAoKGlkICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUKSArIDE7CiAKLQltZW1zZXQoJmhkLCAwLCBzaXplb2YgKGhkKSk7Ci0JaGQuaGRfcGh5c19hZGRyZXNzID0gaHBldF9hZGRyZXNzOwotCWhkLmhkX2FkZHJlc3MgPSBocGV0OwotCWhkLmhkX25pcnFzID0gbnJ0aW1lcnM7CisJbWVtc2V0KCZoZCwgMCwgc2l6ZW9mKGhkKSk7CisJaGQuaGRfcGh5c19hZGRyZXNzCT0gaHBldF9hZGRyZXNzOworCWhkLmhkX2FkZHJlc3MJCT0gaHBldDsKKwloZC5oZF9uaXJxcwkJPSBucnRpbWVyczsKIAlocGV0X3Jlc2VydmVfdGltZXIoJmhkLCAwKTsKIAogI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCkBAIC0xMzAsMTAgKzE1MywxMiBAQAogCWhkLmhkX2lycVsxXSA9IEhQRVRfTEVHQUNZX1JUQzsKIAogCWZvciAoaSA9IDI7IGkgPCBucnRpbWVyczsgdGltZXIrKywgaSsrKSB7Ci0JCWhkLmhkX2lycVtpXSA9IChyZWFkbCgmdGltZXItPmhwZXRfY29uZmlnKSAmIFRuX0lOVF9ST1VURV9DTkZfTUFTSykgPj4KLQkJCVRuX0lOVF9ST1VURV9DTkZfU0hJRlQ7CisJCWhkLmhkX2lycVtpXSA9IChyZWFkbCgmdGltZXItPmhwZXRfY29uZmlnKSAmCisJCQlUbl9JTlRfUk9VVEVfQ05GX01BU0spID4+IFRuX0lOVF9ST1VURV9DTkZfU0hJRlQ7CiAJfQogCisJaHBldF9yZXNlcnZlX21zaV90aW1lcnMoJmhkKTsKKwogCWhwZXRfYWxsb2MoJmhkKTsKIAogfQpAQCAtMjI3LDYwICsyNTIsNzAgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiaHBldCBjbG9ja2V2ZW50IHJlZ2lzdGVyZWRcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBocGV0X2xlZ2FjeV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQorc3RhdGljIGludCBocGV0X3NldHVwX21zaV9pcnEodW5zaWduZWQgaW50IGlycSk7CisKK3N0YXRpYyB2b2lkIGhwZXRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCwgaW50IHRpbWVyKQogewogCXVuc2lnbmVkIGxvbmcgY2ZnLCBjbXAsIG5vdzsKIAl1aW50NjRfdCBkZWx0YTsKIAotCXN3aXRjaChtb2RlKSB7CisJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQkJZGVsdGEgPSAoKHVpbnQ2NF90KShOU0VDX1BFUl9TRUMvSFopKSAqIGhwZXRfY2xvY2tldmVudC5tdWx0OwotCQlkZWx0YSA+Pj0gaHBldF9jbG9ja2V2ZW50LnNoaWZ0OworCQlkZWx0YSA9ICgodWludDY0X3QpKE5TRUNfUEVSX1NFQy9IWikpICogZXZ0LT5tdWx0OworCQlkZWx0YSA+Pj0gZXZ0LT5zaGlmdDsKIAkJbm93ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwogCQljbXAgPSBub3cgKyAodW5zaWduZWQgbG9uZykgZGVsdGE7Ci0JCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DRkcpOworCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCWNmZyB8PSBIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfAogCQkgICAgICAgSFBFVF9UTl9TRVRWQUwgfCBIUEVUX1ROXzMyQklUOwotCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDBfQ0ZHKTsKKwkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyh0aW1lcikpOwogCQkvKgogCQkgKiBUaGUgZmlyc3Qgd3JpdGUgYWZ0ZXIgd3JpdGluZyBUTl9TRVRWQUwgdG8gdGhlCiAJCSAqIGNvbmZpZyByZWdpc3RlciBzZXRzIHRoZSBjb3VudGVyIHZhbHVlLCB0aGUgc2Vjb25kCiAJCSAqIHdyaXRlIHNldHMgdGhlIHBlcmlvZC4KIAkJICovCi0JCWhwZXRfd3JpdGVsKGNtcCwgSFBFVF9UMF9DTVApOworCQlocGV0X3dyaXRlbChjbXAsIEhQRVRfVG5fQ01QKHRpbWVyKSk7CiAJCXVkZWxheSgxKTsKLQkJaHBldF93cml0ZWwoKHVuc2lnbmVkIGxvbmcpIGRlbHRhLCBIUEVUX1QwX0NNUCk7CisJCWhwZXRfd3JpdGVsKCh1bnNpZ25lZCBsb25nKSBkZWx0YSwgSFBFVF9Ubl9DTVAodGltZXIpKTsKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DRkcpOworCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCWNmZyAmPSB+SFBFVF9UTl9QRVJJT0RJQzsKIAkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl8zMkJJVDsKLQkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1QwX0NGRyk7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKIAljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ0ZHKTsKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyh0aW1lcikpOwogCQljZmcgJj0gfkhQRVRfVE5fRU5BQkxFOwotCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDBfQ0ZHKTsKKwkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyh0aW1lcikpOwogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgotCQlocGV0X2VuYWJsZV9sZWdhY3lfaW50KCk7CisJCWlmICh0aW1lciA9PSAwKSB7CisJCQlocGV0X2VuYWJsZV9sZWdhY3lfaW50KCk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBFVlRfVE9fSFBFVF9ERVYoZXZ0KTsKKwkJCWhwZXRfc2V0dXBfbXNpX2lycShoZGV2LT5pcnEpOworCQkJZGlzYWJsZV9pcnEoaGRldi0+aXJxKTsKKwkJCWlycV9zZXRfYWZmaW5pdHkoaGRldi0+aXJxLCBjcHVtYXNrX29mX2NwdShoZGV2LT5jcHUpKTsKKwkJCWVuYWJsZV9pcnEoaGRldi0+aXJxKTsKKwkJfQogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaHBldF9sZWdhY3lfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQorc3RhdGljIGludCBocGV0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCwgaW50IHRpbWVyKQogewogCXUzMiBjbnQ7CiAKIAljbnQgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CiAJY250ICs9ICh1MzIpIGRlbHRhOwotCWhwZXRfd3JpdGVsKGNudCwgSFBFVF9UMF9DTVApOworCWhwZXRfd3JpdGVsKGNudCwgSFBFVF9Ubl9DTVAodGltZXIpKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byByZWFkIGJhY2sgdGhlIENNUCByZWdpc3RlciB0byBtYWtlIHN1cmUgdGhhdApAQCAtMjkyLDYgKzMyNywzNDcgQEAKIAlyZXR1cm4gKHMzMikoKHUzMilocGV0X3JlYWRsKEhQRVRfQ09VTlRFUikgLSBjbnQpID49IDAgPyAtRVRJTUUgOiAwOwogfQogCitzdGF0aWMgdm9pZCBocGV0X2xlZ2FjeV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlocGV0X3NldF9tb2RlKG1vZGUsIGV2dCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9sZWdhY3lfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXJldHVybiBocGV0X25leHRfZXZlbnQoZGVsdGEsIGV2dCwgMCk7Cit9CisKKy8qCisgKiBIUEVUIE1TSSBTdXBwb3J0CisgKi8KKyNpZmRlZiBDT05GSUdfUENJX01TSQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGhwZXRfZGV2ICosIGNwdV9ocGV0X2Rldik7CitzdGF0aWMgc3RydWN0IGhwZXRfZGV2CSpocGV0X2RldnM7CisKK3ZvaWQgaHBldF9tc2lfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gZ2V0X2lycV9kYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBjZmc7CisKKwkvKiB1bm1hc2sgaXQgKi8KKwljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGhkZXYtPm51bSkpOworCWNmZyB8PSBIUEVUX1ROX0ZTQjsKKwlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKGhkZXYtPm51bSkpOworfQorCit2b2lkIGhwZXRfbXNpX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGNmZzsKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKworCS8qIG1hc2sgaXQgKi8KKwljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGhkZXYtPm51bSkpOworCWNmZyAmPSB+SFBFVF9UTl9GU0I7CisJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyhoZGV2LT5udW0pKTsKK30KKwordm9pZCBocGV0X21zaV93cml0ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IGdldF9pcnFfZGF0YShpcnEpOworCisJaHBldF93cml0ZWwobXNnLT5kYXRhLCBIUEVUX1RuX1JPVVRFKGhkZXYtPm51bSkpOworCWhwZXRfd3JpdGVsKG1zZy0+YWRkcmVzc19sbywgSFBFVF9Ubl9ST1VURShoZGV2LT5udW0pICsgNCk7Cit9CisKK3ZvaWQgaHBldF9tc2lfcmVhZCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IGdldF9pcnFfZGF0YShpcnEpOworCisJbXNnLT5kYXRhID0gaHBldF9yZWFkbChIUEVUX1RuX1JPVVRFKGhkZXYtPm51bSkpOworCW1zZy0+YWRkcmVzc19sbyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9ST1VURShoZGV2LT5udW0pICsgNCk7CisJbXNnLT5hZGRyZXNzX2hpID0gMDsKK30KKworc3RhdGljIHZvaWQgaHBldF9tc2lfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IEVWVF9UT19IUEVUX0RFVihldnQpOworCWhwZXRfc2V0X21vZGUobW9kZSwgZXZ0LCBoZGV2LT5udW0pOworfQorCitzdGF0aWMgaW50IGhwZXRfbXNpX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gRVZUX1RPX0hQRVRfREVWKGV2dCk7CisJcmV0dXJuIGhwZXRfbmV4dF9ldmVudChkZWx0YSwgZXZ0LCBoZGV2LT5udW0pOworfQorCitzdGF0aWMgaW50IGhwZXRfc2V0dXBfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChhcmNoX3NldHVwX2hwZXRfbXNpKGlycSkpIHsKKwkJZGVzdHJveV9pcnEoaXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwZXRfYXNzaWduX2lycShzdHJ1Y3QgaHBldF9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaXJxID0gY3JlYXRlX2lycSgpOworCWlmICghaXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNldF9pcnFfZGF0YShpcnEsIGRldik7CisKKwlpZiAoaHBldF9zZXR1cF9tc2lfaXJxKGlycSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5pcnEgPSBpcnE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBocGV0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGhwZXRfZGV2ICpkZXYgPSAoc3RydWN0IGhwZXRfZGV2ICopZGF0YTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpoZXZ0ID0gJmRldi0+ZXZ0OworCisJaWYgKCFoZXZ0LT5ldmVudF9oYW5kbGVyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNwdXJpb3VzIEhQRVQgdGltZXIgaW50ZXJydXB0IG9uIEhQRVQgdGltZXIgJWRcbiIsCisJCQkJZGV2LT5udW0pOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaGV2dC0+ZXZlbnRfaGFuZGxlcihoZXZ0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9zZXR1cF9pcnEoc3RydWN0IGhwZXRfZGV2ICpkZXYpCit7CisKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGhwZXRfaW50ZXJydXB0X2hhbmRsZXIsCisJCQlJUlFGX1NIQVJFRHxJUlFGX05PQkFMQU5DSU5HLCBkZXYtPm5hbWUsIGRldikpCisJCXJldHVybiAtMTsKKworCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlpcnFfc2V0X2FmZmluaXR5KGRldi0+aXJxLCBjcHVtYXNrX29mX2NwdShkZXYtPmNwdSkpOworCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCisJcHJpbnRrKEtFUk5fREVCVUcgImhwZXQ6ICVzIGlycSAlZCBmb3IgTVNJXG4iLAorCQkJIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbiBzcGVjaWZpYyBAY3B1ICovCitzdGF0aWMgdm9pZCBpbml0X29uZV9ocGV0X21zaV9jbG9ja2V2ZW50KHN0cnVjdCBocGV0X2RldiAqaGRldiwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmaGRldi0+ZXZ0OworCXVpbnQ2NF90IGhwZXRfZnJlcTsKKworCVdBUk5fT04oY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaWYgKCEoaGRldi0+ZmxhZ3MgJiBIUEVUX0RFVl9WQUxJRCkpCisJCXJldHVybjsKKworCWlmIChocGV0X3NldHVwX21zaV9pcnEoaGRldi0+aXJxKSkKKwkJcmV0dXJuOworCisJaGRldi0+Y3B1ID0gY3B1OworCXBlcl9jcHUoY3B1X2hwZXRfZGV2LCBjcHUpID0gaGRldjsKKwlldnQtPm5hbWUgPSBoZGV2LT5uYW1lOworCWhwZXRfc2V0dXBfaXJxKGhkZXYpOworCWV2dC0+aXJxID0gaGRldi0+aXJxOworCisJZXZ0LT5yYXRpbmcgPSAxMTA7CisJZXZ0LT5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX09ORVNIT1Q7CisJaWYgKGhkZXYtPmZsYWdzICYgSFBFVF9ERVZfUEVSSV9DQVApCisJCWV2dC0+ZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUM7CisKKwlldnQtPnNldF9tb2RlID0gaHBldF9tc2lfc2V0X21vZGU7CisJZXZ0LT5zZXRfbmV4dF9ldmVudCA9IGhwZXRfbXNpX25leHRfZXZlbnQ7CisJZXZ0LT5zaGlmdCA9IDMyOworCisJLyoKKwkgKiBUaGUgcGVyaW9kIGlzIGEgZmVtdG8gc2Vjb25kcyB2YWx1ZS4gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlCisJICogc2NhbGVkIG1hdGggbXVsdGlwbGljYXRpb24gZmFjdG9yIGZvciBuYW5vc2Vjb25kIHRvIGhwZXQgdGljaworCSAqIGNvbnZlcnNpb24uCisJICovCisJaHBldF9mcmVxID0gMTAwMDAwMDAwMDAwMDAwMFVMTDsKKwlkb19kaXYoaHBldF9mcmVxLCBocGV0X3BlcmlvZCk7CisJZXZ0LT5tdWx0ID0gZGl2X3NjKCh1bnNpZ25lZCBsb25nKSBocGV0X2ZyZXEsCisJCQkJICAgICAgTlNFQ19QRVJfU0VDLCBldnQtPnNoaWZ0KTsKKwkvKiBDYWxjdWxhdGUgdGhlIG1heCBkZWx0YSAqLworCWV2dC0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRkZGLCBldnQpOworCS8qIDUgdXNlYyBtaW5pbXVtIHJlcHJvZ3JhbW1pbmcgZGVsdGEuICovCisJZXZ0LT5taW5fZGVsdGFfbnMgPSA1MDAwOworCisJZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoaGRldi0+Y3B1KTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoZXZ0KTsKK30KKworI2lmZGVmIENPTkZJR19IUEVUCisvKiBSZXNlcnZlIGF0IGxlYXN0IG9uZSB0aW1lciBmb3IgdXNlcnNwYWNlICgvZGV2L2hwZXQpICovCisjZGVmaW5lIFJFU0VSVkVfVElNRVJTIDEKKyNlbHNlCisjZGVmaW5lIFJFU0VSVkVfVElNRVJTIDAKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBocGV0X21zaV9jYXBhYmlsaXR5X2xvb2t1cCh1bnNpZ25lZCBpbnQgc3RhcnRfdGltZXIpCit7CisJdW5zaWduZWQgaW50IGlkOworCXVuc2lnbmVkIGludCBudW1fdGltZXJzOworCXVuc2lnbmVkIGludCBudW1fdGltZXJzX3VzZWQgPSAwOworCWludCBpOworCisJaWQgPSBocGV0X3JlYWRsKEhQRVRfSUQpOworCisJbnVtX3RpbWVycyA9ICgoaWQgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpOworCW51bV90aW1lcnMrKzsgLyogVmFsdWUgcmVhZCBvdXQgc3RhcnRzIGZyb20gMCAqLworCisJaHBldF9kZXZzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhwZXRfZGV2KSAqIG51bV90aW1lcnMsIEdGUF9LRVJORUwpOworCWlmICghaHBldF9kZXZzKQorCQlyZXR1cm47CisKKwlocGV0X251bV90aW1lcnMgPSBudW1fdGltZXJzOworCisJZm9yIChpID0gc3RhcnRfdGltZXI7IGkgPCBudW1fdGltZXJzIC0gUkVTRVJWRV9USU1FUlM7IGkrKykgeworCQlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSAmaHBldF9kZXZzW251bV90aW1lcnNfdXNlZF07CisJCXVuc2lnbmVkIGxvbmcgY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhpKSk7CisKKwkJLyogT25seSBjb25zaWRlciBIUEVUIHRpbWVyIHdpdGggTVNJIHN1cHBvcnQgKi8KKwkJaWYgKCEoY2ZnICYgSFBFVF9UTl9GU0JfQ0FQKSkKKwkJCWNvbnRpbnVlOworCisJCWhkZXYtPmZsYWdzID0gMDsKKwkJaWYgKGNmZyAmIEhQRVRfVE5fUEVSSU9ESUNfQ0FQKQorCQkJaGRldi0+ZmxhZ3MgfD0gSFBFVF9ERVZfUEVSSV9DQVA7CisJCWhkZXYtPm51bSA9IGk7CisKKwkJc3ByaW50ZihoZGV2LT5uYW1lLCAiaHBldCVkIiwgaSk7CisJCWlmIChocGV0X2Fzc2lnbl9pcnEoaGRldikpCisJCQljb250aW51ZTsKKworCQloZGV2LT5mbGFncyB8PSBIUEVUX0RFVl9GU0JfQ0FQOworCQloZGV2LT5mbGFncyB8PSBIUEVUX0RFVl9WQUxJRDsKKwkJbnVtX3RpbWVyc191c2VkKys7CisJCWlmIChudW1fdGltZXJzX3VzZWQgPT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSkKKwkJCWJyZWFrOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkhQRVQ6ICVkIHRpbWVycyBpbiB0b3RhbCwgJWQgdGltZXJzIHdpbGwgYmUgdXNlZCBmb3IgcGVyLWNwdSB0aW1lclxuIiwKKwkJbnVtX3RpbWVycywgbnVtX3RpbWVyc191c2VkKTsKK30KKworI2lmZGVmIENPTkZJR19IUEVUCitzdGF0aWMgdm9pZCBocGV0X3Jlc2VydmVfbXNpX3RpbWVycyhzdHJ1Y3QgaHBldF9kYXRhICpoZCkKK3sKKwlpbnQgaTsKKworCWlmICghaHBldF9kZXZzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaHBldF9udW1fdGltZXJzOyBpKyspIHsKKwkJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gJmhwZXRfZGV2c1tpXTsKKworCQlpZiAoIShoZGV2LT5mbGFncyAmIEhQRVRfREVWX1ZBTElEKSkKKwkJCWNvbnRpbnVlOworCisJCWhkLT5oZF9pcnFbaGRldi0+bnVtXSA9IGhkZXYtPmlycTsKKwkJaHBldF9yZXNlcnZlX3RpbWVyKGhkLCBoZGV2LT5udW0pOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGhwZXRfZGV2ICpocGV0X2dldF91bnVzZWRfdGltZXIodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghaHBldF9kZXZzKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBocGV0X251bV90aW1lcnM7IGkrKykgeworCQlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSAmaHBldF9kZXZzW2ldOworCisJCWlmICghKGhkZXYtPmZsYWdzICYgSFBFVF9ERVZfVkFMSUQpKQorCQkJY29udGludWU7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhQRVRfREVWX1VTRURfQklULAorCQkJKHVuc2lnbmVkIGxvbmcgKikmaGRldi0+ZmxhZ3MpKQorCQkJY29udGludWU7CisJCXJldHVybiBoZGV2OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGhwZXRfd29ya19zdHJ1Y3QgeworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZTsKK307CisKK3N0YXRpYyB2b2lkIGhwZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IGhwZXRfd29ya19zdHJ1Y3QgKmhwZXRfd29yazsKKworCWhwZXRfd29yayA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaHBldF93b3JrX3N0cnVjdCwgd29yay53b3JrKTsKKworCWhkZXYgPSBocGV0X2dldF91bnVzZWRfdGltZXIoKTsKKwlpZiAoaGRldikKKwkJaW5pdF9vbmVfaHBldF9tc2lfY2xvY2tldmVudChoZGV2LCBjcHUpOworCisJY29tcGxldGUoJmhwZXRfd29yay0+Y29tcGxldGUpOworfQorCitzdGF0aWMgaW50IGhwZXRfY3B1aHBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwKKwkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgbG9uZyBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OworCXN0cnVjdCBocGV0X3dvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gcGVyX2NwdShjcHVfaHBldF9kZXYsIGNwdSk7CisKKwlzd2l0Y2ggKGFjdGlvbiAmIDB4ZikgeworCWNhc2UgQ1BVX09OTElORToKKwkJSU5JVF9ERUxBWUVEX1dPUksoJndvcmsud29yaywgaHBldF93b3JrKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZ3b3JrLmNvbXBsZXRlKTsKKwkJLyogRklYTUU6IGFkZCBzY2hlZHVsZV93b3JrX29uKCkgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgJndvcmsud29yaywgMCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJndvcmsuY29tcGxldGUpOworCQlicmVhazsKKwljYXNlIENQVV9ERUFEOgorCQlpZiAoaGRldikgeworCQkJZnJlZV9pcnEoaGRldi0+aXJxLCBoZGV2KTsKKwkJCWhkZXYtPmZsYWdzICY9IH5IUEVUX0RFVl9VU0VEOworCQkJcGVyX2NwdShjcHVfaHBldF9kZXYsIGNwdSkgPSBOVUxMOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorI2Vsc2UKKworc3RhdGljIGludCBocGV0X3NldHVwX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIGhwZXRfbXNpX2NhcGFiaWxpdHlfbG9va3VwKHVuc2lnbmVkIGludCBzdGFydF90aW1lcikKK3sKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBDT05GSUdfSFBFVAorc3RhdGljIHZvaWQgaHBldF9yZXNlcnZlX21zaV90aW1lcnMoc3RydWN0IGhwZXRfZGF0YSAqaGQpCit7CisJcmV0dXJuOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaHBldF9jcHVocF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLAorCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlyZXR1cm4gTk9USUZZX09LOworfQorCisjZW5kaWYKKwogLyoKICAqIENsb2NrIHNvdXJjZSByZWxhdGVkIGNvZGUKICAqLwpAQCAtNDI3LDggKzgwMywxMCBAQAogCiAJaWYgKGlkICYgSFBFVF9JRF9MRUdTVVApIHsKIAkJaHBldF9sZWdhY3lfY2xvY2tldmVudF9yZWdpc3RlcigpOworCQlocGV0X21zaV9jYXBhYmlsaXR5X2xvb2t1cCgyKTsKIAkJcmV0dXJuIDE7CiAJfQorCWhwZXRfbXNpX2NhcGFiaWxpdHlfbG9va3VwKDApOwogCXJldHVybiAwOwogCiBvdXRfbm9ocGV0OgpAQCAtNDQ1LDYgKzgyMyw4IEBACiAgKi8KIHN0YXRpYyBfX2luaXQgaW50IGhwZXRfbGF0ZV9pbml0KHZvaWQpCiB7CisJaW50IGNwdTsKKwogCWlmIChib290X2hwZXRfZGlzYWJsZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTQ2MCw2ICs4NDAsMTMgQEAKIAogCWhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnMoaHBldF9yZWFkbChIUEVUX0lEKSk7CiAKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlocGV0X2NwdWhwX25vdGlmeShOVUxMLCBDUFVfT05MSU5FLCAodm9pZCAqKShsb25nKWNwdSk7CisJfQorCisJLyogVGhpcyBub3RpZmllciBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHdvcmtxdWV1ZSBpcyByZWFkeSAqLworCWhvdGNwdV9ub3RpZmllcihocGV0X2NwdWhwX25vdGlmeSwgLTIwKTsKKwogCXJldHVybiAwOwogfQogZnNfaW5pdGNhbGwoaHBldF9sYXRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2NGQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMKQEAgLTAsMCArMSwzODk2IEBACisvKgorICoJSW50ZWwgSU8tQVBJQyBzdXBwb3J0IGZvciBtdWx0aS1QZW50aXVtIGhvc3RzLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciwgSGFqbmFsa2EgU3phYm8KKyAqCisgKglNYW55IHRoYW5rcyB0byBTdGlnIFZlbmFhcyBmb3IgdHJ5aW5nIG91dCBjb3VudGxlc3MgZXhwZXJpbWVudGFsCisgKglwYXRjaGVzIGFuZCByZXBvcnRpbmcvZGVidWdnaW5nIHByb2JsZW1zIHBhdGllbnRseSEKKyAqCisgKgkoYykgMTk5OSwgTXVsdGlwbGUgSU8tQVBJQyBzdXBwb3J0LCBkZXZlbG9wZWQgYnkKKyAqCUtlbi1pY2hpIFlha3UgPHlha3VAY3NzMS5rYm5lcy5uZWMuY28uanA+IGFuZAorICogICAgICBIaWRlbWkgS2lzaGltb3RvIDxraXNpbW90b0Bjc3MxLmtibmVzLm5lYy5jby5qcD4sCisgKglmdXJ0aGVyIHRlc3RlZCBhbmQgY2xlYW5lZCB1cCBieSBaYWNoIEJyb3duIDx6YWJAcmVkaGF0LmNvbT4KKyAqCWFuZCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCisgKglGaXhlcworICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3M7CisgKgkJCQkJdGhhbmtzIHRvIEVyaWMgR2lsbW9yZQorICoJCQkJCWFuZCBSb2xmIEcuIFRld3MKKyAqCQkJCQlmb3IgdGVzdGluZyB0aGVzZSBleHRlbnNpdmVseQorICoJUGF1bCBEaWVmZW5iYXVnaAk6CUFkZGVkIGZ1bGwgQUNQSSBzdXBwb3J0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L2h0aXJxLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CS8qIHRpbWVfYWZ0ZXIoKSAqLworI2lmZGVmIENPTkZJR19BQ1BJCisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ocGV0Lmg+CisKKyNpbmNsdWRlIDxhc20vaWRsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lycV9yZW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgorI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXZfaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoX2lwaS5oPgorI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorCisjZGVmaW5lIF9fYXBpY2RlYnVnaW5pdCh0eXBlKSBzdGF0aWMgdHlwZSBfX2luaXQKKworLyoKKyAqICAgICAgSXMgdGhlIFNpUyBBUElDIHJtdyBidWcgcHJlc2VudCA/CisgKiAgICAgIC0xID0gZG9uJ3Qga25vdywgMCA9IG5vLCAxID0geWVzCisgKi8KK2ludCBzaXNfYXBpY19idWcgPSAtMTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKKworLyoKKyAqICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCisgKi8KK2ludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107CisKKy8qIEkvTyBBUElDIGVudHJpZXMgKi8KK3N0cnVjdCBtcF9jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKK2ludCBucl9pb2FwaWNzOworCisvKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK3N0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKKworLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK2ludCBtcF9pcnFfZW50cmllczsKKworI2lmIGRlZmluZWQgKENPTkZJR19NQ0EpIHx8IGRlZmluZWQgKENPTkZJR19FSVNBKQoraW50IG1wX2J1c19pZF90b190eXBlW01BWF9NUF9CVVNTRVNdOworI2VuZGlmCisKK0RFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKKworaW50IHNraXBfaW9hcGljX3NldHVwOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2FwaWMoY2hhciAqc3RyKQoreworCS8qIGRpc2FibGUgSU8tQVBJQyAqLworCWRpc2FibGVfaW9hcGljX3NldHVwKCk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKKworc3RydWN0IGlycV9waW5fbGlzdDsKK3N0cnVjdCBpcnFfY2ZnIHsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmlycV8yX3BpbjsKKwljcHVtYXNrX3QgZG9tYWluOworCWNwdW1hc2tfdCBvbGRfZG9tYWluOworCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKKwl1OCB2ZWN0b3I7CisJdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7Cit9OworCisvKiBpcnFfY2ZnIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLworc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdID0geworCVswXSAgPSB7IC5pcnEgPSAgMCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTBfVkVDVE9SLCAgfSwKKwlbMV0gID0geyAuaXJxID0gIDEsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExX1ZFQ1RPUiwgIH0sCisJWzJdICA9IHsgLmlycSA9ICAyLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMl9WRUNUT1IsICB9LAorCVszXSAgPSB7IC5pcnEgPSAgMywgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTNfVkVDVE9SLCAgfSwKKwlbNF0gID0geyAuaXJxID0gIDQsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE0X1ZFQ1RPUiwgIH0sCisJWzVdICA9IHsgLmlycSA9ICA1LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNV9WRUNUT1IsICB9LAorCVs2XSAgPSB7IC5pcnEgPSAgNiwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTZfVkVDVE9SLCAgfSwKKwlbN10gID0geyAuaXJxID0gIDcsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE3X1ZFQ1RPUiwgIH0sCisJWzhdICA9IHsgLmlycSA9ICA4LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJROF9WRUNUT1IsICB9LAorCVs5XSAgPSB7IC5pcnEgPSAgOSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTlfVkVDVE9SLCAgfSwKKwlbMTBdID0geyAuaXJxID0gMTAsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMF9WRUNUT1IsIH0sCisJWzExXSA9IHsgLmlycSA9IDExLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTFfVkVDVE9SLCB9LAorCVsxMl0gPSB7IC5pcnEgPSAxMiwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTEyX1ZFQ1RPUiwgfSwKKwlbMTNdID0geyAuaXJxID0gMTMsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExM19WRUNUT1IsIH0sCisJWzE0XSA9IHsgLmlycSA9IDE0LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTRfVkVDVE9SLCB9LAorCVsxNV0gPSB7IC5pcnEgPSAxNSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE1X1ZFQ1RPUiwgfSwKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfaXJxX2NmZyhpcnEsIGNmZykJCVwKKwlmb3IgKGlycSA9IDAsIGNmZyA9IGlycV9jZmd4OyBpcnEgPCBucl9pcnFzOyBpcnErKywgY2ZnKyspCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NmZyAqaXJxX2NmZyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiBpcnEgPCBucl9pcnFzID8gaXJxX2NmZ3ggKyBpcnEgOiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmdfYWxsb2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxX2NmZyhpcnEpOworfQorCisvKgorICogUm91Z2ggZXN0aW1hdGlvbiBvZiBob3cgbWFueSBzaGFyZWQgSVJRcyB0aGVyZSBhcmUsIGNhbiBiZSBjaGFuZ2VkCisgKiBhbnl0aW1lLgorICovCisjZGVmaW5lIE1BWF9QTFVTX1NIQVJFRF9JUlFTIE5SX0lSUVMKKyNkZWZpbmUgUElOX01BUF9TSVpFIChNQVhfUExVU19TSEFSRURfSVJRUyArIE5SX0lSUVMpCisKKy8qCisgKiBUaGlzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCB3ZSB3YW50IHRvIGRvIGl0IE8oMSkKKyAqCisgKiB0aGUgaW5kZXhpbmcgb3JkZXIgb2YgdGhpcyBhcnJheSBmYXZvcnMgMToxIG1hcHBpbmdzCisgKiBiZXR3ZWVuIHBpbnMgYW5kIElSUXMuCisgKi8KKworc3RydWN0IGlycV9waW5fbGlzdCB7CisJaW50IGFwaWMsIHBpbjsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgaXJxXzJfcGluX2hlYWRbUElOX01BUF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW5fcHRyOworCitzdGF0aWMgdm9pZCBfX2luaXQgaXJxXzJfcGluX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpwaW4gPSBpcnFfMl9waW5faGVhZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBQSU5fTUFQX1NJWkU7IGkrKykKKwkJcGluW2ktMV0ubmV4dCA9ICZwaW5baV07CisKKwlpcnFfMl9waW5fcHRyID0gJnBpblswXTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgKmdldF9vbmVfZnJlZV9pcnFfMl9waW4odm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpwaW4gPSBpcnFfMl9waW5fcHRyOworCisJaWYgKCFwaW4pCisJCXBhbmljKCJjYW4gbm90IGdldCBtb3JlIGlycV8yX3BpblxuIik7CisKKwlpcnFfMl9waW5fcHRyID0gcGluLT5uZXh0OworCXBpbi0+bmV4dCA9IE5VTEw7CisJcmV0dXJuIHBpbjsKK30KKworc3RydWN0IGlvX2FwaWMgeworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOworCXVuc2lnbmVkIGludCBkYXRhOworfTsKKworc3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpY19iYXNlKGludCBpZHgpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgX19maXhfdG9fdmlydChGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgpCisJCSsgKG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljYWRkciAmIH5QQUdFX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXJldHVybiByZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3dyaXRlKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOworfQorCisvKgorICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKKyAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCisgKgorICogT2xkZXIgU2lTIEFQSUMgcmVxdWlyZXMgd2UgcmV3cml0ZSB0aGUgaW5kZXggcmVnaXN0ZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKworCWlmIChzaXNfYXBpY19idWcpCisJCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7CisJd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyBib29sIGlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwllbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgaW50IHJlZzsKKwkJaW50IHBpbjsKKworCQlpZiAoIWVudHJ5KQorCQkJYnJlYWs7CisJCXBpbiA9IGVudHJ5LT5waW47CisJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKKwkJLyogSXMgdGhlIHJlbW90ZSBJUlIgYml0IHNldD8gKi8KKwkJaWYgKHJlZyAmIElPX0FQSUNfUkVESVJfUkVNT1RFX0lSUikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmICghZW50cnktPm5leHQpCisJCQlicmVhazsKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBmYWxzZTsKK30KKwordW5pb24gZW50cnlfdW5pb24geworCXN0cnVjdCB7IHUzMiB3MSwgdzI7IH07CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Cit9OworCitzdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgaW9hcGljX3JlYWRfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCit7CisJdW5pb24gZW50cnlfdW5pb24gZXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7CisJZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmV0dXJuIGV1LmVudHJ5OworfQorCisvKgorICogV2hlbiB3ZSB3cml0ZSBhIG5ldyBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGhpZ2gKKyAqIHdvcmQgZmlyc3QhIElmIHRoZSBtYXNrIGJpdCBpbiB0aGUgbG93IHdvcmQgaXMgY2xlYXIsIHdlIHdpbGwgZW5hYmxlCisgKiB0aGUgaW50ZXJydXB0LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudHJ5IGlzIGZ1bGx5IHBvcHVsYXRlZAorICogYmVmb3JlIHRoYXQgaGFwcGVucy4KKyAqLworc3RhdGljIHZvaWQKK19faW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQoreworCXVuaW9uIGVudHJ5X3VuaW9uIGV1OworCWV1LmVudHJ5ID0gZTsKKwlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Cit9CisKK3N0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFdoZW4gd2UgbWFzayBhbiBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGxvdworICogd29yZCBmaXJzdCwgaW4gb3JkZXIgdG8gc2V0IHRoZSBtYXNrIGJpdCBiZWZvcmUgd2UgY2hhbmdlIHRoZQorICogaGlnaCBiaXRzIQorICovCitzdGF0aWMgdm9pZCBpb2FwaWNfbWFza19lbnRyeShpbnQgYXBpYywgaW50IHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuaW9uIGVudHJ5X3VuaW9uIGV1ID0geyAuZW50cnkubWFzayA9IDEgfTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7CisJaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHZvaWQgX190YXJnZXRfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKK3sKKwlpbnQgYXBpYywgcGluOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGludCByZWc7CisKKwkJaWYgKCFlbnRyeSkKKwkJCWJyZWFrOworCisJCWFwaWMgPSBlbnRyeS0+YXBpYzsKKwkJcGluID0gZW50cnktPnBpbjsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQkvKgorCQkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uIGNvbWVzCisJCSAqIGZyb20gaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KKwkJICovCisJCWlmICghaXJxX3JlbWFwcGVkKGlycSkpCisJCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7CisjZWxzZQorCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7CisjZW5kaWYKKwkJcmVnID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyBwaW4qMik7CisJCXJlZyAmPSB+SU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSzsKKwkJcmVnIHw9IHZlY3RvcjsKKwkJaW9fYXBpY19tb2RpZnkoYXBpYywgMHgxMCArIHBpbioyLCByZWcpOworCQlpZiAoIWVudHJ5LT5uZXh0KQorCQkJYnJlYWs7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKTsKKworc3RhdGljIHZvaWQgc2V0X2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKKwlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisJLyoKKwkgKiBPbmx5IHRoZSBoaWdoIDggYml0cyBhcmUgdmFsaWQuCisJICovCisJZGVzdCA9IFNFVF9BUElDX0xPR0lDQUxfSUQoZGVzdCk7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZy0+dmVjdG9yKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKy8qCisgKiBUaGUgY29tbW9uIGNhc2UgaXMgMToxIElSUTwtPnBpbiBtYXBwaW5ncy4gU29tZXRpbWVzIHRoZXJlIGFyZQorICogc2hhcmVkIElTQS1zcGFjZSBJUlFzLCBzbyB3ZSBoYXZlIHRvIHN1cHBvcnQgdGhlbS4gV2UgYXJlIHN1cGVyCisgKiBmYXN0IGluIHRoZSBjb21tb24gY2FzZSwgYW5kIGZhc3QgZm9yIHNoYXJlZCBJU0Etc3BhY2UgSVJRcy4KKyAqLworc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnEodW5zaWduZWQgaW50IGlycSwgaW50IGFwaWMsIGludCBwaW4pCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCS8qIGZpcnN0IHRpbWUgdG8gcmVmZXIgaXJxX2NmZywgc28gd2l0aCBuZXcgKi8KKwljZmcgPSBpcnFfY2ZnX2FsbG9jKGlycSk7CisJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwlpZiAoIWVudHJ5KSB7CisJCWVudHJ5ID0gZ2V0X29uZV9mcmVlX2lycV8yX3BpbigpOworCQljZmctPmlycV8yX3BpbiA9IGVudHJ5OworCQllbnRyeS0+YXBpYyA9IGFwaWM7CisJCWVudHJ5LT5waW4gPSBwaW47CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoZW50cnktPm5leHQpIHsKKwkJLyogbm90IGFnYWluLCBwbGVhc2UgKi8KKwkJaWYgKGVudHJ5LT5hcGljID09IGFwaWMgJiYgZW50cnktPnBpbiA9PSBwaW4pCisJCQlyZXR1cm47CisKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl9CisKKwllbnRyeS0+bmV4dCA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oKTsKKwllbnRyeSA9IGVudHJ5LT5uZXh0OworCWVudHJ5LT5hcGljID0gYXBpYzsKKwllbnRyeS0+cGluID0gcGluOworfQorCisvKgorICogUmVyb3V0ZSBhbiBJUlEgdG8gYSBkaWZmZXJlbnQgcGluLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcmVwbGFjZV9waW5fYXRfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCQkJICAgICAgaW50IG9sZGFwaWMsIGludCBvbGRwaW4sCisJCQkJICAgICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWludCByZXBsYWNlZCA9IDA7CisKKwl3aGlsZSAoZW50cnkpIHsKKwkJaWYgKGVudHJ5LT5hcGljID09IG9sZGFwaWMgJiYgZW50cnktPnBpbiA9PSBvbGRwaW4pIHsKKwkJCWVudHJ5LT5hcGljID0gbmV3YXBpYzsKKwkJCWVudHJ5LT5waW4gPSBuZXdwaW47CisJCQlyZXBsYWNlZCA9IDE7CisJCQkvKiBldmVyeSBvbmUgaXMgZGlmZmVyZW50LCByaWdodD8gKi8KKwkJCWJyZWFrOworCQl9CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorCisJLyogd2h5PyBjYWxsIHJlcGxhY2UgYmVmb3JlIGFkZD8gKi8KKwlpZiAoIXJlcGxhY2VkKQorCQlhZGRfcGluX3RvX2lycShpcnEsIG5ld2FwaWMsIG5ld3Bpbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX21vZGlmeV9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJCQlpbnQgbWFza19hbmQsIGludCBtYXNrX29yLAorCQkJCXZvaWQgKCpmaW5hbCkoc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkpKQoreworCWludCBwaW47CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwlmb3IgKGVudHJ5ID0gY2ZnLT5pcnFfMl9waW47IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKKwkJdW5zaWduZWQgaW50IHJlZzsKKwkJcGluID0gZW50cnktPnBpbjsKKwkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgcGluICogMik7CisJCXJlZyAmPSBtYXNrX2FuZDsKKwkJcmVnIHw9IG1hc2tfb3I7CisJCWlvX2FwaWNfbW9kaWZ5KGVudHJ5LT5hcGljLCAweDEwICsgcGluICogMiwgcmVnKTsKKwkJaWYgKGZpbmFsKQorCQkJZmluYWwoZW50cnkpOworCX0KK30KKworc3RhdGljIHZvaWQgX191bm1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+SU9fQVBJQ19SRURJUl9NQVNLRUQsIDAsIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBpb19hcGljX3N5bmMoc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkpCit7CisJLyoKKwkgKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZworCSAqIGEgZHVtbXkgcmVhZCBmcm9tIHRoZSBJTy1BUElDCisJICovCisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYzsKKwlpb19hcGljID0gaW9fYXBpY19iYXNlKGVudHJ5LT5hcGljKTsKKwlyZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgJmlvX2FwaWNfc3luYyk7Cit9CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCitzdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+SU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSLAorCQkJSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+SU9fQVBJQ19SRURJUl9NQVNLRUQsCisJCQlJT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsIE5VTEwpOworfQorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworc3RhdGljIHZvaWQgbWFza19JT19BUElDX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJX19tYXNrX0lPX0FQSUNfaXJxKGlycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdW5tYXNrX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX3VubWFza19JT19BUElDX2lycShpcnEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUNfcGluKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcGluKQoreworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCisJLyogQ2hlY2sgZGVsaXZlcnlfbW9kZSB0byBiZSBzdXJlIHdlJ3JlIG5vdCBjbGVhcmluZyBhbiBTTUkgcGluICovCisJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOworCWlmIChlbnRyeS5kZWxpdmVyeV9tb2RlID09IGRlc3RfU01JKQorCQlyZXR1cm47CisJLyoKKwkgKiBEaXNhYmxlIGl0IGluIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCSAqLworCWlvYXBpY19tYXNrX2VudHJ5KGFwaWMsIHBpbik7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUMgKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbjsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspCisJCQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOworfQorCisjaWYgIWRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQordm9pZCBzZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgaW50IGNmZzsKKworCS8qCisJICogV2FpdCBmb3IgaWRsZS4KKwkgKi8KKwlhcGljX3dhaXRfaWNyX2lkbGUoKTsKKwljZmcgPSBBUElDX0RNX0ZJWEVEIHwgQVBJQ19ERVNUX1NFTEYgfCB2ZWN0b3IgfCBBUElDX0RFU1RfTE9HSUNBTDsKKwkvKgorCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGNmZyk7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TTVAgJiYgQ09ORklHX1g4Nl8zMiovCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogc3VwcG9ydCBmb3IgYnJva2VuIE1QIEJJT1NzLCBlbmFibGVzIGhhbmQtcmVkaXJlY3Rpb24gb2YgUElSUTAtNyB0bworICogc3BlY2lmaWMgQ1BVLXNpZGUgSVJRcy4KKyAqLworCisjZGVmaW5lIE1BWF9QSVJRUyA4CitzdGF0aWMgaW50IHBpcnFfZW50cmllcyBbTUFYX1BJUlFTXTsKK3N0YXRpYyBpbnQgcGlycXNfZW5hYmxlZDsKKworc3RhdGljIGludCBfX2luaXQgaW9hcGljX3BpcnFfc2V0dXAoY2hhciAqc3RyKQoreworCWludCBpLCBtYXg7CisJaW50IGludHNbTUFYX1BJUlFTKzFdOworCisJZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKKwkJcGlycV9lbnRyaWVzW2ldID0gLTE7CisKKwlwaXJxc19lbmFibGVkID0gMTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTworCQkJIlBJUlEgcmVkaXJlY3Rpb24sIHdvcmtpbmcgYXJvdW5kIGJyb2tlbiBNUC1CSU9TLlxuIik7CisJbWF4ID0gTUFYX1BJUlFTOworCWlmIChpbnRzWzBdIDwgTUFYX1BJUlFTKQorCQltYXggPSBpbnRzWzBdOworCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCSIuLi4gUElSUSVkIC0+IElSUSAlZFxuIiwgaSwgaW50c1tpKzFdKTsKKwkJLyoKKwkJICogUElSUXMgYXJlIG1hcHBlZCB1cHNpZGUgZG93biwgdXN1YWxseS4KKwkJICovCisJCXBpcnFfZW50cmllc1tNQVhfUElSUVMtaS0xXSA9IGludHNbaSsxXTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoInBpcnE9IiwgaW9hcGljX3BpcnFfc2V0dXApOworI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisvKiBJL08gQVBJQyBSVEUgY29udGVudHMgYXQgdGhlIE9TIGJvb3QgdXAgKi8KK3N0YXRpYyBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZWFybHlfaW9hcGljX2VudHJpZXNbTUFYX0lPX0FQSUNTXTsKKworLyoKKyAqIFNhdmVzIGFuZCBtYXNrcyBhbGwgdGhlIHVubWFza2VkIElPLUFQSUMgUlRFJ3MKKyAqLworaW50IHNhdmVfbWFza19JT19BUElDX3NldHVwKHZvaWQpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGFwaWMsIHBpbjsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMgKD09ICNwaW5zKToKKwkgKi8KKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdID0gcmVnXzAxLmJpdHMuZW50cmllcysxOworCX0KKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10gPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpICoKKwkJCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKKwkJCWdvdG8gbm9tZW07CisJfQorCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkJCWVudHJ5ID0gZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXSA9CisJCQkJaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKKwkJCWlmICghZW50cnkubWFzaykgeworCQkJCWVudHJ5Lm1hc2sgPSAxOworCQkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CisKK25vbWVtOgorCXdoaWxlIChhcGljID49IDApCisJCWtmcmVlKGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWMtLV0pOworCW1lbXNldChlYXJseV9pb2FwaWNfZW50cmllcywgMCwKKwkJQVJSQVlfU0laRShlYXJseV9pb2FwaWNfZW50cmllcykpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgcmVzdG9yZV9JT19BUElDX3NldHVwKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbjsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKKwkJCWJyZWFrOworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQorCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwKKwkJCQkJICAgZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXSk7CisJCWtmcmVlKGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdKTsKKwkJZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10gPSBOVUxMOworCX0KK30KKwordm9pZCByZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKGludCBpbnRyX3JlbWFwcGluZykKK3sKKwkvKgorCSAqIGZvciBub3cgcGxhaW4gcmVzdG9yZSBvZiBwcmV2aW91cyBzZXR0aW5ncy4KKwkgKiBUQkQ6IEluIHRoZSBjYXNlIG9mIE9TIGVuYWJsaW5nIGludGVycnVwdC1yZW1hcHBpbmcsCisJICogSU8tQVBJQyBSVEUncyBuZWVkIHRvIGJlIHNldHVwIHRvIHBvaW50IHRvIGludGVycnVwdC1yZW1hcHBpbmcKKwkgKiB0YWJsZSBlbnRyaWVzLiBmb3Igbm93LCBkbyBhIHBsYWluIHJlc3RvcmUsIGFuZCB3YWl0IGZvcgorCSAqIHRoZSBzZXR1cF9JT19BUElDX2lycXMoKSB0byBkbyBwcm9wZXIgaW5pdGlhbGl6YXRpb24uCisJICovCisJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7Cit9CisjZW5kaWYKKworLyoKKyAqIEZpbmQgdGhlIElSUSBlbnRyeSBudW1iZXIgb2YgYSBjZXJ0YWluIHBpbi4KKyAqLworc3RhdGljIGludCBmaW5kX2lycV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgaW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKKwkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlICYmCisJCSAgICAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkIHx8CisJCSAgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKSAmJgorCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RpcnEgPT0gcGluKQorCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBwaW4gdG8gd2hpY2ggSVJRW2lycV0gKElTQSkgaXMgY29ubmVjdGVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9waW4oaW50IGlycSwgaW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgeworCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOworCisJCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQorCisJCQlyZXR1cm4gbXBfaXJxc1tpXS5tcF9kc3RpcnE7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX2luaXQgZmluZF9pc2FfaXJxX2FwaWMoaW50IGlycSwgaW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgeworCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOworCisJCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQorCQkJYnJlYWs7CisJfQorCWlmIChpIDwgbXBfaXJxX2VudHJpZXMpIHsKKwkJaW50IGFwaWM7CisJCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYykKKwkJCQlyZXR1cm4gYXBpYzsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIEZpbmQgYSBzcGVjaWZpYyBQQ0kgSVJRIGVudHJ5LgorICogTm90IGFuIF9faW5pdCwgcG9zc2libHkgbmVlZGVkIGJ5IG1vZHVsZXMKKyAqLworc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pOworCitpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBwaW4pCit7CisJaW50IGFwaWMsIGksIGJlc3RfZ3Vlc3MgPSAtMTsKKworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJxdWVyeWluZyBQQ0kgLT4gSVJRIG1hcHBpbmcgYnVzOiVkLCBzbG90OiVkLCBwaW46JWQuXG4iLAorCQlidXMsIHNsb3QsIHBpbik7CisJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlBDSSBCSU9TIHBhc3NlZCBub25leGlzdGVudCBQQ0kgYnVzICVkIVxuIiwgYnVzKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgeworCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOworCisJCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCisJCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPT0gbXBfaXJxc1tpXS5tcF9kc3RhcGljIHx8CisJCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKQorCQkJCWJyZWFrOworCisJCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCisJCSAgICAhbXBfaXJxc1tpXS5tcF9pcnF0eXBlICYmCisJCSAgICAoYnVzID09IGxidXMpICYmCisJCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7CisJCQlpbnQgaXJxID0gcGluXzJfaXJxKGksYXBpYyxtcF9pcnFzW2ldLm1wX2RzdGlycSk7CisKKwkJCWlmICghKGFwaWMgfHwgSU9fQVBJQ19JUlEoaXJxKSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwaW4gPT0gKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxICYgMykpCisJCQkJcmV0dXJuIGlycTsKKwkJCS8qCisJCQkgKiBVc2UgdGhlIGZpcnN0IGFsbC1idXQtcGluIG1hdGNoaW5nIGVudHJ5IGFzIGEKKwkJCSAqIGJlc3QtZ3Vlc3MgZnV6enkgcmVzdWx0IGZvciBicm9rZW4gbXB0YWJsZXMuCisJCQkgKi8KKwkJCWlmIChiZXN0X2d1ZXNzIDwgMCkKKwkJCQliZXN0X2d1ZXNzID0gaXJxOworCQl9CisJfQorCXJldHVybiBiZXN0X2d1ZXNzOworfQorCitFWFBPUlRfU1lNQk9MKElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKKy8qCisgKiBFSVNBIEVkZ2UvTGV2ZWwgY29udHJvbCByZWdpc3RlciwgRUxDUgorICovCitzdGF0aWMgaW50IEVJU0FfRUxDUih1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChpcnEgPCAxNikgeworCQl1bnNpZ25lZCBpbnQgcG9ydCA9IDB4NGQwICsgKGlycSA+PiAzKTsKKwkJcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7CisJfQorCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCisJCQkiQnJva2VuIE1QdGFibGUgcmVwb3J0cyBJU0EgaXJxICVkXG4iLCBpcnEpOworCXJldHVybiAwOworfQorCisjZW5kaWYKKworLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVkLAorICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCisKKyNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpCSgwKQorI2RlZmluZSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCSgwKQorCisvKiBFSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGFuZCBjYW4gYmUgZWRnZSBvciBsZXZlbAorICogdHJpZ2dlciBkZXBlbmRpbmcgb24gdGhlIEVMQ1IgdmFsdWUuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbGlzdGVkIGFzCisgKiBFSVNBIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLCB0aGF0IG1lYW5zIGl0cyB0cmlnZ2VyIHR5cGUgbXVzdAorICogYmUgcmVhZCBpbiBmcm9tIHRoZSBFTENSICovCisKKyNkZWZpbmUgZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KQkoRUlTQV9FTENSKG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnEpKQorI2RlZmluZSBkZWZhdWx0X0VJU0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKKy8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKKyNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKKworLyogTUNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGxldmVsIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KQkoMSkKKyNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKK3N0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCit7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7CisJaW50IHBvbGFyaXR5OworCisJLyoKKwkgKiBEZXRlcm1pbmUgSVJRIGxpbmUgcG9sYXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpOgorCSAqLworCXN3aXRjaCAobXBfaXJxc1tpZHhdLm1wX2lycWZsYWcgJiAzKQorCXsKKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCBwb2xhcml0eSAqLworCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQorCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KTsKKwkJCWVsc2UKKwkJCQlwb2xhcml0eSA9IGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCk7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiBoaWdoIGFjdGl2ZSAqLworCQl7CisJCQlwb2xhcml0eSA9IDA7CisJCQlicmVhazsKKwkJfQorCQljYXNlIDI6IC8qIHJlc2VydmVkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJcG9sYXJpdHkgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAzOiAvKiBsb3cgYWN0aXZlICovCisJCXsKKwkJCXBvbGFyaXR5ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6IC8qIGludmFsaWQgKi8KKwkJeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7CisJCQlwb2xhcml0eSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcG9sYXJpdHk7Cit9CisKK3N0YXRpYyBpbnQgTVBCSU9TX3RyaWdnZXIoaW50IGlkeCkKK3sKKwlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKKwlpbnQgdHJpZ2dlcjsKKworCS8qCisJICogRGV0ZXJtaW5lIElSUSB0cmlnZ2VyIG1vZGUgKGVkZ2Ugb3IgbGV2ZWwgc2Vuc2l0aXZlKToKKwkgKi8KKwlzd2l0Y2ggKChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZz4+MikgJiAzKQorCXsKKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCAqLworCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQorCQkJCXRyaWdnZXIgPSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCk7CisJCQllbHNlCisJCQkJdHJpZ2dlciA9IGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KTsKKyNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCisJCQlzd2l0Y2ggKG1wX2J1c19pZF90b190eXBlW2J1c10pIHsKKwkJCQljYXNlIE1QX0JVU19JU0E6IC8qIElTQSBwaW4gKi8KKwkJCQl7CisJCQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBNUF9CVVNfRUlTQTogLyogRUlTQSBwaW4gKi8KKwkJCQl7CisJCQkJCXRyaWdnZXIgPSBkZWZhdWx0X0VJU0FfdHJpZ2dlcihpZHgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBNUF9CVVNfUENJOiAvKiBQQ0kgcGluICovCisJCQkJeworCQkJCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNhc2UgTVBfQlVTX01DQTogLyogTUNBIHBpbiAqLworCQkJCXsKKwkJCQkJdHJpZ2dlciA9IGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKKwkJCQkJdHJpZ2dlciA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgMTogLyogZWRnZSAqLworCQl7CisJCQl0cmlnZ2VyID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KKwkJeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7CisJCQl0cmlnZ2VyID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMzogLyogbGV2ZWwgKi8KKwkJeworCQkJdHJpZ2dlciA9IDE7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJdHJpZ2dlciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gdHJpZ2dlcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3BvbGFyaXR5KGludCBpZHgpCit7CisJcmV0dXJuIE1QQklPU19wb2xhcml0eShpZHgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdHJpZ2dlcihpbnQgaWR4KQoreworCXJldHVybiBNUEJJT1NfdHJpZ2dlcihpZHgpOworfQorCitpbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKK3N0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKQoreworCWludCBpcnEsIGk7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7CisKKwkvKgorCSAqIERlYnVnZ2luZyBjaGVjaywgd2UgYXJlIGluIGJpZyB0cm91YmxlIGlmIHRoaXMgbWVzc2FnZSBwb3BzIHVwIQorCSAqLworCWlmIChtcF9pcnFzW2lkeF0ubXBfZHN0aXJxICE9IHBpbikKKwkJcHJpbnRrKEtFUk5fRVJSICJicm9rZW4gQklPUyBvciBNUFRBQkxFIHBhcnNlciwgYXlpZWUhIVxuIik7CisKKwlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpIHsKKwkJaXJxID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1c2lycTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQQ0kgSVJRcyBhcmUgbWFwcGVkIGluIG9yZGVyCisJCSAqLworCQlpID0gaXJxID0gMDsKKwkJd2hpbGUgKGkgPCBhcGljKQorCQkJaXJxICs9IG5yX2lvYXBpY19yZWdpc3RlcnNbaSsrXTsKKwkJaXJxICs9IHBpbjsKKwkJLyoKKyAgICAgICAgICAgICAgICAgKiBGb3IgTVBTIG1vZGUsIHNvIGZhciBvbmx5IG5lZWRlZCBieSBFUzcwMDAgcGxhdGZvcm0KKyAgICAgICAgICAgICAgICAgKi8KKwkJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCisJCQlpcnEgPSBpb2FwaWNfcmVudW1iZXJfaXJxKGFwaWMsIGlycSk7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogUENJIElSUSBjb21tYW5kIGxpbmUgcmVkaXJlY3Rpb24uIFllcywgbGltaXRzIGFyZSBoYXJkY29kZWQuCisJICovCisJaWYgKChwaW4gPj0gMTYpICYmIChwaW4gPD0gMjMpKSB7CisJCWlmIChwaXJxX2VudHJpZXNbcGluLTE2XSAhPSAtMSkgeworCQkJaWYgKCFwaXJxX2VudHJpZXNbcGluLTE2XSkgeworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJImRpc2FibGluZyBQSVJRJWRcbiIsIHBpbi0xNik7CisJCQl9IGVsc2UgeworCQkJCWlycSA9IHBpcnFfZW50cmllc1twaW4tMTZdOworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJInVzaW5nIFBJUlElZCAtPiBJUlEgJWRcbiIsCisJCQkJCQlwaW4tMTYsIGlycSk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiBpcnE7Cit9CisKK3ZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKQoreworCS8qIFVzZWQgdG8gdGhlIG9ubGluZSBzZXQgb2YgY3B1cyBkb2VzIG5vdCBjaGFuZ2UKKwkgKiBkdXJpbmcgYXNzaWduX2lycV92ZWN0b3IuCisJICovCisJc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7Cit9CisKK3ZvaWQgdW5sb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCit7CisJc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKK30KKworc3RhdGljIGludCBfX2Fzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCS8qCisJICogTk9URSEgVGhlIGxvY2FsIEFQSUMgaXNuJ3QgdmVyeSBnb29kIGF0IGhhbmRsaW5nCisJICogbXVsdGlwbGUgaW50ZXJydXB0cyBhdCB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCisJICogQXMgdGhlIGludGVycnVwdCBsZXZlbCBpcyBkZXRlcm1pbmVkIGJ5IHRha2luZyB0aGUKKwkgKiB2ZWN0b3IgbnVtYmVyIGFuZCBzaGlmdGluZyB0aGF0IHJpZ2h0IGJ5IDQsIHdlCisJICogd2FudCB0byBzcHJlYWQgdGhlc2Ugb3V0IGEgYml0IHNvIHRoYXQgdGhleSBkb24ndAorCSAqIGFsbCBmYWxsIGluIHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KKwkgKgorCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCisJICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCisJICovCisJc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IsIGN1cnJlbnRfb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBpbnQgb2xkX3ZlY3RvcjsKKwlpbnQgY3B1OworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisKKwkvKiBPbmx5IHRyeSBhbmQgYWxsb2NhdGUgaXJxcyBvbiBjcHVzIHRoYXQgYXJlIHByZXNlbnQgKi8KKwljcHVzX2FuZChtYXNrLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisKKwlpZiAoKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykgfHwgY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCisJCXJldHVybiAtRUJVU1k7CisKKwlvbGRfdmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJaWYgKG9sZF92ZWN0b3IpIHsKKwkJY3B1bWFza190IHRtcDsKKwkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJCWlmICghY3B1c19lbXB0eSh0bXApKQorCQkJcmV0dXJuIDA7CisJfQorCisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBtYXNrKSB7CisJCWNwdW1hc2tfdCBkb21haW4sIG5ld19tYXNrOworCQlpbnQgbmV3X2NwdTsKKwkJaW50IHZlY3Rvciwgb2Zmc2V0OworCisJCWRvbWFpbiA9IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUpOworCQljcHVzX2FuZChuZXdfbWFzaywgZG9tYWluLCBjcHVfb25saW5lX21hcCk7CisKKwkJdmVjdG9yID0gY3VycmVudF92ZWN0b3I7CisJCW9mZnNldCA9IGN1cnJlbnRfb2Zmc2V0OworbmV4dDoKKwkJdmVjdG9yICs9IDg7CisJCWlmICh2ZWN0b3IgPj0gZmlyc3Rfc3lzdGVtX3ZlY3RvcikgeworCQkJLyogSWYgd2UgcnVuIG91dCBvZiB2ZWN0b3JzIG9uIGxhcmdlIGJveGVuLCBtdXN0IHNoYXJlIHRoZW0uICovCisJCQlvZmZzZXQgPSAob2Zmc2V0ICsgMSkgJSA4OworCQkJdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKKwkJfQorCQlpZiAodW5saWtlbHkoY3VycmVudF92ZWN0b3IgPT0gdmVjdG9yKSkKKwkJCWNvbnRpbnVlOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJaWYgKHZlY3RvciA9PSBJQTMyX1NZU0NBTExfVkVDVE9SKQorCQkJZ290byBuZXh0OworI2Vsc2UKKwkJaWYgKHZlY3RvciA9PSBTWVNDQUxMX1ZFQ1RPUikKKwkJCWdvdG8gbmV4dDsKKyNlbmRpZgorCQlmb3JfZWFjaF9jcHVfbWFza19ucihuZXdfY3B1LCBuZXdfbWFzaykKKwkJCWlmIChwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0gIT0gLTEpCisJCQkJZ290byBuZXh0OworCQkvKiBGb3VuZCBvbmUhICovCisJCWN1cnJlbnRfdmVjdG9yID0gdmVjdG9yOworCQljdXJyZW50X29mZnNldCA9IG9mZnNldDsKKwkJaWYgKG9sZF92ZWN0b3IpIHsKKwkJCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDE7CisJCQljZmctPm9sZF9kb21haW4gPSBjZmctPmRvbWFpbjsKKwkJfQorCQlmb3JfZWFjaF9jcHVfbWFza19ucihuZXdfY3B1LCBuZXdfbWFzaykKKwkJCXBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSA9IGlycTsKKwkJY2ZnLT52ZWN0b3IgPSB2ZWN0b3I7CisJCWNmZy0+ZG9tYWluID0gZG9tYWluOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FTk9TUEM7Cit9CisKK3N0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJZXJyID0gX19hc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19jbGVhcl9pcnFfdmVjdG9yKGludCBpcnEpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwljcHVtYXNrX3QgbWFzazsKKwlpbnQgY3B1LCB2ZWN0b3I7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJQlVHX09OKCFjZmctPnZlY3Rvcik7CisKKwl2ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwljcHVzX2FuZChtYXNrLCBjZmctPmRvbWFpbiwgY3B1X29ubGluZV9tYXApOworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKKworCWNmZy0+dmVjdG9yID0gMDsKKwljcHVzX2NsZWFyKGNmZy0+ZG9tYWluKTsKK30KKwordm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkKK3sKKwkvKiBJbml0aWFsaXplIHZlY3Rvcl9pcnEgb24gYSBuZXcgY3B1ICovCisJLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZlY3Rvcl9sb2NrIGhlbGQgKi8KKwlpbnQgaXJxLCB2ZWN0b3I7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKworCS8qIE1hcmsgdGhlIGludXNlIHZlY3RvcnMgKi8KKwlmb3JfZWFjaF9pcnFfY2ZnKGlycSwgY2ZnKSB7CisJCWlmICghY3B1X2lzc2V0KGNwdSwgY2ZnLT5kb21haW4pKQorCQkJY29udGludWU7CisJCXZlY3RvciA9IGNmZy0+dmVjdG9yOworCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IGlycTsKKwl9CisJLyogTWFyayB0aGUgZnJlZSB2ZWN0b3JzICovCisJZm9yICh2ZWN0b3IgPSAwOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyArK3ZlY3RvcikgeworCQlpcnEgPSBwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXTsKKwkJaWYgKGlycSA8IDApCisJCQljb250aW51ZTsKKworCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCWlmICghY3B1X2lzc2V0KGNwdSwgY2ZnLT5kb21haW4pKQorCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXA7CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXA7CisjZW5kaWYKKworI2RlZmluZSBJT0FQSUNfQVVUTyAgICAgLTEKKyNkZWZpbmUgSU9BUElDX0VER0UgICAgIDAKKyNkZWZpbmUgSU9BUElDX0xFVkVMICAgIDEKKworI2lmZGVmIENPTkZJR19YODZfMzIKK3N0YXRpYyBpbmxpbmUgaW50IElPX0FQSUNfaXJxX3RyaWdnZXIoaW50IGlycSkKK3sKKwlpbnQgYXBpYywgaWR4LCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKwkJCWlkeCA9IGZpbmRfaXJxX2VudHJ5KGFwaWMsIHBpbiwgbXBfSU5UKTsKKwkJCWlmICgoaWR4ICE9IC0xKSAmJiAoaXJxID09IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbikpKQorCQkJCXJldHVybiBpcnFfdHJpZ2dlcihpZHgpOworCQl9CisJfQorCS8qCisgICAgICAgICAqIG5vbmV4aXN0ZW50IElSUXMgYXJlIGVkZ2UgZGVmYXVsdAorICAgICAgICAgKi8KKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaW9hcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKKwkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJZWxzZQorCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7CisJCWlmICh0cmlnZ2VyKQorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaXJfaW9hcGljX2NoaXAsCisJCQkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsCisJCQkJCQkgICAgICJmYXN0ZW9pIik7CisJCWVsc2UKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlyX2lvYXBpY19jaGlwLAorCQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKKwkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAorCQkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsCisJCQkJCSAgICAgICJmYXN0ZW9pIik7CisJZWxzZQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworfQorCitzdGF0aWMgaW50IHNldHVwX2lvYXBpY19lbnRyeShpbnQgYXBpYywgaW50IGlycSwKKwkJCSAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbiwgaW50IHRyaWdnZXIsCisJCQkgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IpCit7CisJLyoKKwkgKiBhZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CisJICovCisJbWVtc2V0KGVudHJ5LDAsc2l6ZW9mKCplbnRyeSkpOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkgeworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gbWFwX2lvYXBpY190b19pcihhcGljKTsKKwkJc3RydWN0IGlydGUgaXJ0ZTsKKwkJc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKmlyX2VudHJ5ID0KKwkJCShzdHJ1Y3QgSVJfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSBlbnRyeTsKKwkJaW50IGluZGV4OworCisJCWlmICghaW9tbXUpCisJCQlwYW5pYygiTm8gbWFwcGluZyBpb21tdSBmb3IgaW9hcGljICVkXG4iLCBhcGljKTsKKworCQlpbmRleCA9IGFsbG9jX2lydGUoaW9tbXUsIGlycSwgMSk7CisJCWlmIChpbmRleCA8IDApCisJCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlIElSVEUgZm9yIGlvYXBpYyAlZFxuIiwgYXBpYyk7CisKKwkJbWVtc2V0KCZpcnRlLCAwLCBzaXplb2YoaXJ0ZSkpOworCisJCWlydGUucHJlc2VudCA9IDE7CisJCWlydGUuZHN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCQlpcnRlLnRyaWdnZXJfbW9kZSA9IHRyaWdnZXI7CisJCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCQlpcnRlLnZlY3RvciA9IHZlY3RvcjsKKwkJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3RpbmF0aW9uKTsKKworCQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKKworCQlpcl9lbnRyeS0+aW5kZXgyID0gKGluZGV4ID4+IDE1KSAmIDB4MTsKKwkJaXJfZW50cnktPnplcm8gPSAwOworCQlpcl9lbnRyeS0+Zm9ybWF0ID0gMTsKKwkJaXJfZW50cnktPmluZGV4ID0gKGluZGV4ICYgMHg3ZmZmKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJZW50cnktPmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKKwkJZW50cnktPmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7CisJCWVudHJ5LT5kZXN0ID0gZGVzdGluYXRpb247CisJfQorCisJZW50cnktPm1hc2sgPSAwOwkJCQkvKiBlbmFibGUgSVJRICovCisJZW50cnktPnRyaWdnZXIgPSB0cmlnZ2VyOworCWVudHJ5LT5wb2xhcml0eSA9IHBvbGFyaXR5OworCWVudHJ5LT52ZWN0b3IgPSB2ZWN0b3I7CisKKwkvKiBNYXNrIGxldmVsIHRyaWdnZXJlZCBpcnFzLgorCSAqIFVzZSBJUlFfREVMQVlFRF9ESVNBQkxFIGZvciBlZGdlIHRyaWdnZXJlZCBpcnFzLgorCSAqLworCWlmICh0cmlnZ2VyKQorCQllbnRyeS0+bWFzayA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX0lPX0FQSUNfaXJxKGludCBhcGljLCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgaXJxLAorCQkJICAgICAgaW50IHRyaWdnZXIsIGludCBwb2xhcml0eSkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCWNwdW1hc2tfdCBtYXNrOworCisJaWYgKCFJT19BUElDX0lSUShpcnEpKQorCQlyZXR1cm47CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisKKwltYXNrID0gVEFSR0VUX0NQVVM7CisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJCXJldHVybjsKKworCWNwdXNfYW5kKG1hc2ssIGNmZy0+ZG9tYWluLCBtYXNrKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSxLRVJOX0RFQlVHCisJCSAgICAiSU9BUElDWyVkXTogU2V0IHJvdXRpbmcgZW50cnkgKCVkLSVkIC0+IDB4JXggLT4gIgorCQkgICAgIklSUSAlZCBNb2RlOiVpIEFjdGl2ZTolaSlcbiIsCisJCSAgICBhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluLCBjZmctPnZlY3RvciwKKwkJICAgIGlycSwgdHJpZ2dlciwgcG9sYXJpdHkpOworCisKKwlpZiAoc2V0dXBfaW9hcGljX2VudHJ5KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBpcnEsICZlbnRyeSwKKwkJCSAgICAgICBjcHVfbWFza190b19hcGljaWQobWFzayksIHRyaWdnZXIsIHBvbGFyaXR5LAorCQkJICAgICAgIGNmZy0+dmVjdG9yKSkgeworCQlwcmludGsoIkZhaWxlZCB0byBzZXR1cCBpb2FwaWMgZW50cnkgZm9yIGlvYXBpYyAgJWQsIHBpbiAlZFxuIiwKKwkJICAgICAgIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4pOworCQlfX2NsZWFyX2lycV92ZWN0b3IoaXJxKTsKKwkJcmV0dXJuOworCX0KKworCWlvYXBpY19yZWdpc3Rlcl9pbnRyKGlycSwgdHJpZ2dlcik7CisJaWYgKGlycSA8IDE2KQorCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOworCisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbiwgaWR4LCBpcnE7CisJaW50IG5vdGNvbiA9IDA7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcgImluaXQgSU9fQVBJQyBJUlFzXG4iKTsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7CisJCQlpZiAoaWR4ID09IC0xKSB7CisJCQkJaWYgKCFub3Rjb24pIHsKKwkJCQkJbm90Y29uID0gMTsKKwkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJCQkJS0VSTl9ERUJVRyAiICVkLSVkIiwKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAorCQkJCQkJcGluKTsKKwkJCQl9IGVsc2UKKwkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiICVkLSVkIiwKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAorCQkJCQkJcGluKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChub3Rjb24pIHsKKwkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCisJCQkJCSIgKGFwaWNpZC1waW4pIG5vdCBjb25uZWN0ZWRcbiIpOworCQkJCW5vdGNvbiA9IDA7CisJCQl9CisKKwkJCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbik7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQkJaWYgKG11bHRpX3RpbWVyX2NoZWNrKGFwaWMsIGlycSkpCisJCQkJY29udGludWU7CisjZW5kaWYKKwkJCWFkZF9waW5fdG9faXJxKGlycSwgYXBpYywgcGluKTsKKworCQkJc2V0dXBfSU9fQVBJQ19pcnEoYXBpYywgcGluLCBpcnEsCisJCQkJCWlycV90cmlnZ2VyKGlkeCksIGlycV9wb2xhcml0eShpZHgpKTsKKwkJfQorCX0KKworCWlmIChub3Rjb24pCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwKKwkJCSIgKGFwaWNpZC1waW4pIG5vdCBjb25uZWN0ZWRcbiIpOworfQorCisvKgorICogU2V0IHVwIHRoZSB0aW1lciBwaW4sIHBvc3NpYmx5IHdpdGggdGhlIDgyNTlBLW1hc3RlciBiZWhpbmQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF90aW1lcl9JUlEwX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbiwKKwkJCQkJaW50IHZlY3RvcikKK3sKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCXJldHVybjsKKyNlbmRpZgorCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CisKKwkvKgorCSAqIFdlIHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IHRvIGdldCB0aGUgdGltZXIgSVJRCisJICogdG8gdGhlIGZpcnN0IENQVS4KKwkgKi8KKwllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCWVudHJ5Lm1hc2sgPSAxOwkJCQkJLyogbWFzayBJUlEgbm93ICovCisJZW50cnkuZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7CisJZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCWVudHJ5LnBvbGFyaXR5ID0gMDsKKwllbnRyeS50cmlnZ2VyID0gMDsKKwllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7CisKKwkvKgorCSAqIFRoZSB0aW1lciBJUlEgZG9lc24ndCBoYXZlIHRvIGtub3cgdGhhdCBiZWhpbmQgdGhlCisJICogc2NlbmUgd2UgbWF5IGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgorCSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKDAsICZpb2FwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJLyoKKwkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CisJICovCisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOworfQorCisKK19fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9JT19BUElDKHZvaWQpCit7CisJaW50IGFwaWMsIGk7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKKwl1bmlvbiBJT19BUElDX3JlZ18wMiByZWdfMDI7CisJdW5pb24gSU9fQVBJQ19yZWdfMDMgcmVnXzAzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgTVAgSVJRIHNvdXJjZXM6ICVkLlxuIiwgbXBfaXJxX2VudHJpZXMpOworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspCisJCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgSU8tQVBJQyAjJWQgcmVnaXN0ZXJzOiAlZC5cbiIsCisJCSAgICAgICBtcF9pb2FwaWNzW2ldLm1wX2FwaWNpZCwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXSk7CisKKwkvKgorCSAqIFdlIGFyZSBhIGJpdCBjb25zZXJ2YXRpdmUgYWJvdXQgd2hhdCB3ZSBleHBlY3QuICBXZSBoYXZlIHRvCisJICoga25vdyBhYm91dCBldmVyeSBoYXJkd2FyZSBjaGFuZ2UgQVNBUC4KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJ0ZXN0aW5nIHRoZSBJTyBBUElDLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiIpOworCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKKwlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOworCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTApCisJCXJlZ18wMi5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMik7CisJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCkKKwkJcmVnXzAzLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcHJpbnRrKCJcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJJTyBBUElDICMlZC4uLi4uLlxuIiwgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMDogJTA4WFxuIiwgcmVnXzAwLnJhdyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBwaHlzaWNhbCBBUElDIGlkOiAlMDJYXG4iLCByZWdfMDAuYml0cy5JRCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBEZWxpdmVyeSBUeXBlOiAlWFxuIiwgcmVnXzAwLmJpdHMuZGVsaXZlcnlfdHlwZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBMVFMgICAgICAgICAgOiAlWFxuIiwgcmVnXzAwLmJpdHMuTFRTKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMTogJTA4WFxuIiwgKihpbnQgKikmcmVnXzAxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBtYXggcmVkaXJlY3Rpb24gZW50cmllczogJTA0WFxuIiwgcmVnXzAxLmJpdHMuZW50cmllcyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBQUlEgaW1wbGVtZW50ZWQ6ICVYXG4iLCByZWdfMDEuYml0cy5QUlEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IElPIEFQSUMgdmVyc2lvbjogJTA0WFxuIiwgcmVnXzAxLmJpdHMudmVyc2lvbik7CisKKwkvKgorCSAqIFNvbWUgSW50ZWwgY2hpcHNldHMgd2l0aCBJTyBBUElDIFZFUlNJT04gb2YgMHgxPyBkb24ndCBoYXZlIHJlZ18wMiwKKwkgKiBidXQgdGhlIHZhbHVlIG9mIHJlZ18wMiBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkIHJlZ2lzdGVyCisJICogdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDIgPT0gcmVnXzAxLgorCSAqLworCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTAgJiYgcmVnXzAyLnJhdyAhPSByZWdfMDEucmF3KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMjogJTA4WFxuIiwgcmVnXzAyLnJhdyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IGFyYml0cmF0aW9uOiAlMDJYXG4iLCByZWdfMDIuYml0cy5hcmJpdHJhdGlvbik7CisJfQorCisJLyoKKwkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4Mj8gZG9uJ3QgaGF2ZSByZWdfMDIKKwkgKiBvciByZWdfMDMsIGJ1dCB0aGUgdmFsdWUgb2YgcmVnXzBbMjNdIGlzIHJlYWQgYXMgdGhlIHByZXZpb3VzIHJlYWQKKwkgKiByZWdpc3RlciB2YWx1ZSwgc28gaWdub3JlIGl0IGlmIHJlZ18wMyA9PSByZWdfMFsxMl0uCisJICovCisJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCAmJiByZWdfMDMucmF3ICE9IHJlZ18wMi5yYXcgJiYKKwkgICAgcmVnXzAzLnJhdyAhPSByZWdfMDEucmF3KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMzogJTA4WFxuIiwgcmVnXzAzLnJhdyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IEJvb3QgRFQgICAgOiAlWFxuIiwgcmVnXzAzLmJpdHMuYm9vdF9EVCk7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiIE5SIERzdCBNYXNrIFRyaWcgSVJSIFBvbCIKKwkJCSAgIiBTdGF0IERtb2QgRGVsaSBWZWN0OiAgIFxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IHJlZ18wMS5iaXRzLmVudHJpZXM7IGkrKykgeworCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIGkpOworCisJCXByaW50ayhLRVJOX0RFQlVHICIgJTAyeCAlMDNYICIsCisJCQlpLAorCQkJZW50cnkuZGVzdAorCQkpOworCisJCXByaW50aygiJTFkICAgICUxZCAgICAlMWQgICAlMWQgICAlMWQgICAgJTFkICAgICUxZCAgICAlMDJYXG4iLAorCQkJZW50cnkubWFzaywKKwkJCWVudHJ5LnRyaWdnZXIsCisJCQllbnRyeS5pcnIsCisJCQllbnRyeS5wb2xhcml0eSwKKwkJCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cywKKwkJCWVudHJ5LmRlc3RfbW9kZSwKKwkJCWVudHJ5LmRlbGl2ZXJ5X21vZGUsCisJCQllbnRyeS52ZWN0b3IKKwkJKTsKKwl9CisJfQorCXByaW50ayhLRVJOX0RFQlVHICJJUlEgdG8gcGluIG1hcHBpbmdzOlxuIik7CisJZm9yX2VhY2hfaXJxX2NmZyhpcnEsIGNmZykgeworCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCQlpZiAoIWVudHJ5KQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJJUlElZCAiLCBpcnEpOworCQlmb3IgKDs7KSB7CisJCQlwcmludGsoIi0+ICVkOiVkIiwgZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOworCQkJaWYgKCFlbnRyeS0+bmV4dCkKKwkJCQlicmVhazsKKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBkb25lLlxuIik7CisKKwlyZXR1cm47Cit9CisKK19fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9BUElDX2JpdGZpZWxkKGludCBiYXNlKQoreworCXVuc2lnbmVkIGludCB2OworCWludCBpLCBqOworCisJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZlxuIiBLRVJOX0RFQlVHKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXYgPSBhcGljX3JlYWQoYmFzZSArIGkqMHgxMCk7CisJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQlpZiAodiAmICgxPDxqKSkKKwkJCQlwcmludGsoIjEiKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoIjAiKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorfQorCitfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfbG9jYWxfQVBJQyh2b2lkICpkdW1teSkKK3sKKwl1bnNpZ25lZCBpbnQgdiwgdmVyLCBtYXhsdnQ7CisJdTY0IGljcjsKKworCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQorCQlyZXR1cm47CisKKwlwcmludGsoIlxuIiBLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCisJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOworCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgSUQ6ICAgICAgJTA4eCAoJTAxeClcbiIsIHYsIHJlYWRfYXBpY19pZCgpKTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBWRVJTSU9OOiAlMDh4XG4iLCB2KTsKKwl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHYpOworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVEFTS1BSSTogJTA4eCAoJTAyeClcbiIsIHYsIHYgJiBBUElDX1RQUklfTUFTSyk7CisKKwlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsgICAgICAgICAgICAgICAgICAgICAvKiAhODI0ODlEWCAqLworCQlpZiAoIUFQSUNfWEFQSUModmVyKSkgeworCQkJdiA9IGFwaWNfcmVhZChBUElDX0FSQlBSSSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKKwkJCSAgICAgICB2ICYgQVBJQ19BUkJQUklfTUFTSyk7CisJCX0KKwkJdiA9IGFwaWNfcmVhZChBUElDX1BST0NQUkkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7CisJfQorCisJLyoKKwkgKiBSZW1vdGUgcmVhZCBzdXBwb3J0ZWQgb25seSBpbiB0aGUgODI0ODlEWCBhbmQgbG9jYWwgQVBJQyBmb3IKKwkgKiBQZW50aXVtIHByb2Nlc3NvcnMuCisJICovCisJaWYgKCFBUElDX0lOVEVHUkFURUQodmVyKSB8fCBtYXhsdnQgPT0gMykgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfUlJSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7CisJfQorCisJdiA9IGFwaWNfcmVhZChBUElDX0xEUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExEUjogJTA4eFxuIiwgdik7CisJaWYgKCF4MmFwaWNfZW5hYmxlZCgpKSB7CisJCXYgPSBhcGljX3JlYWQoQVBJQ19ERlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgREZSOiAlMDh4XG4iLCB2KTsKKwl9CisJdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBTUElWOiAlMDh4XG4iLCB2KTsKKworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJU1IgZmllbGQ6XG4iKTsKKwlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVNSKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1SIGZpZWxkOlxuIik7CisJcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX1RNUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElSUiBmaWVsZDpcbiIpOworCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JUlIpOworCisJaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7ICAgICAgICAgICAgIC8qICE4MjQ4OURYICovCisJCWlmIChtYXhsdnQgPiAzKSAgICAgICAgIC8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KKwkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCisJCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRVNSOiAlMDh4XG4iLCB2KTsKKwl9CisKKwlpY3IgPSBhcGljX2ljcl9yZWFkKCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjogJTA4eFxuIiwgKHUzMilpY3IpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1IyOiAlMDh4XG4iLCAodTMyKShpY3IgPj4gMzIpKTsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUVDogJTA4eFxuIiwgdik7CisKKwlpZiAobWF4bHZ0ID4gMykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgaXMgTFZUIzQuICovCisJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRQQzogJTA4eFxuIiwgdik7CisJfQorCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMDogJTA4eFxuIiwgdik7CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQxOiAlMDh4XG4iLCB2KTsKKworCWlmIChtYXhsdnQgPiAyKSB7CQkJLyogRVJSIGlzIExWVCMzLiAqLworCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVEVSUjogJTA4eFxuIiwgdik7CisJfQorCisJdiA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1JQ1Q6ICUwOHhcbiIsIHYpOworCXYgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNQ0NUOiAlMDh4XG4iLCB2KTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfVERDUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFREQ1I6ICUwOHhcbiIsIHYpOworCXByaW50aygiXG4iKTsKK30KKworX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2FsbF9sb2NhbF9BUElDcyh2b2lkKQoreworCWludCBjcHU7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgcHJpbnRfbG9jYWxfQVBJQywgTlVMTCwgMSk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X1BJQyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlxucHJpbnRpbmcgUElDIGNvbnRlbnRzXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCisJdiA9IGluYigweGExKSA8PCA4IHwgaW5iKDB4MjEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJTVI6ICUwNHhcbiIsIHYpOworCisJdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJUlI6ICUwNHhcbiIsIHYpOworCisJb3V0YigweDBiLDB4YTApOworCW91dGIoMHgwYiwweDIwKTsKKwl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7CisJb3V0YigweDBhLDB4YTApOworCW91dGIoMHgwYSwweDIwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVNSOiAlMDR4XG4iLCB2KTsKKworCXYgPSBpbmIoMHg0ZDEpIDw8IDggfCBpbmIoMHg0ZDApOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDIEVMQ1I6ICUwNHhcbiIsIHYpOworfQorCitfX2FwaWNkZWJ1Z2luaXQoaW50KSBwcmludF9hbGxfSUNzKHZvaWQpCit7CisJcHJpbnRfUElDKCk7CisJcHJpbnRfYWxsX2xvY2FsX0FQSUNzKCk7CisJcHJpbnRfSU9fQVBJQygpOworCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKHByaW50X2FsbF9JQ3MpOworCisKKy8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCitzdGF0aWMgc3RydWN0IHsgaW50IHBpbiwgYXBpYzsgfSBpb2FwaWNfaTgyNTkgPSB7IC0xLCAtMSB9OworCit2b2lkIF9faW5pdCBlbmFibGVfSU9fQVBJQyh2b2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKKwlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOworCWludCBhcGljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaW50IGk7CisJaWYgKCFwaXJxc19lbmFibGVkKQorCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCisJCQlwaXJxX2VudHJpZXNbaV0gPSAtMTsKKyNlbmRpZgorCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIElPLUFQSUMgSVJRIHJlZ2lzdGVycyAoPT0gI3BpbnMpOgorCSAqLworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7CisJfQorCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQlpbnQgcGluOworCQkvKiBTZWUgaWYgYW55IG9mIHRoZSBwaW5zIGlzIGluIEV4dElOVCBtb2RlICovCisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKwkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOworCisJCQkvKiBJZiB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZW5hYmxlZCBhbmQgaW4gRXh0SW50IG1vZGUKKwkJCSAqIEkgaGF2ZSBmb3VuZCB0aGUgcGluIHdoZXJlIHRoZSBpODI1OSBpcyBjb25uZWN0ZWQuCisJCQkgKi8KKwkJCWlmICgoZW50cnkubWFzayA9PSAwKSAmJiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X0V4dElOVCkpIHsKKwkJCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGFwaWM7CisJCQkJaW9hcGljX2k4MjU5LnBpbiAgPSBwaW47CisJCQkJZ290byBmb3VuZF9pODI1OTsKKwkJCX0KKwkJfQorCX0KKyBmb3VuZF9pODI1OToKKwkvKiBMb29rIHRvIHNlZSB3aGF0IGlmIHRoZSBNUCB0YWJsZSBoYXMgcmVwb3J0ZWQgdGhlIEV4dElOVCAqLworCS8qIElmIHdlIGNvdWxkIG5vdCBmaW5kIHRoZSBhcHByb3ByaWF0ZSBwaW4gYnkgbG9va2luZyBhdCB0aGUgaW9hcGljCisJICogdGhlIGk4MjU5IHByb2JhYmx5IGlzIG5vdCBjb25uZWN0ZWQgdGhlIGlvYXBpYyBidXQgZ2l2ZSB0aGUKKwkgKiBtcHRhYmxlIGEgY2hhbmNlIGFueXdheS4KKwkgKi8KKwlpODI1OV9waW4gID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9FeHRJTlQpOworCWk4MjU5X2FwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9FeHRJTlQpOworCS8qIFRydXN0IHRoZSBNUCB0YWJsZSBpZiBub3RoaW5nIGlzIHNldHVwIGluIHRoZSBoYXJkd2FyZSAqLworCWlmICgoaW9hcGljX2k4MjU5LnBpbiA9PSAtMSkgJiYgKGk4MjU5X3BpbiA+PSAwKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFeHRJTlQgbm90IHNldHVwIGluIGhhcmR3YXJlIGJ1dCByZXBvcnRlZCBieSBNUCB0YWJsZVxuIik7CisJCWlvYXBpY19pODI1OS5waW4gID0gaTgyNTlfcGluOworCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGk4MjU5X2FwaWM7CisJfQorCS8qIENvbXBsYWluIGlmIHRoZSBNUCB0YWJsZSBhbmQgdGhlIGhhcmR3YXJlIGRpc2FncmVlICovCisJaWYgKCgoaW9hcGljX2k4MjU5LmFwaWMgIT0gaTgyNTlfYXBpYykgfHwgKGlvYXBpY19pODI1OS5waW4gIT0gaTgyNTlfcGluKSkgJiYKKwkJKGk4MjU5X3BpbiA+PSAwKSAmJiAoaW9hcGljX2k4MjU5LnBpbiA+PSAwKSkKKwl7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBpbiBoYXJkd2FyZSBhbmQgTVAgdGFibGUgZGlmZmVyXG4iKTsKKwl9CisKKwkvKgorCSAqIERvIG5vdCB0cnVzdCB0aGUgSU8tQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAKKwkgKi8KKwljbGVhcl9JT19BUElDKCk7Cit9CisKKy8qCisgKiBOb3QgYW4gX19pbml0LCBuZWVkZWQgYnkgdGhlIHJlYm9vdCBjb2RlCisgKi8KK3ZvaWQgZGlzYWJsZV9JT19BUElDKHZvaWQpCit7CisJLyoKKwkgKiBDbGVhciB0aGUgSU8tQVBJQyBiZWZvcmUgcmVib290aW5nOgorCSAqLworCWNsZWFyX0lPX0FQSUMoKTsKKworCS8qCisJICogSWYgdGhlIGk4MjU5IGlzIHJvdXRlZCB0aHJvdWdoIGFuIElPQVBJQworCSAqIFB1dCB0aGF0IElPQVBJQyBpbiB2aXJ0dWFsIHdpcmUgbW9kZQorCSAqIHNvIGxlZ2FjeSBpbnRlcnJ1cHRzIGNhbiBiZSBkZWxpdmVyZWQuCisJICovCisJaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEpIHsKKwkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CisJCWVudHJ5Lm1hc2sgICAgICAgICAgICA9IDA7IC8qIEVuYWJsZWQgKi8KKwkJZW50cnkudHJpZ2dlciAgICAgICAgID0gMDsgLyogRWRnZSAqLworCQllbnRyeS5pcnIgICAgICAgICAgICAgPSAwOworCQllbnRyeS5wb2xhcml0eSAgICAgICAgPSAwOyAvKiBIaWdoICovCisJCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cyA9IDA7CisJCWVudHJ5LmRlc3RfbW9kZSAgICAgICA9IDA7IC8qIFBoeXNpY2FsICovCisJCWVudHJ5LmRlbGl2ZXJ5X21vZGUgICA9IGRlc3RfRXh0SU5UOyAvKiBFeHRJbnQgKi8KKwkJZW50cnkudmVjdG9yICAgICAgICAgID0gMDsKKwkJZW50cnkuZGVzdCAgICAgICAgICAgID0gcmVhZF9hcGljX2lkKCk7CisKKwkJLyoKKwkJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCQkgKi8KKwkJaW9hcGljX3dyaXRlX2VudHJ5KGlvYXBpY19pODI1OS5hcGljLCBpb2FwaWNfaTgyNTkucGluLCBlbnRyeSk7CisJfQorCisJZGlzY29ubmVjdF9ic3BfQVBJQyhpb2FwaWNfaTgyNTkucGluICE9IC0xKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBmdW5jdGlvbiB0byBzZXQgdGhlIElPLUFQSUMgcGh5c2ljYWwgSURzIGJhc2VkIG9uIHRoZQorICogdmFsdWVzIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgorICoKKyAqIGJ5IE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4gIFR1ZSBEZWMgMjEgMTI6MjU6MDUgQ1NUIDE5OTkKKyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYyh2b2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKKwlwaHlzaWRfbWFza190IHBoeXNfaWRfcHJlc2VudF9tYXA7CisJaW50IGFwaWM7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBvbGRfaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh4ODZfcXVpcmtzLT5zZXR1cF9pb2FwaWNfaWRzICYmIHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMoKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEb24ndCBjaGVjayBJL08gQVBJQyBJRHMgZm9yIHhBUElDIHN5c3RlbXMuICBUaGV5IGhhdmUKKwkgKiBubyBtZWFuaW5nIHdpdGhvdXQgdGhlIHNlcmlhbCBBUElDIGJ1cy4KKwkgKi8KKwlpZiAoIShib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJfHwgQVBJQ19YQVBJQyhhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpCisJCXJldHVybjsKKwkvKgorCSAqIFRoaXMgaXMgYnJva2VuOyBhbnl0aGluZyB3aXRoIGEgcmVhbCBjcHUgY291bnQgaGFzIHRvCisJICogY2lyY3VtdmVudCB0aGlzIGlkaW9jeSByZWdhcmRsZXNzLgorCSAqLworCXBoeXNfaWRfcHJlc2VudF9tYXAgPSBpb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOworCisJLyoKKwkgKiBTZXQgdGhlIElPQVBJQyBJRCB0byB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCisJICovCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCisJCS8qIFJlYWQgdGhlIHJlZ2lzdGVyIDAgdmFsdWUgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwkJb2xkX2lkID0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7CisKKwkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgSU8tQVBJQyMlZCBJRCBpcyAlZCBpbiB0aGUgTVBDIHRhYmxlIS4uLlxuIiwKKwkJCQlhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CisJCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmaXhpbmcgdXAgdG8gJWQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKKwkJCQlyZWdfMDAuYml0cy5JRCk7CisJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9IHJlZ18wMC5iaXRzLklEOworCQl9CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrLCBpcyB0aGUgSUQgcmVhbGx5IGZyZWU/IEV2ZXJ5IEFQSUMgaW4gYQorCQkgKiBzeXN0ZW0gbXVzdCBoYXZlIGEgdW5pcXVlIElEIG9yIHdlIGdldCBsb3RzIG9mIG5pY2UKKwkJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCisJCSAqLworCQlpZiAoY2hlY2tfYXBpY2lkX3VzZWQocGh5c19pZF9wcmVzZW50X21hcCwKKwkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEICVkIGlzIGFscmVhZHkgdXNlZCEuLi5cbiIsCisJCQkJYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCQkJZm9yIChpID0gMDsgaSA8IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKTsgaSsrKQorCQkJCWlmICghcGh5c2lkX2lzc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApKQorCQkJCQlicmVhazsKKwkJCWlmIChpID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkKKwkJCQlwYW5pYygiTWF4IEFQSUMgSUQgZXhjZWVkZWQhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAorCQkJCWkpOworCQkJcGh5c2lkX3NldChpLCBwaHlzX2lkX3ByZXNlbnRfbWFwKTsKKwkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID0gaTsKKwkJfSBlbHNlIHsKKwkJCXBoeXNpZF9tYXNrX3QgdG1wOworCQkJdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlNldHRpbmcgJWQgaW4gdGhlICIKKwkJCQkJInBoeXNfaWRfcHJlc2VudF9tYXBcbiIsCisJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCXBoeXNpZHNfb3IocGh5c19pZF9wcmVzZW50X21hcCwgcGh5c19pZF9wcmVzZW50X21hcCwgdG1wKTsKKwkJfQorCisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBhZGp1c3QgdGhlIElSUSByb3V0aW5nIHRhYmxlCisJCSAqIGlmIHRoZSBJRCBjaGFuZ2VkLgorCQkgKi8KKwkJaWYgKG9sZF9pZCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKKwkJCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQorCQkJCWlmIChtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gb2xkX2lkKQorCQkJCQltcF9pcnFzW2ldLm1wX2RzdGFwaWMKKwkJCQkJCT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7CisKKwkJLyoKKwkJICogUmVhZCB0aGUgcmlnaHQgdmFsdWUgZnJvbSB0aGUgTVBDIHRhYmxlIGFuZAorCQkgKiB3cml0ZSBpdCBpbnRvIHRoZSBJRCByZWdpc3Rlci4KKwkJICovCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCisJCQkiLi4uY2hhbmdpbmcgSU8tQVBJQyBwaHlzaWNhbCBBUElDIElEIHRvICVkIC4uLiIsCisJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CisKKwkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCWlvX2FwaWNfd3JpdGUoYXBpYywgMCwgcmVnXzAwLnJhdyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKQorCQkJcHJpbnRrKCJjb3VsZCBub3Qgc2V0IElEIVxuIik7CisJCWVsc2UKKwkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBvay5cbiIpOworCX0KK30KKyNlbmRpZgorCitpbnQgbm9fdGltZXJfY2hlY2sgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgbm90aW1lcmNoZWNrKGNoYXIgKnMpCit7CisJbm9fdGltZXJfY2hlY2sgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgibm9fdGltZXJfY2hlY2siLCBub3RpbWVyY2hlY2spOworCisvKgorICogVGhlcmUgaXMgYSBuYXN0eSBidWcgaW4gc29tZSBvbGRlciBTTVAgYm9hcmRzLCB0aGVpciBtcHRhYmxlIGxpZXMKKyAqIGFib3V0IHRoZSB0aW1lciBJUlEuIFdlIGRvIHRoZSBmb2xsb3dpbmcgdG8gd29yayBhcm91bmQgdGhlIHNpdHVhdGlvbjoKKyAqCisgKgktIHRpbWVyIElSUSBkZWZhdWx0cyB0byBJTy1BUElDIElSUQorICoJLSBpZiB0aGlzIGZ1bmN0aW9uIGRldGVjdHMgdGhhdCB0aW1lciBJUlFzIGFyZSBkZWZ1bmN0LCB0aGVuIHdlIGZhbGwKKyAqCSAgYmFjayB0byBJU0EgdGltZXIgSVJRcworICovCitzdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pcnFfd29ya3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHQxID0gamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG5vX3RpbWVyX2NoZWNrKQorCQlyZXR1cm4gMTsKKworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwkvKiBMZXQgdGVuIHRpY2tzIHBhc3MuLi4gKi8KKwltZGVsYXkoKDEwICogMTAwMCkgLyBIWik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyoKKwkgKiBFeHBlY3QgYSBmZXcgdGlja3MgYXQgbGVhc3QsIHRvIGJlIHN1cmUgc29tZSBwb3NzaWJsZQorCSAqIGdsdWUgbG9naWMgZG9lcyBub3QgbG9jayB1cCBhZnRlciBvbmUgb3IgdHdvIGZpcnN0CisJICogdGlja3MgaW4gYSBub24tRXh0SU5UIG1vZGUuICBBbHNvIHRoZSBsb2NhbCBBUElDCisJICogbWlnaHQgaGF2ZSBjYWNoZWQgb25lIEV4dElOVCBpbnRlcnJ1cHQuICBGaW5hbGx5LCBhdAorCSAqIGxlYXN0IG9uZSB0aWNrIG1heSBiZSBsb3N0IGR1ZSB0byBkZWxheXMuCisJICovCisKKwkvKiBqaWZmaWVzIHdyYXA/ICovCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdDEgKyA0KSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbiB0aGUgU01QK0lPQVBJQyBjYXNlIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHRoZXJlIGFyZSBhbiB1bnNwZWNpZmllZAorICogbnVtYmVyIG9mIHBlbmRpbmcgSVJRIGV2ZW50cyB1bmhhbmRsZWQuIFRoZXNlIGNhc2VzIGFyZSB2ZXJ5IHJhcmUsCisgKiBzbyB3ZSAncmVzZW5kJyB0aGVzZSBJUlFzIHZpYSBJUElzLCB0byB0aGUgc2FtZSBDUFUuIEl0J3MgbXVjaAorICogYmV0dGVyIHRvIGRvIGl0IHRoaXMgd2F5IGFzIHRodXMgd2UgZG8gbm90IGhhdmUgdG8gYmUgYXdhcmUgb2YKKyAqICdwZW5kaW5nJyBpbnRlcnJ1cHRzIGluIHRoZSBJUlEgcGF0aCwgZXhjZXB0IGF0IHRoaXMgcG9pbnQuCisgKi8KKy8qCisgKiBFZGdlIHRyaWdnZXJlZCBuZWVkcyB0byByZXNlbmQgYW55IGludGVycnVwdAorICogdGhhdCB3YXMgZGVsYXllZCBidXQgdGhpcyBpcyBub3cgaGFuZGxlZCBpbiB0aGUgZGV2aWNlCisgKiBpbmRlcGVuZGVudCBjb2RlLgorICovCisKKy8qCisgKiBTdGFydGluZyB1cCBhIGVkZ2UtdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0IGlzCisgKiBuYXN0eSAtIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZ2V0IHRoZSBlZGdlLgorICogSWYgaXQgaXMgYWxyZWFkeSBhc3NlcnRlZCBmb3Igc29tZSByZWFzb24sIHdlIG5lZWQKKyAqIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQgaXMgd2FzIHBlbmRpbmcuCisgKgorICogVGhpcyBpcyBub3QgY29tcGxldGUgLSB3ZSBzaG91bGQgYmUgYWJsZSB0byBmYWtlCisgKiBhbiBlZGdlIGV2ZW4gaWYgaXQgaXNuJ3Qgb24gdGhlIDgyNTlBLi4uCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgd2FzX3BlbmRpbmcgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlpZiAoaXJxIDwgMTYpIHsKKwkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKKwkJaWYgKGk4MjU5QV9pcnFfcGVuZGluZyhpcnEpKQorCQkJd2FzX3BlbmRpbmcgPSAxOworCX0KKwlfX3VubWFza19JT19BUElDX2lycShpcnEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gd2FzX3BlbmRpbmc7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyhpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGZpcnN0X2NwdShjZmctPmRvbWFpbikpLCBjZmctPnZlY3Rvcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAxOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzZW5kX0lQSV9zZWxmKGlycV9jZmcoaXJxKS0+dmVjdG9yKTsKKworCXJldHVybiAxOworfQorI2VuZGlmCisKKy8qCisgKiBMZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHRzIG5lZWQgZGlmZmVyZW50IGhhbmRsaW5nLAorICogc28gd2UgdXNlIHR3byBzZXBhcmF0ZSBJUlEgZGVzY3JpcHRvcnMuIEVkZ2UgdHJpZ2dlcmVkIElSUXMgY2FuIGJlCisgKiBoYW5kbGVkIHdpdGggdGhlIGxldmVsLXRyaWdnZXJlZCBkZXNjcmlwdG9yLCBidXQgdGhhdCBvbmUgaGFzIHNsaWdodGx5CisgKiBtb3JlIG92ZXJoZWFkLiBMZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cyBjYW5ub3QgYmUgaGFuZGxlZCB3aXRoIHRoZQorICogZWRnZS10cmlnZ2VyZWQgaGFuZGxlciwgd2l0aG91dCByaXNraW5nIElSUSBzdG9ybXMgYW5kIG90aGVyIHVnbHkKKyAqIHJhY2VzLgorICovCisKKyNpZmRlZiBDT05GSUdfU01QCisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoaXJfbWlncmF0aW9uX3dvcmssIGlyX2lycV9taWdyYXRpb24pOworCisvKgorICogTWlncmF0ZSB0aGUgSU8tQVBJQyBpcnEgaW4gdGhlIHByZXNlbmNlIG9mIGludHItcmVtYXBwaW5nLgorICoKKyAqIEZvciBlZGdlIHRyaWdnZXJlZCwgaXJxIG1pZ3JhdGlvbiBpcyBhIHNpbXBsZSBhdG9taWMgdXBkYXRlKG9mIHZlY3RvcgorICogYW5kIGNwdSBkZXN0aW5hdGlvbikgb2YgSVJURSBhbmQgZmx1c2ggdGhlIGhhcmR3YXJlIGNhY2hlLgorICoKKyAqIEZvciBsZXZlbCB0cmlnZ2VyZWQsIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBpby1hcGljIFJURSBhc3dlbGwgd2l0aCB0aGUgdXBkYXRlCisgKiB2ZWN0b3IgaW5mb3JtYXRpb24sIGFsb25nIHdpdGggbW9kaWZ5aW5nIElSVEUgd2l0aCB2ZWN0b3IgYW5kIGRlc3RpbmF0aW9uLgorICogU28gaXJxIG1pZ3JhdGlvbiBmb3IgbGV2ZWwgdHJpZ2dlcmVkIGlzIGxpdHRsZSAgYml0IG1vcmUgY29tcGxleCBjb21wYXJlZCB0bworICogZWRnZSB0cmlnZ2VyZWQgbWlncmF0aW9uLiBCdXQgdGhlIGdvb2QgbmV3cyBpcywgd2UgdXNlIHRoZSBzYW1lIGFsZ29yaXRobQorICogZm9yIGxldmVsIHRyaWdnZXJlZCBtaWdyYXRpb24gYXMgd2UgaGF2ZSB0b2RheSwgb25seSBkaWZmZXJlbmNlIGJlaW5nLAorICogd2Ugbm93IGluaXRpYXRlIHRoZSBpcnEgbWlncmF0aW9uIGZyb20gcHJvY2VzcyBjb250ZXh0IGluc3RlYWQgb2YgdGhlCisgKiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBJbiBmdXR1cmUsIHdoZW4gd2UgZG8gYSBkaXJlY3RlZCBFT0kgKGNvbWJpbmVkIHdpdGggY3B1IEVPSSBicm9hZGNhc3QKKyAqIHN1cHByZXNzaW9uKSB0byB0aGUgSU8tQVBJQywgbGV2ZWwgdHJpZ2dlcmVkIGlycSBtaWdyYXRpb24gd2lsbCBhbHNvIGJlCisgKiBhcyBzaW1wbGUgYXMgZWRnZSB0cmlnZ2VyZWQgbWlncmF0aW9uIGFuZCB3ZSBjYW4gZG8gdGhlIGlycSBtaWdyYXRpb24KKyAqIHdpdGggYSBzaW1wbGUgYXRvbWljIHVwZGF0ZSB0byBJTy1BUElDIFJURS4KKyAqLworc3RhdGljIHZvaWQgbWlncmF0ZV9pb2FwaWNfaXJxKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWNwdW1hc2tfdCB0bXAsIGNsZWFudXBfbWFzazsKKwlzdHJ1Y3QgaXJ0ZSBpcnRlOworCWludCBtb2RpZnlfaW9hcGljX3J0ZTsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJaWYgKGdldF9pcnRlKGlycSwgJmlydGUpKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCW1vZGlmeV9pb2FwaWNfcnRlID0gZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMOworCWlmIChtb2RpZnlfaW9hcGljX3J0ZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJfQorCisJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CisKKwkvKgorCSAqIE1vZGlmaWVkIHRoZSBJUlRFIGFuZCBmbHVzaGVzIHRoZSBJbnRlcnJ1cHQgZW50cnkgY2FjaGUuCisJICovCisJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7CisJCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKKwkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKKwl9CisKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaW50IGlycSkKK3sKKwlpbnQgcmV0ID0gLTE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKworCWlmIChpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGlycSkpIHsKKwkJLyoKKwkJICogSW50ZXJydXB0IGluIHByb2dyZXNzLiBNaWdyYXRpbmcgaXJxIG5vdyB3aWxsIGNoYW5nZSB0aGUKKwkJICogdmVjdG9yIGluZm9ybWF0aW9uIGluIHRoZSBJTy1BUElDIFJURSBhbmQgdGhhdCB3aWxsIGNvbmZ1c2UKKwkJICogdGhlIEVPSSBicm9hZGNhc3QgcGVyZm9ybWVkIGJ5IGNwdS4KKwkJICogU28sIGRlbGF5IHRoZSBpcnEgbWlncmF0aW9uIHRvIHRoZSBuZXh0IGluc3RhbmNlLgorCQkgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpcl9taWdyYXRpb25fd29yaywgMSk7CisJCWdvdG8gdW5tYXNrOworCX0KKworCS8qIGV2ZXJ0aGluZyBpcyBjbGVhci4gd2UgaGF2ZSByaWdodCBvZiB3YXkgKi8KKwltaWdyYXRlX2lvYXBpY19pcnEoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOworCisJcmV0ID0gMDsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7CisJY3B1c19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOworCit1bm1hc2s6CisJdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCQlpZiAoIWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSB8fAorCQkJICAgICEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKKwkJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQl9CisJfQorfQorCisvKgorICogTWlncmF0ZXMgdGhlIElSUSBkZXN0aW5hdGlvbiBpbiB0aGUgcHJvY2VzcyBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgeworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUEVORElORzsKKwkJZGVzYy0+cGVuZGluZ19tYXNrID0gbWFzazsKKwkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaXJxKTsKKwkJcmV0dXJuOworCX0KKworCW1pZ3JhdGVfaW9hcGljX2lycShpcnEsIG1hc2spOworfQorI2VuZGlmCisKK2FzbWxpbmthZ2Ugdm9pZCBzbXBfaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQodm9pZCkKK3sKKwl1bnNpZ25lZCB2ZWN0b3IsIG1lOworCWFja19BUElDX2lycSgpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlleGl0X2lkbGUoKTsKKyNlbmRpZgorCWlycV9lbnRlcigpOworCisJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7CisJCXVuc2lnbmVkIGludCBpcnE7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwkJc3RydWN0IGlycV9jZmcgKmNmZzsKKwkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOworCisJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKKworCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCWlmICghY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAoKHZlY3RvciA9PSBjZmctPnZlY3RvcikgJiYgY3B1X2lzc2V0KG1lLCBjZmctPmRvbWFpbikpCisJCQlnb3RvIHVubG9jazsKKworCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKKwkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQtLTsKK3VubG9jazoKKwkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCX0KKworCWlycV9leGl0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKKwl1bnNpZ25lZCB2ZWN0b3IsIG1lOworCisJaWYgKGxpa2VseSghY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSkKKwkJcmV0dXJuOworCisJdmVjdG9yID0gfmdldF9pcnFfcmVncygpLT5vcmlnX2F4OworCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmICgodmVjdG9yID09IGNmZy0+dmVjdG9yKSAmJiBjcHVfaXNzZXQobWUsIGNmZy0+ZG9tYWluKSkgeworCQljcHVtYXNrX3QgY2xlYW51cF9tYXNrOworCisJCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKKwkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHVuc2lnbmVkIGludCBpcnEpIHt9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHZvaWQgYWNrX3gyYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja194MkFQSUNfaXJxKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFja194MmFwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja194MkFQSUNfaXJxKCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWNrX2FwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7CisJbW92ZV9uYXRpdmVfaXJxKGlycSk7CisJYWNrX0FQSUNfaXJxKCk7Cit9CisKK2F0b21pY190IGlycV9taXNfY291bnQ7CisKK3N0YXRpYyB2b2lkIGFja19hcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXVuc2lnbmVkIGxvbmcgdjsKKwlpbnQgaTsKKyNlbmRpZgorCWludCBkb191bm1hc2tfaXJxID0gMDsKKworCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7CisjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKKwkvKiBJZiB3ZSBhcmUgbW92aW5nIHRoZSBpcnEgd2UgbmVlZCB0byBtYXNrIGl0ICovCisJaWYgKHVubGlrZWx5KGlycV90b19kZXNjKGlycSktPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7CisJCWRvX3VubWFza19pcnEgPSAxOworCQltYXNrX0lPX0FQSUNfaXJxKGlycSk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkqIEl0IGFwcGVhcnMgdGhlcmUgaXMgYW4gZXJyYXR1bSB3aGljaCBhZmZlY3RzIGF0IGxlYXN0IHZlcnNpb24gMHgxMQorCSogb2YgSS9PIEFQSUMgKHRoYXQncyB0aGUgODIwOTNBQSBhbmQgY29yZXMgaW50ZWdyYXRlZCBpbnRvIHZhcmlvdXMKKwkqIGNoaXBzZXRzKS4gIFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaXMKKwkqIGVycm9uZW91c2x5IGRlbGl2ZXJlZCBhcyBlZGdlLXRyaWdnZXJlZCBvbmUgYnV0IHRoZSByZXNwZWN0aXZlIElSUgorCSogYml0IGdldHMgc2V0IG5ldmVydGhlbGVzcy4gIEFzIGEgcmVzdWx0IHRoZSBJL08gdW5pdCBleHBlY3RzIGFuIEVPSQorCSogbWVzc2FnZSBidXQgaXQgd2lsbCBuZXZlciBhcnJpdmUgYW5kIGZ1cnRoZXIgaW50ZXJydXB0cyBhcmUgYmxvY2tlZAorCSogZnJvbSB0aGUgc291cmNlLiAgVGhlIGV4YWN0IHJlYXNvbiBpcyBzbyBmYXIgdW5rbm93biwgYnV0IHRoZQorCSogcGhlbm9tZW5vbiB3YXMgb2JzZXJ2ZWQgd2hlbiB0d28gY29uc2VjdXRpdmUgaW50ZXJydXB0IHJlcXVlc3RzCisJKiBmcm9tIGEgZ2l2ZW4gc291cmNlIGdldCBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgQ1BVIGFuZCB0aGUgc291cmNlIGlzCisJKiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpbiBiZXR3ZWVuLgorCSoKKwkqIEEgd29ya2Fyb3VuZCBpcyB0byBzaW11bGF0ZSBhbiBFT0kgbWVzc2FnZSBtYW51YWxseS4gIFdlIGFjaGlldmUgaXQKKwkqIGJ5IHNldHRpbmcgdGhlIHRyaWdnZXIgbW9kZSB0byBlZGdlIGFuZCB0aGVuIHRvIGxldmVsIHdoZW4gdGhlIGVkZ2UKKwkqIHRyaWdnZXIgbW9kZSBnZXRzIGRldGVjdGVkIGluIHRoZSBUTVIgb2YgYSBsb2NhbCBBUElDIGZvciBhCisJKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0LiAgV2UgbWFzayB0aGUgc291cmNlIGZvciB0aGUgdGltZSBvZiB0aGUKKwkqIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBlc2NhcGluZyBtZWFud2hpbGUuCisJKiBUaGUgaWRlYSBpcyBmcm9tIE1hbmZyZWQgU3ByYXVsLiAgLS1tYWNybworCSovCisJaSA9IGlycV9jZmcoaXJxKS0+dmVjdG9yOworCisJdiA9IGFwaWNfcmVhZChBUElDX1RNUiArICgoaSAmIH4weDFmKSA+PiAxKSk7CisjZW5kaWYKKworCS8qCisJICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCisJICogbm90IHByb3BhZ2F0ZSBwcm9wZXJseS4KKwkgKi8KKwlhY2tfQVBJQ19pcnEoKTsKKworCS8qIE5vdyB3ZSBjYW4gbW92ZSBhbmQgcmVuYWJsZSB0aGUgaXJxICovCisJaWYgKHVubGlrZWx5KGRvX3VubWFza19pcnEpKSB7CisJCS8qIE9ubHkgbWlncmF0ZSB0aGUgaXJxIGlmIHRoZSBhY2sgaGFzIGJlZW4gcmVjZWl2ZWQuCisJCSAqCisJCSAqIE9uIHJhcmUgb2NjYXNpb25zIHRoZSBicm9hZGNhc3QgbGV2ZWwgdHJpZ2dlcmVkIGFjayBnZXRzCisJCSAqIGRlbGF5ZWQgZ29pbmcgdG8gaW9hcGljcywgYW5kIGlmIHdlIHJlcHJvZ3JhbSB0aGUKKwkJICogdmVjdG9yIHdoaWxlIFJlbW90ZSBJUlIgaXMgc3RpbGwgc2V0IHRoZSBpcnEgd2lsbCBuZXZlcgorCQkgKiBmaXJlIGFnYWluLgorCQkgKgorCQkgKiBUbyBwcmV2ZW50IHRoaXMgc2NlbmFyaW8gd2UgcmVhZCB0aGUgUmVtb3RlIElSUiBiaXQKKwkJICogb2YgdGhlIGlvYXBpYy4gIFRoaXMgaGFzIHR3byBlZmZlY3RzLgorCQkgKiAtIE9uIGFueSBzYW5lIHN5c3RlbSB0aGUgcmVhZCBvZiB0aGUgaW9hcGljIHdpbGwKKwkJICogICBmbHVzaCB3cml0ZXMgKGFuZCBhY2tzKSBnb2luZyB0byB0aGUgaW9hcGljIGZyb20KKwkJICogICB0aGlzIGNwdS4KKwkJICogLSBXZSBnZXQgdG8gc2VlIGlmIHRoZSBBQ0sgaGFzIGFjdHVhbGx5IGJlZW4gZGVsaXZlcmVkLgorCQkgKgorCQkgKiBCYXNlZCBvbiBmYWlsZWQgZXhwZXJpbWVudHMgb2YgcmVwcm9ncmFtbWluZyB0aGUKKwkJICogaW9hcGljIGVudHJ5IGZyb20gb3V0c2lkZSBvZiBpcnEgY29udGV4dCBzdGFydGluZworCQkgKiB3aXRoIG1hc2tpbmcgdGhlIGlvYXBpYyBlbnRyeSBhbmQgdGhlbiBwb2xsaW5nIHVudGlsCisJCSAqIFJlbW90ZSBJUlIgd2FzIGNsZWFyIGJlZm9yZSByZXByb2dyYW1taW5nIHRoZQorCQkgKiBpb2FwaWMgSSBkb24ndCB0cnVzdCB0aGUgUmVtb3RlIElSUiBiaXQgdG8gYmUKKwkJICogY29tcGxldGV5IGFjY3VyYXRlLgorCQkgKgorCQkgKiBIb3dldmVyIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIHBsdWcKKwkJICogdGhpcyByYWNlLCBzbyBpZiB0aGUgUmVtb3RlIElSUiBiaXQgaXMgbm90CisJCSAqIGFjY3VyYXRlIGFuZCBpcyBjYXVzaW5nIHByb2JsZW1zIHRoZW4gaXQgaXMgYSBoYXJkd2FyZSBidWcKKwkJICogYW5kIHlvdSBjYW4gZ28gdGFsayB0byB0aGUgY2hpcHNldCB2ZW5kb3IgYWJvdXQgaXQuCisJCSAqLworCQlpZiAoIWlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoaXJxKSkKKwkJCW1vdmVfbWFza2VkX2lycShpcnEpOworCQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCEodiAmICgxIDw8IChpICYgMHgxZikpKSkgeworCQlhdG9taWNfaW5jKCZpcnFfbWlzX2NvdW50KTsKKwkJc3Bpbl9sb2NrKCZpb2FwaWNfbG9jayk7CisJCV9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShpcnEpOworCQlfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoaXJxKTsKKwkJc3Bpbl91bmxvY2soJmlvYXBpY19sb2NrKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJJTy1BUElDIiwKKwkuc3RhcnR1cAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKKwkubWFzawkJPSBtYXNrX0lPX0FQSUNfaXJxLAorCS51bm1hc2sJCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAorCS5hY2sJCT0gYWNrX2FwaWNfZWRnZSwKKwkuZW9pCQk9IGFja19hcGljX2xldmVsLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X2lvYXBpY19hZmZpbml0eV9pcnEsCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiSVItSU8tQVBJQyIsCisJLnN0YXJ0dXAJPSBzdGFydHVwX2lvYXBpY19pcnEsCisJLm1hc2sJCT0gbWFza19JT19BUElDX2lycSwKKwkudW5tYXNrCQk9IHVubWFza19JT19BUElDX2lycSwKKwkuYWNrCQk9IGFja194MmFwaWNfZWRnZSwKKwkuZW9pCQk9IGFja194MmFwaWNfbGV2ZWwsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkJPSBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSwKKyNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQoreworCWludCBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwkvKgorCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZworCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgorCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCisJICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQorCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKKwkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCisJICoKKwkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQorCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQorCSAqLworCWZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpIHsKKwkJaWYgKElPX0FQSUNfSVJRKGlycSkgJiYgIWNmZy0+dmVjdG9yKSB7CisJCQkvKgorCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKKwkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5CisJCQkgKiBpbnRlcnJ1cHQgaWYgd2UgY2FuLi4KKwkJCSAqLworCQkJaWYgKGlycSA8IDE2KQorCQkJCW1ha2VfODI1OUFfaXJxKGlycSk7CisJCQllbHNlIHsKKwkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCQkvKiBTdHJhbmdlLiBPaCwgd2VsbC4uICovCisJCQkJZGVzYy0+Y2hpcCA9ICZub19pcnFfY2hpcDsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIFRoZSBsb2NhbCBBUElDIGlycS1jaGlwIGltcGxlbWVudGF0aW9uOgorICovCisKK3N0YXRpYyB2b2lkIG1hc2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyB2OworCisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKK30KKworc3RhdGljIHZvaWQgdW5tYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgdjsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiAmIH5BUElDX0xWVF9NQVNLRUQpOworfQorCitzdGF0aWMgdm9pZCBhY2tfbGFwaWNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja19BUElDX2lycSgpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxhcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAibG9jYWwtQVBJQyIsCisJLm1hc2sJCT0gbWFza19sYXBpY19pcnEsCisJLnVubWFzawkJPSB1bm1hc2tfbGFwaWNfaXJxLAorCS5hY2sJCT0gYWNrX2xhcGljX2lycSwKK307CisKK3N0YXRpYyB2b2lkIGxhcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsYXBpY19jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCisJCQkJICAgICAgImVkZ2UiKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX25taSh2b2lkKQoreworCS8qCisJICogRGlydHkgdHJpY2sgdG8gZW5hYmxlIHRoZSBOTUkgd2F0Y2hkb2cgLi4uCisJICogV2UgcHV0IHRoZSA4MjU5QSBtYXN0ZXIgaW50byBBRU9JIG1vZGUgYW5kCisJICogdW5tYXNrIG9uIGFsbCBsb2NhbCBBUElDcyBMVlQwIGFzIE5NSS4KKwkgKgorCSAqIFRoZSBpZGVhIHRvIHVzZSB0aGUgODI1OUEgaW4gQUVPSSBtb2RlICgnODI1OUEgVmlydHVhbCBXaXJlJykKKwkgKiBpcyBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIC0gc28gd2UgZG8gbm90IGhhdmUgdG8gRU9JIGZyb20KKwkgKiB0aGUgTk1JIGhhbmRsZXIgb3IgdGhlIHRpbWVyIGludGVycnVwdC4KKwkgKi8KKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTyAiYWN0aXZhdGluZyBOTUkgV2F0Y2hkb2cgLi4uIik7CisKKwllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIGRvbmUuXG4iKTsKK30KKworLyoKKyAqIFRoaXMgbG9va3MgYSBiaXQgaGFja2lzaCBidXQgaXQncyBhYm91dCB0aGUgb25seSBvbmUgd2F5IG9mIHNlbmRpbmcKKyAqIGEgZmV3IElOVEEgY3ljbGVzIHRvIDgyNTlBcyBhbmQgYW55IGFzc29jaWF0ZWQgZ2x1ZSBsb2dpYy4gIElDUiBkb2VzCisgKiBub3Qgc3VwcG9ydCB0aGUgRXh0SU5UIG1vZGUsIHVuZm9ydHVuYXRlbHkuICBXZSBuZWVkIHRvIHNlbmQgdGhlc2UKKyAqIGN5Y2xlcyBhcyBzb21lIGk4MjQ4OURYLWJhc2VkIGJvYXJkcyBoYXZlIGdsdWUgbG9naWMgdGhhdCBrZWVwcyB0aGUKKyAqIDgyNTlBIGludGVycnVwdCBsaW5lIGFzc2VydGVkIHVudGlsIElOVEEuICAtLW1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdW5sb2NrX0V4dElOVF9sb2dpYyh2b2lkKQoreworCWludCBhcGljLCBwaW4sIGk7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnkwLCBlbnRyeTE7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7CisKKwlwaW4gID0gZmluZF9pc2FfaXJxX3Bpbig4LCBtcF9JTlQpOworCWlmIChwaW4gPT0gLTEpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCWFwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYyg4LCBtcF9JTlQpOworCWlmIChhcGljID09IC0xKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKworCWVudHJ5MCA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7CisJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKKworCW1lbXNldCgmZW50cnkxLCAwLCBzaXplb2YoZW50cnkxKSk7CisKKwllbnRyeTEuZGVzdF9tb2RlID0gMDsJCQkvKiBwaHlzaWNhbCBkZWxpdmVyeSAqLworCWVudHJ5MS5tYXNrID0gMDsJCQkvKiB1bm1hc2sgSVJRIG5vdyAqLworCWVudHJ5MS5kZXN0ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJZW50cnkxLmRlbGl2ZXJ5X21vZGUgPSBkZXN0X0V4dElOVDsKKwllbnRyeTEucG9sYXJpdHkgPSBlbnRyeTAucG9sYXJpdHk7CisJZW50cnkxLnRyaWdnZXIgPSAwOworCWVudHJ5MS52ZWN0b3IgPSAwOworCisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkxKTsKKworCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOworCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3QgJiB+UlRDX1JBVEVfU0VMRUNUKSB8IDB4NiwKKwkJICAgUlRDX0ZSRVFfU0VMRUNUKTsKKwlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCB8IFJUQ19QSUUsIFJUQ19DT05UUk9MKTsKKworCWkgPSAxMDA7CisJd2hpbGUgKGktLSA+IDApIHsKKwkJbWRlbGF5KDEwKTsKKwkJaWYgKChDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpICYgUlRDX1BGKSA9PSBSVENfUEYpCisJCQlpIC09IDEwOworCX0KKworCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7CisJQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOworCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7CisKKwlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTApOworfQorCitzdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKKy8qIEFjdHVhbGx5IHRoZSBuZXh0IGlzIG9ic29sZXRlLCBidXQga2VlcCBpdCBmb3IgcGFyYW5vaWQgcmVhc29ucyAtQUsgKi8KK3N0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfdGltZXJfcGluX3NldHVwKGNoYXIgKmFyZykKK3sKKwlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJkaXNhYmxlX3RpbWVyX3Bpbl8xIiwgZGlzYWJsZV90aW1lcl9waW5fc2V0dXApOworCitpbnQgdGltZXJfdGhyb3VnaF84MjU5IF9faW5pdGRhdGE7CisKKy8qCisgKiBUaGlzIGNvZGUgbWF5IGxvb2sgYSBiaXQgcGFyYW5vaWQsIGJ1dCBpdCdzIHN1cHBvc2VkIHRvIGNvb3BlcmF0ZSB3aXRoCisgKiBhIHdpZGUgcmFuZ2Ugb2YgYm9hcmRzIGFuZCBCSU9TIGJ1Z3MuICBGb3J0dW5hdGVseSBvbmx5IHRoZSB0aW1lciBJUlEKKyAqIGlzIHNvIHNjcmV3eS4gIFRoYW5rcyB0byBCcmlhbiBQZXJraW5zIGZvciB0ZXN0aW5nL2hhY2tpbmcgdGhpcyBiZWFzdAorICogZmFuYXRpY2FsbHkgb24gaGlzIHRydWx5IGJ1Z2d5IGJvYXJkLgorICoKKyAqIEZJWE1FOiByZWFsbHkgbmVlZCB0byByZXZhbXAgdGhpcyBmb3IgYWxsIHBsYXRmb3Jtcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjaGVja190aW1lcih2b2lkKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKDApOworCWludCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdmVyOworCWludCBub19waW4xID0gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXZlciA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2ZXIpOworCisJLyoKKwkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgorCSAqLworCWRpc2FibGVfODI1OUFfaXJxKDApOworCWFzc2lnbl9pcnFfdmVjdG9yKDAsIFRBUkdFVF9DUFVTKTsKKworCS8qCisJICogQXMgSVJRMCBpcyB0byBiZSBlbmFibGVkIGluIHRoZSA4MjU5QSwgdGhlIHZpcnR1YWwKKwkgKiB3aXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiB0aGUgbG9jYWwgQVBJQy4gIEFsc28KKwkgKiB0aW1lciBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUgYWNrbm93bGVkZ2VkIG1hbnVhbGx5IGluCisJICogdGhlIDgyNTlBIGZvciB0aGUgaTgyNDg5RFggd2hlbiB1c2luZyB0aGUgTk1JCisJICogd2F0Y2hkb2cgYXMgdGhhdCBBUElDIHRyZWF0cyBOTUlzIGFzIGxldmVsLXRyaWdnZXJlZC4KKwkgKiBUaGUgQUVPSSBtb2RlIHdpbGwgZmluaXNoIHRoZW0gaW4gdGhlIDgyNTlBCisJICogYXV0b21hdGljYWxseS4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOworCWluaXRfODI1OUEoMSk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXRpbWVyX2FjayA9IChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMgJiYgIUFQSUNfSU5URUdSQVRFRCh2ZXIpKTsKKyNlbmRpZgorCisJcGluMSAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0lOVCk7CisJYXBpYzEgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9JTlQpOworCXBpbjIgID0gaW9hcGljX2k4MjU5LnBpbjsKKwlhcGljMiA9IGlvYXBpY19pODI1OS5hcGljOworCisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLlRJTUVSOiB2ZWN0b3I9MHglMDJYICIKKwkJICAgICJhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCisJCSAgICBjZmctPnZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKKworCS8qCisJICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKKwkgKiBJL08gQVBJQyBpbnB1dCBmcm9tIHRoZSBjYXNjYWRlZCA4MjU5QSBhcyB0aGUgdGltZXIKKwkgKiBpbnRlcnJ1cHQgaW5wdXQuICBTbyBqdXN0IGluIGNhc2UsIGlmIG9ubHkgb25lIHBpbgorCSAqIHdhcyBmb3VuZCBhYm92ZSwgdHJ5IGl0IGJvdGggZGlyZWN0bHkgYW5kIHRocm91Z2ggdGhlCisJICogODI1OUEuCisJICovCisJaWYgKHBpbjEgPT0gLTEpIHsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCXBhbmljKCJCSU9TIGJ1ZzogdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDIik7CisjZW5kaWYKKwkJcGluMSA9IHBpbjI7CisJCWFwaWMxID0gYXBpYzI7CisJCW5vX3BpbjEgPSAxOworCX0gZWxzZSBpZiAocGluMiA9PSAtMSkgeworCQlwaW4yID0gcGluMTsKKwkJYXBpYzIgPSBhcGljMTsKKwl9CisKKwlpZiAocGluMSAhPSAtMSkgeworCQkvKgorCQkgKiBPaywgZG9lcyBJUlEwIHRocm91Z2ggdGhlIElPQVBJQyB3b3JrPworCQkgKi8KKwkJaWYgKG5vX3BpbjEpIHsKKwkJCWFkZF9waW5fdG9faXJxKDAsIGFwaWMxLCBwaW4xKTsKKwkJCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMxLCBwaW4xLCBjZmctPnZlY3Rvcik7CisJCX0KKwkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOworCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKKwkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKKwkJCQlzZXR1cF9ubWkoKTsKKwkJCQllbmFibGVfODI1OUFfaXJxKDApOworCQkJfQorCQkJaWYgKGRpc2FibGVfdGltZXJfcGluXzEgPiAwKQorCQkJCWNsZWFyX0lPX0FQSUNfcGluKDAsIHBpbjEpOworCQkJZ290byBvdXQ7CisJCX0KKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOworI2VuZGlmCisJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKKwkJaWYgKCFub19waW4xKQorCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9FUlIgIi4uTVAtQklPUyBidWc6ICIKKwkJCQkgICAgIjgyNTQgdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDXG4iKTsKKworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgIgorCQkJICAgICIoSVJRMCkgdGhyb3VnaCB0aGUgODI1OUEgLi4uXG4iKTsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCisJCQkgICAgIi4uLi4uIChmb3VuZCBhcGljICVkIHBpbiAlZCkgLi4uXG4iLCBhcGljMiwgcGluMik7CisJCS8qCisJCSAqIGxlZ2FjeSBkZXZpY2VzIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gSU8gQVBJQyAjMAorCQkgKi8KKwkJcmVwbGFjZV9waW5fYXRfaXJxKDAsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CisJCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMyLCBwaW4yLCBjZmctPnZlY3Rvcik7CisJCXVubWFza19JT19BUElDX2lycSgwKTsKKwkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gd29ya3MuXG4iKTsKKwkJCXRpbWVyX3Rocm91Z2hfODI1OSA9IDE7CisJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CisJCQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7CisJCQkJc2V0dXBfbm1pKCk7CisJCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJCS8qCisJCSAqIENsZWFudXAsIGp1c3QgaW4gY2FzZSAuLi4KKwkJICovCisJCWRpc2FibGVfODI1OUFfaXJxKDApOworCQljbGVhcl9JT19BUElDX3BpbihhcGljMiwgcGluMik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiBmYWlsZWQuXG4iKTsKKwl9CisKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fV0FSTklORyAidGltZXIgZG9lc24ndCB3b3JrICIKKwkJCSAgICAidGhyb3VnaCB0aGUgSU8tQVBJQyAtIGRpc2FibGluZyBOTUkgV2F0Y2hkb2chXG4iKTsKKwkJbm1pX3dhdGNoZG9nID0gTk1JX05PTkU7CisJfQorI2lmZGVmIENPTkZJR19YODZfMzIKKwl0aW1lcl9hY2sgPSAwOworI2VuZGlmCisKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KKwkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIFZpcnR1YWwgV2lyZSBJUlEuLi5cbiIpOworCisJbGFwaWNfcmVnaXN0ZXJfaW50cigwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9GSVhFRCB8IGNmZy0+dmVjdG9yKTsJLyogRml4ZWQgbW9kZSAqLworCWVuYWJsZV84MjU5QV9pcnEoMCk7CisKKwlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJZGlzYWJsZV84MjU5QV9pcnEoMCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQuXG4iKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgRXh0SU5UIElSUS4uLlxuIik7CisKKwlpbml0XzgyNTlBKDApOworCW1ha2VfODI1OUFfaXJxKDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7CisKKwl1bmxvY2tfRXh0SU5UX2xvZ2ljKCk7CisKKwlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQgOiguXG4iKTsKKwlwYW5pYygiSU8tQVBJQyArIHRpbWVyIGRvZXNuJ3Qgd29yayEgIEJvb3Qgd2l0aCBhcGljPWRlYnVnIGFuZCBzZW5kIGEgIgorCQkicmVwb3J0LiAgVGhlbiB0cnkgYm9vdGluZyB3aXRoIHRoZSAnbm9hcGljJyBvcHRpb24uXG4iKTsKK291dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUcmFkaXRpb25hbGx5IElTQSBJUlEyIGlzIHRoZSBjYXNjYWRlIElSUSwgYW5kIGlzIG5vdCBhdmFpbGFibGUKKyAqIHRvIGRldmljZXMuICBIb3dldmVyIHRoZXJlIG1heSBiZSBhbiBJL08gQVBJQyBwaW4gYXZhaWxhYmxlIGZvcgorICogdGhpcyBpbnRlcnJ1cHQgcmVnYXJkbGVzcy4gIFRoZSBwaW4gbWF5IGJlIGxlZnQgdW5jb25uZWN0ZWQsIGJ1dAorICogdHlwaWNhbGx5IGl0IHdpbGwgYmUgcmV1c2VkIGFzIGFuIEV4dElOVCBjYXNjYWRlIGludGVycnVwdCBmb3IKKyAqIHRoZSBtYXN0ZXIgODI1OUEuICBJbiB0aGUgTVBTIGNhc2Ugc3VjaCBhIHBpbiB3aWxsIG5vcm1hbGx5IGJlCisgKiByZXBvcnRlZCBhcyBhbiBFeHRJTlQgaW50ZXJydXB0IGluIHRoZSBNUCB0YWJsZS4gIFdpdGggQUNQSQorICogdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBFeHRJTlQgaW50ZXJydXB0cywgYW5kIGluIHRoZSBhYnNlbmNlCisgKiBvZiBhbiBvdmVycmlkZSBpdCB3b3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5IElTQSBJL08gQVBJQworICogaW50ZXJydXB0LCB0aGF0IGlzIGVkZ2UtdHJpZ2dlcmVkIGFuZCB1bm1hc2tlZCBieSBkZWZhdWx0LiAgV2UKKyAqIHVzZWQgdG8gZG8gdGhpcywgYnV0IGl0IGNhdXNlZCBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMgYmVjYXVzZQorICogb2YgdGhlIE5NSSB3YXRjaGRvZyBhbmQgc29tZXRpbWVzIElSUTAgb2YgdGhlIDgyNTQgdGltZXIgdXNpbmcKKyAqIHRoZSBzYW1lIEV4dElOVCBjYXNjYWRlIGludGVycnVwdCB0byBkcml2ZSB0aGUgbG9jYWwgQVBJQyBvZiB0aGUKKyAqIGJvb3RzdHJhcCBwcm9jZXNzb3IuICBUaGVyZWZvcmUgd2UgcmVmcmFpbiBmcm9tIHJvdXRpbmcgSVJRMiB0bworICogdGhlIEkvTyBBUElDIGluIGFsbCBjYXNlcyBub3cuICBObyBhY3R1YWwgZGV2aWNlIHNob3VsZCByZXF1ZXN0CisgKiBpdCBhbnl3YXkuICAtLW1hY3JvCisgKi8KKyNkZWZpbmUgUElDX0lSUVMJKDEgPDwgUElDX0NBU0NBREVfSVIpCisKK3ZvaWQgX19pbml0IHNldHVwX0lPX0FQSUModm9pZCkKK3sKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwllbmFibGVfSU9fQVBJQygpOworI2Vsc2UKKwkvKgorCSAqIGNhbGxpbmcgZW5hYmxlX0lPX0FQSUMoKSBpcyBtb3ZlZCB0byBzZXR1cF9sb2NhbF9BUElDIGZvciBCUAorCSAqLworI2VuZGlmCisKKwlpb19hcGljX2lycXMgPSB+UElDX0lSUVM7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJFTkFCTElORyBJTy1BUElDIElSUXNcbiIpOworCS8qCisgICAgICAgICAqIFNldCB1cCBJTy1BUElDIElSUSByb3V0aW5nLgorICAgICAgICAgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCFhY3BpX2lvYXBpYykKKwkJc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYygpOworI2VuZGlmCisJc3luY19BcmJfSURzKCk7CisJc2V0dXBfSU9fQVBJQ19pcnFzKCk7CisJaW5pdF9JT19BUElDX3RyYXBzKCk7CisJY2hlY2tfdGltZXIoKTsKK30KKworLyoKKyAqICAgICAgQ2FsbGVkIGFmdGVyIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4gSWYgd2UgZGlkbnQgZmluZCBhbnkKKyAqICAgICAgQVBJQyBidWdzIHRoZW4gd2UgY2FuIGFsbG93IHRoZSBtb2RpZnkgZmFzdCBwYXRoCisgKi8KKworc3RhdGljIGludCBfX2luaXQgaW9fYXBpY19idWdfZmluYWxpemUodm9pZCkKK3sKKwlpZiAoc2lzX2FwaWNfYnVnID09IC0xKQorCQlzaXNfYXBpY19idWcgPSAwOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGlvX2FwaWNfYnVnX2ZpbmFsaXplKTsKKworc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhIHsKKwlzdHJ1Y3Qgc3lzX2RldmljZSBkZXY7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnlbMF07Cit9Oworc3RhdGljIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqIG1wX2lvYXBpY19kYXRhW01BWF9JT19BUElDU107CisKK3N0YXRpYyBpbnQgaW9hcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7CisJaW50IGk7CisKKwlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOworCWVudHJ5ID0gZGF0YS0+ZW50cnk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY19yZWdpc3RlcnNbZGV2LT5pZF07IGkgKyssIGVudHJ5ICsrICkKKwkJKmVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoZGV2LT5pZCwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpb2FwaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OworCXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKKwlpbnQgaTsKKworCWRhdGEgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEsIGRldik7CisJZW50cnkgPSBkYXRhLT5lbnRyeTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoZGV2LT5pZCwgMCk7CisJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkKSB7CisJCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1tkZXYtPmlkXS5tcF9hcGljaWQ7CisJCWlvX2FwaWNfd3JpdGUoZGV2LT5pZCwgMCwgcmVnXzAwLnJhdyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY19yZWdpc3RlcnNbZGV2LT5pZF07IGkrKykKKwkJaW9hcGljX3dyaXRlX2VudHJ5KGRldi0+aWQsIGksIGVudHJ5W2ldKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpb2FwaWNfc3lzZGV2X2NsYXNzID0geworCS5uYW1lID0gImlvYXBpYyIsCisJLnN1c3BlbmQgPSBpb2FwaWNfc3VzcGVuZCwKKwkucmVzdW1lID0gaW9hcGljX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlvYXBpY19pbml0X3N5c2ZzKHZvaWQpCit7CisJc3RydWN0IHN5c19kZXZpY2UgKiBkZXY7CisJaW50IGksIHNpemUsIGVycm9yOworCisJZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmlvYXBpY19zeXNkZXZfY2xhc3MpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKyApIHsKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3lzX2RldmljZSkgKyBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldCisJCQkqIHNpemVvZihzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSk7CisJCW1wX2lvYXBpY19kYXRhW2ldID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtcF9pb2FwaWNfZGF0YVtpXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXNwZW5kL3Jlc3VtZSBJT0FQSUMgJWRcbiIsIGkpOworCQkJY29udGludWU7CisJCX0KKwkJZGV2ID0gJm1wX2lvYXBpY19kYXRhW2ldLT5kZXY7CisJCWRldi0+aWQgPSBpOworCQlkZXYtPmNscyA9ICZpb2FwaWNfc3lzZGV2X2NsYXNzOworCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcihkZXYpOworCQlpZiAoZXJyb3IpIHsKKwkJCWtmcmVlKG1wX2lvYXBpY19kYXRhW2ldKTsKKwkJCW1wX2lvYXBpY19kYXRhW2ldID0gTlVMTDsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2RldmljZV9pbml0Y2FsbChpb2FwaWNfaW5pdF9zeXNmcyk7CisKKy8qCisgKiBEeW5hbWljIGlycSBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0aW9uCisgKi8KK3Vuc2lnbmVkIGludCBjcmVhdGVfaXJxX25yKHVuc2lnbmVkIGludCBpcnFfd2FudCkKK3sKKwkvKiBBbGxvY2F0ZSBhbiB1bnVzZWQgaXJxICovCisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgbmV3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycV9jZmcgKmNmZ19uZXc7CisKKwlpcnFfd2FudCA9IG5yX2lycXMgLSAxOworCisJaXJxID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlmb3IgKG5ldyA9IGlycV93YW50OyBuZXcgPiAwOyBuZXctLSkgeworCQlpZiAocGxhdGZvcm1fbGVnYWN5X2lycShuZXcpKQorCQkJY29udGludWU7CisJCWNmZ19uZXcgPSBpcnFfY2ZnKG5ldyk7CisJCWlmIChjZmdfbmV3ICYmIGNmZ19uZXctPnZlY3RvciAhPSAwKQorCQkJY29udGludWU7CisJCS8qIGNoZWNrIGlmIG5lZWQgdG8gY3JlYXRlIG9uZSAqLworCQlpZiAoIWNmZ19uZXcpCisJCQljZmdfbmV3ID0gaXJxX2NmZ19hbGxvYyhuZXcpOworCQlpZiAoX19hc3NpZ25faXJxX3ZlY3RvcihuZXcsIFRBUkdFVF9DUFVTKSA9PSAwKQorCQkJaXJxID0gbmV3OworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKworCWlmIChpcnEgPiAwKSB7CisJCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKKwl9CisJcmV0dXJuIGlycTsKK30KKworaW50IGNyZWF0ZV9pcnEodm9pZCkKK3sKKwlpbnQgaXJxOworCisJaXJxID0gY3JlYXRlX2lycV9ucihucl9pcnFzIC0gMSk7CisKKwlpZiAoaXJxID09IDApCisJCWlycSA9IC0xOworCisJcmV0dXJuIGlycTsKK30KKwordm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWZyZWVfaXJ0ZShpcnEpOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJX19jbGVhcl9pcnFfdmVjdG9yKGlycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIE1TSSBtZXNzYWdlIGNvbXBvc2l0aW9uCisgKi8KKyNpZmRlZiBDT05GSUdfUENJX01TSQorc3RhdGljIGludCBtc2lfY29tcG9zZV9tc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGRlc3Q7CisJY3B1bWFza190IHRtcDsKKworCXRtcCA9IFRBUkdFVF9DUFVTOworCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgdG1wKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKKwkJc3RydWN0IGlydGUgaXJ0ZTsKKwkJaW50IGlyX2luZGV4OworCQl1MTYgc3ViX2hhbmRsZTsKKworCQlpcl9pbmRleCA9IG1hcF9pcnFfdG9faXJ0ZV9oYW5kbGUoaXJxLCAmc3ViX2hhbmRsZSk7CisJCUJVR19PTihpcl9pbmRleCA9PSAtMSk7CisKKwkJbWVtc2V0ICgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKKworCQlpcnRlLnByZXNlbnQgPSAxOworCQlpcnRlLmRzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKKwkJaXJ0ZS50cmlnZ2VyX21vZGUgPSAwOyAvKiBlZGdlICovCisJCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCQlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOworCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CisKKwkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKKwkJbXNnLT5kYXRhID0gc3ViX2hhbmRsZTsKKwkJbXNnLT5hZGRyZXNzX2xvID0gTVNJX0FERFJfQkFTRV9MTyB8IE1TSV9BRERSX0lSX0VYVF9JTlQgfAorCQkJCSAgTVNJX0FERFJfSVJfU0hWIHwKKwkJCQkgIE1TSV9BRERSX0lSX0lOREVYMShpcl9pbmRleCkgfAorCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgyKGlyX2luZGV4KTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKKwkJbXNnLT5hZGRyZXNzX2xvID0KKwkJCU1TSV9BRERSX0JBU0VfTE8gfAorCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KKwkJCQlNU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUw6CisJCQkJTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwpIHwKKwkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/CisJCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVOgorCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSSkgfAorCQkJTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCQltc2ctPmRhdGEgPQorCQkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKKwkJCU1TSV9EQVRBX0xFVkVMX0FTU0VSVCB8CisJCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPworCQkJCU1TSV9EQVRBX0RFTElWRVJZX0ZJWEVEOgorCQkJCU1TSV9EQVRBX0RFTElWRVJZX0xPV1BSSSkgfAorCQkJTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIHNldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJCXJldHVybjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKKwlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisKKwlyZWFkX21zaV9tc2coaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyoKKyAqIE1pZ3JhdGUgdGhlIE1TSSBpcnEgdG8gYW5vdGhlciBjcHVtYXNrLiBUaGlzIG1pZ3JhdGlvbiBpcworICogZG9uZSBpbiB0aGUgcHJvY2VzcyBjb250ZXh0IHVzaW5nIGludGVycnVwdC1yZW1hcHBpbmcgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGlyX3NldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJY3B1bWFza190IHRtcCwgY2xlYW51cF9tYXNrOworCXN0cnVjdCBpcnRlIGlydGU7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJaWYgKGdldF9pcnRlKGlycSwgJmlydGUpKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOworCisJLyoKKwkgKiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgSVJURSB3aXRoIHRoZSBuZXcgZGVzdGluYXRpb24gYW5kIHZlY3Rvci4KKwkgKi8KKwltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKKworCS8qCisJICogQWZ0ZXIgdGhpcyBwb2ludCwgYWxsIHRoZSBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgYXJyaXZpbmcKKwkgKiBhdCB0aGUgbmV3IGRlc3RpbmF0aW9uLiBTbywgdGltZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cworCSAqIHZlY3RvciBhbGxvY2F0aW9uLgorCSAqLworCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHsKKwkJY3B1c19hbmQoY2xlYW51cF9tYXNrLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKKwkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQgPSBjcHVzX3dlaWdodChjbGVhbnVwX21hc2spOworCQlzZW5kX0lQSV9tYXNrKGNsZWFudXBfbWFzaywgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOworCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOworCX0KKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworLyoKKyAqIElSUSBDaGlwIGZvciBNU0kgUENJL1BDSS1YL1BDSS1FeHByZXNzIERldmljZXMsCisgKiB3aGljaCBpbXBsZW1lbnQgdGhlIE1TSSBvciBNU0ktWCBDYXBhYmlsaXR5IFN0cnVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfY2hpcCA9IHsKKwkubmFtZQkJPSAiUENJLU1TSSIsCisJLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKKwkubWFzawkJPSBtYXNrX21zaV9pcnEsCisJLmFjawkJPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X21zaV9pcnFfYWZmaW5pdHksCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2lyX2NoaXAgPSB7CisJLm5hbWUJCT0gIklSLVBDSS1NU0kiLAorCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCisJLm1hc2sJCT0gbWFza19tc2lfaXJxLAorCS5hY2sJCT0gYWNrX3gyYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gaXJfc2V0X21zaV9pcnFfYWZmaW5pdHksCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCisvKgorICogTWFwIHRoZSBQQ0kgZGV2IHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlbWFwcGluZyBoYXJkd2FyZSB1bml0CisgKiBhbmQgYWxsb2NhdGUgJ252ZWMnIGNvbnNlY3V0aXZlIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cmllcworICogaW4gaXQuCisgKi8KK3N0YXRpYyBpbnQgbXNpX2FsbG9jX2lydGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlycSwgaW50IG52ZWMpCit7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKKwlpbnQgaW5kZXg7CisKKwlpb21tdSA9IG1hcF9kZXZfdG9faXIoZGV2KTsKKwlpZiAoIWlvbW11KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlVuYWJsZSB0byBtYXAgUENJICVzIHRvIGlvbW11XG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaW5kZXggPSBhbGxvY19pcnRlKGlvbW11LCBpcnEsIG52ZWMpOworCWlmIChpbmRleCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlICVkIElSVEUgZm9yIFBDSSAlc1xuIiwgbnZlYywKKwkJICAgICAgIHBjaV9uYW1lKGRldikpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisJcmV0dXJuIGluZGV4OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIGludCBpcnEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisKKwlyZXQgPSBtc2lfY29tcG9zZV9tc2coZGV2LCBpcnEsICZtc2cpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc2V0X2lycV9tc2koaXJxLCBkZXNjKTsKKwl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgeworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQkvKgorCQkgKiBpcnEgbWlncmF0aW9uIGluIHByb2Nlc3MgY29udGV4dAorCQkgKi8KKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2lyX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKwl9IGVsc2UKKyNlbmRpZgorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJpcnEgJWQgZm9yIE1TSS9NU0ktWFxuIiwgaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGJ1aWxkX2lycV9mb3JfcGNpX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpcnEgPSBkZXYtPmJ1cy0+bnVtYmVyOworCWlycSA8PD0gODsKKwlpcnEgfD0gZGV2LT5kZXZmbjsKKwlpcnEgPDw9IDEyOworCisJcmV0dXJuIGlycTsKK30KKworaW50IGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpcnFfd2FudDsKKworCWlycV93YW50ID0gYnVpbGRfaXJxX2Zvcl9wY2lfZGV2KGRldikgKyAweDEwMDsKKworCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQpOworCWlmIChpcnEgPT0gMCkKKwkJcmV0dXJuIC0xOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCWdvdG8gbm9faXI7CisKKwlyZXQgPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7Citub19pcjoKKyNlbmRpZgorCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBkZXNjLCBpcnEpOworCWlmIChyZXQgPCAwKSB7CisJCWRlc3Ryb3lfaXJxKGlycSk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK2Vycm9yOgorCWRlc3Ryb3lfaXJxKGlycSk7CisJcmV0dXJuIHJldDsKKyNlbmRpZgorfQorCitpbnQgYXJjaF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0LCBzdWJfaGFuZGxlOworCXN0cnVjdCBtc2lfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSAwOworCWludCBpbmRleCA9IDA7CisjZW5kaWYKKworCWlycV93YW50ID0gYnVpbGRfaXJxX2Zvcl9wY2lfZGV2KGRldikgKyAweDEwMDsKKwlzdWJfaGFuZGxlID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQtLSk7CisJCWlmIChpcnEgPT0gMCkKKwkJCXJldHVybiAtMTsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCQlnb3RvIG5vX2lyOworCisJCWlmICghc3ViX2hhbmRsZSkgeworCQkJLyoKKwkJCSAqIGFsbG9jYXRlIHRoZSBjb25zZWN1dGl2ZSBibG9jayBvZiBJUlRFJ3MKKwkJCSAqIGZvciAnbnZlYycKKwkJCSAqLworCQkJaW5kZXggPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgbnZlYyk7CisJCQlpZiAoaW5kZXggPCAwKSB7CisJCQkJcmV0ID0gaW5kZXg7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOworCQkJaWYgKCFpb21tdSkgeworCQkJCXJldCA9IC1FTk9FTlQ7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCS8qCisJCQkgKiBzZXR1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBpcnEgYW5kIHRoZSBJUlRFCisJCQkgKiBiYXNlIGluZGV4LCB0aGUgc3ViX2hhbmRsZSBwb2ludGluZyB0byB0aGUKKwkJCSAqIGFwcHJvcHJpYXRlIGludGVycnVwdCByZW1hcCB0YWJsZSBlbnRyeS4KKwkJCSAqLworCQkJc2V0X2lydGVfaXJxKGlycSwgaW9tbXUsIGluZGV4LCBzdWJfaGFuZGxlKTsKKwkJfQorbm9faXI6CisjZW5kaWYKKwkJcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIGRlc2MsIGlycSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3ViX2hhbmRsZSsrOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZGVzdHJveV9pcnEoaXJxKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWRlc3Ryb3lfaXJxKGlycSk7Cit9CisKKyNpZmRlZiBDT05GSUdfRE1BUgorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGRtYXJfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwljcHVtYXNrX3QgdG1wOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCisJZG1hcl9tc2lfcmVhZChpcnEsICZtc2cpOworCisJbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOworCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7CisJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOworCisJZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdHJ1Y3QgaXJxX2NoaXAgZG1hcl9tc2lfdHlwZSA9IHsKKwkubmFtZSA9ICJETUFSX01TSSIsCisJLnVubWFzayA9IGRtYXJfbXNpX3VubWFzaywKKwkubWFzayA9IGRtYXJfbXNpX21hc2ssCisJLmFjayA9IGFja19hcGljX2VkZ2UsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBkbWFyX21zaV9zZXRfYWZmaW5pdHksCisjZW5kaWYKKwkucmV0cmlnZ2VyID0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCitpbnQgYXJjaF9zZXR1cF9kbWFyX21zaSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCByZXQ7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJcmV0ID0gbXNpX2NvbXBvc2VfbXNnKE5VTEwsIGlycSwgJm1zZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZkbWFyX21zaV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsCisJCSJlZGdlIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBocGV0X21zaV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisKKwljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1c19lbXB0eSh0bXApKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWhwZXRfbXNpX3JlYWQoaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCWhwZXRfbXNpX3dyaXRlKGlycSwgJm1zZyk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CisJLm5hbWUgPSAiSFBFVF9NU0kiLAorCS51bm1hc2sgPSBocGV0X21zaV91bm1hc2ssCisJLm1hc2sgPSBocGV0X21zaV9tYXNrLAorCS5hY2sgPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gaHBldF9tc2lfc2V0X2FmZmluaXR5LAorI2VuZGlmCisJLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworaW50IGFyY2hfc2V0dXBfaHBldF9tc2kodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKworCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaHBldF9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZocGV0X21zaV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsCisJCSJlZGdlIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KKy8qCisgKiBIeXBlcnRyYW5zcG9ydCBpbnRlcnJ1cHQgc3VwcG9ydAorICovCisjaWZkZWYgQ09ORklHX0hUX0lSUQorCisjaWZkZWYgQ09ORklHX1NNUAorCitzdGF0aWMgdm9pZCB0YXJnZXRfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCB1OCB2ZWN0b3IpCit7CisJc3RydWN0IGh0X2lycV9tc2cgbXNnOworCWZldGNoX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKKworCW1zZy5hZGRyZXNzX2xvICY9IH4oSFRfSVJRX0xPV19WRUNUT1JfTUFTSyB8IEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLKTsKKwltc2cuYWRkcmVzc19oaSAmPSB+KEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSyk7CisKKwltc2cuYWRkcmVzc19sbyB8PSBIVF9JUlFfTE9XX1ZFQ1RPUih2ZWN0b3IpIHwgSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOworCW1zZy5hZGRyZXNzX2hpIHw9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CisKKwl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwljcHVtYXNrX3QgdG1wOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCisJdGFyZ2V0X2h0X2lycShpcnEsIGRlc3QsIGNmZy0+dmVjdG9yKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBodF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiUENJLUhUIiwKKwkubWFzawkJPSBtYXNrX2h0X2lycSwKKwkudW5tYXNrCQk9IHVubWFza19odF9pcnEsCisJLmFjawkJPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X2h0X2lycV9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKK2ludCBhcmNoX3NldHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IGVycjsKKwljcHVtYXNrX3QgdG1wOworCisJdG1wID0gVEFSR0VUX0NQVVM7CisJZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCB0bXApOworCWlmICghZXJyKSB7CisJCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKKwkJdW5zaWduZWQgZGVzdDsKKworCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7CisJCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCQltc2cuYWRkcmVzc19oaSA9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CisKKwkJbXNnLmFkZHJlc3NfbG8gPQorCQkJSFRfSVJRX0xPV19CQVNFIHwKKwkJCUhUX0lSUV9MT1dfREVTVF9JRChkZXN0KSB8CisJCQlIVF9JUlFfTE9XX1ZFQ1RPUihjZmctPnZlY3RvcikgfAorCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KKwkJCQlIVF9JUlFfTE9XX0RNX1BIWVNJQ0FMIDoKKwkJCQlIVF9JUlFfTE9XX0RNX0xPR0lDQUwpIHwKKwkJCUhUX0lSUV9MT1dfUlFFT0lfRURHRSB8CisJCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPworCQkJCUhUX0lSUV9MT1dfTVRfRklYRUQgOgorCQkJCUhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRCkgfAorCQkJSFRfSVJRX0xPV19JUlFfTUFTS0VEOworCisJCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZodF9pcnFfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiaXJxICVkIGZvciBIVFxuIiwgaXJxKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZiAvKiBDT05GSUdfSFRfSVJRICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKgorICogUmUtdGFyZ2V0IHRoZSBpcnEgdG8gdGhlIHNwZWNpZmllZCBDUFUgYW5kIGVuYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiBsb2NhdGVkCisgKiBvbiB0aGUgc3BlY2lmaWVkIGJsYWRlIHRvIGFsbG93IHRoZSBzZW5kaW5nIG9mIE1TSXMgdG8gdGhlIHNwZWNpZmllZCBDUFUuCisgKi8KK2ludCBhcmNoX2VuYWJsZV91dl9pcnEoY2hhciAqaXJxX25hbWUsIHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUsIGludCBtbXJfYmxhZGUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQpCit7CisJY29uc3QgY3B1bWFza190ICplbGlnaWJsZV9jcHUgPSBnZXRfY3B1X21hc2soY3B1KTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCWludCBtbXJfcG5vZGU7CisJdW5zaWduZWQgbG9uZyBtbXJfdmFsdWU7CisJc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgKmVsaWdpYmxlX2NwdSk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm4gZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmdXZfaXJxX2NoaXAsIGhhbmRsZV9wZXJjcHVfaXJxLAorCQkJCSAgICAgIGlycV9uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCisJbW1yX3ZhbHVlID0gMDsKKwllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSkgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWVudHJ5LT52ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwllbnRyeS0+ZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCWVudHJ5LT5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCWVudHJ5LT5wb2xhcml0eSA9IDA7CisJZW50cnktPnRyaWdnZXIgPSAwOworCWVudHJ5LT5tYXNrID0gMDsKKwllbnRyeS0+ZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCgqZWxpZ2libGVfY3B1KTsKKworCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1tcl9ibGFkZSk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKKworCXJldHVybiBpcnE7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgTU1SIGxvY2F0ZWQgb24gdGhlIHNwZWNpZmllZCBibGFkZSBzbyB0aGF0IE1TSXMgYXJlCisgKiBsb25nZXIgYWxsb3dlZCB0byBiZSBzZW50LgorICovCit2b2lkIGFyY2hfZGlzYWJsZV91dl9pcnEoaW50IG1tcl9ibGFkZSwgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOworCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgbW1yX3Bub2RlOworCisJbW1yX3ZhbHVlID0gMDsKKwllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSkgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWVudHJ5LT5tYXNrID0gMTsKKworCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1tcl9ibGFkZSk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKK2ludCBfX2luaXQgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyAoaW50IGlvYXBpYykKK3sKKwl1bmlvbiBJT19BUElDX3JlZ18wMQlyZWdfMDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXM7Cit9CisKK2ludCBfX2luaXQgcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCWludCBpZHg7CisJaW50IG5yID0gMDsKKyNpZm5kZWYgQ09ORklHX1hFTgorCWludCBucl9taW4gPSAzMjsKKyNlbHNlCisJaW50IG5yX21pbiA9IE5SX0lSUVM7CisjZW5kaWYKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfaW9hcGljczsgaWR4KyspCisJCW5yICs9IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KSArIDE7CisKKwkvKiBkb3VibGUgaXQgZm9yIGhvdHBsdWcgYW5kIG1zaSBhbmQgbm1pICovCisJbnIgPDw9IDE7CisKKwkvKiBzb21ldGhpbmcgd3JvbmcgPyAqLworCWlmIChuciA8IG5yX21pbikKKwkJbnIgPSBucl9taW47CisKKwlyZXR1cm4gbnI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUEktYmFzZWQgSU9BUElDIENvbmZpZ3VyYXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQUNQSQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgoraW50IF9faW5pdCBpb19hcGljX2dldF91bmlxdWVfaWQoaW50IGlvYXBpYywgaW50IGFwaWNfaWQpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCXN0YXRpYyBwaHlzaWRfbWFza190IGFwaWNfaWRfbWFwID0gUEhZU0lEX01BU0tfTk9ORTsKKwlwaHlzaWRfbWFza190IHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpID0gMDsKKworCS8qCisJICogVGhlIFA0IHBsYXRmb3JtIHN1cHBvcnRzIHVwIHRvIDI1NiBBUElDIElEcyBvbiB0d28gc2VwYXJhdGUgQVBJQworCSAqIGJ1c2VzIChvbmUgZm9yIExBUElDcywgb25lIGZvciBJT0FQSUNzKSwgd2hlcmUgcHJlZGVjZXNzb3JzIG9ubHkKKwkgKiBzdXBwb3J0cyB1cCB0byAxNiBvbiBvbmUgc2hhcmVkIEFQSUMgYnVzLgorCSAqCisJICogVEJEOiBFeHBhbmQgTEFQSUMvSU9BUElDIHN1cHBvcnQgb24gUDQtY2xhc3Mgc3lzdGVtcyB0byB0YWtlIGZ1bGwKKwkgKiAgICAgIGFkdmFudGFnZSBvZiBuZXcgQVBJQyBidXMgYXJjaGl0ZWN0dXJlLgorCSAqLworCisJaWYgKHBoeXNpZHNfZW1wdHkoYXBpY19pZF9tYXApKQorCQlhcGljX2lkX21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCWlmIChhcGljX2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBJbnZhbGlkIGFwaWNfaWQgJWQsIHRyeWluZyAiCisJCQkiJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgcmVnXzAwLmJpdHMuSUQpOworCQlhcGljX2lkID0gcmVnXzAwLmJpdHMuSUQ7CisJfQorCisJLyoKKwkgKiBFdmVyeSBBUElDIGluIGEgc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCisJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCisJICovCisJaWYgKGNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBhcGljX2lkKSkgeworCisJCWZvciAoaSA9IDA7IGkgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCk7IGkrKykgeworCQkJaWYgKCFjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgaSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA9PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCisJCQlwYW5pYygiTWF4IGFwaWNfaWQgZXhjZWVkZWQhXG4iKTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBhcGljX2lkICVkIGFscmVhZHkgdXNlZCwgIgorCQkJInRyeWluZyAlZFxuIiwgaW9hcGljLCBhcGljX2lkLCBpKTsKKworCQlhcGljX2lkID0gaTsKKwl9CisKKwl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQoYXBpY19pZCk7CisJcGh5c2lkc19vcihhcGljX2lkX21hcCwgYXBpY19pZF9tYXAsIHRtcCk7CisKKwlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgeworCQlyZWdfMDAuYml0cy5JRCA9IGFwaWNfaWQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCWlvX2FwaWNfd3JpdGUoaW9hcGljLCAwLCByZWdfMDAucmF3KTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJCS8qIFNhbml0eSBjaGVjayAqLworCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgeworCQkJcHJpbnRrKCJJT0FQSUNbJWRdOiBVbmFibGUgdG8gY2hhbmdlIGFwaWNfaWQhXG4iLCBpb2FwaWMpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSJJT0FQSUNbJWRdOiBBc3NpZ25lZCBhcGljX2lkICVkXG4iLCBpb2FwaWMsIGFwaWNfaWQpOworCisJcmV0dXJuIGFwaWNfaWQ7Cit9CisKK2ludCBfX2luaXQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKK30KKyNlbmRpZgorCitpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCB0cmlnZ2VyaW5nLCBpbnQgcG9sYXJpdHkpCit7CisJaWYgKCFJT19BUElDX0lSUShpcnEpKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsS0VSTl9FUlIgIklPQVBJQ1slZF06IEludmFsaWQgcmVmZXJlbmNlIHRvIElSUSAwXG4iLAorCQkJaW9hcGljKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBJUlFzIDwgMTYgYXJlIGFscmVhZHkgaW4gdGhlIGlycV8yX3BpbltdIG1hcAorCSAqLworCWlmIChpcnEgPj0gMTYpCisJCWFkZF9waW5fdG9faXJxKGlycSwgaW9hcGljLCBwaW4pOworCisJc2V0dXBfSU9fQVBJQ19pcnEoaW9hcGljLCBwaW4sIGlycSwgdHJpZ2dlcmluZywgcG9sYXJpdHkpOworCisJcmV0dXJuIDA7Cit9CisKKworaW50IGFjcGlfZ2V0X292ZXJyaWRlX2lycShpbnQgYnVzX2lycSwgaW50ICp0cmlnZ2VyLCBpbnQgKnBvbGFyaXR5KQoreworCWludCBpOworCisJaWYgKHNraXBfaW9hcGljX3NldHVwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKKwkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSBtcF9JTlQgJiYKKwkJICAgIG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGJ1c19pcnEpCisJCQlicmVhazsKKwlpZiAoaSA+PSBtcF9pcnFfZW50cmllcykKKwkJcmV0dXJuIC0xOworCisJKnRyaWdnZXIgPSBpcnFfdHJpZ2dlcihpKTsKKwkqcG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgaXMgb25seSBhIGhlbHBlciBmb3IgdGhlIGkzODYgc21wIGJvb3QgcHJvY2VzcyB3aGVyZQorICogd2UgbmVlZCB0byByZXByb2dyYW0gdGhlIGlvcmVkdGJscyB0byBjYXRlciBmb3IgdGhlIGNwdXMgd2hpY2ggaGF2ZSBjb21lIG9ubGluZQorICogc28gbWFzayBpbiBhbGwgY2FzZXMgc2hvdWxkIHNpbXBseSBiZSBUQVJHRVRfQ1BVUworICovCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCkKK3sKKwlpbnQgcGluLCBpb2FwaWMsIGlycSwgaXJxX2VudHJ5OworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKKwkJcmV0dXJuOworCisJZm9yIChpb2FwaWMgPSAwOyBpb2FwaWMgPCBucl9pb2FwaWNzOyBpb2FwaWMrKykgeworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbaW9hcGljXTsgcGluKyspIHsKKwkJCWlycV9lbnRyeSA9IGZpbmRfaXJxX2VudHJ5KGlvYXBpYywgcGluLCBtcF9JTlQpOworCQkJaWYgKGlycV9lbnRyeSA9PSAtMSkKKwkJCQljb250aW51ZTsKKwkJCWlycSA9IHBpbl8yX2lycShpcnFfZW50cnksIGlvYXBpYywgcGluKTsKKworCQkJLyogc2V0dXBfSU9fQVBJQ19pcnFzIGNvdWxkIGZhaWwgdG8gZ2V0IHZlY3RvciBmb3Igc29tZSBkZXZpY2UKKwkJCSAqIHdoZW4geW91IGhhdmUgdG9vIG1hbnkgZGV2aWNlcywgYmVjYXVzZSBhdCB0aGF0IHRpbWUgb25seSBib290CisJCQkgKiBjcHUgaXMgb25saW5lLgorCQkJICovCisJCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCQlpZiAoIWNmZy0+dmVjdG9yKQorCQkJCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsCisJCQkJCQkgIGlycV90cmlnZ2VyKGlycV9lbnRyeSksCisJCQkJCQkgIGlycV9wb2xhcml0eShpcnFfZW50cnkpKTsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQkJZWxzZSBpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCQlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycShpcnEsIFRBUkdFVF9DUFVTKTsKKyNlbmRpZgorCQkJZWxzZQorCQkJCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKGlycSwgVEFSR0VUX0NQVVMpOworCQl9CisKKwl9Cit9CisjZW5kaWYKKworI2RlZmluZSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFIDExCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXNvdXJjZXM7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX2luaXQgaW9hcGljX3NldHVwX3Jlc291cmNlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwljaGFyICptZW07CisJaW50IGk7CisKKwlpZiAobnJfaW9hcGljcyA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCW4gPSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFICsgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSk7CisJbiAqPSBucl9pb2FwaWNzOworCisJbWVtID0gYWxsb2NfYm9vdG1lbShuKTsKKwlyZXMgPSAodm9pZCAqKW1lbTsKKworCWlmIChtZW0gIT0gTlVMTCkgeworCQltZW0gKz0gc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBucl9pb2FwaWNzOworCisJCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJCXJlc1tpXS5uYW1lID0gbWVtOworCQkJcmVzW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1k7CisJCQlzcHJpbnRmKG1lbSwgICJJT0FQSUMgJXUiLCBpKTsKKwkJCW1lbSArPSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFOworCQl9CisJfQorCisJaW9hcGljX3Jlc291cmNlcyA9IHJlczsKKworCXJldHVybiByZXM7Cit9CisKK3ZvaWQgX19pbml0IGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpb2FwaWNfcGh5cywgaWR4ID0gRklYX0lPX0FQSUNfQkFTRV8wOworCXN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3JlczsKKwlpbnQgaTsKKworCWlycV8yX3Bpbl9pbml0KCk7CisJaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCWlmIChzbXBfZm91bmRfY29uZmlnKSB7CisJCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBfYXBpY2FkZHI7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQkJaWYgKCFpb2FwaWNfcGh5cykgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiV0FSTklORzogYm9ndXMgemVybyBJTy1BUElDICIKKwkJCQkgICAgICAgImFkZHJlc3MgZm91bmQgaW4gTVBUQUJMRSwgIgorCQkJCSAgICAgICAiZGlzYWJsaW5nIElPL0FQSUMgc3VwcG9ydCFcbiIpOworCQkJCXNtcF9mb3VuZF9jb25maWcgPSAwOworCQkJCXNraXBfaW9hcGljX3NldHVwID0gMTsKKwkJCQlnb3RvIGZha2VfaW9hcGljX3BhZ2U7CisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitmYWtlX2lvYXBpY19wYWdlOgorI2VuZGlmCisJCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQorCQkJCWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKKwkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7CisJCX0KKwkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCisJCQkgICAgIm1hcHBlZCBJT0FQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKKwkJCSAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKKwkJaWR4Kys7CisKKwkJaWYgKGlvYXBpY19yZXMgIT0gTlVMTCkgeworCQkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKKwkJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgKDQgKiAxMDI0KSAtIDE7CisJCQlpb2FwaWNfcmVzKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHJlc291cmNlICpyID0gaW9hcGljX3Jlc291cmNlczsKKworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJJTyBBUElDIHJlc291cmNlcyBjb3VsZCBiZSBub3QgYmUgYWxsb2NhdGVkLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHIpOworCQlyKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEluc2VydCB0aGUgSU8gQVBJQyByZXNvdXJjZXMgYWZ0ZXIgUENJIGluaXRpYWxpemF0aW9uIGhhcyBvY2N1cmVkIHRvIGhhbmRsZQorICogSU8gQVBJQ1MgdGhhdCBhcmUgbWFwcGVkIGluIG9uIGEgQkFSIGluIFBDSSBzcGFjZS4gKi8KK2xhdGVfaW5pdGNhbGwoaW9hcGljX2luc2VydF9yZXNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MTAyODkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MDggKzAsMCBAQAotLyoKLSAqCUludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgbXVsdGktUGVudGl1bSBob3N0cy4KLSAqCi0gKglDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIsIEhham5hbGthIFN6YWJvCi0gKgotICoJTWFueSB0aGFua3MgdG8gU3RpZyBWZW5hYXMgZm9yIHRyeWluZyBvdXQgY291bnRsZXNzIGV4cGVyaW1lbnRhbAotICoJcGF0Y2hlcyBhbmQgcmVwb3J0aW5nL2RlYnVnZ2luZyBwcm9ibGVtcyBwYXRpZW50bHkhCi0gKgotICoJKGMpIDE5OTksIE11bHRpcGxlIElPLUFQSUMgc3VwcG9ydCwgZGV2ZWxvcGVkIGJ5Ci0gKglLZW4taWNoaSBZYWt1IDx5YWt1QGNzczEua2JuZXMubmVjLmNvLmpwPiBhbmQKLSAqICAgICAgSGlkZW1pIEtpc2hpbW90byA8a2lzaW1vdG9AY3NzMS5rYm5lcy5uZWMuY28uanA+LAotICoJZnVydGhlciB0ZXN0ZWQgYW5kIGNsZWFuZWQgdXAgYnkgWmFjaCBCcm93biA8emFiQHJlZGhhdC5jb20+Ci0gKglhbmQgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkKLSAqCVBhdWwgRGllZmVuYmF1Z2gJOglBZGRlZCBmdWxsIEFDUEkgc3VwcG9ydAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KLSNpbmNsdWRlIDxhc20vbm1pLmg+Ci0jaW5jbHVkZSA8YXNtL21zaWRlZi5oPgotI2luY2x1ZGUgPGFzbS9oeXBlcnRyYW5zcG9ydC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0KLSNkZWZpbmUgX19hcGljZGVidWdpbml0KHR5cGUpIHN0YXRpYyB0eXBlIF9faW5pdAotCi1pbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKLWF0b21pY190IGlycV9taXNfY291bnQ7Ci0KLS8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCi1zdGF0aWMgc3RydWN0IHsgaW50IHBpbiwgYXBpYzsgfSBpb2FwaWNfaTgyNTkgPSB7IC0xLCAtMSB9OwotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlvYXBpY19sb2NrKTsKLURFRklORV9TUElOTE9DSyh2ZWN0b3JfbG9jayk7Ci0KLWludCB0aW1lcl90aHJvdWdoXzgyNTkgX19pbml0ZGF0YTsKLQotLyoKLSAqCUlzIHRoZSBTaVMgQVBJQyBybXcgYnVnIHByZXNlbnQgPwotICoJLTEgPSBkb24ndCBrbm93LCAwID0gbm8sIDEgPSB5ZXMKLSAqLwotaW50IHNpc19hcGljX2J1ZyA9IC0xOwotCi0vKgotICogIyBvZiBJUlEgcm91dGluZyByZWdpc3RlcnMKLSAqLwotaW50IG5yX2lvYXBpY19yZWdpc3RlcnNbTUFYX0lPX0FQSUNTXTsKLQotLyogSS9PIEFQSUMgZW50cmllcyAqLwotc3RydWN0IG1wX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOwotaW50IG5yX2lvYXBpY3M7Ci0KLS8qIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOwotCi0vKiAjIG9mIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotaW50IG1wX2lycV9lbnRyaWVzOwotCi0jaWYgZGVmaW5lZCAoQ09ORklHX01DQSkgfHwgZGVmaW5lZCAoQ09ORklHX0VJU0EpCi1pbnQgbXBfYnVzX2lkX3RvX3R5cGVbTUFYX01QX0JVU1NFU107Ci0jZW5kaWYKLQotREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOwotCi1zdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKLQotLyoKLSAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4KLSAqIGJlIGNoYW5nZWQgYW55dGltZS4KLSAqLwotI2RlZmluZSBNQVhfUExVU19TSEFSRURfSVJRUyBOUl9JUlFTCi0jZGVmaW5lIFBJTl9NQVBfU0laRSAoTUFYX1BMVVNfU0hBUkVEX0lSUVMgKyBOUl9JUlFTKQotCi0vKgotICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCi0gKgotICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncwotICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0IHsKLQlpbnQgYXBpYywgcGluLCBuZXh0OwotfSBpcnFfMl9waW5bUElOX01BUF9TSVpFXTsKLQotc3RydWN0IGlvX2FwaWMgewotCXVuc2lnbmVkIGludCBpbmRleDsKLQl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwotCXVuc2lnbmVkIGludCBkYXRhOwotfTsKLQotc3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpY19iYXNlKGludCBpZHgpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKikgX19maXhfdG9fdmlydChGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgpCi0JCSsgKG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljYWRkciAmIH5QQUdFX01BU0spOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCi17Ci0Jc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKLQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOwotCXJldHVybiByZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3dyaXRlKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKLQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOwotCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOwotfQotCi0vKgotICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKLSAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCi0gKgotICogT2xkZXIgU2lTIEFQSUMgcmVxdWlyZXMgd2UgcmV3cml0ZSB0aGUgaW5kZXggcmVnaXN0ZXIKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0Jdm9sYXRpbGUgc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKLQlpZiAoc2lzX2FwaWNfYnVnKQotCQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOwotCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOwotfQotCi11bmlvbiBlbnRyeV91bmlvbiB7Ci0Jc3RydWN0IHsgdTMyIHcxLCB3MjsgfTsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBpb2FwaWNfcmVhZF9lbnRyeShpbnQgYXBpYywgaW50IHBpbikKLXsKLQl1bmlvbiBlbnRyeV91bmlvbiBldTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWV1LncxID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyAyICogcGluKTsKLQlldS53MiA9IGlvX2FwaWNfcmVhZChhcGljLCAweDExICsgMiAqIHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXUuZW50cnk7Ci19Ci0KLS8qCi0gKiBXaGVuIHdlIHdyaXRlIGEgbmV3IElPIEFQSUMgcm91dGluZyBlbnRyeSwgd2UgbmVlZCB0byB3cml0ZSB0aGUgaGlnaAotICogd29yZCBmaXJzdCEgSWYgdGhlIG1hc2sgYml0IGluIHRoZSBsb3cgd29yZCBpcyBjbGVhciwgd2Ugd2lsbCBlbmFibGUKLSAqIHRoZSBpbnRlcnJ1cHQsIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW50cnkgaXMgZnVsbHkgcG9wdWxhdGVkCi0gKiBiZWZvcmUgdGhhdCBoYXBwZW5zLgotICovCi1zdGF0aWMgdm9pZAotX19pb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCi17Ci0JdW5pb24gZW50cnlfdW5pb24gZXU7Ci0JZXUuZW50cnkgPSBlOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKLX0KLQotc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JX19pb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogV2hlbiB3ZSBtYXNrIGFuIElPIEFQSUMgcm91dGluZyBlbnRyeSwgd2UgbmVlZCB0byB3cml0ZSB0aGUgbG93Ci0gKiB3b3JkIGZpcnN0LCBpbiBvcmRlciB0byBzZXQgdGhlIG1hc2sgYml0IGJlZm9yZSB3ZSBjaGFuZ2UgdGhlCi0gKiBoaWdoIGJpdHMhCi0gKi8KLXN0YXRpYyB2b2lkIGlvYXBpY19tYXNrX2VudHJ5KGludCBhcGljLCBpbnQgcGluKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5pb24gZW50cnlfdW5pb24gZXUgPSB7IC5lbnRyeS5tYXNrID0gMSB9OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBUaGUgY29tbW9uIGNhc2UgaXMgMToxIElSUTwtPnBpbiBtYXBwaW5ncy4gU29tZXRpbWVzIHRoZXJlIGFyZQotICogc2hhcmVkIElTQS1zcGFjZSBJUlFzLCBzbyB3ZSBoYXZlIHRvIHN1cHBvcnQgdGhlbS4gV2UgYXJlIHN1cGVyCi0gKiBmYXN0IGluIHRoZSBjb21tb24gY2FzZSwgYW5kIGZhc3QgZm9yIHNoYXJlZCBJU0Etc3BhY2UgSVJRcy4KLSAqLwotc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnEodW5zaWduZWQgaW50IGlycSwgaW50IGFwaWMsIGludCBwaW4pCi17Ci0Jc3RhdGljIGludCBmaXJzdF9mcmVlX2VudHJ5ID0gTlJfSVJRUzsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCXdoaWxlIChlbnRyeS0+bmV4dCkKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQotCWlmIChlbnRyeS0+cGluICE9IC0xKSB7Ci0JCWVudHJ5LT5uZXh0ID0gZmlyc3RfZnJlZV9lbnRyeTsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQkJaWYgKCsrZmlyc3RfZnJlZV9lbnRyeSA+PSBQSU5fTUFQX1NJWkUpCi0JCQlwYW5pYygiaW9fYXBpYy5jOiB3aG9vcHMiKTsKLQl9Ci0JZW50cnktPmFwaWMgPSBhcGljOwotCWVudHJ5LT5waW4gPSBwaW47Ci19Ci0KLS8qCi0gKiBSZXJvdXRlIGFuIElSUSB0byBhIGRpZmZlcmVudCBwaW4uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCByZXBsYWNlX3Bpbl9hdF9pcnEodW5zaWduZWQgaW50IGlycSwKLQkJCQkgICAgICBpbnQgb2xkYXBpYywgaW50IG9sZHBpbiwKLQkJCQkgICAgICBpbnQgbmV3YXBpYywgaW50IG5ld3BpbikKLXsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCXdoaWxlICgxKSB7Ci0JCWlmIChlbnRyeS0+YXBpYyA9PSBvbGRhcGljICYmIGVudHJ5LT5waW4gPT0gb2xkcGluKSB7Ci0JCQllbnRyeS0+YXBpYyA9IG5ld2FwaWM7Ci0JCQllbnRyeS0+cGluID0gbmV3cGluOwotCQl9Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fbW9kaWZ5X0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGxvbmcgZW5hYmxlLCB1bnNpZ25lZCBsb25nIGRpc2FibGUpCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7Ci0JdW5zaWduZWQgaW50IHBpbiwgcmVnOwotCi0JZm9yICg7OykgewotCQlwaW4gPSBlbnRyeS0+cGluOwotCQlpZiAocGluID09IC0xKQotCQkJYnJlYWs7Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKLQkJcmVnICY9IH5kaXNhYmxlOwotCQlyZWcgfD0gZW5hYmxlOwotCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyLCByZWcpOwotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JfQotfQotCi0vKiBtYXNrID0gMSAqLwotc3RhdGljIHZvaWQgX19tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX19tb2RpZnlfSU9fQVBJQ19pcnEoaXJxLCBJT19BUElDX1JFRElSX01BU0tFRCwgMCk7Ci19Ci0KLS8qIG1hc2sgPSAwICovCi1zdGF0aWMgdm9pZCBfX3VubWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fbW9kaWZ5X0lPX0FQSUNfaXJxKGlycSwgMCwgSU9fQVBJQ19SRURJUl9NQVNLRUQpOwotfQotCi0vKiBtYXNrID0gMSwgdHJpZ2dlciA9IDAgKi8KLXN0YXRpYyB2b2lkIF9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fbW9kaWZ5X0lPX0FQSUNfaXJxKGlycSwgSU9fQVBJQ19SRURJUl9NQVNLRUQsCi0JCQkJSU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSKTsKLX0KLQotLyogbWFzayA9IDAsIHRyaWdnZXIgPSAxICovCi1zdGF0aWMgdm9pZCBfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX21vZGlmeV9JT19BUElDX2lycShpcnEsIElPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwKLQkJCQlJT19BUElDX1JFRElSX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JX19tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgdW5tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJfSU9fQVBJQ19waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4pCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkvKiBDaGVjayBkZWxpdmVyeV9tb2RlIHRvIGJlIHN1cmUgd2UncmUgbm90IGNsZWFyaW5nIGFuIFNNSSBwaW4gKi8KLQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JaWYgKGVudHJ5LmRlbGl2ZXJ5X21vZGUgPT0gZGVzdF9TTUkpCi0JCXJldHVybjsKLQotCS8qCi0JICogRGlzYWJsZSBpdCBpbiB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQlpb2FwaWNfbWFza19lbnRyeShhcGljLCBwaW4pOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbjsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspCi0JCQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgc2V0X2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGNwdW1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcGluOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCXVuc2lnbmVkIGludCBhcGljaWRfdmFsdWU7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgY3B1bWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXRtcCA9IFRBUkdFVF9DUFVTOwotCi0JY3B1c19hbmQoY3B1bWFzaywgdG1wLCBDUFVfTUFTS19BTEwpOwotCi0JYXBpY2lkX3ZhbHVlID0gY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2spOwotCS8qIFByZXBhcmUgdG8gZG8gdGhlIGlvX2FwaWNfd3JpdGUgKi8KLQlhcGljaWRfdmFsdWUgPSBhcGljaWRfdmFsdWUgPDwgMjQ7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JZm9yICg7OykgewotCQlwaW4gPSBlbnRyeS0+cGluOwotCQlpZiAocGluID09IC0xKQotCQkJYnJlYWs7Ci0JCWlvX2FwaWNfd3JpdGUoZW50cnktPmFwaWMsIDB4MTAgKyAxICsgcGluKjIsIGFwaWNpZF92YWx1ZSk7Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IGNwdW1hc2s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0lSUUJBTEFOQ0UpCi0jIGluY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JLyoga2VybmVsX3RocmVhZCgpICovCi0jIGluY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CS8qIGtzdGF0ICovCi0jIGluY2x1ZGUgPGxpbnV4L3NsYWIuaD4JCS8qIGttYWxsb2MoKSAqLwotIyBpbmNsdWRlIDxsaW51eC90aW1lci5oPgotCi0jZGVmaW5lIElSUUJBTEFOQ0VfQ0hFQ0tfQVJDSCAtOTk5Ci0jZGVmaW5lIE1BWF9CQUxBTkNFRF9JUlFfSU5URVJWQUwJKDUqSFopCi0jZGVmaW5lIE1JTl9CQUxBTkNFRF9JUlFfSU5URVJWQUwJKEhaLzIpCi0jZGVmaW5lIEJBTEFOQ0VEX0lSUV9NT1JFX0RFTFRBCQkoSFovMTApCi0jZGVmaW5lIEJBTEFOQ0VEX0lSUV9MRVNTX0RFTFRBCQkoSFopCi0KLXN0YXRpYyBpbnQgaXJxYmFsYW5jZV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5ID0gSVJRQkFMQU5DRV9DSEVDS19BUkNIOwotc3RhdGljIGludCBwaHlzaWNhbF9iYWxhbmNlIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgbG9uZyBiYWxhbmNlZF9pcnFfaW50ZXJ2YWwgX19yZWFkX21vc3RseSA9IE1BWF9CQUxBTkNFRF9JUlFfSU5URVJWQUw7Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NwdV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nICpsYXN0X2lycTsKLQl1bnNpZ25lZCBsb25nICppcnFfZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBpcnE7Ci19IGlycV9jcHVfZGF0YVtOUl9DUFVTXTsKLQotI2RlZmluZSBDUFVfSVJRKGNwdSkJCShpcnFfY3B1X2RhdGFbY3B1XS5pcnEpCi0jZGVmaW5lIExBU1RfQ1BVX0lSUShjcHUsIGlycSkgICAoaXJxX2NwdV9kYXRhW2NwdV0ubGFzdF9pcnFbaXJxXSkKLSNkZWZpbmUgSVJRX0RFTFRBKGNwdSwgaXJxKSAJKGlycV9jcHVfZGF0YVtjcHVdLmlycV9kZWx0YVtpcnFdKQotCi0jZGVmaW5lIElETEVfRU5PVUdIKGNwdSxub3cpIFwKLQkoaWRsZV9jcHUoY3B1KSAmJiAoKG5vdykgLSBwZXJfY3B1KGlycV9zdGF0LCAoY3B1KSkuaWRsZV90aW1lc3RhbXAgPiAxKSkKLQotI2RlZmluZSBJUlFfQUxMT1dFRChjcHUsIGFsbG93ZWRfbWFzaykJY3B1X2lzc2V0KGNwdSwgYWxsb3dlZF9tYXNrKQotCi0jZGVmaW5lIENQVV9UT19QQUNLQUdFSU5ERVgoaSkgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSkpKQotCi1zdGF0aWMgY3B1bWFza190IGJhbGFuY2VfaXJxX2FmZmluaXR5W05SX0lSUVNdID0gewotCVswIC4uLiBOUl9JUlFTLTFdID0gQ1BVX01BU0tfQUxMCi19OwotCi12b2lkIHNldF9iYWxhbmNlX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQliYWxhbmNlX2lycV9hZmZpbml0eVtpcnFdID0gbWFzazsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbW92ZShpbnQgY3Vycl9jcHUsIGNwdW1hc2tfdCBhbGxvd2VkX21hc2ssCi0JCQl1bnNpZ25lZCBsb25nIG5vdywgaW50IGRpcmVjdGlvbikKLXsKLQlpbnQgc2VhcmNoX2lkbGUgPSAxOwotCWludCBjcHUgPSBjdXJyX2NwdTsKLQotCWdvdG8gaW5zaWRlOwotCi0JZG8gewotCQlpZiAodW5saWtlbHkoY3B1ID09IGN1cnJfY3B1KSkKLQkJCXNlYXJjaF9pZGxlID0gMDsKLWluc2lkZToKLQkJaWYgKGRpcmVjdGlvbiA9PSAxKSB7Ci0JCQljcHUrKzsKLQkJCWlmIChjcHUgPj0gTlJfQ1BVUykKLQkJCQljcHUgPSAwOwotCQl9IGVsc2UgewotCQkJY3B1LS07Ci0JCQlpZiAoY3B1ID09IC0xKQotCQkJCWNwdSA9IE5SX0NQVVMtMTsKLQkJfQotCX0gd2hpbGUgKCFjcHVfb25saW5lKGNwdSkgfHwgIUlSUV9BTExPV0VEKGNwdSwgYWxsb3dlZF9tYXNrKSB8fAotCQkJKHNlYXJjaF9pZGxlICYmICFJRExFX0VOT1VHSChjcHUsIG5vdykpKTsKLQotCXJldHVybiBjcHU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiYWxhbmNlX2lycShpbnQgY3B1LCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQljcHVtYXNrX3QgYWxsb3dlZF9tYXNrOwotCXVuc2lnbmVkIGludCBuZXdfY3B1OwotCi0JaWYgKGlycWJhbGFuY2VfZGlzYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKGFsbG93ZWRfbWFzaywgY3B1X29ubGluZV9tYXAsIGJhbGFuY2VfaXJxX2FmZmluaXR5W2lycV0pOwotCW5ld19jcHUgPSBtb3ZlKGNwdSwgYWxsb3dlZF9tYXNrLCBub3csIDEpOwotCWlmIChjcHUgIT0gbmV3X2NwdSkKLQkJc2V0X3BlbmRpbmdfaXJxKGlycSwgY3B1bWFza19vZl9jcHUobmV3X2NwdSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcm90YXRlX2lycXNfYW1vbmdfY3B1cyh1bnNpZ25lZCBsb25nIHVzZWZ1bF9sb2FkX3RocmVzaG9sZCkKLXsKLQlpbnQgaSwgajsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQlpZiAoIWlycV9kZXNjW2pdLmFjdGlvbikKLQkJCQljb250aW51ZTsKLQkJCS8qIElzIGl0IGEgc2lnbmlmaWNhbnQgbG9hZCA/ICAqLwotCQkJaWYgKElSUV9ERUxUQShDUFVfVE9fUEFDS0FHRUlOREVYKGkpLCBqKSA8Ci0JCQkJCQl1c2VmdWxfbG9hZF90aHJlc2hvbGQpCi0JCQkJY29udGludWU7Ci0JCQliYWxhbmNlX2lycShpLCBqKTsKLQkJfQotCX0KLQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgPSBtYXgoKGxvbmcpTUlOX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTCwKLQkJYmFsYW5jZWRfaXJxX2ludGVydmFsIC0gQkFMQU5DRURfSVJRX0xFU1NfREVMVEEpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZG9faXJxX2JhbGFuY2Uodm9pZCkKLXsKLQlpbnQgaSwgajsKLQl1bnNpZ25lZCBsb25nIG1heF9jcHVfaXJxID0gMCwgbWluX2NwdV9pcnEgPSAofjApOwotCXVuc2lnbmVkIGxvbmcgbW92ZV90aGlzX2xvYWQgPSAwOwotCWludCBtYXhfbG9hZGVkID0gMCwgbWluX2xvYWRlZCA9IDA7Ci0JaW50IGxvYWQ7Ci0JdW5zaWduZWQgbG9uZyB1c2VmdWxfbG9hZF90aHJlc2hvbGQgPSBiYWxhbmNlZF9pcnFfaW50ZXJ2YWwgKyAxMDsKLQlpbnQgc2VsZWN0ZWRfaXJxOwotCWludCB0bXBfbG9hZGVkLCBmaXJzdF9hdHRlbXB0ID0gMTsKLQl1bnNpZ25lZCBsb25nIHRtcF9jcHVfaXJxOwotCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlID0gMDsKLQljcHVtYXNrX3QgYWxsb3dlZF9tYXNrLCB0YXJnZXRfY3B1X21hc2ssIHRtcDsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWludCBwYWNrYWdlX2luZGV4OwotCQlDUFVfSVJRKGkpID0gMDsKLQkJaWYgKCFjcHVfb25saW5lKGkpKQotCQkJY29udGludWU7Ci0JCXBhY2thZ2VfaW5kZXggPSBDUFVfVE9fUEFDS0FHRUlOREVYKGkpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHZhbHVlX25vdywgZGVsdGE7Ci0JCQkvKiBJcyB0aGlzIGFuIGFjdGl2ZSBJUlEgb3IgYmFsYW5jaW5nIGRpc2FibGVkID8gKi8KLQkJCWlmICghaXJxX2Rlc2Nbal0uYWN0aW9uIHx8IGlycV9iYWxhbmNpbmdfZGlzYWJsZWQoaikpCi0JCQkJY29udGludWU7Ci0JCQlpZiAocGFja2FnZV9pbmRleCA9PSBpKQotCQkJCUlSUV9ERUxUQShwYWNrYWdlX2luZGV4LCBqKSA9IDA7Ci0JCQkvKiBEZXRlcm1pbmUgdGhlIHRvdGFsIGNvdW50IHBlciBwcm9jZXNzb3IgcGVyIElSUSAqLwotCQkJdmFsdWVfbm93ID0gKHVuc2lnbmVkIGxvbmcpIGtzdGF0X2NwdShpKS5pcnFzW2pdOwotCi0JCQkvKiBEZXRlcm1pbmUgdGhlIGFjdGl2aXR5IHBlciBwcm9jZXNzb3IgcGVyIElSUSAqLwotCQkJZGVsdGEgPSB2YWx1ZV9ub3cgLSBMQVNUX0NQVV9JUlEoaSwgaik7Ci0KLQkJCS8qIFVwZGF0ZSBsYXN0X2NwdV9pcnFbXVtdIGZvciB0aGUgbmV4dCB0aW1lICovCi0JCQlMQVNUX0NQVV9JUlEoaSwgaikgPSB2YWx1ZV9ub3c7Ci0KLQkJCS8qIElnbm9yZSBJUlFzIHdob3NlIHJhdGUgaXMgbGVzcyB0aGFuIHRoZSBjbG9jayAqLwotCQkJaWYgKGRlbHRhIDwgdXNlZnVsX2xvYWRfdGhyZXNob2xkKQotCQkJCWNvbnRpbnVlOwotCQkJLyogdXBkYXRlIHRoZSBsb2FkIGZvciB0aGUgcHJvY2Vzc29yIG9yIHBhY2thZ2UgdG90YWwgKi8KLQkJCUlSUV9ERUxUQShwYWNrYWdlX2luZGV4LCBqKSArPSBkZWx0YTsKLQotCQkJLyogS2VlcCB0cmFjayBvZiB0aGUgaGlnaGVyIG51bWJlcmVkIHNpYmxpbmcgYXMgd2VsbCAqLwotCQkJaWYgKGkgIT0gcGFja2FnZV9pbmRleCkKLQkJCQlDUFVfSVJRKGkpICs9IGRlbHRhOwotCQkJLyoKLQkJCSAqIFdlIGhhdmUgc2libGluZyBBIGFuZCBzaWJsaW5nIEIgaW4gdGhlIHBhY2thZ2UKLQkJCSAqCi0JCQkgKiBjcHVfaXJxW0FdID0gbG9hZCBmb3IgY3B1IEEgKyBsb2FkIGZvciBjcHUgQgotCQkJICogY3B1X2lycVtCXSA9IGxvYWQgZm9yIGNwdSBCCi0JCQkgKi8KLQkJCUNQVV9JUlEocGFja2FnZV9pbmRleCkgKz0gZGVsdGE7Ci0JCX0KLQl9Ci0JLyogRmluZCB0aGUgbGVhc3QgbG9hZGVkIHByb2Nlc3NvciBwYWNrYWdlICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCWlmIChpICE9IENQVV9UT19QQUNLQUdFSU5ERVgoaSkpCi0JCQljb250aW51ZTsKLQkJaWYgKG1pbl9jcHVfaXJxID4gQ1BVX0lSUShpKSkgewotCQkJbWluX2NwdV9pcnEgPSBDUFVfSVJRKGkpOwotCQkJbWluX2xvYWRlZCA9IGk7Ci0JCX0KLQl9Ci0JbWF4X2NwdV9pcnEgPSBVTE9OR19NQVg7Ci0KLXRyeWFub3RoZXJjcHU6Ci0JLyoKLQkgKiBMb29rIGZvciBoZWF2aWVzdCBsb2FkZWQgcHJvY2Vzc29yLgotCSAqIFdlIG1heSBjb21lIGJhY2sgdG8gZ2V0IHRoZSBuZXh0IGhlYXZpZXN0IGxvYWRlZCBwcm9jZXNzb3IuCi0JICogU2tpcCBwcm9jZXNzb3JzIHdpdGggdHJpdmlhbCBsb2Fkcy4KLQkgKi8KLQl0bXBfY3B1X2lycSA9IDA7Ci0JdG1wX2xvYWRlZCA9IC0xOwotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAoaSAhPSBDUFVfVE9fUEFDS0FHRUlOREVYKGkpKQotCQkJY29udGludWU7Ci0JCWlmIChtYXhfY3B1X2lycSA8PSBDUFVfSVJRKGkpKQotCQkJY29udGludWU7Ci0JCWlmICh0bXBfY3B1X2lycSA8IENQVV9JUlEoaSkpIHsKLQkJCXRtcF9jcHVfaXJxID0gQ1BVX0lSUShpKTsKLQkJCXRtcF9sb2FkZWQgPSBpOwotCQl9Ci0JfQotCi0JaWYgKHRtcF9sb2FkZWQgPT0gLTEpIHsKLQkgLyoKLQkgICogSW4gdGhlIGNhc2Ugb2Ygc21hbGwgbnVtYmVyIG9mIGhlYXZ5IGludGVycnVwdCBzb3VyY2VzLAotCSAgKiBsb2FkaW5nIHNvbWUgb2YgdGhlIGNwdXMgdG9vIG11Y2guIFdlIHVzZSBJbmdvJ3Mgb3JpZ2luYWwKLQkgICogYXBwcm9hY2ggdG8gcm90YXRlIHRoZW0gYXJvdW5kLgotCSAgKi8KLQkJaWYgKCFmaXJzdF9hdHRlbXB0ICYmIGltYmFsYW5jZSA+PSB1c2VmdWxfbG9hZF90aHJlc2hvbGQpIHsKLQkJCXJvdGF0ZV9pcnFzX2Ftb25nX2NwdXModXNlZnVsX2xvYWRfdGhyZXNob2xkKTsKLQkJCXJldHVybjsKLQkJfQotCQlnb3RvIG5vdF93b3J0aF90aGVfZWZmb3J0OwotCX0KLQotCWZpcnN0X2F0dGVtcHQgPSAwOwkJLyogaGVhdmllc3Qgc2VhcmNoICovCi0JbWF4X2NwdV9pcnEgPSB0bXBfY3B1X2lycTsJLyogbG9hZCAqLwotCW1heF9sb2FkZWQgPSB0bXBfbG9hZGVkOwkvKiBwcm9jZXNzb3IgKi8KLQlpbWJhbGFuY2UgPSAobWF4X2NwdV9pcnEgLSBtaW5fY3B1X2lycSkgLyAyOwotCi0JLyoKLQkgKiBpZiBpbWJhbGFuY2UgaXMgbGVzcyB0aGFuIGFwcHJveCAxMCUgb2YgbWF4IGxvYWQsIHRoZW4KLQkgKiBvYnNlcnZlIGRpbWluaXNoaW5nIHJldHVybnMgYWN0aW9uLiAtIHF1aXQKLQkgKi8KLQlpZiAoaW1iYWxhbmNlIDwgKG1heF9jcHVfaXJxID4+IDMpKQotCQlnb3RvIG5vdF93b3J0aF90aGVfZWZmb3J0OwotCi10cnlhbm90aGVyaXJxOgotCS8qIGlmIHdlIHNlbGVjdCBhbiBJUlEgdG8gbW92ZSB0aGF0IGNhbid0IGdvIHdoZXJlIHdlIHdhbnQsIHRoZW4KLQkgKiBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBvbmUgdG8gdHJ5LgotCSAqLwotCW1vdmVfdGhpc19sb2FkID0gMDsKLQlzZWxlY3RlZF9pcnEgPSAtMTsKLQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCS8qIElzIHRoaXMgYW4gYWN0aXZlIElSUT8gKi8KLQkJaWYgKCFpcnFfZGVzY1tqXS5hY3Rpb24pCi0JCQljb250aW51ZTsKLQkJaWYgKGltYmFsYW5jZSA8PSBJUlFfREVMVEEobWF4X2xvYWRlZCwgaikpCi0JCQljb250aW51ZTsKLQkJLyogVHJ5IHRvIGZpbmQgdGhlIElSUSB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIGltYmFsYW5jZQotCQkgKiB3aXRob3V0IGdvaW5nIG92ZXIuCi0JCSAqLwotCQlpZiAobW92ZV90aGlzX2xvYWQgPCBJUlFfREVMVEEobWF4X2xvYWRlZCwgaikpIHsKLQkJCW1vdmVfdGhpc19sb2FkID0gSVJRX0RFTFRBKG1heF9sb2FkZWQsIGopOwotCQkJc2VsZWN0ZWRfaXJxID0gajsKLQkJfQotCX0KLQlpZiAoc2VsZWN0ZWRfaXJxID09IC0xKQotCQlnb3RvIHRyeWFub3RoZXJjcHU7Ci0KLQlpbWJhbGFuY2UgPSBtb3ZlX3RoaXNfbG9hZDsKLQotCS8qIEZvciBwaHlzaWNhbF9iYWxhbmNlIGNhc2UsIHdlIGFjY3VtdWxhdGVkIGJvdGggbG9hZAotCSAqIHZhbHVlcyBpbiB0aGUgb25lIG9mIHRoZSBzaWJsaW5ncyBjcHVfaXJxW10sCi0JICogdG8gdXNlIHRoZSBzYW1lIGNvZGUgZm9yIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHByb2Nlc3NvcnMKLQkgKiBhcyBtdWNoIGFzIHBvc3NpYmxlLgotCSAqCi0JICogTk9URTogdGhlIGNwdV9pcnFbXSBhcnJheSBob2xkcyB0aGUgc3VtIG9mIHRoZSBsb2FkIGZvcgotCSAqIHNpYmxpbmcgQSBhbmQgc2libGluZyBCIGluIHRoZSBzbG90IGZvciB0aGUgbG93ZXN0IG51bWJlcmVkCi0JICogc2libGluZyAoQSksIF9BTkRfIHRoZSBsb2FkIGZvciBzaWJsaW5nIEIgaW4gdGhlIHNsb3QgZm9yCi0JICogdGhlIGhpZ2hlciBudW1iZXJlZCBzaWJsaW5nLgotCSAqCi0JICogV2Ugc2VlayB0aGUgbGVhc3QgbG9hZGVkIHNpYmxpbmcgYnkgbWFraW5nIHRoZSBjb21wYXJpc29uCi0JICogKEErQikvMiB2cyBCCi0JICovCi0JbG9hZCA9IENQVV9JUlEobWluX2xvYWRlZCkgPj4gMTsKLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgbWluX2xvYWRlZCkpIHsKLQkJaWYgKGxvYWQgPiBDUFVfSVJRKGopKSB7Ci0JCQkvKiBUaGlzIHdvbid0IGNoYW5nZSBjcHVfc2libGluZ19tYXBbbWluX2xvYWRlZF0gKi8KLQkJCWxvYWQgPSBDUFVfSVJRKGopOwotCQkJbWluX2xvYWRlZCA9IGo7Ci0JCX0KLQl9Ci0KLQljcHVzX2FuZChhbGxvd2VkX21hc2ssCi0JCWNwdV9vbmxpbmVfbWFwLAotCQliYWxhbmNlX2lycV9hZmZpbml0eVtzZWxlY3RlZF9pcnFdKTsKLQl0YXJnZXRfY3B1X21hc2sgPSBjcHVtYXNrX29mX2NwdShtaW5fbG9hZGVkKTsKLQljcHVzX2FuZCh0bXAsIHRhcmdldF9jcHVfbWFzaywgYWxsb3dlZF9tYXNrKTsKLQotCWlmICghY3B1c19lbXB0eSh0bXApKSB7Ci0JCS8qIG1hcmsgZm9yIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwotCQlzZXRfcGVuZGluZ19pcnEoc2VsZWN0ZWRfaXJxLCBjcHVtYXNrX29mX2NwdShtaW5fbG9hZGVkKSk7Ci0KLQkJLyogU2luY2Ugd2UgbWFkZSBhIGNoYW5nZSwgY29tZSBiYWNrIHNvb25lciB0bwotCQkgKiBjaGVjayBmb3IgbW9yZSB2YXJpYXRpb24uCi0JCSAqLwotCQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgPSBtYXgoKGxvbmcpTUlOX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTCwKLQkJCWJhbGFuY2VkX2lycV9pbnRlcnZhbCAtIEJBTEFOQ0VEX0lSUV9MRVNTX0RFTFRBKTsKLQkJcmV0dXJuOwotCX0KLQlnb3RvIHRyeWFub3RoZXJpcnE7Ci0KLW5vdF93b3J0aF90aGVfZWZmb3J0OgotCS8qCi0JICogaWYgd2UgZGlkIG5vdCBmaW5kIGFuIElSUSB0byBtb3ZlLCB0aGVuIGFkanVzdCB0aGUgdGltZSBpbnRlcnZhbAotCSAqIHVwd2FyZAotCSAqLwotCWJhbGFuY2VkX2lycV9pbnRlcnZhbCA9IG1pbigobG9uZylNQVhfQkFMQU5DRURfSVJRX0lOVEVSVkFMLAotCQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgKyBCQUxBTkNFRF9JUlFfTU9SRV9ERUxUQSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGJhbGFuY2VkX2lycSh2b2lkICp1bnVzZWQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBwcmV2X2JhbGFuY2VfdGltZSA9IGppZmZpZXM7Ci0JbG9uZyB0aW1lX3JlbWFpbmluZyA9IGJhbGFuY2VkX2lycV9pbnRlcnZhbDsKLQotCS8qIHB1c2ggZXZlcnl0aGluZyB0byBDUFUgMCB0byBnaXZlIHVzIGEgc3RhcnRpbmcgcG9pbnQuICAqLwotCWZvciAoaSA9IDAgOyBpIDwgTlJfSVJRUyA7IGkrKykgewotCQlpcnFfZGVzY1tpXS5wZW5kaW5nX21hc2sgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQkJc2V0X3BlbmRpbmdfaXJxKGksIGNwdW1hc2tfb2ZfY3B1KDApKTsKLQl9Ci0KLQlzZXRfZnJlZXphYmxlKCk7Ci0JZm9yICggOyA7ICkgewotCQl0aW1lX3JlbWFpbmluZyA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lX3JlbWFpbmluZyk7Ci0JCXRyeV90b19mcmVlemUoKTsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJCQlwcmV2X2JhbGFuY2VfdGltZStiYWxhbmNlZF9pcnFfaW50ZXJ2YWwpKSB7Ci0JCQlwcmVlbXB0X2Rpc2FibGUoKTsKLQkJCWRvX2lycV9iYWxhbmNlKCk7Ci0JCQlwcmV2X2JhbGFuY2VfdGltZSA9IGppZmZpZXM7Ci0JCQl0aW1lX3JlbWFpbmluZyA9IGJhbGFuY2VkX2lycV9pbnRlcnZhbDsKLQkJCXByZWVtcHRfZW5hYmxlKCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJhbGFuY2VkX2lycV9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjOwotCWNwdW1hc2tfdCB0bXA7Ci0KLQljcHVzX3NoaWZ0X3JpZ2h0KHRtcCwgY3B1X29ubGluZV9tYXAsIDIpOwotCWMgPSAmYm9vdF9jcHVfZGF0YTsKLQkvKiBXaGVuIG5vdCBvdmVyd3JpdHRlbiBieSB0aGUgY29tbWFuZCBsaW5lIGFzayBzdWJhcmNoaXRlY3R1cmUuICovCi0JaWYgKGlycWJhbGFuY2VfZGlzYWJsZWQgPT0gSVJRQkFMQU5DRV9DSEVDS19BUkNIKQotCQlpcnFiYWxhbmNlX2Rpc2FibGVkID0gTk9fQkFMQU5DRV9JUlE7Ci0JaWYgKGlycWJhbGFuY2VfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCi0JIC8qIGRpc2FibGUgaXJxYmFsYW5jZSBjb21wbGV0ZWx5IGlmIHRoZXJlIGlzIG9ubHkgb25lIHByb2Nlc3NvciBvbmxpbmUgKi8KLQlpZiAobnVtX29ubGluZV9jcHVzKCkgPCAyKSB7Ci0JCWlycWJhbGFuY2VfZGlzYWJsZWQgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyoKLQkgKiBFbmFibGUgcGh5c2ljYWwgYmFsYW5jZSBvbmx5IGlmIG1vcmUgdGhhbiAxIHBoeXNpY2FsIHByb2Nlc3NvcgotCSAqIGlzIHByZXNlbnQKLQkgKi8KLQlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEgJiYgIWNwdXNfZW1wdHkodG1wKSkKLQkJcGh5c2ljYWxfYmFsYW5jZSA9IDE7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJaXJxX2NwdV9kYXRhW2ldLmlycV9kZWx0YSA9IGt6YWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogTlJfSVJRUywgR0ZQX0tFUk5FTCk7Ci0JCWlycV9jcHVfZGF0YVtpXS5sYXN0X2lycSA9IGt6YWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogTlJfSVJRUywgR0ZQX0tFUk5FTCk7Ci0JCWlmIChpcnFfY3B1X2RhdGFbaV0uaXJxX2RlbHRhID09IE5VTEwgfHwgaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYmFsYW5jZWRfaXJxX2luaXQ6IG91dCBvZiBtZW1vcnkiKTsKLQkJCWdvdG8gZmFpbGVkOwotCQl9Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiU3RhcnRpbmcgYmFsYW5jZWRfaXJxXG4iKTsKLQlpZiAoIUlTX0VSUihrdGhyZWFkX3J1bihiYWxhbmNlZF9pcnEsIE5VTEwsICJraXJxZCIpKSkKLQkJcmV0dXJuIDA7Ci0JcHJpbnRrKEtFUk5fRVJSICJiYWxhbmNlZF9pcnFfaW5pdDogZmFpbGVkIHRvIHNwYXduIGJhbGFuY2VkX2lycSIpOwotZmFpbGVkOgotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWtmcmVlKGlycV9jcHVfZGF0YVtpXS5pcnFfZGVsdGEpOwotCQlpcnFfY3B1X2RhdGFbaV0uaXJxX2RlbHRhID0gTlVMTDsKLQkJa2ZyZWUoaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxKTsKLQkJaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxID0gTlVMTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2RldmluaXQgaXJxYmFsYW5jZV9kaXNhYmxlKGNoYXIgKnN0cikKLXsKLQlpcnFiYWxhbmNlX2Rpc2FibGVkID0gMTsKLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgibm9pcnFiYWxhbmNlIiwgaXJxYmFsYW5jZV9kaXNhYmxlKTsKLQotbGF0ZV9pbml0Y2FsbChiYWxhbmNlZF9pcnFfaW5pdCk7Ci0jZW5kaWYgLyogQ09ORklHX0lSUUJBTEFOQ0UgKi8KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLSNpZm5kZWYgQ09ORklHX1NNUAotdm9pZCBzZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgaW50IGNmZzsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQljZmcgPSBBUElDX0RNX0ZJWEVEIHwgQVBJQ19ERVNUX1NFTEYgfCB2ZWN0b3IgfCBBUElDX0RFU1RfTE9HSUNBTDsKLQkvKgotCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGNmZyk7Ci19Ci0jZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KLQotCi0vKgotICogc3VwcG9ydCBmb3IgYnJva2VuIE1QIEJJT1NzLCBlbmFibGVzIGhhbmQtcmVkaXJlY3Rpb24gb2YgUElSUTAtNyB0bwotICogc3BlY2lmaWMgQ1BVLXNpZGUgSVJRcy4KLSAqLwotCi0jZGVmaW5lIE1BWF9QSVJRUyA4Ci1zdGF0aWMgaW50IHBpcnFfZW50cmllcyBbTUFYX1BJUlFTXTsKLXN0YXRpYyBpbnQgcGlycXNfZW5hYmxlZDsKLWludCBza2lwX2lvYXBpY19zZXR1cDsKLQotc3RhdGljIGludCBfX2luaXQgaW9hcGljX3BpcnFfc2V0dXAoY2hhciAqc3RyKQotewotCWludCBpLCBtYXg7Ci0JaW50IGludHNbTUFYX1BJUlFTKzFdOwotCi0JZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKLQkJcGlycV9lbnRyaWVzW2ldID0gLTE7Ci0KLQlwaXJxc19lbmFibGVkID0gMTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwotCQkJIlBJUlEgcmVkaXJlY3Rpb24sIHdvcmtpbmcgYXJvdW5kIGJyb2tlbiBNUC1CSU9TLlxuIik7Ci0JbWF4ID0gTUFYX1BJUlFTOwotCWlmIChpbnRzWzBdIDwgTUFYX1BJUlFTKQotCQltYXggPSBpbnRzWzBdOwotCi0JZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRwotCQkJCSIuLi4gUElSUSVkIC0+IElSUSAlZFxuIiwgaSwgaW50c1tpKzFdKTsKLQkJLyoKLQkJICogUElSUXMgYXJlIG1hcHBlZCB1cHNpZGUgZG93biwgdXN1YWxseS4KLQkJICovCi0JCXBpcnFfZW50cmllc1tNQVhfUElSUVMtaS0xXSA9IGludHNbaSsxXTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoInBpcnE9IiwgaW9hcGljX3BpcnFfc2V0dXApOwotCi0vKgotICogRmluZCB0aGUgSVJRIGVudHJ5IG51bWJlciBvZiBhIGNlcnRhaW4gcGluLgotICovCi1zdGF0aWMgaW50IGZpbmRfaXJxX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBpbnQgdHlwZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgfHwKLQkJICAgICBtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gTVBfQVBJQ19BTEwpICYmCi0JCSAgICBtcF9pcnFzW2ldLm1wX2RzdGlycSA9PSBwaW4pCi0JCQlyZXR1cm4gaTsKLQotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZpbmQgdGhlIHBpbiB0byB3aGljaCBJUlFbaXJxXSAoSVNBKSBpcyBjb25uZWN0ZWQKLSAqLwotc3RhdGljIGludCBfX2luaXQgZmluZF9pc2FfaXJxX3BpbihpbnQgaXJxLCBpbnQgdHlwZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWludCBsYnVzID0gbXBfaXJxc1tpXS5tcF9zcmNidXM7Ci0KLQkJaWYgKHRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGlycSkpCi0KLQkJCXJldHVybiBtcF9pcnFzW2ldLm1wX2RzdGlycTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBmaW5kX2lzYV9pcnFfYXBpYyhpbnQgaXJxLCBpbnQgdHlwZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWludCBsYnVzID0gbXBfaXJxc1tpXS5tcF9zcmNidXM7Ci0KLQkJaWYgKHRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGlycSkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPCBtcF9pcnFfZW50cmllcykgewotCQlpbnQgYXBpYzsKLQkJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYykKLQkJCQlyZXR1cm4gYXBpYzsKLQkJfQotCX0KLQotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZpbmQgYSBzcGVjaWZpYyBQQ0kgSVJRIGVudHJ5LgotICogTm90IGFuIF9faW5pdCwgcG9zc2libHkgbmVlZGVkIGJ5IG1vZHVsZXMKLSAqLwotc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pOwotCi1pbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBwaW4pCi17Ci0JaW50IGFwaWMsIGksIGJlc3RfZ3Vlc3MgPSAtMTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJxdWVyeWluZyBQQ0kgLT4gSVJRIG1hcHBpbmcgYnVzOiVkLCAiCi0JCSJzbG90OiVkLCBwaW46JWQuXG4iLCBidXMsIHNsb3QsIHBpbik7Ci0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSSBCSU9TIHBhc3NlZCBub25leGlzdGVudCBQQ0kgYnVzICVkIVxuIiwgYnVzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPT0gbXBfaXJxc1tpXS5tcF9kc3RhcGljIHx8Ci0JCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKQotCQkJCWJyZWFrOwotCi0JCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAhbXBfaXJxc1tpXS5tcF9pcnF0eXBlICYmCi0JCSAgICAoYnVzID09IGxidXMpICYmCi0JCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7Ci0JCQlpbnQgaXJxID0gcGluXzJfaXJxKGksIGFwaWMsIG1wX2lycXNbaV0ubXBfZHN0aXJxKTsKLQotCQkJaWYgKCEoYXBpYyB8fCBJT19BUElDX0lSUShpcnEpKSkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHBpbiA9PSAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgJiAzKSkKLQkJCQlyZXR1cm4gaXJxOwotCQkJLyoKLQkJCSAqIFVzZSB0aGUgZmlyc3QgYWxsLWJ1dC1waW4gbWF0Y2hpbmcgZW50cnkgYXMgYQotCQkJICogYmVzdC1ndWVzcyBmdXp6eSByZXN1bHQgZm9yIGJyb2tlbiBtcHRhYmxlcy4KLQkJCSAqLwotCQkJaWYgKGJlc3RfZ3Vlc3MgPCAwKQotCQkJCWJlc3RfZ3Vlc3MgPSBpcnE7Ci0JCX0KLQl9Ci0JcmV0dXJuIGJlc3RfZ3Vlc3M7Ci19Ci1FWFBPUlRfU1lNQk9MKElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKTsKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IGlzIG9ubHkgYSBoZWxwZXIgZm9yIHRoZSBpMzg2IHNtcCBib290IHByb2Nlc3Mgd2hlcmUKLSAqIHdlIG5lZWQgdG8gcmVwcm9ncmFtIHRoZSBpb3JlZHRibHMgdG8gY2F0ZXIgZm9yIHRoZSBjcHVzIHdoaWNoIGhhdmUgY29tZSBvbmxpbmUKLSAqIHNvIG1hc2sgaW4gYWxsIGNhc2VzIHNob3VsZCBzaW1wbHkgYmUgVEFSR0VUX0NQVVMKLSAqLwotI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgX19pbml0IHNldHVwX2lvYXBpY19kZXN0KHZvaWQpCi17Ci0JaW50IHBpbiwgaW9hcGljLCBpcnEsIGlycV9lbnRyeTsKLQotCWlmIChza2lwX2lvYXBpY19zZXR1cCA9PSAxKQotCQlyZXR1cm47Ci0KLQlmb3IgKGlvYXBpYyA9IDA7IGlvYXBpYyA8IG5yX2lvYXBpY3M7IGlvYXBpYysrKSB7Ci0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpb2FwaWNdOyBwaW4rKykgewotCQkJaXJxX2VudHJ5ID0gZmluZF9pcnFfZW50cnkoaW9hcGljLCBwaW4sIG1wX0lOVCk7Ci0JCQlpZiAoaXJxX2VudHJ5ID09IC0xKQotCQkJCWNvbnRpbnVlOwotCQkJaXJxID0gcGluXzJfaXJxKGlycV9lbnRyeSwgaW9hcGljLCBwaW4pOwotCQkJc2V0X2lvYXBpY19hZmZpbml0eV9pcnEoaXJxLCBUQVJHRVRfQ1BVUyk7Ci0JCX0KLQotCX0KLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfTUNBKQotLyoKLSAqIEVJU0EgRWRnZS9MZXZlbCBjb250cm9sIHJlZ2lzdGVyLCBFTENSCi0gKi8KLXN0YXRpYyBpbnQgRUlTQV9FTENSKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKGlycSA8IDE2KSB7Ci0JCXVuc2lnbmVkIGludCBwb3J0ID0gMHg0ZDAgKyAoaXJxID4+IDMpOwotCQlyZXR1cm4gKGluYihwb3J0KSA+PiAoaXJxICYgNykpICYgMTsKLQl9Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSJCcm9rZW4gTVB0YWJsZSByZXBvcnRzIElTQSBpcnEgJWRcbiIsIGlycSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVkLAotICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCi0KLSNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpCSgwKQotI2RlZmluZSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCSgwKQotCi0vKiBFSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGFuZCBjYW4gYmUgZWRnZSBvciBsZXZlbAotICogdHJpZ2dlciBkZXBlbmRpbmcgb24gdGhlIEVMQ1IgdmFsdWUuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbGlzdGVkIGFzCi0gKiBFSVNBIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLCB0aGF0IG1lYW5zIGl0cyB0cmlnZ2VyIHR5cGUgbXVzdAotICogYmUgcmVhZCBpbiBmcm9tIHRoZSBFTENSICovCi0KLSNkZWZpbmUgZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KQkoRUlTQV9FTENSKG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnEpKQotI2RlZmluZSBkZWZhdWx0X0VJU0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCi0KLS8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKLSNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKLQotLyogTUNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGxldmVsIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KQkoMSkKLSNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCi0KLXN0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCi17Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7Ci0JaW50IHBvbGFyaXR5OwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgSVJRIGxpbmUgcG9sYXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpOgotCSAqLwotCXN3aXRjaCAobXBfaXJxc1tpZHhdLm1wX2lycWZsYWcgJiAzKSB7Ci0JY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCBwb2xhcml0eSAqLwotCXsKLQkJcG9sYXJpdHkgPSB0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKT8KLQkJCWRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCk6Ci0JCQlkZWZhdWx0X1BDSV9wb2xhcml0eShpZHgpOwotCQlicmVhazsKLQl9Ci0JY2FzZSAxOiAvKiBoaWdoIGFjdGl2ZSAqLwotCXsKLQkJcG9sYXJpdHkgPSAwOwotCQlicmVhazsKLQl9Ci0JY2FzZSAyOiAvKiByZXNlcnZlZCAqLwotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCXBvbGFyaXR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMzogLyogbG93IGFjdGl2ZSAqLwotCXsKLQkJcG9sYXJpdHkgPSAxOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDogLyogaW52YWxpZCAqLwotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCXBvbGFyaXR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCX0KLQlyZXR1cm4gcG9sYXJpdHk7Ci19Ci0KLXN0YXRpYyBpbnQgTVBCSU9TX3RyaWdnZXIoaW50IGlkeCkKLXsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQlpbnQgdHJpZ2dlcjsKLQotCS8qCi0JICogRGV0ZXJtaW5lIElSUSB0cmlnZ2VyIG1vZGUgKGVkZ2Ugb3IgbGV2ZWwgc2Vuc2l0aXZlKToKLQkgKi8KLQlzd2l0Y2ggKChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZz4+MikgJiAzKSB7Ci0JY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCAqLwotCXsKLQkJdHJpZ2dlciA9IHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpPwotCQkJCWRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KToKLQkJCQlkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfTUNBKQotCQlzd2l0Y2ggKG1wX2J1c19pZF90b190eXBlW2J1c10pIHsKLQkJY2FzZSBNUF9CVVNfSVNBOiAvKiBJU0EgcGluICovCi0JCXsKLQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBNUF9CVVNfRUlTQTogLyogRUlTQSBwaW4gKi8KLQkJewotCQkJdHJpZ2dlciA9IGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIE1QX0JVU19QQ0k6IC8qIFBDSSBwaW4gKi8KLQkJewotCQkJLyogc2V0IGJlZm9yZSB0aGUgc3dpdGNoICovCi0JCQlicmVhazsKLQkJfQotCQljYXNlIE1QX0JVU19NQ0E6IC8qIE1DQSBwaW4gKi8KLQkJewotCQkJdHJpZ2dlciA9IGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJdHJpZ2dlciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLSNlbmRpZgotCQlicmVhazsKLQl9Ci0JY2FzZSAxOiAvKiBlZGdlICovCi0JewotCQl0cmlnZ2VyID0gMDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQl0cmlnZ2VyID0gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMzogLyogbGV2ZWwgKi8KLQl7Ci0JCXRyaWdnZXIgPSAxOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDogLyogaW52YWxpZCAqLwotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCXRyaWdnZXIgPSAwOwotCQlicmVhazsKLQl9Ci0JfQotCXJldHVybiB0cmlnZ2VyOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfcG9sYXJpdHkoaW50IGlkeCkKLXsKLQlyZXR1cm4gTVBCSU9TX3BvbGFyaXR5KGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90cmlnZ2VyKGludCBpZHgpCi17Ci0JcmV0dXJuIE1QQklPU190cmlnZ2VyKGlkeCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKQotewotCWludCBpcnEsIGk7Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7Ci0KLQkvKgotCSAqIERlYnVnZ2luZyBjaGVjaywgd2UgYXJlIGluIGJpZyB0cm91YmxlIGlmIHRoaXMgbWVzc2FnZSBwb3BzIHVwIQotCSAqLwotCWlmIChtcF9pcnFzW2lkeF0ubXBfZHN0aXJxICE9IHBpbikKLQkJcHJpbnRrKEtFUk5fRVJSICJicm9rZW4gQklPUyBvciBNUFRBQkxFIHBhcnNlciwgYXlpZWUhIVxuIik7Ci0KLQlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpCi0JCWlycSA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnE7Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIFBDSSBJUlFzIGFyZSBtYXBwZWQgaW4gb3JkZXIKLQkJICovCi0JCWkgPSBpcnEgPSAwOwotCQl3aGlsZSAoaSA8IGFwaWMpCi0JCQlpcnEgKz0gbnJfaW9hcGljX3JlZ2lzdGVyc1tpKytdOwotCQlpcnEgKz0gcGluOwotCi0JCS8qCi0JCSAqIEZvciBNUFMgbW9kZSwgc28gZmFyIG9ubHkgbmVlZGVkIGJ5IEVTNzAwMCBwbGF0Zm9ybQotCQkgKi8KLQkJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCi0JCQlpcnEgPSBpb2FwaWNfcmVudW1iZXJfaXJxKGFwaWMsIGlycSk7Ci0JfQotCi0JLyoKLQkgKiBQQ0kgSVJRIGNvbW1hbmQgbGluZSByZWRpcmVjdGlvbi4gWWVzLCBsaW1pdHMgYXJlIGhhcmRjb2RlZC4KLQkgKi8KLQlpZiAoKHBpbiA+PSAxNikgJiYgKHBpbiA8PSAyMykpIHsKLQkJaWYgKHBpcnFfZW50cmllc1twaW4tMTZdICE9IC0xKSB7Ci0JCQlpZiAoIXBpcnFfZW50cmllc1twaW4tMTZdKSB7Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHCi0JCQkJCQkiZGlzYWJsaW5nIFBJUlElZFxuIiwgcGluLTE2KTsKLQkJCX0gZWxzZSB7Ci0JCQkJaXJxID0gcGlycV9lbnRyaWVzW3Bpbi0xNl07Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHCi0JCQkJCQkidXNpbmcgUElSUSVkIC0+IElSUSAlZFxuIiwKLQkJCQkJCXBpbi0xNiwgaXJxKTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gaXJxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCi17Ci0JaW50IGFwaWMsIGlkeCwgcGluOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7Ci0JCQlpZiAoKGlkeCAhPSAtMSkgJiYgKGlycSA9PSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pKSkKLQkJCQlyZXR1cm4gaXJxX3RyaWdnZXIoaWR4KTsKLQkJfQotCX0KLQkvKgotCSAqIG5vbmV4aXN0ZW50IElSUXMgYXJlIGVkZ2UgZGVmYXVsdAotCSAqLwotCXJldHVybiAwOwotfQotCi0vKiBpcnFfdmVjdG9ycyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KLXN0YXRpYyB1OCBpcnFfdmVjdG9yW05SX0lSUV9WRUNUT1JTXSBfX3JlYWRfbW9zdGx5ID0geyBGSVJTVF9ERVZJQ0VfVkVDVE9SICwgMCB9OwotCi1zdGF0aWMgaW50IF9fYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSkKLXsKLQlzdGF0aWMgaW50IGN1cnJlbnRfdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiwgY3VycmVudF9vZmZzZXQ7Ci0JaW50IHZlY3Rvciwgb2Zmc2V0OwotCi0JQlVHX09OKCh1bnNpZ25lZClpcnEgPj0gTlJfSVJRX1ZFQ1RPUlMpOwotCi0JaWYgKGlycV92ZWN0b3JbaXJxXSA+IDApCi0JCXJldHVybiBpcnFfdmVjdG9yW2lycV07Ci0KLQl2ZWN0b3IgPSBjdXJyZW50X3ZlY3RvcjsKLQlvZmZzZXQgPSBjdXJyZW50X29mZnNldDsKLW5leHQ6Ci0JdmVjdG9yICs9IDg7Ci0JaWYgKHZlY3RvciA+PSBmaXJzdF9zeXN0ZW1fdmVjdG9yKSB7Ci0JCW9mZnNldCA9IChvZmZzZXQgKyAxKSAlIDg7Ci0JCXZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IgKyBvZmZzZXQ7Ci0JfQotCWlmICh2ZWN0b3IgPT0gY3VycmVudF92ZWN0b3IpCi0JCXJldHVybiAtRU5PU1BDOwotCWlmICh0ZXN0X2FuZF9zZXRfYml0KHZlY3RvciwgdXNlZF92ZWN0b3JzKSkKLQkJZ290byBuZXh0OwotCi0JY3VycmVudF92ZWN0b3IgPSB2ZWN0b3I7Ci0JY3VycmVudF9vZmZzZXQgPSBvZmZzZXQ7Ci0JaXJxX3ZlY3RvcltpcnFdID0gdmVjdG9yOwotCi0JcmV0dXJuIHZlY3RvcjsKLX0KLQotc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHZlY3RvcjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCXZlY3RvciA9IF9fYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHZlY3RvcjsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcDsKLQotI2RlZmluZSBJT0FQSUNfQVVUTwktMQotI2RlZmluZSBJT0FQSUNfRURHRQkwCi0jZGVmaW5lIElPQVBJQ19MRVZFTAkxCi0KLXN0YXRpYyB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIGludCB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKLXsKLQlpZiAoKHRyaWdnZXIgPT0gSU9BUElDX0FVVE8gJiYgSU9fQVBJQ19pcnFfdHJpZ2dlcihpcnEpKSB8fAotCSAgICB0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkgewotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAotCQkJCQkgaGFuZGxlX2Zhc3Rlb2lfaXJxLCAiZmFzdGVvaSIpOwotCX0gZWxzZSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzICY9IH5JUlFfTEVWRUw7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAotCQkJCQkgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCX0KLQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2lycV0pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JaW50IGFwaWMsIHBpbiwgaWR4LCBpcnEsIGZpcnN0X25vdGNvbiA9IDEsIHZlY3RvcjsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiaW5pdCBJT19BUElDIElSUXNcbiIpOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQotCQkvKgotCQkgKiBhZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JCSAqLwotCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQotCQllbnRyeS5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JCWVudHJ5LmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JCWVudHJ5Lm1hc2sgPSAwOwkJCQkvKiBlbmFibGUgSVJRICovCi0JCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPQotCQkJCQljcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCi0JCWlkeCA9IGZpbmRfaXJxX2VudHJ5KGFwaWMsIHBpbiwgbXBfSU5UKTsKLQkJaWYgKGlkeCA9PSAtMSkgewotCQkJaWYgKGZpcnN0X25vdGNvbikgewotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRwotCQkJCQkJIiBJTy1BUElDIChhcGljaWQtcGluKSAlZC0lZCIsCi0JCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwKLQkJCQkJCXBpbik7Ci0JCQkJZmlyc3Rfbm90Y29uID0gMDsKLQkJCX0gZWxzZQotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiwgJWQtJWQiLAotCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFmaXJzdF9ub3Rjb24pIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBub3QgY29ubmVjdGVkLlxuIik7Ci0JCQlmaXJzdF9ub3Rjb24gPSAxOwotCQl9Ci0KLQkJZW50cnkudHJpZ2dlciA9IGlycV90cmlnZ2VyKGlkeCk7Ci0JCWVudHJ5LnBvbGFyaXR5ID0gaXJxX3BvbGFyaXR5KGlkeCk7Ci0KLQkJaWYgKGlycV90cmlnZ2VyKGlkeCkpIHsKLQkJCWVudHJ5LnRyaWdnZXIgPSAxOwotCQkJZW50cnkubWFzayA9IDE7Ci0JCX0KLQotCQlpcnEgPSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pOwotCQkvKgotCQkgKiBza2lwIGFkZGluZyB0aGUgdGltZXIgaW50IG9uIHNlY29uZGFyeSBub2Rlcywgd2hpY2ggY2F1c2VzCi0JCSAqIGEgc21hbGwgYnV0IHBhaW5mdWwgcmlmdCBpbiB0aGUgdGltZS1zcGFjZSBjb250aW51dW0KLQkJICovCi0JCWlmIChtdWx0aV90aW1lcl9jaGVjayhhcGljLCBpcnEpKQotCQkJY29udGludWU7Ci0JCWVsc2UKLQkJCWFkZF9waW5fdG9faXJxKGlycSwgYXBpYywgcGluKTsKLQotCQlpZiAoIWFwaWMgJiYgIUlPX0FQSUNfSVJRKGlycSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoSU9fQVBJQ19JUlEoaXJxKSkgewotCQkJdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQkJCWVudHJ5LnZlY3RvciA9IHZlY3RvcjsKLQkJCWlvYXBpY19yZWdpc3Rlcl9pbnRyKGlycSwgdmVjdG9yLCBJT0FQSUNfQVVUTyk7Ci0KLQkJCWlmICghYXBpYyAmJiAoaXJxIDwgMTYpKQotCQkJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0JCX0KLQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotCX0KLQl9Ci0KLQlpZiAoIWZpcnN0X25vdGNvbikKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG5vdCBjb25uZWN0ZWQuXG4iKTsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgdGltZXIgcGluLCBwb3NzaWJseSB3aXRoIHRoZSA4MjU5QS1tYXN0ZXIgYmVoaW5kLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGltZXJfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4sCi0JCQkJCWludCB2ZWN0b3IpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQotCS8qCi0JICogV2UgdXNlIGxvZ2ljYWwgZGVsaXZlcnkgdG8gZ2V0IHRoZSB0aW1lciBJUlEKLQkgKiB0byB0aGUgZmlyc3QgQ1BVLgotCSAqLwotCWVudHJ5LmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JZW50cnkubWFzayA9IDE7CQkJCQkvKiBtYXNrIElSUSBub3cgKi8KLQllbnRyeS5kZXN0LmxvZ2ljYWwubG9naWNhbF9kZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKFRBUkdFVF9DUFVTKTsKLQllbnRyeS5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JZW50cnkucG9sYXJpdHkgPSAwOwotCWVudHJ5LnRyaWdnZXIgPSAwOwotCWVudHJ5LnZlY3RvciA9IHZlY3RvcjsKLQotCS8qCi0JICogVGhlIHRpbWVyIElSUSBkb2Vzbid0IGhhdmUgdG8ga25vdyB0aGF0IGJlaGluZCB0aGUKLQkgKiBzY2VuZSB3ZSBtYXkgaGF2ZSBhIDgyNTlBLW1hc3RlciBpbiBBRU9JIG1vZGUgLi4uCi0JICovCi0JaW9hcGljX3JlZ2lzdGVyX2ludHIoMCwgdmVjdG9yLCBJT0FQSUNfRURHRSk7Ci0KLQkvKgotCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci19Ci0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X0lPX0FQSUModm9pZCkKLXsKLQlpbnQgYXBpYywgaTsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwotCXVuaW9uIElPX0FQSUNfcmVnXzAyIHJlZ18wMjsKLQl1bmlvbiBJT19BUElDX3JlZ18wMyByZWdfMDM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIE1QIElSUSBzb3VyY2VzOiAlZC5cbiIsIG1wX2lycV9lbnRyaWVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKQotCQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIElPLUFQSUMgIyVkIHJlZ2lzdGVyczogJWQuXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1tpXS5tcF9hcGljaWQsIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0pOwotCi0JLyoKLQkgKiBXZSBhcmUgYSBiaXQgY29uc2VydmF0aXZlIGFib3V0IHdoYXQgd2UgZXhwZWN0LiAgV2UgaGF2ZSB0bwotCSAqIGtub3cgYWJvdXQgZXZlcnkgaGFyZHdhcmUgY2hhbmdlIEFTQVAuCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAidGVzdGluZyB0aGUgSU8gQVBJQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4iKTsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKQotCQlyZWdfMDIucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDIpOwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjApCi0JCXJlZ18wMy5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJJTyBBUElDICMlZC4uLi4uLlxuIiwgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMDogJTA4WFxuIiwgcmVnXzAwLnJhdyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBwaHlzaWNhbCBBUElDIGlkOiAlMDJYXG4iLCByZWdfMDAuYml0cy5JRCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBEZWxpdmVyeSBUeXBlOiAlWFxuIiwgcmVnXzAwLmJpdHMuZGVsaXZlcnlfdHlwZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBMVFMgICAgICAgICAgOiAlWFxuIiwgcmVnXzAwLmJpdHMuTFRTKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMTogJTA4WFxuIiwgcmVnXzAxLnJhdyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogbWF4IHJlZGlyZWN0aW9uIGVudHJpZXM6ICUwNFhcbiIsIHJlZ18wMS5iaXRzLmVudHJpZXMpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogUFJRIGltcGxlbWVudGVkOiAlWFxuIiwgcmVnXzAxLmJpdHMuUFJRKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBJTyBBUElDIHZlcnNpb246ICUwNFhcbiIsIHJlZ18wMS5iaXRzLnZlcnNpb24pOwotCi0JLyoKLQkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4MT8gZG9uJ3QgaGF2ZSByZWdfMDIsCi0JICogYnV0IHRoZSB2YWx1ZSBvZiByZWdfMDIgaXMgcmVhZCBhcyB0aGUgcHJldmlvdXMgcmVhZCByZWdpc3RlcgotCSAqIHZhbHVlLCBzbyBpZ25vcmUgaXQgaWYgcmVnXzAyID09IHJlZ18wMS4KLQkgKi8KLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwICYmIHJlZ18wMi5yYXcgIT0gcmVnXzAxLnJhdykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDI6ICUwOFhcbiIsIHJlZ18wMi5yYXcpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBhcmJpdHJhdGlvbjogJTAyWFxuIiwgcmVnXzAyLmJpdHMuYXJiaXRyYXRpb24pOwotCX0KLQotCS8qCi0JICogU29tZSBJbnRlbCBjaGlwc2V0cyB3aXRoIElPIEFQSUMgVkVSU0lPTiBvZiAweDI/IGRvbid0IGhhdmUgcmVnXzAyCi0JICogb3IgcmVnXzAzLCBidXQgdGhlIHZhbHVlIG9mIHJlZ18wWzIzXSBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkCi0JICogcmVnaXN0ZXIgdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDMgPT0gcmVnXzBbMTJdLgotCSAqLwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjAgJiYgcmVnXzAzLnJhdyAhPSByZWdfMDIucmF3ICYmCi0JICAgIHJlZ18wMy5yYXcgIT0gcmVnXzAxLnJhdykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDM6ICUwOFhcbiIsIHJlZ18wMy5yYXcpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBCb290IERUICAgIDogJVhcbiIsIHJlZ18wMy5iaXRzLmJvb3RfRFQpOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBMb2cgUGh5IE1hc2sgVHJpZyBJUlIgUG9sIgotCQkJICAiIFN0YXQgRGVzdCBEZWxpIFZlY3Q6ICAgXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPD0gcmVnXzAxLmJpdHMuZW50cmllczsgaSsrKSB7Ci0JCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgaSk7Ci0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDJ4ICUwM1ggJTAyWCAgIiwKLQkJCWksCi0JCQllbnRyeS5kZXN0LmxvZ2ljYWwubG9naWNhbF9kZXN0LAotCQkJZW50cnkuZGVzdC5waHlzaWNhbC5waHlzaWNhbF9kZXN0Ci0JCSk7Ci0KLQkJcHJpbnRrKCIlMWQgICAgJTFkICAgICUxZCAgICUxZCAgICUxZCAgICAlMWQgICAgJTFkICAgICUwMlhcbiIsCi0JCQllbnRyeS5tYXNrLAotCQkJZW50cnkudHJpZ2dlciwKLQkJCWVudHJ5LmlyciwKLQkJCWVudHJ5LnBvbGFyaXR5LAotCQkJZW50cnkuZGVsaXZlcnlfc3RhdHVzLAotCQkJZW50cnkuZGVzdF9tb2RlLAotCQkJZW50cnkuZGVsaXZlcnlfbW9kZSwKLQkJCWVudHJ5LnZlY3RvcgotCQkpOwotCX0KLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklSUSB0byBwaW4gbWFwcGluZ3M6XG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaTsKLQkJaWYgKGVudHJ5LT5waW4gPCAwKQotCQkJY29udGludWU7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJJUlElZCAiLCBpKTsKLQkJZm9yICg7OykgewotCQkJcHJpbnRrKCItPiAlZDolZCIsIGVudHJ5LT5hcGljLCBlbnRyeS0+cGluKTsKLQkJCWlmICghZW50cnktPm5leHQpCi0JCQkJYnJlYWs7Ci0JCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gZG9uZS5cbiIpOwotCi0JcmV0dXJuOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfQVBJQ19iaXRmaWVsZChpbnQgYmFzZSkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQlpbnQgaSwgajsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWZcbiIgS0VSTl9ERUJVRyk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQl2ID0gYXBpY19yZWFkKGJhc2UgKyBpKjB4MTApOwotCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgewotCQkJaWYgKHYgJiAoMTw8aikpCi0JCQkJcHJpbnRrKCIxIik7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKCIwIik7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2xvY2FsX0FQSUModm9pZCAqZHVtbXkpCi17Ci0JdW5zaWduZWQgaW50IHYsIHZlciwgbWF4bHZ0OwotCXU2NCBpY3I7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKCJcbiIgS0VSTl9ERUJVRyAicHJpbnRpbmcgbG9jYWwgQVBJQyBjb250ZW50cyBvbiBDUFUjJWQvJWQ6XG4iLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIElEOiAgICAgICUwOHggKCUwMXgpXG4iLCB2LAotCQkJR0VUX0FQSUNfSUQodikpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIFZFUlNJT046ICUwOHhcbiIsIHYpOwotCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odik7Ci0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUQVNLUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwgdiAmIEFQSUNfVFBSSV9NQVNLKTsKLQotCWlmIChBUElDX0lOVEVHUkFURUQodmVyKSkgewkJCS8qICE4MjQ4OURYICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19BUkJQUkkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKLQkJCXYgJiBBUElDX0FSQlBSSV9NQVNLKTsKLQkJdiA9IGFwaWNfcmVhZChBUElDX1BST0NQUkkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7Ci0JfQotCi0JdiA9IGFwaWNfcmVhZChBUElDX0VPSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVPSTogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1JSUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xEUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExEUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0RGUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIERGUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBTUElWOiAlMDh4XG4iLCB2KTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJU1IgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVNSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1SIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX1RNUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElSUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JUlIpOwotCi0JaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7CQkvKiAhODI0ODlEWCAqLwotCQlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVTUjogJTA4eFxuIiwgdik7Ci0JfQotCi0JaWNyID0gYXBpY19pY3JfcmVhZCgpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1I6ICUwOHhcbiIsIGljcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjI6ICUwOHhcbiIsIGljciA+PiAzMik7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVFQ6ICUwOHhcbiIsIHYpOwotCi0JaWYgKG1heGx2dCA+IDMpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIGlzIExWVCM0LiAqLwotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUUEM6ICUwOHhcbiIsIHYpOwotCX0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVDA6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMTogJTA4eFxuIiwgdik7Ci0KLQlpZiAobWF4bHZ0ID4gMikgewkJCS8qIEVSUiBpcyBMVlQjMy4gKi8KLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRFUlI6ICUwOHhcbiIsIHYpOwotCX0KLQotCXYgPSBhcGljX3JlYWQoQVBJQ19UTUlDVCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNSUNUOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTUNDVDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBURENSOiAlMDh4XG4iLCB2KTsKLQlwcmludGsoIlxuIik7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9hbGxfbG9jYWxfQVBJQ3Modm9pZCkKLXsKLQlvbl9lYWNoX2NwdShwcmludF9sb2NhbF9BUElDLCBOVUxMLCAxKTsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X1BJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIlxucHJpbnRpbmcgUElDIGNvbnRlbnRzXG4iKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwotCi0JdiA9IGluYigweGExKSA8PCA4IHwgaW5iKDB4MjEpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJTVI6ICUwNHhcbiIsIHYpOwotCi0JdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJUlI6ICUwNHhcbiIsIHYpOwotCi0Jb3V0YigweDBiLCAweGEwKTsKLQlvdXRiKDB4MGIsIDB4MjApOwotCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKLQlvdXRiKDB4MGEsIDB4YTApOwotCW91dGIoMHgwYSwgMHgyMCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElTUjogJTA0eFxuIiwgdik7Ci0KLQl2ID0gaW5iKDB4NGQxKSA8PCA4IHwgaW5iKDB4NGQwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyBFTENSOiAlMDR4XG4iLCB2KTsKLX0KLQotX19hcGljZGVidWdpbml0KGludCkgcHJpbnRfYWxsX0lDcyh2b2lkKQotewotCXByaW50X1BJQygpOwotCXByaW50X2FsbF9sb2NhbF9BUElDcygpOwotCXByaW50X0lPX0FQSUMoKTsKLQotCXJldHVybiAwOwotfQotCi1mc19pbml0Y2FsbChwcmludF9hbGxfSUNzKTsKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZW5hYmxlX0lPX0FQSUModm9pZCkKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7Ci0JaW50IGk4MjU5X2FwaWMsIGk4MjU5X3BpbjsKLQlpbnQgaSwgYXBpYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZm9yIChpID0gMDsgaSA8IFBJTl9NQVBfU0laRTsgaSsrKSB7Ci0JCWlycV8yX3BpbltpXS5waW4gPSAtMTsKLQkJaXJxXzJfcGluW2ldLm5leHQgPSAwOwotCX0KLQlpZiAoIXBpcnFzX2VuYWJsZWQpCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKLQkJCXBpcnFfZW50cmllc1tpXSA9IC0xOwotCi0JLyoKLQkgKiBUaGUgbnVtYmVyIG9mIElPLUFQSUMgSVJRIHJlZ2lzdGVycyAoPT0gI3BpbnMpOgotCSAqLwotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7Ci0JfQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJaW50IHBpbjsKLQkJLyogU2VlIGlmIGFueSBvZiB0aGUgcGlucyBpcyBpbiBFeHRJTlQgbW9kZSAqLwotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQkJCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQotCi0JCQkvKiBJZiB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZW5hYmxlZCBhbmQgaW4gRXh0SW50IG1vZGUKLQkJCSAqIEkgaGF2ZSBmb3VuZCB0aGUgcGluIHdoZXJlIHRoZSBpODI1OSBpcyBjb25uZWN0ZWQuCi0JCQkgKi8KLQkJCWlmICgoZW50cnkubWFzayA9PSAwKSAmJiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X0V4dElOVCkpIHsKLQkJCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGFwaWM7Ci0JCQkJaW9hcGljX2k4MjU5LnBpbiAgPSBwaW47Ci0JCQkJZ290byBmb3VuZF9pODI1OTsKLQkJCX0KLQkJfQotCX0KLSBmb3VuZF9pODI1OToKLQkvKiBMb29rIHRvIHNlZSB3aGF0IGlmIHRoZSBNUCB0YWJsZSBoYXMgcmVwb3J0ZWQgdGhlIEV4dElOVCAqLwotCS8qIElmIHdlIGNvdWxkIG5vdCBmaW5kIHRoZSBhcHByb3ByaWF0ZSBwaW4gYnkgbG9va2luZyBhdCB0aGUgaW9hcGljCi0JICogdGhlIGk4MjU5IHByb2JhYmx5IGlzIG5vdCBjb25uZWN0ZWQgdGhlIGlvYXBpYyBidXQgZ2l2ZSB0aGUKLQkgKiBtcHRhYmxlIGEgY2hhbmNlIGFueXdheS4KLQkgKi8KLQlpODI1OV9waW4gID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9FeHRJTlQpOwotCWk4MjU5X2FwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9FeHRJTlQpOwotCS8qIFRydXN0IHRoZSBNUCB0YWJsZSBpZiBub3RoaW5nIGlzIHNldHVwIGluIHRoZSBoYXJkd2FyZSAqLwotCWlmICgoaW9hcGljX2k4MjU5LnBpbiA9PSAtMSkgJiYgKGk4MjU5X3BpbiA+PSAwKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFeHRJTlQgbm90IHNldHVwIGluIGhhcmR3YXJlIGJ1dCByZXBvcnRlZCBieSBNUCB0YWJsZVxuIik7Ci0JCWlvYXBpY19pODI1OS5waW4gID0gaTgyNTlfcGluOwotCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGk4MjU5X2FwaWM7Ci0JfQotCS8qIENvbXBsYWluIGlmIHRoZSBNUCB0YWJsZSBhbmQgdGhlIGhhcmR3YXJlIGRpc2FncmVlICovCi0JaWYgKCgoaW9hcGljX2k4MjU5LmFwaWMgIT0gaTgyNTlfYXBpYykgfHwgKGlvYXBpY19pODI1OS5waW4gIT0gaTgyNTlfcGluKSkgJiYKLQkJKGk4MjU5X3BpbiA+PSAwKSAmJiAoaW9hcGljX2k4MjU5LnBpbiA+PSAwKSkKLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBpbiBoYXJkd2FyZSBhbmQgTVAgdGFibGUgZGlmZmVyXG4iKTsKLQl9Ci0KLQkvKgotCSAqIERvIG5vdCB0cnVzdCB0aGUgSU8tQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAKLQkgKi8KLQljbGVhcl9JT19BUElDKCk7Ci19Ci0KLS8qCi0gKiBOb3QgYW4gX19pbml0LCBuZWVkZWQgYnkgdGhlIHJlYm9vdCBjb2RlCi0gKi8KLXZvaWQgZGlzYWJsZV9JT19BUElDKHZvaWQpCi17Ci0JLyoKLQkgKiBDbGVhciB0aGUgSU8tQVBJQyBiZWZvcmUgcmVib290aW5nOgotCSAqLwotCWNsZWFyX0lPX0FQSUMoKTsKLQotCS8qCi0JICogSWYgdGhlIGk4MjU5IGlzIHJvdXRlZCB0aHJvdWdoIGFuIElPQVBJQwotCSAqIFB1dCB0aGF0IElPQVBJQyBpbiB2aXJ0dWFsIHdpcmUgbW9kZQotCSAqIHNvIGxlZ2FjeSBpbnRlcnJ1cHRzIGNhbiBiZSBkZWxpdmVyZWQuCi0JICovCi0JaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEpIHsKLQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0JCWVudHJ5Lm1hc2sgICAgICAgICAgICA9IDA7IC8qIEVuYWJsZWQgKi8KLQkJZW50cnkudHJpZ2dlciAgICAgICAgID0gMDsgLyogRWRnZSAqLwotCQllbnRyeS5pcnIgICAgICAgICAgICAgPSAwOwotCQllbnRyeS5wb2xhcml0eSAgICAgICAgPSAwOyAvKiBIaWdoICovCi0JCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cyA9IDA7Ci0JCWVudHJ5LmRlc3RfbW9kZSAgICAgICA9IDA7IC8qIFBoeXNpY2FsICovCi0JCWVudHJ5LmRlbGl2ZXJ5X21vZGUgICA9IGRlc3RfRXh0SU5UOyAvKiBFeHRJbnQgKi8KLQkJZW50cnkudmVjdG9yICAgICAgICAgID0gMDsKLQkJZW50cnkuZGVzdC5waHlzaWNhbC5waHlzaWNhbF9kZXN0ID0gcmVhZF9hcGljX2lkKCk7Ci0KLQkJLyoKLQkJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCQkgKi8KLQkJaW9hcGljX3dyaXRlX2VudHJ5KGlvYXBpY19pODI1OS5hcGljLCBpb2FwaWNfaTgyNTkucGluLCBlbnRyeSk7Ci0JfQotCWRpc2Nvbm5lY3RfYnNwX0FQSUMoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSk7Ci19Ci0KLS8qCi0gKiBmdW5jdGlvbiB0byBzZXQgdGhlIElPLUFQSUMgcGh5c2ljYWwgSURzIGJhc2VkIG9uIHRoZQotICogdmFsdWVzIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgotICoKLSAqIGJ5IE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4gIFR1ZSBEZWMgMjEgMTI6MjU6MDUgQ1NUIDE5OTkKLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYyh2b2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKLQlwaHlzaWRfbWFza190IHBoeXNfaWRfcHJlc2VudF9tYXA7Ci0JaW50IGFwaWM7Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciBvbGRfaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICh4ODZfcXVpcmtzLT5zZXR1cF9pb2FwaWNfaWRzICYmIHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMoKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBEb24ndCBjaGVjayBJL08gQVBJQyBJRHMgZm9yIHhBUElDIHN5c3RlbXMuICBUaGV5IGhhdmUKLQkgKiBubyBtZWFuaW5nIHdpdGhvdXQgdGhlIHNlcmlhbCBBUElDIGJ1cy4KLQkgKi8KLQlpZiAoIShib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkKLQkJfHwgQVBJQ19YQVBJQyhhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpCi0JCXJldHVybjsKLQkvKgotCSAqIFRoaXMgaXMgYnJva2VuOyBhbnl0aGluZyB3aXRoIGEgcmVhbCBjcHUgY291bnQgaGFzIHRvCi0JICogY2lyY3VtdmVudCB0aGlzIGlkaW9jeSByZWdhcmRsZXNzLgotCSAqLwotCXBoeXNfaWRfcHJlc2VudF9tYXAgPSBpb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOwotCi0JLyoKLQkgKiBTZXQgdGhlIElPQVBJQyBJRCB0byB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCi0JICovCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCi0JCS8qIFJlYWQgdGhlIHJlZ2lzdGVyIDAgdmFsdWUgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQkJb2xkX2lkID0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7Ci0KLQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgSU8tQVBJQyMlZCBJRCBpcyAlZCBpbiB0aGUgTVBDIHRhYmxlIS4uLlxuIiwKLQkJCQlhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmaXhpbmcgdXAgdG8gJWQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKLQkJCQlyZWdfMDAuYml0cy5JRCk7Ci0JCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9IHJlZ18wMC5iaXRzLklEOwotCQl9Ci0KLQkJLyoKLQkJICogU2FuaXR5IGNoZWNrLCBpcyB0aGUgSUQgcmVhbGx5IGZyZWU/IEV2ZXJ5IEFQSUMgaW4gYQotCQkgKiBzeXN0ZW0gbXVzdCBoYXZlIGEgdW5pcXVlIElEIG9yIHdlIGdldCBsb3RzIG9mIG5pY2UKLQkJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCi0JCSAqLwotCQlpZiAoY2hlY2tfYXBpY2lkX3VzZWQocGh5c19pZF9wcmVzZW50X21hcCwKLQkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEICVkIGlzIGFscmVhZHkgdXNlZCEuLi5cbiIsCi0JCQkJYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCQkJZm9yIChpID0gMDsgaSA8IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKTsgaSsrKQotCQkJCWlmICghcGh5c2lkX2lzc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApKQotCQkJCQlicmVhazsKLQkJCWlmIChpID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkKLQkJCQlwYW5pYygiTWF4IEFQSUMgSUQgZXhjZWVkZWQhXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCWkpOwotCQkJcGh5c2lkX3NldChpLCBwaHlzX2lkX3ByZXNlbnRfbWFwKTsKLQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID0gaTsKLQkJfSBlbHNlIHsKLQkJCXBoeXNpZF9tYXNrX3QgdG1wOwotCQkJdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlNldHRpbmcgJWQgaW4gdGhlICIKLQkJCQkJInBoeXNfaWRfcHJlc2VudF9tYXBcbiIsCi0JCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQkJCXBoeXNpZHNfb3IocGh5c19pZF9wcmVzZW50X21hcCwgcGh5c19pZF9wcmVzZW50X21hcCwgdG1wKTsKLQkJfQotCi0KLQkJLyoKLQkJICogV2UgbmVlZCB0byBhZGp1c3QgdGhlIElSUSByb3V0aW5nIHRhYmxlCi0JCSAqIGlmIHRoZSBJRCBjaGFuZ2VkLgotCQkgKi8KLQkJaWYgKG9sZF9pZCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKLQkJCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQkJCWlmIChtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gb2xkX2lkKQotCQkJCQltcF9pcnFzW2ldLm1wX2RzdGFwaWMKLQkJCQkJCT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7Ci0KLQkJLyoKLQkJICogUmVhZCB0aGUgcmlnaHQgdmFsdWUgZnJvbSB0aGUgTVBDIHRhYmxlIGFuZAotCQkgKiB3cml0ZSBpdCBpbnRvIHRoZSBJRCByZWdpc3Rlci4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCi0JCQkiLi4uY2hhbmdpbmcgSU8tQVBJQyBwaHlzaWNhbCBBUElDIElEIHRvICVkIC4uLiIsCi0JCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0KLQkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCWlvX2FwaWNfd3JpdGUoYXBpYywgMCwgcmVnXzAwLnJhdyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQkJLyoKLQkJICogU2FuaXR5IGNoZWNrCi0JCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKQotCQkJcHJpbnRrKCJjb3VsZCBub3Qgc2V0IElEIVxuIik7Ci0JCWVsc2UKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBvay5cbiIpOwotCX0KLX0KLQotaW50IG5vX3RpbWVyX2NoZWNrIF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBpbnQgX19pbml0IG5vdGltZXJjaGVjayhjaGFyICpzKQotewotCW5vX3RpbWVyX2NoZWNrID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoIm5vX3RpbWVyX2NoZWNrIiwgbm90aW1lcmNoZWNrKTsKLQotLyoKLSAqIFRoZXJlIGlzIGEgbmFzdHkgYnVnIGluIHNvbWUgb2xkZXIgU01QIGJvYXJkcywgdGhlaXIgbXB0YWJsZSBsaWVzCi0gKiBhYm91dCB0aGUgdGltZXIgSVJRLiBXZSBkbyB0aGUgZm9sbG93aW5nIHRvIHdvcmsgYXJvdW5kIHRoZSBzaXR1YXRpb246Ci0gKgotICoJLSB0aW1lciBJUlEgZGVmYXVsdHMgdG8gSU8tQVBJQyBJUlEKLSAqCS0gaWYgdGhpcyBmdW5jdGlvbiBkZXRlY3RzIHRoYXQgdGltZXIgSVJRcyBhcmUgZGVmdW5jdCwgdGhlbiB3ZSBmYWxsCi0gKgkgIGJhY2sgdG8gSVNBIHRpbWVyIElSUXMKLSAqLwotc3RhdGljIGludCBfX2luaXQgdGltZXJfaXJxX3dvcmtzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0MSA9IGppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChub190aW1lcl9jaGVjaykKLQkJcmV0dXJuIDE7Ci0KLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JLyogTGV0IHRlbiB0aWNrcyBwYXNzLi4uICovCi0JbWRlbGF5KCgxMCAqIDEwMDApIC8gSFopOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qCi0JICogRXhwZWN0IGEgZmV3IHRpY2tzIGF0IGxlYXN0LCB0byBiZSBzdXJlIHNvbWUgcG9zc2libGUKLQkgKiBnbHVlIGxvZ2ljIGRvZXMgbm90IGxvY2sgdXAgYWZ0ZXIgb25lIG9yIHR3byBmaXJzdAotCSAqIHRpY2tzIGluIGEgbm9uLUV4dElOVCBtb2RlLiAgQWxzbyB0aGUgbG9jYWwgQVBJQwotCSAqIG1pZ2h0IGhhdmUgY2FjaGVkIG9uZSBFeHRJTlQgaW50ZXJydXB0LiAgRmluYWxseSwgYXQKLQkgKiBsZWFzdCBvbmUgdGljayBtYXkgYmUgbG9zdCBkdWUgdG8gZGVsYXlzLgotCSAqLwotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHQxICsgNCkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbiB0aGUgU01QK0lPQVBJQyBjYXNlIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHRoZXJlIGFyZSBhbiB1bnNwZWNpZmllZAotICogbnVtYmVyIG9mIHBlbmRpbmcgSVJRIGV2ZW50cyB1bmhhbmRsZWQuIFRoZXNlIGNhc2VzIGFyZSB2ZXJ5IHJhcmUsCi0gKiBzbyB3ZSAncmVzZW5kJyB0aGVzZSBJUlFzIHZpYSBJUElzLCB0byB0aGUgc2FtZSBDUFUuIEl0J3MgbXVjaAotICogYmV0dGVyIHRvIGRvIGl0IHRoaXMgd2F5IGFzIHRodXMgd2UgZG8gbm90IGhhdmUgdG8gYmUgYXdhcmUgb2YKLSAqICdwZW5kaW5nJyBpbnRlcnJ1cHRzIGluIHRoZSBJUlEgcGF0aCwgZXhjZXB0IGF0IHRoaXMgcG9pbnQuCi0gKi8KLS8qCi0gKiBFZGdlIHRyaWdnZXJlZCBuZWVkcyB0byByZXNlbmQgYW55IGludGVycnVwdAotICogdGhhdCB3YXMgZGVsYXllZCBidXQgdGhpcyBpcyBub3cgaGFuZGxlZCBpbiB0aGUgZGV2aWNlCi0gKiBpbmRlcGVuZGVudCBjb2RlLgotICovCi0KLS8qCi0gKiBTdGFydHVwIHF1aXJrOgotICoKLSAqIFN0YXJ0aW5nIHVwIGEgZWRnZS10cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHQgaXMKLSAqIG5hc3R5IC0gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgdGhlIGVkZ2UuCi0gKiBJZiBpdCBpcyBhbHJlYWR5IGFzc2VydGVkIGZvciBzb21lIHJlYXNvbiwgd2UgbmVlZAotICogcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCBpcyB3YXMgcGVuZGluZy4KLSAqCi0gKiBUaGlzIGlzIG5vdCBjb21wbGV0ZSAtIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZha2UKLSAqIGFuIGVkZ2UgZXZlbiBpZiBpdCBpc24ndCBvbiB0aGUgODI1OUEuLi4KLSAqCi0gKiAoV2UgZG8gdGhpcyBmb3IgbGV2ZWwtdHJpZ2dlcmVkIElSUXMgdG9vIC0gaXQgY2Fubm90IGh1cnQuKQotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCB3YXNfcGVuZGluZyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlmIChpcnEgPCAxNikgewotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCQlpZiAoaTgyNTlBX2lycV9wZW5kaW5nKGlycSkpCi0JCQl3YXNfcGVuZGluZyA9IDE7Ci0JfQotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiB3YXNfcGVuZGluZzsKLX0KLQotc3RhdGljIHZvaWQgYWNrX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKLQlhY2tfQVBJQ19pcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgYWNrX2lvYXBpY19xdWlya19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0JaW50IGk7Ci0KLQltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKLS8qCi0gKiBJdCBhcHBlYXJzIHRoZXJlIGlzIGFuIGVycmF0dW0gd2hpY2ggYWZmZWN0cyBhdCBsZWFzdCB2ZXJzaW9uIDB4MTEKLSAqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCi0gKiBjaGlwc2V0cykuICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGlzCi0gKiBlcnJvbmVvdXNseSBkZWxpdmVyZWQgYXMgZWRnZS10cmlnZ2VyZWQgb25lIGJ1dCB0aGUgcmVzcGVjdGl2ZSBJUlIKLSAqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKLSAqIG1lc3NhZ2UgYnV0IGl0IHdpbGwgbmV2ZXIgYXJyaXZlIGFuZCBmdXJ0aGVyIGludGVycnVwdHMgYXJlIGJsb2NrZWQKLSAqIGZyb20gdGhlIHNvdXJjZS4gIFRoZSBleGFjdCByZWFzb24gaXMgc28gZmFyIHVua25vd24sIGJ1dCB0aGUKLSAqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cwotICogZnJvbSBhIGdpdmVuIHNvdXJjZSBnZXQgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIENQVSBhbmQgdGhlIHNvdXJjZSBpcwotICogdGVtcG9yYXJpbHkgZGlzYWJsZWQgaW4gYmV0d2Vlbi4KLSAqCi0gKiBBIHdvcmthcm91bmQgaXMgdG8gc2ltdWxhdGUgYW4gRU9JIG1lc3NhZ2UgbWFudWFsbHkuICBXZSBhY2hpZXZlIGl0Ci0gKiBieSBzZXR0aW5nIHRoZSB0cmlnZ2VyIG1vZGUgdG8gZWRnZSBhbmQgdGhlbiB0byBsZXZlbCB3aGVuIHRoZSBlZGdlCi0gKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQotICogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdC4gIFdlIG1hc2sgdGhlIHNvdXJjZSBmb3IgdGhlIHRpbWUgb2YgdGhlCi0gKiBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZXNjYXBpbmcgbWVhbndoaWxlLgotICogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KLSAqLwotCWkgPSBpcnFfdmVjdG9yW2lycV07Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1SICsgKChpICYgfjB4MWYpID4+IDEpKTsKLQotCWFja19BUElDX2lycSgpOwotCi0JaWYgKCEodiAmICgxIDw8IChpICYgMHgxZikpKSkgewotCQlhdG9taWNfaW5jKCZpcnFfbWlzX2NvdW50KTsKLQkJc3Bpbl9sb2NrKCZpb2FwaWNfbG9jayk7Ci0JCV9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShpcnEpOwotCQlfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoaXJxKTsKLQkJc3Bpbl91bmxvY2soJmlvYXBpY19sb2NrKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzZW5kX0lQSV9zZWxmKGlycV92ZWN0b3JbaXJxXSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSU8tQVBJQyIsCi0JLnN0YXJ0dXAgCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAotCS5tYXNrCSAJPSBtYXNrX0lPX0FQSUNfaXJxLAotCS51bm1hc2sJIAk9IHVubWFza19JT19BUElDX2lycSwKLQkuYWNrIAkJPSBhY2tfaW9hcGljX2lycSwKLQkuZW9pIAkJPSBhY2tfaW9hcGljX3F1aXJrX2lycSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eSAJPSBzZXRfaW9hcGljX2FmZmluaXR5X2lycSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQotewotCWludCBpcnE7Ci0KLQkvKgotCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZwotCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCi0JICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQotCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKLQkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCi0JICoKLQkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQotCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQotCSAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUyA7IGlycSsrKSB7Ci0JCWlmIChJT19BUElDX0lSUShpcnEpICYmICFpcnFfdmVjdG9yW2lycV0pIHsKLQkJCS8qCi0JCQkgKiBIbW0uLiBXZSBkb24ndCBoYXZlIGFuIGVudHJ5IGZvciB0aGlzLAotCQkJICogc28gZGVmYXVsdCB0byBhbiBvbGQtZmFzaGlvbmVkIDgyNTkKLQkJCSAqIGludGVycnVwdCBpZiB3ZSBjYW4uLgotCQkJICovCi0JCQlpZiAoaXJxIDwgMTYpCi0JCQkJbWFrZV84MjU5QV9pcnEoaXJxKTsKLQkJCWVsc2UKLQkJCQkvKiBTdHJhbmdlLiBPaCwgd2VsbC4uICovCi0JCQkJaXJxX2Rlc2NbaXJxXS5jaGlwID0gJm5vX2lycV9jaGlwOwotCQl9Ci0JfQotfQotCi0vKgotICogVGhlIGxvY2FsIEFQSUMgaXJxLWNoaXAgaW1wbGVtZW50YXRpb246Ci0gKi8KLQotc3RhdGljIHZvaWQgYWNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWFja19BUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBtYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgJiB+QVBJQ19MVlRfTUFTS0VEKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUJCT0gImxvY2FsLUFQSUMiLAotCS5tYXNrCQk9IG1hc2tfbGFwaWNfaXJxLAotCS51bm1hc2sJCT0gdW5tYXNrX2xhcGljX2lycSwKLQkuYWNrCQk9IGFja19sYXBpY19pcnEsCi19OwotCi1zdGF0aWMgdm9pZCBsYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIGludCB2ZWN0b3IpCi17Ci0JaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsYXBpY19jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCi0JCQkJICAgICAgImVkZ2UiKTsKLQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2lycV0pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbm1pKHZvaWQpCi17Ci0JLyoKLQkgKiBEaXJ0eSB0cmljayB0byBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZyAuLi4KLQkgKiBXZSBwdXQgdGhlIDgyNTlBIG1hc3RlciBpbnRvIEFFT0kgbW9kZSBhbmQKLQkgKiB1bm1hc2sgb24gYWxsIGxvY2FsIEFQSUNzIExWVDAgYXMgTk1JLgotCSAqCi0JICogVGhlIGlkZWEgdG8gdXNlIHRoZSA4MjU5QSBpbiBBRU9JIG1vZGUgKCc4MjU5QSBWaXJ0dWFsIFdpcmUnKQotCSAqIGlzIGZyb20gTWFjaWVqIFcuIFJvenlja2kgLSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBFT0kgZnJvbQotCSAqIHRoZSBOTUkgaGFuZGxlciBvciB0aGUgdGltZXIgaW50ZXJydXB0LgotCSAqLwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPICJhY3RpdmF0aW5nIE5NSSBXYXRjaGRvZyAuLi4iKTsKLQotCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgZG9uZS5cbiIpOwotfQotCi0vKgotICogVGhpcyBsb29rcyBhIGJpdCBoYWNraXNoIGJ1dCBpdCdzIGFib3V0IHRoZSBvbmx5IG9uZSB3YXkgb2Ygc2VuZGluZwotICogYSBmZXcgSU5UQSBjeWNsZXMgdG8gODI1OUFzIGFuZCBhbnkgYXNzb2NpYXRlZCBnbHVlIGxvZ2ljLiAgSUNSIGRvZXMKLSAqIG5vdCBzdXBwb3J0IHRoZSBFeHRJTlQgbW9kZSwgdW5mb3J0dW5hdGVseS4gIFdlIG5lZWQgdG8gc2VuZCB0aGVzZQotICogY3ljbGVzIGFzIHNvbWUgaTgyNDg5RFgtYmFzZWQgYm9hcmRzIGhhdmUgZ2x1ZSBsb2dpYyB0aGF0IGtlZXBzIHRoZQotICogODI1OUEgaW50ZXJydXB0IGxpbmUgYXNzZXJ0ZWQgdW50aWwgSU5UQS4gIC0tbWFjcm8KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1bmxvY2tfRXh0SU5UX2xvZ2ljKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbiwgaTsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTAsIGVudHJ5MTsKLQl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKLQotCXBpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDgsIG1wX0lOVCk7Ci0JaWYgKHBpbiA9PSAtMSkgewotCQlXQVJOX09OX09OQ0UoMSk7Ci0JCXJldHVybjsKLQl9Ci0JYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDgsIG1wX0lOVCk7Ci0JaWYgKGFwaWMgPT0gLTEpIHsKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JZW50cnkwID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwotCi0JbWVtc2V0KCZlbnRyeTEsIDAsIHNpemVvZihlbnRyeTEpKTsKLQotCWVudHJ5MS5kZXN0X21vZGUgPSAwOwkJCS8qIHBoeXNpY2FsIGRlbGl2ZXJ5ICovCi0JZW50cnkxLm1hc2sgPSAwOwkJCS8qIHVubWFzayBJUlEgbm93ICovCi0JZW50cnkxLmRlc3QucGh5c2ljYWwucGh5c2ljYWxfZGVzdCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWVudHJ5MS5kZWxpdmVyeV9tb2RlID0gZGVzdF9FeHRJTlQ7Ci0JZW50cnkxLnBvbGFyaXR5ID0gZW50cnkwLnBvbGFyaXR5OwotCWVudHJ5MS50cmlnZ2VyID0gMDsKLQllbnRyeTEudmVjdG9yID0gMDsKLQotCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MSk7Ci0KLQlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwotCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsKLQlDTU9TX1dSSVRFKChzYXZlX2ZyZXFfc2VsZWN0ICYgflJUQ19SQVRFX1NFTEVDVCkgfCAweDYsCi0JCSAgIFJUQ19GUkVRX1NFTEVDVCk7Ci0JQ01PU19XUklURShzYXZlX2NvbnRyb2wgfCBSVENfUElFLCBSVENfQ09OVFJPTCk7Ci0KLQlpID0gMTAwOwotCXdoaWxlIChpLS0gPiAwKSB7Ci0JCW1kZWxheSgxMCk7Ci0JCWlmICgoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIFJUQ19QRikgPT0gUlRDX1BGKQotCQkJaSAtPSAxMDsKLQl9Ci0KLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOwotCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKLQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkwKTsKLX0KLQotLyoKLSAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKLSAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQotICogaXMgc28gc2NyZXd5LiAgVGhhbmtzIHRvIEJyaWFuIFBlcmtpbnMgZm9yIHRlc3RpbmcvaGFja2luZyB0aGlzIGJlYXN0Ci0gKiBmYW5hdGljYWxseSBvbiBoaXMgdHJ1bHkgYnVnZ3kgYm9hcmQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfdGltZXIodm9pZCkKLXsKLQlpbnQgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yOwotCWludCBub19waW4xID0gMDsKLQlpbnQgdmVjdG9yOwotCXVuc2lnbmVkIGludCB2ZXI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXZlciA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2ZXIpOwotCi0JLyoKLQkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgotCSAqLwotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKDApOwotCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbMF0pOwotCi0JLyoKLQkgKiBBcyBJUlEwIGlzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIDgyNTlBLCB0aGUgdmlydHVhbAotCSAqIHdpcmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIHRoZSBsb2NhbCBBUElDLiAgQWxzbwotCSAqIHRpbWVyIGludGVycnVwdHMgbmVlZCB0byBiZSBhY2tub3dsZWRnZWQgbWFudWFsbHkgaW4KLQkgKiB0aGUgODI1OUEgZm9yIHRoZSBpODI0ODlEWCB3aGVuIHVzaW5nIHRoZSBOTUkKLQkgKiB3YXRjaGRvZyBhcyB0aGF0IEFQSUMgdHJlYXRzIE5NSXMgYXMgbGV2ZWwtdHJpZ2dlcmVkLgotCSAqIFRoZSBBRU9JIG1vZGUgd2lsbCBmaW5pc2ggdGhlbSBpbiB0aGUgODI1OUEKLQkgKiBhdXRvbWF0aWNhbGx5LgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0VYVElOVCk7Ci0JaW5pdF84MjU5QSgxKTsKLQl0aW1lcl9hY2sgPSAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDICYmICFBUElDX0lOVEVHUkFURUQodmVyKSk7Ci0KLQlwaW4xICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfSU5UKTsKLQlhcGljMSA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0lOVCk7Ci0JcGluMiAgPSBpb2FwaWNfaTgyNTkucGluOwotCWFwaWMyID0gaW9hcGljX2k4MjU5LmFwaWM7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggIgotCQkgICAgImFwaWMxPSVkIHBpbjE9JWQgYXBpYzI9JWQgcGluMj0lZFxuIiwKLQkJICAgIHZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKLQotCS8qCi0JICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKLQkgKiBJL08gQVBJQyBpbnB1dCBmcm9tIHRoZSBjYXNjYWRlZCA4MjU5QSBhcyB0aGUgdGltZXIKLQkgKiBpbnRlcnJ1cHQgaW5wdXQuICBTbyBqdXN0IGluIGNhc2UsIGlmIG9ubHkgb25lIHBpbgotCSAqIHdhcyBmb3VuZCBhYm92ZSwgdHJ5IGl0IGJvdGggZGlyZWN0bHkgYW5kIHRocm91Z2ggdGhlCi0JICogODI1OUEuCi0JICovCi0JaWYgKHBpbjEgPT0gLTEpIHsKLQkJcGluMSA9IHBpbjI7Ci0JCWFwaWMxID0gYXBpYzI7Ci0JCW5vX3BpbjEgPSAxOwotCX0gZWxzZSBpZiAocGluMiA9PSAtMSkgewotCQlwaW4yID0gcGluMTsKLQkJYXBpYzIgPSBhcGljMTsKLQl9Ci0KLQlpZiAocGluMSAhPSAtMSkgewotCQkvKgotCQkgKiBPaywgZG9lcyBJUlEwIHRocm91Z2ggdGhlIElPQVBJQyB3b3JrPwotCQkgKi8KLQkJaWYgKG5vX3BpbjEpIHsKLQkJCWFkZF9waW5fdG9faXJxKDAsIGFwaWMxLCBwaW4xKTsKLQkJCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMxLCBwaW4xLCB2ZWN0b3IpOwotCQl9Ci0JCXVubWFza19JT19BUElDX2lycSgwKTsKLQkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCQkJc2V0dXBfbm1pKCk7Ci0JCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKLQkJCX0KLQkJCWlmIChkaXNhYmxlX3RpbWVyX3Bpbl8xID4gMCkKLQkJCQljbGVhcl9JT19BUElDX3BpbigwLCBwaW4xKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKLQkJaWYgKCFub19waW4xKQotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9FUlIgIi4uTVAtQklPUyBidWc6ICIKLQkJCQkgICAgIjgyNTQgdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDXG4iKTsKLQotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgIgotCQkJICAgICIoSVJRMCkgdGhyb3VnaCB0aGUgODI1OUEgLi4uXG4iKTsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCQkgICAgIi4uLi4uIChmb3VuZCBhcGljICVkIHBpbiAlZCkgLi4uXG4iLCBhcGljMiwgcGluMik7Ci0JCS8qCi0JCSAqIGxlZ2FjeSBkZXZpY2VzIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gSU8gQVBJQyAjMAotCQkgKi8KLQkJcmVwbGFjZV9waW5fYXRfaXJxKDAsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7Ci0JCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMyLCBwaW4yLCB2ZWN0b3IpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7Ci0JCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7Ci0JCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOwotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKgotCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCi0JCSAqLwotCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOwotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gZmFpbGVkLlxuIik7Ci0JfQotCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCi0JCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7Ci0JCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOwotCX0KLQl0aW1lcl9hY2sgPSAwOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uXG4iKTsKLQotCWxhcGljX3JlZ2lzdGVyX2ludHIoMCwgdmVjdG9yKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9GSVhFRCB8IHZlY3Rvcik7CS8qIEZpeGVkIG1vZGUgKi8KLQllbmFibGVfODI1OUFfaXJxKDApOwotCi0JaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yKTsKLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZC5cbiIpOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBFeHRJTlQgSVJRLi4uXG4iKTsKLQotCWluaXRfODI1OUEoMCk7Ci0JbWFrZV84MjU5QV9pcnEoMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKLQotCXVubG9ja19FeHRJTlRfbG9naWMoKTsKLQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZCA6KC5cbiIpOwotCXBhbmljKCJJTy1BUElDICsgdGltZXIgZG9lc24ndCB3b3JrISAgQm9vdCB3aXRoIGFwaWM9ZGVidWcgYW5kIHNlbmQgYSAiCi0JCSJyZXBvcnQuICBUaGVuIHRyeSBib290aW5nIHdpdGggdGhlICdub2FwaWMnIG9wdGlvbi5cbiIpOwotb3V0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFRyYWRpdGlvbmFsbHkgSVNBIElSUTIgaXMgdGhlIGNhc2NhZGUgSVJRLCBhbmQgaXMgbm90IGF2YWlsYWJsZQotICogdG8gZGV2aWNlcy4gIEhvd2V2ZXIgdGhlcmUgbWF5IGJlIGFuIEkvTyBBUElDIHBpbiBhdmFpbGFibGUgZm9yCi0gKiB0aGlzIGludGVycnVwdCByZWdhcmRsZXNzLiAgVGhlIHBpbiBtYXkgYmUgbGVmdCB1bmNvbm5lY3RlZCwgYnV0Ci0gKiB0eXBpY2FsbHkgaXQgd2lsbCBiZSByZXVzZWQgYXMgYW4gRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IGZvcgotICogdGhlIG1hc3RlciA4MjU5QS4gIEluIHRoZSBNUFMgY2FzZSBzdWNoIGEgcGluIHdpbGwgbm9ybWFsbHkgYmUKLSAqIHJlcG9ydGVkIGFzIGFuIEV4dElOVCBpbnRlcnJ1cHQgaW4gdGhlIE1QIHRhYmxlLiAgV2l0aCBBQ1BJCi0gKiB0aGVyZSBpcyBubyBwcm92aXNpb24gZm9yIEV4dElOVCBpbnRlcnJ1cHRzLCBhbmQgaW4gdGhlIGFic2VuY2UKLSAqIG9mIGFuIG92ZXJyaWRlIGl0IHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgSVNBIEkvTyBBUElDCi0gKiBpbnRlcnJ1cHQsIHRoYXQgaXMgZWRnZS10cmlnZ2VyZWQgYW5kIHVubWFza2VkIGJ5IGRlZmF1bHQuICBXZQotICogdXNlZCB0byBkbyB0aGlzLCBidXQgaXQgY2F1c2VkIHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcyBiZWNhdXNlCi0gKiBvZiB0aGUgTk1JIHdhdGNoZG9nIGFuZCBzb21ldGltZXMgSVJRMCBvZiB0aGUgODI1NCB0aW1lciB1c2luZwotICogdGhlIHNhbWUgRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IHRvIGRyaXZlIHRoZSBsb2NhbCBBUElDIG9mIHRoZQotICogYm9vdHN0cmFwIHByb2Nlc3Nvci4gIFRoZXJlZm9yZSB3ZSByZWZyYWluIGZyb20gcm91dGluZyBJUlEyIHRvCi0gKiB0aGUgSS9PIEFQSUMgaW4gYWxsIGNhc2VzIG5vdy4gIE5vIGFjdHVhbCBkZXZpY2Ugc2hvdWxkIHJlcXVlc3QKLSAqIGl0IGFueXdheS4gIC0tbWFjcm8KLSAqLwotI2RlZmluZSBQSUNfSVJRUwkoMSA8PCBQSUNfQ0FTQ0FERV9JUikKLQotdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQyh2b2lkKQotewotCWludCBpOwotCi0JLyogUmVzZXJ2ZSBhbGwgdGhlIHN5c3RlbSB2ZWN0b3JzLiAqLwotCWZvciAoaSA9IGZpcnN0X3N5c3RlbV92ZWN0b3I7IGkgPCBOUl9WRUNUT1JTOyBpKyspCi0JCXNldF9iaXQoaSwgdXNlZF92ZWN0b3JzKTsKLQotCWVuYWJsZV9JT19BUElDKCk7Ci0KLQlpb19hcGljX2lycXMgPSB+UElDX0lSUVM7Ci0KLQlwcmludGsoIkVOQUJMSU5HIElPLUFQSUMgSVJRc1xuIik7Ci0KLQkvKgotCSAqIFNldCB1cCBJTy1BUElDIElSUSByb3V0aW5nLgotCSAqLwotCWlmICghYWNwaV9pb2FwaWMpCi0JCXNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGMoKTsKLQlzeW5jX0FyYl9JRHMoKTsKLQlzZXR1cF9JT19BUElDX2lycXMoKTsKLQlpbml0X0lPX0FQSUNfdHJhcHMoKTsKLQljaGVja190aW1lcigpOwotfQotCi0vKgotICoJQ2FsbGVkIGFmdGVyIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4gSWYgd2UgZGlkbnQgZmluZCBhbnkKLSAqCUFQSUMgYnVncyB0aGVuIHdlIGNhbiBhbGxvdyB0aGUgbW9kaWZ5IGZhc3QgcGF0aAotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGlvX2FwaWNfYnVnX2ZpbmFsaXplKHZvaWQpCi17Ci0JaWYgKHNpc19hcGljX2J1ZyA9PSAtMSkKLQkJc2lzX2FwaWNfYnVnID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChpb19hcGljX2J1Z19maW5hbGl6ZSk7Ci0KLXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgZGV2OwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5WzBdOwotfTsKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKm1wX2lvYXBpY19kYXRhW01BWF9JT19BUElDU107Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOwotCWVudHJ5ID0gZGF0YS0+ZW50cnk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY19yZWdpc3RlcnNbZGV2LT5pZF07IGkrKykKLQkJZW50cnlbaV0gPSBpb2FwaWNfcmVhZF9lbnRyeShkZXYtPmlkLCBpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlvYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCWludCBpOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKLQllbnRyeSA9IGRhdGEtPmVudHJ5OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChkZXYtPmlkLCAwKTsKLQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1tkZXYtPmlkXS5tcF9hcGljaWQpIHsKLQkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZDsKLQkJaW9fYXBpY193cml0ZShkZXYtPmlkLCAwLCByZWdfMDAucmF3KTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSsrKQotCQlpb2FwaWNfd3JpdGVfZW50cnkoZGV2LT5pZCwgaSwgZW50cnlbaV0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGlvYXBpY19zeXNkZXZfY2xhc3MgPSB7Ci0JLm5hbWUgPSAiaW9hcGljIiwKLQkuc3VzcGVuZCA9IGlvYXBpY19zdXNwZW5kLAotCS5yZXN1bWUgPSBpb2FwaWNfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW9hcGljX2luaXRfc3lzZnModm9pZCkKLXsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2OwotCWludCBpLCBzaXplLCBlcnJvciA9IDA7Ci0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmaW9hcGljX3N5c2Rldl9jbGFzcyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IHN5c19kZXZpY2UpICsgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXQotCQkJKiBzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpOwotCQltcF9pb2FwaWNfZGF0YVtpXSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbXBfaW9hcGljX2RhdGFbaV0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldiA9ICZtcF9pb2FwaWNfZGF0YVtpXS0+ZGV2OwotCQlkZXYtPmlkID0gaTsKLQkJZGV2LT5jbHMgPSAmaW9hcGljX3N5c2Rldl9jbGFzczsKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoZGV2KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlrZnJlZShtcF9pb2FwaWNfZGF0YVtpXSk7Ci0JCQltcF9pb2FwaWNfZGF0YVtpXSA9IE5VTEw7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1kZXZpY2VfaW5pdGNhbGwoaW9hcGljX2luaXRfc3lzZnMpOwotCi0vKgotICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgotICovCi1pbnQgY3JlYXRlX2lycSh2b2lkKQotewotCS8qIEFsbG9jYXRlIGFuIHVudXNlZCBpcnEgKi8KLQlpbnQgaXJxLCBuZXcsIHZlY3RvciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlycSA9IC1FTk9TUEM7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JZm9yIChuZXcgPSAoTlJfSVJRUyAtIDEpOyBuZXcgPj0gMDsgbmV3LS0pIHsKLQkJaWYgKHBsYXRmb3JtX2xlZ2FjeV9pcnEobmV3KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXJxX3ZlY3RvcltuZXddICE9IDApCi0JCQljb250aW51ZTsKLQkJdmVjdG9yID0gX19hc3NpZ25faXJxX3ZlY3RvcihuZXcpOwotCQlpZiAobGlrZWx5KHZlY3RvciA+IDApKQotCQkJaXJxID0gbmV3OwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQotCWlmIChpcnEgPj0gMCkgewotCQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2lycV0pOwotCQlkeW5hbWljX2lycV9pbml0KGlycSk7Ci0JfQotCXJldHVybiBpcnE7Ci19Ci0KLXZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZHluYW1pY19pcnFfY2xlYW51cChpcnEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JY2xlYXJfYml0KGlycV92ZWN0b3JbaXJxXSwgdXNlZF92ZWN0b3JzKTsKLQlpcnFfdmVjdG9yW2lycV0gPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBNU0kgbWVzc2FnZSBjb21wb3NpdGlvbgotICovCi0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLXN0YXRpYyBpbnQgbXNpX2NvbXBvc2VfbXNnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCWludCB2ZWN0b3I7Ci0JdW5zaWduZWQgZGVzdDsKLQotCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0JaWYgKHZlY3RvciA+PSAwKSB7Ci0JCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCi0JCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7Ci0JCW1zZy0+YWRkcmVzc19sbyA9Ci0JCQlNU0lfQUREUl9CQVNFX0xPIHwKLQkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/Ci1NU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUw6Ci0JCQkJTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwpIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVOgotCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSSkgfAotCQkJTVNJX0FERFJfREVTVF9JRChkZXN0KTsKLQotCQltc2ctPmRhdGEgPQotCQkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKLQkJCU1TSV9EQVRBX0xFVkVMX0FTU0VSVCB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotTVNJX0RBVEFfREVMSVZFUllfRklYRUQ6Ci0JCQkJTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJKSB8Ci0JCQlNU0lfREFUQV9WRUNUT1IodmVjdG9yKTsKLQl9Ci0JcmV0dXJuIHZlY3RvcjsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIHNldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCWludCB2ZWN0b3I7Ci0KLQljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQl0bXAgPSBUQVJHRVRfQ1BVUzsKLQotCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0JaWYgKHZlY3RvciA8IDApCi0JCXJldHVybjsKLQotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQobWFzayk7Ci0KLQlyZWFkX21zaV9tc2coaXJxLCAmbXNnKTsKLQotCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKLQltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IodmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOwotCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7Ci0KLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi0vKgotICogSVJRIENoaXAgZm9yIE1TSSBQQ0kvUENJLVgvUENJLUV4cHJlc3MgRGV2aWNlcywKLSAqIHdoaWNoIGltcGxlbWVudCB0aGUgTVNJIG9yIE1TSS1YIENhcGFiaWxpdHkgU3RydWN0dXJlLgotICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktTVNJIiwKLQkudW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAotCS5tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuYWNrCQk9IGFja19pb2FwaWNfaXJxLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gc2V0X21zaV9pcnFfYWZmaW5pdHksCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi1pbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JaW50IGlycSwgcmV0OwotCWlycSA9IGNyZWF0ZV9pcnEoKTsKLQlpZiAoaXJxIDwgMCkKLQkJcmV0dXJuIGlycTsKLQotCXJldCA9IG1zaV9jb21wb3NlX21zZyhkZXYsIGlycSwgJm1zZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGVzdHJveV9pcnEoaXJxKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzZXRfaXJxX21zaShpcnEsIGRlc2MpOwotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKLQotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCi0JCQkJICAgICAgImVkZ2UiKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWRlc3Ryb3lfaXJxKGlycSk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLwotCi0vKgotICogSHlwZXJ0cmFuc3BvcnQgaW50ZXJydXB0IHN1cHBvcnQKLSAqLwotI2lmZGVmIENPTkZJR19IVF9JUlEKLQotI2lmZGVmIENPTkZJR19TTVAKLQotc3RhdGljIHZvaWQgdGFyZ2V0X2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZGVzdCkKLXsKLQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JZmV0Y2hfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JbXNnLmFkZHJlc3NfbG8gJj0gfihIVF9JUlFfTE9XX0RFU1RfSURfTUFTSyk7Ci0JbXNnLmFkZHJlc3NfaGkgJj0gfihIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spOwotCi0JbXNnLmFkZHJlc3NfbG8gfD0gSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOwotCW1zZy5hZGRyZXNzX2hpIHw9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7Ci0KLQl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXRtcCA9IFRBUkdFVF9DUFVTOwotCi0JY3B1c19hbmQobWFzaywgdG1wLCBDUFVfTUFTS19BTEwpOwotCi0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKTsKLQotCXRhcmdldF9odF9pcnEoaXJxLCBkZXN0KTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGh0X2lycV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktSFQiLAotCS5tYXNrCQk9IG1hc2tfaHRfaXJxLAotCS51bm1hc2sJCT0gdW5tYXNrX2h0X2lycSwKLQkuYWNrCQk9IGFja19pb2FwaWNfaXJxLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gc2V0X2h0X2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLWludCBhcmNoX3NldHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCB2ZWN0b3I7Ci0KLQl2ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEpOwotCWlmICh2ZWN0b3IgPj0gMCkgewotCQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JCXVuc2lnbmVkIGRlc3Q7Ci0JCWNwdW1hc2tfdCB0bXA7Ci0KLQkJY3B1c19jbGVhcih0bXApOwotCQljcHVfc2V0KHZlY3RvciA+PiA4LCB0bXApOwotCQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQkJbXNnLmFkZHJlc3NfaGkgPSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOwotCi0JCW1zZy5hZGRyZXNzX2xvID0KLQkJCUhUX0lSUV9MT1dfQkFTRSB8Ci0JCQlIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCkgfAotCQkJSFRfSVJRX0xPV19WRUNUT1IodmVjdG9yKSB8Ci0JCQkoKElOVF9ERVNUX01PREUgPT0gMCkgPwotCQkJCUhUX0lSUV9MT1dfRE1fUEhZU0lDQUwgOgotCQkJCUhUX0lSUV9MT1dfRE1fTE9HSUNBTCkgfAotCQkJSFRfSVJRX0xPV19SUUVPSV9FREdFIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJSFRfSVJRX0xPV19NVF9GSVhFRCA6Ci0JCQkJSFRfSVJRX0xPV19NVF9BUkJJVFJBVEVEKSB8Ci0JCQlIVF9JUlFfTE9XX0lSUV9NQVNLRUQ7Ci0KLQkJd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmh0X2lycV9jaGlwLAotCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JfQotCXJldHVybiB2ZWN0b3I7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJQUNQSS1iYXNlZCBJT0FQSUMgQ29uZmlndXJhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BQ1BJCi0KLWludCBfX2luaXQgaW9fYXBpY19nZXRfdW5pcXVlX2lkKGludCBpb2FwaWMsIGludCBhcGljX2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKLQlzdGF0aWMgcGh5c2lkX21hc2tfdCBhcGljX2lkX21hcCA9IFBIWVNJRF9NQVNLX05PTkU7Ci0JcGh5c2lkX21hc2tfdCB0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSA9IDA7Ci0KLQkvKgotCSAqIFRoZSBQNCBwbGF0Zm9ybSBzdXBwb3J0cyB1cCB0byAyNTYgQVBJQyBJRHMgb24gdHdvIHNlcGFyYXRlIEFQSUMKLQkgKiBidXNlcyAob25lIGZvciBMQVBJQ3MsIG9uZSBmb3IgSU9BUElDcyksIHdoZXJlIHByZWRlY2Vzc29ycyBvbmx5Ci0JICogc3VwcG9ydHMgdXAgdG8gMTYgb24gb25lIHNoYXJlZCBBUElDIGJ1cy4KLQkgKgotCSAqIFRCRDogRXhwYW5kIExBUElDL0lPQVBJQyBzdXBwb3J0IG9uIFA0LWNsYXNzIHN5c3RlbXMgdG8gdGFrZSBmdWxsCi0JICogICAgICBhZHZhbnRhZ2Ugb2YgbmV3IEFQSUMgYnVzIGFyY2hpdGVjdHVyZS4KLQkgKi8KLQotCWlmIChwaHlzaWRzX2VtcHR5KGFwaWNfaWRfbWFwKSkKLQkJYXBpY19pZF9tYXAgPSBpb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlpZiAoYXBpY19pZCA+PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU9BUElDWyVkXTogSW52YWxpZCBhcGljX2lkICVkLCB0cnlpbmcgIgotCQkJIiVkXG4iLCBpb2FwaWMsIGFwaWNfaWQsIHJlZ18wMC5iaXRzLklEKTsKLQkJYXBpY19pZCA9IHJlZ18wMC5iaXRzLklEOwotCX0KLQotCS8qCi0JICogRXZlcnkgQVBJQyBpbiBhIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQotCSAqICdzdHVjayBvbiBzbXBfaW52YWxpZGF0ZV9uZWVkZWQgSVBJIHdhaXQnIG1lc3NhZ2VzLgotCSAqLwotCWlmIChjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgYXBpY19pZCkpIHsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspIHsKLQkJCWlmICghY2hlY2tfYXBpY2lkX3VzZWQoYXBpY19pZF9tYXAsIGkpKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGkgPT0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKQotCQkJcGFuaWMoIk1heCBhcGljX2lkIGV4Y2VlZGVkIVxuIik7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU9BUElDWyVkXTogYXBpY19pZCAlZCBhbHJlYWR5IHVzZWQsICIKLQkJCSJ0cnlpbmcgJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgaSk7Ci0KLQkJYXBpY19pZCA9IGk7Ci0JfQotCi0JdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KGFwaWNfaWQpOwotCXBoeXNpZHNfb3IoYXBpY19pZF9tYXAsIGFwaWNfaWRfbWFwLCB0bXApOwotCi0JaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKLQkJcmVnXzAwLmJpdHMuSUQgPSBhcGljX2lkOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlpb19hcGljX3dyaXRlKGlvYXBpYywgMCwgcmVnXzAwLnJhdyk7Ci0JCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKLQkJCXByaW50aygiSU9BUElDWyVkXTogVW5hYmxlIHRvIGNoYW5nZSBhcGljX2lkIVxuIiwgaW9hcGljKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCi0JCQkiSU9BUElDWyVkXTogQXNzaWduZWQgYXBpY19pZCAlZFxuIiwgaW9hcGljLCBhcGljX2lkKTsKLQotCXJldHVybiBhcGljX2lkOwotfQotCi0KLWludCBfX2luaXQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKLX0KLQotCi1pbnQgX19pbml0IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaW50IGlvYXBpYykKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMQlyZWdfMDE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXM7Ci19Ci0KLQotaW50IGlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JaWYgKCFJT19BUElDX0lSUShpcnEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSU9BUElDWyVkXTogSW52YWxpZCByZWZlcmVuY2UgdG8gSVJRIDBcbiIsCi0JCQlpb2FwaWMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIEdlbmVyYXRlIGEgUENJIElSUSByb3V0aW5nIGVudHJ5IGFuZCBwcm9ncmFtIHRoZSBJT0FQSUMgYWNjb3JkaW5nbHkuCi0JICogTm90ZSB0aGF0IHdlIG1hc2sgKGRpc2FibGUpIElSUXMgbm93IC0tIHRoZXNlIGdldCBlbmFibGVkIHdoZW4gdGhlCi0JICogY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyIHJlZ2lzdGVycyBmb3IgdGhpcyBJUlEuCi0JICovCi0KLQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQotCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCWVudHJ5LnRyaWdnZXIgPSBlZGdlX2xldmVsOwotCWVudHJ5LnBvbGFyaXR5ID0gYWN0aXZlX2hpZ2hfbG93OwotCWVudHJ5Lm1hc2sgID0gMTsKLQotCS8qCi0JICogSVJRcyA8IDE2IGFyZSBhbHJlYWR5IGluIHRoZSBpcnFfMl9waW5bXSBtYXAKLQkgKi8KLQlpZiAoaXJxID49IDE2KQotCQlhZGRfcGluX3RvX2lycShpcnEsIGlvYXBpYywgcGluKTsKLQotCWVudHJ5LnZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0KLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCBLRVJOX0RFQlVHICJJT0FQSUNbJWRdOiBTZXQgUENJIHJvdXRpbmcgZW50cnkgIgotCQkiKCVkLSVkIC0+IDB4JXggLT4gSVJRICVkIE1vZGU6JWkgQWN0aXZlOiVpKVxuIiwgaW9hcGljLAotCQltcF9pb2FwaWNzW2lvYXBpY10ubXBfYXBpY2lkLCBwaW4sIGVudHJ5LnZlY3RvciwgaXJxLAotCQllZGdlX2xldmVsLCBhY3RpdmVfaGlnaF9sb3cpOwotCi0JaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCBlbnRyeS52ZWN0b3IsIGVkZ2VfbGV2ZWwpOwotCi0JaWYgKCFpb2FwaWMgJiYgKGlycSA8IDE2KSkKLQkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKLQotCWlvYXBpY193cml0ZV9lbnRyeShpb2FwaWMsIHBpbiwgZW50cnkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBhY3BpX2dldF9vdmVycmlkZV9pcnEoaW50IGJ1c19pcnEsIGludCAqdHJpZ2dlciwgaW50ICpwb2xhcml0eSkKLXsKLQlpbnQgaTsKLQotCWlmIChza2lwX2lvYXBpY19zZXR1cCkKLQkJcmV0dXJuIC0xOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gbXBfSU5UICYmCi0JCSAgICBtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBidXNfaXJxKQotCQkJYnJlYWs7Ci0JaWYgKGkgPj0gbXBfaXJxX2VudHJpZXMpCi0JCXJldHVybiAtMTsKLQotCSp0cmlnZ2VyID0gaXJxX3RyaWdnZXIoaSk7Ci0JKnBvbGFyaXR5ID0gaXJxX3BvbGFyaXR5KGkpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlzYWJsZV90aW1lcl9waW5fMShjaGFyICphcmcpCi17Ci0JZGlzYWJsZV90aW1lcl9waW5fMSA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGlzYWJsZV90aW1lcl9waW5fMSIsIHBhcnNlX2Rpc2FibGVfdGltZXJfcGluXzEpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9lbmFibGVfdGltZXJfcGluXzEoY2hhciAqYXJnKQotewotCWRpc2FibGVfdGltZXJfcGluXzEgPSAtMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJlbmFibGVfdGltZXJfcGluXzEiLCBwYXJzZV9lbmFibGVfdGltZXJfcGluXzEpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2FwaWMoY2hhciAqYXJnKQotewotCS8qIGRpc2FibGUgSU8tQVBJQyAqLwotCWRpc2FibGVfaW9hcGljX3NldHVwKCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKLQotdm9pZCBfX2luaXQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlvYXBpY19waHlzLCBpZHggPSBGSVhfSU9fQVBJQ19CQVNFXzA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCWlmIChzbXBfZm91bmRfY29uZmlnKSB7Ci0JCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBfYXBpY2FkZHI7Ci0JCQlpZiAoIWlvYXBpY19waHlzKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJXQVJOSU5HOiBib2d1cyB6ZXJvIElPLUFQSUMgIgotCQkJCSAgICAgICAiYWRkcmVzcyBmb3VuZCBpbiBNUFRBQkxFLCAiCi0JCQkJICAgICAgICJkaXNhYmxpbmcgSU8vQVBJQyBzdXBwb3J0IVxuIik7Ci0JCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7Ci0JCQkJc2tpcF9pb2FwaWNfc2V0dXAgPSAxOwotCQkJCWdvdG8gZmFrZV9pb2FwaWNfcGFnZTsKLQkJCX0KLQkJfSBlbHNlIHsKLWZha2VfaW9hcGljX3BhZ2U6Ci0JCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCSAgICAgIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7Ci0JCX0KLQkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOwotCQlwcmludGsoS0VSTl9ERUJVRyAibWFwcGVkIElPQVBJQyB0byAlMDhseCAoJTA4bHgpXG4iLAotCQkgICAgICAgX19maXhfdG9fdmlydChpZHgpLCBpb2FwaWNfcGh5cyk7Ci0JCWlkeCsrOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMDYzYWUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NzQgKzAsMCBAQAotLyoKLSAqCUludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgbXVsdGktUGVudGl1bSBob3N0cy4KLSAqCi0gKglDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIsIEhham5hbGthIFN6YWJvCi0gKgotICoJTWFueSB0aGFua3MgdG8gU3RpZyBWZW5hYXMgZm9yIHRyeWluZyBvdXQgY291bnRsZXNzIGV4cGVyaW1lbnRhbAotICoJcGF0Y2hlcyBhbmQgcmVwb3J0aW5nL2RlYnVnZ2luZyBwcm9ibGVtcyBwYXRpZW50bHkhCi0gKgotICoJKGMpIDE5OTksIE11bHRpcGxlIElPLUFQSUMgc3VwcG9ydCwgZGV2ZWxvcGVkIGJ5Ci0gKglLZW4taWNoaSBZYWt1IDx5YWt1QGNzczEua2JuZXMubmVjLmNvLmpwPiBhbmQKLSAqICAgICAgSGlkZW1pIEtpc2hpbW90byA8a2lzaW1vdG9AY3NzMS5rYm5lcy5uZWMuY28uanA+LAotICoJZnVydGhlciB0ZXN0ZWQgYW5kIGNsZWFuZWQgdXAgYnkgWmFjaCBCcm93biA8emFiQHJlZGhhdC5jb20+Ci0gKglhbmQgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkKLSAqCVBhdWwgRGllZmVuYmF1Z2gJOglBZGRlZCBmdWxsIEFDUEkgc3VwcG9ydAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFyLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2lmZGVmIENPTkZJR19BQ1BJCi0jaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KLQotI2luY2x1ZGUgPGFzbS9pZGxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KLSNpbmNsdWRlIDxhc20vaHlwZXJ0cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxhc20vaXJxX3JlbWFwcGluZy5oPgotCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLQotI2RlZmluZSBfX2FwaWNkZWJ1Z2luaXQodHlwZSkgc3RhdGljIHR5cGUgX19pbml0Ci0KLXN0cnVjdCBpcnFfY2ZnIHsKLQljcHVtYXNrX3QgZG9tYWluOwotCWNwdW1hc2tfdCBvbGRfZG9tYWluOwotCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKLQl1OCB2ZWN0b3I7Ci0JdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7Ci19OwotCi0vKiBpcnFfY2ZnIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLwotc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmdbTlJfSVJRU10gX19yZWFkX21vc3RseSA9IHsKLQlbMF0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMF9WRUNUT1IsICB9LAotCVsxXSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExX1ZFQ1RPUiwgIH0sCi0JWzJdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTJfVkVDVE9SLCAgfSwKLQlbM10gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRM19WRUNUT1IsICB9LAotCVs0XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE0X1ZFQ1RPUiwgIH0sCi0JWzVdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTVfVkVDVE9SLCAgfSwKLQlbNl0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNl9WRUNUT1IsICB9LAotCVs3XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE3X1ZFQ1RPUiwgIH0sCi0JWzhdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUThfVkVDVE9SLCAgfSwKLQlbOV0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJROV9WRUNUT1IsICB9LAotCVsxMF0gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMF9WRUNUT1IsIH0sCi0JWzExXSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTExX1ZFQ1RPUiwgfSwKLQlbMTJdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTJfVkVDVE9SLCB9LAotCVsxM10gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExM19WRUNUT1IsIH0sCi0JWzE0XSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE0X1ZFQ1RPUiwgfSwKLQlbMTVdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTVfVkVDVE9SLCB9LAotfTsKLQotc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzayk7Ci0KLWludCBmaXJzdF9zeXN0ZW1fdmVjdG9yID0gMHhmZTsKLQotY2hhciBzeXN0ZW1fdmVjdG9yc1tOUl9WRUNUT1JTXSA9IHsgWzAgLi4uIE5SX1ZFQ1RPUlMtMV0gPSBTWVNfVkVDVE9SX0ZSRUV9OwotCi1pbnQgc2lzX2FwaWNfYnVnOyAvKiBub3QgYWN0dWFsbHkgc3VwcG9ydGVkLCBkdW1teSBmb3IgY29tcGlsZSAqLwotCi1zdGF0aWMgaW50IG5vX3RpbWVyX2NoZWNrOwotCi1zdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKLQotaW50IHRpbWVyX3Rocm91Z2hfODI1OSBfX2luaXRkYXRhOwotCi0vKiBXaGVyZSBpZiBhbnl3aGVyZSBpcyB0aGUgaTgyNTkgY29ubmVjdCBpbiBleHRlcm5hbCBpbnQgbW9kZSAqLwotc3RhdGljIHN0cnVjdCB7IGludCBwaW4sIGFwaWM7IH0gaW9hcGljX2k4MjU5ID0geyAtMSwgLTEgfTsKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKLQotLyoKLSAqICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCi0gKi8KLWludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107Ci0KLS8qIEkvTyBBUElDIFJURSBjb250ZW50cyBhdCB0aGUgT1MgYm9vdCB1cCAqLwotc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107Ci0KLS8qIEkvTyBBUElDIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKLWludCBucl9pb2FwaWNzOwotCi0vKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKLQotLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLWludCBtcF9pcnFfZW50cmllczsKLQotREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOwotCi0vKgotICogUm91Z2ggZXN0aW1hdGlvbiBvZiBob3cgbWFueSBzaGFyZWQgSVJRcyB0aGVyZSBhcmUsIGNhbgotICogYmUgY2hhbmdlZCBhbnl0aW1lLgotICovCi0jZGVmaW5lIE1BWF9QTFVTX1NIQVJFRF9JUlFTIE5SX0lSUVMKLSNkZWZpbmUgUElOX01BUF9TSVpFIChNQVhfUExVU19TSEFSRURfSVJRUyArIE5SX0lSUVMpCi0KLS8qCi0gKiBUaGlzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCB3ZSB3YW50IHRvIGRvIGl0IE8oMSkKLSAqCi0gKiB0aGUgaW5kZXhpbmcgb3JkZXIgb2YgdGhpcyBhcnJheSBmYXZvcnMgMToxIG1hcHBpbmdzCi0gKiBiZXR3ZWVuIHBpbnMgYW5kIElSUXMuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgewotCXNob3J0IGFwaWMsIHBpbiwgbmV4dDsKLX0gaXJxXzJfcGluW1BJTl9NQVBfU0laRV07Ci0KLXN0cnVjdCBpb19hcGljIHsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7Ci0JdW5zaWduZWQgaW50IHVudXNlZFszXTsKLQl1bnNpZ25lZCBpbnQgZGF0YTsKLX07Ci0KLXN0YXRpYyBfX2F0dHJpYnV0ZV9jb25zdF9fIHN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWNfYmFzZShpbnQgaWR4KQotewotCXJldHVybiAodm9pZCBfX2lvbWVtICopIF9fZml4X3RvX3ZpcnQoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4KQotCQkrIChtcF9pb2FwaWNzW2lkeF0ubXBfYXBpY2FkZHIgJiB+UEFHRV9NQVNLKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0Jd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQlyZXR1cm4gcmVhZGwoJmlvX2FwaWMtPmRhdGEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0Jd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKLX0KLQotLyoKLSAqIFJlLXdyaXRlIGEgdmFsdWU6IHRvIGJlIHVzZWQgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlCi0gKiBjeWNsZXMgd2hlcmUgdGhlIHJlYWQgYWxyZWFkeSBzZXQgdXAgdGhlIGluZGV4IHJlZ2lzdGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnkodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOwotfQotCi1zdGF0aWMgYm9vbCBpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCWZvciAoOzspIHsKLQkJdW5zaWduZWQgaW50IHJlZzsKLQkJaW50IHBpbjsKLQotCQlwaW4gPSBlbnRyeS0+cGluOwotCQlpZiAocGluID09IC0xKQotCQkJYnJlYWs7Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKLQkJLyogSXMgdGhlIHJlbW90ZSBJUlIgYml0IHNldD8gKi8KLQkJaWYgKHJlZyAmIElPX0FQSUNfUkVESVJfUkVNT1RFX0lSUikgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoKLSAqIFN5bmNocm9uaXplIHRoZSBJTy1BUElDIGFuZCB0aGUgQ1BVIGJ5IGRvaW5nCi0gKiBhIGR1bW15IHJlYWQgZnJvbSB0aGUgSU8tQVBJQwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19zeW5jKHVuc2lnbmVkIGludCBhcGljKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0JcmVhZGwoJmlvX2FwaWMtPmRhdGEpOwotfQotCi0jZGVmaW5lIF9fRE9fQUNUSU9OKFIsIEFDVElPTiwgRklOQUwpCQkJCQlcCi0JCQkJCQkJCQlcCi17CQkJCQkJCQkJXAotCWludCBwaW47CQkJCQkJCVwKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsJCQlcCi0JCQkJCQkJCQlcCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsJCQkJCQlcCi0JZm9yICg7OykgewkJCQkJCQlcCi0JCXVuc2lnbmVkIGludCByZWc7CQkJCQlcCi0JCXBpbiA9IGVudHJ5LT5waW47CQkJCQlcCi0JCWlmIChwaW4gPT0gLTEpCQkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBSICsgcGluKjIpOwlcCi0JCXJlZyBBQ1RJT047CQkJCQkJXAotCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgcmVnKTsJCQlcCi0JCUZJTkFMOwkJCQkJCQlcCi0JCWlmICghZW50cnktPm5leHQpCQkJCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7CQkJXAotCX0JCQkJCQkJCVwKLX0KLQotdW5pb24gZW50cnlfdW5pb24gewotCXN0cnVjdCB7IHUzMiB3MSwgdzI7IH07Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci19OwotCi1zdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgaW9hcGljX3JlYWRfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCi17Ci0JdW5pb24gZW50cnlfdW5pb24gZXU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7Ci0JZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGV1LmVudHJ5OwotfQotCi0vKgotICogV2hlbiB3ZSB3cml0ZSBhIG5ldyBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGhpZ2gKLSAqIHdvcmQgZmlyc3QhIElmIHRoZSBtYXNrIGJpdCBpbiB0aGUgbG93IHdvcmQgaXMgY2xlYXIsIHdlIHdpbGwgZW5hYmxlCi0gKiB0aGUgaW50ZXJydXB0LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudHJ5IGlzIGZ1bGx5IHBvcHVsYXRlZAotICogYmVmb3JlIHRoYXQgaGFwcGVucy4KLSAqLwotc3RhdGljIHZvaWQKLV9faW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQotewotCXVuaW9uIGVudHJ5X3VuaW9uIGV1OwotCWV1LmVudHJ5ID0gZTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIFdoZW4gd2UgbWFzayBhbiBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGxvdwotICogd29yZCBmaXJzdCwgaW4gb3JkZXIgdG8gc2V0IHRoZSBtYXNrIGJpdCBiZWZvcmUgd2UgY2hhbmdlIHRoZQotICogaGlnaCBiaXRzIQotICovCi1zdGF0aWMgdm9pZCBpb2FwaWNfbWFza19lbnRyeShpbnQgYXBpYywgaW50IHBpbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuaW9uIGVudHJ5X3VuaW9uIGV1ID0geyAuZW50cnkubWFzayA9IDEgfTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgX190YXJnZXRfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKLXsKLQlpbnQgYXBpYywgcGluOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsKLQlmb3IgKDs7KSB7Ci0JCXVuc2lnbmVkIGludCByZWc7Ci0JCWFwaWMgPSBlbnRyeS0+YXBpYzsKLQkJcGluID0gZW50cnktPnBpbjsKLQkJaWYgKHBpbiA9PSAtMSkKLQkJCWJyZWFrOwotCQkvKgotCQkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uIGNvbWVzCi0JCSAqIGZyb20gaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KLQkJICovCi0JCWlmICghaXJxX3JlbWFwcGVkKGlycSkpCi0JCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgcGluKjIpOwotCQlyZWcgJj0gfklPX0FQSUNfUkVESVJfVkVDVE9SX01BU0s7Ci0JCXJlZyB8PSB2ZWN0b3I7Ci0JCWlvX2FwaWNfbW9kaWZ5KGFwaWMsIHJlZyk7Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQkvKgotCSAqIE9ubHkgdGhlIGhpZ2ggOCBiaXRzIGFyZSB2YWxpZC4KLQkgKi8KLQlkZXN0ID0gU0VUX0FQSUNfTE9HSUNBTF9JRChkZXN0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFRoZSBjb21tb24gY2FzZSBpcyAxOjEgSVJRPC0+cGluIG1hcHBpbmdzLiBTb21ldGltZXMgdGhlcmUgYXJlCi0gKiBzaGFyZWQgSVNBLXNwYWNlIElSUXMsIHNvIHdlIGhhdmUgdG8gc3VwcG9ydCB0aGVtLiBXZSBhcmUgc3VwZXIKLSAqIGZhc3QgaW4gdGhlIGNvbW1vbiBjYXNlLCBhbmQgZmFzdCBmb3Igc2hhcmVkIElTQS1zcGFjZSBJUlFzLgotICovCi1zdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgYXBpYywgaW50IHBpbikKLXsKLQlzdGF0aWMgaW50IGZpcnN0X2ZyZWVfZW50cnkgPSBOUl9JUlFTOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsKLQl3aGlsZSAoZW50cnktPm5leHQpCi0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0KLQlpZiAoZW50cnktPnBpbiAhPSAtMSkgewotCQllbnRyeS0+bmV4dCA9IGZpcnN0X2ZyZWVfZW50cnk7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JCWlmICgrK2ZpcnN0X2ZyZWVfZW50cnkgPj0gUElOX01BUF9TSVpFKQotCQkJcGFuaWMoImlvX2FwaWMuYzogcmFuIG91dCBvZiBpcnFfMl9waW4gZW50cmllcyEiKTsKLQl9Ci0JZW50cnktPmFwaWMgPSBhcGljOwotCWVudHJ5LT5waW4gPSBwaW47Ci19Ci0KLS8qCi0gKiBSZXJvdXRlIGFuIElSUSB0byBhIGRpZmZlcmVudCBwaW4uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCByZXBsYWNlX3Bpbl9hdF9pcnEodW5zaWduZWQgaW50IGlycSwKLQkJCQkgICAgICBpbnQgb2xkYXBpYywgaW50IG9sZHBpbiwKLQkJCQkgICAgICBpbnQgbmV3YXBpYywgaW50IG5ld3BpbikKLXsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCXdoaWxlICgxKSB7Ci0JCWlmIChlbnRyeS0+YXBpYyA9PSBvbGRhcGljICYmIGVudHJ5LT5waW4gPT0gb2xkcGluKSB7Ci0JCQllbnRyeS0+YXBpYyA9IG5ld2FwaWM7Ci0JCQllbnRyeS0+cGluID0gbmV3cGluOwotCQl9Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLQotI2RlZmluZSBET19BQ1RJT04obmFtZSxSLEFDVElPTiwgRklOQUwpCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3RhdGljIHZvaWQgbmFtZSMjX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQkJXAotCV9fRE9fQUNUSU9OKFIsIEFDVElPTiwgRklOQUwpCi0KLS8qIG1hc2sgPSAxICovCi1ET19BQ1RJT04oX19tYXNrLAkwLCB8PSBJT19BUElDX1JFRElSX01BU0tFRCwgaW9fYXBpY19zeW5jKGVudHJ5LT5hcGljKSkKLQotLyogbWFzayA9IDAgKi8KLURPX0FDVElPTihfX3VubWFzaywJMCwgJj0gfklPX0FQSUNfUkVESVJfTUFTS0VELCApCi0KLXN0YXRpYyB2b2lkIG1hc2tfSU9fQVBJQ19pcnEgKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fbWFza19JT19BUElDX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycSAodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JX191bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCS8qIENoZWNrIGRlbGl2ZXJ5X21vZGUgdG8gYmUgc3VyZSB3ZSdyZSBub3QgY2xlYXJpbmcgYW4gU01JIHBpbiAqLwotCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQlpZiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X1NNSSkKLQkJcmV0dXJuOwotCS8qCi0JICogRGlzYWJsZSBpdCBpbiB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQlpb2FwaWNfbWFza19lbnRyeShhcGljLCBwaW4pOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDICh2b2lkKQotewotCWludCBhcGljLCBwaW47Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQotCQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLX0KLQotLyoKLSAqIFNhdmVzIGFuZCBtYXNrcyBhbGwgdGhlIHVubWFza2VkIElPLUFQSUMgUlRFJ3MKLSAqLwotaW50IHNhdmVfbWFza19JT19BUElDX3NldHVwKHZvaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGFwaWMsIHBpbjsKLQotCS8qCi0JICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMgKD09ICNwaW5zKToKLQkgKi8KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdID0gcmVnXzAxLmJpdHMuZW50cmllcysxOwotCX0KLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10gPQotCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpICoKLQkJCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JCQllbnRyeSA9IGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0gPQotCQkJCWlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JCQlpZiAoIWVudHJ5Lm1hc2spIHsKLQkJCQllbnRyeS5tYXNrID0gMTsKLQkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci0JCQl9Ci0JCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByZXN0b3JlX0lPX0FQSUNfc2V0dXAodm9pZCkKLXsKLQlpbnQgYXBpYywgcGluOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKLQkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sCi0JCQkJCSAgIGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0pOwotfQotCi12b2lkIHJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoaW50IGludHJfcmVtYXBwaW5nKQotewotCS8qCi0JICogZm9yIG5vdyBwbGFpbiByZXN0b3JlIG9mIHByZXZpb3VzIHNldHRpbmdzLgotCSAqIFRCRDogSW4gdGhlIGNhc2Ugb2YgT1MgZW5hYmxpbmcgaW50ZXJydXB0LXJlbWFwcGluZywKLQkgKiBJTy1BUElDIFJURSdzIG5lZWQgdG8gYmUgc2V0dXAgdG8gcG9pbnQgdG8gaW50ZXJydXB0LXJlbWFwcGluZwotCSAqIHRhYmxlIGVudHJpZXMuIGZvciBub3csIGRvIGEgcGxhaW4gcmVzdG9yZSwgYW5kIHdhaXQgZm9yCi0JICogdGhlIHNldHVwX0lPX0FQSUNfaXJxcygpIHRvIGRvIHByb3BlciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQlyZXN0b3JlX0lPX0FQSUNfc2V0dXAoKTsKLX0KLQotaW50IHNraXBfaW9hcGljX3NldHVwOwotaW50IGlvYXBpY19mb3JjZTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9hcGljKGNoYXIgKnN0cikKLXsKLQlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vYXBpYyIsIHBhcnNlX25vYXBpYyk7Ci0KLS8qIEFjdHVhbGx5IHRoZSBuZXh0IGlzIG9ic29sZXRlLCBidXQga2VlcCBpdCBmb3IgcGFyYW5vaWQgcmVhc29ucyAtQUsgKi8KLXN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfdGltZXJfcGluX3NldHVwKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoImRpc2FibGVfdGltZXJfcGluXzEiLCBkaXNhYmxlX3RpbWVyX3Bpbl9zZXR1cCk7Ci0KLQotLyoKLSAqIEZpbmQgdGhlIElSUSBlbnRyeSBudW1iZXIgb2YgYSBjZXJ0YWluIHBpbi4KLSAqLwotc3RhdGljIGludCBmaW5kX2lycV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkIHx8Ci0JCSAgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKSAmJgotCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RpcnEgPT0gcGluKQotCQkJcmV0dXJuIGk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSBwaW4gdG8gd2hpY2ggSVJRW2lycV0gKElTQSkgaXMgY29ubmVjdGVkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9waW4oaW50IGlycSwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQotCi0JCQlyZXR1cm4gbXBfaXJxc1tpXS5tcF9kc3RpcnE7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZmluZF9pc2FfaXJxX2FwaWMoaW50IGlycSwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpIDwgbXBfaXJxX2VudHJpZXMpIHsKLQkJaW50IGFwaWM7Ci0JCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYykKLQkJCQlyZXR1cm4gYXBpYzsKLQkJfQotCX0KLQotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZpbmQgYSBzcGVjaWZpYyBQQ0kgSVJRIGVudHJ5LgotICogTm90IGFuIF9faW5pdCwgcG9zc2libHkgbmVlZGVkIGJ5IG1vZHVsZXMKLSAqLwotc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pOwotCi1pbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBwaW4pCi17Ci0JaW50IGFwaWMsIGksIGJlc3RfZ3Vlc3MgPSAtMTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJxdWVyeWluZyBQQ0kgLT4gSVJRIG1hcHBpbmcgYnVzOiVkLCBzbG90OiVkLCBwaW46JWQuXG4iLAotCQlidXMsIHNsb3QsIHBpbik7Ci0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlBDSSBCSU9TIHBhc3NlZCBub25leGlzdGVudCBQQ0kgYnVzICVkIVxuIiwgYnVzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPT0gbXBfaXJxc1tpXS5tcF9kc3RhcGljIHx8Ci0JCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKQotCQkJCWJyZWFrOwotCi0JCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAhbXBfaXJxc1tpXS5tcF9pcnF0eXBlICYmCi0JCSAgICAoYnVzID09IGxidXMpICYmCi0JCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7Ci0JCQlpbnQgaXJxID0gcGluXzJfaXJxKGksYXBpYyxtcF9pcnFzW2ldLm1wX2RzdGlycSk7Ci0KLQkJCWlmICghKGFwaWMgfHwgSU9fQVBJQ19JUlEoaXJxKSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChwaW4gPT0gKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxICYgMykpCi0JCQkJcmV0dXJuIGlycTsKLQkJCS8qCi0JCQkgKiBVc2UgdGhlIGZpcnN0IGFsbC1idXQtcGluIG1hdGNoaW5nIGVudHJ5IGFzIGEKLQkJCSAqIGJlc3QtZ3Vlc3MgZnV6enkgcmVzdWx0IGZvciBicm9rZW4gbXB0YWJsZXMuCi0JCQkgKi8KLQkJCWlmIChiZXN0X2d1ZXNzIDwgMCkKLQkJCQliZXN0X2d1ZXNzID0gaXJxOwotCQl9Ci0JfQotCUJVR19PTihiZXN0X2d1ZXNzID49IE5SX0lSUVMpOwotCXJldHVybiBiZXN0X2d1ZXNzOwotfQotCi0vKiBJU0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gZWRnZSB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCkJKDApCi0jZGVmaW5lIGRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkJKDApCi0KLS8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKLSNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKLQotc3RhdGljIGludCBNUEJJT1NfcG9sYXJpdHkoaW50IGlkeCkKLXsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQlpbnQgcG9sYXJpdHk7Ci0KLQkvKgotCSAqIERldGVybWluZSBJUlEgbGluZSBwb2xhcml0eSAoaGlnaCBhY3RpdmUgb3IgbG93IGFjdGl2ZSk6Ci0JICovCi0Jc3dpdGNoIChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZyAmIDMpCi0JewotCQljYXNlIDA6IC8qIGNvbmZvcm1zLCBpZS4gYnVzLXR5cGUgZGVwZW5kZW50IHBvbGFyaXR5ICovCi0JCQlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpCi0JCQkJcG9sYXJpdHkgPSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpOwotCQkJZWxzZQotCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KTsKLQkJCWJyZWFrOwotCQljYXNlIDE6IC8qIGhpZ2ggYWN0aXZlICovCi0JCXsKLQkJCXBvbGFyaXR5ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCQlwb2xhcml0eSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIDM6IC8qIGxvdyBhY3RpdmUgKi8KLQkJewotCQkJcG9sYXJpdHkgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDogLyogaW52YWxpZCAqLwotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJCXBvbGFyaXR5ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBwb2xhcml0eTsKLX0KLQotc3RhdGljIGludCBNUEJJT1NfdHJpZ2dlcihpbnQgaWR4KQotewotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCWludCB0cmlnZ2VyOwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgSVJRIHRyaWdnZXIgbW9kZSAoZWRnZSBvciBsZXZlbCBzZW5zaXRpdmUpOgotCSAqLwotCXN3aXRjaCAoKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnPj4yKSAmIDMpCi0JewotCQljYXNlIDA6IC8qIGNvbmZvcm1zLCBpZS4gYnVzLXR5cGUgZGVwZW5kZW50ICovCi0JCQlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpCi0JCQkJdHJpZ2dlciA9IGRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KTsKLQkJCWVsc2UKLQkJCQl0cmlnZ2VyID0gZGVmYXVsdF9QQ0lfdHJpZ2dlcihpZHgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTogLyogZWRnZSAqLwotCQl7Ci0JCQl0cmlnZ2VyID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCQl0cmlnZ2VyID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgMzogLyogbGV2ZWwgKi8KLQkJewotCQkJdHJpZ2dlciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJdHJpZ2dlciA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gdHJpZ2dlcjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3BvbGFyaXR5KGludCBpZHgpCi17Ci0JcmV0dXJuIE1QQklPU19wb2xhcml0eShpZHgpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdHJpZ2dlcihpbnQgaWR4KQotewotCXJldHVybiBNUEJJT1NfdHJpZ2dlcihpZHgpOwotfQotCi1zdGF0aWMgaW50IHBpbl8yX2lycShpbnQgaWR4LCBpbnQgYXBpYywgaW50IHBpbikKLXsKLQlpbnQgaXJxLCBpOwotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCi0JLyoKLQkgKiBEZWJ1Z2dpbmcgY2hlY2ssIHdlIGFyZSBpbiBiaWcgdHJvdWJsZSBpZiB0aGlzIG1lc3NhZ2UgcG9wcyB1cCEKLQkgKi8KLQlpZiAobXBfaXJxc1tpZHhdLm1wX2RzdGlycSAhPSBwaW4pCi0JCXByaW50ayhLRVJOX0VSUiAiYnJva2VuIEJJT1Mgb3IgTVBUQUJMRSBwYXJzZXIsIGF5aWVlISFcbiIpOwotCi0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCWlycSA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnE7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUENJIElSUXMgYXJlIG1hcHBlZCBpbiBvcmRlcgotCQkgKi8KLQkJaSA9IGlycSA9IDA7Ci0JCXdoaWxlIChpIDwgYXBpYykKLQkJCWlycSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2krK107Ci0JCWlycSArPSBwaW47Ci0JfQotCUJVR19PTihpcnEgPj0gTlJfSVJRUyk7Ci0JcmV0dXJuIGlycTsKLX0KLQotdm9pZCBsb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCi17Ci0JLyogVXNlZCB0byB0aGUgb25saW5lIHNldCBvZiBjcHVzIGRvZXMgbm90IGNoYW5nZQotCSAqIGR1cmluZyBhc3NpZ25faXJxX3ZlY3Rvci4KLQkgKi8KLQlzcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsKLX0KLQotdm9pZCB1bmxvY2tfdmVjdG9yX2xvY2sodm9pZCkKLXsKLQlzcGluX3VubG9jaygmdmVjdG9yX2xvY2spOwotfQotCi1zdGF0aWMgaW50IF9fYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JLyoKLQkgKiBOT1RFISBUaGUgbG9jYWwgQVBJQyBpc24ndCB2ZXJ5IGdvb2QgYXQgaGFuZGxpbmcKLQkgKiBtdWx0aXBsZSBpbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFraW5nIHRoZQotCSAqIHZlY3RvciBudW1iZXIgYW5kIHNoaWZ0aW5nIHRoYXQgcmlnaHQgYnkgNCwgd2UKLQkgKiB3YW50IHRvIHNwcmVhZCB0aGVzZSBvdXQgYSBiaXQgc28gdGhhdCB0aGV5IGRvbid0Ci0JICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqCi0JICogQWxzbywgd2UndmUgZ290IHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyYXNoIGdhdGUKLQkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGltcG9ydGFudGlzaC4gOykKLQkgKi8KLQlzdGF0aWMgaW50IGN1cnJlbnRfdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiwgY3VycmVudF9vZmZzZXQgPSAwOwotCXVuc2lnbmVkIGludCBvbGRfdmVjdG9yOwotCWludCBjcHU7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQotCUJVR19PTigodW5zaWduZWQpaXJxID49IE5SX0lSUVMpOwotCWNmZyA9ICZpcnFfY2ZnW2lycV07Ci0KLQkvKiBPbmx5IHRyeSBhbmQgYWxsb2NhdGUgaXJxcyBvbiBjcHVzIHRoYXQgYXJlIHByZXNlbnQgKi8KLQljcHVzX2FuZChtYXNrLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0KLQlpZiAoKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykgfHwgY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlvbGRfdmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JaWYgKG9sZF92ZWN0b3IpIHsKLQkJY3B1bWFza190IHRtcDsKLQkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7Ci0JCWlmICghY3B1c19lbXB0eSh0bXApKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBtYXNrKSB7Ci0JCWNwdW1hc2tfdCBkb21haW4sIG5ld19tYXNrOwotCQlpbnQgbmV3X2NwdTsKLQkJaW50IHZlY3Rvciwgb2Zmc2V0OwotCi0JCWRvbWFpbiA9IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUpOwotCQljcHVzX2FuZChuZXdfbWFzaywgZG9tYWluLCBjcHVfb25saW5lX21hcCk7Ci0KLQkJdmVjdG9yID0gY3VycmVudF92ZWN0b3I7Ci0JCW9mZnNldCA9IGN1cnJlbnRfb2Zmc2V0OwotbmV4dDoKLQkJdmVjdG9yICs9IDg7Ci0JCWlmICh2ZWN0b3IgPj0gZmlyc3Rfc3lzdGVtX3ZlY3RvcikgewotCQkJLyogSWYgd2UgcnVuIG91dCBvZiB2ZWN0b3JzIG9uIGxhcmdlIGJveGVuLCBtdXN0IHNoYXJlIHRoZW0uICovCi0JCQlvZmZzZXQgPSAob2Zmc2V0ICsgMSkgJSA4OwotCQkJdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKLQkJfQotCQlpZiAodW5saWtlbHkoY3VycmVudF92ZWN0b3IgPT0gdmVjdG9yKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAodmVjdG9yID09IElBMzJfU1lTQ0FMTF9WRUNUT1IpCi0JCQlnb3RvIG5leHQ7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrX25yKG5ld19jcHUsIG5ld19tYXNrKQotCQkJaWYgKHBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSAhPSAtMSkKLQkJCQlnb3RvIG5leHQ7Ci0JCS8qIEZvdW5kIG9uZSEgKi8KLQkJY3VycmVudF92ZWN0b3IgPSB2ZWN0b3I7Ci0JCWN1cnJlbnRfb2Zmc2V0ID0gb2Zmc2V0OwotCQlpZiAob2xkX3ZlY3RvcikgewotCQkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMTsKLQkJCWNmZy0+b2xkX2RvbWFpbiA9IGNmZy0+ZG9tYWluOwotCQl9Ci0JCWZvcl9lYWNoX2NwdV9tYXNrX25yKG5ld19jcHUsIG5ld19tYXNrKQotCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBuZXdfY3B1KVt2ZWN0b3JdID0gaXJxOwotCQljZmctPnZlY3RvciA9IHZlY3RvcjsKLQkJY2ZnLT5kb21haW4gPSBkb21haW47Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQllcnIgPSBfX2Fzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2NsZWFyX2lycV92ZWN0b3IoaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCWNwdW1hc2tfdCBtYXNrOwotCWludCBjcHUsIHZlY3RvcjsKLQotCUJVR19PTigodW5zaWduZWQpaXJxID49IE5SX0lSUVMpOwotCWNmZyA9ICZpcnFfY2ZnW2lycV07Ci0JQlVHX09OKCFjZmctPnZlY3Rvcik7Ci0KLQl2ZWN0b3IgPSBjZmctPnZlY3RvcjsKLQljcHVzX2FuZChtYXNrLCBjZmctPmRvbWFpbiwgY3B1X29ubGluZV9tYXApOwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykKLQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKLQotCWNmZy0+dmVjdG9yID0gMDsKLQljcHVzX2NsZWFyKGNmZy0+ZG9tYWluKTsKLX0KLQotdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkKLXsKLQkvKiBJbml0aWFsaXplIHZlY3Rvcl9pcnEgb24gYSBuZXcgY3B1ICovCi0JLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZlY3Rvcl9sb2NrIGhlbGQgKi8KLQlpbnQgaXJxLCB2ZWN0b3I7Ci0KLQkvKiBNYXJrIHRoZSBpbnVzZSB2ZWN0b3JzICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyArK2lycSkgewotCQlpZiAoIWNwdV9pc3NldChjcHUsIGlycV9jZmdbaXJxXS5kb21haW4pKQotCQkJY29udGludWU7Ci0JCXZlY3RvciA9IGlycV9jZmdbaXJxXS52ZWN0b3I7Ci0JCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gaXJxOwotCX0KLQkvKiBNYXJrIHRoZSBmcmVlIHZlY3RvcnMgKi8KLQlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7ICsrdmVjdG9yKSB7Ci0JCWlycSA9IHBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdOwotCQlpZiAoaXJxIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWNwdV9pc3NldChjcHUsIGlycV9jZmdbaXJxXS5kb21haW4pKQotCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXA7Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXA7Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaW9hcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKQotewotCWlmICh0cmlnZ2VyKQotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JZWxzZQotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX0xFVkVMOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOwotCQlpZiAodHJpZ2dlcikKLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlyX2lvYXBpY19jaGlwLAotCQkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLAotCQkJCQkJICAgICAiZmFzdGVvaSIpOwotCQllbHNlCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcl9pb2FwaWNfY2hpcCwKLQkJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCWlmICh0cmlnZ2VyKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKLQkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLAotCQkJCQkgICAgICAiZmFzdGVvaSIpOwotCWVsc2UKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCi0JCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLX0KLQotc3RhdGljIGludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWMsIGludCBpcnEsCi0JCQkgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAotCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKQotewotCS8qCi0JICogYWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCSAqLwotCW1lbXNldChlbnRyeSwwLHNpemVvZigqZW50cnkpKTsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpIHsKLQkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IG1hcF9pb2FwaWNfdG9faXIoYXBpYyk7Ci0JCXN0cnVjdCBpcnRlIGlydGU7Ci0JCXN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5ICppcl9lbnRyeSA9Ci0JCQkoc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKikgZW50cnk7Ci0JCWludCBpbmRleDsKLQotCQlpZiAoIWlvbW11KQotCQkJcGFuaWMoIk5vIG1hcHBpbmcgaW9tbXUgZm9yIGlvYXBpYyAlZFxuIiwgYXBpYyk7Ci0KLQkJaW5kZXggPSBhbGxvY19pcnRlKGlvbW11LCBpcnEsIDEpOwotCQlpZiAoaW5kZXggPCAwKQotCQkJcGFuaWMoIkZhaWxlZCB0byBhbGxvY2F0ZSBJUlRFIGZvciBpb2FwaWMgJWRcbiIsIGFwaWMpOwotCi0JCW1lbXNldCgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKLQotCQlpcnRlLnByZXNlbnQgPSAxOwotCQlpcnRlLmRzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQkJaXJ0ZS50cmlnZ2VyX21vZGUgPSB0cmlnZ2VyOwotCQlpcnRlLmRsdnJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQkJaXJ0ZS52ZWN0b3IgPSB2ZWN0b3I7Ci0JCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0aW5hdGlvbik7Ci0KLQkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQkJaXJfZW50cnktPmluZGV4MiA9IChpbmRleCA+PiAxNSkgJiAweDE7Ci0JCWlyX2VudHJ5LT56ZXJvID0gMDsKLQkJaXJfZW50cnktPmZvcm1hdCA9IDE7Ci0JCWlyX2VudHJ5LT5pbmRleCA9IChpbmRleCAmIDB4N2ZmZik7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7Ci0JCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JCWVudHJ5LT5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCQllbnRyeS0+ZGVzdCA9IGRlc3RpbmF0aW9uOwotCX0KLQotCWVudHJ5LT5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLwotCWVudHJ5LT50cmlnZ2VyID0gdHJpZ2dlcjsKLQllbnRyeS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKLQllbnRyeS0+dmVjdG9yID0gdmVjdG9yOwotCi0JLyogTWFzayBsZXZlbCB0cmlnZ2VyZWQgaXJxcy4KLQkgKiBVc2UgSVJRX0RFTEFZRURfRElTQUJMRSBmb3IgZWRnZSB0cmlnZ2VyZWQgaXJxcy4KLQkgKi8KLQlpZiAodHJpZ2dlcikKLQkJZW50cnktPm1hc2sgPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cF9JT19BUElDX2lycShpbnQgYXBpYywgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycSwKLQkJCSAgICAgIGludCB0cmlnZ2VyLCBpbnQgcG9sYXJpdHkpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JY3B1bWFza190IG1hc2s7Ci0KLQlpZiAoIUlPX0FQSUNfSVJRKGlycSkpCi0JCXJldHVybjsKLQotCW1hc2sgPSBUQVJHRVRfQ1BVUzsKLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKLQkJcmV0dXJuOwotCi0JY3B1c19hbmQobWFzaywgY2ZnLT5kb21haW4sIG1hc2spOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLEtFUk5fREVCVUcKLQkJICAgICJJT0FQSUNbJWRdOiBTZXQgcm91dGluZyBlbnRyeSAoJWQtJWQgLT4gMHgleCAtPiAiCi0JCSAgICAiSVJRICVkIE1vZGU6JWkgQWN0aXZlOiVpKVxuIiwKLQkJICAgIGFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4sIGNmZy0+dmVjdG9yLAotCQkgICAgaXJxLCB0cmlnZ2VyLCBwb2xhcml0eSk7Ci0KLQotCWlmIChzZXR1cF9pb2FwaWNfZW50cnkobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIGlycSwgJmVudHJ5LAotCQkJICAgICAgIGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKSwgdHJpZ2dlciwgcG9sYXJpdHksCi0JCQkgICAgICAgY2ZnLT52ZWN0b3IpKSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldHVwIGlvYXBpYyBlbnRyeSBmb3IgaW9hcGljICAlZCwgcGluICVkXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbik7Ci0JCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEpOwotCQlyZXR1cm47Ci0JfQotCi0JaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCB0cmlnZ2VyKTsKLQlpZiAoaXJxIDwgMTYpCi0JCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDX2lycXModm9pZCkKLXsKLQlpbnQgYXBpYywgcGluLCBpZHgsIGlycSwgZmlyc3Rfbm90Y29uID0gMTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiaW5pdCBJT19BUElDIElSUXNcbiIpOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQotCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLHBpbixtcF9JTlQpOwotCQlpZiAoaWR4ID09IC0xKSB7Ci0JCQlpZiAoZmlyc3Rfbm90Y29uKSB7Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHICIgSU8tQVBJQyAoYXBpY2lkLXBpbikgJWQtJWQiLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKLQkJCQlmaXJzdF9ub3Rjb24gPSAwOwotCQkJfSBlbHNlCi0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLCAlZC0lZCIsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFmaXJzdF9ub3Rjb24pIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBub3QgY29ubmVjdGVkLlxuIik7Ci0JCQlmaXJzdF9ub3Rjb24gPSAxOwotCQl9Ci0KLQkJaXJxID0gcGluXzJfaXJxKGlkeCwgYXBpYywgcGluKTsKLQkJYWRkX3Bpbl90b19pcnEoaXJxLCBhcGljLCBwaW4pOwotCi0JCXNldHVwX0lPX0FQSUNfaXJxKGFwaWMsIHBpbiwgaXJxLAotCQkJCSAgaXJxX3RyaWdnZXIoaWR4KSwgaXJxX3BvbGFyaXR5KGlkeCkpOwotCX0KLQl9Ci0KLQlpZiAoIWZpcnN0X25vdGNvbikKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG5vdCBjb25uZWN0ZWQuXG4iKTsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgdGltZXIgcGluLCBwb3NzaWJseSB3aXRoIHRoZSA4MjU5QS1tYXN0ZXIgYmVoaW5kLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGltZXJfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4sCi0JCQkJCWludCB2ZWN0b3IpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0KLQkvKgotCSAqIFdlIHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IHRvIGdldCB0aGUgdGltZXIgSVJRCi0JICogdG8gdGhlIGZpcnN0IENQVS4KLQkgKi8KLQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5Lm1hc2sgPSAxOwkJCQkJLyogbWFzayBJUlEgbm93ICovCi0JZW50cnkuZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0JZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCWVudHJ5LnBvbGFyaXR5ID0gMDsKLQllbnRyeS50cmlnZ2VyID0gMDsKLQllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7Ci0KLQkvKgotCSAqIFRoZSB0aW1lciBJUlEgZG9lc24ndCBoYXZlIHRvIGtub3cgdGhhdCBiZWhpbmQgdGhlCi0JICogc2NlbmUgd2UgbWF5IGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgotCSAqLwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKDAsICZpb2FwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCi0JLyoKLQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JICovCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotfQotCi0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9JT19BUElDKHZvaWQpCi17Ci0JaW50IGFwaWMsIGk7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQl1bmlvbiBJT19BUElDX3JlZ18wMiByZWdfMDI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIE1QIElSUSBzb3VyY2VzOiAlZC5cbiIsIG1wX2lycV9lbnRyaWVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKQotCQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIElPLUFQSUMgIyVkIHJlZ2lzdGVyczogJWQuXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1tpXS5tcF9hcGljaWQsIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0pOwotCi0JLyoKLQkgKiBXZSBhcmUgYSBiaXQgY29uc2VydmF0aXZlIGFib3V0IHdoYXQgd2UgZXhwZWN0LiAgV2UgaGF2ZSB0bwotCSAqIGtub3cgYWJvdXQgZXZlcnkgaGFyZHdhcmUgY2hhbmdlIEFTQVAuCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAidGVzdGluZyB0aGUgSU8gQVBJQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4iKTsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKQotCQlyZWdfMDIucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlwcmludGsoIlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklPIEFQSUMgIyVkLi4uLi4uXG4iLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAwOiAlMDhYXG4iLCByZWdfMDAucmF3KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IHBoeXNpY2FsIEFQSUMgaWQ6ICUwMlhcbiIsIHJlZ18wMC5iaXRzLklEKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMTogJTA4WFxuIiwgKihpbnQgKikmcmVnXzAxKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBtYXggcmVkaXJlY3Rpb24gZW50cmllczogJTA0WFxuIiwgcmVnXzAxLmJpdHMuZW50cmllcyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBQUlEgaW1wbGVtZW50ZWQ6ICVYXG4iLCByZWdfMDEuYml0cy5QUlEpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IElPIEFQSUMgdmVyc2lvbjogJTA0WFxuIiwgcmVnXzAxLmJpdHMudmVyc2lvbik7Ci0KLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMjogJTA4WFxuIiwgcmVnXzAyLnJhdyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IGFyYml0cmF0aW9uOiAlMDJYXG4iLCByZWdfMDIuYml0cy5hcmJpdHJhdGlvbik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiIE5SIERzdCBNYXNrIFRyaWcgSVJSIFBvbCIKLQkJCSAgIiBTdGF0IERtb2QgRGVsaSBWZWN0OiAgIFxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IHJlZ18wMS5iaXRzLmVudHJpZXM7IGkrKykgewotCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIGkpOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIgJTAyeCAlMDNYICIsCi0JCQlpLAotCQkJZW50cnkuZGVzdAotCQkpOwotCi0JCXByaW50aygiJTFkICAgICUxZCAgICAlMWQgICAlMWQgICAlMWQgICAgJTFkICAgICUxZCAgICAlMDJYXG4iLAotCQkJZW50cnkubWFzaywKLQkJCWVudHJ5LnRyaWdnZXIsCi0JCQllbnRyeS5pcnIsCi0JCQllbnRyeS5wb2xhcml0eSwKLQkJCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cywKLQkJCWVudHJ5LmRlc3RfbW9kZSwKLQkJCWVudHJ5LmRlbGl2ZXJ5X21vZGUsCi0JCQllbnRyeS52ZWN0b3IKLQkJKTsKLQl9Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJJUlEgdG8gcGluIG1hcHBpbmdzOlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGk7Ci0JCWlmIChlbnRyeS0+cGluIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlwcmludGsoS0VSTl9ERUJVRyAiSVJRJWQgIiwgaSk7Ci0JCWZvciAoOzspIHsKLQkJCXByaW50aygiLT4gJWQ6JWQiLCBlbnRyeS0+YXBpYywgZW50cnktPnBpbik7Ci0JCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJCWJyZWFrOwotCQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGRvbmUuXG4iKTsKLQotCXJldHVybjsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X0FQSUNfYml0ZmllbGQoaW50IGJhc2UpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JaW50IGksIGo7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmXG4iIEtFUk5fREVCVUcpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdiA9IGFwaWNfcmVhZChiYXNlICsgaSoweDEwKTsKLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCWlmICh2ICYgKDE8PGopKQotCQkJCXByaW50aygiMSIpOwotCQkJZWxzZQotCQkJCXByaW50aygiMCIpOwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9sb2NhbF9BUElDKHZvaWQgKmR1bW15KQotewotCXVuc2lnbmVkIGludCB2LCB2ZXIsIG1heGx2dDsKLQl1bnNpZ25lZCBsb25nIGljcjsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIlxuIiBLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgSUQ6ICAgICAgJTA4eCAoJTAxeClcbiIsIHYsIHJlYWRfYXBpY19pZCgpKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBWRVJTSU9OOiAlMDh4XG4iLCB2KTsKLQl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHYpOwotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVEFTS1BSSTogJTA4eCAoJTAyeClcbiIsIHYsIHYgJiBBUElDX1RQUklfTUFTSyk7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfQVJCUFJJKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKLQkJdiAmIEFQSUNfQVJCUFJJX01BU0spOwotCXYgPSBhcGljX3JlYWQoQVBJQ19QUk9DUFJJKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfRU9JKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRU9JOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfUlJSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUlJSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTERSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfREZSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgREZSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFNQSVY6ICUwOHhcbiIsIHYpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElTUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JU1IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTVIgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfVE1SKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSVJSIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX0lSUik7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRVNSOiAlMDh4XG4iLCB2KTsKLQotCWljciA9IGFwaWNfaWNyX3JlYWQoKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSUNSOiAlMDh4XG4iLCAodTMyKWljcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjI6ICUwOHhcbiIsICh1MzIpKGljciA+PiAzMikpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRUOiAlMDh4XG4iLCB2KTsKLQotCWlmIChtYXhsdnQgPiAzKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBpcyBMVlQjNC4gKi8KLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVFBDOiAlMDh4XG4iLCB2KTsKLQl9Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQwOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVDE6ICUwOHhcbiIsIHYpOwotCi0JaWYgKG1heGx2dCA+IDIpIHsJCQkvKiBFUlIgaXMgTFZUIzMuICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZURVJSOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTUlDVDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1DQ1Q6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVERDUjogJTA4eFxuIiwgdik7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfYWxsX2xvY2FsX0FQSUNzKHZvaWQpCi17Ci0Jb25fZWFjaF9jcHUocHJpbnRfbG9jYWxfQVBJQywgTlVMTCwgMSk7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9QSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICJcbnByaW50aW5nIFBJQyBjb250ZW50c1xuIik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKLQotCXYgPSBpbmIoMHhhMSkgPDwgOCB8IGluYigweDIxKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSU1SOiAlMDR4XG4iLCB2KTsKLQotCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVJSOiAlMDR4XG4iLCB2KTsKLQotCW91dGIoMHgwYiwweGEwKTsKLQlvdXRiKDB4MGIsMHgyMCk7Ci0JdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOwotCW91dGIoMHgwYSwweGEwKTsKLQlvdXRiKDB4MGEsMHgyMCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElTUjogJTA0eFxuIiwgdik7Ci0KLQl2ID0gaW5iKDB4NGQxKSA8PCA4IHwgaW5iKDB4NGQwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyBFTENSOiAlMDR4XG4iLCB2KTsKLX0KLQotX19hcGljZGVidWdpbml0KGludCkgcHJpbnRfYWxsX0lDcyh2b2lkKQotewotCXByaW50X1BJQygpOwotCXByaW50X2FsbF9sb2NhbF9BUElDcygpOwotCXByaW50X0lPX0FQSUMoKTsKLQotCXJldHVybiAwOwotfQotCi1mc19pbml0Y2FsbChwcmludF9hbGxfSUNzKTsKLQotCi12b2lkIF9faW5pdCBlbmFibGVfSU9fQVBJQyh2b2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOwotCWludCBpLCBhcGljOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUElOX01BUF9TSVpFOyBpKyspIHsKLQkJaXJxXzJfcGluW2ldLnBpbiA9IC0xOwotCQlpcnFfMl9waW5baV0ubmV4dCA9IDA7Ci0JfQotCi0JLyoKLQkgKiBUaGUgbnVtYmVyIG9mIElPLUFQSUMgSVJRIHJlZ2lzdGVycyAoPT0gI3BpbnMpOgotCSAqLwotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7Ci0JfQotCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlpbnQgcGluOwotCQkvKiBTZWUgaWYgYW55IG9mIHRoZSBwaW5zIGlzIGluIEV4dElOVCBtb2RlICovCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCi0JCQkvKiBJZiB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZW5hYmxlZCBhbmQgaW4gRXh0SW50IG1vZGUKLQkJCSAqIEkgaGF2ZSBmb3VuZCB0aGUgcGluIHdoZXJlIHRoZSBpODI1OSBpcyBjb25uZWN0ZWQuCi0JCQkgKi8KLQkJCWlmICgoZW50cnkubWFzayA9PSAwKSAmJiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X0V4dElOVCkpIHsKLQkJCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGFwaWM7Ci0JCQkJaW9hcGljX2k4MjU5LnBpbiAgPSBwaW47Ci0JCQkJZ290byBmb3VuZF9pODI1OTsKLQkJCX0KLQkJfQotCX0KLSBmb3VuZF9pODI1OToKLQkvKiBMb29rIHRvIHNlZSB3aGF0IGlmIHRoZSBNUCB0YWJsZSBoYXMgcmVwb3J0ZWQgdGhlIEV4dElOVCAqLwotCWk4MjU5X3BpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0V4dElOVCk7Ci0JaTgyNTlfYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0V4dElOVCk7Ci0JLyogVHJ1c3QgdGhlIE1QIHRhYmxlIGlmIG5vdGhpbmcgaXMgc2V0dXAgaW4gdGhlIGhhcmR3YXJlICovCi0JaWYgKChpb2FwaWNfaTgyNTkucGluID09IC0xKSAmJiAoaTgyNTlfcGluID49IDApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBub3Qgc2V0dXAgaW4gaGFyZHdhcmUgYnV0IHJlcG9ydGVkIGJ5IE1QIHRhYmxlXG4iKTsKLQkJaW9hcGljX2k4MjU5LnBpbiAgPSBpODI1OV9waW47Ci0JCWlvYXBpY19pODI1OS5hcGljID0gaTgyNTlfYXBpYzsKLQl9Ci0JLyogQ29tcGxhaW4gaWYgdGhlIE1QIHRhYmxlIGFuZCB0aGUgaGFyZHdhcmUgZGlzYWdyZWUgKi8KLQlpZiAoKChpb2FwaWNfaTgyNTkuYXBpYyAhPSBpODI1OV9hcGljKSB8fCAoaW9hcGljX2k4MjU5LnBpbiAhPSBpODI1OV9waW4pKSAmJgotCQkoaTgyNTlfcGluID49IDApICYmIChpb2FwaWNfaTgyNTkucGluID49IDApKQotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXh0SU5UIGluIGhhcmR3YXJlIGFuZCBNUCB0YWJsZSBkaWZmZXJcbiIpOwotCX0KLQotCS8qCi0JICogRG8gbm90IHRydXN0IHRoZSBJTy1BUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cAotCSAqLwotCWNsZWFyX0lPX0FQSUMoKTsKLX0KLQotLyoKLSAqIE5vdCBhbiBfX2luaXQsIG5lZWRlZCBieSB0aGUgcmVib290IGNvZGUKLSAqLwotdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCkKLXsKLQkvKgotCSAqIENsZWFyIHRoZSBJTy1BUElDIGJlZm9yZSByZWJvb3Rpbmc6Ci0JICovCi0JY2xlYXJfSU9fQVBJQygpOwotCi0JLyoKLQkgKiBJZiB0aGUgaTgyNTkgaXMgcm91dGVkIHRocm91Z2ggYW4gSU9BUElDCi0JICogUHV0IHRoYXQgSU9BUElDIGluIHZpcnR1YWwgd2lyZSBtb2RlCi0JICogc28gbGVnYWN5IGludGVycnVwdHMgY2FuIGJlIGRlbGl2ZXJlZC4KLQkgKi8KLQlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSkgewotCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQkJZW50cnkubWFzayAgICAgICAgICAgID0gMDsgLyogRW5hYmxlZCAqLwotCQllbnRyeS50cmlnZ2VyICAgICAgICAgPSAwOyAvKiBFZGdlICovCi0JCWVudHJ5LmlyciAgICAgICAgICAgICA9IDA7Ci0JCWVudHJ5LnBvbGFyaXR5ICAgICAgICA9IDA7IC8qIEhpZ2ggKi8KLQkJZW50cnkuZGVsaXZlcnlfc3RhdHVzID0gMDsKLQkJZW50cnkuZGVzdF9tb2RlICAgICAgID0gMDsgLyogUGh5c2ljYWwgKi8KLQkJZW50cnkuZGVsaXZlcnlfbW9kZSAgID0gZGVzdF9FeHRJTlQ7IC8qIEV4dEludCAqLwotCQllbnRyeS52ZWN0b3IgICAgICAgICAgPSAwOwotCQllbnRyeS5kZXN0ICAgICAgICAgICAgPSByZWFkX2FwaWNfaWQoKTsKLQotCQkvKgotCQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JCSAqLwotCQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljX2k4MjU5LmFwaWMsIGlvYXBpY19pODI1OS5waW4sIGVudHJ5KTsKLQl9Ci0KLQlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOwotfQotCi0vKgotICogVGhlcmUgaXMgYSBuYXN0eSBidWcgaW4gc29tZSBvbGRlciBTTVAgYm9hcmRzLCB0aGVpciBtcHRhYmxlIGxpZXMKLSAqIGFib3V0IHRoZSB0aW1lciBJUlEuIFdlIGRvIHRoZSBmb2xsb3dpbmcgdG8gd29yayBhcm91bmQgdGhlIHNpdHVhdGlvbjoKLSAqCi0gKgktIHRpbWVyIElSUSBkZWZhdWx0cyB0byBJTy1BUElDIElSUQotICoJLSBpZiB0aGlzIGZ1bmN0aW9uIGRldGVjdHMgdGhhdCB0aW1lciBJUlFzIGFyZSBkZWZ1bmN0LCB0aGVuIHdlIGZhbGwKLSAqCSAgYmFjayB0byBJU0EgdGltZXIgSVJRcwotICovCi1zdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pcnFfd29ya3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHQxID0gamlmZmllczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCS8qIExldCB0ZW4gdGlja3MgcGFzcy4uLiAqLwotCW1kZWxheSgoMTAgKiAxMDAwKSAvIEhaKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKgotCSAqIEV4cGVjdCBhIGZldyB0aWNrcyBhdCBsZWFzdCwgdG8gYmUgc3VyZSBzb21lIHBvc3NpYmxlCi0JICogZ2x1ZSBsb2dpYyBkb2VzIG5vdCBsb2NrIHVwIGFmdGVyIG9uZSBvciB0d28gZmlyc3QKLQkgKiB0aWNrcyBpbiBhIG5vbi1FeHRJTlQgbW9kZS4gIEFsc28gdGhlIGxvY2FsIEFQSUMKLQkgKiBtaWdodCBoYXZlIGNhY2hlZCBvbmUgRXh0SU5UIGludGVycnVwdC4gIEZpbmFsbHksIGF0Ci0JICogbGVhc3Qgb25lIHRpY2sgbWF5IGJlIGxvc3QgZHVlIHRvIGRlbGF5cy4KLQkgKi8KLQotCS8qIGppZmZpZXMgd3JhcD8gKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0MSArIDQpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluIHRoZSBTTVArSU9BUElDIGNhc2UgaXQgbWlnaHQgaGFwcGVuIHRoYXQgdGhlcmUgYXJlIGFuIHVuc3BlY2lmaWVkCi0gKiBudW1iZXIgb2YgcGVuZGluZyBJUlEgZXZlbnRzIHVuaGFuZGxlZC4gVGhlc2UgY2FzZXMgYXJlIHZlcnkgcmFyZSwKLSAqIHNvIHdlICdyZXNlbmQnIHRoZXNlIElSUXMgdmlhIElQSXMsIHRvIHRoZSBzYW1lIENQVS4gSXQncyBtdWNoCi0gKiBiZXR0ZXIgdG8gZG8gaXQgdGhpcyB3YXkgYXMgdGh1cyB3ZSBkbyBub3QgaGF2ZSB0byBiZSBhd2FyZSBvZgotICogJ3BlbmRpbmcnIGludGVycnVwdHMgaW4gdGhlIElSUSBwYXRoLCBleGNlcHQgYXQgdGhpcyBwb2ludC4KLSAqLwotLyoKLSAqIEVkZ2UgdHJpZ2dlcmVkIG5lZWRzIHRvIHJlc2VuZCBhbnkgaW50ZXJydXB0Ci0gKiB0aGF0IHdhcyBkZWxheWVkIGJ1dCB0aGlzIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBkZXZpY2UKLSAqIGluZGVwZW5kZW50IGNvZGUuCi0gKi8KLQotLyoKLSAqIFN0YXJ0aW5nIHVwIGEgZWRnZS10cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHQgaXMKLSAqIG5hc3R5IC0gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgdGhlIGVkZ2UuCi0gKiBJZiBpdCBpcyBhbHJlYWR5IGFzc2VydGVkIGZvciBzb21lIHJlYXNvbiwgd2UgbmVlZAotICogcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCBpcyB3YXMgcGVuZGluZy4KLSAqCi0gKiBUaGlzIGlzIG5vdCBjb21wbGV0ZSAtIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZha2UKLSAqIGFuIGVkZ2UgZXZlbiBpZiBpdCBpc24ndCBvbiB0aGUgODI1OUEuLi4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCB3YXNfcGVuZGluZyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlmIChpcnEgPCAxNikgewotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCQlpZiAoaTgyNTlBX2lycV9wZW5kaW5nKGlycSkpCi0JCQl3YXNfcGVuZGluZyA9IDE7Ci0JfQotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiB3YXNfcGVuZGluZzsKLX0KLQotc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSAmaXJxX2NmZ1tpcnFdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGZpcnN0X2NwdShjZmctPmRvbWFpbikpLCBjZmctPnZlY3Rvcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAxOwotfQotCi0vKgotICogTGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0cyBuZWVkIGRpZmZlcmVudCBoYW5kbGluZywKLSAqIHNvIHdlIHVzZSB0d28gc2VwYXJhdGUgSVJRIGRlc2NyaXB0b3JzLiBFZGdlIHRyaWdnZXJlZCBJUlFzIGNhbiBiZQotICogaGFuZGxlZCB3aXRoIHRoZSBsZXZlbC10cmlnZ2VyZWQgZGVzY3JpcHRvciwgYnV0IHRoYXQgb25lIGhhcyBzbGlnaHRseQotICogbW9yZSBvdmVyaGVhZC4gTGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgY2Fubm90IGJlIGhhbmRsZWQgd2l0aCB0aGUKLSAqIGVkZ2UtdHJpZ2dlcmVkIGhhbmRsZXIsIHdpdGhvdXQgcmlza2luZyBJUlEgc3Rvcm1zIGFuZCBvdGhlciB1Z2x5Ci0gKiByYWNlcy4KLSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGlyX21pZ3JhdGlvbl93b3JrLCBpcl9pcnFfbWlncmF0aW9uKTsKLQotLyoKLSAqIE1pZ3JhdGUgdGhlIElPLUFQSUMgaXJxIGluIHRoZSBwcmVzZW5jZSBvZiBpbnRyLXJlbWFwcGluZy4KLSAqCi0gKiBGb3IgZWRnZSB0cmlnZ2VyZWQsIGlycSBtaWdyYXRpb24gaXMgYSBzaW1wbGUgYXRvbWljIHVwZGF0ZShvZiB2ZWN0b3IKLSAqIGFuZCBjcHUgZGVzdGluYXRpb24pIG9mIElSVEUgYW5kIGZsdXNoIHRoZSBoYXJkd2FyZSBjYWNoZS4KLSAqCi0gKiBGb3IgbGV2ZWwgdHJpZ2dlcmVkLCB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgaW8tYXBpYyBSVEUgYXN3ZWxsIHdpdGggdGhlIHVwZGF0ZQotICogdmVjdG9yIGluZm9ybWF0aW9uLCBhbG9uZyB3aXRoIG1vZGlmeWluZyBJUlRFIHdpdGggdmVjdG9yIGFuZCBkZXN0aW5hdGlvbi4KLSAqIFNvIGlycSBtaWdyYXRpb24gZm9yIGxldmVsIHRyaWdnZXJlZCBpcyBsaXR0bGUgIGJpdCBtb3JlIGNvbXBsZXggY29tcGFyZWQgdG8KLSAqIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbi4gQnV0IHRoZSBnb29kIG5ld3MgaXMsIHdlIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0KLSAqIGZvciBsZXZlbCB0cmlnZ2VyZWQgbWlncmF0aW9uIGFzIHdlIGhhdmUgdG9kYXksIG9ubHkgZGlmZmVyZW5jZSBiZWluZywKLSAqIHdlIG5vdyBpbml0aWF0ZSB0aGUgaXJxIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIHRoZQotICogaW50ZXJydXB0IGNvbnRleHQuCi0gKgotICogSW4gZnV0dXJlLCB3aGVuIHdlIGRvIGEgZGlyZWN0ZWQgRU9JIChjb21iaW5lZCB3aXRoIGNwdSBFT0kgYnJvYWRjYXN0Ci0gKiBzdXBwcmVzc2lvbikgdG8gdGhlIElPLUFQSUMsIGxldmVsIHRyaWdnZXJlZCBpcnEgbWlncmF0aW9uIHdpbGwgYWxzbyBiZQotICogYXMgc2ltcGxlIGFzIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhbmQgd2UgY2FuIGRvIHRoZSBpcnEgbWlncmF0aW9uCi0gKiB3aXRoIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUgdG8gSU8tQVBJQyBSVEUuCi0gKi8KLXN0YXRpYyB2b2lkIG1pZ3JhdGVfaW9hcGljX2lycShpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQljcHVtYXNrX3QgdG1wLCBjbGVhbnVwX21hc2s7Ci0Jc3RydWN0IGlydGUgaXJ0ZTsKLQlpbnQgbW9kaWZ5X2lvYXBpY19ydGUgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUw7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCWlmIChtb2RpZnlfaW9hcGljX3J0ZSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JfQotCi0JaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKLQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7Ci0KLQkvKgotCSAqIE1vZGlmaWVkIHRoZSBJUlRFIGFuZCBmbHVzaGVzIHRoZSBJbnRlcnJ1cHQgZW50cnkgY2FjaGUuCi0JICovCi0JbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7Ci0JCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7Ci0JCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKLQkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKLQkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKLQl9Ci0KLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLQotc3RhdGljIGludCBtaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbChpbnQgaXJxKQotewotCWludCByZXQgPSAtMTsKLQotCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQotCWlmIChpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGlycSkpIHsKLQkJLyoKLQkgCSAqIEludGVycnVwdCBpbiBwcm9ncmVzcy4gTWlncmF0aW5nIGlycSBub3cgd2lsbCBjaGFuZ2UgdGhlCi0JCSAqIHZlY3RvciBpbmZvcm1hdGlvbiBpbiB0aGUgSU8tQVBJQyBSVEUgYW5kIHRoYXQgd2lsbCBjb25mdXNlCi0JCSAqIHRoZSBFT0kgYnJvYWRjYXN0IHBlcmZvcm1lZCBieSBjcHUuCi0JCSAqIFNvLCBkZWxheSB0aGUgaXJxIG1pZ3JhdGlvbiB0byB0aGUgbmV4dCBpbnN0YW5jZS4KLQkJICovCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXJfbWlncmF0aW9uX3dvcmssIDEpOwotCQlnb3RvIHVubWFzazsKLQl9Ci0KLQkvKiBldmVydGhpbmcgaXMgY2xlYXIuIHdlIGhhdmUgcmlnaHQgb2Ygd2F5ICovCi0JbWlncmF0ZV9pb2FwaWNfaXJxKGlycSwgaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2spOwotCi0JcmV0ID0gMDsKLQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKLQljcHVzX2NsZWFyKGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKLQotdW5tYXNrOgotCXVubWFza19JT19BUElDX2lycShpcnEpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCWludCBpcnE7Ci0KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJCWlmICghZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5IHx8Ci0JCQkgICAgIShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkgewotCQkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsCi0JCQkJCSAgICAgICAgIGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIE1pZ3JhdGVzIHRoZSBJUlEgZGVzdGluYXRpb24gaW4gdGhlIHByb2Nlc3MgY29udGV4dC4KLSAqLwotc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9NT1ZFX1BFTkRJTkc7Ci0JCWlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrID0gbWFzazsKLQkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaXJxKTsKLQkJcmV0dXJuOwotCX0KLQotCW1pZ3JhdGVfaW9hcGljX2lycShpcnEsIG1hc2spOwotfQotI2VuZGlmCi0KLWFzbWxpbmthZ2Ugdm9pZCBzbXBfaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQodm9pZCkKLXsKLQl1bnNpZ25lZCB2ZWN0b3IsIG1lOwotCWFja19BUElDX2lycSgpOwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCi0JbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7Ci0JCXVuc2lnbmVkIGludCBpcnE7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQkJc3RydWN0IGlycV9jZmcgKmNmZzsKLQkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwotCQlpZiAoaXJxID49IE5SX0lSUVMpCi0JCQljb250aW51ZTsKLQotCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCWNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCWlmICghY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCi0JCQlnb3RvIHVubG9jazsKLQotCQlpZiAoKHZlY3RvciA9PSBjZmctPnZlY3RvcikgJiYgY3B1X2lzc2V0KG1lLCBjZmctPmRvbWFpbikpCi0JCQlnb3RvIHVubG9jazsKLQotCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQtLTsKLXVubG9jazoKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCX0KLQotCWlycV9leGl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JdW5zaWduZWQgdmVjdG9yLCBtZTsKLQotCWlmIChsaWtlbHkoIWNmZy0+bW92ZV9pbl9wcm9ncmVzcykpCi0JCXJldHVybjsKLQotCXZlY3RvciA9IH5nZXRfaXJxX3JlZ3MoKS0+b3JpZ19heDsKLQltZSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoKHZlY3RvciA9PSBjZmctPnZlY3RvcikgJiYgY3B1X2lzc2V0KG1lLCBjZmctPmRvbWFpbikpIHsKLQkJY3B1bWFza190IGNsZWFudXBfbWFzazsKLQotCQljcHVzX2FuZChjbGVhbnVwX21hc2ssIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXApOwotCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IGNwdXNfd2VpZ2h0KGNsZWFudXBfbWFzayk7Ci0JCXNlbmRfSVBJX21hc2soY2xlYW51cF9tYXNrLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7Ci0JCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpbnQgaXJxKSB7fQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyB2b2lkIGFja194MmFwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfeDJBUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfeDJhcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfeDJBUElDX2lycSgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGFja19hcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKLXsKLQlpcnFfY29tcGxldGVfbW92ZShpcnEpOwotCW1vdmVfbmF0aXZlX2lycShpcnEpOwotCWFja19BUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBkb191bm1hc2tfaXJxID0gMDsKLQotCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7Ci0jaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKLQkvKiBJZiB3ZSBhcmUgbW92aW5nIHRoZSBpcnEgd2UgbmVlZCB0byBtYXNrIGl0ICovCi0JaWYgKHVubGlrZWx5KGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKLQkJZG9fdW5tYXNrX2lycSA9IDE7Ci0JCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQl9Ci0jZW5kaWYKLQotCS8qCi0JICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCi0JICogbm90IHByb3BhZ2F0ZSBwcm9wZXJseS4KLQkgKi8KLQlhY2tfQVBJQ19pcnEoKTsKLQotCS8qIE5vdyB3ZSBjYW4gbW92ZSBhbmQgcmVuYWJsZSB0aGUgaXJxICovCi0JaWYgKHVubGlrZWx5KGRvX3VubWFza19pcnEpKSB7Ci0JCS8qIE9ubHkgbWlncmF0ZSB0aGUgaXJxIGlmIHRoZSBhY2sgaGFzIGJlZW4gcmVjZWl2ZWQuCi0JCSAqCi0JCSAqIE9uIHJhcmUgb2NjYXNpb25zIHRoZSBicm9hZGNhc3QgbGV2ZWwgdHJpZ2dlcmVkIGFjayBnZXRzCi0JCSAqIGRlbGF5ZWQgZ29pbmcgdG8gaW9hcGljcywgYW5kIGlmIHdlIHJlcHJvZ3JhbSB0aGUKLQkJICogdmVjdG9yIHdoaWxlIFJlbW90ZSBJUlIgaXMgc3RpbGwgc2V0IHRoZSBpcnEgd2lsbCBuZXZlcgotCQkgKiBmaXJlIGFnYWluLgotCQkgKgotCQkgKiBUbyBwcmV2ZW50IHRoaXMgc2NlbmFyaW8gd2UgcmVhZCB0aGUgUmVtb3RlIElSUiBiaXQKLQkJICogb2YgdGhlIGlvYXBpYy4gIFRoaXMgaGFzIHR3byBlZmZlY3RzLgotCQkgKiAtIE9uIGFueSBzYW5lIHN5c3RlbSB0aGUgcmVhZCBvZiB0aGUgaW9hcGljIHdpbGwKLQkJICogICBmbHVzaCB3cml0ZXMgKGFuZCBhY2tzKSBnb2luZyB0byB0aGUgaW9hcGljIGZyb20KLQkJICogICB0aGlzIGNwdS4KLQkJICogLSBXZSBnZXQgdG8gc2VlIGlmIHRoZSBBQ0sgaGFzIGFjdHVhbGx5IGJlZW4gZGVsaXZlcmVkLgotCQkgKgotCQkgKiBCYXNlZCBvbiBmYWlsZWQgZXhwZXJpbWVudHMgb2YgcmVwcm9ncmFtbWluZyB0aGUKLQkJICogaW9hcGljIGVudHJ5IGZyb20gb3V0c2lkZSBvZiBpcnEgY29udGV4dCBzdGFydGluZwotCQkgKiB3aXRoIG1hc2tpbmcgdGhlIGlvYXBpYyBlbnRyeSBhbmQgdGhlbiBwb2xsaW5nIHVudGlsCi0JCSAqIFJlbW90ZSBJUlIgd2FzIGNsZWFyIGJlZm9yZSByZXByb2dyYW1taW5nIHRoZQotCQkgKiBpb2FwaWMgSSBkb24ndCB0cnVzdCB0aGUgUmVtb3RlIElSUiBiaXQgdG8gYmUKLQkJICogY29tcGxldGV5IGFjY3VyYXRlLgotCQkgKgotCQkgKiBIb3dldmVyIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIHBsdWcKLQkJICogdGhpcyByYWNlLCBzbyBpZiB0aGUgUmVtb3RlIElSUiBiaXQgaXMgbm90Ci0JCSAqIGFjY3VyYXRlIGFuZCBpcyBjYXVzaW5nIHByb2JsZW1zIHRoZW4gaXQgaXMgYSBoYXJkd2FyZSBidWcKLQkJICogYW5kIHlvdSBjYW4gZ28gdGFsayB0byB0aGUgY2hpcHNldCB2ZW5kb3IgYWJvdXQgaXQuCi0JCSAqLwotCQlpZiAoIWlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoaXJxKSkKLQkJCW1vdmVfbWFza2VkX2lycShpcnEpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZSAJCT0gIklPLUFQSUMiLAotCS5zdGFydHVwIAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKLQkubWFzawkgCT0gbWFza19JT19BUElDX2lycSwKLQkudW5tYXNrCSAJPSB1bm1hc2tfSU9fQVBJQ19pcnEsCi0JLmFjayAJCT0gYWNrX2FwaWNfZWRnZSwKLQkuZW9pIAkJPSBhY2tfYXBpY19sZXZlbCwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eSAJPSBzZXRfaW9hcGljX2FmZmluaXR5X2lycSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSVItSU8tQVBJQyIsCi0JLnN0YXJ0dXAgCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAotCS5tYXNrCSAJPSBtYXNrX0lPX0FQSUNfaXJxLAotCS51bm1hc2sJIAk9IHVubWFza19JT19BUElDX2lycSwKLQkuYWNrIAkJPSBhY2tfeDJhcGljX2VkZ2UsCi0JLmVvaSAJCT0gYWNrX3gyYXBpY19sZXZlbCwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eSAJPSBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQotewotCWludCBpcnE7Ci0KLQkvKgotCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZwotCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCi0JICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQotCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKLQkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCi0JICoKLQkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQotCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQotCSAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUyA7IGlycSsrKSB7Ci0JCWlmIChJT19BUElDX0lSUShpcnEpICYmICFpcnFfY2ZnW2lycV0udmVjdG9yKSB7Ci0JCQkvKgotCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKLQkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5Ci0JCQkgKiBpbnRlcnJ1cHQgaWYgd2UgY2FuLi4KLQkJCSAqLwotCQkJaWYgKGlycSA8IDE2KQotCQkJCW1ha2VfODI1OUFfaXJxKGlycSk7Ci0JCQllbHNlCi0JCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLwotCQkJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZub19pcnFfY2hpcDsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgdW5tYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiAmIH5BUElDX0xWVF9NQVNLRUQpOwotfQotCi1zdGF0aWMgdm9pZCBtYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja19sYXBpY19pcnEgKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JYWNrX0FQSUNfaXJxKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGFwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJsb2NhbC1BUElDIiwKLQkubWFzawkJPSBtYXNrX2xhcGljX2lycSwKLQkudW5tYXNrCQk9IHVubWFza19sYXBpY19pcnEsCi0JLmFjawkJPSBhY2tfbGFwaWNfaXJxLAotfTsKLQotc3RhdGljIHZvaWQgbGFwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxKQotewotCWlycV9kZXNjW2lycV0uc3RhdHVzICY9IH5JUlFfTEVWRUw7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbGFwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLAotCQkJCSAgICAgICJlZGdlIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ubWkodm9pZCkKLXsKLQkvKgotIAkgKiBEaXJ0eSB0cmljayB0byBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZyAuLi4KLQkgKiBXZSBwdXQgdGhlIDgyNTlBIG1hc3RlciBpbnRvIEFFT0kgbW9kZSBhbmQKLQkgKiB1bm1hc2sgb24gYWxsIGxvY2FsIEFQSUNzIExWVDAgYXMgTk1JLgotCSAqCi0JICogVGhlIGlkZWEgdG8gdXNlIHRoZSA4MjU5QSBpbiBBRU9JIG1vZGUgKCc4MjU5QSBWaXJ0dWFsIFdpcmUnKQotCSAqIGlzIGZyb20gTWFjaWVqIFcuIFJvenlja2kgLSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBFT0kgZnJvbQotCSAqIHRoZSBOTUkgaGFuZGxlciBvciB0aGUgdGltZXIgaW50ZXJydXB0LgotCSAqLyAKLQlwcmludGsoS0VSTl9JTkZPICJhY3RpdmF0aW5nIE5NSSBXYXRjaGRvZyAuLi4iKTsKLQotCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7Ci0KLQlwcmludGsoIiBkb25lLlxuIik7Ci19Ci0KLS8qCi0gKiBUaGlzIGxvb2tzIGEgYml0IGhhY2tpc2ggYnV0IGl0J3MgYWJvdXQgdGhlIG9ubHkgb25lIHdheSBvZiBzZW5kaW5nCi0gKiBhIGZldyBJTlRBIGN5Y2xlcyB0byA4MjU5QXMgYW5kIGFueSBhc3NvY2lhdGVkIGdsdWUgbG9naWMuICBJQ1IgZG9lcwotICogbm90IHN1cHBvcnQgdGhlIEV4dElOVCBtb2RlLCB1bmZvcnR1bmF0ZWx5LiAgV2UgbmVlZCB0byBzZW5kIHRoZXNlCi0gKiBjeWNsZXMgYXMgc29tZSBpODI0ODlEWC1iYXNlZCBib2FyZHMgaGF2ZSBnbHVlIGxvZ2ljIHRoYXQga2VlcHMgdGhlCi0gKiA4MjU5QSBpbnRlcnJ1cHQgbGluZSBhc3NlcnRlZCB1bnRpbCBJTlRBLiAgLS1tYWNybwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHVubG9ja19FeHRJTlRfbG9naWModm9pZCkKLXsKLQlpbnQgYXBpYywgcGluLCBpOwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5MCwgZW50cnkxOwotCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OwotCi0JcGluICA9IGZpbmRfaXNhX2lycV9waW4oOCwgbXBfSU5UKTsKLQlhcGljID0gZmluZF9pc2FfaXJxX2FwaWMoOCwgbXBfSU5UKTsKLQlpZiAocGluID09IC0xKQotCQlyZXR1cm47Ci0KLQllbnRyeTAgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCi0JY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLQotCW1lbXNldCgmZW50cnkxLCAwLCBzaXplb2YoZW50cnkxKSk7Ci0KLQllbnRyeTEuZGVzdF9tb2RlID0gMDsJCQkvKiBwaHlzaWNhbCBkZWxpdmVyeSAqLwotCWVudHJ5MS5tYXNrID0gMDsJCQkvKiB1bm1hc2sgSVJRIG5vdyAqLwotCWVudHJ5MS5kZXN0ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZW50cnkxLmRlbGl2ZXJ5X21vZGUgPSBkZXN0X0V4dElOVDsKLQllbnRyeTEucG9sYXJpdHkgPSBlbnRyeTAucG9sYXJpdHk7Ci0JZW50cnkxLnRyaWdnZXIgPSAwOwotCWVudHJ5MS52ZWN0b3IgPSAwOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkxKTsKLQotCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7Ci0Jc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOwotCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3QgJiB+UlRDX1JBVEVfU0VMRUNUKSB8IDB4NiwKLQkJICAgUlRDX0ZSRVFfU0VMRUNUKTsKLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCB8IFJUQ19QSUUsIFJUQ19DT05UUk9MKTsKLQotCWkgPSAxMDA7Ci0Jd2hpbGUgKGktLSA+IDApIHsKLQkJbWRlbGF5KDEwKTsKLQkJaWYgKChDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpICYgUlRDX1BGKSA9PSBSVENfUEYpCi0JCQlpIC09IDEwOwotCX0KLQotCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7Ci0JQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOwotCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTApOwotfQotCi0vKgotICogVGhpcyBjb2RlIG1heSBsb29rIGEgYml0IHBhcmFub2lkLCBidXQgaXQncyBzdXBwb3NlZCB0byBjb29wZXJhdGUgd2l0aAotICogYSB3aWRlIHJhbmdlIG9mIGJvYXJkcyBhbmQgQklPUyBidWdzLiAgRm9ydHVuYXRlbHkgb25seSB0aGUgdGltZXIgSVJRCi0gKiBpcyBzbyBzY3Jld3kuICBUaGFua3MgdG8gQnJpYW4gUGVya2lucyBmb3IgdGVzdGluZy9oYWNraW5nIHRoaXMgYmVhc3QKLSAqIGZhbmF0aWNhbGx5IG9uIGhpcyB0cnVseSBidWdneSBib2FyZC4KLSAqCi0gKiBGSVhNRTogcmVhbGx5IG5lZWQgdG8gcmV2YW1wIHRoaXMgZm9yIG1vZGVybiBwbGF0Zm9ybXMgb25seS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjaGVja190aW1lcih2b2lkKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgMDsKLQlpbnQgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG5vX3BpbjEgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JLyoKLQkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgotCSAqLwotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCWFzc2lnbl9pcnFfdmVjdG9yKDAsIFRBUkdFVF9DUFVTKTsKLQotCS8qCi0JICogQXMgSVJRMCBpcyB0byBiZSBlbmFibGVkIGluIHRoZSA4MjU5QSwgdGhlIHZpcnR1YWwKLQkgKiB3aXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiB0aGUgbG9jYWwgQVBJQy4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwotCWluaXRfODI1OUEoMSk7Ci0KLQlwaW4xICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfSU5UKTsKLQlhcGljMSA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0lOVCk7Ci0JcGluMiAgPSBpb2FwaWNfaTgyNTkucGluOwotCWFwaWMyID0gaW9hcGljX2k4MjU5LmFwaWM7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggIgotCQkgICAgImFwaWMxPSVkIHBpbjE9JWQgYXBpYzI9JWQgcGluMj0lZFxuIiwKLQkJICAgIGNmZy0+dmVjdG9yLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwotCi0JLyoKLQkgKiBTb21lIEJJT1Mgd3JpdGVycyBhcmUgY2x1ZWxlc3MgYW5kIHJlcG9ydCB0aGUgRXh0SU5UQQotCSAqIEkvTyBBUElDIGlucHV0IGZyb20gdGhlIGNhc2NhZGVkIDgyNTlBIGFzIHRoZSB0aW1lcgotCSAqIGludGVycnVwdCBpbnB1dC4gIFNvIGp1c3QgaW4gY2FzZSwgaWYgb25seSBvbmUgcGluCi0JICogd2FzIGZvdW5kIGFib3ZlLCB0cnkgaXQgYm90aCBkaXJlY3RseSBhbmQgdGhyb3VnaCB0aGUKLQkgKiA4MjU5QS4KLQkgKi8KLQlpZiAocGluMSA9PSAtMSkgewotCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJCXBhbmljKCJCSU9TIGJ1ZzogdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDIik7Ci0JCXBpbjEgPSBwaW4yOwotCQlhcGljMSA9IGFwaWMyOwotCQlub19waW4xID0gMTsKLQl9IGVsc2UgaWYgKHBpbjIgPT0gLTEpIHsKLQkJcGluMiA9IHBpbjE7Ci0JCWFwaWMyID0gYXBpYzE7Ci0JfQotCi0JaWYgKHBpbjEgIT0gLTEpIHsKLQkJLyoKLQkJICogT2ssIGRvZXMgSVJRMCB0aHJvdWdoIHRoZSBJT0FQSUMgd29yaz8KLQkJICovCi0JCWlmIChub19waW4xKSB7Ci0JCQlhZGRfcGluX3RvX2lycSgwLCBhcGljMSwgcGluMSk7Ci0JCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgY2ZnLT52ZWN0b3IpOwotCQl9Ci0JCXVubWFza19JT19BUElDX2lycSgwKTsKLQkJaWYgKCFub190aW1lcl9jaGVjayAmJiB0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlpZiAoZGlzYWJsZV90aW1lcl9waW5fMSA+IDApCi0JCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOwotCQljbGVhcl9JT19BUElDX3BpbihhcGljMSwgcGluMSk7Ci0JCWlmICghbm9fcGluMSkKLQkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fRVJSICIuLk1QLUJJT1MgYnVnOiAiCi0JCQkJICAgICI4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQ1xuIik7Ci0KLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyICIKLQkJCSAgICAiKElSUTApIHRocm91Z2ggdGhlIDgyNTlBIC4uLlxuIik7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkJICAgICIuLi4uLiAoZm91bmQgYXBpYyAlZCBwaW4gJWQpIC4uLlxuIiwgYXBpYzIsIHBpbjIpOwotCQkvKgotCQkgKiBsZWdhY3kgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIElPIEFQSUMgIzAKLQkJICovCi0JCXJlcGxhY2VfcGluX2F0X2lycSgwLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwotCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMiwgcGluMiwgY2ZnLT52ZWN0b3IpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7Ci0JCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7Ci0JCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOwotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKgotCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCi0JCSAqLwotCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOwotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gZmFpbGVkLlxuIik7Ci0JfQotCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCi0JCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7Ci0JCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOwotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgVmlydHVhbCBXaXJlIElSUS4uLlxuIik7Ci0KLQlsYXBpY19yZWdpc3Rlcl9pbnRyKDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCi0JZW5hYmxlXzgyNTlBX2lycSgwKTsKLQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9GSVhFRCB8IGNmZy0+dmVjdG9yKTsKLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZC5cbiIpOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBFeHRJTlQgSVJRLi4uXG4iKTsKLQotCWluaXRfODI1OUEoMCk7Ci0JbWFrZV84MjU5QV9pcnEoMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKLQotCXVubG9ja19FeHRJTlRfbG9naWMoKTsKLQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZCA6KC5cbiIpOwotCXBhbmljKCJJTy1BUElDICsgdGltZXIgZG9lc24ndCB3b3JrISAgQm9vdCB3aXRoIGFwaWM9ZGVidWcgYW5kIHNlbmQgYSAiCi0JCSJyZXBvcnQuICBUaGVuIHRyeSBib290aW5nIHdpdGggdGhlICdub2FwaWMnIG9wdGlvbi5cbiIpOwotb3V0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbm90aW1lcmNoZWNrKGNoYXIgKnMpCi17Ci0Jbm9fdGltZXJfY2hlY2sgPSAxOwotCXJldHVybiAxOwotfQotX19zZXR1cCgibm9fdGltZXJfY2hlY2siLCBub3RpbWVyY2hlY2spOwotCi0vKgotICogVHJhZGl0aW9uYWxseSBJU0EgSVJRMiBpcyB0aGUgY2FzY2FkZSBJUlEsIGFuZCBpcyBub3QgYXZhaWxhYmxlCi0gKiB0byBkZXZpY2VzLiAgSG93ZXZlciB0aGVyZSBtYXkgYmUgYW4gSS9PIEFQSUMgcGluIGF2YWlsYWJsZSBmb3IKLSAqIHRoaXMgaW50ZXJydXB0IHJlZ2FyZGxlc3MuICBUaGUgcGluIG1heSBiZSBsZWZ0IHVuY29ubmVjdGVkLCBidXQKLSAqIHR5cGljYWxseSBpdCB3aWxsIGJlIHJldXNlZCBhcyBhbiBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgZm9yCi0gKiB0aGUgbWFzdGVyIDgyNTlBLiAgSW4gdGhlIE1QUyBjYXNlIHN1Y2ggYSBwaW4gd2lsbCBub3JtYWxseSBiZQotICogcmVwb3J0ZWQgYXMgYW4gRXh0SU5UIGludGVycnVwdCBpbiB0aGUgTVAgdGFibGUuICBXaXRoIEFDUEkKLSAqIHRoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgRXh0SU5UIGludGVycnVwdHMsIGFuZCBpbiB0aGUgYWJzZW5jZQotICogb2YgYW4gb3ZlcnJpZGUgaXQgd291bGQgYmUgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSBJU0EgSS9PIEFQSUMKLSAqIGludGVycnVwdCwgdGhhdCBpcyBlZGdlLXRyaWdnZXJlZCBhbmQgdW5tYXNrZWQgYnkgZGVmYXVsdC4gIFdlCi0gKiB1c2VkIHRvIGRvIHRoaXMsIGJ1dCBpdCBjYXVzZWQgcHJvYmxlbXMgb24gc29tZSBzeXN0ZW1zIGJlY2F1c2UKLSAqIG9mIHRoZSBOTUkgd2F0Y2hkb2cgYW5kIHNvbWV0aW1lcyBJUlEwIG9mIHRoZSA4MjU0IHRpbWVyIHVzaW5nCi0gKiB0aGUgc2FtZSBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gZHJpdmUgdGhlIGxvY2FsIEFQSUMgb2YgdGhlCi0gKiBib290c3RyYXAgcHJvY2Vzc29yLiAgVGhlcmVmb3JlIHdlIHJlZnJhaW4gZnJvbSByb3V0aW5nIElSUTIgdG8KLSAqIHRoZSBJL08gQVBJQyBpbiBhbGwgY2FzZXMgbm93LiAgTm8gYWN0dWFsIGRldmljZSBzaG91bGQgcmVxdWVzdAotICogaXQgYW55d2F5LiAgLS1tYWNybwotICovCi0jZGVmaW5lIFBJQ19JUlFTCSgxPDwyKQotCi12b2lkIF9faW5pdCBzZXR1cF9JT19BUElDKHZvaWQpCi17Ci0KLQkvKgotCSAqIGNhbGxpbmcgZW5hYmxlX0lPX0FQSUMoKSBpcyBtb3ZlZCB0byBzZXR1cF9sb2NhbF9BUElDIGZvciBCUAotCSAqLwotCi0JaW9fYXBpY19pcnFzID0gflBJQ19JUlFTOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRU5BQkxJTkcgSU8tQVBJQyBJUlFzXG4iKTsKLQotCXN5bmNfQXJiX0lEcygpOwotCXNldHVwX0lPX0FQSUNfaXJxcygpOwotCWluaXRfSU9fQVBJQ190cmFwcygpOwotCWNoZWNrX3RpbWVyKCk7Ci19Ci0KLXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgZGV2OwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5WzBdOwotfTsKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKiBtcF9pb2FwaWNfZGF0YVtNQVhfSU9fQVBJQ1NdOwotCi1zdGF0aWMgaW50IGlvYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOwotCWludCBpOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKLQllbnRyeSA9IGRhdGEtPmVudHJ5OwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpICsrLCBlbnRyeSArKyApCi0JCSplbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGRldi0+aWQsIGkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOwotCWVudHJ5ID0gZGF0YS0+ZW50cnk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGRldi0+aWQsIDApOwotCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZCkgewotCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkOwotCQlpb19hcGljX3dyaXRlKGRldi0+aWQsIDAsIHJlZ18wMC5yYXcpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpKyspCi0JCWlvYXBpY193cml0ZV9lbnRyeShkZXYtPmlkLCBpLCBlbnRyeVtpXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaW9hcGljX3N5c2Rldl9jbGFzcyA9IHsKLQkubmFtZSA9ICJpb2FwaWMiLAotCS5zdXNwZW5kID0gaW9hcGljX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlvYXBpY19yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfaW5pdF9zeXNmcyh2b2lkKQotewotCXN0cnVjdCBzeXNfZGV2aWNlICogZGV2OwotCWludCBpLCBzaXplLCBlcnJvcjsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpb2FwaWNfc3lzZGV2X2NsYXNzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKysgKSB7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IHN5c19kZXZpY2UpICsgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXQotCQkJKiBzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpOwotCQltcF9pb2FwaWNfZGF0YVtpXSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbXBfaW9hcGljX2RhdGFbaV0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldiA9ICZtcF9pb2FwaWNfZGF0YVtpXS0+ZGV2OwotCQlkZXYtPmlkID0gaTsKLQkJZGV2LT5jbHMgPSAmaW9hcGljX3N5c2Rldl9jbGFzczsKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoZGV2KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlrZnJlZShtcF9pb2FwaWNfZGF0YVtpXSk7Ci0JCQltcF9pb2FwaWNfZGF0YVtpXSA9IE5VTEw7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1kZXZpY2VfaW5pdGNhbGwoaW9hcGljX2luaXRfc3lzZnMpOwotCi0vKgotICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgotICovCi1pbnQgY3JlYXRlX2lycSh2b2lkKQotewotCS8qIEFsbG9jYXRlIGFuIHVudXNlZCBpcnEgKi8KLQlpbnQgaXJxOwotCWludCBuZXc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlycSA9IC1FTk9TUEM7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JZm9yIChuZXcgPSAoTlJfSVJRUyAtIDEpOyBuZXcgPj0gMDsgbmV3LS0pIHsKLQkJaWYgKHBsYXRmb3JtX2xlZ2FjeV9pcnEobmV3KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXJxX2NmZ1tuZXddLnZlY3RvciAhPSAwKQotCQkJY29udGludWU7Ci0JCWlmIChfX2Fzc2lnbl9pcnFfdmVjdG9yKG5ldywgVEFSR0VUX0NQVVMpID09IDApCi0JCQlpcnEgPSBuZXc7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGlycSA+PSAwKSB7Ci0JCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKLQl9Ci0JcmV0dXJuIGlycTsKLX0KLQotdm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWZyZWVfaXJ0ZShpcnEpOwotI2VuZGlmCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JX19jbGVhcl9pcnFfdmVjdG9yKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIE1TSSBtZXNzYWdlIGNvbXBvc2l0aW9uCi0gKi8KLSNpZmRlZiBDT05GSUdfUENJX01TSQotc3RhdGljIGludCBtc2lfY29tcG9zZV9tc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBkZXN0OwotCWNwdW1hc2tfdCB0bXA7Ci0KLQl0bXAgPSBUQVJHRVRfQ1BVUzsKLQllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIHRtcCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7Ci0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKLQkJc3RydWN0IGlydGUgaXJ0ZTsKLQkJaW50IGlyX2luZGV4OwotCQl1MTYgc3ViX2hhbmRsZTsKLQotCQlpcl9pbmRleCA9IG1hcF9pcnFfdG9faXJ0ZV9oYW5kbGUoaXJxLCAmc3ViX2hhbmRsZSk7Ci0JCUJVR19PTihpcl9pbmRleCA9PSAtMSk7Ci0KLQkJbWVtc2V0ICgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKLQotCQlpcnRlLnByZXNlbnQgPSAxOwotCQlpcnRlLmRzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQkJaXJ0ZS50cmlnZ2VyX21vZGUgPSAwOyAvKiBlZGdlICovCi0JCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCQlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwotCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7Ci0KLQkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKLQkJbXNnLT5kYXRhID0gc3ViX2hhbmRsZTsKLQkJbXNnLT5hZGRyZXNzX2xvID0gTVNJX0FERFJfQkFTRV9MTyB8IE1TSV9BRERSX0lSX0VYVF9JTlQgfAotCQkJCSAgTVNJX0FERFJfSVJfU0hWIHwKLQkJCQkgIE1TSV9BRERSX0lSX0lOREVYMShpcl9pbmRleCkgfAotCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgyKGlyX2luZGV4KTsKLQl9IGVsc2UKLSNlbmRpZgotCXsKLQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKLQkJbXNnLT5hZGRyZXNzX2xvID0KLQkJCU1TSV9BRERSX0JBU0VfTE8gfAotCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KLQkJCQlNU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUw6Ci0JCQkJTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwpIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVOgotCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSSkgfAotCQkJTVNJX0FERFJfREVTVF9JRChkZXN0KTsKLQotCQltc2ctPmRhdGEgPQotCQkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKLQkJCU1TSV9EQVRBX0xFVkVMX0FTU0VSVCB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotCQkJCU1TSV9EQVRBX0RFTElWRVJZX0ZJWEVEOgotCQkJCU1TSV9EQVRBX0RFTElWRVJZX0xPV1BSSSkgfAotCQkJTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIHNldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCi0JY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKGNwdXNfZW1wdHkodG1wKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOwotCi0JbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwotCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7Ci0JbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLS8qCi0gKiBNaWdyYXRlIHRoZSBNU0kgaXJxIHRvIGFub3RoZXIgY3B1bWFzay4gVGhpcyBtaWdyYXRpb24gaXMKLSAqIGRvbmUgaW4gdGhlIHByb2Nlc3MgY29udGV4dCB1c2luZyBpbnRlcnJ1cHQtcmVtYXBwaW5nIGhhcmR3YXJlLgotICovCi1zdGF0aWMgdm9pZCBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wLCBjbGVhbnVwX21hc2s7Ci0Jc3RydWN0IGlydGUgaXJ0ZTsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOwotCi0JLyoKLQkgKiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgSVJURSB3aXRoIHRoZSBuZXcgZGVzdGluYXRpb24gYW5kIHZlY3Rvci4KLQkgKi8KLQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKLQotCS8qCi0JICogQWZ0ZXIgdGhpcyBwb2ludCwgYWxsIHRoZSBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgYXJyaXZpbmcKLQkgKiBhdCB0aGUgbmV3IGRlc3RpbmF0aW9uLiBTbywgdGltZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cwotCSAqIHZlY3RvciBhbGxvY2F0aW9uLgotCSAqLwotCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHsKLQkJY3B1c19hbmQoY2xlYW51cF9tYXNrLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQgPSBjcHVzX3dlaWdodChjbGVhbnVwX21hc2spOwotCQlzZW5kX0lQSV9tYXNrKGNsZWFudXBfbWFzaywgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwotCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOwotCX0KLQotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotI2VuZGlmCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi0vKgotICogSVJRIENoaXAgZm9yIE1TSSBQQ0kvUENJLVgvUENJLUV4cHJlc3MgRGV2aWNlcywKLSAqIHdoaWNoIGltcGxlbWVudCB0aGUgTVNJIG9yIE1TSS1YIENhcGFiaWxpdHkgU3RydWN0dXJlLgotICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktTVNJIiwKLQkudW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAotCS5tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuYWNrCQk9IGFja19hcGljX2VkZ2UsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBzZXRfbXNpX2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfaXJfY2hpcCA9IHsKLQkubmFtZQkJPSAiSVItUENJLU1TSSIsCi0JLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKLQkubWFzawkJPSBtYXNrX21zaV9pcnEsCi0JLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLS8qCi0gKiBNYXAgdGhlIFBDSSBkZXYgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVtYXBwaW5nIGhhcmR3YXJlIHVuaXQKLSAqIGFuZCBhbGxvY2F0ZSAnbnZlYycgY29uc2VjdXRpdmUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyaWVzCi0gKiBpbiBpdC4KLSAqLwotc3RhdGljIGludCBtc2lfYWxsb2NfaXJ0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxLCBpbnQgbnZlYykKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwotCWludCBpbmRleDsKLQotCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOwotCWlmICghaW9tbXUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVW5hYmxlIHRvIG1hcCBQQ0kgJXMgdG8gaW9tbXVcbiIsIHBjaV9uYW1lKGRldikpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQlpbmRleCA9IGFsbG9jX2lydGUoaW9tbXUsIGlycSwgbnZlYyk7Ci0JaWYgKGluZGV4IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgJWQgSVJURSBmb3IgUENJICVzXG4iLCBudmVjLAotCQkgICAgICAgIHBjaV9uYW1lKGRldikpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0JcmV0dXJuIGluZGV4OwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIGludCBpcnEpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0KLQlyZXQgPSBtc2lfY29tcG9zZV9tc2coZGV2LCBpcnEsICZtc2cpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc2V0X2lycV9tc2koaXJxLCBkZXNjKTsKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQkJLyoKLQkJICogaXJxIG1pZ3JhdGlvbiBpbiBwcm9jZXNzIGNvbnRleHQKLQkJICovCi0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9pcl9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKLXsKLQlpbnQgaXJxLCByZXQ7Ci0KLQlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JaWYgKGlycSA8IDApCi0JCXJldHVybiBpcnE7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWlmICghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJZ290byBub19pcjsKLQotCXJldCA9IG1zaV9hbGxvY19pcnRlKGRldiwgaXJxLCAxKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcjsKLW5vX2lyOgotI2VuZGlmCi0JcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIGRlc2MsIGlycSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGVzdHJveV9pcnEoaXJxKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotZXJyb3I6Ci0JZGVzdHJveV9pcnEoaXJxKTsKLQlyZXR1cm4gcmV0OwotI2VuZGlmCi19Ci0KLWludCBhcmNoX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKLXsKLQlpbnQgaXJxLCByZXQsIHN1Yl9oYW5kbGU7Ci0Jc3RydWN0IG1zaV9kZXNjICpkZXNjOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IDA7Ci0JaW50IGluZGV4ID0gMDsKLSNlbmRpZgotCi0Jc3ViX2hhbmRsZSA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JCWlmIChpcnEgPCAwKQotCQkJcmV0dXJuIGlycTsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCQlnb3RvIG5vX2lyOwotCi0JCWlmICghc3ViX2hhbmRsZSkgewotCQkJLyoKLQkJCSAqIGFsbG9jYXRlIHRoZSBjb25zZWN1dGl2ZSBibG9jayBvZiBJUlRFJ3MKLQkJCSAqIGZvciAnbnZlYycKLQkJCSAqLwotCQkJaW5kZXggPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgbnZlYyk7Ci0JCQlpZiAoaW5kZXggPCAwKSB7Ci0JCQkJcmV0ID0gaW5kZXg7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOwotCQkJaWYgKCFpb21tdSkgewotCQkJCXJldCA9IC1FTk9FTlQ7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCS8qCi0JCQkgKiBzZXR1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBpcnEgYW5kIHRoZSBJUlRFCi0JCQkgKiBiYXNlIGluZGV4LCB0aGUgc3ViX2hhbmRsZSBwb2ludGluZyB0byB0aGUKLQkJCSAqIGFwcHJvcHJpYXRlIGludGVycnVwdCByZW1hcCB0YWJsZSBlbnRyeS4KLQkJCSAqLwotCQkJc2V0X2lydGVfaXJxKGlycSwgaW9tbXUsIGluZGV4LCBzdWJfaGFuZGxlKTsKLQkJfQotbm9faXI6Ci0jZW5kaWYKLQkJcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIGRlc2MsIGlycSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnJvcjsKLQkJc3ViX2hhbmRsZSsrOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JZGVzdHJveV9pcnEoaXJxKTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWRlc3Ryb3lfaXJxKGlycSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfRE1BUgotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIGRtYXJfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQlkbWFyX21zaV9yZWFkKGlycSwgJm1zZyk7Ci0KLQltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7Ci0JbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOwotCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7Ci0KLQlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotc3RydWN0IGlycV9jaGlwIGRtYXJfbXNpX3R5cGUgPSB7Ci0JLm5hbWUgPSAiRE1BUl9NU0kiLAotCS51bm1hc2sgPSBkbWFyX21zaV91bm1hc2ssCi0JLm1hc2sgPSBkbWFyX21zaV9tYXNrLAotCS5hY2sgPSBhY2tfYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5ID0gZG1hcl9tc2lfc2V0X2FmZmluaXR5LAotI2VuZGlmCi0JLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotaW50IGFyY2hfc2V0dXBfZG1hcl9tc2kodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQotCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZG1hcl9tc2lfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLAotCQkiZWRnZSIpOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLwotLyoKLSAqIEh5cGVydHJhbnNwb3J0IGludGVycnVwdCBzdXBwb3J0Ci0gKi8KLSNpZmRlZiBDT05GSUdfSFRfSVJRCi0KLSNpZmRlZiBDT05GSUdfU01QCi0KLXN0YXRpYyB2b2lkIHRhcmdldF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKLXsKLQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JZmV0Y2hfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JbXNnLmFkZHJlc3NfbG8gJj0gfihIVF9JUlFfTE9XX1ZFQ1RPUl9NQVNLIHwgSFRfSVJRX0xPV19ERVNUX0lEX01BU0spOwotCW1zZy5hZGRyZXNzX2hpICY9IH4oSFRfSVJRX0hJR0hfREVTVF9JRF9NQVNLKTsKLQotCW1zZy5hZGRyZXNzX2xvIHw9IEhUX0lSUV9MT1dfVkVDVE9SKHZlY3RvcikgfCBIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCk7Ci0JbXNnLmFkZHJlc3NfaGkgfD0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKLQotCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2h0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCi0JY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKGNwdXNfZW1wdHkodG1wKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCXRhcmdldF9odF9pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBodF9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiUENJLUhUIiwKLQkubWFzawkJPSBtYXNrX2h0X2lycSwKLQkudW5tYXNrCQk9IHVubWFza19odF9pcnEsCi0JLmFjawkJPSBhY2tfYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gc2V0X2h0X2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLWludCBhcmNoX3NldHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCWludCBlcnI7Ci0JY3B1bWFza190IHRtcDsKLQotCXRtcCA9IFRBUkdFVF9DUFVTOwotCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgdG1wKTsKLQlpZiAoIWVycikgewotCQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JCXVuc2lnbmVkIGRlc3Q7Ci0KLQkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgdG1wKTsKLQkJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwotCi0JCW1zZy5hZGRyZXNzX2hpID0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKLQotCQltc2cuYWRkcmVzc19sbyA9Ci0JCQlIVF9JUlFfTE9XX0JBU0UgfAotCQkJSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpIHwKLQkJCUhUX0lSUV9MT1dfVkVDVE9SKGNmZy0+dmVjdG9yKSB8Ci0JCQkoKElOVF9ERVNUX01PREUgPT0gMCkgPwotCQkJCUhUX0lSUV9MT1dfRE1fUEhZU0lDQUwgOgotCQkJCUhUX0lSUV9MT1dfRE1fTE9HSUNBTCkgfAotCQkJSFRfSVJRX0xPV19SUUVPSV9FREdFIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJSFRfSVJRX0xPV19NVF9GSVhFRCA6Ci0JCQkJSFRfSVJRX0xPV19NVF9BUkJJVFJBVEVEKSB8Ci0JCQlIVF9JUlFfTE9XX0lSUV9NQVNLRUQ7Ci0KLQkJd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmh0X2lycV9jaGlwLAotCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJLWJhc2VkIElPQVBJQyBDb25maWd1cmF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FDUEkKLQotI2RlZmluZSBJT19BUElDX01BWF9JRAkJMHhGRQotCi1pbnQgX19pbml0IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMgKGludCBpb2FwaWMpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZWdfMDEuYml0cy5lbnRyaWVzOwotfQotCi0KLWludCBpb19hcGljX3NldF9wY2lfcm91dGluZyAoaW50IGlvYXBpYywgaW50IHBpbiwgaW50IGlycSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKLXsKLQlpZiAoIUlPX0FQSUNfSVJRKGlycSkpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCxLRVJOX0VSUiAiSU9BUElDWyVkXTogSW52YWxpZCByZWZlcmVuY2UgdG8gSVJRIDBcbiIsCi0JCQlpb2FwaWMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIElSUXMgPCAxNiBhcmUgYWxyZWFkeSBpbiB0aGUgaXJxXzJfcGluW10gbWFwCi0JICovCi0JaWYgKGlycSA+PSAxNikKLQkJYWRkX3Bpbl90b19pcnEoaXJxLCBpb2FwaWMsIHBpbik7Ci0KLQlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLCB0cmlnZ2VyaW5nLCBwb2xhcml0eSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgYWNwaV9nZXRfb3ZlcnJpZGVfaXJxKGludCBidXNfaXJxLCBpbnQgKnRyaWdnZXIsIGludCAqcG9sYXJpdHkpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc2tpcF9pb2FwaWNfc2V0dXApCi0JCXJldHVybiAtMTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IG1wX0lOVCAmJgotCQkgICAgbXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gYnVzX2lycSkKLQkJCWJyZWFrOwotCWlmIChpID49IG1wX2lycV9lbnRyaWVzKQotCQlyZXR1cm4gLTE7Ci0KLQkqdHJpZ2dlciA9IGlycV90cmlnZ2VyKGkpOwotCSpwb2xhcml0eSA9IGlycV9wb2xhcml0eShpKTsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSBpcyBvbmx5IGEgaGVscGVyIGZvciB0aGUgaTM4NiBzbXAgYm9vdCBwcm9jZXNzIHdoZXJlCi0gKiB3ZSBuZWVkIHRvIHJlcHJvZ3JhbSB0aGUgaW9yZWR0YmxzIHRvIGNhdGVyIGZvciB0aGUgY3B1cyB3aGljaCBoYXZlIGNvbWUgb25saW5lCi0gKiBzbyBtYXNrIGluIGFsbCBjYXNlcyBzaG91bGQgc2ltcGx5IGJlIFRBUkdFVF9DUFVTCi0gKi8KLSNpZmRlZiBDT05GSUdfU01QCi12b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQotewotCWludCBwaW4sIGlvYXBpYywgaXJxLCBpcnFfZW50cnk7Ci0KLQlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKLQkJcmV0dXJuOwotCi0JZm9yIChpb2FwaWMgPSAwOyBpb2FwaWMgPCBucl9pb2FwaWNzOyBpb2FwaWMrKykgewotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbaW9hcGljXTsgcGluKyspIHsKLQkJCWlycV9lbnRyeSA9IGZpbmRfaXJxX2VudHJ5KGlvYXBpYywgcGluLCBtcF9JTlQpOwotCQkJaWYgKGlycV9lbnRyeSA9PSAtMSkKLQkJCQljb250aW51ZTsKLQkJCWlycSA9IHBpbl8yX2lycShpcnFfZW50cnksIGlvYXBpYywgcGluKTsKLQotCQkJLyogc2V0dXBfSU9fQVBJQ19pcnFzIGNvdWxkIGZhaWwgdG8gZ2V0IHZlY3RvciBmb3Igc29tZSBkZXZpY2UKLQkJCSAqIHdoZW4geW91IGhhdmUgdG9vIG1hbnkgZGV2aWNlcywgYmVjYXVzZSBhdCB0aGF0IHRpbWUgb25seSBib290Ci0JCQkgKiBjcHUgaXMgb25saW5lLgotCQkJICovCi0JCQlpZiAoIWlycV9jZmdbaXJxXS52ZWN0b3IpCi0JCQkJc2V0dXBfSU9fQVBJQ19pcnEoaW9hcGljLCBwaW4sIGlycSwKLQkJCQkJCSAgaXJxX3RyaWdnZXIoaXJxX2VudHJ5KSwKLQkJCQkJCSAgaXJxX3BvbGFyaXR5KGlycV9lbnRyeSkpOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JCQllbHNlIGlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQotCQkJCXNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxKGlycSwgVEFSR0VUX0NQVVMpOwotI2VuZGlmCi0JCQllbHNlCi0JCQkJc2V0X2lvYXBpY19hZmZpbml0eV9pcnEoaXJxLCBUQVJHRVRfQ1BVUyk7Ci0JCX0KLQotCX0KLX0KLSNlbmRpZgotCi0jZGVmaW5lIElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUgMTEKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3Jlc291cmNlczsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9faW5pdCBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBuOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgKm1lbTsKLQlpbnQgaTsKLQotCWlmIChucl9pb2FwaWNzIDw9IDApCi0JCXJldHVybiBOVUxMOwotCi0JbiA9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUgKyBzaXplb2Yoc3RydWN0IHJlc291cmNlKTsKLQluICo9IG5yX2lvYXBpY3M7Ci0KLQltZW0gPSBhbGxvY19ib290bWVtKG4pOwotCXJlcyA9ICh2b2lkICopbWVtOwotCi0JaWYgKG1lbSAhPSBOVUxMKSB7Ci0JCW1lbSArPSBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG5yX2lvYXBpY3M7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQkJcmVzW2ldLm5hbWUgPSBtZW07Ci0JCQlyZXNbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQkJCXNwcmludGYobWVtLCAgIklPQVBJQyAldSIsIGkpOwotCQkJbWVtICs9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkU7Ci0JCX0KLQl9Ci0KLQlpb2FwaWNfcmVzb3VyY2VzID0gcmVzOwotCi0JcmV0dXJuIHJlczsKLX0KLQotdm9pZCBfX2luaXQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlvYXBpY19waHlzLCBpZHggPSBGSVhfSU9fQVBJQ19CQVNFXzA7Ci0Jc3RydWN0IHJlc291cmNlICppb2FwaWNfcmVzOwotCWludCBpOwotCi0JaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCWlmIChzbXBfZm91bmRfY29uZmlnKSB7Ci0JCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBfYXBpY2FkZHI7Ci0JCX0gZWxzZSB7Ci0JCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7Ci0JCX0KLQkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCi0JCQkgICAgIm1hcHBlZCBJT0FQSUMgdG8gJTAxNmx4ICglMDE2bHgpXG4iLAotCQkJICAgIF9fZml4X3RvX3ZpcnQoaWR4KSwgaW9hcGljX3BoeXMpOwotCQlpZHgrKzsKLQotCQlpZiAoaW9hcGljX3JlcyAhPSBOVUxMKSB7Ci0JCQlpb2FwaWNfcmVzLT5zdGFydCA9IGlvYXBpY19waHlzOwotCQkJaW9hcGljX3Jlcy0+ZW5kID0gaW9hcGljX3BoeXMgKyAoNCAqIDEwMjQpIC0gMTsKLQkJCWlvYXBpY19yZXMrKzsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBpb2FwaWNfcmVzb3VyY2VzOwotCi0JaWYgKCFyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIklPIEFQSUMgcmVzb3VyY2VzIGNvdWxkIGJlIG5vdCBiZSBhbGxvY2F0ZWQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcik7Ci0JCXIrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogSW5zZXJ0IHRoZSBJTyBBUElDIHJlc291cmNlcyBhZnRlciBQQ0kgaW5pdGlhbGl6YXRpb24gaGFzIG9jY3VyZWQgdG8gaGFuZGxlCi0gKiBJTyBBUElDUyB0aGF0IGFyZSBtYXBwZWQgaW4gb24gYSBCQVIgaW4gUENJIHNwYWNlLiAqLwotbGF0ZV9pbml0Y2FsbChpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcyk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQ0ZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29tbW9uIGludGVycnVwdCBjb2RlIGZvciAzMiBhbmQgNjQgYml0CisgKi8KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCithdG9taWNfdCBpcnFfZXJyX2NvdW50OworCisvKgorICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCisgKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KKyAqLwordm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXByaW50ayhLRVJOX0VSUiAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCS8qCisJICogQ3VycmVudGx5IHVuZXhwZWN0ZWQgdmVjdG9ycyBoYXBwZW4gb25seSBvbiBTTVAgYW5kIEFQSUMuCisJICogV2UgX211c3RfIGFjayB0aGVzZSBiZWNhdXNlIGV2ZXJ5IGxvY2FsIEFQSUMgaGFzIG9ubHkgTgorCSAqIGlycSBzbG90cyBwZXIgcHJpb3JpdHkgbGV2ZWwsIGFuZCBhICdoYW5naW5nLCB1bmFja2VkJyBJUlEKKwkgKiBob2xkcyB1cCBhbiBpcnEgc2xvdCAtIGluIGV4Y2Vzc2l2ZSBjYXNlcyAod2hlbiBtdWx0aXBsZQorCSAqIHVuZXhwZWN0ZWQgdmVjdG9ycyBvY2N1cikgdGhhdCBtaWdodCBsb2NrIHVwIHRoZSBBUElDCisJICogY29tcGxldGVseS4KKwkgKiBCdXQgb25seSBhY2sgd2hlbiB0aGUgQVBJQyBpcyBlbmFibGVkIC1BSworCSAqLworCWlmIChjcHVfaGFzX2FwaWMpCisJCWFja19BUElDX2lycSgpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBpcnFfc3RhdHMoeCkJCSgmcGVyX2NwdShpcnFfc3RhdCwgeCkpCisjZWxzZQorIyBkZWZpbmUgaXJxX3N0YXRzKHgpCQljcHVfcGRhKHgpCisjZW5kaWYKKy8qCisgKiAvcHJvYy9pbnRlcnJ1cHRzIHByaW50aW5nOgorICovCitzdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnApCit7CisJaW50IGo7CisKKwlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPl9fbm1pX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfdGltZXJfaXJxcyk7CisJc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwlzZXFfcHJpbnRmKHAsICJSRVM6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9jYWxsX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7CisJc2VxX3ByaW50ZihwLCAiVExCOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGxiX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTUNFCisJc2VxX3ByaW50ZihwLCAiVFJNOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7CisJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOworIyBpZmRlZiBDT05GSUdfWDg2XzY0CisJc2VxX3ByaW50ZihwLCAiVEhSOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7CisjZW5kaWYKKwlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CisjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCisJc2VxX3ByaW50ZihwLCAiTUlTOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCkpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFueV9jb3VudCA9IDA7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlpZiAoaSA+IG5yX2lycXMpCisJCXJldHVybiAwOworCisJaWYgKGkgPT0gbnJfaXJxcykKKwkJcmV0dXJuIHNob3dfb3RoZXJfaW50ZXJydXB0cyhwKTsKKworCS8qIHByaW50IGhlYWRlciAqLworCWlmIChpID09IDApIHsKKwkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsIGopOworCQlzZXFfcHV0YyhwLCAnXG4nKTsKKwl9CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCWFueV9jb3VudCA9IGtzdGF0X2lycXMoaSk7CisjZWxzZQorCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJYW55X2NvdW50IHw9IGtzdGF0X2lycXNfY3B1KGksIGopOworI2VuZGlmCisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCWlmICghYWN0aW9uICYmICFhbnlfY291bnQpCisJCWdvdG8gb3V0OworCisJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CisjZWxzZQorCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CisjZW5kaWYKKwlzZXFfcHJpbnRmKHAsICIgJThzIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CisJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBkZXNjLT5uYW1lKTsKKworCWlmIChhY3Rpb24pIHsKKwkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CisJCXdoaWxlICgoYWN0aW9uID0gYWN0aW9uLT5uZXh0KSAhPSBOVUxMKQorCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CisJfQorCisJc2VxX3B1dGMocCwgJ1xuJyk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogL3Byb2Mvc3RhdCBoZWxwZXJzCisgKi8KK3U2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXU2NCBzdW0gPSBpcnFfc3RhdHMoY3B1KS0+X19ubWlfY291bnQ7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmFwaWNfdGltZXJfaXJxczsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9yZXNjaGVkX2NvdW50OworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX2NhbGxfY291bnQ7CisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfdGxiX2NvdW50OworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV90aGVybWFsX2NvdW50OworIyBpZmRlZiBDT05GSUdfWDg2XzY0CisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfdGhyZXNob2xkX2NvdW50OworI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9zcHVyaW91c19jb3VudDsKKyNlbmRpZgorCXJldHVybiBzdW07Cit9CisKK3U2NCBhcmNoX2lycV9zdGF0KHZvaWQpCit7CisJdTY0IHN1bSA9IGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCXN1bSArPSBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCk7CisjZW5kaWYKKwlyZXR1cm4gc3VtOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCmluZGV4IGI3MWUwMmQuLmE1MTM4MjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKQEAgLTI1LDI5ICsyNSw2IEBACiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHRfcmVncyAqLCBpcnFfcmVncyk7CiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woaXJxX3JlZ3MpOwogCi0vKgotICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCi0gKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KLSAqLwotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50ayhLRVJOX0VSUiAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKLQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCS8qCi0JICogQ3VycmVudGx5IHVuZXhwZWN0ZWQgdmVjdG9ycyBoYXBwZW4gb25seSBvbiBTTVAgYW5kIEFQSUMuCi0JICogV2UgX211c3RfIGFjayB0aGVzZSBiZWNhdXNlIGV2ZXJ5IGxvY2FsIEFQSUMgaGFzIG9ubHkgTgotCSAqIGlycSBzbG90cyBwZXIgcHJpb3JpdHkgbGV2ZWwsIGFuZCBhICdoYW5naW5nLCB1bmFja2VkJyBJUlEKLQkgKiBob2xkcyB1cCBhbiBpcnEgc2xvdCAtIGluIGV4Y2Vzc2l2ZSBjYXNlcyAod2hlbiBtdWx0aXBsZQotCSAqIHVuZXhwZWN0ZWQgdmVjdG9ycyBvY2N1cikgdGhhdCBtaWdodCBsb2NrIHVwIHRoZSBBUElDCi0JICogY29tcGxldGVseS4KLQkgKiBCdXQgb25seSBhY2sgd2hlbiB0aGUgQVBJQyBpcyBlbmFibGVkIC1BSwotCSAqLwotCWlmIChjcHVfaGFzX2FwaWMpCi0JCWFja19BUElDX2lycSgpOwotI2VuZGlmCi19Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwogLyogRGVidWdnaW5nIGNoZWNrIGZvciBzdGFjayBvdmVyZmxvdzogaXMgdGhlcmUgbGVzcyB0aGFuIDFLQiBmcmVlPyAqLwogc3RhdGljIGludCBjaGVja19zdGFja19vdmVyZmxvdyh2b2lkKQpAQCAtMjIzLDIwICsyMDAsMjUgQEAKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7CiAJLyogaGlnaCBiaXQgdXNlZCBpbiByZXRfZnJvbV8gY29kZSAqLwotCWludCBvdmVyZmxvdywgaXJxID0gfnJlZ3MtPm9yaWdfYXg7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaW50IG92ZXJmbG93OworCXVuc2lnbmVkIHZlY3RvciA9IH5yZWdzLT5vcmlnX2F4OworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBpcnE7CiAKLQlpZiAodW5saWtlbHkoKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFTKSkgewotCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IGNhbm5vdCBoYW5kbGUgSVJRICVkXG4iLAotCQkJCQlfX2Z1bmNfXywgaXJxKTsKLQkJQlVHKCk7Ci0JfQogCiAJb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAJaXJxX2VudGVyKCk7CisJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwogCiAJb3ZlcmZsb3cgPSBjaGVja19zdGFja19vdmVyZmxvdygpOwogCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkgeworCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IGNhbm5vdCBoYW5kbGUgSVJRICVkIHZlY3RvciAlI3ggY3B1ICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaXJxLCB2ZWN0b3IsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCUJVRygpOworCX0KKwogCWlmICghZXhlY3V0ZV9vbl9pcnFfc3RhY2sob3ZlcmZsb3csIGRlc2MsIGlycSkpIHsKIAkJaWYgKHVubGlrZWx5KG92ZXJmbG93KSkKIAkJCXByaW50X3N0YWNrX292ZXJmbG93KCk7CkBAIC0yNDgsMTQ2ICsyMzAsNiBAQAogCXJldHVybiAxOwogfQogCi0vKgotICogSW50ZXJydXB0IHN0YXRpc3RpY3M6Ci0gKi8KLQotYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKLQotLyoKLSAqIC9wcm9jL2ludGVycnVwdHMgcHJpbnRpbmc6Ci0gKi8KLQotaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCi17Ci0JaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOwotCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChpID09IDApIHsKLQkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsaik7Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotCX0KLQotCWlmIChpIDwgTlJfSVJRUykgewotCQl1bnNpZ25lZCBhbnlfY291bnQgPSAwOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQkJYW55X2NvdW50ID0ga3N0YXRfaXJxcyhpKTsKLSNlbHNlCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCWFueV9jb3VudCB8PSBrc3RhdF9jcHUoaikuaXJxc1tpXTsKLSNlbmRpZgotCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247Ci0JCWlmICghYWN0aW9uICYmICFhbnlfY291bnQpCi0JCQlnb3RvIHNraXA7Ci0JCXNlcV9wcmludGYocCwgIiUzZDogIixpKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2Vsc2UKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7Ci0jZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICU4cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwotCQlzZXFfcHJpbnRmKHAsICItJS04cyIsIGlycV9kZXNjW2ldLm5hbWUpOwotCi0JCWlmIChhY3Rpb24pIHsKLQkJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQkJd2hpbGUgKChhY3Rpb24gPSBhY3Rpb24tPm5leHQpICE9IE5VTEwpCi0JCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCX0KLQotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLXNraXA6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgewotCQlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIG5taV9jb3VudChqKSk7Ci0JCXNlcV9wcmludGYocCwgIiAgTm9uLW1hc2thYmxlIGludGVycnVwdHNcbiIpOwotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCQlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5hcGljX3RpbWVyX2lycXMpOwotCQlzZXFfcHJpbnRmKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNUAotCQlzZXFfcHJpbnRmKHAsICJSRVM6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfcmVzY2hlZF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgUmVzY2hlZHVsaW5nIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfY2FsbF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgRnVuY3Rpb24gY2FsbCBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiVExCOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCXBlcl9jcHUoaXJxX3N0YXQsaikuaXJxX3RsYl9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgVExCIHNob290ZG93bnNcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQkJc2VxX3ByaW50ZihwLCAiVFJNOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCXBlcl9jcHUoaXJxX3N0YXQsaikuaXJxX3RoZXJtYWxfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFRoZXJtYWwgZXZlbnQgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQkJc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCXBlcl9jcHUoaXJxX3N0YXQsaikuaXJxX3NwdXJpb3VzX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKLSNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCi0JCXNlcV9wcmludGYocCwgIk1JUzogJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9taXNfY291bnQpKTsKLSNlbmRpZgotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIC9wcm9jL3N0YXQgaGVscGVycwotICovCi11NjQgYXJjaF9pcnFfc3RhdF9jcHUodW5zaWduZWQgaW50IGNwdSkKLXsKLQl1NjQgc3VtID0gbm1pX2NvdW50KGNwdSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5hcGljX3RpbWVyX2lycXM7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0Jc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuaXJxX3Jlc2NoZWRfY291bnQ7Ci0Jc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuaXJxX2NhbGxfY291bnQ7Ci0Jc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuaXJxX3RsYl9jb3VudDsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTUNFCi0Jc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuaXJxX3RoZXJtYWxfY291bnQ7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfc3B1cmlvdXNfY291bnQ7Ci0jZW5kaWYKLQlyZXR1cm4gc3VtOwotfQotCi11NjQgYXJjaF9pcnFfc3RhdCh2b2lkKQotewotCXU2NCBzdW0gPSBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQlzdW0gKz0gYXRvbWljX3JlYWQoJmlycV9taXNfY291bnQpOwotI2VuZGlmCi0JcmV0dXJuIHN1bTsKLX0KLQogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgogCkBAIC0zOTUsMjAgKzIzNywyMiBAQAogewogCXVuc2lnbmVkIGludCBpcnE7CiAJc3RhdGljIGludCB3YXJuZWQ7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgeworCWZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykgewogCQljcHVtYXNrX3QgbWFzazsKKwogCQlpZiAoaXJxID09IDIpCiAJCQljb250aW51ZTsKIAotCQljcHVzX2FuZChtYXNrLCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBtYXApOworCQljcHVzX2FuZChtYXNrLCBkZXNjLT5hZmZpbml0eSwgbWFwKTsKIAkJaWYgKGFueV9vbmxpbmVfY3B1KG1hc2spID09IE5SX0NQVVMpIHsKIAkJCXByaW50aygiQnJlYWtpbmcgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAkJCW1hc2sgPSBtYXA7CiAJCX0KLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KQotCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKLQkJZWxzZSBpZiAoaXJxX2Rlc2NbaXJxXS5hY3Rpb24gJiYgISh3YXJuZWQrKykpCisJCWlmIChkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCisJCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwkJZWxzZSBpZiAoZGVzYy0+YWN0aW9uICYmICEod2FybmVkKyspKQogCQkJcHJpbnRrKCJDYW5ub3Qgc2V0IGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKaW5kZXggZjA2NWZlOS4uNjBlYjg0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYwpAQCAtMTgsMjggKzE4LDYgQEAKICNpbmNsdWRlIDxhc20vaWRsZS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAotYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKLQotLyoKLSAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgotICogZWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWx2ZXMuCi0gKi8KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotCS8qCi0JICogQ3VycmVudGx5IHVuZXhwZWN0ZWQgdmVjdG9ycyBoYXBwZW4gb25seSBvbiBTTVAgYW5kIEFQSUMuCi0JICogV2UgX211c3RfIGFjayB0aGVzZSBiZWNhdXNlIGV2ZXJ5IGxvY2FsIEFQSUMgaGFzIG9ubHkgTgotCSAqIGlycSBzbG90cyBwZXIgcHJpb3JpdHkgbGV2ZWwsIGFuZCBhICdoYW5naW5nLCB1bmFja2VkJyBJUlEKLQkgKiBob2xkcyB1cCBhbiBpcnEgc2xvdCAtIGluIGV4Y2Vzc2l2ZSBjYXNlcyAod2hlbiBtdWx0aXBsZQotCSAqIHVuZXhwZWN0ZWQgdmVjdG9ycyBvY2N1cikgdGhhdCBtaWdodCBsb2NrIHVwIHRoZSBBUElDCi0JICogY29tcGxldGVseS4KLQkgKiBCdXQgZG9uJ3QgYWNrIHdoZW4gdGhlIEFQSUMgaXMgZGlzYWJsZWQuIC1BSwotCSAqLwotCWlmICghZGlzYWJsZV9hcGljKQotCQlhY2tfQVBJQ19pcnEoKTsKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XCiAvKgogICogUHJvYmFiaWxpc3RpYyBzdGFjayBvdmVyZmxvdyBjaGVjazoKQEAgLTY1LDEyMiArNDMsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBHZW5lcmljLCBjb250cm9sbGVyLWluZGVwZW5kZW50IGZ1bmN0aW9uczoKLSAqLwotCi1pbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKLXsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7Ci0Jc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGkgPT0gMCkgewotCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIixqKTsKLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfQotCi0JaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXVuc2lnbmVkIGFueV9jb3VudCA9IDA7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotCQlhbnlfY291bnQgPSBrc3RhdF9pcnFzKGkpOwotI2Vsc2UKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJYW55X2NvdW50IHw9IGtzdGF0X2NwdShqKS5pcnFzW2ldOwotI2VuZGlmCi0JCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKLQkJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKLQkJCWdvdG8gc2tpcDsKLQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKLSNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7Ci0JCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7Ci0KLQkJaWYgKGFjdGlvbikgewotCQkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCQl3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgIT0gTlVMTCkKLQkJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJfQotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLXNraXA6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgewotCQlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPl9fbm1pX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIkxPQzogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+YXBpY190aW1lcl9pcnFzKTsKLQkJc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIlJFUzogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX3Jlc2NoZWRfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiQ0FMOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfY2FsbF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgRnVuY3Rpb24gY2FsbCBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiVExCOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfdGxiX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBUTEIgc2hvb3Rkb3duc1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCQlzZXFfcHJpbnRmKHAsICJUUk06ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV90aGVybWFsX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJUSFI6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV90aHJlc2hvbGRfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIlNQVTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX3NwdXJpb3VzX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiRVJSOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCkpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIC9wcm9jL3N0YXQgaGVscGVycwotICovCi11NjQgYXJjaF9pcnFfc3RhdF9jcHUodW5zaWduZWQgaW50IGNwdSkKLXsKLQl1NjQgc3VtID0gY3B1X3BkYShjcHUpLT5fX25taV9jb3VudDsKLQotCXN1bSArPSBjcHVfcGRhKGNwdSktPmFwaWNfdGltZXJfaXJxczsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+aXJxX3Jlc2NoZWRfY291bnQ7Ci0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+aXJxX2NhbGxfY291bnQ7Ci0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+aXJxX3RsYl9jb3VudDsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTUNFCi0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+aXJxX3RoZXJtYWxfY291bnQ7Ci0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+aXJxX3RocmVzaG9sZF9jb3VudDsKLSNlbmRpZgotCXN1bSArPSBjcHVfcGRhKGNwdSktPmlycV9zcHVyaW91c19jb3VudDsKLQlyZXR1cm4gc3VtOwotfQotCi11NjQgYXJjaF9pcnFfc3RhdCh2b2lkKQotewotCXJldHVybiBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCk7Ci19Ci0KLS8qCiAgKiBkb19JUlEgaGFuZGxlcyBhbGwgbm9ybWFsIGRldmljZSBJUlEncyAodGhlIHNwZWNpYWwKICAqIFNNUCBjcm9zcy1DUFUgaW50ZXJydXB0cyBoYXZlIHRoZWlyIG93biBzcGVjaWZpYwogICogaGFuZGxlcnMpLgpAQCAtMTg4LDYgKzUwLDcgQEAKIGFzbWxpbmthZ2UgdW5zaWduZWQgaW50IGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJLyogaGlnaCBiaXQgdXNlZCBpbiByZXRfZnJvbV8gY29kZSAgKi8KIAl1bnNpZ25lZCB2ZWN0b3IgPSB+cmVncy0+b3JpZ19heDsKQEAgLTIwMSw4ICs2NCw5IEBACiAJc3RhY2tfb3ZlcmZsb3dfY2hlY2socmVncyk7CiAjZW5kaWYKIAotCWlmIChsaWtlbHkoaXJxIDwgTlJfSVJRUykpCi0JCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWlmIChsaWtlbHkoZGVzYykpCisJCWdlbmVyaWNfaGFuZGxlX2lycV9kZXNjKGlycSwgZGVzYyk7CiAJZWxzZSB7CiAJCWlmICghZGlzYWJsZV9hcGljKQogCQkJYWNrX0FQSUNfaXJxKCk7CkBAIC0yMjMsOCArODcsOSBAQAogewogCXVuc2lnbmVkIGludCBpcnE7CiAJc3RhdGljIGludCB3YXJuZWQ7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgeworCWZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykgewogCQljcHVtYXNrX3QgbWFzazsKIAkJaW50IGJyZWFrX2FmZmluaXR5ID0gMDsKIAkJaW50IHNldF9hZmZpbml0eSA9IDE7CkBAIC0yMzMsMzIgKzk4LDMyIEBACiAJCQljb250aW51ZTsKIAogCQkvKiBpbnRlcnJ1cHQncyBhcmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCAqLwotCQlzcGluX2xvY2soJmlycV9kZXNjW2lycV0ubG9jayk7CisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAKIAkJaWYgKCFpcnFfaGFzX2FjdGlvbihpcnEpIHx8Ci0JCSAgICBjcHVzX2VxdWFsKGlycV9kZXNjW2lycV0uYWZmaW5pdHksIG1hcCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZpcnFfZGVzY1tpcnFdLmxvY2spOworCQkgICAgY3B1c19lcXVhbChkZXNjLT5hZmZpbml0eSwgbWFwKSkgeworCQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCQkJY29udGludWU7CiAJCX0KIAotCQljcHVzX2FuZChtYXNrLCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBtYXApOworCQljcHVzX2FuZChtYXNrLCBkZXNjLT5hZmZpbml0eSwgbWFwKTsKIAkJaWYgKGNwdXNfZW1wdHkobWFzaykpIHsKIAkJCWJyZWFrX2FmZmluaXR5ID0gMTsKIAkJCW1hc2sgPSBtYXA7CiAJCX0KIAotCQlpZiAoaXJxX2Rlc2NbaXJxXS5jaGlwLT5tYXNrKQotCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5tYXNrKGlycSk7CisJCWlmIChkZXNjLT5jaGlwLT5tYXNrKQorCQkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwogCi0JCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eSkKLQkJCWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CisJCWlmIChkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCisJCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKIAkJZWxzZSBpZiAoISh3YXJuZWQrKykpCiAJCQlzZXRfYWZmaW5pdHkgPSAwOwogCi0JCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPnVubWFzaykKLQkJCWlycV9kZXNjW2lycV0uY2hpcC0+dW5tYXNrKGlycSk7CisJCWlmIChkZXNjLT5jaGlwLT51bm1hc2spCisJCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKIAotCQlzcGluX3VubG9jaygmaXJxX2Rlc2NbaXJxXS5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCiAJCWlmIChicmVha19hZmZpbml0eSAmJiBzZXRfYWZmaW5pdHkpCiAJCQlwcmludGsoIkJyb2tlIGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwppbmRleCA5MjAwYTFlLi44NDVhYTk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKQEAgLTY5LDYgKzY5LDEzIEBACiAJICogMTYgb2xkLXN0eWxlIElOVEEtY3ljbGUgaW50ZXJydXB0czoKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkvKiBmaXJzdCB0aW1lIGNhbGwgdGhpcyBpcnFfZGVzYyAqLworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKKworCQlkZXNjLT5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CisJCWRlc2MtPmFjdGlvbiA9IE5VTEw7CisJCWRlc2MtPmRlcHRoID0gMTsKKwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpLCAmaTgyNTlBX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJYVCIpOwogCX0KQEAgLTgzLDYgKzkwLDI3IEBACiAJLm5hbWUgPSAiY2FzY2FkZSIsCiB9OwogCitERUZJTkVfUEVSX0NQVSh2ZWN0b3JfaXJxX3QsIHZlY3Rvcl9pcnEpID0geworCVswIC4uLiBJUlEwX1ZFQ1RPUiAtIDFdID0gLTEsCisJW0lSUTBfVkVDVE9SXSA9IDAsCisJW0lSUTFfVkVDVE9SXSA9IDEsCisJW0lSUTJfVkVDVE9SXSA9IDIsCisJW0lSUTNfVkVDVE9SXSA9IDMsCisJW0lSUTRfVkVDVE9SXSA9IDQsCisJW0lSUTVfVkVDVE9SXSA9IDUsCisJW0lSUTZfVkVDVE9SXSA9IDYsCisJW0lSUTdfVkVDVE9SXSA9IDcsCisJW0lSUThfVkVDVE9SXSA9IDgsCisJW0lSUTlfVkVDVE9SXSA9IDksCisJW0lSUTEwX1ZFQ1RPUl0gPSAxMCwKKwlbSVJRMTFfVkVDVE9SXSA9IDExLAorCVtJUlExMl9WRUNUT1JdID0gMTIsCisJW0lSUTEzX1ZFQ1RPUl0gPSAxMywKKwlbSVJRMTRfVkVDVE9SXSA9IDE0LAorCVtJUlExNV9WRUNUT1JdID0gMTUsCisJW0lSUTE1X1ZFQ1RPUiArIDEgLi4uIE5SX1ZFQ1RPUlMgLSAxXSA9IC0xCit9OworCiAvKiBPdmVycmlkZGVuIGluIHBhcmF2aXJ0LmMgKi8KIHZvaWQgaW5pdF9JUlEodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIm5hdGl2ZV9pbml0X0lSUSIpKSk7CiAKQEAgLTk4LDIyICsxMjYsMTQgQEAKIAkgKiB1cy4gKHNvbWUgb2YgdGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGFuZCBiZWNvbWUKIAkgKiAnc3BlY2lhbCcgU01QIGludGVycnVwdHMpCiAJICovCi0JZm9yIChpID0gMDsgaSA8IChOUl9WRUNUT1JTIC0gRklSU1RfRVhURVJOQUxfVkVDVE9SKTsgaSsrKSB7Ci0JCWludCB2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyBpOwotCQlpZiAoaSA+PSBOUl9JUlFTKQotCQkJYnJlYWs7CisJZm9yIChpID0gIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUjsgaSA8IE5SX1ZFQ1RPUlM7IGkrKykgewogCQkvKiBTWVNDQUxMX1ZFQ1RPUiB3YXMgcmVzZXJ2ZWQgaW4gdHJhcF9pbml0LiAqLwotCQlpZiAoIXRlc3RfYml0KHZlY3RvciwgdXNlZF92ZWN0b3JzKSkKLQkJCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaV0pOworCQlpZiAoaSAhPSBTWVNDQUxMX1ZFQ1RPUikKKwkJCXNldF9pbnRyX2dhdGUoaSwgaW50ZXJydXB0W2ldKTsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCS8qCi0JICogSVJRMCBtdXN0IGJlIGdpdmVuIGEgZml4ZWQgYXNzaWdubWVudCBhbmQgaW5pdGlhbGl6ZWQsCi0JICogYmVjYXVzZSBpdCdzIHVzZWQgYmVmb3JlIHRoZSBJTy1BUElDIGlzIHNldCB1cC4KLQkgKi8KLQlzZXRfaW50cl9nYXRlKEZJUlNUX0RFVklDRV9WRUNUT1IsIGludGVycnVwdFswXSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05GSUdfU01QKQogCS8qCiAJICogVGhlIHJlc2NoZWR1bGUgaW50ZXJydXB0IGlzIGEgQ1BVLXRvLUNQVSByZXNjaGVkdWxlLWhlbHBlcgogCSAqIElQSSwgZHJpdmVuIGJ5IHdha2V1cC4KQEAgLTEyOCw2ICsxNDgsOSBAQAogCiAJLyogSVBJIGZvciBzaW5nbGUgY2FsbCBmdW5jdGlvbiAqLwogCXNldF9pbnRyX2dhdGUoQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SLCBjYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQpOworCisJLyogTG93IHByaW9yaXR5IElQSSB0byBjbGVhbnVwIGFmdGVyIG1vdmluZyBhbiBpcnEgKi8KKwlzZXRfaW50cl9nYXRlKElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SLCBpcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKaW5kZXggNWI1YmU5ZC4uZmYwMjM1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCkBAIC0xNDIsMjMgKzE0MiwxOSBAQAogCWluaXRfYnNwX0FQSUMoKTsKIAlpbml0XzgyNTlBKDApOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7Ci0JCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkvKiBmaXJzdCB0aW1lIGNhbGwgdGhpcyBpcnFfZGVzYyAqLworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKIAotCQlpZiAoaSA8IDE2KSB7Ci0JCQkvKgotCQkJICogMTYgb2xkLXN0eWxlIElOVEEtY3ljbGUgaW50ZXJydXB0czoKLQkJCSAqLwotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmk4MjU5QV9jaGlwLAorCQlkZXNjLT5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CisJCWRlc2MtPmFjdGlvbiA9IE5VTEw7CisJCWRlc2MtPmRlcHRoID0gMTsKKworCQkvKgorCQkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgorCQkgKi8KKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmk4MjU5QV9jaGlwLAogCQkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgIlhUIik7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogJ2hpZ2gnIFBDSSBJUlFzIGZpbGxlZCBpbiBvbiBkZW1hbmQKLQkJCSAqLwotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZub19pcnFfY2hpcDsKLQkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggMTkyNjI0OC4uMTk3MjI2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCkBAIC05LDggKzksNiBAQAogI2luY2x1ZGUgPGFzbS9jYWxnYXJ5Lmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdS5oPgogCi1zdGF0aWMgaW50IGZvcmJpZF9kYWMgX19yZWFkX21vc3RseTsKLQogc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKIEVYUE9SVF9TWU1CT0woZG1hX29wcyk7CiAKQEAgLTI5MywxNyArMjkxLDMgQEAKIH0KIC8qIE11c3QgZXhlY3V0ZSBhZnRlciBQQ0kgc3Vic3lzdGVtICovCiBmc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7Ci0KLSNpZmRlZiBDT05GSUdfUENJCi0vKiBNYW55IFZJQSBicmlkZ2VzIHNlZW0gdG8gY29ycnVwdCBkYXRhIGZvciBEQUMuIERpc2FibGUgaXQgaGVyZSAqLwotCi1zdGF0aWMgX19kZXZpbml0IHZvaWQgdmlhX25vX2RhYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWlmICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAmJiBmb3JiaWRfZGFjID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBWSUEgUENJIGJyaWRnZSBkZXRlY3RlZC4iCi0JCQkJICJEaXNhYmxpbmcgREFDLlxuIik7Ci0JCWZvcmJpZF9kYWMgPSAxOwotCX0KLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfQU5ZX0lELCB2aWFfbm9fZGFjKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggY2Q4YzBlZC4uYzk1ODEyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNjMsNiArNjMsMTMgQEAKIHsKIAlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmlkbGVfbm90aWZpZXIsIG4pOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRsZV9ub3RpZmllcl9yZWdpc3Rlcik7CisKK3ZvaWQgaWRsZV9ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKK3sKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmaWRsZV9ub3RpZmllciwgbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGxlX25vdGlmaWVyX3VucmVnaXN0ZXIpOwogCiB2b2lkIGVudGVyX2lkbGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwppbmRleCBmNmExMWI5Li42NzQ2NWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCkBAIC0zNSw5ICszNSw2IEBACiAJaWYgKCEod29yZCAmICgxIDw8IDEzKSkpIHsKIAkJZGV2X2luZm8oJmRldi0+ZGV2LCAiSW50ZWwgRTc1MjAvNzMyMC83NTI1IGRldGVjdGVkOyAiCiAJCQkiZGlzYWJsaW5nIGlycSBiYWxhbmNpbmcgYW5kIGFmZmluaXR5XG4iKTsKLSNpZmRlZiBDT05GSUdfSVJRQkFMQU5DRQotCQlpcnFiYWxhbmNlX2Rpc2FibGUoIiIpOwotI2VuZGlmCiAJCW5vaXJxZGVidWdfc2V0dXAoIiIpOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJCW5vX2lycV9hZmZpbml0eSA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKaW5kZXggMGEyM2I1Ny4uZGQ2ZjJiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ydGMuYwpAQCAtNTIsNyArNTIsNyBAQAogCiAJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7CiAKIAkvKgogCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCkBAIC02OSw4ICs2OSw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwpAQCAtMTI0LDE2ICsxMjQsMTYgQEAKIAlXQVJOX09OX09OQ0UoUlRDX0FMV0FZU19CQ0QgJiYgKHN0YXR1cyAmIFJUQ19ETV9CSU5BUlkpKTsKIAogCWlmIChSVENfQUxXQVlTX0JDRCB8fCAhKHN0YXR1cyAmIFJUQ19ETV9CSU5BUlkpKSB7Ci0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAJfQogCiAJaWYgKGNlbnR1cnkpIHsKLQkJQkNEX1RPX0JJTihjZW50dXJ5KTsKKwkJY2VudHVyeSA9IGJjZDJiaW4oY2VudHVyeSk7CiAJCXllYXIgKz0gY2VudHVyeSAqIDEwMDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRXh0ZW5kZWQgQ01PUyB5ZWFyOiAlZFxuIiwgY2VudHVyeSAqIDEwMCk7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDIyNTU3ODIuLjBmYTY3OTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC01NjEsNyArNTYxLDEzIEBACiAKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQorLyoKKyAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5CisgKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UKKyAqIGlmZGVmIGl0IHVuZGVyIENPTkZJR19DUkFTSF9EVU1QIGFuZCBub3QgQ09ORklHX1BST0NfVk1DT1JFLgorICovCisKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogLyogZWxmY29yZWhkcj0gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBlbGYgY29yZSBoZWFkZXIKICAqIHN0b3JlZCBieSB0aGUgY3Jhc2hlZCBrZXJuZWwuIFRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkCiAgKiBieSBrZXhlYyBsb2FkZXIgdG8gdGhlIGNhcHR1cmUga2VybmVsLgpAQCAtMTA2Nyw2ICsxMDczLDcgQEAKICNlbmRpZgogCiAJcHJlZmlsbF9wb3NzaWJsZV9tYXAoKTsKKwogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpbml0X2NwdV90b19ub2RlKCk7CiAjZW5kaWYKQEAgLTEwNzQsNiArMTA4MSw5IEBACiAJaW5pdF9hcGljX21hcHBpbmdzKCk7CiAJaW9hcGljX2luaXRfbWFwcGluZ3MoKTsKIAorCS8qIG5lZWQgdG8gd2FpdCBmb3IgaW9fYXBpYyBpcyBtYXBwZWQgKi8KKwlucl9pcnFzID0gcHJvYmVfbnJfaXJxcygpOworCiAJa3ZtX2d1ZXN0X2luaXQoKTsKIAogCWU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwppbmRleCAwZTY3ZjcyLi5hZTBjMGQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCkBAIC0xNDAsMjUgKzE0MCwzMCBAQAogICovCiB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCiB7Ci0Jc3NpemVfdCBzaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOworCXNzaXplX3Qgc2l6ZSwgb2xkX3NpemU7CiAJY2hhciAqcHRyOwogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7CiAKIAkvKiBTZXR1cCBjcHVfcGRhIG1hcCAqLwogCXNldHVwX2NwdV9wZGFfbWFwKCk7CiAKIAkvKiBDb3B5IHNlY3Rpb24gZm9yIGVhY2ggQ1BVICh3ZSBkaXNjYXJkIHRoZSBvcmlnaW5hbCkgKi8KLQlzaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOworCW9sZF9zaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOworCWFsaWduID0gbWF4X3QodW5zaWduZWQgbG9uZywgUEFHRV9TSVpFLCBhbGlnbik7CisJc2l6ZSA9IHJvdW5kdXAob2xkX3NpemUsIGFsaWduKTsKIAlwcmludGsoS0VSTl9JTkZPICJQRVJDUFU6IEFsbG9jYXRpbmcgJXpkIGJ5dGVzIG9mIHBlciBjcHUgZGF0YVxuIiwKIAkJCSAgc2l6ZSk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCi0JCXB0ciA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoc2l6ZSk7CisJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwKKwkJCQkgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKICNlbHNlCiAJCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKIAkJaWYgKCFub2RlX29ubGluZShub2RlKSB8fCAhTk9ERV9EQVRBKG5vZGUpKSB7Ci0JCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzKHNpemUpOworCQkJcHRyID0gX19hbGxvY19ib290bWVtKHNpemUsIGFsaWduLAorCQkJCQkgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiY3B1ICVkIGhhcyBubyBub2RlICVkIG9yIG5vZGUtbG9jYWwgbWVtb3J5XG4iLAogCQkJCWNwdSwgbm9kZSk7CkBAIC0xNjcsNyArMTcyLDggQEAKIAkJCQkJIGNwdSwgX19wYShwdHIpKTsKIAkJfQogCQllbHNlIHsKLQkJCXB0ciA9IGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZShOT0RFX0RBVEEobm9kZSksIHNpemUpOworCQkJcHRyID0gX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBzaXplLCBhbGlnbiwKKwkJCQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogCQkJaWYgKHB0cikKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAicGVyIGNwdSBkYXRhIGZvciBjcHUlZCBvbiBub2RlJWQgYXQgJTAxNmx4XG4iLAogCQkJCQkgY3B1LCBub2RlLCBfX3BhKHB0cikpOwpAQCAtMTc1LDcgKzE4MSw2IEBACiAjZW5kaWYKIAkJcGVyX2NwdV9vZmZzZXQoY3B1KSA9IHB0ciAtIF9fcGVyX2NwdV9zdGFydDsKIAkJbWVtY3B5KHB0ciwgX19wZXJfY3B1X3N0YXJ0LCBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0KTsKLQogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICJOUl9DUFVTOiAlZCwgbnJfY3B1X2lkczogJWQsIG5yX25vZGVfaWRzICVkXG4iLApAQCAtMjEzLDcgKzIxOCw3IEBACiAJLyogYWxsb2NhdGUgdGhlIG1hcCAqLwogCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbG93KG5yX25vZGVfaWRzICogc2l6ZW9mKGNwdW1hc2tfdCkpOwogCi0JcHJfZGVidWcoS0VSTl9ERUJVRyAiTm9kZSB0byBjcHVtYXNrIG1hcCBhdCAlcCBmb3IgJWQgbm9kZXNcbiIsCisJcHJfZGVidWcoIk5vZGUgdG8gY3B1bWFzayBtYXAgYXQgJXAgZm9yICVkIG5vZGVzXG4iLAogCQkgbWFwLCBucl9ub2RlX2lkcyk7CiAKIAkvKiBub2RlX3RvX2NwdW1hc2soKSB3aWxsIG5vdyB3b3JrICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCA3ZWQ5ZTA3Li43YjEwOTMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTU0MywxMCArNTQzLDEwIEBACiAJaW50IHRpbWVvdXQ7CiAJdTMyIHN0YXR1czsKIAotCXByaW50ayhLRVJOX0lORk8gIklucXVpcmluZyByZW1vdGUgQVBJQyAjJWQuLi5cbiIsIGFwaWNpZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW5xdWlyaW5nIHJlbW90ZSBBUElDIDB4JXguLi5cbiIsIGFwaWNpZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdzKTsgaSsrKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDICMlZCAlczogIiwgYXBpY2lkLCBuYW1lc1tpXSk7CisJCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIDB4JXggJXM6ICIsIGFwaWNpZCwgbmFtZXNbaV0pOwogCiAJCS8qCiAJCSAqIFdhaXQgZm9yIGlkbGUuCkBAIC04NzQsNyArODc0LDcgQEAKIAlzdGFydF9pcCA9IHNldHVwX3RyYW1wb2xpbmUoKTsKIAogCS8qIFNvIHdlIHNlZSB3aGF0J3MgdXAgICAqLwotCXByaW50ayhLRVJOX0lORk8gIkJvb3RpbmcgcHJvY2Vzc29yICVkLyVkIGlwICVseFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJCb290aW5nIHByb2Nlc3NvciAlZCBBUElDIDB4JXggaXAgMHglbHhcbiIsCiAJCQkgIGNwdSwgYXBpY2lkLCBzdGFydF9pcCk7CiAKIAkvKgpAQCAtODkzLDkgKzg5MywxMSBAQAogCQlzbXBib290X3NldHVwX3dhcm1fcmVzZXRfdmVjdG9yKHN0YXJ0X2lwKTsKIAkJLyoKIAkJICogQmUgcGFyYW5vaWQgYWJvdXQgY2xlYXJpbmcgQVBJQyBlcnJvcnMuCi0JIAkqLwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY19yZWFkKEFQSUNfRVNSKTsKKwkJKi8KKwkJaWYgKEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKKwkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCQkJYXBpY19yZWFkKEFQSUNfRVNSKTsKKwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfNjQuYwppbmRleCAzZDFiZTRmLi5kZTg3ZDYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsXzY0LmMKQEAgLTgsMTIgKzgsMTIgQEAKICNkZWZpbmUgX19OT19TVFVCUwogCiAjZGVmaW5lIF9fU1lTQ0FMTChuciwgc3ltKSBleHRlcm4gYXNtbGlua2FnZSB2b2lkIHN5bSh2b2lkKSA7Ci0jdW5kZWYgQVNNX1g4Nl9fVU5JU1REXzY0X0gKKyN1bmRlZiBfQVNNX1g4Nl9VTklTVERfNjRfSAogI2luY2x1ZGUgPGFzbS91bmlzdGRfNjQuaD4KIAogI3VuZGVmIF9fU1lTQ0FMTAogI2RlZmluZSBfX1NZU0NBTEwobnIsIHN5bSkgW25yXSA9IHN5bSwKLSN1bmRlZiBBU01fWDg2X19VTklTVERfNjRfSAorI3VuZGVmIF9BU01fWDg2X1VOSVNURF82NF9ICiAKIHR5cGVkZWYgdm9pZCAoKnN5c19jYWxsX3B0cl90KSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCmluZGV4IDhiOGMwZDYuLjA0NDMxZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKQEAgLTYsNyArNiw3IEBACiAgKglUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvcgogICoJbGF0ZXIuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCmluZGV4IGUwNjI5NzQuLjA0ZDI0MmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCkBAIC05MzEsMTQgKzkzMSw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLWRvdHJhcGxpbmthZ2Ugdm9pZCBfX2twcm9iZXMgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcikKLXsKLQljb25kaXRpb25hbF9zdGkocmVncyk7Ci0JbWFjaGluZV9jaGVja192ZWN0b3IocmVncywgZXJyb3IpOwotfQotI2VuZGlmCi0KIGRvdHJhcGxpbmthZ2Ugdm9pZCBkb19pcmV0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CiAJc2lnaW5mb190IGluZm87CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlZjUyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIElSUSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgorCitzdGF0aWMgdm9pZCB1dl9ub29wKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXZfbm9vcF9yZXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXZfYWNrX2FwaWModW5zaWduZWQgaW50IGlycSkKK3sKKwlhY2tfQVBJQ19pcnEoKTsKK30KKworc3RydWN0IGlycV9jaGlwIHV2X2lycV9jaGlwID0geworCS5uYW1lCQk9ICJVVi1DT1JFIiwKKwkuc3RhcnR1cAk9IHV2X25vb3BfcmV0LAorCS5zaHV0ZG93bgk9IHV2X25vb3AsCisJLmVuYWJsZQkJPSB1dl9ub29wLAorCS5kaXNhYmxlCT0gdXZfbm9vcCwKKwkuYWNrCQk9IHV2X25vb3AsCisJLm1hc2sJCT0gdXZfbm9vcCwKKwkudW5tYXNrCQk9IHV2X25vb3AsCisJLmVvaQkJPSB1dl9hY2tfYXBpYywKKwkuZW5kCQk9IHV2X25vb3AsCit9OworCisvKgorICogU2V0IHVwIGEgbWFwcGluZyBvZiBhbiBhdmFpbGFibGUgaXJxIGFuZCB2ZWN0b3IsIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZAorICogTU1SIHRoYXQgZGVmaW5lcyB0aGUgTVNJIHRoYXQgaXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuCisgKiBpbnRlcnJ1cHQgaXMgcmFpc2VkLgorICovCitpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKmlycV9uYW1lLCBpbnQgY3B1LCBpbnQgbW1yX2JsYWRlLAorCQkgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWludCBpcnE7CisJaW50IHJldDsKKworCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwlpZiAoaXJxIDw9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBhcmNoX2VuYWJsZV91dl9pcnEoaXJxX25hbWUsIGlycSwgY3B1LCBtbXJfYmxhZGUsIG1tcl9vZmZzZXQpOworCWlmIChyZXQgIT0gaXJxKQorCQlkZXN0cm95X2lycShpcnEpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X3NldHVwX2lycSk7CisKKy8qCisgKiBUZWFyIGRvd24gYSBtYXBwaW5nIG9mIGFuIGlycSBhbmQgdmVjdG9yLCBhbmQgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiB0aGF0CisgKiBkZWZpbmVkIHRoZSBNU0kgdGhhdCB3YXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuIGludGVycnVwdAorICogd2FzIHJhaXNlZC4KKyAqCisgKiBTZXQgbW1yX2JsYWRlIGFuZCBtbXJfb2Zmc2V0IHRvIHdoYXQgd2FzIHBhc3NlZCBpbiBvbiB1dl9zZXR1cF9pcnEoKS4KKyAqLwordm9pZCB1dl90ZWFyZG93bl9pcnEodW5zaWduZWQgaW50IGlycSwgaW50IG1tcl9ibGFkZSwgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWFyY2hfZGlzYWJsZV91dl9pcnEobW1yX2JsYWRlLCBtbXJfb2Zmc2V0KTsKKwlkZXN0cm95X2lycShpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXZfdGVhcmRvd25faXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jIGIvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOWI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgc3VwcG9ydHMgdGhlIC9zeXMvZmlybXdhcmUvc2dpX3V2IGludGVyZmFjZXMgZm9yIFNHSSBVVi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIFJ1c3MgQW5kZXJzb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8YXNtL3V2L2Jpb3MuaD4KKworc3RydWN0IGtvYmplY3QgKnNnaV91dl9rb2JqOworCitzdGF0aWMgc3NpemVfdCBwYXJ0aXRpb25faWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgc25fcGFydGl0aW9uX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgY29oZXJlbmNlX2lkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGRcbiIsIHBhcnRpdGlvbl9jb2hlcmVuY2VfaWQoKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGFydGl0aW9uX2lkX2F0dHIgPQorCV9fQVRUUihwYXJ0aXRpb25faWQsIFNfSVJVR08sIHBhcnRpdGlvbl9pZF9zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjb2hlcmVuY2VfaWRfYXR0ciA9CisJX19BVFRSKGNvaGVyZW5jZV9pZCwgU19JUlVHTywgY29oZXJlbmNlX2lkX3Nob3csIE5VTEwpOworCisKK3N0YXRpYyBpbnQgX19pbml0IHNnaV91dl9zeXNmc19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlpZiAoIXNnaV91dl9rb2JqKQorCQlzZ2lfdXZfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInNnaV91diIsIGZpcm13YXJlX2tvYmopOworCWlmICghc2dpX3V2X2tvYmopIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAia29iamVjdF9jcmVhdGVfYW5kX2FkZCBzZ2lfdXYgZmFpbGVkIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHNnaV91dl9rb2JqLCAmcGFydGl0aW9uX2lkX2F0dHIuYXR0cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoc2dpX3V2X2tvYmosICZjb2hlcmVuY2VfaWRfYXR0ci5hdHRyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIGNvaGVyZW5jZV9pZCBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaV91dl9zeXNmc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCA2MWE5N2U2Li4wYzk2NjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC00ODQsMTAgKzQ4NCwxMSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2NvYmFsdF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKLQlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpKSkKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfihJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKTsKKwlpZiAoKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKSkpCisJCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpOwogCWVuYWJsZV9jb2JhbHRfaXJxKGlycSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTUwNiw5ICs1MDcsMTAgQEAKIHN0YXRpYyB2b2lkIGVuZF9jb2JhbHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvYmFsdF9sb2NrLCBmbGFncyk7Ci0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKIAkJZW5hYmxlX2NvYmFsdF9pcnEoaXJxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2JhbHRfbG9jaywgZmxhZ3MpOwogfQpAQCAtNjI2LDEyICs2MjgsMTIgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyByZWFsaXJxOworCWRlc2MgPSBpcnFfdG9fZGVzYyhyZWFsaXJxKTsKIAogCS8qCiAJICogaGFuZGxlIHRoaXMgJ3ZpcnR1YWwgaW50ZXJydXB0JyBhcyBhIENvYmFsdCBvbmUgbm93LgogCSAqLwotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbcmVhbGlycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUocmVhbGlycSwgZGVzYyk7CiAKIAlpZiAobGlrZWx5KGRlc2MtPmFjdGlvbiAhPSBOVUxMKSkKIAkJaGFuZGxlX0lSUV9ldmVudChyZWFsaXJxLCBkZXNjLT5hY3Rpb24pOwpAQCAtNjYyLDI3ICs2NjQsMjkgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBDT19JUlFfQVBJQzAgKyBDT19BUElDX0xBU1QgKyAxOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwotCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+YWN0aW9uID0gMDsKKwkJZGVzYy0+ZGVwdGggPSAxOwogCiAJCWlmIChpID09IDApIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA9PSBDT19JUlFfSURFMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CisJCQlkZXNjLT5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChpID09IENPX0lSUV9JREUxKSB7Ci0JCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWRlc2MtPmNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gQ09fSVJRXzgyNTkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmcGlpeDRfbWFzdGVyX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF9tYXN0ZXJfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA8IENPX0lSUV9BUElDMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKElTX0NPX0FQSUMoaSkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKaW5kZXggNjk1Mzg1OS4uMjU0ZWUwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKQEAgLTIzNSwxMSArMjM1LDE0IEBACiAKIHZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCS8qIERpc2FibGUgUElUOiBCSU9TZXMgc3RhcnQgUElUIENIMCB3aXRoIDE4LjJoeiBwZXJpZGljLiAqLwogCW91dGJfcGl0KDB4M2EsIFBJVF9NT0RFKTsgLyogYmluYXJ5LCBtb2RlIDUsIExTQi9NU0IsIGNoIDAgKi8KIAogCXZtaV90aW1lX2luaXRfY2xvY2tldmVudCgpOwogCXNldHVwX2lycSgwLCAmdm1pX2Nsb2NrX2FjdGlvbik7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZtaV9nZXRfdGltZXJfdmVjdG9yKCldID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3hzYXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwppbmRleCA5YWJhYzhhLi5iMTNhY2I3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgKiBUaGlzIHdpbGwgYmUgc2F2ZWQgd2hlbiBldmVyIHRoZSBGUCBhbmQgZXh0ZW5kZWQgc3RhdGUgY29udGV4dCBpcwogICogc2F2ZWQgb24gdGhlIHVzZXIgc3RhY2sgZHVyaW5nIHRoZSBzaWduYWwgaGFuZGxlciBkZWxpdmVyeSB0byB0aGUgdXNlci4KICAqLwotdm9pZCBwcmVwYXJlX2Z4X3N3X2ZyYW1lKHZvaWQpCitzdGF0aWMgdm9pZCBwcmVwYXJlX2Z4X3N3X2ZyYW1lKHZvaWQpCiB7CiAJaW50IHNpemVfZXh0ZW5kZWQgPSAoeHN0YXRlX3NpemUgLSBzaXplb2Yoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCkpICsKIAkJCSAgICAgRlBfWFNUQVRFX01BR0lDMl9TSVpFOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCA2MzQxMzJhLi4xMWM2NzI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjA0LDEwICsyMDQsMTAgQEAKIAlpZiAodmNwdTAgJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmdmNwdTAtPndxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ2Y3B1MC0+d3EpOwogCi0JcHQtPnRpbWVyLmV4cGlyZXMgPSBrdGltZV9hZGRfbnMocHQtPnRpbWVyLmV4cGlyZXMsIHB0LT5wZXJpb2QpOwotCXB0LT5zY2hlZHVsZWQgPSBrdGltZV90b19ucyhwdC0+dGltZXIuZXhwaXJlcyk7CisJaHJ0aW1lcl9hZGRfZXhwaXJlc19ucygmcHQtPnRpbWVyLCBwdC0+cGVyaW9kKTsKKwlwdC0+c2NoZWR1bGVkID0gaHJ0aW1lcl9nZXRfZXhwaXJlc19ucygmcHQtPnRpbWVyKTsKIAlpZiAocHQtPnBlcmlvZCkKLQkJcHMtPmNoYW5uZWxzWzBdLmNvdW50X2xvYWRfdGltZSA9IHB0LT50aW1lci5leHBpcmVzOworCQlwcy0+Y2hhbm5lbHNbMF0uY291bnRfbG9hZF90aW1lID0gaHJ0aW1lcl9nZXRfZXhwaXJlcygmcHQtPnRpbWVyKTsKIAogCXJldHVybiAocHQtPnBlcmlvZCA9PSAwID8gMCA6IDEpOwogfQpAQCAtMjU3LDcgKzI1Nyw3IEBACiAKIAl0aW1lciA9ICZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIudGltZXI7CiAJaWYgKGhydGltZXJfY2FuY2VsKHRpbWVyKSkKLQkJaHJ0aW1lcl9zdGFydCh0aW1lciwgdGltZXItPmV4cGlyZXMsIEhSVElNRVJfTU9ERV9BQlMpOworCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXModGltZXIsIEhSVElNRVJfTU9ERV9BQlMpOwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X3BpdF90aW1lcihzdHJ1Y3Qga3ZtX2twaXRfdGltZXIgKnB0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2xhcGljLmMgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwppbmRleCA2NTcxOTI2Li4wZmMzY2FiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYworKysgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwpAQCAtOTQ2LDkgKzk0Niw3IEBACiAKIAlpZiAoYXBpY19sdnR0X3BlcmlvZChhcGljKSkgewogCQlyZXN1bHQgPSAxOwotCQlhcGljLT50aW1lci5kZXYuZXhwaXJlcyA9IGt0aW1lX2FkZF9ucygKLQkJCQkJYXBpYy0+dGltZXIuZGV2LmV4cGlyZXMsCi0JCQkJCWFwaWMtPnRpbWVyLnBlcmlvZCk7CisJCWhydGltZXJfYWRkX2V4cGlyZXNfbnMoJmFwaWMtPnRpbWVyLmRldiwgYXBpYy0+dGltZXIucGVyaW9kKTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExMTcsNyArMTExNSw3IEBACiAKIAl0aW1lciA9ICZhcGljLT50aW1lci5kZXY7CiAJaWYgKGhydGltZXJfY2FuY2VsKHRpbWVyKSkKLQkJaHJ0aW1lcl9zdGFydCh0aW1lciwgdGltZXItPmV4cGlyZXMsIEhSVElNRVJfTU9ERV9BQlMpOworCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXModGltZXIsIEhSVElNRVJfTU9ERV9BQlMpOwogfQogCiB2b2lkIGt2bV9sYXBpY19zeW5jX2Zyb21fdmFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggNjVmMGI4YS4uNDhlZTRmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC01ODIsNyArNTgyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTEdVRVNUX0lSUVM7IGkrKykgewogCQlpbnQgdmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SICsgaTsKIAkJaWYgKHZlY3RvciAhPSBTWVNDQUxMX1ZFQ1RPUikgewotCQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpXSk7CisJCQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W3ZlY3Rvcl0pOwogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmxndWVzdF9pcnFfY29udHJvbGxlciwKIAkJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsCiAJCQkJCQkgICAgICAibGV2ZWwiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwppbmRleCBkZjM3ZmM5Li4zYzNiNDcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKKysrIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCkBAIC00MSw2ICs0MSwxMCBAQAogCSB7IH0KIH07CiAKK3N0YXRpYyBjcHVtYXNrX3QgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCit7CisgICAgICAgIHJldHVybiBjcHVtYXNrX29mX2NwdShjcHUpOworfQogCiBzdGF0aWMgaW50IHByb2JlX2JpZ3NtcCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jCmluZGV4IDY1MTNkNDEuLjI4NDU5Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYworKysgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKQEAgLTc1LDQgKzc1LDE4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGNwdW1hc2tfdCB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSkKK3sKKwkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJY3B1bWFza190IGRvbWFpbiA9IHsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJcmV0dXJuIGRvbWFpbjsKK30KKwogc3RydWN0IGdlbmFwaWMgX19pbml0ZGF0YV9yZWZvayBhcGljX2VzNzAwMCA9IEFQSUNfSU5JVCgiZXM3MDAwIiwgcHJvYmVfZXM3MDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9udW1hcS5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMKaW5kZXggOGNmNTgzOS4uNzFhMzA5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMKKysrIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMKQEAgLTM4LDQgKzM4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjcHVtYXNrX3QgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCWNwdW1hc2tfdCBkb21haW4gPSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworCXJldHVybiBkb21haW47Cit9CisKIHN0cnVjdCBnZW5hcGljIGFwaWNfbnVtYXEgPSBBUElDX0lOSVQoIk5VTUFRIiwgcHJvYmVfbnVtYXEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCmluZGV4IDZhZDZiNjcuLjYyNzJiNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYworKysgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKQEAgLTIzLDQgKzIzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjcHVtYXNrX3QgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCWNwdW1hc2tfdCBkb21haW4gPSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworCXJldHVybiBkb21haW47Cit9CisKIHN0cnVjdCBnZW5hcGljIGFwaWNfc3VtbWl0ID0gQVBJQ19JTklUKCJzdW1taXQiLCBwcm9iZV9zdW1taXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwppbmRleCAxOTlhNWY0Li4wZjZlOGE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAKICAqIHRoZSBpbnRlcnJ1cHQgb2ZmIHRvIGFub3RoZXIgQ1BVICovCiBzdGF0aWMgdm9pZCBiZWZvcmVfaGFuZGxlX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlfcmF3X3NwaW5fbG9jaygmdmljX2lycV9sb2NrKTsKQEAgLTE1MTgsNyArMTUxOCw3IEBACiAvKiBGaW5pc2ggdGhlIFZJQyBpbnRlcnJ1cHQ6IGJhc2ljYWxseSBtYXNrICovCiBzdGF0aWMgdm9pZCBhZnRlcl9oYW5kbGVfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpcnFfZGVzY190ICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCV9yYXdfc3Bpbl9sb2NrKCZ2aWNfaXJxX2xvY2spOwogCXsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwppbmRleCAxNjVjODcxLi5iY2MwNzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIAogCXJldHVybiAodm9pZCopIHZhZGRyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoa21hcF9hdG9taWNfcGZuKTsgLyogdGVtcG9yYXJpbHkgaW4gdXNlIGJ5IGk5MTUgR0VNIHVudGlsIHZtYXAgKi8KIAogc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtdGVzdC5jIGIvYXJjaC94ODYvbW0vbWVtdGVzdC5jCmluZGV4IDY3MmUxN2YuLjljYWIxOGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbXRlc3QuYworKysgYi9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKQEAgLTYxLDkgKzYxLDkgQEAKIAkJCQlsYXN0X2JhZCArPSBpbmNyOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoc3RhcnRfYmFkKSB7Ci0JCQkJCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDEwbHggYmFkIG1lbSBhZGRyICUwMTBseCAtICUwMTBseCByZXNlcnZlZCIsCisJCQkJCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDE2bHggYmFkIG1lbSBhZGRyICUwMTBseCAtICUwMTBseCByZXNlcnZlZCIsCiAJCQkJCQl2YWwsIHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyKTsKLQkJCQkJcmVzZXJ2ZV9lYXJseShzdGFydF9iYWQsIGxhc3RfYmFkIC0gc3RhcnRfYmFkLCAiQkFEIFJBTSIpOworCQkJCQlyZXNlcnZlX2Vhcmx5KHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyLCAiQkFEIFJBTSIpOwogCQkJCX0KIAkJCQlzdGFydF9iYWQgPSBsYXN0X2JhZCA9IHN0YXJ0X3BoeXNfYWxpZ25lZDsKIAkJCX0KQEAgLTcyLDkgKzcyLDggQEAKIAlpZiAoc3RhcnRfYmFkKSB7CiAJCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDE2bHggYmFkIG1lbSBhZGRyICUwMTBseCAtICUwMTBseCByZXNlcnZlZCIsCiAJCQl2YWwsIHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyKTsKLQkJcmVzZXJ2ZV9lYXJseShzdGFydF9iYWQsIGxhc3RfYmFkIC0gc3RhcnRfYmFkLCAiQkFEIFJBTSIpOworCQlyZXNlcnZlX2Vhcmx5KHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyLCAiQkFEIFJBTSIpOwogCX0KLQogfQogCiAvKiBkZWZhdWx0IGlzIGRpc2FibGVkICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jIGIvYXJjaC94ODYvbW0vbW1pby1tb2QuYwppbmRleCA2MzViNTBlLi4yYzRiYWE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jCisrKyBiL2FyY2gveDg2L21tL21taW8tbW9kLmMKQEAgLTU2LDEzICs1Niw2IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRyYXBfcmVhc29uLCBwZl9yZWFzb24pOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbWlvdHJhY2VfcncsIGNwdV90cmFjZSk7CiAKLSNpZiAwIC8qIFhYWDogbm8gd2F5IGdhdGhlciB0aGlzIGluZm8gYW55bW9yZSAqLwotLyogQWNjZXNzIHRvIHRoaXMgaXMgbm90IHBlci1jcHUuICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGRyb3BwZWQpOwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptYXJrZXJfZmlsZTsKLQogc3RhdGljIERFRklORV9NVVRFWChtbWlvdHJhY2VfbXV0ZXgpOwogc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFjZV9sb2NrKTsKIHN0YXRpYyBhdG9taWNfdCBtbWlvdHJhY2VfZW5hYmxlZDsKQEAgLTc1LDcgKzY4LDcgQEAKICAqICAgYW5kIHRyYWNlX2xvY2suCiAgKiAtIFJvdXRpbmVzIGRlcGVuZGluZyBvbiBpc19lbmFibGVkKCkgbXVzdCB0YWtlIHRyYWNlX2xvY2suCiAgKiAtIHRyYWNlX2xpc3QgdXNlcnMgbXVzdCBob2xkIHRyYWNlX2xvY2suCi0gKiAtIGlzX2VuYWJsZWQoKSBndWFyYW50ZWVzIHRoYXQgbW1pb190cmFjZV9yZWNvcmQgaXMgYWxsb3dlZC4KKyAqIC0gaXNfZW5hYmxlZCgpIGd1YXJhbnRlZXMgdGhhdCBtbWlvX3RyYWNlX3tydyxtYXBwaW5nfSBhcmUgYWxsb3dlZC4KICAqIC0gcHJlL3Bvc3QgY2FsbGJhY2tzIGFzc3VtZSB0aGUgZWZmZWN0IG9mIGlzX2VuYWJsZWQoKSBiZWluZyB0cnVlLgogICovCiAKQEAgLTk3LDQ0ICs5MCw2IEBACiAJcmV0dXJuIGF0b21pY19yZWFkKCZtbWlvdHJhY2VfZW5hYmxlZCk7CiB9CiAKLSNpZiAwIC8qIFhYWDogbmVlZHMgcmV3cml0ZSAqLwotLyoKLSAqIFdyaXRlIGNhbGxiYWNrIGZvciB0aGUgZGVidWdmcyBlbnRyeToKLSAqIFJlYWQgYSBtYXJrZXIgYW5kIHdyaXRlIGl0IHRvIHRoZSBtbWlvIHRyYWNlIGxvZwotICovCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9tYXJrZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyICpldmVudCA9IE5VTEw7Ci0Jc3RydWN0IG1tX2lvX2hlYWRlciAqaGVhZHA7Ci0Jc3NpemVfdCBsZW4gPSAoY291bnQgPiA2NTUzNSkgPyA2NTUzNSA6IGNvdW50OwotCi0JZXZlbnQgPSBremFsbG9jKHNpemVvZigqaGVhZHApICsgbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWhlYWRwID0gKHN0cnVjdCBtbV9pb19oZWFkZXIgKilldmVudDsKLQloZWFkcC0+dHlwZSA9IE1NSU9fTUFHSUMgfCAoTU1JT19NQVJLRVIgPDwgTU1JT19PUENPREVfU0hJRlQpOwotCWhlYWRwLT5kYXRhX2xlbiA9IGxlbjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihldmVudCArIHNpemVvZigqaGVhZHApLCBidWZmZXIsIGxlbikpIHsKLQkJa2ZyZWUoZXZlbnQpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZ0cmFjZV9sb2NrKTsKLSNpZiAwIC8qIFhYWDogY29udmVydCB0aGlzIHRvIHVzZSB0cmFjaW5nICovCi0JaWYgKGlzX2VuYWJsZWQoKSkKLQkJcmVsYXlfd3JpdGUoY2hhbiwgZXZlbnQsIHNpemVvZigqaGVhZHApICsgbGVuKTsKLQllbHNlCi0jZW5kaWYKLQkJbGVuID0gLUVJTlZBTDsKLQlzcGluX3VubG9ja19pcnEoJnRyYWNlX2xvY2spOwotCWtmcmVlKGV2ZW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHByaW50X3B0ZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJdW5zaWduZWQgaW50IGxldmVsOwpAQCAtMzA3LDggKzI2MiwxMCBAQAogCW1hcC5tYXBfaWQgPSB0cmFjZS0+aWQ7CiAKIAlzcGluX2xvY2tfaXJxKCZ0cmFjZV9sb2NrKTsKLQlpZiAoIWlzX2VuYWJsZWQoKSkKKwlpZiAoIWlzX2VuYWJsZWQoKSkgeworCQlrZnJlZSh0cmFjZSk7CiAJCWdvdG8gbm90X2VuYWJsZWQ7CisJfQogCiAJbW1pb190cmFjZV9tYXBwaW5nKCZtYXApOwogCWxpc3RfYWRkX3RhaWwoJnRyYWNlLT5saXN0LCAmdHJhY2VfbGlzdCk7CkBAIC0zNzcsNiArMzM0LDIzIEBACiAJCWlvdW5tYXBfdHJhY2VfY29yZShhZGRyKTsKIH0KIAoraW50IG1taW90cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldCA9IDA7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cmFjZV9sb2NrLCBmbGFncyk7CisJaWYgKGlzX2VuYWJsZWQoKSkKKwkJcmV0ID0gbW1pb190cmFjZV9wcmludGsoZm10LCBhcmdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cmFjZV9sb2NrLCBmbGFncyk7CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobW1pb3RyYWNlX3ByaW50ayk7CisKIHN0YXRpYyB2b2lkIGNsZWFyX3RyYWNlX2xpc3Qodm9pZCkKIHsKIAlzdHJ1Y3QgcmVtYXBfdHJhY2UgKnRyYWNlOwpAQCAtNDYyLDI2ICs0MzYsMTIgQEAKIH0KICNlbmRpZgogCi0jaWYgMCAvKiBYWFg6IG91dCBvZiBvcmRlciAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19tYXJrZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLndyaXRlID0Jd3JpdGVfbWFya2VyCi19OwotI2VuZGlmCi0KIHZvaWQgZW5hYmxlX21taW90cmFjZSh2b2lkKQogewogCW11dGV4X2xvY2soJm1taW90cmFjZV9tdXRleCk7CiAJaWYgKGlzX2VuYWJsZWQoKSkKIAkJZ290byBvdXQ7CiAKLSNpZiAwIC8qIFhYWDogdHJhY2luZyBkb2VzIG5vdCBzdXBwb3J0IHRleHQgZW50cmllcyAqLwotCW1hcmtlcl9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgibWFya2VyIiwgMDY2MCwgZGlyLCBOVUxMLAotCQkJCQkJCQkmZm9wc19tYXJrZXIpOwotCWlmICghbWFya2VyX2ZpbGUpCi0JCXByX2VycihOQU1FICJtYXJrZXIgZmlsZSBjcmVhdGlvbiBmYWlsZWQuXG4iKTsKLSNlbmRpZgotCiAJaWYgKG5vbW1pb3RyYWNlKQogCQlwcl9pbmZvKE5BTUUgIk1NSU8gdHJhY2luZyBkaXNhYmxlZC5cbiIpOwogCWVudGVyX3VuaXByb2Nlc3NvcigpOwpAQCAtNTA2LDExICs0NjYsNiBAQAogCiAJY2xlYXJfdHJhY2VfbGlzdCgpOyAvKiBndWFyYW50ZWVzOiBubyBtb3JlIGttbWlvIGNhbGxiYWNrcyAqLwogCWxlYXZlX3VuaXByb2Nlc3NvcigpOwotCWlmIChtYXJrZXJfZmlsZSkgewotCQlkZWJ1Z2ZzX3JlbW92ZShtYXJrZXJfZmlsZSk7Ci0JCW1hcmtlcl9maWxlID0gTlVMTDsKLQl9Ci0KIAlwcl9pbmZvKE5BTUUgImRpc2FibGVkLlxuIik7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZtbWlvdHJhY2VfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKaW5kZXggYTllYzg5Yy4uZjFkYzFiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCkBAIC02NSwyMyArNjUsMjIgQEAKIAlkaXJlY3RfcGFnZXNfY291bnRbbGV2ZWwgLSAxXSArPSBQVFJTX1BFUl9QVEU7CiB9CiAKLWludCBhcmNoX3JlcG9ydF9tZW1pbmZvKGNoYXIgKnBhZ2UpCit2b2lkIGFyY2hfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBuID0gc3ByaW50ZihwYWdlLCAiRGlyZWN0TWFwNGs6ICAlOGx1IGtCXG4iLAorCXNlcV9wcmludGYobSwgIkRpcmVjdE1hcDRrOiAgJThsdSBrQlxuIiwKIAkJCWRpcmVjdF9wYWdlc19jb3VudFtQR19MRVZFTF80S10gPDwgMik7CiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQotCW4gKz0gc3ByaW50ZihwYWdlICsgbiwgIkRpcmVjdE1hcDJNOiAgJThsdSBrQlxuIiwKKwlzZXFfcHJpbnRmKG0sICJEaXJlY3RNYXAyTTogICU4bHUga0JcbiIsCiAJCQlkaXJlY3RfcGFnZXNfY291bnRbUEdfTEVWRUxfMk1dIDw8IDExKTsKICNlbHNlCi0JbiArPSBzcHJpbnRmKHBhZ2UgKyBuLCAiRGlyZWN0TWFwNE06ICAlOGx1IGtCXG4iLAorCXNlcV9wcmludGYobSwgIkRpcmVjdE1hcDRNOiAgJThsdSBrQlxuIiwKIAkJCWRpcmVjdF9wYWdlc19jb3VudFtQR19MRVZFTF8yTV0gPDwgMTIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmIChkaXJlY3RfZ2JwYWdlcykKLQkJbiArPSBzcHJpbnRmKHBhZ2UgKyBuLCAiRGlyZWN0TWFwMUc6ICAlOGx1IGtCXG4iLAorCQlzZXFfcHJpbnRmKG0sICJEaXJlY3RNYXAxRzogICU4bHUga0JcbiIsCiAJCQlkaXJlY3RfcGFnZXNfY291bnRbUEdfTEVWRUxfMUddIDw8IDIwKTsKICNlbmRpZgotCXJldHVybiBuOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX2NvdW50KGludCBsZXZlbCkgeyB9CkBAIC03OTIsNiArNzkxLDggQEAKIAkvKiBNdXN0IGF2b2lkIGFsaWFzaW5nIG1hcHBpbmdzIGluIHRoZSBoaWdobWVtIGNvZGUgKi8KIAlrbWFwX2ZsdXNoX3VudXNlZCgpOwogCisJdm1fdW5tYXBfYWxpYXNlcygpOworCiAJY3BhLnZhZGRyID0gYWRkcjsKIAljcGEubnVtcGFnZXMgPSBudW1wYWdlczsKIAljcGEubWFza19zZXQgPSBtYXNrX3NldDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BmX2luLmMgYi9hcmNoL3g4Ni9tbS9wZl9pbi5jCmluZGV4IGVmYTE5MTEuLmRmM2Q1YzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BmX2luLmMKKysrIGIvYXJjaC94ODYvbW0vcGZfaW4uYwpAQCAtNzksMjUgKzc5LDM0IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG13NjRbXSA9IHsgMHg4OSwgMHg4QiB9OwogI2VuZGlmIC8qIG5vdCBfX2kzODZfXyAqLwogCi1zdGF0aWMgaW50IHNraXBfcHJlZml4KHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCAqc2hvcnRlZCwgaW50ICplbmxhcmdlZCwKLQkJCQkJCQkJaW50ICpyZXhyKQorc3RydWN0IHByZWZpeF9iaXRzIHsKKwl1bnNpZ25lZCBzaG9ydGVkOjE7CisJdW5zaWduZWQgZW5sYXJnZWQ6MTsKKwl1bnNpZ25lZCByZXhyOjE7CisJdW5zaWduZWQgcmV4OjE7Cit9OworCitzdGF0aWMgaW50IHNraXBfcHJlZml4KHVuc2lnbmVkIGNoYXIgKmFkZHIsIHN0cnVjdCBwcmVmaXhfYml0cyAqcHJmKQogewogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgKnAgPSBhZGRyOwotCSpzaG9ydGVkID0gMDsKLQkqZW5sYXJnZWQgPSAwOwotCSpyZXhyID0gMDsKKwlwcmYtPnNob3J0ZWQgPSAwOworCXByZi0+ZW5sYXJnZWQgPSAwOworCXByZi0+cmV4ciA9IDA7CisJcHJmLT5yZXggPSAwOwogCiByZXN0YXJ0OgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWZpeF9jb2Rlcyk7IGkrKykgewogCQlpZiAoKnAgPT0gcHJlZml4X2NvZGVzW2ldKSB7CiAJCQlpZiAoKnAgPT0gMHg2NikKLQkJCQkqc2hvcnRlZCA9IDE7CisJCQkJcHJmLT5zaG9ydGVkID0gMTsKICNpZmRlZiBfX2FtZDY0X18KIAkJCWlmICgoKnAgJiAweGY4KSA9PSAweDQ4KQotCQkJCSplbmxhcmdlZCA9IDE7CisJCQkJcHJmLT5lbmxhcmdlZCA9IDE7CiAJCQlpZiAoKCpwICYgMHhmNCkgPT0gMHg0NCkKLQkJCQkqcmV4ciA9IDE7CisJCQkJcHJmLT5yZXhyID0gMTsKKwkJCWlmICgoKnAgJiAweGYwKSA9PSAweDQwKQorCQkJCXByZi0+cmV4ID0gMTsKICNlbmRpZgogCQkJcCsrOwogCQkJZ290byByZXN0YXJ0OwpAQCAtMTM1LDEyICsxNDQsMTIgQEAKIHsKIAl1bnNpZ25lZCBpbnQgb3Bjb2RlOwogCXVuc2lnbmVkIGNoYXIgKnA7Ci0JaW50IHNob3J0ZWQsIGVubGFyZ2VkLCByZXhyOworCXN0cnVjdCBwcmVmaXhfYml0cyBwcmY7CiAJaW50IGk7CiAJZW51bSByZWFzb25fdHlwZSBydiA9IE9USEVSUzsKIAogCXAgPSAodW5zaWduZWQgY2hhciAqKWluc19hZGRyOwotCXAgKz0gc2tpcF9wcmVmaXgocCwgJnNob3J0ZWQsICZlbmxhcmdlZCwgJnJleHIpOworCXAgKz0gc2tpcF9wcmVmaXgocCwgJnByZik7CiAJcCArPSBnZXRfb3Bjb2RlKHAsICZvcGNvZGUpOwogCiAJQ0hFQ0tfT1BfVFlQRShvcGNvZGUsIHJlZ19yb3AsIFJFR19SRUFEKTsKQEAgLTE1NiwxMCArMTY1LDExIEBACiB7CiAJdW5zaWduZWQgaW50IG9wY29kZTsKIAl1bnNpZ25lZCBjaGFyICpwOwotCWludCBpLCBzaG9ydGVkLCBlbmxhcmdlZCwgcmV4cjsKKwlzdHJ1Y3QgcHJlZml4X2JpdHMgcHJmOworCWludCBpOwogCiAJcCA9ICh1bnNpZ25lZCBjaGFyICopaW5zX2FkZHI7Ci0JcCArPSBza2lwX3ByZWZpeChwLCAmc2hvcnRlZCwgJmVubGFyZ2VkLCAmcmV4cik7CisJcCArPSBza2lwX3ByZWZpeChwLCAmcHJmKTsKIAlwICs9IGdldF9vcGNvZGUocCwgJm9wY29kZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydzgpOyBpKyspCkBAIC0xNjgsNyArMTc4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ3MzIpOyBpKyspCiAJCWlmIChydzMyW2ldID09IG9wY29kZSkKLQkJCXJldHVybiAoc2hvcnRlZCA/IDIgOiAoZW5sYXJnZWQgPyA4IDogNCkpOworCQkJcmV0dXJuIHByZi5zaG9ydGVkID8gMiA6IChwcmYuZW5sYXJnZWQgPyA4IDogNCk7CiAKIAlwcmludGsoS0VSTl9FUlIgIm1taW90cmFjZTogVW5rbm93biBvcGNvZGUgMHglMDJ4XG4iLCBvcGNvZGUpOwogCXJldHVybiAwOwpAQCAtMTc4LDEwICsxODgsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgb3Bjb2RlOwogCXVuc2lnbmVkIGNoYXIgKnA7Ci0JaW50IGksIHNob3J0ZWQsIGVubGFyZ2VkLCByZXhyOworCXN0cnVjdCBwcmVmaXhfYml0cyBwcmY7CisJaW50IGk7CiAKIAlwID0gKHVuc2lnbmVkIGNoYXIgKilpbnNfYWRkcjsKLQlwICs9IHNraXBfcHJlZml4KHAsICZzaG9ydGVkLCAmZW5sYXJnZWQsICZyZXhyKTsKKwlwICs9IHNraXBfcHJlZml4KHAsICZwcmYpOwogCXAgKz0gZ2V0X29wY29kZShwLCAmb3Bjb2RlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG13OCk7IGkrKykKQEAgLTE5NCwxMSArMjA1LDExIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdzMyKTsgaSsrKQogCQlpZiAobXczMltpXSA9PSBvcGNvZGUpCi0JCQlyZXR1cm4gc2hvcnRlZCA/IDIgOiA0OworCQkJcmV0dXJuIHByZi5zaG9ydGVkID8gMiA6IDQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdzY0KTsgaSsrKQogCQlpZiAobXc2NFtpXSA9PSBvcGNvZGUpCi0JCQlyZXR1cm4gc2hvcnRlZCA/IDIgOiAoZW5sYXJnZWQgPyA4IDogNCk7CisJCQlyZXR1cm4gcHJmLnNob3J0ZWQgPyAyIDogKHByZi5lbmxhcmdlZCA/IDggOiA0KTsKIAogCXByaW50ayhLRVJOX0VSUiAibW1pb3RyYWNlOiBVbmtub3duIG9wY29kZSAweCUwMnhcbiIsIG9wY29kZSk7CiAJcmV0dXJuIDA7CkBAIC0yMzgsNyArMjQ5LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmdldF9yZWdfdzgoaW50IG5vLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpnZXRfcmVnX3c4KGludCBubywgaW50IHJleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgY2hhciAqcnYgPSBOVUxMOwogCkBAIC0yNTUsMTggKzI2Niw2IEBACiAJY2FzZSBhcmdfREw6CiAJCXJ2ID0gKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+ZHg7CiAJCWJyZWFrOwotCWNhc2UgYXJnX0FIOgotCQlydiA9IDEgKyAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5heDsKLQkJYnJlYWs7Ci0JY2FzZSBhcmdfQkg6Ci0JCXJ2ID0gMSArICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmJ4OwotCQlicmVhazsKLQljYXNlIGFyZ19DSDoKLQkJcnYgPSAxICsgKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+Y3g7Ci0JCWJyZWFrOwotCWNhc2UgYXJnX0RIOgotCQlydiA9IDEgKyAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5keDsKLQkJYnJlYWs7CiAjaWZkZWYgX19hbWQ2NF9fCiAJY2FzZSBhcmdfUjg6CiAJCXJ2ID0gKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+cjg7CkBAIC0yOTQsOSArMjkzLDU1IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJtbWlvdHJhY2U6IEVycm9yIHJlZyBubyMgJWRcbiIsIG5vKTsKIAkJYnJlYWs7CiAJfQorCisJaWYgKHJ2KQorCQlyZXR1cm4gcnY7CisKKwlpZiAocmV4KSB7CisJCS8qCisJCSAqIElmIFJFWCBwcmVmaXggZXhpc3RzLCBhY2Nlc3MgbG93IGJ5dGVzIG9mIFNJIGV0Yy4KKwkJICogaW5zdGVhZCBvZiBBSCBldGMuCisJCSAqLworCQlzd2l0Y2ggKG5vKSB7CisJCWNhc2UgYXJnX1NJOgorCQkJcnYgPSAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5zaTsKKwkJCWJyZWFrOworCQljYXNlIGFyZ19ESToKKwkJCXJ2ID0gKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+ZGk7CisJCQlicmVhazsKKwkJY2FzZSBhcmdfQlA6CisJCQlydiA9ICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmJwOworCQkJYnJlYWs7CisJCWNhc2UgYXJnX1NQOgorCQkJcnYgPSAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5zcDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKG5vKSB7CisJCWNhc2UgYXJnX0FIOgorCQkJcnYgPSAxICsgKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+YXg7CisJCQlicmVhazsKKwkJY2FzZSBhcmdfQkg6CisJCQlydiA9IDEgKyAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5ieDsKKwkJCWJyZWFrOworCQljYXNlIGFyZ19DSDoKKwkJCXJ2ID0gMSArICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmN4OworCQkJYnJlYWs7CisJCWNhc2UgYXJnX0RIOgorCQkJcnYgPSAxICsgKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+ZHg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFydikKKwkJcHJpbnRrKEtFUk5fRVJSICJtbWlvdHJhY2U6IEVycm9yIHJlZyBubyMgJWRcbiIsIG5vKTsKKwogCXJldHVybiBydjsKIH0KIApAQCAtMzY4LDExICs0MTMsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIG1vZF9ybTsKIAlpbnQgcmVnOwogCXVuc2lnbmVkIGNoYXIgKnA7Ci0JaW50IGksIHNob3J0ZWQsIGVubGFyZ2VkLCByZXhyOworCXN0cnVjdCBwcmVmaXhfYml0cyBwcmY7CisJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBydjsKIAogCXAgPSAodW5zaWduZWQgY2hhciAqKWluc19hZGRyOwotCXAgKz0gc2tpcF9wcmVmaXgocCwgJnNob3J0ZWQsICZlbmxhcmdlZCwgJnJleHIpOworCXAgKz0gc2tpcF9wcmVmaXgocCwgJnByZik7CiAJcCArPSBnZXRfb3Bjb2RlKHAsICZvcGNvZGUpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ19yb3ApOyBpKyspCiAJCWlmIChyZWdfcm9wW2ldID09IG9wY29kZSkgewpAQCAtMzkyLDEwICs0MzgsMTAgQEAKIAogZG9fd29yazoKIAltb2Rfcm0gPSAqcDsKLQlyZWcgPSAoKG1vZF9ybSA+PiAzKSAmIDB4NykgfCAocmV4ciA8PCAzKTsKKwlyZWcgPSAoKG1vZF9ybSA+PiAzKSAmIDB4NykgfCAocHJmLnJleHIgPDwgMyk7CiAJc3dpdGNoIChnZXRfaW5zX3JlZ193aWR0aChpbnNfYWRkcikpIHsKIAljYXNlIDE6Ci0JCXJldHVybiAqZ2V0X3JlZ193OChyZWcsIHJlZ3MpOworCQlyZXR1cm4gKmdldF9yZWdfdzgocmVnLCBwcmYucmV4LCByZWdzKTsKIAogCWNhc2UgMjoKIAkJcmV0dXJuICoodW5zaWduZWQgc2hvcnQgKilnZXRfcmVnX3czMihyZWcsIHJlZ3MpOwpAQCAtNDIyLDExICs0NjgsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIG1vZF9ybTsKIAl1bnNpZ25lZCBjaGFyIG1vZDsKIAl1bnNpZ25lZCBjaGFyICpwOwotCWludCBpLCBzaG9ydGVkLCBlbmxhcmdlZCwgcmV4cjsKKwlzdHJ1Y3QgcHJlZml4X2JpdHMgcHJmOworCWludCBpOwogCXVuc2lnbmVkIGxvbmcgcnY7CiAKIAlwID0gKHVuc2lnbmVkIGNoYXIgKilpbnNfYWRkcjsKLQlwICs9IHNraXBfcHJlZml4KHAsICZzaG9ydGVkLCAmZW5sYXJnZWQsICZyZXhyKTsKKwlwICs9IHNraXBfcHJlZml4KHAsICZwcmYpOwogCXAgKz0gZ2V0X29wY29kZShwLCAmb3Bjb2RlKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbW1fd29wKTsgaSsrKQogCQlpZiAoaW1tX3dvcFtpXSA9PSBvcGNvZGUpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYyBiL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYwppbmRleCBkODc3YzViLi5hYjUwYThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMKKysrIGIvYXJjaC94ODYvbW0vdGVzdG1taW90cmFjZS5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KIAogI2RlZmluZSBNT0RVTEVfTkFNRSAidGVzdG1taW90cmFjZSIKIApAQCAtMTMsNiArMTQsNyBAQAogc3RhdGljIHZvaWQgZG9fd3JpdGVfdGVzdCh2b2lkIF9faW9tZW0gKnApCiB7CiAJdW5zaWduZWQgaW50IGk7CisJbW1pb3RyYWNlX3ByaW50aygiV3JpdGUgdGVzdC5cbiIpOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKIAkJaW93cml0ZTgoaSwgcCArIGkpOwogCWZvciAoaSA9IDEwMjQ7IGkgPCAoNSAqIDEwMjQpOyBpICs9IDIpCkBAIC0yNCw2ICsyNiw3IEBACiBzdGF0aWMgdm9pZCBkb19yZWFkX3Rlc3Qodm9pZCBfX2lvbWVtICpwKQogewogCXVuc2lnbmVkIGludCBpOworCW1taW90cmFjZV9wcmludGsoIlJlYWQgdGVzdC5cbiIpOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKIAkJaW9yZWFkOChwICsgaSk7CiAJZm9yIChpID0gMTAyNDsgaSA8ICg1ICogMTAyNCk7IGkgKz0gMikKQEAgLTM5LDYgKzQyLDcgQEAKIAkJcHJfZXJyKE1PRFVMRV9OQU1FICI6IGNvdWxkIG5vdCBpb3JlbWFwLCBhYm9ydGluZy5cbiIpOwogCQlyZXR1cm47CiAJfQorCW1taW90cmFjZV9wcmludGsoImlvcmVtYXAgcmV0dXJuZWQgJXAuXG4iLCBwKTsKIAlkb193cml0ZV90ZXN0KHApOwogCWRvX3JlYWRfdGVzdChwKTsKIAlpb3VubWFwKHApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwppbmRleCBlMjA5NWNiLi4wNGRmNjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwpAQCAtNTIsOCArNTIsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmV0OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIHN0cnVjdCBmcmFtZV9oZWFkICoKLWR1bXBfdXNlcl9iYWNrdHJhY2Uoc3RydWN0IGZyYW1lX2hlYWQgKiBoZWFkKQorc3RhdGljIHN0cnVjdCBmcmFtZV9oZWFkICpkdW1wX3VzZXJfYmFja3RyYWNlKHN0cnVjdCBmcmFtZV9oZWFkICpoZWFkKQogewogCXN0cnVjdCBmcmFtZV9oZWFkIGJ1ZmhlYWRbMl07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwppbmRleCA1N2Y2YzkwLi4wMjJjZDQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCkBAIC0yOCw4NSArMjgsOSBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBvcF9tc3JzLCBjcHVfbXNycyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc2F2ZWRfbHZ0cGMpOwogCi1zdGF0aWMgaW50IG5taV9zdGFydCh2b2lkKTsKLXN0YXRpYyB2b2lkIG5taV9zdG9wKHZvaWQpOwotc3RhdGljIHZvaWQgbm1pX2NwdV9zdGFydCh2b2lkICpkdW1teSk7Ci1zdGF0aWMgdm9pZCBubWlfY3B1X3N0b3Aodm9pZCAqZHVtbXkpOwotCiAvKiAwID09IHJlZ2lzdGVyZWQgYnV0IG9mZiwgMSA9PSByZWdpc3RlcmVkIGFuZCBvbiAqLwogc3RhdGljIGludCBubWlfZW5hYmxlZCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgaW50IG9wcm9maWxlX2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAotCQkJCSB2b2lkICpkYXRhKQotewotCWludCBjcHUgPSAodW5zaWduZWQgbG9uZylkYXRhOwotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfRE9XTl9GQUlMRUQ6Ci0JY2FzZSBDUFVfT05MSU5FOgotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBubWlfY3B1X3N0YXJ0LCBOVUxMLCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBubWlfY3B1X3N0b3AsIE5VTEwsIDEpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9wcm9maWxlX2NwdV9uYiA9IHsKLQkubm90aWZpZXJfY2FsbCA9IG9wcm9maWxlX2NwdV9ub3RpZmllcgotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgbm1pX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCS8qIE9ubHkgb25lIENQVSBsZWZ0LCBqdXN0IHN0b3AgdGhhdCBvbmUgKi8KLQlpZiAobm1pX2VuYWJsZWQgPT0gMSkKLQkJbm1pX2NwdV9zdG9wKE5VTEwpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5taV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlpZiAobm1pX2VuYWJsZWQgPT0gMSkKLQkJbm1pX2NwdV9zdGFydChOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgb3Byb2ZpbGVfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gIm9wcm9maWxlIiwKLQkucmVzdW1lCQk9IG5taV9yZXN1bWUsCi0JLnN1c3BlbmQJPSBubWlfc3VzcGVuZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2Vfb3Byb2ZpbGUgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJm9wcm9maWxlX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9zeXNmcyh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZvcHJvZmlsZV9zeXNjbGFzcyk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9vcHJvZmlsZSk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBleGl0X3N5c2ZzKHZvaWQpCi17Ci0Jc3lzZGV2X3VucmVnaXN0ZXIoJmRldmljZV9vcHJvZmlsZSk7Ci0Jc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoJm9wcm9maWxlX3N5c2NsYXNzKTsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgaW5pdF9zeXNmcygpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZXhpdF9zeXNmcygpIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQogc3RhdGljIGludCBwcm9maWxlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewpAQCAtMzYxLDYgKzI4NSw3NyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCBvcHJvZmlsZV9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX09OTElORToKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgbm1pX2NwdV9zdGFydCwgTlVMTCwgMCk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgbm1pX2NwdV9zdG9wLCBOVUxMLCAxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvcHJvZmlsZV9jcHVfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBvcHJvZmlsZV9jcHVfbm90aWZpZXIKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IG5taV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwkvKiBPbmx5IG9uZSBDUFUgbGVmdCwganVzdCBzdG9wIHRoYXQgb25lICovCisJaWYgKG5taV9lbmFibGVkID09IDEpCisJCW5taV9jcHVfc3RvcChOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBubWlfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJaWYgKG5taV9lbmFibGVkID09IDEpCisJCW5taV9jcHVfc3RhcnQoTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG9wcm9maWxlX3N5c2NsYXNzID0geworCS5uYW1lCQk9ICJvcHJvZmlsZSIsCisJLnJlc3VtZQkJPSBubWlfcmVzdW1lLAorCS5zdXNwZW5kCT0gbm1pX3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX29wcm9maWxlID0geworCS5pZAk9IDAsCisJLmNscwk9ICZvcHJvZmlsZV9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfc3lzZnModm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3Rlcigmb3Byb2ZpbGVfc3lzY2xhc3MpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2Vfb3Byb2ZpbGUpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgZXhpdF9zeXNmcyh2b2lkKQoreworCXN5c2Rldl91bnJlZ2lzdGVyKCZkZXZpY2Vfb3Byb2ZpbGUpOworCXN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKCZvcHJvZmlsZV9zeXNjbGFzcyk7Cit9CisKKyNlbHNlCisjZGVmaW5lIGluaXRfc3lzZnMoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGV4aXRfc3lzZnMoKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBpbnQgcDRmb3JjZTsKIG1vZHVsZV9wYXJhbShwNGZvcmNlLCBpbnQsIDApOwogCkBAIC00MjAsOSArNDE1LDYgQEAKIAljYXNlIDE1OiBjYXNlIDIzOgogCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlXzIiOwogCQlicmVhazsKLQljYXNlIDI2OgotCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlXzIiOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBVbmtub3duICovCiAJCXJldHVybiAwOwpAQCAtNDMyLDYgKzQyNCwxNiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhcmNoX3BlcmZtb25faW5pdChjaGFyICoqY3B1X3R5cGUpCit7CisJaWYgKCFjcHVfaGFzX2FyY2hfcGVyZm1vbikKKwkJcmV0dXJuIDA7CisJKmNwdV90eXBlID0gImkzODYvYXJjaF9wZXJmbW9uIjsKKwltb2RlbCA9ICZvcF9hcmNoX3BlcmZtb25fc3BlYzsKKwlhcmNoX3BlcmZtb25fc2V0dXBfY291bnRlcnMoKTsKKwlyZXR1cm4gMTsKK30KKwogLyogaW4gb3JkZXIgdG8gZ2V0IHN5c2ZzIHJpZ2h0ICovCiBzdGF0aWMgaW50IHVzaW5nX25taTsKIApAQCAtNDM5LDcgKzQ0MSw3IEBACiB7CiAJX191OCB2ZW5kb3IgPSBib290X2NwdV9kYXRhLng4Nl92ZW5kb3I7CiAJX191OCBmYW1pbHkgPSBib290X2NwdV9kYXRhLng4NjsKLQljaGFyICpjcHVfdHlwZTsKKwljaGFyICpjcHVfdHlwZSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNwdV9oYXNfYXBpYykKQEAgLTQ3NywxOSArNDc5LDIwIEBACiAJCXN3aXRjaCAoZmFtaWx5KSB7CiAJCQkvKiBQZW50aXVtIElWICovCiAJCWNhc2UgMHhmOgotCQkJaWYgKCFwNF9pbml0KCZjcHVfdHlwZSkpCi0JCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlwNF9pbml0KCZjcHVfdHlwZSk7CiAJCQlicmVhazsKIAogCQkJLyogQSBQNi1jbGFzcyBwcm9jZXNzb3IgKi8KIAkJY2FzZSA2OgotCQkJaWYgKCFwcHJvX2luaXQoJmNwdV90eXBlKSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXBwcm9faW5pdCgmY3B1X3R5cGUpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CiAJCX0KKworCQlpZiAoIWNwdV90eXBlICYmICFhcmNoX3BlcmZtb25faW5pdCgmY3B1X3R5cGUpKQorCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX2NvdW50ZXIuaCBiL2FyY2gveDg2L29wcm9maWxlL29wX2NvdW50ZXIuaAppbmRleCAyODgwYjE1Li45MWI2YTExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmgKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCkBAIC02LDIyICs2LDIyIEBACiAgKgogICogQGF1dGhvciBKb2huIExldm9uCiAgKi8KLSAKKwogI2lmbmRlZiBPUF9DT1VOVEVSX0gKICNkZWZpbmUgT1BfQ09VTlRFUl9ICi0gCisKICNkZWZpbmUgT1BfTUFYX0NPVU5URVIgOAotIAorCiAvKiBQZXItcGVyZmN0ciBjb25maWd1cmF0aW9uIGFzIHNldCB2aWEKICAqIG9wcm9maWxlZnMuCiAgKi8KIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZW5hYmxlZDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBldmVudDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBrZXJuZWw7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXNlcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB1bml0X21hc2s7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGVuYWJsZWQ7CisJdW5zaWduZWQgbG9uZyBldmVudDsKKwl1bnNpZ25lZCBsb25nIGtlcm5lbDsKKwl1bnNpZ25lZCBsb25nIHVzZXI7CisJdW5zaWduZWQgbG9uZyB1bml0X21hc2s7CiB9OwogCiBleHRlcm4gc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnIGNvdW50ZXJfY29uZmlnW107CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IGQ5ZmFmNjAuLjUwOTUxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC02Nyw4ICs2Nyw5IEBACiAKIC8qIFRoZSBmdW5jdGlvbiBpbnRlcmZhY2UgbmVlZHMgdG8gYmUgZml4ZWQsIHNvbWV0aGluZyBsaWtlIGFkZAogICAgZGF0YS4gU2hvdWxkIHRoZW4gYmUgYWRkZWQgdG8gbGludXgvb3Byb2ZpbGUuaC4gKi8KLWV4dGVybiB2b2lkIG9wcm9maWxlX2FkZF9pYnNfc2FtcGxlKHN0cnVjdCBwdF9yZWdzICpjb25zdCByZWdzLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgKiBjb25zdCBpYnNfc2FtcGxlLCB1OCBjb2RlKTsKK2V4dGVybiB2b2lkCitvcHJvZmlsZV9hZGRfaWJzX3NhbXBsZShzdHJ1Y3QgcHRfcmVncyAqY29uc3QgcmVncywKKwkJCXVuc2lnbmVkIGludCAqY29uc3QgaWJzX3NhbXBsZSwgaW50IGlic19jb2RlKTsKIAogc3RydWN0IGlic19mZXRjaF9zYW1wbGUgewogCS8qIE1TUkMwMDFfMTAzMSBJQlMgRmV0Y2ggTGluZWFyIEFkZHJlc3MgUmVnaXN0ZXIgKi8KQEAgLTMwOSwxMiArMzEwLDE1IEBACiAjaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwogCWlmIChpYnNfYWxsb3dlZCAmJiBpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKIAkJbG93ID0gKGlic19jb25maWcubWF4X2NudF9mZXRjaCA+PiA0KSAmIDB4RkZGRjsKLQkJaGlnaCA9IElCU19GRVRDSF9ISUdIX0VOQUJMRTsKKwkJaGlnaCA9ICgoaWJzX2NvbmZpZy5yYW5kX2VuICYgMHgxKSA8PCAyNSkgLyogYml0IDU3ICovCisJCQkrIElCU19GRVRDSF9ISUdIX0VOQUJMRTsKIAkJd3Jtc3IoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCBsb3csIGhpZ2gpOwogCX0KIAogCWlmIChpYnNfYWxsb3dlZCAmJiBpYnNfY29uZmlnLm9wX2VuYWJsZWQpIHsKLQkJbG93ID0gKChpYnNfY29uZmlnLm1heF9jbnRfb3AgPj4gNCkgJiAweEZGRkYpICsgSUJTX09QX0xPV19FTkFCTEU7CisJCWxvdyA9ICgoaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQpICYgMHhGRkZGKQorCQkJKyAoKGlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMgJiAweDEpIDw8IDE5KSAvKiBiaXQgMTkgKi8KKwkJCSsgSUJTX09QX0xPV19FTkFCTEU7CiAJCWhpZ2ggPSAwOwogCQl3cm1zcihNU1JfQU1ENjRfSUJTT1BDVEwsIGxvdywgaGlnaCk7CiAJfQpAQCAtNDY4LDExICs0NzIsMTAgQEAKIAkJb25fZWFjaF9jcHUoYXBpY19jbGVhcl9pYnNfbm1pX3Blcl9jcHUsIE5VTEwsIDEpOwogfQogCi1zdGF0aWMgaW50ICgqY3JlYXRlX2FyY2hfZmlsZXMpKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCk7CitzdGF0aWMgaW50ICgqY3JlYXRlX2FyY2hfZmlsZXMpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QpOwogCi1zdGF0aWMgaW50IHNldHVwX2lic19maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGRlbnRyeSAqIHJvb3QpCitzdGF0aWMgaW50IHNldHVwX2lic19maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZGVudHJ5ICpyb290KQogewotCWNoYXIgYnVmWzEyXTsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXI7CiAJaW50IHJldCA9IDA7CiAKQEAgLTQ5NCwyMiArNDk3LDIyIEBACiAJaWJzX2NvbmZpZy5tYXhfY250X29wID0gMjUwMDAwOwogCWlic19jb25maWcub3BfZW5hYmxlZCA9IDA7CiAJaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyA9IDE7Ci0Jc25wcmludGYoYnVmLCAgc2l6ZW9mKGJ1ZiksICJpYnNfZmV0Y2giKTsKLQlkaXIgPSBvcHJvZmlsZWZzX21rZGlyKHNiLCByb290LCBidWYpOworCisJZGlyID0gb3Byb2ZpbGVmc19ta2RpcihzYiwgcm9vdCwgImlic19mZXRjaCIpOworCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJlbmFibGUiLAorCQkJCSZpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpOworCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJtYXhfY291bnQiLAorCQkJCSZpYnNfY29uZmlnLm1heF9jbnRfZmV0Y2gpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJyYW5kX2VuYWJsZSIsCiAJCQkJJmlic19jb25maWcucmFuZF9lbik7CisKKwlkaXIgPSBvcHJvZmlsZWZzX21rZGlyKHNiLCByb290LCAiaWJzX29wIik7CiAJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImVuYWJsZSIsCi0JCSZpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpOworCQkJCSZpYnNfY29uZmlnLm9wX2VuYWJsZWQpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJtYXhfY291bnQiLAotCQkmaWJzX2NvbmZpZy5tYXhfY250X2ZldGNoKTsKLQlzbnByaW50ZihidWYsICBzaXplb2YoYnVmKSwgImlic191b3BzIik7Ci0JZGlyID0gb3Byb2ZpbGVmc19ta2RpcihzYiwgcm9vdCwgYnVmKTsKLQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZW5hYmxlIiwKLQkJJmlic19jb25maWcub3BfZW5hYmxlZCk7Ci0Jb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgIm1heF9jb3VudCIsCi0JCSZpYnNfY29uZmlnLm1heF9jbnRfb3ApOworCQkJCSZpYnNfY29uZmlnLm1heF9jbnRfb3ApOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJkaXNwYXRjaGVkX29wcyIsCi0JCSZpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzKTsKKwkJCQkmaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzMCwxNCArNTMzLDE0IEBACiAjZW5kaWYKIAogc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX2FtZF9zcGVjID0gewotCS5pbml0ID0gb3BfYW1kX2luaXQsCi0JLmV4aXQgPSBvcF9hbWRfZXhpdCwKLQkubnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTLAotCS5udW1fY29udHJvbHMgPSBOVU1fQ09OVFJPTFMsCi0JLmZpbGxfaW5fYWRkcmVzc2VzID0gJm9wX2FtZF9maWxsX2luX2FkZHJlc3NlcywKLQkuc2V0dXBfY3RycyA9ICZvcF9hbWRfc2V0dXBfY3RycywKLQkuY2hlY2tfY3RycyA9ICZvcF9hbWRfY2hlY2tfY3RycywKLQkuc3RhcnQgPSAmb3BfYW1kX3N0YXJ0LAotCS5zdG9wID0gJm9wX2FtZF9zdG9wLAotCS5zaHV0ZG93biA9ICZvcF9hbWRfc2h1dGRvd24KKwkuaW5pdAkJCT0gb3BfYW1kX2luaXQsCisJLmV4aXQJCQk9IG9wX2FtZF9leGl0LAorCS5udW1fY291bnRlcnMJCT0gTlVNX0NPVU5URVJTLAorCS5udW1fY29udHJvbHMJCT0gTlVNX0NPTlRST0xTLAorCS5maWxsX2luX2FkZHJlc3Nlcwk9ICZvcF9hbWRfZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0cnMJCT0gJm9wX2FtZF9zZXR1cF9jdHJzLAorCS5jaGVja19jdHJzCQk9ICZvcF9hbWRfY2hlY2tfY3RycywKKwkuc3RhcnQJCQk9ICZvcF9hbWRfc3RhcnQsCisJLnN0b3AJCQk9ICZvcF9hbWRfc3RvcCwKKwkuc2h1dGRvd24JCT0gJm9wX2FtZF9zaHV0ZG93bgogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCmluZGV4IDQzYWM1YWYuLjRjNGE1MWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwpAQCAtNjk4LDI0ICs2OTgsMjQgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wNF9odDJfc3BlYyA9IHsKLQkubnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTX0hUMiwKLQkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTX0hUMiwKLQkuZmlsbF9pbl9hZGRyZXNzZXMgPSAmcDRfZmlsbF9pbl9hZGRyZXNzZXMsCi0JLnNldHVwX2N0cnMgPSAmcDRfc2V0dXBfY3RycywKLQkuY2hlY2tfY3RycyA9ICZwNF9jaGVja19jdHJzLAotCS5zdGFydCA9ICZwNF9zdGFydCwKLQkuc3RvcCA9ICZwNF9zdG9wLAotCS5zaHV0ZG93biA9ICZwNF9zaHV0ZG93bgorCS5udW1fY291bnRlcnMJCT0gTlVNX0NPVU5URVJTX0hUMiwKKwkubnVtX2NvbnRyb2xzCQk9IE5VTV9DT05UUk9MU19IVDIsCisJLmZpbGxfaW5fYWRkcmVzc2VzCT0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLAorCS5zZXR1cF9jdHJzCQk9ICZwNF9zZXR1cF9jdHJzLAorCS5jaGVja19jdHJzCQk9ICZwNF9jaGVja19jdHJzLAorCS5zdGFydAkJCT0gJnA0X3N0YXJ0LAorCS5zdG9wCQkJPSAmcDRfc3RvcCwKKwkuc2h1dGRvd24JCT0gJnA0X3NodXRkb3duCiB9OwogI2VuZGlmCiAKIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wNF9zcGVjID0gewotCS5udW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfTk9OX0hULAotCS5udW1fY29udHJvbHMgPSBOVU1fQ09OVFJPTFNfTk9OX0hULAotCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwNF9maWxsX2luX2FkZHJlc3NlcywKLQkuc2V0dXBfY3RycyA9ICZwNF9zZXR1cF9jdHJzLAotCS5jaGVja19jdHJzID0gJnA0X2NoZWNrX2N0cnMsCi0JLnN0YXJ0ID0gJnA0X3N0YXJ0LAotCS5zdG9wID0gJnA0X3N0b3AsCi0JLnNodXRkb3duID0gJnA0X3NodXRkb3duCisJLm51bV9jb3VudGVycwkJPSBOVU1fQ09VTlRFUlNfTk9OX0hULAorCS5udW1fY29udHJvbHMJCT0gTlVNX0NPTlRST0xTX05PTl9IVCwKKwkuZmlsbF9pbl9hZGRyZXNzZXMJPSAmcDRfZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0cnMJCT0gJnA0X3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMJCT0gJnA0X2NoZWNrX2N0cnMsCisJLnN0YXJ0CQkJPSAmcDRfc3RhcnQsCisJLnN0b3AJCQk9ICZwNF9zdG9wLAorCS5zaHV0ZG93bgkJPSAmcDRfc2h1dGRvd24KIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKaW5kZXggZWZmNDMxZi4uMDYyMGQ2ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwpAQCAtMSwzMiArMSwzNCBAQAogLyoKICAqIEBmaWxlIG9wX21vZGVsX3Bwcm8uaAotICogcGVudGl1bSBwcm8gLyBQNiBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0aW9ucworICogRmFtaWx5IDYgcGVyZm1vbiBhbmQgYXJjaGl0ZWN0dXJhbCBwZXJmbW9uIE1TUiBvcGVyYXRpb25zCiAgKgogICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCiAgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwogICoKICAqIEBhdXRob3IgSm9obiBMZXZvbgogICogQGF1dGhvciBQaGlsaXBwZSBFbGllCiAgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqIEBhdXRob3IgQW5kaSBLbGVlbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9pbnRlbF9hcmNoX3BlcmZtb24uaD4KIAogI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKIAotI2RlZmluZSBOVU1fQ09VTlRFUlMgMgotI2RlZmluZSBOVU1fQ09OVFJPTFMgMgorc3RhdGljIGludCBudW1fY291bnRlcnMgPSAyOworc3RhdGljIGludCBjb3VudGVyX3dpZHRoID0gMzI7CiAKICNkZWZpbmUgQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGMpIChtc3JzLT5jb3VudGVyc1soYyldLmFkZHIgPyAxIDogMCkKICNkZWZpbmUgQ1RSX1JFQUQobCwgaCwgbXNycywgYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgKGwpLCAoaCkpOyB9IHdoaWxlICgwKQotI2RlZmluZSBDVFJfMzJCSVRfV1JJVEUobCwgbXNycywgYykJXAotCWRvIHt3cm1zcihtc3JzLT5jb3VudGVyc1soYyldLmFkZHIsIC0odTMyKShsKSwgMCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIENUUl9PVkVSRkxPV0VEKG4pICghKChuKSAmICgxVTw8MzEpKSkKKyNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwoY291bnRlcl93aWR0aC0xKSkpKQogCiAjZGVmaW5lIENUUkxfSVNfUkVTRVJWRUQobXNycywgYykgKG1zcnMtPmNvbnRyb2xzWyhjKV0uYWRkciA/IDEgOiAwKQogI2RlZmluZSBDVFJMX1JFQUQobCwgaCwgbXNycywgYykgZG8ge3JkbXNyKChtc3JzLT5jb250cm9sc1soYyldLmFkZHIpLCAobCksIChoKSk7IH0gd2hpbGUgKDApCkBAIC00MCwyMCArNDIsMjAgQEAKICNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQogI2RlZmluZSBDVFJMX1NFVF9FVkVOVCh2YWwsIGUpICh2YWwgfD0gZSkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFsdWVbTlVNX0NPVU5URVJTXTsKK3N0YXRpYyB1NjQgKnJlc2V0X3ZhbHVlOwogCiBzdGF0aWMgdm9pZCBwcHJvX2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9wZXJmY3RyX25taShNU1JfUDZfUEVSRkNUUjAgKyBpKSkKIAkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSBNU1JfUDZfUEVSRkNUUjAgKyBpOwogCQllbHNlCiAJCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gMDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfZXZudHNlbF9ubWkoTVNSX1A2X0VWTlRTRUwwICsgaSkpCiAJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX1A2X0VWTlRTRUwwICsgaTsKIAkJZWxzZQpAQCAtNjcsOCArNjksMjIgQEAKIAl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOwogCWludCBpOwogCisJaWYgKCFyZXNldF92YWx1ZSkgeworCQlyZXNldF92YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkKSAqIG51bV9jb3VudGVycywKKwkJCQkJR0ZQX0FUT01JQyk7CisJCWlmICghcmVzZXRfdmFsdWUpCisJCQlyZXR1cm47CisJfQorCisJaWYgKGNwdV9oYXNfYXJjaF9wZXJmbW9uKSB7CisJCXVuaW9uIGNwdWlkMTBfZWF4IGVheDsKKwkJZWF4LmZ1bGwgPSBjcHVpZF9lYXgoMHhhKTsKKwkJaWYgKGNvdW50ZXJfd2lkdGggPCBlYXguc3BsaXQuYml0X3dpZHRoKQorCQkJY291bnRlcl93aWR0aCA9IGVheC5zcGxpdC5iaXRfd2lkdGg7CisJfQorCiAJLyogY2xlYXIgYWxsIGNvdW50ZXJzICovCi0JZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsraSkgeworCWZvciAoaSA9IDAgOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaWYgKHVubGlrZWx5KCFDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGkpKSkKIAkJCWNvbnRpbnVlOwogCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKQEAgLTc3LDE4ICs5MywxOCBAQAogCX0KIAogCS8qIGF2b2lkIGEgZmFsc2UgZGV0ZWN0aW9uIG9mIGN0ciBvdmVyZmxvd3MgaW4gTk1JIGhhbmRsZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaWYgKHVubGlrZWx5KCFDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpKQogCQkJY29udGludWU7Ci0JCUNUUl8zMkJJVF9XUklURSgxLCBtc3JzLCBpKTsKKwkJd3Jtc3JsKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIsIC0xTEwpOwogCX0KIAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaWYgKChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSAmJiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGkpKSkgewogCQkJcmVzZXRfdmFsdWVbaV0gPSBjb3VudGVyX2NvbmZpZ1tpXS5jb3VudDsKIAotCQkJQ1RSXzMyQklUX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBtc3JzLCBpKTsKKwkJCXdybXNybChtc3JzLT5jb3VudGVyc1tpXS5hZGRyLCAtcmVzZXRfdmFsdWVbaV0pOwogCiAJCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKIAkJCUNUUkxfQ0xFQVIobG93KTsKQEAgLTExMSwxMyArMTI3LDEzIEBACiAJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwlmb3IgKGkgPSAwIDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CiAJCWlmICghcmVzZXRfdmFsdWVbaV0pCiAJCQljb250aW51ZTsKIAkJQ1RSX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKIAkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgaSk7Ci0JCQlDVFJfMzJCSVRfV1JJVEUocmVzZXRfdmFsdWVbaV0sIG1zcnMsIGkpOworCQkJd3Jtc3JsKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIsIC1yZXNldF92YWx1ZVtpXSk7CiAJCX0KIAl9CiAKQEAgLTE0MSw3ICsxNTcsNyBAQAogCXVuc2lnbmVkIGludCBsb3csIGhpZ2g7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaWYgKHJlc2V0X3ZhbHVlW2ldKSB7CiAJCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKIAkJCUNUUkxfU0VUX0FDVElWRShsb3cpOwpAQCAtMTU2LDcgKzE3Miw3IEBACiAJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlpZiAoIXJlc2V0X3ZhbHVlW2ldKQogCQkJY29udGludWU7CiAJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwpAQCAtMTY5LDI0ICsxODUsNzAgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTIDsgKytpKSB7CisJZm9yIChpID0gMCA7IGkgPCBudW1fY291bnRlcnMgOyArK2kpIHsKIAkJaWYgKENUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkKIAkJCXJlbGVhc2VfcGVyZmN0cl9ubWkoTVNSX1A2X1BFUkZDVFIwICsgaSk7CiAJfQotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPTlRST0xTIDsgKytpKSB7CisJZm9yIChpID0gMCA7IGkgPCBudW1fY291bnRlcnMgOyArK2kpIHsKIAkJaWYgKENUUkxfSVNfUkVTRVJWRUQobXNycywgaSkpCiAJCQlyZWxlYXNlX2V2bnRzZWxfbm1pKE1TUl9QNl9FVk5UU0VMMCArIGkpOwogCX0KKwlpZiAocmVzZXRfdmFsdWUpIHsKKwkJa2ZyZWUocmVzZXRfdmFsdWUpOworCQlyZXNldF92YWx1ZSA9IE5VTEw7CisJfQogfQogCiAKLXN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWMgPSB7Ci0JLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKLQkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTLAotCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwcHJvX2ZpbGxfaW5fYWRkcmVzc2VzLAotCS5zZXR1cF9jdHJzID0gJnBwcm9fc2V0dXBfY3RycywKLQkuY2hlY2tfY3RycyA9ICZwcHJvX2NoZWNrX2N0cnMsCi0JLnN0YXJ0ID0gJnBwcm9fc3RhcnQsCi0JLnN0b3AgPSAmcHByb19zdG9wLAotCS5zaHV0ZG93biA9ICZwcHJvX3NodXRkb3duCitzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgb3BfcHByb19zcGVjID0geworCS5udW1fY291bnRlcnMJCT0gMiwJLyogY2FuIGJlIG92ZXJyaWRlbiAqLworCS5udW1fY29udHJvbHMJCT0gMiwJLyogZGl0byAqLworCS5maWxsX2luX2FkZHJlc3Nlcwk9ICZwcHJvX2ZpbGxfaW5fYWRkcmVzc2VzLAorCS5zZXR1cF9jdHJzCQk9ICZwcHJvX3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMJCT0gJnBwcm9fY2hlY2tfY3RycywKKwkuc3RhcnQJCQk9ICZwcHJvX3N0YXJ0LAorCS5zdG9wCQkJPSAmcHByb19zdG9wLAorCS5zaHV0ZG93bgkJPSAmcHByb19zaHV0ZG93bgorfTsKKworLyoKKyAqIEFyY2hpdGVjdHVyYWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4KKyAqCisgKiBOZXdlciBJbnRlbCBDUFVzIChDb3JlMSspIGhhdmUgc3VwcG9ydCBmb3IgYXJjaGl0ZWN0dXJhbAorICogZXZlbnRzIGRlc2NyaWJlZCBpbiBDUFVJRCAweEEuIFNlZSB0aGUgSUEzMiBTRE0gVm9sM2IuMTggZm9yIGRldGFpbHMuCisgKiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgaXMgdGhhdCBpdCBjYW4gYmUgZG9uZSB3aXRob3V0IGtub3dpbmcgYWJvdXQKKyAqIHRoZSBzcGVjaWZpYyBDUFUuCisgKi8KKwordm9pZCBhcmNoX3BlcmZtb25fc2V0dXBfY291bnRlcnModm9pZCkKK3sKKwl1bmlvbiBjcHVpZDEwX2VheCBlYXg7CisKKwllYXguZnVsbCA9IGNwdWlkX2VheCgweGEpOworCisJLyogV29ya2Fyb3VuZCBmb3IgQklPUyBidWdzIGluIDYvMTUuIFRha2VuIGZyb20gcGVyZm1vbjIgKi8KKwlpZiAoZWF4LnNwbGl0LnZlcnNpb25faWQgPT0gMCAmJiBjdXJyZW50X2NwdV9kYXRhLng4NiA9PSA2ICYmCisJCWN1cnJlbnRfY3B1X2RhdGEueDg2X21vZGVsID09IDE1KSB7CisJCWVheC5zcGxpdC52ZXJzaW9uX2lkID0gMjsKKwkJZWF4LnNwbGl0Lm51bV9jb3VudGVycyA9IDI7CisJCWVheC5zcGxpdC5iaXRfd2lkdGggPSA0MDsKKwl9CisKKwludW1fY291bnRlcnMgPSBlYXguc3BsaXQubnVtX2NvdW50ZXJzOworCisJb3BfYXJjaF9wZXJmbW9uX3NwZWMubnVtX2NvdW50ZXJzID0gbnVtX2NvdW50ZXJzOworCW9wX2FyY2hfcGVyZm1vbl9zcGVjLm51bV9jb250cm9scyA9IG51bV9jb3VudGVyczsKKwlvcF9wcHJvX3NwZWMubnVtX2NvdW50ZXJzID0gbnVtX2NvdW50ZXJzOworCW9wX3Bwcm9fc3BlYy5udW1fY29udHJvbHMgPSBudW1fY291bnRlcnM7Cit9CisKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9hcmNoX3BlcmZtb25fc3BlYyA9IHsKKwkvKiBudW1fY291bnRlcnMvbnVtX2NvbnRyb2xzIGZpbGxlZCBpbiBhdCBydW50aW1lICovCisJLmZpbGxfaW5fYWRkcmVzc2VzCT0gJnBwcm9fZmlsbF9pbl9hZGRyZXNzZXMsCisJLyogdXNlciBzcGFjZSBkb2VzIHRoZSBjcHVpZCBjaGVjayBmb3IgYXZhaWxhYmxlIGV2ZW50cyAqLworCS5zZXR1cF9jdHJzCQk9ICZwcHJvX3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMJCT0gJnBwcm9fY2hlY2tfY3RycywKKwkuc3RhcnQJCQk9ICZwcHJvX3N0YXJ0LAorCS5zdG9wCQkJPSAmcHByb19zdG9wLAorCS5zaHV0ZG93bgkJPSAmcHByb19zaHV0ZG93bgogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKaW5kZXggMDVhMDI2MS4uODI1ZTc5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKQEAgLTIyLDggKzIyLDggQEAKIH07CiAKIHN0cnVjdCBvcF9tc3JzIHsKLQlzdHJ1Y3Qgb3BfbXNyICogY291bnRlcnM7Ci0Jc3RydWN0IG9wX21zciAqIGNvbnRyb2xzOworCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3IgKmNvbnRyb2xzOwogfTsKIAogc3RydWN0IHB0X3JlZ3M7CkBAIC0zNCw4ICszNCw4IEBACiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgewogCWludCAoKmluaXQpKHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpOwogCXZvaWQgKCpleGl0KSh2b2lkKTsKLQl1bnNpZ25lZCBpbnQgY29uc3QgbnVtX2NvdW50ZXJzOwotCXVuc2lnbmVkIGludCBjb25zdCBudW1fY29udHJvbHM7CisJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgbnVtX2NvbnRyb2xzOwogCXZvaWQgKCpmaWxsX2luX2FkZHJlc3Nlcykoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKTsKIAl2b2lkICgqc2V0dXBfY3Rycykoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKIAlpbnQgKCpjaGVja19jdHJzKShzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCkBAIC00NSw5ICs0NSwxMiBAQAogCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKIH07CiAKLWV4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcHByb19zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9wcHJvX3NwZWM7CiBleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X3NwZWM7CiBleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOwogZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9hbWRfc3BlYzsKK2V4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgb3BfYXJjaF9wZXJmbW9uX3NwZWM7CisKK2V4dGVybiB2b2lkIGFyY2hfcGVyZm1vbl9zZXR1cF9jb3VudGVycyh2b2lkKTsKIAogI2VuZGlmIC8qIE9QX1g4Nl9NT0RFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaXJxLmMgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKaW5kZXggMDA2NTk5ZC4uYmY2OWRiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2lycS5jCisrKyBiL2FyY2gveDg2L3BjaS9pcnEuYwpAQCAtNDkzLDcgKzQ5Myw3IEBACiAJaWYgKHBpcnEgPD0gNCkKIAkJaXJxID0gcmVhZF9jb25maWdfbnliYmxlKHJvdXRlciwgMHg1NiwgcGlycSAtIDEpOwogCWRldl9pbmZvKCZkZXYtPmRldiwKLQkJICJBTUQ3NTY6IGRldiBbJTA0eC8lMDR4XSwgcm91dGVyIFBJUlEgJWQgZ2V0IElSUSAlZFxuIiwKKwkJICJBTUQ3NTY6IGRldiBbJTA0eDolMDR4XSwgcm91dGVyIFBJUlEgJWQgZ2V0IElSUSAlZFxuIiwKIAkJIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSwgcGlycSwgaXJxKTsKIAlyZXR1cm4gaXJxOwogfQpAQCAtNTAxLDcgKzUwMSw3IEBACiBzdGF0aWMgaW50IHBpcnFfYW1kNzU2X3NldChzdHJ1Y3QgcGNpX2RldiAqcm91dGVyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGlycSwgaW50IGlycSkKIHsKIAlkZXZfaW5mbygmZGV2LT5kZXYsCi0JCSAiQU1ENzU2OiBkZXYgWyUwNHgvJTA0eF0sIHJvdXRlciBQSVJRICVkIHNldCBJUlEgJWRcbiIsCisJCSAiQU1ENzU2OiBkZXYgWyUwNHg6JTA0eF0sIHJvdXRlciBQSVJRICVkIHNldCBJUlEgJWRcbiIsCiAJCSBkZXYtPnZlbmRvciwgZGV2LT5kZXZpY2UsIHBpcnEsIGlycSk7CiAJaWYgKHBpcnEgPD0gNCkKIAkJd3JpdGVfY29uZmlnX255YmJsZShyb3V0ZXIsIDB4NTYsIHBpcnEgLSAxLCBpcnEpOwpAQCAtNTkwLDEzICs1OTAsMjAgQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMzoKLQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIXzA6Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BDSF8xOgogCQlyLT5uYW1lID0gIlBJSVgvSUNIIjsKIAkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKIAkJci0+c2V0ID0gcGlycV9waWl4X3NldDsKIAkJcmV0dXJuIDE7CiAJfQorCisJaWYgKChkZXZpY2UgPj0gUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfTFBDX01JTikgJiYgCisJCShkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfTFBDX01BWCkpIHsKKwkJci0+bmFtZSA9ICJQSUlYL0lDSCI7CisJCXItPmdldCA9IHBpcnFfcGlpeF9nZXQ7CisJCXItPnNldCA9IHBpcnFfcGlpeF9zZXQ7CisJCXJldHVybiAxOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC04MjMsNyArODMwLDcgQEAKIAlyLT5nZXQgPSBOVUxMOwogCXItPnNldCA9IE5VTEw7CiAKLQlEQkcoS0VSTl9ERUJVRyAiUENJOiBBdHRlbXB0aW5nIHRvIGZpbmQgSVJRIHJvdXRlciBmb3IgJTA0eDolMDR4XG4iLAorCURCRyhLRVJOX0RFQlVHICJQQ0k6IEF0dGVtcHRpbmcgdG8gZmluZCBJUlEgcm91dGVyIGZvciBbJTA0eDolMDR4XVxuIiwKIAkgICAgcnQtPnJ0cl92ZW5kb3IsIHJ0LT5ydHJfZGV2aWNlKTsKIAogCXBpcnFfcm91dGVyX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KHJ0LT5ydHJfYnVzLCBydC0+cnRyX2RldmZuKTsKQEAgLTg0Myw3ICs4NTAsNyBAQAogCQkJaC0+cHJvYmUociwgcGlycV9yb3V0ZXJfZGV2LCBwaXJxX3JvdXRlcl9kZXYtPmRldmljZSkpCiAJCQlicmVhazsKIAl9Ci0JZGV2X2luZm8oJnBpcnFfcm91dGVyX2Rldi0+ZGV2LCAiJXMgSVJRIHJvdXRlciBbJTA0eC8lMDR4XVxuIiwKKwlkZXZfaW5mbygmcGlycV9yb3V0ZXJfZGV2LT5kZXYsICIlcyBJUlEgcm91dGVyIFslMDR4OiUwNHhdXG4iLAogCQkgcGlycV9yb3V0ZXIubmFtZSwKIAkJIHBpcnFfcm91dGVyX2Rldi0+dmVuZG9yLCBwaXJxX3JvdXRlcl9kZXYtPmRldmljZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCAwMDEzYTcyLi5iNjE1MzRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC04NzEsNiArODcxLDcgQEAKIAkJCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3RyYXkgbWFwcGluZ3Mgb2YKIAkJCSAgIHRoaXMgcGFnZSAqLwogCQkJa21hcF9mbHVzaF91bnVzZWQoKTsKKwkJCXZtX3VubWFwX2FsaWFzZXMoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9pcnEuYyBiL2FyY2gveDg2L3hlbi9pcnEuYwppbmRleCAyOGI4NWFiLi5iYjA0MjYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vaXJxLmMKKysrIGIvYXJjaC94ODYveGVuL2lycS5jCkBAIC0yMSw3ICsyMSw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX3hlbl9pbml0X0lSUSh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKIAlpbnQgaTsKIAogCS8qIENyZWF0ZSBpZGVudGl0eSB2ZWN0b3ItPmlycSBtYXAgKi8KQEAgLTMxLDcgKzMwLDYgQEAKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVtpXSA9IGk7CiAJfQotI2VuZGlmCS8qIENPTkZJR19YODZfNjQgKi8KIAogCXhlbl9pbml0X0lSUSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IGFlMTczZjYuLmQ0ZDUyZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTg0Niw2ICs4NDYsNyBAQAogCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBmb3Iga21hcF9mbHVzaF91bnVzZWQgKi8KIAkJeGVuX21jX2lzc3VlKDApOwogCQlrbWFwX2ZsdXNoX3VudXNlZCgpOworCQl2bV91bm1hcF9hbGlhc2VzKCk7CiAJCXhlbl9tY19iYXRjaCgpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwppbmRleCBkZDcxZTNhLi41NjAxNTA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYworKysgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCUFERF9TVEFUUyh0YWtlbl9zbG93X3NwdXJpb3VzLCAheGVuX3Rlc3RfaXJxX3BlbmRpbmcoaXJxKSk7CiAJfSB3aGlsZSAoIXhlbl90ZXN0X2lycV9wZW5kaW5nKGlycSkpOyAvKiBjaGVjayBmb3Igc3B1cmlvdXMgd2FrZXVwcyAqLwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAKIG91dDoKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggMDJlNDE3ZC4uNmM4NzNkYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC01NSw2ICs1NSw3IEBACiAJZGVmYXVsdCAxMDAKIAogc291cmNlICJpbml0L0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIApAQCAtNjMsNyArNjQsMTIgQEAKIAlkZWZhdWx0IFhURU5TQV9WQVJJQU5UX0ZTRgogCiBjb25maWcgWFRFTlNBX1ZBUklBTlRfRlNGCi0JYm9vbCAiZnNmIgorCWJvb2wgImZzZiAtIGRlZmF1bHQgKG5vdCBnZW5lcmljKSBjb25maWd1cmF0aW9uIgorCitjb25maWcgWFRFTlNBX1ZBUklBTlRfREMyMzJCCisJYm9vbCAiZGMyMzJiIC0gRGlhbW9uZCAyMzJMIFN0YW5kYXJkIENvcmUgUmV2LkIgKExFKSIKKwloZWxwCisJVGhpcyB2YXJpYW50IHJlZmVycyB0byBUZW5zaWxpY2EncyBEaWFtb25kIDIzMkwgU3RhbmRhcmQgY29yZSBSZXYuQiAoTEUpLgogZW5kY2hvaWNlCiAKIGNvbmZpZyBNTVUKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL01ha2VmaWxlIGIvYXJjaC94dGVuc2EvTWFrZWZpbGUKaW5kZXggNGJkMWUxNC4uMDE1YjZiMiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvTWFrZWZpbGUKKysrIGIvYXJjaC94dGVuc2EvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKICMgKFVzZSBWQVI9PHh0ZW5zYV9jb25maWc+IHRvIHVzZSBhbm90aGVyIGRlZmF1bHQgY29tcGlsZXIuKQogCiB2YXJpYW50LSQoQ09ORklHX1hURU5TQV9WQVJJQU5UX0ZTRikJCTo9IGZzZgordmFyaWFudC0kKENPTkZJR19YVEVOU0FfVkFSSUFOVF9EQzIzMkIpCQk6PSBkYzIzMmIKIHZhcmlhbnQtJChDT05GSUdfWFRFTlNBX1ZBUklBTlRfTElOVVhfQ1VTVE9NKQk6PSBjdXN0b20KIAogVkFSSUFOVCA9ICQodmFyaWFudC15KQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IGM5ZWE3M2IuLjVmYmNkZTUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogCWlmIChpcnEgPj0gTlJfSVJRUykgewogCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IGNhbm5vdCBoYW5kbGUgSVJRICVkXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgaXJxKTsKKwkJCQlfX2Z1bmNfXywgaXJxKTsKIAl9CiAKIAlpcnFfZW50ZXIoKTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvbmV0d29yay5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMKaW5kZXggYTJlMjUyMi4uMTFhMjBhZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMKQEAgLTY0MCw3ICs2NDAsNyBAQAogCSpscCA9ICgoc3RydWN0IGlzc19uZXRfcHJpdmF0ZSkgewogCQkuZGV2aWNlX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQobHAtPmRldmljZV9saXN0KSwKIAkJLm9wZW5lZF9saXN0CQk9IExJU1RfSEVBRF9JTklUKGxwLT5vcGVuZWRfbGlzdCksCi0JCS5sb2NrCQkJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJCS5sb2NrCQkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChscC5sb2NrKSwKIAkJLmRldgkJCT0gZGV2LAogCQkuaW5kZXgJCQk9IGluZGV4LAogCQkvLy5mZCAgICAgICAgICAgICAgICAgICA9IC0xLApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMmQwNTNiNS4uYzNkZjMwYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0yNTcsNyArMjU3LDYgQEAKIAogCXEtPnJlcXVlc3RfZm4ocSk7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKTsKIAogLyoqCiAgKiBnZW5lcmljX3VucGx1Z19kZXZpY2UgLSBmaXJlIGEgcmVxdWVzdCBxdWV1ZQpAQCAtMzI1LDYgKzMyNCw5IEBACiAKIHN0YXRpYyB2b2lkIGJsa19pbnZva2VfcmVxdWVzdF9mbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKKwlpZiAodW5saWtlbHkoYmxrX3F1ZXVlX3N0b3BwZWQocSkpKQorCQlyZXR1cm47CisKIAkvKgogCSAqIG9uZSBsZXZlbCBvZiByZWN1cnNpb24gaXMgb2sgYW5kIGlzIG11Y2ggZmFzdGVyIHRoYW4ga2lja2luZwogCSAqIHRoZSB1bnBsdWcgaGFuZGxpbmcKQEAgLTM5OSw4ICs0MDEsMTMgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3N5bmNfcXVldWUpOwogCiAvKioKLSAqIGJsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCisgKiBfX2Jsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCiAgKiBAcToJVGhlIHF1ZXVlIHRvIHJ1bgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgU2VlIEBibGtfcnVuX3F1ZXVlLiBUaGlzIHZhcmlhbnQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcXVldWUgbG9jaworICogICAgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCiAgKi8KIHZvaWQgX19ibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewpAQCAtNDE4LDYgKzQyNSwxMiBAQAogLyoqCiAgKiBibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6IFRoZSBxdWV1ZSB0byBydW4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgIEludm9rZSByZXF1ZXN0IGhhbmRsaW5nIG9uIHRoaXMgcXVldWUsIGlmIGl0IGhhcyBwZW5kaW5nIHdvcmsgdG8gZG8uCisgKiAgICBNYXkgYmUgdXNlZCB0byByZXN0YXJ0IHF1ZXVlaW5nIHdoZW4gYSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuIEFsc28KKyAqICAgIFNlZSBAYmxrX3N0YXJ0X3F1ZXVlaW5nLgorICoKICAqLwogdm9pZCBibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewpAQCAtNTAxLDYgKzUxNCw3IEBACiAJaW5pdF90aW1lcigmcS0+dW5wbHVnX3RpbWVyKTsKIAlzZXR1cF90aW1lcigmcS0+dGltZW91dCwgYmxrX3JxX3RpbWVkX291dF90aW1lciwgKHVuc2lnbmVkIGxvbmcpIHEpOwogCUlOSVRfTElTVF9IRUFEKCZxLT50aW1lb3V0X2xpc3QpOworCUlOSVRfV09SSygmcS0+dW5wbHVnX3dvcmssIGJsa191bnBsdWdfd29yayk7CiAKIAlrb2JqZWN0X2luaXQoJnEtPmtvYmosICZibGtfcXVldWVfa3R5cGUpOwogCkBAIC04ODQsNyArODk4LDggQEAKICAqCiAgKiBUaGlzIGlzIGJhc2ljYWxseSBhIGhlbHBlciB0byByZW1vdmUgdGhlIG5lZWQgdG8ga25vdyB3aGV0aGVyIGEgcXVldWUKICAqIGlzIHBsdWdnZWQgb3Igbm90IGlmIHNvbWVvbmUganVzdCB3YW50cyB0byBpbml0aWF0ZSBkaXNwYXRjaCBvZiByZXF1ZXN0cwotICogZm9yIHRoaXMgcXVldWUuCisgKiBmb3IgdGhpcyBxdWV1ZS4gU2hvdWxkIGJlIHVzZWQgdG8gc3RhcnQgcXVldWVpbmcgb24gYSBkZXZpY2Ugb3V0c2lkZQorICogb2YgLT5yZXF1ZXN0X2ZuKCkgY29udGV4dC4gQWxzbyBzZWUgQGJsa19ydW5fcXVldWUuCiAgKgogICogVGhlIHF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwpAQCAtMTAwMyw4ICsxMDE4LDkgQEAKIH0KIAogLyoqCi0gKiBwYXJ0X3JvdW5kX3N0YXRzKCkJLSBSb3VuZCBvZmYgdGhlIHBlcmZvcm1hbmNlIHN0YXRzIG9uIGEgc3RydWN0Ci0gKiBkaXNrX3N0YXRzLgorICogcGFydF9yb3VuZF9zdGF0cygpIC0gUm91bmQgb2ZmIHRoZSBwZXJmb3JtYW5jZSBzdGF0cyBvbiBhIHN0cnVjdCBkaXNrX3N0YXRzLgorICogQGNwdTogY3B1IG51bWJlciBmb3Igc3RhdHMgYWNjZXNzCisgKiBAcGFydDogdGFyZ2V0IHBhcnRpdGlvbgogICoKICAqIFRoZSBhdmVyYWdlIElPIHF1ZXVlIGxlbmd0aCBhbmQgdXRpbGlzYXRpb24gc3RhdGlzdGljcyBhcmUgbWFpbnRhaW5lZAogICogYnkgb2JzZXJ2aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBxdWV1ZSBsZW5ndGggYW5kIHRoZSBhbW91bnQgb2YKQEAgLTEwNzUsOCArMTA5MSwxNSBAQAogCS8qCiAJICogaW5oZXJpdCBGQUlMRkFTVCBmcm9tIGJpbyAoZm9yIHJlYWQtYWhlYWQsIGFuZCBleHBsaWNpdCBGQUlMRkFTVCkKIAkgKi8KLQlpZiAoYmlvX3J3X2FoZWFkKGJpbykgfHwgYmlvX2ZhaWxmYXN0KGJpbykpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVDsKKwlpZiAoYmlvX3J3X2FoZWFkKGJpbykpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IChSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkJICAgUkVRX0ZBSUxGQVNUX0RSSVZFUik7CisJaWYgKGJpb19mYWlsZmFzdF9kZXYoYmlvKSkKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFVjsKKwlpZiAoYmlvX2ZhaWxmYXN0X3RyYW5zcG9ydChiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUOworCWlmIChiaW9fZmFpbGZhc3RfZHJpdmVyKGJpbykpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9EUklWRVI7CiAKIAkvKgogCSAqIFJFUV9CQVJSSUVSIGltcGxpZXMgbm8gbWVyZ2luZywgYnV0IGxldHMgbWFrZSBpdCBleHBsaWNpdApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA5MDhkM2UxLi44NjgxY2Q2IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtNzcsMTIgKzc3LDIwIEBACiAJCQljb250aW51ZTsKIAkJfQogbmV3X3NlZ21lbnQ6CisJCWlmIChucl9waHlzX3NlZ3MgPT0gMSAmJiBzZWdfc2l6ZSA+IHJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplKQorCQkJcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUgPSBzZWdfc2l6ZTsKKwogCQlucl9waHlzX3NlZ3MrKzsKIAkJYnZwcnYgPSBidjsKIAkJc2VnX3NpemUgPSBidi0+YnZfbGVuOwogCQloaWdocHJ2ID0gaGlnaDsKIAl9CiAKKwlpZiAobnJfcGh5c19zZWdzID09IDEgJiYgc2VnX3NpemUgPiBycS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSkKKwkJcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUgPSBzZWdfc2l6ZTsKKwlpZiAoc2VnX3NpemUgPiBycS0+YmlvdGFpbC0+Ymlfc2VnX2JhY2tfc2l6ZSkKKwkJcnEtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUgPSBzZWdfc2l6ZTsKKwogCXJxLT5ucl9waHlzX3NlZ21lbnRzID0gbnJfcGh5c19zZWdzOwogfQogCkBAIC0xMDYsNyArMTE0LDggQEAKIAlpZiAoIXRlc3RfYml0KFFVRVVFX0ZMQUdfQ0xVU1RFUiwgJnEtPnF1ZXVlX2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYmlvLT5iaV9zaXplICsgbnh0LT5iaV9zaXplID4gcS0+bWF4X3NlZ21lbnRfc2l6ZSkKKwlpZiAoYmlvLT5iaV9zZWdfYmFja19zaXplICsgbnh0LT5iaV9zZWdfZnJvbnRfc2l6ZSA+CisJICAgIHEtPm1heF9zZWdtZW50X3NpemUpCiAJCXJldHVybiAwOwogCiAJaWYgKCFiaW9faGFzX2RhdGEoYmlvKSkKQEAgLTMwOSw2ICszMTgsOCBAQAogCQkJCXN0cnVjdCByZXF1ZXN0ICpuZXh0KQogewogCWludCB0b3RhbF9waHlzX3NlZ21lbnRzOworCXVuc2lnbmVkIGludCBzZWdfc2l6ZSA9CisJCXJlcS0+YmlvdGFpbC0+Ymlfc2VnX2JhY2tfc2l6ZSArIG5leHQtPmJpby0+Ymlfc2VnX2Zyb250X3NpemU7CiAKIAkvKgogCSAqIEZpcnN0IGNoZWNrIGlmIHRoZSBlaXRoZXIgb2YgdGhlIHJlcXVlc3RzIGFyZSByZS1xdWV1ZWQKQEAgLTMyNCw4ICszMzUsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAl0b3RhbF9waHlzX3NlZ21lbnRzID0gcmVxLT5ucl9waHlzX3NlZ21lbnRzICsgbmV4dC0+bnJfcGh5c19zZWdtZW50czsKLQlpZiAoYmxrX3BoeXNfY29udGlnX3NlZ21lbnQocSwgcmVxLT5iaW90YWlsLCBuZXh0LT5iaW8pKQorCWlmIChibGtfcGh5c19jb250aWdfc2VnbWVudChxLCByZXEtPmJpb3RhaWwsIG5leHQtPmJpbykpIHsKKwkJaWYgKHJlcS0+bnJfcGh5c19zZWdtZW50cyA9PSAxKQorCQkJcmVxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7CisJCWlmIChuZXh0LT5ucl9waHlzX3NlZ21lbnRzID09IDEpCisJCQluZXh0LT5iaW90YWlsLT5iaV9zZWdfYmFja19zaXplID0gc2VnX3NpemU7CiAJCXRvdGFsX3BoeXNfc2VnbWVudHMtLTsKKwl9CiAKIAlpZiAodG90YWxfcGh5c19zZWdtZW50cyA+IHEtPm1heF9waHlzX3NlZ21lbnRzKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKaW5kZXggYjIxZGNkYi4uNDEzOTJmYiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNldHRpbmdzLmMKKysrIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKQEAgLTE0MSw4ICsxNDEsNiBAQAogCWlmIChxLT51bnBsdWdfZGVsYXkgPT0gMCkKIAkJcS0+dW5wbHVnX2RlbGF5ID0gMTsKIAotCUlOSVRfV09SSygmcS0+dW5wbHVnX3dvcmssIGJsa191bnBsdWdfd29yayk7Ci0KIAlxLT51bnBsdWdfdGltZXIuZnVuY3Rpb24gPSBibGtfdW5wbHVnX3RpbWVvdXQ7CiAJcS0+dW5wbHVnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IGU1YzU3OTcuLmQyZTQ5YWYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCisrKyBiL2Jsb2NrL2Jsay5oCkBAIC0yMCw2ICsyMCw3IEBACiB2b2lkIGJsa19ycV90aW1lZF9vdXRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgYmxrX2RlbGV0ZV90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqKTsKIHZvaWQgYmxrX2FkZF90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqKTsKK3ZvaWQgX19nZW5lcmljX3VucGx1Z19kZXZpY2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CiAKIC8qCiAgKiBJbnRlcm5hbCBhdG9taWMgZmxhZ3MgZm9yIHJlcXVlc3QgaGFuZGxpbmcKZGlmZiAtLWdpdCBhL2Jsb2NrL2JzZy5jIGIvYmxvY2svYnNnLmMKaW5kZXggMDM0MTEyYi4uZThiZDI0NyAxMDA2NDQKLS0tIGEvYmxvY2svYnNnLmMKKysrIGIvYmxvY2svYnNnLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiBzdGF0aWMgaW50IGJsa19maWxsX3NndjRfaGRyX3JxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCQkJc3RydWN0IHNnX2lvX3Y0ICpoZHIsIHN0cnVjdCBic2dfZGV2aWNlICpiZCwKLQkJCQlpbnQgaGFzX3dyaXRlX3Blcm0pCisJCQkJZm1vZGVfdCBoYXNfd3JpdGVfcGVybSkKIHsKIAlpZiAoaGRyLT5yZXF1ZXN0X2xlbiA+IEJMS19NQVhfQ0RCKSB7CiAJCXJxLT5jbWQgPSBremFsbG9jKGhkci0+cmVxdWVzdF9sZW4sIEdGUF9LRVJORUwpOwpAQCAtMjQyLDcgKzI0Miw3IEBACiAgKiBtYXAgc2dfaW9fdjQgdG8gYSByZXF1ZXN0LgogICovCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKgotYnNnX21hcF9oZHIoc3RydWN0IGJzZ19kZXZpY2UgKmJkLCBzdHJ1Y3Qgc2dfaW9fdjQgKmhkciwgaW50IGhhc193cml0ZV9wZXJtKQorYnNnX21hcF9oZHIoc3RydWN0IGJzZ19kZXZpY2UgKmJkLCBzdHJ1Y3Qgc2dfaW9fdjQgKmhkciwgZm1vZGVfdCBoYXNfd3JpdGVfcGVybSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkLT5xdWV1ZTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEsICpuZXh0X3JxID0gTlVMTDsKQEAgLTYwMSw3ICs2MDEsOCBAQAogfQogCiBzdGF0aWMgaW50IF9fYnNnX3dyaXRlKHN0cnVjdCBic2dfZGV2aWNlICpiZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJICAgICAgIHNpemVfdCBjb3VudCwgc3NpemVfdCAqYnl0ZXNfd3JpdHRlbiwgaW50IGhhc193cml0ZV9wZXJtKQorCQkgICAgICAgc2l6ZV90IGNvdW50LCBzc2l6ZV90ICpieXRlc193cml0dGVuLAorCQkgICAgICAgZm1vZGVfdCBoYXNfd3JpdGVfcGVybSkKIHsKIAlzdHJ1Y3QgYnNnX2NvbW1hbmQgKmJjOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKQEAgLTkxMyw3ICs5MTQsNyBAQAogCWNhc2UgU0dfRU1VTEFURURfSE9TVDoKIAljYXNlIFNDU0lfSU9DVExfU0VORF9DT01NQU5EOiB7CiAJCXZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopIGFyZzsKLQkJcmV0dXJuIHNjc2lfY21kX2lvY3RsKGZpbGUsIGJkLT5xdWV1ZSwgTlVMTCwgY21kLCB1YXJnKTsKKwkJcmV0dXJuIHNjc2lfY21kX2lvY3RsKGJkLT5xdWV1ZSwgTlVMTCwgZmlsZS0+Zl9tb2RlLCBjbWQsIHVhcmcpOwogCX0KIAljYXNlIFNHX0lPOiB7CiAJCXN0cnVjdCByZXF1ZXN0ICpycTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NtZC1maWx0ZXIuYyBiL2Jsb2NrL2NtZC1maWx0ZXIuYwppbmRleCBlNjY5YWVkLi41MDRiMjc1IDEwMDY0NAotLS0gYS9ibG9jay9jbWQtZmlsdGVyLmMKKysrIGIvYmxvY2svY21kLWZpbHRlci5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KIAogaW50IGJsa192ZXJpZnlfY29tbWFuZChzdHJ1Y3QgYmxrX2NtZF9maWx0ZXIgKmZpbHRlciwKLQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmNtZCwgaW50IGhhc193cml0ZV9wZXJtKQorCQkgICAgICAgdW5zaWduZWQgY2hhciAqY21kLCBmbW9kZV90IGhhc193cml0ZV9wZXJtKQogewogCS8qIHJvb3QgY2FuIGRvIGFueSBjb21tYW5kLiAqLwogCWlmIChjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQpkaWZmIC0tZ2l0IGEvYmxvY2svY29tcGF0X2lvY3RsLmMgYi9ibG9jay9jb21wYXRfaW9jdGwuYwppbmRleCAxZTU1OWZiLi4zZDNlN2E0IDEwMDY0NAotLS0gYS9ibG9jay9jb21wYXRfaW9jdGwuYworKysgYi9ibG9jay9jb21wYXRfaW9jdGwuYwpAQCAtNzEsOCArNzEsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X2hkaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCXN0cnVjdCBnZW5kaXNrICpkaXNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgY29tcGF0X2hkaW9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJdW5zaWduZWQgbG9uZyBrdmFsOwpAQCAtODAsNyArODAsNyBAQAogCWludCBlcnJvcjsKIAogCXNldF9mcyhLRVJORUxfRFMpOwotCWVycm9yID0gYmxrZGV2X2RyaXZlcl9pb2N0bChpbm9kZSwgZmlsZSwgZGlzaywKKwllcnJvciA9IF9fYmxrZGV2X2RyaXZlcl9pb2N0bChiZGV2LCBtb2RlLAogCQkJCWNtZCwgKHVuc2lnbmVkIGxvbmcpKCZrdmFsKSk7CiAJc2V0X2ZzKG9sZF9mcyk7CiAKQEAgLTExMSw4ICsxMTEsOCBAQAogCWNvbXBhdF9jYWRkcl90CXJlc2VydmVkWzFdOwogfTsKIAotc3RhdGljIGludCBjb21wYXRfY2Ryb21fcmVhZF9hdWRpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJc3RydWN0IGdlbmRpc2sgKmRpc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBjb21wYXRfY2Ryb21fcmVhZF9hdWRpbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvIF9fdXNlciAqY2RyZWFkX2F1ZGlvOwogCXN0cnVjdCBjb21wYXRfY2Ryb21fcmVhZF9hdWRpbyBfX3VzZXIgKmNkcmVhZF9hdWRpbzMyOwpAQCAtMTM0LDEyICsxMzQsMTIgQEAKIAlpZiAocHV0X3VzZXIoZGF0YXAsICZjZHJlYWRfYXVkaW8tPmJ1ZikpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGJsa2Rldl9kcml2ZXJfaW9jdGwoaW5vZGUsIGZpbGUsIGRpc2ssIGNtZCwKKwlyZXR1cm4gX19ibGtkZXZfZHJpdmVyX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwKIAkJCSh1bnNpZ25lZCBsb25nKWNkcmVhZF9hdWRpbyk7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X2Nkcm9tX2dlbmVyaWNfY29tbWFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJc3RydWN0IGdlbmRpc2sgKmRpc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBjb21wYXRfY2Ryb21fZ2VuZXJpY19jb21tYW5kKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNkcm9tX2dlbmVyaWNfY29tbWFuZCBfX3VzZXIgKmNnYzsKIAlzdHJ1Y3QgY29tcGF0X2Nkcm9tX2dlbmVyaWNfY29tbWFuZCBfX3VzZXIgKmNnYzMyOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJICAgIHB1dF91c2VyKGNvbXBhdF9wdHIoZGF0YSksICZjZ2MtPnJlc2VydmVkWzBdKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gYmxrZGV2X2RyaXZlcl9pb2N0bChpbm9kZSwgZmlsZSwgZGlzaywgY21kLCAodW5zaWduZWQgbG9uZyljZ2MpOworCXJldHVybiBfX2Jsa2Rldl9kcml2ZXJfaW9jdGwoYmRldiwgbW9kZSwgY21kLCAodW5zaWduZWQgbG9uZyljZ2MpOwogfQogCiBzdHJ1Y3QgY29tcGF0X2Jsa3BnX2lvY3RsX2FyZyB7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAljb21wYXRfY2FkZHJfdCBkYXRhOwogfTsKIAotc3RhdGljIGludCBjb21wYXRfYmxrcGdfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGNvbXBhdF9ibGtwZ19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJCXVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBjb21wYXRfYmxrcGdfaW9jdGxfYXJnIF9fdXNlciAqdWEzMikKIHsKIAlzdHJ1Y3QgYmxrcGdfaW9jdGxfYXJnIF9fdXNlciAqYSA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqYSkpOwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXJldHVybiBibGtkZXZfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpYSk7CisJcmV0dXJuIGJsa2Rldl9pb2N0bChiZGV2LCBtb2RlLCBjbWQsICh1bnNpZ25lZCBsb25nKWEpOwogfQogCiAjZGVmaW5lIEJMS0JTWkdFVF8zMgkJX0lPUigweDEyLCAxMTIsIGludCkKQEAgLTMwOCw4ICszMDgsOCBAQAogCiAjZGVmaW5lIE5SX0ZEX0lPQ1RMX1RSQU5TIEFSUkFZX1NJWkUoZmRfaW9jdGxfdHJhbnNfdGFibGUpCiAKLXN0YXRpYyBpbnQgY29tcGF0X2ZkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGNvbXBhdF9mZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKIAl2b2lkICprYXJnID0gTlVMTDsKQEAgLTQxMyw3ICs0MTMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZXJyID0gYmxrZGV2X2RyaXZlcl9pb2N0bChpbm9kZSwgZmlsZSwgZGlzaywga2NtZCwgKHVuc2lnbmVkIGxvbmcpa2FyZyk7CisJZXJyID0gX19ibGtkZXZfZHJpdmVyX2lvY3RsKGJkZXYsIG1vZGUsIGtjbWQsICh1bnNpZ25lZCBsb25nKWthcmcpOwogCXNldF9mcyhvbGRfZnMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtNTc5LDExICs1NzksOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvbXBhdF9ibGtkZXZfZHJpdmVyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJc3RydWN0IGdlbmRpc2sgKmRpc2ssIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGNvbXBhdF9ibGtkZXZfZHJpdmVyX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCXVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JaW50IHJldDsKLQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBIRElPX0dFVF9VTk1BU0tJTlRSOgogCWNhc2UgSERJT19HRVRfTVVMVENPVU5UOgpAQCAtNTk2LDcgKzU5NCw3IEBACiAJY2FzZSBIRElPX0dFVF9BQ09VU1RJQzoKIAljYXNlIEhESU9fR0VUX0FERFJFU1M6CiAJY2FzZSBIRElPX0dFVF9CVVNTVEFURToKLQkJcmV0dXJuIGNvbXBhdF9oZGlvX2lvY3RsKGlub2RlLCBmaWxlLCBkaXNrLCBjbWQsIGFyZyk7CisJCXJldHVybiBjb21wYXRfaGRpb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CiAJY2FzZSBGRFNFVFBSTTMyOgogCWNhc2UgRkRERUZQUk0zMjoKIAljYXNlIEZER0VUUFJNMzI6CkBAIC02MDYsMTEgKzYwNCwxMSBAQAogCWNhc2UgRkRQT0xMRFJWU1RBVDMyOgogCWNhc2UgRkRHRVRGRENTVEFUMzI6CiAJY2FzZSBGRFdFUlJPUkdFVDMyOgotCQlyZXR1cm4gY29tcGF0X2ZkX2lvY3RsKGlub2RlLCBmaWxlLCBkaXNrLCBjbWQsIGFyZyk7CisJCXJldHVybiBjb21wYXRfZmRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwogCWNhc2UgQ0RST01SRUFEQVVESU86Ci0JCXJldHVybiBjb21wYXRfY2Ryb21fcmVhZF9hdWRpbyhpbm9kZSwgZmlsZSwgZGlzaywgY21kLCBhcmcpOworCQlyZXR1cm4gY29tcGF0X2Nkcm9tX3JlYWRfYXVkaW8oYmRldiwgbW9kZSwgY21kLCBhcmcpOwogCWNhc2UgQ0RST01fU0VORF9QQUNLRVQ6Ci0JCXJldHVybiBjb21wYXRfY2Ryb21fZ2VuZXJpY19jb21tYW5kKGlub2RlLCBmaWxlLCBkaXNrLCBjbWQsIGFyZyk7CisJCXJldHVybiBjb21wYXRfY2Ryb21fZ2VuZXJpY19jb21tYW5kKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAogCS8qCiAJICogTm8gaGFuZGxlciByZXF1aXJlZCBmb3IgdGhlIG9uZXMgYmVsb3csIHdlIGp1c3QgbmVlZCB0bwpAQCAtNjc5LDU1ICs2NzcsNDkgQEAKIAljYXNlIERWRF9XUklURV9TVFJVQ1Q6CiAJY2FzZSBEVkRfQVVUSDoKIAkJYXJnID0gKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpOwotCS8qIFRoZXNlIGludGVwcmV0IGFyZyBhcyBhbiB1bnNpZ25lZCBsb25nLCBub3QgYXMgYSBwb2ludGVyLAotCSAqIHNvIHdlIG11c3Qgbm90IGRvIGNvbXBhdF9wdHIoKSBjb252ZXJzaW9uLiAqLwotCWNhc2UgSERJT19TRVRfTVVMVENPVU5UOgotCWNhc2UgSERJT19TRVRfVU5NQVNLSU5UUjoKLQljYXNlIEhESU9fU0VUX0tFRVBTRVRUSU5HUzoKLQljYXNlIEhESU9fU0VUXzMyQklUOgotCWNhc2UgSERJT19TRVRfTk9XRVJSOgotCWNhc2UgSERJT19TRVRfRE1BOgotCWNhc2UgSERJT19TRVRfUElPX01PREU6Ci0JY2FzZSBIRElPX1NFVF9OSUNFOgotCWNhc2UgSERJT19TRVRfV0NBQ0hFOgotCWNhc2UgSERJT19TRVRfQUNPVVNUSUM6Ci0JY2FzZSBIRElPX1NFVF9CVVNTVEFURToKLQljYXNlIEhESU9fU0VUX0FERFJFU1M6Ci0JY2FzZSBDRFJPTUVKRUNUX1NXOgotCWNhc2UgQ0RST01fU0VUX09QVElPTlM6Ci0JY2FzZSBDRFJPTV9DTEVBUl9PUFRJT05TOgotCWNhc2UgQ0RST01fU0VMRUNUX1NQRUVEOgotCWNhc2UgQ0RST01fU0VMRUNUX0RJU0M6Ci0JY2FzZSBDRFJPTV9NRURJQV9DSEFOR0VEOgotCWNhc2UgQ0RST01fRFJJVkVfU1RBVFVTOgotCWNhc2UgQ0RST01fTE9DS0RPT1I6Ci0JY2FzZSBDRFJPTV9ERUJVRzoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogdW5rbm93biBpb2N0bCBudW1iZXIgKi8KIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAKLQlpZiAoZGlzay0+Zm9wcy0+dW5sb2NrZWRfaW9jdGwpCi0JCXJldHVybiBkaXNrLT5mb3BzLT51bmxvY2tlZF9pb2N0bChmaWxlLCBjbWQsIGFyZyk7Ci0KLQlpZiAoZGlzay0+Zm9wcy0+aW9jdGwpIHsKLQkJbG9ja19rZXJuZWwoKTsKLQkJcmV0ID0gZGlzay0+Zm9wcy0+aW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAtRU5PVFRZOworCXJldHVybiBfX2Jsa2Rldl9kcml2ZXJfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwogfQogCi1zdGF0aWMgaW50IGNvbXBhdF9ibGtkZXZfbG9ja2VkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCi0JCQkJdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKy8qIE1vc3Qgb2YgdGhlIGdlbmVyaWMgaW9jdGxzIGFyZSBoYW5kbGVkIGluIHRoZSBub3JtYWwgZmFsbGJhY2sgcGF0aC4KKyAgIFRoaXMgYXNzdW1lcyB0aGUgYmxrZGV2J3MgbG93IGxldmVsIGNvbXBhdF9pb2N0bCBhbHdheXMgcmV0dXJucworICAgRU5PSU9DVExDTUQgZm9yIHVua25vd24gaW9jdGxzLiAqLworbG9uZyBjb21wYXRfYmxrZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCWludCByZXQgPSAtRU5PSU9DVExDTUQ7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CisJZm1vZGVfdCBtb2RlID0gZmlsZS0+Zl9tb2RlOwogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CisJbG9mZl90IHNpemU7CisKKwlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTkRFTEFZKQorCQltb2RlIHw9IEZNT0RFX05ERUxBWV9OT1c7CiAKIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSERJT19HRVRHRU86CisJCXJldHVybiBjb21wYXRfaGRpb19nZXRnZW8oZGlzaywgYmRldiwgY29tcGF0X3B0cihhcmcpKTsKKwljYXNlIEJMS0ZMU0JVRjoKKwljYXNlIEJMS1JPU0VUOgorCWNhc2UgQkxLRElTQ0FSRDoKKwkvKgorCSAqIHRoZSBvbmVzIGJlbG93IGFyZSBpbXBsZW1lbnRlZCBpbiBibGtkZXZfbG9ja2VkX2lvY3RsLAorCSAqIGJ1dCB3ZSBjYWxsIGJsa2Rldl9pb2N0bCwgd2hpY2ggZ2V0cyB0aGUgbG9jayBmb3IgdXMKKwkgKi8KKwljYXNlIEJMS1JSUEFSVDoKKwkJcmV0dXJuIGJsa2Rldl9pb2N0bChiZGV2LCBtb2RlLCBjbWQsCisJCQkJKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKKwljYXNlIEJMS0JTWlNFVF8zMjoKKwkJcmV0dXJuIGJsa2Rldl9pb2N0bChiZGV2LCBtb2RlLCBCTEtCU1pTRVQsCisJCQkJKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKKwljYXNlIEJMS1BHOgorCQlyZXR1cm4gY29tcGF0X2Jsa3BnX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKIAljYXNlIEJMS1JBR0VUOgogCWNhc2UgQkxLRlJBR0VUOgogCQlpZiAoIWFyZykKQEAgLTc1Myw2NSArNzQ1LDM2IEBACiAJCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhiZGV2KTsKIAkJaWYgKGJkaSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9UVFk7CisJCWxvY2tfa2VybmVsKCk7CiAJCWJkaS0+cmFfcGFnZXMgPSAoYXJnICogNTEyKSAvIFBBR0VfQ0FDSEVfU0laRTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gMDsKIAljYXNlIEJMS0dFVFNJWkU6Ci0JCWlmICgoYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSA+IH4wVUwpCisJCXNpemUgPSBiZGV2LT5iZF9pbm9kZS0+aV9zaXplOworCQlpZiAoKHNpemUgPj4gOSkgPiB+MFVMKQogCQkJcmV0dXJuIC1FRkJJRzsKLQkJcmV0dXJuIGNvbXBhdF9wdXRfdWxvbmcoYXJnLCBiZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDkpOworCQlyZXR1cm4gY29tcGF0X3B1dF91bG9uZyhhcmcsIHNpemUgPj4gOSk7CiAKIAljYXNlIEJMS0dFVFNJWkU2NF8zMjoKIAkJcmV0dXJuIGNvbXBhdF9wdXRfdTY0KGFyZywgYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSk7CiAKIAljYXNlIEJMS1RSQUNFU0VUVVAzMjoKLQkJcmV0dXJuIGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoYmRldiwgY29tcGF0X3B0cihhcmcpKTsKKwkJbG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gY29tcGF0X2Jsa190cmFjZV9zZXR1cChiZGV2LCBjb21wYXRfcHRyKGFyZykpOworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiByZXQ7CiAJY2FzZSBCTEtUUkFDRVNUQVJUOiAvKiBjb21wYXRpYmxlICovCiAJY2FzZSBCTEtUUkFDRVNUT1A6ICAvKiBjb21wYXRpYmxlICovCiAJY2FzZSBCTEtUUkFDRVRFQVJET1dOOiAvKiBjb21wYXRpYmxlICovCi0JCXJldHVybiBibGtfdHJhY2VfaW9jdGwoYmRldiwgY21kLCBjb21wYXRfcHRyKGFyZykpOwotCX0KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi0vKiBNb3N0IG9mIHRoZSBnZW5lcmljIGlvY3RscyBhcmUgaGFuZGxlZCBpbiB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGguCi0gICBUaGlzIGFzc3VtZXMgdGhlIGJsa2RldidzIGxvdyBsZXZlbCBjb21wYXRfaW9jdGwgYWx3YXlzIHJldHVybnMKLSAgIEVOT0lPQ1RMQ01EIGZvciB1bmtub3duIGlvY3Rscy4gKi8KLWxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEhESU9fR0VUR0VPOgotCQlyZXR1cm4gY29tcGF0X2hkaW9fZ2V0Z2VvKGRpc2ssIGJkZXYsIGNvbXBhdF9wdHIoYXJnKSk7Ci0JY2FzZSBCTEtGTFNCVUY6Ci0JY2FzZSBCTEtST1NFVDoKLQljYXNlIEJMS0RJU0NBUkQ6Ci0JLyoKLQkgKiB0aGUgb25lcyBiZWxvdyBhcmUgaW1wbGVtZW50ZWQgaW4gYmxrZGV2X2xvY2tlZF9pb2N0bCwKLQkgKiBidXQgd2UgY2FsbCBibGtkZXZfaW9jdGwsIHdoaWNoIGdldHMgdGhlIGxvY2sgZm9yIHVzCi0JICovCi0JY2FzZSBCTEtSUlBBUlQ6Ci0JCXJldHVybiBibGtkZXZfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwKLQkJCQkodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOwotCWNhc2UgQkxLQlNaU0VUXzMyOgotCQlyZXR1cm4gYmxrZGV2X2lvY3RsKGlub2RlLCBmaWxlLCBCTEtCU1pTRVQsCi0JCQkJKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKLQljYXNlIEJMS1BHOgotCQlyZXR1cm4gY29tcGF0X2Jsa3BnX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7Ci0JfQotCi0JbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBjb21wYXRfYmxrZGV2X2xvY2tlZF9pb2N0bChpbm9kZSwgZmlsZSwgYmRldiwgY21kLCBhcmcpOwotCS8qIEZJWE1FOiB3aHkgZG8gd2UgYXNzdW1lIC0+IGNvbXBhdF9pb2N0bCBuZWVkcyB0aGUgQktMPyAqLwotCWlmIChyZXQgPT0gLUVOT0lPQ1RMQ01EICYmIGRpc2stPmZvcHMtPmNvbXBhdF9pb2N0bCkKLQkJcmV0ID0gZGlzay0+Zm9wcy0+Y29tcGF0X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlpZiAocmV0ICE9IC1FTk9JT0NUTENNRCkKKwkJbG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gYmxrX3RyYWNlX2lvY3RsKGJkZXYsIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIGNvbXBhdF9ibGtkZXZfZHJpdmVyX2lvY3RsKGlub2RlLCBmaWxlLCBkaXNrLCBjbWQsIGFyZyk7CisJZGVmYXVsdDoKKwkJaWYgKGRpc2stPmZvcHMtPmNvbXBhdF9pb2N0bCkKKwkJCXJldCA9IGRpc2stPmZvcHMtPmNvbXBhdF9pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CisJCWlmIChyZXQgPT0gLUVOT0lPQ1RMQ01EKQorCQkJcmV0ID0gY29tcGF0X2Jsa2Rldl9kcml2ZXJfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOworCQlyZXR1cm4gcmV0OworCX0KIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDA0NTE4OTIuLjU5MTczYTYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJCSAqICAgcHJvY2Vzc2luZy4KIAkJICovCiAJCWJsa19yZW1vdmVfcGx1ZyhxKTsKLQkJcS0+cmVxdWVzdF9mbihxKTsKKwkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQlicmVhazsKIAogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX1NPUlQ6CkBAIC05NTAsNyArOTUwLDcgQEAKIAkJICAgIGJsa19vcmRlcmVkX2N1cl9zZXEocSkgPT0gUVVFVUVfT1JEU0VRX0RSQUlOICYmCiAJCSAgICBibGtfb3JkZXJlZF9yZXFfc2VxKGZpcnN0X3JxKSA+IFFVRVVFX09SRFNFUV9EUkFJTikgewogCQkJYmxrX29yZGVyZWRfY29tcGxldGVfc2VxKHEsIFFVRVVFX09SRFNFUV9EUkFJTiwgMCk7Ci0JCQlxLT5yZXF1ZXN0X2ZuKHEpOworCQkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQl9CiAJfQogfQpAQCAtMTEwOSw4ICsxMTA5LDcgQEAKIAllbHZfZHJhaW5fZWxldmF0b3IocSk7CiAKIAl3aGlsZSAocS0+cnEuZWx2cHJpdikgewotCQlibGtfcmVtb3ZlX3BsdWcocSk7Ci0JCXEtPnJlcXVlc3RfZm4ocSk7CisJCWJsa19zdGFydF9xdWV1ZWluZyhxKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtMTE2NiwxNSArMTE2NSwxMCBAQAogCQkJICBzaXplX3QgY291bnQpCiB7CiAJY2hhciBlbGV2YXRvcl9uYW1lW0VMVl9OQU1FX01BWF07Ci0Jc2l6ZV90IGxlbjsKIAlzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZTsKIAotCWVsZXZhdG9yX25hbWVbc2l6ZW9mKGVsZXZhdG9yX25hbWUpIC0gMV0gPSAnXDAnOwotCXN0cm5jcHkoZWxldmF0b3JfbmFtZSwgbmFtZSwgc2l6ZW9mKGVsZXZhdG9yX25hbWUpIC0gMSk7Ci0JbGVuID0gc3RybGVuKGVsZXZhdG9yX25hbWUpOwotCi0JaWYgKGxlbiAmJiBlbGV2YXRvcl9uYW1lW2xlbiAtIDFdID09ICdcbicpCi0JCWVsZXZhdG9yX25hbWVbbGVuIC0gMV0gPSAnXDAnOworCXN0cmxjcHkoZWxldmF0b3JfbmFtZSwgbmFtZSwgc2l6ZW9mKGVsZXZhdG9yX25hbWUpKTsKKwlzdHJzdHJpcChlbGV2YXRvcl9uYW1lKTsKIAogCWUgPSBlbGV2YXRvcl9nZXQoZWxldmF0b3JfbmFtZSk7CiAJaWYgKCFlKSB7CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCA0Y2QzNDMzLi40ZTVlNzQ5IDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtMzU4LDcgKzM1OSw2IEBACiAvKioKICAqIGJsa19hbGxvY19kZXZ0IC0gYWxsb2NhdGUgYSBkZXZfdCBmb3IgYSBwYXJ0aXRpb24KICAqIEBwYXJ0OiBwYXJ0aXRpb24gdG8gYWxsb2NhdGUgZGV2X3QgZm9yCi0gKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcKICAqIEBkZXZ0OiBvdXQgcGFyYW1ldGVyIGZvciByZXN1bHRpbmcgZGV2X3QKICAqCiAgKiBBbGxvY2F0ZSBhIGRldl90IGZvciBibG9jayBkZXZpY2UuCkBAIC01MzUsNyArNTM1LDcgQEAKIC8qKgogICogZ2V0X2dlbmRpc2sgLSBnZXQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGRldmljZQogICogQGRldnQ6IGRldmljZSB0byBnZXQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGZvcgotICogQHBhcnQ6IHJldHVybmVkIHBhcnRpdGlvbiBpbmRleAorICogQHBhcnRubzogcmV0dXJuZWQgcGFydGl0aW9uIGluZGV4CiAgKgogICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBwYXJ0aXRpb25pbmcKICAqIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIEBkZXZ0LgpAQCAtNzI4LDEyICs3MjgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhcnRpdGlvbnNfb3AgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhcnRpdGlvbnNfb3AgPSB7CiAJLnN0YXJ0CT0gc2hvd19wYXJ0aXRpb25fc3RhcnQsCiAJLm5leHQJPSBkaXNrX3NlcWZfbmV4dCwKIAkuc3RvcAk9IGRpc2tfc2VxZl9zdG9wLAogCS5zaG93CT0gc2hvd19wYXJ0aXRpb24KIH07CisKK3N0YXRpYyBpbnQgcGFydGl0aW9uc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcGFydGl0aW9uc19vcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGFydGl0aW9uc19vcGVyYXRpb25zID0geworCS5vcGVuCQk9IHBhcnRpdGlvbnNfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKICNlbmRpZgogCiAKQEAgLTk5MywxMiArMTAwNSwzMiBAQAogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGlza3N0YXRzX29wID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkaXNrc3RhdHNfb3AgPSB7CiAJLnN0YXJ0CT0gZGlza19zZXFmX3N0YXJ0LAogCS5uZXh0CT0gZGlza19zZXFmX25leHQsCiAJLnN0b3AJPSBkaXNrX3NlcWZfc3RvcCwKIAkuc2hvdwk9IGRpc2tzdGF0c19zaG93CiB9OworCitzdGF0aWMgaW50IGRpc2tzdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmZGlza3N0YXRzX29wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19kaXNrc3RhdHNfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBkaXNrc3RhdHNfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHJvY19nZW5oZF9pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoImRpc2tzdGF0cyIsIDAsIE5VTEwsICZwcm9jX2Rpc2tzdGF0c19vcGVyYXRpb25zKTsKKwlwcm9jX2NyZWF0ZSgicGFydGl0aW9ucyIsIDAsIE5VTEwsICZwcm9jX3BhcnRpdGlvbnNfb3BlcmF0aW9ucyk7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChwcm9jX2dlbmhkX2luaXQpOwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIHN0YXRpYyB2b2lkIG1lZGlhX2NoYW5nZV9ub3RpZnlfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IDM4YmVlMzIuLmM4MzJkNjMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtMjAxLDk3ICsyMDEsNDEgQEAKIAlyZXR1cm4gcHV0X3VzZXIodmFsLCAodTY0IF9fdXNlciAqKWFyZyk7CiB9CiAKLXN0YXRpYyBpbnQgYmxrZGV2X2xvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKLQkJCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoraW50IF9fYmxrZGV2X2RyaXZlcl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7Ci0JaW50IHJldCwgbjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBCTEtSQUdFVDoKLQljYXNlIEJMS0ZSQUdFVDoKLQkJaWYgKCFhcmcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYmRpID0gYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKGJkZXYpOwotCQlpZiAoYmRpID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT1RUWTsKLQkJcmV0dXJuIHB1dF9sb25nKGFyZywgKGJkaS0+cmFfcGFnZXMgKiBQQUdFX0NBQ0hFX1NJWkUpIC8gNTEyKTsKLQljYXNlIEJMS1JPR0VUOgotCQlyZXR1cm4gcHV0X2ludChhcmcsIGJkZXZfcmVhZF9vbmx5KGJkZXYpICE9IDApOwotCWNhc2UgQkxLQlNaR0VUOiAvKiBnZXQgdGhlIGxvZ2ljYWwgYmxvY2sgc2l6ZSAoY2YuIEJMS1NTWkdFVCkgKi8KLQkJcmV0dXJuIHB1dF9pbnQoYXJnLCBibG9ja19zaXplKGJkZXYpKTsKLQljYXNlIEJMS1NTWkdFVDogLyogZ2V0IGJsb2NrIGRldmljZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSAqLwotCQlyZXR1cm4gcHV0X2ludChhcmcsIGJkZXZfaGFyZHNlY3Rfc2l6ZShiZGV2KSk7Ci0JY2FzZSBCTEtTRUNUR0VUOgotCQlyZXR1cm4gcHV0X3VzaG9ydChhcmcsIGJkZXZfZ2V0X3F1ZXVlKGJkZXYpLT5tYXhfc2VjdG9ycyk7Ci0JY2FzZSBCTEtSQVNFVDoKLQljYXNlIEJMS0ZSQVNFVDoKLQkJaWYoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQkJYmRpID0gYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKGJkZXYpOwotCQlpZiAoYmRpID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT1RUWTsKLQkJYmRpLT5yYV9wYWdlcyA9IChhcmcgKiA1MTIpIC8gUEFHRV9DQUNIRV9TSVpFOwotCQlyZXR1cm4gMDsKLQljYXNlIEJMS0JTWlNFVDoKLQkJLyogc2V0IHRoZSBsb2dpY2FsIGJsb2NrIHNpemUgKi8KLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCWlmICghYXJnKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChnZXRfdXNlcihuLCAoaW50IF9fdXNlciAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChiZF9jbGFpbShiZGV2LCBmaWxlKSA8IDApCi0JCQlyZXR1cm4gLUVCVVNZOwotCQlyZXQgPSBzZXRfYmxvY2tzaXplKGJkZXYsIG4pOwotCQliZF9yZWxlYXNlKGJkZXYpOwotCQlyZXR1cm4gcmV0OwotCWNhc2UgQkxLUEc6Ci0JCXJldHVybiBibGtwZ19pb2N0bChiZGV2LCAoc3RydWN0IGJsa3BnX2lvY3RsX2FyZyBfX3VzZXIgKikgYXJnKTsKLQljYXNlIEJMS1JSUEFSVDoKLQkJcmV0dXJuIGJsa2Rldl9yZXJlYWRfcGFydChiZGV2KTsKLQljYXNlIEJMS0dFVFNJWkU6Ci0JCWlmICgoYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSA+IH4wVUwpCi0JCQlyZXR1cm4gLUVGQklHOwotCQlyZXR1cm4gcHV0X3Vsb25nKGFyZywgYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KTsKLQljYXNlIEJMS0dFVFNJWkU2NDoKLQkJcmV0dXJuIHB1dF91NjQoYXJnLCBiZGV2LT5iZF9pbm9kZS0+aV9zaXplKTsKLQljYXNlIEJMS1RSQUNFU1RBUlQ6Ci0JY2FzZSBCTEtUUkFDRVNUT1A6Ci0JY2FzZSBCTEtUUkFDRVNFVFVQOgotCWNhc2UgQkxLVFJBQ0VURUFSRE9XTjoKLQkJcmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIChjaGFyIF9fdXNlciAqKSBhcmcpOwotCX0KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi1pbnQgYmxrZGV2X2RyaXZlcl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXN0cnVjdCBnZW5kaXNrICpkaXNrLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoteworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlpbnQgcmV0OwotCWlmIChkaXNrLT5mb3BzLT51bmxvY2tlZF9pb2N0bCkKLQkJcmV0dXJuIGRpc2stPmZvcHMtPnVubG9ja2VkX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAotCWlmIChkaXNrLT5mb3BzLT5pb2N0bCkgeworCWlmIChkaXNrLT5mb3BzLT5pb2N0bCkKKwkJcmV0dXJuIGRpc2stPmZvcHMtPmlvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKKworCWlmIChkaXNrLT5mb3BzLT5sb2NrZWRfaW9jdGwpIHsKIAkJbG9ja19rZXJuZWwoKTsKLQkJcmV0ID0gZGlzay0+Zm9wcy0+aW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0ID0gZGlzay0+Zm9wcy0+bG9ja2VkX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAtRU5PVFRZOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X2RyaXZlcl9pb2N0bCk7CisvKgorICogRm9yIHRoZSByZWNvcmQ6IF9HUEwgaGVyZSBpcyBvbmx5IGJlY2F1c2Ugc29tZWJvZHkgZGVjaWRlZCB0byBzbGFwIGl0CisgKiBvbiB0aGUgcHJldmlvdXMgZXhwb3J0LiAgU2hlZXIgaWRpb2N5LCBzaW5jZSBpdCB3YXNuJ3QgY29weXJpZ2h0YWJsZQorICogYXQgYWxsIGFuZCBjb3VsZCBiZSBvcGVuLWNvZGVkIHdpdGhvdXQgYW55IGV4cG9ydHMgYnkgYW55Ym9keSB3aG8gY2FyZXMuCisgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKF9fYmxrZGV2X2RyaXZlcl9pb2N0bCk7CiAKIC8qCiAgKiBhbHdheXMga2VlcCB0aGlzIGluIHN5bmMgd2l0aCBjb21wYXRfYmxrZGV2X2lvY3RsKCkgYW5kCiAgKiBjb21wYXRfYmxrZGV2X2xvY2tlZF9pb2N0bCgpCiAgKi8KLWludCBibGtkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwKK2ludCBibGtkZXZfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBjbWQsCiAJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaTsKKwlsb2ZmX3Qgc2l6ZTsKIAlpbnQgcmV0LCBuOwogCiAJc3dpdGNoKGNtZCkgewpAQCAtMjk5LDcgKzI0Myw3IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCi0JCXJldCA9IGJsa2Rldl9kcml2ZXJfaW9jdGwoaW5vZGUsIGZpbGUsIGRpc2ssIGNtZCwgYXJnKTsKKwkJcmV0ID0gX19ibGtkZXZfZHJpdmVyX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAkJLyogLUVJTlZBTCB0byBoYW5kbGUgb2xkIHVuY29ycmVjdGVkIGRyaXZlcnMgKi8KIAkJaWYgKHJldCAhPSAtRUlOVkFMICYmIHJldCAhPSAtRU5PVFRZKQogCQkJcmV0dXJuIHJldDsKQEAgLTMxMSw3ICsyNTUsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgQkxLUk9TRVQ6Ci0JCXJldCA9IGJsa2Rldl9kcml2ZXJfaW9jdGwoaW5vZGUsIGZpbGUsIGRpc2ssIGNtZCwgYXJnKTsKKwkJcmV0ID0gX19ibGtkZXZfZHJpdmVyX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAkJLyogLUVJTlZBTCB0byBoYW5kbGUgb2xkIHVuY29ycmVjdGVkIGRyaXZlcnMgKi8KIAkJaWYgKHJldCAhPSAtRUlOVkFMICYmIHJldCAhPSAtRU5PVFRZKQogCQkJcmV0dXJuIHJldDsKQEAgLTMyNyw3ICsyNzEsNyBAQAogCWNhc2UgQkxLRElTQ0FSRDogewogCQl1aW50NjRfdCByYW5nZVsyXTsKIAotCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCWlmICghKG1vZGUgJiBGTU9ERV9XUklURSkpCiAJCQlyZXR1cm4gLUVCQURGOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihyYW5nZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YocmFuZ2UpKSkKQEAgLTM1NywxNCArMzAxLDc1IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CiAJfQotCX0KLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gYmxrZGV2X2xvY2tlZF9pb2N0bChmaWxlLCBiZGV2LCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCWlmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKQorCWNhc2UgQkxLUkFHRVQ6CisJY2FzZSBCTEtGUkFHRVQ6CisJCWlmICghYXJnKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhiZGV2KTsKKwkJaWYgKGJkaSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9UVFk7CisJCXJldHVybiBwdXRfbG9uZyhhcmcsIChiZGktPnJhX3BhZ2VzICogUEFHRV9DQUNIRV9TSVpFKSAvIDUxMik7CisJY2FzZSBCTEtST0dFVDoKKwkJcmV0dXJuIHB1dF9pbnQoYXJnLCBiZGV2X3JlYWRfb25seShiZGV2KSAhPSAwKTsKKwljYXNlIEJMS0JTWkdFVDogLyogZ2V0IHRoZSBsb2dpY2FsIGJsb2NrIHNpemUgKGNmLiBCTEtTU1pHRVQpICovCisJCXJldHVybiBwdXRfaW50KGFyZywgYmxvY2tfc2l6ZShiZGV2KSk7CisJY2FzZSBCTEtTU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2UgaGFyZHdhcmUgc2VjdG9yIHNpemUgKi8KKwkJcmV0dXJuIHB1dF9pbnQoYXJnLCBiZGV2X2hhcmRzZWN0X3NpemUoYmRldikpOworCWNhc2UgQkxLU0VDVEdFVDoKKwkJcmV0dXJuIHB1dF91c2hvcnQoYXJnLCBiZGV2X2dldF9xdWV1ZShiZGV2KS0+bWF4X3NlY3RvcnMpOworCWNhc2UgQkxLUkFTRVQ6CisJY2FzZSBCTEtGUkFTRVQ6CisJCWlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FQUNDRVM7CisJCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhiZGV2KTsKKwkJaWYgKGJkaSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9UVFk7CisJCWxvY2tfa2VybmVsKCk7CisJCWJkaS0+cmFfcGFnZXMgPSAoYXJnICogNTEyKSAvIFBBR0VfQ0FDSEVfU0laRTsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gMDsKKwljYXNlIEJMS0JTWlNFVDoKKwkJLyogc2V0IHRoZSBsb2dpY2FsIGJsb2NrIHNpemUgKi8KKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FQUNDRVM7CisJCWlmICghYXJnKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnZXRfdXNlcihuLCAoaW50IF9fdXNlciAqKSBhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICghKG1vZGUgJiBGTU9ERV9FWENMKSAmJiBiZF9jbGFpbShiZGV2LCAmYmRldikgPCAwKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0ID0gc2V0X2Jsb2Nrc2l6ZShiZGV2LCBuKTsKKwkJaWYgKCEobW9kZSAmIEZNT0RFX0VYQ0wpKQorCQkJYmRfcmVsZWFzZShiZGV2KTsKIAkJcmV0dXJuIHJldDsKLQotCXJldHVybiBibGtkZXZfZHJpdmVyX2lvY3RsKGlub2RlLCBmaWxlLCBkaXNrLCBjbWQsIGFyZyk7CisJY2FzZSBCTEtQRzoKKwkJbG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gYmxrcGdfaW9jdGwoYmRldiwgKHN0cnVjdCBibGtwZ19pb2N0bF9hcmcgX191c2VyICopIGFyZyk7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJYnJlYWs7CisJY2FzZSBCTEtSUlBBUlQ6CisJCWxvY2tfa2VybmVsKCk7CisJCXJldCA9IGJsa2Rldl9yZXJlYWRfcGFydChiZGV2KTsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlicmVhazsKKwljYXNlIEJMS0dFVFNJWkU6CisJCXNpemUgPSBiZGV2LT5iZF9pbm9kZS0+aV9zaXplOworCQlpZiAoKHNpemUgPj4gOSkgPiB+MFVMKQorCQkJcmV0dXJuIC1FRkJJRzsKKwkJcmV0dXJuIHB1dF91bG9uZyhhcmcsIHNpemUgPj4gOSk7CisJY2FzZSBCTEtHRVRTSVpFNjQ6CisJCXJldHVybiBwdXRfdTY0KGFyZywgYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSk7CisJY2FzZSBCTEtUUkFDRVNUQVJUOgorCWNhc2UgQkxLVFJBQ0VTVE9QOgorCWNhc2UgQkxLVFJBQ0VTRVRVUDoKKwljYXNlIEJMS1RSQUNFVEVBUkRPV046CisJCWxvY2tfa2VybmVsKCk7CisJCXJldCA9IGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIChjaGFyIF9fdXNlciAqKSBhcmcpOworCQl1bmxvY2tfa2VybmVsKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IF9fYmxrZGV2X2RyaXZlcl9pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CisJfQorCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtkZXZfaW9jdGwpOwpkaWZmIC0tZ2l0IGEvYmxvY2svc2NzaV9pb2N0bC5jIGIvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IGMzNDI3MmEuLjU5NjNjZjkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3Njc2lfaW9jdGwuYworKysgYi9ibG9jay9zY3NpX2lvY3RsLmMKQEAgLTE5MCwxMiArMTkwLDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChibGtfc2V0X2NtZF9maWx0ZXJfZGVmYXVsdHMpOwogCiBzdGF0aWMgaW50IGJsa19maWxsX3NnaGRyX3JxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICAgIHN0cnVjdCBzZ19pb19oZHIgKmhkciwgc3RydWN0IGZpbGUgKmZpbGUpCisJCQkgICAgIHN0cnVjdCBzZ19pb19oZHIgKmhkciwgZm1vZGVfdCBtb2RlKQogewogCWlmIChjb3B5X2Zyb21fdXNlcihycS0+Y21kLCBoZHItPmNtZHAsIGhkci0+Y21kX2xlbikpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChibGtfdmVyaWZ5X2NvbW1hbmQoJnEtPmNtZF9maWx0ZXIsIHJxLT5jbWQsCi0JCQkgICAgICAgZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCWlmIChibGtfdmVyaWZ5X2NvbW1hbmQoJnEtPmNtZF9maWx0ZXIsIHJxLT5jbWQsIG1vZGUgJiBGTU9ERV9XUklURSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAkvKgpAQCAtMjYwLDggKzI1OSw4IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgc2dfaW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQlzdHJ1Y3QgZ2VuZGlzayAqYmRfZGlzaywgc3RydWN0IHNnX2lvX2hkciAqaGRyKQorc3RhdGljIGludCBzZ19pbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGdlbmRpc2sgKmJkX2Rpc2ssCisJCXN0cnVjdCBzZ19pb19oZHIgKmhkciwgZm1vZGVfdCBtb2RlKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKIAlpbnQgd3JpdGluZyA9IDAsIHJldCA9IDA7CkBAIC0yOTMsNyArMjkyLDcgQEAKIAlpZiAoIXJxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChibGtfZmlsbF9zZ2hkcl9ycShxLCBycSwgaGRyLCBmaWxlKSkgeworCWlmIChibGtfZmlsbF9zZ2hkcl9ycShxLCBycSwgaGRyLCBtb2RlKSkgewogCQlibGtfcHV0X3JlcXVlc3QocnEpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0zODAsMTEgKzM3OSwxMSBAQAogICogICAgICBieXRlcyBpbiBvbmUgaW50KSB3aGVyZSB0aGUgbG93ZXN0IGJ5dGUgaXMgdGhlIFNDU0kgc3RhdHVzLgogICovCiAjZGVmaW5lIE9NQVhfU0JfTEVOIDE2ICAgICAgICAgIC8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi1pbnQgc2dfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCSAgc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQgX191c2VyICpzaWMpCitpbnQgc2dfc2NzaV9pb2N0bChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSwKKwkJc3RydWN0IHNjc2lfaW9jdGxfY29tbWFuZCBfX3VzZXIgKnNpYykKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaW50IGVyciwgd3JpdGVfcGVybSA9IDA7CisJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgaW5fbGVuLCBvdXRfbGVuLCBieXRlcywgb3Bjb2RlLCBjbWRsZW47CiAJY2hhciAqYnVmZmVyID0gTlVMTCwgc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKIApAQCAtNDI2LDExICs0MjUsNyBAQAogCWlmIChpbl9sZW4gJiYgY29weV9mcm9tX3VzZXIoYnVmZmVyLCBzaWMtPmRhdGEgKyBjbWRsZW4sIGluX2xlbikpCiAJCWdvdG8gZXJyb3I7CiAKLQkvKiBzY3NpX2lvY3RsIHBhc3NlcyBOVUxMICovCi0JaWYgKGZpbGUgJiYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKLQkJd3JpdGVfcGVybSA9IDE7Ci0KLQllcnIgPSBibGtfdmVyaWZ5X2NvbW1hbmQoJnEtPmNtZF9maWx0ZXIsIHJxLT5jbWQsIHdyaXRlX3Blcm0pOworCWVyciA9IGJsa192ZXJpZnlfY29tbWFuZCgmcS0+Y21kX2ZpbHRlciwgcnEtPmNtZCwgbW9kZSAmIEZNT0RFX1dSSVRFKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCkBAIC01MjIsOCArNTE3LDggQEAKIAlyZXR1cm4gX19ibGtfc2VuZF9nZW5lcmljKHEsIGJkX2Rpc2ssIEdQQ01EX1NUQVJUX1NUT1BfVU5JVCwgZGF0YSk7CiB9CiAKLWludCBzY3NpX2NtZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCSAgIHN0cnVjdCBnZW5kaXNrICpiZF9kaXNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQoraW50IHNjc2lfY21kX2lvY3RsKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZ2VuZGlzayAqYmRfZGlzaywgZm1vZGVfdCBtb2RlLAorCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCWludCBlcnI7CiAKQEAgLTU2NCw3ICs1NTksNyBAQAogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmaGRyLCBhcmcsIHNpemVvZihoZHIpKSkKIAkJCQlicmVhazsKLQkJCWVyciA9IHNnX2lvKGZpbGUsIHEsIGJkX2Rpc2ssICZoZHIpOworCQkJZXJyID0gc2dfaW8ocSwgYmRfZGlzaywgJmhkciwgbW9kZSk7CiAJCQlpZiAoZXJyID09IC1FRkFVTFQpCiAJCQkJYnJlYWs7CiAKQEAgLTYxMiw3ICs2MDcsNyBAQAogCQkJaGRyLmNtZHAgPSAoKHN0cnVjdCBjZHJvbV9nZW5lcmljX2NvbW1hbmQgX191c2VyKikgYXJnKS0+Y21kOwogCQkJaGRyLmNtZF9sZW4gPSBzaXplb2YoY2djLmNtZCk7CiAKLQkJCWVyciA9IHNnX2lvKGZpbGUsIHEsIGJkX2Rpc2ssICZoZHIpOworCQkJZXJyID0gc2dfaW8ocSwgYmRfZGlzaywgJmhkciwgbW9kZSk7CiAJCQlpZiAoZXJyID09IC1FRkFVTFQpCiAJCQkJYnJlYWs7CiAKQEAgLTYzNiw3ICs2MzEsNyBAQAogCQkJaWYgKCFhcmcpCiAJCQkJYnJlYWs7CiAKLQkJCWVyciA9IHNnX3Njc2lfaW9jdGwoZmlsZSwgcSwgYmRfZGlzaywgYXJnKTsKKwkJCWVyciA9IHNnX3Njc2lfaW9jdGwocSwgYmRfZGlzaywgbW9kZSwgYXJnKTsKIAkJCWJyZWFrOwogCQljYXNlIENEUk9NQ0xPU0VUUkFZOgogCQkJZXJyID0gYmxrX3NlbmRfc3RhcnRfc3RvcChxLCBiZF9kaXNrLCAweDAzKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY190eC5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKaW5kZXggZTgzNjJjMS4uZGNiZjFiZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKQEAgLTExNSwzNCArMTE1LDMyIEBACiAgKgkoc3RhcnQpIGRlcGVuZGVudCBvcGVyYXRpb25zIG9uIHRoZWlyIHRhcmdldCBjaGFubmVsCiAgKiBAdHg6IHRyYW5zYWN0aW9uIHdpdGggZGVwZW5kZW5jaWVzCiAgKi8KLXZvaWQKLWFzeW5jX3R4X3J1bl9kZXBlbmRlbmNpZXMoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKK3ZvaWQgYXN5bmNfdHhfcnVuX2RlcGVuZGVuY2llcyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQogewotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqbmV4dCA9IHR4LT5uZXh0OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVwID0gdHgtPm5leHQ7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXBfbmV4dDsKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CiAKLQlpZiAoIW5leHQpCisJaWYgKCFkZXApCiAJCXJldHVybjsKIAotCXR4LT5uZXh0ID0gTlVMTDsKLQljaGFuID0gbmV4dC0+Y2hhbjsKKwljaGFuID0gZGVwLT5jaGFuOwogCiAJLyoga2VlcCBzdWJtaXR0aW5nIHVwIHVudGlsIGEgY2hhbm5lbCBzd2l0Y2ggaXMgZGV0ZWN0ZWQKIAkgKiBpbiB0aGF0IGNhc2Ugd2Ugd2lsbCBiZSBjYWxsZWQgYWdhaW4gYXMgYSByZXN1bHQgb2YKIAkgKiBwcm9jZXNzaW5nIHRoZSBpbnRlcnJ1cHQgZnJvbSBhc3luY190eF9jaGFubmVsX3N3aXRjaAogCSAqLwotCXdoaWxlIChuZXh0ICYmIG5leHQtPmNoYW4gPT0gY2hhbikgewotCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKl9uZXh0OworCWZvciAoOyBkZXA7IGRlcCA9IGRlcF9uZXh0KSB7CisJCXNwaW5fbG9ja19iaCgmZGVwLT5sb2NrKTsKKwkJZGVwLT5wYXJlbnQgPSBOVUxMOworCQlkZXBfbmV4dCA9IGRlcC0+bmV4dDsKKwkJaWYgKGRlcF9uZXh0ICYmIGRlcF9uZXh0LT5jaGFuID09IGNoYW4pCisJCQlkZXAtPm5leHQgPSBOVUxMOyAvKiAtPm5leHQgd2lsbCBiZSBzdWJtaXR0ZWQgKi8KKwkJZWxzZQorCQkJZGVwX25leHQgPSBOVUxMOyAvKiBzdWJtaXQgY3VycmVudCBkZXAgYW5kIHRlcm1pbmF0ZSAqLworCQlzcGluX3VubG9ja19iaCgmZGVwLT5sb2NrKTsKIAotCQlzcGluX2xvY2tfYmgoJm5leHQtPmxvY2spOwotCQluZXh0LT5wYXJlbnQgPSBOVUxMOwotCQlfbmV4dCA9IG5leHQtPm5leHQ7Ci0JCWlmIChfbmV4dCAmJiBfbmV4dC0+Y2hhbiA9PSBjaGFuKQotCQkJbmV4dC0+bmV4dCA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2JoKCZuZXh0LT5sb2NrKTsKLQotCQluZXh0LT50eF9zdWJtaXQobmV4dCk7Ci0JCW5leHQgPSBfbmV4dDsKKwkJZGVwLT50eF9zdWJtaXQoZGVwKTsKIAl9CiAKIAljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDU5ZjMzZmEuLmQzOGY0M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTc4LDYgKzc4LDggQEAKIAogc291cmNlICJkcml2ZXJzL3VzYi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvdXdiL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tbWMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lbXN0aWNrL0tjb25maWciCkBAIC0xMDEsNCArMTAzLDYgQEAKIHNvdXJjZSAiZHJpdmVycy91aW8vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3hlbi9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9LY29uZmlnIgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMjczNWJkZS4uMjUwM2Y3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC04Miw2ICs4Miw3IEBACiBvYmoteQkJCQkrPSBsZ3Vlc3QvCiBvYmotJChDT05GSUdfQ1BVX0ZSRVEpCQkrPSBjcHVmcmVxLwogb2JqLSQoQ09ORklHX0NQVV9JRExFKQkJKz0gY3B1aWRsZS8KK29iai15CQkJCSs9IGlkbGUvCiBvYmotJChDT05GSUdfTU1DKQkJKz0gbW1jLwogb2JqLSQoQ09ORklHX01FTVNUSUNLKQkJKz0gbWVtc3RpY2svCiBvYmotJChDT05GSUdfTkVXX0xFRFMpCQkrPSBsZWRzLwpAQCAtOTksMyArMTAwLDUgQEAKIG9iai0kKENPTkZJR19TU0IpCQkrPSBzc2IvCiBvYmotJChDT05GSUdfVklSVElPKQkJKz0gdmlydGlvLwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUikJCSs9IHJlZ3VsYXRvci8KK29iai0kKENPTkZJR19TVEFHSU5HKQkJKz0gc3RhZ2luZy8KK29iai0kKENPTkZJR19VV0IpCQkrPSB1d2IvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IGRhNDliMDAuLmY0ZjYzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC00Miw3ICs0Miw3IEBACiAKIGNvbmZpZyBBQ1BJX1NMRUVQCiAJYm9vbAotCWRlcGVuZHMgb24gUE1fU0xFRVAKKwlkZXBlbmRzIG9uIFNVU1BFTkQgfHwgSElCRVJOQVRJT04KIAlkZWZhdWx0IHkKIAogY29uZmlnIEFDUElfUFJPQ0ZTCkBAIC0xNTcsMTggKzE1NywxMSBAQAogCSAgYXBwbGljYXRpb25zIHRvIHBlcmZvcm0gYmFzaWMgZmFuIGNvbnRyb2wgKG9uLCBvZmYsIHN0YXR1cykuCiAKIGNvbmZpZyBBQ1BJX0RPQ0sKLQl0cmlzdGF0ZSAiRG9jayIKKwlib29sICJEb2NrIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBBQ1BJIGNvbnRyb2xsZWQgZG9ja2luZyBzdGF0aW9ucwotCi1jb25maWcgQUNQSV9CQVkKLQl0cmlzdGF0ZSAiUmVtb3ZhYmxlIERyaXZlIEJheSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gQUNQSV9ET0NLCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBBQ1BJIGNvbnRyb2xsZWQgcmVtb3ZhYmxlIGRyaXZlCi0JICBiYXlzIHN1Y2ggYXMgdGhlIElCTSB1bHRyYWJheSBvciB0aGUgRGVsbCBNb2R1bGUgQmF5LgorCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBBQ1BJIGNvbnRyb2xsZWQgZG9ja2luZyBzdGF0aW9ucyBhbmQgcmVtb3ZhYmxlCisJICBkcml2ZSBiYXlzIHN1Y2ggYXMgdGhlIElCTSB1bHRyYWJheSBvciB0aGUgRGVsbCBNb2R1bGUgQmF5LgogCiBjb25maWcgQUNQSV9QUk9DRVNTT1IKIAl0cmlzdGF0ZSAiUHJvY2Vzc29yIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IDUyYTRjZDQuLmQ5MWMwMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTQ1LDE0ICs0NSwxMyBAQAogb2JqLSQoQ09ORklHX0FDUElfQlVUVE9OKQkrPSBidXR0b24ubwogb2JqLSQoQ09ORklHX0FDUElfRkFOKQkJKz0gZmFuLm8KIG9iai0kKENPTkZJR19BQ1BJX0RPQ0spCQkrPSBkb2NrLm8KLW9iai0kKENPTkZJR19BQ1BJX0JBWSkJCSs9IGJheS5vCiBvYmotJChDT05GSUdfQUNQSV9WSURFTykJKz0gdmlkZW8ubwogb2JqLXkJCQkJKz0gcGNpX3Jvb3QubyBwY2lfbGluay5vIHBjaV9pcnEubyBwY2lfYmluZC5vCiBvYmotJChDT05GSUdfQUNQSV9QQ0lfU0xPVCkJKz0gcGNpX3Nsb3Qubwotb2JqLSQoQ09ORklHX0FDUElfUE9XRVIpCSs9IHBvd2VyLm8KIG9iai0kKENPTkZJR19BQ1BJX1BST0NFU1NPUikJKz0gcHJvY2Vzc29yLm8KIG9iai0kKENPTkZJR19BQ1BJX0NPTlRBSU5FUikJKz0gY29udGFpbmVyLm8KIG9iai0kKENPTkZJR19BQ1BJX1RIRVJNQUwpCSs9IHRoZXJtYWwubworb2JqLSQoQ09ORklHX0FDUElfUE9XRVIpCSs9IHBvd2VyLm8KIG9iai0kKENPTkZJR19BQ1BJX1NZU1RFTSkJKz0gc3lzdGVtLm8gZXZlbnQubwogb2JqLSQoQ09ORklHX0FDUElfREVCVUcpCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19BQ1BJX05VTUEpCQkrPSBudW1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggODMxODgzYi4uZDcyYTFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5IGNoYXJnZXI7CiAjZW5kaWYKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2U7Ci0JdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdGU7CiB9OwogCiAjZGVmaW5lIHRvX2FjcGlfYWMoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBhY3BpX2FjLCBjaGFyZ2VyKTsKQEAgLTI2OSw3ICsyNjksNyBAQAogCWFjLT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9BQ19ERVZJQ0VfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfQUNfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGFjOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBhYzsKIAogCXJlc3VsdCA9IGFjcGlfYWNfZ2V0X3N0YXRlKGFjKTsKIAlpZiAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCmluZGV4IDVmMTEyN2EuLjcxZDIxYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKQEAgLTE5NCw4ICsxOTQsNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfbWVtb3J5X2NoZWNrX2RldmljZShzdHJ1Y3QgYWNwaV9tZW1vcnlfZGV2aWNlICptZW1fZGV2aWNlKQogewotCXVuc2lnbmVkIGxvbmcgY3VycmVudF9zdGF0dXM7Ci0KKwl1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudF9zdGF0dXM7CiAKIAkvKiBHZXQgZGV2aWNlIHByZXNlbnQvYWJzZW50IGluZm9ybWF0aW9uIGZyb20gdGhlIF9TVEEgKi8KIAlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfaW50ZWdlcihtZW1fZGV2aWNlLT5kZXZpY2UtPmhhbmRsZSwgIl9TVEEiLApAQCAtMjY0LDcgKzI2Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0OwogCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzsKLQl1bnNpZ25lZCBsb25nIGN1cnJlbnRfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50X3N0YXR1czsKIAogCiAJLyogSXNzdWUgdGhlIF9FSjAgY29tbWFuZCAqLwpAQCAtNDAzLDcgKzQwMiw3IEBACiAJbWVtX2RldmljZS0+ZGV2aWNlID0gZGV2aWNlOwogCXNwcmludGYoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCAiJXMiLCBBQ1BJX01FTU9SWV9ERVZJQ0VfTkFNRSk7CiAJc3ByaW50ZihhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCAiJXMiLCBBQ1BJX01FTU9SWV9ERVZJQ0VfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IG1lbV9kZXZpY2U7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IG1lbV9kZXZpY2U7CiAKIAkvKiBHZXQgdGhlIHJhbmdlIGZyb20gdGhlIF9DUlMgKi8KIAlyZXN1bHQgPSBhY3BpX21lbW9yeV9nZXRfZGV2aWNlX3Jlc291cmNlcyhtZW1fZGV2aWNlKTsKQEAgLTQ1NCw4ICs0NTMsOCBAQAogCQkvKiBjYWxsIGFkZF9tZW1vcnkgZnVuYyAqLwogCQlyZXN1bHQgPSBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlKG1lbV9kZXZpY2UpOwogCQlpZiAocmVzdWx0KQotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkiRXJyb3IgaW4gYWNwaV9tZW1vcnlfZW5hYmxlX2RldmljZVxuIikpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAorCQkJCSJFcnJvciBpbiBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlXG4iKTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYwppbmRleCBkM2QwODg2Li4xZTc0OTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCkBAIC00Miw3ICs0Miw3IEBACiAKICNkZWZpbmUgQVNVU19BQ1BJX1ZFUlNJT04gIjAuMzAiCiAKLSNkZWZpbmUgUFJPQ19BU1VTICAgICAgICJhc3VzIgkvL3RoZSBkaXJlY3RvcnkKKyNkZWZpbmUgUFJPQ19BU1VTICAgICAgICJhc3VzIgkvKiBUaGUgZGlyZWN0b3J5ICovCiAjZGVmaW5lIFBST0NfTUxFRCAgICAgICAibWxlZCIKICNkZWZpbmUgUFJPQ19XTEVEICAgICAgICJ3bGVkIgogI2RlZmluZSBQUk9DX1RMRUQgICAgICAgInRsZWQiCkBAIC02NiwxMCArNjYsMTAgQEAKIC8qCiAgKiBGbGFncyBmb3IgaG90ayBzdGF0dXMKICAqLwotI2RlZmluZSBNTEVEX09OICAgICAweDAxCS8vbWFpbCBMRUQKLSNkZWZpbmUgV0xFRF9PTiAgICAgMHgwMgkvL3dpcmVsZXNzIExFRAotI2RlZmluZSBUTEVEX09OICAgICAweDA0CS8vdG91Y2hwYWQgTEVECi0jZGVmaW5lIEJUX09OICAgICAgIDB4MDgJLy9pbnRlcm5hbCBCbHVldG9vdGgKKyNkZWZpbmUgTUxFRF9PTiAgICAgMHgwMQkvKiBNYWlsIExFRCAqLworI2RlZmluZSBXTEVEX09OICAgICAweDAyCS8qIFdpcmVsZXNzIExFRCAqLworI2RlZmluZSBUTEVEX09OICAgICAweDA0CS8qIFRvdWNocGFkIExFRCAqLworI2RlZmluZSBCVF9PTiAgICAgICAweDA4CS8qIEludGVybmFsIEJsdWV0b290aCAqLwogCiBNT0RVTEVfQVVUSE9SKCJKdWxpZW4gTGVyb3VnZSwgS2Fyb2wgS296aW1vciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKEFDUElfSE9US19OQU1FKTsKQEAgLTgyLDI4ICs4MiwyOCBAQAogbW9kdWxlX3BhcmFtKGFzdXNfZ2lkLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXN1c19naWQsICJHSUQgZm9yIGVudHJpZXMgaW4gL3Byb2MvYWNwaS9hc3VzIik7CiAKLS8qIEZvciBlYWNoIG1vZGVsLCBhbGwgZmVhdHVyZXMgaW1wbGVtZW50ZWQsIAorLyogRm9yIGVhY2ggbW9kZWwsIGFsbCBmZWF0dXJlcyBpbXBsZW1lbnRlZCwKICAqIHRob3NlIG1hcmtlZCB3aXRoIFIgYXJlIHJlbGF0aXZlIHRvIEhPVEssIEEgZm9yIGFic29sdXRlICovCiBzdHJ1Y3QgbW9kZWxfZGF0YSB7Ci0JY2hhciAqbmFtZTsJCS8vbmFtZSBvZiB0aGUgbGFwdG9wX19fX19fX19fX19fX19fX0EKLQljaGFyICptdF9tbGVkOwkJLy9tZXRob2QgdG8gaGFuZGxlIG1sZWRfX19fX19fX19fX19fUgotCWNoYXIgKm1sZWRfc3RhdHVzOwkvL25vZGUgdG8gaGFuZGxlIG1sZWQgcmVhZGluZ19fX19fX19BCi0JY2hhciAqbXRfd2xlZDsJCS8vbWV0aG9kIHRvIGhhbmRsZSB3bGVkX19fX19fX19fX19fX1IKLQljaGFyICp3bGVkX3N0YXR1czsJLy9ub2RlIHRvIGhhbmRsZSB3bGVkIHJlYWRpbmdfX19fX19fQQotCWNoYXIgKm10X3RsZWQ7CQkvL21ldGhvZCB0byBoYW5kbGUgdGxlZF9fX19fX19fX19fX19SCi0JY2hhciAqdGxlZF9zdGF0dXM7CS8vbm9kZSB0byBoYW5kbGUgdGxlZCByZWFkaW5nX19fX19fX0EKLQljaGFyICptdF9sZWRkOwkJLy9tZXRob2QgdG8gaGFuZGxlIExFRCBkaXNwbGF5X19fX19fUgotCWNoYXIgKm10X2J0X3N3aXRjaDsJLy9tZXRob2QgdG8gc3dpdGNoIEJsdWV0b290aCBvbi9vZmZfUgotCWNoYXIgKmJ0X3N0YXR1czsJLy9ubyBtb2RlbCBjdXJyZW50bHkgc3VwcG9ydHMgdGhpc19fPwotCWNoYXIgKm10X2xjZF9zd2l0Y2g7CS8vbWV0aG9kIHRvIHR1cm4gTENEIG9uL29mZl9fX19fX19fX0EKLQljaGFyICpsY2Rfc3RhdHVzOwkvL25vZGUgdG8gcmVhZCBMQ0QgcGFuZWwgc3RhdGVfX19fX19BCi0JY2hhciAqYnJpZ2h0bmVzc191cDsJLy9tZXRob2QgdG8gc2V0IGJyaWdodG5lc3MgdXBfX19fX19fQQotCWNoYXIgKmJyaWdodG5lc3NfZG93bjsJLy9ndWVzcyB3aGF0ID9fX19fX19fX19fX19fX19fX19fX19fQQotCWNoYXIgKmJyaWdodG5lc3Nfc2V0OwkvL21ldGhvZCB0byBzZXQgYWJzb2x1dGUgYnJpZ2h0bmVzc19SCi0JY2hhciAqYnJpZ2h0bmVzc19nZXQ7CS8vbWV0aG9kIHRvIGdldCBhYnNvbHV0ZSBicmlnaHRuZXNzX1IKLQljaGFyICpicmlnaHRuZXNzX3N0YXR1czsJLy9ub2RlIHRvIGdldCBicmlnaHRuZXNzX19fX19fX19fX19fQQotCWNoYXIgKmRpc3BsYXlfc2V0OwkvL21ldGhvZCB0byBzZXQgdmlkZW8gb3V0cHV0X19fX19fX19SCi0JY2hhciAqZGlzcGxheV9nZXQ7CS8vbWV0aG9kIHRvIGdldCB2aWRlbyBvdXRwdXRfX19fX19fX1IKKwljaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgbGFwdG9wX19fX19fX19fX19fX19fX0EgKi8KKwljaGFyICptdF9tbGVkOwkJLyogbWV0aG9kIHRvIGhhbmRsZSBtbGVkX19fX19fX19fX19fX1IgKi8KKwljaGFyICptbGVkX3N0YXR1czsJLyogbm9kZSB0byBoYW5kbGUgbWxlZCByZWFkaW5nX19fX19fX0EgKi8KKwljaGFyICptdF93bGVkOwkJLyogbWV0aG9kIHRvIGhhbmRsZSB3bGVkX19fX19fX19fX19fX1IgKi8KKwljaGFyICp3bGVkX3N0YXR1czsJLyogbm9kZSB0byBoYW5kbGUgd2xlZCByZWFkaW5nX19fX19fX0EgKi8KKwljaGFyICptdF90bGVkOwkJLyogbWV0aG9kIHRvIGhhbmRsZSB0bGVkX19fX19fX19fX19fX1IgKi8KKwljaGFyICp0bGVkX3N0YXR1czsJLyogbm9kZSB0byBoYW5kbGUgdGxlZCByZWFkaW5nX19fX19fX0EgKi8KKwljaGFyICptdF9sZWRkOwkJLyogbWV0aG9kIHRvIGhhbmRsZSBMRUQgZGlzcGxheV9fX19fX1IgKi8KKwljaGFyICptdF9idF9zd2l0Y2g7CS8qIG1ldGhvZCB0byBzd2l0Y2ggQmx1ZXRvb3RoIG9uL29mZl9SICovCisJY2hhciAqYnRfc3RhdHVzOwkvKiBubyBtb2RlbCBjdXJyZW50bHkgc3VwcG9ydHMgdGhpc19fPyAqLworCWNoYXIgKm10X2xjZF9zd2l0Y2g7CS8qIG1ldGhvZCB0byB0dXJuIExDRCBvbi9vZmZfX19fX19fX19BICovCisJY2hhciAqbGNkX3N0YXR1czsJLyogbm9kZSB0byByZWFkIExDRCBwYW5lbCBzdGF0ZV9fX19fX0EgKi8KKwljaGFyICpicmlnaHRuZXNzX3VwOwkvKiBtZXRob2QgdG8gc2V0IGJyaWdodG5lc3MgdXBfX19fX19fQSAqLworCWNoYXIgKmJyaWdodG5lc3NfZG93bjsJLyogbWV0aG9kIHRvIHNldCBicmlnaHRuZXNzIGRvd24gX19fX0EgKi8KKwljaGFyICpicmlnaHRuZXNzX3NldDsJLyogbWV0aG9kIHRvIHNldCBhYnNvbHV0ZSBicmlnaHRuZXNzX1IgKi8KKwljaGFyICpicmlnaHRuZXNzX2dldDsJLyogbWV0aG9kIHRvIGdldCBhYnNvbHV0ZSBicmlnaHRuZXNzX1IgKi8KKwljaGFyICpicmlnaHRuZXNzX3N0YXR1czsvKiBub2RlIHRvIGdldCBicmlnaHRuZXNzX19fX19fX19fX19fQSAqLworCWNoYXIgKmRpc3BsYXlfc2V0OwkvKiBtZXRob2QgdG8gc2V0IHZpZGVvIG91dHB1dF9fX19fX19fUiAqLworCWNoYXIgKmRpc3BsYXlfZ2V0OwkvKiBtZXRob2QgdG8gZ2V0IHZpZGVvIG91dHB1dF9fX19fX19fUiAqLwogfTsKIAogLyoKQEAgLTExMSw0MSArMTExLDQxIEBACiAgKiBhYm91dCB0aGUgaG90ayBkZXZpY2UKICAqLwogc3RydWN0IGFzdXNfaG90ayB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CS8vdGhlIGRldmljZSB3ZSBhcmUgaW4KLQlhY3BpX2hhbmRsZSBoYW5kbGU7CS8vdGhlIGhhbmRsZSBvZiB0aGUgaG90ayBkZXZpY2UKLQljaGFyIHN0YXR1czsJCS8vc3RhdHVzIG9mIHRoZSBob3RrLCBmb3IgTEVEcywgLi4uCi0JdTMyIGxlZGRfc3RhdHVzOwkvL3N0YXR1cyBvZiB0aGUgTEVEIGRpc3BsYXkKLQlzdHJ1Y3QgbW9kZWxfZGF0YSAqbWV0aG9kczsJLy9tZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgbGFwdG9wCi0JdTggYnJpZ2h0bmVzczsJCS8vYnJpZ2h0bmVzcyBsZXZlbAorCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwkvKiB0aGUgZGV2aWNlIHdlIGFyZSBpbiAqLworCWFjcGlfaGFuZGxlIGhhbmRsZTsJCS8qIHRoZSBoYW5kbGUgb2YgdGhlIGhvdGsgZGV2aWNlICovCisJY2hhciBzdGF0dXM7CQkJLyogc3RhdHVzIG9mIHRoZSBob3RrLCBmb3IgTEVEcyAqLworCXUzMiBsZWRkX3N0YXR1czsJCS8qIHN0YXR1cyBvZiB0aGUgTEVEIGRpc3BsYXkgKi8KKwlzdHJ1Y3QgbW9kZWxfZGF0YSAqbWV0aG9kczsJLyogbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIGxhcHRvcCAqLworCXU4IGJyaWdodG5lc3M7CQkJLyogYnJpZ2h0bmVzcyBsZXZlbCAqLwogCWVudW0gewotCQlBMXggPSAwLAkvL0ExMzQwRCwgQTEzMDBGCi0JCUEyeCwJCS8vQTI1MDBICi0JCUE0RywJCS8vQTQ3MDBHCi0JCUQxeCwJCS8vRDEKLQkJTDJELAkJLy9MMjAwMEQKLQkJTDNDLAkJLy9MMzgwMEMKLQkJTDNELAkJLy9MMzQwMEQKLQkJTDNILAkJLy9MM0gsIEwyMDAwRSwgTDVECi0JCUw0UiwJCS8vTDQ1MDBSCi0JCUw1eCwJCS8vTDU4MDBDIAotCQlMOEwsCQkvL0w4NDAwTAotCQlNMUEsCQkvL00xMzAwQQotCQlNMkUsCQkvL00yNDAwRSwgTDQ0MDBMCi0JCU02TiwJCS8vTTY4MDBOLCBXMzQwME4KLQkJTTZSLAkJLy9NNjcwMFIsIEEzMDAwRwotCQlQMzAsCQkvL1NhbXN1bmcgUDMwCi0JCVMxeCwJCS8vUzEzMDBBLCBidXQgYWxzbyBMMTQwMEIgYW5kIE0yNDAwQSAoTDg0RikKLQkJUzJ4LAkJLy9TMjAwIChKMSByZXBvcnRlZCksIFZpY3RvciBNUC1YUDcyMTAKLQkJVzFOLAkJLy9XMTAwME4KLQkJVzVBLAkJLy9XNUEKLQkJVzNWLCAgICAgICAgICAgIC8vVzMwMzBWCi0JCXh4TiwJCS8vTTI0MDBOLCBNMzcwME4sIE01MjAwTiwgTTY4MDBOLCBTMTMwME4sIFM1MjAwTgotCQlBNFMsICAgICAgICAgICAgLy9aODFzcAotCQkvLyhDZW50cmlubykKLQkJRjNTYSwKKwkJQTF4ID0gMCwJLyogQTEzNDBELCBBMTMwMEYgKi8KKwkJQTJ4LAkJLyogQTI1MDBIICovCisJCUE0RywJCS8qIEE0NzAwRyAqLworCQlEMXgsCQkvKiBEMSAqLworCQlMMkQsCQkvKiBMMjAwMEQgKi8KKwkJTDNDLAkJLyogTDM4MDBDICovCisJCUwzRCwJCS8qIEwzNDAwRCAqLworCQlMM0gsCQkvKiBMM0gsIEwyMDAwRSwgTDVEICovCisJCUw0UiwJCS8qIEw0NTAwUiAqLworCQlMNXgsCQkvKiBMNTgwMEMgKi8KKwkJTDhMLAkJLyogTDg0MDBMICovCisJCU0xQSwJCS8qIE0xMzAwQSAqLworCQlNMkUsCQkvKiBNMjQwMEUsIEw0NDAwTCAqLworCQlNNk4sCQkvKiBNNjgwME4sIFczNDAwTiAqLworCQlNNlIsCQkvKiBNNjcwMFIsIEEzMDAwRyAqLworCQlQMzAsCQkvKiBTYW1zdW5nIFAzMCAqLworCQlTMXgsCQkvKiBTMTMwMEEsIGJ1dCBhbHNvIEwxNDAwQiBhbmQgTTI0MDBBIChMODRGKSAqLworCQlTMngsCQkvKiBTMjAwIChKMSByZXBvcnRlZCksIFZpY3RvciBNUC1YUDcyMTAgKi8KKwkJVzFOLAkJLyogVzEwMDBOICovCisJCVc1QSwJCS8qIFc1QSAqLworCQlXM1YsICAgICAgICAgICAgLyogVzMwMzBWICovCisJCXh4TiwJCS8qIE0yNDAwTiwgTTM3MDBOLCBNNTIwME4sIE02ODAwTiwKKwkJCQkJCQkgUzEzMDBOLCBTNTIwME4qLworCQlBNFMsICAgICAgICAgICAgLyogWjgxc3AgKi8KKwkJRjNTYSwJCS8qIChDZW50cmlubykgKi8KIAkJRU5EX01PREVMCi0JfSBtb2RlbDsJCS8vTW9kZWxzIGN1cnJlbnRseSBzdXBwb3J0ZWQKLQl1MTYgZXZlbnRfY291bnRbMTI4XTsJLy9jb3VudCBmb3IgZWFjaCBldmVudCBUT0RPIG1ha2UgdGhpcyBiZXR0ZXIKKwl9IG1vZGVsOwkJLyogTW9kZWxzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi8KKwl1MTYgZXZlbnRfY291bnRbMTI4XTsJLyogQ291bnQgZm9yIGVhY2ggZXZlbnQgVE9ETyBtYWtlIHRoaXMgYmV0dGVyICovCiB9OwogCiAvKiBIZXJlIHdlIGdvICovCkBAIC00NTksMTggKzQ1OSwxOCBAQAogCQl9LAogfTsKIAotLyogCisvKgogICogVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgYW4gQUNQSSBtZXRob2QsIGdpdmVuIGFuIGludCBhcyBwYXJhbWV0ZXIsIHRoZQogICogbWV0aG9kIGlzIHNlYXJjaGVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGhhbmRsZSwgY2FuIGJlIE5VTEwuIFRoZSBvdXRwdXQKICAqIG9mIHRoZSBtZXRob2QgaXMgd3JpdHRlbiBpcyBvdXRwdXQsIHdoaWNoIGNhbiBhbHNvIGJlIE5VTEwKICAqCi0gKiByZXR1cm5zIDEgaWYgd3JpdGUgaXMgc3VjY2Vzc2Z1bCwgMCBlbHNlLiAKKyAqIHJldHVybnMgMSBpZiB3cml0ZSBpcyBzdWNjZXNzZnVsLCAwIGVsc2UuCiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfYWNwaV9pbnQoYWNwaV9oYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyICptZXRob2QsIGludCB2YWwsCiAJCQkgIHN0cnVjdCBhY3BpX2J1ZmZlciAqb3V0cHV0KQogewotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsJLy9saXN0IG9mIGlucHV0IHBhcmFtZXRlcnMgKGFuIGludCBoZXJlKQotCXVuaW9uIGFjcGlfb2JqZWN0IGluX29iajsJLy90aGUgb25seSBwYXJhbSB3ZSB1c2UKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CS8qIGxpc3Qgb2YgaW5wdXQgcGFyYW1ldGVycyAoaW50KSAqLworCXVuaW9uIGFjcGlfb2JqZWN0IGluX29iajsJLyogdGhlIG9ubHkgcGFyYW0gd2UgdXNlICovCiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJcGFyYW1zLmNvdW50ID0gMTsKQEAgLTUwNywxOCArNTA3LDE4IEBACiB7CiAJaW50IGxlbiA9IDA7CiAJaW50IHRlbXA7Ci0JY2hhciBidWZbMTZdOwkJLy9lbm91Z2ggZm9yIGFsbCBpbmZvCisJY2hhciBidWZbMTZdOwkJLyogZW5vdWdoIGZvciBhbGwgaW5mbyAqLwogCS8qCi0JICogV2UgdXNlIHRoZSBlYXN5IHdheSwgd2UgZG9uJ3QgY2FyZSBvZiBvZmYgYW5kIGNvdW50LCBzbyB3ZSBkb24ndCBzZXQgZW9mCi0JICogdG8gMQorCSAqIFdlIHVzZSB0aGUgZWFzeSB3YXksIHdlIGRvbid0IGNhcmUgb2Ygb2ZmIGFuZCBjb3VudCwKKwkgKiBzbyB3ZSBkb24ndCBzZXQgZW9mIHRvIDEKIAkgKi8KIAogCWxlbiArPSBzcHJpbnRmKHBhZ2UsIEFDUElfSE9US19OQU1FICIgIiBBU1VTX0FDUElfVkVSU0lPTiAiXG4iKTsKIAlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWwgcmVmZXJlbmNlICAgIDogJXNcbiIsCiAJCSAgICAgICBob3RrLT5tZXRob2RzLT5uYW1lKTsKLQkvKiAKLQkgKiBUaGUgU0ZVTiBtZXRob2QgcHJvYmFibHkgYWxsb3dzIHRoZSBvcmlnaW5hbCBkcml2ZXIgdG8gZ2V0IHRoZSBsaXN0IAotCSAqIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGdpdmVuIG1vZGVsLiBGb3Igbm93LCAweDAxMDAgb3IgMHgwODAwIAorCS8qCisJICogVGhlIFNGVU4gbWV0aG9kIHByb2JhYmx5IGFsbG93cyB0aGUgb3JpZ2luYWwgZHJpdmVyIHRvIGdldCB0aGUgbGlzdAorCSAqIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGdpdmVuIG1vZGVsLiBGb3Igbm93LCAweDAxMDAgb3IgMHgwODAwCiAJICogYml0IHNpZ25pZmllcyB0aGF0IHRoZSBsYXB0b3AgaXMgZXF1aXBwZWQgd2l0aCBhIFdpLUZpIE1pbmlQQ0kgY2FyZC4KIAkgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIG90aGVycyBpcyB5ZXQgdG8gYmUgZm91bmQuCiAJICovCkBAIC01MjgsNyArNTI4LDcgQEAKIAkvKgogCSAqIEFub3RoZXIgdmFsdWUgZm9yIHVzZXJzcGFjZTogdGhlIEFTWU0gbWV0aG9kIHJldHVybnMgMHgwMiBmb3IKIAkgKiBiYXR0ZXJ5IGxvdyBhbmQgMHgwNCBmb3IgYmF0dGVyeSBjcml0aWNhbCwgaXRzIHJlYWRpbmdzIHRlbmQgdG8gYmUKLQkgKiBtb3JlIGFjY3VyYXRlIHRoYW4gdGhvc2UgcHJvdmlkZWQgYnkgX0JTVC4gCisJICogbW9yZSBhY2N1cmF0ZSB0aGFuIHRob3NlIHByb3ZpZGVkIGJ5IF9CU1QuCiAJICogTm90ZTogc2luY2Ugbm90IGFsbCB0aGUgbGFwdG9wcyBwcm92aWRlIHRoaXMgbWV0aG9kLCBlcnJvcnMgYXJlCiAJICogc2lsZW50bHkgaWdub3JlZC4KIAkgKi8KQEAgLTU3OSw3ICs1NzksNyBAQAogCXJldHVybiAoaG90ay0+c3RhdHVzICYgbGVkbWFzaykgPyAxIDogMDsKIH0KIAotc3RhdGljIGludCBwYXJzZV9hcmcoY29uc3QgY2hhciBfX3VzZXIgKiBidWYsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCAqdmFsKQorc3RhdGljIGludCBwYXJzZV9hcmcoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50ICp2YWwpCiB7CiAJY2hhciBzWzMyXTsKIAlpZiAoIWNvdW50KQpAQCAtNTk2LDcgKzU5Niw3IEBACiAKIC8qIEZJWE1FOiBraWxsIGV4dHJhbmVvdXMgYXJncyBzbyBpdCBjYW4gYmUgY2FsbGVkIGluZGVwZW5kZW50bHkgKi8KIHN0YXRpYyBpbnQKLXdyaXRlX2xlZChjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwKK3dyaXRlX2xlZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LAogCSAgY2hhciAqbGVkbmFtZSwgaW50IGxlZG1hc2ssIGludCBpbnZlcnQpCiB7CiAJaW50IHJ2LCB2YWx1ZTsKQEAgLTYzMSw3ICs2MzEsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1wcm9jX3dyaXRlX21sZWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAorcHJvY193cml0ZV9tbGVkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCXJldHVybiB3cml0ZV9sZWQoYnVmZmVyLCBjb3VudCwgaG90ay0+bWV0aG9kcy0+bXRfbWxlZCwgTUxFRF9PTiwgMSk7CkBAIC02NDgsNyArNjQ4LDcgQEAKIH0KIAogc3RhdGljIGludAotcHJvY193cml0ZV9sZWRkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKK3Byb2Nfd3JpdGVfbGVkZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcnYsIHZhbHVlOwpAQCAtNjc3LDcgKzY3Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfd2xlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCitwcm9jX3dyaXRlX3dsZWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIHdyaXRlX2xlZChidWZmZXIsIGNvdW50LCBob3RrLT5tZXRob2RzLT5tdF93bGVkLCBXTEVEX09OLCAwKTsKQEAgLTY5NCwxMCArNjk0LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfYmx1ZXRvb3RoKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKK3Byb2Nfd3JpdGVfYmx1ZXRvb3RoKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7Ci0JLyogTm90ZTogbXRfYnRfc3dpdGNoIGNvbnRyb2xzIGJvdGggaW50ZXJuYWwgQmx1ZXRvb3RoIGFkYXB0ZXIncyAKKwkvKiBOb3RlOiBtdF9idF9zd2l0Y2ggY29udHJvbHMgYm90aCBpbnRlcm5hbCBCbHVldG9vdGggYWRhcHRlcidzCiAJICAgcHJlc2VuY2UgYW5kIGl0cyBMRUQgKi8KIAlyZXR1cm4gd3JpdGVfbGVkKGJ1ZmZlciwgY291bnQsIGhvdGstPm1ldGhvZHMtPm10X2J0X3N3aXRjaCwgQlRfT04sIDApOwogfQpAQCAtNzE0LDcgKzcxNCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfdGxlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCitwcm9jX3dyaXRlX3RsZWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIHdyaXRlX2xlZChidWZmZXIsIGNvdW50LCBob3RrLT5tZXRob2RzLT5tdF90bGVkLCBUTEVEX09OLCAwKTsKQEAgLTczNCw3ICs3MzQsNyBAQAogCiAJCWlucHV0LmNvdW50ID0gMjsKIAkJaW5wdXQucG9pbnRlciA9IG10X3BhcmFtczsKLQkJLyogTm90ZTogdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHBhcnRseSBndWVzc2VkIHVwLCBidXQgCisJCS8qIE5vdGU6IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBwYXJ0bHkgZ3Vlc3NlZCB1cCwgYnV0CiAJCSAgIG90aGVyd2lzZSB0aGV5IHNlZW0gdG8gd29yayAqLwogCQltdF9wYXJhbXNbMF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwogCQltdF9wYXJhbXNbMF0uaW50ZWdlci52YWx1ZSA9IDB4MDI7CkBAIC03NTMsNyArNzUzLDcgQEAKIAkJCS8qIFRoYXQncyB3aGF0IHRoZSBBTUwgY29kZSBkb2VzICovCiAJCQlsY2QgPSBvdXRfb2JqLmludGVnZXIudmFsdWUgPj4gODsKIAl9IGVsc2UgaWYgKGhvdGstPm1vZGVsID09IEYzU2EpIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtOwogCQlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKIAkJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtNzk2LDEyICs3OTYsMTMgQEAKIAkJCSAgICBhY3BpX2V2YWx1YXRlX29iamVjdChOVUxMLAogCQkJCQkJIGhvdGstPm1ldGhvZHMtPm10X2xjZF9zd2l0Y2gsCiAJCQkJCQkgTlVMTCwgTlVMTCk7Ci0JCX0gZWxzZSB7CS8qIEwzSCBhbmQgdGhlIGxpa2UgaGF2ZSB0byBiZSBoYW5kbGVkIGRpZmZlcmVudGx5ICovCisJCX0gZWxzZSB7CisJCQkvKiBMM0ggYW5kIHRoZSBsaWtlIG11c3QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSAqLwogCQkJaWYgKCF3cml0ZV9hY3BpX2ludAogCQkJICAgIChob3RrLT5oYW5kbGUsIGhvdGstPm1ldGhvZHMtPm10X2xjZF9zd2l0Y2gsIDB4MDcsCiAJCQkgICAgIE5VTEwpKQogCQkJCXN0YXR1cyA9IEFFX0VSUk9SOwotCQkJLyogTDNIJ3MgQU1MIGV4ZWN1dGVzIEVISyAoMHgwNykgdXBvbiBGbitGNyBrZXlwcmVzcywgCisJCQkvKiBMM0gncyBBTUwgZXhlY3V0ZXMgRUhLICgweDA3KSB1cG9uIEZuK0Y3IGtleXByZXNzLAogCQkJICAgdGhlIGV4YWN0IGJlaGF2aW91ciBpcyBzaW11bGF0ZWQgaGVyZSAqLwogCQl9CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKQEAgLTgxOSw3ICs4MjAsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1wcm9jX3dyaXRlX2xjZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCitwcm9jX3dyaXRlX2xjZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcnYsIHZhbHVlOwpAQCAtODk3LDcgKzg5OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfYnJuKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKK3Byb2Nfd3JpdGVfYnJuKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCWludCBydiwgdmFsdWU7CkBAIC05MjEsNyArOTIyLDcgQEAKIH0KIAogLyoKLSAqIE5vdywgKnRoaXMqIG9uZSBjb3VsZCBiZSBtb3JlIHVzZXItZnJpZW5kbHksIGJ1dCBzbyBmYXIsIG5vLW9uZSBoYXMgCisgKiBOb3csICp0aGlzKiBvbmUgY291bGQgYmUgbW9yZSB1c2VyLWZyaWVuZGx5LCBidXQgc28gZmFyLCBuby1vbmUgaGFzCiAgKiBjb21wbGFpbmVkLiBUaGUgc2lnbmlmaWNhbmNlIG9mIGJpdHMgaXMgdGhlIHNhbWUgYXMgaW4gcHJvY193cml0ZV9kaXNwKCkKICAqLwogc3RhdGljIGludApAQCAtOTMzLDE4ICs5MzQsMTggQEAKIAlpZiAoIXJlYWRfYWNwaV9pbnQoaG90ay0+aGFuZGxlLCBob3RrLT5tZXRob2RzLT5kaXNwbGF5X2dldCwgJnZhbHVlKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIkFzdXMgQUNQSTogRXJyb3IgcmVhZGluZyBkaXNwbGF5IHN0YXR1c1xuIik7Ci0JdmFsdWUgJj0gMHgwNzsJCS8qIG5lZWRlZCBmb3Igc29tZSBtb2RlbHMsIHNob3VsZG4ndCBodXJ0IG90aGVycyAqLworCXZhbHVlICY9IDB4MDc7CS8qIG5lZWRlZCBmb3Igc29tZSBtb2RlbHMsIHNob3VsZG4ndCBodXJ0IG90aGVycyAqLwogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgdmFsdWUpOwogfQogCiAvKgotICogRXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIGRpc3BsYXkgc3dpdGNoaW5nLiBBcyBvZiBub3c6IDEgc2hvdWxkIGFjdGl2YXRlIAotICogdGhlIExDRCBvdXRwdXQsIDIgc2hvdWxkIGRvIGZvciBDUlQsIGFuZCA0IGZvciBUVi1PdXQuIEFueSBjb21iaW5hdGlvbiAKLSAqIChiaXR3aXNlKSBvZiB0aGVzZSB3aWxsIHN1ZmZpY2UuIEkgbmV2ZXIgYWN0dWFsbHkgdGVzdGVkIDMgZGlzcGxheXMgaG9va2VkIHVwIAotICogc2ltdWx0YW5lb3VzbHksIHNvIGJlIHdhcm5lZC4gU2VlIHRoZSBhY3BpNGFzdXMgUkVBRE1FIGZvciBtb3JlIGluZm8uCisgKiBFeHBlcmltZW50YWwgc3VwcG9ydCBmb3IgZGlzcGxheSBzd2l0Y2hpbmcuIEFzIG9mIG5vdzogMSBzaG91bGQgYWN0aXZhdGUKKyAqIHRoZSBMQ0Qgb3V0cHV0LCAyIHNob3VsZCBkbyBmb3IgQ1JULCBhbmQgNCBmb3IgVFYtT3V0LiBBbnkgY29tYmluYXRpb24KKyAqIChiaXR3aXNlKSBvZiB0aGVzZSB3aWxsIHN1ZmZpY2UuIEkgbmV2ZXIgYWN0dWFsbHkgdGVzdGVkIDMgZGlzcGxheXMgaG9va2VkCisgKiB1cCBzaW11bHRhbmVvdXNseSwgc28gYmUgd2FybmVkLiBTZWUgdGhlIGFjcGk0YXN1cyBSRUFETUUgZm9yIG1vcmUgaW5mby4KICAqLwogc3RhdGljIGludAotcHJvY193cml0ZV9kaXNwKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKK3Byb2Nfd3JpdGVfZGlzcChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcnYsIHZhbHVlOwpAQCAtOTU3LDEyICs5NTgsMTIgQEAKIAogdHlwZWRlZiBpbnQgKHByb2NfcmVhZGZ1bmMpIChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAogCQkJICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci10eXBlZGVmIGludCAocHJvY193cml0ZWZ1bmMpIChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAordHlwZWRlZiBpbnQgKHByb2Nfd3JpdGVmdW5jKSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKIAogc3RhdGljIGludAotYXN1c19wcm9jX2FkZChjaGFyICpuYW1lLCBwcm9jX3dyaXRlZnVuYyAqIHdyaXRlZnVuYywKLQkJICAgICBwcm9jX3JlYWRmdW5jICogcmVhZGZ1bmMsIG1vZGVfdCBtb2RlLAorYXN1c19wcm9jX2FkZChjaGFyICpuYW1lLCBwcm9jX3dyaXRlZnVuYyAqd3JpdGVmdW5jLAorCQkgICAgIHByb2NfcmVhZGZ1bmMgKnJlYWRmdW5jLCBtb2RlX3QgbW9kZSwKIAkJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MgPQpAQCAtMTA0MCw5ICsxMDQxLDkgQEAKIAkJCSAgICAgICZwcm9jX3JlYWRfYmx1ZXRvb3RoLCBtb2RlLCBkZXZpY2UpOwogCX0KIAotCS8qIAotCSAqIFdlIG5lZWQgYm90aCByZWFkIG5vZGUgYW5kIHdyaXRlIG1ldGhvZCBhcyBMQ0Qgc3dpdGNoIGlzIGFsc28gYWNjZXNzaWJsZQotCSAqIGZyb20ga2V5Ym9hcmQgCisJLyoKKwkgKiBXZSBuZWVkIGJvdGggcmVhZCBub2RlIGFuZCB3cml0ZSBtZXRob2QgYXMgTENEIHN3aXRjaCBpcyBhbHNvCisJICogYWNjZXNzaWJsZSBmcm9tIHRoZSBrZXlib2FyZAogCSAqLwogCWlmIChob3RrLT5tZXRob2RzLT5tdF9sY2Rfc3dpdGNoICYmIGhvdGstPm1ldGhvZHMtPmxjZF9zdGF0dXMpIHsKIAkJYXN1c19wcm9jX2FkZChQUk9DX0xDRCwgJnByb2Nfd3JpdGVfbGNkLCAmcHJvY19yZWFkX2xjZCwgbW9kZSwKQEAgLTEwOTYsMTEgKzEwOTcsMTAgQEAKIAlpZiAoIWhvdGspCiAJCXJldHVybjsKIAotCWlmICgoZXZlbnQgJiB+KCh1MzIpIEJSX1VQKSkgPCAxNikgeworCWlmICgoZXZlbnQgJiB+KCh1MzIpIEJSX1VQKSkgPCAxNikKIAkJaG90ay0+YnJpZ2h0bmVzcyA9IChldmVudCAmIH4oKHUzMikgQlJfVVApKTsKLQl9IGVsc2UgaWYgKChldmVudCAmIH4oKHUzMikgQlJfRE9XTikpIDwgMTYpIHsKKwllbHNlIGlmICgoZXZlbnQgJiB+KCh1MzIpIEJSX0RPV04pKSA8IDE2KQogCQlob3RrLT5icmlnaHRuZXNzID0gKGV2ZW50ICYgfigodTMyKSBCUl9ET1dOKSk7Ci0JfQogCiAJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChob3RrLT5kZXZpY2UsIGV2ZW50LAogCQkJCWhvdGstPmV2ZW50X2NvdW50W2V2ZW50ICUgMTI4XSsrKTsKQEAgLTExODYsOCArMTE4Niw4IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJLyoKLQkgKiBHZXQgRFNEVCBoZWFkZXJzIGVhcmx5IGVub3VnaCB0byBhbGxvdyBmb3IgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gCi0JICogbW9kZWxzLCBidXQgbGF0ZSBlbm91Z2ggdG8gYWxsb3cgYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCkgdG8gZmFpbCAKKwkgKiBHZXQgRFNEVCBoZWFkZXJzIGVhcmx5IGVub3VnaCB0byBhbGxvdyBmb3IgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4KKwkgKiBtb2RlbHMsIGJ1dCBsYXRlIGVub3VnaCB0byBhbGxvdyBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoKSB0byBmYWlsCiAJICogYmVmb3JlIGRvaW5nIGFueXRoaW5nIEFDUEktc3BlY2lmaWMuIFNob3VsZCB3ZSBlbmNvdW50ZXIgYSBtYWNoaW5lLAogCSAqIHdoaWNoIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgKGkuZS4gaXRzIGhvdGtleSBkZXZpY2UgaGFzIGEgZGlmZmVyZW50CiAJICogSElEKSwgdGhpcyBiaXQgd2lsbCBiZSBtb3ZlZC4gQSBnbG9iYWwgdmFyaWFibGUgYXN1c19pbmZvIGNvbnRhaW5zCkBAIC0xMjEyLDggKzEyMTIsOCBAQAogCiAJLyoKIAkgKiBUcnkgdG8gbWF0Y2ggdGhlIG9iamVjdCByZXR1cm5lZCBieSBJTklUIHRvIHRoZSBzcGVjaWZpYyBtb2RlbC4KLQkgKiBIYW5kbGUgZXZlcnkgcG9zc2libGUgb2JqZWN0IChvciB0aGUgbGFjayBvZiB0aGVyZW9mKSB0aGUgRFNEVCAKLQkgKiB3cml0ZXJzIG1pZ2h0IHRocm93IGF0IHVzLiBXaGVuIGluIHRyb3VibGUsIHdlIHBhc3MgTlVMTCB0byAKKwkgKiBIYW5kbGUgZXZlcnkgcG9zc2libGUgb2JqZWN0IChvciB0aGUgbGFjayBvZiB0aGVyZW9mKSB0aGUgRFNEVAorCSAqIHdyaXRlcnMgbWlnaHQgdGhyb3cgYXQgdXMuIFdoZW4gaW4gdHJvdWJsZSwgd2UgcGFzcyBOVUxMIHRvCiAJICogYXN1c19tb2RlbF9tYXRjaCgpIGFuZCB0cnkgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50LgogCSAqLwogCWlmIChidWZmZXIucG9pbnRlcikgewpAQCAtMTI0NCw2ICsxMjQ0LDggQEAKIAkJCSAgICAgICAiZGVmYXVsdCB2YWx1ZXNcbiIsIHN0cmluZyk7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJCSAgICAgICAiICBzZW5kIC9wcm9jL2FjcGkvZHNkdCB0byB0aGUgZGV2ZWxvcGVyc1xuIik7CisJCQlrZnJlZShtb2RlbCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlob3RrLT5tZXRob2RzID0gJm1vZGVsX2NvbmZbaG90ay0+bW9kZWxdOwogCQlyZXR1cm4gQUVfT0s7CkBAIC0xMjU0LDcgKzEyNTYsNyBAQAogCS8qIFNvcnQgb2YgcGVyLW1vZGVsIGJsYWNrbGlzdCAqLwogCWlmIChzdHJuY21wKHN0cmluZywgIkwyQiIsIDMpID09IDApCiAJCWhvdGstPm1ldGhvZHMtPmxjZF9zdGF0dXMgPSBOVUxMOwotCS8qIEwyQiBpcyBzaW1pbGFyIGVub3VnaCB0byBMM0MgdG8gdXNlIGl0cyBzZXR0aW5ncywgd2l0aCB0aGlzIG9ubHkgCisJLyogTDJCIGlzIHNpbWlsYXIgZW5vdWdoIHRvIEwzQyB0byB1c2UgaXRzIHNldHRpbmdzLCB3aXRoIHRoaXMgb25seQogCSAgIGV4Y2VwdGlvbiAqLwogCWVsc2UgaWYgKHN0cm5jbXAoc3RyaW5nLCAiQTNHIiwgMykgPT0gMCkKIAkJaG90ay0+bWV0aG9kcy0+bGNkX3N0YXR1cyA9ICJcXEJMRkciOwpAQCAtMTMyMSw3ICsxMzIzLDcgQEAKIAlob3RrLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX0hPVEtfREVWSUNFX05BTUUpOwogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX0hPVEtfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGhvdGs7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGhvdGs7CiAJaG90ay0+ZGV2aWNlID0gZGV2aWNlOwogCiAJcmVzdWx0ID0gYXN1c19ob3RrX2NoZWNrKCk7CkBAIC0xMzY2LDEwICsxMzY4LDkgQEAKIAkvKiBMRUQgZGlzcGxheSBpcyBvZmYgYnkgZGVmYXVsdCAqLwogCWhvdGstPmxlZGRfc3RhdHVzID0gMHhGRkY7CiAKLSAgICAgIGVuZDoKLQlpZiAocmVzdWx0KSB7CitlbmQ6CisJaWYgKHJlc3VsdCkKIAkJa2ZyZWUoaG90ayk7Ci0JfQogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEzOTQsOCArMTM5NSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhc3VzX2JhY2tsaWdodF9kYXRhID0gewotICAgICAgICAuZ2V0X2JyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MsCi0gICAgICAgIC51cGRhdGVfc3RhdHVzICA9IHNldF9icmlnaHRuZXNzX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMgID0gc2V0X2JyaWdodG5lc3Nfc3RhdHVzLAogfTsKIAogc3RhdGljIHZvaWQgYXN1c19hY3BpX2V4aXQodm9pZCkKQEAgLTE0NDIsMTUgKzE0NDMsMTUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JYXN1c19iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYXN1cyIsTlVMTCxOVUxMLAorCWFzdXNfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImFzdXMiLCBOVUxMLCBOVUxMLAogCQkJCQkJCSAgJmFzdXNfYmFja2xpZ2h0X2RhdGEpOwotICAgICAgICBpZiAoSVNfRVJSKGFzdXNfYmFja2xpZ2h0X2RldmljZSkpIHsKKwlpZiAoSVNfRVJSKGFzdXNfYmFja2xpZ2h0X2RldmljZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcmVnaXN0ZXIgYXN1cyBiYWNrbGlnaHQgZGV2aWNlXG4iKTsKIAkJYXN1c19iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKIAkJYXN1c19hY3BpX2V4aXQoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotICAgICAgICBhc3VzX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7CisJYXN1c19iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDE1OwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwppbmRleCBiMWM3MjNmLi5iMjEzM2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYWxhcm1fYXR0ciA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NCwgLm93bmVyID0gVEhJU19NT0RVTEV9LAorCS5hdHRyID0gey5uYW1lID0gImFsYXJtIiwgLm1vZGUgPSAwNjQ0fSwKIAkuc2hvdyA9IGFjcGlfYmF0dGVyeV9hbGFybV9zaG93LAogCS5zdG9yZSA9IGFjcGlfYmF0dGVyeV9hbGFybV9zdG9yZSwKIH07CkBAIC04MDQsNyArODA0LDcgQEAKIAliYXR0ZXJ5LT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9CQVRURVJZX0RFVklDRV9OQU1FKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9CQVRURVJZX0NMQVNTKTsKLQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBiYXR0ZXJ5OworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBiYXR0ZXJ5OwogCW11dGV4X2luaXQoJmJhdHRlcnktPmxvY2spOwogCWFjcGlfYmF0dGVyeV91cGRhdGUoYmF0dGVyeSk7CiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmF5LmMgYi9kcml2ZXJzL2FjcGkvYmF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYjZjNWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9hY3BpL2JheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDExICswLDAgQEAKLS8qCi0gKiAgYmF5LmMgLSBBQ1BJIHJlbW92YWJsZSBkcml2ZSBiYXkgZHJpdmVyCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiBLcmlzdGVuIENhcmxzb24gQWNjYXJkaSA8a3Jpc3Rlbi5jLmFjY2FyZGlAaW50ZWwuY29tPgotICoKLSAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKLSAqICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+Ci0jaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLUFDUElfTU9EVUxFX05BTUUoImJheSIpOwotTU9EVUxFX0FVVEhPUigiS3Jpc3RlbiBDYXJsc29uIEFjY2FyZGkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQUNQSSBSZW1vdmFibGUgRHJpdmUgQmF5IERyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI2RlZmluZSBBQ1BJX0JBWV9DTEFTUyAiYmF5IgotI2RlZmluZSBBQ1BJX0JBWV9DT01QT05FTlQJMHgxMDAwMDAwMAotI2RlZmluZSBfQ09NUE9ORU5UIEFDUElfQkFZX0NPTVBPTkVOVAotI2RlZmluZSBiYXlfZHByaW50ayhoLHMpIHtcCi0JY2hhciBwcmVmaXhbODBdID0geydcMCd9O1wKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge3NpemVvZihwcmVmaXgpLCBwcmVmaXh9O1wKLQlhY3BpX2dldF9uYW1lKGgsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7XAotCXByaW50ayhLRVJOX0RFQlVHIFBSRUZJWCAiJXM6ICVzXG4iLCBwcmVmaXgsIHMpOyB9Ci1zdGF0aWMgdm9pZCBiYXlfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBiYXlfZGV2aWNlX2lkc1tdID0gewotCXsiTE5YSU9CQVkiLCAwfSwKLQl7IiIsIDB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgYmF5X2RldmljZV9pZHMpOwotCi1zdHJ1Y3QgYmF5IHsKLQlhY3BpX2hhbmRsZSBoYW5kbGU7Ci0JY2hhciAqbmFtZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLX07Ci0KLXN0YXRpYyBMSVNUX0hFQUQoZHJpdmVfYmF5cyk7Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZSBCYXkgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogaXNfZWplY3RhYmxlIC0gc2VlIGlmIGEgZGV2aWNlIGlzIGVqZWN0YWJsZQotICogQGhhbmRsZTogYWNwaSBoYW5kbGUgb2YgdGhlIGRldmljZQotICoKLSAqIElmIGFuIGFjcGkgb2JqZWN0IGhhcyBhIF9FSjAgbWV0aG9kLCB0aGVuIGl0IGlzIGVqZWN0YWJsZQotICovCi1zdGF0aWMgaW50IGlzX2VqZWN0YWJsZShhY3BpX2hhbmRsZSBoYW5kbGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfaGFuZGxlIHRtcDsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRUowIiwgJnRtcCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBiYXlfcHJlc2VudCAtIHNlZSBpZiB0aGUgYmF5IGRldmljZSBpcyBwcmVzZW50Ci0gKiBAYmF5OiB0aGUgZHJpdmUgYmF5Ci0gKgotICogZXhlY3V0ZSB0aGUgX1NUQSBtZXRob2QuCi0gKi8KLXN0YXRpYyBpbnQgYmF5X3ByZXNlbnQoc3RydWN0IGJheSAqYmF5KQotewotCXVuc2lnbmVkIGxvbmcgc3RhOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCWlmIChiYXkpIHsKLQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGJheS0+aGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwotCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgc3RhKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGVqZWN0X2RldmljZSAtIHJlc3BvbmQgdG8gYW4gZWplY3QgcmVxdWVzdAotICogQGhhbmRsZSAtIHRoZSBkZXZpY2UgdG8gZWplY3QKLSAqCi0gKiBDYWxsIHRoaXMgZGV2aWNlcyBfRUowIG1ldGhvZC4KLSAqLwotc3RhdGljIHZvaWQgZWplY3RfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKLXsKLQlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKLQl1bmlvbiBhY3BpX29iamVjdCBhcmc7Ci0KLQliYXlfZHByaW50ayhoYW5kbGUsICJFamVjdGluZyBkZXZpY2UiKTsKLQotCWFyZ19saXN0LmNvdW50ID0gMTsKLQlhcmdfbGlzdC5wb2ludGVyID0gJmFyZzsKLQlhcmcudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWFyZy5pbnRlZ2VyLnZhbHVlID0gMTsKLQotCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX0VKMCIsCi0JCQkJCSAgICAgICZhcmdfbGlzdCwgTlVMTCkpKQotCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGV2YWx1YXRlIF9FSjAhXG4iKTsKLX0KLQotLyoKLSAqIHNob3dfcHJlc2VudCAtIHJlYWQgbWV0aG9kIGZvciAicHJlc2VudCIgZmlsZSBpbiBzeXNmcwotICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3ByZXNlbnQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYmF5ICpiYXkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgYmF5X3ByZXNlbnQoYmF5KSk7Ci0KLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihwcmVzZW50LCBTX0lSVUdPLCBzaG93X3ByZXNlbnQsIE5VTEwpOwotCi0vKgotICogd3JpdGVfZWplY3QgLSB3cml0ZSBtZXRob2QgZm9yICJlamVjdCIgZmlsZSBpbiBzeXNmcwotICovCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9lamVjdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGJheSAqYmF5ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoIWNvdW50KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVqZWN0X2RldmljZShiYXktPmhhbmRsZSk7Ci0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIERFVklDRV9BVFRSKGVqZWN0LCBTX0lXVVNSLCBOVUxMLCB3cml0ZV9lamVjdCk7Ci0KLS8qKgotICogaXNfYXRhIC0gc2VlIGlmIGEgZGV2aWNlIGlzIGFuIGF0YSBkZXZpY2UKLSAqIEBoYW5kbGU6IGFjcGkgaGFuZGxlIG9mIHRoZSBkZXZpY2UKLSAqCi0gKiBJZiBhbiBhY3BpIG9iamVjdCBoYXMgb25lIG9mIDQgQVRBIEFDUEkgbWV0aG9kcyBkZWZpbmVkLAotICogdGhlbiBpdCBpcyBhbiBBVEEgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgaXNfYXRhKGFjcGlfaGFuZGxlIGhhbmRsZSkKLXsKLQlhY3BpX2hhbmRsZSB0bXA7Ci0KLQlpZiAoKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX0dURiIsICZ0bXApKSkgfHwKLQkgICAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfR1RNIiwgJnRtcCkpKSB8fAotCSAgIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9TVE0iLCAmdG1wKSkpIHx8Ci0JICAgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX1NERCIsICZ0bXApKSkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogcGFyZW50X2lzX2F0YShhY3BpX2hhbmRsZSBoYW5kbGUpCi0gKgotICovCi1zdGF0aWMgaW50IHBhcmVudF9pc19hdGEoYWNwaV9oYW5kbGUgaGFuZGxlKQotewotCWFjcGlfaGFuZGxlIHBoYW5kbGU7Ci0KLQlpZiAoYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJnBoYW5kbGUpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpc19hdGEocGhhbmRsZSk7Ci19Ci0KLS8qKgotICogaXNfZWplY3RhYmxlX2JheSAtIHNlZSBpZiBhIGRldmljZSBpcyBhbiBlamVjdGFibGUgZHJpdmUgYmF5Ci0gKiBAaGFuZGxlOiBhY3BpIGhhbmRsZSBvZiB0aGUgZGV2aWNlCi0gKgotICogSWYgYW4gYWNwaSBvYmplY3QgaXMgZWplY3RhYmxlIGFuZCBoYXMgb25lIG9mIHRoZSBBQ1BJIEFUQQotICogbWV0aG9kcyBkZWZpbmVkLCB0aGVuIHdlIGNhbiBzYWZlbHkgY2FsbCBpdCBhbiBlamVjdGFibGUKLSAqIGRyaXZlIGJheQotICovCi1zdGF0aWMgaW50IGlzX2VqZWN0YWJsZV9iYXkoYWNwaV9oYW5kbGUgaGFuZGxlKQotewotCWlmICgoaXNfYXRhKGhhbmRsZSkgfHwgcGFyZW50X2lzX2F0YShoYW5kbGUpKSAmJiBpc19lamVjdGFibGUoaGFuZGxlKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiAwCi0vKioKLSAqIGVqZWN0X3JlbW92YWJsZV9kcml2ZSAtIHRyeSB0byBlamVjdCB0aGlzIGRyaXZlCi0gKiBAZGV2IDogdGhlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlIGRyaXZlCi0gKgotICogSWYgYSBkZXZpY2UgaXMgYSByZW1vdmFibGUgZHJpdmUgdGhhdCByZXF1aXJlcyBhbiBfRUowIG1ldGhvZAotICogdG8gYmUgZXhlY3V0ZWQgaW4gb3JkZXIgdG8gc2FmZWx5IHJlbW92ZSBmcm9tIHRoZSBzeXN0ZW0sIGRvCi0gKiBpdC4gIEFUTSAtIGFsd2F5cyByZXR1cm5zIHN1Y2Nlc3MKLSAqLwotaW50IGVqZWN0X3JlbW92YWJsZV9kcml2ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JYWNwaV9oYW5kbGUgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKGRldik7Ci0KLQlpZiAoaGFuZGxlKSB7Ci0JCWJheV9kcHJpbnRrKGhhbmRsZSwgIkdvdCBkZXZpY2UgaGFuZGxlIik7Ci0JCWlmIChpc19lamVjdGFibGVfYmF5KGhhbmRsZSkpCi0JCQllamVjdF9kZXZpY2UoaGFuZGxlKTsKLQl9IGVsc2UgewotCQlwcmludGsoIk5vIGFjcGkgaGFuZGxlIGZvciBkZXZpY2VcbiIpOwotCX0KLQotCS8qIHNob3VsZCBJIHJldHVybiBhbiBlcnJvciBjb2RlPyAqLwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZWplY3RfcmVtb3ZhYmxlX2RyaXZlKTsKLSNlbmRpZiAgLyogIDAgICovCi0KLXN0YXRpYyBpbnQgYWNwaV9iYXlfYWRkX2ZzKHN0cnVjdCBiYXkgKmJheSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZiYXktPnBkZXYtPmRldjsKLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wcmVzZW50KTsKLQlpZiAocmV0KQotCQlnb3RvIGFkZF9mc19lcnI7Ci0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2VqZWN0KTsKLQlpZiAocmV0KSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wcmVzZW50KTsKLQkJZ290byBhZGRfZnNfZXJyOwotCX0KLQlyZXR1cm4gMDsKLQotIGFkZF9mc19lcnI6Ci0JYmF5X2RwcmludGsoYmF5LT5oYW5kbGUsICJFcnJvciBhZGRpbmcgc3lzZnMgZmlsZXNcbiIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfYmF5X3JlbW92ZV9mcyhzdHJ1Y3QgYmF5ICpiYXkpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmJheS0+cGRldi0+ZGV2OwotCi0JLyogY2xlYW51cCBzeXNmcyAqLwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wcmVzZW50KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZWplY3QpOwotfQotCi1zdGF0aWMgaW50IGJheV9pc19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCi17Ci0JYWNwaV9oYW5kbGUgcGFyZW50OwotCi0JYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJnBhcmVudCk7Ci0KLQkvKiBpZiB0aGUgZGV2aWNlIG9yIGl0J3MgcGFyZW50IGlzIGRlcGVuZGVudCBvbiB0aGUKLQkgKiBkb2NrLCB0aGVuIHdlIGFyZSBhIGRvY2sgZGV2aWNlCi0JICovCi0JcmV0dXJuIChpc19kb2NrX2RldmljZShoYW5kbGUpIHx8IGlzX2RvY2tfZGV2aWNlKHBhcmVudCkpOwotfQotCi1zdGF0aWMgaW50IGJheV9hZGQoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgaWQpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBiYXkgKm5ld19iYXk7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgbmJ1ZmZlciA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07Ci0JYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJm5idWZmZXIpOwotCi0JYmF5X2RwcmludGsoaGFuZGxlLCAiQWRkaW5nIG5vdGlmeSBoYW5kbGVyIik7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgYmF5IGRldmljZSBzdHJ1Y3R1cmUKLQkgKi8KLQluZXdfYmF5ID0ga3phbGxvYyhzaXplb2YoKm5ld19iYXkpLCBHRlBfQVRPTUlDKTsKLQlJTklUX0xJU1RfSEVBRCgmbmV3X2JheS0+bGlzdCk7Ci0JbmV3X2JheS0+aGFuZGxlID0gaGFuZGxlOwotCW5ld19iYXktPm5hbWUgPSAoY2hhciAqKW5idWZmZXIucG9pbnRlcjsKLQotCS8qIGluaXRpYWxpemUgcGxhdGZvcm0gZGV2aWNlIHN0dWZmICovCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoQUNQSV9CQVlfQ0xBU1MsIGlkLCBOVUxMLCAwKTsKLQlpZiAoSVNfRVJSKHBkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIHJlZ2lzdGVyaW5nIGJheSBkZXZpY2VcbiIpOwotCQlnb3RvIGJheV9hZGRfZXJyOwotCX0KLQluZXdfYmF5LT5wZGV2ID0gcGRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXdfYmF5KTsKLQotCS8qCi0JICogd2Ugd2FudCB0aGUgYmF5IGRyaXZlciB0byBiZSBhYmxlIHRvIHNlbmQgdWV2ZW50cwotCSAqLwotCXBkZXYtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOwotCi0JLyogcmVnaXN0ZXIgZm9yIGV2ZW50cyBvbiB0aGlzIGRldmljZSAqLwotCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihoYW5kbGUsIEFDUElfU1lTVEVNX05PVElGWSwKLQkJCWJheV9ub3RpZnksIG5ld19iYXkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiRXJyb3IgaW5zdGFsbGluZyBiYXkgbm90aWZ5IGhhbmRsZXJcbiIpOwotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihuZXdfYmF5LT5wZGV2KTsKLQkJZ290byBiYXlfYWRkX2VycjsKLQl9Ci0KLQlpZiAoYWNwaV9iYXlfYWRkX2ZzKG5ld19iYXkpKSB7Ci0JCWFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGhhbmRsZSwgQUNQSV9TWVNURU1fTk9USUZZLAotCQkJCQkgICBiYXlfbm90aWZ5KTsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobmV3X2JheS0+cGRldik7Ci0JCWdvdG8gYmF5X2FkZF9lcnI7Ci0JfQotCi0JLyogaWYgd2UgYXJlIG9uIGEgZG9jayBzdGF0aW9uLCB3ZSBzaG91bGQgcmVnaXN0ZXIgZm9yIGRvY2sKLQkgKiBub3RpZmljYXRpb25zLgotCSAqLwotCWlmIChiYXlfaXNfZG9ja19kZXZpY2UoaGFuZGxlKSkgewotCQliYXlfZHByaW50ayhoYW5kbGUsICJJcyBkZXBlbmRlbnQgb24gZG9ja1xuIik7Ci0JCXJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoaGFuZGxlLCBiYXlfbm90aWZ5LCBuZXdfYmF5KTsKLQl9Ci0JbGlzdF9hZGQoJm5ld19iYXktPmxpc3QsICZkcml2ZV9iYXlzKTsKLQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiQmF5IFslc10gQWRkZWRcbiIsIG5ld19iYXktPm5hbWUpOwotCXJldHVybiAwOwotCi1iYXlfYWRkX2VycjoKLQlrZnJlZShuZXdfYmF5LT5uYW1lKTsKLQlrZnJlZShuZXdfYmF5KTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotLyoqCi0gKiBiYXlfbm90aWZ5IC0gYWN0IHVwb24gYW4gYWNwaSBiYXkgbm90aWZpY2F0aW9uCi0gKiBAaGFuZGxlOiB0aGUgYmF5IGhhbmRsZQotICogQGV2ZW50OiB0aGUgYWNwaSBldmVudAotICogQGRhdGE6IG91ciBkcml2ZXIgZGF0YSBzdHJ1Y3QKLSAqCi0gKi8KLXN0YXRpYyB2b2lkIGJheV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGJheSAqYmF5X2RldiA9IChzdHJ1Y3QgYmF5ICopZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYmF5X2Rldi0+cGRldi0+ZGV2OwotCWNoYXIgZXZlbnRfc3RyaW5nWzEyXTsKLQljaGFyICplbnZwW10gPSB7IGV2ZW50X3N0cmluZywgTlVMTCB9OwotCi0JYmF5X2RwcmludGsoaGFuZGxlLCAiQmF5IGV2ZW50Iik7Ci0Jc3ByaW50ZihldmVudF9zdHJpbmcsICJCQVlfRVZFTlQ9JWQiLCBldmVudCk7Ci0Ja29iamVjdF91ZXZlbnRfZW52KCZkZXYtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzCi1maW5kX2JheShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKLXsKLQlpbnQgKmNvdW50ID0gKGludCAqKWNvbnRleHQ7Ci0KLQkvKgotCSAqIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgZWplY3RhYmxlIGJheS4KLQkgKiBzbywganVzdCByZXR1cm4gQUVfT0sgYWx3YXlzIHNvIHRoYXQgZXZlcnkgb2JqZWN0Ci0JICogd2lsbCBiZSBjaGVja2VkLgotCSAqLwotCWlmIChpc19lamVjdGFibGVfYmF5KGhhbmRsZSkpIHsKLQkJYmF5X2RwcmludGsoaGFuZGxlLCAiZm91bmQgZWplY3RhYmxlIGJheSIpOwotCQlpZiAoIWJheV9hZGQoaGFuZGxlLCAqY291bnQpKQotCQkJKCpjb3VudCkrKzsKLQl9Ci0JcmV0dXJuIEFFX09LOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBiYXlfaW5pdCh2b2lkKQotewotCWludCBiYXlzID0gMDsKLQotCUlOSVRfTElTVF9IRUFEKCZkcml2ZV9iYXlzKTsKLQotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGxvb2sgZm9yIGRvY2thYmxlIGRyaXZlIGJheXMgKi8KLQlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCi0JCUFDUElfVUlOVDMyX01BWCwgZmluZF9iYXksICZiYXlzLCBOVUxMKTsKLQotCWlmICghYmF5cykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGJheV9leGl0KHZvaWQpCi17Ci0Jc3RydWN0IGJheSAqYmF5LCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJheSwgdG1wLCAmZHJpdmVfYmF5cywgbGlzdCkgewotCQlpZiAoaXNfZG9ja19kZXZpY2UoYmF5LT5oYW5kbGUpKQotCQkJdW5yZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGJheS0+aGFuZGxlKTsKLQkJYWNwaV9iYXlfcmVtb3ZlX2ZzKGJheSk7Ci0JCWFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGJheS0+aGFuZGxlLCBBQ1BJX1NZU1RFTV9OT1RJRlksCi0JCQliYXlfbm90aWZ5KTsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYmF5LT5wZGV2KTsKLQkJa2ZyZWUoYmF5LT5uYW1lKTsKLQkJa2ZyZWUoYmF5KTsKLQl9Ci19Ci0KLXBvc3Rjb3JlX2luaXRjYWxsKGJheV9pbml0KTsKLW1vZHVsZV9leGl0KGJheV9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGNjYWUzMDUuLmM3OTdjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTQ4LDYgKzQ4LDIzIEBACiAKICNkZWZpbmUgU1RSVUNUX1RPX0lOVChzKQkoKigoaW50KikmcykpCiAKK3N0YXRpYyBpbnQgc2V0X3Bvd2VyX25vY2hlY2soY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggIiVzIGRldGVjdGVkIC0gIgorCQkiZGlzYWJsZSBwb3dlciBjaGVjayBpbiBwb3dlciB0cmFuc2lzdGlvblxuIiwgaWQtPmlkZW50KTsKKwlhY3BpX3Bvd2VyX25vY2hlY2sgPSAxOworCXJldHVybiAwOworfQorc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fY3B1aW5pdGRhdGEgcG93ZXJfbm9jaGVja19kbWlfdGFibGVbXSA9IHsKKwl7CisJc2V0X3Bvd2VyX25vY2hlY2ssICJIUCBQYXZpbGlvbiAwNSIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiUGhvZW5peCBUZWNobm9sb2dpZXMgTFREIiksCisJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSFAgUGF2aWxpb24gMDUiKSwKKwlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIjIwMDEyMTFSRTEwMUdMRU5EIikgfSwgTlVMTH0sCisJe30sCit9OworCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSBNYW5hZ2VtZW50CiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNzcsNyArOTQsNyBAQAogaW50IGFjcGlfYnVzX2dldF9zdGF0dXMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JdW5zaWduZWQgbG9uZyBzdGEgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGEgPSAwOwogCiAKIAlpZiAoIWRldmljZSkKQEAgLTk1LDIxICsxMTIsMjEgQEAKIAl9CiAKIAkvKgotCSAqIE90aGVyd2lzZSB3ZSBhc3N1bWUgdGhlIHN0YXR1cyBvZiBvdXIgcGFyZW50ICh1bmxlc3Mgd2UgZG9uJ3QKLQkgKiBoYXZlIG9uZSwgaW4gd2hpY2ggY2FzZSBzdGF0dXMgaXMgaW1wbGllZCkuCisJICogQWNjb3JkaW5nIHRvIEFDUEkgc3BlYyBzb21lIGRldmljZSBjYW4gYmUgcHJlc2VudCBhbmQgZnVuY3Rpb25hbAorCSAqIGV2ZW4gaWYgdGhlIHBhcmVudCBpcyBub3QgcHJlc2VudCBidXQgZnVuY3Rpb25hbC4KKwkgKiBJbiBzdWNoIGNvbmRpdGlvbnMgdGhlIGNoaWxkIGRldmljZSBzaG91bGQgbm90IGluaGVyaXQgdGhlIHN0YXR1cworCSAqIGZyb20gdGhlIHBhcmVudC4KIAkgKi8KLQllbHNlIGlmIChkZXZpY2UtPnBhcmVudCkKLQkJZGV2aWNlLT5zdGF0dXMgPSBkZXZpY2UtPnBhcmVudC0+c3RhdHVzOwogCWVsc2UKIAkJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPQogCQkgICAgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8CiAJCSAgICBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICB8IEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORzsKIAogCWlmIChkZXZpY2UtPnN0YXR1cy5mdW5jdGlvbmFsICYmICFkZXZpY2UtPnN0YXR1cy5wcmVzZW50KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJEZXZpY2UgWyVzXSBzdGF0dXMgWyUwOHhdOiAiCi0JCSAgICAgICAiZnVuY3Rpb25hbCBidXQgbm90IHByZXNlbnQ7IHNldHRpbmcgcHJlc2VudFxuIiwKLQkJICAgICAgIGRldmljZS0+cG5wLmJ1c19pZCwgKHUzMikgU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykpOwotCQlkZXZpY2UtPnN0YXR1cy5wcmVzZW50ID0gMTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIFslc10gc3RhdHVzIFslMDh4XTogIgorCQkgICAgICAgImZ1bmN0aW9uYWwgYnV0IG5vdCBwcmVzZW50O1xuIiwKKwkJCWRldmljZS0+cG5wLmJ1c19pZCwKKwkJCSh1MzIpIFNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpKSk7CiAJfQogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIFslc10gc3RhdHVzIFslMDh4XVxuIiwKQEAgLTE1NSw3ICsxNzIsNyBAQAogCWludCByZXN1bHQgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgcHNjID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHNjID0gMDsKIAogCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZkZXZpY2UpOwpAQCAtMjIzLDcgKzI0MCwxOSBAQAogCS8qCiAJICogR2V0IGRldmljZSdzIGN1cnJlbnQgcG93ZXIgc3RhdGUKIAkgKi8KLQlhY3BpX2J1c19nZXRfcG93ZXIoZGV2aWNlLT5oYW5kbGUsICZkZXZpY2UtPnBvd2VyLnN0YXRlKTsKKwlpZiAoIWFjcGlfcG93ZXJfbm9jaGVjaykgeworCQkvKgorCQkgKiBNYXliZSB0aGUgaW5jb3JyZWN0IHBvd2VyIHN0YXRlIGlzIHJldHVybmVkIG9uIHRoZSBib2d1cworCQkgKiBiaW9zLCB3aGljaCBpcyBkaWZmZXJlbnQgd2l0aCB0aGUgcmVhbCBwb3dlciBzdGF0ZS4KKwkJICogRm9yIGV4YW1wbGU6IHRoZSBiaW9zIHJldHVybnMgRDAgc3RhdGUgYW5kIHRoZSByZWFsIHBvd2VyCisJCSAqIHN0YXRlIGlzIEQzLiBPUyBleHBlY3RzIHRvIHNldCB0aGUgZGV2aWNlIHRvIEQwIHN0YXRlLiBJbgorCQkgKiBzdWNoIGNhc2UgaWYgT1MgdXNlcyB0aGUgcG93ZXIgc3RhdGUgcmV0dXJuZWQgYnkgdGhlIEJJT1MsCisJCSAqIHRoZSBkZXZpY2UgY2FuJ3QgYmUgdHJhbnNpc3RlZCB0byB0aGUgY29ycmVjdCBwb3dlciBzdGF0ZS4KKwkJICogU28gaWYgdGhlIGFjcGlfcG93ZXJfbm9jaGVjayBpcyBzZXQsIGl0IGlzIHVubmVjZXNzYXJ5IHRvCisJCSAqIGdldCB0aGUgcG93ZXIgc3RhdGUgYnkgY2FsbGluZyBhY3BpX2J1c19nZXRfcG93ZXIuCisJCSAqLworCQlhY3BpX2J1c19nZXRfcG93ZXIoZGV2aWNlLT5oYW5kbGUsICZkZXZpY2UtPnBvd2VyLnN0YXRlKTsKKwl9CiAJaWYgKChzdGF0ZSA9PSBkZXZpY2UtPnBvd2VyLnN0YXRlKSAmJiAhZGV2aWNlLT5mbGFncy5mb3JjZV9wb3dlcl9zdGF0ZSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXZpY2UgaXMgYWxyZWFkeSBhdCBEJWRcbiIsCiAJCQkJICBzdGF0ZSkpOwpAQCAtNDk2LDYgKzUyNSwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChhY3BpX2J1c19ub3RpZnlfbGlzdCk7CitpbnQgcmVnaXN0ZXJfYWNwaV9idXNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmFjcGlfYnVzX25vdGlmeV9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9hY3BpX2J1c19ub3RpZmllcik7CisKK3ZvaWQgdW5yZWdpc3Rlcl9hY3BpX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCWJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmFjcGlfYnVzX25vdGlmeV9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2FjcGlfYnVzX25vdGlmaWVyKTsKKwogLyoqCiAgKiBhY3BpX2J1c19ub3RpZnkKICAqIC0tLS0tLS0tLS0tLS0tLQpAQCAtNTA2LDYgKzU0OCw4IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCisJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmYWNwaV9idXNfbm90aWZ5X2xpc3QsCisJCXR5cGUsICh2b2lkICopaGFuZGxlKTsKIAogCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkpCiAJCXJldHVybjsKQEAgLTc0OSw2ICs3OTMsMTIgQEAKIAkJZ290byBlcnJvcjE7CiAJfQogCisJLyoKKwkgKiBNYXliZSBFQyByZWdpb24gaXMgcmVxdWlyZWQgYXQgYnVzX3NjYW4vYWNwaV9nZXRfZGV2aWNlcy4gU28gaXQKKwkgKiBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIGl0IGFzIGVhcmx5IGFzIHBvc3NpYmxlLgorCSAqLworCWFjcGlfYm9vdF9lY19lbmFibGUoKTsKKwogCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJJbnRlcnByZXRlciBlbmFibGVkXG4iKTsKIAogCS8qIEluaXRpYWxpemUgc2xlZXAgc3RydWN0dXJlcyAqLwpAQCAtODE4LDcgKzg2OCwxMSBAQAogCQl9CiAJfSBlbHNlCiAJCWRpc2FibGVfYWNwaSgpOwotCisJLyoKKwkgKiBJZiB0aGUgbGFwdG9wIGZhbGxzIGludG8gdGhlIERNSSBjaGVjayB0YWJsZSwgdGhlIHBvd2VyIHN0YXRlIGNoZWNrCisJICogd2lsbCBiZSBkaXNhYmxlZCBpbiB0aGUgY291cnNlIG9mIGRldmljZSBwb3dlciB0cmFuc2lzdGlvbi4KKwkgKi8KKwlkbWlfY2hlY2tfc3lzdGVtKHBvd2VyX25vY2hlY2tfZG1pX3RhYmxlKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggMWRmZWM0MS4uOWQ1NjhkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBzZXEtPnByaXZhdGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlOwogCiAJaWYgKCFidXR0b24gfHwgIWJ1dHRvbi0+ZGV2aWNlKQogCQlyZXR1cm4gMDsKQEAgLTI1Myw3ICsyNTMsNyBAQAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgYWNwaV9saWRfc2VuZF9zdGF0ZShzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbikKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXRlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoYnV0dG9uLT5kZXZpY2UtPmhhbmRsZSwgIl9MSUQiLCBOVUxMLApAQCAtMzg0LDcgKzM4NCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJYnV0dG9uLT5kZXZpY2UgPSBkZXZpY2U7Ci0JYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gYnV0dG9uOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBidXR0b247CiAKIAlidXR0b24tPmlucHV0ID0gaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvY21fc2JzLmMgYi9kcml2ZXJzL2FjcGkvY21fc2JzLmMKaW5kZXggZjlkYjRmNC4uNDQ0MWU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2NtX3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9jbV9zYnMuYwpAQCAtNTIsOCArNTIsOCBAQAogCWlmIChhY3BpX2FjX2RpcikgewogCQlsb2NrX2FjX2Rpcl9jbnQrKzsKIAl9IGVsc2UgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkNhbm5vdCBjcmVhdGUgJXNcbiIsIEFDUElfQUNfQ0xBU1MpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAorCQkJCSAgIkNhbm5vdCBjcmVhdGUgJXNcbiIsIEFDUElfQUNfQ0xBU1MpOwogCX0KIAltdXRleF91bmxvY2soJmNtX3Nic19tdXRleCk7CiAJcmV0dXJuIGFjcGlfYWNfZGlyOwpAQCAtODMsOCArODMsOCBAQAogCWlmIChhY3BpX2JhdHRlcnlfZGlyKSB7CiAJCWxvY2tfYmF0dGVyeV9kaXJfY250Kys7CiAJfSBlbHNlIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJDYW5ub3QgY3JlYXRlICVzXG4iLCBBQ1BJX0JBVFRFUllfQ0xBU1MpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAorCQkJCSAgIkNhbm5vdCBjcmVhdGUgJXNcbiIsIEFDUElfQkFUVEVSWV9DTEFTUyk7CiAJfQogCW11dGV4X3VubG9jaygmY21fc2JzX211dGV4KTsKIAlyZXR1cm4gYWNwaV9iYXR0ZXJ5X2RpcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYyBiL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYwppbmRleCAzYzI1ZWM3Li4xMzQ4MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvY29udGFpbmVyLmMKKysrIGIvZHJpdmVycy9hY3BpL2NvbnRhaW5lci5jCkBAIC03Niw3ICs3Niw3IEBACiB7CiAJYWNwaV9oYW5kbGUgdGVtcDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBzdGE7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YTsKIAogCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9TVEEiLCAmdGVtcCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAljb250YWluZXItPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfQ09OVEFJTkVSX0RFVklDRV9OQU1FKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9DT05UQUlORVJfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGNvbnRhaW5lcjsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gY29udGFpbmVyOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIDwlcz4gYmlkIDwlcz5cbiIsCiAJCQkgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKaW5kZXggNmRmNTY0Zi4uYWJmMzZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RlYnVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKQEAgLTQ3LDggKzQ3LDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kbGV2ZWwgYWNwaV9kZWJ1Z19sZXZlbHNbXSA9IHsKLQlBQ1BJX0RFQlVHX0lOSVQoQUNQSV9MVl9FUlJPUiksCi0JQUNQSV9ERUJVR19JTklUKEFDUElfTFZfV0FSTiksCiAJQUNQSV9ERUJVR19JTklUKEFDUElfTFZfSU5JVCksCiAJQUNQSV9ERUJVR19JTklUKEFDUElfTFZfREVCVUdfT0JKRUNUKSwKIAlBQ1BJX0RFQlVHX0lOSVQoQUNQSV9MVl9JTkZPKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jCmluZGV4IDQ2MTNiOWMuLjI3OWE1YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtZXRob2QuYwpAQCAtMTAzLDYgKzEwMyw5IEBACiAJCQkJCQkgICAgTlVMTCk7CiAJCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAl9CisKKwlhY3BpX2RzX2NsZWFyX2ltcGxpY2l0X3JldHVybih3YWxrX3N0YXRlKTsKKwogI2lmZGVmIEFDUElfRElTQVNTRU1CTEVSCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbXRoZGF0LmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc210aGRhdC5jCmluZGV4IDEzYzQzZWEuLmQwM2Y4MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbXRoZGF0LmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtdGhkYXQuYwpAQCAtNDMsNyArNDMsNiBAQAogCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY2Rpc3BhdC5oPgotI2luY2x1ZGUgPGFjcGkvYW1sY29kZS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CiAKQEAgLTUyLDExICs1MSwxMSBAQAogCiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9pZAotYWNwaV9kc19tZXRob2RfZGF0YV9kZWxldGVfdmFsdWUodTE2IG9wY29kZSwKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX3ZhbHVlKHU4IHR5cGUsCiAJCQkJIHUzMiBpbmRleCwgc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSk7CiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9kc19tZXRob2RfZGF0YV9zZXRfdmFsdWUodTE2IG9wY29kZSwKK2FjcGlfZHNfbWV0aG9kX2RhdGFfc2V0X3ZhbHVlKHU4IHR5cGUsCiAJCQkgICAgICB1MzIgaW5kZXgsCiAJCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3QsCiAJCQkgICAgICBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKTsKQEAgLTIxNiw3ICsyMTUsNyBAQAogCQkgKiBTdG9yZSB0aGUgYXJndW1lbnQgaW4gdGhlIG1ldGhvZC93YWxrIGRlc2NyaXB0b3IuCiAJCSAqIERvIG5vdCBjb3B5IHRoZSBhcmcgaW4gb3JkZXIgdG8gaW1wbGVtZW50IGNhbGwgYnkgcmVmZXJlbmNlCiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX2RzX21ldGhvZF9kYXRhX3NldF92YWx1ZShBTUxfQVJHX09QLCBpbmRleCwKKwkJc3RhdHVzID0gYWNwaV9kc19tZXRob2RfZGF0YV9zZXRfdmFsdWUoQUNQSV9SRUZDTEFTU19BUkcsIGluZGV4LAogCQkJCQkJICAgICAgIHBhcmFtc1tpbmRleF0sCiAJCQkJCQkgICAgICAgd2Fsa19zdGF0ZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMjM0LDcgKzIzMyw4IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUKICAqCi0gKiBQQVJBTUVURVJTOiAgT3Bjb2RlICAgICAgICAgICAgICAtIEVpdGhlciBBTUxfTE9DQUxfT1Agb3IgQU1MX0FSR19PUAorICogUEFSQU1FVEVSUzogIFR5cGUgICAgICAgICAgICAgICAgLSBFaXRoZXIgQUNQSV9SRUZDTEFTU19MT0NBTCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX1JFRkNMQVNTX0FSRwogICogICAgICAgICAgICAgIEluZGV4ICAgICAgICAgICAgICAgLSBXaGljaCBMb2NhbCBvciBBcmcgd2hvc2UgdHlwZSB0byBnZXQKICAqICAgICAgICAgICAgICB3YWxrX3N0YXRlICAgICAgICAgIC0gQ3VycmVudCB3YWxrIHN0YXRlIG9iamVjdAogICogICAgICAgICAgICAgIE5vZGUgICAgICAgICAgICAgICAgLSBXaGVyZSB0aGUgbm9kZSBpcyByZXR1cm5lZC4KQEAgLTI0Niw3ICsyNDYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMKLWFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUodTE2IG9wY29kZSwKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUodTggdHlwZSwKIAkJCSAgICAgdTMyIGluZGV4LAogCQkJICAgICBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlLAogCQkJICAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKm5vZGUpCkBAIC0yNTYsOCArMjU2LDggQEAKIAkvKgogCSAqIE1ldGhvZCBMb2NhbHMgYW5kIEFyZ3VtZW50cyBhcmUgc3VwcG9ydGVkCiAJICovCi0Jc3dpdGNoIChvcGNvZGUpIHsKLQljYXNlIEFNTF9MT0NBTF9PUDoKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CiAKIAkJaWYgKGluZGV4ID4gQUNQSV9NRVRIT0RfTUFYX0xPQ0FMKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLApAQCAtMjcxLDcgKzI3MSw3IEBACiAJCSpub2RlID0gJndhbGtfc3RhdGUtPmxvY2FsX3ZhcmlhYmxlc1tpbmRleF07CiAJCWJyZWFrOwogCi0JY2FzZSBBTUxfQVJHX09QOgorCWNhc2UgQUNQSV9SRUZDTEFTU19BUkc6CiAKIAkJaWYgKGluZGV4ID4gQUNQSV9NRVRIT0RfTUFYX0FSRykgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKQEAgLTI4Niw4ICsyODYsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJPcGNvZGUgJWQgaXMgaW52YWxpZCIsIG9wY29kZSkpOwotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0JBRF9PUENPREUpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiVHlwZSAlZCBpcyBpbnZhbGlkIiwgdHlwZSkpOworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfVFlQRSk7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTI5Nyw3ICsyOTcsOCBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2RzX21ldGhvZF9kYXRhX3NldF92YWx1ZQogICoKLSAqIFBBUkFNRVRFUlM6ICBPcGNvZGUgICAgICAgICAgICAgIC0gRWl0aGVyIEFNTF9MT0NBTF9PUCBvciBBTUxfQVJHX09QCisgKiBQQVJBTUVURVJTOiAgVHlwZSAgICAgICAgICAgICAgICAtIEVpdGhlciBBQ1BJX1JFRkNMQVNTX0xPQ0FMIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfUkVGQ0xBU1NfQVJHCiAgKiAgICAgICAgICAgICAgSW5kZXggICAgICAgICAgICAgICAtIFdoaWNoIExvY2FsIG9yIEFyZyB0byBnZXQKICAqICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgICAgIC0gT2JqZWN0IHRvIGJlIGluc2VydGVkIGludG8gdGhlIHN0YWNrIGVudHJ5CiAgKiAgICAgICAgICAgICAgd2Fsa19zdGF0ZSAgICAgICAgICAtIEN1cnJlbnQgd2FsayBzdGF0ZSBvYmplY3QKQEAgLTMxMCw3ICszMTEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX2RzX21ldGhvZF9kYXRhX3NldF92YWx1ZSh1MTYgb3Bjb2RlLAorYWNwaV9kc19tZXRob2RfZGF0YV9zZXRfdmFsdWUodTggdHlwZSwKIAkJCSAgICAgIHUzMiBpbmRleCwKIAkJCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9iamVjdCwKIAkJCSAgICAgIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCkBAIC0zMjEsMTMgKzMyMiwxMyBAQAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfbWV0aG9kX2RhdGFfc2V0X3ZhbHVlKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIk5ld09iaiAlcCBPcGNvZGUgJVgsIFJlZnM9JWQgWyVzXVxuIiwgb2JqZWN0LAotCQkJICBvcGNvZGUsIG9iamVjdC0+Y29tbW9uLnJlZmVyZW5jZV9jb3VudCwKKwkJCSAgIk5ld09iaiAlcCBUeXBlICUyLjJYLCBSZWZzPSVkIFslc11cbiIsIG9iamVjdCwKKwkJCSAgdHlwZSwgb2JqZWN0LT5jb21tb24ucmVmZXJlbmNlX2NvdW50LAogCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUob2JqZWN0LT5jb21tb24udHlwZSkpKTsKIAogCS8qIEdldCB0aGUgbmFtZXNwYWNlIG5vZGUgZm9yIHRoZSBhcmcvbG9jYWwgKi8KIAotCXN0YXR1cyA9IGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUob3Bjb2RlLCBpbmRleCwgd2Fsa19zdGF0ZSwgJm5vZGUpOworCXN0YXR1cyA9IGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUodHlwZSwgaW5kZXgsIHdhbGtfc3RhdGUsICZub2RlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQpAQCAtMzUwLDcgKzM1MSw4IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X3ZhbHVlCiAgKgotICogUEFSQU1FVEVSUzogIE9wY29kZSAgICAgICAgICAgICAgLSBFaXRoZXIgQU1MX0xPQ0FMX09QIG9yIEFNTF9BUkdfT1AKKyAqIFBBUkFNRVRFUlM6ICBUeXBlICAgICAgICAgICAgICAgIC0gRWl0aGVyIEFDUElfUkVGQ0xBU1NfTE9DQUwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9SRUZDTEFTU19BUkcKICAqICAgICAgICAgICAgICBJbmRleCAgICAgICAgICAgICAgIC0gV2hpY2ggbG9jYWxfdmFyIG9yIGFyZ3VtZW50IHRvIGdldAogICogICAgICAgICAgICAgIHdhbGtfc3RhdGUgICAgICAgICAgLSBDdXJyZW50IHdhbGsgc3RhdGUgb2JqZWN0CiAgKiAgICAgICAgICAgICAgZGVzdF9kZXNjICAgICAgICAgICAtIFdoZXJlIEFyZyBvciBMb2NhbCB2YWx1ZSBpcyByZXR1cm5lZApAQCAtMzYzLDcgKzM2NSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfdmFsdWUodTE2IG9wY29kZSwKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X3ZhbHVlKHU4IHR5cGUsCiAJCQkgICAgICB1MzIgaW5kZXgsCiAJCQkgICAgICBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlLAogCQkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmRlc3RfZGVzYykKQEAgLTM4Myw3ICszODUsNyBAQAogCiAJLyogR2V0IHRoZSBuYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIGFyZy9sb2NhbCAqLwogCi0Jc3RhdHVzID0gYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZShvcGNvZGUsIGluZGV4LCB3YWxrX3N0YXRlLCAmbm9kZSk7CisJc3RhdHVzID0gYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZSh0eXBlLCBpbmRleCwgd2Fsa19zdGF0ZSwgJm5vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC00MTksOCArNDIxLDggQEAKIAkJLyogT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGVycm9yICovCiAKIAkJZWxzZQotCQkJc3dpdGNoIChvcGNvZGUpIHsKLQkJCWNhc2UgQU1MX0FSR19PUDoKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX0FSRzoKIAogCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJCSAgICAiVW5pbml0aWFsaXplZCBBcmdbJWRdIGF0IG5vZGUgJXAiLApAQCAtNDI4LDcgKzQzMCw3IEBACiAKIAkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX1VOSU5JVElBTElaRURfQVJHKTsKIAotCQkJY2FzZSBBTUxfTE9DQUxfT1A6CisJCQljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CiAKIAkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCQkgICAgIlVuaW5pdGlhbGl6ZWQgTG9jYWxbJWRdIGF0IG5vZGUgJXAiLApAQCAtNDM3LDkgKzQzOSwxMCBAQAogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfVU5JTklUSUFMSVpFRF9MT0NBTCk7CiAKIAkJCWRlZmF1bHQ6CisKIAkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCQkgICAgIk5vdCBhIEFyZy9Mb2NhbCBvcGNvZGU6ICVYIiwKLQkJCQkJICAgIG9wY29kZSkpOworCQkJCQkgICAgdHlwZSkpOwogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfSU5URVJOQUwpOwogCQkJfQogCX0KQEAgLTQ1OCw3ICs0NjEsOCBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2RzX21ldGhvZF9kYXRhX2RlbGV0ZV92YWx1ZQogICoKLSAqIFBBUkFNRVRFUlM6ICBPcGNvZGUgICAgICAgICAgICAgIC0gRWl0aGVyIEFNTF9MT0NBTF9PUCBvciBBTUxfQVJHX09QCisgKiBQQVJBTUVURVJTOiAgVHlwZSAgICAgICAgICAgICAgICAtIEVpdGhlciBBQ1BJX1JFRkNMQVNTX0xPQ0FMIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfUkVGQ0xBU1NfQVJHCiAgKiAgICAgICAgICAgICAgSW5kZXggICAgICAgICAgICAgICAtIFdoaWNoIGxvY2FsX3ZhciBvciBhcmd1bWVudCB0byBkZWxldGUKICAqICAgICAgICAgICAgICB3YWxrX3N0YXRlICAgICAgICAgIC0gQ3VycmVudCB3YWxrIHN0YXRlIG9iamVjdAogICoKQEAgLTQ3MCw3ICs0NzQsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQKLWFjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX3ZhbHVlKHUxNiBvcGNvZGUsCithY3BpX2RzX21ldGhvZF9kYXRhX2RlbGV0ZV92YWx1ZSh1OCB0eXBlLAogCQkJCSB1MzIgaW5kZXgsIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtNDgxLDcgKzQ4NSw3IEBACiAKIAkvKiBHZXQgdGhlIG5hbWVzcGFjZSBub2RlIGZvciB0aGUgYXJnL2xvY2FsICovCiAKLQlzdGF0dXMgPSBhY3BpX2RzX21ldGhvZF9kYXRhX2dldF9ub2RlKG9wY29kZSwgaW5kZXgsIHdhbGtfc3RhdGUsICZub2RlKTsKKwlzdGF0dXMgPSBhY3BpX2RzX21ldGhvZF9kYXRhX2dldF9ub2RlKHR5cGUsIGluZGV4LCB3YWxrX3N0YXRlLCAmbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9WT0lEOwogCX0KQEAgLTUxNCw3ICs1MTgsOCBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2RzX3N0b3JlX29iamVjdF90b19sb2NhbAogICoKLSAqIFBBUkFNRVRFUlM6ICBPcGNvZGUgICAgICAgICAgICAgIC0gRWl0aGVyIEFNTF9MT0NBTF9PUCBvciBBTUxfQVJHX09QCisgKiBQQVJBTUVURVJTOiAgVHlwZSAgICAgICAgICAgICAgICAtIEVpdGhlciBBQ1BJX1JFRkNMQVNTX0xPQ0FMIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfUkVGQ0xBU1NfQVJHCiAgKiAgICAgICAgICAgICAgSW5kZXggICAgICAgICAgICAgICAtIFdoaWNoIExvY2FsIG9yIEFyZyB0byBzZXQKICAqICAgICAgICAgICAgICBvYmpfZGVzYyAgICAgICAgICAgIC0gVmFsdWUgdG8gYmUgc3RvcmVkCiAgKiAgICAgICAgICAgICAgd2Fsa19zdGF0ZSAgICAgICAgICAtIEN1cnJlbnQgd2FsayBzdGF0ZQpAQCAtNTI4LDcgKzUzMyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV9kc19zdG9yZV9vYmplY3RfdG9fbG9jYWwodTE2IG9wY29kZSwKK2FjcGlfZHNfc3RvcmVfb2JqZWN0X3RvX2xvY2FsKHU4IHR5cGUsCiAJCQkgICAgICB1MzIgaW5kZXgsCiAJCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKIAkJCSAgICAgIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCkBAIC01MzksOCArNTQ0LDggQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpuZXdfb2JqX2Rlc2M7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX3N0b3JlX29iamVjdF90b19sb2NhbCk7Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiT3Bjb2RlPSVYIEluZGV4PSVkIE9iaj0lcFxuIiwKLQkJCSAgb3Bjb2RlLCBpbmRleCwgb2JqX2Rlc2MpKTsKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJUeXBlPSUyLjJYIEluZGV4PSVkIE9iaj0lcFxuIiwKKwkJCSAgdHlwZSwgaW5kZXgsIG9ial9kZXNjKSk7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC01NTAsNyArNTU1LDcgQEAKIAogCS8qIEdldCB0aGUgbmFtZXNwYWNlIG5vZGUgZm9yIHRoZSBhcmcvbG9jYWwgKi8KIAotCXN0YXR1cyA9IGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUob3Bjb2RlLCBpbmRleCwgd2Fsa19zdGF0ZSwgJm5vZGUpOworCXN0YXR1cyA9IGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUodHlwZSwgaW5kZXgsIHdhbGtfc3RhdGUsICZub2RlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQpAQCAtNjAyLDcgKzYwNyw3IEBACiAJCSAqCiAJCSAqIFdlaXJkLCBidXQgdHJ1ZS4KIAkJICovCi0JCWlmIChvcGNvZGUgPT0gQU1MX0FSR19PUCkgeworCQlpZiAodHlwZSA9PSBBQ1BJX1JFRkNMQVNTX0FSRykgewogCQkJLyoKIAkJCSAqIElmIHdlIGhhdmUgYSB2YWxpZCByZWZlcmVuY2Ugb2JqZWN0IHRoYXQgY2FtZSBmcm9tIHJlZl9vZigpLAogCQkJICogZG8gdGhlIGluZGlyZWN0IHN0b3JlCkBAIC02MTEsOCArNjE2LDggQEAKIAkJCSAgICAgQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkKIAkJCSAgICAmJiAoY3VycmVudF9vYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0KIAkJCQlBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQotCQkJICAgICYmIChjdXJyZW50X29ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09Ci0JCQkJQU1MX1JFRl9PRl9PUCkpIHsKKwkJCSAgICAmJiAoY3VycmVudF9vYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzID09CisJCQkJQUNQSV9SRUZDTEFTU19SRUZPRikpIHsKIAkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCiAJCQkJCQkgICJBcmcgKCVwKSBpcyBhbiBPYmpSZWYoTm9kZSksIHN0b3JpbmcgaW4gbm9kZSAlcFxuIiwKIAkJCQkJCSAgbmV3X29ial9kZXNjLApAQCAtNjQwLDExICs2NDUsOSBAQAogCQkJfQogCQl9CiAKLQkJLyoKLQkJICogRGVsZXRlIHRoZSBleGlzdGluZyBvYmplY3QKLQkJICogYmVmb3JlIHN0b3JpbmcgdGhlIG5ldyBvbmUKLQkJICovCi0JCWFjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX3ZhbHVlKG9wY29kZSwgaW5kZXgsIHdhbGtfc3RhdGUpOworCQkvKiBEZWxldGUgdGhlIGV4aXN0aW5nIG9iamVjdCBiZWZvcmUgc3RvcmluZyB0aGUgbmV3IG9uZSAqLworCisJCWFjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX3ZhbHVlKHR5cGUsIGluZGV4LCB3YWxrX3N0YXRlKTsKIAl9CiAKIAkvKgpAQCAtNjUzLDcgKzY1Niw3IEBACiAJICogKGluY3JlbWVudHMgdGhlIG9iamVjdCByZWZlcmVuY2UgY291bnQgYnkgb25lKQogCSAqLwogCXN0YXR1cyA9Ci0JICAgIGFjcGlfZHNfbWV0aG9kX2RhdGFfc2V0X3ZhbHVlKG9wY29kZSwgaW5kZXgsIG5ld19vYmpfZGVzYywKKwkgICAgYWNwaV9kc19tZXRob2RfZGF0YV9zZXRfdmFsdWUodHlwZSwgaW5kZXgsIG5ld19vYmpfZGVzYywKIAkJCQkJICB3YWxrX3N0YXRlKTsKIAogCS8qIFJlbW92ZSBsb2NhbCByZWZlcmVuY2UgaWYgd2UgY29waWVkIHRoZSBvYmplY3QgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29iamVjdC5jCmluZGV4IDBmMjgwNTguLjRmMDhlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNvYmplY3QuYwpAQCAtNzMxLDU0ICs3MzEsNzAgQEAKIAkJc3dpdGNoIChvcF9pbmZvLT50eXBlKSB7CiAJCWNhc2UgQU1MX1RZUEVfTE9DQUxfVkFSSUFCTEU6CiAKLQkJCS8qIFNwbGl0IHRoZSBvcGNvZGUgaW50byBhIGJhc2Ugb3Bjb2RlICsgb2Zmc2V0ICovCisJCQkvKiBMb2NhbCBJRCAoMC03KSBpcyAoQU1MIG9wY29kZSAtIGJhc2UgQU1MX0xPQ0FMX09QKSAqLwogCi0JCQlvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSA9IEFNTF9MT0NBTF9PUDsKLQkJCW9ial9kZXNjLT5yZWZlcmVuY2Uub2Zmc2V0ID0gb3Bjb2RlIC0gQU1MX0xPQ0FMX09QOworCQkJb2JqX2Rlc2MtPnJlZmVyZW5jZS52YWx1ZSA9IG9wY29kZSAtIEFNTF9MT0NBTF9PUDsKKwkJCW9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOwogCiAjaWZuZGVmIEFDUElfTk9fTUVUSE9EX0VYRUNVVElPTgotCQkJc3RhdHVzID0gYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZShBTUxfTE9DQUxfT1AsCi0JCQkJCQkJICAgICAgb2JqX2Rlc2MtPgotCQkJCQkJCSAgICAgIHJlZmVyZW5jZS5vZmZzZXQsCi0JCQkJCQkJICAgICAgd2Fsa19zdGF0ZSwKLQkJCQkJCQkgICAgICAoc3RydWN0Ci0JCQkJCQkJICAgICAgIGFjcGlfbmFtZXNwYWNlX25vZGUKLQkJCQkJCQkgICAgICAgKiopJm9ial9kZXNjLT4KLQkJCQkJCQkgICAgICByZWZlcmVuY2Uub2JqZWN0KTsKKwkJCXN0YXR1cyA9CisJCQkgICAgYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZShBQ1BJX1JFRkNMQVNTX0xPQ0FMLAorCQkJCQkJCSBvYmpfZGVzYy0+cmVmZXJlbmNlLgorCQkJCQkJCSB2YWx1ZSwgd2Fsa19zdGF0ZSwKKwkJCQkJCQkgQUNQSV9DQVNUX0lORElSRUNUX1BUUgorCQkJCQkJCSAoc3RydWN0CisJCQkJCQkJICBhY3BpX25hbWVzcGFjZV9ub2RlLAorCQkJCQkJCSAgJm9ial9kZXNjLT5yZWZlcmVuY2UuCisJCQkJCQkJICBvYmplY3QpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAKIAkJY2FzZSBBTUxfVFlQRV9NRVRIT0RfQVJHVU1FTlQ6CiAKLQkJCS8qIFNwbGl0IHRoZSBvcGNvZGUgaW50byBhIGJhc2Ugb3Bjb2RlICsgb2Zmc2V0ICovCisJCQkvKiBBcmcgSUQgKDAtNikgaXMgKEFNTCBvcGNvZGUgLSBiYXNlIEFNTF9BUkdfT1ApICovCiAKLQkJCW9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID0gQU1MX0FSR19PUDsKLQkJCW9ial9kZXNjLT5yZWZlcmVuY2Uub2Zmc2V0ID0gb3Bjb2RlIC0gQU1MX0FSR19PUDsKKwkJCW9ial9kZXNjLT5yZWZlcmVuY2UudmFsdWUgPSBvcGNvZGUgLSBBTUxfQVJHX09QOworCQkJb2JqX2Rlc2MtPnJlZmVyZW5jZS5jbGFzcyA9IEFDUElfUkVGQ0xBU1NfQVJHOwogCiAjaWZuZGVmIEFDUElfTk9fTUVUSE9EX0VYRUNVVElPTgotCQkJc3RhdHVzID0gYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZShBTUxfQVJHX09QLAorCQkJc3RhdHVzID0gYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZShBQ1BJX1JFRkNMQVNTX0FSRywKIAkJCQkJCQkgICAgICBvYmpfZGVzYy0+Ci0JCQkJCQkJICAgICAgcmVmZXJlbmNlLm9mZnNldCwKKwkJCQkJCQkgICAgICByZWZlcmVuY2UudmFsdWUsCiAJCQkJCQkJICAgICAgd2Fsa19zdGF0ZSwKKwkJCQkJCQkgICAgICBBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSCiAJCQkJCQkJICAgICAgKHN0cnVjdAotCQkJCQkJCSAgICAgICBhY3BpX25hbWVzcGFjZV9ub2RlCi0JCQkJCQkJICAgICAgICoqKSZvYmpfZGVzYy0+Ci0JCQkJCQkJICAgICAgcmVmZXJlbmNlLm9iamVjdCk7CisJCQkJCQkJICAgICAgIGFjcGlfbmFtZXNwYWNlX25vZGUsCisJCQkJCQkJICAgICAgICZvYmpfZGVzYy0+CisJCQkJCQkJICAgICAgIHJlZmVyZW5jZS4KKwkJCQkJCQkgICAgICAgb2JqZWN0KSk7CiAjZW5kaWYKIAkJCWJyZWFrOwogCi0JCWRlZmF1bHQ6CS8qIE90aGVyIGxpdGVyYWxzLCBldGMuLiAqLworCQlkZWZhdWx0OgkvKiBPYmplY3QgbmFtZSBvciBEZWJ1ZyBvYmplY3QgKi8KIAotCQkJaWYgKG9wLT5jb21tb24uYW1sX29wY29kZSA9PSBBTUxfSU5UX05BTUVQQVRIX09QKSB7CisJCQlzd2l0Y2ggKG9wLT5jb21tb24uYW1sX29wY29kZSkgeworCQkJY2FzZSBBTUxfSU5UX05BTUVQQVRIX09QOgogCiAJCQkJLyogTm9kZSB3YXMgc2F2ZWQgaW4gT3AgKi8KIAogCQkJCW9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZSA9IG9wLT5jb21tb24ubm9kZTsKIAkJCQlvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCA9CiAJCQkJICAgIG9wLT5jb21tb24ubm9kZS0+b2JqZWN0OwotCQkJfQorCQkJCW9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPSBBQ1BJX1JFRkNMQVNTX05BTUU7CisJCQkJYnJlYWs7CiAKLQkJCW9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID0gb3Bjb2RlOworCQkJY2FzZSBBTUxfREVCVUdfT1A6CisKKwkJCQlvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzID0gQUNQSV9SRUZDTEFTU19ERUJVRzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKworCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJCSAgICAiVW5pbXBsZW1lbnRlZCByZWZlcmVuY2UgdHlwZSBmb3IgQU1MIG9wY29kZTogJTQuNFgiLAorCQkJCQkgICAgb3Bjb2RlKSk7CisJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworCQkJfQogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNvcGNvZGUuYwppbmRleCA2YTgxYzQ0Li42OWZhZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb3Bjb2RlLmMKQEAgLTEzMzAsNyArMTMzMCw3IEBACiAJCQkgICAgICh3YWxrX3N0YXRlLT5yZXN1bHRzLT5yZXN1bHRzLm9ial9kZXNjWzBdKSA9PQogCQkJICAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQogCQkJICAgICYmICgod2Fsa19zdGF0ZS0+cmVzdWx0cy0+cmVzdWx0cy5vYmpfZGVzY1swXSktPgotCQkJCXJlZmVyZW5jZS5vcGNvZGUgIT0gQU1MX0lOREVYX09QKSkgeworCQkJCXJlZmVyZW5jZS5jbGFzcyAhPSBBQ1BJX1JFRkNMQVNTX0lOREVYKSkgewogCQkJCXN0YXR1cyA9CiAJCQkJICAgIGFjcGlfZXhfcmVzb2x2ZV90b192YWx1ZSgmd2Fsa19zdGF0ZS0+CiAJCQkJCQkJICAgICByZXN1bHRzLT5yZXN1bHRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3ZXhlYy5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3ZXhlYy5jCmluZGV4IGI1MDcyZmEuLjM5NmZlMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2V4ZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dleGVjLmMKQEAgLTE2Niw2ICsxNjYsMTAgQEAKIAkJc3RhdHVzID0gQUVfQ1RSTF9GQUxTRTsKIAl9CiAKKwkvKiBQcmVkaWNhdGUgY2FuIGJlIHVzZWQgZm9yIGFuIGltcGxpY2l0IHJldHVybiB2YWx1ZSAqLworCisJKHZvaWQpYWNwaV9kc19kb19pbXBsaWNpdF9yZXR1cm4obG9jYWxfb2JqX2Rlc2MsIHdhbGtfc3RhdGUsIFRSVUUpOworCiAgICAgICBjbGVhbnVwOgogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiQ29tcGxldGVkIGEgcHJlZGljYXRlIGV2YWw9JVggT3A9JXBcbiIsCkBAIC00MjksMTAgKzQzMywxMCBAQAogCQkJICAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQogCQkJICAgICYmICh3YWxrX3N0YXRlLT5vcGVyYW5kc1sxXS0+Y29tbW9uLnR5cGUgPT0KIAkJCQlBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQotCQkJICAgICYmICh3YWxrX3N0YXRlLT5vcGVyYW5kc1swXS0+cmVmZXJlbmNlLm9wY29kZSA9PQotCQkJCXdhbGtfc3RhdGUtPm9wZXJhbmRzWzFdLT5yZWZlcmVuY2Uub3Bjb2RlKQotCQkJICAgICYmICh3YWxrX3N0YXRlLT5vcGVyYW5kc1swXS0+cmVmZXJlbmNlLm9mZnNldCA9PQotCQkJCXdhbGtfc3RhdGUtPm9wZXJhbmRzWzFdLT5yZWZlcmVuY2Uub2Zmc2V0KSkgeworCQkJICAgICYmICh3YWxrX3N0YXRlLT5vcGVyYW5kc1swXS0+cmVmZXJlbmNlLmNsYXNzID09CisJCQkJd2Fsa19zdGF0ZS0+b3BlcmFuZHNbMV0tPnJlZmVyZW5jZS5jbGFzcykKKwkJCSAgICAmJiAod2Fsa19zdGF0ZS0+b3BlcmFuZHNbMF0tPnJlZmVyZW5jZS52YWx1ZSA9PQorCQkJCXdhbGtfc3RhdGUtPm9wZXJhbmRzWzFdLT5yZWZlcmVuY2UudmFsdWUpKSB7CiAJCQkJc3RhdHVzID0gQUVfT0s7CiAJCQl9IGVsc2UgewogCQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCA3ZDJlZGYxLi41YjMwYjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIAkiIGJlZm9yZSB1bmRvY2tpbmciKTsKIAogc3RhdGljIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBkb2NrX25vdGlmaWVyX2xpc3Q7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZG9ja19kZXZpY2U7CiBzdGF0aWMgY2hhciBkb2NrX2RldmljZV9uYW1lW10gPSAiZG9jayI7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgZG9ja19kZXZpY2VfaWRzW10gPSB7CkBAIC02NSwyMyArNjQsMjkgQEAKIAlzdHJ1Y3QgbXV0ZXggaHBfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlcGVuZGVudF9kZXZpY2VzOwogCXN0cnVjdCBsaXN0X2hlYWQgaG90cGx1Z19kZXZpY2VzOworCisJc3RydWN0IGxpc3RfaGVhZCBzaWJpbGluZzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkb2NrX2RldmljZTsKIH07CitzdGF0aWMgTElTVF9IRUFEKGRvY2tfc3RhdGlvbnMpOworc3RhdGljIGludCBkb2NrX3N0YXRpb25fY291bnQ7CiAKIHN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhvdHBsdWdfbGlzdDsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7Ci0JYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyOworCXN0cnVjdCBhY3BpX2RvY2tfb3BzICpvcHM7CiAJdm9pZCAqY29udGV4dDsKIH07CiAKICNkZWZpbmUgRE9DS19ET0NLSU5HCTB4MDAwMDAwMDEKICNkZWZpbmUgRE9DS19VTkRPQ0tJTkcgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRE9DS19JU19ET0NLCTB4MDAwMDAwMTAKKyNkZWZpbmUgRE9DS19JU19BVEEJMHgwMDAwMDAyMAorI2RlZmluZSBET0NLX0lTX0JBVAkweDAwMDAwMDQwCiAjZGVmaW5lIERPQ0tfRVZFTlQJMwogI2RlZmluZSBVTkRPQ0tfRVZFTlQJMgogCi1zdGF0aWMgc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgIERvY2sgRGVwZW5kZW50IGRldmljZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTk5LDYgKzIwNCw2MCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGlzX2VqZWN0YWJsZShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIHRtcDsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRUowIiwgJnRtcCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpc19hdGEoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCWFjcGlfaGFuZGxlIHRtcDsKKworCWlmICgoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfR1RGIiwgJnRtcCkpKSB8fAorCSAgIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9HVE0iLCAmdG1wKSkpIHx8CisJICAgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX1NUTSIsICZ0bXApKSkgfHwKKwkgICAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfU0REIiwgJnRtcCkpKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19iYXR0ZXJ5KGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwlpbnQgcmV0ID0gMTsKKworCWlmICghQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcikpKQorCQlyZXR1cm4gMDsKKwlpbmZvID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKCEoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkpCisJCXJldCA9IDA7CisJZWxzZQorCQlyZXQgPSAhc3RyY21wKCJQTlAwQzBBIiwgaW5mby0+aGFyZHdhcmVfaWQudmFsdWUpOworCisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZWplY3RhYmxlX2JheShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9oYW5kbGUgcGhhbmRsZTsKKwlpZiAoIWlzX2VqZWN0YWJsZShoYW5kbGUpKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNfYmF0dGVyeShoYW5kbGUpIHx8IGlzX2F0YShoYW5kbGUpKQorCQlyZXR1cm4gMTsKKwlpZiAoIWFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwaGFuZGxlKSAmJiBpc19hdGEocGhhbmRsZSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAvKioKICAqIGlzX2RvY2tfZGV2aWNlIC0gc2VlIGlmIGEgZGV2aWNlIGlzIG9uIGEgZG9jayBzdGF0aW9uCiAgKiBAaGFuZGxlOiBhY3BpIGhhbmRsZSBvZiB0aGUgZGV2aWNlCkBAIC0yMDksMTEgKzI2OCwxNyBAQAogICovCiBpbnQgaXNfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKQogewotCWlmICghZG9ja19zdGF0aW9uKQorCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbjsKKworCWlmICghZG9ja19zdGF0aW9uX2NvdW50KQogCQlyZXR1cm4gMDsKIAotCWlmIChpc19kb2NrKGhhbmRsZSkgfHwgZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpKQorCWlmIChpc19kb2NrKGhhbmRsZSkpCiAJCXJldHVybiAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwkJaWYgKGZpbmRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgaGFuZGxlKSkKKwkJCXJldHVybiAxOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjI5LDcgKzI5NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZG9ja19wcmVzZW50KHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzKQogewotCXVuc2lnbmVkIGxvbmcgc3RhOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGE7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJaWYgKGRzKSB7CkBAIC0zMjAsOCArMzg1LDggQEAKIAkgKiBGaXJzdCBjYWxsIGRyaXZlciBzcGVjaWZpYyBob3RwbHVnIGZ1bmN0aW9ucwogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZkcy0+aG90cGx1Z19kZXZpY2VzLCBob3RwbHVnX2xpc3QpIHsKLQkJaWYgKGRkLT5oYW5kbGVyKQotCQkJZGQtPmhhbmRsZXIoZGQtPmhhbmRsZSwgZXZlbnQsIGRkLT5jb250ZXh0KTsKKwkJaWYgKGRkLT5vcHMgJiYgZGQtPm9wcy0+aGFuZGxlcikKKwkJCWRkLT5vcHMtPmhhbmRsZXIoZGQtPmhhbmRsZSwgZXZlbnQsIGRkLT5jb250ZXh0KTsKIAl9CiAKIAkvKgpAQCAtMzQxLDkgKzQwNiwxMCBAQAogCiBzdGF0aWMgdm9pZCBkb2NrX2V2ZW50KHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzLCB1MzIgZXZlbnQsIGludCBudW0pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmRvY2tfZGV2aWNlLT5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzLT5kb2NrX2RldmljZS0+ZGV2OwogCWNoYXIgZXZlbnRfc3RyaW5nWzEzXTsKIAljaGFyICplbnZwW10gPSB7IGV2ZW50X3N0cmluZywgTlVMTCB9OworCXN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgKmRkOwogCiAJaWYgKG51bSA9PSBVTkRPQ0tfRVZFTlQpCiAJCXNwcmludGYoZXZlbnRfc3RyaW5nLCAiRVZFTlQ9dW5kb2NrIik7CkBAIC0zNTQsNyArNDIwLDE0IEBACiAJICogSW5kaWNhdGUgdGhhdCB0aGUgc3RhdHVzIG9mIHRoZSBkb2NrIHN0YXRpb24gaGFzCiAJICogY2hhbmdlZC4KIAkgKi8KLQlrb2JqZWN0X3VldmVudF9lbnYoJmRldi0+a29iaiwgS09CSl9DSEFOR0UsIGVudnApOworCWlmIChudW0gPT0gRE9DS19FVkVOVCkKKwkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZkcy0+aG90cGx1Z19kZXZpY2VzLCBob3RwbHVnX2xpc3QpCisJCWlmIChkZC0+b3BzICYmIGRkLT5vcHMtPnVldmVudCkKKwkJCWRkLT5vcHMtPnVldmVudChkZC0+aGFuZGxlLCBldmVudCwgZGQtPmNvbnRleHQpOworCWlmIChudW0gIT0gRE9DS19FVkVOVCkKKwkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KIAogLyoqCkBAIC00MTQsOSArNDg3LDEwIEBACiAJYXJnLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKIAlhcmcuaW50ZWdlci52YWx1ZSA9IGRvY2s7CiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZHMtPmhhbmRsZSwgIl9EQ0siLCAmYXJnX2xpc3QsICZidWZmZXIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJXMgLSBmYWlsZWQgdG8gZXhlY3V0ZSBfRENLXG4iLAotCQkJIChjaGFyICopbmFtZV9idWZmZXIucG9pbnRlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpCisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICIlcyAtIGZhaWxlZCB0byBleGVjdXRlIgorCQkJIiBfRENLXG4iLCAoY2hhciAqKW5hbWVfYnVmZmVyLnBvaW50ZXIpKTsKKwogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAlrZnJlZShuYW1lX2J1ZmZlci5wb2ludGVyKTsKIH0KQEAgLTQ1Miw2ICs1MjYsMjUgQEAKIAlkcy0+ZmxhZ3MgJj0gfihET0NLX1VORE9DS0lORyk7CiB9CiAKK3N0YXRpYyB2b2lkIGRvY2tfbG9jayhzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcywgaW50IGxvY2spCit7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3Q7CisJdW5pb24gYWNwaV9vYmplY3QgYXJnOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWFyZ19saXN0LmNvdW50ID0gMTsKKwlhcmdfbGlzdC5wb2ludGVyID0gJmFyZzsKKwlhcmcudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWFyZy5pbnRlZ2VyLnZhbHVlID0gISFsb2NrOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGRzLT5oYW5kbGUsICJfTENLIiwgJmFyZ19saXN0LCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgJiYgc3RhdHVzICE9IEFFX05PVF9GT1VORCkgeworCQlpZiAobG9jaykKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJMb2NraW5nIGRldmljZSBmYWlsZWRcbiIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiVW5sb2NraW5nIGRldmljZSBmYWlsZWRcbiIpOworCX0KK30KKwogLyoqCiAgKiBkb2NrX2luX3Byb2dyZXNzIC0gc2VlIGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGhhbmRsaW5nIGEgZG9jayBldmVudAogICogQGRzOiB0aGUgZG9jayBzdGF0aW9uCkBAIC00NzksNyArNTcyLDcgQEAKICAqLwogaW50IHJlZ2lzdGVyX2RvY2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKLQlpZiAoIWRvY2tfc3RhdGlvbikKKwlpZiAoIWRvY2tfc3RhdGlvbl9jb3VudCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZkb2NrX25vdGlmaWVyX2xpc3QsIG5iKTsKQEAgLTQ5Myw3ICs1ODYsNyBAQAogICovCiB2b2lkIHVucmVnaXN0ZXJfZG9ja19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewotCWlmICghZG9ja19zdGF0aW9uKQorCWlmICghZG9ja19zdGF0aW9uX2NvdW50KQogCQlyZXR1cm47CiAKIAlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmZG9ja19ub3RpZmllcl9saXN0LCBuYik7CkBAIC01MDQsNyArNTk3LDcgQEAKIC8qKgogICogcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZSAtIHJlZ2lzdGVyIGEgaG90cGx1ZyBmdW5jdGlvbgogICogQGhhbmRsZTogdGhlIGhhbmRsZSBvZiB0aGUgZGV2aWNlCi0gKiBAaGFuZGxlcjogdGhlIGFjcGlfbm90aWZpZXJfaGFuZGxlciB0byBjYWxsIGFmdGVyIGRvY2tpbmcKKyAqIEBvcHM6IGhhbmRsZXJzIHRvIGNhbGwgYWZ0ZXIgZG9ja2luZwogICogQGNvbnRleHQ6IGRldmljZSBzcGVjaWZpYyBkYXRhCiAgKgogICogSWYgYSBkcml2ZXIgd291bGQgbGlrZSB0byBwZXJmb3JtIGEgaG90cGx1ZyBvcGVyYXRpb24gYWZ0ZXIgYSBkb2NrCkBAIC01MTIsMjcgKzYwNSwzNiBAQAogICogdGhlIGRvY2sgZHJpdmVyIGFmdGVyIF9EQ0sgaXMgZXhlY3V0ZWQuCiAgKi8KIGludAotcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUsIGFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlciwKK3JlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kb2NrX29wcyAqb3BzLAogCQkJICAgICB2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgKmRkOworCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbjsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmICghZG9ja19zdGF0aW9uKQorCWlmICghZG9ja19zdGF0aW9uX2NvdW50KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qCiAJICogbWFrZSBzdXJlIHRoaXMgaGFuZGxlIGlzIGZvciBhIGRldmljZSBkZXBlbmRlbnQgb24gdGhlIGRvY2ssCiAJICogdGhpcyB3b3VsZCBpbmNsdWRlIHRoZSBkb2NrIHN0YXRpb24gaXRzZWxmCiAJICovCi0JZGQgPSBmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGhhbmRsZSk7Ci0JaWYgKGRkKSB7Ci0JCWRkLT5oYW5kbGVyID0gaGFuZGxlcjsKLQkJZGQtPmNvbnRleHQgPSBjb250ZXh0OwotCQlkb2NrX2FkZF9ob3RwbHVnX2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKLQkJcmV0dXJuIDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCQkvKgorCQkgKiBBbiBBVEEgYmF5IGNhbiBiZSBpbiBhIGRvY2sgYW5kIGl0c2VsZiBjYW4gYmUgZWplY3RlZAorCQkgKiBzZXBlcmF0ZWx5LCBzbyB0aGVyZSBhcmUgdHdvICdkb2NrIHN0YXRpb25zJyB3aGljaCBuZWVkIHRoZQorCQkgKiBvcHMKKwkJICovCisJCWRkID0gZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpOworCQlpZiAoZGQpIHsKKwkJCWRkLT5vcHMgPSBvcHM7CisJCQlkZC0+Y29udGV4dCA9IGNvbnRleHQ7CisJCQlkb2NrX2FkZF9ob3RwbHVnX2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKKwkJCXJldCA9IDA7CisJCX0KIAl9CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKTsKQEAgLTU0NCwxMyArNjQ2LDE2IEBACiB2b2lkIHVucmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uOwogCi0JaWYgKCFkb2NrX3N0YXRpb24pCisJaWYgKCFkb2NrX3N0YXRpb25fY291bnQpCiAJCXJldHVybjsKIAotCWRkID0gZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpOwotCWlmIChkZCkKLQkJZG9ja19kZWxfaG90cGx1Z19kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCQlkZCA9IGZpbmRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgaGFuZGxlKTsKKwkJaWYgKGRkKQorCQkJZG9ja19kZWxfaG90cGx1Z19kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CisJfQogfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UpOwpAQCAtNTc1LDEzICs2ODAsOSBAQAogCSAqLwogCWRvY2tfZXZlbnQoZHMsIGV2ZW50LCBVTkRPQ0tfRVZFTlQpOwogCi0JaWYgKCFkb2NrX3ByZXNlbnQoZHMpKSB7Ci0JCWNvbXBsZXRlX3VuZG9jayhkcyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCWhvdHBsdWdfZG9ja19kZXZpY2VzKGRzLCBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKTsKIAl1bmRvY2soZHMpOworCWRvY2tfbG9jayhkcywgMCk7CiAJZWplY3RfZG9jayhkcyk7CiAJaWYgKGRvY2tfcHJlc2VudChkcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5hYmxlIHRvIHVuZG9jayFcbiIpOwpAQCAtNjA0LDE0ICs3MDUsMzYgQEAKIHN0YXRpYyB2b2lkIGRvY2tfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRzID0gZGF0YTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnRtcDsKKwlpbnQgc3VycHJpc2VfcmVtb3ZhbCA9IDA7CiAKKwkvKgorCSAqIEFjY29yZGluZyB0byBhY3BpIHNwZWMgMy4wYSwgaWYgYSBERVZJQ0VfQ0hFQ0sgbm90aWZpY2F0aW9uCisJICogaXMgc2VudCBhbmQgX0RDSyBpcyBwcmVzZW50LCBpdCBpcyBhc3N1bWVkIHRvIG1lYW4gYW4gdW5kb2NrCisJICogcmVxdWVzdC4KKwkgKi8KKwlpZiAoKGRzLT5mbGFncyAmIERPQ0tfSVNfRE9DSykgJiYgZXZlbnQgPT0gQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLKQorCQlldmVudCA9IEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1Q7CisKKwkvKgorCSAqIGRvY2sgc3RhdGlvbjogQlVTX0NIRUNLIC0gZG9ja2VkIG9yIHN1cnByaXNlIHJlbW92YWwKKwkgKgkJIERFVklDRV9DSEVDSyAtIHVuZG9ja2VkCisJICogb3RoZXIgZGV2aWNlOiBCVVNfQ0hFQ0svREVWSUNFX0NIRUNLIC0gYWRkZWQgb3Igc3VycHJpc2UgcmVtb3ZhbAorCSAqCisJICogVG8gc2ltcGxpZnkgZXZlbnQgaGFuZGxpbmcsIGRvY2sgZGVwZW5kZW50IGRldmljZSBoYW5kbGVyIGFsd2F5cworCSAqIGdldCBBQ1BJX05PVElGWV9CVVNfQ0hFQ0svQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLIGZvciBhZGQgYW5kCisJICogQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVCBmb3IgcmVtb3ZhbAorCSAqLwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfTk9USUZZX0JVU19DSEVDSzoKLQkJaWYgKCFkb2NrX2luX3Byb2dyZXNzKGRzKSAmJiBkb2NrX3ByZXNlbnQoZHMpKSB7CisJY2FzZSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0s6CisJCWlmICghZG9ja19pbl9wcm9ncmVzcyhkcykgJiYgYWNwaV9idXNfZ2V0X2RldmljZShkcy0+aGFuZGxlLAorCQkgICAmdG1wKSkgewogCQkJYmVnaW5fZG9jayhkcyk7CiAJCQlkb2NrKGRzKTsKIAkJCWlmICghZG9ja19wcmVzZW50KGRzKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byBkb2NrIVxuIik7CisJCQkJY29tcGxldGVfZG9jayhkcyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmZG9ja19ub3RpZmllcl9saXN0LApAQCAtNjE5LDIwICs3NDIsMTkgQEAKIAkJCWhvdHBsdWdfZG9ja19kZXZpY2VzKGRzLCBldmVudCk7CiAJCQljb21wbGV0ZV9kb2NrKGRzKTsKIAkJCWRvY2tfZXZlbnQoZHMsIGV2ZW50LCBET0NLX0VWRU5UKTsKKwkJCWRvY2tfbG9jayhkcywgMSk7CisJCQlicmVhazsKIAkJfQotCQlicmVhazsKLQljYXNlIEFDUElfTk9USUZZX0RFVklDRV9DSEVDSzoKLQkvKgotICAgICAgICAgKiBBY2NvcmRpbmcgdG8gYWNwaSBzcGVjIDMuMGEsIGlmIGEgREVWSUNFX0NIRUNLIG5vdGlmaWNhdGlvbgotICAgICAgICAgKiBpcyBzZW50IGFuZCBfRENLIGlzIHByZXNlbnQsIGl0IGlzIGFzc3VtZWQgdG8gbWVhbiBhbgotICAgICAgICAgKiB1bmRvY2sgcmVxdWVzdC4gIFRoaXMgbm90aWZ5IHJvdXRpbmUgd2lsbCBvbmx5IGJlIGNhbGxlZAotICAgICAgICAgKiBmb3Igb2JqZWN0cyBkZWZpbmluZyBfRENLLCBzbyB3ZSB3aWxsIGZhbGwgdGhyb3VnaCB0byBlamVjdAotICAgICAgICAgKiByZXF1ZXN0IGhlcmUuICBIb3dldmVyLCB3ZSB3aWxsIHBhc3MgYW4gZWplY3QgcmVxdWVzdCB0aHJvdWdoCi0JICogdG8gdGhlIGRyaXZlciB3aG8gd2lzaCB0byBob3RwbHVnLgotICAgICAgICAgKi8KKwkJaWYgKGRvY2tfcHJlc2VudChkcykgfHwgZG9ja19pbl9wcm9ncmVzcyhkcykpCisJCQlicmVhazsKKwkJLyogVGhpcyBpcyBhIHN1cnByaXNlIHJlbW92YWwgKi8KKwkJc3VycHJpc2VfcmVtb3ZhbCA9IDE7CisJCWV2ZW50ID0gQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVDsKKwkJLyogRmFsbCBiYWNrICovCiAJY2FzZSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUOgogCQliZWdpbl91bmRvY2soZHMpOwotCQlpZiAoaW1tZWRpYXRlX3VuZG9jaykKKwkJaWYgKChpbW1lZGlhdGVfdW5kb2NrICYmICEoZHMtPmZsYWdzICYgRE9DS19JU19BVEEpKQorCQkgICB8fCBzdXJwcmlzZV9yZW1vdmFsKQogCQkJaGFuZGxlX2VqZWN0X3JlcXVlc3QoZHMsIGV2ZW50KTsKIAkJZWxzZQogCQkJZG9ja19ldmVudChkcywgZXZlbnQsIFVORE9DS19FVkVOVCk7CkBAIC02NDIsNiArNzY0LDUxIEBACiAJfQogfQogCitzdHJ1Y3QgZG9ja19kYXRhIHsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJdW5zaWduZWQgbG9uZyBldmVudDsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkczsKK307CisKK3N0YXRpYyB2b2lkIGFjcGlfZG9ja19kZWZlcnJlZF9jYih2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBkb2NrX2RhdGEgKmRhdGEgPSAoc3RydWN0IGRvY2tfZGF0YSAqKWNvbnRleHQ7CisKKwlkb2NrX25vdGlmeShkYXRhLT5oYW5kbGUsIGRhdGEtPmV2ZW50LCBkYXRhLT5kcyk7CisJa2ZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9kb2NrX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uOworCWFjcGlfaGFuZGxlIGhhbmRsZSA9IChhY3BpX2hhbmRsZSlkYXRhOworCisJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSyAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0sKKwkgICAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKQorCQlyZXR1cm4gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKSB7CisJCWlmIChkb2NrX3N0YXRpb24tPmhhbmRsZSA9PSBoYW5kbGUpIHsKKwkJCXN0cnVjdCBkb2NrX2RhdGEgKmRvY2tfZGF0YTsKKworCQkJZG9ja19kYXRhID0ga21hbGxvYyhzaXplb2YoKmRvY2tfZGF0YSksIEdGUF9LRVJORUwpOworCQkJaWYgKCFkb2NrX2RhdGEpCisJCQkJcmV0dXJuIDA7CisJCQlkb2NrX2RhdGEtPmhhbmRsZSA9IGhhbmRsZTsKKwkJCWRvY2tfZGF0YS0+ZXZlbnQgPSBldmVudDsKKwkJCWRvY2tfZGF0YS0+ZHMgPSBkb2NrX3N0YXRpb247CisJCQlhY3BpX29zX2hvdHBsdWdfZXhlY3V0ZShhY3BpX2RvY2tfZGVmZXJyZWRfY2IsCisJCQkJZG9ja19kYXRhKTsKKwkJCXJldHVybiAwIDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkb2NrX2FjcGlfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBhY3BpX2RvY2tfbm90aWZpZXJfY2FsbCwKK307CisKIC8qKgogICogZmluZF9kb2NrX2RldmljZXMgLSBmaW5kIGRldmljZXMgb24gdGhlIGRvY2sgc3RhdGlvbgogICogQGhhbmRsZTogdGhlIGhhbmRsZSBvZiB0aGUgZGV2aWNlIHdlIGFyZSBleGFtaW5pbmcKQEAgLTY4OCw2ICs4NTUsOCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19kb2NrZWQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb24gPSAqKChzdHJ1Y3QgZG9ja19zdGF0aW9uICoqKQorCQlkZXYtPnBsYXRmb3JtX2RhdGEpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBkb2NrX3ByZXNlbnQoZG9ja19zdGF0aW9uKSk7CiAKIH0KQEAgLTY5OSw2ICs4NjgsOCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19mbGFncyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uID0gKigoc3RydWN0IGRvY2tfc3RhdGlvbiAqKikKKwkJZGV2LT5wbGF0Zm9ybV9kYXRhKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZG9ja19zdGF0aW9uLT5mbGFncyk7CiAKIH0KQEAgLTcxMSw2ICs4ODIsOCBAQAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb24gPSAqKChzdHJ1Y3QgZG9ja19zdGF0aW9uICoqKQorCQlkZXYtPnBsYXRmb3JtX2RhdGEpOwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MjcsMTYgKzkwMCwzOCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19kb2NrX3VpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JdW5zaWduZWQgbG9uZyBsYnVmOworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYnVmOworCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbiA9ICooKHN0cnVjdCBkb2NrX3N0YXRpb24gKiopCisJCWRldi0+cGxhdGZvcm1fZGF0YSk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRvY2tfc3RhdGlvbi0+aGFuZGxlLAogCQkJCQkiX1VJRCIsIE5VTEwsICZsYnVmKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJICAgIHJldHVybiAwOwogCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWx4XG4iLCBsYnVmKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGx4XG4iLCBsYnVmKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1aWQsIFNfSVJVR08sIHNob3dfZG9ja191aWQsIE5VTEwpOwogCitzdGF0aWMgc3NpemVfdCBzaG93X2RvY2tfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uID0gKigoc3RydWN0IGRvY2tfc3RhdGlvbiAqKikKKwkJZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwljaGFyICp0eXBlOworCisJaWYgKGRvY2tfc3RhdGlvbi0+ZmxhZ3MgJiBET0NLX0lTX0RPQ0spCisJCXR5cGUgPSAiZG9ja19zdGF0aW9uIjsKKwllbHNlIGlmIChkb2NrX3N0YXRpb24tPmZsYWdzICYgRE9DS19JU19BVEEpCisJCXR5cGUgPSAiYXRhX2JheSI7CisJZWxzZSBpZiAoZG9ja19zdGF0aW9uLT5mbGFncyAmIERPQ0tfSVNfQkFUKQorCQl0eXBlID0gImJhdHRlcnlfYmF5IjsKKwllbHNlCisJCXR5cGUgPSAidW5rbm93biI7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgdHlwZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodHlwZSwgU19JUlVHTywgc2hvd19kb2NrX3R5cGUsIE5VTEwpOworCiAvKioKICAqIGRvY2tfYWRkIC0gYWRkIGEgbmV3IGRvY2sgc3RhdGlvbgogICogQGhhbmRsZTogdGhlIGRvY2sgc3RhdGlvbiBoYW5kbGUKQEAgLTc0Nyw4ICs5NDIsOSBAQAogc3RhdGljIGludCBkb2NrX2FkZChhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJaW50IHJldDsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRvY2tfZGV2aWNlOwogCiAJLyogYWxsb2NhdGUgJiBpbml0aWFsaXplIHRoZSBkb2NrX3N0YXRpb24gcHJpdmF0ZSBkYXRhICovCiAJZG9ja19zdGF0aW9uID0ga3phbGxvYyhzaXplb2YoKmRvY2tfc3RhdGlvbiksIEdGUF9LRVJORUwpOwpAQCAtNzU4LDIyICs5NTQsMzQgQEAKIAlkb2NrX3N0YXRpb24tPmxhc3RfZG9ja190aW1lID0gamlmZmllcyAtIEhaOwogCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmRlcGVuZGVudF9kZXZpY2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5ob3RwbHVnX2RldmljZXMpOworCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPnNpYmlsaW5nKTsKIAlzcGluX2xvY2tfaW5pdCgmZG9ja19zdGF0aW9uLT5kZF9sb2NrKTsKIAltdXRleF9pbml0KCZkb2NrX3N0YXRpb24tPmhwX2xvY2spOwogCUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmRvY2tfbm90aWZpZXJfbGlzdCk7CiAKIAkvKiBpbml0aWFsaXplIHBsYXRmb3JtIGRldmljZSBzdHVmZiAqLwotCWRvY2tfZGV2aWNlID0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShkb2NrX2RldmljZV9uYW1lLCAwLCBOVUxMLCAwKTsKKwlkb2NrX3N0YXRpb24tPmRvY2tfZGV2aWNlID0KKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShkb2NrX2RldmljZV9uYW1lLAorCQkJZG9ja19zdGF0aW9uX2NvdW50LCBOVUxMLCAwKTsKKwlkb2NrX2RldmljZSA9IGRvY2tfc3RhdGlvbi0+ZG9ja19kZXZpY2U7CiAJaWYgKElTX0VSUihkb2NrX2RldmljZSkpIHsKIAkJa2ZyZWUoZG9ja19zdGF0aW9uKTsKIAkJZG9ja19zdGF0aW9uID0gTlVMTDsKIAkJcmV0dXJuIFBUUl9FUlIoZG9ja19kZXZpY2UpOwogCX0KKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoZG9ja19kZXZpY2UsICZkb2NrX3N0YXRpb24sCisJCXNpemVvZihzdHJ1Y3QgZG9ja19zdGF0aW9uICopKTsKIAogCS8qIHdlIHdhbnQgdGhlIGRvY2sgZGV2aWNlIHRvIHNlbmQgdWV2ZW50cyAqLwogCWRvY2tfZGV2aWNlLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKIAorCWlmIChpc19kb2NrKGhhbmRsZSkpCisJCWRvY2tfc3RhdGlvbi0+ZmxhZ3MgfD0gRE9DS19JU19ET0NLOworCWlmIChpc19hdGEoaGFuZGxlKSkKKwkJZG9ja19zdGF0aW9uLT5mbGFncyB8PSBET0NLX0lTX0FUQTsKKwlpZiAoaXNfYmF0dGVyeShoYW5kbGUpKQorCQlkb2NrX3N0YXRpb24tPmZsYWdzIHw9IERPQ0tfSVNfQkFUOworCiAJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfZG9ja2VkKTsKIAlpZiAocmV0KSB7CiAJCXByaW50aygiRXJyb3IgJWQgYWRkaW5nIHN5c2ZzIGZpbGVcbiIsIHJldCk7CkBAIC04MTIsNiArMTAyMCw5IEBACiAJCWRvY2tfc3RhdGlvbiA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQorCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3R5cGUpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiJFcnJvciAlZCBhZGRpbmcgc3lzZnMgZmlsZVxuIiwgcmV0KTsKIAogCS8qIEZpbmQgZGVwZW5kZW50IGRldmljZXMgKi8KIAlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCkBAIC04MjgsMjQgKzEwMzksMTIgQEAKIAl9CiAJYWRkX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKIAotCS8qIHJlZ2lzdGVyIGZvciBkb2NrIGV2ZW50cyAqLwotCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihkb2NrX3N0YXRpb24tPmhhbmRsZSwKLQkJCQkJICAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCi0JCQkJCSAgICAgZG9ja19ub3RpZnksIGRvY2tfc3RhdGlvbik7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgaW5zdGFsbGluZyBub3RpZnkgaGFuZGxlclxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZG9ja19hZGRfZXJyOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlc1xuIiwgQUNQSV9ET0NLX0RSSVZFUl9ERVNDUklQVElPTik7Ci0KKwlkb2NrX3N0YXRpb25fY291bnQrKzsKKwlsaXN0X2FkZCgmZG9ja19zdGF0aW9uLT5zaWJpbGluZywgJmRvY2tfc3RhdGlvbnMpOwogCXJldHVybiAwOwogCi1kb2NrX2FkZF9lcnI6Ci0Ja2ZyZWUoZGQpOwogZG9ja19hZGRfZXJyX3VucmVnaXN0ZXI6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfdHlwZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfZG9ja2VkKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl91bmRvY2spOwogCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3VpZCk7CkBAIC04NTksMTIgKzEwNTgsMTIgQEAKIC8qKgogICogZG9ja19yZW1vdmUgLSBmcmVlIHVwIHJlc291cmNlcyByZWxhdGVkIHRvIHRoZSBkb2NrIHN0YXRpb24KICAqLwotc3RhdGljIGludCBkb2NrX3JlbW92ZSh2b2lkKQorc3RhdGljIGludCBkb2NrX3JlbW92ZShzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb24pCiB7CiAJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQsICp0bXA7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRvY2tfZGV2aWNlID0gZG9ja19zdGF0aW9uLT5kb2NrX2RldmljZTsKIAotCWlmICghZG9ja19zdGF0aW9uKQorCWlmICghZG9ja19zdGF0aW9uX2NvdW50KQogCQlyZXR1cm4gMDsKIAogCS8qIHJlbW92ZSBkZXBlbmRlbnQgZGV2aWNlcyAqLwpAQCAtODcyLDE0ICsxMDcxLDggQEAKIAkJCQkgbGlzdCkKIAkgICAga2ZyZWUoZGQpOwogCi0JLyogcmVtb3ZlIGRvY2sgbm90aWZ5IGhhbmRsZXIgKi8KLQlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkb2NrX3N0YXRpb24tPmhhbmRsZSwKLQkJCQkJICAgIEFDUElfU1lTVEVNX05PVElGWSwKLQkJCQkJICAgIGRvY2tfbm90aWZ5KTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVtb3Zpbmcgbm90aWZ5IGhhbmRsZXJcbiIpOwotCiAJLyogY2xlYW51cCBzeXNmcyAqLworCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3R5cGUpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX2RvY2tlZCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfdW5kb2NrKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl91aWQpOwpAQCAtOTA0LDQxICsxMDk3LDYwIEBACiBzdGF0aWMgYWNwaV9zdGF0dXMKIGZpbmRfZG9jayhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKIHsKLQlpbnQgKmNvdW50ID0gY29udGV4dDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAogCWlmIChpc19kb2NrKGhhbmRsZSkpIHsKIAkJaWYgKGRvY2tfYWRkKGhhbmRsZSkgPj0gMCkgewotCQkJKCpjb3VudCkrKzsKIAkJCXN0YXR1cyA9IEFFX0NUUkxfVEVSTUlOQVRFOwogCQl9CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBhY3BpX3N0YXR1cworZmluZF9iYXkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcnYpCit7CisJLyogSWYgYmF5IGlzIGEgZG9jaywgaXQncyBhbHJlYWR5IGhhbmRsZWQgKi8KKwlpZiAoaXNfZWplY3RhYmxlX2JheShoYW5kbGUpICYmICFpc19kb2NrKGhhbmRsZSkpCisJCWRvY2tfYWRkKGhhbmRsZSk7CisJcmV0dXJuIEFFX09LOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBkb2NrX2luaXQodm9pZCkKIHsKLQlpbnQgbnVtID0gMDsKLQotCWRvY2tfc3RhdGlvbiA9IE5VTEw7Ci0KIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBsb29rIGZvciBhIGRvY2sgc3RhdGlvbiAqLwogCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKLQkJCSAgICBBQ1BJX1VJTlQzMl9NQVgsIGZpbmRfZG9jaywgJm51bSwgTlVMTCk7CisJCQkgICAgQUNQSV9VSU5UMzJfTUFYLCBmaW5kX2RvY2ssIE5VTEwsIE5VTEwpOwogCi0JaWYgKCFudW0pCi0JCXByaW50ayhLRVJOX0lORk8gIk5vIGRvY2sgZGV2aWNlcyBmb3VuZC5cbiIpOworCS8qIGxvb2sgZm9yIGJheSAqLworCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKKwkJCUFDUElfVUlOVDMyX01BWCwgZmluZF9iYXksIE5VTEwsIE5VTEwpOworCWlmICghZG9ja19zdGF0aW9uX2NvdW50KSB7CisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJObyBkb2NrIGRldmljZXMgZm91bmQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQogCisJcmVnaXN0ZXJfYWNwaV9idXNfbm90aWZpZXIoJmRvY2tfYWNwaV9ub3RpZmllcik7CisJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzOiAlZCBkb2Nrcy9iYXlzIGZvdW5kXG4iLAorCQlBQ1BJX0RPQ0tfRFJJVkVSX0RFU0NSSVBUSU9OLCBkb2NrX3N0YXRpb25fY291bnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZG9ja19leGl0KHZvaWQpCiB7Ci0JZG9ja19yZW1vdmUoKTsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb247CisKKwl1bnJlZ2lzdGVyX2FjcGlfYnVzX25vdGlmaWVyKCZkb2NrX2FjcGlfbm90aWZpZXIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpCisJCWRvY2tfcmVtb3ZlKGRvY2tfc3RhdGlvbik7CiB9CiAKLXBvc3Rjb3JlX2luaXRjYWxsKGRvY2tfaW5pdCk7CisvKgorICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRyaXZlcnMgb2YgZGV2aWNlcyBpbiBkb2NrLCBvdGhlcndpc2Ugd2UgY2FuJ3Qga25vdworICogd2hpY2ggZGV2aWNlcyBhcmUgaW4gYSBkb2NrCisgKi8KK3N1YnN5c19pbml0Y2FsbChkb2NrX2luaXQpOwogbW9kdWxlX2V4aXQoZG9ja19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggMTM1OTNmOS4uZWY0MjMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTEsNyArMSw3IEBACiAvKgotICogIGVjLmMgLSBBQ1BJIEVtYmVkZGVkIENvbnRyb2xsZXIgRHJpdmVyICh2Mi4wKQorICogIGVjLmMgLSBBQ1BJIEVtYmVkZGVkIENvbnRyb2xsZXIgRHJpdmVyICh2Mi4xKQogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQWxleGV5IFN0YXJpa292c2tpeSA8YWxleGV5Lnkuc3Rhcmlrb3Zza2l5QGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBBbGV4ZXkgU3Rhcmlrb3Zza2l5IDxhc3Rhcmlrb3Zza2l5QHN1c2UuZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IERlbmlzIFNhZHlrb3YgPGRlbmlzLm0uc2FkeWtvdkBpbnRlbC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEx1bWluZyBZdSA8bHVtaW5nLnl1QGludGVsLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQW5keSBHcm92ZXIgPGFuZHJldy5ncm92ZXJAaW50ZWwuY29tPgpAQCAtMjYsNyArMjYsNyBAQAogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAqLwogCi0vKiBVbmNvbW1lbnQgbmV4dCBsaW5lIHRvIGdldCB2ZXJib3NlIHByaW50IG91dHMqLworLyogVW5jb21tZW50IG5leHQgbGluZSB0byBnZXQgdmVyYm9zZSBwcmludG91dCAqLwogLyogI2RlZmluZSBERUJVRyAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KQEAgLTY1LDIyICs2NiwyMSBAQAogCUFDUElfRUNfQ09NTUFORF9RVUVSWSA9IDB4ODQsCiB9OwogCi0vKiBFQyBldmVudHMgKi8KLWVudW0gZWNfZXZlbnQgewotCUFDUElfRUNfRVZFTlRfT0JGXzEgPSAxLAkvKiBPdXRwdXQgYnVmZmVyIGZ1bGwgKi8KLQlBQ1BJX0VDX0VWRU5UX0lCRl8wLAkJLyogSW5wdXQgYnVmZmVyIGVtcHR5ICovCi19OwotCiAjZGVmaW5lIEFDUElfRUNfREVMQVkJCTUwMAkvKiBXYWl0IDUwMG1zIG1heC4gZHVyaW5nIEVDIG9wcyAqLwogI2RlZmluZSBBQ1BJX0VDX1VERUxBWV9HTEsJMTAwMAkvKiBXYWl0IDFtcyBtYXguIHRvIGdldCBnbG9iYWwgbG9jayAqLwogI2RlZmluZSBBQ1BJX0VDX1VERUxBWQkJMTAwCS8qIFdhaXQgMTAwdXMgYmVmb3JlIHBvbGxpbmcgRUMgYWdhaW4gKi8KIAorI2RlZmluZSBBQ1BJX0VDX1NUT1JNX1RIUkVTSE9MRCAyMAkvKiBudW1iZXIgb2YgZmFsc2UgaW50ZXJydXB0cworCQkJCQkgICBwZXIgb25lIHRyYW5zYWN0aW9uICovCisKIGVudW0gewotCUVDX0ZMQUdTX1dBSVRfR1BFID0gMCwJCS8qIERvbid0IGNoZWNrIHN0YXR1cyB1bnRpbCBHUEUgYXJyaXZlcyAqLwogCUVDX0ZMQUdTX1FVRVJZX1BFTkRJTkcsCQkvKiBRdWVyeSBpcyBwZW5kaW5nICovCi0JRUNfRkxBR1NfR1BFX01PREUsCQkvKiBFeHBlY3QgR1BFIHRvIGJlIHNlbnQgZm9yIHN0YXR1cyBjaGFuZ2UgKi8KKwlFQ19GTEFHU19HUEVfTU9ERSwJCS8qIEV4cGVjdCBHUEUgdG8gYmUgc2VudAorCQkJCQkgKiBmb3Igc3RhdHVzIGNoYW5nZSAqLwogCUVDX0ZMQUdTX05PX0dQRSwJCS8qIERvbid0IHVzZSBHUEUgbW9kZSAqLwotCUVDX0ZMQUdTX1JFU0NIRURVTEVfUE9MTAkvKiBSZS1zY2hlZHVsZSBwb2xsICovCisJRUNfRkxBR1NfR1BFX1NUT1JNLAkJLyogR1BFIHN0b3JtIGRldGVjdGVkICovCisJRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVECS8qIEhhbmRsZXJzIGZvciBHUEUgYW5kCisJCQkJCSAqIE9wUmVnIGFyZSBpbnN0YWxsZWQgKi8KIH07CiAKIC8qIElmIHdlIGZpbmQgYW4gRUMgdmlhIHRoZSBFQ0RULCB3ZSBuZWVkIHRvIGtlZXAgYSBwdHIgdG8gaXRzIGNvbnRleHQgKi8KQEAgLTk1LDYgKzk1LDE1IEBACiAJdTggcXVlcnlfYml0OwogfTsKIAorc3RydWN0IHRyYW5zYWN0aW9uIHsKKwljb25zdCB1OCAqd2RhdGE7CisJdTggKnJkYXRhOworCXVuc2lnbmVkIHNob3J0IGlycV9jb3VudDsKKwl1OCBjb21tYW5kOworCXU4IHdsZW47CisJdTggcmxlbjsKK307CisKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9lYyB7CiAJYWNwaV9oYW5kbGUgaGFuZGxlOwogCXVuc2lnbmVkIGxvbmcgZ3BlOwpAQCAtMTA1LDkgKzExNCw4IEBACiAJc3RydWN0IG11dGV4IGxvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwotCWF0b21pY190IGlycV9jb3VudDsKLQl1OCBoYW5kbGVyc19pbnN0YWxsZWQ7CisJc3RydWN0IHRyYW5zYWN0aW9uICpjdXJyOworCXNwaW5sb2NrX3QgY3Vycl9sb2NrOwogfSAqYm9vdF9lYywgKmZpcnN0X2VjOwogCiAvKiAKQEAgLTE1MCw3ICsxNTgsNyBAQAogewogCXU4IHggPSBpbmIoZWMtPmRhdGFfYWRkcik7CiAJcHJfZGVidWcoUFJFRklYICItLS0+IGRhdGEgPSAweCUyLjJ4XG4iLCB4KTsKLQlyZXR1cm4gaW5iKGVjLT5kYXRhX2FkZHIpOworCXJldHVybiB4OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9lY193cml0ZV9jbWQoc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBjb21tYW5kKQpAQCAtMTY1LDE1OCArMTczLDE3MiBAQAogCW91dGIoZGF0YSwgZWMtPmRhdGFfYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFjcGlfZWNfY2hlY2tfc3RhdHVzKHN0cnVjdCBhY3BpX2VjICplYywgZW51bSBlY19ldmVudCBldmVudCkKK3N0YXRpYyBpbnQgZWNfdHJhbnNhY3Rpb25fZG9uZShzdHJ1Y3QgYWNwaV9lYyAqZWMpCiB7Ci0JaWYgKHRlc3RfYml0KEVDX0ZMQUdTX1dBSVRfR1BFLCAmZWMtPmZsYWdzKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKGV2ZW50ID09IEFDUElfRUNfRVZFTlRfT0JGXzEpIHsKLQkJaWYgKGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpICYgQUNQSV9FQ19GTEFHX09CRikKLQkJCXJldHVybiAxOwotCX0gZWxzZSBpZiAoZXZlbnQgPT0gQUNQSV9FQ19FVkVOVF9JQkZfMCkgewotCQlpZiAoIShhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19JQkYpKQotCQkJcmV0dXJuIDE7Ci0JfQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWVjLT5jdXJyIHx8ICghZWMtPmN1cnItPndsZW4gJiYgIWVjLT5jdXJyLT5ybGVuKSkKKwkJcmV0ID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlYy0+Y3Vycl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KIAorc3RhdGljIHZvaWQgZ3BlX3RyYW5zYWN0aW9uKHN0cnVjdCBhY3BpX2VjICplYywgdTggc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWVjLT5jdXJyKQorCQlnb3RvIHVubG9jazsKKwlpZiAoZWMtPmN1cnItPndsZW4gPiAwKSB7CisJCWlmICgoc3RhdHVzICYgQUNQSV9FQ19GTEFHX0lCRikgPT0gMCkgeworCQkJYWNwaV9lY193cml0ZV9kYXRhKGVjLCAqKGVjLT5jdXJyLT53ZGF0YSsrKSk7CisJCQktLWVjLT5jdXJyLT53bGVuOworCQl9IGVsc2UKKwkJCS8qIGZhbHNlIGludGVycnVwdCwgc3RhdGUgZGlkbid0IGNoYW5nZSAqLworCQkJKytlYy0+Y3Vyci0+aXJxX2NvdW50OworCisJfSBlbHNlIGlmIChlYy0+Y3Vyci0+cmxlbiA+IDApIHsKKwkJaWYgKChzdGF0dXMgJiBBQ1BJX0VDX0ZMQUdfT0JGKSA9PSAxKSB7CisJCQkqKGVjLT5jdXJyLT5yZGF0YSsrKSA9IGFjcGlfZWNfcmVhZF9kYXRhKGVjKTsKKwkJCS0tZWMtPmN1cnItPnJsZW47CisJCX0gZWxzZQorCQkJLyogZmFsc2UgaW50ZXJydXB0LCBzdGF0ZSBkaWRuJ3QgY2hhbmdlICovCisJCQkrK2VjLT5jdXJyLT5pcnFfY291bnQ7CisJfQordW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhY3BpX2VjX3dhaXQoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoZWMtPndhaXQsIGVjX3RyYW5zYWN0aW9uX2RvbmUoZWMpLAorCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSkpKQorCQlyZXR1cm4gMDsKKwkvKiBtaXNzaW5nIEdQRXMsIHN3aXRjaCBiYWNrIHRvIHBvbGwgbW9kZSAqLworCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByX2luZm8oUFJFRklYICJtaXNzaW5nIGNvbmZpcm1hdGlvbnMsICIKKwkJCQkic3dpdGNoIG9mZiBpbnRlcnJ1cHQgbW9kZS5cbiIpOworCXNldF9iaXQoRUNfRkxBR1NfTk9fR1BFLCAmZWMtPmZsYWdzKTsKKwljbGVhcl9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBhY3BpX2VjX2dwZV9xdWVyeSh2b2lkICplY19jeHQpOworCitzdGF0aWMgaW50IGVjX2NoZWNrX3NjaShzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IHN0YXRlKQoreworCWlmIChzdGF0ZSAmIEFDUElfRUNfRkxBR19TQ0kpIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEVDX0ZMQUdTX1FVRVJZX1BFTkRJTkcsICZlYy0+ZmxhZ3MpKQorCQkJcmV0dXJuIGFjcGlfb3NfZXhlY3V0ZShPU0xfRUNfQlVSU1RfSEFORExFUiwKKwkJCQlhY3BpX2VjX2dwZV9xdWVyeSwgZWMpOworCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZWNfc2NoZWR1bGVfZWNfcG9sbChzdHJ1Y3QgYWNwaV9lYyAqZWMpCitzdGF0aWMgaW50IGVjX3BvbGwoc3RydWN0IGFjcGlfZWMgKmVjKQogewotCWlmICh0ZXN0X2JpdChFQ19GTEFHU19SRVNDSEVEVUxFX1BPTEwsICZlYy0+ZmxhZ3MpKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmVjLT53b3JrLAotCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSkpOwotfQotCi1zdGF0aWMgdm9pZCBlY19zd2l0Y2hfdG9fcG9sbF9tb2RlKHN0cnVjdCBhY3BpX2VjICplYykKLXsKLQlzZXRfYml0KEVDX0ZMQUdTX05PX0dQRSwgJmVjLT5mbGFncyk7Ci0JY2xlYXJfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKTsKLQlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfTk9UX0lTUik7Ci0Jc2V0X2JpdChFQ19GTEFHU19SRVNDSEVEVUxFX1BPTEwsICZlYy0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGFjcGlfZWNfd2FpdChzdHJ1Y3QgYWNwaV9lYyAqZWMsIGVudW0gZWNfZXZlbnQgZXZlbnQsIGludCBmb3JjZV9wb2xsKQotewotCWF0b21pY19zZXQoJmVjLT5pcnFfY291bnQsIDApOwotCWlmIChsaWtlbHkodGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpKSAmJgotCSAgICBsaWtlbHkoIWZvcmNlX3BvbGwpKSB7Ci0JCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoZWMtPndhaXQsIGFjcGlfZWNfY2hlY2tfc3RhdHVzKGVjLCBldmVudCksCi0JCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSkpKQotCQkJcmV0dXJuIDA7Ci0JCWNsZWFyX2JpdChFQ19GTEFHU19XQUlUX0dQRSwgJmVjLT5mbGFncyk7Ci0JCWlmIChhY3BpX2VjX2NoZWNrX3N0YXR1cyhlYywgZXZlbnQpKSB7Ci0JCQkvKiBtaXNzaW5nIEdQRXMsIHN3aXRjaCBiYWNrIHRvIHBvbGwgbW9kZSAqLwotCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJCQlwcl9pbmZvKFBSRUZJWCAibWlzc2luZyBjb25maXJtYXRpb25zLCAiCi0JCQkJCQkic3dpdGNoIG9mZiBpbnRlcnJ1cHQgbW9kZS5cbiIpOwotCQkJZWNfc3dpdGNoX3RvX3BvbGxfbW9kZShlYyk7Ci0JCQllY19zY2hlZHVsZV9lY19wb2xsKGVjKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBkZWxheSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFDUElfRUNfREVMQVkpOwotCQljbGVhcl9iaXQoRUNfRkxBR1NfV0FJVF9HUEUsICZlYy0+ZmxhZ3MpOwotCQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVsYXkpKSB7Ci0JCQlpZiAoYWNwaV9lY19jaGVja19zdGF0dXMoZWMsIGV2ZW50KSkKLQkJCQlyZXR1cm4gMDsKLQkJCW1zbGVlcCgxKTsKLQkJfQotCQlpZiAoYWNwaV9lY19jaGVja19zdGF0dXMoZWMsZXZlbnQpKQorCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKTsKKwltc2xlZXAoMSk7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSkgeworCQlncGVfdHJhbnNhY3Rpb24oZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKKwkJbXNsZWVwKDEpOworCQlpZiAoZWNfdHJhbnNhY3Rpb25fZG9uZShlYykpCiAJCQlyZXR1cm4gMDsKIAl9Ci0JcHJfZXJyKFBSRUZJWCAiYWNwaV9lY193YWl0IHRpbWVvdXQsIHN0YXR1cyA9IDB4JTIuMngsIGV2ZW50ID0gJXNcbiIsCi0JCWFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpLAotCQkoZXZlbnQgPT0gQUNQSV9FQ19FVkVOVF9PQkZfMSkgPyAiXCJiMD0xXCIiIDogIlwiYjE9MFwiIik7CiAJcmV0dXJuIC1FVElNRTsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKHN0cnVjdCBhY3BpX2VjICplYywgdTggY29tbWFuZCwKLQkJCQkJY29uc3QgdTggKiB3ZGF0YSwgdW5zaWduZWQgd2RhdGFfbGVuLAotCQkJCQl1OCAqIHJkYXRhLCB1bnNpZ25lZCByZGF0YV9sZW4sCitzdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoc3RydWN0IGFjcGlfZWMgKmVjLAorCQkJCQlzdHJ1Y3QgdHJhbnNhY3Rpb24gKnQsCiAJCQkJCWludCBmb3JjZV9wb2xsKQogewotCWludCByZXN1bHQgPSAwOwotCXNldF9iaXQoRUNfRkxBR1NfV0FJVF9HUEUsICZlYy0+ZmxhZ3MpOworCXVuc2lnbmVkIGxvbmcgdG1wOworCWludCByZXQgPSAwOwogCXByX2RlYnVnKFBSRUZJWCAidHJhbnNhY3Rpb24gc3RhcnRcbiIpOwotCWFjcGlfZWNfd3JpdGVfY21kKGVjLCBjb21tYW5kKTsKLQlmb3IgKDsgd2RhdGFfbGVuID4gMDsgLS13ZGF0YV9sZW4pIHsKLQkJcmVzdWx0ID0gYWNwaV9lY193YWl0KGVjLCBBQ1BJX0VDX0VWRU5UX0lCRl8wLCBmb3JjZV9wb2xsKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJcHJfZXJyKFBSRUZJWAotCQkJICAgICAgICJ3cml0ZV9jbWQgdGltZW91dCwgY29tbWFuZCA9ICVkXG4iLCBjb21tYW5kKTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCXNldF9iaXQoRUNfRkxBR1NfV0FJVF9HUEUsICZlYy0+ZmxhZ3MpOwotCQlhY3BpX2VjX3dyaXRlX2RhdGEoZWMsICood2RhdGErKykpOworCS8qIGRpc2FibGUgR1BFIGR1cmluZyB0cmFuc2FjdGlvbiBpZiBzdG9ybSBpcyBkZXRlY3RlZCAqLworCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7CisJCWNsZWFyX2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncyk7CisJCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9OT1RfSVNSKTsKIAl9Ci0KLQlpZiAoIXJkYXRhX2xlbikgewotCQlyZXN1bHQgPSBhY3BpX2VjX3dhaXQoZWMsIEFDUElfRUNfRVZFTlRfSUJGXzAsIGZvcmNlX3BvbGwpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlwcl9lcnIoUFJFRklYCi0JCQkgICAgICAgImZpbmlzaC13cml0ZSB0aW1lb3V0LCBjb21tYW5kID0gJWRcbiIsIGNvbW1hbmQpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQl9IGVsc2UgaWYgKGNvbW1hbmQgPT0gQUNQSV9FQ19DT01NQU5EX1FVRVJZKQorCS8qIHN0YXJ0IHRyYW5zYWN0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIHRtcCk7CisJLyogZm9sbG93aW5nIHR3byBhY3Rpb25zIHNob3VsZCBiZSBrZXB0IGF0b21pYyAqLworCXQtPmlycV9jb3VudCA9IDA7CisJZWMtPmN1cnIgPSB0OworCWFjcGlfZWNfd3JpdGVfY21kKGVjLCBlYy0+Y3Vyci0+Y29tbWFuZCk7CisJaWYgKGVjLT5jdXJyLT5jb21tYW5kID09IEFDUElfRUNfQ09NTUFORF9RVUVSWSkKIAkJY2xlYXJfYml0KEVDX0ZMQUdTX1FVRVJZX1BFTkRJTkcsICZlYy0+ZmxhZ3MpOwotCi0JZm9yICg7IHJkYXRhX2xlbiA+IDA7IC0tcmRhdGFfbGVuKSB7Ci0JCXJlc3VsdCA9IGFjcGlfZWNfd2FpdChlYywgQUNQSV9FQ19FVkVOVF9PQkZfMSwgZm9yY2VfcG9sbCk7Ci0JCWlmIChyZXN1bHQpIHsKLQkJCXByX2VycihQUkVGSVggInJlYWQgdGltZW91dCwgY29tbWFuZCA9ICVkXG4iLCBjb21tYW5kKTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCS8qIERvbid0IGV4cGVjdCBHUEUgYWZ0ZXIgbGFzdCByZWFkICovCi0JCWlmIChyZGF0YV9sZW4gPiAxKQotCQkJc2V0X2JpdChFQ19GTEFHU19XQUlUX0dQRSwgJmVjLT5mbGFncyk7Ci0JCSoocmRhdGErKykgPSBhY3BpX2VjX3JlYWRfZGF0YShlYyk7Ci0JfQotICAgICAgZW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjLT5jdXJyX2xvY2ssIHRtcCk7CisJLyogaWYgd2Ugc2VsZWN0ZWQgcG9sbCBtb2RlIG9yIGZhaWxlZCBpbiBHUEUtbW9kZSBkbyBhIHBvbGwgbG9vcCAqLworCWlmIChmb3JjZV9wb2xsIHx8CisJICAgICF0ZXN0X2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncykgfHwKKwkgICAgYWNwaV9lY193YWl0KGVjKSkKKwkJcmV0ID0gZWNfcG9sbChlYyk7CiAJcHJfZGVidWcoUFJFRklYICJ0cmFuc2FjdGlvbiBlbmRcbiIpOwotCXJldHVybiByZXN1bHQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIHRtcCk7CisJZWMtPmN1cnIgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjLT5jdXJyX2xvY2ssIHRtcCk7CisJaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9TVE9STSwgJmVjLT5mbGFncykpIHsKKwkJLyogY2hlY2sgaWYgd2UgcmVjZWl2ZWQgU0NJIGR1cmluZyB0cmFuc2FjdGlvbiAqLworCQllY19jaGVja19zY2koZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKKwkJLyogaXQgaXMgc2FmZSB0byBlbmFibGUgR1BFIG91dHNpZGUgb2YgdHJhbnNhY3Rpb24gKi8KKwkJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfTk9UX0lTUik7CisJfSBlbHNlIGlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncykgJiYKKwkJICAgdC0+aXJxX2NvdW50ID4gQUNQSV9FQ19TVE9STV9USFJFU0hPTEQpIHsKKwkJcHJfZGVidWcoUFJFRklYICJHUEUgc3Rvcm0gZGV0ZWN0ZWRcbiIpOworCQlzZXRfYml0KEVDX0ZMQUdTX0dQRV9TVE9STSwgJmVjLT5mbGFncyk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9lY190cmFuc2FjdGlvbihzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IGNvbW1hbmQsCi0JCQkgICAgICAgY29uc3QgdTggKiB3ZGF0YSwgdW5zaWduZWQgd2RhdGFfbGVuLAotCQkJICAgICAgIHU4ICogcmRhdGEsIHVuc2lnbmVkIHJkYXRhX2xlbiwKK3N0YXRpYyBpbnQgZWNfY2hlY2tfaWJmMChzdHJ1Y3QgYWNwaV9lYyAqZWMpCit7CisJdTggc3RhdHVzID0gYWNwaV9lY19yZWFkX3N0YXR1cyhlYyk7CisJcmV0dXJuIChzdGF0dXMgJiBBQ1BJX0VDX0ZMQUdfSUJGKSA9PSAwOworfQorCitzdGF0aWMgaW50IGVjX3dhaXRfaWJmMChzdHJ1Y3QgYWNwaV9lYyAqZWMpCit7CisJdW5zaWduZWQgbG9uZyBkZWxheSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFDUElfRUNfREVMQVkpOworCS8qIGludGVycnVwdCB3YWl0IG1hbnVhbGx5IGlmIEdQRSBtb2RlIGlzIG5vdCBhY3RpdmUgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSB0ZXN0X2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncykgPworCQltc2Vjc190b19qaWZmaWVzKEFDUElfRUNfREVMQVkpIDogbXNlY3NfdG9famlmZmllcygxKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVsYXkpKQorCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGVjLT53YWl0LCBlY19jaGVja19pYmYwKGVjKSwgdGltZW91dCkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVUSU1FOworfQorCitzdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjLCBzdHJ1Y3QgdHJhbnNhY3Rpb24gKnQsCiAJCQkgICAgICAgaW50IGZvcmNlX3BvbGwpCiB7CiAJaW50IHN0YXR1czsKIAl1MzIgZ2xrOwotCi0JaWYgKCFlYyB8fCAod2RhdGFfbGVuICYmICF3ZGF0YSkgfHwgKHJkYXRhX2xlbiAmJiAhcmRhdGEpKQorCWlmICghZWMgfHwgKCF0KSB8fCAodC0+d2xlbiAmJiAhdC0+d2RhdGEpIHx8ICh0LT5ybGVuICYmICF0LT5yZGF0YSkpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHJkYXRhKQotCQltZW1zZXQocmRhdGEsIDAsIHJkYXRhX2xlbik7Ci0KKwlpZiAodC0+cmRhdGEpCisJCW1lbXNldCh0LT5yZGF0YSwgMCwgdC0+cmxlbik7CiAJbXV0ZXhfbG9jaygmZWMtPmxvY2spOwogCWlmIChlYy0+Z2xvYmFsX2xvY2spIHsKIAkJc3RhdHVzID0gYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKEFDUElfRUNfVURFTEFZX0dMSywgJmdsayk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZlYy0+bG9jayk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIHVubG9jazsKIAkJfQogCX0KLQotCXN0YXR1cyA9IGFjcGlfZWNfd2FpdChlYywgQUNQSV9FQ19FVkVOVF9JQkZfMCwgMCk7Ci0JaWYgKHN0YXR1cykgeworCWlmIChlY193YWl0X2liZjAoZWMpKSB7CiAJCXByX2VycihQUkVGSVggImlucHV0IGJ1ZmZlciBpcyBub3QgZW1wdHksICIKIAkJCQkiYWJvcnRpbmcgdHJhbnNhY3Rpb25cbiIpOworCQlzdGF0dXMgPSAtRVRJTUU7CiAJCWdvdG8gZW5kOwogCX0KLQotCXN0YXR1cyA9IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoZWMsIGNvbW1hbmQsCi0JCQkJCSAgICAgIHdkYXRhLCB3ZGF0YV9sZW4sCi0JCQkJCSAgICAgIHJkYXRhLCByZGF0YV9sZW4sCi0JCQkJCSAgICAgIGZvcmNlX3BvbGwpOwotCi0gICAgICBlbmQ6Ci0KKwlzdGF0dXMgPSBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKGVjLCB0LCBmb3JjZV9wb2xsKTsKK2VuZDoKIAlpZiAoZWMtPmdsb2JhbF9sb2NrKQogCQlhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soZ2xrKTsKK3VubG9jazoKIAltdXRleF91bmxvY2soJmVjLT5sb2NrKTsKLQogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTMyNywyMSArMzQ5LDMyIEBACiBpbnQgYWNwaV9lY19idXJzdF9lbmFibGUoc3RydWN0IGFjcGlfZWMgKmVjKQogewogCXU4IGQ7Ci0JcmV0dXJuIGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsIEFDUElfRUNfQlVSU1RfRU5BQkxFLCBOVUxMLCAwLCAmZCwgMSwgMCk7CisJc3RydWN0IHRyYW5zYWN0aW9uIHQgPSB7LmNvbW1hbmQgPSBBQ1BJX0VDX0JVUlNUX0VOQUJMRSwKKwkJCQkud2RhdGEgPSBOVUxMLCAucmRhdGEgPSAmZCwKKwkJCQkud2xlbiA9IDAsIC5ybGVuID0gMX07CisKKwlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQsIDApOwogfQogCiBpbnQgYWNwaV9lY19idXJzdF9kaXNhYmxlKHN0cnVjdCBhY3BpX2VjICplYykKIHsKLQlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgQUNQSV9FQ19CVVJTVF9ESVNBQkxFLCBOVUxMLCAwLCBOVUxMLCAwLCAwKTsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb24gdCA9IHsuY29tbWFuZCA9IEFDUElfRUNfQlVSU1RfRElTQUJMRSwKKwkJCQkud2RhdGEgPSBOVUxMLCAucmRhdGEgPSBOVUxMLAorCQkJCS53bGVuID0gMCwgLnJsZW4gPSAwfTsKKworCXJldHVybiAoYWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfQlVSU1QpID8KKwkJCQlhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCwgMCkgOiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZWNfcmVhZChzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IGFkZHJlc3MsIHU4ICogZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwogCXU4IGQ7CisJc3RydWN0IHRyYW5zYWN0aW9uIHQgPSB7LmNvbW1hbmQgPSBBQ1BJX0VDX0NPTU1BTkRfUkVBRCwKKwkJCQkud2RhdGEgPSAmYWRkcmVzcywgLnJkYXRhID0gJmQsCisJCQkJLndsZW4gPSAxLCAucmxlbiA9IDF9OwogCi0JcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbihlYywgQUNQSV9FQ19DT01NQU5EX1JFQUQsCi0JCQkJICAgICAmYWRkcmVzcywgMSwgJmQsIDEsIDApOworCXJlc3VsdCA9IGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0LCAwKTsKIAkqZGF0YSA9IGQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTM0OSw4ICszODIsMTEgQEAKIHN0YXRpYyBpbnQgYWNwaV9lY193cml0ZShzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IGFkZHJlc3MsIHU4IGRhdGEpCiB7CiAJdTggd2RhdGFbMl0gPSB7IGFkZHJlc3MsIGRhdGEgfTsKLQlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgQUNQSV9FQ19DT01NQU5EX1dSSVRFLAotCQkJCSAgIHdkYXRhLCAyLCBOVUxMLCAwLCAwKTsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb24gdCA9IHsuY29tbWFuZCA9IEFDUElfRUNfQ09NTUFORF9XUklURSwKKwkJCQkud2RhdGEgPSB3ZGF0YSwgLnJkYXRhID0gTlVMTCwKKwkJCQkud2xlbiA9IDIsIC5ybGVuID0gMH07CisKKwlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQsIDApOwogfQogCiAvKgpAQCAtNDEyLDEyICs0NDgsMTMgQEAKIAkJICAgdTggKiByZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuLAogCQkgICBpbnQgZm9yY2VfcG9sbCkKIHsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb24gdCA9IHsuY29tbWFuZCA9IGNvbW1hbmQsCisJCQkJLndkYXRhID0gd2RhdGEsIC5yZGF0YSA9IHJkYXRhLAorCQkJCS53bGVuID0gd2RhdGFfbGVuLCAucmxlbiA9IHJkYXRhX2xlbn07CiAJaWYgKCFmaXJzdF9lYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihmaXJzdF9lYywgY29tbWFuZCwgd2RhdGEsCi0JCQkJICAgd2RhdGFfbGVuLCByZGF0YSwgcmRhdGFfbGVuLAotCQkJCSAgIGZvcmNlX3BvbGwpOworCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGZpcnN0X2VjLCAmdCwgZm9yY2VfcG9sbCk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZWNfdHJhbnNhY3Rpb24pOwpAQCAtNDI2LDcgKzQ2Myw5IEBACiB7CiAJaW50IHJlc3VsdDsKIAl1OCBkOwotCisJc3RydWN0IHRyYW5zYWN0aW9uIHQgPSB7LmNvbW1hbmQgPSBBQ1BJX0VDX0NPTU1BTkRfUVVFUlksCisJCQkJLndkYXRhID0gTlVMTCwgLnJkYXRhID0gJmQsCisJCQkJLndsZW4gPSAwLCAucmxlbiA9IDF9OwogCWlmICghZWMgfHwgIWRhdGEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00MzYsNyArNDc1LDcgQEAKIAkgKiBiaXQgdG8gYmUgY2xlYXJlZCAoYW5kIHRodXMgY2xlYXJpbmcgdGhlIGludGVycnVwdCBzb3VyY2UpLgogCSAqLwogCi0JcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbihlYywgQUNQSV9FQ19DT01NQU5EX1FVRVJZLCBOVUxMLCAwLCAmZCwgMSwgMCk7CisJcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQsIDApOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKQEAgLTUxMyw0NiArNTUyLDI2IEBACiAKIHN0YXRpYyB1MzIgYWNwaV9lY19ncGVfaGFuZGxlcih2b2lkICpkYXRhKQogewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX2VjICplYyA9IGRhdGE7Ci0JdTggc3RhdGUgPSBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKTsKKwl1OCBzdGF0dXM7CiAKIAlwcl9kZWJ1ZyhQUkVGSVggIn5+fj4gaW50ZXJydXB0XG4iKTsKLQlhdG9taWNfaW5jKCZlYy0+aXJxX2NvdW50KTsKLQlpZiAoYXRvbWljX3JlYWQoJmVjLT5pcnFfY291bnQpID4gNSkgewotCQlwcl9lcnIoUFJFRklYICJHUEUgc3Rvcm0gZGV0ZWN0ZWQsIGRpc2FibGluZyBFQyBHUEVcbiIpOwotCQllY19zd2l0Y2hfdG9fcG9sbF9tb2RlKGVjKTsKLQkJZ290byBlbmQ7Ci0JfQotCWNsZWFyX2JpdChFQ19GTEFHU19XQUlUX0dQRSwgJmVjLT5mbGFncyk7Ci0JaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKSkKKwlzdGF0dXMgPSBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKTsKKworCWdwZV90cmFuc2FjdGlvbihlYywgc3RhdHVzKTsKKwlpZiAoZWNfdHJhbnNhY3Rpb25fZG9uZShlYykgJiYgKHN0YXR1cyAmIEFDUElfRUNfRkxBR19JQkYpID09IDApCiAJCXdha2VfdXAoJmVjLT53YWl0KTsKIAotCWlmIChzdGF0ZSAmIEFDUElfRUNfRkxBR19TQ0kpIHsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEVDX0ZMQUdTX1FVRVJZX1BFTkRJTkcsICZlYy0+ZmxhZ3MpKQotCQkJc3RhdHVzID0gYWNwaV9vc19leGVjdXRlKE9TTF9FQ19CVVJTVF9IQU5ETEVSLAotCQkJCWFjcGlfZWNfZ3BlX3F1ZXJ5LCBlYyk7Ci0JfSBlbHNlIGlmICghdGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpICYmCi0JCSAgICF0ZXN0X2JpdChFQ19GTEFHU19OT19HUEUsICZlYy0+ZmxhZ3MpICYmCi0JCSAgIGluX2ludGVycnVwdCgpKSB7CisJZWNfY2hlY2tfc2NpKGVjLCBzdGF0dXMpOworCWlmICghdGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChFQ19GTEFHU19OT19HUEUsICZlYy0+ZmxhZ3MpKSB7CiAJCS8qIHRoaXMgaXMgbm9uLXF1ZXJ5LCBtdXN0IGJlIGNvbmZpcm1hdGlvbiAqLwogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJfaW5mbyhQUkVGSVggIm5vbi1xdWVyeSBpbnRlcnJ1cHQgcmVjZWl2ZWQsIgogCQkJCSIgc3dpdGNoaW5nIHRvIGludGVycnVwdCBtb2RlXG4iKTsKIAkJc2V0X2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncyk7Ci0JCWNsZWFyX2JpdChFQ19GTEFHU19SRVNDSEVEVUxFX1BPTEwsICZlYy0+ZmxhZ3MpOwogCX0KLWVuZDoKLQllY19zY2hlZHVsZV9lY19wb2xsKGVjKTsKLQlyZXR1cm4gQUNQSV9TVUNDRVNTKHN0YXR1cykgPwotCSAgICBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEIDogQUNQSV9JTlRFUlJVUFRfTk9UX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2VjX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhY3BpX2VjICplYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWNwaV9lYywgd29yay53b3JrKTsKLQlhdG9taWNfc2V0KCZlYy0+aXJxX2NvdW50LCAwKTsKLQkodm9pZClhY3BpX2VjX2dwZV9oYW5kbGVyKGVjKTsKKwlyZXR1cm4gQUNQSV9JTlRFUlJVUFRfSEFORExFRDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY5Niw4ICs3MTUsNyBAQAogCW11dGV4X2luaXQoJmVjLT5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlYy0+d2FpdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmVjLT5saXN0KTsKLQlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZlYy0+d29yaywgZG9fZWNfcG9sbCk7Ci0JYXRvbWljX3NldCgmZWMtPmlycV9jb3VudCwgMCk7CisJc3Bpbl9sb2NrX2luaXQoJmVjLT5jdXJyX2xvY2spOwogCXJldHVybiBlYzsKIH0KIApAQCAtNzE4LDYgKzczNiw3IEBACiBlY19wYXJzZV9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgTGV2ZWwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR2YWwpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBjb250ZXh0OwogCXN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLApAQCAtNzI3LDMxICs3NDYsMjYgQEAKIAogCS8qIEdldCBHUEUgYml0IGFzc2lnbm1lbnQgKEVDIGV2ZW50cykuICovCiAJLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIF9HUEUgcmV0dXJuaW5nIGEgcGFja2FnZSAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfR1BFIiwgTlVMTCwgJmVjLT5ncGUpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfR1BFIiwgTlVMTCwgJnRtcCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gc3RhdHVzOworCWVjLT5ncGUgPSB0bXA7CiAJLyogVXNlIHRoZSBnbG9iYWwgbG9jayBmb3IgYWxsIEVDIHRyYW5zYWN0aW9ucz8gKi8KLQlhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX0dMSyIsIE5VTEwsICZlYy0+Z2xvYmFsX2xvY2spOworCWFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfR0xLIiwgTlVMTCwgJnRtcCk7CisJZWMtPmdsb2JhbF9sb2NrID0gdG1wOwogCWVjLT5oYW5kbGUgPSBoYW5kbGU7CiAJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOwogfQogCi1zdGF0aWMgdm9pZCBlY19wb2xsX3N0b3Aoc3RydWN0IGFjcGlfZWMgKmVjKQotewotCWNsZWFyX2JpdChFQ19GTEFHU19SRVNDSEVEVUxFX1BPTEwsICZlYy0+ZmxhZ3MpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmVjLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgZWNfcmVtb3ZlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKIHsKLQllY19wb2xsX3N0b3AoZWMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGVjLT5oYW5kbGUsCiAJCQkJQUNQSV9BRFJfU1BBQ0VfRUMsICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpKSkKIAkJcHJfZXJyKFBSRUZJWCAiZmFpbGVkIHRvIHJlbW92ZSBzcGFjZSBoYW5kbGVyXG4iKTsKIAlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCiAJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpKSkKIAkJcHJfZXJyKFBSRUZJWCAiZmFpbGVkIHRvIHJlbW92ZSBncGUgaGFuZGxlclxuIik7Ci0JZWMtPmhhbmRsZXJzX2luc3RhbGxlZCA9IDA7CisJY2xlYXJfYml0KEVDX0ZMQUdTX0hBTkRMRVJTX0lOU1RBTExFRCwgJmVjLT5mbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC03ODgsNyArODAyLDcgQEAKIAogCWlmICghZmlyc3RfZWMpCiAJCWZpcnN0X2VjID0gZWM7Ci0JYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gZWM7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVjOwogCWFjcGlfZWNfYWRkX2ZzKGRldmljZSk7CiAJcHJfaW5mbyhQUkVGSVggIkdQRSA9IDB4JWx4LCBJL086IGNvbW1hbmQvc3RhdHVzID0gMHglbHgsIGRhdGEgPSAweCVseFxuIiwKIAkJCSAgZWMtPmdwZSwgZWMtPmNvbW1hbmRfYWRkciwgZWMtPmRhdGFfYWRkcik7CkBAIC04MTMsNyArODI3LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZlYy0+bG9jayk7CiAJYWNwaV9lY19yZW1vdmVfZnMoZGV2aWNlKTsKLQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBOVUxMOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCWlmIChlYyA9PSBmaXJzdF9lYykKIAkJZmlyc3RfZWMgPSBOVUxMOwogCWtmcmVlKGVjKTsKQEAgLTg0NiwyNyArODYwLDM2IEBACiBzdGF0aWMgaW50IGVjX2luc3RhbGxfaGFuZGxlcnMoc3RydWN0IGFjcGlfZWMgKmVjKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlpZiAoZWMtPmhhbmRsZXJzX2luc3RhbGxlZCkKKwlpZiAodGVzdF9iaXQoRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVELCAmZWMtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCi0JCQkJCSAgQUNQSV9HUEVfRURHRV9UUklHR0VSRUQsCi0JCQkJCSAgJmFjcGlfZWNfZ3BlX2hhbmRsZXIsIGVjKTsKKwkJCQkgIEFDUElfR1BFX0VER0VfVFJJR0dFUkVELAorCQkJCSAgJmFjcGlfZWNfZ3BlX2hhbmRsZXIsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRU5PREVWOwotCiAJYWNwaV9zZXRfZ3BlX3R5cGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKIAlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9OT1RfSVNSKTsKLQogCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKIAkJCQkJCSAgICBBQ1BJX0FEUl9TUEFDRV9FQywKIAkJCQkJCSAgICAmYWNwaV9lY19zcGFjZV9oYW5kbGVyLAogCQkJCQkJICAgIE5VTEwsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZSwgJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpIHsKKwkJCS8qCisJCQkgKiBNYXliZSBPUyBmYWlscyBpbiBldmFsdWF0aW5nIHRoZSBfUkVHIG9iamVjdC4KKwkJCSAqIFRoZSBBRV9OT1RfRk9VTkQgZXJyb3Igd2lsbCBiZSBpZ25vcmVkIGFuZCBPUworCQkJICogY29udGludWUgdG8gaW5pdGlhbGl6ZSBFQy4KKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsIGluIGV2YWx1YXRpbmcgdGhlIF9SRUcgb2JqZWN0IgorCQkJCSIgb2YgRUMgZGV2aWNlLiBCcm9rZW4gYmlvcyBpcyBzdXNwZWN0ZWQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCisJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KIAl9CiAKLQllYy0+aGFuZGxlcnNfaW5zdGFsbGVkID0gMTsKKwlzZXRfYml0KEVDX0ZMQUdTX0hBTkRMRVJTX0lOU1RBTExFRCwgJmVjLT5mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4Nyw3ICs5MTAsNiBAQAogCiAJLyogRUMgaXMgZnVsbHkgb3BlcmF0aW9uYWwsIGFsbG93IHF1ZXJpZXMgKi8KIAljbGVhcl9iaXQoRUNfRkxBR1NfUVVFUllfUEVORElORywgJmVjLT5mbGFncyk7Ci0JZWNfc2NoZWR1bGVfZWNfcG9sbChlYyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTA2LDcgKzkyOCw3IEBACiAKIGludCBfX2luaXQgYWNwaV9ib290X2VjX2VuYWJsZSh2b2lkKQogewotCWlmICghYm9vdF9lYyB8fCBib290X2VjLT5oYW5kbGVyc19pbnN0YWxsZWQpCisJaWYgKCFib290X2VjIHx8IHRlc3RfYml0KEVDX0ZMQUdTX0hBTkRMRVJTX0lOU1RBTExFRCwgJmJvb3RfZWMtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAJaWYgKCFlY19pbnN0YWxsX2hhbmRsZXJzKGJvb3RfZWMpKSB7CiAJCWZpcnN0X2VjID0gYm9vdF9lYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbmZpZy5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29uZmlnLmMKaW5kZXggODg5MmI5OC4uNzRkYTZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29uZmlnLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29uZmlnLmMKQEAgLTQzLDcgKzQzLDYgQEAKIAogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNpbnRlcnAuaD4KLSNpbmNsdWRlIDxhY3BpL2FtbGNvZGUuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3RhYmxlcy5oPgogI2luY2x1ZGUgPGFjcGkvYWNkaXNwYXQuaD4KQEAgLTkxLDEzICs5MCwxMiBAQAogCiAJLyogSW5pdCB0aGUgdGFibGUgaGFuZGxlICovCiAKLQlvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSA9IEFNTF9MT0FEX09QOworCW9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPSBBQ1BJX1JFRkNMQVNTX1RBQkxFOwogCSpkZGJfaGFuZGxlID0gb2JqX2Rlc2M7CiAKIAkvKiBJbnN0YWxsIHRoZSBuZXcgdGFibGUgaW50byB0aGUgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzICovCiAKLQlvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCA9IEFDUElfQ0FTVF9QVFIodm9pZCwKLQkJCSh1bnNpZ25lZCBsb25nKXRhYmxlX2luZGV4KTsKKwlvYmpfZGVzYy0+cmVmZXJlbmNlLnZhbHVlID0gdGFibGVfaW5kZXg7CiAKIAkvKiBBZGQgdGhlIHRhYmxlIHRvIHRoZSBuYW1lc3BhY2UgKi8KIApAQCAtMjgwLDYgKzI3OCw3IEBACiAJCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqZGRiX2hhbmRsZTsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgdGFibGVfZGVzYzsKIAl1MzIgdGFibGVfaW5kZXg7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtMjk0LDkgKzI5Myw4IEBACiAJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpIHsKIAljYXNlIEFDUElfVFlQRV9SRUdJT046CiAKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiTG9hZCBmcm9tIFJlZ2lvbiAlcCAlc1xuIiwKLQkJCQkgIG9ial9kZXNjLAotCQkJCSAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShvYmpfZGVzYykpKTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAorCQkJCSAgIkxvYWQgdGFibGUgZnJvbSBSZWdpb24gJXBcbiIsIG9ial9kZXNjKSk7CiAKIAkJLyogUmVnaW9uIG11c3QgYmUgc3lzdGVtX21lbW9yeSAoZnJvbSBBQ1BJIHNwZWMpICovCiAKQEAgLTMxNiwyMiArMzE0LDE3IEBACiAJCX0KIAogCQkvKgotCQkgKiBXZSB3aWxsIHNpbXBseSBtYXAgdGhlIG1lbW9yeSByZWdpb24gZm9yIHRoZSB0YWJsZS4gSG93ZXZlciwgdGhlCi0JCSAqIG1lbW9yeSByZWdpb24gaXMgdGVjaG5pY2FsbHkgbm90IGd1YXJhbnRlZWQgdG8gcmVtYWluIHN0YWJsZSBhbmQKLQkJICogd2UgbWF5IGV2ZW50dWFsbHkgaGF2ZSB0byBjb3B5IHRoZSB0YWJsZSB0byBhIGxvY2FsIGJ1ZmZlci4KKwkJICogTWFwIHRoZSB0YWJsZSBoZWFkZXIgYW5kIGdldCB0aGUgYWN0dWFsIHRhYmxlIGxlbmd0aC4gVGhlIHJlZ2lvbgorCQkgKiBsZW5ndGggaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHRhYmxlIGxlbmd0aC4KIAkJICovCi0JCXRhYmxlX2Rlc2MuYWRkcmVzcyA9IG9ial9kZXNjLT5yZWdpb24uYWRkcmVzczsKLQkJdGFibGVfZGVzYy5sZW5ndGggPSBvYmpfZGVzYy0+cmVnaW9uLmxlbmd0aDsKLQkJdGFibGVfZGVzYy5mbGFncyA9IEFDUElfVEFCTEVfT1JJR0lOX01BUFBFRDsKLQkJYnJlYWs7CisJCXRhYmxlID0gYWNwaV9vc19tYXBfbWVtb3J5KG9ial9kZXNjLT5yZWdpb24uYWRkcmVzcywKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCQlpZiAoIXRhYmxlKSB7CisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwkJfQogCi0JY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgkvKiBCdWZmZXIgb3IgcmVzb2x2ZWQgcmVnaW9uX2ZpZWxkICovCi0KLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCSAgIkxvYWQgZnJvbSBCdWZmZXIgb3IgRmllbGQgJXAgJXNcbiIsIG9ial9kZXNjLAotCQkJCSAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShvYmpfZGVzYykpKTsKLQotCQlsZW5ndGggPSBvYmpfZGVzYy0+YnVmZmVyLmxlbmd0aDsKKwkJbGVuZ3RoID0gdGFibGUtPmxlbmd0aDsKKwkJYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKIAogCQkvKiBNdXN0IGhhdmUgYXQgbGVhc3QgYW4gQUNQSSB0YWJsZSBoZWFkZXIgKi8KIApAQCAtMzM5LDM4ICszMzIsOTQgQEAKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9JTlZBTElEX1RBQkxFX0xFTkdUSCk7CiAJCX0KIAotCQkvKiBWYWxpZGF0ZSBjaGVja3N1bSBoZXJlLiBJdCB3b24ndCBnZXQgdmFsaWRhdGVkIGluIHRiX2FkZF90YWJsZSAqLworCQkvKgorCQkgKiBUaGUgbWVtb3J5IHJlZ2lvbiBpcyBub3QgZ3VhcmFudGVlZCB0byByZW1haW4gc3RhYmxlIGFuZCB3ZSBtdXN0CisJCSAqIGNvcHkgdGhlIHRhYmxlIHRvIGEgbG9jYWwgYnVmZmVyLiBGb3IgZXhhbXBsZSwgdGhlIG1lbW9yeSByZWdpb24KKwkJICogaXMgY29ycnVwdGVkIGFmdGVyIHN1c3BlbmQgb24gc29tZSBtYWNoaW5lcy4gRHluYW1pY2FsbHkgbG9hZGVkCisJCSAqIHRhYmxlcyBhcmUgdXN1YWxseSBzbWFsbCwgc28gdGhpcyBvdmVyaGVhZCBpcyBtaW5pbWFsLgorCQkgKi8KIAotCQlzdGF0dXMgPQotCQkgICAgYWNwaV90Yl92ZXJpZnlfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUgotCQkJCQkgICAgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciwKLQkJCQkJICAgICBvYmpfZGVzYy0+YnVmZmVyLnBvaW50ZXIpLCBsZW5ndGgpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIHRhYmxlICovCisKKwkJdGFibGVfZGVzYy5wb2ludGVyID0gQUNQSV9BTExPQ0FURShsZW5ndGgpOworCQlpZiAoIXRhYmxlX2Rlc2MucG9pbnRlcikgeworCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJCX0KKworCQkvKiBNYXAgdGhlIGVudGlyZSB0YWJsZSBhbmQgY29weSBpdCAqLworCisJCXRhYmxlID0gYWNwaV9vc19tYXBfbWVtb3J5KG9ial9kZXNjLT5yZWdpb24uYWRkcmVzcywgbGVuZ3RoKTsKKwkJaWYgKCF0YWJsZSkgeworCQkJQUNQSV9GUkVFKHRhYmxlX2Rlc2MucG9pbnRlcik7CisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwkJfQorCisJCUFDUElfTUVNQ1BZKHRhYmxlX2Rlc2MucG9pbnRlciwgdGFibGUsIGxlbmd0aCk7CisJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBsZW5ndGgpOworCisJCXRhYmxlX2Rlc2MuYWRkcmVzcyA9IG9ial9kZXNjLT5yZWdpb24uYWRkcmVzczsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfVFlQRV9CVUZGRVI6CS8qIEJ1ZmZlciBvciByZXNvbHZlZCByZWdpb25fZmllbGQgKi8KKworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCisJCQkJICAiTG9hZCB0YWJsZSBmcm9tIEJ1ZmZlciBvciBGaWVsZCAlcFxuIiwKKwkJCQkgIG9ial9kZXNjKSk7CisKKwkJLyogTXVzdCBoYXZlIGF0IGxlYXN0IGFuIEFDUEkgdGFibGUgaGVhZGVyICovCisKKwkJaWYgKG9ial9kZXNjLT5idWZmZXIubGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpIHsKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9JTlZBTElEX1RBQkxFX0xFTkdUSCk7CisJCX0KKworCQkvKiBHZXQgdGhlIGFjdHVhbCB0YWJsZSBsZW5ndGggZnJvbSB0aGUgdGFibGUgaGVhZGVyICovCisKKwkJdGFibGUgPQorCQkgICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIsCisJCQkJICBvYmpfZGVzYy0+YnVmZmVyLnBvaW50ZXIpOworCQlsZW5ndGggPSB0YWJsZS0+bGVuZ3RoOworCisJCS8qIFRhYmxlIGNhbm5vdCBleHRlbmQgYmV5b25kIHRoZSBidWZmZXIgKi8KKworCQlpZiAobGVuZ3RoID4gb2JqX2Rlc2MtPmJ1ZmZlci5sZW5ndGgpIHsKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfQlVGRkVSX0xJTUlUKTsKKwkJfQorCQlpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpIHsKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9JTlZBTElEX1RBQkxFX0xFTkdUSCk7CiAJCX0KIAogCQkvKgotCQkgKiBXZSBuZWVkIHRvIGNvcHkgdGhlIGJ1ZmZlciBzaW5jZSB0aGUgb3JpZ2luYWwgYnVmZmVyIGNvdWxkIGJlCi0JCSAqIGNoYW5nZWQgb3IgZGVsZXRlZCBpbiB0aGUgZnV0dXJlCisJCSAqIENvcHkgdGhlIHRhYmxlIGZyb20gdGhlIGJ1ZmZlciBiZWNhdXNlIHRoZSBidWZmZXIgY291bGQgYmUgbW9kaWZpZWQKKwkJICogb3IgZXZlbiBkZWxldGVkIGluIHRoZSBmdXR1cmUKIAkJICovCiAJCXRhYmxlX2Rlc2MucG9pbnRlciA9IEFDUElfQUxMT0NBVEUobGVuZ3RoKTsKIAkJaWYgKCF0YWJsZV9kZXNjLnBvaW50ZXIpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCQl9CiAKLQkJQUNQSV9NRU1DUFkodGFibGVfZGVzYy5wb2ludGVyLCBvYmpfZGVzYy0+YnVmZmVyLnBvaW50ZXIsCi0JCQkgICAgbGVuZ3RoKTsKLQkJdGFibGVfZGVzYy5sZW5ndGggPSBsZW5ndGg7Ci0JCXRhYmxlX2Rlc2MuZmxhZ3MgPSBBQ1BJX1RBQkxFX09SSUdJTl9BTExPQ0FURUQ7CisJCUFDUElfTUVNQ1BZKHRhYmxlX2Rlc2MucG9pbnRlciwgdGFibGUsIGxlbmd0aCk7CisJCXRhYmxlX2Rlc2MuYWRkcmVzcyA9IEFDUElfVE9fSU5URUdFUih0YWJsZV9kZXNjLnBvaW50ZXIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfT1BFUkFORF9UWVBFKTsKIAl9CiAKLQkvKgotCSAqIEluc3RhbGwgdGhlIG5ldyB0YWJsZSBpbnRvIHRoZSBsb2NhbCBkYXRhIHN0cnVjdHVyZXMKLQkgKi8KKwkvKiBWYWxpZGF0ZSB0YWJsZSBjaGVja3N1bSAod2lsbCBub3QgZ2V0IHZhbGlkYXRlZCBpbiB0Yl9hZGRfdGFibGUpICovCisKKwlzdGF0dXMgPSBhY3BpX3RiX3ZlcmlmeV9jaGVja3N1bSh0YWJsZV9kZXNjLnBvaW50ZXIsIGxlbmd0aCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRlJFRSh0YWJsZV9kZXNjLnBvaW50ZXIpOworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkvKiBDb21wbGV0ZSB0aGUgdGFibGUgZGVzY3JpcHRvciAqLworCisJdGFibGVfZGVzYy5sZW5ndGggPSBsZW5ndGg7CisJdGFibGVfZGVzYy5mbGFncyA9IEFDUElfVEFCTEVfT1JJR0lOX0FMTE9DQVRFRDsKKworCS8qIEluc3RhbGwgdGhlIG5ldyB0YWJsZSBpbnRvIHRoZSBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgKi8KKwogCXN0YXR1cyA9IGFjcGlfdGJfYWRkX3RhYmxlKCZ0YWJsZV9kZXNjLCAmdGFibGVfaW5kZXgpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlnb3RvIGNsZWFudXA7CkBAIC0zNzksNyArNDI4LDcgQEAKIAkvKgogCSAqIEFkZCB0aGUgdGFibGUgdG8gdGhlIG5hbWVzcGFjZS4KIAkgKgotCSAqIE5vdGU6IFdlIGxvYWQgdGhlIHRhYmxlIG9iamVjdHMgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIG5hbWVzcGFjZS4KKwkgKiBOb3RlOiBMb2FkIHRoZSB0YWJsZSBvYmplY3RzIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBuYW1lc3BhY2UuCiAJICogVGhpcyBhcHBlYXJzIHRvIGdvIGFnYWluc3QgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiwgYnV0IHdlIGRvIGl0IGZvcgogCSAqIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBBQ1BJIGltcGxlbWVudGF0aW9ucy4KIAkgKi8KQEAgLTQxNSw3ICs0NjQsNyBAQAogICAgICAgY2xlYW51cDoKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAotCQkvKiBEZWxldGUgYWxsb2NhdGVkIGJ1ZmZlciBvciBtYXBwaW5nICovCisJCS8qIERlbGV0ZSBhbGxvY2F0ZWQgdGFibGUgYnVmZmVyICovCiAKIAkJYWNwaV90Yl9kZWxldGVfdGFibGUoJnRhYmxlX2Rlc2MpOwogCX0KQEAgLTQ1NSw5ICs1MDQsOSBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyogR2V0IHRoZSB0YWJsZSBpbmRleCBmcm9tIHRoZSBkZGJfaGFuZGxlIChhY3BpX3NpemUgZm9yIDY0LWJpdCBjYXNlKSAqLworCS8qIEdldCB0aGUgdGFibGUgaW5kZXggZnJvbSB0aGUgZGRiX2hhbmRsZSAqLwogCi0JdGFibGVfaW5kZXggPSAodTMyKSAoYWNwaV9zaXplKSB0YWJsZV9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0OworCXRhYmxlX2luZGV4ID0gdGFibGVfZGVzYy0+cmVmZXJlbmNlLnZhbHVlOwogCiAJLyogSW52b2tlIHRhYmxlIGhhbmRsZXIgaWYgcHJlc2VudCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjb252cnQuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jCmluZGV4IDI2MWQ5NzUuLjFkMWYzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXhfY29udmVydF90b19pbnRlZ2VyCiAgKgotICogUEFSQU1FVEVSUzogIG9ial9kZXNjICAgICAgICAtIE9iamVjdCB0byBiZSBjb252ZXJ0ZWQuICBNdXN0IGJlIGFuCisgKiBQQVJBTUVURVJTOiAgb2JqX2Rlc2MgICAgICAgIC0gT2JqZWN0IHRvIGJlIGNvbnZlcnRlZC4gTXVzdCBiZSBhbgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIsIEJ1ZmZlciwgb3IgU3RyaW5nCiAgKiAgICAgICAgICAgICAgcmVzdWx0X2Rlc2MgICAgIC0gV2hlcmUgdGhlIG5ldyBJbnRlZ2VyIG9iamVjdCBpcyByZXR1cm5lZAogICogICAgICAgICAgICAgIEZsYWdzICAgICAgICAgICAtIFVzZWQgZm9yIHN0cmluZyBjb252ZXJzaW9uCkBAIC0xMDMsNyArMTAzLDcgQEAKIAl9CiAKIAkvKgotCSAqIENvbnZlcnQgdGhlIGJ1ZmZlci9zdHJpbmcgdG8gYW4gaW50ZWdlci4gIE5vdGUgdGhhdCBib3RoIGJ1ZmZlcnMgYW5kCisJICogQ29udmVydCB0aGUgYnVmZmVyL3N0cmluZyB0byBhbiBpbnRlZ2VyLiBOb3RlIHRoYXQgYm90aCBidWZmZXJzIGFuZAogCSAqIHN0cmluZ3MgYXJlIHRyZWF0ZWQgYXMgcmF3IGRhdGEgLSB3ZSBkb24ndCBjb252ZXJ0IGFzY2lpIHRvIGhleCBmb3IKIAkgKiBzdHJpbmdzLgogCSAqCkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCQkvKgogCQkgKiBDb252ZXJ0IHN0cmluZyB0byBhbiBpbnRlZ2VyIC0gZm9yIG1vc3QgY2FzZXMsIHRoZSBzdHJpbmcgbXVzdCBiZQotCQkgKiBoZXhhZGVjaW1hbCBhcyBwZXIgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbi4gIFRoZSBvbmx5IGV4Y2VwdGlvbiAoYXMKKwkJICogaGV4YWRlY2ltYWwgYXMgcGVyIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uIFRoZSBvbmx5IGV4Y2VwdGlvbiAoYXMKIAkJICogb2YgQUNQSSAzLjApIGlzIHRoYXQgdGhlIHRvX2ludGVnZXIoKSBvcGVyYXRvciBhbGxvd3MgYm90aCBkZWNpbWFsCiAJCSAqIGFuZCBoZXhhZGVjaW1hbCBzdHJpbmdzIChoZXggcHJlZml4ZWQgd2l0aCAiMHgiKS4KIAkJICovCkBAIC0xNTksNiArMTU5LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgorCiAJCS8qIE5vIG90aGVyIHR5cGVzIGNhbiBnZXQgaGVyZSAqLwogCQlicmVhazsKIAl9CkBAIC0xODUsNyArMTg2LDcgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9leF9jb252ZXJ0X3RvX2J1ZmZlcgogICoKLSAqIFBBUkFNRVRFUlM6ICBvYmpfZGVzYyAgICAgICAgLSBPYmplY3QgdG8gYmUgY29udmVydGVkLiAgTXVzdCBiZSBhbgorICogUEFSQU1FVEVSUzogIG9ial9kZXNjICAgICAgICAtIE9iamVjdCB0byBiZSBjb252ZXJ0ZWQuIE11c3QgYmUgYW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLCBCdWZmZXIsIG9yIFN0cmluZwogICogICAgICAgICAgICAgIHJlc3VsdF9kZXNjICAgICAtIFdoZXJlIHRoZSBuZXcgYnVmZmVyIG9iamVjdCBpcyByZXR1cm5lZAogICoKQEAgLTM2NSw3ICszNjYsNyBAQAogCX0KIAogCS8qCi0JICogU2luY2UgbGVhZGluZyB6ZXJvcyBhcmUgc3VwcmVzc2VkLCB3ZSBtdXN0IGNoZWNrIGZvciB0aGUgY2FzZSB3aGVyZQorCSAqIFNpbmNlIGxlYWRpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQsIHdlIG11c3QgY2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlCiAJICogdGhlIGludGVnZXIgZXF1YWxzIDAKIAkgKgogCSAqIEZpbmFsbHksIG51bGwgdGVybWluYXRlIHRoZSBzdHJpbmcgYW5kIHJldHVybiB0aGUgbGVuZ3RoCkBAIC0zODMsNyArMzg0LDcgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9leF9jb252ZXJ0X3RvX3N0cmluZwogICoKLSAqIFBBUkFNRVRFUlM6ICBvYmpfZGVzYyAgICAgICAgLSBPYmplY3QgdG8gYmUgY29udmVydGVkLiAgTXVzdCBiZSBhbgorICogUEFSQU1FVEVSUzogIG9ial9kZXNjICAgICAgICAtIE9iamVjdCB0byBiZSBjb252ZXJ0ZWQuIE11c3QgYmUgYW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLCBCdWZmZXIsIG9yIFN0cmluZwogICogICAgICAgICAgICAgIHJlc3VsdF9kZXNjICAgICAtIFdoZXJlIHRoZSBzdHJpbmcgb2JqZWN0IGlzIHJldHVybmVkCiAgKiAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgIC0gU3RyaW5nIGZsYWdzIChiYXNlIGFuZCBjb252ZXJzaW9uIHR5cGUpCkBAIC00NzIsNyArNDczLDcgQEAKIAkJCWJhc2UgPSAxMDsKIAogCQkJLyoKLQkJCSAqIENhbGN1bGF0ZSB0aGUgZmluYWwgc3RyaW5nIGxlbmd0aC4gIEluZGl2aWR1YWwgc3RyaW5nIHZhbHVlcworCQkJICogQ2FsY3VsYXRlIHRoZSBmaW5hbCBzdHJpbmcgbGVuZ3RoLiBJbmRpdmlkdWFsIHN0cmluZyB2YWx1ZXMKIAkJCSAqIGFyZSB2YXJpYWJsZSBsZW5ndGggKGluY2x1ZGUgc2VwYXJhdG9yIGZvciBlYWNoKQogCQkJICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgb2JqX2Rlc2MtPmJ1ZmZlci5sZW5ndGg7IGkrKykgewpAQCAtNTExLDkgKzUxMiwxNCBAQAogCQkvKgogCQkgKiBDcmVhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCBhbmQgc3RyaW5nIGJ1ZmZlcgogCQkgKiAoLTEgYmVjYXVzZSBvZiBleHRyYSBzZXBhcmF0b3IgaW5jbHVkZWQgaW4gc3RyaW5nX2xlbmd0aCBmcm9tIGFib3ZlKQorCQkgKiBBbGxvdyBjcmVhdGlvbiBvZiB6ZXJvLWxlbmd0aCBzdHJpbmdzIGZyb20gemVyby1sZW5ndGggYnVmZmVycy4KIAkJICovCisJCWlmIChzdHJpbmdfbGVuZ3RoKSB7CisJCQlzdHJpbmdfbGVuZ3RoLS07CisJCX0KKwogCQlyZXR1cm5fZGVzYyA9IGFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QoKGFjcGlfc2l6ZSkKLQkJCQkJCQkgICAoc3RyaW5nX2xlbmd0aCAtIDEpKTsKKwkJCQkJCQkgICBzdHJpbmdfbGVuZ3RoKTsKIAkJaWYgKCFyZXR1cm5fZGVzYykgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJCX0KQEAgLTUzNiw3ICs1NDIsOSBAQAogCQkgKiBOdWxsIHRlcm1pbmF0ZSB0aGUgc3RyaW5nCiAJCSAqIChvdmVyd3JpdGVzIGZpbmFsIGNvbW1hL3NwYWNlIGZyb20gYWJvdmUpCiAJCSAqLwotCQluZXdfYnVmLS07CisJCWlmIChvYmpfZGVzYy0+YnVmZmVyLmxlbmd0aCkgeworCQkJbmV3X2J1Zi0tOworCQl9CiAJCSpuZXdfYnVmID0gMDsKIAkJYnJlYWs7CiAKQEAgLTYxNyw3ICs2MjUsNyBAQAogCQljYXNlIEFDUElfVFlQRV9MT0NBTF9CQU5LX0ZJRUxEOgogCQljYXNlIEFDUElfVFlQRV9MT0NBTF9JTkRFWF9GSUVMRDoKIAkJCS8qCi0JCQkgKiBUaGVzZSB0eXBlcyByZXF1aXJlIGFuIEludGVnZXIgb3BlcmFuZC4gIFdlIGNhbiBjb252ZXJ0CisJCQkgKiBUaGVzZSB0eXBlcyByZXF1aXJlIGFuIEludGVnZXIgb3BlcmFuZC4gV2UgY2FuIGNvbnZlcnQKIAkJCSAqIGEgQnVmZmVyIG9yIGEgU3RyaW5nIHRvIGFuIEludGVnZXIgaWYgbmVjZXNzYXJ5LgogCQkJICovCiAJCQlzdGF0dXMgPQpAQCAtNjI3LDcgKzYzNSw3IEBACiAKIAkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCQkJLyoKLQkJCSAqIFRoZSBvcGVyYW5kIG11c3QgYmUgYSBTdHJpbmcuICBXZSBjYW4gY29udmVydCBhbgorCQkJICogVGhlIG9wZXJhbmQgbXVzdCBiZSBhIFN0cmluZy4gV2UgY2FuIGNvbnZlcnQgYW4KIAkJCSAqIEludGVnZXIgb3IgQnVmZmVyIGlmIG5lY2Vzc2FyeQogCQkJICovCiAJCQlzdGF0dXMgPQpAQCAtNjM3LDcgKzY0NSw3IEBACiAKIAkJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCQkJLyoKLQkJCSAqIFRoZSBvcGVyYW5kIG11c3QgYmUgYSBCdWZmZXIuICBXZSBjYW4gY29udmVydCBhbgorCQkJICogVGhlIG9wZXJhbmQgbXVzdCBiZSBhIEJ1ZmZlci4gV2UgY2FuIGNvbnZlcnQgYW4KIAkJCSAqIEludGVnZXIgb3IgU3RyaW5nIGlmIG5lY2Vzc2FyeQogCQkJICovCiAJCQlzdGF0dXMgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZHVtcC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZHVtcC5jCmluZGV4IDJiZTJlMmIuLmQwODdhN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CiAjaW5jbHVkZSA8YWNwaS9hbWxjb2RlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgotI2luY2x1ZGUgPGFjcGkvYWNwYXJzZXIuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfRVhFQ1VURVIKIEFDUElfTU9EVUxFX05BTUUoImV4ZHVtcCIpCkBAIC0yMTQsMTAgKzIxMywxMSBAQAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQoaW5kZXhfZmllbGQuZGF0YV9vYmopLCAiRGF0YSBPYmplY3QifQogfTsKIAotc3RhdGljIHN0cnVjdCBhY3BpX2V4ZHVtcF9pbmZvIGFjcGlfZXhfZHVtcF9yZWZlcmVuY2VbN10gPSB7CitzdGF0aWMgc3RydWN0IGFjcGlfZXhkdW1wX2luZm8gYWNwaV9leF9kdW1wX3JlZmVyZW5jZVs4XSA9IHsKIAl7QUNQSV9FWERfSU5JVCwgQUNQSV9FWERfVEFCTEVfU0laRShhY3BpX2V4X2R1bXBfcmVmZXJlbmNlKSwgTlVMTH0sCisJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQocmVmZXJlbmNlLmNsYXNzKSwgIkNsYXNzIn0sCiAJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQocmVmZXJlbmNlLnRhcmdldF90eXBlKSwgIlRhcmdldCBUeXBlIn0sCi0Je0FDUElfRVhEX1VJTlQzMiwgQUNQSV9FWERfT0ZGU0VUKHJlZmVyZW5jZS5vZmZzZXQpLCAiT2Zmc2V0In0sCisJe0FDUElfRVhEX1VJTlQzMiwgQUNQSV9FWERfT0ZGU0VUKHJlZmVyZW5jZS52YWx1ZSksICJWYWx1ZSJ9LAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQocmVmZXJlbmNlLm9iamVjdCksICJPYmplY3QgRGVzYyJ9LAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQocmVmZXJlbmNlLm5vZGUpLCAiTm9kZSJ9LAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQocmVmZXJlbmNlLndoZXJlKSwgIldoZXJlIn0sCkBAIC00MTMsMTAgKzQxMywxMCBAQAogCiAJCWNhc2UgQUNQSV9FWERfUkVGRVJFTkNFOgogCi0JCQlhY3BpX2V4X291dF9zdHJpbmcoIk9wY29kZSIsCi0JCQkJCSAgIChhY3BpX3BzX2dldF9vcGNvZGVfaW5mbwotCQkJCQkgICAgKG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlKSktPgotCQkJCQkgICBuYW1lKTsKKwkJCWFjcGlfZXhfb3V0X3N0cmluZygiQ2xhc3MgTmFtZSIsCisJCQkJCSAgIChjaGFyICopCisJCQkJCSAgIGFjcGlfdXRfZ2V0X3JlZmVyZW5jZV9uYW1lCisJCQkJCSAgIChvYmpfZGVzYykpOwogCQkJYWNwaV9leF9kdW1wX3JlZmVyZW5jZV9vYmoob2JqX2Rlc2MpOwogCQkJYnJlYWs7CiAKQEAgLTQ5NCw0MCArNDk0LDQxIEBACiAJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpIHsKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0U6CiAKLQkJc3dpdGNoIChvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSkgewotCQljYXNlIEFNTF9ERUJVR19PUDoKKwkJYWNwaV9vc19wcmludGYoIlJlZmVyZW5jZTogWyVzXSAiLAorCQkJICAgICAgIGFjcGlfdXRfZ2V0X3JlZmVyZW5jZV9uYW1lKG9ial9kZXNjKSk7CiAKLQkJCWFjcGlfb3NfcHJpbnRmKCJSZWZlcmVuY2U6IERlYnVnXG4iKTsKKwkJc3dpdGNoIChvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzKSB7CisJCWNhc2UgQUNQSV9SRUZDTEFTU19ERUJVRzoKKworCQkJYWNwaV9vc19wcmludGYoIlxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIEFNTF9JTkRFWF9PUDoKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX0lOREVYOgogCi0JCQlhY3BpX29zX3ByaW50ZigiUmVmZXJlbmNlOiBJbmRleCAlcFxuIiwKLQkJCQkgICAgICAgb2JqX2Rlc2MtPnJlZmVyZW5jZS5vYmplY3QpOworCQkJYWNwaV9vc19wcmludGYoIiVwXG4iLCBvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCk7CiAJCQlicmVhazsKIAotCQljYXNlIEFNTF9MT0FEX09QOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfVEFCTEU6CiAKLQkJCWFjcGlfb3NfcHJpbnRmKCJSZWZlcmVuY2U6IFtEZGJIYW5kbGVdIFRhYmxlSW5kZXggJXBcbiIsCi0JCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0KTsKKwkJCWFjcGlfb3NfcHJpbnRmKCJUYWJsZSBJbmRleCAlWFxuIiwKKwkJCQkgICAgICAgb2JqX2Rlc2MtPnJlZmVyZW5jZS52YWx1ZSk7CiAJCQlicmVhazsKIAotCQljYXNlIEFNTF9SRUZfT0ZfT1A6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19SRUZPRjoKIAotCQkJYWNwaV9vc19wcmludGYoIlJlZmVyZW5jZTogKFJlZk9mKSAlcCBbJXNdXG4iLAotCQkJCSAgICAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCwKKwkJCWFjcGlfb3NfcHJpbnRmKCIlcCBbJXNdXG4iLCBvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCwKIAkJCQkgICAgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKCgodW5pb24KIAkJCQkJCQkgICAgICAgYWNwaV9vcGVyYW5kX29iamVjdAotCQkJCQkJCSAgICAgICAqKW9ial9kZXNjLT4KKwkJCQkJCQkgICAgICAgKikKKwkJCQkJCQkgICAgICBvYmpfZGVzYy0+CiAJCQkJCQkJICAgICAgcmVmZXJlbmNlLgogCQkJCQkJCSAgICAgIG9iamVjdCktPmNvbW1vbi4KIAkJCQkJCQkgICAgIHR5cGUpKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgQU1MX0FSR19PUDoKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX0FSRzoKIAotCQkJYWNwaV9vc19wcmludGYoIlJlZmVyZW5jZTogQXJnJWQiLAotCQkJCSAgICAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLm9mZnNldCk7CisJCQlhY3BpX29zX3ByaW50ZigiJVgiLCBvYmpfZGVzYy0+cmVmZXJlbmNlLnZhbHVlKTsKIAogCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewogCkBAIC01NDIsMTAgKzU0Myw5IEBACiAJCQlhY3BpX29zX3ByaW50ZigiXG4iKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgQU1MX0xPQ0FMX09QOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CiAKLQkJCWFjcGlfb3NfcHJpbnRmKCJSZWZlcmVuY2U6IExvY2FsJWQiLAotCQkJCSAgICAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLm9mZnNldCk7CisJCQlhY3BpX29zX3ByaW50ZigiJVgiLCBvYmpfZGVzYy0+cmVmZXJlbmNlLnZhbHVlKTsKIAogCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewogCkBAIC01NjAsMjEgKzU2MCwxNiBAQAogCQkJYWNwaV9vc19wcmludGYoIlxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIEFNTF9JTlRfTkFNRVBBVEhfT1A6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19OQU1FOgogCi0JCQlhY3BpX29zX3ByaW50ZigiUmVmZXJlbmNlOiBOYW1lcGF0aCAlWCBbJTQuNHNdXG4iLAotCQkJCSAgICAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLm5vZGUtPm5hbWUuaW50ZWdlciwKKwkJCWFjcGlfb3NfcHJpbnRmKCItIFslNC40c11cbiIsCiAJCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZS0+bmFtZS5hc2NpaSk7CiAJCQlicmVhazsKIAotCQlkZWZhdWx0OgorCQlkZWZhdWx0OgkvKiBVbmtub3duIHJlZmVyZW5jZSBjbGFzcyAqLwogCi0JCQkvKiBVbmtub3duIG9wY29kZSAqLwotCi0JCQlhY3BpX29zX3ByaW50ZigiVW5rbm93biBSZWZlcmVuY2Ugb3Bjb2RlPSVYXG4iLAotCQkJCSAgICAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSk7CisJCQlhY3BpX29zX3ByaW50ZigiJTIuMlhcbiIsIG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpOwogCQkJYnJlYWs7Ci0KIAkJfQogCQlicmVhazsKIApAQCAtODY1LDggKzg2MCw4IEBACiAKIAlyZXRfYnVmLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSOwogCi0JaWYgKG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9JTlRfTkFNRVBBVEhfT1ApIHsKLQkJYWNwaV9vc19wcmludGYoIiBOYW1lZCBPYmplY3QgJXAgIiwgb2JqX2Rlc2MtPnJlZmVyZW5jZS5ub2RlKTsKKwlpZiAob2JqX2Rlc2MtPnJlZmVyZW5jZS5jbGFzcyA9PSBBQ1BJX1JFRkNMQVNTX05BTUUpIHsKKwkJYWNwaV9vc19wcmludGYoIiAlcCAiLCBvYmpfZGVzYy0+cmVmZXJlbmNlLm5vZGUpOwogCiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX25zX2hhbmRsZV90b19wYXRobmFtZShvYmpfZGVzYy0+cmVmZXJlbmNlLm5vZGUsCkBAIC04ODIsMTQgKzg3NywxMiBAQAogCQkgICAgQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkgewogCQkJYWNwaV9vc19wcmludGYoIiBUYXJnZXQ6ICVwIiwKIAkJCQkgICAgICAgb2JqX2Rlc2MtPnJlZmVyZW5jZS5vYmplY3QpOwotCQkJaWYgKG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9MT0FEX09QKSB7Ci0JCQkJLyoKLQkJCQkgKiBGb3IgRERCSGFuZGxlIHJlZmVyZW5jZSwKLQkJCQkgKiBvYmpfZGVzYy0+UmVmZXJlbmNlLk9iamVjdCBpcyB0aGUgdGFibGUgaW5kZXgKLQkJCQkgKi8KLQkJCQlhY3BpX29zX3ByaW50ZigiIFtEREJIYW5kbGVdXG4iKTsKKwkJCWlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzID09IEFDUElfUkVGQ0xBU1NfVEFCTEUpIHsKKwkJCQlhY3BpX29zX3ByaW50ZigiIFRhYmxlIEluZGV4OiAlWFxuIiwKKwkJCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2UudmFsdWUpOwogCQkJfSBlbHNlIHsKLQkJCQlhY3BpX29zX3ByaW50ZigiIFslc11cbiIsCisJCQkJYWNwaV9vc19wcmludGYoIiBUYXJnZXQ6ICVwIFslc11cbiIsCisJCQkJCSAgICAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCwKIAkJCQkJICAgICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZSgoKHVuaW9uCiAJCQkJCQkJCSAgICAgICBhY3BpX29wZXJhbmRfb2JqZWN0CiAJCQkJCQkJCSAgICAgICAqKQpAQCAtOTg4LDkgKzk4MSw5IEBACiAKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0U6CiAKLQkJYWNwaV9vc19wcmludGYoIltPYmplY3QgUmVmZXJlbmNlXSAlcyIsCi0JCQkgICAgICAgKGFjcGlfcHNfZ2V0X29wY29kZV9pbmZvCi0JCQkJKG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlKSktPm5hbWUpOworCQlhY3BpX29zX3ByaW50ZigiW09iamVjdCBSZWZlcmVuY2VdIFR5cGUgWyVzXSAlMi4yWCIsCisJCQkgICAgICAgYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUob2JqX2Rlc2MpLAorCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpOwogCQlhY3BpX2V4X2R1bXBfcmVmZXJlbmNlX29iaihvYmpfZGVzYyk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtaXNjLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtaXNjLmMKaW5kZXggNzMxNDE0YS4uZWZiMTkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG1pc2MuYwpAQCAtODYsMTAgKzg2LDEwIEBACiAJCS8qCiAJCSAqIE11c3QgYmUgYSByZWZlcmVuY2UgdG8gYSBMb2NhbCBvciBBcmcKIAkJICovCi0JCXN3aXRjaCAob2JqX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUpIHsKLQkJY2FzZSBBTUxfTE9DQUxfT1A6Ci0JCWNhc2UgQU1MX0FSR19PUDoKLQkJY2FzZSBBTUxfREVCVUdfT1A6CisJCXN3aXRjaCAob2JqX2Rlc2MtPnJlZmVyZW5jZS5jbGFzcykgeworCQljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19BUkc6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19ERUJVRzoKIAogCQkJLyogVGhlIHJlZmVyZW5jZWQgb2JqZWN0IGlzIHRoZSBwc2V1ZG8tbm9kZSBmb3IgdGhlIGxvY2FsL2FyZyAqLwogCkBAIC05OCw4ICs5OCw4IEBACiAKIAkJZGVmYXVsdDoKIAotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIlVua25vd24gUmVmZXJlbmNlIG9wY29kZSAlWCIsCi0JCQkJICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlKSk7CisJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiVW5rbm93biBSZWZlcmVuY2UgQ2xhc3MgJTIuMlgiLAorCQkJCSAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzKSk7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0lOVEVSTkFMKTsKIAkJfQogCQlicmVhazsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKLQlyZWZlcmVuY2Vfb2JqLT5yZWZlcmVuY2Uub3Bjb2RlID0gQU1MX1JFRl9PRl9PUDsKKwlyZWZlcmVuY2Vfb2JqLT5yZWZlcmVuY2UuY2xhc3MgPSBBQ1BJX1JFRkNMQVNTX1JFRk9GOwogCXJlZmVyZW5jZV9vYmotPnJlZmVyZW5jZS5vYmplY3QgPSByZWZlcmVuY2VkX29iajsKIAkqcmV0dXJuX2Rlc2MgPSByZWZlcmVuY2Vfb2JqOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzEuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMS5jCmluZGV4IDdjM2JlYTUuLmY2MjJmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMS5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMS5jCkBAIC04MjUsMTYgKzgyNSwxNiBAQAogCQkJCSAqCiAJCQkJICogTXVzdCByZXNvbHZlL2RlcmVmZXJlbmNlIHRoZSBsb2NhbC9hcmcgcmVmZXJlbmNlIGZpcnN0CiAJCQkJICovCi0JCQkJc3dpdGNoIChvcGVyYW5kWzBdLT5yZWZlcmVuY2Uub3Bjb2RlKSB7Ci0JCQkJY2FzZSBBTUxfTE9DQUxfT1A6Ci0JCQkJY2FzZSBBTUxfQVJHX09QOgorCQkJCXN3aXRjaCAob3BlcmFuZFswXS0+cmVmZXJlbmNlLmNsYXNzKSB7CisJCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOgorCQkJCWNhc2UgQUNQSV9SRUZDTEFTU19BUkc6CiAKIAkJCQkJLyogU2V0IE9wZXJhbmRbMF0gdG8gdGhlIHZhbHVlIG9mIHRoZSBsb2NhbC9hcmcgKi8KIAogCQkJCQlzdGF0dXMgPQogCQkJCQkgICAgYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfdmFsdWUKLQkJCQkJICAgIChvcGVyYW5kWzBdLT5yZWZlcmVuY2Uub3Bjb2RlLAotCQkJCQkgICAgIG9wZXJhbmRbMF0tPnJlZmVyZW5jZS5vZmZzZXQsCisJCQkJCSAgICAob3BlcmFuZFswXS0+cmVmZXJlbmNlLmNsYXNzLAorCQkJCQkgICAgIG9wZXJhbmRbMF0tPnJlZmVyZW5jZS52YWx1ZSwKIAkJCQkJICAgICB3YWxrX3N0YXRlLCAmdGVtcF9kZXNjKTsKIAkJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJCQlnb3RvIGNsZWFudXA7CkBAIC04NDgsNyArODQ4LDcgQEAKIAkJCQkJb3BlcmFuZFswXSA9IHRlbXBfZGVzYzsKIAkJCQkJYnJlYWs7CiAKLQkJCQljYXNlIEFNTF9SRUZfT0ZfT1A6CisJCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX1JFRk9GOgogCiAJCQkJCS8qIEdldCB0aGUgb2JqZWN0IHRvIHdoaWNoIHRoZSByZWZlcmVuY2UgcmVmZXJzICovCiAKQEAgLTkyOCw4ICs5MjgsOCBAQAogCQkJICogVGhpcyBtdXN0IGJlIGEgcmVmZXJlbmNlIG9iamVjdCBwcm9kdWNlZCBieSBlaXRoZXIgdGhlCiAJCQkgKiBJbmRleCgpIG9yIHJlZl9vZigpIG9wZXJhdG9yCiAJCQkgKi8KLQkJCXN3aXRjaCAob3BlcmFuZFswXS0+cmVmZXJlbmNlLm9wY29kZSkgewotCQkJY2FzZSBBTUxfSU5ERVhfT1A6CisJCQlzd2l0Y2ggKG9wZXJhbmRbMF0tPnJlZmVyZW5jZS5jbGFzcykgeworCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX0lOREVYOgogCiAJCQkJLyoKIAkJCQkgKiBUaGUgdGFyZ2V0IHR5cGUgZm9yIHRoZSBJbmRleCBvcGVyYXRvciBtdXN0IGJlCkBAIC05NjUsNyArOTY1LDcgQEAKIAkJCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPQogCQkJCQkgICAgdGVtcF9kZXNjLT5idWZmZXIuCiAJCQkJCSAgICBwb2ludGVyW29wZXJhbmRbMF0tPnJlZmVyZW5jZS4KLQkJCQkJCSAgICBvZmZzZXRdOworCQkJCQkJICAgIHZhbHVlXTsKIAkJCQkJYnJlYWs7CiAKIAkJCQljYXNlIEFDUElfVFlQRV9QQUNLQUdFOgpAQCAtOTg1LDcgKzk4NSw3IEBACiAJCQkJZGVmYXVsdDoKIAogCQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkJICAgICJVbmtub3duIEluZGV4IFRhcmdldFR5cGUgJVggaW4gb2JqICVwIiwKKwkJCQkJCSAgICAiVW5rbm93biBJbmRleCBUYXJnZXRUeXBlICVYIGluIHJlZmVyZW5jZSBvYmplY3QgJXAiLAogCQkJCQkJICAgIG9wZXJhbmRbMF0tPnJlZmVyZW5jZS4KIAkJCQkJCSAgICB0YXJnZXRfdHlwZSwgb3BlcmFuZFswXSkpOwogCQkJCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwpAQCAtOTkzLDcgKzk5Myw3IEBACiAJCQkJfQogCQkJCWJyZWFrOwogCi0JCQljYXNlIEFNTF9SRUZfT0ZfT1A6CisJCQljYXNlIEFDUElfUkVGQ0xBU1NfUkVGT0Y6CiAKIAkJCQlyZXR1cm5fZGVzYyA9IG9wZXJhbmRbMF0tPnJlZmVyZW5jZS5vYmplY3Q7CiAKQEAgLTEwMTMsOSArMTAxMyw5IEBACiAKIAkJCWRlZmF1bHQ6CiAJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkJICAgICJVbmtub3duIG9wY29kZSBpbiByZWZlcmVuY2UoJXApIC0gJVgiLAorCQkJCQkgICAgIlVua25vd24gY2xhc3MgaW4gcmVmZXJlbmNlKCVwKSAtICUyLjJYIiwKIAkJCQkJICAgIG9wZXJhbmRbMF0sCi0JCQkJCSAgICBvcGVyYW5kWzBdLT5yZWZlcmVuY2Uub3Bjb2RlKSk7CisJCQkJCSAgICBvcGVyYW5kWzBdLT5yZWZlcmVuY2UuY2xhc3MpKTsKIAogCQkJCXN0YXR1cyA9IEFFX1RZUEU7CiAJCQkJZ290byBjbGVhbnVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4b3BhcmcyLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzIuYwppbmRleCA4ZThiYmI2Li4zNjhkZWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzIuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzIuYwpAQCAtMzkxLDggKzM5MSw4IEBACiAJCS8qIEluaXRpYWxpemUgdGhlIEluZGV4IHJlZmVyZW5jZSBvYmplY3QgKi8KIAogCQlpbmRleCA9IG9wZXJhbmRbMV0tPmludGVnZXIudmFsdWU7Ci0JCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uub2Zmc2V0ID0gKHUzMikgaW5kZXg7Ci0JCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID0gQU1MX0lOREVYX09QOworCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLnZhbHVlID0gKHUzMikgaW5kZXg7CisJCXJldHVybl9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPSBBQ1BJX1JFRkNMQVNTX0lOREVYOwogCiAJCS8qCiAJCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSBTb3VyY2Ugb3BlcmFuZCBpcyBhIFN0cmluZywgQnVmZmVyLCBvciBQYWNrYWdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzbnRlLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNudGUuYwppbmRleCA1NTk2ZjQyLi40MjNhZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNudGUuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNudGUuYwpAQCAtNDYsOCArNDYsNiBAQAogI2luY2x1ZGUgPGFjcGkvYWNkaXNwYXQuaD4KICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgotI2luY2x1ZGUgPGFjcGkvYWNwYXJzZXIuaD4KLSNpbmNsdWRlIDxhY3BpL2FtbGNvZGUuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfRVhFQ1VURVIKIEFDUElfTU9EVUxFX05BTUUoImV4cmVzbnRlIikKQEAgLTIzOCwxMCArMjM2LDEwIEBACiAKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0U6CiAKLQkJc3dpdGNoIChzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSkgewotCQljYXNlIEFNTF9MT0FEX09QOgkvKiBUaGlzIGlzIGEgZGRiX2hhbmRsZSAqLwotCQljYXNlIEFNTF9SRUZfT0ZfT1A6Ci0JCWNhc2UgQU1MX0lOREVYX09QOgorCQlzd2l0Y2ggKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpIHsKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX1RBQkxFOgkvKiBUaGlzIGlzIGEgZGRiX2hhbmRsZSAqLworCQljYXNlIEFDUElfUkVGQ0xBU1NfUkVGT0Y6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19JTkRFWDoKIAogCQkJLyogUmV0dXJuIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgKi8KIApAQCAtMjUzLDEwICsyNTEsOCBAQAogCQkJLyogTm8gbmFtZWQgcmVmZXJlbmNlcyBhcmUgYWxsb3dlZCBoZXJlICovCiAKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJVbnN1cHBvcnRlZCBSZWZlcmVuY2Ugb3Bjb2RlICVYICglcykiLAotCQkJCSAgICBzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSwKLQkJCQkgICAgYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUoc291cmNlX2Rlc2MtPgotCQkJCQkJCSAgICByZWZlcmVuY2Uub3Bjb2RlKSkpOworCQkJCSAgICAiVW5zdXBwb3J0ZWQgUmVmZXJlbmNlIHR5cGUgJVgiLAorCQkJCSAgICBzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLmNsYXNzKSk7CiAKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfT1BFUkFORF9UWVBFKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzb2x2LmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvbHYuYwppbmRleCBiMzVmN2M4Li44OTU3MWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvbHYuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvbHYuYwpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgPGFjcGkvYWNkaXNwYXQuaD4KICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgotI2luY2x1ZGUgPGFjcGkvYWNwYXJzZXIuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfRVhFQ1VURVIKIEFDUElfTU9EVUxFX05BTUUoImV4cmVzb2x2IikKQEAgLTE0MSw3ICsxNDAsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnN0YWNrX2Rlc2M7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MgPSBOVUxMOwotCXUxNiBvcGNvZGU7CisJdTggcmVmX3R5cGU7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3Jlc29sdmVfb2JqZWN0X3RvX3ZhbHVlKTsKIApAQCAtMTUyLDE5ICsxNTEsMTkgQEAKIAlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKHN0YWNrX2Rlc2MpKSB7CiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgogCi0JCW9wY29kZSA9IHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGU7CisJCXJlZl90eXBlID0gc3RhY2tfZGVzYy0+cmVmZXJlbmNlLmNsYXNzOwogCi0JCXN3aXRjaCAob3Bjb2RlKSB7Ci0JCWNhc2UgQU1MX0xPQ0FMX09QOgotCQljYXNlIEFNTF9BUkdfT1A6CisJCXN3aXRjaCAocmVmX3R5cGUpIHsKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfQVJHOgogCiAJCQkvKgogCQkJICogR2V0IHRoZSBsb2NhbCBmcm9tIHRoZSBtZXRob2QncyBzdGF0ZSBpbmZvCiAJCQkgKiBOb3RlOiB0aGlzIGluY3JlbWVudHMgdGhlIGxvY2FsJ3Mgb2JqZWN0IHJlZmVyZW5jZSBjb3VudAogCQkJICovCi0JCQlzdGF0dXMgPSBhY3BpX2RzX21ldGhvZF9kYXRhX2dldF92YWx1ZShvcGNvZGUsCisJCQlzdGF0dXMgPSBhY3BpX2RzX21ldGhvZF9kYXRhX2dldF92YWx1ZShyZWZfdHlwZSwKIAkJCQkJCQkgICAgICAgc3RhY2tfZGVzYy0+Ci0JCQkJCQkJICAgICAgIHJlZmVyZW5jZS5vZmZzZXQsCisJCQkJCQkJICAgICAgIHJlZmVyZW5jZS52YWx1ZSwKIAkJCQkJCQkgICAgICAgd2Fsa19zdGF0ZSwKIAkJCQkJCQkgICAgICAgJm9ial9kZXNjKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMTczLDcgKzE3Miw3IEBACiAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKIAkJCQkJICAiW0FyZy9Mb2NhbCAlWF0gVmFsdWVPYmogaXMgJXBcbiIsCi0JCQkJCSAgc3RhY2tfZGVzYy0+cmVmZXJlbmNlLm9mZnNldCwKKwkJCQkJICBzdGFja19kZXNjLT5yZWZlcmVuY2UudmFsdWUsCiAJCQkJCSAgb2JqX2Rlc2MpKTsKIAogCQkJLyoKQEAgLTE4NCw3ICsxODMsNyBAQAogCQkJKnN0YWNrX3B0ciA9IG9ial9kZXNjOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBBTUxfSU5ERVhfT1A6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19JTkRFWDoKIAogCQkJc3dpdGNoIChzdGFja19kZXNjLT5yZWZlcmVuY2UudGFyZ2V0X3R5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRDoKQEAgLTIzOSwxNSArMjM4LDE1IEBACiAJCQl9CiAJCQlicmVhazsKIAotCQljYXNlIEFNTF9SRUZfT0ZfT1A6Ci0JCWNhc2UgQU1MX0RFQlVHX09QOgotCQljYXNlIEFNTF9MT0FEX09QOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfUkVGT0Y6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19ERUJVRzoKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX1RBQkxFOgogCiAJCQkvKiBKdXN0IGxlYXZlIHRoZSBvYmplY3QgYXMtaXMsIGRvIG5vdCBkZXJlZmVyZW5jZSAqLwogCiAJCQlicmVhazsKIAotCQljYXNlIEFNTF9JTlRfTkFNRVBBVEhfT1A6CS8qIFJlZmVyZW5jZSB0byBhIG5hbWVkIG9iamVjdCAqLworCQljYXNlIEFDUElfUkVGQ0xBU1NfTkFNRToJLyogUmVmZXJlbmNlIHRvIGEgbmFtZWQgb2JqZWN0ICovCiAKIAkJCS8qIERlcmVmZXJlbmNlIHRoZSBuYW1lICovCiAKQEAgLTI3Myw4ICsyNzIsNyBAQAogCQlkZWZhdWx0OgogCiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiVW5rbm93biBSZWZlcmVuY2Ugb3Bjb2RlICVYICglcykgaW4gJXAiLAotCQkJCSAgICBvcGNvZGUsIGFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKG9wY29kZSksCisJCQkJICAgICJVbmtub3duIFJlZmVyZW5jZSB0eXBlICVYIGluICVwIiwgcmVmX3R5cGUsCiAJCQkJICAgIHN0YWNrX2Rlc2MpKTsKIAkJCXN0YXR1cyA9IEFFX0FNTF9JTlRFUk5BTDsKIAkJCWJyZWFrOwpAQCAtMzg4LDEzICszODYsMTMgQEAKIAkgKiB0cmF2ZXJzaW5nIHRoZSBsaXN0IG9mIHBvc3NpYmx5IG1hbnkgbmVzdGVkIHJlZmVyZW5jZXMuCiAJICovCiAJd2hpbGUgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7Ci0JCXN3aXRjaCAob2JqX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUpIHsKLQkJY2FzZSBBTUxfUkVGX09GX09QOgotCQljYXNlIEFNTF9JTlRfTkFNRVBBVEhfT1A6CisJCXN3aXRjaCAob2JqX2Rlc2MtPnJlZmVyZW5jZS5jbGFzcykgeworCQljYXNlIEFDUElfUkVGQ0xBU1NfUkVGT0Y6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19OQU1FOgogCiAJCQkvKiBEZXJlZmVyZW5jZSB0aGUgcmVmZXJlbmNlIHBvaW50ZXIgKi8KIAotCQkJaWYgKG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9SRUZfT0ZfT1ApIHsKKwkJCWlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzID09IEFDUElfUkVGQ0xBU1NfUkVGT0YpIHsKIAkJCQlub2RlID0gb2JqX2Rlc2MtPnJlZmVyZW5jZS5vYmplY3Q7CiAJCQl9IGVsc2UgewkvKiBBTUxfSU5UX05BTUVQQVRIX09QICovCiAKQEAgLTQyOSw3ICs0MjcsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSBBTUxfSU5ERVhfT1A6CisJCWNhc2UgQUNQSV9SRUZDTEFTU19JTkRFWDoKIAogCQkJLyogR2V0IHRoZSB0eXBlIG9mIHRoaXMgcmVmZXJlbmNlIChpbmRleCBpbnRvIGFub3RoZXIgb2JqZWN0KSAqLwogCkBAIC00NTUsMjIgKzQ1MywyMiBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSBBTUxfTE9BRF9PUDoKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX1RBQkxFOgogCiAJCQl0eXBlID0gQUNQSV9UWVBFX0REQl9IQU5ETEU7CiAJCQlnb3RvIGV4aXQ7CiAKLQkJY2FzZSBBTUxfTE9DQUxfT1A6Ci0JCWNhc2UgQU1MX0FSR19PUDoKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfQVJHOgogCiAJCQlpZiAocmV0dXJuX2Rlc2MpIHsKIAkJCQlzdGF0dXMgPQogCQkJCSAgICBhY3BpX2RzX21ldGhvZF9kYXRhX2dldF92YWx1ZShvYmpfZGVzYy0+CiAJCQkJCQkJCSAgcmVmZXJlbmNlLgotCQkJCQkJCQkgIG9wY29kZSwKKwkJCQkJCQkJICBjbGFzcywKIAkJCQkJCQkJICBvYmpfZGVzYy0+CiAJCQkJCQkJCSAgcmVmZXJlbmNlLgotCQkJCQkJCQkgIG9mZnNldCwKKwkJCQkJCQkJICB2YWx1ZSwKIAkJCQkJCQkJICB3YWxrX3N0YXRlLAogCQkJCQkJCQkgICZvYmpfZGVzYyk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC00ODEsMTAgKzQ3OSwxMCBAQAogCQkJCXN0YXR1cyA9CiAJCQkJICAgIGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUob2JqX2Rlc2MtPgogCQkJCQkJCQkgcmVmZXJlbmNlLgotCQkJCQkJCQkgb3Bjb2RlLAorCQkJCQkJCQkgY2xhc3MsCiAJCQkJCQkJCSBvYmpfZGVzYy0+CiAJCQkJCQkJCSByZWZlcmVuY2UuCi0JCQkJCQkJCSBvZmZzZXQsCisJCQkJCQkJCSB2YWx1ZSwKIAkJCQkJCQkJIHdhbGtfc3RhdGUsCiAJCQkJCQkJCSAmbm9kZSk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC00OTksNyArNDk3LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgQU1MX0RFQlVHX09QOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfREVCVUc6CiAKIAkJCS8qIFRoZSBEZWJ1ZyBPYmplY3QgaXMgb2YgdHlwZSAiRGVidWdPYmplY3QiICovCiAKQEAgLTUwOSw4ICs1MDcsOCBAQAogCQlkZWZhdWx0OgogCiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiVW5rbm93biBSZWZlcmVuY2Ugc3VidHlwZSAlWCIsCi0JCQkJICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlKSk7CisJCQkJICAgICJVbmtub3duIFJlZmVyZW5jZSBDbGFzcyAlMi4yWCIsCisJCQkJICAgIG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpKTsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfSU5URVJOQUwpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzb3AuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29wLmMKaW5kZXggNTQwODVmMS4uMGJiODI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzb3AuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvcC5jCkBAIC0yMjUsNDEgKzIyNSwzNiBAQAogCiAJCQlpZiAob2JqZWN0X3R5cGUgPT0gKHU4KSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CiAKLQkJCQkvKiBEZWNvZGUgdGhlIFJlZmVyZW5jZSAqLworCQkJCS8qIFZhbGlkYXRlIHRoZSBSZWZlcmVuY2UgKi8KIAotCQkJCW9wX2luZm8gPSBhY3BpX3BzX2dldF9vcGNvZGVfaW5mbyhvcGNvZGUpOwotCQkJCWlmIChvcF9pbmZvLT5jbGFzcyA9PSBBTUxfQ0xBU1NfVU5LTk9XTikgewotCQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0JBRF9PUENPREUpOwotCQkJCX0KKwkJCQlzd2l0Y2ggKG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpIHsKKwkJCQljYXNlIEFDUElfUkVGQ0xBU1NfREVCVUc6CiAKLQkJCQlzd2l0Y2ggKG9ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlKSB7Ci0JCQkJY2FzZSBBTUxfREVCVUdfT1A6CiAJCQkJCXRhcmdldF9vcCA9IEFNTF9ERUJVR19PUDsKIAogCQkJCQkvKmxpbnQgLWZhbGx0aHJvdWdoICovCiAKLQkJCQljYXNlIEFNTF9JTkRFWF9PUDoKLQkJCQljYXNlIEFNTF9SRUZfT0ZfT1A6Ci0JCQkJY2FzZSBBTUxfQVJHX09QOgotCQkJCWNhc2UgQU1MX0xPQ0FMX09QOgotCQkJCWNhc2UgQU1MX0xPQURfT1A6CS8qIGRkYl9oYW5kbGUgZnJvbSBMT0FEX09QIG9yIExPQURfVEFCTEVfT1AgKi8KLQkJCQljYXNlIEFNTF9JTlRfTkFNRVBBVEhfT1A6CS8qIFJlZmVyZW5jZSB0byBhIG5hbWVkIG9iamVjdCAqLworCQkJCWNhc2UgQUNQSV9SRUZDTEFTU19BUkc6CisJCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOgorCQkJCWNhc2UgQUNQSV9SRUZDTEFTU19JTkRFWDoKKwkJCQljYXNlIEFDUElfUkVGQ0xBU1NfUkVGT0Y6CisJCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX1RBQkxFOgkvKiBkZGJfaGFuZGxlIGZyb20gTE9BRF9PUCBvciBMT0FEX1RBQkxFX09QICovCisJCQkJY2FzZSBBQ1BJX1JFRkNMQVNTX05BTUU6CS8qIFJlZmVyZW5jZSB0byBhIG5hbWVkIG9iamVjdCAqLwogCi0JCQkJCUFDUElfREVCVUdfT05MWV9NRU1CRVJTKEFDUElfREVCVUdfUFJJTlQKLQkJCQkJCQkJKChBQ1BJX0RCX0VYRUMsCi0JCQkJCQkJCSAgIk9wZXJhbmQgaXMgYSBSZWZlcmVuY2UsIFJlZk9wY29kZSBbJXNdXG4iLAotCQkJCQkJCQkgIChhY3BpX3BzX2dldF9vcGNvZGVfaW5mbwotCQkJCQkJCQkgICAob2JqX2Rlc2MtPgotCQkJCQkJCQkgICAgcmVmZXJlbmNlLgotCQkJCQkJCQkgICAgb3Bjb2RlKSktPgotCQkJCQkJCQkgIG5hbWUpKSk7CisJCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKKwkJCQkJCQkgICJPcGVyYW5kIGlzIGEgUmVmZXJlbmNlLCBDbGFzcyBbJXNdICUyLjJYXG4iLAorCQkJCQkJCSAgYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUKKwkJCQkJCQkgIChvYmpfZGVzYyksCisJCQkJCQkJICBvYmpfZGVzYy0+cmVmZXJlbmNlLgorCQkJCQkJCSAgY2xhc3MpKTsKIAkJCQkJYnJlYWs7CiAKIAkJCQlkZWZhdWx0OgorCiAJCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCQkgICAgIk9wZXJhbmQgaXMgYSBSZWZlcmVuY2UsIFVua25vd24gUmVmZXJlbmNlIE9wY29kZTogJVgiLAotCQkJCQkJICAgIG9ial9kZXNjLT5yZWZlcmVuY2UuCi0JCQkJCQkgICAgb3Bjb2RlKSk7CisJCQkJCQkgICAgIlVua25vd24gUmVmZXJlbmNlIENsYXNzICUyLjJYIGluICVwIiwKKwkJCQkJCSAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzLAorCQkJCQkJICAgIG9ial9kZXNjKSk7CiAKIAkJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwogCQkJCX0KQEAgLTI3MCw4ICsyNjUsNyBAQAogCiAJCQkvKiBJbnZhbGlkIGRlc2NyaXB0b3IgKi8KIAotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkludmFsaWQgZGVzY3JpcHRvciAlcCBbJXNdIiwKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGRlc2NyaXB0b3IgJXAgWyVzXSIsCiAJCQkJICAgIG9ial9kZXNjLAogCQkJCSAgICBhY3BpX3V0X2dldF9kZXNjcmlwdG9yX25hbWUob2JqX2Rlc2MpKSk7CiAKQEAgLTM0Myw3ICszMzcsNyBAQAogCQkJaWYgKChvcGNvZGUgPT0gQU1MX1NUT1JFX09QKSAmJgogCQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRSgqc3RhY2tfcHRyKSA9PQogCQkJICAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQotCQkJICAgICYmICgoKnN0YWNrX3B0ciktPnJlZmVyZW5jZS5vcGNvZGUgPT0gQU1MX0lOREVYX09QKSkgeworCQkJICAgICYmICgoKnN0YWNrX3B0ciktPnJlZmVyZW5jZS5jbGFzcyA9PSBBQ1BJX1JFRkNMQVNTX0lOREVYKSkgewogCQkJCWdvdG8gbmV4dF9vcGVyYW5kOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzdG9yZS5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3RvcmUuYwppbmRleCAzOGI1NWUzLi4zMzE4ZGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzdG9yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3JlLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CiAjaW5jbHVkZSA8YWNwaS9hbWxjb2RlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgotI2luY2x1ZGUgPGFjcGkvYWNwYXJzZXIuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfRVhFQ1VURVIKIEFDUElfTU9EVUxFX05BTUUoImV4c3RvcmUiKQpAQCAtMTc5LDIyICsxNzgsMjYgQEAKIAogCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKIAotCQlpZiAoc291cmNlX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPT0gQU1MX0lOREVYX09QKSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9ERUJVR19PQkpFQ1QsCi0JCQkJCSAgICAgICJbJXMsIDB4JVhdXG4iLAotCQkJCQkgICAgICBhY3BpX3BzX2dldF9vcGNvZGVfbmFtZQotCQkJCQkgICAgICAoc291cmNlX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUpLAotCQkJCQkgICAgICBzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLm9mZnNldCkpOwotCQl9IGVsc2UgewotCQkJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfREVCVUdfT0JKRUNULCAiWyVzXSIsCi0JCQkJCSAgICAgIGFjcGlfcHNfZ2V0X29wY29kZV9uYW1lCi0JCQkJCSAgICAgIChzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSkpKTsKLQkJfQorCQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9ERUJVR19PQkpFQ1QsICJbJXNdICIsCisJCQkJICAgICAgYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUoc291cmNlX2Rlc2MpKSk7CiAKLQkJaWYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9MT0FEX09QKSB7CS8qIExvYWQgYW5kIGxvYWRfdGFibGUgKi8KKwkJLyogRGVjb2RlIHRoZSByZWZlcmVuY2UgKi8KKworCQlzd2l0Y2ggKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpIHsKKwkJY2FzZSBBQ1BJX1JFRkNMQVNTX0lOREVYOgorCisJCQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9ERUJVR19PQkpFQ1QsICIweCVYXG4iLAorCQkJCQkgICAgICBzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLnZhbHVlKSk7CisJCQlicmVhazsKKworCQljYXNlIEFDUElfUkVGQ0xBU1NfVEFCTEU6CisKIAkJCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0RFQlVHX09CSkVDVCwKLQkJCQkJICAgICAgIiBUYWJsZSBPd25lcklkICVwXG4iLAotCQkJCQkgICAgICBzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCkpOworCQkJCQkgICAgICAiVGFibGUgSW5kZXggMHglWFxuIiwKKwkJCQkJICAgICAgc291cmNlX2Rlc2MtPnJlZmVyZW5jZS52YWx1ZSkpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTM0NywxNSArMzUwLDE1IEBACiAJfQogCiAJLyoKLQkgKiBFeGFtaW5lIHRoZSBSZWZlcmVuY2Ugb3Bjb2RlLiAgVGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQ6CisJICogRXhhbWluZSB0aGUgUmVmZXJlbmNlIGNsYXNzLiBUaGVzZSBjYXNlcyBhcmUgaGFuZGxlZDoKIAkgKgogCSAqIDEpIFN0b3JlIHRvIE5hbWUgKENoYW5nZSB0aGUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBhIG5hbWUpCiAJICogMikgU3RvcmUgdG8gYW4gaW5kZXhlZCBhcmVhIG9mIGEgQnVmZmVyIG9yIFBhY2thZ2UKIAkgKiAzKSBTdG9yZSB0byBhIE1ldGhvZCBMb2NhbCBvciBBcmcKIAkgKiA0KSBTdG9yZSB0byB0aGUgZGVidWcgb2JqZWN0CiAJICovCi0Jc3dpdGNoIChyZWZfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSkgewotCWNhc2UgQU1MX1JFRl9PRl9PUDoKKwlzd2l0Y2ggKHJlZl9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpIHsKKwljYXNlIEFDUElfUkVGQ0xBU1NfUkVGT0Y6CiAKIAkJLyogU3RvcmluZyBhbiBvYmplY3QgaW50byBhIE5hbWUgImNvbnRhaW5lciIgKi8KIApAQCAtMzY1LDcgKzM2OCw3IEBACiAJCQkJCQkgICAgICBBQ1BJX0lNUExJQ0lUX0NPTlZFUlNJT04pOwogCQlicmVhazsKIAotCWNhc2UgQU1MX0lOREVYX09QOgorCWNhc2UgQUNQSV9SRUZDTEFTU19JTkRFWDoKIAogCQkvKiBTdG9yaW5nIHRvIGFuIEluZGV4IChwb2ludGVyIGludG8gYSBwYWNrYWdlciBvciBidWZmZXIpICovCiAKQEAgLTM3NCwxOCArMzc3LDE4IEBACiAJCQkJCQkgIHdhbGtfc3RhdGUpOwogCQlicmVhazsKIAotCWNhc2UgQU1MX0xPQ0FMX09QOgotCWNhc2UgQU1MX0FSR19PUDoKKwljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CisJY2FzZSBBQ1BJX1JFRkNMQVNTX0FSRzoKIAogCQkvKiBTdG9yZSB0byBhIG1ldGhvZCBsb2NhbC9hcmcgICovCiAKIAkJc3RhdHVzID0KLQkJICAgIGFjcGlfZHNfc3RvcmVfb2JqZWN0X3RvX2xvY2FsKHJlZl9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlLAotCQkJCQkJICByZWZfZGVzYy0+cmVmZXJlbmNlLm9mZnNldCwKKwkJICAgIGFjcGlfZHNfc3RvcmVfb2JqZWN0X3RvX2xvY2FsKHJlZl9kZXNjLT5yZWZlcmVuY2UuY2xhc3MsCisJCQkJCQkgIHJlZl9kZXNjLT5yZWZlcmVuY2UudmFsdWUsCiAJCQkJCQkgIHNvdXJjZV9kZXNjLCB3YWxrX3N0YXRlKTsKIAkJYnJlYWs7CiAKLQljYXNlIEFNTF9ERUJVR19PUDoKKwljYXNlIEFDUElfUkVGQ0xBU1NfREVCVUc6CiAKIAkJLyoKIAkJICogU3RvcmluZyB0byB0aGUgRGVidWcgb2JqZWN0IGNhdXNlcyB0aGUgdmFsdWUgc3RvcmVkIHRvIGJlCkBAIC00MDEsOSArNDA0LDkgQEAKIAogCWRlZmF1bHQ6CiAKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIlVua25vd24gUmVmZXJlbmNlIG9wY29kZSAlWCIsCi0JCQkgICAgcmVmX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUpKTsKLQkJQUNQSV9EVU1QX0VOVFJZKHJlZl9kZXNjLCBBQ1BJX0xWX0VSUk9SKTsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIlVua25vd24gUmVmZXJlbmNlIENsYXNzICUyLjJYIiwKKwkJCSAgICByZWZfZGVzYy0+cmVmZXJlbmNlLmNsYXNzKSk7CisJCUFDUElfRFVNUF9FTlRSWShyZWZfZGVzYywgQUNQSV9MVl9JTkZPKTsKIAogCQlzdGF0dXMgPSBBRV9BTUxfSU5URVJOQUw7CiAJCWJyZWFrOwpAQCAtNDU4LDcgKzQ2MSw3IEBACiAKIAkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSA9PQogCQkgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRQotCQkgICAgJiYgc291cmNlX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPT0gQU1MX0xPQURfT1ApIHsKKwkJICAgICYmIHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0gQUNQSV9SRUZDTEFTU19UQUJMRSkgewogCiAJCQkvKiBUaGlzIGlzIGEgRERCSGFuZGxlLCBqdXN0IGFkZCBhIHJlZmVyZW5jZSB0byBpdCAqLwogCkBAIC01NTMsNyArNTU2LDcgQEAKIAogCQkvKiBTdG9yZSB0aGUgc291cmNlIHZhbHVlIGludG8gdGhlIHRhcmdldCBidWZmZXIgYnl0ZSAqLwogCi0JCW9ial9kZXNjLT5idWZmZXIucG9pbnRlcltpbmRleF9kZXNjLT5yZWZlcmVuY2Uub2Zmc2V0XSA9IHZhbHVlOworCQlvYmpfZGVzYy0+YnVmZmVyLnBvaW50ZXJbaW5kZXhfZGVzYy0+cmVmZXJlbmNlLnZhbHVlXSA9IHZhbHVlOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzdG9yZW4uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCmluZGV4IGE2ZDIxNjguLmVlZjYxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCkBAIC0xMjEsNyArMTIxLDggQEAKIAkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX1NUUklORykgJiYKIAkJICAgICEoKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSA9PQogCQkgICAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKLQkJICAgICAgJiYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9MT0FEX09QKSkpIHsKKwkJICAgICAgJiYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0KKwkJCSAgQUNQSV9SRUZDTEFTU19UQUJMRSkpKSB7CiAKIAkJCS8qIENvbnZlcnNpb24gc3VjY2Vzc2Z1bCBidXQgc3RpbGwgbm90IGEgdmFsaWQgdHlwZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZmFuLmMgYi9kcml2ZXJzL2FjcGkvZmFuLmMKaW5kZXggMjY1NWJjMS4uNjBkNTRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Zhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9mYW4uYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAKIAlkZXZfaW5mbygmZGV2aWNlLT5kZXYsICJyZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsIGNkZXYtPmlkKTsKIAotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGNkZXY7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGNkZXY7CiAJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosCiAJCQkJICAgJmNkZXYtPmRldmljZS5rb2JqLAogCQkJCSAgICJ0aGVybWFsX2Nvb2xpbmciKTsKQEAgLTMyNyw4ICszMjcsOCBAQAogCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3Bvd2VyKGRldmljZS0+aGFuZGxlLCAmcG93ZXJfc3RhdGUpOwogCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciByZWFkaW5nIGZhbiBwb3dlciBzdGF0ZVxuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkJICAiRXJyb3IgcmVhZGluZyBmYW4gcG93ZXIgc3RhdGVcbiIpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3NsZWVwLmMKaW5kZXggZGJhM2NmYi4uMjVkY2NkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jCkBAIC03OCwxOSArNzgsMTcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JLyogU2V0IHRoZSB2ZWN0b3IgKi8KKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uIDIuMGMgYW5kIGxhdGVyLCB0aGUgNjQtYml0CisJICogd2FraW5nIHZlY3RvciBzaG91bGQgYmUgY2xlYXJlZCBhbmQgdGhlIDMyLWJpdCB3YWtpbmcgdmVjdG9yIHNob3VsZAorCSAqIGJlIHVzZWQsIHVubGVzcyB3ZSB3YW50IHRoZSB3YWtlLXVwIGNvZGUgdG8gYmUgY2FsbGVkIGJ5IHRoZSBCSU9TIGluCisJICogUHJvdGVjdGVkIE1vZGUuICBTb21lIHN5c3RlbXMgKGZvciBleGFtcGxlIEhQIGR2NS0xMDA0bnIpIGFyZSBrbm93bgorCSAqIHRvIGZhaWwgdG8gcmVzdW1lIGlmIHRoZSA2NC1iaXQgdmVjdG9yIGlzIHVzZWQuCisJICovCisJaWYgKGZhY3MtPnZlcnNpb24gPj0gMSkKKwkJZmFjcy0+eGZpcm13YXJlX3dha2luZ192ZWN0b3IgPSAwOwogCi0JaWYgKChmYWNzLT5sZW5ndGggPCAzMikgfHwgKCEoZmFjcy0+eGZpcm13YXJlX3dha2luZ192ZWN0b3IpKSkgewotCQkvKgotCQkgKiBBQ1BJIDEuMCBGQUNTIG9yIHNob3J0IHRhYmxlIG9yIG9wdGlvbmFsIFhfIGZpZWxkIGlzIHplcm8KLQkJICovCi0JCWZhY3MtPmZpcm13YXJlX3dha2luZ192ZWN0b3IgPSAodTMyKSBwaHlzaWNhbF9hZGRyZXNzOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEFDUEkgMi4wIEZBQ1Mgd2l0aCB2YWxpZCBYXyBmaWVsZAotCQkgKi8KLQkJZmFjcy0+eGZpcm13YXJlX3dha2luZ192ZWN0b3IgPSBwaHlzaWNhbF9hZGRyZXNzOwotCX0KKwlmYWNzLT5maXJtd2FyZV93YWtpbmdfdmVjdG9yID0gKHUzMilwaHlzaWNhbF9hZGRyZXNzOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KQEAgLTEzNCwyMCArMTMyLDcgQEAKIAl9CiAKIAkvKiBHZXQgdGhlIHZlY3RvciAqLwotCi0JaWYgKChmYWNzLT5sZW5ndGggPCAzMikgfHwgKCEoZmFjcy0+eGZpcm13YXJlX3dha2luZ192ZWN0b3IpKSkgewotCQkvKgotCQkgKiBBQ1BJIDEuMCBGQUNTIG9yIHNob3J0IHRhYmxlIG9yIG9wdGlvbmFsIFhfIGZpZWxkIGlzIHplcm8KLQkJICovCi0JCSpwaHlzaWNhbF9hZGRyZXNzID0KLQkJICAgIChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpIGZhY3MtPmZpcm13YXJlX3dha2luZ192ZWN0b3I7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogQUNQSSAyLjAgRkFDUyB3aXRoIHZhbGlkIFhfIGZpZWxkCi0JCSAqLwotCQkqcGh5c2ljYWxfYWRkcmVzcyA9Ci0JCSAgICAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBmYWNzLT54ZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsKLQl9CisJKnBoeXNpY2FsX2FkZHJlc3MgPSAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKWZhY3MtPmZpcm13YXJlX3dha2luZ192ZWN0b3I7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpAQCAtNjI3LDYgKzYxMiwxMyBAQAogCX0KIAkvKiBUQkQ6IF9XQUsgInNvbWV0aW1lcyIgcmV0dXJucyBzdHVmZiAtIGRvIHdlIHdhbnQgdG8gbG9vayBhdCBpdD8gKi8KIAorCS8qCisJICogU29tZSBCSU9TZXMgYXNzdW1lIHRoYXQgV0FLX1NUUyB3aWxsIGJlIGNsZWFyZWQgb24gcmVzdW1lIGFuZCB1c2UKKwkgKiBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3lzdGVtIGlzIHJlYm9vdGluZyBvciByZXN1bWluZy4gQ2xlYXIKKwkgKiBpdCBmb3IgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgMSk7CisKIAlhY3BpX2dibF9zeXN0ZW1fYXdha2VfYW5kX3J1bm5pbmcgPSBUUlVFOwogCiAJLyogRW5hYmxlIHBvd2VyIGJ1dHRvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvTWFrZWZpbGUKaW5kZXggM2Y2M2QzNi4uMzcxYTJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogb2JqLXkgOj0gbnNhY2Nlc3MubyAgbnNsb2FkLm8gICAgbnNzZWFyY2gubyAgbnN4ZmV2YWwubyBcCiAJIG5zYWxsb2MubyAgIG5zZXZhbC5vICAgIG5zbmFtZXMubyAgIG5zdXRpbHMubyAgIG5zeGZuYW1lLm8gXAogCSBuc2R1bXAubyAgICBuc2luaXQubyAgICBuc29iamVjdC5vICBuc3dhbGsubyAgICBuc3hmb2JqLm8gIFwKLQkgbnNwYXJzZS5vCisJIG5zcGFyc2UubyAgIG5zcHJlZGVmLm8KIAogb2JqLSQoQUNQSV9GVVRVUkVfVVNBR0UpICs9IG5zZHVtcGR2Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXAuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNkdW1wLmMKaW5kZXggMGFiMjIwMC4uY2MwYWUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZHVtcC5jCkBAIC00Myw3ICs0Myw2IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+Ci0jaW5jbHVkZSA8YWNwaS9hY3BhcnNlci5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKIEFDUElfTU9EVUxFX05BTUUoIm5zZHVtcCIpCkBAIC0zMzQsOSArMzMzLDcgQEAKIAkJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgogCiAJCQlhY3BpX29zX3ByaW50ZigiWyVzXVxuIiwKLQkJCQkgICAgICAgYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUob2JqX2Rlc2MtPgotCQkJCQkJCSAgICAgICByZWZlcmVuY2UuCi0JCQkJCQkJICAgICAgIG9wY29kZSkpOworCQkJCSAgICAgICBhY3BpX3V0X2dldF9yZWZlcmVuY2VfbmFtZShvYmpfZGVzYykpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2V2YWwuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNldmFsLmMKaW5kZXggZDM2OTE2NC4uNGNkZjAzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2V2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZXZhbC5jCkBAIC03OCw2ICs3OCw3IEBACiBhY3BpX3N0YXR1cyBhY3BpX25zX2V2YWx1YXRlKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKiBpbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZXZhbHVhdGUpOwogCkBAIC0xMTcsNiArMTE4LDggQEAKIAkJCSAgaW5mby0+cmVzb2x2ZWRfbm9kZSwKIAkJCSAgYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KGluZm8tPnJlc29sdmVkX25vZGUpKSk7CiAKKwlub2RlID0gaW5mby0+cmVzb2x2ZWRfbm9kZTsKKwogCS8qCiAJICogVHdvIG1ham9yIGNhc2VzIGhlcmU6CiAJICoKQEAgLTE0OCwyMSArMTUxLDIyIEBACiAJCQkJaW5mby0+cGFyYW1fY291bnQrKzsKIAkJfQogCi0JCS8qIEVycm9yIGlmIHRvbyBmZXcgYXJndW1lbnRzIHdlcmUgcGFzc2VkIGluICovCisJCS8qCisJCSAqIFdhcm5pbmcgaWYgdG9vIGZldyBvciB0b28gbWFueSBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhc3NlZCBieSB0aGUKKwkJICogY2FsbGVyLiBXZSBkb24ndCB3YW50IHRvIGFib3J0IGhlcmUgd2l0aCBhbiBlcnJvciBiZWNhdXNlIGFuCisJCSAqIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG1heSBub3QgY2F1c2UgdGhlIG1ldGhvZCB0byBmYWlsLgorCQkgKiBIb3dldmVyLCB0aGUgbWV0aG9kIHdpbGwgZmFpbCBpZiB0aGVyZSBhcmUgdG9vIGZldyBhcmd1bWVudHMgcGFzc2VkCisJCSAqIGFuZCB0aGUgbWV0aG9kIGF0dGVtcHRzIHRvIHVzZSBvbmUgb2YgdGhlIG1pc3Npbmcgb25lcy4KKwkJICovCiAKIAkJaWYgKGluZm8tPnBhcmFtX2NvdW50IDwgaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5wYXJhbV9jb3VudCkgewotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCUFDUElfV0FSTklORygoQUVfSU5GTywKIAkJCQkgICAgIkluc3VmZmljaWVudCBhcmd1bWVudHMgLSAiCiAJCQkJICAgICJtZXRob2QgWyU0LjRzXSBuZWVkcyAlZCwgZm91bmQgJWQiLAogCQkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUoaW5mby0+cmVzb2x2ZWRfbm9kZSksCiAJCQkJICAgIGluZm8tPm9ial9kZXNjLT5tZXRob2QucGFyYW1fY291bnQsCiAJCQkJICAgIGluZm8tPnBhcmFtX2NvdW50KSk7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTUlTU0lOR19BUkdVTUVOVFMpOwotCQl9Ci0KLQkJLyogSnVzdCBhIHdhcm5pbmcgaWYgdG9vIG1hbnkgYXJndW1lbnRzICovCi0KLQkJZWxzZSBpZiAoaW5mby0+cGFyYW1fY291bnQgPgorCQl9IGVsc2UgaWYgKGluZm8tPnBhcmFtX2NvdW50ID4KIAkJCQlpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLnBhcmFtX2NvdW50KSB7CiAJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCiAJCQkJICAgICAgIkV4Y2VzcyBhcmd1bWVudHMgLSAiCkBAIC0xOTUsNyArMTk5LDI4IEBACiAJfSBlbHNlIHsKIAkJLyoKIAkJICogMikgT2JqZWN0IGlzIG5vdCBhIG1ldGhvZCwgcmV0dXJuIGl0cyBjdXJyZW50IHZhbHVlCisJCSAqCisJCSAqIERpc2FsbG93IGNlcnRhaW4gb2JqZWN0IHR5cGVzLiBGb3IgdGhlc2UsICJldmFsdWF0aW9uIiBpcyB1bmRlZmluZWQuCiAJCSAqLworCQlzd2l0Y2ggKGluZm8tPnJlc29sdmVkX25vZGUtPnR5cGUpIHsKKwkJY2FzZSBBQ1BJX1RZUEVfREVWSUNFOgorCQljYXNlIEFDUElfVFlQRV9FVkVOVDoKKwkJY2FzZSBBQ1BJX1RZUEVfTVVURVg6CisJCWNhc2UgQUNQSV9UWVBFX1JFR0lPTjoKKwkJY2FzZSBBQ1BJX1RZUEVfVEhFUk1BTDoKKwkJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfU0NPUEU6CisKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJICAgICJbJTQuNHNdIEV2YWx1YXRpb24gb2Ygb2JqZWN0IHR5cGUgWyVzXSBpcyBub3Qgc3VwcG9ydGVkIiwKKwkJCQkgICAgaW5mby0+cmVzb2x2ZWRfbm9kZS0+bmFtZS5hc2NpaSwKKwkJCQkgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKGluZm8tPnJlc29sdmVkX25vZGUtPgorCQkJCQkJCSAgdHlwZSkpKTsKKworCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX1RZUEUpOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCiAJCS8qCiAJCSAqIE9iamVjdHMgcmVxdWlyZSBhZGRpdGlvbmFsIHJlc29sdXRpb24gc3RlcHMgKGUuZy4sIHRoZSBOb2RlIG1heSBiZQpAQCAtMjM5LDkgKzI2NCwzNSBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBDaGVjayBpZiB0aGVyZSBpcyBhIHJldHVybiB2YWx1ZSB0aGF0IG11c3QgYmUgZGVhbHQgd2l0aAotCSAqLworCS8qIFZhbGlkYXRpb24gb2YgcmV0dXJuIHZhbHVlcyBmb3IgQUNQSS1wcmVkZWZpbmVkIG1ldGhvZHMgYW5kIG9iamVjdHMgKi8KKworCWlmICgoc3RhdHVzID09IEFFX09LKSB8fCAoc3RhdHVzID09IEFFX0NUUkxfUkVUVVJOX1ZBTFVFKSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBldmFsdWF0aW9uLCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzCisJCSAqIGVuc3VyZXMgdGhhdCBhbnkgd2FybmluZ3Mgd2lsbCBvbmx5IGJlIGVtaXR0ZWQgZHVyaW5nIHRoZSB2ZXJ5CisJCSAqIGZpcnN0IGV2YWx1YXRpb24gb2YgdGhlIG9iamVjdC4KKwkJICovCisJCWlmICghKG5vZGUtPmZsYWdzICYgQU5PQkpfRVZBTFVBVEVEKSkgeworCQkJLyoKKwkJCSAqIENoZWNrIGZvciBhIHByZWRlZmluZWQgQUNQSSBuYW1lLiBJZiBmb3VuZCwgdmFsaWRhdGUgdGhlCisJCQkgKiByZXR1cm5lZCBvYmplY3QuCisJCQkgKgorCQkJICogTm90ZTogSWdub3JlIHJldHVybiBzdGF0dXMgZm9yIG5vdywgZW1pdCB3YXJuaW5ncyBpZiB0aGVyZSBhcmUKKwkJCSAqIHByb2JsZW1zIHdpdGggdGhlIHJldHVybmVkIG9iamVjdC4gTWF5IGNoYW5nZSBsYXRlciB0byBhYm9ydAorCQkJICogdGhlIG1ldGhvZCBvbiBpbnZhbGlkIHJldHVybiBvYmplY3QuCisJCQkgKi8KKwkJCSh2b2lkKWFjcGlfbnNfY2hlY2tfcHJlZGVmaW5lZF9uYW1lcyhub2RlLAorCQkJCQkJCSAgICAgaW5mby0+CisJCQkJCQkJICAgICByZXR1cm5fb2JqZWN0KTsKKwkJfQorCisJCS8qIE1hcmsgdGhlIG5vZGUgYXMgaGF2aW5nIGJlZW4gZXZhbHVhdGVkICovCisKKwkJbm9kZS0+ZmxhZ3MgfD0gQU5PQkpfRVZBTFVBVEVEOworCX0KKworCS8qIENoZWNrIGlmIHRoZXJlIGlzIGEgcmV0dXJuIHZhbHVlIHRoYXQgbXVzdCBiZSBkZWFsdCB3aXRoICovCisKIAlpZiAoc3RhdHVzID09IEFFX0NUUkxfUkVUVVJOX1ZBTFVFKSB7CiAKIAkJLyogSWYgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJldHVybiB2YWx1ZSwgZGVsZXRlIGl0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNuYW1lcy5jCmluZGV4IGJkNTc3MzguLjQyYTM5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNuYW1lcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNuYW1lcy5jCkBAIC0xMTUsNyArMTE1LDYgQEAKIAlyZXR1cm4gKEFFX09LKTsKIH0KIAotI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2dldF9leHRlcm5hbF9wYXRobmFtZQpAQCAtMTQyLDcgKzE0MSw3IEBACiAKIAlzaXplID0gYWNwaV9uc19nZXRfcGF0aG5hbWVfbGVuZ3RoKG5vZGUpOwogCWlmICghc2l6ZSkgewotCQlyZXR1cm4gKE5VTEwpOworCQlyZXR1cm5fUFRSKE5VTEwpOwogCX0KIAogCS8qIEFsbG9jYXRlIGEgYnVmZmVyIHRvIGJlIHJldHVybmVkIHRvIGNhbGxlciAqLwpAQCAtMTU3LDEyICsxNTYsMTIgQEAKIAogCXN0YXR1cyA9IGFjcGlfbnNfYnVpbGRfZXh0ZXJuYWxfcGF0aChub2RlLCBzaXplLCBuYW1lX2J1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybiAoTlVMTCk7CisJCUFDUElfRlJFRShuYW1lX2J1ZmZlcik7CisJCXJldHVybl9QVFIoTlVMTCk7CiAJfQogCiAJcmV0dXJuX1BUUihuYW1lX2J1ZmZlcik7CiB9Ci0jZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zcHJlZGVmLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zcHJlZGVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxN2NmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNwcmVkZWYuYwpAQCAtMCwwICsxLDkwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZHVsZSBOYW1lOiBuc3ByZWRlZiAtIFZhbGlkYXRpb24gb2YgQUNQSSBwcmVkZWZpbmVkIG1ldGhvZHMgYW5kIG9iamVjdHMKKyAqICAgICAgICAgICAgICAkUmV2aXNpb246IDEuMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgorI2luY2x1ZGUgPGFjcGkvYWNwcmVkZWYuaD4KKworI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCitBQ1BJX01PRFVMRV9OQU1FKCJuc3ByZWRlZiIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBtb2R1bGUgdmFsaWRhdGVzIHByZWRlZmluZWQgQUNQSSBvYmplY3RzIHRoYXQgYXBwZWFyIGluIHRoZSBuYW1lc3BhY2UsCisgKiBhdCB0aGUgdGltZSB0aGV5IGFyZSBldmFsdWF0ZWQgKHZpYSBhY3BpX2V2YWx1YXRlX29iamVjdCkuIFRoZSBwdXJwb3NlIG9mIHRoaXMKKyAqIHZhbGlkYXRpb24gaXMgdG8gZGV0ZWN0IHByb2JsZW1zIHdpdGggQklPUy1leHBvc2VkIHByZWRlZmluZWQgQUNQSSBvYmplY3RzCisgKiBiZWZvcmUgdGhlIHJlc3VsdHMgYXJlIHJldHVybmVkIHRvIHRoZSBBQ1BJLXJlbGF0ZWQgZHJpdmVycy4KKyAqCisgKiBUaGVyZSBhcmUgc2V2ZXJhbCBhcmVhcyB0aGF0IGFyZSB2YWxpZGF0ZWQ6CisgKgorICogIDEpIFRoZSBudW1iZXIgb2YgaW5wdXQgYXJndW1lbnRzIGFzIGRlZmluZWQgYnkgdGhlIG1ldGhvZC9vYmplY3QgaW4gdGhlCisgKiAgICAgIEFTTCBpcyB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uLgorICogIDIpIFRoZSB0eXBlIG9mIHRoZSByZXR1cm4gb2JqZWN0IChpZiBhbnkpIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBBQ1BJCisgKiAgICAgIHNwZWNpZmljYXRpb24uCisgKiAgMykgRm9yIHJldHVybmVkIHBhY2thZ2Ugb2JqZWN0cywgdGhlIGNvdW50IG9mIHBhY2thZ2UgZWxlbWVudHMgaXMKKyAqICAgICAgdmFsaWRhdGVkLCBhcyB3ZWxsIGFzIHRoZSB0eXBlIG9mIGVhY2ggcGFja2FnZSBlbGVtZW50LiBOZXN0ZWQKKyAqICAgICAgcGFja2FnZXMgYXJlIHN1cHBvcnRlZC4KKyAqCisgKiBGb3IgYW55IHByb2JsZW1zIGZvdW5kLCBhIHdhcm5pbmcgbWVzc2FnZSBpcyBpc3N1ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExvY2FsIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9uc19jaGVja19wYWNrYWdlKGNoYXIgKnBhdGhuYW1lLAorCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fb2JqZWN0LAorCQkgICAgICBjb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqcHJlZGVmaW5lZCk7CisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGNoYXIgKnBhdGhuYW1lLAorCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywKKwkJCSAgICAgICB1OCB0eXBlMSwgdTMyIGNvdW50MSwgdTggdHlwZTIsIHUzMiBjb3VudDIpOworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoY2hhciAqcGF0aG5hbWUsCisJCQkgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QsCisJCQkgIHUzMiBleHBlY3RlZF9idHlwZXMsIHUzMiBwYWNrYWdlX2luZGV4KTsKKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX2NoZWNrX3JlZmVyZW5jZShjaGFyICpwYXRobmFtZSwKKwkJCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QpOworCisvKgorICogTmFtZXMgZm9yIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSB0aGUgcHJlZGVmaW5lZCBvYmplY3RzLgorICogVXNlZCBmb3Igd2FybmluZyBtZXNzYWdlcy4gTXVzdCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgQUNQSV9SVFlQRXMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmFjcGlfcnR5cGVfbmFtZXNbXSA9IHsKKwkiL0ludGVnZXIiLAorCSIvU3RyaW5nIiwKKwkiL0J1ZmZlciIsCisJIi9QYWNrYWdlIiwKKwkiL1JlZmVyZW5jZSIsCit9OworCisjZGVmaW5lIEFDUElfTk9UX1BBQ0tBR0UgICAgQUNQSV9VSU5UMzJfTUFYCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY2hlY2tfcHJlZGVmaW5lZF9uYW1lcworICoKKyAqIFBBUkFNRVRFUlM6ICBOb2RlICAgICAgICAgICAgLSBOYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIG1ldGhvZC9vYmplY3QKKyAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0ICAgLSBPYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgZXZhbHVhdGlvbiBvZiB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kL29iamVjdAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ2hlY2sgYW4gQUNQSSBuYW1lIGZvciBhIG1hdGNoIGluIHRoZSBwcmVkZWZpbmVkIG5hbWUgbGlzdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV9uc19jaGVja19wcmVkZWZpbmVkX25hbWVzKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlLAorCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnByZWRlZmluZWQ7CisJY2hhciAqcGF0aG5hbWU7CisKKwkvKiBNYXRjaCB0aGUgbmFtZSBmb3IgdGhpcyBtZXRob2Qvb2JqZWN0IGFnYWluc3QgdGhlIHByZWRlZmluZWQgbGlzdCAqLworCisJcHJlZGVmaW5lZCA9IGFjcGlfbnNfY2hlY2tfZm9yX3ByZWRlZmluZWRfbmFtZShub2RlKTsKKwlpZiAoIXByZWRlZmluZWQpIHsKKworCQkvKiBOYW1lIHdhcyBub3Qgb25lIG9mIHRoZSBwcmVkZWZpbmVkIG5hbWVzICovCisKKwkJcmV0dXJuIChBRV9PSyk7CisJfQorCisJLyogR2V0IHRoZSBmdWxsIHBhdGhuYW1lIHRvIHRoZSBvYmplY3QsIGZvciB1c2UgaW4gZXJyb3IgbWVzc2FnZXMgKi8KKworCXBhdGhuYW1lID0gYWNwaV9uc19nZXRfZXh0ZXJuYWxfcGF0aG5hbWUobm9kZSk7CisJaWYgKCFwYXRobmFtZSkgeworCQlwYXRobmFtZSA9IEFDUElfQ0FTVF9QVFIoY2hhciwgcHJlZGVmaW5lZC0+aW5mby5uYW1lKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHBhcmFtZXRlciBjb3VudCBmb3IgdGhpcyBtZXRob2QgaXMgaW4gYWNjb3JkYW5jZQorCSAqIHdpdGggdGhlIEFDUEkgc3BlY2lmaWNhdGlvbi4KKwkgKi8KKwlhY3BpX25zX2NoZWNrX3BhcmFtZXRlcl9jb3VudChwYXRobmFtZSwgbm9kZSwgcHJlZGVmaW5lZCk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgY2hlY2sgaWYgd2UgcmVxdWlyZSBhIHJldHVybiB2YWx1ZSBmb3IKKwkgKiB0aGlzIHByZWRlZmluZWQgbmFtZS4gRWl0aGVyIG9uZSByZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQsIG9yIG5vbmUsCisJICogZm9yIGJvdGggbWV0aG9kcyBhbmQgb3RoZXIgb2JqZWN0cy4KKwkgKgorCSAqIEV4aXQgbm93IGlmIHRoZXJlIGlzIG5vIHJldHVybiBvYmplY3QuIFdhcm5pbmcgaWYgb25lIHdhcyBleHBlY3RlZC4KKwkgKi8KKwlpZiAoIXJldHVybl9vYmplY3QpIHsKKwkJaWYgKChwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcykgJiYKKwkJICAgICghKHByZWRlZmluZWQtPmluZm8uZXhwZWN0ZWRfYnR5cGVzICYgQUNQSV9SVFlQRV9OT05FKSkpIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJICAgICIlczogTWlzc2luZyBleHBlY3RlZCByZXR1cm4gdmFsdWUiLAorCQkJCSAgICBwYXRobmFtZSkpOworCisJCQlzdGF0dXMgPSBBRV9BTUxfTk9fUkVUVVJOX1ZBTFVFOworCQl9CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgYSByZXR1cm4gdmFsdWUsIGJ1dCBpZiBvbmUgd2Fzbid0IGV4cGVjdGVkLCBqdXN0IGV4aXQsIHRoaXMgaXMKKwkgKiBub3QgYSBwcm9ibGVtCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgIkltcGxpY2l0IHJldHVybiB2YWx1ZSIgaXMgZW5hYmxlZCwgbWV0aG9kcyB3aWxsCisJICogYWx3YXlzIHJldHVybiBhIHZhbHVlCisJICovCisJaWYgKCFwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcykgeworCQlnb3RvIGV4aXQ7CisJfQorCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gb2JqZWN0IGlzIHdoYXQgaXMgZXhwZWN0ZWQgZm9yCisJICogdGhpcyBwcmVkZWZpbmVkIG5hbWUKKwkgKi8KKwlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCByZXR1cm5fb2JqZWN0LAorCQkJCQkgICBwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcywKKwkJCQkJICAgQUNQSV9OT1RfUEFDS0FHRSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBGb3IgcmV0dXJuZWQgUGFja2FnZSBvYmplY3RzLCBjaGVjayB0aGUgdHlwZSBvZiBhbGwgc3ViLW9iamVjdHMgKi8KKworCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShyZXR1cm5fb2JqZWN0KSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9uc19jaGVja19wYWNrYWdlKHBhdGhuYW1lLCByZXR1cm5fb2JqZWN0LCBwcmVkZWZpbmVkKTsKKwl9CisKKyAgICAgIGV4aXQ6CisJaWYgKHBhdGhuYW1lKSB7CisJCUFDUElfRlJFRShwYXRobmFtZSk7CisJfQorCisJcmV0dXJuIChzdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3BhcmFtZXRlcl9jb3VudAorICoKKyAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBGdWxsIHBhdGhuYW1lIHRvIHRoZSBub2RlIChmb3IgZXJyb3IgbXNncykKKyAqICAgICAgICAgICAgICBOb2RlICAgICAgICAgICAgLSBOYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIG1ldGhvZC9vYmplY3QKKyAqICAgICAgICAgICAgICBQcmVkZWZpbmVkICAgICAgLSBQb2ludGVyIHRvIGVudHJ5IGluIHByZWRlZmluZWQgbmFtZSB0YWJsZQorICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IENoZWNrIHRoYXQgdGhlIGRlY2xhcmVkIChpbiBBU0wvQU1MKSBwYXJhbWV0ZXIgY291bnQgZm9yIGEKKyAqICAgICAgICAgICAgICBwcmVkZWZpbmVkIG5hbWUgaXMgd2hhdCBpcyBleHBlY3RlZCAoaS5lLiwgd2hhdCBpcyBkZWZpbmVkIGluCisgKiAgICAgICAgICAgICAgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBwcmVkZWZpbmVkIG5hbWUuKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK2FjcGlfbnNfY2hlY2tfcGFyYW1ldGVyX2NvdW50KGNoYXIgKnBhdGhuYW1lLAorCQkJICAgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCisJCQkgICAgICBjb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqcHJlZGVmaW5lZCkKK3sKKwl1MzIgcGFyYW1fY291bnQ7CisJdTMyIHJlcXVpcmVkX3BhcmFtc19jdXJyZW50OworCXUzMiByZXF1aXJlZF9wYXJhbXNfb2xkOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBBU0wtZGVmaW5lZCBwYXJhbWV0ZXIgY291bnQgaXMgd2hhdCBpcyBleHBlY3RlZCBmb3IKKwkgKiB0aGlzIHByZWRlZmluZWQgbmFtZS4KKwkgKgorCSAqIE1ldGhvZHMgaGF2ZSAwLTcgcGFyYW1ldGVycy4gQWxsIG90aGVyIHR5cGVzIGhhdmUgemVyby4KKwkgKi8KKwlwYXJhbV9jb3VudCA9IDA7CisJaWYgKG5vZGUtPnR5cGUgPT0gQUNQSV9UWVBFX01FVEhPRCkgeworCQlwYXJhbV9jb3VudCA9IG5vZGUtPm9iamVjdC0+bWV0aG9kLnBhcmFtX2NvdW50OworCX0KKworCS8qIFZhbGlkYXRlIHBhcmFtZXRlciBjb3VudCAtIGFsbG93IHR3byBkaWZmZXJlbnQgbGVnYWwgY291bnRzIChfU0NQKSAqLworCisJcmVxdWlyZWRfcGFyYW1zX2N1cnJlbnQgPSBwcmVkZWZpbmVkLT5pbmZvLnBhcmFtX2NvdW50ICYgMHgwRjsKKwlyZXF1aXJlZF9wYXJhbXNfb2xkID0gcHJlZGVmaW5lZC0+aW5mby5wYXJhbV9jb3VudCA+PiA0OworCisJaWYgKChwYXJhbV9jb3VudCAhPSByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkgJiYKKwkgICAgKHBhcmFtX2NvdW50ICE9IHJlcXVpcmVkX3BhcmFtc19vbGQpKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICIlczogUGFyYW1ldGVyIGNvdW50IG1pc21hdGNoIC0gQVNMIGRlY2xhcmVkICVkLCBleHBlY3RlZCAlZCIsCisJCQkgICAgICBwYXRobmFtZSwgcGFyYW1fY291bnQsIHJlcXVpcmVkX3BhcmFtc19jdXJyZW50KSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX2Zvcl9wcmVkZWZpbmVkX25hbWUKKyAqCisgKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAgIC0gTmFtZXNwYWNlIG5vZGUgZm9yIHRoZSBtZXRob2Qvb2JqZWN0CisgKgorICogUkVUVVJOOiAgICAgIFBvaW50ZXIgdG8gZW50cnkgaW4gcHJlZGVmaW5lZCB0YWJsZS4gTlVMTCBpbmRpY2F0ZXMgbm90IGZvdW5kLgorICoKKyAqIERFU0NSSVBUSU9OOiBDaGVjayBhbiBvYmplY3QgbmFtZSBhZ2FpbnN0IHRoZSBwcmVkZWZpbmVkIG9iamVjdCBsaXN0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvICphY3BpX25zX2NoZWNrX2Zvcl9wcmVkZWZpbmVkX25hbWUoc3RydWN0CisJCQkJCQkJCSAgICBhY3BpX25hbWVzcGFjZV9ub2RlCisJCQkJCQkJCSAgICAqbm9kZSkKK3sKKwljb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqdGhpc19uYW1lOworCisJLyogUXVpY2sgY2hlY2sgZm9yIGEgcHJlZGVmaW5lZCBuYW1lLCBmaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSB1bmRlcnNjb3JlICovCisKKwlpZiAobm9kZS0+bmFtZS5hc2NpaVswXSAhPSAnXycpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKiBTZWFyY2ggaW5mbyB0YWJsZSBmb3IgYSBwcmVkZWZpbmVkIG1ldGhvZC9vYmplY3QgbmFtZSAqLworCisJdGhpc19uYW1lID0gcHJlZGVmaW5lZF9uYW1lczsKKwl3aGlsZSAodGhpc19uYW1lLT5pbmZvLm5hbWVbMF0pIHsKKwkJaWYgKEFDUElfQ09NUEFSRV9OQU1FKG5vZGUtPm5hbWUuYXNjaWksIHRoaXNfbmFtZS0+aW5mby5uYW1lKSkgeworCisJCQkvKiBSZXR1cm4gcG9pbnRlciB0byB0aGlzIHRhYmxlIGVudHJ5ICovCisKKwkJCXJldHVybiAodGhpc19uYW1lKTsKKwkJfQorCisJCS8qCisJCSAqIFNraXAgbmV4dCBlbnRyeSBpbiB0aGUgdGFibGUgaWYgdGhpcyBuYW1lIHJldHVybnMgYSBQYWNrYWdlCisJCSAqIChuZXh0IGVudHJ5IGNvbnRhaW5zIHRoZSBwYWNrYWdlIGluZm8pCisJCSAqLworCQlpZiAodGhpc19uYW1lLT5pbmZvLmV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfUEFDS0FHRSkgeworCQkJdGhpc19uYW1lKys7CisJCX0KKworCQl0aGlzX25hbWUrKzsKKwl9CisKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2UKKyAqCisgKiBQQVJBTUVURVJTOiAgUGF0aG5hbWUgICAgICAgIC0gRnVsbCBwYXRobmFtZSB0byB0aGUgbm9kZSAoZm9yIGVycm9yIG1zZ3MpCisgKiAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgIC0gT2JqZWN0IHJldHVybmVkIGZyb20gdGhlIGV2YWx1YXRpb24gb2YgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBvciBvYmplY3QKKyAqICAgICAgICAgICAgICBQcmVkZWZpbmVkICAgICAgLSBQb2ludGVyIHRvIGVudHJ5IGluIHByZWRlZmluZWQgbmFtZSB0YWJsZQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ2hlY2sgYSByZXR1cm5lZCBwYWNrYWdlIG9iamVjdCBmb3IgdGhlIGNvcnJlY3QgY291bnQgYW5kCisgKiAgICAgICAgICAgICAgY29ycmVjdCB0eXBlIG9mIGFsbCBzdWItb2JqZWN0cy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY2hlY2tfcGFja2FnZShjaGFyICpwYXRobmFtZSwKKwkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX29iamVjdCwKKwkJICAgICAgY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnByZWRlZmluZWQpCit7CisJY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnBhY2thZ2U7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqc3ViX3BhY2thZ2U7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmVsZW1lbnRzOworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipzdWJfZWxlbWVudHM7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXUzMiBleHBlY3RlZF9jb3VudDsKKwl1MzIgY291bnQ7CisJdTMyIGk7CisJdTMyIGo7CisKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfY2hlY2tfcGFja2FnZSk7CisKKwkvKiBUaGUgcGFja2FnZSBpbmZvIGZvciB0aGlzIG5hbWUgaXMgaW4gdGhlIG5leHQgdGFibGUgZW50cnkgKi8KKworCXBhY2thZ2UgPSBwcmVkZWZpbmVkICsgMTsKKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsCisJCQkgICIlcyBWYWxpZGF0aW5nIHJldHVybiBQYWNrYWdlIG9mIFR5cGUgJVgsIENvdW50ICVYXG4iLAorCQkJICBwYXRobmFtZSwgcGFja2FnZS0+cmV0X2luZm8udHlwZSwKKwkJCSAgcmV0dXJuX29iamVjdC0+cGFja2FnZS5jb3VudCkpOworCisJLyogRXh0cmFjdCBwYWNrYWdlIGNvdW50IGFuZCBlbGVtZW50cyBhcnJheSAqLworCisJZWxlbWVudHMgPSByZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzOworCWNvdW50ID0gcmV0dXJuX29iamVjdC0+cGFja2FnZS5jb3VudDsKKworCS8qIFRoZSBwYWNrYWdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCwgZWxzZSBpbnZhbGlkICovCisKKwlpZiAoIWNvdW50KSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICIlczogUmV0dXJuIFBhY2thZ2UgaGFzIG5vIGVsZW1lbnRzIChlbXB0eSkiLAorCQkJICAgICAgcGF0aG5hbWUpKTsKKworCQlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1ZBTFVFKTsKKwl9CisKKwkvKgorCSAqIERlY29kZSB0aGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcGFja2FnZSBjb250ZW50cworCSAqCisJICogUFRZUEUxIHBhY2thZ2VzIGNvbnRhaW4gbm8gc3VicGFja2FnZXMKKwkgKiBQVFlQRTIgcGFja2FnZXMgY29udGFpbiBzdWItcGFja2FnZXMKKwkgKi8KKwlzd2l0Y2ggKHBhY2thZ2UtPnJldF9pbmZvLnR5cGUpIHsKKwljYXNlIEFDUElfUFRZUEUxX0ZJWEVEOgorCisJCS8qCisJCSAqIFRoZSBwYWNrYWdlIGNvdW50IGlzIGZpeGVkIGFuZCB0aGVyZSBhcmUgbm8gc3ViLXBhY2thZ2VzCisJCSAqCisJCSAqIElmIHBhY2thZ2UgaXMgdG9vIHNtYWxsLCBleGl0LgorCQkgKiBJZiBwYWNrYWdlIGlzIGxhcmdlciB0aGFuIGV4cGVjdGVkLCBpc3N1ZSB3YXJuaW5nIGJ1dCBjb250aW51ZQorCQkgKi8KKwkJZXhwZWN0ZWRfY291bnQgPQorCQkgICAgcGFja2FnZS0+cmV0X2luZm8uY291bnQxICsgcGFja2FnZS0+cmV0X2luZm8uY291bnQyOworCQlpZiAoY291bnQgPCBleHBlY3RlZF9jb3VudCkgeworCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKKwkJfSBlbHNlIGlmIChjb3VudCA+IGV4cGVjdGVkX2NvdW50KSB7CisJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCisJCQkJICAgICAgIiVzOiBSZXR1cm4gUGFja2FnZSBpcyBsYXJnZXIgdGhhbiBuZWVkZWQgLSAiCisJCQkJICAgICAgImZvdW5kICV1LCBleHBlY3RlZCAldSIsIHBhdGhuYW1lLCBjb3VudCwKKwkJCQkgICAgICBleHBlY3RlZF9jb3VudCkpOworCQl9CisKKwkJLyogVmFsaWRhdGUgYWxsIGVsZW1lbnRzIG9mIHRoZSByZXR1cm5lZCBwYWNrYWdlICovCisKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKHBhdGhuYW1lLCBlbGVtZW50cywKKwkJCQkJCQlwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQlvYmplY3RfdHlwZTEsCisJCQkJCQkJcGFja2FnZS0+cmV0X2luZm8uCisJCQkJCQkJY291bnQxLAorCQkJCQkJCXBhY2thZ2UtPnJldF9pbmZvLgorCQkJCQkJCW9iamVjdF90eXBlMiwKKwkJCQkJCQlwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQljb3VudDIpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUNQSV9QVFlQRTFfVkFSOgorCisJCS8qCisJCSAqIFRoZSBwYWNrYWdlIGNvdW50IGlzIHZhcmlhYmxlLCB0aGVyZSBhcmUgbm8gc3ViLXBhY2thZ2VzLCBhbmQgYWxsCisJCSAqIGVsZW1lbnRzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZQorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUocGF0aG5hbWUsICplbGVtZW50cywKKwkJCQkJCQkgICBwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQkgICBvYmplY3RfdHlwZTEsIGkpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQkJZWxlbWVudHMrKzsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUNQSV9QVFlQRTFfT1BUSU9OOgorCisJCS8qCisJCSAqIFRoZSBwYWNrYWdlIGNvdW50IGlzIHZhcmlhYmxlLCB0aGVyZSBhcmUgbm8gc3ViLXBhY2thZ2VzLiBUaGVyZSBhcmUKKwkJICogYSBmaXhlZCBudW1iZXIgb2YgcmVxdWlyZWQgZWxlbWVudHMsIGFuZCBhIHZhcmlhYmxlIG51bWJlciBvZgorCQkgKiBvcHRpb25hbCBlbGVtZW50cy4KKwkJICoKKwkJICogQ2hlY2sgaWYgcGFja2FnZSBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbWluaW11bSByZXF1aXJlZAorCQkgKi8KKwkJZXhwZWN0ZWRfY291bnQgPSBwYWNrYWdlLT5yZXRfaW5mbzMuY291bnQ7CisJCWlmIChjb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7CisJCQlnb3RvIHBhY2thZ2VfdG9vX3NtYWxsOworCQl9CisKKwkJLyogVmFyaWFibGUgbnVtYmVyIG9mIHN1Yi1vYmplY3RzICovCisKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWlmIChpIDwgcGFja2FnZS0+cmV0X2luZm8zLmNvdW50KSB7CisKKwkJCQkvKiBUaGVzZSBhcmUgdGhlIHJlcXVpcmVkIHBhY2thZ2UgZWxlbWVudHMgKDAsIDEsIG9yIDIpICovCisKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLAorCQkJCQkJCSAgICAgICplbGVtZW50cywKKwkJCQkJCQkgICAgICBwYWNrYWdlLT4KKwkJCQkJCQkgICAgICByZXRfaW5mbzMuCisJCQkJCQkJICAgICAgb2JqZWN0X3R5cGVbaV0sCisJCQkJCQkJICAgICAgaSk7CisJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFRoZXNlIGFyZSB0aGUgb3B0aW9uYWwgcGFja2FnZSBlbGVtZW50cyAqLworCisJCQkJc3RhdHVzID0KKwkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwKKwkJCQkJCQkgICAgICAqZWxlbWVudHMsCisJCQkJCQkJICAgICAgcGFja2FnZS0+CisJCQkJCQkJICAgICAgcmV0X2luZm8zLgorCQkJCQkJCSAgICAgIHRhaWxfb2JqZWN0X3R5cGUsCisJCQkJCQkJICAgICAgaSk7CisJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCQl9CisJCQl9CisJCQllbGVtZW50cysrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6CisKKwkJLyogRmlyc3QgZWxlbWVudCBpcyB0aGUgKEludGVnZXIpIGNvdW50IG9mIHN1Yi1wYWNrYWdlcyB0byBmb2xsb3cgKi8KKworCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCAqZWxlbWVudHMsCisJCQkJCQkgICBBQ1BJX1JUWVBFX0lOVEVHRVIsIDApOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCisJCS8qCisJCSAqIENvdW50IGNhbm5vdCBiZSBsYXJnZXIgdGhhbiB0aGUgcGFyZW50IHBhY2thZ2UgbGVuZ3RoLCBidXQgYWxsb3cgaXQKKwkJICogdG8gYmUgc21hbGxlci4gVGhlID49IGFjY291bnRzIGZvciB0aGUgSW50ZWdlciBhYm92ZS4KKwkJICovCisJCWV4cGVjdGVkX2NvdW50ID0gKHUzMikgKCplbGVtZW50cyktPmludGVnZXIudmFsdWU7CisJCWlmIChleHBlY3RlZF9jb3VudCA+PSBjb3VudCkgeworCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKKwkJfQorCisJCWNvdW50ID0gZXhwZWN0ZWRfY291bnQ7CisJCWVsZW1lbnRzKys7CisKKwkJLyogTm93IHdlIGNhbiB3YWxrIHRoZSBzdWItcGFja2FnZXMgKi8KKworCQkvKmxpbnQgLWZhbGx0aHJvdWdoICovCisKKwljYXNlIEFDUElfUFRZUEUyOgorCWNhc2UgQUNQSV9QVFlQRTJfRklYRUQ6CisJY2FzZSBBQ1BJX1BUWVBFMl9NSU46CisJY2FzZSBBQ1BJX1BUWVBFMl9DT1VOVDoKKworCQkvKgorCQkgKiBUaGVzZSB0eXBlcyBhbGwgcmV0dXJuIGEgc2luZ2xlIHBhY2thZ2UgdGhhdCBjb25zaXN0cyBvZiBhIHZhcmlhYmxlCisJCSAqIG51bWJlciBvZiBzdWItcGFja2FnZXMKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlzdWJfcGFja2FnZSA9ICplbGVtZW50czsKKwkJCXN1Yl9lbGVtZW50cyA9IHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzOworCisJCQkvKiBFYWNoIHN1Yi1vYmplY3QgbXVzdCBiZSBvZiB0eXBlIFBhY2thZ2UgKi8KKworCQkJc3RhdHVzID0KKwkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCBzdWJfcGFja2FnZSwKKwkJCQkJCSAgICAgIEFDUElfUlRZUEVfUEFDS0FHRSwgaSk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisKKwkJCS8qIEV4YW1pbmUgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBzdWItcGFja2FnZXMgKi8KKworCQkJc3dpdGNoIChwYWNrYWdlLT5yZXRfaW5mby50eXBlKSB7CisJCQljYXNlIEFDUElfUFRZUEUyOgorCQkJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6CisKKwkJCQkvKiBFYWNoIHN1YnBhY2thZ2UgaGFzIGEgZml4ZWQgbnVtYmVyIG9mIGVsZW1lbnRzICovCisKKwkJCQlleHBlY3RlZF9jb3VudCA9CisJCQkJICAgIHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MSArCisJCQkJICAgIHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MjsKKwkJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgIT0KKwkJCQkgICAgZXhwZWN0ZWRfY291bnQpIHsKKwkJCQkJY291bnQgPSBzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudDsKKwkJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKKwkJCQl9CisKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMocGF0aG5hbWUsCisJCQkJCQkJCSAgIHN1Yl9lbGVtZW50cywKKwkJCQkJCQkJICAgcGFja2FnZS0+CisJCQkJCQkJCSAgIHJldF9pbmZvLgorCQkJCQkJCQkgICBvYmplY3RfdHlwZTEsCisJCQkJCQkJCSAgIHBhY2thZ2UtPgorCQkJCQkJCQkgICByZXRfaW5mby4KKwkJCQkJCQkJICAgY291bnQxLAorCQkJCQkJCQkgICBwYWNrYWdlLT4KKwkJCQkJCQkJICAgcmV0X2luZm8uCisJCQkJCQkJCSAgIG9iamVjdF90eXBlMiwKKwkJCQkJCQkJICAgcGFja2FnZS0+CisJCQkJCQkJCSAgIHJldF9pbmZvLgorCQkJCQkJCQkgICBjb3VudDIpOworCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFDUElfUFRZUEUyX0ZJWEVEOgorCisJCQkJLyogRWFjaCBzdWItcGFja2FnZSBoYXMgYSBmaXhlZCBsZW5ndGggKi8KKworCQkJCWV4cGVjdGVkX2NvdW50ID0gcGFja2FnZS0+cmV0X2luZm8yLmNvdW50OworCQkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7CisJCQkJCWNvdW50ID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQ7CisJCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7CisJCQkJfQorCisJCQkJLyogQ2hlY2sgdGhlIHR5cGUgb2YgZWFjaCBzdWItcGFja2FnZSBlbGVtZW50ICovCisKKwkJCQlmb3IgKGogPSAwOyBqIDwgZXhwZWN0ZWRfY291bnQ7IGorKykgeworCQkJCQlzdGF0dXMgPQorCQkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwKKwkJCQkJCQkJICAgICAgc3ViX2VsZW1lbnRzCisJCQkJCQkJCSAgICAgIFtqXSwKKwkJCQkJCQkJICAgICAgcGFja2FnZS0+CisJCQkJCQkJCSAgICAgIHJldF9pbmZvMi4KKwkJCQkJCQkJICAgICAgb2JqZWN0X3R5cGUKKwkJCQkJCQkJICAgICAgW2pdLCBqKTsKKwkJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQUNQSV9QVFlQRTJfTUlOOgorCisJCQkJLyogRWFjaCBzdWItcGFja2FnZSBoYXMgYSB2YXJpYWJsZSBidXQgbWluaW11bSBsZW5ndGggKi8KKworCQkJCWV4cGVjdGVkX2NvdW50ID0gcGFja2FnZS0+cmV0X2luZm8uY291bnQxOworCQkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7CisJCQkJCWNvdW50ID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQ7CisJCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7CisJCQkJfQorCisJCQkJLyogQ2hlY2sgdGhlIHR5cGUgb2YgZWFjaCBzdWItcGFja2FnZSBlbGVtZW50ICovCisKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMocGF0aG5hbWUsCisJCQkJCQkJCSAgIHN1Yl9lbGVtZW50cywKKwkJCQkJCQkJICAgcGFja2FnZS0+CisJCQkJCQkJCSAgIHJldF9pbmZvLgorCQkJCQkJCQkgICBvYmplY3RfdHlwZTEsCisJCQkJCQkJCSAgIHN1Yl9wYWNrYWdlLT4KKwkJCQkJCQkJICAgcGFja2FnZS4KKwkJCQkJCQkJICAgY291bnQsIDAsIDApOworCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFDUElfUFRZUEUyX0NPVU5UOgorCisJCQkJLyogRmlyc3QgZWxlbWVudCBpcyB0aGUgKEludGVnZXIpIGNvdW50IG9mIGVsZW1lbnRzIHRvIGZvbGxvdyAqLworCisJCQkJc3RhdHVzID0KKwkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwKKwkJCQkJCQkgICAgICAqc3ViX2VsZW1lbnRzLAorCQkJCQkJCSAgICAgIEFDUElfUlRZUEVfSU5URUdFUiwKKwkJCQkJCQkgICAgICAwKTsKKwkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJCX0KKworCQkJCS8qIE1ha2Ugc3VyZSBwYWNrYWdlIGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIENvdW50ICovCisKKwkJCQlleHBlY3RlZF9jb3VudCA9CisJCQkJICAgICh1MzIpICgqc3ViX2VsZW1lbnRzKS0+aW50ZWdlci52YWx1ZTsKKwkJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgPCBleHBlY3RlZF9jb3VudCkgeworCQkJCQljb3VudCA9IHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50OworCQkJCQlnb3RvIHBhY2thZ2VfdG9vX3NtYWxsOworCQkJCX0KKworCQkJCS8qIENoZWNrIHRoZSB0eXBlIG9mIGVhY2ggc3ViLXBhY2thZ2UgZWxlbWVudCAqLworCisJCQkJc3RhdHVzID0KKwkJCQkgICAgYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKHBhdGhuYW1lLAorCQkJCQkJCQkgICAoc3ViX2VsZW1lbnRzCisJCQkJCQkJCSAgICArIDEpLAorCQkJCQkJCQkgICBwYWNrYWdlLT4KKwkJCQkJCQkJICAgcmV0X2luZm8uCisJCQkJCQkJCSAgIG9iamVjdF90eXBlMSwKKwkJCQkJCQkJICAgKGV4cGVjdGVkX2NvdW50CisJCQkJCQkJCSAgICAtIDEpLCAwLCAwKTsKKwkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZWxlbWVudHMrKzsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisKKwkJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBpZiBwcmVkZWZpbmVkIGluZm8gdGFibGUgaXMgY29ycmVjdCAqLworCisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICIlczogSW52YWxpZCBpbnRlcm5hbCByZXR1cm4gdHlwZSBpbiB0YWJsZSBlbnRyeTogJVgiLAorCQkJICAgICAgcGF0aG5hbWUsIHBhY2thZ2UtPnJldF9pbmZvLnR5cGUpKTsKKworCQlyZXR1cm4gKEFFX0FNTF9JTlRFUk5BTCk7CisJfQorCisJcmV0dXJuIChBRV9PSyk7CisKKyAgICAgIHBhY2thZ2VfdG9vX3NtYWxsOgorCisJLyogRXJyb3IgZXhpdCBmb3IgdGhlIGNhc2Ugd2l0aCBhbiBpbmNvcnJlY3QgcGFja2FnZSBjb3VudCAqLworCisJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiJXM6IFJldHVybiBQYWNrYWdlIGlzIHRvbyBzbWFsbCAtICIKKwkJICAgICAgImZvdW5kICV1LCBleHBlY3RlZCAldSIsIHBhdGhuYW1lLCBjb3VudCwKKwkJICAgICAgZXhwZWN0ZWRfY291bnQpKTsKKworCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVkFMVUUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMKKyAqCisgKiBQQVJBTUVURVJTOiAgUGF0aG5hbWUgICAgICAgIC0gRnVsbCBwYXRobmFtZSB0byB0aGUgbm9kZSAoZm9yIGVycm9yIG1zZ3MpCisgKiAgICAgICAgICAgICAgRWxlbWVudHMgICAgICAgIC0gUG9pbnRlciB0byB0aGUgcGFja2FnZSBlbGVtZW50cyBhcnJheQorICogICAgICAgICAgICAgIFR5cGUxICAgICAgICAgICAtIE9iamVjdCB0eXBlIGZvciBmaXJzdCBncm91cAorICogICAgICAgICAgICAgIENvdW50MSAgICAgICAgICAtIENvdW50IGZvciBmaXJzdCBncm91cAorICogICAgICAgICAgICAgIFR5cGUyICAgICAgICAgICAtIE9iamVjdCB0eXBlIGZvciBzZWNvbmQgZ3JvdXAKKyAqICAgICAgICAgICAgICBDb3VudDIgICAgICAgICAgLSBDb3VudCBmb3Igc2Vjb25kIGdyb3VwCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBDaGVjayB0aGF0IGFsbCBlbGVtZW50cyBvZiBhIHBhY2thZ2UgYXJlIG9mIHRoZSBjb3JyZWN0IG9iamVjdAorICogICAgICAgICAgICAgIHR5cGUuIFN1cHBvcnRzIHVwIHRvIHR3byBncm91cHMgb2YgZGlmZmVyZW50IG9iamVjdCB0eXBlcy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY2hlY2tfcGFja2FnZV9lbGVtZW50cyhjaGFyICpwYXRobmFtZSwKKwkJCSAgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZWxlbWVudHMsCisJCQkgICAgICAgdTggdHlwZTEsIHUzMiBjb3VudDEsIHU4IHR5cGUyLCB1MzIgY291bnQyKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKip0aGlzX2VsZW1lbnQgPSBlbGVtZW50czsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTMyIGk7CisKKwkvKgorCSAqIFVwIHRvIHR3byBncm91cHMgb2YgcGFja2FnZSBlbGVtZW50cyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhCisJICogc3RydWN0dXJlLiBBbGwgZWxlbWVudHMgaW4gZWFjaCBncm91cCBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuCisJICogVGhlIHNlY29uZCBncm91cCBjYW4gaGF2ZSBhIGNvdW50IG9mIHplcm8uCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50MTsgaSsrKSB7CisJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUocGF0aG5hbWUsICp0aGlzX2VsZW1lbnQsCisJCQkJCQkgICB0eXBlMSwgaSk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CisJCXRoaXNfZWxlbWVudCsrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDI7IGkrKykgeworCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCAqdGhpc19lbGVtZW50LAorCQkJCQkJICAgdHlwZTIsIChpICsgY291bnQxKSk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CisJCXRoaXNfZWxlbWVudCsrOworCX0KKworCXJldHVybiAoQUVfT0spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlCisgKgorICogUEFSQU1FVEVSUzogIFBhdGhuYW1lICAgICAgICAtIEZ1bGwgcGF0aG5hbWUgdG8gdGhlIG5vZGUgKGZvciBlcnJvciBtc2dzKQorICogICAgICAgICAgICAgIHJldHVybl9vYmplY3QgICAtIE9iamVjdCByZXR1cm4gZnJvbSB0aGUgZXhlY3V0aW9uIG9mIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qvb2JqZWN0CisgKiAgICAgICAgICAgICAgZXhwZWN0ZWRfYnR5cGVzIC0gQml0bWFwIG9mIGV4cGVjdGVkIHJldHVybiB0eXBlKHMpCisgKiAgICAgICAgICAgICAgcGFja2FnZV9pbmRleCAgIC0gSW5kZXggb2Ygb2JqZWN0IHdpdGhpbiBwYXJlbnQgcGFja2FnZSAoaWYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIC0gQUNQSV9OT1RfUEFDS0FHRSBvdGhlcndpc2UpCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBDaGVjayB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIG9iamVjdCBhZ2FpbnN0IHRoZSBleHBlY3RlZCBvYmplY3QKKyAqICAgICAgICAgICAgICB0eXBlKHMpLiBVc2Ugb2YgQnR5cGUgYWxsb3dzIG11bHRpcGxlIGV4cGVjdGVkIG9iamVjdCB0eXBlcy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoY2hhciAqcGF0aG5hbWUsCisJCQkgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QsCisJCQkgIHUzMiBleHBlY3RlZF9idHlwZXMsIHUzMiBwYWNrYWdlX2luZGV4KQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCXUzMiByZXR1cm5fYnR5cGU7CisJY2hhciB0eXBlX2J1ZmZlcls0OF07CS8qIFJvb20gZm9yIDUgdHlwZXMgKi8KKwl1MzIgdGhpc19ydHlwZTsKKwl1MzIgaTsKKwl1MzIgajsKKworCS8qCisJICogSWYgd2UgZ2V0IGEgTlVMTCByZXR1cm5fb2JqZWN0IGhlcmUsIGl0IGlzIGEgTlVMTCBwYWNrYWdlIGVsZW1lbnQsCisJICogYW5kIHRoaXMgaXMgYWx3YXlzIGFuIGVycm9yLgorCSAqLworCWlmICghcmV0dXJuX29iamVjdCkgeworCQlnb3RvIHR5cGVfZXJyb3JfZXhpdDsKKwl9CisKKwkvKiBBIE5hbWVzcGFjZSBub2RlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBtYWtlIHN1cmUgKi8KKworCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUocmV0dXJuX29iamVjdCkgPT0gQUNQSV9ERVNDX1RZUEVfTkFNRUQpIHsKKwkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJICAgICAgIiVzOiBJbnZhbGlkIHJldHVybiB0eXBlIC0gRm91bmQgYSBOYW1lc3BhY2Ugbm9kZSBbJTQuNHNdIHR5cGUgJXMiLAorCQkJICAgICAgcGF0aG5hbWUsIHJldHVybl9vYmplY3QtPm5vZGUubmFtZS5hc2NpaSwKKwkJCSAgICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShyZXR1cm5fb2JqZWN0LT5ub2RlLnR5cGUpKSk7CisJCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVFlQRSk7CisJfQorCisJLyoKKwkgKiBDb252ZXJ0IHRoZSBvYmplY3QgdHlwZSAoQUNQSV9UWVBFX3h4eCkgdG8gYSBiaXRtYXBwZWQgb2JqZWN0IHR5cGUuCisJICogVGhlIGJpdG1hcHBlZCB0eXBlIGFsbG93cyBtdWx0aXBsZSBwb3NzaWJsZSByZXR1cm4gdHlwZXMuCisJICoKKwkgKiBOb3RlLCB0aGUgY2FzZXMgYmVsb3cgbXVzdCBoYW5kbGUgYWxsIG9mIHRoZSBwb3NzaWJsZSB0eXBlcyByZXR1cm5lZAorCSAqIGZyb20gYWxsIG9mIHRoZSBwcmVkZWZpbmVkIG5hbWVzIChpbmNsdWRpbmcgZWxlbWVudHMgb2YgcmV0dXJuZWQKKwkgKiBwYWNrYWdlcykKKwkgKi8KKwlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKHJldHVybl9vYmplY3QpKSB7CisJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKKwkJcmV0dXJuX2J0eXBlID0gQUNQSV9SVFlQRV9JTlRFR0VSOworCQlicmVhazsKKworCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKKwkJcmV0dXJuX2J0eXBlID0gQUNQSV9SVFlQRV9CVUZGRVI7CisJCWJyZWFrOworCisJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgorCQlyZXR1cm5fYnR5cGUgPSBBQ1BJX1JUWVBFX1NUUklORzsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfVFlQRV9QQUNLQUdFOgorCQlyZXR1cm5fYnR5cGUgPSBBQ1BJX1JUWVBFX1BBQ0tBR0U7CisJCWJyZWFrOworCisJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgorCQlyZXR1cm5fYnR5cGUgPSBBQ1BJX1JUWVBFX1JFRkVSRU5DRTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBOb3Qgb25lIG9mIHRoZSBzdXBwb3J0ZWQgb2JqZWN0cywgbXVzdCBiZSBpbmNvcnJlY3QgKi8KKworCQlnb3RvIHR5cGVfZXJyb3JfZXhpdDsKKwl9CisKKwkvKiBJcyB0aGUgb2JqZWN0IG9uZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZXM/ICovCisKKwlpZiAoIShyZXR1cm5fYnR5cGUgJiBleHBlY3RlZF9idHlwZXMpKSB7CisJCWdvdG8gdHlwZV9lcnJvcl9leGl0OworCX0KKworCS8qIEZvciByZWZlcmVuY2Ugb2JqZWN0cywgY2hlY2sgdGhhdCB0aGUgcmVmZXJlbmNlIHR5cGUgaXMgY29ycmVjdCAqLworCisJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHJldHVybl9vYmplY3QpID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19yZWZlcmVuY2UocGF0aG5hbWUsIHJldHVybl9vYmplY3QpOworCX0KKworCXJldHVybiAoc3RhdHVzKTsKKworICAgICAgdHlwZV9lcnJvcl9leGl0OgorCisJLyogQ3JlYXRlIGEgc3RyaW5nIHdpdGggYWxsIGV4cGVjdGVkIHR5cGVzIGZvciB0aGlzIHByZWRlZmluZWQgb2JqZWN0ICovCisKKwlqID0gMTsKKwl0eXBlX2J1ZmZlclswXSA9IDA7CisJdGhpc19ydHlwZSA9IEFDUElfUlRZUEVfSU5URUdFUjsKKworCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9SVFlQRVM7IGkrKykgeworCisJCS8qIElmIG9uZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZXMsIGNvbmNhdGVuYXRlIHRoZSBuYW1lIG9mIHRoaXMgdHlwZSAqLworCisJCWlmIChleHBlY3RlZF9idHlwZXMgJiB0aGlzX3J0eXBlKSB7CisJCQlBQ1BJX1NUUkNBVCh0eXBlX2J1ZmZlciwgJmFjcGlfcnR5cGVfbmFtZXNbaV1bal0pOworCQkJaiA9IDA7CS8qIFVzZSBuYW1lIHNlcGFyYXRvciBmcm9tIG5vdyBvbiAqLworCQl9CisJCXRoaXNfcnR5cGUgPDw9IDE7CS8qIE5leHQgUnR5cGUgKi8KKwl9CisKKwlpZiAocGFja2FnZV9pbmRleCA9PSBBQ1BJX05PVF9QQUNLQUdFKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICIlczogUmV0dXJuIHR5cGUgbWlzbWF0Y2ggLSBmb3VuZCAlcywgZXhwZWN0ZWQgJXMiLAorCQkJICAgICAgcGF0aG5hbWUsCisJCQkgICAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHJldHVybl9vYmplY3QpLAorCQkJICAgICAgdHlwZV9idWZmZXIpKTsKKwl9IGVsc2UgeworCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCisJCQkgICAgICAiJXM6IFJldHVybiBQYWNrYWdlIHR5cGUgbWlzbWF0Y2ggYXQgaW5kZXggJXUgLSAiCisJCQkgICAgICAiZm91bmQgJXMsIGV4cGVjdGVkICVzIiwgcGF0aG5hbWUsIHBhY2thZ2VfaW5kZXgsCisJCQkgICAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHJldHVybl9vYmplY3QpLAorCQkJICAgICAgdHlwZV9idWZmZXIpKTsKKwl9CisKKwlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3JlZmVyZW5jZQorICoKKyAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBGdWxsIHBhdGhuYW1lIHRvIHRoZSBub2RlIChmb3IgZXJyb3IgbXNncykKKyAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0ICAgLSBPYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgZXZhbHVhdGlvbiBvZiBhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG9yIG9iamVjdAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ2hlY2sgYSByZXR1cm5lZCByZWZlcmVuY2Ugb2JqZWN0IGZvciB0aGUgY29ycmVjdCByZWZlcmVuY2UKKyAqICAgICAgICAgICAgICB0eXBlLiBUaGUgb25seSByZWZlcmVuY2UgdHlwZSB0aGF0IGNhbiBiZSByZXR1cm5lZCBmcm9tIGEKKyAqICAgICAgICAgICAgICBwcmVkZWZpbmVkIG1ldGhvZCBpcyBhIG5hbWVkIHJlZmVyZW5jZS4gQWxsIG90aGVycyBhcmUgaW52YWxpZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGNoYXIgKnBhdGhuYW1lLAorCQkJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX29iamVjdCkKK3sKKworCS8qCisJICogQ2hlY2sgdGhlIHJlZmVyZW5jZSBvYmplY3QgZm9yIHRoZSBjb3JyZWN0IHJlZmVyZW5jZSB0eXBlIChvcGNvZGUpLgorCSAqIFRoZSBvbmx5IHR5cGUgb2YgcmVmZXJlbmNlIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBhbiB1bmlvbiBhY3BpX29iamVjdCBpcworCSAqIGEgcmVmZXJlbmNlIHRvIGEgbmFtZWQgb2JqZWN0IChyZWZlcmVuY2UgY2xhc3M6IE5BTUUpCisJICovCisJaWYgKHJldHVybl9vYmplY3QtPnJlZmVyZW5jZS5jbGFzcyA9PSBBQ1BJX1JFRkNMQVNTX05BTUUpIHsKKwkJcmV0dXJuIChBRV9PSyk7CisJfQorCisJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkgICAgICAiJXM6IFJldHVybiB0eXBlIG1pc21hdGNoIC0gdW5leHBlY3RlZCByZWZlcmVuY2Ugb2JqZWN0IHR5cGUgWyVzXSAlMi4yWCIsCisJCSAgICAgIHBhdGhuYW1lLCBhY3BpX3V0X2dldF9yZWZlcmVuY2VfbmFtZShyZXR1cm5fb2JqZWN0KSwKKwkJICAgICAgcmV0dXJuX29iamVjdC0+cmVmZXJlbmNlLmNsYXNzKSk7CisKKwlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3NlYXJjaC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3NlYXJjaC5jCmluZGV4IDgzOTkyNzYuLmE5YTgwYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNzZWFyY2guYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zc2VhcmNoLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCQkJCSAgICAgICJGb3VuZCBiYWQgY2hhcmFjdGVyKHMpIGluIG5hbWUsIHJlcGFpcmVkOiBbJTQuNHNdXG4iLAogCQkJCSAgICAgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnRhcmdldF9uYW1lKSkpOwogCQl9IGVsc2UgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAorCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCQkgICJGb3VuZCBiYWQgY2hhcmFjdGVyKHMpIGluIG5hbWUsIHJlcGFpcmVkOiBbJTQuNHNdXG4iLAogCQkJCQkgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnRhcmdldF9uYW1lKSkpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZldmFsLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZldmFsLmMKaW5kZXggMzhiZTU4Ni4uYTA4NWNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4ZmV2YWwuYwpAQCAtNDgsNiArNDgsMTAgQEAKIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCiBBQ1BJX01PRFVMRV9OQU1FKCJuc3hmZXZhbCIpCisKKy8qIExvY2FsIHByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGFjcGlfbnNfcmVzb2x2ZV9yZWZlcmVuY2VzKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pOworCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNjksNiArNzMsNyBAQAogICogICAgICAgICAgICAgIGJlIHZhbGlkIChub24tbnVsbCkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBhY3BpX3N0YXR1cwogYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoYWNwaV9oYW5kbGUgaGFuZGxlLAogCQkJICAgYWNwaV9zdHJpbmcgcGF0aG5hbWUsCkBAIC0yODMsNiArMjg4LDEwIEBACiAKIAkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCisJCQkJLyogRGVyZWZlcmVuY2UgSW5kZXggYW5kIHJlZl9vZiByZWZlcmVuY2VzICovCisKKwkJCQlhY3BpX25zX3Jlc29sdmVfcmVmZXJlbmNlcyhpbmZvKTsKKwogCQkJCS8qIEdldCB0aGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0ICovCiAKIAkJCQlzdGF0dXMgPQpAQCAtMzUyLDYgKzM2MSw3NCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX3Jlc29sdmVfcmVmZXJlbmNlcworICoKKyAqIFBBUkFNRVRFUlM6ICBJbmZvICAgICAgICAgICAgICAgICAgICAtIEV2YWx1YXRpb24gaW5mbyBibG9jaworICoKKyAqIFJFVFVSTjogICAgICBJbmZvLT5yZXR1cm5fb2JqZWN0IGlzIHJlcGxhY2VkIHdpdGggdGhlIGRlcmVmZXJlbmNlZCBvYmplY3QKKyAqCisgKiBERVNDUklQVElPTjogRGVyZWZlcmVuY2UgY2VydGFpbiByZWZlcmVuY2Ugb2JqZWN0cy4gQ2FsbGVkIGJlZm9yZSBhbgorICogICAgICAgICAgICAgIGludGVybmFsIHJldHVybiBvYmplY3QgaXMgY29udmVydGVkIHRvIGFuIGV4dGVybmFsIHVuaW9uIGFjcGlfb2JqZWN0LgorICoKKyAqIFBlcmZvcm1zIGFuIGF1dG9tYXRpYyBkZXJlZmVyZW5jZSBvZiBJbmRleCBhbmQgcmVmX29mIHJlZmVyZW5jZSBvYmplY3RzLgorICogVGhlc2UgcmVmZXJlbmNlIG9iamVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuaW9uIGFjcGlfb2JqZWN0LCBzbyB0aGlzIGlzIGEKKyAqIGxhc3QgcmVzb3J0IGVmZm9ydCB0byByZXR1cm4gc29tZXRoaW5nIHVzZWZ1bC4gQWxzbywgcHJvdmlkZXMgY29tcGF0aWJpbGl0eQorICogd2l0aCBvdGhlciBBQ1BJIGltcGxlbWVudGF0aW9ucy4KKyAqCisgKiBOT1RFOiBkb2VzIG5vdCBoYW5kbGUgcmVmZXJlbmNlcyB3aXRoaW4gcmV0dXJuZWQgcGFja2FnZSBvYmplY3RzIG9yIG5lc3RlZAorICogcmVmZXJlbmNlcywgYnV0IHRoaXMgc3VwcG9ydCBjb3VsZCBiZSBhZGRlZCBsYXRlciBpZiBmb3VuZCB0byBiZSBuZWNlc3NhcnkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFjcGlfbnNfcmVzb2x2ZV9yZWZlcmVuY2VzKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MgPSBOVUxMOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOworCisJLyogV2UgYXJlIGludGVyZXN0ZWQgaW4gcmVmZXJlbmNlIG9iamVjdHMgb25seSAqLworCisJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpICE9CisJICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogVHdvIHR5cGVzIG9mIHJlZmVyZW5jZXMgYXJlIHN1cHBvcnRlZCAtIHRob3NlIGNyZWF0ZWQgYnkgSW5kZXggYW5kCisJICogcmVmX29mIG9wZXJhdG9ycy4gQSBuYW1lIHJlZmVyZW5jZSAoQU1MX05BTUVQQVRIX09QKSBjYW4gYmUgY29udmVydGVkCisJICogdG8gYW4gdW5pb24gYWNwaV9vYmplY3QsIHNvIGl0IGlzIG5vdCBkZXJlZmVyZW5jZWQgaGVyZS4gQSBkZGJfaGFuZGxlCisJICogKEFNTF9MT0FEX09QKSBjYW5ub3QgYmUgZGVyZWZlcmVuY2VkLCBub3IgY2FuIGl0IGJlIGNvbnZlcnRlZCB0bworCSAqIGFuIHVuaW9uIGFjcGlfb2JqZWN0LgorCSAqLworCXN3aXRjaCAoaW5mby0+cmV0dXJuX29iamVjdC0+cmVmZXJlbmNlLmNsYXNzKSB7CisJY2FzZSBBQ1BJX1JFRkNMQVNTX0lOREVYOgorCisJCW9ial9kZXNjID0gKihpbmZvLT5yZXR1cm5fb2JqZWN0LT5yZWZlcmVuY2Uud2hlcmUpOworCQlicmVhazsKKworCWNhc2UgQUNQSV9SRUZDTEFTU19SRUZPRjoKKworCQlub2RlID0gaW5mby0+cmV0dXJuX29iamVjdC0+cmVmZXJlbmNlLm9iamVjdDsKKwkJaWYgKG5vZGUpIHsKKwkJCW9ial9kZXNjID0gbm9kZS0+b2JqZWN0OworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCS8qIFJlcGxhY2UgdGhlIGV4aXN0aW5nIHJlZmVyZW5jZSBvYmplY3QgKi8KKworCWlmIChvYmpfZGVzYykgeworCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqX2Rlc2MpOworCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UoaW5mby0+cmV0dXJuX29iamVjdCk7CisJCWluZm8tPnJldHVybl9vYmplY3QgPSBvYmpfZGVzYzsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfd2Fsa19uYW1lc3BhY2UKICAqCiAgKiBQQVJBTUVURVJTOiAgVHlwZSAgICAgICAgICAgICAgICAtIGFjcGlfb2JqZWN0X3R5cGUgdG8gc2VhcmNoIGZvcgpAQCAtMzc5LDYgKzQ1Niw3IEBACiAgKiAgICAgICAgICAgICAgZnVuY3Rpb24sIGV0Yy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBhY3BpX3N0YXR1cwogYWNwaV93YWxrX25hbWVzcGFjZShhY3BpX29iamVjdF90eXBlIHR5cGUsCiAJCSAgICBhY3BpX2hhbmRsZSBzdGFydF9vYmplY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZuYW1lLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZuYW1lLmMKaW5kZXggYTI4N2VkNS4uNWVmYTRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmbmFtZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm5hbWUuYwpAQCAtMjUzLDYgKzI1Myw3IEBACiAJbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGhhbmRsZSk7CiAJaWYgKCFub2RlKSB7CiAJCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCkBAIC0yNjQsNiArMjY1LDEwIEBACiAJaW5mby0+bmFtZSA9IG5vZGUtPm5hbWUuaW50ZWdlcjsKIAlpbmZvLT52YWxpZCA9IDA7CiAKKwlpZiAobm9kZS0+dHlwZSA9PSBBQ1BJX1RZUEVfTUVUSE9EKSB7CisJCWluZm8tPnBhcmFtX2NvdW50ID0gbm9kZS0+b2JqZWN0LT5tZXRob2QucGFyYW1fY291bnQ7CisJfQorCiAJc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWdvdG8gY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hLmMgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCmluZGV4IGNiOTg2NGUuLjI1Y2VhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9udW1hLmMKKysrIGIvZHJpdmVycy9hY3BpL251bWEuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIGludCBhY3BpX2dldF9weG0oYWNwaV9oYW5kbGUgaCkKIHsKLQl1bnNpZ25lZCBsb25nIHB4bTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHhtOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CiAJYWNwaV9oYW5kbGUgcGhhbmRsZSA9IGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggMjM1YTEzOC4uNGJlMjUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtNjA4LDcgKzYwOCw3IEBACiAJYWNwaV9oYW5kbGUgaGFuZGxlOwogCXN0cnVjdCBhY3BpX3BjaV9pZCAqcGNpX2lkID0gKmlkOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHRlbXA7CisJdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7CiAJYWNwaV9vYmplY3RfdHlwZSB0eXBlOwogCiAJYWNwaV9nZXRfcGFyZW50KGNoYW5kbGUsICZoYW5kbGUpOwpAQCAtNjIwLDggKzYyMCw3IEBACiAJCWlmICgoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHx8ICh0eXBlICE9IEFDUElfVFlQRV9ERVZJQ0UpKQogCQkJcmV0dXJuOwogCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLAorCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLAogCQkJCQkgICZ0ZW1wKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCQl1MzIgdmFsOwpAQCAtNjgyLDYgKzY4MSwyMiBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIHZvaWQgYWNwaV9vc19leGVjdXRlX2hwX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWNwaV9vc19kcGMsIHdvcmspOworCWlmICghZHBjKSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgKE5VTEwpIGNvbnRleHRcbiIpOworCQlyZXR1cm47CisJfQorCisJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKKworCWRwYy0+ZnVuY3Rpb24oZHBjLT5jb250ZXh0KTsKKwlrZnJlZShkcGMpOworCisJcmV0dXJuOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX29zX2V4ZWN1dGUKQEAgLTY5NywxMiArNzEyLDEzIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMgYWNwaV9vc19leGVjdXRlKGFjcGlfZXhlY3V0ZV90eXBlIHR5cGUsCi0JCQkgICAgYWNwaV9vc2RfZXhlY19jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqY29udGV4dCkKK3N0YXRpYyBhY3BpX3N0YXR1cyBfX2FjcGlfb3NfZXhlY3V0ZShhY3BpX2V4ZWN1dGVfdHlwZSB0eXBlLAorCWFjcGlfb3NkX2V4ZWNfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQsIGludCBocCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYzsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcXVldWU7CisJaW50IHJldDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCiAJCQkgICJTY2hlZHVsaW5nIGZ1bmN0aW9uIFslcCglcCldIGZvciBkZWZlcnJlZCBleGVjdXRpb24uXG4iLAogCQkJICBmdW5jdGlvbiwgY29udGV4dCkpOwpAQCAtNzI2LDE5ICs3NDIsMzggQEAKIAlkcGMtPmZ1bmN0aW9uID0gZnVuY3Rpb247CiAJZHBjLT5jb250ZXh0ID0gY29udGV4dDsKIAotCUlOSVRfV09SSygmZHBjLT53b3JrLCBhY3BpX29zX2V4ZWN1dGVfZGVmZXJyZWQpOwotCXF1ZXVlID0gKHR5cGUgPT0gT1NMX05PVElGWV9IQU5ETEVSKSA/IGthY3BpX25vdGlmeV93cSA6IGthY3BpZF93cTsKLQlpZiAoIXF1ZXVlX3dvcmsocXVldWUsICZkcGMtPndvcmspKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkgICJDYWxsIHRvIHF1ZXVlX3dvcmsoKSBmYWlsZWQuXG4iKSk7CisJaWYgKCFocCkgeworCQlJTklUX1dPUksoJmRwYy0+d29yaywgYWNwaV9vc19leGVjdXRlX2RlZmVycmVkKTsKKwkJcXVldWUgPSAodHlwZSA9PSBPU0xfTk9USUZZX0hBTkRMRVIpID8KKwkJCWthY3BpX25vdGlmeV93cSA6IGthY3BpZF93cTsKKwkJcmV0ID0gcXVldWVfd29yayhxdWV1ZSwgJmRwYy0+d29yayk7CisJfSBlbHNlIHsKKwkJSU5JVF9XT1JLKCZkcGMtPndvcmssIGFjcGlfb3NfZXhlY3V0ZV9ocF9kZWZlcnJlZCk7CisJCXJldCA9IHNjaGVkdWxlX3dvcmsoJmRwYy0+d29yayk7CisJfQorCisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAorCQkJICAiQ2FsbCB0byBxdWV1ZV93b3JrKCkgZmFpbGVkLlxuIik7CiAJCXN0YXR1cyA9IEFFX0VSUk9SOwogCQlrZnJlZShkcGMpOwogCX0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorYWNwaV9zdGF0dXMgYWNwaV9vc19leGVjdXRlKGFjcGlfZXhlY3V0ZV90eXBlIHR5cGUsCisJCQkgICAgYWNwaV9vc2RfZXhlY19jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqY29udGV4dCkKK3sKKwlyZXR1cm4gX19hY3BpX29zX2V4ZWN1dGUodHlwZSwgZnVuY3Rpb24sIGNvbnRleHQsIDApOworfQogRVhQT1JUX1NZTUJPTChhY3BpX29zX2V4ZWN1dGUpOwogCithY3BpX3N0YXR1cyBhY3BpX29zX2hvdHBsdWdfZXhlY3V0ZShhY3BpX29zZF9leGVjX2NhbGxiYWNrIGZ1bmN0aW9uLAorCXZvaWQgKmNvbnRleHQpCit7CisJcmV0dXJuIF9fYWNwaV9vc19leGVjdXRlKDAsIGZ1bmN0aW9uLCBjb250ZXh0LCAxKTsKK30KKwogdm9pZCBhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQpCiB7CiAJZmx1c2hfd29ya3F1ZXVlKGthY3BpZF93cSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzbG9vcC5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc2xvb3AuYwppbmRleCBjMDYyMzhlLi40NjQ3MDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzbG9vcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNsb29wLmMKQEAgLTcxOSw2ICs3MTksOCBAQAogCQkqb3AgPSBOVUxMOwogCX0KIAorCUFDUElfUFJFRU1QVElPTl9QT0lOVCgpOworCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3BhcnNlLmMgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzcGFyc2UuYwppbmRleCAxNWUxNzAyLi42OGU5MzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzcGFyc2UuYworKysgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzcGFyc2UuYwpAQCAtMTM3LDYgKzEzNyw3IEBACiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm5leHQ7CiAJY29uc3Qgc3RydWN0IGFjcGlfb3Bjb2RlX2luZm8gKnBhcmVudF9pbmZvOwogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpyZXBsYWNlbWVudF9vcCA9IE5VTEw7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihwc19jb21wbGV0ZV90aGlzX29wLCBvcCk7CiAKQEAgLTE4Niw3ICsxODcsNyBAQAogCQkJcmVwbGFjZW1lbnRfb3AgPQogCQkJICAgIGFjcGlfcHNfYWxsb2Nfb3AoQU1MX0lOVF9SRVRVUk5fVkFMVUVfT1ApOwogCQkJaWYgKCFyZXBsYWNlbWVudF9vcCkgewotCQkJCWdvdG8gYWxsb2NhdGVfZXJyb3I7CisJCQkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwogCQkJfQogCQkJYnJlYWs7CiAKQEAgLTIxMSw3ICsyMTIsNyBAQAogCQkJCXJlcGxhY2VtZW50X29wID0KIAkJCQkgICAgYWNwaV9wc19hbGxvY19vcChBTUxfSU5UX1JFVFVSTl9WQUxVRV9PUCk7CiAJCQkJaWYgKCFyZXBsYWNlbWVudF9vcCkgewotCQkJCQlnb3RvIGFsbG9jYXRlX2Vycm9yOworCQkJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCQkJfQogCQkJfSBlbHNlCiAJCQkgICAgaWYgKChvcC0+Y29tbW9uLnBhcmVudC0+Y29tbW9uLmFtbF9vcGNvZGUgPT0KQEAgLTIyNiwxMyArMjI3LDEzIEBACiAJCQkJCSAgICBhY3BpX3BzX2FsbG9jX29wKG9wLT5jb21tb24uCiAJCQkJCQkJICAgICBhbWxfb3Bjb2RlKTsKIAkJCQkJaWYgKCFyZXBsYWNlbWVudF9vcCkgewotCQkJCQkJZ290byBhbGxvY2F0ZV9lcnJvcjsKKwkJCQkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlcGxhY2VtZW50X29wLT5uYW1lZC5kYXRhID0KKwkJCQkJCSAgICBvcC0+bmFtZWQuZGF0YTsKKwkJCQkJCXJlcGxhY2VtZW50X29wLT5uYW1lZC5sZW5ndGggPQorCQkJCQkJICAgIG9wLT5uYW1lZC5sZW5ndGg7CiAJCQkJCX0KLQotCQkJCQlyZXBsYWNlbWVudF9vcC0+bmFtZWQuZGF0YSA9Ci0JCQkJCSAgICBvcC0+bmFtZWQuZGF0YTsKLQkJCQkJcmVwbGFjZW1lbnRfb3AtPm5hbWVkLmxlbmd0aCA9Ci0JCQkJCSAgICBvcC0+bmFtZWQubGVuZ3RoOwogCQkJCX0KIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjQyLDcgKzI0Myw3IEBACiAJCQlyZXBsYWNlbWVudF9vcCA9CiAJCQkgICAgYWNwaV9wc19hbGxvY19vcChBTUxfSU5UX1JFVFVSTl9WQUxVRV9PUCk7CiAJCQlpZiAoIXJlcGxhY2VtZW50X29wKSB7Ci0JCQkJZ290byBhbGxvY2F0ZV9lcnJvcjsKKwkJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCQl9CiAJCX0KIApAQCAtMzAyLDE0ICszMDMsNyBAQAogCS8qIE5vdyB3ZSBjYW4gYWN0dWFsbHkgZGVsZXRlIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCBPcCAqLwogCiAJYWNwaV9wc19kZWxldGVfcGFyc2VfdHJlZShvcCk7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQotICAgICAgYWxsb2NhdGVfZXJyb3I6Ci0KLQkvKiBBbHdheXMgZGVsZXRlIHRoZSBzdWJ0cmVlLCBldmVuIG9uIGVycm9yICovCi0KLQlhY3BpX3BzX2RlbGV0ZV9wYXJzZV90cmVlKG9wKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTY0MSwxMCArNjM1LDEyIEBACiAJCQkJCSAgICBBQ1BJX1dBTEtfTUVUSE9EX1JFU1RBUlQ7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQkvKiBPbiBlcnJvciwgZGVsZXRlIGFueSByZXR1cm4gb2JqZWN0ICovCisJCQkJLyogT24gZXJyb3IsIGRlbGV0ZSBhbnkgcmV0dXJuIG9iamVjdCBvciBpbXBsaWNpdCByZXR1cm4gKi8KIAogCQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShwcmV2aW91c193YWxrX3N0YXRlLT4KIAkJCQkJCQkgcmV0dXJuX2Rlc2MpOworCQkJCWFjcGlfZHNfY2xlYXJfaW1wbGljaXRfcmV0dXJuCisJCQkJICAgIChwcmV2aW91c193YWxrX3N0YXRlKTsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYyBiL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jCmluZGV4IGNmNDc4MDUuLmZjZmRlZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jCkBAIC03MDksNyArNzA5LDcgQEAKIAkJCSAgYWNwaV9kZXZpY2VfYmlkKGxpbmstPmRldmljZSkpKTsKIAogCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkgewotCQlhY3BpX3V0X2V2YWx1YXRlX29iamVjdChsaW5rLT5kZXZpY2UtPmhhbmRsZSwgIl9ESVMiLCAwLCBOVUxMKTsKKwkJYWNwaV9ldmFsdWF0ZV9vYmplY3QobGluay0+ZGV2aWNlLT5oYW5kbGUsICJfRElTIiwgTlVMTCwgTlVMTCk7CiAJfQogCW11dGV4X3VubG9jaygmYWNwaV9saW5rX2xvY2spOwogCXJldHVybiAobGluay0+aXJxLmFjdGl2ZSk7CkBAIC03MzcsNyArNzM3LDcgQEAKIAlsaW5rLT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9QQ0lfTElOS19ERVZJQ0VfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfUENJX0xJTktfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGxpbms7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGxpbms7CiAKIAltdXRleF9sb2NrKCZhY3BpX2xpbmtfbG9jayk7CiAJcmVzdWx0ID0gYWNwaV9wY2lfbGlua19nZXRfcG9zc2libGUobGluayk7CkBAIC03NzMsNyArNzczLDcgQEAKIAogICAgICAgZW5kOgogCS8qIGRpc2FibGUgYWxsIGxpbmtzIC0tIHRvIGJlIGFjdGl2YXRlZCBvbiB1c2UgKi8KLQlhY3BpX3V0X2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIl9ESVMiLCAwLCBOVUxMKTsKKwlhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIl9ESVMiLCBOVUxMLCBOVUxMKTsKIAltdXRleF91bmxvY2soJmFjcGlfbGlua19sb2NrKTsKIAogCWlmIChyZXN1bHQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCmluZGV4IGMzZmVkMzEuLjFiOGY2N2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QgPSBOVUxMOwogCXN0cnVjdCBhY3BpX3BjaV9yb290ICp0bXA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlID0gMDsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBOVUxMOwogCXN0cnVjdCBhY3BpX2RldmljZSAqY2hpbGQ7CiAKQEAgLTIwNiw3ICsyMDYsNyBAQAogCXJvb3QtPmRldmljZSA9IGRldmljZTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1BDSV9ST09UX0RFVklDRV9OQU1FKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9QQ0lfUk9PVF9DTEFTUyk7Ci0JYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gcm9vdDsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gcm9vdDsKIAogCWRldmljZS0+b3BzLmJpbmQgPSBhY3BpX3BjaV9iaW5kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Nsb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfc2xvdC5jCmluZGV4IGQ1YjRlZjguLmNkMWY0NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfc2xvdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfc2xvdC5jCkBAIC03NiwxMCArNzYsMTAgQEAKIH07CiAKIHN0YXRpYyBpbnQKLWNoZWNrX3Nsb3QoYWNwaV9oYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBsb25nICpzdW4pCitjaGVja19zbG90KGFjcGlfaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsb25nICpzdW4pCiB7CiAJaW50IGRldmljZSA9IC0xOwotCXVuc2lnbmVkIGxvbmcgYWRyLCBzdGE7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkciwgc3RhOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCkBAIC0xMzIsNyArMTMyLDcgQEAKIHJlZ2lzdGVyX3Nsb3QoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcnYpCiB7CiAJaW50IGRldmljZTsKLQl1bnNpZ25lZCBsb25nIHN1bjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3VuOwogCWNoYXIgbmFtZVtTTE9UX05BTUVfU0laRV07CiAJc3RydWN0IGFjcGlfcGNpX3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdDsKQEAgLTE1MCw3ICsxNTAsNyBAQAogCX0KIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiV1IiwgKHUzMilzdW4pOwotCXBjaV9zbG90ID0gcGNpX2NyZWF0ZV9zbG90KHBjaV9idXMsIGRldmljZSwgbmFtZSk7CisJcGNpX3Nsb3QgPSBwY2lfY3JlYXRlX3Nsb3QocGNpX2J1cywgZGV2aWNlLCBuYW1lLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHBjaV9zbG90KSkgewogCQllcnIoInBjaV9jcmVhdGVfc2xvdCByZXR1cm5lZCAlbGRcbiIsIFBUUl9FUlIocGNpX3Nsb3QpKTsKIAkJa2ZyZWUoc2xvdCk7CkBAIC0xODIsNyArMTgyLDcgQEAKIHdhbGtfcDJwX2JyaWRnZShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKIHsKIAlpbnQgZGV2aWNlLCBmdW5jdGlvbjsKLQl1bnNpZ25lZCBsb25nIGFkcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRyOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2hhbmRsZSBkdW1teV9oYW5kbGU7CiAJYWNwaV93YWxrX2NhbGxiYWNrIHVzZXJfZnVuY3Rpb247CkBAIC0yMzksNyArMjM5LDcgQEAKIHdhbGtfcm9vdF9icmlkZ2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX3dhbGtfY2FsbGJhY2sgdXNlcl9mdW5jdGlvbikKIHsKIAlpbnQgc2VnLCBidXM7Ci0JdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9oYW5kbGUgZHVtbXlfaGFuZGxlOwogCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwppbmRleCA0YWIyMWNiLi5hMTcxOGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwpAQCAtNTQsNiArNTQsMTQgQEAKICNkZWZpbmUgQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PRkYJMHgwMAogI2RlZmluZSBBQ1BJX1BPV0VSX1JFU09VUkNFX1NUQVRFX09OCTB4MDEKICNkZWZpbmUgQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9VTktOT1dOIDB4RkYKKworI2lmZGVmIE1PRFVMRV9QQVJBTV9QUkVGSVgKKyN1bmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCisjZW5kaWYKKyNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCAiYWNwaS4iCitpbnQgYWNwaV9wb3dlcl9ub2NoZWNrOworbW9kdWxlX3BhcmFtX25hbWVkKHBvd2VyX25vY2hlY2ssIGFjcGlfcG93ZXJfbm9jaGVjaywgYm9vbCwgMDAwKTsKKwogc3RhdGljIGludCBhY3BpX3Bvd2VyX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGFjcGlfcG93ZXJfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CiBzdGF0aWMgaW50IGFjcGlfcG93ZXJfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKQEAgLTEyOCwxNiArMTM2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9wb3dlcl9nZXRfc3RhdGUoc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKnJlc291cmNlLCBpbnQgKnN0YXRlKQorc3RhdGljIGludCBhY3BpX3Bvd2VyX2dldF9zdGF0ZShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqc3RhdGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JdW5zaWduZWQgbG9uZyBzdGEgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGEgPSAwOwogCiAKLQlpZiAoIXJlc291cmNlIHx8ICFzdGF0ZSkKKwlpZiAoIWhhbmRsZSB8fCAhc3RhdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHJlc291cmNlLT5kZXZpY2UtPmhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTE0NSw3ICsxNTMsNyBAQAogCQkJICAgICAgQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PRkY7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJSZXNvdXJjZSBbJXNdIGlzICVzXG4iLAotCQkJICByZXNvdXJjZS0+bmFtZSwgc3RhdGUgPyAib24iIDogIm9mZiIpKTsKKwkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKGhhbmRsZSksIHN0YXRlID8gIm9uIiA6ICJvZmYiKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1Myw3ICsxNjEsNiBAQAogc3RhdGljIGludCBhY3BpX3Bvd2VyX2dldF9saXN0X3N0YXRlKHN0cnVjdCBhY3BpX2hhbmRsZV9saXN0ICpsaXN0LCBpbnQgKnN0YXRlKQogewogCWludCByZXN1bHQgPSAwLCBzdGF0ZTE7Ci0Jc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gTlVMTDsKIAl1MzIgaSA9IDA7CiAKIApAQCAtMTYxLDEyICsxNjgsMTUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgJ29uJyBJRkYgYWxsIHJlc291cmNlcyBhcmUgJ29uJy4gKi8KKwkvKiAqLwogCiAJZm9yIChpID0gMDsgaSA8IGxpc3QtPmNvdW50OyBpKyspIHsKLQkJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfY29udGV4dChsaXN0LT5oYW5kbGVzW2ldLCAmcmVzb3VyY2UpOwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIHJlc3VsdDsKLQkJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUocmVzb3VyY2UsICZzdGF0ZTEpOworCQkvKgorCQkgKiBUaGUgc3RhdGUgb2YgdGhlIHBvd2VyIHJlc291cmNlIGNhbiBiZSBvYnRhaW5lZCBieQorCQkgKiB1c2luZyB0aGUgQUNQSSBoYW5kbGUuIEluIHN1Y2ggY2FzZSBpdCBpcyB1bm5lY2Vzc2FyeSB0bworCQkgKiBnZXQgdGhlIFBvd2VyIHJlc291cmNlIGZpcnN0IGFuZCB0aGVuIGdldCBpdHMgc3RhdGUgYWdhaW4uCisJCSAqLworCQlyZXN1bHQgPSBhY3BpX3Bvd2VyX2dldF9zdGF0ZShsaXN0LT5oYW5kbGVzW2ldLCAmc3RhdGUxKTsKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAKQEAgLTIyNiwxMiArMjM2LDE4IEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X3N0YXRlKHJlc291cmNlLCAmc3RhdGUpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0JaWYgKHN0YXRlICE9IEFDUElfUE9XRVJfUkVTT1VSQ0VfU1RBVEVfT04pCi0JCXJldHVybiAtRU5PRVhFQzsKLQorCWlmICghYWNwaV9wb3dlcl9ub2NoZWNrKSB7CisJCS8qCisJCSAqIElmIGFjcGlfcG93ZXJfbm9jaGVjayBpcyBzZXQsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNoZWNrCisJCSAqIHRoZSBwb3dlciBzdGF0ZSBhZnRlciBwb3dlciB0cmFuc2l0aW9uLgorCQkgKi8KKwkJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUocmVzb3VyY2UtPmRldmljZS0+aGFuZGxlLAorCQkJCSZzdGF0ZSk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCQlpZiAoc3RhdGUgIT0gQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTikKKwkJCXJldHVybiAtRU5PRVhFQzsKKwl9CiAJLyogVXBkYXRlIHRoZSBwb3dlciByZXNvdXJjZSdzIF9kZXZpY2VfIHBvd2VyIHN0YXRlICovCiAJcmVzb3VyY2UtPmRldmljZS0+cG93ZXIuc3RhdGUgPSBBQ1BJX1NUQVRFX0QwOwogCkBAIC0yNzcsMTEgKzI5MywxNyBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXN1bHQgPSBhY3BpX3Bvd2VyX2dldF9zdGF0ZShyZXNvdXJjZSwgJnN0YXRlKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwotCWlmIChzdGF0ZSAhPSBBQ1BJX1BPV0VSX1JFU09VUkNFX1NUQVRFX09GRikKLQkJcmV0dXJuIC1FTk9FWEVDOworCWlmICghYWNwaV9wb3dlcl9ub2NoZWNrKSB7CisJCS8qCisJCSAqIElmIGFjcGlfcG93ZXJfbm9jaGVjayBpcyBzZXQsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNoZWNrCisJCSAqIHRoZSBwb3dlciBzdGF0ZSBhZnRlciBwb3dlciB0cmFuc2l0aW9uLgorCQkgKi8KKwkJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUoaGFuZGxlLCAmc3RhdGUpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKHN0YXRlICE9IEFDUElfUE9XRVJfUkVTT1VSQ0VfU1RBVEVfT0ZGKQorCQkJcmV0dXJuIC1FTk9FWEVDOworCX0KIAogCS8qIFVwZGF0ZSB0aGUgcG93ZXIgcmVzb3VyY2UncyBfZGV2aWNlXyBwb3dlciBzdGF0ZSAqLwogCXJlc291cmNlLT5kZXZpY2UtPnBvd2VyLnN0YXRlID0gQUNQSV9TVEFURV9EMzsKQEAgLTU1NSw3ICs1NzcsNyBAQAogCWlmICghcmVzb3VyY2UpCiAJCWdvdG8gZW5kOwogCi0JcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUocmVzb3VyY2UsICZzdGF0ZSk7CisJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUocmVzb3VyY2UtPmRldmljZS0+aGFuZGxlLCAmc3RhdGUpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwogCkBAIC02NTcsNyArNjc5LDcgQEAKIAlzdHJjcHkocmVzb3VyY2UtPm5hbWUsIGRldmljZS0+cG5wLmJ1c19pZCk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9QT1dFUl9ERVZJQ0VfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfUE9XRVJfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IHJlc291cmNlOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSByZXNvdXJjZTsKIAogCS8qIEV2YWx1dGUgdGhlIG9iamVjdCB0byBnZXQgdGhlIHN5c3RlbSBsZXZlbCBhbmQgcmVzb3VyY2Ugb3JkZXIuICovCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlLT5oYW5kbGUsIE5VTEwsIE5VTEwsICZidWZmZXIpOwpAQCAtNjY4LDcgKzY5MCw3IEBACiAJcmVzb3VyY2UtPnN5c3RlbV9sZXZlbCA9IGFjcGlfb2JqZWN0LnBvd2VyX3Jlc291cmNlLnN5c3RlbV9sZXZlbDsKIAlyZXNvdXJjZS0+b3JkZXIgPSBhY3BpX29iamVjdC5wb3dlcl9yZXNvdXJjZS5yZXNvdXJjZV9vcmRlcjsKIAotCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X3N0YXRlKHJlc291cmNlLCAmc3RhdGUpOworCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X3N0YXRlKGRldmljZS0+aGFuZGxlLCAmc3RhdGUpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwogCkBAIC03MzMsOSArNzU1LDkgQEAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlc291cmNlID0gKHN0cnVjdCBhY3BpX3Bvd2VyX3Jlc291cmNlICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXJlc291cmNlID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCi0JcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUocmVzb3VyY2UsICZzdGF0ZSk7CisJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUoZGV2aWNlLT5oYW5kbGUsICZzdGF0ZSk7CiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCBlZTY4YWM1Li4yNGEzNjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAKIAkvKiBDaGVjayBpZiBpdCBpcyBhIERldmljZSB3aXRoIEhJRCBhbmQgVUlEICovCiAJaWYgKGhhc191aWQpIHsKLQkJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwkJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOwogCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocHItPmhhbmRsZSwgTUVUSE9EX05BTUVfX1VJRCwKIAkJCQkJCU5VTEwsICZ2YWx1ZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtODE4LDcgKzgxOCw3IEBACiAJcHItPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfUFJPQ0VTU09SX0RFVklDRV9OQU1FKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9QUk9DRVNTT1JfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IHByOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBwcjsKIAogCXJldHVybiAwOwogfQpAQCAtODc1LDcgKzg3NSw3IEBACiBzdGF0aWMgaW50IGlzX3Byb2Nlc3Nvcl9wcmVzZW50KGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBzdGEgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGEgPSAwOwogCiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCBjZjViMWI3Li44MWI0MGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMTU4Nyw2ICsxNTg3LDcgQEAKIAogCWlmIChhY3BpX2lkbGVfYm1fY2hlY2soKSkgewogCQlpZiAoZGV2LT5zYWZlX3N0YXRlKSB7CisJCQlkZXYtPmxhc3Rfc3RhdGUgPSBkZXYtPnNhZmVfc3RhdGU7CiAJCQlyZXR1cm4gZGV2LT5zYWZlX3N0YXRlLT5lbnRlcihkZXYsIGRldi0+c2FmZV9zdGF0ZSk7CiAJCX0gZWxzZSB7CiAJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwppbmRleCA4MGMyNTFlLi5kYzk4ZjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwpAQCAtMzgsNiArMzgsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNlbmRpZgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KQEAgLTEyNiw3ICsxMjcsNyBAQAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfcGxhdGZvcm1fbGltaXQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgcHBjID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHBjID0gMDsKIAogCiAJaWYgKCFwcikKQEAgLTMzNCw3ICszMzUsNiBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfaGFuZGxlIGhhbmRsZSA9IE5VTEw7CiAKLQogCWlmICghcHIgfHwgIXByLT5wZXJmb3JtYW5jZSB8fCAhcHItPmhhbmRsZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM0NywxMyArMzQ3LDI1IEBACiAKIAlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2VfY29udHJvbChwcik7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuIHJlc3VsdDsKKwkJZ290byB1cGRhdGVfYmlvczsKIAogCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMocHIpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7CisJCWdvdG8gdXBkYXRlX2Jpb3M7CiAKIAlyZXR1cm4gMDsKKworCS8qCisJICogSGF2aW5nIF9QUEMgYnV0IG1pc3NpbmcgZnJlcXVlbmNpZXMgKF9QU1MsIF9QQ1QpIGlzIGEgdmVyeSBnb29kIGhpbnQgdGhhdAorCSAqIHRoZSBCSU9TIGlzIG9sZGVyIHRoYW4gdGhlIENQVSBhbmQgZG9lcyBub3Qga25vdyBpdHMgZnJlcXVlbmNpZXMKKwkgKi8KKyB1cGRhdGVfYmlvczoKKwlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShwci0+aGFuZGxlLCAiX1BQQyIsICZoYW5kbGUpKSl7CisJCWlmKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9FU1QpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBGV19CVUcgIkJJT1MgbmVlZHMgdXBkYXRlIGZvciBDUFUgIgorCQkJICAgICAgICJmcmVxdWVuY3kgc3VwcG9ydFxuIik7CisJfQorCXJldHVybiByZXN1bHQ7CiB9CiAKIGludCBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnlfc21tKHN0cnVjdCBtb2R1bGUgKmNhbGxpbmdfbW9kdWxlKQpAQCAtNTI0LDEzICs1MzYsMTMgQEAKIAogCXBzZCA9IGJ1ZmZlci5wb2ludGVyOwogCWlmICghcHNkIHx8IChwc2QtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIF9QU0QgZGF0YVxuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIF9QU0QgZGF0YVxuIik7CiAJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KIAogCWlmIChwc2QtPnBhY2thZ2UuY291bnQgIT0gMSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBfUFNEIGRhdGFcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBfUFNEIGRhdGFcbiIpOwogCQlyZXN1bHQgPSAtRUZBVUxUOwogCQlnb3RvIGVuZDsKIAl9CkBAIC01NDMsMTkgKzU1NSwxOSBAQAogCXN0YXR1cyA9IGFjcGlfZXh0cmFjdF9wYWNrYWdlKCYocHNkLT5wYWNrYWdlLmVsZW1lbnRzWzBdKSwKIAkJJmZvcm1hdCwgJnN0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgX1BTRCBkYXRhXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX1BTRCBkYXRhXG4iKTsKIAkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQogCiAJaWYgKHBkb21haW4tPm51bV9lbnRyaWVzICE9IEFDUElfUFNEX1JFVjBfRU5UUklFUykgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiVW5rbm93biBfUFNEOm51bV9lbnRyaWVzXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVua25vd24gX1BTRDpudW1fZW50cmllc1xuIik7CiAJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KIAogCWlmIChwZG9tYWluLT5yZXZpc2lvbiAhPSBBQ1BJX1BTRF9SRVYwX1JFVklTSU9OKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJVbmtub3duIF9QU0Q6cmV2aXNpb25cbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5rbm93biBfUFNEOnJldmlzaW9uXG4iKTsKIAkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwppbmRleCBhNTZmYzZjLi4zZGEyZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wbGF0Zm9ybV9saW1pdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyB0cGMgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0cGMgPSAwOwogCiAJaWYgKCFwcikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MjgsMTMgKzUyOCwxMyBAQAogCiAJdHNkID0gYnVmZmVyLnBvaW50ZXI7CiAJaWYgKCF0c2QgfHwgKHRzZC0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgX1RTRCBkYXRhXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX1RTRCBkYXRhXG4iKTsKIAkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQogCiAJaWYgKHRzZC0+cGFja2FnZS5jb3VudCAhPSAxKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIF9UU0QgZGF0YVxuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIF9UU0QgZGF0YVxuIik7CiAJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTU0NywxOSArNTQ3LDE5IEBACiAJc3RhdHVzID0gYWNwaV9leHRyYWN0X3BhY2thZ2UoJih0c2QtPnBhY2thZ2UuZWxlbWVudHNbMF0pLAogCQkJCSAgICAgICZmb3JtYXQsICZzdGF0ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIF9UU0QgZGF0YVxuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIF9UU0QgZGF0YVxuIik7CiAJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KIAogCWlmIChwZG9tYWluLT5udW1fZW50cmllcyAhPSBBQ1BJX1RTRF9SRVYwX0VOVFJJRVMpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIlVua25vd24gX1RTRDpudW1fZW50cmllc1xuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJVbmtub3duIF9UU0Q6bnVtX2VudHJpZXNcbiIpOwogCQlyZXN1bHQgPSAtRUZBVUxUOwogCQlnb3RvIGVuZDsKIAl9CiAKIAlpZiAocGRvbWFpbi0+cmV2aXNpb24gIT0gQUNQSV9UU0RfUkVWMF9SRVZJU0lPTikgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiVW5rbm93biBfVFNEOnJldmlzaW9uXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVua25vd24gX1RTRDpyZXZpc2lvblxuIik7CiAJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZWJvb3QuYyBiL2RyaXZlcnMvYWNwaS9yZWJvb3QuYwppbmRleCBhNmI2NjJjLi43NTViYWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcmVib290LmMKKysrIGIvZHJpdmVycy9hY3BpL3JlYm9vdC5jCkBAIC0xNSw5ICsxNSwyOCBAQAogCiAJcnIgPSAmYWNwaV9nYmxfRkFEVC5yZXNldF9yZWdpc3RlcjsKIAotCS8qIElzIHRoZSByZXNldCByZWdpc3RlciBzdXBwb3J0ZWQ/ICovCi0JaWYgKCEoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9SRVNFVF9SRUdJU1RFUikgfHwKLQkgICAgcnItPmJpdF93aWR0aCAhPSA4IHx8IHJyLT5iaXRfb2Zmc2V0ICE9IDApCisJLyoKKwkgKiBJcyB0aGUgQUNQSSByZXNldCByZWdpc3RlciBzdXBwb3J0ZWQ/CisJICoKKwkgKiBBY2NvcmRpbmcgdG8gQUNQSSAzLjAsIEZBRFQuZmxhZ3MuUkVTRVRfUkVHX1NVUCBpbmRpY2F0ZXMKKwkgKiB3aGV0aGVyIHRoZSBBQ1BJIHJlc2V0IG1lY2hhbmlzbSBpcyBzdXBwb3J0ZWQuCisJICoKKwkgKiBIb3dldmVyLCBzb21lIGJveGVzIGhhdmUgdGhpcyBiaXQgY2xlYXIsIHlldCBhIHZhbGlkCisJICogQUNQSV9SRVNFVF9SRUcgJiBSRVNFVF9WQUxVRSwgYW5kIEFDUEkgcmVib290IGlzIHRoZSBvbmx5CisJICogbWVjaGFuaXNtIHRoYXQgd29ya3MgZm9yIHRoZW0gYWZ0ZXIgUzMuCisJICoKKwkgKiBUaGlzIHN1Z2dlc3RzIHRoYXQgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IG5vdCBiZSBjaGVja2luZworCSAqIHRoZSBSRVNFVF9SRUdfU1VQIGJpdCwgYW5kIGFyZSB1c2luZyBvdGhlciBtZWFucyB0byBkZWNpZGUKKwkgKiB3aGV0aGVyIHRvIHVzZSB0aGUgQUNQSSByZWJvb3QgbWVjaGFuaXNtIG9yIG5vdC4KKwkgKgorCSAqIFNvIHdoZW4gYWNwaSByZWJvb3QgaXMgcmVxdWVzdGVkLAorCSAqIG9ubHkgdGhlIHJlc2V0X3JlZ2lzdGVyIGlzIGNoZWNrZWQuIElmIHRoZSBmb2xsb3dpbmcKKwkgKiBjb25kaXRpb25zIGFyZSBtZXQsIGl0IGluZGljYXRlcyB0aGF0IHRoZSByZXNldCByZWdpc3RlciBpcyBzdXBwb3J0ZWQuCisJICogCWEuIHJlc2V0X3JlZ2lzdGVyIGlzIG5vdCB6ZXJvCisJICogCWIuIHRoZSBhY2Nlc3Mgd2lkdGggaXMgZWlnaHQKKwkgKiAJYy4gdGhlIGJpdF9vZmZzZXQgaXMgemVybworCSAqLworCWlmICghKHJyLT5hZGRyZXNzKSB8fCByci0+Yml0X3dpZHRoICE9IDggfHwgcnItPmJpdF9vZmZzZXQgIT0gMCkKIAkJcmV0dXJuOwogCiAJcmVzZXRfdmFsdWUgPSBhY3BpX2dibF9GQURULnJlc2V0X3ZhbHVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NhbGMuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjYWxjLmMKaW5kZXggZDkwNjNlYS4uOGVhYWVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NhbGMuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY2FsYy5jCkBAIC00Myw3ICs0Myw2IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcmVzcmMuaD4KLSNpbmNsdWRlIDxhY3BpL2FtbGNvZGUuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1JFU09VUkNFUwpAQCAtNTYwLDggKzU1OSw4IEBACiAJCQkgICAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRSgqc3ViX29iamVjdF9saXN0KSkgfHwKIAkJCSAgICAgKChBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFID09CiAJCQkgICAgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUoKnN1Yl9vYmplY3RfbGlzdCkpICYmCi0JCQkgICAgICAoKCpzdWJfb2JqZWN0X2xpc3QpLT5yZWZlcmVuY2Uub3Bjb2RlID09Ci0JCQkgICAgICAgQU1MX0lOVF9OQU1FUEFUSF9PUCkpKSkgeworCQkJICAgICAgKCgqc3ViX29iamVjdF9saXN0KS0+cmVmZXJlbmNlLmNsYXNzID09CisJCQkgICAgICAgQUNQSV9SRUZDTEFTU19OQU1FKSkpKSB7CiAJCQkJbmFtZV9mb3VuZCA9IFRSVUU7CiAJCQl9IGVsc2UgewogCQkJCS8qIExvb2sgYXQgdGhlIG5leHQgZWxlbWVudCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NyZWF0ZS5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NyZWF0ZS5jCmluZGV4IDc4MDRhOGMuLmMwYmJmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjcmVhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY3JlYXRlLmMKQEAgLTQzLDcgKzQzLDYgQEAKIAogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNyZXNyYy5oPgotI2luY2x1ZGUgPGFjcGkvYW1sY29kZS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfUkVTT1VSQ0VTCkBAIC0zMTAsMTMgKzMwOSwxMiBAQAogCQkJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKIAotCQkJCWlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSAhPQotCQkJCSAgICBBTUxfSU5UX05BTUVQQVRIX09QKSB7CisJCQkJaWYgKG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgIT0KKwkJCQkgICAgQUNQSV9SRUZDTEFTU19OQU1FKSB7CiAJCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCQkgICAgIihQUlRbJVhdLlNvdXJjZSkgTmVlZCBuYW1lLCBmb3VuZCByZWZlcmVuY2Ugb3AgJVgiLAorCQkJCQkJICAgICIoUFJUWyVYXS5Tb3VyY2UpIE5lZWQgbmFtZSwgZm91bmQgUmVmZXJlbmNlIENsYXNzICVYIiwKIAkJCQkJCSAgICBpbmRleCwKLQkJCQkJCSAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLgotCQkJCQkJICAgIG9wY29kZSkpOworCQkJCQkJICAgIG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpKTsKIAkJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9EQVRBKTsKIAkJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zYnMuYyBiL2RyaXZlcnMvYWNwaS9zYnMuYwppbmRleCAxMGEzNjUxLi42MDUwY2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2JzLmMKKysrIGIvZHJpdmVycy9hY3BpL3Nicy5jCkBAIC00NjMsNyArNDYzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFsYXJtX2F0dHIgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDQsIC5vd25lciA9IFRISVNfTU9EVUxFfSwKKwkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NH0sCiAJLnNob3cgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc2hvdywKIAkuc3RvcmUgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc3RvcmUsCiB9OwpAQCAtOTMxLDcgKzkzMSw3IEBACiAJc2JzLT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9TQlNfREVWSUNFX05BTUUpOwogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1NCU19DTEFTUyk7Ci0JYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gc2JzOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBzYnM7CiAKIAlyZXN1bHQgPSBhY3BpX2NoYXJnZXJfYWRkKHNicyk7CiAJaWYgKHJlc3VsdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zYnNoYy5jIGIvZHJpdmVycy9hY3BpL3Nic2hjLmMKaW5kZXggYTRlMzc2Ny4uZTUzZTU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nic2hjLmMKKysrIGIvZHJpdmVycy9hY3BpL3Nic2hjLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogc3RhdGljIGludCBhY3BpX3NtYnVzX2hjX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CiAJc3RydWN0IGFjcGlfc21iX2hjICpoYzsKIAogCWlmICghZGV2aWNlKQpAQCAtMjgyLDcgKzI4Miw3IEBACiAJaGMtPmVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UtPnBhcmVudCk7CiAJaGMtPm9mZnNldCA9ICh2YWwgPj4gOCkgJiAweGZmOwogCWhjLT5xdWVyeV9iaXQgPSB2YWwgJiAweGZmOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGhjOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBoYzsKIAogCWFjcGlfZWNfYWRkX3F1ZXJ5X2hhbmRsZXIoaGMtPmVjLCBoYy0+cXVlcnlfYml0LCBOVUxMLCBzbWJ1c19hbGFybSwgaGMpOwogCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJTQlMgSEM6IEVDID0gMHglcCwgb2Zmc2V0ID0gMHglMHgsIHF1ZXJ5X2JpdCA9IDB4JTB4XG4iLApAQCAtMzAzLDcgKzMwMyw3IEBACiAJaGMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJYWNwaV9lY19yZW1vdmVfcXVlcnlfaGFuZGxlcihoYy0+ZWMsIGhjLT5xdWVyeV9iaXQpOwogCWtmcmVlKGhjKTsKLQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBOVUxMOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCBmNmY1MmMxLi5hOWRkYThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTExMywxNiArMTEzLDE2IEBACiAKIAogCWlmIChhY3BpX2J1c190cmltKGRldmljZSwgMSkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkiUmVtb3ZpbmcgZGV2aWNlIGZhaWxlZFxuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkJIlJlbW92aW5nIGRldmljZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogcG93ZXIgb2ZmIGRldmljZSAqLwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9QUzMiLCBOVUxMLCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgJiYgc3RhdHVzICE9IEFFX05PVF9GT1VORCkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCSJQb3dlci1vZmYgZGV2aWNlIGZhaWxlZFxuIikpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAorCQkJCSJQb3dlci1vZmYgZGV2aWNlIGZhaWxlZFxuIik7CiAKIAlpZiAoZGV2aWNlLT5mbGFncy5sb2NrYWJsZSkgewogCQlhcmdfbGlzdC5jb3VudCA9IDE7CkBAIC0yNzYsNiArMjc2LDEzIEBACiB7CiAJY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZDsKIAorCS8qCisJICogSWYgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gbG9hZCBkZXZpY2UKKwkgKiBkcml2ZXIgZm9yIGl0LgorCSAqLworCWlmICghZGV2aWNlLT5zdGF0dXMucHJlc2VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCkgewogCQlmb3IgKGlkID0gaWRzOyBpZC0+aWRbMF07IGlkKyspIHsKIAkJCWlmICghc3RyY21wKChjaGFyKilpZC0+aWQsIGRldmljZS0+cG5wLmhhcmR3YXJlX2lkKSkKQEAgLTM4NCw3ICszOTEsNyBAQAogCQkJYWNwaV9kcnYtPm9wcy5yZW1vdmUoYWNwaV9kZXYsIGFjcGlfZGV2LT5yZW1vdmFsX3R5cGUpOwogCX0KIAlhY3BpX2Rldi0+ZHJpdmVyID0gTlVMTDsKLQlhY3BpX2RyaXZlcl9kYXRhKGRldikgPSBOVUxMOworCWFjcGlfZGV2LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKIAlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIDA7CkBAIC00NzcsNyArNDg0LDcgQEAKIAogCXJlc3VsdCA9IGFjcGlfZGV2aWNlX3NldHVwX2ZpbGVzKGRldmljZSk7CiAJaWYocmVzdWx0KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiRXJyb3IgY3JlYXRpbmcgc3lzZnMgaW50ZXJmYWNlIGZvciBkZXZpY2UgJXNcbiIsIGRldmljZS0+ZGV2LmJ1c19pZCkpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJFcnJvciBjcmVhdGluZyBzeXNmcyBpbnRlcmZhY2UgZm9yIGRldmljZSAlc1xuIiwgZGV2aWNlLT5kZXYuYnVzX2lkKTsKIAogCWRldmljZS0+cmVtb3ZhbF90eXBlID0gQUNQSV9CVVNfUkVNT1ZBTF9OT1JNQUw7CiAJcmV0dXJuIDA7CkBAIC01MzcsNyArNTQ0LDcgQEAKIAlyZXN1bHQgPSBkcml2ZXItPm9wcy5hZGQoZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7CiAJCWRldmljZS0+ZHJpdmVyID0gTlVMTDsKLQkJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gTlVMTDsKKwkJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCkBAIC03NDQsNiArNzUxLDE2IEBACiAJaWYgKCFhY3BpX21hdGNoX2RldmljZV9pZHMoZGV2aWNlLCBidXR0b25fZGV2aWNlX2lkcykpCiAJCWRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlID0gMTsKIAorCS8qCisJICogRG9uJ3Qgc2V0IFBvd2VyIGJ1dHRvbiBHUEUgYXMgcnVuX3dha2UKKwkgKiBpZiBGaXhlZCBQb3dlciBidXR0b24gaXMgdXNlZAorCSAqLworCWlmICghc3RyY21wKGRldmljZS0+cG5wLmhhcmR3YXJlX2lkLCAiUE5QMEMwQyIpICYmCisJCSEoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9QT1dFUl9CVVRUT04pKSB7CisJCWRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlID0gMDsKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQgPSAwOworCX0KKwogICAgICAgZW5kOgogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZGV2aWNlLT5mbGFncy53YWtlX2NhcGFibGUgPSAwOwpAQCAtODA3LDYgKzgyNCw3IEBACiAJLyogVEJEOiBTeXN0ZW0gd2FrZSBzdXBwb3J0IGFuZCByZXNvdXJjZSByZXF1aXJlbWVudHMuICovCiAKIAlkZXZpY2UtPnBvd2VyLnN0YXRlID0gQUNQSV9TVEFURV9VTktOT1dOOworCWFjcGlfYnVzX2dldF9wb3dlcihkZXZpY2UtPmhhbmRsZSwgJihkZXZpY2UtPnBvd2VyLnN0YXRlKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNTMsMjAgKzExNzEsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1hY3BpX2lzX2NoaWxkX2RldmljZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKLQkJCWludCAoKm1hdGNoZXIpKHN0cnVjdCBhY3BpX2RldmljZSAqKSkKLXsKLQlpbnQgcmVzdWx0ID0gLUVOT0RFVjsKLQotCWRvIHsKLQkJaWYgKEFDUElfU1VDQ0VTUyhtYXRjaGVyKGRldmljZSkpKQotCQkJcmV0dXJuIEFFX09LOwotCX0gd2hpbGUgKChkZXZpY2UgPSBkZXZpY2UtPnBhcmVudCkpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludAogYWNwaV9hZGRfc2luZ2xlX29iamVjdChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKIAkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLAogCQkJc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzKQpAQCAtMTIyMSwxNSArMTIyNSwxOCBAQAogCQkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZW5kOwogCQl9Ci0JCWlmICghZGV2aWNlLT5zdGF0dXMucHJlc2VudCkgewotCQkJLyogQmF5IGFuZCBkb2NrIHNob3VsZCBiZSBoYW5kbGVkIGV2ZW4gaWYgYWJzZW50ICovCi0JCQlpZiAoIUFDUElfU1VDQ0VTUygKLQkJCSAgICAgYWNwaV9pc19jaGlsZF9kZXZpY2UoZGV2aWNlLCBhY3BpX2JheV9tYXRjaCkpICYmCi0JCQkgICAgIUFDUElfU1VDQ0VTUygKLQkJCSAgICAgYWNwaV9pc19jaGlsZF9kZXZpY2UoZGV2aWNlLCBhY3BpX2RvY2tfbWF0Y2gpKSkgewotCQkJCQlyZXN1bHQgPSAtRU5PREVWOwotCQkJCQlnb3RvIGVuZDsKLQkJCX0KKwkJLyoKKwkJICogV2hlbiB0aGUgZGV2aWNlIGlzIG5laXRoZXIgcHJlc2VudCBub3IgZnVuY3Rpb25hbCwgdGhlCisJCSAqIGRldmljZSBzaG91bGQgbm90IGJlIGFkZGVkIHRvIExpbnV4IEFDUEkgZGV2aWNlIHRyZWUuCisJCSAqIFdoZW4gdGhlIHN0YXR1cyBvZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50IGJ1dCBmdW5jdGluYWwsCisJCSAqIGl0IHNob3VsZCBiZSBhZGRlZCB0byBMaW51eCBBQ1BJIHRyZWUuIEZvciBleGFtcGxlIDogYmF5CisJCSAqIGRldmljZSAsIGRvY2sgZGV2aWNlLgorCQkgKiBJbiBzdWNoIGNvbmRpdGlvbnMgaXQgaXMgdW5uY2Vzc2FyeSB0byBjaGVjayB3aGV0aGVyIGl0IGlzCisJCSAqIGJheSBkZXZpY2Ugb3IgZG9jayBkZXZpY2UuCisJCSAqLworCQlpZiAoIWRldmljZS0+c3RhdHVzLnByZXNlbnQgJiYgIWRldmljZS0+c3RhdHVzLmZ1bmN0aW9uYWwpIHsKKwkJCXJlc3VsdCA9IC1FTk9ERVY7CisJCQlnb3RvIGVuZDsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTI1Miw2ICsxMjU5LDE2IEBACiAJYWNwaV9kZXZpY2Vfc2V0X2lkKGRldmljZSwgcGFyZW50LCBoYW5kbGUsIHR5cGUpOwogCiAJLyoKKwkgKiBUaGUgQUNQSSBkZXZpY2UgaXMgYXR0YWNoZWQgdG8gYWNwaSBoYW5kbGUgYmVmb3JlIGdldHRpbmcKKwkgKiB0aGUgcG93ZXIvd2FrZXVwL3BlZm9ybWFuY2UgZmxhZ3MuIE90aGVyd2lzZSBPUyBjYW4ndCBnZXQKKwkgKiB0aGUgY29ycmVzcG9uZGluZyBBQ1BJIGRldmljZSBieSB0aGUgYWNwaSBoYW5kbGUgaW4gdGhlIGNvdXJzZQorCSAqIG9mIGdldHRpbmcgdGhlIHBvd2VyL3dha2V1cC9wZXJmb3JtYW5jZSBmbGFncy4KKwkgKi8KKwlyZXN1bHQgPSBhY3BpX2RldmljZV9zZXRfY29udGV4dChkZXZpY2UsIHR5cGUpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZW5kOworCisJLyoKIAkgKiBQb3dlciBNYW5hZ2VtZW50CiAJICogLS0tLS0tLS0tLS0tLS0tLQogCSAqLwpAQCAtMTI4MSw4ICsxMjk4LDYgQEAKIAkJCWdvdG8gZW5kOwogCX0KIAotCWlmICgocmVzdWx0ID0gYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoZGV2aWNlLCB0eXBlKSkpCi0JCWdvdG8gZW5kOwogCiAJcmVzdWx0ID0gYWNwaV9kZXZpY2VfcmVnaXN0ZXIoZGV2aWNlLCBwYXJlbnQpOwogCkBAIC0xNDAyLDcgKzE0MTcsMTIgQEAKIAkJICogVEJEOiBOZWVkIG5vdGlmaWNhdGlvbnMgYW5kIG90aGVyIGRldGVjdGlvbiBtZWNoYW5pc21zCiAJCSAqICAgICAgaW4gcGxhY2UgYmVmb3JlIHdlIGNhbiBmdWxseSBpbXBsZW1lbnQgdGhpcy4KIAkJICovCi0JCWlmIChjaGlsZC0+c3RhdHVzLnByZXNlbnQpIHsKKwkJIC8qCisJCSAqIFdoZW4gdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCBidXQgZnVuY3Rpb25hbCwgaXQgaXMgYWxzbworCQkgKiBuZWNlc3NhcnkgdG8gc2NhbiB0aGUgY2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UuCisJCSAqLworCQlpZiAoY2hpbGQtPnN0YXR1cy5wcmVzZW50IHx8ICghY2hpbGQtPnN0YXR1cy5wcmVzZW50ICYmCisJCQkJCWNoaWxkLT5zdGF0dXMuZnVuY3Rpb25hbCkpIHsKIAkJCXN0YXR1cyA9IGFjcGlfZ2V0X25leHRfb2JqZWN0KEFDUElfVFlQRV9BTlksIGNoYW5kbGUsCiAJCQkJCQkgICAgICBOVUxMLCBOVUxMKTsKIAkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpAQCAtMTU0NSw3ICsxNTY1LDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1pbnQgX19pbml0IGFjcGlfYm9vdF9lY19lbmFibGUodm9pZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpCiB7CkBAIC0xNTc5LDkgKzE1OTgsNiBAQAogCSAqLwogCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW5fZml4ZWQoYWNwaV9yb290KTsKIAotCS8qIEVDIHJlZ2lvbiBtaWdodCBiZSBuZWVkZWQgYXQgYnVzX3NjYW4sIHNvIGVuYWJsZSBpdCBub3cgKi8KLQlhY3BpX2Jvb3RfZWNfZW5hYmxlKCk7Ci0KIAlpZiAoIXJlc3VsdCkKIAkJcmVzdWx0ID0gYWNwaV9idXNfc2NhbihhY3BpX3Jvb3QsICZvcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYwppbmRleCBkMTMxOTRhLi4yNjU3MWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9tYWluLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMjQsNiArMjUsMzYgQEAKIAogdTggc2xlZXBfc3RhdGVzW0FDUElfU19TVEFURV9DT1VOVF07CiAKK3N0YXRpYyB2b2lkIGFjcGlfc2xlZXBfdHRzX3N3aXRjaCh1MzIgYWNwaV9zdGF0ZSkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9hcmcgPSB7IEFDUElfVFlQRV9JTlRFR0VSIH07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3QgPSB7IDEsICZpbl9hcmcgfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKworCWluX2FyZy5pbnRlZ2VyLnZhbHVlID0gYWNwaV9zdGF0ZTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChOVUxMLCAiXFxfVFRTIiwgJmFyZ19saXN0LCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgJiYgc3RhdHVzICE9IEFFX05PVF9GT1VORCkgeworCQkvKgorCQkgKiBPUyBjYW4ndCBldmFsdWF0ZSB0aGUgX1RUUyBvYmplY3QgY29ycmVjdGx5LiBTb21lIHdhcm5pbmcKKwkJICogbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQuIEJ1dCBpdCB3b24ndCBicmVhayBhbnl0aGluZy4KKwkJICovCisJCXByaW50ayhLRVJOX05PVElDRSAiRmFpbHVyZSBpbiBldmFsdWF0aW5nIF9UVFMgb2JqZWN0XG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdHRzX25vdGlmeV9yZWJvb3Qoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp4KQoreworCWFjcGlfc2xlZXBfdHRzX3N3aXRjaChBQ1BJX1NUQVRFX1M1KTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdHRzX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCT0gdHRzX25vdGlmeV9yZWJvb3QsCisJLm5leHQJCT0gTlVMTCwKKwkucHJpb3JpdHkJPSAwLAorfTsKKwogc3RhdGljIGludCBhY3BpX3NsZWVwX3ByZXBhcmUodTMyIGFjcGlfc3RhdGUpCiB7CiAjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKQEAgLTQ1LDkgKzc2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9TTEVFUAorI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCiBzdGF0aWMgdTMyIGFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKLQogLyoKICAqIEFDUEkgMS4wIHdhbnRzIHVzIHRvIGV4ZWN1dGUgX1BUUyBiZWZvcmUgc3VzcGVuZGluZyBkZXZpY2VzLCBzbyB3ZSBhbGxvdyB0aGUKICAqIHVzZXIgdG8gcmVxdWVzdCB0aGF0IGJlaGF2aW9yIGJ5IHVzaW5nIHRoZSAnYWNwaV9vbGRfc3VzcGVuZF9vcmRlcmluZycKQEAgLTEzMSw4ICsxNjEsOSBAQAogCSAqIGZhaWxpbmcgdHJhbnNpdGlvbiB0byBhIHNsZWVwIHN0YXRlLgogCSAqLwogCWFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKKwlhY3BpX3NsZWVwX3R0c19zd2l0Y2goYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUpOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qIENPTkZJR19BQ1BJX1NMRUVQICovCiAKICNpZmRlZiBDT05GSUdfU1VTUEVORAogZXh0ZXJuIHZvaWQgZG9fc3VzcGVuZF9sb3dsZXZlbCh2b2lkKTsKQEAgLTE1NSw2ICsxODYsNyBAQAogCiAJaWYgKHNsZWVwX3N0YXRlc1thY3BpX3N0YXRlXSkgewogCQlhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IGFjcGlfc3RhdGU7CisJCWFjcGlfc2xlZXBfdHRzX3N3aXRjaChhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBQ1BJIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBzdGF0ZTogJWRcbiIsCiAJCQlwbV9zdGF0ZSk7CkBAIC0yMDAsNiArMjMyLDggQEAKIAkJYnJlYWs7CiAJfQogCisJLyogSWYgQUNQSSBpcyBub3QgZW5hYmxlZCBieSB0aGUgQklPUywgd2UgbmVlZCB0byBlbmFibGUgaXQgaGVyZS4gKi8KKwlhY3BpX2VuYWJsZSgpOwogCS8qIFJlcHJvZ3JhbSBjb250cm9sIHJlZ2lzdGVycyBhbmQgZXhlY3V0ZSBfQkZTICovCiAJYWNwaV9sZWF2ZV9zbGVlcF9zdGF0ZV9wcmVwKGFjcGlfc3RhdGUpOwogCkBAIC0yOTYsNiArMzMwLDE0IEBACiAJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIktOOSBTZXJpZXMoTkYtQ0s4MDQpIiksCiAJCX0sCiAJfSwKKwl7CisJLmNhbGxiYWNrID0gaW5pdF9vbGRfc3VzcGVuZF9vcmRlcmluZywKKwkuaWRlbnQgPSAiSFAgeHc0NjAwIFdvcmtzdGF0aW9uIiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgeHc0NjAwIFdvcmtzdGF0aW9uIiksCisJCX0sCisJfSwKIAl7fSwKIH07CiAjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KQEAgLTMxMyw2ICszNTUsNyBAQAogc3RhdGljIGludCBhY3BpX2hpYmVybmF0aW9uX2JlZ2luKHZvaWQpCiB7CiAJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBBQ1BJX1NUQVRFX1M0OworCWFjcGlfc2xlZXBfdHRzX3N3aXRjaChhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3Niw3ICs0MTksMTUgQEAKICAqLwogc3RhdGljIGludCBhY3BpX2hpYmVybmF0aW9uX2JlZ2luX29sZCh2b2lkKQogewotCWludCBlcnJvciA9IGFjcGlfc2xlZXBfcHJlcGFyZShBQ1BJX1NUQVRFX1M0KTsKKwlpbnQgZXJyb3I7CisJLyoKKwkgKiBUaGUgX1RUUyBvYmplY3Qgc2hvdWxkIGFsd2F5cyBiZSBldmFsdWF0ZWQgYmVmb3JlIHRoZSBfUFRTIG9iamVjdC4KKwkgKiBXaGVuIHRoZSBvbGRfc3VzcGVuZGVkX29yZGVyaW5nIGlzIHRydWUsIHRoZSBfUFRTIG9iamVjdCBpcworCSAqIGV2YWx1YXRlZCBpbiB0aGUgYWNwaV9zbGVlcF9wcmVwYXJlLgorCSAqLworCWFjcGlfc2xlZXBfdHRzX3N3aXRjaChBQ1BJX1NUQVRFX1M0KTsKKworCWVycm9yID0gYWNwaV9zbGVlcF9wcmVwYXJlKEFDUElfU1RBVEVfUzQpOwogCiAJaWYgKCFlcnJvcikKIAkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBBQ1BJX1NUQVRFX1M0OwpAQCAtNDQ0LDcgKzQ5NSw3IEBACiAJYWNwaV9oYW5kbGUgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKGRldik7CiAJc3RydWN0IGFjcGlfZGV2aWNlICphZGV2OwogCWNoYXIgYWNwaV9tZXRob2RbXSA9ICJfU3hEIjsKLQl1bnNpZ25lZCBsb25nIGRfbWluLCBkX21heDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZF9taW4sIGRfbWF4OwogCiAJaWYgKCFoYW5kbGUgfHwgQUNQSV9GQUlMVVJFKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmYWRldikpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJBQ1BJIGhhbmRsZSBoYXMgbm8gY29udGV4dCFcbiIpOwpAQCAtNTk2LDUgKzY0NywxMCBAQAogCQlwbV9wb3dlcl9vZmYgPSBhY3BpX3Bvd2VyX29mZjsKIAl9CiAJcHJpbnRrKCIpXG4iKTsKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSB0dHNfbm90aWZpZXIgdG8gcmVib290IG5vdGlmaWVyIGxpc3Qgc28gdGhhdCB0aGUgX1RUUworCSAqIG9iamVjdCBjYW4gYWxzbyBiZSBldmFsdWF0ZWQgd2hlbiB0aGUgc3lzdGVtIGVudGVycyBTNS4KKwkgKi8KKwlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnR0c19ub3RpZmllcik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL3Byb2MuYwppbmRleCBiZjViMDRkLi42MzFlZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9wcm9jLmMKQEAgLTEyMCwxMyArMTIwLDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAogCWlmICghKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaHIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW8pOwotCQlCQ0RfVE9fQklOKHlyKTsKLQkJQkNEX1RPX0JJTihjZW50KTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhyID0gYmNkMmJpbihocik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW8gPSBiY2QyYmluKG1vKTsKKwkJeXIgPSBiY2QyYmluKHlyKTsKKwkJY2VudCA9IGJjZDJiaW4oY2VudCk7CiAJfQogCiAJLyogd2UncmUgdHJ1c3RpbmcgdGhlIEZBRFQgKHNlZSBhYm92ZSkgKi8KQEAgLTIwNCw3ICsyMDQsNyBAQAogewogCXUzMiB2YWwgPSBDTU9TX1JFQUQob2Zmc2V0KTsKIAlpZiAoIShydGNfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKHZhbCk7CisJCXZhbCA9IGJjZDJiaW4odmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAKIHN0YXRpYyB2b2lkIGNtb3NfYmNkX3dyaXRlKHUzMiB2YWwsIGludCBvZmZzZXQsIGludCBydGNfY29udHJvbCkKIHsKIAlpZiAoIShydGNfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCSU5fVE9fQkNEKHZhbCk7CisJCXZhbCA9IGJpbjJiY2QodmFsKTsKIAlDTU9TX1dSSVRFKHZhbCwgb2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IDkxZGVjNDQuLjFkNzQxNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTExNSw3ICsxMTUsNiBAQAogCXRhYmxlX2F0dHItPmF0dHIucmVhZCA9IGFjcGlfdGFibGVfc2hvdzsKIAl0YWJsZV9hdHRyLT5hdHRyLmF0dHIubmFtZSA9IHRhYmxlX2F0dHItPm5hbWU7CiAJdGFibGVfYXR0ci0+YXR0ci5hdHRyLm1vZGUgPSAwNDQ0OwotCXRhYmxlX2F0dHItPmF0dHIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmV0dXJuOwogfQpAQCAtMzg3LDggKzM4Niw4IEBACiAJCWdvdG8gZW5kOwogCiAJaWYgKCEoYWxsX2NvdW50ZXJzW2luZGV4XS5mbGFncyAmIEFDUElfRVZFTlRfVkFMSUQpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCSJDYW4gbm90IGNoYW5nZSBJbnZhbGlkIEdQRS9GaXhlZCBFdmVudCBzdGF0dXNcbiIpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCSJDYW4gbm90IGNoYW5nZSBJbnZhbGlkIEdQRS9GaXhlZCBFdmVudCBzdGF0dXNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJmYWR0LmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZmFkdC5jCmluZGV4IGE0YTQxYmEuLjJjNzg4NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJmYWR0LmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YmZhZHQuYwpAQCAtNTAsNyArNTAsNyBAQAogLyogTG9jYWwgcHJvdG90eXBlcyAqLwogc3RhdGljIHZvaWQgaW5saW5lCiBhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqZ2VuZXJpY19hZGRyZXNzLAotCQkJICAgICB1OCBiaXRfd2lkdGgsIHU2NCBhZGRyZXNzKTsKKwkJCSAgICAgdTggYnl0ZV93aWR0aCwgdTY0IGFkZHJlc3MpOwogCiBzdGF0aWMgdm9pZCBhY3BpX3RiX2NvbnZlcnRfZmFkdCh2b2lkKTsKIApAQCAtMTExLDcgKzExMSw3IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9pbml0X2dlbmVyaWNfYWRkcmVzcwogICoKICAqIFBBUkFNRVRFUlM6ICBnZW5lcmljX2FkZHJlc3MgICAgIC0gR0FTIHN0cnVjdCB0byBiZSBpbml0aWFsaXplZAotICogICAgICAgICAgICAgIGJpdF93aWR0aCAgICAgICAgICAgLSBXaWR0aCBvZiB0aGlzIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgYnl0ZV93aWR0aCAgICAgICAgICAtIFdpZHRoIG9mIHRoaXMgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICBBZGRyZXNzICAgICAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyB2b2lkIGlubGluZQogYWNwaV90Yl9pbml0X2dlbmVyaWNfYWRkcmVzcyhzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKmdlbmVyaWNfYWRkcmVzcywKLQkJCSAgICAgdTggYml0X3dpZHRoLCB1NjQgYWRkcmVzcykKKwkJCSAgICAgdTggYnl0ZV93aWR0aCwgdTY0IGFkZHJlc3MpCiB7CiAKIAkvKgpAQCAtMTM2LDcgKzEzNiw3IEBACiAJLyogQWxsIG90aGVyIGZpZWxkcyBhcmUgYnl0ZS13aWRlICovCiAKIAlnZW5lcmljX2FkZHJlc3MtPnNwYWNlX2lkID0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOwotCWdlbmVyaWNfYWRkcmVzcy0+Yml0X3dpZHRoID0gYml0X3dpZHRoOworCWdlbmVyaWNfYWRkcmVzcy0+Yml0X3dpZHRoID0gYnl0ZV93aWR0aCA8PCAzOwogCWdlbmVyaWNfYWRkcmVzcy0+Yml0X29mZnNldCA9IDA7CiAJZ2VuZXJpY19hZGRyZXNzLT5hY2Nlc3Nfd2lkdGggPSAwOwogfQpAQCAtMzQyLDkgKzM0MiwyMCBAQAogCSAqIHVzZWZ1bCB0byBjYWxjdWxhdGUgdGhlbSBvbmNlLCBoZXJlLgogCSAqCiAJICogVGhlIFBNIGV2ZW50IGJsb2NrcyBhcmUgc3BsaXQgaW50byB0d28gcmVnaXN0ZXIgYmxvY2tzLCBmaXJzdCBpcyB0aGUKLQkgKiBQTSBTdGF0dXMgUmVnaXN0ZXIgYmxvY2ssIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSBQTSBFbmFibGUgUmVnaXN0ZXIKLQkgKiBibG9jay4gRWFjaCBpcyBvZiBsZW5ndGggKHBtMV9ldmVudF9sZW5ndGgvMikKKwkgKiBQTSBTdGF0dXMgUmVnaXN0ZXIgYmxvY2ssIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSBQTSBFbmFibGUKKwkgKiBSZWdpc3RlciBibG9jay4gRWFjaCBpcyBvZiBsZW5ndGggKHhwbTF4X2V2ZW50X2Jsb2NrLmJpdF93aWR0aC8yKS4KKwkgKgorCSAqIE9uIHZhcmlvdXMgc3lzdGVtcyB0aGUgdjIgZmllbGRzIChhbmQgcGFydGljdWxhcmx5IHRoZSBiaXQgd2lkdGhzKQorCSAqIGNhbm5vdCBiZSByZWxpZWQgdXBvbiwgdGhvdWdoLiBIZW5jZSByZXNvcnQgdG8gdXNpbmcgdGhlIHYxIGxlbmd0aAorCSAqIGhlcmUgKGFuZCB3YXJuIGFib3V0IHRoZSBpbmNvbnNpc3RlbmN5KS4KIAkgKi8KKwlpZiAoYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jay5iaXRfd2lkdGgKKwkgICAgIT0gYWNwaV9nYmxfRkFEVC5wbTFfZXZlbnRfbGVuZ3RoICogOCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRkFEVDogIgorCQkgICAgICAgIlhfUE0xYV9FVlRfQkxLLmJpdF93aWR0aCAoJXUpIGRvZXMgbm90IG1hdGNoIgorCQkgICAgICAgIiBQTTFfRVZUX0xFTiAoJXUpXG4iLAorCQkgICAgICAgYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jay5iaXRfd2lkdGgsCisJCSAgICAgICBhY3BpX2dibF9GQURULnBtMV9ldmVudF9sZW5ndGgpOwogCXBtMV9yZWdpc3Rlcl9sZW5ndGggPSAodTgpIEFDUElfRElWXzIoYWNwaV9nYmxfRkFEVC5wbTFfZXZlbnRfbGVuZ3RoKTsKIAogCS8qIFRoZSBQTTFBIHJlZ2lzdGVyIGJsb2NrIGlzIHJlcXVpcmVkICovCkBAIC0zNjAsMTMgKzM3MSwyMCBAQAogCS8qIFRoZSBQTTFCIHJlZ2lzdGVyIGJsb2NrIGlzIG9wdGlvbmFsLCBpZ25vcmUgaWYgbm90IHByZXNlbnQgKi8KIAogCWlmIChhY3BpX2dibF9GQURULnhwbTFiX2V2ZW50X2Jsb2NrLmFkZHJlc3MpIHsKKwkJaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suYml0X3dpZHRoCisJCSAgICAhPSBhY3BpX2dibF9GQURULnBtMV9ldmVudF9sZW5ndGggKiA4KQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRkFEVDogIgorCQkJICAgICAgICJYX1BNMWJfRVZUX0JMSy5iaXRfd2lkdGggKCV1KSBkb2VzIG5vdCBtYXRjaCIKKwkJCSAgICAgICAiIFBNMV9FVlRfTEVOICgldSlcbiIsCisJCQkgICAgICAgYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay5iaXRfd2lkdGgsCisJCQkgICAgICAgYWNwaV9nYmxfRkFEVC5wbTFfZXZlbnRfbGVuZ3RoKTsKIAkJYWNwaV90Yl9pbml0X2dlbmVyaWNfYWRkcmVzcygmYWNwaV9nYmxfeHBtMWJfZW5hYmxlLAogCQkJCQkgICAgIHBtMV9yZWdpc3Rlcl9sZW5ndGgsCiAJCQkJCSAgICAgKGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suCiAJCQkJCSAgICAgIGFkZHJlc3MgKyBwbTFfcmVnaXN0ZXJfbGVuZ3RoKSk7CiAJCS8qIERvbid0IGZvcmdldCB0byBjb3B5IHNwYWNlX2lkIG9mIHRoZSBHQVMgKi8KIAkJYWNwaV9nYmxfeHBtMWJfZW5hYmxlLnNwYWNlX2lkID0KLQkJICAgIGFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suc3BhY2VfaWQ7CisJCSAgICBhY3BpX2dibF9GQURULnhwbTFiX2V2ZW50X2Jsb2NrLnNwYWNlX2lkOwogCiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy90Ymluc3RhbC5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90Ymluc3RhbC5jCmluZGV4IGIyMjE4NWYuLjE4NzQ3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJpbnN0YWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiaW5zdGFsLmMKQEAgLTExMCw3ICsxMTAsNiBAQAogYWNwaV90Yl9hZGRfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYywgdTMyICp0YWJsZV9pbmRleCkKIHsKIAl1MzIgaTsKLQl1MzIgbGVuZ3RoOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9hZGRfdGFibGUpOwpAQCAtMTQ1LDI1ICsxNDQsNjQgQEAKIAkJCX0KIAkJfQogCi0JCWxlbmd0aCA9IEFDUElfTUlOKHRhYmxlX2Rlc2MtPmxlbmd0aCwKLQkJCQkgIGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0ubGVuZ3RoKTsKLQkJaWYgKEFDUElfTUVNQ01QKHRhYmxlX2Rlc2MtPnBvaW50ZXIsCi0JCQkJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5wb2ludGVyLAotCQkJCWxlbmd0aCkpIHsKKwkJLyoKKwkJICogQ2hlY2sgZm9yIGEgdGFibGUgbWF0Y2ggb24gdGhlIGVudGlyZSB0YWJsZSBsZW5ndGgsCisJCSAqIG5vdCBqdXN0IHRoZSBoZWFkZXIuCisJCSAqLworCQlpZiAodGFibGVfZGVzYy0+bGVuZ3RoICE9CisJCSAgICBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLmxlbmd0aCkgewogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBUYWJsZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwkJaWYgKEFDUElfTUVNQ01QKHRhYmxlX2Rlc2MtPnBvaW50ZXIsCisJCQkJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5wb2ludGVyLAorCQkJCWFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0ubGVuZ3RoKSkgeworCQkJY29udGludWU7CisJCX0KIAorCQkvKgorCQkgKiBOb3RlOiB0aGUgY3VycmVudCBtZWNoYW5pc20gZG9lcyBub3QgdW5yZWdpc3RlciBhIHRhYmxlIGlmIGl0IGlzCisJCSAqIGR5bmFtaWNhbGx5IHVubG9hZGVkLiBUaGUgcmVsYXRlZCBuYW1lc3BhY2UgZW50cmllcyBhcmUgZGVsZXRlZCwKKwkJICogYnV0IHRoZSB0YWJsZSByZW1haW5zIGluIHRoZSByb290IHRhYmxlIGxpc3QuCisJCSAqCisJCSAqIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCB0YWJsZXMgdGhhdAorCQkgKiB3aWxsIGJlIGxvYWRlZCBpcyBhY3R1YWxseSBzbWFsbCwgYW5kIHRoZXJlIGlzIG1pbmltYWwgb3ZlcmhlYWQKKwkJICogaW4ganVzdCBrZWVwaW5nIHRoZSB0YWJsZSBpbiBjYXNlIGl0IGlzIG5lZWRlZCBhZ2Fpbi4KKwkJICoKKwkJICogSWYgdGhpcyBhc3N1bXB0aW9uIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZSAocGVyaGFwcyBvbiBsYXJnZQorCQkgKiBtYWNoaW5lcyB3aXRoIG1hbnkgdGFibGUgbG9hZC91bmxvYWQgb3BlcmF0aW9ucyksIHRhYmxlcyB3aWxsCisJCSAqIG5lZWQgdG8gYmUgdW5yZWdpc3RlcmVkIHdoZW4gdGhleSBhcmUgdW5sb2FkZWQsIGFuZCBzbG90cyBpbiB0aGUKKwkJICogcm9vdCB0YWJsZSBsaXN0IHNob3VsZCBiZSByZXVzZWQgd2hlbiBlbXB0eS4KKwkJICovCisKKwkJLyoKKwkJICogVGFibGUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorCQkgKiBXZSBjYW4gZGVsZXRlIHRoZSB0YWJsZSB0aGF0IHdhcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisJCSAqLwogCQlhY3BpX3RiX2RlbGV0ZV90YWJsZSh0YWJsZV9kZXNjKTsKIAkJKnRhYmxlX2luZGV4ID0gaTsKLQkJc3RhdHVzID0gQUVfQUxSRUFEWV9FWElTVFM7Ci0JCWdvdG8gcmVsZWFzZTsKKworCQlpZiAoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS4KKwkJICAgIGZsYWdzICYgQUNQSV9UQUJMRV9JU19MT0FERUQpIHsKKworCQkJLyogVGFibGUgaXMgc3RpbGwgbG9hZGVkLCB0aGlzIGlzIGFuIGVycm9yICovCisKKwkJCXN0YXR1cyA9IEFFX0FMUkVBRFlfRVhJU1RTOworCQkJZ290byByZWxlYXNlOworCQl9IGVsc2UgeworCQkJLyogVGFibGUgd2FzIHVubG9hZGVkLCBhbGxvdyBpdCB0byBiZSByZWxvYWRlZCAqLworCisJCQl0YWJsZV9kZXNjLT5wb2ludGVyID0KKwkJCSAgICBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLnBvaW50ZXI7CisJCQl0YWJsZV9kZXNjLT5hZGRyZXNzID0KKwkJCSAgICBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLmFkZHJlc3M7CisJCQlzdGF0dXMgPSBBRV9PSzsKKwkJCWdvdG8gcHJpbnRfaGVhZGVyOworCQl9CiAJfQogCi0JLyoKLQkgKiBBZGQgdGhlIHRhYmxlIHRvIHRoZSBnbG9iYWwgdGFibGUgbGlzdAotCSAqLworCS8qIEFkZCB0aGUgdGFibGUgdG8gdGhlIGdsb2JhbCByb290IHRhYmxlIGxpc3QgKi8KKwogCXN0YXR1cyA9IGFjcGlfdGJfc3RvcmVfdGFibGUodGFibGVfZGVzYy0+YWRkcmVzcywgdGFibGVfZGVzYy0+cG9pbnRlciwKIAkJCQkgICAgIHRhYmxlX2Rlc2MtPmxlbmd0aCwgdGFibGVfZGVzYy0+ZmxhZ3MsCiAJCQkJICAgICB0YWJsZV9pbmRleCk7CkBAIC0xNzEsNiArMjA5LDcgQEAKIAkJZ290byByZWxlYXNlOwogCX0KIAorICAgICAgcHJpbnRfaGVhZGVyOgogCWFjcGlfdGJfcHJpbnRfdGFibGVfaGVhZGVyKHRhYmxlX2Rlc2MtPmFkZHJlc3MsIHRhYmxlX2Rlc2MtPnBvaW50ZXIpOwogCiAgICAgICByZWxlYXNlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggOTEyNzAzNi4uYWQ2Y2FlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC0yNDYsMTggKzI0NiwxOCBAQAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAogCWlmICghdHopCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdHotPmxhc3RfdGVtcGVyYXR1cmUgPSB0ei0+dGVtcGVyYXR1cmU7CiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIodHotPmRldmljZS0+aGFuZGxlLCAiX1RNUCIsIE5VTEwsICZ0ei0+dGVtcGVyYXR1cmUpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcih0ei0+ZGV2aWNlLT5oYW5kbGUsICJfVE1QIiwgTlVMTCwgJnRtcCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXR6LT50ZW1wZXJhdHVyZSA9IHRtcDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJUZW1wZXJhdHVyZSBpcyAlbHUgZEtcbiIsCiAJCQkgIHR6LT50ZW1wZXJhdHVyZSkpOwogCkBAIC0yNjcsMTcgKzI2NywxNiBAQAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfZ2V0X3BvbGxpbmdfZnJlcXVlbmN5KHN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAogCWlmICghdHopCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHR6LT5kZXZpY2UtPmhhbmRsZSwgIl9UWlAiLCBOVUxMLAotCQkJCSAgJnR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSk7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHR6LT5kZXZpY2UtPmhhbmRsZSwgIl9UWlAiLCBOVUxMLCAmdG1wKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRU5PREVWOwogCisJdHotPnBvbGxpbmdfZnJlcXVlbmN5ID0gdG1wOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlBvbGxpbmcgZnJlcXVlbmN5IGlzICVsdSBkU1xuIiwKIAkJCSAgdHotPnBvbGxpbmdfZnJlcXVlbmN5KSk7CiAKQEAgLTM1Niw2ICszNTUsNyBAQAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfdHJpcHNfdXBkYXRlKHN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6LCBpbnQgZmxhZykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG1wOwogCXN0cnVjdCBhY3BpX2hhbmRsZV9saXN0IGRldmljZXM7CiAJaW50IHZhbGlkID0gMDsKIAlpbnQgaTsKQEAgLTM2Myw3ICszNjMsOCBAQAogCS8qIENyaXRpY2FsIFNodXRkb3duIChyZXF1aXJlZCkgKi8KIAlpZiAoZmxhZyAmIEFDUElfVFJJUFNfQ1JJVElDQUwpIHsKIAkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHR6LT5kZXZpY2UtPmhhbmRsZSwKLQkJCQkiX0NSVCIsIE5VTEwsICZ0ei0+dHJpcHMuY3JpdGljYWwudGVtcGVyYXR1cmUpOworCQkJCSJfQ1JUIiwgTlVMTCwgJnRtcCk7CisJCXR6LT50cmlwcy5jcml0aWNhbC50ZW1wZXJhdHVyZSA9IHRtcDsKIAkJLyoKIAkJICogVHJlYXQgZnJlZXppbmcgdGVtcGVyYXR1cmVzIGFzIGludmFsaWQgYXMgd2VsbDsgc29tZQogCQkgKiBCSU9TZXMgcmV0dXJuIHJlYWxseSBsb3cgdmFsdWVzIGFuZCBjYXVzZSByZWJvb3RzIGF0IHN0YXJ0dXAuCkBAIC0zODgsMTAgKzM4OSwxMiBAQAogCQkJfSBlbHNlIGlmIChjcnQgPiAwKSB7CiAJCQkJdW5zaWduZWQgbG9uZyBjcnRfayA9IENFTFNJVVNfVE9fS0VMVklOKGNydCk7CiAJCQkJLyoKLQkJCQkgKiBBbGxvdyBvdmVycmlkZSB0byBsb3dlciBjcml0aWNhbCB0aHJlc2hvbGQKKwkJCQkgKiBBbGxvdyBvdmVycmlkZSBjcml0aWNhbCB0aHJlc2hvbGQKIAkJCQkgKi8KLQkJCQlpZiAoY3J0X2sgPCB0ei0+dHJpcHMuY3JpdGljYWwudGVtcGVyYXR1cmUpCi0JCQkJCXR6LT50cmlwcy5jcml0aWNhbC50ZW1wZXJhdHVyZSA9IGNydF9rOworCQkJCWlmIChjcnRfayA+IHR6LT50cmlwcy5jcml0aWNhbC50ZW1wZXJhdHVyZSkKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCQkJCSJDcml0aWNhbCB0aHJlc2hvbGQgJWQgQ1xuIiwgY3J0KTsKKwkJCQl0ei0+dHJpcHMuY3JpdGljYWwudGVtcGVyYXR1cmUgPSBjcnRfazsKIAkJCX0KIAkJfQogCX0KQEAgLTM5OSwxMiArNDAyLDEzIEBACiAJLyogQ3JpdGljYWwgU2xlZXAgKG9wdGlvbmFsKSAqLwogCWlmIChmbGFnICYgQUNQSV9UUklQU19IT1QpIHsKIAkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHR6LT5kZXZpY2UtPmhhbmRsZSwKLQkJCQkiX0hPVCIsIE5VTEwsICZ0ei0+dHJpcHMuaG90LnRlbXBlcmF0dXJlKTsKKwkJCQkiX0hPVCIsIE5VTEwsICZ0bXApOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXR6LT50cmlwcy5ob3QuZmxhZ3MudmFsaWQgPSAwOwogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCQkiTm8gaG90IHRocmVzaG9sZFxuIikpOwogCQl9IGVsc2UgeworCQkJdHotPnRyaXBzLmhvdC50ZW1wZXJhdHVyZSA9IHRtcDsKIAkJCXR6LT50cmlwcy5ob3QuZmxhZ3MudmFsaWQgPSAxOwogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCQkiRm91bmQgaG90IHRocmVzaG9sZCBbJWx1XVxuIiwKQEAgLTQxOCwzMyArNDIyLDQwIEBACiAJCWlmIChwc3YgPT0gLTEpIHsKIAkJCXN0YXR1cyA9IEFFX1NVUFBPUlQ7CiAJCX0gZWxzZSBpZiAocHN2ID4gMCkgewotCQkJdHotPnRyaXBzLnBhc3NpdmUudGVtcGVyYXR1cmUgPSBDRUxTSVVTX1RPX0tFTFZJTihwc3YpOworCQkJdG1wID0gQ0VMU0lVU19UT19LRUxWSU4ocHN2KTsKIAkJCXN0YXR1cyA9IEFFX09LOwogCQl9IGVsc2UgewogCQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHR6LT5kZXZpY2UtPmhhbmRsZSwKLQkJCQkiX1BTViIsIE5VTEwsICZ0ei0+dHJpcHMucGFzc2l2ZS50ZW1wZXJhdHVyZSk7CisJCQkJIl9QU1YiLCBOVUxMLCAmdG1wKTsKIAkJfQogCiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCXR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkID0gMDsKIAkJZWxzZSB7CisJCQl0ei0+dHJpcHMucGFzc2l2ZS50ZW1wZXJhdHVyZSA9IHRtcDsKIAkJCXR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkID0gMTsKIAkJCWlmIChmbGFnID09IEFDUElfVFJJUFNfSU5JVCkgewogCQkJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcigKIAkJCQkJCXR6LT5kZXZpY2UtPmhhbmRsZSwgIl9UQzEiLAotCQkJCQkJTlVMTCwgJnR6LT50cmlwcy5wYXNzaXZlLnRjMSk7CisJCQkJCQlOVUxMLCAmdG1wKTsKIAkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQkJCXR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkID0gMDsKKwkJCQllbHNlCisJCQkJCXR6LT50cmlwcy5wYXNzaXZlLnRjMSA9IHRtcDsKIAkJCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoCiAJCQkJCQl0ei0+ZGV2aWNlLT5oYW5kbGUsICJfVEMyIiwKLQkJCQkJCU5VTEwsICZ0ei0+dHJpcHMucGFzc2l2ZS50YzIpOworCQkJCQkJTlVMTCwgJnRtcCk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQkJCQl0ei0+dHJpcHMucGFzc2l2ZS5mbGFncy52YWxpZCA9IDA7CisJCQkJZWxzZQorCQkJCQl0ei0+dHJpcHMucGFzc2l2ZS50YzIgPSB0bXA7CiAJCQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKAogCQkJCQkJdHotPmRldmljZS0+aGFuZGxlLCAiX1RTUCIsCi0JCQkJCQlOVUxMLCAmdHotPnRyaXBzLnBhc3NpdmUudHNwKTsKKwkJCQkJCU5VTEwsICZ0bXApOwogCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCQkJdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MudmFsaWQgPSAwOworCQkJCWVsc2UKKwkJCQkJdHotPnRyaXBzLnBhc3NpdmUudHNwID0gdG1wOwogCQkJfQogCQl9CiAJfQpAQCAtNDc5LDcgKzQ5MCw3IEBACiAKIAkJaWYgKGZsYWcgJiBBQ1BJX1RSSVBTX0FDVElWRSkgewogCQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHR6LT5kZXZpY2UtPmhhbmRsZSwKLQkJCQluYW1lLCBOVUxMLCAmdHotPnRyaXBzLmFjdGl2ZVtpXS50ZW1wZXJhdHVyZSk7CisJCQkJCQkJbmFtZSwgTlVMTCwgJnRtcCk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQl0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLnZhbGlkID0gMDsKIAkJCQlpZiAoaSA9PSAwKQpAQCAtNTAwLDggKzUxMSwxMCBAQAogCQkJCQkJdHotPnRyaXBzLmFjdGl2ZVtpIC0gMl0udGVtcGVyYXR1cmUgOgogCQkJCQkJQ0VMU0lVU19UT19LRUxWSU4oYWN0KSk7CiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSB7CisJCQkJdHotPnRyaXBzLmFjdGl2ZVtpXS50ZW1wZXJhdHVyZSA9IHRtcDsKIAkJCQl0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLnZhbGlkID0gMTsKKwkJCX0KIAkJfQogCiAJCW5hbWVbMl0gPSAnTCc7CkBAIC0xMjEzLDggKzEyMjYsOCBAQAogCQkJCSAgYWNwaV9idXNfcHJpdmF0ZV9kYXRhX2hhbmRsZXIsCiAJCQkJICB0ei0+dGhlcm1hbF96b25lKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkiRXJyb3IgYXR0YWNoaW5nIGRldmljZSBkYXRhXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkiRXJyb3IgYXR0YWNoaW5nIGRldmljZSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xNjQ3LDcgKzE2NjAsNyBAQAogCXN0cmNweSh0ei0+bmFtZSwgZGV2aWNlLT5wbnAuYnVzX2lkKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1RIRVJNQUxfREVWSUNFX05BTUUpOwogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1RIRVJNQUxfQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IHR6OworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSB0ejsKIAltdXRleF9pbml0KCZ0ei0+bG9jayk7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Rvc2hpYmFfYWNwaS5jIGIvZHJpdmVycy9hY3BpL3Rvc2hpYmFfYWNwaS5jCmluZGV4IDhhNjQ5ZjQuLjJhNjMyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvdG9zaGliYV9hY3BpLmMKQEAgLTU0OCw3ICs1NDgsNyBAQAogCiAJaGNpX3JlYWQxKEhDSV9WSURFT19PVVQsICZ2aWRlb19vdXQsICZoY2lfcmVzdWx0KTsKIAlpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfU1VDQ0VTUykgewotCQlpbnQgbmV3X3ZpZGVvX291dCA9IHZpZGVvX291dDsKKwkJdW5zaWduZWQgaW50IG5ld192aWRlb19vdXQgPSB2aWRlb19vdXQ7CiAJCWlmIChsY2Rfb3V0ICE9IC0xKQogCQkJX3NldF9iaXQoJm5ld192aWRlb19vdXQsIEhDSV9WSURFT19PVVRfTENELCBsY2Rfb3V0KTsKIAkJaWYgKGNydF9vdXQgIT0gLTEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0YWxsb2MuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRhbGxvYy5jCmluZGV4IDdkY2I2N2UuLjI0MWM1MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRhbGxvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRhbGxvYy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogVmFsaWRhdGUgdGhhdCB0aGUgYnVmZmVyIGlzIG9mIHRoZSByZXF1aXJlZCBsZW5ndGggb3IKLSAqICAgICAgICAgICAgICBhbGxvY2F0ZSBhIG5ldyBidWZmZXIuICBSZXR1cm5lZCBidWZmZXIgaXMgYWx3YXlzIHplcm9lZC4KKyAqICAgICAgICAgICAgICBhbGxvY2F0ZSBhIG5ldyBidWZmZXIuIFJldHVybmVkIGJ1ZmZlciBpcyBhbHdheXMgemVyb2VkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTI0MCw3ICsyNDAsNyBAQAogYWNwaV91dF9pbml0aWFsaXplX2J1ZmZlcihzdHJ1Y3QgYWNwaV9idWZmZXIgKiBidWZmZXIsCiAJCQkgIGFjcGlfc2l6ZSByZXF1aXJlZF9sZW5ndGgpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9zaXplIGlucHV0X2J1ZmZlcl9sZW5ndGg7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC0yNDgsNTUgKzI0OCw1OCBAQAogCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCXN3aXRjaCAoYnVmZmVyLT5sZW5ndGgpIHsKKwkvKgorCSAqIEJ1ZmZlci0+TGVuZ3RoIGlzIHVzZWQgYXMgYm90aCBhbiBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlci4gR2V0IHRoZQorCSAqIGlucHV0IGFjdHVhbCBsZW5ndGggYW5kIHNldCB0aGUgb3V0cHV0IHJlcXVpcmVkIGJ1ZmZlciBsZW5ndGguCisJICovCisJaW5wdXRfYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlci0+bGVuZ3RoOworCWJ1ZmZlci0+bGVuZ3RoID0gcmVxdWlyZWRfbGVuZ3RoOworCisJLyoKKwkgKiBUaGUgaW5wdXQgYnVmZmVyIGxlbmd0aCBjb250YWlucyB0aGUgYWN0dWFsIGJ1ZmZlciBsZW5ndGgsIG9yIHRoZSB0eXBlCisJICogb2YgYnVmZmVyIHRvIGJlIGFsbG9jYXRlZCBieSB0aGlzIHJvdXRpbmUuCisJICovCisJc3dpdGNoIChpbnB1dF9idWZmZXJfbGVuZ3RoKSB7CiAJY2FzZSBBQ1BJX05PX0JVRkZFUjoKIAotCQkvKiBTZXQgdGhlIGV4Y2VwdGlvbiBhbmQgcmV0dXJuZWQgdGhlIHJlcXVpcmVkIGxlbmd0aCAqLworCQkvKiBSZXR1cm4gdGhlIGV4Y2VwdGlvbiAoYW5kIHRoZSByZXF1aXJlZCBidWZmZXIgbGVuZ3RoKSAqLwogCi0JCXN0YXR1cyA9IEFFX0JVRkZFUl9PVkVSRkxPVzsKLQkJYnJlYWs7CisJCXJldHVybiAoQUVfQlVGRkVSX09WRVJGTE9XKTsKIAogCWNhc2UgQUNQSV9BTExPQ0FURV9CVUZGRVI6CiAKIAkJLyogQWxsb2NhdGUgYSBuZXcgYnVmZmVyICovCiAKIAkJYnVmZmVyLT5wb2ludGVyID0gYWNwaV9vc19hbGxvY2F0ZShyZXF1aXJlZF9sZW5ndGgpOwotCQlpZiAoIWJ1ZmZlci0+cG9pbnRlcikgewotCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwotCQl9Ci0KLQkJLyogQ2xlYXIgdGhlIGJ1ZmZlciAqLwotCi0JCUFDUElfTUVNU0VUKGJ1ZmZlci0+cG9pbnRlciwgMCwgcmVxdWlyZWRfbGVuZ3RoKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSOgogCiAJCS8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciB3aXRoIGxvY2FsIGludGVyZmFjZSB0byBhbGxvdyB0cmFja2luZyAqLwogCi0JCWJ1ZmZlci0+cG9pbnRlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHJlcXVpcmVkX2xlbmd0aCk7Ci0JCWlmICghYnVmZmVyLT5wb2ludGVyKSB7Ci0JCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7Ci0JCX0KKwkJYnVmZmVyLT5wb2ludGVyID0gQUNQSV9BTExPQ0FURShyZXF1aXJlZF9sZW5ndGgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAKIAkJLyogRXhpc3RpbmcgYnVmZmVyOiBWYWxpZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyICovCiAKLQkJaWYgKGJ1ZmZlci0+bGVuZ3RoIDwgcmVxdWlyZWRfbGVuZ3RoKSB7Ci0JCQlzdGF0dXMgPSBBRV9CVUZGRVJfT1ZFUkZMT1c7Ci0JCQlicmVhazsKKwkJaWYgKGlucHV0X2J1ZmZlcl9sZW5ndGggPCByZXF1aXJlZF9sZW5ndGgpIHsKKwkJCXJldHVybiAoQUVfQlVGRkVSX09WRVJGTE9XKTsKIAkJfQotCi0JCS8qIENsZWFyIHRoZSBidWZmZXIgKi8KLQotCQlBQ1BJX01FTVNFVChidWZmZXItPnBvaW50ZXIsIDAsIHJlcXVpcmVkX2xlbmd0aCk7CiAJCWJyZWFrOwogCX0KIAotCWJ1ZmZlci0+bGVuZ3RoID0gcmVxdWlyZWRfbGVuZ3RoOwotCXJldHVybiAoc3RhdHVzKTsKKwkvKiBWYWxpZGF0ZSBhbGxvY2F0aW9uIGZyb20gYWJvdmUgb3IgaW5wdXQgYnVmZmVyIHBvaW50ZXIgKi8KKworCWlmICghYnVmZmVyLT5wb2ludGVyKSB7CisJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKKwl9CisKKwkvKiBIYXZlIGEgdmFsaWQgYnVmZmVyLCBjbGVhciBpdCAqLworCisJQUNQSV9NRU1TRVQoYnVmZmVyLT5wb2ludGVyLCAwLCByZXF1aXJlZF9sZW5ndGgpOworCXJldHVybiAoQUVfT0spOwogfQogCiAjaWZkZWYgTk9UX1VTRURfQllfTElOVVgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjb3B5LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Y29weS5jCmluZGV4IDUzNDk5YWMuLjViMmY3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjb3B5LmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNvcHkuYwpAQCAtNDIsNyArNDIsNiBAQAogICovCiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KLSNpbmNsdWRlIDxhY3BpL2FtbGNvZGUuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CiAKIApAQCAtMTc2LDIwICsxNzUsMjQgQEAKIAogCQkvKiBUaGlzIGlzIGFuIG9iamVjdCByZWZlcmVuY2UuICovCiAKLQkJc3dpdGNoIChpbnRlcm5hbF9vYmplY3QtPnJlZmVyZW5jZS5vcGNvZGUpIHsKLQkJY2FzZSBBTUxfSU5UX05BTUVQQVRIX09QOgorCQlzd2l0Y2ggKGludGVybmFsX29iamVjdC0+cmVmZXJlbmNlLmNsYXNzKSB7CisJCWNhc2UgQUNQSV9SRUZDTEFTU19OQU1FOgogCi0JCQkvKiBGb3IgbmFtZXBhdGgsIHJldHVybiB0aGUgb2JqZWN0IGhhbmRsZSAoInJlZmVyZW5jZSIpICovCi0KLQkJZGVmYXVsdDoKLQotCQkJLyogV2UgYXJlIHJlZmVycmluZyB0byB0aGUgbmFtZXNwYWNlIG5vZGUgKi8KLQorCQkJLyoKKwkJCSAqIEZvciBuYW1lcGF0aCwgcmV0dXJuIHRoZSBvYmplY3QgaGFuZGxlICgicmVmZXJlbmNlIikKKwkJCSAqIFdlIGFyZSByZWZlcnJpbmcgdG8gdGhlIG5hbWVzcGFjZSBub2RlCisJCQkgKi8KIAkJCWV4dGVybmFsX29iamVjdC0+cmVmZXJlbmNlLmhhbmRsZSA9CiAJCQkgICAgaW50ZXJuYWxfb2JqZWN0LT5yZWZlcmVuY2Uubm9kZTsKIAkJCWV4dGVybmFsX29iamVjdC0+cmVmZXJlbmNlLmFjdHVhbF90eXBlID0KIAkJCSAgICBhY3BpX25zX2dldF90eXBlKGludGVybmFsX29iamVjdC0+cmVmZXJlbmNlLm5vZGUpOwogCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKworCQkJLyogQWxsIG90aGVyIHJlZmVyZW5jZSB0eXBlcyBhcmUgdW5zdXBwb3J0ZWQgKi8KKworCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX1RZUEUpOwogCQl9CiAJCWJyZWFrOwogCkBAIC01MzMsNyArNTM2LDcgQEAKIAogCQkvKiBUQkQ6IHNob3VsZCB2YWxpZGF0ZSBpbmNvbWluZyBoYW5kbGUgKi8KIAotCQlpbnRlcm5hbF9vYmplY3QtPnJlZmVyZW5jZS5vcGNvZGUgPSBBTUxfSU5UX05BTUVQQVRIX09QOworCQlpbnRlcm5hbF9vYmplY3QtPnJlZmVyZW5jZS5jbGFzcyA9IEFDUElfUkVGQ0xBU1NfTkFNRTsKIAkJaW50ZXJuYWxfb2JqZWN0LT5yZWZlcmVuY2Uubm9kZSA9CiAJCSAgICBleHRlcm5hbF9vYmplY3QtPnJlZmVyZW5jZS5oYW5kbGU7CiAJCWJyZWFrOwpAQCAtNzQzLDExICs3NDYsMTEgQEAKIAkJICogV2UgY29waWVkIHRoZSByZWZlcmVuY2Ugb2JqZWN0LCBzbyB3ZSBub3cgbXVzdCBhZGQgYSByZWZlcmVuY2UKIAkJICogdG8gdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IHRoZSByZWZlcmVuY2UKIAkJICoKLQkJICogRERCSGFuZGxlIHJlZmVyZW5jZSAoZnJvbSBMb2FkL2xvYWRfdGFibGUgaXMgYSBzcGVjaWFsIHJlZmVyZW5jZSwKLQkJICogaXQncyBSZWZlcmVuY2UuT2JqZWN0IGlzIHRoZSB0YWJsZSBpbmRleCwgc28gZG9lcyBub3QgbmVlZCB0bworCQkgKiBEREJIYW5kbGUgcmVmZXJlbmNlIChmcm9tIExvYWQvbG9hZF90YWJsZSkgaXMgYSBzcGVjaWFsIHJlZmVyZW5jZSwKKwkJICogaXQgZG9lcyBub3QgaGF2ZSBhIFJlZmVyZW5jZS5PYmplY3QsIHNvIGRvZXMgbm90IG5lZWQgdG8KIAkJICogaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAogCQkgKi8KLQkJaWYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9MT0FEX09QKSB7CisJCWlmIChzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLmNsYXNzID09IEFDUElfUkVGQ0xBU1NfVEFCTEUpIHsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYwppbmRleCA0MjYwOWQzLi5kMTk3YzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY2ludGVycC5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjZXZlbnRzLmg+Ci0jaW5jbHVkZSA8YWNwaS9hbWxjb2RlLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwogQUNQSV9NT0RVTEVfTkFNRSgidXRkZWxldGUiKQpAQCAtNTQ4LDggKzU0Nyw4IEBACiAJCQkgKiByZWZlcmVuY2UgbXVzdCB0cmFjayBjaGFuZ2VzIHRvIHRoZSByZWYgY291bnQgb2YgdGhlIGluZGV4IG9yCiAJCQkgKiB0YXJnZXQgb2JqZWN0LgogCQkJICovCi0JCQlpZiAoKG9iamVjdC0+cmVmZXJlbmNlLm9wY29kZSA9PSBBTUxfSU5ERVhfT1ApIHx8Ci0JCQkgICAgKG9iamVjdC0+cmVmZXJlbmNlLm9wY29kZSA9PSBBTUxfSU5UX05BTUVQQVRIX09QKSkgeworCQkJaWYgKChvYmplY3QtPnJlZmVyZW5jZS5jbGFzcyA9PSBBQ1BJX1JFRkNMQVNTX0lOREVYKSB8fAorCQkJICAgIChvYmplY3QtPnJlZmVyZW5jZS5jbGFzcyA9PSBBQ1BJX1JFRkNMQVNTX05BTUUpKSB7CiAJCQkJbmV4dF9vYmplY3QgPSBvYmplY3QtPnJlZmVyZW5jZS5vYmplY3Q7CiAJCQl9CiAJCQlicmVhazsKQEAgLTU4Niw2ICs1ODUsMTMgQEAKIAlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAogCQkJIkNvdWxkIG5vdCB1cGRhdGUgb2JqZWN0IHJlZmVyZW5jZSBjb3VudCIpKTsKIAorCS8qIEZyZWUgYW55IHN0YWNrZWQgVXBkYXRlIFN0YXRlIG9iamVjdHMgKi8KKworCXdoaWxlIChzdGF0ZV9saXN0KSB7CisJCXN0YXRlID0gYWNwaV91dF9wb3BfZ2VuZXJpY19zdGF0ZSgmc3RhdGVfbGlzdCk7CisJCWFjcGlfdXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUoc3RhdGUpOworCX0KKwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Z2xvYmFsLmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Z2xvYmFsLmMKaW5kZXggYTZlNzFiOC4uNjcwNTUxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGdsb2JhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYwpAQCAtMjgxLDcgKzI4MSw2IEBACiAJLyogQUNQSV9CSVRSRUdfUlRfQ0xPQ0tfRU5BQkxFICAgICAgKi8ge0FDUElfUkVHSVNURVJfUE0xX0VOQUJMRSwKIAkJCQkJCUFDUElfQklUUE9TSVRJT05fUlRfQ0xPQ0tfRU5BQkxFLAogCQkJCQkJQUNQSV9CSVRNQVNLX1JUX0NMT0NLX0VOQUJMRX0sCi0JLyogQUNQSV9CSVRSRUdfV0FLRV9FTkFCTEUgICAgICAgICAgKi8ge0FDUElfUkVHSVNURVJfUE0xX0VOQUJMRSwgMCwgMH0sCiAJLyogQUNQSV9CSVRSRUdfUENJRVhQX1dBS0VfRElTQUJMRSAgKi8ge0FDUElfUkVHSVNURVJfUE0xX0VOQUJMRSwKIAkJCQkJCUFDUElfQklUUE9TSVRJT05fUENJRVhQX1dBS0VfRElTQUJMRSwKIAkJCQkJCUFDUElfQklUTUFTS19QQ0lFWFBfV0FLRV9ESVNBQkxFfSwKQEAgLTU3NSw2ICs1NzQsNDcgQEAKIAogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2dldF9yZWZlcmVuY2VfbmFtZQorICoKKyAqIFBBUkFNRVRFUlM6ICBPYmplY3QgICAgICAgICAgICAgICAtIEFuIEFDUEkgcmVmZXJlbmNlIG9iamVjdAorICoKKyAqIFJFVFVSTjogICAgICBQb2ludGVyIHRvIGEgc3RyaW5nCisgKgorICogREVTQ1JJUFRJT046IERlY29kZSBhIHJlZmVyZW5jZSBvYmplY3Qgc3ViLXR5cGUgdG8gYSBzdHJpbmcuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUHJpbnRhYmxlIG5hbWVzIG9mIHJlZmVyZW5jZSBvYmplY3Qgc3ViLXR5cGVzICovCisKK3N0YXRpYyBjb25zdCBjaGFyICphY3BpX2dibF9yZWZfY2xhc3NfbmFtZXNbXSA9IHsKKwkvKiAwMCAqLyAiTG9jYWwiLAorCS8qIDAxICovICJBcmd1bWVudCIsCisJLyogMDIgKi8gIlJlZk9mIiwKKwkvKiAwMyAqLyAiSW5kZXgiLAorCS8qIDA0ICovICJEZGJIYW5kbGUiLAorCS8qIDA1ICovICJOYW1lZCBPYmplY3QiLAorCS8qIDA2ICovICJEZWJ1ZyIKK307CisKK2NvbnN0IGNoYXIgKmFjcGlfdXRfZ2V0X3JlZmVyZW5jZV9uYW1lKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9iamVjdCkKK3sKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuICJOVUxMIE9iamVjdCI7CisKKwlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG9iamVjdCkgIT0gQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkKKwkJcmV0dXJuICJOb3QgYW4gT3BlcmFuZCBvYmplY3QiOworCisJaWYgKG9iamVjdC0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKKwkJcmV0dXJuICJOb3QgYSBSZWZlcmVuY2Ugb2JqZWN0IjsKKworCWlmIChvYmplY3QtPnJlZmVyZW5jZS5jbGFzcyA+IEFDUElfUkVGQ0xBU1NfTUFYKQorCQlyZXR1cm4gIlVua25vd24gUmVmZXJlbmNlIGNsYXNzIjsKKworCXJldHVybiBhY3BpX2dibF9yZWZfY2xhc3NfbmFtZXNbb2JqZWN0LT5yZWZlcmVuY2UuY2xhc3NdOworfQorCiAjaWYgZGVmaW5lZChBQ1BJX0RFQlVHX09VVFBVVCkgfHwgZGVmaW5lZChBQ1BJX0RFQlVHR0VSKQogLyoKICAqIFN0cmluZ3MgYW5kIHByb2NlZHVyZXMgdXNlZCBmb3IgZGVidWcgb25seQpAQCAtNjc3LDE0ICs3MTcsMTQgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgTm9uZQogICoKLSAqIFJFVFVSTjogICAgICBOb25lCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IEluaXQgbGlicmFyeSBnbG9iYWxzLiAgQWxsIGdsb2JhbHMgdGhhdCByZXF1aXJlIHNwZWNpZmljCiAgKiAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGluaXRpYWxpemVkIGhlcmUhCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX3V0X2luaXRfZ2xvYmFscyh2b2lkKQorYWNwaV9zdGF0dXMgYWNwaV91dF9pbml0X2dsb2JhbHModm9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIGk7CkBAIC02OTUsNyArNzM1LDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfdXRfY3JlYXRlX2NhY2hlcygpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm47CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAogCS8qIE11dGV4IGxvY2tlZCBmbGFncyAqLwpAQCAtNzcyLDggKzgxMiw4IEBACiAJYWNwaV9nYmxfZGlzcGxheV9maW5hbF9tZW1fc3RhdHMgPSBGQUxTRTsKICNlbmRpZgogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZGJnX2xldmVsKQotICAgIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sYXllcikKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sYXllcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtaXNjLmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWlzYy5jCmluZGV4IGYzNGJlNjcuLjkwODlhMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYwpAQCAtOTk1LDYgKzk5NSwxNSBAQAogCQkJCQkJCSBzdGF0ZS0+cGtnLgogCQkJCQkJCSB0aGlzX3RhcmdldF9vYmosIDApOwogCQkJaWYgKCFzdGF0ZSkgeworCisJCQkJLyogRnJlZSBhbnkgc3RhY2tlZCBVcGRhdGUgU3RhdGUgb2JqZWN0cyAqLworCisJCQkJd2hpbGUgKHN0YXRlX2xpc3QpIHsKKwkJCQkJc3RhdGUgPQorCQkJCQkgICAgYWNwaV91dF9wb3BfZ2VuZXJpY19zdGF0ZQorCQkJCQkgICAgKCZzdGF0ZV9saXN0KTsKKwkJCQkJYWNwaV91dF9kZWxldGVfZ2VuZXJpY19zdGF0ZShzdGF0ZSk7CisJCQkJfQogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0b2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0b2JqZWN0LmMKaW5kZXggOTE2ZWZmMy4uYzM1NGU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG9iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYwpAQCAtNDMsNyArNDMsNiBAQAogCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgotI2luY2x1ZGUgPGFjcGkvYW1sY29kZS5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9VVElMSVRJRVMKIEFDUElfTU9EVUxFX05BTUUoInV0b2JqZWN0IikKQEAgLTQ3OCw4ICs0NzcsOCBAQAogCiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgogCi0JCXN3aXRjaCAoaW50ZXJuYWxfb2JqZWN0LT5yZWZlcmVuY2Uub3Bjb2RlKSB7Ci0JCWNhc2UgQU1MX0lOVF9OQU1FUEFUSF9PUDoKKwkJc3dpdGNoIChpbnRlcm5hbF9vYmplY3QtPnJlZmVyZW5jZS5jbGFzcykgeworCQljYXNlIEFDUElfUkVGQ0xBU1NfTkFNRToKIAogCQkJLyoKIAkJCSAqIEdldCB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZnVsbCBwYXRobmFtZSB0byB0aGlzIG9iamVjdC4KQEAgLTUwMyw4ICs1MDIsMTAgQEAKIAkJCSAqIHJlcXVpcmVkIGV2ZW50dWFsbHkuCiAJCQkgKi8KIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJVbnN1cHBvcnRlZCBSZWZlcmVuY2Ugb3Bjb2RlPSVYIGluIG9iamVjdCAlcCIsCi0JCQkJICAgIGludGVybmFsX29iamVjdC0+cmVmZXJlbmNlLm9wY29kZSwKKwkJCQkgICAgIkNhbm5vdCBjb252ZXJ0IHRvIGV4dGVybmFsIG9iamVjdCAtICIKKwkJCQkgICAgInVuc3VwcG9ydGVkIFJlZmVyZW5jZSBDbGFzcyBbJXNdICVYIGluIG9iamVjdCAlcCIsCisJCQkJICAgIGFjcGlfdXRfZ2V0X3JlZmVyZW5jZV9uYW1lKGludGVybmFsX29iamVjdCksCisJCQkJICAgIGludGVybmFsX29iamVjdC0+cmVmZXJlbmNlLmNsYXNzLAogCQkJCSAgICBpbnRlcm5hbF9vYmplY3QpKTsKIAkJCXN0YXR1cyA9IEFFX1RZUEU7CiAJCQlicmVhazsKQEAgLTUxMyw3ICs1MTQsOSBAQAogCiAJZGVmYXVsdDoKIAotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiVW5zdXBwb3J0ZWQgdHlwZT0lWCBpbiBvYmplY3QgJXAiLAorCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ2Fubm90IGNvbnZlcnQgdG8gZXh0ZXJuYWwgb2JqZWN0IC0gIgorCQkJICAgICJ1bnN1cHBvcnRlZCB0eXBlIFslc10gJVggaW4gb2JqZWN0ICVwIiwKKwkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKGludGVybmFsX29iamVjdCksCiAJCQkgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW50ZXJuYWxfb2JqZWN0KSwKIAkJCSAgICBpbnRlcm5hbF9vYmplY3QpKTsKIAkJc3RhdHVzID0gQUVfVFlQRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHhmYWNlLmMKaW5kZXggZjhiZGFkZi4uYzE5OGE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHhmYWNlLmMKQEAgLTgxLDcgKzgxLDEyIEBACiAKIAkvKiBJbml0aWFsaXplIGFsbCBnbG9iYWxzIHVzZWQgYnkgdGhlIHN1YnN5c3RlbSAqLwogCi0JYWNwaV91dF9pbml0X2dsb2JhbHMoKTsKKwlzdGF0dXMgPSBhY3BpX3V0X2luaXRfZ2xvYmFscygpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAorCQkJCSJEdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgZ2xvYmFscyIpKTsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQogCiAJLyogQ3JlYXRlIHRoZSBkZWZhdWx0IG11dGV4IG9iamVjdHMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwppbmRleCAxMDA5MjYxLi5lODI3YmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiBhY3BpX3N0YXR1cwogYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFjcGlfaGFuZGxlIGhhbmRsZSwKIAkJICAgICAgYWNwaV9zdHJpbmcgcGF0aG5hbWUsCi0JCSAgICAgIHN0cnVjdCBhY3BpX29iamVjdF9saXN0ICphcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgKmRhdGEpCisJCSAgICAgIHN0cnVjdCBhY3BpX29iamVjdF9saXN0ICphcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgbG9uZyAqZGF0YSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX29iamVjdCAqZWxlbWVudDsKQEAgLTI4OCw3ICsyODgsNyBAQAogCSpkYXRhID0gZWxlbWVudC0+aW50ZWdlci52YWx1ZTsKIAlrZnJlZShlbGVtZW50KTsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlJldHVybiB2YWx1ZSBbJWx1XVxuIiwgKmRhdGEpKTsKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJSZXR1cm4gdmFsdWUgWyVsbHVdXG4iLCAqZGF0YSkpOwogCiAJcmV0dXJuIEFFX09LOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBlOGE1MWExLi5hMjliMGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMjkxLDIwICsyOTEsMjAgQEAKIAkJCWludCBsZXZlbCk7CiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9nZXRfbGV2ZWxfY3VycmVudCgKIAkJCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAotCQkJdW5zaWduZWQgbG9uZyAqbGV2ZWwpOworCQkJdW5zaWduZWQgbG9uZyBsb25nICpsZXZlbCk7CiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZ2V0X25leHRfbGV2ZWwoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsCiAJCQkJICAgICB1MzIgbGV2ZWxfY3VycmVudCwgdTMyIGV2ZW50KTsKIHN0YXRpYyB2b2lkIGFjcGlfdmlkZW9fc3dpdGNoX2JyaWdodG5lc3Moc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsCiAJCQkJCSBpbnQgZXZlbnQpOwogc3RhdGljIGludCBhY3BpX3ZpZGVvX2RldmljZV9nZXRfc3RhdGUoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsCi0JCQkgICAgdW5zaWduZWQgbG9uZyAqc3RhdGUpOworCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhdGUpOwogc3RhdGljIGludCBhY3BpX3ZpZGVvX291dHB1dF9nZXQoc3RydWN0IG91dHB1dF9kZXZpY2UgKm9kKTsKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2Vfc2V0X3N0YXRlKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpOwogCiAvKmJhY2tsaWdodCBkZXZpY2Ugc3lzZnMgc3VwcG9ydCovCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXVuc2lnbmVkIGxvbmcgY3VyX2xldmVsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjdXJfbGV2ZWw7CiAJaW50IGk7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2ZCA9CiAJCShzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKilibF9nZXRfZGF0YShiZCk7CkBAIC0zMzYsNyArMzM2LDcgQEAKIC8qdmlkZW8gb3V0cHV0IGRldmljZSBzeXNmcyBzdXBwb3J0Ki8KIHN0YXRpYyBpbnQgYWNwaV92aWRlb19vdXRwdXRfZ2V0KHN0cnVjdCBvdXRwdXRfZGV2aWNlICpvZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXRlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZTsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZkID0KIAkJKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKWRldl9nZXRfZHJ2ZGF0YSgmb2QtPmRldik7CiAJYWNwaV92aWRlb19kZXZpY2VfZ2V0X3N0YXRlKHZkLCAmc3RhdGUpOwpAQCAtMzcwLDcgKzM3MCw3IEBACiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JdW5zaWduZWQgbG9uZyBsZXZlbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbGV2ZWw7CiAJaW50IHN0YXRlOwogCiAJYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KHZpZGVvLCAmbGV2ZWwpOwpAQCAtNDEwLDcgKzQxMCw3IEBACiAvKiBkZXZpY2UgKi8KIAogc3RhdGljIGludAotYWNwaV92aWRlb19kZXZpY2VfcXVlcnkoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGxvbmcgKnN0YXRlKQorYWNwaV92aWRlb19kZXZpY2VfcXVlcnkoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhdGUpCiB7CiAJaW50IHN0YXR1czsKIApAQCAtNDIxLDcgKzQyMSw3IEBACiAKIHN0YXRpYyBpbnQKIGFjcGlfdmlkZW9fZGV2aWNlX2dldF9zdGF0ZShzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwKLQkJCSAgICB1bnNpZ25lZCBsb25nICpzdGF0ZSkKKwkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YXRlKQogewogCWludCBzdGF0dXM7CiAKQEAgLTQzNiw3ICs0MzYsNyBAQAogCWludCBzdGF0dXM7CiAJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OwotCXVuc2lnbmVkIGxvbmcgcmV0OworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQ7CiAKIAogCWFyZzAuaW50ZWdlci52YWx1ZSA9IHN0YXRlOwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAKIHN0YXRpYyBpbnQKIGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9nZXRfbGV2ZWxfY3VycmVudChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwKLQkJCQkJdW5zaWduZWQgbG9uZyAqbGV2ZWwpCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqbGV2ZWwpCiB7CiAJaWYgKGRldmljZS0+Y2FwLl9CUUMpCiAJCXJldHVybiBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2aWNlLT5kZXYtPmhhbmRsZSwgIl9CUUMiLCBOVUxMLApAQCAtNTQ5LDcgKzU0OSw3IEBACiBhY3BpX3ZpZGVvX2J1c19zZXRfUE9TVChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvLCB1bnNpZ25lZCBsb25nIG9wdGlvbikKIHsKIAlpbnQgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OwogCkBAIC01NjQsNyArNTY0LDcgQEAKIH0KIAogc3RhdGljIGludAotYWNwaV92aWRlb19idXNfZ2V0X1BPU1Qoc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbywgdW5zaWduZWQgbG9uZyAqaWQpCithY3BpX3ZpZGVvX2J1c19nZXRfUE9TVChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvLCB1bnNpZ25lZCBsb25nIGxvbmcgKmlkKQogewogCWludCBzdGF0dXM7CiAKQEAgLTU3NSw3ICs1NzUsNyBAQAogCiBzdGF0aWMgaW50CiBhY3BpX3ZpZGVvX2J1c19QT1NUX29wdGlvbnMoc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbywKLQkJCSAgICB1bnNpZ25lZCBsb25nICpvcHRpb25zKQorCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqb3B0aW9ucykKIHsKIAlpbnQgc3RhdHVzOwogCkBAIC05MTgsNyArOTE4LDcgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0gc2VxLT5wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlOwogCiAKIAlpZiAoIWRldikKQEAgLTkyNywxNCArOTI3LDE0IEBACiAJc3RhdHVzID0gYWNwaV92aWRlb19kZXZpY2VfZ2V0X3N0YXRlKGRldiwgJnN0YXRlKTsKIAlzZXFfcHJpbnRmKHNlcSwgInN0YXRlOiAgICAgIik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQlzZXFfcHJpbnRmKHNlcSwgIjB4JTAybHhcbiIsIHN0YXRlKTsKKwkJc2VxX3ByaW50ZihzZXEsICIweCUwMmxseFxuIiwgc3RhdGUpOwogCWVsc2UKIAkJc2VxX3ByaW50ZihzZXEsICI8bm90IHN1cHBvcnRlZD5cbiIpOwogCiAJc3RhdHVzID0gYWNwaV92aWRlb19kZXZpY2VfcXVlcnkoZGV2LCAmc3RhdGUpOwogCXNlcV9wcmludGYoc2VxLCAicXVlcnk6ICAgICAiKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCXNlcV9wcmludGYoc2VxLCAiMHglMDJseFxuIiwgc3RhdGUpOworCQlzZXFfcHJpbnRmKHNlcSwgIjB4JTAybGx4XG4iLCBzdGF0ZSk7CiAJZWxzZQogCQlzZXFfcHJpbnRmKHNlcSwgIjxub3Qgc3VwcG9ydGVkPlxuIik7CiAKQEAgLTEyMTcsNyArMTIxNyw3IEBACiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX1BPU1RfaW5mb19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSBzZXEtPnByaXZhdGU7Ci0JdW5zaWduZWQgbG9uZyBvcHRpb25zOworCXVuc2lnbmVkIGxvbmcgbG9uZyBvcHRpb25zOwogCWludCBzdGF0dXM7CiAKIApAQCAtMTIzMiw3ICsxMjMyLDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCQkgICAgICAgIlRoaXMgaW5kaWNhdGVzIGEgQklPUyBidWcuIFBsZWFzZSBjb250YWN0IHRoZSBtYW51ZmFjdHVyZXIuXG4iKTsKIAkJfQotCQlwcmludGsoIiVseFxuIiwgb3B0aW9ucyk7CisJCXByaW50aygiJWxseFxuIiwgb3B0aW9ucyk7CiAJCXNlcV9wcmludGYoc2VxLCAiY2FuIFBPU1Q6IDxpbnRlZ3JhdGVkIHZpZGVvPiIpOwogCQlpZiAob3B0aW9ucyAmIDIpCiAJCQlzZXFfcHJpbnRmKHNlcSwgIiA8UENJIHZpZGVvPiIpOwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gc2VxLT5wcml2YXRlOwogCWludCBzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBpZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgaWQ7CiAKIAogCWlmICghdmlkZW8pCkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gbS0+cHJpdmF0ZTsKIAljaGFyIHN0clsxMl0gPSB7IDAgfTsKLQl1bnNpZ25lZCBsb25nIG9wdCwgb3B0aW9uczsKKwl1bnNpZ25lZCBsb25nIGxvbmcgb3B0LCBvcHRpb25zOwogCiAKIAlpZiAoIXZpZGVvIHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCkBAIC0xNDczLDcgKzE0NzMsNyBAQAogYWNwaV92aWRlb19idXNfZ2V0X29uZV9kZXZpY2Uoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCiAJCQkgICAgICBzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvKQogewotCXVuc2lnbmVkIGxvbmcgZGV2aWNlX2lkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkZXZpY2VfaWQ7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRhdGE7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlX2F0dHJpYiogYXR0cmlidXRlOwpAQCAtMTQ5MSw3ICsxNDkxLDcgQEAKIAogCQlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1ZJREVPX0RFVklDRV9OQU1FKTsKIAkJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfVklERU9fQ0xBU1MpOwotCQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBkYXRhOworCQlkZXZpY2UtPmRyaXZlcl9kYXRhID0gZGF0YTsKIAogCQlkYXRhLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJCWRhdGEtPnZpZGVvID0gdmlkZW87CkBAIC0xNTMwLDggKzE1MzAsOCBAQAogCQkJCQkJICAgICBhY3BpX3ZpZGVvX2RldmljZV9ub3RpZnksCiAJCQkJCQkgICAgIGRhdGEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkJICAiRXJyb3IgaW5zdGFsbGluZyBub3RpZnkgaGFuZGxlclxuIik7CiAJCQlpZihkYXRhLT5icmlnaHRuZXNzKQogCQkJCWtmcmVlKGRhdGEtPmJyaWdodG5lc3MtPmxldmVscyk7CiAJCQlrZnJlZShkYXRhLT5icmlnaHRuZXNzKTsKQEAgLTE3MjQsNyArMTcyNCw3IEBACiBzdGF0aWMgdm9pZAogYWNwaV92aWRlb19zd2l0Y2hfYnJpZ2h0bmVzcyhzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwgaW50IGV2ZW50KQogewotCXVuc2lnbmVkIGxvbmcgbGV2ZWxfY3VycmVudCwgbGV2ZWxfbmV4dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbGV2ZWxfY3VycmVudCwgbGV2ZWxfbmV4dDsKIAlpZiAoIWRldmljZS0+YnJpZ2h0bmVzcykKIAkJcmV0dXJuOwogCWFjcGlfdmlkZW9fZGV2aWNlX2xjZF9nZXRfbGV2ZWxfY3VycmVudChkZXZpY2UsICZsZXZlbF9jdXJyZW50KTsKQEAgLTE3NDUsOCArMTc0NSw4IEBACiAKIAkJc3RhdHVzID0gYWNwaV92aWRlb19idXNfZ2V0X29uZV9kZXZpY2UoZGV2LCB2aWRlbyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCQkiQ2FudCBhdHRhY2ggZGV2aWNlIikpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCQkJIkNhbnQgYXR0YWNoIGRldmljZSIpOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC0xOTgyLDcgKzE5ODIsNyBAQAogCXZpZGVvLT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9WSURFT19CVVNfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfVklERU9fQ0xBU1MpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IHZpZGVvOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSB2aWRlbzsKIAogCWFjcGlfdmlkZW9fYnVzX2ZpbmRfY2FwKHZpZGVvKTsKIAllcnJvciA9IGFjcGlfdmlkZW9fYnVzX2NoZWNrKHZpZGVvKTsKQEAgLTIwMDMsOCArMjAwMyw4IEBACiAJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgIGFjcGlfdmlkZW9fYnVzX25vdGlmeSwgdmlkZW8pOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAorCQkJCSAgIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpOwogCQllcnJvciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3N0b3BfdmlkZW87CiAJfQpAQCAtMjA1OCw3ICsyMDU4LDcgQEAKIAlhY3BpX3ZpZGVvX2J1c19yZW1vdmVfZnMoZGV2aWNlKTsKICBlcnJfZnJlZV92aWRlbzoKIAlrZnJlZSh2aWRlbyk7Ci0JYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gTlVMTDsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gTlVMTDsKIAogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS93bWkuYyBiL2RyaXZlcnMvYWNwaS93bWkuYwppbmRleCBjZmUyYzgzLi40N2NkN2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvd21pLmMKKysrIGIvZHJpdmVycy9hY3BpL3dtaS5jCkBAIC0yMTcsNiArMjE3LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBhY3BpX3N0YXR1cyB3bWlfbWV0aG9kX2VuYWJsZShzdHJ1Y3Qgd21pX2Jsb2NrICp3YmxvY2ssIGludCBlbmFibGUpCit7CisJc3RydWN0IGd1aWRfYmxvY2sgKmJsb2NrID0gTlVMTDsKKwljaGFyIG1ldGhvZFs1XTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbXNbMV07CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKworCWJsb2NrID0gJndibG9jay0+Z2Jsb2NrOworCWhhbmRsZSA9IHdibG9jay0+aGFuZGxlOworCisJaWYgKCFibG9jaykKKwkJcmV0dXJuIEFFX05PVF9FWElTVDsKKworCWlucHV0LmNvdW50ID0gMTsKKwlpbnB1dC5wb2ludGVyID0gcGFyYW1zOworCXBhcmFtc1swXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJcGFyYW1zWzBdLmludGVnZXIudmFsdWUgPSBlbmFibGU7CisKKwlzbnByaW50ZihtZXRob2QsIDUsICJXRSUwMlgiLCBibG9jay0+bm90aWZ5X2lkKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIG1ldGhvZCwgJmlucHV0LCBOVUxMKTsKKworCWlmIChzdGF0dXMgIT0gQUVfT0sgJiYgc3RhdHVzICE9IEFFX05PVF9GT1VORCkKKwkJcmV0dXJuIHN0YXR1czsKKwllbHNlCisJCXJldHVybiBBRV9PSzsKK30KKwogLyoKICAqIEV4cG9ydGVkIFdNSSBmdW5jdGlvbnMKICAqLwpAQCAtMjQyLDcgKzI3MSw3IEBACiAJY2hhciBtZXRob2RbNF0gPSAiV00iOwogCiAJaWYgKCFmaW5kX2d1aWQoZ3VpZF9zdHJpbmcsICZ3YmxvY2spKQotCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXJldHVybiBBRV9FUlJPUjsKIAogCWJsb2NrID0gJndibG9jay0+Z2Jsb2NrOwogCWhhbmRsZSA9IHdibG9jay0+aGFuZGxlOwpAQCAtMzA0LDcgKzMzMyw3IEBACiAJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOwogCiAJaWYgKCFmaW5kX2d1aWQoZ3VpZF9zdHJpbmcsICZ3YmxvY2spKQotCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXJldHVybiBBRV9FUlJPUjsKIAogCWJsb2NrID0gJndibG9jay0+Z2Jsb2NrOwogCWhhbmRsZSA9IHdibG9jay0+aGFuZGxlOwpAQCAtMzE0LDcgKzM0Myw3IEBACiAKIAkvKiBDaGVjayBHVUlEIGlzIGEgZGF0YSBibG9jayAqLwogCWlmIChibG9jay0+ZmxhZ3MgJiAoQUNQSV9XTUlfRVZFTlQgfCBBQ1BJX1dNSV9NRVRIT0QpKQotCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXJldHVybiBBRV9FUlJPUjsKIAogCWlucHV0LmNvdW50ID0gMTsKIAlpbnB1dC5wb2ludGVyID0gd3FfcGFyYW1zOwpAQCAtMzg1LDcgKzQxNCw3IEBACiAJCXJldHVybiBBRV9CQURfREFUQTsKIAogCWlmICghZmluZF9ndWlkKGd1aWRfc3RyaW5nLCAmd2Jsb2NrKSkKLQkJcmV0dXJuIEFFX0JBRF9BRERSRVNTOworCQlyZXR1cm4gQUVfRVJST1I7CiAKIAlibG9jayA9ICZ3YmxvY2stPmdibG9jazsKIAloYW5kbGUgPSB3YmxvY2stPmhhbmRsZTsKQEAgLTM5NSw3ICs0MjQsNyBAQAogCiAJLyogQ2hlY2sgR1VJRCBpcyBhIGRhdGEgYmxvY2sgKi8KIAlpZiAoYmxvY2stPmZsYWdzICYgKEFDUElfV01JX0VWRU5UIHwgQUNQSV9XTUlfTUVUSE9EKSkKLQkJcmV0dXJuIEFFX0JBRF9BRERSRVNTOworCQlyZXR1cm4gQUVfRVJST1I7CiAKIAlpbnB1dC5jb3VudCA9IDI7CiAJaW5wdXQucG9pbnRlciA9IHBhcmFtczsKQEAgLTQyNyw2ICs0NTYsNyBAQAogd21pX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHdtaV9ibG9jayAqYmxvY2s7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJaWYgKCFndWlkIHx8ICFoYW5kbGVyKQogCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKQEAgLTQ0MSw3ICs0NzEsOSBAQAogCWJsb2NrLT5oYW5kbGVyID0gaGFuZGxlcjsKIAlibG9jay0+aGFuZGxlcl9kYXRhID0gZGF0YTsKIAotCXJldHVybiBBRV9PSzsKKwlzdGF0dXMgPSB3bWlfbWV0aG9kX2VuYWJsZShibG9jaywgMSk7CisKKwlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwod21pX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIpOwogCkBAIC00NTMsNiArNDg1LDcgQEAKIGFjcGlfc3RhdHVzIHdtaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoY29uc3QgY2hhciAqZ3VpZCkKIHsKIAlzdHJ1Y3Qgd21pX2Jsb2NrICpibG9jazsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlpZiAoIWd1aWQpCiAJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOwpAQCAtNDY0LDEwICs0OTcsMTIgQEAKIAlpZiAoIWJsb2NrLT5oYW5kbGVyKQogCQlyZXR1cm4gQUVfTlVMTF9FTlRSWTsKIAorCXN0YXR1cyA9IHdtaV9tZXRob2RfZW5hYmxlKGJsb2NrLCAwKTsKKwogCWJsb2NrLT5oYW5kbGVyID0gTlVMTDsKIAlibG9jay0+aGFuZGxlcl9kYXRhID0gTlVMTDsKIAotCXJldHVybiBBRV9PSzsKKwlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwod21pX3JlbW92ZV9ub3RpZnlfaGFuZGxlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCmluZGV4IDkzMzBiNzkuLmMwMTIzMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwpAQCAtMTIwLDIxICsxMjAsNiBAQAogCQlhcC0+cGZsYWdzIHw9IEFUQV9QRkxBR19JTklUX0dUTV9WQUxJRDsKIH0KIAotc3RhdGljIHZvaWQgYXRhX2FjcGlfZWplY3RfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKLXsKLQlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKLQl1bmlvbiBhY3BpX29iamVjdCBhcmc7Ci0KLQlhcmdfbGlzdC5jb3VudCA9IDE7Ci0JYXJnX2xpc3QucG9pbnRlciA9ICZhcmc7Ci0JYXJnLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKLQlhcmcuaW50ZWdlci52YWx1ZSA9IDE7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9FSjAiLAotCQkJCQkgICAgICAmYXJnX2xpc3QsIE5VTEwpKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZXZhbHVhdGUgX0VKMCFcbiIpOwotfQotCiAvKiBAYXAgYW5kIEBkZXYgYXJlIHRoZSBzYW1lIGFzIGF0YV9hY3BpX2hhbmRsZV9ob3RwbHVnKCkgKi8KIHN0YXRpYyB2b2lkIGF0YV9hY3BpX2RldGFjaF9kZXZpY2Uoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKIHsKQEAgLTE1Nyw3ICsxNDIsNiBAQAogICogQGFwOiBBVEEgcG9ydCBBQ1BJIGV2ZW50IG9jY3VycmVkCiAgKiBAZGV2OiBBVEEgZGV2aWNlIEFDUEkgZXZlbnQgb2NjdXJyZWQgKGNhbiBiZSBOVUxMKQogICogQGV2ZW50OiBBQ1BJIGV2ZW50IHdoaWNoIG9jY3VycmVkCi0gKiBAaXNfZG9ja19ldmVudDogYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBhIGRvY2sgb25lCiAgKgogICogQWxsIEFDUEkgYmF5IC8gZGV2aWNlIHJlYWx0ZWQgZXZlbnRzIGVuZCB1cCBpbiB0aGlzIGZ1bmN0aW9uLiAgSWYKICAqIHRoZSBldmVudCBpcyBwb3J0LXdpZGUgQGRldiBpcyBOVUxMLiAgSWYgdGhlIGV2ZW50IGlzIHNwZWNpZmljIHRvIGEKQEAgLTE3MSwxMTYgKzE1NSw5OSBAQAogICogQUNQSSBub3RpZnkgaGFuZGxlciBjb250ZXh0LiAgTWF5IHNsZWVwLgogICovCiBzdGF0aWMgdm9pZCBhdGFfYWNwaV9oYW5kbGVfaG90cGx1ZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAotCQkJCSAgICB1MzIgZXZlbnQsIGludCBpc19kb2NrX2V2ZW50KQorCQkJCSAgICB1MzIgZXZlbnQpCiB7Ci0JY2hhciBldmVudF9zdHJpbmdbMTJdOwotCWNoYXIgKmVudnBbXSA9IHsgZXZlbnRfc3RyaW5nLCBOVUxMIH07CiAJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmxpbmsuZWhfaW5mbzsKLQlzdHJ1Y3Qga29iamVjdCAqa29iaiA9IE5VTEw7CiAJaW50IHdhaXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlLCB0bXBoYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBzdGE7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKIAotCWlmIChkZXYpIHsKLQkJaWYgKGRldi0+c2RldikKLQkJCWtvYmogPSAmZGV2LT5zZGV2LT5zZGV2X2dlbmRldi5rb2JqOworCWlmIChkZXYpCiAJCWhhbmRsZSA9IGRldi0+YWNwaV9oYW5kbGU7Ci0JfSBlbHNlIHsKLQkJa29iaiA9ICZhcC0+ZGV2LT5rb2JqOworCWVsc2UKIAkJaGFuZGxlID0gYXAtPmFjcGlfaGFuZGxlOwotCX0KLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRUowIiwgJnRtcGhhbmRsZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkvKiBUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGhvdHBsdWcgKi8KLQkJcmV0dXJuOwotCi0JaWYgKGV2ZW50ID09IEFDUElfTk9USUZZX0JVU19DSEVDSyB8fAotCSAgICBldmVudCA9PSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0spCi0JCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfU1RBIiwgTlVMTCwgJnN0YSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwotCisJLyoKKwkgKiBXaGVuIGRvY2sgZHJpdmVyIGNhbGxzIGludG8gdGhlIHJvdXRpbmUsIGl0IHdpbGwgYWx3YXlzIHVzZQorCSAqIEFDUElfTk9USUZZX0JVU19DSEVDSy9BQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0sgZm9yIGFkZCBhbmQKKwkgKiBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUIGZvciByZW1vdmUKKwkgKi8KIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0s6CiAJY2FzZSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0s6CiAJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkFDUEkgZXZlbnQiKTsKIAotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsCi0JCQkJImFjcGk6IGZhaWxlZCB0byBkZXRlcm1pbmUgYmF5IHN0YXR1cyAoMHgleClcbiIsCi0JCQkJc3RhdHVzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHN0YSkgewotCQkJYXRhX2VoaV9ob3RwbHVnZ2VkKGVoaSk7Ci0JCQlhdGFfcG9ydF9mcmVlemUoYXApOwotCQl9IGVsc2UgewotCQkJLyogVGhlIGRldmljZSBoYXMgZ29uZSAtIHVucGx1ZyBpdCAqLwotCQkJYXRhX2FjcGlfZGV0YWNoX2RldmljZShhcCwgZGV2KTsKLQkJCXdhaXQgPSAxOwotCQl9CisJCWF0YV9laGlfaG90cGx1Z2dlZChlaGkpOworCQlhdGFfcG9ydF9mcmVlemUoYXApOwogCQlicmVhazsKIAljYXNlIEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1Q6CiAJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkFDUEkgZXZlbnQiKTsKIAotCQlpZiAoIWlzX2RvY2tfZXZlbnQpCi0JCQlicmVhazsKLQotCQkvKiB1bmRvY2sgZXZlbnQgLSBpbW1lZGlhdGUgdW5wbHVnICovCiAJCWF0YV9hY3BpX2RldGFjaF9kZXZpY2UoYXAsIGRldik7CiAJCXdhaXQgPSAxOwogCQlicmVhazsKIAl9CiAKLQkvKiBtYWtlIHN1cmUga29iaiBkb2Vzbid0IGdvIGF3YXkgd2hpbGUgYXAtPmxvY2sgaXMgcmVsZWFzZWQgKi8KLQlrb2JqZWN0X2dldChrb2JqKTsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKIAotCWlmICh3YWl0KSB7CisJaWYgKHdhaXQpCiAJCWF0YV9wb3J0X3dhaXRfZWgoYXApOwotCQlhdGFfYWNwaV9lamVjdF9kZXZpY2UoaGFuZGxlKTsKLQl9Ci0KLQlpZiAoa29iaiAmJiAhaXNfZG9ja19ldmVudCkgewotCQlzcHJpbnRmKGV2ZW50X3N0cmluZywgIkJBWV9FVkVOVD0lZCIsIGV2ZW50KTsKLQkJa29iamVjdF91ZXZlbnRfZW52KGtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKLQl9Ci0KLQlrb2JqZWN0X3B1dChrb2JqKTsKIH0KIAogc3RhdGljIHZvaWQgYXRhX2FjcGlfZGV2X25vdGlmeV9kb2NrKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSBkYXRhOwogCi0JYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoZGV2LT5saW5rLT5hcCwgZGV2LCBldmVudCwgMSk7CisJYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoZGV2LT5saW5rLT5hcCwgZGV2LCBldmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YV9hY3BpX2FwX25vdGlmeV9kb2NrKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBkYXRhOwogCi0JYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoYXAsIE5VTEwsIGV2ZW50LCAxKTsKKwlhdGFfYWNwaV9oYW5kbGVfaG90cGx1ZyhhcCwgTlVMTCwgZXZlbnQpOwogfQogCi1zdGF0aWMgdm9pZCBhdGFfYWNwaV9kZXZfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgYXRhX2FjcGlfdWV2ZW50KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCisJdTMyIGV2ZW50KQoreworCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gTlVMTDsKKwljaGFyIGV2ZW50X3N0cmluZ1syMF07CisJY2hhciAqZW52cFtdID0geyBldmVudF9zdHJpbmcsIE5VTEwgfTsKKworCWlmIChkZXYpIHsKKwkJaWYgKGRldi0+c2RldikKKwkJCWtvYmogPSAmZGV2LT5zZGV2LT5zZGV2X2dlbmRldi5rb2JqOworCX0gZWxzZQorCQlrb2JqID0gJmFwLT5kZXYtPmtvYmo7CisKKwlpZiAoa29iaikgeworCQlzbnByaW50ZihldmVudF9zdHJpbmcsIDIwLCAiQkFZX0VWRU5UPSVkIiwgZXZlbnQpOworCQlrb2JqZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9DSEFOR0UsIGVudnApOworCX0KK30KKworc3RhdGljIHZvaWQgYXRhX2FjcGlfYXBfdWV2ZW50KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQoreworCWF0YV9hY3BpX3VldmVudChkYXRhLCBOVUxMLCBldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0YV9hY3BpX2Rldl91ZXZlbnQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9IGRhdGE7Ci0KLQlhdGFfYWNwaV9oYW5kbGVfaG90cGx1ZyhkZXYtPmxpbmstPmFwLCBkZXYsIGV2ZW50LCAwKTsKKwlhdGFfYWNwaV91ZXZlbnQoZGV2LT5saW5rLT5hcCwgZGV2LCBldmVudCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0YV9hY3BpX2FwX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kb2NrX29wcyBhdGFfYWNwaV9kZXZfZG9ja19vcHMgPSB7CisJLmhhbmRsZXIgPSBhdGFfYWNwaV9kZXZfbm90aWZ5X2RvY2ssCisJLnVldmVudCA9IGF0YV9hY3BpX2Rldl91ZXZlbnQsCit9OwogCi0JYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoYXAsIE5VTEwsIGV2ZW50LCAwKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kb2NrX29wcyBhdGFfYWNwaV9hcF9kb2NrX29wcyA9IHsKKwkuaGFuZGxlciA9IGF0YV9hY3BpX2FwX25vdGlmeV9kb2NrLAorCS51ZXZlbnQgPSBhdGFfYWNwaV9hcF91ZXZlbnQsCit9OwogCiAvKioKICAqIGF0YV9hY3BpX2Fzc29jaWF0ZSAtIGFzc29jaWF0ZSBBVEEgaG9zdCB3aXRoIEFDUEkgb2JqZWN0cwpAQCAtMzE1LDI0ICsyODIsMTggQEAKIAkJCWF0YV9hY3BpX2Fzc29jaWF0ZV9pZGVfcG9ydChhcCk7CiAKIAkJaWYgKGFwLT5hY3BpX2hhbmRsZSkgewotCQkJYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGFwLT5hY3BpX2hhbmRsZSwKLQkJCQkJCSAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCi0JCQkJCQkgICAgYXRhX2FjcGlfYXBfbm90aWZ5LCBhcCk7CiAJCQkvKiB3ZSBtaWdodCBiZSBvbiBhIGRvY2tpbmcgc3RhdGlvbiAqLwogCQkJcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhcC0+YWNwaV9oYW5kbGUsCi0JCQkJCSAgICAgYXRhX2FjcGlfYXBfbm90aWZ5X2RvY2ssIGFwKTsKKwkJCQkJICAgICAmYXRhX2FjcGlfYXBfZG9ja19vcHMsIGFwKTsKIAkJfQogCiAJCWZvciAoaiA9IDA7IGogPCBhdGFfbGlua19tYXhfZGV2aWNlcygmYXAtPmxpbmspOyBqKyspIHsKIAkJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmxpbmsuZGV2aWNlW2pdOwogCiAJCQlpZiAoZGV2LT5hY3BpX2hhbmRsZSkgewotCQkJCWFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihkZXYtPmFjcGlfaGFuZGxlLAotCQkJCQkJQUNQSV9TWVNURU1fTk9USUZZLAotCQkJCQkJYXRhX2FjcGlfZGV2X25vdGlmeSwgZGV2KTsKIAkJCQkvKiB3ZSBtaWdodCBiZSBvbiBhIGRvY2tpbmcgc3RhdGlvbiAqLwogCQkJCXJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoZGV2LT5hY3BpX2hhbmRsZSwKLQkJCQkJICAgICBhdGFfYWNwaV9kZXZfbm90aWZ5X2RvY2ssIGRldik7CisJCQkJCSAgICAgJmF0YV9hY3BpX2Rldl9kb2NrX29wcywgZGV2KTsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDFlZTk0OTkuLjhjYjBiMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtMTcxMyw4ICsxNzEzLDYgQEAKIAllbHNlCiAJCXRhZyA9IDA7CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCh0YWcsICZhcC0+cWNfYWxsb2NhdGVkKSkKLQkJQlVHKCk7CiAJcWMgPSBfX2F0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKIAogCXFjLT50YWcgPSB0YWc7CkBAIC00NTUzLDM3ICs0NTUxLDYgQEAKIH0KIAogLyoqCi0gKglhdGFfcWNfbmV3IC0gUmVxdWVzdCBhbiBhdmFpbGFibGUgQVRBIGNvbW1hbmQsIGZvciBxdWV1ZWluZwotICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgQGRldgotICoJQGRldjogRGV2aWNlIGZyb20gd2hvbSB3ZSByZXF1ZXN0IGFuIGF2YWlsYWJsZSBjb21tYW5kIHN0cnVjdHVyZQotICoKLSAqCUxPQ0tJTkc6Ci0gKglOb25lLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKmF0YV9xY19uZXcoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCS8qIG5vIGNvbW1hbmQgd2hpbGUgZnJvemVuICovCi0JaWYgKHVubGlrZWx5KGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiB0aGUgbGFzdCB0YWcgaXMgcmVzZXJ2ZWQgZm9yIGludGVybmFsIGNvbW1hbmQuICovCi0JZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfUVVFVUUgLSAxOyBpKyspCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmYXAtPnFjX2FsbG9jYXRlZCkpIHsKLQkJCXFjID0gX19hdGFfcWNfZnJvbV90YWcoYXAsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCWlmIChxYykKLQkJcWMtPnRhZyA9IGk7Ci0KLQlyZXR1cm4gcWM7Ci19Ci0KLS8qKgogICoJYXRhX3FjX25ld19pbml0IC0gUmVxdWVzdCBhbiBhdmFpbGFibGUgQVRBIGNvbW1hbmQsIGFuZCBpbml0aWFsaXplIGl0CiAgKglAZGV2OiBEZXZpY2UgZnJvbSB3aG9tIHdlIHJlcXVlc3QgYW4gYXZhaWxhYmxlIGNvbW1hbmQgc3RydWN0dXJlCiAgKgpAQCAtNDU5MSwxNiArNDU1OCwyMCBAQAogICoJTm9uZS4KICAqLwogCi1zdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKmF0YV9xY19uZXdfaW5pdChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQorc3RydWN0IGF0YV9xdWV1ZWRfY21kICphdGFfcWNfbmV3X2luaXQoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgaW50IHRhZykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5saW5rLT5hcDsKIAlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCi0JcWMgPSBhdGFfcWNfbmV3KGFwKTsKKwlpZiAodW5saWtlbHkoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pKQorCQlyZXR1cm4gTlVMTDsKKworCXFjID0gX19hdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CiAJaWYgKHFjKSB7CiAJCXFjLT5zY3NpY21kID0gTlVMTDsKIAkJcWMtPmFwID0gYXA7CiAJCXFjLT5kZXYgPSBkZXY7CisJCXFjLT50YWcgPSB0YWc7CiAKIAkJYXRhX3FjX3JlaW5pdChxYyk7CiAJfQpAQCAtNDYwOCwzMSArNDU3OSw2IEBACiAJcmV0dXJuIHFjOwogfQogCi0vKioKLSAqCWF0YV9xY19mcmVlIC0gZnJlZSB1bnVzZWQgYXRhX3F1ZXVlZF9jbWQKLSAqCUBxYzogQ29tbWFuZCB0byBjb21wbGV0ZQotICoKLSAqCURlc2lnbmVkIHRvIGZyZWUgdW51c2VkIGF0YV9xdWV1ZWRfY21kIG9iamVjdAotICoJaW4gY2FzZSBzb21ldGhpbmcgcHJldmVudHMgdXNpbmcgaXQuCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKLSAqLwotdm9pZCBhdGFfcWNfZnJlZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0JdW5zaWduZWQgaW50IHRhZzsKLQotCVdBUk5fT04ocWMgPT0gTlVMTCk7CS8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCi0KLQlxYy0+ZmxhZ3MgPSAwOwotCXRhZyA9IHFjLT50YWc7Ci0JaWYgKGxpa2VseShhdGFfdGFnX3ZhbGlkKHRhZykpKSB7Ci0JCXFjLT50YWcgPSBBVEFfVEFHX1BPSVNPTjsKLQkJY2xlYXJfYml0KHRhZywgJmFwLT5xY19hbGxvY2F0ZWQpOwotCX0KLX0KLQogdm9pZCBfX2F0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CkBAIC01MzczLDYgKzUzMTksOCBAQAogCiAjaWZkZWYgQ09ORklHX0FUQV9TRkYKIAlJTklUX0RFTEFZRURfV09SSygmYXAtPnBvcnRfdGFzaywgYXRhX3Bpb190YXNrKTsKKyNlbHNlCisJSU5JVF9ERUxBWUVEX1dPUksoJmFwLT5wb3J0X3Rhc2ssIE5VTEwpOwogI2VuZGlmCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFwLT5ob3RwbHVnX3Rhc2ssIGF0YV9zY3NpX2hvdHBsdWcpOwogCUlOSVRfV09SSygmYXAtPnNjc2lfcmVzY2FuX3Rhc2ssIGF0YV9zY3NpX2Rldl9yZXNjYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCBhOTMyNDdjLi41ZDY4N2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtMTIwNiw3ICsxMjA2LDEwIEBACiAKIAlhdGFfZWhfY2xlYXJfYWN0aW9uKGxpbmssIGRldiwgZWhpLCBhY3Rpb24pOwogCi0JaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCisJLyogQWJvdXQgdG8gdGFrZSBFSCBhY3Rpb24sIHNldCBSRUNPVkVSRUQuICBJZ25vcmUgYWN0aW9ucyBvbgorCSAqIHNsYXZlIGxpbmtzIGFzIG1hc3RlciB3aWxsIGRvIHRoZW0gYWdhaW4uCisJICovCisJaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkgJiYgbGluayAhPSBhcC0+c2xhdmVfbGluaykKIAkJYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfUkVDT1ZFUkVEOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwpAQCAtMjAxMCw4ICsyMDEzLDEzIEBACiAJCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqbWVoYyA9ICZhcC0+bGluay5laF9jb250ZXh0OwogCQlzdHJ1Y3QgYXRhX2VoX2NvbnRleHQgKnNlaGMgPSAmYXAtPnNsYXZlX2xpbmstPmVoX2NvbnRleHQ7CiAKKwkJLyogdHJhbnNmZXIgY29udHJvbCBmbGFncyBmcm9tIG1hc3RlciB0byBzbGF2ZSAqLworCQlzZWhjLT5pLmZsYWdzIHw9IG1laGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1RPX1NMQVZFX01BU0s7CisKKwkJLyogcGVyZm9ybSBhdXRvcHN5IG9uIHRoZSBzbGF2ZSBsaW5rICovCiAJCWF0YV9laF9saW5rX2F1dG9wc3koYXAtPnNsYXZlX2xpbmspOwogCisJCS8qIHRyYW5zZmVyIGFjdGlvbnMgZnJvbSBzbGF2ZSB0byBtYXN0ZXIgYW5kIGNsZWFyIHNsYXZlICovCiAJCWF0YV9laF9hYm91dF90b19kbyhhcC0+c2xhdmVfbGluaywgTlVMTCwgQVRBX0VIX0FMTF9BQ1RJT05TKTsKIAkJbWVoYy0+aS5hY3Rpb24JCXw9IHNlaGMtPmkuYWN0aW9uOwogCQltZWhjLT5pLmRldl9hY3Rpb25bMV0JfD0gc2VoYy0+aS5kZXZfYWN0aW9uWzFdOwpAQCAtMjQ0NywxNCArMjQ1NSwxNCBAQAogCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKIAkJZGV2LT5mbGFncyAmPSB+QVRBX0RGTEFHX1NMRUVQSU5HOwogCi0JCWlmIChhdGFfcGh5c19saW5rX29mZmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpCi0JCQljb250aW51ZTsKLQotCQkvKiBhcHBseSBjbGFzcyBvdmVycmlkZSAqLwotCQlpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9BVEEpCi0JCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9BVEE7Ci0JCWVsc2UgaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfU0VNQikKLQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX1NFTUJfVU5TVVA7IC8qIG5vdCB5ZXQgKi8KKwkJaWYgKCFhdGFfcGh5c19saW5rX29mZmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpIHsKKwkJCS8qIGFwcGx5IGNsYXNzIG92ZXJyaWRlICovCisJCQlpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9BVEEpCisJCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfQVRBOworCQkJZWxzZSBpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9TRU1CKQorCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX1NFTUJfVU5TVVA7CisJCX0gZWxzZQorCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKIAl9CiAKIAkvKiByZWNvcmQgY3VycmVudCBsaW5rIHNwZWVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCA1ZDMxMmRjLi5kNWI5YjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogewogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAKLQlxYyA9IGF0YV9xY19uZXdfaW5pdChkZXYpOworCXFjID0gYXRhX3FjX25ld19pbml0KGRldiwgY21kLT5yZXF1ZXN0LT50YWcpOwogCWlmIChxYykgewogCQlxYy0+c2NzaWNtZCA9IGNtZDsKIAkJcWMtPnNjc2lkb25lID0gZG9uZTsKQEAgLTExMDMsNyArMTEwMyw4IEBACiAKIAkJZGVwdGggPSBtaW4oc2Rldi0+aG9zdC0+Y2FuX3F1ZXVlLCBhdGFfaWRfcXVldWVfZGVwdGgoZGV2LT5pZCkpOwogCQlkZXB0aCA9IG1pbihBVEFfTUFYX1FVRVVFIC0gMSwgZGVwdGgpOwotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfU0lNUExFX1RBRywgZGVwdGgpOworCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfU0lNUExFX1RBRyk7CisJCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIGRlcHRoKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE5NDMsNiArMTk0NCwxMSBAQAogCQloZHJbMV0gfD0gKDEgPDwgNyk7CiAKIAltZW1jcHkocmJ1ZiwgaGRyLCBzaXplb2YoaGRyKSk7CisKKwkvKiBpZiBuY3EsIHNldCB0YWdzIHN1cHBvcnRlZCAqLworCWlmIChhdGFfaWRfaGFzX25jcShhcmdzLT5pZCkpCisJCXJidWZbN10gfD0gKDEgPDwgMSk7CisKIAltZW1jcHkoJnJidWZbOF0sICJBVEEgICAgICIsIDgpOwogCWF0YV9pZF9zdHJpbmcoYXJncy0+aWQsICZyYnVmWzE2XSwgQVRBX0lEX1BST0QsIDE2KTsKIAlhdGFfaWRfc3RyaW5nKGFyZ3MtPmlkLCAmcmJ1ZlszMl0sIEFUQV9JRF9GV19SRVYsIDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IDJhNGM1MTYuLjRiNDczOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTIxNTMsOCArMjE1MywxNyBAQAogICovCiB2b2lkIGF0YV9zZmZfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlpZiAocWMtPmFwLT5pb2FkZHIuYm1kbWFfYWRkcikKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOworCisJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0lETEU7CisKKwlpZiAoYXAtPmlvYWRkci5ibWRtYV9hZGRyKQogCQlhdGFfYm1kbWFfc3RvcChxYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLmggYi9kcml2ZXJzL2F0YS9saWJhdGEuaAppbmRleCBmZTI4MzllLi5kMzgzMWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEuaAorKysgYi9kcml2ZXJzL2F0YS9saWJhdGEuaApAQCAtNzQsNyArNzQsNyBAQAogZXh0ZXJuIHZvaWQgYXRhX2ZvcmNlX2NibChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB1NjQgYXRhX3RmX3RvX2xiYShjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CiBleHRlcm4gdTY0IGF0YV90Zl90b19sYmE0OChjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7Ci1leHRlcm4gc3RydWN0IGF0YV9xdWV1ZWRfY21kICphdGFfcWNfbmV3X2luaXQoc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IGF0YV9xdWV1ZWRfY21kICphdGFfcWNfbmV3X2luaXQoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgaW50IHRhZyk7CiBleHRlcm4gaW50IGF0YV9idWlsZF9yd190ZihzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Ziwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKIAkJCSAgIHU2NCBibG9jaywgdTMyIG5fYmxvY2ssIHVuc2lnbmVkIGludCB0Zl9mbGFncywKIAkJCSAgIHVuc2lnbmVkIGludCB0YWcpOwpAQCAtMTAzLDcgKzEwMyw2IEBACiBleHRlcm4gaW50IHNhdGFfZG93bl9zcGRfbGltaXQoc3RydWN0IGF0YV9saW5rICpsaW5rKTsKIGV4dGVybiBpbnQgYXRhX2Rvd25feGZlcm1hc2tfbGltaXQoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHNlbCk7CiBleHRlcm4gdm9pZCBhdGFfc2dfY2xlYW4oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci1leHRlcm4gdm9pZCBhdGFfcWNfZnJlZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIF9fYXRhX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGludCBhdGFwaV9jaGVja19kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CkBAIC0xMTksNiArMTE4LDIyIEBACiBleHRlcm4gdm9pZCBhdGFfZGV2X2VuYWJsZV9wbShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCBlbnVtIGxpbmtfcG0gcG9saWN5KTsKIGV4dGVybiB2b2lkIGF0YV9scG1fc2NoZWR1bGUoc3RydWN0IGF0YV9wb3J0ICphcCwgZW51bSBsaW5rX3BtKTsKIAorLyoqCisgKglhdGFfcWNfZnJlZSAtIGZyZWUgdW51c2VkIGF0YV9xdWV1ZWRfY21kCisgKglAcWM6IENvbW1hbmQgdG8gY29tcGxldGUKKyAqCisgKglEZXNpZ25lZCB0byBmcmVlIHVudXNlZCBhdGFfcXVldWVkX2NtZCBvYmplY3QKKyAqCWluIGNhc2Ugc29tZXRoaW5nIHByZXZlbnRzIHVzaW5nIGl0LgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFfcWNfZnJlZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXFjLT5mbGFncyA9IDA7CisJcWMtPnRhZyA9IEFUQV9UQUdfUE9JU09OOworfQorCiAvKiBsaWJhdGEtYWNwaS5jICovCiAjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCiBleHRlcm4gdm9pZCBhdGFfYWNwaV9hc3NvY2lhdGVfc2F0YV9wb3J0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggMWNmYTc0NS4uNWI3MmU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC03MCw2ICs3MCw3IEBACiBzdGF0aWMgaW50IHN2aWFfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogc3RhdGljIGludCBzdmlhX3Njcl9yZWFkKHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyICp2YWwpOwogc3RhdGljIGludCBzdmlhX3Njcl93cml0ZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOworc3RhdGljIHZvaWQgc3ZpYV90Zl9sb2FkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKIHN0YXRpYyB2b2lkIHN2aWFfbm9vcF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IHZ0NjQyMF9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwogc3RhdGljIGludCB2dDY0MjFfcGF0YV9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCk7CkBAIC0xMDMsMjEgKzEwNCwyNiBAQAogCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZ0NjQyMF9zYXRhX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzdmlhX2Jhc2Vfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5zZmZfdGZfbG9hZAkJPSBzdmlhX3RmX2xvYWQsCit9OworCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnQ2NDIwX3NhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmc3ZpYV9iYXNlX29wcywKIAkuZnJlZXplCQkJPSBzdmlhX25vb3BfZnJlZXplLAogCS5wcmVyZXNldAkJPSB2dDY0MjBfcHJlcmVzZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnQ2NDIxX3BhdGFfb3BzID0gewotCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5pbmhlcml0cwkJPSAmc3ZpYV9iYXNlX29wcywKIAkuY2FibGVfZGV0ZWN0CQk9IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVjdCwKIAkuc2V0X3Bpb21vZGUJCT0gdnQ2NDIxX3NldF9waW9fbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gdnQ2NDIxX3NldF9kbWFfbW9kZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2dDY0MjFfc2F0YV9vcHMgPSB7Ci0JLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLmluaGVyaXRzCQk9ICZzdmlhX2Jhc2Vfb3BzLAogCS5zY3JfcmVhZAkJPSBzdmlhX3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gc3ZpYV9zY3Jfd3JpdGUsCiB9OwpAQCAtMTY4LDYgKzE3NCwyOSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqCXN2aWFfdGZfbG9hZCAtIHNlbmQgdGFza2ZpbGUgcmVnaXN0ZXJzIHRvIGhvc3QgY29udHJvbGxlcgorICoJQGFwOiBQb3J0IHRvIHdoaWNoIG91dHB1dCBpcyBzZW50CisgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKKyAqCisgKglPdXRwdXRzIEFUQSB0YXNrZmlsZSB0byBzdGFuZGFyZCBBVEEgaG9zdCBjb250cm9sbGVyLgorICoKKyAqCVRoaXMgaXMgdG8gZml4IHRoZSBpbnRlcm5hbCBidWcgb2YgdmlhIGNoaXBzZXRzLCB3aGljaCB3aWxsCisgKglyZXNldCB0aGUgZGV2aWNlIHJlZ2lzdGVyIGFmdGVyIGNoYW5naW5nIHRoZSBJRU4gYml0IG9uIGN0bAorICoJcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHN2aWFfdGZfbG9hZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHR0ZjsKKworCWlmICh0Zi0+Y3RsICE9IGFwLT5sYXN0X2N0bCkgIHsKKwkJdHRmID0gKnRmOworCQl0dGYuZmxhZ3MgfD0gQVRBX1RGTEFHX0RFVklDRTsKKwkJdGYgPSAmdHRmOworCX0KKwlhdGFfc2ZmX3RmX2xvYWQoYXAsIHRmKTsKK30KKwogc3RhdGljIHZvaWQgc3ZpYV9ub29wX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCS8qIFNvbWUgVklBIGNvbnRyb2xsZXJzIGNob2tlIGlmIEFUQV9OSUVOIGlzIG1hbmlwdWxhdGVkIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggYWYwZDE3NS4uNTI2MGU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21lbW9yeV9ob3RwbHVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0zMjUsNyArMzI3LDcgQEAKIAogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBDTEFTU19BVFRSKHByb2JlLCAwNzAwLCBOVUxMLCBtZW1vcnlfcHJvYmVfc3RvcmUpOworc3RhdGljIENMQVNTX0FUVFIocHJvYmUsIFNfSVdVU1IsIE5VTEwsIG1lbW9yeV9wcm9iZV9zdG9yZSk7CiAKIHN0YXRpYyBpbnQgbWVtb3J5X3Byb2JlX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9ub2RlLmMgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCmluZGV4IDUxMTZiNzguLmY1MjA3MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9ub2RlLmMKKysrIGIvZHJpdmVycy9iYXNlL25vZGUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBub2RlX2NsYXNzID0gewogCS5uYW1lID0gIm5vZGUiLApAQCAtNjEsMzQgKzYyLDUyIEBACiAJc2lfbWVtaW5mb19ub2RlKCZpLCBuaWQpOwogCiAJbiA9IHNwcmludGYoYnVmLCAiXG4iCi0JCSAgICAgICAiTm9kZSAlZCBNZW1Ub3RhbDogICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1lbUZyZWU6ICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTWVtVXNlZDogICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBBY3RpdmU6ICAgICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIEluYWN0aXZlOiAgICAgJThsdSBrQlxuIgotI2lmZGVmIENPTkZJR19ISUdITUVNCi0JCSAgICAgICAiTm9kZSAlZCBIaWdoVG90YWw6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIEhpZ2hGcmVlOiAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTG93VG90YWw6ICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBMb3dGcmVlOiAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1lbVRvdGFsOiAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBNZW1GcmVlOiAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTWVtVXNlZDogICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEFjdGl2ZTogICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZTogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlKGFub24pOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEluYWN0aXZlKGFub24pOiAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBY3RpdmUoZmlsZSk6ICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgSW5hY3RpdmUoZmlsZSk6ICU4bHUga0JcbiIKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCSAgICAgICAiTm9kZSAlZCBVbmV2aWN0YWJsZTogICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTWxvY2tlZDogICAgICAgICU4bHUga0JcbiIKICNlbmRpZgotCQkgICAgICAgIk5vZGUgJWQgRGlydHk6ICAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2s6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIEZpbGVQYWdlczogICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTWFwcGVkOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBBbm9uUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIFBhZ2VUYWJsZXM6ICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTkZTX1Vuc3RhYmxlOiAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBCb3VuY2U6ICAgICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIFdyaXRlYmFja1RtcDogJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgU2xhYjogICAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBTUmVjbGFpbWFibGU6ICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIFNVbnJlY2xhaW06ICAgJThsdSBrQlxuIiwKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCQkgICAgICAgIk5vZGUgJWQgSGlnaFRvdGFsOiAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEhpZ2hGcmVlOiAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBMb3dUb3RhbDogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTG93RnJlZTogICAgICAgICU4bHUga0JcbiIKKyNlbmRpZgorCQkgICAgICAgIk5vZGUgJWQgRGlydHk6ICAgICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIFdyaXRlYmFjazogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBGaWxlUGFnZXM6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTWFwcGVkOiAgICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEFub25QYWdlczogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBQYWdlVGFibGVzOiAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTkZTX1Vuc3RhYmxlOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEJvdW5jZTogICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2tUbXA6ICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgU2xhYjogICAgICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIFNSZWNsYWltYWJsZTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBTVW5yZWNsYWltOiAgICAgJThsdSBrQlxuIiwKIAkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtKSwKIAkJICAgICAgIG5pZCwgSyhpLmZyZWVyYW0pLAogCQkgICAgICAgbmlkLCBLKGkudG90YWxyYW0gLSBpLmZyZWVyYW0pLAotCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRSkpLAotCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0lOQUNUSVZFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0FOT04pICsKKwkJCQlub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9BQ1RJVkVfRklMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0lOQUNUSVZFX0FOT04pICsKKwkJCQlub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9GSUxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0FOT04pKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9BTk9OKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0ZJTEUpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9GSUxFKSksCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX1VORVZJQ1RBQkxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfTUxPQ0spKSwKKyNlbmRpZgogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJCSAgICAgICBuaWQsIEsoaS50b3RhbGhpZ2gpLAogCQkgICAgICAgbmlkLCBLKGkuZnJlZWhpZ2gpLApAQCAtMTczLDYgKzE5Miw4IEBACiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9tZW1pbmZvKTsKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX251bWFzdGF0KTsKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX2Rpc3RhbmNlKTsKKworCQlzY2FuX3VuZXZpY3RhYmxlX3JlZ2lzdGVyX25vZGUobm9kZSk7CiAJfQogCXJldHVybiBlcnJvcjsKIH0KQEAgLTE5Miw2ICsyMTMsOCBAQAogCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9udW1hc3RhdCk7CiAJc3lzZGV2X3JlbW92ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX2Rpc3RhbmNlKTsKIAorCXNjYW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKG5vZGUpOworCiAJc3lzZGV2X3VucmVnaXN0ZXIoJm5vZGUtPnN5c2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCmluZGV4IGEwMDJhMzguLmY2YTMzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwpAQCAtNzIsOSArNzIsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBEQUM5NjBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgREFDOTYwX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CiAJREFDOTYwX0NvbnRyb2xsZXJfVCAqcCA9IGRpc2stPnF1ZXVlLT5xdWV1ZWRhdGE7CiAJaW50IGRyaXZlX25yID0gKGxvbmcpZGlzay0+cHJpdmF0ZV9kYXRhOwogCkBAIC04OSw3ICs4OSw3IEBACiAJCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOworCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwogCiAJaWYgKCFnZXRfY2FwYWNpdHkocC0+ZGlza3NbZHJpdmVfbnJdKSkKIAkJcmV0dXJuIC1FTlhJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKaW5kZXggNzUxNmJhZi4uNGIxZDRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKQEAgLTE0MzcsMTAgKzE0MzcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgZmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKLQlpbnQgZHJpdmUgPSBpbWlub3IoaW5vZGUpICYgMzsKKwlzdHJ1Y3QgYW1pZ2FfZmxvcHB5X3N0cnVjdCAqcCA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlpbnQgZHJpdmUgPSBwIC0gdW5pdDsKIAlzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZ2V0cHJtOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopcGFyYW07CiAKQEAgLTE0NTEsNyArMTQ1Miw3IEBACiAJCQlyZWxfZmRjKCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0JCWZzeW5jX2JkZXYoaW5vZGUtPmlfYmRldik7CisJCWZzeW5jX2JkZXYoYmRldik7CiAJCWlmIChmZF9tb3Rvcl9vbihkcml2ZSkgPT0gMCkgewogCQkJcmVsX2ZkYygpOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNDY0LDEyICsxNDY1LDEyIEBACiAJCXJlbF9mZGMoKTsKIAkJYnJlYWs7CiAJY2FzZSBGREZNVFRSSzoKLQkJaWYgKHBhcmFtIDwgdW5pdFtkcml2ZV0udHlwZS0+dHJhY2tzICogdW5pdFtkcml2ZV0udHlwZS0+aGVhZHMpCisJCWlmIChwYXJhbSA8IHAtPnR5cGUtPnRyYWNrcyAqIHAtPnR5cGUtPmhlYWRzKQogCQl7CiAJCQlnZXRfZmRjKGRyaXZlKTsKIAkJCWlmIChmZF9zZWVrKGRyaXZlLHBhcmFtKSAhPSAwKXsKLQkJCQltZW1zZXQodW5pdFtkcml2ZV0udHJhY2tidWYsIEZEX0ZJTExfQllURSwKLQkJCQkgICAgICAgdW5pdFtkcml2ZV0uZHR5cGUtPnNlY3RzICogdW5pdFtkcml2ZV0udHlwZS0+c2VjdF9tdWx0ICogNTEyKTsKKwkJCQltZW1zZXQocC0+dHJhY2tidWYsIEZEX0ZJTExfQllURSwKKwkJCQkgICAgICAgcC0+ZHR5cGUtPnNlY3RzICogcC0+dHlwZS0+c2VjdF9tdWx0ICogNTEyKTsKIAkJCQlub25faW50X2ZsdXNoX3RyYWNrKGRyaXZlKTsKIAkJCX0KIAkJCWZsb3BweV9vZmYoZHJpdmUpOwpAQCAtMTQ4MCwxNCArMTQ4MSwxNCBAQAogCQlicmVhazsKIAljYXNlIEZERk1URU5EOgogCQlmbG9wcHlfb2ZmKGRyaXZlKTsKLQkJaW52YWxpZGF0ZV9iZGV2KGlub2RlLT5pX2JkZXYpOworCQlpbnZhbGlkYXRlX2JkZXYoYmRldik7CiAJCWJyZWFrOwogCWNhc2UgRkRHRVRQUk06CiAJCW1lbXNldCgodm9pZCAqKSZnZXRwcm0sIDAsIHNpemVvZiAoZ2V0cHJtKSk7Ci0JCWdldHBybS50cmFjaz11bml0W2RyaXZlXS50eXBlLT50cmFja3M7Ci0JCWdldHBybS5oZWFkPXVuaXRbZHJpdmVdLnR5cGUtPmhlYWRzOwotCQlnZXRwcm0uc2VjdD11bml0W2RyaXZlXS5kdHlwZS0+c2VjdHMgKiB1bml0W2RyaXZlXS50eXBlLT5zZWN0X211bHQ7Ci0JCWdldHBybS5zaXplPXVuaXRbZHJpdmVdLmJsb2NrczsKKwkJZ2V0cHJtLnRyYWNrPXAtPnR5cGUtPnRyYWNrczsKKwkJZ2V0cHJtLmhlYWQ9cC0+dHlwZS0+aGVhZHM7CisJCWdldHBybS5zZWN0PXAtPmR0eXBlLT5zZWN0cyAqIHAtPnR5cGUtPnNlY3RfbXVsdDsKKwkJZ2V0cHJtLnNpemU9cC0+YmxvY2tzOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZnZXRwcm0sIHNpemVvZihzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwpAQCAtMTUwMCwxMCArMTUwMSwxMCBAQAogCQlicmVhazsKICNpZmRlZiBSQVdfSU9DVEwKIAljYXNlIElPQ1RMX1JBV19UUkFDSzoKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCByYXdfYnVmLCB1bml0W2RyaXZlXS50eXBlLT5yZWFkX3NpemUpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsIHJhd19idWYsIHAtPnR5cGUtPnJlYWRfc2l6ZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJZWxzZQotCQkJcmV0dXJuIHVuaXRbZHJpdmVdLnR5cGUtPnJlYWRfc2l6ZTsKKwkJCXJldHVybiBwLT50eXBlLT5yZWFkX3NpemU7CiAjZW5kaWYKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9ERUJVRyAiZmRfaW9jdGw6IHVua25vd24gY21kICVkIGZvciBkcml2ZSAlZC4iLApAQCAtMTU0OCwxMCArMTU0OSwxMCBAQAogICogL2Rldi9QUzAgZXRjKSwgYW5kIGRpc2FsbG93cyBzaW11bHRhbmVvdXMgYWNjZXNzIHRvIHRoZSBzYW1lCiAgKiBkcml2ZSB3aXRoIGRpZmZlcmVudCBkZXZpY2UgbnVtYmVycy4KICAqLwotc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCWludCBkcml2ZSA9IGltaW5vcihpbm9kZSkgJiAzOwotCWludCBzeXN0ZW0gPSAgKGltaW5vcihpbm9kZSkgJiA0KSA+PiAyOworCWludCBkcml2ZSA9IE1JTk9SKGJkZXYtPmJkX2RldikgJiAzOworCWludCBzeXN0ZW0gPSAgKE1JTk9SKGJkZXYtPmJkX2RldikgJiA0KSA+PiAyOwogCWludCBvbGRfZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE1NjAsOSArMTU2MSw5IEBACiAJaWYgKGZkX3JlZltkcml2ZV0gJiYgb2xkX2RldiAhPSBzeXN0ZW0pCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoZmlscCAmJiBmaWxwLT5mX21vZGUgJiAzKSB7Ci0JCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwotCQlpZiAoZmlscC0+Zl9tb2RlICYgMiApIHsKKwlpZiAobW9kZSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSkgeworCQljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKKwkJaWYgKG1vZGUgJiBGTU9ERV9XUklURSkgewogCQkJaW50IHdycHJvdDsKIAogCQkJZ2V0X2ZkYyhkcml2ZSk7CkBAIC0xNTkyLDkgKzE1OTMsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCWludCBkcml2ZSA9IGltaW5vcihpbm9kZSkgJiAzOworCXN0cnVjdCBhbWlnYV9mbG9wcHlfc3RydWN0ICpwID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCWludCBkcml2ZSA9IHAgLSB1bml0OwogCiAJaWYgKHVuaXRbZHJpdmVdLmRpcnR5ID09IDEpIHsKIAkJZGVsX3RpbWVyIChmbHVzaF90cmFja190aW1lciArIGRyaXZlKTsKQEAgLTE2NTAsNyArMTY1Miw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGZsb3BweV9vcGVuLAogCS5yZWxlYXNlCT0gZmxvcHB5X3JlbGVhc2UsCi0JLmlvY3RsCQk9IGZkX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwJPSBmZF9pb2N0bCwKIAkuZ2V0Z2VvCQk9IGZkX2dldGdlbywKIAkubWVkaWFfY2hhbmdlZAk9IGFtaWdhX2Zsb3BweV9jaGFuZ2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwppbmRleCBiODI2NTRlLi4xNzQ3ZGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKG1hYywgU19JUlVHTywgYW9lZGlza19zaG93X21hYywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobmV0aWYsIFNfSVJVR08sIGFvZWRpc2tfc2hvd19uZXRpZiwgTlVMTCk7CiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTywgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTyB9LAogCS5zaG93ID0gYW9lZGlza19zaG93X2Z3dmVyLAogfTsKIApAQCAtMTE4LDEzICsxMTgsMTEgQEAKIH0KIAogc3RhdGljIGludAotYW9lYmxrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCithb2VibGtfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGFvZWRldiAqZDsKKwlzdHJ1Y3QgYW9lZGV2ICpkID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXVsb25nIGZsYWdzOwogCi0JZCA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZkLT5sb2NrLCBmbGFncyk7CiAJaWYgKGQtPmZsYWdzICYgREVWRkxfVVApIHsKIAkJZC0+bm9wZW4rKzsKQEAgLTEzNiwxMyArMTM0LDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWFvZWJsa19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorYW9lYmxrX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgYW9lZGV2ICpkOworCXN0cnVjdCBhb2VkZXYgKmQgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJdWxvbmcgZmxhZ3M7CiAKLQlkID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmxvY2ssIGZsYWdzKTsKIAogCWlmICgtLWQtPm5vcGVuID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggNDMyY2Y0MC4uNjllMWRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTM2MSwxMyArMzYxLDEzIEBACiBzdGF0aWMgdm9pZCBmaW5pc2hfZmRjX2RvbmUoIGludCBkdW1teSApOwogc3RhdGljIHZvaWQgc2V0dXBfcmVxX3BhcmFtcyggaW50IGRyaXZlICk7CiBzdGF0aWMgdm9pZCByZWRvX2ZkX3JlcXVlc3QoIHZvaWQpOwotc3RhdGljIGludCBmZF9pb2N0bCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludAorc3RhdGljIGludCBmZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludAogICAgICAgICAgICAgICAgICAgICAgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKTsKIHN0YXRpYyB2b2lkIGZkX3Byb2JlKCBpbnQgZHJpdmUgKTsKIHN0YXRpYyBpbnQgZmRfdGVzdF9kcml2ZV9wcmVzZW50KCBpbnQgZHJpdmUgKTsKIHN0YXRpYyB2b2lkIGNvbmZpZ190eXBlcyggdm9pZCApOwotc3RhdGljIGludCBmbG9wcHlfb3Blbiggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAgKTsKLXN0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2UoIHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAgKTsKK3N0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKTsKK3N0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xNDgzLDEwICsxNDgzLDEwIEBACiAJYXRhcmlfZW5hYmxlX2lycSggSVJRX01GUF9GREMgKTsKIH0KIAotc3RhdGljIGludCBmZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgZmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCBhdGFyaV9mbG9wcHlfc3RydWN0ICpmbG9wcHkgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGRyaXZlID0gZmxvcHB5IC0gdW5pdDsKIAlpbnQgdHlwZSA9IGZsb3BweS0+dHlwZTsKQEAgLTE2NjEsNyArMTY2MSw3IEBACiAJCS8qIGludmFsaWRhdGUgdGhlIGJ1ZmZlciB0cmFjayB0byBmb3JjZSBhIHJlcmVhZCAqLwogCQlCdWZmZXJEcml2ZSA9IC0xOwogCQlzZXRfYml0KGRyaXZlLCAmZmFrZV9jaGFuZ2UpOwotCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTgwNCwzNyArMTgwNCwzNiBAQAogICogZHJpdmUgd2l0aCBkaWZmZXJlbnQgZGV2aWNlIG51bWJlcnMuCiAgKi8KIAotc3RhdGljIGludCBmbG9wcHlfb3Blbiggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAgKQorc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGF0YXJpX2Zsb3BweV9zdHJ1Y3QgKnAgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaW50IHR5cGUgID0gaW1pbm9yKGlub2RlKSA+PiAyOworCXN0cnVjdCBhdGFyaV9mbG9wcHlfc3RydWN0ICpwID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCWludCB0eXBlICA9IE1JTk9SKGJkZXYtPmJkX2RldikgPj4gMjsKIAogCURQUklOVCgoImZkX29wZW46IHR5cGU9JWRcbiIsdHlwZSkpOwogCWlmIChwLT5yZWYgJiYgcC0+dHlwZSAhPSB0eXBlKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKHAtPnJlZiA9PSAtMSB8fCAocC0+cmVmICYmIGZpbHAtPmZfZmxhZ3MgJiBPX0VYQ0wpKQorCWlmIChwLT5yZWYgPT0gLTEgfHwgKHAtPnJlZiAmJiBtb2RlICYgRk1PREVfRVhDTCkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fRVhDTCkKKwlpZiAobW9kZSAmIEZNT0RFX0VYQ0wpCiAJCXAtPnJlZiA9IC0xOwogCWVsc2UKIAkJcC0+cmVmKys7CiAKIAlwLT50eXBlID0gdHlwZTsKIAotCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpCisJaWYgKG1vZGUgJiBGTU9ERV9OREVMQVkpCiAJCXJldHVybiAwOwogCi0JaWYgKGZpbHAtPmZfbW9kZSAmIDMpIHsKLQkJY2hlY2tfZGlza19jaGFuZ2UoaW5vZGUtPmlfYmRldik7Ci0JCWlmIChmaWxwLT5mX21vZGUgJiAyKSB7CisJaWYgKG1vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpIHsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CisJCWlmIChtb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJCWlmIChwLT53cHN0YXQpIHsKIAkJCQlpZiAocC0+cmVmIDwgMCkKIAkJCQkJcC0+cmVmID0gMDsKIAkJCQllbHNlCiAJCQkJCXAtPnJlZi0tOwotCQkJCWZsb3BweV9yZWxlYXNlKGlub2RlLCBmaWxwKTsKIAkJCQlyZXR1cm4gLUVST0ZTOwogCQkJfQogCQl9CkBAIC0xODQzLDkgKzE4NDIsOSBAQAogfQogCiAKLXN0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2UoIHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAgKQorc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBhdGFyaV9mbG9wcHlfc3RydWN0ICpwID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGFyaV9mbG9wcHlfc3RydWN0ICpwID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCWlmIChwLT5yZWYgPCAwKQogCQlwLT5yZWYgPSAwOwogCWVsc2UgaWYgKCFwLT5yZWYtLSkgewpAQCAtMTg1OSw3ICsxODU4LDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gZmxvcHB5X29wZW4sCiAJLnJlbGVhc2UJPSBmbG9wcHlfcmVsZWFzZSwKLQkuaW9jdGwJCT0gZmRfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAk9IGZkX2lvY3RsLAogCS5tZWRpYV9jaGFuZ2VkCT0gY2hlY2tfZmxvcHB5X2NoYW5nZSwKIAkucmV2YWxpZGF0ZV9kaXNrPSBmbG9wcHlfcmV2YWxpZGF0ZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2JyZC5jIGIvZHJpdmVycy9ibG9jay9icmQuYwppbmRleCBkMDcwZDQ5Li5iZGQ0ZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2JyZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYnJkLmMKQEAgLTM0MCwxMSArMzQwLDEwIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBicmRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGJyZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgZXJyb3I7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7CiAJc3RydWN0IGJyZF9kZXZpY2UgKmJyZCA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAogCWlmIChjbWQgIT0gQkxLRkxTQlVGKQpAQCAtMzc2LDcgKzM3NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYnJkX2ZvcHMgPSB7CiAJLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5pb2N0bCA9CQlicmRfaW9jdGwsCisJLmxvY2tlZF9pb2N0bCA9CQlicmRfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfWElQCiAJLmRpcmVjdF9hY2Nlc3MgPQlicmRfZGlyZWN0X2FjY2VzcywKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDFlMWY5MTUuLjQwMjM4ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTE1Miw5ICsxNTIsOSBAQAogCiBzdGF0aWMgdm9pZCBkb19jY2lzc19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19jY2lzc19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgaW50IGNjaXNzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKTsKLXN0YXRpYyBpbnQgY2Npc3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApOwotc3RhdGljIGludCBjY2lzc19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCitzdGF0aWMgaW50IGNjaXNzX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKTsKK3N0YXRpYyBpbnQgY2Npc3NfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKTsKK3N0YXRpYyBpbnQgY2Npc3NfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBjY2lzc19nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwogCkBAIC0xOTIsMTQgKzE5MiwxNSBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19QUk9DX0ZTICovCiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgbG9uZyBjY2lzc19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCBjY2lzc19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LAorCQkJICAgICAgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgY2Npc3NfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGNjaXNzX29wZW4sCiAJLnJlbGVhc2UgPSBjY2lzc19yZWxlYXNlLAotCS5pb2N0bCA9IGNjaXNzX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwgPSBjY2lzc19pb2N0bCwKIAkuZ2V0Z2VvID0gY2Npc3NfZ2V0Z2VvLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gY2Npc3NfY29tcGF0X2lvY3RsLApAQCAtNTQ3LDEzICs1NDgsMTMgQEAKIC8qCiAgKiBPcGVuLiAgTWFrZSBzdXJlIHRoZSBkZXZpY2UgaXMgcmVhbGx5IHRoZXJlLgogICovCi1zdGF0aWMgaW50IGNjaXNzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQorc3RhdGljIGludCBjY2lzc19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQljdGxyX2luZm9fdCAqaG9zdCA9IGdldF9ob3N0KGlub2RlLT5pX2JkZXYtPmJkX2Rpc2spOwotCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSBnZXRfZHJ2KGlub2RlLT5pX2JkZXYtPmJkX2Rpc2spOworCWN0bHJfaW5mb190ICpob3N0ID0gZ2V0X2hvc3QoYmRldi0+YmRfZGlzayk7CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IGdldF9kcnYoYmRldi0+YmRfZGlzayk7CiAKICNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJjY2lzc19vcGVuICVzXG4iLCBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUpOworCXByaW50ayhLRVJOX0RFQlVHICJjY2lzc19vcGVuICVzXG4iLCBiZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUpOwogI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCiAKIAlpZiAoaG9zdC0+YnVzeV9pbml0aWFsaXppbmcgfHwgZHJ2LT5idXN5X2NvbmZpZ3VyaW5nKQpAQCAtNTY3LDkgKzU2OCw5IEBACiAJICogZm9yICJyYXcgY29udHJvbGxlciIuCiAJICovCiAJaWYgKGRydi0+aGVhZHMgPT0gMCkgewotCQlpZiAoaW1pbm9yKGlub2RlKSAhPSAwKSB7CS8qIG5vdCBub2RlIDA/ICovCisJCWlmIChNSU5PUihiZGV2LT5iZF9kZXYpICE9IDApIHsJLyogbm90IG5vZGUgMD8gKi8KIAkJCS8qIGlmIG5vdCBub2RlIDAgbWFrZSBzdXJlIGl0IGlzIGEgcGFydGl0aW9uID0gMCAqLwotCQkJaWYgKGltaW5vcihpbm9kZSkgJiAweDBmKSB7CisJCQlpZiAoTUlOT1IoYmRldi0+YmRfZGV2KSAmIDB4MGYpIHsKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJCS8qIGlmIGl0IGlzLCBtYWtlIHN1cmUgd2UgaGF2ZSBhIExVTiBJRCAqLwogCQkJfSBlbHNlIGlmIChkcnYtPkx1bklEID09IDApIHsKQEAgLTU4NywxNCArNTg4LDEzIEBACiAvKgogICogQ2xvc2UuICBTeW5jIGZpcnN0LgogICovCi1zdGF0aWMgaW50IGNjaXNzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQorc3RhdGljIGludCBjY2lzc19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0JY3Rscl9pbmZvX3QgKmhvc3QgPSBnZXRfaG9zdChpbm9kZS0+aV9iZGV2LT5iZF9kaXNrKTsKLQlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gZ2V0X2Rydihpbm9kZS0+aV9iZGV2LT5iZF9kaXNrKTsKKwljdGxyX2luZm9fdCAqaG9zdCA9IGdldF9ob3N0KGRpc2spOworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSBnZXRfZHJ2KGRpc2spOwogCiAjaWZkZWYgQ0NJU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiY2Npc3NfcmVsZWFzZSAlc1xuIiwKLQkgICAgICAgaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+ZGlza19uYW1lKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY2Npc3NfcmVsZWFzZSAlc1xuIiwgZGlzay0+ZGlza19uYW1lKTsKICNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwogCiAJZHJ2LT51c2FnZV9jb3VudC0tOwpAQCAtNjA0LDIxICs2MDQsMjMgQEAKIAogI2lmZGVmIENPTkZJR19DT01QQVQKIAotc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgZG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkgICAgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0OwogCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gY2Npc3NfaW9jdGwoZi0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZiwgY21kLCBhcmcpOworCXJldCA9IGNjaXNzX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjY2lzc19pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBjbWQsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgaW50IGNjaXNzX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBjbWQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCBjY2lzc19pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCQkgIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCBjY2lzc19pb2N0bDMyX2JpZ19wYXNzdGhydShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCQkJICAgICAgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLXN0YXRpYyBsb25nIGNjaXNzX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgY2Npc3NfY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCSAgICAgIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENDSVNTX0dFVFBDSUlORk86CkBAIC02MzYsMjAgKzYzOCwyMCBAQAogCWNhc2UgQ0NJU1NfUkVHTkVXRDoKIAljYXNlIENDSVNTX1JFU0NBTkRJU0s6CiAJY2FzZSBDQ0lTU19HRVRMVU5JTkZPOgotCQlyZXR1cm4gZG9faW9jdGwoZiwgY21kLCBhcmcpOworCQlyZXR1cm4gZG9faW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwogCiAJY2FzZSBDQ0lTU19QQVNTVEhSVTMyOgotCQlyZXR1cm4gY2Npc3NfaW9jdGwzMl9wYXNzdGhydShmLCBjbWQsIGFyZyk7CisJCXJldHVybiBjY2lzc19pb2N0bDMyX3Bhc3N0aHJ1KGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAljYXNlIENDSVNTX0JJR19QQVNTVEhSVTMyOgotCQlyZXR1cm4gY2Npc3NfaW9jdGwzMl9iaWdfcGFzc3RocnUoZiwgY21kLCBhcmcpOworCQlyZXR1cm4gY2Npc3NfaW9jdGwzMl9iaWdfcGFzc3RocnUoYmRldiwgbW9kZSwgY21kLCBhcmcpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY2Npc3NfaW9jdGwzMl9wYXNzdGhydShzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgY21kLAotCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGNjaXNzX2lvY3RsMzJfcGFzc3RocnUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJCSAgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlJT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKikgYXJnOwpAQCAtNjc2LDcgKzY3OCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkb19pb2N0bChmLCBDQ0lTU19QQVNTVEhSVSwgKHVuc2lnbmVkIGxvbmcpcCk7CisJZXJyID0gZG9faW9jdGwoYmRldiwgbW9kZSwgQ0NJU1NfUEFTU1RIUlUsICh1bnNpZ25lZCBsb25nKXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9CkBAIC02ODcsOCArNjg5LDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGNjaXNzX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGNjaXNzX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCQkgICAgICB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCUJJR19JT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoQklHX0lPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICopIGFyZzsKQEAgLTcxNyw3ICs3MTksNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZG9faW9jdGwoZmlsZSwgQ0NJU1NfQklHX1BBU1NUSFJVLCAodW5zaWduZWQgbG9uZylwKTsKKwllcnIgPSBkb19pb2N0bChiZGV2LCBtb2RlLCBDQ0lTU19CSUdfUEFTU1RIUlUsICh1bnNpZ25lZCBsb25nKXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9CkBAIC03NDUsMTAgKzc0Nyw5IEBACiAvKgogICogaW9jdGwKICAqLwotc3RhdGljIGludCBjY2lzc19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCitzdGF0aWMgaW50IGNjaXNzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAljdGxyX2luZm9fdCAqaG9zdCA9IGdldF9ob3N0KGRpc2spOwogCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSBnZXRfZHJ2KGRpc2spOwpAQCAtMTIzMiw3ICsxMjMzLDcgQEAKIAljYXNlIFNHX0VNVUxBVEVEX0hPU1Q6CiAJY2FzZSBTR19JTzoKIAljYXNlIFNDU0lfSU9DVExfU0VORF9DT01NQU5EOgotCQlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZmlsZXAsIGRpc2stPnF1ZXVlLCBkaXNrLCBjbWQsIGFyZ3ApOworCQlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwgYXJncCk7CiAKIAkvKiBzY3NpX2NtZF9pb2N0bCB3b3VsZCBub3JtYWxseSBoYW5kbGUgdGhlc2UsIGJlbG93LCBidXQgKi8KIAkvKiB0aGV5IGFyZW4ndCBhIGdvb2QgZml0IGZvciBjY2lzcywgYXMgQ0QtUk9NcyBhcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwppbmRleCAzZDk2NzUyLi40N2QyMzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKKysrIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCkBAIC0xNTYsOSArMTU2LDkgQEAKIAl1bnNpZ25lZCBpbnQgYmxrY250LAogCXVuc2lnbmVkIGludCBsb2dfdW5pdCApOwogCi1zdGF0aWMgaW50IGlkYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCk7Ci1zdGF0aWMgaW50IGlkYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCk7Ci1zdGF0aWMgaW50IGlkYV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgaWRhX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKTsKK3N0YXRpYyBpbnQgaWRhX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSk7CitzdGF0aWMgaW50IGlkYV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgaWRhX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7CiBzdGF0aWMgaW50IGlkYV9jdGxyX2lvY3RsKGN0bHJfaW5mb190ICpoLCBpbnQgZHNrLCBpZGFfaW9jdGxfdCAqaW8pOwogCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gaWRhX29wZW4sCiAJLnJlbGVhc2UJPSBpZGFfcmVsZWFzZSwKLQkuaW9jdGwJCT0gaWRhX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwJPSBpZGFfaW9jdGwsCiAJLmdldGdlbwkJPSBpZGFfZ2V0Z2VvLAogCS5yZXZhbGlkYXRlX2Rpc2s9IGlkYV9yZXZhbGlkYXRlLAogfTsKQEAgLTgxOCwxMiArODE4LDEyIEBACiAvKgogICogT3Blbi4gIE1ha2Ugc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWxseSB0aGVyZS4KICAqLwotc3RhdGljIGludCBpZGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCitzdGF0aWMgaW50IGlkYV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlkcnZfaW5mb190ICpkcnYgPSBnZXRfZHJ2KGlub2RlLT5pX2JkZXYtPmJkX2Rpc2spOwotCWN0bHJfaW5mb190ICpob3N0ID0gZ2V0X2hvc3QoaW5vZGUtPmlfYmRldi0+YmRfZGlzayk7CisJZHJ2X2luZm9fdCAqZHJ2ID0gZ2V0X2RydihiZGV2LT5iZF9kaXNrKTsKKwljdGxyX2luZm9fdCAqaG9zdCA9IGdldF9ob3N0KGJkZXYtPmJkX2Rpc2spOwogCi0JREJHSU5GTyhwcmludGsoImlkYV9vcGVuICVzXG4iLCBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUpKTsKKwlEQkdJTkZPKHByaW50aygiaWRhX29wZW4gJXNcbiIsIGJkZXYtPmJkX2Rpc2stPmRpc2tfbmFtZSkpOwogCS8qCiAJICogUm9vdCBpcyBhbGxvd2VkIHRvIG9wZW4gcmF3IHZvbHVtZSB6ZXJvIGV2ZW4gaWYgaXQncyBub3QgY29uZmlndXJlZAogCSAqIHNvIGFycmF5IGNvbmZpZyBjYW4gc3RpbGwgd29yay4gIEkgZG9uJ3QgdGhpbmsgSSByZWFsbHkgbGlrZSB0aGlzLApAQCAtODQzLDkgKzg0Myw5IEBACiAvKgogICogQ2xvc2UuICBTeW5jIGZpcnN0LgogICovCi1zdGF0aWMgaW50IGlkYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3N0YXRpYyBpbnQgaWRhX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQljdGxyX2luZm9fdCAqaG9zdCA9IGdldF9ob3N0KGlub2RlLT5pX2JkZXYtPmJkX2Rpc2spOworCWN0bHJfaW5mb190ICpob3N0ID0gZ2V0X2hvc3QoZGlzayk7CiAJaG9zdC0+dXNhZ2VfY291bnQtLTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjgsMTAgKzExMjgsMTAgQEAKICAqICBpZGFfaW9jdGwgZG9lcyBzb21lIG1pc2NlbGxhbmVvdXMgc3R1ZmYgbGlrZSByZXBvcnRpbmcgZHJpdmUgZ2VvbWV0cnksCiAgKiAgc2V0dGluZyByZWFkYWhlYWQgYW5kIHN1Ym1pdHRpbmcgY29tbWFuZHMgZnJvbSB1c2Vyc3BhY2UgdG8gdGhlIGNvbnRyb2xsZXIuCiAgKi8KLXN0YXRpYyBpbnQgaWRhX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGlkYV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRydl9pbmZvX3QgKmRydiA9IGdldF9kcnYoaW5vZGUtPmlfYmRldi0+YmRfZGlzayk7Ci0JY3Rscl9pbmZvX3QgKmhvc3QgPSBnZXRfaG9zdChpbm9kZS0+aV9iZGV2LT5iZF9kaXNrKTsKKwlkcnZfaW5mb190ICpkcnYgPSBnZXRfZHJ2KGJkZXYtPmJkX2Rpc2spOworCWN0bHJfaW5mb190ICpob3N0ID0gZ2V0X2hvc3QoYmRldi0+YmRfZGlzayk7CiAJaW50IGVycm9yOwogCWlkYV9pb2N0bF90IF9fdXNlciAqaW8gPSAoaWRhX2lvY3RsX3QgX191c2VyICopYXJnOwogCWlkYV9pb2N0bF90ICpteV9pbzsKQEAgLTExNjUsNyArMTE2NSw3IEBACiAJCXB1dF91c2VyKGhvc3QtPmN0bHJfc2lnLCAoaW50IF9fdXNlciAqKWFyZyk7CiAJCXJldHVybiAwOwogCWNhc2UgSURBUkVWQUxJREFURVZPTFM6Ci0JCWlmIChpbWlub3IoaW5vZGUpICE9IDApCisJCWlmIChNSU5PUihiZGV2LT5iZF9kZXYpICE9IDApCiAJCQlyZXR1cm4gLUVOWElPOwogCQlyZXR1cm4gcmV2YWxpZGF0ZV9hbGx2b2woaG9zdCk7CiAJY2FzZSBJREFEUklWRVJWRVJTSU9OOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggMmNlYTI3YS4uMTRkYjc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0zNDUwLDE0ICszNDUwLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCitzdGF0aWMgaW50IGZkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0jZGVmaW5lIEZEX0lPQ1RMX0FMTE9XRUQgKChmaWxwKSAmJiAoZmlscCktPnByaXZhdGVfZGF0YSkKKyNkZWZpbmUgRkRfSU9DVExfQUxMT1dFRCAobW9kZSAmIChGTU9ERV9XUklURXxGTU9ERV9XUklURV9JT0NUTCkpCiAjZGVmaW5lIE9VVChjLHgpIGNhc2UgYzogb3V0cGFyYW0gPSAoY29uc3QgY2hhciAqKSAoeCk7IGJyZWFrCiAjZGVmaW5lIElOKGMseCx0YWcpIGNhc2UgYzogKih4KSA9IGlucGFyYW0uIHRhZyA7IHJldHVybiAwCiAKLQlpbnQgZHJpdmUgPSAobG9uZylpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGRyaXZlID0gKGxvbmcpYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCB0eXBlID0gSVRZUEUoVURSUy0+ZmRfZGV2aWNlKTsKIAlpbnQgaTsKIAlpbnQgcmV0OwpAQCAtMzUxNiwxMSArMzUxNiwxMSBAQAogCQkJY3VycmVudF90eXBlW2RyaXZlXSA9IE5VTEw7CiAJCQlmbG9wcHlfc2l6ZXNbZHJpdmVdID0gTUFYX0RJU0tfU0laRSA8PCAxOwogCQkJVURSUy0+a2VlcF9kYXRhID0gMDsKLQkJCXJldHVybiBpbnZhbGlkYXRlX2RyaXZlKGlub2RlLT5pX2JkZXYpOworCQkJcmV0dXJuIGludmFsaWRhdGVfZHJpdmUoYmRldik7CiAJCWNhc2UgRkRTRVRQUk06CiAJCWNhc2UgRkRERUZQUk06CiAJCQlyZXR1cm4gc2V0X2dlb21ldHJ5KGNtZCwgJmlucGFyYW0uZywKLQkJCQkJICAgIGRyaXZlLCB0eXBlLCBpbm9kZS0+aV9iZGV2KTsKKwkJCQkJICAgIGRyaXZlLCB0eXBlLCBiZGV2KTsKIAkJY2FzZSBGREdFVFBSTToKIAkJCUVDQUxMKGdldF9mbG9wcHlfZ2VvbWV0cnkoZHJpdmUsIHR5cGUsCiAJCQkJCQkgIChzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqKikKQEAgLTM1NTEsNyArMzU1MSw3IEBACiAJCWNhc2UgRkRGTVRFTkQ6CiAJCWNhc2UgRkRGTFVTSDoKIAkJCUxPQ0tfRkRDKGRyaXZlLCAxKTsKLQkJCXJldHVybiBpbnZhbGlkYXRlX2RyaXZlKGlub2RlLT5pX2JkZXYpOworCQkJcmV0dXJuIGludmFsaWRhdGVfZHJpdmUoYmRldik7CiAKIAkJY2FzZSBGRFNFVEVNU0dUUkVTSDoKIAkJCVVEUC0+bWF4X2Vycm9ycy5yZXBvcnRpbmcgPQpAQCAtMzY1OSw5ICszNjU5LDkgQEAKIAkJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCWludCBkcml2ZSA9IChsb25nKWlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlpbnQgZHJpdmUgPSAobG9uZylkaXNrLT5wcml2YXRlX2RhdGE7CiAKIAltdXRleF9sb2NrKCZvcGVuX2xvY2spOwogCWlmIChVRFJTLT5mZF9yZWYgPCAwKQpAQCAtMzY4MiwxOCArMzY4MiwxNyBAQAogICogL2Rldi9QUzAgZXRjKSwgYW5kIGRpc2FsbG93cyBzaW11bHRhbmVvdXMgYWNjZXNzIHRvIHRoZSBzYW1lCiAgKiBkcml2ZSB3aXRoIGRpZmZlcmVudCBkZXZpY2UgbnVtYmVycy4KICAqLwotc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCWludCBkcml2ZSA9IChsb25nKWlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpbnQgb2xkX2RldjsKKwlpbnQgZHJpdmUgPSAobG9uZyliZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IG9sZF9kZXYsIG5ld19kZXY7CiAJaW50IHRyeTsKIAlpbnQgcmVzID0gLUVCVVNZOwogCWNoYXIgKnRtcDsKIAotCWZpbHAtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopMDsKIAltdXRleF9sb2NrKCZvcGVuX2xvY2spOwogCW9sZF9kZXYgPSBVRFJTLT5mZF9kZXZpY2U7Ci0JaWYgKG9wZW5lZF9iZGV2W2RyaXZlXSAmJiBvcGVuZWRfYmRldltkcml2ZV0gIT0gaW5vZGUtPmlfYmRldikKKwlpZiAob3BlbmVkX2JkZXZbZHJpdmVdICYmIG9wZW5lZF9iZGV2W2RyaXZlXSAhPSBiZGV2KQogCQlnb3RvIG91dDI7CiAKIAlpZiAoIVVEUlMtPmZkX3JlZiAmJiAoVURQLT5mbGFncyAmIEZEX0JST0tFTl9EQ0wpKSB7CkBAIC0zNzAxLDE1ICszNzAwLDE1IEBACiAJCVVTRVRGKEZEX1ZFUklGWSk7CiAJfQogCi0JaWYgKFVEUlMtPmZkX3JlZiA9PSAtMSB8fCAoVURSUy0+ZmRfcmVmICYmIChmaWxwLT5mX2ZsYWdzICYgT19FWENMKSkpCisJaWYgKFVEUlMtPmZkX3JlZiA9PSAtMSB8fCAoVURSUy0+ZmRfcmVmICYmIChtb2RlICYgRk1PREVfRVhDTCkpKQogCQlnb3RvIG91dDI7CiAKLQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fRVhDTCkKKwlpZiAobW9kZSAmIEZNT0RFX0VYQ0wpCiAJCVVEUlMtPmZkX3JlZiA9IC0xOwogCWVsc2UKIAkJVURSUy0+ZmRfcmVmKys7CiAKLQlvcGVuZWRfYmRldltkcml2ZV0gPSBpbm9kZS0+aV9iZGV2OworCW9wZW5lZF9iZGV2W2RyaXZlXSA9IGJkZXY7CiAKIAlyZXMgPSAtRU5YSU87CiAKQEAgLTM3NDQsMzEgKzM3NDMsMjYgQEAKIAkJfQogCX0KIAotCVVEUlMtPmZkX2RldmljZSA9IGltaW5vcihpbm9kZSk7Ci0Jc2V0X2NhcGFjaXR5KGRpc2tzW2RyaXZlXSwgZmxvcHB5X3NpemVzW2ltaW5vcihpbm9kZSldKTsKLQlpZiAob2xkX2RldiAhPSAtMSAmJiBvbGRfZGV2ICE9IGltaW5vcihpbm9kZSkpIHsKKwluZXdfZGV2ID0gTUlOT1IoYmRldi0+YmRfZGV2KTsKKwlVRFJTLT5mZF9kZXZpY2UgPSBuZXdfZGV2OworCXNldF9jYXBhY2l0eShkaXNrc1tkcml2ZV0sIGZsb3BweV9zaXplc1tuZXdfZGV2XSk7CisJaWYgKG9sZF9kZXYgIT0gLTEgJiYgb2xkX2RldiAhPSBuZXdfZGV2KSB7CiAJCWlmIChidWZmZXJfZHJpdmUgPT0gZHJpdmUpCiAJCQlidWZmZXJfdHJhY2sgPSAtMTsKIAl9CiAKLQkvKiBBbGxvdyBpb2N0bHMgaWYgd2UgaGF2ZSB3cml0ZS1wZXJtaXNzaW9ucyBldmVuIGlmIHJlYWQtb25seSBvcGVuLgotCSAqIE5lZWRlZCBzbyB0aGF0IHByb2dyYW1zIHN1Y2ggYXMgZmRyYXdjbWQgc3RpbGwgY2FuIHdvcmsgb24gd3JpdGUKLQkgKiBwcm90ZWN0ZWQgZGlza3MgKi8KLQlpZiAoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB8fCAhZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9XUklURSkpCi0JCWZpbHAtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopODsKLQogCWlmIChVRkRDUy0+cmF3Y21kID09IDEpCiAJCVVGRENTLT5yYXdjbWQgPSAyOwogCi0JaWYgKCEoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSkgewotCQlpZiAoZmlscC0+Zl9tb2RlICYgMykgeworCWlmICghKG1vZGUgJiBGTU9ERV9OREVMQVkpKSB7CisJCWlmIChtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSB7CiAJCQlVRFJTLT5sYXN0X2NoZWNrZWQgPSAwOwotCQkJY2hlY2tfZGlza19jaGFuZ2UoaW5vZGUtPmlfYmRldik7CisJCQljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKIAkJCWlmIChVVEVTVEYoRkRfRElTS19DSEFOR0VEKSkKIAkJCQlnb3RvIG91dDsKIAkJfQogCQlyZXMgPSAtRVJPRlM7Ci0JCWlmICgoZmlscC0+Zl9tb2RlICYgMikgJiYgIShVVEVTVEYoRkRfRElTS19XUklUQUJMRSkpKQorCQlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgIShVVEVTVEYoRkRfRElTS19XUklUQUJMRSkpKQogCQkJZ290byBvdXQ7CiAJfQogCW11dGV4X3VubG9jaygmb3Blbl9sb2NrKTsKQEAgLTM5MTEsNyArMzkwNSw3IEBACiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gZmxvcHB5X29wZW4sCiAJLnJlbGVhc2UJCT0gZmxvcHB5X3JlbGVhc2UsCi0JLmlvY3RsCQkJPSBmZF9pb2N0bCwKKwkubG9ja2VkX2lvY3RsCQk9IGZkX2lvY3RsLAogCS5nZXRnZW8JCQk9IGZkX2dldGdlbywKIAkubWVkaWFfY2hhbmdlZAkJPSBjaGVja19mbG9wcHlfY2hhbmdlLAogCS5yZXZhbGlkYXRlX2Rpc2sJPSBmbG9wcHlfcmV2YWxpZGF0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggZDNhMjViMC4uM2YwOWNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogICogc3BhY2Ugb3BlcmF0aW9ucyB3cml0ZV9iZWdpbiBhbmQgd3JpdGVfZW5kLgogICovCiBzdGF0aWMgaW50IGRvX2xvX3NlbmRfYW9wcyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKLQkJaW50IGJzaXplLCBsb2ZmX3QgcG9zLCBzdHJ1Y3QgcGFnZSAqdW51c2VkKQorCQlsb2ZmX3QgcG9zLCBzdHJ1Y3QgcGFnZSAqdW51c2VkKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gbG8tPmxvX2JhY2tpbmdfZmlsZTsgLyoga3Vkb3MgdG8gTkZzY2tpbmdTICovCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CkBAIC0zMDIsNyArMzAyLDcgQEAKICAqIGZpbGVzeXN0ZW1zLgogICovCiBzdGF0aWMgaW50IGRvX2xvX3NlbmRfZGlyZWN0X3dyaXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sCi0JCXN0cnVjdCBiaW9fdmVjICpidmVjLCBpbnQgYnNpemUsIGxvZmZfdCBwb3MsIHN0cnVjdCBwYWdlICpwYWdlKQorCQlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3NpemVfdCBidyA9IF9fZG9fbG9fc2VuZF93cml0ZShsby0+bG9fYmFja2luZ19maWxlLAogCQkJa21hcChidmVjLT5idl9wYWdlKSArIGJ2ZWMtPmJ2X29mZnNldCwKQEAgLTMyNiw3ICszMjYsNyBAQAogICogZGVzdGluYXRpb24gcGFnZXMgb2YgdGhlIGJhY2tpbmcgZmlsZS4KICAqLwogc3RhdGljIGludCBkb19sb19zZW5kX3dyaXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBiaW9fdmVjICpidmVjLAotCQlpbnQgYnNpemUsIGxvZmZfdCBwb3MsIHN0cnVjdCBwYWdlICpwYWdlKQorCQlsb2ZmX3QgcG9zLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlpbnQgcmV0ID0gbG9fZG9fdHJhbnNmZXIobG8sIFdSSVRFLCBwYWdlLCAwLCBidmVjLT5idl9wYWdlLAogCQkJYnZlYy0+YnZfb2Zmc2V0LCBidmVjLT5idl9sZW4sIHBvcyA+PiA5KTsKQEAgLTM0MSwxMCArMzQxLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGxvX3NlbmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJpbyAqYmlvLCBpbnQgYnNpemUsCi0JCWxvZmZfdCBwb3MpCitzdGF0aWMgaW50IGxvX3NlbmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJpbyAqYmlvLCBsb2ZmX3QgcG9zKQogewotCWludCAoKmRvX2xvX3NlbmQpKHN0cnVjdCBsb29wX2RldmljZSAqLCBzdHJ1Y3QgYmlvX3ZlYyAqLCBpbnQsIGxvZmZfdCwKKwlpbnQgKCpkb19sb19zZW5kKShzdHJ1Y3QgbG9vcF9kZXZpY2UgKiwgc3RydWN0IGJpb192ZWMgKiwgbG9mZl90LAogCQkJc3RydWN0IHBhZ2UgKnBhZ2UpOwogCXN0cnVjdCBiaW9fdmVjICpidmVjOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKQEAgLTM2Miw3ICszNjEsNyBAQAogCQl9CiAJfQogCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIGJpbywgaSkgewotCQlyZXQgPSBkb19sb19zZW5kKGxvLCBidmVjLCBic2l6ZSwgcG9zLCBwYWdlKTsKKwkJcmV0ID0gZG9fbG9fc2VuZChsbywgYnZlYywgcG9zLCBwYWdlKTsKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAkJcG9zICs9IGJ2ZWMtPmJ2X2xlbjsKQEAgLTQ3OCw3ICs0NzcsNyBAQAogCiAJcG9zID0gKChsb2ZmX3QpIGJpby0+Ymlfc2VjdG9yIDw8IDkpICsgbG8tPmxvX29mZnNldDsKIAlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpCi0JCXJldCA9IGxvX3NlbmQobG8sIGJpbywgbG8tPmxvX2Jsb2Nrc2l6ZSwgcG9zKTsKKwkJcmV0ID0gbG9fc2VuZChsbywgYmlvLCBwb3MpOwogCWVsc2UKIAkJcmV0ID0gbG9fcmVjZWl2ZShsbywgYmlvLCBsby0+bG9fYmxvY2tzaXplLCBwb3MpOwogCXJldHVybiByZXQ7CkBAIC02NTIsOCArNjUxLDggQEAKICAqIFRoaXMgY2FuIG9ubHkgd29yayBpZiB0aGUgbG9vcCBkZXZpY2UgaXMgdXNlZCByZWFkLW9ubHksIGFuZCBpZiB0aGUKICAqIG5ldyBiYWNraW5nIHN0b3JlIGlzIHRoZSBzYW1lIHNpemUgYW5kIHR5cGUgYXMgdGhlIG9sZCBiYWNraW5nIHN0b3JlLgogICovCi1zdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpsb19maWxlLAotCQkgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGFyZykKK3N0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCSAgdW5zaWduZWQgaW50IGFyZykKIHsKIAlzdHJ1Y3QgZmlsZQkqZmlsZSwgKm9sZF9maWxlOwogCXN0cnVjdCBpbm9kZQkqaW5vZGU7CkBAIC03MTIsNyArNzExLDcgQEAKIAlyZXR1cm4gaSAmJiBTX0lTQkxLKGktPmlfbW9kZSkgJiYgTUFKT1IoaS0+aV9yZGV2KSA9PSBMT09QX01BSk9SOwogfQogCi1zdGF0aWMgaW50IGxvb3Bfc2V0X2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpsb19maWxlLAorc3RhdGljIGludCBsb29wX3NldF9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBmbW9kZV90IG1vZGUsCiAJCSAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgYXJnKQogewogCXN0cnVjdCBmaWxlCSpmaWxlLCAqZjsKQEAgLTc0MCw3ICs3MzksNyBAQAogCXdoaWxlIChpc19sb29wX2RldmljZShmKSkgewogCQlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmw7CiAKLQkJaWYgKGYtPmZfbWFwcGluZy0+aG9zdC0+aV9yZGV2ID09IGxvX2ZpbGUtPmZfbWFwcGluZy0+aG9zdC0+aV9yZGV2KQorCQlpZiAoZi0+Zl9tYXBwaW5nLT5ob3N0LT5pX2JkZXYgPT0gYmRldikKIAkJCWdvdG8gb3V0X3B1dGY7CiAKIAkJbCA9IGYtPmZfbWFwcGluZy0+aG9zdC0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CkBAIC03ODYsNyArNzg1LDcgQEAKIAkJZ290byBvdXRfcHV0ZjsKIAl9CiAKLQlpZiAoIShsb19maWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJaWYgKCEobW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJbG9fZmxhZ3MgfD0gTE9fRkxBR1NfUkVBRF9PTkxZOwogCiAJc2V0X2RldmljZV9ybyhiZGV2LCAobG9fZmxhZ3MgJiBMT19GTEFHU19SRUFEX09OTFkpICE9IDApOwpAQCAtOTE4LDkgKzkxNywxMSBAQAogCW1lbXNldChsby0+bG9fZW5jcnlwdF9rZXksIDAsIExPX0tFWV9TSVpFKTsKIAltZW1zZXQobG8tPmxvX2NyeXB0X25hbWUsIDAsIExPX05BTUVfU0laRSk7CiAJbWVtc2V0KGxvLT5sb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7Ci0JaW52YWxpZGF0ZV9iZGV2KGJkZXYpOworCWlmIChiZGV2KQorCQlpbnZhbGlkYXRlX2JkZXYoYmRldik7CiAJc2V0X2NhcGFjaXR5KGxvLT5sb19kaXNrLCAwKTsKLQliZF9zZXRfc2l6ZShiZGV2LCAwKTsKKwlpZiAoYmRldikKKwkJYmRfc2V0X3NpemUoYmRldiwgMCk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC0+Zl9tYXBwaW5nLCBnZnApOwogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7CiAJZnB1dChmaWxwKTsKQEAgLTExMzcsMjIgKzExMzgsMjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCitzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAogCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBMT09QX1NFVF9GRDoKLQkJZXJyID0gbG9vcF9zZXRfZmQobG8sIGZpbGUsIGlub2RlLT5pX2JkZXYsIGFyZyk7CisJCWVyciA9IGxvb3Bfc2V0X2ZkKGxvLCBtb2RlLCBiZGV2LCBhcmcpOwogCQlicmVhazsKIAljYXNlIExPT1BfQ0hBTkdFX0ZEOgotCQllcnIgPSBsb29wX2NoYW5nZV9mZChsbywgZmlsZSwgaW5vZGUtPmlfYmRldiwgYXJnKTsKKwkJZXJyID0gbG9vcF9jaGFuZ2VfZmQobG8sIGJkZXYsIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgTE9PUF9DTFJfRkQ6Ci0JCWVyciA9IGxvb3BfY2xyX2ZkKGxvLCBpbm9kZS0+aV9iZGV2KTsKKwkJZXJyID0gbG9vcF9jbHJfZmQobG8sIGJkZXYpOwogCQlicmVhazsKIAljYXNlIExPT1BfU0VUX1NUQVRVUzoKIAkJZXJyID0gbG9vcF9zZXRfc3RhdHVzX29sZChsbywgKHN0cnVjdCBsb29wX2luZm8gX191c2VyICopIGFyZyk7CkBAIC0xMjkyLDEwICsxMjkzLDEwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGxvbmcgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCiAJc3dpdGNoKGNtZCkgewpAQCAtMTMxNyw3ICsxMzE4LDcgQEAKIAkJYXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTsKIAljYXNlIExPT1BfU0VUX0ZEOgogCWNhc2UgTE9PUF9DSEFOR0VfRkQ6Ci0JCWVyciA9IGxvX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCWVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0lPQ1RMQ01EOwpAQCAtMTMyNyw5ICsxMzI4LDkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGxvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGxvX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAogCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCWxvLT5sb19yZWZjbnQrKzsKQEAgLTEzMzgsMTUgKzEzMzksMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJLS1sby0+bG9fcmVmY250OwogCiAJaWYgKChsby0+bG9fZmxhZ3MgJiBMT19GTEFHU19BVVRPQ0xFQVIpICYmICFsby0+bG9fcmVmY250KQotCQlsb29wX2Nscl9mZChsbywgaW5vZGUtPmlfYmRldik7CisJCWxvb3BfY2xyX2ZkKGxvLCBOVUxMKTsKIAogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IDdiMzM1MTIuLmQzYTkxY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwaWRfYXR0ciA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAicGlkIiwgLm1vZGUgPSBTX0lSVUdPLCAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5hdHRyID0geyAubmFtZSA9ICJwaWQiLCAubW9kZSA9IFNfSVJVR099LAogCS5zaG93ID0gcGlkX3Nob3csCiB9OwogCkBAIC01NTcsMTAgKzU1NywxMSBAQAogCX0KIH0KIAotc3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IG5iZF9kZXZpY2UgKmxvID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBuYmRfZGV2aWNlICpsbyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IHJlcXVlc3Qgc3JlcSA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CkBAIC02MTIsOCArNjEzLDcgQEAKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlmaWxlID0gZmdldChhcmcpOwogCQlpZiAoZmlsZSkgewotCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7Ci0JCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJCWlmIChTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkgewogCQkJCWxvLT5maWxlID0gZmlsZTsKIAkJCQlsby0+c29jayA9IFNPQ0tFVF9JKGlub2RlKTsKQEAgLTYyOCwxNCArNjI4LDE0IEBACiAJY2FzZSBOQkRfU0VUX0JMS1NJWkU6CiAJCWxvLT5ibGtzaXplID0gYXJnOwogCQlsby0+Ynl0ZXNpemUgJj0gfihsby0+Ymxrc2l6ZS0xKTsKLQkJaW5vZGUtPmlfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA9IGxvLT5ieXRlc2l6ZTsKLQkJc2V0X2Jsb2Nrc2l6ZShpbm9kZS0+aV9iZGV2LCBsby0+Ymxrc2l6ZSk7CisJCWJkZXYtPmJkX2lub2RlLT5pX3NpemUgPSBsby0+Ynl0ZXNpemU7CisJCXNldF9ibG9ja3NpemUoYmRldiwgbG8tPmJsa3NpemUpOwogCQlzZXRfY2FwYWNpdHkobG8tPmRpc2ssIGxvLT5ieXRlc2l6ZSA+PiA5KTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBOQkRfU0VUX1NJWkU6CiAJCWxvLT5ieXRlc2l6ZSA9IGFyZyAmIH4obG8tPmJsa3NpemUtMSk7Ci0JCWlub2RlLT5pX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPSBsby0+Ynl0ZXNpemU7Ci0JCXNldF9ibG9ja3NpemUoaW5vZGUtPmlfYmRldiwgbG8tPmJsa3NpemUpOworCQliZGV2LT5iZF9pbm9kZS0+aV9zaXplID0gbG8tPmJ5dGVzaXplOworCQlzZXRfYmxvY2tzaXplKGJkZXYsIGxvLT5ibGtzaXplKTsKIAkJc2V0X2NhcGFjaXR5KGxvLT5kaXNrLCBsby0+Ynl0ZXNpemUgPj4gOSk7CiAJCXJldHVybiAwOwogCWNhc2UgTkJEX1NFVF9USU1FT1VUOgpAQCAtNjQzLDggKzY0Myw4IEBACiAJCXJldHVybiAwOwogCWNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzoKIAkJbG8tPmJ5dGVzaXplID0gKCh1NjQpIGFyZykgKiBsby0+Ymxrc2l6ZTsKLQkJaW5vZGUtPmlfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA9IGxvLT5ieXRlc2l6ZTsKLQkJc2V0X2Jsb2Nrc2l6ZShpbm9kZS0+aV9iZGV2LCBsby0+Ymxrc2l6ZSk7CisJCWJkZXYtPmJkX2lub2RlLT5pX3NpemUgPSBsby0+Ynl0ZXNpemU7CisJCXNldF9ibG9ja3NpemUoYmRldiwgbG8tPmJsa3NpemUpOwogCQlzZXRfY2FwYWNpdHkobG8tPmRpc2ssIGxvLT5ieXRlc2l6ZSA+PiA5KTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBOQkRfRE9fSVQ6CkBAIC02NjYsMTAgKzY2NiwxMCBAQAogCQlpZiAoZmlsZSkKIAkJCWZwdXQoZmlsZSk7CiAJCWxvLT5ieXRlc2l6ZSA9IDA7Ci0JCWlub2RlLT5pX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPSAwOworCQliZGV2LT5iZF9pbm9kZS0+aV9zaXplID0gMDsKIAkJc2V0X2NhcGFjaXR5KGxvLT5kaXNrLCAwKTsKIAkJaWYgKG1heF9wYXJ0ID4gMCkKLQkJCWlvY3RsX2J5X2JkZXYoaW5vZGUtPmlfYmRldiwgQkxLUlJQQVJULCAwKTsKKwkJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKIAkJcmV0dXJuIGxvLT5oYXJkZXJyb3I7CiAJY2FzZSBOQkRfQ0xFQVJfUVVFOgogCQkvKgpAQCAtNjgwLDcgKzY4MCw3IEBACiAJCXJldHVybiAwOwogCWNhc2UgTkJEX1BSSU5UX0RFQlVHOgogCQlwcmludGsoS0VSTl9JTkZPICIlczogbmV4dCA9ICVwLCBwcmV2ID0gJXAsIGhlYWQgPSAlcFxuIiwKLQkJCWlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPmRpc2tfbmFtZSwKKwkJCWJkZXYtPmJkX2Rpc2stPmRpc2tfbmFtZSwKIAkJCWxvLT5xdWV1ZV9oZWFkLm5leHQsIGxvLT5xdWV1ZV9oZWFkLnByZXYsCiAJCQkmbG8tPnF1ZXVlX2hlYWQpOwogCQlyZXR1cm4gMDsKQEAgLTY5MSw3ICs2OTEsNyBAQAogc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9CiB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmlvY3RsID0JbmJkX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwgPQluYmRfaW9jdGwsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwppbmRleCBiOGE5OTRhLi5lOTFkNGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwpAQCAtMjIzLDIzICsyMjMsMjQgQEAKIAogLyoga2VybmVsIGdsdWUgc3RydWN0dXJlcyAqLwogCi1zdGF0aWMgaW50IHBjZF9ibG9ja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBwY2RfYmxvY2tfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IHBjZF91bml0ICpjZCA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gY2Ryb21fb3BlbigmY2QtPmluZm8sIGlub2RlLCBmaWxlKTsKKwlzdHJ1Y3QgcGNkX3VuaXQgKmNkID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBjZHJvbV9vcGVuKCZjZC0+aW5mbywgYmRldiwgbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgcGNkX2Jsb2NrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHBjZF9ibG9ja19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IHBjZF91bml0ICpjZCA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gY2Ryb21fcmVsZWFzZSgmY2QtPmluZm8sIGZpbGUpOworCXN0cnVjdCBwY2RfdW5pdCAqY2QgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJY2Ryb21fcmVsZWFzZSgmY2QtPmluZm8sIG1vZGUpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBjZF9ibG9ja19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgcGNkX2Jsb2NrX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBwY2RfdW5pdCAqY2QgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGNkcm9tX2lvY3RsKGZpbGUsICZjZC0+aW5mbywgaW5vZGUsIGNtZCwgYXJnKTsKKwlzdHJ1Y3QgcGNkX3VuaXQgKmNkID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBjZHJvbV9pb2N0bCgmY2QtPmluZm8sIGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIH0KIAogc3RhdGljIGludCBwY2RfYmxvY2tfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTI1Miw3ICsyNTMsNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwY2RfYmxvY2tfb3BlbiwKIAkucmVsZWFzZQk9IHBjZF9ibG9ja19yZWxlYXNlLAotCS5pb2N0bAkJPSBwY2RfYmxvY2tfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAk9IHBjZF9ibG9ja19pb2N0bCwKIAkubWVkaWFfY2hhbmdlZAk9IHBjZF9ibG9ja19tZWRpYV9jaGFuZ2VkLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKaW5kZXggNWZkZmE3Yy4uOTI5OTQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCkBAIC03MjgsOSArNzI4LDkgQEAKIAogLyoga2VybmVsIGdsdWUgc3RydWN0dXJlcyAqLwogCi1zdGF0aWMgaW50IHBkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHBkX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBwZF91bml0ICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwZF91bml0ICpkaXNrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJZGlzay0+YWNjZXNzKys7CiAKQEAgLTc1OCwxMCArNzU4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IHBkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHBkX3VuaXQgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBkX3VuaXQgKmRpc2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ0RST01FSkVDVDoKQEAgLTc3Myw5ICs3NzMsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBwZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBwZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpwLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IHBkX3VuaXQgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBkX3VuaXQgKmRpc2sgPSBwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIS0tZGlzay0+YWNjZXNzICYmIGRpc2stPnJlbW92YWJsZSkKIAkJcGRfc3BlY2lhbF9jb21tYW5kKGRpc2ssIHBkX2Rvb3JfdW5sb2NrKTsKQEAgLTgwOSw3ICs4MDksNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwZF9vcGVuLAogCS5yZWxlYXNlCT0gcGRfcmVsZWFzZSwKLQkuaW9jdGwJCT0gcGRfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAk9IHBkX2lvY3RsLAogCS5nZXRnZW8JCT0gcGRfZ2V0Z2VvLAogCS5tZWRpYV9jaGFuZ2VkCT0gcGRfY2hlY2tfbWVkaWEsCiAJLnJldmFsaWRhdGVfZGlzaz0gcGRfcmV2YWxpZGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKaW5kZXggZTdmZTZjYS4uYmVmM2I5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCkBAIC0yMDEsMTMgKzIwMSwxMyBAQAogI2RlZmluZSBBVEFQSV9SRUFEXzEwCQkweDI4CiAjZGVmaW5lIEFUQVBJX1dSSVRFXzEwCQkweDJhCiAKLXN0YXRpYyBpbnQgcGZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHBmX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKTsKIHN0YXRpYyB2b2lkIGRvX3BmX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiBxKTsKLXN0YXRpYyBpbnQgcGZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IHBmX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgcGZfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKTsKIAotc3RhdGljIGludCBwZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgcGZfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKTsKIAogc3RhdGljIGludCBwZl9kZXRlY3Qodm9pZCk7CiBzdGF0aWMgdm9pZCBkb19wZl9yZWFkKHZvaWQpOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHBmX29wZW4sCiAJLnJlbGVhc2UJPSBwZl9yZWxlYXNlLAotCS5pb2N0bAkJPSBwZl9pb2N0bCwKKwkubG9ja2VkX2lvY3RsCT0gcGZfaW9jdGwsCiAJLmdldGdlbwkJPSBwZl9nZXRnZW8sCiAJLm1lZGlhX2NoYW5nZWQJPSBwZl9jaGVja19tZWRpYSwKIH07CkBAIC0yOTYsMTYgKzI5NiwxNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBwZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBwZl9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgcGZfdW5pdCAqcGYgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBmX3VuaXQgKnBmID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJcGZfaWRlbnRpZnkocGYpOwogCiAJaWYgKHBmLT5tZWRpYV9zdGF0dXMgPT0gUEZfTk0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChwZi0+bWVkaWFfc3RhdHVzID09IFBGX1JPKSAmJiAoZmlsZS0+Zl9tb2RlICYgMikpCisJaWYgKChwZi0+bWVkaWFfc3RhdHVzID09IFBGX1JPKSAmJiAobW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAogCXBmLT5hY2Nlc3MrKzsKQEAgLTMzMyw5ICszMzMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBmX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgcGZfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgcGZfdW5pdCAqcGYgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBmX3VuaXQgKnBmID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGNtZCAhPSBDRFJPTUVKRUNUKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM0Niw5ICszNDYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBmX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHBmX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgcGZfdW5pdCAqcGYgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBmX3VuaXQgKnBmID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHBmLT5hY2Nlc3MgPD0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYwppbmRleCA1YWUyMjk2Li4xZTQwMDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3B0LmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCQlnb3RvIG91dDsKIAogCWVyciA9IC1FUk9GUzsKLQlpZiAoKCEodGFwZS0+ZmxhZ3MgJiBQVF9XUklURV9PSykpICYmIChmaWxlLT5mX21vZGUgJiAyKSkKKwlpZiAoKCEodGFwZS0+ZmxhZ3MgJiBQVF9XUklURV9PSykpICYmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCEoaW1pbm9yKGlub2RlKSAmIDEyOCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCmluZGV4IDE5NWNhN2MuLmYyMGJmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC0yMzIwLDcgKzIzMjAsNyBAQAogLyoKICAqIGNhbGxlZCBhdCBvcGVuIHRpbWUuCiAgKi8KLXN0YXRpYyBpbnQgcGt0X29wZW5fZGV2KHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIGludCB3cml0ZSkKK3N0YXRpYyBpbnQgcGt0X29wZW5fZGV2KHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIGZtb2RlX3Qgd3JpdGUpCiB7CiAJaW50IHJldDsKIAlsb25nIGxiYTsKQEAgLTIzMzIsNyArMjMzMiw3IEBACiAJICogc28gYmRnZXQoKSBjYW4ndCBmYWlsLgogCSAqLwogCWJkZ2V0KHBkLT5iZGV2LT5iZF9kZXYpOwotCWlmICgocmV0ID0gYmxrZGV2X2dldChwZC0+YmRldiwgRk1PREVfUkVBRCwgT19SRE9OTFkpKSkKKwlpZiAoKHJldCA9IGJsa2Rldl9nZXQocGQtPmJkZXYsIEZNT0RFX1JFQUQpKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAoKHJldCA9IGJkX2NsYWltKHBkLT5iZGV2LCBwZCkpKQpAQCAtMjM4MSw3ICsyMzgxLDcgQEAKIG91dF91bmNsYWltOgogCWJkX3JlbGVhc2UocGQtPmJkZXYpOwogb3V0X3B1dGRldjoKLQlibGtkZXZfcHV0KHBkLT5iZGV2KTsKKwlibGtkZXZfcHV0KHBkLT5iZGV2LCBGTU9ERV9SRUFEKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjM5OSw3ICsyMzk5LDcgQEAKIAogCXBrdF9zZXRfc3BlZWQocGQsIE1BWF9TUEVFRCwgTUFYX1NQRUVEKTsKIAliZF9yZWxlYXNlKHBkLT5iZGV2KTsKLQlibGtkZXZfcHV0KHBkLT5iZGV2KTsKKwlibGtkZXZfcHV0KHBkLT5iZGV2LCBGTU9ERV9SRUFEKTsKIAogCXBrdF9zaHJpbmtfcGt0bGlzdChwZCk7CiB9CkBAIC0yNDExLDcgKzI0MTEsNyBAQAogCXJldHVybiBwa3RfZGV2c1tkZXZfbWlub3JdOwogfQogCi1zdGF0aWMgaW50IHBrdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBwa3Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCA9IE5VTEw7CiAJaW50IHJldDsKQEAgLTI0MTksNyArMjQxOSw3IEBACiAJVlBSSU5USyhEUklWRVJfTkFNRSI6IGVudGVyaW5nIG9wZW5cbiIpOwogCiAJbXV0ZXhfbG9jaygmY3RsX211dGV4KTsKLQlwZCA9IHBrdF9maW5kX2Rldl9mcm9tX21pbm9yKGltaW5vcihpbm9kZSkpOworCXBkID0gcGt0X2ZpbmRfZGV2X2Zyb21fbWlub3IoTUlOT1IoYmRldi0+YmRfZGV2KSk7CiAJaWYgKCFwZCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKQEAgLTI0MjgsMjAgKzI0MjgsMjAgQEAKIAogCXBkLT5yZWZjbnQrKzsKIAlpZiAocGQtPnJlZmNudCA+IDEpIHsKLQkJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKKwkJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmCiAJCSAgICAhdGVzdF9iaXQoUEFDS0VUX1dSSVRBQkxFLCAmcGQtPmZsYWdzKSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBvdXRfZGVjOwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0ID0gcGt0X29wZW5fZGV2KHBkLCBmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSk7CisJCXJldCA9IHBrdF9vcGVuX2RldihwZCwgbW9kZSAmIEZNT0RFX1dSSVRFKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2RlYzsKIAkJLyoKIAkJICogbmVlZGVkIGhlcmUgYXMgd2VsbCwgc2luY2UgZXh0MiAoYW1vbmcgb3RoZXJzKSBtYXkgY2hhbmdlCiAJCSAqIHRoZSBibG9ja3NpemUgYXQgbW91bnQgdGltZQogCQkgKi8KLQkJc2V0X2Jsb2Nrc2l6ZShpbm9kZS0+aV9iZGV2LCBDRF9GUkFNRVNJWkUpOworCQlzZXRfYmxvY2tzaXplKGJkZXYsIENEX0ZSQU1FU0laRSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZjdGxfbXV0ZXgpOwpAQCAtMjQ1NSw5ICsyNDU1LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBrdF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgcGt0X2Nsb3NlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmY3RsX211dGV4KTsKQEAgLTI3NjUsNyArMjc2NSw3IEBACiAJYmRldiA9IGJkZ2V0KGRldik7CiAJaWYgKCFiZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JFQUQsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7CisJcmV0ID0gYmxrZGV2X2dldChiZGV2LCBGTU9ERV9SRUFEIHwgRk1PREVfTkRFTEFZKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNzkwLDE5ICsyNzkwLDI4IEBACiAJcmV0dXJuIDA7CiAKIG91dF9tZW06Ci0JYmxrZGV2X3B1dChiZGV2KTsKKwlibGtkZXZfcHV0KGJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOwogCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwa3RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBwa3RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKLQlWUFJJTlRLKCJwa3RfaW9jdGw6IGNtZCAleCwgZGV2ICVkOiVkXG4iLCBjbWQsIGltYWpvcihpbm9kZSksIGltaW5vcihpbm9kZSkpOworCVZQUklOVEsoInBrdF9pb2N0bDogY21kICV4LCBkZXYgJWQ6JWRcbiIsIGNtZCwKKwkJTUFKT1IoYmRldi0+YmRfZGV2KSwgTUlOT1IoYmRldi0+YmRfZGV2KSk7CiAKIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0RST01FSkVDVDoKKwkJLyoKKwkJICogVGhlIGRvb3IgZ2V0cyBsb2NrZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG9wZW5lZCwgc28gd2UKKwkJICogaGF2ZSB0byB1bmxvY2sgaXQgb3IgZWxzZSB0aGUgZWplY3QgY29tbWFuZCBmYWlscy4KKwkJICovCisJCWlmIChwZC0+cmVmY250ID09IDEpCisJCQlwa3RfbG9ja19kb29yKHBkLCAwKTsKKwkJLyogZmFsbHRocnUgKi8KIAkvKgogCSAqIGZvcndhcmQgc2VsZWN0ZWQgQ0RST00gaW9jdGxzIHRvIENELVJPTSwgZm9yIFVERgogCSAqLwpAQCAtMjgxMSwxNiArMjgyMCw3IEBACiAJY2FzZSBDRFJPTV9MQVNUX1dSSVRURU46CiAJY2FzZSBDRFJPTV9TRU5EX1BBQ0tFVDoKIAljYXNlIFNDU0lfSU9DVExfU0VORF9DT01NQU5EOgotCQlyZXR1cm4gYmxrZGV2X2lvY3RsKHBkLT5iZGV2LT5iZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOwotCi0JY2FzZSBDRFJPTUVKRUNUOgotCQkvKgotCQkgKiBUaGUgZG9vciBnZXRzIGxvY2tlZCB3aGVuIHRoZSBkZXZpY2UgaXMgb3BlbmVkLCBzbyB3ZQotCQkgKiBoYXZlIHRvIHVubG9jayBpdCBvciBlbHNlIHRoZSBlamVjdCBjb21tYW5kIGZhaWxzLgotCQkgKi8KLQkJaWYgKHBkLT5yZWZjbnQgPT0gMSkKLQkJCXBrdF9sb2NrX2Rvb3IocGQsIDApOwotCQlyZXR1cm4gYmxrZGV2X2lvY3RsKHBkLT5iZGV2LT5iZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCQlyZXR1cm4gX19ibGtkZXZfZHJpdmVyX2lvY3RsKHBkLT5iZGV2LCBtb2RlLCBjbWQsIGFyZyk7CiAKIAlkZWZhdWx0OgogCQlWUFJJTlRLKERSSVZFUl9OQU1FIjogVW5rbm93biBpb2N0bCBmb3IgJXMgKCV4KVxuIiwgcGQtPm5hbWUsIGNtZCk7CkBAIC0yODQ5LDcgKzI4NDksNyBAQAogCS5vd25lciA9CQlUSElTX01PRFVMRSwKIAkub3BlbiA9CQkJcGt0X29wZW4sCiAJLnJlbGVhc2UgPQkJcGt0X2Nsb3NlLAotCS5pb2N0bCA9CQlwa3RfaW9jdGwsCisJLmxvY2tlZF9pb2N0bCA9CQlwa3RfaW9jdGwsCiAJLm1lZGlhX2NoYW5nZWQgPQlwa3RfbWVkaWFfY2hhbmdlZCwKIH07CiAKQEAgLTI5NzUsNyArMjk3NSw3IEBACiAJcGt0X2RlYnVnZnNfZGV2X3JlbW92ZShwZCk7CiAJcGt0X3N5c2ZzX2Rldl9yZW1vdmUocGQpOwogCi0JYmxrZGV2X3B1dChwZC0+YmRldik7CisJYmxrZGV2X3B1dChwZC0+YmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiAKIAlyZW1vdmVfcHJvY19lbnRyeShwZC0+bmFtZSwgcGt0X3Byb2MpOwogCURQUklOVEsoRFJJVkVSX05BTUUiOiB3cml0ZXIgJXMgdW5tYXBwZWRcbiIsIHBkLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwppbmRleCA3MzBjY2VhLi42MTI5NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCkBAIC0yNDQsMTAgKzI0NCwxMCBAQAogCQkgICAgICBpbnQgaW50ZXJydXB0aWJsZSk7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2RyaXZlKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKTsKIHN0YXRpYyBpbnQgZmRfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpOwotc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IGZsb3BweV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKTsKLXN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSk7CitzdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpOwogc3RhdGljIGludCBmbG9wcHlfY2hlY2tfY2hhbmdlKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIHN0YXRpYyBpbnQgZmxvcHB5X3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spOwogCkBAIC04MzksMTAgKzgzOSwxMCBAQAogc3RhdGljIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZsb3BweV90eXBlID0KIAl7IDI4ODAsMTgsMiw4MCwwLDB4MUIsMHgwMCwweENGLDB4NkMsTlVMTCB9OwkvKiAgNyAxLjQ0TUIgMy41IiAgICovCiAKLXN0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKLQlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCQkKIAlpZiAoKGNtZCAmIDB4ODApICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQpAQCAtODY4LDkgKzg2OCw5IEBACiAJcmV0dXJuIC1FTk9UVFk7CiB9CiAKLXN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc3dpbTMgX19pb21lbSAqc3cgPSBmcy0+c3dpbTM7CiAJaW50IG4sIGVyciA9IDA7CiAKQEAgLTkwNCwxNyArOTA0LDE3IEBACiAJCXN3aW0zX2FjdGlvbihmcywgU0VUTUZNKTsKIAkJc3dpbTNfc2VsZWN0KGZzLCBSRUxBWCk7CiAKLQl9IGVsc2UgaWYgKGZzLT5yZWZfY291bnQgPT0gLTEgfHwgZmlscC0+Zl9mbGFncyAmIE9fRVhDTCkKKwl9IGVsc2UgaWYgKGZzLT5yZWZfY291bnQgPT0gLTEgfHwgbW9kZSAmIEZNT0RFX0VYQ0wpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoZXJyID09IDAgJiYgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkgPT0gMAotCSAgICAmJiAoZmlscC0+Zl9tb2RlICYgMykpIHsKLQkJY2hlY2tfZGlza19jaGFuZ2UoaW5vZGUtPmlfYmRldik7CisJaWYgKGVyciA9PSAwICYmIChtb2RlICYgRk1PREVfTkRFTEFZKSA9PSAwCisJICAgICYmIChtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSkgeworCQljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKIAkJaWYgKGZzLT5lamVjdGVkKQogCQkJZXJyID0gLUVOWElPOwogCX0KIAotCWlmIChlcnIgPT0gMCAmJiAoZmlscC0+Zl9tb2RlICYgMikpIHsKKwlpZiAoZXJyID09IDAgJiYgKG1vZGUgJiBGTU9ERV9XUklURSkpIHsKIAkJaWYgKGZzLT53cml0ZV9wcm90IDwgMCkKIAkJCWZzLT53cml0ZV9wcm90ID0gc3dpbTNfcmVhZGJpdChmcywgV1JJVEVfUFJPVCk7CiAJCWlmIChmcy0+d3JpdGVfcHJvdCkKQEAgLTkzMCw3ICs5MzAsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChmaWxwLT5mX2ZsYWdzICYgT19FWENMKQorCWlmIChtb2RlICYgRk1PREVfRVhDTCkKIAkJZnMtPnJlZl9jb3VudCA9IC0xOwogCWVsc2UKIAkJKytmcy0+cmVmX2NvdW50OwpAQCAtOTM4LDkgKzkzOCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHN3aW0zIF9faW9tZW0gKnN3ID0gZnMtPnN3aW0zOwogCWlmIChmcy0+cmVmX2NvdW50ID4gMCAmJiAtLWZzLT5yZWZfY291bnQgPT0gMCkgewogCQlzd2ltM19hY3Rpb24oZnMsIE1PVE9SX09GRik7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKIAkub3BlbgkJPSBmbG9wcHlfb3BlbiwKIAkucmVsZWFzZQk9IGZsb3BweV9yZWxlYXNlLAotCS5pb2N0bAkJPSBmbG9wcHlfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAk9IGZsb3BweV9pb2N0bCwKIAkubWVkaWFfY2hhbmdlZAk9IGZsb3BweV9jaGVja19jaGFuZ2UsCiAJLnJldmFsaWRhdGVfZGlzaz0gZmxvcHB5X3JldmFsaWRhdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDNhMjgxZWYuLmZjY2FjMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM0OSw4ICszNDksNiBAQAogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdDsKLQotCWludCBzZ19zdGF0WzZdOwogfTsKIAogLyoKQEAgLTY4NSw3ICs2ODMsNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCXVycS0+bnNnID0gbl9lbGVtOwotCXNjLT5zZ19zdGF0W25fZWxlbSA8IDUgPyBuX2VsZW0gOiA1XSsrOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQl1Yl9jbWRfYnVpbGRfcGFja2V0KHNjLCBsdW4sIGNtZCwgdXJxKTsKQEAgLTE2NzAsMTAgKzE2NjcsOSBAQAogICogVGhpcyBpcyBtb3N0bHkgbmVlZGVkIHRvIGtlZXAgcmVmY291bnRpbmcsIGJ1dCBhbHNvIHRvIHN1cHBvcnQKICAqIG1lZGlhIGNoZWNrcyBvbiByZW1vdmFibGUgbWVkaWEgZHJpdmVzLgogICovCi1zdGF0aWMgaW50IHViX2JkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHViX2JkX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgdWJfbHVuICpsdW4gPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHViX2x1biAqbHVuID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1Yl9kZXYgKnNjID0gbHVuLT51ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwpAQCAtMTY4NywxOSArMTY4MywxOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnViX2xvY2ssIGZsYWdzKTsKIAogCWlmIChsdW4tPnJlbW92YWJsZSB8fCBsdW4tPnJlYWRvbmx5KQotCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CiAKIAkvKgogCSAqIFRoZSBzZC5jIGNvbnNpZGVycyAtPm1lZGlhX3ByZXNlbnQgYW5kIC0+Y2hhbmdlZCBub3QgZXF1aXZhbGVudCwKIAkgKiB1bmRlciBzb21lIHByZXR0eSBtdXJreSBjb25kaXRpb25zIChhIGZhaWx1cmUgb2YgUkVBRCBDQVBBQ0lUWSkuCiAJICogV2UgbWF5IG5lZWQgaXQgb25lIGRheS4KIAkgKi8KLQlpZiAobHVuLT5yZW1vdmFibGUgJiYgbHVuLT5jaGFuZ2VkICYmICEoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSkgeworCWlmIChsdW4tPnJlbW92YWJsZSAmJiBsdW4tPmNoYW5nZWQgJiYgIShtb2RlICYgRk1PREVfTkRFTEFZKSkgewogCQlyYyA9IC1FTk9NRURJVU07CiAJCWdvdG8gZXJyX29wZW47CiAJfQogCi0JaWYgKGx1bi0+cmVhZG9ubHkgJiYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkgeworCWlmIChsdW4tPnJlYWRvbmx5ICYmIChtb2RlICYgRk1PREVfV1JJVEUpKSB7CiAJCXJjID0gLUVST0ZTOwogCQlnb3RvIGVycl9vcGVuOwogCX0KQEAgLTE3MTMsOSArMTcwOSw4IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBpbnQgdWJfYmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgdWJfYmRfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgdWJfbHVuICpsdW4gPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHViX2RldiAqc2MgPSBsdW4tPnVkZXY7CiAKQEAgLTE3MjYsMTMgKzE3MjEsMTMgQEAKIC8qCiAgKiBUaGUgaW9jdGwgaW50ZXJmYWNlLgogICovCi1zdGF0aWMgaW50IHViX2JkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCB1Yl9iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAl2b2lkIF9fdXNlciAqdXNlcm1lbSA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CiAKLQlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZmlscCwgZGlzay0+cXVldWUsIGRpc2ssIGNtZCwgdXNlcm1lbSk7CisJcmV0dXJuIHNjc2lfY21kX2lvY3RsKGRpc2stPnF1ZXVlLCBkaXNrLCBtb2RlLCBjbWQsIHVzZXJtZW0pOwogfQogCiAvKgpAQCAtMTc5Niw3ICsxNzkxLDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gdWJfYmRfb3BlbiwKIAkucmVsZWFzZQk9IHViX2JkX3JlbGVhc2UsCi0JLmlvY3RsCQk9IHViX2JkX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwJPSB1Yl9iZF9pb2N0bCwKIAkubWVkaWFfY2hhbmdlZAk9IHViX2JkX21lZGlhX2NoYW5nZWQsCiAJLnJldmFsaWRhdGVfZGlzayA9IHViX2JkX3JldmFsaWRhdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwppbmRleCAxNzMwZDI5Li5lY2NjZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwpAQCAtMTMwLDE1ICsxMzAsMTUgQEAKIC8qCiAgKiBFeHRlcm5hbCBvcGVuIGVudHJ5IHBvaW50LgogICovCi1zdGF0aWMgaW50IHZpb2Rhc2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbCkKK3N0YXRpYyBpbnQgdmlvZGFzZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgdmlvZGFzZF9kZXZpY2UgKmQgPSBpbm8tPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2aW9kYXNkX2RldmljZSAqZCA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlIdkxwRXZlbnRfUmMgaHZyYzsKIAlzdHJ1Y3QgdmlvZGFzZF93YWl0ZXZlbnQgd2U7CiAJdTE2IGZsYWdzID0gMDsKIAogCWlmIChkLT5yZWFkX29ubHkpIHsKLQkJaWYgKChmaWwgIT0gTlVMTCkgJiYgKGZpbC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQlpZiAobW9kZSAmIEZNT0RFX1dSSVRFKQogCQkJcmV0dXJuIC1FUk9GUzsKIAkJZmxhZ3MgPSB2aW9ibG9ja2ZsYWdzX3JvOwogCX0KQEAgLTE3OSw5ICsxNzksOSBAQAogLyoKICAqIEV4dGVybmFsIHJlbGVhc2UgZW50cnkgcG9pbnQuCiAgKi8KLXN0YXRpYyBpbnQgdmlvZGFzZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlsKQorc3RhdGljIGludCB2aW9kYXNkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgdmlvZGFzZF9kZXZpY2UgKmQgPSBpbm8tPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2aW9kYXNkX2RldmljZSAqZCA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlIdkxwRXZlbnRfUmMgaHZyYzsKIAogCS8qIFNlbmQgdGhlIGV2ZW50IHRvIE9TLzQwMC4gIFdlIERPTidUIGV4cGVjdCBhIHJlc3BvbnNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDZlYzVmYzAuLjg1ZDc5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0xNDYsMTEgKzE0NiwxMSBAQAogCQl2YmxrLT52cS0+dnFfb3BzLT5raWNrKHZibGstPnZxKTsKIH0KIAotc3RhdGljIGludCB2aXJ0YmxrX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCB2aXJ0YmxrX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCSB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZmlscCwgaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cXVldWUsCi0JCQkgICAgICBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLCBjbWQsCisJcmV0dXJuIHNjc2lfY21kX2lvY3RsKGJkZXYtPmJkX2Rpc2stPnF1ZXVlLAorCQkJICAgICAgYmRldi0+YmRfZGlzaywgbW9kZSwgY21kLAogCQkJICAgICAgKHZvaWQgX191c2VyICopZGF0YSk7CiB9CiAKQEAgLTE4MCw3ICsxODAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZpcnRibGtfZm9wcyA9IHsKLQkuaW9jdGwgID0gdmlydGJsa19pb2N0bCwKKwkubG9ja2VkX2lvY3RsID0gdmlydGJsa19pb2N0bCwKIAkub3duZXIgID0gVEhJU19NT0RVTEUsCiAJLmdldGdlbyA9IHZpcnRibGtfZ2V0Z2VvLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGQuYyBiL2RyaXZlcnMvYmxvY2sveGQuYwppbmRleCA2MjRkMzBmLi42NGI0OTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hkLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZC5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB4ZF9mb3BzID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5pb2N0bAk9IHhkX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwJPSB4ZF9pb2N0bCwKIAkuZ2V0Z2VvID0geGRfZ2V0Z2VvLAogfTsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh4ZF93YWl0X2ludCk7CkBAIC0zNDMsNyArMzQzLDcgQEAKIH0KIAogLyogeGRfaW9jdGw6IGhhbmRsZSBkZXZpY2UgaW9jdGwncyAqLwotc3RhdGljIGludCB4ZF9pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSxzdHJ1Y3QgZmlsZSAqZmlsZSx1X2ludCBjbWQsdV9sb25nIGFyZykKK3N0YXRpYyBpbnQgeGRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBIRElPX1NFVF9ETUE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hkLmggYi9kcml2ZXJzL2Jsb2NrL3hkLmgKaW5kZXggY2ZmZDQ0YS4uMzdjYWNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZC5oCisrKyBiL2RyaXZlcnMvYmxvY2sveGQuaApAQCAtMTA1LDcgKzEwNSw3IEBACiBzdGF0aWMgdV9jaGFyIHhkX2luaXRkcml2ZXMgKHZvaWQgKCppbml0X2RyaXZlKSh1X2NoYXIgZHJpdmUpKTsKIAogc3RhdGljIHZvaWQgZG9feGRfcmVxdWVzdCAoc3RydWN0IHJlcXVlc3RfcXVldWUgKiBxKTsKLXN0YXRpYyBpbnQgeGRfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsc3RydWN0IGZpbGUgKmZpbGUsdW5zaWduZWQgaW50IGNtZCx1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50IHhkX2lvY3RsIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LGZtb2RlX3QgbW9kZSx1bnNpZ25lZCBpbnQgY21kLHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgeGRfcmVhZHdyaXRlICh1X2NoYXIgb3BlcmF0aW9uLFhEX0lORk8gKmRpc2ssY2hhciAqYnVmZmVyLHVfaW50IGJsb2NrLHVfaW50IGNvdW50KTsKIHN0YXRpYyB2b2lkIHhkX3JlY2FsaWJyYXRlICh1X2NoYXIgZHJpdmUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwppbmRleCAxYTUwYWU3Li5iMjIwYzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKQEAgLTE1NiwxMSArMTU2LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmxraWZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwLAorc3RhdGljIGludCBibGtpZl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJCSAgICAgICB1bnNpZ25lZCBjb21tYW5kLCB1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQogewotCXN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvID0KLQkJaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCiAJZGV2X2RiZygmaW5mby0+eGJkZXYtPmRldiwgImNvbW1hbmQ6IDB4JXgsIGFyZ3VtZW50OiAweCVseFxuIiwKQEAgLTEwMTQsMTYgKzEwMTMsMTYgQEAKIAlyZXR1cm4gaW5mby0+aXNfcmVhZHk7CiB9CiAKLXN0YXRpYyBpbnQgYmxraWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCitzdGF0aWMgaW50IGJsa2lmX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCWluZm8tPnVzZXJzKys7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmxraWZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCitzdGF0aWMgaW50IGJsa2lmX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbyA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlpbmZvLT51c2Vycy0tOwogCWlmIChpbmZvLT51c2VycyA9PSAwKSB7CiAJCS8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBiZWVuIGluc3RydWN0ZWQgdG8gY2xvc2UuICBXZSB3aWxsCkBAIC0xMDQ0LDcgKzEwNDMsNyBAQAogCS5vcGVuID0gYmxraWZfb3BlbiwKIAkucmVsZWFzZSA9IGJsa2lmX3JlbGVhc2UsCiAJLmdldGdlbyA9IGJsa2lmX2dldGdlbywKLQkuaW9jdGwgPSBibGtpZl9pb2N0bCwKKwkubG9ja2VkX2lvY3RsID0gYmxraWZfaW9jdGwsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKaW5kZXggNGE3YTA1OS4uZWNhYjllNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKKysrIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKQEAgLTg3MCwyNSArODcwLDI0IEBACiAJcmV0dXJuIGFjZS0+aWRfcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGFjZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBhY2Vfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGFjZV9kZXZpY2UgKmFjZSA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWNlX2RldmljZSAqYWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZfZGJnKGFjZS0+ZGV2LCAiYWNlX29wZW4oKSB1c2Vycz0laVxuIiwgYWNlLT51c2VycyArIDEpOwogCi0JZmlscC0+cHJpdmF0ZV9kYXRhID0gYWNlOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhY2UtPmxvY2ssIGZsYWdzKTsKIAlhY2UtPnVzZXJzKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNlLT5sb2NrLCBmbGFncyk7CiAKLQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKKwljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhY2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgYWNlX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgYWNlX2RldmljZSAqYWNlID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhY2VfZGV2aWNlICphY2UgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgdmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3oycmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3oycmFtLmMKaW5kZXggYmUyMGE2Ny4uODA3NTRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96MnJhbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svejJyYW0uYwpAQCAtMTM3LDggKzEzNyw3IEBACiAgICAgcmV0dXJuOwogfQogCi1zdGF0aWMgaW50Ci16Ml9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCApCitzdGF0aWMgaW50IHoyX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewogICAgIGludCBkZXZpY2U7CiAgICAgaW50IG1heF96Ml9tYXAgPSAoIFoyUkFNX1NJWkUgLyBaMlJBTV9DSFVOS1NJWkUgKSAqCkBAIC0xNDcsNyArMTQ2LDcgQEAKIAlzaXplb2YoIHoycmFtX21hcFswXSApOwogICAgIGludCByYyA9IC1FTk9NRU07CiAKLSAgICBkZXZpY2UgPSBpbWlub3IoaW5vZGUpOworICAgIGRldmljZSA9IE1JTk9SKGJkZXYtPmJkX2Rldik7CiAKICAgICBpZiAoIGN1cnJlbnRfZGV2aWNlICE9IC0xICYmIGN1cnJlbnRfZGV2aWNlICE9IGRldmljZSApCiAgICAgewpAQCAtMjk5LDcgKzI5OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXoyX3JlbGVhc2UoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwICkKK3oyX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKICAgICBpZiAoIGN1cnJlbnRfZGV2aWNlID09IC0xICkKIAlyZXR1cm4gMDsgICAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IGQ0N2YyZjguLmQxNmIwMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTk3Myw3ICs5NzMsNyBAQAogICogaXMgaW4gdGhlaXIgb3duIGludGVyZXN0OiBkZXZpY2UgY29udHJvbCBiZWNvbWVzIGEgbG90IGVhc2llcgogICogdGhpcyB3YXkuCiAgKi8KLWludCBjZHJvbV9vcGVuKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnApCitpbnQgY2Ryb21fb3BlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewogCWludCByZXQ7CiAKQEAgLTk4MiwxNCArOTgyLDE0IEBACiAJLyogaWYgdGhpcyB3YXMgYSBPX05PTkJMT0NLIG9wZW4gYW5kIHdlIHNob3VsZCBob25vciB0aGUgZmxhZ3MsCiAJICogZG8gYSBxdWljayBvcGVuIHdpdGhvdXQgZHJpdmUvZGlzYyBpbnRlZ3JpdHkgY2hlY2tzLiAqLwogCWNkaS0+dXNlX2NvdW50Kys7Ci0JaWYgKChmcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmIChjZGktPm9wdGlvbnMgJiBDRE9fVVNFX0ZGTEFHUykpIHsKKwlpZiAoKG1vZGUgJiBGTU9ERV9OREVMQVkpICYmIChjZGktPm9wdGlvbnMgJiBDRE9fVVNFX0ZGTEFHUykpIHsKIAkJcmV0ID0gY2RpLT5vcHMtPm9wZW4oY2RpLCAxKTsKIAl9IGVsc2UgewogCQlyZXQgPSBvcGVuX2Zvcl9kYXRhKGNkaSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAkJY2Ryb21fbW1jM19wcm9maWxlKGNkaSk7Ci0JCWlmIChmcC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJaWYgKG1vZGUgJiBGTU9ERV9XUklURSkgewogCQkJcmV0ID0gLUVST0ZTOwogCQkJaWYgKGNkcm9tX29wZW5fd3JpdGUoY2RpKSkKIAkJCQlnb3RvIGVycl9yZWxlYXNlOwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAkJCWNkaS0+bmFtZSwgY2RpLT51c2VfY291bnQpOwogCS8qIERvIHRoaXMgb24gb3Blbi4gIERvbid0IHdhaXQgZm9yIG1vdW50LCBiZWNhdXNlIHRoZXkgbWlnaHQKIAkgICAgbm90IGJlIG1vdW50aW5nLCBidXQgb3BlbmluZyB3aXRoIE9fTk9OQkxPQ0sgKi8KLQljaGVja19kaXNrX2NoYW5nZShpcC0+aV9iZGV2KTsKKwljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKIAlyZXR1cm4gMDsKIGVycl9yZWxlYXNlOgogCWlmIChDRFJPTV9DQU4oQ0RDX0xPQ0spICYmIGNkaS0+b3B0aW9ucyAmIENET19MT0NLKSB7CkBAIC0xMTg0LDcgKzExODQsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY2Ryb21fcmVsZWFzZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgc3RydWN0IGZpbGUgKmZwKQordm9pZCBjZHJvbV9yZWxlYXNlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOwogCWludCBvcGVuZWRfZm9yX2RhdGE7CkBAIC0xMjA1LDcgKzEyMDUsNyBAQAogCX0KIAogCW9wZW5lZF9mb3JfZGF0YSA9ICEoY2RpLT5vcHRpb25zICYgQ0RPX1VTRV9GRkxBR1MpIHx8Ci0JCSEoZnAgJiYgZnAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwkJIShtb2RlICYgRk1PREVfTkRFTEFZKTsKIAogCS8qCiAJICogZmx1c2ggY2FjaGUgb24gbGFzdCB3cml0ZSByZWxlYXNlCkBAIC0xMjE5LDcgKzEyMTksNiBAQAogCQkgICAgY2RpLT5vcHRpb25zICYgQ0RPX0FVVE9fRUpFQ1QgJiYgQ0RST01fQ0FOKENEQ19PUEVOX1RSQVkpKQogCQkJY2RvLT50cmF5X21vdmUoY2RpLCAxKTsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2Ryb21fcmVhZF9tZWNoX3N0YXR1cyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgCkBAIC0yNjYyLDE3ICsyNjYxLDE3IEBACiAgKiB0aGVzZSBkYXlzLgogICogQVRBUEkgLyBTQ1NJIHNwZWNpZmljIGNvZGUgbm93IG1haW5seSByZXNpZGVzIGluIG1tY19pb2N0bCgpLgogICovCi1pbnQgY2Ryb21faW9jdGwoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKLQkJc3RydWN0IGlub2RlICppcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitpbnQgY2Ryb21faW9jdGwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCWZtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IHJldDsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlwLT5pX2JkZXYtPmJkX2Rpc2s7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCiAJLyoKIAkgKiBUcnkgdGhlIGdlbmVyaWMgU0NTSSBjb21tYW5kIGlvY3RsJ3MgZmlyc3QuCiAJICovCi0JcmV0ID0gc2NzaV9jbWRfaW9jdGwoZmlsZSwgZGlzay0+cXVldWUsIGRpc2ssIGNtZCwgYXJncCk7CisJcmV0ID0gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwgYXJncCk7CiAJaWYgKHJldCAhPSAtRU5PVFRZKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNjk2LDcgKzI2OTUsNyBAQAogCWNhc2UgQ0RST01fU0VMRUNUX0RJU0M6CiAJCXJldHVybiBjZHJvbV9pb2N0bF9zZWxlY3RfZGlzYyhjZGksIGFyZyk7CiAJY2FzZSBDRFJPTVJFU0VUOgotCQlyZXR1cm4gY2Ryb21faW9jdGxfcmVzZXQoY2RpLCBpcC0+aV9iZGV2KTsKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX3Jlc2V0KGNkaSwgYmRldik7CiAJY2FzZSBDRFJPTV9MT0NLRE9PUjoKIAkJcmV0dXJuIGNkcm9tX2lvY3RsX2xvY2tfZG9vcihjZGksIGFyZyk7CiAJY2FzZSBDRFJPTV9ERUJVRzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwppbmRleCBkNmJhNzdhLi45YWFhODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCkBAIC00OTAsMTQgKzQ5MCwxNCBAQAogCS5uX21pbm9ycwkJPSAxLAogfTsKIAotc3RhdGljIGludCBnZHJvbV9iZG9wc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBnZHJvbV9iZG9wc19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlyZXR1cm4gY2Ryb21fb3BlbihnZC5jZF9pbmZvLCBpbm9kZSwgZmlsZSk7CisJcmV0dXJuIGNkcm9tX29wZW4oZ2QuY2RfaW5mbywgYmRldiwgbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2Ryb21fYmRvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2Ryb21fYmRvcHNfcmVsZWFzZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0JcmV0dXJuIGNkcm9tX3JlbGVhc2UoZ2QuY2RfaW5mbywgZmlsZSk7CisJcmV0dXJuIGNkcm9tX3JlbGVhc2UoZ2QuY2RfaW5mbywgbW9kZSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2Ryb21fYmRvcHNfbWVkaWFjaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtNTA1LDEwICs1MDUsMTAgQEAKIAlyZXR1cm4gY2Ryb21fbWVkaWFfY2hhbmdlZChnZC5jZF9pbmZvKTsKIH0KIAotc3RhdGljIGludCBnZHJvbV9iZG9wc19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgZ2Ryb21fYmRvcHNfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCXVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIGNkcm9tX2lvY3RsKGZpbGUsIGdkLmNkX2luZm8sIGlub2RlLCBjbWQsIGFyZyk7CisJcmV0dXJuIGNkcm9tX2lvY3RsKGdkLmNkX2luZm8sIGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBnZHJvbV9iZG9wcyA9IHsKQEAgLTUxNiw3ICs1MTYsNyBAQAogCS5vcGVuCQkJPSBnZHJvbV9iZG9wc19vcGVuLAogCS5yZWxlYXNlCQk9IGdkcm9tX2Jkb3BzX3JlbGVhc2UsCiAJLm1lZGlhX2NoYW5nZWQJCT0gZ2Ryb21fYmRvcHNfbWVkaWFjaGFuZ2VkLAotCS5pb2N0bAkJCT0gZ2Ryb21fYmRvcHNfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAkJPSBnZHJvbV9iZG9wc19pb2N0bCwKIH07CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBnZHJvbV9jb21tYW5kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggMDMxZTBlMS4uMTM5MjkzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtMTUxLDIzICsxNTEsMjQgQEAKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIGludCB2aW9jZF9ibGtfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdmlvY2RfYmxrX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBkaXNrX2luZm8gKmRpID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBjZHJvbV9vcGVuKCZkaS0+dmlvY2RfaW5mbywgaW5vZGUsIGZpbGUpOworCXN0cnVjdCBkaXNrX2luZm8gKmRpID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBjZHJvbV9vcGVuKCZkaS0+dmlvY2RfaW5mbywgYmRldiwgbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgdmlvY2RfYmxrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHZpb2NkX2Jsa19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRpc2tfaW5mbyAqZGkgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGNkcm9tX3JlbGVhc2UoJmRpLT52aW9jZF9pbmZvLCBmaWxlKTsKKwlzdHJ1Y3QgZGlza19pbmZvICpkaSA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwljZHJvbV9yZWxlYXNlKCZkaS0+dmlvY2RfaW5mbywgbW9kZSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlvY2RfYmxrX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCB2aW9jZF9ibGtfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBkaXNrX2luZm8gKmRpID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBjZHJvbV9pb2N0bChmaWxlLCAmZGktPnZpb2NkX2luZm8sIGlub2RlLCBjbWQsIGFyZyk7CisJc3RydWN0IGRpc2tfaW5mbyAqZGkgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIGNkcm9tX2lvY3RsKCZkaS0+dmlvY2RfaW5mbywgYmRldiwgbW9kZSwgY21kLCBhcmcpOwogfQogCiBzdGF0aWMgaW50IHZpb2NkX2Jsa19tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtMTgwLDcgKzE4MSw3IEBACiAJLm93bmVyID0JCVRISVNfTU9EVUxFLAogCS5vcGVuID0JCQl2aW9jZF9ibGtfb3BlbiwKIAkucmVsZWFzZSA9CQl2aW9jZF9ibGtfcmVsZWFzZSwKLQkuaW9jdGwgPQkJdmlvY2RfYmxrX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwgPQkJdmlvY2RfYmxrX2lvY3RsLAogCS5tZWRpYV9jaGFuZ2VkID0JdmlvY2RfYmxrX21lZGlhX2NoYW5nZWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCmluZGV4IDMxZGNkOTEuLmRjOGQxYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCkBAIC00MTcsNiArNDE3LDYgQEAKIG1vZHVsZV9pbml0KGFncF9hbGlfaW5pdCk7CiBtb2R1bGVfZXhpdChhZ3BfYWxpX2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAyODEyZWUyLi41MmY0MzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTc3Miw2ICs3NzIsNiBAQAogbW9kdWxlX2V4aXQoYWdwX2FtZDY0X2NsZWFudXApOwogI2VuZGlmCiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiwgQW5kaSBLbGVlbiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIEFuZGkgS2xlZW4iKTsKIG1vZHVsZV9wYXJhbShhZ3BfdHJ5X3Vuc3VwcG9ydGVkLCBib29sLCAwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggYWUyNzkxYi4uZjE1MzdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTU2MSw2ICs1NjEsNiBAQAogbW9kdWxlX2luaXQoYWdwX2F0aV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hdGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKaW5kZXggM2EzY2MwMy4uOGM2MTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTM0OSw3ICszNDksNyBAQAogX19zZXR1cCgiYWdwPSIsIGFncF9zZXR1cCk7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBR1AgR0FSVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihBR1BHQVJUX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDExMDg2NjUuLjljZjZlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMjM5MCw1ICsyMzkwLDUgQEAKIG1vZHVsZV9pbml0KGFncF9pbnRlbF9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9pbnRlbF9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKaW5kZXggNWJiZWQzZC4uMTZhY2VlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTnZpZGlhIEFHUEdBUlQgcm91dGluZXMuCiAgKiBCYXNlZCB1cG9uIGEgMi40IGFncGdhcnQgZGlmZiBieSB0aGUgZm9sa3MgZnJvbSBOVklESUEsIGFuZCBoYWNrZWQgdXAKLSAqIHRvIHdvcmsgaW4gMi41IGJ5IERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogdG8gd29yayBpbiAyLjUgYnkgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCmluZGV4IGYyNDkyZWMuLmRiNjA1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCkBAIC0yMCw4ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKLSNpbmNsdWRlIDxhc20tcGFyaXNjL3BhcmlzYy1kZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20tcGFyaXNjL3JvcGVzLmg+CisjaW5jbHVkZSA8YXNtL3BhcmlzYy1kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vcm9wZXMuaD4KIAogI2luY2x1ZGUgImFncC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCmluZGV4IDlmNGQ0OWUuLmQzYmQyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCkBAIC01OTUsNCArNTk1LDQgQEAKIG1vZHVsZV9leGl0KGFncF92aWFfY2xlYW51cCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kczEyODYuYyBiL2RyaXZlcnMvY2hhci9kczEyODYuYwppbmRleCA1MzI5ZDQ4Li4wYTgyNmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHMxMjg2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RzMTI4Ni5jCkBAIC0yMTAsOCArMjEwLDggQEAKIAkJaWYgKHNlYyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJbWluID0gQklOMkJDRChtaW4pOwotCQltaW4gPSBCSU4yQkNEKGhycyk7CisJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJbWluID0gYmluMmJjZChocnMpOwogCiAJCXNwaW5fbG9jaygmZHMxMjg2X2xvY2spOwogCQlydGNfd3JpdGUoaHJzLCBSVENfSE9VUlNfQUxBUk0pOwpAQCAtMzUzLDcgKzM1Myw3IEBACiAKIAlkczEyODZfZ2V0X3RpbWUoJnRtKTsKIAlodW5kcmVkdGggPSBydGNfcmVhZChSVENfSFVORFJFRFRIX1NFQ09ORCk7Ci0JQkNEX1RPX0JJTihodW5kcmVkdGgpOworCWh1bmRyZWR0aCA9IGJjZDJiaW4oaHVuZHJlZHRoKTsKIAogCXAgKz0gc3ByaW50ZihwLAogCSAgICAgICAgICAgICAicnRjX3RpbWVcdDogJTAyZDolMDJkOiUwMmQuJTAyZFxuIgpAQCAtNDc3LDEyICs0NzcsMTIgQEAKIAlydGNfd3JpdGUoc2F2ZV9jb250cm9sLCBSVENfQ01EKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkczEyODZfbG9jaywgZmxhZ3MpOwogCi0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1feWVhcik7CisJcnRjX3RtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y190bS0+dG1fc2VjKTsKKwlydGNfdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9taW4pOworCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwlydGNfdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fbWRheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCkBAIC01MzEsMTIgKzUzMSwxMiBAQAogCWlmICh5cnMgPj0gMTAwKQogCQl5cnMgLT0gMTAwOwogCi0JQklOX1RPX0JDRChzZWMpOwotCUJJTl9UT19CQ0QobWluKTsKLQlCSU5fVE9fQkNEKGhycyk7Ci0JQklOX1RPX0JDRChkYXkpOwotCUJJTl9UT19CQ0QobW9uKTsKLQlCSU5fVE9fQkNEKHlycyk7CisJc2VjID0gYmluMmJjZChzZWMpOworCW1pbiA9IGJpbjJiY2QobWluKTsKKwlocnMgPSBiaW4yYmNkKGhycyk7CisJZGF5ID0gYmluMmJjZChkYXkpOworCW1vbiA9IGJpbjJiY2QobW9uKTsKKwl5cnMgPSBiaW4yYmNkKHlycyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHMxMjg2X2xvY2ssIGZsYWdzKTsKIAlzYXZlX2NvbnRyb2wgPSBydGNfcmVhZChSVENfQ01EKTsKQEAgLTU3Miw4ICs1NzIsOCBAQAogCWNtZCA9IHJ0Y19yZWFkKFJUQ19DTUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzMTI4Nl9sb2NrLCBmbGFncyk7CiAKLQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKGFsbV90bS0+dG1faG91cik7CisJYWxtX3RtLT50bV9taW4gPSBiY2QyYmluKGFsbV90bS0+dG1fbWluKTsKKwlhbG1fdG0tPnRtX2hvdXIgPSBiY2QyYmluKGFsbV90bS0+dG1faG91cik7CiAJYWxtX3RtLT50bV9zZWMgPSAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHMxMzAyLmMgYi9kcml2ZXJzL2NoYXIvZHMxMzAyLmMKaW5kZXggYzVlNjdhNi4uMTcwNjkzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzMTMwMi5jCisrKyBiL2RyaXZlcnMvY2hhci9kczEzMDIuYwpAQCAtMTMxLDEyICsxMzEsMTIgQEAKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpAQCAtMjExLDEyICsyMTEsMTIgQEAKIAkJCWVsc2UKIAkJCQl5cnMgLT0gMTkwMDsJLyogUlRDICg3MCwgNzEsIC4uLiA5OSkgKi8KIAotCQkJQklOX1RPX0JDRChzZWMpOwotCQkJQklOX1RPX0JDRChtaW4pOwotCQkJQklOX1RPX0JDRChocnMpOwotCQkJQklOX1RPX0JDRChkYXkpOwotCQkJQklOX1RPX0JDRChtb24pOwotCQkJQklOX1RPX0JDRCh5cnMpOworCQkJc2VjID0gYmluMmJjZChzZWMpOworCQkJbWluID0gYmluMmJjZChtaW4pOworCQkJaHJzID0gYmluMmJjZChocnMpOworCQkJZGF5ID0gYmluMmJjZChkYXkpOworCQkJbW9uID0gYmluMmJjZChtb24pOworCQkJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJCQlsb2NrX2tlcm5lbCgpOwogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggNDk5OGIyNy4uY2YyNDYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0yNDc3LDcgKzI0NzcsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKG1zZWMgPT0gLTEpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJbXNlYyA9IDB4RkZGRjsKKwllbHNlIGlmIChtc2VjID4gMHhGRkZFKQorCQltc2VjID0gMHhGRkZFOworCWVsc2UgaWYgKG1zZWMgPCAxKQorCQltc2VjID0gMTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlcGNhX2xvY2ssIGZsYWdzKTsKIAlnbG9iYWx3aW5vbihjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHBldC5jIGIvZHJpdmVycy9jaGFyL2hwZXQuYwppbmRleCBmM2NmYjRjLi40MDhmNWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHBldC5jCisrKyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCWZvciAoaXJxID0gZmluZF9maXJzdF9iaXQoJnYsIEhQRVRfTUFYX0lSUSk7IGlycSA8IEhQRVRfTUFYX0lSUTsKIAkJaXJxID0gZmluZF9uZXh0X2JpdCgmdiwgSFBFVF9NQVhfSVJRLCAxICsgaXJxKSkgewogCi0JCWlmIChpcnEgPj0gTlJfSVJRUykgeworCQlpZiAoaXJxID49IG5yX2lycXMpIHsKIAkJCWlycSA9IEhQRVRfTUFYX0lSUTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IGJmNzA0NTAuLjViODE5YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXIgPSBjb25zX29wc1tpbmRleF0tPnB1dF9jaGFycyh2dGVybW5vc1tpbmRleF0sIGMsIGkpOwotCQkJaWYgKHIgPCAwKSB7CisJCQlpZiAociA8PSAwKSB7CiAJCQkJLyogdGhyb3cgYXdheSBjaGFycyBvbiBlcnJvciAqLwogCQkJCWkgPSAwOwogCQkJfSBlbHNlIGlmIChyID4gMCkgewpAQCAtMzc0LDYgKzM3NCw5IEBACiAJCWlmIChocC0+b3BzLT5ub3RpZmllcl9kZWwpCiAJCQlocC0+b3BzLT5ub3RpZmllcl9kZWwoaHAsIGhwLT5kYXRhKTsKIAorCQkvKiBjYW5jZWwgcGVuZGluZyB0dHkgcmVzaXplIHdvcmsgKi8KKwkJY2FuY2VsX3dvcmtfc3luYygmaHAtPnR0eV9yZXNpemUpOworCiAJCS8qCiAJCSAqIENoYWluIGNhbGxzIGNoYXJzX2luX2J1ZmZlcigpIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGlmCiAJCSAqIHRoZXJlIGlzIG5vIGJ1ZmZlcmVkIGRhdGEgb3RoZXJ3aXNlIHNsZWVwcyBvbiBhIHdhaXQgcXVldWUKQEAgLTM5OSw2ICs0MDIsOSBAQAogCWlmICghaHApCiAJCXJldHVybjsKIAorCS8qIGNhbmNlbCBwZW5kaW5nIHR0eSByZXNpemUgd29yayAqLworCWNhbmNlbF93b3JrX3N5bmMoJmhwLT50dHlfcmVzaXplKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZocC0+bG9jaywgZmxhZ3MpOwogCiAJLyoKQEAgLTQxOCw4ICs0MjQsOCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHAtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChocC0+b3BzLT5ub3RpZmllcl9kZWwpCi0JCQlocC0+b3BzLT5ub3RpZmllcl9kZWwoaHAsIGhwLT5kYXRhKTsKKwlpZiAoaHAtPm9wcy0+bm90aWZpZXJfaGFuZ3VwKQorCQkJaHAtPm9wcy0+bm90aWZpZXJfaGFuZ3VwKGhwLCBocC0+ZGF0YSk7CiAKIAl3aGlsZSh0ZW1wX29wZW5fY291bnQpIHsKIAkJLS10ZW1wX29wZW5fY291bnQ7CkBAIC00MzEsNyArNDM3LDcgQEAKICAqIFB1c2ggYnVmZmVyZWQgY2hhcmFjdGVycyB3aGV0aGVyIHRoZXkgd2VyZSBqdXN0IHJlY2VudGx5IGJ1ZmZlcmVkIG9yIHdhaXRpbmcKICAqIG9uIGEgYmxvY2tlZCBoeXBlcnZpc29yLiAgQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggaHAtPmxvY2sgaGVsZC4KICAqLwotc3RhdGljIHZvaWQgaHZjX3B1c2goc3RydWN0IGh2Y19zdHJ1Y3QgKmhwKQorc3RhdGljIGludCBodmNfcHVzaChzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApCiB7CiAJaW50IG47CiAKQEAgLTQzOSw3ICs0NDUsNyBAQAogCWlmIChuIDw9IDApIHsKIAkJaWYgKG4gPT0gMCkgewogCQkJaHAtPmRvX3dha2V1cCA9IDE7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKIAkJfQogCQkvKiB0aHJvdyBhd2F5IG91dHB1dCBvbiBlcnJvcjsgdGhpcyBoYXBwZW5zIHdoZW4KIAkJICAgdGhlcmUgaXMgbm8gc2Vzc2lvbiBjb25uZWN0ZWQgdG8gdGhlIHZ0ZXJtLiAqLwpAQCAtNDUwLDYgKzQ1Niw4IEBACiAJCW1lbW1vdmUoaHAtPm91dGJ1ZiwgaHAtPm91dGJ1ZiArIG4sIGhwLT5uX291dGJ1Zik7CiAJZWxzZQogCQlocC0+ZG9fd2FrZXVwID0gMTsKKworCXJldHVybiBuOwogfQogCiBzdGF0aWMgaW50IGh2Y193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKQEAgLTQ5Miw2ICs1MDAsMzkgQEAKIAlyZXR1cm4gd3JpdHRlbjsKIH0KIAorLyoqCisgKiBodmNfc2V0X3dpbnN6KCkgLSBSZXNpemUgdGhlIGh2YyB0dHkgdGVybWluYWwgd2luZG93LgorICogQHdvcms6CXdvcmsgc3RydWN0dXJlLgorICoKKyAqIFRoZSByb3V0aW5lIHNoYWxsIG5vdCBiZSBjYWxsZWQgd2l0aGluIGFuIGF0b21pYyBjb250ZXh0IGJlY2F1c2UgaXQKKyAqIG1pZ2h0IHNsZWVwLgorICoKKyAqIExvY2tpbmc6CWhwLT5sb2NrCisgKi8KK3N0YXRpYyB2b2lkIGh2Y19zZXRfd2luc3ooc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBodmNfc3RydWN0ICpocDsKKwl1bnNpZ25lZCBsb25nIGh2Y19mbGFnczsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXN0cnVjdCB3aW5zaXplIHdzOworCisJaHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGh2Y19zdHJ1Y3QsIHR0eV9yZXNpemUpOworCWlmICghaHApCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZocC0+bG9jaywgaHZjX2ZsYWdzKTsKKwlpZiAoIWhwLT50dHkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHAtPmxvY2ssIGh2Y19mbGFncyk7CisJCXJldHVybjsKKwl9CisJd3MgID0gaHAtPndzOworCXR0eSA9IHR0eV9rcmVmX2dldChocC0+dHR5KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZocC0+bG9jaywgaHZjX2ZsYWdzKTsKKworCXR0eV9kb19yZXNpemUodHR5LCB0dHksICZ3cyk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKIC8qCiAgKiBUaGlzIGlzIGFjdHVhbGx5IGEgY29udHJhY3QgYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgdHR5IGxheWVyIG91dGxpbmluZwogICogaG93IG11Y2ggd3JpdGUgcm9vbSB0aGUgZHJpdmVyIGNhbiBndWFyYW50ZWUgd2lsbCBiZSBzZW50IE9SIEJVRkZFUkVELiAgVGhpcwpAQCAtNTM4LDE2ICs1NzksMjAgQEAKIAljaGFyIGJ1ZltOX0lOQlVGXSBfX0FMSUdORURfXzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZWFkX3RvdGFsID0gMDsKKwlpbnQgd3JpdHRlbl90b3RhbCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFB1c2ggcGVuZGluZyB3cml0ZXMgKi8KIAlpZiAoaHAtPm5fb3V0YnVmID4gMCkKLQkJaHZjX3B1c2goaHApOworCQl3cml0dGVuX3RvdGFsID0gaHZjX3B1c2goaHApOwogCiAJLyogUmVzY2hlZHVsZSB1cyBpZiBzdGlsbCBzb21lIHdyaXRlIHBlbmRpbmcgKi8KLQlpZiAoaHAtPm5fb3V0YnVmID4gMCkKKwlpZiAoaHAtPm5fb3V0YnVmID4gMCkgewogCQlwb2xsX21hc2sgfD0gSFZDX1BPTExfV1JJVEU7CisJCS8qIElmIGh2Y19wdXNoKCkgd2FzIG5vdCBhYmxlIHRvIHdyaXRlLCBzbGVlcCBhIGZldyBtc2VjcyAqLworCQl0aW1lb3V0ID0gKHdyaXR0ZW5fdG90YWwpID8gMCA6IE1JTl9USU1FT1VUOworCX0KIAogCS8qIE5vIHR0eSBhdHRhY2hlZCwganVzdCBza2lwICovCiAJdHR5ID0gaHAtPnR0eTsKQEAgLTYzMiw2ICs2NzcsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGh2Y19wb2xsKTsKIAorLyoqCisgKiBodmNfcmVzaXplKCkgLSBVcGRhdGUgdGVybWluYWwgd2luZG93IHNpemUgaW5mb3JtYXRpb24uCisgKiBAaHA6CQlIVkMgY29uc29sZSBwb2ludGVyCisgKiBAd3M6CQlUZXJtaW5hbCB3aW5kb3cgc2l6ZSBzdHJ1Y3R1cmUKKyAqCisgKiBTdG9yZXMgdGhlIHNwZWNpZmllZCB3aW5kb3cgc2l6ZSBpbmZvcm1hdGlvbiBpbiB0aGUgaHZjIHN0cnVjdHVyZSBvZiBAaHAuCisgKiBUaGUgZnVuY3Rpb24gc2NoZWR1bGUgdGhlIHR0eSByZXNpemUgdXBkYXRlLgorICoKKyAqIExvY2tpbmc6CUxvY2tpbmcgZnJlZTsgdGhlIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIGhvbGRpbmcgaHAtPmxvY2sKKyAqLwordm9pZCBodmNfcmVzaXplKHN0cnVjdCBodmNfc3RydWN0ICpocCwgc3RydWN0IHdpbnNpemUgd3MpCit7CisJaWYgKChocC0+d3Mud3Nfcm93ICE9IHdzLndzX3JvdykgfHwgKGhwLT53cy53c19jb2wgIT0gd3Mud3NfY29sKSkgeworCQlocC0+d3MgPSB3czsKKwkJc2NoZWR1bGVfd29yaygmaHAtPnR0eV9yZXNpemUpOworCX0KK30KKwogLyoKICAqIFRoaXMga3RocmVhZCBpcyBlaXRoZXIgcG9sbGluZyBvciBpbnRlcnJ1cHQgZHJpdmVuLiAgVGhpcyBpcyBkZXRlcm1pbmVkIGJ5CiAgKiBjYWxsaW5nIGh2Y19wb2xsKCkgd2hvIGRldGVybWluZXMgd2hldGhlciBhIGNvbnNvbGUgYWRhcHRlciBzdXBwb3J0CkBAIC02NTksMTAgKzcyMiw2IEBACiAJCQlwb2xsX21hc2sgfD0gSFZDX1BPTExfUkVBRDsKIAkJaWYgKGh2Y19raWNrZWQpCiAJCQljb250aW51ZTsKLQkJaWYgKHBvbGxfbWFzayAmIEhWQ19QT0xMX1dSSVRFKSB7Ci0JCQl5aWVsZCgpOwotCQkJY29udGludWU7Ci0JCX0KIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKCFodmNfa2lja2VkKSB7CiAJCQlpZiAocG9sbF9tYXNrID09IDApCkBAIC03MTgsNiArNzc3LDcgQEAKIAogCWtyZWZfaW5pdCgmaHAtPmtyZWYpOwogCisJSU5JVF9XT1JLKCZocC0+dHR5X3Jlc2l6ZSwgaHZjX3NldF93aW5zeik7CiAJc3Bpbl9sb2NrX2luaXQoJmhwLT5sb2NrKTsKIAlzcGluX2xvY2soJmh2Y19zdHJ1Y3RzX2xvY2spOwogCkBAIC03NDMsNyArODAzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGh2Y19hbGxvYyk7CiAKLWludCBfX2RldmV4aXQgaHZjX3JlbW92ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApCitpbnQgaHZjX3JlbW92ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwpAQCAtNzk2LDcgKzg1Niw3IEBACiAJZHJ2LT5taW5vcl9zdGFydCA9IEhWQ19NSU5PUjsKIAlkcnYtPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU1lTVEVNOwogCWRydi0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotCWRydi0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOworCWRydi0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhkcnYsICZodmNfb3BzKTsKIAogCS8qIEFsd2F5cyBzdGFydCB0aGUga3RocmVhZCBiZWNhdXNlIHRoZXJlIGNhbiBiZSBob3RwbHVnIHZ0eSBhZGFwdGVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmggYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAppbmRleCA5NzkwMjAxLi44Mjk3ZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBIVkNfQ09OU09MRV9ICiAjZGVmaW5lIEhWQ19DT05TT0xFX0gKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnNvbGUgYWRhcHRlcnMgdGhhdCBjYW4vd2lsbCBiZSBmb3VuZCBhcwpAQCAtNTYsNiArNTcsOCBAQAogCXN0cnVjdCBodl9vcHMgKm9wczsKIAlpbnQgaXJxX3JlcXVlc3RlZDsKIAlpbnQgZGF0YTsKKwlzdHJ1Y3Qgd2luc2l6ZSB3czsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHR5X3Jlc2l6ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CiAJc3RydWN0IGtyZWYga3JlZjsgLyogcmVmIGNvdW50ICYgaHZjX3N0cnVjdCBsaWZldGltZSAqLwogfTsKQEAgLTY1LDkgKzY4LDEwIEBACiAJaW50ICgqZ2V0X2NoYXJzKSh1aW50MzJfdCB2dGVybW5vLCBjaGFyICpidWYsIGludCBjb3VudCk7CiAJaW50ICgqcHV0X2NoYXJzKSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpidWYsIGludCBjb3VudCk7CiAKLQkvKiBDYWxsYmFja3MgZm9yIG5vdGlmaWNhdGlvbi4gQ2FsbGVkIGluIG9wZW4gYW5kIGNsb3NlICovCisJLyogQ2FsbGJhY2tzIGZvciBub3RpZmljYXRpb24uIENhbGxlZCBpbiBvcGVuLCBjbG9zZSBhbmQgaGFuZ3VwICovCiAJaW50ICgqbm90aWZpZXJfYWRkKShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIGludCBpcnEpOwogCXZvaWQgKCpub3RpZmllcl9kZWwpKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGlycSk7CisJdm9pZCAoKm5vdGlmaWVyX2hhbmd1cCkoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBpbnQgaXJxKTsKIH07CiAKIC8qIFJlZ2lzdGVyIGEgdnRlcm0gYW5kIGEgc2xvdCBpbmRleCBmb3IgdXNlIGFzIGEgY29uc29sZSAoY29uc29sZV9pbml0KSAqLwpAQCAtNzcsMTUgKzgxLDE5IEBACiBleHRlcm4gc3RydWN0IGh2Y19zdHJ1Y3QgKiBfX2RldmluaXQgaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAogCQkJCXN0cnVjdCBodl9vcHMgKm9wcywgaW50IG91dGJ1Zl9zaXplKTsKIC8qIHJlbW92ZSBhIHZ0ZXJtIGZyb20gaHZjIHR0eSBvcGVyYXRpb24gKG1vZHVsZV9leGl0IG9yIGhvdHBsdWcgcmVtb3ZlKSAqLwotZXh0ZXJuIGludCBfX2RldmV4aXQgaHZjX3JlbW92ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApOworZXh0ZXJuIGludCBodmNfcmVtb3ZlKHN0cnVjdCBodmNfc3RydWN0ICpocCk7CiAKIC8qIGRhdGEgYXZhaWxhYmxlICovCiBpbnQgaHZjX3BvbGwoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwKTsKIHZvaWQgaHZjX2tpY2sodm9pZCk7CiAKKy8qIFJlc2l6ZSBodmMgdHR5IHRlcm1pbmFsIHdpbmRvdyAqLworZXh0ZXJuIHZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKKwogLyogZGVmYXVsdCBub3RpZmllciBmb3IgaXJxIGJhc2VkIG5vdGlmaWNhdGlvbiAqLwogZXh0ZXJuIGludCBub3RpZmllcl9hZGRfaXJxKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpOwogZXh0ZXJuIHZvaWQgbm90aWZpZXJfZGVsX2lycShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIGludCBkYXRhKTsKK2V4dGVybiB2b2lkIG5vdGlmaWVyX2hhbmd1cF9pcnEoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBpbnQgZGF0YSk7CiAKIAogI2lmIGRlZmluZWQoQ09ORklHX1hNT04pICYmIGRlZmluZWQoQ09ORklHX1NNUCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXJxLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2lycS5jCmluZGV4IDczYTU5Y2QuLmQwOWU1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pcnEuYwpAQCAtNDIsMyArNDIsOCBAQAogCWZyZWVfaXJxKGlycSwgaHApOwogCWhwLT5pcnFfcmVxdWVzdGVkID0gMDsKIH0KKwordm9pZCBub3RpZmllcl9oYW5ndXBfaXJxKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGlycSkKK3sKKwlub3RpZmllcl9kZWxfaXJxKGhwLCBpcnEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwppbmRleCBiNzFjNjEwLi5iNzRhMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwpAQCAtMjAyLDYgKzIwMiw3IEBACiAJLnB1dF9jaGFycyA9IHB1dF9jaGFycywKIAkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX2lycSwKIAkubm90aWZpZXJfZGVsID0gbm90aWZpZXJfZGVsX2lycSwKKwkubm90aWZpZXJfaGFuZ3VwID0gbm90aWZpZXJfaGFuZ3VwX2lycSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGh2Y192aW9fcHJvYmUoc3RydWN0IHZpb19kZXYgKnZkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jIGIvZHJpdmVycy9jaGFyL2h2Y192aW8uYwppbmRleCA5M2YzODQwLi4wMTllMGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKQEAgLTgyLDYgKzgyLDcgQEAKIAkucHV0X2NoYXJzID0gaHZjX3B1dF9jaGFycywKIAkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX2lycSwKIAkubm90aWZpZXJfZGVsID0gbm90aWZpZXJfZGVsX2lycSwKKwkubm90aWZpZXJfaGFuZ3VwID0gbm90aWZpZXJfaGFuZ3VwX2lycSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGh2Y192aW9fcHJvYmUoc3RydWN0IHZpb19kZXYgKnZkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwppbmRleCA1MzhjZWVhLi5lYmE5OTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogCS5wdXRfY2hhcnMgPSB3cml0ZV9jb25zb2xlLAogCS5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfaXJxLAogCS5ub3RpZmllcl9kZWwgPSBub3RpZmllcl9kZWxfaXJxLAorCS5ub3RpZmllcl9oYW5ndXAgPSBub3RpZmllcl9oYW5ndXBfaXJxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgeGVuX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jIGIvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKaW5kZXggZWM5ZDA0NC4uMmFiZDg4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKQEAgLTEzMCwxMiArMTMwLDEyIEBACiAJCWlmICh5cnMgPj0gMTAwKQogCQkJeXJzIC09IDEwMDsKIAotCQlzZWMgPSBCSU4yQkNEKHNlYyk7Ci0JCW1pbiA9IEJJTjJCQ0QobWluKTsKLQkJaHJzID0gQklOMkJDRChocnMpOwotCQlkYXkgPSBCSU4yQkNEKGRheSk7Ci0JCW1vbiA9IEJJTjJCQ0QobW9uKTsKLQkJeXJzID0gQklOMkJDRCh5cnMpOworCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJaHJzID0gYmluMmJjZChocnMpOworCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAkJcnRjLT5jb250cm9sIHw9IE00OFQzNV9SVENfU0VUOwpAQCAtMzExLDEyICszMTEsMTIgQEAKIAlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfUkVBRDsKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCXJ0Y190bS0+dG1fc2VjID0gQkNEMkJJTihydGNfdG0tPnRtX3NlYyk7Ci0JcnRjX3RtLT50bV9taW4gPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWluKTsKLQlydGNfdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ0Y190bS0+dG1faG91cik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX21kYXkpOwotCXJ0Y190bS0+dG1fbW9uID0gQkNEMkJJTihydGNfdG0tPnRtX21vbik7Ci0JcnRjX3RtLT50bV95ZWFyID0gQkNEMkJJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL252cmFtLmMgYi9kcml2ZXJzL2NoYXIvbnZyYW0uYwppbmRleCAzOWY2MzU3Li44MDU0ZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbnZyYW0uYworKysgYi9kcml2ZXJzL2NoYXIvbnZyYW0uYwpAQCAtMzM4LDcgKzMzOCw3IEBACiAKIAlpZiAoKG52cmFtX29wZW5fY250ICYmIChmaWxlLT5mX2ZsYWdzICYgT19FWENMKSkgfHwKIAkgICAgKG52cmFtX29wZW5fbW9kZSAmIE5WUkFNX0VYQ0wpIHx8Ci0JICAgICgoZmlsZS0+Zl9tb2RlICYgMikgJiYgKG52cmFtX29wZW5fbW9kZSAmIE5WUkFNX1dSSVRFKSkpIHsKKwkgICAgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYgKG52cmFtX29wZW5fbW9kZSAmIE5WUkFNX1dSSVRFKSkpIHsKIAkJc3Bpbl91bmxvY2soJm52cmFtX3N0YXRlX2xvY2spOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19FWENMKQogCQludnJhbV9vcGVuX21vZGUgfD0gTlZSQU1fRVhDTDsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgMikKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCiAJCW52cmFtX29wZW5fbW9kZSB8PSBOVlJBTV9XUklURTsKIAludnJhbV9vcGVuX2NudCsrOwogCkBAIC0zNjYsNyArMzY2LDcgQEAKIAkvKiBpZiBvbmx5IG9uZSBpbnN0YW5jZSBpcyBvcGVuLCBjbGVhciB0aGUgRVhDTCBiaXQgKi8KIAlpZiAobnZyYW1fb3Blbl9tb2RlICYgTlZSQU1fRVhDTCkKIAkJbnZyYW1fb3Blbl9tb2RlICY9IH5OVlJBTV9FWENMOwotCWlmIChmaWxlLT5mX21vZGUgJiAyKQorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJbnZyYW1fb3Blbl9tb2RlICY9IH5OVlJBTV9XUklURTsKIAogCXNwaW5fdW5sb2NrKCZudnJhbV9zdGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYyBiL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYwppbmRleCBiOTMwZGU1Li4zZjdkYThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCkBAIC00MSw3ICs0MSw4IEBACiAjZGVmaW5lIFNJT19CQVNFMiAgICAgICAweDRFCS8qIGFsdCBjb21tYW5kLXJlZyB0byBjaGVjayAqLwogCiAjZGVmaW5lIFNJT19TSUQJCTB4MjAJLyogU3VwZXJJL08gSUQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0lPX1NJRF9WQUxVRQkweGU5CS8qIEV4cGVjdGVkIHZhbHVlIGluIFN1cGVySS9PIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFNJT19TSURfUEM4NzM2NQkweGU1CS8qIEV4cGVjdGVkIHZhbHVlIGluIElEIFJlZ2lzdGVyIGZvciBQQzg3MzY1ICovCisjZGVmaW5lIFNJT19TSURfUEM4NzM2NgkweGU5CS8qIEV4cGVjdGVkIHZhbHVlIGluIElEIFJlZ2lzdGVyIGZvciBQQzg3MzY2ICovCiAKICNkZWZpbmUgU0lPX0NGMQkJMHgyMQkvKiBjaGlwIGNvbmZpZywgYml0MCBpcyBjaGlwIGVuYWJsZSAqLwogCkBAIC05MSwxMyArOTIsMTcgQEAKIAogc3RhdGljIGludCBwYzg3MzZ4X3N1cGVyaW9fcHJlc2VudCh2b2lkKQogeworCWludCBpZDsKKwogCS8qIHRyeSB0aGUgMiBwb3NzaWJsZSB2YWx1ZXMsIHJlYWQgYSBoYXJkd2FyZSByZWcgdG8gdmVyaWZ5ICovCiAJc3VwZXJpb19jbWQgPSBTSU9fQkFTRTE7Ci0JaWYgKHN1cGVyaW9faW5iKFNJT19TSUQpID09IFNJT19TSURfVkFMVUUpCisJaWQgPSBzdXBlcmlvX2luYihTSU9fU0lEKTsKKwlpZiAoaWQgPT0gU0lPX1NJRF9QQzg3MzY1IHx8IGlkID09IFNJT19TSURfUEM4NzM2NikKIAkJcmV0dXJuIHN1cGVyaW9fY21kOwogCiAJc3VwZXJpb19jbWQgPSBTSU9fQkFTRTI7Ci0JaWYgKHN1cGVyaW9faW5iKFNJT19TSUQpID09IFNJT19TSURfVkFMVUUpCisJaWQgPSBzdXBlcmlvX2luYihTSU9fU0lEKTsKKwlpZiAoaWQgPT0gU0lPX1NJRF9QQzg3MzY1IHx8IGlkID09IFNJT19TSURfUEM4NzM2NikKIAkJcmV0dXJuIHN1cGVyaW9fY21kOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggYzg3NTJlYS4uNzA1YTgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtNTU4LDkgKzU1OCwyNiBAQAogCXVuc2lnbmVkIGRvbnRfY291bnRfZW50cm9weToxOwogfTsKIAotc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlIGlucHV0X3RpbWVyX3N0YXRlOwogc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICppcnFfdGltZXJfc3RhdGVbTlJfSVJRU107CiAKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqZ2V0X3RpbWVyX3JhbmRfc3RhdGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGlycV90aW1lcl9zdGF0ZVtpcnFdOworfQorCitzdGF0aWMgdm9pZCBzZXRfdGltZXJfcmFuZF9zdGF0ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGlycSA+PSBucl9pcnFzKQorCQlyZXR1cm47CisKKwlpcnFfdGltZXJfc3RhdGVbaXJxXSA9IHN0YXRlOworfQorCitzdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgaW5wdXRfdGltZXJfc3RhdGU7CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgZW50cm9weSB0byB0aGUgZW50cm9weSAicG9vbCIgYnkgdXNpbmcgdGltaW5nCiAgKiBkZWxheXMuICBJdCB1c2VzIHRoZSB0aW1lcl9yYW5kX3N0YXRlIHN0cnVjdHVyZSB0byBtYWtlIGFuIGVzdGltYXRlCkBAIC02NDgsMTEgKzY2NSwxNSBAQAogCiB2b2lkIGFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyhpbnQgaXJxKQogewotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCBpcnFfdGltZXJfc3RhdGVbaXJxXSA9PSBOVUxMKQorCXN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0gZ2V0X3RpbWVyX3JhbmRfc3RhdGUoaXJxKTsKKworCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlERUJVR19FTlQoImlycSBldmVudCAlZFxuIiwgaXJxKTsKLQlhZGRfdGltZXJfcmFuZG9tbmVzcyhpcnFfdGltZXJfc3RhdGVbaXJxXSwgMHgxMDAgKyBpcnEpOworCWFkZF90aW1lcl9yYW5kb21uZXNzKHN0YXRlLCAweDEwMCArIGlycSk7CiB9CiAKICNpZmRlZiBDT05GSUdfQkxPQ0sKQEAgLTkxMiw3ICs5MzMsMTIgQEAKIHsKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGU7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgaXJxX3RpbWVyX3N0YXRlW2lycV0pCisJaWYgKGlycSA+PSBucl9pcnFzKQorCQlyZXR1cm47CisKKwlzdGF0ZSA9IGdldF90aW1lcl9yYW5kX3N0YXRlKGlycSk7CisKKwlpZiAoc3RhdGUpCiAJCXJldHVybjsKIAogCS8qCkBAIC05MjEsNyArOTQ3LDcgQEAKIAkgKi8KIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlKQotCQlpcnFfdGltZXJfc3RhdGVbaXJxXSA9IHN0YXRlOworCQlzZXRfdGltZXJfcmFuZF9zdGF0ZShpcnEsIHN0YXRlKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTE9DSwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IGUxMzkzNzIuLjk2YWRmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTY1LDcgKzY1LDcgQEAKIAlpZiAoIWJkZXYpCiAJCWdvdG8gb3V0OwogCWlncmFiKGJkZXYtPmJkX2lub2RlKTsKLQllcnIgPSBibGtkZXZfZ2V0KGJkZXYsIGZpbHAtPmZfbW9kZSwgMCk7CisJZXJyID0gYmxrZGV2X2dldChiZGV2LCBmaWxwLT5mX21vZGUpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCWVyciA9IGJkX2NsYWltKGJkZXYsIHJhd19vcGVuKTsKQEAgLTg3LDcgKzg3LDcgQEAKIG91dDI6CiAJYmRfcmVsZWFzZShiZGV2KTsKIG91dDE6Ci0JYmxrZGV2X3B1dChiZGV2KTsKKwlibGtkZXZfcHV0KGJkZXYsIGZpbHAtPmZfbW9kZSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZyYXdfbXV0ZXgpOwogCXJldHVybiBlcnI7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAltdXRleF91bmxvY2soJnJhd19tdXRleCk7CiAKIAliZF9yZWxlYXNlKGJkZXYpOwotCWJsa2Rldl9wdXQoYmRldik7CisJYmxrZGV2X3B1dChiZGV2LCBmaWxwLT5mX21vZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCi0JcmV0dXJuIGJsa2Rldl9pb2N0bChiZGV2LT5iZF9pbm9kZSwgTlVMTCwgY29tbWFuZCwgYXJnKTsKKwlyZXR1cm4gYmxrZGV2X2lvY3RsKGJkZXYsIDAsIGNvbW1hbmQsIGFyZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJpbmRfZGV2aWNlKHN0cnVjdCByYXdfY29uZmlnX3JlcXVlc3QgKnJxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IDE3NjgzZGUuLjMyZGM4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTUxOCwxNyArNTE4LDE3IEBACiAJCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fAogCQkJCQkJCVJUQ19BTFdBWVNfQkNEKSB7CiAJCQlpZiAoc2VjIDwgNjApCi0JCQkJQklOX1RPX0JDRChzZWMpOworCQkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKIAkJCWVsc2UKIAkJCQlzZWMgPSAweGZmOwogCiAJCQlpZiAobWluIDwgNjApCi0JCQkJQklOX1RPX0JDRChtaW4pOworCQkJCW1pbiA9IGJpbjJiY2QobWluKTsKIAkJCWVsc2UKIAkJCQltaW4gPSAweGZmOwogCiAJCQlpZiAoaHJzIDwgMjQpCi0JCQkJQklOX1RPX0JDRChocnMpOworCQkJCWhycyA9IGJpbjJiY2QoaHJzKTsKIAkJCWVsc2UKIAkJCQlocnMgPSAweGZmOwogCQl9CkBAIC02MTQsMTIgKzYxNCwxMiBAQAogCiAJCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKQogCQkgICAgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0Qoc2VjKTsKLQkJCUJJTl9UT19CQ0QobWluKTsKLQkJCUJJTl9UT19CQ0QoaHJzKTsKLQkJCUJJTl9UT19CQ0QoZGF5KTsKLQkJCUJJTl9UT19CQ0QobW9uKTsKLQkJCUJJTl9UT19CQ0QoeXJzKTsKKwkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJCWRheSA9IGJpbjJiY2QoZGF5KTsKKwkJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAkJfQogCiAJCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CkBAIC0xMDk5LDcgKzEwOTksNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKHllYXIpOyAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gKi8KKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7ICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLwogCiAJaWYgKHllYXIgPCAyMCkgewogCQllcG9jaCA9IDIwMDA7CkBAIC0xMzUyLDEzICsxMzUyLDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAogCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fd2RheSk7CisJCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwkJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCQlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCQlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CisJCXJ0Y190bS0+dG1fd2RheSA9IGJjZDJiaW4ocnRjX3RtLT50bV93ZGF5KTsKIAl9CiAKICNpZmRlZiBDT05GSUdfTUFDSF9ERUNTVEFUSU9OCkBAIC0xMzkyLDkgKzEzOTIsOSBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9zZWMpOwotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX2hvdXIpOworCQlhbG1fdG0tPnRtX3NlYyA9IGJjZDJiaW4oYWxtX3RtLT50bV9zZWMpOworCQlhbG1fdG0tPnRtX21pbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9taW4pOworCQlhbG1fdG0tPnRtX2hvdXIgPSBiY2QyYmluKGFsbV90bS0+dG1faG91cik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3guYyBiL2RyaXZlcnMvY2hhci9zeC5jCmluZGV4IDViOGQ3YTEuLmJhNGU4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeC5jCkBAIC0yNTA0LDcgKzI1MDQsNyBAQAogCQlkZWxfdGltZXIoJmJvYXJkLT50aW1lcik7CiAJCWlmIChwZGV2KSB7CiAjaWZkZWYgQ09ORklHX1BDSQotCQkJcGNpX2lvdW5tYXAocGRldiwgYm9hcmQtPmJhc2UyKTsKKwkJCWlvdW5tYXAoYm9hcmQtPmJhc2UyKTsKIAkJCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCBJU19DRl9CT0FSRChib2FyZCkgPyAzIDogMik7CiAjZW5kaWYKIAkJfSBlbHNlIHsKQEAgLTI2NzcsNyArMjY3Nyw3IEBACiAJfQogCWJvYXJkLT5od19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHJlZyk7CiAJYm9hcmQtPmJhc2UyID0KLQlib2FyZC0+YmFzZSA9IHBjaV9pb21hcChwZGV2LCByZWcsIFdJTkRPV19MRU4oYm9hcmQpKTsKKwlib2FyZC0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShib2FyZC0+aHdfYmFzZSwgV0lORE9XX0xFTihib2FyZCkpOwogCWlmICghYm9hcmQtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9yZWc7CkBAIC0yNzAzLDcgKzI3MDMsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnJfdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgYm9hcmQtPmJhc2UyKTsKKwlpb3VubWFwKGJvYXJkLT5iYXNlMik7CiBlcnJfcmVnOgogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCByZWcpOwogZXJyX2ZsYWc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IGRjZTRjYzAuLmNlMGQ5ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3Nob3dfdGltZXJzX29wID0gewogCS5oYW5kbGVyCT0gc3lzcnFfaGFuZGxlX3Nob3dfdGltZXJzLAogCS5oZWxwX21zZwk9ICJzaG93LWFsbC10aW1lcnMoUSkiLAotCS5hY3Rpb25fbXNnCT0gIlNob3cgUGVuZGluZyBUaW1lcnMiLAorCS5hY3Rpb25fbXNnCT0gIlNob3cgY2xvY2tldmVudCBkZXZpY2VzICYgcGVuZGluZyBocnRpbWVycyAobm8gb3RoZXJzKSIsCiB9OwogCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfbW91bnRybyhpbnQga2V5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKaW5kZXggZTcwZDEzZC4uOWM0N2RjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCkBAIC0xMTU3LDcgKzExNTcsNyBAQAogICogT25jZSBhbGwgcmVmZXJlbmNlcyB0byBwbGF0Zm9ybSBkZXZpY2UgYXJlIGRvd24gdG8gMCwKICAqIHJlbGVhc2UgYWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzLgogICovCi1zdGF0aWMgdm9pZCB0cG1fZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQordm9pZCB0cG1fZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCmluZGV4IDU1M2IwZTkuLmM4ZjgwMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCkBAIC05MCw3ICs5MCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAlpZiAocG9ydC0+dHR5KQogCQl0dHlfa3JlZl9wdXQocG9ydC0+dHR5KTsKLQlwb3J0LT50dHkgPSB0dHk7CisJcG9ydC0+dHR5ID0gdHR5X2tyZWZfZ2V0KHR0eSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF90dHlfc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggZDBmNGViNi4uM2ZiMGQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTE5OCw2ICsxOTgsNyBAQAogCXZpcnRpb19jb25zLnB1dF9jaGFycyA9IHB1dF9jaGFyczsKIAl2aXJ0aW9fY29ucy5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfdmlvOwogCXZpcnRpb19jb25zLm5vdGlmaWVyX2RlbCA9IG5vdGlmaWVyX2RlbF92aW87CisJdmlydGlvX2NvbnMubm90aWZpZXJfaGFuZ3VwID0gbm90aWZpZXJfZGVsX3ZpbzsKIAogCS8qIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBodmNfYWxsb2MoKSBpcyB0aGUgdmlydHVhbCBjb25zb2xlIG51bWJlciwgc28KIAkgKiB3ZSB1c2UgemVyby4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwppbmRleCBmZmU5YjRlLi41NGM4MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gTlJfSVJRUykKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gbnJfaXJxcykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXJldHVybiBjYXNjYWRlX2lycShpcnEsIGdpdV9nZXRfaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMKaW5kZXggNzFkMmFjNC4uYzIwMTcxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMKQEAgLTIzNyw5ICsyMzcsMTIgQEAKIAogCWlmIChzdHJpY3Rfc3RydG91bChhcmcsIDE2LCAmYmFzZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmIChiYXNlID4gVUlOVF9NQVgpCisJCXJldHVybiAtRVJBTkdFOworI2VuZGlmCiAJcHJpbnRrKEtFUk5fSU5GTyAiUE1UTVIgSU9Qb3J0IG92ZXJyaWRlOiAweCUwNHggLT4gMHglMDRseFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGludClwbXRtcl9pb3BvcnQsIGJhc2UpOworCSAgICAgICBwbXRtcl9pb3BvcnQsIGJhc2UpOwogCXBtdG1yX2lvcG9ydCA9IGJhc2U7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCmluZGV4IDVjZTA3YjUuLjViZWQ3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWlkbGUuaD4KICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KIAogI2luY2x1ZGUgImNwdWlkbGUuaCIKIApAQCAtNTYsMTAgKzU3LDIwIEBACiAJCWlmIChwbV9pZGxlX29sZCkKIAkJCXBtX2lkbGVfb2xkKCk7CiAJCWVsc2UKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEUpCisJCQlkZWZhdWx0X2lkbGUoKTsKKyNlbHNlCiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisjZW5kaWYKIAkJcmV0dXJuOwogCX0KIAorCS8qCisJICogcnVuIGFueSB0aW1lcnMgdGhhdCBjYW4gYmUgcnVuIG5vdywgYXQgdGhpcyBwb2ludAorCSAqIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgaWRsZSBkdXJhdGlvbiBldGMuCisJICovCisJaHJ0aW1lcl9wZWVrX2FoZWFkX3RpbWVycygpOworCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKIAlpZiAobmVlZF9yZXNjaGVkKCkpCkBAIC02Nyw4ICs3OCwxMSBAQAogCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKIAogCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCi0JZGV2LT5sYXN0X3Jlc2lkZW5jeSA9IHRhcmdldF9zdGF0ZS0+ZW50ZXIoZGV2LCB0YXJnZXRfc3RhdGUpOwogCWRldi0+bGFzdF9zdGF0ZSA9IHRhcmdldF9zdGF0ZTsKKwlkZXYtPmxhc3RfcmVzaWRlbmN5ID0gdGFyZ2V0X3N0YXRlLT5lbnRlcihkZXYsIHRhcmdldF9zdGF0ZSk7CisJaWYgKGRldi0+bGFzdF9zdGF0ZSkKKwkJdGFyZ2V0X3N0YXRlID0gZGV2LT5sYXN0X3N0YXRlOworCiAJdGFyZ2V0X3N0YXRlLT50aW1lICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5sYXN0X3Jlc2lkZW5jeTsKIAl0YXJnZXRfc3RhdGUtPnVzYWdlKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL0tjb25maWcgYi9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IGNkMzAzOTAuLjkwNGU1NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtNDgsMTMgKzQ4LDEzIEBACiAJICBjYW4gYmUgaW50ZWdyYXRlZCBpbiBjaGlwcyBzdWNoIGFzIHRoZSBBdG1lbCBBVDMyYXA3MDAwLgogCiBjb25maWcgRlNMX0RNQQotCWJvb2wgIkZyZWVzY2FsZSBNUEM4NXh4L01QQzgzeHggRE1BIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUEMKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIEVsbyBhbmQgRWxvIFBsdXMgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGU0xfU09DCiAJc2VsZWN0IERNQV9FTkdJTkUKIAktLS1oZWxwLS0tCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBETUEgZW5naW5lLiBOb3csIGl0IHN1cHBvcnQKLQkgIE1QQzg1NjAvNDAsIE1QQzg1NTUsIE1QQzg1NDggYW5kIE1QQzg2NDEgcHJvY2Vzc29ycy4KLQkgIFRoZSBNUEM4MzQ5LCBNUEM4MzYwIGlzIGFsc28gc3VwcG9ydGVkLgorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgRWxvIGFuZCBFbG8gUGx1cyBETUEgY29udHJvbGxlcnMuCisJICBUaGUgRWxvIGlzIHRoZSBETUEgY29udHJvbGxlciBvbiBzb21lIDgyeHggYW5kIDgzeHggcGFydHMsIGFuZCB0aGUKKwkgIEVsbyBQbHVzIGlzIHRoZSBETUEgY29udHJvbGxlciBvbiA4NXh4IGFuZCA4Nnh4IHBhcnRzLgogCiBjb25maWcgTVZfWE9SCiAJYm9vbCAiTWFydmVsbCBYT1IgZW5naW5lIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKaW5kZXggYTA4ZDE5Ny4uZDFlMzgxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwpAQCAtMzI1LDcgKzMyNSwxMiBAQAogCXN0cnVjdCBkbWF0ZXN0X3RocmVhZAkqdGhyZWFkOwogCXVuc2lnbmVkIGludAkJaTsKIAotCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfQVRPTUlDKTsKKwkvKiBIYXZlIHdlIGFscmVhZHkgYmVlbiB0b2xkIGFib3V0IHRoaXMgY2hhbm5lbD8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0YywgJmRtYXRlc3RfY2hhbm5lbHMsIG5vZGUpCisJCWlmIChkdGMtPmNoYW4gPT0gY2hhbikKKwkJCXJldHVybiBETUFfRFVQOworCisJZHRjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRtYXRlc3RfY2hhbiksIEdGUF9LRVJORUwpOwogCWlmICghZHRjKSB7CiAJCXByX3dhcm5pbmcoImRtYXRlc3Q6IE5vIG1lbW9yeSBmb3IgJXNcbiIsIGNoYW4tPmRldi5idXNfaWQpOwogCQlyZXR1cm4gRE1BX05BSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKaW5kZXggYzAwNTljYS4uMGI5NWRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKQEAgLTM3MCw3ICszNzAsMTAgQEAKIAkJCQkJc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9jaGFuKGNoYW4pOwotCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBIYXMgdGhpcyBjaGFubmVsIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQ/ICovCisJaWYgKGZzbF9jaGFuLT5kZXNjX3Bvb2wpCisJCXJldHVybiAxOwogCiAJLyogV2UgbmVlZCB0aGUgZGVzY3JpcHRvciB0byBiZSBhbGlnbmVkIHRvIDMyYnl0ZXMKIAkgKiBmb3IgbWVldGluZyBGU0wgRE1BIHNwZWNpZmljYXRpb24gcmVxdWlyZW1lbnQuCkBAIC00MTAsNiArNDEzLDggQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwogCWRtYV9wb29sX2Rlc3Ryb3koZnNsX2NoYW4tPmRlc2NfcG9vbCk7CisKKwlmc2xfY2hhbi0+ZGVzY19wb29sID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCkBAIC03ODYsMTU5ICs3OTEsMjkgQEAKIAlmc2xfY2hhbl9sZF9jbGVhbnVwKGZzbF9jaGFuKTsKIH0KIAotc3RhdGljIHZvaWQgZnNsX2RtYV9jYWxsYmFja190ZXN0KHZvaWQgKnBhcmFtKQorc3RhdGljIGludCBfX2RldmluaXQgZnNsX2RtYV9jaGFuX3Byb2JlKHN0cnVjdCBmc2xfZG1hX2RldmljZSAqZmRldiwKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBmZWF0dXJlLCBjb25zdCBjaGFyICpjb21wYXRpYmxlKQogewotCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gcGFyYW07Ci0JaWYgKGZzbF9jaGFuKQotCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogY2FsbGJhY2sgaXMgb2shXG4iKTsKLX0KLQotc3RhdGljIGludCBmc2xfZG1hX3NlbGZfdGVzdChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKLXsKLQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47Ci0JaW50IGVyciA9IDA7Ci0JZG1hX2FkZHJfdCBkbWFfZGVzdCwgZG1hX3NyYzsKLQlkbWFfY29va2llX3QgY29va2llOwotCXU4ICpzcmMsICpkZXN0OwotCWludCBpOwotCXNpemVfdCB0ZXN0X3NpemU7Ci0Jc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDEsICp0eDIsICp0eDM7Ci0KLQl0ZXN0X3NpemUgPSA0MDk2OwotCi0Jc3JjID0ga21hbGxvYyh0ZXN0X3NpemUgKiAyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNyYykgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCi0JCQkJInNlbGZ0ZXN0OiBDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciB0ZXN0IVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRlc3QgPSBzcmMgKyB0ZXN0X3NpemU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdGVzdF9zaXplOyBpKyspCi0JCXNyY1tpXSA9ICh1OCkgaTsKLQotCWNoYW4gPSAmZnNsX2NoYW4tPmNvbW1vbjsKLQotCWlmIChmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGNoYW4sIE5VTEwpIDwgMSkgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCi0JCQkJInNlbGZ0ZXN0OiBDYW5ub3QgYWxsb2MgcmVzb3VyY2VzIGZvciBETUFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBUWCAxICovCi0JZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIHNyYywgdGVzdF9zaXplIC8gMiwKLQkJCQkgRE1BX1RPX0RFVklDRSk7Ci0JZG1hX2Rlc3QgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBkZXN0LCB0ZXN0X3NpemUgLyAyLAotCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKLQl0eDEgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyAyLCAwKTsKLQlhc3luY190eF9hY2sodHgxKTsKLQotCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4MSk7Ci0JZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhjaGFuKTsKLQltc2xlZXAoMik7Ci0KLQlpZiAoZnNsX2RtYV9pc19jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9IERNQV9TVUNDRVNTKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUaW1lIG91dCFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfcmVzb3VyY2VzOwotCX0KLQotCS8qIFRlc3QgZnJlZSBhbmQgcmUtYWxsb2MgY2hhbm5lbCByZXNvdXJjZXMgKi8KLQlmc2xfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoY2hhbik7Ci0KLQlpZiAoZnNsX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhjaGFuLCBOVUxMKSA8IDEpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LAotCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIHJlc291cmNlcyBmb3IgRE1BXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3Jlc291cmNlczsKLQl9Ci0KLQkvKiBDb250aW51ZSB0byB0ZXN0Ci0JICogVFggMgotCSAqLwotCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBzcmMgKyB0ZXN0X3NpemUgLyAyLAotCQkJCQl0ZXN0X3NpemUgLyA0LCBETUFfVE9fREVWSUNFKTsKLQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIGRlc3QgKyB0ZXN0X3NpemUgLyAyLAotCQkJCQl0ZXN0X3NpemUgLyA0LCBETUFfRlJPTV9ERVZJQ0UpOwotCXR4MiA9IGZzbF9kbWFfcHJlcF9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QsIGRtYV9zcmMsIHRlc3Rfc2l6ZSAvIDQsIDApOwotCWFzeW5jX3R4X2Fjayh0eDIpOwotCi0JLyogVFggMyAqLwotCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBzcmMgKyB0ZXN0X3NpemUgKiAzIC8gNCwKLQkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX1RPX0RFVklDRSk7Ci0JZG1hX2Rlc3QgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBkZXN0ICsgdGVzdF9zaXplICogMyAvIDQsCi0JCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9GUk9NX0RFVklDRSk7Ci0JdHgzID0gZnNsX2RtYV9wcmVwX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgdGVzdF9zaXplIC8gNCwgMCk7Ci0JYXN5bmNfdHhfYWNrKHR4Myk7Ci0KLQkvKiBJbnRlcnJ1cHQgdHggdGVzdCAqLwotCXR4MSA9IGZzbF9kbWFfcHJlcF9pbnRlcnJ1cHQoY2hhbiwgMCk7Ci0JYXN5bmNfdHhfYWNrKHR4MSk7Ci0JY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgxKTsKLQotCS8qIFRlc3QgZXhjaGFuZ2luZyB0aGUgcHJlcGFyZWQgdHggc29ydCAqLwotCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4Myk7Ci0JY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgyKTsKLQotCWlmIChkbWFfaGFzX2NhcChETUFfSU5URVJSVVBULCAoKHN0cnVjdCBmc2xfZG1hX2RldmljZSAqKQotCSAgICBkZXZfZ2V0X2RydmRhdGEoZnNsX2NoYW4tPmRldi0+cGFyZW50KSktPmNvbW1vbi5jYXBfbWFzaykpIHsKLQkJdHgzLT5jYWxsYmFjayA9IGZzbF9kbWFfY2FsbGJhY2tfdGVzdDsKLQkJdHgzLT5jYWxsYmFja19wYXJhbSA9IGZzbF9jaGFuOwotCX0KLQlmc2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwotCW1zbGVlcCgyKTsKLQotCWlmIChmc2xfZG1hX2lzX2NvbXBsZXRlKGNoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAic2VsZnRlc3Q6IFRpbWUgb3V0IVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9yZXNvdXJjZXM7Ci0JfQotCi0JZXJyID0gbWVtY21wKHNyYywgZGVzdCwgdGVzdF9zaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWZvciAoaSA9IDA7ICgqKHNyYyArIGkpID09ICooZGVzdCArIGkpKSAmJiAoaSA8IHRlc3Rfc2l6ZSk7Ci0JCQkJaSsrKTsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAic2VsZnRlc3Q6IFRlc3QgZmFpbGVkLCBkYXRhICVkLyVsZCBpcyAiCi0JCQkJImVycm9yISBzcmMgMHgleCwgZGVzdCAweCV4XG4iLAotCQkJCWksIChsb25nKXRlc3Rfc2l6ZSwgKihzcmMgKyBpKSwgKihkZXN0ICsgaSkpOwotCX0KLQotZnJlZV9yZXNvdXJjZXM6Ci0JZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKGNoYW4pOwotb3V0OgotCWtmcmVlKHNyYyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgb2ZfZnNsX2RtYV9jaGFuX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwKLQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBmc2xfZG1hX2RldmljZSAqZmRldjsKIAlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpuZXdfZnNsX2NoYW47CiAJaW50IGVycjsKIAotCWZkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKLQlCVUdfT04oIWZkZXYpOwotCiAJLyogYWxsb2MgY2hhbm5lbCAqLwogCW5ld19mc2xfY2hhbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2NoYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19mc2xfY2hhbikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIGZyZWUgbWVtb3J5IGZvciBhbGxvY2F0aW5nICIKKwkJZGV2X2VycihmZGV2LT5kZXYsICJObyBmcmVlIG1lbW9yeSBmb3IgYWxsb2NhdGluZyAiCiAJCQkJImRtYSBjaGFubmVscyFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBnZXQgZG1hIGNoYW5uZWwgcmVnaXN0ZXIgYmFzZSAqLwotCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LT5ub2RlLCAwLCAmbmV3X2ZzbF9jaGFuLT5yZWcpOworCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uobm9kZSwgMCwgJm5ld19mc2xfY2hhbi0+cmVnKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQ2FuJ3QgZ2V0ICVzIHByb3BlcnR5ICdyZWcnXG4iLAotCQkJCWRldi0+bm9kZS0+ZnVsbF9uYW1lKTsKKwkJZGV2X2VycihmZGV2LT5kZXYsICJDYW4ndCBnZXQgJXMgcHJvcGVydHkgJ3JlZydcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKIAkJZ290byBlcnJfbm9fcmVnOwogCX0KIAotCW5ld19mc2xfY2hhbi0+ZmVhdHVyZSA9ICoodTMyICopbWF0Y2gtPmRhdGE7CisJbmV3X2ZzbF9jaGFuLT5mZWF0dXJlID0gZmVhdHVyZTsKIAogCWlmICghZmRldi0+ZmVhdHVyZSkKIAkJZmRldi0+ZmVhdHVyZSA9IG5ld19mc2xfY2hhbi0+ZmVhdHVyZTsKQEAgLTk0OCwxMyArODIzLDEzIEBACiAJICovCiAJV0FSTl9PTihmZGV2LT5mZWF0dXJlICE9IG5ld19mc2xfY2hhbi0+ZmVhdHVyZSk7CiAKLQluZXdfZnNsX2NoYW4tPmRldiA9ICZkZXYtPmRldjsKKwluZXdfZnNsX2NoYW4tPmRldiA9ICZuZXdfZnNsX2NoYW4tPmNvbW1vbi5kZXY7CiAJbmV3X2ZzbF9jaGFuLT5yZWdfYmFzZSA9IGlvcmVtYXAobmV3X2ZzbF9jaGFuLT5yZWcuc3RhcnQsCiAJCQluZXdfZnNsX2NoYW4tPnJlZy5lbmQgLSBuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCArIDEpOwogCiAJbmV3X2ZzbF9jaGFuLT5pZCA9ICgobmV3X2ZzbF9jaGFuLT5yZWcuc3RhcnQgLSAweDEwMCkgJiAweGZmZikgPj4gNzsKIAlpZiAobmV3X2ZzbF9jaGFuLT5pZCA+IEZTTF9ETUFfTUFYX0NIQU5TX1BFUl9ERVZJQ0UpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJUaGVyZSBpcyBubyAlZCBjaGFubmVsIVxuIiwKKwkJZGV2X2VycihmZGV2LT5kZXYsICJUaGVyZSBpcyBubyAlZCBjaGFubmVsIVxuIiwKIAkJCQluZXdfZnNsX2NoYW4tPmlkKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBlcnJfbm9fY2hhbjsKQEAgLTk4OCwyOSArODYzLDIzIEBACiAJCQkmZmRldi0+Y29tbW9uLmNoYW5uZWxzKTsKIAlmZGV2LT5jb21tb24uY2hhbmNudCsrOwogCi0JbmV3X2ZzbF9jaGFuLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOworCW5ld19mc2xfY2hhbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CiAJaWYgKG5ld19mc2xfY2hhbi0+aXJxICE9IE5PX0lSUSkgewogCQllcnIgPSByZXF1ZXN0X2lycShuZXdfZnNsX2NoYW4tPmlycSwKIAkJCQkJJmZzbF9kbWFfY2hhbl9kb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCQkiZnNsZG1hLWNoYW5uZWwiLCBuZXdfZnNsX2NoYW4pOwogCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKCZkZXYtPmRldiwgIkRNQSBjaGFubmVsICVzIHJlcXVlc3RfaXJxIGVycm9yICIKLQkJCQkid2l0aCByZXR1cm4gJWRcbiIsIGRldi0+bm9kZS0+ZnVsbF9uYW1lLCBlcnIpOworCQkJZGV2X2VycihmZGV2LT5kZXYsICJETUEgY2hhbm5lbCAlcyByZXF1ZXN0X2lycSBlcnJvciAiCisJCQkJIndpdGggcmV0dXJuICVkXG4iLCBub2RlLT5mdWxsX25hbWUsIGVycik7CiAJCQlnb3RvIGVycl9ub19pcnE7CiAJCX0KIAl9CiAKLQllcnIgPSBmc2xfZG1hX3NlbGZfdGVzdChuZXdfZnNsX2NoYW4pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3NlbGZfdGVzdDsKLQotCWRldl9pbmZvKCZkZXYtPmRldiwgIiMlZCAoJXMpLCBpcnEgJWRcbiIsIG5ld19mc2xfY2hhbi0+aWQsCi0JCQkJbWF0Y2gtPmNvbXBhdGlibGUsIG5ld19mc2xfY2hhbi0+aXJxKTsKKwlkZXZfaW5mbyhmZGV2LT5kZXYsICIjJWQgKCVzKSwgaXJxICVkXG4iLCBuZXdfZnNsX2NoYW4tPmlkLAorCQkJCWNvbXBhdGlibGUsIG5ld19mc2xfY2hhbi0+aXJxKTsKIAogCXJldHVybiAwOwogCi1lcnJfc2VsZl90ZXN0OgotCWZyZWVfaXJxKG5ld19mc2xfY2hhbi0+aXJxLCBuZXdfZnNsX2NoYW4pOwogZXJyX25vX2lycToKIAlsaXN0X2RlbCgmbmV3X2ZzbF9jaGFuLT5jb21tb24uZGV2aWNlX25vZGUpOwogZXJyX25vX2NoYW46CkBAIC0xMDIwLDM4ICs4ODksMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1jb25zdCB1MzIgbXBjODU0MF9kbWFfaXBfZmVhdHVyZSA9IEZTTF9ETUFfSVBfODVYWCB8IEZTTF9ETUFfQklHX0VORElBTjsKLWNvbnN0IHUzMiBtcGM4MzQ5X2RtYV9pcF9mZWF0dXJlID0gRlNMX0RNQV9JUF84M1hYIHwgRlNMX0RNQV9MSVRUTEVfRU5ESUFOOwotCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9mc2xfZG1hX2NoYW5faWRzW10gPSB7Ci0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIsCi0JCS5kYXRhID0gKHZvaWQgKikmbXBjODU0MF9kbWFfaXBfZmVhdHVyZSwKLQl9LAotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLGVsby1kbWEtY2hhbm5lbCIsCi0JCS5kYXRhID0gKHZvaWQgKikmbXBjODM0OV9kbWFfaXBfZmVhdHVyZSwKLQl9LAotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBvZl9mc2xfZG1hX2NoYW5fZHJpdmVyID0gewotCS5uYW1lID0gIm9mLWZzbC1kbWEtY2hhbm5lbCIsCi0JLm1hdGNoX3RhYmxlID0gb2ZfZnNsX2RtYV9jaGFuX2lkcywKLQkucHJvYmUgPSBvZl9mc2xfZG1hX2NoYW5fcHJvYmUsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBvZl9mc2xfZG1hX2NoYW5faW5pdCh2b2lkKQorc3RhdGljIHZvaWQgZnNsX2RtYV9jaGFuX3JlbW92ZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmY2hhbikKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2NoYW5fZHJpdmVyKTsKKwlmcmVlX2lycShmY2hhbi0+aXJxLCBmY2hhbik7CisJbGlzdF9kZWwoJmZjaGFuLT5jb21tb24uZGV2aWNlX25vZGUpOworCWlvdW5tYXAoZmNoYW4tPnJlZ19iYXNlKTsKKwlrZnJlZShmY2hhbik7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZzbF9kbWFfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LAogCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBpbnQgaXJxOwogCXN0cnVjdCBmc2xfZG1hX2RldmljZSAqZmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwogCiAJZmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghZmRldikgewpAQCAtMTA4NSw5ICs5MzYsOSBAQAogCWZkZXYtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CiAJZmRldi0+Y29tbW9uLmRldiA9ICZkZXYtPmRldjsKIAotCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+bm9kZSwgMCk7Ci0JaWYgKGlycSAhPSBOT19JUlEpIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCAmZnNsX2RtYV9kb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCWZkZXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+bm9kZSwgMCk7CisJaWYgKGZkZXYtPmlycSAhPSBOT19JUlEpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEoZmRldi0+aXJxLCAmZnNsX2RtYV9kb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCQkiZnNsZG1hLWRldmljZSIsIGZkZXYpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkRNQSBkZXZpY2UgcmVxdWVzdF9pcnEgZXJyb3IgIgpAQCAtMTA5Nyw3ICs5NDgsMjEgQEAKIAl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJihkZXYtPmRldiksIGZkZXYpOwotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShkZXYtPm5vZGUsIG9mX2ZzbF9kbWFfY2hhbl9pZHMsICZkZXYtPmRldik7CisKKwkvKiBXZSBjYW5ub3QgdXNlIG9mX3BsYXRmb3JtX2J1c19wcm9iZSgpIGJlY2F1c2UgdGhlcmUgaXMgbm8KKwkgKiBvZl9wbGF0Zm9ybV9idXNfcmVtb3ZlLiAgSW5zdGVhZCwgd2UgbWFudWFsbHkgaW5zdGFudGlhdGUgZXZlcnkgRE1BCisJICogY2hhbm5lbCBvYmplY3QuCisJICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm5vZGUsIGNoaWxkKSB7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIikpCisJCQlmc2xfZG1hX2NoYW5fcHJvYmUoZmRldiwgY2hpbGQsCisJCQkJRlNMX0RNQV9JUF84NVhYIHwgRlNMX0RNQV9CSUdfRU5ESUFOLAorCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIpOworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJmc2wsZWxvLWRtYS1jaGFubmVsIikpCisJCQlmc2xfZG1hX2NoYW5fcHJvYmUoZmRldiwgY2hpbGQsCisJCQkJRlNMX0RNQV9JUF84M1hYIHwgRlNMX0RNQV9MSVRUTEVfRU5ESUFOLAorCQkJCSJmc2wsZWxvLWRtYS1jaGFubmVsIik7CisJfQogCiAJZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmZmRldi0+Y29tbW9uKTsKIAlyZXR1cm4gMDsKQEAgLTExMDksNiArOTc0LDMwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBvZl9mc2xfZG1hX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9kZXYpCit7CisJc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2OworCXVuc2lnbmVkIGludCBpOworCisJZmRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZfZGV2LT5kZXYpOworCisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZmZGV2LT5jb21tb24pOworCisJZm9yIChpID0gMDsgaSA8IEZTTF9ETUFfTUFYX0NIQU5TX1BFUl9ERVZJQ0U7IGkrKykKKwkJaWYgKGZkZXYtPmNoYW5baV0pCisJCQlmc2xfZG1hX2NoYW5fcmVtb3ZlKGZkZXYtPmNoYW5baV0pOworCisJaWYgKGZkZXYtPmlycSAhPSBOT19JUlEpCisJCWZyZWVfaXJxKGZkZXYtPmlycSwgZmRldik7CisKKwlpb3VubWFwKGZkZXYtPnJlZ19iYXNlKTsKKworCWtmcmVlKGZkZXYpOworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZfZGV2LT5kZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZzbF9kbWFfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLGVsby1kbWEiLCB9LApAQCAtMTExNiwxNSArMTAwNSwzMiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgb2ZfZnNsX2RtYV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAib2YtZnNsLWRtYSIsCisJLm5hbWUgPSAiZnNsLWVsby1kbWEiLAogCS5tYXRjaF90YWJsZSA9IG9mX2ZzbF9kbWFfaWRzLAogCS5wcm9iZSA9IG9mX2ZzbF9kbWFfcHJvYmUsCisJLnJlbW92ZSA9IG9mX2ZzbF9kbWFfcmVtb3ZlLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgb2ZfZnNsX2RtYV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9kcml2ZXIpOworCWludCByZXQ7CisKKwlwcl9pbmZvKCJGcmVlc2NhbGUgRWxvIC8gRWxvIFBsdXMgRE1BIGRyaXZlclxuIik7CisKKwlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcl9lcnIoImZzbGRtYTogZmFpbGVkIHRvIHJlZ2lzdGVyIHBsYXRmb3JtIGRyaXZlclxuIik7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdWJzeXNfaW5pdGNhbGwob2ZfZnNsX2RtYV9jaGFuX2luaXQpOworc3RhdGljIHZvaWQgX19leGl0IG9mX2ZzbF9kbWFfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2RyaXZlcik7Cit9CisKIHN1YnN5c19pbml0Y2FsbChvZl9mc2xfZG1hX2luaXQpOworbW9kdWxlX2V4aXQob2ZfZnNsX2RtYV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgRWxvIC8gRWxvIFBsdXMgRE1BIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsZG1hLmggYi9kcml2ZXJzL2RtYS9mc2xkbWEuaAppbmRleCA2ZmFmMDdiLi40ZjIxYTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2xkbWEuaAorKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuaApAQCAtMTE0LDYgKzExNCw3IEBACiAJc3RydWN0IGRtYV9kZXZpY2UgY29tbW9uOwogCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmNoYW5bRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRV07CiAJdTMyIGZlYXR1cmU7CQkvKiBUaGUgc2FtZSBhcyBETUEgY2hhbm5lbHMgKi8KKwlpbnQgaXJxOwkJLyogQ2hhbm5lbCBJUlEgKi8KIH07CiAKIC8qIERlZmluZSBtYWNyb3MgZm9yIGZzbF9kbWFfY2hhbi0+ZmVhdHVyZSBwcm9wZXJ0eSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKaW5kZXggYmM4YzZlMy4uNDNiOGNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCkBAIC0xNzEsNiArMTcxLDkgQEAKIAl4ZmVyY2FwX3NjYWxlID0gcmVhZGIoZGV2aWNlLT5yZWdfYmFzZSArIElPQVRfWEZFUkNBUF9PRkZTRVQpOwogCXhmZXJjYXAgPSAoeGZlcmNhcF9zY2FsZSA9PSAwID8gLTEgOiAoMVVMIDw8IHhmZXJjYXBfc2NhbGUpKTsKIAorI2lmIENPTkZJR19JNzMwMF9JRExFX0lPQVRfQ0hBTk5FTAorCWRldmljZS0+Y29tbW9uLmNoYW5jbnQtLTsKKyNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPmNvbW1vbi5jaGFuY250OyBpKyspIHsKIAkJaW9hdF9jaGFuID0ga3phbGxvYyhzaXplb2YoKmlvYXRfY2hhbiksIEdGUF9LRVJORUwpOwogCQlpZiAoIWlvYXRfY2hhbikgewpAQCAtOTcxLDExICs5NzQsOSBAQAogCXN3aXRjaCAoaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24pIHsKIAljYXNlIElPQVRfVkVSXzFfMjoKIAkJcmV0dXJuIGlvYXQxX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7Ci0JCWJyZWFrOwogCWNhc2UgSU9BVF9WRVJfMl8wOgogCWNhc2UgSU9BVF9WRVJfM18wOgogCQlyZXR1cm4gaW9hdDJfZG1hX2dldF9uZXh0X2Rlc2NyaXB0b3IoaW9hdF9jaGFuKTsKLQkJYnJlYWs7CiAJfQogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCmluZGV4IDBlMDI0ZmUuLjg4NzA3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQljc3Jvdy0+bnJfcGFnZXMgPSAoci5lbmQgLSByLnN0YXJ0ICsgMSkgPj4gUEFHRV9TSElGVDsKIAkJY3Nyb3ctPmxhc3RfcGFnZSA9IGNzcm93LT5maXJzdF9wYWdlICsgY3Nyb3ctPm5yX3BhZ2VzIC0gMTsKIAkJY3Nyb3ctPm10eXBlID0gTUVNX1hEUjsKLQkJY3Nyb3ctPmVkYWNfbW9kZSA9IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7CisJCWNzcm93LT5lZGFjX21vZGUgPSBFREFDX1NFQ0RFRDsKIAkJZGV2X2RiZyhtY2ktPmRldiwKIAkJCSJJbml0aWFsaXplZCBvbiBub2RlICVkLCBjaGFubWFzaz0weCV4LCIKIAkJCSIgZmlyc3RfcGFnZT0weCVseCwgbnJfcGFnZXM9MHgleFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKaW5kZXggZGViMTU0YS4uNDM1MzQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKQEAgLTczMiw3ICs3MzIsNiBAQAogCiAJYXR0ci0+YXR0ci5uYW1lID0gbmFtZTsKIAlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVVNSOwotCWF0dHItPmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAogCWF0dHItPmhkciA9IGhkcjsKIAlhdHRyLT5zaG93ID0gc2hvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggZGJkNDJkNi4uN2YyZWUyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTEyNyw2ICsxMjcsMTMgQEAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGFuIGluLWtlcm5lbCBpbnRlcmZhY2UgdG8gdGhvc2UgR1BJT3MgdXNpbmcKIAkgIHBsYXRmb3JtLW5ldXRyYWwgR1BJTyBjYWxscy4KIAorY29uZmlnIEdQSU9fVFdMNDAzMAorCXRyaXN0YXRlICJUV0w0MDMwLCBUV0w1MDMwLCBhbmQgVFBTNjU5eDAgR1BJT3MiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYWNjZXNzIHRoZSBHUElPIHNpZ25hbHMgb2YgdmFyaW91cyBtdWx0aS1mdW5jdGlvbgorCSAgcG93ZXIgbWFuYWdlbWVudCBjaGlwcyBmcm9tIFRleGFzIEluc3RydW1lbnRzLgorCiBjb21tZW50ICJQQ0kgR1BJTyBleHBhbmRlcnM6IgogCiBjb25maWcgR1BJT19CVDhYWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IDAxYjRiYmQuLjZhYWZkZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTksNCArOSw1IEBACiBvYmotJChDT05GSUdfR1BJT19NQ1AyM1MwOCkJKz0gbWNwMjNzMDgubwogb2JqLSQoQ09ORklHX0dQSU9fUENBOTUzWCkJKz0gcGNhOTUzeC5vCiBvYmotJChDT05GSUdfR1BJT19QQ0Y4NTdYKQkrPSBwY2Y4NTd4Lm8KK29iai0kKENPTkZJR19HUElPX1RXTDQwMzApCSs9IHR3bDQwMzAtZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19CVDhYWCkJKz0gYnQ4eHhncGlvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDkxMTI4MzAuLmZhYTFjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJaWYgKCF0ZXN0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKSkKIAkJc3RhdHVzID0gLUVJTzsKIAllbHNlCi0JCXN0YXR1cyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGdwaW8pKTsKKwkJc3RhdHVzID0gc3ByaW50ZihidWYsICIlZFxuIiwgISFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChncGlvKSk7CiAKIAltdXRleF91bmxvY2soJnN5c2ZzX2xvY2spOwogCXJldHVybiBzdGF0dXM7CkBAIC0xMTA1LDcgKzExMDUsNyBAQAogCiAJbWlnaHRfc2xlZXBfaWYoZXh0cmFfY2hlY2tzKTsKIAljaGlwID0gZ3Bpb190b19jaGlwKGdwaW8pOwotCXJldHVybiBjaGlwLT5nZXQoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpOworCXJldHVybiBjaGlwLT5nZXQgPyBjaGlwLT5nZXQoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpIDogMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKTsKIApAQCAtMTE0Myw3ICsxMTQzLDcgQEAKIAogCQlpZiAoIWlzX291dCkgewogCQkJaW50CQlpcnEgPSBncGlvX3RvX2lycShncGlvKTsKLQkJCXN0cnVjdCBpcnFfZGVzYwkqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQkJc3RydWN0IGlycV9kZXNjCSpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCQkJLyogVGhpcyByYWNlcyB3aXRoIHJlcXVlc3RfaXJxKCksIHNldF9pcnFfdHlwZSgpLAogCQkJICogYW5kIHNldF9pcnFfd2FrZSgpIC4uLiBidXQgdGhvc2UgYXJlICJyYXJlIi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2QzZWVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCkBAIC0wLDAgKzEsNTIxIEBACisvKgorICogdHdsNDAzMF9ncGlvLmMgLS0gYWNjZXNzIHRvIEdQSU9zIG9uIFRXTDQwMzAvVFBTNjU5eDAgY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBDb2RlIHJlLWFycmFuZ2VkIGFuZCBjbGVhbmVkIHVwIGJ5OgorICoJU3llZCBNb2hhbW1lZCBLaGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KKyAqCisgKiBJbml0aWFsIENvZGU6CisgKglBbmR5IExvd2UgLyBOaXNoYW50aCBNZW5vbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisKKy8qCisgKiBUaGUgR1BJTyAic3ViY2hpcCIgc3VwcG9ydHMgMTggR1BJT3Mgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQgYXMKKyAqIGlucHV0cyBvciBvdXRwdXRzLCB3aXRoIHB1bGx1cHMgb3IgcHVsbGRvd25zIG9uIGVhY2ggcGluLiAgRWFjaAorICogR1BJTyBjYW4gdHJpZ2dlciBpbnRlcnJ1cHRzIG9uIGVpdGhlciBvciBib3RoIGVkZ2VzLgorICoKKyAqIEdQSU8gaW50ZXJydXB0cyBjYW4gYmUgZmVkIHRvIGVpdGhlciBvZiB0d28gSVJRIGxpbmVzOyB0aGlzIGlzCisgKiBpbnRlbmRlZCB0byBzdXBwb3J0IG11bHRpcGxlIGhvc3RzLgorICoKKyAqIFRoZXJlIGFyZSBhbHNvIHR3byBMRUQgcGlucyB1c2VkIHNvbWV0aW1lcyBhcyBvdXRwdXQtb25seSBHUElPcy4KKyAqLworCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHR3bF9ncGlvY2hpcDsKK3N0YXRpYyBpbnQgdHdsNDAzMF9ncGlvX2lycV9iYXNlOworCisvKiBnZW5pcnEgaW50ZXJmYWNlcyBhcmUgbm90IGF2YWlsYWJsZSB0byBtb2R1bGVzICovCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIGlzX21vZHVsZSgpCXRydWUKKyNlbHNlCisjZGVmaW5lIGlzX21vZHVsZSgpCWZhbHNlCisjZW5kaWYKKworLyogR1BJT19DVFJMIEZpZWxkcyAqLworI2RlZmluZSBNQVNLX0dQSU9fQ1RSTF9HUElPMENEMQkJQklUKDApCisjZGVmaW5lIE1BU0tfR1BJT19DVFJMX0dQSU8xQ0QyCQlCSVQoMSkKKyNkZWZpbmUgTUFTS19HUElPX0NUUkxfR1BJT19PTgkJQklUKDIpCisKKy8qIE1hc2sgZm9yIEdQSU8gcmVnaXN0ZXJzIHdoZW4gYWdncmVnYXRlZCBpbnRvIGEgMzItYml0IGludGVnZXIgKi8KKyNkZWZpbmUgR1BJT18zMl9NQVNLCQkJMHgwMDAzZmZmZgorCisvKiBEYXRhIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoZ3Bpb19sb2NrKTsKKworLyogc3RvcmUgdXNhZ2Ugb2YgZWFjaCBHUElPLiAtIGVhY2ggYml0IHJlcHJlc2VudHMgb25lIEdQSU8gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3Bpb191c2FnZV9jb3VudDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRvIGNvbmZpZ3VyZSBUV0w0MDMwIEdQSU8gbW9kdWxlIHJlZ2lzdGVycworICovCitzdGF0aWMgaW5saW5lIGludCBncGlvX3R3bDQwMzBfd3JpdGUodTggYWRkcmVzcywgdTggZGF0YSkKK3sKKwlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfR1BJTywgZGF0YSwgYWRkcmVzcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBMRUQgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX3tMRUQsUFdNQSxQV01CfSkpCisgKiBQV01zIEEgYW5kIEIgYXJlIGRlZGljYXRlZCB0byBMRURzIEEgYW5kIEIsIHJlc3BlY3RpdmVseS4KKyAqLworCisjZGVmaW5lIFRXTDQwMzBfTEVEX0xFREVOCTB4MAorCisvKiBMRURFTiBiaXRzICovCisjZGVmaW5lIExFREVOX0xFREFPTgkJQklUKDApCisjZGVmaW5lIExFREVOX0xFREJPTgkJQklUKDEpCisjZGVmaW5lIExFREVOX0xFREFFWFQJCUJJVCgyKQorI2RlZmluZSBMRURFTl9MRURCRVhUCQlCSVQoMykKKyNkZWZpbmUgTEVERU5fTEVEQVBXTQkJQklUKDQpCisjZGVmaW5lIExFREVOX0xFREJQV00JCUJJVCg1KQorI2RlZmluZSBMRURFTl9QV01fTEVOR1RIQQlCSVQoNikKKyNkZWZpbmUgTEVERU5fUFdNX0xFTkdUSEIJQklUKDcpCisKKyNkZWZpbmUgVFdMNDAzMF9QV014X1BXTXhPTgkweDAKKyNkZWZpbmUgVFdMNDAzMF9QV014X1BXTXhPRkYJMHgxCisKKyNkZWZpbmUgUFdNeE9OX0xFTkdUSAkJQklUKDcpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUbyByZWFkIGEgVFdMNDAzMCBHUElPIG1vZHVsZSByZWdpc3RlcgorICovCitzdGF0aWMgaW5saW5lIGludCBncGlvX3R3bDQwMzBfcmVhZCh1OCBhZGRyZXNzKQoreworCXU4IGRhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0dQSU8sICZkYXRhLCBhZGRyZXNzKTsKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogZGF0YTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHU4IGNhY2hlZF9sZWRlbjsJCS8qIHByb3RlY3RlZCBieSBncGlvX2xvY2sgKi8KKworLyogVGhlIExFRCBsaW5lcyBhcmUgb3BlbiBkcmFpbiBvdXRwdXRzIC4uLiBhIEZFVCBwdWxscyB0byBHTkQsIHNvIGFuCisgKiBleHRlcm5hbCBwdWxsdXAgaXMgbmVlZGVkLiAgV2UgY291bGQgYWxzbyBleHBvc2UgdGhlIGludGVncmF0ZWQgUFdNCisgKiBhcyBhIExFRCBicmlnaHRuZXNzIGNvbnRyb2w7IHdlIGluaXRpYWxpemUgaXQgYXMgImFsd2F5cyBvbiIuCisgKi8KK3N0YXRpYyB2b2lkIHR3bDQwMzBfbGVkX3NldF92YWx1ZShpbnQgbGVkLCBpbnQgdmFsdWUpCit7CisJdTggbWFzayA9IExFREVOX0xFREFPTiB8IExFREVOX0xFREFQV007CisJaW50IHN0YXR1czsKKworCWlmIChsZWQpCisJCW1hc2sgPDw9IDE7CisKKwltdXRleF9sb2NrKCZncGlvX2xvY2spOworCWlmICh2YWx1ZSkKKwkJY2FjaGVkX2xlZGVuICY9IH5tYXNrOworCWVsc2UKKwkJY2FjaGVkX2xlZGVuIHw9IG1hc2s7CisJc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCBjYWNoZWRfbGVkZW4sCisJCQlUV0w0MDMwX0xFRF9MRURFTik7CisJbXV0ZXhfdW5sb2NrKCZncGlvX2xvY2spOworfQorCitzdGF0aWMgaW50IHR3bDQwMzBfc2V0X2dwaW9fZGlyZWN0aW9uKGludCBncGlvLCBpbnQgaXNfaW5wdXQpCit7CisJdTggZF9ibmsgPSBncGlvID4+IDM7CisJdTggZF9tc2sgPSBCSVQoZ3BpbyAmIDB4Nyk7CisJdTggcmVnID0gMDsKKwl1OCBiYXNlID0gUkVHX0dQSU9EQVRBRElSMSArIGRfYm5rOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZ3Bpb19sb2NrKTsKKwlyZXQgPSBncGlvX3R3bDQwMzBfcmVhZChiYXNlKTsKKwlpZiAocmV0ID49IDApIHsKKwkJaWYgKGlzX2lucHV0KQorCQkJcmVnID0gcmV0ICYgfmRfbXNrOworCQllbHNlCisJCQlyZWcgPSByZXQgfCBkX21zazsKKworCQlyZXQgPSBncGlvX3R3bDQwMzBfd3JpdGUoYmFzZSwgcmVnKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZncGlvX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMF9zZXRfZ3Bpb19kYXRhb3V0KGludCBncGlvLCBpbnQgZW5hYmxlKQoreworCXU4IGRfYm5rID0gZ3BpbyA+PiAzOworCXU4IGRfbXNrID0gQklUKGdwaW8gJiAweDcpOworCXU4IGJhc2UgPSAwOworCisJaWYgKGVuYWJsZSkKKwkJYmFzZSA9IFJFR19TRVRHUElPREFUQU9VVDEgKyBkX2JuazsKKwllbHNlCisJCWJhc2UgPSBSRUdfQ0xFQVJHUElPREFUQU9VVDEgKyBkX2JuazsKKworCXJldHVybiBncGlvX3R3bDQwMzBfd3JpdGUoYmFzZSwgZF9tc2spOworfQorCitzdGF0aWMgaW50IHR3bDQwMzBfZ2V0X2dwaW9fZGF0YWluKGludCBncGlvKQoreworCXU4IGRfYm5rID0gZ3BpbyA+PiAzOworCXU4IGRfb2ZmID0gZ3BpbyAmIDB4NzsKKwl1OCBiYXNlID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseSgoZ3BpbyA+PSBUV0w0MDMwX0dQSU9fTUFYKQorCQl8fCAhKGdwaW9fdXNhZ2VfY291bnQgJiBCSVQoZ3BpbykpKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWJhc2UgPSBSRUdfR1BJT0RBVEFJTjEgKyBkX2JuazsKKwlyZXQgPSBncGlvX3R3bDQwMzBfcmVhZChiYXNlKTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0ID0gKHJldCA+PiBkX29mZikgJiAweDE7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ29uZmlndXJlIGRlYm91bmNlIHRpbWluZyB2YWx1ZSBmb3IgYSBHUElPIHBpbiBvbiBUV0w0MDMwCisgKi8KK2ludCB0d2w0MDMwX3NldF9ncGlvX2RlYm91bmNlKGludCBncGlvLCBpbnQgZW5hYmxlKQoreworCXU4IGRfYm5rID0gZ3BpbyA+PiAzOworCXU4IGRfbXNrID0gQklUKGdwaW8gJiAweDcpOworCXU4IHJlZyA9IDA7CisJdTggYmFzZSA9IDA7CisJaW50IHJldCA9IDA7CisKKwlpZiAodW5saWtlbHkoKGdwaW8gPj0gVFdMNDAzMF9HUElPX01BWCkKKwkJfHwgIShncGlvX3VzYWdlX2NvdW50ICYgQklUKGdwaW8pKSkpCisJCXJldHVybiAtRVBFUk07CisKKwliYXNlID0gUkVHX0dQSU9fREVCRU4xICsgZF9ibms7CisJbXV0ZXhfbG9jaygmZ3Bpb19sb2NrKTsKKwlyZXQgPSBncGlvX3R3bDQwMzBfcmVhZChiYXNlKTsKKwlpZiAocmV0ID49IDApIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXJlZyA9IHJldCB8IGRfbXNrOworCQllbHNlCisJCQlyZWcgPSByZXQgJiB+ZF9tc2s7CisKKwkJcmV0ID0gZ3Bpb190d2w0MDMwX3dyaXRlKGJhc2UsIHJlZyk7CisJfQorCW11dGV4X3VubG9jaygmZ3Bpb19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX3NldF9ncGlvX2RlYm91bmNlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB0d2xfcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwltdXRleF9sb2NrKCZncGlvX2xvY2spOworCisJLyogU3VwcG9ydCB0aGUgdHdvIExFRCBvdXRwdXRzIGFzIG91dHB1dC1vbmx5IEdQSU9zLiAqLworCWlmIChvZmZzZXQgPj0gVFdMNDAzMF9HUElPX01BWCkgeworCQl1OAlsZWRjbHJfbWFzayA9IExFREVOX0xFREFPTiB8IExFREVOX0xFREFFWFQKKwkJCQl8IExFREVOX0xFREFQV00gfCBMRURFTl9QV01fTEVOR1RIQTsKKwkJdTgJbW9kdWxlID0gVFdMNDAzMF9NT0RVTEVfUFdNQTsKKworCQlvZmZzZXQgLT0gVFdMNDAzMF9HUElPX01BWDsKKwkJaWYgKG9mZnNldCkgeworCQkJbGVkY2xyX21hc2sgPDw9IDE7CisJCQltb2R1bGUgPSBUV0w0MDMwX01PRFVMRV9QV01COworCQl9CisKKwkJLyogaW5pdGlhbGl6ZSBQV00gdG8gYWx3YXlzLWRyaXZlICovCisJCXN0YXR1cyA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KG1vZHVsZSwgMHg3ZiwKKwkJCQlUV0w0MDMwX1BXTXhfUFdNeE9GRik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBkb25lOworCQlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZV91OChtb2R1bGUsIDB4N2YsCisJCQkJVFdMNDAzMF9QV014X1BXTXhPTik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBkb25lOworCisJCS8qIGluaXQgTEVEIHRvIG5vdC1kcml2ZW4gKGhpZ2gpICovCisJCW1vZHVsZSA9IFRXTDQwMzBfTU9EVUxFX0xFRDsKKwkJc3RhdHVzID0gdHdsNDAzMF9pMmNfcmVhZF91OChtb2R1bGUsICZjYWNoZWRfbGVkZW4sCisJCQkJVFdMNDAzMF9MRURfTEVERU4pOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZG9uZTsKKwkJY2FjaGVkX2xlZGVuICY9IH5sZWRjbHJfbWFzazsKKwkJc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgobW9kdWxlLCBjYWNoZWRfbGVkZW4sCisJCQkJVFdMNDAzMF9MRURfTEVERU4pOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZG9uZTsKKworCQlzdGF0dXMgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogb24gZmlyc3QgdXNlLCB0dXJuIEdQSU8gbW9kdWxlICJvbiIgKi8KKwlpZiAoIWdwaW9fdXNhZ2VfY291bnQpIHsKKwkJc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwkJdTggdmFsdWUgPSBNQVNLX0dQSU9fQ1RSTF9HUElPX09OOworCisJCS8qIG9wdGlvbmFsbHkgaGF2ZSB0aGUgZmlyc3QgdHdvIEdQSU9zIHN3aXRjaCB2TU1DMQorCQkgKiBhbmQgdk1NQzIgcG93ZXIgc3VwcGxpZXMgYmFzZWQgb24gY2FyZCBwcmVzZW5jZS4KKwkJICovCisJCXBkYXRhID0gY2hpcC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCQl2YWx1ZSB8PSBwZGF0YS0+bW1jX2NkICYgMHgwMzsKKworCQlzdGF0dXMgPSBncGlvX3R3bDQwMzBfd3JpdGUoUkVHX0dQSU9fQ1RSTCwgdmFsdWUpOworCX0KKworCWlmICghc3RhdHVzKQorCQlncGlvX3VzYWdlX2NvdW50IHw9ICgweDEgPDwgb2Zmc2V0KTsKKworZG9uZToKKwltdXRleF91bmxvY2soJmdwaW9fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgdHdsX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPj0gVFdMNDAzMF9HUElPX01BWCkgeworCQl0d2w0MDMwX2xlZF9zZXRfdmFsdWUob2Zmc2V0IC0gVFdMNDAzMF9HUElPX01BWCwgMSk7CisJCXJldHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZncGlvX2xvY2spOworCisJZ3Bpb191c2FnZV9jb3VudCAmPSB+QklUKG9mZnNldCk7CisKKwkvKiBvbiBsYXN0IHVzZSwgc3dpdGNoIG9mZiBHUElPIG1vZHVsZSAqLworCWlmICghZ3Bpb191c2FnZV9jb3VudCkKKwkJZ3Bpb190d2w0MDMwX3dyaXRlKFJFR19HUElPX0NUUkwsIDB4MCk7CisKKwltdXRleF91bmxvY2soJmdwaW9fbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgdHdsX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIChvZmZzZXQgPCBUV0w0MDMwX0dQSU9fTUFYKQorCQk/IHR3bDQwMzBfc2V0X2dwaW9fZGlyZWN0aW9uKG9mZnNldCwgMSkKKwkJOiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHR3bF9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCWludCBzdGF0dXMgPSAwOworCisJaWYgKG9mZnNldCA8IFRXTDQwMzBfR1BJT19NQVgpCisJCXN0YXR1cyA9IHR3bDQwMzBfZ2V0X2dwaW9fZGF0YWluKG9mZnNldCk7CisJZWxzZSBpZiAob2Zmc2V0ID09IFRXTDQwMzBfR1BJT19NQVgpCisJCXN0YXR1cyA9IGNhY2hlZF9sZWRlbiAmIExFREVOX0xFREFPTjsKKwllbHNlCisJCXN0YXR1cyA9IGNhY2hlZF9sZWRlbiAmIExFREVOX0xFREJPTjsKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gMCA6IHN0YXR1czsKK30KKworc3RhdGljIGludCB0d2xfZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlpZiAob2Zmc2V0IDwgVFdMNDAzMF9HUElPX01BWCkgeworCQl0d2w0MDMwX3NldF9ncGlvX2RhdGFvdXQob2Zmc2V0LCB2YWx1ZSk7CisJCXJldHVybiB0d2w0MDMwX3NldF9ncGlvX2RpcmVjdGlvbihvZmZzZXQsIDApOworCX0gZWxzZSB7CisJCXR3bDQwMzBfbGVkX3NldF92YWx1ZShvZmZzZXQgLSBUV0w0MDMwX0dQSU9fTUFYLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgdHdsX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlpZiAob2Zmc2V0IDwgVFdMNDAzMF9HUElPX01BWCkKKwkJdHdsNDAzMF9zZXRfZ3Bpb19kYXRhb3V0KG9mZnNldCwgdmFsdWUpOworCWVsc2UKKwkJdHdsNDAzMF9sZWRfc2V0X3ZhbHVlKG9mZnNldCAtIFRXTDQwMzBfR1BJT19NQVgsIHZhbHVlKTsKK30KKworc3RhdGljIGludCB0d2xfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gKHR3bDQwMzBfZ3Bpb19pcnFfYmFzZSAmJiAob2Zmc2V0IDwgVFdMNDAzMF9HUElPX01BWCkpCisJCT8gKHR3bDQwMzBfZ3Bpb19pcnFfYmFzZSArIG9mZnNldCkKKwkJOiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCB0d2xfZ3Bpb2NoaXAgPSB7CisJLmxhYmVsCQkJPSAidHdsNDAzMCIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkucmVxdWVzdAkJPSB0d2xfcmVxdWVzdCwKKwkuZnJlZQkJCT0gdHdsX2ZyZWUsCisJLmRpcmVjdGlvbl9pbnB1dAk9IHR3bF9kaXJlY3Rpb25faW4sCisJLmdldAkJCT0gdHdsX2dldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHR3bF9kaXJlY3Rpb25fb3V0LAorCS5zZXQJCQk9IHR3bF9zZXQsCisJLnRvX2lycQkJCT0gdHdsX3RvX2lycSwKKwkuY2FuX3NsZWVwCQk9IDEsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBncGlvX3R3bDQwMzBfcHVsbHModTMyIHVwcywgdTMyIGRvd25zKQoreworCXU4CQltZXNzYWdlWzZdOworCXVuc2lnbmVkCWksIGdwaW9fYml0OworCisJLyogRm9yIG1vc3QgcGlucywgYSBwdWxsZG93biB3YXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCSAqIFdlIHNob3VsZCBoYXZlIGRhdGEgdGhhdCdzIHNwZWNpZmljIHRvIHRoaXMgYm9hcmQuCisJICovCisJZm9yIChncGlvX2JpdCA9IDEsIGkgPSAxOyBpIDwgNjsgaSsrKSB7CisJCXU4CQliaXRfbWFzazsKKwkJdW5zaWduZWQJajsKKworCQlmb3IgKGJpdF9tYXNrID0gMCwgaiA9IDA7IGogPCA4OyBqICs9IDIsIGdwaW9fYml0IDw8PSAxKSB7CisJCQlpZiAodXBzICYgZ3Bpb19iaXQpCisJCQkJYml0X21hc2sgfD0gMSA8PCAoaiArIDEpOworCQkJZWxzZSBpZiAoZG93bnMgJiBncGlvX2JpdCkKKwkJCQliaXRfbWFzayB8PSAxIDw8IChqICsgMCk7CisJCX0KKwkJbWVzc2FnZVtpXSA9IGJpdF9tYXNrOworCX0KKworCXJldHVybiB0d2w0MDMwX2kyY193cml0ZShUV0w0MDMwX01PRFVMRV9HUElPLCBtZXNzYWdlLAorCQkJCVJFR19HUElPUFVQRENUUjEsIDUpOworfQorCitzdGF0aWMgaW50IGdwaW9fdHdsNDAzMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fdHdsNDAzMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJLyogbWF5YmUgc2V0dXAgSVJRcyAqLworCWlmIChwZGF0YS0+aXJxX2Jhc2UpIHsKKwkJaWYgKGlzX21vZHVsZSgpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImNhbid0IGRpc3BhdGNoIElSUXMgZnJvbSBtb2R1bGVzXG4iKTsKKwkJCWdvdG8gbm9faXJxczsKKwkJfQorCQlyZXQgPSB0d2w0MDMwX3NpaF9zZXR1cChUV0w0MDMwX01PRFVMRV9HUElPKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlXQVJOX09OKHJldCAhPSBwZGF0YS0+aXJxX2Jhc2UpOworCQl0d2w0MDMwX2dwaW9faXJxX2Jhc2UgPSByZXQ7CisJfQorCitub19pcnFzOgorCS8qCisJICogTk9URTogIGJvYXJkcyBtYXkgd2FzdGUgcG93ZXIgaWYgdGhleSBkb24ndCBzZXQgcHVsbHVwcworCSAqIGFuZCBwdWxsZG93bnMgY29ycmVjdGx5IC4uLiBkZWZhdWx0IGZvciBub24tVUxQSSBwaW5zIGlzCisJICogcHVsbGRvd24sIGFuZCBzb21lIG90aGVyIHBpbnMgbWF5IGhhdmUgZXh0ZXJuYWwgcHVsbHVwcworCSAqIG9yIHB1bGxkb3ducy4gIENhcmVmdWwhCisJICovCisJcmV0ID0gZ3Bpb190d2w0MDMwX3B1bGxzKHBkYXRhLT5wdWxsdXBzLCBwZGF0YS0+cHVsbGRvd25zKTsKKwlpZiAocmV0KQorCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwdWxsdXBzICUuMDV4ICUuMDV4IC0tPiAlZFxuIiwKKwkJCQlwZGF0YS0+cHVsbHVwcywgcGRhdGEtPnB1bGxkb3ducywKKwkJCQlyZXQpOworCisJdHdsX2dwaW9jaGlwLmJhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOworCXR3bF9ncGlvY2hpcC5uZ3BpbyA9IFRXTDQwMzBfR1BJT19NQVg7CisJdHdsX2dwaW9jaGlwLmRldiA9ICZwZGV2LT5kZXY7CisKKwkvKiBOT1RFOiB3ZSBhc3N1bWUgVklCUkFfQ1RMLlZJQlJBX0VOLCBpbiBNT0RVTEVfQVVESU9fVk9JQ0UsCisJICogaXMgKHN0aWxsKSBjbGVhciBpZiB1c2VfbGVkcyBpcyBzZXQuCisJICovCisJaWYgKHBkYXRhLT51c2VfbGVkcykKKwkJdHdsX2dwaW9jaGlwLm5ncGlvICs9IDI7CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJnR3bF9ncGlvY2hpcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJjb3VsZCBub3QgcmVnaXN0ZXIgZ3Bpb2NoaXAsICVkXG4iLAorCQkJCXJldCk7CisJCXR3bF9ncGlvY2hpcC5uZ3BpbyA9IDA7CisJCWdwaW9fdHdsNDAzMF9yZW1vdmUocGRldik7CisJfSBlbHNlIGlmIChwZGF0YS0+c2V0dXApIHsKKwkJaW50IHN0YXR1czsKKworCQlzdGF0dXMgPSBwZGF0YS0+c2V0dXAoJnBkZXYtPmRldiwKKwkJCQlwZGF0YS0+Z3Bpb19iYXNlLCBUV0w0MDMwX0dQSU9fTUFYKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgInNldHVwIC0tPiAlZFxuIiwgc3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBncGlvX3R3bDQwMzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBzdGF0dXM7CisKKwlpZiAocGRhdGEtPnRlYXJkb3duKSB7CisJCXN0YXR1cyA9IHBkYXRhLT50ZWFyZG93bigmcGRldi0+ZGV2LAorCQkJCXBkYXRhLT5ncGlvX2Jhc2UsIFRXTDQwMzBfR1BJT19NQVgpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJ0ZWFyZG93biAtLT4gJWRcbiIsIHN0YXR1cyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfQorCisJc3RhdHVzID0gZ3Bpb2NoaXBfcmVtb3ZlKCZ0d2xfZ3Bpb2NoaXApOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKGlzX21vZHVsZSgpKQorCQlyZXR1cm4gMDsKKworCS8qIFJFVklTSVQgbm8gc3VwcG9ydCB5ZXQgZm9yIGRlcmVnaXN0ZXJpbmcgYWxsIHRoZSBJUlFzICovCisJV0FSTl9PTigxKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyogTm90ZTogIHRoaXMgaGFyZHdhcmUgbGl2ZXMgaW5zaWRlIGFuIEkyQy1iYXNlZCBtdWx0aS1mdW5jdGlvbiBkZXZpY2UuICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnR3bDQwMzBfZ3BpbyIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncGlvX3R3bDQwMzBfZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJ0d2w0MDMwX2dwaW8iLAorCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCT0gZ3Bpb190d2w0MDMwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ3Bpb190d2w0MDMwX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBncGlvX3R3bDQwMzBfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdwaW9fdHdsNDAzMF9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKGdwaW9fdHdsNDAzMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGdwaW9fdHdsNDAzMF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdwaW9fdHdsNDAzMF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoZ3Bpb190d2w0MDMwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIGludGVyZmFjZSBmb3IgVFdMNDAzMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA2MTBkNmZkLi5hOGIzM2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKICMKIG1lbnVjb25maWcgRFJNCiAJdHJpc3RhdGUgIkRpcmVjdCBSZW5kZXJpbmcgTWFuYWdlciAoWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyIERSSSBzdXBwb3J0KSIKLQlkZXBlbmRzIG9uIChBR1AgfHwgQUdQPW4pICYmIFBDSSAmJiAhRU1VTEFURURfQ01QWENIRworCWRlcGVuZHMgb24gKEFHUCB8fCBBR1A9bikgJiYgUENJICYmICFFTVVMQVRFRF9DTVBYQ0hHICYmIE1NVQogCWhlbHAKIAkgIEtlcm5lbC1sZXZlbCBzdXBwb3J0IGZvciB0aGUgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAoRFJJKQogCSAgaW50cm9kdWNlZCBpbiBYRnJlZTg2IDQuMC4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSBuZWVkIHRvIHNlbGVjdApAQCAtODcsNiArODcsNyBAQAogY29uZmlnIERSTV9TSVMKIAl0cmlzdGF0ZSAiU2lTIHZpZGVvIGNhcmRzIgogCWRlcGVuZHMgb24gRFJNICYmIEFHUAorCWRlcGVuZHMgb24gRkJfU0lTIHx8IEZCX1NJUz1uCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgU2lTIDYzMCBvciBjb21wYXRpYmxlIHZpZGVvCiAgICAgICAgICAgY2hpcHNldC4gSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpcy4gQUdQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggZTlmOWE5Ny4uNzRkYTk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNCw4ICs0LDkgQEAKIAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KIAotZHJtLXkgICAgICAgOj0JZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jb250ZXh0Lm8gZHJtX2RtYS5vIGRybV9kcmF3YWJsZS5vIFwKLQkJZHJtX2Rydi5vIGRybV9mb3BzLm8gZHJtX2lvY3RsLm8gZHJtX2lycS5vIFwKK2RybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCisJCWRybV9jb250ZXh0Lm8gZHJtX2RtYS5vIGRybV9kcmF3YWJsZS5vIFwKKwkJZHJtX2Rydi5vIGRybV9mb3BzLm8gZHJtX2dlbS5vIGRybV9pb2N0bC5vIGRybV9pcnEubyBcCiAJCWRybV9sb2NrLm8gZHJtX21lbW9yeS5vIGRybV9wcm9jLm8gZHJtX3N0dWIubyBkcm1fdm0ubyBcCiAJCWRybV9hZ3BzdXBwb3J0Lm8gZHJtX3NjYXR0ZXIubyBhdGlfcGNpZ2FydC5vIGRybV9wY2kubyBcCiAJCWRybV9zeXNmcy5vIGRybV9oYXNodGFiLm8gZHJtX3NtYW4ubyBkcm1fbW0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2FncHN1cHBvcnQuYwppbmRleCBhZWZhNWFjLi4zZDMzYjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2FncHN1cHBvcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2FncHN1cHBvcnQuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9hZ3AuaD4KIAogI2lmIF9fT1NfSEFTX0FHUAogCkBAIC00NTIsNCArNDUzLDUzIEBACiAJcmV0dXJuIGFncF91bmJpbmRfbWVtb3J5KGhhbmRsZSk7CiB9CiAKLSNlbmRpZgkJCQkvKiBfX09TX0hBU19BR1AgKi8KKy8qKgorICogQmluZHMgYSBjb2xsZWN0aW9uIG9mIHBhZ2VzIGludG8gQUdQIG1lbW9yeSBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LCByZXR1cm5pbmcKKyAqIHRoZSBBR1AgbWVtb3J5IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZW0uCisgKgorICogTm8gcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIHBhZ2VzIGR1cmluZyB0aGlzIHRpbWUgLS0gaXQgaXMgdXAgdG8gdGhlCisgKiBjYWxsZXIgdG8gaGFuZGxlIHRoYXQuCisgKi8KK0RSTV9BR1BfTUVNICoKK2RybV9hZ3BfYmluZF9wYWdlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkgICB1bnNpZ25lZCBsb25nIG51bV9wYWdlcywKKwkJICAgdWludDMyX3QgZ3R0X29mZnNldCwKKwkJICAgdTMyIHR5cGUpCit7CisJRFJNX0FHUF9NRU0gKm1lbTsKKwlpbnQgcmV0LCBpOworCisJRFJNX0RFQlVHKCJcbiIpOworCisJbWVtID0gZHJtX2FncF9hbGxvY2F0ZV9tZW1vcnkoZGV2LT5hZ3AtPmJyaWRnZSwgbnVtX3BhZ2VzLAorCQkJCSAgICAgIHR5cGUpOworCWlmIChtZW0gPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICVsZCBwYWdlc1xuIiwKKwkJCSAgbnVtX3BhZ2VzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKQorCQltZW0tPm1lbW9yeVtpXSA9IHBoeXNfdG9fZ2FydChwYWdlX3RvX3BoeXMocGFnZXNbaV0pKTsKKwltZW0tPnBhZ2VfY291bnQgPSBudW1fcGFnZXM7CisKKwltZW0tPmlzX2ZsdXNoZWQgPSB0cnVlOworCXJldCA9IGRybV9hZ3BfYmluZF9tZW1vcnkobWVtLCBndHRfb2Zmc2V0IC8gUEFHRV9TSVpFKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBBR1AgbWVtb3J5OiAlZFxuIiwgcmV0KTsKKwkJYWdwX2ZyZWVfbWVtb3J5KG1lbSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBtZW07Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hZ3BfYmluZF9wYWdlcyk7CisKK3ZvaWQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJYWdwX2ZsdXNoX2NoaXBzZXQoZGV2LT5hZ3AtPmJyaWRnZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hZ3BfY2hpcHNldF9mbHVzaCk7CisKKyNlbmRpZiAvKiBfX09TX0hBU19BR1AgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTk5NGEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUWC4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCitzdGF0aWMgdm9pZAorZHJtX2NsZmx1c2hfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1aW50OF90ICpwYWdlX3ZpcnR1YWw7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAodW5saWtlbHkocGFnZSA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJcGFnZV92aXJ0dWFsID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJWkU7IGkgKz0gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplKQorCQljbGZsdXNoKHBhZ2VfdmlydHVhbCArIGkpOworCWt1bm1hcF9hdG9taWMocGFnZV92aXJ0dWFsLCBLTV9VU0VSMCk7Cit9CisjZW5kaWYKKwordm9pZAorZHJtX2NsZmx1c2hfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2VzW10sIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCWlmIChjcHVfaGFzX2NsZmx1c2gpIHsKKwkJdW5zaWduZWQgbG9uZyBpOworCisJCW1iKCk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKKwkJCWRybV9jbGZsdXNoX3BhZ2UoKnBhZ2VzKyspOworCQltYigpOworCisJCXJldHVybjsKKwl9CisKKwl3YmludmQoKTsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChkcm1fY2xmbHVzaF9wYWdlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RyYXdhYmxlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RyYXdhYmxlLmMKaW5kZXggMTgzOWM1Ny4uODBiZTFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcmF3YWJsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJhd2FibGUuYwpAQCAtNzYsMTEgKzc2LDE4IEBACiB7CiAJc3RydWN0IGRybV9kcmF3ICpkcmF3ID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCBkcm1fZHJhd2FibGVfaW5mbyAqaW5mbzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmRyd19sb2NrLCBpcnFmbGFncyk7CiAKLQlkcm1fZnJlZShkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZGV2LCBkcmF3LT5oYW5kbGUpLAotCQkgc2l6ZW9mKHN0cnVjdCBkcm1fZHJhd2FibGVfaW5mbyksIERSTV9NRU1fQlVGUyk7CisJaW5mbyA9IGRybV9nZXRfZHJhd2FibGVfaW5mbyhkZXYsIGRyYXctPmhhbmRsZSk7CisJaWYgKGluZm8gPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmRyd19sb2NrLCBpcnFmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkcm1fZnJlZShpbmZvLT5yZWN0cywgaW5mby0+bnVtX3JlY3RzICogc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSwKKwkJCURSTV9NRU1fQlVGUyk7CisJZHJtX2ZyZWUoaW5mbywgc2l6ZW9mKHN0cnVjdCBkcm1fZHJhd2FibGVfaW5mbyksIERSTV9NRU1fQlVGUyk7CiAKIAlpZHJfcmVtb3ZlKCZkZXYtPmRyd19pZHIsIGRyYXctPmhhbmRsZSk7CiAKQEAgLTExMSw3ICsxMTgsOSBAQAogCiAJc3dpdGNoICh1cGRhdGUtPnR5cGUpIHsKIAljYXNlIERSTV9EUkFXQUJMRV9DTElQUkVDVFM6Ci0JCWlmICh1cGRhdGUtPm51bSAhPSBpbmZvLT5udW1fcmVjdHMpIHsKKwkJaWYgKHVwZGF0ZS0+bnVtID09IDApCisJCQlyZWN0cyA9IE5VTEw7CisJCWVsc2UgaWYgKHVwZGF0ZS0+bnVtICE9IGluZm8tPm51bV9yZWN0cykgewogCQkJcmVjdHMgPSBkcm1fYWxsb2ModXBkYXRlLT5udW0gKiBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpLAogCQkJCQkgRFJNX01FTV9CVUZTKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwppbmRleCA0NTJjMmQ4Li45NmY0MTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKQEAgLTExNiw3ICsxMTYsMTMgQEAKIAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1dBSVRfVkJMQU5LLCBkcm1fd2FpdF92YmxhbmssIDApLAogCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERVNFVF9DVEwsIGRybV9tb2Rlc2V0X2N0bCwgMCksCisKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9VUERBVEVfRFJBVywgZHJtX3VwZGF0ZV9kcmF3YWJsZV9pbmZvLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX0NMT1NFLCBkcm1fZ2VtX2Nsb3NlX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fRkxJTkssIGRybV9nZW1fZmxpbmtfaW9jdGwsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fT1BFTiwgZHJtX2dlbV9vcGVuX2lvY3RsLCBEUk1fQVVUSCksCiB9OwogCiAjZGVmaW5lIERSTV9DT1JFX0lPQ1RMX0NPVU5UCUFSUkFZX1NJWkUoIGRybV9pb2N0bHMgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwppbmRleCA4NTFhNTNmLi4wZDQ2NjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJbWVtc2V0KHByaXYsIDAsIHNpemVvZigqcHJpdikpOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IHByaXY7CiAJcHJpdi0+ZmlscCA9IGZpbHA7Ci0JcHJpdi0+dWlkID0gY3VycmVudC0+ZXVpZDsKKwlwcml2LT51aWQgPSBjdXJyZW50X2V1aWQoKTsKIAlwcml2LT5waWQgPSB0YXNrX3BpZF9ucihjdXJyZW50KTsKIAlwcml2LT5taW5vciA9IGlkcl9maW5kKCZkcm1fbWlub3JzX2lkciwgbWlub3JfaWQpOwogCXByaXYtPmlvY3RsX2NvdW50ID0gMDsKQEAgLTI1Niw2ICsyNTYsOSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmxoZWFkKTsKIAorCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKKwkJZHJtX2dlbV9vcGVuKGRldiwgcHJpdik7CisKIAlpZiAoZGV2LT5kcml2ZXItPm9wZW4pIHsKIAkJcmV0ID0gZGV2LT5kcml2ZXItPm9wZW4oZGV2LCBwcml2KTsKIAkJaWYgKHJldCA8IDApCkBAIC00MDAsNiArNDAzLDkgQEAKIAkJZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVycyhkZXYsIGZpbGVfcHJpdik7CiAJfQogCisJaWYgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKQorCQlkcm1fZ2VtX3JlbGVhc2UoZGV2LCBmaWxlX3ByaXYpOworCiAJZHJtX2Zhc3luYygtMSwgZmlscCwgMCk7CiAKIAltdXRleF9sb2NrKCZkZXYtPmN0eGxpc3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMWFmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorCisvKiogQGZpbGUgZHJtX2dlbS5jCisgKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIHNvbWUgb2YgdGhlIGJhc2UgaW9jdGxzIGFuZCBsaWJyYXJ5IHJvdXRpbmVzIGZvcgorICogdGhlIGdyYXBoaWNzIG1lbW9yeSBtYW5hZ2VyIGltcGxlbWVudGVkIGJ5IGVhY2ggZGV2aWNlIGRyaXZlci4KKyAqCisgKiBCZWNhdXNlIHZhcmlvdXMgZGV2aWNlcyBoYXZlIGRpZmZlcmVudCByZXF1aXJlbWVudHMgaW4gdGVybXMgb2YKKyAqIHN5bmNocm9uaXphdGlvbiBhbmQgbWlncmF0aW9uIHN0cmF0ZWdpZXMsIGltcGxlbWVudGluZyB0aGF0IGlzIGxlZnQgdXAgdG8KKyAqIHRoZSBkcml2ZXIsIGFuZCBhbGwgdGhhdCB0aGUgZ2VuZXJhbCBBUEkgcHJvdmlkZXMgc2hvdWxkIGJlIGdlbmVyaWMgLS0KKyAqIGFsbG9jYXRpbmcgb2JqZWN0cywgcmVhZGluZy93cml0aW5nIGRhdGEgd2l0aCB0aGUgY3B1LCBmcmVlaW5nIG9iamVjdHMuCisgKiBFdmVuIHRoZXJlLCBwbGF0Zm9ybS1kZXBlbmRlbnQgb3B0aW1pemF0aW9ucyBmb3IgcmVhZGluZy93cml0aW5nIGRhdGEgd2l0aAorICogdGhlIENQVSBtZWFuIHdlJ2xsIGxpa2VseSBob29rIHRob3NlIG91dCB0byBkcml2ZXItc3BlY2lmaWMgY2FsbHMuICBIb3dldmVyLAorICogdGhlIERSSTIgaW1wbGVtZW50YXRpb24gd2FudHMgdG8gaGF2ZSBhdCBsZWFzdCBhbGxvY2F0ZS9tbWFwIGJlIGdlbmVyaWMuCisgKgorICogVGhlIGdvYWwgd2FzIHRvIGhhdmUgc3dhcC1iYWNrZWQgb2JqZWN0IGFsbG9jYXRpb24gbWFuYWdlZCB0aHJvdWdoCisgKiBzdHJ1Y3QgZmlsZS4gIEhvd2V2ZXIsIGZpbGUgZGVzY3JpcHRvcnMgYXMgaGFuZGxlcyB0byBhIHN0cnVjdCBmaWxlIGhhdmUKKyAqIHR3byBtYWpvciBmYWlsaW5nczoKKyAqIC0gUHJvY2VzcyBsaW1pdHMgcHJldmVudCBtb3JlIHRoYW4gMTAyNCBvciBzbyBiZWluZyB1c2VkIGF0IGEgdGltZSBieQorICogICBkZWZhdWx0LgorICogLSBJbmFiaWxpdHkgdG8gYWxsb2NhdGUgaGlnaCBmZHMgd2lsbCBhZ2dyYXZhdGUgdGhlIFggU2VydmVyJ3Mgc2VsZWN0KCkKKyAqICAgaGFuZGxpbmcsIGFuZCBsaWtlbHkgdGhhdCBvZiBtYW55IEdMIGNsaWVudCBhcHBsaWNhdGlvbnMgYXMgd2VsbC4KKyAqCisgKiBUaGlzIGxlZCB0byBhIHBsYW4gb2YgdXNpbmcgb3VyIG93biBpbnRlZ2VyIElEcyAoY2FsbGVkIGhhbmRsZXMsIGZvbGxvd2luZworICogRFJNIHRlcm1pbm9sb2d5KSB0byBtaW1pYyBmZHMsIGFuZCBpbXBsZW1lbnQgdGhlIGZkIHN5c2NhbGxzIHdlIG5lZWQgYXMKKyAqIGlvY3Rscy4gIFRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgd2lsbCBzdGlsbCBpbmNsdWRlIHRoZSBzdHJ1Y3QgZmlsZSBzbworICogdGhhdCB3ZSBjYW4gdHJhbnNpdGlvbiB0byBmZHMgaWYgdGhlIHJlcXVpcmVkIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSBzaG93cworICogdXAgYXQgYSBsYXRlciBkYXRlLCBhbmQgYXMgb3VyIGludGVyZmFjZSB3aXRoIHNobWZzIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4KKyAqLworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIEdFTSBkZXZpY2UgZmllbGRzCisgKi8KKworaW50Citkcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZHJfaW5pdCgmZGV2LT5vYmplY3RfbmFtZV9pZHIpOworCWF0b21pY19zZXQoJmRldi0+b2JqZWN0X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPm9iamVjdF9tZW1vcnksIDApOworCWF0b21pY19zZXQoJmRldi0+cGluX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPnBpbl9tZW1vcnksIDApOworCWF0b21pY19zZXQoJmRldi0+Z3R0X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmd0dF9tZW1vcnksIDApOworCXJldHVybiAwOworfQorCisvKioKKyAqIEFsbG9jYXRlIGEgR0VNIG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHNpemUgd2l0aCBzaG1mcyBiYWNraW5nIHN0b3JlCisgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqCitkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCUJVR19PTigoc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCk7CisKKwlvYmogPSBrY2FsbG9jKDEsIHNpemVvZigqb2JqKSwgR0ZQX0tFUk5FTCk7CisKKwlvYmotPmRldiA9IGRldjsKKwlvYmotPmZpbHAgPSBzaG1lbV9maWxlX3NldHVwKCJkcm0gbW0gb2JqZWN0Iiwgc2l6ZSwgMCk7CisJaWYgKElTX0VSUihvYmotPmZpbHApKSB7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCWtyZWZfaW5pdCgmb2JqLT5yZWZjb3VudCk7CisJa3JlZl9pbml0KCZvYmotPmhhbmRsZWNvdW50KTsKKwlvYmotPnNpemUgPSBzaXplOworCWlmIChkZXYtPmRyaXZlci0+Z2VtX2luaXRfb2JqZWN0ICE9IE5VTEwgJiYKKwkgICAgZGV2LT5kcml2ZXItPmdlbV9pbml0X29iamVjdChvYmopICE9IDApIHsKKwkJZnB1dChvYmotPmZpbHApOworCQlrZnJlZShvYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYXRvbWljX2luYygmZGV2LT5vYmplY3RfY291bnQpOworCWF0b21pY19hZGQob2JqLT5zaXplLCAmZGV2LT5vYmplY3RfbWVtb3J5KTsKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9hbGxvYyk7CisKKy8qKgorICogUmVtb3ZlcyB0aGUgbWFwcGluZyBmcm9tIGhhbmRsZSB0byBmaWxwIGZvciB0aGlzIG9iamVjdC4KKyAqLworc3RhdGljIGludAorZHJtX2dlbV9oYW5kbGVfZGVsZXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwgaW50IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJLyogVGhpcyBpcyBncm9zcy4gVGhlIGlkciBzeXN0ZW0gZG9lc24ndCBsZXQgdXMgdHJ5IGEgZGVsZXRlIGFuZAorCSAqIHJldHVybiBhbiBlcnJvciBjb2RlLiAgSXQganVzdCBzcGV3cyBpZiB5b3UgZmFpbCBhdCBkZWxldGluZy4KKwkgKiBTbywgd2UgaGF2ZSB0byBncmFiIGEgbG9jayBhcm91bmQgZmluZGluZyB0aGUgb2JqZWN0IGFuZCB0aGVuCisJICogZG9pbmcgdGhlIGRlbGV0ZSBvbiBpdCBhbmQgZHJvcHBpbmcgdGhlIHJlZmNvdW50LCBvciB0aGUgdXNlcgorCSAqIGNvdWxkIHJhY2UgdXMgdG8gZG91YmxlLWRlY3JlbWVudCB0aGUgcmVmY291bnQgYW5kIGNhdXNlIGEKKwkgKiB1c2UtYWZ0ZXItZnJlZSBsYXRlci4gIEdpdmVuIHRoZSBmcmVxdWVuY3kgb2Ygb3VyIGhhbmRsZSBsb29rdXBzLAorCSAqIHdlIG1heSB3YW50IHRvIHVzZSBpZGEgZm9yIG51bWJlciBhbGxvY2F0aW9uIGFuZCBhIGhhc2ggdGFibGUKKwkgKiBmb3IgdGhlIHBvaW50ZXJzLCBhbnl3YXkuCisJICovCisJc3Bpbl9sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCS8qIENoZWNrIGlmIHdlIGN1cnJlbnRseSBoYXZlIGEgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QgKi8KKwlvYmogPSBpZHJfZmluZCgmZmlscC0+b2JqZWN0X2lkciwgaGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2ID0gb2JqLT5kZXY7CisKKwkvKiBSZWxlYXNlIHJlZmVyZW5jZSBhbmQgZGVjcmVtZW50IHJlZmNvdW50LiAqLworCWlkcl9yZW1vdmUoJmZpbHAtPm9iamVjdF9pZHIsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgaGFuZGxlIGZvciB0aGlzIG9iamVjdC4gVGhpcyBhZGRzIGEgaGFuZGxlIHJlZmVyZW5jZQorICogdG8gdGhlIG9iamVjdCwgd2hpY2ggaW5jbHVkZXMgYSByZWd1bGFyIHJlZmVyZW5jZSBjb3VudC4gQ2FsbGVycworICogd2lsbCBsaWtlbHkgd2FudCB0byBkZXJlZmVyZW5jZSB0aGUgb2JqZWN0IGFmdGVyd2FyZHMuCisgKi8KK2ludAorZHJtX2dlbV9oYW5kbGVfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICAgICBpbnQgKmhhbmRsZXApCit7CisJaW50CXJldDsKKworCS8qCisJICogR2V0IHRoZSB1c2VyLXZpc2libGUgaGFuZGxlIHVzaW5nIGlkci4KKwkgKi8KK2FnYWluOgorCS8qIGVuc3VyZSB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgdG8gYWxsb2NhdGUgYSBoYW5kbGUgKi8KKwlpZiAoaWRyX3ByZV9nZXQoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBkbyB0aGUgYWxsb2NhdGlvbiB1bmRlciBvdXIgc3BpbmxvY2sgKi8KKwlzcGluX2xvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwgb2JqLCAxLCBoYW5kbGVwKTsKKwlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gYWdhaW47CisKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfcmVmZXJlbmNlKG9iaik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1faGFuZGxlX2NyZWF0ZSk7CisKKy8qKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgbmFtZWQgYnkgdGhlIGhhbmRsZS4gKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqCitkcm1fZ2VtX29iamVjdF9sb29rdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxwLAorCQkgICAgICBpbnQgaGFuZGxlKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJc3Bpbl9sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCS8qIENoZWNrIGlmIHdlIGN1cnJlbnRseSBoYXZlIGEgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QgKi8KKwlvYmogPSBpZHJfZmluZCgmZmlscC0+b2JqZWN0X2lkciwgaGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKworCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCXJldHVybiBvYmo7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X2xvb2t1cCk7CisKKy8qKgorICogUmVsZWFzZXMgdGhlIGhhbmRsZSB0byBhbiBtbSBvYmplY3QuCisgKi8KK2ludAorZHJtX2dlbV9jbG9zZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9nZW1fY2xvc2UgKmFyZ3MgPSBkYXRhOworCWludCByZXQ7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfZGVsZXRlKGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgZ2xvYmFsIG5hbWUgZm9yIGFuIG9iamVjdCwgcmV0dXJuaW5nIHRoZSBuYW1lLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgbmFtZSBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlOyB3aGVuIHRoZSBvYmplY3QKKyAqIGlzIGZyZWVkLCB0aGUgbmFtZSBnb2VzIGF3YXkuCisgKi8KK2ludAorZHJtX2dlbV9mbGlua19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9nZW1fZmxpbmsgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKworYWdhaW46CisJaWYgKGlkcl9wcmVfZ2V0KCZkZXYtPm9iamVjdF9uYW1lX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKG9iai0+bmFtZSkgeworCQlhcmdzLT5uYW1lID0gb2JqLT5uYW1lOworCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgb2JqLCAxLAorCQkJCSAmb2JqLT5uYW1lKTsKKwlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gYWdhaW47CisKKwlpZiAocmV0ICE9IDApIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIExlYXZlIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgbG9va3VwIGFyb3VuZCBhcyB0aGUKKwkgKiBuYW1lIHRhYmxlIG5vdyBob2xkcyBvbmUKKwkgKi8KKwlhcmdzLT5uYW1lID0gKHVpbnQ2NF90KSBvYmotPm5hbWU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBPcGVuIGFuIG9iamVjdCB1c2luZyB0aGUgZ2xvYmFsIG5hbWUsIHJldHVybmluZyBhIGhhbmRsZSBhbmQgdGhlIHNpemUuCisgKgorICogVGhpcyBoYW5kbGUgKG9mIGNvdXJzZSkgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCwgc28gdGhlIG9iamVjdAorICogd2lsbCBub3QgZ28gYXdheSB1bnRpbCB0aGUgaGFuZGxlIGlzIGRlbGV0ZWQuCisgKi8KK2ludAorZHJtX2dlbV9vcGVuX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fZ2VtX29wZW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisJaW50IGhhbmRsZTsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJb2JqID0gaWRyX2ZpbmQoJmRldi0+b2JqZWN0X25hbWVfaWRyLCAoaW50KSBhcmdzLT5uYW1lKTsKKwlpZiAob2JqKQorCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBvYmosICZoYW5kbGUpOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlhcmdzLT5oYW5kbGUgPSBoYW5kbGU7CisJYXJncy0+c2l6ZSA9IG9iai0+c2l6ZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIENhbGxlZCBhdCBkZXZpY2Ugb3BlbiB0aW1lLCBzZXRzIHVwIHRoZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIHJlZmNvdW50aW5nCisgKiBvZiBtbSBvYmplY3RzLgorICovCit2b2lkCitkcm1fZ2VtX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCit7CisJaWRyX2luaXQoJmZpbGVfcHJpdmF0ZS0+b2JqZWN0X2lkcik7CisJc3Bpbl9sb2NrX2luaXQoJmZpbGVfcHJpdmF0ZS0+dGFibGVfbG9jayk7Cit9CisKKy8qKgorICogQ2FsbGVkIGF0IGRldmljZSBjbG9zZSB0byByZWxlYXNlIHRoZSBmaWxlJ3MKKyAqIGhhbmRsZSByZWZlcmVuY2VzIG9uIG9iamVjdHMuCisgKi8KK3N0YXRpYyBpbnQKK2RybV9nZW1fb2JqZWN0X3JlbGVhc2VfaGFuZGxlKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcHRyOworCisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgYXQgY2xvc2UgdGltZSB3aGVuIHRoZSBmaWxwIGlzIGdvaW5nIGF3YXkuCisgKgorICogUmVsZWFzZXMgYW55IHJlbWFpbmluZyByZWZlcmVuY2VzIG9uIG9iamVjdHMgYnkgdGhpcyBmaWxwLgorICovCit2b2lkCitkcm1fZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCit7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlkcl9mb3JfZWFjaCgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyLAorCQkgICAgICZkcm1fZ2VtX29iamVjdF9yZWxlYXNlX2hhbmRsZSwgTlVMTCk7CisKKwlpZHJfZGVzdHJveSgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK30KKworLyoqCisgKiBDYWxsZWQgYWZ0ZXIgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgaGFzIGJlZW4gbG9zdC4KKyAqCisgKiBGcmVlcyB0aGUgb2JqZWN0CisgKi8KK3ZvaWQKK2RybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopIGtyZWY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7CisKKwlpZiAoZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdCAhPSBOVUxMKQorCQlkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0KG9iaik7CisKKwlmcHV0KG9iai0+ZmlscCk7CisJYXRvbWljX2RlYygmZGV2LT5vYmplY3RfY291bnQpOworCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5vYmplY3RfbWVtb3J5KTsKKwlrZnJlZShvYmopOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9mcmVlKTsKKworLyoqCisgKiBDYWxsZWQgYWZ0ZXIgdGhlIGxhc3QgaGFuZGxlIHRvIHRoZSBvYmplY3QgaGFzIGJlZW4gY2xvc2VkCisgKgorICogUmVtb3ZlcyBhbnkgbmFtZSBmb3IgdGhlIG9iamVjdC4gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZQorICogY2FsbGVkIGJlZm9yZSBkcm1fZ2VtX29iamVjdF9mcmVlIG9yIHdlJ2xsIGJlIHRvdWNoaW5nCisgKiBmcmVlZCBtZW1vcnkKKyAqLwordm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBjb250YWluZXJfb2Yoa3JlZiwKKwkJCQkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0LAorCQkJCQkJICBoYW5kbGVjb3VudCk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCisJLyogUmVtb3ZlIGFueSBuYW1lIGZvciB0aGlzIG9iamVjdCAqLworCXNwaW5fbG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZiAob2JqLT5uYW1lKSB7CisJCWlkcl9yZW1vdmUoJmRldi0+b2JqZWN0X25hbWVfaWRyLCBvYmotPm5hbWUpOworCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwkJLyoKKwkJICogVGhlIG9iamVjdCBuYW1lIGhlbGQgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QsIGRyb3AKKwkJICogdGhhdCBub3cuCisJCSAqLworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCX0gZWxzZQorCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwppbmRleCA5MGY1YThkLi45MjBiNzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCkBAIC02NCw2ICs2NCw4IEBACiAjZGVmaW5lIERSTV9JT0NUTF9TR19BTExPQzMyCQlEUk1fSU9XKCAweDM4LCBkcm1fc2NhdHRlcl9nYXRoZXIzMl90KQogI2RlZmluZSBEUk1fSU9DVExfU0dfRlJFRTMyCQlEUk1fSU9XKCAweDM5LCBkcm1fc2NhdHRlcl9nYXRoZXIzMl90KQogCisjZGVmaW5lIERSTV9JT0NUTF9VUERBVEVfRFJBVzMyCQlEUk1fSU9XKCAweDNmLCBkcm1fdXBkYXRlX2RyYXczMl90KQorCiAjZGVmaW5lIERSTV9JT0NUTF9XQUlUX1ZCTEFOSzMyCQlEUk1fSU9XUigweDNhLCBkcm1fd2FpdF92YmxhbmszMl90KQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmVyc2lvbl8zMiB7CkBAIC05NTIsNiArOTU0LDM3IEBACiAJCQkgRFJNX0lPQ1RMX1NHX0ZSRUUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCit0eXBlZGVmIHN0cnVjdCBkcm1fdXBkYXRlX2RyYXczMiB7CisJZHJtX2RyYXdhYmxlX3QgaGFuZGxlOworCXVuc2lnbmVkIGludCB0eXBlOworCXVuc2lnbmVkIGludCBudW07CisJLyogNjQtYml0IHZlcnNpb24gaGFzIGEgMzItYml0IHBhZCBoZXJlICovCisJdTY0IGRhdGE7CS8qKjwgUG9pbnRlciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBkcm1fdXBkYXRlX2RyYXczMl90OworCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fdXBkYXRlX2RyYXcoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkcm1fdXBkYXRlX2RyYXczMl90IHVwZGF0ZTMyOworCXN0cnVjdCBkcm1fdXBkYXRlX2RyYXcgX191c2VyICpyZXF1ZXN0OworCWludCBlcnI7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnVwZGF0ZTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih1cGRhdGUzMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJlcXVlc3QgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnJlcXVlc3QpKTsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHJlcXVlc3QsIHNpemVvZigqcmVxdWVzdCkpIHx8CisJICAgIF9fcHV0X3VzZXIodXBkYXRlMzIuaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKSB8fAorCSAgICBfX3B1dF91c2VyKHVwZGF0ZTMyLnR5cGUsICZyZXF1ZXN0LT50eXBlKSB8fAorCSAgICBfX3B1dF91c2VyKHVwZGF0ZTMyLm51bSwgJnJlcXVlc3QtPm51bSkgfHwKKwkgICAgX19wdXRfdXNlcih1cGRhdGUzMi5kYXRhLCAmcmVxdWVzdC0+ZGF0YSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJCQlEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBlcnI7Cit9CisKIHN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdDMyIHsKIAllbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgdHlwZTsKIAl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CkBAIC0xMDMzLDYgKzEwNjYsNyBAQAogI2VuZGlmCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0dfQUxMT0MzMildID0gY29tcGF0X2RybV9zZ19hbGxvYywKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TR19GUkVFMzIpXSA9IGNvbXBhdF9kcm1fc2dfZnJlZSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9VUERBVEVfRFJBVzMyKV0gPSBjb21wYXRfZHJtX3VwZGF0ZV9kcmF3LAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1dBSVRfVkJMQU5LMzIpXSA9IGNvbXBhdF9kcm1fd2FpdF92YmxhbmssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCA1M2YwZTVhLi4yMTJhOTRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC02Myw3ICs2Myw3IEBACiAJICAgIHAtPmRldm51bSAhPSBQQ0lfU0xPVChkZXYtPnBkZXYtPmRldmZuKSB8fCBwLT5mdW5jbnVtICE9IFBDSV9GVU5DKGRldi0+cGRldi0+ZGV2Zm4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXAtPmlycSA9IGRldi0+aXJxOworCXAtPmlycSA9IGRldi0+cGRldi0+aXJxOwogCiAJRFJNX0RFQlVHKCIlZDolZDolZCA9PiBJUlEgJWRcbiIsIHAtPmJ1c251bSwgcC0+ZGV2bnVtLCBwLT5mdW5jbnVtLAogCQkgIHAtPmlycSk7CkBAIC03MSwyNSArNzEsMTM3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHZibGFua19kaXNhYmxlX2ZuKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilhcmc7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpbnQgaTsKKworCWlmICghZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fY3J0Y3M7IGkrKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dmJsYW5rX3JlZmNvdW50W2ldKSA9PSAwICYmCisJCSAgICBkZXYtPnZibGFua19lbmFibGVkW2ldKSB7CisJCQlEUk1fREVCVUcoImRpc2FibGluZyB2Ymxhbmsgb24gY3J0YyAlZFxuIiwgaSk7CisJCQlkZXYtPmxhc3RfdmJsYW5rW2ldID0KKwkJCQlkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19jb3VudGVyKGRldiwgaSk7CisJCQlkZXYtPmRyaXZlci0+ZGlzYWJsZV92YmxhbmsoZGV2LCBpKTsKKwkJCWRldi0+dmJsYW5rX2VuYWJsZWRbaV0gPSAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRybV92YmxhbmtfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCS8qIEJhaWwgaWYgdGhlIGRyaXZlciBkaWRuJ3QgY2FsbCBkcm1fdmJsYW5rX2luaXQoKSAqLworCWlmIChkZXYtPm51bV9jcnRjcyA9PSAwKQorCQlyZXR1cm47CisKKwlkZWxfdGltZXIoJmRldi0+dmJsYW5rX2Rpc2FibGVfdGltZXIpOworCisJdmJsYW5rX2Rpc2FibGVfZm4oKHVuc2lnbmVkIGxvbmcpZGV2KTsKKworCWRybV9mcmVlKGRldi0+dmJsX3F1ZXVlLCBzaXplb2YoKmRldi0+dmJsX3F1ZXVlKSAqIGRldi0+bnVtX2NydGNzLAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+dmJsX3NpZ3MsIHNpemVvZigqZGV2LT52Ymxfc2lncykgKiBkZXYtPm51bV9jcnRjcywKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPl92YmxhbmtfY291bnQsIHNpemVvZigqZGV2LT5fdmJsYW5rX2NvdW50KSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+dmJsYW5rX3JlZmNvdW50LCBzaXplb2YoKmRldi0+dmJsYW5rX3JlZmNvdW50KSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+dmJsYW5rX2VuYWJsZWQsIHNpemVvZigqZGV2LT52YmxhbmtfZW5hYmxlZCkgKgorCQkgZGV2LT5udW1fY3J0Y3MsIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPmxhc3RfdmJsYW5rLCBzaXplb2YoKmRldi0+bGFzdF92YmxhbmspICogZGV2LT5udW1fY3J0Y3MsCisJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52YmxhbmtfaW5tb2Rlc2V0LCBzaXplb2YoKmRldi0+dmJsYW5rX2lubW9kZXNldCkgKgorCQkgZGV2LT5udW1fY3J0Y3MsIERSTV9NRU1fRFJJVkVSKTsKKworCWRldi0+bnVtX2NydGNzID0gMDsKK30KKworaW50IGRybV92YmxhbmtfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbnVtX2NydGNzKQoreworCWludCBpLCByZXQgPSAtRU5PTUVNOworCisJc2V0dXBfdGltZXIoJmRldi0+dmJsYW5rX2Rpc2FibGVfdGltZXIsIHZibGFua19kaXNhYmxlX2ZuLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT52YmxfbG9jayk7CisJYXRvbWljX3NldCgmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcsIDApOworCWRldi0+bnVtX2NydGNzID0gbnVtX2NydGNzOworCisJZGV2LT52YmxfcXVldWUgPSBkcm1fYWxsb2Moc2l6ZW9mKHdhaXRfcXVldWVfaGVhZF90KSAqIG51bV9jcnRjcywKKwkJCQkgICBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibF9xdWV1ZSkKKwkJZ290byBlcnI7CisKKwlkZXYtPnZibF9zaWdzID0gZHJtX2FsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSAqIG51bV9jcnRjcywKKwkJCQkgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsX3NpZ3MpCisJCWdvdG8gZXJyOworCisJZGV2LT5fdmJsYW5rX2NvdW50ID0gZHJtX2FsbG9jKHNpemVvZihhdG9taWNfdCkgKiBudW1fY3J0Y3MsCisJCQkJICAgICAgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT5fdmJsYW5rX2NvdW50KQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsYW5rX3JlZmNvdW50ID0gZHJtX2FsbG9jKHNpemVvZihhdG9taWNfdCkgKiBudW1fY3J0Y3MsCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibGFua19yZWZjb3VudCkKKwkJZ290byBlcnI7CisKKwlkZXYtPnZibGFua19lbmFibGVkID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZihpbnQpLAorCQkJCQkgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52YmxhbmtfZW5hYmxlZCkKKwkJZ290byBlcnI7CisKKwlkZXYtPmxhc3RfdmJsYW5rID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZih1MzIpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPmxhc3RfdmJsYW5rKQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsYW5rX2lubW9kZXNldCA9IGRybV9jYWxsb2MobnVtX2NydGNzLCBzaXplb2YoaW50KSwKKwkJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsYW5rX2lubW9kZXNldCkKKwkJZ290byBlcnI7CisKKwkvKiBaZXJvIHBlci1jcnRjIHZibGFuayBzdHVmZiAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fY3J0Y3M7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZibF9xdWV1ZVtpXSk7CisJCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZibF9zaWdzW2ldKTsKKwkJYXRvbWljX3NldCgmZGV2LT5fdmJsYW5rX2NvdW50W2ldLCAwKTsKKwkJYXRvbWljX3NldCgmZGV2LT52YmxhbmtfcmVmY291bnRbaV0sIDApOworCX0KKworCWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IDA7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWRybV92YmxhbmtfY2xlYW51cChkZXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfaW5pdCk7CisKIC8qKgogICogSW5zdGFsbCBJUlEgaGFuZGxlci4KICAqCiAgKiBccGFyYW0gZGV2IERSTSBkZXZpY2UuCi0gKiBccGFyYW0gaXJxIElSUSBudW1iZXIuCiAgKgotICogSW5pdGlhbGl6ZXMgdGhlIElSUSByZWxhdGVkIGRhdGEsIGFuZCBzZXR1cHMgZHJtX2RldmljZTo6dmJsX3F1ZXVlLiBJbnN0YWxscyB0aGUgaGFuZGxlciwgY2FsbGluZyB0aGUgZHJpdmVyCisgKiBJbml0aWFsaXplcyB0aGUgSVJRIHJlbGF0ZWQgZGF0YS4gSW5zdGFsbHMgdGhlIGhhbmRsZXIsIGNhbGxpbmcgdGhlIGRyaXZlcgogICogXGMgZHJtX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCgpIGFuZCBcYyBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbCgpIGZ1bmN0aW9ucwogICogYmVmb3JlIGFuZCBhZnRlciB0aGUgaW5zdGFsbGF0aW9uLgogICovCi1zdGF0aWMgaW50IGRybV9pcnFfaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBkcm1faXJxX2luc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2hfZmxhZ3MgPSAwOwogCiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfSVJRKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZGV2LT5pcnEgPT0gMCkKKwlpZiAoZGV2LT5wZGV2LT5pcnEgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CkBAIC0xMDcsMTggKzIxOSw3IEBACiAJZGV2LT5pcnFfZW5hYmxlZCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5pcnEpOwotCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSVJRX1ZCTCkpIHsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT52YmxfcXVldWUpOwotCi0JCXNwaW5fbG9ja19pbml0KCZkZXYtPnZibF9sb2NrKTsKLQotCQlJTklUX0xJU1RfSEVBRCgmZGV2LT52Ymxfc2lncyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZibF9zaWdzMik7Ci0KLQkJZGV2LT52YmxfcGVuZGluZyA9IDA7Ci0JfQorCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPnBkZXYtPmlycSk7CiAKIAkvKiBCZWZvcmUgaW5zdGFsbGluZyBoYW5kbGVyICovCiAJZGV2LT5kcml2ZXItPmlycV9wcmVpbnN0YWxsKGRldik7CkBAIC0xMjcsOCArMjI4LDkgQEAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9JUlFfU0hBUkVEKSkKIAkJc2hfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZXYtPmRyaXZlci0+aXJxX2hhbmRsZXIsCisJcmV0ID0gcmVxdWVzdF9pcnEoZHJtX2Rldl90b19pcnEoZGV2KSwgZGV2LT5kcml2ZXItPmlycV9oYW5kbGVyLAogCQkJICBzaF9mbGFncywgZGV2LT5kZXZuYW1lLCBkZXYpOworCiAJaWYgKHJldCA8IDApIHsKIAkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlkZXYtPmlycV9lbmFibGVkID0gMDsKQEAgLTEzNywxMCArMjM5LDE2IEBACiAJfQogCiAJLyogQWZ0ZXIgaW5zdGFsbGluZyBoYW5kbGVyICovCi0JZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbChkZXYpOworCXJldCA9IGRldi0+ZHJpdmVyLT5pcnFfcG9zdGluc3RhbGwoZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWRldi0+aXJxX2VuYWJsZWQgPSAwOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChkcm1faXJxX2luc3RhbGwpOwogCiAvKioKICAqIFVuaW5zdGFsbCB0aGUgSVJRIGhhbmRsZXIuCkBAIC0xNjQsMTcgKzI3MiwxOCBAQAogCWlmICghaXJxX2VuYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JRFJNX0RFQlVHKCJpcnE9JWRcbiIsIGRldi0+aXJxKTsKKwlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5wZGV2LT5pcnEpOwogCiAJZGV2LT5kcml2ZXItPmlycV91bmluc3RhbGwoZGV2KTsKIAotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKGRldi0+cGRldi0+aXJxLCBkZXYpOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRldik7CiAKIAlkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZHJtX2lycV91bmluc3RhbGwpOwogCiAvKioKQEAgLTIwMSw3ICszMTAsNyBAQAogCQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9JUlEpKQogCQkJcmV0dXJuIDA7CiAJCWlmIChkZXYtPmlmX3ZlcnNpb24gPCBEUk1fSUZfVkVSU0lPTigxLCAyKSAmJgotCQkgICAgY3RsLT5pcnEgIT0gZGV2LT5pcnEpCisJCSAgICBjdGwtPmlycSAhPSBkZXYtPnBkZXYtPmlycSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR1cm4gZHJtX2lycV9pbnN0YWxsKGRldik7CiAJY2FzZSBEUk1fVU5JTlNUX0hBTkRMRVI6CkBAIC0yMTQsNiArMzIzLDE3NCBAQAogfQogCiAvKioKKyAqIGRybV92YmxhbmtfY291bnQgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRlciB2YWx1ZQorICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IHdoaWNoIGNvdW50ZXIgdG8gcmV0cmlldmUKKyAqCisgKiBGZXRjaGVzIHRoZSAiY29va2VkIiB2YmxhbmsgY291bnQgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YKKyAqIHZibGFuayBldmVudHMgc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCBpbmNsdWRpbmcgbG9zdCBldmVudHMgZHVlIHRvCisgKiBtb2Rlc2V0dGluZyBhY3Rpdml0eS4KKyAqLwordTMyIGRybV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2NvdW50KTsKKworLyoqCisgKiBkcm1fdXBkYXRlX3ZibGFua19jb3VudCAtIHVwZGF0ZSB0aGUgbWFzdGVyIHZibGFuayBjb3VudGVyCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0YzogY291bnRlciB0byB1cGRhdGUKKyAqCisgKiBDYWxsIGJhY2sgaW50byB0aGUgZHJpdmVyIHRvIHVwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgdmJsYW5rIGNvdW50ZXIKKyAqIChzcGVjaWZpZWQgYnkgQGNydGMpLiAgRGVhbCB3aXRoIHdyYXBhcm91bmQsIGlmIGl0IG9jY3VycmVkLCBhbmQKKyAqIHVwZGF0ZSB0aGUgbGFzdCByZWFkIHZhbHVlIHNvIHdlIGNhbiBkZWFsIHdpdGggd3JhcGFyb3VuZCBvbiB0aGUgbmV4dAorICogY2FsbCBpZiBuZWNlc3NhcnkuCisgKgorICogT25seSBuZWNlc3Nhcnkgd2hlbiBnb2luZyBmcm9tIG9mZi0+b24sIHRvIGFjY291bnQgZm9yIGZyYW1lcyB3ZQorICogZGlkbid0IGdldCBhbiBpbnRlcnJ1cHQgZm9yLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGhvbGQgZGV2LT52YmxfbG9jayBzaW5jZSB0aGlzIHJlYWRzICYgd3JpdGVzCisgKiBkZXZpY2UgdmJsYW5rIGZpZWxkcy4KKyAqLworc3RhdGljIHZvaWQgZHJtX3VwZGF0ZV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJdTMyIGN1cl92YmxhbmssIGRpZmY7CisKKwkvKgorCSAqIEludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBwcmlvciB0byB0aGlzIGNhbGwsIHNvIGRlYWwgd2l0aCBjb3VudGVyCisJICogd3JhcCBpZiBuZWVkZWQuCisJICogTk9URSEgIEl0J3MgcG9zc2libGUgd2UgbG9zdCBhIGZ1bGwgZGV2LT5tYXhfdmJsYW5rX2NvdW50IGV2ZW50cworCSAqIGhlcmUgaWYgdGhlIHJlZ2lzdGVyIGlzIHNtYWxsIG9yIHdlIGhhZCB2YmxhbmsgaW50ZXJydXB0cyBvZmYgZm9yCisJICogYSBsb25nIHRpbWUuCisJICovCisJY3VyX3ZibGFuayA9IGRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBjcnRjKTsKKwlkaWZmID0gY3VyX3ZibGFuayAtIGRldi0+bGFzdF92YmxhbmtbY3J0Y107CisJaWYgKGN1cl92YmxhbmsgPCBkZXYtPmxhc3RfdmJsYW5rW2NydGNdKSB7CisJCWRpZmYgKz0gZGV2LT5tYXhfdmJsYW5rX2NvdW50OworCisJCURSTV9ERUJVRygibGFzdF92YmxhbmtbJWRdPTB4JXgsIGN1cl92Ymxhbms9MHgleCA9PiBkaWZmPTB4JXhcbiIsCisJCQkgIGNydGMsIGRldi0+bGFzdF92YmxhbmtbY3J0Y10sIGN1cl92YmxhbmssIGRpZmYpOworCX0KKworCURSTV9ERUJVRygiZW5hYmxpbmcgdmJsYW5rIGludGVycnVwdHMgb24gY3J0YyAlZCwgbWlzc2VkICVkXG4iLAorCQkgIGNydGMsIGRpZmYpOworCisJYXRvbWljX2FkZChkaWZmLCAmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKK30KKworLyoqCisgKiBkcm1fdmJsYW5rX2dldCAtIGdldCBhIHJlZmVyZW5jZSBjb3VudCBvbiB2YmxhbmsgZXZlbnRzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0Yzogd2hpY2ggQ1JUQyB0byBvd24KKyAqCisgKiBBY3F1aXJlIGEgcmVmZXJlbmNlIGNvdW50IG9uIHZibGFuayBldmVudHMgdG8gYXZvaWQgaGF2aW5nIHRoZW0gZGlzYWJsZWQKKyAqIHdoaWxlIGluIHVzZS4KKyAqCisgKiBSRVRVUk5TCisgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZmFpbHVyZS4KKyAqLworaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCS8qIEdvaW5nIGZyb20gMC0+MSBtZWFucyB3ZSBoYXZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluICovCisJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkgPT0gMSAmJgorCSAgICAhZGV2LT52YmxhbmtfZW5hYmxlZFtjcnRjXSkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+ZW5hYmxlX3ZibGFuayhkZXYsIGNydGMpOworCQlEUk1fREVCVUcoImVuYWJsaW5nIHZibGFuayBvbiBjcnRjICVkLCByZXQ6ICVkXG4iLCBjcnRjLCByZXQpOworCQlpZiAocmV0KQorCQkJYXRvbWljX2RlYygmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pOworCQllbHNlIHsKKwkJCWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10gPSAxOworCQkJZHJtX3VwZGF0ZV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2dldCk7CisKKy8qKgorICogZHJtX3ZibGFua19wdXQgLSBnaXZlIHVwIG93bmVyc2hpcCBvZiB2YmxhbmsgZXZlbnRzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0Yzogd2hpY2ggY291bnRlciB0byBnaXZlIHVwCisgKgorICogUmVsZWFzZSBvd25lcnNoaXAgb2YgYSBnaXZlbiB2YmxhbmsgY291bnRlciwgdHVybmluZyBvZmYgaW50ZXJydXB0cworICogaWYgcG9zc2libGUuCisgKi8KK3ZvaWQgZHJtX3ZibGFua19wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJLyogTGFzdCB1c2VyIHNjaGVkdWxlcyBpbnRlcnJ1cHQgZGlzYWJsZSAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkpCisJCW1vZF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lciwgamlmZmllcyArIDUqRFJNX0haKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3ZibGFua19wdXQpOworCisvKioKKyAqIGRybV9tb2Rlc2V0X2N0bCAtIGhhbmRsZSB2YmxhbmsgZXZlbnQgY291bnRlciBjaGFuZ2VzIGFjcm9zcyBtb2RlIHN3aXRjaAorICogQERSTV9JT0NUTF9BUkdTOiBzdGFuZGFyZCBpb2N0bCBhcmd1bWVudHMKKyAqCisgKiBBcHBsaWNhdGlvbnMgc2hvdWxkIGNhbGwgdGhlICVfRFJNX1BSRV9NT0RFU0VUIGFuZCAlX0RSTV9QT1NUX01PREVTRVQKKyAqIGlvY3RscyBhcm91bmQgbW9kZXNldHRpbmcgc28gdGhhdCBhbnkgbG9zdCB2YmxhbmsgZXZlbnRzIGFyZSBhY2NvdW50ZWQgZm9yLgorICoKKyAqIEdlbmVyYWxseSB0aGUgY291bnRlciB3aWxsIHJlc2V0IGFjcm9zcyBtb2RlIHNldHMuICBJZiBpbnRlcnJ1cHRzIGFyZQorICogZW5hYmxlZCBhcm91bmQgdGhpcyBjYWxsLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNpbmNlIHRoZSBjb3VudGVyCisgKiB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIGluY3JlbWVudGVkLgorICovCitpbnQgZHJtX21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsICptb2Rlc2V0ID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCWludCBjcnRjLCByZXQgPSAwOworCisJLyogSWYgZHJtX3ZibGFua19pbml0KCkgaGFzbid0IGJlZW4gY2FsbGVkIHlldCwganVzdCBuby1vcCAqLworCWlmICghZGV2LT5udW1fY3J0Y3MpCisJCWdvdG8gb3V0OworCisJY3J0YyA9IG1vZGVzZXQtPmNydGM7CisJaWYgKGNydGMgPj0gZGV2LT5udW1fY3J0Y3MpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUbyBhdm9pZCBhbGwgdGhlIHByb2JsZW1zIHRoYXQgbWlnaHQgaGFwcGVuIGlmIGludGVycnVwdHMKKwkgKiB3ZXJlIGVuYWJsZWQvZGlzYWJsZWQgYXJvdW5kIG9yIGJldHdlZW4gdGhlc2UgY2FsbHMsIHdlIGp1c3QKKwkgKiBoYXZlIHRoZSBrZXJuZWwgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgQ1JUQyAoanVzdCBvbmNlIHRob3VnaAorCSAqIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIGNvdW50IGlmIG11bHRpcGxlLCBtaXNtYXRjaCBjYWxscyBvY2N1ciksCisJICogc28gdGhhdCBpbnRlcnJ1cHRzIHJlbWFpbiBlbmFibGVkIGluIHRoZSBpbnRlcmltLgorCSAqLworCXN3aXRjaCAobW9kZXNldC0+Y21kKSB7CisJY2FzZSBfRFJNX1BSRV9NT0RFU0VUOgorCQlpZiAoIWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSkgeworCQkJZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdID0gMTsKKwkJCWRybV92YmxhbmtfZ2V0KGRldiwgY3J0Yyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBfRFJNX1BPU1RfTU9ERVNFVDoKKwkJaWYgKGRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwkJCWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IDE7CisJCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCQkJZHJtX3ZibGFua19wdXQoZGV2LCBjcnRjKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKICAqIFdhaXQgZm9yIFZCTEFOSy4KICAqCiAgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgpAQCAtMjMyLDE0ICs1MDksMTQgQEAKICAqCiAgKiBJZiBhIHNpZ25hbCBpcyBub3QgcmVxdWVzdGVkLCB0aGVuIGNhbGxzIHZibGFua193YWl0KCkuCiAgKi8KLWludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitpbnQgZHJtX3dhaXRfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAl1bmlvbiBkcm1fd2FpdF92YmxhbmsgKnZibHdhaXQgPSBkYXRhOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHNlcTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHNlcSwgY3J0YzsKIAotCWlmICgoIWRldi0+aXJxKSB8fCAoIWRldi0+aXJxX2VuYWJsZWQpKQorCWlmICgoIWRldi0+cGRldi0+aXJxKSB8fCAoIWRldi0+aXJxX2VuYWJsZWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJgpAQCAtMjUxLDEzICs1MjgsMTcgQEAKIAl9CiAKIAlmbGFncyA9IHZibHdhaXQtPnJlcXVlc3QudHlwZSAmIF9EUk1fVkJMQU5LX0ZMQUdTX01BU0s7CisJY3J0YyA9IGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZID8gMSA6IDA7CiAKLQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpID8KLQkJCQkgICAgRFJJVkVSX0lSUV9WQkwyIDogRFJJVkVSX0lSUV9WQkwpKQorCWlmIChjcnRjID49IGRldi0+bnVtX2NydGNzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNlcSA9IGF0b21pY19yZWFkKChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgPyAmZGV2LT52YmxfcmVjZWl2ZWQyCi0JCQkgIDogJmRldi0+dmJsX3JlY2VpdmVkKTsKKwlyZXQgPSBkcm1fdmJsYW5rX2dldChkZXYsIGNydGMpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWNxdWlyZSB2YmxhbmsgY291bnRlciwgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXNlcSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKIAogCXN3aXRjaCAodmJsd2FpdC0+cmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktfVFlQRVNfTUFTSykgewogCWNhc2UgX0RSTV9WQkxBTktfUkVMQVRJVkU6CkBAIC0yNjYsNyArNTQ3LDggQEAKIAljYXNlIF9EUk1fVkJMQU5LX0FCU09MVVRFOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOwogCX0KIAogCWlmICgoZmxhZ3MgJiBfRFJNX1ZCTEFOS19ORVhUT05NSVNTKSAmJgpAQCAtMjc2LDggKzU1OCw3IEBACiAKIAlpZiAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TSUdOQUwpIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQkJc3RydWN0IGxpc3RfaGVhZCAqdmJsX3NpZ3MgPSAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpCi0JCQkJICAgICAgPyAmZGV2LT52Ymxfc2lnczIgOiAmZGV2LT52Ymxfc2lnczsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdmJsX3NpZ3MgPSAmZGV2LT52Ymxfc2lnc1tjcnRjXTsKIAkJc3RydWN0IGRybV92Ymxfc2lnICp2Ymxfc2lnOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CkBAIC0yOTgsMjIgKzU3OSwzMiBAQAogCQkJfQogCQl9CiAKLQkJaWYgKGRldi0+dmJsX3BlbmRpbmcgPj0gMTAwKSB7CisJCWlmIChhdG9taWNfcmVhZCgmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcpID49IDEwMCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCWRldi0+dmJsX3BlbmRpbmcrKzsKLQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CiAKLQkJaWYgKCEKLQkJICAgICh2Ymxfc2lnID0KLQkJICAgICBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fdmJsX3NpZyksIERSTV9NRU1fRFJJVkVSKSkpIHsKLQkJCXJldHVybiAtRU5PTUVNOworCQl2Ymxfc2lnID0gZHJtX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRybV92Ymxfc2lnKSwKKwkJCQkgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJaWYgKCF2Ymxfc2lnKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBkb25lOwogCQl9CiAKLQkJbWVtc2V0KCh2b2lkICopdmJsX3NpZywgMCwgc2l6ZW9mKCp2Ymxfc2lnKSk7CisJCS8qIEdldCBhIHJlZmNvdW50IG9uIHRoZSB2YmxhbmssIHdoaWNoIHdpbGwgYmUgcmVsZWFzZWQgYnkKKwkJICogZHJtX3ZibF9zZW5kX3NpZ25hbHMoKS4KKwkJICovCisJCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgY3J0Yyk7CisJCWlmIChyZXQpIHsKKwkJCWRybV9mcmVlKHZibF9zaWcsIHNpemVvZihzdHJ1Y3QgZHJtX3ZibF9zaWcpLAorCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlhdG9taWNfaW5jKCZkZXYtPnZibF9zaWduYWxfcGVuZGluZyk7CiAKIAkJdmJsX3NpZy0+c2VxdWVuY2UgPSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlOwogCQl2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vID0gdmJsd2FpdC0+cmVxdWVzdC5zaWduYWw7CkBAIC0zMjcsMjAgKzYxOCwyOSBAQAogCiAJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gc2VxOwogCX0gZWxzZSB7Ci0JCWlmIChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgewotCQkJaWYgKGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdDIpCi0JCQkJcmV0ID0gZGV2LT5kcml2ZXItPnZibGFua193YWl0MihkZXYsICZ2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKLQkJfSBlbHNlIGlmIChkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQpCi0JCQlyZXQgPQotCQkJICAgIGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdChkZXYsCi0JCQkJCQkgICAgICZ2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKKwkJRFJNX0RFQlVHKCJ3YWl0aW5nIG9uIHZibGFuayBjb3VudCAlZCwgY3J0YyAlZFxuIiwKKwkJCSAgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSwgY3J0Yyk7CisJCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWVbY3J0Y10sIDMgKiBEUk1fSFosCisJCQkgICAgKChkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0YykKKwkJCSAgICAgIC0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CiAKLQkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCQl2Ymx3YWl0LT5yZXBseS50dmFsX3NlYyA9IG5vdy50dl9zZWM7Ci0JCXZibHdhaXQtPnJlcGx5LnR2YWxfdXNlYyA9IG5vdy50dl91c2VjOworCQlpZiAocmV0ICE9IC1FSU5UUikgeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCisJCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CisKKwkJCXZibHdhaXQtPnJlcGx5LnR2YWxfc2VjID0gbm93LnR2X3NlYzsKKwkJCXZibHdhaXQtPnJlcGx5LnR2YWxfdXNlYyA9IG5vdy50dl91c2VjOworCQkJdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0Yyk7CisJCQlEUk1fREVCVUcoInJldHVybmluZyAlZCB0byBjbGllbnRcbiIsCisJCQkJICB2Ymx3YWl0LT5yZXBseS5zZXF1ZW5jZSk7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUcoInZibGFuayB3YWl0IGludGVycnVwdGVkIGJ5IHNpZ25hbFxuIik7CisJCX0KIAl9CiAKLSAgICAgIGRvbmU6Citkb25lOgorCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ4LDQ0ICs2NDgsNTcgQEAKICAqIFNlbmQgdGhlIFZCTEFOSyBzaWduYWxzLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KKyAqIFxwYXJhbSBjcnRjIENSVEMgd2hlcmUgdGhlIHZibGFuayBldmVudCBvY2N1cnJlZAogICoKICAqIFNlbmRzIGEgc2lnbmFsIGZvciBlYWNoIHRhc2sgaW4gZHJtX2RldmljZTo6dmJsX3NpZ3MgYW5kIGVtcHRpZXMgdGhlIGxpc3QuCiAgKgogICogSWYgYSBzaWduYWwgaXMgbm90IHJlcXVlc3RlZCwgdGhlbiBjYWxscyB2Ymxhbmtfd2FpdCgpLgogICovCi12b2lkIGRybV92Ymxfc2VuZF9zaWduYWxzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgZHJtX3ZibF9zZW5kX3NpZ25hbHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CisJc3RydWN0IGRybV92Ymxfc2lnICp2Ymxfc2lnLCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzOworCXVuc2lnbmVkIGludCB2Ymxfc2VxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlzdHJ1Y3QgZHJtX3ZibF9zaWcgKnZibF9zaWcsICp0bXA7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzID0gaSA/ICZkZXYtPnZibF9zaWdzMiA6ICZkZXYtPnZibF9zaWdzOwotCQl1bnNpZ25lZCBpbnQgdmJsX3NlcSA9IGF0b21pY19yZWFkKGkgPyAmZGV2LT52YmxfcmVjZWl2ZWQyIDoKLQkJCQkJCSAgICZkZXYtPnZibF9yZWNlaXZlZCk7CisJdmJsX3NpZ3MgPSAmZGV2LT52Ymxfc2lnc1tjcnRjXTsKKwl2Ymxfc2VxID0gZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2Ymxfc2lnLCB0bXAsIHZibF9zaWdzLCBoZWFkKSB7Ci0JCQlpZiAoKHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7Ci0JCQkJdmJsX3NpZy0+aW5mby5zaV9jb2RlID0gdmJsX3NlcTsKLQkJCQlzZW5kX3NpZ19pbmZvKHZibF9zaWctPmluZm8uc2lfc2lnbm8sCi0JCQkJCSAgICAgICZ2Ymxfc2lnLT5pbmZvLCB2Ymxfc2lnLT50YXNrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmJsX3NpZywgdG1wLCB2Ymxfc2lncywgaGVhZCkgeworCSAgICBpZiAoKHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7CisJCXZibF9zaWctPmluZm8uc2lfY29kZSA9IHZibF9zZXE7CisJCXNlbmRfc2lnX2luZm8odmJsX3NpZy0+aW5mby5zaV9zaWdubywKKwkJCSAgICAgICZ2Ymxfc2lnLT5pbmZvLCB2Ymxfc2lnLT50YXNrKTsKIAotCQkJCWxpc3RfZGVsKCZ2Ymxfc2lnLT5oZWFkKTsKKwkJbGlzdF9kZWwoJnZibF9zaWctPmhlYWQpOwogCi0JCQkJZHJtX2ZyZWUodmJsX3NpZywgc2l6ZW9mKCp2Ymxfc2lnKSwKLQkJCQkJIERSTV9NRU1fRFJJVkVSKTsKLQotCQkJCWRldi0+dmJsX3BlbmRpbmctLTsKLQkJCX0KLQkJfQorCQlkcm1fZnJlZSh2Ymxfc2lnLCBzaXplb2YoKnZibF9zaWcpLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJYXRvbWljX2RlYygmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcpOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIGNydGMpOworCSAgICB9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgZmxhZ3MpOwogfQogCi1FWFBPUlRfU1lNQk9MKGRybV92Ymxfc2VuZF9zaWduYWxzKTsKKy8qKgorICogZHJtX2hhbmRsZV92YmxhbmsgLSBoYW5kbGUgYSB2YmxhbmsgZXZlbnQKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGVyZSB0aGlzIGV2ZW50IG9jY3VycmVkCisgKgorICogRHJpdmVycyBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgaW4gdGhlaXIgdmJsYW5rIGludGVycnVwdCBoYW5kbGVycyB0bworICogdXBkYXRlIHRoZSB2YmxhbmsgY291bnRlciBhbmQgc2VuZCBhbnkgc2lnbmFscyB0aGF0IG1heSBiZSBwZW5kaW5nLgorICovCit2b2lkIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWF0b21pY19pbmMoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWVbY3J0Y10pOworCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldiwgY3J0Yyk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9oYW5kbGVfdmJsYW5rKTsKIAogLyoqCiAgKiBUYXNrbGV0IHdyYXBwZXIgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2xvY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbG9jay5jCmluZGV4IGE0Y2FmOTUuLjg4ODE1OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbG9jay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbG9jay5jCkBAIC0yMzIsNiArMjMyLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9sb2NrX3Rha2UpOwogCiAvKioKICAqIFRoaXMgdGFrZXMgYSBsb2NrIGZvcmNpYmx5IGFuZCBoYW5kcyBpdCB0byBjb250ZXh0LglTaG91bGQgT05MWSBiZSB1c2VkCkBAIC0yOTksNiArMzAwLDcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxvY2tfZGF0YS0+bG9ja19xdWV1ZSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9sb2NrX2ZyZWUpOwogCiAvKioKICAqIElmIHdlIGdldCBoZXJlLCBpdCBtZWFucyB0aGF0IHRoZSBwcm9jZXNzIGhhcyBjYWxsZWQgRFJNX0lPQ1RMX0xPQ0sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCmluZGV4IDAxNzcwMTIuLjgwM2JjOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYwpAQCAtMTMzLDYgKzEzMyw3IEBACiB7CiAJcmV0dXJuIGRybV9hZ3BfZnJlZV9tZW1vcnkoaGFuZGxlKSA/IDAgOiAtRUlOVkFMOwogfQorRVhQT1JUX1NZTUJPTChkcm1fZnJlZV9hZ3ApOwogCiAvKiogV3JhcHBlciBhcm91bmQgYWdwX2JpbmRfbWVtb3J5KCkgKi8KIGludCBkcm1fYmluZF9hZ3AoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIHVuc2lnbmVkIGludCBzdGFydCkKQEAgLTE0NSw2ICsxNDYsNyBAQAogewogCXJldHVybiBkcm1fYWdwX3VuYmluZF9tZW1vcnkoaGFuZGxlKTsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX3VuYmluZF9hZ3ApOwogCiAjZWxzZSAgLyogIF9fT1NfSEFTX0FHUCAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqYWdwX3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggZGNmZjllOS4uMjE3YWQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwpAQCAtMTY5LDYgKzE2OSw3IEBACiAKIAlyZXR1cm4gY2hpbGQ7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9tbV9nZXRfYmxvY2spOwogCiAvKgogICogUHV0IGEgYmxvY2suIE1lcmdlIHdpdGggdGhlIHByZXZpb3VzIGFuZCAvIG9yIG5leHQgYmxvY2sgaWYgdGhleSBhcmUgZnJlZS4KQEAgLTIxNyw2ICsyMTgsNyBAQAogCQlkcm1fZnJlZShjdXIsIHNpemVvZigqY3VyKSwgRFJNX01FTV9NTSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fcHV0X2Jsb2NrKTsKIAogc3RydWN0IGRybV9tbV9ub2RlICpkcm1fbW1fc2VhcmNoX2ZyZWUoY29uc3Qgc3RydWN0IGRybV9tbSAqIG1tLAogCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplLApAQCAtMjY1LDYgKzI2Nyw3IEBACiAKIAlyZXR1cm4gKGhlYWQtPm5leHQtPm5leHQgPT0gaGVhZCk7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9tbV9zZWFyY2hfZnJlZSk7CiAKIGludCBkcm1fbW1faW5pdChzdHJ1Y3QgZHJtX21tICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTI3Myw3ICsyNzYsNyBAQAogCiAJcmV0dXJuIGRybV9tbV9jcmVhdGVfdGFpbF9ub2RlKG1tLCBzdGFydCwgc2l6ZSk7CiB9Ci0KK0VYUE9SVF9TWU1CT0woZHJtX21tX2luaXQpOwogCiB2b2lkIGRybV9tbV90YWtlZG93bihzdHJ1Y3QgZHJtX21tICogbW0pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCmluZGV4IDkzYjFlMDQuLmFlNzNiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCkBAIC00OSw2ICs0OSwxMCBAQAogCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgZHJtX2J1ZnNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAogCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IGRybV9nZW1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IGRybV9nZW1fb2JqZWN0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwogI2lmIERSTV9ERUJVR19DT0RFCiBzdGF0aWMgaW50IGRybV92bWFfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAogCQkJaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKQEAgLTYwLDEzICs2NCwxNiBAQAogc3RhdGljIHN0cnVjdCBkcm1fcHJvY19saXN0IHsKIAljb25zdCBjaGFyICpuYW1lOwkvKio8IGZpbGUgbmFtZSAqLwogCWludCAoKmYpIChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwkJLyoqPCBwcm9jIGNhbGxiYWNrKi8KKwl1MzIgZHJpdmVyX2ZlYXR1cmVzOyAvKio8IFJlcXVpcmVkIGRyaXZlciBmZWF0dXJlcyBmb3IgdGhpcyBlbnRyeSAqLwogfSBkcm1fcHJvY19saXN0W10gPSB7Ci0JeyJuYW1lIiwgZHJtX25hbWVfaW5mb30sCi0JeyJtZW0iLCBkcm1fbWVtX2luZm99LAotCXsidm0iLCBkcm1fdm1faW5mb30sCi0JeyJjbGllbnRzIiwgZHJtX2NsaWVudHNfaW5mb30sCi0JeyJxdWV1ZXMiLCBkcm1fcXVldWVzX2luZm99LAotCXsiYnVmcyIsIGRybV9idWZzX2luZm99LAorCXsibmFtZSIsIGRybV9uYW1lX2luZm8sIDB9LAorCXsibWVtIiwgZHJtX21lbV9pbmZvLCAwfSwKKwl7InZtIiwgZHJtX3ZtX2luZm8sIDB9LAorCXsiY2xpZW50cyIsIGRybV9jbGllbnRzX2luZm8sIDB9LAorCXsicXVldWVzIiwgZHJtX3F1ZXVlc19pbmZvLCAwfSwKKwl7ImJ1ZnMiLCBkcm1fYnVmc19pbmZvLCAwfSwKKwl7ImdlbV9uYW1lcyIsIGRybV9nZW1fbmFtZV9pbmZvLCBEUklWRVJfR0VNfSwKKwl7ImdlbV9vYmplY3RzIiwgZHJtX2dlbV9vYmplY3RfaW5mbywgRFJJVkVSX0dFTX0sCiAjaWYgRFJNX0RFQlVHX0NPREUKIAl7InZtYSIsIGRybV92bWFfaW5mb30sCiAjZW5kaWYKQEAgLTkwLDggKzk3LDkgQEAKIGludCBkcm1fcHJvY19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yLCBpbnQgbWlub3JfaWQsCiAJCSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290KQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCWludCBpLCBqOworCWludCBpLCBqLCByZXQ7CiAJY2hhciBuYW1lWzY0XTsKIAogCXNwcmludGYobmFtZSwgIiVkIiwgbWlub3JfaWQpOwpAQCAtMTAyLDIzICsxMTAsNDIgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgRFJNX1BST0NfRU5UUklFUzsgaSsrKSB7CisJCXUzMiBmZWF0dXJlcyA9IGRybV9wcm9jX2xpc3RbaV0uZHJpdmVyX2ZlYXR1cmVzOworCisJCWlmIChmZWF0dXJlcyAhPSAwICYmCisJCSAgICAoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIGZlYXR1cmVzKSAhPSBmZWF0dXJlcykKKwkJCWNvbnRpbnVlOworCiAJCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwKIAkJCQkJU19JRlJFRyB8IFNfSVJVR08sIG1pbm9yLT5kZXZfcm9vdCk7CiAJCWlmICghZW50KSB7CiAJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLyVzLyVzXG4iLAogCQkJCSAgbmFtZSwgZHJtX3Byb2NfbGlzdFtpXS5uYW1lKTsKLQkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCi0JCQkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAotCQkJCQkJICBtaW5vci0+ZGV2X3Jvb3QpOwotCQkJcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgcm9vdCk7Ci0JCQltaW5vci0+ZGV2X3Jvb3QgPSBOVUxMOwotCQkJcmV0dXJuIC0xOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGZhaWw7CiAJCX0KIAkJZW50LT5yZWFkX3Byb2MgPSBkcm1fcHJvY19saXN0W2ldLmY7CiAJCWVudC0+ZGF0YSA9IG1pbm9yOwogCX0KIAorCWlmIChkZXYtPmRyaXZlci0+cHJvY19pbml0KSB7CisJCXJldCA9IGRldi0+ZHJpdmVyLT5wcm9jX2luaXQobWlub3IpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkRSTTogRHJpdmVyIGZhaWxlZCB0byBpbml0aWFsaXplICIKKwkJCQkgICIvcHJvYy9kcmkuXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwogCXJldHVybiAwOworIGZhaWw6CisKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQlyZW1vdmVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCisJCQkJICBtaW5vci0+ZGV2X3Jvb3QpOworCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOworCW1pbm9yLT5kZXZfcm9vdCA9IE5VTEw7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xMzMsMTIgKzE2MCwxNiBAQAogICovCiBpbnQgZHJtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290KQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwogCWludCBpOwogCWNoYXIgbmFtZVs2NF07CiAKIAlpZiAoIXJvb3QgfHwgIW1pbm9yLT5kZXZfcm9vdCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoZGV2LT5kcml2ZXItPnByb2NfY2xlYW51cCkKKwkJZGV2LT5kcml2ZXItPnByb2NfY2xlYW51cChtaW5vcik7CisKIAlmb3IgKGkgPSAwOyBpIDwgRFJNX1BST0NfRU5UUklFUzsgaSsrKQogCQlyZW1vdmVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsIG1pbm9yLT5kZXZfcm9vdCk7CiAJc3ByaW50ZihuYW1lLCAiJWQiLCBtaW5vci0+aW5kZXgpOwpAQCAtNDgwLDYgKzUxMSw4NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBkcm1fZ2VtX25hbWVfaW5mb19kYXRhIHsKKyAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBsZW47CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKmJ1ZjsKKyAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBlb2Y7Cit9OworCitzdGF0aWMgaW50IGRybV9nZW1fb25lX25hbWVfaW5mbyhpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHB0cjsKKwlzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSAgICpuaWQgPSBkYXRhOworCisJRFJNX0lORk8oIm5hbWUgJWQgc2l6ZSAlemRcbiIsIG9iai0+bmFtZSwgb2JqLT5zaXplKTsKKwlpZiAobmlkLT5lb2YpCisJCXJldHVybiAwOworCisJbmlkLT5sZW4gKz0gc3ByaW50ZigmbmlkLT5idWZbbmlkLT5sZW5dLAorCQkJICAgICIlNmQgJTh6ZCAlN2QgJThkXG4iLAorCQkJICAgIG9iai0+bmFtZSwgb2JqLT5zaXplLAorCQkJICAgIGF0b21pY19yZWFkKCZvYmotPmhhbmRsZWNvdW50LnJlZmNvdW50KSwKKwkJCSAgICBhdG9taWNfcmVhZCgmb2JqLT5yZWZjb3VudC5yZWZjb3VudCkpOworCWlmIChuaWQtPmxlbiA+IERSTV9QUk9DX0xJTUlUKSB7CisJCW5pZC0+ZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRybV9nZW1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgbmlkOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwluaWQubGVuID0gc3ByaW50ZihidWYsICIgIG5hbWUgICAgIHNpemUgaGFuZGxlcyByZWZjb3VudFxuIik7CisJbmlkLmJ1ZiA9IGJ1ZjsKKwluaWQuZW9mID0gMDsKKwlpZHJfZm9yX2VhY2goJmRldi0+b2JqZWN0X25hbWVfaWRyLCBkcm1fZ2VtX29uZV9uYW1lX2luZm8sICZuaWQpOworCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCWlmIChuaWQubGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CisJKmVvZiA9IDE7CisJcmV0dXJuIG5pZC5sZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiJWQgb2JqZWN0c1xuIiwgYXRvbWljX3JlYWQoJmRldi0+b2JqZWN0X2NvdW50KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIG9iamVjdCBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+b2JqZWN0X21lbW9yeSkpOworCURSTV9QUk9DX1BSSU5UKCIlZCBwaW5uZWRcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9jb3VudCkpOworCURSTV9QUk9DX1BSSU5UKCIlZCBwaW4gYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9tZW1vcnkpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgZ3R0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5ndHRfbWVtb3J5KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIGd0dCB0b3RhbFxuIiwgZGV2LT5ndHRfdG90YWwpOworCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCiAjaWYgRFJNX0RFQlVHX0NPREUKIAogc3RhdGljIGludCBkcm1fX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwppbmRleCBjMmY1ODRmLi4xNDFlMzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwpAQCAtMTA3LDcgKzEwNyw2IEBACiAjaWZkZWYgX19hbHBoYV9fCiAJZGV2LT5ob3NlID0gcGRldi0+c3lzZGF0YTsKICNlbmRpZgotCWRldi0+aXJxID0gcGRldi0+aXJxOwogCiAJaWYgKGRybV9odF9jcmVhdGUoJmRldi0+bWFwX2hhc2gsIDEyKSkgewogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1Miw2ICsxNTEsMTUgQEAKIAkJZ290byBlcnJvcl9vdXRfdW5yZWc7CiAJfQogCisJaWYgKGRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkgeworCQlyZXRjb2RlID0gZHJtX2dlbV9pbml0KGRldik7CisJCWlmIChyZXRjb2RlKSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBpbml0aWFsaXplIGdyYXBoaWNzIGV4ZWN1dGlvbiAiCisJCQkJICAibWFuYWdlciAoR0VNKVxuIik7CisJCQlnb3RvIGVycm9yX291dF91bnJlZzsKKwkJfQorCX0KKwogCXJldHVybiAwOwogCiAgICAgICBlcnJvcl9vdXRfdW5yZWc6CkBAIC0zMTcsNiArMzI1LDcgQEAKIGludCBkcm1fcHV0X21pbm9yKHN0cnVjdCBkcm1fbWlub3IgKiptaW5vcl9wKQogewogCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKm1pbm9yX3A7CisKIAlEUk1fREVCVUcoInJlbGVhc2Ugc2Vjb25kYXJ5IG1pbm9yICVkXG4iLCBtaW5vci0+aW5kZXgpOwogCiAJaWYgKG1pbm9yLT50eXBlID09IERSTV9NSU5PUl9MRUdBQ1kpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggYWYyMTFhMC4uMTYxMWI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiBlcnJfb3V0X2ZpbGVzOgogCWlmIChpID4gMCkKIAkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCWRldmljZV9yZW1vdmVfZmlsZSgmbWlub3ItPmtkZXYsICZkZXZpY2VfYXR0cnNbaV0pOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZtaW5vci0+a2RldiwgJmRldmljZV9hdHRyc1tqXSk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1pbm9yLT5rZGV2KTsKIGVycl9vdXQ6CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggYTllNjA0Ni4uNWJhNzhlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTMsNyArMywxMiBAQAogIyBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlci4KIAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KLWk5MTUteSA6PSBpOTE1X2Rydi5vIGk5MTVfZG1hLm8gaTkxNV9pcnEubyBpOTE1X21lbS5vCitpOTE1LXkgOj0gaTkxNV9kcnYubyBpOTE1X2RtYS5vIGk5MTVfaXJxLm8gaTkxNV9tZW0ubyBpOTE1X29wcmVnaW9uLm8gXAorICAgICAgICAgIGk5MTVfc3VzcGVuZC5vIFwKKwkgIGk5MTVfZ2VtLm8gXAorCSAgaTkxNV9nZW1fZGVidWcubyBcCisJICBpOTE1X2dlbV9wcm9jLm8gXAorCSAgaTkxNV9nZW1fdGlsaW5nLm8KIAogaTkxNS0kKENPTkZJR19DT01QQVQpICAgKz0gaTkxNV9pb2MzMi5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDlhYzQ3MjAuLjAxZGU1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtNDAsNDAgKzQwLDk2IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwotCXUzMiBsYXN0X2hlYWQgPSBJOTE1X1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFEX0FERFI7CisJdTMyIGFjdGhkX3JlZyA9IElTX0k5NjVHKGRldikgPyBBQ1RIRF9JOTY1IDogQUNUSEQ7CisJdTMyIGxhc3RfYWN0aGQgPSBJOTE1X1JFQUQoYWN0aGRfcmVnKTsKKwl1MzIgYWN0aGQ7CisJdTMyIGxhc3RfaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKLQkJcmluZy0+aGVhZCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKwkJcmluZy0+aGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOworCQlhY3RoZCA9IEk5MTVfUkVBRChhY3RoZF9yZWcpOwogCQlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSAocmluZy0+dGFpbCArIDgpOwogCQlpZiAocmluZy0+c3BhY2UgPCAwKQogCQkJcmluZy0+c3BhY2UgKz0gcmluZy0+U2l6ZTsKIAkJaWYgKHJpbmctPnNwYWNlID49IG4pCiAJCQlyZXR1cm4gMDsKIAotCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOworCQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCisJCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOwogCiAJCWlmIChyaW5nLT5oZWFkICE9IGxhc3RfaGVhZCkKIAkJCWkgPSAwOworCQlpZiAoYWN0aGQgIT0gbGFzdF9hY3RoZCkKKwkJCWkgPSAwOwogCiAJCWxhc3RfaGVhZCA9IHJpbmctPmhlYWQ7CisJCWxhc3RfYWN0aGQgPSBhY3RoZDsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCiAJfQogCiAJcmV0dXJuIC1FQlVTWTsKIH0KIAorLyoqCisgKiBTZXRzIHVwIHRoZSBoYXJkd2FyZSBzdGF0dXMgcGFnZSBmb3IgZGV2aWNlcyB0aGF0IG5lZWQgYSBwaHlzaWNhbCBhZGRyZXNzCisgKiBpbiB0aGUgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgaTkxNV9pbml0X3BoeXNfaHdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJLyogUHJvZ3JhbSBIYXJkd2FyZSBTdGF0dXMgUGFnZSAqLworCWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoID0KKwkJZHJtX3BjaV9hbGxvYyhkZXYsIFBBR0VfU0laRSwgUEFHRV9TSVpFLCAweGZmZmZmZmZmKTsKKworCWlmICghZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgpIHsKKwkJRFJNX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKKwlkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlID0gZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgtPmJ1c2FkZHI7CisKKwltZW1zZXQoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLCAwLCBQQUdFX1NJWkUpOworCisJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKKwlEUk1fREVCVUcoIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOworCXJldHVybiAwOworfQorCisvKioKKyAqIEZyZWVzIHRoZSBoYXJkd2FyZSBzdGF0dXMgcGFnZSwgd2hldGhlciBpdCdzIGEgcGh5c2ljYWwgYWRkcmVzcyBvciBhIHZpcnR1YWwKKyAqIGFkZHJlc3Mgc2V0IHVwIGJ5IHRoZSBYIFNlcnZlci4KKyAqLworc3RhdGljIHZvaWQgaTkxNV9mcmVlX2h3cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWlmIChkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgeworCQlkcm1fcGNpX2ZyZWUoZGV2LCBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCk7CisJCWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoID0gTlVMTDsKKwl9CisKKwlpZiAoZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcikgeworCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gMDsKKwkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5od3NfbWFwLCBkZXYpOworCX0KKworCS8qIE5lZWQgdG8gcmV3cml0ZSBoYXJkd2FyZSBzdGF0dXMgcGFnZSAqLworCUk5MTVfV1JJVEUoSFdTX1BHQSwgMHgxZmZmZjAwMCk7Cit9CisKIHZvaWQgaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pOTE1X3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKIAotCXJpbmctPmhlYWQgPSBJOTE1X1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFEX0FERFI7Ci0JcmluZy0+dGFpbCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19UQUlMKSAmIFRBSUxfQUREUjsKKwlyaW5nLT5oZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CisJcmluZy0+dGFpbCA9IEk5MTVfUkVBRChQUkIwX1RBSUwpICYgVEFJTF9BRERSOwogCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7CiAJaWYgKHJpbmctPnNwYWNlIDwgMCkKIAkJcmluZy0+c3BhY2UgKz0gcmluZy0+U2l6ZTsKIAotCWlmIChyaW5nLT5oZWFkID09IHJpbmctPnRhaWwpCisJaWYgKHJpbmctPmhlYWQgPT0gcmluZy0+dGFpbCAmJiBkZXZfcHJpdi0+c2FyZWFfcHJpdikKIAkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTkxNV9CT1hfUklOR19FTVBUWTsKIH0KIApAQCAtODQsMjggKzE0MCwxOSBAQAogCSAqIG1heSBub3QgaGF2ZSBiZWVuIGNhbGxlZCBmcm9tIHVzZXJzcGFjZSBhbmQgYWZ0ZXIgZGV2X3ByaXZhdGUKIAkgKiBpcyBmcmVlZCwgaXQncyB0b28gbGF0ZS4KIAkgKi8KLQlpZiAoZGV2LT5pcnEpCisJaWYgKGRldi0+aXJxX2VuYWJsZWQpCiAJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAKIAlpZiAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCkgewogCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOwotCQlkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID0gMDsKLQkJZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZSA9IDA7CisJCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBOVUxMOworCQlkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID0gTlVMTDsKIAkJZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSAwOwogCX0KIAotCWlmIChkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgewotCQlkcm1fcGNpX2ZyZWUoZGV2LCBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCk7Ci0JCWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoID0gTlVMTDsKLQkJLyogTmVlZCB0byByZXdyaXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlICovCi0JCUk5MTVfV1JJVEUoMHgwMjA4MCwgMHgxZmZmZjAwMCk7Ci0JfQotCi0JaWYgKGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpIHsKLQkJZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkciA9IDA7Ci0JCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZkZXZfcHJpdi0+aHdzX21hcCwgZGV2KTsKLQkJSTkxNV9XUklURSgweDIwODAsIDB4MWZmZmYwMDApOwotCX0KKwkvKiBDbGVhciB0aGUgSFdTIHZpcnR1YWwgYWRkcmVzcyBhdCB0ZWFyZG93biAqLworCWlmIChJOTE1X05FRURfR0ZYX0hXUyhkZXYpKQorCQlpOTE1X2ZyZWVfaHdzKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMSwzNCArMTY4LDM0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldl9wcml2LT5tbWlvX21hcCA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5tbWlvX29mZnNldCk7Ci0JaWYgKCFkZXZfcHJpdi0+bW1pb19tYXApIHsKLQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQlEUk1fRVJST1IoImNhbiBub3QgZmluZCBtbWlvIG1hcCFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlkZXZfcHJpdi0+c2FyZWFfcHJpdiA9IChkcm1faTkxNV9zYXJlYV90ICopCiAJICAgICgodTggKikgZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGUgKyBpbml0LT5zYXJlYV9wcml2X29mZnNldCk7CiAKLQlkZXZfcHJpdi0+cmluZy5TdGFydCA9IGluaXQtPnJpbmdfc3RhcnQ7Ci0JZGV2X3ByaXYtPnJpbmcuRW5kID0gaW5pdC0+cmluZ19lbmQ7Ci0JZGV2X3ByaXYtPnJpbmcuU2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKLQlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBkZXZfcHJpdi0+cmluZy5TaXplIC0gMTsKKwlpZiAoaW5pdC0+cmluZ19zaXplICE9IDApIHsKKwkJaWYgKGRldl9wcml2LT5yaW5nLnJpbmdfb2JqICE9IE5VTEwpIHsKKwkJCWk5MTVfZG1hX2NsZWFudXAoZGV2KTsKKwkJCURSTV9FUlJPUigiQ2xpZW50IHRyaWVkIHRvIGluaXRpYWxpemUgcmluZ2J1ZmZlciBpbiAiCisJCQkJICAiR0VNIG1vZGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAotCWRldl9wcml2LT5yaW5nLm1hcC5vZmZzZXQgPSBpbml0LT5yaW5nX3N0YXJ0OwotCWRldl9wcml2LT5yaW5nLm1hcC5zaXplID0gaW5pdC0+cmluZ19zaXplOwotCWRldl9wcml2LT5yaW5nLm1hcC50eXBlID0gMDsKLQlkZXZfcHJpdi0+cmluZy5tYXAuZmxhZ3MgPSAwOwotCWRldl9wcml2LT5yaW5nLm1hcC5tdHJyID0gMDsKKwkJZGV2X3ByaXYtPnJpbmcuU2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKKwkJZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrID0gZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDE7CiAKLQlkcm1fY29yZV9pb3JlbWFwKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7CisJCWRldl9wcml2LT5yaW5nLm1hcC5vZmZzZXQgPSBpbml0LT5yaW5nX3N0YXJ0OworCQlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKKwkJZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOworCQlkZXZfcHJpdi0+cmluZy5tYXAuZmxhZ3MgPSAwOworCQlkZXZfcHJpdi0+cmluZy5tYXAubXRyciA9IDA7CiAKLQlpZiAoZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZSA9PSBOVUxMKSB7Ci0JCWk5MTVfZG1hX2NsZWFudXAoZGV2KTsKLQkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKLQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlkcm1fY29yZV9pb3JlbWFwKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7CisKKwkJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOworCQkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKKwkJCQkgICIgcmluZyBidWZmZXJcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAl9CiAKIAlkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID0gZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZTsKQEAgLTE1OSwzNCArMjA2LDEwIEBACiAJZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9IDA7CiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSA9IGRldl9wcml2LT5jdXJyZW50X3BhZ2U7CiAKLQkvKiBXZSBhcmUgdXNpbmcgc2VwYXJhdGUgdmFsdWVzIGFzIHBsYWNlaG9sZGVycyBmb3IgbWVjaGFuaXNtcyBmb3IKLQkgKiBwcml2YXRlIGJhY2tidWZmZXIvZGVwdGhidWZmZXIgdXNhZ2UuCi0JICovCi0JZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IDA7Ci0JaWYgKElTX0k5NjVHKGRldikpIC8qIDk2NSBkb2Vzbid0IHN1cHBvcnQgb2xkZXIgbWV0aG9kICovCi0JCWRldl9wcml2LT51c2VfbWlfYmF0Y2hidWZmZXJfc3RhcnQgPSAxOwotCiAJLyogQWxsb3cgaGFyZHdhcmUgYmF0Y2hidWZmZXJzIHVubGVzcyB0b2xkIG90aGVyd2lzZS4KIAkgKi8KIAlkZXZfcHJpdi0+YWxsb3dfYmF0Y2hidWZmZXIgPSAxOwogCi0JLyogUHJvZ3JhbSBIYXJkd2FyZSBTdGF0dXMgUGFnZSAqLwotCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgewotCQlkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCA9Ci0JCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUsIDB4ZmZmZmZmZmYpOwotCi0JCWlmICghZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgpIHsKLQkJCWk5MTVfZG1hX2NsZWFudXAoZGV2KTsKLQkJCURSTV9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haC0+dmFkZHI7Ci0JCWRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haC0+YnVzYWRkcjsKLQotCQltZW1zZXQoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLCAwLCBQQUdFX1NJWkUpOwotCQlJOTE1X1dSSVRFKDB4MDIwODAsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOwotCX0KLQlEUk1fREVCVUcoIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDEsMTEgKzIyNCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghZGV2X3ByaXYtPm1taW9fbWFwKSB7Ci0JCURSTV9FUlJPUigiY2FuIG5vdCBmaW5kIG1taW8gbWFwIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKIAkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKIAkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CkBAIC0yMjAsOSArMjM4LDkgQEAKIAlEUk1fREVCVUcoImh3IHN0YXR1cyBwYWdlIEAgJXBcbiIsIGRldl9wcml2LT5od19zdGF0dXNfcGFnZSk7CiAKIAlpZiAoZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkciAhPSAwKQotCQlJOTE1X1dSSVRFKDB4MDIwODAsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCQlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwogCWVsc2UKLQkJSTkxNV9XUklURSgweDAyMDgwLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKKwkJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKIAlEUk1fREVCVUcoIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOwogCiAJcmV0dXJuIDA7CkBAIC0zNjcsOSArMzg1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9lbWl0X2JveChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKiBib3hlcywKLQkJCSBpbnQgaSwgaW50IERSMSwgaW50IERSNCkKK2ludAoraTkxNV9lbWl0X2JveChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMsCisJICAgICAgaW50IGksIGludCBEUjEsIGludCBEUjQpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jbGlwX3JlY3QgYm94OwpAQCAtNDE1LDE0ICs0MzQsMTUgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSArK2Rldl9wcml2LT5jb3VudGVyOwotCisJZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAlpZiAoZGV2X3ByaXYtPmNvdW50ZXIgPiAweDdGRkZGRkZGVUwpCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlciA9IDE7CisJCWRldl9wcml2LT5jb3VudGVyID0gMDsKKwlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCisJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlcjsKIAogCUJFR0lOX0xQX1JJTkcoNCk7Ci0JT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7Ci0JT1VUX1JJTkcoMjApOworCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlPVVRfUklORyg1IDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKIAlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7CiAJT1VUX1JJTkcoMCk7CiAJQURWQU5DRV9MUF9SSU5HKCk7CkBAIC00ODYsNyArNTA2LDcgQEAKIAkJCQlyZXR1cm4gcmV0OwogCQl9CiAKLQkJaWYgKGRldl9wcml2LT51c2VfbWlfYmF0Y2hidWZmZXJfc3RhcnQpIHsKKwkJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkgewogCQkJQkVHSU5fTFBfUklORygyKTsKIAkJCWlmIChJU19JOTY1RyhkZXYpKSB7CiAJCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKDIgPDwgNikgfCBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOwpAQCAtNTE2LDYgKzUzNiw5IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJUklOR19MT0NBTFM7CiAKKwlpZiAoIWRldl9wcml2LT5zYXJlYV9wcml2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCURSTV9ERUJVRygiJXM6IHBhZ2U9JWQgcGZDdXJyZW50UGFnZT0lZFxuIiwKIAkJICBfX2Z1bmNfXywKIAkJICBkZXZfcHJpdi0+Y3VycmVudF9wYWdlLApAQCAtNTI0LDcgKzU0Nyw3IEBACiAJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKIAlCRUdJTl9MUF9SSU5HKDIpOwotCU9VVF9SSU5HKElOU1RfUEFSU0VSX0NMSUVOVCB8IElOU1RfT1BfRkxVU0ggfCBJTlNUX0ZMVVNIX01BUF9DQUNIRSk7CisJT1VUX1JJTkcoTUlfRkxVU0ggfCBNSV9SRUFEX0ZMVVNIKTsKIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIApAQCAtNTQ5LDggKzU3Miw4IEBACiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyKys7CiAKIAlCRUdJTl9MUF9SSU5HKDQpOwotCU9VVF9SSU5HKENNRF9TVE9SRV9EV09SRF9JRFgpOwotCU9VVF9SSU5HKDIwKTsKKwlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7CisJT1VUX1JJTkcoNSA8PCBNSV9TVE9SRV9EV09SRF9JTkRFWF9TSElGVCk7CiAJT1VUX1JJTkcoZGV2X3ByaXYtPmNvdW50ZXIpOwogCU9VVF9SSU5HKDApOwogCUFEVkFOQ0VfTFBfUklORygpOwpAQCAtNTcwLDkgKzU5MywxNSBAQAogc3RhdGljIGludCBpOTE1X2ZsdXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlpbnQgcmV0OwogCi0JcmV0dXJuIGk5MTVfcXVpZXNjZW50KGRldik7CisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGk5MTVfcXVpZXNjZW50KGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGk5MTVfYmF0Y2hidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTU5MywxNiArNjIyLDE5IEBACiAJRFJNX0RFQlVHKCJpOTE1IGJhdGNoYnVmZmVyLCBzdGFydCAleCB1c2VkICVkIGNsaXByZWN0cyAlZFxuIiwKIAkJICBiYXRjaC0+c3RhcnQsIGJhdGNoLT51c2VkLCBiYXRjaC0+bnVtX2NsaXByZWN0cyk7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAogCWlmIChiYXRjaC0+bnVtX2NsaXByZWN0cyAmJiBEUk1fVkVSSUZZQVJFQV9SRUFEKGJhdGNoLT5jbGlwcmVjdHMsCiAJCQkJCQkgICAgICAgYmF0Y2gtPm51bV9jbGlwcmVjdHMgKgogCQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NsaXBfcmVjdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlyZXQgPSBpOTE1X2Rpc3BhdGNoX2JhdGNoYnVmZmVyKGRldiwgYmF0Y2gpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0Jc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOworCWlmIChzYXJlYV9wcml2KQorCQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludClod19zdGF0dXNbNV07CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjE5LDcgKzY1MSw3IEBACiAJRFJNX0RFQlVHKCJpOTE1IGNtZGJ1ZmZlciwgYnVmICVwIHN6ICVkIGNsaXByZWN0cyAlZFxuIiwKIAkJICBjbWRidWYtPmJ1ZiwgY21kYnVmLT5zeiwgY21kYnVmLT5udW1fY2xpcHJlY3RzKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJaWYgKGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAmJgogCSAgICBEUk1fVkVSSUZZQVJFQV9SRUFEKGNtZGJ1Zi0+Y2xpcHJlY3RzLApAQCAtNjI5LDI0ICs2NjEsMzMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldCA9IGk5MTVfZGlzcGF0Y2hfY21kYnVmZmVyKGRldiwgY21kYnVmKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludClod19zdGF0dXNbNV07CisJaWYgKHNhcmVhX3ByaXYpCisJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpOTE1X2ZsaXBfYnVmcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKKwlpbnQgcmV0OworCiAJRFJNX0RFQlVHKCIlc1xuIiwgX19mdW5jX18pOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKLQlyZXR1cm4gaTkxNV9kaXNwYXRjaF9mbGlwKGRldik7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGk5MTVfZGlzcGF0Y2hfZmxpcChkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpOTE1X2dldHBhcmFtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC02NjMsNyArNzA0LDcgQEAKIAogCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7CiAJY2FzZSBJOTE1X1BBUkFNX0lSUV9BQ1RJVkU6Ci0JCXZhbHVlID0gZGV2LT5pcnEgPyAxIDogMDsKKwkJdmFsdWUgPSBkZXYtPnBkZXYtPmlycSA/IDEgOiAwOwogCQlicmVhazsKIAljYXNlIEk5MTVfUEFSQU1fQUxMT1dfQkFUQ0hCVUZGRVI6CiAJCXZhbHVlID0gZGV2X3ByaXYtPmFsbG93X2JhdGNoYnVmZmVyID8gMSA6IDA7CkBAIC02NzEsNiArNzEyLDEyIEBACiAJY2FzZSBJOTE1X1BBUkFNX0xBU1RfRElTUEFUQ0g6CiAJCXZhbHVlID0gUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKIAkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0NISVBTRVRfSUQ6CisJCXZhbHVlID0gZGV2LT5wY2lfZGV2aWNlOworCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1fSEFTX0dFTToKKwkJdmFsdWUgPSAxOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLCBwYXJhbS0+cGFyYW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY5Nyw4ICs3NDQsNiBAQAogCiAJc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsKIAljYXNlIEk5MTVfU0VUUEFSQU1fVVNFX01JX0JBVENIQlVGRkVSX1NUQVJUOgotCQlpZiAoIUlTX0k5NjVHKGRldikpCi0JCQlkZXZfcHJpdi0+dXNlX21pX2JhdGNoYnVmZmVyX3N0YXJ0ID0gcGFyYW0tPnZhbHVlOwogCQlicmVhazsKIAljYXNlIEk5MTVfU0VUUEFSQU1fVEVYX0xSVV9MT0dfR1JBTlVMQVJJVFk6CiAJCWRldl9wcml2LT50ZXhfbHJ1X2xvZ19ncmFudWxhcml0eSA9IHBhcmFtLT52YWx1ZTsKQEAgLTc0OSw4ICs3OTQsOCBAQAogCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5od3NfbWFwLmhhbmRsZTsKIAogCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7Ci0JSTkxNV9XUklURSgweDAyMDgwLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKLQlEUk1fREVCVUcoImxvYWQgaHdzIDB4MjA4MCB3aXRoIGdmeCBtZW0gMHgleFxuIiwKKwlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCURSTV9ERUJVRygibG9hZCBod3MgSFdTX1BHQSB3aXRoIGdmeCBtZW0gMHgleFxuIiwKIAkJCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwogCURSTV9ERUJVRygibG9hZCBod3MgYXQgJXBcbiIsIGRldl9wcml2LT5od19zdGF0dXNfcGFnZSk7CiAJcmV0dXJuIDA7CkBAIC03NzYsMTQgKzgyMSw0MSBAQAogCW1lbXNldChkZXZfcHJpdiwgMCwgc2l6ZW9mKGRybV9pOTE1X3ByaXZhdGVfdCkpOwogCiAJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CisJZGV2X3ByaXYtPmRldiA9IGRldjsKIAogCS8qIEFkZCByZWdpc3RlciBtYXAgKG5lZWRlZCBmb3Igc3VzcGVuZC9yZXN1bWUpICovCiAJYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCBtbWlvX2Jhcik7CiAJc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgbW1pb19iYXIpOwogCi0JcmV0ID0gZHJtX2FkZG1hcChkZXYsIGJhc2UsIHNpemUsIF9EUk1fUkVHSVNURVJTLAotCQkJIF9EUk1fS0VSTkVMIHwgX0RSTV9EUklWRVIsCi0JCQkgJmRldl9wcml2LT5tbWlvX21hcCk7CisJZGV2X3ByaXYtPnJlZ3MgPSBpb3JlbWFwKGJhc2UsIHNpemUpOworCisJaTkxNV9nZW1fbG9hZChkZXYpOworCisJLyogSW5pdCBIV1MgKi8KKwlpZiAoIUk5MTVfTkVFRF9HRlhfSFdTKGRldikpIHsKKwkJcmV0ID0gaTkxNV9pbml0X3BoeXNfaHdzKGRldik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogT24gdGhlIDk0NUcvR00sIHRoZSBjaGlwc2V0IHJlcG9ydHMgdGhlIE1TSSBjYXBhYmlsaXR5IG9uIHRoZQorCSAqIGludGVncmF0ZWQgZ3JhcGhpY3MgZXZlbiB0aG91Z2ggdGhlIHN1cHBvcnQgaXNuJ3QgYWN0dWFsbHkgdGhlcmUKKwkgKiBhY2NvcmRpbmcgdG8gdGhlIHB1Ymxpc2hlZCBzcGVjcy4gIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGZ1bmN0aW9uCisJICogY29ycmVjdGx5IGluIHRlc3Rpbmcgb24gOTQ1Ry4KKwkgKiBUaGlzIG1heSBiZSBhIHNpZGUgZWZmZWN0IG9mIE1TSSBoYXZpbmcgYmVlbiBtYWRlIGF2YWlsYWJsZSBmb3IgUEVHCisJICogYW5kIHRoZSByZWdpc3RlcnMgYmVpbmcgY2xvc2VseSBhc3NvY2lhdGVkLgorCSAqCisJICogQWNjb3JkaW5nIHRvIGNoaXBzZXQgZXJyYXRhLCBvbiB0aGUgOTY1R00sIE1TSSBpbnRlcnJ1cHRzIG1heQorCSAqIGJlIGxvc3Qgb3IgZGVsYXllZAorCSAqLworCWlmICghSVNfSTk0NUcoZGV2KSAmJiAhSVNfSTk0NUdNKGRldikgJiYgIUlTX0k5NjVHTShkZXYpKQorCQlpZiAocGNpX2VuYWJsZV9tc2koZGV2LT5wZGV2KSkKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBNU0lcbiIpOworCisJaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOworCisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc5MSw4ICs4NjMsMTUgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGRldl9wcml2LT5tbWlvX21hcCkKLQkJZHJtX3JtbWFwKGRldiwgZGV2X3ByaXYtPm1taW9fbWFwKTsKKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKGRldi0+cGRldik7CisKKwlpOTE1X2ZyZWVfaHdzKGRldik7CisKKwlpZiAoZGV2X3ByaXYtPnJlZ3MgIT0gTlVMTCkKKwkJaW91bm1hcChkZXZfcHJpdi0+cmVncyk7CisKKwlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlkcm1fZnJlZShkZXYtPmRldl9wcml2YXRlLCBzaXplb2YoZHJtX2k5MTVfcHJpdmF0ZV90KSwKIAkJIERSTV9NRU1fRFJJVkVSKTsKQEAgLTgwMCw2ICs4NzksMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGk5MTVfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXY7CisKKwlEUk1fREVCVUcoIlxuIik7CisJaTkxNV9maWxlX3ByaXYgPSAoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqKQorCSAgICBkcm1fYWxsb2Moc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworCisJaWYgKCFpOTE1X2ZpbGVfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaWxlX3ByaXYtPmRyaXZlcl9wcml2ID0gaTkxNV9maWxlX3ByaXY7CisKKwlpOTE1X2ZpbGVfcHJpdi0+bW0ubGFzdF9nZW1fc2Vxbm8gPSAwOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV90aHJvdHRsZV9zZXFubyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC04MDcsNiArOTA1LDggQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKKwlpOTE1X2dlbV9sYXN0Y2xvc2UoZGV2KTsKKwogCWlmIChkZXZfcHJpdi0+YWdwX2hlYXApCiAJCWk5MTVfbWVtX3Rha2Vkb3duKCYoZGV2X3ByaXYtPmFncF9oZWFwKSk7CiAKQEAgLTgxOSw2ICs5MTksMTMgQEAKIAlpOTE1X21lbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2LCBkZXZfcHJpdi0+YWdwX2hlYXApOwogfQogCit2b2lkIGk5MTVfZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisKKwlkcm1fZnJlZShpOTE1X2ZpbGVfcHJpdiwgc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworfQorCiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXSA9IHsKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0lOSVQsIGk5MTVfZG1hX2luaXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9GTFVTSCwgaTkxNV9mbHVzaF9pb2N0bCwgRFJNX0FVVEgpLApAQCAtODM2LDcgKzk0MywyMyBAQAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9zZXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9nZXQsIERSTV9BVVRIICksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9WQkxBTktfU1dBUCwgaTkxNV92Ymxhbmtfc3dhcCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfSFdTX0FERFIsIGk5MTVfc2V0X3N0YXR1c19wYWdlLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9IV1NfQUREUiwgaTkxNV9zZXRfc3RhdHVzX3BhZ2UsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fSU5JVCwgaTkxNV9nZW1faW5pdF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSLCBpOTE1X2dlbV9leGVjYnVmZmVyLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUElOLCBpOTE1X2dlbV9waW5faW9jdGwsIERSTV9BVVRIfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1VOUElOLCBpOTE1X2dlbV91bnBpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fQlVTWSwgaTkxNV9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1RIUk9UVExFLCBpOTE1X2dlbV90aHJvdHRsZV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0VOVEVSVlQsIGk5MTVfZ2VtX2VudGVydnRfaW9jdGwsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTEVBVkVWVCwgaTkxNV9nZW1fbGVhdmV2dF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9DUkVBVEUsIGk5MTVfZ2VtX2NyZWF0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUFJFQUQsIGk5MTVfZ2VtX3ByZWFkX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9QV1JJVEUsIGk5MTVfZ2VtX3B3cml0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTU1BUCwgaTkxNV9nZW1fbW1hcF9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTiwgaTkxNV9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU1dfRklOSVNILCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIGk5MTVfZ2VtX3NldF90aWxpbmcsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0dFVF9USUxJTkcsIGk5MTVfZ2VtX2dldF90aWxpbmcsIDApLAogfTsKIAogaW50IGk5MTVfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoaTkxNV9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggOTNhZWQxYy4uYTgwZWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0zOCwyMTEgKzM4LDkgQEAKIAlpOTE1X1BDSV9JRFMKIH07CiAKLWVudW0gcGlwZSB7Ci0gICAgUElQRV9BID0gMCwKLSAgICBQSVBFX0IsCi19OwotCi1zdGF0aWMgYm9vbCBpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKHBpcGUgPT0gUElQRV9BKQotCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0EpICYgRFBMTF9WQ09fRU5BQkxFKTsKLQllbHNlCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQikgJiBEUExMX1ZDT19FTkFCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKLQl1MzIgKmFycmF5OwotCWludCBpOwotCi0JaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQotCQlyZXR1cm47Ci0KLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwotCWVsc2UKLQkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7Ci0KLQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJYXJyYXlbaV0gPSBJOTE1X1JFQUQocmVnICsgKGkgPDwgMikpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKLQl1MzIgKmFycmF5OwotCWludCBpOwotCi0JaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQotCQlyZXR1cm47Ci0KLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwotCWVsc2UKLQkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7Ci0KLQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJSTkxNV9XUklURShyZWcgKyAoaSA8PCAyKSwgYXJyYXlbaV0pOwotfQotCi1zdGF0aWMgdTggaTkxNV9yZWFkX2luZGV4ZWQodTE2IGluZGV4X3BvcnQsIHUxNiBkYXRhX3BvcnQsIHU4IHJlZykKLXsKLQlvdXRiKHJlZywgaW5kZXhfcG9ydCk7Ci0JcmV0dXJuIGluYihkYXRhX3BvcnQpOwotfQotCi1zdGF0aWMgdTggaTkxNV9yZWFkX2FyKHUxNiBzdDAxLCB1OCByZWcsIHUxNiBwYWxldHRlX2VuYWJsZSkKLXsKLQlpbmIoc3QwMSk7Ci0Jb3V0YihwYWxldHRlX2VuYWJsZSB8IHJlZywgVkdBX0FSX0lOREVYKTsKLQlyZXR1cm4gaW5iKFZHQV9BUl9EQVRBX1JFQUQpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3dyaXRlX2FyKHU4IHN0MDEsIHU4IHJlZywgdTggdmFsLCB1MTYgcGFsZXR0ZV9lbmFibGUpCi17Ci0JaW5iKHN0MDEpOwotCW91dGIocGFsZXR0ZV9lbmFibGUgfCByZWcsIFZHQV9BUl9JTkRFWCk7Ci0Jb3V0Yih2YWwsIFZHQV9BUl9EQVRBX1dSSVRFKTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV93cml0ZV9pbmRleGVkKHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcsIHU4IHZhbCkKLXsKLQlvdXRiKHJlZywgaW5kZXhfcG9ydCk7Ci0Jb3V0Yih2YWwsIGRhdGFfcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfc2F2ZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwotCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKLQotCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLwotCWRldl9wcml2LT5zYXZlREFDTUFTSyA9IGluYihWR0FfREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCW91dGIoMCwgVkdBX0RBQ1JYKTsKLQkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0gPSBpbmIoVkdBX0RBQ0RBVEEpOwotCi0JLyogTVNSIGJpdHMgKi8KLQlkZXZfcHJpdi0+c2F2ZU1TUiA9IGluYihWR0FfTVNSX1JFQUQpOwotCWlmIChkZXZfcHJpdi0+c2F2ZU1TUiAmIFZHQV9NU1JfQ0dBX01PREUpIHsKLQkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfQ0dBOwotCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfQ0dBOwotCQlzdDAxID0gVkdBX1NUMDFfQ0dBOwotCX0gZWxzZSB7Ci0JCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX01EQTsKLQkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX01EQTsKLQkJc3QwMSA9IFZHQV9TVDAxX01EQTsKLQl9Ci0KLQkvKiBDUlQgY29udHJvbGxlciByZWdzICovCi0JaTkxNV93cml0ZV9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCAweDExLAotCQkJICAgaTkxNV9yZWFkX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEpICYKLQkJCSAgICh+MHg4MCkpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZUNSW2ldID0KLQkJCWk5MTVfcmVhZF9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCBpKTsKLQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHVybiBvZmYgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KLQlkZXZfcHJpdi0+c2F2ZUNSWzB4MTFdICY9IH4weDgwOwotCi0JLyogQXR0cmlidXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0JaW5iKHN0MDEpOwotCWRldl9wcml2LT5zYXZlQVJfSU5ERVggPSBpbmIoVkdBX0FSX0lOREVYKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVBUltpXSA9IGk5MTVfcmVhZF9hcihzdDAxLCBpLCAwKTsKLQlpbmIoc3QwMSk7Ci0Jb3V0YihkZXZfcHJpdi0+c2F2ZUFSX0lOREVYLCBWR0FfQVJfSU5ERVgpOwotCWluYihzdDAxKTsKLQotCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVHUltpXSA9Ci0JCQlpOTE1X3JlYWRfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCBpKTsKLQotCWRldl9wcml2LT5zYXZlR1JbMHgxMF0gPQotCQlpOTE1X3JlYWRfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDEwKTsKLQlkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdID0KLQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSk7Ci0JZGV2X3ByaXYtPnNhdmVHUlsweDE4XSA9Ci0JCWk5MTVfcmVhZF9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgpOwotCi0JLyogU2VxdWVuY2VyIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRldl9wcml2LT5zYXZlU1JbaV0gPQotCQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfcmVzdG9yZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwotCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKLQotCS8qIE1TUiBiaXRzICovCi0Jb3V0YihkZXZfcHJpdi0+c2F2ZU1TUiwgVkdBX01TUl9XUklURSk7Ci0JaWYgKGRldl9wcml2LT5zYXZlTVNSICYgVkdBX01TUl9DR0FfTU9ERSkgewotCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9DR0E7Ci0JCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9DR0E7Ci0JCXN0MDEgPSBWR0FfU1QwMV9DR0E7Ci0JfSBlbHNlIHsKLQkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfTURBOwotCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfTURBOwotCQlzdDAxID0gVkdBX1NUMDFfTURBOwotCX0KLQotCS8qIFNlcXVlbmNlciByZWdpc3RlcnMsIGRvbid0IHdyaXRlIFNSMDcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQotCQlpOTE1X3dyaXRlX2luZGV4ZWQoVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSwKLQkJCQkgICBkZXZfcHJpdi0+c2F2ZVNSW2ldKTsKLQotCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KLQkvKiBFbmFibGUgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KLQlpOTE1X3dyaXRlX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEsIGRldl9wcml2LT5zYXZlQ1JbMHgxMV0pOwotCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQotCQlpOTE1X3dyaXRlX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIGksIGRldl9wcml2LT5zYXZlQ1JbaV0pOwotCi0JLyogR3JhcGhpY3MgY29udHJvbGxlciByZWdzICovCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykKLQkJaTkxNV93cml0ZV9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGksCi0JCQkJICAgZGV2X3ByaXYtPnNhdmVHUltpXSk7Ci0KLQlpOTE1X3dyaXRlX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCwKLQkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMF0pOwotCWk5MTVfd3JpdGVfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDExLAotCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDExXSk7Ci0JaTkxNV93cml0ZV9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgsCi0JCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MThdKTsKLQotCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwotCWluYihzdDAxKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKLQkJaTkxNV93cml0ZV9hcihzdDAxLCBpLCBkZXZfcHJpdi0+c2F2ZUFSW2ldLCAwKTsKLQlpbmIoc3QwMSk7IC8qIHN3aXRjaCBiYWNrIHRvIGluZGV4IG1vZGUgKi8KLQlvdXRiKGRldl9wcml2LT5zYXZlQVJfSU5ERVggfCAweDIwLCBWR0FfQVJfSU5ERVgpOwotCWluYihzdDAxKTsKLQotCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLwotCW91dGIoZGV2X3ByaXYtPnNhdmVEQUNNQVNLLCBWR0FfREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCW91dGIoMCwgVkdBX0RBQ1dYKTsKLQkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQotCQlvdXRiKGRldl9wcml2LT5zYXZlREFDREFUQVtpXSwgVkdBX0RBQ0RBVEEpOwotCi19Ci0KIHN0YXRpYyBpbnQgaTkxNV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwogCiAJaWYgKCFkZXYgfHwgIWRldl9wcml2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGV2OiAlcCwgZGV2X3ByaXY6ICVwXG4iLCBkZXYsIGRldl9wcml2KTsKQEAgLTI1NCwxMjIgKzUyLDEwIEBACiAJCXJldHVybiAwOwogCiAJcGNpX3NhdmVfc3RhdGUoZGV2LT5wZGV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgJmRldl9wcml2LT5zYXZlTEJCKTsKIAotCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gY29udHJvbCAqLwotCWRldl9wcml2LT5zYXZlRFNQQVJCID0gSTkxNV9SRUFEKERTUEFSQik7CisJaTkxNV9zYXZlX3N0YXRlKGRldik7CiAKLQkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCi0JZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYgPSBJOTE1X1JFQUQoUElQRUFDT05GKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDID0gSTkxNV9SRUFEKFBJUEVBU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQTAgPSBJOTE1X1JFQUQoRlBBMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlRFBMTF9BX01EID0gSTkxNV9SRUFEKERQTExfQV9NRCk7Ci0JZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSA9IEk5MTVfUkVBRChIVE9UQUxfQSk7Ci0JZGV2X3ByaXYtPnNhdmVIQkxBTktfQSA9IEk5MTVfUkVBRChIQkxBTktfQSk7Ci0JZGV2X3ByaXYtPnNhdmVIU1lOQ19BID0gSTkxNV9SRUFEKEhTWU5DX0EpOwotCWRldl9wcml2LT5zYXZlVlRPVEFMX0EgPSBJOTE1X1JFQUQoVlRPVEFMX0EpOwotCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBJOTE1X1JFQUQoVkJMQU5LX0EpOwotCWRldl9wcml2LT5zYXZlVlNZTkNfQSA9IEk5MTVfUkVBRChWU1lOQ19BKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOwotCi0JZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7Ci0JZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOwotCWRldl9wcml2LT5zYXZlRFNQQVNJWkUgPSBJOTE1X1JFQUQoRFNQQVNJWkUpOwotCWRldl9wcml2LT5zYXZlRFNQQVBPUyA9IEk5MTVfUkVBRChEU1BBUE9TKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEFCQVNFID0gSTkxNV9SRUFEKERTUEFCQVNFKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgewotCQlkZXZfcHJpdi0+c2F2ZURTUEFTVVJGID0gSTkxNV9SRUFEKERTUEFTVVJGKTsKLQkJZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRiA9IEk5MTVfUkVBRChEU1BBVElMRU9GRik7Ci0JfQotCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9BKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVBU1RBVCA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVBU1RBVCk7Ci0KLQkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCi0JZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYgPSBJOTE1X1JFQUQoUElQRUJDT05GKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDID0gSTkxNV9SRUFEKFBJUEVCU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKEZQQjEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlRFBMTF9CX01EID0gSTkxNV9SRUFEKERQTExfQl9NRCk7Ci0JZGV2X3ByaXYtPnNhdmVIVE9UQUxfQiA9IEk5MTVfUkVBRChIVE9UQUxfQik7Ci0JZGV2X3ByaXYtPnNhdmVIQkxBTktfQiA9IEk5MTVfUkVBRChIQkxBTktfQik7Ci0JZGV2X3ByaXYtPnNhdmVIU1lOQ19CID0gSTkxNV9SRUFEKEhTWU5DX0IpOwotCWRldl9wcml2LT5zYXZlVlRPVEFMX0IgPSBJOTE1X1JFQUQoVlRPVEFMX0IpOwotCWRldl9wcml2LT5zYXZlVkJMQU5LX0IgPSBJOTE1X1JFQUQoVkJMQU5LX0IpOwotCWRldl9wcml2LT5zYXZlVlNZTkNfQiA9IEk5MTVfUkVBRChWU1lOQ19CKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOwotCi0JZGV2X3ByaXYtPnNhdmVEU1BCQ05UUiA9IEk5MTVfUkVBRChEU1BCQ05UUik7Ci0JZGV2X3ByaXYtPnNhdmVEU1BCU1RSSURFID0gSTkxNV9SRUFEKERTUEJTVFJJREUpOwotCWRldl9wcml2LT5zYXZlRFNQQlNJWkUgPSBJOTE1X1JFQUQoRFNQQlNJWkUpOwotCWRldl9wcml2LT5zYXZlRFNQQlBPUyA9IEk5MTVfUkVBRChEU1BCUE9TKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEJCQVNFID0gSTkxNV9SRUFEKERTUEJCQVNFKTsKLQlpZiAoSVNfSTk2NUdNKGRldikgfHwgSVNfSUdEX0dNKGRldikpIHsKLQkJZGV2X3ByaXYtPnNhdmVEU1BCU1VSRiA9IEk5MTVfUkVBRChEU1BCU1VSRik7Ci0JCWRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQlRJTEVPRkYpOwotCX0KLQlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7Ci0JZGV2X3ByaXYtPnNhdmVQSVBFQlNUQVQgPSBJOTE1X1JFQUQoSTkxNVJFR19QSVBFQlNUQVQpOwotCi0JLyogQ1JUIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKEFEUEEpOwotCi0JLyogTFZEUyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOwotCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKLQkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZUxWRFNQUF9PTiA9IEk5MTVfUkVBRChMVkRTUFBfT04pOwotCWRldl9wcml2LT5zYXZlTFZEU1BQX09GRiA9IEk5MTVfUkVBRChMVkRTUFBfT0ZGKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX0NZQ0xFID0gSTkxNV9SRUFEKFBQX0NZQ0xFKTsKLQotCS8qIEZJWE1FOiBzYXZlIFRWICYgU0RWTyBzdGF0ZSAqLwotCi0JLyogRkJDIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOwotCi0JLyogSW50ZXJydXB0IHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVJSVIgPSBJOTE1X1JFQUQoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7Ci0JZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSTkxNVJFR19JTlRfRU5BQkxFX1IpOwotCWRldl9wcml2LT5zYXZlSU1SID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX01BU0tfUik7Ci0KLQkvKiBWR0Egc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0EwID0gSTkxNV9SRUFEKFZDTEtfRElWSVNPUl9WR0EwKTsKLQlkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0ExID0gSTkxNV9SRUFEKFZDTEtfRElWSVNPUl9WR0ExKTsKLQlkZXZfcHJpdi0+c2F2ZVZDTEtfUE9TVF9ESVYgPSBJOTE1X1JFQUQoVkNMS19QT1NUX0RJVik7Ci0JZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCA9IEk5MTVfUkVBRChWR0FDTlRSTCk7Ci0KLQkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7Ci0JZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EID0gSTkxNV9SRUFEKERTUENMS19HQVRFX0QpOwotCi0JLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7Ci0KLQkvKiBNZW1vcnkgQXJiaXRyYXRpb24gc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOwotCi0JLyogU2NyYXRjaCBzcGFjZSAqLwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWRldl9wcml2LT5zYXZlU1dGMFtpXSA9IEk5MTVfUkVBRChTV0YwICsgKGkgPDwgMikpOwotCQlkZXZfcHJpdi0+c2F2ZVNXRjFbaV0gPSBJOTE1X1JFQUQoU1dGMTAgKyAoaSA8PCAyKSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWRldl9wcml2LT5zYXZlU1dGMltpXSA9IEk5MTVfUkVBRChTV0YzMCArIChpIDw8IDIpKTsKLQotCWk5MTVfc2F2ZV92Z2EoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewogCQkvKiBTaHV0IGRvd24gdGhlIGRldmljZSAqLwpAQCAtMzgyLDE1NSArNjgsMTUgQEAKIAogc3RhdGljIGludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGk7Ci0KIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYtPnBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYtPnBkZXYpKQogCQlyZXR1cm4gLTE7CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgZGV2X3ByaXYtPnNhdmVMQkIpOworCWk5MTVfcmVzdG9yZV9zdGF0ZShkZXYpOwogCi0JSTkxNV9XUklURShEU1BBUkIsIGRldl9wcml2LT5zYXZlRFNQQVJCKTsKLQotCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KLQkvKiBQcmltZSB0aGUgY2xvY2sgKi8KLQlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0EgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BICYKLQkJCSAgIH5EUExMX1ZDT19FTkFCTEUpOwotCQl1ZGVsYXkoMTUwKTsKLQl9Ci0JSTkxNV9XUklURShGUEEwLCBkZXZfcHJpdi0+c2F2ZUZQQTApOwotCUk5MTVfV1JJVEUoRlBBMSwgZGV2X3ByaXYtPnNhdmVGUEExKTsKLQkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQSwgZGV2X3ByaXYtPnNhdmVEUExMX0EpOwotCXVkZWxheSgxNTApOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlJOTE1X1dSSVRFKERQTExfQV9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQpOwotCXVkZWxheSgxNTApOwotCi0JLyogUmVzdG9yZSBtb2RlICovCi0JSTkxNV9XUklURShIVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSk7Ci0JSTkxNV9XUklURShIQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVIQkxBTktfQSk7Ci0JSTkxNV9XUklURShIU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZUhTWU5DX0EpOwotCUk5MTVfV1JJVEUoVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVlRPVEFMX0EpOwotCUk5MTVfV1JJVEUoVkJMQU5LX0EsIGRldl9wcml2LT5zYXZlVkJMQU5LX0EpOwotCUk5MTVfV1JJVEUoVlNZTkNfQSwgZGV2X3ByaXYtPnNhdmVWU1lOQ19BKTsKLQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOwotCi0JLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCi0JSTkxNV9XUklURShEU1BBU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BBU0laRSk7Ci0JSTkxNV9XUklURShEU1BBUE9TLCBkZXZfcHJpdi0+c2F2ZURTUEFQT1MpOwotCUk5MTVfV1JJVEUoUElQRUFTUkMsIGRldl9wcml2LT5zYXZlUElQRUFTUkMpOwotCUk5MTVfV1JJVEUoRFNQQUJBU0UsIGRldl9wcml2LT5zYXZlRFNQQUJBU0UpOwotCUk5MTVfV1JJVEUoRFNQQVNUUklERSwgZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgewotCQlJOTE1X1dSSVRFKERTUEFTVVJGLCBkZXZfcHJpdi0+c2F2ZURTUEFTVVJGKTsKLQkJSTkxNV9XUklURShEU1BBVElMRU9GRiwgZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRik7Ci0JfQotCi0JSTkxNV9XUklURShQSVBFQUNPTkYsIGRldl9wcml2LT5zYXZlUElQRUFDT05GKTsKLQotCWk5MTVfcmVzdG9yZV9wYWxldHRlKGRldiwgUElQRV9BKTsKLQkvKiBFbmFibGUgdGhlIHBsYW5lICovCi0JSTkxNV9XUklURShEU1BBQ05UUiwgZGV2X3ByaXYtPnNhdmVEU1BBQ05UUik7Ci0JSTkxNV9XUklURShEU1BBQkFTRSwgSTkxNV9SRUFEKERTUEFCQVNFKSk7Ci0KLQkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCi0JaWYgKGRldl9wcml2LT5zYXZlRFBMTF9CICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCi0JCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKLQkJdWRlbGF5KDE1MCk7Ci0JfQotCUk5MTVfV1JJVEUoRlBCMCwgZGV2X3ByaXYtPnNhdmVGUEIwKTsKLQlJOTE1X1dSSVRFKEZQQjEsIGRldl9wcml2LT5zYXZlRlBCMSk7Ci0JLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0IsIGRldl9wcml2LT5zYXZlRFBMTF9CKTsKLQl1ZGVsYXkoMTUwKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIFJlc3RvcmUgbW9kZSAqLwotCUk5MTVfV1JJVEUoSFRPVEFMX0IsIGRldl9wcml2LT5zYXZlSFRPVEFMX0IpOwotCUk5MTVfV1JJVEUoSEJMQU5LX0IsIGRldl9wcml2LT5zYXZlSEJMQU5LX0IpOwotCUk5MTVfV1JJVEUoSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVIU1lOQ19CKTsKLQlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKLQlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKLQlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKLQotCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwotCUk5MTVfV1JJVEUoRFNQQlNJWkUsIGRldl9wcml2LT5zYXZlRFNQQlNJWkUpOwotCUk5MTVfV1JJVEUoRFNQQlBPUywgZGV2X3ByaXYtPnNhdmVEU1BCUE9TKTsKLQlJOTE1X1dSSVRFKFBJUEVCU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDKTsKLQlJOTE1X1dSSVRFKERTUEJCQVNFLCBkZXZfcHJpdi0+c2F2ZURTUEJCQVNFKTsKLQlJOTE1X1dSSVRFKERTUEJTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQlNUUklERSk7Ci0JaWYgKElTX0k5NjVHKGRldikpIHsKLQkJSTkxNV9XUklURShEU1BCU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BCU1VSRik7Ci0JCUk5MTVfV1JJVEUoRFNQQlRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYpOwotCX0KLQotCUk5MTVfV1JJVEUoUElQRUJDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORik7Ci0KLQlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7Ci0JLyogRW5hYmxlIHRoZSBwbGFuZSAqLwotCUk5MTVfV1JJVEUoRFNQQkNOVFIsIGRldl9wcml2LT5zYXZlRFNQQkNOVFIpOwotCUk5MTVfV1JJVEUoRFNQQkJBU0UsIEk5MTVfUkVBRChEU1BCQkFTRSkpOwotCi0JLyogQ1JUIHN0YXRlICovCi0JSTkxNV9XUklURShBRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOwotCi0JLyogTFZEUyBzdGF0ZSAqLwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKLQkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MKTsKLQotCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyk7Ci0JSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7Ci0JSTkxNV9XUklURShMVkRTUFBfT04sIGRldl9wcml2LT5zYXZlTFZEU1BQX09OKTsKLQlJOTE1X1dSSVRFKExWRFNQUF9PRkYsIGRldl9wcml2LT5zYXZlTFZEU1BQX09GRik7Ci0JSTkxNV9XUklURShQUF9DWUNMRSwgZGV2X3ByaXYtPnNhdmVQUF9DWUNMRSk7Ci0JSTkxNV9XUklURShQUF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wpOwotCi0JLyogRklYTUU6IHJlc3RvcmUgVFYgJiBTRFZPIHN0YXRlICovCi0KLQkvKiBGQkMgaW5mbyAqLwotCUk5MTVfV1JJVEUoRkJDX0NGQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSk7Ci0JSTkxNV9XUklURShGQkNfTExfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfTExfQkFTRSk7Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyKTsKLQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MKTsKLQotCS8qIFZHQSBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOwotCUk5MTVfV1JJVEUoVkNMS19ESVZJU09SX1ZHQTAsIGRldl9wcml2LT5zYXZlVkNMS19ESVZJU09SX1ZHQTApOwotCUk5MTVfV1JJVEUoVkNMS19ESVZJU09SX1ZHQTEsIGRldl9wcml2LT5zYXZlVkNMS19ESVZJU09SX1ZHQTEpOwotCUk5MTVfV1JJVEUoVkNMS19QT1NUX0RJViwgZGV2X3ByaXYtPnNhdmVWQ0xLX1BPU1RfRElWKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLwotCUk5MTVfV1JJVEUgKERfU1RBVEUsIGRldl9wcml2LT5zYXZlRF9TVEFURSk7Ci0JSTkxNV9XUklURSAoRFNQQ0xLX0dBVEVfRCwgZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EKTsKLQotCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KLQlJOTE1X1dSSVRFIChDQUNIRV9NT0RFXzAsIGRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wIHwgMHhmZmZmMDAwMCk7Ci0KLQkvKiBNZW1vcnkgYXJiaXRyYXRpb24gc3RhdGUgKi8KLQlJOTE1X1dSSVRFIChNSV9BUkJfU1RBVEUsIGRldl9wcml2LT5zYXZlTUlfQVJCX1NUQVRFIHwgMHhmZmZmMDAwMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlJOTE1X1dSSVRFKFNXRjAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YwW2ldKTsKLQkJSTkxNV9XUklURShTV0YxMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjFbaSs3XSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCUk5MTVfV1JJVEUoU1dGMzAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YyW2ldKTsKLQotCWk5MTVfcmVzdG9yZV92Z2EoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MSwxNyArODcsMTkgQEAKIAkgKi8KIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUkVRVUlSRV9BR1AgfCAvKiBEUklWRVJfVVNFX01UUlIgfCovCi0JICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwgfAotCSAgICBEUklWRVJfSVJRX1ZCTDIsCisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0dFTSwKIAkubG9hZCA9IGk5MTVfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IGk5MTVfZHJpdmVyX3VubG9hZCwKKwkub3BlbiA9IGk5MTVfZHJpdmVyX29wZW4sCiAJLmxhc3RjbG9zZSA9IGk5MTVfZHJpdmVyX2xhc3RjbG9zZSwKIAkucHJlY2xvc2UgPSBpOTE1X2RyaXZlcl9wcmVjbG9zZSwKKwkucG9zdGNsb3NlID0gaTkxNV9kcml2ZXJfcG9zdGNsb3NlLAogCS5zdXNwZW5kID0gaTkxNV9zdXNwZW5kLAogCS5yZXN1bWUgPSBpOTE1X3Jlc3VtZSwKIAkuZGV2aWNlX2lzX2FncCA9IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3AsCi0JLnZibGFua193YWl0ID0gaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQsCi0JLnZibGFua193YWl0MiA9IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MiwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBpOTE1X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaTkxNV9kaXNhYmxlX3ZibGFuaywKIAkuaXJxX3ByZWluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfcHJlaW5zdGFsbCwKIAkuaXJxX3Bvc3RpbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbCwKQEAgLTU1OSw2ICsxMDcsMTAgQEAKIAkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAogCS5nZXRfbWFwX29mcyA9IGRybV9jb3JlX2dldF9tYXBfb2ZzLAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAorCS5wcm9jX2luaXQgPSBpOTE1X2dlbV9wcm9jX2luaXQsCisJLnByb2NfY2xlYW51cCA9IGk5MTVfZ2VtX3Byb2NfY2xlYW51cCwKKwkuZ2VtX2luaXRfb2JqZWN0ID0gaTkxNV9nZW1faW5pdF9vYmplY3QsCisJLmdlbV9mcmVlX29iamVjdCA9IGk5MTVfZ2VtX2ZyZWVfb2JqZWN0LAogCS5pb2N0bHMgPSBpOTE1X2lvY3RscywKIAkuZm9wcyA9IHsKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZDczMjZkOS4uZjIwZmZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0zMCw2ICszMCw4IEBACiAjaWZuZGVmIF9JOTE1X0RSVl9IXwogI2RlZmluZSBfSTkxNV9EUlZfSF8KIAorI2luY2x1ZGUgImk5MTVfcmVnLmgiCisKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwogCkBAIC0zNyw3ICszOSwxMiBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkiaTkxNSIKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJJbnRlbCBHcmFwaGljcyIKLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA2MDExOSIKKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA4MDczMCIKKworZW51bSBwaXBlIHsKKwlQSVBFX0EgPSAwLAorCVBJUEVfQiwKK307CiAKIC8qIEludGVyZmFjZSBoaXN0b3J5OgogICoKQEAgLTUzLDE2ICs2MCwyMyBAQAogI2RlZmluZSBEUklWRVJfTUlOT1IJCTYKICNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAogCisjZGVmaW5lIFdBVENIX0NPSEVSRU5DWQkwCisjZGVmaW5lIFdBVENIX0JVRgkwCisjZGVmaW5lIFdBVENIX0VYRUMJMAorI2RlZmluZSBXQVRDSF9MUlUJMAorI2RlZmluZSBXQVRDSF9SRUxPQwkwCisjZGVmaW5lIFdBVENIX0lOQUNUSVZFCTAKKyNkZWZpbmUgV0FUQ0hfUFdSSVRFCTAKKwogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3JpbmdfYnVmZmVyIHsKIAlpbnQgdGFpbF9tYXNrOwotCXVuc2lnbmVkIGxvbmcgU3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBFbmQ7CiAJdW5zaWduZWQgbG9uZyBTaXplOwogCXU4ICp2aXJ0dWFsX3N0YXJ0OwogCWludCBoZWFkOwogCWludCB0YWlsOwogCWludCBzcGFjZTsKIAlkcm1fbG9jYWxfbWFwX3QgbWFwOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcmluZ19vYmo7CiB9IGRybV9pOTE1X3JpbmdfYnVmZmVyX3Q7CiAKIHN0cnVjdCBtZW1fYmxvY2sgewpAQCAtODAsOSArOTQsMjQgQEAKIAl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CiB9IGRybV9pOTE1X3ZibF9zd2FwX3Q7CiAKK3N0cnVjdCBvcHJlZ2lvbl9oZWFkZXI7CitzdHJ1Y3Qgb3ByZWdpb25fYWNwaTsKK3N0cnVjdCBvcHJlZ2lvbl9zd3NjaTsKK3N0cnVjdCBvcHJlZ2lvbl9hc2xlOworCitzdHJ1Y3QgaW50ZWxfb3ByZWdpb24geworCXN0cnVjdCBvcHJlZ2lvbl9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3Qgb3ByZWdpb25fYWNwaSAqYWNwaTsKKwlzdHJ1Y3Qgb3ByZWdpb25fc3dzY2kgKnN3c2NpOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlOworCWludCBlbmFibGVkOworfTsKKwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCXZvaWQgX19pb21lbSAqcmVnczsKIAlkcm1fbG9jYWxfbWFwX3QgKnNhcmVhOwotCWRybV9sb2NhbF9tYXBfdCAqbW1pb19tYXA7CiAKIAlkcm1faTkxNV9zYXJlYV90ICpzYXJlYV9wcml2OwogCWRybV9pOTE1X3JpbmdfYnVmZmVyX3QgcmluZzsKQEAgLTkwLDIwICsxMTksMjUgQEAKIAlkcm1fZG1hX2hhbmRsZV90ICpzdGF0dXNfcGFnZV9kbWFoOwogCXZvaWQgKmh3X3N0YXR1c19wYWdlOwogCWRtYV9hZGRyX3QgZG1hX3N0YXR1c19wYWdlOwotCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKKwl1aW50MzJfdCBjb3VudGVyOwogCXVuc2lnbmVkIGludCBzdGF0dXNfZ2Z4X2FkZHI7CiAJZHJtX2xvY2FsX21hcF90IGh3c19tYXA7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpod3Nfb2JqOwogCiAJdW5zaWduZWQgaW50IGNwcDsKIAlpbnQgYmFja19vZmZzZXQ7CiAJaW50IGZyb250X29mZnNldDsKIAlpbnQgY3VycmVudF9wYWdlOwogCWludCBwYWdlX2ZsaXBwaW5nOwotCWludCB1c2VfbWlfYmF0Y2hidWZmZXJfc3RhcnQ7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVldWU7CiAJYXRvbWljX3QgaXJxX3JlY2VpdmVkOwotCWF0b21pY190IGlycV9lbWl0dGVkOworCS8qKiBQcm90ZWN0cyB1c2VyX2lycV9yZWZjb3VudCBhbmQgaXJxX21hc2tfcmVnICovCisJc3BpbmxvY2tfdCB1c2VyX2lycV9sb2NrOworCS8qKiBSZWZjb3VudCBmb3IgaTkxNV91c2VyX2lycV9nZXQoKSB2ZXJzdXMgaTkxNV91c2VyX2lycV9wdXQoKS4gKi8KKwlpbnQgdXNlcl9pcnFfcmVmY291bnQ7CisJLyoqIENhY2hlZCB2YWx1ZSBvZiBJTVIgdG8gYXZvaWQgcmVhZHMgaW4gdXBkYXRpbmcgdGhlIGJpdGZpZWxkICovCisJdTMyIGlycV9tYXNrX3JlZzsKIAogCWludCB0ZXhfbHJ1X2xvZ19ncmFudWxhcml0eTsKIAlpbnQgYWxsb3dfYmF0Y2hidWZmZXI7CkBAIC0xMTUsNiArMTQ5LDggQEAKIAlkcm1faTkxNV92Ymxfc3dhcF90IHZibF9zd2FwczsKIAl1bnNpZ25lZCBpbnQgc3dhcHNfcGVuZGluZzsKIAorCXN0cnVjdCBpbnRlbF9vcHJlZ2lvbiBvcHJlZ2lvbjsKKwogCS8qIFJlZ2lzdGVyIHN0YXRlICovCiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwpAQCAtMTM5LDcgKzE3NSw3IEBACiAJdTMyIHNhdmVEU1BBU1RSSURFOwogCXUzMiBzYXZlRFNQQVNJWkU7CiAJdTMyIHNhdmVEU1BBUE9TOwotCXUzMiBzYXZlRFNQQUJBU0U7CisJdTMyIHNhdmVEU1BBQUREUjsKIAl1MzIgc2F2ZURTUEFTVVJGOwogCXUzMiBzYXZlRFNQQVRJTEVPRkY7CiAJdTMyIHNhdmVQRklUX1BHTV9SQVRJT1M7CkBAIC0xNjAsMjQgKzE5NiwyNCBAQAogCXUzMiBzYXZlRFNQQlNUUklERTsKIAl1MzIgc2F2ZURTUEJTSVpFOwogCXUzMiBzYXZlRFNQQlBPUzsKLQl1MzIgc2F2ZURTUEJCQVNFOworCXUzMiBzYXZlRFNQQkFERFI7CiAJdTMyIHNhdmVEU1BCU1VSRjsKIAl1MzIgc2F2ZURTUEJUSUxFT0ZGOwotCXUzMiBzYXZlVkNMS19ESVZJU09SX1ZHQTA7Ci0JdTMyIHNhdmVWQ0xLX0RJVklTT1JfVkdBMTsKLQl1MzIgc2F2ZVZDTEtfUE9TVF9ESVY7CisJdTMyIHNhdmVWR0EwOworCXUzMiBzYXZlVkdBMTsKKwl1MzIgc2F2ZVZHQV9QRDsKIAl1MzIgc2F2ZVZHQUNOVFJMOwogCXUzMiBzYXZlQURQQTsKIAl1MzIgc2F2ZUxWRFM7Ci0JdTMyIHNhdmVMVkRTUFBfT047Ci0JdTMyIHNhdmVMVkRTUFBfT0ZGOworCXUzMiBzYXZlUFBfT05fREVMQVlTOworCXUzMiBzYXZlUFBfT0ZGX0RFTEFZUzsKIAl1MzIgc2F2ZURWT0E7CiAJdTMyIHNhdmVEVk9COwogCXUzMiBzYXZlRFZPQzsKIAl1MzIgc2F2ZVBQX09OOwogCXUzMiBzYXZlUFBfT0ZGOwogCXUzMiBzYXZlUFBfQ09OVFJPTDsKLQl1MzIgc2F2ZVBQX0NZQ0xFOworCXUzMiBzYXZlUFBfRElWSVNPUjsKIAl1MzIgc2F2ZVBGSVRfQ09OVFJPTDsKIAl1MzIgc2F2ZV9wYWxldHRlX2FbMjU2XTsKIAl1MzIgc2F2ZV9wYWxldHRlX2JbMjU2XTsKQEAgLTE5MCw3ICsyMjYsNyBAQAogCXUzMiBzYXZlSU1SOwogCXUzMiBzYXZlQ0FDSEVfTU9ERV8wOwogCXUzMiBzYXZlRF9TVEFURTsKLQl1MzIgc2F2ZURTUENMS19HQVRFX0Q7CisJdTMyIHNhdmVDR18yRF9ESVM7CiAJdTMyIHNhdmVNSV9BUkJfU1RBVEU7CiAJdTMyIHNhdmVTV0YwWzE2XTsKIAl1MzIgc2F2ZVNXRjFbMTZdOwpAQCAtMjAzLDggKzIzOSwxODAgQEAKIAl1OCBzYXZlREFDTUFTSzsKIAl1OCBzYXZlREFDREFUQVsyNTYqM107IC8qIDI1NiAzLWJ5dGUgY29sb3JzICovCiAJdTggc2F2ZUNSWzM3XTsKKworCS8qKiBXb3JrIHRhc2sgZm9yIHZibGFuay1yZWxhdGVkIHJpbmcgYWNjZXNzICovCisJc3RydWN0IHdvcmtfc3RydWN0IHZibGFua193b3JrOworCisJc3RydWN0IHsKKwkJc3RydWN0IGRybV9tbSBndHRfc3BhY2U7CisKKwkJLyoqCisJCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgaW52b2x2ZWQgaW4gcmVuZGVyaW5nIGZyb20gdGhlCisJCSAqIHJpbmdidWZmZXIuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBidXQgd2hpY2gKKwkJICogc3RpbGwgaGF2ZSBhIHdyaXRlX2RvbWFpbiB3aGljaCBuZWVkcyB0byBiZSBmbHVzaGVkIGJlZm9yZQorCQkgKiB1bmJpbmRpbmcuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZsdXNoaW5nX2xpc3Q7CisKKwkJLyoqCisJCSAqIExSVSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBhbmQKKwkJICogYXJlIHJlYWR5IHRvIHVuYmluZCwgYnV0IGFyZSBzdGlsbCBpbiB0aGUgR1RULgorCQkgKgorCQkgKiBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBvbiB0aGUgYnVmZmVyIHdoaWxlIG9uIHRoaXMgbGlzdCwKKwkJICogYXMgbWVyZWx5IGJlaW5nIEdUVC1ib3VuZCBzaG91bGRuJ3QgcHJldmVudCBpdHMgYmVpbmcKKwkJICogZnJlZWQsIGFuZCB3ZSdsbCBwdWxsIGl0IG9mZiB0aGUgbGlzdCBpbiB0aGUgZnJlZSBwYXRoLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIGJyZWFkY3J1bWJzIGFzc29jaWF0ZWQgd2l0aCBHUFUgcmVxdWVzdHMgY3VycmVudGx5CisJCSAqIG91dHN0YW5kaW5nLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0X2xpc3Q7CisKKwkJLyoqCisJCSAqIFdlIGxlYXZlIHRoZSB1c2VyIElSUSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKwkJICogYnV0IHRoaXMgbWVhbnMgdGhhdCByZXF1ZXN0cyB3aWxsIGZpbmlzaCBhbmQgbmV2ZXIKKwkJICogYmUgcmV0aXJlZCBvbmNlIHRoZSBzeXN0ZW0gZ29lcyBpZGxlLiBTZXQgYSB0aW1lciB0bworCQkgKiBmaXJlIHBlcmlvZGljYWxseSB3aGlsZSB0aGUgcmluZyBpcyBydW5uaW5nLiBXaGVuIGl0CisJCSAqIGZpcmVzLCBnbyByZXRpcmUgcmVxdWVzdHMuCisJCSAqLworCQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJldGlyZV93b3JrOworCisJCXVpbnQzMl90IG5leHRfZ2VtX3NlcW5vOworCisJCS8qKgorCQkgKiBXYWl0aW5nIHNlcXVlbmNlIG51bWJlciwgaWYgYW55CisJCSAqLworCQl1aW50MzJfdCB3YWl0aW5nX2dlbV9zZXFubzsKKworCQkvKioKKwkJICogTGFzdCBzZXEgc2VlbiBhdCBpcnEgdGltZQorCQkgKi8KKwkJdWludDMyX3QgaXJxX2dlbV9zZXFubzsKKworCQkvKioKKwkJICogRmxhZyBpZiB0aGUgWCBTZXJ2ZXIsIGFuZCB0aHVzIERSTSwgaXMgbm90IGN1cnJlbnRseSBpbgorCQkgKiBjb250cm9sIG9mIHRoZSBkZXZpY2UuCisJCSAqCisJCSAqIFRoaXMgaXMgc2V0IGJldHdlZW4gTGVhdmVWVCBhbmQgRW50ZXJWVC4gIEl0IG5lZWRzIHRvIGJlCisJCSAqIHJlcGxhY2VkIHdpdGggYSBzZW1hcGhvcmUuICBJdCBhbHNvIG5lZWRzIHRvIGJlCisJCSAqIHRyYW5zaXRpb25lZCBhd2F5IGZyb20gZm9yIGtlcm5lbCBtb2Rlc2V0dGluZy4KKwkJICovCisJCWludCBzdXNwZW5kZWQ7CisKKwkJLyoqCisJCSAqIEZsYWcgaWYgdGhlIGhhcmR3YXJlIGFwcGVhcnMgdG8gYmUgd2VkZ2VkLgorCQkgKgorCQkgKiBUaGlzIGlzIHNldCB3aGVuIGF0dGVtcHRzIHRvIGlkbGUgdGhlIGRldmljZSB0aW1lb3V0LgorCQkgKiBJdCBwcmV2ZW50cyBjb21tYW5kIHN1Ym1pc3Npb24gZnJvbSBvY2N1cmluZyBhbmQgbWFrZXMKKwkJICogZXZlcnkgcGVuZGluZyByZXF1ZXN0IGZhaWwKKwkJICovCisJCWludCB3ZWRnZWQ7CisKKwkJLyoqIEJpdCA2IHN3aXp6bGluZyByZXF1aXJlZCBmb3IgWCB0aWxpbmcgKi8KKwkJdWludDMyX3QgYml0XzZfc3dpenpsZV94OworCQkvKiogQml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBZIHRpbGluZyAqLworCQl1aW50MzJfdCBiaXRfNl9zd2l6emxlX3k7CisJfSBtbTsKIH0gZHJtX2k5MTVfcHJpdmF0ZV90OwogCisvKiogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlIGF0dGFjaGVkIHRvIGVhY2ggZHJtX2dlbV9vYmplY3QgKi8KK3N0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCS8qKiBDdXJyZW50IHNwYWNlIGFsbG9jYXRlZCB0byB0aGlzIG9iamVjdCBpbiB0aGUgR1RULCBpZiBhbnkuICovCisJc3RydWN0IGRybV9tbV9ub2RlICpndHRfc3BhY2U7CisKKwkvKiogVGhpcyBvYmplY3QncyBwbGFjZSBvbiB0aGUgYWN0aXZlL2ZsdXNoaW5nL2luYWN0aXZlIGxpc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyoqCisJICogVGhpcyBpcyBzZXQgaWYgdGhlIG9iamVjdCBpcyBvbiB0aGUgYWN0aXZlIG9yIGZsdXNoaW5nIGxpc3RzCisJICogKGhhcyBwZW5kaW5nIHJlbmRlcmluZyksIGFuZCBpcyBub3Qgc2V0IGlmIGl0J3Mgb24gaW5hY3RpdmUgKHJlYWR5CisJICogdG8gYmUgdW5ib3VuZCkuCisJICovCisJaW50IGFjdGl2ZTsKKworCS8qKgorCSAqIFRoaXMgaXMgc2V0IGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBsYXN0IGJvdW5kCisJICogdG8gdGhlIEdUVAorCSAqLworCWludCBkaXJ0eTsKKworCS8qKiBBR1AgbWVtb3J5IHN0cnVjdHVyZSBmb3Igb3VyIEdUVCBiaW5kaW5nLiAqLworCURSTV9BR1BfTUVNICphZ3BfbWVtOworCisJc3RydWN0IHBhZ2UgKipwYWdlX2xpc3Q7CisKKwkvKioKKwkgKiBDdXJyZW50IG9mZnNldCBvZiB0aGUgb2JqZWN0IGluIEdUVCBzcGFjZS4KKwkgKgorCSAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgZ3R0X3NwYWNlLT5zdGFydAorCSAqLworCXVpbnQzMl90IGd0dF9vZmZzZXQ7CisKKwkvKiogQm9vbGVhbiB3aGV0aGVyIHRoaXMgb2JqZWN0IGhhcyBhIHZhbGlkIGd0dCBvZmZzZXQuICovCisJaW50IGd0dF9ib3VuZDsKKworCS8qKiBIb3cgbWFueSB1c2VycyBoYXZlIHBpbm5lZCB0aGlzIG9iamVjdCBpbiBHVFQgc3BhY2UgKi8KKwlpbnQgcGluX2NvdW50OworCisJLyoqIEJyZWFkY3J1bWIgb2YgbGFzdCByZW5kZXJpbmcgdG8gdGhlIGJ1ZmZlci4gKi8KKwl1aW50MzJfdCBsYXN0X3JlbmRlcmluZ19zZXFubzsKKworCS8qKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0LiAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqIEFHUCBtYXBwaW5nIHR5cGUgKEFHUF9VU0VSX01FTU9SWSBvciBBR1BfVVNFUl9DQUNIRURfTUVNT1JZICovCisJdWludDMyX3QgYWdwX3R5cGU7CisKKwkvKioKKwkgKiBGbGFnZ2luZyBvZiB3aGljaCBpbmRpdmlkdWFsIHBhZ2VzIGFyZSB2YWxpZCBpbiBHRU1fRE9NQUlOX0NQVSB3aGVuCisJICogR0VNX0RPTUFJTl9DUFUgaXMgbm90IGluIHRoZSBvYmplY3QncyByZWFkIGRvbWFpbi4KKwkgKi8KKwl1aW50OF90ICpwYWdlX2NwdV92YWxpZDsKK307CisKKy8qKgorICogUmVxdWVzdCBxdWV1ZSBzdHJ1Y3R1cmUuCisgKgorICogVGhlIHJlcXVlc3QgcXVldWUgYWxsb3dzIHVzIHRvIG5vdGUgc2VxdWVuY2UgbnVtYmVycyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkCisgKiBhbmQgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhY3RpdmUgYnVmZmVycyB0byBiZSByZXRpcmVkLgorICoKKyAqIEJ5IGtlZXBpbmcgdGhpcyBsaXN0LCB3ZSBjYW4gYXZvaWQgaGF2aW5nIHRvIGRvIHF1ZXN0aW9uYWJsZQorICogc2VxdWVuY2UtbnVtYmVyIGNvbXBhcmlzb25zIG9uIGJ1ZmZlciBsYXN0X3JlbmRlcmluZ19zZXFub3MsIGFuZCBhc3NvY2lhdGUKKyAqIGFuIGVtaXNzaW9uIHRpbWUgd2l0aCBzZXFub3MgZm9yIHRyYWNraW5nIGhvdyBmYXIgYWhlYWQgb2YgdGhlIEdQVSB3ZSBhcmUuCisgKi8KK3N0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCB7CisJLyoqIEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdC4gKi8KKwl1aW50MzJfdCBzZXFubzsKKworCS8qKiBUaW1lIGF0IHdoaWNoIHRoaXMgcmVxdWVzdCB3YXMgZW1pdHRlZCwgaW4gamlmZmllcy4gKi8KKwl1bnNpZ25lZCBsb25nIGVtaXR0ZWRfamlmZmllczsKKworCS8qKiBDYWNoZSBkb21haW5zIHRoYXQgd2VyZSBmbHVzaGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdC4gKi8KKwl1aW50MzJfdCBmbHVzaF9kb21haW5zOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSB7CisJc3RydWN0IHsKKwkJdWludDMyX3QgbGFzdF9nZW1fc2Vxbm87CisJCXVpbnQzMl90IGxhc3RfZ2VtX3Rocm90dGxlX3NlcW5vOworCX0gbW07Cit9OworCiBleHRlcm4gc3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVfaW9jdGxzW107CiBleHRlcm4gaW50IGk5MTVfbWF4X2lvY3RsOwogCkBAIC0yMTIsMzEgKzQyMCw0MiBAQAogZXh0ZXJuIHZvaWQgaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGV4dGVybiBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIGludCBpOTE1X2RyaXZlcl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV9kcml2ZXJfZGV2aWNlX2lzX2FncChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gbG9uZyBpOTE1X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgaTkxNV9lbWl0X2JveChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMsCisJCQkgaW50IGksIGludCBEUjEsIGludCBEUjQpOwogCiAvKiBpOTE1X2lycS5jICovCiBleHRlcm4gaW50IGk5MTVfaXJxX2VtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGk5MTVfaXJxX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2b2lkIGk5MTVfdXNlcl9pcnFfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAotZXh0ZXJuIGludCBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLWV4dGVybiBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOworZXh0ZXJuIHZvaWQgaTkxNV92Ymxhbmtfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBleHRlcm4gaXJxcmV0dXJuX3QgaTkxNV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19waXBlX3NldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV92YmxhbmtfcGlwZV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGk5MTVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCBpOTE1X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgaTkxNV9lbmFibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKTsKIAogLyogaTkxNV9tZW0uYyAqLwogZXh0ZXJuIGludCBpOTE1X21lbV9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtMjUwLDExICs0NjksOTkgQEAKIGV4dGVybiB2b2lkIGk5MTVfbWVtX3Rha2Vkb3duKHN0cnVjdCBtZW1fYmxvY2sgKipoZWFwKTsKIGV4dGVybiB2b2lkIGk5MTVfbWVtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCiAJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKTsKKy8qIGk5MTVfZ2VtLmMgKi8KK2ludCBpOTE1X2dlbV9pbml0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9wcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX21tYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fcGluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fdW5waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3Rocm90dGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2VudGVydnRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9sZWF2ZXZ0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2dldF90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3ZvaWQgaTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBpOTE1X2dlbV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwordm9pZCBpOTE1X2dlbV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworaW50IGk5MTVfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworaW50IGk5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCk7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGk5MTVfZ2VtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3VpbnQzMl90IGk5MTVfZ2V0X2dlbV9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIAotI2RlZmluZSBJOTE1X1JFQUQocmVnKSAgICAgICAgICBEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvX21hcCwgKHJlZykpCi0jZGVmaW5lIEk5MTVfV1JJVEUocmVnLHZhbCkgICAgIERSTV9XUklURTMyKGRldl9wcml2LT5tbWlvX21hcCwgKHJlZyksICh2YWwpKQotI2RlZmluZSBJOTE1X1JFQUQxNihyZWcpCURSTV9SRUFEMTYoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSkKLSNkZWZpbmUgSTkxNV9XUklURTE2KHJlZyx2YWwpCURSTV9XUklURTE2KGRldl9wcml2LT5tbWlvX21hcCwgKHJlZyksICh2YWwpKQorLyogaTkxNV9nZW1fdGlsaW5nLmMgKi8KK3ZvaWQgaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKy8qIGk5MTVfZ2VtX2RlYnVnLmMgKi8KK3ZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCisJCQkgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKTsKKyNpZiBXQVRDSF9JTkFDVElWRQordm9pZCBpOTE1X3ZlcmlmeV9pbmFjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CisjZWxzZQorI2RlZmluZSBpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIGZpbGUsIGxpbmUpCisjZW5kaWYKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X2NoZWNrX2NvaGVyZW5jeShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGhhbmRsZSk7Cit2b2lkIGk5MTVfZ2VtX2R1bXBfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLAorCQkJICBjb25zdCBjaGFyICp3aGVyZSwgdWludDMyX3QgbWFyayk7Cit2b2lkIGk5MTVfZHVtcF9scnUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqd2hlcmUpOworCisvKiBpOTE1X3N1c3BlbmQuYyAqLworZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9zdXNwZW5kLmMgKi8KK2V4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKy8qIGk5MTVfb3ByZWdpb24uYyAqLworZXh0ZXJuIGludCBpbnRlbF9vcHJlZ2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaW50ZWxfb3ByZWdpb25fZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9wcmVnaW9uX2FzbGVfaW50cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9wcmVnaW9uX2VuYWJsZV9hc2xlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKioKKyAqIExvY2sgdGVzdCBmb3Igd2hlbiBpdCdzIGp1c3QgZm9yIHN5bmNocm9uaXphdGlvbiBvZiByaW5nIGFjY2Vzcy4KKyAqCisgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgd2hlbiBHRU0gaXMgaW5pdGlhbGl6ZWQgYXMgbm9ib2R5IGVsc2UKKyAqIGhhcyBhY2Nlc3MgdG8gdGhlIHJpbmcuCisgKi8KKyNkZWZpbmUgUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpIGRvIHsJCQlcCisJaWYgKCgoZHJtX2k5MTVfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZSktPnJpbmcucmluZ19vYmogPT0gTlVMTCkgXAorCQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSTkxNV9SRUFEKHJlZykgICAgICAgICAgcmVhZGwoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURShyZWcsIHZhbCkgICAgIHdyaXRlbCh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykJcmVhZHcoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURTE2KHJlZywgdmFsKQl3cml0ZWwodmFsLCBkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1JFQUQ4KHJlZykJCXJlYWRiKGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfV1JJVEU4KHJlZywgdmFsKQl3cml0ZWIodmFsLCBkZXZfcHJpdi0+cmVncyArIChyZWcpKQogCiAjZGVmaW5lIEk5MTVfVkVSQk9TRSAwCiAKQEAgLTI4NCw4MTYgKzU5MSwyOSBAQAogCWlmIChJOTE1X1ZFUkJPU0UpIERSTV9ERUJVRygiQURWQU5DRV9MUF9SSU5HICV4XG4iLCBvdXRyaW5nKTsJXAogCWRldl9wcml2LT5yaW5nLnRhaWwgPSBvdXRyaW5nOwkJCQkJXAogCWRldl9wcml2LT5yaW5nLnNwYWNlIC09IG91dGNvdW50ICogNDsJCQkJXAotCUk5MTVfV1JJVEUoTFBfUklORyArIFJJTkdfVEFJTCwgb3V0cmluZyk7CQkJXAorCUk5MTVfV1JJVEUoUFJCMF9UQUlMLCBvdXRyaW5nKTsJCQlcCiB9IHdoaWxlKDApCiAKLWV4dGVybiBpbnQgaTkxNV93YWl0X3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwotCi0vKiBFeHRlbmRlZCBjb25maWcgc3BhY2UgKi8KLSNkZWZpbmUgTEJCIDB4ZjQKLQotLyogVkdBIHN0dWZmICovCi0KLSNkZWZpbmUgVkdBX1NUMDFfTURBIDB4M2JhCi0jZGVmaW5lIFZHQV9TVDAxX0NHQSAweDNkYQotCi0jZGVmaW5lIFZHQV9NU1JfV1JJVEUgMHgzYzIKLSNkZWZpbmUgVkdBX01TUl9SRUFEIDB4M2NjCi0jZGVmaW5lICAgVkdBX01TUl9NRU1fRU4gKDE8PDEpCi0jZGVmaW5lICAgVkdBX01TUl9DR0FfTU9ERSAoMTw8MCkKLQotI2RlZmluZSBWR0FfU1JfSU5ERVggMHgzYzQKLSNkZWZpbmUgVkdBX1NSX0RBVEEgMHgzYzUKLQotI2RlZmluZSBWR0FfQVJfSU5ERVggMHgzYzAKLSNkZWZpbmUgICBWR0FfQVJfVklEX0VOICgxPDw1KQotI2RlZmluZSBWR0FfQVJfREFUQV9XUklURSAweDNjMAotI2RlZmluZSBWR0FfQVJfREFUQV9SRUFEIDB4M2MxCi0KLSNkZWZpbmUgVkdBX0dSX0lOREVYIDB4M2NlCi0jZGVmaW5lIFZHQV9HUl9EQVRBIDB4M2NmCi0vKiBHUjA1ICovCi0jZGVmaW5lICAgVkdBX0dSX01FTV9SRUFEX01PREVfU0hJRlQgMwotI2RlZmluZSAgICAgVkdBX0dSX01FTV9SRUFEX01PREVfUExBTkUgMQotLyogR1IwNiAqLwotI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9NQVNLIDB4YwotI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9TSElGVCAyCi0jZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9BRkZGRiAwCi0jZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9CRkZGRiAxCi0jZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CN0ZGRiAyCi0jZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CRkZGRiAzCi0KLSNkZWZpbmUgVkdBX0RBQ01BU0sgMHgzYzYKLSNkZWZpbmUgVkdBX0RBQ1JYIDB4M2M3Ci0jZGVmaW5lIFZHQV9EQUNXWCAweDNjOAotI2RlZmluZSBWR0FfREFDREFUQSAweDNjOQotCi0jZGVmaW5lIFZHQV9DUl9JTkRFWF9NREEgMHgzYjQKLSNkZWZpbmUgVkdBX0NSX0RBVEFfTURBIDB4M2I1Ci0jZGVmaW5lIFZHQV9DUl9JTkRFWF9DR0EgMHgzZDQKLSNkZWZpbmUgVkdBX0NSX0RBVEFfQ0dBIDB4M2Q1Ci0KLSNkZWZpbmUgR0ZYX09QX1VTRVJfSU5URVJSVVBUCQkoKDA8PDI5KXwoMjw8MjMpKQotI2RlZmluZSBHRlhfT1BfQlJFQUtQT0lOVF9JTlRFUlJVUFQJKCgwPDwyOSl8KDE8PDIzKSkKLSNkZWZpbmUgQ01EX1JFUE9SVF9IRUFECQkJKDc8PDIzKQotI2RlZmluZSBDTURfU1RPUkVfRFdPUkRfSURYCQkoKDB4MjE8PDIzKSB8IDB4MSkKLSNkZWZpbmUgQ01EX09QX0JBVENIX0JVRkZFUiAgKCgweDA8PDI5KXwoMHgzMDw8MjMpfDB4MSkKLQotI2RlZmluZSBJTlNUX1BBUlNFUl9DTElFTlQgICAweDAwMDAwMDAwCi0jZGVmaW5lIElOU1RfT1BfRkxVU0ggICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgSU5TVF9GTFVTSF9NQVBfQ0FDSEUgMHgwMDAwMDAwMQotCi0jZGVmaW5lIEJCMV9TVEFSVF9BRERSX01BU0sgICAofjB4NykKLSNkZWZpbmUgQkIxX1BST1RFQ1RFRCAgICAgICAgICgxPDwwKQotI2RlZmluZSBCQjFfVU5QUk9URUNURUQgICAgICAgKDA8PDApCi0jZGVmaW5lIEJCMl9FTkRfQUREUl9NQVNLICAgICAofjB4NykKLQotLyogRnJhbWVidWZmZXIgY29tcHJlc3Npb24gKi8KLSNkZWZpbmUgRkJDX0NGQl9CQVNFCQkweDAzMjAwIC8qIDRrIHBhZ2UgYWxpZ25lZCAqLwotI2RlZmluZSBGQkNfTExfQkFTRQkJMHgwMzIwNCAvKiA0ayBwYWdlIGFsaWduZWQgKi8KLSNkZWZpbmUgRkJDX0NPTlRST0wJCTB4MDMyMDgKLSNkZWZpbmUgICBGQkNfQ1RMX0VOCQkoMTw8MzEpCi0jZGVmaW5lICAgRkJDX0NUTF9QRVJJT0RJQwkoMTw8MzApCi0jZGVmaW5lICAgRkJDX0NUTF9JTlRFUlZBTF9TSElGVCAoMTYpCi0jZGVmaW5lICAgRkJDX0NUTF9VTkNPTVBSRVNTSUJMRSAoMTw8MTQpCi0jZGVmaW5lICAgRkJDX0NUTF9TVFJJREVfU0hJRlQJKDUpCi0jZGVmaW5lICAgRkJDX0NUTF9GRU5DRU5PCSgxPDwwKQotI2RlZmluZSBGQkNfQ09NTUFORAkJMHgwMzIwYwotI2RlZmluZSAgIEZCQ19DTURfQ09NUFJFU1MJKDE8PDApCi0jZGVmaW5lIEZCQ19TVEFUVVMJCTB4MDMyMTAKLSNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0lORwkoMTw8MzEpCi0jZGVmaW5lICAgRkJDX1NUQVRfQ09NUFJFU1NFRAkoMTw8MzApCi0jZGVmaW5lICAgRkJDX1NUQVRfTU9ESUZJRUQJKDE8PDI5KQotI2RlZmluZSAgIEZCQ19TVEFUX0NVUlJFTlRfTElORQkoMTw8MCkKLSNkZWZpbmUgRkJDX0NPTlRST0wyCQkweDAzMjE0Ci0jZGVmaW5lICAgRkJDX0NUTF9GRU5DRV9EQkwJKDA8PDQpCi0jZGVmaW5lICAgRkJDX0NUTF9JRExFX0lNTQkoMDw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfRlVMTAkoMTw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfTElORQkoMjw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfREVCVUcJKDM8PDIpCi0jZGVmaW5lICAgRkJDX0NUTF9DUFVfRkVOQ0UJKDE8PDEpCi0jZGVmaW5lICAgRkJDX0NUTF9QTEFORUEJKDA8PDApCi0jZGVmaW5lICAgRkJDX0NUTF9QTEFORUIJKDE8PDApCi0jZGVmaW5lIEZCQ19GRU5DRV9PRkYJCTB4MDMyMWIKLQotI2RlZmluZSBGQkNfTExfU0laRQkJKDE1MzYpCi0jZGVmaW5lIEZCQ19MTF9QQUQJCSgzMikKLQotLyogSW50ZXJydXB0IGJpdHM6Ci0gKi8KLSNkZWZpbmUgVVNFUl9JTlRfRkxBRyAgICAoMTw8MSkKLSNkZWZpbmUgVlNZTkNfUElQRUJfRkxBRyAoMTw8NSkKLSNkZWZpbmUgVlNZTkNfUElQRUFfRkxBRyAoMTw8NykKLSNkZWZpbmUgSFdCX09PTV9GTEFHICAgICAoMTw8MTMpIC8qIGJpbm5lciBvdXQgb2YgbWVtb3J5ICovCi0KLSNkZWZpbmUgSTkxNVJFR19IV1NUQU0JCTB4MDIwOTgKLSNkZWZpbmUgSTkxNVJFR19JTlRfSURFTlRJVFlfUgkweDAyMGE0Ci0jZGVmaW5lIEk5MTVSRUdfSU5UX01BU0tfUgkweDAyMGE4Ci0jZGVmaW5lIEk5MTVSRUdfSU5UX0VOQUJMRV9SCTB4MDIwYTAKLQotI2RlZmluZSBJOTE1UkVHX1BJUEVBU1RBVAkweDcwMDI0Ci0jZGVmaW5lIEk5MTVSRUdfUElQRUJTVEFUCTB4NzEwMjQKLQotI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE3KQotI2RlZmluZSBJOTE1X1ZCTEFOS19DTEVBUgkJKDFVTDw8MSkKLQotI2RlZmluZSBTUlhfSU5ERVgJCTB4M2M0Ci0jZGVmaW5lIFNSWF9EQVRBCQkweDNjNQotI2RlZmluZSBTUjAxCQkJMQotI2RlZmluZSBTUjAxX1NDUkVFTl9PRkYJCSgxPDw1KQotCi0jZGVmaW5lIFBQQ1IJCQkweDYxMjA0Ci0jZGVmaW5lIFBQQ1JfT04JCQkoMTw8MCkKLQotI2RlZmluZSBEVk9CCQkJMHg2MTE0MAotI2RlZmluZSBEVk9CX09OCQkJKDE8PDMxKQotI2RlZmluZSBEVk9DCQkJMHg2MTE2MAotI2RlZmluZSBEVk9DX09OCQkJKDE8PDMxKQotI2RlZmluZSBMVkRTCQkJMHg2MTE4MAotI2RlZmluZSBMVkRTX09OCQkJKDE8PDMxKQotCi0jZGVmaW5lIEFEUEEJCQkweDYxMTAwCi0jZGVmaW5lIEFEUEFfRFBNU19NQVNLCQkofigzPDwxMCkpCi0jZGVmaW5lIEFEUEFfRFBNU19PTgkJKDA8PDEwKQotI2RlZmluZSBBRFBBX0RQTVNfU1VTUEVORAkoMTw8MTApCi0jZGVmaW5lIEFEUEFfRFBNU19TVEFOREJZCSgyPDwxMCkKLSNkZWZpbmUgQURQQV9EUE1TX09GRgkJKDM8PDEwKQotCi0jZGVmaW5lIE5PUElEICAgICAgICAgICAgICAgICAgIDB4MjA5NAotI2RlZmluZSBMUF9SSU5HCQkJMHgyMDMwCi0jZGVmaW5lIEhQX1JJTkcJCQkweDIwNDAKLS8qIFRoZSBiaW5uZXIgaGFzIGl0cyBvd24gcmluZyBidWZmZXI6Ci0gKi8KLSNkZWZpbmUgSFdCX1JJTkcJCTB4MjQwMAotCi0jZGVmaW5lIFJJTkdfVEFJTAkJMHgwMAotI2RlZmluZSBUQUlMX0FERFIJCTB4MDAxRkZGRjgKLSNkZWZpbmUgUklOR19IRUFECQkweDA0Ci0jZGVmaW5lIEhFQURfV1JBUF9DT1VOVAkJMHhGRkUwMDAwMAotI2RlZmluZSBIRUFEX1dSQVBfT05FCQkweDAwMjAwMDAwCi0jZGVmaW5lIEhFQURfQUREUgkJMHgwMDFGRkZGQwotI2RlZmluZSBSSU5HX1NUQVJUCQkweDA4Ci0jZGVmaW5lIFNUQVJUX0FERFIJCTB4MHhGRkZGRjAwMAotI2RlZmluZSBSSU5HX0xFTgkJMHgwQwotI2RlZmluZSBSSU5HX05SX1BBR0VTCQkweDAwMUZGMDAwCi0jZGVmaW5lIFJJTkdfUkVQT1JUX01BU0sJMHgwMDAwMDAwNgotI2RlZmluZSBSSU5HX1JFUE9SVF82NEsJCTB4MDAwMDAwMDIKLSNkZWZpbmUgUklOR19SRVBPUlRfMTI4SwkweDAwMDAwMDA0Ci0jZGVmaW5lIFJJTkdfTk9fUkVQT1JUCQkweDAwMDAwMDAwCi0jZGVmaW5lIFJJTkdfVkFMSURfTUFTSwkJMHgwMDAwMDAwMQotI2RlZmluZSBSSU5HX1ZBTElECQkweDAwMDAwMDAxCi0jZGVmaW5lIFJJTkdfSU5WQUxJRAkJMHgwMDAwMDAwMAotCi0vKiBJbnN0cnVjdGlvbiBwYXJzZXIgZXJyb3IgcmVnOgotICovCi0jZGVmaW5lIElQRUlSCQkJMHgyMDg4Ci0KLS8qIFNjcmF0Y2ggcGFkIGRlYnVnIDAgcmVnOgotICovCi0jZGVmaW5lIFNDUEQwCQkJMHgyMDljCi0KLS8qIEVycm9yIHN0YXR1cyByZWc6Ci0gKi8KLSNkZWZpbmUgRVNSCQkJMHgyMGI4Ci0KLS8qIFNlY29uZGFyeSBETUEgZmV0Y2ggYWRkcmVzcyBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgRE1BX0ZBRERfUwkJMHgyMGQ0Ci0KLS8qIE1lbW9yeSBJbnRlcmZhY2UgQXJiaXRyYXRpb24gU3RhdGUKLSAqLwotI2RlZmluZSBNSV9BUkJfU1RBVEUJCTB4MjBlNAotCi0vKiBDYWNoZSBtb2RlIDAgcmVnLgotICogIC0gTWFuaXB1bGF0aW5nIHJlbmRlciBjYWNoZSBiZWhhdmlvdXIgaXMgY2VudHJhbAotICogICAgdG8gdGhlIGNvbmNlcHQgb2Ygem9uZSByZW5kZXJpbmcsIHR1bmluZyB0aGlzIHJlZyBjYW4gaGVscCBhdm9pZAotICogICAgdW5uZWNlc3NhcnkgcmVuZGVyIGNhY2hlIHJlYWRzIGFuZCBldmVuIHdyaXRlcyAoZm9yIHovc3RlbmNpbCkKLSAqICAgIGF0IGJlZ2lubmluZyBhbmQgZW5kIG9mIHNjZW5lLgorLyoqCisgKiBSZWFkcyBhIGR3b3JkIG91dCBvZiB0aGUgc3RhdHVzIHBhZ2UsIHdoaWNoIGlzIHdyaXR0ZW4gdG8gZnJvbSB0aGUgY29tbWFuZAorICogcXVldWUgYnkgYXV0b21hdGljIHVwZGF0ZXMsIE1JX1JFUE9SVF9IRUFELCBNSV9TVE9SRV9EQVRBX0lOREVYLCBvcgorICogTUlfU1RPUkVfREFUQV9JTU0uCiAgKgotICogLSBUbyBjaGFuZ2UgYSBiaXQsIHdyaXRlIHRvIHRoaXMgcmVnIHdpdGggYSBtYXNrIGJpdCBzZXQgYW5kIHRoZQotICogYml0IG9mIGludGVyZXN0IGVpdGhlciBzZXQgb3IgY2xlYXJlZC4gIEVHOiAoQklUPDwxNikgfCBCSVQgdG8gc2V0LgorICogVGhlIGZvbGxvd2luZyBkd29yZHMgaGF2ZSBhIHJlc2VydmVkIG1lYW5pbmc6CisgKiAweDAwOiBJU1IgY29weSwgdXBkYXRlZCB3aGVuIGFuIElTUiBiaXQgbm90IHNldCBpbiB0aGUgSFdTVEFNIGNoYW5nZXMuCisgKiAweDA0OiByaW5nIDAgaGVhZCBwb2ludGVyCisgKiAweDA1OiByaW5nIDEgaGVhZCBwb2ludGVyICg5MTUtY2xhc3MpCisgKiAweDA2OiByaW5nIDIgaGVhZCBwb2ludGVyICg5MTUtY2xhc3MpCisgKiAweDEwLTB4MWI6IENvbnRleHQgc3RhdHVzIERXb3JkcyAoR000NSkKKyAqIDB4MWY6IExhc3Qgd3JpdHRlbiBzdGF0dXMgb2Zmc2V0LiAoR000NSkKKyAqCisgKiBUaGUgYXJlYSBmcm9tIGR3b3JkIDB4MjAgdG8gMHgzZmYgaXMgYXZhaWxhYmxlIGZvciBkcml2ZXIgdXNhZ2UuCiAgKi8KLSNkZWZpbmUgQ2FjaGVfTW9kZV8wCQkweDIxMjAKLSNkZWZpbmUgQ0FDSEVfTU9ERV8wCQkweDIxMjAKLSNkZWZpbmUgQ00wX01BU0tfU0hJRlQgICAgICAgICAgMTYKLSNkZWZpbmUgQ00wX0laX09QVF9ESVNBQkxFICAgICAgKDE8PDYpCi0jZGVmaW5lIENNMF9aUl9PUFRfRElTQUJMRSAgICAgICgxPDw1KQotI2RlZmluZSBDTTBfREVQVEhfRVZJQ1RfRElTQUJMRSAoMTw8NCkKLSNkZWZpbmUgQ00wX0NPTE9SX0VWSUNUX0RJU0FCTEUgKDE8PDMpCi0jZGVmaW5lIENNMF9ERVBUSF9XUklURV9ESVNBQkxFICgxPDwxKQotI2RlZmluZSBDTTBfUkNfT1BfRkxVU0hfRElTQUJMRSAoMTw8MCkKLQotCi0vKiBHcmFwaGljcyBmbHVzaCBjb250cm9sLiAgQSBDUFUgd3JpdGUgZmx1c2hlcyB0aGUgR1dCIG9mIGFsbCB3cml0ZXMuCi0gKiBUaGUgZGF0YSBpcyBkaXNjYXJkZWQuCi0gKi8KLSNkZWZpbmUgR0ZYX0ZMU0hfQ05UTAkJMHgyMTcwCi0KLS8qIEJpbm5lciBjb250cm9sLiAgRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGJpbiBwb2ludGVyIGxpc3Q6Ci0gKi8KLSNkZWZpbmUgQklOQ1RMCQkJMHgyNDIwCi0jZGVmaW5lIEJDX01BU0sJCQkoMSA8PCA5KQotCi0vKiBCaW5uZWQgc2NlbmUgaW5mby4KLSAqLwotI2RlZmluZSBCSU5TQ0VORQkJMHgyNDI4Ci0jZGVmaW5lIEJTX09QX0xPQUQJCSgxIDw8IDgpCi0jZGVmaW5lIEJTX01BU0sJCQkoMSA8PCAyMikKLQotLyogQmluIGNvbW1hbmQgcGFyc2VyIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCQ1BECQkJMHgyNDgwCi0KLS8qIEJpbiBtZW1vcnkgY29udHJvbCBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQk1DRAkJCTB4MjQ4NAotCi0vKiBCaW4gZGF0YSBjYWNoZSBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQkRDRAkJCTB4MjQ4OAotCi0vKiBCaW5uZXIgcG9pbnRlciBjYWNoZSBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQlBDRAkJCTB4MjQ4YwotCi0vKiBCaW5uZXIgc2NyYXRjaCBwYWQgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEJJTlNLUEQJCQkweDI0ZjAKLQotLyogSFdCIHNjcmF0Y2ggcGFkIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBIV0JTS1BECQkJMHgyNGY0Ci0KLS8qIEJpbm5lciBtZW1vcnkgcG9vbCByZWc6Ci0gKi8KLSNkZWZpbmUgQk1QX0JVRkZFUgkJMHgyNDMwCi0jZGVmaW5lIEJNUF9QQUdFX1NJWkVfNEsJKDAgPDwgMTApCi0jZGVmaW5lIEJNUF9CVUZGRVJfU0laRV9TSElGVAkxCi0jZGVmaW5lIEJNUF9FTkFCTEUJCSgxIDw8IDApCi0KLS8qIEdldC9wdXQgbWVtb3J5IGZyb20gdGhlIGJpbm5lciBtZW1vcnkgcG9vbDoKLSAqLwotI2RlZmluZSBCTVBfR0VUCQkJMHgyNDM4Ci0jZGVmaW5lIEJNUF9QVVQJCQkweDI0NDAKLSNkZWZpbmUgQk1QX09GRlNFVF9TSElGVAk1Ci0KLS8qIDNEIHN0YXRlIHBhY2tldHM6Ci0gKi8KLSNkZWZpbmUgR0ZYX09QX1JBU1RFUl9SVUxFUyAgICAoKDB4Mzw8MjkpfCgweDc8PDI0KSkKLQotI2RlZmluZSBHRlhfT1BfU0NJU1NPUiAgICAgICAgICgoMHgzPDwyOSl8KDB4MWM8PDI0KXwoMHgxMDw8MTkpKQotI2RlZmluZSBTQ19VUERBVEVfU0NJU1NPUiAgICAgICAoMHgxPDwxKQotI2RlZmluZSBTQ19FTkFCTEVfTUFTSyAgICAgICAgICAoMHgxPDwwKQotI2RlZmluZSBTQ19FTkFCTEUgICAgICAgICAgICAgICAoMHgxPDwwKQotCi0jZGVmaW5lIEdGWF9PUF9MT0FEX0lORElSRUNUICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDc8PDE2KSkKLQotI2RlZmluZSBHRlhfT1BfU0NJU1NPUl9JTkZPICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MTw8MTYpfCgweDEpKQotI2RlZmluZSBTQ0lfWU1JTl9NQVNLICAgICAgKDB4ZmZmZjw8MTYpCi0jZGVmaW5lIFNDSV9YTUlOX01BU0sgICAgICAoMHhmZmZmPDwwKQotI2RlZmluZSBTQ0lfWU1BWF9NQVNLICAgICAgKDB4ZmZmZjw8MTYpCi0jZGVmaW5lIFNDSV9YTUFYX01BU0sgICAgICAoMHhmZmZmPDwwKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0VOQUJMRQkgKCgweDM8PDI5KXwoMHgxYzw8MjQpfCgweDEwPDwxOSkpCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SX1JFQ1QJICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MTw8MTYpfDEpCi0jZGVmaW5lIEdGWF9PUF9DT0xPUl9GQUNUT1IgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4MTw8MTYpfDB4MCkKLSNkZWZpbmUgR0ZYX09QX1NUSVBQTEUgICAgICAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4Mzw8MTYpKQotI2RlZmluZSBHRlhfT1BfTUFQX0lORk8gICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfDB4NCkKLSNkZWZpbmUgR0ZYX09QX0RFU1RCVUZGRVJfVkFSUyAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4NTw8MTYpfDB4MCkKLSNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk8gICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MDw8MTYpfCgweDMpKQotCi0jZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgKCgweDc5MDA8PDE2KXwweDIpCi0KLSNkZWZpbmUgU1JDX0NPUFlfQkxUX0NNRCAgICAgICAgICAgICAgICAoKDI8PDI5KXwoMHg0Mzw8MjIpfDQpCi0jZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9DTUQJCSgoMjw8MjkpfCgweDUzPDwyMil8NikKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1dSSVRFX0FMUEhBCSgxPDwyMSkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1dSSVRFX1JHQgkoMTw8MjApCi0jZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9TUkNfVElMRUQJKDE8PDE1KQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfRFNUX1RJTEVECSgxPDwxMSkKLQotI2RlZmluZSBNSV9CQVRDSF9CVUZGRVIJCSgoMHgzMDw8MjMpfDEpCi0jZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9TVEFSVAkoMHgzMTw8MjMpCi0jZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9FTkQJKDB4QTw8MjMpCi0jZGVmaW5lIE1JX0JBVENIX05PTl9TRUNVUkUJKDEpCi0jZGVmaW5lIE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSAoMTw8OCkKLQotI2RlZmluZSBNSV9XQUlUX0ZPUl9FVkVOVCAgICAgICAoKDB4Mzw8MjMpKQotI2RlZmluZSBNSV9XQUlUX0ZPUl9QTEFORV9CX0ZMSVAgICAgICAoMTw8NikKLSNkZWZpbmUgTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQICAgICAgKDE8PDIpCi0jZGVmaW5lIE1JX1dBSVRfRk9SX1BMQU5FX0FfU0NBTkxJTkVTICgxPDwxKQotCi0jZGVmaW5lIE1JX0xPQURfU0NBTl9MSU5FU19JTkNMICAoKDB4MTI8PDIzKSkKLQotI2RlZmluZSBDTURfT1BfRElTUExBWUJVRkZFUl9JTkZPICgoMHgwPDwyOSl8KDB4MTQ8PDIzKXwyKQotI2RlZmluZSBBU1lOQ19GTElQICAgICAgICAgICAgICAgICgxPDwyMikKLSNkZWZpbmUgRElTUExBWV9QTEFORV9BICAgICAgICAgICAoMDw8MjApCi0jZGVmaW5lIERJU1BMQVlfUExBTkVfQiAgICAgICAgICAgKDE8PDIwKQotCi0vKiBEaXNwbGF5IHJlZ3MgKi8KLSNkZWZpbmUgRFNQQUNOVFIgICAgICAgICAgICAgICAgMHg3MDE4MAotI2RlZmluZSBEU1BCQ05UUiAgICAgICAgICAgICAgICAweDcxMTgwCi0jZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9NQVNLICAgICAgICAgICAgICAgICAoMTw8MjQpCi0KLS8qIERlZmluZSB0aGUgcmVnaW9uIG9mIGludGVyZXN0IGZvciB0aGUgYmlubmVyOgotICovCi0jZGVmaW5lIENNRF9PUF9CSU5fQ09OVFJPTAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg0PDwxNil8NCkKLQotI2RlZmluZSBDTURfT1BfREVTVEJVRkZFUl9JTkZPCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4OGU8PDE2KXwxKQotCi0jZGVmaW5lIENNRF9NSV9GTFVTSCAgICAgICAgICgweDA0IDw8IDIzKQotI2RlZmluZSBNSV9OT19XUklURV9GTFVTSCAgICAoMSA8PCAyKQotI2RlZmluZSBNSV9SRUFEX0ZMVVNIICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBNSV9FWEVfRkxVU0ggICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBNSV9FTkRfU0NFTkUgICAgICAgICAoMSA8PCA0KSAvKiBmbHVzaCBiaW5uZXIgYW5kIGluY3Igc2NlbmUgY291bnQgKi8KLSNkZWZpbmUgTUlfU0NFTkVfQ09VTlQgICAgICAgKDEgPDwgMykgLyoganVzdCBpbmNyZW1lbnQgc2NlbmUgY291bnQgKi8KLQotI2RlZmluZSBCUkVBRENSVU1CX0JJVFMgMzEKLSNkZWZpbmUgQlJFQURDUlVNQl9NQVNLICgoMVUgPDwgQlJFQURDUlVNQl9CSVRTKSAtIDEpCi0KLSNkZWZpbmUgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSAgKCgodm9sYXRpbGUgdTMyKikoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSlbNV0pCiAjZGVmaW5lIFJFQURfSFdTUChkZXZfcHJpdiwgcmVnKSAgKCgodm9sYXRpbGUgdTMyKikoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSlbcmVnXSkKKyNkZWZpbmUgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSBSRUFEX0hXU1AoZGV2X3ByaXYsIDUpCisjZGVmaW5lIEk5MTVfR0VNX0hXU19JTkRFWAkJMHgyMAogCi0jZGVmaW5lIEJMQ19QV01fQ1RMCQkweDYxMjU0Ci0jZGVmaW5lIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQJCSgxNykKLQotI2RlZmluZSBCTENfUFdNX0NUTDIJCTB4NjEyNTAKLS8qKgotICogVGhpcyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCAxNSBiaXRzIG9mIHRoZSBudW1iZXIgb2YgYmFja2xpZ2h0IGN5Y2xlcyBpbiBhCi0gKiBjb21wbGV0ZSBjeWNsZSBvZiB0aGUgbW9kdWxhdGVkIGJhY2tsaWdodCBjb250cm9sLgotICoKLSAqIFRoZSBhY3R1YWwgdmFsdWUgaXMgdGhpcyBmaWVsZCBtdWx0aXBsaWVkIGJ5IHR3by4KLSAqLwotI2RlZmluZSBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX01BU0sJCSgweDdmZmYgPDwgMTcpCi0jZGVmaW5lIEJMTV9MRUdBQ1lfTU9ERQkJCQkoMSA8PCAxNikKLS8qKgotICogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBvdXQgb2YgdGhlIGJhY2tsaWdodCBtb2R1bGF0aW9uIGN5Y2xlIGZvciB3aGljaAotICogdGhlIGJhY2tsaWdodCBpcyBvbi4KLSAqCi0gKiBUaGlzIGZpZWxkIG11c3QgYmUgbm8gZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY3ljbGVzIGluIHRoZSBjb21wbGV0ZQotICogYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUuCi0gKi8KLSNkZWZpbmUgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfU0hJRlQJCSgwKQotI2RlZmluZSBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLCQkoMHhmZmZmKQotCi0jZGVmaW5lIEk5MTVfR0NGR0MJCQkweGYwCi0jZGVmaW5lIEk5MTVfTE9XX0ZSRVFVRU5DWV9FTkFCTEUJCSgxIDw8IDcpCi0jZGVmaW5lIEk5MTVfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkJKDAgPDwgNCkKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLXzMzM19NSFoJCSg0IDw8IDQpCi0jZGVmaW5lIEk5MTVfRElTUExBWV9DTE9DS19NQVNLCQkJKDcgPDwgNCkKLQotI2RlZmluZSBJODU1X0hQTExDQwkJCTB4YzAKLSNkZWZpbmUgSTg1NV9DTE9DS19DT05UUk9MX01BU0sJCQkoMyA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzEzM18yMDAJCQkoMCA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzEwMF8yMDAJCQkoMSA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzEwMF8xMzMJCQkoMiA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzE2Nl8yNTAJCQkoMyA8PCAwKQotCi0vKiBwMzE3LCAzMTkKLSAqLwotI2RlZmluZSBWQ0xLMl9WQ09fTSAgICAgICAgMHg2MDA4IC8qIHRyZWF0IGFzIDE2IGJpdD8gKGluY2x1ZGVzIG1zYnMpICovCi0jZGVmaW5lIFZDTEsyX1ZDT19OICAgICAgICAweDYwMGEKLSNkZWZpbmUgVkNMSzJfVkNPX0RJVl9TRUwgIDB4NjAxMgotCi0jZGVmaW5lIFZDTEtfRElWSVNPUl9WR0EwICAgMHg2MDAwCi0jZGVmaW5lIFZDTEtfRElWSVNPUl9WR0ExICAgMHg2MDA0Ci0jZGVmaW5lIFZDTEtfUE9TVF9ESVYJICAgIDB4NjAxMAotLyoqIFNlbGVjdHMgYSBwb3N0IGRpdmlzb3Igb2YgNCBpbnN0ZWFkIG9mIDIuICovCi0jIGRlZmluZSBWR0ExX1BEX1AyX0RJVl80CSgxIDw8IDE1KQotLyoqIE92ZXJyaWRlcyB0aGUgcDIgcG9zdCBkaXZpc29yIGZpZWxkICovCi0jIGRlZmluZSBWR0ExX1BEX1AxX0RJVl8yCSgxIDw8IDEzKQotIyBkZWZpbmUgVkdBMV9QRF9QMV9TSElGVAk4Ci0vKiogUDEgdmFsdWUgaXMgMiBncmVhdGVyIHRoYW4gdGhpcyBmaWVsZCAqLwotIyBkZWZpbmUgVkdBMV9QRF9QMV9NQVNLCSgweDFmIDw8IDgpCi0vKiogU2VsZWN0cyBhIHBvc3QgZGl2aXNvciBvZiA0IGluc3RlYWQgb2YgMi4gKi8KLSMgZGVmaW5lIFZHQTBfUERfUDJfRElWXzQJKDEgPDwgNykKLS8qKiBPdmVycmlkZXMgdGhlIHAyIHBvc3QgZGl2aXNvciBmaWVsZCAqLwotIyBkZWZpbmUgVkdBMF9QRF9QMV9ESVZfMgkoMSA8PCA1KQotIyBkZWZpbmUgVkdBMF9QRF9QMV9TSElGVAkwCi0vKiogUDEgdmFsdWUgaXMgMiBncmVhdGVyIHRoYW4gdGhpcyBmaWVsZCAqLwotIyBkZWZpbmUgVkdBMF9QRF9QMV9NQVNLCSgweDFmIDw8IDApCi0KLS8qIFBDSSBEIHN0YXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRF9TVEFURQkJMHg2MTA0Ci0jZGVmaW5lIERTUENMS19HQVRFX0QJMHg2MjAwCi0KLS8qIEk4MzAgQ1JUQyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgSFRPVEFMX0EJMHg2MDAwMAotI2RlZmluZSBIQkxBTktfQQkweDYwMDA0Ci0jZGVmaW5lIEhTWU5DX0EJCTB4NjAwMDgKLSNkZWZpbmUgVlRPVEFMX0EJMHg2MDAwYwotI2RlZmluZSBWQkxBTktfQQkweDYwMDEwCi0jZGVmaW5lIFZTWU5DX0EJCTB4NjAwMTQKLSNkZWZpbmUgUElQRUFTUkMJMHg2MDAxYwotI2RlZmluZSBCQ0xSUEFUX0EJMHg2MDAyMAotI2RlZmluZSBWU1lOQ1NISUZUX0EJMHg2MDAyOAotCi0jZGVmaW5lIEhUT1RBTF9CCTB4NjEwMDAKLSNkZWZpbmUgSEJMQU5LX0IJMHg2MTAwNAotI2RlZmluZSBIU1lOQ19CCQkweDYxMDA4Ci0jZGVmaW5lIFZUT1RBTF9CCTB4NjEwMGMKLSNkZWZpbmUgVkJMQU5LX0IJMHg2MTAxMAotI2RlZmluZSBWU1lOQ19CCQkweDYxMDE0Ci0jZGVmaW5lIFBJUEVCU1JDCTB4NjEwMWMKLSNkZWZpbmUgQkNMUlBBVF9CCTB4NjEwMjAKLSNkZWZpbmUgVlNZTkNTSElGVF9CCTB4NjEwMjgKLQotI2RlZmluZSBQUF9TVEFUVVMJMHg2MTIwMAotIyBkZWZpbmUgUFBfT04JCQkJCSgxIDw8IDMxKQotLyoqCi0gKiBJbmRpY2F0ZXMgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYW5lbCBhcmUgb246Ci0gKgotICogLSBQTEwgZW5hYmxlZAotICogLSBwaXBlIGVuYWJsZWQKLSAqIC0gTFZEUy9EVk9CL0RWT0Mgb24KLSAqLwotIyBkZWZpbmUgUFBfUkVBRFkJCQkJKDEgPDwgMzApCi0jIGRlZmluZSBQUF9TRVFVRU5DRV9OT05FCQkJKDAgPDwgMjgpCi0jIGRlZmluZSBQUF9TRVFVRU5DRV9PTgkJCQkoMSA8PCAyOCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX09GRgkJCSgyIDw8IDI4KQotIyBkZWZpbmUgUFBfU0VRVUVOQ0VfTUFTSwkJCTB4MzAwMDAwMDAKLSNkZWZpbmUgUFBfQ09OVFJPTAkweDYxMjA0Ci0jIGRlZmluZSBQT1dFUl9UQVJHRVRfT04JCQkoMSA8PCAwKQotCi0jZGVmaW5lIExWRFNQUF9PTiAgICAgICAweDYxMjA4Ci0jZGVmaW5lIExWRFNQUF9PRkYgICAgICAweDYxMjBjCi0jZGVmaW5lIFBQX0NZQ0xFICAgICAgICAweDYxMjEwCi0KLSNkZWZpbmUgUEZJVF9DT05UUk9MCTB4NjEyMzAKLSMgZGVmaW5lIFBGSVRfRU5BQkxFCQkJCSgxIDw8IDMxKQotIyBkZWZpbmUgUEZJVF9QSVBFX01BU0sJCQkJKDMgPDwgMjkpCi0jIGRlZmluZSBQRklUX1BJUEVfU0hJRlQJCQkyOQotIyBkZWZpbmUgVkVSVF9JTlRFUlBfRElTQUJMRQkJCSgwIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9JTlRFUlBfQklMSU5FQVIJCQkoMSA8PCAxMCkKLSMgZGVmaW5lIFZFUlRfSU5URVJQX01BU0sJCQkoMyA8PCAxMCkKLSMgZGVmaW5lIFZFUlRfQVVUT19TQ0FMRQkJCSgxIDw8IDkpCi0jIGRlZmluZSBIT1JJWl9JTlRFUlBfRElTQUJMRQkJCSgwIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9JTlRFUlBfQklMSU5FQVIJCQkoMSA8PCA2KQotIyBkZWZpbmUgSE9SSVpfSU5URVJQX01BU0sJCQkoMyA8PCA2KQotIyBkZWZpbmUgSE9SSVpfQVVUT19TQ0FMRQkJCSgxIDw8IDUpCi0jIGRlZmluZSBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEUJCSgxIDw8IDMpCi0KLSNkZWZpbmUgUEZJVF9QR01fUkFUSU9TCTB4NjEyMzQKLSMgZGVmaW5lIFBGSVRfVkVSVF9TQ0FMRV9NQVNLCQkJMHhmZmYwMDAwMAotIyBkZWZpbmUgUEZJVF9IT1JJWl9TQ0FMRV9NQVNLCQkJMHgwMDAwZmZmMAotCi0jZGVmaW5lIFBGSVRfQVVUT19SQVRJT1MJMHg2MTIzOAotCi0KLSNkZWZpbmUgRFBMTF9BCQkweDA2MDE0Ci0jZGVmaW5lIERQTExfQgkJMHgwNjAxOAotIyBkZWZpbmUgRFBMTF9WQ09fRU5BQkxFCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBEUExMX0RWT19ISUdIX1NQRUVECQkJKDEgPDwgMzApCi0jIGRlZmluZSBEUExMX1NZTkNMT0NLX0VOQUJMRQkJCSgxIDw8IDI5KQotIyBkZWZpbmUgRFBMTF9WR0FfTU9ERV9ESVMJCQkoMSA8PCAyOCkKLSMgZGVmaW5lIERQTExCX01PREVfREFDX1NFUklBTAkJCSgxIDw8IDI2KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMQl9NT0RFX0xWRFMJCQkoMiA8PCAyNikgLyogaTkxNSAqLwotIyBkZWZpbmUgRFBMTF9NT0RFX01BU0sJCQkJKDMgPDwgMjYpCi0jIGRlZmluZSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwCSgwIDw8IDI0KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzUJCSgxIDw8IDI0KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl8xNAkJKDAgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzcJCSgxIDw8IDI0KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX1AyX0NMT0NLX0RJVl9NQVNLCQkJMHgwMzAwMDAwMCAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0sJCTB4MDBmZjAwMDAgLyogaTkxNSAqLwotLyoqCi0gKiAgVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gREFDL3NlcmlhbCBtb2RlLCBkZWZpbmVzIHAxIGFzIHR3byBwbHVzIHRoaXMKLSAqIGJpdGZpZWxkLCBvciBqdXN0IDIgaWYgUExMX1AxX0RJVklERV9CWV9UV08gaXMgc2V0LgotICovCi0jIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMAkweDAwMWYwMDAwCi0vKioKLSAqIFRoZSBpODMwIGdlbmVyYXRpb24sIGluIExWRFMgbW9kZSwgZGVmaW5lcyBQMSBhcyB0aGUgYml0IG51bWJlciBzZXQgd2l0aGluCi0gKiB0aGlzIGZpZWxkIChvbmx5IG9uZSBiaXQgbWF5IGJlIHNldCkuCi0gKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwX0xWRFMJMHgwMDNmMDAwMAotIyBkZWZpbmUgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVAkJMTYKLSMgZGVmaW5lIFBMTF9QMl9ESVZJREVfQllfNAkJCSgxIDw8IDIzKSAvKiBpODMwLCByZXF1aXJlZCBpbiBEVk8gbm9uLWdhbmcgKi8KLSMgZGVmaW5lIFBMTF9QMV9ESVZJREVfQllfVFdPCQkJKDEgPDwgMjEpIC8qIGk4MzAgKi8KLSMgZGVmaW5lIFBMTF9SRUZfSU5QVVRfRFJFRkNMSwkJCSgwIDw8IDEzKQotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9UVkNMS0lOQQkJCSgxIDw8IDEzKSAvKiBpODMwICovCi0jIGRlZmluZSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQwkJKDIgPDwgMTMpIC8qIFNEVk8gVFZDTEtJTiAqLwotIyBkZWZpbmUgUExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTgkoMyA8PCAxMykKLSMgZGVmaW5lIFBMTF9SRUZfSU5QVVRfTUFTSwkJCSgzIDw8IDEzKQotIyBkZWZpbmUgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQJCTkKLS8qCi0gKiBQYXJhbGxlbCB0byBTZXJpYWwgTG9hZCBQdWxzZSBwaGFzZSBzZWxlY3Rpb24uCi0gKiBTZWxlY3RzIHRoZSBwaGFzZSBmb3IgdGhlIDEwWCBEUExMIGNsb2NrIGZvciB0aGUgUENJZQotICogZGlnaXRhbCBkaXNwbGF5IHBvcnQuIFRoZSByYW5nZSBpcyA0IHRvIDEzOyAxMCBvciBtb3JlCi0gKiBpcyBqdXN0IGEgZmxpcCBkZWxheS4gVGhlIGRlZmF1bHQgaXMgNgotICovCi0jIGRlZmluZSBQTExfTE9BRF9QVUxTRV9QSEFTRV9NQVNLCQkoMHhmIDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NISUZUKQotIyBkZWZpbmUgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExCQkoMSA8PCA4KQotCi0vKioKLSAqIFNEVk8gbXVsdGlwbGllciBmb3IgOTQ1Ry9HTS4gTm90IHVzZWQgb24gOTY1LgotICoKLSAqIFxzYSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKLSAqLwotIyBkZWZpbmUgU0RWT19NVUxUSVBMSUVSX01BU0sJCQkweDAwMDAwMGZmCi0jIGRlZmluZSBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVMJCTQKLSMgZGVmaW5lIFNEVk9fTVVMVElQTElFUl9TSElGVF9WR0EJCTAKLQotLyoqIEBkZWZncm91cCBEUExMX01ECi0gKiBAewotICovCi0vKiogUGlwZSBBIFNEVk8vVURJIGNsb2NrIG11bHRpcGxpZXIvZGl2aWRlciByZWdpc3RlciBmb3IgRzk2NS4gKi8KLSNkZWZpbmUgRFBMTF9BX01ECQkweDA2MDFjCi0vKiogUGlwZSBCIFNEVk8vVURJIGNsb2NrIG11bHRpcGxpZXIvZGl2aWRlciByZWdpc3RlciBmb3IgRzk2NS4gKi8KLSNkZWZpbmUgRFBMTF9CX01ECQkweDA2MDIwCi0vKioKLSAqIFVESSBwaXhlbCBkaXZpZGVyLCBjb250cm9sbGluZyBob3cgbWFueSBwaXhlbHMgYXJlIHN0dWZmZWQgaW50byBhIHBhY2tldC4KLSAqCi0gKiBWYWx1ZSBpcyBwaXhlbHMgbWludXMgMS4gIE11c3QgYmUgc2V0IHRvIDEgcGl4ZWwgZm9yIFNEVk8uCi0gKi8KLSMgZGVmaW5lIERQTExfTURfVURJX0RJVklERVJfTUFTSwkJMHgzZjAwMDAwMAotIyBkZWZpbmUgRFBMTF9NRF9VRElfRElWSURFUl9TSElGVAkJMjQKLS8qKiBVREkgcGl4ZWwgZGl2aWRlciBmb3IgVkdBLCBzYW1lIGFzIERQTExfTURfVURJX0RJVklERVJfTUFTSy4gKi8KLSMgZGVmaW5lIERQTExfTURfVkdBX1VESV9ESVZJREVSX01BU0sJCTB4MDAzZjAwMDAKLSMgZGVmaW5lIERQTExfTURfVkdBX1VESV9ESVZJREVSX1NISUZUCQkxNgotLyoqCi0gKiBTRFZPL1VESSBwaXhlbCBtdWx0aXBsaWVyLgotICoKLSAqIFNEVk8gcmVxdWlyZXMgdGhhdCB0aGUgYnVzIGNsb2NrIHJhdGUgYmUgYmV0d2VlbiAxIGFuZCAyIEdoeiwgYW5kIHRoZSBidXMKLSAqIGNsb2NrIHJhdGUgaXMgMTAgdGltZXMgdGhlIERQTEwgY2xvY2suICBBdCBsb3cgcmVzb2x1dGlvbi9yZWZyZXNoIHJhdGUKLSAqIG1vZGVzLCB0aGUgYnVzIHJhdGUgd291bGQgYmUgYmVsb3cgdGhlIGxpbWl0cywgc28gU0RWTyBhbGxvd3MgZm9yIHN0dWZmaW5nCi0gKiBkdW1teSBieXRlcyBpbiB0aGUgZGF0YXN0cmVhbSBhdCBhbiBpbmNyZWFzZWQgY2xvY2sgcmF0ZSwgd2l0aCBib3RoIHNpZGVzIG9mCi0gKiB0aGUgbGluayBrbm93aW5nIGhvdyBtYW55IGJ5dGVzIGFyZSBmaWxsLgotICoKLSAqIFNvLCBmb3IgYSBtb2RlIHdpdGggYSBkb3RjbG9jayBvZiA2NU1oeiwgd2Ugd291bGQgd2FudCB0byBkb3VibGUgdGhlIGNsb2NrCi0gKiByYXRlIHRvIDEzME1oeiB0byBnZXQgYSBidXMgcmF0ZSBvZiAxLjMwR2h6LiAgVGhlIERQTEwgY2xvY2sgcmF0ZSB3b3VsZCBiZQotICogc2V0IHRvIDEzME1oeiwgYW5kIHRoZSBTRFZPIG11bHRpcGxpZXIgc2V0IHRvIDJ4IGluIHRoaXMgcmVnaXN0ZXIgYW5kCi0gKiB0aHJvdWdoIGFuIFNEVk8gY29tbWFuZC4KLSAqCi0gKiBUaGlzIHJlZ2lzdGVyIGZpZWxkIGhhcyB2YWx1ZXMgb2YgbXVsdGlwbGljYXRpb24gZmFjdG9yIG1pbnVzIDEsIHdpdGgKLSAqIGEgbWF4aW11bSBtdWx0aXBsaWVyIG9mIDUgZm9yIFNEVk8uCi0gKi8KLSMgZGVmaW5lIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwkJMHgwMDAwM2YwMAotIyBkZWZpbmUgRFBMTF9NRF9VRElfTVVMVElQTElFUl9TSElGVAkJOAotLyoqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0suCi0gKiBUaGlzIGJlc3QgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlICgzKSBvciB0aGUgQ1JUIHdvbid0IHdvcmsuIE5vLAotICogSSBkb24ndCBlbnRpcmVseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkb2VzLi4uCi0gKi8KLSMgZGVmaW5lIERQTExfTURfVkdBX1VESV9NVUxUSVBMSUVSX01BU0sJMHgwMDAwMDAzZgotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfU0hJRlQJMAotLyoqIEB9ICovCi0KLSNkZWZpbmUgRFBMTF9URVNUCQkweDYwNmMKLSMgZGVmaW5lIERQTExCX1RFU1RfU0RWT19ESVZfMQkJCSgwIDw8IDIyKQotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl8yCQkJKDEgPDwgMjIpCi0jIGRlZmluZSBEUExMQl9URVNUX1NEVk9fRElWXzQJCQkoMiA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfU0RWT19ESVZfTUFTSwkJKDMgPDwgMjIpCi0jIGRlZmluZSBEUExMQl9URVNUX05fQllQQVNTCQkJKDEgPDwgMTkpCi0jIGRlZmluZSBEUExMQl9URVNUX01fQllQQVNTCQkJKDEgPDwgMTgpCi0jIGRlZmluZSBEUExMQl9JTlBVVF9CVUZGRVJfRU5BQkxFCQkoMSA8PCAxNikKLSMgZGVmaW5lIERQTExBX1RFU1RfTl9CWVBBU1MJCQkoMSA8PCAzKQotIyBkZWZpbmUgRFBMTEFfVEVTVF9NX0JZUEFTUwkJCSgxIDw8IDIpCi0jIGRlZmluZSBEUExMQV9JTlBVVF9CVUZGRVJfRU5BQkxFCQkoMSA8PCAwKQotCi0jZGVmaW5lIEFEUEEJCQkweDYxMTAwCi0jZGVmaW5lIEFEUEFfREFDX0VOQUJMRQkJKDE8PDMxKQotI2RlZmluZSBBRFBBX0RBQ19ESVNBQkxFCTAKLSNkZWZpbmUgQURQQV9QSVBFX1NFTEVDVF9NQVNLCSgxPDwzMCkKLSNkZWZpbmUgQURQQV9QSVBFX0FfU0VMRUNUCTAKLSNkZWZpbmUgQURQQV9QSVBFX0JfU0VMRUNUCSgxPDwzMCkKLSNkZWZpbmUgQURQQV9VU0VfVkdBX0hWUE9MQVJJVFkgKDE8PDE1KQotI2RlZmluZSBBRFBBX1NFVFNfSFZQT0xBUklUWQkwCi0jZGVmaW5lIEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMSkKLSNkZWZpbmUgQURQQV9WU1lOQ19DTlRMX0VOQUJMRQkwCi0jZGVmaW5lIEFEUEFfSFNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMCkKLSNkZWZpbmUgQURQQV9IU1lOQ19DTlRMX0VOQUJMRQkwCi0jZGVmaW5lIEFEUEFfVlNZTkNfQUNUSVZFX0hJR0gJKDE8PDQpCi0jZGVmaW5lIEFEUEFfVlNZTkNfQUNUSVZFX0xPVwkwCi0jZGVmaW5lIEFEUEFfSFNZTkNfQUNUSVZFX0hJR0gJKDE8PDMpCi0jZGVmaW5lIEFEUEFfSFNZTkNfQUNUSVZFX0xPVwkwCi0KLSNkZWZpbmUgRlBBMAkJMHgwNjA0MAotI2RlZmluZSBGUEExCQkweDA2MDQ0Ci0jZGVmaW5lIEZQQjAJCTB4MDYwNDgKLSNkZWZpbmUgRlBCMQkJMHgwNjA0YwotIyBkZWZpbmUgRlBfTl9ESVZfTUFTSwkJCQkweDAwM2YwMDAwCi0jIGRlZmluZSBGUF9OX0RJVl9TSElGVAkJCQkxNgotIyBkZWZpbmUgRlBfTTFfRElWX01BU0sJCQkJMHgwMDAwM2YwMAotIyBkZWZpbmUgRlBfTTFfRElWX1NISUZUCQkJOAotIyBkZWZpbmUgRlBfTTJfRElWX01BU0sJCQkJMHgwMDAwMDAzZgotIyBkZWZpbmUgRlBfTTJfRElWX1NISUZUCQkJMAotCi0KLSNkZWZpbmUgUE9SVF9IT1RQTFVHX0VOCQkweDYxMTEwCi0jIGRlZmluZSBTRFZPQl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI2KQotIyBkZWZpbmUgU0RWT0NfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAyNSkKLSMgZGVmaW5lIFRWX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMTgpCi0jIGRlZmluZSBDUlRfSE9UUExVR19JTlRfRU4JCQkoMSA8PCA5KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUCQkoMSA8PCAzKQotCi0jZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKLSMgZGVmaW5lIENSVF9IT1RQTFVHX0lOVF9TVEFUVVMJCQkoMSA8PCAxMSkKLSMgZGVmaW5lIFRWX0hPVFBMVUdfSU5UX1NUQVRVUwkJCSgxIDw8IDEwKQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLCQkoMyA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9DT0xPUgkJKDMgPDwgOCkKLSMgZGVmaW5lIENSVF9IT1RQTFVHX01PTklUT1JfTU9OTwkJKDIgPDwgOCkKLSMgZGVmaW5lIENSVF9IT1RQTFVHX01PTklUT1JfTk9ORQkJKDAgPDwgOCkKLSMgZGVmaW5lIFNEVk9DX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgNykKLSMgZGVmaW5lIFNEVk9CX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgNikKLQotI2RlZmluZSBTRFZPQgkJCTB4NjExNDAKLSNkZWZpbmUgU0RWT0MJCQkweDYxMTYwCi0jZGVmaW5lIFNEVk9fRU5BQkxFCQkJCSgxIDw8IDMxKQotI2RlZmluZSBTRFZPX1BJUEVfQl9TRUxFQ1QJCQkoMSA8PCAzMCkKLSNkZWZpbmUgU0RWT19TVEFMTF9TRUxFQ1QJCQkoMSA8PCAyOSkKLSNkZWZpbmUgU0RWT19JTlRFUlJVUFRfRU5BQkxFCQkJKDEgPDwgMjYpCi0vKioKLSAqIDkxNUcvR00gU0RWTyBwaXhlbCBtdWx0aXBsaWVyLgotICoKLSAqIFByb2dyYW1tZWQgdmFsdWUgaXMgbXVsdGlwbGllciAtIDEsIHVwIHRvIDV4LgotICoKLSAqIFxzYSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKLSAqLwotI2RlZmluZSBTRFZPX1BPUlRfTVVMVElQTFlfTUFTSwkJCSg3IDw8IDIzKQotI2RlZmluZSBTRFZPX1BPUlRfTVVMVElQTFlfU0hJRlQJCTIzCi0jZGVmaW5lIFNEVk9fUEhBU0VfU0VMRUNUX01BU0sJCQkoMTUgPDwgMTkpCi0jZGVmaW5lIFNEVk9fUEhBU0VfU0VMRUNUX0RFRkFVTFQJCSg2IDw8IDE5KQotI2RlZmluZSBTRFZPX0NMT0NLX09VVFBVVF9JTlZFUlQJCSgxIDw8IDE4KQotI2RlZmluZSBTRFZPQ19HQU5HX01PREUJCQkJKDEgPDwgMTYpCi0jZGVmaW5lIFNEVk9fQk9SREVSX0VOQUJMRQkJCSgxIDw8IDcpCi0jZGVmaW5lIFNEVk9CX1BDSUVfQ09OQ1VSUkVOQ1kJCQkoMSA8PCAzKQotI2RlZmluZSBTRFZPX0RFVEVDVEVECQkJCSgxIDw8IDIpCi0vKiBCaXRzIHRvIGJlIHByZXNlcnZlZCB3aGVuIHdyaXRpbmcgKi8KLSNkZWZpbmUgU0RWT0JfUFJFU0VSVkVfTUFTSwkJCSgoMSA8PCAxNykgfCAoMSA8PCAxNikgfCAoMSA8PCAxNCkpCi0jZGVmaW5lIFNEVk9DX1BSRVNFUlZFX01BU0sJCQkoMSA8PCAxNykKLQotLyoqIEBkZWZncm91cCBMVkRTCi0gKiBAewotICovCi0vKioKLSAqIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgdGhlIExWRFMgb3V0cHV0IGVuYWJsZSwgcGlwZSBzZWxlY3Rpb24sIGFuZCBkYXRhCi0gKiBmb3JtYXQgc2VsZWN0aW9uLgotICoKLSAqIEFsbCBvZiB0aGUgY2xvY2svZGF0YSBwYWlycyBhcmUgZm9yY2UgcG93ZXJlZCBkb3duIGJ5IHBvd2VyIHNlcXVlbmNpbmcuCi0gKi8KLSNkZWZpbmUgTFZEUwkJCTB4NjExODAKLS8qKgotICogRW5hYmxlcyB0aGUgTFZEUyBwb3J0LiAgVGhpcyBiaXQgbXVzdCBiZSBzZXQgYmVmb3JlIERQTExzIGFyZSBlbmFibGVkLCBhcwotICogdGhlIERQTEwgc2VtYW50aWNzIGNoYW5nZSB3aGVuIHRoZSBMVkRTIGlzIGFzc2lnbmVkIHRvIHRoYXQgcGlwZS4KLSAqLwotIyBkZWZpbmUgTFZEU19QT1JUX0VOCQkJKDEgPDwgMzEpCi0vKiogU2VsZWN0cyBwaXBlIEIgZm9yIExWRFMgZGF0YS4gIE11c3QgYmUgc2V0IG9uIHByZS05NjUuICovCi0jIGRlZmluZSBMVkRTX1BJUEVCX1NFTEVDVAkJKDEgPDwgMzApCi0KLS8qKgotICogRW5hYmxlcyB0aGUgQTAtQTIgZGF0YSBwYWlycyBhbmQgQ0xLQSwgY29udGFpbmluZyAxOCBiaXRzIG9mIGNvbG9yIGRhdGEgcGVyCi0gKiBwaXhlbC4KLSAqLwotIyBkZWZpbmUgTFZEU19BMEEyX0NMS0FfUE9XRVJfTUFTSwkoMyA8PCA4KQotIyBkZWZpbmUgTFZEU19BMEEyX0NMS0FfUE9XRVJfRE9XTgkoMCA8PCA4KQotIyBkZWZpbmUgTFZEU19BMEEyX0NMS0FfUE9XRVJfVVAJKDMgPDwgOCkKLS8qKgotICogQ29udHJvbHMgdGhlIEEzIGRhdGEgcGFpciwgd2hpY2ggY29udGFpbnMgdGhlIGFkZGl0aW9uYWwgTFNCcyBmb3IgMjQgYml0Ci0gKiBtb2RlLiAgT25seSBlbmFibGVkIGlmIExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIGFsc28gaW5kaWNhdGVzIGl0IHNob3VsZCBiZQotICogb24uCi0gKi8KLSMgZGVmaW5lIExWRFNfQTNfUE9XRVJfTUFTSwkJKDMgPDwgNikKLSMgZGVmaW5lIExWRFNfQTNfUE9XRVJfRE9XTgkJKDAgPDwgNikKLSMgZGVmaW5lIExWRFNfQTNfUE9XRVJfVVAJCSgzIDw8IDYpCi0vKioKLSAqIENvbnRyb2xzIHRoZSBDTEtCIHBhaXIuICBUaGlzIHNob3VsZCBvbmx5IGJlIHNldCB3aGVuIExWRFNfQjBCM19QT1dFUl9VUAotICogaXMgc2V0LgotICovCi0jIGRlZmluZSBMVkRTX0NMS0JfUE9XRVJfTUFTSwkJKDMgPDwgNCkKLSMgZGVmaW5lIExWRFNfQ0xLQl9QT1dFUl9ET1dOCQkoMCA8PCA0KQotIyBkZWZpbmUgTFZEU19DTEtCX1BPV0VSX1VQCQkoMyA8PCA0KQotCi0vKioKLSAqIENvbnRyb2xzIHRoZSBCMC1CMyBkYXRhIHBhaXJzLiAgVGhpcyBtdXN0IGJlIHNldCB0byBtYXRjaCB0aGUgRFBMTCBwMgotICogc2V0dGluZyBmb3Igd2hldGhlciB3ZSBhcmUgaW4gZHVhbC1jaGFubmVsIG1vZGUuICBUaGUgQjMgcGFpciB3aWxsCi0gKiBhZGRpdGlvbmFsbHkgb25seSBiZSBwb3dlcmVkIHVwIHdoZW4gTFZEU19BM19QT1dFUl9VUCBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIExWRFNfQjBCM19QT1dFUl9NQVNLCQkoMyA8PCAyKQotIyBkZWZpbmUgTFZEU19CMEIzX1BPV0VSX0RPV04JCSgwIDw8IDIpCi0jIGRlZmluZSBMVkRTX0IwQjNfUE9XRVJfVVAJCSgzIDw8IDIpCi0KLSNkZWZpbmUgUElQRUFDT05GIDB4NzAwMDgKLSNkZWZpbmUgUElQRUFDT05GX0VOQUJMRQkoMTw8MzEpCi0jZGVmaW5lIFBJUEVBQ09ORl9ESVNBQkxFCTAKLSNkZWZpbmUgUElQRUFDT05GX0RPVUJMRV9XSURFCSgxPDwzMCkKLSNkZWZpbmUgSTk2NV9QSVBFQ09ORl9BQ1RJVkUJKDE8PDMwKQotI2RlZmluZSBQSVBFQUNPTkZfU0lOR0xFX1dJREUJMAotI2RlZmluZSBQSVBFQUNPTkZfUElQRV9VTkxPQ0tFRCAwCi0jZGVmaW5lIFBJUEVBQ09ORl9QSVBFX0xPQ0tFRAkoMTw8MjUpCi0jZGVmaW5lIFBJUEVBQ09ORl9QQUxFVFRFCTAKLSNkZWZpbmUgUElQRUFDT05GX0dBTU1BCQkoMTw8MjQpCi0jZGVmaW5lIFBJUEVDT05GX0ZPUkNFX0JPUkRFUgkoMTw8MjUpCi0jZGVmaW5lIFBJUEVDT05GX1BST0dSRVNTSVZFCSgwIDw8IDIxKQotI2RlZmluZSBQSVBFQ09ORl9JTlRFUkxBQ0VfV19GSUVMRF9JTkRJQ0FUSU9OCSg2IDw8IDIxKQotI2RlZmluZSBQSVBFQ09ORl9JTlRFUkxBQ0VfRklFTERfMF9PTkxZCQkoNyA8PCAyMSkKLQotI2RlZmluZSBEU1BBUkIJICAweDcwMDMwCi0jZGVmaW5lIERTUEFSQl9DU1RBUlRfTUFTSwkoMHg3ZiA8PCA3KQotI2RlZmluZSBEU1BBUkJfQ1NUQVJUX1NISUZUCTcKLSNkZWZpbmUgRFNQQVJCX0JTVEFSVF9NQVNLCSgweDdmKQkJIAotI2RlZmluZSBEU1BBUkJfQlNUQVJUX1NISUZUCTAKLQotI2RlZmluZSBQSVBFQkNPTkYgMHg3MTAwOAotI2RlZmluZSBQSVBFQkNPTkZfRU5BQkxFCSgxPDwzMSkKLSNkZWZpbmUgUElQRUJDT05GX0RJU0FCTEUJMAotI2RlZmluZSBQSVBFQkNPTkZfRE9VQkxFX1dJREUJKDE8PDMwKQotI2RlZmluZSBQSVBFQkNPTkZfRElTQUJMRQkwCi0jZGVmaW5lIFBJUEVCQ09ORl9HQU1NQQkJKDE8PDI0KQotI2RlZmluZSBQSVBFQkNPTkZfUEFMRVRURQkwCi0KLSNkZWZpbmUgUElQRUJHQ01BWFJFRAkJMHg3MTAxMAotI2RlZmluZSBQSVBFQkdDTUFYR1JFRU4JCTB4NzEwMTQKLSNkZWZpbmUgUElQRUJHQ01BWEJMVUUJCTB4NzEwMTgKLSNkZWZpbmUgUElQRUJTVEFUCQkweDcxMDI0Ci0jZGVmaW5lIFBJUEVCRlJBTUVISUdICQkweDcxMDQwCi0jZGVmaW5lIFBJUEVCRlJBTUVQSVhFTAkJMHg3MTA0NAotCi0jZGVmaW5lIERTUEFDTlRSCQkweDcwMTgwCi0jZGVmaW5lIERTUEJDTlRSCQkweDcxMTgwCi0jZGVmaW5lIERJU1BMQVlfUExBTkVfRU5BQkxFCQkJKDE8PDMxKQotI2RlZmluZSBESVNQTEFZX1BMQU5FX0RJU0FCTEUJCQkwCi0jZGVmaW5lIERJU1BQTEFORV9HQU1NQV9FTkFCTEUJCQkoMTw8MzApCi0jZGVmaW5lIERJU1BQTEFORV9HQU1NQV9ESVNBQkxFCQkJMAotI2RlZmluZSBESVNQUExBTkVfUElYRk9STUFUX01BU0sJCSgweGY8PDI2KQotI2RlZmluZSBESVNQUExBTkVfOEJQUAkJCQkoMHgyPDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzE1XzE2QlBQCQkJKDB4NDw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV8xNkJQUAkJCQkoMHg1PDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzMyQlBQX05PX0FMUEhBCQkoMHg2PDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzMyQlBQCQkJCSgweDc8PDI2KQotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX0VOQUJMRQkJCSgxPDwyNSkKLSNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19ESVNBQkxFCQkwCi0jZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9NQVNLCQkJKDE8PDI0KQotI2RlZmluZSBESVNQUExBTkVfU0VMX1BJUEVfQQkJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX0IJCQkoMTw8MjQpCi0jZGVmaW5lIERJU1BQTEFORV9TUkNfS0VZX0VOQUJMRQkJKDE8PDIyKQotI2RlZmluZSBESVNQUExBTkVfU1JDX0tFWV9ESVNBQkxFCQkwCi0jZGVmaW5lIERJU1BQTEFORV9MSU5FX0RPVUJMRQkJCSgxPDwyMCkKLSNkZWZpbmUgRElTUFBMQU5FX05PX0xJTkVfRE9VQkxFCQkwCi0jZGVmaW5lIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfRklSU1QJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9TRUNPTkQJKDE8PDE4KQotLyogcGxhbmUgQiBvbmx5ICovCi0jZGVmaW5lIERJU1BQTEFORV9BTFBIQV9UUkFOU19FTkFCTEUJCSgxPDwxNSkKLSNkZWZpbmUgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NQUklURV9BQk9WRV9ESVNQTEFZQQkJMAotI2RlZmluZSBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX09WRVJMQVkJCSgxKQotCi0jZGVmaW5lIERTUEFCQVNFCQkweDcwMTg0Ci0jZGVmaW5lIERTUEFTVFJJREUJCTB4NzAxODgKLQotI2RlZmluZSBEU1BCQkFTRQkJMHg3MTE4NAotI2RlZmluZSBEU1BCQUREUgkJRFNQQkJBU0UKLSNkZWZpbmUgRFNQQlNUUklERQkJMHg3MTE4OAotCi0jZGVmaW5lIERTUEFLRVlWQUwJCTB4NzAxOTQKLSNkZWZpbmUgRFNQQUtFWU1BU0sJCTB4NzAxOTgKLQotI2RlZmluZSBEU1BBUE9TCQkJMHg3MDE4QyAvKiByZXNlcnZlZCAqLwotI2RlZmluZSBEU1BBU0laRQkJMHg3MDE5MAotI2RlZmluZSBEU1BCUE9TCQkJMHg3MTE4QwotI2RlZmluZSBEU1BCU0laRQkJMHg3MTE5MAotCi0jZGVmaW5lIERTUEFTVVJGCQkweDcwMTlDCi0jZGVmaW5lIERTUEFUSUxFT0ZGCQkweDcwMUE0Ci0KLSNkZWZpbmUgRFNQQlNVUkYJCTB4NzExOUMKLSNkZWZpbmUgRFNQQlRJTEVPRkYJCTB4NzExQTQKLQotI2RlZmluZSBWR0FDTlRSTAkJMHg3MTQwMAotIyBkZWZpbmUgVkdBX0RJU1BfRElTQUJMRQkJCSgxIDw8IDMxKQotIyBkZWZpbmUgVkdBXzJYX01PREUJCQkJKDEgPDwgMzApCi0jIGRlZmluZSBWR0FfUElQRV9CX1NFTEVDVAkJCSgxIDw8IDI5KQotCi0vKgotICogU29tZSBCSU9TIHNjcmF0Y2ggYXJlYSByZWdpc3RlcnMuICBUaGUgODQ1IChhbmQgODMwPykgc3RvcmUgdGhlIGFtb3VudAotICogb2YgdmlkZW8gbWVtb3J5IGF2YWlsYWJsZSB0byB0aGUgQklPUyBpbiBTV0YxLgotICovCi0KLSNkZWZpbmUgU1dGMAkJCTB4NzE0MTAKLQotLyoKLSAqIDg1NSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAqLwotI2RlZmluZSBTV0YxMAkJCTB4NzA0MTAKLQotI2RlZmluZSBTV0YzMAkJCTB4NzI0MTQKLQotLyoKLSAqIE92ZXJsYXkgcmVnaXN0ZXJzLiAgVGhlc2UgYXJlIG92ZXJsYXkgcmVnaXN0ZXJzIGFjY2Vzc2VkIHZpYSBNTUlPLgotICogVGhvc2UgbG9hZGVkIHZpYSB0aGUgb3ZlcmxheSByZWdpc3RlciBwYWdlIGFyZSBkZWZpbmVkIGluIGk4MzBfdmlkZW8uYy4KLSAqLwotI2RlZmluZSBPVkFERAkJCTB4MzAwMDAKLQotI2RlZmluZSBET1ZTVEEJCQkweDMwMDA4Ci0jZGVmaW5lIE9DX0JVRgkJCSgweDM8PDIwKQotCi0jZGVmaW5lIE9HQU1DNQkJCTB4MzAwMTAKLSNkZWZpbmUgT0dBTUM0CQkJMHgzMDAxNAotI2RlZmluZSBPR0FNQzMJCQkweDMwMDE4Ci0jZGVmaW5lIE9HQU1DMgkJCTB4MzAwMWMKLSNkZWZpbmUgT0dBTUMxCQkJMHgzMDAyMAotI2RlZmluZSBPR0FNQzAJCQkweDMwMDI0Ci0vKgotICogUGFsZXR0ZSByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBQQUxFVFRFX0EJCTB4MGEwMDAKLSNkZWZpbmUgUEFMRVRURV9CCQkweDBhODAwCitleHRlcm4gaW50IGk5MTVfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKTsKIAogI2RlZmluZSBJU19JODMwKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MzU3NykKICNkZWZpbmUgSVNfODQ1RyhkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1NjIpCkBAIC0xMTE5LDcgKzYzOSw3IEBACiAKICNkZWZpbmUgSVNfSTk2NUdNKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkEwMikKIAotI2RlZmluZSBJU19JR0RfR00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyKQorI2RlZmluZSBJU19HTTQ1KGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkE0MikKIAogI2RlZmluZSBJU19HNFgoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTAyIHx8IFwKIAkJICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMTIgfHwgXApAQCAtMTEzMyw5ICs2NTMsOSBAQAogCQkgICAgICBJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1RyhkZXYpIHx8IElTX0czMyhkZXYpKQogCiAjZGVmaW5lIElTX01PQklMRShkZXYpIChJU19JODMwKGRldikgfHwgSVNfSTg1WChkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8IFwKLQkJCUlTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHTShkZXYpIHx8IElTX0lHRF9HTShkZXYpKQorCQkJSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpKQogCi0jZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikgKElTX0czMyhkZXYpIHx8IElTX0lHRF9HTShkZXYpIHx8IElTX0c0WChkZXYpKQorI2RlZmluZSBJOTE1X05FRURfR0ZYX0hXUyhkZXYpIChJU19HMzMoZGV2KSB8fCBJU19HTTQ1KGRldikgfHwgSVNfRzRYKGRldikpCiAKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWUzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0wLDAgKzEsMjU3MCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICAgIHVpbnQzMl90IHJlYWRfZG9tYWlucywKKwkJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pOworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkgdWludDY0X3Qgc2l6ZSwKKwkJCQkgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJCSB1aW50MzJfdCB3cml0ZV9kb21haW4pOworc3RhdGljIGludAoraTkxNV9nZW1fc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluKTsKK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworaW50CitpOTE1X2dlbV9pbml0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgKmFyZ3MgPSBkYXRhOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaWYgKGFyZ3MtPmd0dF9zdGFydCA+PSBhcmdzLT5ndHRfZW5kIHx8CisJICAgIChhcmdzLT5ndHRfc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDAgfHwKKwkgICAgKGFyZ3MtPmd0dF9lbmQgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLCBhcmdzLT5ndHRfc3RhcnQsCisJICAgIGFyZ3MtPmd0dF9lbmQgLSBhcmdzLT5ndHRfc3RhcnQpOworCisJZGV2LT5ndHRfdG90YWwgPSAodWludDMyX3QpIChhcmdzLT5ndHRfZW5kIC0gYXJncy0+Z3R0X3N0YXJ0KTsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IG1tIG9iamVjdCBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBpdC4KKyAqLworaW50CitpOTE1X2dlbV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCBoYW5kbGUsIHJldDsKKworCWFyZ3MtPnNpemUgPSByb3VuZHVwKGFyZ3MtPnNpemUsIFBBR0VfU0laRSk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCAqLworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2FsbG9jKGRldiwgYXJncy0+c2l6ZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIG9iaiwgJmhhbmRsZSk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFJlYWRzIGRhdGEgZnJvbSB0aGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgaGFuZGxlLgorICoKKyAqIE9uIGVycm9yLCB0aGUgY29udGVudHMgb2YgKmRhdGEgYXJlIHVuZGVmaW5lZC4KKyAqLworaW50CitpOTE1X2dlbV9wcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzc2l6ZV90IHJlYWQ7CisJbG9mZl90IG9mZnNldDsKKwlpbnQgcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBCb3VuZHMgY2hlY2sgc291cmNlLgorCSAqCisJICogWFhYOiBUaGlzIGNvdWxkIHVzZSByZXZpZXcgZm9yIG92ZXJmbG93IGlzc3Vlcy4uLgorCSAqLworCWlmIChhcmdzLT5vZmZzZXQgPiBvYmotPnNpemUgfHwgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSB8fAorCSAgICBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplID4gb2JqLT5zaXplKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluX3JhbmdlKG9iaiwgYXJncy0+b2Zmc2V0LCBhcmdzLT5zaXplLAorCQkJCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKworCXJlYWQgPSB2ZnNfcmVhZChvYmotPmZpbHAsIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCisJCQlhcmdzLT5zaXplLCAmb2Zmc2V0KTsKKwlpZiAocmVhZCAhPSBhcmdzLT5zaXplKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAocmVhZCA8IDApCisJCQlyZXR1cm4gcmVhZDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVHJ5IHRvIHdyaXRlIHF1aWNrbHkgd2l0aCBhbiBhdG9taWMga21hcC4gUmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KKyAqCisgKiBJZiB0aGlzIGZhaWxzICh3aGljaCBpbmNsdWRlcyBhIHBhcnRpYWwgd3JpdGUpLCB3ZSdsbCByZWRvIHRoZSB3aG9sZQorICogdGhpbmcgd2l0aCB0aGUgc2xvdyB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgbG93IHBlcmZvcm1hbmNlIG9mIGlvdW5tYXAgKGFwcHJveGltYXRlCisgKiAxMCUgY3B1IGNvc3Qgb24gbm9ybWFsIDNEIHdvcmtsb2FkcykuICBrbWFwX2F0b21pYyBvbiBISUdITUVNIGtlcm5lbHMKKyAqIGhhcHBlbnMgdG8gbGV0IHVzIG1hcCBjYXJkIG1lbW9yeSB3aXRob3V0IHRha2luZyBJUElzLiAgV2hlbiB0aGUgdm1hcAorICogcmV3b3JrIGxhbmRzIHdlIHNob3VsZCBiZSBhYmxlIHRvIGR1bXAgdGhpcyBoYWNrLgorICovCitzdGF0aWMgaW5saW5lIGludCBmYXN0X3VzZXJfd3JpdGUodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgX191c2VyICp1c2VyX2RhdGEsCisJCQkJICBpbnQgbCwgaW50IG8pCit7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwl1bnNpZ25lZCBsb25nIHVud3JpdHRlbjsKKwljaGFyICp2YWRkcl9hdG9taWM7CisKKwl2YWRkcl9hdG9taWMgPSBrbWFwX2F0b21pY19wZm4ocGZuLCBLTV9VU0VSMCk7CisjaWYgV0FUQ0hfUFdSSVRFCisJRFJNX0lORk8oInB3cml0ZSBpICVkIG8gJWQgbCAlZCBwZm4gJWxkIHZhZGRyICVwXG4iLAorCQkgaSwgbywgbCwgcGZuLCB2YWRkcl9hdG9taWMpOworI2VuZGlmCisJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pY19ub2NhY2hlKHZhZGRyX2F0b21pYyArIG8sIHVzZXJfZGF0YSwgbCk7CisJa3VubWFwX2F0b21pYyh2YWRkcl9hdG9taWMsIEtNX1VTRVIwKTsKKwlyZXR1cm4gIXVud3JpdHRlbjsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fZ3R0X3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlzc2l6ZV90IHJlbWFpbjsKKwlsb2ZmX3Qgb2Zmc2V0OworCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwl1c2VyX2RhdGEgPSAoY2hhciBfX3VzZXIgKikgKHVpbnRwdHJfdCkgYXJncy0+ZGF0YV9wdHI7CisJcmVtYWluID0gYXJncy0+c2l6ZTsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNlcl9kYXRhLCByZW1haW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCAwKTsKKwlpZiAocmV0KSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBpOTE1X2dlbV9zZXRfZG9tYWluKG9iaiwgZmlsZV9wcml2LAorCQkJCSAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgYXJncy0+b2Zmc2V0OworCW9ial9wcml2LT5kaXJ0eSA9IDE7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQl1bnNpZ25lZCBsb25nIHBmbjsKKwkJaW50IGksIG8sIGw7CisKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBpID0gcGFnZSBudW1iZXIKKwkJICogbyA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBsID0gYnl0ZXMgdG8gY29weQorCQkgKi8KKwkJaSA9IG9mZnNldCA+PiBQQUdFX1NISUZUOworCQlvID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJbCA9IHJlbWFpbjsKKwkJaWYgKChvICsgbCkgPiBQQUdFX1NJWkUpCisJCQlsID0gUEFHRV9TSVpFIC0gbzsKKworCQlwZm4gPSAoZGV2LT5hZ3AtPmJhc2UgPj4gUEFHRV9TSElGVCkgKyBpOworCisJCWlmICghZmFzdF91c2VyX3dyaXRlKHBmbiwgdXNlcl9kYXRhLCBsLCBvKSkgeworCQkJdW5zaWduZWQgbG9uZyB1bndyaXR0ZW47CisJCQljaGFyIF9faW9tZW0gKnZhZGRyOworCisJCQl2YWRkciA9IGlvcmVtYXBfd2MocGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CisjaWYgV0FUQ0hfUFdSSVRFCisJCQlEUk1fSU5GTygicHdyaXRlIHNsb3cgaSAlZCBvICVkIGwgJWQgIgorCQkJCSAicGZuICVsZCB2YWRkciAlcFxuIiwKKwkJCQkgaSwgbywgbCwgcGZuLCB2YWRkcik7CisjZW5kaWYKKwkJCWlmICh2YWRkciA9PSBOVUxMKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyKHZhZGRyICsgbywgdXNlcl9kYXRhLCBsKTsKKyNpZiBXQVRDSF9QV1JJVEUKKwkJCURSTV9JTkZPKCJ1bndyaXR0ZW4gJWxkXG4iLCB1bndyaXR0ZW4pOworI2VuZGlmCisJCQlpb3VubWFwKHZhZGRyKTsKKwkJCWlmICh1bndyaXR0ZW4pIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfQorCisJCXJlbWFpbiAtPSBsOworCQl1c2VyX2RhdGEgKz0gbDsKKwkJb2Zmc2V0ICs9IGw7CisJfQorI2lmIFdBVENIX1BXUklURSAmJiAxCisJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwlpOTE1X2dlbV9kdW1wX29iamVjdChvYmosIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUsIF9fZnVuY19fLCB+MCk7CisJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKyNlbmRpZgorCitmYWlsOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fc2htZW1fcHdyaXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJaW50IHJldDsKKwlsb2ZmX3Qgb2Zmc2V0OworCXNzaXplX3Qgd3JpdHRlbjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX3NldF9kb21haW4ob2JqLCBmaWxlX3ByaXYsCisJCQkJICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwlpZiAocmV0KSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKworCXdyaXR0ZW4gPSB2ZnNfd3JpdGUob2JqLT5maWxwLAorCQkJICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyLAorCQkJICAgIGFyZ3MtPnNpemUsICZvZmZzZXQpOworCWlmICh3cml0dGVuICE9IGFyZ3MtPnNpemUpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmICh3cml0dGVuIDwgMCkKKwkJCXJldHVybiB3cml0dGVuOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFdyaXRlcyBkYXRhIHRvIHRoZSBvYmplY3QgcmVmZXJlbmNlZCBieSBoYW5kbGUuCisgKgorICogT24gZXJyb3IsIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHRoYXQgd2VyZSB0byBiZSBtb2RpZmllZCBhcmUgdW5kZWZpbmVkLgorICovCitpbnQKK2k5MTVfZ2VtX3B3cml0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCByZXQgPSAwOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBCb3VuZHMgY2hlY2sgZGVzdGluYXRpb24uCisJICoKKwkgKiBYWFg6IFRoaXMgY291bGQgdXNlIHJldmlldyBmb3Igb3ZlcmZsb3cgaXNzdWVzLi4uCisJICovCisJaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+c2l6ZSB8fCBhcmdzLT5zaXplID4gb2JqLT5zaXplIHx8CisJICAgIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUgPiBvYmotPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2UgY2FuIG9ubHkgZG8gdGhlIEdUVCBwd3JpdGUgb24gdW50aWxlZCBidWZmZXJzLCBhcyBvdGhlcndpc2UKKwkgKiBpdCB3b3VsZCBlbmQgdXAgZ29pbmcgdGhyb3VnaCB0aGUgZmVuY2VkIGFjY2VzcywgYW5kIHdlJ2xsIGdldAorCSAqIGRpZmZlcmVudCBkZXRpbGluZyBiZWhhdmlvciBiZXR3ZWVuIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisJICogcHJlYWQvcHdyaXRlIGN1cnJlbnRseSBhcmUgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tIHRoZSBDUFUKKwkgKiBwZXJzcGVjdGl2ZSwgcmVxdWlyaW5nIG1hbnVhbCBkZXRpbGluZyBieSB0aGUgY2xpZW50LgorCSAqLworCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSAmJgorCSAgICBkZXYtPmd0dF90b3RhbCAhPSAwKQorCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCWVsc2UKKwkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCisjaWYgV0FUQ0hfUFdSSVRFCisJaWYgKHJldCkKKwkJRFJNX0lORk8oInB3cml0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisjZW5kaWYKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHVzZXIgc3BhY2UgcHJlcGFyZXMgdG8gdXNlIGFuIG9iamVjdAorICovCitpbnQKK2k5MTVfZ2VtX3NldF9kb21haW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oInNldF9kb21haW5faW9jdGwgJXAoJWQpLCAlMDh4ICUwOHhcbiIsCisJCSBvYmosIG9iai0+c2l6ZSwgYXJncy0+cmVhZF9kb21haW5zLCBhcmdzLT53cml0ZV9kb21haW4pOworI2VuZGlmCisJcmV0ID0gaTkxNV9nZW1fc2V0X2RvbWFpbihvYmosIGZpbGVfcHJpdiwKKwkJCQkgIGFyZ3MtPnJlYWRfZG9tYWlucywgYXJncy0+d3JpdGVfZG9tYWluKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gdXNlciBzcGFjZSBoYXMgZG9uZSB3cml0ZXMgdG8gdGhpcyBidWZmZXIKKyAqLworaW50CitpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiJXM6IHN3X2ZpbmlzaCAlZCAoJXAgJWQpXG4iLAorCQkgX19mdW5jX18sIGFyZ3MtPmhhbmRsZSwgb2JqLCBvYmotPnNpemUpOworI2VuZGlmCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogUGlubmVkIGJ1ZmZlcnMgbWF5IGJlIHNjYW5vdXQsIHNvIGZsdXNoIHRoZSBjYWNoZSAqLworCWlmICgob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSAmJiBvYmpfcHJpdi0+cGluX2NvdW50KSB7CisJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisJCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOworCX0KKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogTWFwcyB0aGUgY29udGVudHMgb2YgYW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlIGFkZHJlc3MgaXQgaXMgbWFwcGVkCisgKiBpbnRvLgorICoKKyAqIFdoaWxlIHRoZSBtYXBwaW5nIGhvbGRzIGEgcmVmZXJlbmNlIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LCBpdCBkb2Vzbid0CisgKiBpbXBseSBhIHJlZiBvbiB0aGUgb2JqZWN0IGl0c2VsZi4KKyAqLworaW50CitpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJbG9mZl90IG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJYWRkciA9IGRvX21tYXAob2JqLT5maWxwLCAwLCBhcmdzLT5zaXplLAorCQkgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKwkJICAgICAgIGFyZ3MtPm9mZnNldCk7CisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKElTX0VSUigodm9pZCAqKWFkZHIpKQorCQlyZXR1cm4gYWRkcjsKKworCWFyZ3MtPmFkZHJfcHRyID0gKHVpbnQ2NF90KSBhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwlpbnQgaTsKKworCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0ID09IE5VTEwpCisJCXJldHVybjsKKworCisJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykKKwkJaWYgKG9ial9wcml2LT5wYWdlX2xpc3RbaV0gIT0gTlVMTCkgeworCQkJaWYgKG9ial9wcml2LT5kaXJ0eSkKKwkJCQlzZXRfcGFnZV9kaXJ0eShvYmpfcHJpdi0+cGFnZV9saXN0W2ldKTsKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChvYmpfcHJpdi0+cGFnZV9saXN0W2ldKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvYmpfcHJpdi0+cGFnZV9saXN0W2ldKTsKKwkJfQorCW9ial9wcml2LT5kaXJ0eSA9IDA7CisKKwlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZV9saXN0LAorCQkgcGFnZV9jb3VudCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwlvYmpfcHJpdi0+cGFnZV9saXN0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIEFkZCBhIHJlZmVyZW5jZSBpZiB3ZSdyZSBuZXdseSBlbnRlcmluZyB0aGUgYWN0aXZlIGxpc3QuICovCisJaWYgKCFvYmpfcHJpdi0+YWN0aXZlKSB7CisJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQlvYmpfcHJpdi0+YWN0aXZlID0gMTsKKwl9CisJLyogTW92ZSBmcm9tIHdoYXRldmVyIGxpc3Qgd2Ugd2VyZSBvbiB0byB0aGUgdGFpbCBvZiBleGVjdXRpb24uICovCisJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5saXN0LAorCQkgICAgICAgJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7Cit9CisKKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApCisJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKwllbHNlCisJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KTsKKworCWlmIChvYmpfcHJpdi0+YWN0aXZlKSB7CisJCW9ial9wcml2LT5hY3RpdmUgPSAwOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCX0KKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyBzZXF1ZW5jZSBudW1iZXIsIGVtaXR0aW5nIGEgd3JpdGUgb2YgaXQgdG8gdGhlIHN0YXR1cyBwYWdlCisgKiBwbHVzIGFuIGludGVycnVwdCwgd2hpY2ggd2lsbCB0cmlnZ2VyIGk5MTVfdXNlcl9pbnRlcnJ1cHRfaGFuZGxlci4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHN0cnVjdF9sb2NrIGhlbGQuCisgKgorICogUmV0dXJuZWQgc2VxdWVuY2UgbnVtYmVycyBhcmUgbm9uemVybyBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgdWludDMyX3QKK2k5MTVfYWRkX3JlcXVlc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgZmx1c2hfZG9tYWlucykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisJdWludDMyX3Qgc2Vxbm87CisJaW50IHdhc19lbXB0eTsKKwlSSU5HX0xPQ0FMUzsKKworCXJlcXVlc3QgPSBkcm1fY2FsbG9jKDEsIHNpemVvZigqcmVxdWVzdCksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAocmVxdWVzdCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIEdyYWIgdGhlIHNlcW5vIHdlJ3JlIGdvaW5nIHRvIG1ha2UgdGhpcyByZXF1ZXN0IGJlLCBhbmQgYnVtcCB0aGUKKwkgKiBuZXh0IChza2lwcGluZyAwIHNvIGl0IGNhbiBiZSB0aGUgcmVzZXJ2ZWQgbm8tc2Vxbm8gdmFsdWUpLgorCSAqLworCXNlcW5vID0gZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vOworCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubysrOworCWlmIChkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gPT0gMCkKKwkJZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vKys7CisKKwlCRUdJTl9MUF9SSU5HKDQpOworCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlPVVRfUklORyhJOTE1X0dFTV9IV1NfSU5ERVggPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOworCU9VVF9SSU5HKHNlcW5vKTsKKworCU9VVF9SSU5HKE1JX1VTRVJfSU5URVJSVVBUKTsKKwlBRFZBTkNFX0xQX1JJTkcoKTsKKworCURSTV9ERUJVRygiJWRcbiIsIHNlcW5vKTsKKworCXJlcXVlc3QtPnNlcW5vID0gc2Vxbm87CisJcmVxdWVzdC0+ZW1pdHRlZF9qaWZmaWVzID0gamlmZmllczsKKwlyZXF1ZXN0LT5mbHVzaF9kb21haW5zID0gZmx1c2hfZG9tYWluczsKKwl3YXNfZW1wdHkgPSBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saXN0LCAmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7CisKKwlpZiAod2FzX2VtcHR5ICYmICFkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yaywgSFopOworCXJldHVybiBzZXFubzsKK30KKworLyoqCisgKiBDb21tYW5kIGV4ZWN1dGlvbiBiYXJyaWVyCisgKgorICogRW5zdXJlcyB0aGF0IGFsbCBjb21tYW5kcyBpbiB0aGUgcmluZyBhcmUgZmluaXNoZWQKKyAqIGJlZm9yZSBzaWduYWxsaW5nIHRoZSBDUFUKKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X3JldGlyZV9jb21tYW5kcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGNtZCA9IE1JX0ZMVVNIIHwgTUlfTk9fV1JJVEVfRkxVU0g7CisJdWludDMyX3QgZmx1c2hfZG9tYWlucyA9IDA7CisJUklOR19MT0NBTFM7CisKKwkvKiBUaGUgc2FtcGxlciBhbHdheXMgZ2V0cyBmbHVzaGVkIG9uIGk5NjUgKHNpZ2gpICovCisJaWYgKElTX0k5NjVHKGRldikpCisJCWZsdXNoX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7CisJQkVHSU5fTFBfUklORygyKTsKKwlPVVRfUklORyhjbWQpOworCU9VVF9SSU5HKDApOyAvKiBub29wICovCisJQURWQU5DRV9MUF9SSU5HKCk7CisJcmV0dXJuIGZsdXNoX2RvbWFpbnM7Cit9CisKKy8qKgorICogTW92ZXMgYnVmZmVycyBhc3NvY2lhdGVkIG9ubHkgd2l0aCB0aGUgZ2l2ZW4gYWN0aXZlIHNlcW5vIGZyb20gdGhlIGFjdGl2ZQorICogdG8gaW5hY3RpdmUgbGlzdCwgcG90ZW50aWFsbHkgZnJlZWluZyB0aGVtLgorICovCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fcmV0aXJlX3JlcXVlc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCS8qIE1vdmUgYW55IGJ1ZmZlcnMgb24gdGhlIGFjdGl2ZSBsaXN0IHRoYXQgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkCisJICogYnkgdGhlIHJpbmdidWZmZXIgdG8gdGhlIGZsdXNoaW5nL2luYWN0aXZlIGxpc3RzIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSkgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCSAgICBsaXN0KTsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQkvKiBJZiB0aGUgc2Vxbm8gYmVpbmcgcmV0aXJlZCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRlc3QgaW4gdGhlCisJCSAqIGxpc3QsIHRoZW4gdGhlIG9sZGVzdCBpbiB0aGUgbGlzdCBtdXN0IHN0aWxsIGJlIG5ld2VyIHRoYW4KKwkJICogdGhpcyBzZXFuby4KKwkJICovCisJCWlmIChvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gIT0gcmVxdWVzdC0+c2Vxbm8pCisJCQlyZXR1cm47CisjaWYgV0FUQ0hfTFJVCisJCURSTV9JTkZPKCIlczogcmV0aXJlICVkIG1vdmVzIHRvIGluYWN0aXZlIGxpc3QgJXBcbiIsCisJCQkgX19mdW5jX18sIHJlcXVlc3QtPnNlcW5vLCBvYmopOworI2VuZGlmCisKKwkJaWYgKG9iai0+d3JpdGVfZG9tYWluICE9IDApIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJCQkgICAgICAgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CisJCX0KKwl9CisKKwlpZiAocmVxdWVzdC0+Zmx1c2hfZG9tYWlucyAhPSAwKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiwgKm5leHQ7CisKKwkJLyogQ2xlYXIgdGhlIHdyaXRlIGRvbWFpbiBhbmQgYWN0aXZpdHkgZnJvbSBhbnkgYnVmZmVycworCQkgKiB0aGF0IGFyZSBqdXN0IHdhaXRpbmcgZm9yIGEgZmx1c2ggbWF0Y2hpbmcgdGhlIG9uZSByZXRpcmVkLgorCQkgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9ial9wcml2LCBuZXh0LAorCQkJCQkgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LCBsaXN0KSB7CisJCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIHJlcXVlc3QtPmZsdXNoX2RvbWFpbnMpIHsKKwkJCQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJCQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqKTsKKwkJCX0KKwkJfQorCisJfQorfQorCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiBzZXExIGlzIGxhdGVyIHRoYW4gc2VxMi4KKyAqLworc3RhdGljIGludAoraTkxNV9zZXFub19wYXNzZWQodWludDMyX3Qgc2VxMSwgdWludDMyX3Qgc2VxMikKK3sKKwlyZXR1cm4gKGludDMyX3QpKHNlcTEgLSBzZXEyKSA+PSAwOworfQorCit1aW50MzJfdAoraTkxNV9nZXRfZ2VtX3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1cm4gUkVBRF9IV1NQKGRldl9wcml2LCBJOTE1X0dFTV9IV1NfSU5ERVgpOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSByZXF1ZXN0IGxpc3QgYXMgc2VxdWVuY2UgbnVtYmVycyBhcmUgcGFzc2VkLgorICovCit2b2lkCitpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBzZXFubzsKKworCXNlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKwkJdWludDMyX3QgcmV0aXJpbmdfc2Vxbm87CisKKwkJcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsCisJCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKKwkJCQkJICAgbGlzdCk7CisJCXJldGlyaW5nX3NlcW5vID0gcmVxdWVzdC0+c2Vxbm87CisKKwkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCByZXRpcmluZ19zZXFubykgfHwKKwkJICAgIGRldl9wcml2LT5tbS53ZWRnZWQpIHsKKwkJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0KGRldiwgcmVxdWVzdCk7CisKKwkJCWxpc3RfZGVsKCZyZXF1ZXN0LT5saXN0KTsKKwkJCWRybV9mcmVlKHJlcXVlc3QsIHNpemVvZigqcmVxdWVzdCksIERSTV9NRU1fRFJJVkVSKTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCWRldl9wcml2ID0gY29udGFpbmVyX29mKHdvcmssIGRybV9pOTE1X3ByaXZhdGVfdCwKKwkJCQltbS5yZXRpcmVfd29yay53b3JrKTsKKwlkZXYgPSBkZXZfcHJpdi0+ZGV2OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOworCWlmICghZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCAmJgorCSAgICAhbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLCBIWik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKKy8qKgorICogV2FpdHMgZm9yIGEgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHNpZ25hbGVkLCBhbmQgY2xlYW5zIHVwIHRoZQorICogcmVxdWVzdCBhbmQgb2JqZWN0IGxpc3RzIGFwcHJvcHJpYXRlbHkgZm9yIHRoYXQgZXZlbnQuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHNlcW5vKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQgPSAwOworCisJQlVHX09OKHNlcW5vID09IDApOworCisJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSwgc2Vxbm8pKSB7CisJCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IHNlcW5vOworCQlpOTE1X3VzZXJfaXJxX2dldChkZXYpOworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2X3ByaXYtPmlycV9xdWV1ZSwKKwkJCQkJICAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpLAorCQkJCQkJCQkgc2Vxbm8pIHx8CisJCQkJCSAgICAgICBkZXZfcHJpdi0+bW0ud2VkZ2VkKTsKKwkJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKKwkJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gMDsKKwl9CisJaWYgKGRldl9wcml2LT5tbS53ZWRnZWQpCisJCXJldCA9IC1FSU87CisKKwlpZiAocmV0ICYmIHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCURSTV9FUlJPUigiJXMgcmV0dXJucyAlZCAoYXdhaXRpbmcgJWQgYXQgJWQpXG4iLAorCQkJICBfX2Z1bmNfXywgcmV0LCBzZXFubywgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOworCisJLyogRGlyZWN0bHkgZGlzcGF0Y2ggcmVxdWVzdCByZXRpcmluZy4gIFdoaWxlIHdlIGhhdmUgdGhlIHdvcmsgcXVldWUKKwkgKiB0byBoYW5kbGUgdGhpcywgdGhlIHdhaXRlciBvbiBhIHJlcXVlc3Qgb2Z0ZW4gd2FudHMgYW4gYXNzb2NpYXRlZAorCSAqIGJ1ZmZlciB0byBoYXZlIG1hZGUgaXQgdG8gdGhlIGluYWN0aXZlIGxpc3QsIGFuZCB3ZSB3b3VsZCBuZWVkCisJICogYSBzZXBhcmF0ZSB3YWl0IHF1ZXVlIHRvIGhhbmRsZSB0aGF0LgorCSAqLworCWlmIChyZXQgPT0gMCkKKwkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkgICAgICAgdWludDMyX3QgaW52YWxpZGF0ZV9kb21haW5zLAorCSAgICAgICB1aW50MzJfdCBmbHVzaF9kb21haW5zKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGNtZDsKKwlSSU5HX0xPQ0FMUzsKKworI2lmIFdBVENIX0VYRUMKKwlEUk1fSU5GTygiJXM6IGludmFsaWRhdGUgJTA4eCBmbHVzaCAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJICBpbnZhbGlkYXRlX2RvbWFpbnMsIGZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisKKwlpZiAoZmx1c2hfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpCisJCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOworCisJaWYgKChpbnZhbGlkYXRlX2RvbWFpbnMgfCBmbHVzaF9kb21haW5zKSAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCQkgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCS8qCisJCSAqIHJlYWQvd3JpdGUgY2FjaGVzOgorCQkgKgorCQkgKiBJOTE1X0dFTV9ET01BSU5fUkVOREVSIGlzIGFsd2F5cyBpbnZhbGlkYXRlZCwgYnV0IGlzCisJCSAqIG9ubHkgZmx1c2hlZCBpZiBNSV9OT19XUklURV9GTFVTSCBpcyB1bnNldC4gIE9uIDk2NSwgaXQgaXMKKwkJICogYWxzbyBmbHVzaGVkIGF0IDJkIHZlcnN1cyAzZCBwaXBlbGluZSBzd2l0Y2hlcy4KKwkJICoKKwkJICogcmVhZC1vbmx5IGNhY2hlczoKKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIgaXMgZmx1c2hlZCBvbiBwcmUtOTY1IGlmCisJCSAqIE1JX1JFQURfRkxVU0ggaXMgc2V0LCBhbmQgaXMgYWx3YXlzIGZsdXNoZWQgb24gOTY1LgorCQkgKgorCQkgKiBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCBtYXkgbm90IGV4aXN0PworCQkgKgorCQkgKiBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCisJCSAqIGludmFsaWRhdGVkIHdoZW4gTUlfRVhFX0ZMVVNIIGlzIHNldC4KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgd2hpY2ggZXhpc3RzIG9uIDk2NSwgaXMKKwkJICogaW52YWxpZGF0ZWQgd2l0aCBldmVyeSBNSV9GTFVTSC4KKwkJICoKKwkJICogVExCczoKKwkJICoKKwkJICogT24gOTY1LCBUTEJzIGFzc29jaWF0ZWQgd2l0aCBJOTE1X0dFTV9ET01BSU5fQ09NTUFORAorCQkgKiBhbmQgSTkxNV9HRU1fRE9NQUlOX0NQVSBpbiBhcmUgaW52YWxpZGF0ZWQgYXQgUFRFIHdyaXRlIGFuZAorCQkgKiBJOTE1X0dFTV9ET01BSU5fUkVOREVSIGFuZCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUgorCQkgKiBhcmUgZmx1c2hlZCBhdCBhbnkgTUlfRkxVU0guCisJCSAqLworCisJCWNtZCA9IE1JX0ZMVVNIIHwgTUlfTk9fV1JJVEVfRkxVU0g7CisJCWlmICgoaW52YWxpZGF0ZV9kb21haW5zfGZsdXNoX2RvbWFpbnMpICYKKwkJICAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpCisJCQljbWQgJj0gfk1JX05PX1dSSVRFX0ZMVVNIOworCQlpZiAoIUlTX0k5NjVHKGRldikpIHsKKwkJCS8qCisJCQkgKiBPbiB0aGUgOTY1LCB0aGUgc2FtcGxlciBjYWNoZSBhbHdheXMgZ2V0cyBmbHVzaGVkCisJCQkgKiBhbmQgdGhpcyBiaXQgaXMgcmVzZXJ2ZWQuCisJCQkgKi8KKwkJCWlmIChpbnZhbGlkYXRlX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fU0FNUExFUikKKwkJCQljbWQgfD0gTUlfUkVBRF9GTFVTSDsKKwkJfQorCQlpZiAoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OKQorCQkJY21kIHw9IE1JX0VYRV9GTFVTSDsKKworI2lmIFdBVENIX0VYRUMKKwkJRFJNX0lORk8oIiVzOiBxdWV1ZSBmbHVzaCAlMDh4IHRvIHJpbmdcbiIsIF9fZnVuY19fLCBjbWQpOworI2VuZGlmCisJCUJFR0lOX0xQX1JJTkcoMik7CisJCU9VVF9SSU5HKGNtZCk7CisJCU9VVF9SSU5HKDApOyAvKiBub29wICovCisJCUFEVkFOQ0VfTFBfUklORygpOworCX0KK30KKworLyoqCisgKiBFbnN1cmVzIHRoYXQgYWxsIHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSBvYmplY3QgaXMKKyAqIHNhZmUgdG8gdW5iaW5kIGZyb20gdGhlIEdUVCBvciBhY2Nlc3MgZnJvbSB0aGUgQ1BVLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCS8qIElmIHRoZXJlIGFyZSB3cml0ZXMgcXVldWVkIHRvIHRoZSBidWZmZXIsIGZsdXNoIGFuZAorCSAqIGNyZWF0ZSBhIG5ldyBzZXFubyB0byB3YWl0IGZvci4KKwkgKi8KKwlpZiAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpIHsKKwkJdWludDMyX3Qgd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CisjaWYgV0FUQ0hfQlVGCisJCURSTV9JTkZPKCIlczogZmx1c2hpbmcgb2JqZWN0ICVwIGZyb20gd3JpdGUgZG9tYWluICUwOHhcbiIsCisJCQkgIF9fZnVuY19fLCBvYmosIHdyaXRlX2RvbWFpbik7CisjZW5kaWYKKwkJaTkxNV9nZW1fZmx1c2goZGV2LCAwLCB3cml0ZV9kb21haW4pOworCisJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmopOworCQlvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwKKwkJCQkJCQkJICB3cml0ZV9kb21haW4pOworCQlCVUdfT04ob2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID09IDApOworI2lmIFdBVENIX0xSVQorCQlEUk1fSU5GTygiJXM6IGZsdXNoIG1vdmVzIHRvIGV4ZWMgbGlzdCAlcFxuIiwgX19mdW5jX18sIG9iaik7CisjZW5kaWYKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyByZW5kZXJpbmcgcXVldWVkIG9uIHRoZSBidWZmZXIgYmVpbmcgZXZpY3RlZCwgd2FpdCBmb3IKKwkgKiBpdC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPmFjdGl2ZSkgeworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IG9iamVjdCAlcCB3YWl0IGZvciBzZXFubyAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywgb2JqLCBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworI2VuZGlmCisJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBVbmJpbmRzIGFuIG9iamVjdCBmcm9tIHRoZSBHVFQgYXBlcnR1cmUuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF91bmJpbmQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldCA9IDA7CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiJXM6JWQgJXBcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgb2JqKTsKKwlEUk1fSU5GTygiZ3R0X3NwYWNlICVwXG4iLCBvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKyNlbmRpZgorCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKG9ial9wcml2LT5waW5fY291bnQgIT0gMCkgeworCQlEUk1fRVJST1IoIkF0dGVtcHRpbmcgdG8gdW5iaW5kIHBpbm5lZCBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXYWl0IGZvciBhbnkgcmVuZGVyaW5nIHRvIGNvbXBsZXRlCisJICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIndhaXRfcmVuZGVyaW5nIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogTW92ZSB0aGUgb2JqZWN0IHRvIHRoZSBDUFUgZG9tYWluIHRvIGVuc3VyZSB0aGF0CisJICogYW55IHBvc3NpYmxlIENQVSB3cml0ZXMgd2hpbGUgaXQncyBub3QgaW4gdGhlIEdUVAorCSAqIGFyZSBmbHVzaGVkIHdoZW4gd2UgZ28gdG8gcmVtYXAgaXQuIFRoaXMgd2lsbAorCSAqIGFsc28gZW5zdXJlIHRoYXQgYWxsIHBlbmRpbmcgR1BVIHdyaXRlcyBhcmUgZmluaXNoZWQKKwkgKiBiZWZvcmUgd2UgdW5iaW5kLgorCSAqLworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKG9iaiwgSTkxNV9HRU1fRE9NQUlOX0NQVSwKKwkJCQkJIEk5MTVfR0VNX0RPTUFJTl9DUFUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzZXRfZG9tYWluIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKG9ial9wcml2LT5hZ3BfbWVtICE9IE5VTEwpIHsKKwkJZHJtX3VuYmluZF9hZ3Aob2JqX3ByaXYtPmFncF9tZW0pOworCQlkcm1fZnJlZV9hZ3Aob2JqX3ByaXYtPmFncF9tZW0sIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CisJCW9ial9wcml2LT5hZ3BfbWVtID0gTlVMTDsKKwl9CisKKwlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CisKKwlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKworCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlKSB7CisJCWF0b21pY19kZWMoJmRldi0+Z3R0X2NvdW50KTsKKwkJYXRvbWljX3N1YihvYmotPnNpemUsICZkZXYtPmd0dF9tZW1vcnkpOworCisJCWRybV9tbV9wdXRfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSk7CisJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBOVUxMOworCX0KKworCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgTFJVIGxpc3QgaWYgcHJlc2VudC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9ial9wcml2LT5saXN0KSkKKwkJbGlzdF9kZWxfaW5pdCgmb2JqX3ByaXYtPmxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoOzspIHsKKwkJLyogSWYgdGhlcmUncyBhbiBpbmFjdGl2ZSBidWZmZXIgYXZhaWxhYmxlIG5vdywgZ3JhYiBpdAorCQkgKiBhbmQgYmUgZG9uZS4KKwkJICovCisJCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpKSB7CisJCQlvYmpfcHJpdiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LAorCQkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJCQkJICAgIGxpc3QpOworCQkJb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJCUJVR19PTihvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApOworI2lmIFdBVENIX0xSVQorCQkJRFJNX0lORk8oIiVzOiBldmljdGluZyAlcFxuIiwgX19mdW5jX18sIG9iaik7CisjZW5kaWYKKwkJCUJVR19PTihvYmpfcHJpdi0+YWN0aXZlKTsKKworCQkJLyogV2FpdCBvbiB0aGUgcmVuZGVyaW5nIGFuZCB1bmJpbmQgdGhlIGJ1ZmZlci4gKi8KKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgd2UgZGlkbid0IGdldCBhbnl0aGluZywgYnV0IHRoZSByaW5nIGlzIHN0aWxsIHByb2Nlc3NpbmcKKwkJICogdGhpbmdzLCB3YWl0IGZvciBvbmUgb2YgdGhvc2UgdGhpbmdzIHRvIGZpbmlzaCBhbmQgaG9wZWZ1bGx5CisJCSAqIGxlYXZlIHVzIGEgYnVmZmVyIHRvIGV2aWN0LgorCQkgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSkgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJCQlyZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCwKKwkJCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKKwkJCQkJCSAgIGxpc3QpOworCisJCQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChkZXYsIHJlcXVlc3QtPnNlcW5vKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisKKwkJCS8qIGlmIHdhaXRpbmcgY2F1c2VkIGFuIG9iamVjdCB0byBiZWNvbWUgaW5hY3RpdmUsCisJCQkgKiB0aGVuIGxvb3AgYXJvdW5kIGFuZCB3YWl0IGZvciBpdC4gT3RoZXJ3aXNlLCB3ZQorCQkJICogYXNzdW1lIHRoYXQgd2FpdGluZyBmcmVlZCBhbmQgdW5ib3VuZCBzb21ldGhpbmcsCisJCQkgKiBzbyB0aGVyZSBzaG91bGQgbm93IGJlIHNvbWUgc3BhY2UgaW4gdGhlIEdUVAorCQkJICovCisJCQlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgd2UgZGlkbid0IGhhdmUgYW55dGhpbmcgb24gdGhlIHJlcXVlc3QgbGlzdCBidXQgdGhlcmUKKwkJICogYXJlIGJ1ZmZlcnMgYXdhaXRpbmcgYSBmbHVzaCwgZW1pdCBvbmUgYW5kIHRyeSBhZ2Fpbi4KKwkJICogV2hlbiB3ZSB3YWl0IG9uIGl0LCB0aG9zZSBidWZmZXJzIHdhaXRpbmcgZm9yIHRoYXQgZmx1c2gKKwkJICogd2lsbCBnZXQgbW92ZWQgdG8gaW5hY3RpdmUuCisJCSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSkgeworCQkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKKwkJCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkJCSAgICBsaXN0KTsKKwkJCW9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJCWk5MTVfZ2VtX2ZsdXNoKGRldiwKKwkJCQkgICAgICAgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9iai0+d3JpdGVfZG9tYWluKTsKKwkJCWk5MTVfYWRkX3JlcXVlc3QoZGV2LCBvYmotPndyaXRlX2RvbWFpbik7CisKKwkJCW9iaiA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCURSTV9FUlJPUigiaW5hY3RpdmUgZW1wdHkgJWQgcmVxdWVzdCBlbXB0eSAlZCAiCisJCQkgICJmbHVzaGluZyBlbXB0eSAlZFxuIiwKKwkJCSAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpLAorCQkJICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSwKKwkJCSAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKTsKKwkJLyogSWYgd2UgZGlkbid0IGRvIGFueSBvZiB0aGUgYWJvdmUsIHRoZXJlJ3Mgbm90aGluZyB0byBiZSBkb25lCisJCSAqIGFuZCB3ZSBqdXN0IGNhbid0IGZpdCBpdCBpbi4KKwkJICovCisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCBwYWdlX2NvdW50LCBpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldDsKKworCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0KQorCQlyZXR1cm4gMDsKKworCS8qIEdldCB0aGUgbGlzdCBvZiBwYWdlcyBvdXQgb2Ygb3VyIHN0cnVjdCBmaWxlLiAgVGhleSdsbCBiZSBwaW5uZWQKKwkgKiBhdCB0aGlzIHBvaW50IHVudGlsIHdlIHJlbGVhc2UgdGhlbS4KKwkgKi8KKwlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOworCUJVR19PTihvYmpfcHJpdi0+cGFnZV9saXN0ICE9IE5VTEwpOworCW9ial9wcml2LT5wYWdlX2xpc3QgPSBkcm1fY2FsbG9jKHBhZ2VfY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFsZWQgdG8gYWxsb2NhdGUgcGFnZSBsaXN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5vZGUgPSBvYmotPmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgeworCQlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgaSwgTlVMTCk7CisJCWlmIChJU19FUlIocGFnZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJCQlEUk1fRVJST1IoInJlYWRfbWFwcGluZ19wYWdlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJb2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSA9IHBhZ2U7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIEZpbmRzIGZyZWUgc3BhY2UgaW4gdGhlIEdUVCBhcGVydHVyZSBhbmQgYmluZHMgdGhlIG9iamVjdCB0aGVyZS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBhbGlnbm1lbnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3RydWN0IGRybV9tbV9ub2RlICpmcmVlX3NwYWNlOworCWludCBwYWdlX2NvdW50LCByZXQ7CisKKwlpZiAoYWxpZ25tZW50ID09IDApCisJCWFsaWdubWVudCA9IFBBR0VfU0laRTsKKwlpZiAoYWxpZ25tZW50ICYgKFBBR0VfU0laRSAtIDEpKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgYWxpZ25tZW50IHJlcXVlc3RlZCAldVxuIiwgYWxpZ25tZW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisgc2VhcmNoX2ZyZWU6CisJZnJlZV9zcGFjZSA9IGRybV9tbV9zZWFyY2hfZnJlZSgmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwKKwkJCQkJb2JqLT5zaXplLCBhbGlnbm1lbnQsIDApOworCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpIHsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IGRybV9tbV9nZXRfYmxvY2soZnJlZV9zcGFjZSwgb2JqLT5zaXplLAorCQkJCQkJICAgICAgIGFsaWdubWVudCk7CisJCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlICE9IE5VTEwpIHsKKwkJCW9ial9wcml2LT5ndHRfc3BhY2UtPnByaXZhdGUgPSBvYmo7CisJCQlvYmpfcHJpdi0+Z3R0X29mZnNldCA9IG9ial9wcml2LT5ndHRfc3BhY2UtPnN0YXJ0OworCQl9CisJfQorCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJLyogSWYgdGhlIGd0dCBpcyBlbXB0eSBhbmQgd2UncmUgc3RpbGwgaGF2aW5nIHRyb3VibGUKKwkJICogZml0dGluZyBvdXIgb2JqZWN0IGluLCB3ZSdyZSBvdXQgb2YgbWVtb3J5LgorCQkgKi8KKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBHVFQgZnVsbCwgZXZpY3Rpbmcgc29tZXRoaW5nXG4iLCBfX2Z1bmNfXyk7CisjZW5kaWYKKwkJaWYgKGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpICYmCisJCSAgICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKSB7CisJCQlEUk1fRVJST1IoIkdUVCBmdWxsLCBidXQgTFJVIGxpc3QgZW1wdHlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoZGV2KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBldmljdCBhIGJ1ZmZlciAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZ290byBzZWFyY2hfZnJlZTsKKwl9CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiQmluZGluZyBvYmplY3Qgb2Ygc2l6ZSAlZCBhdCAweCUwOHhcbiIsCisJCSBvYmotPnNpemUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKyNlbmRpZgorCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KG9iaik7CisJaWYgKHJldCkgeworCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOworCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOworCS8qIENyZWF0ZSBhbiBBR1AgbWVtb3J5IHN0cnVjdHVyZSBwb2ludGluZyBhdCBvdXIgcGFnZXMsIGFuZCBiaW5kIGl0CisJICogaW50byB0aGUgR1RULgorCSAqLworCW9ial9wcml2LT5hZ3BfbWVtID0gZHJtX2FncF9iaW5kX3BhZ2VzKGRldiwKKwkJCQkJICAgICAgIG9ial9wcml2LT5wYWdlX2xpc3QsCisJCQkJCSAgICAgICBwYWdlX2NvdW50LAorCQkJCQkgICAgICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkJCSAgICAgICBvYmpfcHJpdi0+YWdwX3R5cGUpOworCWlmIChvYmpfcHJpdi0+YWdwX21lbSA9PSBOVUxMKSB7CisJCWk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChvYmopOworCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOworCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWF0b21pY19pbmMoJmRldi0+Z3R0X2NvdW50KTsKKwlhdG9taWNfYWRkKG9iai0+c2l6ZSwgJmRldi0+Z3R0X21lbW9yeSk7CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IEdQVSBkb21haW4uIEFzIGl0CisJICogd2Fzbid0IGluIHRoZSBHVFQsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgd2F5IGl0IGNvdWxkIGhhdmUgYmVlbiBpbgorCSAqIGEgR1BVIGNhY2hlCisJICovCisJQlVHX09OKG9iai0+cmVhZF9kb21haW5zICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKwlCVUdfT04ob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgcGFnZSBsaXN0IHNldCB1cCwgdGhlbiB3ZSdyZSBub3QgcGlubmVkCisJICogdG8gR1BVLCBhbmQgd2UgY2FuIGlnbm9yZSB0aGUgY2FjaGUgZmx1c2ggYmVjYXVzZSBpdCdsbCBoYXBwZW4KKwkgKiBhZ2FpbiBhdCBiaW5kIHRpbWUuCisJICovCisJaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCwgb2JqLT5zaXplIC8gUEFHRV9TSVpFKTsKK30KKworLyoKKyAqIFNldCB0aGUgbmV4dCBkb21haW4gZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0LiBUaGlzCisgKiBtYXkgbm90IGFjdHVhbGx5IHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBmbHVzaGluZy9pbnZhbGlkaW5nIHRob3VnaCwKKyAqIGFzIHRoYXQgbWF5IHdhbnQgdG8gYmUgYmF0Y2hlZCB3aXRoIG90aGVyIHNldF9kb21haW4gb3BlcmF0aW9ucworICoKKyAqIFRoaXMgaXMgKHdlIGhvcGUpIHRoZSBvbmx5IHJlYWxseSB0cmlja3kgcGFydCBvZiBnZW0uIFRoZSBnb2FsCisgKiBpcyBmYWlybHkgc2ltcGxlIC0tIHRyYWNrIHdoaWNoIGNhY2hlcyBob2xkIGJpdHMgb2YgdGhlIG9iamVjdAorICogYW5kIG1ha2Ugc3VyZSB0aGV5IHJlbWFpbiBjb2hlcmVudC4gQSBmZXcgY29uY3JldGUgZXhhbXBsZXMgbWF5CisgKiBoZWxwIHRvIGV4cGxhaW4gaG93IGl0IHdvcmtzLiBGb3Igc2hvcnRoYW5kLCB3ZSB1c2UgdGhlIG5vdGF0aW9uCisgKiAocmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4pLCBlLmcuIChDUFUsIENQVSkgdG8gaW5kaWNhdGUgdGhlCisgKiBhIHBhaXIgb2YgcmVhZCBhbmQgd3JpdGUgZG9tYWluIG1hc2tzLgorICoKKyAqIENhc2UgMTogdGhlIGJhdGNoIGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gV3JpdHRlbiBieSBDUFUKKyAqCTMuIE1hcHBlZCB0byBHVFQKKyAqCTQuIFJlYWQgYnkgR1BVCisgKgk1LiBVbm1hcHBlZCBmcm9tIEdUVAorICoJNi4gRnJlZWQKKyAqCisgKglMZXQncyB0YWtlIHRoZXNlIGEgc3RlcCBhdCBhIHRpbWUKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCQlQYWdlcyBhbGxvY2F0ZWQgZnJvbSB0aGUga2VybmVsIG1heSBzdGlsbCBoYXZlCisgKgkJY2FjaGUgY29udGVudHMsIHNvIHdlIHNldCB0aGVtIHRvIChDUFUsIENQVSkgYWx3YXlzLgorICoJMi4gV3JpdHRlbiBieSBDUFUgKHVzaW5nIHB3cml0ZSkKKyAqCQlUaGUgcHdyaXRlIGZ1bmN0aW9uIGNhbGxzIHNldF9kb21haW4gKENQVSwgQ1BVKSBhbmQKKyAqCQl0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyAoYXMgbm90aGluZyBjaGFuZ2VzKQorICoJMy4gTWFwcGVkIGJ5IEdUVAorICoJCVRoaXMgZnVuY3Rpb24gYXNzZXJ0cyB0aGF0IHRoZSBvYmplY3QgaXMgbm90CisgKgkJY3VycmVudGx5IGluIGFueSBHUFUtYmFzZWQgcmVhZCBvciB3cml0ZSBkb21haW5zCisgKgk0LiBSZWFkIGJ5IEdQVQorICoJCWk5MTVfZ2VtX2V4ZWNidWZmZXIgY2FsbHMgc2V0X2RvbWFpbiAoQ09NTUFORCwgMCkuCisgKgkJQXMgd3JpdGVfZG9tYWluIGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gYWRkcyBpbiB0aGUKKyAqCQljdXJyZW50IHJlYWQgZG9tYWlucyAoQ1BVK0NPTU1BTkQsIDApLgorICoJCWZsdXNoX2RvbWFpbnMgaXMgc2V0IHRvIENQVS4KKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgaXMgc2V0IHRvIENPTU1BTkQKKyAqCQljbGZsdXNoIGlzIHJ1biB0byBnZXQgZGF0YSBvdXQgb2YgdGhlIENQVSBjYWNoZXMKKyAqCQl0aGVuIGk5MTVfZGV2X3NldF9kb21haW4gY2FsbHMgaTkxNV9nZW1fZmx1c2ggdG8KKyAqCQllbWl0IGFuIE1JX0ZMVVNIIGFuZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTUuIFVubWFwcGVkIGZyb20gR1RUCisgKgkJaTkxNV9nZW1fb2JqZWN0X3VuYmluZCBjYWxscyBzZXRfZG9tYWluIChDUFUsIENQVSkKKyAqCQlmbHVzaF9kb21haW5zIGFuZCBpbnZhbGlkYXRlX2RvbWFpbnMgZW5kIHVwIGJvdGggemVybworICoJCXNvIG5vIGZsdXNoaW5nL2ludmFsaWRhdGluZyBoYXBwZW5zCisgKgk2LiBGcmVlZAorICoJCXlheSwgZG9uZQorICoKKyAqIENhc2UgMjogVGhlIHNoYXJlZCByZW5kZXIgYnVmZmVyCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkyLiBNYXBwZWQgdG8gR1RUCisgKgkzLiBSZWFkL3dyaXR0ZW4gYnkgR1BVCisgKgk0LiBzZXRfZG9tYWluIHRvIChDUFUsQ1BVKQorICoJNS4gUmVhZC93cml0dGVuIGJ5IENQVQorICoJNi4gUmVhZC93cml0dGVuIGJ5IEdQVQorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJCVNhbWUgYXMgbGFzdCBleGFtcGxlLCAoQ1BVLCBDUFUpCisgKgkyLiBNYXBwZWQgdG8gR1RUCisgKgkJTm90aGluZyBjaGFuZ2VzIChhc3NlcnRpb25zIGZpbmQgdGhhdCBpdCBpcyBub3QgaW4gdGhlIEdQVSkKKyAqCTMuIFJlYWQvd3JpdHRlbiBieSBHUFUKKyAqCQlleGVjYnVmZmVyIGNhbGxzIHNldF9kb21haW4gKFJFTkRFUiwgUkVOREVSKQorICoJCWZsdXNoX2RvbWFpbnMgZ2V0cyBDUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgZ2V0cyBHUFUKKyAqCQljbGZsdXNoIChvYmopCisgKgkJTUlfRkxVU0ggYW5kIGRybV9hZ3BfY2hpcHNldF9mbHVzaAorICoJNC4gc2V0X2RvbWFpbiAoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyBnZXRzIEdQVQorICoJCWludmFsaWRhdGVfZG9tYWlucyBnZXRzIENQVQorICoJCXdhaXRfcmVuZGVyaW5nIChvYmopIHRvIG1ha2Ugc3VyZSBhbGwgZHJhd2luZyBpcyBjb21wbGV0ZS4KKyAqCQlUaGlzIHdpbGwgaW5jbHVkZSBhbiBNSV9GTFVTSCB0byBnZXQgdGhlIGRhdGEgZnJvbSBHUFUKKyAqCQl0byBtZW1vcnkKKyAqCQljbGZsdXNoIChvYmopIHRvIGludmFsaWRhdGUgdGhlIENQVSBjYWNoZQorICoJCUFub3RoZXIgTUlfRkxVU0ggaW4gaTkxNV9nZW1fZmx1c2ggKGVsaW1pbmF0ZSB0aGlzIHNvbWVob3c/KQorICoJNS4gUmVhZC93cml0dGVuIGJ5IENQVQorICoJCWNhY2hlIGxpbmVzIGFyZSBsb2FkZWQgYW5kIGRpcnRpZWQKKyAqCTYuIFJlYWQgd3JpdHRlbiBieSBHUFUKKyAqCQlTYW1lIGFzIGxhc3QgR1BVIGFjY2VzcworICoKKyAqIENhc2UgMzogVGhlIGNvbnN0YW50IGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gV3JpdHRlbiBieSBDUFUKKyAqCTMuIFJlYWQgYnkgR1BVCisgKgk0LiBVcGRhdGVkICh3cml0dGVuKSBieSBDUFUgYWdhaW4KKyAqCTUuIFJlYWQgYnkgR1BVCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkJKENQVSwgQ1BVKQorICoJMi4gV3JpdHRlbiBieSBDUFUKKyAqCQkoQ1BVLCBDUFUpCisgKgkzLiBSZWFkIGJ5IEdQVQorICoJCShDUFUrUkVOREVSLCAwKQorICoJCWZsdXNoX2RvbWFpbnMgPSBDUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSBSRU5ERVIKKyAqCQljbGZsdXNoIChvYmopCisgKgkJTUlfRkxVU0gKKyAqCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTQuIFVwZGF0ZWQgKHdyaXR0ZW4pIGJ5IENQVSBhZ2FpbgorICoJCShDUFUsIENQVSkKKyAqCQlmbHVzaF9kb21haW5zID0gMCAobm8gcHJldmlvdXMgd3JpdGUgZG9tYWluKQorICoJCWludmFsaWRhdGVfZG9tYWlucyA9IDAgKG5vIG5ldyByZWFkIGRvbWFpbnMpCisgKgk1LiBSZWFkIGJ5IEdQVQorICoJCShDUFUrUkVOREVSLCAwKQorICoJCWZsdXNoX2RvbWFpbnMgPSBDUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSBSRU5ERVIKKyAqCQljbGZsdXNoIChvYmopCisgKgkJTUlfRkxVU0gKKyAqCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJICAgIHVpbnQzMl90IHdyaXRlX2RvbWFpbikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZQkJKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJdWludDMyX3QJCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSAwOworCXVpbnQzMl90CQkJZmx1c2hfZG9tYWlucyA9IDA7CisJaW50CQkJCXJldDsKKworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCIlczogb2JqZWN0ICVwIHJlYWQgJTA4eCAtPiAlMDh4IHdyaXRlICUwOHggLT4gJTA4eFxuIiwKKwkJIF9fZnVuY19fLCBvYmosCisJCSBvYmotPnJlYWRfZG9tYWlucywgcmVhZF9kb21haW5zLAorCQkgb2JqLT53cml0ZV9kb21haW4sIHdyaXRlX2RvbWFpbik7CisjZW5kaWYKKwkvKgorCSAqIElmIHRoZSBvYmplY3QgaXNuJ3QgbW92aW5nIHRvIGEgbmV3IHdyaXRlIGRvbWFpbiwKKwkgKiBsZXQgdGhlIG9iamVjdCBzdGF5IGluIG11bHRpcGxlIHJlYWQgZG9tYWlucworCSAqLworCWlmICh3cml0ZV9kb21haW4gPT0gMCkKKwkJcmVhZF9kb21haW5zIHw9IG9iai0+cmVhZF9kb21haW5zOworCWVsc2UKKwkJb2JqX3ByaXYtPmRpcnR5ID0gMTsKKworCS8qCisJICogRmx1c2ggdGhlIGN1cnJlbnQgd3JpdGUgZG9tYWluIGlmCisJICogdGhlIG5ldyByZWFkIGRvbWFpbnMgZG9uJ3QgbWF0Y2guIEludmFsaWRhdGUKKwkgKiBhbnkgcmVhZCBkb21haW5zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBvbGQKKwkgKiB3cml0ZSBkb21haW4KKwkgKi8KKwlpZiAob2JqLT53cml0ZV9kb21haW4gJiYgb2JqLT53cml0ZV9kb21haW4gIT0gcmVhZF9kb21haW5zKSB7CisJCWZsdXNoX2RvbWFpbnMgfD0gb2JqLT53cml0ZV9kb21haW47CisJCWludmFsaWRhdGVfZG9tYWlucyB8PSByZWFkX2RvbWFpbnMgJiB+b2JqLT53cml0ZV9kb21haW47CisJfQorCS8qCisJICogSW52YWxpZGF0ZSBhbnkgcmVhZCBjYWNoZXMgd2hpY2ggbWF5IGhhdmUKKwkgKiBzdGFsZSBkYXRhLiBUaGF0IGlzLCBhbnkgbmV3IHJlYWQgZG9tYWlucy4KKwkgKi8KKwlpbnZhbGlkYXRlX2RvbWFpbnMgfD0gcmVhZF9kb21haW5zICYgfm9iai0+cmVhZF9kb21haW5zOworCWlmICgoZmx1c2hfZG9tYWlucyB8IGludmFsaWRhdGVfZG9tYWlucykgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CisjaWYgV0FUQ0hfQlVGCisJCURSTV9JTkZPKCIlczogQ1BVIGRvbWFpbiBmbHVzaCAlMDh4IGludmFsaWRhdGUgJTA4eFxuIiwKKwkJCSBfX2Z1bmNfXywgZmx1c2hfZG9tYWlucywgaW52YWxpZGF0ZV9kb21haW5zKTsKKyNlbmRpZgorCQkvKgorCQkgKiBJZiB3ZSdyZSBpbnZhbGlkaW5nIHRoZSBDUFUgY2FjaGUgYW5kIGZsdXNoaW5nIGEgR1BVIGNhY2hlLAorCQkgKiB0aGVuIHBhdXNlIGZvciByZW5kZXJpbmcgc28gdGhhdCB0aGUgR1BVIGNhY2hlcyB3aWxsIGJlCisJCSAqIGZsdXNoZWQgYmVmb3JlIHRoZSBjcHUgY2FjaGUgaXMgaW52YWxpZGF0ZWQKKwkJICovCisJCWlmICgoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgJiYKKwkJICAgIChmbHVzaF9kb21haW5zICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVIHwKKwkJCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCkpKSB7CisJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCX0KKworCWlmICgod3JpdGVfZG9tYWluIHwgZmx1c2hfZG9tYWlucykgIT0gMCkKKwkJb2JqLT53cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW47CisKKwkvKiBJZiB3ZSdyZSBpbnZhbGlkYXRpbmcgdGhlIENQVSBkb21haW4sIGNsZWFyIHRoZSBwZXItcGFnZSBDUFUKKwkgKiBkb21haW4gbGlzdCBhcyB3ZWxsLgorCSAqLworCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgIT0gTlVMTCAmJgorCSAgICAod3JpdGVfZG9tYWluICE9IDAgfHwKKwkgICAgIHJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpKSB7CisJCWRybV9mcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCwgb2JqLT5zaXplIC8gUEFHRV9TSVpFLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID0gTlVMTDsKKwl9CisJb2JqLT5yZWFkX2RvbWFpbnMgPSByZWFkX2RvbWFpbnM7CisKKwlkZXYtPmludmFsaWRhdGVfZG9tYWlucyB8PSBpbnZhbGlkYXRlX2RvbWFpbnM7CisJZGV2LT5mbHVzaF9kb21haW5zIHw9IGZsdXNoX2RvbWFpbnM7CisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiByZWFkICUwOHggd3JpdGUgJTA4eCBpbnZhbGlkYXRlICUwOHggZmx1c2ggJTA4eFxuIiwKKwkJIF9fZnVuY19fLAorCQkgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkgZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMsIGRldi0+Zmx1c2hfZG9tYWlucyk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZXQgdGhlIHJlYWQvd3JpdGUgZG9tYWluIG9uIGEgcmFuZ2Ugb2YgdGhlIG9iamVjdC4KKyAqCisgKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgQ1BVIHJlYWRzLCBvdGhlcndpc2UgZHJvcHMgdG8gbm9ybWFsCisgKiBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbigpLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbl9yYW5nZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgdWludDY0X3Qgb2Zmc2V0LAorCQkJCSB1aW50NjRfdCBzaXplLAorCQkJCSB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkJIHVpbnQzMl90IHdyaXRlX2RvbWFpbikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQsIGk7CisKKwlpZiAob2JqLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWFkX2RvbWFpbnMgIT0gSTkxNV9HRU1fRE9NQUlOX0NQVSB8fAorCSAgICB3cml0ZV9kb21haW4gIT0gMCkKKwkJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKG9iaiwKKwkJCQkJCSAgcmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4pOworCisJLyogV2FpdCBvbiBhbnkgR1BVIHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IHRvIGJlIGZsdXNoZWQuICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVIHwgSTkxNV9HRU1fRE9NQUlOX0dUVCkpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgPT0gTlVMTCkgeworCQlvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgPSBkcm1fY2FsbG9jKDEsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSwKKwkJCQkJCSAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwl9CisKKwkvKiBGbHVzaCB0aGUgY2FjaGUgb24gYW55IHBhZ2VzIHRoYXQgYXJlIHN0aWxsIGludmFsaWQgZnJvbSB0aGUgQ1BVJ3MKKwkgKiBwZXJzcGVjdGl2ZS4KKwkgKi8KKwlmb3IgKGkgPSBvZmZzZXQgLyBQQUdFX1NJWkU7IGkgPD0gKG9mZnNldCArIHNpemUgLSAxKSAvIFBBR0VfU0laRTsgaSsrKSB7CisJCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWRbaV0pCisJCQljb250aW51ZTsKKworCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZV9saXN0ICsgaSwgMSk7CisKKwkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldID0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBPbmNlIGFsbCBvZiB0aGUgb2JqZWN0cyBoYXZlIGJlZW4gc2V0IGluIHRoZSBwcm9wZXIgZG9tYWluLAorICogcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGZsdXNoIGFuZCBpbnZhbGlkYXRlIG9wZXJhdGlvbnMuCisgKgorICogUmV0dXJucyB0aGUgd3JpdGUgZG9tYWlucyBmbHVzaGVkLCBmb3IgdXNlIGluIGZsdXNoIHRyYWNraW5nLgorICovCitzdGF0aWMgdWludDMyX3QKK2k5MTVfZ2VtX2Rldl9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdWludDMyX3QgZmx1c2hfZG9tYWlucyA9IGRldi0+Zmx1c2hfZG9tYWluczsKKworCS8qCisJICogTm93IHRoYXQgYWxsIHRoZSBidWZmZXJzIGFyZSBzeW5jZWQgdG8gdGhlIHByb3BlciBkb21haW5zLAorCSAqIGZsdXNoIGFuZCBpbnZhbGlkYXRlIHRoZSBjb2xsZWN0ZWQgZG9tYWlucworCSAqLworCWlmIChkZXYtPmludmFsaWRhdGVfZG9tYWlucyB8IGRldi0+Zmx1c2hfZG9tYWlucykgeworI2lmIFdBVENIX0VYRUMKKwkJRFJNX0lORk8oIiVzOiBpbnZhbGlkYXRlX2RvbWFpbnMgJTA4eCBmbHVzaF9kb21haW5zICUwOHhcbiIsCisJCQkgIF9fZnVuY19fLAorCQkJIGRldi0+aW52YWxpZGF0ZV9kb21haW5zLAorCQkJIGRldi0+Zmx1c2hfZG9tYWlucyk7CisjZW5kaWYKKwkJaTkxNV9nZW1fZmx1c2goZGV2LAorCQkJICAgICAgIGRldi0+aW52YWxpZGF0ZV9kb21haW5zLAorCQkJICAgICAgIGRldi0+Zmx1c2hfZG9tYWlucyk7CisJCWRldi0+aW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwkJZGV2LT5mbHVzaF9kb21haW5zID0gMDsKKwl9CisKKwlyZXR1cm4gZmx1c2hfZG9tYWluczsKK30KKworLyoqCisgKiBQaW4gYW4gb2JqZWN0IHRvIHRoZSBHVFQgYW5kIGV2YWx1YXRlIHRoZSByZWxvY2F0aW9ucyBsYW5kaW5nIGluIGl0LgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3RfcGluX2FuZF9yZWxvY2F0ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmVudHJ5KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqcmVsb2NzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IGksIHJldDsKKwl1aW50MzJfdCBsYXN0X3JlbG9jX29mZnNldCA9IC0xOworCXZvaWQgX19pb21lbSAqcmVsb2NfcGFnZSA9IE5VTEw7CisKKwkvKiBDaG9vc2UgdGhlIEdUVCBvZmZzZXQgZm9yIG91ciBidWZmZXIgYW5kIHB1dCBpdCB0aGVyZS4gKi8KKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgKHVpbnQzMl90KSBlbnRyeS0+YWxpZ25tZW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZW50cnktPm9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCisJcmVsb2NzID0gKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJICh1aW50cHRyX3QpIGVudHJ5LT5yZWxvY3NfcHRyOworCS8qIEFwcGx5IHRoZSByZWxvY2F0aW9ucywgdXNpbmcgdGhlIEdUVCBhcGVydHVyZSB0byBhdm9pZCBjYWNoZQorCSAqIGZsdXNoaW5nIHJlcXVpcmVtZW50cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPnJlbG9jYXRpb25fY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnRhcmdldF9vYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqX3ByaXY7CisJCXVpbnQzMl90IHJlbG9jX3ZhbCwgcmVsb2Nfb2Zmc2V0OworCQl1aW50MzJfdCBfX2lvbWVtICpyZWxvY19lbnRyeTsKKworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmcmVsb2MsIHJlbG9jcyArIGksIHNpemVvZihyZWxvYykpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXRhcmdldF9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAob2JqLT5kZXYsIGZpbGVfcHJpdiwKKwkJCQkJCSAgIHJlbG9jLnRhcmdldF9oYW5kbGUpOworCQlpZiAodGFyZ2V0X29iaiA9PSBOVUxMKSB7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUJBREY7CisJCX0KKwkJdGFyZ2V0X29ial9wcml2ID0gdGFyZ2V0X29iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJLyogVGhlIHRhcmdldCBidWZmZXIgc2hvdWxkIGhhdmUgYXBwZWFyZWQgYmVmb3JlIHVzIGluIHRoZQorCQkgKiBleGVjX29iamVjdCBsaXN0LCBzbyBpdCBzaG91bGQgaGF2ZSBhIEdUVCBzcGFjZSBib3VuZCBieSBub3cuCisJCSAqLworCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkgeworCQkJRFJNX0VSUk9SKCJObyBHVFQgc3BhY2UgZm91bmQgZm9yIG9iamVjdCAlZFxuIiwKKwkJCQkgIHJlbG9jLnRhcmdldF9oYW5kbGUpOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHJlbG9jLm9mZnNldCA+IG9iai0+c2l6ZSAtIDQpIHsKKwkJCURSTV9FUlJPUigiUmVsb2NhdGlvbiBiZXlvbmQgb2JqZWN0IGJvdW5kczogIgorCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkIHNpemUgJWQuXG4iLAorCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LCAoaW50KSBvYmotPnNpemUpOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyZWxvYy5vZmZzZXQgJiAzKSB7CisJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gbm90IDQtYnl0ZSBhbGlnbmVkOiAiCisJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQuXG4iLAorCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0KTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZWxvYy53cml0ZV9kb21haW4gJiYgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gJiYKKwkJICAgIHJlbG9jLndyaXRlX2RvbWFpbiAhPSB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbikgeworCQkJRFJNX0VSUk9SKCJXcml0ZSBkb21haW4gY29uZmxpY3Q6ICIKKwkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCisJCQkJICAibmV3ICUwOHggb2xkICUwOHhcbiIsCisJCQkJICBvYmosIHJlbG9jLnRhcmdldF9oYW5kbGUsCisJCQkJICAoaW50KSByZWxvYy5vZmZzZXQsCisJCQkJICByZWxvYy53cml0ZV9kb21haW4sCisJCQkJICB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworI2lmIFdBVENIX1JFTE9DCisJCURSTV9JTkZPKCIlczogb2JqICVwIG9mZnNldCAlMDh4IHRhcmdldCAlZCAiCisJCQkgInJlYWQgJTA4eCB3cml0ZSAlMDh4IGd0dCAlMDh4ICIKKwkJCSAicHJlc3VtZWQgJTA4eCBkZWx0YSAlMDh4XG4iLAorCQkJIF9fZnVuY19fLAorCQkJIG9iaiwKKwkJCSAoaW50KSByZWxvYy5vZmZzZXQsCisJCQkgKGludCkgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCSAoaW50KSByZWxvYy5yZWFkX2RvbWFpbnMsCisJCQkgKGludCkgcmVsb2Mud3JpdGVfZG9tYWluLAorCQkJIChpbnQpIHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCwKKwkJCSAoaW50KSByZWxvYy5wcmVzdW1lZF9vZmZzZXQsCisJCQkgcmVsb2MuZGVsdGEpOworI2VuZGlmCisKKwkJdGFyZ2V0X29iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gcmVsb2MucmVhZF9kb21haW5zOworCQl0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiB8PSByZWxvYy53cml0ZV9kb21haW47CisKKwkJLyogSWYgdGhlIHJlbG9jYXRpb24gYWxyZWFkeSBoYXMgdGhlIHJpZ2h0IHZhbHVlIGluIGl0LCBubworCQkgKiBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgZG9uZS4KKwkJICovCisJCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgPT0gcmVsb2MucHJlc3VtZWRfb2Zmc2V0KSB7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTm93IHRoYXQgd2UncmUgZ29pbmcgdG8gYWN0dWFsbHkgd3JpdGUgc29tZSBkYXRhIGluLAorCQkgKiBtYWtlIHN1cmUgdGhhdCBhbnkgcmVuZGVyaW5nIHVzaW5nIHRoaXMgYnVmZmVyJ3MgY29udGVudHMKKwkJICogaXMgY29tcGxldGVkLgorCQkgKi8KKwkJaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisKKwkJLyogQXMgd2UncmUgd3JpdGluZyB0aHJvdWdoIHRoZSBndHQsIGZsdXNoCisJCSAqIGFueSBDUFUgd3JpdGVzIGJlZm9yZSB3ZSB3cml0ZSB0aGUgcmVsb2NhdGlvbnMKKwkJICovCisJCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKKwkJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisJCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKwkJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwkJfQorCisJCS8qIE1hcCB0aGUgcGFnZSBjb250YWluaW5nIHRoZSByZWxvY2F0aW9uIHdlJ3JlIGdvaW5nIHRvCisJCSAqIHBlcmZvcm0uCisJCSAqLworCQlyZWxvY19vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLm9mZnNldDsKKwkJaWYgKHJlbG9jX3BhZ2UgPT0gTlVMTCB8fAorCQkgICAgKGxhc3RfcmVsb2Nfb2Zmc2V0ICYgfihQQUdFX1NJWkUgLSAxKSkgIT0KKwkJICAgIChyZWxvY19vZmZzZXQgJiB+KFBBR0VfU0laRSAtIDEpKSkgeworCQkJaWYgKHJlbG9jX3BhZ2UgIT0gTlVMTCkKKwkJCQlpb3VubWFwKHJlbG9jX3BhZ2UpOworCisJCQlyZWxvY19wYWdlID0gaW9yZW1hcF93YyhkZXYtPmFncC0+YmFzZSArCisJCQkJCQkocmVsb2Nfb2Zmc2V0ICYKKwkJCQkJCSB+KFBBR0VfU0laRSAtIDEpKSwKKwkJCQkJCVBBR0VfU0laRSk7CisJCQlsYXN0X3JlbG9jX29mZnNldCA9IHJlbG9jX29mZnNldDsKKwkJCWlmIChyZWxvY19wYWdlID09IE5VTEwpIHsKKwkJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCisJCXJlbG9jX2VudHJ5ID0gKHVpbnQzMl90IF9faW9tZW0gKikocmVsb2NfcGFnZSArCisJCQkJCSAgIChyZWxvY19vZmZzZXQgJiAoUEFHRV9TSVpFIC0gMSkpKTsKKwkJcmVsb2NfdmFsID0gdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ICsgcmVsb2MuZGVsdGE7CisKKyNpZiBXQVRDSF9CVUYKKwkJRFJNX0lORk8oIkFwcGxpZWQgcmVsb2NhdGlvbjogJXBAMHglMDh4ICUwOHggLT4gJTA4eFxuIiwKKwkJCSAgb2JqLCAodW5zaWduZWQgaW50KSByZWxvYy5vZmZzZXQsCisJCQkgIHJlYWRsKHJlbG9jX2VudHJ5KSwgcmVsb2NfdmFsKTsKKyNlbmRpZgorCQl3cml0ZWwocmVsb2NfdmFsLCByZWxvY19lbnRyeSk7CisKKwkJLyogV3JpdGUgdGhlIHVwZGF0ZWQgcHJlc3VtZWQgb2Zmc2V0IGZvciB0aGlzIGVudHJ5IGJhY2sgb3V0CisJCSAqIHRvIHRoZSB1c2VyLgorCQkgKi8KKwkJcmVsb2MucHJlc3VtZWRfb2Zmc2V0ID0gdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0OworCQlyZXQgPSBjb3B5X3RvX3VzZXIocmVsb2NzICsgaSwgJnJlbG9jLCBzaXplb2YocmVsb2MpKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCX0KKworCWlmIChyZWxvY19wYWdlICE9IE5VTEwpCisJCWlvdW5tYXAocmVsb2NfcGFnZSk7CisKKyNpZiBXQVRDSF9CVUYKKwlpZiAoMCkKKwkJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqLCAxMjgsIF9fZnVuY19fLCB+MCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoqIERpc3BhdGNoIGEgYmF0Y2hidWZmZXIgdG8gdGhlIHJpbmcKKyAqLworc3RhdGljIGludAoraTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICpleGVjLAorCQkJICAgICAgdWludDY0X3QgZXhlY19vZmZzZXQpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcyA9IChzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKikKKwkJCQkJICAgICAodWludHB0cl90KSBleGVjLT5jbGlwcmVjdHNfcHRyOworCWludCBuYm94ID0gZXhlYy0+bnVtX2NsaXByZWN0czsKKwlpbnQgaSA9IDAsIGNvdW50OworCXVpbnQzMl90CWV4ZWNfc3RhcnQsIGV4ZWNfbGVuOworCVJJTkdfTE9DQUxTOworCisJZXhlY19zdGFydCA9ICh1aW50MzJfdCkgZXhlY19vZmZzZXQgKyBleGVjLT5iYXRjaF9zdGFydF9vZmZzZXQ7CisJZXhlY19sZW4gPSAodWludDMyX3QpIGV4ZWMtPmJhdGNoX2xlbjsKKworCWlmICgoZXhlY19zdGFydCB8IGV4ZWNfbGVuKSAmIDB4NykgeworCQlEUk1fRVJST1IoImFsaWdubWVudFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZXhlY19zdGFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb3VudCA9IG5ib3ggPyBuYm94IDogMTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChpIDwgbmJveCkgeworCQkJaW50IHJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBib3hlcywgaSwKKwkJCQkJCWV4ZWMtPkRSMSwgZXhlYy0+RFI0KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChJU19JODMwKGRldikgfHwgSVNfODQ1RyhkZXYpKSB7CisJCQlCRUdJTl9MUF9SSU5HKDQpOworCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSKTsKKwkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQgfCBNSV9CQVRDSF9OT05fU0VDVVJFKTsKKwkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQgKyBleGVjX2xlbiAtIDQpOworCQkJT1VUX1JJTkcoMCk7CisJCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwkJfSBlbHNlIHsKKwkJCUJFR0lOX0xQX1JJTkcoMik7CisJCQlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQkJCU9VVF9SSU5HKE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8CisJCQkJCSAoMiA8PCA2KSB8CisJCQkJCSBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOworCQkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQpOworCQkJfSBlbHNlIHsKKwkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfAorCQkJCQkgKDIgPDwgNikpOworCQkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQgfCBNSV9CQVRDSF9OT05fU0VDVVJFKTsKKwkJCX0KKwkJCUFEVkFOQ0VfTFBfUklORygpOworCQl9CisJfQorCisJLyogWFhYIGJyZWFkY3J1bWIgKi8KKwlyZXR1cm4gMDsKK30KKworLyogVGhyb3R0bGUgb3VyIHJlbmRlcmluZyBieSB3YWl0aW5nIHVudGlsIHRoZSByaW5nIGhhcyBjb21wbGV0ZWQgb3VyIHJlcXVlc3RzCisgKiBlbWl0dGVkIG92ZXIgMjAgbXNlYyBhZ28uCisgKgorICogVGhpcyBzaG91bGQgZ2V0IHVzIHJlYXNvbmFibGUgcGFyYWxsZWxpc20gYmV0d2VlbiBDUFUgYW5kIEdQVSBidXQgYWxzbworICogcmVsYXRpdmVseSBsb3cgbGF0ZW5jeSB3aGVuIGJsb2NraW5nIG9uIGEgcGFydGljdWxhciByZXF1ZXN0IHRvIGZpbmlzaC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fcmluZ190aHJvdHRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisJaW50IHJldCA9IDA7CisJdWludDMyX3Qgc2Vxbm87CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2Vxbm8gPSBpOTE1X2ZpbGVfcHJpdi0+bW0ubGFzdF9nZW1fdGhyb3R0bGVfc2Vxbm87CisJaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3Rocm90dGxlX3NlcW5vID0KKwkJaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3NlcW5vOworCWlmIChzZXFubykKKwkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QoZGV2LCBzZXFubyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QgPSBOVUxMOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhdGNoX29iajsKKwlpbnQgcmV0LCBpLCBwaW5uZWQgPSAwOworCXVpbnQ2NF90IGV4ZWNfb2Zmc2V0OworCXVpbnQzMl90IHNlcW5vLCBmbHVzaF9kb21haW5zOworCisjaWYgV0FUQ0hfRVhFQworCURSTV9JTkZPKCJidWZmZXJzX3B0ciAlZCBidWZmZXJfY291bnQgJWQgbGVuICUwOHhcbiIsCisJCSAgKGludCkgYXJncy0+YnVmZmVyc19wdHIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgYXJncy0+YmF0Y2hfbGVuKTsKKyNlbmRpZgorCisJaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEpIHsKKwkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggJWQgYnVmZmVyc1xuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIENvcHkgaW4gdGhlIGV4ZWMgbGlzdCBmcm9tIHVzZXJsYW5kICovCisJZXhlY19saXN0ID0gZHJtX2NhbGxvYyhzaXplb2YoKmV4ZWNfbGlzdCksIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKKwkJCSAgICAgICBEUk1fTUVNX0RSSVZFUik7CisJb2JqZWN0X2xpc3QgPSBkcm1fY2FsbG9jKHNpemVvZigqb2JqZWN0X2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQsCisJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoZXhlY19saXN0ID09IE5VTEwgfHwgb2JqZWN0X2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBleGVjIG9yIG9iamVjdCBsaXN0ICIKKwkJCSAgImZvciAlZCBidWZmZXJzXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHByZV9tdXRleF9lcnI7CisJfQorCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4ZWNfbGlzdCwKKwkJCSAgICAgKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJICAgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKKwkJCSAgICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJjb3B5ICVkIGV4ZWMgZW50cmllcyBmYWlsZWQgJWRcbiIsCisJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJZ290byBwcmVfbXV0ZXhfZXJyOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCWlmIChkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CisJCURSTV9FUlJPUigiRXhlY2J1ZiB3aGlsZSB3ZWRnZWRcbiIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGRldl9wcml2LT5tbS5zdXNwZW5kZWQpIHsKKwkJRFJNX0VSUk9SKCJFeGVjYnVmIHdoaWxlIFZULXN3aXRjaGVkLlxuIik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFplcm8gdGhlIGdsb2FibCBmbHVzaC9pbnZhbGlkYXRlIGZsYWdzLiBUaGVzZQorCSAqIHdpbGwgYmUgbW9kaWZpZWQgYXMgZWFjaCBvYmplY3QgaXMgYm91bmQgdG8gdGhlCisJICogZ3R0CisJICovCisJZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgPSAwOworCWRldi0+Zmx1c2hfZG9tYWlucyA9IDA7CisKKwkvKiBMb29rIHVwIG9iamVjdCBoYW5kbGVzIGFuZCBwZXJmb3JtIHRoZSByZWxvY2F0aW9ucyAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlvYmplY3RfbGlzdFtpXSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwKKwkJCQkJCSAgICAgICBleGVjX2xpc3RbaV0uaGFuZGxlKTsKKwkJaWYgKG9iamVjdF9saXN0W2ldID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgaGFuZGxlICVkIGF0IGluZGV4ICVkXG4iLAorCQkJCSAgIGV4ZWNfbGlzdFtpXS5oYW5kbGUsIGkpOworCQkJcmV0ID0gLUVCQURGOworCQkJZ290byBlcnI7CisJCX0KKworCQlvYmplY3RfbGlzdFtpXS0+cGVuZGluZ19yZWFkX2RvbWFpbnMgPSAwOworCQlvYmplY3RfbGlzdFtpXS0+cGVuZGluZ193cml0ZV9kb21haW4gPSAwOworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX2FuZF9yZWxvY2F0ZShvYmplY3RfbGlzdFtpXSwKKwkJCQkJCSAgICAgICBmaWxlX3ByaXYsCisJCQkJCQkgICAgICAgJmV4ZWNfbGlzdFtpXSk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigib2JqZWN0IGJpbmQgYW5kIHJlbG9jYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXBpbm5lZCA9IGkgKyAxOworCX0KKworCS8qIFNldCB0aGUgcGVuZGluZyByZWFkIGRvbWFpbnMgZm9yIHRoZSBiYXRjaCBidWZmZXIgdG8gQ09NTUFORCAqLworCWJhdGNoX29iaiA9IG9iamVjdF9saXN0W2FyZ3MtPmJ1ZmZlcl9jb3VudC0xXTsKKwliYXRjaF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJYmF0Y2hfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9IDA7CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmplY3RfbGlzdFtpXTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCQlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCQkvKiBXZSBldmljdGVkIHRoZSBidWZmZXIgaW4gdGhlIHByb2Nlc3Mgb2YgdmFsaWRhdGluZworCQkJICogb3VyIHNldCBvZiBidWZmZXJzIGluLiAgV2UgY291bGQgdHJ5IHRvIHJlY292ZXIgYnkKKwkJCSAqIGtpY2tpbmcgdGhlbSBldmVyeXRoaW5nIG91dCBhbmQgdHJ5aW5nIGFnYWluIGZyb20KKwkJCSAqIHRoZSBzdGFydC4KKwkJCSAqLworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyogbWFrZSBzdXJlIGFsbCBwcmV2aW91cyBtZW1vcnkgb3BlcmF0aW9ucyBoYXZlIHBhc3NlZCAqLworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosCisJCQkJCQkgb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucywKKwkJCQkJCSBvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCS8qIEZsdXNoL2ludmFsaWRhdGUgY2FjaGVzIGFuZCBjaGlwc2V0IGJ1ZmZlciAqLworCWZsdXNoX2RvbWFpbnMgPSBpOTE1X2dlbV9kZXZfc2V0X2RvbWFpbihkZXYpOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisjaWYgV0FUQ0hfQ09IRVJFTkNZCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCWk5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3kob2JqZWN0X2xpc3RbaV0sCisJCQkJCQlleGVjX2xpc3RbaV0uaGFuZGxlKTsKKwl9CisjZW5kaWYKKworCWV4ZWNfb2Zmc2V0ID0gZXhlY19saXN0W2FyZ3MtPmJ1ZmZlcl9jb3VudCAtIDFdLm9mZnNldDsKKworI2lmIFdBVENIX0VYRUMKKwlpOTE1X2dlbV9kdW1wX29iamVjdChvYmplY3RfbGlzdFthcmdzLT5idWZmZXJfY291bnQgLSAxXSwKKwkJCSAgICAgIGFyZ3MtPmJhdGNoX2xlbiwKKwkJCSAgICAgIF9fZnVuY19fLAorCQkJICAgICAgfjApOworI2VuZGlmCisKKwkodm9pZClpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmx1c2hfZG9tYWlucyk7CisKKwkvKiBFeGVjIHRoZSBiYXRjaGJ1ZmZlciAqLworCXJldCA9IGk5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoZGV2LCBhcmdzLCBleGVjX29mZnNldCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImRpc3BhdGNoIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgY29tbWFuZHMgaW4gdGhlIGJhdGNoIGJ1ZmZlciBhcmUKKwkgKiBmaW5pc2hlZCBiZWZvcmUgdGhlIGludGVycnVwdCBmaXJlcworCSAqLworCWZsdXNoX2RvbWFpbnMgPSBpOTE1X3JldGlyZV9jb21tYW5kcyhkZXYpOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJLyoKKwkgKiBHZXQgYSBzZXFubyByZXByZXNlbnRpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY3VycmVudCBidWZmZXIsCisJICogd2hpY2ggd2UgY2FuIHdhaXQgb24uICBXZSB3b3VsZCBsaWtlIHRvIG1pdGlnYXRlIHRoZXNlIGludGVycnVwdHMsCisJICogbGlrZWx5IGJ5IG9ubHkgY3JlYXRpbmcgc2Vxbm9zIG9jY2FzaW9uYWxseSAoc28gdGhhdCB3ZSBoYXZlCisJICogKnNvbWUqIGludGVycnVwdHMgcmVwcmVzZW50aW5nIGNvbXBsZXRpb24gb2YgYnVmZmVycyB0aGF0IHdlIGNhbgorCSAqIHdhaXQgb24gd2hlbiB0cnlpbmcgdG8gY2xlYXIgdXAgZ3R0IHNwYWNlKS4KKwkgKi8KKwlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCBmbHVzaF9kb21haW5zKTsKKwlCVUdfT04oc2Vxbm8gPT0gMCk7CisJaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3NlcW5vID0gc2Vxbm87CisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9fYWN0aXZlKG9iaik7CisJCW9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9IHNlcW5vOworI2lmIFdBVENIX0xSVQorCQlEUk1fSU5GTygiJXM6IG1vdmUgdG8gZXhlYyBsaXN0ICVwXG4iLCBfX2Z1bmNfXywgb2JqKTsKKyNlbmRpZgorCX0KKyNpZiBXQVRDSF9MUlUKKwlpOTE1X2R1bXBfbHJ1KGRldiwgX19mdW5jX18pOworI2VuZGlmCisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwkvKiBDb3B5IHRoZSBuZXcgYnVmZmVyIG9mZnNldHMgYmFjayB0byB0aGUgdXNlcidzIGV4ZWMgbGlzdC4gKi8KKwlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkgICBleGVjX2xpc3QsCisJCQkgICBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOworCWlmIChyZXQpCisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNvcHkgJWQgZXhlYyBlbnRyaWVzICIKKwkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAorCQkJICAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOworZXJyOgorCWlmIChvYmplY3RfbGlzdCAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwaW5uZWQ7IGkrKykKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmplY3RfbGlzdFtpXSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKQorCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqZWN0X2xpc3RbaV0pOworCX0KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworcHJlX211dGV4X2VycjoKKwlkcm1fZnJlZShvYmplY3RfbGlzdCwgc2l6ZW9mKCpvYmplY3RfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQsCisJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZXhlY19saXN0LCBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQsCisJCSBEUk1fTUVNX0RSSVZFUik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2k5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KG9iaiwgYWxpZ25tZW50KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIkZhaWx1cmUgdG8gYmluZDogJWQiLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlvYmpfcHJpdi0+cGluX2NvdW50Kys7CisKKwkvKiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBhY3RpdmUgYW5kIG5vdCBwZW5kaW5nIGEgZmx1c2gsCisJICogcmVtb3ZlIGl0IGZyb20gdGhlIGluYWN0aXZlIGxpc3QKKwkgKi8KKwlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCA9PSAxKSB7CisJCWF0b21pY19pbmMoJmRldi0+cGluX2NvdW50KTsKKwkJYXRvbWljX2FkZChvYmotPnNpemUsICZkZXYtPnBpbl9tZW1vcnkpOworCQlpZiAoIW9ial9wcml2LT5hY3RpdmUgJiYKKwkJICAgIChvYmotPndyaXRlX2RvbWFpbiAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCSAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSA9PSAwICYmCisJCSAgICAhbGlzdF9lbXB0eSgmb2JqX3ByaXYtPmxpc3QpKQorCQkJbGlzdF9kZWxfaW5pdCgmb2JqX3ByaXYtPmxpc3QpOworCX0KKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAoraTkxNV9nZW1fb2JqZWN0X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCW9ial9wcml2LT5waW5fY291bnQtLTsKKwlCVUdfT04ob2JqX3ByaXYtPnBpbl9jb3VudCA8IDApOworCUJVR19PTihvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpOworCisJLyogSWYgdGhlIG9iamVjdCBpcyBubyBsb25nZXIgcGlubmVkLCBhbmQgaXMKKwkgKiBuZWl0aGVyIGFjdGl2ZSBub3IgYmVpbmcgZmx1c2hlZCwgdGhlbiBzdGljayBpdCBvbgorCSAqIHRoZSBpbmFjdGl2ZSBsaXN0CisJICovCisJaWYgKG9ial9wcml2LT5waW5fY291bnQgPT0gMCkgeworCQlpZiAoIW9ial9wcml2LT5hY3RpdmUgJiYKKwkJICAgIChvYmotPndyaXRlX2RvbWFpbiAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCSAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSA9PSAwKQorCQkJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5saXN0LAorCQkJCSAgICAgICAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCQlhdG9taWNfZGVjKCZkZXYtPnBpbl9jb3VudCk7CisJCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5waW5fbWVtb3J5KTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworfQorCitpbnQKK2k5MTVfZ2VtX3Bpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiQmFkIGhhbmRsZSBpbiBpOTE1X2dlbV9waW5faW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCQURGOworCX0KKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgYXJncy0+YWxpZ25tZW50KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogWFhYIC0gZmx1c2ggdGhlIENQVSBjYWNoZXMgZm9yIHBpbm5lZCBvYmplY3RzCisJICogYXMgdGhlIFggc2VydmVyIGRvZXNuJ3QgbWFuYWdlIGRvbWFpbnMgeWV0CisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgeworCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKwkJb2JqLT53cml0ZV9kb21haW4gPSAwOworCX0KKwlhcmdzLT5vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fdW5waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiQmFkIGhhbmRsZSBpbiBpOTE1X2dlbV91bnBpbl9pb2N0bCgpOiAlZFxuIiwKKwkJCSAgYXJncy0+aGFuZGxlKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUJBREY7CisJfQorCisJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX2J1c3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJCYWQgaGFuZGxlIGluIGk5MTVfZ2VtX2J1c3lfaW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCQURGOworCX0KKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlhcmdzLT5idXN5ID0gb2JqX3ByaXYtPmFjdGl2ZTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fdGhyb3R0bGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworICAgIHJldHVybiBpOTE1X2dlbV9yaW5nX3Rocm90dGxlKGRldiwgZmlsZV9wcml2KTsKK30KKworaW50IGk5MTVfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9ial9wcml2ID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKm9ial9wcml2KSwgRFJNX01FTV9EUklWRVIpOworCWlmIChvYmpfcHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogV2UndmUganVzdCBhbGxvY2F0ZWQgcGFnZXMgZnJvbSB0aGUga2VybmVsLAorCSAqIHNvIHRoZXkndmUganVzdCBiZWVuIHdyaXR0ZW4gYnkgdGhlIENQVSB3aXRoCisJICogemVyb3MuIFRoZXknbGwgbmVlZCB0byBiZSBjbGZsdXNoZWQgYmVmb3JlIHdlCisJICogdXNlIHRoZW0gd2l0aCB0aGUgR1BVLgorCSAqLworCW9iai0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKKwlvYmotPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisKKwlvYmpfcHJpdi0+YWdwX3R5cGUgPSBBR1BfVVNFUl9NRU1PUlk7CisKKwlvYmotPmRyaXZlcl9wcml2YXRlID0gb2JqX3ByaXY7CisJb2JqX3ByaXYtPm9iaiA9IG9iajsKKwlJTklUX0xJU1RfSEVBRCgmb2JqX3ByaXYtPmxpc3QpOworCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwl3aGlsZSAob2JqX3ByaXYtPnBpbl9jb3VudCA+IDApCisJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCisJaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCisJZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkLCAxLCBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUob2JqLT5kcml2ZXJfcHJpdmF0ZSwgMSwgRFJNX01FTV9EUklWRVIpOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWludCByZXQ7CisJdWludDMyX3QgZmx1c2hfZG9tYWluczsKKworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4ob2JqLCByZWFkX2RvbWFpbnMsIHdyaXRlX2RvbWFpbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlmbHVzaF9kb21haW5zID0gaTkxNV9nZW1fZGV2X3NldF9kb21haW4ob2JqLT5kZXYpOworCisJaWYgKGZsdXNoX2RvbWFpbnMgJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpCisJCSh2b2lkKSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmx1c2hfZG9tYWlucyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqIFVuYmluZHMgYWxsIG9iamVjdHMgdGhhdCBhcmUgb24gdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiAqLworc3RhdGljIGludAoraTkxNV9nZW1fZXZpY3RfZnJvbV9saXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCByZXQ7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkJICAgIGxpc3QpOworCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApIHsKKwkJCURSTV9FUlJPUigiUGlubmVkIG9iamVjdCBpbiB1bmJpbmQgbGlzdFxuIik7CisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCQlpZiAocmV0ICE9IDApIHsKKwkJCURSTV9FUlJPUigiRXJyb3IgdW5iaW5kaW5nIG9iamVjdCBpbiBMZWF2ZVZUOiAlZFxuIiwKKwkJCQkgIHJldCk7CisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc2Vxbm8sIGN1cl9zZXFubywgbGFzdF9zZXFubzsKKwlpbnQgc3R1Y2ssIHJldDsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChkZXZfcHJpdi0+bW0uc3VzcGVuZGVkIHx8IGRldl9wcml2LT5yaW5nLnJpbmdfb2JqID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCS8qIEhhY2shICBEb24ndCBsZXQgYW55Ym9keSBkbyBleGVjYnVmIHdoaWxlIHdlIGRvbid0IGNvbnRyb2wgdGhlIGNoaXAuCisJICogV2UgbmVlZCB0byByZXBsYWNlIHRoaXMgd2l0aCBhIHNlbWFwaG9yZSwgb3Igc29tZXRoaW5nLgorCSAqLworCWRldl9wcml2LT5tbS5zdXNwZW5kZWQgPSAxOworCisJLyogQ2FuY2VsIHRoZSByZXRpcmUgd29yayBoYW5kbGVyLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggaWYgcnVubmluZworCSAqLworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKworCS8qIEZsdXNoIHRoZSBHUFUgYWxvbmcgd2l0aCBhbGwgbm9uLUNQVSB3cml0ZSBkb21haW5zCisJICovCisJaTkxNV9nZW1fZmx1c2goZGV2LCB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCksCisJCSAgICAgICB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpOworCXNlcW5vID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCUk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKworCWlmIChzZXFubyA9PSAwKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8gPSBzZXFubzsKKwlsYXN0X3NlcW5vID0gMDsKKwlzdHVjayA9IDA7CisJZm9yICg7OykgeworCQljdXJfc2Vxbm8gPSBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KTsKKwkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKGN1cl9zZXFubywgc2Vxbm8pKQorCQkJYnJlYWs7CisJCWlmIChsYXN0X3NlcW5vID09IGN1cl9zZXFubykgeworCQkJaWYgKHN0dWNrKysgPiAxMDApIHsKKwkJCQlEUk1fRVJST1IoImhhcmR3YXJlIHdlZGdlZFxuIik7CisJCQkJZGV2X3ByaXYtPm1tLndlZGdlZCA9IDE7CisJCQkJRFJNX1dBS0VVUCgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJbXNsZWVwKDEwKTsKKwkJbGFzdF9zZXFubyA9IGN1cl9zZXFubzsKKwl9CisJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gMDsKKworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOworCisJLyogQWN0aXZlIGFuZCBmbHVzaGluZyBzaG91bGQgbm93IGJlIGVtcHR5IGFzIHdlJ3ZlCisJICogd2FpdGVkIGZvciBhIHNlcXVlbmNlIGhpZ2hlciB0aGFuIGFueSBwZW5kaW5nIGV4ZWNidWZmZXIKKwkgKi8KKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKTsKKworCS8qIFJlcXVlc3Qgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZSBhbHNvIHdhaXRlZAorCSAqIGZvciB0aGUgbGFzdCByZXF1ZXN0IGluIHRoZSBsaXN0CisJICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSk7CisKKwkvKiBNb3ZlIGFsbCBidWZmZXJzIG91dCBvZiB0aGUgR1RULiAqLworCXJldCA9IGk5MTVfZ2VtX2V2aWN0X2Zyb21fbGlzdChkZXYsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSk7CisKKwlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9pbml0X2h3cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJLyogSWYgd2UgbmVlZCBhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoZSBzdGF0dXMgcGFnZSwgaXQncyBhbHJlYWR5CisJICogaW5pdGlhbGl6ZWQgYXQgZHJpdmVyIGxvYWQgdGltZS4KKwkgKi8KKwlpZiAoIUk5MTVfTkVFRF9HRlhfSFdTKGRldikpCisJCXJldHVybiAwOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCA0MDk2KTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgc3RhdHVzIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9ial9wcml2LT5hZ3BfdHlwZSA9IEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlk7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgNDA5Nik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkciA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0ga21hcChvYmpfcHJpdi0+cGFnZV9saXN0WzBdKTsKKwlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbWFwIHN0YXR1cyBwYWdlLlxuIik7CisJCW1lbXNldCgmZGV2X3ByaXYtPmh3c19tYXAsIDAsIHNpemVvZihkZXZfcHJpdi0+aHdzX21hcCkpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2X3ByaXYtPmh3c19vYmogPSBvYmo7CisJbWVtc2V0KGRldl9wcml2LT5od19zdGF0dXNfcGFnZSwgMCwgUEFHRV9TSVpFKTsKKwlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCUk5MTVfUkVBRChIV1NfUEdBKTsgLyogcG9zdGluZyByZWFkICovCisJRFJNX0RFQlVHKCJod3Mgb2Zmc2V0OiAweCUwOHhcbiIsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2luaXRfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCXUzMiBoZWFkOworCisJcmV0ID0gaTkxNV9nZW1faW5pdF9od3MoZGV2KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9hbGxvYyhkZXYsIDEyOCAqIDEwMjQpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSByaW5nYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCA0MDk2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGtlcm5lbCBtYXBwaW5nIGZvciB0aGUgcmluZy4gKi8KKwlkZXZfcHJpdi0+cmluZy5TaXplID0gb2JqLT5zaXplOworCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IG9iai0+c2l6ZSAtIDE7CisKKwlkZXZfcHJpdi0+cmluZy5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IG9iai0+c2l6ZTsKKwlkZXZfcHJpdi0+cmluZy5tYXAudHlwZSA9IDA7CisJZGV2X3ByaXYtPnJpbmcubWFwLmZsYWdzID0gMDsKKwlkZXZfcHJpdi0+cmluZy5tYXAubXRyciA9IDA7CisKKwlkcm1fY29yZV9pb3JlbWFwX3djKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7CisJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgcmluZ2J1ZmZlci5cbiIpOworCQltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5yaW5nLnJpbmdfb2JqID0gb2JqOworCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOworCisJLyogU3RvcCB0aGUgcmluZyBpZiBpdCdzIHJ1bm5pbmcuICovCisJSTkxNV9XUklURShQUkIwX0NUTCwgMCk7CisJSTkxNV9XUklURShQUkIwX1RBSUwsIDApOworCUk5MTVfV1JJVEUoUFJCMF9IRUFELCAwKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHJpbmcuICovCisJSTkxNV9XUklURShQUkIwX1NUQVJULCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisJaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOworCisJLyogRzQ1IHJpbmcgaW5pdGlhbGl6YXRpb24gZmFpbHMgdG8gcmVzZXQgaGVhZCB0byB6ZXJvICovCisJaWYgKGhlYWQgIT0gMCkgeworCQlEUk1fRVJST1IoIlJpbmcgaGVhZCBub3QgcmVzZXQgdG8gemVybyAiCisJCQkgICJjdGwgJTA4eCBoZWFkICUwOHggdGFpbCAlMDh4IHN0YXJ0ICUwOHhcbiIsCisJCQkgIEk5MTVfUkVBRChQUkIwX0NUTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX0hFQUQpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9UQUlMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfU1RBUlQpKTsKKwkJSTkxNV9XUklURShQUkIwX0hFQUQsIDApOworCisJCURSTV9FUlJPUigiUmluZyBoZWFkIGZvcmNlZCB0byB6ZXJvICIKKwkJCSAgImN0bCAlMDh4IGhlYWQgJTA4eCB0YWlsICUwOHggc3RhcnQgJTA4eFxuIiwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfQ1RMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfSEVBRCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1RBSUwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9TVEFSVCkpOworCX0KKworCUk5MTVfV1JJVEUoUFJCMF9DVEwsCisJCSAgICgob2JqLT5zaXplIC0gNDA5NikgJiBSSU5HX05SX1BBR0VTKSB8CisJCSAgIFJJTkdfTk9fUkVQT1JUIHwKKwkJICAgUklOR19WQUxJRCk7CisKKwloZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CisKKwkvKiBJZiB0aGUgaGVhZCBpcyBzdGlsbCBub3QgemVybywgdGhlIHJpbmcgaXMgZGVhZCAqLworCWlmIChoZWFkICE9IDApIHsKKwkJRFJNX0VSUk9SKCJSaW5nIGluaXRpYWxpemF0aW9uIGZhaWxlZCAiCisJCQkgICJjdGwgJTA4eCBoZWFkICUwOHggdGFpbCAlMDh4IHN0YXJ0ICUwOHhcbiIsCisJCQkgIEk5MTVfUkVBRChQUkIwX0NUTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX0hFQUQpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9UQUlMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfU1RBUlQpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogVXBkYXRlIG91ciBjYWNoZSBvZiB0aGUgcmluZyBzdGF0ZSAqLworCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yaW5nLnJpbmdfb2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShkZXZfcHJpdi0+cmluZy5yaW5nX29iaik7CisJZGV2X3ByaXYtPnJpbmcucmluZ19vYmogPSBOVUxMOworCW1lbXNldCgmZGV2X3ByaXYtPnJpbmcsIDAsIHNpemVvZihkZXZfcHJpdi0+cmluZykpOworCisJaWYgKGRldl9wcml2LT5od3Nfb2JqICE9IE5VTEwpIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+aHdzX29iajsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCQlrdW5tYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlkZXZfcHJpdi0+aHdzX29iaiA9IE5VTEw7CisJCW1lbXNldCgmZGV2X3ByaXYtPmh3c19tYXAsIDAsIHNpemVvZihkZXZfcHJpdi0+aHdzX21hcCkpOworCQlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPSBOVUxMOworCisJCS8qIFdyaXRlIGhpZ2ggYWRkcmVzcyBpbnRvIEhXU19QR0Egd2hlbiBkaXNhYmxpbmcuICovCisJCUk5MTVfV1JJVEUoSFdTX1BHQSwgMHgxZmZmZjAwMCk7CisJfQorfQorCitpbnQKK2k5MTVfZ2VtX2VudGVydnRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlpZiAoZGV2X3ByaXYtPm1tLndlZGdlZCkgeworCQlEUk1fRVJST1IoIlJlZW5hYmxpbmcgd2VkZ2VkIGhhcmR3YXJlLCBnb29kIGx1Y2tcbiIpOworCQlkZXZfcHJpdi0+bW0ud2VkZ2VkID0gMDsKKwl9CisKKwlyZXQgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCWRldl9wcml2LT5tbS5zdXNwZW5kZWQgPSAwOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJZHJtX2lycV9pbnN0YWxsKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50CitpOTE1X2dlbV9sZWF2ZXZ0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9nZW1faWRsZShkZXYpOworCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitpOTE1X2dlbV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9nZW1faWRsZShkZXYpOworCWlmIChyZXQpCisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGlkbGUgaGFyZHdhcmU6ICVkXG4iLCByZXQpOworfQorCit2b2lkCitpOTE1X2dlbV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpOworCUlOSVRfREVMQVlFRF9XT1JLKCZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmssCisJCQkgIGk5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIpOworCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyA9IDE7CisKKwlpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxYzA4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgS2VpdGggUGFja2FyZCA8a2VpdGhwQGtlaXRocC5jb20+CisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCisjaWYgV0FUQ0hfSU5BQ1RJVkUKK3ZvaWQKK2k5MTVfdmVyaWZ5X2luYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwgbGlzdCkgeworCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCQlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCB8fCBvYmpfcHJpdi0+YWN0aXZlIHx8CisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkpCisJCQlEUk1fRVJST1IoImluYWN0aXZlICVwIChwICVkIGEgJWQgdyAleCkgICVzOiVkXG4iLAorCQkJCSAgb2JqLAorCQkJCSAgb2JqX3ByaXYtPnBpbl9jb3VudCwgb2JqX3ByaXYtPmFjdGl2ZSwKKwkJCQkgIG9iai0+d3JpdGVfZG9tYWluLCBmaWxlLCBsaW5lKTsKKwl9Cit9CisjZW5kaWYgLyogV0FUQ0hfSU5BQ1RJVkUgKi8KKworCisjaWYgV0FUQ0hfQlVGIHwgV0FUQ0hfRVhFQyB8IFdBVENIX1BXUklURQorc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2R1bXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwKKwkJICAgdWludDMyX3QgYmlhcywgdWludDMyX3QgbWFyaykKK3sKKwl1aW50MzJfdCAqbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWludCBpOworCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDQpCisJCURSTV9JTkZPKCIlMDh4OiAlMDh4JXNcbiIsCisJCQkgIChpbnQpIChiaWFzICsgaSksIG1lbVtpIC8gNF0sCisJCQkgIChiaWFzICsgaSA9PSBtYXJrKSA/ICIgKioqKioqKioiIDogIiIpOworCWt1bm1hcF9hdG9taWMobWVtLCBLTV9VU0VSMCk7CisJLyogZ2l2ZSBzeXNsb2cgdGltZSB0byBjYXRjaCB1cCAqLworCW1zbGVlcCgxKTsKK30KKwordm9pZAoraTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCisJCSAgICAgY29uc3QgY2hhciAqd2hlcmUsIHVpbnQzMl90IG1hcmspCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZTsKKworCURSTV9JTkZPKCIlczogb2JqZWN0IGF0IG9mZnNldCAlMDh4XG4iLCB3aGVyZSwgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAobGVuICsgUEFHRV9TSVpFLTEpIC8gUEFHRV9TSVpFOyBwYWdlKyspIHsKKwkJaW50IHBhZ2VfbGVuLCBjaHVuaywgY2h1bmtfbGVuOworCisJCXBhZ2VfbGVuID0gbGVuIC0gcGFnZSAqIFBBR0VfU0laRTsKKwkJaWYgKHBhZ2VfbGVuID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW4gPSBQQUdFX1NJWkU7CisKKwkJZm9yIChjaHVuayA9IDA7IGNodW5rIDwgcGFnZV9sZW47IGNodW5rICs9IDEyOCkgeworCQkJY2h1bmtfbGVuID0gcGFnZV9sZW4gLSBjaHVuazsKKwkJCWlmIChjaHVua19sZW4gPiAxMjgpCisJCQkJY2h1bmtfbGVuID0gMTI4OworCQkJaTkxNV9nZW1fZHVtcF9wYWdlKG9ial9wcml2LT5wYWdlX2xpc3RbcGFnZV0sCisJCQkJCSAgIGNodW5rLCBjaHVuayArIGNodW5rX2xlbiwKKwkJCQkJICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKworCQkJCQkgICBwYWdlICogUEFHRV9TSVpFLAorCQkJCQkgICBtYXJrKTsKKwkJfQorCX0KK30KKyNlbmRpZgorCisjaWYgV0FUQ0hfTFJVCit2b2lkCitpOTE1X2R1bXBfbHJ1KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKndoZXJlKQoreworCWRybV9pOTE1X3ByaXZhdGVfdAkJKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXY7CisKKwlEUk1fSU5GTygiYWN0aXZlIGxpc3QgJXMge1xuIiwgd2hlcmUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCURSTV9JTkZPKCIgICAgJXA6ICUwOHhcbiIsIG9ial9wcml2LAorCQkJIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJfQorCURSTV9JTkZPKCJ9XG4iKTsKKwlEUk1fSU5GTygiZmx1c2hpbmcgbGlzdCAlcyB7XG4iLCB3aGVyZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fSU5GTygiICAgICVwOiAlMDh4XG4iLCBvYmpfcHJpdiwKKwkJCSBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCX0KKwlEUk1fSU5GTygifVxuIik7CisJRFJNX0lORk8oImluYWN0aXZlICVzIHtcbiIsIHdoZXJlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCisJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwl9CisJRFJNX0lORk8oIn1cbiIpOworfQorI2VuZGlmCisKKworI2lmIFdBVENIX0NPSEVSRU5DWQordm9pZAoraTkxNV9nZW1fb2JqZWN0X2NoZWNrX2NvaGVyZW5jeShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZTsKKwl1aW50MzJfdCAqZ3R0X21hcHBpbmc7CisJdWludDMyX3QgKmJhY2tpbmdfbWFwID0gTlVMTDsKKwlpbnQgYmFkX2NvdW50ID0gMDsKKworCURSTV9JTkZPKCIlczogY2hlY2tpbmcgY29oZXJlbmN5IG9mIG9iamVjdCAlcEAweCUwOHggKCVkLCAlZGtiKTpcbiIsCisJCSBfX2Z1bmNfXywgb2JqLCBvYmpfcHJpdi0+Z3R0X29mZnNldCwgaGFuZGxlLAorCQkgb2JqLT5zaXplIC8gMTAyNCk7CisKKwlndHRfbWFwcGluZyA9IGlvcmVtYXAoZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldCwKKwkJCSAgICAgIG9iai0+c2l6ZSk7CisJaWYgKGd0dF9tYXBwaW5nID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIEdUVCBzcGFjZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgb2JqLT5zaXplIC8gUEFHRV9TSVpFOyBwYWdlKyspIHsKKwkJaW50IGk7CisKKwkJYmFja2luZ19tYXAgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZV9saXN0W3BhZ2VdLCBLTV9VU0VSMCk7CisKKwkJaWYgKGJhY2tpbmdfbWFwID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBiYWNraW5nIHBhZ2VcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gNDsgaSsrKSB7CisJCQl1aW50MzJfdCBjcHV2YWwgPSBiYWNraW5nX21hcFtpXTsKKwkJCXVpbnQzMl90IGd0dHZhbCA9IHJlYWRsKGd0dF9tYXBwaW5nICsKKwkJCQkJCXBhZ2UgKiAxMDI0ICsgaSk7CisKKwkJCWlmIChjcHV2YWwgIT0gZ3R0dmFsKSB7CisJCQkJRFJNX0lORk8oImluY29oZXJlbnQgQ1BVIHZzIEdQVSBhdCAweCUwOHg6ICIKKwkJCQkJICIweCUwOHggdnMgMHglMDh4XG4iLAorCQkJCQkgKGludCkob2JqX3ByaXYtPmd0dF9vZmZzZXQgKworCQkJCQkgICAgICAgcGFnZSAqIFBBR0VfU0laRSArIGkgKiA0KSwKKwkJCQkJIGNwdXZhbCwgZ3R0dmFsKTsKKwkJCQlpZiAoYmFkX2NvdW50KysgPj0gOCkgeworCQkJCQlEUk1fSU5GTygiLi4uXG4iKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfQorCQl9CisJCWt1bm1hcF9hdG9taWMoYmFja2luZ19tYXAsIEtNX1VTRVIwKTsKKwkJYmFja2luZ19tYXAgPSBOVUxMOworCX0KKworIG91dDoKKwlpZiAoYmFja2luZ19tYXAgIT0gTlVMTCkKKwkJa3VubWFwX2F0b21pYyhiYWNraW5nX21hcCwgS01fVVNFUjApOworCWlvdW5tYXAoZ3R0X21hcHBpbmcpOworCisJLyogZ2l2ZSBzeXNsb2cgdGltZSB0byBjYXRjaCB1cCAqLworCW1zbGVlcCgxKTsKKworCS8qIERpcmVjdGx5IGZsdXNoIHRoZSBvYmplY3QsIHNpbmNlIHdlIGp1c3QgbG9hZGVkIHZhbHVlcyB3aXRoIHRoZSBDUFUKKwkgKiBmcm9tIHRoZSBiYWNraW5nIHBhZ2VzIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRpc3R1cmIgdGhlIGNhY2hlCisJICogbWFuYWdlbWVudCB0aGF0IHdlJ3JlIHRyeWluZyB0byBvYnNlcnZlLgorCSAqLworCisJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGUxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9wcm9jLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIGludCBpOTE1X2dlbV9hY3RpdmVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCWludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkFjdGl2ZTpcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9iai0+bmFtZSkgeworCQkJRFJNX1BST0NfUFJJTlQoIiAgICAlcCglZCk6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLCBvYmotPm5hbWUsCisJCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgICAgJXA6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0KKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fZmx1c2hpbmdfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiRmx1c2hpbmc6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9iai0+bmFtZSkgeworCQkJRFJNX1BST0NfUFJJTlQoIiAgICAlcCglZCk6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLCBvYmotPm5hbWUsCisJCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgICAgJXA6ICUwOHggJTA4eCAlZFxuIiwgb2JqLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0KKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1faW5hY3RpdmVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiSW5hY3RpdmU6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9iai0+bmFtZSkgeworCQkJRFJNX1BST0NfUFJJTlQoIiAgICAlcCglZCk6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLCBvYmotPm5hbWUsCisJCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgICAgJXA6ICUwOHggJTA4eCAlZFxuIiwgb2JqLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0KKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVzdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpnZW1fcmVxdWVzdDsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCJSZXF1ZXN0OlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShnZW1fcmVxdWVzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCURSTV9QUk9DX1BSSU5UKCIgICAgJWQgQCAlZCAlMDh4XG4iLAorCQkJICAgICAgIGdlbV9yZXF1ZXN0LT5zZXFubywKKwkJCSAgICAgICAoaW50KSAoamlmZmllcyAtIGdlbV9yZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMpLAorCQkJICAgICAgIGdlbV9yZXF1ZXN0LT5mbHVzaF9kb21haW5zKTsKKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlICE9IE5VTEwpIHsKKwkJRFJNX1BST0NfUFJJTlQoIkN1cnJlbnQgc2VxdWVuY2U6ICVkXG4iLAorCQkJICAgICAgIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKwl9IGVsc2UgeworCQlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogaHdzIHVuaW5pdGlhbGl6ZWRcbiIpOworCX0KKwlEUk1fUFJPQ19QUklOVCgiV2FpdGVyIHNlcXVlbmNlOiAgJWRcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8pOworCURSTV9QUk9DX1BSSU5UKCJJUlEgc2VxdWVuY2U6ICAgICAlZFxuIiwgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCisKK3N0YXRpYyBpbnQgaTkxNV9pbnRlcnJ1cHRfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IGVuYWJsZTogICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChJRVIpKTsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IGlkZW50aXR5OiAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChJSVIpKTsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IG1hc2s6ICAgICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChJTVIpKTsKKwlEUk1fUFJPQ19QUklOVCgiUGlwZSBBIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChQSVBFQVNUQVQpKTsKKwlEUk1fUFJPQ19QUklOVCgiUGlwZSBCIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChQSVBFQlNUQVQpKTsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0cyByZWNlaXZlZDogJWRcbiIsCisJCSAgICAgICBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCkpOworCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgeworCQlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCisJCQkgICAgICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOworCX0gZWxzZSB7CisJCURSTV9QUk9DX1BSSU5UKCJDdXJyZW50IHNlcXVlbmNlOiAgICBod3MgdW5pbml0aWFsaXplZFxuIik7CisJfQorCURSTV9QUk9DX1BSSU5UKCJXYWl0ZXIgc2VxdWVuY2U6ICAgICAlZFxuIiwKKwkJICAgICAgIGRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7CisJRFJNX1BST0NfUFJJTlQoIklSUSBzZXF1ZW5jZTogICAgICAgICVkXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgc3RydWN0IGRybV9wcm9jX2xpc3QgeworCS8qKiBmaWxlIG5hbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCS8qKiBwcm9jIGNhbGxiYWNrKi8KKwlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKK30gaTkxNV9nZW1fcHJvY19saXN0W10gPSB7CisJeyJpOTE1X2dlbV9hY3RpdmUiLCBpOTE1X2dlbV9hY3RpdmVfaW5mb30sCisJeyJpOTE1X2dlbV9mbHVzaGluZyIsIGk5MTVfZ2VtX2ZsdXNoaW5nX2luZm99LAorCXsiaTkxNV9nZW1faW5hY3RpdmUiLCBpOTE1X2dlbV9pbmFjdGl2ZV9pbmZvfSwKKwl7Imk5MTVfZ2VtX3JlcXVlc3QiLCBpOTE1X2dlbV9yZXF1ZXN0X2luZm99LAorCXsiaTkxNV9nZW1fc2Vxbm8iLCBpOTE1X2dlbV9zZXFub19pbmZvfSwKKwl7Imk5MTVfZ2VtX2ludGVycnVwdCIsIGk5MTVfaW50ZXJydXB0X2luZm99LAorfTsKKworI2RlZmluZSBJOTE1X0dFTV9QUk9DX0VOVFJJRVMgQVJSQVlfU0laRShpOTE1X2dlbV9wcm9jX2xpc3QpCisKK2ludCBpOTE1X2dlbV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9HRU1fUFJPQ19FTlRSSUVTOyBpKyspIHsKKwkJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsCisJCQkJCVNfSUZSRUcgfCBTX0lSVUdPLCBtaW5vci0+ZGV2X3Jvb3QpOworCQlpZiAoIWVudCkgeworCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8uLi4vJXNcbiIsCisJCQkJICBpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSk7CisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCXJlbW92ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLAorCQkJCQkJICBtaW5vci0+ZGV2X3Jvb3QpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWVudC0+cmVhZF9wcm9jID0gaTkxNV9nZW1fcHJvY19saXN0W2ldLmY7CisJCWVudC0+ZGF0YSA9IG1pbm9yOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2dlbV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJaW50IGk7CisKKwlpZiAoIW1pbm9yLT5kZXZfcm9vdCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVfR0VNX1BST0NfRU5UUklFUzsgaSsrKQorCQlyZW1vdmVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwgbWlub3ItPmRldl9yb290KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiODVhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCisvKiogQGZpbGUgaTkxNV9nZW1fdGlsaW5nLmMKKyAqCisgKiBTdXBwb3J0IGZvciBtYW5hZ2luZyB0aWxpbmcgc3RhdGUgb2YgYnVmZmVyIG9iamVjdHMuCisgKgorICogVGhlIGlkZWEgYmVoaW5kIHRpbGluZyBpcyB0byBpbmNyZWFzZSBjYWNoZSBoaXQgcmF0ZXMgYnkgcmVhcnJhbmdpbmcKKyAqIHBpeGVsIGRhdGEgc28gdGhhdCBhIGdyb3VwIG9mIHBpeGVsIGFjY2Vzc2VzIGFyZSBpbiB0aGUgc2FtZSBjYWNoZWxpbmUuCisgKiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBmcm9tIGRvaW5nIHRoaXMgb24gdGhlIGJhY2svZGVwdGggYnVmZmVyIGFyZSBvbgorICogdGhlIG9yZGVyIG9mIDMwJS4KKyAqCisgKiBJbnRlbCBhcmNoaXRlY3R1cmVzIG1ha2UgdGhpcyBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkLCB0aG91Z2gsIGJ5CisgKiBhZGp1c3RtZW50cyBtYWRlIHRvIGFkZHJlc3Npbmcgb2YgZGF0YSB3aGVuIHRoZSBtZW1vcnkgaXMgaW4gaW50ZXJsZWF2ZWQKKyAqIG1vZGUgKG1hdGNoZWQgcGFpcnMgb2YgRElNTVMpIHRvIGltcHJvdmUgbWVtb3J5IGJhbmR3aWR0aC4KKyAqIEZvciBpbnRlcmxlYXZlZCBtZW1vcnksIHRoZSBDUFUgc2VuZHMgZXZlcnkgc2VxdWVudGlhbCA2NCBieXRlcworICogdG8gYW4gYWx0ZXJuYXRlIG1lbW9yeSBjaGFubmVsIHNvIGl0IGNhbiBnZXQgdGhlIGJhbmR3aWR0aCBmcm9tIGJvdGguCisgKgorICogVGhlIEdQVSBhbHNvIHJlYXJyYW5nZXMgaXRzIGFjY2Vzc2VzIGZvciBpbmNyZWFzZWQgYmFuZHdpZHRoIHRvIGludGVybGVhdmVkCisgKiBtZW1vcnksIGFuZCBpdCBtYXRjaGVzIHdoYXQgdGhlIENQVSBkb2VzIGZvciBub24tdGlsZWQuICBIb3dldmVyLCB3aGVuIHRpbGVkCisgKiBpdCBkb2VzIGl0IGEgbGl0dGxlIGRpZmZlcmVudGx5LCBzaW5jZSBvbmUgd2Fsa3MgYWRkcmVzc2VzIG5vdCBqdXN0IGluIHRoZQorICogWCBkaXJlY3Rpb24gYnV0IGFsc28gWS4gIFNvLCBhbG9uZyB3aXRoIGFsdGVybmF0aW5nIGNoYW5uZWxzIHdoZW4gYml0CisgKiA2IG9mIHRoZSBhZGRyZXNzIGZsaXBzLCBpdCBhbHNvIGFsdGVybmF0ZXMgd2hlbiBvdGhlciBiaXRzIGZsaXAgLS0gIEJpdHMgOQorICogKGV2ZXJ5IDUxMiBieXRlcywgYW4gWCB0aWxlIHNjYW5saW5lKSBhbmQgMTAgKGV2ZXJ5IHR3byBYIHRpbGUgc2NhbmxpbmVzKQorICogYXJlIGNvbW1vbiB0byBib3RoIHRoZSA5MTUgYW5kIDk2NS1jbGFzcyBoYXJkd2FyZS4KKyAqCisgKiBUaGUgQ1BVIGFsc28gc29tZXRpbWVzIFhPUnMgaW4gaGlnaGVyIGJpdHMgYXMgd2VsbCwgdG8gaW1wcm92ZQorICogYmFuZHdpZHRoIGRvaW5nIHN0cmlkZWQgYWNjZXNzIGxpa2Ugd2UgZG8gc28gZnJlcXVlbnRseSBpbiBncmFwaGljcy4gIFRoaXMKKyAqIGlzIGNhbGxlZCAiQ2hhbm5lbCBYT1IgUmFuZG9taXphdGlvbiIgaW4gdGhlIE1DSCBkb2N1bWVudGF0aW9uLiAgVGhlIHJlc3VsdAorICogaXMgdGhhdCB0aGUgQ1BVIGlzIFhPUmluZyBpbiBlaXRoZXIgYml0IDExIG9yIGJpdCAxNyB0byBiaXQgNiBvZiBpdHMgYWRkcmVzcworICogZGVjb2RlLgorICoKKyAqIEFsbCBvZiB0aGlzIGJpdCA2IFhPUmluZyBoYXMgYW4gZWZmZWN0IG9uIG91ciBtZW1vcnkgbWFuYWdlbWVudCwKKyAqIGFzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIDNkIGRyaXZlciBjYW4gY29ycmVjdGx5IGFkZHJlc3Mgb2JqZWN0CisgKiBjb250ZW50cy4KKyAqCisgKiBJZiB3ZSBkb24ndCBoYXZlIGludGVybGVhdmVkIG1lbW9yeSwgYWxsIHRpbGluZyBpcyBzYWZlIGFuZCBubyBzd2l6emxpbmcgaXMKKyAqIHJlcXVpcmVkLgorICoKKyAqIFdoZW4gYml0IDE3IGlzIFhPUmVkIGluLCB3ZSBzaW1wbHkgcmVmdXNlIHRvIHRpbGUgYXQgYWxsLiAgQml0CisgKiAxNyBpcyBub3QganVzdCBhIHBhZ2Ugb2Zmc2V0LCBzbyBhcyB3ZSBwYWdlIGFuIG9iamV0IG91dCBhbmQgYmFjayBpbiwKKyAqIGluZGl2aWR1YWwgcGFnZXMgaW4gaXQgd2lsbCBoYXZlIGRpZmZlcmVudCBiaXQgMTcgYWRkcmVzc2VzLCByZXN1bHRpbmcgaW4KKyAqIGVhY2ggNjQgYnl0ZXMgYmVpbmcgc3dhcHBlZCB3aXRoIGl0cyBuZWlnaGJvciEKKyAqCisgKiBPdGhlcndpc2UsIGlmIGludGVybGVhdmVkLCB3ZSBoYXZlIHRvIHRlbGwgdGhlIDNkIGRyaXZlciB3aGF0IHRoZSBhZGRyZXNzCisgKiBzd2l6emxpbmcgaXQgbmVlZHMgdG8gZG8gaXMsIHNpbmNlIGl0J3Mgd3JpdGluZyB3aXRoIHRoZSBDUFUgdG8gdGhlIHBhZ2VzCisgKiAoYml0IDYgYW5kIHBvdGVudGlhbGx5IGJpdCAxMSBYT1JlZCBpbiksIGFuZCB0aGUgR1BVIGlzIHJlYWRpbmcgZnJvbSB0aGUKKyAqIHBhZ2VzIChiaXQgNiwgOSwgYW5kIDEwIFhPUmVkIGluKSwgcmVzdWx0aW5nIGluIGEgY3VtdWxhdGl2ZSBiaXQgc3dpenpsaW5nCisgKiByZXF1aXJlZCBieSB0aGUgQ1BVIG9mIFhPUmluZyBpbiBiaXQgNiwgOSwgMTAsIGFuZCBwb3RlbnRpYWxseSAxMSwgaW4gb3JkZXIKKyAqIHRvIG1hdGNoIHdoYXQgdGhlIEdQVSBleHBlY3RzLgorICovCisKKy8qKgorICogRGV0ZWN0cyBiaXQgNiBzd2l6emxpbmcgb2YgYWRkcmVzcyBsb29rdXAgYmV0d2VlbiBJR0QgYWNjZXNzIGFuZCBDUFUKKyAqIGFjY2VzcyB0aHJvdWdoIG1haW4gbWVtb3J5LgorICovCit2b2lkCitpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCXVpbnQzMl90IHN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCisJaWYgKCFJU19JOVhYKGRldikpIHsKKwkJLyogQXMgZmFyIGFzIHdlIGtub3csIHRoZSA4NjUgZG9lc24ndCBoYXZlIHRoZXNlIGJpdCA2CisJCSAqIHN3aXp6bGluZyBpc3N1ZXMuCisJCSAqLworCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJfSBlbHNlIGlmICgoIUlTX0k5NjVHKGRldikgJiYgIUlTX0czMyhkZXYpKSB8fCBJU19JOTY1R00oZGV2KSB8fAorCQkgICBJU19HTTQ1KGRldikpIHsKKwkJdWludDMyX3QgZGNjOworCisJCS8qIE9uIDkxNS05NDUgYW5kIEdNOTY1LCBjaGFubmVsIGludGVybGVhdmUgYnkgdGhlIENQVSBpcworCQkgKiBkZXRlcm1pbmVkIGJ5IERDQy4gIFRoZSBDUFUgd2lsbCBhbHRlcm5hdGUgYmFzZWQgb24gYml0IDYKKwkJICogaW4gaW50ZXJsZWF2ZWQgbW9kZSwgYW5kIHRoZSBHUFUgd2lsbCB0aGVuIGFsc28gYWx0ZXJuYXRlCisJCSAqIG9uIGJpdCA2LCA5LCBhbmQgMTAgZm9yIFgsIGJ1dCB0aGUgQ1BVIG1heSBhbHNvIG9wdGlvbmFsbHkKKwkJICogYWx0ZXJuYXRlIGJhc2VkIG9uIGJpdCAxNyAoWE9SIG5vdCBkaXNhYmxlZCBhbmQgWE9SCisJCSAqIGJpdCA9PSAxNykuCisJCSAqLworCQlkY2MgPSBJOTE1X1JFQUQoRENDKTsKKwkJc3dpdGNoIChkY2MgJiBEQ0NfQUREUkVTU0lOR19NT0RFX01BU0spIHsKKwkJY2FzZSBEQ0NfQUREUkVTU0lOR19NT0RFX1NJTkdMRV9DSEFOTkVMOgorCQljYXNlIERDQ19BRERSRVNTSU5HX01PREVfRFVBTF9DSEFOTkVMX0FTWU1NRVRSSUM6CisJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQkJYnJlYWs7CisJCWNhc2UgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfSU5URVJMRUFWRUQ6CisJCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSB8fAorCQkJICAgIGRjYyAmIERDQ19DSEFOTkVMX1hPUl9ESVNBQkxFKSB7CisJCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA7CisJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7CisJCQl9IGVsc2UgaWYgKElTX0k5NjVHTShkZXYpIHx8IElTX0dNNDUoZGV2KSkgeworCQkJCS8qIEdNOTY1IG9ubHkgZG9lcyBiaXQgMTEtYmFzZWQgY2hhbm5lbAorCQkJCSAqIHJhbmRvbWl6YXRpb24KKwkJCQkgKi8KKwkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xMTsKKwkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMTsKKwkJCX0gZWxzZSB7CisJCQkJLyogQml0IDE3IG9yIHBlcmhhcHMgb3RoZXIgc3dpenpsaW5nICovCisJCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGNjID09IDB4ZmZmZmZmZmYpIHsKKwkJCURSTV9FUlJPUigiQ291bGRuJ3QgcmVhZCBmcm9tIE1DSEJBUi4gICIKKwkJCQkgICJEaXNhYmxpbmcgdGlsaW5nLlxuIik7CisJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCQl9CisJfSBlbHNlIHsKKwkJLyogVGhlIDk2NSwgRzMzLCBhbmQgbmV3ZXIsIGhhdmUgYSB2ZXJ5IGZsZXhpYmxlIG1lbW9yeQorCQkgKiBjb25maWd1cmF0aW9uLiAgSXQgd2lsbCBlbmFibGUgZHVhbC1jaGFubmVsIG1vZGUKKwkJICogKGludGVybGVhdmluZykgb24gYXMgbXVjaCBtZW1vcnkgYXMgaXQgY2FuLCBhbmQgdGhlIEdQVQorCQkgKiB3aWxsIGFkZGl0aW9uYWxseSBzb21ldGltZXMgZW5hYmxlIGRpZmZlcmVudCBiaXQgNgorCQkgKiBzd2l6emxpbmcgZm9yIHRpbGVkIG9iamVjdHMgZnJvbSB0aGUgQ1BVLgorCQkgKgorCQkgKiBIZXJlJ3Mgd2hhdCBJIGZvdW5kIG9uIHRoZSBHOTY1OgorCQkgKiAgICBzbG90IGZpbGwgICAgICAgICBtZW1vcnkgc2l6ZSAgc3dpenpsaW5nCisJCSAqIDBBICAgMEIgICAxQSAgIDFCICAgIDEtY2ggICAyLWNoCisJCSAqIDUxMiAgMCAgICAwICAgIDAgICAgIDUxMiAgICAwICAgICBPCisJCSAqIDUxMiAgMCAgICA1MTIgIDAgICAgIDE2ICAgICAxMDA4ICBYCisJCSAqIDUxMiAgMCAgICAwICAgIDUxMiAgIDE2ICAgICAxMDA4ICBYCisJCSAqIDAgICAgNTEyICAwICAgIDUxMiAgIDE2ICAgICAxMDA4ICBYCisJCSAqIDEwMjQgMTAyNCAxMDI0IDAgICAgIDIwNDggICAxMDI0ICBPCisJCSAqCisJCSAqIFdlIGNvdWxkIHByb2JhYmx5IGRldGVjdCB0aGlzIGJhc2VkIG9uIGVpdGhlciB0aGUgRFJCCisJCSAqIG1hdGNoaW5nLCB3aGljaCB3YXMgdGhlIGNhc2UgZm9yIHRoZSBzd2l6emxpbmcgcmVxdWlyZWQgaW4KKwkJICogdGhlIHRhYmxlIGFib3ZlLCBvciBmcm9tIHRoZSAxLWNoIHZhbHVlIGJlaW5nIGxlc3MgdGhhbgorCQkgKiB0aGUgbWluaW11bSBzaXplIG9mIGEgcmFuay4KKwkJICovCisJCWlmIChJOTE1X1JFQUQxNihDMERSQjMpICE9IEk5MTVfUkVBRDE2KEMxRFJCMykpIHsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCX0gZWxzZSB7CisJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMDsKKwkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85OworCQl9CisJfQorCisJZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeCA9IHN3aXp6bGVfeDsKKwlkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV95ID0gc3dpenpsZV95OworfQorCisvKioKKyAqIFNldHMgdGhlIHRpbGluZyBtb2RlIG9mIGFuIG9iamVjdCwgcmV0dXJuaW5nIHRoZSByZXF1aXJlZCBzd2l6emxpbmcgb2YKKyAqIGJpdCA2IG9mIGFkZHJlc3NlcyBpbiB0aGUgb2JqZWN0LgorICovCitpbnQKK2k5MTVfZ2VtX3NldF90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nICphcmdzID0gZGF0YTsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoYXJncy0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSkgeworCQlvYmpfcHJpdi0+dGlsaW5nX21vZGUgPSBJOTE1X1RJTElOR19OT05FOworCQlhcmdzLT5zd2l6emxlX21vZGUgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwl9IGVsc2UgeworCQlpZiAoYXJncy0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWCkKKwkJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3g7CisJCWVsc2UKKwkJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3k7CisJCS8qIElmIHdlIGNhbid0IGhhbmRsZSB0aGUgc3dpenpsaW5nLCBtYWtlIGl0IHVudGlsZWQuICovCisJCWlmIChhcmdzLT5zd2l6emxlX21vZGUgPT0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV04pIHsKKwkJCWFyZ3MtPnRpbGluZ19tb2RlID0gSTkxNV9USUxJTkdfTk9ORTsKKwkJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQl9CisJfQorCW9ial9wcml2LT50aWxpbmdfbW9kZSA9IGFyZ3MtPnRpbGluZ19tb2RlOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgY3VycmVudCB0aWxpbmcgbW9kZSBhbmQgcmVxdWlyZWQgYml0IDYgc3dpenpsaW5nIGZvciB0aGUgb2JqZWN0LgorICovCitpbnQKK2k5MTVfZ2VtX2dldF90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nICphcmdzID0gZGF0YTsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlhcmdzLT50aWxpbmdfbW9kZSA9IG9ial9wcml2LT50aWxpbmdfbW9kZTsKKwlzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgeworCWNhc2UgSTkxNV9USUxJTkdfWDoKKwkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZOgorCQlhcmdzLT5zd2l6emxlX21vZGUgPSBkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV95OworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX05PTkU6CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInVua25vd24gdGlsaW5nIG1vZGVcbiIpOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggZGYwMzYxMS4uMjZmNDg5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0zMSwxNiArMzEsNjIgQEAKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAKLSNkZWZpbmUgVVNFUl9JTlRfRkxBRyAoMTw8MSkKLSNkZWZpbmUgVlNZTkNfUElQRUJfRkxBRyAoMTw8NSkKLSNkZWZpbmUgVlNZTkNfUElQRUFfRkxBRyAoMTw8NykKLQogI2RlZmluZSBNQVhfTk9QSUQgKCh1MzIpfjApCiAKKy8qKiBUaGVzZSBhcmUgdGhlIGludGVycnVwdHMgdXNlZCBieSB0aGUgZHJpdmVyICovCisjZGVmaW5lIEk5MTVfSU5URVJSVVBUX0VOQUJMRV9NQVNLIChJOTE1X1VTRVJfSU5URVJSVVBUIHwJCVwKKwkJCQkgICAgSTkxNV9BU0xFX0lOVEVSUlVQVCB8CQlcCisJCQkJICAgIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUIHwgXAorCQkJCSAgICBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCkKKwordm9pZAoraTkxNV9lbmFibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKQoreworCWlmICgoZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmIG1hc2spICE9IDApIHsKKwkJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+bWFzazsKKwkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkodm9pZCkgSTkxNV9SRUFEKElNUik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2k5MTVfZGlzYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCit7CisJaWYgKChkZXZfcHJpdi0+aXJxX21hc2tfcmVnICYgbWFzaykgIT0gbWFzaykgeworCQlkZXZfcHJpdi0+aXJxX21hc2tfcmVnIHw9IG1hc2s7CisJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwkJKHZvaWQpIEk5MTVfUkVBRChJTVIpOworCX0KK30KKworLyoqCisgKiBpOTE1X3BpcGVfZW5hYmxlZCAtIGNoZWNrIGlmIGEgcGlwZSBpcyBlbmFibGVkCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGlwZTogcGlwZSB0byBjaGVjaworICoKKyAqIFJlYWRpbmcgY2VydGFpbiByZWdpc3RlcnMgd2hlbiB0aGUgcGlwZSBpcyBkaXNhYmxlZCBjYW4gaGFuZyB0aGUgY2hpcC4KKyAqIFVzZSB0aGlzIHJvdXRpbmUgdG8gbWFrZSBzdXJlIHRoZSBQTEwgaXMgcnVubmluZyBhbmQgdGhlIHBpcGUgaXMgYWN0aXZlCisgKiBiZWZvcmUgcmVhZGluZyBzdWNoIHJlZ2lzdGVycyBpZiB1bnN1cmUuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfcGlwZV9lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBwaXBlY29uZiA9IHBpcGUgPyBQSVBFQkNPTkYgOiBQSVBFQUNPTkY7CisKKwlpZiAoSTkxNV9SRUFEKHBpcGVjb25mKSAmIFBJUEVBQ09ORl9FTkFCTEUpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogRW1pdCBibGl0cyBmb3Igc2NoZWR1bGVkIGJ1ZmZlciBzd2Fwcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIEhXIGxvY2sgaGVsZC4KKyAqIEJlY2F1c2UgdGhpcyBmdW5jdGlvbiBtdXN0IGdyYWIgdGhlIHJpbmcgbXV0ZXggKGRldi0+c3RydWN0X211dGV4KSwKKyAqIGl0IGNhbiBubyBsb25nZXIgcnVuIGF0IHNvZnQgaXJxIHRpbWUuIFdlJ2xsIGZpeCB0aGlzIHdoZW4gd2UgZG8KKyAqIHRoZSBEUkkyIHN3YXAgYnVmZmVyIHdvcmsuCiAgKi8KIHN0YXRpYyB2b2lkIGk5MTVfdmJsYW5rX3Rhc2tsZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKQEAgLTQ4LDggKzk0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICp0bXAsIGhpdHMsICpoaXQ7CiAJaW50IG5oaXRzLCBucmVjdHMsIHNsaWNlWzJdLCB1cHBlclsyXSwgbG93ZXJbMl0sIGk7Ci0JdW5zaWduZWQgY291bnRlclsyXSA9IHsgYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSwKLQkJCQlhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQyKSB9OworCXVuc2lnbmVkIGNvdW50ZXJbMl07CiAJc3RydWN0IGRybV9kcmF3YWJsZV9pbmZvICpkcnc7CiAJZHJtX2k5MTVfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXUzMiBjcHAgPSBkZXZfcHJpdi0+Y3BwOwpAQCAtNjIsNiArMTA3LDggQEAKIAl1MzIgcm9wY3BwID0gKDB4Y2MgPDwgMTYpIHwgKChjcHAgLSAxKSA8PCAyNCk7CiAJUklOR19MT0NBTFM7CiAKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKIAlpZiAoSVNfSTk2NUcoZGV2KSAmJiBzYXJlYV9wcml2LT5mcm9udF90aWxlZCkgewogCQljbWQgfD0gWFlfU1JDX0NPUFlfQkxUX0RTVF9USUxFRDsKIAkJZHN0X3BpdGNoID4+PSAyOwpAQCAtNzEsNiArMTE4LDkgQEAKIAkJc3JjX3BpdGNoID4+PSAyOwogCX0KIAorCWNvdW50ZXJbMF0gPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgMCk7CisJY291bnRlclsxXSA9IGRybV92YmxhbmtfY291bnQoZGV2LCAxKTsKKwogCURSTV9ERUJVRygiXG4iKTsKIAogCUlOSVRfTElTVF9IRUFEKCZoaXRzKTsKQEAgLTgzLDMyICsxMzMsMzMgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdG1wLCAmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKSB7CiAJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwID0KIAkJCWxpc3RfZW50cnkobGlzdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CisJCWludCBwaXBlID0gdmJsX3N3YXAtPnBpcGU7CiAKLQkJaWYgKChjb3VudGVyW3ZibF9zd2FwLT5waXBlXSAtIHZibF9zd2FwLT5zZXF1ZW5jZSkgPiAoMTw8MjMpKQorCQlpZiAoKGNvdW50ZXJbcGlwZV0gLSB2Ymxfc3dhcC0+c2VxdWVuY2UpID4gKDE8PDIzKSkKIAkJCWNvbnRpbnVlOwogCiAJCWxpc3RfZGVsKGxpc3QpOwogCQlkZXZfcHJpdi0+c3dhcHNfcGVuZGluZy0tOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwogCiAJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7CiAJCXNwaW5fbG9jaygmZGV2LT5kcndfbG9jayk7CiAKIAkJZHJ3ID0gZHJtX2dldF9kcmF3YWJsZV9pbmZvKGRldiwgdmJsX3N3YXAtPmRyd19pZCk7CiAKLQkJaWYgKCFkcncpIHsKLQkJCXNwaW5fdW5sb2NrKCZkZXYtPmRyd19sb2NrKTsKLQkJCWRybV9mcmVlKHZibF9zd2FwLCBzaXplb2YoKnZibF9zd2FwKSwgRFJNX01FTV9EUklWRVIpOwotCQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWxpc3RfZm9yX2VhY2goaGl0LCAmaGl0cykgewogCQkJZHJtX2k5MTVfdmJsX3N3YXBfdCAqc3dhcF9jbXAgPQogCQkJCWxpc3RfZW50cnkoaGl0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKIAkJCXN0cnVjdCBkcm1fZHJhd2FibGVfaW5mbyAqZHJ3X2NtcCA9CiAJCQkJZHJtX2dldF9kcmF3YWJsZV9pbmZvKGRldiwgc3dhcF9jbXAtPmRyd19pZCk7CiAKLQkJCWlmIChkcndfY21wICYmCisJCQkvKiBNYWtlIHN1cmUgYm90aCBkcmF3YWJsZXMgYXJlIHN0aWxsCisJCQkgKiBhcm91bmQgYW5kIGhhdmUgc29tZSByZWN0YW5nbGVzIGJlZm9yZQorCQkJICogd2UgbG9vayBpbnNpZGUgdG8gb3JkZXIgdGhlbSBmb3IgdGhlCisJCQkgKiBibHRzIGJlbG93LgorCQkJICovCisJCQlpZiAoZHJ3X2NtcCAmJiBkcndfY21wLT5udW1fcmVjdHMgPiAwICYmCisJCQkgICAgZHJ3ICYmIGRydy0+bnVtX3JlY3RzID4gMCAmJgogCQkJICAgIGRyd19jbXAtPnJlY3RzWzBdLnkxID4gZHJ3LT5yZWN0c1swXS55MSkgewogCQkJCWxpc3RfYWRkX3RhaWwobGlzdCwgaGl0KTsKIAkJCQlicmVhazsKQEAgLTEyOCw2ICsxNzksNyBAQAogCiAJaWYgKG5oaXRzID09IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE4Niw2ICsyMzgsOSBAQAogCiAJCQlkcncgPSBkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZGV2LCBzd2FwX2hpdC0+ZHJ3X2lkKTsKIAorCQkJLyogVGhlIGRyYXdhYmxlIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkIHNpbmNlCisJCQkgKiB0aGUgdmJsYW5rIHN3YXAgd2FzIHF1ZXVlZAorCQkJICovCiAJCQlpZiAoIWRydykKIAkJCQljb250aW51ZTsKIApAQCAtMjE4LDYgKzI3Myw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGhpdCwgdG1wLCAmaGl0cykgewogCQlkcm1faTkxNV92Ymxfc3dhcF90ICpzd2FwX2hpdCA9CkBAIC0yMjksNjMgKzI4NSwxNTcgQEAKIAl9CiB9CiAKKy8qIENhbGxlZCBmcm9tIGRybSBnZW5lcmljIGNvZGUsIHBhc3NlZCBhICdjcnRjJywgd2hpY2gKKyAqIHdlIHVzZSBhcyBhIHBpcGUgaW5kZXgKKyAqLwordTMyIGk5MTVfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBoaWdoX2ZyYW1lOworCXVuc2lnbmVkIGxvbmcgbG93X2ZyYW1lOworCXUzMiBoaWdoMSwgaGlnaDIsIGxvdywgY291bnQ7CisKKwloaWdoX2ZyYW1lID0gcGlwZSA/IFBJUEVCRlJBTUVISUdIIDogUElQRUFGUkFNRUhJR0g7CisJbG93X2ZyYW1lID0gcGlwZSA/IFBJUEVCRlJBTUVQSVhFTCA6IFBJUEVBRlJBTUVQSVhFTDsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkgeworCQlEUk1fRVJST1IoInRyeWluZyB0byBnZXQgdmJsYW5rIGNvdW50IGZvciBkaXNhYmxlZCBwaXBlICVkXG4iLCBwaXBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBIaWdoICYgbG93IHJlZ2lzdGVyIGZpZWxkcyBhcmVuJ3Qgc3luY2hyb25pemVkLCBzbyBtYWtlIHN1cmUKKwkgKiB3ZSBnZXQgYSBsb3cgdmFsdWUgdGhhdCdzIHN0YWJsZSBhY3Jvc3MgdHdvIHJlYWRzIG9mIHRoZSBoaWdoCisJICogcmVnaXN0ZXIuCisJICovCisJZG8geworCQloaWdoMSA9ICgoSTkxNV9SRUFEKGhpZ2hfZnJhbWUpICYgUElQRV9GUkFNRV9ISUdIX01BU0spID4+CisJCQkgUElQRV9GUkFNRV9ISUdIX1NISUZUKTsKKwkJbG93ID0gICgoSTkxNV9SRUFEKGxvd19mcmFtZSkgJiBQSVBFX0ZSQU1FX0xPV19NQVNLKSA+PgorCQkJUElQRV9GUkFNRV9MT1dfU0hJRlQpOworCQloaWdoMiA9ICgoSTkxNV9SRUFEKGhpZ2hfZnJhbWUpICYgUElQRV9GUkFNRV9ISUdIX01BU0spID4+CisJCQkgUElQRV9GUkFNRV9ISUdIX1NISUZUKTsKKwl9IHdoaWxlIChoaWdoMSAhPSBoaWdoMik7CisKKwljb3VudCA9IChoaWdoMSA8PCA4KSB8IGxvdzsKKworCXJldHVybiBjb3VudDsKK30KKwordm9pZAoraTkxNV92Ymxhbmtfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gY29udGFpbmVyX29mKHdvcmssIGRybV9pOTE1X3ByaXZhdGVfdCwKKwkJCQkJCSAgICB2Ymxhbmtfd29yayk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmIChkZXYtPmxvY2suaHdfbG9jayA9PSBOVUxMKSB7CisJCWk5MTVfdmJsYW5rX3Rhc2tsZXQoZGV2KTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnRhc2tsZXRfbG9jaywgaXJxZmxhZ3MpOworCWRldi0+bG9ja2VkX3Rhc2tsZXRfZnVuYyA9IGk5MTVfdmJsYW5rX3Rhc2tsZXQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT50YXNrbGV0X2xvY2ssIGlycWZsYWdzKTsKKworCS8qIFRyeSB0byBnZXQgdGhlIGxvY2sgbm93LCBpZiB0aGlzIGZhaWxzLCB0aGUgbG9jaworCSAqIGhvbGRlciB3aWxsIGV4ZWN1dGUgdGhlIHRhc2tsZXQgZHVyaW5nIHVubG9jaworCSAqLworCWlmICghZHJtX2xvY2tfdGFrZSgmZGV2LT5sb2NrLCBEUk1fS0VSTkVMX0NPTlRFWFQpKQorCQlyZXR1cm47CisKKwlkZXYtPmxvY2subG9ja190aW1lID0gamlmZmllczsKKwlhdG9taWNfaW5jKCZkZXYtPmNvdW50c1tfRFJNX1NUQVRfTE9DS1NdKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnRhc2tsZXRfbG9jaywgaXJxZmxhZ3MpOworCWRldi0+bG9ja2VkX3Rhc2tsZXRfZnVuYyA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT50YXNrbGV0X2xvY2ssIGlycWZsYWdzKTsKKworCWk5MTVfdmJsYW5rX3Rhc2tsZXQoZGV2KTsKKwlkcm1fbG9ja19mcmVlKCZkZXYtPmxvY2ssIERSTV9LRVJORUxfQ09OVEVYVCk7Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUxNiB0ZW1wOworCXUzMiBpaXI7CiAJdTMyIHBpcGVhX3N0YXRzLCBwaXBlYl9zdGF0czsKKwlpbnQgdmJsYW5rID0gMDsKIAotCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKEk5MTVSRUdfUElQRUFTVEFUKTsKLQlwaXBlYl9zdGF0cyA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVCU1RBVCk7CisJYXRvbWljX2luYygmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCk7CiAKLQl0ZW1wID0gSTkxNV9SRUFEMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCB+MCk7CisJaWlyID0gSTkxNV9SRUFEKElJUik7CiAKLQl0ZW1wICY9IChVU0VSX0lOVF9GTEFHIHwgVlNZTkNfUElQRUFfRkxBRyB8IFZTWU5DX1BJUEVCX0ZMQUcpOwotCi0JRFJNX0RFQlVHKCIlcyBmbGFnPSUwOHhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcCk7Ci0KLQlpZiAodGVtcCA9PSAwKQorCWlmIChpaXIgPT0gMCkgeworCQlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkgeworCQkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkJKHZvaWQpIEk5MTVfUkVBRChJTVIpOworCQl9CiAJCXJldHVybiBJUlFfTk9ORTsKLQotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SLCB0ZW1wKTsKLQkodm9pZCkgSTkxNV9SRUFEMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7Ci0JRFJNX1JFQURNRU1PUllCQVJSSUVSKCk7Ci0KLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7Ci0KLQlpZiAodGVtcCAmIFVTRVJfSU5UX0ZMQUcpCi0JCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOwotCi0JaWYgKHRlbXAgJiAoVlNZTkNfUElQRUFfRkxBRyB8IFZTWU5DX1BJUEVCX0ZMQUcpKSB7Ci0JCWludCB2YmxhbmtfcGlwZSA9IGRldl9wcml2LT52YmxhbmtfcGlwZTsKLQotCQlpZiAoKHZibGFua19waXBlICYKLQkJICAgICAoRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKQotCQkgICAgPT0gKERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgfCBEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkgewotCQkJaWYgKHRlbXAgJiBWU1lOQ19QSVBFQV9GTEFHKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJCWlmICh0ZW1wICYgVlNZTkNfUElQRUJfRkxBRykKLQkJCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZDIpOwotCQl9IGVsc2UgaWYgKCgodGVtcCAmIFZTWU5DX1BJUEVBX0ZMQUcpICYmCi0JCQkgICAgKHZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSkpIHx8Ci0JCQkgICAoKHRlbXAgJiBWU1lOQ19QSVBFQl9GTEFHKSAmJgotCQkJICAgICh2YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSkKLQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7Ci0KLQkJaWYgKGRldl9wcml2LT5zd2Fwc19wZW5kaW5nID4gMCkKLQkJCWRybV9sb2NrZWRfdGFza2xldChkZXYsIGk5MTVfdmJsYW5rX3Rhc2tsZXQpOwotCQlJOTE1X1dSSVRFKEk5MTVSRUdfUElQRUFTVEFULAotCQkJcGlwZWFfc3RhdHN8STkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRXwKLQkJCUk5MTVfVkJMQU5LX0NMRUFSKTsKLQkJSTkxNV9XUklURShJOTE1UkVHX1BJUEVCU1RBVCwKLQkJCXBpcGViX3N0YXRzfEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEV8Ci0JCQlJOTE1X1ZCTEFOS19DTEVBUik7CiAJfQogCisJLyoKKwkgKiBDbGVhciB0aGUgUElQRShBfEIpU1RBVCByZWdzIGJlZm9yZSB0aGUgSUlSIG90aGVyd2lzZQorCSAqIHdlIG1heSBnZXQgZXh0cmEgaW50ZXJydXB0cy4KKwkgKi8KKwlpZiAoaWlyICYgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQpIHsKKwkJcGlwZWFfc3RhdHMgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKwkJaWYgKCEoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSkpCisJCQlwaXBlYV9zdGF0cyAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCWVsc2UgaWYgKHBpcGVhX3N0YXRzICYgKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVN8CisJCQkJCVBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpKSB7CisJCQl2YmxhbmsrKzsKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CisJCX0KKworCQlJOTE1X1dSSVRFKFBJUEVBU1RBVCwgcGlwZWFfc3RhdHMpOworCX0KKwlpZiAoaWlyICYgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpIHsKKwkJcGlwZWJfc3RhdHMgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKKwkJLyogQWNrIHRoZSBldmVudCAqLworCQlJOTE1X1dSSVRFKFBJUEVCU1RBVCwgcGlwZWJfc3RhdHMpOworCisJCS8qIFRoZSB2YmxhbmsgaW50ZXJydXB0IGdldHMgZW5hYmxlZCBldmVuIGlmIHdlIGRpZG4ndCBhc2sgZm9yCisJCSAgIGl0LCBzbyBtYWtlIHN1cmUgaXQncyBzaHV0IGRvd24gYWdhaW4gKi8KKwkJaWYgKCEoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCisJCQlwaXBlYl9zdGF0cyAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCWVsc2UgaWYgKHBpcGViX3N0YXRzICYgKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVN8CisJCQkJCVBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpKSB7CisJCQl2YmxhbmsrKzsKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CisJCX0KKworCQlpZiAocGlwZWJfc3RhdHMgJiBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTKQorCQkJb3ByZWdpb25fYXNsZV9pbnRyKGRldik7CisJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CisJfQorCisJSTkxNV9XUklURShJSVIsIGlpcik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwkodm9pZCkgSTkxNV9SRUFEKElJUik7IC8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KKworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQorCQkJUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKKworCWlmIChpaXIgJiBJOTE1X1VTRVJfSU5URVJSVVBUKSB7CisJCWRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CisJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCX0KKworCWlmIChpaXIgJiBJOTE1X0FTTEVfSU5URVJSVVBUKQorCQlvcHJlZ2lvbl9hc2xlX2ludHIoZGV2KTsKKworCWlmICh2YmxhbmsgJiYgZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKQorCQlzY2hlZHVsZV93b3JrKCZkZXZfcHJpdi0+dmJsYW5rX3dvcmspOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yOTgsMjMgKzQ0OCw0NyBAQAogCiAJRFJNX0RFQlVHKCJcbiIpOwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7Ci0KKwlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKwkJZGV2X3ByaXYtPmNvdW50ZXIgPSAxOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlPVVRfUklORygwKTsKLQlPVVRfUklORyhHRlhfT1BfVVNFUl9JTlRFUlJVUFQpOworCU9VVF9SSU5HKE1JX1VTRVJfSU5URVJSVVBUKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCXJldHVybiBkZXZfcHJpdi0+Y291bnRlcjsKIH0KIAordm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCWlmIChkZXYtPmlycV9lbmFibGVkICYmICgrK2Rldl9wcml2LT51c2VyX2lycV9yZWZjb3VudCA9PSAxKSkKKwkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOworfQorCit2b2lkIGk5MTVfdXNlcl9pcnFfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CisJQlVHX09OKGRldi0+aXJxX2VuYWJsZWQgJiYgZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50IDw9IDApOworCWlmIChkZXYtPmlycV9lbmFibGVkICYmICgtLWRldl9wcml2LT51c2VyX2lycV9yZWZjb3VudCA9PSAwKSkKKwkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKK30KKwogc3RhdGljIGludCBpOTE1X3dhaXRfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgaXJxX25yKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0zMjMsNTUgKzQ5NywzNCBAQAogCURSTV9ERUJVRygiaXJxX25yPSVkIGJyZWFkY3J1bWI9JWRcbiIsIGlycV9uciwKIAkJICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpKTsKIAotCWlmIChSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucikKKwlpZiAoUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSA+PSBpcnFfbnIpIHsKKwkJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KSB7CisJCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9CisJCQkJUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKKwkJfQogCQlyZXR1cm4gMDsKKwl9CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTkxNV9CT1hfV0FJVDsKIAorCWk5MTVfdXNlcl9pcnFfZ2V0KGRldik7CiAJRFJNX1dBSVRfT04ocmV0LCBkZXZfcHJpdi0+aXJxX3F1ZXVlLCAzICogRFJNX0haLAogCQkgICAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSA+PSBpcnFfbnIpOworCWk5MTVfdXNlcl9pcnFfcHV0KGRldik7CiAKIAlpZiAocmV0ID09IC1FQlVTWSkgewogCQlEUk1fRVJST1IoIkVCVVNZIC0tIHJlYzogJWQgZW1pdHRlZDogJWRcbiIsCiAJCQkgIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdiksIChpbnQpZGV2X3ByaXYtPmNvdW50ZXIpOwogCX0KIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfZHJpdmVyX3ZibGFua19kb193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UsCi0JCQkJICAgICAgYXRvbWljX3QgKmNvdW50ZXIpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQgaW50IGN1cl92Ymxhbms7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWRldl9wcml2KSB7Ci0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKGNvdW50ZXIpKQotCQkJLSAqc2VxdWVuY2UpIDw9ICgxPDwyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQorCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9CisJCQlSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotCi1pbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKLXsKLQlyZXR1cm4gaTkxNV9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoZGV2LCBzZXF1ZW5jZSwgJmRldi0+dmJsX3JlY2VpdmVkKTsKLX0KLQotaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiBpOTE1X2RyaXZlcl92YmxhbmtfZG9fd2FpdChkZXYsIHNlcXVlbmNlLCAmZGV2LT52YmxfcmVjZWl2ZWQyKTsKLX0KLQogLyogTmVlZHMgdGhlIGxvY2sgYXMgaXQgdG91Y2hlcyB0aGUgcmluZy4KICAqLwogaW50IGk5MTVfaXJxX2VtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTM4MSwxNCArNTM0LDE1IEBACiAJZHJtX2k5MTVfaXJxX2VtaXRfdCAqZW1pdCA9IGRhdGE7CiAJaW50IHJlc3VsdDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJlc3VsdCA9IGk5MTVfZW1pdF9pcnEoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCWlmIChEUk1fQ09QWV9UT19VU0VSKGVtaXQtPmlycV9zZXEsICZyZXN1bHQsIHNpemVvZihpbnQpKSkgewogCQlEUk1fRVJST1IoImNvcHlfdG9fdXNlclxuIik7CkBAIC00MTQsMTggKzU2OCw5NSBAQAogCXJldHVybiBpOTE1X3dhaXRfaXJxKGRldiwgaXJxd2FpdC0+aXJxX3NlcSk7CiB9CiAKLXN0YXRpYyB2b2lkIGk5MTVfZW5hYmxlX2ludGVycnVwdCAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKKy8qIENhbGxlZCBmcm9tIGRybSBnZW5lcmljIGNvZGUsIHBhc3NlZCAnY3J0Yycgd2hpY2gKKyAqIHdlIHVzZSBhcyBhIHBpcGUgaW5kZXgKKyAqLworaW50IGk5MTVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUxNiBmbGFnOworCXUzMglwaXBlc3RhdF9yZWcgPSAwOworCXUzMglwaXBlc3RhdDsKKwl1MzIJaW50ZXJydXB0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0JZmxhZyA9IDA7Ci0JaWYgKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpCi0JCWZsYWcgfD0gVlNZTkNfUElQRUFfRkxBRzsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikKLQkJZmxhZyB8PSBWU1lOQ19QSVBFQl9GTEFHOworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJcGlwZXN0YXRfcmVnID0gUElQRUFTVEFUOworCQlpbnRlcnJ1cHQgPSBJOTE1X0RJU1BMQVlfUElQRV9BX0VWRU5UX0lOVEVSUlVQVDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwaXBlc3RhdF9yZWcgPSBQSVBFQlNUQVQ7CisJCWludGVycnVwdCA9IEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IHBpcGUgJWRcbiIsCisJCQkgIHBpcGUpOworCQlyZXR1cm4gMDsKKwl9CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIFVTRVJfSU5UX0ZMQUcgfCBmbGFnKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwkvKiBFbmFibGluZyB2YmxhbmsgZXZlbnRzIGluIElNUiBjb21lcyBiZWZvcmUgUElQRVNUQVQgd3JpdGUsIG9yCisJICogdGhlcmUncyBhIHJhY2Ugd2hlcmUgdGhlIFBJUEVTVEFUIHZibGFuayBiaXQgZ2V0cyBzZXQgdG8gMSwgc28KKwkgKiB0aGUgT1Igb2YgZW5hYmxlZCBQSVBFU1RBVCBiaXRzIGdvZXMgdG8gMSwgc28gdGhlIFBJUEV4RVZFTlQgaW4KKwkgKiBJU1IgZmxhc2hlcyB0byAxLCBidXQgdGhlIElJUiBiaXQgZG9lc24ndCBnZXQgc2V0IHRvIDEgYmVjYXVzZQorCSAqIElNUiBtYXNrcyBpdC4gIEl0IGRvZXNuJ3QgZXZlciBnZXQgc2V0IGFmdGVyIHdlIGNsZWFyIHRoZSBtYXNraW5nCisJICogaW4gSU1SIGJlY2F1c2UgdGhlIElTUiBiaXQgaXMgZWRnZSwgbm90IGxldmVsLXRyaWdnZXJlZCwgb24gdGhlCisJICogT1Igb2YgUElQRVNUQVQgYml0cy4KKwkgKi8KKwlpOTE1X2VuYWJsZV9pcnEoZGV2X3ByaXYsIGludGVycnVwdCk7CisJcGlwZXN0YXQgPSBJOTE1X1JFQUQocGlwZXN0YXRfcmVnKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJcGlwZXN0YXQgfD0gUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKKwllbHNlCisJCXBpcGVzdGF0IHw9IFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEU7CisJLyogQ2xlYXIgYW55IHN0YWxlIGludGVycnVwdCBzdGF0dXMgKi8KKwlwaXBlc3RhdCB8PSAoUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyB8CisJCSAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyk7CisJSTkxNV9XUklURShwaXBlc3RhdF9yZWcsIHBpcGVzdGF0KTsKKwkodm9pZCkgSTkxNV9SRUFEKHBpcGVzdGF0X3JlZyk7CS8qIFBvc3RpbmcgcmVhZCAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIGZyb20gZHJtIGdlbmVyaWMgY29kZSwgcGFzc2VkICdjcnRjJyB3aGljaAorICogd2UgdXNlIGFzIGEgcGlwZSBpbmRleAorICovCit2b2lkIGk5MTVfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIJcGlwZXN0YXRfcmVnID0gMDsKKwl1MzIJcGlwZXN0YXQ7CisJdTMyCWludGVycnVwdCA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJcGlwZXN0YXRfcmVnID0gUElQRUFTVEFUOworCQlpbnRlcnJ1cHQgPSBJOTE1X0RJU1BMQVlfUElQRV9BX0VWRU5UX0lOVEVSUlVQVDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwaXBlc3RhdF9yZWcgPSBQSVBFQlNUQVQ7CisJCWludGVycnVwdCA9IEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGRpc2FibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBwaXBlICVkXG4iLAorCQkJICBwaXBlKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwlpOTE1X2Rpc2FibGVfaXJxKGRldl9wcml2LCBpbnRlcnJ1cHQpOworCXBpcGVzdGF0ID0gSTkxNV9SRUFEKHBpcGVzdGF0X3JlZyk7CisJcGlwZXN0YXQgJj0gfihQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJICAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJLyogQ2xlYXIgYW55IHN0YWxlIGludGVycnVwdCBzdGF0dXMgKi8KKwlwaXBlc3RhdCB8PSAoUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyB8CisJCSAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyk7CisJSTkxNV9XUklURShwaXBlc3RhdF9yZWcsIHBpcGVzdGF0KTsKKwkodm9pZCkgSTkxNV9SRUFEKHBpcGVzdGF0X3JlZyk7CS8qIFBvc3RpbmcgcmVhZCAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CiB9CiAKIC8qIFNldCB0aGUgdmJsYW5rIG1vbml0b3IgcGlwZQpAQCAtNDM0LDIyICs2NjUsMTIgQEAKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlkcm1faTkxNV92YmxhbmtfcGlwZV90ICpwaXBlID0gZGF0YTsKIAogCWlmICghZGV2X3ByaXYpIHsKIAkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwaXBlLT5waXBlICYgfihEUk1fSTkxNV9WQkxBTktfUElQRV9BfERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSB7Ci0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggaW52YWxpZCBwaXBlIDB4JXhcbiIsIHBpcGUtPnBpcGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBwaXBlLT5waXBlOwotCi0JaTkxNV9lbmFibGVfaW50ZXJydXB0IChkZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1OCwxOSArNjc5LDEzIEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCAqcGlwZSA9IGRhdGE7Ci0JdTE2IGZsYWc7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmbGFnID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX0VOQUJMRV9SKTsKLQlwaXBlLT5waXBlID0gMDsKLQlpZiAoZmxhZyAmIFZTWU5DX1BJUEVBX0ZMQUcpCi0JCXBpcGUtPnBpcGUgfD0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQTsKLQlpZiAoZmxhZyAmIFZTWU5DX1BJUEVCX0ZMQUcpCi0JCXBpcGUtPnBpcGUgfD0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKKwlwaXBlLT5waXBlID0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4MywxMiArNjk4LDEzIEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfdmJsYW5rX3N3YXBfdCAqc3dhcCA9IGRhdGE7Ci0JZHJtX2k5MTVfdmJsX3N3YXBfdCAqdmJsX3N3YXA7CisJZHJtX2k5MTVfdmJsX3N3YXBfdCAqdmJsX3N3YXAsICp2Ymxfb2xkOwogCXVuc2lnbmVkIGludCBwaXBlLCBzZXF0eXBlLCBjdXJzZXE7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWludCByZXQ7CiAKLQlpZiAoIWRldl9wcml2KSB7CisJaWYgKCFkZXZfcHJpdiB8fCAhZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKIAkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MjMsNyArNzM5LDE0IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmRyd19sb2NrLCBpcnFmbGFncyk7CiAKLQljdXJzZXEgPSBhdG9taWNfcmVhZChwaXBlID8gJmRldi0+dmJsX3JlY2VpdmVkMiA6ICZkZXYtPnZibF9yZWNlaXZlZCk7CisJLyoKKwkgKiBXZSB0YWtlIHRoZSByZWYgaGVyZSBhbmQgcHV0IGl0IHdoZW4gdGhlIHN3YXAgYWN0dWFsbHkgY29tcGxldGVzCisJICogaW4gdGhlIHRhc2tsZXQuCisJICovCisJcmV0ID0gZHJtX3ZibGFua19nZXQoZGV2LCBwaXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWN1cnNlcSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBwaXBlKTsKIAogCWlmIChzZXF0eXBlID09IF9EUk1fVkJMQU5LX1JFTEFUSVZFKQogCQlzd2FwLT5zZXF1ZW5jZSArPSBjdXJzZXE7CkBAIC01MzMsNDYgKzc1Niw1NyBAQAogCQkJc3dhcC0+c2VxdWVuY2UgPSBjdXJzZXEgKyAxOwogCQl9IGVsc2UgewogCQkJRFJNX0RFQlVHKCJNaXNzZWQgdGFyZ2V0IHNlcXVlbmNlXG4iKTsKKwkJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+c3dhcHNfbG9jaywgaXJxZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKSB7Ci0JCXZibF9zd2FwID0gbGlzdF9lbnRyeShsaXN0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKLQotCQlpZiAodmJsX3N3YXAtPmRyd19pZCA9PSBzd2FwLT5kcmF3YWJsZSAmJgotCQkgICAgdmJsX3N3YXAtPnBpcGUgPT0gcGlwZSAmJgotCQkgICAgdmJsX3N3YXAtPnNlcXVlbmNlID09IHN3YXAtPnNlcXVlbmNlKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+c3dhcHNfbG9jaywgaXJxZmxhZ3MpOwotCQkJRFJNX0RFQlVHKCJBbHJlYWR5IHNjaGVkdWxlZFxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5zd2Fwc19sb2NrLCBpcnFmbGFncyk7Ci0KLQlpZiAoZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPj0gMTAwKSB7Ci0JCURSTV9ERUJVRygiVG9vIG1hbnkgc3dhcHMgcXVldWVkXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KIAl2Ymxfc3dhcCA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKCp2Ymxfc3dhcCksIERSTV9NRU1fRFJJVkVSKTsKIAogCWlmICghdmJsX3N3YXApIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IHRvIHF1ZXVlIHN3YXBcbiIpOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlEUk1fREVCVUcoIlxuIik7Ci0KIAl2Ymxfc3dhcC0+ZHJ3X2lkID0gc3dhcC0+ZHJhd2FibGU7CiAJdmJsX3N3YXAtPnBpcGUgPSBwaXBlOwogCXZibF9zd2FwLT5zZXF1ZW5jZSA9IHN3YXAtPnNlcXVlbmNlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5zd2Fwc19sb2NrLCBpcnFmbGFncyk7CiAKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXZfcHJpdi0+dmJsX3N3YXBzLmhlYWQpIHsKKwkJdmJsX29sZCA9IGxpc3RfZW50cnkobGlzdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CisKKwkJaWYgKHZibF9vbGQtPmRyd19pZCA9PSBzd2FwLT5kcmF3YWJsZSAmJgorCQkgICAgdmJsX29sZC0+cGlwZSA9PSBwaXBlICYmCisJCSAgICB2Ymxfb2xkLT5zZXF1ZW5jZSA9PSBzd2FwLT5zZXF1ZW5jZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKKwkJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CisJCQlkcm1fZnJlZSh2Ymxfc3dhcCwgc2l6ZW9mKCp2Ymxfc3dhcCksIERSTV9NRU1fRFJJVkVSKTsKKwkJCURSTV9ERUJVRygiQWxyZWFkeSBzY2hlZHVsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPj0gMTApIHsKKwkJRFJNX0RFQlVHKCJUb28gbWFueSBzd2FwcyBxdWV1ZWRcbiIpOworCQlEUk1fREVCVUcoIiBwaXBlIDA6ICVkIHBpcGUgMTogJWRcbiIsCisJCQkgIGRybV92YmxhbmtfY291bnQoZGV2LCAwKSwKKwkJCSAgZHJtX3ZibGFua19jb3VudChkZXYsIDEpKTsKKworCQlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXZfcHJpdi0+dmJsX3N3YXBzLmhlYWQpIHsKKwkJCXZibF9vbGQgPSBsaXN0X2VudHJ5KGxpc3QsIGRybV9pOTE1X3ZibF9zd2FwX3QsIGhlYWQpOworCQkJRFJNX0RFQlVHKCJcdGRydyAleCBwaXBlICVkIHNlcSAleFxuIiwKKwkJCQkgIHZibF9vbGQtPmRyd19pZCwgdmJsX29sZC0+cGlwZSwKKwkJCQkgIHZibF9vbGQtPnNlcXVlbmNlKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+c3dhcHNfbG9jaywgaXJxZmxhZ3MpOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOworCQlkcm1fZnJlZSh2Ymxfc3dhcCwgc2l6ZW9mKCp2Ymxfc3dhcCksIERSTV9NRU1fRFJJVkVSKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKIAlsaXN0X2FkZF90YWlsKCZ2Ymxfc3dhcC0+aGVhZCwgJmRldl9wcml2LT52Ymxfc3dhcHMuaGVhZCk7CiAJZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcrKzsKIApAQCAtNTg3LDM3ICs4MjEsNjQgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JSTkxNV9XUklURTE2KEk5MTVSRUdfSFdTVEFNLCAweGZmZmUpOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9NQVNLX1IsIDB4MCk7Ci0JSTkxNV9XUklURTE2KEk5MTVSRUdfSU5UX0VOQUJMRV9SLCAweDApOworCUk5MTVfV1JJVEUoSFdTVEFNLCAweGVmZmUpOworCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKKwlJOTE1X1dSSVRFKElFUiwgMHgwKTsKIH0KIAotdm9pZCBpOTE1X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitpbnQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0LCBudW1fcGlwZXMgPSAyOwogCiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5zd2Fwc19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKTsKKwlJTklUX1dPUksoJmRldl9wcml2LT52Ymxhbmtfd29yaywgaTkxNV92Ymxhbmtfd29ya19oYW5kbGVyKTsKIAlkZXZfcHJpdi0+c3dhcHNfcGVuZGluZyA9IDA7CiAKLQlpZiAoIWRldl9wcml2LT52YmxhbmtfcGlwZSkKLQkJZGV2X3ByaXYtPnZibGFua19waXBlID0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQTsKLQlpOTE1X2VuYWJsZV9pbnRlcnJ1cHQoZGV2KTsKKwkvKiBTZXQgaW5pdGlhbCB1bm1hc2tlZCBJUlFzIHRvIGp1c3QgdGhlIHNlbGVjdGVkIHZibGFuayBwaXBlcy4gKi8KKwlkZXZfcHJpdi0+aXJxX21hc2tfcmVnID0gfjA7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCBudW1fcGlwZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKKwlkZXZfcHJpdi0+aXJxX21hc2tfcmVnICY9IH5JOTE1X0RJU1BMQVlfUElQRV9BX1ZCTEFOS19JTlRFUlJVUFQ7CisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+STkxNV9ESVNQTEFZX1BJUEVfQl9WQkxBTktfSU5URVJSVVBUOworCisJZGV2LT5tYXhfdmJsYW5rX2NvdW50ID0gMHhmZmZmZmY7IC8qIG9ubHkgMjQgYml0cyBvZiBmcmFtZSBjb3VudCAqLworCisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfTUFTSzsKKworCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwlJOTE1X1dSSVRFKElFUiwgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0spOworCSh2b2lkKSBJOTE1X1JFQUQoSUVSKTsKKworCW9wcmVnaW9uX2VuYWJsZV9hc2xlKGRldik7CiAJRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+aXJxX3F1ZXVlKTsKKworCXJldHVybiAwOwogfQogCiB2b2lkIGk5MTVfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MTYgdGVtcDsKKwl1MzIgdGVtcDsKIAogCWlmICghZGV2X3ByaXYpCiAJCXJldHVybjsKIAotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0hXU1RBTSwgMHhmZmZmKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfTUFTS19SLCAweGZmZmYpOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9FTkFCTEVfUiwgMHgwKTsKKwlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSAwOwogCi0JdGVtcCA9IEk5MTVfUkVBRDE2KEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SLCB0ZW1wKTsKKwlJOTE1X1dSSVRFKEhXU1RBTSwgMHhmZmZmZmZmZik7CisJSTkxNV9XUklURShJTVIsIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoSUVSLCAweDApOworCisJdGVtcCA9IEk5MTVfUkVBRChQSVBFQVNUQVQpOworCUk5MTVfV1JJVEUoUElQRUFTVEFULCB0ZW1wKTsKKwl0ZW1wID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CisJSTkxNV9XUklURShQSVBFQlNUQVQsIHRlbXApOworCXRlbXAgPSBJOTE1X1JFQUQoSUlSKTsKKwlJOTE1X1dSSVRFKElJUiwgdGVtcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4N2EwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb3ByZWdpb24uYwpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uIDxob25nLmxpdUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IDxtamdAcmVkaGF0LmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisgKiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT04tSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgSU5URUwgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworI2RlZmluZSBQQ0lfQVNMRSAweGU0CisjZGVmaW5lIFBDSV9MQlBDIDB4ZjQKKyNkZWZpbmUgUENJX0FTTFMgMHhmYworCisjZGVmaW5lIE9QUkVHSU9OX1NaICAgICAgICAgICAgKDgqMTAyNCkKKyNkZWZpbmUgT1BSRUdJT05fSEVBREVSX09GRlNFVCAwCisjZGVmaW5lIE9QUkVHSU9OX0FDUElfT0ZGU0VUICAgMHgxMDAKKyNkZWZpbmUgT1BSRUdJT05fU1dTQ0lfT0ZGU0VUICAweDIwMAorI2RlZmluZSBPUFJFR0lPTl9BU0xFX09GRlNFVCAgIDB4MzAwCisjZGVmaW5lIE9QUkVHSU9OX1ZCVF9PRkZTRVQgICAgMHgxMDAwCisKKyNkZWZpbmUgT1BSRUdJT05fU0lHTkFUVVJFICJJbnRlbEdyYXBoaWNzTWVtIgorI2RlZmluZSBNQk9YX0FDUEkgICAgICAoMTw8MCkKKyNkZWZpbmUgTUJPWF9TV1NDSSAgICAgKDE8PDEpCisjZGVmaW5lIE1CT1hfQVNMRSAgICAgICgxPDwyKQorCitzdHJ1Y3Qgb3ByZWdpb25faGVhZGVyIHsKKyAgICAgICB1OCBzaWduYXR1cmVbMTZdOworICAgICAgIHUzMiBzaXplOworICAgICAgIHUzMiBvcHJlZ2lvbl92ZXI7CisgICAgICAgdTggYmlvc192ZXJbMzJdOworICAgICAgIHU4IHZiaW9zX3ZlclsxNl07CisgICAgICAgdTggZHJpdmVyX3ZlclsxNl07CisgICAgICAgdTMyIG1ib3hlczsKKyAgICAgICB1OCByZXNlcnZlZFsxNjRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogT3BSZWdpb24gbWFpbGJveCAjMTogcHVibGljIEFDUEkgbWV0aG9kcyAqLworc3RydWN0IG9wcmVnaW9uX2FjcGkgeworICAgICAgIHUzMiBkcmR5OyAgICAgICAvKiBkcml2ZXIgcmVhZGluZXNzICovCisgICAgICAgdTMyIGNzdHM7ICAgICAgIC8qIG5vdGlmaWNhdGlvbiBzdGF0dXMgKi8KKyAgICAgICB1MzIgY2V2dDsgICAgICAgLyogY3VycmVudCBldmVudCAqLworICAgICAgIHU4IHJzdmQxWzIwXTsKKyAgICAgICB1MzIgZGlkbFs4XTsgICAgLyogc3VwcG9ydGVkIGRpc3BsYXkgZGV2aWNlcyBJRCBsaXN0ICovCisgICAgICAgdTMyIGNwZGxbOF07ICAgIC8qIGN1cnJlbnRseSBwcmVzZW50ZWQgZGlzcGxheSBsaXN0ICovCisgICAgICAgdTMyIGNhZGxbOF07ICAgIC8qIGN1cnJlbnRseSBhY3RpdmUgZGlzcGxheSBsaXN0ICovCisgICAgICAgdTMyIG5hZGxbOF07ICAgIC8qIG5leHQgYWN0aXZlIGRldmljZXMgbGlzdCAqLworICAgICAgIHUzMiBhc2xwOyAgICAgICAvKiBBU0wgc2xlZXAgdGltZS1vdXQgKi8KKyAgICAgICB1MzIgdGlkeDsgICAgICAgLyogdG9nZ2xlIHRhYmxlIGluZGV4ICovCisgICAgICAgdTMyIGNocGQ7ICAgICAgIC8qIGN1cnJlbnQgaG90cGx1ZyBlbmFibGUgaW5kaWNhdG9yICovCisgICAgICAgdTMyIGNsaWQ7ICAgICAgIC8qIGN1cnJlbnQgbGlkIHN0YXRlKi8KKyAgICAgICB1MzIgY2RjazsgICAgICAgLyogY3VycmVudCBkb2NraW5nIHN0YXRlICovCisgICAgICAgdTMyIHN4c3c7ICAgICAgIC8qIFN4IHN0YXRlIHJlc3VtZSAqLworICAgICAgIHUzMiBldnRzOyAgICAgICAvKiBBU0wgc3VwcG9ydGVkIGV2ZW50cyAqLworICAgICAgIHUzMiBjbm90OyAgICAgICAvKiBjdXJyZW50IE9TIG5vdGlmaWNhdGlvbiAqLworICAgICAgIHUzMiBucmR5OyAgICAgICAvKiBkcml2ZXIgc3RhdHVzICovCisgICAgICAgdTggcnN2ZDJbNjBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogT3BSZWdpb24gbWFpbGJveCAjMjogU1dTQ0kgKi8KK3N0cnVjdCBvcHJlZ2lvbl9zd3NjaSB7CisgICAgICAgdTMyIHNjaWM7ICAgICAgIC8qIFNXU0NJIGNvbW1hbmR8c3RhdHVzfGRhdGEgKi8KKyAgICAgICB1MzIgcGFybTsgICAgICAgLyogY29tbWFuZCBwYXJhbWV0ZXJzICovCisgICAgICAgdTMyIGRzbHA7ICAgICAgIC8qIGRyaXZlciBzbGVlcCB0aW1lLW91dCAqLworICAgICAgIHU4IHJzdmRbMjQ0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzM6IEFTTEUgKi8KK3N0cnVjdCBvcHJlZ2lvbl9hc2xlIHsKKyAgICAgICB1MzIgYXJkeTsgICAgICAgLyogZHJpdmVyIHJlYWRpbmVzcyAqLworICAgICAgIHUzMiBhc2xjOyAgICAgICAvKiBBU0xFIGludGVycnVwdCBjb21tYW5kICovCisgICAgICAgdTMyIHRjaGU7ICAgICAgIC8qIHRlY2hub2xvZ3kgZW5hYmxlZCBpbmRpY2F0b3IgKi8KKyAgICAgICB1MzIgYWxzaTsgICAgICAgLyogY3VycmVudCBBTFMgaWxsdW1pbmFuY2UgcmVhZGluZyAqLworICAgICAgIHUzMiBiY2xwOyAgICAgICAvKiBiYWNrbGlnaHQgYnJpZ2h0bmVzcyB0byBzZXQgKi8KKyAgICAgICB1MzIgcGZpdDsgICAgICAgLyogcGFuZWwgZml0dGluZyBzdGF0ZSAqLworICAgICAgIHUzMiBjYmx2OyAgICAgICAvKiBjdXJyZW50IGJyaWdodG5lc3MgbGV2ZWwgKi8KKyAgICAgICB1MTYgYmNsbVsyMF07ICAgLyogYmFja2xpZ2h0IGxldmVsIGR1dHkgY3ljbGUgbWFwcGluZyB0YWJsZSAqLworICAgICAgIHUzMiBjcGZtOyAgICAgICAvKiBjdXJyZW50IHBhbmVsIGZpdHRpbmcgbW9kZSAqLworICAgICAgIHUzMiBlcGZtOyAgICAgICAvKiBlbmFibGVkIHBhbmVsIGZpdHRpbmcgbW9kZXMgKi8KKyAgICAgICB1OCBwbHV0Wzc0XTsgICAgLyogcGFuZWwgTFVUIGFuZCBpZGVudGlmaWVyICovCisgICAgICAgdTMyIHBmbWI7ICAgICAgIC8qIFBXTSBmcmVxIGFuZCBtaW4gYnJpZ2h0bmVzcyAqLworICAgICAgIHU4IHJzdmRbMTAyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEFTTEUgaXJxIHJlcXVlc3QgYml0cyAqLworI2RlZmluZSBBU0xFX1NFVF9BTFNfSUxMVU0gICAgICgxIDw8IDApCisjZGVmaW5lIEFTTEVfU0VUX0JBQ0tMSUdIVCAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQVNMRV9TRVRfUEZJVCAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBBU0xFX1NFVF9QV01fRlJFUSAgICAgICgxIDw8IDMpCisjZGVmaW5lIEFTTEVfUkVRX01TSyAgICAgICAgICAgMHhmCisKKy8qIHJlc3BvbnNlIGJpdHMgb2YgQVNMRSBpcnEgcmVxdWVzdCAqLworI2RlZmluZSBBU0xFX0FMU19JTExVTV9GQUlMICAgICgyPDwxMCkKKyNkZWZpbmUgQVNMRV9CQUNLTElHSFRfRkFJTCAgICAoMjw8MTIpCisjZGVmaW5lIEFTTEVfUEZJVF9GQUlMICAgICAgICAgKDI8PDE0KQorI2RlZmluZSBBU0xFX1BXTV9GUkVRX0ZBSUwgICAgICgyPDwxNikKKworLyogQVNMRSBiYWNrbGlnaHQgYnJpZ2h0bmVzcyB0byBzZXQgKi8KKyNkZWZpbmUgQVNMRV9CQ0xQX1ZBTElEICAgICAgICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgQVNMRV9CQ0xQX01TSyAgICAgICAgICAofigxPDwzMSkpCisKKy8qIEFTTEUgcGFuZWwgZml0dGluZyByZXF1ZXN0ICovCisjZGVmaW5lIEFTTEVfUEZJVF9WQUxJRCAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgQVNMRV9QRklUX0NFTlRFUiAoMTw8MCkKKyNkZWZpbmUgQVNMRV9QRklUX1NUUkVUQ0hfVEVYVCAoMTw8MSkKKyNkZWZpbmUgQVNMRV9QRklUX1NUUkVUQ0hfR0ZYICgxPDwyKQorCisvKiBQV00gZnJlcXVlbmN5IGFuZCBtaW5pbXVtIGJyaWdodG5lc3MgKi8KKyNkZWZpbmUgQVNMRV9QRk1CX0JSSUdIVE5FU1NfTUFTSyAoMHhmZikKKyNkZWZpbmUgQVNMRV9QRk1CX0JSSUdIVE5FU1NfVkFMSUQgKDE8PDgpCisjZGVmaW5lIEFTTEVfUEZNQl9QV01fTUFTSyAoMHg3ZmZmZmUwMCkKKyNkZWZpbmUgQVNMRV9QRk1CX1BXTV9WQUxJRCAoMTw8MzEpCisKKyNkZWZpbmUgQVNMRV9DQkxWX1ZBTElEICAgICAgICAgKDE8PDMxKQorCitzdGF0aWMgdTMyIGFzbGVfc2V0X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgYmNscCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlID0gZGV2X3ByaXYtPm9wcmVnaW9uLmFzbGU7CisJdTMyIGJsY19wd21fY3RsLCBibGNfcHdtX2N0bDI7CisKKwlpZiAoIShiY2xwICYgQVNMRV9CQ0xQX1ZBTElEKSkKKwkJcmV0dXJuIEFTTEVfQkFDS0xJR0hUX0ZBSUw7CisKKwliY2xwICY9IEFTTEVfQkNMUF9NU0s7CisJaWYgKGJjbHAgPCAwIHx8IGJjbHAgPiAyNTUpCisJCXJldHVybiBBU0xFX0JBQ0tMSUdIVF9GQUlMOworCisJYmxjX3B3bV9jdGwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOworCWJsY19wd21fY3RsICY9IH5CQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOworCWJsY19wd21fY3RsMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOworCisJaWYgKGJsY19wd21fY3RsMiAmIEJMTV9DT01CSU5BVElPTl9NT0RFKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldi0+cGRldiwgUENJX0xCUEMsIGJjbHApOworCWVsc2UKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTCwgYmxjX3B3bV9jdGwgfCAoKGJjbHAgKiAweDEwMSktMSkpOworCisJYXNsZS0+Y2JsdiA9IChiY2xwKjB4NjQpLzB4ZmYgfCBBU0xFX0NCTFZfVkFMSUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBhc2xlX3NldF9hbHNfaWxsdW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGFsc2kpCit7CisJLyogYWxzaSBpcyB0aGUgY3VycmVudCBBTFMgcmVhZGluZyBpbiBsdXguIDAgaW5kaWNhdGVzIGJlbG93IHNlbnNvcgorCSAgIHJhbmdlLCAweGZmZmYgaW5kaWNhdGVzIGFib3ZlIHNlbnNvciByYW5nZS4gMS0weGZmZmUgYXJlIHZhbGlkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfcHdtX2ZyZXEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHBmbWIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAocGZtYiAmIEFTTEVfUEZNQl9QV01fVkFMSUQpIHsKKwkJdTMyIGJsY19wd21fY3RsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwkJdTMyIHB3bSA9IHBmbWIgJiBBU0xFX1BGTUJfUFdNX01BU0s7CisJCWJsY19wd21fY3RsICY9IEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0s7CisJCXB3bSA9IHB3bSA+PiA5OworCQkvKiBGSVhNRSAtIHdoYXQgZG8gd2UgZG8gd2l0aCB0aGUgUFdNPyAqLworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBhc2xlX3NldF9wZml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBwZml0KQoreworCS8qIFBhbmVsIGZpdHRpbmcgaXMgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhlIFggY29kZSwgc28gdGhpcyBpcyBhCisJICAgbm9vcCB1bnRpbCBtb2Rlc2V0dGluZyBzdXBwb3J0IHdvcmtzIGZ1bGx5ICovCisJaWYgKCEocGZpdCAmIEFTTEVfUEZJVF9WQUxJRCkpCisJCXJldHVybiBBU0xFX1BGSVRfRkFJTDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvcHJlZ2lvbl9hc2xlX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlID0gZGV2X3ByaXYtPm9wcmVnaW9uLmFzbGU7CisJdTMyIGFzbGVfc3RhdCA9IDA7CisJdTMyIGFzbGVfcmVxOworCisJaWYgKCFhc2xlKQorCQlyZXR1cm47CisKKwlhc2xlX3JlcSA9IGFzbGUtPmFzbGMgJiBBU0xFX1JFUV9NU0s7CisKKwlpZiAoIWFzbGVfcmVxKSB7CisJCURSTV9ERUJVRygibm9uIGFzbGUgc2V0IHJlcXVlc3Q/P1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9BTFNfSUxMVU0pCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9hbHNfaWxsdW0oZGV2LCBhc2xlLT5hbHNpKTsKKworCWlmIChhc2xlX3JlcSAmIEFTTEVfU0VUX0JBQ0tMSUdIVCkKKwkJYXNsZV9zdGF0IHw9IGFzbGVfc2V0X2JhY2tsaWdodChkZXYsIGFzbGUtPmJjbHApOworCisJaWYgKGFzbGVfcmVxICYgQVNMRV9TRVRfUEZJVCkKKwkJYXNsZV9zdGF0IHw9IGFzbGVfc2V0X3BmaXQoZGV2LCBhc2xlLT5wZml0KTsKKworCWlmIChhc2xlX3JlcSAmIEFTTEVfU0VUX1BXTV9GUkVRKQorCQlhc2xlX3N0YXQgfD0gYXNsZV9zZXRfcHdtX2ZyZXEoZGV2LCBhc2xlLT5wZm1iKTsKKworCWFzbGUtPmFzbGMgPSBhc2xlX3N0YXQ7Cit9CisKKyNkZWZpbmUgQVNMRV9BTFNfRU4gICAgKDE8PDApCisjZGVmaW5lIEFTTEVfQkxDX0VOICAgICgxPDwxKQorI2RlZmluZSBBU0xFX1BGSVRfRU4gICAoMTw8MikKKyNkZWZpbmUgQVNMRV9QRk1CX0VOICAgKDE8PDMpCisKK3ZvaWQgb3ByZWdpb25fZW5hYmxlX2FzbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlID0gZGV2X3ByaXYtPm9wcmVnaW9uLmFzbGU7CisKKwlpZiAoYXNsZSkgeworCQl1MzIgcGlwZWJfc3RhdHMgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKKwkJaWYgKElTX01PQklMRShkZXYpKSB7CisJCQkvKiBNYW55IGRldmljZXMgdHJpZ2dlciBldmVudHMgd2l0aCBhIHdyaXRlIHRvIHRoZQorCQkJICAgbGVnYWN5IGJhY2tsaWdodCBjb250cm9sbGVyLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZQorCQkJICAgdGhhdCBpdCdzIGFibGUgdG8gZ2VuZXJhdGUgaW50ZXJydXB0cyAqLworCQkJSTkxNV9XUklURShQSVBFQlNUQVQsIHBpcGViX3N0YXRzIHw9CisJCQkJICAgSTkxNV9MRUdBQ1lfQkxDX0VWRU5UX0VOQUJMRSk7CisJCQlpOTE1X2VuYWJsZV9pcnEoZGV2X3ByaXYsIEk5MTVfQVNMRV9JTlRFUlJVUFQgfAorCQkJCQlJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCk7CisJCX0gZWxzZQorCQkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0FTTEVfSU5URVJSVVBUKTsKKworCQlhc2xlLT50Y2hlID0gQVNMRV9BTFNfRU4gfCBBU0xFX0JMQ19FTiB8IEFTTEVfUEZJVF9FTiB8CisJCQlBU0xFX1BGTUJfRU47CisJCWFzbGUtPmFyZHkgPSAxOworCX0KK30KKworI2RlZmluZSBBQ1BJX0VWX0RJU1BMQVlfU1dJVENIICgxPDwwKQorI2RlZmluZSBBQ1BJX0VWX0xJRCAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBBQ1BJX0VWX0RPQ0sgICAgICAgICAgICgxPDwyKQorCitzdGF0aWMgc3RydWN0IGludGVsX29wcmVnaW9uICpzeXN0ZW1fb3ByZWdpb247CisKK2ludCBpbnRlbF9vcHJlZ2lvbl92aWRlb19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCS8qIFRoZSBvbmx5IHZpZGVvIGV2ZW50cyByZWxldmFudCB0byBvcHJlZ2lvbiBhcmUgMHg4MC4gVGhlc2UgaW5kaWNhdGUKKwkgICBlaXRoZXIgYSBkb2NraW5nIGV2ZW50LCBsaWQgc3dpdGNoIG9yIGRpc3BsYXkgc3dpdGNoIHJlcXVlc3QuIEluCisJICAgTGludXgsIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBkb2NrLCBidXR0b24gYW5kIHZpZGVvIGRyaXZlcnMuCisJICAgV2UgbWlnaHQgd2FudCB0byBmaXggdGhlIHZpZGVvIGRyaXZlciB0byBiZSBvcHJlZ2lvbi1hd2FyZSBpbgorCSAgIGZ1dHVyZSwgYnV0IHJpZ2h0IG5vdyB3ZSBqdXN0IGluZGljYXRlIHRvIHRoZSBmaXJtd2FyZSB0aGF0IHRoZQorCSAgIHJlcXVlc3QgaGFzIGJlZW4gaGFuZGxlZCAqLworCisJc3RydWN0IG9wcmVnaW9uX2FjcGkgKmFjcGk7CisKKwlpZiAoIXN5c3RlbV9vcHJlZ2lvbikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJYWNwaSA9IHN5c3RlbV9vcHJlZ2lvbi0+YWNwaTsKKwlhY3BpLT5jc3RzID0gMDsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaW50ZWxfb3ByZWdpb25fbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpbnRlbF9vcHJlZ2lvbl92aWRlb19ldmVudCwKK307CisKK2ludCBpbnRlbF9vcHJlZ2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJmRldl9wcml2LT5vcHJlZ2lvbjsKKwl2b2lkICpiYXNlOworCXUzMiBhc2xzLCBtYm94ZXM7CisJaW50IGVyciA9IDA7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBQQ0lfQVNMUywgJmFzbHMpOworCURSTV9ERUJVRygiZ3JhcGhpYyBvcHJlZ2lvbiBwaHlzaWNhbCBhZGRyOiAweCV4XG4iLCBhc2xzKTsKKwlpZiAoYXNscyA9PSAwKSB7CisJCURSTV9ERUJVRygiQUNQSSBPcFJlZ2lvbiBub3Qgc3VwcG9ydGVkIVxuIik7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJYmFzZSA9IGlvcmVtYXAoYXNscywgT1BSRUdJT05fU1opOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvcHJlZ2lvbi0+aGVhZGVyID0gYmFzZTsKKwlpZiAobWVtY21wKG9wcmVnaW9uLT5oZWFkZXItPnNpZ25hdHVyZSwgT1BSRUdJT05fU0lHTkFUVVJFLCAxNikpIHsKKwkJRFJNX0RFQlVHKCJvcHJlZ2lvbiBzaWduYXR1cmUgbWlzbWF0Y2hcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJbWJveGVzID0gb3ByZWdpb24tPmhlYWRlci0+bWJveGVzOworCWlmIChtYm94ZXMgJiBNQk9YX0FDUEkpIHsKKwkJRFJNX0RFQlVHKCJQdWJsaWMgQUNQSSBtZXRob2RzIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5hY3BpID0gYmFzZSArIE9QUkVHSU9OX0FDUElfT0ZGU0VUOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiUHVibGljIEFDUEkgbWV0aG9kcyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJZXJyID0gLUVOT1RTVVBQOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW9wcmVnaW9uLT5lbmFibGVkID0gMTsKKworCWlmIChtYm94ZXMgJiBNQk9YX1NXU0NJKSB7CisJCURSTV9ERUJVRygiU1dTQ0kgc3VwcG9ydGVkXG4iKTsKKwkJb3ByZWdpb24tPnN3c2NpID0gYmFzZSArIE9QUkVHSU9OX1NXU0NJX09GRlNFVDsKKwl9CisJaWYgKG1ib3hlcyAmIE1CT1hfQVNMRSkgeworCQlEUk1fREVCVUcoIkFTTEUgc3VwcG9ydGVkXG4iKTsKKwkJb3ByZWdpb24tPmFzbGUgPSBiYXNlICsgT1BSRUdJT05fQVNMRV9PRkZTRVQ7CisJfQorCisJLyogTm90aWZ5IEJJT1Mgd2UgYXJlIHJlYWR5IHRvIGhhbmRsZSBBQ1BJIHZpZGVvIGV4dCBub3RpZnMuCisJICogUmlnaHQgbm93LCBhbGwgdGhlIGV2ZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgQUNQSSB2aWRlbyBtb2R1bGUuCisJICogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZW0uICovCisJb3ByZWdpb24tPmFjcGktPmNzdHMgPSAwOworCW9wcmVnaW9uLT5hY3BpLT5kcmR5ID0gMTsKKworCXN5c3RlbV9vcHJlZ2lvbiA9IG9wcmVnaW9uOworCXJlZ2lzdGVyX2FjcGlfbm90aWZpZXIoJmludGVsX29wcmVnaW9uX25vdGlmaWVyKTsKKworCXJldHVybiAwOworCitlcnJfb3V0OgorCWlvdW5tYXAob3ByZWdpb24tPmhlYWRlcik7CisJb3ByZWdpb24tPmhlYWRlciA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBpbnRlbF9vcHJlZ2lvbl9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJmRldl9wcml2LT5vcHJlZ2lvbjsKKworCWlmICghb3ByZWdpb24tPmVuYWJsZWQpCisJCXJldHVybjsKKworCW9wcmVnaW9uLT5hY3BpLT5kcmR5ID0gMDsKKworCXN5c3RlbV9vcHJlZ2lvbiA9IE5VTEw7CisJdW5yZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZpbnRlbF9vcHJlZ2lvbl9ub3RpZmllcik7CisKKwkvKiBqdXN0IGNsZWFyIGFsbCBvcHJlZ2lvbiBtZW1vcnkgcG9pbnRlcnMgbm93ICovCisJaW91bm1hcChvcHJlZ2lvbi0+aGVhZGVyKTsKKwlvcHJlZ2lvbi0+aGVhZGVyID0gTlVMTDsKKwlvcHJlZ2lvbi0+YWNwaSA9IE5VTEw7CisJb3ByZWdpb24tPnN3c2NpID0gTlVMTDsKKwlvcHJlZ2lvbi0+YXNsZSA9IE5VTEw7CisKKwlvcHJlZ2lvbi0+ZW5hYmxlZCA9IDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJkOWYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMCwwICsxLDE0MTcgQEAKKy8qIENvcHlyaWdodCAyMDAzIFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVFVOR1NURU4gR1JBUEhJQ1MgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfSTkxNV9SRUdfSF8KKyNkZWZpbmUgX0k5MTVfUkVHX0hfCisKKy8qCisgKiBUaGUgQnJpZGdlIGRldmljZSdzIFBDSSBjb25maWcgc3BhY2UgaGFzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICogZmIgYXBlcnR1cmUgc2l6ZSBhbmQgdGhlIGFtb3VudCBvZiBwcmUtcmVzZXJ2ZWQgbWVtb3J5LgorICovCisjZGVmaW5lIElOVEVMX0dNQ0hfQ1RSTAkJMHg1MgorI2RlZmluZSBJTlRFTF9HTUNIX0VOQUJMRUQJMHg0CisjZGVmaW5lIElOVEVMX0dNQ0hfTUVNX01BU0sJMHgxCisjZGVmaW5lIElOVEVMX0dNQ0hfTUVNXzY0TQkweDEKKyNkZWZpbmUgSU5URUxfR01DSF9NRU1fMTI4TQkwCisKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX01BU0sJCSgweDcgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX0RJU0FCTEVECSgweDAgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xTQkoMHgxIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fNE0JKDB4MiA8PCA0KQorI2RlZmluZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzhNCSgweDMgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xNk0JKDB4NCA8PCA0KQorI2RlZmluZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzMyTQkoMHg1IDw8IDQpCisKKyNkZWZpbmUgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNDhNCSgweDYgPDwgNCkKKyNkZWZpbmUgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNjRNCSgweDcgPDwgNCkKKworLyogUENJIGNvbmZpZyBzcGFjZSAqLworCisjZGVmaW5lIEhQTExDQwkweGMwIC8qIDg1NSBvbmx5ICovCisjZGVmaW5lICAgR0NfQ0xPQ0tfQ09OVFJPTF9NQVNLCQkoMyA8PCAwKQorI2RlZmluZSAgIEdDX0NMT0NLXzEzM18yMDAJCSgwIDw8IDApCisjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzIwMAkJKDEgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xMDBfMTMzCQkoMiA8PCAwKQorI2RlZmluZSAgIEdDX0NMT0NLXzE2Nl8yNTAJCSgzIDw8IDApCisjZGVmaW5lIEdDRkdDCTB4ZjAgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lICAgR0NfTE9XX0ZSRVFVRU5DWV9FTkFCTEUJKDEgPDwgNykKKyNkZWZpbmUgICBHQ19ESVNQTEFZX0NMT0NLXzE5MF8yMDBfTUhaCSgwIDw8IDQpCisjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS18zMzNfTUhaCSg0IDw8IDQpCisjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS19NQVNLCQkoNyA8PCA0KQorI2RlZmluZSBMQkIJMHhmNAorCisvKiBWR0Egc3R1ZmYgKi8KKworI2RlZmluZSBWR0FfU1QwMV9NREEgMHgzYmEKKyNkZWZpbmUgVkdBX1NUMDFfQ0dBIDB4M2RhCisKKyNkZWZpbmUgVkdBX01TUl9XUklURSAweDNjMgorI2RlZmluZSBWR0FfTVNSX1JFQUQgMHgzY2MKKyNkZWZpbmUgICBWR0FfTVNSX01FTV9FTiAoMTw8MSkKKyNkZWZpbmUgICBWR0FfTVNSX0NHQV9NT0RFICgxPDwwKQorCisjZGVmaW5lIFZHQV9TUl9JTkRFWCAweDNjNAorI2RlZmluZSBWR0FfU1JfREFUQSAweDNjNQorCisjZGVmaW5lIFZHQV9BUl9JTkRFWCAweDNjMAorI2RlZmluZSAgIFZHQV9BUl9WSURfRU4gKDE8PDUpCisjZGVmaW5lIFZHQV9BUl9EQVRBX1dSSVRFIDB4M2MwCisjZGVmaW5lIFZHQV9BUl9EQVRBX1JFQUQgMHgzYzEKKworI2RlZmluZSBWR0FfR1JfSU5ERVggMHgzY2UKKyNkZWZpbmUgVkdBX0dSX0RBVEEgMHgzY2YKKy8qIEdSMDUgKi8KKyNkZWZpbmUgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9TSElGVCAzCisjZGVmaW5lICAgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9QTEFORSAxCisvKiBHUjA2ICovCisjZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX01BU0sgMHhjCisjZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX1NISUZUIDIKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0FGRkZGIDAKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0JGRkZGIDEKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0I3RkZGIDIKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0JGRkZGIDMKKworI2RlZmluZSBWR0FfREFDTUFTSyAweDNjNgorI2RlZmluZSBWR0FfREFDUlggMHgzYzcKKyNkZWZpbmUgVkdBX0RBQ1dYIDB4M2M4CisjZGVmaW5lIFZHQV9EQUNEQVRBIDB4M2M5CisKKyNkZWZpbmUgVkdBX0NSX0lOREVYX01EQSAweDNiNAorI2RlZmluZSBWR0FfQ1JfREFUQV9NREEgMHgzYjUKKyNkZWZpbmUgVkdBX0NSX0lOREVYX0NHQSAweDNkNAorI2RlZmluZSBWR0FfQ1JfREFUQV9DR0EgMHgzZDUKKworLyoKKyAqIE1lbW9yeSBpbnRlcmZhY2UgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgdGhlIGtlcm5lbAorICovCisjZGVmaW5lIE1JX0lOU1RSKG9wY29kZSwgZmxhZ3MpICgoKG9wY29kZSkgPDwgMjMpIHwgKGZsYWdzKSkKKworI2RlZmluZSBNSV9OT09QCQkJTUlfSU5TVFIoMCwgMCkKKyNkZWZpbmUgTUlfVVNFUl9JTlRFUlJVUFQJTUlfSU5TVFIoMHgwMiwgMCkKKyNkZWZpbmUgTUlfV0FJVF9GT1JfRVZFTlQgICAgICAgTUlfSU5TVFIoMHgwMywgMCkKKyNkZWZpbmUgICBNSV9XQUlUX0ZPUl9QTEFORV9CX0ZMSVAgICAgICAoMTw8NikKKyNkZWZpbmUgICBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVAgICAgICAoMTw8MikKKyNkZWZpbmUgICBNSV9XQUlUX0ZPUl9QTEFORV9BX1NDQU5MSU5FUyAoMTw8MSkKKyNkZWZpbmUgTUlfRkxVU0gJCU1JX0lOU1RSKDB4MDQsIDApCisjZGVmaW5lICAgTUlfUkVBRF9GTFVTSAkJKDEgPDwgMCkKKyNkZWZpbmUgICBNSV9FWEVfRkxVU0gJCSgxIDw8IDEpCisjZGVmaW5lICAgTUlfTk9fV1JJVEVfRkxVU0gJKDEgPDwgMikKKyNkZWZpbmUgICBNSV9TQ0VORV9DT1VOVAkoMSA8PCAzKSAvKiBqdXN0IGluY3JlbWVudCBzY2VuZSBjb3VudCAqLworI2RlZmluZSAgIE1JX0VORF9TQ0VORQkJKDEgPDwgNCkgLyogZmx1c2ggYmlubmVyIGFuZCBpbmNyIHNjZW5lIGNvdW50ICovCisjZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9FTkQJTUlfSU5TVFIoMHgwYSwgMCkKKyNkZWZpbmUgTUlfUkVQT1JUX0hFQUQJCU1JX0lOU1RSKDB4MDcsIDApCisjZGVmaW5lIE1JX0xPQURfU0NBTl9MSU5FU19JTkNMIE1JX0lOU1RSKDB4MTIsIDApCisjZGVmaW5lIE1JX1NUT1JFX0RXT1JEX0lNTQlNSV9JTlNUUigweDIwLCAxKQorI2RlZmluZSAgIE1JX01FTV9WSVJUVUFMCSgxIDw8IDIyKSAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgTUlfU1RPUkVfRFdPUkRfSU5ERVgJTUlfSU5TVFIoMHgyMSwgMSkKKyNkZWZpbmUgICBNSV9TVE9SRV9EV09SRF9JTkRFWF9TSElGVCAyCisjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfSU1NCU1JX0lOU1RSKDB4MjIsIDEpCisjZGVmaW5lIE1JX0JBVENIX0JVRkZFUgkJTUlfSU5TVFIoMHgzMCwgMSkKKyNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFCSgxKQorI2RlZmluZSAgIE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSAoMTw8OCkKKyNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUCU1JX0lOU1RSKDB4MzEsIDApCisKKy8qCisgKiAzRCBpbnN0cnVjdGlvbnMgdXNlZCBieSB0aGUga2VybmVsCisgKi8KKyNkZWZpbmUgR0ZYX0lOU1RSKG9wY29kZSwgZmxhZ3MpICgoMHgzIDw8IDI5KSB8ICgob3Bjb2RlKSA8PCAyNCkgfCAoZmxhZ3MpKQorCisjZGVmaW5lIEdGWF9PUF9SQVNURVJfUlVMRVMgICAgKCgweDM8PDI5KXwoMHg3PDwyNCkpCisjZGVmaW5lIEdGWF9PUF9TQ0lTU09SICAgICAgICAgKCgweDM8PDI5KXwoMHgxYzw8MjQpfCgweDEwPDwxOSkpCisjZGVmaW5lICAgU0NfVVBEQVRFX1NDSVNTT1IgICAgICAgKDB4MTw8MSkKKyNkZWZpbmUgICBTQ19FTkFCTEVfTUFTSyAgICAgICAgICAoMHgxPDwwKQorI2RlZmluZSAgIFNDX0VOQUJMRSAgICAgICAgICAgICAgICgweDE8PDApCisjZGVmaW5lIEdGWF9PUF9MT0FEX0lORElSRUNUICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDc8PDE2KSkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfSU5GTyAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODE8PDE2KXwoMHgxKSkKKyNkZWZpbmUgICBTQ0lfWU1JTl9NQVNLICAgICAgKDB4ZmZmZjw8MTYpCisjZGVmaW5lICAgU0NJX1hNSU5fTUFTSyAgICAgICgweGZmZmY8PDApCisjZGVmaW5lICAgU0NJX1lNQVhfTUFTSyAgICAgICgweGZmZmY8PDE2KQorI2RlZmluZSAgIFNDSV9YTUFYX01BU0sgICAgICAoMHhmZmZmPDwwKQorI2RlZmluZSBHRlhfT1BfU0NJU1NPUl9FTkFCTEUJICgoMHgzPDwyOSl8KDB4MWM8PDI0KXwoMHgxMDw8MTkpKQorI2RlZmluZSBHRlhfT1BfU0NJU1NPUl9SRUNUCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODE8PDE2KXwxKQorI2RlZmluZSBHRlhfT1BfQ09MT1JfRkFDVE9SICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDE8PDE2KXwweDApCisjZGVmaW5lIEdGWF9PUF9TVElQUExFICAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODM8PDE2KSkKKyNkZWZpbmUgR0ZYX09QX01BUF9JTkZPICAgICAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwweDQpCisjZGVmaW5lIEdGWF9PUF9ERVNUQlVGRkVSX1ZBUlMgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODU8PDE2KXwweDApCisjZGVmaW5lIEdGWF9PUF9ERVNUQlVGRkVSX0lORk8JICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4ZTw8MTYpfDEpCisjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODA8PDE2KXwoMHgzKSkKKyNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk9fSTk2NSAgKCgweDc5MDA8PDE2KXwweDIpCisjZGVmaW5lIFNSQ19DT1BZX0JMVF9DTUQgICAgICAgICAgICAgICAgKCgyPDwyOSl8KDB4NDM8PDIyKXw0KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfQ01ECQkoKDI8PDI5KXwoMHg1Mzw8MjIpfDYpCisjZGVmaW5lIFhZX01PTk9fU1JDX0NPUFlfSU1NX0JMVAkoKDI8PDI5KXwoMHg3MTw8MjIpfDUpCisjZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9XUklURV9BTFBIQQkoMTw8MjEpCisjZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9XUklURV9SR0IJKDE8PDIwKQorI2RlZmluZSAgIEJMVF9ERVBUSF84CQkJKDA8PDI0KQorI2RlZmluZSAgIEJMVF9ERVBUSF8xNl81NjUJCSgxPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMTZfMTU1NQkJKDI8PDI0KQorI2RlZmluZSAgIEJMVF9ERVBUSF8zMgkJCSgzPDwyNCkKKyNkZWZpbmUgICBCTFRfUk9QX0dYQ09QWQkJKDB4Y2M8PDE2KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfU1JDX1RJTEVECSgxPDwxNSkgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9EU1RfVElMRUQJKDE8PDExKSAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgQ01EX09QX0RJU1BMQVlCVUZGRVJfSU5GTyAoKDB4MDw8MjkpfCgweDE0PDwyMyl8MikKKyNkZWZpbmUgICBBU1lOQ19GTElQICAgICAgICAgICAgICAgICgxPDwyMikKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0EgICAgICAgICAgICgwPDwyMCkKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0IgICAgICAgICAgICgxPDwyMCkKKworLyoKKyAqIEluc3RydWN0aW9uIGFuZCBpbnRlcnJ1cHQgY29udHJvbCByZWdzCisgKi8KKworI2RlZmluZSBQUkIwX1RBSUwJMHgwMjAzMAorI2RlZmluZSBQUkIwX0hFQUQJMHgwMjAzNAorI2RlZmluZSBQUkIwX1NUQVJUCTB4MDIwMzgKKyNkZWZpbmUgUFJCMF9DVEwJMHgwMjAzYworI2RlZmluZSAgIFRBSUxfQUREUgkJMHgwMDFGRkZGOAorI2RlZmluZSAgIEhFQURfV1JBUF9DT1VOVAkweEZGRTAwMDAwCisjZGVmaW5lICAgSEVBRF9XUkFQX09ORQkJMHgwMDIwMDAwMAorI2RlZmluZSAgIEhFQURfQUREUgkJMHgwMDFGRkZGQworI2RlZmluZSAgIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKKyNkZWZpbmUgICBSSU5HX1JFUE9SVF9NQVNLCTB4MDAwMDAwMDYKKyNkZWZpbmUgICBSSU5HX1JFUE9SVF82NEsJMHgwMDAwMDAwMgorI2RlZmluZSAgIFJJTkdfUkVQT1JUXzEyOEsJMHgwMDAwMDAwNAorI2RlZmluZSAgIFJJTkdfTk9fUkVQT1JUCTB4MDAwMDAwMDAKKyNkZWZpbmUgICBSSU5HX1ZBTElEX01BU0sJMHgwMDAwMDAwMQorI2RlZmluZSAgIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBSSU5HX0lOVkFMSUQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUFJCMV9UQUlMCTB4MDIwNDAgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIFBSQjFfSEVBRAkweDAyMDQ0IC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX1NUQVJUCTB4MDIwNDggLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIFBSQjFfQ1RMCTB4MDIwNGMgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIEFDVEhEX0k5NjUJMHgwMjA3NAorI2RlZmluZSBIV1NfUEdBCQkweDAyMDgwCisjZGVmaW5lIEhXU19BRERSRVNTX01BU0sJMHhmZmZmZjAwMAorI2RlZmluZSBIV1NfU1RBUlRfQUREUkVTU19TSElGVAk0CisjZGVmaW5lIElQRUlSCQkweDAyMDg4CisjZGVmaW5lIE5PUElECQkweDAyMDk0CisjZGVmaW5lIEhXU1RBTQkJMHgwMjA5OAorI2RlZmluZSBTQ1BEMAkJMHgwMjA5YyAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgSUVSCQkweDAyMGEwCisjZGVmaW5lIElJUgkJMHgwMjBhNAorI2RlZmluZSBJTVIJCTB4MDIwYTgKKyNkZWZpbmUgSVNSCQkweDAyMGFjCisjZGVmaW5lICAgSTkxNV9QSVBFX0NPTlRST0xfTk9USUZZX0lOVEVSUlVQVAkJKDE8PDE4KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVAkJCSgxPDwxNykKKyNkZWZpbmUgICBJOTE1X1JFTkRFUl9DT01NQU5EX1BBUlNFUl9FUlJPUl9JTlRFUlJVUFQJKDE8PDE1KQorI2RlZmluZSAgIEk5MTVfR01DSF9USEVSTUFMX1NFTlNPUl9FVkVOVF9JTlRFUlJVUFQJKDE8PDE0KQorI2RlZmluZSAgIEk5MTVfSFdCX09PTV9JTlRFUlJVUFQJCQkoMTw8MTMpCisjZGVmaW5lICAgSTkxNV9TWU5DX1NUQVRVU19JTlRFUlJVUFQJCQkoMTw8MTIpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BMQU5FX0FfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVAkoMTw8MTEpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BMQU5FX0JfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVAkoMTw8MTApCisjZGVmaW5lICAgSTkxNV9PVkVSTEFZX1BMQU5FX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDkpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BMQU5FX0NfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVAkoMTw8OCkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9BX1ZCTEFOS19JTlRFUlJVUFQJCSgxPDw3KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUCQkoMTw8NikKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9CX1ZCTEFOS19JTlRFUlJVUFQJCSgxPDw1KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUCQkoMTw8NCkKKyNkZWZpbmUgICBJOTE1X0RFQlVHX0lOVEVSUlVQVAkJCQkoMTw8MikKKyNkZWZpbmUgICBJOTE1X1VTRVJfSU5URVJSVVBUCQkJCSgxPDwxKQorI2RlZmluZSAgIEk5MTVfQVNMRV9JTlRFUlJVUFQJCQkJKDE8PDApCisjZGVmaW5lIEVJUgkJMHgwMjBiMAorI2RlZmluZSBFTVIJCTB4MDIwYjQKKyNkZWZpbmUgRVNSCQkweDAyMGI4CisjZGVmaW5lIElOU1RQTQkgICAgICAgIDB4MDIwYzAKKyNkZWZpbmUgQUNUSEQJICAgICAgICAweDAyMGM4CisjZGVmaW5lIEZXX0JMQwkJMHgwMjBkOAorI2RlZmluZSBGV19CTENfU0VMRgkweDAyMGUwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBNSV9BUkJfU1RBVEUJMHgwMjBlNCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgQ0FDSEVfTU9ERV8wCTB4MDIxMjAgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lICAgQ00wX01BU0tfU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgICBDTTBfSVpfT1BUX0RJU0FCTEUgICAgICAoMTw8NikKKyNkZWZpbmUgICBDTTBfWlJfT1BUX0RJU0FCTEUgICAgICAoMTw8NSkKKyNkZWZpbmUgICBDTTBfREVQVEhfRVZJQ1RfRElTQUJMRSAoMTw8NCkKKyNkZWZpbmUgICBDTTBfQ09MT1JfRVZJQ1RfRElTQUJMRSAoMTw8MykKKyNkZWZpbmUgICBDTTBfREVQVEhfV1JJVEVfRElTQUJMRSAoMTw8MSkKKyNkZWZpbmUgICBDTTBfUkNfT1BfRkxVU0hfRElTQUJMRSAoMTw8MCkKKyNkZWZpbmUgR0ZYX0ZMU0hfQ05UTAkweDAyMTcwIC8qIDkxNSsgb25seSAqLworCisvKgorICogRnJhbWVidWZmZXIgY29tcHJlc3Npb24gKDkxNSsgb25seSkKKyAqLworCisjZGVmaW5lIEZCQ19DRkJfQkFTRQkJMHgwMzIwMCAvKiA0ayBwYWdlIGFsaWduZWQgKi8KKyNkZWZpbmUgRkJDX0xMX0JBU0UJCTB4MDMyMDQgLyogNGsgcGFnZSBhbGlnbmVkICovCisjZGVmaW5lIEZCQ19DT05UUk9MCQkweDAzMjA4CisjZGVmaW5lICAgRkJDX0NUTF9FTgkJKDE8PDMxKQorI2RlZmluZSAgIEZCQ19DVExfUEVSSU9ESUMJKDE8PDMwKQorI2RlZmluZSAgIEZCQ19DVExfSU5URVJWQUxfU0hJRlQgKDE2KQorI2RlZmluZSAgIEZCQ19DVExfVU5DT01QUkVTU0lCTEUgKDE8PDE0KQorI2RlZmluZSAgIEZCQ19DVExfU1RSSURFX1NISUZUCSg1KQorI2RlZmluZSAgIEZCQ19DVExfRkVOQ0VOTwkoMTw8MCkKKyNkZWZpbmUgRkJDX0NPTU1BTkQJCTB4MDMyMGMKKyNkZWZpbmUgICBGQkNfQ01EX0NPTVBSRVNTCSgxPDwwKQorI2RlZmluZSBGQkNfU1RBVFVTCQkweDAzMjEwCisjZGVmaW5lICAgRkJDX1NUQVRfQ09NUFJFU1NJTkcJKDE8PDMxKQorI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTRUQJKDE8PDMwKQorI2RlZmluZSAgIEZCQ19TVEFUX01PRElGSUVECSgxPDwyOSkKKyNkZWZpbmUgICBGQkNfU1RBVF9DVVJSRU5UX0xJTkUJKDE8PDApCisjZGVmaW5lIEZCQ19DT05UUk9MMgkJMHgwMzIxNAorI2RlZmluZSAgIEZCQ19DVExfRkVOQ0VfREJMCSgwPDw0KQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9JTU0JKDA8PDIpCisjZGVmaW5lICAgRkJDX0NUTF9JRExFX0ZVTEwJKDE8PDIpCisjZGVmaW5lICAgRkJDX0NUTF9JRExFX0xJTkUJKDI8PDIpCisjZGVmaW5lICAgRkJDX0NUTF9JRExFX0RFQlVHCSgzPDwyKQorI2RlZmluZSAgIEZCQ19DVExfQ1BVX0ZFTkNFCSgxPDwxKQorI2RlZmluZSAgIEZCQ19DVExfUExBTkVBCSgwPDwwKQorI2RlZmluZSAgIEZCQ19DVExfUExBTkVCCSgxPDwwKQorI2RlZmluZSBGQkNfRkVOQ0VfT0ZGCQkweDAzMjFiCisKKyNkZWZpbmUgRkJDX0xMX1NJWkUJCSgxNTM2KQorCisvKgorICogR1BJTyByZWdzCisgKi8KKyNkZWZpbmUgR1BJT0EJCQkweDUwMTAKKyNkZWZpbmUgR1BJT0IJCQkweDUwMTQKKyNkZWZpbmUgR1BJT0MJCQkweDUwMTgKKyNkZWZpbmUgR1BJT0QJCQkweDUwMWMKKyNkZWZpbmUgR1BJT0UJCQkweDUwMjAKKyNkZWZpbmUgR1BJT0YJCQkweDUwMjQKKyNkZWZpbmUgR1BJT0cJCQkweDUwMjgKKyNkZWZpbmUgR1BJT0gJCQkweDUwMmMKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfRElSX01BU0sJCSgxIDw8IDApCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9JTgkJKDAgPDwgMSkKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfRElSX09VVAkJKDEgPDwgMSkKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfVkFMX01BU0sJCSgxIDw8IDIpCisjIGRlZmluZSBHUElPX0NMT0NLX1ZBTF9PVVQJCSgxIDw8IDMpCisjIGRlZmluZSBHUElPX0NMT0NLX1ZBTF9JTgkJKDEgPDwgNCkKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfUFVMTFVQX0RJU0FCTEUJKDEgPDwgNSkKKyMgZGVmaW5lIEdQSU9fREFUQV9ESVJfTUFTSwkJKDEgPDwgOCkKKyMgZGVmaW5lIEdQSU9fREFUQV9ESVJfSU4JCSgwIDw8IDkpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX09VVAkJKDEgPDwgOSkKKyMgZGVmaW5lIEdQSU9fREFUQV9WQUxfTUFTSwkJKDEgPDwgMTApCisjIGRlZmluZSBHUElPX0RBVEFfVkFMX09VVAkJKDEgPDwgMTEpCisjIGRlZmluZSBHUElPX0RBVEFfVkFMX0lOCQkoMSA8PCAxMikKKyMgZGVmaW5lIEdQSU9fREFUQV9QVUxMVVBfRElTQUJMRQkoMSA8PCAxMykKKworLyoKKyAqIENsb2NrIGNvbnRyb2wgJiBwb3dlciBtYW5hZ2VtZW50CisgKi8KKworI2RlZmluZSBWR0EwCTB4NjAwMAorI2RlZmluZSBWR0ExCTB4NjAwNAorI2RlZmluZSBWR0FfUEQJMHg2MDEwCisjZGVmaW5lICAgVkdBMF9QRF9QMl9ESVZfNAkoMSA8PCA3KQorI2RlZmluZSAgIFZHQTBfUERfUDFfRElWXzIJKDEgPDwgNSkKKyNkZWZpbmUgICBWR0EwX1BEX1AxX1NISUZUCTAKKyNkZWZpbmUgICBWR0EwX1BEX1AxX01BU0sJKDB4MWYgPDwgMCkKKyNkZWZpbmUgICBWR0ExX1BEX1AyX0RJVl80CSgxIDw8IDE1KQorI2RlZmluZSAgIFZHQTFfUERfUDFfRElWXzIJKDEgPDwgMTMpCisjZGVmaW5lICAgVkdBMV9QRF9QMV9TSElGVAk4CisjZGVmaW5lICAgVkdBMV9QRF9QMV9NQVNLCSgweDFmIDw8IDgpCisjZGVmaW5lIERQTExfQQkweDA2MDE0CisjZGVmaW5lIERQTExfQgkweDA2MDE4CisjZGVmaW5lICAgRFBMTF9WQ09fRU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgICBEUExMX0RWT19ISUdIX1NQRUVECQkoMSA8PCAzMCkKKyNkZWZpbmUgICBEUExMX1NZTkNMT0NLX0VOQUJMRQkJKDEgPDwgMjkpCisjZGVmaW5lICAgRFBMTF9WR0FfTU9ERV9ESVMJCSgxIDw8IDI4KQorI2RlZmluZSAgIERQTExCX01PREVfREFDX1NFUklBTAkJKDEgPDwgMjYpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMQl9NT0RFX0xWRFMJCSgyIDw8IDI2KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9NT0RFX01BU0sJCSgzIDw8IDI2KQorI2RlZmluZSAgIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTAgKDAgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzUgKDEgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl8xNAkoMCA8PCAyNCkgLyogaTkxNSAqLworI2RlZmluZSAgIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzcJKDEgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX1AyX0NMT0NLX0RJVl9NQVNLCTB4MDMwMDAwMDAgLyogaTkxNSAqLworI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSwkweDAwZmYwMDAwIC8qIGk5MTUgKi8KKworI2RlZmluZSBJOTE1X0ZJRk9fVU5ERVJSVU5fU1RBVFVTCQkoMVVMPDwzMSkKKyNkZWZpbmUgSTkxNV9DUkNfRVJST1JfRU5BQkxFCQkJKDFVTDw8MjkpCisjZGVmaW5lIEk5MTVfQ1JDX0RPTkVfRU5BQkxFCQkJKDFVTDw8MjgpCisjZGVmaW5lIEk5MTVfR01CVVNfRVZFTlRfRU5BQkxFCQkJKDFVTDw8MjcpCisjZGVmaW5lIEk5MTVfVlNZTkNfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjUpCisjZGVmaW5lIEk5MTVfRElTUExBWV9MSU5FX0NPTVBBUkVfRU5BQkxFCSgxVUw8PDI0KQorI2RlZmluZSBJOTE1X0RQU1RfRVZFTlRfRU5BQkxFCQkJKDFVTDw8MjMpCisjZGVmaW5lIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUJCSgxVUw8PDIyKQorI2RlZmluZSBJOTE1X09ERF9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCQkoMVVMPDwyMSkKKyNkZWZpbmUgSTkxNV9FVkVOX0ZJRUxEX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MjApCisjZGVmaW5lIEk5MTVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTgpCS8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCQkoMVVMPDwxNykKKyNkZWZpbmUgSTkxNV9PVkVSTEFZX1VQREFURURfRU5BQkxFCQkoMVVMPDwxNikKKyNkZWZpbmUgSTkxNV9DUkNfRVJST1JfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTMpCisjZGVmaW5lIEk5MTVfQ1JDX0RPTkVfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTIpCisjZGVmaW5lIEk5MTVfR01CVVNfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTEpCisjZGVmaW5lIEk5MTVfVlNZTkNfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8OSkKKyNkZWZpbmUgSTkxNV9ESVNQTEFZX0xJTkVfQ09NUEFSRV9TVEFUVVMJKDFVTDw8OCkKKyNkZWZpbmUgSTkxNV9EUFNUX0VWRU5UX1NUQVRVUwkJCSgxVUw8PDcpCisjZGVmaW5lIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9TVEFUVVMJCSgxVUw8PDYpCisjZGVmaW5lIEk5MTVfT0REX0ZJRUxEX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDUpCisjZGVmaW5lIEk5MTVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDQpCisjZGVmaW5lIEk5MTVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MikJLyogOTY1IG9yIGxhdGVyICovCisjZGVmaW5lIEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVEX1NUQVRVUwkJKDFVTDw8MCkKKworI2RlZmluZSBTUlhfSU5ERVgJCTB4M2M0CisjZGVmaW5lIFNSWF9EQVRBCQkweDNjNQorI2RlZmluZSBTUjAxCQkJMQorI2RlZmluZSBTUjAxX1NDUkVFTl9PRkYJCSgxPDw1KQorCisjZGVmaW5lIFBQQ1IJCQkweDYxMjA0CisjZGVmaW5lIFBQQ1JfT04JCQkoMTw8MCkKKworI2RlZmluZSBEVk9CCQkJMHg2MTE0MAorI2RlZmluZSBEVk9CX09OCQkJKDE8PDMxKQorI2RlZmluZSBEVk9DCQkJMHg2MTE2MAorI2RlZmluZSBEVk9DX09OCQkJKDE8PDMxKQorI2RlZmluZSBMVkRTCQkJMHg2MTE4MAorI2RlZmluZSBMVkRTX09OCQkJKDE8PDMxKQorCisjZGVmaW5lIEFEUEEJCQkweDYxMTAwCisjZGVmaW5lIEFEUEFfRFBNU19NQVNLCQkofigzPDwxMCkpCisjZGVmaW5lIEFEUEFfRFBNU19PTgkJKDA8PDEwKQorI2RlZmluZSBBRFBBX0RQTVNfU1VTUEVORAkoMTw8MTApCisjZGVmaW5lIEFEUEFfRFBNU19TVEFOREJZCSgyPDwxMCkKKyNkZWZpbmUgQURQQV9EUE1TX09GRgkJKDM8PDEwKQorCisjZGVmaW5lIFJJTkdfVEFJTAkJMHgwMAorI2RlZmluZSBUQUlMX0FERFIJCTB4MDAxRkZGRjgKKyNkZWZpbmUgUklOR19IRUFECQkweDA0CisjZGVmaW5lIEhFQURfV1JBUF9DT1VOVAkJMHhGRkUwMDAwMAorI2RlZmluZSBIRUFEX1dSQVBfT05FCQkweDAwMjAwMDAwCisjZGVmaW5lIEhFQURfQUREUgkJMHgwMDFGRkZGQworI2RlZmluZSBSSU5HX1NUQVJUCQkweDA4CisjZGVmaW5lIFNUQVJUX0FERFIJCTB4RkZGRkYwMDAKKyNkZWZpbmUgUklOR19MRU4JCTB4MEMKKyNkZWZpbmUgUklOR19OUl9QQUdFUwkJMHgwMDFGRjAwMAorI2RlZmluZSBSSU5HX1JFUE9SVF9NQVNLCTB4MDAwMDAwMDYKKyNkZWZpbmUgUklOR19SRVBPUlRfNjRLCQkweDAwMDAwMDAyCisjZGVmaW5lIFJJTkdfUkVQT1JUXzEyOEsJMHgwMDAwMDAwNAorI2RlZmluZSBSSU5HX05PX1JFUE9SVAkJMHgwMDAwMDAwMAorI2RlZmluZSBSSU5HX1ZBTElEX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUklOR19WQUxJRAkJMHgwMDAwMDAwMQorI2RlZmluZSBSSU5HX0lOVkFMSUQJCTB4MDAwMDAwMDAKKworLyogU2NyYXRjaCBwYWQgZGVidWcgMCByZWc6CisgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMAkweDAwMWYwMDAwCisvKgorICogVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gTFZEUyBtb2RlLCBkZWZpbmVzIFAxIGFzIHRoZSBiaXQgbnVtYmVyIHNldCB3aXRoaW4KKyAqIHRoaXMgZmllbGQgKG9ubHkgb25lIGJpdCBtYXkgYmUgc2V0KS4KKyAqLworI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwX0xWRFMJMHgwMDNmMDAwMAorI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQJMTYKKy8qIGk4MzAsIHJlcXVpcmVkIGluIERWTyBub24tZ2FuZyAqLworI2RlZmluZSAgIFBMTF9QMl9ESVZJREVfQllfNAkJKDEgPDwgMjMpCisjZGVmaW5lICAgUExMX1AxX0RJVklERV9CWV9UV08JCSgxIDw8IDIxKSAvKiBpODMwICovCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9EUkVGQ0xLCQkoMCA8PCAxMykKKyNkZWZpbmUgICBQTExfUkVGX0lOUFVUX1RWQ0xLSU5BCSgxIDw8IDEzKSAvKiBpODMwICovCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9UVkNMS0lOQkMJKDIgPDwgMTMpIC8qIFNEVk8gVFZDTEtJTiAqLworI2RlZmluZSAgIFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU4gKDMgPDwgMTMpCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9NQVNLCQkoMyA8PCAxMykKKyNkZWZpbmUgICBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVAkJOQorLyoKKyAqIFBhcmFsbGVsIHRvIFNlcmlhbCBMb2FkIFB1bHNlIHBoYXNlIHNlbGVjdGlvbi4KKyAqIFNlbGVjdHMgdGhlIHBoYXNlIGZvciB0aGUgMTBYIERQTEwgY2xvY2sgZm9yIHRoZSBQQ0llCisgKiBkaWdpdGFsIGRpc3BsYXkgcG9ydC4gVGhlIHJhbmdlIGlzIDQgdG8gMTM7IDEwIG9yIG1vcmUKKyAqIGlzIGp1c3QgYSBmbGlwIGRlbGF5LiBUaGUgZGVmYXVsdCBpcyA2CisgKi8KKyNkZWZpbmUgICBQTExfTE9BRF9QVUxTRV9QSEFTRV9NQVNLCQkoMHhmIDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NISUZUKQorI2RlZmluZSAgIERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMQkJKDEgPDwgOCkKKy8qCisgKiBTRFZPIG11bHRpcGxpZXIgZm9yIDk0NUcvR00uIE5vdCB1c2VkIG9uIDk2NS4KKyAqLworI2RlZmluZSAgIFNEVk9fTVVMVElQTElFUl9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSAgIFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUwkJNAorI2RlZmluZSAgIFNEVk9fTVVMVElQTElFUl9TSElGVF9WR0EJCTAKKyNkZWZpbmUgRFBMTF9BX01EIDB4MDYwMWMgLyogOTY1KyBvbmx5ICovCisvKgorICogVURJIHBpeGVsIGRpdmlkZXIsIGNvbnRyb2xsaW5nIGhvdyBtYW55IHBpeGVscyBhcmUgc3R1ZmZlZCBpbnRvIGEgcGFja2V0LgorICoKKyAqIFZhbHVlIGlzIHBpeGVscyBtaW51cyAxLiAgTXVzdCBiZSBzZXQgdG8gMSBwaXhlbCBmb3IgU0RWTy4KKyAqLworI2RlZmluZSAgIERQTExfTURfVURJX0RJVklERVJfTUFTSwkJMHgzZjAwMDAwMAorI2RlZmluZSAgIERQTExfTURfVURJX0RJVklERVJfU0hJRlQJCTI0CisvKiBVREkgcGl4ZWwgZGl2aWRlciBmb3IgVkdBLCBzYW1lIGFzIERQTExfTURfVURJX0RJVklERVJfTUFTSy4gKi8KKyNkZWZpbmUgICBEUExMX01EX1ZHQV9VRElfRElWSURFUl9NQVNLCQkweDAwM2YwMDAwCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfU0hJRlQJCTE2CisvKgorICogU0RWTy9VREkgcGl4ZWwgbXVsdGlwbGllci4KKyAqCisgKiBTRFZPIHJlcXVpcmVzIHRoYXQgdGhlIGJ1cyBjbG9jayByYXRlIGJlIGJldHdlZW4gMSBhbmQgMiBHaHosIGFuZCB0aGUgYnVzCisgKiBjbG9jayByYXRlIGlzIDEwIHRpbWVzIHRoZSBEUExMIGNsb2NrLiAgQXQgbG93IHJlc29sdXRpb24vcmVmcmVzaCByYXRlCisgKiBtb2RlcywgdGhlIGJ1cyByYXRlIHdvdWxkIGJlIGJlbG93IHRoZSBsaW1pdHMsIHNvIFNEVk8gYWxsb3dzIGZvciBzdHVmZmluZworICogZHVtbXkgYnl0ZXMgaW4gdGhlIGRhdGFzdHJlYW0gYXQgYW4gaW5jcmVhc2VkIGNsb2NrIHJhdGUsIHdpdGggYm90aCBzaWRlcyBvZgorICogdGhlIGxpbmsga25vd2luZyBob3cgbWFueSBieXRlcyBhcmUgZmlsbC4KKyAqCisgKiBTbywgZm9yIGEgbW9kZSB3aXRoIGEgZG90Y2xvY2sgb2YgNjVNaHosIHdlIHdvdWxkIHdhbnQgdG8gZG91YmxlIHRoZSBjbG9jaworICogcmF0ZSB0byAxMzBNaHogdG8gZ2V0IGEgYnVzIHJhdGUgb2YgMS4zMEdoei4gIFRoZSBEUExMIGNsb2NrIHJhdGUgd291bGQgYmUKKyAqIHNldCB0byAxMzBNaHosIGFuZCB0aGUgU0RWTyBtdWx0aXBsaWVyIHNldCB0byAyeCBpbiB0aGlzIHJlZ2lzdGVyIGFuZAorICogdGhyb3VnaCBhbiBTRFZPIGNvbW1hbmQuCisgKgorICogVGhpcyByZWdpc3RlciBmaWVsZCBoYXMgdmFsdWVzIG9mIG11bHRpcGxpY2F0aW9uIGZhY3RvciBtaW51cyAxLCB3aXRoCisgKiBhIG1heGltdW0gbXVsdGlwbGllciBvZiA1IGZvciBTRFZPLgorICovCisjZGVmaW5lICAgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLCQkweDAwMDAzZjAwCisjZGVmaW5lICAgRFBMTF9NRF9VRElfTVVMVElQTElFUl9TSElGVAkJOAorLyoKKyAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0suCisgKiBUaGlzIGJlc3QgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlICgzKSBvciB0aGUgQ1JUIHdvbid0IHdvcmsuIE5vLAorICogSSBkb24ndCBlbnRpcmVseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkb2VzLi4uCisgKi8KKyNkZWZpbmUgICBEUExMX01EX1ZHQV9VRElfTVVMVElQTElFUl9NQVNLCTB4MDAwMDAwM2YKKyNkZWZpbmUgICBEUExMX01EX1ZHQV9VRElfTVVMVElQTElFUl9TSElGVAkwCisjZGVmaW5lIERQTExfQl9NRCAweDA2MDIwIC8qIDk2NSsgb25seSAqLworI2RlZmluZSBGUEEwCTB4MDYwNDAKKyNkZWZpbmUgRlBBMQkweDA2MDQ0CisjZGVmaW5lIEZQQjAJMHgwNjA0OAorI2RlZmluZSBGUEIxCTB4MDYwNGMKKyNkZWZpbmUgICBGUF9OX0RJVl9NQVNLCQkweDAwM2YwMDAwCisjZGVmaW5lICAgRlBfTl9ESVZfU0hJRlQJCTE2CisjZGVmaW5lICAgRlBfTTFfRElWX01BU0sJMHgwMDAwM2YwMAorI2RlZmluZSAgIEZQX00xX0RJVl9TSElGVAkJIDgKKyNkZWZpbmUgICBGUF9NMl9ESVZfTUFTSwkweDAwMDAwMDNmCisjZGVmaW5lICAgRlBfTTJfRElWX1NISUZUCQkgMAorI2RlZmluZSBEUExMX1RFU1QJMHg2MDZjCisjZGVmaW5lICAgRFBMTEJfVEVTVF9TRFZPX0RJVl8xCQkoMCA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX1NEVk9fRElWXzIJCSgxIDw8IDIyKQorI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfNAkJKDIgPDwgMjIpCisjZGVmaW5lICAgRFBMTEJfVEVTVF9TRFZPX0RJVl9NQVNLCSgzIDw8IDIyKQorI2RlZmluZSAgIERQTExCX1RFU1RfTl9CWVBBU1MJCSgxIDw8IDE5KQorI2RlZmluZSAgIERQTExCX1RFU1RfTV9CWVBBU1MJCSgxIDw8IDE4KQorI2RlZmluZSAgIERQTExCX0lOUFVUX0JVRkZFUl9FTkFCTEUJKDEgPDwgMTYpCisjZGVmaW5lICAgRFBMTEFfVEVTVF9OX0JZUEFTUwkJKDEgPDwgMykKKyNkZWZpbmUgICBEUExMQV9URVNUX01fQllQQVNTCQkoMSA8PCAyKQorI2RlZmluZSAgIERQTExBX0lOUFVUX0JVRkZFUl9FTkFCTEUJKDEgPDwgMCkKKyNkZWZpbmUgRF9TVEFURQkJMHg2MTA0CisjZGVmaW5lIENHXzJEX0RJUwkweDYyMDAKKyNkZWZpbmUgQ0dfM0RfRElTCTB4NjIwNAorCisvKgorICogUGFsZXR0ZSByZWdzCisgKi8KKworI2RlZmluZSBQQUxFVFRFX0EJCTB4MGEwMDAKKyNkZWZpbmUgUEFMRVRURV9CCQkweDBhODAwCisKKy8qIE1DSCBNTUlPIHNwYWNlICovCisKKy8qCisgKiBNQ0hCQVIgbWlycm9yLgorICoKKyAqIFRoaXMgbWlycm9ycyB0aGUgTUNIQkFSIE1NSU8gc3BhY2Ugd2hvc2UgbG9jYXRpb24gaXMgZGV0ZXJtaW5lZCBieQorICogZGV2aWNlIDAgZnVuY3Rpb24gMCdzIHBjaSBjb25maWcgcmVnaXN0ZXIgMHg0NCBvciAweDQ4IGFuZCBtYXRjaGVzIGl0IGluCisgKiBldmVyeSB3YXkuICBJdCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBDUCByZWdpc3RlciByZWFkIGluc3RydWN0aW9ucy4KKyAqCisgKi8KKyNkZWZpbmUgTUNIQkFSX01JUlJPUl9CQVNFCTB4MTAwMDAKKworLyoqIDkxNS05NDUgYW5kIEdNOTY1IE1DSCByZWdpc3RlciBjb250cm9sbGluZyBEUkFNIGNoYW5uZWwgYWNjZXNzICovCisjZGVmaW5lIERDQwkJCTB4MTAyMDAKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9TSU5HTEVfQ0hBTk5FTAkJKDAgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfQVNZTU1FVFJJQwkoMSA8PCAwKQorI2RlZmluZSBEQ0NfQUREUkVTU0lOR19NT0RFX0RVQUxfQ0hBTk5FTF9JTlRFUkxFQVZFRAkoMiA8PCAwKQorI2RlZmluZSBEQ0NfQUREUkVTU0lOR19NT0RFX01BU0sJCQkoMyA8PCAwKQorI2RlZmluZSBEQ0NfQ0hBTk5FTF9YT1JfRElTQUJMRQkJCQkoMSA8PCAxMCkKKworLyoqIDk2NSBNQ0ggcmVnaXN0ZXIgY29udHJvbGxpbmcgRFJBTSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQzBEUkIzCQkJMHgxMDIwNgorI2RlZmluZSBDMURSQjMJCQkweDEwNjA2CisKKy8qCisgKiBPdmVybGF5IHJlZ3MKKyAqLworCisjZGVmaW5lIE9WQURECQkJMHgzMDAwMAorI2RlZmluZSBET1ZTVEEJCQkweDMwMDA4CisjZGVmaW5lIE9DX0JVRgkJCSgweDM8PDIwKQorI2RlZmluZSBPR0FNQzUJCQkweDMwMDEwCisjZGVmaW5lIE9HQU1DNAkJCTB4MzAwMTQKKyNkZWZpbmUgT0dBTUMzCQkJMHgzMDAxOAorI2RlZmluZSBPR0FNQzIJCQkweDMwMDFjCisjZGVmaW5lIE9HQU1DMQkJCTB4MzAwMjAKKyNkZWZpbmUgT0dBTUMwCQkJMHgzMDAyNAorCisvKgorICogRGlzcGxheSBlbmdpbmUgcmVncworICovCisKKy8qIFBpcGUgQSB0aW1pbmcgcmVncyAqLworI2RlZmluZSBIVE9UQUxfQQkweDYwMDAwCisjZGVmaW5lIEhCTEFOS19BCTB4NjAwMDQKKyNkZWZpbmUgSFNZTkNfQQkJMHg2MDAwOAorI2RlZmluZSBWVE9UQUxfQQkweDYwMDBjCisjZGVmaW5lIFZCTEFOS19BCTB4NjAwMTAKKyNkZWZpbmUgVlNZTkNfQQkJMHg2MDAxNAorI2RlZmluZSBQSVBFQVNSQwkweDYwMDFjCisjZGVmaW5lIEJDTFJQQVRfQQkweDYwMDIwCisKKy8qIFBpcGUgQiB0aW1pbmcgcmVncyAqLworI2RlZmluZSBIVE9UQUxfQgkweDYxMDAwCisjZGVmaW5lIEhCTEFOS19CCTB4NjEwMDQKKyNkZWZpbmUgSFNZTkNfQgkJMHg2MTAwOAorI2RlZmluZSBWVE9UQUxfQgkweDYxMDBjCisjZGVmaW5lIFZCTEFOS19CCTB4NjEwMTAKKyNkZWZpbmUgVlNZTkNfQgkJMHg2MTAxNAorI2RlZmluZSBQSVBFQlNSQwkweDYxMDFjCisjZGVmaW5lIEJDTFJQQVRfQgkweDYxMDIwCisKKy8qIFZHQSBwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQURQQQkJCTB4NjExMDAKKyNkZWZpbmUgICBBRFBBX0RBQ19FTkFCTEUJKDE8PDMxKQorI2RlZmluZSAgIEFEUEFfREFDX0RJU0FCTEUJMAorI2RlZmluZSAgIEFEUEFfUElQRV9TRUxFQ1RfTUFTSwkoMTw8MzApCisjZGVmaW5lICAgQURQQV9QSVBFX0FfU0VMRUNUCTAKKyNkZWZpbmUgICBBRFBBX1BJUEVfQl9TRUxFQ1QJKDE8PDMwKQorI2RlZmluZSAgIEFEUEFfVVNFX1ZHQV9IVlBPTEFSSVRZICgxPDwxNSkKKyNkZWZpbmUgICBBRFBBX1NFVFNfSFZQT0xBUklUWQkwCisjZGVmaW5lICAgQURQQV9WU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDExKQorI2RlZmluZSAgIEFEUEFfVlNZTkNfQ05UTF9FTkFCTEUgMAorI2RlZmluZSAgIEFEUEFfSFNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMCkKKyNkZWZpbmUgICBBRFBBX0hTWU5DX0NOVExfRU5BQkxFIDAKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0FDVElWRV9ISUdIICgxPDw0KQorI2RlZmluZSAgIEFEUEFfVlNZTkNfQUNUSVZFX0xPVwkwCisjZGVmaW5lICAgQURQQV9IU1lOQ19BQ1RJVkVfSElHSCAoMTw8MykKKyNkZWZpbmUgICBBRFBBX0hTWU5DX0FDVElWRV9MT1cJMAorI2RlZmluZSAgIEFEUEFfRFBNU19NQVNLCSh+KDM8PDEwKSkKKyNkZWZpbmUgICBBRFBBX0RQTVNfT04JCSgwPDwxMCkKKyNkZWZpbmUgICBBRFBBX0RQTVNfU1VTUEVORAkoMTw8MTApCisjZGVmaW5lICAgQURQQV9EUE1TX1NUQU5EQlkJKDI8PDEwKQorI2RlZmluZSAgIEFEUEFfRFBNU19PRkYJCSgzPDwxMCkKKworLyogSG90cGx1ZyBjb250cm9sICg5NDUrIG9ubHkpICovCisjZGVmaW5lIFBPUlRfSE9UUExVR19FTgkJMHg2MTExMAorI2RlZmluZSAgIFNEVk9CX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjYpCisjZGVmaW5lICAgU0RWT0NfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAyNSkKKyNkZWZpbmUgICBUVl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDE4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDkpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUCQkoMSA8PCAzKQorCisjZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKKyNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCAxMSkKKyNkZWZpbmUgICBUVl9IT1RQTFVHX0lOVF9TVEFUVVMJCQkoMSA8PCAxMCkKKyNkZWZpbmUgICBDUlRfSE9UUExVR19NT05JVE9SX01BU0sJCSgzIDw8IDgpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9DT0xPUgkJKDMgPDwgOCkKKyNkZWZpbmUgICBDUlRfSE9UUExVR19NT05JVE9SX01PTk8JCSgyIDw8IDgpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9OT05FCQkoMCA8PCA4KQorI2RlZmluZSAgIFNEVk9DX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgNykKKyNkZWZpbmUgICBTRFZPQl9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDYpCisKKy8qIFNEVk8gcG9ydCBjb250cm9sICovCisjZGVmaW5lIFNEVk9CCQkJMHg2MTE0MAorI2RlZmluZSBTRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgICBTRFZPX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgU0RWT19QSVBFX0JfU0VMRUNUCSgxIDw8IDMwKQorI2RlZmluZSAgIFNEVk9fU1RBTExfU0VMRUNUCSgxIDw8IDI5KQorI2RlZmluZSAgIFNEVk9fSU5URVJSVVBUX0VOQUJMRQkoMSA8PCAyNikKKy8qKgorICogOTE1Ry9HTSBTRFZPIHBpeGVsIG11bHRpcGxpZXIuCisgKgorICogUHJvZ3JhbW1lZCB2YWx1ZSBpcyBtdWx0aXBsaWVyIC0gMSwgdXAgdG8gNXguCisgKgorICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSworICovCisjZGVmaW5lICAgU0RWT19QT1JUX01VTFRJUExZX01BU0sJKDcgPDwgMjMpCisjZGVmaW5lICAgU0RWT19QT1JUX01VTFRJUExZX1NISUZUCQkyMworI2RlZmluZSAgIFNEVk9fUEhBU0VfU0VMRUNUX01BU0sJKDE1IDw8IDE5KQorI2RlZmluZSAgIFNEVk9fUEhBU0VfU0VMRUNUX0RFRkFVTFQJKDYgPDwgMTkpCisjZGVmaW5lICAgU0RWT19DTE9DS19PVVRQVVRfSU5WRVJUCSgxIDw8IDE4KQorI2RlZmluZSAgIFNEVk9DX0dBTkdfTU9ERQkJKDEgPDwgMTYpCisjZGVmaW5lICAgU0RWT19CT1JERVJfRU5BQkxFCQkoMSA8PCA3KQorI2RlZmluZSAgIFNEVk9CX1BDSUVfQ09OQ1VSUkVOQ1kJKDEgPDwgMykKKyNkZWZpbmUgICBTRFZPX0RFVEVDVEVECQkJKDEgPDwgMikKKy8qIEJpdHMgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZyAqLworI2RlZmluZSAgIFNEVk9CX1BSRVNFUlZFX01BU0sgKCgxIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgxIDw8IDE0KSB8ICgxIDw8IDI2KSkKKyNkZWZpbmUgICBTRFZPQ19QUkVTRVJWRV9NQVNLICgoMSA8PCAxNykgfCAoMSA8PCAyNikpCisKKy8qIERWTyBwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgRFZPQQkJCTB4NjExMjAKKyNkZWZpbmUgRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgICBEVk9fRU5BQkxFCQkJKDEgPDwgMzEpCisjZGVmaW5lICAgRFZPX1BJUEVfQl9TRUxFQ1QJCSgxIDw8IDMwKQorI2RlZmluZSAgIERWT19QSVBFX1NUQUxMX1VOVVNFRAkJKDAgPDwgMjgpCisjZGVmaW5lICAgRFZPX1BJUEVfU1RBTEwJCSgxIDw8IDI4KQorI2RlZmluZSAgIERWT19QSVBFX1NUQUxMX1RWCQkoMiA8PCAyOCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9NQVNLCQkoMyA8PCAyOCkKKyNkZWZpbmUgICBEVk9fVVNFX1ZHQV9TWU5DCQkoMSA8PCAxNSkKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9JNzQwCQkoMCA8PCAxNCkKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9GUAkJKDEgPDwgMTQpCisjZGVmaW5lICAgRFZPX1ZTWU5DX0RJU0FCTEUJCSgxIDw8IDExKQorI2RlZmluZSAgIERWT19IU1lOQ19ESVNBQkxFCQkoMSA8PCAxMCkKKyNkZWZpbmUgICBEVk9fVlNZTkNfVFJJU1RBVEUJCSgxIDw8IDkpCisjZGVmaW5lICAgRFZPX0hTWU5DX1RSSVNUQVRFCQkoMSA8PCA4KQorI2RlZmluZSAgIERWT19CT1JERVJfRU5BQkxFCQkoMSA8PCA3KQorI2RlZmluZSAgIERWT19EQVRBX09SREVSX0dCUkcJCSgxIDw8IDYpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfUkdHQgkJKDAgPDwgNikKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9HQlJHX0VSUkFUQQkoMCA8PCA2KQorI2RlZmluZSAgIERWT19EQVRBX09SREVSX1JHR0JfRVJSQVRBCSgxIDw8IDYpCisjZGVmaW5lICAgRFZPX1ZTWU5DX0FDVElWRV9ISUdICQkoMSA8PCA0KQorI2RlZmluZSAgIERWT19IU1lOQ19BQ1RJVkVfSElHSAkJKDEgPDwgMykKKyNkZWZpbmUgICBEVk9fQkxBTktfQUNUSVZFX0hJR0gJCSgxIDw8IDIpCisjZGVmaW5lICAgRFZPX09VVFBVVF9DU1RBVEVfUElYRUxTCSgxIDw8IDEpCS8qIFNERyBvbmx5ICovCisjZGVmaW5lICAgRFZPX09VVFBVVF9TT1VSQ0VfU0laRV9QSVhFTFMJKDEgPDwgMCkJLyogU0RHIG9ubHkgKi8KKyNkZWZpbmUgICBEVk9fUFJFU0VSVkVfTUFTSwkJKDB4Nzw8MjQpCisjZGVmaW5lIERWT0FfU1JDRElNCQkweDYxMTI0CisjZGVmaW5lIERWT0JfU1JDRElNCQkweDYxMTQ0CisjZGVmaW5lIERWT0NfU1JDRElNCQkweDYxMTY0CisjZGVmaW5lICAgRFZPX1NSQ0RJTV9IT1JJWk9OVEFMX1NISUZUCTEyCisjZGVmaW5lICAgRFZPX1NSQ0RJTV9WRVJUSUNBTF9TSElGVAkwCisKKy8qIExWRFMgcG9ydCBjb250cm9sICovCisjZGVmaW5lIExWRFMJCQkweDYxMTgwCisvKgorICogRW5hYmxlcyB0aGUgTFZEUyBwb3J0LiAgVGhpcyBiaXQgbXVzdCBiZSBzZXQgYmVmb3JlIERQTExzIGFyZSBlbmFibGVkLCBhcworICogdGhlIERQTEwgc2VtYW50aWNzIGNoYW5nZSB3aGVuIHRoZSBMVkRTIGlzIGFzc2lnbmVkIHRvIHRoYXQgcGlwZS4KKyAqLworI2RlZmluZSAgIExWRFNfUE9SVF9FTgkJCSgxIDw8IDMxKQorLyogU2VsZWN0cyBwaXBlIEIgZm9yIExWRFMgZGF0YS4gIE11c3QgYmUgc2V0IG9uIHByZS05NjUuICovCisjZGVmaW5lICAgTFZEU19QSVBFQl9TRUxFQ1QJCSgxIDw8IDMwKQorLyoKKyAqIEVuYWJsZXMgdGhlIEEwLUEyIGRhdGEgcGFpcnMgYW5kIENMS0EsIGNvbnRhaW5pbmcgMTggYml0cyBvZiBjb2xvciBkYXRhIHBlcgorICogcGl4ZWwuCisgKi8KKyNkZWZpbmUgICBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9NQVNLCSgzIDw8IDgpCisjZGVmaW5lICAgTFZEU19BMEEyX0NMS0FfUE9XRVJfRE9XTgkoMCA8PCA4KQorI2RlZmluZSAgIExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQCSgzIDw8IDgpCisvKgorICogQ29udHJvbHMgdGhlIEEzIGRhdGEgcGFpciwgd2hpY2ggY29udGFpbnMgdGhlIGFkZGl0aW9uYWwgTFNCcyBmb3IgMjQgYml0CisgKiBtb2RlLiAgT25seSBlbmFibGVkIGlmIExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIGFsc28gaW5kaWNhdGVzIGl0IHNob3VsZCBiZQorICogb24uCisgKi8KKyNkZWZpbmUgICBMVkRTX0EzX1BPV0VSX01BU0sJCSgzIDw8IDYpCisjZGVmaW5lICAgTFZEU19BM19QT1dFUl9ET1dOCQkoMCA8PCA2KQorI2RlZmluZSAgIExWRFNfQTNfUE9XRVJfVVAJCSgzIDw8IDYpCisvKgorICogQ29udHJvbHMgdGhlIENMS0IgcGFpci4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHdoZW4gTFZEU19CMEIzX1BPV0VSX1VQCisgKiBpcyBzZXQuCisgKi8KKyNkZWZpbmUgICBMVkRTX0NMS0JfUE9XRVJfTUFTSwkJKDMgPDwgNCkKKyNkZWZpbmUgICBMVkRTX0NMS0JfUE9XRVJfRE9XTgkJKDAgPDwgNCkKKyNkZWZpbmUgICBMVkRTX0NMS0JfUE9XRVJfVVAJCSgzIDw8IDQpCisvKgorICogQ29udHJvbHMgdGhlIEIwLUIzIGRhdGEgcGFpcnMuICBUaGlzIG11c3QgYmUgc2V0IHRvIG1hdGNoIHRoZSBEUExMIHAyCisgKiBzZXR0aW5nIGZvciB3aGV0aGVyIHdlIGFyZSBpbiBkdWFsLWNoYW5uZWwgbW9kZS4gIFRoZSBCMyBwYWlyIHdpbGwKKyAqIGFkZGl0aW9uYWxseSBvbmx5IGJlIHBvd2VyZWQgdXAgd2hlbiBMVkRTX0EzX1BPV0VSX1VQIGlzIHNldC4KKyAqLworI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9NQVNLCQkoMyA8PCAyKQorI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9ET1dOCQkoMCA8PCAyKQorI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9VUAkJKDMgPDwgMikKKworLyogUGFuZWwgcG93ZXIgc2VxdWVuY2luZyAqLworI2RlZmluZSBQUF9TVEFUVVMJMHg2MTIwMAorI2RlZmluZSAgIFBQX09OCQkoMSA8PCAzMSkKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYW5lbCBhcmUgb246CisgKgorICogLSBQTEwgZW5hYmxlZAorICogLSBwaXBlIGVuYWJsZWQKKyAqIC0gTFZEUy9EVk9CL0RWT0Mgb24KKyAqLworI2RlZmluZSAgIFBQX1JFQURZCQkoMSA8PCAzMCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9OT05FCSgwIDw8IDI4KQorI2RlZmluZSAgIFBQX1NFUVVFTkNFX09OCSgxIDw8IDI4KQorI2RlZmluZSAgIFBQX1NFUVVFTkNFX09GRgkoMiA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9NQVNLCTB4MzAwMDAwMDAKKyNkZWZpbmUgUFBfQ09OVFJPTAkweDYxMjA0CisjZGVmaW5lICAgUE9XRVJfVEFSR0VUX09OCSgxIDw8IDApCisjZGVmaW5lIFBQX09OX0RFTEFZUwkweDYxMjA4CisjZGVmaW5lIFBQX09GRl9ERUxBWVMJMHg2MTIwYworI2RlZmluZSBQUF9ESVZJU09SCTB4NjEyMTAKKworLyogUGFuZWwgZml0dGluZyAqLworI2RlZmluZSBQRklUX0NPTlRST0wJMHg2MTIzMAorI2RlZmluZSAgIFBGSVRfRU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgICBQRklUX1BJUEVfTUFTSwkoMyA8PCAyOSkKKyNkZWZpbmUgICBQRklUX1BJUEVfU0hJRlQJMjkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9ESVNBQkxFCSgwIDw8IDEwKQorI2RlZmluZSAgIFZFUlRfSU5URVJQX0JJTElORUFSCSgxIDw8IDEwKQorI2RlZmluZSAgIFZFUlRfSU5URVJQX01BU0sJKDMgPDwgMTApCisjZGVmaW5lICAgVkVSVF9BVVRPX1NDQUxFCSgxIDw8IDkpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX0RJU0FCTEUJKDAgPDwgNikKKyNkZWZpbmUgICBIT1JJWl9JTlRFUlBfQklMSU5FQVIJKDEgPDwgNikKKyNkZWZpbmUgICBIT1JJWl9JTlRFUlBfTUFTSwkoMyA8PCA2KQorI2RlZmluZSAgIEhPUklaX0FVVE9fU0NBTEUJKDEgPDwgNSkKKyNkZWZpbmUgICBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEUgKDEgPDwgMykKKyNkZWZpbmUgUEZJVF9QR01fUkFUSU9TCTB4NjEyMzQKKyNkZWZpbmUgICBQRklUX1ZFUlRfU0NBTEVfTUFTSwkJCTB4ZmZmMDAwMDAKKyNkZWZpbmUgICBQRklUX0hPUklaX1NDQUxFX01BU0sJCQkweDAwMDBmZmYwCisjZGVmaW5lIFBGSVRfQVVUT19SQVRJT1MgMHg2MTIzOAorCisvKiBCYWNrbGlnaHQgY29udHJvbCAqLworI2RlZmluZSBCTENfUFdNX0NUTAkJMHg2MTI1NAorI2RlZmluZSAgIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQJCSgxNykKKyNkZWZpbmUgQkxDX1BXTV9DVEwyCQkweDYxMjUwIC8qIDk2NSsgb25seSAqLworI2RlZmluZSAgIEJMTV9DT01CSU5BVElPTl9NT0RFICgxIDw8IDMwKQorLyoKKyAqIFRoaXMgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMTUgYml0cyBvZiB0aGUgbnVtYmVyIG9mIGJhY2tsaWdodCBjeWNsZXMgaW4gYQorICogY29tcGxldGUgY3ljbGUgb2YgdGhlIG1vZHVsYXRlZCBiYWNrbGlnaHQgY29udHJvbC4KKyAqCisgKiBUaGUgYWN0dWFsIHZhbHVlIGlzIHRoaXMgZmllbGQgbXVsdGlwbGllZCBieSB0d28uCisgKi8KKyNkZWZpbmUgICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX01BU0sJCSgweDdmZmYgPDwgMTcpCisjZGVmaW5lICAgQkxNX0xFR0FDWV9NT0RFCQkJCSgxIDw8IDE2KQorLyoKKyAqIFRoaXMgaXMgdGhlIG51bWJlciBvZiBjeWNsZXMgb3V0IG9mIHRoZSBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZSBmb3Igd2hpY2gKKyAqIHRoZSBiYWNrbGlnaHQgaXMgb24uCisgKgorICogVGhpcyBmaWVsZCBtdXN0IGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBpbiB0aGUgY29tcGxldGUKKyAqIGJhY2tsaWdodCBtb2R1bGF0aW9uIGN5Y2xlLgorICovCisjZGVmaW5lICAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfU0hJRlQJCSgwKQorI2RlZmluZSAgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0sJCSgweGZmZmYpCisKKy8qIFRWIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBUVl9DVEwJCQkweDY4MDAwCisvKiogRW5hYmxlcyB0aGUgVFYgZW5jb2RlciAqLworIyBkZWZpbmUgVFZfRU5DX0VOQUJMRQkJCSgxIDw8IDMxKQorLyoqIFNvdXJjZXMgdGhlIFRWIGVuY29kZXIgaW5wdXQgZnJvbSBwaXBlIEIgaW5zdGVhZCBvZiBBLiAqLworIyBkZWZpbmUgVFZfRU5DX1BJUEVCX1NFTEVDVAkJKDEgPDwgMzApCisvKiogT3V0cHV0cyBjb21wb3NpdGUgdmlkZW8gKERBQyBBIG9ubHkpICovCisjIGRlZmluZSBUVl9FTkNfT1VUUFVUX0NPTVBPU0lURQkoMCA8PCAyOCkKKy8qKiBPdXRwdXRzIFNWaWRlbyB2aWRlbyAoREFDIEIvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfU1ZJREVPCQkoMSA8PCAyOCkKKy8qKiBPdXRwdXRzIENvbXBvbmVudCB2aWRlbyAoREFDIEEvQi9DKSAqLworIyBkZWZpbmUgVFZfRU5DX09VVFBVVF9DT01QT05FTlQJKDIgPDwgMjgpCisvKiogT3V0cHV0cyBDb21wb3NpdGUgYW5kIFNWaWRlbyAoREFDIEEvQi9DKSAqLworIyBkZWZpbmUgVFZfRU5DX09VVFBVVF9TVklERU9fQ09NUE9TSVRFCSgzIDw8IDI4KQorIyBkZWZpbmUgVFZfVFJJTEVWRUxfU1lOQwkJKDEgPDwgMjEpCisvKiogRW5hYmxlcyBzbG93IHN5bmMgZ2VuZXJhdGlvbiAoOTQ1R00gb25seSkgKi8KKyMgZGVmaW5lIFRWX1NMT1dfU1lOQwkJCSgxIDw8IDIwKQorLyoqIFNlbGVjdHMgNHggb3ZlcnNhbXBsaW5nIGZvciA0ODBpIGFuZCA1NzZwICovCisjIGRlZmluZSBUVl9PVkVSU0FNUExFXzRYCQkoMCA8PCAxOCkKKy8qKiBTZWxlY3RzIDJ4IG92ZXJzYW1wbGluZyBmb3IgNzIwcCBhbmQgMTA4MGkgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfMlgJCSgxIDw8IDE4KQorLyoqIFNlbGVjdHMgbm8gb3ZlcnNhbXBsaW5nIGZvciAxMDgwcCAqLworIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV9OT05FCQkoMiA8PCAxOCkKKy8qKiBTZWxlY3RzIDh4IG92ZXJzYW1wbGluZyAqLworIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV84WAkJKDMgPDwgMTgpCisvKiogU2VsZWN0cyBwcm9ncmVzc2l2ZSBtb2RlIHJhdGhlciB0aGFuIGludGVybGFjZWQgKi8KKyMgZGVmaW5lIFRWX1BST0dSRVNTSVZFCQkJKDEgPDwgMTcpCisvKiogU2V0cyB0aGUgY29sb3JidXJzdCB0byBQQUwgbW9kZS4gIFJlcXVpcmVkIGZvciBub24tTSBQQUwgbW9kZXMuICovCisjIGRlZmluZSBUVl9QQUxfQlVSU1QJCQkoMSA8PCAxNikKKy8qKiBGaWVsZCBmb3Igc2V0dGluZyBkZWxheSBvZiBZIGNvbXBhcmVkIHRvIEMgKi8KKyMgZGVmaW5lIFRWX1lDX1NLRVdfTUFTSwkJKDcgPDwgMTIpCisvKiogRW5hYmxlcyBhIGZpeCBmb3IgNDgwcC81NzZwIHN0YW5kYXJkIGRlZmluaXRpb24gbW9kZXMgb24gdGhlIDkxNUdNIG9ubHkgKi8KKyMgZGVmaW5lIFRWX0VOQ19TRFBfRklYCQkJKDEgPDwgMTEpCisvKioKKyAqIEVuYWJsZXMgYSBmaXggZm9yIHRoZSA5MTVHTSBvbmx5LgorICoKKyAqIE5vdCBzdXJlIHdoYXQgaXQgZG9lcy4KKyAqLworIyBkZWZpbmUgVFZfRU5DX0MwX0ZJWAkJCSgxIDw8IDEwKQorLyoqIEJpdHMgdGhhdCBtdXN0IGJlIHByZXNlcnZlZCBieSBzb2Z0d2FyZSAqLworIyBkZWZpbmUgVFZfQ1RMX1NBVkUJCQkoKDMgPDwgOCkgfCAoMyA8PCA2KSkKKyMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfTUFTSwkJKDMgPDwgNCkKKy8qKiBSZWFkLW9ubHkgc3RhdGUgdGhhdCByZXBvcnRzIGFsbCBmZWF0dXJlcyBlbmFibGVkICovCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX0VOQUJMRUQJCSgwIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyB0aGF0IE1hY3JvdmlzaW9uIGlzIGRpc2FibGVkIGluIGhhcmR3YXJlKi8KKyMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfTk9fTUFDUk9WSVNJT04JKDEgPDwgNCkKKy8qKiBSZWFkLW9ubHkgc3RhdGUgdGhhdCByZXBvcnRzIHRoYXQgVFYtb3V0IGlzIGRpc2FibGVkIGluIGhhcmR3YXJlLiAqLworIyBkZWZpbmUgVFZfRlVTRV9TVEFURV9ESVNBQkxFRAkJKDIgPDwgNCkKKy8qKiBOb3JtYWwgb3BlcmF0aW9uICovCisjIGRlZmluZSBUVl9URVNUX01PREVfTk9STUFMCQkoMCA8PCAwKQorLyoqIEVuY29kZXIgdGVzdCBwYXR0ZXJuIDEgLSBjb21ibyBwYXR0ZXJuICovCisjIGRlZmluZSBUVl9URVNUX01PREVfUEFUVEVSTl8xCQkoMSA8PCAwKQorLyoqIEVuY29kZXIgdGVzdCBwYXR0ZXJuIDIgLSBmdWxsIHNjcmVlbiB2ZXJ0aWNhbCA3NSUgY29sb3IgYmFycyAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fMgkJKDIgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAzIC0gZnVsbCBzY3JlZW4gaG9yaXpvbnRhbCA3NSUgY29sb3IgYmFycyAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fMwkJKDMgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiA0IC0gcmFuZG9tIG5vaXNlICovCisjIGRlZmluZSBUVl9URVNUX01PREVfUEFUVEVSTl80CQkoNCA8PCAwKQorLyoqIEVuY29kZXIgdGVzdCBwYXR0ZXJuIDUgLSBsaW5lYXIgY29sb3IgcmFtcHMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzUJCSg1IDw8IDApCisvKioKKyAqIFRoaXMgdGVzdCBtb2RlIGZvcmNlcyB0aGUgREFDcyB0byA1MCUgb2YgZnVsbCBvdXRwdXQuCisgKgorICogVGhpcyBpcyB1c2VkIGZvciBsb2FkIGRldGVjdGlvbiBpbiBjb21iaW5hdGlvbiB3aXRoIFRWREFDX1NFTlNFX01BU0sKKyAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX01PTklUT1JfREVURUNUCSg3IDw8IDApCisjIGRlZmluZSBUVl9URVNUX01PREVfTUFTSwkJKDcgPDwgMCkKKworI2RlZmluZSBUVl9EQUMJCQkweDY4MDA0CisvKioKKyAqIFJlcG9ydHMgdGhhdCBEQUMgc3RhdGUgY2hhbmdlIGxvZ2ljIGhhcyByZXBvcnRlZCBjaGFuZ2UgKFJPKS4KKyAqCisgKiBUaGlzIGdldHMgY2xlYXJlZCB3aGVuIFRWX0RBQ19TVEFURV9FTiBpcyBjbGVhcmVkCisqLworIyBkZWZpbmUgVFZEQUNfU1RBVEVfQ0hHCQkoMSA8PCAzMSkKKyMgZGVmaW5lIFRWREFDX1NFTlNFX01BU0sJCSg3IDw8IDI4KQorLyoqIFJlcG9ydHMgdGhhdCBEQUMgQSB2b2x0YWdlIGlzIGFib3ZlIHRoZSBkZXRlY3QgdGhyZXNob2xkICovCisjIGRlZmluZSBUVkRBQ19BX1NFTlNFCQkJKDEgPDwgMzApCisvKiogUmVwb3J0cyB0aGF0IERBQyBCIHZvbHRhZ2UgaXMgYWJvdmUgdGhlIGRldGVjdCB0aHJlc2hvbGQgKi8KKyMgZGVmaW5lIFRWREFDX0JfU0VOU0UJCQkoMSA8PCAyOSkKKy8qKiBSZXBvcnRzIHRoYXQgREFDIEMgdm9sdGFnZSBpcyBhYm92ZSB0aGUgZGV0ZWN0IHRocmVzaG9sZCAqLworIyBkZWZpbmUgVFZEQUNfQ19TRU5TRQkJCSgxIDw8IDI4KQorLyoqCisgKiBFbmFibGVzIERBQyBzdGF0ZSBkZXRlY3Rpb24gbG9naWMsIGZvciBsb2FkLWJhc2VkIFRWIGRldGVjdGlvbi4KKyAqCisgKiBUaGUgUExMIG9mIHRoZSBjaG9zZW4gcGlwZSAoaW4gVFZfQ1RMKSBtdXN0IGJlIHJ1bm5pbmcsIGFuZCB0aGUgZW5jb2RlciBzZXQKKyAqIHRvIG9mZiwgZm9yIGxvYWQgZGV0ZWN0aW9uIHRvIHdvcmsuCisgKi8KKyMgZGVmaW5lIFRWREFDX1NUQVRFX0NIR19FTgkJKDEgPDwgMjcpCisvKiogU2V0cyB0aGUgREFDIEEgc2Vuc2UgdmFsdWUgdG8gaGlnaCAqLworIyBkZWZpbmUgVFZEQUNfQV9TRU5TRV9DVEwJCSgxIDw8IDI2KQorLyoqIFNldHMgdGhlIERBQyBCIHNlbnNlIHZhbHVlIHRvIGhpZ2ggKi8KKyMgZGVmaW5lIFRWREFDX0JfU0VOU0VfQ1RMCQkoMSA8PCAyNSkKKy8qKiBTZXRzIHRoZSBEQUMgQyBzZW5zZSB2YWx1ZSB0byBoaWdoICovCisjIGRlZmluZSBUVkRBQ19DX1NFTlNFX0NUTAkJKDEgPDwgMjQpCisvKiogT3ZlcnJpZGVzIHRoZSBFTkNfRU5BQkxFIGFuZCBEQUMgdm9sdGFnZSBsZXZlbHMgKi8KKyMgZGVmaW5lIERBQ19DVExfT1ZFUlJJREUJCSgxIDw8IDcpCisvKiogU2V0cyB0aGUgc2xldyByYXRlLiAgTXVzdCBiZSBwcmVzZXJ2ZWQgaW4gc29mdHdhcmUgKi8KKyMgZGVmaW5lIEVOQ19UVkRBQ19TTEVXX0ZBU1QJCSgxIDw8IDYpCisjIGRlZmluZSBEQUNfQV8xXzNfVgkJCSgwIDw8IDQpCisjIGRlZmluZSBEQUNfQV8xXzFfVgkJCSgxIDw8IDQpCisjIGRlZmluZSBEQUNfQV8wXzdfVgkJCSgyIDw8IDQpCisjIGRlZmluZSBEQUNfQV9PRkYJCQkoMyA8PCA0KQorIyBkZWZpbmUgREFDX0JfMV8zX1YJCQkoMCA8PCAyKQorIyBkZWZpbmUgREFDX0JfMV8xX1YJCQkoMSA8PCAyKQorIyBkZWZpbmUgREFDX0JfMF83X1YJCQkoMiA8PCAyKQorIyBkZWZpbmUgREFDX0JfT0ZGCQkJKDMgPDwgMikKKyMgZGVmaW5lIERBQ19DXzFfM19WCQkJKDAgPDwgMCkKKyMgZGVmaW5lIERBQ19DXzFfMV9WCQkJKDEgPDwgMCkKKyMgZGVmaW5lIERBQ19DXzBfN19WCQkJKDIgPDwgMCkKKyMgZGVmaW5lIERBQ19DX09GRgkJCSgzIDw8IDApCisKKy8qKgorICogQ1NDIGNvZWZmaWNpZW50cyBhcmUgc3RvcmVkIGluIGEgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IHdpdGggOSBiaXRzIG9mCisgKiBtYW50aXNzYSBhbmQgMiBvciAzIGJpdHMgb2YgZXhwb25lbnQuICBUaGUgZXhwb25lbnQgaXMgcmVwcmVzZW50ZWQgYXMgMioqLW4sCisgKiB3aGVyZSAyLWJpdCBleHBvbmVudHMgYXJlIHVuc2lnbmVkIG4sIGFuZCAzLWJpdCBleHBvbmVudHMgYXJlIHNpZ25lZCBuIHdpdGgKKyAqIC0xICgweDMpIGJlaW5nIHRoZSBvbmx5IGxlZ2FsIG5lZ2F0aXZlIHZhbHVlLgorICovCisjZGVmaW5lIFRWX0NTQ19ZCQkweDY4MDEwCisjIGRlZmluZSBUVl9SWV9NQVNLCQkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfUllfU0hJRlQJCQkxNgorIyBkZWZpbmUgVFZfR1lfTUFTSwkJCTB4MDAwMDBmZmYKKyMgZGVmaW5lIFRWX0dZX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19ZMgkJMHg2ODAxNAorIyBkZWZpbmUgVFZfQllfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX0JZX1NISUZUCQkJMTYKKy8qKgorICogWSBhdHRlbnVhdGlvbiBmb3IgY29tcG9uZW50IHZpZGVvLgorICoKKyAqIFN0b3JlZCBpbiAxLjkgZml4ZWQgcG9pbnQuCisgKi8KKyMgZGVmaW5lIFRWX0FZX01BU0sJCQkweDAwMDAwM2ZmCisjIGRlZmluZSBUVl9BWV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DU0NfVQkJMHg2ODAxOAorIyBkZWZpbmUgVFZfUlVfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX1JVX1NISUZUCQkJMTYKKyMgZGVmaW5lIFRWX0dVX01BU0sJCQkweDAwMDAwN2ZmCisjIGRlZmluZSBUVl9HVV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DU0NfVTIJCTB4NjgwMWMKKyMgZGVmaW5lIFRWX0JVX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9CVV9TSElGVAkJCTE2CisvKioKKyAqIFUgYXR0ZW51YXRpb24gZm9yIGNvbXBvbmVudCB2aWRlby4KKyAqCisgKiBTdG9yZWQgaW4gMS45IGZpeGVkIHBvaW50LgorICovCisjIGRlZmluZSBUVl9BVV9NQVNLCQkJMHgwMDAwMDNmZgorIyBkZWZpbmUgVFZfQVVfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1YJCTB4NjgwMjAKKyMgZGVmaW5lIFRWX1JWX01BU0sJCQkweDBmZmYwMDAwCisjIGRlZmluZSBUVl9SVl9TSElGVAkJCTE2CisjIGRlZmluZSBUVl9HVl9NQVNLCQkJMHgwMDAwMDdmZgorIyBkZWZpbmUgVFZfR1ZfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1YyCQkweDY4MDI0CisjIGRlZmluZSBUVl9CVl9NQVNLCQkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfQlZfU0hJRlQJCQkxNgorLyoqCisgKiBWIGF0dGVudWF0aW9uIGZvciBjb21wb25lbnQgdmlkZW8uCisgKgorICogU3RvcmVkIGluIDEuOSBmaXhlZCBwb2ludC4KKyAqLworIyBkZWZpbmUgVFZfQVZfTUFTSwkJCTB4MDAwMDA3ZmYKKyMgZGVmaW5lIFRWX0FWX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NMUl9LTk9CUwkJMHg2ODAyOAorLyoqIDJzLWNvbXBsZW1lbnQgYnJpZ2h0bmVzcyBhZGp1c3RtZW50ICovCisjIGRlZmluZSBUVl9CUklHSFRORVNTX01BU0sJCTB4ZmYwMDAwMDAKKyMgZGVmaW5lIFRWX0JSSUdIVE5FU1NfU0hJRlQJCTI0CisvKiogQ29udHJhc3QgYWRqdXN0bWVudCwgYXMgYSAyLjYgdW5zaWduZWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyICovCisjIGRlZmluZSBUVl9DT05UUkFTVF9NQVNLCQkweDAwZmYwMDAwCisjIGRlZmluZSBUVl9DT05UUkFTVF9TSElGVAkJMTYKKy8qKiBTYXR1cmF0aW9uIGFkanVzdG1lbnQsIGFzIGEgMi42IHVuc2lnbmVkIGZsb2F0aW5nIHBvaW50IG51bWJlciAqLworIyBkZWZpbmUgVFZfU0FUVVJBVElPTl9NQVNLCQkweDAwMDBmZjAwCisjIGRlZmluZSBUVl9TQVRVUkFUSU9OX1NISUZUCQk4CisvKiogSHVlIGFkanVzdG1lbnQsIGFzIGFuIGludGVnZXIgcGhhc2UgYW5nbGUgaW4gZGVncmVlcyAqLworIyBkZWZpbmUgVFZfSFVFX01BU0sJCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9IVUVfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ0xSX0xFVkVMCQkweDY4MDJjCisvKiogQ29udHJvbHMgdGhlIERBQyBsZXZlbCBmb3IgYmxhY2sgKi8KKyMgZGVmaW5lIFRWX0JMQUNLX0xFVkVMX01BU0sJCTB4MDFmZjAwMDAKKyMgZGVmaW5lIFRWX0JMQUNLX0xFVkVMX1NISUZUCQkxNgorLyoqIENvbnRyb2xzIHRoZSBEQUMgbGV2ZWwgZm9yIGJsYW5raW5nICovCisjIGRlZmluZSBUVl9CTEFOS19MRVZFTF9NQVNLCQkweDAwMDAwMWZmCisjIGRlZmluZSBUVl9CTEFOS19MRVZFTF9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfQ1RMXzEJCTB4NjgwMzAKKy8qKiBOdW1iZXIgb2YgcGl4ZWxzIGluIHRoZSBoc3luYy4gKi8KKyMgZGVmaW5lIFRWX0hTWU5DX0VORF9NQVNLCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9IU1lOQ19FTkRfU0hJRlQJCTE2CisvKiogVG90YWwgbnVtYmVyIG9mIHBpeGVscyBtaW51cyBvbmUgaW4gdGhlIGxpbmUgKGRpc3BsYXkgYW5kIGJsYW5raW5nKS4gKi8KKyMgZGVmaW5lIFRWX0hUT1RBTF9NQVNLCQkJMHgwMDAwMWZmZgorIyBkZWZpbmUgVFZfSFRPVEFMX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfSF9DVExfMgkJMHg2ODAzNAorLyoqIEVuYWJsZXMgdGhlIGNvbG9yYnVyc3QgKG5lZWRlZCBmb3Igbm9uLWNvbXBvbmVudCBjb2xvcikgKi8KKyMgZGVmaW5lIFRWX0JVUlNUX0VOQQkJCSgxIDw8IDMxKQorLyoqIE9mZnNldCBvZiB0aGUgY29sb3JidXJzdCBmcm9tIHRoZSBzdGFydCBvZiBoc3luYywgaW4gcGl4ZWxzIG1pbnVzIG9uZS4gKi8KKyMgZGVmaW5lIFRWX0hCVVJTVF9TVEFSVF9TSElGVAkJMTYKKyMgZGVmaW5lIFRWX0hCVVJTVF9TVEFSVF9NQVNLCQkweDFmZmYwMDAwCisvKiogTGVuZ3RoIG9mIHRoZSBjb2xvcmJ1cnN0ICovCisjIGRlZmluZSBUVl9IQlVSU1RfTEVOX1NISUZUCQkwCisjIGRlZmluZSBUVl9IQlVSU1RfTEVOX01BU0sJCTB4MDAwMWZmZgorCisjZGVmaW5lIFRWX0hfQ1RMXzMJCTB4NjgwMzgKKy8qKiBFbmQgb2YgaGJsYW5rLCBtZWFzdXJlZCBpbiBwaXhlbHMgbWludXMgb25lIGZyb20gc3RhcnQgb2YgaHN5bmMgKi8KKyMgZGVmaW5lIFRWX0hCTEFOS19FTkRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9IQkxBTktfRU5EX01BU0sJCTB4MWZmZjAwMDAKKy8qKiBTdGFydCBvZiBoYmxhbmssIG1lYXN1cmVkIGluIHBpeGVscyBtaW51cyBvbmUgZnJvbSBzdGFydCBvZiBoc3luYyAqLworIyBkZWZpbmUgVFZfSEJMQU5LX1NUQVJUX1NISUZUCQkwCisjIGRlZmluZSBUVl9IQkxBTktfU1RBUlRfTUFTSwkJMHgwMDAxZmZmCisKKyNkZWZpbmUgVFZfVl9DVExfMQkJMHg2ODAzYworLyoqIFhYWCAqLworIyBkZWZpbmUgVFZfTkJSX0VORF9TSElGVAkJMTYKKyMgZGVmaW5lIFRWX05CUl9FTkRfTUFTSwkJMHgwN2ZmMDAwMAorLyoqIFhYWCAqLworIyBkZWZpbmUgVFZfVklfRU5EX0YxX1NISUZUCQk4CisjIGRlZmluZSBUVl9WSV9FTkRfRjFfTUFTSwkJMHgwMDAwM2YwMAorLyoqIFhYWCAqLworIyBkZWZpbmUgVFZfVklfRU5EX0YyX1NISUZUCQkwCisjIGRlZmluZSBUVl9WSV9FTkRfRjJfTUFTSwkJMHgwMDAwMDAzZgorCisjZGVmaW5lIFRWX1ZfQ1RMXzIJCTB4NjgwNDAKKy8qKiBMZW5ndGggb2YgdnN5bmMsIGluIGhhbGYgbGluZXMgKi8KKyMgZGVmaW5lIFRWX1ZTWU5DX0xFTl9NQVNLCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9WU1lOQ19MRU5fU0hJRlQJCTE2CisvKiogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB2c3luYyBpbiBmaWVsZCAxLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YxX01BU0sJCTB4MDAwMDdmMDAKKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YxX1NISUZUCTgKKy8qKgorICogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB2c3luYyBpbiBmaWVsZCAyLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YyX01BU0sJCTB4MDAwMDAwN2YKKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YyX1NISUZUCTAKKworI2RlZmluZSBUVl9WX0NUTF8zCQkweDY4MDQ0CisvKiogRW5hYmxlcyBnZW5lcmF0aW9uIG9mIHRoZSBlcXVhbGl6YXRpb24gc2lnbmFsICovCisjIGRlZmluZSBUVl9FUVVBTF9FTkEJCQkoMSA8PCAzMSkKKy8qKiBMZW5ndGggb2YgdnN5bmMsIGluIGhhbGYgbGluZXMgKi8KKyMgZGVmaW5lIFRWX1ZFUV9MRU5fTUFTSwkJMHgwMDdmMDAwMAorIyBkZWZpbmUgVFZfVkVRX0xFTl9TSElGVAkJMTYKKy8qKiBPZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIGVxdWFsaXphdGlvbiBpbiBmaWVsZCAxLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuCisgKiB0aGUgbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMV9NQVNLCQkweDAwMDdmMDAKKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMV9TSElGVAkJOAorLyoqCisgKiBPZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIGVxdWFsaXphdGlvbiBpbiBmaWVsZCAyLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuCisgKiB0aGUgbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMl9NQVNLCQkweDAwMDAwN2YKKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMl9TSElGVAkJMAorCisjZGVmaW5lIFRWX1ZfQ1RMXzQJCTB4NjgwNDgKKy8qKgorICogT2Zmc2V0IHRvIHN0YXJ0IG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB2ZXJ0aWNhbCBzdGFydC4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YxX01BU0sJMHgwMDNmMDAwMAorIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YxX1NISUZUCTE2CisvKioKKyAqIE9mZnNldCB0byB0aGUgZW5kIG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgTkJSLgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YxX01BU0sJCTB4MDAwMDAwZmYKKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjFfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF81CQkweDY4MDRjCisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMl9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMl9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMl9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YyX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfVl9DVExfNgkJMHg2ODA1MAorLyoqCisgKiBPZmZzZXQgdG8gc3RhcnQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHZlcnRpY2FsIHN0YXJ0LgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjNfTUFTSwkweDAwM2YwMDAwCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjNfU0hJRlQJMTYKKy8qKgorICogT2Zmc2V0IHRvIHRoZSBlbmQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSBzdGFydCBvZiBOQlIuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjNfTUFTSwkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GM19TSElGVAkJMAorCisjZGVmaW5lIFRWX1ZfQ1RMXzcJCTB4NjgwNTQKKy8qKgorICogT2Zmc2V0IHRvIHN0YXJ0IG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB2ZXJ0aWNhbCBzdGFydC4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0Y0X01BU0sJMHgwMDNmMDAwMAorIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0Y0X1NISUZUCTE2CisvKioKKyAqIE9mZnNldCB0byB0aGUgZW5kIG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgTkJSLgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0Y0X01BU0sJCTB4MDAwMDAwZmYKKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjRfU0hJRlQJCTAKKworI2RlZmluZSBUVl9TQ19DVExfMQkJMHg2ODA2MAorLyoqIFR1cm5zIG9uIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ19EREExX0VOCQkJKDEgPDwgMzEpCisvKiogVHVybnMgb24gdGhlIGZpcnN0IHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDX0REQTJfRU4JCQkoMSA8PCAzMCkKKy8qKiBUdXJucyBvbiB0aGUgZmlyc3Qgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NfRERBM19FTgkJCSgxIDw8IDI5KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBvdGhlciBmaWVsZCAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfRVZFUllfMgkJKDAgPDwgMjQpCisvKiogU2V0cyB0aGUgc3ViY2FycmllciBEREEgdG8gcmVzZXQgZnJlcXVlbmN5IGV2ZXJ5IGZvdXJ0aCBmaWVsZCAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfRVZFUllfNAkJKDEgPDwgMjQpCisvKiogU2V0cyB0aGUgc3ViY2FycmllciBEREEgdG8gcmVzZXQgZnJlcXVlbmN5IGV2ZXJ5IGVpZ2h0aCBmaWVsZCAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfRVZFUllfOAkJKDIgPDwgMjQpCisvKiogU2V0cyB0aGUgc3ViY2FycmllciBEREEgdG8gbmV2ZXIgcmVzZXQgdGhlIGZyZXF1ZW5jeSAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfTkVWRVIJCSgzIDw8IDI0KQorLyoqIFNldHMgdGhlIHBlYWsgYW1wbGl0dWRlIG9mIHRoZSBjb2xvcmJ1cnN0LiovCisjIGRlZmluZSBUVl9CVVJTVF9MRVZFTF9NQVNLCQkweDAwZmYwMDAwCisjIGRlZmluZSBUVl9CVVJTVF9MRVZFTF9TSElGVAkJMTYKKy8qKiBTZXRzIHRoZSBpbmNyZW1lbnQgb2YgdGhlIGZpcnN0IHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBMV9JTkNfTUFTSwkJMHgwMDAwMGZmZgorIyBkZWZpbmUgVFZfU0NEREExX0lOQ19TSElGVAkJMAorCisjZGVmaW5lIFRWX1NDX0NUTF8yCQkweDY4MDY0CisvKiogU2V0cyB0aGUgcm9sbG92ZXIgZm9yIHRoZSBzZWNvbmQgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NEREEyX1NJWkVfTUFTSwkJMHg3ZmZmMDAwMAorIyBkZWZpbmUgVFZfU0NEREEyX1NJWkVfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgaW5jcmVlbnQgb2YgdGhlIHNlY29uZCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTJfSU5DX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1NDRERBMl9JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9TQ19DVExfMwkJMHg2ODA2OAorLyoqIFNldHMgdGhlIHJvbGxvdmVyIGZvciB0aGUgdGhpcmQgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NEREEzX1NJWkVfTUFTSwkJMHg3ZmZmMDAwMAorIyBkZWZpbmUgVFZfU0NEREEzX1NJWkVfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgaW5jcmVlbnQgb2YgdGhlIHRoaXJkIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBM19JTkNfTUFTSwkJMHgwMDAwN2ZmZgorIyBkZWZpbmUgVFZfU0NEREEzX0lOQ19TSElGVAkJMAorCisjZGVmaW5lIFRWX1dJTl9QT1MJCTB4NjgwNzAKKy8qKiBYIGNvb3JkaW5hdGUgb2YgdGhlIGRpc3BsYXkgZnJvbSB0aGUgc3RhcnQgb2YgaG9yaXpvbnRhbCBhY3RpdmUgKi8KKyMgZGVmaW5lIFRWX1hQT1NfTUFTSwkJCTB4MWZmZjAwMDAKKyMgZGVmaW5lIFRWX1hQT1NfU0hJRlQJCQkxNgorLyoqIFkgY29vcmRpbmF0ZSBvZiB0aGUgZGlzcGxheSBmcm9tIHRoZSBzdGFydCBvZiB2ZXJ0aWNhbCBhY3RpdmUgKE5CUikgKi8KKyMgZGVmaW5lIFRWX1lQT1NfTUFTSwkJCTB4MDAwMDBmZmYKKyMgZGVmaW5lIFRWX1lQT1NfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfV0lOX1NJWkUJCTB4NjgwNzQKKy8qKiBIb3Jpem9udGFsIHNpemUgb2YgdGhlIGRpc3BsYXkgd2luZG93LCBtZWFzdXJlZCBpbiBwaXhlbHMqLworIyBkZWZpbmUgVFZfWFNJWkVfTUFTSwkJCTB4MWZmZjAwMDAKKyMgZGVmaW5lIFRWX1hTSVpFX1NISUZUCQkJMTYKKy8qKgorICogVmVydGljYWwgc2l6ZSBvZiB0aGUgZGlzcGxheSB3aW5kb3csIG1lYXN1cmVkIGluIHBpeGVscy4KKyAqCisgKiBNdXN0IGJlIGV2ZW4gZm9yIGludGVybGFjZWQgbW9kZXMuCisgKi8KKyMgZGVmaW5lIFRWX1lTSVpFX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9ZU0laRV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9GSUxURVJfQ1RMXzEJCTB4NjgwODAKKy8qKgorICogRW5hYmxlcyBhdXRvbWF0aWMgc2NhbGluZyBjYWxjdWxhdGlvbi4KKyAqCisgKiBJZiBzZXQsIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgYXJlIGlnbm9yZWQsIGFuZCB0aGUgY2FsY3VsYXRlZCB2YWx1ZXMgY2FuCisgKiBiZSByZWFkIGJhY2sgZnJvbSB0aGUgcmVnaXN0ZXIuCisgKi8KKyMgZGVmaW5lIFRWX0FVVE9fU0NBTEUJCQkoMSA8PCAzMSkKKy8qKgorICogRGlzYWJsZXMgdGhlIHZlcnRpY2FsIGZpbHRlci4KKyAqCisgKiBUaGlzIGlzIHJlcXVpcmVkIG9uIG1vZGVzIG1vcmUgdGhhbiAxMDI0IHBpeGVscyB3aWRlICovCisjIGRlZmluZSBUVl9WX0ZJTFRFUl9CWVBBU1MJCSgxIDw8IDI5KQorLyoqIEVuYWJsZXMgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nICovCisjIGRlZmluZSBUVl9WQURBUFQJCQkoMSA8PCAyOCkKKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01BU0sJCSgzIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIGxlYXN0IGFkYXB0aXZlIHZlcnRpY2FsIGZpbHRlcmluZyBtb2RlICovCisjIGRlZmluZSBUVl9WQURBUFRfTU9ERV9MRUFTVAkJKDAgPDwgMjYpCisvKiogU2VsZWN0cyB0aGUgbW9kZXJhdGVseSBhZGFwdGl2ZSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgbW9kZSAqLworIyBkZWZpbmUgVFZfVkFEQVBUX01PREVfTU9ERVJBVEUJKDEgPDwgMjYpCisvKiogU2VsZWN0cyB0aGUgbW9zdCBhZGFwdGl2ZSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgbW9kZSAqLworIyBkZWZpbmUgVFZfVkFEQVBUX01PREVfTU9TVAkJKDMgPDwgMjYpCisvKioKKyAqIFNldHMgdGhlIGhvcml6b250YWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogVGhpcyBzaG91bGQgYmUgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgaG9yaXpvbnRhbCBzY2FsaW5nIGZhY3RvciBkaXZpZGVkCisgKiBieSB0aGUgb3ZlcnNhbXBsaW5nIHJhdGUuICBUVl9IU0NBTEUgc2hvdWxkIGJlIGxlc3MgdGhhbiAxLCBhbmQgc2V0IHRvOgorICoKKyAqIChzcmMgd2lkdGggLSAxKSAvICgob3ZlcnNhbXBsZSAqIGRlc3Qgd2lkdGgpIC0gMSkKKyAqLworIyBkZWZpbmUgVFZfSFNDQUxFX0ZSQUNfTUFTSwkJMHgwMDAwM2ZmZgorIyBkZWZpbmUgVFZfSFNDQUxFX0ZSQUNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9GSUxURVJfQ1RMXzIJCTB4NjgwODQKKy8qKgorICogU2V0cyB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRWX1ZTQ0FMRSBzaG91bGQgYmUgKHNyYyBoZWlnaHQgLSAxKSAvICgoaW50ZXJsYWNlICogZGVzdCBoZWlnaHQpIC0gMSkKKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0lOVF9NQVNLCQkweDAwMDM4MDAwCisjIGRlZmluZSBUVl9WU0NBTEVfSU5UX1NISUZUCQkxNQorLyoqCisgKiBTZXRzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIDMuMTUgZml4ZWQtcG9pbnQgdmVydGljYWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogXHNhIFRWX1ZTQ0FMRV9JTlRfTUFTSworICovCisjIGRlZmluZSBUVl9WU0NBTEVfRlJBQ19NQVNLCQkweDAwMDA3ZmZmCisjIGRlZmluZSBUVl9WU0NBTEVfRlJBQ19TSElGVAkJMAorCisjZGVmaW5lIFRWX0ZJTFRFUl9DVExfMwkJMHg2ODA4OAorLyoqCisgKiBTZXRzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIDMuMTUgZml4ZWQtcG9pbnQgdmVydGljYWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogVFZfVlNDQUxFIHNob3VsZCBiZSAoc3JjIGhlaWdodCAtIDEpIC8gKDEvNCAqIChkZXN0IGhlaWdodCAtIDEpKQorICoKKyAqIEZvciBwcm9ncmVzc2l2ZSBtb2RlcywgVFZfVlNDQUxFX0lQX0lOVCBzaG91bGQgYmUgc2V0IHRvIHplcm9lcy4KKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0lOVF9NQVNLCQkweDAwMDM4MDAwCisjIGRlZmluZSBUVl9WU0NBTEVfSVBfSU5UX1NISUZUCQkxNQorLyoqCisgKiBTZXRzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIDMuMTUgZml4ZWQtcG9pbnQgdmVydGljYWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogRm9yIHByb2dyZXNzaXZlIG1vZGVzLCBUVl9WU0NBTEVfSVBfSU5UIHNob3VsZCBiZSBzZXQgdG8gemVyb2VzLgorICoKKyAqIFxzYSBUVl9WU0NBTEVfSVBfSU5UX01BU0sKKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0ZSQUNfTUFTSwkJMHgwMDAwN2ZmZgorIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0ZSQUNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9DQ19DT05UUk9MCQkweDY4MDkwCisjIGRlZmluZSBUVl9DQ19FTkFCTEUJCQkoMSA8PCAzMSkKKy8qKgorICogU3BlY2lmaWVzIHdoaWNoIGZpZWxkIHRvIHNlbmQgdGhlIENDIGRhdGEgaW4uCisgKgorICogQ0MgZGF0YSBpcyB1c3VhbGx5IHNlbnQgaW4gZmllbGQgMC4KKyAqLworIyBkZWZpbmUgVFZfQ0NfRklEX01BU0sJCQkoMSA8PCAyNykKKyMgZGVmaW5lIFRWX0NDX0ZJRF9TSElGVAkJMjcKKy8qKiBTZXRzIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBDQyBkYXRhLiAgVXN1YWxseSAxMzUuICovCisjIGRlZmluZSBUVl9DQ19IT0ZGX01BU0sJCTB4MDNmZjAwMDAKKyMgZGVmaW5lIFRWX0NDX0hPRkZfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIENDIGRhdGEuICBVc3VhbGx5IDIxICovCisjIGRlZmluZSBUVl9DQ19MSU5FX01BU0sJCTB4MDAwMDAwM2YKKyMgZGVmaW5lIFRWX0NDX0xJTkVfU0hJRlQJCTAKKworI2RlZmluZSBUVl9DQ19EQVRBCQkweDY4MDk0CisjIGRlZmluZSBUVl9DQ19SRFkJCQkoMSA8PCAzMSkKKy8qKiBTZWNvbmQgd29yZCBvZiBDQyBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkLiAqLworIyBkZWZpbmUgVFZfQ0NfREFUQV8yX01BU0sJCTB4MDA3ZjAwMDAKKyMgZGVmaW5lIFRWX0NDX0RBVEFfMl9TSElGVAkJMTYKKy8qKiBGaXJzdCB3b3JkIG9mIENDIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQuICovCisjIGRlZmluZSBUVl9DQ19EQVRBXzFfTUFTSwkJMHgwMDAwMDA3ZgorIyBkZWZpbmUgVFZfQ0NfREFUQV8xX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfSF9MVU1BXzAJCTB4NjgxMDAKKyNkZWZpbmUgVFZfSF9MVU1BXzU5CQkweDY4MWVjCisjZGVmaW5lIFRWX0hfQ0hST01BXzAJCTB4NjgyMDAKKyNkZWZpbmUgVFZfSF9DSFJPTUFfNTkJCTB4NjgyZWMKKyNkZWZpbmUgVFZfVl9MVU1BXzAJCTB4NjgzMDAKKyNkZWZpbmUgVFZfVl9MVU1BXzQyCQkweDY4M2E4CisjZGVmaW5lIFRWX1ZfQ0hST01BXzAJCTB4Njg0MDAKKyNkZWZpbmUgVFZfVl9DSFJPTUFfNDIJCTB4Njg0YTgKKworLyogRGlzcGxheSAmIGN1cnNvciBjb250cm9sICovCisKKy8qIFBpcGUgQSAqLworI2RlZmluZSBQSVBFQURTTAkJMHg3MDAwMAorI2RlZmluZSBQSVBFQUNPTkYJCTB4NzAwMDgKKyNkZWZpbmUgICBQSVBFQUNPTkZfRU5BQkxFCSgxPDwzMSkKKyNkZWZpbmUgICBQSVBFQUNPTkZfRElTQUJMRQkwCisjZGVmaW5lICAgUElQRUFDT05GX0RPVUJMRV9XSURFCSgxPDwzMCkKKyNkZWZpbmUgICBJOTY1X1BJUEVDT05GX0FDVElWRQkoMTw8MzApCisjZGVmaW5lICAgUElQRUFDT05GX1NJTkdMRV9XSURFCTAKKyNkZWZpbmUgICBQSVBFQUNPTkZfUElQRV9VTkxPQ0tFRCAwCisjZGVmaW5lICAgUElQRUFDT05GX1BJUEVfTE9DS0VECSgxPDwyNSkKKyNkZWZpbmUgICBQSVBFQUNPTkZfUEFMRVRURQkwCisjZGVmaW5lICAgUElQRUFDT05GX0dBTU1BCQkoMTw8MjQpCisjZGVmaW5lICAgUElQRUNPTkZfRk9SQ0VfQk9SREVSCSgxPDwyNSkKKyNkZWZpbmUgICBQSVBFQ09ORl9QUk9HUkVTU0lWRQkoMCA8PCAyMSkKKyNkZWZpbmUgICBQSVBFQ09ORl9JTlRFUkxBQ0VfV19GSUVMRF9JTkRJQ0FUSU9OCSg2IDw8IDIxKQorI2RlZmluZSAgIFBJUEVDT05GX0lOVEVSTEFDRV9GSUVMRF8wX09OTFkJCSg3IDw8IDIxKQorI2RlZmluZSBQSVBFQVNUQVQJCTB4NzAwMjQKKyNkZWZpbmUgICBQSVBFX0ZJRk9fVU5ERVJSVU5fU1RBVFVTCQkoMVVMPDwzMSkKKyNkZWZpbmUgICBQSVBFX0NSQ19FUlJPUl9FTkFCTEUJCQkoMVVMPDwyOSkKKyNkZWZpbmUgICBQSVBFX0NSQ19ET05FX0VOQUJMRQkJCSgxVUw8PDI4KQorI2RlZmluZSAgIFBJUEVfR01CVVNfRVZFTlRfRU5BQkxFCQkoMVVMPDwyNykKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjYpCisjZGVmaW5lICAgUElQRV9WU1lOQ19JTlRFUlJVUFRfRU5BQkxFCQkoMVVMPDwyNSkKKyNkZWZpbmUgICBQSVBFX0RJU1BMQVlfTElORV9DT01QQVJFX0VOQUJMRQkoMVVMPDwyNCkKKyNkZWZpbmUgICBQSVBFX0RQU1RfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMykKKyNkZWZpbmUgICBQSVBFX0xFR0FDWV9CTENfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMikKKyNkZWZpbmUgICBQSVBFX09ERF9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIxKQorI2RlZmluZSAgIFBJUEVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIwKQorI2RlZmluZSAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE4KSAvKiBwcmUtOTY1ICovCisjZGVmaW5lICAgUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwxOCkgLyogOTY1IG9yIGxhdGVyICovCisjZGVmaW5lICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MTcpCisjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfRU5BQkxFCQkoMVVMPDwxNikKKyNkZWZpbmUgICBQSVBFX0NSQ19FUlJPUl9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDEzKQorI2RlZmluZSAgIFBJUEVfQ1JDX0RPTkVfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDwxMikKKyNkZWZpbmUgICBQSVBFX0dNQlVTX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDExKQorI2RlZmluZSAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxMCkKKyNkZWZpbmUgICBQSVBFX1ZTWU5DX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDkpCisjZGVmaW5lICAgUElQRV9ESVNQTEFZX0xJTkVfQ09NUEFSRV9TVEFUVVMJKDFVTDw8OCkKKyNkZWZpbmUgICBQSVBFX0RQU1RfRVZFTlRfU1RBVFVTCQkoMVVMPDw3KQorI2RlZmluZSAgIFBJUEVfTEVHQUNZX0JMQ19FVkVOVF9TVEFUVVMJCSgxVUw8PDYpCisjZGVmaW5lICAgUElQRV9PRERfRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw1KQorI2RlZmluZSAgIFBJUEVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDQpCisjZGVmaW5lICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MikgLyogcHJlLTk2NSAqLworI2RlZmluZSAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MikgLyogOTY1IG9yIGxhdGVyICovCisjZGVmaW5lICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MSkKKyNkZWZpbmUgICBQSVBFX09WRVJMQVlfVVBEQVRFRF9TVEFUVVMJCSgxVUw8PDApCisKKyNkZWZpbmUgRFNQQVJCCQkJMHg3MDAzMAorI2RlZmluZSAgIERTUEFSQl9DU1RBUlRfTUFTSwkoMHg3ZiA8PCA3KQorI2RlZmluZSAgIERTUEFSQl9DU1RBUlRfU0hJRlQJNworI2RlZmluZSAgIERTUEFSQl9CU1RBUlRfTUFTSwkoMHg3ZikKKyNkZWZpbmUgICBEU1BBUkJfQlNUQVJUX1NISUZUCTAKKy8qCisgKiBUaGUgdHdvIHBpcGUgZnJhbWUgY291bnRlciByZWdpc3RlcnMgYXJlIG5vdCBzeW5jaHJvbml6ZWQsIHNvCisgKiByZWFkaW5nIGEgc3RhYmxlIHZhbHVlIGlzIHNvbWV3aGF0IHRyaWNreS4gVGhlIGZvbGxvd2luZyBjb2RlCisgKiBzaG91bGQgd29yazoKKyAqCisgKiAgZG8geworICogICAgaGlnaDEgPSAoKElOUkVHKFBJUEVBRlJBTUVISUdIKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorICogICAgICAgICAgICAgUElQRV9GUkFNRV9ISUdIX1NISUZUOworICogICAgbG93MSA9ICAoKElOUkVHKFBJUEVBRlJBTUVQSVhFTCkgJiBQSVBFX0ZSQU1FX0xPV19NQVNLKSA+PgorICogICAgICAgICAgICAgUElQRV9GUkFNRV9MT1dfU0hJRlQpOworICogICAgaGlnaDIgPSAoKElOUkVHKFBJUEVBRlJBTUVISUdIKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorICogICAgICAgICAgICAgUElQRV9GUkFNRV9ISUdIX1NISUZUKTsKKyAqICB9IHdoaWxlIChoaWdoMSAhPSBoaWdoMik7CisgKiAgZnJhbWUgPSAoaGlnaDEgPDwgOCkgfCBsb3cxOworICovCisjZGVmaW5lIFBJUEVBRlJBTUVISUdIICAgICAgICAgIDB4NzAwNDAKKyNkZWZpbmUgICBQSVBFX0ZSQU1FX0hJR0hfTUFTSyAgICAweDAwMDBmZmZmCisjZGVmaW5lICAgUElQRV9GUkFNRV9ISUdIX1NISUZUICAgMAorI2RlZmluZSBQSVBFQUZSQU1FUElYRUwgICAgICAgICAweDcwMDQ0CisjZGVmaW5lICAgUElQRV9GUkFNRV9MT1dfTUFTSyAgICAgMHhmZjAwMDAwMAorI2RlZmluZSAgIFBJUEVfRlJBTUVfTE9XX1NISUZUICAgIDI0CisjZGVmaW5lICAgUElQRV9QSVhFTF9NQVNLICAgICAgICAgMHgwMGZmZmZmZgorI2RlZmluZSAgIFBJUEVfUElYRUxfU0hJRlQgICAgICAgIDAKKworLyogQ3Vyc29yIEEgJiBCIHJlZ3MgKi8KKyNkZWZpbmUgQ1VSQUNOVFIJCTB4NzAwODAKKyNkZWZpbmUgICBDVVJTT1JfTU9ERV9ESVNBQkxFICAgMHgwMAorI2RlZmluZSAgIENVUlNPUl9NT0RFXzY0XzMyQl9BWCAweDA3CisjZGVmaW5lICAgQ1VSU09SX01PREVfNjRfQVJHQl9BWCAoKDEgPDwgNSkgfCBDVVJTT1JfTU9ERV82NF8zMkJfQVgpCisjZGVmaW5lICAgTUNVUlNPUl9HQU1NQV9FTkFCTEUgICgxIDw8IDI2KQorI2RlZmluZSBDVVJBQkFTRQkJMHg3MDA4NAorI2RlZmluZSBDVVJBUE9TCQkJMHg3MDA4OAorI2RlZmluZSAgIENVUlNPUl9QT1NfTUFTSyAgICAgICAweDAwN0ZGCisjZGVmaW5lICAgQ1VSU09SX1BPU19TSUdOICAgICAgIDB4ODAwMAorI2RlZmluZSAgIENVUlNPUl9YX1NISUZUICAgICAgICAwCisjZGVmaW5lICAgQ1VSU09SX1lfU0hJRlQgICAgICAgIDE2CisjZGVmaW5lIENVUkJDTlRSCQkweDcwMGMwCisjZGVmaW5lIENVUkJCQVNFCQkweDcwMGM0CisjZGVmaW5lIENVUkJQT1MJCQkweDcwMGM4CisKKy8qIERpc3BsYXkgQSBjb250cm9sICovCisjZGVmaW5lIERTUEFDTlRSICAgICAgICAgICAgICAgIDB4NzAxODAKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0VOQUJMRQkJCSgxPDwzMSkKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0RJU0FCTEUJCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX0dBTU1BX0VOQUJMRQkJKDE8PDMwKQorI2RlZmluZSAgIERJU1BQTEFORV9HQU1NQV9ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1BJWEZPUk1BVF9NQVNLCQkoMHhmPDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfOEJQUAkJCSgweDI8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8xNV8xNkJQUAkJCSgweDQ8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8xNkJQUAkJCSgweDU8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8zMkJQUF9OT19BTFBIQQkJKDB4Njw8MjYpCisjZGVmaW5lICAgRElTUFBMQU5FXzMyQlBQCQkJKDB4Nzw8MjYpCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19FTkFCTEUJCSgxPDwyNSkKKyNkZWZpbmUgICBESVNQUExBTkVfU1RFUkVPX0RJU0FCTEUJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfTUFTSwkJKDE8PDI0KQorI2RlZmluZSAgIERJU1BQTEFORV9TRUxfUElQRV9BCQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TRUxfUElQRV9CCQkJKDE8PDI0KQorI2RlZmluZSAgIERJU1BQTEFORV9TUkNfS0VZX0VOQUJMRQkJKDE8PDIyKQorI2RlZmluZSAgIERJU1BQTEFORV9TUkNfS0VZX0RJU0FCTEUJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfTElORV9ET1VCTEUJCQkoMTw8MjApCisjZGVmaW5lICAgRElTUFBMQU5FX05PX0xJTkVfRE9VQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9GSVJTVAkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9TRUNPTkQJKDE8PDE4KQorI2RlZmluZSBEU1BBQUREUgkJMHg3MDE4NAorI2RlZmluZSBEU1BBU1RSSURFCQkweDcwMTg4CisjZGVmaW5lIERTUEFQT1MJCQkweDcwMThDIC8qIHJlc2VydmVkICovCisjZGVmaW5lIERTUEFTSVpFCQkweDcwMTkwCisjZGVmaW5lIERTUEFTVVJGCQkweDcwMTlDIC8qIDk2NSsgb25seSAqLworI2RlZmluZSBEU1BBVElMRU9GRgkJMHg3MDFBNCAvKiA5NjUrIG9ubHkgKi8KKworLyogVkJJT1MgZmxhZ3MgKi8KKyNkZWZpbmUgU1dGMDAJCQkweDcxNDEwCisjZGVmaW5lIFNXRjAxCQkJMHg3MTQxNAorI2RlZmluZSBTV0YwMgkJCTB4NzE0MTgKKyNkZWZpbmUgU1dGMDMJCQkweDcxNDFjCisjZGVmaW5lIFNXRjA0CQkJMHg3MTQyMAorI2RlZmluZSBTV0YwNQkJCTB4NzE0MjQKKyNkZWZpbmUgU1dGMDYJCQkweDcxNDI4CisjZGVmaW5lIFNXRjEwCQkJMHg3MDQxMAorI2RlZmluZSBTV0YxMQkJCTB4NzA0MTQKKyNkZWZpbmUgU1dGMTQJCQkweDcxNDIwCisjZGVmaW5lIFNXRjMwCQkJMHg3MjQxNAorI2RlZmluZSBTV0YzMQkJCTB4NzI0MTgKKyNkZWZpbmUgU1dGMzIJCQkweDcyNDFjCisKKy8qIFBpcGUgQiAqLworI2RlZmluZSBQSVBFQkRTTAkJMHg3MTAwMAorI2RlZmluZSBQSVBFQkNPTkYJCTB4NzEwMDgKKyNkZWZpbmUgUElQRUJTVEFUCQkweDcxMDI0CisjZGVmaW5lIFBJUEVCRlJBTUVISUdICQkweDcxMDQwCisjZGVmaW5lIFBJUEVCRlJBTUVQSVhFTAkJMHg3MTA0NAorCisvKiBEaXNwbGF5IEIgY29udHJvbCAqLworI2RlZmluZSBEU1BCQ05UUgkJMHg3MTE4MAorI2RlZmluZSAgIERJU1BQTEFORV9BTFBIQV9UUkFOU19FTkFCTEUJCSgxPDwxNSkKKyNkZWZpbmUgICBESVNQUExBTkVfQUxQSEFfVFJBTlNfRElTQUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfRElTUExBWQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NQUklURV9BQk9WRV9PVkVSTEFZCSgxKQorI2RlZmluZSBEU1BCQUREUgkJMHg3MTE4NAorI2RlZmluZSBEU1BCU1RSSURFCQkweDcxMTg4CisjZGVmaW5lIERTUEJQT1MJCQkweDcxMThDCisjZGVmaW5lIERTUEJTSVpFCQkweDcxMTkwCisjZGVmaW5lIERTUEJTVVJGCQkweDcxMTlDCisjZGVmaW5lIERTUEJUSUxFT0ZGCQkweDcxMUE0CisKKy8qIFZCSU9TIHJlZ3MgKi8KKyNkZWZpbmUgVkdBQ05UUkwJCTB4NzE0MDAKKyMgZGVmaW5lIFZHQV9ESVNQX0RJU0FCTEUJCQkoMSA8PCAzMSkKKyMgZGVmaW5lIFZHQV8yWF9NT0RFCQkJCSgxIDw8IDMwKQorIyBkZWZpbmUgVkdBX1BJUEVfQl9TRUxFQ1QJCQkoMSA8PCAyOSkKKworI2VuZGlmIC8qIF9JOTE1X1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNmZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTAsMCArMSw1MDkgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IDIwMDggKGMpIEludGVsIENvcnBvcmF0aW9uCisgKiAgIEplc3NlIEJhcm5lcyA8amJhcm5lc0B2aXJ0dW91c2dlZWsub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRVTkdTVEVOIEdSQVBISUNTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCitzdGF0aWMgYm9vbCBpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0EpICYgRFBMTF9WQ09fRU5BQkxFKTsKKwllbHNlCisJCXJldHVybiAoSTkxNV9SRUFEKERQTExfQikgJiBEUExMX1ZDT19FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKKwl1MzIgKmFycmF5OworCWludCBpOworCisJaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQorCQlyZXR1cm47CisKKwlpZiAocGlwZSA9PSBQSVBFX0EpCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOworCWVsc2UKKwkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7CisKKwlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJYXJyYXlbaV0gPSBJOTE1X1JFQUQocmVnICsgKGkgPDwgMikpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKKwl1MzIgKmFycmF5OworCWludCBpOworCisJaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQorCQlyZXR1cm47CisKKwlpZiAocGlwZSA9PSBQSVBFX0EpCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOworCWVsc2UKKwkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7CisKKwlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJSTkxNV9XUklURShyZWcgKyAoaSA8PCAyKSwgYXJyYXlbaV0pOworfQorCitzdGF0aWMgdTggaTkxNV9yZWFkX2luZGV4ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTE2IGluZGV4X3BvcnQsIHUxNiBkYXRhX3BvcnQsIHU4IHJlZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9XUklURTgoaW5kZXhfcG9ydCwgcmVnKTsKKwlyZXR1cm4gSTkxNV9SRUFEOChkYXRhX3BvcnQpOworfQorCitzdGF0aWMgdTggaTkxNV9yZWFkX2FyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUxNiBzdDAxLCB1OCByZWcsIHUxNiBwYWxldHRlX2VuYWJsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9SRUFEOChzdDAxKTsKKwlJOTE1X1dSSVRFOChWR0FfQVJfSU5ERVgsIHBhbGV0dGVfZW5hYmxlIHwgcmVnKTsKKwlyZXR1cm4gSTkxNV9SRUFEOChWR0FfQVJfREFUQV9SRUFEKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV93cml0ZV9hcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgc3QwMSwgdTggcmVnLCB1OCB2YWwsIHUxNiBwYWxldHRlX2VuYWJsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9SRUFEOChzdDAxKTsKKwlJOTE1X1dSSVRFOChWR0FfQVJfSU5ERVgsIHBhbGV0dGVfZW5hYmxlIHwgcmVnKTsKKwlJOTE1X1dSSVRFOChWR0FfQVJfREFUQV9XUklURSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV93cml0ZV9pbmRleGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9XUklURTgoaW5kZXhfcG9ydCwgcmVnKTsKKwlJOTE1X1dSSVRFOChkYXRhX3BvcnQsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfc2F2ZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKKworCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLworCWRldl9wcml2LT5zYXZlREFDTUFTSyA9IEk5MTVfUkVBRDgoVkdBX0RBQ01BU0spOworCS8qIERBQ0NSWCBhdXRvbWF0aWNhbGx5IGluY3JlbWVudHMgZHVyaW5nIHJlYWQgKi8KKwlJOTE1X1dSSVRFOChWR0FfREFDUlgsIDApOworCS8qIFJlYWQgMyBieXRlcyBvZiBjb2xvciBkYXRhIGZyb20gZWFjaCBpbmRleCAqLworCWZvciAoaSA9IDA7IGkgPCAyNTYgKiAzOyBpKyspCisJCWRldl9wcml2LT5zYXZlREFDREFUQVtpXSA9IEk5MTVfUkVBRDgoVkdBX0RBQ0RBVEEpOworCisJLyogTVNSIGJpdHMgKi8KKwlkZXZfcHJpdi0+c2F2ZU1TUiA9IEk5MTVfUkVBRDgoVkdBX01TUl9SRUFEKTsKKwlpZiAoZGV2X3ByaXYtPnNhdmVNU1IgJiBWR0FfTVNSX0NHQV9NT0RFKSB7CisJCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX0NHQTsKKwkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX0NHQTsKKwkJc3QwMSA9IFZHQV9TVDAxX0NHQTsKKwl9IGVsc2UgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9NREE7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9NREE7CisJCXN0MDEgPSBWR0FfU1QwMV9NREE7CisJfQorCisJLyogQ1JUIGNvbnRyb2xsZXIgcmVncyAqLworCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIGNyX2luZGV4LCBjcl9kYXRhLCAweDExLAorCQkJICAgaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSkgJgorCQkJICAgKH4weDgwKSk7CisJZm9yIChpID0gMDsgaSA8PSAweDI0OyBpKyspCisJCWRldl9wcml2LT5zYXZlQ1JbaV0gPQorCQkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgaSk7CisJLyogTWFrZSBzdXJlIHdlIGRvbid0IHR1cm4gb2ZmIENSIGdyb3VwIDAgd3JpdGVzICovCisJZGV2X3ByaXYtPnNhdmVDUlsweDExXSAmPSB+MHg4MDsKKworCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCUk5MTVfUkVBRDgoc3QwMSk7CisJZGV2X3ByaXYtPnNhdmVBUl9JTkRFWCA9IEk5MTVfUkVBRDgoVkdBX0FSX0lOREVYKTsKKwlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVBUltpXSA9IGk5MTVfcmVhZF9hcihkZXYsIHN0MDEsIGksIDApOworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBkZXZfcHJpdi0+c2F2ZUFSX0lOREVYKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOworCisJLyogR3JhcGhpY3MgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZUdSW2ldID0KKwkJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgaSk7CisKKwlkZXZfcHJpdi0+c2F2ZUdSWzB4MTBdID0KKwkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDEwKTsKKwlkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdID0KKwkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDExKTsKKwlkZXZfcHJpdi0+c2F2ZUdSWzB4MThdID0KKwkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDE4KTsKKworCS8qIFNlcXVlbmNlciByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZVNSW2ldID0KKwkJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcmVzdG9yZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKKworCS8qIE1TUiBiaXRzICovCisJSTkxNV9XUklURTgoVkdBX01TUl9XUklURSwgZGV2X3ByaXYtPnNhdmVNU1IpOworCWlmIChkZXZfcHJpdi0+c2F2ZU1TUiAmIFZHQV9NU1JfQ0dBX01PREUpIHsKKwkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfQ0dBOworCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfQ0dBOworCQlzdDAxID0gVkdBX1NUMDFfQ0dBOworCX0gZWxzZSB7CisJCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX01EQTsKKwkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX01EQTsKKwkJc3QwMSA9IFZHQV9TVDAxX01EQTsKKwl9CisKKwkvKiBTZXF1ZW5jZXIgcmVnaXN0ZXJzLCBkb24ndCB3cml0ZSBTUjA3ICovCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSwKKwkJCQkgICBkZXZfcHJpdi0+c2F2ZVNSW2ldKTsKKworCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KKwkvKiBFbmFibGUgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSwgZGV2X3ByaXYtPnNhdmVDUlsweDExXSk7CisJZm9yIChpID0gMDsgaSA8PSAweDI0OyBpKyspCisJCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIGNyX2luZGV4LCBjcl9kYXRhLCBpLCBkZXZfcHJpdi0+c2F2ZUNSW2ldKTsKKworCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVncyAqLworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGksCisJCQkJICAgZGV2X3ByaXYtPnNhdmVHUltpXSk7CisKKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDEwLAorCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDEwXSk7CisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSwKKwkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMV0pOworCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgsCisJCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MThdKTsKKworCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCUk5MTVfUkVBRDgoc3QwMSk7IC8qIHN3aXRjaCBiYWNrIHRvIGluZGV4IG1vZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKKwkJaTkxNV93cml0ZV9hcihkZXYsIHN0MDEsIGksIGRldl9wcml2LT5zYXZlQVJbaV0sIDApOworCUk5MTVfUkVBRDgoc3QwMSk7IC8qIHN3aXRjaCBiYWNrIHRvIGluZGV4IG1vZGUgKi8KKwlJOTE1X1dSSVRFOChWR0FfQVJfSU5ERVgsIGRldl9wcml2LT5zYXZlQVJfSU5ERVggfCAweDIwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOworCisJLyogVkdBIGNvbG9yIHBhbGV0dGUgcmVnaXN0ZXJzICovCisJSTkxNV9XUklURTgoVkdBX0RBQ01BU0ssIGRldl9wcml2LT5zYXZlREFDTUFTSyk7CisJLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLworCUk5MTVfV1JJVEU4KFZHQV9EQUNXWCwgMCk7CisJLyogUmVhZCAzIGJ5dGVzIG9mIGNvbG9yIGRhdGEgZnJvbSBlYWNoIGluZGV4ICovCisJZm9yIChpID0gMDsgaSA8IDI1NiAqIDM7IGkrKykKKwkJSTkxNV9XUklURTgoVkdBX0RBQ0RBVEEsIGRldl9wcml2LT5zYXZlREFDREFUQVtpXSk7CisKK30KKworaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgJmRldl9wcml2LT5zYXZlTEJCKTsKKworCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gY29udHJvbCAqLworCWRldl9wcml2LT5zYXZlRFNQQVJCID0gSTkxNV9SRUFEKERTUEFSQik7CisKKwkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCisJZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYgPSBJOTE1X1JFQUQoUElQRUFDT05GKTsKKwlkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDID0gSTkxNV9SRUFEKFBJUEVBU1JDKTsKKwlkZXZfcHJpdi0+c2F2ZUZQQTAgPSBJOTE1X1JFQUQoRlBBMCk7CisJZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOworCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7CisJaWYgKElTX0k5NjVHKGRldikpCisJCWRldl9wcml2LT5zYXZlRFBMTF9BX01EID0gSTkxNV9SRUFEKERQTExfQV9NRCk7CisJZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSA9IEk5MTVfUkVBRChIVE9UQUxfQSk7CisJZGV2X3ByaXYtPnNhdmVIQkxBTktfQSA9IEk5MTVfUkVBRChIQkxBTktfQSk7CisJZGV2X3ByaXYtPnNhdmVIU1lOQ19BID0gSTkxNV9SRUFEKEhTWU5DX0EpOworCWRldl9wcml2LT5zYXZlVlRPVEFMX0EgPSBJOTE1X1JFQUQoVlRPVEFMX0EpOworCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBJOTE1X1JFQUQoVkJMQU5LX0EpOworCWRldl9wcml2LT5zYXZlVlNZTkNfQSA9IEk5MTVfUkVBRChWU1lOQ19BKTsKKwlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOworCisJZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7CisJZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOworCWRldl9wcml2LT5zYXZlRFNQQVNJWkUgPSBJOTE1X1JFQUQoRFNQQVNJWkUpOworCWRldl9wcml2LT5zYXZlRFNQQVBPUyA9IEk5MTVfUkVBRChEU1BBUE9TKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFBRERSID0gSTkxNV9SRUFEKERTUEFBRERSKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZURTUEFTVVJGID0gSTkxNV9SRUFEKERTUEFTVVJGKTsKKwkJZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRiA9IEk5MTVfUkVBRChEU1BBVElMRU9GRik7CisJfQorCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9BKTsKKwlkZXZfcHJpdi0+c2F2ZVBJUEVBU1RBVCA9IEk5MTVfUkVBRChQSVBFQVNUQVQpOworCisJLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLworCWRldl9wcml2LT5zYXZlUElQRUJDT05GID0gSTkxNV9SRUFEKFBJUEVCQ09ORik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQlNSQyA9IEk5MTVfUkVBRChQSVBFQlNSQyk7CisJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKEZQQjApOworCWRldl9wcml2LT5zYXZlRlBCMSA9IEk5MTVfUkVBRChGUEIxKTsKKwlkZXZfcHJpdi0+c2F2ZURQTExfQiA9IEk5MTVfUkVBRChEUExMX0IpOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZURQTExfQl9NRCA9IEk5MTVfUkVBRChEUExMX0JfTUQpOworCWRldl9wcml2LT5zYXZlSFRPVEFMX0IgPSBJOTE1X1JFQUQoSFRPVEFMX0IpOworCWRldl9wcml2LT5zYXZlSEJMQU5LX0IgPSBJOTE1X1JFQUQoSEJMQU5LX0IpOworCWRldl9wcml2LT5zYXZlSFNZTkNfQiA9IEk5MTVfUkVBRChIU1lOQ19CKTsKKwlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CID0gSTkxNV9SRUFEKFZUT1RBTF9CKTsKKwlkZXZfcHJpdi0+c2F2ZVZCTEFOS19CID0gSTkxNV9SRUFEKFZCTEFOS19CKTsKKwlkZXZfcHJpdi0+c2F2ZVZTWU5DX0IgPSBJOTE1X1JFQUQoVlNZTkNfQik7CisJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKworCWRldl9wcml2LT5zYXZlRFNQQkNOVFIgPSBJOTE1X1JFQUQoRFNQQkNOVFIpOworCWRldl9wcml2LT5zYXZlRFNQQlNUUklERSA9IEk5MTVfUkVBRChEU1BCU1RSSURFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJTSVpFID0gSTkxNV9SRUFEKERTUEJTSVpFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJQT1MgPSBJOTE1X1JFQUQoRFNQQlBPUyk7CisJZGV2X3ByaXYtPnNhdmVEU1BCQUREUiA9IEk5MTVfUkVBRChEU1BCQUREUik7CisJaWYgKElTX0k5NjVHTShkZXYpIHx8IElTX0dNNDUoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZURTUEJTVVJGID0gSTkxNV9SRUFEKERTUEJTVVJGKTsKKwkJZGV2X3ByaXYtPnNhdmVEU1BCVElMRU9GRiA9IEk5MTVfUkVBRChEU1BCVElMRU9GRik7CisJfQorCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9CKTsKKwlkZXZfcHJpdi0+c2F2ZVBJUEVCU1RBVCA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCisJLyogQ1JUIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKEFEUEEpOworCisJLyogTFZEUyBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKKwlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOworCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOworCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7CisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKKwlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOworCWRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PRkZfREVMQVlTKTsKKwlkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IgPSBJOTE1X1JFQUQoUFBfRElWSVNPUik7CisKKwkvKiBGSVhNRTogc2F2ZSBUViAmIFNEVk8gc3RhdGUgKi8KKworCS8qIEZCQyBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFID0gSTkxNV9SRUFEKEZCQ19DRkJfQkFTRSk7CisJZGV2X3ByaXYtPnNhdmVGQkNfTExfQkFTRSA9IEk5MTVfUkVBRChGQkNfTExfQkFTRSk7CisJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKKwlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MKTsKKworCS8qIEludGVycnVwdCBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlSUlSID0gSTkxNV9SRUFEKElJUik7CisJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKKwlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOworCisJLyogVkdBIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVWR0EwID0gSTkxNV9SRUFEKFZHQTApOworCWRldl9wcml2LT5zYXZlVkdBMSA9IEk5MTVfUkVBRChWR0ExKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQV9QRCA9IEk5MTVfUkVBRChWR0FfUEQpOworCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOworCisJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVEX1NUQVRFID0gSTkxNV9SRUFEKERfU1RBVEUpOworCWRldl9wcml2LT5zYXZlQ0dfMkRfRElTID0gSTkxNV9SRUFEKENHXzJEX0RJUyk7CisKKwkvKiBDYWNoZSBtb2RlIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVDQUNIRV9NT0RFXzAgPSBJOTE1X1JFQUQoQ0FDSEVfTU9ERV8wKTsKKworCS8qIE1lbW9yeSBBcmJpdHJhdGlvbiBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlTUlfQVJCX1NUQVRFID0gSTkxNV9SRUFEKE1JX0FSQl9TVEFURSk7CisKKwkvKiBTY3JhdGNoIHNwYWNlICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJZGV2X3ByaXYtPnNhdmVTV0YwW2ldID0gSTkxNV9SRUFEKFNXRjAwICsgKGkgPDwgMikpOworCQlkZXZfcHJpdi0+c2F2ZVNXRjFbaV0gPSBJOTE1X1JFQUQoU1dGMTAgKyAoaSA8PCAyKSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWRldl9wcml2LT5zYXZlU1dGMltpXSA9IEk5MTVfUkVBRChTV0YzMCArIChpIDw8IDIpKTsKKworCWk5MTVfc2F2ZV92Z2EoZGV2KTsKKworCXJldHVybiAwOworfQorCitpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgZGV2X3ByaXYtPnNhdmVMQkIpOworCisJSTkxNV9XUklURShEU1BBUkIsIGRldl9wcml2LT5zYXZlRFNQQVJCKTsKKworCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KKwkvKiBQcmltZSB0aGUgY2xvY2sgKi8KKwlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0EgJiBEUExMX1ZDT19FTkFCTEUpIHsKKwkJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BICYKKwkJCSAgIH5EUExMX1ZDT19FTkFCTEUpOworCQlEUk1fVURFTEFZKDE1MCk7CisJfQorCUk5MTVfV1JJVEUoRlBBMCwgZGV2X3ByaXYtPnNhdmVGUEEwKTsKKwlJOTE1X1dSSVRFKEZQQTEsIGRldl9wcml2LT5zYXZlRlBBMSk7CisJLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCisJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKKwlEUk1fVURFTEFZKDE1MCk7CisJaWYgKElTX0k5NjVHKGRldikpCisJCUk5MTVfV1JJVEUoRFBMTF9BX01ELCBkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCk7CisJRFJNX1VERUxBWSgxNTApOworCisJLyogUmVzdG9yZSBtb2RlICovCisJSTkxNV9XUklURShIVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSk7CisJSTkxNV9XUklURShIQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVIQkxBTktfQSk7CisJSTkxNV9XUklURShIU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZUhTWU5DX0EpOworCUk5MTVfV1JJVEUoVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVlRPVEFMX0EpOworCUk5MTVfV1JJVEUoVkJMQU5LX0EsIGRldl9wcml2LT5zYXZlVkJMQU5LX0EpOworCUk5MTVfV1JJVEUoVlNZTkNfQSwgZGV2X3ByaXYtPnNhdmVWU1lOQ19BKTsKKwlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOworCisJLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCisJSTkxNV9XUklURShEU1BBU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BBU0laRSk7CisJSTkxNV9XUklURShEU1BBUE9TLCBkZXZfcHJpdi0+c2F2ZURTUEFQT1MpOworCUk5MTVfV1JJVEUoUElQRUFTUkMsIGRldl9wcml2LT5zYXZlUElQRUFTUkMpOworCUk5MTVfV1JJVEUoRFNQQUFERFIsIGRldl9wcml2LT5zYXZlRFNQQUFERFIpOworCUk5MTVfV1JJVEUoRFNQQVNUUklERSwgZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlJOTE1X1dSSVRFKERTUEFTVVJGLCBkZXZfcHJpdi0+c2F2ZURTUEFTVVJGKTsKKwkJSTkxNV9XUklURShEU1BBVElMRU9GRiwgZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRik7CisJfQorCisJSTkxNV9XUklURShQSVBFQUNPTkYsIGRldl9wcml2LT5zYXZlUElQRUFDT05GKTsKKworCWk5MTVfcmVzdG9yZV9wYWxldHRlKGRldiwgUElQRV9BKTsKKwkvKiBFbmFibGUgdGhlIHBsYW5lICovCisJSTkxNV9XUklURShEU1BBQ05UUiwgZGV2X3ByaXYtPnNhdmVEU1BBQ05UUik7CisJSTkxNV9XUklURShEU1BBQUREUiwgSTkxNV9SRUFEKERTUEFBRERSKSk7CisKKwkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCisJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9CICYgRFBMTF9WQ09fRU5BQkxFKSB7CisJCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCisJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKKwkJRFJNX1VERUxBWSgxNTApOworCX0KKwlJOTE1X1dSSVRFKEZQQjAsIGRldl9wcml2LT5zYXZlRlBCMCk7CisJSTkxNV9XUklURShGUEIxLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOworCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAqLworCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQik7CisJRFJNX1VERUxBWSgxNTApOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKERQTExfQl9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0JfTUQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIFJlc3RvcmUgbW9kZSAqLworCUk5MTVfV1JJVEUoSFRPVEFMX0IsIGRldl9wcml2LT5zYXZlSFRPVEFMX0IpOworCUk5MTVfV1JJVEUoSEJMQU5LX0IsIGRldl9wcml2LT5zYXZlSEJMQU5LX0IpOworCUk5MTVfV1JJVEUoSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVIU1lOQ19CKTsKKwlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKKwlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKKwlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7CisJSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKKworCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLworCUk5MTVfV1JJVEUoRFNQQlNJWkUsIGRldl9wcml2LT5zYXZlRFNQQlNJWkUpOworCUk5MTVfV1JJVEUoRFNQQlBPUywgZGV2X3ByaXYtPnNhdmVEU1BCUE9TKTsKKwlJOTE1X1dSSVRFKFBJUEVCU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDKTsKKwlJOTE1X1dSSVRFKERTUEJBRERSLCBkZXZfcHJpdi0+c2F2ZURTUEJBRERSKTsKKwlJOTE1X1dSSVRFKERTUEJTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQlNUUklERSk7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJSTkxNV9XUklURShEU1BCU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BCU1VSRik7CisJCUk5MTVfV1JJVEUoRFNQQlRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYpOworCX0KKworCUk5MTVfV1JJVEUoUElQRUJDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORik7CisKKwlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7CisJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCUk5MTVfV1JJVEUoRFNQQkNOVFIsIGRldl9wcml2LT5zYXZlRFNQQkNOVFIpOworCUk5MTVfV1JJVEUoRFNQQkFERFIsIEk5MTVfUkVBRChEU1BCQUREUikpOworCisJLyogQ1JUIHN0YXRlICovCisJSTkxNV9XUklURShBRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOworCisJLyogTFZEUyBzdGF0ZSAqLworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIpOworCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQorCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7CisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MKTsKKworCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyk7CisJSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJSTkxNV9XUklURShQUF9PTl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTKTsKKwlJOTE1X1dSSVRFKFBQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyk7CisJSTkxNV9XUklURShQUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOworCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKKworCS8qIEZJWE1FOiByZXN0b3JlIFRWICYgU0RWTyBzdGF0ZSAqLworCisJLyogRkJDIGluZm8gKi8KKwlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOworCUk5MTVfV1JJVEUoRkJDX0xMX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UpOworCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wyLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMik7CisJSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7CisKKwkvKiBWR0Egc3RhdGUgKi8KKwlJOTE1X1dSSVRFKFZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKKwlJOTE1X1dSSVRFKFZHQTAsIGRldl9wcml2LT5zYXZlVkdBMCk7CisJSTkxNV9XUklURShWR0ExLCBkZXZfcHJpdi0+c2F2ZVZHQTEpOworCUk5MTVfV1JJVEUoVkdBX1BELCBkZXZfcHJpdi0+c2F2ZVZHQV9QRCk7CisJRFJNX1VERUxBWSgxNTApOworCisJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCisJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKKwlJOTE1X1dSSVRFIChDR18yRF9ESVMsIGRldl9wcml2LT5zYXZlQ0dfMkRfRElTKTsKKworCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KKwlJOTE1X1dSSVRFIChDQUNIRV9NT0RFXzAsIGRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wIHwgMHhmZmZmMDAwMCk7CisKKwkvKiBNZW1vcnkgYXJiaXRyYXRpb24gc3RhdGUgKi8KKwlJOTE1X1dSSVRFIChNSV9BUkJfU1RBVEUsIGRldl9wcml2LT5zYXZlTUlfQVJCX1NUQVRFIHwgMHhmZmZmMDAwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlJOTE1X1dSSVRFKFNXRjAwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMFtpXSk7CisJCUk5MTVfV1JJVEUoU1dGMTAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YxW2krN10pOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlJOTE1X1dSSVRFKFNXRjMwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMltpXSk7CisKKwlpOTE1X3Jlc3RvcmVfdmdhKGRldik7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYwppbmRleCA1NTcyOTM5Li45N2VlNTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYwpAQCAtNDUsMTUgKzQ1LDE2IEBACiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQogCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9QQ0lfRE1BIHwKLQkgICAgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQgfAotCSAgICBEUklWRVJfSVJRX1ZCTCwKKwkgICAgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQsCiAJLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX21nYV9idWZfcHJpdl90KSwKIAkubG9hZCA9IG1nYV9kcml2ZXJfbG9hZCwKIAkudW5sb2FkID0gbWdhX2RyaXZlcl91bmxvYWQsCiAJLmxhc3RjbG9zZSA9IG1nYV9kcml2ZXJfbGFzdGNsb3NlLAogCS5kbWFfcXVpZXNjZW50ID0gbWdhX2RyaXZlcl9kbWFfcXVpZXNjZW50LAogCS5kZXZpY2VfaXNfYWdwID0gbWdhX2RyaXZlcl9kZXZpY2VfaXNfYWdwLAotCS52Ymxhbmtfd2FpdCA9IG1nYV9kcml2ZXJfdmJsYW5rX3dhaXQsCisJLmdldF92YmxhbmtfY291bnRlciA9IG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBtZ2FfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBtZ2FfZGlzYWJsZV92YmxhbmssCiAJLmlycV9wcmVpbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCwKIAkuaXJxX3Bvc3RpbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCiAJLmlycV91bmluc3RhbGwgPSBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwsCkBAIC02NCwyMCArNjUsMjAgQEAKIAkuaW9jdGxzID0gbWdhX2lvY3RscywKIAkuZG1hX2lvY3RsID0gbWdhX2RtYV9idWZmZXJzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub3BlbiA9IGRybV9vcGVuLAorCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkuaW9jdGwgPSBkcm1faW9jdGwsCisJCS5tbWFwID0gZHJtX21tYXAsCisJCS5wb2xsID0gZHJtX3BvbGwsCisJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJIC5jb21wYXRfaW9jdGwgPSBtZ2FfY29tcGF0X2lvY3RsLAorCQkuY29tcGF0X2lvY3RsID0gbWdhX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCQkgfSwKKwl9LAogCS5wY2lfZHJpdmVyID0gewotCQkgLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLmlkX3RhYmxlID0gcGNpaWRsaXN0LAogCX0sCiAKIAkubmFtZSA9IERSSVZFUl9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAppbmRleCBmNmViZDI0Li44ODI1N2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaApAQCAtMTIwLDYgKzEyMCw3IEBACiAJdTMyIGNsZWFyX2NtZDsKIAl1MzIgbWFjY2VzczsKIAorCWF0b21pY190IHZibF9yZWNlaXZlZDsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgdmJsYW5rcyByZWNlaXZlZC4gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBmZW5jZV9xdWV1ZTsKIAlhdG9taWNfdCBsYXN0X2ZlbmNlX3JldGlyZWQ7CiAJdTMyIG5leHRfZmVuY2VfdG9fcG9zdDsKQEAgLTE4MSwxMSArMTgyLDE0IEBACiBleHRlcm4gaW50IG1nYV93YXJwX2luaXQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiAKIAkJCQkvKiBtZ2FfaXJxLmMgKi8KK2V4dGVybiBpbnQgbWdhX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHZvaWQgbWdhX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgbWdhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IG1nYV9kcml2ZXJfZmVuY2Vfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CiBleHRlcm4gaW50IG1nYV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwogZXh0ZXJuIGlycXJldHVybl90IG1nYV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gbG9uZyBtZ2FfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jCmluZGV4IDkzMDJjYjguLmJhYjQyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jCkBAIC0xLDUgKzEsNiBAQAogLyogbWdhX2lycS5jIC0tIElSUSBoYW5kbGluZyBmb3IgcmFkZW9uIC0qLSBsaW51eC1jIC0qLQotICoKKyAqLworLyoKICAqIENvcHlyaWdodCAoQykgVGhlIFdlYXRoZXIgQ2hhbm5lbCwgSW5jLiAgMjAwMi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhlIFdlYXRoZXIgQ2hhbm5lbCAoVE0pIGZ1bmRlZCBUdW5nc3RlbiBHcmFwaGljcyB0byBkZXZlbG9wIHRoZQpAQCAtMzUsNiArMzYsMTggQEAKICNpbmNsdWRlICJtZ2FfZHJtLmgiCiAjaW5jbHVkZSAibWdhX2Rydi5oIgogCit1MzIgbWdhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwljb25zdCBkcm1fbWdhX3ByaXZhdGVfdCAqY29uc3QgZGV2X3ByaXYgPQorCQkoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKK30KKworCiBpcnFyZXR1cm5fdCBtZ2FfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKQEAgLTQ3LDkgKzYwLDggQEAKIAkvKiBWQkxBTksgaW50ZXJydXB0ICovCiAJaWYgKHN0YXR1cyAmIE1HQV9WTElORVBFTikgewogCQlNR0FfV1JJVEUoTUdBX0lDTEVBUiwgTUdBX1ZMSU5FSUNMUik7Ci0JCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWUpOwotCQlkcm1fdmJsX3NlbmRfc2lnbmFscyhkZXYpOworCQlhdG9taWNfaW5jKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKKwkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJaGFuZGxlZCA9IDE7CiAJfQogCkBAIC01OCw2ICs3MCw3IEBACiAJCWNvbnN0IHUzMiBwcmltX3N0YXJ0ID0gTUdBX1JFQUQoTUdBX1BSSU1BRERSRVNTKTsKIAkJY29uc3QgdTMyIHByaW1fZW5kID0gTUdBX1JFQUQoTUdBX1BSSU1FTkQpOwogCisKIAkJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIE1HQV9TT0ZUUkFQSUNMUik7CiAKIAkJLyogSW4gYWRkaXRpb24gdG8gY2xlYXJpbmcgdGhlIGludGVycnVwdC1wZW5kaW5nIGJpdCwgd2UKQEAgLTcyLDI4ICs4NSwzOSBAQAogCQloYW5kbGVkID0gMTsKIAl9CiAKLQlpZiAoaGFuZGxlZCkgeworCWlmIChoYW5kbGVkKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotaW50IG1nYV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCitpbnQgbWdhX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7Ci0JdW5zaWduZWQgaW50IGN1cl92Ymxhbms7Ci0JaW50IHJldCA9IDA7CisJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLQkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgotCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFuIHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycwotCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLgorCWlmIChjcnRjICE9IDApIHsKKwkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJICBjcnRjKTsKKwkJcmV0dXJuIDA7CisJfQorCisJTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1HQV9TT0ZUUkFQRU4pOworCXJldHVybiAwOworfQorCisKK3ZvaWQgbWdhX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWlmIChjcnRjICE9IDApIHsKKwkJRFJNX0VSUk9SKCJ0cmllZCB0byBkaXNhYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgY3J0YyAlZFxuIiwKKwkJCSAgY3J0Yyk7CisJfQorCisJLyogRG8gKk5PVCogZGlzYWJsZSB0aGUgdmVydGljYWwgcmVmcmVzaCBpbnRlcnJ1cHQuICBNR0EgZG9lc24ndCBoYXZlCisJICogYSBuaWNlIGhhcmR3YXJlIGNvdW50ZXIgdGhhdCB0cmFja3MgdGhlIG51bWJlciBvZiByZWZyZXNoZXMgd2hlbgorCSAqIHRoZSBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQsIGFuZCB0aGUga2VybmVsIGRvZXNuJ3Qga25vdyB0aGUgcmVmcmVzaAorCSAqIHJhdGUgdG8gY2FsY3VsYXRlIGFuIGVzdGltYXRlLgogCSAqLwotCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSkKLQkJICAgICAgLSAqc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkpOwotCi0JKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKLQotCXJldHVybiByZXQ7CisJLyogTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1HQV9TT0ZUUkFQRU4pOyAqLwogfQogCiBpbnQgbWdhX2RyaXZlcl9mZW5jZV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQpAQCAtMTI1LDE0ICsxNDksMjIgQEAKIAlNR0FfV1JJVEUoTUdBX0lDTEVBUiwgfjApOwogfQogCi12b2lkIG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKKworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlEUk1fSU5JVF9XQUlUUVVFVUUoJmRldl9wcml2LT5mZW5jZV9xdWV1ZSk7CiAKLQkvKiBUdXJuIG9uIHZlcnRpY2FsIGJsYW5rIGludGVycnVwdCBhbmQgc29mdCB0cmFwIGludGVycnVwdC4gKi8KLQlNR0FfV1JJVEUoTUdBX0lFTiwgTUdBX1ZMSU5FSUVOIHwgTUdBX1NPRlRSQVBFTik7CisJLyogVHVybiBvbiBzb2Z0IHRyYXAgaW50ZXJydXB0LiAgVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyBhcmUgZW5hYmxlZAorCSAqIGluIG1nYV9lbmFibGVfdmJsYW5rLgorCSAqLworCU1HQV9XUklURShNR0FfSUVOLCBNR0FfU09GVFJBUEVOKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYwppbmRleCBkM2Y4YWFkLi5iNzEwZmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgTUdBX1BBUkFNX0lSUV9OUjoKLQkJdmFsdWUgPSBkZXYtPmlycTsKKwkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwogCQlicmVhazsKIAljYXNlIE1HQV9QQVJBTV9DQVJEX1RZUEU6CiAJCXZhbHVlID0gZGV2X3ByaXYtPmNoaXBzZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYwppbmRleCA2MTA4ZTc1Li4zMjY1ZDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKQEAgLTQzLDEyICs0MywxMyBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8Ci0JICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9yMTI4X2J1Zl9wcml2X3QpLAogCS5wcmVjbG9zZSA9IHIxMjhfZHJpdmVyX3ByZWNsb3NlLAogCS5sYXN0Y2xvc2UgPSByMTI4X2RyaXZlcl9sYXN0Y2xvc2UsCi0JLnZibGFua193YWl0ID0gcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQsCisJLmdldF92YmxhbmtfY291bnRlciA9IHIxMjhfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gcjEyOF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IHIxMjhfZGlzYWJsZV92YmxhbmssCiAJLmlycV9wcmVpbnN0YWxsID0gcjEyOF9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKIAkuaXJxX3VuaW5zdGFsbCA9IHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwsCkBAIC01OSwyMSArNjAsMjAgQEAKIAkuaW9jdGxzID0gcjEyOF9pb2N0bHMsCiAJLmRtYV9pb2N0bCA9IHIxMjhfY2NlX2J1ZmZlcnMsCiAJLmZvcHMgPSB7Ci0JCSAub3duZXIgPSBUSElTX01PRFVMRSwKLQkJIC5vcGVuID0gZHJtX29wZW4sCi0JCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAotCQkgLm1tYXAgPSBkcm1fbW1hcCwKLQkJIC5wb2xsID0gZHJtX3BvbGwsCi0JCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vcGVuID0gZHJtX29wZW4sCisJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLm1tYXAgPSBkcm1fbW1hcCwKKwkJLnBvbGwgPSBkcm1fcG9sbCwKKwkJLmZhc3luYyA9IGRybV9mYXN5bmMsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCQkgLmNvbXBhdF9pb2N0bCA9IHIxMjhfY29tcGF0X2lvY3RsLAorCQkuY29tcGF0X2lvY3RsID0gcjEyOF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIAl9LAotCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCSAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCiAJfSwKIAogCS5uYW1lID0gRFJJVkVSX05BTUUsCkBAIC04Nyw2ICs4Nyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCByMTI4X2luaXQodm9pZCkKIHsKIAlkcml2ZXIubnVtX2lvY3RscyA9IHIxMjhfbWF4X2lvY3RsOworCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaAppbmRleCAwMTExMDVlLi41ODk4YjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKQEAgLTI5LDcgKzI5LDcgQEAKICAqICAgIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgogICogICAgS2V2aW4gRS4gTWFydGluIDxtYXJ0aW5AdmFsaW51eC5jb20+CiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+Ci0gKiAgICBNaWNoZWwgRMOkbnplciA8ZGFlbnplcm1Ac3R1ZGVudC5ldGh6LmNoPgorICogICAgTWljaGVsIETvv716ZXIgPGRhZW56ZXJtQHN0dWRlbnQuZXRoei5jaD4KICAqLwogCiAjaWZuZGVmIF9fUjEyOF9EUlZfSF9fCkBAIC05Nyw2ICs5Nyw4IEBACiAJdTMyIGNydGNfb2Zmc2V0OwogCXUzMiBjcnRjX29mZnNldF9jbnRsOwogCisJYXRvbWljX3QgdmJsX3JlY2VpdmVkOworCiAJdTMyIGNvbG9yX2ZtdDsKIAl1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBmcm9udF9waXRjaDsKQEAgLTE0OSwxMSArMTUxLDEyIEBACiBleHRlcm4gaW50IHIxMjhfZG9fY2NlX2lkbGUoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogZXh0ZXJuIGludCByMTI4X2RvX2NsZWFudXBfY2NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIAotZXh0ZXJuIGludCByMTI4X2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7Ci0KK2V4dGVybiBpbnQgcjEyOF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIHIxMjhfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHUzMiByMTI4X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMKaW5kZXggYzc2ZmRjYS4uZDczNDkwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lycS5jCkBAIC0zNSw2ICszNSwxNiBAQAogI2luY2x1ZGUgInIxMjhfZHJtLmgiCiAjaW5jbHVkZSAicjEyOF9kcnYuaCIKIAordTMyIHIxMjhfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWNvbnN0IGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGNydGMgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworfQorCiBpcnFyZXR1cm5fdCByMTI4X2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7CkBAIC00NiwzMCArNTYsMzggQEAKIAkvKiBWQkxBTksgaW50ZXJydXB0ICovCiAJaWYgKHN0YXR1cyAmIFIxMjhfQ1JUQ19WQkxBTktfSU5UKSB7CiAJCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX1NUQVRVUywgUjEyOF9DUlRDX1ZCTEFOS19JTlRfQUspOwotCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAJcmV0dXJuIElSUV9OT05FOwogfQogCi1pbnQgcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCitpbnQgcjEyOF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOworCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9DTlRMLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9FTik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjEyOF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlpZiAoY3J0YyAhPSAwKQorCQlEUk1fRVJST1IoIiVzOiAgYmFkIGNydGMgJWRcbiIsIF9fZnVuY19fLCBjcnRjKTsKKworCS8qCisJICogRklYTUU6IGltcGxlbWVudCBwcm9wZXIgaW50ZXJydXB0IGRpc2FibGUgYnkgdXNpbmcgdGhlIHZibGFuaworCSAqIGNvdW50ZXIgcmVnaXN0ZXIgKGlmIGF2YWlsYWJsZSkKKwkgKgorCSAqIFIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX0NOVEwsCisJICogICAgICAgICAgICBSMTI4X1JFQUQoUjEyOF9HRU5fSU5UX0NOVEwpICYgflIxMjhfQ1JUQ19WQkxBTktfSU5UX0VOKTsKIAkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpCi0JCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0KLQlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpAQCAtODIsMTIgKzEwMCw5IEBACiAJUjEyOF9XUklURShSMTI4X0dFTl9JTlRfU1RBVFVTLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9BSyk7CiB9CiAKLXZvaWQgcjEyOF9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3IxMjhfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQkvKiBUdXJuIG9uIFZCTCBpbnRlcnJ1cHQgKi8KLQlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9DTlRMLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9FTik7CisJcmV0dXJuIGRybV92YmxhbmtfaW5pdChkZXYsIDEpOwogfQogCiB2b2lkIHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKaW5kZXggNTFhOWFmYy4uZjdhNWI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYwpAQCAtMTYyOSw3ICsxNjI5LDcgQEAKIAogCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7CiAJY2FzZSBSMTI4X1BBUkFNX0lSUV9OUjoKLQkJdmFsdWUgPSBkZXYtPmlycTsKKwkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCmluZGV4IDI0OGFiNGEuLjU5YTIxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwpAQCAtNzEsNyArNzEsOCBAQAogCiBzdGF0aWMgdTMyIElHUF9SRUFEX01DSU5EKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCiB7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCXJldHVybiBSUzY5MF9SRUFEX01DSU5EKGRldl9wcml2LCBhZGRyKTsKIAllbHNlCiAJCXJldHVybiBSUzQ4MF9SRUFEX01DSU5EKGRldl9wcml2LCBhZGRyKTsKQEAgLTgyLDcgKzgzLDggQEAKIAogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSVjUxNV9NQ19GQl9MT0NBVElPTik7Ci0JZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJcmV0dXJuIFJTNjkwX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjkwX01DX0ZCX0xPQ0FUSU9OKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCXJldHVybiBSNTAwX1JFQURfTUNJTkQoZGV2X3ByaXYsIFI1MjBfTUNfRkJfTE9DQVRJT04pOwpAQCAtOTQsNyArOTYsOCBAQAogewogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwotCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApCisJZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCVJTNjkwX1dSSVRFX01DSU5EKFJTNjkwX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwogCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID4gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwpAQCAtMTA2LDcgKzEwOSw4IEBACiB7CiAJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKLQllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwogCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID4gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7CkBAIC0xMjIsMTUgKzEyNiwxNyBAQAogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KSB7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7Ci0JfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgewogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOwogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CiAJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpIHsKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7Ci0JfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSB7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQwMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0ODApKSB7CiAJCVJBREVPTl9XUklURShSQURFT05fQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKLQkJUkFERU9OX1dSSVRFKFJTNDgwX0FHUF9CQVNFXzIsIDApOworCQlSQURFT05fV1JJVEUoUlM0ODBfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSB7CiAJCVJBREVPTl9XUklURShSQURFT05fQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjIwMCkKQEAgLTM0Nyw2ICszNTMsNyBAQAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SMzUwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjM1MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYzODApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjMwMCBNaWNyb2NvZGVcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTM1Niw2ICszNjMsNyBAQAogCQkJCSAgICAgUjMwMF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIzKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjQxMCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjQwMCBNaWNyb2NvZGVcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTM2NCw4ICszNzIsOSBAQAogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCiAJCQkJICAgICBSNDIwX2NwX21pY3JvY29kZVtpXVswXSk7CiAJCX0KLQl9IGVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlM2OTAgTWljcm9jb2RlXG4iKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM2OTAvUlM3NDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwKIAkJCQkgICAgIFJTNjkwX2NwX21pY3JvY29kZVtpXVsxXSk7CkBAIC02MjYsOCArNjM1LDYgQEAKIAkJICAgICBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcpOwogI2VuZGlmCiAKLQkvKiBTdGFydCB3aXRoIGFzc3VtaW5nIHRoYXQgd3JpdGViYWNrIGRvZXNuJ3Qgd29yayAqLwotCWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc2NyYXRjaCByZWdpc3RlciBwb2ludGVyLiAgVGhpcyB3aWxsIGNhdXNlCiAJICogdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgdmFsdWVzIHRvIGJlIHdyaXR0ZW4gb3V0IHRvIG1lbW9yeQpAQCAtNjQ2LDggKzY1MywxOCBAQAogCVJBREVPTl9XUklURShSQURFT05fU0NSQVRDSF9VTVNLLCAweDcpOwogCiAJLyogVHVybiBvbiBidXMgbWFzdGVyaW5nICovCi0JdG1wID0gUkFERU9OX1JFQUQoUkFERU9OX0JVU19DTlRMKSAmIH5SQURFT05fQlVTX01BU1RFUl9ESVM7Ci0JUkFERU9OX1dSSVRFKFJBREVPTl9CVVNfQ05UTCwgdG1wKTsKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKKwkJLyogcnM0MDAsIHJzNjkwL3JzNzQwICovCisJCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM0MDBfQlVTX01BU1RFUl9ESVM7CisJCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CisJfSBlbHNlIGlmICghKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMzgwKSB8fAorCQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjQyMykpKSB7CisJCS8qIHIxeHgsIHIyeHgsIHIzMDAsIHIodikzNTAsIHI0MjAvcjQ4MSwgcnM0ODAgKi8KKwkJdG1wID0gUkFERU9OX1JFQUQoUkFERU9OX0JVU19DTlRMKSAmIH5SQURFT05fQlVTX01BU1RFUl9ESVM7CisJCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CisJfSAvKiBQQ0lFIGNhcmRzIGFwcGVhcnMgdG8gbm90IG5lZWQgdGhpcyAqLwogCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgPSBkZXZfcHJpdi0+c2NyYXRjaFswXSA9IDA7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0ZSQU1FX1JFRywgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOwpAQCAtNjc0LDYgKzY5MSw5IEBACiB7CiAJdTMyIHRtcDsKIAorCS8qIFN0YXJ0IHdpdGggYXNzdW1pbmcgdGhhdCB3cml0ZWJhY2sgZG9lc24ndCB3b3JrICovCisJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisKIAkvKiBXcml0ZWJhY2sgZG9lc24ndCBzZWVtIHRvIHdvcmsgZXZlcnl3aGVyZSwgdGVzdCBpdCBoZXJlIGFuZCBwb3NzaWJseQogCSAqIGVuYWJsZSBpdCBpZiBpdCBhcHBlYXJzIHRvIHdvcmsKIAkgKi8KQEAgLTcxOSw3ICs3MzksOCBAQAogCQkJICBkZXZfcHJpdi0+Z2FydF9zaXplKTsKIAogCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNDgwX01DX01JU0NfQ05UTCk7Ci0JCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCQlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCQlJR1BfV1JJVEVfTUNJTkQoUlM0ODBfTUNfTUlTQ19DTlRMLCAoUlM0ODBfR0FSVF9JTkRFWF9SRUdfRU4gfAogCQkJCQkJCSAgICAgUlM2OTBfQkxPQ0tfR0ZYX0QzX0VOKSk7CiAJCWVsc2UKQEAgLTgxMiw2ICs4MzMsNyBAQAogCXUzMiB0bXA7CiAKIAlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSB8fAogCSAgICAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUEdBUlQpKSB7CiAJCXJhZGVvbl9zZXRfaWdwZ2FydChkZXZfcHJpdiwgb24pOwogCQlyZXR1cm47CkBAIC0xMjg2LDcgKzEzMDgsNyBAQAogCXJhZGVvbl9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYpOwogCiAJcmFkZW9uX2RvX2VuZ2luZV9yZXNldChkZXYpOwotCXJhZGVvbl9lbmFibGVfaW50ZXJydXB0KGRldik7CisJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CiAKIAlEUk1fREVCVUcoInJhZGVvbl9kb19yZXN1bWVfY3AoKSBjb21wbGV0ZVxuIik7CiAKQEAgLTE3MDgsNiArMTczMCw3IEBACiAJY2FzZSBDSElQX1IzMDA6CiAJY2FzZSBDSElQX1IzNTA6CiAJY2FzZSBDSElQX1I0MjA6CisJY2FzZSBDSElQX1I0MjM6CiAJY2FzZSBDSElQX1JWNDEwOgogCWNhc2UgQ0hJUF9SVjUxNToKIAljYXNlIENISVBfUjUyMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggNjM3YmQ3Zi4uNzFhZjc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTUyLDYgKzUyLDI4IEBACiAJCSAgICAgICAgInIzMDAiKSk7CiB9CiAKK3N0YXRpYyBpbnQgcmFkZW9uX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBSZXN0b3JlIGludGVycnVwdCByZWdpc3RlcnMgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCBkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcpOworCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CiAJcmFkZW9uX1BDSV9JRFMKIH07CkBAIC01OSw4ICs4MSw3IEBACiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQogCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9QQ0lfRE1BIHwgRFJJVkVSX1NHIHwKLQkgICAgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0lSUV9TSEFSRUQgfAotCSAgICBEUklWRVJfSVJRX1ZCTCB8IERSSVZFUl9JUlFfVkJMMiwKKwkgICAgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0lSUV9TSEFSRUQsCiAJLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX3JhZGVvbl9idWZfcHJpdl90KSwKIAkubG9hZCA9IHJhZGVvbl9kcml2ZXJfbG9hZCwKIAkuZmlyc3RvcGVuID0gcmFkZW9uX2RyaXZlcl9maXJzdG9wZW4sCkBAIC02OSw4ICs5MCwxMSBAQAogCS5wb3N0Y2xvc2UgPSByYWRlb25fZHJpdmVyX3Bvc3RjbG9zZSwKIAkubGFzdGNsb3NlID0gcmFkZW9uX2RyaXZlcl9sYXN0Y2xvc2UsCiAJLnVubG9hZCA9IHJhZGVvbl9kcml2ZXJfdW5sb2FkLAotCS52Ymxhbmtfd2FpdCA9IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQsCi0JLnZibGFua193YWl0MiA9IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQyLAorCS5zdXNwZW5kID0gcmFkZW9uX3N1c3BlbmQsCisJLnJlc3VtZSA9IHJhZGVvbl9yZXN1bWUsCisJLmdldF92YmxhbmtfY291bnRlciA9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSByYWRlb25fZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSByYWRlb25fZGlzYWJsZV92YmxhbmssCiAJLmRyaV9saWJyYXJ5X25hbWUgPSBkcmlfbGlicmFyeV9uYW1lLAogCS5pcnFfcHJlaW5zdGFsbCA9IHJhZGVvbl9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCAwOTkzODE2Li40ZGJiODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMTIyLDkgKzEyMiwxMiBAQAogCUNISVBfUlYzNTAsCiAJQ0hJUF9SVjM4MCwKIAlDSElQX1I0MjAsCisJQ0hJUF9SNDIzLAogCUNISVBfUlY0MTAsCisJQ0hJUF9SUzQwMCwKIAlDSElQX1JTNDgwLAogCUNISVBfUlM2OTAsCisJQ0hJUF9SUzc0MCwKIAlDSElQX1JWNTE1LAogCUNISVBfUjUyMCwKIAlDSElQX1JWNTMwLApAQCAtMzc4LDE3ICszODEsMTcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKTsKIAogCQkJCS8qIHJhZGVvbl9pcnEuYyAqLworZXh0ZXJuIHZvaWQgcmFkZW9uX2lycV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIG1hc2ssIGludCBzdGF0ZSk7CiBleHRlcm4gaW50IHJhZGVvbl9pcnFfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IHJhZGVvbl9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKIGV4dGVybiB2b2lkIHJhZGVvbl9kb19yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiB1MzIgcmFkZW9uX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IHJhZGVvbl9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgcmFkZW9uX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCByYWRlb25fdmJsYW5rX2NydGNfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtMzk3LDE5ICs0MDAsMjIgQEAKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9maXJzdG9wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci1leHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9maWxlICogZmlscCk7CitleHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fZmlsZSAqIGZpbHBfcHJpdik7CitleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGxvbmcgcmFkZW9uX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIHIzMDBfY21kYnVmLmMgKi8KIGV4dGVybiB2b2lkIHIzMDBfaW5pdF9yZWdfZmxhZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQgcjMwMF9kb19jcF9jbWRidWYoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitleHRlcm4gaW50IHIzMDBfZG9fY3BfY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJICAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKiBjbWRidWYpOworCQkJICAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKmNtZGJ1Zik7CiAKIC8qIEZsYWdzIGZvciBzdGF0cy5ib3hlcwogICovCkBAIC00MzQsOCArNDQwLDMxIEBACiAjCWRlZmluZSBSQURFT05fU0NJU1NPUl8xX0VOQUJMRQkJKDEgPDwgMjkpCiAjCWRlZmluZSBSQURFT05fU0NJU1NPUl8yX0VOQUJMRQkJKDEgPDwgMzApCiAKKy8qCisgKiBQQ0lFIHJhZGVvbnMgKHJ2MzcwL3J2MzgwLCBydjQxMCwgcjQyMy9yNDMwL3I0ODAsIHI1eHgpCisgKiBkb24ndCBoYXZlIGFuIGV4cGxpY2l0IGJ1cyBtYXN0ZXJpbmcgZGlzYWJsZSBiaXQuICBJdCdzIGhhbmRsZWQKKyAqIGJ5IHRoZSBQQ0kgRC1zdGF0ZXMuICBQTUlfQk1fRElTIGRpc2FibGVzIEQtc3RhdGUgYnVzIG1hc3RlcgorICogaGFuZGxpbmcsIG5vdCBidXMgbWFzdGVyaW5nIGl0c2VsZi4KKyAqLwogI2RlZmluZSBSQURFT05fQlVTX0NOVEwJCQkweDAwMzAKKy8qIHIxeHgsIHIyeHgsIHIzMDAsIHIodikzNTAsIHI0MjAvcjQ4MSwgcnM0ODAgKi8KICMJZGVmaW5lIFJBREVPTl9CVVNfTUFTVEVSX0RJUwkJKDEgPDwgNikKKy8qIHJzNDAwLCByczY5MC9yczc0MCAqLworIwlkZWZpbmUgUlM0MDBfQlVTX01BU1RFUl9ESVMJCSgxIDw8IDE0KQorIwlkZWZpbmUgUlM0MDBfTVNJX1JFQVJNCQkgICAgICAgICgxIDw8IDIwKQorLyogc2VlIFJTNDgwX01TSV9SRUFSTSBpbiBBSUNfQ05UTCBmb3IgcnM0ODAgKi8KKworI2RlZmluZSBSQURFT05fQlVTX0NOVEwxCQkweDAwMzQKKyMJZGVmaW5lIFJBREVPTl9QTUlfQk1fRElTCQkoMSA8PCAyKQorIwlkZWZpbmUgUkFERU9OX1BNSV9JTlRfRElTCQkoMSA8PCAzKQorCisjZGVmaW5lIFJWMzcwX0JVU19DTlRMCQkJMHgwMDRjCisjCWRlZmluZSBSVjM3MF9QTUlfQk1fRElTCQkgICAgICAgICgxIDw8IDUpCisjCWRlZmluZSBSVjM3MF9QTUlfSU5UX0RJUwkJKDEgPDwgNikKKworI2RlZmluZSBSQURFT05fTVNJX1JFQVJNX0VOCQkweDAxNjAKKy8qIHJ2MzcwL3J2MzgwLCBydjQxMCwgcjQyMy9yNDMwL3I0ODAsIHI1eHggKi8KKyMJZGVmaW5lIFJWMzcwX01TSV9SRUFSTV9FTgkJKDEgPDwgMCkKIAogI2RlZmluZSBSQURFT05fQ0xPQ0tfQ05UTF9EQVRBCQkweDAwMGMKICMJZGVmaW5lIFJBREVPTl9QTExfV1JfRU4JCQkoMSA8PCA3KQpAQCAtNjIzLDYgKzY1Miw3IEBACiAjCWRlZmluZSBSQURFT05fU1dfSU5UX1RFU1QJCSgxIDw8IDI1KQogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9URVNUX0FDSwkJKDEgPDwgMjUpCiAjCWRlZmluZSBSQURFT05fU1dfSU5UX0ZJUkUJCSgxIDw8IDI2KQorIyAgICAgICBkZWZpbmUgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMgICAgICAgICAgKDEgPDwgMCkKIAogI2RlZmluZSBSQURFT05fSE9TVF9QQVRIX0NOVEwJCTB4MDEzMAogIwlkZWZpbmUgUkFERU9OX0hEUF9TT0ZUX1JFU0VUCQkoMSA8PCAyNikKQEAgLTkwNyw2ICs5MzcsNyBAQAogCiAjZGVmaW5lIFJBREVPTl9BSUNfQ05UTAkJCTB4MDFkMAogIwlkZWZpbmUgUkFERU9OX1BDSUdBUlRfVFJBTlNMQVRFX0VOCSgxIDw8IDApCisjCWRlZmluZSBSUzQ4MF9NU0lfUkVBUk0JICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIFJBREVPTl9BSUNfU1RBVAkJCTB4MDFkNAogI2RlZmluZSBSQURFT05fQUlDX1BUX0JBU0UJCTB4MDFkOAogI2RlZmluZSBSQURFT05fQUlDX0xPX0FERFIJCTB4MDFkYwpAQCAtMTExNiw2ICsxMTQ3LDkgQEAKIAogI2RlZmluZSBSMjAwX1ZBUF9QVlNfQ05UTF8xICAgICAgICAgICAgICAgMHgyMkQwCiAKKyNkZWZpbmUgUkFERU9OX0NSVENfQ1JOVF9GUkFNRSAweDAyMTQKKyNkZWZpbmUgUkFERU9OX0NSVEMyX0NSTlRfRlJBTUUgMHgwMzE0CisKICNkZWZpbmUgUjUwMF9EMUNSVENfU1RBVFVTIDB4NjA5YwogI2RlZmluZSBSNTAwX0QyQ1JUQ19TVEFUVVMgMHg2ODljCiAjZGVmaW5lIFI1MDBfQ1JUQ19WX0JMQU5LICgxPDwwKQpAQCAtMTIwMCw3ICsxMjM0LDggQEAKIAogI2RlZmluZSBJR1BfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSAgICAgICBcCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fCAgIFwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSAgICAgIFwKIAkJUlM2OTBfV1JJVEVfTUNJTkQoYWRkciwgdmFsKTsJCQkJXAogCWVsc2UJCQkJCQkJCVwKIAkJUlM0ODBfV1JJVEVfTUNJTkQoYWRkciwgdmFsKTsJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwppbmRleCBlZTQwZDE5Li41MDc5ZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwpAQCAtMjcsNyArMjcsNyBAQAogICoKICAqIEF1dGhvcnM6CiAgKiAgICBLZWl0aCBXaGl0d2VsbCA8a2VpdGhAdHVuZ3N0ZW5ncmFwaGljcy5jb20+Ci0gKiAgICBNaWNoZWwgRMOkbnplciA8bWljaGVsQGRhZW56ZXIubmV0PgorICogICAgTWljaGVsIETvv716ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KICAqLwogCiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtMzUsMTIgKzM1LDEyOCBAQAogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAKLXN0YXRpYyBfX2lubGluZV9fIHUzMiByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAotCQkJCQkgICAgICB1MzIgbWFzaykKK3ZvaWQgcmFkZW9uX2lycV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIG1hc2ssIGludCBzdGF0ZSkKIHsKLQl1MzIgaXJxcyA9IFJBREVPTl9SRUFEKFJBREVPTl9HRU5fSU5UX1NUQVRVUykgJiBtYXNrOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoc3RhdGUpCisJCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyB8PSBtYXNrOworCWVsc2UKKwkJZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnICY9IH5tYXNrOworCisJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIGRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHI1MDBfdmJsX2lycV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIG1hc2ssIGludCBzdGF0ZSkKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHN0YXRlKQorCQlkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcgfD0gbWFzazsKKwllbHNlCisJCWRldl9wcml2LT5yNTAwX2Rpc3BfaXJxX3JlZyAmPSB+bWFzazsKKworCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnKTsKK30KKworaW50IHJhZGVvbl9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDFNT0RFX0lOVF9NQVNLLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMk1PREVfSU5UX01BU0ssIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQ19WQkxBTktfTUFTSywgMSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQzJfVkJMQU5LX01BU0ssIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByYWRlb25fZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJCXN3aXRjaCAoY3J0YykgeworCQljYXNlIDA6CisJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMU1PREVfSU5UX01BU0ssIDApOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QyTU9ERV9JTlRfTUFTSywgMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigidHJpZWQgdG8gZW5hYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgY3J0YyAlZFxuIiwKKwkJCQkgIGNydGMpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQ19WQkxBTktfTUFTSywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQzJfVkJMQU5LX01BU0ssIDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHUzMiByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiAqcjUwMF9kaXNwX2ludCkKK3sKKwl1MzIgaXJxcyA9IFJBREVPTl9SRUFEKFJBREVPTl9HRU5fSU5UX1NUQVRVUyk7CisJdTMyIGlycV9tYXNrID0gUkFERU9OX1NXX0lOVF9URVNUOworCisJKnI1MDBfZGlzcF9pbnQgPSAwOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJCS8qIHZibCBpbnRlcnJ1cHRzIGluIGEgZGlmZmVyZW50IHBsYWNlICovCisKKwkJaWYgKGlycXMgJiBSNTAwX0RJU1BMQVlfSU5UX1NUQVRVUykgeworCQkJLyogaWYgYSBkaXNwbGF5IGludGVycnVwdCAqLworCQkJdTMyIGRpc3BfaXJxOworCisJCQlkaXNwX2lycSA9IFJBREVPTl9SRUFEKFI1MDBfRElTUF9JTlRFUlJVUFRfU1RBVFVTKTsKKworCQkJKnI1MDBfZGlzcF9pbnQgPSBkaXNwX2lycTsKKwkJCWlmIChkaXNwX2lycSAmIFI1MDBfRDFfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCQlSQURFT05fV1JJVEUoUjUwMF9EMU1PREVfVkJMQU5LX1NUQVRVUywgUjUwMF9WQkxBTktfQUNLKTsKKwkJCWlmIChkaXNwX2lycSAmIFI1MDBfRDJfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCQlSQURFT05fV1JJVEUoUjUwMF9EMk1PREVfVkJMQU5LX1NUQVRVUywgUjUwMF9WQkxBTktfQUNLKTsKKwkJfQorCQlpcnFfbWFzayB8PSBSNTAwX0RJU1BMQVlfSU5UX1NUQVRVUzsKKwl9IGVsc2UKKwkJaXJxX21hc2sgfD0gUkFERU9OX0NSVENfVkJMQU5LX1NUQVQgfCBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQ7CisKKwlpcnFzICY9CWlycV9tYXNrOworCiAJaWYgKGlycXMpCiAJCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9TVEFUVVMsIGlycXMpOworCiAJcmV0dXJuIGlycXM7CiB9CiAKQEAgLTY4LDQ0ICsxODQsMzMgQEAKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQogCSAgICAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgc3RhdDsKKwl1MzIgcjUwMF9kaXNwX2ludDsKIAogCS8qIE9ubHkgY29uc2lkZXIgdGhlIGJpdHMgd2UncmUgaW50ZXJlc3RlZCBpbiAtIG90aGVycyBjb3VsZCBiZSB1c2VkCiAJICogb3V0c2lkZSB0aGUgRFJNCiAJICovCi0Jc3RhdCA9IHJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCAoUkFERU9OX1NXX0lOVF9URVNUX0FDSyB8Ci0JCQkJCQkgIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUIHwKLQkJCQkJCSAgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKSk7CisJc3RhdCA9IHJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCAmcjUwMF9kaXNwX2ludCk7CiAJaWYgKCFzdGF0KQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlzdGF0ICY9IGRldl9wcml2LT5pcnFfZW5hYmxlX3JlZzsKIAogCS8qIFNXIGludGVycnVwdCAqLwotCWlmIChzdGF0ICYgUkFERU9OX1NXX0lOVF9URVNUKSB7CisJaWYgKHN0YXQgJiBSQURFT05fU1dfSU5UX1RFU1QpCiAJCURSTV9XQUtFVVAoJmRldl9wcml2LT5zd2lfcXVldWUpOwotCX0KIAogCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8KLQlpZiAoc3RhdCAmIChSQURFT05fQ1JUQ19WQkxBTktfU1RBVHxSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpKSB7Ci0JCWludCB2YmxhbmtfY3J0YyA9IGRldl9wcml2LT52YmxhbmtfY3J0YzsKLQotCQlpZiAoKHZibGFua19jcnRjICYKLQkJICAgICAoRFJNX1JBREVPTl9WQkxBTktfQ1JUQzEgfCBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikpID09Ci0JCSAgICAoRFJNX1JBREVPTl9WQkxBTktfQ1JUQzEgfCBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikpIHsKLQkJCWlmIChzdGF0ICYgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQkJaWYgKHN0YXQgJiBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQyKTsKLQkJfSBlbHNlIGlmICgoKHN0YXQgJiBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCkgJiYKLQkJCSAgICh2YmxhbmtfY3J0YyAmIERSTV9SQURFT05fVkJMQU5LX0NSVEMxKSkgfHwKLQkJCSAgICgoc3RhdCAmIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkgJiYKLQkJCSAgICAodmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikpKQotCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCi0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlpZiAocjUwMF9kaXNwX2ludCAmIFI1MDBfRDFfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CisJCWlmIChyNTAwX2Rpc3BfaW50ICYgUjUwMF9EMl9WQkxBTktfSU5URVJSVVBUKQorCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdCAmIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUKQorCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKKwkJaWYgKHN0YXQgJiBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpCisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpOwogCX0KLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTQ0LDU0ICsyNDksMzEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJCXVuc2lnbmVkIGludCAqc2VxdWVuY2UsIGludCBjcnRjKQordTMyIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KLQkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQgaW50IGN1cl92Ymxhbms7Ci0JaW50IHJldCA9IDA7Ci0JaW50IGFjayA9IDA7Ci0JYXRvbWljX3QgKmNvdW50ZXI7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwogCWlmICghZGV2X3ByaXYpIHsKIAkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjcnRjID09IERSTV9SQURFT05fVkJMQU5LX0NSVEMxKSB7Ci0JCWNvdW50ZXIgPSAmZGV2LT52YmxfcmVjZWl2ZWQ7Ci0JCWFjayB8PSBSQURFT05fQ1JUQ19WQkxBTktfU1RBVDsKLQl9IGVsc2UgaWYgKGNydGMgPT0gRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpIHsKLQkJY291bnRlciA9ICZkZXYtPnZibF9yZWNlaXZlZDI7Ci0JCWFjayB8PSBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQ7Ci0JfSBlbHNlCisJaWYgKGNydGMgPCAwIHx8IGNydGMgPiAxKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBjcnRjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYsIGFjayk7Ci0KLQlkZXZfcHJpdi0+c3RhdHMuYm94ZXMgfD0gUkFERU9OX0JPWF9XQUlUX0lETEU7Ci0KLQkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgotCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFuIHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycwotCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLgotCSAqLwotCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoY291bnRlcikpCi0JCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsIERSTV9SQURFT05fVkJMQU5LX0NSVEMxKTsKLX0KLQotaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCi17Ci0JcmV0dXJuIHJhZGVvbl9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoZGV2LCBzZXF1ZW5jZSwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJCWlmIChjcnRjID09IDApCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUjUwMF9EMUNSVENfRlJBTUVfQ09VTlQpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUjUwMF9EMkNSVENfRlJBTUVfQ09VTlQpOworCX0gZWxzZSB7CisJCWlmIChjcnRjID09IDApCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX0NSVENfQ1JOVF9GUkFNRSk7CisJCWVsc2UKKwkJCXJldHVybiBSQURFT05fUkVBRChSQURFT05fQ1JUQzJfQ1JOVF9GUkFNRSk7CisJfQogfQogCiAvKiBOZWVkcyB0aGUgbG9jayBhcyBpdCB0b3VjaGVzIHRoZSByaW5nLgpAQCAtMjM0LDQ2ICszMTYsNDEgQEAKIAlyZXR1cm4gcmFkZW9uX3dhaXRfaXJxKGRldiwgaXJxd2FpdC0+aXJxX3NlcSk7CiB9CiAKLXZvaWQgcmFkZW9uX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyA9IFJBREVPTl9TV19JTlRfRU5BQkxFOwotCWlmIChkZXZfcHJpdi0+dmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkKLQkJZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnIHw9IFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLOwotCi0JaWYgKGRldl9wcml2LT52YmxhbmtfY3J0YyAmIERSTV9SQURFT05fVkJMQU5LX0NSVEMyKQotCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgfD0gUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLOwotCi0JUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIGRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyk7Ci0JZGV2X3ByaXYtPmlycV9lbmFibGVkID0gMTsKLX0KLQogLyogZHJtX2RtYS5oIGhvb2tzCiAqLwogdm9pZCByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9CiAJICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBkdW1teTsKIAogCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKQorCQlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIDApOwogCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIAogCS8qIENsZWFyIGJpdHMgaWYgdGhleSdyZSBhbHJlYWR5IGhpZ2ggKi8KLQlyYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgKFJBREVPTl9TV19JTlRfVEVTVF9BQ0sgfAotCQkJCQkgICBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCB8Ci0JCQkJCSAgIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkpOworCXJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCAmZHVtbXkpOwogfQogCi12b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KIAkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKIAogCWF0b21pY19zZXQoJmRldl9wcml2LT5zd2lfZW1pdHRlZCwgMCk7CiAJRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKIAotCXJhZGVvbl9lbmFibGVfaW50ZXJydXB0KGRldik7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgMik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4MDAxZmZmZmY7CisKKwlyYWRlb25faXJxX3NldF9zdGF0ZShkZXYsIFJBREVPTl9TV19JTlRfRU5BQkxFLCAxKTsKKworCXJldHVybiAwOwogfQogCiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTI4NSw2ICszNjIsOCBAQAogCiAJZGV2X3ByaXYtPmlycV9lbmFibGVkID0gMDsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKQorCQlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIDApOwogCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLwogCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIH0KQEAgLTI5MywxOCArMzcyLDggQEAKIGludCByYWRlb25fdmJsYW5rX2NydGNfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIGZsYWc7Ci0JdTMyIHZhbHVlOwogCi0JZmxhZyA9IFJBREVPTl9SRUFEKFJBREVPTl9HRU5fSU5UX0NOVEwpOwotCXZhbHVlID0gMDsKLQotCWlmIChmbGFnICYgUkFERU9OX0NSVENfVkJMQU5LX01BU0spCi0JCXZhbHVlIHw9IERSTV9SQURFT05fVkJMQU5LX0NSVEMxOwotCi0JaWYgKGZsYWcgJiBSQURFT05fQ1JUQzJfVkJMQU5LX01BU0spCi0JCXZhbHVlIHw9IERSTV9SQURFT05fVkJMQU5LX0NSVEMyOwotCXJldHVybiB2YWx1ZTsKKwlyZXR1cm4gZGV2X3ByaXYtPnZibGFua19jcnRjOwogfQogCiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX3NldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQ2NF90IHZhbHVlKQpAQCAtMzE1LDYgKzM4NCw1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlkZXZfcHJpdi0+dmJsYW5rX2NydGMgPSAodW5zaWduZWQgaW50KXZhbHVlOwotCXJhZGVvbl9lbmFibGVfaW50ZXJydXB0KGRldik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCAxMWMxNDZiLi41ZDcxNTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTI5OTcsNyArMjk5Nyw3IEBACiAJCXZhbHVlID0gR0VUX1NDUkFUQ0goMik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0lSUV9OUjoKLQkJdmFsdWUgPSBkZXYtPmlycTsKKwkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9HQVJUX0JBU0U6CiAJCXZhbHVlID0gZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jIGIvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYwppbmRleCBiMzg3ODc3Li5hZjIyMTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgQUdQX1RZUEUgMQogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpCisjaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKSB8fCBkZWZpbmVkKENPTkZJR19GQl9TSVNfTU9EVUxFKQogLyogZmIgbWFuYWdlbWVudCB2aWEgZmIgZGV2aWNlICovCiAKICNkZWZpbmUgU0lTX01NX0FMSUdOX1NISUZUIDAKQEAgLTU3LDcgKzU3LDcgQEAKIAlpZiAocmVxLnNpemUgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAJZWxzZQotCQlyZXR1cm4gKHZvaWQgKil+cmVxLm9mZnNldDsKKwkJcmV0dXJuICh2b2lkICopKHVuc2lnbmVkIGxvbmcpfnJlcS5vZmZzZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNpc19zbWFuX21tX2ZyZWUodm9pZCAqcHJpdmF0ZSwgdm9pZCAqcmVmKQpAQCAtNzUsMTIgKzc1LDEyIEBACiAJcmV0dXJuIH4oKHVuc2lnbmVkIGxvbmcpcmVmKTsKIH0KIAotI2Vsc2UgLyogQ09ORklHX0ZCX1NJUyAqLworI2Vsc2UgLyogQ09ORklHX0ZCX1NJU1tfTU9EVUxFXSAqLwogCiAjZGVmaW5lIFNJU19NTV9BTElHTl9TSElGVCA0CiAjZGVmaW5lIFNJU19NTV9BTElHTl9NQVNLICggKDEgPDwgU0lTX01NX0FMSUdOX1NISUZUKSAtIDEpCiAKLSNlbmRpZiAvKiBDT05GSUdfRkJfU0lTICovCisjZW5kaWYgLyogQ09ORklHX0ZCX1NJU1tfTU9EVUxFXSAqLwogCiBzdGF0aWMgaW50IHNpc19mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewpAQCAtODksNyArODksNyBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykgfHwgZGVmaW5lZChDT05GSUdfRkJfU0lTX01PRFVMRSkKIAl7CiAJCXN0cnVjdCBkcm1fc21hbl9tbSBzbWFuX21tOwogCQlzbWFuX21tLnByaXZhdGUgPSAodm9pZCAqKTB4RkZGRkZGRkY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCmluZGV4IDgwYzAxY2QuLjA5OTNiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCkBAIC00MCwxMSArNDAsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwgRFJJVkVSX0hBVkVfSVJRIHwKLQkgICAgRFJJVkVSX0lSUV9TSEFSRUQgfCBEUklWRVJfSVJRX1ZCTCwKKwkgICAgRFJJVkVSX0lSUV9TSEFSRUQsCiAJLmxvYWQgPSB2aWFfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IHZpYV9kcml2ZXJfdW5sb2FkLAogCS5jb250ZXh0X2R0b3IgPSB2aWFfZmluYWxfY29udGV4dCwKLQkudmJsYW5rX3dhaXQgPSB2aWFfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSB2aWFfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gdmlhX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gdmlhX2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNTksMTcgKzYxLDE3IEBACiAJLmdldF9yZWdfb2ZzID0gZHJtX2NvcmVfZ2V0X3JlZ19vZnMsCiAJLmlvY3RscyA9IHZpYV9pb2N0bHMsCiAJLmZvcHMgPSB7Ci0JCSAub3duZXIgPSBUSElTX01PRFVMRSwKLQkJIC5vcGVuID0gZHJtX29wZW4sCi0JCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAotCQkgLm1tYXAgPSBkcm1fbW1hcCwKLQkJIC5wb2xsID0gZHJtX3BvbGwsCi0JCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKLQl9LAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9wZW4gPSBkcm1fb3BlbiwKKwkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkubW1hcCA9IGRybV9tbWFwLAorCQkucG9sbCA9IGRybV9wb2xsLAorCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJfSwKIAkucGNpX2RyaXZlciA9IHsKLQkJIC5uYW1lID0gRFJJVkVSX05BTUUsCi0JCSAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmgKaW5kZXggMmRhYWU4MS4uY2FmY2I4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmgKQEAgLTc1LDYgKzc1LDcgQEAKIAlzdHJ1Y3QgdGltZXZhbCBsYXN0X3ZibGFuazsKIAlpbnQgbGFzdF92YmxhbmtfdmFsaWQ7CiAJdW5zaWduZWQgdXNlY19wZXJfdmJsYW5rOworCWF0b21pY190IHZibF9yZWNlaXZlZDsKIAlkcm1fdmlhX3N0YXRlX3QgaGNfc3RhdGU7CiAJY2hhciBwY2lfYnVmW1ZJQV9QQ0lfQlVGX1NJWkVdOwogCWNvbnN0IHVpbnQzMl90ICpmaXJlX29mZnNldHNbVklBX0ZJUkVfQlVGX1NJWkVdOwpAQCAtMTMwLDIxICsxMzEsMjQgQEAKIGV4dGVybiBpbnQgdmlhX2ZpbmFsX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBjb250ZXh0KTsKIAogZXh0ZXJuIGludCB2aWFfZG9fY2xlYW51cF9tYXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIGludCB2aWFfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiB1MzIgdmlhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IHZpYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIHZpYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiAKIGV4dGVybiBpcnFyZXR1cm5fdCB2aWFfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogCiBleHRlcm4gaW50IHZpYV9kbWFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCB2aWFfaW5pdF9jb21tYW5kX3ZlcmlmaWVyKHZvaWQpOwogZXh0ZXJuIGludCB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgdmlhX2luaXRfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1leHRlcm4gdm9pZCB2aWFfY2xlYW51cF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKLWV4dGVybiB2b2lkIHZpYV9yZWxlYXNlX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCBjb250ZXh0KTsKK2V4dGVybiB2b2lkIHZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCB2aWFfY2xlYW51cF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdmlhX3JlbGVhc2VfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgY29udGV4dCk7CiAKLWV4dGVybiB2b2lkIHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiB2b2lkIHZpYV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIGV4dGVybiB2b2lkIHZpYV9kbWFibGl0X2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGVuZ2luZSwgaW50IGZyb21faXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKaW5kZXggYzZiYjk3OC4uNjY1ZDMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKQEAgLTQzLDcgKzQzLDcgQEAKICNkZWZpbmUgVklBX1JFR19JTlRFUlJVUFQgICAgICAgMHgyMDAKIAogLyogVklBX1JFR19JTlRFUlJVUFQgKi8KLSNkZWZpbmUgVklBX0lSUV9HTE9CQUwgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFZJQV9JUlFfR0xPQkFMCSAgKDEgPDwgMzEpCiAjZGVmaW5lIFZJQV9JUlFfVkJMQU5LX0VOQUJMRSAgICgxIDw8IDE5KQogI2RlZmluZSBWSUFfSVJRX1ZCTEFOS19QRU5ESU5HICAoMSA8PCAzKQogI2RlZmluZSBWSUFfSVJRX0hRVjBfRU5BQkxFICAgICAoMSA8PCAxMSkKQEAgLTY4LDE2ICs2OCwxNSBAQAogCiBzdGF0aWMgbWFza2FycmF5X3QgdmlhX3Byb19ncm91cF9hX2lycXNbXSA9IHsKIAl7VklBX0lSUV9IUVYwX0VOQUJMRSwgVklBX0lSUV9IUVYwX1BFTkRJTkcsIDB4MDAwMDAzRDAsIDB4MDAwMDgwMTAsCi0JIDB4MDAwMDAwMDB9LAorCSAweDAwMDAwMDAwIH0sCiAJe1ZJQV9JUlFfSFFWMV9FTkFCTEUsIFZJQV9JUlFfSFFWMV9QRU5ESU5HLCAweDAwMDAxM0QwLCAweDAwMDA4MDEwLAotCSAweDAwMDAwMDAwfSwKKwkgMHgwMDAwMDAwMCB9LAogCXtWSUFfSVJRX0RNQTBfVERfRU5BQkxFLCBWSUFfSVJRX0RNQTBfVERfUEVORElORywgVklBX1BDSV9ETUFfQ1NSMCwKIAkgVklBX0RNQV9DU1JfVEEgfCBWSUFfRE1BX0NTUl9URCwgMHgwMDAwMDAwOH0sCiAJe1ZJQV9JUlFfRE1BMV9URF9FTkFCTEUsIFZJQV9JUlFfRE1BMV9URF9QRU5ESU5HLCBWSUFfUENJX0RNQV9DU1IxLAogCSBWSUFfRE1BX0NTUl9UQSB8IFZJQV9ETUFfQ1NSX1RELCAweDAwMDAwMDA4fSwKIH07Ci1zdGF0aWMgaW50IHZpYV9udW1fcHJvX2dyb3VwX2EgPQotICAgIHNpemVvZih2aWFfcHJvX2dyb3VwX2FfaXJxcykgLyBzaXplb2YobWFza2FycmF5X3QpOworc3RhdGljIGludCB2aWFfbnVtX3Byb19ncm91cF9hID0gQVJSQVlfU0laRSh2aWFfcHJvX2dyb3VwX2FfaXJxcyk7CiBzdGF0aWMgaW50IHZpYV9pcnFtYXBfcHJvX2dyb3VwX2FbXSA9IHswLCAxLCAtMSwgMiwgLTEsIDN9OwogCiBzdGF0aWMgbWFza2FycmF5X3QgdmlhX3VuaWNocm9tZV9pcnFzW10gPSB7CkBAIC04NiwxNCArODUsMjQgQEAKIAl7VklBX0lSUV9ETUExX1REX0VOQUJMRSwgVklBX0lSUV9ETUExX1REX1BFTkRJTkcsIFZJQV9QQ0lfRE1BX0NTUjEsCiAJIFZJQV9ETUFfQ1NSX1RBIHwgVklBX0RNQV9DU1JfVEQsIDB4MDAwMDAwMDh9CiB9Owotc3RhdGljIGludCB2aWFfbnVtX3VuaWNocm9tZSA9IHNpemVvZih2aWFfdW5pY2hyb21lX2lycXMpIC8gc2l6ZW9mKG1hc2thcnJheV90KTsKK3N0YXRpYyBpbnQgdmlhX251bV91bmljaHJvbWUgPSBBUlJBWV9TSVpFKHZpYV91bmljaHJvbWVfaXJxcyk7CiBzdGF0aWMgaW50IHZpYV9pcnFtYXBfdW5pY2hyb21lW10gPSB7LTEsIC0xLCAtMSwgMCwgLTEsIDF9OwogCisKIHN0YXRpYyB1bnNpZ25lZCB0aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKm5vdywgc3RydWN0IHRpbWV2YWwgKnRoZW4pCiB7CiAJcmV0dXJuIChub3ctPnR2X3VzZWMgPj0gdGhlbi0+dHZfdXNlYykgPwotCSAgICBub3ctPnR2X3VzZWMgLSB0aGVuLT50dl91c2VjIDoKLQkgICAgMTAwMDAwMCAtICh0aGVuLT50dl91c2VjIC0gbm93LT50dl91c2VjKTsKKwkJbm93LT50dl91c2VjIC0gdGhlbi0+dHZfdXNlYyA6CisJCTEwMDAwMDAgLSAodGhlbi0+dHZfdXNlYyAtIG5vdy0+dHZfdXNlYyk7Cit9CisKK3UzMiB2aWFfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGNydGMgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOwogfQogCiBpcnFyZXR1cm5fdCB2aWFfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKQEAgLTEwOCwyMyArMTE3LDIyIEBACiAKIAlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CiAJaWYgKHN0YXR1cyAmIFZJQV9JUlFfVkJMQU5LX1BFTkRJTkcpIHsKLQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpICYgMHgwRikpIHsKKwkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7CisJCWlmICghKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKSAmIDB4MEYpKSB7CiAJCQlkb19nZXR0aW1lb2ZkYXkoJmN1cl92YmxhbmspOwogCQkJaWYgKGRldl9wcml2LT5sYXN0X3ZibGFua192YWxpZCkgewogCQkJCWRldl9wcml2LT51c2VjX3Blcl92YmxhbmsgPQotCQkJCSAgICB0aW1lX2RpZmYoJmN1cl92YmxhbmssCi0JCQkJCSAgICAgICZkZXZfcHJpdi0+bGFzdF92YmxhbmspID4+IDQ7CisJCQkJCXRpbWVfZGlmZigmY3VyX3ZibGFuaywKKwkJCQkJCSAgJmRldl9wcml2LT5sYXN0X3ZibGFuaykgPj4gNDsKIAkJCX0KIAkJCWRldl9wcml2LT5sYXN0X3ZibGFuayA9IGN1cl92Ymxhbms7CiAJCQlkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQgPSAxOwogCQl9Ci0JCWlmICghKGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkgJiAweEZGKSkgeworCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCkgJiAweEZGKSkgewogCQkJRFJNX0RFQlVHKCJVUyBwZXIgdmJsYW5rIGlzOiAldVxuIiwKIAkJCQkgIGRldl9wcml2LT51c2VjX3Blcl92YmxhbmspOwogCQl9Ci0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJaGFuZGxlZCA9IDE7CiAJfQogCkBAIC0xNDUsNiArMTUzLDcgQEAKIAkvKiBBY2tub3dsZWdlIGludGVycnVwdHMgKi8KIAlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyk7CiAKKwogCWlmIChoYW5kbGVkKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJZWxzZQpAQCAtMTYzLDMxICsxNzIsMzQgQEAKIAl9CiB9CiAKLWludCB2aWFfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IHZpYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHN0YXR1czsKIAotCURSTV9ERUJVRygiXG4iKTsKLQlpZiAoIWRldl9wcml2KSB7Ci0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOworCWlmIChjcnRjICE9IDApIHsKKwkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICVkXG4iLCBfX2Z1bmNfXywgY3J0Yyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXZpYWRydl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2KTsKKwlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CisJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgJiBWSUFfSVJRX1ZCTEFOS19FTkFCTEUpOwogCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KLQkgKi8KKwlWSUFfV1JJVEU4KDB4ODNkNCwgMHgxMSk7CisJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpIHwgMHgzMCk7CiAKLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpIC0KLQkJICAgICAgKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKKwlyZXR1cm4gMDsKK30KIAotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0JcmV0dXJuIHJldDsKK3ZvaWQgdmlhX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlWSUFfV1JJVEU4KDB4ODNkNCwgMHgxMSk7CisJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpICYgfjB4MzApOworCisJaWYgKGNydGMgIT0gMCkKKwkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICVkXG4iLCBfX2Z1bmNfXywgY3J0Yyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIzOSw2ICsyNTEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKwogLyoKICAqIGRybV9kbWEuaCBob29rcwogICovCkBAIC0yOTIsMjMgKzMwNSwyNSBAQAogCX0KIH0KIAotdm9pZCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBzdGF0dXM7CiAKLQlEUk1fREVCVUcoIlxuIik7Ci0JaWYgKGRldl9wcml2KSB7Ci0JCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKLQkJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgfCBWSUFfSVJRX0dMT0JBTAotCQkJICB8IGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spOworCURSTV9ERUJVRygidmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGxcbiIpOworCWlmICghZGV2X3ByaXYpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIFNvbWUgbWFnaWMsIG9oIGZvciBzb21lIGRhdGEgc2hlZXRzICEgKi8KKwlkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKKwlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CisJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgfCBWSUFfSVJRX0dMT0JBTAorCQkgIHwgZGV2X3ByaXYtPmlycV9lbmFibGVfbWFzayk7CiAKLQkJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOwotCQlWSUFfV1JJVEU4KDB4ODNkNSwgVklBX1JFQUQ4KDB4ODNkNSkgfCAweDMwKTsKKwkvKiBTb21lIG1hZ2ljLCBvaCBmb3Igc29tZSBkYXRhIHNoZWV0cyAhICovCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSB8IDB4MzApOwogCi0JfQorCXJldHVybiAwOwogfQogCiB2b2lkIHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTMzOSw5ICszNTQsNiBAQAogCWRybV92aWFfaXJxX3QgKmN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CiAJaW50IGZvcmNlX3NlcXVlbmNlOwogCi0JaWYgKCFkZXYtPmlycSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoaXJxd2FpdC0+cmVxdWVzdC5pcnEgPj0gZGV2X3ByaXYtPm51bV9pcnFzKSB7CiAJCURSTV9FUlJPUigiVHJ5aW5nIHRvIHdhaXQgb24gdW5rbm93biBpcnEgJWRcbiIsCiAJCQkgIGlycXdhaXQtPnJlcXVlc3QuaXJxKTsKQEAgLTM1Miw3ICszNjQsOCBAQAogCiAJc3dpdGNoIChpcnF3YWl0LT5yZXF1ZXN0LnR5cGUgJiB+VklBX0lSUV9GTEFHU19NQVNLKSB7CiAJY2FzZSBWSUFfSVJRX1JFTEFUSVZFOgotCQlpcnF3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlICs9IGF0b21pY19yZWFkKCZjdXJfaXJxLT5pcnFfcmVjZWl2ZWQpOworCQlpcnF3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlICs9CisJCQlhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKIAkJaXJxd2FpdC0+cmVxdWVzdC50eXBlICY9IH5fRFJNX1ZCTEFOS19SRUxBVElWRTsKIAljYXNlIFZJQV9JUlFfQUJTT0xVVEU6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMKaW5kZXggZTY0MDk0OS4uZjY5NGNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCkBAIC05Myw4ICs5Myw3IEBACiAJLyogTGFzdCBjb250ZXh0LCBwZXJmb3JtIGNsZWFudXAgKi8KIAlpZiAoZGV2LT5jdHhfY291bnQgPT0gMSAmJiBkZXYtPmRldl9wcml2YXRlKSB7CiAJCURSTV9ERUJVRygiTGFzdCBDb250ZXh0XG4iKTsKLQkJaWYgKGRldi0+aXJxKQotCQkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAkJdmlhX2NsZWFudXBfZnV0ZXgoZGV2X3ByaXYpOwogCQl2aWFfZG9fY2xlYW51cF9tYXAoZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IDFkM2I4YTMuLjcwNWE0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7Ci0JCQl3YXJuKCJvdXRwdXQgcXVldWVpbmcgZmFpbGVkIik7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCk7CkBAIC00NTUsNyArNDU1LDcgQEAKIAkJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKLQkJCXdhcm4oImNvbnRyb2wgcXVldWVpbmcgZmFpbGVkIik7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJjb250cm9sIHF1ZXVlaW5nIGZhaWxlZFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0ucmF3X3JlcG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggZWJhY2MwYS4uNmRlMWUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNTEwLDExICs1MTAsOSBAQAogCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05MCwKLQkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIE1heGltIE1BWDY2NTcsCi0JICBNQVg2NjU4LCBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxIHNlbnNvciBjaGlwcy4KLQotCSAgVGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjEgc2Vuc29yIGNoaXAgaXMgYWxzbyBzdXBwb3J0ZWQsIGJ1dCBvbmx5Ci0JICBpZiBmb3VuZCBpbiBBRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZS4KKwkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIEFEVDc0NjEsIGFuZCBNYXhpbQorCSAgTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwgTUFYNjY4MCBhbmQKKwkgIE1BWDY2ODEgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI2LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwppbmRleCA3ZmUyNDQxLi5mZjdkZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwpAQCAtMjc5LDcgKzI3OSw2IEBACiAJdTggZmFuX21pbls4XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggZmFuX2Rpdls4XTsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAlzdHJ1Y3QgcHdtX2RhdGEgcHdtMTsJLyogUHdtIGNvbnRyb2wgdmFsdWVzICovCi0JaW50IHZpZDsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAl1OCB2cm07CQkJLyogVlJNIHZlcnNpb24gKi8KIAl1OCBhbmFsb2dfb3V0OwkJLyogUmVnaXN0ZXIgdmFsdWUgKERBQykgKi8KIAlsb25nIGFsYXJtczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJHUElPIGNvbmZpZyBpczoiKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkdQSU8gY29uZmlnIGlzOlxuIik7CiAJZm9yIChpID0gMDtpIDw9IDc7KytpKSB7CiAJCWlmIChkYXRhLT5jb25maWcyICYgKDEgPDwgaSkpIHsKIAkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXHQlc0dQJXMlZFxuIiwKQEAgLTY5Nyw4ICs2OTYsNiBAQAogCQlkYXRhLT5sYXN0X2NvbmZpZyA9IGppZmZpZXM7CiAJfTsgLyogbGFzdF9jb25maWcgKi8KIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKLQlkYXRhLT52aWQgPSAoZGF0YS0+Z3BpbyA+PiAxMSkgJiAweDFmOwogCWRhdGEtPnZhbGlkID0gMTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gZGF0YTsKQEAgLTEyMTUsNyArMTIxMiwxMCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gYWRtMTAyNl91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQgJiAweDNmLCBkYXRhLT52cm0pKTsKKwlpbnQgdmlkID0gKGRhdGEtPmdwaW8gPj4gMTEpICYgMHgxZjsKKworCWRldl9kYmcoZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkX2Zyb21fcmVnKHZpZCwgZGF0YS0+dnJtKSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkX3JlZywgTlVMTCk7CiAKQEAgLTE2ODEsMTcgKzE2ODEsMTYgQEAKIAkJCWtpbmQgPSBhZG0xMDI2OwogCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gQURNMTAyNl9DT01QQU5ZX0FOQUxPR19ERVYKIAkJCSYmICh2ZXJzdGVwICYgMHhmMCkgPT0gQURNMTAyNl9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIjogVW5yZWNvZ25pemVkIHN0ZXBwaW5nICIKKwkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCBzdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gRGVmYXVsdGluZyB0byBBRE0xMDI2LlxuIiwgdmVyc3RlcCk7CiAJCQlraW5kID0gYWRtMTAyNjsKIAkJfSBlbHNlIGlmICgodmVyc3RlcCAmIDB4ZjApID09IEFETTEwMjZfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICI6IEZvdW5kIHZlcnNpb24vc3RlcHBpbmcgIgorCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiRm91bmQgdmVyc2lvbi9zdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gQXNzdW1pbmcgZ2VuZXJpYyBBRE0xMDI2LlxuIiwKIAkJCQl2ZXJzdGVwKTsKIAkJCWtpbmQgPSBhbnlfY2hpcDsKIAkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIjogQXV0b2RldGVjdGlvbiAiCi0JCQkJImZhaWxlZFxuIik7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCQkvKiBOb3QgYW4gQURNMTAyNiAuLi4gKi8KIAkJCWlmIChraW5kID09IDApIHsgLyogVXNlciB1c2VkIGZvcmNlPXgseSAqLwogCQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgQURNMTAyNiBub3QgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwppbmRleCBiYTg0Y2E1Li4zNjcxODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwpAQCAtMTc5LDcgKzE3OSw4IEBACiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBhZG0xMDI5X2RhdGEgKmRhdGEgPSBhZG0xMDI5X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAl1MTYgdmFsOwotCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAgfHwgZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gPT0gMAorCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAKKwkgICAgfHwgKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdICYgMHhDMCkgPT0gMAogCSAgICB8fCBkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDI1NSkgewogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAl9CkBAIC0xOTQsNyArMTk1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGFkbTEwMjlfdXBkYXRlX2RldmljZShkZXYpOwotCWlmIChkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSA9PSAwKQorCWlmICgoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gJiAweEMwKSA9PSAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwppbmRleCBmYmVmYTgyLi42YzlhY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKQEAgLTk5LDQwICs5OSwzMiBAQAogICovCiBzdGF0aWMgdm9pZCBhbXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGlycXNfdG9fY2xlYXI7CisKIAltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKIAotCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisJaXJxc190b19jbGVhciA9IGFtc19pbmZvLndvcmtlcl9pcnFzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfRlJFRUZBTEwpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IGZyZWVmYWxsIGRldGVjdGVkIVxuIik7CiAKLQkJaWYgKGFtc19pbmZvLndvcmtlcl9pcnFzICYgQU1TX0lSUV9GUkVFRkFMTCkgewotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBmcmVlZmFsbCBkZXRlY3RlZCFcbiIpOwotCi0JCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKLQotCQkJLyogd2UgbXVzdCBjYWxsIHRoaXMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCQlhbXNfaW5mby5jbGVhcl9pcnEoQU1TX0lSUV9GUkVFRkFMTCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQkJfQotCi0JCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfU0hPQ0spIHsKLQkJCWlmICh2ZXJib3NlKQotCQkJCXByaW50ayhLRVJOX0lORk8gImFtczogc2hvY2sgZGV0ZWN0ZWQhXG4iKTsKLQotCQkJYW1zX2luZm8ud29ya2VyX2lycXMgJj0gfkFNU19JUlFfU0hPQ0s7Ci0KLQkJCS8qIHdlIG11c3QgY2FsbCB0aGlzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCQkJYW1zX2luZm8uY2xlYXJfaXJxKEFNU19JUlFfU0hPQ0spOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKIAl9CiAKKwlpZiAoYW1zX2luZm8ud29ya2VyX2lycXMgJiBBTVNfSVJRX1NIT0NLKSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBzaG9jayBkZXRlY3RlZCFcbiIpOworCisJCWFtc19pbmZvLndvcmtlcl9pcnFzICY9IH5BTVNfSVJRX1NIT0NLOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisKKwlhbXNfaW5mby5jbGVhcl9pcnEoaXJxc190b19jbGVhcik7CisKIAltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOwogfQogCkBAIC0yMjMsMzQgKzIxNSwyOCBAQAogCiB2b2lkIGFtc19leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGlucHV0IGRldmljZSAqLworCWFtc19pbnB1dF9leGl0KCk7CiAKLQlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewotCQkvKiBSZW1vdmUgaW5wdXQgZGV2aWNlICovCi0JCWFtc19pbnB1dF9leGl0KCk7CisJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3VycmVudCk7CiAKLQkJLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCi0JCWFtc19pbmZvLmV4aXQoKTsKKwkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KKwlhbXNfaW5mby5leGl0KCk7CiAKLQkJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgotCQkgKgotCQkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKLQkJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KLQkJICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgorCSAqCisJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CisJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KKwkgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JCS8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9jdXJyZW50KTsKKwkvKiBSZW1vdmUgZGV2aWNlICovCisJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoYW1zX2luZm8ub2ZfZGV2KTsKIAotCQkvKiBSZW1vdmUgZGV2aWNlICovCi0JCW9mX2RldmljZV91bnJlZ2lzdGVyKGFtc19pbmZvLm9mX2Rldik7Ci0KLQkJLyogUmVtb3ZlIGhhbmRsZXIgKi8KLQkJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX3Nob2NrX2NsaWVudCk7Ci0JCXBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQoJmFtc19mcmVlZmFsbF9jbGllbnQpOwotCX0KLQotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGhhbmRsZXIgKi8KKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfc2hvY2tfY2xpZW50KTsKKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfZnJlZWZhbGxfY2xpZW50KTsKIH0KIAogTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDk1Nzc2MDUzLi4yY2JmOGE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYwpAQCAtNjAsMjYgKzYwLDM0IEBACiAJQU1TX0NNRF9TVEFSVCwKIH07CiAKLXN0YXRpYyBpbnQgYW1zX2kyY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgYW1zX2kyY19kZXRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgYW1zX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGFtc19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYW1zX2lkW10gPSB7CisJeyAiYW1zIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhbXNfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW1zX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgICA9ICJhbXMiLAogCQkub3duZXIgID0gVEhJU19NT0RVTEUsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2F0dGFjaCwKLQkuZGV0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2RldGFjaCwKKwkucHJvYmUgICAgICAgICAgPSBhbXNfaTJjX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IGFtc19pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSAgICAgICA9IGFtc19pZCwKIH07CiAKIHN0YXRpYyBzMzIgYW1zX2kyY19yZWFkKHU4IHJlZykKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZhbXNfaW5mby5pMmNfY2xpZW50LCByZWcpOworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYW1zX2luZm8uaTJjX2NsaWVudCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBhbXNfaTJjX3dyaXRlKHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoJmFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGFtc19pMmNfY21kKGVudW0gYW1zX2kyY19jbWQgY21kKQpAQCAtMTUyLDkgKzE2MCw5IEBACiAJKnogPSBhbXNfaTJjX3JlYWQoQU1TX0RBVEFaKTsKIH0KIAotc3RhdGljIGludCBhbXNfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFtc19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBidXM7CiAJaW50IHZtYWosIHZtaW47CiAJaW50IHJlc3VsdDsKIApAQCAtMTYyLDE3ICsxNzAsNyBAQAogCWlmICh1bmxpa2VseShhbXNfaW5mby5oYXNfZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoc3RybmNtcChhZGFwdGVyLT5uYW1lLCAidW5pLW4iLCA1KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlidXMgPSBzaW1wbGVfc3RydG91bChhZGFwdGVyLT5uYW1lICsgNiwgTlVMTCwgMTApOwotCWlmIChidXMgIT0gYW1zX2luZm8uaTJjX2J1cykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkZHIgPSBhbXNfaW5mby5pMmNfYWRkcmVzczsKLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkYXB0ZXIgPSBhZGFwdGVyOwotCWFtc19pbmZvLmkyY19jbGllbnQuZHJpdmVyID0gJmFtc19pMmNfZHJpdmVyOwotCXN0cmNweShhbXNfaW5mby5pMmNfY2xpZW50Lm5hbWUsICJBcHBsZSBNb3Rpb24gU2Vuc29yIik7CisJYW1zX2luZm8uaTJjX2NsaWVudCA9IGNsaWVudDsKIAogCWlmIChhbXNfaTJjX2NtZChBTVNfQ01EX1JFU0VUKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IEZhaWxlZCB0byByZXNldCB0aGUgZGV2aWNlXG4iKTsKQEAgLTIzNyw3ICsyMzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFtc19pMmNfZGV0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTI2MSwxMSArMjU5LDcgQEAKIAogaW50IF9faW5pdCBhbXNfaTJjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQljaGFyICp0bXBfYnVzOwogCWludCByZXN1bHQ7Ci0JY29uc3QgdTMyICpwcm9wOwotCi0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CiAKIAkvKiBTZXQgaW1wbGVtZW50YXRpb24gc3R1ZmYgKi8KIAlhbXNfaW5mby5vZl9ub2RlID0gbnA7CkBAIC0yNzUsMjUgKzI2OSw3IEBACiAJYW1zX2luZm8uY2xlYXJfaXJxID0gYW1zX2kyY19jbGVhcl9pcnE7CiAJYW1zX2luZm8uYnVzdHlwZSA9IEJVU19JMkM7CiAKLQkvKiBsb29rIGZvciBidXMgZWl0aGVyIHVzaW5nICJyZWciIG9yIGJ5IHBhdGggKi8KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGFtc19pbmZvLm9mX25vZGUsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApIHsKLQkJcmVzdWx0ID0gLUVOT0RFVjsKLQotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JdG1wX2J1cyA9IHN0cnN0cihhbXNfaW5mby5vZl9ub2RlLT5mdWxsX25hbWUsICIvaTJjLWJ1c0AiKTsKLQlpZiAodG1wX2J1cykKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICoodG1wX2J1cyArIDkpIC0gJzAnOwotCWVsc2UKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICgoKnByb3ApID4+IDgpICYgMHgwZjsKLQlhbXNfaW5mby5pMmNfYWRkcmVzcyA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKLQogCXJlc3VsdCA9IGkyY19hZGRfZHJpdmVyKCZhbXNfaTJjX2RyaXZlcik7CiAKLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCmluZGV4IDdiODFlMGMyLi44YTcxMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYwpAQCAtMjAsMTMgKzIwLDE1IEBACiAjaW5jbHVkZSAiYW1zLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgam95c3RpY2s7Ci1tb2R1bGVfcGFyYW0oam95c3RpY2ssIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGpveXN0aWNrLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moam95c3RpY2ssICJFbmFibGUgdGhlIGlucHV0IGNsYXNzIGRldmljZSBvbiBtb2R1bGUgbG9hZCIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGludmVydDsKLW1vZHVsZV9wYXJhbShpbnZlcnQsIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgU19JV1VTUiB8IFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJJbnZlcnQgaW5wdXQgZGF0YSBvbiBYIGFuZCBZIGF4aXMiKTsKIAorc3RhdGljIERFRklORV9NVVRFWChhbXNfaW5wdXRfbXV0ZXgpOworCiBzdGF0aWMgdm9pZCBhbXNfaWRldl9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGRldi0+aW5wdXQ7CkBAIC01MCwxMyArNTIsMTEgQEAKIH0KIAogLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KLXN0YXRpYyB2b2lkIGFtc19pbnB1dF9lbmFibGUodm9pZCkKK3N0YXRpYyBpbnQgYW1zX2lucHV0X2VuYWJsZSh2b2lkKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXM4IHgsIHksIHo7Ci0KLQlpZiAoYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCWludCBlcnJvcjsKIAogCWFtc19zZW5zb3JzKCZ4LCAmeSwgJnopOwogCWFtc19pbmZvLnhjYWxpYiA9IHg7CkBAIC02NSw3ICs2NSw3IEBACiAKIAlhbXNfaW5mby5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOwogCWlmICghYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWFtc19pbmZvLmlkZXYtPnBvbGwgPSBhbXNfaWRldl9wb2xsOwogCWFtc19pbmZvLmlkZXYtPnBvbGxfaW50ZXJ2YWwgPSAyNTsKQEAgLTg0LDE0ICs4NCwxOCBAQAogCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwogCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKIAotCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpKSB7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpOworCWlmIChlcnJvcikgewogCQlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UoYW1zX2luZm8uaWRldik7CiAJCWFtc19pbmZvLmlkZXYgPSBOVUxMOwotCQlyZXR1cm47CisJCXJldHVybiBlcnJvcjsKIAl9CisKKwlqb3lzdGljayA9IDE7CisKKwlyZXR1cm4gMDsKIH0KIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIHN0YXRpYyB2b2lkIGFtc19pbnB1dF9kaXNhYmxlKHZvaWQpCiB7CiAJaWYgKGFtc19pbmZvLmlkZXYpIHsKQEAgLTk5LDYgKzEwMyw4IEBACiAJCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShhbXNfaW5mby5pZGV2KTsKIAkJYW1zX2luZm8uaWRldiA9IE5VTEw7CiAJfQorCisJam95c3RpY2sgPSAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBhbXNfaW5wdXRfc2hvd19qb3lzdGljayhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTAsMzkgKzExNiw0MiBAQAogc3RhdGljIHNzaXplX3QgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaWYgKHNzY2FuZihidWYsICIlZFxuIiwgJmpveXN0aWNrKSAhPSAxKQorCXVuc2lnbmVkIGxvbmcgZW5hYmxlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmZW5hYmxlKSB8fCBlbmFibGUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlpZiAoam95c3RpY2spCi0JCWFtc19pbnB1dF9lbmFibGUoKTsKLQllbHNlCi0JCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJaWYgKGVuYWJsZSAhPSBqb3lzdGljaykgeworCQlpZiAoZW5hYmxlKQorCQkJZXJyb3IgPSBhbXNfaW5wdXRfZW5hYmxlKCk7CisJCWVsc2UKKwkJCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBjb3VudDsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGpveXN0aWNrLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlhbXNfaW5wdXRfc2hvd19qb3lzdGljaywgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKTsKIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIGludCBhbXNfaW5wdXRfaW5pdCh2b2lkKQogewotCWludCByZXN1bHQ7Ci0KLQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwotCi0JaWYgKCFyZXN1bHQgJiYgam95c3RpY2spCisJaWYgKGpveXN0aWNrKQogCQlhbXNfaW5wdXRfZW5hYmxlKCk7Ci0JcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwogfQogCi0vKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwogdm9pZCBhbXNfaW5wdXRfZXhpdCh2b2lkKQogewotCWFtc19pbnB1dF9kaXNhYmxlKCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2pveXN0aWNrKTsKKworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CisJYW1zX2lucHV0X2Rpc2FibGUoKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggOTQ2M2U5Ny4uZmIxOGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwpAQCAtMTQ5LDggKzE0OSw2IEBACiAJY29uc3QgdTMyICpwcm9wOwogCWludCByZXN1bHQ7CiAKLQltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCS8qIFNldCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAqLwogCWFtc19pbmZvLm9mX25vZGUgPSBucDsKIAlhbXNfaW5mby5leGl0ID0gYW1zX3BtdV9leGl0OwpAQCAtMTYxLDEwICsxNTksOSBAQAogCiAJLyogR2V0IFBNVSBjb21tYW5kLCBzaG91bGQgYmUgMHg0ZSwgYnV0IHdlIGNhbiBuZXZlciBrbm93ICovCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKSB7Ci0JCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9CisJaWYgKCFwcm9wKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWFtc19wbXVfY21kID0gKCgqcHJvcCkgPj4gOCkgJiAweGZmOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCkBAIC0xNzUsNyArMTcyLDcgQEAKIAogCXJlc3VsdCA9IGFtc19zZW5zb3JfYXR0YWNoKCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCS8qIFNldCBkZWZhdWx0IHZhbHVlcyAqLwogCWFtc19wbXVfc2V0X3JlZ2lzdGVyKEFNU19GRl9MT1dfTElNSVQsIDB4MTUpOwpAQCAtMTk4LDEwICsxOTUsNSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBGb3VuZCBQTVUgYmFzZWQgbW90aW9uIHNlbnNvclxuIik7CiAKLQlyZXN1bHQgPSAwOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7Ci0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmggYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAppbmRleCAyMjFlZjY5Li41ZWQzODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaApAQCAtNDYsOSArNDYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NFTlNPUlNfQU1TX0kyQwogCS8qIEkyQyBwcm9wZXJ0aWVzICovCi0JaW50IGkyY19idXM7Ci0JaW50IGkyY19hZGRyZXNzOwotCXN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQ7CiAjZW5kaWYKIAogCS8qIEpveXN0aWNrIGVtdWxhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCmluZGV4IGIwNmI4ZTAuLmJjMDExZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKQEAgLTQ5LDYgKzQ5LDkgQEAKIAogI2RlZmluZSBBUFBMRVNNQ19NQVhfREFUQV9MRU5HVEggMzIKIAorI2RlZmluZSBBUFBMRVNNQ19NSU5fV0FJVAkweDAwNDAKKyNkZWZpbmUgQVBQTEVTTUNfTUFYX1dBSVQJMHg4MDAwCisKICNkZWZpbmUgQVBQTEVTTUNfU1RBVFVTX01BU0sJMHgwZgogI2RlZmluZSBBUFBMRVNNQ19SRUFEX0NNRAkweDEwCiAjZGVmaW5lIEFQUExFU01DX1dSSVRFX0NNRAkweDExCkBAIC01Nyw4ICs2MCw4IEBACiAKICNkZWZpbmUgS0VZX0NPVU5UX0tFWQkJIiNLRVkiIC8qIHItbyB1aTMyICovCiAKLSNkZWZpbmUgTElHSFRfU0VOU09SX0xFRlRfS0VZCSJBTFYwIiAvKiByLW8ge2FsdiAoNiBieXRlcykgKi8KLSNkZWZpbmUgTElHSFRfU0VOU09SX1JJR0hUX0tFWQkiQUxWMSIgLyogci1vIHthbHYgKDYgYnl0ZXMpICovCisjZGVmaW5lIExJR0hUX1NFTlNPUl9MRUZUX0tFWQkiQUxWMCIgLyogci1vIHthbHYgKDYtMTAgYnl0ZXMpICovCisjZGVmaW5lIExJR0hUX1NFTlNPUl9SSUdIVF9LRVkJIkFMVjEiIC8qIHItbyB7YWx2ICg2LTEwIGJ5dGVzKSAqLwogI2RlZmluZSBCQUNLTElHSFRfS0VZCQkiTEtTQiIgLyogdy1vIHtsa2IgKDIgYnl0ZXMpICovCiAKICNkZWZpbmUgQ0xBTVNIRUxMX0tFWQkJIk1TTEQiIC8qIHItbyB1aTggKHVudXNlZCkgKi8KQEAgLTEwNCw2ICsxMDcsMTUgQEAKIC8qIFNldCA2OiBNYWNib29rMyBzZXQgKi8KIAl7ICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJUTTBQIiwgIlROMFAiLCAiVFRGMCIsICJUVzBQIiwgIlRoMEgiLAogCSAgIlRoMFMiLCAiVGgxSCIsIE5VTEwgfSwKKy8qIFNldCA3OiBNYWNib29rIEFpciAqLworCXsgIlRCMFQiLCAiVEIxUyIsICJUQjFUIiwgIlRCMlMiLCAiVEIyVCIsICJUQzBEIiwgIlRDMFAiLCAiVENGUCIsCisJICAiVFRGMCIsICJUVzBQIiwgIlRoMEgiLCAiVHAwUCIsICJUcEZQIiwgIlRzMFAiLCAiVHMwUyIsIE5VTEwgfSwKKy8qIFNldCA4OiBNYWNib29rIFBybyA0LDEgKFBlbnJ5bikgKi8KKwl7ICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJURzBEIiwgIlRHMEgiLCAiVFRGMCIsICJUVzBQIiwgIlRoMEgiLAorCSAgIlRoMUgiLCAiVGgySCIsICJUbTBQIiwgIlRzMFAiLCBOVUxMIH0sCisvKiBTZXQgOTogTWFjYm9vayBQcm8gMywxIChTYW50YSBSb3NhKSAqLworCXsgIlRBTFAiLCAiVEIwVCIsICJUQzBEIiwgIlRDMFAiLCAiVEcwRCIsICJURzBIIiwgIlRURjAiLCAiVFcwUCIsCisJICAiVGgwSCIsICJUaDFIIiwgIlRoMkgiLCAiVG0wUCIsICJUczBQIiwgTlVMTCB9LAogfTsKIAogLyogTGlzdCBvZiBrZXlzIHVzZWQgdG8gcmVhZC93cml0ZSBmYW4gc3BlZWRzICovCkBAIC0xNjMsMjUgKzE3NSwyNSBAQAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphcHBsZXNtY19sZWRfd3E7CiAKIC8qCi0gKiBfX3dhaXRfc3RhdHVzIC0gV2FpdCB1cCB0byAybXMgZm9yIHRoZSBzdGF0dXMgcG9ydCB0byBnZXQgYSBjZXJ0YWluIHZhbHVlCisgKiBfX3dhaXRfc3RhdHVzIC0gV2FpdCB1cCB0byAzMm1zIGZvciB0aGUgc3RhdHVzIHBvcnQgdG8gZ2V0IGEgY2VydGFpbiB2YWx1ZQogICogKG1hc2tlZCB3aXRoIDB4MGYpLCByZXR1cm5pbmcgemVybyBpZiB0aGUgdmFsdWUgaXMgb2J0YWluZWQuICBDYWxsZXJzIG11c3QKICAqIGhvbGQgYXBwbGVzbWNfbG9jay4KICAqLwogc3RhdGljIGludCBfX3dhaXRfc3RhdHVzKHU4IHZhbCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgdXM7CiAKIAl2YWwgPSB2YWwgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSzsKIAotCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgeworCWZvciAodXMgPSBBUFBMRVNNQ19NSU5fV0FJVDsgdXMgPCBBUFBMRVNNQ19NQVhfV0FJVDsgdXMgPDw9IDEpIHsKKwkJdWRlbGF5KHVzKTsKIAkJaWYgKChpbmIoQVBQTEVTTUNfQ01EX1BPUlQpICYgQVBQTEVTTUNfU1RBVFVTX01BU0spID09IHZhbCkgewogCQkJaWYgKGRlYnVnKQogCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJCQkiV2FpdGVkICVkIHVzIGZvciBzdGF0dXMgJXhcbiIsCi0JCQkJCQlpKjEwLCB2YWwpOworCQkJCQkiV2FpdGVkICVkIHVzIGZvciBzdGF0dXMgJXhcbiIsCisJCQkJCTIgKiB1cyAtIEFQUExFU01DX01JTl9XQUlULCB2YWwpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJdWRlbGF5KDEwKTsKIAl9CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogd2FpdCBzdGF0dXMgZmFpbGVkOiAleCAhPSAleFxuIiwKQEAgLTE5MSw2ICsyMDMsMjUgQEAKIH0KIAogLyoKKyAqIHNwZWNpYWwgdHJlYXRtZW50IG9mIGNvbW1hbmQgcG9ydCAtIG9uIG5ld2VyIG1hY2Jvb2tzLCBpdCBzZWVtcyBuZWNlc3NhcnkKKyAqIHRvIHJlc2VuZCB0aGUgY29tbWFuZCBieXRlIGJlZm9yZSBwb2xsaW5nIHRoZSBzdGF0dXMgYWdhaW4uIENhbGxlcnMgbXVzdAorICogaG9sZCBhcHBsZXNtY19sb2NrLgorICovCitzdGF0aWMgaW50IHNlbmRfY29tbWFuZCh1OCBjbWQpCit7CisJaW50IHVzOworCWZvciAodXMgPSBBUFBMRVNNQ19NSU5fV0FJVDsgdXMgPCBBUFBMRVNNQ19NQVhfV0FJVDsgdXMgPDw9IDEpIHsKKwkJb3V0YihjbWQsIEFQUExFU01DX0NNRF9QT1JUKTsKKwkJdWRlbGF5KHVzKTsKKwkJaWYgKChpbmIoQVBQTEVTTUNfQ01EX1BPUlQpICYgQVBQTEVTTUNfU1RBVFVTX01BU0spID09IDB4MGMpCisJCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRrKEtFUk5fV0FSTklORyAiYXBwbGVzbWM6IGNvbW1hbmQgZmFpbGVkOiAleCAtPiAleFxuIiwKKwkJY21kLCBpbmIoQVBQTEVTTUNfQ01EX1BPUlQpKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKICAqIGFwcGxlc21jX3JlYWRfa2V5IC0gcmVhZHMgbGVuIGJ5dGVzIGZyb20gYSBnaXZlbiBrZXksIGFuZCBwdXQgdGhlbSBpbiBidWZmZXIuCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuIENhbGxlcnMgbXVzdAogICogaG9sZCBhcHBsZXNtY19sb2NrLgpAQCAtMjA1LDggKzIzNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW91dGIoQVBQTEVTTUNfUkVBRF9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKLQlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwlpZiAoc2VuZF9jb21tYW5kKEFQUExFU01DX1JFQURfQ01EKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0yNDksOCArMjc5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb3V0YihBUFBMRVNNQ19XUklURV9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKLQlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwlpZiAoc2VuZF9jb21tYW5kKEFQUExFU01DX1dSSVRFX0NNRCkpCiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMjg0LDggKzMxMyw3IEBACiAJcmVhZGtleVsyXSA9IGluZGV4ID4+IDg7CiAJcmVhZGtleVszXSA9IGluZGV4OwogCi0Jb3V0YihBUFBMRVNNQ19HRVRfS0VZX0JZX0lOREVYX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOwotCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCWlmIChzZW5kX2NvbW1hbmQoQVBQTEVTTUNfR0VUX0tFWV9CWV9JTkRFWF9DTUQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTMxNSw4ICszNDMsNyBAQAogewogCWludCBpOwogCi0Jb3V0YihBUFBMRVNNQ19HRVRfS0VZX1RZUEVfQ01ELCBBUFBMRVNNQ19DTURfUE9SVCk7Ci0JaWYgKF9fd2FpdF9zdGF0dXMoMHgwYykpCisJaWYgKHNlbmRfY29tbWFuZChBUFBMRVNNQ19HRVRfS0VZX1RZUEVfQ01EKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0zMjUsNyArMzUyLDcgQEAKIAkJCXJldHVybiAtRUlPOwogCX0KIAotCW91dGIoNSwgQVBQTEVTTUNfREFUQV9QT1JUKTsKKwlvdXRiKDYsIEFQUExFU01DX0RBVEFfUE9SVCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCWlmIChfX3dhaXRfc3RhdHVzKDB4MDUpKQpAQCAtNTI3LDE3ICs1NTQsMjcgQEAKIHN0YXRpYyBzc2l6ZV90IGFwcGxlc21jX2xpZ2h0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpzeXNmc2J1ZikKIHsKKwlzdGF0aWMgaW50IGRhdGFfbGVuZ3RoOwogCWludCByZXQ7CiAJdTggbGVmdCA9IDAsIHJpZ2h0ID0gMDsKLQl1OCBidWZmZXJbNl07CisJdTggYnVmZmVyWzEwXSwgcXVlcnlbNl07CiAKIAltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKIAotCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9MRUZUX0tFWSwgYnVmZmVyLCA2KTsKKwlpZiAoIWRhdGFfbGVuZ3RoKSB7CisJCXJldCA9IGFwcGxlc21jX2dldF9rZXlfdHlwZShMSUdIVF9TRU5TT1JfTEVGVF9LRVksIHF1ZXJ5KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCQlkYXRhX2xlbmd0aCA9IGNsYW1wX3ZhbChxdWVyeVswXSwgMCwgMTApOworCQlwcmludGsoS0VSTl9JTkZPICJhcHBsZXNtYzogbGlnaHQgc2Vuc29yIGRhdGEgbGVuZ3RoIHNldCB0byAiCisJCQkiJWRcbiIsIGRhdGFfbGVuZ3RoKTsKKwl9CisKKwlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShMSUdIVF9TRU5TT1JfTEVGVF9LRVksIGJ1ZmZlciwgZGF0YV9sZW5ndGgpOwogCWxlZnQgPSBidWZmZXJbMl07CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoTElHSFRfU0VOU09SX1JJR0hUX0tFWSwgYnVmZmVyLCA2KTsKKwlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShMSUdIVF9TRU5TT1JfUklHSFRfS0VZLCBidWZmZXIsIGRhdGFfbGVuZ3RoKTsKIAlyaWdodCA9IGJ1ZmZlclsyXTsKIAogb3V0OgpAQCAtMTIzMywzOSArMTI3MCw1NyBAQAogCXsgLmFjY2VsZXJvbWV0ZXIgPSAwLCAubGlnaHQgPSAwLCAudGVtcGVyYXR1cmVfc2V0ID0gNSB9LAogLyogTWFjQm9vazM6IGFjY2VsZXJvbWV0ZXIgYW5kIHRlbXBlcmF0dXJlIHNldCA2ICovCiAJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDAsIC50ZW1wZXJhdHVyZV9zZXQgPSA2IH0sCisvKiBNYWNCb29rIEFpcjogYWNjZWxlcm9tZXRlciwgYmFja2xpZ2h0IGFuZCB0ZW1wZXJhdHVyZSBzZXQgNyAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAxLCAudGVtcGVyYXR1cmVfc2V0ID0gNyB9LAorLyogTWFjQm9vayBQcm8gNDogYWNjZWxlcm9tZXRlciwgYmFja2xpZ2h0IGFuZCB0ZW1wZXJhdHVyZSBzZXQgOCAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAxLCAudGVtcGVyYXR1cmVfc2V0ID0gOCB9LAorLyogTWFjQm9vayBQcm8gMzogYWNjZWxlcm9tZXRlciwgYmFja2xpZ2h0IGFuZCB0ZW1wZXJhdHVyZSBzZXQgOSAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAxLCAudGVtcGVyYXR1cmVfc2V0ID0gOSB9LAogfTsKIAogLyogTm90ZSB0aGF0IERNSV9NQVRDSCguLi4sIk1hY0Jvb2siKSB3aWxsIG1hdGNoICJNYWNCb29rUHJvMSwxIi4KICAqIFNvIHdlIG5lZWQgdG8gcHV0ICJBcHBsZSBNYWNCb29rIFBybyIgYmVmb3JlICJBcHBsZSBNYWNCb29rIi4gKi8KIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGFwcGxlc21jX3doaXRlbGlzdFtdID0geworCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBBaXIiLCB7CisJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkFwcGxlIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tBaXIiKSB9LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbN119LAorCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBQcm8gNCIsIHsKKwkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQXBwbGUiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzQiKSB9LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbOF19LAorCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBQcm8gMyIsIHsKKwkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQXBwbGUiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzMiKSB9LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbOV19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBQcm8iLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rUHJvIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVswXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVswXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rICh2MikiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rMiIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbMV19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbMV19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayAodjMpIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vazMiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzZdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzZdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2siLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVsyXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVsyXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNtaW5pIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjbWluaSIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbM119LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbM119LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjUHJvMiIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY1BybzIiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzRdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzRdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIGlNYWMiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJpTWFjIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVs1XX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs1XX0sCiAJeyAuaWRlbnQgPSBOVUxMIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMgYi9kcml2ZXJzL2h3bW9uL2libWFlbS5jCmluZGV4IDBmNzBkYzIuLjdiMGVkNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1hZW0uYwpAQCAtMTExOCwzICsxMTE4LDEwIEBACiAKIG1vZHVsZV9pbml0KGFlbV9pbml0KTsKIG1vZHVsZV9leGl0KGFlbV9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzM1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNTUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM2NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1NS0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNzU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNMzg1ME0yL3gzOTUwTTItKiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1wZXguYyBiL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKaW5kZXggNGU5YjE5Yy4uNTM3ZDlmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1wZXguYworKysgYi9kcml2ZXJzL2h3bW9uL2libXBleC5jCkBAIC02MDgsMyArNjA4LDkgQEAKIAogbW9kdWxlX2luaXQoaWJtcGV4X2luaXQpOwogbW9kdWxlX2V4aXQoaWJtcGV4X2V4aXQpOworCitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzMzUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM1NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNjU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM3NTUtKiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCBkNzkzY2MwLi5iNzRjOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJaWYgKHJlZyAmICgxIDw8IG5yKSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiM1xuIik7ICAvKiB0aGVybWFsIGRpb2RlICovCiAJaWYgKHJlZyAmICg4IDw8IG5yKSkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMlxuIik7ICAvKiB0aGVybWlzdG9yICovCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjRcbiIpOyAgLyogdGhlcm1pc3RvciAqLwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOyAgICAgIC8qIGRpc2FibGVkICovCiB9CiBzdGF0aWMgc3NpemVfdCBzZXRfc2Vuc29yKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC00OTMsMTAgKzQ5MywxNSBAQAogCiAJZGF0YS0+c2Vuc29yICY9IH4oMSA8PCBucik7CiAJZGF0YS0+c2Vuc29yICY9IH4oOCA8PCBucik7Ci0JLyogMyA9IHRoZXJtYWwgZGlvZGU7IDIgPSB0aGVybWlzdG9yOyAwID0gZGlzYWJsZWQgKi8KKwlpZiAodmFsID09IDIpIHsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJZGV2X3dhcm4oZGV2LCAiU2Vuc29yIHR5cGUgMiBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIDQgIgorCQkJICJpbnN0ZWFkXG4iKTsKKwkJdmFsID0gNDsKKwl9CisJLyogMyA9IHRoZXJtYWwgZGlvZGU7IDQgPSB0aGVybWlzdG9yOyAwID0gZGlzYWJsZWQgKi8KIAlpZiAodmFsID09IDMpCiAJICAgIGRhdGEtPnNlbnNvciB8PSAxIDw8IG5yOwotCWVsc2UgaWYgKHZhbCA9PSAyKQorCWVsc2UgaWYgKHZhbCA9PSA0KQogCSAgICBkYXRhLT5zZW5zb3IgfD0gOCA8PCBucjsKIAllbHNlIGlmICh2YWwgIT0gMCkgewogCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03OC5jIGIvZHJpdmVycy9od21vbi9sbTc4LmMKaW5kZXggZWQ3ODU5Zi4uYjVlM2IyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc4LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc4LmMKQEAgLTExNCwyNSArMTE0LDE2IEBACiAKICNkZWZpbmUgRElWX0ZST01fUkVHKHZhbCkgKDEgPDwgKHZhbCkpCiAKLS8qIFRoZXJlIGFyZSBzb21lIGNvbXBsaWNhdGlvbnMgaW4gYSBtb2R1bGUgbGlrZSB0aGlzLiBGaXJzdCBvZmYsIExNNzggY2hpcHMKLSAgIG1heSBiZSBib3RoIHByZXNlbnQgb24gdGhlIFNNQnVzIGFuZCB0aGUgSVNBIGJ1cywgYW5kIHdlIGhhdmUgdG8gaGFuZGxlCi0gICB0aG9zZSBjYXNlcyBzZXBhcmF0ZWx5IGF0IHNvbWUgcGxhY2VzLiBTZWNvbmQsIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwKLSAgIExNNzggY2hpcHMgYXZhaWxhYmxlICh3ZWxsLCBhY3R1YWxseSwgdGhhdCBpcyBwcm9iYWJseSBuZXZlciBkb25lOyBidXQKLSAgIGl0IGlzIGEgY2xlYW4gaWxsdXN0cmF0aW9uIG9mIGhvdyB0byBoYW5kbGUgYSBjYXNlIGxpa2UgdGhhdCkuIEZpbmFsbHksCi0gICBhIHNwZWNpZmljIGNoaXAgbWF5IGJlIGF0dGFjaGVkIHRvICpib3RoKiBJU0EgYW5kIFNNQnVzLCBhbmQgd2Ugd291bGQKLSAgIG5vdCBsaWtlIHRvIGRldGVjdCBpdCBkb3VibGUuIEZvcnR1bmF0ZWx5LCBpbiB0aGUgY2FzZSBvZiB0aGUgTE03OCBhdAotICAgbGVhc3QsIGEgcmVnaXN0ZXIgdGVsbHMgdXMgd2hhdCBTTUJ1cyBhZGRyZXNzIHdlIGFyZSBvbiwgc28gdGhhdCBoZWxwcwotICAgYSBiaXQgLSBleGNlcHQgaWYgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBTTUJ1cy4gR3JvYW4uIE5vIHNvbHV0aW9uCi0gICBmb3IgdGhpcyB5ZXQuICovCi0KLS8qIEZvciBJU0EgY2hpcHMsIHdlIGFidXNlIHRoZSBpMmNfY2xpZW50IGFkZHIgYW5kIG5hbWUgZmllbGRzLiBXZSBhbHNvIHVzZQotICAgdGhlIGRyaXZlciBmaWVsZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSTJDIGFuZCBJU0EgY2hpcHMuICovCiBzdHJ1Y3QgbG03OF9kYXRhIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJZW51bSBjaGlwcyB0eXBlOwogCisJLyogRm9yIElTQSBkZXZpY2Ugb25seSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGlzYV9hZGRyOworCiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwpAQCAtMTUxLDkgKzE0MiwxMSBAQAogfTsKIAogCi1zdGF0aWMgaW50IGxtNzhfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgbG03OF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwotc3RhdGljIGludCBsbTc4X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgaW50IGxtNzhfaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkJCSAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGxtNzhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGxtNzhfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbG03OF9pc2FfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbTc4X2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CkBAIC0xNjQsMTIgKzE1NywyMyBAQAogc3RhdGljIHZvaWQgbG03OF9pbml0X2RldmljZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhKTsKIAogCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG03OF9pMmNfaWRbXSA9IHsKKwl7ICJsbTc4IiwgbG03OCB9LAorCXsgImxtNzkiLCBsbTc5IH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtNzhfaTJjX2lkKTsKKwogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtNzhfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAibG03OCIsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIJPSBsbTc4X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50CT0gbG03OF9kZXRhY2hfY2xpZW50LAorCS5wcm9iZQkJPSBsbTc4X2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IGxtNzhfaTJjX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBsbTc4X2kyY19pZCwKKwkuZGV0ZWN0CQk9IGxtNzhfaTJjX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxtNzhfaXNhX2RyaXZlciA9IHsKQEAgLTQ1NCwxNyArNDU4LDYgQEAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW46Ci0gICAgICogbG03OF9kcml2ZXIgaXMgaW5zZXJ0ZWQgKHdoZW4gdGhpcyBtb2R1bGUgaXMgbG9hZGVkKSwgZm9yIGVhY2gKLSAgICAgICBhdmFpbGFibGUgYWRhcHRlcgotICAgICAqIHdoZW4gYSBuZXcgYWRhcHRlciBpcyBpbnNlcnRlZCAoYW5kIGxtNzhfZHJpdmVyIGlzIHN0aWxsIHByZXNlbnQpICovCi1zdGF0aWMgaW50IGxtNzhfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWlmICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBsbTc4X2RldGVjdCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsbTc4X2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLApAQCAtNTI3LDU0ICs1MjAsNzcgQEAKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+Y2xpZW50Lm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOwogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KLXN0YXRpYyBpbnQgbG03OF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCisvKiBSZXR1cm5zIDEgaWYgdGhlIEkyQyBjaGlwIGFwcGVhcnMgdG8gYmUgYW4gYWxpYXMgb2YgdGhlIElTQSBjaGlwICovCitzdGF0aWMgaW50IGxtNzhfYWxpYXNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNoaXBpZCkKIHsKLQlpbnQgaSwgZXJyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OwotCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGE7Ci0JY29uc3QgY2hhciAqY2xpZW50X25hbWUgPSAiIjsKKwlzdHJ1Y3QgbG03OF9kYXRhICppc2E7CisJaW50IGk7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBFUlJPUjE7CisJaWYgKCFwZGV2KQkvKiBObyBJU0EgY2hpcCAqLworCQlyZXR1cm4gMDsKKwlpc2EgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChsbTc4X3JlYWRfdmFsdWUoaXNhLCBMTTc4X1JFR19JMkNfQUREUikgIT0gY2xpZW50LT5hZGRyKQorCQlyZXR1cm4gMDsJLyogQWRkcmVzcyBkb2Vzbid0IG1hdGNoICovCisJaWYgKChsbTc4X3JlYWRfdmFsdWUoaXNhLCBMTTc4X1JFR19DSElQSUQpICYgMHhmZSkgIT0gKGNoaXBpZCAmIDB4ZmUpKQorCQlyZXR1cm4gMDsJLyogQ2hpcCB0eXBlIGRvZXNuJ3QgbWF0Y2ggKi8KKworCS8qIFdlIGNvbXBhcmUgYWxsIHRoZSBsaW1pdCByZWdpc3RlcnMsIHRoZSBjb25maWcgcmVnaXN0ZXIgYW5kIHRoZQorCSAqIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDB4MmI7IGkgPD0gMHgzZDsgaSsrKSB7CisJCWlmIChsbTc4X3JlYWRfdmFsdWUoaXNhLCBpKSAhPQorCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIExNNzhfUkVHX0NPTkZJRykgIT0KKwkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE03OF9SRUdfQ09ORklHKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMHg0MzsgaSA8PSAweDQ2OyBpKyspIHsKKwkJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIGkpICE9CisJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpKSkKKwkJCXJldHVybiAwOwogCX0KIAotCS8qIE9LLiBGb3Igbm93LCB3ZSBwcmVzdW1lIHdlIGhhdmUgYSB2YWxpZCBjbGllbnQuIFdlIG5vdyBjcmVhdGUgdGhlCi0JICAgY2xpZW50IHN0cnVjdHVyZSwgZXZlbiB0aG91Z2ggd2UgY2Fubm90IGZpbGwgaXQgY29tcGxldGVseSB5ZXQuCi0JICAgQnV0IGl0IGFsbG93cyB1cyB0byBhY2Nlc3MgbG03OF97cmVhZCx3cml0ZX1fdmFsdWUuICovCisJcmV0dXJuIDE7Cit9CiAKLQlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtNzhfZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIEVSUk9SMTsKLQl9CitzdGF0aWMgaW50IGxtNzhfaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkJCSAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbG03OF9kYXRhICppc2EgPSBwZGV2ID8gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikgOiBOVUxMOworCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKIAotCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQluZXdfY2xpZW50LT5kcml2ZXIgPSAmbG03OF9kcml2ZXI7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uICovCisJLyogV2UgYmxvY2sgdXBkYXRlcyBvZiB0aGUgSVNBIGRldmljZSB0byBtaW5pbWl6ZSB0aGUgcmlzayBvZgorCSAgIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzYW1lIExNNzggY2hpcCB0aHJvdWdoIGRpZmZlcmVudAorCSAgIGludGVyZmFjZXMuICovCisJaWYgKGlzYSkKKwkJbXV0ZXhfbG9jaygmaXNhLT51cGRhdGVfbG9jayk7CisKIAlpZiAoa2luZCA8IDApIHsKLQkJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DT05GSUcpICYgMHg4MCkgewotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOwotCQl9Ci0JCWlmIChsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfSTJDX0FERFIpICE9Ci0JCSAgICBhZGRyZXNzKSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBFUlJPUjI7Ci0JCX0KKwkJaWYgKChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTc4X1JFR19DT05GSUcpICYgMHg4MCkKKwkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNNzhfUkVHX0kyQ19BRERSKQorCQkgICAgIT0gYWRkcmVzcykKKwkJCWdvdG8gZXJyX25vZGV2OworCisJCS8qIEV4cGxpY2l0bHkgcHJldmVudCB0aGUgbWlzZGV0ZWN0aW9uIG9mIFdpbmJvbmQgY2hpcHMgKi8KKwkJaSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4NGYpOworCQlpZiAoaSA9PSAweGEzIHx8IGkgPT0gMHg1YykKKwkJCWdvdG8gZXJyX25vZGV2OwogCX0KIAogCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwogCWlmIChraW5kIDw9IDApIHsKLQkJaSA9IGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DSElQSUQpOworCQlpID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE03OF9SRUdfQ0hJUElEKTsKIAkJaWYgKGkgPT0gMHgwMCB8fCBpID09IDB4MjAJLyogTE03OCAqLwogCQkgfHwgaSA9PSAweDQwKQkJCS8qIExNNzgtSiAqLwogCQkJa2luZCA9IGxtNzg7CkBAIC01ODYsMzMgKzYwMiw1OSBAQAogCQkJCQkicGFyYW1ldGVyIGZvciB1bmtub3duIGNoaXAgYXQgIgogCQkJCQkiYWRhcHRlciAlZCwgYWRkcmVzcyAweCUwMnhcbiIsCiAJCQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKKwkJCWdvdG8gZXJyX25vZGV2OworCQl9CisKKwkJaWYgKGxtNzhfYWxpYXNfZGV0ZWN0KGNsaWVudCwgaSkpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldmljZSBhdCAweCUwMnggYXBwZWFycyB0byAiCisJCQkJImJlIHRoZSBzYW1lIGFzIElTQSBkZXZpY2VcbiIsIGFkZHJlc3MpOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAl9CiAKLQlpZiAoa2luZCA9PSBsbTc4KSB7Ci0JCWNsaWVudF9uYW1lID0gImxtNzgiOwotCX0gZWxzZSBpZiAoa2luZCA9PSBsbTc5KSB7CisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKworCXN3aXRjaCAoa2luZCkgeworCWNhc2UgbG03OToKIAkJY2xpZW50X25hbWUgPSAibG03OSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNsaWVudF9uYW1lID0gImxtNzgiOwogCX0KKwlzdHJsY3B5KGluZm8tPnR5cGUsIGNsaWVudF9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAotCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KLQlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKLQlkYXRhLT50eXBlID0ga2luZDsKKwlyZXR1cm4gMDsKIAotCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KLQlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKLQkJZ290byBFUlJPUjI7CisgZXJyX25vZGV2OgorCWlmIChpc2EpCisJCW11dGV4X3VubG9jaygmaXNhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgbG03OF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGE7CisJaW50IGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG03OF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwlkYXRhLT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgTE03OCBjaGlwICovCiAJbG03OF9pbml0X2RldmljZShkYXRhKTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG03OF9ncm91cCkpKQorCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOworCWlmIChlcnIpCiAJCWdvdG8gRVJST1IzOwogCi0JZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CiAJCWdvdG8gRVJST1I0OwpAQCAtNjIxLDI2ICs2NjMsMTggQEAKIAlyZXR1cm4gMDsKIAogRVJST1I0OgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKIEVSUk9SMzoKLQlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKLUVSUk9SMjoKIAlrZnJlZShkYXRhKTsKLUVSUk9SMToKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxtNzhfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBsbTc4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG03OF9ncm91cCk7Ci0KLQlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQotCQlyZXR1cm4gZXJyOwotCiAJa2ZyZWUoZGF0YSk7CiAKIAlyZXR1cm4gMDsKQEAgLTY1MSwxMSArNjg1LDEwIEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgTE03OF9FWFRFTlQsICJsbTc4IikpIHsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBMTTc4X0FERFJfUkVHX09GRlNFVCwgMiwgImxtNzgiKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC02NjUsMTggKzY5OCwxNiBAQAogCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb247CiAJfQogCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwotCWRhdGEtPmNsaWVudC5hZGRyID0gcmVzLT5zdGFydDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoJmRhdGEtPmNsaWVudCwgZGF0YSk7CisJZGF0YS0+aXNhX2FkZHIgPSByZXMtPnN0YXJ0OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCiAJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DSElQSUQpICYgMHg4MCkgewogCQlkYXRhLT50eXBlID0gbG03OTsKLQkJbmFtZSA9ICJsbTc5IjsKKwkJZGF0YS0+bmFtZSA9ICJsbTc5IjsKIAl9IGVsc2UgewogCQlkYXRhLT50eXBlID0gbG03ODsKLQkJbmFtZSA9ICJsbTc4IjsKKwkJZGF0YS0+bmFtZSA9ICJsbTc4IjsKIAl9Ci0Jc3RybGNweShkYXRhLT5jbGllbnQubmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBMTTc4IGNoaXAgKi8KIAlsbTc4X2luaXRfZGV2aWNlKGRhdGEpOwpAQCAtNjk5LDcgKzczMCw3IEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKIAlrZnJlZShkYXRhKTsKICBleGl0X3JlbGVhc2VfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIExNNzhfRVhURU5UKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgTE03OF9BRERSX1JFR19PRkZTRVQsIDIpOwogIGV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTcwNywxMyArNzM4LDE2IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbTc4X2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOwotCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmNsaWVudC5hZGRyLCBMTTc4X0VYVEVOVCk7CiAJa2ZyZWUoZGF0YSk7CiAKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCArIExNNzhfQUREUl9SRUdfT0ZGU0VULCAyKTsKKwogCXJldHVybiAwOwogfQogCkBAIC03MjQsMTMgKzc1OCwxMyBAQAogICAgd291bGQgc2xvdyBkb3duIHRoZSBMTTc4IGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuICAqLwogc3RhdGljIGludCBsbTc4X3JlYWRfdmFsdWUoc3RydWN0IGxtNzhfZGF0YSAqZGF0YSwgdTggcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KKwlpZiAoIWNsaWVudCkgeyAvKiBJU0EgZGV2aWNlICovCiAJCWludCByZXM7CiAJCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCQlvdXRiX3AocmVnLCBjbGllbnQtPmFkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7Ci0JCXJlcyA9IGluYl9wKGNsaWVudC0+YWRkciArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZywgZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7CisJCXJlcyA9IGluYl9wKGRhdGEtPmlzYV9hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOwogCQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCQlyZXR1cm4gcmVzOwogCX0gZWxzZQpAQCAtNzQ2LDEyICs3ODAsMTIgQEAKICAgIG5vd2hlcmUgZWxzZSBiZSBuZWNlc3NhcnkhICovCiBzdGF0aWMgaW50IGxtNzhfd3JpdGVfdmFsdWUoc3RydWN0IGxtNzhfZGF0YSAqZGF0YSwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OwogCi0JaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCisJaWYgKCFjbGllbnQpIHsgLyogSVNBIGRldmljZSAqLwogCQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQkJb3V0Yl9wKHJlZywgY2xpZW50LT5hZGRyICsgTE03OF9BRERSX1JFR19PRkZTRVQpOwotCQlvdXRiX3AodmFsdWUsIGNsaWVudC0+YWRkciArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZywgZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcCh2YWx1ZSwgZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0RBVEFfUkVHX09GRlNFVCk7CiAJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiAwOwogCX0gZWxzZQpAQCAtODM3LDggKzg3MSwxNyBAQAogewogCWludCB2YWwsIHNhdmUsIGZvdW5kID0gMDsKIAotCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcywgTE03OF9FWFRFTlQsICJsbTc4IikpCisJLyogV2UgaGF2ZSB0byByZXF1ZXN0IHRoZSByZWdpb24gaW4gdHdvIHBhcnRzIGJlY2F1c2Ugc29tZQorCSAgIGJvYXJkcyBkZWNsYXJlIGJhc2UrNCB0byBiYXNlKzcgYXMgYSBQTlAgZGV2aWNlICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLCA0LCAibG03OCIpKSB7CisJCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBsb3cgcGFydCBvZiByZWdpb25cbiIpOwogCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzICsgNCwgNCwgImxtNzgiKSkgeworCQlwcl9kZWJ1ZygibG03ODogRmFpbGVkIHRvIHJlcXVlc3QgaGlnaCBwYXJ0IG9mIHJlZ2lvblxuIik7CisJCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOworCQlyZXR1cm4gMDsKKwl9CiAKICNkZWZpbmUgUkVBTExZX1NMT1dfSU8KIAkvKiBXZSBuZWVkIHRoZSB0aW1lb3V0cyBmb3IgYXQgbGVhc3Qgc29tZSBMTTc4LWxpa2UKQEAgLTkwMSw3ICs5NDQsOCBAQAogCQkJdmFsICYgMHg4MCA/ICJMTTc5IiA6ICJMTTc4IiwgKGludClhZGRyZXNzKTsKIAogIHJlbGVhc2U6Ci0JcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgTE03OF9FWFRFTlQpOworCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MgKyA0LCA0KTsKKwlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCA0KTsKIAlyZXR1cm4gZm91bmQ7CiB9CiAKQEAgLTk0OSwxNCArOTkzLDEyIEBACiB7CiAJaW50IHJlczsKIAotCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZsbTc4X2RyaXZlcik7Ci0JaWYgKHJlcykKLQkJZ290byBleGl0OwotCisJLyogV2UgcmVnaXN0ZXIgdGhlIElTQSBkZXZpY2UgZmlyc3QsIHNvIHRoYXQgd2UgY2FuIHNraXAgdGhlCisJICogcmVnaXN0cmF0aW9uIG9mIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIHNhbWUgZGV2aWNlLiAqLwogCWlmIChsbTc4X2lzYV9mb3VuZChpc2FfYWRkcmVzcykpIHsKIAkJcmVzID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZsbTc4X2lzYV9kcml2ZXIpOwogCQlpZiAocmVzKQotCQkJZ290byBleGl0X3VucmVnX2kyY19kcml2ZXI7CisJCQlnb3RvIGV4aXQ7CiAKIAkJLyogU2V0cyBnbG9iYWwgcGRldiBhcyBhIHNpZGUgZWZmZWN0ICovCiAJCXJlcyA9IGxtNzhfaXNhX2RldmljZV9hZGQoaXNhX2FkZHJlc3MpOwpAQCAtOTY0LDEyICsxMDA2LDE2IEBACiAJCQlnb3RvIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjsKIAl9CiAKKwlyZXMgPSBpMmNfYWRkX2RyaXZlcigmbG03OF9kcml2ZXIpOworCWlmIChyZXMpCisJCWdvdG8gZXhpdF91bnJlZ19pc2FfZGV2aWNlOworCiAJcmV0dXJuIDA7CiAKKyBleGl0X3VucmVnX2lzYV9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAgZXhpdF91bnJlZ19pc2FfZHJpdmVyOgogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsbTc4X2lzYV9kcml2ZXIpOwotIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmbG03OF9kcml2ZXIpOwogIGV4aXQ6CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggMTJkNDQ2Zi4uM2ZmMDI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTUsNiArNSw3IEBACiAgICAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzICBQaGlsaXAgUG9rb3JueSA8cHBva29ybnlAcGVuZ3VpbmNvbXB1dGluZy5jb20+CiAgICAgQ29weXJpZ2h0IChjKSAyMDAzICAgICAgICBNYXJnaXQgU2NodWJlcnQtV2hpbGUgPG1hcmdpdHN3QHQtb25saW5lLmRlPgogICAgIENvcHlyaWdodCAoYykgMjAwNCAgICAgICAgSnVzdGluIFRoaWVzc2VuIDxqdGhpZXNzZW5AcGVuZ3VpbmNvbXB1dGluZy5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4ICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIAogICAgIENoaXAgZGV0YWlscyBhdAkgICAgICA8aHR0cDovL3d3dy5uYXRpb25hbC5jb20vZHMvTE0vTE04NS5wZGY+CiAKQEAgLTE3Myw0MCArMTc0LDM5IEBACiB7CiAJaW50IGk7CiAKLQlpZiAocmFuZ2UgPj0gbG04NV9yYW5nZV9tYXBbMTVdKQotCQlyZXR1cm4gMTU7Ci0KIAkvKiBGaW5kIHRoZSBjbG9zZXN0IG1hdGNoICovCi0JZm9yIChpID0gMTQ7IGkgPj0gMDsgLS1pKSB7Ci0JCWlmIChyYW5nZSA+PSBsbTg1X3JhbmdlX21hcFtpXSkgewotCQkJaWYgKChsbTg1X3JhbmdlX21hcFtpICsgMV0gLSByYW5nZSkgPAotCQkJCQkocmFuZ2UgLSBsbTg1X3JhbmdlX21hcFtpXSkpCi0JCQkJcmV0dXJuIGkgKyAxOwotCQkJcmV0dXJuIGk7Ci0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgMTU7ICsraSkgeworCQlpZiAocmFuZ2UgPD0gKGxtODVfcmFuZ2VfbWFwW2ldICsgbG04NV9yYW5nZV9tYXBbaSArIDFdKSAvIDIpCisJCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaTsKIH0KICNkZWZpbmUgUkFOR0VfRlJPTV9SRUcodmFsKQlsbTg1X3JhbmdlX21hcFsodmFsKSAmIDB4MGZdCiAKIC8qIFRoZXNlIGFyZSB0aGUgUFdNIGZyZXF1ZW5jeSBlbmNvZGluZ3MgKi8KLXN0YXRpYyBjb25zdCBpbnQgbG04NV9mcmVxX21hcFtdID0geyAvKiAuMSBIeiAqLwotCTEwMCwgMTUwLCAyMzAsIDMwMCwgMzgwLCA0NzAsIDYyMCwgOTQwCitzdGF0aWMgY29uc3QgaW50IGxtODVfZnJlcV9tYXBbOF0gPSB7IC8qIDEgSHogKi8KKwkxMCwgMTUsIDIzLCAzMCwgMzgsIDQ3LCA2MSwgOTQKK307CitzdGF0aWMgY29uc3QgaW50IGFkbTEwMjdfZnJlcV9tYXBbOF0gPSB7IC8qIDEgSHogKi8KKwkxMSwgMTUsIDIyLCAyOSwgMzUsIDQ0LCA1OSwgODgKIH07CiAKLXN0YXRpYyBpbnQgRlJFUV9UT19SRUcoaW50IGZyZXEpCitzdGF0aWMgaW50IEZSRVFfVE9fUkVHKGNvbnN0IGludCAqbWFwLCBpbnQgZnJlcSkKIHsKIAlpbnQgaTsKIAotCWlmIChmcmVxID49IGxtODVfZnJlcV9tYXBbN10pCi0JCXJldHVybiA3OworCS8qIEZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2ggKi8KIAlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQotCQlpZiAoZnJlcSA8PSBsbTg1X2ZyZXFfbWFwW2ldKQorCQlpZiAoZnJlcSA8PSAobWFwW2ldICsgbWFwW2kgKyAxXSkgLyAyKQogCQkJYnJlYWs7CiAJcmV0dXJuIGk7CiB9Ci0jZGVmaW5lIEZSRVFfRlJPTV9SRUcodmFsKQlsbTg1X2ZyZXFfbWFwWyh2YWwpICYgMHgwN10KKworc3RhdGljIGludCBGUkVRX0ZST01fUkVHKGNvbnN0IGludCAqbWFwLCB1OCByZWcpCit7CisJcmV0dXJuIG1hcFtyZWcgJiAweDA3XTsKK30KIAogLyogU2luY2Ugd2UgY2FuJ3QgdXNlIHN0cmluZ3MsIEknbSBhYnVzaW5nIHRoZXNlIG51bWJlcnMKICAqICAgdG8gc3RhbmQgaW4gZm9yIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CkBAIC0yNzUsNyArMjc1LDYgQEAKIAogc3RydWN0IGxtODVfYXV0b2ZhbiB7CiAJdTggY29uZmlnOwkvKiBSZWdpc3RlciB2YWx1ZSAqLwotCXU4IGZyZXE7CS8qIFBXTSBmcmVxdWVuY3ksIGVuY29kZWQgKi8KIAl1OCBtaW5fcHdtOwkvKiBNaW5pbXVtIFBXTSB2YWx1ZSwgZW5jb2RlZCAqLwogCXU4IG1pbl9vZmY7CS8qIE1pbiBQV00gb3IgT0ZGIGJlbG93ICJsaW1pdCIsIGZsYWcgKi8KIH07CkBAIC0yODMsOCArMjgyLDggQEAKIC8qIEZvciBlYWNoIHJlZ2lzdGVyZWQgY2hpcCwgd2UgbmVlZCB0byBrZWVwIHNvbWUgZGF0YSBpbiBtZW1vcnkuCiAgICBUaGUgc3RydWN0dXJlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gKi8KIHN0cnVjdCBsbTg1X2RhdGEgewotCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJY29uc3QgaW50ICpmcmVxX21hcDsKIAllbnVtIGNoaXBzIHR5cGU7CiAKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CkBAIC0zMDEsNiArMzAwLDcgQEAKIAl1MTYgZmFuWzRdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1MTYgZmFuX21pbls0XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggcHdtWzNdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBwd21fZnJlcVszXTsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nICovCiAJdTggdGVtcF9leHRbM107CQkvKiBEZWNvZGVkIHZhbHVlcyAqLwogCXU4IGluX2V4dFs4XTsJCS8qIERlY29kZWQgdmFsdWVzICovCiAJdTggdmlkOwkJCS8qIFJlZ2lzdGVyIHZhbHVlICovCkBAIC0zMTAsMjIgKzMxMCw0MCBAQAogCXN0cnVjdCBsbTg1X3pvbmUgem9uZVszXTsKIH07CiAKLXN0YXRpYyBpbnQgbG04NV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAotCQkJaW50IGtpbmQpOwotc3RhdGljIGludCBsbTg1X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgbG04NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCBsbTg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGludCBsbTg1X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKTsKIHN0YXRpYyB2b2lkIGxtODVfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCBpbnQgdmFsdWUpOwogc3RhdGljIHN0cnVjdCBsbTg1X2RhdGEgKmxtODVfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTg1X2lkW10gPSB7CisJeyAiYWRtMTAyNyIsIGFkbTEwMjcgfSwKKwl7ICJhZHQ3NDYzIiwgYWR0NzQ2MyB9LAorCXsgImxtODUiLCBhbnlfY2hpcCB9LAorCXsgImxtODViIiwgbG04NWIgfSwKKwl7ICJsbTg1YyIsIGxtODVjIH0sCisJeyAiZW1jNmQxMDAiLCBlbWM2ZDEwMCB9LAorCXsgImVtYzZkMTAxIiwgZW1jNmQxMDAgfSwKKwl7ICJlbWM2ZDEwMiIsIGVtYzZkMTAyIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtODVfaWQpOworCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG04NV9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZSAgID0gImxtODUiLAogCX0sCi0JLmF0dGFjaF9hZGFwdGVyID0gbG04NV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCAgPSBsbTg1X2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IGxtODVfcHJvYmUsCisJLnJlbW92ZQkJPSBsbTg1X3JlbW92ZSwKKwkuaWRfdGFibGUJPSBsbTg1X2lkLAorCS5kZXRlY3QJCT0gbG04NV9kZXRlY3QsCisJLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCiB9OwogCiAKQEAgLTUyOCwxMSArNTQ2LDM5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBsbTg1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRlJFUV9GUk9NX1JFRyhkYXRhLT5mcmVxX21hcCwKKwkJCQkJCSAgZGF0YS0+cHdtX2ZyZXFbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5wd21fZnJlcVtucl0gPSBGUkVRX1RPX1JFRyhkYXRhLT5mcmVxX21hcCwgdmFsKTsKKwlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShuciksCisJCShkYXRhLT56b25lW25yXS5yYW5nZSA8PCA0KQorCQl8IGRhdGEtPnB3bV9mcmVxW25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCiAjZGVmaW5lIHNob3dfcHdtX3JlZyhvZmZzZXQpCQkJCQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCiAJCXNob3dfcHdtLCBzZXRfcHdtLCBvZmZzZXQgLSAxKTsJCQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCVwKLQkJc2hvd19wd21fZW5hYmxlLCBzZXRfcHdtX2VuYWJsZSwgb2Zmc2V0IC0gMSkKKwkJc2hvd19wd21fZW5hYmxlLCBzZXRfcHdtX2VuYWJsZSwgb2Zmc2V0IC0gMSk7CQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZnJlcSwgU19JUlVHTyB8IFNfSVdVU1IsCVwKKwkJc2hvd19wd21fZnJlcSwgc2V0X3B3bV9mcmVxLCBvZmZzZXQgLSAxKQogCiBzaG93X3B3bV9yZWcoMSk7CiBzaG93X3B3bV9yZWcoMik7CkBAIC03NjEsMzEgKzgwNyw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3B3bV9hdXRvX3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OwotCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBsbTg1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRlJFUV9GUk9NX1JFRyhkYXRhLT5hdXRvZmFuW25yXS5mcmVxKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9wd21fYXV0b19wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5hdXRvZmFuW25yXS5mcmVxID0gRlJFUV9UT19SRUcodmFsKTsKLQlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShuciksCi0JCShkYXRhLT56b25lW25yXS5yYW5nZSA8PCA0KQotCQl8IGRhdGEtPmF1dG9mYW5bbnJdLmZyZXEpOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQogI2RlZmluZSBwd21fYXV0byhvZmZzZXQpCQkJCQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2F1dG9fY2hhbm5lbHMsCQkJXAogCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21fYXV0b19jaGFubmVscywJCVwKQEAgLTc5NSwxMCArODE2LDcgQEAKIAkJc2V0X3B3bV9hdXRvX3B3bV9taW4sIG9mZnNldCAtIDEpOwkJCVwKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19hdXRvX3B3bV9taW5jdGwsCQlcCiAJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bV9hdXRvX3B3bV9taW5jdGwsCQlcCi0JCXNldF9wd21fYXV0b19wd21fbWluY3RsLCBvZmZzZXQgLSAxKTsJCQlcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfYXV0b19wd21fZnJlcSwJCQlcCi0JCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bV9hdXRvX3B3bV9mcmVxLAkJXAotCQlzZXRfcHdtX2F1dG9fcHdtX2ZyZXEsIG9mZnNldCAtIDEpOworCQlzZXRfcHdtX2F1dG9fcHdtX21pbmN0bCwgb2Zmc2V0IC0gMSkKIAogcHdtX2F1dG8oMSk7CiBwd21fYXV0bygyKTsKQEAgLTg2Nyw3ICs4ODUsNyBAQAogCQlURU1QX0ZST01fUkVHKGRhdGEtPnpvbmVbbnJdLmxpbWl0KSk7CiAJbG04NV93cml0ZV92YWx1ZShjbGllbnQsIExNODVfUkVHX0FGQU5fUkFOR0UobnIpLAogCQkoKGRhdGEtPnpvbmVbbnJdLnJhbmdlICYgMHgwZikgPDwgNCkKLQkJfCAoZGF0YS0+YXV0b2Zhbltucl0uZnJlcSAmIDB4MDcpKTsKKwkJfCAoZGF0YS0+cHdtX2ZyZXFbbnJdICYgMHgwNykpOwogCiAvKiBVcGRhdGUgdGVtcF9hdXRvX2h5c3QgYW5kIHRlbXBfYXV0b19vZmYgKi8KIAlkYXRhLT56b25lW25yXS5oeXN0ID0gSFlTVF9UT19SRUcoVEVNUF9GUk9NX1JFRygKQEAgLTkxMCw3ICs5MjgsNyBAQAogCQl2YWwgLSBtaW4pOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKIAkJKChkYXRhLT56b25lW25yXS5yYW5nZSAmIDB4MGYpIDw8IDQpCi0JCXwgKGRhdGEtPmF1dG9mYW5bbnJdLmZyZXEgJiAweDA3KSk7CisJCXwgKGRhdGEtPnB3bV9mcmVxW25yXSAmIDB4MDcpKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05NTcsMTMgKzk3NSw2IEBACiB0ZW1wX2F1dG8oMik7CiB0ZW1wX2F1dG8oMyk7CiAKLXN0YXRpYyBpbnQgbG04NV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGxtODVfZGV0ZWN0KTsKLX0KLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtODVfYXR0cmlidXRlc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLApAQCAtOTg0LDYgKzk5NSw5IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9lbmFibGUuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfZW5hYmxlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2ZyZXEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZnJlcS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19mcmVxLmRldl9hdHRyLmF0dHIsCiAKIAkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCkBAIC0xMDI2LDkgKzEwNDAsNiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3B3bV9mcmVxLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcHdtX2ZyZXEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wd21fZnJlcS5kZXZfYXR0ci5hdHRyLAogCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3RlbXBfb2ZmLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3RlbXBfb2ZmLmRldl9hdHRyLmF0dHIsCkBAIC0xMTAzLDEwOSArMTExNCw3NCBAQAogCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJEZXZpY2UgaXMgbm90IHJlYWR5XG4iKTsKIH0KIAotc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAotCQlpbnQga2luZCkKKy8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLworc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKLQlpbnQgY29tcGFueSwgdmVyc3RlcDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGE7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCWludCBhZGRyZXNzID0gY2xpZW50LT5hZGRyOwogCWNvbnN0IGNoYXIgKnR5cGVfbmFtZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewogCQkvKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZG8gYnl0ZSBJL08gKi8KLQkJZ290byBFUlJPUjA7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIE9LLiBGb3Igbm93LCB3ZSBwcmVzdW1lIHdlIGhhdmUgYSB2YWxpZCBjbGllbnQuIFdlIG5vdyBjcmVhdGUgdGhlCi0JICAgY2xpZW50IHN0cnVjdHVyZSwgZXZlbiB0aG91Z2ggd2UgY2Fubm90IGZpbGwgaXQgY29tcGxldGVseSB5ZXQuCi0JICAgQnV0IGl0IGFsbG93cyB1cyB0byBhY2Nlc3MgbG04NV97cmVhZCx3cml0ZX1fdmFsdWUuICovCisJLyogSWYgYXV0by1kZXRlY3RpbmcsIGRldGVybWluZSB0aGUgY2hpcCB0eXBlICovCisJaWYgKGtpbmQgPCAwKSB7CisJCWludCBjb21wYW55ID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQ09NUEFOWSk7CisJCWludCB2ZXJzdGVwID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfVkVSU1RFUCk7CiAKLQlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtODVfZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIEVSUk9SMDsKLQl9CisJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldGVjdGluZyBkZXZpY2UgYXQgMHglMDJ4IHdpdGggIgorCQkJIkNPTVBBTlk6IDB4JTAyeCBhbmQgVkVSU1RFUDogMHglMDJ4XG4iLAorCQkJYWRkcmVzcywgY29tcGFueSwgdmVyc3RlcCk7CiAKLQljbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZsbTg1X2RyaXZlcjsKKwkJLyogQWxsIHN1cHBvcnRlZCBjaGlwcyBoYXZlIHRoZSB2ZXJzaW9uIGluIGNvbW1vbiAqLworCQlpZiAoKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spICE9IExNODVfVkVSU1RFUF9HRU5FUklDKSB7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZDogIgorCQkJCSJ1bnN1cHBvcnRlZCB2ZXJzaW9uXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWtpbmQgPSBhbnlfY2hpcDsKIAotCS8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uICovCi0KLQljb21wYW55ID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQ09NUEFOWSk7Ci0JdmVyc3RlcCA9IGxtODVfcmVhZF92YWx1ZShjbGllbnQsIExNODVfUkVHX1ZFUlNURVApOwotCi0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW5nIGRldmljZSBhdCAlZCwweCUwMnggd2l0aCIKLQkJIiBDT01QQU5ZOiAweCUwMnggYW5kIFZFUlNURVA6IDB4JTAyeFxuIiwKLQkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyLAotCQljb21wYW55LCB2ZXJzdGVwKTsKLQotCS8qIElmIGF1dG8tZGV0ZWN0aW5nLCBEZXRlcm1pbmUgdGhlIGNoaXAgdHlwZS4gKi8KLQlpZiAoa2luZCA8PSAwKSB7Ci0JCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3RpbmcgZGV2aWNlIGF0ICVkLDB4JTAyeCAuLi5cbiIsCi0JCQlpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSwgYWRkcmVzcyk7Ci0JCWlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTAotCQkgICAgJiYgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfTE04NUMpIHsKLQkJCWtpbmQgPSBsbTg1YzsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTAotCQkgICAgJiYgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfTE04NUIpIHsKLQkJCWtpbmQgPSBsbTg1YjsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTAotCQkgICAgJiYgKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spID09IExNODVfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJVbnJlY29nbml6ZWQgdmVyc2lvbi9zdGVwcGluZyAweCUwMngiCi0JCQkJIiBEZWZhdWx0aW5nIHRvIExNODUuXG4iLCB2ZXJzdGVwKTsKLQkJCWtpbmQgPSBhbnlfY2hpcDsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9BTkFMT0dfREVWCi0JCSAgICAmJiB2ZXJzdGVwID09IExNODVfVkVSU1RFUF9BRE0xMDI3KSB7Ci0JCQlraW5kID0gYWRtMTAyNzsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9BTkFMT0dfREVWCi0JCSAgICAmJiAodmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfQURUNzQ2MwotCQkJIHx8IHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0FEVDc0NjNDKSkgewotCQkJa2luZCA9IGFkdDc0NjM7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfQU5BTE9HX0RFVgotCQkgICAgJiYgKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spID09IExNODVfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJVbnJlY29nbml6ZWQgdmVyc2lvbi9zdGVwcGluZyAweCUwMngiCi0JCQkJIiBEZWZhdWx0aW5nIHRvIEdlbmVyaWMgTE04NS5cbiIsIHZlcnN0ZXApOwotCQkJa2luZCA9IGFueV9jaGlwOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX1NNU0MKLQkJICAgICYmICh2ZXJzdGVwID09IExNODVfVkVSU1RFUF9FTUM2RDEwMF9BMAotCQkJIHx8IHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0VNQzZEMTAwX0ExKSkgewotCQkJLyogVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgdGVsbCBhICcxMDAgZnJvbSBhICcxMDEKLQkJCSAqIGZyb20gdGhlIHJlZ2lzdGVycy4gIFNpbmNlIGEgJzEwMSBpcyBhICcxMDAKLQkJCSAqIGluIGEgcGFja2FnZSB3aXRoIGZld2VyIHBpbnMgYW5kIHRoZXJlZm9yZSBubwotCQkJICogMy4zViwgMS41ViBvciAxLjhWIGlucHV0cywgcGVyaGFwcyBpZiB0aG9zZQotCQkJICogaW5wdXRzIHJlYWQgMCwgdGhlbiBpdCdzIGEgJzEwMS4KLQkJCSAqLwotCQkJa2luZCA9IGVtYzZkMTAwOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX1NNU0MKLQkJICAgICYmIHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0VNQzZEMTAyKSB7Ci0JCQlraW5kID0gZW1jNmQxMDI7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfU01TQwotCQkgICAgJiYgKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spID09IExNODVfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJsbTg1OiBEZXRlY3RlZCBTTVNDIGNoaXBcbiIpOwotCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAibG04NTogVW5yZWNvZ25pemVkIHZlcnNpb24vc3RlcHBpbmcgMHglMDJ4IgotCQkJICAgICIgRGVmYXVsdGluZyB0byBHZW5lcmljIExNODUuXG4iLCB2ZXJzdGVwKTsKLQkJCWtpbmQgPSBhbnlfY2hpcDsKLQkJfSBlbHNlIGlmIChraW5kID09IGFueV9jaGlwCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgTE04NSBWZXJzaW9uIDYgZGV0ZWN0ZWRcbiIpOwotCQkJLyogTGVhdmUga2luZCBhcyAiYW55X2NoaXAiICovCi0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZFxuIik7Ci0JCQkvKiBOb3QgYW4gTE04NS4uLiAqLwotCQkJaWYgKGtpbmQgPT0gYW55X2NoaXApIHsgIC8qIFVzZXIgdXNlZCBmb3JjZT14LHkgKi8KLQkJCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJHZW5lcmljIExNODUgVmVyc2lvbiA2IG5vdCIKLQkJCQkJIiBmb3VuZCBhdCAlZCwweCUwMnguIFRyeSBmb3JjZV9sbTg1Yy5cbiIsCi0JCQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKKwkJLyogTm93LCByZWZpbmUgdGhlIGRldGVjdGlvbiAqLworCQlpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfTkFUSU9OQUwpIHsKKwkJCXN3aXRjaCAodmVyc3RlcCkgeworCQkJY2FzZSBMTTg1X1ZFUlNURVBfTE04NUM6CisJCQkJa2luZCA9IGxtODVjOworCQkJCWJyZWFrOworCQkJY2FzZSBMTTg1X1ZFUlNURVBfTE04NUI6CisJCQkJa2luZCA9IGxtODViOworCQkJCWJyZWFrOwogCQkJfQotCQkJZXJyID0gMDsKLQkJCWdvdG8gRVJST1IxOworCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX0FOQUxPR19ERVYpIHsKKwkJCXN3aXRjaCAodmVyc3RlcCkgeworCQkJY2FzZSBMTTg1X1ZFUlNURVBfQURNMTAyNzoKKwkJCQlraW5kID0gYWRtMTAyNzsKKwkJCQlicmVhazsKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0FEVDc0NjM6CisJCQljYXNlIExNODVfVkVSU1RFUF9BRFQ3NDYzQzoKKwkJCQlraW5kID0gYWR0NzQ2MzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9TTVNDKSB7CisJCQlzd2l0Y2ggKHZlcnN0ZXApIHsKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAwX0EwOgorCQkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTE6CisJCQkJLyogTm90ZTogd2UgY2FuJ3QgdGVsbCBhICcxMDAgZnJvbSBhICcxMDEgKi8KKwkJCQlraW5kID0gZW1jNmQxMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwMjoKKwkJCQlraW5kID0gZW1jNmQxMDI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZDogIgorCQkJCSJ1bmtub3duIHZlbmRvclxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIAotCS8qIEZpbGwgaW4gdGhlIGNoaXAgc3BlY2lmaWMgZHJpdmVyIHZhbHVlcyAqLwogCXN3aXRjaCAoa2luZCkgewogCWNhc2UgbG04NWI6CiAJCXR5cGVfbmFtZSA9ICJsbTg1YiI7CkBAIC0xMjI4LDE2ICsxMjA0LDM2IEBACiAJZGVmYXVsdDoKIAkJdHlwZV9uYW1lID0gImxtODUiOwogCX0KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgdHlwZV9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIHR5cGVfbmFtZSwgSTJDX05BTUVfU0laRSk7CiAKLQkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyAqLwotCWRhdGEtPnR5cGUgPSBraW5kOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxtODVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGE7CisJaW50IGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG04NV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWRhdGEtPnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCi0JLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikKLQkJZ290byBFUlJPUjE7CisJLyogRmlsbCBpbiB0aGUgY2hpcCBzcGVjaWZpYyBkcml2ZXIgdmFsdWVzICovCisJc3dpdGNoIChkYXRhLT50eXBlKSB7CisJY2FzZSBhZG0xMDI3OgorCWNhc2UgYWR0NzQ2MzoKKwljYXNlIGVtYzZkMTAwOgorCWNhc2UgZW1jNmQxMDI6CisJCWRhdGEtPmZyZXFfbWFwID0gYWRtMTAyN19mcmVxX21hcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YS0+ZnJlcV9tYXAgPSBsbTg1X2ZyZXFfbWFwOworCX0KIAogCS8qIFNldCB0aGUgVlJNIHZlcnNpb24gKi8KIAlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CkBAIC0xMjQ4LDQ1ICsxMjQ0LDQyIEBACiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwKTsKIAlpZiAoZXJyKQotCQlnb3RvIEVSUk9SMjsKKwkJZ290byBlcnJfa2ZyZWU7CiAKIAkvKiBUaGUgQURUNzQ2MyBoYXMgYW4gb3B0aW9uYWwgVlJNIDEwIG1vZGUgd2hlcmUgcGluIDIxIGlzIHVzZWQKIAkgICBhcyBhIHNpeHRoIGRpZ2l0YWwgVklEIGlucHV0IHJhdGhlciB0aGFuIGFuIGFuYWxvZyBpbnB1dC4gKi8KIAlkYXRhLT52aWQgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19WSUQpOwotCWlmICghKGtpbmQgPT0gYWR0NzQ2MyAmJiAoZGF0YS0+dmlkICYgMHg4MCkpKQorCWlmICghKGRhdGEtPnR5cGUgPT0gYWR0NzQ2MyAmJiAoZGF0YS0+dmlkICYgMHg4MCkpKQogCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwKIAkJCQkJJmxtODVfZ3JvdXBfaW40KSkpCi0JCQlnb3RvIEVSUk9SMzsKKwkJCWdvdG8gZXJyX3JlbW92ZV9maWxlczsKIAogCS8qIFRoZSBFTUM2RDEwMCBoYXMgMyBhZGRpdGlvbmFsIHZvbHRhZ2UgaW5wdXRzICovCi0JaWYgKGtpbmQgPT0gZW1jNmQxMDApCisJaWYgKGRhdGEtPnR5cGUgPT0gZW1jNmQxMDApCiAJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAogCQkJCQkmbG04NV9ncm91cF9pbjU2NykpKQotCQkJZ290byBFUlJPUjM7CisJCQlnb3RvIGVycl9yZW1vdmVfZmlsZXM7CiAKIAlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIEVSUk9SMzsKKwkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCX0KIAogCXJldHVybiAwOwogCiAJLyogRXJyb3Igb3V0IGFuZCBjbGVhbnVwIGNvZGUgKi8KLSBFUlJPUjM6CisgZXJyX3JlbW92ZV9maWxlczoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwX2luNCk7Ci0JaWYgKGtpbmQgPT0gZW1jNmQxMDApCisJaWYgKGRhdGEtPnR5cGUgPT0gZW1jNmQxMDApCiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfaW41NjcpOwotIEVSUk9SMjoKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotIEVSUk9SMToKKyBlcnJfa2ZyZWU6CiAJa2ZyZWUoZGF0YSk7Ci0gRVJST1IwOgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbG04NV9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGxtODVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CkBAIC0xMjk0LDcgKzEyODcsNiBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfaW40KTsKIAlpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMCkKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cF9pbjU2Nyk7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0ODEsNyArMTQ3Myw3IEBACiAJCQlkYXRhLT5hdXRvZmFuW2ldLmNvbmZpZyA9CiAJCQkgICAgbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9DT05GSUcoaSkpOwogCQkJdmFsID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShpKSk7Ci0JCQlkYXRhLT5hdXRvZmFuW2ldLmZyZXEgPSB2YWwgJiAweDA3OworCQkJZGF0YS0+cHdtX2ZyZXFbaV0gPSB2YWwgJiAweDA3OwogCQkJZGF0YS0+em9uZVtpXS5yYW5nZSA9IHZhbCA+PiA0OwogCQkJZGF0YS0+YXV0b2ZhbltpXS5taW5fcHdtID0KIAkJCSAgICBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX01JTlBXTShpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODcuYyBiL2RyaXZlcnMvaHdtb24vbG04Ny5jCmluZGV4IDIxOTcwZjAuLjJlNGEzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04Ny5jCkBAIC0yMSwxMSArMjEsMTAgQEAKICAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE04Ny5odG1sCiAgKgogICogU29tZSBmdW5jdGlvbnMgc2hhcmUgcGlucywgc28gbm90IGFsbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgc2FtZQotICogdGltZS4gV2hpY2ggYXJlIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHNldHVwLiBUaGlzIGRyaXZlciBhc3N1bWVzIHRoYXQKLSAqIHRoZSBCSU9TIGNvbmZpZ3VyZWQgdGhlIGNoaXAgY29ycmVjdGx5LiBJbiB0aGF0IHJlc3BlY3QsIGl0ICBkaWZmZXJzIGZyb20KLSAqIHRoZSBvcmlnaW5hbCBkcml2ZXIgKGZyb20gbG1fc2Vuc29ycyBmb3IgTGludXggMi40KSwgd2hpY2ggd291bGQgZm9yY2UgdGhlCi0gKiBMTTg3IHRvIGFuIGFyYml0cmFyeSwgY29tcGlsZS10aW1lIGNob3NlbiBtb2RlLCByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwKLSAqIGNoaXBzZXQgd2lyaW5nLgorICogdGltZS4gV2hpY2ggYXJlIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHNldHVwLiBUaGlzIGRyaXZlciBub3JtYWxseQorICogYXNzdW1lcyB0aGF0IGZpcm13YXJlIGNvbmZpZ3VyZWQgdGhlIGNoaXAgY29ycmVjdGx5LiBXaGVyZSB0aGlzIGlzIG5vdAorICogdGhlIGNhc2UsIHBsYXRmb3JtIGNvZGUgbXVzdCBzZXQgdGhlIEkyQyBjbGllbnQncyBwbGF0Zm9ybV9kYXRhIHRvIHBvaW50CisgKiB0byBhIHU4IHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNoYW5uZWwgcmVnaXN0ZXIuCiAgKiBGb3IgcmVmZXJlbmNlLCBoZXJlIGlzIHRoZSBsaXN0IG9mIGV4Y2x1c2l2ZSBmdW5jdGlvbnM6CiAgKiAgLSBpbjAraW41IChkZWZhdWx0KSBvciB0ZW1wMwogICogIC0gZmFuMSAoZGVmYXVsdCkgb3IgaW42CkBAIC0xOTksNiArMTk4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogSW4gamlmZmllcyAqLwogCiAJdTggY2hhbm5lbDsJCS8qIHJlZ2lzdGVyIHZhbHVlICovCisJdTggY29uZmlnOwkJLyogb3JpZ2luYWwgcmVnaXN0ZXIgdmFsdWUgKi8KIAogCXU4IGluWzhdOwkJLyogcmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBpbl9tYXhbOF07CQkvKiByZWdpc3RlciB2YWx1ZSAqLwpAQCAtODMyLDYgKzgzMiw3IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwX29wdCk7CiBleGl0X2ZyZWU6CisJbG04N193cml0ZV92YWx1ZShuZXdfY2xpZW50LCBMTTg3X1JFR19DT05GSUcsIGRhdGEtPmNvbmZpZyk7CiAJa2ZyZWUoZGF0YSk7CiBleGl0OgogCXJldHVybiBlcnI7CkBAIC04NDAsMTIgKzg0MSwxNyBAQAogc3RhdGljIHZvaWQgbG04N19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBsbTg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1OCBjb25maWc7CiAKLQlkYXRhLT5jaGFubmVsID0gbG04N19yZWFkX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ0hBTk5FTF9NT0RFKTsKKwlpZiAoY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkYXRhLT5jaGFubmVsID0gKih1OCAqKWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LAorCQkJCSBMTTg3X1JFR19DSEFOTkVMX01PREUsIGRhdGEtPmNoYW5uZWwpOworCX0gZWxzZSB7CisJCWRhdGEtPmNoYW5uZWwgPSBsbTg3X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DSEFOTkVMX01PREUpOworCX0KKwlkYXRhLT5jb25maWcgPSBsbTg3X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DT05GSUcpICYgMHg2RjsKIAotCWNvbmZpZyA9IGxtODdfcmVhZF92YWx1ZShjbGllbnQsIExNODdfUkVHX0NPTkZJRyk7Ci0JaWYgKCEoY29uZmlnICYgMHgwMSkpIHsKKwlpZiAoIShkYXRhLT5jb25maWcgJiAweDAxKSkgewogCQlpbnQgaTsKIAogCQkvKiBMaW1pdHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhZnRlciBwb3dlci11cCAqLwpAQCAtODY3LDExICs4NzMsMTEgQEAKIAkJCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19JTl9NQVgoMCksIDB4RkYpOwogCQl9CiAJfQotCWlmICgoY29uZmlnICYgMHg4MSkgIT0gMHgwMSkgewotCQkvKiBTdGFydCBtb25pdG9yaW5nICovCisKKwkvKiBNYWtlIHN1cmUgU3RhcnQgaXMgc2V0IGFuZCBJTlQjX0NsZWFyIGlzIGNsZWFyICovCisJaWYgKChkYXRhLT5jb25maWcgJiAweDA5KSAhPSAweDAxKQogCQlsbTg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ09ORklHLAotCQkJCSAoY29uZmlnICYgMHhGNykgfCAweDAxKTsKLQl9CisJCQkJIChkYXRhLT5jb25maWcgJiAweDc3KSB8IDB4MDEpOwogfQogCiBzdGF0aWMgaW50IGxtODdfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC04ODIsNiArODg4LDcgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwX29wdCk7CiAKKwlsbTg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ09ORklHLCBkYXRhLT5jb25maWcpOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTkwLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwppbmRleCBjMjRmZTM2Li4zZWRlZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtOTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwpAQCAtMSwxNCArMSwxMiBAQAogLyoKICAqIGxtOTAuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCiAgKiAgICAgICAgICBtb25pdG9yaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgKgogICogQmFzZWQgb24gdGhlIGxtODMgZHJpdmVyLiBUaGUgTE05MCBpcyBhIHNlbnNvciBjaGlwIG1hZGUgYnkgTmF0aW9uYWwKICAqIFNlbWljb25kdWN0b3IuIEl0IHJlcG9ydHMgdXAgdG8gdHdvIHRlbXBlcmF0dXJlcyAoaXRzIG93biBwbHVzIHVwIHRvCiAgKiBvbmUgZXh0ZXJuYWwgb25lKSB3aXRoIGEgMC4xMjUgZGVnIHJlc29sdXRpb24gKDEgZGVnIGZvciBsb2NhbAotICogdGVtcGVyYXR1cmUpIGFuZCBhIDMtNCBkZWcgYWNjdXJhY3kuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUKLSAqIG9idGFpbmVkIGZyb20gTmF0aW9uYWwncyB3ZWJzaXRlIGF0OgotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTkwLmh0bWwKKyAqIHRlbXBlcmF0dXJlKSBhbmQgYSAzLTQgZGVnIGFjY3VyYWN5LgogICoKICAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIExNODkgYW5kIExNOTksIHR3byBvdGhlciBzZW5zb3IgY2hpcHMKICAqIG1hZGUgYnkgTmF0aW9uYWwgU2VtaWNvbmR1Y3Rvci4gQm90aCBoYXZlIGFuIGluY3JlYXNlZCByZW1vdGUKQEAgLTE2LDQ4ICsxNCwzOCBAQAogICogYWRkaXRpb25hbGx5IHNoaWZ0cyByZW1vdGUgdGVtcGVyYXR1cmVzIChtZWFzdXJlZCBhbmQgbGltaXRzKSBieSAxNgogICogZGVncmVlcywgd2hpY2ggYWxsb3dzIGZvciBoaWdoZXIgdGVtcGVyYXR1cmVzIG1lYXN1cmVtZW50LiBUaGUKICAqIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBpdCBzaW5jZSBpdCBjYW4gYmUgZG9uZSBlYXNpbHkgaW4gdXNlci1zcGFjZS4KLSAqIENvbXBsZXRlIGRhdGFzaGVldHMgY2FuIGJlIG9idGFpbmVkIGZyb20gTmF0aW9uYWwncyB3ZWJzaXRlIGF0OgotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg5Lmh0bWwKLSAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE05OS5odG1sCiAgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBib3RoIGNoaXBzLgogICoKICAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIExNODYsIGFub3RoZXIgc2Vuc29yIGNoaXAgbWFkZSBieQogICogTmF0aW9uYWwgU2VtaWNvbmR1Y3Rvci4gSXQgaXMgZXhhY3RseSBzaW1pbGFyIHRvIHRoZSBMTTkwIGV4Y2VwdCBpdAogICogaGFzIGEgaGlnaGVyIGFjY3VyYWN5LgotICogQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIE5hdGlvbmFsJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE04Ni5odG1sCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURNMTAzMiwgYSBzZW5zb3IgY2hpcCBtYWRlIGJ5IEFuYWxvZwogICogRGV2aWNlcy4gVGhhdCBjaGlwIGlzIHNpbWlsYXIgdG8gdGhlIExNOTAsIHdpdGggYSBmZXcgZGlmZmVyZW5jZXMKLSAqIHRoYXQgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyLiBDb21wbGV0ZSBkYXRhc2hlZXQgY2FuIGJlCi0gKiBvYnRhaW5lZCBmcm9tIEFuYWxvZydzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9lbi9wcm9kLzAsMjg3NyxBRE0xMDMyLDAwLmh0bWwKLSAqIEFtb25nIG90aGVycywgaXQgaGFzIGEgaGlnaGVyIGFjY3VyYWN5IHRoYW4gdGhlIExNOTAsIG11Y2ggbGlrZSB0aGUKLSAqIExNODYgZG9lcy4KKyAqIHRoYXQgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyLiBBbW9uZyBvdGhlcnMsIGl0IGhhcyBhIGhpZ2hlcgorICogYWNjdXJhY3kgdGhhbiB0aGUgTE05MCwgbXVjaCBsaWtlIHRoZSBMTTg2IGRvZXMuCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTUFYNjY1NywgTUFYNjY1OCBhbmQgTUFYNjY1OSBzZW5zb3IKLSAqIGNoaXBzIG1hZGUgYnkgTWF4aW0uIFRoZXNlIGNoaXBzIGFyZSBzaW1pbGFyIHRvIHRoZSBMTTg2LiBDb21wbGV0ZQotICogZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBhdCBNYXhpbSdzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8yNTc4CisgKiBjaGlwcyBtYWRlIGJ5IE1heGltLiBUaGVzZSBjaGlwcyBhcmUgc2ltaWxhciB0byB0aGUgTE04Ni4KICAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHRocmVlCiAgKiB2YXJpYW50cy4gVGhlIGV4dHJhIGFkZHJlc3MgYW5kIGZlYXR1cmVzIG9mIHRoZSBNQVg2NjU5IGFyZSBub3QKICAqIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4gVGhlc2UgY2hpcHMgbGFjayB0aGUgcmVtb3RlIHRlbXBlcmF0dXJlCiAgKiBvZmZzZXQgZmVhdHVyZS4KICAqCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBNQVg2NjQ2LCBNQVg2NjQ3IGFuZCBNQVg2NjQ5IGNoaXBzCisgKiBtYWRlIGJ5IE1heGltLiAgVGhlc2UgYXJlIGFnYWluIHNpbWlsYXIgdG8gdGhlIExNODYsIGJ1dCB0aGV5IHVzZQorICogdW5zaWduZWQgdGVtcGVyYXR1cmUgdmFsdWVzIGFuZCBjYW4gcmVwb3J0IHRlbXBlcmF0dXJlcyBmcm9tIDAgdG8KKyAqIDE0NSBkZWdyZWVzLgorICoKICAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIE1BWDY2ODAgYW5kIE1BWDY2ODEsIHR3byBvdGhlciBzZW5zb3IKICAqIGNoaXBzIG1hZGUgYnkgTWF4aW0uIFRoZXNlIGFyZSBxdWl0ZSBzaW1pbGFyIHRvIHRoZSBvdGhlciBNYXhpbQotICogY2hpcHMuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUgb2J0YWluZWQgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zMzcwCi0gKiBUaGUgTUFYNjY4MCBhbmQgTUFYNjY4MSBvbmx5IGRpZmZlciBpbiB0aGUgcGlub3V0IHNvIHRoZXkgY2FuIGJlCi0gKiB0cmVhdGVkIGlkZW50aWNhbGx5LgorICogY2hpcHMuIFRoZSBNQVg2NjgwIGFuZCBNQVg2NjgxIG9ubHkgZGlmZmVyIGluIHRoZSBwaW5vdXQgc28gdGhleSBjYW4KKyAqIGJlIHRyZWF0ZWQgaWRlbnRpY2FsbHkuCiAgKgotICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURUNzQ2MSBjaGlwIGZyb20gQW5hbG9nIERldmljZXMgYnV0Ci0gKiBvbmx5IGluIGl0cyAiY29tcGF0YWJpbGl0eSBtb2RlIi4gSWYgYW4gQURUNzQ2MSBjaGlwIGlzIGZvdW5kIGJ1dAotICogaXMgY29uZmlndXJlZCBpbiBub24tY29tcGF0aWJsZSBtb2RlICh3aGVyZSBpdHMgdGVtcGVyYXR1cmUKLSAqIHJlZ2lzdGVyIHZhbHVlcyBhcmUgZGVjb2RlZCBkaWZmZXJlbnRseSkgaXQgaXMgaWdub3JlZCBieSB0aGlzCi0gKiBkcml2ZXIuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUgb2J0YWluZWQgZnJvbSBBbmFsb2cncyB3ZWJzaXRlCi0gKiBhdDoKLSAqICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFEVDc0NjEsMDAuaHRtbAorICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURUNzQ2MSBjaGlwIGZyb20gQW5hbG9nIERldmljZXMuCisgKiBJdCdzIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVuZGVkIG1vZGUuIEl0IGlzIG1vc3RseQorICogY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEgZm9ybWF0IGRpZmZlcmVuY2UgZm9yIHRoZQorICogdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgogICoKICAqIFNpbmNlIHRoZSBMTTkwIHdhcyB0aGUgZmlyc3QgY2hpcHNldCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG1vc3QKICAqIGNvbW1lbnRzIHdpbGwgcmVmZXIgdG8gdGhpcyBjaGlwc2V0LCBidXQgYXJlIGFjdHVhbGx5IGdlbmVyYWwgYW5kCkBAIC05Myw5ICs4MSwxMCBAQAogICogQWRkcmVzc2VzIHRvIHNjYW4KICAqIEFkZHJlc3MgaXMgZnVsbHkgZGVmaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYmUgY2hhbmdlZCBleGNlcHQgZm9yCiAgKiBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxLgotICogTE04NiwgTE04OSwgTE05MCwgTE05OSwgQURNMTAzMiwgQURNMTAzMi0xLCBBRFQ3NDYxLCBNQVg2NjU3IGFuZCBNQVg2NjU4Ci0gKiBoYXZlIGFkZHJlc3MgMHg0Yy4KLSAqIEFETTEwMzItMiwgQURUNzQ2MS0yLCBMTTg5LTEsIGFuZCBMTTk5LTEgaGF2ZSBhZGRyZXNzIDB4NGQuCisgKiBMTTg2LCBMTTg5LCBMTTkwLCBMTTk5LCBBRE0xMDMyLCBBRE0xMDMyLTEsIEFEVDc0NjEsIE1BWDY2NDksIE1BWDY2NTcKKyAqIGFuZCBNQVg2NjU4IGhhdmUgYWRkcmVzcyAweDRjLgorICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIExNODktMSwgTE05OS0xIGFuZCBNQVg2NjQ2IGhhdmUgYWRkcmVzcyAweDRkLgorICogTUFYNjY0NyBoYXMgYWRkcmVzcyAweDRlLgogICogTUFYNjY1OSBjYW4gaGF2ZSBhZGRyZXNzIDB4NGMsIDB4NGQgb3IgMHg0ZSAodW5zdXBwb3J0ZWQpLgogICogTUFYNjY4MCBhbmQgTUFYNjY4MSBjYW4gaGF2ZSBhZGRyZXNzIDB4MTgsIDB4MTksIDB4MWEsIDB4MjksIDB4MmEsIDB4MmIsCiAgKiAweDRjLCAweDRkIG9yIDB4NGUuCkBAIC0xMDgsNyArOTcsOCBAQAogICogSW5zbW9kIHBhcmFtZXRlcnMKICAqLwogCi1JMkNfQ0xJRU5UX0lOU01PRF83KGxtOTAsIGFkbTEwMzIsIGxtOTksIGxtODYsIG1heDY2NTcsIGFkdDc0NjEsIG1heDY2ODApOworSTJDX0NMSUVOVF9JTlNNT0RfOChsbTkwLCBhZG0xMDMyLCBsbTk5LCBsbTg2LCBtYXg2NjU3LCBhZHQ3NDYxLCBtYXg2NjgwLAorCQkgICAgbWF4NjY0Nik7CiAKIC8qCiAgKiBUaGUgTE05MCByZWdpc3RlcnMKQEAgLTE0OSwzOSArMTM5LDE0IEBACiAjZGVmaW5lIExNOTBfUkVHX1JfVENSSVRfSFlTVAkJMHgyMQogI2RlZmluZSBMTTkwX1JFR19XX1RDUklUX0hZU1QJCTB4MjEKIAorLyogTUFYNjY0Ni82NjQ3LzY2NDkvNjY1Ny82NjU4LzY2NTkgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgTUFYNjY1N19SRUdfUl9MT0NBTF9URU1QTAkweDExCisKIC8qCi0gKiBDb252ZXJzaW9ucyBhbmQgdmFyaW91cyBtYWNyb3MKLSAqIEZvciBsb2NhbCB0ZW1wZXJhdHVyZXMgYW5kIGxpbWl0cywgY3JpdGljYWwgbGltaXRzIGFuZCB0aGUgaHlzdGVyZXNpcwotICogdmFsdWUsIHRoZSBMTTkwIHVzZXMgc2lnbmVkIDgtYml0IHZhbHVlcyB3aXRoIExTQiA9IDEgZGVncmVlIENlbHNpdXMuCi0gKiBGb3IgcmVtb3RlIHRlbXBlcmF0dXJlcyBhbmQgbGltaXRzLCBpdCB1c2VzIHNpZ25lZCAxMS1iaXQgdmFsdWVzIHdpdGgKLSAqIExTQiA9IDAuMTI1IGRlZ3JlZSBDZWxzaXVzLCBsZWZ0LWp1c3RpZmllZCBpbiAxNi1iaXQgcmVnaXN0ZXJzLgorICogRGV2aWNlIGZsYWdzCiAgKi8KLQotI2RlZmluZSBURU1QMV9GUk9NX1JFRyh2YWwpCSgodmFsKSAqIDEwMDApCi0jZGVmaW5lIFRFTVAxX1RPX1JFRyh2YWwpCSgodmFsKSA8PSAtMTI4MDAwID8gLTEyOCA6IFwKLQkJCQkgKHZhbCkgPj0gMTI3MDAwID8gMTI3IDogXAotCQkJCSAodmFsKSA8IDAgPyAoKHZhbCkgLSA1MDApIC8gMTAwMCA6IFwKLQkJCQkgKCh2YWwpICsgNTAwKSAvIDEwMDApCi0jZGVmaW5lIFRFTVAyX0ZST01fUkVHKHZhbCkJKCh2YWwpIC8gMzIgKiAxMjUpCi0jZGVmaW5lIFRFTVAyX1RPX1JFRyh2YWwpCSgodmFsKSA8PSAtMTI4MDAwID8gMHg4MDAwIDogXAotCQkJCSAodmFsKSA+PSAxMjc4NzUgPyAweDdGRTAgOiBcCi0JCQkJICh2YWwpIDwgMCA/ICgodmFsKSAtIDYyKSAvIDEyNSAqIDMyIDogXAotCQkJCSAoKHZhbCkgKyA2MikgLyAxMjUgKiAzMikKLSNkZWZpbmUgSFlTVF9UT19SRUcodmFsKQkoKHZhbCkgPD0gMCA/IDAgOiAodmFsKSA+PSAzMDUwMCA/IDMxIDogXAotCQkJCSAoKHZhbCkgKyA1MDApIC8gMTAwMCkKLQotLyogCi0gKiBBRFQ3NDYxIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTE05MCBleGNlcHQgdGhhdCBhdHRlbXB0cyB0byB3cml0ZQotICogdmFsdWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHJhbmdlIDAgPCB0ZW1wIDwgMTI3IGFyZSB0cmVhdGVkIGFzCi0gKiB0aGUgYm91bmRhcnkgdmFsdWUuIAotICovCi0KLSNkZWZpbmUgVEVNUDFfVE9fUkVHX0FEVDc0NjEodmFsKSAoKHZhbCkgPD0gMCA/IDAgOiBcCi0JCQkJICh2YWwpID49IDEyNzAwMCA/IDEyNyA6IFwKLQkJCQkgKCh2YWwpICsgNTAwKSAvIDEwMDApCi0jZGVmaW5lIFRFTVAyX1RPX1JFR19BRFQ3NDYxKHZhbCkgKCh2YWwpIDw9IDAgPyAwIDogXAotCQkJCSAodmFsKSA+PSAxMjc3NTAgPyAweDdGQzAgOiBcCi0JCQkJICgodmFsKSArIDEyNSkgLyAyNTAgKiA2NCkKKyNkZWZpbmUgTE05MF9GTEFHX0FEVDc0NjFfRVhUCQkweDAxCS8qIEFEVDc0NjEgZXh0ZW5kZWQgbW9kZSAqLwogCiAvKgogICogRnVuY3Rpb25zIGRlY2xhcmF0aW9uCkBAIC0yMDYsNiArMTcxLDkgQEAKIAl7ICJsbTg2IiwgbG04NiB9LAogCXsgImxtODkiLCBsbTk5IH0sCiAJeyAibG05OSIsIGxtOTkgfSwJLyogTWlzc2luZyB0ZW1wZXJhdHVyZSBvZmZzZXQgKi8KKwl7ICJtYXg2NjQ2IiwgbWF4NjY0NiB9LAorCXsgIm1heDY2NDciLCBtYXg2NjQ2IH0sCisJeyAibWF4NjY0OSIsIG1heDY2NDYgfSwKIAl7ICJtYXg2NjU3IiwgbWF4NjY1NyB9LAogCXsgIm1heDY2NTgiLCBtYXg2NjU3IH0sCiAJeyAibWF4NjY1OSIsIG1heDY2NTcgfSwKQEAgLTIzNywyMiArMjA1LDE1MCBAQAogCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLwogCWludCBraW5kOworCWludCBmbGFnczsKIAogCS8qIHJlZ2lzdGVycyB2YWx1ZXMgKi8KLQlzOCB0ZW1wOFs1XTsJLyogMDogbG9jYWwgaW5wdXQKLQkJCSAgIDE6IGxvY2FsIGxvdyBsaW1pdAotCQkJICAgMjogbG9jYWwgaGlnaCBsaW1pdAotCQkJICAgMzogbG9jYWwgY3JpdGljYWwgbGltaXQKLQkJCSAgIDQ6IHJlbW90ZSBjcml0aWNhbCBsaW1pdCAqLwotCXMxNiB0ZW1wMTFbNF07CS8qIDA6IHJlbW90ZSBpbnB1dAorCXM4IHRlbXA4WzRdOwkvKiAwOiBsb2NhbCBsb3cgbGltaXQKKwkJCSAgIDE6IGxvY2FsIGhpZ2ggbGltaXQKKwkJCSAgIDI6IGxvY2FsIGNyaXRpY2FsIGxpbWl0CisJCQkgICAzOiByZW1vdGUgY3JpdGljYWwgbGltaXQgKi8KKwlzMTYgdGVtcDExWzVdOwkvKiAwOiByZW1vdGUgaW5wdXQKIAkJCSAgIDE6IHJlbW90ZSBsb3cgbGltaXQKIAkJCSAgIDI6IHJlbW90ZSBoaWdoIGxpbWl0Ci0JCQkgICAzOiByZW1vdGUgb2Zmc2V0IChleGNlcHQgbWF4NjY1NykgKi8KKwkJCSAgIDM6IHJlbW90ZSBvZmZzZXQgKGV4Y2VwdCBtYXg2NjQ2IGFuZCBtYXg2NjU3KQorCQkJICAgNDogbG9jYWwgaW5wdXQgKi8KIAl1OCB0ZW1wX2h5c3Q7CiAJdTggYWxhcm1zOyAvKiBiaXR2ZWN0b3IgKi8KIH07CiAKIC8qCisgKiBDb252ZXJzaW9ucworICogRm9yIGxvY2FsIHRlbXBlcmF0dXJlcyBhbmQgbGltaXRzLCBjcml0aWNhbCBsaW1pdHMgYW5kIHRoZSBoeXN0ZXJlc2lzCisgKiB2YWx1ZSwgdGhlIExNOTAgdXNlcyBzaWduZWQgOC1iaXQgdmFsdWVzIHdpdGggTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cy4KKyAqIEZvciByZW1vdGUgdGVtcGVyYXR1cmVzIGFuZCBsaW1pdHMsIGl0IHVzZXMgc2lnbmVkIDExLWJpdCB2YWx1ZXMgd2l0aAorICogTFNCID0gMC4xMjUgZGVncmVlIENlbHNpdXMsIGxlZnQtanVzdGlmaWVkIGluIDE2LWJpdCByZWdpc3RlcnMuICBTb21lCisgKiBNYXhpbSBjaGlwcyB1c2UgdW5zaWduZWQgdmFsdWVzLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV9zOChzOCB2YWwpCit7CisJcmV0dXJuIHZhbCAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91OCh1OCB2YWwpCit7CisJcmV0dXJuIHZhbCAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV9zMTYoczE2IHZhbCkKK3sKKwlyZXR1cm4gdmFsIC8gMzIgKiAxMjU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91MTYodTE2IHZhbCkKK3sKKwlyZXR1cm4gdmFsIC8gMzIgKiAxMjU7Cit9CisKK3N0YXRpYyBzOCB0ZW1wX3RvX3M4KGxvbmcgdmFsKQoreworCWlmICh2YWwgPD0gLTEyODAwMCkKKwkJcmV0dXJuIC0xMjg7CisJaWYgKHZhbCA+PSAxMjcwMDApCisJCXJldHVybiAxMjc7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiAodmFsIC0gNTAwKSAvIDEwMDA7CisJcmV0dXJuICh2YWwgKyA1MDApIC8gMTAwMDsKK30KKworc3RhdGljIHU4IHRlbXBfdG9fdTgobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAodmFsID49IDI1NTAwMCkKKwkJcmV0dXJuIDI1NTsKKwlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworfQorCitzdGF0aWMgczE2IHRlbXBfdG9fczE2KGxvbmcgdmFsKQoreworCWlmICh2YWwgPD0gLTEyODAwMCkKKwkJcmV0dXJuIDB4ODAwMDsKKwlpZiAodmFsID49IDEyNzg3NSkKKwkJcmV0dXJuIDB4N0ZFMDsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuICh2YWwgLSA2MikgLyAxMjUgKiAzMjsKKwlyZXR1cm4gKHZhbCArIDYyKSAvIDEyNSAqIDMyOworfQorCitzdGF0aWMgdTggaHlzdF90b19yZWcobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAodmFsID49IDMwNTAwKQorCQlyZXR1cm4gMzE7CisJcmV0dXJuICh2YWwgKyA1MDApIC8gMTAwMDsKK30KKworLyoKKyAqIEFEVDc0NjEgaW4gY29tcGF0aWJpbGl0eSBtb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTE05MCBleGNlcHQgdGhhdAorICogYXR0ZW1wdHMgdG8gd3JpdGUgdmFsdWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHJhbmdlIDAgPCB0ZW1wIDwgMTI3IGFyZQorICogdHJlYXRlZCBhcyB0aGUgYm91bmRhcnkgdmFsdWUuCisgKgorICogQURUNzQ2MSBpbiAiZXh0ZW5kZWQgbW9kZSIgb3BlcmF0aW9uIHVzZXMgdW5zaWduZWQgaW50ZWdlcnMgb2Zmc2V0IGJ5CisgKiA2NCAoZS5nLiwgMCAtPiAtNjQgZGVnQykuICBUaGUgcmFuZ2UgaXMgcmVzdHJpY3RlZCB0byAtNjQuLjE5MSBkZWdDLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZW1wX2Zyb21fdThfYWR0NzQ2MShzdHJ1Y3QgbG05MF9kYXRhICpkYXRhLCB1OCB2YWwpCit7CisJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9GTEFHX0FEVDc0NjFfRVhUKQorCQlyZXR1cm4gKHZhbCAtIDY0KSAqIDEwMDA7CisJZWxzZQorCQlyZXR1cm4gdGVtcF9mcm9tX3M4KHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91MTZfYWR0NzQ2MShzdHJ1Y3QgbG05MF9kYXRhICpkYXRhLCB1MTYgdmFsKQoreworCWlmIChkYXRhLT5mbGFncyAmIExNOTBfRkxBR19BRFQ3NDYxX0VYVCkKKwkJcmV0dXJuICh2YWwgLSAweDQwMDApIC8gNjQgKiAyNTA7CisJZWxzZQorCQlyZXR1cm4gdGVtcF9mcm9tX3MxNih2YWwpOworfQorCitzdGF0aWMgdTggdGVtcF90b191OF9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIGxvbmcgdmFsKQoreworCWlmIChkYXRhLT5mbGFncyAmIExNOTBfRkxBR19BRFQ3NDYxX0VYVCkgeworCQlpZiAodmFsIDw9IC02NDAwMCkKKwkJCXJldHVybiAwOworCQlpZiAodmFsID49IDE5MTAwMCkKKwkJCXJldHVybiAweEZGOworCQlyZXR1cm4gKHZhbCArIDUwMCArIDY0MDAwKSAvIDEwMDA7CisJfSBlbHNlIHsKKwkJaWYgKHZhbCA8PSAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh2YWwgPj0gMTI3MDAwKQorCQkJcmV0dXJuIDEyNzsKKwkJcmV0dXJuICh2YWwgKyA1MDApIC8gMTAwMDsKKwl9Cit9CisKK3N0YXRpYyB1MTYgdGVtcF90b191MTZfYWR0NzQ2MShzdHJ1Y3QgbG05MF9kYXRhICpkYXRhLCBsb25nIHZhbCkKK3sKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQpIHsKKwkJaWYgKHZhbCA8PSAtNjQwMDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHZhbCA+PSAxOTE3NTApCisJCQlyZXR1cm4gMHhGRkMwOworCQlyZXR1cm4gKHZhbCArIDY0MDAwICsgMTI1KSAvIDI1MCAqIDY0OworCX0gZWxzZSB7CisJCWlmICh2YWwgPD0gMCkKKwkJCXJldHVybiAwOworCQlpZiAodmFsID49IDEyNzc1MCkKKwkJCXJldHVybiAweDdGQzA7CisJCXJldHVybiAodmFsICsgMTI1KSAvIDI1MCAqIDY0OworCX0KK30KKworLyoKICAqIFN5c2ZzIHN0dWZmCiAgKi8KIApAQCAtMjYxLDcgKzM1NywxNiBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG05MF9kYXRhICpkYXRhID0gbG05MF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxX0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkpOworCWludCB0ZW1wOworCisJaWYgKGRhdGEtPmtpbmQgPT0gYWR0NzQ2MSkKKwkJdGVtcCA9IHRlbXBfZnJvbV91OF9hZHQ3NDYxKGRhdGEsIGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSk7CisJZWxzZSBpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjQ2KQorCQl0ZW1wID0gdGVtcF9mcm9tX3U4KGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSk7CisJZWxzZQorCQl0ZW1wID0gdGVtcF9mcm9tX3M4KGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApAQCAtMjgyLDEwICszODcsMTIgQEAKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQotCQlkYXRhLT50ZW1wOFtucl0gPSBURU1QMV9UT19SRUdfQURUNzQ2MSh2YWwpOworCQlkYXRhLT50ZW1wOFtucl0gPSB0ZW1wX3RvX3U4X2FkdDc0NjEoZGF0YSwgdmFsKTsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NDYpCisJCWRhdGEtPnRlbXA4W25yXSA9IHRlbXBfdG9fdTgodmFsKTsKIAllbHNlCi0JCWRhdGEtPnRlbXA4W25yXSA9IFRFTVAxX1RPX1JFRyh2YWwpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbbnIgLSAxXSwgZGF0YS0+dGVtcDhbbnJdKTsKKwkJZGF0YS0+dGVtcDhbbnJdID0gdGVtcF90b19zOCh2YWwpOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbbnJdLCBkYXRhLT50ZW1wOFtucl0pOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTI5NSw3ICs0MDIsMTYgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtOTBfZGF0YSAqZGF0YSA9IGxtOTBfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMl9GUk9NX1JFRyhkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKSk7CisJaW50IHRlbXA7CisKKwlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQorCQl0ZW1wID0gdGVtcF9mcm9tX3UxNl9hZHQ3NDYxKGRhdGEsIGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pOworCWVsc2UgaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY0NikKKwkJdGVtcCA9IHRlbXBfZnJvbV91MTYoZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSk7CisJZWxzZQorCQl0ZW1wID0gdGVtcF9mcm9tX3MxNihkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAxMShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApAQCAtMzE4LDEzICs0MzQsMjAgQEAKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQotCQlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDJfVE9fUkVHX0FEVDc0NjEodmFsKTsKKwkJZGF0YS0+dGVtcDExW25yXSA9IHRlbXBfdG9fdTE2X2FkdDc0NjEoZGF0YSwgdmFsKTsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NTcgfHwgZGF0YS0+a2luZCA9PSBtYXg2NjgwKQorCQlkYXRhLT50ZW1wMTFbbnJdID0gdGVtcF90b19zOCh2YWwpIDw8IDg7CisJZWxzZSBpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjQ2KQorCQlkYXRhLT50ZW1wMTFbbnJdID0gdGVtcF90b191OCh2YWwpIDw8IDg7CiAJZWxzZQotCQlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDJfVE9fUkVHKHZhbCk7CisJCWRhdGEtPnRlbXAxMVtucl0gPSB0ZW1wX3RvX3MxNih2YWwpOworCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDJdLAogCQkJCSAgZGF0YS0+dGVtcDExW25yXSA+PiA4KTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMiArIDFdLAotCQkJCSAgZGF0YS0+dGVtcDExW25yXSAmIDB4ZmYpOworCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjgwCisJICAgICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDIgKyAxXSwKKwkJCQkJICBkYXRhLT50ZW1wMTFbbnJdICYgMHhmZik7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzM0LDggKzQ1NywxNCBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG05MF9kYXRhICpkYXRhID0gbG05MF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxX0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkKLQkJICAgICAgIC0gVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcF9oeXN0KSk7CisJaW50IHRlbXA7CisKKwlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQorCQl0ZW1wID0gdGVtcF9mcm9tX3U4X2FkdDc0NjEoZGF0YSwgZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKwllbHNlCisJCXRlbXAgPSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wIC0gdGVtcF9mcm9tX3M4KGRhdGEtPnRlbXBfaHlzdCkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdGVtcGh5c3Qoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZHVtbXksCkBAIC0zNDcsOSArNDc2LDkgQEAKIAlsb25nIGh5c3Q7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JaHlzdCA9IFRFTVAxX0ZST01fUkVHKGRhdGEtPnRlbXA4WzNdKSAtIHZhbDsKKwloeXN0ID0gdGVtcF9mcm9tX3M4KGRhdGEtPnRlbXA4WzJdKSAtIHZhbDsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05MF9SRUdfV19UQ1JJVF9IWVNULAotCQkJCSAgSFlTVF9UT19SRUcoaHlzdCkpOworCQkJCSAgaHlzdF90b19yZWcoaHlzdCkpOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTM3MSwyMyArNTAwLDIzIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXMgPj4gYml0bnIpICYgMSk7CiB9CiAKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDgsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMTEsIE5VTEwsIDQpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMTEsIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXA4LAotCXNldF90ZW1wOCwgMSk7CisJc2V0X3RlbXA4LCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMTEsCiAJc2V0X3RlbXAxMSwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAyKTsKKwlzZXRfdGVtcDgsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAzKTsKKwlzZXRfdGVtcDgsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wOCwKLQlzZXRfdGVtcDgsIDQpOworCXNldF90ZW1wOCwgMyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcGh5c3QsCi0Jc2V0X3RlbXBoeXN0LCAzKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdF9oeXN0LCBTX0lSVUdPLCBzaG93X3RlbXBoeXN0LCBOVUxMLCA0KTsKKwlzZXRfdGVtcGh5c3QsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcGh5c3QsIE5VTEwsIDMpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9vZmZzZXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAzKTsKIApAQCAtNTY4LDcgKzY5Nyw3IEBACiAJCQkJa2luZCA9IGFkbTEwMzI7CiAJCQl9IGVsc2UKIAkJCWlmIChjaGlwX2lkID09IDB4NTEgLyogQURUNzQ2MSAqLwotCQkJICYmIChyZWdfY29uZmlnMSAmIDB4MUYpID09IDB4MDAgLyogY2hlY2sgY29tcGF0IG1vZGUgKi8KKwkJCSAmJiAocmVnX2NvbmZpZzEgJiAweDFCKSA9PSAweDAwCiAJCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MEEpIHsKIAkJCQlraW5kID0gYWR0NzQ2MTsKIAkJCX0KQEAgLTU5OSwxMyArNzI4LDIzIEBACiAJCQkgJiYgKHJlZ19jb25maWcxICYgMHgwMykgPT0gMHgwMAogCQkJICYmIHJlZ19jb252cmF0ZSA8PSAweDA3KSB7CiAJCQkgCWtpbmQgPSBtYXg2NjgwOworCQkJfSBlbHNlCisJCQkvKiBUaGUgY2hpcF9pZCByZWdpc3RlciBvZiB0aGUgTUFYNjY0Ni82NjQ3LzY2NDkKKwkJCSAqIGhvbGRzIHRoZSByZXZpc2lvbiBvZiB0aGUgY2hpcC4KKwkJCSAqIFRoZSBsb3dlc3QgNiBiaXRzIG9mIHRoZSBjb25maWcxIHJlZ2lzdGVyIGFyZQorCQkJICogdW51c2VkIGFuZCBzaG91bGQgcmV0dXJuIHplcm8gd2hlbiByZWFkLgorCQkJICovCisJCQlpZiAoY2hpcF9pZCA9PSAweDU5CisJCQkgJiYgKHJlZ19jb25maWcxICYgMHgzZikgPT0gMHgwMAorCQkJICYmIHJlZ19jb252cmF0ZSA8PSAweDA3KSB7CisJCQkJa2luZCA9IG1heDY2NDY7CiAJCQl9CiAJCX0KIAogCQlpZiAoa2luZCA8PSAwKSB7IC8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZCAqLwotCQkJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwKLQkJCSAgICAiVW5zdXBwb3J0ZWQgY2hpcCAobWFuX2lkPTB4JTAyWCwgIgotCQkJICAgICJjaGlwX2lkPTB4JTAyWCkuXG4iLCBtYW5faWQsIGNoaXBfaWQpOworCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LAorCQkJCSJVbnN1cHBvcnRlZCBjaGlwIGF0IDB4JTAyeCAobWFuX2lkPTB4JTAyWCwgIgorCQkJCSJjaGlwX2lkPTB4JTAyWClcbiIsIGFkZHJlc3MsIG1hbl9pZCwgY2hpcF9pZCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTYyOSw2ICs3NjgsOCBAQAogCQluYW1lID0gIm1heDY2ODAiOwogCX0gZWxzZSBpZiAoa2luZCA9PSBhZHQ3NDYxKSB7CiAJCW5hbWUgPSAiYWR0NzQ2MSI7CisJfSBlbHNlIGlmIChraW5kID09IG1heDY2NDYpIHsKKwkJbmFtZSA9ICJtYXg2NjQ2IjsKIAl9CiAJc3RybGNweShpbmZvLT50eXBlLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIApAQCAtNjY4LDcgKzgwOSw3IEBACiAJCQkJCSAgICAgICZkZXZfYXR0cl9wZWMpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQotCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcpIHsKKwlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3ICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikgewogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAogCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfb2Zmc2V0LmRldl9hdHRyKSkpCiAJCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwpAQCAtNzA3LDYgKzg0OCwxMiBAQAogCX0KIAljb25maWdfb3JpZyA9IGNvbmZpZzsKIAorCS8qIENoZWNrIFRlbXBlcmF0dXJlIFJhbmdlIFNlbGVjdCAqLworCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpIHsKKwkJaWYgKGNvbmZpZyAmIDB4MDQpCisJCQlkYXRhLT5mbGFncyB8PSBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQ7CisJfQorCiAJLyoKIAkgKiBQdXQgTUFYNjY4MC9NQVg4ODgxIGludG8gZXh0ZW5kZWQgcmVzb2x1dGlvbiAoYml0IDB4MTAsCiAJICogMC4xMjUgZGVncmVlIHJlc29sdXRpb24pIGFuZCByYW5nZSAoMHgwOCwgZXh0ZW5kIHJhbmdlCkBAIC03MjgsNyArODc1LDcgQEAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtOTBfZ3JvdXApOwogCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wZWMpOwotCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcpCisJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsCiAJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9vZmZzZXQuZGV2X2F0dHIpOwogCkBAIC03MzYsNiArODgzLDM4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbG05MF9yZWFkMTYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnaCwgdTggcmVnbCwgdTE2ICp2YWx1ZSkKK3sKKwlpbnQgZXJyOworCXU4IG9sZGgsIG5ld2gsIGw7CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgdHJpY2sgaGVyZS4gV2UgaGF2ZSB0byByZWFkIHR3byByZWdpc3RlcnMgdG8gaGF2ZSB0aGUKKwkgKiBzZW5zb3IgdGVtcGVyYXR1cmUsIGJ1dCB3ZSBoYXZlIHRvIGJld2FyZSBhIGNvbnZlcnNpb24gY291bGQgb2NjdXIKKwkgKiBpbmJldHdlZW4gdGhlIHJlYWRpbmdzLiBUaGUgZGF0YXNoZWV0IHNheXMgd2Ugc2hvdWxkIGVpdGhlciB1c2UKKwkgKiB0aGUgb25lLXNob3QgY29udmVyc2lvbiByZWdpc3Rlciwgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBkbworCSAqIChkaXNhYmxlcyBoYXJkd2FyZSBtb25pdG9yaW5nKSBvciBtb25pdG9yIHRoZSBidXN5IGJpdCwgd2hpY2ggaXMKKwkgKiBpbXBvc3NpYmxlICh3ZSBjYW4ndCByZWFkIHRoZSB2YWx1ZXMgYW5kIG1vbml0b3IgdGhhdCBiaXQgYXQgdGhlCisJICogZXhhY3Qgc2FtZSB0aW1lKS4gU28gdGhlIHNvbHV0aW9uIHVzZWQgaGVyZSBpcyB0byByZWFkIHRoZSBoaWdoCisJICogYnl0ZSBvbmNlLCB0aGVuIHRoZSBsb3cgYnl0ZSwgdGhlbiB0aGUgaGlnaCBieXRlIGFnYWluLiBJZiB0aGUgbmV3CisJICogaGlnaCBieXRlIG1hdGNoZXMgdGhlIG9sZCBvbmUsIHRoZW4gd2UgaGF2ZSBhIHZhbGlkIHJlYWRpbmcuIEVsc2UKKwkgKiB3ZSBoYXZlIHRvIHJlYWQgdGhlIGxvdyBieXRlIGFnYWluLCBhbmQgbm93IHdlIGJlbGlldmUgd2UgaGF2ZSBhCisJICogY29ycmVjdCByZWFkaW5nLgorCSAqLworCWlmICgoZXJyID0gbG05MF9yZWFkX3JlZyhjbGllbnQsIHJlZ2gsICZvbGRoKSkKKwkgfHwgKGVyciA9IGxtOTBfcmVhZF9yZWcoY2xpZW50LCByZWdsLCAmbCkpCisJIHx8IChlcnIgPSBsbTkwX3JlYWRfcmVnKGNsaWVudCwgcmVnaCwgJm5ld2gpKSkKKwkJcmV0dXJuIGVycjsKKwlpZiAob2xkaCAhPSBuZXdoKSB7CisJCWVyciA9IGxtOTBfcmVhZF9yZWcoY2xpZW50LCByZWdsLCAmbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwkqdmFsdWUgPSAobmV3aCA8PCA4KSB8IGw7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBsbTkwX2RhdGEgKmxtOTBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKQEAgLTc0NCw0OSArOTIzLDUwIEBACiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKiAyKSB8fCAhZGF0YS0+dmFsaWQpIHsKLQkJdTggb2xkaCwgbmV3aCwgbDsKKwkJdTggaCwgbDsKIAogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlVwZGF0aW5nIGxtOTAgZGF0YS5cbiIpOwotCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9URU1QLCAmZGF0YS0+dGVtcDhbMF0pOwotCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9MT1csICZkYXRhLT50ZW1wOFsxXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0hJR0gsICZkYXRhLT50ZW1wOFsyXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0NSSVQsICZkYXRhLT50ZW1wOFszXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9DUklULCAmZGF0YS0+dGVtcDhbNF0pOworCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9MT1csICZkYXRhLT50ZW1wOFswXSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0hJR0gsICZkYXRhLT50ZW1wOFsxXSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0NSSVQsICZkYXRhLT50ZW1wOFsyXSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9DUklULCAmZGF0YS0+dGVtcDhbM10pOwogCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9UQ1JJVF9IWVNULCAmZGF0YS0+dGVtcF9oeXN0KTsKIAotCQkvKgotCQkgKiBUaGVyZSBpcyBhIHRyaWNrIGhlcmUuIFdlIGhhdmUgdG8gcmVhZCB0d28gcmVnaXN0ZXJzIHRvCi0JCSAqIGhhdmUgdGhlIHJlbW90ZSBzZW5zb3IgdGVtcGVyYXR1cmUsIGJ1dCB3ZSBoYXZlIHRvIGJld2FyZQotCQkgKiBhIGNvbnZlcnNpb24gY291bGQgb2NjdXIgaW5iZXR3ZWVuIHRoZSByZWFkaW5ncy4gVGhlCi0JCSAqIGRhdGFzaGVldCBzYXlzIHdlIHNob3VsZCBlaXRoZXIgdXNlIHRoZSBvbmUtc2hvdAotCQkgKiBjb252ZXJzaW9uIHJlZ2lzdGVyLCB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGRvIChkaXNhYmxlcwotCQkgKiBoYXJkd2FyZSBtb25pdG9yaW5nKSBvciBtb25pdG9yIHRoZSBidXN5IGJpdCwgd2hpY2ggaXMKLQkJICogaW1wb3NzaWJsZSAod2UgY2FuJ3QgcmVhZCB0aGUgdmFsdWVzIGFuZCBtb25pdG9yIHRoYXQgYml0Ci0JCSAqIGF0IHRoZSBleGFjdCBzYW1lIHRpbWUpLiBTbyB0aGUgc29sdXRpb24gdXNlZCBoZXJlIGlzIHRvCi0JCSAqIHJlYWQgdGhlIGhpZ2ggYnl0ZSBvbmNlLCB0aGVuIHRoZSBsb3cgYnl0ZSwgdGhlbiB0aGUgaGlnaAotCQkgKiBieXRlIGFnYWluLiBJZiB0aGUgbmV3IGhpZ2ggYnl0ZSBtYXRjaGVzIHRoZSBvbGQgb25lLAotCQkgKiB0aGVuIHdlIGhhdmUgYSB2YWxpZCByZWFkaW5nLiBFbHNlIHdlIGhhdmUgdG8gcmVhZCB0aGUgbG93Ci0JCSAqIGJ5dGUgYWdhaW4sIGFuZCBub3cgd2UgYmVsaWV2ZSB3ZSBoYXZlIGEgY29ycmVjdCByZWFkaW5nLgotCQkgKi8KLQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QSCwgJm9sZGgpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QTCwgJmwpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QSCwgJm5ld2gpID09IDAKLQkJICYmIChuZXdoID09IG9sZGgKLQkJICB8fCBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfVEVNUEwsICZsKSA9PSAwKSkKLQkJCWRhdGEtPnRlbXAxMVswXSA9IChuZXdoIDw8IDgpIHwgbDsKKwkJaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY1NyB8fCBkYXRhLT5raW5kID09IG1heDY2NDYpIHsKKwkJCWxtOTBfcmVhZDE2KGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9URU1QLAorCQkJCSAgICBNQVg2NjU3X1JFR19SX0xPQ0FMX1RFTVBMLAorCQkJCSAgICAmZGF0YS0+dGVtcDExWzRdKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9URU1QLAorCQkJCQkgICZoKSA9PSAwKQorCQkJCWRhdGEtPnRlbXAxMVs0XSA9IGggPDwgODsKKwkJfQorCQlsbTkwX3JlYWQxNihjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBILAorCQkJICAgIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBMLCAmZGF0YS0+dGVtcDExWzBdKTsKIAotCQlpZiAobG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0xPV0gsICZuZXdoKSA9PSAwCi0JCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XTCwgJmwpID09IDApCi0JCQlkYXRhLT50ZW1wMTFbMV0gPSAobmV3aCA8PCA4KSB8IGw7Ci0JCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfSElHSEgsICZuZXdoKSA9PSAwCi0JCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfSElHSEwsICZsKSA9PSAwKQotCQkJZGF0YS0+dGVtcDExWzJdID0gKG5ld2ggPDwgOCkgfCBsOwotCQlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3KSB7CisJCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XSCwgJmgpID09IDApIHsKKwkJCWRhdGEtPnRlbXAxMVsxXSA9IGggPDwgODsKKwkJCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjgwCisJCQkgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2CisJCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0xPV0wsCisJCQkJCSAgJmwpID09IDApCisJCQkJZGF0YS0+dGVtcDExWzFdIHw9IGw7CisJCX0KKwkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9ISUdISCwgJmgpID09IDApIHsKKwkJCWRhdGEtPnRlbXAxMVsyXSA9IGggPDwgODsKKwkJCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjgwCisJCQkgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2CisJCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0hJR0hMLAorCQkJCQkgICZsKSA9PSAwKQorCQkJCWRhdGEtPnRlbXAxMVsyXSB8PSBsOworCQl9CisKKwkJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYpIHsKIAkJCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfT0ZGU0gsCi0JCQkJCSAgJm5ld2gpID09IDAKKwkJCQkJICAmaCkgPT0gMAogCQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9PRkZTTCwKIAkJCQkJICAmbCkgPT0gMCkKLQkJCQlkYXRhLT50ZW1wMTFbM10gPSAobmV3aCA8PCA4KSB8IGw7CisJCQkJZGF0YS0+dGVtcDExWzNdID0gKGggPDwgOCkgfCBsOwogCQl9CiAJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1NUQVRVUywgJmRhdGEtPmFsYXJtcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTYxOS5jIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKaW5kZXggMWFiMWNhYy4uNzg5Nzc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKKysrIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKQEAgLTY5LDExICs2OSwxOCBAQAogI2RlZmluZSBNQVgxNjE5X1JFR19XX1RDUklUX0hZU1QJMHgxMwogCiAvKgotICogQ29udmVyc2lvbnMgYW5kIHZhcmlvdXMgbWFjcm9zCisgKiBDb252ZXJzaW9ucwogICovCiAKLSNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWwpCSgodmFsICYgMHg4MCA/IHZhbC0weDEwMCA6IHZhbCkgKiAxMDAwKQotI2RlZmluZSBURU1QX1RPX1JFRyh2YWwpCSgodmFsIDwgMCA/IHZhbCsweDEwMCoxMDAwIDogdmFsKSAvIDEwMDApCitzdGF0aWMgaW50IHRlbXBfZnJvbV9yZWcoaW50IHZhbCkKK3sKKwlyZXR1cm4gKHZhbCAmIDB4ODAgPyB2YWwtMHgxMDAgOiB2YWwpICogMTAwMDsKK30KKworc3RhdGljIGludCB0ZW1wX3RvX3JlZyhpbnQgdmFsKQoreworCXJldHVybiAodmFsIDwgMCA/IHZhbCsweDEwMCoxMDAwIDogdmFsKSAvIDEwMDA7Cit9CiAKIC8qCiAgKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KQEAgLTEzNSw3ICsxNDIsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAogeyBcCiAJc3RydWN0IG1heDE2MTlfZGF0YSAqZGF0YSA9IG1heDE2MTlfdXBkYXRlX2RldmljZShkZXYpOyBcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dmFsdWUpKTsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wX2Zyb21fcmVnKGRhdGEtPnZhbHVlKSk7IFwKIH0KIHNob3dfdGVtcCh0ZW1wX2lucHV0MSk7CiBzaG93X3RlbXAodGVtcF9pbnB1dDIpOwpAQCAtMTUzLDcgKzE2MCw3IEBACiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOyBcCiAgXAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAotCWRhdGEtPnZhbHVlID0gVEVNUF9UT19SRUcodmFsKTsgXAorCWRhdGEtPnZhbHVlID0gdGVtcF90b19yZWcodmFsKTsgXAogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIGRhdGEtPnZhbHVlKTsgXAogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BjODczNjAuYyBiL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCmluZGV4IDliNDYyYmIuLjVmYmZhMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCkBAIC03NSw3ICs3NSw4IEBACiAjZGVmaW5lIEZTQ00JMHgwOQkvKiBMb2dpY2FsIGRldmljZTogZmFucyAqLwogI2RlZmluZSBWTE0JMHgwZAkvKiBMb2dpY2FsIGRldmljZTogdm9sdGFnZXMgKi8KICNkZWZpbmUgVE1TCTB4MGUJLyogTG9naWNhbCBkZXZpY2U6IHRlbXBlcmF0dXJlcyAqLwotc3RhdGljIGNvbnN0IHU4IGxvZ2RldlszXSA9IHsgRlNDTSwgVkxNLCBUTVMgfTsKKyNkZWZpbmUgTEROSV9NQVggMworc3RhdGljIGNvbnN0IHU4IGxvZ2RldltMRE5JX01BWF0gPSB7IEZTQ00sIFZMTSwgVE1TIH07CiAKICNkZWZpbmUgTERfRkFOCQkwCiAjZGVmaW5lIExEX0lOCQkxCkBAIC00ODksMTEgKzQ5MCw2NiBAQAogCVNFTlNPUl9BVFRSKGluMTBfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDEwKSwKIH07CiAKKy8qICh0ZW1wICYgdmluKSBjaGFubmVsIHN0YXR1cyByZWdpc3RlciBhbGFybSBiaXRzIChwZGYgc2VjLjExLjUuMTIpICovCisjZGVmaW5lIENIQU5fQUxNX01JTgkweDAyCS8qIG1pbiBsaW1pdCBjcm9zc2VkICovCisjZGVmaW5lIENIQU5fQUxNX01BWAkweDA0CS8qIG1heCBsaW1pdCBleGNlZWRlZCAqLworI2RlZmluZSBURU1QX0FMTV9DUklUCTB4MDgJLyogdGVtcCBjcml0IGV4Y2VlZGVkICh0ZW1wIG9ubHkpICovCisKKy8qIHNob3dfaW5fbWluL21heF9hbGFybSgpIHJlYWRzIGRhdGEgZnJvbSB0aGUgcGVyLWNoYW5uZWwgc3RhdHVzCisgICByZWdpc3RlciAoc2VjIDExLjUuMTIpLCBub3QgdGhlIHZpbiBldmVudCBzdGF0dXMgcmVnaXN0ZXJzIChzZWMKKyAgIDExLjUuMikgdGhhdCAobGVnYWN5KSBzaG93X2luX2FsYXJtKCkgcmVzZHMgKHZpYSBkYXRhLT5pbl9hbGFybXMpICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5fbWluX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT5pbl9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUlOKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X2luX21heF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+aW5fc3RhdHVzW25yXSAmIENIQU5fQUxNX01BWCkpOworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGluX21pbl9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKGluMF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoaW4yX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKGluM19taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoaW41X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKGluNl9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgNyksCisJU0VOU09SX0FUVFIoaW44X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKGluOV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUihpbjEwX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDEwKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGluX21heF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKGluMF9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoaW4yX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKGluM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoaW41X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKGluNl9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgNyksCisJU0VOU09SX0FUVFIoaW44X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKGluOV9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUihpbjEwX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDEwKSwKK307CisKICNkZWZpbmUgVklOX1VOSVRfQVRUUlMoWCkgXAogCSZpbl9pbnB1dFtYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJmluX3N0YXR1c1tYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJmluX21pbltYXS5kZXZfYXR0ci5hdHRyLAlcCi0JJmluX21heFtYXS5kZXZfYXR0ci5hdHRyCisJJmluX21heFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmluX21pbl9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmluX21heF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyCiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdmlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTY1OCwxMiArNzE0LDY4IEBACiAJCSAgICBzaG93X3RoZXJtX2NyaXQsIHNldF90aGVybV9jcml0LCAyKzExKSwKIH07CiAKKy8qIHNob3dfdGhlcm1fbWluL21heF9hbGFybSgpIHJlYWRzIGRhdGEgZnJvbSB0aGUgcGVyLWNoYW5uZWwgdm9sdGFnZQorICAgc3RhdHVzIHJlZ2lzdGVyIChzZWMgMTEuNS4xMikgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd190aGVybV9taW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT5pbl9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUlOKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X3RoZXJtX21heF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NQVgpKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGhlcm1fY3JpdF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBURU1QX0FMTV9DUklUKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGhlcm1fbWluX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDRfbWluX2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9taW5fYWxhcm0sIE5VTEwsIDArMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA1X21pbl9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWluX2FsYXJtLCBOVUxMLCAxKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNl9taW5fYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21pbl9hbGFybSwgTlVMTCwgMisxMSksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0aGVybV9tYXhfYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wNF9tYXhfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21heF9hbGFybSwgTlVMTCwgMCsxMSksCisJU0VOU09SX0FUVFIodGVtcDVfbWF4X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9tYXhfYWxhcm0sIE5VTEwsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21heF9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWF4X2FsYXJtLCBOVUxMLCAyKzExKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRoZXJtX2NyaXRfYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wNF9jcml0X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9jcml0X2FsYXJtLCBOVUxMLCAwKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9jcml0X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9jcml0X2FsYXJtLCBOVUxMLCAxKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNl9jcml0X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9jcml0X2FsYXJtLCBOVUxMLCAyKzExKSwKK307CisKICNkZWZpbmUgVEhFUk1fVU5JVF9BVFRSUyhYKSBcCiAJJnRoZXJtX2lucHV0W1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGhlcm1fc3RhdHVzW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGhlcm1fbWluW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGhlcm1fbWF4W1hdLmRldl9hdHRyLmF0dHIsCVwKLQkmdGhlcm1fY3JpdFtYXS5kZXZfYXR0ci5hdHRyCisJJnRoZXJtX2NyaXRbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0aGVybV9taW5fYWxhcm1bWF0uZGV2X2F0dHIuYXR0ciwgXAorCSZ0aGVybV9tYXhfYWxhcm1bWF0uZGV2X2F0dHIuYXR0ciwgXAorCSZ0aGVybV9jcml0X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBwYzg3MzZ4X3RoZXJtX2F0dHJfYXJyYXlbXSA9IHsKIAlUSEVSTV9VTklUX0FUVFJTKDApLApAQCAtNzkwLDEyICs5MDIsNzYgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXNfdGVtcCwgU19JUlVHTywgc2hvd190ZW1wX2FsYXJtcywgTlVMTCk7CiAKKy8qIHNob3dfdGVtcF9taW4vbWF4X2FsYXJtKCkgcmVhZHMgZGF0YSBmcm9tIHRoZSBwZXItY2hhbm5lbCBzdGF0dXMKKyAgIHJlZ2lzdGVyIChzZWMgMTIuMy43KSwgbm90IHRoZSB0ZW1wIGV2ZW50IHN0YXR1cyByZWdpc3RlcnMgKHNlYworICAgMTIuMy4yKSB0aGF0IHNob3dfdGVtcF9hbGFybSgpIHJlYWRzICh2aWEgZGF0YS0+dGVtcF9hbGFybXMpICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9taW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPnRlbXBfc3RhdHVzW25yXSAmIENIQU5fQUxNX01JTikpOworfQorc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUFYKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfY3JpdF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgVEVNUF9BTE1fQ1JJVCkpOworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRlbXBfbWluX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluX2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9taW5fYWxhcm0sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX21pbl9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21pbl9hbGFybSwgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX21heF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21heF9hbGFybSwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4X2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9tYXhfYWxhcm0sIE5VTEwsIDIpLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGVtcF9jcml0X2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX2NyaXRfYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9jcml0X2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdF9hbGFybSwgTlVMTCwgMiksCit9OworCisjZGVmaW5lIFRFTVBfRkFVTFQJMHg0MAkvKiBvcGVuIGRpb2RlICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfZmF1bHQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPnRlbXBfc3RhdHVzW25yXSAmIFRFTVBfRkFVTFQpKTsKK30KK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGVtcF9mYXVsdFtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDIpLAorfTsKKwogI2RlZmluZSBURU1QX1VOSVRfQVRUUlMoWCkgXAogCSZ0ZW1wX2lucHV0W1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGVtcF9zdGF0dXNbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0ZW1wX21pbltYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJnRlbXBfbWF4W1hdLmRldl9hdHRyLmF0dHIsCVwKLQkmdGVtcF9jcml0W1hdLmRldl9hdHRyLmF0dHIKKwkmdGVtcF9jcml0W1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmdGVtcF9taW5fYWxhcm1bWF0uZGV2X2F0dHIuYXR0ciwgXAorCSZ0ZW1wX21heF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRlbXBfY3JpdF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRlbXBfZmF1bHRbWF0uZGV2X2F0dHIuYXR0cgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBjODczNnhfdGVtcF9hdHRyX2FycmF5W10gPSB7CiAJVEVNUF9VTklUX0FUVFJTKDApLApAQCAtODA5LDggKzk4NSw4IEBACiAJLmF0dHJzID0gcGM4NzM2eF90ZW1wX2F0dHJfYXJyYXksCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICpkZXZhdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwpAQCAtOTU1LDcgKzExMzEsNyBAQAogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTEROSV9NQVg7IGkrKykgewogCQlpZiAoKChkYXRhLT5hZGRyZXNzW2ldID0gZXh0cmFfaXNhW2ldKSkKIAkJICYmICFyZXF1ZXN0X3JlZ2lvbihleHRyYV9pc2FbaV0sIFBDODczNjBfRVhURU5ULAogCQkgCQkgICAgcGM4NzM2MF9kcml2ZXIuZHJpdmVyLm5hbWUpKSB7CkBAIC0xMDMxLDcgKzEyMDcsMTUgQEAKIAkJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKIAkJCQkJJnRlbXBfY3JpdFtpXS5kZXZfYXR0cikpCiAJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkJCSZ0ZW1wX3N0YXR1c1tpXS5kZXZfYXR0cikpKQorCQkJCQkmdGVtcF9zdGF0dXNbaV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9taW5fYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9tYXhfYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9jcml0X2FsYXJtW2ldLmRldl9hdHRyKSkKKwkJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJJnRlbXBfZmF1bHRbaV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIEVSUk9SMzsKIAkJfQogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbGFybXNfdGVtcCkpKQpAQCAtMTEzMSw2ICsxMzE1LDE2IEBACiAJbXV0ZXhfdW5sb2NrKCYoZGF0YS0+bG9jaykpOwogfQogCisvKiAodGVtcCAmIHZpbikgY2hhbm5lbCBjb252ZXJzaW9uIHN0YXR1cyByZWdpc3RlciBmbGFncyAocGRmIHNlYy4xMS41LjEyKSAqLworI2RlZmluZSBDSEFOX0NOVlJURAkweDgwCS8qIG5ldyBkYXRhIHJlYWR5ICovCisjZGVmaW5lIENIQU5fRU5BCTB4MDEJLyogZW5hYmxlZCBjaGFubmVsICh0ZW1wIG9yIHZpbikgKi8KKyNkZWZpbmUgQ0hBTl9BTE1fRU5BCTB4MTAJLyogcHJvcGFnYXRlIHRvIGFsYXJtcy1yZWcgPz8gKGNoayB2YWwhKSAqLworI2RlZmluZSBDSEFOX1JFQURZCShDSEFOX0VOQXxDSEFOX0NOVlJURCkgLyogc2FtcGxlIHJlYWR5IG1hc2sgKi8KKworI2RlZmluZSBURU1QX09UU19PRQkweDIwCS8qIE9UUyBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lIFZJTl9SVzFDX01BU0sJKENIQU5fUkVBRFl8Q0hBTl9BTE1fTUFYfENIQU5fQUxNX01JTikgICAvKiAweDg3ICovCisjZGVmaW5lIFRFTVBfUlcxQ19NQVNLCShWSU5fUlcxQ19NQVNLfFRFTVBfQUxNX0NSSVR8VEVNUF9GQVVMVCkgLyogMHhDRiAqLworCiBzdGF0aWMgdm9pZCBwYzg3MzYwX2luaXRfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJaW50IHVzZV90aGVybWlzdG9ycykKIHsKQEAgLTExNTIsMTEgKzEzNDYsMTIgQEAKIAogCW5yID0gZGF0YS0+aW5uciA8IDExID8gZGF0YS0+aW5uciA6IDExOwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKKwkJCQkJIFBDODczNjVfUkVHX0lOX1NUQVRVUyk7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgaW4lZCBzdGF0dXM6MHglMDJ4XG4iLCBpLCByZWcpOwogCQlpZiAoaW5pdCA+PSBpbml0X2luW2ldKSB7CiAJCQkvKiBGb3JjaWJseSBlbmFibGUgdm9sdGFnZSBjaGFubmVsICovCi0JCQlyZWcgPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfSU4sIGksCi0JCQkJCQkgUEM4NzM2NV9SRUdfSU5fU1RBVFVTKTsKLQkJCWlmICghKHJlZyAmIDB4MDEpKSB7CisJCQlpZiAoIShyZWcgJiBDSEFOX0VOQSkpIHsKIAkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSAiCiAJCQkJCSJlbmFibGluZyBpbiVkXG4iLCBpKTsKIAkJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBpLApAQCAtMTE2OCwxOSArMTM2MywyNCBAQAogCiAJLyogV2UgY2FuJ3QgYmxpbmRseSB0cnVzdCB0aGUgU3VwZXItSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24gYml0LAogCSAgIG1vc3QgQklPUyB3b24ndCBzZXQgaXQgcHJvcGVybHkgKi8KKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRoZXJtaXN0b3JzOiVkXG4iLCB1c2VfdGhlcm1pc3RvcnMpOwogCWZvciAoaSA9IDExOyBpIDwgZGF0YS0+aW5ucjsgaSsrKSB7CiAJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKIAkJCQkJIFBDODczNjVfUkVHX1RFTVBfU1RBVFVTKTsKLQkJdXNlX3RoZXJtaXN0b3JzID0gdXNlX3RoZXJtaXN0b3JzIHx8IChyZWcgJiAweDAxKTsKKwkJdXNlX3RoZXJtaXN0b3JzID0gdXNlX3RoZXJtaXN0b3JzIHx8IChyZWcgJiBDSEFOX0VOQSk7CisJCS8qIHRoZXJtaXN0b3JzIGFyZSB0ZW1wWzQtNl0sIG1lYXN1cmVkIG9uIHZpblsxMS0xNF0gKi8KKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYmlvcyB0ZW1wJWRfc3RhdHVzOjB4JTAyeFxuIiwgaS03LCByZWcpOwogCX0KKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJ1c2luZyB0aGVybWlzdG9yczolZFxuIiwgdXNlX3RoZXJtaXN0b3JzKTsKIAogCWkgPSB1c2VfdGhlcm1pc3RvcnMgPyAyIDogMDsKIAlmb3IgKDsgaSA8IGRhdGEtPnRlbXBucjsgaSsrKSB7CisJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLCBpLAorCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRlbXAlZF9zdGF0dXM6MHglMDJ4XG4iLCBpKzEsIHJlZyk7CiAJCWlmIChpbml0ID49IGluaXRfdGVtcFtpXSkgewogCQkJLyogRm9yY2libHkgZW5hYmxlIHRlbXBlcmF0dXJlIGNoYW5uZWwgKi8KLQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLCBpLAotCQkJCQkJIFBDODczNjVfUkVHX1RFTVBfU1RBVFVTKTsKLQkJCWlmICghKHJlZyAmIDB4MDEpKSB7CisJCQlpZiAoIShyZWcgJiBDSEFOX0VOQSkpIHsKIAkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSAiCiAJCQkJCSJlbmFibGluZyB0ZW1wJWRcbiIsIGkrMSk7CiAJCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBpLApAQCAtMTE5Nyw3ICsxMzk3LDcgQEAKIAkJCQkgICBkaW9kZXMgKi8KIAkJCQlyZWcgPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfVEVNUCwKIAkJCQkgICAgICAoaS0xMSkvMiwgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOwotCQkJCWlmIChyZWcgJiAweDAxKSB7CisJCQkJaWYgKHJlZyAmIENIQU5fRU5BKSB7CiAJCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIlNraXBwaW5nICIKIAkJCQkJCSJ0ZW1wJWQsIHBpbiBhbHJlYWR5IGluIHVzZSAiCiAJCQkJCQkiYnkgdGVtcCVkXG4iLCBpLTcsIChpLTExKS8yKTsKQEAgLTEyMDcsNyArMTQwNyw3IEBACiAJCQkJLyogRm9yY2libHkgZW5hYmxlIHRoZXJtaXN0b3IgY2hhbm5lbCAqLwogCQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKIAkJCQkJCQkgUEM4NzM2NV9SRUdfSU5fU1RBVFVTKTsKLQkJCQlpZiAoIShyZWcgJiAweDAxKSkgeworCQkJCWlmICghKHJlZyAmIENIQU5fRU5BKSkgewogCQkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSAiCiAJCQkJCQkiZW5hYmxpbmcgdGVtcCVkXG4iLCBpLTcpOwogCQkJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBpLApAQCAtMTIyMSw3ICsxNDIxLDggQEAKIAlpZiAoZGF0YS0+aW5ucikgewogCQlyZWcgPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfSU4sIE5PX0JBTkssCiAJCQkJCSBQQzg3MzY1X1JFR19JTl9DT05GSUcpOwotCQlpZiAocmVnICYgMHgwMSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHZpbi1jZmc6MHglMDJ4XG4iLCByZWcpOworCQlpZiAocmVnICYgQ0hBTl9FTkEpIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkiZW5hYmxpbmcgbW9uaXRvcmluZyAoVkxNKVxuIik7CiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBOT19CQU5LLApAQCAtMTIzMyw3ICsxNDM0LDggQEAKIAlpZiAoZGF0YS0+dGVtcG5yKSB7CiAJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLCBOT19CQU5LLAogCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9DT05GSUcpOwotCQlpZiAocmVnICYgMHgwMSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRlbXAtY2ZnOjB4JTAyeFxuIiwgcmVnKTsKKwkJaWYgKHJlZyAmIENIQU5fRU5BKSB7CiAJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSBlbmFibGluZyAiCiAJCQkJIm1vbml0b3JpbmcgKFRNUylcbiIpOwogCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBOT19CQU5LLApAQCAtMTMzNiwxMSArMTUzOCwxMSBAQAogCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9JTiwgaSwKIAkJCQkJICAgIFBDODczNjVfUkVHX0lOX1NUQVRVUywKIAkJCQkJICAgIGRhdGEtPmluX3N0YXR1c1tpXSk7Ci0JCQlpZiAoKGRhdGEtPmluX3N0YXR1c1tpXSAmIDB4ODEpID09IDB4ODEpIHsKKwkJCWlmICgoZGF0YS0+aW5fc3RhdHVzW2ldICYgQ0hBTl9SRUFEWSkgPT0gQ0hBTl9SRUFEWSkgewogCQkJCWRhdGEtPmluW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLAogCQkJCQkgICAgICBpLCBQQzg3MzY1X1JFR19JTik7CiAJCQl9Ci0JCQlpZiAoZGF0YS0+aW5fc3RhdHVzW2ldICYgMHgwMSkgeworCQkJaWYgKGRhdGEtPmluX3N0YXR1c1tpXSAmIENIQU5fRU5BKSB7CiAJCQkJZGF0YS0+aW5fbWluW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQkgIExEX0lOLCBpLAogCQkJCQkJICBQQzg3MzY1X1JFR19JTl9NSU4pOwpAQCAtMTM3MywxMiArMTU3NSwxMiBAQAogCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBpLAogCQkJCQkgICAgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMsCiAJCQkJCSAgICBkYXRhLT50ZW1wX3N0YXR1c1tpXSk7Ci0JCQlpZiAoKGRhdGEtPnRlbXBfc3RhdHVzW2ldICYgMHg4MSkgPT0gMHg4MSkgeworCQkJaWYgKChkYXRhLT50ZW1wX3N0YXR1c1tpXSAmIENIQU5fUkVBRFkpID09IENIQU5fUkVBRFkpIHsKIAkJCQlkYXRhLT50ZW1wW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQlMRF9URU1QLCBpLAogCQkJCQkJUEM4NzM2NV9SRUdfVEVNUCk7CiAJCQl9Ci0JCQlpZiAoZGF0YS0+dGVtcF9zdGF0dXNbaV0gJiAweDAxKSB7CisJCQlpZiAoZGF0YS0+dGVtcF9zdGF0dXNbaV0gJiBDSEFOX0VOQSkgewogCQkJCWRhdGEtPnRlbXBfbWluW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQkgICAgTERfVEVNUCwgaSwKIAkJCQkJCSAgICBQQzg3MzY1X1JFR19URU1QX01JTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCmluZGV4IGY5NDJlY2QuLmQ0ZDFiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCkBAIC00LDcgKzQsNyBAQAogICAgIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDEgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgotICAgIENvcHlyaWdodCAoYykgMjAwNyAgICAgICAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICAgIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMDggIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzgsMjUgKzM4LDI0IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXZpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgImxtNzUuaCIKIAotLyogSVNBIGRldmljZSwgaWYgZm91bmQgKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworI2lmZGVmIENPTkZJR19JU0EKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibG03NS5oIgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwKIAkJCQkJCTB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5EIH07Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaXNhX2FkZHJlc3MgPSAweDI5MDsKLQogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KIEkyQ19DTElFTlRfSU5TTU9EXzQodzgzNzgxZCwgdzgzNzgyZCwgdzgzNzgzcywgYXM5OTEyN2YpOwogSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShmb3JjZV9zdWJjbGllbnRzLCAiTGlzdCBvZiBzdWJjbGllbnQgYWRkcmVzc2VzOiAiCkBAIC0xNzgsOSArMTc3LDkgQEAKICNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWwpCQkoKHZhbCkgKiAxMDAwKQogCiAjZGVmaW5lIEJFRVBfTUFTS19GUk9NX1JFRyh2YWwsdHlwZSkJKCh0eXBlKSA9PSBhczk5MTI3ZiA/IFwKLQkJCQkJICh2YWwpIF4gMHg3ZmZmIDogKHZhbCkpCisJCQkJCSAofih2YWwpKSAmIDB4N2ZmZiA6ICh2YWwpICYgMHhmZjdmZmYpCiAjZGVmaW5lIEJFRVBfTUFTS19UT19SRUcodmFsLHR5cGUpCSgodHlwZSkgPT0gYXM5OTEyN2YgPyBcCi0JCQkJCSAofih2YWwpKSAmIDB4N2ZmZiA6ICh2YWwpICYgMHhmZmZmZmYpCisJCQkJCSAofih2YWwpKSAmIDB4N2ZmZiA6ICh2YWwpICYgMHhmZjdmZmYpCiAKICNkZWZpbmUgRElWX0ZST01fUkVHKHZhbCkJCSgxIDw8ICh2YWwpKQogCkBAIC0xOTksMjUgKzE5OCwxNiBAQAogCXJldHVybiBpOwogfQogCi0vKiBUaGVyZSBhcmUgc29tZSBjb21wbGljYXRpb25zIGluIGEgbW9kdWxlIGxpa2UgdGhpcy4gRmlyc3Qgb2ZmLCBXODM3ODFEIGNoaXBzCi0gICBtYXkgYmUgYm90aCBwcmVzZW50IG9uIHRoZSBTTUJ1cyBhbmQgdGhlIElTQSBidXMsIGFuZCB3ZSBoYXZlIHRvIGhhbmRsZQotICAgdGhvc2UgY2FzZXMgc2VwYXJhdGVseSBhdCBzb21lIHBsYWNlcy4gU2Vjb25kLCB0aGVyZSBtaWdodCBiZSBzZXZlcmFsCi0gICBXODM3ODFEIGNoaXBzIGF2YWlsYWJsZSAod2VsbCwgYWN0dWFsbHksIHRoYXQgaXMgcHJvYmFibHkgbmV2ZXIgZG9uZTsgYnV0Ci0gICBpdCBpcyBhIGNsZWFuIGlsbHVzdHJhdGlvbiBvZiBob3cgdG8gaGFuZGxlIGEgY2FzZSBsaWtlIHRoYXQpLiBGaW5hbGx5LAotICAgYSBzcGVjaWZpYyBjaGlwIG1heSBiZSBhdHRhY2hlZCB0byAqYm90aCogSVNBIGFuZCBTTUJ1cywgYW5kIHdlIHdvdWxkCi0gICBub3QgbGlrZSB0byBkZXRlY3QgaXQgZG91YmxlLiBGb3J0dW5hdGVseSwgaW4gdGhlIGNhc2Ugb2YgdGhlIFc4Mzc4MUQgYXQKLSAgIGxlYXN0LCBhIHJlZ2lzdGVyIHRlbGxzIHVzIHdoYXQgU01CdXMgYWRkcmVzcyB3ZSBhcmUgb24sIHNvIHRoYXQgaGVscHMKLSAgIGEgYml0IC0gZXhjZXB0IGlmIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgU01CdXMuIEdyb2FuLiBObyBzb2x1dGlvbgotICAgZm9yIHRoaXMgeWV0LiAqLwotCi0vKiBGb3IgSVNBIGNoaXBzLCB3ZSBhYnVzZSB0aGUgaTJjX2NsaWVudCBhZGRyIGFuZCBuYW1lIGZpZWxkcy4gV2UgYWxzbyB1c2UKLSAgIHRoZSBkcml2ZXIgZmllbGQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIEkyQyBhbmQgSVNBIGNoaXBzLiAqLwogc3RydWN0IHc4Mzc4MWRfZGF0YSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWVudW0gY2hpcHMgdHlwZTsKIAorCS8qIEZvciBJU0EgZGV2aWNlIG9ubHkgKi8KKwljb25zdCBjaGFyICpuYW1lOworCWludCBpc2FfYWRkcjsKKwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KQEAgLTI0MCw3ICsyMzAsNiBAQAogCXU4IHZpZDsJCQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KIAl1MzIgYWxhcm1zOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCiAJdTMyIGJlZXBfbWFzazsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwotCXU4IGJlZXBfZW5hYmxlOwkJLyogQm9vbGVhbiAqLwogCXU4IHB3bVs0XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggcHdtMl9lbmFibGU7CQkvKiBCb29sZWFuICovCiAJdTE2IHNlbnNbM107CQkvKiA3ODJELzc4M1Mgb25seS4KQEAgLTI0OSwzNiArMjM4LDE0IEBACiAJdTggdnJtOwogfTsKIAotc3RhdGljIGludCB3ODM3ODFkX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHc4Mzc4MWRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKLXN0YXRpYyBpbnQgdzgzNzgxZF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3ODM3ODFkX2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLXN0YXRpYyBpbnQgX19kZXZleGl0IHc4Mzc4MWRfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgdzgzNzgxZF9kYXRhICp3ODM3ODFkX2RhdGFfaWZfaXNhKHZvaWQpOworc3RhdGljIGludCB3ODM3ODFkX2FsaWFzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjaGlwaWQpOwogCiBzdGF0aWMgaW50IHc4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKTsKIHN0YXRpYyBpbnQgdzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpOwogc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgdzgzNzgxZF9pbml0X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdzgzNzgxZF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidzgzNzgxZCIsCi0JfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSB3ODM3ODFkX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gdzgzNzgxZF9kZXRhY2hfY2xpZW50LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdzgzNzgxZF9pc2FfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkubmFtZSA9ICJ3ODM3ODFkIiwKLQl9LAotCS5wcm9iZSA9IHc4Mzc4MWRfaXNhX3Byb2JlLAotCS5yZW1vdmUgPSB3ODM3ODFkX2lzYV9yZW1vdmUsCi19OwotCi0KIC8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBzaG93X2luX3JlZyhyZWcpIFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBcCkBAIC01MTMsMTEgKzQ4MCw2IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLAogCQkgICAgICAgKGxvbmcpQkVFUF9NQVNLX0ZST01fUkVHKGRhdGEtPmJlZXBfbWFzaywgZGF0YS0+dHlwZSkpOwogfQotc3RhdGljIHNzaXplX3Qgc2hvd19iZWVwX2VuYWJsZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSB3ODM3ODFkX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIChsb25nKWRhdGEtPmJlZXBfZW5hYmxlKTsKLX0KIAogc3RhdGljIHNzaXplX3QKIHN0b3JlX2JlZXBfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNTI5LDEyICs0OTEsMTIgQEAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5iZWVwX21hc2sgPSBCRUVQX01BU0tfVE9fUkVHKHZhbCwgZGF0YS0+dHlwZSk7CisJZGF0YS0+YmVlcF9tYXNrICY9IDB4ODAwMDsgLyogcHJlc2VydmUgYmVlcCBlbmFibGUgKi8KKwlkYXRhLT5iZWVwX21hc2sgfD0gQkVFUF9NQVNLX1RPX1JFRyh2YWwsIGRhdGEtPnR5cGUpOwogCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSwKIAkJCSAgICBkYXRhLT5iZWVwX21hc2sgJiAweGZmKTsKIAl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIsCi0JCQkgICAgKChkYXRhLT5iZWVwX21hc2sgPj4gOCkgJiAweDdmKQotCQkJICAgIHwgZGF0YS0+YmVlcF9lbmFibGUgPDwgNyk7CisJCQkgICAgKGRhdGEtPmJlZXBfbWFzayA+PiA4KSAmIDB4ZmYpOwogCWlmIChkYXRhLT50eXBlICE9IHc4Mzc4MWQgJiYgZGF0YS0+dHlwZSAhPSBhczk5MTI3ZikgewogCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzMsCiAJCQkJICAgICgoZGF0YS0+YmVlcF9tYXNrKSA+PiAxNikgJiAweGZmKTsKQEAgLTU0NCwzMSArNTA2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9iZWVwX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdTMyIHZhbDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCWlmICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+YmVlcF9lbmFibGUgPSB2YWw7Ci0JdmFsID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIpICYgMHg3ZjsKLQl2YWwgfD0gZGF0YS0+YmVlcF9lbmFibGUgPDwgNzsKLQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIsIHZhbCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KIHN0YXRpYyBERVZJQ0VfQVRUUihiZWVwX21hc2ssIFNfSVJVR08gfCBTX0lXVVNSLAogCQlzaG93X2JlZXBfbWFzaywgc3RvcmVfYmVlcF9tYXNrKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihiZWVwX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXNob3dfYmVlcF9lbmFibGUsIHN0b3JlX2JlZXBfZW5hYmxlKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTY2Myw2ICs2MDIsOCBAQAogCQkJc2hvd19iZWVwLCBzdG9yZV9iZWVwLCA1KTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYmVlcCwgU19JUlVHTywKIAkJCXNob3dfdGVtcDNfYmVlcCwgc3RvcmVfYmVlcCwgMTMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihiZWVwX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X2JlZXAsIHN0b3JlX2JlZXAsIDE1KTsKIAogc3RhdGljIHNzaXplX3QKIHNob3dfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhciAqYnVmKQpAQCAtODY2LDQ1ICs4MDcsMTkgQEAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfdHlwZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJc2hvd19zZW5zb3IsIHN0b3JlX3NlbnNvciwgMik7CiAKLS8qIEkyQyBkZXZpY2VzIGdldCB0aGlzIG5hbWUgYXR0cmlidXRlIGF1dG9tYXRpY2FsbHksIGJ1dCBmb3IgSVNBIGRldmljZXMKLSAgIHdlIG11c3QgY3JlYXRlIGl0IGJ5IG91cnNlbHZlcy4gKi8KLXN0YXRpYyBzc2l6ZV90Ci1zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+Y2xpZW50Lm5hbWUpOwotfQotc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7Ci0KLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW46Ci0gICAgICogdzgzNzgxZF9kcml2ZXIgaXMgaW5zZXJ0ZWQgKHdoZW4gdGhpcyBtb2R1bGUgaXMgbG9hZGVkKSwgZm9yIGVhY2gKLSAgICAgICBhdmFpbGFibGUgYWRhcHRlcgotICAgICAqIHdoZW4gYSBuZXcgYWRhcHRlciBpcyBpbnNlcnRlZCAoYW5kIHc4Mzc4MWRfZHJpdmVyIGlzIHN0aWxsIHByZXNlbnQpICovCi1zdGF0aWMgaW50Ci13ODM3ODFkX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCi0JCXJldHVybiAwOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgdzgzNzgxZF9kZXRlY3QpOwotfQotCiAvKiBBc3N1bWVzIHRoYXQgYWRhcHRlciBpcyBvZiBJMkMsIG5vdCBJU0EgdmFyaWV0eS4KICAqIE9USEVSV0lTRSBET04nVCBDQUxMIFRISVMKICAqLwogc3RhdGljIGludAotdzgzNzgxZF9kZXRlY3Rfc3ViY2xpZW50cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCwKLQkJc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQpCit3ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50KQogewogCWludCBpLCB2YWwxID0gMCwgaWQ7CiAJaW50IGVycjsKLQljb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOworCWludCBhZGRyZXNzID0gbmV3X2NsaWVudC0+YWRkcjsKKwl1bnNpZ25lZCBzaG9ydCBzY19hZGRyWzJdOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50KTsKLQotCWRhdGEtPmxtNzVbMF0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghKGRhdGEtPmxtNzVbMF0pKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gRVJST1JfU0NfMDsKLQl9CisJZW51bSBjaGlwcyBraW5kID0gZGF0YS0+dHlwZTsKIAogCWlkID0gaTJjX2FkYXB0ZXJfaWQoYWRhcHRlcik7CiAKQEAgLTkyMiw1NSArODM3LDM1IEBACiAJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfSTJDX1NVQkFERFIsCiAJCQkJKGZvcmNlX3N1YmNsaWVudHNbMl0gJiAweDA3KSB8CiAJCQkJKChmb3JjZV9zdWJjbGllbnRzWzNdICYgMHgwNykgPDwgNCkpOwotCQlkYXRhLT5sbTc1WzBdLT5hZGRyID0gZm9yY2Vfc3ViY2xpZW50c1syXTsKKwkJc2NfYWRkclswXSA9IGZvcmNlX3N1YmNsaWVudHNbMl07CiAJfSBlbHNlIHsKIAkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JMkNfU1VCQUREUik7Ci0JCWRhdGEtPmxtNzVbMF0tPmFkZHIgPSAweDQ4ICsgKHZhbDEgJiAweDA3KTsKKwkJc2NfYWRkclswXSA9IDB4NDggKyAodmFsMSAmIDB4MDcpOwogCX0KIAogCWlmIChraW5kICE9IHc4Mzc4M3MpIHsKLQkJZGF0YS0+bG03NVsxXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghKGRhdGEtPmxtNzVbMV0pKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBFUlJPUl9TQ18xOwotCQl9Ci0KIAkJaWYgKGZvcmNlX3N1YmNsaWVudHNbMF0gPT0gaWQgJiYKIAkJICAgIGZvcmNlX3N1YmNsaWVudHNbMV0gPT0gYWRkcmVzcykgewotCQkJZGF0YS0+bG03NVsxXS0+YWRkciA9IGZvcmNlX3N1YmNsaWVudHNbM107CisJCQlzY19hZGRyWzFdID0gZm9yY2Vfc3ViY2xpZW50c1szXTsKIAkJfSBlbHNlIHsKLQkJCWRhdGEtPmxtNzVbMV0tPmFkZHIgPSAweDQ4ICsgKCh2YWwxID4+IDQpICYgMHgwNyk7CisJCQlzY19hZGRyWzFdID0gMHg0OCArICgodmFsMSA+PiA0KSAmIDB4MDcpOwogCQl9Ci0JCWlmIChkYXRhLT5sbTc1WzBdLT5hZGRyID09IGRhdGEtPmxtNzVbMV0tPmFkZHIpIHsKKwkJaWYgKHNjX2FkZHJbMF0gPT0gc2NfYWRkclsxXSkgewogCQkJZGV2X2VycigmbmV3X2NsaWVudC0+ZGV2LAogCQkJICAgICAgICJEdXBsaWNhdGUgYWRkcmVzc2VzIDB4JXggZm9yIHN1YmNsaWVudHMuXG4iLAotCQkJICAgICAgIGRhdGEtPmxtNzVbMF0tPmFkZHIpOworCQkJICAgICAgIHNjX2FkZHJbMF0pOwogCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBFUlJPUl9TQ18yOwogCQl9CiAJfQogCi0JaWYgKGtpbmQgPT0gdzgzNzgxZCkKLQkJY2xpZW50X25hbWUgPSAidzgzNzgxZCBzdWJjbGllbnQiOwotCWVsc2UgaWYgKGtpbmQgPT0gdzgzNzgyZCkKLQkJY2xpZW50X25hbWUgPSAidzgzNzgyZCBzdWJjbGllbnQiOwotCWVsc2UgaWYgKGtpbmQgPT0gdzgzNzgzcykKLQkJY2xpZW50X25hbWUgPSAidzgzNzgzcyBzdWJjbGllbnQiOwotCWVsc2UgaWYgKGtpbmQgPT0gYXM5OTEyN2YpCi0JCWNsaWVudF9uYW1lID0gImFzOTkxMjdmIHN1YmNsaWVudCI7Ci0KIAlmb3IgKGkgPSAwOyBpIDw9IDE7IGkrKykgewotCQkvKiBzdG9yZSBhbGwgZGF0YSBpbiB3ODM3ODFkICovCi0JCWkyY19zZXRfY2xpZW50ZGF0YShkYXRhLT5sbTc1W2ldLCBOVUxMKTsKLQkJZGF0YS0+bG03NVtpXS0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JCWRhdGEtPmxtNzVbaV0tPmRyaXZlciA9ICZ3ODM3ODFkX2RyaXZlcjsKLQkJZGF0YS0+bG03NVtpXS0+ZmxhZ3MgPSAwOwotCQlzdHJsY3B5KGRhdGEtPmxtNzVbaV0tPm5hbWUsIGNsaWVudF9uYW1lLAotCQkJSTJDX05BTUVfU0laRSk7Ci0JCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoZGF0YS0+bG03NVtpXSkpKSB7CisJCWRhdGEtPmxtNzVbaV0gPSBpMmNfbmV3X2R1bW15KGFkYXB0ZXIsIHNjX2FkZHJbaV0pOworCQlpZiAoIWRhdGEtPmxtNzVbaV0pIHsKIAkJCWRldl9lcnIoJm5ld19jbGllbnQtPmRldiwgIlN1YmNsaWVudCAlZCAiCiAJCQkJInJlZ2lzdHJhdGlvbiBhdCBhZGRyZXNzIDB4JXggIgotCQkJCSJmYWlsZWQuXG4iLCBpLCBkYXRhLT5sbTc1W2ldLT5hZGRyKTsKKwkJCQkiZmFpbGVkLlxuIiwgaSwgc2NfYWRkcltpXSk7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJaWYgKGkgPT0gMSkKIAkJCQlnb3RvIEVSUk9SX1NDXzM7CiAJCQlnb3RvIEVSUk9SX1NDXzI7CkBAIC05ODMsMTIgKzg3OCw5IEBACiAKIC8qIFVuZG8gaW5pdHMgaW4gY2FzZSBvZiBlcnJvcnMgKi8KIEVSUk9SX1NDXzM6Ci0JaTJjX2RldGFjaF9jbGllbnQoZGF0YS0+bG03NVswXSk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMF0pOwogRVJST1JfU0NfMjoKLQlrZnJlZShkYXRhLT5sbTc1WzFdKTsKIEVSUk9SX1NDXzE6Ci0Ja2ZyZWUoZGF0YS0+bG03NVswXSk7Ci1FUlJPUl9TQ18wOgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwMjksNyArOTIxLDcgQEAKIAkmZGV2X2F0dHJfdnJtLmF0dHIsCiAJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAogCSZkZXZfYXR0cl9iZWVwX21hc2suYXR0ciwKLQkmZGV2X2F0dHJfYmVlcF9lbmFibGUuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2JlZXBfZW5hYmxlLmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHc4Mzc4MWRfZ3JvdXAgPSB7CkBAIC0xMTUxLDk2ICsxMDQzLDc0IEBACiAJCX0KIAl9CiAKLQlpZiAoaXNfaXNhKSB7Ci0JCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQogCXJldHVybiAwOwogfQogCisvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KIHN0YXRpYyBpbnQKLXc4Mzc4MWRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQordzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCisJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlpbnQgdmFsMSA9IDAsIHZhbDI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmlzYSA9IHc4Mzc4MWRfZGF0YV9pZl9pc2EoKTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJaW50IGFkZHJlc3MgPSBjbGllbnQtPmFkZHI7CiAJY29uc3QgY2hhciAqY2xpZW50X25hbWUgPSAiIjsKIAllbnVtIHZlbmRvciB7IHdpbmJvbmQsIGFzdXMgfSB2ZW5kaWQ7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBFUlJPUjE7Ci0JfQorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBPSy4gRm9yIG5vdywgd2UgcHJlc3VtZSB3ZSBoYXZlIGEgdmFsaWQgY2xpZW50LiBXZSBub3cgY3JlYXRlIHRoZQotCSAgIGNsaWVudCBzdHJ1Y3R1cmUsIGV2ZW4gdGhvdWdoIHdlIGNhbm5vdCBmaWxsIGl0IGNvbXBsZXRlbHkgeWV0LgotCSAgIEJ1dCBpdCBhbGxvd3MgdXMgdG8gYWNjZXNzIHc4Mzc4MWRfe3JlYWQsd3JpdGV9X3ZhbHVlLiAqLwotCi0JaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3ODM3ODFkX2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBFUlJPUjE7Ci0JfQotCi0JY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmdzgzNzgxZF9kcml2ZXI7Ci0JZGV2ID0gJmNsaWVudC0+ZGV2OwotCi0JLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KKwkvKiBXZSBibG9jayB1cGRhdGVzIG9mIHRoZSBJU0EgZGV2aWNlIHRvIG1pbmltaXplIHRoZSByaXNrIG9mCisJICAgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNhbWUgVzgzNzgxRCBjaGlwIHRocm91Z2ggZGlmZmVyZW50CisJICAgaW50ZXJmYWNlcy4gKi8KKwlpZiAoaXNhKQorCQltdXRleF9sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRoZSB3ODM3OD9kIG1heSBiZSBzdHVjayBpbiBzb21lIG90aGVyIGJhbmsgdGhhbiBiYW5rIDAuIFRoaXMgbWF5CiAJICAgbWFrZSByZWFkaW5nIG90aGVyIGluZm9ybWF0aW9uIGltcG9zc2libGUuIFNwZWNpZnkgYSBmb3JjZT0uLi4gb3IKIAkgICBmb3JjZV8qPS4uLiBwYXJhbWV0ZXIsIGFuZCB0aGUgV2luYm9uZCB3aWxsIGJlIHJlc2V0IHRvIHRoZSByaWdodAogCSAgIGJhbmsuICovCiAJaWYgKGtpbmQgPCAwKSB7Ci0JCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQ09ORklHKSAmIDB4ODApIHsKKwkJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YQorCQkgICAgKGNsaWVudCwgVzgzNzgxRF9SRUdfQ09ORklHKSAmIDB4ODApIHsKIAkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldGVjdGlvbiBvZiB3ODM3ODFkIGNoaXAgIgogCQkJCSJmYWlsZWQgYXQgc3RlcCAzXG4iKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKKwkJCWdvdG8gZXJyX25vZGV2OwogCQl9Ci0JCXZhbDEgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkFOSyk7Ci0JCXZhbDIgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CisJCXZhbDEgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LKTsKKwkJdmFsMiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0NISVBNQU4pOwogCQkvKiBDaGVjayBmb3IgV2luYm9uZCBvciBBc3VzIElEIGlmIGluIGJhbmsgMCAqLwogCQlpZiAoKCEodmFsMSAmIDB4MDcpKSAmJgogCQkgICAgKCgoISh2YWwxICYgMHg4MCkpICYmICh2YWwyICE9IDB4YTMpICYmICh2YWwyICE9IDB4YzMpKQogCQkgICAgIHx8ICgodmFsMSAmIDB4ODApICYmICh2YWwyICE9IDB4NWMpICYmICh2YWwyICE9IDB4MTIpKSkpIHsKIAkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldGVjdGlvbiBvZiB3ODM3ODFkIGNoaXAgIgogCQkJCSJmYWlsZWQgYXQgc3RlcCA0XG4iKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKKwkJCWdvdG8gZXJyX25vZGV2OwogCQl9CiAJCS8qIElmIFdpbmJvbmQgU01CdXMsIGNoZWNrIGFkZHJlc3MgYXQgMHg0OC4KIAkJICAgQXN1cyBkb2Vzbid0IHN1cHBvcnQsIGV4Y2VwdCBmb3IgYXM5OTEyN2YgcmV2LjIgKi8KIAkJaWYgKCghKHZhbDEgJiAweDgwKSAmJiAodmFsMiA9PSAweGEzKSkgfHwKIAkJICAgICgodmFsMSAmIDB4ODApICYmICh2YWwyID09IDB4NWMpKSkgewotCQkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZQotCQkJICAgIChkYXRhLCBXODM3ODFEX1JFR19JMkNfQUREUikgIT0gYWRkcmVzcykgeworCQkJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YQorCQkJICAgIChjbGllbnQsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSB7CiAJCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW9uIG9mIHc4Mzc4MWQgIgogCQkJCQkiY2hpcCBmYWlsZWQgYXQgc3RlcCA1XG4iKTsKLQkJCQllcnIgPSAtRU5PREVWOwotCQkJCWdvdG8gRVJST1IyOworCQkJCWdvdG8gZXJyX25vZGV2OwogCQkJfQogCQl9CiAJfQogCiAJLyogV2UgaGF2ZSBlaXRoZXIgaGFkIGEgZm9yY2UgcGFyYW1ldGVyLCBvciB3ZSBoYXZlIGFscmVhZHkgZGV0ZWN0ZWQgdGhlCiAJICAgV2luYm9uZC4gUHV0IGl0IG5vdyBpbnRvIGJhbmsgMCBhbmQgVmVuZG9yIElEIEhpZ2ggQnl0ZSAqLwotCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkFOSywKLQkJCSAgICAodzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JBTkspCi0JCQkgICAgICYgMHg3OCkgfCAweDgwKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKKwkJKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkspCisJCSAmIDB4NzgpIHwgMHg4MCk7CiAKIAkvKiBEZXRlcm1pbmUgdGhlIGNoaXAgdHlwZS4gKi8KIAlpZiAoa2luZCA8PSAwKSB7CiAJCS8qIGdldCB2ZW5kb3IgSUQgKi8KLQkJdmFsMiA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DSElQTUFOKTsKKwkJdmFsMiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0NISVBNQU4pOwogCQlpZiAodmFsMiA9PSAweDVjKQogCQkJdmVuZGlkID0gd2luYm9uZDsKIAkJZWxzZSBpZiAodmFsMiA9PSAweDEyKQpAQCAtMTI0OCwxMSArMTExOCwxMCBAQAogCQllbHNlIHsKIAkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgInc4Mzc4MWQgY2hpcCB2ZW5kb3IgaXMgIgogCQkJCSJuZWl0aGVyIFdpbmJvbmQgbm9yIEFzdXNcbiIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAotCQl2YWwxID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1dDSElQSUQpOworCQl2YWwxID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CiAJCWlmICgodmFsMSA9PSAweDEwIHx8IHZhbDEgPT0gMHgxMSkgJiYgdmVuZGlkID09IHdpbmJvbmQpCiAJCQlraW5kID0gdzgzNzgxZDsKIAkJZWxzZSBpZiAodmFsMSA9PSAweDMwICYmIHZlbmRpZCA9PSB3aW5ib25kKQpAQCAtMTI2NiwxMSArMTEzNSwyMCBAQAogCQkJCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJJZ25vcmluZyAnZm9yY2UnICIKIAkJCQkJICJwYXJhbWV0ZXIgZm9yIHVua25vd24gY2hpcCBhdCAiCiAJCQkJCSAiYWRkcmVzcyAweCUwMnhcbiIsIGFkZHJlc3MpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CisJCX0KKworCQlpZiAoKGtpbmQgPT0gdzgzNzgxZCB8fCBraW5kID09IHc4Mzc4MmQpCisJCSAmJiB3ODM3ODFkX2FsaWFzX2RldGVjdChjbGllbnQsIHZhbDEpKSB7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXZpY2UgYXQgMHglMDJ4IGFwcGVhcnMgdG8gIgorCQkJCSJiZSB0aGUgc2FtZSBhcyBJU0EgZGV2aWNlXG4iLCBhZGRyZXNzKTsKKwkJCWdvdG8gZXJyX25vZGV2OwogCQl9CiAJfQogCisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwogCWlmIChraW5kID09IHc4Mzc4MWQpIHsKIAkJY2xpZW50X25hbWUgPSAidzgzNzgxZCI7CiAJfSBlbHNlIGlmIChraW5kID09IHc4Mzc4MmQpIHsKQEAgLTEyODEsMjQgKzExNTksNDYgQEAKIAkJY2xpZW50X25hbWUgPSAiYXM5OTEyN2YiOwogCX0KIAotCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwotCWRhdGEtPnR5cGUgPSBraW5kOworCXN0cmxjcHkoaW5mby0+dHlwZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwogCi0JLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCWdvdG8gRVJST1IyOworCXJldHVybiAwOworCisgZXJyX25vZGV2OgorCWlmIChpc2EpCisJCW11dGV4X3VubG9jaygmaXNhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHc4Mzc4MWRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIEVSUk9SMTsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlkYXRhLT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKIAogCS8qIGF0dGFjaCBzZWNvbmRhcnkgaTJjIGxtNzUtbGlrZSBjbGllbnRzICovCi0JaWYgKChlcnIgPSB3ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKGFkYXB0ZXIsIGFkZHJlc3MsCi0JCQlraW5kLCBjbGllbnQpKSkKKwllcnIgPSB3ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKGNsaWVudCk7CisJaWYgKGVycikKIAkJZ290byBFUlJPUjM7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCiAJdzgzNzgxZF9pbml0X2RldmljZShkZXYpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQllcnIgPSB3ODM3ODFkX2NyZWF0ZV9maWxlcyhkZXYsIGtpbmQsIDApOworCWVyciA9IHc4Mzc4MWRfY3JlYXRlX2ZpbGVzKGRldiwgZGF0YS0+dHlwZSwgMCk7CiAJaWYgKGVycikKIAkJZ290byBFUlJPUjQ7CiAKQEAgLTEzMTQsMjY0ICsxMjE0LDExMyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CiAKLQlpZiAoZGF0YS0+bG03NVsxXSkgewotCQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzFdKTsKLQkJa2ZyZWUoZGF0YS0+bG03NVsxXSk7Ci0JfQotCWlmIChkYXRhLT5sbTc1WzBdKSB7Ci0JCWkyY19kZXRhY2hfY2xpZW50KGRhdGEtPmxtNzVbMF0pOwotCQlrZnJlZShkYXRhLT5sbTc1WzBdKTsKLQl9CisJaWYgKGRhdGEtPmxtNzVbMF0pCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShkYXRhLT5sbTc1WzBdKTsKKwlpZiAoZGF0YS0+bG03NVsxXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMV0pOwogRVJST1IzOgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci1FUlJPUjI6CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiBFUlJPUjE6CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludAotdzgzNzgxZF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit3ODM3ODFkX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JLyogbWFpbiBjbGllbnQgKi8KLQlpZiAoZGF0YSkgewotCQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOwotCX0KLQotCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBtYWluIGNsaWVudCAqLwotCWlmIChkYXRhKQotCQlrZnJlZShkYXRhKTsKLQotCS8qIHN1YmNsaWVudCAqLwotCWVsc2UKLQkJa2ZyZWUoY2xpZW50KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotdzgzNzgxZF9pc2FfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgZXJyLCByZWc7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQljb25zdCBjaGFyICpuYW1lOwotCi0JLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMiwKLQkJCSAgICAidzgzNzgxZCIpKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzgzNzgxZF9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbjsKLQl9Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JZGF0YS0+Y2xpZW50LmFkZHIgPSByZXMtPnN0YXJ0OwotCWkyY19zZXRfY2xpZW50ZGF0YSgmZGF0YS0+Y2xpZW50LCBkYXRhKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKLQotCXJlZyA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19XQ0hJUElEKTsKLQlzd2l0Y2ggKHJlZykgewotCWNhc2UgMHgzMDoKLQkJZGF0YS0+dHlwZSA9IHc4Mzc4MmQ7Ci0JCW5hbWUgPSAidzgzNzgyZCI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRhdGEtPnR5cGUgPSB3ODM3ODFkOwotCQluYW1lID0gInc4Mzc4MWQiOwotCX0KLQlzdHJsY3B5KGRhdGEtPmNsaWVudC5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIFc4Mzc4MUQgY2hpcCAqLwotCXc4Mzc4MWRfaW5pdF9kZXZpY2UoJnBkZXYtPmRldik7Ci0KLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWVyciA9IHc4Mzc4MWRfY3JlYXRlX2ZpbGVzKCZwZGV2LT5kZXYsIGRhdGEtPnR5cGUsIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7Ci0KLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotIGV4aXRfcmVtb3ZlX2ZpbGVzOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0Ja2ZyZWUoZGF0YSk7Ci0gZXhpdF9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQsIDIpOwotIGV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQKLXc4Mzc4MWRfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0JcmVsZWFzZV9yZWdpb24oZGF0YS0+Y2xpZW50LmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnc4Mzc4MWRfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOworCisJaWYgKGRhdGEtPmxtNzVbMF0pCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShkYXRhLT5sbTc1WzBdKTsKKwlpZiAoZGF0YS0+bG03NVsxXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMV0pOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhlIFNNQnVzIGxvY2tzIGl0c2VsZiwgdXN1YWxseSwgYnV0IG5vdGhpbmcgbWF5IGFjY2VzcyB0aGUgV2luYm9uZCBiZXR3ZWVuCi0gICBiYW5rIHN3aXRjaGVzLiBJU0EgYWNjZXNzIG11c3QgYWx3YXlzIGJlIGxvY2tlZCBleHBsaWNpdGx5IQotICAgV2UgaWdub3JlIHRoZSBXODM3ODFEIEJVU1kgZmxhZyBhdCB0aGlzIG1vbWVudCAtIGl0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLAotICAgd291bGQgc2xvdyBkb3duIHRoZSBXODM3ODFEIGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCi0gICBUaGVyZSBhcmUgc29tZSB1Z2x5IHR5cGVjYXN0cyBoZXJlLCBidXQgdGhlIGdvb2QgbmV3cyBpcyAtIHRoZXkgc2hvdWxkCi0gICBub3doZXJlIGVsc2UgYmUgbmVjZXNzYXJ5ISAqLwogc3RhdGljIGludAotdzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit3ODM3ODFkX3JlYWRfdmFsdWVfaTJjKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaW50IHJlcywgd29yZF9zaXplZCwgYmFuazsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCWludCByZXMsIGJhbms7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCi0JCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQotCQkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKLQkJICAgICYmICgoKHJlZyAmIDB4MDBmZikgPT0gMHg1MCkKLQkJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDUzKQotCQkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTUpKTsKLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKHJlZyA+PiA4LAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQotCQlvdXRiX3AocmVnICYgMHhmZiwgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQlyZXMgPSBpbmJfcChjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCWlmICh3b3JkX3NpemVkKSB7Ci0JCQlvdXRiX3AoKHJlZyAmIDB4ZmYpICsgMSwKLQkJCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7Ci0JCQlyZXMgPQotCQkJICAgIChyZXMgPDwgOCkgKyBpbmJfcChjbGllbnQtPmFkZHIgKwotCQkJCQkgICAgICAgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwotCQl9Ci0JCWlmIChyZWcgJiAweGZmMDApIHsKLQkJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcCgwLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KKwliYW5rID0gKHJlZyA+PiA4KSAmIDB4MGY7CisJaWYgKGJhbmsgPiAyKQorCQkvKiBzd2l0Y2ggYmFua3MgKi8KKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCisJCQkJCSAgYmFuayk7CisJaWYgKGJhbmsgPT0gMCB8fCBiYW5rID4gMikgeworCQlyZXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmKTsKIAl9IGVsc2UgewotCQliYW5rID0gKHJlZyA+PiA4KSAmIDB4MGY7Ci0JCWlmIChiYW5rID4gMikKLQkJCS8qIHN3aXRjaCBiYW5rcyAqLwotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCi0JCQkJCQkgIGJhbmspOwotCQlpZiAoYmFuayA9PSAwIHx8IGJhbmsgPiAyKSB7Ci0JCQlyZXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHN3aXRjaCB0byBzdWJjbGllbnQgKi8KLQkJCWNsID0gZGF0YS0+bG03NVtiYW5rIC0gMV07Ci0JCQkvKiBjb252ZXJ0IGZyb20gSVNBIHRvIExNNzUgSTJDIGFkZHJlc3NlcyAqLwotCQkJc3dpdGNoIChyZWcgJiAweGZmKSB7Ci0JCQljYXNlIDB4NTA6CS8qIFRFTVAgKi8KLQkJCQlyZXMgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsLCAwKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTI6CS8qIENPTkZJRyAqLwotCQkJCXJlcyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbCwgMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTM6CS8qIEhZU1QgKi8KLQkJCQlyZXMgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsLCAyKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMykpOwotCQkJCWJyZWFrOwotCQkJfQorCQkvKiBzd2l0Y2ggdG8gc3ViY2xpZW50ICovCisJCWNsID0gZGF0YS0+bG03NVtiYW5rIC0gMV07CisJCS8qIGNvbnZlcnQgZnJvbSBJU0EgdG8gTE03NSBJMkMgYWRkcmVzc2VzICovCisJCXN3aXRjaCAocmVnICYgMHhmZikgeworCQljYXNlIDB4NTA6CS8qIFRFTVAgKi8KKwkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDApKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTI6CS8qIENPTkZJRyAqLworCQkJcmVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTM6CS8qIEhZU1QgKi8KKwkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDIpKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KKwkJZGVmYXVsdDoKKwkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDMpKTsKKwkJCWJyZWFrOwogCQl9Ci0JCWlmIChiYW5rID4gMikKLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoYmFuayA+IDIpCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKKwogCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQKLXc4Mzc4MWRfd3JpdGVfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQordzgzNzgxZF93cml0ZV92YWx1ZV9pMmMoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWludCB3b3JkX3NpemVkLCBiYW5rOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IGJhbms7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCi0JCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQotCQkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKLQkJICAgICYmICgoKHJlZyAmIDB4MDBmZikgPT0gMHg1MykKLQkJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDU1KSk7Ci0JCWlmIChyZWcgJiAweGZmMDApIHsKLQkJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcChyZWcgPj4gOCwKLQkJCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KLQkJb3V0Yl9wKHJlZyAmIDB4ZmYsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJaWYgKHdvcmRfc2l6ZWQpIHsKLQkJCW91dGJfcCh2YWx1ZSA+PiA4LAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcCgocmVnICYgMHhmZikgKyAxLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJfQotCQlvdXRiX3AodmFsdWUgJiAweGZmLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCWlmIChyZWcgJiAweGZmMDApIHsKLQkJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcCgwLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KKwliYW5rID0gKHJlZyA+PiA4KSAmIDB4MGY7CisJaWYgKGJhbmsgPiAyKQorCQkvKiBzd2l0Y2ggYmFua3MgKi8KKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCisJCQkJCSAgYmFuayk7CisJaWYgKGJhbmsgPT0gMCB8fCBiYW5rID4gMikgeworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICYgMHhmZiwKKwkJCQkJICB2YWx1ZSAmIDB4ZmYpOwogCX0gZWxzZSB7Ci0JCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKLQkJaWYgKGJhbmsgPiAyKQotCQkJLyogc3dpdGNoIGJhbmtzICovCi0JCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKLQkJCQkJCSAgYmFuayk7Ci0JCWlmIChiYW5rID09IDAgfHwgYmFuayA+IDIpIHsKLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmLAotCQkJCQkJICB2YWx1ZSAmIDB4ZmYpOwotCQl9IGVsc2UgewotCQkJLyogc3dpdGNoIHRvIHN1YmNsaWVudCAqLwotCQkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKLQkJCS8qIGNvbnZlcnQgZnJvbSBJU0EgdG8gTE03NSBJMkMgYWRkcmVzc2VzICovCi0JCQlzd2l0Y2ggKHJlZyAmIDB4ZmYpIHsKLQkJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCi0JCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbCwgMSwgdmFsdWUgJiAweGZmKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1MzoJLyogSFlTVCAqLwotCQkJCWkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2wsIDIsIHN3YWIxNih2YWx1ZSkpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDU1OgkvKiBPVkVSICovCi0JCQkJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbCwgMywgc3dhYjE2KHZhbHVlKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCS8qIHN3aXRjaCB0byBzdWJjbGllbnQgKi8KKwkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKKwkJLyogY29udmVydCBmcm9tIElTQSB0byBMTTc1IEkyQyBhZGRyZXNzZXMgKi8KKwkJc3dpdGNoIChyZWcgJiAweGZmKSB7CisJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsLCAxLCB2YWx1ZSAmIDB4ZmYpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MzoJLyogSFlTVCAqLworCQkJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbCwgMiwgc3dhYjE2KHZhbHVlKSk7CisJCQlicmVhazsKKwkJY2FzZSAweDU1OgkvKiBPVkVSICovCisJCQlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsLCAzLCBzd2FiMTYodmFsdWUpKTsKKwkJCWJyZWFrOwogCQl9Ci0JCWlmIChiYW5rID4gMikKLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoYmFuayA+IDIpCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjc4LDcgKzE0MjcsNyBAQAogc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC0xNzc1LDggKzE1MjQsNyBAQAogCQkJCQkJVzgzNzgxRF9SRUdfQUxBUk0yKSA8PCA4KTsKIAkJfQogCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIpOwotCQlkYXRhLT5iZWVwX2VuYWJsZSA9IGkgPj4gNzsKLQkJZGF0YS0+YmVlcF9tYXNrID0gKChpICYgMHg3ZikgPDwgOCkgKworCQlkYXRhLT5iZWVwX21hc2sgPSAoaSA8PCA4KSArCiAJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSk7CiAJCWlmICgoZGF0YS0+dHlwZSAhPSB3ODM3ODFkKSAmJiAoZGF0YS0+dHlwZSAhPSBhczk5MTI3ZikpIHsKIAkJCWRhdGEtPmJlZXBfbWFzayB8PQpAQCAtMTc5Miw2ICsxNTQwLDI3NSBAQAogCXJldHVybiBkYXRhOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdzgzNzgxZF9pZHNbXSA9IHsKKwl7ICJ3ODM3ODFkIiwgdzgzNzgxZCwgfSwKKwl7ICJ3ODM3ODJkIiwgdzgzNzgyZCwgfSwKKwl7ICJ3ODM3ODNzIiwgdzgzNzgzcywgfSwKKwl7ICJhczk5MTI3ZiIsIGFzOTkxMjdmIH0sCisJeyAvKiBMSVNUIEVORCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHc4Mzc4MWRfaWRzKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4Mzc4MWRfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidzgzNzgxZCIsCisJfSwKKwkucHJvYmUJCT0gdzgzNzgxZF9wcm9iZSwKKwkucmVtb3ZlCQk9IHc4Mzc4MWRfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHc4Mzc4MWRfaWRzLAorCS5kZXRlY3QJCT0gdzgzNzgxZF9kZXRlY3QsCisJLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCit9OworCisvKgorICogSVNBIHJlbGF0ZWQgY29kZQorICovCisjaWZkZWYgQ09ORklHX0lTQQorCisvKiBJU0EgZGV2aWNlLCBpZiBmb3VuZCAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzcyA9IDB4MjkwOworCisvKiBJMkMgZGV2aWNlcyBnZXQgdGhpcyBuYW1lIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5LCBidXQgZm9yIElTQSBkZXZpY2VzCisgICB3ZSBtdXN0IGNyZWF0ZSBpdCBieSBvdXJzZWx2ZXMuICovCitzdGF0aWMgc3NpemVfdAorc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgdzgzNzgxZF9kYXRhICp3ODM3ODFkX2RhdGFfaWZfaXNhKHZvaWQpCit7CisJcmV0dXJuIHBkZXYgPyBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSA6IE5VTEw7Cit9CisKKy8qIFJldHVybnMgMSBpZiB0aGUgSTJDIGNoaXAgYXBwZWFycyB0byBiZSBhbiBhbGlhcyBvZiB0aGUgSVNBIGNoaXAgKi8KK3N0YXRpYyBpbnQgdzgzNzgxZF9hbGlhc19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY2hpcGlkKQoreworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmlzYTsKKwlpbnQgaTsKKworCWlmICghcGRldikJLyogTm8gSVNBIGNoaXAgKi8KKwkJcmV0dXJuIDA7CisKKwlpc2EgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBXODM3ODFEX1JFR19JMkNfQUREUikgIT0gY2xpZW50LT5hZGRyKQorCQlyZXR1cm4gMDsJLyogQWRkcmVzcyBkb2Vzbid0IG1hdGNoICovCisJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIFc4Mzc4MURfUkVHX1dDSElQSUQpICE9IGNoaXBpZCkKKwkJcmV0dXJuIDA7CS8qIENoaXAgdHlwZSBkb2Vzbid0IG1hdGNoICovCisKKwkvKiBXZSBjb21wYXJlIGFsbCB0aGUgbGltaXQgcmVnaXN0ZXJzLCB0aGUgY29uZmlnIHJlZ2lzdGVyIGFuZCB0aGUKKwkgKiBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAweDJiOyBpIDw9IDB4M2Q7IGkrKykgeworCQlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlKGlzYSwgaSkgIT0KKwkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGkpKQorCQkJcmV0dXJuIDA7CisJfQorCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBXODM3ODFEX1JFR19DT05GSUcpICE9CisJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0NPTkZJRykpCisJCXJldHVybiAwOworCWZvciAoaSA9IDB4NDM7IGkgPD0gMHg0NjsgaSsrKSB7CisJCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBpKSAhPQorCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordzgzNzgxZF9yZWFkX3ZhbHVlX2lzYShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCWludCB3b3JkX3NpemVkLCByZXM7CisKKwl3b3JkX3NpemVkID0gKCgocmVnICYgMHhmZjAwKSA9PSAweDEwMCkKKwkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKKwkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUwKQorCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1MykKKwkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTUpKTsKKwlpZiAocmVnICYgMHhmZjAwKSB7CisJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcChyZWcgPj4gOCwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCX0KKwlvdXRiX3AocmVnICYgMHhmZiwgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJcmVzID0gaW5iX3AoZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJaWYgKHdvcmRfc2l6ZWQpIHsKKwkJb3V0Yl9wKChyZWcgJiAweGZmKSArIDEsCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJcmVzID0KKwkJICAgIChyZXMgPDwgOCkgKyBpbmJfcChkYXRhLT5pc2FfYWRkciArCisJCQkJICAgICAgIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9CisJaWYgKHJlZyAmIDB4ZmYwMCkgeworCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCQlvdXRiX3AoMCwgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit3ODM3ODFkX3dyaXRlX3ZhbHVlX2lzYShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJaW50IHdvcmRfc2l6ZWQ7CisKKwl3b3JkX3NpemVkID0gKCgocmVnICYgMHhmZjAwKSA9PSAweDEwMCkKKwkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKKwkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUzKQorCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1NSkpOworCWlmIChyZWcgJiAweGZmMDApIHsKKwkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZyA+PiA4LAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJfQorCW91dGJfcChyZWcgJiAweGZmLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwlpZiAod29yZF9zaXplZCkgeworCQlvdXRiX3AodmFsdWUgPj4gOCwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCQlvdXRiX3AoKHJlZyAmIDB4ZmYpICsgMSwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCX0KKwlvdXRiX3AodmFsdWUgJiAweGZmLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwlpZiAocmVnICYgMHhmZjAwKSB7CisJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcCgwLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9Cit9CisKKy8qIFRoZSBTTUJ1cyBsb2NrcyBpdHNlbGYsIHVzdWFsbHksIGJ1dCBub3RoaW5nIG1heSBhY2Nlc3MgdGhlIFdpbmJvbmQgYmV0d2VlbgorICAgYmFuayBzd2l0Y2hlcy4gSVNBIGFjY2VzcyBtdXN0IGFsd2F5cyBiZSBsb2NrZWQgZXhwbGljaXRseSEKKyAgIFdlIGlnbm9yZSB0aGUgVzgzNzgxRCBCVVNZIGZsYWcgYXQgdGhpcyBtb21lbnQgLSBpdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcywKKyAgIHdvdWxkIHNsb3cgZG93biB0aGUgVzgzNzgxRCBhY2Nlc3MgYW5kIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LgorICAgVGhlcmUgYXJlIHNvbWUgdWdseSB0eXBlY2FzdHMgaGVyZSwgYnV0IHRoZSBnb29kIG5ld3MgaXMgLSB0aGV5IHNob3VsZAorICAgbm93aGVyZSBlbHNlIGJlIG5lY2Vzc2FyeSEgKi8KK3N0YXRpYyBpbnQKK3c4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWlmIChjbGllbnQpCisJCXJlcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZV9pMmMoZGF0YSwgcmVnKTsKKwllbHNlCisJCXJlcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZV9pc2EoZGF0YSwgcmVnKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfd3JpdGVfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoY2xpZW50KQorCQl3ODM3ODFkX3dyaXRlX3ZhbHVlX2kyYyhkYXRhLCByZWcsIHZhbHVlKTsKKwllbHNlCisJCXc4Mzc4MWRfd3JpdGVfdmFsdWVfaXNhKGRhdGEsIHJlZywgdmFsdWUpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit3ODM3ODFkX2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBlcnIsIHJlZzsKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMiwKKwkJCSAgICAidzgzNzgxZCIpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBleGl0OworCX0KKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzgzNzgxZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbjsKKwl9CisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CisJZGF0YS0+aXNhX2FkZHIgPSByZXMtPnN0YXJ0OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCisJcmVnID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1dDSElQSUQpOworCXN3aXRjaCAocmVnKSB7CisJY2FzZSAweDMwOgorCQlkYXRhLT50eXBlID0gdzgzNzgyZDsKKwkJZGF0YS0+bmFtZSA9ICJ3ODM3ODJkIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YS0+dHlwZSA9IHc4Mzc4MWQ7CisJCWRhdGEtPm5hbWUgPSAidzgzNzgxZCI7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgVzgzNzgxRCBjaGlwICovCisJdzgzNzgxZF9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKKworCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJZXJyID0gdzgzNzgxZF9jcmVhdGVfZmlsZXMoJnBkZXYtPmRldiwgZGF0YS0+dHlwZSwgMSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCXJldHVybiAwOworCisgZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlrZnJlZShkYXRhKTsKKyBleGl0X3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7CisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAordzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQsIDIpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHc4Mzc4MWRfaXNhX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAidzgzNzgxZCIsCisJfSwKKwkucHJvYmUgPSB3ODM3ODFkX2lzYV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodzgzNzgxZF9pc2FfcmVtb3ZlKSwKK307CisKIC8qIHJldHVybiAxIGlmIGEgc3VwcG9ydGVkIGNoaXAgaXMgZm91bmQsIDAgb3RoZXJ3aXNlICovCiBzdGF0aWMgaW50IF9faW5pdAogdzgzNzgxZF9pc2FfZm91bmQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKQEAgLTE5MjgsMTggKzE5NDUsMTQgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQKLXNlbnNvcnNfdzgzNzgxZF9pbml0KHZvaWQpCit3ODM3ODFkX2lzYV9yZWdpc3Rlcih2b2lkKQogewogCWludCByZXM7CiAKLQlyZXMgPSBpMmNfYWRkX2RyaXZlcigmdzgzNzgxZF9kcml2ZXIpOwotCWlmIChyZXMpCi0JCWdvdG8gZXhpdDsKLQogCWlmICh3ODM3ODFkX2lzYV9mb3VuZChpc2FfYWRkcmVzcykpIHsKIAkJcmVzID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3ODM3ODFkX2lzYV9kcml2ZXIpOwogCQlpZiAocmVzKQotCQkJZ290byBleGl0X3VucmVnX2kyY19kcml2ZXI7CisJCQlnb3RvIGV4aXQ7CiAKIAkJLyogU2V0cyBnbG9iYWwgcGRldiBhcyBhIHNpZGUgZWZmZWN0ICovCiAJCXJlcyA9IHc4Mzc4MWRfaXNhX2RldmljZV9hZGQoaXNhX2FkZHJlc3MpOwpAQCAtMTk0OSwxMCArMTk2Miw4NiBAQAogCiAJcmV0dXJuIDA7CiAKLSBleGl0X3VucmVnX2lzYV9kcml2ZXI6CitleGl0X3VucmVnX2lzYV9kcml2ZXI6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnc4Mzc4MWRfaXNhX2RyaXZlcik7Ci0gZXhpdF91bnJlZ19pMmNfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CitleGl0OgorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordzgzNzgxZF9pc2FfdW5yZWdpc3Rlcih2b2lkKQoreworCWlmIChwZGV2KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKKwl9Cit9CisjZWxzZSAvKiAhQ09ORklHX0lTQSAqLworCitzdGF0aWMgc3RydWN0IHc4Mzc4MWRfZGF0YSAqdzgzNzgxZF9kYXRhX2lmX2lzYSh2b2lkKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit3ODM3ODFkX2FsaWFzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjaGlwaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCWludCByZXM7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXMgPSB3ODM3ODFkX3JlYWRfdmFsdWVfaTJjKGRhdGEsIHJlZyk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfd3JpdGVfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQoreworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCXc4Mzc4MWRfd3JpdGVfdmFsdWVfaTJjKGRhdGEsIHJlZywgdmFsdWUpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQKK3c4Mzc4MWRfaXNhX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordzgzNzgxZF9pc2FfdW5yZWdpc3Rlcih2b2lkKQoreworfQorI2VuZGlmIC8qIENPTkZJR19JU0EgKi8KKworc3RhdGljIGludCBfX2luaXQKK3NlbnNvcnNfdzgzNzgxZF9pbml0KHZvaWQpCit7CisJaW50IHJlczsKKworCS8qIFdlIHJlZ2lzdGVyIHRoZSBJU0EgZGV2aWNlIGZpcnN0LCBzbyB0aGF0IHdlIGNhbiBza2lwIHRoZQorCSAqIHJlZ2lzdHJhdGlvbiBvZiBhbiBJMkMgaW50ZXJmYWNlIHRvIHRoZSBzYW1lIGRldmljZS4gKi8KKwlyZXMgPSB3ODM3ODFkX2lzYV9yZWdpc3RlcigpOworCWlmIChyZXMpCisJCWdvdG8gZXhpdDsKKworCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CisJaWYgKHJlcykKKwkJZ290byBleGl0X3VucmVnX2lzYTsKKworCXJldHVybiAwOworCisgZXhpdF91bnJlZ19pc2E6CisJdzgzNzgxZF9pc2FfdW5yZWdpc3RlcigpOwogIGV4aXQ6CiAJcmV0dXJuIHJlczsKIH0KQEAgLTE5NjAsMTAgKzIwNDksNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBzZW5zb3JzX3c4Mzc4MWRfZXhpdCh2b2lkKQogewotCWlmIChwZGV2KSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKLQl9CisJdzgzNzgxZF9pc2FfdW5yZWdpc3RlcigpOwogCWkyY19kZWxfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTFkLmMKaW5kZXggZGUyMTE0Mi4uNTc2OGRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTFkLmMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBTdXBwb3J0cyBmb2xsb3dpbmcgY2hpcHM6CiAKICAgICBDaGlwCSN2aW4JI2ZhbmluCSNwd20JI3RlbXAJd2NoaXBpZAl2ZW5kaWQJaTJjCUlTQQotICAgIHc4Mzc5MWQJMTAJNQkzCTMJMHg3MQkweDVjYTMJeWVzCW5vCisgICAgdzgzNzkxZAkxMAk1CTUJMwkweDcxCTB4NWNhMwl5ZXMJbm8KIAogICAgIFRoZSB3ODM3OTFkIGNoaXAgYXBwZWFycyB0byBiZSBwYXJ0IHdheSBiZXR3ZWVuIHRoZSA4Mzc4MWQgYW5kIHRoZQogICAgIDgzNzkyZC4gVGh1cywgdGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBib3RoIHRoZSB3ODM3OTJkLmMgYW5kCkBAIC00NSw2ICs0NSw3IEBACiAjZGVmaW5lIE5VTUJFUl9PRl9WSU4JCTEwCiAjZGVmaW5lIE5VTUJFUl9PRl9GQU5JTgkJNQogI2RlZmluZSBOVU1CRVJfT0ZfVEVNUElOCTMKKyNkZWZpbmUgTlVNQkVSX09GX1BXTQkJNQogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKQEAgLTExNiw2ICsxMTcsMjUgQEAKIAkweEJELAkJCS8qIEZBTiA1IENvdW50IExvdyBMaW1pdCBpbiBEYXRhU2hlZXQgKi8KIH07CiAKK3N0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19QV01bTlVNQkVSX09GX1BXTV0gPSB7CisJMHg4MSwJCQkvKiBQV00gMSBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworCTB4ODMsCQkJLyogUFdNIDIgZHV0eSBjeWNsZSByZWdpc3RlciBpbiBEYXRhU2hlZXQgKi8KKwkweDk0LAkJCS8qIFBXTSAzIGR1dHkgY3ljbGUgcmVnaXN0ZXIgaW4gRGF0YVNoZWV0ICovCisJMHhBMCwJCQkvKiBQV00gNCBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworCTB4QTEsCQkJLyogUFdNIDUgZHV0eSBjeWNsZSByZWdpc3RlciBpbiBEYXRhU2hlZXQgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19URU1QX1RBUkdFVFszXSA9IHsKKwkweDg1LAkJCS8qIFBXTSAxIHRhcmdldCB0ZW1wZXJhdHVyZSBmb3IgdGVtcCAxICovCisJMHg4NiwJCQkvKiBQV00gMiB0YXJnZXQgdGVtcGVyYXR1cmUgZm9yIHRlbXAgMiAqLworCTB4OTYsCQkJLyogUFdNIDMgdGFyZ2V0IHRlbXBlcmF0dXJlIGZvciB0ZW1wIDMgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19URU1QX1RPTFsyXSA9IHsKKwkweDg3LAkJCS8qIFBXTSAxLzIgdGVtcGVyYXR1cmUgdG9sZXJhbmNlICovCisJMHg5NywJCQkvKiBQV00gMyB0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgKi8KK307CisKIHN0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19GQU5fQ0ZHWzJdID0gewogCTB4ODQsCQkJLyogRkFOIDEvMiBjb25maWd1cmF0aW9uICovCiAJMHg5NSwJCQkvKiBGQU4gMyBjb25maWd1cmF0aW9uICovCkBAIC0xNjAsNiArMTgwLDcgQEAKIAkweEEzLAkJCS8qIEJFRVAgQ29udHJvbCBSZWdpc3RlciAzICovCiB9OwogCisjZGVmaW5lIFc4Mzc5MURfUkVHX0dQSU8JCTB4MTUKICNkZWZpbmUgVzgzNzkxRF9SRUdfQ09ORklHCQkweDQwCiAjZGVmaW5lIFc4Mzc5MURfUkVHX1ZJRF9GQU5ESVYJCTB4NDcKICNkZWZpbmUgVzgzNzkxRF9SRUdfRElEX1ZJRDQJCTB4NDkKQEAgLTIyNCw2ICsyNDUsMTUgQEAKIAkJCQkgKHZhbCkgPCAwID8gKCh2YWwpIC0gMjUwKSAvIDUwMCAqIDEyOCA6IFwKIAkJCQkgKCh2YWwpICsgMjUwKSAvIDUwMCAqIDEyOCkKIAorLyogZm9yIHRoZXJtYWwgY3J1aXNlIHRhcmdldCB0ZW1wLCA3LWJpdHMsIExTQiA9IDEgZGVncmVlIENlbHNpdXMgKi8KKyNkZWZpbmUgVEFSR0VUX1RFTVBfVE9fUkVHKHZhbCkJCSgodmFsKSA8IDAgPyAwIDogXAorCQkJCQkodmFsKSA+PSAxMjcwMDAgPyAxMjcgOiBcCisJCQkJCSgodmFsKSArIDUwMCkgLyAxMDAwKQorCisvKiBmb3IgdGhlcm1hbCBjcnVpc2UgdGVtcCB0b2xlcmFuY2UsIDQtYml0cywgTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cyAqLworI2RlZmluZSBUT0xfVEVNUF9UT19SRUcodmFsKQkJKCh2YWwpIDwgMCA/IDAgOiBcCisJCQkJCSh2YWwpID49IDE1MDAwID8gMTUgOiBcCisJCQkJCSgodmFsKSArIDUwMCkgLyAxMDAwKQogCiAjZGVmaW5lIEJFRVBfTUFTS19UT19SRUcodmFsKQkJKCh2YWwpICYgMHhmZmZmZmYpCiAjZGVmaW5lIEJFRVBfTUFTS19GUk9NX1JFRyh2YWwpCQkoKHZhbCkgJiAweGZmZmZmZikKQEAgLTI3NSw2ICszMDUsMTQgQEAKIAkJCQkgICB0d28gc2Vuc29ycyB3aXRoIHRocmVlIHZhbHVlcwogCQkJCSAgIChjdXIsIG92ZXIsIGh5c3QpICAqLwogCisJLyogUFdNcyAqLworCXU4IHB3bVs1XTsJCS8qIHB3bSBkdXR5IGN5Y2xlICovCisJdTggcHdtX2VuYWJsZVszXTsJLyogcHdtIGVuYWJsZSBzdGF0dXMgZm9yIGZhbiAxLTMKKwkJCQkJKGZhbiA0LTUgb25seSBzdXBwb3J0IG1hbnVhbCBtb2RlKSAqLworCisJdTggdGVtcF90YXJnZXRbM107CS8qIHB3bSAxLTMgdGFyZ2V0IHRlbXBlcmF0dXJlICovCisJdTggdGVtcF90b2xlcmFuY2VbM107CS8qIHB3bSAxLTMgdGVtcGVyYXR1cmUgdG9sZXJhbmNlICovCisKIAkvKiBNaXNjICovCiAJdTMyIGFsYXJtczsJCS8qIHJlYWx0aW1lIHN0YXR1cyByZWdpc3RlciBlbmNvZGluZyxjb21iaW5lZCAqLwogCXU4IGJlZXBfZW5hYmxlOwkJLyogR2xvYmFsIGJlZXAgZW5hYmxlICovCkBAIC02NTIsNiArNjkwLDIxNyBAQAogCVNFTlNPUl9BVFRSKGZhbjVfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIyKSwKIH07CiAKKy8qIHJlYWQvd3JpdGUgUFdNcyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5wd21bbnJdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5wd21bbnJdID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDI1NSk7CisJdzgzNzkxZF93cml0ZShjbGllbnQsIFc4Mzc5MURfUkVHX1BXTVtucl0sIGRhdGEtPnB3bVtucl0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfcHdtW10gPSB7CisJU0VOU09SX0FUVFIocHdtMSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bSwgc3RvcmVfcHdtLCAwKSwKKwlTRU5TT1JfQVRUUihwd20yLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDEpLAorCVNFTlNPUl9BVFRSKHB3bTMsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd20sIHN0b3JlX3B3bSwgMiksCisJU0VOU09SX0FUVFIocHdtNCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bSwgc3RvcmVfcHdtLCAzKSwKKwlTRU5TT1JfQVRUUihwd201LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDQpLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5wd21fZW5hYmxlW25yXSArIDEpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd21lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTggcmVnX2NmZ190bXA7CisJdTggcmVnX2lkeCA9IDA7CisJdTggdmFsX3NoaWZ0ID0gMDsKKwl1OCBrZWVwX21hc2sgPSAwOworCisJaW50IHJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCisJaWYgKHJldCB8fCB2YWwgPCAxIHx8IHZhbCA+IDMpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bV9lbmFibGVbbnJdID0gdmFsIC0gMTsKKwlzd2l0Y2ggKG5yKSB7CisJY2FzZSAwOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gMjsKKwkJa2VlcF9tYXNrID0gMHhmMzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gNDsKKwkJa2VlcF9tYXNrID0gMHhjZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZWdfaWR4ID0gMTsKKwkJdmFsX3NoaWZ0ID0gMjsKKwkJa2VlcF9tYXNrID0gMHhmMzsKKwkJYnJlYWs7CisJfQorCisJcmVnX2NmZ190bXAgPSB3ODM3OTFkX3JlYWQoY2xpZW50LCBXODM3OTFEX1JFR19GQU5fQ0ZHW3JlZ19pZHhdKTsKKwlyZWdfY2ZnX3RtcCA9IChyZWdfY2ZnX3RtcCAmIGtlZXBfbWFzaykgfAorCQkJCQlkYXRhLT5wd21fZW5hYmxlW25yXSA8PCB2YWxfc2hpZnQ7CisKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfRkFOX0NGR1tyZWdfaWR4XSwgcmVnX2NmZ190bXApOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfcHdtZW5hYmxlW10gPSB7CisJU0VOU09SX0FUVFIocHdtMV9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd21lbmFibGUsIHN0b3JlX3B3bWVuYWJsZSwgMCksCisJU0VOU09SX0FUVFIocHdtMl9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd21lbmFibGUsIHN0b3JlX3B3bWVuYWJsZSwgMSksCisJU0VOU09SX0FUVFIocHdtM19lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd21lbmFibGUsIHN0b3JlX3B3bWVuYWJsZSwgMiksCit9OworCisvKiBGb3IgU21hcnQgRmFuIEkgLyBUaGVybWFsIENydWlzZSAqLworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX3RhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcF90YXJnZXRbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3RlbXBfdGFyZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsOworCXU4IHRhcmdldF9tYXNrOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT50ZW1wX3RhcmdldFtucl0gPSBUQVJHRVRfVEVNUF9UT19SRUcodmFsKTsKKwl0YXJnZXRfbWFzayA9IHc4Mzc5MWRfcmVhZChjbGllbnQsCisJCQkJVzgzNzkxRF9SRUdfVEVNUF9UQVJHRVRbbnJdKSAmIDB4ODA7CisJdzgzNzkxZF93cml0ZShjbGllbnQsIFc4Mzc5MURfUkVHX1RFTVBfVEFSR0VUW25yXSwKKwkJCQlkYXRhLT50ZW1wX3RhcmdldFtucl0gfCB0YXJnZXRfbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX3RhcmdldFtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX3RhcmdldCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdGFyZ2V0LCBzdG9yZV90ZW1wX3RhcmdldCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfdGFyZ2V0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90YXJnZXQsIHN0b3JlX3RlbXBfdGFyZ2V0LCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM190YXJnZXQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RhcmdldCwgc3RvcmVfdGVtcF90YXJnZXQsIDIpLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX3RvbGVyYW5jZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcF90b2xlcmFuY2VbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3RlbXBfdG9sZXJhbmNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsOworCXU4IHRhcmdldF9tYXNrOworCXU4IHJlZ19pZHggPSAwOworCXU4IHZhbF9zaGlmdCA9IDA7CisJdTgga2VlcF9tYXNrID0gMDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG5yKSB7CisJY2FzZSAwOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gMDsKKwkJa2VlcF9tYXNrID0gMHhmMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gNDsKKwkJa2VlcF9tYXNrID0gMHgwZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZWdfaWR4ID0gMTsKKwkJdmFsX3NoaWZ0ID0gMDsKKwkJa2VlcF9tYXNrID0gMHhmMDsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBfdG9sZXJhbmNlW25yXSA9IFRPTF9URU1QX1RPX1JFRyh2YWwpOworCXRhcmdldF9tYXNrID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCVc4Mzc5MURfUkVHX1RFTVBfVE9MW3JlZ19pZHhdKSAmIGtlZXBfbWFzazsKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfVEVNUF9UT0xbcmVnX2lkeF0sCisJCQkoZGF0YS0+dGVtcF90b2xlcmFuY2VbbnJdIDw8IHZhbF9zaGlmdCkgfCB0YXJnZXRfbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX3RvbGVyYW5jZVtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdG9sZXJhbmNlLCBzdG9yZV90ZW1wX3RvbGVyYW5jZSwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfdG9sZXJhbmNlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90b2xlcmFuY2UsIHN0b3JlX3RlbXBfdG9sZXJhbmNlLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM190b2xlcmFuY2UsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RvbGVyYW5jZSwgc3RvcmVfdGVtcF90b2xlcmFuY2UsIDIpLAorfTsKKwogLyogcmVhZC93cml0ZSB0aGUgdGVtcGVyYXR1cmUxLCBpbmNsdWRlcyBtZWFzdXJlZCB2YWx1ZSBhbmQgbGltaXRzICovCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAxKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCiAJCQkJY2hhciAqYnVmKQpAQCAtOTA4LDggKzExNTcsNiBAQAogCUZBTl9VTklUX0FUVFJTKDApLAogCUZBTl9VTklUX0FUVFJTKDEpLAogCUZBTl9VTklUX0FUVFJTKDIpLAotCUZBTl9VTklUX0FUVFJTKDMpLAotCUZBTl9VTklUX0FUVFJTKDQpLAogCVRFTVBfVU5JVF9BVFRSUygwKSwKIAlURU1QX1VOSVRfQVRUUlMoMSksCiAJVEVNUF9VTklUX0FUVFJTKDIpLApAQCAtOTE4LDYgKzExNjUsMTggQEAKIAkmc2RhX2JlZXBfY3RybFsxXS5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAogCSZkZXZfYXR0cl92cm0uYXR0ciwKKwkmc2RhX3B3bVswXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtWzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21bMl0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3B3bWVuYWJsZVswXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtZW5hYmxlWzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21lbmFibGVbMl0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdGFyZ2V0WzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RhcmdldFsxXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90YXJnZXRbMl0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdG9sZXJhbmNlWzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RvbGVyYW5jZVsxXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90b2xlcmFuY2VbMl0uZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC05MjUsNiArMTE4NCwyMCBAQAogCS5hdHRycyA9IHc4Mzc5MWRfYXR0cmlidXRlcywKIH07CiAKKy8qIFNlcGFyYXRlIGdyb3VwIG9mIGF0dHJpYnV0ZXMgZm9yIGZhbi9wd20gNC01LiBUaGVpciBwaW5zIGNhbiBhbHNvIGJlCisgICBpbiB1c2UgZm9yIEdQSU8gaW4gd2hpY2ggY2FzZSB0aGVpciBzeXNmcy1pbnRlcmZhY2Ugc2hvdWxkIG5vdCBiZSBtYWRlCisgICBhdmFpbGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp3ODM3OTFkX2F0dHJpYnV0ZXNfZmFucHdtNDVbXSA9IHsKKwlGQU5fVU5JVF9BVFRSUygzKSwKKwlGQU5fVU5JVF9BVFRSUyg0KSwKKwkmc2RhX3B3bVszXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtWzRdLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdzgzNzkxZF9ncm91cF9mYW5wd200NSA9IHsKKwkuYXR0cnMgPSB3ODM3OTFkX2F0dHJpYnV0ZXNfZmFucHdtNDUsCit9OwogCiBzdGF0aWMgaW50IHc4Mzc5MWRfZGV0ZWN0X3N1YmNsaWVudHMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKQEAgLTEwNTYsNiArMTMyOSw3IEBACiAJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAJaW50IGksIGVycjsKKwl1OCBoYXNfZmFucHdtNDU7CiAKICNpZmRlZiBERUJVRwogCWludCB2YWwxOwpAQCAtMTA5MCwxNSArMTM2NCwyNyBAQAogCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzkxZF9ncm91cCkpKQogCQlnb3RvIGVycm9yMzsKIAorCS8qIENoZWNrIGlmIHBpbnMgb2YgZmFuL3B3bSA0LTUgYXJlIGluIHVzZSBhcyBHUElPICovCisJaGFzX2ZhbnB3bTQ1ID0gdzgzNzkxZF9yZWFkKGNsaWVudCwgVzgzNzkxRF9SRUdfR1BJTykgJiAweDEwOworCWlmIChoYXNfZmFucHdtNDUpIHsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAorCQkJCQkgJnc4Mzc5MWRfZ3JvdXBfZmFucHdtNDUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjQ7CisJfQorCiAJLyogRXZlcnl0aGluZyBpcyByZWFkeSwgbm93IHJlZ2lzdGVyIHRoZSB3b3JraW5nIGRldmljZSAqLwogCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkZXYpOwogCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWdvdG8gZXJyb3I0OworCQlnb3RvIGVycm9yNTsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXJyb3I1OgorCWlmIChoYXNfZmFucHdtNDUpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc5MWRfZ3JvdXBfZmFucHdtNDUpOwogZXJyb3I0OgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc5MWRfZ3JvdXApOwogZXJyb3IzOgpAQCAtMTIzNiw2ICsxNTIyLDM2IEBACiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCQlkYXRhLT5mYW5fZGl2W2ldIHw9ICh2YmF0X3JlZyA+PiAoMyArIGkpKSAmIDB4MDQ7CiAKKwkJLyogVXBkYXRlIFBXTSBkdXR5IGN5Y2xlICovCisJCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfUFdNOyBpKyspIHsKKwkJCWRhdGEtPnB3bVtpXSA9ICB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCQkJVzgzNzkxRF9SRUdfUFdNW2ldKTsKKwkJfQorCisJCS8qIFVwZGF0ZSBQV00gZW5hYmxlIHN0YXR1cyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlyZWdfYXJyYXlfdG1wW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCQkJCVc4Mzc5MURfUkVHX0ZBTl9DRkdbaV0pOworCQl9CisJCWRhdGEtPnB3bV9lbmFibGVbMF0gPSAocmVnX2FycmF5X3RtcFswXSA+PiAyKSAmIDB4MDM7CisJCWRhdGEtPnB3bV9lbmFibGVbMV0gPSAocmVnX2FycmF5X3RtcFswXSA+PiA0KSAmIDB4MDM7CisJCWRhdGEtPnB3bV9lbmFibGVbMl0gPSAocmVnX2FycmF5X3RtcFsxXSA+PiAyKSAmIDB4MDM7CisKKwkJLyogVXBkYXRlIFBXTSB0YXJnZXQgdGVtcGVyYXR1cmUgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJZGF0YS0+dGVtcF90YXJnZXRbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCVc4Mzc5MURfUkVHX1RFTVBfVEFSR0VUW2ldKSAmIDB4N2Y7CisJCX0KKworCQkvKiBVcGRhdGUgUFdNIHRlbXBlcmF0dXJlIHRvbGVyYW5jZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlyZWdfYXJyYXlfdG1wW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCQkJVzgzNzkxRF9SRUdfVEVNUF9UT0xbaV0pOworCQl9CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzBdID0gcmVnX2FycmF5X3RtcFswXSAmIDB4MGY7CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzFdID0gKHJlZ19hcnJheV90bXBbMF0gPj4gNCkgJiAweDBmOworCQlkYXRhLT50ZW1wX3RvbGVyYW5jZVsyXSA9IHJlZ19hcnJheV90bXBbMV0gJiAweDBmOworCiAJCS8qIFVwZGF0ZSB0aGUgZmlyc3QgdGVtcGVyYXR1cmUgc2Vuc29yICovCiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJCWRhdGEtPnRlbXAxW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKaW5kZXggMWUzMjhkMTkuLjNlMDE5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkqc3RhdHVzID0gZ2V0X3BjZihhZGFwLCAxKTsKICNpZm5kZWYgU1RVQl9JMkMKIAl3aGlsZSAodGltZW91dC0tICYmICgqc3RhdHVzICYgSTJDX1BDRl9QSU4pKSB7Ci0JCWFkYXAtPndhaXRmb3JwaW4oKTsKKwkJYWRhcC0+d2FpdGZvcnBpbihhZGFwLT5kYXRhKTsKIAkJKnN0YXR1cyA9IGdldF9wY2YoYWRhcCwgMSk7CiAJfQogCWlmICgqc3RhdHVzICYgSTJDX1BDRl9MQUIpIHsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAkKLQlwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IGRldGV0ZWQgYW5kIGluaXRpYWxpemVkIFBDRjg1ODQuXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBQQ0Y4NTg0LlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzMSwxMyArMzMxLDE2IEBACiAJaW50IGk7CiAJaW50IHJldD0wLCB0aW1lb3V0LCBzdGF0dXM7CiAgICAgCisJaWYgKGFkYXAtPnhmZXJfYmVnaW4pCisJCWFkYXAtPnhmZXJfYmVnaW4oYWRhcC0+ZGF0YSk7CiAKIAkvKiBDaGVjayBmb3IgYnVzIGJ1c3kgKi8KIAl0aW1lb3V0ID0gd2FpdF9mb3JfYmIoYWRhcCk7CiAJaWYgKHRpbWVvdXQpIHsKIAkJREVCMihwcmludGsoS0VSTl9FUlIgImkyYy1hbGdvLXBjZi5vOiAiCiAJCSAgICAgICAgICAgICJUaW1lb3V0IHdhaXRpbmcgZm9yIEJCIGluIHBjZl94ZmVyXG4iKTspCi0JCXJldHVybiAtRUlPOworCQlpID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCQogCWZvciAoaSA9IDA7cmV0ID49IDAgJiYgaSA8IG51bTsgaSsrKSB7CkBAIC0zNTksMTIgKzM2MiwxNCBAQAogCQlpZiAodGltZW91dCkgewogCQkJaWYgKHRpbWVvdXQgPT0gLUVJTlRSKSB7CiAJCQkJLyogYXJiaXRyYXRpb24gbG9zdCAqLwotCQkJCXJldHVybiAoLUVJTlRSKTsKKwkJCQlpID0gLUVJTlRSOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJaTJjX3N0b3AoYWRhcCk7CiAJCQlERUIyKHByaW50ayhLRVJOX0VSUiAiaTJjLWFsZ28tcGNmLm86IFRpbWVvdXQgd2FpdGluZyAiCiAJCQkJICAgICJmb3IgUElOKDEpIGluIHBjZl94ZmVyXG4iKTspCi0JCQlyZXR1cm4gKC1FUkVNT1RFSU8pOworCQkJaSA9IC1FUkVNT1RFSU87CisJCQlnb3RvIG91dDsKIAkJfQogICAgIAogI2lmbmRlZiBTVFVCX0kyQwpAQCAtMzcyLDcgKzM3Nyw4IEBACiAJCWlmIChzdGF0dXMgJiBJMkNfUENGX0xSQikgewogCQkJaTJjX3N0b3AoYWRhcCk7CiAJCQlERUIyKHByaW50ayhLRVJOX0VSUiAiaTJjLWFsZ28tcGNmLm86IE5vIExSQigxKSBpbiBwY2ZfeGZlclxuIik7KQotCQkJcmV0dXJuICgtRVJFTU9URUlPKTsKKwkJCWkgPSAtRVJFTU9URUlPOworCQkJZ290byBvdXQ7CiAJCX0KICNlbmRpZgogICAgIApAQCAtNDA0LDYgKzQxMCw5IEBACiAJCX0KIAl9CiAKK291dDoKKwlpZiAoYWRhcC0+eGZlcl9lbmQpCisJCWFkYXAtPnhmZXJfZW5kKGFkYXAtPmRhdGEpOwogCXJldHVybiAoaSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggYWNhZGJjNS4uN2Y5NTkwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTk3LDYgKzk3LDcgQEAKIAkgICAgSUNIOQogCSAgICBUb2xhcGFpCiAJICAgIElDSDEwCisJICAgIFBDSAogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtaTgwMS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCmluZGV4IDFlYTM5MjUuLjQyNGRhZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwpAQCAtMzMyLDEwICszMzIsNiBAQAogCWludCBlcnJvcjsKIAl1OCB0ZW1wOwogCQotCS8qIGRyaXZlcl9kYXRhIG1pZ2h0IGNvbWUgZnJvbSB1c2VyLXNwYWNlLCBzbyBjaGVjayBpdCAqLwotCWlmIChpZC0+ZHJpdmVyX2RhdGEgPj0gQVJSQVlfU0laRShjaGlwbmFtZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGFtZDc1Nl9pb3BvcnQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiT25seSBvbmUgZGV2aWNlIHN1cHBvcnRlZCAiCiAJCSAgICAgICAiKHlvdSBoYXZlIGEgc3RyYW5nZSBtb3RoZXJib2FyZCwgYnR3KVxuIik7CkBAIC00MTIsNyArNDA4LDYgQEAKIAkuaWRfdGFibGUJPSBhbWQ3NTZfaWRzLAogCS5wcm9iZQkJPSBhbWQ3NTZfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhbWQ3NTZfcmVtb3ZlKSwKLQkuZHluaWRzLnVzZV9kcml2ZXJfZGF0YSA9IDEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhbWQ3NTZfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jcG0uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtY3BtLmMKaW5kZXggODE2NGRlMS4uMjI4Zjc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jcG0uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNwbS5jCkBAIC00MjMsNyArNDIzLDYgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImkyYy1jcG0iLAogCS5hbGdvCQk9ICZjcG1faTJjX2FsZ28sCi0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiB8IEkyQ19DTEFTU19TUEQsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjcG1faTJjX3NldHVwKHN0cnVjdCBjcG1faTJjICpjcG0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVsZWt0b3IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCmluZGV4IDdmMzhjMDEuLjBlZDNjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCkBAIC0xMDQsNyArMTA0LDggQEAKIAlyZXR1cm4gKGNsb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgcGNmX2lzYV93YWl0Zm9ycGluKHZvaWQpIHsKK3N0YXRpYyB2b2lkIHBjZl9pc2Ffd2FpdGZvcnBpbih2b2lkICpkYXRhKQorewogCURFRklORV9XQUlUKHdhaXQpOwogCWludCB0aW1lb3V0ID0gMjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCmluZGV4IDEwOThmMjEuLjY0OGFhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQkJCWh5ZHJhX2FkYXAubmFtZSkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQloeWRyYV9iaXRfZGF0YS5kYXRhID0gaW9yZW1hcChiYXNlLCBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOworCWh5ZHJhX2JpdF9kYXRhLmRhdGEgPSBwY2lfaW9yZW1hcF9iYXIoZGV2LCAwKTsKIAlpZiAoaHlkcmFfYml0X2RhdGEuZGF0YSA9PSBOVUxMKSB7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihiYXNlK29mZnNldG9mKHN0cnVjdCBIeWRyYSwgQ2FjaGVQRCksIDQpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggZGM3ZWEzMi4uNTEyM2ViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTQxLDYgKzQxLDcgQEAKICAgVG9sYXBhaSAgICAgICAgICAgICAgIDB4NTAzMiAgICAgMzIgICAgIGhhcmQgICAgIHllcyAgICAgeWVzICAgICB5ZXMKICAgSUNIMTAgICAgICAgICAgICAgICAgIDB4M2EzMCAgICAgMzIgICAgIGhhcmQgICAgIHllcyAgICAgeWVzICAgICB5ZXMKICAgSUNIMTAgICAgICAgICAgICAgICAgIDB4M2E2MCAgICAgMzIgICAgIGhhcmQgICAgIHllcyAgICAgeWVzICAgICB5ZXMKKyAgUENIICAgICAgICAgICAgICAgICAgIDB4M2IzMCAgICAgMzIgICAgIGhhcmQgICAgIHllcyAgICAgeWVzICAgICB5ZXMKIAogICBGZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI6CiAgIFNvZnR3YXJlIFBFQyAgICAgICAgICAgICAgICAgICAgIG5vCkBAIC01NzYsNiArNTc3LDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9UT0xBUEFJXzEpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfNCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF81KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1BDSF9TTUJVUykgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTU5OSw2ICs2MDEsNyBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9UT0xBUEFJXzE6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzQ6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzU6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BDSF9TTUJVUzoKIAkJaTgwMV9mZWF0dXJlcyB8PSBGRUFUVVJFX0kyQ19CTE9DS19SRUFEOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCmluZGV4IDBlN2IxYzYuLjYwY2E5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKQEAgLTI1OSw2ICsyNTksMzUgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJQb3dlck1hYyBpMmMgYnVzICVzIHJlZ2lzdGVyZWRcbiIsIG5hbWUpOworCisJaWYgKCFzdHJuY21wKGJhc2VuYW1lLCAidW5pLW4iLCA1KSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCQljb25zdCB1MzIgKnByb3A7CisJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJCS8qIEluc3RhbnRpYXRlIEkyQyBtb3Rpb24gc2Vuc29yIGlmIHByZXNlbnQgKi8KKwkJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiYWNjZWxlcm9tZXRlciIpOworCQlpZiAobnAgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJBQVBMLGFjY2VsZXJvbWV0ZXJfMSIpICYmCisJCSAgICAocHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpKSkgeworCQkJaW50IGkyY19idXM7CisJCQljb25zdCBjaGFyICp0bXBfYnVzOworCisJCQkvKiBsb29rIGZvciBidXMgZWl0aGVyIHVzaW5nICJyZWciIG9yIGJ5IHBhdGggKi8KKwkJCXRtcF9idXMgPSBzdHJzdHIobnAtPmZ1bGxfbmFtZSwgIi9pMmMtYnVzQCIpOworCQkJaWYgKHRtcF9idXMpCisJCQkJaTJjX2J1cyA9ICoodG1wX2J1cyArIDkpIC0gJzAnOworCQkJZWxzZQorCQkJCWkyY19idXMgPSAoKCpwcm9wKSA+PiA4KSAmIDB4MGY7CisKKwkJCWlmIChwbWFjX2kyY19nZXRfY2hhbm5lbChidXMpID09IGkyY19idXMpIHsKKwkJCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwkJCQlpbmZvLmFkZHIgPSAoKCpwcm9wKSAmIDB4ZmYpID4+IDE7CisJCQkJc3RybGNweShpbmZvLnR5cGUsICJhbXMiLCBJMkNfTkFNRV9TSVpFKTsKKwkJCQlpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJCQl9CisJCX0KKwl9CisKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCmluZGV4IDczZGM1MmUuLjlmMTk0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwpAQCAtMzMyLDEwICszMzIsNiBAQAogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAlpbnQgZXJyb3IgPSAtRU5PREVWOwogCi0JLyogZHJpdmVyX2RhdGEgbWlnaHQgY29tZSBmcm9tIHVzZXItc3BhY2UsIHNvIGNoZWNrIGl0ICovCi0JaWYgKGlkLT5kcml2ZXJfZGF0YSAmIDEgfHwgaWQtPmRyaXZlcl9kYXRhID4gMHhmZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBEZXRlcm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIFNNQnVzIGFyZWFzICovCiAJaWYgKGZvcmNlX2FkZHIpIHsKIAkJdnQ1OTZfc21iYSA9IGZvcmNlX2FkZHIgJiAweGZmZjA7CkBAIC00ODMsNyArNDc5LDYgQEAKIAkubmFtZQkJPSAidnQ1OTZfc21idXMiLAogCS5pZF90YWJsZQk9IHZ0NTk2X2lkcywKIAkucHJvYmUJCT0gdnQ1OTZfcHJvYmUsCi0JLmR5bmlkcy51c2VfZHJpdmVyX2RhdGEgPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX3Z0NTk2X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmluZGV4IDE3MzU2ODIuLjRjMzU3MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpAQCAtMSw2ICsxLDggQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgY2hpcCBkcml2ZXJzIGNvbmZpZ3VyYXRpb24KICMKKyMgKioqIERFUFJFQ0FURUQhIERvIG5vdCBhZGQgbmV3IGVudHJpZXMhIFNlZSBNYWtlZmlsZSAqKioKKyMKIAogbWVudSAiTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0IgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCmluZGV4IGNhNTIwZmEuLjIzZDJhMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCkBAIC0xLDcgKzEsOCBAQAogIwogIyBNYWtlZmlsZSBmb3IgbWlzY2VsbGFuZW91cyBJMkMgY2hpcCBkcml2ZXJzLgogIwotIyBUaGluayB0d2ljZSBiZWZvcmUgeW91IGFkZCBhIG5ldyBkcml2ZXIgdG8gdGhpcyBkaXJlY3RvcnkuCisjIERvIG5vdCBhZGQgbmV3IGRyaXZlcnMgdG8gdGhpcyBkaXJlY3RvcnkhIEl0IGlzIERFUFJFQ0FURUQuCisjCiAjIERldmljZSBkcml2ZXJzIGFyZSBiZXR0ZXIgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgdGhleQogIyBpbXBsZW1lbnQgcmF0aGVyIHRoYW4gdG8gdGhlIGJ1cyB0aGV5IGFyZSBjb25uZWN0ZWQgdG8uIEluIHBhcnRpY3VsYXI6CiAjICogSGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwIGRyaXZlcnMgZ28gdG8gZHJpdmVycy9od21vbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvYXQyNC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvYXQyNC5jCmluZGV4IDJhNGFjYjIuLmQ0Nzc1NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9hdDI0LmMKQEAgLTQ2MCw3ICs0NjAsNiBAQAogCSAqLwogCWF0MjQtPmJpbi5hdHRyLm5hbWUgPSAiZWVwcm9tIjsKIAlhdDI0LT5iaW4uYXR0ci5tb2RlID0gY2hpcC5mbGFncyAmIEFUMjRfRkxBR19JUlVHTyA/IFNfSVJVR08gOiBTX0lSVVNSOwotCWF0MjQtPmJpbi5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJYXQyNC0+YmluLnJlYWQgPSBhdDI0X2Jpbl9yZWFkOwogCWF0MjQtPmJpbi5zaXplID0gY2hpcC5ieXRlX2xlbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9kczE2ODIuYwppbmRleCAyM2JlNGQ0Li5mM2VlNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9kczE2ODIuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9kczE2ODIuYwpAQCAtMTkwLDcgKzE5MCw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gImVlcHJvbSIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBEUzE2ODJfRUVQUk9NX1NJWkUsCiAJLnJlYWQgPSBkczE2ODJfZWVwcm9tX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jIGIvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYwppbmRleCAxNzYxMjZkLi40YjM2NGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMKQEAgLTgzMiw1MiArODMyLDUyIEBACiAKIHN0YXRpYyB2b2lkIG1lbmVsYXVzX3RvX3RpbWUoY2hhciAqcmVncywgc3RydWN0IHJ0Y190aW1lICp0KQogewotCXQtPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1swXSk7Ci0JdC0+dG1fbWluID0gQkNEMkJJTihyZWdzWzFdKTsKKwl0LT50bV9zZWMgPSBiY2QyYmluKHJlZ3NbMF0pOworCXQtPnRtX21pbiA9IGJjZDJiaW4ocmVnc1sxXSk7CiAJaWYgKHRoZV9tZW5lbGF1cy0+cnRjX2NvbnRyb2wgJiBSVENfQ1RSTF9NT0RFMTIpIHsKLQkJdC0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1syXSAmIDB4MWYpIC0gMTsKKwkJdC0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1syXSAmIDB4MWYpIC0gMTsKIAkJaWYgKHJlZ3NbMl0gJiBSVENfSFJfUE0pCiAJCQl0LT50bV9ob3VyICs9IDEyOwogCX0gZWxzZQotCQl0LT50bV9ob3VyID0gQkNEMkJJTihyZWdzWzJdICYgMHgzZik7Ci0JdC0+dG1fbWRheSA9IEJDRDJCSU4ocmVnc1szXSk7Ci0JdC0+dG1fbW9uID0gQkNEMkJJTihyZWdzWzRdKSAtIDE7Ci0JdC0+dG1feWVhciA9IEJDRDJCSU4ocmVnc1s1XSkgKyAxMDA7CisJCXQtPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3NbMl0gJiAweDNmKTsKKwl0LT50bV9tZGF5ID0gYmNkMmJpbihyZWdzWzNdKTsKKwl0LT50bV9tb24gPSBiY2QyYmluKHJlZ3NbNF0pIC0gMTsKKwl0LT50bV95ZWFyID0gYmNkMmJpbihyZWdzWzVdKSArIDEwMDsKIH0KIAogc3RhdGljIGludCB0aW1lX3RvX21lbmVsYXVzKHN0cnVjdCBydGNfdGltZSAqdCwgaW50IHJlZ251bSkKIHsKIAlpbnQJaG91ciwgc3RhdHVzOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX3NlYykpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV9zZWMpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX21pbikpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV9taW4pKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCiAJaWYgKHRoZV9tZW5lbGF1cy0+cnRjX2NvbnRyb2wgJiBSVENfQ1RSTF9NT0RFMTIpIHsKIAkJaG91ciA9IHQtPnRtX2hvdXIgKyAxOwogCQlpZiAoaG91ciA+IDEyKQotCQkJaG91ciA9IFJUQ19IUl9QTSB8IEJJTjJCQ0QoaG91ciAtIDEyKTsKKwkJCWhvdXIgPSBSVENfSFJfUE0gfCBiaW4yYmNkKGhvdXIgLSAxMik7CiAJCWVsc2UKLQkJCWhvdXIgPSBCSU4yQkNEKGhvdXIpOworCQkJaG91ciA9IGJpbjJiY2QoaG91cik7CiAJfSBlbHNlCi0JCWhvdXIgPSBCSU4yQkNEKHQtPnRtX2hvdXIpOworCQlob3VyID0gYmluMmJjZCh0LT50bV9ob3VyKTsKIAlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGhvdXIpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1fbWRheSkpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV9tZGF5KSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgQklOMkJDRCh0LT50bV9tb24gKyAxKSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX21vbiArIDEpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX3llYXIgLSAxMDApKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGJpbjJiY2QodC0+dG1feWVhciAtIDEwMCkpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKQEAgLTkxNCw3ICs5MTQsNyBAQAogCX0KIAogCW1lbmVsYXVzX3RvX3RpbWUocmVncywgdCk7Ci0JdC0+dG1fd2RheSA9IEJDRDJCSU4ocmVnc1s2XSk7CisJdC0+dG1fd2RheSA9IGJjZDJiaW4ocmVnc1s2XSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkyNyw3ICs5MjcsNyBAQAogCXN0YXR1cyA9IHRpbWVfdG9fbWVuZWxhdXModCwgTUVORUxBVVNfUlRDX1NFQyk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7Ci0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKE1FTkVMQVVTX1JUQ19XS0RBWSwgQklOMkJDRCh0LT50bV93ZGF5KSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKE1FTkVMQVVTX1JUQ19XS0RBWSwgYmluMmJjZCh0LT50bV93ZGF5KSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2VycigmdGhlX21lbmVsYXVzLT5jbGllbnQtPmRldiwgInJ0YyB3cml0ZSByZWcgJTAyeCAiCiAJCQkJImVyciAlZFxuIiwgTUVORUxBVVNfUlRDX1dLREFZLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggNDJlODUyZC4uNWE0ODVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0yNjYsNiArMjY2LDkgQEAKIAogCWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvLT5wbGF0Zm9ybV9kYXRhOwogCisJaWYgKGluZm8tPmFyY2hkYXRhKQorCQljbGllbnQtPmRldi5hcmNoZGF0YSA9ICppbmZvLT5hcmNoZGF0YTsKKwogCWNsaWVudC0+ZmxhZ3MgPSBpbmZvLT5mbGFnczsKIAljbGllbnQtPmFkZHIgPSBpbmZvLT5hZGRyOwogCWNsaWVudC0+aXJxID0gaW5mby0+aXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggNzRhMzY5YS4uNmQ3NDAxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC04NCwyMSArODQsNDAgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEJMS19ERVZfSURFRElTSwotCXRyaXN0YXRlICJJbmNsdWRlIElERS9BVEEtMiBESVNLIHN1cHBvcnQiCi0JLS0taGVscC0tLQotCSAgVGhpcyB3aWxsIGluY2x1ZGUgZW5oYW5jZWQgc3VwcG9ydCBmb3IgTUZNL1JMTC9JREUgaGFyZCBkaXNrcy4gIElmCi0JICB5b3UgaGF2ZSBhIE1GTS9STEwvSURFIGRpc2ssIGFuZCB0aGVyZSBpcyBubyBzcGVjaWFsIHJlYXNvbiB0byB1c2UKLQkgIHRoZSBvbGQgaGFyZCBkaXNrIGRyaXZlciBpbnN0ZWFkLCBzYXkgWS4gIElmIHlvdSBoYXZlIGFuIFNDU0ktb25seQotCSAgc3lzdGVtLCB5b3UgY2FuIHNheSBOIGhlcmUuCitjb25maWcgSURFX0dECisJdHJpc3RhdGUgImdlbmVyaWMgQVRBL0FUQVBJIGRpc2sgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTdXBwb3J0IGZvciBBVEEvQVRBUEkgZGlza3MgKGluY2x1ZGluZyBBVEFQSSBmbG9wcHkgZHJpdmVzKS4KIAotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLWRpc2suCi0JICBEbyBub3QgY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSBpZiB5b3VyIHJvb3QgZmlsZSBzeXN0ZW0KLQkgICh0aGUgb25lIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeSAvKSBpcyBsb2NhdGVkIG9uIHRoZSBJREUgZGlzay4KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS1nZF9tb2QuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBJREVfR0RfQVRBCisJYm9vbCAiQVRBIGRpc2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElERV9HRAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIEFUQSBoYXJkIGRpc2tzLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgSURFX0dEX0FUQVBJCisJYm9vbCAiQVRBUEkgZmxvcHB5IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJREVfR0QKKwlzZWxlY3QgSURFX0FUQVBJCisJaGVscAorCSAgVGhpcyB3aWxsIGluY2x1ZGUgc3VwcG9ydCBmb3IgQVRBUEkgZmxvcHB5IGRyaXZlcworCSAgKGkuZS4gSW9tZWdhIFpJUCBvciBNS0UgTFMtMTIwKS4KKworCSAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGp1bXBlciBzZXR0aW5ncyBhbmQgdGhlIHF1ZXN0aW9uCisJICBvZiB3aGVuIGEgWklQIGRyaXZlIHVzZXMgYSBwYXJ0aXRpb24gdGFibGUsIHNlZQorCSAgPGh0dHA6Ly93d3cud2luLnR1ZS5ubC9+YWViL2xpbnV4L3ppcC96aXAtMS5odG1sPi4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEJMS19ERVZfSURFQ1MKIAl0cmlzdGF0ZSAiUENNQ0lBIElERSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENNQ0lBCkBAIC0xNjMsMjkgKzE4Miw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtdGFwZS4KIAotY29uZmlnIEJMS19ERVZfSURFRkxPUFBZCi0JdHJpc3RhdGUgIkluY2x1ZGUgSURFL0FUQVBJIEZMT1BQWSBzdXBwb3J0IgotCXNlbGVjdCBJREVfQVRBUEkKLQktLS1oZWxwLS0tCi0JICBJZiB5b3UgaGF2ZSBhbiBJREUgZmxvcHB5IGRyaXZlIHdoaWNoIHVzZXMgdGhlIEFUQVBJIHByb3RvY29sLAotCSAgYW5zd2VyIFkuICBBVEFQSSBpcyBhIG5ld2VyIHByb3RvY29sIHVzZWQgYnkgSURFIENELVJPTS90YXBlL2Zsb3BweQotCSAgZHJpdmVzLCBzaW1pbGFyIHRvIHRoZSBTQ1NJIHByb3RvY29sLgotCi0JICBUaGUgTFMtMTIwIGFuZCB0aGUgSURFL0FUQVBJIElvbWVnYSBaSVAgZHJpdmUgYXJlIGFsc28gc3VwcG9ydGVkIGJ5Ci0JICB0aGlzIGRyaXZlci4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGp1bXBlciBzZXR0aW5ncyBhbmQgdGhlIHF1ZXN0aW9uCi0JICBvZiB3aGVuIGEgWklQIGRyaXZlIHVzZXMgYSBwYXJ0aXRpb24gdGFibGUsIHNlZQotCSAgPGh0dHA6Ly93d3cud2luLnR1ZS5ubC9+YWViL2xpbnV4L3ppcC96aXAtMS5odG1sPi4KLQkgIChBVEFQSSBQRC1DRC9DRFIgZHJpdmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyOyBzdXBwb3J0Ci0JICBmb3IgUEQtQ0QvQ0RSIGRyaXZlcyBpcyBhdmFpbGFibGUgaWYgeW91IGFuc3dlciBZIHRvCi0JICAiU0NTSSBlbXVsYXRpb24gc3VwcG9ydCIsIGJlbG93KS4KLQotCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBGTE9QUFkgZHJpdmUgd2lsbCBiZSBpZGVudGlmaWVkIGFsb25nIHdpdGgKLQkgIG90aGVyIElERSBkZXZpY2VzLCBhcyAiaGRiIiBvciAiaGRjIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIgKGNoZWNrCi0JICB0aGUgYm9vdCBtZXNzYWdlcyB3aXRoIGRtZXNnKS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLWZsb3BweS4KLQogY29uZmlnIEJMS19ERVZfSURFU0NTSQogCXRyaXN0YXRlICJTQ1NJIGVtdWxhdGlvbiBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFNDU0kKQEAgLTMzMiw3ICszMjgsNyBAQAogIyBUT0RPOiBzcGxpdCBpdCBvbiBwZXIgaG9zdCBkcml2ZXIgY29uZmlnIG9wdGlvbnMgKG9yIG1vZHVsZSBwYXJhbWV0ZXJzKQogY29uZmlnIEJMS19ERVZfT0ZGQk9BUkQKIAlib29sICJCb290IG9mZi1ib2FyZCBjaGlwc2V0cyBmaXJzdCBzdXBwb3J0IChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIEJMS19ERVZfSURFUENJICYmIChCTEtfREVWX0FFQzYyWFggfHwgQkxLX0RFVl9HRU5FUklDIHx8IEJMS19ERVZfSFBUMzRYIHx8IEJMS19ERVZfSFBUMzY2IHx8IEJMS19ERVZfUERDMjAyWFhfTkVXIHx8IEJMS19ERVZfUERDMjAyWFhfT0xEIHx8IEJMS19ERVZfVEM4NkMwMDEpCisJZGVwZW5kcyBvbiBCTEtfREVWX0lERVBDSSAmJiAoQkxLX0RFVl9BRUM2MlhYIHx8IEJMS19ERVZfR0VORVJJQyB8fCBCTEtfREVWX0hQVDM2NiB8fCBCTEtfREVWX1BEQzIwMlhYX05FVyB8fCBCTEtfREVWX1BEQzIwMlhYX09MRCB8fCBCTEtfREVWX1RDODZDMDAxKQogCWhlbHAKIAkgIE5vcm1hbGx5LCBJREUgY29udHJvbGxlcnMgYnVpbHQgaW50byB0aGUgbW90aGVyYm9hcmQgKG9uLWJvYXJkCiAJICBjb250cm9sbGVycykgYXJlIGFzc2lnbmVkIHRvIGlkZTAgYW5kIGlkZTEgd2hpbGUgdGhvc2Ugb24gYWRkLWluIFBDSQpAQCAtNDgyLDI4ICs0NzgsNiBAQAogCiAJICBJdCBpcyBzYWZlIHRvIHNheSBZIHRvIHRoaXMgcXVlc3Rpb24uCiAKLWNvbmZpZyBCTEtfREVWX0hQVDM0WAotCXRyaXN0YXRlICJIUFQzNFggY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQlJPS0VOCi0Jc2VsZWN0IEJMS19ERVZfSURFRE1BX1BDSQotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGFkZHMgdXAgdG8gNCBtb3JlIEVJREUgZGV2aWNlcyBzaGFyaW5nIGEgc2luZ2xlCi0JICBpbnRlcnJ1cHQuIFRoZSBIUFQzNDMgY2hpcHNldCBpbiBpdHMgY3VycmVudCBmb3JtIGlzIGEgbm9uLWJvb3RhYmxlCi0JICBjb250cm9sbGVyOyB0aGUgSFBUMzQ1L0hQVDM2MyBjaGlwc2V0IGlzIGEgYm9vdGFibGUgKG5lZWRzIEJJT1MgRklYKQotCSAgUENJIFVETUEgY29udHJvbGxlcnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGR5bmFtaWMgdHVuaW5nIG9mIHRoZQotCSAgY2hpcHNldCBkdXJpbmcgdGhlIGlkZS1wcm9iZSBhdCBib290IHRpbWUuIEl0IGlzIHJlcG9ydGVkIHRvIHN1cHBvcnQKLQkgIERWRCBJSSBkcml2ZXMsIGJ5IHRoZSBtYW51ZmFjdHVyZXIuCi0KLWNvbmZpZyBIUFQzNFhfQVVUT0RNQQotCWJvb2wgIkhQVDM0WCBBVVRPRE1BIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBCTEtfREVWX0hQVDM0WCAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIGlzIGEgZGFuZ2Vyb3VzIHRoaW5nIHRvIGF0dGVtcHQgY3VycmVudGx5ISBQbGVhc2UgcmVhZCB0aGUKLQkgIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgPGZpbGU6ZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jPi4gIElmIHlvdSBzYXkgWQotCSAgaGVyZSwgdGhlbiBzYXkgWSB0byAiVXNlIERNQSBieSBkZWZhdWx0IHdoZW4gYXZhaWxhYmxlIiBhcyB3ZWxsLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgQkxLX0RFVl9IUFQzNjYKIAl0cmlzdGF0ZSAiSFBUMzZYLzM3WCBjaGlwc2V0IHN1cHBvcnQiCiAJc2VsZWN0IEJMS19ERVZfSURFRE1BX1BDSQpAQCAtNzQ2LDYgKzcyMCwxNiBAQAogICAgICAgIGRlZmF1bHQgIjEyOCIKICAgICAgICBkZXBlbmRzIG9uIEJMS19ERVZfSURFX0FVMVhYWAogCitjb25maWcgQkxLX0RFVl9JREVfVFg0OTM4CisJdHJpc3RhdGUgIlRYNDkzOCBpbnRlcm5hbCBJREUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNPQ19UWDQ5MzgKKwlzZWxlY3QgSURFX1RJTUlOR1MKKworY29uZmlnIEJMS19ERVZfSURFX1RYNDkzOQorCXRyaXN0YXRlICJUWDQ5MzkgaW50ZXJuYWwgSURFIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfVFg0OTM5CisJc2VsZWN0IEJMS19ERVZfSURFRE1BX1NGRgorCiBjb25maWcgSURFX0FSTQogCXRyaXN0YXRlICJBUk0gSURFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk0gJiYgKEFSQ0hfQ0xQUzc1MDAgfHwgQVJDSF9SUEMgfHwgQVJDSF9TSEFSSykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggY2VhZjc3OS4uNzgxOGQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTE4LDQ3ICsxOCw5OCBAQAogCiBvYmotJChDT05GSUdfSURFKQkJCSs9IGlkZS1jb3JlLm8KIAotaWZlcSAoJChDT05GSUdfSURFX0FSTSksIHkpCi0JaWRlLWFybS1jb3JlLXkgKz0gYXJtL2lkZV9hcm0ubwotCW9iai15ICs9IGlkZS1hcm0tY29yZS5vCi1lbmRpZgorb2JqLSQoQ09ORklHX0lERV9BUk0pCQkJKz0gaWRlX2FybS5vCiAKLW9iai0kKENPTkZJR19JREUpCQkJKz0gbGVnYWN5LyBwY2kvCitvYmotJChDT05GSUdfQkxLX0RFVl9BTEkxNFhYKQkJKz0gYWxpMTR4eC5vCitvYmotJChDT05GSUdfQkxLX0RFVl9VTUM4NjcyKQkJKz0gdW1jODY3Mi5vCitvYmotJChDT05GSUdfQkxLX0RFVl9EVEMyMjc4KQkJKz0gZHRjMjI3OC5vCitvYmotJChDT05GSUdfQkxLX0RFVl9IVDY1NjBCKQkJKz0gaHQ2NTYwYi5vCitvYmotJChDT05GSUdfQkxLX0RFVl9RRDY1WFgpCQkrPSBxZDY1eHgubworb2JqLSQoQ09ORklHX0JMS19ERVZfNERSSVZFUykJCSs9IGlkZS00ZHJpdmVzLm8KKworb2JqLSQoQ09ORklHX0JMS19ERVZfR0FZTEUpCQkrPSBnYXlsZS5vCitvYmotJChDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFKQkrPSBmYWxjb25pZGUubworb2JqLSQoQ09ORklHX0JMS19ERVZfTUFDX0lERSkJCSs9IG1hY2lkZS5vCitvYmotJChDT05GSUdfQkxLX0RFVl9RNDBJREUpCQkrPSBxNDBpZGUubworb2JqLSQoQ09ORklHX0JMS19ERVZfQlVEREhBKQkJKz0gYnVkZGhhLm8KKworb2JqLSQoQ09ORklHX0JMS19ERVZfQUVDNjJYWCkJCSs9IGFlYzYyeHgubworb2JqLSQoQ09ORklHX0JMS19ERVZfQUxJMTVYMykJCSs9IGFsaW0xNXgzLm8KK29iai0kKENPTkZJR19CTEtfREVWX0FNRDc0WFgpCQkrPSBhbWQ3NHh4Lm8KK29iai0kKENPTkZJR19CTEtfREVWX0FUSUlYUCkJCSs9IGF0aWl4cC5vCitvYmotJChDT05GSUdfQkxLX0RFVl9DRUxMRUIpCQkrPSBzY2NfcGF0YS5vCitvYmotJChDT05GSUdfQkxLX0RFVl9DTUQ2NFgpCQkrPSBjbWQ2NHgubworb2JqLSQoQ09ORklHX0JMS19ERVZfQ1M1NTIwKQkJKz0gY3M1NTIwLm8KK29iai0kKENPTkZJR19CTEtfREVWX0NTNTUzMCkJCSs9IGNzNTUzMC5vCitvYmotJChDT05GSUdfQkxLX0RFVl9DUzU1MzUpCQkrPSBjczU1MzUubworb2JqLSQoQ09ORklHX0JMS19ERVZfU0MxMjAwKQkJKz0gc2MxMjAwLm8KK29iai0kKENPTkZJR19CTEtfREVWX0NZODJDNjkzKQkJKz0gY3k4MmM2OTMubworb2JqLSQoQ09ORklHX0JMS19ERVZfREVMS0lOKQkJKz0gZGVsa2luX2NiLm8KK29iai0kKENPTkZJR19CTEtfREVWX0hQVDM2NikJCSs9IGhwdDM2Ni5vCitvYmotJChDT05GSUdfQkxLX0RFVl9JVDgyMTMpCQkrPSBpdDgyMTMubworb2JqLSQoQ09ORklHX0JMS19ERVZfSVQ4MjFYKQkJKz0gaXQ4MjF4Lm8KK29iai0kKENPTkZJR19CTEtfREVWX0pNSUNST04pCQkrPSBqbWljcm9uLm8KK29iai0kKENPTkZJR19CTEtfREVWX05TODc0MTUpCQkrPSBuczg3NDE1Lm8KK29iai0kKENPTkZJR19CTEtfREVWX09QVEk2MjEpCQkrPSBvcHRpNjIxLm8KK29iai0kKENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCkJKz0gcGRjMjAyeHhfb2xkLm8KK29iai0kKENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVykJKz0gcGRjMjAyeHhfbmV3Lm8KK29iai0kKENPTkZJR19CTEtfREVWX1BJSVgpCQkrPSBwaWl4Lm8KK29iai0kKENPTkZJR19CTEtfREVWX1JaMTAwMCkJCSs9IHJ6MTAwMC5vCitvYmotJChDT05GSUdfQkxLX0RFVl9TVldLUykJCSs9IHNlcnZlcndvcmtzLm8KK29iai0kKENPTkZJR19CTEtfREVWX1NHSUlPQzQpCQkrPSBzZ2lpb2M0Lm8KK29iai0kKENPTkZJR19CTEtfREVWX1NJSU1BR0UpCQkrPSBzaWltYWdlLm8KK29iai0kKENPTkZJR19CTEtfREVWX1NJUzU1MTMpCQkrPSBzaXM1NTEzLm8KK29iai0kKENPTkZJR19CTEtfREVWX1NMODJDMTA1KQkJKz0gc2w4MmMxMDUubworb2JqLSQoQ09ORklHX0JMS19ERVZfU0xDOTBFNjYpCQkrPSBzbGM5MGU2Ni5vCitvYmotJChDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSkJCSs9IHRjODZjMDAxLm8KK29iai0kKENPTkZJR19CTEtfREVWX1RSSUZMRVgpCQkrPSB0cmlmbGV4Lm8KK29iai0kKENPTkZJR19CTEtfREVWX1RSTTI5MCkJCSs9IHRybTI5MC5vCitvYmotJChDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFgpCQkrPSB2aWE4MmN4eHgubworCisjIE11c3QgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrCitvYmotJChDT05GSUdfQkxLX0RFVl9HRU5FUklDKQkJKz0gaWRlLXBjaS1nZW5lcmljLm8KIAogb2JqLSQoQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIpCSs9IGlkZS1zY2FuLXBjaS5vCiAKLWlmZXEgKCQoQ09ORklHX0JMS19ERVZfQ01ENjQwKSwgeSkKLQljbWQ2NDAtY29yZS15ICs9IHBjaS9jbWQ2NDAubwotCW9iai15ICs9IGNtZDY0MC1jb3JlLm8KLWVuZGlmCitvYmotJChDT05GSUdfQkxLX0RFVl9DTUQ2NDApCQkrPSBjbWQ2NDAubwogCi1vYmotJChDT05GSUdfSURFKQkJCSs9IHBwYy8KLW9iai0kKENPTkZJR19JREVfSDgzMDApCQkJKz0gaDgzMDAvCitvYmotJChDT05GSUdfQkxLX0RFVl9JREVfUE1BQykJCSs9IHBtYWMubworCitvYmotJChDT05GSUdfSURFX0g4MzAwKQkJCSs9IGlkZS1oODMwMC5vCisKIG9iai0kKENPTkZJR19JREVfR0VORVJJQykJCSs9IGlkZS1nZW5lcmljLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lERVBOUCkJCSs9IGlkZS1wbnAubwogCi1pZGUtZGlza19tb2QteSArPSBpZGUtZGlzay5vIGlkZS1kaXNrX2lvY3RsLm8KK2lkZS1nZF9tb2QteSArPSBpZGUtZ2QubwogaWRlLWNkX21vZC15ICs9IGlkZS1jZC5vIGlkZS1jZF9pb2N0bC5vIGlkZS1jZF92ZXJib3NlLm8KLWlkZS1mbG9wcHlfbW9kLXkgKz0gaWRlLWZsb3BweS5vIGlkZS1mbG9wcHlfaW9jdGwubwogCitpZmVxICgkKENPTkZJR19JREVfR0RfQVRBKSwgeSkKKwlpZGUtZ2RfbW9kLXkgKz0gaWRlLWRpc2subyBpZGUtZGlza19pb2N0bC5vCiBpZmVxICgkKENPTkZJR19JREVfUFJPQ19GUyksIHkpCi0JaWRlLWRpc2tfbW9kLXkgKz0gaWRlLWRpc2tfcHJvYy5vCi0JaWRlLWZsb3BweV9tb2QteSArPSBpZGUtZmxvcHB5X3Byb2MubworCWlkZS1nZF9tb2QteSArPSBpZGUtZGlza19wcm9jLm8KK2VuZGlmCiBlbmRpZgogCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREVESVNLKQkJKz0gaWRlLWRpc2tfbW9kLm8KK2lmZXEgKCQoQ09ORklHX0lERV9HRF9BVEFQSSksIHkpCisJaWRlLWdkX21vZC15ICs9IGlkZS1mbG9wcHkubyBpZGUtZmxvcHB5X2lvY3RsLm8KK2lmZXEgKCQoQ09ORklHX0lERV9QUk9DX0ZTKSwgeSkKKwlpZGUtZ2RfbW9kLXkgKz0gaWRlLWZsb3BweV9wcm9jLm8KK2VuZGlmCitlbmRpZgorCitvYmotJChDT05GSUdfSURFX0dEKQkJCSs9IGlkZS1nZF9tb2Qubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSURFQ0QpCQkrPSBpZGUtY2RfbW9kLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0lERUZMT1BQWSkJCSs9IGlkZS1mbG9wcHlfbW9kLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lERVRBUEUpCQkrPSBpZGUtdGFwZS5vCiAKLWlmZXEgKCQoQ09ORklHX0JMS19ERVZfSURFQ1MpLCB5KQotCWlkZS1jcy1jb3JlLXkgKz0gbGVnYWN5L2lkZS1jcy5vCi0Jb2JqLXkgKz0gaWRlLWNzLWNvcmUubwotZW5kaWYKK29iai0kKENPTkZJR19CTEtfREVWX0lERUNTKQkJKz0gaWRlLWNzLm8KIAotaWZlcSAoJChDT05GSUdfQkxLX0RFVl9QTEFURk9STSksIHkpCi0JaWRlLXBsYXRmb3JtLWNvcmUteSArPSBsZWdhY3kvaWRlX3BsYXRmb3JtLm8KLQlvYmoteSArPSBpZGUtcGxhdGZvcm0tY29yZS5vCi1lbmRpZgorb2JqLSQoQ09ORklHX0JMS19ERVZfUExBVEZPUk0pCQkrPSBpZGVfcGxhdGZvcm0ubwogCi1vYmotJChDT05GSUdfSURFKQkJCSs9IGFybS8gbWlwcy8KK29iai0kKENPTkZJR19CTEtfREVWX0lERV9JQ1NJREUpCSs9IGljc2lkZS5vCitvYmotJChDT05GSUdfQkxLX0RFVl9JREVfUkFQSURFKQkrPSByYXBpZGUubworb2JqLSQoQ09ORklHX0JMS19ERVZfUEFMTUNISVBfQkszNzEwKQkrPSBwYWxtX2JrMzcxMC5vCisKK29iai0kKENPTkZJR19CTEtfREVWX0lERV9BVTFYWFgpCSs9IGF1MXh4eC1pZGUubworCitvYmotJChDT05GSUdfQkxLX0RFVl9JREVfVFg0OTM4KQkrPSB0eDQ5MzhpZGUubworb2JqLSQoQ09ORklHX0JMS19ERVZfSURFX1RYNDkzOSkJKz0gdHg0OTM5aWRlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2FlYzYyeHguYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYyBiL2RyaXZlcnMvaWRlL2FsaTE0eHguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvYWxpMTR4eC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9hbGltMTV4My5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9hbWQ3NHh4LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FybS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL2FybS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJjMjYwNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0KLW9iai0kKENPTkZJR19CTEtfREVWX0lERV9JQ1NJREUpCSs9IGljc2lkZS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREVfUkFQSURFKQkrPSByYXBpZGUubwotb2JqLSQoQ09ORklHX0JMS19ERVZfUEFMTUNISVBfQkszNzEwKQkrPSBwYWxtX2JrMzcxMC5vCi0KLWlmZXEgKCQoQ09ORklHX0lERV9BUk0pLCBtKQotCW9iai1tICs9IGlkZV9hcm0ubwotZW5kaWYKLQotRVhUUkFfQ0ZMQUdTCTo9IC1JZHJpdmVycy9pZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2F0aWl4cC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2J1ZGRoYS5jIGIvZHJpdmVycy9pZGUvYnVkZGhhLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvYnVkZGhhLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYyBiL2RyaXZlcnMvaWRlL2NtZDY0MC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2NtZDY0MC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9jbWQ2NHguYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jIGIvZHJpdmVycy9pZGUvY3M1NTIwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvY3M1NTIwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2NzNTUzMC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMgYi9kcml2ZXJzL2lkZS9jczU1MzUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9jczU1MzUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9jeTgyYzY5My5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvY3k4MmM2OTMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMgYi9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjFiMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiAgQ3JlYXRlZCAyMCBPY3QgMjAwNCBieSBNYXJrIExvcmQKKyAqCisgKiAgQmFzaWMgc3VwcG9ydCBmb3IgRGVsa2luL0FTS0EvV29ya2JpdCBDYXJkYnVzIENvbXBhY3RGbGFzaCBhZGFwdGVyCisgKgorICogIE1vZGVsZWQgYWZ0ZXIgdGhlIDE2LWJpdCBQQ01DSUEgZHJpdmVyOiBpZGUtY3MuYworICoKKyAqICBUaGlzIGlzIHNsaWdodGx5IHBlY3VsaWFyLCBpbiB0aGF0IGl0IGlzIGEgUENJIGRyaXZlciwKKyAqICBidXQgaXMgTk9UIGFuIElERSBQQ0kgZHJpdmVyIC0tIHRoZSBJREUgbGF5ZXIgZG9lcyBub3QgZGlyZWN0bHkKKyAqICBzdXBwb3J0IGhvdCBpbnNlcnRpb24vcmVtb3ZhbCBvZiBQQ0kgaW50ZXJmYWNlcywgc28gdGhpcyBkcml2ZXIKKyAqICBpcyB1bmFibGUgdG8gdXNlIHRoZSBJREUgUENJIGludGVyZmFjZXMuICBJbnN0ZWFkLCBpdCB1c2VzIHRoZQorICogIHNhbWUgaW50ZXJmYWNlcyBhcyB0aGUgaWRlLWNzIChQQ01DSUEpIGRyaXZlciB1c2VzLgorICogIE9uIHRoZSBwbHVzIHNpZGUsIHRoZSBkcml2ZXIgaXMgYWxzbyBzbWFsbGVyL3NpbXBsZXIgdGhpcyB3YXkuCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKgorICogTm8gY2hpcCBkb2N1bWVudGF0aW9uIGhhcyB5ZXQgYmVlbiBmb3VuZCwKKyAqIHNvIHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHdlcmUgcHVsbGVkIGZyb20KKyAqIGEgcnVubmluZyBXaW45OCBzeXN0ZW0gdXNpbmcgImRlYnVnIi4KKyAqIFRoaXMgZ2l2ZXMgYXJvdW5kIDNNQnl0ZS9zZWNvbmQgcmVhZCBwZXJmb3JtYW5jZSwKKyAqIHdoaWNoIGlzIGFib3V0IDIvMyBvZiB3aGF0IHRoZSBjaGlwIGlzIGNhcGFibGUgb2YuCisgKgorICogVGhlcmUgaXMgYWxzbyBhIDRLQnl0ZSBtbWlvIHJlZ2lvbiBvbiB0aGUgY2FyZCwKKyAqIGJ1dCBpdHMgcHVycG9zZSBoYXMgeWV0IHRvIGJlIHJldmVyc2UtZW5naW5lZXJlZC4KKyAqLworc3RhdGljIGNvbnN0IHU4IHNldHVwW10gPSB7CisJMHgwMCwgMHgwNSwgMHhiZSwgMHgwMSwgMHgyMCwgMHg4ZiwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDFmLCAweGIzLCAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4MywgMHgwMiwgMHgxMywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGRlbGtpbl9jYl9wb3J0X29wcyA9IHsKKwkucXVpcmtwcm9jCQk9IGlkZV91bmRlY29kZWRfc2xhdmUsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpbnQgaTsKKworCW91dGIoMHgwMiwgYmFzZSArIDB4MWUpOwkvKiBzZXQgbklFTiB0byBibG9jayBpbnRlcnJ1cHRzICovCisJaW5iKGJhc2UgKyAweDE3KTsJCS8qIHJlYWQgc3RhdHVzIHRvIGNsZWFyIGludGVycnVwdHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2V0dXApOyArK2kpIHsKKwkJaWYgKHNldHVwW2ldKQorCQkJb3V0YihzZXR1cFtpXSwgYmFzZSArIGkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZGVsa2luX2NiX3BvcnRfaW5mbyA9IHsKKwkucG9ydF9vcHMJCT0gJmRlbGtpbl9jYl9wb3J0X29wcywKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfCBJREVfSEZMQUdfVU5NQVNLX0lSUVMgfAorCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaW5pdF9jaGlwc2V0CQk9IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorZGVsa2luX2NiX3Byb2JlIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0OworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwlpbnQgcmM7CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgImRlbGtpbl9jYjogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkICglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAiZGVsa2luX2NiIik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZGVsa2luX2NiOiBwY2lfcmVxdWVzdF9yZWdpb25zIGZhaWxlZCAoJWQpXG4iLCByYyk7CisJCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCQlyZXR1cm4gcmM7CisJfQorCWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKworCWRlbGtpbl9jYl9pbml0X2NoaXBzZXQoZGV2KTsKKworCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIGJhc2UgKyAweDEwLCBiYXNlICsgMHgxZSk7CisJaHcuaXJxID0gZGV2LT5pcnE7CisJaHcuZGV2ID0gJmRldi0+ZGV2OworCWh3LmNoaXBzZXQgPSBpZGVfcGNpOwkJLyogdGhpcyBlbmFibGVzIElSUSBzaGFyaW5nICovCisKKwlyYyA9IGlkZV9ob3N0X2FkZCgmZGVsa2luX2NiX3BvcnRfaW5mbywgaHdzLCAmaG9zdCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9kaXNhYmxlOworCisJcGNpX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisKKwlyZXR1cm4gMDsKKworb3V0X2Rpc2FibGU6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK2RlbGtpbl9jYl9yZW1vdmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZGVsa2luX2NiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXBjaV9zYXZlX3N0YXRlKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVsa2luX2NiX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByYzsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKKwlwY2lfc2V0X21hc3RlcihkZXYpOworCisJaWYgKGhvc3QtPmluaXRfY2hpcHNldCkKKwkJaG9zdC0+aW5pdF9jaGlwc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGRlbGtpbl9jYl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgZGVsa2luX2NiX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRlbGtpbl9jYl9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IDB4MTE0NSwgMHhmMDIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IDB4MTE0NSwgMHhmMDI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IDAsIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRlbGtpbl9jYl9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRlbGtpbl9jYl9wY2lfZHJpdmVyID0geworCS5uYW1lCQk9ICJEZWxraW4tQVNLQS1Xb3JrYml0IENhcmRidXMgSURFIiwKKwkuaWRfdGFibGUJPSBkZWxraW5fY2JfcGNpX3RibCwKKwkucHJvYmUJCT0gZGVsa2luX2NiX3Byb2JlLAorCS5yZW1vdmUJCT0gZGVsa2luX2NiX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGRlbGtpbl9jYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZGVsa2luX2NiX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlbGtpbl9jYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRlbGtpbl9jYl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRlbGtpbl9jYl9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkZWxraW5fY2JfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRlbGtpbl9jYl9pbml0KTsKK21vZHVsZV9leGl0KGRlbGtpbl9jYl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFyayBMb3JkIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJhc2ljIHN1cHBvcnQgZm9yIERlbGtpbi9BU0tBL1dvcmtiaXQgQ2FyZGJ1cyBJREUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYyBiL2RyaXZlcnMvaWRlL2R0YzIyNzguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvZHRjMjI3OC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvZmFsY29uaWRlLmMgYi9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbGVnYWN5L2ZhbGNvbmlkZS5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9mYWxjb25pZGUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMgYi9kcml2ZXJzL2lkZS9nYXlsZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9sZWdhY3kvZ2F5bGUuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvZ2F5bGUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaDgzMDAvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9oODMwMC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWViYTE2Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lkZS9oODMwMC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotCi1vYmotJChDT05GSUdfSURFX0g4MzAwKQkJCSs9IGlkZS1oODMwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTA5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9ocHQzNjYuYwpAQCAtMCwwICsxLDE2NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMwkJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMQkgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCBJbmMKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDgJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoYW5rcyB0byBIaWdoUG9pbnQgVGVjaG5vbG9naWVzIGZvciB0aGVpciBhc3Npc3RhbmNlLCBhbmQgaGFyZHdhcmUuCisgKiBTcGVjaWFsIFRoYW5rcyB0byBKb24gQnVyY2htb3JlIGluIFNhbkRpZWdvIGZvciB0aGUgZGVlcCBwb2NrZXRzLCBoaXMKKyAqIGRvbmF0aW9uIG9mIGFuIEFCaXQgQlA2IG1haW5ib2FyZCwgcHJvY2Vzc29yLCBhbmQgbWVtb3J5IGFjZWxsZXJhdGVkCisgKiBkZXZlbG9wbWVudCBhbmQgc3VwcG9ydC4KKyAqCisgKgorICogSGlnaFBvaW50IGhhcyBpdHMgb3duIGRyaXZlcnMgKG9wZW4gc291cmNlIGV4Y2VwdCBmb3IgdGhlIFJBSUQgcGFydCkKKyAqIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuaGlnaHBvaW50LXRlY2guY29tL0JJT1MlMjArJTIwRHJpdmVyLy4KKyAqIFRoaXMgbWF5IGJlIHVzZWZ1bCB0byBhbnlvbmUgd2FudGluZyB0byB3b3JrIG9uIHRoaXMgZHJpdmVyLCBob3dldmVyICBkbyBub3QKKyAqIHRydXN0ICB0aGVtIHRvbyBtdWNoIHNpbmNlIHRoZSBjb2RlIHRlbmRzIHRvIGJlY29tZSBsZXNzIGFuZCBsZXNzIG1lYW5pbmdmdWwKKyAqIGFzIHRoZSB0aW1lIHBhc3Nlcy4uLiA6LS8KKyAqCisgKiBOb3RlIHRoYXQgZmluYWwgSFBUMzcwIHN1cHBvcnQgd2FzIGRvbmUgYnkgZm9yY2UgZXh0cmFjdGlvbiBvZiBHUEwuCisgKgorICogLSBhZGQgZnVuY3Rpb24gZm9yIGdldHRpbmcvc2V0dGluZyBwb3dlciBzdGF0dXMgb2YgZHJpdmUKKyAqIC0gdGhlIEhQVDM3MCdzIHN0YXRlIG1hY2hpbmUgY2FuIGdldCBjb25mdXNlZC4gcmVzZXQgaXQgYmVmb3JlIGVhY2ggZG1hIAorICogICB4ZmVyIHRvIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZy4KKyAqIC0gcmVzZXQgc3RhdGUgZW5naW5lIHdoZW5ldmVyIHdlIGdldCBhbiBlcnJvci4KKyAqIC0gY2hlY2sgZm9yIGJ1c21hc3RlciBzdGF0ZSBhdCBlbmQgb2YgZG1hLiAKKyAqIC0gdXNlIG5ldyBoaWdocG9pbnQgdGltaW5ncy4KKyAqIC0gZGV0ZWN0IGJ1cyBzcGVlZCB1c2luZyBoaWdocG9pbnQgcmVnaXN0ZXIuCisgKiAtIHVzZSBwbGwgaWYgd2UgZG9uJ3QgaGF2ZSBhIGNsb2NrIHRhYmxlLiBhZGRlZCBhIDY2TUh6IHRhYmxlIHRoYXQncworICogICBqdXN0IDJ4IHRoZSAzM01IeiB0YWJsZS4KKyAqIC0gcmVtb3ZlZCB0dXJuYXJvdW5kLiBOT1RFOiB3ZSBuZXZlciB3YW50IHRvIHN3aXRjaCBiZXR3ZWVuIHBsbCBhbmQKKyAqICAgcGNpIGNsb2NrcyBhcyB0aGUgY2hpcCBjYW4gZ2xpdGNoIGluIHRob3NlIGNhc2VzLiB0aGUgaGlnaHBvaW50CisgKiAgIGFwcHJvdmVkIHdvcmthcm91bmQgc2xvd3MgZXZlcnl0aGluZyBkb3duIHRvbyBtdWNoIHRvIGJlIHVzZWZ1bC4gaW4KKyAqICAgYWRkaXRpb24sIHdlIHdvdWxkIGhhdmUgdG8gc2VyaWFsaXplIGFjY2VzcyB0byBlYWNoIGNoaXAuCisgKiAJQWRyaWFuIFN1biA8YS5zdW5Ac3VuLmNvbT4KKyAqCisgKiBhZGQgZHJpdmUgdGltaW5ncyBmb3IgNjZNSHogUENJIGJ1cywKKyAqIGZpeCBBVEEgQ2FibGUgc2lnbmFsIGRldGVjdGlvbiwgZml4IGluY29ycmVjdCAvcHJvYyBpbmZvCisgKiBhZGQgL3Byb2MgZGlzcGxheSBmb3IgcGVyLWRyaXZlIFBJTy9ETUEvVURNQSBtb2RlIGFuZAorICogcGVyLWNoYW5uZWwgQVRBLTMzLzY2IENhYmxlIGRldGVjdC4KKyAqIAlEdW5jYW4gTGF1cmllIDx2b2lkQHN1bi5jb20+CisgKgorICogZml4dXAgL3Byb2Mgb3V0cHV0IGZvciBtdWx0aXBsZSBjb250cm9sbGVycworICoJVGltIEhvY2tpbiA8dGhvY2tpbkBzdW4uY29tPgorICoKKyAqIE9uIGhwdDM2NjogCisgKiBSZXNldCB0aGUgaHB0MzY2IG9uIGVycm9yLCByZXNldCBvbiBkbWEKKyAqIEZpeCBkaXNhYmxpbmcgRmFzdCBJbnRlcnJ1cHQgaHB0MzY2LgorICogCU1pa2UgV2F5Y2hpc29uIDxjcmxmQHN1bi5jb20+CisgKgorICogQWRkZWQgc3VwcG9ydCBmb3IgMzcyTiBjbG9ja2luZyBhbmQgY2xvY2sgc3dpdGNoaW5nLiBUaGUgMzcyTiBuZWVkcworICogZGlmZmVyZW50IGNsb2NrcyBvbiByZWFkL3dyaXRlLiBUaGlzIHJlcXVpcmVzIG92ZXJsb2FkaW5nIHJ3X2Rpc2sgYW5kCisgKiBvdGhlciBkZWVwbHkgY3JhenkgdGhpbmdzLiBUaGFua3MgdG8gPGh0dHA6Ly93d3cuaG9lcnN0cmVpY2guZGU+IGZvcgorICoga2VlcGluZyBtZSBzYW5lLiAKKyAqCQlBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICoKKyAqIC0gZml4IHRoZSBjbG9jayB0dXJuYXJvdW5kIGNvZGU6IGl0IHdhcyB3cml0aW5nIHRvIHRoZSB3cm9uZyBwb3J0cyB3aGVuCisgKiAgIGNhbGxlZCBmb3IgdGhlIHNlY29uZGFyeSBjaGFubmVsLCBjYWNoaW5nIHRoZSBjdXJyZW50IGNsb2NrIG1vZGUgcGVyLQorICogICBjaGFubmVsIGNhdXNlZCB0aGUgY2FjaGVkIHJlZ2lzdGVyIHZhbHVlIHRvIGdldCBvdXQgb2Ygc3luYyB3aXRoIHRoZQorICogICBhY3R1YWwgb25lLCB0aGUgY2hhbm5lbHMgd2VyZW4ndCBzZXJpYWxpemVkLCB0aGUgdHVybmFyb3VuZCBzaG91bGRuJ3QKKyAqICAgYmUgZG9uZSBvbiA2NiBNSHogUENJIGJ1cworICogLSBkaXNhYmxlIFVsdHJhQVRBLzEwMCBmb3IgSFBUMzcwIGJ5IGRlZmF1bHQgYXMgdGhlIDMzIE1IeiBjbG9jayBiZWluZyB1c2VkCisgKiAgIGRvZXMgbm90IGFsbG93IGZvciB0aGlzIHNwZWVkIGFueXdheQorICogLSBhdm9pZCB0b3VjaGluZyBkaXNhYmxlZCBjaGFubmVscyAoZS5nLiBIUFQzNzEvTiBhcmUgc2luZ2xlIGNoYW5uZWwgY2hpcHMsCisgKiAgIHRoZWlyIHByaW1hcnkgY2hhbm5lbCBpcyBraW5kIG9mIHZpcnR1YWwsIGl0IGlzbid0IHRpZWQgdG8gYW55IHBpbnMpCisgKiAtIGZpeC9yZW1vdmUgYmFkL3VudXNlZCB0aW1pbmcgdGFibGVzIGFuZCB1c2Ugb25lIHNldCBvZiB0YWJsZXMgZm9yIHRoZSB3aG9sZQorICogICBIUFQzN3ggY2hpcCBmYW1pbHk7IHNhdmUgc3BhY2UgYnkgaW50cm9kdWNpbmcgdGhlIHNlcGFyYXRlIHRyYW5zZmVyIG1vZGUKKyAqICAgdGFibGUgaW4gd2hpY2ggdGhlIG1vZGUgbG9va3VwIGlzIGRvbmUKKyAqIC0gdXNlIGZfQ05UIHZhbHVlIHNhdmVkIGJ5ICB0aGUgSGlnaFBvaW50IEJJT1MgYXMgcmVhZGluZyBpdCBkaXJlY3RseSBnaXZlcworICogICB0aGUgd3JvbmcgUENJIGZyZXF1ZW5jeSBzaW5jZSBEUExMIGhhcyBhbHJlYWR5IGJlZW4gY2FsaWJyYXRlZCBieSBCSU9TOworICogICByZWFkIGl0IG9ubHkgZnJvbSB0aGUgZnVuY3Rpb24gMCBvZiBIUFQzNzQgY2hpcHMKKyAqIC0gZml4IHRoZSBob3Rzd2FwIGNvZGU6ICBpdCBjYXVzZWQgUkVTRVQtIHRvIGdsaXRjaCB3aGVuIHRyaXN0YXRpbmcgdGhlIGJ1cywKKyAqICAgYW5kIGZvciBIUFQzNnggdGhlIG9ic29sZXRlIEhESU9fVFJJU1RBVEVfSFdJRiBoYW5kbGVyIHdhcyBjYWxsZWQgaW5zdGVhZAorICogLSBwYXNzIHRvIGluaXRfY2hpcHNldCgpIGhhbmRsZXJzIGEgY29weSBvZiB0aGUgSURFIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGFzCisgKiAgIHRoZXkgdGFtcGVyIHdpdGggaXRzIGZpZWxkcworICogLSBwYXNzICB0byB0aGUgaW5pdF9zZXR1cCBoYW5kbGVycyBhIGNvcHkgb2YgdGhlIGlkZV9wY2lfZGV2aWNlX3Qgc3RydWN0dXJlCisgKiAgIHNpbmNlIHRoZXkgbWF5IHRhbXBlciB3aXRoIGl0cyBmaWVsZHMKKyAqIC0gcHJlZml4IHRoZSBkcml2ZXIgc3RhcnR1cCBtZXNzYWdlcyB3aXRoIHRoZSByZWFsIGNoaXAgbmFtZQorICogLSBjbGFpbSB0aGUgZXh0cmEgMjQwIGJ5dGVzIG9mIEkvTyBzcGFjZSBmb3IgYWxsIGNoaXBzCisgKiAtIG9wdGltaXplIHRoZSBVbHRyYURNQSBmaWx0ZXJpbmcgYW5kIHRoZSBkcml2ZSBsaXN0IGxvb2t1cCBjb2RlCisgKiAtIHVzZSBwY2lfZ2V0X3Nsb3QoKSB0byBnZXQgdG8gdGhlIGZ1bmN0aW9uIDEgb2YgSFBUMzZ4LzM3NAorICogLSBjYWNoZSBvZmZzZXQgb2YgdGhlIGNoYW5uZWwncyBtaXNjLiBjb250cm9sIHJlZ2lzdGVycyAoTUNScykgYmVpbmcgdXNlZAorICogICB0aHJvdWdob3V0IHRoZSBkcml2ZXIKKyAqIC0gb25seSB0b3VjaCB0aGUgcmVsZXZhbnQgTUNSIHdoZW4gZGV0ZWN0aW5nIHRoZSBjYWJsZSB0eXBlIG9uIEhQVDM3NCdzCisgKiAgIGZ1bmN0aW9uIDEKKyAqIC0gcmVuYW1lIGFsbCB0aGUgcmVnaXN0ZXIgcmVsYXRlZCB2YXJpYWJsZXMgY29uc2lzdGVudGx5CisgKiAtIG1vdmUgYWxsIHRoZSBpbnRlcnJ1cHQgdHdpZGRsaW5nIGNvZGUgZnJvbSB0aGUgc3BlZWRwcm9jIGhhbmRsZXJzIGludG8KKyAqICAgaW5pdF9od2lmX2hwdDM2NigpLCBhbHNvIGdyb3VwaW5nIGFsbCB0aGUgRE1BIHJlbGF0ZWQgY29kZSB0b2dldGhlciB0aGVyZQorICogLSBtZXJnZSBIUFQzNngvSFBUMzd4IHNwZWVkcHJvYyBoYW5kbGVycywgZml4IFBJTyB0aW1pbmcgcmVnaXN0ZXIgbWFzayBhbmQKKyAqICAgc2VwYXJhdGUgdGhlIFVsdHJhRE1BIGFuZCBNV0RNQSBtYXNrcyB0aGVyZSB0byBhdm9pZCBjaGFuZ2luZyBQSU8gdGltaW5ncworICogICB3aGVuIHNldHRpbmcgYW4gVWx0cmFETUEgbW9kZQorICogLSBmaXggaHB0M3h4X3R1bmVfZHJpdmUoKSB0byBzZXQgdGhlIFBJTyBtb2RlIHJlcXVlc3RlZCwgbm90IGFsd2F5cyBzZWxlY3QKKyAqICAgdGhlIGJlc3QgcG9zc2libGUgb25lCisgKiAtIGNsZWFuIHVwIERNQSB0aW1lb3V0IGhhbmRsaW5nIGZvciBIUFQzNzAKKyAqIC0gc3dpdGNoIHRvIHVzaW5nIHRoZSBlbnVtZXJhdGlvbiB0eXBlIHRvIGRpZmZlciBiZXR3ZWVuIHRoZSBudW1lcm91cyBjaGlwCisgKiAgIHZhcmlhbnRzLCBtYXRjaGluZyBQQ0kgZGV2aWNlL3JldmlzaW9uIElEIHdpdGggdGhlIGNoaXAgdHlwZSBlYXJseSwgYXQgdGhlCisgKiAgIGluaXRfc2V0dXAgc3RhZ2UKKyAqIC0gZXh0ZW5kIHRoZSBocHRfaW5mbyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgRFBMTCBhbmQgUENJIGNsb2NrIGZyZXF1ZW5jaWVzLAorICogICBzdG9wIGR1cGxpY2F0aW5nIGl0IGZvciBlYWNoIGNoYW5uZWwgYnkgc3RvcmluZyB0aGUgcG9pbnRlciBpbiB0aGUgcGNpX2RldgorICogICBzdHJ1Y3R1cmU6IGZpcnN0LCBhdCB0aGUgaW5pdF9zZXR1cCBzdGFnZSwgcG9pbnQgaXQgdG8gYSBzdGF0aWMgInRlbXBsYXRlIgorICogICB3aXRoIG9ubHkgdGhlIGNoaXAgdHlwZSBhbmQgaXRzIHNwZWNpZmljIGJhc2UgRFBMTCBmcmVxdWVuY3ksIHRoZSBoaWdoZXN0CisgKiAgIFVsdHJhRE1BIG1vZGUsIGFuZCB0aGUgY2hpcCBzZXR0aW5ncyB0YWJsZSBwb2ludGVyIGZpbGxlZCwgIHRoZW4sIGF0IHRoZQorICogICBpbml0X2NoaXBzZXQgc3RhZ2UsIGFsbG9jYXRlIHBlci1jaGlwIGluc3RhbmNlICBhbmQgZmlsbCBpdCB3aXRoIHRoZSByZXN0CisgKiAgIG9mIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24KKyAqIC0gZ2V0IHJpZCBvZiB0aGUgY29uc3RhbnQgdGhyZXNob2xkcyBpbiB0aGUgSFBUMzd4IFBDSSBjbG9jayBkZXRlY3Rpb24gY29kZSwKKyAqICAgc3dpdGNoICB0byBjYWxjdWxhdGluZyAgUENJIGNsb2NrIGZyZXF1ZW5jeSBiYXNlZCBvbiB0aGUgY2hpcCdzIGJhc2UgRFBMTAorICogICBmcmVxdWVuY3kKKyAqIC0gc3dpdGNoIHRvIHVzaW5nIHRoZSAgRFBMTCBjbG9jayBhbmQgZW5hYmxlIFVsdHJhQVRBLzEzMyBtb2RlIGJ5IGRlZmF1bHQgb24KKyAqICAgYW55dGhpbmcgIG5ld2VyIHRoYW4gSFBUMzcwL0EgKGV4Y2VwdCBIUFQzNzQgdGhhdCBpcyBub3QgY2FwYWJsZSBvZiB0aGlzCisgKiAgIG1vZGUgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwpCisgKiAtIGZvbGQgUENJIGNsb2NrIGRldGVjdGlvbiBhbmQgRFBMTCBzZXR1cCBjb2RlIGludG8gaW5pdF9jaGlwc2V0X2hwdDM2NigpLAorICogICBhbHNvIGZpeGluZyB0aGUgaW50ZXJjaGFuZ2VkIDI1LzQwIE1IeiBQQ0kgY2xvY2sgY2FzZXMgZm9yIEhQVDM2eCBjaGlwczsKKyAqICAgdW5pZnkgSFBUMzZ4LzM3eCB0aW1pbmcgc2V0dXAgY29kZSBhbmQgdGhlIHNwZWVkcHJvYyBoYW5kbGVycyBieSBqb2luaW5nCisgKiAgIHRoZSByZWdpc3RlciBzZXR0aW5nIGxpc3RzIGludG8gdGhlIHRhYmxlIGluZGV4ZWQgYnkgdGhlIGNsb2NrIHNlbGVjdGVkCisgKiAtIHNldCB0aGUgY29ycmVjdCBod2lmLT51bHRyYV9tYXNrIGZvciBlYWNoIGluZGl2aWR1YWwgY2hpcAorICogLSBhZGQgVWx0cmEgYW5kIE1XIERNQSBtb2RlIGZpbHRlcmluZyBmb3IgdGhlIEhQVDM3WzI0XSBiYXNlZCBTQVRBIGNhcmRzCisgKglTZXJnZWkgU2h0eWx5b3YsIDxzc2h0eWx5b3ZAcnUubXZpc3RhLmNvbT4gb3IgPHNvdXJjZUBtdmlzdGEuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBEUlZfTkFNRSAiaHB0MzY2IgorCisvKiB2YXJpb3VzIHR1bmluZyBwYXJhbWV0ZXJzICovCisjZGVmaW5lIEhQVF9SRVNFVF9TVEFURV9FTkdJTkUKKyN1bmRlZglIUFRfREVMQVlfSU5URVJSVVBUCisjZGVmaW5lIEhQVF9TRVJJQUxJWkVfSU8JMAorCitzdGF0aWMgY29uc3QgY2hhciAqcXVpcmtfZHJpdmVzW10gPSB7CisJIlFVQU5UVU0gRklSRUJBTExsY3QwOCAwOCIsCisJIlFVQU5UVU0gRklSRUJBTExQIEtBNi40IiwKKwkiUVVBTlRVTSBGSVJFQkFMTFAgTE0yMC40IiwKKwkiUVVBTlRVTSBGSVJFQkFMTFAgTE0yMC41IiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqYmFkX2F0YTEwMF81W10gPSB7CisJIklCTS1EVExBLTMwNzA3NSIsCisJIklCTS1EVExBLTMwNzA2MCIsCisJIklCTS1EVExBLTMwNzA0NSIsCisJIklCTS1EVExBLTMwNzAzMCIsCisJIklCTS1EVExBLTMwNzAyMCIsCisJIklCTS1EVExBLTMwNzAxNSIsCisJIklCTS1EVExBLTMwNTA0MCIsCisJIklCTS1EVExBLTMwNTAzMCIsCisJIklCTS1EVExBLTMwNTAyMCIsCisJIklDMzVMMDEwQVZFUjA3LTAiLAorCSJJQzM1TDAyMEFWRVIwNy0wIiwKKwkiSUMzNUwwMzBBVkVSMDctMCIsCisJIklDMzVMMDQwQVZFUjA3LTAiLAorCSJJQzM1TDA2MEFWRVIwNy0wIiwKKwkiV0RDIEFDMzEwMjAwUiIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJhZF9hdGE2Nl80W10gPSB7CisJIklCTS1EVExBLTMwNzA3NSIsCisJIklCTS1EVExBLTMwNzA2MCIsCisJIklCTS1EVExBLTMwNzA0NSIsCisJIklCTS1EVExBLTMwNzAzMCIsCisJIklCTS1EVExBLTMwNzAyMCIsCisJIklCTS1EVExBLTMwNzAxNSIsCisJIklCTS1EVExBLTMwNTA0MCIsCisJIklCTS1EVExBLTMwNTAzMCIsCisJIklCTS1EVExBLTMwNTAyMCIsCisJIklDMzVMMDEwQVZFUjA3LTAiLAorCSJJQzM1TDAyMEFWRVIwNy0wIiwKKwkiSUMzNUwwMzBBVkVSMDctMCIsCisJIklDMzVMMDQwQVZFUjA3LTAiLAorCSJJQzM1TDA2MEFWRVIwNy0wIiwKKwkiV0RDIEFDMzEwMjAwUiIsCisJIk1BWFRPUiBTVE0zMzIwNjIwQSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJhZF9hdGE2Nl8zW10gPSB7CisJIldEQyBBQzMxMDIwMFIiLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpiYWRfYXRhMzNbXSA9IHsKKwkiTWF4dG9yIDkyNzIwVTgiLCAiTWF4dG9yIDkyMDQwVTYiLCAiTWF4dG9yIDkxMzYwVTQiLCAiTWF4dG9yIDkxMDIwVTMiLCAiTWF4dG9yIDkwODQ1VTMiLCAiTWF4dG9yIDkwNjUwVTIiLAorCSJNYXh0b3IgOTEzNjBEOCIsICJNYXh0b3IgOTExOTBENyIsICJNYXh0b3IgOTEwMjBENiIsICJNYXh0b3IgOTA4NDVENSIsICJNYXh0b3IgOTA2ODBENCIsICJNYXh0b3IgOTA1MTBEMyIsICJNYXh0b3IgOTAzNDBEMiIsCisJIk1heHRvciA5MTE1MkQ4IiwgIk1heHRvciA5MTAwOEQ3IiwgIk1heHRvciA5MDg0NUQ2IiwgIk1heHRvciA5MDg0MEQ2IiwgIk1heHRvciA5MDcyMEQ1IiwgIk1heHRvciA5MDY0OEQ1IiwgIk1heHRvciA5MDU3NkQ0IiwKKwkiTWF4dG9yIDkwNTEwRDQiLAorCSJNYXh0b3IgOTA0MzJEMyIsICJNYXh0b3IgOTAyODhEMiIsICJNYXh0b3IgOTAyNTZEMiIsCisJIk1heHRvciA5MTAwMEQ4IiwgIk1heHRvciA5MDkxMEQ4IiwgIk1heHRvciA5MDg3NUQ3IiwgIk1heHRvciA5MDg0MEQ3IiwgIk1heHRvciA5MDc1MEQ2IiwgIk1heHRvciA5MDYyNUQ1IiwgIk1heHRvciA5MDUwMEQ0IiwKKwkiTWF4dG9yIDkxNzI4RDgiLCAiTWF4dG9yIDkxNTEyRDciLCAiTWF4dG9yIDkxMzAzRDYiLCAiTWF4dG9yIDkxMDgwRDUiLCAiTWF4dG9yIDkwODQ1RDQiLCAiTWF4dG9yIDkwNjgwRDQiLCAiTWF4dG9yIDkwNjQ4RDMiLCAiTWF4dG9yIDkwNDMyRDIiLAorCU5VTEwKK307CisKK3N0YXRpYyB1OCB4ZmVyX3NwZWVkc1tdID0geworCVhGRVJfVURNQV82LAorCVhGRVJfVURNQV81LAorCVhGRVJfVURNQV80LAorCVhGRVJfVURNQV8zLAorCVhGRVJfVURNQV8yLAorCVhGRVJfVURNQV8xLAorCVhGRVJfVURNQV8wLAorCisJWEZFUl9NV19ETUFfMiwKKwlYRkVSX01XX0RNQV8xLAorCVhGRVJfTVdfRE1BXzAsCisKKwlYRkVSX1BJT180LAorCVhGRVJfUElPXzMsCisJWEZFUl9QSU9fMiwKKwlYRkVSX1BJT18xLAorCVhGRVJfUElPXzAKK307CisKKy8qIEtleSBmb3IgYnVzIGNsb2NrIHRpbWluZ3MKKyAqIDM2eCAgIDM3eAorICogYml0cyAgYml0cworICogMDozCSAwOjMJZGF0YV9oaWdoX3RpbWUuIEluYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcgRE1BLgorICoJCWN5Y2xlcyA9IHZhbHVlICsgMQorICogNDo3CSA0OjgJZGF0YV9sb3dfdGltZS4gQWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcgRE1BLgorICoJCWN5Y2xlcyA9IHZhbHVlICsgMQorICogODoxMSAgOToxMgljbWRfaGlnaF90aW1lLiBJbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKKyAqCQlyZWdpc3RlciBhY2Nlc3MuCisgKiAxMjoxNSAxMzoxNwljbWRfbG93X3RpbWUuIEFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKKyAqCQlyZWdpc3RlciBhY2Nlc3MuCisgKiAxNjoxOCAxODoyMAl1ZG1hX2N5Y2xlX3RpbWUuIENsb2NrIGN5Y2xlcyBmb3IgVURNQSB4ZmVyLgorICogLQkgMjEJQ0xLIGZyZXF1ZW5jeTogMD1BVEEgY2xvY2ssIDE9ZHVhbCBBVEEgY2xvY2suCisgKiAxOToyMSAyMjoyNAlwcmVfaGlnaF90aW1lLiBUaW1lIHRvIGluaXRpYWxpemUgdGhlIDFzdCBjeWNsZSBmb3IgUElPIGFuZAorICoJCU1XIERNQSB4ZmVyLgorICogMjI6MjQgMjU6MjcJY21kX3ByZV9oaWdoX3RpbWUuIFRpbWUgdG8gaW5pdGlhbGl6ZSB0aGUgMXN0IFBJTyBjeWNsZSBmb3IKKyAqCQl0YXNrIGZpbGUgcmVnaXN0ZXIgYWNjZXNzLgorICogMjgJIDI4CVVETUEgZW5hYmxlLgorICogMjkJIDI5CURNQSAgZW5hYmxlLgorICogMzAJIDMwCVBJTyBNU1QgZW5hYmxlLiBJZiBzZXQsIHRoZSBjaGlwIGlzIGluIGJ1cyBtYXN0ZXIgbW9kZSBkdXJpbmcKKyAqCQlQSU8geGZlci4KKyAqIDMxCSAzMQlGSUZPIGVuYWJsZS4KKyAqLworCitzdGF0aWMgdTMyIGZvcnR5X2Jhc2VfaHB0MzZ4W10gPSB7CisJLyogWEZFUl9VRE1BXzYgKi8JMHg5MDBmZDk0MywKKwkvKiBYRkVSX1VETUFfNSAqLwkweDkwMGZkOTQzLAorCS8qIFhGRVJfVURNQV80ICovCTB4OTAwZmQ5NDMsCisJLyogWEZFUl9VRE1BXzMgKi8JMHg5MDBhZDk0MywKKwkvKiBYRkVSX1VETUFfMiAqLwkweDkwMGJkOTQzLAorCS8qIFhGRVJfVURNQV8xICovCTB4OTAwOGQ5NDMsCisJLyogWEZFUl9VRE1BXzAgKi8JMHg5MDA4ZDk0MywKKworCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHhhMDA4ZDk0MywKKwkvKiBYRkVSX01XX0RNQV8xICovCTB4YTAxMGQ5NTUsCisJLyogWEZFUl9NV19ETUFfMCAqLwkweGEwMTBkOWZjLAorCisJLyogWEZFUl9QSU9fNCAqLwkweGMwMDhkOTYzLAorCS8qIFhGRVJfUElPXzMgKi8JMHhjMDEwZDk3NCwKKwkvKiBYRkVSX1BJT18yICovCTB4YzAxMGQ5OTcsCisJLyogWEZFUl9QSU9fMSAqLwkweGMwMTBkOWM3LAorCS8qIFhGRVJfUElPXzAgKi8JMHhjMDE4ZDlkOQorfTsKKworc3RhdGljIHUzMiB0aGlydHlfdGhyZWVfYmFzZV9ocHQzNnhbXSA9IHsKKwkvKiBYRkVSX1VETUFfNiAqLwkweDkwYzlhNzMxLAorCS8qIFhGRVJfVURNQV81ICovCTB4OTBjOWE3MzEsCisJLyogWEZFUl9VRE1BXzQgKi8JMHg5MGM5YTczMSwKKwkvKiBYRkVSX1VETUFfMyAqLwkweDkwY2ZhNzMxLAorCS8qIFhGRVJfVURNQV8yICovCTB4OTBjYWE3MzEsCisJLyogWEZFUl9VRE1BXzEgKi8JMHg5MGNiYTczMSwKKwkvKiBYRkVSX1VETUFfMCAqLwkweDkwYzhhNzMxLAorCisJLyogWEZFUl9NV19ETUFfMiAqLwkweGEwYzhhNzMxLAorCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHhhMGM4YTczMiwJLyogMHhhMGM4YTczMyAqLworCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHhhMGM4YTc5NywKKworCS8qIFhGRVJfUElPXzQgKi8JMHhjMGM4YTczMSwKKwkvKiBYRkVSX1BJT18zICovCTB4YzBjOGE3NDIsCisJLyogWEZFUl9QSU9fMiAqLwkweGMwZDBhNzUzLAorCS8qIFhGRVJfUElPXzEgKi8JMHhjMGQwYTdhMywJLyogMHhjMGQwYTc5MyAqLworCS8qIFhGRVJfUElPXzAgKi8JMHhjMGQwYTdhYQkvKiAweGMwZDBhN2E3ICovCit9OworCitzdGF0aWMgdTMyIHR3ZW50eV9maXZlX2Jhc2VfaHB0MzZ4W10gPSB7CisJLyogWEZFUl9VRE1BXzYgKi8JMHg5MGM5ODUyMSwKKwkvKiBYRkVSX1VETUFfNSAqLwkweDkwYzk4NTIxLAorCS8qIFhGRVJfVURNQV80ICovCTB4OTBjOTg1MjEsCisJLyogWEZFUl9VRE1BXzMgKi8JMHg5MGNmODUyMSwKKwkvKiBYRkVSX1VETUFfMiAqLwkweDkwY2Y4NTIxLAorCS8qIFhGRVJfVURNQV8xICovCTB4OTBjYjg1MjEsCisJLyogWEZFUl9VRE1BXzAgKi8JMHg5MGNiODUyMSwKKworCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHhhMGNhODUyMSwKKwkvKiBYRkVSX01XX0RNQV8xICovCTB4YTBjYTg1MzIsCisJLyogWEZFUl9NV19ETUFfMCAqLwkweGEwY2E4NTc1LAorCisJLyogWEZFUl9QSU9fNCAqLwkweGMwY2E4NTIxLAorCS8qIFhGRVJfUElPXzMgKi8JMHhjMGNhODUzMiwKKwkvKiBYRkVSX1BJT18yICovCTB4YzBjYTg1NDIsCisJLyogWEZFUl9QSU9fMSAqLwkweGMwZDA4NTcyLAorCS8qIFhGRVJfUElPXzAgKi8JMHhjMGQwODU4NQorfTsKKworI2lmIDAKKy8qIFRoZXNlIGFyZSB0aGUgdGltaW5nIHRhYmxlcyBmcm9tIHRoZSBIaWdoUG9pbnQgb3BlbiBzb3VyY2UgZHJpdmVycy4uLiAqLworc3RhdGljIHUzMiB0aGlydHlfdGhyZWVfYmFzZV9ocHQzN3hbXSA9IHsKKwkvKiBYRkVSX1VETUFfNiAqLwkweDEyNDQ2MjMxLAkvKiAweDEyNjQ2MjMxID8/ICovCisJLyogWEZFUl9VRE1BXzUgKi8JMHgxMjQ0NjIzMSwKKwkvKiBYRkVSX1VETUFfNCAqLwkweDEyNDQ2MjMxLAorCS8qIFhGRVJfVURNQV8zICovCTB4MTI2YzYyMzEsCisJLyogWEZFUl9VRE1BXzIgKi8JMHgxMjQ4NjIzMSwKKwkvKiBYRkVSX1VETUFfMSAqLwkweDEyNGM2MjMzLAorCS8qIFhGRVJfVURNQV8wICovCTB4MTI1MDYyOTcsCisKKwkvKiBYRkVSX01XX0RNQV8yICovCTB4MjI0MDZjMzEsCisJLyogWEZFUl9NV19ETUFfMSAqLwkweDIyNDA2YzMzLAorCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHgyMjQwNmM5NywKKworCS8qIFhGRVJfUElPXzQgKi8JMHgwNjQxNGUzMSwKKwkvKiBYRkVSX1BJT18zICovCTB4MDY0MTRlNDIsCisJLyogWEZFUl9QSU9fMiAqLwkweDA2NDE0ZTUzLAorCS8qIFhGRVJfUElPXzEgKi8JMHgwNjgxNGU5MywKKwkvKiBYRkVSX1BJT18wICovCTB4MDY4MTRlYTcKK307CisKK3N0YXRpYyB1MzIgZmlmdHlfYmFzZV9ocHQzN3hbXSA9IHsKKwkvKiBYRkVSX1VETUFfNiAqLwkweDEyODQ4MjQyLAorCS8qIFhGRVJfVURNQV81ICovCTB4MTI4NDgyNDIsCisJLyogWEZFUl9VRE1BXzQgKi8JMHgxMmFjODI0MiwKKwkvKiBYRkVSX1VETUFfMyAqLwkweDEyOGM4MjQyLAorCS8qIFhGRVJfVURNQV8yICovCTB4MTIwYzgyNDIsCisJLyogWEZFUl9VRE1BXzEgKi8JMHgxMjE0ODI1NCwKKwkvKiBYRkVSX1VETUFfMCAqLwkweDEyMTg4MmVhLAorCisJLyogWEZFUl9NV19ETUFfMiAqLwkweDIyODA4MjQyLAorCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHgyMjgwODI1NCwKKwkvKiBYRkVSX01XX0RNQV8wICovCTB4MjI4MDgyZWEsCisKKwkvKiBYRkVSX1BJT180ICovCTB4MGE4MWY0NDIsCisJLyogWEZFUl9QSU9fMyAqLwkweDBhODFmNDQzLAorCS8qIFhGRVJfUElPXzIgKi8JMHgwYTgxZjQ1NCwKKwkvKiBYRkVSX1BJT18xICovCTB4MGFjMWY0NjUsCisJLyogWEZFUl9QSU9fMCAqLwkweDBhYzFmNDhhCit9OworCitzdGF0aWMgdTMyIHNpeHR5X3NpeF9iYXNlX2hwdDM3eFtdID0geworCS8qIFhGRVJfVURNQV82ICovCTB4MWM4NjljNjIsCisJLyogWEZFUl9VRE1BXzUgKi8JMHgxY2FlOWM2MiwJLyogMHgxYzhhOWM2MiAqLworCS8qIFhGRVJfVURNQV80ICovCTB4MWM4YTljNjIsCisJLyogWEZFUl9VRE1BXzMgKi8JMHgxYzhlOWM2MiwKKwkvKiBYRkVSX1VETUFfMiAqLwkweDFjOTI5YzYyLAorCS8qIFhGRVJfVURNQV8xICovCTB4MWM5YTljNjIsCisJLyogWEZFUl9VRE1BXzAgKi8JMHgxYzgyOWM2MiwKKworCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHgyYzgyOWM2MiwKKwkvKiBYRkVSX01XX0RNQV8xICovCTB4MmM4MjljNjYsCisJLyogWEZFUl9NV19ETUFfMCAqLwkweDJjODI5ZDJlLAorCisJLyogWEZFUl9QSU9fNCAqLwkweDBjODI5YzYyLAorCS8qIFhGRVJfUElPXzMgKi8JMHgwYzgyOWM4NCwKKwkvKiBYRkVSX1BJT18yICovCTB4MGM4MjljYTYsCisJLyogWEZFUl9QSU9fMSAqLwkweDBkMDI5ZDI2LAorCS8qIFhGRVJfUElPXzAgKi8JMHgwZDAyOWQ1ZQorfTsKKyNlbHNlCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIG5ldyB0aW1pbmcgdGFibGVzIHdpdGggUElPIG1vZGUgZGF0YS90YXNrZmlsZSB0cmFuc2ZlcgorICogb3ZlcmNsb2NraW5nIGZpeGVkLi4uCisgKi8KKworLyogVGhpcyB0YWJsZSBpcyB0YWtlbiBmcm9tIHRoZSBIUFQzNzAgZGF0YSBtYW51YWwgcmV2LiAxLjAyICovCitzdGF0aWMgdTMyIHRoaXJ0eV90aHJlZV9iYXNlX2hwdDM3eFtdID0geworCS8qIFhGRVJfVURNQV82ICovCTB4MTY0NTUwMzEsCS8qIDB4MTY2NTUwMzEgPz8gKi8KKwkvKiBYRkVSX1VETUFfNSAqLwkweDE2NDU1MDMxLAorCS8qIFhGRVJfVURNQV80ICovCTB4MTY0NTUwMzEsCisJLyogWEZFUl9VRE1BXzMgKi8JMHgxNjZkNTAzMSwKKwkvKiBYRkVSX1VETUFfMiAqLwkweDE2NDk1MDMxLAorCS8qIFhGRVJfVURNQV8xICovCTB4MTY0ZDUwMzMsCisJLyogWEZFUl9VRE1BXzAgKi8JMHgxNjUxNTA5NywKKworCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHgyNjUxNTAzMSwKKwkvKiBYRkVSX01XX0RNQV8xICovCTB4MjY1MTUwMzMsCisJLyogWEZFUl9NV19ETUFfMCAqLwkweDI2NTE1MDk3LAorCisJLyogWEZFUl9QSU9fNCAqLwkweDA2NTE1MDIxLAorCS8qIFhGRVJfUElPXzMgKi8JMHgwNjUxNTAyMiwKKwkvKiBYRkVSX1BJT18yICovCTB4MDY1MTUwMzMsCisJLyogWEZFUl9QSU9fMSAqLwkweDA2OTE1MDY1LAorCS8qIFhGRVJfUElPXzAgKi8JMHgwNmQxNTA4YQorfTsKKworc3RhdGljIHUzMiBmaWZ0eV9iYXNlX2hwdDM3eFtdID0geworCS8qIFhGRVJfVURNQV82ICovCTB4MWE4NjE4NDIsCisJLyogWEZFUl9VRE1BXzUgKi8JMHgxYTg2MTg0MiwKKwkvKiBYRkVSX1VETUFfNCAqLwkweDFhYWUxODQyLAorCS8qIFhGRVJfVURNQV8zICovCTB4MWE4ZTE4NDIsCisJLyogWEZFUl9VRE1BXzIgKi8JMHgxYTBlMTg0MiwKKwkvKiBYRkVSX1VETUFfMSAqLwkweDFhMTYxODU0LAorCS8qIFhGRVJfVURNQV8wICovCTB4MWExYTE4ZWEsCisKKwkvKiBYRkVSX01XX0RNQV8yICovCTB4MmE4MjE4NDIsCisJLyogWEZFUl9NV19ETUFfMSAqLwkweDJhODIxODU0LAorCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHgyYTgyMThlYSwKKworCS8qIFhGRVJfUElPXzQgKi8JMHgwYTgyMTg0MiwKKwkvKiBYRkVSX1BJT18zICovCTB4MGE4MjE4NDMsCisJLyogWEZFUl9QSU9fMiAqLwkweDBhODIxODU1LAorCS8qIFhGRVJfUElPXzEgKi8JMHgwYWMyMThhOCwKKwkvKiBYRkVSX1BJT18wICovCTB4MGIwMjE5MGMKK307CisKK3N0YXRpYyB1MzIgc2l4dHlfc2l4X2Jhc2VfaHB0Mzd4W10gPSB7CisJLyogWEZFUl9VRE1BXzYgKi8JMHgxYzg2ZmU2MiwKKwkvKiBYRkVSX1VETUFfNSAqLwkweDFjYWVmZTYyLAkvKiAweDFjOGFmZTYyICovCisJLyogWEZFUl9VRE1BXzQgKi8JMHgxYzhhZmU2MiwKKwkvKiBYRkVSX1VETUFfMyAqLwkweDFjOGVmZTYyLAorCS8qIFhGRVJfVURNQV8yICovCTB4MWM5MmZlNjIsCisJLyogWEZFUl9VRE1BXzEgKi8JMHgxYzlhZmU2MiwKKwkvKiBYRkVSX1VETUFfMCAqLwkweDFjODJmZTYyLAorCisJLyogWEZFUl9NV19ETUFfMiAqLwkweDJjODJmZTYyLAorCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHgyYzgyZmU2NiwKKwkvKiBYRkVSX01XX0RNQV8wICovCTB4MmM4MmZmMmUsCisKKwkvKiBYRkVSX1BJT180ICovCTB4MGM4MmZlNjIsCisJLyogWEZFUl9QSU9fMyAqLwkweDBjODJmZTg0LAorCS8qIFhGRVJfUElPXzIgKi8JMHgwYzgyZmVhNiwKKwkvKiBYRkVSX1BJT18xICovCTB4MGQwMmZmMjYsCisJLyogWEZFUl9QSU9fMCAqLwkweDBkNDJmZjdmCit9OworI2VuZGlmCisKKyNkZWZpbmUgSFBUMzY2X0RFQlVHX0RSSVZFX0lORk8JCTAKKyNkZWZpbmUgSFBUMzcxX0FMTE9XX0FUQTEzM182CQkxCisjZGVmaW5lIEhQVDMwMl9BTExPV19BVEExMzNfNgkJMQorI2RlZmluZSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYJCTEKKyNkZWZpbmUgSFBUMzcwX0FMTE9XX0FUQTEwMF81CQkwCisjZGVmaW5lIEhQVDM2Nl9BTExPV19BVEE2Nl80CQkxCisjZGVmaW5lIEhQVDM2Nl9BTExPV19BVEE2Nl8zCQkxCisjZGVmaW5lIEhQVDM2Nl9NQVhfREVWUwkJCTgKKworLyogU3VwcG9ydGVkIEFUQSBjbG9jayBmcmVxdWVuY2llcyAqLworZW51bSBhdGFfY2xvY2sgeworCUFUQV9DTE9DS18yNU1IWiwKKwlBVEFfQ0xPQ0tfMzNNSFosCisJQVRBX0NMT0NLXzQwTUhaLAorCUFUQV9DTE9DS181ME1IWiwKKwlBVEFfQ0xPQ0tfNjZNSFosCisJTlVNX0FUQV9DTE9DS1MKK307CisKK3N0cnVjdCBocHRfdGltaW5ncyB7CisJdTMyIHBpb19tYXNrOworCXUzMiBkbWFfbWFzazsKKwl1MzIgdWx0cmFfbWFzazsKKwl1MzIgKmNsb2NrX3RhYmxlW05VTV9BVEFfQ0xPQ0tTXTsKK307CisKKy8qCisgKglIb2xkIGFsbCB0aGUgSGlnaFBvaW50IGNoaXAgaW5mb3JtYXRpb24gaW4gb25lIHBsYWNlLgorICovCisKK3N0cnVjdCBocHRfaW5mbyB7CisJY2hhciAqY2hpcF9uYW1lOwkvKiBDaGlwIG5hbWUgKi8KKwl1OCBjaGlwX3R5cGU7CQkvKiBDaGlwIHR5cGUgKi8KKwl1OCB1ZG1hX21hc2s7CQkvKiBBbGxvd2VkIFVsdHJhRE1BIG1vZGVzIG1hc2suICovCisJdTggZHBsbF9jbGs7CQkvKiBEUExMIGNsb2NrIGluIE1IeiAqLworCXU4IHBjaV9jbGs7CQkvKiBQQ0kgIGNsb2NrIGluIE1IeiAqLworCXN0cnVjdCBocHRfdGltaW5ncyAqdGltaW5nczsgLyogQ2hpcHNldCB0aW1pbmcgZGF0YSAqLworCXU4IGNsb2NrOwkJLyogQVRBIGNsb2NrIHNlbGVjdGVkICovCit9OworCisvKiBTdXBwb3J0ZWQgSGlnaFBvaW50IGNoaXBzICovCitlbnVtIHsKKwlIUFQzNngsCisJSFBUMzcwLAorCUhQVDM3MEEsCisJSFBUMzc0LAorCUhQVDM3MiwKKwlIUFQzNzJBLAorCUhQVDMwMiwKKwlIUFQzNzEsCisJSFBUMzcyTiwKKwlIUFQzMDJOLAorCUhQVDM3MU4KK307CisKK3N0YXRpYyBzdHJ1Y3QgaHB0X3RpbWluZ3MgaHB0MzZ4X3RpbWluZ3MgPSB7CisJLnBpb19tYXNrCT0gMHhjMWY4ZmZmZiwKKwkuZG1hX21hc2sJPSAweDMwMzgwMGZmLAorCS51bHRyYV9tYXNrCT0gMHgzMDA3MDAwMCwKKwkuY2xvY2tfdGFibGUJPSB7CisJCVtBVEFfQ0xPQ0tfMjVNSFpdID0gdHdlbnR5X2ZpdmVfYmFzZV9ocHQzNngsCisJCVtBVEFfQ0xPQ0tfMzNNSFpdID0gdGhpcnR5X3RocmVlX2Jhc2VfaHB0MzZ4LAorCQlbQVRBX0NMT0NLXzQwTUhaXSA9IGZvcnR5X2Jhc2VfaHB0MzZ4LAorCQlbQVRBX0NMT0NLXzUwTUhaXSA9IE5VTEwsCisJCVtBVEFfQ0xPQ0tfNjZNSFpdID0gTlVMTAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaHB0X3RpbWluZ3MgaHB0Mzd4X3RpbWluZ3MgPSB7CisJLnBpb19tYXNrCT0gMHhjZmMzZmZmZiwKKwkuZG1hX21hc2sJPSAweDMxYzAwMWZmLAorCS51bHRyYV9tYXNrCT0gMHgzMDNjMDAwMCwKKwkuY2xvY2tfdGFibGUJPSB7CisJCVtBVEFfQ0xPQ0tfMjVNSFpdID0gTlVMTCwKKwkJW0FUQV9DTE9DS18zM01IWl0gPSB0aGlydHlfdGhyZWVfYmFzZV9ocHQzN3gsCisJCVtBVEFfQ0xPQ0tfNDBNSFpdID0gTlVMTCwKKwkJW0FUQV9DTE9DS181ME1IWl0gPSBmaWZ0eV9iYXNlX2hwdDM3eCwKKwkJW0FUQV9DTE9DS182Nk1IWl0gPSBzaXh0eV9zaXhfYmFzZV9ocHQzN3gKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM2eCBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzZ4IiwKKwkuY2hpcF90eXBlCT0gSFBUMzZ4LAorCS51ZG1hX21hc2sJPSBIUFQzNjZfQUxMT1dfQVRBNjZfMyA/IChIUFQzNjZfQUxMT1dfQVRBNjZfNCA/IEFUQV9VRE1BNCA6IEFUQV9VRE1BMykgOiBBVEFfVURNQTIsCisJLmRwbGxfY2xrCT0gMCwJLyogbm8gRFBMTCAqLworCS50aW1pbmdzCT0gJmhwdDM2eF90aW1pbmdzCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM3MCBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcwIiwKKwkuY2hpcF90eXBlCT0gSFBUMzcwLAorCS51ZG1hX21hc2sJPSBIUFQzNzBfQUxMT1dfQVRBMTAwXzUgPyBBVEFfVURNQTUgOiBBVEFfVURNQTQsCisJLmRwbGxfY2xrCT0gNDgsCisJLnRpbWluZ3MJPSAmaHB0Mzd4X3RpbWluZ3MKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHB0X2luZm8gaHB0MzcwYSBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcwQSIsCisJLmNoaXBfdHlwZQk9IEhQVDM3MEEsCisJLnVkbWFfbWFzawk9IEhQVDM3MF9BTExPV19BVEExMDBfNSA/IEFUQV9VRE1BNSA6IEFUQV9VRE1BNCwKKwkuZHBsbF9jbGsJPSA0OCwKKwkudGltaW5ncwk9ICZocHQzN3hfdGltaW5ncworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzNzQgX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDM3NCIsCisJLmNoaXBfdHlwZQk9IEhQVDM3NCwKKwkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAorCS5kcGxsX2Nsawk9IDQ4LAorCS50aW1pbmdzCT0gJmhwdDM3eF90aW1pbmdzCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM3MiBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcyIiwKKwkuY2hpcF90eXBlCT0gSFBUMzcyLAorCS51ZG1hX21hc2sJPSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYgPyBBVEFfVURNQTYgOiBBVEFfVURNQTUsCisJLmRwbGxfY2xrCT0gNTUsCisJLnRpbWluZ3MJPSAmaHB0Mzd4X3RpbWluZ3MKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHB0X2luZm8gaHB0MzcyYSBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcyQSIsCisJLmNoaXBfdHlwZQk9IEhQVDM3MkEsCisJLnVkbWFfbWFzawk9IEhQVDM3Ml9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKKwkuZHBsbF9jbGsJPSA2NiwKKwkudGltaW5ncwk9ICZocHQzN3hfdGltaW5ncworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzMDIgX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDMwMiIsCisJLmNoaXBfdHlwZQk9IEhQVDMwMiwKKwkudWRtYV9tYXNrCT0gSFBUMzAyX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAorCS5kcGxsX2Nsawk9IDY2LAorCS50aW1pbmdzCT0gJmhwdDM3eF90aW1pbmdzCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM3MSBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcxIiwKKwkuY2hpcF90eXBlCT0gSFBUMzcxLAorCS51ZG1hX21hc2sJPSBIUFQzNzFfQUxMT1dfQVRBMTMzXzYgPyBBVEFfVURNQTYgOiBBVEFfVURNQTUsCisJLmRwbGxfY2xrCT0gNjYsCisJLnRpbWluZ3MJPSAmaHB0Mzd4X3RpbWluZ3MKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHB0X2luZm8gaHB0MzcybiBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcyTiIsCisJLmNoaXBfdHlwZQk9IEhQVDM3Mk4sCisJLnVkbWFfbWFzawk9IEhQVDM3Ml9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKKwkuZHBsbF9jbGsJPSA3NywKKwkudGltaW5ncwk9ICZocHQzN3hfdGltaW5ncworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzMDJuIF9fZGV2aW5pdGRhdGEgPSB7CisJLmNoaXBfbmFtZQk9ICJIUFQzMDJOIiwKKwkuY2hpcF90eXBlCT0gSFBUMzAyTiwKKwkudWRtYV9tYXNrCT0gSFBUMzAyX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAorCS5kcGxsX2Nsawk9IDc3LAorCS50aW1pbmdzCT0gJmhwdDM3eF90aW1pbmdzCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM3MW4gX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDM3MU4iLAorCS5jaGlwX3R5cGUJPSBIUFQzNzFOLAorCS51ZG1hX21hc2sJPSBIUFQzNzFfQUxMT1dfQVRBMTMzXzYgPyBBVEFfVURNQTYgOiBBVEFfVURNQTUsCisJLmRwbGxfY2xrCT0gNzcsCisJLnRpbWluZ3MJPSAmaHB0Mzd4X3RpbWluZ3MKK307CisKK3N0YXRpYyBpbnQgY2hlY2tfaW5fZHJpdmVfbGlzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKipsaXN0KQoreworCWNoYXIgKm0gPSAoY2hhciAqKSZkcml2ZS0+aWRbQVRBX0lEX1BST0RdOworCisJd2hpbGUgKCpsaXN0KQorCQlpZiAoIXN0cmNtcCgqbGlzdCsrLCBtKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGhwdF9pbmZvICpocHQzeHhfZ2V0X2luZm8oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdAk9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IChzdHJ1Y3QgaHB0X2luZm8gKilob3N0LT5ob3N0X3ByaXY7CisKKwlyZXR1cm4gZGV2ID09IGhvc3QtPmRldlsxXSA/IGluZm8gKyAxIDogaW5mbzsKK30KKworLyoKKyAqIFRoZSBNYXJ2ZWxsIGJyaWRnZSBjaGlwcyB1c2VkIG9uIHRoZSBIaWdoUG9pbnQgU0FUQSBjYXJkcyBkbyBub3Qgc2VlbQorICogdG8gc3VwcG9ydCB0aGUgVWx0cmFETUEgbW9kZXMgMSwgMiwgYW5kIDMgYXMgd2VsbCBhcyBhbnkgTVdETUEgbW9kZXMuLi4KKyAqLworCitzdGF0aWMgdTggaHB0M3h4X3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CisJc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7CisJdTggbWFzayAJCT0gaHdpZi0+dWx0cmFfbWFzazsKKworCXN3aXRjaCAoaW5mby0+Y2hpcF90eXBlKSB7CisJY2FzZSBIUFQzNng6CisJCWlmICghSFBUMzY2X0FMTE9XX0FUQTY2XzQgfHwKKwkJICAgIGNoZWNrX2luX2RyaXZlX2xpc3QoZHJpdmUsIGJhZF9hdGE2Nl80KSkKKwkJCW1hc2sgPSBBVEFfVURNQTM7CisKKwkJaWYgKCFIUFQzNjZfQUxMT1dfQVRBNjZfMyB8fAorCQkgICAgY2hlY2tfaW5fZHJpdmVfbGlzdChkcml2ZSwgYmFkX2F0YTY2XzMpKQorCQkJbWFzayA9IEFUQV9VRE1BMjsKKwkJYnJlYWs7CisJY2FzZSBIUFQzNzA6CisJCWlmICghSFBUMzcwX0FMTE9XX0FUQTEwMF81IHx8CisJCSAgICBjaGVja19pbl9kcml2ZV9saXN0KGRyaXZlLCBiYWRfYXRhMTAwXzUpKQorCQkJbWFzayA9IEFUQV9VRE1BNDsKKwkJYnJlYWs7CisJY2FzZSBIUFQzNzBBOgorCQlpZiAoIUhQVDM3MF9BTExPV19BVEExMDBfNSB8fAorCQkgICAgY2hlY2tfaW5fZHJpdmVfbGlzdChkcml2ZSwgYmFkX2F0YTEwMF81KSkKKwkJCXJldHVybiBBVEFfVURNQTQ7CisJY2FzZSBIUFQzNzIgOgorCWNhc2UgSFBUMzcyQToKKwljYXNlIEhQVDM3Mk46CisJY2FzZSBIUFQzNzQgOgorCQlpZiAoYXRhX2lkX2lzX3NhdGEoZHJpdmUtPmlkKSkKKwkJCW1hc2sgJj0gfjB4MGU7CisJCS8qIEZhbGwgdGhydSAqLworCWRlZmF1bHQ6CisJCXJldHVybiBtYXNrOworCX0KKworCXJldHVybiBjaGVja19pbl9kcml2ZV9saXN0KGRyaXZlLCBiYWRfYXRhMzMpID8gMHgwMCA6IG1hc2s7Cit9CisKK3N0YXRpYyB1OCBocHQzeHhfbWRtYV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKKworCXN3aXRjaCAoaW5mby0+Y2hpcF90eXBlKSB7CisJY2FzZSBIUFQzNzIgOgorCWNhc2UgSFBUMzcyQToKKwljYXNlIEhQVDM3Mk46CisJY2FzZSBIUFQzNzQgOgorCQlpZiAoYXRhX2lkX2lzX3NhdGEoZHJpdmUtPmlkKSkKKwkJCXJldHVybiAweDAwOworCQkvKiBGYWxsIHRocnUgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gMHgwNzsKKwl9Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3NwZWVkX3NldHRpbmcodTggc3BlZWQsIHN0cnVjdCBocHRfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKworCS8qCisJICogTG9va3VwIHRoZSB0cmFuc2ZlciBtb2RlIHRhYmxlIHRvIGdldCB0aGUgaW5kZXggaW50bworCSAqIHRoZSB0aW1pbmcgdGFibGUuCisJICoKKwkgKiBOT1RFOiBGb3IgWEZFUl9QSU9fU0xPVywgUElPIG1vZGUgMCB0aW1pbmdzIHdpbGwgYmUgdXNlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4ZmVyX3NwZWVkcykgLSAxOyBpKyspCisJCWlmICh4ZmVyX3NwZWVkc1tpXSA9PSBzcGVlZCkKKwkJCWJyZWFrOworCisJcmV0dXJuIGluZm8tPnRpbWluZ3MtPmNsb2NrX3RhYmxlW2luZm8tPmNsb2NrXVtpXTsKK30KKworc3RhdGljIHZvaWQgaHB0M3h4X3NldF9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCit7CisJaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOworCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CisJc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7CisJc3RydWN0IGhwdF90aW1pbmdzICp0CT0gaW5mby0+dGltaW5nczsKKwl1OCAgaXRyX2FkZHIJCT0gMHg0MCArIChkcml2ZS0+ZG4gKiA0KTsKKwl1MzIgb2xkX2l0cgkJPSAwOworCXUzMiBuZXdfaXRyCQk9IGdldF9zcGVlZF9zZXR0aW5nKHNwZWVkLCBpbmZvKTsKKwl1MzIgaXRyX21hc2sJCT0gc3BlZWQgPCBYRkVSX01XX0RNQV8wID8gdC0+cGlvX21hc2sgOgorCQkJCSAoc3BlZWQgPCBYRkVSX1VETUFfMCAgID8gdC0+ZG1hX21hc2sgOgorCQkJCQkJCSAgdC0+dWx0cmFfbWFzayk7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBpdHJfYWRkciwgJm9sZF9pdHIpOworCW5ld19pdHIgPSAob2xkX2l0ciAmIH5pdHJfbWFzaykgfCAobmV3X2l0ciAmIGl0cl9tYXNrKTsKKwkvKgorCSAqIERpc2FibGUgb24tY2hpcCBQSU8gRklGTy9idWZmZXIgKGFuZCBQSU8gTVNUIG1vZGUgYXMgd2VsbCkKKwkgKiB0byBhdm9pZCBwcm9ibGVtcyBoYW5kbGluZyBJL08gZXJyb3JzIGxhdGVyCisJICovCisJbmV3X2l0ciAmPSB+MHhjMDAwMDAwMDsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBpdHJfYWRkciwgbmV3X2l0cik7Cit9CisKK3N0YXRpYyB2b2lkIGhwdDN4eF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCit7CisJaHB0M3h4X3NldF9tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKK30KKworc3RhdGljIHZvaWQgaHB0M3h4X3F1aXJrcHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJY2hhciAqbQkJCT0gKGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXTsKKwljb25zdCAgY2hhciAqKmxpc3QJPSBxdWlya19kcml2ZXM7CisKKwl3aGlsZSAoKmxpc3QpCisJCWlmIChzdHJzdHIobSwgKmxpc3QrKykpIHsKKwkJCWRyaXZlLT5xdWlya19saXN0ID0gMTsKKwkJCXJldHVybjsKKwkJfQorCisJZHJpdmUtPnF1aXJrX2xpc3QgPSAwOworfQorCitzdGF0aWMgdm9pZCBocHQzeHhfbWFza3Byb2MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbWFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CisJc3RydWN0IHBjaV9kZXYJKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKKwlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKKworCWlmIChkcml2ZS0+cXVpcmtfbGlzdCA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoaW5mby0+Y2hpcF90eXBlID49IEhQVDM3MCkgeworCQl1OCBzY3IxID0gMDsKKworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWEsICZzY3IxKTsKKwkJaWYgKCgoc2NyMSAmIDB4MTApID4+IDQpICE9IG1hc2spIHsKKwkJCWlmIChtYXNrKQorCQkJCXNjcjEgfD0gIDB4MTA7CisJCQllbHNlCisJCQkJc2NyMSAmPSB+MHgxMDsKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NWEsIHNjcjEpOworCQl9CisJfSBlbHNlIGlmIChtYXNrKQorCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOworCWVsc2UKKwkJZW5hYmxlX2lycShod2lmLT5pcnEpOworfQorCisvKgorICogVGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgSFBUMzY2IFVETUEgY2hpcHNldAorICogYnkgSGlnaFBvaW50fFRyaW9uZXMgVGVjaG5vbG9naWVzLCBJbmMuCisgKi8KK3N0YXRpYyB2b2lkIGhwdDM2Nl9kbWFfbG9zdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOworCXU4IG1jcjEgPSAwLCBtY3IzID0gMCwgc2NyMSA9IDA7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZtY3IxKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTIsICZtY3IzKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWEsICZzY3IxKTsKKwlwcmludGsoIiVzOiAoJXMpICBtY3IxPTB4JTAyeCwgbWNyMz0weCUwMngsIHNjcjE9MHglMDJ4XG4iLAorCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sIG1jcjEsIG1jcjMsIHNjcjEpOworCWlmIChzY3IxICYgMHgxMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgc2NyMSAmIH4weDEwKTsKKwlpZGVfZG1hX2xvc3RfaXJxKGRyaXZlKTsKK30KKworc3RhdGljIHZvaWQgaHB0MzcwX2NsZWFyX2VuZ2luZShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBod2lmLT5zZWxlY3RfZGF0YSwgMHgzNyk7CisJdWRlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQgaHB0MzcwX2lycV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CisJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKKwl1MTYgYmZpZm8JCT0gMDsKKwl1OCAgZG1hX2NtZDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaHdpZi0+c2VsZWN0X2RhdGEgKyAyLCAmYmZpZm8pOworCXByaW50ayhLRVJOX0RFQlVHICIlczogJWQgYnl0ZXMgaW4gRklGT1xuIiwgZHJpdmUtPm5hbWUsIGJmaWZvICYgMHgxZmYpOworCisJLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KKwlkbWFfY21kID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOworCS8qIHN0b3AgRE1BICovCisJb3V0YihkbWFfY21kICYgfjB4MSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJaHB0MzcwX2NsZWFyX2VuZ2luZShkcml2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhwdDM3MF9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworI2lmZGVmIEhQVF9SRVNFVF9TVEFURV9FTkdJTkUKKwlocHQzNzBfY2xlYXJfZW5naW5lKGRyaXZlKTsKKyNlbmRpZgorCWlkZV9kbWFfc3RhcnQoZHJpdmUpOworfQorCitzdGF0aWMgaW50IGhwdDM3MF9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CisJdTggIGRtYV9zdGF0CQk9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKKworCWlmIChkbWFfc3RhdCAmIDB4MDEpIHsKKwkJLyogd2FpdCBhIGxpdHRsZSAqLworCQl1ZGVsYXkoMjApOworCQlkbWFfc3RhdCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKKwkJaWYgKGRtYV9zdGF0ICYgMHgwMSkKKwkJCWhwdDM3MF9pcnFfdGltZW91dChkcml2ZSk7CisJfQorCXJldHVybiBpZGVfZG1hX2VuZChkcml2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhwdDM3MF9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaHB0MzcwX2lycV90aW1lb3V0KGRyaXZlKTsKKwlpZGVfZG1hX3RpbWVvdXQoZHJpdmUpOworfQorCisvKiByZXR1cm5zIDEgaWYgRE1BIElSUSBpc3N1ZWQsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IGhwdDM3NF9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXUxNiBiZmlmbwkJPSAwOworCXU4ICBkbWFfc3RhdDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaHdpZi0+c2VsZWN0X2RhdGEgKyAyLCAmYmZpZm8pOworCWlmIChiZmlmbyAmIDB4MUZGKSB7CisvLwkJcHJpbnRrKCIlczogJWQgYnl0ZXMgaW4gRklGT1xuIiwgZHJpdmUtPm5hbWUsIGJmaWZvKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CisJLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLworCWlmIChkbWFfc3RhdCAmIDQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHB0Mzc0X2RtYV9lbmQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXU4IG1jcgk9IDAsIG1jcl9hZGRyCT0gaHdpZi0+c2VsZWN0X2RhdGE7CisJdTggYndzciA9IDAsIG1hc2sJPSBod2lmLT5jaGFubmVsID8gMHgwMiA6IDB4MDE7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NmEsICZid3NyKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIG1jcl9hZGRyLCAmbWNyKTsKKwlpZiAoYndzciAmIG1hc2spCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIG1jcl9hZGRyLCBtY3IgfCAweDMwKTsKKwlyZXR1cm4gaWRlX2RtYV9lbmQoZHJpdmUpOworfQorCisvKioKKyAqCWhwdDN4eG5fc2V0X2Nsb2NrCS0JcGVyZm9ybSBjbG9jayBzd2l0Y2hpbmcgZGFuY2UKKyAqCUBod2lmOiBod2lmIHRvIHN3aXRjaAorICoJQG1vZGU6IGNsb2NraW5nIG1vZGUgKDB4MjEgZm9yIHdyaXRlLCAweDIzIG90aGVyd2lzZSkKKyAqCisgKglTd2l0Y2ggdGhlIERQTEwgY2xvY2sgb24gdGhlIEhQVDN4eE4gZGV2aWNlcy4gVGhpcyBpcyBhCXJpZ2h0IG1lc3MuCisgKi8KKworc3RhdGljIHZvaWQgaHB0M3h4bl9zZXRfY2xvY2soaWRlX2h3aWZfdCAqaHdpZiwgdTggbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBod2lmLT5leHRyYV9iYXNlOworCXU4IHNjcjIgPSBpbmIoYmFzZSArIDB4NmIpOworCisJaWYgKChzY3IyICYgMHg3ZikgPT0gbW9kZSkKKwkJcmV0dXJuOworCisJLyogVHJpc3RhdGUgdGhlIGJ1cyAqLworCW91dGIoMHg4MCwgYmFzZSArIDB4NjMpOworCW91dGIoMHg4MCwgYmFzZSArIDB4NjcpOworCisJLyogU3dpdGNoIGNsb2NrIGFuZCByZXNldCBjaGFubmVscyAqLworCW91dGIobW9kZSwgYmFzZSArIDB4NmIpOworCW91dGIoMHhjMCwgYmFzZSArIDB4NjkpOworCisJLyoKKwkgKiBSZXNldCB0aGUgc3RhdGUgbWFjaGluZXMuCisJICogTk9URTogYXZvaWQgYWNjaWRlbnRhbGx5IGVuYWJsaW5nIHRoZSBkaXNhYmxlZCBjaGFubmVscy4KKwkgKi8KKwlvdXRiKGluYihiYXNlICsgMHg2MCkgfCAweDMyLCBiYXNlICsgMHg2MCk7CisJb3V0YihpbmIoYmFzZSArIDB4NjQpIHwgMHgzMiwgYmFzZSArIDB4NjQpOworCisJLyogQ29tcGxldGUgcmVzZXQgKi8KKwlvdXRiKDB4MDAsIGJhc2UgKyAweDY5KTsKKworCS8qIFJlY29ubmVjdCBjaGFubmVscyB0byBidXMgKi8KKwlvdXRiKDB4MDAsIGJhc2UgKyAweDYzKTsKKwlvdXRiKDB4MDAsIGJhc2UgKyAweDY3KTsKK30KKworLyoqCisgKglocHQzeHhuX3J3X2Rpc2sJCS0JcHJlcGFyZSBmb3IgSS9PCisgKglAZHJpdmU6IGRyaXZlIGZvciBjb21tYW5kCisgKglAcnE6IGJsb2NrIHJlcXVlc3Qgc3RydWN0dXJlCisgKgorICoJVGhpcyBpcyBjYWxsZWQgd2hlbiBhIGRpc2sgSS9PIGlzIGlzc3VlZCB0byBIUFQzeHhOLgorICoJV2UgbmVlZCBpdCBiZWNhdXNlIG9mIHRoZSBjbG9jayBzd2l0Y2hpbmcuCisgKi8KKworc3RhdGljIHZvaWQgaHB0M3h4bl9yd19kaXNrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWhwdDN4eG5fc2V0X2Nsb2NrKEhXSUYoZHJpdmUpLCBycV9kYXRhX2RpcihycSkgPyAweDIzIDogMHgyMSk7Cit9CisKKy8qKgorICoJaHB0Mzd4X2NhbGlicmF0ZV9kcGxsCS0JY2FsaWJyYXRlIHRoZSBEUExMCisgKglAZGV2OiBQQ0kgZGV2aWNlCisgKgorICoJUGVyZm9ybSBhIGNhbGlicmF0aW9uIGN5Y2xlIG9uIHRoZSBEUExMLgorICoJUmV0dXJucyAxIGlmIHRoaXMgc3VjY2VlZHMKKyAqLworc3RhdGljIGludCBocHQzN3hfY2FsaWJyYXRlX2RwbGwoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGZfbG93LCB1MTYgZl9oaWdoKQoreworCXUzMiBkcGxsID0gKGZfaGlnaCA8PCAxNikgfCBmX2xvdyB8IDB4MTAwOworCXU4ICBzY3IyOworCWludCBpOworCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NWMsIGRwbGwpOworCisJLyogV2FpdCBmb3Igb3NjaWxsYXRvciByZWFkeSAqLworCWZvcihpID0gMDsgaSA8IDB4NTAwMDsgKytpKSB7CisJCXVkZWxheSg1MCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YiwgJnNjcjIpOworCQlpZiAoc2NyMiAmIDB4ODApCisJCQlicmVhazsKKwl9CisJLyogU2VlIGlmIGl0IHN0YXlzIHJlYWR5ICh3ZSdsbCBqdXN0IGJhaWwgb3V0IGlmIGl0J3Mgbm90IHlldCkgKi8KKwlmb3IoaSA9IDA7IGkgPCAweDEwMDA7ICsraSkgeworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWIsICZzY3IyKTsKKwkJLyogRFBMTCBkZXN0YWJpbGl6ZWQ/ICovCisJCWlmKCEoc2NyMiAmIDB4ODApKQorCQkJcmV0dXJuIDA7CisJfQorCS8qIFR1cm4gb2ZmIHR1bmluZywgd2UgaGF2ZSB0aGUgRFBMTCBzZXQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQgKGRldiwgMHg1YywgJmRwbGwpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVjLCAoZHBsbCAmIH4weDEwMCkpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBocHQzeHhfZGlzYWJsZV9mYXN0X2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBtY3JfYWRkcikKK3sKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QJPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBob3N0LT5ob3N0X3ByaXYgKyAoJmRldi0+ZGV2ID09IGhvc3QtPmRldlsxXSk7CisJdTggIGNoaXBfdHlwZQkJPSBpbmZvLT5jaGlwX3R5cGU7CisJdTggIG5ld19tY3IsIG9sZF9tY3IJPSAwOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSAiZmFzdCBpbnRlcnJ1cHQiIHByZWRpY3Rpb24uICBEb24ndCBob2xkIG9mZgorCSAqIG9uIGludGVycnVwdHMuICg9PSAweDAxIGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpCisJICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciArIDEsICZvbGRfbWNyKTsKKworCWlmIChjaGlwX3R5cGUgPj0gSFBUMzc0KQorCQluZXdfbWNyID0gb2xkX21jciAmIH4weDA3OworCWVsc2UgaWYgKGNoaXBfdHlwZSA+PSBIUFQzNzApIHsKKwkJbmV3X21jciA9IG9sZF9tY3I7CisJCW5ld19tY3IgJj0gfjB4MDI7CisjaWZkZWYgSFBUX0RFTEFZX0lOVEVSUlVQVAorCQluZXdfbWNyICY9IH4weDAxOworI2Vsc2UKKwkJbmV3X21jciB8PSAgMHgwMTsKKyNlbmRpZgorCX0gZWxzZQkJCQkJLyogSFBUMzY2IGFuZCBIUFQzNjggICovCisJCW5ld19tY3IgPSBvbGRfbWNyICYgfjB4ODA7CisKKwlpZiAobmV3X21jciAhPSBvbGRfbWNyKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciArIDEsIG5ld19tY3IpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvX2Jhc2UJPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKKwlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oJmRldi0+ZGV2KTsKKwljb25zdCBjaGFyICpuYW1lCT0gRFJWX05BTUU7CisJdTggcGNpX2NsaywgIGRwbGxfY2xrCT0gMDsJLyogUENJIGFuZCBEUExMIGNsb2NrIGluIE1IeiAqLworCXU4IGNoaXBfdHlwZTsKKwllbnVtIGF0YV9jbG9jawljbG9jazsKKworCWNoaXBfdHlwZSA9IGluZm8tPmNoaXBfdHlwZTsKKworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIChMMV9DQUNIRV9CWVRFUyAvIDQpKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg3OCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX01JTl9HTlQsIDB4MDgpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9NQVhfTEFULCAweDA4KTsKKworCS8qCisJICogRmlyc3QsIHRyeSB0byBlc3RpbWF0ZSB0aGUgUENJIGNsb2NrIGZyZXF1ZW5jeS4uLgorCSAqLworCWlmIChjaGlwX3R5cGUgPj0gSFBUMzcwKSB7CisJCXU4ICBzY3IxICA9IDA7CisJCXUxNiBmX2NudCA9IDA7CisJCXUzMiB0ZW1wICA9IDA7CisKKwkJLyogSW50ZXJydXB0IGZvcmNlIGVuYWJsZS4gKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7CisJCWlmIChzY3IxICYgMHgxMCkKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NWEsIHNjcjEgJiB+MHgxMCk7CisKKwkJLyoKKwkJICogSGlnaFBvaW50IGRvZXMgdGhpcyBmb3IgSFBUMzcyQS4KKwkJICogTk9URTogVGhpcyByZWdpc3RlciBpcyBvbmx5IHdyaXRlYWJsZSB2aWEgSS9PIHNwYWNlLgorCQkgKi8KKwkJaWYgKGNoaXBfdHlwZSA9PSBIUFQzNzJBKQorCQkJb3V0YigweDBlLCBpb19iYXNlICsgMHg5Yyk7CisKKwkJLyoKKwkJICogRGVmYXVsdCB0byBQQ0kgY2xvY2suIE1ha2Ugc3VyZSBNQTE1LzE2IGFyZSBzZXQgdG8gb3V0cHV0CisJCSAqIHRvIHByZXZlbnQgZHJpdmVzIGhhdmluZyBwcm9ibGVtcyB3aXRoIDQwLXBpbiBjYWJsZXMuCisJCSAqLworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAweDIzKTsKKworCQkvKgorCQkgKiBXZSdsbCBoYXZlIHRvIHJlYWQgZl9DTlQgdmFsdWUgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lCisJCSAqIHRoZSBQQ0kgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJhdGlvOgorCQkgKgorCQkgKiBmX0NOVCA9IEZwY2kgKiAxOTIgLyBGZHBsbAorCQkgKgorCQkgKiBGaXJzdCB0cnkgcmVhZGluZyB0aGUgcmVnaXN0ZXIgaW4gd2hpY2ggdGhlIEhpZ2hQb2ludCBCSU9TCisJCSAqIHNhdmVzIGZfQ05UIHZhbHVlIGJlZm9yZSAgcmVwcm9ncmFtbWluZyB0aGUgRFBMTCBmcm9tIGl0cworCQkgKiBkZWZhdWx0IHNldHRpbmcgKHdoaWNoIGRpZmZlcnMgZm9yIHRoZSB2YXJpb3VzIGNoaXBzKS4KKwkJICoKKwkJICogTk9URTogVGhpcyByZWdpc3RlciBpcyBvbmx5IGFjY2Vzc2libGUgdmlhIEkvTyBzcGFjZTsKKwkJICogSFBUMzc0IEJJT1Mgb25seSBzYXZlcyBpdCBmb3IgdGhlIGZ1bmN0aW9uIDAsIHNvIHdlIGhhdmUgdG8KKwkJICogYWx3YXlzIHJlYWQgaXQgZnJvbSB0aGVyZSAtLSBubyBuZWVkIHRvIGNoZWNrIHRoZSByZXN1bHQgb2YKKwkJICogcGNpX2dldF9zbG90KCkgZm9yIHRoZSBmdW5jdGlvbiAwIGFzIHRoZSB3aG9sZSBkZXZpY2UgaGFzCisJCSAqIGJlZW4gYWxyZWFkeSAicGlubmVkIiAodmlhIGZ1bmN0aW9uIDEpIGluIGluaXRfc2V0dXBfaHB0Mzc0KCkKKwkJICovCisJCWlmIChjaGlwX3R5cGUgPT0gSFBUMzc0ICYmIChQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKSB7CisJCQlzdHJ1Y3QgcGNpX2RldgkqZGV2MSA9IHBjaV9nZXRfc2xvdChkZXYtPmJ1cywKKwkJCQkJCQkgICAgIGRldi0+ZGV2Zm4gLSAxKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYxLCA0KTsKKworCQkJdGVtcCA9CWlubChpb19iYXNlICsgMHg5MCk7CisJCQlwY2lfZGV2X3B1dChkZXYxKTsKKwkJfSBlbHNlCisJCQl0ZW1wID0JaW5sKGlvX2Jhc2UgKyAweDkwKTsKKworCQkvKgorCQkgKiBJbiBjYXNlIHRoZSBzaWduYXR1cmUgY2hlY2sgZmFpbHMsIHdlJ2xsIGhhdmUgdG8KKwkJICogcmVzb3J0IHRvIHJlYWRpbmcgdGhlIGZfQ05UIHJlZ2lzdGVyIGl0c2VsZiBpbiBob3BlcworCQkgKiB0aGF0IG5vYm9keSBoYXMgdG91Y2hlZCB0aGUgRFBMTCB5ZXQuLi4KKwkJICovCisJCWlmICgodGVtcCAmIDB4RkZGRkYwMDApICE9IDB4QUJDREUwMDApIHsKKwkJCWludCBpOworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAlczogbm8gY2xvY2sgZGF0YSBzYXZlZCBieSAiCisJCQkJIkJJT1NcbiIsIG5hbWUsIHBjaV9uYW1lKGRldikpOworCisJCQkvKiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgdmFsdWUgb2YgZl9DTlQuICovCisJCQlmb3IgKHRlbXAgPSBpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDc4LCAmZl9jbnQpOworCQkJCXRlbXAgKz0gZl9jbnQgJiAweDFmZjsKKwkJCQltZGVsYXkoMSk7CisJCQl9CisJCQlmX2NudCA9IHRlbXAgLyAxMjg7CisJCX0gZWxzZQorCQkJZl9jbnQgPSB0ZW1wICYgMHgxZmY7CisKKwkJZHBsbF9jbGsgPSBpbmZvLT5kcGxsX2NsazsKKwkJcGNpX2NsayAgPSAoZl9jbnQgKiBkcGxsX2NsaykgLyAxOTI7CisKKwkJLyogQ2xhbXAgUENJIGNsb2NrIHRvIGJhbmRzLiAqLworCQlpZiAocGNpX2NsayA8IDQwKQorCQkJcGNpX2NsayA9IDMzOworCQllbHNlIGlmKHBjaV9jbGsgPCA0NSkKKwkJCXBjaV9jbGsgPSA0MDsKKwkJZWxzZSBpZihwY2lfY2xrIDwgNTUpCisJCQlwY2lfY2xrID0gNTA7CisJCWVsc2UKKwkJCXBjaV9jbGsgPSA2NjsKKworCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogRFBMTCBiYXNlOiAlZCBNSHosIGZfQ05UOiAlZCwgIgorCQkJImFzc3VtaW5nICVkIE1IeiBQQ0lcbiIsIG5hbWUsIHBjaV9uYW1lKGRldiksCisJCQlkcGxsX2NsaywgZl9jbnQsIHBjaV9jbGspOworCX0gZWxzZSB7CisJCXUzMiBpdHIxID0gMDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAmaXRyMSk7CisKKwkJLyogRGV0ZWN0IFBDSSBjbG9jayBieSBsb29raW5nIGF0IGNtZF9oaWdoX3RpbWUuICovCisJCXN3aXRjaCgoaXRyMSA+PiA4KSAmIDB4MDcpIHsKKwkJCWNhc2UgMHgwOToKKwkJCQlwY2lfY2xrID0gNDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDU6CisJCQkJcGNpX2NsayA9IDI1OworCQkJCWJyZWFrOworCQkJY2FzZSAweDA3OgorCQkJZGVmYXVsdDoKKwkJCQlwY2lfY2xrID0gMzM7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBMZXQncyBhc3N1bWUgd2UnbGwgdXNlIFBDSSBjbG9jayBmb3IgdGhlIEFUQSBjbG9jay4uLiAqLworCXN3aXRjaCAocGNpX2NsaykgeworCQljYXNlIDI1OgorCQkJY2xvY2sgPSBBVEFfQ0xPQ0tfMjVNSFo7CisJCQlicmVhazsKKwkJY2FzZSAzMzoKKwkJZGVmYXVsdDoKKwkJCWNsb2NrID0gQVRBX0NMT0NLXzMzTUhaOworCQkJYnJlYWs7CisJCWNhc2UgNDA6CisJCQljbG9jayA9IEFUQV9DTE9DS180ME1IWjsKKwkJCWJyZWFrOworCQljYXNlIDUwOgorCQkJY2xvY2sgPSBBVEFfQ0xPQ0tfNTBNSFo7CisJCQlicmVhazsKKwkJY2FzZSA2NjoKKwkJCWNsb2NrID0gQVRBX0NMT0NLXzY2TUhaOworCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBPbmx5IHRyeSB0aGUgRFBMTCBpZiB3ZSBkb24ndCBoYXZlIGEgdGFibGUgZm9yIHRoZSBQQ0kgY2xvY2sgdGhhdAorCSAqIHdlIGFyZSBydW5uaW5nIGF0IGZvciBIUFQzNzAvQSwgYWx3YXlzIHVzZSBpdCAgZm9yIGFueXRoaW5nIG5ld2VyLi4uCisJICoKKwkgKiBOT1RFOiBVc2luZyB0aGUgaW50ZXJuYWwgRFBMTCByZXN1bHRzIGluIHNsb3cgcmVhZHMgb24gMzMgTUh6IFBDSS4KKwkgKiBXZSBhbHNvICBkb24ndCBsaWtlIHVzaW5nICB0aGUgRFBMTCBiZWNhdXNlIHRoaXMgY2F1c2VzIGdsaXRjaGVzCisJICogb24gUFJTVC0vU1JTVC0gd2hlbiB0aGUgc3RhdGUgZW5naW5lIGdldHMgcmVzZXQuLi4KKwkgKi8KKwlpZiAoY2hpcF90eXBlID49IEhQVDM3NCB8fCBpbmZvLT50aW1pbmdzLT5jbG9ja190YWJsZVtjbG9ja10gPT0gTlVMTCkgeworCQl1MTYgZl9sb3csIGRlbHRhID0gcGNpX2NsayA8IDUwID8gMiA6IDQ7CisJCWludCBhZGp1c3Q7CisKKwkJIC8qCisJCSAgKiBTZWxlY3QgNjYgTUh6IERQTEwgY2xvY2sgb25seSBpZiBVbHRyYUFUQS8xMzMgbW9kZSBpcworCQkgICogc3VwcG9ydGVkL2VuYWJsZWQsIHVzZSA1MCBNSHogRFBMTCBjbG9jayBvdGhlcndpc2UuLi4KKwkJICAqLworCQlpZiAoaW5mby0+dWRtYV9tYXNrID09IEFUQV9VRE1BNikgeworCQkJZHBsbF9jbGsgPSA2NjsKKwkJCWNsb2NrID0gQVRBX0NMT0NLXzY2TUhaOworCQl9IGVsc2UgaWYgKGRwbGxfY2xrKSB7CS8qIEhQVDM2eCBjaGlwcyBkb24ndCBoYXZlIERQTEwgKi8KKwkJCWRwbGxfY2xrID0gNTA7CisJCQljbG9jayA9IEFUQV9DTE9DS181ME1IWjsKKwkJfQorCisJCWlmIChpbmZvLT50aW1pbmdzLT5jbG9ja190YWJsZVtjbG9ja10gPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlczogdW5rbm93biBidXMgdGltaW5nIVxuIiwKKwkJCQluYW1lLCBwY2lfbmFtZShkZXYpKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJLyogU2VsZWN0IHRoZSBEUExMIGNsb2NrLiAqLworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAweDIxKTsKKworCQkvKgorCQkgKiBBZGp1c3QgdGhlIERQTEwgYmFzZWQgdXBvbiBQQ0kgY2xvY2ssIGVuYWJsZSBpdCwKKwkJICogYW5kIHdhaXQgZm9yIHN0YWJpbGl6YXRpb24uLi4KKwkJICovCisJCWZfbG93ID0gKHBjaV9jbGsgKiA0OCkgLyBkcGxsX2NsazsKKworCQlmb3IgKGFkanVzdCA9IDA7IGFkanVzdCA8IDg7IGFkanVzdCsrKSB7CisJCQlpZihocHQzN3hfY2FsaWJyYXRlX2RwbGwoZGV2LCBmX2xvdywgZl9sb3cgKyBkZWx0YSkpCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBTZWUgaWYgaXQnbGwgc2V0dGxlIGF0IGEgZnJhY3Rpb25hbGx5IGRpZmZlcmVudCBjbG9jaworCQkJICovCisJCQlpZiAoYWRqdXN0ICYgMSkKKwkJCQlmX2xvdyAtPSBhZGp1c3QgPj4gMTsKKwkJCWVsc2UKKwkJCQlmX2xvdyArPSBhZGp1c3QgPj4gMTsKKwkJfQorCQlpZiAoYWRqdXN0ID09IDgpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgJXM6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iLAorCQkJCW5hbWUsIHBjaV9uYW1lKGRldikpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogdXNpbmcgJWQgTUh6IERQTEwgY2xvY2tcbiIsCisJCQluYW1lLCBwY2lfbmFtZShkZXYpLCBkcGxsX2Nsayk7CisJfSBlbHNlIHsKKwkJLyogTWFyayB0aGUgZmFjdCB0aGF0IHdlJ3JlIG5vdCB1c2luZyB0aGUgRFBMTC4gKi8KKwkJZHBsbF9jbGsgPSAwOworCisJCXByaW50ayhLRVJOX0lORk8gIiVzICVzOiB1c2luZyAlZCBNSHogUENJIGNsb2NrXG4iLAorCQkJbmFtZSwgcGNpX25hbWUoZGV2KSwgcGNpX2Nsayk7CisJfQorCisJLyogU3RvcmUgdGhlIGNsb2NrIGZyZXF1ZW5jaWVzLiAqLworCWluZm8tPmRwbGxfY2xrCT0gZHBsbF9jbGs7CisJaW5mby0+cGNpX2Nsawk9IHBjaV9jbGs7CisJaW5mby0+Y2xvY2sJPSBjbG9jazsKKworCWlmIChjaGlwX3R5cGUgPj0gSFBUMzcwKSB7CisJCXU4ICBtY3IxLCBtY3I0OworCisJCS8qCisJCSAqIFJlc2V0IHRoZSBzdGF0ZSBlbmdpbmVzLgorCQkgKiBOT1RFOiBBdm9pZCBhY2NpZGVudGFsbHkgZW5hYmxpbmcgdGhlIGRpc2FibGVkIGNoYW5uZWxzLgorCQkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUgKGRldiwgMHg1MCwgJm1jcjEpOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZSAoZGV2LCAweDU0LCAmbWNyNCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIChtY3IxIHwgMHgzMikpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCAobWNyNCB8IDB4MzIpKTsKKwkJdWRlbGF5KDEwMCk7CisJfQorCisJLyoKKwkgKiBPbiAgSFBUMzcxTiwgaWYgQVRBIGNsb2NrIGlzIDY2IE1IeiB3ZSBtdXN0IHNldCBiaXQgMiBpbgorCSAqIHRoZSBNSVNDLiByZWdpc3RlciB0byBzdHJldGNoIHRoZSBVbHRyYURNQSBUc3MgdGltaW5nLgorCSAqIE5PVEU6IFRoaXMgcmVnaXN0ZXIgaXMgb25seSB3cml0ZWFibGUgdmlhIEkvTyBzcGFjZS4KKwkgKi8KKwlpZiAoY2hpcF90eXBlID09IEhQVDM3MU4gJiYgY2xvY2sgPT0gQVRBX0NMT0NLXzY2TUhaKQorCQlvdXRiKGluYihpb19iYXNlICsgMHg5YykgfCAweDA0LCBpb19iYXNlICsgMHg5Yyk7CisKKwlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTApOworCWhwdDN4eF9kaXNhYmxlX2Zhc3RfaXJxKGRldiwgMHg1NCk7CisKKwlyZXR1cm4gZGV2LT5pcnE7Cit9CisKK3N0YXRpYyB1OCBocHQzeHhfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCit7CisJc3RydWN0IHBjaV9kZXYJKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKKwlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKKwl1OCBjaGlwX3R5cGUJCT0gaW5mby0+Y2hpcF90eXBlOworCXU4IHNjcjEgPSAwLCBhdGE2Ngk9IGh3aWYtPmNoYW5uZWwgPyAweDAxIDogMHgwMjsKKworCS8qCisJICogVGhlIEhQVDM3eCB1c2VzIHRoZSBDQkxJRCBwaW5zIGFzIG91dHB1dHMgZm9yIE1BMTUvTUExNgorCSAqIGFkZHJlc3MgbGluZXMgdG8gYWNjZXNzIGFuIGV4dGVybmFsIEVFUFJPTS4gIFRvIHJlYWQgdmFsaWQKKwkgKiBjYWJsZSBkZXRlY3Qgc3RhdGUgdGhlIHBpbnMgbXVzdCBiZSBlbmFibGVkIGFzIGlucHV0cy4KKwkgKi8KKwlpZiAoY2hpcF90eXBlID09IEhQVDM3NCAmJiAoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSkgeworCQkvKgorCQkgKiBIUFQzNzQgUENJIGZ1bmN0aW9uIDEKKwkJICogLSBzZXQgYml0IDE1IG9mIHJlZyAweDUyIHRvIGVuYWJsZSBUQ0JMSUQgYXMgaW5wdXQKKwkJICogLSBzZXQgYml0IDE1IG9mIHJlZyAweDU2IHRvIGVuYWJsZSBGQ0JMSUQgYXMgaW5wdXQKKwkJICovCisJCXU4ICBtY3JfYWRkciA9IGh3aWYtPnNlbGVjdF9kYXRhICsgMjsKKwkJdTE2IG1jcjsKKworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1jcl9hZGRyLCAmbWNyKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgbWNyX2FkZHIsIChtY3IgfCAweDgwMDApKTsKKwkJLyogbm93IHJlYWQgY2FibGUgaWQgcmVnaXN0ZXIgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1jcl9hZGRyLCBtY3IpOworCX0gZWxzZSBpZiAoY2hpcF90eXBlID49IEhQVDM3MCkgeworCQkvKgorCQkgKiBIUFQzNzAvMzcyIGFuZCAzNzQgcGNpZm4gMAorCQkgKiAtIGNsZWFyIGJpdCAwIG9mIHJlZyAweDViIHRvIGVuYWJsZSBQL1NDQkxJRCBhcyBpbnB1dHMKKwkJICovCisJCXU4IHNjcjIgPSAwOworCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YiwgJnNjcjIpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAoc2NyMiAmIH4xKSk7CisJCS8qIG5vdyByZWFkIGNhYmxlIGlkIHJlZ2lzdGVyICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgJnNjcjEpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAgc2NyMik7CisJfSBlbHNlCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgJnNjcjEpOworCisJcmV0dXJuIChzY3IxICYgYXRhNjYpID8gQVRBX0NCTF9QQVRBNDAgOiBBVEFfQ0JMX1BBVEE4MDsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9ocHQzNjYoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKKwlpbnQgc2VyaWFsaXplCQk9IEhQVF9TRVJJQUxJWkVfSU87CisJdTggIGNoaXBfdHlwZQkJPSBpbmZvLT5jaGlwX3R5cGU7CisKKwkvKiBDYWNoZSB0aGUgY2hhbm5lbCdzIE1JU0MuIGNvbnRyb2wgcmVnaXN0ZXJzJyBvZmZzZXQgKi8KKwlod2lmLT5zZWxlY3RfZGF0YQk9IGh3aWYtPmNoYW5uZWwgPyAweDU0IDogMHg1MDsKKworCS8qCisJICogSFBUM3h4TiBjaGlwcyBoYXZlIHNvbWUgY29tcGxpY2F0aW9uczoKKwkgKgorCSAqIC0gb24gMzMgTUh6IFBDSSB3ZSBtdXN0IGNsb2NrIHN3aXRjaAorCSAqIC0gb24gNjYgTUh6IFBDSSB3ZSBtdXN0IE5PVCB1c2UgdGhlIFBDSSBjbG9jaworCSAqLworCWlmIChjaGlwX3R5cGUgPj0gSFBUMzcyTiAmJiBpbmZvLT5kcGxsX2NsayAmJiBpbmZvLT5wY2lfY2xrIDwgNjYpIHsKKwkJLyoKKwkJICogQ2xvY2sgaXMgc2hhcmVkIGJldHdlZW4gdGhlIGNoYW5uZWxzLAorCQkgKiBzbyB3ZSdsbCBoYXZlIHRvIHNlcmlhbGl6ZSB0aGVtLi4uIDotKAorCQkgKi8KKwkJc2VyaWFsaXplID0gMTsKKwkJaHdpZi0+cndfZGlzayA9ICZocHQzeHhuX3J3X2Rpc2s7CisJfQorCisJLyogU2VyaWFsaXplIGFjY2VzcyB0byB0aGlzIGRldmljZSBpZiBuZWVkZWQgKi8KKwlpZiAoc2VyaWFsaXplICYmIGh3aWYtPm1hdGUpCisJCWh3aWYtPnNlcmlhbGl6ZWQgPSBod2lmLT5tYXRlLT5zZXJpYWxpemVkID0gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9kbWFfaHB0MzY2KGlkZV9od2lmX3QgKmh3aWYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGJhc2UgPSBpZGVfcGNpX2RtYV9iYXNlKGh3aWYsIGQpOworCXU4IGRtYV9vbGQsIGRtYV9uZXcsIG1hc3RlcmRtYSA9IDAsIHNsYXZlZG1hID0gMDsKKworCWlmIChiYXNlID09IDApCisJCXJldHVybiAtMTsKKworCWh3aWYtPmRtYV9iYXNlID0gYmFzZTsKKworCWlmIChpZGVfcGNpX2NoZWNrX3NpbXBsZXgoaHdpZiwgZCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaWRlX3BjaV9zZXRfbWFzdGVyKGRldiwgZC0+bmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlkbWFfb2xkID0gaW5iKGJhc2UgKyAyKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRtYV9uZXcgPSBkbWFfb2xkOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgaHdpZi0+Y2hhbm5lbCA/IDB4NGIgOiAweDQzLCAmbWFzdGVyZG1hKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGh3aWYtPmNoYW5uZWwgPyAweDRmIDogMHg0NywgICZzbGF2ZWRtYSk7CisKKwlpZiAobWFzdGVyZG1hICYgMHgzMCkJZG1hX25ldyB8PSAweDIwOworCWlmICggc2xhdmVkbWEgJiAweDMwKQlkbWFfbmV3IHw9IDB4NDA7CisJaWYgKGRtYV9uZXcgIT0gZG1hX29sZCkKKwkJb3V0YihkbWFfbmV3LCBiYXNlICsgMik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlwcmludGsoS0VSTl9JTkZPICIgICAgJXM6IEJNLURNQSBhdCAweCUwNGx4LTB4JTA0bHhcbiIsCisJCQkgaHdpZi0+bmFtZSwgYmFzZSwgYmFzZSArIDcpOworCisJaHdpZi0+ZXh0cmFfYmFzZSA9IGJhc2UgKyAoaHdpZi0+Y2hhbm5lbCA/IDggOiAxNik7CisKKwlpZiAoaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaHdpZikpCisJCXJldHVybiAtMTsKKworCWh3aWYtPmRtYV9vcHMgPSAmc2ZmX2RtYV9vcHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGhwdDM3NF9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpkZXYyKQoreworCWlmIChkZXYyLT5pcnEgIT0gZGV2LT5pcnEpIHsKKwkJLyogRklYTUU6IHdlIG5lZWQgYSBjb3JlIHBjaV9zZXRfaW50ZXJydXB0KCkgKi8KKwkJZGV2Mi0+aXJxID0gZGV2LT5pcnE7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIiAlczogUENJIGNvbmZpZyBzcGFjZSBpbnRlcnJ1cHQgIgorCQkJImZpeGVkXG4iLCBwY2lfbmFtZShkZXYyKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaHB0MzcxX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1OCBtY3IxID0gMDsKKworCS8qCisJICogSFBUMzcxIGNoaXBzIHBoeXNpY2FsbHkgaGF2ZSBvbmx5IG9uZSBjaGFubmVsLCB0aGUgc2Vjb25kYXJ5IG9uZSwKKwkgKiBidXQgdGhlIHByaW1hcnkgY2hhbm5lbCByZWdpc3RlcnMgZG8gZXhpc3QhICBHbyBmaWd1cmUuLi4KKwkgKiBTbywgIHdlIG1hbnVhbGx5IGRpc2FibGUgdGhlIG5vbi1leGlzdGluZyBjaGFubmVsIGhlcmUKKwkgKiAoaWYgdGhlIEJJT1MgaGFzbid0IGRvbmUgdGhpcyBhbHJlYWR5KS4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZtY3IxKTsKKwlpZiAobWNyMSAmIDB4MDQpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEgJiB+MHgwNCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhwdDM2eF9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpkZXYyKQoreworCXU4IG1jcjEgPSAwLCBwaW4xID0gMCwgcGluMiA9IDA7CisKKwkvKgorCSAqIE5vdyB3ZSdsbCBoYXZlIHRvIGZvcmNlIGJvdGggY2hhbm5lbHMgZW5hYmxlZCBpZgorCSAqIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGhhcyBiZWVuIGVuYWJsZWQgYnkgQklPUy4uLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOworCWlmIChtY3IxICYgMHgzMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSB8IDB4MzApOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAgUENJX0lOVEVSUlVQVF9QSU4sICZwaW4xKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYyLCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbjIpOworCisJaWYgKHBpbjEgIT0gcGluMiAmJiBkZXYtPmlycSA9PSBkZXYyLT5pcnEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiICVzOiBvbmJvYXJkIHZlcnNpb24gb2YgY2hpcHNldCwgIgorCQkJInBpbjE9JWQgcGluMj0lZFxuIiwgcGNpX25hbWUoZGV2KSwgcGluMSwgcGluMik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIElERV9IRkxBR1NfSFBUM1hYIFwKKwkoSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8IFwKKwkgSURFX0hGTEFHX09GRl9CT0FSRCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgaHB0M3h4X3BvcnRfb3BzID0geworCS5zZXRfcGlvX21vZGUJCT0gaHB0M3h4X3NldF9waW9fbW9kZSwKKwkuc2V0X2RtYV9tb2RlCQk9IGhwdDN4eF9zZXRfbW9kZSwKKwkucXVpcmtwcm9jCQk9IGhwdDN4eF9xdWlya3Byb2MsCisJLm1hc2twcm9jCQk9IGhwdDN4eF9tYXNrcHJvYywKKwkubWRtYV9maWx0ZXIJCT0gaHB0M3h4X21kbWFfZmlsdGVyLAorCS51ZG1hX2ZpbHRlcgkJPSBocHQzeHhfdWRtYV9maWx0ZXIsCisJLmNhYmxlX2RldGVjdAkJPSBocHQzeHhfY2FibGVfZGV0ZWN0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBocHQzN3hfZG1hX29wcyA9IHsKKwkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAorCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKKwkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCisJLmRtYV9lbmQJCT0gaHB0Mzc0X2RtYV9lbmQsCisJLmRtYV90ZXN0X2lycQkJPSBocHQzNzRfZG1hX3Rlc3RfaXJxLAorCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBocHQzNzBfZG1hX29wcyA9IHsKKwkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAorCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKKwkuZG1hX3N0YXJ0CQk9IGhwdDM3MF9kbWFfc3RhcnQsCisJLmRtYV9lbmQJCT0gaHB0MzcwX2RtYV9lbmQsCisJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAorCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVvdXQJCT0gaHB0MzcwX2RtYV90aW1lb3V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBocHQzNnhfZG1hX29wcyA9IHsKKwkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAorCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKKwkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCisJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCisJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAorCS5kbWFfbG9zdF9pcnEJCT0gaHB0MzY2X2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGhwdDM2Nl9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJewkvKiAwOiBIUFQzNnggKi8KKwkJLm5hbWUJCT0gRFJWX05BTUUsCisJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfaHB0MzY2LAorCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2hwdDM2NiwKKwkJLmluaXRfZG1hCT0gaW5pdF9kbWFfaHB0MzY2LAorCQkvKgorCQkgKiBIUFQzNnggY2hpcHMgaGF2ZSBvbmUgY2hhbm5lbCBwZXIgZnVuY3Rpb24gYW5kIGhhdmUKKwkJICogYm90aCBjaGFubmVsIGVuYWJsZSBiaXRzIGxvY2F0ZWQgZGlmZmVyZW50bHkgYW5kIHZpc2libGUKKwkJICogdG8gYm90aCBmdW5jdGlvbnMgLS0gcmVhbGx5IHN0dXBpZCBkZXNpZ24gZGVjaXNpb24uLi4gOi0oCisJCSAqIEJpdCA0IGlzIGZvciB0aGUgcHJpbWFyeSBjaGFubmVsLCBiaXQgNSBmb3IgdGhlIHNlY29uZGFyeS4KKwkJICovCisJCS5lbmFibGViaXRzCT0ge3sweDUwLDB4MTAsMHgxMH0sIHsweDU0LDB4MDQsMHgwNH19LAorCQkucG9ydF9vcHMJPSAmaHB0M3h4X3BvcnRfb3BzLAorCQkuZG1hX29wcwk9ICZocHQzNnhfZG1hX29wcywKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0hQVDNYWCB8IElERV9IRkxBR19TSU5HTEUsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJfSwKKwl7CS8qIDE6IEhQVDN4eCAqLworCQkubmFtZQkJPSBEUlZfTkFNRSwKKwkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9ocHQzNjYsCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfaHB0MzY2LAorCQkuaW5pdF9kbWEJPSBpbml0X2RtYV9ocHQzNjYsCisJCS5lbmFibGViaXRzCT0ge3sweDUwLDB4MDQsMHgwNH0sIHsweDU0LDB4MDQsMHgwNH19LAorCQkucG9ydF9vcHMJPSAmaHB0M3h4X3BvcnRfb3BzLAorCQkuZG1hX29wcwk9ICZocHQzN3hfZG1hX29wcywKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0hQVDNYWCwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwl9Cit9OworCisvKioKKyAqCWhwdDM2Nl9pbml0X29uZQktCWNhbGxlZCB3aGVuIGFuIEhQVDM2NiBpcyBmb3VuZAorICoJQGRldjogdGhlIGhwdDM2NiBkZXZpY2UKKyAqCUBpZDogdGhlIG1hdGNoaW5nIHBjaSBpZAorICoKKyAqCUNhbGxlZCB3aGVuIHRoZSBQQ0kgcmVnaXN0cmF0aW9uIGxheWVyIChvciB0aGUgSURFIGluaXRpYWxpemF0aW9uKQorICoJZmluZHMgYSBkZXZpY2UgbWF0Y2hpbmcgb3VyIElERSBkZXZpY2UgdGFibGVzLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHQzNjZfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IHN0cnVjdCBocHRfaW5mbyAqaW5mbyA9IE5VTEw7CisJc3RydWN0IGhwdF9pbmZvICpkeW5faW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2MiA9IE5VTEw7CisJc3RydWN0IGlkZV9wb3J0X2luZm8gZDsKKwl1OCBpZHggPSBpZC0+ZHJpdmVyX2RhdGE7CisJdTggcmV2ID0gZGV2LT5yZXZpc2lvbjsKKwlpbnQgcmV0OworCisJaWYgKChpZHggPT0gMCB8fCBpZHggPT0gNCkgJiYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoIChpZHgpIHsKKwljYXNlIDA6CisJCWlmIChyZXYgPCAzKQorCQkJaW5mbyA9ICZocHQzNng7CisJCWVsc2UgeworCQkJc3dpdGNoIChtaW5fdCh1OCwgcmV2LCA2KSkgeworCQkJY2FzZSAzOiBpbmZvID0gJmhwdDM3MDsgIGJyZWFrOworCQkJY2FzZSA0OiBpbmZvID0gJmhwdDM3MGE7IGJyZWFrOworCQkJY2FzZSA1OiBpbmZvID0gJmhwdDM3MjsgIGJyZWFrOworCQkJY2FzZSA2OiBpbmZvID0gJmhwdDM3Mm47IGJyZWFrOworCQkJfQorCQkJaWR4Kys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpbmZvID0gKHJldiA+IDEpID8gJmhwdDM3Mm4gOiAmaHB0MzcyYTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpbmZvID0gKHJldiA+IDEpID8gJmhwdDMwMm4gOiAmaHB0MzAyOworCQlicmVhazsKKwljYXNlIDM6CisJCWhwdDM3MV9pbml0KGRldik7CisJCWluZm8gPSAocmV2ID4gMSkgPyAmaHB0MzcxbiA6ICZocHQzNzE7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaW5mbyA9ICZocHQzNzQ7CisJCWJyZWFrOworCWNhc2UgNToKKwkJaW5mbyA9ICZocHQzNzJuOworCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzIGNoaXBzZXQgZGV0ZWN0ZWRcbiIsIGluZm8tPmNoaXBfbmFtZSk7CisKKwlkID0gaHB0MzY2X2NoaXBzZXRzW21pbl90KHU4LCBpZHgsIDEpXTsKKworCWQudWRtYV9tYXNrID0gaW5mby0+dWRtYV9tYXNrOworCisJLyogZml4dXAgLT5kbWFfb3BzIGZvciBIUFQzNzAvSFBUMzcwQSAqLworCWlmIChpbmZvID09ICZocHQzNzAgfHwgaW5mbyA9PSAmaHB0MzcwYSkKKwkJZC5kbWFfb3BzID0gJmhwdDM3MF9kbWFfb3BzOworCisJaWYgKGluZm8gPT0gJmhwdDM2eCB8fCBpbmZvID09ICZocHQzNzQpCisJCWRldjIgPSBwY2lfZ2V0X3Nsb3QoZGV2LT5idXMsIGRldi0+ZGV2Zm4gKyAxKTsKKworCWR5bl9pbmZvID0ga3phbGxvYyhzaXplb2YoKmR5bl9pbmZvKSAqIChkZXYyID8gMiA6IDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHluX2luZm8gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzICVzOiBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWQubmFtZSwgcGNpX25hbWUoZGV2KSk7CisJCXBjaV9kZXZfcHV0KGRldjIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIENvcHkgZXZlcnl0aGluZyBmcm9tIGEgc3RhdGljICJ0ZW1wbGF0ZSIgc3RydWN0dXJlCisJICogdG8ganVzdCBhbGxvY2F0ZWQgcGVyLWNoaXAgaHB0X2luZm8gc3RydWN0dXJlLgorCSAqLworCW1lbWNweShkeW5faW5mbywgaW5mbywgc2l6ZW9mKCpkeW5faW5mbykpOworCisJaWYgKGRldjIpIHsKKwkJbWVtY3B5KGR5bl9pbmZvICsgMSwgaW5mbywgc2l6ZW9mKCpkeW5faW5mbykpOworCisJCWlmIChpbmZvID09ICZocHQzNzQpCisJCQlocHQzNzRfaW5pdChkZXYsIGRldjIpOworCQllbHNlIHsKKwkJCWlmIChocHQzNnhfaW5pdChkZXYsIGRldjIpKQorCQkJCWQuaG9zdF9mbGFncyAmPSB+SURFX0hGTEFHX05PTl9CT09UQUJMRTsKKwkJfQorCisJCXJldCA9IGlkZV9wY2lfaW5pdF90d28oZGV2LCBkZXYyLCAmZCwgZHluX2luZm8pOworCQlpZiAocmV0IDwgMCkgeworCQkJcGNpX2Rldl9wdXQoZGV2Mik7CisJCQlrZnJlZShkeW5faW5mbyk7CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBpZGVfcGNpX2luaXRfb25lKGRldiwgJmQsIGR5bl9pbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUoZHluX2luZm8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGhwdDM2Nl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWRlX2luZm8gKmluZm8gPSBob3N0LT5ob3N0X3ByaXY7CisJc3RydWN0IHBjaV9kZXYgKmRldjIgPSBob3N0LT5kZXZbMV0gPyB0b19wY2lfZGV2KGhvc3QtPmRldlsxXSkgOiBOVUxMOworCisJaWRlX3BjaV9yZW1vdmUoZGV2KTsKKwlwY2lfZGV2X3B1dChkZXYyKTsKKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDM2Nl9wY2lfdGJsW10gX19kZXZpbml0Y29uc3QgPSB7CisJeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM2NiksICAwIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MiksICAxIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMiksICAyIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MSksICAzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NCksICA0IH0sCisJeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3Mk4pLCA1IH0sCisJeyAwLCB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBocHQzNjZfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBocHQzNjZfcGNpX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiSFBUMzY2X0lERSIsCisJLmlkX3RhYmxlCT0gaHB0MzY2X3BjaV90YmwsCisJLnByb2JlCQk9IGhwdDM2Nl9pbml0X29uZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGhwdDM2Nl9yZW1vdmUpLAorCS5zdXNwZW5kCT0gaWRlX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gaWRlX3BjaV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBocHQzNjZfaWRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmhwdDM2Nl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhwdDM2Nl9pZGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaHB0MzY2X3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChocHQzNjZfaWRlX2luaXQpOworbW9kdWxlX2V4aXQoaHB0MzY2X2lkZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW5kcmUgSGVkcmljayIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgSGlnaHBvaW50IEhQVDM2NiBJREUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMgYi9kcml2ZXJzL2lkZS9odDY1NjBiLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2h0NjU2MGIuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jIGIvZHJpdmVycy9pZGUvaWNzaWRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL2FybS9pY3NpZGUuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvaWNzaWRlLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtNGRyaXZlcy5jIGIvZHJpdmVycy9pZGUvaWRlLTRkcml2ZXMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbGVnYWN5L2lkZS00ZHJpdmVzLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2lkZS00ZHJpdmVzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggMmUzMDU3MS4uNGU1OGI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogewogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAKLQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX05PX0RPT1JMT0NLKQorCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlpZGVfaW5pdF9wYygmcGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCAzMzA4YjFjLi40OGI1ZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtOTksNyArOTksNyBAQAogLyogTWFyayB0aGF0IHdlJ3ZlIHNlZW4gYSBtZWRpYSBjaGFuZ2UgYW5kIGludmFsaWRhdGUgb3VyIGludGVybmFsIGJ1ZmZlcnMuICovCiBzdGF0aWMgdm9pZCBjZHJvbV9zYXdfbWVkaWFfY2hhbmdlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX01FRElBX0NIQU5HRUQ7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKIAlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19UT0NfVkFMSUQ7CiB9CiAKQEAgLTM0MCw4ICszNDAsOCBAQAogCX0KIAogCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIiVzOiBzdGF0OiAweCV4LCBnb29kX3N0YXQ6IDB4JXgsICIKLQkJICAgICAgInJxLT5jbWRfdHlwZTogMHgleCwgZXJyOiAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdCwKLQkJICAgICAgZ29vZF9zdGF0LCBycS0+Y21kX3R5cGUsIGVycik7CisJCSAgICAgICJycS0+Y21kWzBdOiAweCV4LCBycS0+Y21kX3R5cGU6IDB4JXgsIGVycjogMHgleFxuIiwKKwkJICAgICAgX19mdW5jX18sIHN0YXQsIGdvb2Rfc3RhdCwgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLCBlcnIpOwogCiAJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSkgewogCQkvKgpAQCAtODQzLDEzICs4NDMsMTAgQEAKIAlycS0+cS0+cHJlcF9ycV9mbihycS0+cSwgcnEpOwogfQogCi0vKgotICogQWxsIG90aGVyIHBhY2tldCBjb21tYW5kcy4KLSAqLwogc3RhdGljIHZvaWQgaWRlX2NkX3JlcXVlc3Rfc2Vuc2VfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXhcbiIsCisJCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdKTsKIAogCS8qCiAJICogU29tZSBvZiB0aGUgdHJhaWxpbmcgcmVxdWVzdCBzZW5zZSBmaWVsZHMgYXJlIG9wdGlvbmFsLApAQCAtODc2LDcgKzg3Myw3IEBACiAJaWYgKCFzZW5zZSkKIAkJc2Vuc2UgPSAmbG9jYWxfc2Vuc2U7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCB3cml0ZTogMHgleCwgIgorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIGNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgsICIKIAkJICAgICAgInRpbWVvdXQ6ICVkLCBjbWRfZmxhZ3M6IDB4JXhcbiIsIF9fZnVuY19fLCBjbWRbMF0sIHdyaXRlLAogCQkgICAgICB0aW1lb3V0LCBjbWRfZmxhZ3MpOwogCkBAIC0xMTc3LDggKzExNzQsOSBAQAogCXVuc2lnbmVkIHNob3J0IHNlY3RvcnNfcGVyX2ZyYW1lID0KIAkJcXVldWVfaGFyZHNlY3Rfc2l6ZShkcml2ZS0+cXVldWUpID4+IFNFQ1RPUl9CSVRTOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgd3JpdGU6IDB4JXgsIHNlY3NfcGVyX2ZyYW1lOiAldVxuIiwKLQkJICAgICAgX19mdW5jX18sIHdyaXRlLCBzZWN0b3JzX3Blcl9mcmFtZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgsICIKKwkJICAgICAgInNlY3NfcGVyX2ZyYW1lOiAldVxuIiwKKwkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0sIHdyaXRlLCBzZWN0b3JzX3Blcl9mcmFtZSk7CiAKIAlpZiAod3JpdGUpIHsKIAkJLyogZGlzayBoYXMgYmVjb21lIHdyaXRlIHByb3RlY3RlZCAqLwpAQCAtMTIyMSw3ICsxMjE5LDggQEAKIHN0YXRpYyB2b2lkIGNkcm9tX2RvX2Jsb2NrX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgcnEtPmNtZF90eXBlOiAweCV4XG4iLCBfX2Z1bmNfXywKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCAiCisJCSAgICAgICJycS0+Y21kX3R5cGU6IDB4JXhcbiIsIF9fZnVuY19fLCBycS0+Y21kWzBdLAogCQkgICAgICBycS0+Y21kX3R5cGUpOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKQEAgLTEyNTcsOSArMTI1Niw2IEBACiAJfQogfQogCi0vKgotICogY2Ryb20gZHJpdmVyIHJlcXVlc3Qgcm91dGluZS4KLSAqLwogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfY2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkJc2VjdG9yX3QgYmxvY2spCiB7CkBAIC0xMjY3LDggKzEyNjMsMTAgQEAKIAlpZGVfaGFuZGxlcl90ICpmbjsKIAlpbnQgeGZlcmxlbjsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHJxLT5jbWRfdHlwZTogMHgleCwgYmxvY2s6ICVsbHVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kX3R5cGUsICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsICIKKwkJICAgICAgInJxLT5jbWRfdHlwZTogMHgleCwgYmxvY2s6ICVsbHVcbiIsCisJCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCBycS0+Y21kX3R5cGUsCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOwogCiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1NFRUtJTkcpIHsKQEAgLTE0MTIsNiArMTQxMCwxMCBAQAogCiAJKmNhcGFjaXR5ID0gMSArIGJlMzJfdG9fY3B1KGNhcGJ1Zi5sYmEpOwogCSpzZWN0b3JzX3Blcl9mcmFtZSA9IGJsb2NrbGVuID4+IFNFQ1RPUl9CSVRTOworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiJXM6IGNhcDogJWx1LCBzZWN0b3JzX3Blcl9mcmFtZTogJWx1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgKmNhcGFjaXR5LCAqc2VjdG9yc19wZXJfZnJhbWUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NDMsNiArMTY0NSw5IEBACiAJCW1heHNwZWVkID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikmYnVmWzggKyA4XSk7CiAJfQogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiJXM6IGN1cnNwZWVkOiAldSwgbWF4c3BlZWQ6ICV1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgY3Vyc3BlZWQsIG1heHNwZWVkKTsKKwogCWNkLT5jdXJyZW50X3NwZWVkID0gKGN1cnNwZWVkICsgKDE3Ni8yKSkgLyAxNzY7CiAJY2QtPm1heF9zcGVlZCA9IChtYXhzcGVlZCArICgxNzYvMikpIC8gMTc2OwogfQpAQCAtMTczMiw3ICsxNzM3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoKGJ1Zls4ICsgNl0gJiAweDAxKSA9PSAwKQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX05PX0RPT1JMT0NLOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CiAJaWYgKGJ1Zls4ICsgNl0gJiAweDA4KQogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19OT19FSkVDVDsKIAlpZiAoYnVmWzggKyAzXSAmIDB4MDEpCkBAIC0xNzc3LDcgKzE3ODIsNyBAQAogCWlmICgoY2RpLT5tYXNrICYgQ0RDX0RWRF9SKSA9PSAwIHx8IChjZGktPm1hc2sgJiBDRENfRFZEX1JBTSkgPT0gMCkKIAkJcHJpbnRrKEtFUk5fQ09OVCAiIERWRCVzJXMiLAogCQkJCSAoY2RpLT5tYXNrICYgQ0RDX0RWRF9SKSA/ICIiIDogIi1SIiwKLQkJCQkgKGNkaS0+bWFzayAmIENEQ19EVkRfUkFNKSA/ICIiIDogIi1SQU0iKTsKKwkJCQkgKGNkaS0+bWFzayAmIENEQ19EVkRfUkFNKSA/ICIiIDogIi9SQU0iKTsKIAogCWlmICgoY2RpLT5tYXNrICYgQ0RDX0NEX1IpID09IDAgfHwgKGNkaS0+bWFzayAmIENEQ19DRF9SVykgPT0gMCkKIAkJcHJpbnRrKEtFUk5fQ09OVCAiIENEJXMlcyIsCkBAIC0xOTA4LDYgKzE5MTMsMTYgQEAKIAlJREVfUFJPQ19ERVZTRVQoZHNjX292ZXJsYXAsIDAsIDEpLAogCXsgMCB9LAogfTsKKworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV9jZF9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVjZF9wcm9jOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqaWRlX2NkX3Byb2NfZGV2c2V0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZWNkX3NldHRpbmdzOworfQogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2RfbGlzdF9lbnRyeSBpZGVfY2RfcXVpcmtzX2xpc3RbXSA9IHsKQEAgLTE5NTEsNiArMTk2Niw3IEBACiAJeyAiT3B0aWFyYyBEVkQgUlcgQUQtNTIwMEEiLCBOVUxMLCAgIElERV9BRkxBR19QTEFZX0FVRElPX09LCSAgICAgfSwKIAl7ICJPcHRpYXJjIERWRCBSVyBBRC03MjAwQSIsIE5VTEwsICAgSURFX0FGTEFHX1BMQVlfQVVESU9fT0sJICAgICB9LAogCXsgIk9wdGlhcmMgRFZEIFJXIEFELTc1NDNBIiwgTlVMTCwgICBJREVfQUZMQUdfTk9fQVVUT0NMT1NFCSAgICAgfSwKKwl7ICJURUFDIENELVJPTSBDRC0yMjRFIiwgICAgIE5VTEwsICAgSURFX0FGTEFHX05PX0FVVE9DTE9TRQkgICAgIH0sCiAJeyBOVUxMLCBOVUxMLCAwIH0KIH07CiAKQEAgLTE5ODYsOCArMjAwMiw4IEBACiAJaWYgKCFkcml2ZS0+cXVldWUtPnVucGx1Z19kZWxheSkKIAkJZHJpdmUtPnF1ZXVlLT51bnBsdWdfZGVsYXkgPSAxOwogCi0JZHJpdmUtPmF0YXBpX2ZsYWdzID0gSURFX0FGTEFHX01FRElBX0NIQU5HRUQgfCBJREVfQUZMQUdfTk9fRUpFQ1QgfAotCQkgICAgICAgaWRlX2NkX2ZsYWdzKGlkKTsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19NRURJQV9DSEFOR0VEOworCWRyaXZlLT5hdGFwaV9mbGFncyA9IElERV9BRkxBR19OT19FSkVDVCB8IGlkZV9jZF9mbGFncyhpZCk7CiAKIAlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19WRVJUT1NfMzAwX1NTRCkgJiYKIAkgICAgZndfcmV2WzRdID09ICcxJyAmJiBmd19yZXZbNl0gPD0gJzInKQpAQCAtMjA2OSwyMiArMjA4NSwyMCBAQAogCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCiAJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQkucHJvYwkJCT0gaWRlY2RfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRlY2Rfc2V0dGluZ3MsCisJLnByb2NfZW50cmllcwkJPSBpZGVfY2RfcHJvY19lbnRyaWVzLAorCS5wcm9jX2RldnNldHMJCT0gaWRlX2NkX3Byb2NfZGV2c2V0cywKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBpZGVjZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBpZGVjZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm87CisJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBpZGVfY2RfZ2V0KGJkZXYtPmJkX2Rpc2spOwogCWludCByYyA9IC1FTk9NRU07CiAKLQlpbmZvID0gaWRlX2NkX2dldChkaXNrKTsKIAlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5YSU87CiAKLQlyYyA9IGNkcm9tX29wZW4oJmluZm8tPmRldmluZm8sIGlub2RlLCBmaWxlKTsKKwlyYyA9IGNkcm9tX29wZW4oJmluZm8tPmRldmluZm8sIGJkZXYsIG1vZGUpOwogCiAJaWYgKHJjIDwgMCkKIAkJaWRlX2NkX3B1dChpbmZvKTsKQEAgLTIwOTIsMTIgKzIxMDYsMTEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgaWRlY2RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgaWRlY2RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9kcnZfZyhkaXNrLCBjZHJvbV9pbmZvKTsKIAotCWNkcm9tX3JlbGVhc2UoJmluZm8tPmRldmluZm8sIGZpbGUpOworCWNkcm9tX3JlbGVhc2UoJmluZm8tPmRldmluZm8sIG1vZGUpOwogCiAJaWRlX2NkX3B1dChpbmZvKTsKIApAQCAtMjE0MywxMCArMjE1Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWRlY2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGlkZWNkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2Rydl9nKGJkZXYtPmJkX2Rpc2ssIGNkcm9tX2luZm8pOwogCWludCBlcnI7CiAKQEAgLTIxNTksOSArMjE3MSw5IEBACiAJCWJyZWFrOwogCX0KIAotCWVyciA9IGdlbmVyaWNfaWRlX2lvY3RsKGluZm8tPmRyaXZlLCBmaWxlLCBiZGV2LCBjbWQsIGFyZyk7CisJZXJyID0gZ2VuZXJpY19pZGVfaW9jdGwoaW5mby0+ZHJpdmUsIGJkZXYsIGNtZCwgYXJnKTsKIAlpZiAoZXJyID09IC1FSU5WQUwpCi0JCWVyciA9IGNkcm9tX2lvY3RsKGZpbGUsICZpbmZvLT5kZXZpbmZvLCBpbm9kZSwgY21kLCBhcmcpOworCQllcnIgPSBjZHJvbV9pb2N0bCgmaW5mby0+ZGV2aW5mbywgYmRldiwgbW9kZSwgY21kLCBhcmcpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTIxODYsNyArMjE5OCw3IEBACiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gaWRlY2Rfb3BlbiwKIAkucmVsZWFzZQkJPSBpZGVjZF9yZWxlYXNlLAotCS5pb2N0bAkJCT0gaWRlY2RfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAkJPSBpZGVjZF9pb2N0bCwKIAkubWVkaWFfY2hhbmdlZAkJPSBpZGVjZF9tZWRpYV9jaGFuZ2VkLAogCS5yZXZhbGlkYXRlX2Rpc2sJPSBpZGVjZF9yZXZhbGlkYXRlX2Rpc2sKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCmluZGV4IDc0MjMxYjQuLmRmM2RmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCkBAIC04Niw4ICs4Niw4IEBACiAKIAlpZiAoc2xvdF9uciA9PSBDRFNMX0NVUlJFTlQpIHsKIAkJKHZvaWQpIGNkcm9tX2NoZWNrX3N0YXR1cyhkcml2ZSwgTlVMTCk7Ci0JCXJldHZhbCA9IChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCkgPyAxIDogMDsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKKwkJcmV0dmFsID0gKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTUVESUFfQ0hBTkdFRCkgPyAxIDogMDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAJCXJldHVybiByZXR2YWw7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJc2Vuc2UgPSAmbXlfc2Vuc2U7CiAKIAkvKiBJZiB0aGUgZHJpdmUgY2Fubm90IGxvY2sgdGhlIGRvb3IsIGp1c3QgcHJldGVuZC4gKi8KLQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX05PX0RPT1JMT0NLKSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKSB7CiAJCXN0YXQgPSAwOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCSAgICAoc2Vuc2UtPmFzYyA9PSAweDI0IHx8IHNlbnNlLT5hc2MgPT0gMHgyMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZG9vciBsb2NraW5nIG5vdCBzdXBwb3J0ZWRcbiIsCiAJCQlkcml2ZS0+bmFtZSk7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAkJc3RhdCA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9pZGUtY3MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9pZGUtY3MuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggMzg1M2JkZS4uZTVhZGViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC0xNCw5ICsxNCw2IEBACiAgKiBUaGlzIGlzIHRoZSBJREUvQVRBIGRpc2sgZHJpdmVyLCBhcyBldm9sdmVkIGZyb20gaGQuYyBhbmQgaWRlLmMuCiAgKi8KIAotI2RlZmluZSBJREVESVNLX1ZFUlNJT04JIjEuMTgiCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzksNDYgKzM2LDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAotI2lmICFkZWZpbmVkKENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCkKLSNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkoMSA8PCBQQVJUTl9CSVRTKQotI2Vsc2UKLSNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkwCi0jZW5kaWYKLQogI2luY2x1ZGUgImlkZS1kaXNrLmgiCiAKLXN0YXRpYyBERUZJTkVfTVVURVgoaWRlZGlza19yZWZfbXV0ZXgpOwotCi0jZGVmaW5lIHRvX2lkZV9kaXNrKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGlkZV9kaXNrX29iaiwga3JlZikKLQotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqKTsKLQotc3RhdGljIHN0cnVjdCBpZGVfZGlza19vYmogKmlkZV9kaXNrX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKLQlpZGtwID0gaWRlX2Rpc2tfZyhkaXNrKTsKLQlpZiAoaWRrcCkgewotCQlpZiAoaWRlX2RldmljZV9nZXQoaWRrcC0+ZHJpdmUpKQotCQkJaWRrcCA9IE5VTEw7Ci0JCWVsc2UKLQkJCWtyZWZfZ2V0KCZpZGtwLT5rcmVmKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7Ci0JcmV0dXJuIGlka3A7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3B1dChzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwKQotewotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JbXV0ZXhfbG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwotCWtyZWZfcHV0KCZpZGtwLT5rcmVmLCBpZGVfZGlza19yZWxlYXNlKTsKLQlpZGVfZGV2aWNlX3B1dChkcml2ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7Ci19Ci0KIHN0YXRpYyBjb25zdCB1OCBpZGVfcndfY21kc1tdID0gewogCUFUQV9DTURfUkVBRF9NVUxUSSwKIAlBVEFfQ01EX1dSSVRFX01VTFRJLApAQCAtMzc0LDcgKzMzMyw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpbml0X2lkZWRpc2tfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBpZGVfZGlza19nZXRfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJaW50IGxiYTsKQEAgLTQwMywxMSArMzYyLDI4IEBACiAJCWlmIChhdGFfaWRfaHBhX2VuYWJsZWQoaWQpKQogCQkJaWRlZGlza19jaGVja19ocGEoZHJpdmUpOwogCX0KLX0KIAotc2VjdG9yX3QgaWRlX2Rpc2tfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXJldHVybiBkcml2ZS0+Y2FwYWNpdHk2NDsKKwkvKiBsaW1pdCBkcml2ZSBjYXBhY2l0eSB0byAxMzdHQiBpZiBMQkE0OCBjYW5ub3QgYmUgdXNlZCAqLworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPT0gMCAmJgorCSAgICBkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggLSBmdWxsIGNhcGFjaXR5ICIKKwkJICAgICAgICIlbGx1IHNlY3RvcnMgKCVsbHUgTUIpXG4iLAorCQkgICAgICAgZHJpdmUtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpZHJpdmUtPmNhcGFjaXR5NjQsCisJCSAgICAgICBzZWN0b3JzX3RvX01CKGRyaXZlLT5jYXBhY2l0eTY0KSk7CisJCWRyaXZlLT5jYXBhY2l0eTY0ID0gMVVMTCA8PCAyODsKKwl9CisKKwlpZiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkgJiYKKwkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpKSB7CisJCWlmIChkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW5ub3QgdXNlIExCQTQ4IERNQSAtIFBJTyBtb2RlIgorCQkJCQkgIiB3aWxsIGJlIHVzZWQgZm9yIGFjY2Vzc2luZyBzZWN0b3JzICIKKwkJCQkJICI+ICV1XG4iLCBkcml2ZS0+bmFtZSwgMSA8PCAyOCk7CisJCX0gZWxzZQorCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0xCQTQ4OworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpZGVkaXNrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKQEAgLTUwOCw3ICs0ODQsNyBAQAogCQkgKiB0aW1lIHdlIGhhdmUgdHJpbW1lZCB0aGUgZHJpdmUgY2FwYWNpdHkgaWYgTEJBNDggaXMKIAkJICogbm90IGF2YWlsYWJsZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlY2hlY2sgdGhhdC4KIAkJICovCi0JCWNhcGFjaXR5ID0gaWRlX2Rpc2tfY2FwYWNpdHkoZHJpdmUpOworCQljYXBhY2l0eSA9IGlkZV9nZF9jYXBhY2l0eShkcml2ZSk7CiAJCWJhcnJpZXIgPSBhdGFfaWRfZmx1c2hfZW5hYmxlZChpZCkgJiYKIAkJCShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PRkxVU0gpID09IDAgJiYKIAkJCSgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPT0gMCB8fApAQCAtNjE2LDkgKzU5MiwxNSBAQAogCiBpZGVfZXh0X2RldnNldF9yd19zeW5jKG5vd2Vyciwgbm93ZXJyKTsKIAotc3RhdGljIHZvaWQgaWRlZGlza19zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGlkZV9kaXNrX2NoZWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJY2hhciAqbSA9IChjaGFyICopJmlkW0FUQV9JRF9QUk9EXTsKQEAgLTY0NSw0MCArNjI3LDIzIEBACiAJCWlmIChtYXhfcyA+IGh3aWYtPnJxc2l6ZSkKIAkJCW1heF9zID0gaHdpZi0+cnFzaXplOwogCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIG1heF9zKTsKKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIG1heF9zKTsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogbWF4IHJlcXVlc3Qgc2l6ZTogJWRLaUJcbiIsIGRyaXZlLT5uYW1lLAotCQkJIGRyaXZlLT5xdWV1ZS0+bWF4X3NlY3RvcnMgLyAyKTsKKwkJcS0+bWF4X3NlY3RvcnMgLyAyKTsKKworCWlmIChhdGFfaWRfaXNfc3NkKGlkKSB8fCBhdGFfaWRfaXNfY2ZhKGlkKSkKKwkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIHEpOwogCiAJLyogY2FsY3VsYXRlIGRyaXZlIGNhcGFjaXR5LCBhbmQgc2VsZWN0IExCQSBpZiBwb3NzaWJsZSAqLwotCWluaXRfaWRlZGlza19jYXBhY2l0eShkcml2ZSk7Ci0KLQkvKiBsaW1pdCBkcml2ZSBjYXBhY2l0eSB0byAxMzdHQiBpZiBMQkE0OCBjYW5ub3QgYmUgdXNlZCAqLwotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPT0gMCAmJgotCSAgICBkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggLSBmdWxsIGNhcGFjaXR5ICIKLQkJICAgICAgICIlbGx1IHNlY3RvcnMgKCVsbHUgTUIpXG4iLAotCQkgICAgICAgZHJpdmUtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpZHJpdmUtPmNhcGFjaXR5NjQsCi0JCSAgICAgICBzZWN0b3JzX3RvX01CKGRyaXZlLT5jYXBhY2l0eTY0KSk7Ci0JCWRyaXZlLT5jYXBhY2l0eTY0ID0gMVVMTCA8PCAyODsKLQl9Ci0KLQlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSAmJgotCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkpIHsKLQkJaWYgKGRyaXZlLT5jYXBhY2l0eTY0ID4gMVVMTCA8PCAyOCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggRE1BIC0gUElPIG1vZGUiCi0JCQkJCSAiIHdpbGwgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHNlY3RvcnMgIgotCQkJCQkgIj4gJXVcbiIsIGRyaXZlLT5uYW1lLCAxIDw8IDI4KTsKLQkJfSBlbHNlCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTEJBNDg7Ci0JfQorCWlkZV9kaXNrX2dldF9jYXBhY2l0eShkcml2ZSk7CiAKIAkvKgogCSAqIGlmIHBvc3NpYmxlLCBnaXZlIGZkaXNrIGFjY2VzcyB0byBtb3JlIG9mIHRoZSBkcml2ZSwKIAkgKiBieSBjb3JyZWN0aW5nIGJpb3NfY3lsczoKIAkgKi8KLQljYXBhY2l0eSA9IGlkZV9kaXNrX2NhcGFjaXR5KGRyaXZlKTsKKwljYXBhY2l0eSA9IGlkZV9nZF9jYXBhY2l0eShkcml2ZSk7CiAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRk9SQ0VEX0dFT00pID09IDApIHsKIAkJaWYgKGF0YV9pZF9sYmE0OF9lbmFibGVkKGRyaXZlLT5pZCkpIHsKQEAgLTcxOCw5ICs2ODMsMTcgQEAKIAkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfV0NBQ0hFOwogCiAJc2V0X3djYWNoZShkcml2ZSwgMSk7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSA9PSAwICYmCisJICAgIChkcml2ZS0+aGVhZCA9PSAwIHx8IGRyaXZlLT5oZWFkID4gMTYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgZ2VvbWV0cnk6ICVkIHBoeXNpY2FsIGhlYWRzP1xuIiwKKwkJCWRyaXZlLT5uYW1lLCBkcml2ZS0+aGVhZCk7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19BVFRBQ0g7CisJfSBlbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0FUVEFDSDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2NhY2hlZmx1c2hfcChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpZGVfZGlza19mbHVzaChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWYgKGF0YV9pZF9mbHVzaF9lbmFibGVkKGRyaXZlLT5pZCkgPT0gMCB8fAogCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XQ0FDSEUpID09IDApCkBAIC03MzAsMjY3ICs3MDMsNDAgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHdjYWNoZSBmbHVzaCBmYWlsZWQhXG4iLCBkcml2ZS0+bmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3JlbW92ZShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGlkZV9kaXNrX2luaXRfbWVkaWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKLQotCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpZGtwLT5kcml2ZXIpOwotCi0JZGVsX2dlbmRpc2soZyk7Ci0KLQlpZGVfY2FjaGVmbHVzaF9wKGRyaXZlKTsKLQotCWlkZV9kaXNrX3B1dChpZGtwKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gdG9faWRlX2Rpc2soa3JlZik7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0Jc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOwotCi0JZHJpdmUtPmRyaXZlcl9kYXRhID0gTlVMTDsKLQlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCXB1dF9kaXNrKGcpOwotCWtmcmVlKGlka3ApOwotfQotCi1zdGF0aWMgaW50IGlkZV9kaXNrX3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSk7Ci0KLS8qCi0gKiBPbiBIUEEgZHJpdmVzIHRoZSBjYXBhY2l0eSBuZWVkcyB0byBiZQotICogcmVpbml0aWxpemVkIG9uIHJlc3VtZSBvdGhlcndpc2UgdGhlIGRpc2sKLSAqIGNhbiBub3QgYmUgdXNlZCBhbmQgYSBoYXJkIHJlc2V0IGlzIHJlcXVpcmVkCi0gKi8KLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3Jlc3VtZShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWYgKGF0YV9pZF9ocGFfZW5hYmxlZChkcml2ZS0+aWQpKQotCQlpbml0X2lkZWRpc2tfY2FwYWNpdHkoZHJpdmUpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZGV2aWNlX3NodXRkb3duKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLSNpZmRlZglDT05GSUdfQUxQSEEKLQkvKiBPbiBBbHBoYSwgaGFsdCg4KSBkb2Vzbid0IGFjdHVhbGx5IHR1cm4gdGhlIG1hY2hpbmUgb2ZmLAotCSAgIGl0IHB1dHMgeW91IGludG8gdGhlIHNvcnQgb2YgZmlybXdhcmUgbW9uaXRvci4gVHlwaWNhbGx5LAotCSAgIGl0J3MgdXNlZCB0byBib290IGFub3RoZXIga2VybmVsIGltYWdlLCBzbyBpdCdzIG5vdCBtdWNoCi0JICAgZGlmZmVyZW50IGZyb20gcmVib290KDgpLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8KLQkgICBzcGluIGRvd24gdGhlIGRpc2sgaW4gdGhpcyBjYXNlLCBlc3BlY2lhbGx5IHNpbmNlIEFscGhhCi0JICAgZmlybXdhcmUgZG9lc24ndCBoYW5kbGUgZGlza3MgaW4gc3RhbmRieSBtb2RlIHByb3Blcmx5LgotCSAgIE9uIHRoZSBvdGhlciBoYW5kLCBpdCdzIHJlYXNvbmFibHkgc2FmZSB0byB0dXJuIHRoZSBwb3dlcgotCSAgIG9mZiB3aGVuIHRoZSBzaHV0ZG93biBwcm9jZXNzIHJlYWNoZXMgdGhlIGZpcm13YXJlIHByb21wdCwKLQkgICBhcyB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gdGFrZXMgcmF0aGVyIGxvbmcgdGltZSAtCi0JICAgYXQgbGVhc3QgMTAgc2Vjb25kcywgd2hpY2ggc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yCi0JICAgdGhlIGRpc2sgdG8gZXhwaXJlIGl0cyB3cml0ZSBjYWNoZS4gKi8KLQlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9QT1dFUl9PRkYpIHsKLSNlbHNlCi0JaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUkVTVEFSVCkgewotI2VuZGlmCi0JCWlkZV9jYWNoZWZsdXNoX3AoZHJpdmUpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2h1dGRvd246ICVzXG4iLCBkcml2ZS0+bmFtZSk7Ci0KLQlkcml2ZS0+Z2VuZGV2LmJ1cy0+c3VzcGVuZCgmZHJpdmUtPmdlbmRldiwgUE1TR19TVVNQRU5EKTsKLX0KLQotc3RhdGljIGlkZV9kcml2ZXJfdCBpZGVkaXNrX2RyaXZlciA9IHsKLQkuZ2VuX2RyaXZlciA9IHsKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkubmFtZQkJPSAiaWRlLWRpc2siLAotCQkuYnVzCQk9ICZpZGVfYnVzX3R5cGUsCi0JfSwKLQkucHJvYmUJCQk9IGlkZV9kaXNrX3Byb2JlLAotCS5yZW1vdmUJCQk9IGlkZV9kaXNrX3JlbW92ZSwKLQkucmVzdW1lCQkJPSBpZGVfZGlza19yZXN1bWUsCi0JLnNodXRkb3duCQk9IGlkZV9kZXZpY2Vfc2h1dGRvd24sCi0JLnZlcnNpb24JCT0gSURFRElTS19WRVJTSU9OLAotCS5kb19yZXF1ZXN0CQk9IGlkZV9kb19yd19kaXNrLAotCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCi0JLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQkucHJvYwkJCT0gaWRlX2Rpc2tfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRlX2Rpc2tfc2V0dGluZ3MsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19zZXRfZG9vcmxvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCitzdGF0aWMgaW50IGlkZV9kaXNrX3NldF9kb29ybG9jayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAorCQkJCSBpbnQgb24pCiB7CiAJaWRlX3Rhc2tfdCB0YXNrOworCWludCByZXQ7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRE9PUkxPQ0tJTkcpID09IDApCisJCXJldHVybiAwOwogCiAJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwogCXRhc2sudGYuY29tbWFuZCA9IG9uID8gQVRBX0NNRF9NRURJQV9MT0NLIDogQVRBX0NNRF9NRURJQV9VTkxPQ0s7CiAJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAKLQlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwlyZXQgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCisJaWYgKHJldCkKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpZGVkaXNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3A7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlOwotCi0JaWRrcCA9IGlkZV9kaXNrX2dldChkaXNrKTsKLQlpZiAoaWRrcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOWElPOwotCi0JZHJpdmUgPSBpZGtwLT5kcml2ZTsKLQotCWlka3AtPm9wZW5lcnMrKzsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpICYmIGlka3AtPm9wZW5lcnMgPT0gMSkgewotCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKLQkJLyoKLQkJICogSWdub3JlIHRoZSByZXR1cm4gY29kZSBmcm9tIGRvb3JfbG9jaywKLQkJICogc2luY2UgdGhlIG9wZW4oKSBoYXMgYWxyZWFkeSBzdWNjZWVkZWQsCi0JCSAqIGFuZCB0aGUgZG9vcl9sb2NrIGlzIGlycmVsZXZhbnQgYXQgdGhpcyBwb2ludC4KLQkJICovCi0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgJiYKLQkJICAgIGlkZWRpc2tfc2V0X2Rvb3Jsb2NrKGRyaXZlLCAxKSkKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhkaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKLQotCWlmIChpZGtwLT5vcGVuZXJzID09IDEpCi0JCWlkZV9jYWNoZWZsdXNoX3AoZHJpdmUpOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkgJiYgaWRrcC0+b3BlbmVycyA9PSAxKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgJiYKLQkJICAgIGlkZWRpc2tfc2V0X2Rvb3Jsb2NrKGRyaXZlLCAwKSkKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKLQl9Ci0KLQlpZGtwLT5vcGVuZXJzLS07Ci0KLQlpZGVfZGlza19wdXQoaWRrcCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVkaXNrX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhiZGV2LT5iZF9kaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKLQotCWdlby0+aGVhZHMgPSBkcml2ZS0+Ymlvc19oZWFkOwotCWdlby0+c2VjdG9ycyA9IGRyaXZlLT5iaW9zX3NlY3Q7Ci0JZ2VvLT5jeWxpbmRlcnMgPSAodTE2KWRyaXZlLT5iaW9zX2N5bDsgLyogdHJ1bmNhdGUgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVkaXNrX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQkvKiBkbyBub3Qgc2NhbiBwYXJ0aXRpb25zIHR3aWNlIGlmIHRoaXMgaXMgYSByZW1vdmFibGUgZGV2aWNlICovCi0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfQVRUQUNIKSB7Ci0JCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19BVFRBQ0g7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIGlmIHJlbW92YWJsZSwgYWx3YXlzIGFzc3VtZSBpdCB3YXMgY2hhbmdlZCAqLwotCXJldHVybiAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSk7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19yZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGlkZV9kaXNrX2NhcGFjaXR5KGlka3AtPmRyaXZlKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlZGlza19vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJCT0gaWRlZGlza19vcGVuLAotCS5yZWxlYXNlCQk9IGlkZWRpc2tfcmVsZWFzZSwKLQkuaW9jdGwJCQk9IGlkZV9kaXNrX2lvY3RsLAotCS5nZXRnZW8JCQk9IGlkZWRpc2tfZ2V0Z2VvLAotCS5tZWRpYV9jaGFuZ2VkCQk9IGlkZWRpc2tfbWVkaWFfY2hhbmdlZCwKLQkucmV2YWxpZGF0ZV9kaXNrCT0gaWRlZGlza19yZXZhbGlkYXRlX2Rpc2sKK2NvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YV9kaXNrX29wcyA9IHsKKwkuY2hlY2sJCT0gaWRlX2Rpc2tfY2hlY2ssCisJLmdldF9jYXBhY2l0eQk9IGlkZV9kaXNrX2dldF9jYXBhY2l0eSwKKwkuc2V0dXAJCT0gaWRlX2Rpc2tfc2V0dXAsCisJLmZsdXNoCQk9IGlkZV9kaXNrX2ZsdXNoLAorCS5pbml0X21lZGlhCT0gaWRlX2Rpc2tfaW5pdF9tZWRpYSwKKwkuc2V0X2Rvb3Jsb2NrCT0gaWRlX2Rpc2tfc2V0X2Rvb3Jsb2NrLAorCS5kb19yZXF1ZXN0CT0gaWRlX2RvX3J3X2Rpc2ssCisJLmVuZF9yZXF1ZXN0CT0gaWRlX2VuZF9yZXF1ZXN0LAorCS5pb2N0bAkJPSBpZGVfZGlza19pb2N0bCwKIH07Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiQVRBIERJU0sgRHJpdmVyIik7Ci0KLXN0YXRpYyBpbnQgaWRlX2Rpc2tfcHJvYmUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3A7Ci0Jc3RydWN0IGdlbmRpc2sgKmc7Ci0KLQkvKiBzdHJzdHIoImZvbyIsICIiKSBpcyBub24tTlVMTCAqLwotCWlmICghc3Ryc3RyKCJpZGUtZGlzayIsIGRyaXZlLT5kcml2ZXJfcmVxKSkKLQkJZ290byBmYWlsZWQ7Ci0KLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQotCQlnb3RvIGZhaWxlZDsKLQotCWlka3AgPSBremFsbG9jKHNpemVvZigqaWRrcCksIEdGUF9LRVJORUwpOwotCWlmICghaWRrcCkKLQkJZ290byBmYWlsZWQ7Ci0KLQlnID0gYWxsb2NfZGlza19ub2RlKElERV9ESVNLX01JTk9SUywgaHdpZl90b19ub2RlKGRyaXZlLT5od2lmKSk7Ci0JaWYgKCFnKQotCQlnb3RvIG91dF9mcmVlX2lka3A7Ci0KLQlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKLQotCWtyZWZfaW5pdCgmaWRrcC0+a3JlZik7Ci0KLQlpZGtwLT5kcml2ZSA9IGRyaXZlOwotCWlka3AtPmRyaXZlciA9ICZpZGVkaXNrX2RyaXZlcjsKLQlpZGtwLT5kaXNrID0gZzsKLQotCWctPnByaXZhdGVfZGF0YSA9ICZpZGtwLT5kcml2ZXI7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBpZGtwOwotCi0JaWRlZGlza19zZXR1cChkcml2ZSk7Ci0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQSkgPT0gMCAmJgotCSAgICAoZHJpdmUtPmhlYWQgPT0gMCB8fCBkcml2ZS0+aGVhZCA+IDE2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJTlZBTElEIEdFT01FVFJZOiAlZCBQSFlTSUNBTCBIRUFEUz9cbiIsCi0JCQlkcml2ZS0+bmFtZSwgZHJpdmUtPmhlYWQpOwotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOwotCX0gZWxzZQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19BVFRBQ0g7Ci0KLQlnLT5taW5vcnMgPSBJREVfRElTS19NSU5PUlM7Ci0JZy0+ZHJpdmVyZnNfZGV2ID0gJmRyaXZlLT5nZW5kZXY7Ci0JZy0+ZmxhZ3MgfD0gR0VOSERfRkxfRVhUX0RFVlQ7Ci0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKQotCQlnLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKLQlzZXRfY2FwYWNpdHkoZywgaWRlX2Rpc2tfY2FwYWNpdHkoZHJpdmUpKTsKLQlnLT5mb3BzID0gJmlkZWRpc2tfb3BzOwotCWFkZF9kaXNrKGcpOwotCXJldHVybiAwOwotCi1vdXRfZnJlZV9pZGtwOgotCWtmcmVlKGlka3ApOwotZmFpbGVkOgotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaWRlZGlza19leGl0KHZvaWQpCi17Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlkZWRpc2tfZHJpdmVyLmdlbl9kcml2ZXIpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpZGVkaXNrX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpZGVkaXNrX2RyaXZlci5nZW5fZHJpdmVyKTsKLX0KLQotTU9EVUxFX0FMSUFTKCJpZGU6Km0tZGlzayoiKTsKLU1PRFVMRV9BTElBUygiaWRlLWRpc2siKTsKLW1vZHVsZV9pbml0KGlkZWRpc2tfaW5pdCk7Ci1tb2R1bGVfZXhpdChpZGVkaXNrX2V4aXQpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suaCBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmgKaW5kZXggYTgyZmE0My4uZDUxMWRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5oCkBAIC0xLDE5ICsxLDExIEBACiAjaWZuZGVmIF9fSURFX0RJU0tfSAogI2RlZmluZSBfX0lERV9ESVNLX0gKIAotc3RydWN0IGlkZV9kaXNrX29iaiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlOwotCWlkZV9kcml2ZXJfdAkqZHJpdmVyOwotCXN0cnVjdCBnZW5kaXNrCSpkaXNrOwotCXN0cnVjdCBrcmVmCWtyZWY7Ci0JdW5zaWduZWQgaW50CW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLwotfTsKKyNpbmNsdWRlICJpZGUtZ2QuaCIKIAotI2RlZmluZSBpZGVfZGlza19nKGRpc2spIFwKLQljb250YWluZXJfb2YoKGRpc2spLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBpZGVfZGlza19vYmosIGRyaXZlcikKLQorI2lmZGVmIENPTkZJR19JREVfR0RfQVRBCiAvKiBpZGUtZGlzay5jICovCi1zZWN0b3JfdCBpZGVfZGlza19jYXBhY2l0eShpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzIGlkZV9hdGFfZGlza19vcHM7CiBpZGVfZGVjbF9kZXZzZXQoYWRkcmVzcyk7CiBpZGVfZGVjbF9kZXZzZXQobXVsdGNvdW50KTsKIGlkZV9kZWNsX2RldnNldChub3dlcnIpOwpAQCAtMjEsMTIgKzEzLDE3IEBACiBpZGVfZGVjbF9kZXZzZXQoYWNvdXN0aWMpOwogCiAvKiBpZGUtZGlza19pb2N0bC5jICovCi1pbnQgaWRlX2Rpc2tfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitpbnQgaWRlX2Rpc2tfaW9jdGwoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LCB1bnNpZ25lZCBpbnQsCisJCSAgIHVuc2lnbmVkIGxvbmcpOwogCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAvKiBpZGUtZGlza19wcm9jLmMgKi8KIGV4dGVybiBpZGVfcHJvY19lbnRyeV90IGlkZV9kaXNrX3Byb2NbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZV9kaXNrX3NldHRpbmdzW107CiAjZW5kaWYKKyNlbHNlCisjZGVmaW5lIGlkZV9kaXNrX3Byb2MJCU5VTEwKKyNkZWZpbmUgaWRlX2Rpc2tfc2V0dGluZ3MJTlVMTAorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0lERV9ESVNLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jCmluZGV4IGE2Y2YxYTAuLjdiNzgzZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX2lvY3RsLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfaW9jdGwuYwpAQCAtMTMsMTcgKzEzLDE0IEBACiB7IDAgfQogfTsKIAotaW50IGlkZV9kaXNrX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAoraW50IGlkZV9kaXNrX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhiZGV2LT5iZF9kaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKIAlpbnQgZXJyOwogCiAJZXJyID0gaWRlX3NldHRpbmdfaW9jdGwoZHJpdmUsIGJkZXYsIGNtZCwgYXJnLCBpZGVfZGlza19pb2N0bF9zZXR0aW5ncyk7CiAJaWYgKGVyciAhPSAtRU9QTk9UU1VQUCkKIAkJcmV0dXJuIGVycjsKIAotCXJldHVybiBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgZmlsZSwgYmRldiwgY21kLCBhcmcpOworCXJldHVybiBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgYmRldiwgY21kLCBhcmcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCmluZGV4IDQ3MjQ5NzYuLjExNDZmNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlpZGVfZHJpdmVfdCpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7CiAJaW50IGxlbjsKIAotCWxlbiA9IHNwcmludGYocGFnZSwgIiVsbHVcbiIsIChsb25nIGxvbmcpaWRlX2Rpc2tfY2FwYWNpdHkoZHJpdmUpKTsKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOwogCiAJUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCmluZGV4IDA5MDM3ODIuLmNhYzQzMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJCQl4Y291bnQgPSBiY291bnQgJiAweGZmZmY7CiAJCQlpZiAoaXNfdHJtMjkwKQogCQkJCXhjb3VudCA9ICgoeGNvdW50ID4+IDIpIC0gMSkgPDwgMTY7Ci0JCQlpZiAoeGNvdW50ID09IDB4MDAwMCkgeworCQkJZWxzZSBpZiAoeGNvdW50ID09IDB4MDAwMCkgewogCQkJCWlmIChjb3VudCsrID49IFBSRF9FTlRSSUVTKQogCQkJCQlnb3RvIHVzZV9waW9faW5zdGVhZDsKIAkJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKDB4ODAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggY2YwYWEyNS4uYWViMWFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtMTUsMTIgKzE1LDYgQEAKICAqIERvY3VtZW50YXRpb24vaWRlL0NoYW5nZUxvZy5pZGUtZmxvcHB5LjE5OTYtMjAwMgogICovCiAKLSNkZWZpbmUgRFJWX05BTUUgImlkZS1mbG9wcHkiCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCi0KLSNkZWZpbmUgSURFRkxPUFBZX1ZFUlNJT04gIjEuMDAiCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDksMTkgKzQzLDYgQEAKIAogI2luY2x1ZGUgImlkZS1mbG9wcHkuaCIKIAotLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlYnVnX21hc2s7Ci1tb2R1bGVfcGFyYW0oZGVidWdfbWFzaywgdWxvbmcsIDA2NDQpOwotCi0vKiBkZWZpbmUgdG8gc2VlIGRlYnVnIGluZm8gKi8KLSNkZWZpbmUgSURFRkxPUFBZX0RFQlVHX0xPRwkwCi0KLSNpZiBJREVGTE9QUFlfREVCVUdfTE9HCi0jZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncykKLSNlbHNlCi0jZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KIC8qCiAgKiBBZnRlciBlYWNoIGZhaWxlZCBwYWNrZXQgY29tbWFuZCB3ZSBpc3N1ZSBhIHJlcXVlc3Qgc2Vuc2UgY29tbWFuZCBhbmQgcmV0cnkKICAqIHRoZSBwYWNrZXQgY29tbWFuZCBJREVGTE9QUFlfTUFYX1BDX1JFVFJJRVMgdGltZXMuCkBAIC04Myw0MyArNjQsMTMgQEAKIC8qIEVycm9yIGNvZGUgcmV0dXJuZWQgaW4gcnEtPmVycm9ycyB0byB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIGRyaXZlci4gKi8KICNkZWZpbmUJSURFRkxPUFBZX0VSUk9SX0dFTkVSQUwJCTEwMQogCi1zdGF0aWMgREVGSU5FX01VVEVYKGlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfY2xlYW51cF9vYmooc3RydWN0IGtyZWYgKik7Ci0KLXN0YXRpYyBzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmlkZV9mbG9wcHlfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCWZsb3BweSA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZmxvcHB5X29iaik7Ci0JaWYgKGZsb3BweSkgewotCQlpZiAoaWRlX2RldmljZV9nZXQoZmxvcHB5LT5kcml2ZSkpCi0JCQlmbG9wcHkgPSBOVUxMOwotCQllbHNlCi0JCQlrcmVmX2dldCgmZmxvcHB5LT5rcmVmKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLQlyZXR1cm4gZmxvcHB5OwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3B1dChzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSkKLXsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCi0JbXV0ZXhfbG9jaygmaWRlZmxvcHB5X3JlZl9tdXRleCk7Ci0Ja3JlZl9wdXQoJmZsb3BweS0+a3JlZiwgaWRlZmxvcHB5X2NsZWFudXBfb2JqKTsKLQlpZGVfZGV2aWNlX3B1dChkcml2ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLX0KLQogLyoKICAqIFVzZWQgdG8gZmluaXNoIHNlcnZpY2luZyBhIHJlcXVlc3QuIEZvciByZWFkL3dyaXRlIHJlcXVlc3RzLCB3ZSB3aWxsIGNhbGwKICAqIGlkZV9lbmRfcmVxdWVzdCB0byBwYXNzIHRvIHRoZSBuZXh0IGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBpZGVmbG9wcHlfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBuc2VjcykKK3N0YXRpYyBpbnQgaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5zZWNzKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJaW50IGVycm9yOwogCkBAIC0xNjEsMTIgKzExMiwxMiBAQAogCXN0cnVjdCBiaW8gKmJpbyA9IHJxLT5iaW87CiAKIAl3aGlsZSAoKGJpbyA9IHJxLT5iaW8pICE9IE5VTEwpCi0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMCk7CisJCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIDApOwogfQogCiBzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAJaW50IHVwdG9kYXRlID0gcGMtPmVycm9yID8gMCA6IDE7CiAKQEAgLTIwMCwxMCArMTUxLDEwIEBACiAJCQkgICAgICAgIkFib3J0aW5nIHJlcXVlc3QhXG4iKTsKIAl9CiAKLQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKKwlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3Ioc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5LAogCQkJCSAgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAkvKiBzdXByZXNzIGVycm9yIG1lc3NhZ2VzIHJlc3VsdGluZyBmcm9tIE1lZGl1bSBub3QgcHJlc2VudCAqLwpAQCAtMjIyLDcgKzE3Myw3IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAogCWlmIChmbG9wcHktPmZhaWxlZF9wYyA9PSBOVUxMICYmCiAJICAgIHBjLT5jWzBdICE9IEdQQ01EX1JFUVVFU1RfU0VOU0UpCkBAIC0yODYsNyArMjM3LDcgQEAKIAkJCQkgICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZWN0b3IpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWludCBibG9jayA9IHNlY3RvciAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBibG9ja3MgPSBycS0+bnJfc2VjdG9ycyAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBjbWQgPSBycV9kYXRhX2RpcihycSk7CkBAIC0zMTAsNyArMjYxLDcgQEAKIAlwYy0+ZmxhZ3MgfD0gUENfRkxBR19ETUFfT0s7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9ibG9ja3BjX2NtZChpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSwKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9ibG9ja3BjX2NtZChzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHksCiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWRlX2luaXRfcGMocGMpOwpAQCAtMzI5LDEzICsyODAsMTIgQEAKIAlwYy0+cmVxX3hmZXIgPSBwYy0+YnVmX3NpemUgPSBycS0+ZGF0YV9sZW47CiB9CiAKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlZmxvcHB5X2RvX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQlzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrX3MpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9mbG9wcHlfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSAgICAgc3RydWN0IHJlcXVlc3QgKnJxLCBzZWN0b3JfdCBibG9jaykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwotCXVuc2lnbmVkIGxvbmcgYmxvY2sgPSAodW5zaWduZWQgbG9uZylibG9ja19zOwogCiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogZGV2OiAlcywgY21kOiAweCV4LCBjbWRfdHlwZTogJXgsICIKIAkJICAgICAgImVycm9yczogJWRcbiIsCkBAIC0zNTMsNyArMzAzLDcgQEAKIAkJZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEkvTyBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOwogCi0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKQEAgLTM2MSwxMSArMzExLDExIEBACiAJCSAgICAocnEtPm5yX3NlY3RvcnMgJSBmbG9wcHktPmJzX2ZhY3RvcikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bnN1cHBvcnRlZCByL3cgcnEgc2l6ZVxuIiwKIAkJCQlkcml2ZS0+bmFtZSk7Ci0JCQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJcGMgPSAmZmxvcHB5LT5xdWV1ZWRfcGM7Ci0JCWlkZWZsb3BweV9jcmVhdGVfcndfY21kKGRyaXZlLCBwYywgcnEsIGJsb2NrKTsKKwkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZHJpdmUsIHBjLCBycSwgKHVuc2lnbmVkIGxvbmcpYmxvY2spOwogCX0gZWxzZSBpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJcGMgPSAoc3RydWN0IGlkZV9hdGFwaV9wYyAqKSBycS0+YnVmZmVyOwogCX0gZWxzZSBpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CkBAIC0zNzMsNyArMzIzLDcgQEAKIAkJaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGZsb3BweSwgcGMsIHJxKTsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgUEZYICJ1bnN1cHBvcnRlZCBjb21tYW5kIGluIHF1ZXVlIik7Ci0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC0zOTQsNyArMzQ0LDcgQEAKICAqLwogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9mbGV4aWJsZV9kaXNrX3BhZ2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXU4ICpwYWdlOwpAQCAtNDEwLDExICszNjAsMTEgQEAKIAl9CiAKIAlpZiAocGMuYnVmWzNdICYgMHg4MCkKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19XUDsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfV1A7CiAJZWxzZQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19XUDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1dQOwogCi0Jc2V0X2Rpc2tfcm8oZGlzaywgISEoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1dQKSk7CisJc2V0X2Rpc2tfcm8oZGlzaywgISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XUCkpOwogCiAJcGFnZSA9ICZwYy5idWZbOF07CiAKQEAgLTQ0NSw3ICszOTUsOSBAQAogCQkJZHJpdmUtPm5hbWUsIGxiYV9jYXBhY2l0eSwgY2FwYWNpdHkpOwogCQlmbG9wcHktPmJsb2NrcyA9IGZsb3BweS0+YmxvY2tfc2l6ZSA/CiAJCQljYXBhY2l0eSAvIGZsb3BweS0+YmxvY2tfc2l6ZSA6IDA7CisJCWRyaXZlLT5jYXBhY2l0eTY0ID0gZmxvcHB5LT5ibG9ja3MgKiBmbG9wcHktPmJzX2ZhY3RvcjsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDU1LDcgKzQwNyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXU4ICpjYXBfZGVzYzsKQEAgLTQ2Niw3ICs0MTgsNyBAQAogCWRyaXZlLT5iaW9zX2hlYWQgPSBkcml2ZS0+Ymlvc19zZWN0ID0gMDsKIAlmbG9wcHktPmJsb2NrcyA9IDA7CiAJZmxvcHB5LT5ic19mYWN0b3IgPSAxOwotCXNldF9jYXBhY2l0eShmbG9wcHktPmRpc2ssIDApOworCWRyaXZlLT5jYXBhY2l0eTY0ID0gMDsKIAogCWlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKCZwYyk7CiAJaWYgKGlkZV9xdWV1ZV9wY190YWlsKGRyaXZlLCBkaXNrLCAmcGMpKSB7CkBAIC01MjMsNiArNDc1LDggQEAKIAkJCQkJICAgICAgICJub24gNTEyIGJ5dGVzIGJsb2NrIHNpemUgbm90ICIKIAkJCQkJICAgICAgICJmdWxseSBzdXBwb3J0ZWRcbiIsCiAJCQkJCSAgICAgICBkcml2ZS0+bmFtZSk7CisJCQkJZHJpdmUtPmNhcGFjaXR5NjQgPQorCQkJCQlmbG9wcHktPmJsb2NrcyAqIGZsb3BweS0+YnNfZmFjdG9yOwogCQkJCXJjID0gMDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTQ3LDIxICs1MDEsMTIgQEAKIAlpZiAoIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfQ0xJS19EUklWRSkpCiAJCSh2b2lkKSBpZGVfZmxvcHB5X2dldF9mbGV4aWJsZV9kaXNrX3BhZ2UoZHJpdmUpOwogCi0Jc2V0X2NhcGFjaXR5KGRpc2ssIGZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3IpOwotCiAJcmV0dXJuIHJjOwogfQogCi1zZWN0b3JfdCBpZGVfZmxvcHB5X2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9mbG9wcHlfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBmbG9wcHktPmJsb2NrcyAqIGZsb3BweS0+YnNfZmFjdG9yOwotCi0JcmV0dXJuIGNhcGFjaXR5OwotfQotCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSkKLXsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAogCWRyaXZlLT5wY19jYWxsYmFjawkgPSBpZGVfZmxvcHB5X2NhbGxiYWNrOwpAQCAtNTkyLDI1MiArNTM3LDQyIEBACiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKIAkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19DTElLX0RSSVZFOwogCQkvKiBJT01FR0EgQ2xpayEgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IGxvY2svdW5sb2NrIGNvbW1hbmRzICovCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAl9CiAKIAkodm9pZCkgaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoZHJpdmUpOwogCiAJaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBmbG9wcHktPmRyaXZlcik7CisKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19BVFRBQ0g7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9mbG9wcHlfZmx1c2goaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBnZW5kaXNrICpnID0gZmxvcHB5LT5kaXNrOwotCi0JaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGZsb3BweS0+ZHJpdmVyKTsKLQotCWRlbF9nZW5kaXNrKGcpOwotCi0JaWRlX2Zsb3BweV9wdXQoZmxvcHB5KTsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NsZWFudXBfb2JqKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIGludCBpZGVfZmxvcHB5X2luaXRfbWVkaWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IHRvX2lkZV9kcnYoa3JlZiwgaWRlX2Zsb3BweV9vYmopOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0Jc3RydWN0IGdlbmRpc2sgKmcgPSBmbG9wcHktPmRpc2s7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCWctPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JcHV0X2Rpc2soZyk7Ci0Ja2ZyZWUoZmxvcHB5KTsKLX0KLQotc3RhdGljIGludCBpZGVfZmxvcHB5X3Byb2JlKGlkZV9kcml2ZV90ICopOwotCi1zdGF0aWMgaWRlX2RyaXZlcl90IGlkZWZsb3BweV9kcml2ZXIgPSB7Ci0JLmdlbl9kcml2ZXIgPSB7Ci0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLm5hbWUJCT0gImlkZS1mbG9wcHkiLAotCQkuYnVzCQk9ICZpZGVfYnVzX3R5cGUsCi0JfSwKLQkucHJvYmUJCQk9IGlkZV9mbG9wcHlfcHJvYmUsCi0JLnJlbW92ZQkJCT0gaWRlX2Zsb3BweV9yZW1vdmUsCi0JLnZlcnNpb24JCT0gSURFRkxPUFBZX1ZFUlNJT04sCi0JLmRvX3JlcXVlc3QJCT0gaWRlZmxvcHB5X2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZWZsb3BweV9lbmRfcmVxdWVzdCwKLQkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAotI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVfZmxvcHB5X3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZV9mbG9wcHlfc2V0dGluZ3MsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5OwotCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgcmV0ID0gMDsKIAotCWZsb3BweSA9IGlkZV9mbG9wcHlfZ2V0KGRpc2spOwotCWlmICghZmxvcHB5KQotCQlyZXR1cm4gLUVOWElPOworCWlmIChpZGVfZG9fdGVzdF91bml0X3JlYWR5KGRyaXZlLCBkaXNrKSkKKwkJaWRlX2RvX3N0YXJ0X3N0b3AoZHJpdmUsIGRpc2ssIDEpOwogCi0JZHJpdmUgPSBmbG9wcHktPmRyaXZlOworCXJldCA9IGlkZV9mbG9wcHlfZ2V0X2NhcGFjaXR5KGRyaXZlKTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCXNldF9jYXBhY2l0eShkaXNrLCBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKIAotCWZsb3BweS0+b3BlbmVycysrOwotCi0JaWYgKGZsb3BweS0+b3BlbmVycyA9PSAxKSB7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKLQkJLyogSnVzdCBpbiBjYXNlICovCi0KLQkJaWYgKGlkZV9kb190ZXN0X3VuaXRfcmVhZHkoZHJpdmUsIGRpc2spKQotCQkJaWRlX2RvX3N0YXJ0X3N0b3AoZHJpdmUsIGRpc2ssIDEpOwotCi0JCWlmIChpZGVfZmxvcHB5X2dldF9jYXBhY2l0eShkcml2ZSkKLQkJICAgJiYgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkgPT0gMAotCQkgICAgLyoKLQkJICAgICAqIEFsbG93IE9fTkRFTEFZIHRvIG9wZW4gYSBkcml2ZSB3aXRob3V0IGEgZGlzaywgb3Igd2l0aCBhbgotCQkgICAgICogdW5yZWFkYWJsZSBkaXNrLCBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGZvcm1hdCBjYXBhY2l0eQotCQkgICAgICogb2YgdGhlIGRyaXZlIG9yIGJlZ2luIHRoZSBmb3JtYXQgLSBTYW0KLQkJICAgICAqLwotCQkgICAgKSB7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXRfcHV0X2Zsb3BweTsKLQkJfQotCi0JCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1dQKSAmJiAoZmlscC0+Zl9tb2RlICYgMikpIHsKLQkJCXJldCA9IC1FUk9GUzsKLQkJCWdvdG8gb3V0X3B1dF9mbG9wcHk7Ci0JCX0KLQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX01FRElBX0NIQU5HRUQ7Ci0JCWlkZV9zZXRfbWVkaWFfbG9jayhkcml2ZSwgZGlzaywgMSk7Ci0JCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwotCX0gZWxzZSBpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3B1dF9mbG9wcHk7Ci0JfQotCXJldHVybiAwOwotCi1vdXRfcHV0X2Zsb3BweToKLQlmbG9wcHktPm9wZW5lcnMtLTsKLQlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaWRlZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9mbG9wcHlfb2JqKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoZmxvcHB5LT5vcGVuZXJzID09IDEpIHsKLQkJaWRlX3NldF9tZWRpYV9sb2NrKGRyaXZlLCBkaXNrLCAwKTsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwotCX0KLQotCWZsb3BweS0+b3BlbmVycy0tOwotCi0JaWRlX2Zsb3BweV9wdXQoZmxvcHB5KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWZsb3BweV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBpZGVfZHJ2X2coYmRldi0+YmRfZGlzaywKLQkJCQkJCSAgICAgaWRlX2Zsb3BweV9vYmopOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0KLQlnZW8tPmhlYWRzID0gZHJpdmUtPmJpb3NfaGVhZDsKLQlnZW8tPnNlY3RvcnMgPSBkcml2ZS0+Ymlvc19zZWN0OwotCWdlby0+Y3lsaW5kZXJzID0gKHUxNilkcml2ZS0+Ymlvc19jeWw7IC8qIHRydW5jYXRlICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Zsb3BweV9vYmopOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0JaW50IHJldDsKLQotCS8qIGRvIG5vdCBzY2FuIHBhcnRpdGlvbnMgdHdpY2UgaWYgdGhpcyBpcyBhIHJlbW92YWJsZSBkZXZpY2UgKi8KLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19BVFRBQ0gpIHsKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0FUVEFDSDsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldCA9ICEhKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19NRURJQV9DSEFOR0VEKTsKLQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19NRURJQV9DSEFOR0VEOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZmxvcHB5X29iaik7Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGlkZV9mbG9wcHlfY2FwYWNpdHkoZmxvcHB5LT5kcml2ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZWZsb3BweV9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJCT0gaWRlZmxvcHB5X29wZW4sCi0JLnJlbGVhc2UJCT0gaWRlZmxvcHB5X3JlbGVhc2UsCi0JLmlvY3RsCQkJPSBpZGVfZmxvcHB5X2lvY3RsLAotCS5nZXRnZW8JCQk9IGlkZWZsb3BweV9nZXRnZW8sCi0JLm1lZGlhX2NoYW5nZWQJCT0gaWRlZmxvcHB5X21lZGlhX2NoYW5nZWQsCi0JLnJldmFsaWRhdGVfZGlzawk9IGlkZWZsb3BweV9yZXZhbGlkYXRlX2Rpc2sKK2NvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YXBpX2Rpc2tfb3BzID0geworCS5jaGVjawkJPSBpZGVfY2hlY2tfYXRhcGlfZGV2aWNlLAorCS5nZXRfY2FwYWNpdHkJPSBpZGVfZmxvcHB5X2dldF9jYXBhY2l0eSwKKwkuc2V0dXAJCT0gaWRlX2Zsb3BweV9zZXR1cCwKKwkuZmx1c2gJCT0gaWRlX2Zsb3BweV9mbHVzaCwKKwkuaW5pdF9tZWRpYQk9IGlkZV9mbG9wcHlfaW5pdF9tZWRpYSwKKwkuc2V0X2Rvb3Jsb2NrCT0gaWRlX3NldF9tZWRpYV9sb2NrLAorCS5kb19yZXF1ZXN0CT0gaWRlX2Zsb3BweV9kb19yZXF1ZXN0LAorCS5lbmRfcmVxdWVzdAk9IGlkZV9mbG9wcHlfZW5kX3JlcXVlc3QsCisJLmlvY3RsCQk9IGlkZV9mbG9wcHlfaW9jdGwsCiB9OwotCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfcHJvYmUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5OwotCXN0cnVjdCBnZW5kaXNrICpnOwotCi0JaWYgKCFzdHJzdHIoImlkZS1mbG9wcHkiLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZmxvcHB5KQotCQlnb3RvIGZhaWxlZDsKLQotCWlmICghaWRlX2NoZWNrX2F0YXBpX2RldmljZShkcml2ZSwgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiAiCi0JCSAgICAgICBEUlZfTkFNRSAiXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQlmbG9wcHkgPSBremFsbG9jKHNpemVvZihpZGVmbG9wcHlfZmxvcHB5X3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZsb3BweSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQ2FuJ3QgYWxsb2NhdGUgYSBmbG9wcHkgc3RydWN0dXJlXG4iLAotCQkgICAgICAgZHJpdmUtPm5hbWUpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KLQlnID0gYWxsb2NfZGlzaygxIDw8IFBBUlROX0JJVFMpOwotCWlmICghZykKLQkJZ290byBvdXRfZnJlZV9mbG9wcHk7Ci0KLQlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKLQotCWtyZWZfaW5pdCgmZmxvcHB5LT5rcmVmKTsKLQotCWZsb3BweS0+ZHJpdmUgPSBkcml2ZTsKLQlmbG9wcHktPmRyaXZlciA9ICZpZGVmbG9wcHlfZHJpdmVyOwotCWZsb3BweS0+ZGlzayA9IGc7Ci0KLQlnLT5wcml2YXRlX2RhdGEgPSAmZmxvcHB5LT5kcml2ZXI7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBmbG9wcHk7Ci0KLQlkcml2ZS0+ZGVidWdfbWFzayA9IGRlYnVnX21hc2s7Ci0KLQlpZGVmbG9wcHlfc2V0dXAoZHJpdmUsIGZsb3BweSk7Ci0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfQVRUQUNIOwotCi0JZy0+bWlub3JzID0gMSA8PCBQQVJUTl9CSVRTOwotCWctPmRyaXZlcmZzX2RldiA9ICZkcml2ZS0+Z2VuZGV2OwotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkKLQkJZy0+ZmxhZ3MgPSBHRU5IRF9GTF9SRU1PVkFCTEU7Ci0JZy0+Zm9wcyA9ICZpZGVmbG9wcHlfb3BzOwotCWFkZF9kaXNrKGcpOwotCXJldHVybiAwOwotCi1vdXRfZnJlZV9mbG9wcHk6Ci0Ja2ZyZWUoZmxvcHB5KTsKLWZhaWxlZDoKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlkZWZsb3BweV9leGl0KHZvaWQpCi17Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlkZWZsb3BweV9kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlkZWZsb3BweV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRyaXZlciAiIElERUZMT1BQWV9WRVJTSU9OICJcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlkZWZsb3BweV9kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BTElBUygiaWRlOiptLWZsb3BweSoiKTsKLU1PRFVMRV9BTElBUygiaWRlLWZsb3BweSIpOwotbW9kdWxlX2luaXQoaWRlZmxvcHB5X2luaXQpOwotbW9kdWxlX2V4aXQoaWRlZmxvcHB5X2V4aXQpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBVEFQSSBGTE9QUFkgRHJpdmVyIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaCBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaAppbmRleCAxN2NmODY1Li42ZGQyYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmgKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5oCkBAIC0xLDM3ICsxLDkgQEAKICNpZm5kZWYgX19JREVfRkxPUFBZX0gKICNkZWZpbmUgX19JREVfRkxPUFBZX0gKIAotLyoKLSAqIE1vc3Qgb2Ygb3VyIGdsb2JhbCBkYXRhIHdoaWNoIHdlIG5lZWQgdG8gc2F2ZSBldmVuIGFzIHdlIGxlYXZlIHRoZSBkcml2ZXIKLSAqIGR1ZSB0byBhbiBpbnRlcnJ1cHQgb3IgYSB0aW1lciBldmVudCBpcyBzdG9yZWQgaW4gYSB2YXJpYWJsZSBvZiB0eXBlCi0gKiBpZGVmbG9wcHlfZmxvcHB5X3QsIGRlZmluZWQgYmVsb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGlkZV9mbG9wcHlfb2JqIHsKLQlpZGVfZHJpdmVfdAkqZHJpdmU7Ci0JaWRlX2RyaXZlcl90CSpkcml2ZXI7Ci0Jc3RydWN0IGdlbmRpc2sJKmRpc2s7Ci0Jc3RydWN0IGtyZWYJa3JlZjsKLQl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCisjaW5jbHVkZSAiaWRlLWdkLmgiCiAKLQkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKLQkvKiB1c2VkIGZvciBibGtfe2ZzLHBjfV9yZXF1ZXN0KCkgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHF1ZXVlZF9wYzsKLQotCS8qIExhc3QgZXJyb3IgaW5mb3JtYXRpb24gKi8KLQl1OCBzZW5zZV9rZXksIGFzYywgYXNjcTsKLQotCWludCBwcm9ncmVzc19pbmRpY2F0aW9uOwotCi0JLyogRGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyogQ3VycmVudCBmb3JtYXQgKi8KLQlpbnQgYmxvY2tzLCBibG9ja19zaXplLCBic19mYWN0b3I7Ci0JLyogTGFzdCBmb3JtYXQgY2FwYWNpdHkgZGVzY3JpcHRvciAqLwotCXU4IGNhcF9kZXNjWzhdOwotCS8qIENvcHkgb2YgdGhlIGZsZXhpYmxlIGRpc2sgcGFnZSAqLwotCXU4IGZsZXhpYmxlX2Rpc2tfcGFnZVszMl07Ci19IGlkZWZsb3BweV9mbG9wcHlfdDsKLQorI2lmZGVmIENPTkZJR19JREVfR0RfQVRBUEkKIC8qCiAgKiBQYWdlcyBvZiB0aGUgU0VMRUNUIFNFTlNFIC8gTU9ERSBTRU5TRSBwYWNrZXQgY29tbWFuZHMuCiAgKiBTZWUgU0ZGLTgwNzBpIHNwZWMuCkBAIC00NiwxNyArMTgsMjIgQEAKICNkZWZpbmUgSURFRkxPUFBZX0lPQ1RMX0ZPUk1BVF9HRVRfUFJPR1JFU1MJMHg0NjAzCiAKIC8qIGlkZS1mbG9wcHkuYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YXBpX2Rpc2tfb3BzOwogdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9tb2RlX3NlbnNlX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICosIHU4KTsKIHZvaWQgaWRlX2Zsb3BweV9jcmVhdGVfcmVhZF9jYXBhY2l0eV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqKTsKLXNlY3Rvcl90IGlkZV9mbG9wcHlfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKik7CiAKIC8qIGlkZS1mbG9wcHlfaW9jdGwuYyAqLwotaW50IGlkZV9mbG9wcHlfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKK2ludCBpZGVfZmxvcHB5X2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCwKKwkJICAgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAvKiBpZGUtZmxvcHB5X3Byb2MuYyAqLwogZXh0ZXJuIGlkZV9wcm9jX2VudHJ5X3QgaWRlX2Zsb3BweV9wcm9jW107CiBleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVfZmxvcHB5X3NldHRpbmdzW107CiAjZW5kaWYKKyNlbHNlCisjZGVmaW5lIGlkZV9mbG9wcHlfcHJvYwkJTlVMTAorI2RlZmluZSBpZGVfZmxvcHB5X3NldHRpbmdzCU5VTEwKKyNlbmRpZgogCiAjZW5kaWYgLypfX0lERV9GTE9QUFlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCmluZGV4IGEzYTdhMDguLjJiYzUxZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9mb3JtYXRfY2FwYWNpdGllcyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBfX3VzZXIgKmFyZykKIHsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCBoZWFkZXJfbGVuLCBkZXNjX2NudDsKIAlpbnQgaSwgYmxvY2tzLCBsZW5ndGgsIHVfYXJyYXlfc2l6ZSwgdV9pbmRleDsKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X3NmcnBfYml0KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAogCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX1NSRlA7CkBAIC0xMzIsMTcgKzEzMiwxNyBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZm9ybWF0X3VuaXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgX191c2VyICphcmcpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaW50IGJsb2NrcywgbGVuZ3RoLCBmbGFncywgZXJyID0gMDsKIAogCWlmIChmbG9wcHktPm9wZW5lcnMgPiAxKSB7CiAJCS8qIERvbid0IGZvcm1hdCBpZiBzb21lb25lIGlzIHVzaW5nIHRoZSBkaXNrICovCi0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAKIAkvKgogCSAqIFNlbmQgQVRBUElfRk9STUFUX1VOSVQgdG8gdGhlIGRyaXZlLgpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIG91dDoKIAlpZiAoZXJyKQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTkwLDcgKzE5MCw3IEBACiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfZm9ybWF0X3Byb2dyZXNzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IF9fdXNlciAqYXJnKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCWludCBwcm9ncmVzc19pbmRpY2F0aW9uID0gMHgxMDAwMDsKIApAQCAtMjI2LDcgKzIyNiw3IEBACiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfbG9ja2Rvb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IGNtZCkKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBmbG9wcHktPmRpc2s7CiAJaW50IHByZXZlbnQgPSAoYXJnICYmIGNtZCAhPSBDRFJPTUVKRUNUKSA/IDEgOiAwOwogCkBAIC0yNDEsNyArMjQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZGVfZmxvcHB5X2Zvcm1hdF9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBpZGVfZmxvcHB5X2Zvcm1hdF9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIGZtb2RlX3QgbW9kZSwKIAkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjUwLDcgKzI1MCw3IEBACiAJY2FzZSBJREVGTE9QUFlfSU9DVExfRk9STUFUX0dFVF9DQVBBQ0lUWToKIAkJcmV0dXJuIGlkZV9mbG9wcHlfZ2V0X2Zvcm1hdF9jYXBhY2l0aWVzKGRyaXZlLCBhcmdwKTsKIAljYXNlIElERUZMT1BQWV9JT0NUTF9GT1JNQVRfU1RBUlQ6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIDIpKQorCQlpZiAoIShtb2RlICYgRk1PREVfV1JJVEUpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJcmV0dXJuIGlkZV9mbG9wcHlfZm9ybWF0X3VuaXQoZHJpdmUsIChpbnQgX191c2VyICopYXJncCk7CiAJY2FzZSBJREVGTE9QUFlfSU9DVExfRk9STUFUX0dFVF9QUk9HUkVTUzoKQEAgLTI2MCwxMyArMjYwLDkgQEAKIAl9CiB9CiAKLWludCBpZGVfZmxvcHB5X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitpbnQgaWRlX2Zsb3BweV9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCSAgICAgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLAotCQkJCQkJICAgICBpZGVfZmxvcHB5X29iaik7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBlcnI7CkBAIC0yNzQsNyArMjcwLDcgQEAKIAlpZiAoY21kID09IENEUk9NRUpFQ1QgfHwgY21kID09IENEUk9NX0xPQ0tET09SKQogCQlyZXR1cm4gaWRlX2Zsb3BweV9sb2NrZG9vcihkcml2ZSwgJnBjLCBhcmcsIGNtZCk7CiAKLQllcnIgPSBpZGVfZmxvcHB5X2Zvcm1hdF9pb2N0bChkcml2ZSwgZmlsZSwgY21kLCBhcmdwKTsKKwllcnIgPSBpZGVfZmxvcHB5X2Zvcm1hdF9pb2N0bChkcml2ZSwgbW9kZSwgY21kLCBhcmdwKTsKIAlpZiAoZXJyICE9IC1FTk9UVFkpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI4MywxMSArMjc5LDExIEBACiAJICogYW5kIENEUk9NX1NFTkRfUEFDS0VUIChsZWdhY3kpIGlvY3RscwogCSAqLwogCWlmIChjbWQgIT0gQ0RST01fU0VORF9QQUNLRVQgJiYgY21kICE9IFNDU0lfSU9DVExfU0VORF9DT01NQU5EKQotCQllcnIgPSBzY3NpX2NtZF9pb2N0bChmaWxlLCBiZGV2LT5iZF9kaXNrLT5xdWV1ZSwKLQkJCQkJYmRldi0+YmRfZGlzaywgY21kLCBhcmdwKTsKKwkJZXJyID0gc2NzaV9jbWRfaW9jdGwoYmRldi0+YmRfZGlzay0+cXVldWUsIGJkZXYtPmJkX2Rpc2ssCisJCQkJbW9kZSwgY21kLCBhcmdwKTsKIAogCWlmIChlcnIgPT0gLUVOT1RUWSkKLQkJZXJyID0gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKKwkJZXJyID0gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGJkZXYsIGNtZCwgYXJnKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jCmluZGV4IDc2ZjBjNmMuLjNlYzc2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jCkBAIC05LDcgKzksNyBAQAogCWlkZV9kcml2ZV90KmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKIAlpbnQgbGVuOwogCi0JbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZmxvcHB5X2NhcGFjaXR5KGRyaXZlKSk7CisJbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKIAlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNjY2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwpAQCAtMCwwICsxLDM5NiBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKworI2lmICFkZWZpbmVkKENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCkKKyNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkoMSA8PCBQQVJUTl9CSVRTKQorI2Vsc2UKKyNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkwCisjZW5kaWYKKworI2luY2x1ZGUgImlkZS1kaXNrLmgiCisjaW5jbHVkZSAiaWRlLWZsb3BweS5oIgorCisjZGVmaW5lIElERV9HRF9WRVJTSU9OCSIxLjE4IgorCisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVidWdfbWFzazsKK21vZHVsZV9wYXJhbShkZWJ1Z19tYXNrLCB1bG9uZywgMDY0NCk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoaWRlX2Rpc2tfcmVmX211dGV4KTsKKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqKTsKKworc3RhdGljIHN0cnVjdCBpZGVfZGlza19vYmogKmlkZV9kaXNrX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gTlVMTDsKKworCW11dGV4X2xvY2soJmlkZV9kaXNrX3JlZl9tdXRleCk7CisJaWRrcCA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZGlza19vYmopOworCWlmIChpZGtwKSB7CisJCWlmIChpZGVfZGV2aWNlX2dldChpZGtwLT5kcml2ZSkpCisJCQlpZGtwID0gTlVMTDsKKwkJZWxzZQorCQkJa3JlZl9nZXQoJmlka3AtPmtyZWYpOworCX0KKwltdXRleF91bmxvY2soJmlkZV9kaXNrX3JlZl9tdXRleCk7CisJcmV0dXJuIGlka3A7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9kaXNrX3B1dChzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwKQoreworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJbXV0ZXhfbG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlrcmVmX3B1dCgmaWRrcC0+a3JlZiwgaWRlX2Rpc2tfcmVsZWFzZSk7CisJaWRlX2RldmljZV9wdXQoZHJpdmUpOworCW11dGV4X3VubG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKK30KKworc2VjdG9yX3QgaWRlX2dkX2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gZHJpdmUtPmNhcGFjaXR5NjQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX3Byb2JlKGlkZV9kcml2ZV90ICopOworCitzdGF0aWMgdm9pZCBpZGVfZ2RfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKKworCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpZGtwLT5kcml2ZXIpOworCisJZGVsX2dlbmRpc2soZyk7CisKKwlkcml2ZS0+ZGlza19vcHMtPmZsdXNoKGRyaXZlKTsKKworCWlkZV9kaXNrX3B1dChpZGtwKTsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gdG9faWRlX2RydihrcmVmLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKKworCWRyaXZlLT5kaXNrX29wcyA9IE5VTEw7CisJZHJpdmUtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXB1dF9kaXNrKGcpOworCWtmcmVlKGlka3ApOworfQorCisvKgorICogT24gSFBBIGRyaXZlcyB0aGUgY2FwYWNpdHkgbmVlZHMgdG8gYmUKKyAqIHJlaW5pdGlsaXplZCBvbiByZXN1bWUgb3RoZXJ3aXNlIHRoZSBkaXNrCisgKiBjYW4gbm90IGJlIHVzZWQgYW5kIGEgaGFyZCByZXNldCBpcyByZXF1aXJlZAorICovCitzdGF0aWMgdm9pZCBpZGVfZ2RfcmVzdW1lKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZiAoYXRhX2lkX2hwYV9lbmFibGVkKGRyaXZlLT5pZCkpCisJCSh2b2lkKWRyaXZlLT5kaXNrX29wcy0+Z2V0X2NhcGFjaXR5KGRyaXZlKTsKK30KKworc3RhdGljIHZvaWQgaWRlX2dkX3NodXRkb3duKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKyNpZmRlZglDT05GSUdfQUxQSEEKKwkvKiBPbiBBbHBoYSwgaGFsdCg4KSBkb2Vzbid0IGFjdHVhbGx5IHR1cm4gdGhlIG1hY2hpbmUgb2ZmLAorCSAgIGl0IHB1dHMgeW91IGludG8gdGhlIHNvcnQgb2YgZmlybXdhcmUgbW9uaXRvci4gVHlwaWNhbGx5LAorCSAgIGl0J3MgdXNlZCB0byBib290IGFub3RoZXIga2VybmVsIGltYWdlLCBzbyBpdCdzIG5vdCBtdWNoCisJICAgZGlmZmVyZW50IGZyb20gcmVib290KDgpLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8KKwkgICBzcGluIGRvd24gdGhlIGRpc2sgaW4gdGhpcyBjYXNlLCBlc3BlY2lhbGx5IHNpbmNlIEFscGhhCisJICAgZmlybXdhcmUgZG9lc24ndCBoYW5kbGUgZGlza3MgaW4gc3RhbmRieSBtb2RlIHByb3Blcmx5LgorCSAgIE9uIHRoZSBvdGhlciBoYW5kLCBpdCdzIHJlYXNvbmFibHkgc2FmZSB0byB0dXJuIHRoZSBwb3dlcgorCSAgIG9mZiB3aGVuIHRoZSBzaHV0ZG93biBwcm9jZXNzIHJlYWNoZXMgdGhlIGZpcm13YXJlIHByb21wdCwKKwkgICBhcyB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gdGFrZXMgcmF0aGVyIGxvbmcgdGltZSAtCisJICAgYXQgbGVhc3QgMTAgc2Vjb25kcywgd2hpY2ggc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yCisJICAgdGhlIGRpc2sgdG8gZXhwaXJlIGl0cyB3cml0ZSBjYWNoZS4gKi8KKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9QT1dFUl9PRkYpIHsKKyNlbHNlCisJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUkVTVEFSVCkgeworI2VuZGlmCisJCWRyaXZlLT5kaXNrX29wcy0+Zmx1c2goZHJpdmUpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiU2h1dGRvd246ICVzXG4iLCBkcml2ZS0+bmFtZSk7CisKKwlkcml2ZS0+Z2VuZGV2LmJ1cy0+c3VzcGVuZCgmZHJpdmUtPmdlbmRldiwgUE1TR19TVVNQRU5EKTsKK30KKworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV9kaXNrX3Byb2NfZW50cmllcyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spID8gaWRlX2Rpc2tfcHJvYyA6IGlkZV9mbG9wcHlfcHJvYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKmlkZV9kaXNrX3Byb2NfZGV2c2V0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spID8gaWRlX2Rpc2tfc2V0dGluZ3MKKwkJCQkJICA6IGlkZV9mbG9wcHlfc2V0dGluZ3M7Cit9CisjZW5kaWYKKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfZ2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IHNlY3RvcikKK3sKKwlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5kb19yZXF1ZXN0KGRyaXZlLCBycSwgc2VjdG9yKTsKK30KKworc3RhdGljIGludCBpZGVfZ2RfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpCit7CisJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+ZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCBucnNlY3MpOworfQorCitzdGF0aWMgaWRlX2RyaXZlcl90IGlkZV9nZF9kcml2ZXIgPSB7CisJLmdlbl9kcml2ZXIgPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gImlkZS1nZCIsCisJCS5idXMJCT0gJmlkZV9idXNfdHlwZSwKKwl9LAorCS5wcm9iZQkJCT0gaWRlX2dkX3Byb2JlLAorCS5yZW1vdmUJCQk9IGlkZV9nZF9yZW1vdmUsCisJLnJlc3VtZQkJCT0gaWRlX2dkX3Jlc3VtZSwKKwkuc2h1dGRvd24JCT0gaWRlX2dkX3NodXRkb3duLAorCS52ZXJzaW9uCQk9IElERV9HRF9WRVJTSU9OLAorCS5kb19yZXF1ZXN0CQk9IGlkZV9nZF9kb19yZXF1ZXN0LAorCS5lbmRfcmVxdWVzdAkJPSBpZGVfZ2RfZW5kX3JlcXVlc3QsCisJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKKwkucHJvY19lbnRyaWVzCQk9IGlkZV9kaXNrX3Byb2NfZW50cmllcywKKwkucHJvY19kZXZzZXRzCQk9IGlkZV9kaXNrX3Byb2NfZGV2c2V0cywKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBpZGVfZ2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCit7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3A7CisJaWRlX2RyaXZlX3QgKmRyaXZlOworCWludCByZXQgPSAwOworCisJaWRrcCA9IGlkZV9kaXNrX2dldChkaXNrKTsKKwlpZiAoaWRrcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOWElPOworCisJZHJpdmUgPSBpZGtwLT5kcml2ZTsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCisJaWRrcC0+b3BlbmVycysrOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkgJiYgaWRrcC0+b3BlbmVycyA9PSAxKSB7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CisJCS8qIEp1c3QgaW4gY2FzZSAqLworCisJCXJldCA9IGRyaXZlLT5kaXNrX29wcy0+aW5pdF9tZWRpYShkcml2ZSwgZGlzayk7CisKKwkJLyoKKwkJICogQWxsb3cgT19OREVMQVkgdG8gb3BlbiBhIGRyaXZlIHdpdGhvdXQgYSBkaXNrLCBvciB3aXRoIGFuCisJCSAqIHVucmVhZGFibGUgZGlzaywgc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBmb3JtYXQgY2FwYWNpdHkKKwkJICogb2YgdGhlIGRyaXZlIG9yIGJlZ2luIHRoZSBmb3JtYXQgLSBTYW0KKwkJICovCisJCWlmIChyZXQgJiYgKG1vZGUgJiBGTU9ERV9OREVMQVkpID09IDApIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dF9wdXRfaWRrcDsKKwkJfQorCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XUCkgJiYgKG1vZGUgJiBGTU9ERV9XUklURSkpIHsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0X3B1dF9pZGtwOworCQl9CisKKwkJLyoKKwkJICogSWdub3JlIHRoZSByZXR1cm4gY29kZSBmcm9tIGRvb3JfbG9jaywKKwkJICogc2luY2UgdGhlIG9wZW4oKSBoYXMgYWxyZWFkeSBzdWNjZWVkZWQsCisJCSAqIGFuZCB0aGUgZG9vcl9sb2NrIGlzIGlycmVsZXZhbnQgYXQgdGhpcyBwb2ludC4KKwkJICovCisJCWRyaXZlLT5kaXNrX29wcy0+c2V0X2Rvb3Jsb2NrKGRyaXZlLCBkaXNrLCAxKTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CisJfSBlbHNlIGlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X3B1dF9pZGtwOworCX0KKwlyZXR1cm4gMDsKKworb3V0X3B1dF9pZGtwOgorCWlka3AtPm9wZW5lcnMtLTsKKwlpZGVfZGlza19wdXQoaWRrcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKKwkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKKwkJZHJpdmUtPmRpc2tfb3BzLT5zZXRfZG9vcmxvY2soZHJpdmUsIGRpc2ssIDApOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCX0KKworCWlka3AtPm9wZW5lcnMtLTsKKworCWlkZV9kaXNrX3B1dChpZGtwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJZ2VvLT5oZWFkcyA9IGRyaXZlLT5iaW9zX2hlYWQ7CisJZ2VvLT5zZWN0b3JzID0gZHJpdmUtPmJpb3Nfc2VjdDsKKwlnZW8tPmN5bGluZGVycyA9ICh1MTYpZHJpdmUtPmJpb3NfY3lsOyAvKiB0cnVuY2F0ZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKwlpbnQgcmV0OworCisJLyogZG8gbm90IHNjYW4gcGFydGl0aW9ucyB0d2ljZSBpZiB0aGlzIGlzIGEgcmVtb3ZhYmxlIGRldmljZSAqLworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0FUVEFDSCkgeworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX01FRElBX0NIQU5HRUQpOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19NRURJQV9DSEFOR0VEOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlzZXRfY2FwYWNpdHkoZGlzaywgaWRlX2dkX2NhcGFjaXR5KGlka3AtPmRyaXZlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+aW9jdGwoZHJpdmUsIGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGVfZ2Rfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCQk9IGlkZV9nZF9vcGVuLAorCS5yZWxlYXNlCQk9IGlkZV9nZF9yZWxlYXNlLAorCS5sb2NrZWRfaW9jdGwJCT0gaWRlX2dkX2lvY3RsLAorCS5nZXRnZW8JCQk9IGlkZV9nZF9nZXRnZW8sCisJLm1lZGlhX2NoYW5nZWQJCT0gaWRlX2dkX21lZGlhX2NoYW5nZWQsCisJLnJldmFsaWRhdGVfZGlzawk9IGlkZV9nZF9yZXZhbGlkYXRlX2Rpc2sKK307CisKK3N0YXRpYyBpbnQgaWRlX2dkX3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzICpkaXNrX29wcyA9IE5VTEw7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKKwlzdHJ1Y3QgZ2VuZGlzayAqZzsKKworCS8qIHN0cnN0cigiZm9vIiwgIiIpIGlzIG5vbi1OVUxMICovCisJaWYgKCFzdHJzdHIoImlkZS1nZCIsIGRyaXZlLT5kcml2ZXJfcmVxKSkKKwkJZ290byBmYWlsZWQ7CisKKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCWRpc2tfb3BzID0gJmlkZV9hdGFfZGlza19vcHM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQVBJCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5KQorCQlkaXNrX29wcyA9ICZpZGVfYXRhcGlfZGlza19vcHM7CisjZW5kaWYKKwlpZiAoZGlza19vcHMgPT0gTlVMTCkKKwkJZ290byBmYWlsZWQ7CisKKwlpZiAoZGlza19vcHMtPmNoZWNrKGRyaXZlLCBEUlZfTkFNRSkgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlclxuIiwKKwkJCWRyaXZlLT5uYW1lKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWRrcCA9IGt6YWxsb2Moc2l6ZW9mKCppZGtwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZGtwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW4ndCBhbGxvY2F0ZSBhIGRpc2sgc3RydWN0dXJlXG4iLAorCQkJZHJpdmUtPm5hbWUpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlnID0gYWxsb2NfZGlza19ub2RlKElERV9ESVNLX01JTk9SUywgaHdpZl90b19ub2RlKGRyaXZlLT5od2lmKSk7CisJaWYgKCFnKQorCQlnb3RvIG91dF9mcmVlX2lka3A7CisKKwlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKKworCWtyZWZfaW5pdCgmaWRrcC0+a3JlZik7CisKKwlpZGtwLT5kcml2ZSA9IGRyaXZlOworCWlka3AtPmRyaXZlciA9ICZpZGVfZ2RfZHJpdmVyOworCWlka3AtPmRpc2sgPSBnOworCisJZy0+cHJpdmF0ZV9kYXRhID0gJmlka3AtPmRyaXZlcjsKKworCWRyaXZlLT5kcml2ZXJfZGF0YSA9IGlka3A7CisJZHJpdmUtPmRlYnVnX21hc2sgPSBkZWJ1Z19tYXNrOworCWRyaXZlLT5kaXNrX29wcyA9IGRpc2tfb3BzOworCisJZGlza19vcHMtPnNldHVwKGRyaXZlKTsKKworCXNldF9jYXBhY2l0eShnLCBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKKworCWctPm1pbm9ycyA9IElERV9ESVNLX01JTk9SUzsKKwlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKKwlnLT5mbGFncyB8PSBHRU5IRF9GTF9FWFRfREVWVDsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpCisJCWctPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOworCWctPmZvcHMgPSAmaWRlX2dkX29wczsKKwlhZGRfZGlzayhnKTsKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaWRrcDoKKwlrZnJlZShpZGtwKTsKK2ZhaWxlZDoKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2luaXQgaWRlX2dkX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICIgZHJpdmVyICIgSURFX0dEX1ZFUlNJT04gIlxuIik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaWRlX2dkX2RyaXZlci5nZW5fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlkZV9nZF9leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmlkZV9nZF9kcml2ZXIuZ2VuX2RyaXZlcik7Cit9CisKK01PRFVMRV9BTElBUygiaWRlOiptLWRpc2sqIik7CitNT0RVTEVfQUxJQVMoImlkZS1kaXNrIik7CitNT0RVTEVfQUxJQVMoImlkZToqbS1mbG9wcHkqIik7CitNT0RVTEVfQUxJQVMoImlkZS1mbG9wcHkiKTsKK21vZHVsZV9pbml0KGlkZV9nZF9pbml0KTsKK21vZHVsZV9leGl0KGlkZV9nZF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiZ2VuZXJpYyBBVEEvQVRBUEkgZGlzayBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5oIGIvZHJpdmVycy9pZGUvaWRlLWdkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzZDEwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX19JREVfR0RfSAorI2RlZmluZSBfX0lERV9HRF9ICisKKyNkZWZpbmUgRFJWX05BTUUgImlkZS1nZCIKKyNkZWZpbmUgUEZYIERSVl9OQU1FICI6ICIKKworLyogZGVmaW5lIHRvIHNlZSBkZWJ1ZyBpbmZvICovCisjZGVmaW5lIElERV9HRF9ERUJVR19MT0cJMAorCisjaWYgSURFX0dEX0RFQlVHX0xPRworI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MpCisjZWxzZQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdHJ1Y3QgaWRlX2Rpc2tfb2JqIHsKKwlpZGVfZHJpdmVfdAkqZHJpdmU7CisJaWRlX2RyaXZlcl90CSpkcml2ZXI7CisJc3RydWN0IGdlbmRpc2sJKmRpc2s7CisJc3RydWN0IGtyZWYJa3JlZjsKKwl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCisKKwkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKKwkvKiB1c2VkIGZvciBibGtfe2ZzLHBjfV9yZXF1ZXN0KCkgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHF1ZXVlZF9wYzsKKworCS8qIExhc3QgZXJyb3IgaW5mb3JtYXRpb24gKi8KKwl1OCBzZW5zZV9rZXksIGFzYywgYXNjcTsKKworCWludCBwcm9ncmVzc19pbmRpY2F0aW9uOworCisJLyogRGV2aWNlIGluZm9ybWF0aW9uICovCisJLyogQ3VycmVudCBmb3JtYXQgKi8KKwlpbnQgYmxvY2tzLCBibG9ja19zaXplLCBic19mYWN0b3I7CisJLyogTGFzdCBmb3JtYXQgY2FwYWNpdHkgZGVzY3JpcHRvciAqLworCXU4IGNhcF9kZXNjWzhdOworCS8qIENvcHkgb2YgdGhlIGZsZXhpYmxlIGRpc2sgcGFnZSAqLworCXU4IGZsZXhpYmxlX2Rpc2tfcGFnZVszMl07Cit9OworCitzZWN0b3JfdCBpZGVfZ2RfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKik7CisKKyNlbmRpZiAvKiBfX0lERV9HRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYyBiL2RyaXZlcnMvaWRlL2lkZS1oODMwMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggNzdjNmVhZS4uNzE2MmQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTE0OTMsOCArMTQ5Myw4IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAlod2dyb3VwLT5ycSA9IE5VTEw7Ci0JX19lbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAxKTsKLQlfX2dlbmVyaWNfdW5wbHVnX2RldmljZShkcml2ZS0+cXVldWUpOworCV9fZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7CisJYmxrX3N0YXJ0X3F1ZXVlaW5nKGRyaXZlLT5xdWV1ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCmluZGV4IGE5MDk0NWYuLmZjZGUxNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKQEAgLTI0MCw4ICsyNDAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBnZW5lcmljX2lkZV9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAoraW50IGdlbmVyaWNfaWRlX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IGI3NjJkZWIuLmJiN2ExZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtNzU1LDcgKzc1NSw3IEBACiAJIAogCXVkZWxheSgxKTsKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7CiAJdWRlbGF5KDEpOwogCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCAxOWY4Yzc3Li4xNjQ5ZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCWRyaXZlLT5yZWFkeV9zdGF0ID0gMDsKIAkJaWYgKGF0YV9pZF9jZGJfaW50cihpZCkpCiAJCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQ7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RPT1JMT0NLSU5HOwogCQkvKiB3ZSBkb24ndCBkbyBoZWFkIHVubG9hZGluZyBvbiBBVEFQSSBkZXZpY2VzICovCiAJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX1VOTE9BRDsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggYjI2OTI2NC4uYzMxZDBkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC01NjcsMTAgKzU2NywxMCBAQAogdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikKIHsKIAltdXRleF9sb2NrKCZpZGVfc2V0dGluZ19tdHgpOwotCWRyaXZlLT5zZXR0aW5ncyA9IGRyaXZlci0+c2V0dGluZ3M7CisJZHJpdmUtPnNldHRpbmdzID0gZHJpdmVyLT5wcm9jX2RldnNldHMoZHJpdmUpOwogCW11dGV4X3VubG9jaygmaWRlX3NldHRpbmdfbXR4KTsKIAotCWlkZV9hZGRfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2MsIGRyaXZlKTsKKwlpZGVfYWRkX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jX2VudHJpZXMoZHJpdmUpLCBkcml2ZSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTU5MSw3ICs1OTEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZGVfcmVtb3ZlX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jKTsKKwlpZGVfcmVtb3ZlX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jX2VudHJpZXMoZHJpdmUpKTsKIAogCW11dGV4X2xvY2soJmlkZV9zZXR0aW5nX210eCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCBkODc5Yzc3Li5hMmQ0NzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTIxMDgsNyArMjEwOCw3IEBACiAKIAkvKiBkZXZpY2UgbGFja3MgbG9ja2luZyBzdXBwb3J0IGFjY29yZGluZyB0byBjYXBhYmlsaXRpZXMgcGFnZSAqLwogCWlmICgoY2Fwc1s2XSAmIDEpID09IDApCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAogCWlmIChjYXBzWzddICYgMHgwMikKIAkJdGFwZS0+YmxrX3NpemUgPSA1MTI7CkBAIC0yMjk4LDYgKzIyOTgsMTYgQEAKIAl7ICJuYW1lIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZXRhcGVfcmVhZF9uYW1lLAlOVUxMIH0sCiAJeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KIH07CisKK3N0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfdGFwZV9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGV0YXBlX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfdGFwZV9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGV0YXBlX3NldHRpbmdzOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgaWRlX3RhcGVfcHJvYmUoaWRlX2RyaXZlX3QgKik7CkBAIC0yMzE1LDggKzIzMjUsOCBAQAogCS5lbmRfcmVxdWVzdAkJPSBpZGV0YXBlX2VuZF9yZXF1ZXN0LAogCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZXRhcGVfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRldGFwZV9zZXR0aW5ncywKKwkucHJvY19lbnRyaWVzCQk9IGlkZV90YXBlX3Byb2NfZW50cmllcywKKwkucHJvY19kZXZzZXRzCQk9IGlkZV90YXBlX3Byb2NfZGV2c2V0cywKICNlbmRpZgogfTsKIApAQCAtMjMzMCwzNSArMjM0MCwzMCBAQAogCS5yZWxlYXNlCT0gaWRldGFwZV9jaHJkZXZfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQgaWRldGFwZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBpZGV0YXBlX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlOworCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfdGFwZV9nZXQoYmRldi0+YmRfZGlzayk7CiAKLQl0YXBlID0gaWRlX3RhcGVfZ2V0KGRpc2spOwogCWlmICghdGFwZSkKIAkJcmV0dXJuIC1FTlhJTzsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlkZXRhcGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgaWRldGFwZV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwogCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfZHJ2X2coZGlzaywgaWRlX3RhcGVfb2JqKTsKIAogCWlkZV90YXBlX3B1dCh0YXBlKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlkZXRhcGVfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGlkZXRhcGVfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7CiAJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBpZGVfdGFwZV9vYmopOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IHRhcGUtPmRyaXZlOwotCWludCBlcnIgPSBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgZmlsZSwgYmRldiwgY21kLCBhcmcpOworCWludCBlcnIgPSBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgYmRldiwgY21kLCBhcmcpOwogCWlmIChlcnIgPT0gLUVJTlZBTCkKIAkJZXJyID0gaWRldGFwZV9ibGtkZXZfaW9jdGwoZHJpdmUsIGNtZCwgYXJnKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjM2OCw3ICsyMzczLDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gaWRldGFwZV9vcGVuLAogCS5yZWxlYXNlCT0gaWRldGFwZV9yZWxlYXNlLAotCS5pb2N0bAkJPSBpZGV0YXBlX2lvY3RsLAorCS5sb2NrZWRfaW9jdGwJPSBpZGV0YXBlX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBpZGVfdGFwZV9wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jIGIvZHJpdmVycy9pZGUvaWRlX2FybS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9pZGVfYXJtLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGVfcGxhdGZvcm0uYyBiL2RyaXZlcnMvaWRlL2lkZV9wbGF0Zm9ybS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9sZWdhY3kvaWRlX3BsYXRmb3JtLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2lkZV9wbGF0Zm9ybS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjEzLmMgYi9kcml2ZXJzL2lkZS9pdDgyMTMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvcGNpL2l0ODIxMy5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9pdDgyMTMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS9pdDgyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvaXQ4MjF4LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMgYi9kcml2ZXJzL2lkZS9qbWljcm9uLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL2ptaWNyb24uYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L01ha2VmaWxlIGIvZHJpdmVycy9pZGUvbGVnYWN5L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTM5MzI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLQotIyBsaW5rIG9yZGVyIGlzIGltcG9ydGFudCBoZXJlCi0KLW9iai0kKENPTkZJR19CTEtfREVWX0FMSTE0WFgpCQkrPSBhbGkxNHh4Lm8KLW9iai0kKENPTkZJR19CTEtfREVWX1VNQzg2NzIpCQkrPSB1bWM4NjcyLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0RUQzIyNzgpCQkrPSBkdGMyMjc4Lm8KLW9iai0kKENPTkZJR19CTEtfREVWX0hUNjU2MEIpCQkrPSBodDY1NjBiLm8KLW9iai0kKENPTkZJR19CTEtfREVWX1FENjVYWCkJCSs9IHFkNjV4eC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl80RFJJVkVTKQkJKz0gaWRlLTRkcml2ZXMubwotCi1vYmotJChDT05GSUdfQkxLX0RFVl9HQVlMRSkJCSs9IGdheWxlLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUpCSs9IGZhbGNvbmlkZS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9NQUNfSURFKQkJKz0gbWFjaWRlLm8KLW9iai0kKENPTkZJR19CTEtfREVWX1E0MElERSkJCSs9IHE0MGlkZS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9CVURESEEpCQkrPSBidWRkaGEubwotCi1pZmVxICgkKENPTkZJR19CTEtfREVWX0lERUNTKSwgbSkKLQlvYmotbSArPSBpZGUtY3MubwotZW5kaWYKLQotaWZlcSAoJChDT05GSUdfQkxLX0RFVl9QTEFURk9STSksIG0pCi0Jb2JqLW0gKz0gaWRlX3BsYXRmb3JtLm8KLWVuZGlmCi0KLUVYVFJBX0NGTEFHUwk6PSAtSWRyaXZlcnMvaWRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvbWFjaWRlLmMgYi9kcml2ZXJzL2lkZS9tYWNpZGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9tYWNpZGUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWlwcy9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL21pcHMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NzNmYTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvbWlwcy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWCkJKz0gYXUxeHh4LWlkZS5vCi0KLUVYVFJBX0NGTEFHUyAgICA6PSAtSWRyaXZlcnMvaWRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9uczg3NDE1LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMgYi9kcml2ZXJzL2lkZS9vcHRpNjIxLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL29wdGk2MjEuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL3BhbG1fYmszNzEwLmMgYi9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9hcm0vcGFsbV9iazM3MTAuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU2ZWU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLQotb2JqLSQoQ09ORklHX0JMS19ERVZfQUVDNjJYWCkJCSs9IGFlYzYyeHgubwotb2JqLSQoQ09ORklHX0JMS19ERVZfQUxJMTVYMykJCSs9IGFsaW0xNXgzLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0FNRDc0WFgpCQkrPSBhbWQ3NHh4Lm8KLW9iai0kKENPTkZJR19CTEtfREVWX0FUSUlYUCkJCSs9IGF0aWl4cC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9DRUxMRUIpCQkrPSBzY2NfcGF0YS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9DTUQ2NFgpCQkrPSBjbWQ2NHgubwotb2JqLSQoQ09ORklHX0JMS19ERVZfQ1M1NTIwKQkJKz0gY3M1NTIwLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0NTNTUzMCkJCSs9IGNzNTUzMC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9DUzU1MzUpCQkrPSBjczU1MzUubwotb2JqLSQoQ09ORklHX0JMS19ERVZfU0MxMjAwKQkJKz0gc2MxMjAwLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0NZODJDNjkzKQkJKz0gY3k4MmM2OTMubwotb2JqLSQoQ09ORklHX0JMS19ERVZfREVMS0lOKQkJKz0gZGVsa2luX2NiLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0hQVDM0WCkJCSs9IGhwdDM0eC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9IUFQzNjYpCQkrPSBocHQzNjYubwotb2JqLSQoQ09ORklHX0JMS19ERVZfSVQ4MjEzKQkJKz0gaXQ4MjEzLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0lUODIxWCkJCSs9IGl0ODIxeC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9KTUlDUk9OKQkJKz0gam1pY3Jvbi5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9OUzg3NDE1KQkJKz0gbnM4NzQxNS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9PUFRJNjIxKQkJKz0gb3B0aTYyMS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQpCSs9IHBkYzIwMnh4X29sZC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcpCSs9IHBkYzIwMnh4X25ldy5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9QSUlYKQkJKz0gcGlpeC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9SWjEwMDApCQkrPSByejEwMDAubwotb2JqLSQoQ09ORklHX0JMS19ERVZfU1ZXS1MpCQkrPSBzZXJ2ZXJ3b3Jrcy5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9TR0lJT0M0KQkJKz0gc2dpaW9jNC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9TSUlNQUdFKQkJKz0gc2lpbWFnZS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9TSVM1NTEzKQkJKz0gc2lzNTUxMy5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSkJCSs9IHNsODJjMTA1Lm8KLW9iai0kKENPTkZJR19CTEtfREVWX1NMQzkwRTY2KQkJKz0gc2xjOTBlNjYubwotb2JqLSQoQ09ORklHX0JMS19ERVZfVEM4NkMwMDEpCQkrPSB0Yzg2YzAwMS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9UUklGTEVYKQkJKz0gdHJpZmxleC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9UUk0yOTApCQkrPSB0cm0yOTAubwotb2JqLSQoQ09ORklHX0JMS19ERVZfVklBODJDWFhYKQkJKz0gdmlhODJjeHh4Lm8KLQotIyBNdXN0IGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBibG9jawotb2JqLSQoQ09ORklHX0JMS19ERVZfR0VORVJJQykJCSs9IGlkZS1wY2ktZ2VuZXJpYy5vCi1pZGUtcGNpLWdlbmVyaWMteQkJCSs9IGdlbmVyaWMubwotCi1pZmVxICgkKENPTkZJR19CTEtfREVWX0NNRDY0MCksIG0pCi0Jb2JqLW0gKz0gY21kNjQwLm8KLWVuZGlmCi0KLUVYVFJBX0NGTEFHUwk6PSAtSWRyaXZlcnMvaWRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMgYi9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ODlhNzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCAyMCBPY3QgMjAwNCBieSBNYXJrIExvcmQKLSAqCi0gKiAgQmFzaWMgc3VwcG9ydCBmb3IgRGVsa2luL0FTS0EvV29ya2JpdCBDYXJkYnVzIENvbXBhY3RGbGFzaCBhZGFwdGVyCi0gKgotICogIE1vZGVsZWQgYWZ0ZXIgdGhlIDE2LWJpdCBQQ01DSUEgZHJpdmVyOiBpZGUtY3MuYwotICoKLSAqICBUaGlzIGlzIHNsaWdodGx5IHBlY3VsaWFyLCBpbiB0aGF0IGl0IGlzIGEgUENJIGRyaXZlciwKLSAqICBidXQgaXMgTk9UIGFuIElERSBQQ0kgZHJpdmVyIC0tIHRoZSBJREUgbGF5ZXIgZG9lcyBub3QgZGlyZWN0bHkKLSAqICBzdXBwb3J0IGhvdCBpbnNlcnRpb24vcmVtb3ZhbCBvZiBQQ0kgaW50ZXJmYWNlcywgc28gdGhpcyBkcml2ZXIKLSAqICBpcyB1bmFibGUgdG8gdXNlIHRoZSBJREUgUENJIGludGVyZmFjZXMuICBJbnN0ZWFkLCBpdCB1c2VzIHRoZQotICogIHNhbWUgaW50ZXJmYWNlcyBhcyB0aGUgaWRlLWNzIChQQ01DSUEpIGRyaXZlciB1c2VzLgotICogIE9uIHRoZSBwbHVzIHNpZGUsIHRoZSBkcml2ZXIgaXMgYWxzbyBzbWFsbGVyL3NpbXBsZXIgdGhpcyB3YXkuCi0gKgotICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCi0gKiAgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0vKgotICogTm8gY2hpcCBkb2N1bWVudGF0aW9uIGhhcyB5ZXQgYmVlbiBmb3VuZCwKLSAqIHNvIHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHdlcmUgcHVsbGVkIGZyb20KLSAqIGEgcnVubmluZyBXaW45OCBzeXN0ZW0gdXNpbmcgImRlYnVnIi4KLSAqIFRoaXMgZ2l2ZXMgYXJvdW5kIDNNQnl0ZS9zZWNvbmQgcmVhZCBwZXJmb3JtYW5jZSwKLSAqIHdoaWNoIGlzIGFib3V0IDIvMyBvZiB3aGF0IHRoZSBjaGlwIGlzIGNhcGFibGUgb2YuCi0gKgotICogVGhlcmUgaXMgYWxzbyBhIDRLQnl0ZSBtbWlvIHJlZ2lvbiBvbiB0aGUgY2FyZCwKLSAqIGJ1dCBpdHMgcHVycG9zZSBoYXMgeWV0IHRvIGJlIHJldmVyc2UtZW5naW5lZXJlZC4KLSAqLwotc3RhdGljIGNvbnN0IHU4IHNldHVwW10gPSB7Ci0JMHgwMCwgMHgwNSwgMHhiZSwgMHgwMSwgMHgyMCwgMHg4ZiwgMHgwMCwgMHgwMCwKLQkweGE0LCAweDFmLCAweGIzLCAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4MywgMHgwMiwgMHgxMywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGRlbGtpbl9jYl9wb3J0X29wcyA9IHsKLQkucXVpcmtwcm9jCQk9IGlkZV91bmRlY29kZWRfc2xhdmUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZGVsa2luX2NiX3BvcnRfaW5mbyA9IHsKLQkucG9ydF9vcHMJCT0gJmRlbGtpbl9jYl9wb3J0X29wcywKLQkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfCBJREVfSEZMQUdfVU5NQVNLX0lSUVMgfAotCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1kZWxraW5fY2JfcHJvYmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOwotCWludCBpLCByYzsKLQlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0KLQlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZGVsa2luX2NiOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQgKCVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsICJkZWxraW5fY2IiKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkZWxraW5fY2I6IHBjaV9yZXF1ZXN0X3JlZ2lvbnMgZmFpbGVkICglZClcbiIsIHJjKTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0JCXJldHVybiByYzsKLQl9Ci0JYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOwotCW91dGIoMHgwMiwgYmFzZSArIDB4MWUpOwkvKiBzZXQgbklFTiB0byBibG9jayBpbnRlcnJ1cHRzICovCi0JaW5iKGJhc2UgKyAweDE3KTsJCS8qIHJlYWQgc3RhdHVzIHRvIGNsZWFyIGludGVycnVwdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNldHVwKTsgKytpKSB7Ci0JCWlmIChzZXR1cFtpXSkKLQkJCW91dGIoc2V0dXBbaV0sIGJhc2UgKyBpKTsKLQl9Ci0KLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBiYXNlICsgMHgxMCwgYmFzZSArIDB4MWUpOwotCWh3LmlycSA9IGRldi0+aXJxOwotCWh3LmRldiA9ICZkZXYtPmRldjsKLQlody5jaGlwc2V0ID0gaWRlX3BjaTsJCS8qIHRoaXMgZW5hYmxlcyBJUlEgc2hhcmluZyAqLwotCi0JcmMgPSBpZGVfaG9zdF9hZGQoJmRlbGtpbl9jYl9wb3J0X2luZm8sIGh3cywgJmhvc3QpOwotCWlmIChyYykKLQkJZ290byBvdXRfZGlzYWJsZTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9kaXNhYmxlOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWxraW5fY2JfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaWRlX2hvc3RfcmVtb3ZlKGhvc3QpOwotCi0JcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGVsa2luX2NiX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewotCXsgMHgxMTQ1LCAweGYwMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotCXsgMHgxMTQ1LCAweGYwMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotCXsgMCwgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGVsa2luX2NiX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZGVsa2luX2NiX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIkRlbGtpbi1BU0tBLVdvcmtiaXQgQ2FyZGJ1cyBJREUiLAotCS5pZF90YWJsZQk9IGRlbGtpbl9jYl9wY2lfdGJsLAotCS5wcm9iZQkJPSBkZWxraW5fY2JfcHJvYmUsCi0JLnJlbW92ZQkJPSBkZWxraW5fY2JfcmVtb3ZlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZGVsa2luX2NiX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGVsa2luX2NiX3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZGVsa2luX2NiX2V4aXQodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRlbGtpbl9jYl9wY2lfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoZGVsa2luX2NiX2luaXQpOwotbW9kdWxlX2V4aXQoZGVsa2luX2NiX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJNYXJrIExvcmQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQmFzaWMgc3VwcG9ydCBmb3IgRGVsa2luL0FTS0EvV29ya2JpdCBDYXJkYnVzIElERSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMWEzYWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMAlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoKLSAqCi0gKiAwMDoxMi4wIFVua25vd24gbWFzcyBzdG9yYWdlIGNvbnRyb2xsZXI6Ci0gKiBUcmlvbmVzIFRlY2hub2xvZ2llcywgSW5jLgotICogVW5rbm93biBkZXZpY2UgMDAwMyAocmV2IDAxKQotICoKLSAqIGhkZTogVURNQSAyICgweDAwMDAgMHgwMDAyKSAoMHgwMDAwIDB4MDAxMCkKLSAqIGhkZjogVURNQSAyICgweDAwMDIgMHgwMDEyKSAoMHgwMDEwIDB4MDAzMCkKLSAqIGhkZTogRE1BIDIgICgweDAwMDAgMHgwMDAyKSAoMHgwMDAwIDB4MDAxMCkKLSAqIGhkZjogRE1BIDIgICgweDAwMDIgMHgwMDEyKSAoMHgwMDEwIDB4MDAzMCkKLSAqIGhkZzogRE1BIDEgICgweDAwMTIgMHgwMDUyKSAoMHgwMDMwIDB4MDA3MCkKLSAqIGhkaDogRE1BIDEgICgweDAwNTIgMHgwMjUyKSAoMHgwMDcwIDB4MDBmMCkKLSAqCi0gKiBpZGUtcGNpLmMgcmVmZXJlbmNlCi0gKgotICogU2luY2UgdGhlcmUgYXJlIHR3byBjYXJkcyB0aGF0IHJlcG9ydCBhbG1vc3QgaWRlbnRpY2FsbHksCi0gKiB0aGUgb25seSBkaXNjZXJuYWJsZSBkaWZmZXJlbmNlIGlzIHRoZSB2YWx1ZXMgcmVwb3J0ZWQgaW4gcGNpY21kLgotICogQm9vdGluZy1CSU9TIGNhcmQgb3IgSFBUMzYzIDo6IHBjaWNtZCA9PSAweDA3Ci0gKiBOb24tYm9vdGFibGUgY2FyZCBvciBIUFQzNDMgOjogcGNpY21kID09IDB4MDUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0KLSNkZWZpbmUgRFJWX05BTUUgImhwdDM0eCIKLQotI2RlZmluZSBIUFQzNDNfREVCVUdfRFJJVkVfSU5GTwkJMAotCi1zdGF0aWMgdm9pZCBocHQzNHhfc2V0X21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihkcml2ZS0+aHdpZi0+ZGV2KTsKLQl1MzIgcmVnMT0gMCwgdG1wMSA9IDAsIHJlZzIgPSAwLCB0bXAyID0gMDsKLQl1OAkJCWhpX3NwZWVkLCBsb19zcGVlZDsKLQotCWhpX3NwZWVkID0gc3BlZWQgPj4gNDsKLQlsb19zcGVlZCA9IHNwZWVkICYgMHgwZjsKLQotCWlmIChoaV9zcGVlZCAmIDcpIHsKLQkJaGlfc3BlZWQgPSAoaGlfc3BlZWQgJiA0KSA/IDB4MDEgOiAweDEwOwotCX0gZWxzZSB7Ci0JCWxvX3NwZWVkIDw8PSA1OwotCQlsb19zcGVlZCA+Pj0gNTsKLQl9Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCAmcmVnMSk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgJnJlZzIpOwotCXRtcDEgPSAoKGxvX3NwZWVkIDw8ICgzKmRyaXZlLT5kbikpIHwgKHJlZzEgJiB+KDcgPDwgKDMqZHJpdmUtPmRuKSkpKTsKLQl0bXAyID0gKChoaV9zcGVlZCA8PCBkcml2ZS0+ZG4pIHwgKHJlZzIgJiB+KDB4MTEgPDwgZHJpdmUtPmRuKSkpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCB0bXAxKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgdG1wMik7Ci0KLSNpZiBIUFQzNDNfREVCVUdfRFJJVkVfSU5GTwotCXByaW50aygiJXM6ICVzIGRyaXZlJWQgKDB4JTA0eCAweCUwNHgpICgweCUwNHggMHglMDR4KSIgXAotCQkiICgweCUwMnggMHglMDJ4KVxuIiwKLQkJZHJpdmUtPm5hbWUsIGlkZV94ZmVyX3ZlcmJvc2Uoc3BlZWQpLAotCQlkcml2ZS0+ZG4sIHJlZzEsIHRtcDEsIHJlZzIsIHRtcDIsCi0JCWhpX3NwZWVkLCBsb19zcGVlZCk7Ci0jZW5kaWYgLyogSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8gKi8KLX0KLQotc3RhdGljIHZvaWQgaHB0MzR4X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKLXsKLQlocHQzNHhfc2V0X21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwotfQotCi0vKgotICogSWYgdGhlIEJJT1MgZG9lcyBub3Qgc2V0IHRoZSBJTyBiYXNlIGFkZGFyZXNzIHRvIFhYMDAsIDM0MyB3aWxsIGZhaWwuCi0gKi8KLSNkZWZpbmUJSFBUMzRYX1BDSV9JTklUX1JFRwkJMHg4MAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNHgoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgaSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBocHQzNHhJb0Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQl1bnNpZ25lZCBsb25nIGhwdF9hZGRyWzRdID0geyAweDIwLCAweDM0LCAweDI4LCAweDNjIH07Ci0JdW5zaWduZWQgbG9uZyBocHRfYWRkcl9sZW5bNF0gPSB7IDcsIDMsIDcsIDMgfTsKLQl1MTYgY21kOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBIUFQzNFhfUENJX0lOSVRfUkVHLCAweDAwKTsKLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQotCWlmIChjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweEYwKTsKLQllbHNlCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDIwKTsKLQotCS8qCi0JICogU2luY2UgMjAtMjMgY2FuIGJlIGFzc2lnbmVkIGFuZCBhcmUgUi9XLCB3ZSBjb3JyZWN0IHRoZW0uCi0JICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCAmIH5QQ0lfQ09NTUFORF9JTyk7Ci0JZm9yKGk9MDsgaTw0OyBpKyspIHsKLQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IChocHQzNHhJb0Jhc2UgKyBocHRfYWRkcltpXSk7Ci0JCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIGhwdF9hZGRyX2xlbltpXTsKLQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAotCQkJCShQQ0lfQkFTRV9BRERSRVNTXzAgKyAoaSAqIDQpKSwKLQkJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0KTsKLQl9Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gZGV2LT5pcnE7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGhwdDM0eF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb19tb2RlCQk9IGhwdDM0eF9zZXRfcGlvX21vZGUsCi0JLnNldF9kbWFfbW9kZQkJPSBocHQzNHhfc2V0X21vZGUsCi19OwotCi0jZGVmaW5lIElERV9IRkxBR1NfSFBUMzRYIFwKLQkoSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8IFwKLQkgSURFX0hGTEFHX05PX0RTQyB8IFwKLQkgSURFX0hGTEFHX05PX0FVVE9ETUEpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBocHQzNHhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCXsgLyogMDogSFBUMzQzICovCi0JCS5uYW1lCQk9IERSVl9OQU1FLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM0eCwKLQkJLnBvcnRfb3BzCT0gJmhwdDM0eF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0hQVDM0WCB8IElERV9IRkxBR19OT05fQk9PVEFCTEUsCi0JCS5waW9fbWFzawk9IEFUQV9QSU81LAotCX0sCi0JeyAvKiAxOiBIUFQzNDUgKi8KLQkJLm5hbWUJCT0gRFJWX05BTUUsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfaHB0MzR4LAotCQkucG9ydF9vcHMJPSAmaHB0MzR4X3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfSFBUMzRYIHwgSURFX0hGTEFHX09GRl9CT0FSRCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCi0jaWZkZWYgQ09ORklHX0hQVDM0WF9BVVRPRE1BCi0JCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMiwKLQkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAotCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAotI2VuZGlmCi0JfQotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgaHB0MzR4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZDsKLQl1MTYgcGNpY21kID0gMDsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZwY2ljbWQpOwotCi0JZCA9ICZocHQzNHhfY2hpcHNldHNbKHBjaWNtZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgPyAxIDogMF07Ci0KLQlyZXR1cm4gaWRlX3BjaV9pbml0X29uZShkZXYsIGQsIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0MzR4X3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzQzKSwgMCB9LAotCXsgMCwgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaHB0MzR4X3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaHB0MzR4X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIkhQVDM0eF9JREUiLAotCS5pZF90YWJsZQk9IGhwdDM0eF9wY2lfdGJsLAotCS5wcm9iZQkJPSBocHQzNHhfaW5pdF9vbmUsCi0JLnJlbW92ZQkJPSBpZGVfcGNpX3JlbW92ZSwKLQkuc3VzcGVuZAk9IGlkZV9wY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGlkZV9wY2lfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaHB0MzR4X2lkZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZocHQzNHhfcGNpX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBocHQzNHhfaWRlX2V4aXQodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhwdDM0eF9wY2lfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaHB0MzR4X2lkZV9pbml0KTsKLW1vZHVsZV9leGl0KGhwdDM0eF9pZGVfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkFuZHJlIEhlZHJpY2siKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIEhpZ2hwb2ludCAzNHggSURFIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZjE3MWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMJCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+Ci0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDEJICAgICAgICBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgSW5jCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDcJCUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA3CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBUaGFua3MgdG8gSGlnaFBvaW50IFRlY2hub2xvZ2llcyBmb3IgdGhlaXIgYXNzaXN0YW5jZSwgYW5kIGhhcmR3YXJlLgotICogU3BlY2lhbCBUaGFua3MgdG8gSm9uIEJ1cmNobW9yZSBpbiBTYW5EaWVnbyBmb3IgdGhlIGRlZXAgcG9ja2V0cywgaGlzCi0gKiBkb25hdGlvbiBvZiBhbiBBQml0IEJQNiBtYWluYm9hcmQsIHByb2Nlc3NvciwgYW5kIG1lbW9yeSBhY2VsbGVyYXRlZAotICogZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQuCi0gKgotICoKLSAqIEhpZ2hQb2ludCBoYXMgaXRzIG93biBkcml2ZXJzIChvcGVuIHNvdXJjZSBleGNlcHQgZm9yIHRoZSBSQUlEIHBhcnQpCi0gKiBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmhpZ2hwb2ludC10ZWNoLmNvbS9CSU9TJTIwKyUyMERyaXZlci8uCi0gKiBUaGlzIG1heSBiZSB1c2VmdWwgdG8gYW55b25lIHdhbnRpbmcgdG8gd29yayBvbiB0aGlzIGRyaXZlciwgaG93ZXZlciAgZG8gbm90Ci0gKiB0cnVzdCAgdGhlbSB0b28gbXVjaCBzaW5jZSB0aGUgY29kZSB0ZW5kcyB0byBiZWNvbWUgbGVzcyBhbmQgbGVzcyBtZWFuaW5nZnVsCi0gKiBhcyB0aGUgdGltZSBwYXNzZXMuLi4gOi0vCi0gKgotICogTm90ZSB0aGF0IGZpbmFsIEhQVDM3MCBzdXBwb3J0IHdhcyBkb25lIGJ5IGZvcmNlIGV4dHJhY3Rpb24gb2YgR1BMLgotICoKLSAqIC0gYWRkIGZ1bmN0aW9uIGZvciBnZXR0aW5nL3NldHRpbmcgcG93ZXIgc3RhdHVzIG9mIGRyaXZlCi0gKiAtIHRoZSBIUFQzNzAncyBzdGF0ZSBtYWNoaW5lIGNhbiBnZXQgY29uZnVzZWQuIHJlc2V0IGl0IGJlZm9yZSBlYWNoIGRtYSAKLSAqICAgeGZlciB0byBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcuCi0gKiAtIHJlc2V0IHN0YXRlIGVuZ2luZSB3aGVuZXZlciB3ZSBnZXQgYW4gZXJyb3IuCi0gKiAtIGNoZWNrIGZvciBidXNtYXN0ZXIgc3RhdGUgYXQgZW5kIG9mIGRtYS4gCi0gKiAtIHVzZSBuZXcgaGlnaHBvaW50IHRpbWluZ3MuCi0gKiAtIGRldGVjdCBidXMgc3BlZWQgdXNpbmcgaGlnaHBvaW50IHJlZ2lzdGVyLgotICogLSB1c2UgcGxsIGlmIHdlIGRvbid0IGhhdmUgYSBjbG9jayB0YWJsZS4gYWRkZWQgYSA2Nk1IeiB0YWJsZSB0aGF0J3MKLSAqICAganVzdCAyeCB0aGUgMzNNSHogdGFibGUuCi0gKiAtIHJlbW92ZWQgdHVybmFyb3VuZC4gTk9URTogd2UgbmV2ZXIgd2FudCB0byBzd2l0Y2ggYmV0d2VlbiBwbGwgYW5kCi0gKiAgIHBjaSBjbG9ja3MgYXMgdGhlIGNoaXAgY2FuIGdsaXRjaCBpbiB0aG9zZSBjYXNlcy4gdGhlIGhpZ2hwb2ludAotICogICBhcHByb3ZlZCB3b3JrYXJvdW5kIHNsb3dzIGV2ZXJ5dGhpbmcgZG93biB0b28gbXVjaCB0byBiZSB1c2VmdWwuIGluCi0gKiAgIGFkZGl0aW9uLCB3ZSB3b3VsZCBoYXZlIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gZWFjaCBjaGlwLgotICogCUFkcmlhbiBTdW4gPGEuc3VuQHN1bi5jb20+Ci0gKgotICogYWRkIGRyaXZlIHRpbWluZ3MgZm9yIDY2TUh6IFBDSSBidXMsCi0gKiBmaXggQVRBIENhYmxlIHNpZ25hbCBkZXRlY3Rpb24sIGZpeCBpbmNvcnJlY3QgL3Byb2MgaW5mbwotICogYWRkIC9wcm9jIGRpc3BsYXkgZm9yIHBlci1kcml2ZSBQSU8vRE1BL1VETUEgbW9kZSBhbmQKLSAqIHBlci1jaGFubmVsIEFUQS0zMy82NiBDYWJsZSBkZXRlY3QuCi0gKiAJRHVuY2FuIExhdXJpZSA8dm9pZEBzdW4uY29tPgotICoKLSAqIGZpeHVwIC9wcm9jIG91dHB1dCBmb3IgbXVsdGlwbGUgY29udHJvbGxlcnMKLSAqCVRpbSBIb2NraW4gPHRob2NraW5Ac3VuLmNvbT4KLSAqCi0gKiBPbiBocHQzNjY6IAotICogUmVzZXQgdGhlIGhwdDM2NiBvbiBlcnJvciwgcmVzZXQgb24gZG1hCi0gKiBGaXggZGlzYWJsaW5nIEZhc3QgSW50ZXJydXB0IGhwdDM2Ni4KLSAqIAlNaWtlIFdheWNoaXNvbiA8Y3JsZkBzdW4uY29tPgotICoKLSAqIEFkZGVkIHN1cHBvcnQgZm9yIDM3Mk4gY2xvY2tpbmcgYW5kIGNsb2NrIHN3aXRjaGluZy4gVGhlIDM3Mk4gbmVlZHMKLSAqIGRpZmZlcmVudCBjbG9ja3Mgb24gcmVhZC93cml0ZS4gVGhpcyByZXF1aXJlcyBvdmVybG9hZGluZyByd19kaXNrIGFuZAotICogb3RoZXIgZGVlcGx5IGNyYXp5IHRoaW5ncy4gVGhhbmtzIHRvIDxodHRwOi8vd3d3LmhvZXJzdHJlaWNoLmRlPiBmb3IKLSAqIGtlZXBpbmcgbWUgc2FuZS4gCi0gKgkJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KLSAqCi0gKiAtIGZpeCB0aGUgY2xvY2sgdHVybmFyb3VuZCBjb2RlOiBpdCB3YXMgd3JpdGluZyB0byB0aGUgd3JvbmcgcG9ydHMgd2hlbgotICogICBjYWxsZWQgZm9yIHRoZSBzZWNvbmRhcnkgY2hhbm5lbCwgY2FjaGluZyB0aGUgY3VycmVudCBjbG9jayBtb2RlIHBlci0KLSAqICAgY2hhbm5lbCBjYXVzZWQgdGhlIGNhY2hlZCByZWdpc3RlciB2YWx1ZSB0byBnZXQgb3V0IG9mIHN5bmMgd2l0aCB0aGUKLSAqICAgYWN0dWFsIG9uZSwgdGhlIGNoYW5uZWxzIHdlcmVuJ3Qgc2VyaWFsaXplZCwgdGhlIHR1cm5hcm91bmQgc2hvdWxkbid0Ci0gKiAgIGJlIGRvbmUgb24gNjYgTUh6IFBDSSBidXMKLSAqIC0gZGlzYWJsZSBVbHRyYUFUQS8xMDAgZm9yIEhQVDM3MCBieSBkZWZhdWx0IGFzIHRoZSAzMyBNSHogY2xvY2sgYmVpbmcgdXNlZAotICogICBkb2VzIG5vdCBhbGxvdyBmb3IgdGhpcyBzcGVlZCBhbnl3YXkKLSAqIC0gYXZvaWQgdG91Y2hpbmcgZGlzYWJsZWQgY2hhbm5lbHMgKGUuZy4gSFBUMzcxL04gYXJlIHNpbmdsZSBjaGFubmVsIGNoaXBzLAotICogICB0aGVpciBwcmltYXJ5IGNoYW5uZWwgaXMga2luZCBvZiB2aXJ0dWFsLCBpdCBpc24ndCB0aWVkIHRvIGFueSBwaW5zKQotICogLSBmaXgvcmVtb3ZlIGJhZC91bnVzZWQgdGltaW5nIHRhYmxlcyBhbmQgdXNlIG9uZSBzZXQgb2YgdGFibGVzIGZvciB0aGUgd2hvbGUKLSAqICAgSFBUMzd4IGNoaXAgZmFtaWx5OyBzYXZlIHNwYWNlIGJ5IGludHJvZHVjaW5nIHRoZSBzZXBhcmF0ZSB0cmFuc2ZlciBtb2RlCi0gKiAgIHRhYmxlIGluIHdoaWNoIHRoZSBtb2RlIGxvb2t1cCBpcyBkb25lCi0gKiAtIHVzZSBmX0NOVCB2YWx1ZSBzYXZlZCBieSAgdGhlIEhpZ2hQb2ludCBCSU9TIGFzIHJlYWRpbmcgaXQgZGlyZWN0bHkgZ2l2ZXMKLSAqICAgdGhlIHdyb25nIFBDSSBmcmVxdWVuY3kgc2luY2UgRFBMTCBoYXMgYWxyZWFkeSBiZWVuIGNhbGlicmF0ZWQgYnkgQklPUzsKLSAqICAgcmVhZCBpdCBvbmx5IGZyb20gdGhlIGZ1bmN0aW9uIDAgb2YgSFBUMzc0IGNoaXBzCi0gKiAtIGZpeCB0aGUgaG90c3dhcCBjb2RlOiAgaXQgY2F1c2VkIFJFU0VULSB0byBnbGl0Y2ggd2hlbiB0cmlzdGF0aW5nIHRoZSBidXMsCi0gKiAgIGFuZCBmb3IgSFBUMzZ4IHRoZSBvYnNvbGV0ZSBIRElPX1RSSVNUQVRFX0hXSUYgaGFuZGxlciB3YXMgY2FsbGVkIGluc3RlYWQKLSAqIC0gcGFzcyB0byBpbml0X2NoaXBzZXQoKSBoYW5kbGVycyBhIGNvcHkgb2YgdGhlIElERSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBhcwotICogICB0aGV5IHRhbXBlciB3aXRoIGl0cyBmaWVsZHMKLSAqIC0gcGFzcyAgdG8gdGhlIGluaXRfc2V0dXAgaGFuZGxlcnMgYSBjb3B5IG9mIHRoZSBpZGVfcGNpX2RldmljZV90IHN0cnVjdHVyZQotICogICBzaW5jZSB0aGV5IG1heSB0YW1wZXIgd2l0aCBpdHMgZmllbGRzCi0gKiAtIHByZWZpeCB0aGUgZHJpdmVyIHN0YXJ0dXAgbWVzc2FnZXMgd2l0aCB0aGUgcmVhbCBjaGlwIG5hbWUKLSAqIC0gY2xhaW0gdGhlIGV4dHJhIDI0MCBieXRlcyBvZiBJL08gc3BhY2UgZm9yIGFsbCBjaGlwcwotICogLSBvcHRpbWl6ZSB0aGUgVWx0cmFETUEgZmlsdGVyaW5nIGFuZCB0aGUgZHJpdmUgbGlzdCBsb29rdXAgY29kZQotICogLSB1c2UgcGNpX2dldF9zbG90KCkgdG8gZ2V0IHRvIHRoZSBmdW5jdGlvbiAxIG9mIEhQVDM2eC8zNzQKLSAqIC0gY2FjaGUgb2Zmc2V0IG9mIHRoZSBjaGFubmVsJ3MgbWlzYy4gY29udHJvbCByZWdpc3RlcnMgKE1DUnMpIGJlaW5nIHVzZWQKLSAqICAgdGhyb3VnaG91dCB0aGUgZHJpdmVyCi0gKiAtIG9ubHkgdG91Y2ggdGhlIHJlbGV2YW50IE1DUiB3aGVuIGRldGVjdGluZyB0aGUgY2FibGUgdHlwZSBvbiBIUFQzNzQncwotICogICBmdW5jdGlvbiAxCi0gKiAtIHJlbmFtZSBhbGwgdGhlIHJlZ2lzdGVyIHJlbGF0ZWQgdmFyaWFibGVzIGNvbnNpc3RlbnRseQotICogLSBtb3ZlIGFsbCB0aGUgaW50ZXJydXB0IHR3aWRkbGluZyBjb2RlIGZyb20gdGhlIHNwZWVkcHJvYyBoYW5kbGVycyBpbnRvCi0gKiAgIGluaXRfaHdpZl9ocHQzNjYoKSwgYWxzbyBncm91cGluZyBhbGwgdGhlIERNQSByZWxhdGVkIGNvZGUgdG9nZXRoZXIgdGhlcmUKLSAqIC0gbWVyZ2UgSFBUMzZ4L0hQVDM3eCBzcGVlZHByb2MgaGFuZGxlcnMsIGZpeCBQSU8gdGltaW5nIHJlZ2lzdGVyIG1hc2sgYW5kCi0gKiAgIHNlcGFyYXRlIHRoZSBVbHRyYURNQSBhbmQgTVdETUEgbWFza3MgdGhlcmUgdG8gYXZvaWQgY2hhbmdpbmcgUElPIHRpbWluZ3MKLSAqICAgd2hlbiBzZXR0aW5nIGFuIFVsdHJhRE1BIG1vZGUKLSAqIC0gZml4IGhwdDN4eF90dW5lX2RyaXZlKCkgdG8gc2V0IHRoZSBQSU8gbW9kZSByZXF1ZXN0ZWQsIG5vdCBhbHdheXMgc2VsZWN0Ci0gKiAgIHRoZSBiZXN0IHBvc3NpYmxlIG9uZQotICogLSBjbGVhbiB1cCBETUEgdGltZW91dCBoYW5kbGluZyBmb3IgSFBUMzcwCi0gKiAtIHN3aXRjaCB0byB1c2luZyB0aGUgZW51bWVyYXRpb24gdHlwZSB0byBkaWZmZXIgYmV0d2VlbiB0aGUgbnVtZXJvdXMgY2hpcAotICogICB2YXJpYW50cywgbWF0Y2hpbmcgUENJIGRldmljZS9yZXZpc2lvbiBJRCB3aXRoIHRoZSBjaGlwIHR5cGUgZWFybHksIGF0IHRoZQotICogICBpbml0X3NldHVwIHN0YWdlCi0gKiAtIGV4dGVuZCB0aGUgaHB0X2luZm8gc3RydWN0dXJlIHRvIGhvbGQgdGhlIERQTEwgYW5kIFBDSSBjbG9jayBmcmVxdWVuY2llcywKLSAqICAgc3RvcCBkdXBsaWNhdGluZyBpdCBmb3IgZWFjaCBjaGFubmVsIGJ5IHN0b3JpbmcgdGhlIHBvaW50ZXIgaW4gdGhlIHBjaV9kZXYKLSAqICAgc3RydWN0dXJlOiBmaXJzdCwgYXQgdGhlIGluaXRfc2V0dXAgc3RhZ2UsIHBvaW50IGl0IHRvIGEgc3RhdGljICJ0ZW1wbGF0ZSIKLSAqICAgd2l0aCBvbmx5IHRoZSBjaGlwIHR5cGUgYW5kIGl0cyBzcGVjaWZpYyBiYXNlIERQTEwgZnJlcXVlbmN5LCB0aGUgaGlnaGVzdAotICogICBVbHRyYURNQSBtb2RlLCBhbmQgdGhlIGNoaXAgc2V0dGluZ3MgdGFibGUgcG9pbnRlciBmaWxsZWQsICB0aGVuLCBhdCB0aGUKLSAqICAgaW5pdF9jaGlwc2V0IHN0YWdlLCBhbGxvY2F0ZSBwZXItY2hpcCBpbnN0YW5jZSAgYW5kIGZpbGwgaXQgd2l0aCB0aGUgcmVzdAotICogICBvZiB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uCi0gKiAtIGdldCByaWQgb2YgdGhlIGNvbnN0YW50IHRocmVzaG9sZHMgaW4gdGhlIEhQVDM3eCBQQ0kgY2xvY2sgZGV0ZWN0aW9uIGNvZGUsCi0gKiAgIHN3aXRjaCAgdG8gY2FsY3VsYXRpbmcgIFBDSSBjbG9jayBmcmVxdWVuY3kgYmFzZWQgb24gdGhlIGNoaXAncyBiYXNlIERQTEwKLSAqICAgZnJlcXVlbmN5Ci0gKiAtIHN3aXRjaCB0byB1c2luZyB0aGUgIERQTEwgY2xvY2sgYW5kIGVuYWJsZSBVbHRyYUFUQS8xMzMgbW9kZSBieSBkZWZhdWx0IG9uCi0gKiAgIGFueXRoaW5nICBuZXdlciB0aGFuIEhQVDM3MC9BIChleGNlcHQgSFBUMzc0IHRoYXQgaXMgbm90IGNhcGFibGUgb2YgdGhpcwotICogICBtb2RlIGFjY29yZGluZyB0byB0aGUgbWFudWFsKQotICogLSBmb2xkIFBDSSBjbG9jayBkZXRlY3Rpb24gYW5kIERQTEwgc2V0dXAgY29kZSBpbnRvIGluaXRfY2hpcHNldF9ocHQzNjYoKSwKLSAqICAgYWxzbyBmaXhpbmcgdGhlIGludGVyY2hhbmdlZCAyNS80MCBNSHogUENJIGNsb2NrIGNhc2VzIGZvciBIUFQzNnggY2hpcHM7Ci0gKiAgIHVuaWZ5IEhQVDM2eC8zN3ggdGltaW5nIHNldHVwIGNvZGUgYW5kIHRoZSBzcGVlZHByb2MgaGFuZGxlcnMgYnkgam9pbmluZwotICogICB0aGUgcmVnaXN0ZXIgc2V0dGluZyBsaXN0cyBpbnRvIHRoZSB0YWJsZSBpbmRleGVkIGJ5IHRoZSBjbG9jayBzZWxlY3RlZAotICogLSBzZXQgdGhlIGNvcnJlY3QgaHdpZi0+dWx0cmFfbWFzayBmb3IgZWFjaCBpbmRpdmlkdWFsIGNoaXAKLSAqIC0gYWRkIFVsdHJhIGFuZCBNVyBETUEgbW9kZSBmaWx0ZXJpbmcgZm9yIHRoZSBIUFQzN1syNF0gYmFzZWQgU0FUQSBjYXJkcwotICoJU2VyZ2VpIFNodHlseW92LCA8c3NodHlseW92QHJ1Lm12aXN0YS5jb20+IG9yIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNkZWZpbmUgRFJWX05BTUUgImhwdDM2NiIKLQotLyogdmFyaW91cyB0dW5pbmcgcGFyYW1ldGVycyAqLwotI2RlZmluZSBIUFRfUkVTRVRfU1RBVEVfRU5HSU5FCi0jdW5kZWYJSFBUX0RFTEFZX0lOVEVSUlVQVAotI2RlZmluZSBIUFRfU0VSSUFMSVpFX0lPCTAKLQotc3RhdGljIGNvbnN0IGNoYXIgKnF1aXJrX2RyaXZlc1tdID0gewotCSJRVUFOVFVNIEZJUkVCQUxMbGN0MDggMDgiLAotCSJRVUFOVFVNIEZJUkVCQUxMUCBLQTYuNCIsCi0JIlFVQU5UVU0gRklSRUJBTExQIExNMjAuNCIsCi0JIlFVQU5UVU0gRklSRUJBTExQIExNMjAuNSIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmJhZF9hdGExMDBfNVtdID0gewotCSJJQk0tRFRMQS0zMDcwNzUiLAotCSJJQk0tRFRMQS0zMDcwNjAiLAotCSJJQk0tRFRMQS0zMDcwNDUiLAotCSJJQk0tRFRMQS0zMDcwMzAiLAotCSJJQk0tRFRMQS0zMDcwMjAiLAotCSJJQk0tRFRMQS0zMDcwMTUiLAotCSJJQk0tRFRMQS0zMDUwNDAiLAotCSJJQk0tRFRMQS0zMDUwMzAiLAotCSJJQk0tRFRMQS0zMDUwMjAiLAotCSJJQzM1TDAxMEFWRVIwNy0wIiwKLQkiSUMzNUwwMjBBVkVSMDctMCIsCi0JIklDMzVMMDMwQVZFUjA3LTAiLAotCSJJQzM1TDA0MEFWRVIwNy0wIiwKLQkiSUMzNUwwNjBBVkVSMDctMCIsCi0JIldEQyBBQzMxMDIwMFIiLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpiYWRfYXRhNjZfNFtdID0gewotCSJJQk0tRFRMQS0zMDcwNzUiLAotCSJJQk0tRFRMQS0zMDcwNjAiLAotCSJJQk0tRFRMQS0zMDcwNDUiLAotCSJJQk0tRFRMQS0zMDcwMzAiLAotCSJJQk0tRFRMQS0zMDcwMjAiLAotCSJJQk0tRFRMQS0zMDcwMTUiLAotCSJJQk0tRFRMQS0zMDUwNDAiLAotCSJJQk0tRFRMQS0zMDUwMzAiLAotCSJJQk0tRFRMQS0zMDUwMjAiLAotCSJJQzM1TDAxMEFWRVIwNy0wIiwKLQkiSUMzNUwwMjBBVkVSMDctMCIsCi0JIklDMzVMMDMwQVZFUjA3LTAiLAotCSJJQzM1TDA0MEFWRVIwNy0wIiwKLQkiSUMzNUwwNjBBVkVSMDctMCIsCi0JIldEQyBBQzMxMDIwMFIiLAotCSJNQVhUT1IgU1RNMzMyMDYyMEEiLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpiYWRfYXRhNjZfM1tdID0gewotCSJXREMgQUMzMTAyMDBSIiwKLQlOVUxMCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqYmFkX2F0YTMzW10gPSB7Ci0JIk1heHRvciA5MjcyMFU4IiwgIk1heHRvciA5MjA0MFU2IiwgIk1heHRvciA5MTM2MFU0IiwgIk1heHRvciA5MTAyMFUzIiwgIk1heHRvciA5MDg0NVUzIiwgIk1heHRvciA5MDY1MFUyIiwKLQkiTWF4dG9yIDkxMzYwRDgiLCAiTWF4dG9yIDkxMTkwRDciLCAiTWF4dG9yIDkxMDIwRDYiLCAiTWF4dG9yIDkwODQ1RDUiLCAiTWF4dG9yIDkwNjgwRDQiLCAiTWF4dG9yIDkwNTEwRDMiLCAiTWF4dG9yIDkwMzQwRDIiLAotCSJNYXh0b3IgOTExNTJEOCIsICJNYXh0b3IgOTEwMDhENyIsICJNYXh0b3IgOTA4NDVENiIsICJNYXh0b3IgOTA4NDBENiIsICJNYXh0b3IgOTA3MjBENSIsICJNYXh0b3IgOTA2NDhENSIsICJNYXh0b3IgOTA1NzZENCIsCi0JIk1heHRvciA5MDUxMEQ0IiwKLQkiTWF4dG9yIDkwNDMyRDMiLCAiTWF4dG9yIDkwMjg4RDIiLCAiTWF4dG9yIDkwMjU2RDIiLAotCSJNYXh0b3IgOTEwMDBEOCIsICJNYXh0b3IgOTA5MTBEOCIsICJNYXh0b3IgOTA4NzVENyIsICJNYXh0b3IgOTA4NDBENyIsICJNYXh0b3IgOTA3NTBENiIsICJNYXh0b3IgOTA2MjVENSIsICJNYXh0b3IgOTA1MDBENCIsCi0JIk1heHRvciA5MTcyOEQ4IiwgIk1heHRvciA5MTUxMkQ3IiwgIk1heHRvciA5MTMwM0Q2IiwgIk1heHRvciA5MTA4MEQ1IiwgIk1heHRvciA5MDg0NUQ0IiwgIk1heHRvciA5MDY4MEQ0IiwgIk1heHRvciA5MDY0OEQzIiwgIk1heHRvciA5MDQzMkQyIiwKLQlOVUxMCi19OwotCi1zdGF0aWMgdTggeGZlcl9zcGVlZHNbXSA9IHsKLQlYRkVSX1VETUFfNiwKLQlYRkVSX1VETUFfNSwKLQlYRkVSX1VETUFfNCwKLQlYRkVSX1VETUFfMywKLQlYRkVSX1VETUFfMiwKLQlYRkVSX1VETUFfMSwKLQlYRkVSX1VETUFfMCwKLQotCVhGRVJfTVdfRE1BXzIsCi0JWEZFUl9NV19ETUFfMSwKLQlYRkVSX01XX0RNQV8wLAotCi0JWEZFUl9QSU9fNCwKLQlYRkVSX1BJT18zLAotCVhGRVJfUElPXzIsCi0JWEZFUl9QSU9fMSwKLQlYRkVSX1BJT18wCi19OwotCi0vKiBLZXkgZm9yIGJ1cyBjbG9jayB0aW1pbmdzCi0gKiAzNnggICAzN3gKLSAqIGJpdHMgIGJpdHMKLSAqIDA6MwkgMDozCWRhdGFfaGlnaF90aW1lLiBJbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XIERNQS4KLSAqCQljeWNsZXMgPSB2YWx1ZSArIDEKLSAqIDQ6NwkgNDo4CWRhdGFfbG93X3RpbWUuIEFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XIERNQS4KLSAqCQljeWNsZXMgPSB2YWx1ZSArIDEKLSAqIDg6MTEgIDk6MTIJY21kX2hpZ2hfdGltZS4gSW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCi0gKgkJcmVnaXN0ZXIgYWNjZXNzLgotICogMTI6MTUgMTM6MTcJY21kX2xvd190aW1lLiBBY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCi0gKgkJcmVnaXN0ZXIgYWNjZXNzLgotICogMTY6MTggMTg6MjAJdWRtYV9jeWNsZV90aW1lLiBDbG9jayBjeWNsZXMgZm9yIFVETUEgeGZlci4KLSAqIC0JIDIxCUNMSyBmcmVxdWVuY3k6IDA9QVRBIGNsb2NrLCAxPWR1YWwgQVRBIGNsb2NrLgotICogMTk6MjEgMjI6MjQJcHJlX2hpZ2hfdGltZS4gVGltZSB0byBpbml0aWFsaXplIHRoZSAxc3QgY3ljbGUgZm9yIFBJTyBhbmQKLSAqCQlNVyBETUEgeGZlci4KLSAqIDIyOjI0IDI1OjI3CWNtZF9wcmVfaGlnaF90aW1lLiBUaW1lIHRvIGluaXRpYWxpemUgdGhlIDFzdCBQSU8gY3ljbGUgZm9yCi0gKgkJdGFzayBmaWxlIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDI4CSAyOAlVRE1BIGVuYWJsZS4KLSAqIDI5CSAyOQlETUEgIGVuYWJsZS4KLSAqIDMwCSAzMAlQSU8gTVNUIGVuYWJsZS4gSWYgc2V0LCB0aGUgY2hpcCBpcyBpbiBidXMgbWFzdGVyIG1vZGUgZHVyaW5nCi0gKgkJUElPIHhmZXIuCi0gKiAzMQkgMzEJRklGTyBlbmFibGUuCi0gKi8KLQotc3RhdGljIHUzMiBmb3J0eV9iYXNlX2hwdDM2eFtdID0gewotCS8qIFhGRVJfVURNQV82ICovCTB4OTAwZmQ5NDMsCi0JLyogWEZFUl9VRE1BXzUgKi8JMHg5MDBmZDk0MywKLQkvKiBYRkVSX1VETUFfNCAqLwkweDkwMGZkOTQzLAotCS8qIFhGRVJfVURNQV8zICovCTB4OTAwYWQ5NDMsCi0JLyogWEZFUl9VRE1BXzIgKi8JMHg5MDBiZDk0MywKLQkvKiBYRkVSX1VETUFfMSAqLwkweDkwMDhkOTQzLAotCS8qIFhGRVJfVURNQV8wICovCTB4OTAwOGQ5NDMsCi0KLQkvKiBYRkVSX01XX0RNQV8yICovCTB4YTAwOGQ5NDMsCi0JLyogWEZFUl9NV19ETUFfMSAqLwkweGEwMTBkOTU1LAotCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHhhMDEwZDlmYywKLQotCS8qIFhGRVJfUElPXzQgKi8JMHhjMDA4ZDk2MywKLQkvKiBYRkVSX1BJT18zICovCTB4YzAxMGQ5NzQsCi0JLyogWEZFUl9QSU9fMiAqLwkweGMwMTBkOTk3LAotCS8qIFhGRVJfUElPXzEgKi8JMHhjMDEwZDljNywKLQkvKiBYRkVSX1BJT18wICovCTB4YzAxOGQ5ZDkKLX07Ci0KLXN0YXRpYyB1MzIgdGhpcnR5X3RocmVlX2Jhc2VfaHB0MzZ4W10gPSB7Ci0JLyogWEZFUl9VRE1BXzYgKi8JMHg5MGM5YTczMSwKLQkvKiBYRkVSX1VETUFfNSAqLwkweDkwYzlhNzMxLAotCS8qIFhGRVJfVURNQV80ICovCTB4OTBjOWE3MzEsCi0JLyogWEZFUl9VRE1BXzMgKi8JMHg5MGNmYTczMSwKLQkvKiBYRkVSX1VETUFfMiAqLwkweDkwY2FhNzMxLAotCS8qIFhGRVJfVURNQV8xICovCTB4OTBjYmE3MzEsCi0JLyogWEZFUl9VRE1BXzAgKi8JMHg5MGM4YTczMSwKLQotCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHhhMGM4YTczMSwKLQkvKiBYRkVSX01XX0RNQV8xICovCTB4YTBjOGE3MzIsCS8qIDB4YTBjOGE3MzMgKi8KLQkvKiBYRkVSX01XX0RNQV8wICovCTB4YTBjOGE3OTcsCi0KLQkvKiBYRkVSX1BJT180ICovCTB4YzBjOGE3MzEsCi0JLyogWEZFUl9QSU9fMyAqLwkweGMwYzhhNzQyLAotCS8qIFhGRVJfUElPXzIgKi8JMHhjMGQwYTc1MywKLQkvKiBYRkVSX1BJT18xICovCTB4YzBkMGE3YTMsCS8qIDB4YzBkMGE3OTMgKi8KLQkvKiBYRkVSX1BJT18wICovCTB4YzBkMGE3YWEJLyogMHhjMGQwYTdhNyAqLwotfTsKLQotc3RhdGljIHUzMiB0d2VudHlfZml2ZV9iYXNlX2hwdDM2eFtdID0gewotCS8qIFhGRVJfVURNQV82ICovCTB4OTBjOTg1MjEsCi0JLyogWEZFUl9VRE1BXzUgKi8JMHg5MGM5ODUyMSwKLQkvKiBYRkVSX1VETUFfNCAqLwkweDkwYzk4NTIxLAotCS8qIFhGRVJfVURNQV8zICovCTB4OTBjZjg1MjEsCi0JLyogWEZFUl9VRE1BXzIgKi8JMHg5MGNmODUyMSwKLQkvKiBYRkVSX1VETUFfMSAqLwkweDkwY2I4NTIxLAotCS8qIFhGRVJfVURNQV8wICovCTB4OTBjYjg1MjEsCi0KLQkvKiBYRkVSX01XX0RNQV8yICovCTB4YTBjYTg1MjEsCi0JLyogWEZFUl9NV19ETUFfMSAqLwkweGEwY2E4NTMyLAotCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHhhMGNhODU3NSwKLQotCS8qIFhGRVJfUElPXzQgKi8JMHhjMGNhODUyMSwKLQkvKiBYRkVSX1BJT18zICovCTB4YzBjYTg1MzIsCi0JLyogWEZFUl9QSU9fMiAqLwkweGMwY2E4NTQyLAotCS8qIFhGRVJfUElPXzEgKi8JMHhjMGQwODU3MiwKLQkvKiBYRkVSX1BJT18wICovCTB4YzBkMDg1ODUKLX07Ci0KLSNpZiAwCi0vKiBUaGVzZSBhcmUgdGhlIHRpbWluZyB0YWJsZXMgZnJvbSB0aGUgSGlnaFBvaW50IG9wZW4gc291cmNlIGRyaXZlcnMuLi4gKi8KLXN0YXRpYyB1MzIgdGhpcnR5X3RocmVlX2Jhc2VfaHB0Mzd4W10gPSB7Ci0JLyogWEZFUl9VRE1BXzYgKi8JMHgxMjQ0NjIzMSwJLyogMHgxMjY0NjIzMSA/PyAqLwotCS8qIFhGRVJfVURNQV81ICovCTB4MTI0NDYyMzEsCi0JLyogWEZFUl9VRE1BXzQgKi8JMHgxMjQ0NjIzMSwKLQkvKiBYRkVSX1VETUFfMyAqLwkweDEyNmM2MjMxLAotCS8qIFhGRVJfVURNQV8yICovCTB4MTI0ODYyMzEsCi0JLyogWEZFUl9VRE1BXzEgKi8JMHgxMjRjNjIzMywKLQkvKiBYRkVSX1VETUFfMCAqLwkweDEyNTA2Mjk3LAotCi0JLyogWEZFUl9NV19ETUFfMiAqLwkweDIyNDA2YzMxLAotCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHgyMjQwNmMzMywKLQkvKiBYRkVSX01XX0RNQV8wICovCTB4MjI0MDZjOTcsCi0KLQkvKiBYRkVSX1BJT180ICovCTB4MDY0MTRlMzEsCi0JLyogWEZFUl9QSU9fMyAqLwkweDA2NDE0ZTQyLAotCS8qIFhGRVJfUElPXzIgKi8JMHgwNjQxNGU1MywKLQkvKiBYRkVSX1BJT18xICovCTB4MDY4MTRlOTMsCi0JLyogWEZFUl9QSU9fMCAqLwkweDA2ODE0ZWE3Ci19OwotCi1zdGF0aWMgdTMyIGZpZnR5X2Jhc2VfaHB0Mzd4W10gPSB7Ci0JLyogWEZFUl9VRE1BXzYgKi8JMHgxMjg0ODI0MiwKLQkvKiBYRkVSX1VETUFfNSAqLwkweDEyODQ4MjQyLAotCS8qIFhGRVJfVURNQV80ICovCTB4MTJhYzgyNDIsCi0JLyogWEZFUl9VRE1BXzMgKi8JMHgxMjhjODI0MiwKLQkvKiBYRkVSX1VETUFfMiAqLwkweDEyMGM4MjQyLAotCS8qIFhGRVJfVURNQV8xICovCTB4MTIxNDgyNTQsCi0JLyogWEZFUl9VRE1BXzAgKi8JMHgxMjE4ODJlYSwKLQotCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHgyMjgwODI0MiwKLQkvKiBYRkVSX01XX0RNQV8xICovCTB4MjI4MDgyNTQsCi0JLyogWEZFUl9NV19ETUFfMCAqLwkweDIyODA4MmVhLAotCi0JLyogWEZFUl9QSU9fNCAqLwkweDBhODFmNDQyLAotCS8qIFhGRVJfUElPXzMgKi8JMHgwYTgxZjQ0MywKLQkvKiBYRkVSX1BJT18yICovCTB4MGE4MWY0NTQsCi0JLyogWEZFUl9QSU9fMSAqLwkweDBhYzFmNDY1LAotCS8qIFhGRVJfUElPXzAgKi8JMHgwYWMxZjQ4YQotfTsKLQotc3RhdGljIHUzMiBzaXh0eV9zaXhfYmFzZV9ocHQzN3hbXSA9IHsKLQkvKiBYRkVSX1VETUFfNiAqLwkweDFjODY5YzYyLAotCS8qIFhGRVJfVURNQV81ICovCTB4MWNhZTljNjIsCS8qIDB4MWM4YTljNjIgKi8KLQkvKiBYRkVSX1VETUFfNCAqLwkweDFjOGE5YzYyLAotCS8qIFhGRVJfVURNQV8zICovCTB4MWM4ZTljNjIsCi0JLyogWEZFUl9VRE1BXzIgKi8JMHgxYzkyOWM2MiwKLQkvKiBYRkVSX1VETUFfMSAqLwkweDFjOWE5YzYyLAotCS8qIFhGRVJfVURNQV8wICovCTB4MWM4MjljNjIsCi0KLQkvKiBYRkVSX01XX0RNQV8yICovCTB4MmM4MjljNjIsCi0JLyogWEZFUl9NV19ETUFfMSAqLwkweDJjODI5YzY2LAotCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHgyYzgyOWQyZSwKLQotCS8qIFhGRVJfUElPXzQgKi8JMHgwYzgyOWM2MiwKLQkvKiBYRkVSX1BJT18zICovCTB4MGM4MjljODQsCi0JLyogWEZFUl9QSU9fMiAqLwkweDBjODI5Y2E2LAotCS8qIFhGRVJfUElPXzEgKi8JMHgwZDAyOWQyNiwKLQkvKiBYRkVSX1BJT18wICovCTB4MGQwMjlkNWUKLX07Ci0jZWxzZQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBuZXcgdGltaW5nIHRhYmxlcyB3aXRoIFBJTyBtb2RlIGRhdGEvdGFza2ZpbGUgdHJhbnNmZXIKLSAqIG92ZXJjbG9ja2luZyBmaXhlZC4uLgotICovCi0KLS8qIFRoaXMgdGFibGUgaXMgdGFrZW4gZnJvbSB0aGUgSFBUMzcwIGRhdGEgbWFudWFsIHJldi4gMS4wMiAqLwotc3RhdGljIHUzMiB0aGlydHlfdGhyZWVfYmFzZV9ocHQzN3hbXSA9IHsKLQkvKiBYRkVSX1VETUFfNiAqLwkweDE2NDU1MDMxLAkvKiAweDE2NjU1MDMxID8/ICovCi0JLyogWEZFUl9VRE1BXzUgKi8JMHgxNjQ1NTAzMSwKLQkvKiBYRkVSX1VETUFfNCAqLwkweDE2NDU1MDMxLAotCS8qIFhGRVJfVURNQV8zICovCTB4MTY2ZDUwMzEsCi0JLyogWEZFUl9VRE1BXzIgKi8JMHgxNjQ5NTAzMSwKLQkvKiBYRkVSX1VETUFfMSAqLwkweDE2NGQ1MDMzLAotCS8qIFhGRVJfVURNQV8wICovCTB4MTY1MTUwOTcsCi0KLQkvKiBYRkVSX01XX0RNQV8yICovCTB4MjY1MTUwMzEsCi0JLyogWEZFUl9NV19ETUFfMSAqLwkweDI2NTE1MDMzLAotCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHgyNjUxNTA5NywKLQotCS8qIFhGRVJfUElPXzQgKi8JMHgwNjUxNTAyMSwKLQkvKiBYRkVSX1BJT18zICovCTB4MDY1MTUwMjIsCi0JLyogWEZFUl9QSU9fMiAqLwkweDA2NTE1MDMzLAotCS8qIFhGRVJfUElPXzEgKi8JMHgwNjkxNTA2NSwKLQkvKiBYRkVSX1BJT18wICovCTB4MDZkMTUwOGEKLX07Ci0KLXN0YXRpYyB1MzIgZmlmdHlfYmFzZV9ocHQzN3hbXSA9IHsKLQkvKiBYRkVSX1VETUFfNiAqLwkweDFhODYxODQyLAotCS8qIFhGRVJfVURNQV81ICovCTB4MWE4NjE4NDIsCi0JLyogWEZFUl9VRE1BXzQgKi8JMHgxYWFlMTg0MiwKLQkvKiBYRkVSX1VETUFfMyAqLwkweDFhOGUxODQyLAotCS8qIFhGRVJfVURNQV8yICovCTB4MWEwZTE4NDIsCi0JLyogWEZFUl9VRE1BXzEgKi8JMHgxYTE2MTg1NCwKLQkvKiBYRkVSX1VETUFfMCAqLwkweDFhMWExOGVhLAotCi0JLyogWEZFUl9NV19ETUFfMiAqLwkweDJhODIxODQyLAotCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHgyYTgyMTg1NCwKLQkvKiBYRkVSX01XX0RNQV8wICovCTB4MmE4MjE4ZWEsCi0KLQkvKiBYRkVSX1BJT180ICovCTB4MGE4MjE4NDIsCi0JLyogWEZFUl9QSU9fMyAqLwkweDBhODIxODQzLAotCS8qIFhGRVJfUElPXzIgKi8JMHgwYTgyMTg1NSwKLQkvKiBYRkVSX1BJT18xICovCTB4MGFjMjE4YTgsCi0JLyogWEZFUl9QSU9fMCAqLwkweDBiMDIxOTBjCi19OwotCi1zdGF0aWMgdTMyIHNpeHR5X3NpeF9iYXNlX2hwdDM3eFtdID0gewotCS8qIFhGRVJfVURNQV82ICovCTB4MWM4NmZlNjIsCi0JLyogWEZFUl9VRE1BXzUgKi8JMHgxY2FlZmU2MiwJLyogMHgxYzhhZmU2MiAqLwotCS8qIFhGRVJfVURNQV80ICovCTB4MWM4YWZlNjIsCi0JLyogWEZFUl9VRE1BXzMgKi8JMHgxYzhlZmU2MiwKLQkvKiBYRkVSX1VETUFfMiAqLwkweDFjOTJmZTYyLAotCS8qIFhGRVJfVURNQV8xICovCTB4MWM5YWZlNjIsCi0JLyogWEZFUl9VRE1BXzAgKi8JMHgxYzgyZmU2MiwKLQotCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHgyYzgyZmU2MiwKLQkvKiBYRkVSX01XX0RNQV8xICovCTB4MmM4MmZlNjYsCi0JLyogWEZFUl9NV19ETUFfMCAqLwkweDJjODJmZjJlLAotCi0JLyogWEZFUl9QSU9fNCAqLwkweDBjODJmZTYyLAotCS8qIFhGRVJfUElPXzMgKi8JMHgwYzgyZmU4NCwKLQkvKiBYRkVSX1BJT18yICovCTB4MGM4MmZlYTYsCi0JLyogWEZFUl9QSU9fMSAqLwkweDBkMDJmZjI2LAotCS8qIFhGRVJfUElPXzAgKi8JMHgwZDQyZmY3ZgotfTsKLSNlbmRpZgotCi0jZGVmaW5lIEhQVDM2Nl9ERUJVR19EUklWRV9JTkZPCQkwCi0jZGVmaW5lIEhQVDM3MV9BTExPV19BVEExMzNfNgkJMQotI2RlZmluZSBIUFQzMDJfQUxMT1dfQVRBMTMzXzYJCTEKLSNkZWZpbmUgSFBUMzcyX0FMTE9XX0FUQTEzM182CQkxCi0jZGVmaW5lIEhQVDM3MF9BTExPV19BVEExMDBfNQkJMAotI2RlZmluZSBIUFQzNjZfQUxMT1dfQVRBNjZfNAkJMQotI2RlZmluZSBIUFQzNjZfQUxMT1dfQVRBNjZfMwkJMQotI2RlZmluZSBIUFQzNjZfTUFYX0RFVlMJCQk4Ci0KLS8qIFN1cHBvcnRlZCBBVEEgY2xvY2sgZnJlcXVlbmNpZXMgKi8KLWVudW0gYXRhX2Nsb2NrIHsKLQlBVEFfQ0xPQ0tfMjVNSFosCi0JQVRBX0NMT0NLXzMzTUhaLAotCUFUQV9DTE9DS180ME1IWiwKLQlBVEFfQ0xPQ0tfNTBNSFosCi0JQVRBX0NMT0NLXzY2TUhaLAotCU5VTV9BVEFfQ0xPQ0tTCi19OwotCi1zdHJ1Y3QgaHB0X3RpbWluZ3MgewotCXUzMiBwaW9fbWFzazsKLQl1MzIgZG1hX21hc2s7Ci0JdTMyIHVsdHJhX21hc2s7Ci0JdTMyICpjbG9ja190YWJsZVtOVU1fQVRBX0NMT0NLU107Ci19OwotCi0vKgotICoJSG9sZCBhbGwgdGhlIEhpZ2hQb2ludCBjaGlwIGluZm9ybWF0aW9uIGluIG9uZSBwbGFjZS4KLSAqLwotCi1zdHJ1Y3QgaHB0X2luZm8gewotCWNoYXIgKmNoaXBfbmFtZTsJLyogQ2hpcCBuYW1lICovCi0JdTggY2hpcF90eXBlOwkJLyogQ2hpcCB0eXBlICovCi0JdTggdWRtYV9tYXNrOwkJLyogQWxsb3dlZCBVbHRyYURNQSBtb2RlcyBtYXNrLiAqLwotCXU4IGRwbGxfY2xrOwkJLyogRFBMTCBjbG9jayBpbiBNSHogKi8KLQl1OCBwY2lfY2xrOwkJLyogUENJICBjbG9jayBpbiBNSHogKi8KLQlzdHJ1Y3QgaHB0X3RpbWluZ3MgKnRpbWluZ3M7IC8qIENoaXBzZXQgdGltaW5nIGRhdGEgKi8KLQl1OCBjbG9jazsJCS8qIEFUQSBjbG9jayBzZWxlY3RlZCAqLwotfTsKLQotLyogU3VwcG9ydGVkIEhpZ2hQb2ludCBjaGlwcyAqLwotZW51bSB7Ci0JSFBUMzZ4LAotCUhQVDM3MCwKLQlIUFQzNzBBLAotCUhQVDM3NCwKLQlIUFQzNzIsCi0JSFBUMzcyQSwKLQlIUFQzMDIsCi0JSFBUMzcxLAotCUhQVDM3Mk4sCi0JSFBUMzAyTiwKLQlIUFQzNzFOCi19OwotCi1zdGF0aWMgc3RydWN0IGhwdF90aW1pbmdzIGhwdDM2eF90aW1pbmdzID0gewotCS5waW9fbWFzawk9IDB4YzFmOGZmZmYsCi0JLmRtYV9tYXNrCT0gMHgzMDM4MDBmZiwKLQkudWx0cmFfbWFzawk9IDB4MzAwNzAwMDAsCi0JLmNsb2NrX3RhYmxlCT0gewotCQlbQVRBX0NMT0NLXzI1TUhaXSA9IHR3ZW50eV9maXZlX2Jhc2VfaHB0MzZ4LAotCQlbQVRBX0NMT0NLXzMzTUhaXSA9IHRoaXJ0eV90aHJlZV9iYXNlX2hwdDM2eCwKLQkJW0FUQV9DTE9DS180ME1IWl0gPSBmb3J0eV9iYXNlX2hwdDM2eCwKLQkJW0FUQV9DTE9DS181ME1IWl0gPSBOVUxMLAotCQlbQVRBX0NMT0NLXzY2TUhaXSA9IE5VTEwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhwdF90aW1pbmdzIGhwdDM3eF90aW1pbmdzID0gewotCS5waW9fbWFzawk9IDB4Y2ZjM2ZmZmYsCi0JLmRtYV9tYXNrCT0gMHgzMWMwMDFmZiwKLQkudWx0cmFfbWFzawk9IDB4MzAzYzAwMDAsCi0JLmNsb2NrX3RhYmxlCT0gewotCQlbQVRBX0NMT0NLXzI1TUhaXSA9IE5VTEwsCi0JCVtBVEFfQ0xPQ0tfMzNNSFpdID0gdGhpcnR5X3RocmVlX2Jhc2VfaHB0Mzd4LAotCQlbQVRBX0NMT0NLXzQwTUhaXSA9IE5VTEwsCi0JCVtBVEFfQ0xPQ0tfNTBNSFpdID0gZmlmdHlfYmFzZV9ocHQzN3gsCi0JCVtBVEFfQ0xPQ0tfNjZNSFpdID0gc2l4dHlfc2l4X2Jhc2VfaHB0Mzd4Ci0JfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzNnggX19kZXZpbml0ZGF0YSA9IHsKLQkuY2hpcF9uYW1lCT0gIkhQVDM2eCIsCi0JLmNoaXBfdHlwZQk9IEhQVDM2eCwKLQkudWRtYV9tYXNrCT0gSFBUMzY2X0FMTE9XX0FUQTY2XzMgPyAoSFBUMzY2X0FMTE9XX0FUQTY2XzQgPyBBVEFfVURNQTQgOiBBVEFfVURNQTMpIDogQVRBX1VETUEyLAotCS5kcGxsX2Nsawk9IDAsCS8qIG5vIERQTEwgKi8KLQkudGltaW5ncwk9ICZocHQzNnhfdGltaW5ncwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzNzAgX19kZXZpbml0ZGF0YSA9IHsKLQkuY2hpcF9uYW1lCT0gIkhQVDM3MCIsCi0JLmNoaXBfdHlwZQk9IEhQVDM3MCwKLQkudWRtYV9tYXNrCT0gSFBUMzcwX0FMTE9XX0FUQTEwMF81ID8gQVRBX1VETUE1IDogQVRBX1VETUE0LAotCS5kcGxsX2Nsawk9IDQ4LAotCS50aW1pbmdzCT0gJmhwdDM3eF90aW1pbmdzCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM3MGEgX19kZXZpbml0ZGF0YSA9IHsKLQkuY2hpcF9uYW1lCT0gIkhQVDM3MEEiLAotCS5jaGlwX3R5cGUJPSBIUFQzNzBBLAotCS51ZG1hX21hc2sJPSBIUFQzNzBfQUxMT1dfQVRBMTAwXzUgPyBBVEFfVURNQTUgOiBBVEFfVURNQTQsCi0JLmRwbGxfY2xrCT0gNDgsCi0JLnRpbWluZ3MJPSAmaHB0Mzd4X3RpbWluZ3MKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHB0X2luZm8gaHB0Mzc0IF9fZGV2aW5pdGRhdGEgPSB7Ci0JLmNoaXBfbmFtZQk9ICJIUFQzNzQiLAotCS5jaGlwX3R5cGUJPSBIUFQzNzQsCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKLQkuZHBsbF9jbGsJPSA0OCwKLQkudGltaW5ncwk9ICZocHQzN3hfdGltaW5ncwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzNzIgX19kZXZpbml0ZGF0YSA9IHsKLQkuY2hpcF9uYW1lCT0gIkhQVDM3MiIsCi0JLmNoaXBfdHlwZQk9IEhQVDM3MiwKLQkudWRtYV9tYXNrCT0gSFBUMzcyX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAotCS5kcGxsX2Nsawk9IDU1LAotCS50aW1pbmdzCT0gJmhwdDM3eF90aW1pbmdzCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM3MmEgX19kZXZpbml0ZGF0YSA9IHsKLQkuY2hpcF9uYW1lCT0gIkhQVDM3MkEiLAotCS5jaGlwX3R5cGUJPSBIUFQzNzJBLAotCS51ZG1hX21hc2sJPSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYgPyBBVEFfVURNQTYgOiBBVEFfVURNQTUsCi0JLmRwbGxfY2xrCT0gNjYsCi0JLnRpbWluZ3MJPSAmaHB0Mzd4X3RpbWluZ3MKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHB0X2luZm8gaHB0MzAyIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLmNoaXBfbmFtZQk9ICJIUFQzMDIiLAotCS5jaGlwX3R5cGUJPSBIUFQzMDIsCi0JLnVkbWFfbWFzawk9IEhQVDMwMl9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKLQkuZHBsbF9jbGsJPSA2NiwKLQkudGltaW5ncwk9ICZocHQzN3hfdGltaW5ncwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzNzEgX19kZXZpbml0ZGF0YSA9IHsKLQkuY2hpcF9uYW1lCT0gIkhQVDM3MSIsCi0JLmNoaXBfdHlwZQk9IEhQVDM3MSwKLQkudWRtYV9tYXNrCT0gSFBUMzcxX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAotCS5kcGxsX2Nsawk9IDY2LAotCS50aW1pbmdzCT0gJmhwdDM3eF90aW1pbmdzCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhwdF9pbmZvIGhwdDM3Mm4gX19kZXZpbml0ZGF0YSA9IHsKLQkuY2hpcF9uYW1lCT0gIkhQVDM3Mk4iLAotCS5jaGlwX3R5cGUJPSBIUFQzNzJOLAotCS51ZG1hX21hc2sJPSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYgPyBBVEFfVURNQTYgOiBBVEFfVURNQTUsCi0JLmRwbGxfY2xrCT0gNzcsCi0JLnRpbWluZ3MJPSAmaHB0Mzd4X3RpbWluZ3MKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHB0X2luZm8gaHB0MzAybiBfX2RldmluaXRkYXRhID0gewotCS5jaGlwX25hbWUJPSAiSFBUMzAyTiIsCi0JLmNoaXBfdHlwZQk9IEhQVDMwMk4sCi0JLnVkbWFfbWFzawk9IEhQVDMwMl9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKLQkuZHBsbF9jbGsJPSA3NywKLQkudGltaW5ncwk9ICZocHQzN3hfdGltaW5ncwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyBocHQzNzFuIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLmNoaXBfbmFtZQk9ICJIUFQzNzFOIiwKLQkuY2hpcF90eXBlCT0gSFBUMzcxTiwKLQkudWRtYV9tYXNrCT0gSFBUMzcxX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAotCS5kcGxsX2Nsawk9IDc3LAotCS50aW1pbmdzCT0gJmhwdDM3eF90aW1pbmdzCi19OwotCi1zdGF0aWMgaW50IGNoZWNrX2luX2RyaXZlX2xpc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICoqbGlzdCkKLXsKLQljaGFyICptID0gKGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXTsKLQotCXdoaWxlICgqbGlzdCkKLQkJaWYgKCFzdHJjbXAoKmxpc3QrKywgbSkpCi0JCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBocHRfaW5mbyAqaHB0M3h4X2dldF9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QJPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSAoc3RydWN0IGhwdF9pbmZvICopaG9zdC0+aG9zdF9wcml2OwotCi0JcmV0dXJuIGRldiA9PSBob3N0LT5kZXZbMV0gPyBpbmZvICsgMSA6IGluZm87Ci19Ci0KLS8qCi0gKiBUaGUgTWFydmVsbCBicmlkZ2UgY2hpcHMgdXNlZCBvbiB0aGUgSGlnaFBvaW50IFNBVEEgY2FyZHMgZG8gbm90IHNlZW0KLSAqIHRvIHN1cHBvcnQgdGhlIFVsdHJhRE1BIG1vZGVzIDEsIDIsIGFuZCAzIGFzIHdlbGwgYXMgYW55IE1XRE1BIG1vZGVzLi4uCi0gKi8KLQotc3RhdGljIHU4IGhwdDN4eF91ZG1hX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbyhod2lmLT5kZXYpOwotCXU4IG1hc2sgCQk9IGh3aWYtPnVsdHJhX21hc2s7Ci0KLQlzd2l0Y2ggKGluZm8tPmNoaXBfdHlwZSkgewotCWNhc2UgSFBUMzZ4OgotCQlpZiAoIUhQVDM2Nl9BTExPV19BVEE2Nl80IHx8Ci0JCSAgICBjaGVja19pbl9kcml2ZV9saXN0KGRyaXZlLCBiYWRfYXRhNjZfNCkpCi0JCQltYXNrID0gQVRBX1VETUEzOwotCi0JCWlmICghSFBUMzY2X0FMTE9XX0FUQTY2XzMgfHwKLQkJICAgIGNoZWNrX2luX2RyaXZlX2xpc3QoZHJpdmUsIGJhZF9hdGE2Nl8zKSkKLQkJCW1hc2sgPSBBVEFfVURNQTI7Ci0JCWJyZWFrOwotCWNhc2UgSFBUMzcwOgotCQlpZiAoIUhQVDM3MF9BTExPV19BVEExMDBfNSB8fAotCQkgICAgY2hlY2tfaW5fZHJpdmVfbGlzdChkcml2ZSwgYmFkX2F0YTEwMF81KSkKLQkJCW1hc2sgPSBBVEFfVURNQTQ7Ci0JCWJyZWFrOwotCWNhc2UgSFBUMzcwQToKLQkJaWYgKCFIUFQzNzBfQUxMT1dfQVRBMTAwXzUgfHwKLQkJICAgIGNoZWNrX2luX2RyaXZlX2xpc3QoZHJpdmUsIGJhZF9hdGExMDBfNSkpCi0JCQlyZXR1cm4gQVRBX1VETUE0OwotCWNhc2UgSFBUMzcyIDoKLQljYXNlIEhQVDM3MkE6Ci0JY2FzZSBIUFQzNzJOOgotCWNhc2UgSFBUMzc0IDoKLQkJaWYgKGF0YV9pZF9pc19zYXRhKGRyaXZlLT5pZCkpCi0JCQltYXNrICY9IH4weDBlOwotCQkvKiBGYWxsIHRocnUgKi8KLQlkZWZhdWx0OgotCQlyZXR1cm4gbWFzazsKLQl9Ci0KLQlyZXR1cm4gY2hlY2tfaW5fZHJpdmVfbGlzdChkcml2ZSwgYmFkX2F0YTMzKSA/IDB4MDAgOiBtYXNrOwotfQotCi1zdGF0aWMgdTggaHB0M3h4X21kbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7Ci0KLQlzd2l0Y2ggKGluZm8tPmNoaXBfdHlwZSkgewotCWNhc2UgSFBUMzcyIDoKLQljYXNlIEhQVDM3MkE6Ci0JY2FzZSBIUFQzNzJOOgotCWNhc2UgSFBUMzc0IDoKLQkJaWYgKGF0YV9pZF9pc19zYXRhKGRyaXZlLT5pZCkpCi0JCQlyZXR1cm4gMHgwMDsKLQkJLyogRmFsbCB0aHJ1ICovCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDB4MDc7Ci0JfQotfQotCi1zdGF0aWMgdTMyIGdldF9zcGVlZF9zZXR0aW5nKHU4IHNwZWVkLCBzdHJ1Y3QgaHB0X2luZm8gKmluZm8pCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIExvb2t1cCB0aGUgdHJhbnNmZXIgbW9kZSB0YWJsZSB0byBnZXQgdGhlIGluZGV4IGludG8KLQkgKiB0aGUgdGltaW5nIHRhYmxlLgotCSAqCi0JICogTk9URTogRm9yIFhGRVJfUElPX1NMT1csIFBJTyBtb2RlIDAgdGltaW5ncyB3aWxsIGJlIHVzZWQuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGZlcl9zcGVlZHMpIC0gMTsgaSsrKQotCQlpZiAoeGZlcl9zcGVlZHNbaV0gPT0gc3BlZWQpCi0JCQlicmVhazsKLQotCXJldHVybiBpbmZvLT50aW1pbmdzLT5jbG9ja190YWJsZVtpbmZvLT5jbG9ja11baV07Ci19Ci0KLXN0YXRpYyB2b2lkIGhwdDN4eF9zZXRfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbyhod2lmLT5kZXYpOwotCXN0cnVjdCBocHRfdGltaW5ncyAqdAk9IGluZm8tPnRpbWluZ3M7Ci0JdTggIGl0cl9hZGRyCQk9IDB4NDAgKyAoZHJpdmUtPmRuICogNCk7Ci0JdTMyIG9sZF9pdHIJCT0gMDsKLQl1MzIgbmV3X2l0cgkJPSBnZXRfc3BlZWRfc2V0dGluZyhzcGVlZCwgaW5mbyk7Ci0JdTMyIGl0cl9tYXNrCQk9IHNwZWVkIDwgWEZFUl9NV19ETUFfMCA/IHQtPnBpb19tYXNrIDoKLQkJCQkgKHNwZWVkIDwgWEZFUl9VRE1BXzAgICA/IHQtPmRtYV9tYXNrIDoKLQkJCQkJCQkgIHQtPnVsdHJhX21hc2spOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgaXRyX2FkZHIsICZvbGRfaXRyKTsKLQluZXdfaXRyID0gKG9sZF9pdHIgJiB+aXRyX21hc2spIHwgKG5ld19pdHIgJiBpdHJfbWFzayk7Ci0JLyoKLQkgKiBEaXNhYmxlIG9uLWNoaXAgUElPIEZJRk8vYnVmZmVyIChhbmQgUElPIE1TVCBtb2RlIGFzIHdlbGwpCi0JICogdG8gYXZvaWQgcHJvYmxlbXMgaGFuZGxpbmcgSS9PIGVycm9ycyBsYXRlcgotCSAqLwotCW5ld19pdHIgJj0gfjB4YzAwMDAwMDA7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgaXRyX2FkZHIsIG5ld19pdHIpOwotfQotCi1zdGF0aWMgdm9pZCBocHQzeHhfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQotewotCWhwdDN4eF9zZXRfbW9kZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhwdDN4eF9xdWlya3Byb2MoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWNoYXIgKm0JCQk9IChjaGFyICopJmRyaXZlLT5pZFtBVEFfSURfUFJPRF07Ci0JY29uc3QgIGNoYXIgKipsaXN0CT0gcXVpcmtfZHJpdmVzOwotCi0Jd2hpbGUgKCpsaXN0KQotCQlpZiAoc3Ryc3RyKG0sICpsaXN0KyspKSB7Ci0JCQlkcml2ZS0+cXVpcmtfbGlzdCA9IDE7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCWRyaXZlLT5xdWlya19saXN0ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgaHB0M3h4X21hc2twcm9jKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG1hc2spCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBwY2lfZGV2CSpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0Jc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7Ci0KLQlpZiAoZHJpdmUtPnF1aXJrX2xpc3QpIHsKLQkJaWYgKGluZm8tPmNoaXBfdHlwZSA+PSBIUFQzNzApIHsKLQkJCXU4IHNjcjEgPSAwOwotCi0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWEsICZzY3IxKTsKLQkJCWlmICgoKHNjcjEgJiAweDEwKSA+PiA0KSAhPSBtYXNrKSB7Ci0JCQkJaWYgKG1hc2spCi0JCQkJCXNjcjEgfD0gIDB4MTA7Ci0JCQkJZWxzZQotCQkJCQlzY3IxICY9IH4weDEwOwotCQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NWEsIHNjcjEpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG1hc2spCi0JCQkJZGlzYWJsZV9pcnEoaHdpZi0+aXJxKTsKLQkJCWVsc2UKLQkJCQllbmFibGVfaXJxIChod2lmLT5pcnEpOwotCQl9Ci0JfSBlbHNlCi0JCW91dGIoQVRBX0RFVkNUTF9PQlMgfCAobWFzayA/IDIgOiAwKSwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotfQotCi0vKgotICogVGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgSFBUMzY2IFVETUEgY2hpcHNldAotICogYnkgSGlnaFBvaW50fFRyaW9uZXMgVGVjaG5vbG9naWVzLCBJbmMuCi0gKi8KLXN0YXRpYyB2b2lkIGhwdDM2Nl9kbWFfbG9zdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOwotCXU4IG1jcjEgPSAwLCBtY3IzID0gMCwgc2NyMSA9IDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZtY3IxKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTIsICZtY3IzKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWEsICZzY3IxKTsKLQlwcmludGsoIiVzOiAoJXMpICBtY3IxPTB4JTAyeCwgbWNyMz0weCUwMngsIHNjcjE9MHglMDJ4XG4iLAotCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sIG1jcjEsIG1jcjMsIHNjcjEpOwotCWlmIChzY3IxICYgMHgxMCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgc2NyMSAmIH4weDEwKTsKLQlpZGVfZG1hX2xvc3RfaXJxKGRyaXZlKTsKLX0KLQotc3RhdGljIHZvaWQgaHB0MzcwX2NsZWFyX2VuZ2luZShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBod2lmLT5zZWxlY3RfZGF0YSwgMHgzNyk7Ci0JdWRlbGF5KDEwKTsKLX0KLQotc3RhdGljIHZvaWQgaHB0MzcwX2lycV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQl1MTYgYmZpZm8JCT0gMDsKLQl1OCAgZG1hX2NtZDsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaHdpZi0+c2VsZWN0X2RhdGEgKyAyLCAmYmZpZm8pOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogJWQgYnl0ZXMgaW4gRklGT1xuIiwgZHJpdmUtPm5hbWUsIGJmaWZvICYgMHgxZmYpOwotCi0JLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KLQlkbWFfY21kID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwotCS8qIHN0b3AgRE1BICovCi0Jb3V0YihkbWFfY21kICYgfjB4MSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7Ci0JaHB0MzcwX2NsZWFyX2VuZ2luZShkcml2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhwdDM3MF9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotI2lmZGVmIEhQVF9SRVNFVF9TVEFURV9FTkdJTkUKLQlocHQzNzBfY2xlYXJfZW5naW5lKGRyaXZlKTsKLSNlbmRpZgotCWlkZV9kbWFfc3RhcnQoZHJpdmUpOwotfQotCi1zdGF0aWMgaW50IGhwdDM3MF9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggIGRtYV9zdGF0CQk9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKLQotCWlmIChkbWFfc3RhdCAmIDB4MDEpIHsKLQkJLyogd2FpdCBhIGxpdHRsZSAqLwotCQl1ZGVsYXkoMjApOwotCQlkbWFfc3RhdCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKLQkJaWYgKGRtYV9zdGF0ICYgMHgwMSkKLQkJCWhwdDM3MF9pcnFfdGltZW91dChkcml2ZSk7Ci0JfQotCXJldHVybiBpZGVfZG1hX2VuZChkcml2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhwdDM3MF9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaHB0MzcwX2lycV90aW1lb3V0KGRyaXZlKTsKLQlpZGVfZG1hX3RpbWVvdXQoZHJpdmUpOwotfQotCi0vKiByZXR1cm5zIDEgaWYgRE1BIElSUSBpc3N1ZWQsIDAgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGhwdDM3NF9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXUxNiBiZmlmbwkJPSAwOwotCXU4ICBkbWFfc3RhdDsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaHdpZi0+c2VsZWN0X2RhdGEgKyAyLCAmYmZpZm8pOwotCWlmIChiZmlmbyAmIDB4MUZGKSB7Ci0vLwkJcHJpbnRrKCIlczogJWQgYnl0ZXMgaW4gRklGT1xuIiwgZHJpdmUtPm5hbWUsIGJmaWZvKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7Ci0JLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLwotCWlmIChkbWFfc3RhdCAmIDQpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaHB0Mzc0X2RtYV9lbmQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXU4IG1jcgk9IDAsIG1jcl9hZGRyCT0gaHdpZi0+c2VsZWN0X2RhdGE7Ci0JdTggYndzciA9IDAsIG1hc2sJPSBod2lmLT5jaGFubmVsID8gMHgwMiA6IDB4MDE7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NmEsICZid3NyKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIG1jcl9hZGRyLCAmbWNyKTsKLQlpZiAoYndzciAmIG1hc2spCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIG1jcl9hZGRyLCBtY3IgfCAweDMwKTsKLQlyZXR1cm4gaWRlX2RtYV9lbmQoZHJpdmUpOwotfQotCi0vKioKLSAqCWhwdDN4eG5fc2V0X2Nsb2NrCS0JcGVyZm9ybSBjbG9jayBzd2l0Y2hpbmcgZGFuY2UKLSAqCUBod2lmOiBod2lmIHRvIHN3aXRjaAotICoJQG1vZGU6IGNsb2NraW5nIG1vZGUgKDB4MjEgZm9yIHdyaXRlLCAweDIzIG90aGVyd2lzZSkKLSAqCi0gKglTd2l0Y2ggdGhlIERQTEwgY2xvY2sgb24gdGhlIEhQVDN4eE4gZGV2aWNlcy4gVGhpcyBpcyBhCXJpZ2h0IG1lc3MuCi0gKi8KLQotc3RhdGljIHZvaWQgaHB0M3h4bl9zZXRfY2xvY2soaWRlX2h3aWZfdCAqaHdpZiwgdTggbW9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSBod2lmLT5leHRyYV9iYXNlOwotCXU4IHNjcjIgPSBpbmIoYmFzZSArIDB4NmIpOwotCi0JaWYgKChzY3IyICYgMHg3ZikgPT0gbW9kZSkKLQkJcmV0dXJuOwotCi0JLyogVHJpc3RhdGUgdGhlIGJ1cyAqLwotCW91dGIoMHg4MCwgYmFzZSArIDB4NjMpOwotCW91dGIoMHg4MCwgYmFzZSArIDB4NjcpOwotCi0JLyogU3dpdGNoIGNsb2NrIGFuZCByZXNldCBjaGFubmVscyAqLwotCW91dGIobW9kZSwgYmFzZSArIDB4NmIpOwotCW91dGIoMHhjMCwgYmFzZSArIDB4NjkpOwotCi0JLyoKLQkgKiBSZXNldCB0aGUgc3RhdGUgbWFjaGluZXMuCi0JICogTk9URTogYXZvaWQgYWNjaWRlbnRhbGx5IGVuYWJsaW5nIHRoZSBkaXNhYmxlZCBjaGFubmVscy4KLQkgKi8KLQlvdXRiKGluYihiYXNlICsgMHg2MCkgfCAweDMyLCBiYXNlICsgMHg2MCk7Ci0Jb3V0YihpbmIoYmFzZSArIDB4NjQpIHwgMHgzMiwgYmFzZSArIDB4NjQpOwotCi0JLyogQ29tcGxldGUgcmVzZXQgKi8KLQlvdXRiKDB4MDAsIGJhc2UgKyAweDY5KTsKLQotCS8qIFJlY29ubmVjdCBjaGFubmVscyB0byBidXMgKi8KLQlvdXRiKDB4MDAsIGJhc2UgKyAweDYzKTsKLQlvdXRiKDB4MDAsIGJhc2UgKyAweDY3KTsKLX0KLQotLyoqCi0gKglocHQzeHhuX3J3X2Rpc2sJCS0JcHJlcGFyZSBmb3IgSS9PCi0gKglAZHJpdmU6IGRyaXZlIGZvciBjb21tYW5kCi0gKglAcnE6IGJsb2NrIHJlcXVlc3Qgc3RydWN0dXJlCi0gKgotICoJVGhpcyBpcyBjYWxsZWQgd2hlbiBhIGRpc2sgSS9PIGlzIGlzc3VlZCB0byBIUFQzeHhOLgotICoJV2UgbmVlZCBpdCBiZWNhdXNlIG9mIHRoZSBjbG9jayBzd2l0Y2hpbmcuCi0gKi8KLQotc3RhdGljIHZvaWQgaHB0M3h4bl9yd19kaXNrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWhwdDN4eG5fc2V0X2Nsb2NrKEhXSUYoZHJpdmUpLCBycV9kYXRhX2RpcihycSkgPyAweDIzIDogMHgyMSk7Ci19Ci0KLS8qKgotICoJaHB0Mzd4X2NhbGlicmF0ZV9kcGxsCS0JY2FsaWJyYXRlIHRoZSBEUExMCi0gKglAZGV2OiBQQ0kgZGV2aWNlCi0gKgotICoJUGVyZm9ybSBhIGNhbGlicmF0aW9uIGN5Y2xlIG9uIHRoZSBEUExMLgotICoJUmV0dXJucyAxIGlmIHRoaXMgc3VjY2VlZHMKLSAqLwotc3RhdGljIGludCBocHQzN3hfY2FsaWJyYXRlX2RwbGwoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGZfbG93LCB1MTYgZl9oaWdoKQotewotCXUzMiBkcGxsID0gKGZfaGlnaCA8PCAxNikgfCBmX2xvdyB8IDB4MTAwOwotCXU4ICBzY3IyOwotCWludCBpOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NWMsIGRwbGwpOwotCi0JLyogV2FpdCBmb3Igb3NjaWxsYXRvciByZWFkeSAqLwotCWZvcihpID0gMDsgaSA8IDB4NTAwMDsgKytpKSB7Ci0JCXVkZWxheSg1MCk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YiwgJnNjcjIpOwotCQlpZiAoc2NyMiAmIDB4ODApCi0JCQlicmVhazsKLQl9Ci0JLyogU2VlIGlmIGl0IHN0YXlzIHJlYWR5ICh3ZSdsbCBqdXN0IGJhaWwgb3V0IGlmIGl0J3Mgbm90IHlldCkgKi8KLQlmb3IoaSA9IDA7IGkgPCAweDEwMDA7ICsraSkgewotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWIsICZzY3IyKTsKLQkJLyogRFBMTCBkZXN0YWJpbGl6ZWQ/ICovCi0JCWlmKCEoc2NyMiAmIDB4ODApKQotCQkJcmV0dXJuIDA7Ci0JfQotCS8qIFR1cm4gb2ZmIHR1bmluZywgd2UgaGF2ZSB0aGUgRFBMTCBzZXQgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQgKGRldiwgMHg1YywgJmRwbGwpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVjLCAoZHBsbCAmIH4weDEwMCkpOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBocHQzeHhfZGlzYWJsZV9mYXN0X2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBtY3JfYWRkcikKLXsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QJPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBob3N0LT5ob3N0X3ByaXYgKyAoJmRldi0+ZGV2ID09IGhvc3QtPmRldlsxXSk7Ci0JdTggIGNoaXBfdHlwZQkJPSBpbmZvLT5jaGlwX3R5cGU7Ci0JdTggIG5ld19tY3IsIG9sZF9tY3IJPSAwOwotCi0JLyoKLQkgKiBEaXNhYmxlIHRoZSAiZmFzdCBpbnRlcnJ1cHQiIHByZWRpY3Rpb24uICBEb24ndCBob2xkIG9mZgotCSAqIG9uIGludGVycnVwdHMuICg9PSAweDAxIGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciArIDEsICZvbGRfbWNyKTsKLQotCWlmIChjaGlwX3R5cGUgPj0gSFBUMzc0KQotCQluZXdfbWNyID0gb2xkX21jciAmIH4weDA3OwotCWVsc2UgaWYgKGNoaXBfdHlwZSA+PSBIUFQzNzApIHsKLQkJbmV3X21jciA9IG9sZF9tY3I7Ci0JCW5ld19tY3IgJj0gfjB4MDI7Ci0jaWZkZWYgSFBUX0RFTEFZX0lOVEVSUlVQVAotCQluZXdfbWNyICY9IH4weDAxOwotI2Vsc2UKLQkJbmV3X21jciB8PSAgMHgwMTsKLSNlbmRpZgotCX0gZWxzZQkJCQkJLyogSFBUMzY2IGFuZCBIUFQzNjggICovCi0JCW5ld19tY3IgPSBvbGRfbWNyICYgfjB4ODA7Ci0KLQlpZiAobmV3X21jciAhPSBvbGRfbWNyKQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciArIDEsIG5ld19tY3IpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGlvX2Jhc2UJPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oJmRldi0+ZGV2KTsKLQljb25zdCBjaGFyICpuYW1lCT0gRFJWX05BTUU7Ci0JdTggcGNpX2NsaywgIGRwbGxfY2xrCT0gMDsJLyogUENJIGFuZCBEUExMIGNsb2NrIGluIE1IeiAqLwotCXU4IGNoaXBfdHlwZTsKLQllbnVtIGF0YV9jbG9jawljbG9jazsKLQotCWNoaXBfdHlwZSA9IGluZm8tPmNoaXBfdHlwZTsKLQotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIChMMV9DQUNIRV9CWVRFUyAvIDQpKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg3OCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX01JTl9HTlQsIDB4MDgpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9NQVhfTEFULCAweDA4KTsKLQotCS8qCi0JICogRmlyc3QsIHRyeSB0byBlc3RpbWF0ZSB0aGUgUENJIGNsb2NrIGZyZXF1ZW5jeS4uLgotCSAqLwotCWlmIChjaGlwX3R5cGUgPj0gSFBUMzcwKSB7Ci0JCXU4ICBzY3IxICA9IDA7Ci0JCXUxNiBmX2NudCA9IDA7Ci0JCXUzMiB0ZW1wICA9IDA7Ci0KLQkJLyogSW50ZXJydXB0IGZvcmNlIGVuYWJsZS4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7Ci0JCWlmIChzY3IxICYgMHgxMCkKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NWEsIHNjcjEgJiB+MHgxMCk7Ci0KLQkJLyoKLQkJICogSGlnaFBvaW50IGRvZXMgdGhpcyBmb3IgSFBUMzcyQS4KLQkJICogTk9URTogVGhpcyByZWdpc3RlciBpcyBvbmx5IHdyaXRlYWJsZSB2aWEgSS9PIHNwYWNlLgotCQkgKi8KLQkJaWYgKGNoaXBfdHlwZSA9PSBIUFQzNzJBKQotCQkJb3V0YigweDBlLCBpb19iYXNlICsgMHg5Yyk7Ci0KLQkJLyoKLQkJICogRGVmYXVsdCB0byBQQ0kgY2xvY2suIE1ha2Ugc3VyZSBNQTE1LzE2IGFyZSBzZXQgdG8gb3V0cHV0Ci0JCSAqIHRvIHByZXZlbnQgZHJpdmVzIGhhdmluZyBwcm9ibGVtcyB3aXRoIDQwLXBpbiBjYWJsZXMuCi0JCSAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAweDIzKTsKLQotCQkvKgotCQkgKiBXZSdsbCBoYXZlIHRvIHJlYWQgZl9DTlQgdmFsdWUgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lCi0JCSAqIHRoZSBQQ0kgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJhdGlvOgotCQkgKgotCQkgKiBmX0NOVCA9IEZwY2kgKiAxOTIgLyBGZHBsbAotCQkgKgotCQkgKiBGaXJzdCB0cnkgcmVhZGluZyB0aGUgcmVnaXN0ZXIgaW4gd2hpY2ggdGhlIEhpZ2hQb2ludCBCSU9TCi0JCSAqIHNhdmVzIGZfQ05UIHZhbHVlIGJlZm9yZSAgcmVwcm9ncmFtbWluZyB0aGUgRFBMTCBmcm9tIGl0cwotCQkgKiBkZWZhdWx0IHNldHRpbmcgKHdoaWNoIGRpZmZlcnMgZm9yIHRoZSB2YXJpb3VzIGNoaXBzKS4KLQkJICoKLQkJICogTk9URTogVGhpcyByZWdpc3RlciBpcyBvbmx5IGFjY2Vzc2libGUgdmlhIEkvTyBzcGFjZTsKLQkJICogSFBUMzc0IEJJT1Mgb25seSBzYXZlcyBpdCBmb3IgdGhlIGZ1bmN0aW9uIDAsIHNvIHdlIGhhdmUgdG8KLQkJICogYWx3YXlzIHJlYWQgaXQgZnJvbSB0aGVyZSAtLSBubyBuZWVkIHRvIGNoZWNrIHRoZSByZXN1bHQgb2YKLQkJICogcGNpX2dldF9zbG90KCkgZm9yIHRoZSBmdW5jdGlvbiAwIGFzIHRoZSB3aG9sZSBkZXZpY2UgaGFzCi0JCSAqIGJlZW4gYWxyZWFkeSAicGlubmVkIiAodmlhIGZ1bmN0aW9uIDEpIGluIGluaXRfc2V0dXBfaHB0Mzc0KCkKLQkJICovCi0JCWlmIChjaGlwX3R5cGUgPT0gSFBUMzc0ICYmIChQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKSB7Ci0JCQlzdHJ1Y3QgcGNpX2RldgkqZGV2MSA9IHBjaV9nZXRfc2xvdChkZXYtPmJ1cywKLQkJCQkJCQkgICAgIGRldi0+ZGV2Zm4gLSAxKTsKLQkJCXVuc2lnbmVkIGxvbmcgaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYxLCA0KTsKLQotCQkJdGVtcCA9CWlubChpb19iYXNlICsgMHg5MCk7Ci0JCQlwY2lfZGV2X3B1dChkZXYxKTsKLQkJfSBlbHNlCi0JCQl0ZW1wID0JaW5sKGlvX2Jhc2UgKyAweDkwKTsKLQotCQkvKgotCQkgKiBJbiBjYXNlIHRoZSBzaWduYXR1cmUgY2hlY2sgZmFpbHMsIHdlJ2xsIGhhdmUgdG8KLQkJICogcmVzb3J0IHRvIHJlYWRpbmcgdGhlIGZfQ05UIHJlZ2lzdGVyIGl0c2VsZiBpbiBob3BlcwotCQkgKiB0aGF0IG5vYm9keSBoYXMgdG91Y2hlZCB0aGUgRFBMTCB5ZXQuLi4KLQkJICovCi0JCWlmICgodGVtcCAmIDB4RkZGRkYwMDApICE9IDB4QUJDREUwMDApIHsKLQkJCWludCBpOwotCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAlczogbm8gY2xvY2sgZGF0YSBzYXZlZCBieSAiCi0JCQkJIkJJT1NcbiIsIG5hbWUsIHBjaV9uYW1lKGRldikpOwotCi0JCQkvKiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgdmFsdWUgb2YgZl9DTlQuICovCi0JCQlmb3IgKHRlbXAgPSBpID0gMDsgaSA8IDEyODsgaSsrKSB7Ci0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDc4LCAmZl9jbnQpOwotCQkJCXRlbXAgKz0gZl9jbnQgJiAweDFmZjsKLQkJCQltZGVsYXkoMSk7Ci0JCQl9Ci0JCQlmX2NudCA9IHRlbXAgLyAxMjg7Ci0JCX0gZWxzZQotCQkJZl9jbnQgPSB0ZW1wICYgMHgxZmY7Ci0KLQkJZHBsbF9jbGsgPSBpbmZvLT5kcGxsX2NsazsKLQkJcGNpX2NsayAgPSAoZl9jbnQgKiBkcGxsX2NsaykgLyAxOTI7Ci0KLQkJLyogQ2xhbXAgUENJIGNsb2NrIHRvIGJhbmRzLiAqLwotCQlpZiAocGNpX2NsayA8IDQwKQotCQkJcGNpX2NsayA9IDMzOwotCQllbHNlIGlmKHBjaV9jbGsgPCA0NSkKLQkJCXBjaV9jbGsgPSA0MDsKLQkJZWxzZSBpZihwY2lfY2xrIDwgNTUpCi0JCQlwY2lfY2xrID0gNTA7Ci0JCWVsc2UKLQkJCXBjaV9jbGsgPSA2NjsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogRFBMTCBiYXNlOiAlZCBNSHosIGZfQ05UOiAlZCwgIgotCQkJImFzc3VtaW5nICVkIE1IeiBQQ0lcbiIsIG5hbWUsIHBjaV9uYW1lKGRldiksCi0JCQlkcGxsX2NsaywgZl9jbnQsIHBjaV9jbGspOwotCX0gZWxzZSB7Ci0JCXUzMiBpdHIxID0gMDsKLQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAmaXRyMSk7Ci0KLQkJLyogRGV0ZWN0IFBDSSBjbG9jayBieSBsb29raW5nIGF0IGNtZF9oaWdoX3RpbWUuICovCi0JCXN3aXRjaCgoaXRyMSA+PiA4KSAmIDB4MDcpIHsKLQkJCWNhc2UgMHgwOToKLQkJCQlwY2lfY2xrID0gNDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MDU6Ci0JCQkJcGNpX2NsayA9IDI1OwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDA3OgotCQkJZGVmYXVsdDoKLQkJCQlwY2lfY2xrID0gMzM7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBMZXQncyBhc3N1bWUgd2UnbGwgdXNlIFBDSSBjbG9jayBmb3IgdGhlIEFUQSBjbG9jay4uLiAqLwotCXN3aXRjaCAocGNpX2NsaykgewotCQljYXNlIDI1OgotCQkJY2xvY2sgPSBBVEFfQ0xPQ0tfMjVNSFo7Ci0JCQlicmVhazsKLQkJY2FzZSAzMzoKLQkJZGVmYXVsdDoKLQkJCWNsb2NrID0gQVRBX0NMT0NLXzMzTUhaOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDA6Ci0JCQljbG9jayA9IEFUQV9DTE9DS180ME1IWjsKLQkJCWJyZWFrOwotCQljYXNlIDUwOgotCQkJY2xvY2sgPSBBVEFfQ0xPQ0tfNTBNSFo7Ci0JCQlicmVhazsKLQkJY2FzZSA2NjoKLQkJCWNsb2NrID0gQVRBX0NMT0NLXzY2TUhaOwotCQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBPbmx5IHRyeSB0aGUgRFBMTCBpZiB3ZSBkb24ndCBoYXZlIGEgdGFibGUgZm9yIHRoZSBQQ0kgY2xvY2sgdGhhdAotCSAqIHdlIGFyZSBydW5uaW5nIGF0IGZvciBIUFQzNzAvQSwgYWx3YXlzIHVzZSBpdCAgZm9yIGFueXRoaW5nIG5ld2VyLi4uCi0JICoKLQkgKiBOT1RFOiBVc2luZyB0aGUgaW50ZXJuYWwgRFBMTCByZXN1bHRzIGluIHNsb3cgcmVhZHMgb24gMzMgTUh6IFBDSS4KLQkgKiBXZSBhbHNvICBkb24ndCBsaWtlIHVzaW5nICB0aGUgRFBMTCBiZWNhdXNlIHRoaXMgY2F1c2VzIGdsaXRjaGVzCi0JICogb24gUFJTVC0vU1JTVC0gd2hlbiB0aGUgc3RhdGUgZW5naW5lIGdldHMgcmVzZXQuLi4KLQkgKi8KLQlpZiAoY2hpcF90eXBlID49IEhQVDM3NCB8fCBpbmZvLT50aW1pbmdzLT5jbG9ja190YWJsZVtjbG9ja10gPT0gTlVMTCkgewotCQl1MTYgZl9sb3csIGRlbHRhID0gcGNpX2NsayA8IDUwID8gMiA6IDQ7Ci0JCWludCBhZGp1c3Q7Ci0KLQkJIC8qCi0JCSAgKiBTZWxlY3QgNjYgTUh6IERQTEwgY2xvY2sgb25seSBpZiBVbHRyYUFUQS8xMzMgbW9kZSBpcwotCQkgICogc3VwcG9ydGVkL2VuYWJsZWQsIHVzZSA1MCBNSHogRFBMTCBjbG9jayBvdGhlcndpc2UuLi4KLQkJICAqLwotCQlpZiAoaW5mby0+dWRtYV9tYXNrID09IEFUQV9VRE1BNikgewotCQkJZHBsbF9jbGsgPSA2NjsKLQkJCWNsb2NrID0gQVRBX0NMT0NLXzY2TUhaOwotCQl9IGVsc2UgaWYgKGRwbGxfY2xrKSB7CS8qIEhQVDM2eCBjaGlwcyBkb24ndCBoYXZlIERQTEwgKi8KLQkJCWRwbGxfY2xrID0gNTA7Ci0JCQljbG9jayA9IEFUQV9DTE9DS181ME1IWjsKLQkJfQotCi0JCWlmIChpbmZvLT50aW1pbmdzLT5jbG9ja190YWJsZVtjbG9ja10gPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlczogdW5rbm93biBidXMgdGltaW5nIVxuIiwKLQkJCQluYW1lLCBwY2lfbmFtZShkZXYpKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJLyogU2VsZWN0IHRoZSBEUExMIGNsb2NrLiAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAweDIxKTsKLQotCQkvKgotCQkgKiBBZGp1c3QgdGhlIERQTEwgYmFzZWQgdXBvbiBQQ0kgY2xvY2ssIGVuYWJsZSBpdCwKLQkJICogYW5kIHdhaXQgZm9yIHN0YWJpbGl6YXRpb24uLi4KLQkJICovCi0JCWZfbG93ID0gKHBjaV9jbGsgKiA0OCkgLyBkcGxsX2NsazsKLQotCQlmb3IgKGFkanVzdCA9IDA7IGFkanVzdCA8IDg7IGFkanVzdCsrKSB7Ci0JCQlpZihocHQzN3hfY2FsaWJyYXRlX2RwbGwoZGV2LCBmX2xvdywgZl9sb3cgKyBkZWx0YSkpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qCi0JCQkgKiBTZWUgaWYgaXQnbGwgc2V0dGxlIGF0IGEgZnJhY3Rpb25hbGx5IGRpZmZlcmVudCBjbG9jawotCQkJICovCi0JCQlpZiAoYWRqdXN0ICYgMSkKLQkJCQlmX2xvdyAtPSBhZGp1c3QgPj4gMTsKLQkJCWVsc2UKLQkJCQlmX2xvdyArPSBhZGp1c3QgPj4gMTsKLQkJfQotCQlpZiAoYWRqdXN0ID09IDgpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXMgJXM6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iLAotCQkJCW5hbWUsIHBjaV9uYW1lKGRldikpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogdXNpbmcgJWQgTUh6IERQTEwgY2xvY2tcbiIsCi0JCQluYW1lLCBwY2lfbmFtZShkZXYpLCBkcGxsX2Nsayk7Ci0JfSBlbHNlIHsKLQkJLyogTWFyayB0aGUgZmFjdCB0aGF0IHdlJ3JlIG5vdCB1c2luZyB0aGUgRFBMTC4gKi8KLQkJZHBsbF9jbGsgPSAwOwotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzICVzOiB1c2luZyAlZCBNSHogUENJIGNsb2NrXG4iLAotCQkJbmFtZSwgcGNpX25hbWUoZGV2KSwgcGNpX2Nsayk7Ci0JfQotCi0JLyogU3RvcmUgdGhlIGNsb2NrIGZyZXF1ZW5jaWVzLiAqLwotCWluZm8tPmRwbGxfY2xrCT0gZHBsbF9jbGs7Ci0JaW5mby0+cGNpX2Nsawk9IHBjaV9jbGs7Ci0JaW5mby0+Y2xvY2sJPSBjbG9jazsKLQotCWlmIChjaGlwX3R5cGUgPj0gSFBUMzcwKSB7Ci0JCXU4ICBtY3IxLCBtY3I0OwotCi0JCS8qCi0JCSAqIFJlc2V0IHRoZSBzdGF0ZSBlbmdpbmVzLgotCQkgKiBOT1RFOiBBdm9pZCBhY2NpZGVudGFsbHkgZW5hYmxpbmcgdGhlIGRpc2FibGVkIGNoYW5uZWxzLgotCQkgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUgKGRldiwgMHg1MCwgJm1jcjEpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZSAoZGV2LCAweDU0LCAmbWNyNCk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIChtY3IxIHwgMHgzMikpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCAobWNyNCB8IDB4MzIpKTsKLQkJdWRlbGF5KDEwMCk7Ci0JfQotCi0JLyoKLQkgKiBPbiAgSFBUMzcxTiwgaWYgQVRBIGNsb2NrIGlzIDY2IE1IeiB3ZSBtdXN0IHNldCBiaXQgMiBpbgotCSAqIHRoZSBNSVNDLiByZWdpc3RlciB0byBzdHJldGNoIHRoZSBVbHRyYURNQSBUc3MgdGltaW5nLgotCSAqIE5PVEU6IFRoaXMgcmVnaXN0ZXIgaXMgb25seSB3cml0ZWFibGUgdmlhIEkvTyBzcGFjZS4KLQkgKi8KLQlpZiAoY2hpcF90eXBlID09IEhQVDM3MU4gJiYgY2xvY2sgPT0gQVRBX0NMT0NLXzY2TUhaKQotCQlvdXRiKGluYihpb19iYXNlICsgMHg5YykgfCAweDA0LCBpb19iYXNlICsgMHg5Yyk7Ci0KLQlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTApOwotCWhwdDN4eF9kaXNhYmxlX2Zhc3RfaXJxKGRldiwgMHg1NCk7Ci0KLQlyZXR1cm4gZGV2LT5pcnE7Ci19Ci0KLXN0YXRpYyB1OCBocHQzeHhfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCi17Ci0Jc3RydWN0IHBjaV9kZXYJKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKLQl1OCBjaGlwX3R5cGUJCT0gaW5mby0+Y2hpcF90eXBlOwotCXU4IHNjcjEgPSAwLCBhdGE2Ngk9IGh3aWYtPmNoYW5uZWwgPyAweDAxIDogMHgwMjsKLQotCS8qCi0JICogVGhlIEhQVDM3eCB1c2VzIHRoZSBDQkxJRCBwaW5zIGFzIG91dHB1dHMgZm9yIE1BMTUvTUExNgotCSAqIGFkZHJlc3MgbGluZXMgdG8gYWNjZXNzIGFuIGV4dGVybmFsIEVFUFJPTS4gIFRvIHJlYWQgdmFsaWQKLQkgKiBjYWJsZSBkZXRlY3Qgc3RhdGUgdGhlIHBpbnMgbXVzdCBiZSBlbmFibGVkIGFzIGlucHV0cy4KLQkgKi8KLQlpZiAoY2hpcF90eXBlID09IEhQVDM3NCAmJiAoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSkgewotCQkvKgotCQkgKiBIUFQzNzQgUENJIGZ1bmN0aW9uIDEKLQkJICogLSBzZXQgYml0IDE1IG9mIHJlZyAweDUyIHRvIGVuYWJsZSBUQ0JMSUQgYXMgaW5wdXQKLQkJICogLSBzZXQgYml0IDE1IG9mIHJlZyAweDU2IHRvIGVuYWJsZSBGQ0JMSUQgYXMgaW5wdXQKLQkJICovCi0JCXU4ICBtY3JfYWRkciA9IGh3aWYtPnNlbGVjdF9kYXRhICsgMjsKLQkJdTE2IG1jcjsKLQotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1jcl9hZGRyLCAmbWNyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgbWNyX2FkZHIsIChtY3IgfCAweDgwMDApKTsKLQkJLyogbm93IHJlYWQgY2FibGUgaWQgcmVnaXN0ZXIgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1jcl9hZGRyLCBtY3IpOwotCX0gZWxzZSBpZiAoY2hpcF90eXBlID49IEhQVDM3MCkgewotCQkvKgotCQkgKiBIUFQzNzAvMzcyIGFuZCAzNzQgcGNpZm4gMAotCQkgKiAtIGNsZWFyIGJpdCAwIG9mIHJlZyAweDViIHRvIGVuYWJsZSBQL1NDQkxJRCBhcyBpbnB1dHMKLQkJICovCi0JCXU4IHNjcjIgPSAwOwotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YiwgJnNjcjIpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAoc2NyMiAmIH4xKSk7Ci0JCS8qIG5vdyByZWFkIGNhYmxlIGlkIHJlZ2lzdGVyICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgJnNjcjEpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDViLCAgc2NyMik7Ci0JfSBlbHNlCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgJnNjcjEpOwotCi0JcmV0dXJuIChzY3IxICYgYXRhNjYpID8gQVRBX0NCTF9QQVRBNDAgOiBBVEFfQ0JMX1BBVEE4MDsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9ocHQzNjYoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbyhod2lmLT5kZXYpOwotCWludCBzZXJpYWxpemUJCT0gSFBUX1NFUklBTElaRV9JTzsKLQl1OCAgY2hpcF90eXBlCQk9IGluZm8tPmNoaXBfdHlwZTsKLQotCS8qIENhY2hlIHRoZSBjaGFubmVsJ3MgTUlTQy4gY29udHJvbCByZWdpc3RlcnMnIG9mZnNldCAqLwotCWh3aWYtPnNlbGVjdF9kYXRhCT0gaHdpZi0+Y2hhbm5lbCA/IDB4NTQgOiAweDUwOwotCi0JLyoKLQkgKiBIUFQzeHhOIGNoaXBzIGhhdmUgc29tZSBjb21wbGljYXRpb25zOgotCSAqCi0JICogLSBvbiAzMyBNSHogUENJIHdlIG11c3QgY2xvY2sgc3dpdGNoCi0JICogLSBvbiA2NiBNSHogUENJIHdlIG11c3QgTk9UIHVzZSB0aGUgUENJIGNsb2NrCi0JICovCi0JaWYgKGNoaXBfdHlwZSA+PSBIUFQzNzJOICYmIGluZm8tPmRwbGxfY2xrICYmIGluZm8tPnBjaV9jbGsgPCA2NikgewotCQkvKgotCQkgKiBDbG9jayBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgY2hhbm5lbHMsCi0JCSAqIHNvIHdlJ2xsIGhhdmUgdG8gc2VyaWFsaXplIHRoZW0uLi4gOi0oCi0JCSAqLwotCQlzZXJpYWxpemUgPSAxOwotCQlod2lmLT5yd19kaXNrID0gJmhwdDN4eG5fcndfZGlzazsKLQl9Ci0KLQkvKiBTZXJpYWxpemUgYWNjZXNzIHRvIHRoaXMgZGV2aWNlIGlmIG5lZWRlZCAqLwotCWlmIChzZXJpYWxpemUgJiYgaHdpZi0+bWF0ZSkKLQkJaHdpZi0+c2VyaWFsaXplZCA9IGh3aWYtPm1hdGUtPnNlcmlhbGl6ZWQgPSAxOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X2RtYV9ocHQzNjYoaWRlX2h3aWZfdCAqaHdpZiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgYmFzZSA9IGlkZV9wY2lfZG1hX2Jhc2UoaHdpZiwgZCk7Ci0JdTggZG1hX29sZCwgZG1hX25ldywgbWFzdGVyZG1hID0gMCwgc2xhdmVkbWEgPSAwOwotCi0JaWYgKGJhc2UgPT0gMCkKLQkJcmV0dXJuIC0xOwotCi0JaHdpZi0+ZG1hX2Jhc2UgPSBiYXNlOwotCi0JaWYgKGlkZV9wY2lfY2hlY2tfc2ltcGxleChod2lmLCBkKSA8IDApCi0JCXJldHVybiAtMTsKLQotCWlmIChpZGVfcGNpX3NldF9tYXN0ZXIoZGV2LCBkLT5uYW1lKSA8IDApCi0JCXJldHVybiAtMTsKLQotCWRtYV9vbGQgPSBpbmIoYmFzZSArIDIpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JZG1hX25ldyA9IGRtYV9vbGQ7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBod2lmLT5jaGFubmVsID8gMHg0YiA6IDB4NDMsICZtYXN0ZXJkbWEpOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgaHdpZi0+Y2hhbm5lbCA/IDB4NGYgOiAweDQ3LCAgJnNsYXZlZG1hKTsKLQotCWlmIChtYXN0ZXJkbWEgJiAweDMwKQlkbWFfbmV3IHw9IDB4MjA7Ci0JaWYgKCBzbGF2ZWRtYSAmIDB4MzApCWRtYV9uZXcgfD0gMHg0MDsKLQlpZiAoZG1hX25ldyAhPSBkbWFfb2xkKQotCQlvdXRiKGRtYV9uZXcsIGJhc2UgKyAyKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiAgICAlczogQk0tRE1BIGF0IDB4JTA0bHgtMHglMDRseFxuIiwKLQkJCSBod2lmLT5uYW1lLCBiYXNlLCBiYXNlICsgNyk7Ci0KLQlod2lmLT5leHRyYV9iYXNlID0gYmFzZSArIChod2lmLT5jaGFubmVsID8gOCA6IDE2KTsKLQotCWlmIChpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShod2lmKSkKLQkJcmV0dXJuIC0xOwotCi0JaHdpZi0+ZG1hX29wcyA9ICZzZmZfZG1hX29wczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaHB0Mzc0X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKmRldjIpCi17Ci0JaWYgKGRldjItPmlycSAhPSBkZXYtPmlycSkgewotCQkvKiBGSVhNRTogd2UgbmVlZCBhIGNvcmUgcGNpX3NldF9pbnRlcnJ1cHQoKSAqLwotCQlkZXYyLT5pcnEgPSBkZXYtPmlycTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiICVzOiBQQ0kgY29uZmlnIHNwYWNlIGludGVycnVwdCAiCi0JCQkiZml4ZWRcbiIsIHBjaV9uYW1lKGRldjIpKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHQzNzFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXU4IG1jcjEgPSAwOwotCi0JLyoKLQkgKiBIUFQzNzEgY2hpcHMgcGh5c2ljYWxseSBoYXZlIG9ubHkgb25lIGNoYW5uZWwsIHRoZSBzZWNvbmRhcnkgb25lLAotCSAqIGJ1dCB0aGUgcHJpbWFyeSBjaGFubmVsIHJlZ2lzdGVycyBkbyBleGlzdCEgIEdvIGZpZ3VyZS4uLgotCSAqIFNvLCAgd2UgbWFudWFsbHkgZGlzYWJsZSB0aGUgbm9uLWV4aXN0aW5nIGNoYW5uZWwgaGVyZQotCSAqIChpZiB0aGUgQklPUyBoYXNuJ3QgZG9uZSB0aGlzIGFscmVhZHkpLgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOwotCWlmIChtY3IxICYgMHgwNCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSAmIH4weDA0KTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgaHB0MzZ4X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKmRldjIpCi17Ci0JdTggbWNyMSA9IDAsIHBpbjEgPSAwLCBwaW4yID0gMDsKLQotCS8qCi0JICogTm93IHdlJ2xsIGhhdmUgdG8gZm9yY2UgYm90aCBjaGFubmVscyBlbmFibGVkIGlmCi0JICogYXQgbGVhc3Qgb25lIG9mIHRoZW0gaGFzIGJlZW4gZW5hYmxlZCBieSBCSU9TLi4uCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7Ci0JaWYgKG1jcjEgJiAweDMwKQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUwLCBtY3IxIHwgMHgzMCk7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsICBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbjEpOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldjIsIFBDSV9JTlRFUlJVUFRfUElOLCAmcGluMik7Ci0KLQlpZiAocGluMSAhPSBwaW4yICYmIGRldi0+aXJxID09IGRldjItPmlycSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICIgJXM6IG9uYm9hcmQgdmVyc2lvbiBvZiBjaGlwc2V0LCAiCi0JCQkicGluMT0lZCBwaW4yPSVkXG4iLCBwY2lfbmFtZShkZXYpLCBwaW4xLCBwaW4yKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgSURFX0hGTEFHU19IUFQzWFggXAotCShJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwgXAotCSBJREVfSEZMQUdfT0ZGX0JPQVJEKQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBocHQzeHhfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9fbW9kZQkJPSBocHQzeHhfc2V0X3Bpb19tb2RlLAotCS5zZXRfZG1hX21vZGUJCT0gaHB0M3h4X3NldF9tb2RlLAotCS5xdWlya3Byb2MJCT0gaHB0M3h4X3F1aXJrcHJvYywKLQkubWFza3Byb2MJCT0gaHB0M3h4X21hc2twcm9jLAotCS5tZG1hX2ZpbHRlcgkJPSBocHQzeHhfbWRtYV9maWx0ZXIsCi0JLnVkbWFfZmlsdGVyCQk9IGhwdDN4eF91ZG1hX2ZpbHRlciwKLQkuY2FibGVfZGV0ZWN0CQk9IGhwdDN4eF9jYWJsZV9kZXRlY3QsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM3eF9kbWFfb3BzID0gewotCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKLQkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAotCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKLQkuZG1hX2VuZAkJPSBocHQzNzRfZG1hX2VuZCwKLQkuZG1hX3Rlc3RfaXJxCQk9IGhwdDM3NF9kbWFfdGVzdF9pcnEsCi0JLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM3MF9kbWFfb3BzID0gewotCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKLQkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAotCS5kbWFfc3RhcnQJCT0gaHB0MzcwX2RtYV9zdGFydCwKLQkuZG1hX2VuZAkJPSBocHQzNzBfZG1hX2VuZCwKLQkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBocHQzNzBfZG1hX3RpbWVvdXQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM2eF9kbWFfb3BzID0gewotCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKLQkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAotCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKLQkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKLQkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV9sb3N0X2lycQkJPSBocHQzNjZfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaHB0MzY2X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7CS8qIDA6IEhQVDM2eCAqLwotCQkubmFtZQkJPSBEUlZfTkFNRSwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9ocHQzNjYsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfaHB0MzY2LAotCQkuaW5pdF9kbWEJPSBpbml0X2RtYV9ocHQzNjYsCi0JCS8qCi0JCSAqIEhQVDM2eCBjaGlwcyBoYXZlIG9uZSBjaGFubmVsIHBlciBmdW5jdGlvbiBhbmQgaGF2ZQotCQkgKiBib3RoIGNoYW5uZWwgZW5hYmxlIGJpdHMgbG9jYXRlZCBkaWZmZXJlbnRseSBhbmQgdmlzaWJsZQotCQkgKiB0byBib3RoIGZ1bmN0aW9ucyAtLSByZWFsbHkgc3R1cGlkIGRlc2lnbiBkZWNpc2lvbi4uLiA6LSgKLQkJICogQml0IDQgaXMgZm9yIHRoZSBwcmltYXJ5IGNoYW5uZWwsIGJpdCA1IGZvciB0aGUgc2Vjb25kYXJ5LgotCQkgKi8KLQkJLmVuYWJsZWJpdHMJPSB7ezB4NTAsMHgxMCwweDEwfSwgezB4NTQsMHgwNCwweDA0fX0sCi0JCS5wb3J0X29wcwk9ICZocHQzeHhfcG9ydF9vcHMsCi0JCS5kbWFfb3BzCT0gJmhwdDM2eF9kbWFfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfSFBUM1hYIHwgSURFX0hGTEFHX1NJTkdMRSwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKLQl9LAotCXsJLyogMTogSFBUM3h4ICovCi0JCS5uYW1lCQk9IERSVl9OQU1FLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM2NiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNjYsCi0JCS5pbml0X2RtYQk9IGluaXRfZG1hX2hwdDM2NiwKLQkJLmVuYWJsZWJpdHMJPSB7ezB4NTAsMHgwNCwweDA0fSwgezB4NTQsMHgwNCwweDA0fX0sCi0JCS5wb3J0X29wcwk9ICZocHQzeHhfcG9ydF9vcHMsCi0JCS5kbWFfb3BzCT0gJmhwdDM3eF9kbWFfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfSFBUM1hYLAotCQkucGlvX21hc2sJPSBBVEFfUElPNCwKLQkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAotCX0KLX07Ci0KLS8qKgotICoJaHB0MzY2X2luaXRfb25lCS0JY2FsbGVkIHdoZW4gYW4gSFBUMzY2IGlzIGZvdW5kCi0gKglAZGV2OiB0aGUgaHB0MzY2IGRldmljZQotICoJQGlkOiB0aGUgbWF0Y2hpbmcgcGNpIGlkCi0gKgotICoJQ2FsbGVkIHdoZW4gdGhlIFBDSSByZWdpc3RyYXRpb24gbGF5ZXIgKG9yIHRoZSBJREUgaW5pdGlhbGl6YXRpb24pCi0gKglmaW5kcyBhIGRldmljZSBtYXRjaGluZyBvdXIgSURFIGRldmljZSB0YWJsZXMuCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGhwdDM2Nl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0JY29uc3Qgc3RydWN0IGhwdF9pbmZvICppbmZvID0gTlVMTDsKLQlzdHJ1Y3QgaHB0X2luZm8gKmR5bl9pbmZvOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYyID0gTlVMTDsKLQlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkOwotCXU4IGlkeCA9IGlkLT5kcml2ZXJfZGF0YTsKLQl1OCByZXYgPSBkZXYtPnJldmlzaW9uOwotCWludCByZXQ7Ci0KLQlpZiAoKGlkeCA9PSAwIHx8IGlkeCA9PSA0KSAmJiAoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlzd2l0Y2ggKGlkeCkgewotCWNhc2UgMDoKLQkJaWYgKHJldiA8IDMpCi0JCQlpbmZvID0gJmhwdDM2eDsKLQkJZWxzZSB7Ci0JCQlzd2l0Y2ggKG1pbl90KHU4LCByZXYsIDYpKSB7Ci0JCQljYXNlIDM6IGluZm8gPSAmaHB0MzcwOyAgYnJlYWs7Ci0JCQljYXNlIDQ6IGluZm8gPSAmaHB0MzcwYTsgYnJlYWs7Ci0JCQljYXNlIDU6IGluZm8gPSAmaHB0MzcyOyAgYnJlYWs7Ci0JCQljYXNlIDY6IGluZm8gPSAmaHB0MzcybjsgYnJlYWs7Ci0JCQl9Ci0JCQlpZHgrKzsKLQkJfQotCQlicmVhazsKLQljYXNlIDE6Ci0JCWluZm8gPSAocmV2ID4gMSkgPyAmaHB0MzcybiA6ICZocHQzNzJhOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWluZm8gPSAocmV2ID4gMSkgPyAmaHB0MzAybiA6ICZocHQzMDI7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJaHB0MzcxX2luaXQoZGV2KTsKLQkJaW5mbyA9IChyZXYgPiAxKSA/ICZocHQzNzFuIDogJmhwdDM3MTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlpbmZvID0gJmhwdDM3NDsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQlpbmZvID0gJmhwdDM3Mm47Ci0JCWJyZWFrOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXMgY2hpcHNldCBkZXRlY3RlZFxuIiwgaW5mby0+Y2hpcF9uYW1lKTsKLQotCWQgPSBocHQzNjZfY2hpcHNldHNbbWluX3QodTgsIGlkeCwgMSldOwotCi0JZC51ZG1hX21hc2sgPSBpbmZvLT51ZG1hX21hc2s7Ci0KLQkvKiBmaXh1cCAtPmRtYV9vcHMgZm9yIEhQVDM3MC9IUFQzNzBBICovCi0JaWYgKGluZm8gPT0gJmhwdDM3MCB8fCBpbmZvID09ICZocHQzNzBhKQotCQlkLmRtYV9vcHMgPSAmaHB0MzcwX2RtYV9vcHM7Ci0KLQlpZiAoaW5mbyA9PSAmaHB0MzZ4IHx8IGluZm8gPT0gJmhwdDM3NCkKLQkJZGV2MiA9IHBjaV9nZXRfc2xvdChkZXYtPmJ1cywgZGV2LT5kZXZmbiArIDEpOwotCi0JZHluX2luZm8gPSBremFsbG9jKHNpemVvZigqZHluX2luZm8pICogKGRldjIgPyAyIDogMSksIEdGUF9LRVJORUwpOwotCWlmIChkeW5faW5mbyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgJXM6IG91dCBvZiBtZW1vcnkhXG4iLAotCQkJZC5uYW1lLCBwY2lfbmFtZShkZXYpKTsKLQkJcGNpX2Rldl9wdXQoZGV2Mik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogQ29weSBldmVyeXRoaW5nIGZyb20gYSBzdGF0aWMgInRlbXBsYXRlIiBzdHJ1Y3R1cmUKLQkgKiB0byBqdXN0IGFsbG9jYXRlZCBwZXItY2hpcCBocHRfaW5mbyBzdHJ1Y3R1cmUuCi0JICovCi0JbWVtY3B5KGR5bl9pbmZvLCBpbmZvLCBzaXplb2YoKmR5bl9pbmZvKSk7Ci0KLQlpZiAoZGV2MikgewotCQltZW1jcHkoZHluX2luZm8gKyAxLCBpbmZvLCBzaXplb2YoKmR5bl9pbmZvKSk7Ci0KLQkJaWYgKGluZm8gPT0gJmhwdDM3NCkKLQkJCWhwdDM3NF9pbml0KGRldiwgZGV2Mik7Ci0JCWVsc2UgewotCQkJaWYgKGhwdDM2eF9pbml0KGRldiwgZGV2MikpCi0JCQkJZC5ob3N0X2ZsYWdzICY9IH5JREVfSEZMQUdfTk9OX0JPT1RBQkxFOwotCQl9Ci0KLQkJcmV0ID0gaWRlX3BjaV9pbml0X3R3byhkZXYsIGRldjIsICZkLCBkeW5faW5mbyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwY2lfZGV2X3B1dChkZXYyKTsKLQkJCWtmcmVlKGR5bl9pbmZvKTsKLQkJfQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IGlkZV9wY2lfaW5pdF9vbmUoZGV2LCAmZCwgZHluX2luZm8pOwotCWlmIChyZXQgPCAwKQotCQlrZnJlZShkeW5faW5mbyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgaHB0MzY2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpZGVfaW5mbyAqaW5mbyA9IGhvc3QtPmhvc3RfcHJpdjsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2MiA9IGhvc3QtPmRldlsxXSA/IHRvX3BjaV9kZXYoaG9zdC0+ZGV2WzFdKSA6IE5VTEw7Ci0KLQlpZGVfcGNpX3JlbW92ZShkZXYpOwotCXBjaV9kZXZfcHV0KGRldjIpOwotCWtmcmVlKGluZm8pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0MzY2X3BjaV90YmxbXSBfX2RldmluaXRjb25zdCA9IHsKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzY2KSwgIDAgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyKSwgIDEgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyKSwgIDIgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxKSwgIDMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzc0KSwgIDQgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyTiksIDUgfSwKLQl7IDAsIH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwdDM2Nl9wY2lfdGJsKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhwdDM2Nl9wY2lfZHJpdmVyID0gewotCS5uYW1lCQk9ICJIUFQzNjZfSURFIiwKLQkuaWRfdGFibGUJPSBocHQzNjZfcGNpX3RibCwKLQkucHJvYmUJCT0gaHB0MzY2X2luaXRfb25lLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaHB0MzY2X3JlbW92ZSksCi0JLnN1c3BlbmQJPSBpZGVfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBpZGVfcGNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhwdDM2Nl9pZGVfaW5pdCh2b2lkKQotewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmaHB0MzY2X3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaHB0MzY2X2lkZV9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZocHQzNjZfcGNpX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGhwdDM2Nl9pZGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChocHQzNjZfaWRlX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBbmRyZSBIZWRyaWNrIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBkcml2ZXIgbW9kdWxlIGZvciBIaWdocG9pbnQgSFBUMzY2IElERSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlMWQ4MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDk3MCArMCwwIEBACi0vKgotICogU3VwcG9ydCBmb3IgSURFIGludGVyZmFjZXMgb24gQ2VsbGViIHBsYXRmb3JtCi0gKgotICogKEMpIENvcHlyaWdodCAyMDA2IFRPU0hJQkEgQ09SUE9SQVRJT04KLSAqCi0gKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYzoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgPGFsYW5AcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9TQ0NfQVRBICAgICAgICAgICAgMHgwMWI0Ci0KLSNkZWZpbmUgU0NDX1BBVEFfTkFNRSAgICAgICAgICAgInNjYyBJREUiCi0KLSNkZWZpbmUgVERWSFNFTF9NQVNURVIgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBURFZIU0VMX1NMQVZFICAgICAgICAgICAweDAwMDAwMDA0Ci0KLSNkZWZpbmUgTU9ERV9KQ1VTRkVOICAgICAgICAgICAgMHgwMDAwMDA4MAotCi0jZGVmaW5lIENDS0NUUkxfQVRBUkVTRVQgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgQ0NLQ1RSTF9CVUZDTlQgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBDQ0tDVFJMX0NSU1QgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIENDS0NUUkxfT0NMS0VOICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgQ0NLQ1RSTF9BVEFDTEtPRU4gICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBDQ0tDVFJMX0xDTEtFTiAgICAgICAgICAweDAwMDAwMDAxCi0KLSNkZWZpbmUgUUNIQ0RfSU9TX1NTCQkweDAwMDAwMDAxCi0KLSNkZWZpbmUgUUNIU0RfU1RQRElBRwkJMHgwMDAyMDAwMAotCi0jZGVmaW5lIElOVE1BU0tfTVNLICAgICAgICAgICAgIDB4RDEwMDAwMTIKLSNkZWZpbmUgSU5UU1RTX1NFUlJPUgkJMHg4MDAwMDAwMAotI2RlZmluZSBJTlRTVFNfUFJFUlIJCTB4NDAwMDAwMDAKLSNkZWZpbmUgSU5UU1RTX1JFUlIJCTB4MTAwMDAwMDAKLSNkZWZpbmUgSU5UU1RTX0lDRVJSCQkweDAxMDAwMDAwCi0jZGVmaW5lIElOVFNUU19CTVNJTlQJCTB4MDAwMDAwMTAKLSNkZWZpbmUgSU5UU1RTX0JNSEUJCTB4MDAwMDAwMDgKLSNkZWZpbmUgSU5UU1RTX0lPSVJRUyAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBJTlRTVFNfSU5UUlEgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIElOVFNUU19BQ1RFSU5UICAgICAgICAgIDB4MDAwMDAwMDEKLQotI2RlZmluZSBFQ01PREVfVkFMVUUgMHgwMQotCi1zdGF0aWMgc3RydWN0IHNjY19wb3J0cyB7Ci0JdW5zaWduZWQgbG9uZyBjdGwsIGRtYTsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CS8qIGZvciByZW1vdmluZyBwb3J0IGZyb20gc3lzdGVtICovCi19IHNjY19wb3J0c1tNQVhfSFdJRlNdOwotCi0vKiBQSU8gdHJhbnNmZXIgbW9kZSAgdGFibGUgKi8KLS8qIEpDSFNUICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBKQ0hTVHRibFsyXVs3XSA9IHsKLQl7MHgwRSwgMHgwNSwgMHgwMiwgMHgwMywgMHgwMiwgMHgwMCwgMHgwMH0sICAgLyogMTAwTUh6ICovCi0JezB4MTMsIDB4MDcsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDAsIDB4MDB9ICAgIC8qIDEzM01IeiAqLwotfTsKLQotLyogSkNISFQgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEpDSEhUdGJsWzJdWzddID0gewotCXsweDBFLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAwLCAweDAwfSwgICAvKiAxMDBNSHogKi8KLQl7MHgxMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMCwgMHgwMH0gICAgLyogMTMzTUh6ICovCi19OwotCi0vKiBKQ0hDVCAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgSkNIQ1R0YmxbMl1bN10gPSB7Ci0JezB4MUQsIDB4MUQsIDB4MUMsIDB4MEIsIDB4MDYsIDB4MDAsIDB4MDB9LCAgIC8qIDEwME1IeiAqLwotCXsweDI3LCAweDI2LCAweDI2LCAweDBFLCAweDA5LCAweDAwLCAweDAwfSAgICAvKiAxMzNNSHogKi8KLX07Ci0KLQotLyogRE1BIHRyYW5zZmVyIG1vZGUgIHRhYmxlICovCi0vKiBKQ0hEQ1RNL0pDSERDVFMgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEpDSERDVHh0YmxbMl1bN10gPSB7Ci0JezB4MEEsIDB4MDYsIDB4MDQsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDB9LCAgIC8qIDEwME1IeiAqLwotCXsweDBFLCAweDA5LCAweDA2LCAweDA0LCAweDAyLCAweDAxLCAweDAwfSAgICAvKiAxMzNNSHogKi8KLX07Ci0KLS8qIEpDU1RXVE0vSkNTVFdUUyAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEpDU1RXVHh0YmxbMl1bN10gPSB7Ci0JezB4MDYsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDB9LCAgIC8qIDEwME1IeiAqLwotCXsweDA5LCAweDA2LCAweDA0LCAweDAyLCAweDAyLCAweDAyLCAweDAyfSAgICAvKiAxMzNNSHogKi8KLX07Ci0KLS8qIEpDVFNTICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBKQ1RTU3RibFsyXVs3XSA9IHsKLQl7MHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwMH0sICAgLyogMTAwTUh6ICovCi0JezB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDV9ICAgIC8qIDEzM01IeiAqLwotfTsKLQotLyogSkNFTlZUICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBKQ0VOVlR0YmxbMl1bN10gPSB7Ci0JezB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDB9LCAgIC8qIDEwME1IeiAqLwotCXsweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyfSAgICAvKiAxMzNNSHogKi8KLX07Ci0KLS8qIEpDQUNUU0VMUy9KQ0FDVFNFTE0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEpDQUNUU0VMdGJsWzJdWzddID0gewotCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwfSwgICAvKiAxMDBNSHogKi8KLQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gICAgLyogMTMzTUh6ICovCi19OwotCi0KLXN0YXRpYyB1OCBzY2NfaWRlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JdTMyIGRhdGEgPSBpbl9iZTMyKCh2b2lkKilwb3J0KTsKLQlyZXR1cm4gKHU4KWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY19leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQotewotCW91dF9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyLCBjbWQpOwotCWVpZWlvKCk7Ci0JaW5fYmUzMigodm9pZCAqKShod2lmLT5kbWFfYmFzZSArIDB4MDFjKSk7Ci0JZWllaW8oKTsKLX0KLQotc3RhdGljIHU4IHNjY19yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCXJldHVybiAodTgpaW5fYmUzMigodm9pZCAqKWh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKLX0KLQotc3RhdGljIHU4IHNjY19yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCXJldHVybiAodTgpaW5fYmUzMigodm9pZCAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLX0KLQotc3RhdGljIHU4IHNjY19yZWFkX3NmZl9kbWFfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCi17Ci0JcmV0dXJuICh1OClpbl9iZTMyKCh2b2lkICopKGh3aWYtPmRtYV9iYXNlICsgNCkpOwotfQotCi1zdGF0aWMgdm9pZCBzY2Nfc2V0X2lycShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pCi17Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQotCW91dF9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIsIGN0bCk7Ci0JZWllaW8oKTsKLQlpbl9iZTMyKCh2b2lkICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMWMpKTsKLQllaWVpbygpOwotfQotCi1zdGF0aWMgdm9pZCBzY2NfaWRlX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCi17Ci0JdTE2ICpwdHIgPSAodTE2ICopYWRkcjsKLQl3aGlsZSAoY291bnQtLSkgewotCQkqcHRyKysgPSBsZTE2X3RvX2NwdShpbl9iZTMyKCh2b2lkKilwb3J0KSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzY2NfaWRlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCi17Ci0JdTE2ICpwdHIgPSAodTE2ICopYWRkcjsKLQl3aGlsZSAoY291bnQtLSkgewotCQkqcHRyKysgPSBsZTE2X3RvX2NwdShpbl9iZTMyKCh2b2lkKilwb3J0KSk7Ci0JCSpwdHIrKyA9IGxlMTZfdG9fY3B1KGluX2JlMzIoKHZvaWQqKXBvcnQpKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY19pZGVfb3V0Yih1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0Jb3V0X2JlMzIoKHZvaWQqKXBvcnQsIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZAotc2NjX2lkZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKLXsKLQl1MTYgKnB0ciA9ICh1MTYgKilhZGRyOwotCXdoaWxlIChjb3VudC0tKSB7Ci0JCW91dF9iZTMyKCh2b2lkKilwb3J0LCBjcHVfdG9fbGUxNigqcHRyKyspKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY2NfaWRlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQotewotCXUxNiAqcHRyID0gKHUxNiAqKWFkZHI7Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJb3V0X2JlMzIoKHZvaWQqKXBvcnQsIGNwdV90b19sZTE2KCpwdHIrKykpOwotCQlvdXRfYmUzMigodm9pZCopcG9ydCwgY3B1X3RvX2xlMTYoKnB0cisrKSk7Ci0JfQotfQotCi0vKioKLSAqCXNjY19zZXRfcGlvX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBQSU8gbW9kZQotICoJQGRyaXZlOiBkcml2ZQotICoJQHBpbzogUElPIG1vZGUgbnVtYmVyCi0gKgotICoJTG9hZCB0aGUgdGltaW5nIHNldHRpbmdzIGZvciB0aGlzIGRldmljZSBtb2RlIGludG8gdGhlCi0gKgljb250cm9sbGVyLgotICovCi0KLXN0YXRpYyB2b2lkIHNjY19zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQl1bnNpZ25lZCBsb25nIGN0bF9iYXNlID0gcG9ydHMtPmN0bDsKLQl1bnNpZ25lZCBsb25nIGNja2N0cmxfcG9ydCA9IGN0bF9iYXNlICsgMHhmZjA7Ci0JdW5zaWduZWQgbG9uZyBwaW9zaHRfcG9ydCA9IGN0bF9iYXNlICsgMHgwMDA7Ci0JdW5zaWduZWQgbG9uZyBwaW9jdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAwNDsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQlpbnQgb2Zmc2V0OwotCi0JcmVnID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopY2NrY3RybF9wb3J0KTsKLQlpZiAocmVnICYgQ0NLQ1RSTF9BVEFDTEtPRU4pIHsKLQkJb2Zmc2V0ID0gMTsgLyogMTMzTUh6ICovCi0JfSBlbHNlIHsKLQkJb2Zmc2V0ID0gMDsgLyogMTAwTUh6ICovCi0JfQotCXJlZyA9IEpDSFNUdGJsW29mZnNldF1bcGlvXSA8PCAxNiB8IEpDSEhUdGJsW29mZnNldF1bcGlvXTsKLQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopcGlvc2h0X3BvcnQsIHJlZyk7Ci0JcmVnID0gSkNIQ1R0Ymxbb2Zmc2V0XVtwaW9dOwotCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilwaW9jdF9wb3J0LCByZWcpOwotfQotCi0vKioKLSAqCXNjY19zZXRfZG1hX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBETUEgbW9kZQotICoJQGRyaXZlOiBkcml2ZQotICoJQHNwZWVkOiBETUEgbW9kZQotICoKLSAqCUxvYWQgdGhlIHRpbWluZyBzZXR0aW5ncyBmb3IgdGhpcyBkZXZpY2UgbW9kZSBpbnRvIHRoZQotICoJY29udHJvbGxlci4KLSAqLwotCi1zdGF0aWMgdm9pZCBzY2Nfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQl1bnNpZ25lZCBsb25nIGN0bF9iYXNlID0gcG9ydHMtPmN0bDsKLQl1bnNpZ25lZCBsb25nIGNja2N0cmxfcG9ydCA9IGN0bF9iYXNlICsgMHhmZjA7Ci0JdW5zaWduZWQgbG9uZyBtZG1hY3RfcG9ydCA9IGN0bF9iYXNlICsgMHgwMDg7Ci0JdW5zaWduZWQgbG9uZyBtY3Jjc3RfcG9ydCA9IGN0bF9iYXNlICsgMHgwMGM7Ci0JdW5zaWduZWQgbG9uZyBzZG1hY3RfcG9ydCA9IGN0bF9iYXNlICsgMHgwMTA7Ci0JdW5zaWduZWQgbG9uZyBzY3Jjc3RfcG9ydCA9IGN0bF9iYXNlICsgMHgwMTQ7Ci0JdW5zaWduZWQgbG9uZyB1ZGVudnRfcG9ydCA9IGN0bF9iYXNlICsgMHgwMTg7Ci0JdW5zaWduZWQgbG9uZyB0ZHZoc2VsX3BvcnQgICA9IGN0bF9iYXNlICsgMHgwMjA7Ci0JaW50IGlzX3NsYXZlID0gKCZod2lmLT5kcml2ZXNbMV0gPT0gZHJpdmUpOwotCWludCBvZmZzZXQsIGlkeDsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQl1bnNpZ25lZCBsb25nIGpjYWN0c2VsOwotCi0JcmVnID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopY2NrY3RybF9wb3J0KTsKLQlpZiAocmVnICYgQ0NLQ1RSTF9BVEFDTEtPRU4pIHsKLQkJb2Zmc2V0ID0gMTsgLyogMTMzTUh6ICovCi0JfSBlbHNlIHsKLQkJb2Zmc2V0ID0gMDsgLyogMTAwTUh6ICovCi0JfQotCi0JaWR4ID0gc3BlZWQgLSBYRkVSX1VETUFfMDsKLQotCWpjYWN0c2VsID0gSkNBQ1RTRUx0Ymxbb2Zmc2V0XVtpZHhdOwotCWlmIChpc19zbGF2ZSkgewotCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopc2RtYWN0X3BvcnQsIEpDSERDVHh0Ymxbb2Zmc2V0XVtpZHhdKTsKLQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKXNjcmNzdF9wb3J0LCBKQ1NUV1R4dGJsW29mZnNldF1baWR4XSk7Ci0JCWpjYWN0c2VsID0gamNhY3RzZWwgPDwgMjsKLQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKXRkdmhzZWxfcG9ydCwgKGluX2JlMzIoKHZvaWQgX19pb21lbSAqKXRkdmhzZWxfcG9ydCkgJiB+VERWSFNFTF9TTEFWRSkgfCBqY2FjdHNlbCk7Ci0JfSBlbHNlIHsKLQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKW1kbWFjdF9wb3J0LCBKQ0hEQ1R4dGJsW29mZnNldF1baWR4XSk7Ci0JCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKiltY3Jjc3RfcG9ydCwgSkNTVFdUeHRibFtvZmZzZXRdW2lkeF0pOwotCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopdGR2aHNlbF9wb3J0LCAoaW5fYmUzMigodm9pZCBfX2lvbWVtICopdGR2aHNlbF9wb3J0KSAmIH5URFZIU0VMX01BU1RFUikgfCBqY2FjdHNlbCk7Ci0JfQotCXJlZyA9IEpDVFNTdGJsW29mZnNldF1baWR4XSA8PCAxNiB8IEpDRU5WVHRibFtvZmZzZXRdW2lkeF07Ci0Jb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKXVkZW52dF9wb3J0LCByZWcpOwotfQotCi1zdGF0aWMgdm9pZCBzY2NfZG1hX2hvc3Rfc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCB1bml0ID0gZHJpdmUtPmRuICYgMTsKLQl1OCBkbWFfc3RhdCA9IHNjY19pZGVfaW5iKGh3aWYtPmRtYV9iYXNlICsgNCk7Ci0KLQlpZiAob24pCi0JCWRtYV9zdGF0IHw9ICgxIDw8ICg1ICsgdW5pdCkpOwotCWVsc2UKLQkJZG1hX3N0YXQgJj0gfigxIDw8ICg1ICsgdW5pdCkpOwotCi0Jc2NjX2lkZV9vdXRiKGRtYV9zdGF0LCBod2lmLT5kbWFfYmFzZSArIDQpOwotfQotCi0vKioKLSAqCXNjY19pZGVfZG1hX3NldHVwCS0JYmVnaW4gYSBETUEgcGhhc2UKLSAqCUBkcml2ZTogdGFyZ2V0IGRldmljZQotICoKLSAqCUJ1aWxkIGFuIElERSBETUEgUFJEIChJREUgc3BlYWsgZm9yIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlKQotICoJYW5kIHRoZW4gc2V0IHVwIHRoZSBETUEgdHJhbnNmZXIgcmVnaXN0ZXJzLgotICoKLSAqCVJldHVybnMgMCBvbiBzdWNjZXNzLiBJZiBhIFBJTyBmYWxsYmFjayBpcyByZXF1aXJlZCB0aGVuIDEKLSAqCWlzIHJldHVybmVkLgotICovCi0KLXN0YXRpYyBpbnQgc2NjX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKLQl1bnNpZ25lZCBpbnQgcmVhZGluZzsKLQl1OCBkbWFfc3RhdDsKLQotCWlmIChycV9kYXRhX2RpcihycSkpCi0JCXJlYWRpbmcgPSAwOwotCWVsc2UKLQkJcmVhZGluZyA9IDEgPDwgMzsKLQotCS8qIGZhbGwgYmFjayB0byBwaW8hICovCi0JaWYgKCFpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIFBSRCB0YWJsZSAqLwotCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA4KSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKLQotCS8qIHNwZWNpZnkgci93ICovCi0Jb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9iYXNlLCByZWFkaW5nKTsKLQotCS8qIHJlYWQgRE1BIHN0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCi0JZG1hX3N0YXQgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA0KSk7Ci0KLQkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KLQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgNCksIGRtYV9zdGF0IHwgNik7Ci0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY19kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBkbWFfY21kID0gc2NjX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UpOwotCi0JLyogc3RhcnQgRE1BICovCi0Jc2NjX2lkZV9vdXRiKGRtYV9jbWQgfCAxLCBod2lmLT5kbWFfYmFzZSk7Ci0Jd21iKCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19zY2NfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IGRtYV9zdGF0LCBkbWFfY21kOwotCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7Ci0JLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KLQlkbWFfY21kID0gc2NjX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UpOwotCS8qIHN0b3AgRE1BICovCi0Jc2NjX2lkZV9vdXRiKGRtYV9jbWQgJiB+MSwgaHdpZi0+ZG1hX2Jhc2UpOwotCS8qIGdldCBETUEgc3RhdHVzICovCi0JZG1hX3N0YXQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfYmFzZSArIDQpOwotCS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwotCXNjY19pZGVfb3V0YihkbWFfc3RhdCB8IDYsIGh3aWYtPmRtYV9iYXNlICsgNCk7Ci0JLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCS8qIHZlcmlmeSBnb29kIERNQSBzdGF0dXMgKi8KLQl3bWIoKTsKLQlyZXR1cm4gKGRtYV9zdGF0ICYgNykgIT0gNCA/ICgweDEwIHwgZG1hX3N0YXQpIDogMDsKLX0KLQotLyoqCi0gKglzY2NfZG1hX2VuZAktCVN0b3AgRE1BCi0gKglAZHJpdmU6IElERSBkcml2ZQotICoKLSAqCUNoZWNrIGFuZCBjbGVhciBJTlQgU3RhdHVzIHJlZ2lzdGVyLgotICoJVGhlbiBjYWxsIF9fc2NjX2RtYV9lbmQoKS4KLSAqLwotCi1zdGF0aWMgaW50IHNjY19kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0Jdm9pZCBfX2lvbWVtICpkbWFfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfYmFzZTsKLQl1bnNpZ25lZCBsb25nIGludHN0c19wb3J0ID0gaHdpZi0+ZG1hX2Jhc2UgKyAweDAxNDsKLQl1MzIgcmVnOwotCWludCBkbWFfc3RhdCwgZGF0YV9sb3NzID0gMDsKLQlzdGF0aWMgaW50IHJldHJ5ID0gMDsKLQotCS8qIGVycmF0YSBBMzA4IHdvcmthcm91bmQ6IFN0ZXA1IChjaGVjayBkYXRhIGxvc3MpICovCi0JLyogV2UgZG9uJ3QgY2hlY2sgbm9uIGlkZV9kaXNrIGJlY2F1c2UgaXQgaXMgbGltaXRlZCB0byBVRE1BNCAqLwotCWlmICghKGluX2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKQotCSAgICAgICYgQVRBX0VSUikgJiYKLQkgICAgZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIGRyaXZlLT5jdXJyZW50X3NwZWVkID4gWEZFUl9VRE1BXzQpIHsKLQkJcmVnID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQpOwotCQlpZiAoIShyZWcgJiBJTlRTVFNfQUNURUlOVCkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBvcGVyYXRpb24gZmFpbGVkICh0cmFuc2ZlciBkYXRhIGxvc3MpXG4iLAotCQkJICAgICAgIGRyaXZlLT5uYW1lKTsKLQkJCWRhdGFfbG9zcyA9IDE7Ci0JCQlpZiAocmV0cnkrKykgewotCQkJCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKLQkJCQlpbnQgdW5pdDsKLQkJCQkvKiBFUlJPUl9SRVNFVCBhbmQgZHJpdmUtPmNyY19jb3VudCBhcmUgbmVlZGVkCi0JCQkJICogdG8gcmVkdWNlIERNQSB0cmFuc2ZlciBtb2RlIGluIHJldHJ5IHByb2Nlc3MuCi0JCQkJICovCi0JCQkJaWYgKHJxKQotCQkJCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOwotCQkJCWZvciAodW5pdCA9IDA7IHVuaXQgPCBNQVhfRFJJVkVTOyB1bml0KyspIHsKLQkJCQkJaWRlX2RyaXZlX3QgKmRyaXZlID0gJmh3aWYtPmRyaXZlc1t1bml0XTsKLQkJCQkJZHJpdmUtPmNyY19jb3VudCsrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXdoaWxlICgxKSB7Ci0JCXJlZyA9IGluX2JlMzIoKHZvaWQgX19pb21lbSAqKWludHN0c19wb3J0KTsKLQotCQlpZiAocmVnICYgSU5UU1RTX1NFUlJPUikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFNFUlJPUlxuIiwgU0NDX1BBVEFfTkFNRSk7Ci0JCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19TRVJST1J8SU5UU1RTX0JNU0lOVCk7Ci0KLQkJCW91dF9iZTMyKGRtYV9iYXNlLCBpbl9iZTMyKGRtYV9iYXNlKSAmIH5RQ0hDRF9JT1NfU1MpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAocmVnICYgSU5UU1RTX1BSRVJSKSB7Ci0JCQl1MzIgbWFlYTAsIG1hZWMwOwotCQkJdW5zaWduZWQgbG9uZyBjdGxfYmFzZSA9IGh3aWYtPmNvbmZpZ19kYXRhOwotCi0JCQltYWVhMCA9IGluX2JlMzIoKHZvaWQgX19pb21lbSAqKShjdGxfYmFzZSArIDB4RjUwKSk7Ci0JCQltYWVjMCA9IGluX2JlMzIoKHZvaWQgX19pb21lbSAqKShjdGxfYmFzZSArIDB4RjU0KSk7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQUkVSUiBbYWRkcjoleCBjbWQ6JXhdXG4iLCBTQ0NfUEFUQV9OQU1FLCBtYWVhMCwgbWFlYzApOwotCi0JCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19QUkVSUnxJTlRTVFNfQk1TSU5UKTsKLQotCQkJb3V0X2JlMzIoZG1hX2Jhc2UsIGluX2JlMzIoZG1hX2Jhc2UpICYgflFDSENEX0lPU19TUyk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChyZWcgJiBJTlRTVFNfUkVSUikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc3BvbnNlIEVycm9yXG4iLCBTQ0NfUEFUQV9OQU1FKTsKLQkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX1JFUlJ8SU5UU1RTX0JNU0lOVCk7Ci0KLQkJCW91dF9iZTMyKGRtYV9iYXNlLCBpbl9iZTMyKGRtYV9iYXNlKSAmIH5RQ0hDRF9JT1NfU1MpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAocmVnICYgSU5UU1RTX0lDRVJSKSB7Ci0JCQlvdXRfYmUzMihkbWFfYmFzZSwgaW5fYmUzMihkbWFfYmFzZSkgJiB+UUNIQ0RfSU9TX1NTKTsKLQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElsbGVnYWwgQ29uZmlndXJhdGlvblxuIiwgU0NDX1BBVEFfTkFNRSk7Ci0JCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19JQ0VSUnxJTlRTVFNfQk1TSU5UKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHJlZyAmIElOVFNUU19CTVNJTlQpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnRlcm5hbCBCdXMgRXJyb3JcbiIsIFNDQ19QQVRBX05BTUUpOwotCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWludHN0c19wb3J0LCBJTlRTVFNfQk1TSU5UKTsKLQotCQkJaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHJlZyAmIElOVFNUU19CTUhFKSB7Ci0JCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19CTUhFKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHJlZyAmIElOVFNUU19BQ1RFSU5UKSB7Ci0JCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19BQ1RFSU5UKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHJlZyAmIElOVFNUU19JT0lSUVMpIHsKLQkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX0lPSVJRUyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlkbWFfc3RhdCA9IF9fc2NjX2RtYV9lbmQoZHJpdmUpOwotCWlmIChkYXRhX2xvc3MpCi0JCWRtYV9zdGF0IHw9IDI7IC8qIGVtdWxhdGUgRE1BIGVycm9yICh0byByZXRyeSBjb21tYW5kKSAqLwotCXJldHVybiBkbWFfc3RhdDsKLX0KLQotLyogcmV0dXJucyAxIGlmIGRtYSBpcnEgaXNzdWVkLCAwIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBzY2NfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0JdTMyIGludF9zdGF0ID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2Jhc2UgKyAweDAxNCk7Ci0KLQkvKiBTQ0MgZXJyYXRhIEEyNTIsQTMwOCB3b3JrYXJvdW5kOiBTdGVwNCAqLwotCWlmICgoaW5fYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpCi0JICAgICAmIEFUQV9FUlIpICYmCi0JICAgIChpbnRfc3RhdCAmIElOVFNUU19JTlRSUSkpCi0JCXJldHVybiAxOwotCi0JLyogU0NDIGVycmF0YSBBMzA4IHdvcmthcm91bmQ6IFN0ZXA1IChwb2xsaW5nIElPSVJRUykgKi8KLQlpZiAoaW50X3N0YXQgJiBJTlRTVFNfSU9JUlFTKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTggc2NjX3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggbWFzayA9IGh3aWYtPnVsdHJhX21hc2s7Ci0KLQkvKiBlcnJhdGEgQTMwOCB3b3JrYXJvdW5kOiBsaW1pdCBub24gaWRlX2Rpc2sgZHJpdmUgdG8gVURNQTQgKi8KLQlpZiAoKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykgJiYgKG1hc2sgJiAweEUwKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogbGltaXQgJXMgdG8gVURNQTRcbiIsCi0JCSAgICAgICBTQ0NfUEFUQV9OQU1FLCBkcml2ZS0+bmFtZSk7Ci0JCW1hc2sgPSBBVEFfVURNQTQ7Ci0JfQotCi0JcmV0dXJuIG1hc2s7Ci19Ci0KLS8qKgotICoJc2V0dXBfbW1pb19zY2MJLQltYXAgQ1RSTC9CTUlEIHJlZ2lvbgotICoJQGRldjogUENJIGRldmljZSB3ZSBhcmUgY29uZmlndXJpbmcKLSAqCUBuYW1lOiBkZXZpY2UgbmFtZQotICoKLSAqLwotCi1zdGF0aWMgaW50IHNldHVwX21taW9fc2NjIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQotewotCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKLQl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMSk7Ci0JdW5zaWduZWQgbG9uZyBjdGxfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKTsKLQl1bnNpZ25lZCBsb25nIGRtYV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDEpOwotCXZvaWQgX19pb21lbSAqY3RsX2FkZHI7Ci0Jdm9pZCBfX2lvbWVtICpkbWFfYWRkcjsKLQlpbnQgaSwgcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCWlmIChzY2NfcG9ydHNbaV0uY3RsID09IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPj0gTUFYX0hXSUZTKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoZGV2LCAoMSA8PCAyKSAtIDEsIG5hbWUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IHJlc2VydmUgcmVzb3VyY2VzXG4iLCBuYW1lKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoKGN0bF9hZGRyID0gaW9yZW1hcChjdGxfYmFzZSwgY3RsX3NpemUpKSA9PSBOVUxMKQotCQlnb3RvIGZhaWxfMDsKLQotCWlmICgoZG1hX2FkZHIgPSBpb3JlbWFwKGRtYV9iYXNlLCBkbWFfc2l6ZSkpID09IE5VTEwpCi0JCWdvdG8gZmFpbF8xOwotCi0JcGNpX3NldF9tYXN0ZXIoZGV2KTsKLQlzY2NfcG9ydHNbaV0uY3RsID0gKHVuc2lnbmVkIGxvbmcpY3RsX2FkZHI7Ci0Jc2NjX3BvcnRzW2ldLmRtYSA9ICh1bnNpZ25lZCBsb25nKWRtYV9hZGRyOwotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopICZzY2NfcG9ydHNbaV0pOwotCi0JcmV0dXJuIDE7Ci0KLSBmYWlsXzE6Ci0JaW91bm1hcChjdGxfYWRkcik7Ci0gZmFpbF8wOgotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgaW50IHNjY19pZGVfc2V0dXBfcGNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKLXsKLQlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKLQlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0JaW50IGksIHJjOwotCi0JbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7Ci0JZm9yIChpID0gMDsgaSA8PSA4OyBpKyspCi0JCWh3LmlvX3BvcnRzX2FycmF5W2ldID0gcG9ydHMtPmRtYSArIDB4MjAgKyBpICogNDsKLQlody5pcnEgPSBkZXYtPmlycTsKLQlody5kZXYgPSAmZGV2LT5kZXY7Ci0JaHcuY2hpcHNldCA9IGlkZV9wY2k7Ci0KLQlyYyA9IGlkZV9ob3N0X2FkZChkLCBod3MsICZob3N0KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXBvcnRzLT5ob3N0ID0gaG9zdDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWluaXRfc2V0dXBfc2NjCS0Jc2V0IHVwIGFuIFNDQyBQQVRBIENvbnRyb2xsZXIKLSAqCUBkZXY6IFBDSSBkZXZpY2UKLSAqCUBkOiBJREUgcG9ydCBpbmZvCi0gKgotICoJUGVyZm9ybSB0aGUgaW5pdGlhbCBzZXQgdXAgZm9yIHRoaXMgZGV2aWNlLgotICovCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfc2NjKHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQotewotCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBkbWFfYmFzZTsKLQl1bnNpZ25lZCBsb25nIGNja2N0cmxfcG9ydDsKLQl1bnNpZ25lZCBsb25nIGludG1hc2tfcG9ydDsKLQl1bnNpZ25lZCBsb25nIG1vZGVfcG9ydDsKLQl1bnNpZ25lZCBsb25nIGVjbW9kZV9wb3J0OwotCXVuc2lnbmVkIGxvbmcgZG1hX3N0YXR1c19wb3J0OwotCXUzMiByZWcgPSAwOwotCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzOwotCWludCByYzsKLQotCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMgPSBzZXR1cF9tbWlvX3NjYyhkZXYsIGQtPm5hbWUpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gZW5kOwotCi0JcG9ydHMgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQljdGxfYmFzZSA9IHBvcnRzLT5jdGw7Ci0JZG1hX2Jhc2UgPSBwb3J0cy0+ZG1hOwotCWNja2N0cmxfcG9ydCA9IGN0bF9iYXNlICsgMHhmZjA7Ci0JaW50bWFza19wb3J0ID0gZG1hX2Jhc2UgKyAweDAxMDsKLQltb2RlX3BvcnQgPSBjdGxfYmFzZSArIDB4MDI0OwotCWVjbW9kZV9wb3J0ID0gY3RsX2Jhc2UgKyAweGYwMDsKLQlkbWFfc3RhdHVzX3BvcnQgPSBkbWFfYmFzZSArIDB4MDA0OwotCi0JLyogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiAqLwotCXJlZyA9IDA7Ci0Jb3V0X2JlMzIoKHZvaWQqKWNja2N0cmxfcG9ydCwgcmVnKTsKLQlyZWcgfD0gQ0NLQ1RSTF9BVEFDTEtPRU47Ci0Jb3V0X2JlMzIoKHZvaWQqKWNja2N0cmxfcG9ydCwgcmVnKTsKLQlyZWcgfD0gQ0NLQ1RSTF9MQ0xLRU4gfCBDQ0tDVFJMX09DTEtFTjsKLQlvdXRfYmUzMigodm9pZCopY2NrY3RybF9wb3J0LCByZWcpOwotCXJlZyB8PSBDQ0tDVFJMX0NSU1Q7Ci0Jb3V0X2JlMzIoKHZvaWQqKWNja2N0cmxfcG9ydCwgcmVnKTsKLQotCWZvciAoOzspIHsKLQkJcmVnID0gaW5fYmUzMigodm9pZCopY2NrY3RybF9wb3J0KTsKLQkJaWYgKHJlZyAmIENDS0NUUkxfQ1JTVCkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoNTAwMCk7Ci0JfQotCi0JcmVnIHw9IENDS0NUUkxfQVRBUkVTRVQ7Ci0Jb3V0X2JlMzIoKHZvaWQqKWNja2N0cmxfcG9ydCwgcmVnKTsKLQotCW91dF9iZTMyKCh2b2lkKillY21vZGVfcG9ydCwgRUNNT0RFX1ZBTFVFKTsKLQlvdXRfYmUzMigodm9pZCopbW9kZV9wb3J0LCBNT0RFX0pDVVNGRU4pOwotCW91dF9iZTMyKCh2b2lkKilpbnRtYXNrX3BvcnQsIElOVE1BU0tfTVNLKTsKLQotCXJjID0gc2NjX2lkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7Ci0KLSBlbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBzY2NfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCi17Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmZHJpdmUtPmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKLQkJSElISSA9IDB4RkY7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpCi0JCW91dF9iZTMyKCh2b2lkICopaW9fcG9ydHMtPmRhdGFfYWRkciwKLQkJCSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKLQkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCi0JCXNjY19pZGVfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKLQkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKLQkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKLQkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCi0JCXNjY19pZGVfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKLQkJc2NjX2lkZV9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKLQkJc2NjX2lkZV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCi0JCXNjY19pZGVfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQotCQlzY2NfaWRlX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCi0JCXNjY19pZGVfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKLQkJCSAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQotewotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhID0gKHUxNilpbl9iZTMyKCh2b2lkICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KLQotCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQotCQl0Zi0+ZmVhdHVyZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKLQkJdGYtPm5zZWN0ICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKLQkJdGYtPmxiYWwgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQotCQl0Zi0+bGJhbSAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCi0JCXRmLT5sYmFoICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQotCQl0Zi0+ZGV2aWNlID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwotCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKLQkJCXRmLT5ob2JfZmVhdHVyZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCi0JCQl0Zi0+aG9iX2xiYWwgICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQotCQkJdGYtPmhvYl9sYmFtICAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2NjX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwotCi0JbGVuKys7Ci0KLQlpZiAoZHJpdmUtPmlvXzMyYml0KSB7Ci0JCXNjY19pZGVfaW5zbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0KLQkJaWYgKChsZW4gJiAzKSA+PSAyKQotCQkJc2NjX2lkZV9pbnN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JfSBlbHNlCi0JCXNjY19pZGVfaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY19vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsICBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKLQotCWxlbisrOwotCi0JaWYgKGRyaXZlLT5pb18zMmJpdCkgewotCQlzY2NfaWRlX291dHNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQotCQlpZiAoKGxlbiAmIDMpID49IDIpCi0JCQlzY2NfaWRlX291dHN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JfSBlbHNlCi0JCXNjY19pZGVfb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotfQotCi0vKioKLSAqCWluaXRfbW1pb19pb3BzX3NjYwktCXNldCB1cCB0aGUgaW9wcyBmb3IgTU1JTwotICoJQGh3aWY6IGludGVyZmFjZSB0byBzZXQgdXAKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfbW1pb19pb3BzX3NjYyhpZGVfaHdpZl90ICpod2lmKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0Jc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcG9ydHMtPmRtYTsKLQotCWlkZV9zZXRfaHdpZmRhdGEoaHdpZiwgcG9ydHMpOwotCi0JaHdpZi0+ZG1hX2Jhc2UgPSBkbWFfYmFzZTsKLQlod2lmLT5jb25maWdfZGF0YSA9IHBvcnRzLT5jdGw7Ci19Ci0KLS8qKgotICoJaW5pdF9pb3BzX3NjYwktCXNldCB1cCBpb3BzCi0gKglAaHdpZjogaW50ZXJmYWNlIHRvIHNldCB1cAotICoKLSAqCURvIHRoZSBiYXNpYyBzZXR1cCBmb3IgdGhlIFNDQyBoYXJkd2FyZSBpbnRlcmZhY2UKLSAqCWFuZCB0aGVuIGRvIHRoZSBNTUlPIHNldHVwLgotICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2lvcHNfc2NjKGlkZV9od2lmX3QgKmh3aWYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQotCWh3aWYtPmh3aWZfZGF0YSA9IE5VTEw7Ci0JaWYgKHBjaV9nZXRfZHJ2ZGF0YShkZXYpID09IE5VTEwpCi0JCXJldHVybjsKLQlpbml0X21taW9faW9wc19zY2MoaHdpZik7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNjY19pbml0X2RtYShpZGVfaHdpZl90ICpod2lmLAotCQkJCSAgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCi17Ci0JcmV0dXJuIGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpOwotfQotCi1zdGF0aWMgdTggc2NjX2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQotewotCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKLX0KLQotLyoqCi0gKglpbml0X2h3aWZfc2NjCS0Jc2V0IHVwIGh3aWYKLSAqCUBod2lmOiBpbnRlcmZhY2UgdG8gc2V0IHVwCi0gKgotICoJV2UgZG8gdGhlIGJhc2ljIHNldCB1cCBvZiB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZS4gVGhlIFNDQwotICoJcmVxdWlyZXMgc2V2ZXJhbCBjdXN0b20gaGFuZGxlcnMgc28gd2Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQKLSAqCWlkZSBETUEgaGFuZGxlcnMgYXBwcm9wcmlhdGVseS4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NjYyhpZGVfaHdpZl90ICpod2lmKQotewotCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQotCS8qIFBURVJBREQgKi8KLQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMTgpLCBod2lmLT5kbWF0YWJsZV9kbWEpOwotCi0JaWYgKGluX2JlMzIoKHZvaWQgX19pb21lbSAqKShod2lmLT5jb25maWdfZGF0YSArIDB4ZmYwKSkgJiBDQ0tDVFJMX0FUQUNMS09FTikKLQkJaHdpZi0+dWx0cmFfbWFzayA9IEFUQV9VRE1BNjsgLyogMTMzTUh6ICovCi0JZWxzZQotCQlod2lmLT51bHRyYV9tYXNrID0gQVRBX1VETUE1OyAvKiAxMDBNSHogKi8KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHNjY190cF9vcHMgPSB7Ci0JLmV4ZWNfY29tbWFuZAkJPSBzY2NfZXhlY19jb21tYW5kLAotCS5yZWFkX3N0YXR1cwkJPSBzY2NfcmVhZF9zdGF0dXMsCi0JLnJlYWRfYWx0c3RhdHVzCQk9IHNjY19yZWFkX2FsdHN0YXR1cywKLQkucmVhZF9zZmZfZG1hX3N0YXR1cwk9IHNjY19yZWFkX3NmZl9kbWFfc3RhdHVzLAotCi0JLnNldF9pcnEJCT0gc2NjX3NldF9pcnEsCi0KLQkudGZfbG9hZAkJPSBzY2NfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBzY2NfdGZfcmVhZCwKLQotCS5pbnB1dF9kYXRhCQk9IHNjY19pbnB1dF9kYXRhLAotCS5vdXRwdXRfZGF0YQkJPSBzY2Nfb3V0cHV0X2RhdGEsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzY2NfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9fbW9kZQkJPSBzY2Nfc2V0X3Bpb19tb2RlLAotCS5zZXRfZG1hX21vZGUJCT0gc2NjX3NldF9kbWFfbW9kZSwKLQkudWRtYV9maWx0ZXIJCT0gc2NjX3VkbWFfZmlsdGVyLAotCS5jYWJsZV9kZXRlY3QJCT0gc2NjX2NhYmxlX2RldGVjdCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2NjX2RtYV9vcHMgPSB7Ci0JLmRtYV9ob3N0X3NldAkJPSBzY2NfZG1hX2hvc3Rfc2V0LAotCS5kbWFfc2V0dXAJCT0gc2NjX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCi0JLmRtYV9zdGFydAkJPSBzY2NfZG1hX3N0YXJ0LAotCS5kbWFfZW5kCQk9IHNjY19kbWFfZW5kLAotCS5kbWFfdGVzdF9pcnEJCT0gc2NjX2RtYV90ZXN0X2lycSwKLQkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKLX07Ci0KLSNkZWZpbmUgREVDTEFSRV9TQ0NfREVWKG5hbWVfc3RyKQkJCVwKLSAgewkJCQkJCQlcCi0gICAgICAubmFtZQkJPSBuYW1lX3N0ciwJCQlcCi0gICAgICAuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX3NjYywJCVwKLSAgICAgIC5pbml0X2RtYQkJPSBzY2NfaW5pdF9kbWEsCQkJXAotICAgICAgLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zY2MsCQlcCi0gICAgICAudHBfb3BzCQk9ICZzY2NfdHBfb3BzLAkJXAotICAgICAgLnBvcnRfb3BzCQk9ICZzY2NfcG9ydF9vcHMsCQlcCi0gICAgICAuZG1hX29wcwkJPSAmc2NjX2RtYV9vcHMsCQkJXAotICAgICAgLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAkJXAotICAgICAgLnBpb19tYXNrCQk9IEFUQV9QSU80LAkJCVwKLSAgfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2NjX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQkvKiAwICovIERFQ0xBUkVfU0NDX0RFVigic2NjSURFIiksCi19OwotCi0vKioKLSAqCXNjY19pbml0X29uZQktCXBjaSBsYXllciBkaXNjb3ZlcnkgZW50cnkKLSAqCUBkZXY6IFBDSSBkZXZpY2UKLSAqCUBpZDogaWRlbnQgdGFibGUgZW50cnkKLSAqCi0gKglDYWxsZWQgYnkgdGhlIFBDSSBjb2RlIHdoZW4gaXQgZmluZHMgYW4gU0NDIFBBVEEgY29udHJvbGxlci4KLSAqCVdlIHRoZW4gdXNlIHRoZSBJREUgUENJIGdlbmVyaWMgaGVscGVyIHRvIGRvIG1vc3Qgb2YgdGhlIHdvcmsuCi0gKi8KLQotc3RhdGljIGludCBfX2RldmluaXQgc2NjX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlyZXR1cm4gaW5pdF9zZXR1cF9zY2MoZGV2LCAmc2NjX2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0YV0pOwotfQotCi0vKioKLSAqCXNjY19yZW1vdmUJLQlwY2kgbGF5ZXIgcmVtb3ZlIGVudHJ5Ci0gKglAZGV2OiBQQ0kgZGV2aWNlCi0gKgotICoJQ2FsbGVkIGJ5IHRoZSBQQ0kgY29kZSB3aGVuIGl0IHJlbW92ZXMgYW4gU0NDIFBBVEEgY29udHJvbGxlci4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc2NjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcG9ydHMtPmhvc3Q7Ci0KLQlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7Ci0KLQlpb3VubWFwKCh2b2lkKilwb3J0cy0+ZG1hKTsKLQlpb3VubWFwKCh2b2lkKilwb3J0cy0+Y3RsKTsKLQlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKGRldiwgKDEgPDwgMikgLSAxKTsKLQltZW1zZXQocG9ydHMsIDAsIHNpemVvZigqcG9ydHMpKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjY19wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShUT1NISUJBXzIsIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9TQ0NfQVRBKSwgMCB9LAotCXsgMCwgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2NjX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2NjX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiU0NDIElERSIsCi0JLmlkX3RhYmxlID0gc2NjX3BjaV90YmwsCi0JLnByb2JlID0gc2NjX2luaXRfb25lLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzY2NfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgc2NjX2lkZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZzY2NfcGNpX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHNjY19pZGVfaW5pdCk7Ci0vKiAtLSBObyBleGl0IGNvZGU/Ci1zdGF0aWMgdm9pZCBzY2NfaWRlX2V4aXQodm9pZCkKLXsKLQlpZGVfcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY2NfcGNpX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChzY2NfaWRlX2V4aXQpOwotICovCi0KLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgVG9zaGliYSBTQ0MgSURFIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ2MzQ1NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgbm90aWNlLCBzZWU6Ci0gKgotICogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0dlbkluZm8vTm90aWNlRXhwbGFuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2M0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLQotI2RlZmluZSBEUlZfTkFNRSAiU0dJSU9DNCIKLQotLyogSU9DNCBTcGVjaWZpYyBEZWZpbml0aW9ucyAqLwotI2RlZmluZSBJT0M0X0NNRF9PRkZTRVQJCTB4MTAwCi0jZGVmaW5lIElPQzRfQ1RSTF9PRkZTRVQJMHgxMjAKLSNkZWZpbmUgSU9DNF9ETUFfT0ZGU0VUCQkweDE0MAotI2RlZmluZSBJT0M0X0lOVFJfT0ZGU0VUCTB4MAotCi0jZGVmaW5lIElPQzRfVElNSU5HCQkweDAwCi0jZGVmaW5lIElPQzRfRE1BX1BUUl9MCQkweDAxCi0jZGVmaW5lIElPQzRfRE1BX1BUUl9ICQkweDAyCi0jZGVmaW5lIElPQzRfRE1BX0FERFJfTAkJMHgwMwotI2RlZmluZSBJT0M0X0RNQV9BRERSX0gJCTB4MDQKLSNkZWZpbmUgSU9DNF9CQ19ERVYJCTB4MDUKLSNkZWZpbmUgSU9DNF9CQ19NRU0JCTB4MDYKLSNkZWZpbmUJSU9DNF9ETUFfQ1RSTAkJMHgwNwotI2RlZmluZQlJT0M0X0RNQV9FTkRfQUREUgkweDA4Ci0KLS8qIEJpdHMgaW4gdGhlIElPQzQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJSU9DNF9TX0RNQV9TVEFSVAkweDAxCi0jZGVmaW5lCUlPQzRfU19ETUFfU1RPUAkJMHgwMgotI2RlZmluZQlJT0M0X1NfRE1BX0RJUgkJMHgwNAotI2RlZmluZQlJT0M0X1NfRE1BX0FDVElWRQkweDA4Ci0jZGVmaW5lCUlPQzRfU19ETUFfRVJST1IJMHgxMAotI2RlZmluZQlJT0M0X0FUQV9NRU1FUlIJCTB4MDIKLQotLyogUmVhZC9Xcml0ZSBEaXJlY3Rpb25zICovCi0jZGVmaW5lCUlPQzRfRE1BX1dSSVRFCQkweDA0Ci0jZGVmaW5lCUlPQzRfRE1BX1JFQUQJCTB4MDAKLQotLyogSW50ZXJydXB0IFJlZ2lzdGVyIE9mZnNldHMgKi8KLSNkZWZpbmUgSU9DNF9JTlRSX1JFRwkJMHgwMwotI2RlZmluZQlJT0M0X0lOVFJfU0VUCQkweDA1Ci0jZGVmaW5lCUlPQzRfSU5UUl9DTEVBUgkJMHgwNwotCi0jZGVmaW5lIElPQzRfSURFX0NBQ0hFTElORV9TSVpFCTEyOAotI2RlZmluZSBJT0M0X0NNRF9DVExfQkxLX1NJWkUJMHgyMAotI2RlZmluZSBJT0M0X1NVUFBPUlRFRF9GSVJNV0FSRV9SRVYgNDYKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiB0aW1pbmdfcmVnMDsKLQl1MzIgdGltaW5nX3JlZzE7Ci0JdTMyIGxvd19tZW1fcHRyOwotCXUzMiBoaWdoX21lbV9wdHI7Ci0JdTMyIGxvd19tZW1fYWRkcjsKLQl1MzIgaGlnaF9tZW1fYWRkcjsKLQl1MzIgZGV2X2J5dGVfY291bnQ7Ci0JdTMyIG1lbV9ieXRlX2NvdW50OwotCXUzMiBzdGF0dXM7Ci19IGlvYzRfZG1hX3JlZ3NfdDsKLQotLyogRWFjaCBQaHlzaWNhbCBSZWdpb24gRGVzY3JpcHRvciBFbnRyeSBzaXplIGlzIDE2IGJ5dGVzICgyICogNjQgYml0cykgKi8KLS8qIElPQzQgaGFzIG9ubHkgMSBJREUgY2hhbm5lbCAqLwotI2RlZmluZSBJT0M0X1BSRF9CWVRFUyAgICAgICAxNgotI2RlZmluZSBJT0M0X1BSRF9FTlRSSUVTICAgICAoUEFHRV9TSVpFIC8oNCpJT0M0X1BSRF9CWVRFUykpCi0KLQotc3RhdGljIHZvaWQKLXNnaWlvYzRfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqIGh3LCB1bnNpZ25lZCBsb25nIGRhdGFfcG9ydCwKLQkJCXVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCB1bnNpZ25lZCBsb25nIGlycV9wb3J0KQotewotCXVuc2lnbmVkIGxvbmcgcmVnID0gZGF0YV9wb3J0OwotCWludCBpOwotCi0JLyogUmVnaXN0ZXJzIGFyZSB3b3JkICgzMiBiaXQpIGFsaWduZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDw9IDc7IGkrKykKLQkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnICsgaSAqIDQ7Ci0KLQlpZiAoY3RybF9wb3J0KQotCQlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7Ci0KLQlpZiAoaXJxX3BvcnQpCi0JCWh3LT5pb19wb3J0cy5pcnFfYWRkciA9IGlycV9wb3J0OwotfQotCi1zdGF0aWMgdm9pZAotc2dpaW9jNF9tYXNrcHJvYyhpZGVfZHJpdmVfdCAqIGRyaXZlLCBpbnQgbWFzaykKLXsKLQl3cml0ZWIoQVRBX0RFVkNUTF9PQlMgfCAobWFzayA/IDIgOiAwKSwKLQkgICAgICAgKHZvaWQgX19pb21lbSAqKWRyaXZlLT5od2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci19Ci0KLXN0YXRpYyBpbnQKLXNnaWlvYzRfY2hlY2tpcnEoaWRlX2h3aWZfdCAqIGh3aWYpCi17Ci0JdW5zaWduZWQgbG9uZyBpbnRyX2FkZHIgPQotCQlod2lmLT5pb19wb3J0cy5pcnFfYWRkciArIElPQzRfSU5UUl9SRUcgKiA0OwotCi0JaWYgKCh1OClyZWFkbCgodm9pZCBfX2lvbWVtICopaW50cl9hZGRyKSAmIDB4MDMpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1OCBzZ2lpb2M0X3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKik7Ci0KLXN0YXRpYyBpbnQKLXNnaWlvYzRfY2xlYXJpcnEoaWRlX2RyaXZlX3QgKiBkcml2ZSkKLXsKLQl1MzIgaW50cl9yZWc7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXVuc2lnbmVkIGxvbmcgb3RoZXJfaXIgPSBpb19wb3J0cy0+aXJxX2FkZHIgKyAoSU9DNF9JTlRSX1JFRyA8PCAyKTsKLQotCS8qIENvZGUgdG8gY2hlY2sgZm9yIFBDSSBlcnJvciBjb25kaXRpb25zICovCi0JaW50cl9yZWcgPSByZWFkbCgodm9pZCBfX2lvbWVtICopb3RoZXJfaXIpOwotCWlmIChpbnRyX3JlZyAmIDB4MDMpIHsgLyogVmFsaWQgSU9DNC1JREUgaW50ZXJydXB0ICovCi0JCS8qCi0JCSAqIFVzaW5nIHNnaWlvYzRfcmVhZF9zdGF0dXMgdG8gcmVhZCB0aGUgU3RhdHVzIHJlZ2lzdGVyIGhhcyBhCi0JCSAqIHNpZGUgZWZmZWN0IG9mIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQuICBUaGUgZmlyc3QgcmVhZCBzaG91bGQKLQkJICogY2xlYXIgaXQgaWYgaXQgaXMgc2V0LiAgVGhlIHNlY29uZCByZWFkIHNob3VsZCByZXR1cm4KLQkJICogYSAiY2xlYXIiIHN0YXR1cyBpZiBpdCBnb3QgY2xlYXJlZC4gIElmIG5vdCwgdGhlbiBzcGluCi0JCSAqIGZvciBhIGJpdCB0cnlpbmcgdG8gY2xlYXIgaXQuCi0JCSAqLwotCQl1OCBzdGF0ID0gc2dpaW9jNF9yZWFkX3N0YXR1cyhod2lmKTsKLQkJaW50IGNvdW50ID0gMDsKLQotCQlzdGF0ID0gc2dpaW9jNF9yZWFkX3N0YXR1cyhod2lmKTsKLQkJd2hpbGUgKChzdGF0ICYgQVRBX0JVU1kpICYmIChjb3VudCsrIDwgMTAwKSkgewotCQkJdWRlbGF5KDEpOwotCQkJc3RhdCA9IHNnaWlvYzRfcmVhZF9zdGF0dXMoaHdpZik7Ci0JCX0KLQotCQlpZiAoaW50cl9yZWcgJiAweDAyKSB7Ci0JCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCQkJLyogRXJyb3Igd2hlbiB0cmFuc2ZlcnJpbmcgRE1BIGRhdGEgb24gUENJIGJ1cyAqLwotCQkJdTMyIHBjaV9lcnJfYWRkcl9sb3csIHBjaV9lcnJfYWRkcl9oaWdoLAotCQkJICAgIHBjaV9zdGF0X2NtZF9yZWc7Ci0KLQkJCXBjaV9lcnJfYWRkcl9sb3cgPQotCQkJCXJlYWRsKCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+aXJxX2FkZHIpOwotCQkJcGNpX2Vycl9hZGRyX2hpZ2ggPQotCQkJCXJlYWRsKCh2b2lkIF9faW9tZW0gKikoaW9fcG9ydHMtPmlycV9hZGRyICsgNCkpOwotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsCi0JCQkJCSAgICAgICZwY2lfc3RhdF9jbWRfcmVnKTsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlcyglcykgOiBQQ0kgQnVzIEVycm9yIHdoZW4gZG9pbmcgRE1BOiIKLQkJCQkgICAiIHN0YXR1cy1jbWQgcmVnIGlzIDB4JXhcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLCBwY2lfc3RhdF9jbWRfcmVnKTsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlcyglcykgOiBQQ0kgRXJyb3IgQWRkcmVzcyBpcyAweCV4JXhcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLAotCQkJICAgICAgIHBjaV9lcnJfYWRkcl9oaWdoLCBwY2lfZXJyX2FkZHJfbG93KTsKLQkJCS8qIENsZWFyIHRoZSBQQ0kgRXJyb3IgaW5kaWNhdG9yICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsIDB4MDAwMDAxNDYpOwotCQl9Ci0KLQkJLyogQ2xlYXIgdGhlIEludGVycnVwdCwgRXJyb3IgYml0cyBvbiB0aGUgSU9DNCAqLwotCQl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKW90aGVyX2lyKTsKLQotCQlpbnRyX3JlZyA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilvdGhlcl9pcik7Ci0JfQotCi0JcmV0dXJuIGludHJfcmVnICYgMzsKLX0KLQotc3RhdGljIHZvaWQgc2dpaW9jNF9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKLQl1bnNpZ25lZCBsb25nIGlvYzRfZG1hX2FkZHIgPSBod2lmLT5kbWFfYmFzZSArIElPQzRfRE1BX0NUUkwgKiA0OwotCXVuc2lnbmVkIGludCByZWcgPSByZWFkbCgodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7Ci0JdW5zaWduZWQgaW50IHRlbXBfcmVnID0gcmVnIHwgSU9DNF9TX0RNQV9TVEFSVDsKLQotCXdyaXRlbCh0ZW1wX3JlZywgKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwotfQotCi1zdGF0aWMgdTMyCi1zZ2lpb2M0X2lkZV9kbWFfc3RvcChpZGVfaHdpZl90ICpod2lmLCB1NjQgZG1hX2Jhc2UpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2M0X2RtYV9hZGRyID0gZG1hX2Jhc2UgKyBJT0M0X0RNQV9DVFJMICogNDsKLQl1MzIJaW9jNF9kbWE7Ci0JaW50CWNvdW50OwotCi0JY291bnQgPSAwOwotCWlvYzRfZG1hID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwotCXdoaWxlICgoaW9jNF9kbWEgJiBJT0M0X1NfRE1BX1NUT1ApICYmIChjb3VudCsrIDwgMjAwKSkgewotCQl1ZGVsYXkoMSk7Ci0JCWlvYzRfZG1hID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwotCX0KLQlyZXR1cm4gaW9jNF9kbWE7Ci19Ci0KLS8qIFN0b3BzIHRoZSBJT0M0IERNQSBFbmdpbmUgKi8KLXN0YXRpYyBpbnQgc2dpaW9jNF9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1MzIgaW9jNF9kbWEsIGJjX2RldiwgYmNfbWVtLCBudW0sIHZhbGlkID0gMCwgY250ID0gMDsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGh3aWYtPmRtYV9iYXNlOwotCWludCBkbWFfc3RhdCA9IDA7Ci0JdW5zaWduZWQgbG9uZyAqZW5kaW5nX2RtYSA9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7Ci0KLQl3cml0ZWwoSU9DNF9TX0RNQV9TVE9QLCAodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQpKTsKLQotCWlvYzRfZG1hID0gc2dpaW9jNF9pZGVfZG1hX3N0b3AoaHdpZiwgZG1hX2Jhc2UpOwotCi0JaWYgKGlvYzRfZG1hICYgSU9DNF9TX0RNQV9TVE9QKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzKCVzKTogSU9DNCBETUEgU1RPUCBiaXQgaXMgc3RpbGwgMSA6IgotCQkgICAgICAgImlvYzRfZG1hX3JlZyAweCV4XG4iLAotCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLCBpb2M0X2RtYSk7Ci0JCWRtYV9zdGF0ID0gMTsKLQl9Ci0KLQkvKgotCSAqIFRoZSBJT0M0IHdpbGwgRE1BIDEncyB0byB0aGUgZW5kaW5nIGRtYSBhcmVhIHRvIGluZGljYXRlIHRoYXQKLQkgKiBwcmV2aW91cyBkYXRhIERNQSBpcyBjb21wbGV0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgcmVsYXhlZAotCSAqIG9yZGVyaW5nIGJldHdlZW4gcmVnaXN0ZXIgcmVhZHMgYW5kIERNQSB3cml0ZXMgb24gdGhlIEFsdGl4LgotCSAqLwotCXdoaWxlICgoY250KysgPCAyMDApICYmICghdmFsaWQpKSB7Ci0JCWZvciAobnVtID0gMDsgbnVtIDwgMTY7IG51bSsrKSB7Ci0JCQlpZiAoZW5kaW5nX2RtYVtudW1dKSB7Ci0JCQkJdmFsaWQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXVkZWxheSgxKTsKLQl9Ci0JaWYgKCF2YWxpZCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSA6IERNQSBpbmNvbXBsZXRlXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIGRyaXZlLT5uYW1lKTsKLQkJZG1hX3N0YXQgPSAxOwotCX0KLQotCWJjX2RldiA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0JDX0RFViAqIDQpKTsKLQliY19tZW0gPSByZWFkbCgodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9CQ19NRU0gKiA0KSk7Ci0KLQlpZiAoKGJjX2RldiAmIDB4MDFGRikgfHwgKGJjX21lbSAmIDB4MUZGKSkgewotCQlpZiAoYmNfZGV2ID4gYmNfbWVtICsgOCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzKCVzKTogV0FSTklORyEhIGJ5dGVfY291bnRfZGV2ICVkICIKLQkJCSAgICAgICAiIT0gYnl0ZV9jb3VudF9tZW0gJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLCBiY19kZXYsIGJjX21lbSk7Ci0JCX0KLQl9Ci0KLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KLQlyZXR1cm4gZG1hX3N0YXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNnaWlvYzRfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCi17Ci19Ci0KLS8qIHJldHVybnMgMSBpZiBkbWEgaXJxIGlzc3VlZCwgMCBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgc2dpaW9jNF9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXJldHVybiBzZ2lpb2M0X2NoZWNraXJxKEhXSUYoZHJpdmUpKTsKLX0KLQotc3RhdGljIHZvaWQgc2dpaW9jNF9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCi17Ci0JaWYgKCFvbikKLQkJc2dpaW9jNF9jbGVhcmlycShkcml2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZ2lpb2M0X3Jlc2V0cHJvYyhpZGVfZHJpdmVfdCAqIGRyaXZlKQotewotCXNnaWlvYzRfZG1hX2VuZChkcml2ZSk7Ci0Jc2dpaW9jNF9jbGVhcmlycShkcml2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZ2lpb2M0X2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqIGRyaXZlKQotewotCXNnaWlvYzRfcmVzZXRwcm9jKGRyaXZlKTsKLQotCWlkZV9kbWFfbG9zdF9pcnEoZHJpdmUpOwotfQotCi1zdGF0aWMgdTggc2dpaW9jNF9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyOwotCXU4IHJlZyA9ICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKLQotCWlmICgocG9ydCAmIDB4RkZGKSA9PSAweDExQykgewkvKiBTdGF0dXMgcmVnaXN0ZXIgb2YgSU9DNCAqLwotCQlpZiAoIShyZWcgJiBBVEFfQlVTWSkpIHsgLyogTm90IGJ1c3kuLi4gY2hlY2sgZm9yIGludGVycnVwdCAqLwotCQkJdW5zaWduZWQgbG9uZyBvdGhlcl9pciA9IHBvcnQgLSAweDExMDsKLQkJCXVuc2lnbmVkIGludCBpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwotCi0JCQkvKiBDbGVhciB0aGUgSW50ZXJydXB0LCBFcnJvciBiaXRzIG9uIHRoZSBJT0M0ICovCi0JCQlpZiAoaW50cl9yZWcgJiAweDAzKSB7Ci0JCQkJd3JpdGVsKDB4MDMsICh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwotCQkJCWludHJfcmVnID0gKHUzMikgcmVhZGwoKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmVnOwotfQotCi0vKiBDcmVhdGVzIGEgZG1hIG1hcCBmb3IgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QgZW50cmllcyAqLwotc3RhdGljIGludCBfX2RldmluaXQKLWlkZV9kbWFfc2dpaW9jNChpZGVfaHdpZl90ICpod2lmLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSArIElPQzRfRE1BX09GRlNFVDsKLQl2b2lkIF9faW9tZW0gKnZpcnRfZG1hX2Jhc2U7Ci0JaW50IG51bV9wb3J0cyA9IHNpemVvZiAoaW9jNF9kbWFfcmVnc190KTsKLQl2b2lkICpwYWQ7Ci0KLQlpZiAoZG1hX2Jhc2UgPT0gMCkKLQkJcmV0dXJuIC0xOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiICAgICVzOiBNTUlPLURNQVxuIiwgaHdpZi0+bmFtZSk7Ci0KLQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMsIGh3aWYtPm5hbWUpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyglcykgLS0gRVJST1I6IGFkZHJlc3NlcyAweCUwOGx4IHRvIDB4JTA4bHggIgotCQkgICAgICAgImFscmVhZHkgaW4gdXNlXG4iLCBfX2Z1bmNfXywgaHdpZi0+bmFtZSwKLQkJICAgICAgIGRtYV9iYXNlLCBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JdmlydF9kbWFfYmFzZSA9IGlvcmVtYXAoZG1hX2Jhc2UsIG51bV9wb3J0cyk7Ci0JaWYgKHZpcnRfZG1hX2Jhc2UgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSAtLSBFUlJPUjogdW5hYmxlIHRvIG1hcCBhZGRyZXNzZXMgIgotCQkgICAgICAgIjB4JWx4IHRvIDB4JWx4XG4iLCBfX2Z1bmNfXywgaHdpZi0+bmFtZSwKLQkJICAgICAgIGRtYV9iYXNlLCBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOwotCQlnb3RvIGRtYV9yZW1hcF9mYWlsdXJlOwotCX0KLQlod2lmLT5kbWFfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2RtYV9iYXNlOwotCi0JaHdpZi0+c2dfbWF4X25lbnRzID0gSU9DNF9QUkRfRU5UUklFUzsKLQotCWh3aWYtPnByZF9tYXhfbmVudHMgPSBJT0M0X1BSRF9FTlRSSUVTOwotCWh3aWYtPnByZF9lbnRfc2l6ZSA9IElPQzRfUFJEX0JZVEVTOwotCi0JaWYgKGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpKQotCQlnb3RvIGRtYV9wY2lfYWxsb2NfZmFpbHVyZTsKLQotCXBhZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgSU9DNF9JREVfQ0FDSEVMSU5FX1NJWkUsCi0JCQkJICAgKGRtYV9hZGRyX3QgKikmaHdpZi0+ZXh0cmFfYmFzZSk7Ci0JaWYgKHBhZCkgewotCQlpZGVfc2V0X2h3aWZkYXRhKGh3aWYsIHBhZCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaHdpZik7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSAtLSBFUlJPUjogVW5hYmxlIHRvIGFsbG9jYXRlIERNQSBtYXBzXG4iLAotCSAgICAgICBfX2Z1bmNfXywgaHdpZi0+bmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNoYW5naW5nIGZyb20gRE1BIHRvIFBJTyBtb2RlIiwgaHdpZi0+bmFtZSk7Ci0KLWRtYV9wY2lfYWxsb2NfZmFpbHVyZToKLQlpb3VubWFwKHZpcnRfZG1hX2Jhc2UpOwotCi1kbWFfcmVtYXBfZmFpbHVyZToKLQlyZWxlYXNlX21lbV9yZWdpb24oZG1hX2Jhc2UsIG51bV9wb3J0cyk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qIEluaXRpYWxpemVzIHRoZSBJT0M0IERNQSBFbmdpbmUgKi8KLXN0YXRpYyB2b2lkCi1zZ2lpb2M0X2NvbmZpZ3VyZV9mb3JfZG1hKGludCBkbWFfZGlyZWN0aW9uLCBpZGVfZHJpdmVfdCAqIGRyaXZlKQotewotCXUzMiBpb2M0X2RtYTsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGh3aWYtPmRtYV9iYXNlOwotCXVuc2lnbmVkIGxvbmcgaW9jNF9kbWFfYWRkciA9IGRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQ7Ci0JdTMyIGRtYV9hZGRyLCBlbmRpbmdfZG1hX2FkZHI7Ci0KLQlpb2M0X2RtYSA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilpb2M0X2RtYV9hZGRyKTsKLQotCWlmIChpb2M0X2RtYSAmIElPQzRfU19ETUFfQUNUSVZFKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSIlcyglcyk6V2FybmluZyEhIERNQSBmcm9tIHByZXZpb3VzIHRyYW5zZmVyIHdhcyBzdGlsbCBhY3RpdmVcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZHJpdmUtPm5hbWUpOwotCQl3cml0ZWwoSU9DNF9TX0RNQV9TVE9QLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7Ci0JCWlvYzRfZG1hID0gc2dpaW9jNF9pZGVfZG1hX3N0b3AoaHdpZiwgZG1hX2Jhc2UpOwotCi0JCWlmIChpb2M0X2RtYSAmIElPQzRfU19ETUFfU1RPUCkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlcyglcykgOiBJT0M0IERtYSBTVE9QIGJpdCBpcyBzdGlsbCAxXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBkcml2ZS0+bmFtZSk7Ci0JfQotCi0JaW9jNF9kbWEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7Ci0JaWYgKGlvYzRfZG1hICYgSU9DNF9TX0RNQV9FUlJPUikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXMoJXMpIDogV2FybmluZyEhIC0gRE1BIEVycm9yIGR1cmluZyBQcmV2aW91cyIKLQkJICAgICAgICIgdHJhbnNmZXIgfCBzdGF0dXMgMHgleFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBkcml2ZS0+bmFtZSwgaW9jNF9kbWEpOwotCQl3cml0ZWwoSU9DNF9TX0RNQV9TVE9QLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7Ci0JCWlvYzRfZG1hID0gc2dpaW9jNF9pZGVfZG1hX3N0b3AoaHdpZiwgZG1hX2Jhc2UpOwotCi0JCWlmIChpb2M0X2RtYSAmIElPQzRfU19ETUFfU1RPUCkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlcyglcykgOiBJT0M0IERNQSBTVE9QIGJpdCBpcyBzdGlsbCAxXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBkcml2ZS0+bmFtZSk7Ci0JfQotCi0JLyogQWRkcmVzcyBvZiB0aGUgU2NhdHRlciBHYXRoZXIgTGlzdCAqLwotCWRtYV9hZGRyID0gY3B1X3RvX2xlMzIoaHdpZi0+ZG1hdGFibGVfZG1hKTsKLQl3cml0ZWwoZG1hX2FkZHIsICh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0RNQV9QVFJfTCAqIDQpKTsKLQotCS8qIEFkZHJlc3Mgb2YgdGhlIEVuZGluZyBETUEgKi8KLQltZW1zZXQoaWRlX2dldF9od2lmZGF0YShod2lmKSwgMCwgSU9DNF9JREVfQ0FDSEVMSU5FX1NJWkUpOwotCWVuZGluZ19kbWFfYWRkciA9IGNwdV90b19sZTMyKGh3aWYtPmV4dHJhX2Jhc2UpOwotCXdyaXRlbChlbmRpbmdfZG1hX2FkZHIsICh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0RNQV9FTkRfQUREUiAqIDQpKTsKLQotCXdyaXRlbChkbWFfZGlyZWN0aW9uLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7Ci0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7Ci19Ci0KLS8qIElPQzQgU2NhdHRlciBHYXRoZXIgbGlzdCBGb3JtYXQgCQkJCQkgKi8KLS8qIDEyOCBCaXQgZW50cmllcyB0byBzdXBwb3J0IDY0IGJpdCBhZGRyZXNzZXMgaW4gdGhlIGZ1dHVyZQkJICovCi0vKiBUaGUgU2NhdHRlciBHYXRoZXIgbGlzdCBFbnRyeSBzaG91bGQgYmUgaW4gdGhlIEJJRy1FTkRJQU4gRm9ybWF0CSAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiB8IFVwcGVyIDMyIGJpdHMgLSBaZXJvICAgICAgICAgICB8CSAJTG93ZXIgMzIgYml0cy0gYWRkcmVzcyB8ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIHwgVXBwZXIgMzIgYml0cyAtIFplcm8JICAgIHxFT0x8IDE1IHVudXNlZCAgICAgfCAxNiBCaXQgTGVuZ3RofCAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBDcmVhdGVzIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0LCBETUEgVGFibGUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXNnaWlvYzRfYnVpbGRfZG1hX3RhYmxlKGlkZV9kcml2ZV90ICogZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGRkaXIpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXVuc2lnbmVkIGludCAqdGFibGUgPSBod2lmLT5kbWF0YWJsZV9jcHU7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMCwgaSA9IDE7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7CS8qIHNnbGlzdCBvZiBsZW5ndGggWmVybyAqLwotCi0Jc2cgPSBod2lmLT5zZ190YWJsZTsKLQl3aGlsZSAoaSAmJiBzZ19kbWFfbGVuKHNnKSkgewotCQlkbWFfYWRkcl90IGN1cl9hZGRyOwotCQlpbnQgY3VyX2xlbjsKLQkJY3VyX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCWN1cl9sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQotCQl3aGlsZSAoY3VyX2xlbikgewotCQkJaWYgKGNvdW50KysgPj0gSU9DNF9QUkRfRU5UUklFUykgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIiVzOiBETUEgdGFibGUgdG9vIHNtYWxsXG4iLAotCQkJCSAgICAgICBkcml2ZS0+bmFtZSk7Ci0JCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7Ci0JCQl9IGVsc2UgewotCQkJCXUzMiBiY291bnQgPQotCQkJCSAgICAweDEwMDAwIC0gKGN1cl9hZGRyICYgMHhmZmZmKTsKLQotCQkJCWlmIChiY291bnQgPiBjdXJfbGVuKQotCQkJCQliY291bnQgPSBjdXJfbGVuOwotCi0JCQkJLyogcHV0IHRoZSBhZGRyLCBsZW5ndGggaW4KLQkJCQkgKiB0aGUgSU9DNCBkbWEtdGFibGUgZm9ybWF0ICovCi0JCQkJKnRhYmxlID0gMHgwOwotCQkJCXRhYmxlKys7Ci0JCQkJKnRhYmxlID0gY3B1X3RvX2JlMzIoY3VyX2FkZHIpOwotCQkJCXRhYmxlKys7Ci0JCQkJKnRhYmxlID0gMHgwOwotCQkJCXRhYmxlKys7Ci0KLQkJCQkqdGFibGUgPSBjcHVfdG9fYmUzMihiY291bnQpOwotCQkJCXRhYmxlKys7Ci0KLQkJCQljdXJfYWRkciArPSBiY291bnQ7Ci0JCQkJY3VyX2xlbiAtPSBiY291bnQ7Ci0JCQl9Ci0JCX0KLQotCQlzZyA9IHNnX25leHQoc2cpOwotCQlpLS07Ci0JfQotCi0JaWYgKGNvdW50KSB7Ci0JCXRhYmxlLS07Ci0JCSp0YWJsZSB8PSBjcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKLQkJcmV0dXJuIGNvdW50OwotCX0KLQotdXNlX3Bpb19pbnN0ZWFkOgotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQotCXJldHVybiAwOwkJLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCi19Ci0KLXN0YXRpYyBpbnQgc2dpaW9jNF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwotCWludCBkZGlyOwotCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJZGRpciA9IFBDSV9ETUFfVE9ERVZJQ0U7Ci0JZWxzZQotCQlkZGlyID0gUENJX0RNQV9GUk9NREVWSUNFOwotCi0JaWYgKCEoY291bnQgPSBzZ2lpb2M0X2J1aWxkX2RtYV90YWJsZShkcml2ZSwgcnEsIGRkaXIpKSkgewotCQkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCi0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJLyogV3JpdGVzIFRPIHRoZSBJT0M0IEZST00gTWFpbiBNZW1vcnkgKi8KLQkJZGRpciA9IElPQzRfRE1BX1JFQUQ7Ci0JZWxzZQotCQkvKiBXcml0ZXMgRlJPTSB0aGUgSU9DNCBUTyBNYWluIE1lbW9yeSAqLwotCQlkZGlyID0gSU9DNF9ETUFfV1JJVEU7Ci0KLQlzZ2lpb2M0X2NvbmZpZ3VyZV9mb3JfZG1hKGRkaXIsIGRyaXZlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgc2dpaW9jNF90cF9vcHMgPSB7Ci0JLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAotCS5yZWFkX3N0YXR1cwkJPSBzZ2lpb2M0X3JlYWRfc3RhdHVzLAotCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCi0JLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cywKLQotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCi0JLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCi0KLQkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKLQkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgc2dpaW9jNF9wb3J0X29wcyA9IHsKLQkuc2V0X2RtYV9tb2RlCQk9IHNnaWlvYzRfc2V0X2RtYV9tb2RlLAotCS8qIHJlc2V0IERNQSBlbmdpbmUsIGNsZWFyIElSUXMgKi8KLQkucmVzZXRwcm9jCQk9IHNnaWlvYzRfcmVzZXRwcm9jLAotCS8qIG1hc2sgb24vb2ZmIE5JRU4gcmVnaXN0ZXIgKi8KLQkubWFza3Byb2MJCT0gc2dpaW9jNF9tYXNrcHJvYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2dpaW9jNF9kbWFfb3BzID0gewotCS5kbWFfaG9zdF9zZXQJCT0gc2dpaW9jNF9kbWFfaG9zdF9zZXQsCi0JLmRtYV9zZXR1cAkJPSBzZ2lpb2M0X2RtYV9zZXR1cCwKLQkuZG1hX3N0YXJ0CQk9IHNnaWlvYzRfZG1hX3N0YXJ0LAotCS5kbWFfZW5kCQk9IHNnaWlvYzRfZG1hX2VuZCwKLQkuZG1hX3Rlc3RfaXJxCQk9IHNnaWlvYzRfZG1hX3Rlc3RfaXJxLAotCS5kbWFfbG9zdF9pcnEJCT0gc2dpaW9jNF9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzZ2lpb2M0X3BvcnRfaW5mbyBfX2RldmluaXRkYXRhID0gewotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuY2hpcHNldAkJPSBpZGVfcGNpLAotCS5pbml0X2RtYQkJPSBpZGVfZG1hX3NnaWlvYzQsCi0JLnRwX29wcwkJCT0gJnNnaWlvYzRfdHBfb3BzLAotCS5wb3J0X29wcwkJPSAmc2dpaW9jNF9wb3J0X29wcywKLQkuZG1hX29wcwkJPSAmc2dpaW9jNF9kbWFfb3BzLAotCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPLAotCS5td2RtYV9tYXNrCQk9IEFUQV9NV0RNQTJfT05MWSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1zZ2lpb2M0X2lkZV9zZXR1cF9wY2lfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBjbWRfYmFzZSwgaXJxcG9ydDsKLQl1bnNpZ25lZCBsb25nIGJhcjAsIGNtZF9waHlzX2Jhc2UsIGN0bDsKLQl2b2lkIF9faW9tZW0gKnZpcnRfYmFzZTsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7Ci0JaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwotCXN0cnVjdCBpZGVfcG9ydF9pbmZvIGQgPSBzZ2lpb2M0X3BvcnRfaW5mbzsKLQlpbnQgcmM7Ci0KLQkvKiAgR2V0IHRoZSBDbWRCbGsgYW5kIEN0cmxCbGsgQmFzZSBSZWdpc3RlcnMgKi8KLQliYXIwID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7Ci0JdmlydF9iYXNlID0gaW9yZW1hcChiYXIwLCBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwotCWlmICh2aXJ0X2Jhc2UgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gcmVtYXAgQkFSIDAgYWRkcmVzczogMHglbHhcbiIsCi0JCQkJRFJWX05BTUUsIGJhcjApOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JY21kX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgdmlydF9iYXNlICsgSU9DNF9DTURfT0ZGU0VUOwotCWN0bCA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2Jhc2UgKyBJT0M0X0NUUkxfT0ZGU0VUOwotCWlycXBvcnQgPSAodW5zaWduZWQgbG9uZykgdmlydF9iYXNlICsgSU9DNF9JTlRSX09GRlNFVDsKLQotCWNtZF9waHlzX2Jhc2UgPSBiYXIwICsgSU9DNF9DTURfT0ZGU0VUOwotCWlmIChyZXF1ZXN0X21lbV9yZWdpb24oY21kX3BoeXNfYmFzZSwgSU9DNF9DTURfQ1RMX0JMS19TSVpFLAotCQkJICAgICAgIERSVl9OQU1FKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgJXMgLS0gRVJST1I6IGFkZHJlc3NlcyAweCUwOGx4IHRvIDB4JTA4bHggIgotCQkgICAgICAgImFscmVhZHkgaW4gdXNlXG4iLCBEUlZfTkFNRSwgcGNpX25hbWUoZGV2KSwKLQkJICAgICAgIGNtZF9waHlzX2Jhc2UsIGNtZF9waHlzX2Jhc2UgKyBJT0M0X0NNRF9DVExfQkxLX1NJWkUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCS8qIEluaXRpYWxpemUgdGhlIElPIHJlZ2lzdGVycyAqLwotCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwotCXNnaWlvYzRfaW5pdF9od2lmX3BvcnRzKCZodywgY21kX2Jhc2UsIGN0bCwgaXJxcG9ydCk7Ci0JaHcuaXJxID0gZGV2LT5pcnE7Ci0JaHcuY2hpcHNldCA9IGlkZV9wY2k7Ci0JaHcuZGV2ID0gJmRldi0+ZGV2OwotCi0JLyogSW5pdGlhbGl6aW5nIGNoaXBzZXQgSVJRIFJlZ2lzdGVycyAqLwotCXdyaXRlbCgweDAzLCAodm9pZCBfX2lvbWVtICopKGlycXBvcnQgKyBJT0M0X0lOVFJfU0VUICogNCkpOwotCi0JaG9zdCA9IGlkZV9ob3N0X2FsbG9jKCZkLCBod3MpOwotCWlmIChob3N0ID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlyYyA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsICZkLCBod3MpOwotCWlmIChyYykKLQkJZ290byBlcnJfZnJlZTsKLQotCXJldHVybiAwOwotZXJyX2ZyZWU6Ci0JaWRlX2hvc3RfZnJlZShob3N0KTsKLWVycjoKLQlyZWxlYXNlX21lbV9yZWdpb24oY21kX3BoeXNfYmFzZSwgSU9DNF9DTURfQ1RMX0JMS19TSVpFKTsKLQlpb3VubWFwKHZpcnRfYmFzZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdAotcGNpX2luaXRfc2dpaW9jNChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCByZXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogSURFIGNvbnRyb2xsZXIgYXQgUENJIHNsb3QgJXMsIHJldmlzaW9uICVkXG4iLAotCQkJIERSVl9OQU1FLCBwY2lfbmFtZShkZXYpLCBkZXYtPnJldmlzaW9uKTsKLQotCWlmIChkZXYtPnJldmlzaW9uIDwgSU9DNF9TVVBQT1JURURfRklSTVdBUkVfUkVWKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU2tpcHBpbmcgJXMgSURFIGNvbnRyb2xsZXIgaW4gc2xvdCAlczogIgotCQkJCSJmaXJtd2FyZSBpcyBvYnNvbGV0ZSAtIHBsZWFzZSB1cGdyYWRlIHRvICIKLQkJCQkicmV2aXNpb240NiBvciBoaWdoZXJcbiIsCi0JCQkJRFJWX05BTUUsIHBjaV9uYW1lKGRldikpOwotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIG91dDsKLQl9Ci0JcmV0ID0gc2dpaW9jNF9pZGVfc2V0dXBfcGNpX2RldmljZShkZXYpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLWludAotaW9jNF9pZGVfYXR0YWNoX29uZShzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkKQotewotCS8qIFBDSS1SVCBkb2VzIG5vdCBicmluZyBvdXQgSURFIGNvbm5lY3Rpb24uCi0JICogRG8gbm90IGF0dGFjaCB0byB0aGlzIHBhcnRpY3VsYXIgSU9DNC4KLQkgKi8KLQlpZiAoaWRkLT5pZGRfdmFyaWFudCA9PSBJT0M0X1ZBUklBTlRfUENJX1JUKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBwY2lfaW5pdF9zZ2lpb2M0KGlkZC0+aWRkX3BkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IGlvYzRfc3VibW9kdWxlIGlvYzRfaWRlX3N1Ym1vZHVsZSA9IHsKLQkuaXNfbmFtZSA9ICJJT0M0X2lkZSIsCi0JLmlzX293bmVyID0gVEhJU19NT0RVTEUsCi0JLmlzX3Byb2JlID0gaW9jNF9pZGVfYXR0YWNoX29uZSwKLS8qCS5pc19yZW1vdmUgPSBpb2M0X2lkZV9yZW1vdmVfb25lLAkqLwotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW9jNF9pZGVfaW5pdCh2b2lkKQotewotCXJldHVybiBpb2M0X3JlZ2lzdGVyX3N1Ym1vZHVsZSgmaW9jNF9pZGVfc3VibW9kdWxlKTsKLX0KLQotbGF0ZV9pbml0Y2FsbChpb2M0X2lkZV9pbml0KTsgLyogQ2FsbCBvbmx5IGFmdGVyIElERSBpbml0IGlzIGRvbmUgKi8KLQotTU9EVUxFX0FVVEhPUigiQW5pa2V0IE1hbGF0cHVyZS9KZXJlbXkgSGlnZG9uIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIklERSBQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgU0dJIElPQzQgQmFzZS1JTyBDYXJkIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0ZmFmOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMglBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDAzCQlSZWQgSGF0IDxhbGFuQHJlZGhhdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOAlNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOAlCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Ci0gKgotICogIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoKLSAqICBEb2N1bWVudGF0aW9uIGZvciBDTUQ2ODA6Ci0gKiAgaHR0cDovL2drZXJuZWwuc291cmNlZm9yZ2UubmV0L3NwZWNzL3NpaS9zaWktMDY4MGEtdjEuMzEucGRmLmJ6MgotICoKLSAqICBEb2N1bWVudGF0aW9uIGZvciBTaUkgMzExMjoKLSAqICBodHRwOi8vZ2tlcm5lbC5zb3VyY2Vmb3JnZS5uZXQvc3BlY3Mvc2lpLzMxMTJBX1NpSS1EUy0wMDk1LUIyLnBkZi5iejIKLSAqCi0gKiAgRXJyYXRhIGFuZCBvdGhlciBkb2N1bWVudGF0aW9uIG9ubHkgYXZhaWxhYmxlIHVuZGVyIE5EQS4KLSAqCi0gKgotICogIEZBUSBJdGVtczoKLSAqCUlmIHlvdSBhcmUgdXNpbmcgTWFydmVsbCBTQVRBLUlERSBhZGFwdGVycyB3aXRoIE1heHRvciBkcml2ZXMKLSAqCWVuc3VyZSB0aGUgc3lzdGVtIGlzIHNldCB1cCBmb3IgQVRBMTAwL1VETUE1LCBub3QgVURNQTYuCi0gKgotICoJSWYgeW91IGFyZSB1c2luZyBXRCBkcml2ZXMgd2l0aCBTQVRBIGJyaWRnZXMgeW91IG11c3Qgc2V0IHRoZQotICoJZHJpdmUgdG8gIlNpbmdsZSIuICJNYXN0ZXIiIHdpbGwgaGFuZy4KLSAqCi0gKglJZiB5b3UgaGF2ZSBzdHJhbmdlIHByb2JsZW1zIHdpdGggblZpZGlhIGNoaXBzZXQgc3lzdGVtcyBwbGVhc2UKLSAqCXNlZSB0aGUgU0kgc3VwcG9ydCBkb2N1bWVudGF0aW9uIGFuZCB1cGRhdGUgeW91ciBzeXN0ZW0gQklPUwotICoJaWYgbmVjZXNzYXJ5Ci0gKgotICogIFRoZSBEZWxsIERSQUM0IGhhcyBzb21lIGludGVyZXN0aW5nIGZlYXR1cmVzIGluY2x1ZGluZyBlZmZlY3RpdmVseSBob3QKLSAqICB1bnBsdWdnaW5nL3JlcGx1Z2dpbmcgdGhlIHZpcnR1YWwgQ0QgaW50ZXJmYWNlIHdoZW4gdGhlIERSQUMgaXMgcmVzZXQuCi0gKiAgVGhpcyBvZnRlbiBjYXVzZXMgZHJpdmVycy9pZGUvc2lpbWFnZSB0byBwYW5pYyBidXQgaXMgb2sgd2l0aCB0aGUgcmF0aGVyCi0gKiAgc21hcnRlciBjb2RlIGluIGxpYmF0YS4KLSAqCi0gKiBUT0RPOgotICogLSBJT1JEWSBmaXhlcwotICogLSBWRE1BIHN1cHBvcnQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2RlZmluZSBEUlZfTkFNRSAic2lpbWFnZSIKLQotLyoqCi0gKglwZGV2X2lzX3NhdGEJCS0JY2hlY2sgaWYgZGV2aWNlIGlzIFNBVEEKLSAqCUBwZGV2OglQQ0kgZGV2aWNlIHRvIGNoZWNrCi0gKgotICoJUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSBTQVRBIGNvbnRyb2xsZXIKLSAqLwotCi1zdGF0aWMgaW50IHBkZXZfaXNfc2F0YShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfU0FUQQotCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX1NJSV8zMTEyOgotCWNhc2UgUENJX0RFVklDRV9JRF9TSUlfMTIxMFNBOgotCQlyZXR1cm4gMTsKLQljYXNlIFBDSV9ERVZJQ0VfSURfU0lJXzY4MDoKLQkJcmV0dXJuIDA7Ci0JfQotCUJVRygpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJaXNfc2F0YQkJCS0JY2hlY2sgaWYgaHdpZiBpcyBTQVRBCi0gKglAaHdpZjoJaW50ZXJmYWNlIHRvIGNoZWNrCi0gKgotICoJUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSBTQVRBIGNvbnRyb2xsZXIKLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBpc19zYXRhKGlkZV9od2lmX3QgKmh3aWYpCi17Ci0JcmV0dXJuIHBkZXZfaXNfc2F0YSh0b19wY2lfZGV2KGh3aWYtPmRldikpOwotfQotCi0vKioKLSAqCXNpaW1hZ2Vfc2VscmVnCQktCXJldHVybiByZWdpc3RlciBiYXNlCi0gKglAaHdpZjogaW50ZXJmYWNlCi0gKglAcjogY29uZmlnIG9mZnNldAotICoKLSAqCVR1cm4gYSBjb25maWcgcmVnaXN0ZXIgb2Zmc2V0IGludG8gdGhlIHJpZ2h0IGFkZHJlc3MgaW4gZWl0aGVyCi0gKglQQ0kgc3BhY2Ugb3IgTU1JTyBzcGFjZSB0byBhY2Nlc3MgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgaW4gcXVlc3Rpb24KLSAqCVRoYW5rZnVsbHkgdGhpcyBpcyBhIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9uLCBzbyBpc24ndCBwZXJmb3JtYW5jZQotICoJY3JpdGljYWwuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lpbWFnZV9zZWxyZWcoaWRlX2h3aWZfdCAqaHdpZiwgaW50IHIpCi17Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOwotCi0JYmFzZSArPSAweEEwICsgcjsKLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQliYXNlICs9IGh3aWYtPmNoYW5uZWwgPDwgNjsKLQllbHNlCi0JCWJhc2UgKz0gaHdpZi0+Y2hhbm5lbCA8PCA0OwotCXJldHVybiBiYXNlOwotfQotCi0vKioKLSAqCXNpaW1hZ2Vfc2VsZGV2CQktCXJldHVybiByZWdpc3RlciBiYXNlCi0gKglAaHdpZjogaW50ZXJmYWNlCi0gKglAcjogY29uZmlnIG9mZnNldAotICoKLSAqCVR1cm4gYSBjb25maWcgcmVnaXN0ZXIgb2Zmc2V0IGludG8gdGhlIHJpZ2h0IGFkZHJlc3MgaW4gZWl0aGVyCi0gKglQQ0kgc3BhY2Ugb3IgTU1JTyBzcGFjZSB0byBhY2Nlc3MgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgaW4gcXVlc3Rpb24KLSAqCWluY2x1ZGluZyBhY2NvdW50aW5nIGZvciB0aGUgdW5pdCBzaGlmdC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2lpbWFnZV9zZWxkZXYoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgcikKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOwotCXU4IHVuaXQJCQk9IGRyaXZlLT5kbiAmIDE7Ci0KLQliYXNlICs9IDB4QTAgKyByOwotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCWJhc2UgKz0gaHdpZi0+Y2hhbm5lbCA8PCA2OwotCWVsc2UKLQkJYmFzZSArPSBod2lmLT5jaGFubmVsIDw8IDQ7Ci0JYmFzZSB8PSB1bml0IDw8IHVuaXQ7Ci0JcmV0dXJuIGJhc2U7Ci19Ci0KLXN0YXRpYyB1OCBzaWxfaW9yZWFkOChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0JdTggdG1wID0gMDsKLQotCWlmIChob3N0LT5ob3N0X3ByaXYpCi0JCXRtcCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilhZGRyKTsKLQllbHNlCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgYWRkciwgJnRtcCk7Ci0KLQlyZXR1cm4gdG1wOwotfQotCi1zdGF0aWMgdTE2IHNpbF9pb3JlYWQxNihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0JdTE2IHRtcCA9IDA7Ci0KLQlpZiAoaG9zdC0+aG9zdF9wcml2KQotCQl0bXAgPSByZWFkdygodm9pZCBfX2lvbWVtICopYWRkcik7Ci0JZWxzZQotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGFkZHIsICZ0bXApOwotCi0JcmV0dXJuIHRtcDsKLX0KLQotc3RhdGljIHZvaWQgc2lsX2lvd3JpdGU4KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHZhbCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaWYgKGhvc3QtPmhvc3RfcHJpdikKLQkJd3JpdGViKHZhbCwgKHZvaWQgX19pb21lbSAqKWFkZHIpOwotCWVsc2UKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgYWRkciwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgc2lsX2lvd3JpdGUxNihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoaG9zdC0+aG9zdF9wcml2KQotCQl3cml0ZXcodmFsLCAodm9pZCBfX2lvbWVtICopYWRkcik7Ci0JZWxzZQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBhZGRyLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzaWxfaW93cml0ZTMyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmIChob3N0LT5ob3N0X3ByaXYpCi0JCXdyaXRlbCh2YWwsICh2b2lkIF9faW9tZW0gKilhZGRyKTsKLQllbHNlCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBhZGRyLCB2YWwpOwotfQotCi0vKioKLSAqCXNpbF91ZG1hX2ZpbHRlcgkJLQljb21wdXRlIFVETUEgbWFzawotICoJQGRyaXZlOiBJREUgZGV2aWNlCi0gKgotICoJQ29tcHV0ZSB0aGUgYXZhaWxhYmxlIFVETUEgc3BlZWRzIGZvciB0aGUgZGV2aWNlIG9uIHRoZSBpbnRlcmZhY2UuCi0gKgotICoJRm9yIHRoZSBDTUQ2ODAgdGhpcyBkZXBlbmRzIG9uIHRoZSBjbG9ja2luZyBtb2RlIChzY3NjKSwgZm9yIHRoZQotICoJU0kzMTEyIFNBVEEgY29udHJvbGxlciBsaWZlIGlzIGEgYml0IHNpbXBsZXIuCi0gKi8KLQotc3RhdGljIHU4IHNpbF9wYXRhX3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQl1bnNpZ25lZCBsb25nIGJhc2UJPSAodW5zaWduZWQgbG9uZylod2lmLT5od2lmX2RhdGE7Ci0JdTggc2NzYywgbWFzawkJPSAwOwotCi0JYmFzZSArPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDB4NEEgOiAweDhBOwotCi0Jc2NzYyA9IHNpbF9pb3JlYWQ4KGRldiwgYmFzZSk7Ci0KLQlzd2l0Y2ggKHNjc2MgJiAweDMwKSB7Ci0JY2FzZSAweDEwOgkvKiAxMzMgKi8KLQkJbWFzayA9IEFUQV9VRE1BNjsKLQkJYnJlYWs7Ci0JY2FzZSAweDIwOgkvKiAyeFBDSSAqLwotCQltYXNrID0gQVRBX1VETUE2OwotCQlicmVhazsKLQljYXNlIDB4MDA6CS8qIDEwMCAqLwotCQltYXNrID0gQVRBX1VETUE1OwotCQlicmVhazsKLQlkZWZhdWx0OiAJLyogRGlzYWJsZWQgPyAqLwotCQlCVUcoKTsKLQl9Ci0KLQlyZXR1cm4gbWFzazsKLX0KLQotc3RhdGljIHU4IHNpbF9zYXRhX3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQljaGFyICptID0gKGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXTsKLQotCXJldHVybiBzdHJzdHIobSwgIk1heHRvciIpID8gQVRBX1VETUE1IDogQVRBX1VETUE2OwotfQotCi0vKioKLSAqCXNpbF9zZXRfcGlvX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBQSU8gbW9kZQotICoJQGRyaXZlOiBkcml2ZQotICoJQHBpbzogUElPIG1vZGUgbnVtYmVyCi0gKgotICoJTG9hZCB0aGUgdGltaW5nIHNldHRpbmdzIGZvciB0aGlzIGRldmljZSBtb2RlIGludG8gdGhlCi0gKgljb250cm9sbGVyLiBJZiB3ZSBhcmUgaW4gUElPIG1vZGUgMyBvciA0IHR1cm4gb24gSU9SRFkKLSAqCW1vbml0b3JpbmcgKGJpdCA5KS4gVGhlIFRGIHRpbWluZyBpcyBiaXRzIDMxOjE2Ci0gKi8KLQotc3RhdGljIHZvaWQgc2lsX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykKLXsKLQlzdGF0aWMgY29uc3QgdTE2IHRmX3NwZWVkW10gICA9IHsgMHgzMjhhLCAweDIyODMsIDB4MTI4MSwgMHgxMGMzLCAweDEwYzEgfTsKLQlzdGF0aWMgY29uc3QgdTE2IGRhdGFfc3BlZWRbXSA9IHsgMHgzMjhhLCAweDIyODMsIDB4MTEwNCwgMHgxMGMzLCAweDEwYzEgfTsKLQotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCWlkZV9kcml2ZV90ICpwYWlyCT0gaWRlX2dldF9wYWlyX2Rldihkcml2ZSk7Ci0JdTMyIHNwZWVkdAkJPSAwOwotCXUxNiBzcGVlZHAJCT0gMDsKLQl1bnNpZ25lZCBsb25nIGFkZHIJPSBzaWltYWdlX3NlbGRldihkcml2ZSwgMHgwNCk7Ci0JdW5zaWduZWQgbG9uZyB0ZmFkZHIJPSBzaWltYWdlX3NlbHJlZyhod2lmLAkweDAyKTsKLQl1bnNpZ25lZCBsb25nIGJhc2UJPSAodW5zaWduZWQgbG9uZylod2lmLT5od2lmX2RhdGE7Ci0JdTggdGZfcGlvCQk9IHBpbzsKLQl1OCBtbWlvCQkJPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCXU4IGFkZHJfbWFzawkJPSBod2lmLT5jaGFubmVsID8gKG1taW8gPyAweEY0IDogMHg4NCkKLQkJCQkJCTogKG1taW8gPyAweEI0IDogMHg4MCk7Ci0JdTggbW9kZQkJCT0gMDsKLQl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwotCi0JLyogdHJpbSAqdGFza2ZpbGUqIFBJTyB0byB0aGUgc2xvd2VzdCBvZiB0aGUgbWFzdGVyL3NsYXZlICovCi0JaWYgKHBhaXIpIHsKLQkJdTggcGFpcl9waW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUocGFpciwgMjU1LCA0KTsKLQotCQlpZiAocGFpcl9waW8gPCB0Zl9waW8pCi0JCQl0Zl9waW8gPSBwYWlyX3BpbzsKLQl9Ci0KLQkvKiBjaGVhdCBmb3Igbm93IGFuZCB1c2UgdGhlIGRvY3MgKi8KLQlzcGVlZHAgPSBkYXRhX3NwZWVkW3Bpb107Ci0Jc3BlZWR0ID0gdGZfc3BlZWRbdGZfcGlvXTsKLQotCXNpbF9pb3dyaXRlMTYoZGV2LCBzcGVlZHAsIGFkZHIpOwotCXNpbF9pb3dyaXRlMTYoZGV2LCBzcGVlZHQsIHRmYWRkcik7Ci0KLQkvKiBub3cgc2V0IHVwIElPUkRZICovCi0Jc3BlZWRwID0gc2lsX2lvcmVhZDE2KGRldiwgdGZhZGRyIC0gMik7Ci0Jc3BlZWRwICY9IH4weDIwMDsKLQlpZiAocGlvID4gMikKLQkJc3BlZWRwIHw9IDB4MjAwOwotCXNpbF9pb3dyaXRlMTYoZGV2LCBzcGVlZHAsIHRmYWRkciAtIDIpOwotCi0JbW9kZSA9IHNpbF9pb3JlYWQ4KGRldiwgYmFzZSArIGFkZHJfbWFzayk7Ci0JbW9kZSAmPSB+KHVuaXQgPyAweDMwIDogMHgwMyk7Ci0JbW9kZSB8PSB1bml0ID8gMHgxMCA6IDB4MDE7Ci0Jc2lsX2lvd3JpdGU4KGRldiwgbW9kZSwgYmFzZSArIGFkZHJfbWFzayk7Ci19Ci0KLS8qKgotICoJc2lsX3NldF9kbWFfbW9kZQktCXNldCBob3N0IGNvbnRyb2xsZXIgZm9yIERNQSBtb2RlCi0gKglAZHJpdmU6IGRyaXZlCi0gKglAc3BlZWQ6IERNQSBtb2RlCi0gKgotICoJVHVuZSB0aGUgU2lJIGNoaXBzZXQgZm9yIHRoZSBkZXNpcmVkIERNQSBtb2RlLgotICovCi0KLXN0YXRpYyB2b2lkIHNpbF9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKLXsKLQlzdGF0aWMgY29uc3QgdTggdWx0cmE2W10gPSB7IDB4MEYsIDB4MEIsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDEgfTsKLQlzdGF0aWMgY29uc3QgdTggdWx0cmE1W10gPSB7IDB4MEMsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4MDEgfTsKLQlzdGF0aWMgY29uc3QgdTE2IGRtYVtdCSA9IHsgMHgyMjA4LCAweDEwQzIsIDB4MTBDMSB9OwotCi0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0JdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOwotCXUxNiB1bHRyYSA9IDAsIG11bHRpCT0gMDsKLQl1OCBtb2RlID0gMCwgdW5pdAk9IGRyaXZlLT5kbiAmIDE7Ci0JdTggbW1pbwkJCT0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBzY3NjID0gMCwgYWRkcl9tYXNrCT0gaHdpZi0+Y2hhbm5lbCA/IChtbWlvID8gMHhGNCA6IDB4ODQpCi0JCQkJCQk6IChtbWlvID8gMHhCNCA6IDB4ODApOwotCXVuc2lnbmVkIGxvbmcgbWEJPSBzaWltYWdlX3NlbGRldihkcml2ZSwgMHgwOCk7Ci0JdW5zaWduZWQgbG9uZyB1YQk9IHNpaW1hZ2Vfc2VsZGV2KGRyaXZlLCAweDBDKTsKLQotCXNjc2MgID0gc2lsX2lvcmVhZDggKGRldiwgYmFzZSArIChtbWlvID8gMHg0QSA6IDB4OEEpKTsKLQltb2RlICA9IHNpbF9pb3JlYWQ4IChkZXYsIGJhc2UgKyBhZGRyX21hc2spOwotCW11bHRpID0gc2lsX2lvcmVhZDE2KGRldiwgbWEpOwotCXVsdHJhID0gc2lsX2lvcmVhZDE2KGRldiwgdWEpOwotCi0JbW9kZSAgJj0gfih1bml0ID8gMHgzMCA6IDB4MDMpOwotCXVsdHJhICY9IH4weDNGOwotCXNjc2MgPSAoKHNjc2MgJiAweDMwKSA9PSAweDAwKSA/IDAgOiAxOwotCi0Jc2NzYyA9IGlzX3NhdGEoaHdpZikgPyAxIDogc2NzYzsKLQotCWlmIChzcGVlZCA+PSBYRkVSX1VETUFfMCkgewotCQltdWx0aSAgPSBkbWFbMl07Ci0JCXVsdHJhIHw9IHNjc2MgPyB1bHRyYTZbc3BlZWQgLSBYRkVSX1VETUFfMF0gOgotCQkJCXVsdHJhNVtzcGVlZCAtIFhGRVJfVURNQV8wXTsKLQkJbW9kZSAgfD0gdW5pdCA/IDB4MzAgOiAweDAzOwotCX0gZWxzZSB7Ci0JCW11bHRpID0gZG1hW3NwZWVkIC0gWEZFUl9NV19ETUFfMF07Ci0JCW1vZGUgfD0gdW5pdCA/IDB4MjAgOiAweDAyOwotCX0KLQotCXNpbF9pb3dyaXRlOCAoZGV2LCBtb2RlLCBiYXNlICsgYWRkcl9tYXNrKTsKLQlzaWxfaW93cml0ZTE2KGRldiwgbXVsdGksIG1hKTsKLQlzaWxfaW93cml0ZTE2KGRldiwgdWx0cmEsIHVhKTsKLX0KLQotLyogcmV0dXJucyAxIGlmIGRtYSBpcnEgaXNzdWVkLCAwIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBzaWltYWdlX2lvX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0JdTggZG1hX2FsdHN0YXQJCT0gMDsKLQl1bnNpZ25lZCBsb25nIGFkZHIJPSBzaWltYWdlX3NlbHJlZyhod2lmLCAxKTsKLQotCS8qIHJldHVybiAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8KLQlpZiAoaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpICYgNCkKLQkJcmV0dXJuIDE7Ci0KLQkvKiByZXR1cm4gMSBpZiBEZXZpY2UgSU5UUiBhc3NlcnRlZCAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgYWRkciwgJmRtYV9hbHRzdGF0KTsKLQlpZiAoZG1hX2FsdHN0YXQgJiA4KQotCQlyZXR1cm4gMDsJLyogcmV0dXJuIDE7ICovCi0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKglzaWltYWdlX21taW9fZG1hX3Rlc3RfaXJxCS0JY2hlY2sgd2UgY2F1c2VkIGFuIElSUQotICoJQGRyaXZlOiBkcml2ZSB3ZSBhcmUgdGVzdGluZwotICoKLSAqCUNoZWNrIGlmIHdlIGNhdXNlZCBhbiBJREUgRE1BIGludGVycnVwdC4gV2UgbWF5IGFsc28gaGF2ZSBjYXVzZWQKLSAqCVNBVEEgc3RhdHVzIGludGVycnVwdHMsIGlmIHNvIHdlIGNsZWFuIHRoZW0gdXAgYW5kIGNvbnRpbnVlLgotICovCi0KLXN0YXRpYyBpbnQgc2lpbWFnZV9tbWlvX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXVuc2lnbmVkIGxvbmcgYWRkcgk9IHNpaW1hZ2Vfc2VscmVnKGh3aWYsIDB4MSk7Ci0Jdm9pZCBfX2lvbWVtICpzYXRhX2Vycm9yX2FkZHIKLQkJPSAodm9pZCBfX2lvbWVtICopaHdpZi0+c2F0YV9zY3JbU0FUQV9FUlJPUl9PRkZTRVRdOwotCi0JaWYgKHNhdGFfZXJyb3JfYWRkcikgewotCQl1bnNpZ25lZCBsb25nIGJhc2UJPSAodW5zaWduZWQgbG9uZylod2lmLT5od2lmX2RhdGE7Ci0JCXUzMiBleHRfc3RhdAkJPSByZWFkbCgodm9pZCBfX2lvbWVtICopKGJhc2UgKyAweDEwKSk7Ci0JCXU4IHdhdGNoZG9nCQk9IDA7Ci0KLQkJaWYgKGV4dF9zdGF0ICYgKChod2lmLT5jaGFubmVsKSA/IDB4NDAgOiAweDEwKSkgewotCQkJdTMyIHNhdGFfZXJyb3IgPSByZWFkbChzYXRhX2Vycm9yX2FkZHIpOwotCi0JCQl3cml0ZWwoc2F0YV9lcnJvciwgc2F0YV9lcnJvcl9hZGRyKTsKLQkJCXdhdGNoZG9nID0gKHNhdGFfZXJyb3IgJiAweDAwNjgwMDAwKSA/IDEgOiAwOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHNhdGFfZXJyb3IgPSAweCUwOHgsICIKLQkJCQkid2F0Y2hkb2cgPSAlZCwgJXNcbiIsCi0JCQkJZHJpdmUtPm5hbWUsIHNhdGFfZXJyb3IsIHdhdGNoZG9nLCBfX2Z1bmNfXyk7Ci0JCX0gZWxzZQotCQkJd2F0Y2hkb2cgPSAoZXh0X3N0YXQgJiAweDgwMDApID8gMSA6IDA7Ci0KLQkJZXh0X3N0YXQgPj49IDE2OwotCQlpZiAoIShleHRfc3RhdCAmIDB4MDQwNCkgJiYgIXdhdGNoZG9nKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLwotCWlmIChyZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKSAmIDQpCi0JCXJldHVybiAxOwotCi0JLyogcmV0dXJuIDEgaWYgRGV2aWNlIElOVFIgYXNzZXJ0ZWQgKi8KLQlpZiAocmVhZGIoKHZvaWQgX19pb21lbSAqKWFkZHIpICYgOCkKLQkJcmV0dXJuIDA7CS8qIHJldHVybiAxOyAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2lpbWFnZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlmIChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQlyZXR1cm4gc2lpbWFnZV9tbWlvX2RtYV90ZXN0X2lycShkcml2ZSk7Ci0JZWxzZQotCQlyZXR1cm4gc2lpbWFnZV9pb19kbWFfdGVzdF9pcnEoZHJpdmUpOwotfQotCi0vKioKLSAqCXNpbF9zYXRhX3Jlc2V0X3BvbGwJLQl3YWl0IGZvciBTQVRBIHJlc2V0Ci0gKglAZHJpdmU6IGRyaXZlIHdlIGFyZSByZXNldHRpbmcKLSAqCi0gKglQb2xsIHRoZSBTQVRBIHBoeSBhbmQgc2VlIHdoZXRoZXIgaXQgaGFzIGNvbWUgYmFjayBmcm9tIHRoZSBkZWFkCi0gKgl5ZXQuCi0gKi8KLQotc3RhdGljIGludCBzaWxfc2F0YV9yZXNldF9wb2xsKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jdm9pZCBfX2lvbWVtICpzYXRhX3N0YXR1c19hZGRyCi0JCT0gKHZvaWQgX19pb21lbSAqKWh3aWYtPnNhdGFfc2NyW1NBVEFfU1RBVFVTX09GRlNFVF07Ci0KLQlpZiAoc2F0YV9zdGF0dXNfYWRkcikgewotCQkvKiBTQVRBIFN0YXR1cyBpcyBhdmFpbGFibGUgb25seSB3aGVuIGluIE1NSU8gbW9kZSAqLwotCQl1MzIgc2F0YV9zdGF0ID0gcmVhZGwoc2F0YV9zdGF0dXNfYWRkcik7Ci0KLQkJaWYgKChzYXRhX3N0YXQgJiAweDAzKSAhPSAweDAzKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVzZXQgcGh5IGRlYWQsIHN0YXR1cz0weCUwOHhcbiIsCi0JCQkJCSAgICBod2lmLT5uYW1lLCBzYXRhX3N0YXQpOwotCQkJcmV0dXJuIC1FTlhJTzsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXNpbF9zYXRhX3ByZV9yZXNldAktCXJlc2V0IGhvb2sKLSAqCUBkcml2ZTogSURFIGRldmljZSBiZWluZyByZXNldAotICoKLSAqCUZvciB0aGUgU0FUQSBkZXZpY2VzIHdlIG5lZWQgdG8gaGFuZGxlIHJlY2FsaWJyYXRpb24vZ2VvbWV0cnkKLSAqCWRpZmZlcmVudGx5Ci0gKi8KLQotc3RhdGljIHZvaWQgc2lsX3NhdGFfcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKSB7Ci0JCWRyaXZlLT5zcGVjaWFsLmIuc2V0X2dlb21ldHJ5ID0gMDsKLQkJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSA9IDA7Ci0JfQotfQotCi0vKioKLSAqCWluaXRfY2hpcHNldF9zaWltYWdlCS0Jc2V0IHVwIGFuIFNJIGRldmljZQotICoJQGRldjogUENJIGRldmljZQotICoKLSAqCVBlcmZvcm0gdGhlIGluaXRpYWwgUENJIHNldCB1cCBmb3IgdGhpcyBkZXZpY2UuIEF0dGVtcHQgdG8gc3dpdGNoCi0gKgl0byAxMzMgTUh6IGNsb2NraW5nIGlmIHRoZSBzeXN0ZW0gaXNuJ3QgYWxyZWFkeSBzZXQgdXAgdG8gZG8gaXQuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc2lpbWFnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gaG9zdC0+aG9zdF9wcml2OwotCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2NzY19hZGRyOwotCXU4IHJldiA9IGRldi0+cmV2aXNpb24sIHRtcDsKLQotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIHJldiA/IDEgOiAyNTUpOwotCi0JaWYgKGlvYWRkcikKLQkJcGNpX3NldF9tYXN0ZXIoZGV2KTsKLQotCWJhc2UgPSAodW5zaWduZWQgbG9uZylpb2FkZHI7Ci0KLQlpZiAoaW9hZGRyICYmIHBkZXZfaXNfc2F0YShkZXYpKSB7Ci0JCXUzMiB0bXAzMiwgaXJxX21hc2s7Ci0KLQkJLyogbWFrZSBzdXJlIElERTAvMSBpbnRlcnJ1cHRzIGFyZSBub3QgbWFza2VkICovCi0JCWlycV9tYXNrID0gKDEgPDwgMjIpIHwgKDEgPDwgMjMpOwotCQl0bXAzMiA9IHJlYWRsKGlvYWRkciArIDB4NDgpOwotCQlpZiAodG1wMzIgJiBpcnFfbWFzaykgewotCQkJdG1wMzIgJj0gfmlycV9tYXNrOwotCQkJd3JpdGVsKHRtcDMyLCBpb2FkZHIgKyAweDQ4KTsKLQkJCXJlYWRsKGlvYWRkciArIDB4NDgpOyAvKiBmbHVzaCAqLwotCQl9Ci0JCXdyaXRlbCgwLCBpb2FkZHIgKyAweDE0OCk7Ci0JCXdyaXRlbCgwLCBpb2FkZHIgKyAweDFDOCk7Ci0JfQotCi0Jc2lsX2lvd3JpdGU4KGRldiwgMCwgYmFzZSA/IChiYXNlICsgMHhCNCkgOiAweDgwKTsKLQlzaWxfaW93cml0ZTgoZGV2LCAwLCBiYXNlID8gKGJhc2UgKyAweEY0KSA6IDB4ODQpOwotCi0Jc2NzY19hZGRyID0gYmFzZSA/IChiYXNlICsgMHg0QSkgOiAweDhBOwotCXRtcCA9IHNpbF9pb3JlYWQ4KGRldiwgc2NzY19hZGRyKTsKLQotCXN3aXRjaCAodG1wICYgMHgzMCkgewotCWNhc2UgMHgwMDoKLQkJLyogT24gMTAwIE1IeiBjbG9ja2luZywgdHJ5IGFuZCBzd2l0Y2ggdG8gMTMzIE1IeiAqLwotCQlzaWxfaW93cml0ZTgoZGV2LCB0bXAgfCAweDEwLCBzY3NjX2FkZHIpOwotCQlicmVhazsKLQljYXNlIDB4MzA6Ci0JCS8qIENsb2NraW5nIGlzIGRpc2FibGVkLCBhdHRlbXB0IHRvIGZvcmNlIDEzM01IeiBjbG9ja2luZy4gKi8KLQkJc2lsX2lvd3JpdGU4KGRldiwgdG1wICYgfjB4MjAsIHNjc2NfYWRkcik7Ci0JY2FzZSAweDEwOgotCQkvKiBPbiAxMzNNaHogY2xvY2tpbmcuICovCi0JCWJyZWFrOwotCWNhc2UgMHgyMDoKLQkJLyogT24gUENJeDIgY2xvY2tpbmcuICovCi0JCWJyZWFrOwotCX0KLQotCXRtcCA9IHNpbF9pb3JlYWQ4KGRldiwgc2NzY19hZGRyKTsKLQotCXNpbF9pb3dyaXRlOCAoZGV2LCAgICAgICAweDcyLCBiYXNlICsgMHhBMSk7Ci0Jc2lsX2lvd3JpdGUxNihkZXYsICAgICAweDMyOEEsIGJhc2UgKyAweEEyKTsKLQlzaWxfaW93cml0ZTMyKGRldiwgMHg2MkRENjJERCwgYmFzZSArIDB4QTQpOwotCXNpbF9pb3dyaXRlMzIoZGV2LCAweDQzOTI0MzkyLCBiYXNlICsgMHhBOCk7Ci0Jc2lsX2lvd3JpdGUzMihkZXYsIDB4NDAwOTQwMDksIGJhc2UgKyAweEFDKTsKLQlzaWxfaW93cml0ZTggKGRldiwgICAgICAgMHg3MiwgYmFzZSA/IChiYXNlICsgMHhFMSkgOiAweEIxKTsKLQlzaWxfaW93cml0ZTE2KGRldiwgICAgIDB4MzI4QSwgYmFzZSA/IChiYXNlICsgMHhFMikgOiAweEIyKTsKLQlzaWxfaW93cml0ZTMyKGRldiwgMHg2MkRENjJERCwgYmFzZSA/IChiYXNlICsgMHhFNCkgOiAweEI0KTsKLQlzaWxfaW93cml0ZTMyKGRldiwgMHg0MzkyNDM5MiwgYmFzZSA/IChiYXNlICsgMHhFOCkgOiAweEI4KTsKLQlzaWxfaW93cml0ZTMyKGRldiwgMHg0MDA5NDAwOSwgYmFzZSA/IChiYXNlICsgMHhFQykgOiAweEJDKTsKLQotCWlmIChiYXNlICYmIHBkZXZfaXNfc2F0YShkZXYpKSB7Ci0JCXdyaXRlbCgweEZGRkYwMDAwLCBpb2FkZHIgKyAweDEwOCk7Ci0JCXdyaXRlbCgweEZGRkYwMDAwLCBpb2FkZHIgKyAweDE4OCk7Ci0JCXdyaXRlbCgweDAwNjgwMDAwLCBpb2FkZHIgKyAweDE0OCk7Ci0JCXdyaXRlbCgweDAwNjgwMDAwLCBpb2FkZHIgKyAweDFDOCk7Ci0JfQotCi0JLyogcmVwb3J0IHRoZSBjbG9ja2luZyBtb2RlIG9mIHRoZSBjb250cm9sbGVyICovCi0JaWYgKCFwZGV2X2lzX3NhdGEoZGV2KSkgewotCQlzdGF0aWMgY29uc3QgY2hhciAqY2xrX3N0cltdID0KLQkJCXsgIj09IDEwMCIsICI9PSAxMzMiLCAiPT0gMlggUENJIiwgIkRJU0FCTEVEISIgfTsKLQotCQl0bXAgPj49IDQ7Ci0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIiAlczogQkFTRSBDTE9DSyAlc1xuIiwKLQkJCXBjaV9uYW1lKGRldiksIGNsa19zdHJbdG1wICYgM10pOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWluaXRfbW1pb19pb3BzX3NpaW1hZ2UJLQlzZXQgdXAgdGhlIGlvcHMgZm9yIE1NSU8KLSAqCUBod2lmOiBpbnRlcmZhY2UgdG8gc2V0IHVwCi0gKgotICoJVGhlIGJhc2ljIHNldHVwIGhlcmUgaXMgZmFpcmx5IHNpbXBsZSwgd2UgY2FuIHVzZSBzdGFuZGFyZCBNTUlPCi0gKglvcGVyYXRpb25zLiBIb3dldmVyIHdlIGRvIGhhdmUgdG8gc2V0IHRoZSB0YXNrZmlsZSByZWdpc3RlciBvZmZzZXRzCi0gKglieSBoYW5kIGFzIHRoZXJlIGlzbid0IGEgc3RhbmRhcmQgZGVmaW5lZCBsYXlvdXQgZm9yIHRoZW0gdGhpcyB0aW1lLgotICoKLSAqCVRoZSBoYXJkd2FyZSBzdXBwb3J0cyBidWZmZXJlZCB0YXNrZmlsZXMgYW5kIGFsc28gc29tZSByYXRoZXIgbmljZQotICoJZXh0ZW5kZWQgUFJEIHRhYmxlcy4gRm9yIGJldHRlciBTSTMxMTIgc3VwcG9ydCB1c2UgdGhlIGxpYmF0YSBkcml2ZXIKLSAqLwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9tbWlvX2lvcHNfc2lpbWFnZShpZGVfaHdpZl90ICpod2lmKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0CT0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0Jdm9pZCAqYWRkcgkJPSBob3N0LT5ob3N0X3ByaXY7Ci0JdTggY2gJCQk9IGh3aWYtPmNoYW5uZWw7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOwotCi0JLyoKLQkgKglGaWxsIGluIHRoZSBiYXNpYyBod2lmIGJpdHMKLQkgKi8KLQlod2lmLT5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19NTUlPOwotCi0JaHdpZi0+aHdpZl9kYXRhCT0gYWRkcjsKLQotCS8qCi0JICoJTm93IHNldCB1cCB0aGUgaHcuIFdlIGhhdmUgdG8gZG8gdGhpcyBvdXJzZWx2ZXMgYXMgdGhlCi0JICoJTU1JTyBsYXlvdXQgaXNuJ3QgdGhlIHNhbWUgYXMgdGhlIHN0YW5kYXJkIHBvcnQgYmFzZWQgSS9PLgotCSAqLwotCW1lbXNldChpb19wb3J0cywgMCwgc2l6ZW9mKCppb19wb3J0cykpOwotCi0JYmFzZSA9ICh1bnNpZ25lZCBsb25nKWFkZHI7Ci0JaWYgKGNoKQotCQliYXNlICs9IDB4QzA7Ci0JZWxzZQotCQliYXNlICs9IDB4ODA7Ci0KLQkvKgotCSAqCVRoZSBidWZmZXJlZCB0YXNrIGZpbGUgZG9lc24ndCBoYXZlIHN0YXR1cy9jb250cm9sLCBzbyB3ZQotCSAqCWNhbid0IGN1cnJlbnRseSB1c2UgaXQgc2FuZWx5IHNpbmNlIHdlIHdhbnQgdG8gdXNlIExCQTQ4IG1vZGUuCi0JICovCi0JaW9fcG9ydHMtPmRhdGFfYWRkcgk9IGJhc2U7Ci0JaW9fcG9ydHMtPmVycm9yX2FkZHIJPSBiYXNlICsgMTsKLQlpb19wb3J0cy0+bnNlY3RfYWRkcgk9IGJhc2UgKyAyOwotCWlvX3BvcnRzLT5sYmFsX2FkZHIJPSBiYXNlICsgMzsKLQlpb19wb3J0cy0+bGJhbV9hZGRyCT0gYmFzZSArIDQ7Ci0JaW9fcG9ydHMtPmxiYWhfYWRkcgk9IGJhc2UgKyA1OwotCWlvX3BvcnRzLT5kZXZpY2VfYWRkcgk9IGJhc2UgKyA2OwotCWlvX3BvcnRzLT5zdGF0dXNfYWRkcgk9IGJhc2UgKyA3OwotCWlvX3BvcnRzLT5jdGxfYWRkcgk9IGJhc2UgKyAxMDsKLQotCWlmIChwZGV2X2lzX3NhdGEoZGV2KSkgewotCQliYXNlID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKLQkJaWYgKGNoKQotCQkJYmFzZSArPSAweDgwOwotCQlod2lmLT5zYXRhX3NjcltTQVRBX1NUQVRVU19PRkZTRVRdCT0gYmFzZSArIDB4MTA0OwotCQlod2lmLT5zYXRhX3NjcltTQVRBX0VSUk9SX09GRlNFVF0JPSBiYXNlICsgMHgxMDg7Ci0JCWh3aWYtPnNhdGFfc2NyW1NBVEFfQ09OVFJPTF9PRkZTRVRdCT0gYmFzZSArIDB4MTAwOwotCX0KLQotCWh3aWYtPmlycSA9IGRldi0+aXJxOwotCi0JaHdpZi0+ZG1hX2Jhc2UgPSAodW5zaWduZWQgbG9uZylhZGRyICsgKGNoID8gMHgwOCA6IDB4MDApOwotfQotCi1zdGF0aWMgaW50IGlzX2Rldl9zZWFnYXRlX3NhdGEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWNvbnN0IGNoYXIgKnMJPSAoY29uc3QgY2hhciAqKSZkcml2ZS0+aWRbQVRBX0lEX1BST0RdOwotCXVuc2lnbmVkIGxlbgk9IHN0cm5sZW4ocywgQVRBX0lEX1BST0RfTEVOKTsKLQotCWlmICgobGVuID4gNCkgJiYgKCFtZW1jbXAocywgIlNUIiwgMikpKQotCQlpZiAoKCFtZW1jbXAocyArIGxlbiAtIDIsICJBUyIsIDIpKSB8fAotCQkgICAgKCFtZW1jbXAocyArIGxlbiAtIDMsICJBU0wiLCAzKSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBhcHBseWluZyBwZXNzaW1pc3RpYyBTZWFnYXRlICIKLQkJCQkJICJlcnJhdGEgZml4XG4iLCBkcml2ZS0+bmFtZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJc2lsX3F1aXJrcHJvYwkJLQlwb3N0IHByb2JlIGZpeHVwcwotICoJQGRyaXZlOiBkcml2ZQotICoKLSAqCUNhbGxlZCBhZnRlciBkcml2ZSBwcm9iZSB3ZSB1c2UgdGhpcyB0byBkZWNpZGUgd2hldGhlciB0aGUKLSAqCVNlYWdhdGUgZml4dXAgbXVzdCBiZSBhcHBsaWVkLiBUaGlzIHVzZWQgdG8gYmUgaW4gaW5pdF9pb3BzIGJ1dAotICoJdGhhdCBjYW4gb2NjdXIgYmVmb3JlIHdlIGtub3cgd2hhdCBkcml2ZXMgYXJlIHByZXNlbnQuCi0gKi8KLQotc3RhdGljIHZvaWQgc2lsX3F1aXJrcHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JLyogVHJ5IGFuZCByaXNlIHRoZSBycXNpemUgKi8KLQlpZiAoIWlzX3NhdGEoaHdpZikgfHwgIWlzX2Rldl9zZWFnYXRlX3NhdGEoZHJpdmUpKQotCQlod2lmLT5ycXNpemUgPSAxMjg7Ci19Ci0KLS8qKgotICoJaW5pdF9pb3BzX3NpaW1hZ2UJLQlzZXQgdXAgaW9wcwotICoJQGh3aWY6IGludGVyZmFjZSB0byBzZXQgdXAKLSAqCi0gKglEbyB0aGUgYmFzaWMgc2V0dXAgZm9yIHRoZSBTSUlNQUdFIGhhcmR3YXJlIGludGVyZmFjZQotICoJYW5kIHRoZW4gZG8gdGhlIE1NSU8gc2V0dXAgaWYgd2UgY2FuLiBUaGlzIGlzIHRoZSBmaXJzdAotICoJbG9vayBpbiB3ZSBnZXQgZm9yIHNldHRpbmcgdXAgdGhlIGh3aWYgc28gdGhhdCB3ZQotICoJY2FuIGdldCB0aGUgaW9wcyByaWdodCBiZWZvcmUgdXNpbmcgdGhlbS4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9pb3BzX3NpaW1hZ2UoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaHdpZi0+aHdpZl9kYXRhID0gTlVMTDsKLQotCS8qIFBlc3NpbWFsIHVudGlsIHdlIGZpbmlzaCBwcm9iaW5nICovCi0JaHdpZi0+cnFzaXplID0gMTU7Ci0KLQlpZiAoaG9zdC0+aG9zdF9wcml2KQotCQlpbml0X21taW9faW9wc19zaWltYWdlKGh3aWYpOwotfQotCi0vKioKLSAqCXNpbF9jYWJsZV9kZXRlY3QJLQljYWJsZSBkZXRlY3Rpb24KLSAqCUBod2lmOiBpbnRlcmZhY2UgdG8gY2hlY2sKLSAqCi0gKglDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGFuIEFUQTY2IGNhcGFibGUgY2FibGUgb24gdGhlIGludGVyZmFjZS4KLSAqLwotCi1zdGF0aWMgdTggc2lsX2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0JdW5zaWduZWQgbG9uZyBhZGRyCT0gc2lpbWFnZV9zZWxyZWcoaHdpZiwgMCk7Ci0JdTggYXRhNjYJCT0gc2lsX2lvcmVhZDgoZGV2LCBhZGRyKTsKLQotCXJldHVybiAoYXRhNjYgJiAweDAxKSA/IEFUQV9DQkxfUEFUQTgwIDogQVRBX0NCTF9QQVRBNDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHNpbF9wYXRhX3BvcnRfb3BzID0gewotCS5zZXRfcGlvX21vZGUJCT0gc2lsX3NldF9waW9fbW9kZSwKLQkuc2V0X2RtYV9tb2RlCQk9IHNpbF9zZXRfZG1hX21vZGUsCi0JLnF1aXJrcHJvYwkJPSBzaWxfcXVpcmtwcm9jLAotCS51ZG1hX2ZpbHRlcgkJPSBzaWxfcGF0YV91ZG1hX2ZpbHRlciwKLQkuY2FibGVfZGV0ZWN0CQk9IHNpbF9jYWJsZV9kZXRlY3QsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzaWxfc2F0YV9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb19tb2RlCQk9IHNpbF9zZXRfcGlvX21vZGUsCi0JLnNldF9kbWFfbW9kZQkJPSBzaWxfc2V0X2RtYV9tb2RlLAotCS5yZXNldF9wb2xsCQk9IHNpbF9zYXRhX3Jlc2V0X3BvbGwsCi0JLnByZV9yZXNldAkJPSBzaWxfc2F0YV9wcmVfcmVzZXQsCi0JLnF1aXJrcHJvYwkJPSBzaWxfcXVpcmtwcm9jLAotCS51ZG1hX2ZpbHRlcgkJPSBzaWxfc2F0YV91ZG1hX2ZpbHRlciwKLQkuY2FibGVfZGV0ZWN0CQk9IHNpbF9jYWJsZV9kZXRlY3QsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNpbF9kbWFfb3BzID0gewotCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKLQkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAotCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKLQkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKLQkuZG1hX3Rlc3RfaXJxCQk9IHNpaW1hZ2VfZG1hX3Rlc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCi0JLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAotfTsKLQotI2RlZmluZSBERUNMQVJFX1NJSV9ERVYocF9vcHMpCQkJCVwKLQl7CQkJCQkJXAotCQkubmFtZQkJPSBEUlZfTkFNRSwJCVwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zaWltYWdlLAlcCi0JCS5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2lpbWFnZSwJXAotCQkucG9ydF9vcHMJPSBwX29wcywJCVwKLQkJLmRtYV9vcHMJPSAmc2lsX2RtYV9vcHMsCQlcCi0JCS5waW9fbWFzawk9IEFUQV9QSU80LAkJXAotCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCQlcCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCQlcCi0JfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2lpbWFnZV9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLyogMDogU2lJNjgwICovICBERUNMQVJFX1NJSV9ERVYoJnNpbF9wYXRhX3BvcnRfb3BzKSwKLQkvKiAxOiBTaUkzMTEyICovIERFQ0xBUkVfU0lJX0RFVigmc2lsX3NhdGFfcG9ydF9vcHMpCi19OwotCi0vKioKLSAqCXNpaW1hZ2VfaW5pdF9vbmUJLQlQQ0kgbGF5ZXIgZGlzY292ZXJ5IGVudHJ5Ci0gKglAZGV2OiBQQ0kgZGV2aWNlCi0gKglAaWQ6IGlkZW50IHRhYmxlIGVudHJ5Ci0gKgotICoJQ2FsbGVkIGJ5IHRoZSBQQ0kgY29kZSB3aGVuIGl0IGZpbmRzIGFuIFNpSTY4MCBvciBTaUkzMTEyIGNvbnRyb2xsZXIuCi0gKglXZSB0aGVuIHVzZSB0aGUgSURFIFBDSSBnZW5lcmljIGhlbHBlciB0byBkbyBtb3N0IG9mIHRoZSB3b3JrLgotICovCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNpaW1hZ2VfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBOVUxMOwotCXJlc291cmNlX3NpemVfdCBiYXI1ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNSk7Ci0JdW5zaWduZWQgbG9uZyBiYXJzaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDUpOwotCWludCByYzsKLQlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkOwotCXU4IGlkeCA9IGlkLT5kcml2ZXJfZGF0YTsKLQl1OCBCQTVfRU47Ci0KLQlkID0gc2lpbWFnZV9jaGlwc2V0c1tpZHhdOwotCi0JaWYgKGlkeCkgewotCQlzdGF0aWMgaW50IGZpcnN0ID0gMTsKLQotCQlpZiAoZmlyc3QpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogRm9yIGZ1bGwgU0FUQSBzdXBwb3J0IHlvdSAiCi0JCQkJInNob3VsZCB1c2UgdGhlIGxpYmF0YSBzYXRhX3NpbCBtb2R1bGUuXG4iKTsKLQkJCWZpcnN0ID0gMDsKLQkJfQotCi0JCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfTk9fQVRBUElfRE1BOwotCX0KLQotCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg4QSwgJkJBNV9FTik7Ci0JaWYgKChCQTVfRU4gJiAweDAxKSB8fCBiYXI1KSB7Ci0JCS8qCi0JCSogRHJvcCBiYWNrIHRvIFBJTyBpZiB3ZSBjYW4ndCBtYXAgdGhlIE1NSU8uIFNvbWUgc3lzdGVtcwotCQkqIHNlZW0gdG8gZ2V0IHRlcm1pbmFsbHkgY29uZnVzZWQgaW4gdGhlIFBDSSBzcGFjZXMuCi0JCSovCi0JCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGJhcjUsIGJhcnNpemUsIGQubmFtZSkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIiAlczogTU1JTyBwb3J0cyBub3QgIgotCQkJCSJhdmFpbGFibGVcbiIsIHBjaV9uYW1lKGRldikpOwotCQl9IGVsc2UgewotCQkJaW9hZGRyID0gaW9yZW1hcChiYXI1LCBiYXJzaXplKTsKLQkJCWlmIChpb2FkZHIgPT0gTlVMTCkKLQkJCQlyZWxlYXNlX21lbV9yZWdpb24oYmFyNSwgYmFyc2l6ZSk7Ci0JCX0KLQl9Ci0KLQlyYyA9IGlkZV9wY2lfaW5pdF9vbmUoZGV2LCAmZCwgaW9hZGRyKTsKLQlpZiAocmMpIHsKLQkJaWYgKGlvYWRkcikgewotCQkJaW91bm1hcChpb2FkZHIpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGJhcjUsIGJhcnNpemUpOwotCQl9Ci0JCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IHNpaW1hZ2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBob3N0LT5ob3N0X3ByaXY7Ci0KLQlpZGVfcGNpX3JlbW92ZShkZXYpOwotCi0JaWYgKGlvYWRkcikgewotCQlyZXNvdXJjZV9zaXplX3QgYmFyNSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDUpOwotCQl1bnNpZ25lZCBsb25nIGJhcnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgNSk7Ci0KLQkJaW91bm1hcChpb2FkZHIpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oYmFyNSwgYmFyc2l6ZSk7Ci0JfQotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaWltYWdlX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WREVWSUNFKENNRCwgUENJX0RFVklDRV9JRF9TSUlfNjgwKSwgICAgMCB9LAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9TQVRBCi0JeyBQQ0lfVkRFVklDRShDTUQsIFBDSV9ERVZJQ0VfSURfU0lJXzMxMTIpLCAgIDEgfSwKLQl7IFBDSV9WREVWSUNFKENNRCwgUENJX0RFVklDRV9JRF9TSUlfMTIxMFNBKSwgMSB9LAotI2VuZGlmCi0JeyAwLCB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzaWltYWdlX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2lpbWFnZV9wY2lfZHJpdmVyID0gewotCS5uYW1lCQk9ICJTaUlfSURFIiwKLQkuaWRfdGFibGUJPSBzaWltYWdlX3BjaV90YmwsCi0JLnByb2JlCQk9IHNpaW1hZ2VfaW5pdF9vbmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaWltYWdlX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBpZGVfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBpZGVfcGNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNpaW1hZ2VfaWRlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnNpaW1hZ2VfcGNpX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzaWltYWdlX2lkZV9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzaWltYWdlX3BjaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChzaWltYWdlX2lkZV9pbml0KTsKLW1vZHVsZV9leGl0KHNpaW1hZ2VfaWRlX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBbmRyZSBIZWRyaWNrLCBBbGFuIENveCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgU2lJIElERSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jIGIvZHJpdmVycy9pZGUvcGlpeC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvcGlpeC5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9waWl4LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMgYi9kcml2ZXJzL2lkZS9wbWFjLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BwYy9wbWFjLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3BtYWMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvcHBjL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGU1MmFkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaWRlL3BwYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREVfUE1BQykJCSs9IHBtYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L3E0MGlkZS5jIGIvZHJpdmVycy9pZGUvcTQwaWRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL2xlZ2FjeS9xNDBpZGUuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvcTQwaWRlLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9xZDY1eHguYyBiL2RyaXZlcnMvaWRlL3FkNjV4eC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3FkNjV4eC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmggYi9kcml2ZXJzL2lkZS9xZDY1eHguaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5oCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9xZDY1eHguaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jIGIvZHJpdmVycy9pZGUvcmFwaWRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL2FybS9yYXBpZGUuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvcmFwaWRlLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9yejEwMDAuYyBiL2RyaXZlcnMvaWRlL3J6MTAwMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvcnoxMDAwLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3J6MTAwMC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMgYi9kcml2ZXJzL2lkZS9zYzEyMDAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9zYzEyMDAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2NjX3BhdGEuYyBiL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2YWE1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKQEAgLTAsMCArMSw5NjQgQEAKKy8qCisgKiBTdXBwb3J0IGZvciBJREUgaW50ZXJmYWNlcyBvbiBDZWxsZWIgcGxhdGZvcm0KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgVE9TSElCQSBDT1JQT1JBVElPTgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jOgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCA8YWxhbkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1NDQ19BVEEgICAgICAgICAgICAweDAxYjQKKworI2RlZmluZSBTQ0NfUEFUQV9OQU1FICAgICAgICAgICAic2NjIElERSIKKworI2RlZmluZSBURFZIU0VMX01BU1RFUiAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFREVkhTRUxfU0xBVkUgICAgICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBNT0RFX0pDVVNGRU4gICAgICAgICAgICAweDAwMDAwMDgwCisKKyNkZWZpbmUgQ0NLQ1RSTF9BVEFSRVNFVCAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0tDVFJMX0JVRkNOVCAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDS0NUUkxfQ1JTVCAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NLQ1RSTF9PQ0xLRU4gICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDQ0tDVFJMX0FUQUNMS09FTiAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDS0NUUkxfTENMS0VOICAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBRQ0hDRF9JT1NfU1MJCTB4MDAwMDAwMDEKKworI2RlZmluZSBRQ0hTRF9TVFBESUFHCQkweDAwMDIwMDAwCisKKyNkZWZpbmUgSU5UTUFTS19NU0sgICAgICAgICAgICAgMHhEMTAwMDAxMgorI2RlZmluZSBJTlRTVFNfU0VSUk9SCQkweDgwMDAwMDAwCisjZGVmaW5lIElOVFNUU19QUkVSUgkJMHg0MDAwMDAwMAorI2RlZmluZSBJTlRTVFNfUkVSUgkJMHgxMDAwMDAwMAorI2RlZmluZSBJTlRTVFNfSUNFUlIJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSU5UU1RTX0JNU0lOVAkJMHgwMDAwMDAxMAorI2RlZmluZSBJTlRTVFNfQk1IRQkJMHgwMDAwMDAwOAorI2RlZmluZSBJTlRTVFNfSU9JUlFTICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIElOVFNUU19JTlRSUSAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSU5UU1RTX0FDVEVJTlQgICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIEVDTU9ERV9WQUxVRSAweDAxCisKK3N0YXRpYyBzdHJ1Y3Qgc2NjX3BvcnRzIHsKKwl1bnNpZ25lZCBsb25nIGN0bCwgZG1hOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsJLyogZm9yIHJlbW92aW5nIHBvcnQgZnJvbSBzeXN0ZW0gKi8KK30gc2NjX3BvcnRzW01BWF9IV0lGU107CisKKy8qIFBJTyB0cmFuc2ZlciBtb2RlICB0YWJsZSAqLworLyogSkNIU1QgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEpDSFNUdGJsWzJdWzddID0geworCXsweDBFLCAweDA1LCAweDAyLCAweDAzLCAweDAyLCAweDAwLCAweDAwfSwgICAvKiAxMDBNSHogKi8KKwl7MHgxMywgMHgwNywgMHgwNCwgMHgwNCwgMHgwMywgMHgwMCwgMHgwMH0gICAgLyogMTMzTUh6ICovCit9OworCisvKiBKQ0hIVCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgSkNISFR0YmxbMl1bN10gPSB7CisJezB4MEUsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MDB9LCAgIC8qIDEwME1IeiAqLworCXsweDEzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAwLCAweDAwfSAgICAvKiAxMzNNSHogKi8KK307CisKKy8qIEpDSENUICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBKQ0hDVHRibFsyXVs3XSA9IHsKKwl7MHgxRCwgMHgxRCwgMHgxQywgMHgwQiwgMHgwNiwgMHgwMCwgMHgwMH0sICAgLyogMTAwTUh6ICovCisJezB4MjcsIDB4MjYsIDB4MjYsIDB4MEUsIDB4MDksIDB4MDAsIDB4MDB9ICAgIC8qIDEzM01IeiAqLworfTsKKworCisvKiBETUEgdHJhbnNmZXIgbW9kZSAgdGFibGUgKi8KKy8qIEpDSERDVE0vSkNIRENUUyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgSkNIRENUeHRibFsyXVs3XSA9IHsKKwl7MHgwQSwgMHgwNiwgMHgwNCwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMH0sICAgLyogMTAwTUh6ICovCisJezB4MEUsIDB4MDksIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDEsIDB4MDB9ICAgIC8qIDEzM01IeiAqLworfTsKKworLyogSkNTVFdUTS9KQ1NUV1RTICAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgSkNTVFdUeHRibFsyXVs3XSA9IHsKKwl7MHgwNiwgMHgwNCwgMHgwMywgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMH0sICAgLyogMTAwTUh6ICovCisJezB4MDksIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDJ9ICAgIC8qIDEzM01IeiAqLworfTsKKworLyogSkNUU1MgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEpDVFNTdGJsWzJdWzddID0geworCXsweDA1LCAweDA1LCAweDA1LCAweDA1LCAweDA1LCAweDA1LCAweDAwfSwgICAvKiAxMDBNSHogKi8KKwl7MHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNX0gICAgLyogMTMzTUh6ICovCit9OworCisvKiBKQ0VOVlQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEpDRU5WVHRibFsyXVs3XSA9IHsKKwl7MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMH0sICAgLyogMTAwTUh6ICovCisJezB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDJ9ICAgIC8qIDEzM01IeiAqLworfTsKKworLyogSkNBQ1RTRUxTL0pDQUNUU0VMTSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgSkNBQ1RTRUx0YmxbMl1bN10gPSB7CisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDB9LCAgIC8qIDEwME1IeiAqLworCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSAgICAvKiAxMzNNSHogKi8KK307CisKKworc3RhdGljIHU4IHNjY19pZGVfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1MzIgZGF0YSA9IGluX2JlMzIoKHZvaWQqKXBvcnQpOworCXJldHVybiAodTgpZGF0YTsKK30KKworc3RhdGljIHZvaWQgc2NjX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCit7CisJb3V0X2JlMzIoKHZvaWQgKilod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIsIGNtZCk7CisJZWllaW8oKTsKKwlpbl9iZTMyKCh2b2lkICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMWMpKTsKKwllaWVpbygpOworfQorCitzdGF0aWMgdTggc2NjX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJcmV0dXJuICh1OClpbl9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworfQorCitzdGF0aWMgdTggc2NjX3JlYWRfYWx0c3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJcmV0dXJuICh1OClpbl9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworfQorCitzdGF0aWMgdTggc2NjX3JlYWRfc2ZmX2RtYV9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlyZXR1cm4gKHU4KWluX2JlMzIoKHZvaWQgKikoaHdpZi0+ZG1hX2Jhc2UgKyA0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNjY19zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKK3sKKwl1OCBjdGwgPSBBVEFfREVWQ1RMX09CUzsKKworCWlmIChvbiA9PSA0KSB7IC8qIGhhY2sgZm9yIFNSU1QgKi8KKwkJY3RsIHw9IDQ7CisJCW9uICY9IH40OworCX0KKworCWN0bCB8PSBvbiA/IDAgOiAyOworCisJb3V0X2JlMzIoKHZvaWQgKilod2lmLT5pb19wb3J0cy5jdGxfYWRkciwgY3RsKTsKKwllaWVpbygpOworCWluX2JlMzIoKHZvaWQgKikoaHdpZi0+ZG1hX2Jhc2UgKyAweDAxYykpOworCWVpZWlvKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjY19pZGVfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKK3sKKwl1MTYgKnB0ciA9ICh1MTYgKilhZGRyOworCXdoaWxlIChjb3VudC0tKSB7CisJCSpwdHIrKyA9IGxlMTZfdG9fY3B1KGluX2JlMzIoKHZvaWQqKXBvcnQpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNjY19pZGVfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKK3sKKwl1MTYgKnB0ciA9ICh1MTYgKilhZGRyOworCXdoaWxlIChjb3VudC0tKSB7CisJCSpwdHIrKyA9IGxlMTZfdG9fY3B1KGluX2JlMzIoKHZvaWQqKXBvcnQpKTsKKwkJKnB0cisrID0gbGUxNl90b19jcHUoaW5fYmUzMigodm9pZCopcG9ydCkpOworCX0KK30KKworc3RhdGljIHZvaWQgc2NjX2lkZV9vdXRiKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlvdXRfYmUzMigodm9pZCopcG9ydCwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkCitzY2NfaWRlX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXUxNiAqcHRyID0gKHUxNiAqKWFkZHI7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJb3V0X2JlMzIoKHZvaWQqKXBvcnQsIGNwdV90b19sZTE2KCpwdHIrKykpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjY19pZGVfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCit7CisJdTE2ICpwdHIgPSAodTE2ICopYWRkcjsKKwl3aGlsZSAoY291bnQtLSkgeworCQlvdXRfYmUzMigodm9pZCopcG9ydCwgY3B1X3RvX2xlMTYoKnB0cisrKSk7CisJCW91dF9iZTMyKCh2b2lkKilwb3J0LCBjcHVfdG9fbGUxNigqcHRyKyspKTsKKwl9Cit9CisKKy8qKgorICoJc2NjX3NldF9waW9fbW9kZQktCXNldCBob3N0IGNvbnRyb2xsZXIgZm9yIFBJTyBtb2RlCisgKglAZHJpdmU6IGRyaXZlCisgKglAcGlvOiBQSU8gbW9kZSBudW1iZXIKKyAqCisgKglMb2FkIHRoZSB0aW1pbmcgc2V0dGluZ3MgZm9yIHRoaXMgZGV2aWNlIG1vZGUgaW50byB0aGUKKyAqCWNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIHZvaWQgc2NjX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwb3J0cy0+Y3RsOworCXVuc2lnbmVkIGxvbmcgY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKKwl1bnNpZ25lZCBsb25nIHBpb3NodF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAwMDsKKwl1bnNpZ25lZCBsb25nIHBpb2N0X3BvcnQgPSBjdGxfYmFzZSArIDB4MDA0OworCXVuc2lnbmVkIGxvbmcgcmVnOworCWludCBvZmZzZXQ7CisKKwlyZWcgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKiljY2tjdHJsX3BvcnQpOworCWlmIChyZWcgJiBDQ0tDVFJMX0FUQUNMS09FTikgeworCQlvZmZzZXQgPSAxOyAvKiAxMzNNSHogKi8KKwl9IGVsc2UgeworCQlvZmZzZXQgPSAwOyAvKiAxMDBNSHogKi8KKwl9CisJcmVnID0gSkNIU1R0Ymxbb2Zmc2V0XVtwaW9dIDw8IDE2IHwgSkNISFR0Ymxbb2Zmc2V0XVtwaW9dOworCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilwaW9zaHRfcG9ydCwgcmVnKTsKKwlyZWcgPSBKQ0hDVHRibFtvZmZzZXRdW3Bpb107CisJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKXBpb2N0X3BvcnQsIHJlZyk7Cit9CisKKy8qKgorICoJc2NjX3NldF9kbWFfbW9kZQktCXNldCBob3N0IGNvbnRyb2xsZXIgZm9yIERNQSBtb2RlCisgKglAZHJpdmU6IGRyaXZlCisgKglAc3BlZWQ6IERNQSBtb2RlCisgKgorICoJTG9hZCB0aGUgdGltaW5nIHNldHRpbmdzIGZvciB0aGlzIGRldmljZSBtb2RlIGludG8gdGhlCisgKgljb250cm9sbGVyLgorICovCisKK3N0YXRpYyB2b2lkIHNjY19zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwb3J0cy0+Y3RsOworCXVuc2lnbmVkIGxvbmcgY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKKwl1bnNpZ25lZCBsb25nIG1kbWFjdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAwODsKKwl1bnNpZ25lZCBsb25nIG1jcmNzdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAwYzsKKwl1bnNpZ25lZCBsb25nIHNkbWFjdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAxMDsKKwl1bnNpZ25lZCBsb25nIHNjcmNzdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAxNDsKKwl1bnNpZ25lZCBsb25nIHVkZW52dF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAxODsKKwl1bnNpZ25lZCBsb25nIHRkdmhzZWxfcG9ydCAgID0gY3RsX2Jhc2UgKyAweDAyMDsKKwlpbnQgaXNfc2xhdmUgPSAoJmh3aWYtPmRyaXZlc1sxXSA9PSBkcml2ZSk7CisJaW50IG9mZnNldCwgaWR4OworCXVuc2lnbmVkIGxvbmcgcmVnOworCXVuc2lnbmVkIGxvbmcgamNhY3RzZWw7CisKKwlyZWcgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKiljY2tjdHJsX3BvcnQpOworCWlmIChyZWcgJiBDQ0tDVFJMX0FUQUNMS09FTikgeworCQlvZmZzZXQgPSAxOyAvKiAxMzNNSHogKi8KKwl9IGVsc2UgeworCQlvZmZzZXQgPSAwOyAvKiAxMDBNSHogKi8KKwl9CisKKwlpZHggPSBzcGVlZCAtIFhGRVJfVURNQV8wOworCisJamNhY3RzZWwgPSBKQ0FDVFNFTHRibFtvZmZzZXRdW2lkeF07CisJaWYgKGlzX3NsYXZlKSB7CisJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilzZG1hY3RfcG9ydCwgSkNIRENUeHRibFtvZmZzZXRdW2lkeF0pOworCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopc2NyY3N0X3BvcnQsIEpDU1RXVHh0Ymxbb2Zmc2V0XVtpZHhdKTsKKwkJamNhY3RzZWwgPSBqY2FjdHNlbCA8PCAyOworCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopdGR2aHNlbF9wb3J0LCAoaW5fYmUzMigodm9pZCBfX2lvbWVtICopdGR2aHNlbF9wb3J0KSAmIH5URFZIU0VMX1NMQVZFKSB8IGpjYWN0c2VsKTsKKwl9IGVsc2UgeworCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopbWRtYWN0X3BvcnQsIEpDSERDVHh0Ymxbb2Zmc2V0XVtpZHhdKTsKKwkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKW1jcmNzdF9wb3J0LCBKQ1NUV1R4dGJsW29mZnNldF1baWR4XSk7CisJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKil0ZHZoc2VsX3BvcnQsIChpbl9iZTMyKCh2b2lkIF9faW9tZW0gKil0ZHZoc2VsX3BvcnQpICYgflREVkhTRUxfTUFTVEVSKSB8IGpjYWN0c2VsKTsKKwl9CisJcmVnID0gSkNUU1N0Ymxbb2Zmc2V0XVtpZHhdIDw8IDE2IHwgSkNFTlZUdGJsW29mZnNldF1baWR4XTsKKwlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopdWRlbnZ0X3BvcnQsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNjY19kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOworCXU4IGRtYV9zdGF0ID0gc2NjX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UgKyA0KTsKKworCWlmIChvbikKKwkJZG1hX3N0YXQgfD0gKDEgPDwgKDUgKyB1bml0KSk7CisJZWxzZQorCQlkbWFfc3RhdCAmPSB+KDEgPDwgKDUgKyB1bml0KSk7CisKKwlzY2NfaWRlX291dGIoZG1hX3N0YXQsIGh3aWYtPmRtYV9iYXNlICsgNCk7Cit9CisKKy8qKgorICoJc2NjX2lkZV9kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQorICoJQGRyaXZlOiB0YXJnZXQgZGV2aWNlCisgKgorICoJQnVpbGQgYW4gSURFIERNQSBQUkQgKElERSBzcGVhayBmb3Igc2NhdHRlciBnYXRoZXIgdGFibGUpCisgKglhbmQgdGhlbiBzZXQgdXAgdGhlIERNQSB0cmFuc2ZlciByZWdpc3RlcnMuCisgKgorICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIElmIGEgUElPIGZhbGxiYWNrIGlzIHJlcXVpcmVkIHRoZW4gMQorICoJaXMgcmV0dXJuZWQuCisgKi8KKworc3RhdGljIGludCBzY2NfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOworCXVuc2lnbmVkIGludCByZWFkaW5nOworCXU4IGRtYV9zdGF0OworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJcmVhZGluZyA9IDA7CisJZWxzZQorCQlyZWFkaW5nID0gMSA8PCAzOworCisJLyogZmFsbCBiYWNrIHRvIHBpbyEgKi8KKwlpZiAoIWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogUFJEIHRhYmxlICovCisJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIDgpLCBod2lmLT5kbWF0YWJsZV9kbWEpOworCisJLyogc3BlY2lmeSByL3cgKi8KKwlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2Jhc2UsIHJlYWRpbmcpOworCisJLyogcmVhZCBETUEgc3RhdHVzIGZvciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KKwlkbWFfc3RhdCA9IGluX2JlMzIoKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIDQpKTsKKworCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLworCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA0KSwgZG1hX3N0YXQgfCA2KTsKKwlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2NjX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IGRtYV9jbWQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfYmFzZSk7CisKKwkvKiBzdGFydCBETUEgKi8KKwlzY2NfaWRlX291dGIoZG1hX2NtZCB8IDEsIGh3aWYtPmRtYV9iYXNlKTsKKwl3bWIoKTsKK30KKworc3RhdGljIGludCBfX3NjY19kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggZG1hX3N0YXQsIGRtYV9jbWQ7CisKKwlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKKwkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLworCWRtYV9jbWQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfYmFzZSk7CisJLyogc3RvcCBETUEgKi8KKwlzY2NfaWRlX291dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSk7CisJLyogZ2V0IERNQSBzdGF0dXMgKi8KKwlkbWFfc3RhdCA9IHNjY19pZGVfaW5iKGh3aWYtPmRtYV9iYXNlICsgNCk7CisJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCisJc2NjX2lkZV9vdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyA0KTsKKwkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KKwlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CisJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLworCXdtYigpOworCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOworfQorCisvKioKKyAqCXNjY19kbWFfZW5kCS0JU3RvcCBETUEKKyAqCUBkcml2ZTogSURFIGRyaXZlCisgKgorICoJQ2hlY2sgYW5kIGNsZWFyIElOVCBTdGF0dXMgcmVnaXN0ZXIuCisgKglUaGVuIGNhbGwgX19zY2NfZG1hX2VuZCgpLgorICovCisKK3N0YXRpYyBpbnQgc2NjX2RtYV9lbmQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKKwl2b2lkIF9faW9tZW0gKmRtYV9iYXNlID0gKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9iYXNlOworCXVuc2lnbmVkIGxvbmcgaW50c3RzX3BvcnQgPSBod2lmLT5kbWFfYmFzZSArIDB4MDE0OworCXUzMiByZWc7CisJaW50IGRtYV9zdGF0LCBkYXRhX2xvc3MgPSAwOworCXN0YXRpYyBpbnQgcmV0cnkgPSAwOworCisJLyogZXJyYXRhIEEzMDggd29ya2Fyb3VuZDogU3RlcDUgKGNoZWNrIGRhdGEgbG9zcykgKi8KKwkvKiBXZSBkb24ndCBjaGVjayBub24gaWRlX2Rpc2sgYmVjYXVzZSBpdCBpcyBsaW1pdGVkIHRvIFVETUE0ICovCisJaWYgKCEoaW5fYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpCisJICAgICAgJiBBVEFfRVJSKSAmJgorCSAgICBkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgZHJpdmUtPmN1cnJlbnRfc3BlZWQgPiBYRkVSX1VETUFfNCkgeworCQlyZWcgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCk7CisJCWlmICghKHJlZyAmIElOVFNUU19BQ1RFSU5UKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG9wZXJhdGlvbiBmYWlsZWQgKHRyYW5zZmVyIGRhdGEgbG9zcylcbiIsCisJCQkgICAgICAgZHJpdmUtPm5hbWUpOworCQkJZGF0YV9sb3NzID0gMTsKKwkJCWlmIChyZXRyeSsrKSB7CisJCQkJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOworCQkJCWludCB1bml0OworCQkJCS8qIEVSUk9SX1JFU0VUIGFuZCBkcml2ZS0+Y3JjX2NvdW50IGFyZSBuZWVkZWQKKwkJCQkgKiB0byByZWR1Y2UgRE1BIHRyYW5zZmVyIG1vZGUgaW4gcmV0cnkgcHJvY2Vzcy4KKwkJCQkgKi8KKwkJCQlpZiAocnEpCisJCQkJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisJCQkJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7IHVuaXQrKykgeworCQkJCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOworCQkJCQlkcml2ZS0+Y3JjX2NvdW50Kys7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJd2hpbGUgKDEpIHsKKwkJcmVnID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQpOworCisJCWlmIChyZWcgJiBJTlRTVFNfU0VSUk9SKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU0VSUk9SXG4iLCBTQ0NfUEFUQV9OQU1FKTsKKwkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX1NFUlJPUnxJTlRTVFNfQk1TSU5UKTsKKworCQkJb3V0X2JlMzIoZG1hX2Jhc2UsIGluX2JlMzIoZG1hX2Jhc2UpICYgflFDSENEX0lPU19TUyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyZWcgJiBJTlRTVFNfUFJFUlIpIHsKKwkJCXUzMiBtYWVhMCwgbWFlYzA7CisJCQl1bnNpZ25lZCBsb25nIGN0bF9iYXNlID0gaHdpZi0+Y29uZmlnX2RhdGE7CisKKwkJCW1hZWEwID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopKGN0bF9iYXNlICsgMHhGNTApKTsKKwkJCW1hZWMwID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopKGN0bF9iYXNlICsgMHhGNTQpKTsKKworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFBSRVJSIFthZGRyOiV4IGNtZDoleF1cbiIsIFNDQ19QQVRBX05BTUUsIG1hZWEwLCBtYWVjMCk7CisKKwkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX1BSRVJSfElOVFNUU19CTVNJTlQpOworCisJCQlvdXRfYmUzMihkbWFfYmFzZSwgaW5fYmUzMihkbWFfYmFzZSkgJiB+UUNIQ0RfSU9TX1NTKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlZyAmIElOVFNUU19SRVJSKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVzcG9uc2UgRXJyb3JcbiIsIFNDQ19QQVRBX05BTUUpOworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWludHN0c19wb3J0LCBJTlRTVFNfUkVSUnxJTlRTVFNfQk1TSU5UKTsKKworCQkJb3V0X2JlMzIoZG1hX2Jhc2UsIGluX2JlMzIoZG1hX2Jhc2UpICYgflFDSENEX0lPU19TUyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyZWcgJiBJTlRTVFNfSUNFUlIpIHsKKwkJCW91dF9iZTMyKGRtYV9iYXNlLCBpbl9iZTMyKGRtYV9iYXNlKSAmIH5RQ0hDRF9JT1NfU1MpOworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSWxsZWdhbCBDb25maWd1cmF0aW9uXG4iLCBTQ0NfUEFUQV9OQU1FKTsKKwkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX0lDRVJSfElOVFNUU19CTVNJTlQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVnICYgSU5UU1RTX0JNU0lOVCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludGVybmFsIEJ1cyBFcnJvclxuIiwgU0NDX1BBVEFfTkFNRSk7CisJCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19CTVNJTlQpOworCisJCQlpZGVfZG9fcmVzZXQoZHJpdmUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVnICYgSU5UU1RTX0JNSEUpIHsKKwkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX0JNSEUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVnICYgSU5UU1RTX0FDVEVJTlQpIHsKKwkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX0FDVEVJTlQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVnICYgSU5UU1RTX0lPSVJRUykgeworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWludHN0c19wb3J0LCBJTlRTVFNfSU9JUlFTKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWRtYV9zdGF0ID0gX19zY2NfZG1hX2VuZChkcml2ZSk7CisJaWYgKGRhdGFfbG9zcykKKwkJZG1hX3N0YXQgfD0gMjsgLyogZW11bGF0ZSBETUEgZXJyb3IgKHRvIHJldHJ5IGNvbW1hbmQpICovCisJcmV0dXJuIGRtYV9zdGF0OworfQorCisvKiByZXR1cm5zIDEgaWYgZG1hIGlycSBpc3N1ZWQsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IHNjY19kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKKwl1MzIgaW50X3N0YXQgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfYmFzZSArIDB4MDE0KTsKKworCS8qIFNDQyBlcnJhdGEgQTI1MixBMzA4IHdvcmthcm91bmQ6IFN0ZXA0ICovCisJaWYgKChpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcikKKwkgICAgICYgQVRBX0VSUikgJiYKKwkgICAgKGludF9zdGF0ICYgSU5UU1RTX0lOVFJRKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBTQ0MgZXJyYXRhIEEzMDggd29ya2Fyb3VuZDogU3RlcDUgKHBvbGxpbmcgSU9JUlFTKSAqLworCWlmIChpbnRfc3RhdCAmIElOVFNUU19JT0lSUVMpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBzY2NfdWRtYV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBtYXNrID0gaHdpZi0+dWx0cmFfbWFzazsKKworCS8qIGVycmF0YSBBMzA4IHdvcmthcm91bmQ6IGxpbWl0IG5vbiBpZGVfZGlzayBkcml2ZSB0byBVRE1BNCAqLworCWlmICgoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSAmJiAobWFzayAmIDB4RTApKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW1pdCAlcyB0byBVRE1BNFxuIiwKKwkJICAgICAgIFNDQ19QQVRBX05BTUUsIGRyaXZlLT5uYW1lKTsKKwkJbWFzayA9IEFUQV9VRE1BNDsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworLyoqCisgKglzZXR1cF9tbWlvX3NjYwktCW1hcCBDVFJML0JNSUQgcmVnaW9uCisgKglAZGV2OiBQQ0kgZGV2aWNlIHdlIGFyZSBjb25maWd1cmluZworICoJQG5hbWU6IGRldmljZSBuYW1lCisgKgorICovCisKK3N0YXRpYyBpbnQgc2V0dXBfbW1pb19zY2MgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdm9pZCBfX2lvbWVtICpjdGxfYWRkcjsKKwl2b2lkIF9faW9tZW0gKmRtYV9hZGRyOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKKwkJaWYgKHNjY19wb3J0c1tpXS5jdGwgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSBNQVhfSFdJRlMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhkZXYsICgxIDw8IDIpIC0gMSwgbmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgcmVzZXJ2ZSByZXNvdXJjZXNcbiIsIG5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCWN0bF9hZGRyID0gcGNpX2lvcmVtYXBfYmFyKGRldiwgMCk7CisJaWYgKCFjdGxfYWRkcikKKwkJZ290byBmYWlsXzA7CisKKwlkbWFfYWRkciA9IHBjaV9pb3JlbWFwX2JhcihkZXYsIDEpOworCWlmICghZG1hX2FkZHIpCisJCWdvdG8gZmFpbF8xOworCisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKwlzY2NfcG9ydHNbaV0uY3RsID0gKHVuc2lnbmVkIGxvbmcpY3RsX2FkZHI7CisJc2NjX3BvcnRzW2ldLmRtYSA9ICh1bnNpZ25lZCBsb25nKWRtYV9hZGRyOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopICZzY2NfcG9ydHNbaV0pOworCisJcmV0dXJuIDE7CisKKyBmYWlsXzE6CisJaW91bm1hcChjdGxfYWRkcik7CisgZmFpbF8wOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IHNjY19pZGVfc2V0dXBfcGNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKK3sKKwlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CisJaW50IGksIHJjOworCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisJZm9yIChpID0gMDsgaSA8PSA4OyBpKyspCisJCWh3LmlvX3BvcnRzX2FycmF5W2ldID0gcG9ydHMtPmRtYSArIDB4MjAgKyBpICogNDsKKwlody5pcnEgPSBkZXYtPmlycTsKKwlody5kZXYgPSAmZGV2LT5kZXY7CisJaHcuY2hpcHNldCA9IGlkZV9wY2k7CisKKwlyYyA9IGlkZV9ob3N0X2FkZChkLCBod3MsICZob3N0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXBvcnRzLT5ob3N0ID0gaG9zdDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqCWluaXRfc2V0dXBfc2NjCS0Jc2V0IHVwIGFuIFNDQyBQQVRBIENvbnRyb2xsZXIKKyAqCUBkZXY6IFBDSSBkZXZpY2UKKyAqCUBkOiBJREUgcG9ydCBpbmZvCisgKgorICoJUGVyZm9ybSB0aGUgaW5pdGlhbCBzZXQgdXAgZm9yIHRoaXMgZGV2aWNlLgorICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfc2NjKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQoreworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBkbWFfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGNja2N0cmxfcG9ydDsKKwl1bnNpZ25lZCBsb25nIGludG1hc2tfcG9ydDsKKwl1bnNpZ25lZCBsb25nIG1vZGVfcG9ydDsKKwl1bnNpZ25lZCBsb25nIGVjbW9kZV9wb3J0OworCXUzMiByZWcgPSAwOworCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzOworCWludCByYzsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZW5kOworCisJcmMgPSBzZXR1cF9tbWlvX3NjYyhkZXYsIGQtPm5hbWUpOworCWlmIChyYyA8IDApCisJCWdvdG8gZW5kOworCisJcG9ydHMgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwljdGxfYmFzZSA9IHBvcnRzLT5jdGw7CisJZG1hX2Jhc2UgPSBwb3J0cy0+ZG1hOworCWNja2N0cmxfcG9ydCA9IGN0bF9iYXNlICsgMHhmZjA7CisJaW50bWFza19wb3J0ID0gZG1hX2Jhc2UgKyAweDAxMDsKKwltb2RlX3BvcnQgPSBjdGxfYmFzZSArIDB4MDI0OworCWVjbW9kZV9wb3J0ID0gY3RsX2Jhc2UgKyAweGYwMDsKKworCS8qIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24gKi8KKwlyZWcgPSAwOworCW91dF9iZTMyKCh2b2lkKiljY2tjdHJsX3BvcnQsIHJlZyk7CisJcmVnIHw9IENDS0NUUkxfQVRBQ0xLT0VOOworCW91dF9iZTMyKCh2b2lkKiljY2tjdHJsX3BvcnQsIHJlZyk7CisJcmVnIHw9IENDS0NUUkxfTENMS0VOIHwgQ0NLQ1RSTF9PQ0xLRU47CisJb3V0X2JlMzIoKHZvaWQqKWNja2N0cmxfcG9ydCwgcmVnKTsKKwlyZWcgfD0gQ0NLQ1RSTF9DUlNUOworCW91dF9iZTMyKCh2b2lkKiljY2tjdHJsX3BvcnQsIHJlZyk7CisKKwlmb3IgKDs7KSB7CisJCXJlZyA9IGluX2JlMzIoKHZvaWQqKWNja2N0cmxfcG9ydCk7CisJCWlmIChyZWcgJiBDQ0tDVFJMX0NSU1QpCisJCQlicmVhazsKKwkJdWRlbGF5KDUwMDApOworCX0KKworCXJlZyB8PSBDQ0tDVFJMX0FUQVJFU0VUOworCW91dF9iZTMyKCh2b2lkKiljY2tjdHJsX3BvcnQsIHJlZyk7CisKKwlvdXRfYmUzMigodm9pZCopZWNtb2RlX3BvcnQsIEVDTU9ERV9WQUxVRSk7CisJb3V0X2JlMzIoKHZvaWQqKW1vZGVfcG9ydCwgTU9ERV9KQ1VTRkVOKTsKKwlvdXRfYmUzMigodm9pZCopaW50bWFza19wb3J0LCBJTlRNQVNLX01TSyk7CisKKwlyYyA9IHNjY19pZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOworCisgZW5kOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgc2NjX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoreworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJCUhJSEkgPSAweEZGOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKQorCQlvdXRfYmUzMigodm9pZCAqKWlvX3BvcnRzLT5kYXRhX2FkZHIsCisJCQkgKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCQlzY2NfaWRlX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCQlzY2NfaWRlX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJCXNjY19pZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJCXNjY19pZGVfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCQlzY2NfaWRlX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwkJc2NjX2lkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCQlzY2NfaWRlX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCisJCQkgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHNjY190Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3sKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZkcml2ZS0+aHdpZi0+aW9fcG9ydHM7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCQl1MTYgZGF0YSA9ICh1MTYpaW5fYmUzMigodm9pZCAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOworCisJCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7CisJCXRmLT5ob2JfZGF0YSA9IChkYXRhID4+IDgpICYgMHhmZjsKKwl9CisKKwkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCisJc2NjX2lkZV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwkJdGYtPmZlYXR1cmUgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJCXRmLT5uc2VjdCAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJCXRmLT5sYmFsICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwkJdGYtPmxiYW0gICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCQl0Zi0+bGJhaCAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwkJdGYtPmRldmljZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwkJc2NjX2lkZV9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJCXRmLT5ob2JfbnNlY3QgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQkJdGYtPmhvYl9sYmFsICAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJCXRmLT5ob2JfbGJhbSAgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCQl0Zi0+aG9iX2xiYWggICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNjY19pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKKworCWxlbisrOworCisJaWYgKGRyaXZlLT5pb18zMmJpdCkgeworCQlzY2NfaWRlX2luc2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCisJCWlmICgobGVuICYgMykgPj0gMikKKwkJCXNjY19pZGVfaW5zdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCX0gZWxzZQorCQlzY2NfaWRlX2luc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworfQorCitzdGF0aWMgdm9pZCBzY2Nfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCAgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CisKKwlsZW4rKzsKKworCWlmIChkcml2ZS0+aW9fMzJiaXQpIHsKKwkJc2NjX2lkZV9vdXRzbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisKKwkJaWYgKChsZW4gJiAzKSA+PSAyKQorCQkJc2NjX2lkZV9vdXRzdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCX0gZWxzZQorCQlzY2NfaWRlX291dHN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKK30KKworLyoqCisgKglpbml0X21taW9faW9wc19zY2MJLQlzZXQgdXAgdGhlIGlvcHMgZm9yIE1NSU8KKyAqCUBod2lmOiBpbnRlcmZhY2UgdG8gc2V0IHVwCisgKgorICovCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X21taW9faW9wc19zY2MoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBvcnRzLT5kbWE7CisKKwlpZGVfc2V0X2h3aWZkYXRhKGh3aWYsIHBvcnRzKTsKKworCWh3aWYtPmRtYV9iYXNlID0gZG1hX2Jhc2U7CisJaHdpZi0+Y29uZmlnX2RhdGEgPSBwb3J0cy0+Y3RsOworfQorCisvKioKKyAqCWluaXRfaW9wc19zY2MJLQlzZXQgdXAgaW9wcworICoJQGh3aWY6IGludGVyZmFjZSB0byBzZXQgdXAKKyAqCisgKglEbyB0aGUgYmFzaWMgc2V0dXAgZm9yIHRoZSBTQ0MgaGFyZHdhcmUgaW50ZXJmYWNlCisgKglhbmQgdGhlbiBkbyB0aGUgTU1JTyBzZXR1cC4KKyAqLworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9pb3BzX3NjYyhpZGVfaHdpZl90ICpod2lmKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CisKKwlod2lmLT5od2lmX2RhdGEgPSBOVUxMOworCWlmIChwY2lfZ2V0X2RydmRhdGEoZGV2KSA9PSBOVUxMKQorCQlyZXR1cm47CisJaW5pdF9tbWlvX2lvcHNfc2NjKGh3aWYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzY2NfaW5pdF9kbWEoaWRlX2h3aWZfdCAqaHdpZiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQoreworCXJldHVybiBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShod2lmKTsKK30KKworc3RhdGljIHU4IHNjY19jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlyZXR1cm4gQVRBX0NCTF9QQVRBODA7Cit9CisKKy8qKgorICoJaW5pdF9od2lmX3NjYwktCXNldCB1cCBod2lmCisgKglAaHdpZjogaW50ZXJmYWNlIHRvIHNldCB1cAorICoKKyAqCVdlIGRvIHRoZSBiYXNpYyBzZXQgdXAgb2YgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUuIFRoZSBTQ0MKKyAqCXJlcXVpcmVzIHNldmVyYWwgY3VzdG9tIGhhbmRsZXJzIHNvIHdlIG92ZXJyaWRlIHRoZSBkZWZhdWx0CisgKglpZGUgRE1BIGhhbmRsZXJzIGFwcHJvcHJpYXRlbHkuCisgKi8KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9zY2MoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwkvKiBQVEVSQUREICovCisJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIDB4MDE4KSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKKworCWlmIChpbl9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+Y29uZmlnX2RhdGEgKyAweGZmMCkpICYgQ0NLQ1RSTF9BVEFDTEtPRU4pCisJCWh3aWYtPnVsdHJhX21hc2sgPSBBVEFfVURNQTY7IC8qIDEzM01IeiAqLworCWVsc2UKKwkJaHdpZi0+dWx0cmFfbWFzayA9IEFUQV9VRE1BNTsgLyogMTAwTUh6ICovCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBzY2NfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gc2NjX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gc2NjX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBzY2NfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBzY2NfcmVhZF9zZmZfZG1hX3N0YXR1cywKKworCS5zZXRfaXJxCQk9IHNjY19zZXRfaXJxLAorCisJLnRmX2xvYWQJCT0gc2NjX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gc2NjX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBzY2NfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gc2NjX291dHB1dF9kYXRhLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgc2NjX3BvcnRfb3BzID0geworCS5zZXRfcGlvX21vZGUJCT0gc2NjX3NldF9waW9fbW9kZSwKKwkuc2V0X2RtYV9tb2RlCQk9IHNjY19zZXRfZG1hX21vZGUsCisJLnVkbWFfZmlsdGVyCQk9IHNjY191ZG1hX2ZpbHRlciwKKwkuY2FibGVfZGV0ZWN0CQk9IHNjY19jYWJsZV9kZXRlY3QsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNjY19kbWFfb3BzID0geworCS5kbWFfaG9zdF9zZXQJCT0gc2NjX2RtYV9ob3N0X3NldCwKKwkuZG1hX3NldHVwCQk9IHNjY19kbWFfc2V0dXAsCisJLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAorCS5kbWFfc3RhcnQJCT0gc2NjX2RtYV9zdGFydCwKKwkuZG1hX2VuZAkJPSBzY2NfZG1hX2VuZCwKKwkuZG1hX3Rlc3RfaXJxCQk9IHNjY19kbWFfdGVzdF9pcnEsCisJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCit9OworCisjZGVmaW5lIERFQ0xBUkVfU0NDX0RFVihuYW1lX3N0cikJCQlcCisgIHsJCQkJCQkJXAorICAgICAgLm5hbWUJCT0gbmFtZV9zdHIsCQkJXAorICAgICAgLmluaXRfaW9wcwk9IGluaXRfaW9wc19zY2MsCQlcCisgICAgICAuaW5pdF9kbWEJCT0gc2NjX2luaXRfZG1hLAkJCVwKKyAgICAgIC5pbml0X2h3aWYJPSBpbml0X2h3aWZfc2NjLAkJXAorICAgICAgLnRwX29wcwkJPSAmc2NjX3RwX29wcywJCVwKKyAgICAgIC5wb3J0X29wcwkJPSAmc2NjX3BvcnRfb3BzLAkJXAorICAgICAgLmRtYV9vcHMJCT0gJnNjY19kbWFfb3BzLAkJCVwKKyAgICAgIC5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwJCVwKKyAgICAgIC5waW9fbWFzawkJPSBBVEFfUElPNCwJCQlcCisgIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNjY19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJLyogMCAqLyBERUNMQVJFX1NDQ19ERVYoInNjY0lERSIpLAorfTsKKworLyoqCisgKglzY2NfaW5pdF9vbmUJLQlwY2kgbGF5ZXIgZGlzY292ZXJ5IGVudHJ5CisgKglAZGV2OiBQQ0kgZGV2aWNlCisgKglAaWQ6IGlkZW50IHRhYmxlIGVudHJ5CisgKgorICoJQ2FsbGVkIGJ5IHRoZSBQQ0kgY29kZSB3aGVuIGl0IGZpbmRzIGFuIFNDQyBQQVRBIGNvbnRyb2xsZXIuCisgKglXZSB0aGVuIHVzZSB0aGUgSURFIFBDSSBnZW5lcmljIGhlbHBlciB0byBkbyBtb3N0IG9mIHRoZSB3b3JrLgorICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNjY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGluaXRfc2V0dXBfc2NjKGRldiwgJnNjY19jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdKTsKK30KKworLyoqCisgKglzY2NfcmVtb3ZlCS0JcGNpIGxheWVyIHJlbW92ZSBlbnRyeQorICoJQGRldjogUENJIGRldmljZQorICoKKyAqCUNhbGxlZCBieSB0aGUgUENJIGNvZGUgd2hlbiBpdCByZW1vdmVzIGFuIFNDQyBQQVRBIGNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNjY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBvcnRzLT5ob3N0OworCisJaWRlX2hvc3RfcmVtb3ZlKGhvc3QpOworCisJaW91bm1hcCgodm9pZCopcG9ydHMtPmRtYSk7CisJaW91bm1hcCgodm9pZCopcG9ydHMtPmN0bCk7CisJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhkZXYsICgxIDw8IDIpIC0gMSk7CisJbWVtc2V0KHBvcnRzLCAwLCBzaXplb2YoKnBvcnRzKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzY2NfcGNpX3RibFtdID0geworCXsgUENJX1ZERVZJQ0UoVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfU0NDX0FUQSksIDAgfSwKKwl7IDAsIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjY19wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNjY19wY2lfZHJpdmVyID0geworCS5uYW1lID0gIlNDQyBJREUiLAorCS5pZF90YWJsZSA9IHNjY19wY2lfdGJsLAorCS5wcm9iZSA9IHNjY19pbml0X29uZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2NjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IHNjY19pZGVfaW5pdCh2b2lkKQoreworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2NjX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzY2NfaWRlX2luaXQpOworLyogLS0gTm8gZXhpdCBjb2RlPworc3RhdGljIHZvaWQgc2NjX2lkZV9leGl0KHZvaWQpCit7CisJaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NjX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc2NjX2lkZV9leGl0KTsKKyAqLworCisKK01PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIFRvc2hpYmEgU0NDIElERSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvc2dpaW9jNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWZhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMKQEAgLTAsMCArMSw2NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgbm90aWNlLCBzZWU6CisgKgorICogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0dlbkluZm8vTm90aWNlRXhwbGFuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2M0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworI2RlZmluZSBEUlZfTkFNRSAiU0dJSU9DNCIKKworLyogSU9DNCBTcGVjaWZpYyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJT0M0X0NNRF9PRkZTRVQJCTB4MTAwCisjZGVmaW5lIElPQzRfQ1RSTF9PRkZTRVQJMHgxMjAKKyNkZWZpbmUgSU9DNF9ETUFfT0ZGU0VUCQkweDE0MAorI2RlZmluZSBJT0M0X0lOVFJfT0ZGU0VUCTB4MAorCisjZGVmaW5lIElPQzRfVElNSU5HCQkweDAwCisjZGVmaW5lIElPQzRfRE1BX1BUUl9MCQkweDAxCisjZGVmaW5lIElPQzRfRE1BX1BUUl9ICQkweDAyCisjZGVmaW5lIElPQzRfRE1BX0FERFJfTAkJMHgwMworI2RlZmluZSBJT0M0X0RNQV9BRERSX0gJCTB4MDQKKyNkZWZpbmUgSU9DNF9CQ19ERVYJCTB4MDUKKyNkZWZpbmUgSU9DNF9CQ19NRU0JCTB4MDYKKyNkZWZpbmUJSU9DNF9ETUFfQ1RSTAkJMHgwNworI2RlZmluZQlJT0M0X0RNQV9FTkRfQUREUgkweDA4CisKKy8qIEJpdHMgaW4gdGhlIElPQzQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJSU9DNF9TX0RNQV9TVEFSVAkweDAxCisjZGVmaW5lCUlPQzRfU19ETUFfU1RPUAkJMHgwMgorI2RlZmluZQlJT0M0X1NfRE1BX0RJUgkJMHgwNAorI2RlZmluZQlJT0M0X1NfRE1BX0FDVElWRQkweDA4CisjZGVmaW5lCUlPQzRfU19ETUFfRVJST1IJMHgxMAorI2RlZmluZQlJT0M0X0FUQV9NRU1FUlIJCTB4MDIKKworLyogUmVhZC9Xcml0ZSBEaXJlY3Rpb25zICovCisjZGVmaW5lCUlPQzRfRE1BX1dSSVRFCQkweDA0CisjZGVmaW5lCUlPQzRfRE1BX1JFQUQJCTB4MDAKKworLyogSW50ZXJydXB0IFJlZ2lzdGVyIE9mZnNldHMgKi8KKyNkZWZpbmUgSU9DNF9JTlRSX1JFRwkJMHgwMworI2RlZmluZQlJT0M0X0lOVFJfU0VUCQkweDA1CisjZGVmaW5lCUlPQzRfSU5UUl9DTEVBUgkJMHgwNworCisjZGVmaW5lIElPQzRfSURFX0NBQ0hFTElORV9TSVpFCTEyOAorI2RlZmluZSBJT0M0X0NNRF9DVExfQkxLX1NJWkUJMHgyMAorI2RlZmluZSBJT0M0X1NVUFBPUlRFRF9GSVJNV0FSRV9SRVYgNDYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiB0aW1pbmdfcmVnMDsKKwl1MzIgdGltaW5nX3JlZzE7CisJdTMyIGxvd19tZW1fcHRyOworCXUzMiBoaWdoX21lbV9wdHI7CisJdTMyIGxvd19tZW1fYWRkcjsKKwl1MzIgaGlnaF9tZW1fYWRkcjsKKwl1MzIgZGV2X2J5dGVfY291bnQ7CisJdTMyIG1lbV9ieXRlX2NvdW50OworCXUzMiBzdGF0dXM7Cit9IGlvYzRfZG1hX3JlZ3NfdDsKKworLyogRWFjaCBQaHlzaWNhbCBSZWdpb24gRGVzY3JpcHRvciBFbnRyeSBzaXplIGlzIDE2IGJ5dGVzICgyICogNjQgYml0cykgKi8KKy8qIElPQzQgaGFzIG9ubHkgMSBJREUgY2hhbm5lbCAqLworI2RlZmluZSBJT0M0X1BSRF9CWVRFUyAgICAgICAxNgorI2RlZmluZSBJT0M0X1BSRF9FTlRSSUVTICAgICAoUEFHRV9TSVpFIC8oNCpJT0M0X1BSRF9CWVRFUykpCisKKworc3RhdGljIHZvaWQKK3NnaWlvYzRfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqIGh3LCB1bnNpZ25lZCBsb25nIGRhdGFfcG9ydCwKKwkJCXVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCB1bnNpZ25lZCBsb25nIGlycV9wb3J0KQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gZGF0YV9wb3J0OworCWludCBpOworCisJLyogUmVnaXN0ZXJzIGFyZSB3b3JkICgzMiBiaXQpIGFsaWduZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDc7IGkrKykKKwkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnICsgaSAqIDQ7CisKKwlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7CisJaHctPmlvX3BvcnRzLmlycV9hZGRyID0gaXJxX3BvcnQ7Cit9CisKK3N0YXRpYyBpbnQKK3NnaWlvYzRfY2hlY2tpcnEoaWRlX2h3aWZfdCAqIGh3aWYpCit7CisJdW5zaWduZWQgbG9uZyBpbnRyX2FkZHIgPQorCQlod2lmLT5pb19wb3J0cy5pcnFfYWRkciArIElPQzRfSU5UUl9SRUcgKiA0OworCisJaWYgKCh1OClyZWFkbCgodm9pZCBfX2lvbWVtICopaW50cl9hZGRyKSAmIDB4MDMpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBzZ2lpb2M0X3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKik7CisKK3N0YXRpYyBpbnQKK3NnaWlvYzRfY2xlYXJpcnEoaWRlX2RyaXZlX3QgKiBkcml2ZSkKK3sKKwl1MzIgaW50cl9yZWc7CisJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgb3RoZXJfaXIgPSBpb19wb3J0cy0+aXJxX2FkZHIgKyAoSU9DNF9JTlRSX1JFRyA8PCAyKTsKKworCS8qIENvZGUgdG8gY2hlY2sgZm9yIFBDSSBlcnJvciBjb25kaXRpb25zICovCisJaW50cl9yZWcgPSByZWFkbCgodm9pZCBfX2lvbWVtICopb3RoZXJfaXIpOworCWlmIChpbnRyX3JlZyAmIDB4MDMpIHsgLyogVmFsaWQgSU9DNC1JREUgaW50ZXJydXB0ICovCisJCS8qCisJCSAqIFVzaW5nIHNnaWlvYzRfcmVhZF9zdGF0dXMgdG8gcmVhZCB0aGUgU3RhdHVzIHJlZ2lzdGVyIGhhcyBhCisJCSAqIHNpZGUgZWZmZWN0IG9mIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQuICBUaGUgZmlyc3QgcmVhZCBzaG91bGQKKwkJICogY2xlYXIgaXQgaWYgaXQgaXMgc2V0LiAgVGhlIHNlY29uZCByZWFkIHNob3VsZCByZXR1cm4KKwkJICogYSAiY2xlYXIiIHN0YXR1cyBpZiBpdCBnb3QgY2xlYXJlZC4gIElmIG5vdCwgdGhlbiBzcGluCisJCSAqIGZvciBhIGJpdCB0cnlpbmcgdG8gY2xlYXIgaXQuCisJCSAqLworCQl1OCBzdGF0ID0gc2dpaW9jNF9yZWFkX3N0YXR1cyhod2lmKTsKKwkJaW50IGNvdW50ID0gMDsKKworCQlzdGF0ID0gc2dpaW9jNF9yZWFkX3N0YXR1cyhod2lmKTsKKwkJd2hpbGUgKChzdGF0ICYgQVRBX0JVU1kpICYmIChjb3VudCsrIDwgMTAwKSkgeworCQkJdWRlbGF5KDEpOworCQkJc3RhdCA9IHNnaWlvYzRfcmVhZF9zdGF0dXMoaHdpZik7CisJCX0KKworCQlpZiAoaW50cl9yZWcgJiAweDAyKSB7CisJCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCQkJLyogRXJyb3Igd2hlbiB0cmFuc2ZlcnJpbmcgRE1BIGRhdGEgb24gUENJIGJ1cyAqLworCQkJdTMyIHBjaV9lcnJfYWRkcl9sb3csIHBjaV9lcnJfYWRkcl9oaWdoLAorCQkJICAgIHBjaV9zdGF0X2NtZF9yZWc7CisKKwkJCXBjaV9lcnJfYWRkcl9sb3cgPQorCQkJCXJlYWRsKCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+aXJxX2FkZHIpOworCQkJcGNpX2Vycl9hZGRyX2hpZ2ggPQorCQkJCXJlYWRsKCh2b2lkIF9faW9tZW0gKikoaW9fcG9ydHMtPmlycV9hZGRyICsgNCkpOworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsCisJCQkJCSAgICAgICZwY2lfc3RhdF9jbWRfcmVnKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcyglcykgOiBQQ0kgQnVzIEVycm9yIHdoZW4gZG9pbmcgRE1BOiIKKwkJCQkgICAiIHN0YXR1cy1jbWQgcmVnIGlzIDB4JXhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLCBwY2lfc3RhdF9jbWRfcmVnKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcyglcykgOiBQQ0kgRXJyb3IgQWRkcmVzcyBpcyAweCV4JXhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLAorCQkJICAgICAgIHBjaV9lcnJfYWRkcl9oaWdoLCBwY2lfZXJyX2FkZHJfbG93KTsKKwkJCS8qIENsZWFyIHRoZSBQQ0kgRXJyb3IgaW5kaWNhdG9yICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsIDB4MDAwMDAxNDYpOworCQl9CisKKwkJLyogQ2xlYXIgdGhlIEludGVycnVwdCwgRXJyb3IgYml0cyBvbiB0aGUgSU9DNCAqLworCQl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKW90aGVyX2lyKTsKKworCQlpbnRyX3JlZyA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilvdGhlcl9pcik7CisJfQorCisJcmV0dXJuIGludHJfcmVnICYgMzsKK30KKworc3RhdGljIHZvaWQgc2dpaW9jNF9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKKwl1bnNpZ25lZCBsb25nIGlvYzRfZG1hX2FkZHIgPSBod2lmLT5kbWFfYmFzZSArIElPQzRfRE1BX0NUUkwgKiA0OworCXVuc2lnbmVkIGludCByZWcgPSByZWFkbCgodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CisJdW5zaWduZWQgaW50IHRlbXBfcmVnID0gcmVnIHwgSU9DNF9TX0RNQV9TVEFSVDsKKworCXdyaXRlbCh0ZW1wX3JlZywgKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOworfQorCitzdGF0aWMgdTMyCitzZ2lpb2M0X2lkZV9kbWFfc3RvcChpZGVfaHdpZl90ICpod2lmLCB1NjQgZG1hX2Jhc2UpCit7CisJdW5zaWduZWQgbG9uZyBpb2M0X2RtYV9hZGRyID0gZG1hX2Jhc2UgKyBJT0M0X0RNQV9DVFJMICogNDsKKwl1MzIJaW9jNF9kbWE7CisJaW50CWNvdW50OworCisJY291bnQgPSAwOworCWlvYzRfZG1hID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOworCXdoaWxlICgoaW9jNF9kbWEgJiBJT0M0X1NfRE1BX1NUT1ApICYmIChjb3VudCsrIDwgMjAwKSkgeworCQl1ZGVsYXkoMSk7CisJCWlvYzRfZG1hID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOworCX0KKwlyZXR1cm4gaW9jNF9kbWE7Cit9CisKKy8qIFN0b3BzIHRoZSBJT0M0IERNQSBFbmdpbmUgKi8KK3N0YXRpYyBpbnQgc2dpaW9jNF9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwl1MzIgaW9jNF9kbWEsIGJjX2RldiwgYmNfbWVtLCBudW0sIHZhbGlkID0gMCwgY250ID0gMDsKKwlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGh3aWYtPmRtYV9iYXNlOworCWludCBkbWFfc3RhdCA9IDA7CisJdW5zaWduZWQgbG9uZyAqZW5kaW5nX2RtYSA9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7CisKKwl3cml0ZWwoSU9DNF9TX0RNQV9TVE9QLCAodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQpKTsKKworCWlvYzRfZG1hID0gc2dpaW9jNF9pZGVfZG1hX3N0b3AoaHdpZiwgZG1hX2Jhc2UpOworCisJaWYgKGlvYzRfZG1hICYgSU9DNF9TX0RNQV9TVE9QKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzKCVzKTogSU9DNCBETUEgU1RPUCBiaXQgaXMgc3RpbGwgMSA6IgorCQkgICAgICAgImlvYzRfZG1hX3JlZyAweCV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLCBpb2M0X2RtYSk7CisJCWRtYV9zdGF0ID0gMTsKKwl9CisKKwkvKgorCSAqIFRoZSBJT0M0IHdpbGwgRE1BIDEncyB0byB0aGUgZW5kaW5nIGRtYSBhcmVhIHRvIGluZGljYXRlIHRoYXQKKwkgKiBwcmV2aW91cyBkYXRhIERNQSBpcyBjb21wbGV0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgcmVsYXhlZAorCSAqIG9yZGVyaW5nIGJldHdlZW4gcmVnaXN0ZXIgcmVhZHMgYW5kIERNQSB3cml0ZXMgb24gdGhlIEFsdGl4LgorCSAqLworCXdoaWxlICgoY250KysgPCAyMDApICYmICghdmFsaWQpKSB7CisJCWZvciAobnVtID0gMDsgbnVtIDwgMTY7IG51bSsrKSB7CisJCQlpZiAoZW5kaW5nX2RtYVtudW1dKSB7CisJCQkJdmFsaWQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXVkZWxheSgxKTsKKwl9CisJaWYgKCF2YWxpZCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSA6IERNQSBpbmNvbXBsZXRlXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgIGRyaXZlLT5uYW1lKTsKKwkJZG1hX3N0YXQgPSAxOworCX0KKworCWJjX2RldiA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0JDX0RFViAqIDQpKTsKKwliY19tZW0gPSByZWFkbCgodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9CQ19NRU0gKiA0KSk7CisKKwlpZiAoKGJjX2RldiAmIDB4MDFGRikgfHwgKGJjX21lbSAmIDB4MUZGKSkgeworCQlpZiAoYmNfZGV2ID4gYmNfbWVtICsgOCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzKCVzKTogV0FSTklORyEhIGJ5dGVfY291bnRfZGV2ICVkICIKKwkJCSAgICAgICAiIT0gYnl0ZV9jb3VudF9tZW0gJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGRyaXZlLT5uYW1lLCBiY19kZXYsIGJjX21lbSk7CisJCX0KKwl9CisKKwlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKKwlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CisKKwlyZXR1cm4gZG1hX3N0YXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNnaWlvYzRfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCit7Cit9CisKKy8qIHJldHVybnMgMSBpZiBkbWEgaXJxIGlzc3VlZCwgMCBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQgc2dpaW9jNF9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBzZ2lpb2M0X2NoZWNraXJxKEhXSUYoZHJpdmUpKTsKK30KKworc3RhdGljIHZvaWQgc2dpaW9jNF9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCit7CisJaWYgKCFvbikKKwkJc2dpaW9jNF9jbGVhcmlycShkcml2ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZ2lpb2M0X3Jlc2V0cHJvYyhpZGVfZHJpdmVfdCAqIGRyaXZlKQoreworCXNnaWlvYzRfZG1hX2VuZChkcml2ZSk7CisJc2dpaW9jNF9jbGVhcmlycShkcml2ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZ2lpb2M0X2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqIGRyaXZlKQoreworCXNnaWlvYzRfcmVzZXRwcm9jKGRyaXZlKTsKKworCWlkZV9kbWFfbG9zdF9pcnEoZHJpdmUpOworfQorCitzdGF0aWMgdTggc2dpaW9jNF9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyOworCXU4IHJlZyA9ICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKKworCWlmICghKHJlZyAmIEFUQV9CVVNZKSkgewkvKiBOb3QgYnVzeS4uLiBjaGVjayBmb3IgaW50ZXJydXB0ICovCisJCXVuc2lnbmVkIGxvbmcgb3RoZXJfaXIgPSBwb3J0IC0gMHgxMTA7CisJCXVuc2lnbmVkIGludCBpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOworCisJCS8qIENsZWFyIHRoZSBJbnRlcnJ1cHQsIEVycm9yIGJpdHMgb24gdGhlIElPQzQgKi8KKwkJaWYgKGludHJfcmVnICYgMHgwMykgeworCQkJd3JpdGVsKDB4MDMsICh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOworCQkJaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKKwkJfQorCX0KKworCXJldHVybiByZWc7Cit9CisKKy8qIENyZWF0ZXMgYSBkbWEgbWFwIGZvciB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBlbnRyaWVzICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAoraWRlX2RtYV9zZ2lpb2M0KGlkZV9od2lmX3QgKmh3aWYsIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CisJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApICsgSU9DNF9ETUFfT0ZGU0VUOworCWludCBudW1fcG9ydHMgPSBzaXplb2YgKGlvYzRfZG1hX3JlZ3NfdCk7CisJdm9pZCAqcGFkOworCisJcHJpbnRrKEtFUk5fSU5GTyAiICAgICVzOiBNTUlPLURNQVxuIiwgaHdpZi0+bmFtZSk7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMsIGh3aWYtPm5hbWUpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyglcykgLS0gRVJST1I6IGFkZHJlc3NlcyAweCUwOGx4IHRvIDB4JTA4bHggIgorCQkgICAgICAgImFscmVhZHkgaW4gdXNlXG4iLCBfX2Z1bmNfXywgaHdpZi0+bmFtZSwKKwkJICAgICAgIGRtYV9iYXNlLCBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOworCQlyZXR1cm4gLTE7CisJfQorCisJaHdpZi0+ZG1hX2Jhc2UgPSAodW5zaWduZWQgbG9uZylod2lmLT5pb19wb3J0cy5pcnFfYWRkciArCisJCQkgSU9DNF9ETUFfT0ZGU0VUOworCisJaHdpZi0+c2dfbWF4X25lbnRzID0gSU9DNF9QUkRfRU5UUklFUzsKKworCWh3aWYtPnByZF9tYXhfbmVudHMgPSBJT0M0X1BSRF9FTlRSSUVTOworCWh3aWYtPnByZF9lbnRfc2l6ZSA9IElPQzRfUFJEX0JZVEVTOworCisJaWYgKGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpKQorCQlnb3RvIGRtYV9wY2lfYWxsb2NfZmFpbHVyZTsKKworCXBhZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgSU9DNF9JREVfQ0FDSEVMSU5FX1NJWkUsCisJCQkJICAgKGRtYV9hZGRyX3QgKikmaHdpZi0+ZXh0cmFfYmFzZSk7CisJaWYgKHBhZCkgeworCQlpZGVfc2V0X2h3aWZkYXRhKGh3aWYsIHBhZCk7CisJCXJldHVybiAwOworCX0KKworCWlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaHdpZik7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSAtLSBFUlJPUjogVW5hYmxlIHRvIGFsbG9jYXRlIERNQSBtYXBzXG4iLAorCSAgICAgICBfX2Z1bmNfXywgaHdpZi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNoYW5naW5nIGZyb20gRE1BIHRvIFBJTyBtb2RlIiwgaHdpZi0+bmFtZSk7CisKK2RtYV9wY2lfYWxsb2NfZmFpbHVyZToKKwlyZWxlYXNlX21lbV9yZWdpb24oZG1hX2Jhc2UsIG51bV9wb3J0cyk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qIEluaXRpYWxpemVzIHRoZSBJT0M0IERNQSBFbmdpbmUgKi8KK3N0YXRpYyB2b2lkCitzZ2lpb2M0X2NvbmZpZ3VyZV9mb3JfZG1hKGludCBkbWFfZGlyZWN0aW9uLCBpZGVfZHJpdmVfdCAqIGRyaXZlKQoreworCXUzMiBpb2M0X2RtYTsKKwlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGh3aWYtPmRtYV9iYXNlOworCXVuc2lnbmVkIGxvbmcgaW9jNF9kbWFfYWRkciA9IGRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQ7CisJdTMyIGRtYV9hZGRyLCBlbmRpbmdfZG1hX2FkZHI7CisKKwlpb2M0X2RtYSA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilpb2M0X2RtYV9hZGRyKTsKKworCWlmIChpb2M0X2RtYSAmIElPQzRfU19ETUFfQUNUSVZFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSIlcyglcyk6V2FybmluZyEhIERNQSBmcm9tIHByZXZpb3VzIHRyYW5zZmVyIHdhcyBzdGlsbCBhY3RpdmVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZHJpdmUtPm5hbWUpOworCQl3cml0ZWwoSU9DNF9TX0RNQV9TVE9QLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CisJCWlvYzRfZG1hID0gc2dpaW9jNF9pZGVfZG1hX3N0b3AoaHdpZiwgZG1hX2Jhc2UpOworCisJCWlmIChpb2M0X2RtYSAmIElPQzRfU19ETUFfU1RPUCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcyglcykgOiBJT0M0IERtYSBTVE9QIGJpdCBpcyBzdGlsbCAxXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBkcml2ZS0+bmFtZSk7CisJfQorCisJaW9jNF9kbWEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CisJaWYgKGlvYzRfZG1hICYgSU9DNF9TX0RNQV9FUlJPUikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXMoJXMpIDogV2FybmluZyEhIC0gRE1BIEVycm9yIGR1cmluZyBQcmV2aW91cyIKKwkJICAgICAgICIgdHJhbnNmZXIgfCBzdGF0dXMgMHgleFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkcml2ZS0+bmFtZSwgaW9jNF9kbWEpOworCQl3cml0ZWwoSU9DNF9TX0RNQV9TVE9QLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CisJCWlvYzRfZG1hID0gc2dpaW9jNF9pZGVfZG1hX3N0b3AoaHdpZiwgZG1hX2Jhc2UpOworCisJCWlmIChpb2M0X2RtYSAmIElPQzRfU19ETUFfU1RPUCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcyglcykgOiBJT0M0IERNQSBTVE9QIGJpdCBpcyBzdGlsbCAxXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBkcml2ZS0+bmFtZSk7CisJfQorCisJLyogQWRkcmVzcyBvZiB0aGUgU2NhdHRlciBHYXRoZXIgTGlzdCAqLworCWRtYV9hZGRyID0gY3B1X3RvX2xlMzIoaHdpZi0+ZG1hdGFibGVfZG1hKTsKKwl3cml0ZWwoZG1hX2FkZHIsICh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0RNQV9QVFJfTCAqIDQpKTsKKworCS8qIEFkZHJlc3Mgb2YgdGhlIEVuZGluZyBETUEgKi8KKwltZW1zZXQoaWRlX2dldF9od2lmZGF0YShod2lmKSwgMCwgSU9DNF9JREVfQ0FDSEVMSU5FX1NJWkUpOworCWVuZGluZ19kbWFfYWRkciA9IGNwdV90b19sZTMyKGh3aWYtPmV4dHJhX2Jhc2UpOworCXdyaXRlbChlbmRpbmdfZG1hX2FkZHIsICh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0RNQV9FTkRfQUREUiAqIDQpKTsKKworCXdyaXRlbChkbWFfZGlyZWN0aW9uLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CisJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7Cit9CisKKy8qIElPQzQgU2NhdHRlciBHYXRoZXIgbGlzdCBGb3JtYXQgCQkJCQkgKi8KKy8qIDEyOCBCaXQgZW50cmllcyB0byBzdXBwb3J0IDY0IGJpdCBhZGRyZXNzZXMgaW4gdGhlIGZ1dHVyZQkJICovCisvKiBUaGUgU2NhdHRlciBHYXRoZXIgbGlzdCBFbnRyeSBzaG91bGQgYmUgaW4gdGhlIEJJRy1FTkRJQU4gRm9ybWF0CSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiB8IFVwcGVyIDMyIGJpdHMgLSBaZXJvICAgICAgICAgICB8CSAJTG93ZXIgMzIgYml0cy0gYWRkcmVzcyB8ICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHwgVXBwZXIgMzIgYml0cyAtIFplcm8JICAgIHxFT0x8IDE1IHVudXNlZCAgICAgfCAxNiBCaXQgTGVuZ3RofCAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBDcmVhdGVzIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0LCBETUEgVGFibGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NnaWlvYzRfYnVpbGRfZG1hX3RhYmxlKGlkZV9kcml2ZV90ICogZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGRkaXIpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCXVuc2lnbmVkIGludCAqdGFibGUgPSBod2lmLT5kbWF0YWJsZV9jcHU7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMCwgaSA9IDE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKKworCWlmICghaSkKKwkJcmV0dXJuIDA7CS8qIHNnbGlzdCBvZiBsZW5ndGggWmVybyAqLworCisJc2cgPSBod2lmLT5zZ190YWJsZTsKKwl3aGlsZSAoaSAmJiBzZ19kbWFfbGVuKHNnKSkgeworCQlkbWFfYWRkcl90IGN1cl9hZGRyOworCQlpbnQgY3VyX2xlbjsKKwkJY3VyX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCWN1cl9sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKworCQl3aGlsZSAoY3VyX2xlbikgeworCQkJaWYgKGNvdW50KysgPj0gSU9DNF9QUkRfRU5UUklFUykgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgIiVzOiBETUEgdGFibGUgdG9vIHNtYWxsXG4iLAorCQkJCSAgICAgICBkcml2ZS0+bmFtZSk7CisJCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7CisJCQl9IGVsc2UgeworCQkJCXUzMiBiY291bnQgPQorCQkJCSAgICAweDEwMDAwIC0gKGN1cl9hZGRyICYgMHhmZmZmKTsKKworCQkJCWlmIChiY291bnQgPiBjdXJfbGVuKQorCQkJCQliY291bnQgPSBjdXJfbGVuOworCisJCQkJLyogcHV0IHRoZSBhZGRyLCBsZW5ndGggaW4KKwkJCQkgKiB0aGUgSU9DNCBkbWEtdGFibGUgZm9ybWF0ICovCisJCQkJKnRhYmxlID0gMHgwOworCQkJCXRhYmxlKys7CisJCQkJKnRhYmxlID0gY3B1X3RvX2JlMzIoY3VyX2FkZHIpOworCQkJCXRhYmxlKys7CisJCQkJKnRhYmxlID0gMHgwOworCQkJCXRhYmxlKys7CisKKwkJCQkqdGFibGUgPSBjcHVfdG9fYmUzMihiY291bnQpOworCQkJCXRhYmxlKys7CisKKwkJCQljdXJfYWRkciArPSBiY291bnQ7CisJCQkJY3VyX2xlbiAtPSBiY291bnQ7CisJCQl9CisJCX0KKworCQlzZyA9IHNnX25leHQoc2cpOworCQlpLS07CisJfQorCisJaWYgKGNvdW50KSB7CisJCXRhYmxlLS07CisJCSp0YWJsZSB8PSBjcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKKwkJcmV0dXJuIGNvdW50OworCX0KKwordXNlX3Bpb19pbnN0ZWFkOgorCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKKworCXJldHVybiAwOwkJLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCit9CisKK3N0YXRpYyBpbnQgc2dpaW9jNF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCWludCBkZGlyOworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJZGRpciA9IFBDSV9ETUFfVE9ERVZJQ0U7CisJZWxzZQorCQlkZGlyID0gUENJX0RNQV9GUk9NREVWSUNFOworCisJaWYgKCEoY291bnQgPSBzZ2lpb2M0X2J1aWxkX2RtYV90YWJsZShkcml2ZSwgcnEsIGRkaXIpKSkgeworCQkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCisJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJLyogV3JpdGVzIFRPIHRoZSBJT0M0IEZST00gTWFpbiBNZW1vcnkgKi8KKwkJZGRpciA9IElPQzRfRE1BX1JFQUQ7CisJZWxzZQorCQkvKiBXcml0ZXMgRlJPTSB0aGUgSU9DNCBUTyBNYWluIE1lbW9yeSAqLworCQlkZGlyID0gSU9DNF9ETUFfV1JJVEU7CisKKwlzZ2lpb2M0X2NvbmZpZ3VyZV9mb3JfZG1hKGRkaXIsIGRyaXZlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgc2dpaW9jNF90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBzZ2lpb2M0X3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cywKKworCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAorCisJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgc2dpaW9jNF9wb3J0X29wcyA9IHsKKwkuc2V0X2RtYV9tb2RlCQk9IHNnaWlvYzRfc2V0X2RtYV9tb2RlLAorCS8qIHJlc2V0IERNQSBlbmdpbmUsIGNsZWFyIElSUXMgKi8KKwkucmVzZXRwcm9jCQk9IHNnaWlvYzRfcmVzZXRwcm9jLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZ2lpb2M0X2RtYV9vcHMgPSB7CisJLmRtYV9ob3N0X3NldAkJPSBzZ2lpb2M0X2RtYV9ob3N0X3NldCwKKwkuZG1hX3NldHVwCQk9IHNnaWlvYzRfZG1hX3NldHVwLAorCS5kbWFfc3RhcnQJCT0gc2dpaW9jNF9kbWFfc3RhcnQsCisJLmRtYV9lbmQJCT0gc2dpaW9jNF9kbWFfZW5kLAorCS5kbWFfdGVzdF9pcnEJCT0gc2dpaW9jNF9kbWFfdGVzdF9pcnEsCisJLmRtYV9sb3N0X2lycQkJPSBzZ2lpb2M0X2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNnaWlvYzRfcG9ydF9pbmZvIF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUJCQk9IERSVl9OQU1FLAorCS5jaGlwc2V0CQk9IGlkZV9wY2ksCisJLmluaXRfZG1hCQk9IGlkZV9kbWFfc2dpaW9jNCwKKwkudHBfb3BzCQkJPSAmc2dpaW9jNF90cF9vcHMsCisJLnBvcnRfb3BzCQk9ICZzZ2lpb2M0X3BvcnRfb3BzLAorCS5kbWFfb3BzCQk9ICZzZ2lpb2M0X2RtYV9vcHMsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8sCisJLm13ZG1hX21hc2sJCT0gQVRBX01XRE1BMl9PTkxZLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQKK3NnaWlvYzRfaWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGNtZF9iYXNlLCBpcnFwb3J0OworCXVuc2lnbmVkIGxvbmcgYmFyMCwgY21kX3BoeXNfYmFzZSwgY3RsOworCXZvaWQgX19pb21lbSAqdmlydF9iYXNlOworCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgcmM7CisKKwkvKiAgR2V0IHRoZSBDbWRCbGsgYW5kIEN0cmxCbGsgQmFzZSBSZWdpc3RlcnMgKi8KKwliYXIwID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJdmlydF9iYXNlID0gcGNpX2lvcmVtYXBfYmFyKGRldiwgMCk7CisJaWYgKHZpcnRfYmFzZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byByZW1hcCBCQVIgMCBhZGRyZXNzOiAweCVseFxuIiwKKwkJCQlEUlZfTkFNRSwgYmFyMCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljbWRfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2Jhc2UgKyBJT0M0X0NNRF9PRkZTRVQ7CisJY3RsID0gKHVuc2lnbmVkIGxvbmcpIHZpcnRfYmFzZSArIElPQzRfQ1RSTF9PRkZTRVQ7CisJaXJxcG9ydCA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2Jhc2UgKyBJT0M0X0lOVFJfT0ZGU0VUOworCisJY21kX3BoeXNfYmFzZSA9IGJhcjAgKyBJT0M0X0NNRF9PRkZTRVQ7CisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihjbWRfcGh5c19iYXNlLCBJT0M0X0NNRF9DVExfQkxLX1NJWkUsCisJCQkgICAgICAgRFJWX05BTUUpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyAtLSBFUlJPUjogYWRkcmVzc2VzIDB4JTA4bHggdG8gMHglMDhseCAiCisJCSAgICAgICAiYWxyZWFkeSBpbiB1c2VcbiIsIERSVl9OQU1FLCBwY2lfbmFtZShkZXYpLAorCQkgICAgICAgY21kX3BoeXNfYmFzZSwgY21kX3BoeXNfYmFzZSArIElPQzRfQ01EX0NUTF9CTEtfU0laRSk7CisJCXJjID0gLUVCVVNZOworCQlnb3RvIHJlcV9tZW1fcmduX2VycjsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBJTyByZWdpc3RlcnMgKi8KKwltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKKwlzZ2lpb2M0X2luaXRfaHdpZl9wb3J0cygmaHcsIGNtZF9iYXNlLCBjdGwsIGlycXBvcnQpOworCWh3LmlycSA9IGRldi0+aXJxOworCWh3LmNoaXBzZXQgPSBpZGVfcGNpOworCWh3LmRldiA9ICZkZXYtPmRldjsKKworCS8qIEluaXRpYWxpemluZyBjaGlwc2V0IElSUSBSZWdpc3RlcnMgKi8KKwl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKShpcnFwb3J0ICsgSU9DNF9JTlRSX1NFVCAqIDQpKTsKKworCXJjID0gaWRlX2hvc3RfYWRkKCZzZ2lpb2M0X3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKKwlpZiAoIXJjKQorCQlyZXR1cm4gMDsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihjbWRfcGh5c19iYXNlLCBJT0M0X0NNRF9DVExfQkxLX1NJWkUpOworcmVxX21lbV9yZ25fZXJyOgorCWlvdW5tYXAodmlydF9iYXNlKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0CitwY2lfaW5pdF9zZ2lpb2M0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBJREUgY29udHJvbGxlciBhdCBQQ0kgc2xvdCAlcywgcmV2aXNpb24gJWRcbiIsCisJCQkgRFJWX05BTUUsIHBjaV9uYW1lKGRldiksIGRldi0+cmV2aXNpb24pOworCisJaWYgKGRldi0+cmV2aXNpb24gPCBJT0M0X1NVUFBPUlRFRF9GSVJNV0FSRV9SRVYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTa2lwcGluZyAlcyBJREUgY29udHJvbGxlciBpbiBzbG90ICVzOiAiCisJCQkJImZpcm13YXJlIGlzIG9ic29sZXRlIC0gcGxlYXNlIHVwZ3JhZGUgdG8gIgorCQkJCSJyZXZpc2lvbjQ2IG9yIGhpZ2hlclxuIiwKKwkJCQlEUlZfTkFNRSwgcGNpX25hbWUoZGV2KSk7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBzZ2lpb2M0X2lkZV9zZXR1cF9wY2lfZGV2aWNlKGRldik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50Citpb2M0X2lkZV9hdHRhY2hfb25lKHN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQpCit7CisJLyogUENJLVJUIGRvZXMgbm90IGJyaW5nIG91dCBJREUgY29ubmVjdGlvbi4KKwkgKiBEbyBub3QgYXR0YWNoIHRvIHRoaXMgcGFydGljdWxhciBJT0M0LgorCSAqLworCWlmIChpZGQtPmlkZF92YXJpYW50ID09IElPQzRfVkFSSUFOVF9QQ0lfUlQpCisJCXJldHVybiAwOworCisJcmV0dXJuIHBjaV9pbml0X3NnaWlvYzQoaWRkLT5pZGRfcGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgaW9jNF9pZGVfc3VibW9kdWxlID0geworCS5pc19uYW1lID0gIklPQzRfaWRlIiwKKwkuaXNfb3duZXIgPSBUSElTX01PRFVMRSwKKwkuaXNfcHJvYmUgPSBpb2M0X2lkZV9hdHRhY2hfb25lLAorLyoJLmlzX3JlbW92ZSA9IGlvYzRfaWRlX3JlbW92ZV9vbmUsCSovCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpb2M0X2lkZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGlvYzRfcmVnaXN0ZXJfc3VibW9kdWxlKCZpb2M0X2lkZV9zdWJtb2R1bGUpOworfQorCitsYXRlX2luaXRjYWxsKGlvYzRfaWRlX2luaXQpOyAvKiBDYWxsIG9ubHkgYWZ0ZXIgSURFIGluaXQgaXMgZG9uZSAqLworCitNT0RVTEVfQVVUSE9SKCJBbmlrZXQgTWFsYXRwdXJlL0plcmVteSBIaWdkb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSURFIFBDSSBkcml2ZXIgbW9kdWxlIGZvciBTR0kgSU9DNCBCYXNlLUlPIENhcmQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzEwN2RmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCkBAIC0wLDAgKzEsODU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCA8YWxhbkByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgJQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICoKKyAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCisgKiAgRG9jdW1lbnRhdGlvbiBmb3IgQ01ENjgwOgorICogIGh0dHA6Ly9na2VybmVsLnNvdXJjZWZvcmdlLm5ldC9zcGVjcy9zaWkvc2lpLTA2ODBhLXYxLjMxLnBkZi5iejIKKyAqCisgKiAgRG9jdW1lbnRhdGlvbiBmb3IgU2lJIDMxMTI6CisgKiAgaHR0cDovL2drZXJuZWwuc291cmNlZm9yZ2UubmV0L3NwZWNzL3NpaS8zMTEyQV9TaUktRFMtMDA5NS1CMi5wZGYuYnoyCisgKgorICogIEVycmF0YSBhbmQgb3RoZXIgZG9jdW1lbnRhdGlvbiBvbmx5IGF2YWlsYWJsZSB1bmRlciBOREEuCisgKgorICoKKyAqICBGQVEgSXRlbXM6CisgKglJZiB5b3UgYXJlIHVzaW5nIE1hcnZlbGwgU0FUQS1JREUgYWRhcHRlcnMgd2l0aCBNYXh0b3IgZHJpdmVzCisgKgllbnN1cmUgdGhlIHN5c3RlbSBpcyBzZXQgdXAgZm9yIEFUQTEwMC9VRE1BNSwgbm90IFVETUE2LgorICoKKyAqCUlmIHlvdSBhcmUgdXNpbmcgV0QgZHJpdmVzIHdpdGggU0FUQSBicmlkZ2VzIHlvdSBtdXN0IHNldCB0aGUKKyAqCWRyaXZlIHRvICJTaW5nbGUiLiAiTWFzdGVyIiB3aWxsIGhhbmcuCisgKgorICoJSWYgeW91IGhhdmUgc3RyYW5nZSBwcm9ibGVtcyB3aXRoIG5WaWRpYSBjaGlwc2V0IHN5c3RlbXMgcGxlYXNlCisgKglzZWUgdGhlIFNJIHN1cHBvcnQgZG9jdW1lbnRhdGlvbiBhbmQgdXBkYXRlIHlvdXIgc3lzdGVtIEJJT1MKKyAqCWlmIG5lY2Vzc2FyeQorICoKKyAqICBUaGUgRGVsbCBEUkFDNCBoYXMgc29tZSBpbnRlcmVzdGluZyBmZWF0dXJlcyBpbmNsdWRpbmcgZWZmZWN0aXZlbHkgaG90CisgKiAgdW5wbHVnZ2luZy9yZXBsdWdnaW5nIHRoZSB2aXJ0dWFsIENEIGludGVyZmFjZSB3aGVuIHRoZSBEUkFDIGlzIHJlc2V0LgorICogIFRoaXMgb2Z0ZW4gY2F1c2VzIGRyaXZlcnMvaWRlL3NpaW1hZ2UgdG8gcGFuaWMgYnV0IGlzIG9rIHdpdGggdGhlIHJhdGhlcgorICogIHNtYXJ0ZXIgY29kZSBpbiBsaWJhdGEuCisgKgorICogVE9ETzoKKyAqIC0gSU9SRFkgZml4ZXMKKyAqIC0gVkRNQSBzdXBwb3J0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgInNpaW1hZ2UiCisKKy8qKgorICoJcGRldl9pc19zYXRhCQktCWNoZWNrIGlmIGRldmljZSBpcyBTQVRBCisgKglAcGRldjoJUENJIGRldmljZSB0byBjaGVjaworICoKKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgU0FUQSBjb250cm9sbGVyCisgKi8KKworc3RhdGljIGludCBwZGV2X2lzX3NhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1NBVEEKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9TSUlfMzExMjoKKwljYXNlIFBDSV9ERVZJQ0VfSURfU0lJXzEyMTBTQToKKwkJcmV0dXJuIDE7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1NJSV82ODA6CisJCXJldHVybiAwOworCX0KKwlCVUcoKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKioKKyAqCWlzX3NhdGEJCQktCWNoZWNrIGlmIGh3aWYgaXMgU0FUQQorICoJQGh3aWY6CWludGVyZmFjZSB0byBjaGVjaworICoKKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgU0FUQSBjb250cm9sbGVyCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgaXNfc2F0YShpZGVfaHdpZl90ICpod2lmKQoreworCXJldHVybiBwZGV2X2lzX3NhdGEodG9fcGNpX2Rldihod2lmLT5kZXYpKTsKK30KKworLyoqCisgKglzaWltYWdlX3NlbHJlZwkJLQlyZXR1cm4gcmVnaXN0ZXIgYmFzZQorICoJQGh3aWY6IGludGVyZmFjZQorICoJQHI6IGNvbmZpZyBvZmZzZXQKKyAqCisgKglUdXJuIGEgY29uZmlnIHJlZ2lzdGVyIG9mZnNldCBpbnRvIHRoZSByaWdodCBhZGRyZXNzIGluIGVpdGhlcgorICoJUENJIHNwYWNlIG9yIE1NSU8gc3BhY2UgdG8gYWNjZXNzIHRoZSBjb250cm9sIHJlZ2lzdGVyIGluIHF1ZXN0aW9uCisgKglUaGFua2Z1bGx5IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbiwgc28gaXNuJ3QgcGVyZm9ybWFuY2UKKyAqCWNyaXRpY2FsLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNpaW1hZ2Vfc2VscmVnKGlkZV9od2lmX3QgKmh3aWYsIGludCByKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSA9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmh3aWZfZGF0YTsKKworCWJhc2UgKz0gMHhBMCArIHI7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJYmFzZSArPSBod2lmLT5jaGFubmVsIDw8IDY7CisJZWxzZQorCQliYXNlICs9IGh3aWYtPmNoYW5uZWwgPDwgNDsKKwlyZXR1cm4gYmFzZTsKK30KKworLyoqCisgKglzaWltYWdlX3NlbGRldgkJLQlyZXR1cm4gcmVnaXN0ZXIgYmFzZQorICoJQGh3aWY6IGludGVyZmFjZQorICoJQHI6IGNvbmZpZyBvZmZzZXQKKyAqCisgKglUdXJuIGEgY29uZmlnIHJlZ2lzdGVyIG9mZnNldCBpbnRvIHRoZSByaWdodCBhZGRyZXNzIGluIGVpdGhlcgorICoJUENJIHNwYWNlIG9yIE1NSU8gc3BhY2UgdG8gYWNjZXNzIHRoZSBjb250cm9sIHJlZ2lzdGVyIGluIHF1ZXN0aW9uCisgKglpbmNsdWRpbmcgYWNjb3VudGluZyBmb3IgdGhlIHVuaXQgc2hpZnQuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNpaW1hZ2Vfc2VsZGV2KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHIpCit7CisJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOworCXVuc2lnbmVkIGxvbmcgYmFzZQk9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmh3aWZfZGF0YTsKKwl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOworCisJYmFzZSArPSAweEEwICsgcjsKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQliYXNlICs9IGh3aWYtPmNoYW5uZWwgPDwgNjsKKwllbHNlCisJCWJhc2UgKz0gaHdpZi0+Y2hhbm5lbCA8PCA0OworCWJhc2UgfD0gdW5pdCA8PCB1bml0OworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdTggc2lsX2lvcmVhZDgoc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IHRtcCA9IDA7CisKKwlpZiAoaG9zdC0+aG9zdF9wcml2KQorCQl0bXAgPSByZWFkYigodm9pZCBfX2lvbWVtICopYWRkcik7CisJZWxzZQorCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGFkZHIsICZ0bXApOworCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIHUxNiBzaWxfaW9yZWFkMTYoc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXUxNiB0bXAgPSAwOworCisJaWYgKGhvc3QtPmhvc3RfcHJpdikKKwkJdG1wID0gcmVhZHcoKHZvaWQgX19pb21lbSAqKWFkZHIpOworCWVsc2UKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBhZGRyLCAmdG1wKTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyB2b2lkIHNpbF9pb3dyaXRlOChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChob3N0LT5ob3N0X3ByaXYpCisJCXdyaXRlYih2YWwsICh2b2lkIF9faW9tZW0gKilhZGRyKTsKKwllbHNlCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIGFkZHIsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNpbF9pb3dyaXRlMTYoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IHZhbCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGhvc3QtPmhvc3RfcHJpdikKKwkJd3JpdGV3KHZhbCwgKHZvaWQgX19pb21lbSAqKWFkZHIpOworCWVsc2UKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgYWRkciwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc2lsX2lvd3JpdGUzMihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaG9zdC0+aG9zdF9wcml2KQorCQl3cml0ZWwodmFsLCAodm9pZCBfX2lvbWVtICopYWRkcik7CisJZWxzZQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgYWRkciwgdmFsKTsKK30KKworLyoqCisgKglzaWxfdWRtYV9maWx0ZXIJCS0JY29tcHV0ZSBVRE1BIG1hc2sKKyAqCUBkcml2ZTogSURFIGRldmljZQorICoKKyAqCUNvbXB1dGUgdGhlIGF2YWlsYWJsZSBVRE1BIHNwZWVkcyBmb3IgdGhlIGRldmljZSBvbiB0aGUgaW50ZXJmYWNlLgorICoKKyAqCUZvciB0aGUgQ01ENjgwIHRoaXMgZGVwZW5kcyBvbiB0aGUgY2xvY2tpbmcgbW9kZSAoc2NzYyksIGZvciB0aGUKKyAqCVNJMzExMiBTQVRBIGNvbnRyb2xsZXIgbGlmZSBpcyBhIGJpdCBzaW1wbGVyLgorICovCisKK3N0YXRpYyB1OCBzaWxfcGF0YV91ZG1hX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOworCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CisJdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOworCXU4IHNjc2MsIG1hc2sJCT0gMDsKKworCWJhc2UgKz0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAweDRBIDogMHg4QTsKKworCXNjc2MgPSBzaWxfaW9yZWFkOChkZXYsIGJhc2UpOworCisJc3dpdGNoIChzY3NjICYgMHgzMCkgeworCWNhc2UgMHgxMDoJLyogMTMzICovCisJCW1hc2sgPSBBVEFfVURNQTY7CisJCWJyZWFrOworCWNhc2UgMHgyMDoJLyogMnhQQ0kgKi8KKwkJbWFzayA9IEFUQV9VRE1BNjsKKwkJYnJlYWs7CisJY2FzZSAweDAwOgkvKiAxMDAgKi8KKwkJbWFzayA9IEFUQV9VRE1BNTsKKwkJYnJlYWs7CisJZGVmYXVsdDogCS8qIERpc2FibGVkID8gKi8KKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB1OCBzaWxfc2F0YV91ZG1hX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJY2hhciAqbSA9IChjaGFyICopJmRyaXZlLT5pZFtBVEFfSURfUFJPRF07CisKKwlyZXR1cm4gc3Ryc3RyKG0sICJNYXh0b3IiKSA/IEFUQV9VRE1BNSA6IEFUQV9VRE1BNjsKK30KKworLyoqCisgKglzaWxfc2V0X3Bpb19tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgUElPIG1vZGUKKyAqCUBkcml2ZTogZHJpdmUKKyAqCUBwaW86IFBJTyBtb2RlIG51bWJlcgorICoKKyAqCUxvYWQgdGhlIHRpbWluZyBzZXR0aW5ncyBmb3IgdGhpcyBkZXZpY2UgbW9kZSBpbnRvIHRoZQorICoJY29udHJvbGxlci4gSWYgd2UgYXJlIGluIFBJTyBtb2RlIDMgb3IgNCB0dXJuIG9uIElPUkRZCisgKgltb25pdG9yaW5nIChiaXQgOSkuIFRoZSBURiB0aW1pbmcgaXMgYml0cyAzMToxNgorICovCisKK3N0YXRpYyB2b2lkIHNpbF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pCit7CisJc3RhdGljIGNvbnN0IHUxNiB0Zl9zcGVlZFtdICAgPSB7IDB4MzI4YSwgMHgyMjgzLCAweDEyODEsIDB4MTBjMywgMHgxMGMxIH07CisJc3RhdGljIGNvbnN0IHUxNiBkYXRhX3NwZWVkW10gPSB7IDB4MzI4YSwgMHgyMjgzLCAweDExMDQsIDB4MTBjMywgMHgxMGMxIH07CisKKwlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CisJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKKwlpZGVfZHJpdmVfdCAqcGFpcgk9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOworCXUzMiBzcGVlZHQJCT0gMDsKKwl1MTYgc3BlZWRwCQk9IDA7CisJdW5zaWduZWQgbG9uZyBhZGRyCT0gc2lpbWFnZV9zZWxkZXYoZHJpdmUsIDB4MDQpOworCXVuc2lnbmVkIGxvbmcgdGZhZGRyCT0gc2lpbWFnZV9zZWxyZWcoaHdpZiwJMHgwMik7CisJdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOworCXU4IHRmX3BpbwkJPSBwaW87CisJdTggbW1pbwkJCT0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKwl1OCBhZGRyX21hc2sJCT0gaHdpZi0+Y2hhbm5lbCA/IChtbWlvID8gMHhGNCA6IDB4ODQpCisJCQkJCQk6IChtbWlvID8gMHhCNCA6IDB4ODApOworCXU4IG1vZGUJCQk9IDA7CisJdTggdW5pdAkJCT0gZHJpdmUtPmRuICYgMTsKKworCS8qIHRyaW0gKnRhc2tmaWxlKiBQSU8gdG8gdGhlIHNsb3dlc3Qgb2YgdGhlIG1hc3Rlci9zbGF2ZSAqLworCWlmIChwYWlyKSB7CisJCXU4IHBhaXJfcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKHBhaXIsIDI1NSwgNCk7CisKKwkJaWYgKHBhaXJfcGlvIDwgdGZfcGlvKQorCQkJdGZfcGlvID0gcGFpcl9waW87CisJfQorCisJLyogY2hlYXQgZm9yIG5vdyBhbmQgdXNlIHRoZSBkb2NzICovCisJc3BlZWRwID0gZGF0YV9zcGVlZFtwaW9dOworCXNwZWVkdCA9IHRmX3NwZWVkW3RmX3Bpb107CisKKwlzaWxfaW93cml0ZTE2KGRldiwgc3BlZWRwLCBhZGRyKTsKKwlzaWxfaW93cml0ZTE2KGRldiwgc3BlZWR0LCB0ZmFkZHIpOworCisJLyogbm93IHNldCB1cCBJT1JEWSAqLworCXNwZWVkcCA9IHNpbF9pb3JlYWQxNihkZXYsIHRmYWRkciAtIDIpOworCXNwZWVkcCAmPSB+MHgyMDA7CisJaWYgKHBpbyA+IDIpCisJCXNwZWVkcCB8PSAweDIwMDsKKwlzaWxfaW93cml0ZTE2KGRldiwgc3BlZWRwLCB0ZmFkZHIgLSAyKTsKKworCW1vZGUgPSBzaWxfaW9yZWFkOChkZXYsIGJhc2UgKyBhZGRyX21hc2spOworCW1vZGUgJj0gfih1bml0ID8gMHgzMCA6IDB4MDMpOworCW1vZGUgfD0gdW5pdCA/IDB4MTAgOiAweDAxOworCXNpbF9pb3dyaXRlOChkZXYsIG1vZGUsIGJhc2UgKyBhZGRyX21hc2spOworfQorCisvKioKKyAqCXNpbF9zZXRfZG1hX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBETUEgbW9kZQorICoJQGRyaXZlOiBkcml2ZQorICoJQHNwZWVkOiBETUEgbW9kZQorICoKKyAqCVR1bmUgdGhlIFNpSSBjaGlwc2V0IGZvciB0aGUgZGVzaXJlZCBETUEgbW9kZS4KKyAqLworCitzdGF0aWMgdm9pZCBzaWxfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCit7CisJc3RhdGljIGNvbnN0IHU4IHVsdHJhNltdID0geyAweDBGLCAweDBCLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDAxIH07CisJc3RhdGljIGNvbnN0IHU4IHVsdHJhNVtdID0geyAweDBDLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDAxIH07CisJc3RhdGljIGNvbnN0IHUxNiBkbWFbXQkgPSB7IDB4MjIwOCwgMHgxMEMyLCAweDEwQzEgfTsKKworCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXVuc2lnbmVkIGxvbmcgYmFzZQk9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmh3aWZfZGF0YTsKKwl1MTYgdWx0cmEgPSAwLCBtdWx0aQk9IDA7CisJdTggbW9kZSA9IDAsIHVuaXQJPSBkcml2ZS0+ZG4gJiAxOworCXU4IG1taW8JCQk9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisJdTggc2NzYyA9IDAsIGFkZHJfbWFzawk9IGh3aWYtPmNoYW5uZWwgPyAobW1pbyA/IDB4RjQgOiAweDg0KQorCQkJCQkJOiAobW1pbyA/IDB4QjQgOiAweDgwKTsKKwl1bnNpZ25lZCBsb25nIG1hCT0gc2lpbWFnZV9zZWxkZXYoZHJpdmUsIDB4MDgpOworCXVuc2lnbmVkIGxvbmcgdWEJPSBzaWltYWdlX3NlbGRldihkcml2ZSwgMHgwQyk7CisKKwlzY3NjICA9IHNpbF9pb3JlYWQ4IChkZXYsIGJhc2UgKyAobW1pbyA/IDB4NEEgOiAweDhBKSk7CisJbW9kZSAgPSBzaWxfaW9yZWFkOCAoZGV2LCBiYXNlICsgYWRkcl9tYXNrKTsKKwltdWx0aSA9IHNpbF9pb3JlYWQxNihkZXYsIG1hKTsKKwl1bHRyYSA9IHNpbF9pb3JlYWQxNihkZXYsIHVhKTsKKworCW1vZGUgICY9IH4odW5pdCA/IDB4MzAgOiAweDAzKTsKKwl1bHRyYSAmPSB+MHgzRjsKKwlzY3NjID0gKChzY3NjICYgMHgzMCkgPT0gMHgwMCkgPyAwIDogMTsKKworCXNjc2MgPSBpc19zYXRhKGh3aWYpID8gMSA6IHNjc2M7CisKKwlpZiAoc3BlZWQgPj0gWEZFUl9VRE1BXzApIHsKKwkJbXVsdGkgID0gZG1hWzJdOworCQl1bHRyYSB8PSBzY3NjID8gdWx0cmE2W3NwZWVkIC0gWEZFUl9VRE1BXzBdIDoKKwkJCQl1bHRyYTVbc3BlZWQgLSBYRkVSX1VETUFfMF07CisJCW1vZGUgIHw9IHVuaXQgPyAweDMwIDogMHgwMzsKKwl9IGVsc2UgeworCQltdWx0aSA9IGRtYVtzcGVlZCAtIFhGRVJfTVdfRE1BXzBdOworCQltb2RlIHw9IHVuaXQgPyAweDIwIDogMHgwMjsKKwl9CisKKwlzaWxfaW93cml0ZTggKGRldiwgbW9kZSwgYmFzZSArIGFkZHJfbWFzayk7CisJc2lsX2lvd3JpdGUxNihkZXYsIG11bHRpLCBtYSk7CisJc2lsX2lvd3JpdGUxNihkZXYsIHVsdHJhLCB1YSk7Cit9CisKKy8qIHJldHVybnMgMSBpZiBkbWEgaXJxIGlzc3VlZCwgMCBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQgc2lpbWFnZV9pb19kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXU4IGRtYV9hbHRzdGF0CQk9IDA7CisJdW5zaWduZWQgbG9uZyBhZGRyCT0gc2lpbWFnZV9zZWxyZWcoaHdpZiwgMSk7CisKKwkvKiByZXR1cm4gMSBpZiBJTlRSIGFzc2VydGVkICovCisJaWYgKGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKSAmIDQpCisJCXJldHVybiAxOworCisJLyogcmV0dXJuIDEgaWYgRGV2aWNlIElOVFIgYXNzZXJ0ZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGFkZHIsICZkbWFfYWx0c3RhdCk7CisJaWYgKGRtYV9hbHRzdGF0ICYgOCkKKwkJcmV0dXJuIDA7CS8qIHJldHVybiAxOyAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJc2lpbWFnZV9tbWlvX2RtYV90ZXN0X2lycQktCWNoZWNrIHdlIGNhdXNlZCBhbiBJUlEKKyAqCUBkcml2ZTogZHJpdmUgd2UgYXJlIHRlc3RpbmcKKyAqCisgKglDaGVjayBpZiB3ZSBjYXVzZWQgYW4gSURFIERNQSBpbnRlcnJ1cHQuIFdlIG1heSBhbHNvIGhhdmUgY2F1c2VkCisgKglTQVRBIHN0YXR1cyBpbnRlcnJ1cHRzLCBpZiBzbyB3ZSBjbGVhbiB0aGVtIHVwIGFuZCBjb250aW51ZS4KKyAqLworCitzdGF0aWMgaW50IHNpaW1hZ2VfbW1pb19kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIJPSBzaWltYWdlX3NlbHJlZyhod2lmLCAweDEpOworCXZvaWQgX19pb21lbSAqc2F0YV9lcnJvcl9hZGRyCisJCT0gKHZvaWQgX19pb21lbSAqKWh3aWYtPnNhdGFfc2NyW1NBVEFfRVJST1JfT0ZGU0VUXTsKKworCWlmIChzYXRhX2Vycm9yX2FkZHIpIHsKKwkJdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOworCQl1MzIgZXh0X3N0YXQJCT0gcmVhZGwoKHZvaWQgX19pb21lbSAqKShiYXNlICsgMHgxMCkpOworCQl1OCB3YXRjaGRvZwkJPSAwOworCisJCWlmIChleHRfc3RhdCAmICgoaHdpZi0+Y2hhbm5lbCkgPyAweDQwIDogMHgxMCkpIHsKKwkJCXUzMiBzYXRhX2Vycm9yID0gcmVhZGwoc2F0YV9lcnJvcl9hZGRyKTsKKworCQkJd3JpdGVsKHNhdGFfZXJyb3IsIHNhdGFfZXJyb3JfYWRkcik7CisJCQl3YXRjaGRvZyA9IChzYXRhX2Vycm9yICYgMHgwMDY4MDAwMCkgPyAxIDogMDsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzYXRhX2Vycm9yID0gMHglMDh4LCAiCisJCQkJIndhdGNoZG9nID0gJWQsICVzXG4iLAorCQkJCWRyaXZlLT5uYW1lLCBzYXRhX2Vycm9yLCB3YXRjaGRvZywgX19mdW5jX18pOworCQl9IGVsc2UKKwkJCXdhdGNoZG9nID0gKGV4dF9zdGF0ICYgMHg4MDAwKSA/IDEgOiAwOworCisJCWV4dF9zdGF0ID4+PSAxNjsKKwkJaWYgKCEoZXh0X3N0YXQgJiAweDA0MDQpICYmICF3YXRjaGRvZykKKwkJCXJldHVybiAwOworCX0KKworCS8qIHJldHVybiAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8KKwlpZiAocmVhZGIoKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKSkgJiA0KQorCQlyZXR1cm4gMTsKKworCS8qIHJldHVybiAxIGlmIERldmljZSBJTlRSIGFzc2VydGVkICovCisJaWYgKHJlYWRiKCh2b2lkIF9faW9tZW0gKilhZGRyKSAmIDgpCisJCXJldHVybiAwOwkvKiByZXR1cm4gMTsgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpaW1hZ2VfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZiAoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHNpaW1hZ2VfbW1pb19kbWFfdGVzdF9pcnEoZHJpdmUpOworCWVsc2UKKwkJcmV0dXJuIHNpaW1hZ2VfaW9fZG1hX3Rlc3RfaXJxKGRyaXZlKTsKK30KKworLyoqCisgKglzaWxfc2F0YV9yZXNldF9wb2xsCS0Jd2FpdCBmb3IgU0FUQSByZXNldAorICoJQGRyaXZlOiBkcml2ZSB3ZSBhcmUgcmVzZXR0aW5nCisgKgorICoJUG9sbCB0aGUgU0FUQSBwaHkgYW5kIHNlZSB3aGV0aGVyIGl0IGhhcyBjb21lIGJhY2sgZnJvbSB0aGUgZGVhZAorICoJeWV0LgorICovCisKK3N0YXRpYyBpbnQgc2lsX3NhdGFfcmVzZXRfcG9sbChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXZvaWQgX19pb21lbSAqc2F0YV9zdGF0dXNfYWRkcgorCQk9ICh2b2lkIF9faW9tZW0gKilod2lmLT5zYXRhX3NjcltTQVRBX1NUQVRVU19PRkZTRVRdOworCisJaWYgKHNhdGFfc3RhdHVzX2FkZHIpIHsKKwkJLyogU0FUQSBTdGF0dXMgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBpbiBNTUlPIG1vZGUgKi8KKwkJdTMyIHNhdGFfc3RhdCA9IHJlYWRsKHNhdGFfc3RhdHVzX2FkZHIpOworCisJCWlmICgoc2F0YV9zdGF0ICYgMHgwMykgIT0gMHgwMykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlc2V0IHBoeSBkZWFkLCBzdGF0dXM9MHglMDh4XG4iLAorCQkJCQkgICAgaHdpZi0+bmFtZSwgc2F0YV9zdGF0KTsKKwkJCXJldHVybiAtRU5YSU87CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglzaWxfc2F0YV9wcmVfcmVzZXQJLQlyZXNldCBob29rCisgKglAZHJpdmU6IElERSBkZXZpY2UgYmVpbmcgcmVzZXQKKyAqCisgKglGb3IgdGhlIFNBVEEgZGV2aWNlcyB3ZSBuZWVkIHRvIGhhbmRsZSByZWNhbGlicmF0aW9uL2dlb21ldHJ5CisgKglkaWZmZXJlbnRseQorICovCisKK3N0YXRpYyB2b2lkIHNpbF9zYXRhX3ByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgeworCQlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeSA9IDA7CisJCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAwOworCX0KK30KKworLyoqCisgKglpbml0X2NoaXBzZXRfc2lpbWFnZQktCXNldCB1cCBhbiBTSSBkZXZpY2UKKyAqCUBkZXY6IFBDSSBkZXZpY2UKKyAqCisgKglQZXJmb3JtIHRoZSBpbml0aWFsIFBDSSBzZXQgdXAgZm9yIHRoaXMgZGV2aWNlLiBBdHRlbXB0IHRvIHN3aXRjaAorICoJdG8gMTMzIE1IeiBjbG9ja2luZyBpZiB0aGUgc3lzdGVtIGlzbid0IGFscmVhZHkgc2V0IHVwIHRvIGRvIGl0LgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGhvc3QtPmhvc3RfcHJpdjsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNjc2NfYWRkcjsKKwl1OCByZXYgPSBkZXYtPnJldmlzaW9uLCB0bXA7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCByZXYgPyAxIDogMjU1KTsKKworCWlmIChpb2FkZHIpCisJCXBjaV9zZXRfbWFzdGVyKGRldik7CisKKwliYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9hZGRyOworCisJaWYgKGlvYWRkciAmJiBwZGV2X2lzX3NhdGEoZGV2KSkgeworCQl1MzIgdG1wMzIsIGlycV9tYXNrOworCisJCS8qIG1ha2Ugc3VyZSBJREUwLzEgaW50ZXJydXB0cyBhcmUgbm90IG1hc2tlZCAqLworCQlpcnFfbWFzayA9ICgxIDw8IDIyKSB8ICgxIDw8IDIzKTsKKwkJdG1wMzIgPSByZWFkbChpb2FkZHIgKyAweDQ4KTsKKwkJaWYgKHRtcDMyICYgaXJxX21hc2spIHsKKwkJCXRtcDMyICY9IH5pcnFfbWFzazsKKwkJCXdyaXRlbCh0bXAzMiwgaW9hZGRyICsgMHg0OCk7CisJCQlyZWFkbChpb2FkZHIgKyAweDQ4KTsgLyogZmx1c2ggKi8KKwkJfQorCQl3cml0ZWwoMCwgaW9hZGRyICsgMHgxNDgpOworCQl3cml0ZWwoMCwgaW9hZGRyICsgMHgxQzgpOworCX0KKworCXNpbF9pb3dyaXRlOChkZXYsIDAsIGJhc2UgPyAoYmFzZSArIDB4QjQpIDogMHg4MCk7CisJc2lsX2lvd3JpdGU4KGRldiwgMCwgYmFzZSA/IChiYXNlICsgMHhGNCkgOiAweDg0KTsKKworCXNjc2NfYWRkciA9IGJhc2UgPyAoYmFzZSArIDB4NEEpIDogMHg4QTsKKwl0bXAgPSBzaWxfaW9yZWFkOChkZXYsIHNjc2NfYWRkcik7CisKKwlzd2l0Y2ggKHRtcCAmIDB4MzApIHsKKwljYXNlIDB4MDA6CisJCS8qIE9uIDEwMCBNSHogY2xvY2tpbmcsIHRyeSBhbmQgc3dpdGNoIHRvIDEzMyBNSHogKi8KKwkJc2lsX2lvd3JpdGU4KGRldiwgdG1wIHwgMHgxMCwgc2NzY19hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAweDMwOgorCQkvKiBDbG9ja2luZyBpcyBkaXNhYmxlZCwgYXR0ZW1wdCB0byBmb3JjZSAxMzNNSHogY2xvY2tpbmcuICovCisJCXNpbF9pb3dyaXRlOChkZXYsIHRtcCAmIH4weDIwLCBzY3NjX2FkZHIpOworCWNhc2UgMHgxMDoKKwkJLyogT24gMTMzTWh6IGNsb2NraW5nLiAqLworCQlicmVhazsKKwljYXNlIDB4MjA6CisJCS8qIE9uIFBDSXgyIGNsb2NraW5nLiAqLworCQlicmVhazsKKwl9CisKKwl0bXAgPSBzaWxfaW9yZWFkOChkZXYsIHNjc2NfYWRkcik7CisKKwlzaWxfaW93cml0ZTggKGRldiwgICAgICAgMHg3MiwgYmFzZSArIDB4QTEpOworCXNpbF9pb3dyaXRlMTYoZGV2LCAgICAgMHgzMjhBLCBiYXNlICsgMHhBMik7CisJc2lsX2lvd3JpdGUzMihkZXYsIDB4NjJERDYyREQsIGJhc2UgKyAweEE0KTsKKwlzaWxfaW93cml0ZTMyKGRldiwgMHg0MzkyNDM5MiwgYmFzZSArIDB4QTgpOworCXNpbF9pb3dyaXRlMzIoZGV2LCAweDQwMDk0MDA5LCBiYXNlICsgMHhBQyk7CisJc2lsX2lvd3JpdGU4IChkZXYsICAgICAgIDB4NzIsIGJhc2UgPyAoYmFzZSArIDB4RTEpIDogMHhCMSk7CisJc2lsX2lvd3JpdGUxNihkZXYsICAgICAweDMyOEEsIGJhc2UgPyAoYmFzZSArIDB4RTIpIDogMHhCMik7CisJc2lsX2lvd3JpdGUzMihkZXYsIDB4NjJERDYyREQsIGJhc2UgPyAoYmFzZSArIDB4RTQpIDogMHhCNCk7CisJc2lsX2lvd3JpdGUzMihkZXYsIDB4NDM5MjQzOTIsIGJhc2UgPyAoYmFzZSArIDB4RTgpIDogMHhCOCk7CisJc2lsX2lvd3JpdGUzMihkZXYsIDB4NDAwOTQwMDksIGJhc2UgPyAoYmFzZSArIDB4RUMpIDogMHhCQyk7CisKKwlpZiAoYmFzZSAmJiBwZGV2X2lzX3NhdGEoZGV2KSkgeworCQl3cml0ZWwoMHhGRkZGMDAwMCwgaW9hZGRyICsgMHgxMDgpOworCQl3cml0ZWwoMHhGRkZGMDAwMCwgaW9hZGRyICsgMHgxODgpOworCQl3cml0ZWwoMHgwMDY4MDAwMCwgaW9hZGRyICsgMHgxNDgpOworCQl3cml0ZWwoMHgwMDY4MDAwMCwgaW9hZGRyICsgMHgxQzgpOworCX0KKworCS8qIHJlcG9ydCB0aGUgY2xvY2tpbmcgbW9kZSBvZiB0aGUgY29udHJvbGxlciAqLworCWlmICghcGRldl9pc19zYXRhKGRldikpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmNsa19zdHJbXSA9CisJCQl7ICI9PSAxMDAiLCAiPT0gMTMzIiwgIj09IDJYIFBDSSIsICJESVNBQkxFRCEiIH07CisKKwkJdG1wID4+PSA0OworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICIgJXM6IEJBU0UgQ0xPQ0sgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpLCBjbGtfc3RyW3RtcCAmIDNdKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglpbml0X21taW9faW9wc19zaWltYWdlCS0Jc2V0IHVwIHRoZSBpb3BzIGZvciBNTUlPCisgKglAaHdpZjogaW50ZXJmYWNlIHRvIHNldCB1cAorICoKKyAqCVRoZSBiYXNpYyBzZXR1cCBoZXJlIGlzIGZhaXJseSBzaW1wbGUsIHdlIGNhbiB1c2Ugc3RhbmRhcmQgTU1JTworICoJb3BlcmF0aW9ucy4gSG93ZXZlciB3ZSBkbyBoYXZlIHRvIHNldCB0aGUgdGFza2ZpbGUgcmVnaXN0ZXIgb2Zmc2V0cworICoJYnkgaGFuZCBhcyB0aGVyZSBpc24ndCBhIHN0YW5kYXJkIGRlZmluZWQgbGF5b3V0IGZvciB0aGVtIHRoaXMgdGltZS4KKyAqCisgKglUaGUgaGFyZHdhcmUgc3VwcG9ydHMgYnVmZmVyZWQgdGFza2ZpbGVzIGFuZCBhbHNvIHNvbWUgcmF0aGVyIG5pY2UKKyAqCWV4dGVuZGVkIFBSRCB0YWJsZXMuIEZvciBiZXR0ZXIgU0kzMTEyIHN1cHBvcnQgdXNlIHRoZSBsaWJhdGEgZHJpdmVyCisgKi8KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfbW1pb19pb3BzX3NpaW1hZ2UoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdAk9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXZvaWQgKmFkZHIJCT0gaG9zdC0+aG9zdF9wcml2OworCXU4IGNoCQkJPSBod2lmLT5jaGFubmVsOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCS8qCisJICoJRmlsbCBpbiB0aGUgYmFzaWMgaHdpZiBiaXRzCisJICovCisJaHdpZi0+aG9zdF9mbGFncyB8PSBJREVfSEZMQUdfTU1JTzsKKworCWh3aWYtPmh3aWZfZGF0YQk9IGFkZHI7CisKKwkvKgorCSAqCU5vdyBzZXQgdXAgdGhlIGh3LiBXZSBoYXZlIHRvIGRvIHRoaXMgb3Vyc2VsdmVzIGFzIHRoZQorCSAqCU1NSU8gbGF5b3V0IGlzbid0IHRoZSBzYW1lIGFzIHRoZSBzdGFuZGFyZCBwb3J0IGJhc2VkIEkvTy4KKwkgKi8KKwltZW1zZXQoaW9fcG9ydHMsIDAsIHNpemVvZigqaW9fcG9ydHMpKTsKKworCWJhc2UgPSAodW5zaWduZWQgbG9uZylhZGRyOworCWlmIChjaCkKKwkJYmFzZSArPSAweEMwOworCWVsc2UKKwkJYmFzZSArPSAweDgwOworCisJLyoKKwkgKglUaGUgYnVmZmVyZWQgdGFzayBmaWxlIGRvZXNuJ3QgaGF2ZSBzdGF0dXMvY29udHJvbCwgc28gd2UKKwkgKgljYW4ndCBjdXJyZW50bHkgdXNlIGl0IHNhbmVseSBzaW5jZSB3ZSB3YW50IHRvIHVzZSBMQkE0OCBtb2RlLgorCSAqLworCWlvX3BvcnRzLT5kYXRhX2FkZHIJPSBiYXNlOworCWlvX3BvcnRzLT5lcnJvcl9hZGRyCT0gYmFzZSArIDE7CisJaW9fcG9ydHMtPm5zZWN0X2FkZHIJPSBiYXNlICsgMjsKKwlpb19wb3J0cy0+bGJhbF9hZGRyCT0gYmFzZSArIDM7CisJaW9fcG9ydHMtPmxiYW1fYWRkcgk9IGJhc2UgKyA0OworCWlvX3BvcnRzLT5sYmFoX2FkZHIJPSBiYXNlICsgNTsKKwlpb19wb3J0cy0+ZGV2aWNlX2FkZHIJPSBiYXNlICsgNjsKKwlpb19wb3J0cy0+c3RhdHVzX2FkZHIJPSBiYXNlICsgNzsKKwlpb19wb3J0cy0+Y3RsX2FkZHIJPSBiYXNlICsgMTA7CisKKwlpZiAocGRldl9pc19zYXRhKGRldikpIHsKKwkJYmFzZSA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJCWlmIChjaCkKKwkJCWJhc2UgKz0gMHg4MDsKKwkJaHdpZi0+c2F0YV9zY3JbU0FUQV9TVEFUVVNfT0ZGU0VUXQk9IGJhc2UgKyAweDEwNDsKKwkJaHdpZi0+c2F0YV9zY3JbU0FUQV9FUlJPUl9PRkZTRVRdCT0gYmFzZSArIDB4MTA4OworCQlod2lmLT5zYXRhX3NjcltTQVRBX0NPTlRST0xfT0ZGU0VUXQk9IGJhc2UgKyAweDEwMDsKKwl9CisKKwlod2lmLT5pcnEgPSBkZXYtPmlycTsKKworCWh3aWYtPmRtYV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpYWRkciArIChjaCA/IDB4MDggOiAweDAwKTsKK30KKworc3RhdGljIGludCBpc19kZXZfc2VhZ2F0ZV9zYXRhKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwljb25zdCBjaGFyICpzCT0gKGNvbnN0IGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXTsKKwl1bnNpZ25lZCBsZW4JPSBzdHJubGVuKHMsIEFUQV9JRF9QUk9EX0xFTik7CisKKwlpZiAoKGxlbiA+IDQpICYmICghbWVtY21wKHMsICJTVCIsIDIpKSkKKwkJaWYgKCghbWVtY21wKHMgKyBsZW4gLSAyLCAiQVMiLCAyKSkgfHwKKwkJICAgICghbWVtY21wKHMgKyBsZW4gLSAzLCAiQVNMIiwgMykpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogYXBwbHlpbmcgcGVzc2ltaXN0aWMgU2VhZ2F0ZSAiCisJCQkJCSAiZXJyYXRhIGZpeFxuIiwgZHJpdmUtPm5hbWUpOworCQkJcmV0dXJuIDE7CisJCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqCXNpbF9xdWlya3Byb2MJCS0JcG9zdCBwcm9iZSBmaXh1cHMKKyAqCUBkcml2ZTogZHJpdmUKKyAqCisgKglDYWxsZWQgYWZ0ZXIgZHJpdmUgcHJvYmUgd2UgdXNlIHRoaXMgdG8gZGVjaWRlIHdoZXRoZXIgdGhlCisgKglTZWFnYXRlIGZpeHVwIG11c3QgYmUgYXBwbGllZC4gVGhpcyB1c2VkIHRvIGJlIGluIGluaXRfaW9wcyBidXQKKyAqCXRoYXQgY2FuIG9jY3VyIGJlZm9yZSB3ZSBrbm93IHdoYXQgZHJpdmVzIGFyZSBwcmVzZW50LgorICovCisKK3N0YXRpYyB2b2lkIHNpbF9xdWlya3Byb2MoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCS8qIFRyeSBhbmQgcmlzZSB0aGUgcnFzaXplICovCisJaWYgKCFpc19zYXRhKGh3aWYpIHx8ICFpc19kZXZfc2VhZ2F0ZV9zYXRhKGRyaXZlKSkKKwkJaHdpZi0+cnFzaXplID0gMTI4OworfQorCisvKioKKyAqCWluaXRfaW9wc19zaWltYWdlCS0Jc2V0IHVwIGlvcHMKKyAqCUBod2lmOiBpbnRlcmZhY2UgdG8gc2V0IHVwCisgKgorICoJRG8gdGhlIGJhc2ljIHNldHVwIGZvciB0aGUgU0lJTUFHRSBoYXJkd2FyZSBpbnRlcmZhY2UKKyAqCWFuZCB0aGVuIGRvIHRoZSBNTUlPIHNldHVwIGlmIHdlIGNhbi4gVGhpcyBpcyB0aGUgZmlyc3QKKyAqCWxvb2sgaW4gd2UgZ2V0IGZvciBzZXR0aW5nIHVwIHRoZSBod2lmIHNvIHRoYXQgd2UKKyAqCWNhbiBnZXQgdGhlIGlvcHMgcmlnaHQgYmVmb3JlIHVzaW5nIHRoZW0uCisgKi8KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaW9wc19zaWltYWdlKGlkZV9od2lmX3QgKmh3aWYpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCWh3aWYtPmh3aWZfZGF0YSA9IE5VTEw7CisKKwkvKiBQZXNzaW1hbCB1bnRpbCB3ZSBmaW5pc2ggcHJvYmluZyAqLworCWh3aWYtPnJxc2l6ZSA9IDE1OworCisJaWYgKGhvc3QtPmhvc3RfcHJpdikKKwkJaW5pdF9tbWlvX2lvcHNfc2lpbWFnZShod2lmKTsKK30KKworLyoqCisgKglzaWxfY2FibGVfZGV0ZWN0CS0JY2FibGUgZGV0ZWN0aW9uCisgKglAaHdpZjogaW50ZXJmYWNlIHRvIGNoZWNrCisgKgorICoJQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbiBBVEE2NiBjYXBhYmxlIGNhYmxlIG9uIHRoZSBpbnRlcmZhY2UuCisgKi8KKworc3RhdGljIHU4IHNpbF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCXVuc2lnbmVkIGxvbmcgYWRkcgk9IHNpaW1hZ2Vfc2VscmVnKGh3aWYsIDApOworCXU4IGF0YTY2CQk9IHNpbF9pb3JlYWQ4KGRldiwgYWRkcik7CisKKwlyZXR1cm4gKGF0YTY2ICYgMHgwMSkgPyBBVEFfQ0JMX1BBVEE4MCA6IEFUQV9DQkxfUEFUQTQwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzaWxfcGF0YV9wb3J0X29wcyA9IHsKKwkuc2V0X3Bpb19tb2RlCQk9IHNpbF9zZXRfcGlvX21vZGUsCisJLnNldF9kbWFfbW9kZQkJPSBzaWxfc2V0X2RtYV9tb2RlLAorCS5xdWlya3Byb2MJCT0gc2lsX3F1aXJrcHJvYywKKwkudWRtYV9maWx0ZXIJCT0gc2lsX3BhdGFfdWRtYV9maWx0ZXIsCisJLmNhYmxlX2RldGVjdAkJPSBzaWxfY2FibGVfZGV0ZWN0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgc2lsX3NhdGFfcG9ydF9vcHMgPSB7CisJLnNldF9waW9fbW9kZQkJPSBzaWxfc2V0X3Bpb19tb2RlLAorCS5zZXRfZG1hX21vZGUJCT0gc2lsX3NldF9kbWFfbW9kZSwKKwkucmVzZXRfcG9sbAkJPSBzaWxfc2F0YV9yZXNldF9wb2xsLAorCS5wcmVfcmVzZXQJCT0gc2lsX3NhdGFfcHJlX3Jlc2V0LAorCS5xdWlya3Byb2MJCT0gc2lsX3F1aXJrcHJvYywKKwkudWRtYV9maWx0ZXIJCT0gc2lsX3NhdGFfdWRtYV9maWx0ZXIsCisJLmNhYmxlX2RldGVjdAkJPSBzaWxfY2FibGVfZGV0ZWN0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzaWxfZG1hX29wcyA9IHsKKwkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAorCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKKwkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCisJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCisJLmRtYV90ZXN0X2lycQkJPSBzaWltYWdlX2RtYV90ZXN0X2lycSwKKwkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKK307CisKKyNkZWZpbmUgREVDTEFSRV9TSUlfREVWKHBfb3BzKQkJCQlcCisJewkJCQkJCVwKKwkJLm5hbWUJCT0gRFJWX05BTUUsCQlcCisJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc2lpbWFnZSwJXAorCQkuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX3NpaW1hZ2UsCVwKKwkJLnBvcnRfb3BzCT0gcF9vcHMsCQlcCisJCS5kbWFfb3BzCT0gJnNpbF9kbWFfb3BzLAkJXAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwJCVwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAkJXAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAkJXAorCX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNpaW1hZ2VfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0geworCS8qIDA6IFNpSTY4MCAqLyAgREVDTEFSRV9TSUlfREVWKCZzaWxfcGF0YV9wb3J0X29wcyksCisJLyogMTogU2lJMzExMiAqLyBERUNMQVJFX1NJSV9ERVYoJnNpbF9zYXRhX3BvcnRfb3BzKQorfTsKKworLyoqCisgKglzaWltYWdlX2luaXRfb25lCS0JUENJIGxheWVyIGRpc2NvdmVyeSBlbnRyeQorICoJQGRldjogUENJIGRldmljZQorICoJQGlkOiBpZGVudCB0YWJsZSBlbnRyeQorICoKKyAqCUNhbGxlZCBieSB0aGUgUENJIGNvZGUgd2hlbiBpdCBmaW5kcyBhbiBTaUk2ODAgb3IgU2lJMzExMiBjb250cm9sbGVyLgorICoJV2UgdGhlbiB1c2UgdGhlIElERSBQQ0kgZ2VuZXJpYyBoZWxwZXIgdG8gZG8gbW9zdCBvZiB0aGUgd29yay4KKyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaWltYWdlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDsKKwlyZXNvdXJjZV9zaXplX3QgYmFyNSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDUpOworCXVuc2lnbmVkIGxvbmcgYmFyc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCA1KTsKKwlpbnQgcmM7CisJc3RydWN0IGlkZV9wb3J0X2luZm8gZDsKKwl1OCBpZHggPSBpZC0+ZHJpdmVyX2RhdGE7CisJdTggQkE1X0VOOworCisJZCA9IHNpaW1hZ2VfY2hpcHNldHNbaWR4XTsKKworCWlmIChpZHgpIHsKKwkJc3RhdGljIGludCBmaXJzdCA9IDE7CisKKwkJaWYgKGZpcnN0KSB7CisJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IEZvciBmdWxsIFNBVEEgc3VwcG9ydCB5b3UgIgorCQkJCSJzaG91bGQgdXNlIHRoZSBsaWJhdGEgc2F0YV9zaWwgbW9kdWxlLlxuIik7CisJCQlmaXJzdCA9IDA7CisJCX0KKworCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX05PX0FUQVBJX0RNQTsKKwl9CisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4OEEsICZCQTVfRU4pOworCWlmICgoQkE1X0VOICYgMHgwMSkgfHwgYmFyNSkgeworCQkvKgorCQkqIERyb3AgYmFjayB0byBQSU8gaWYgd2UgY2FuJ3QgbWFwIHRoZSBNTUlPLiBTb21lIHN5c3RlbXMKKwkJKiBzZWVtIHRvIGdldCB0ZXJtaW5hbGx5IGNvbmZ1c2VkIGluIHRoZSBQQ0kgc3BhY2VzLgorCQkqLworCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihiYXI1LCBiYXJzaXplLCBkLm5hbWUpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICIgJXM6IE1NSU8gcG9ydHMgbm90ICIKKwkJCQkiYXZhaWxhYmxlXG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJfSBlbHNlIHsKKwkJCWlvYWRkciA9IHBjaV9pb3JlbWFwX2JhcihkZXYsIDUpOworCQkJaWYgKGlvYWRkciA9PSBOVUxMKQorCQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihiYXI1LCBiYXJzaXplKTsKKwkJfQorCX0KKworCXJjID0gaWRlX3BjaV9pbml0X29uZShkZXYsICZkLCBpb2FkZHIpOworCWlmIChyYykgeworCQlpZiAoaW9hZGRyKSB7CisJCQlpb3VubWFwKGlvYWRkcik7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oYmFyNSwgYmFyc2l6ZSk7CisJCX0KKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2lpbWFnZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGhvc3QtPmhvc3RfcHJpdjsKKworCWlkZV9wY2lfcmVtb3ZlKGRldik7CisKKwlpZiAoaW9hZGRyKSB7CisJCXJlc291cmNlX3NpemVfdCBiYXI1ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNSk7CisJCXVuc2lnbmVkIGxvbmcgYmFyc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCA1KTsKKworCQlpb3VubWFwKGlvYWRkcik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihiYXI1LCBiYXJzaXplKTsKKwl9CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpaW1hZ2VfcGNpX3RibFtdID0geworCXsgUENJX1ZERVZJQ0UoQ01ELCBQQ0lfREVWSUNFX0lEX1NJSV82ODApLCAgICAwIH0sCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1NBVEEKKwl7IFBDSV9WREVWSUNFKENNRCwgUENJX0RFVklDRV9JRF9TSUlfMzExMiksICAgMSB9LAorCXsgUENJX1ZERVZJQ0UoQ01ELCBQQ0lfREVWSUNFX0lEX1NJSV8xMjEwU0EpLCAxIH0sCisjZW5kaWYKKwl7IDAsIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNpaW1hZ2VfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzaWltYWdlX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gIlNpSV9JREUiLAorCS5pZF90YWJsZQk9IHNpaW1hZ2VfcGNpX3RibCwKKwkucHJvYmUJCT0gc2lpbWFnZV9pbml0X29uZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNpaW1hZ2VfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IGlkZV9wY2lfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGlkZV9wY2lfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2lpbWFnZV9pZGVfaW5pdCh2b2lkKQoreworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2lpbWFnZV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNpaW1hZ2VfaWRlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNpaW1hZ2VfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNpaW1hZ2VfaWRlX2luaXQpOworbW9kdWxlX2V4aXQoc2lpbWFnZV9pZGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFuZHJlIEhlZHJpY2ssIEFsYW4gQ294Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBkcml2ZXIgbW9kdWxlIGZvciBTaUkgSURFIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCnJlbmFtZSB0byBkcml2ZXJzL2lkZS9zaXM1NTEzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3NsODJjMTA1LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3NsYzkwZTY2LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jIGIvZHJpdmVycy9pZGUvdGM4NmMwMDEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9pZGUvcGNpL3RjODZjMDAxLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3RjODZjMDAxLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMgYi9kcml2ZXJzL2lkZS90cmlmbGV4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3RyaWZsZXguYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS90cm0yOTAuYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvdHJtMjkwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2NjBmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogVFg0OTM4IGludGVybmFsIElERSBkcml2ZXIKKyAqIEJhc2VkIG9uIHR4NDkzOWlkZS5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIChDKSBDb3B5cmlnaHQgVE9TSElCQSBDT1JQT1JBVElPTiAyMDA1LTIwMDcKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MzguaD4KKworc3RhdGljIHZvaWQgdHg0OTM4aWRlX3R1bmVfZWJ1c2ModW5zaWduZWQgaW50IGVidXNfY2gsCisJCQkJIHVuc2lnbmVkIGludCBnYnVzX2Nsb2NrLAorCQkJCSB1OCBwaW8pCit7CisJc3RydWN0IGlkZV90aW1pbmcgKnQgPSBpZGVfdGltaW5nX2ZpbmRfbW9kZShYRkVSX1BJT18wICsgcGlvKTsKKwl1NjQgY3IgPSBfX3Jhd19yZWFkcSgmdHg0OTM4X2VidXNjcHRyLT5jcltlYnVzX2NoXSk7CisJdW5zaWduZWQgaW50IHNwID0gKGNyID4+IDQpICYgMzsKKwl1bnNpZ25lZCBpbnQgY2xvY2sgPSBnYnVzX2Nsb2NrIC8gKDQgLSBzcCk7CisJdW5zaWduZWQgaW50IGN5Y2xlID0gMTAwMDAwMDAwMCAvIGNsb2NrOworCXVuc2lnbmVkIGludCB3dCwgc2h3dDsKKworCS8qIE1pbmltdW0gRElPeC0gYWN0aXZlIHRpbWUgKi8KKwl3dCA9IERJVl9ST1VORF9VUCh0LT5hY3Q4YiwgY3ljbGUpIC0gMjsKKwkvKiBJT1JEWSBzZXR1cCB0aW1lOiAzNW5zICovCisJd3QgPSBtYXgod3QsIERJVl9ST1VORF9VUCgzNSwgY3ljbGUpKTsKKwkvKiBhY3R1YWwgd2FpdC1jeWNsZSBpcyBtYXgod3QgJiB+MSwgMSkgKi8KKwlpZiAod3QgPiAyICYmICh3dCAmIDEpKQorCQl3dCsrOworCXd0ICY9IH4xOworCS8qIEFkZHJlc3MtdmFsaWQgdG8gRElPUi9ESU9XIHNldHVwICovCisJc2h3dCA9IERJVl9ST1VORF9VUCh0LT5zZXR1cCwgY3ljbGUpOworCisJcHJfZGVidWcoInR4NDkzOGlkZTogZWJ1cyAlZCwgYnVzIGN5Y2xlICVkbnMsIFdUICVkLCBTSFdUICVkXG4iLAorCQkgZWJ1c19jaCwgY3ljbGUsIHd0LCBzaHd0KTsKKworCV9fcmF3X3dyaXRlcSgoY3IgJiB+KDB4M2YwMDd1bGwpKSB8ICh3dCA8PCAxMikgfCBzaHd0LAorCQkgICAgICZ0eDQ5MzhfZWJ1c2NwdHItPmNyW2VidXNfY2hdKTsKK30KKworc3RhdGljIHZvaWQgdHg0OTM4aWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHR4NDkzOGlkZV9wbGF0Zm9ybV9pbmZvICpwZGF0YSA9IGh3aWYtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwl1OCBzYWZlID0gcGlvOworCWlkZV9kcml2ZV90ICpwYWlyOworCisJcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOworCWlmIChwYWlyKQorCQlzYWZlID0gbWluKHNhZmUsIGlkZV9nZXRfYmVzdF9waW9fbW9kZShwYWlyLCAyNTUsIDUpKTsKKwl0eDQ5MzhpZGVfdHVuZV9lYnVzYyhwZGF0YS0+ZWJ1c19jaCwgcGRhdGEtPmdidXNfY2xvY2ssIHNhZmUpOworfQorCisjaWZkZWYgX19CSUdfRU5ESUFOCisKKy8qIGN1c3RvbSBpb3BzIChpbmRlcGVuZGVudCBmcm9tIFNXQVBfSU9fU1BBQ0UpICovCitzdGF0aWMgdTggdHg0OTM4aWRlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRiKCh2b2lkIF9faW9tZW0gKilwb3J0KTsKK30KKworc3RhdGljIHZvaWQgdHg0OTM4aWRlX291dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlfX3Jhd193cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKilwb3J0KTsKK30KKworc3RhdGljIHZvaWQgdHg0OTM4aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwl1OCBISUhJID0gdGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDggPyAweEUwIDogMHhFRjsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCQlISUhJID0gMHhGRjsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgeworCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKKworCQkvKiBubyBlbmRpYW4gc3dhcCAqLworCQlfX3Jhd193cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOworCX0KKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJCXR4NDkzOGlkZV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJCXR4NDkzOGlkZV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJCXR4NDkzOGlkZV9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwkJdHg0OTM4aWRlX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJCXR4NDkzOGlkZV9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwkJdHg0OTM4aWRlX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKKwkJdHg0OTM4aWRlX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwkJdHg0OTM4aWRlX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJCXR4NDkzOGlkZV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAorCQkJICAgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCQl1MTYgZGF0YTsKKworCQkvKiBubyBlbmRpYW4gc3dhcCAqLworCQlkYXRhID0gX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOworCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOworCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCisJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLworCXR4NDkzOGlkZV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwkJdGYtPmZlYXR1cmUgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwkJdGYtPm5zZWN0ICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCQl0Zi0+bGJhbCAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwkJdGYtPmxiYW0gICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJCXRmLT5sYmFoICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJCXRmLT5kZXZpY2UgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwkJdHg0OTM4aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJCXRmLT5ob2JfZmVhdHVyZSA9CisJCQkJdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJCXRmLT5ob2JfbnNlY3QgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCQl0Zi0+aG9iX2xiYW0gICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCQl0Zi0+aG9iX2xiYWggICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgdHg0OTM4aWRlX2lucHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBwb3J0ID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCAqcHRyID0gYnVmOworCXVuc2lnbmVkIGludCBjb3VudCA9IChsZW4gKyAxKSAvIDI7CisKKwl3aGlsZSAoY291bnQtLSkKKwkJKnB0cisrID0gY3B1X3RvX2xlMTYoX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKXBvcnQpKTsKKwlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCAqIDIpOworfQorCitzdGF0aWMgdm9pZCB0eDQ5MzhpZGVfb3V0cHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBwb3J0ID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCAqcHRyID0gYnVmOworCXVuc2lnbmVkIGludCBjb3VudCA9IChsZW4gKyAxKSAvIDI7CisKKwl3aGlsZSAoY291bnQtLSkgeworCQlfX3Jhd193cml0ZXcobGUxNl90b19jcHUoKnB0ciksICh2b2lkIF9faW9tZW0gKilwb3J0KTsKKwkJcHRyKys7CisJfQorCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylidWYsIGNvdW50ICogMik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyB0eDQ5MzhpZGVfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cywKKworCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAorCisJLnRmX2xvYWQJCT0gdHg0OTM4aWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gdHg0OTM4aWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSB0eDQ5MzhpZGVfaW5wdXRfZGF0YV9zd2FwLAorCS5vdXRwdXRfZGF0YQkJPSB0eDQ5MzhpZGVfb3V0cHV0X2RhdGFfc3dhcCwKK307CisKKyNlbmRpZgkvKiBfX0JJR19FTkRJQU4gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgdHg0OTM4aWRlX3BvcnRfb3BzID0geworCS5zZXRfcGlvX21vZGUgPSB0eDQ5MzhpZGVfc2V0X3Bpb19tb2RlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHR4NDkzOGlkZV9wb3J0X2luZm8gX19pbml0ZGF0YSA9IHsKKwkucG9ydF9vcHMgPSAmdHg0OTM4aWRlX3BvcnRfb3BzLAorI2lmZGVmIF9fQklHX0VORElBTgorCS50cF9vcHMgPSAmdHg0OTM4aWRlX3RwX29wcywKKyNlbmRpZgorCS5ob3N0X2ZsYWdzID0gSURFX0hGTEFHX01NSU8gfCBJREVfSEZMQUdfTk9fRE1BLAorCS5waW9fbWFzayA9IEFUQV9QSU81LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHg0OTM4aWRlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaHdfcmVnc190IGh3OworCWh3X3JlZ3NfdCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgdHg0OTM4aWRlX3BsYXRmb3JtX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IGlycSwgcmV0LCBpOworCXVuc2lnbmVkIGxvbmcgbWFwYmFzZTsKKwlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkID0gdHg0OTM4aWRlX3BvcnRfaW5mbzsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiAtRU5PREVWOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJCSAgICAgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgInR4NDkzOGlkZSIpKQorCQlyZXR1cm4gLUVCVVNZOworCW1hcGJhc2UgPSAodW5zaWduZWQgbG9uZylkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCQkJICAgICAgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCFtYXBiYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisJaWYgKHBkYXRhLT5pb3BvcnRfc2hpZnQpIHsKKwkJdW5zaWduZWQgbG9uZyBwb3J0ID0gbWFwYmFzZTsKKworCQlody5pb19wb3J0c19hcnJheVswXSA9IHBvcnQ7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCXBvcnQrKzsKKyNlbmRpZgorCQlmb3IgKGkgPSAxOyBpIDw9IDc7IGkrKykKKwkJCWh3LmlvX3BvcnRzX2FycmF5W2ldID0KKwkJCQlwb3J0ICsgKGkgPDwgcGRhdGEtPmlvcG9ydF9zaGlmdCk7CisJCWh3LmlvX3BvcnRzLmN0bF9hZGRyID0KKwkJCXBvcnQgKyAweDEwMDAwICsgKDYgPDwgcGRhdGEtPmlvcG9ydF9zaGlmdCk7CisJfSBlbHNlCisJCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIG1hcGJhc2UsIG1hcGJhc2UgKyAweDEwMDA2KTsKKwlody5pcnEgPSBpcnE7CisJaHcuZGV2ID0gJnBkZXYtPmRldjsKKworCXByX2luZm8oIlRYNDkzOCBJREUgaW50ZXJmYWNlIChiYXNlICUjbHgsIGlycSAlZClcbiIsIG1hcGJhc2UsIGh3LmlycSk7CisJaWYgKHBkYXRhLT5nYnVzX2Nsb2NrKQorCQl0eDQ5MzhpZGVfdHVuZV9lYnVzYyhwZGF0YS0+ZWJ1c19jaCwgcGRhdGEtPmdidXNfY2xvY2ssIDApOworCWVsc2UKKwkJZC5wb3J0X29wcyA9IE5VTEw7CisJcmV0ID0gaWRlX2hvc3RfYWRkKCZkLCBod3MsICZob3N0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCB0eDQ5MzhpZGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR4NDkzOGlkZV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInR4NDkzOGlkZSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZXhpdF9wKHR4NDkzOGlkZV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHg0OTM4aWRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZ0eDQ5MzhpZGVfZHJpdmVyLCB0eDQ5MzhpZGVfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdHg0OTM4aWRlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHg0OTM4aWRlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHR4NDkzOGlkZV9pbml0KTsKK21vZHVsZV9leGl0KHR4NDkzOGlkZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUWDQ5MzggaW50ZXJuYWwgSURFIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0eDQ5MzhpZGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmYjdkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCkBAIC0wLDAgKzEsNzU0IEBACisvKgorICogVFg0OTM5IGludGVybmFsIElERSBkcml2ZXIKKyAqIEJhc2VkIG9uIFJCVFg0OXh4IHBhdGNoIGZyb20gQ0VMRiBwYXRjaCBhcmNoaXZlLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIChDKSBDb3B5cmlnaHQgVE9TSElCQSBDT1JQT1JBVElPTiAyMDA1LTIwMDcKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKKyNkZWZpbmUgTU9ETkFNRQkidHg0OTM5aWRlIgorCisvKiBBVEEgU2hhZG93IFJlZ2lzdGVycyAoOC1iaXQgZXhjZXB0IGZvciBEYXRhIHdoaWNoIGlzIDE2LWJpdCkgKi8KKyNkZWZpbmUgVFg0OTM5SURFX0RhdGEJCQkweDAwMAorI2RlZmluZSBUWDQ5MzlJREVfRXJyb3JfRmVhdHVyZQkJMHgwMDEKKyNkZWZpbmUgVFg0OTM5SURFX1NlYwkJCTB4MDAyCisjZGVmaW5lIFRYNDkzOUlERV9MQkEwCQkJMHgwMDMKKyNkZWZpbmUgVFg0OTM5SURFX0xCQTEJCQkweDAwNAorI2RlZmluZSBUWDQ5MzlJREVfTEJBMgkJCTB4MDA1CisjZGVmaW5lIFRYNDkzOUlERV9EZXZIZWFkCQkweDAwNgorI2RlZmluZSBUWDQ5MzlJREVfU3RhdF9DbWQJCTB4MDA3CisjZGVmaW5lIFRYNDkzOUlERV9BbHRTdGF0X0RldkN0bAkweDQwMgorLyogSC9XIERNQSBSZWdpc3RlcnMgICovCisjZGVmaW5lIFRYNDkzOUlERV9ETUFfQ21kCTB4ODAwCS8qIDgtYml0ICovCisjZGVmaW5lIFRYNDkzOUlERV9ETUFfU3RhdAkweDgwMgkvKiA4LWJpdCAqLworI2RlZmluZSBUWDQ5MzlJREVfUFJEX1B0cgkweDgwNAkvKiAzMi1iaXQgKi8KKy8qIEFUQTEwMCBDT1JFIFJlZ2lzdGVycyAoMTYtYml0KSAqLworI2RlZmluZSBUWDQ5MzlJREVfU3lzX0N0bAkweGMwMAorI2RlZmluZSBUWDQ5MzlJREVfWGZlcl9DbnRfMQkweGMwOAorI2RlZmluZSBUWDQ5MzlJREVfWGZlcl9DbnRfMgkweGMwYQorI2RlZmluZSBUWDQ5MzlJREVfU2VjX0NudAkweGMxMAorI2RlZmluZSBUWDQ5MzlJREVfU3RhcnRfTG9fQWRkcgkweGMxOAorI2RlZmluZSBUWDQ5MzlJREVfU3RhcnRfVXBfQWRkcgkweGMyMAorI2RlZmluZSBUWDQ5MzlJREVfQWRkX0N0bAkweGMyOAorI2RlZmluZSBUWDQ5MzlJREVfTG9fQnVyc3RfQ250CTB4YzMwCisjZGVmaW5lIFRYNDkzOUlERV9VcF9CdXJzdF9DbnQJMHhjMzgKKyNkZWZpbmUgVFg0OTM5SURFX1BJT19BZGRyCTB4Yzg4CisjZGVmaW5lIFRYNDkzOUlERV9IX1JzdF9UaW0JMHhjOTAKKyNkZWZpbmUgVFg0OTM5SURFX0ludF9DdGwJMHhjOTgKKyNkZWZpbmUgVFg0OTM5SURFX1BrdF9DbWQJMHhjYjgKKyNkZWZpbmUgVFg0OTM5SURFX0J4ZmVyX0NudF9IaQkweGNjMAorI2RlZmluZSBUWDQ5MzlJREVfQnhmZXJfQ250X0xvCTB4Y2M4CisjZGVmaW5lIFRYNDkzOUlERV9EZXZfVEVycgkweGNkMAorI2RlZmluZSBUWDQ5MzlJREVfUGt0X1hmZXJfQ3RsCTB4Y2Q4CisjZGVmaW5lIFRYNDkzOUlERV9TdGFydF9UQWRkcgkweGNlMAorCisvKiBiaXRzIGZvciBJbnRfQ3RsICovCisjZGVmaW5lIFRYNDkzOUlERV9JTlRfQUREUkVSUgkweDgwCisjZGVmaW5lIFRYNDkzOUlERV9JTlRfUkVBQ0hNVUwJMHg0MAorI2RlZmluZSBUWDQ5MzlJREVfSU5UX0RFVlRJTUlORwkweDIwCisjZGVmaW5lIFRYNDkzOUlERV9JTlRfVURNQVRFUk0JMHgxMAorI2RlZmluZSBUWDQ5MzlJREVfSU5UX1RJTUVSCTB4MDgKKyNkZWZpbmUgVFg0OTM5SURFX0lOVF9CVVNFUlIJMHgwNAorI2RlZmluZSBUWDQ5MzlJREVfSU5UX1hGRVJFTkQJMHgwMgorI2RlZmluZSBUWDQ5MzlJREVfSU5UX0hPU1QJMHgwMQorCisjZGVmaW5lIFRYNDkzOUlERV9JR05PUkVfSU5UUwlcCisJKFRYNDkzOUlERV9JTlRfQUREUkVSUiB8IFRYNDkzOUlERV9JTlRfUkVBQ0hNVUwgfCBcCisJIFRYNDkzOUlERV9JTlRfREVWVElNSU5HIHwgVFg0OTM5SURFX0lOVF9VRE1BVEVSTSB8IFwKKwkgVFg0OTM5SURFX0lOVF9USU1FUiB8IFRYNDkzOUlERV9JTlRfWEZFUkVORCkKKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSB0eDQ5MzlpZGVfc3dpenpsZWwoYSkJKChhKSBeIDQpCisjZGVmaW5lIHR4NDkzOWlkZV9zd2l6emxldyhhKQkoKGEpIF4gNikKKyNkZWZpbmUgdHg0OTM5aWRlX3N3aXp6bGViKGEpCSgoYSkgXiA3KQorI2Vsc2UKKyNkZWZpbmUgdHg0OTM5aWRlX3N3aXp6bGVsKGEpCShhKQorI2RlZmluZSB0eDQ5MzlpZGVfc3dpenpsZXcoYSkJKGEpCisjZGVmaW5lIHR4NDkzOWlkZV9zd2l6emxlYihhKQkoYSkKKyNlbmRpZgorCitzdGF0aWMgdTE2IHR4NDkzOWlkZV9yZWFkdyh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGJhc2UgKyB0eDQ5MzlpZGVfc3dpenpsZXcocmVnKSk7Cit9CitzdGF0aWMgdTggdHg0OTM5aWRlX3JlYWRiKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoYmFzZSArIHR4NDkzOWlkZV9zd2l6emxlYihyZWcpKTsKK30KK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV93cml0ZWwodTMyIHZhbCwgdm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGJhc2UgKyB0eDQ5MzlpZGVfc3dpenpsZWwocmVnKSk7Cit9CitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfd3JpdGV3KHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHJlZykKK3sKKwlfX3Jhd193cml0ZXcodmFsLCBiYXNlICsgdHg0OTM5aWRlX3N3aXp6bGV3KHJlZykpOworfQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3dyaXRlYih1OCB2YWwsIHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHJlZykKK3sKKwlfX3Jhd193cml0ZWIodmFsLCBiYXNlICsgdHg0OTM5aWRlX3N3aXp6bGViKHJlZykpOworfQorCisjZGVmaW5lIFRYNDkzOUlERV9CQVNFKGh3aWYpCSgodm9pZCBfX2lvbWVtICopKGh3aWYpLT5leHRyYV9iYXNlKQorCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpbnQgaXNfc2xhdmUgPSBkcml2ZS0+ZG47CisJdTMyIG1hc2ssIHZhbDsKKwl1OCBzYWZlID0gcGlvOworCWlkZV9kcml2ZV90ICpwYWlyOworCisJcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOworCWlmIChwYWlyKQorCQlzYWZlID0gbWluKHNhZmUsIGlkZV9nZXRfYmVzdF9waW9fbW9kZShwYWlyLCAyNTUsIDQpKTsKKwkvKgorCSAqIFVwZGF0ZSBDb21tYW5kIFRyYW5zZmVyIE1vZGUgZm9yIG1hc3Rlci9zbGF2ZSBhbmQgRGF0YQorCSAqIFRyYW5zZmVyIE1vZGUgZm9yIHRoaXMgZHJpdmUuCisJICovCisJbWFzayA9IGlzX3NsYXZlID8gMHgwN2YwMDAwMCA6IDB4MDAwMDA3ZjA7CisJdmFsID0gKChzYWZlIDw8IDgpIHwgKHBpbyA8PCA0KSkgPDwgKGlzX3NsYXZlID8gMTYgOiAwKTsKKwlod2lmLT5zZWxlY3RfZGF0YSA9IChod2lmLT5zZWxlY3RfZGF0YSAmIH5tYXNrKSB8IHZhbDsKKwkvKiB0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cCgpIHdpbGwgc2V0IHRoZSBTeXNfQ3RsIHJlZ2lzdGVyICovCit9CisKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1MzIgbWFzaywgdmFsOworCisJLyogVXBkYXRlIERhdGEgVHJhbnNmZXIgTW9kZSBmb3IgdGhpcyBkcml2ZS4gKi8KKwlpZiAobW9kZSA+PSBYRkVSX1VETUFfMCkKKwkJdmFsID0gbW9kZSAtIFhGRVJfVURNQV8wICsgODsKKwllbHNlCisJCXZhbCA9IG1vZGUgLSBYRkVSX01XX0RNQV8wICsgNTsKKwlpZiAoZHJpdmUtPmRuKSB7CisJCW1hc2sgPSAweDAwZjAwMDAwOworCQl2YWwgPDw9IDIwOworCX0gZWxzZSB7CisJCW1hc2sgPSAweDAwMDAwMGYwOworCQl2YWwgPDw9IDQ7CisJfQorCWh3aWYtPnNlbGVjdF9kYXRhID0gKGh3aWYtPnNlbGVjdF9kYXRhICYgfm1hc2spIHwgdmFsOworCS8qIHR4NDkzOWlkZV90Zl9sb2FkX2ZpeHVwKCkgd2lsbCBzZXQgdGhlIFN5c19DdGwgcmVnaXN0ZXIgKi8KK30KKworc3RhdGljIHUxNiB0eDQ5MzlpZGVfY2hlY2tfZXJyb3JfaW50cyhpZGVfaHdpZl90ICpod2lmKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFRYNDkzOUlERV9CQVNFKGh3aWYpOworCXUxNiBjdGwgPSB0eDQ5MzlpZGVfcmVhZHcoYmFzZSwgVFg0OTM5SURFX0ludF9DdGwpOworCisJaWYgKGN0bCAmIFRYNDkzOUlERV9JTlRfQlVTRVJSKSB7CisJCS8qIHJlc2V0IEZJRk8gKi8KKwkJdTE2IHN5c2N0bCA9IHR4NDkzOWlkZV9yZWFkdyhiYXNlLCBUWDQ5MzlJREVfU3lzX0N0bCk7CisKKwkJdHg0OTM5aWRlX3dyaXRldyhzeXNjdGwgfCAweDQwMDAsIGJhc2UsIFRYNDkzOUlERV9TeXNfQ3RsKTsKKwkJbW1pb3diKCk7CisJCS8qIHdhaXQgMTJHQlVTQ0xLICh0eXAuIDYwbnMgQCBHQlVTMjAwTUh6LCBtYXggMjcwbnMpICovCisJCW5kZWxheSgyNzApOworCQl0eDQ5MzlpZGVfd3JpdGV3KHN5c2N0bCwgYmFzZSwgVFg0OTM5SURFX1N5c19DdGwpOworCX0KKwlpZiAoY3RsICYgKFRYNDkzOUlERV9JTlRfQUREUkVSUiB8CisJCSAgIFRYNDkzOUlERV9JTlRfREVWVElNSU5HIHwgVFg0OTM5SURFX0lOVF9CVVNFUlIpKQorCQlwcl9lcnIoIiVzOiBFcnJvciBpbnRlcnJ1cHQgJSN4ICglcyVzJXMgKVxuIiwKKwkJICAgICAgIGh3aWYtPm5hbWUsIGN0bCwKKwkJICAgICAgIGN0bCAmIFRYNDkzOUlERV9JTlRfQUREUkVSUiA/ICIgQWRkcmVzcy1FcnJvciIgOiAiIiwKKwkJICAgICAgIGN0bCAmIFRYNDkzOUlERV9JTlRfREVWVElNSU5HID8gIiBERVYtVGltaW5nIiA6ICIiLAorCQkgICAgICAgY3RsICYgVFg0OTM5SURFX0lOVF9CVVNFUlIgPyAiIEJ1cy1FcnJvciIgOiAiIik7CisJcmV0dXJuIGN0bDsKK30KKworc3RhdGljIHZvaWQgdHg0OTM5aWRlX2NsZWFyX2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZjsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdTE2IGN0bDsKKworCS8qCisJICogdHg0OTM5aWRlX2RtYV90ZXN0X2lycSgpIGFuZCB0eDQ5MzlpZGVfZG1hX2VuZCgpIGRvIGFsbCBqb2IKKwkgKiBmb3IgRE1BIGNhc2UuCisJICovCisJaWYgKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCisJCXJldHVybjsKKwlod2lmID0gZHJpdmUtPmh3aWY7CisJYmFzZSA9IFRYNDkzOUlERV9CQVNFKGh3aWYpOworCWN0bCA9IHR4NDkzOWlkZV9jaGVja19lcnJvcl9pbnRzKGh3aWYpOworCXR4NDkzOWlkZV93cml0ZXcoY3RsLCBiYXNlLCBUWDQ5MzlJREVfSW50X0N0bCk7Cit9CisKK3N0YXRpYyB1OCB0eDQ5MzlpZGVfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gVFg0OTM5SURFX0JBU0UoaHdpZik7CisKKwlyZXR1cm4gdHg0OTM5aWRlX3JlYWR3KGJhc2UsIFRYNDkzOUlERV9TeXNfQ3RsKSAmIDB4MjAwMCA/CisJCUFUQV9DQkxfUEFUQTQwIDogQVRBX0NCTF9QQVRBODA7Cit9CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IHVuaXQgPSBkcml2ZS0+ZG47CisJdm9pZCBfX2lvbWVtICpiYXNlID0gVFg0OTM5SURFX0JBU0UoaHdpZik7CisJdTggZG1hX3N0YXQgPSB0eDQ5MzlpZGVfcmVhZGIoYmFzZSwgVFg0OTM5SURFX0RNQV9TdGF0KTsKKworCWlmIChvbikKKwkJZG1hX3N0YXQgfD0gKDEgPDwgKDUgKyB1bml0KSk7CisJZWxzZQorCQlkbWFfc3RhdCAmPSB+KDEgPDwgKDUgKyB1bml0KSk7CisKKwl0eDQ5MzlpZGVfd3JpdGViKGRtYV9zdGF0LCBiYXNlLCBUWDQ5MzlJREVfRE1BX1N0YXQpOworfQorI2Vsc2UKKyNkZWZpbmUgdHg0OTM5aWRlX2RtYV9ob3N0X3NldAlpZGVfZG1hX2hvc3Rfc2V0CisjZW5kaWYKKworc3RhdGljIHU4IHR4NDkzOWlkZV9jbGVhcl9kbWFfc3RhdHVzKHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwl1OCBkbWFfc3RhdDsKKworCS8qIHJlYWQgRE1BIHN0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCisJZG1hX3N0YXQgPSB0eDQ5MzlpZGVfcmVhZGIoYmFzZSwgVFg0OTM5SURFX0RNQV9TdGF0KTsKKwkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KKwl0eDQ5MzlpZGVfd3JpdGViKGRtYV9zdGF0IHwgQVRBX0RNQV9JTlRSIHwgQVRBX0RNQV9FUlIsIGJhc2UsCisJCQkgVFg0OTM5SURFX0RNQV9TdGF0KTsKKwkvKiByZWNvdmVyIGludG1hc2sgY2xlYXJlZCBieSB3cml0aW5nIHRvIGJpdDIgb2YgRE1BX1N0YXQgKi8KKwl0eDQ5MzlpZGVfd3JpdGV3KFRYNDkzOUlERV9JR05PUkVfSU5UUyA8PCA4LCBiYXNlLCBUWDQ5MzlJREVfSW50X0N0bCk7CisJcmV0dXJuIGRtYV9zdGF0OworfQorCisjaWZkZWYgX19CSUdfRU5ESUFOCisvKiBjdXN0b20gaWRlX2J1aWxkX2RtYXRhYmxlIHRvIGhhbmRsZSBzd2FwcGVkIGxheW91dCAqLworc3RhdGljIGludCB0eDQ5MzlpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXUzMiAqdGFibGUgPSAodTMyICopaHdpZi0+ZG1hdGFibGVfY3B1OworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJaW50IGk7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCWh3aWYtPnNnX25lbnRzID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOworCWlmIChod2lmLT5zZ19uZW50cyA9PSAwKQorCQlyZXR1cm4gMDsKKworCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgaHdpZi0+c2dfbmVudHMsIGkpIHsKKwkJdTMyIGN1cl9hZGRyLCBjdXJfbGVuLCBiY291bnQ7CisKKwkJY3VyX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCWN1cl9sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKworCQkvKgorCQkgKiBGaWxsIGluIHRoZSBETUEgdGFibGUsIHdpdGhvdXQgY3Jvc3NpbmcgYW55IDY0a0IgYm91bmRhcmllcy4KKwkJICovCisKKwkJd2hpbGUgKGN1cl9sZW4pIHsKKwkJCWlmIChjb3VudCsrID49IFBSRF9FTlRSSUVTKQorCQkJCWdvdG8gdXNlX3Bpb19pbnN0ZWFkOworCisJCQliY291bnQgPSAweDEwMDAwIC0gKGN1cl9hZGRyICYgMHhmZmZmKTsKKwkJCWlmIChiY291bnQgPiBjdXJfbGVuKQorCQkJCWJjb3VudCA9IGN1cl9sZW47CisJCQkqdGFibGUrKyA9IGJjb3VudCAmIDB4ZmZmZjsKKwkJCSp0YWJsZSsrID0gY3VyX2FkZHI7CisJCQljdXJfYWRkciArPSBiY291bnQ7CisJCQljdXJfbGVuIC09IGJjb3VudDsKKwkJfQorCX0KKworCWlmIChjb3VudCkgeworCQkqKHRhYmxlIC0gMikgfD0gMHg4MDAwMDAwMDsKKwkJcmV0dXJuIGNvdW50OworCX0KKwordXNlX3Bpb19pbnN0ZWFkOgorCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkcml2ZS0+bmFtZSwKKwkJY291bnQgPyAiRE1BIHRhYmxlIHRvbyBzbWFsbCIgOiAiZW1wdHkgRE1BIHRhYmxlPyIpOworCisJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOworCisJcmV0dXJuIDA7IC8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLworfQorI2Vsc2UKKyNkZWZpbmUgdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlCWlkZV9idWlsZF9kbWF0YWJsZQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdHg0OTM5aWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXZvaWQgX19pb21lbSAqYmFzZSA9IFRYNDkzOUlERV9CQVNFKGh3aWYpOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPmh3Z3JvdXAtPnJxOworCXU4IHJlYWRpbmc7CisJaW50IG5lbnQ7CisKKwlpZiAocnFfZGF0YV9kaXIocnEpKQorCQlyZWFkaW5nID0gMDsKKwllbHNlCisJCXJlYWRpbmcgPSBBVEFfRE1BX1dSOworCisJLyogZmFsbCBiYWNrIHRvIFBJTyEgKi8KKwluZW50ID0gdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSk7CisJaWYgKCFuZW50KSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogUFJEIHRhYmxlICovCisJdHg0OTM5aWRlX3dyaXRlbChod2lmLT5kbWF0YWJsZV9kbWEsIGJhc2UsIFRYNDkzOUlERV9QUkRfUHRyKTsKKworCS8qIHNwZWNpZnkgci93ICovCisJdHg0OTM5aWRlX3dyaXRlYihyZWFkaW5nLCBiYXNlLCBUWDQ5MzlJREVfRE1BX0NtZCk7CisKKwkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KKwl0eDQ5MzlpZGVfY2xlYXJfZG1hX3N0YXR1cyhiYXNlKTsKKworCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOworCisJdHg0OTM5aWRlX3dyaXRldyhTRUNUT1JfU0laRSAvIDIsIGJhc2UsIGRyaXZlLT5kbiA/CisJCQkgVFg0OTM5SURFX1hmZXJfQ250XzIgOiBUWDQ5MzlJREVfWGZlcl9DbnRfMSk7CisJdHg0OTM5aWRlX3dyaXRldyhycS0+bnJfc2VjdG9ycywgYmFzZSwgVFg0OTM5SURFX1NlY19DbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR4NDkzOWlkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggZG1hX3N0YXQsIGRtYV9jbWQ7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gVFg0OTM5SURFX0JBU0UoaHdpZik7CisJdTE2IGN0bCA9IHR4NDkzOWlkZV9yZWFkdyhiYXNlLCBUWDQ5MzlJREVfSW50X0N0bCk7CisKKwlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKKworCS8qIGdldCBETUEgY29tbWFuZCBtb2RlICovCisJZG1hX2NtZCA9IHR4NDkzOWlkZV9yZWFkYihiYXNlLCBUWDQ5MzlJREVfRE1BX0NtZCk7CisJLyogc3RvcCBETUEgKi8KKwl0eDQ5MzlpZGVfd3JpdGViKGRtYV9jbWQgJiB+QVRBX0RNQV9TVEFSVCwgYmFzZSwgVFg0OTM5SURFX0RNQV9DbWQpOworCisJLyogcmVhZCBhbmQgY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCisJZG1hX3N0YXQgPSB0eDQ5MzlpZGVfY2xlYXJfZG1hX3N0YXR1cyhiYXNlKTsKKworCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLworCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKKwkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCisJd21iKCk7CisKKwlpZiAoKGRtYV9zdGF0ICYgKEFUQV9ETUFfSU5UUiB8IEFUQV9ETUFfRVJSIHwgQVRBX0RNQV9BQ1RJVkUpKSA9PSAwICYmCisJICAgIChjdGwgJiAoVFg0OTM5SURFX0lOVF9YRkVSRU5EIHwgVFg0OTM5SURFX0lOVF9IT1NUKSkgPT0KKwkgICAgKFRYNDkzOUlERV9JTlRfWEZFUkVORCB8IFRYNDkzOUlERV9JTlRfSE9TVCkpCisJCS8qIElOVF9JREUgbG9zdC4uLiBidWc/ICovCisJCXJldHVybiAwOworCXJldHVybiAoKGRtYV9zdGF0ICYgKEFUQV9ETUFfSU5UUiB8IEFUQV9ETUFfRVJSIHwgQVRBX0RNQV9BQ1RJVkUpKSAhPQorCQlBVEFfRE1BX0lOVFIpID8gMHgxMCB8IGRtYV9zdGF0IDogMDsKK30KKworLyogcmV0dXJucyAxIGlmIERNQSBJUlEgaXNzdWVkLCAwIG90aGVyd2lzZSAqLworc3RhdGljIGludCB0eDQ5MzlpZGVfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gVFg0OTM5SURFX0JBU0UoaHdpZik7CisJdTE2IGN0bCwgaWRlX2ludDsKKwl1OCBkbWFfc3RhdCwgc3RhdDsKKwlpbnQgZm91bmQgPSAwOworCisJY3RsID0gdHg0OTM5aWRlX2NoZWNrX2Vycm9yX2ludHMoaHdpZik7CisJaWRlX2ludCA9IGN0bCAmIChUWDQ5MzlJREVfSU5UX1hGRVJFTkQgfCBUWDQ5MzlJREVfSU5UX0hPU1QpOworCXN3aXRjaCAoaWRlX2ludCkgeworCWNhc2UgVFg0OTM5SURFX0lOVF9IT1NUOgorCQkvKiBPbiBlcnJvciwgWEZFUkVORCBtaWdodCBub3QgYmUgYXNzZXJ0ZWQuICovCisJCXN0YXQgPSB0eDQ5MzlpZGVfcmVhZGIoYmFzZSwgVFg0OTM5SURFX0FsdFN0YXRfRGV2Q3RsKTsKKwkJaWYgKChzdGF0ICYgKEFUQV9CVVNZIHwgQVRBX0RSUSB8IEFUQV9FUlIpKSA9PSBBVEFfRVJSKQorCQkJZm91bmQgPSAxOworCQllbHNlCisJCQkvKiBXYWl0IGZvciBYRkVSRU5EIChNYXNrIEhPU1QgYW5kIHVubWFzayBYRkVSRU5EKSAqLworCQkJY3RsICY9IH5UWDQ5MzlJREVfSU5UX1hGRVJFTkQgPDwgODsKKwkJY3RsIHw9IGlkZV9pbnQgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBUWDQ5MzlJREVfSU5UX0hPU1QgfCBUWDQ5MzlJREVfSU5UX1hGRVJFTkQ6CisJCWRtYV9zdGF0ID0gdHg0OTM5aWRlX3JlYWRiKGJhc2UsIFRYNDkzOUlERV9ETUFfU3RhdCk7CisJCWlmICghKGRtYV9zdGF0ICYgQVRBX0RNQV9JTlRSKSkKKwkJCXByX3dhcm5pbmcoIiVzOiB3ZWlyZCBpbnRlcnJ1cHQgc3RhdHVzLiAiCisJCQkJICAgIkRNQV9TdGF0ICUjMDJ4IGludF9jdGwgJSMwNHhcbiIsCisJCQkJICAgaHdpZi0+bmFtZSwgZG1hX3N0YXQsIGN0bCk7CisJCWZvdW5kID0gMTsKKwkJYnJlYWs7CisJfQorCS8qCisJICogRG8gbm90IGNsZWFyIFhGRVJFTkQsIEhPU1Qgbm93LiAgVGhleSB3aWxsIGJlIGNsZWFyZWQgYnkKKwkgKiBjbGVhcmluZyBiaXQyIG9mIERNQV9TdGF0LgorCSAqLworCWN0bCAmPSB+aWRlX2ludDsKKwl0eDQ5MzlpZGVfd3JpdGV3KGN0bCwgYmFzZSwgVFg0OTM5SURFX0ludF9DdGwpOworCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIHZvaWQgdHg0OTM5aWRlX2luaXRfaHdpZihpZGVfaHdpZl90ICpod2lmKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFRYNDkzOUlERV9CQVNFKGh3aWYpOworCisJLyogU29mdCBSZXNldCAqLworCXR4NDkzOWlkZV93cml0ZXcoMHg4MDAwLCBiYXNlLCBUWDQ5MzlJREVfU3lzX0N0bCk7CisJbW1pb3diKCk7CisJLyogYXQgbGVhc3QgMjAgR0JVU0NMSyAodHlwLiAxMDBucyBAIEdCVVMyMDBNSHosIG1heCA0NTBucykgKi8KKwluZGVsYXkoNDUwKTsKKwl0eDQ5MzlpZGVfd3JpdGV3KDB4MDAwMCwgYmFzZSwgVFg0OTM5SURFX1N5c19DdGwpOworCS8qIG1hc2sgc29tZSBpbnRlcnJ1cHRzIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cyAqLworCXR4NDkzOWlkZV93cml0ZXcoKFRYNDkzOUlERV9JR05PUkVfSU5UUyA8PCA4KSB8IDB4ZmYsIGJhc2UsCisJCQkgVFg0OTM5SURFX0ludF9DdGwpOworCisJdHg0OTM5aWRlX3dyaXRldygweDAwMDgsIGJhc2UsIFRYNDkzOUlERV9Mb19CdXJzdF9DbnQpOworCXR4NDkzOWlkZV93cml0ZXcoMCwgYmFzZSwgVFg0OTM5SURFX1VwX0J1cnN0X0NudCk7Cit9CisKK3N0YXRpYyBpbnQgdHg0OTM5aWRlX2luaXRfZG1hKGlkZV9od2lmX3QgKmh3aWYsIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQoreworCWh3aWYtPmRtYV9iYXNlID0KKwkJaHdpZi0+ZXh0cmFfYmFzZSArIHR4NDkzOWlkZV9zd2l6emxlYihUWDQ5MzlJREVfRE1BX0NtZCk7CisJLyoKKwkgKiBOb3RlIHRoYXQgd2UgY2Fubm90IHVzZSBBVEFfRE1BX1RBQkxFX09GUywgQVRBX0RNQV9TVEFUVVMKKwkgKiBmb3IgYmlnIGVuZGlhbi4KKwkgKi8KKwlyZXR1cm4gaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaHdpZik7Cit9CisKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkX2ZpeHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gVFg0OTM5SURFX0JBU0UoaHdpZik7CisJdTE2IHN5c2N0bCA9IGh3aWYtPnNlbGVjdF9kYXRhID4+IChkcml2ZS0+ZG4gPyAxNiA6IDApOworCisJLyoKKwkgKiBGaXggQVRBMTAwIENPUkUgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIuIChUaGUgd3JpdGUgdG8gdGhlCisJICogRGV2aWNlL0hlYWQgcmVnaXN0ZXIgbWF5IHdyaXRlIHdyb25nIGRhdGEgdG8gdGhlIFN5c3RlbQorCSAqIENvbnRyb2wgUmVnaXN0ZXIpCisJICogV2hpbGUgU3lzX0N0bCBpcyB3cml0dGVuIGhlcmUsIHNlbGVjdHByb2MgaXMgbm90IG5lZWRlZC4KKwkgKi8KKwl0eDQ5MzlpZGVfd3JpdGV3KHN5c2N0bCwgYmFzZSwgVFg0OTM5SURFX1N5c19DdGwpOworfQorCisjaWZkZWYgX19CSUdfRU5ESUFOCisKK3N0YXRpYyB1OCB0eDQ5MzlpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFRYNDkzOUlERV9CQVNFKGh3aWYpOworCisJcmV0dXJuIHR4NDkzOWlkZV9yZWFkYihiYXNlLCBUWDQ5MzlJREVfRE1BX1N0YXQpOworfQorCisvKiBjdXN0b20gaW9wcyAoaW5kZXBlbmRlbnQgZnJvbSBTV0FQX0lPX1NQQUNFKSAqLworc3RhdGljIHU4IHR4NDkzOWlkZV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiBfX3Jhd19yZWFkYigodm9pZCBfX2lvbWVtICopcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV9vdXRiKHU4IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJX19yYXdfd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJdTggSElISSA9IHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwkJSElISSA9IDB4RkY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpIHsKKwkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7CisKKwkJLyogbm8gZW5kaWFuIHN3YXAgKi8KKwkJX19yYXdfd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwkJdHg0OTM5aWRlX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJCXR4NDkzOWlkZV9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJCXR4NDkzOWlkZV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJCXR4NDkzOWlkZV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJCXR4NDkzOWlkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKSB7CisJCXR4NDkzOWlkZV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAorCQkJICAgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CisJCXR4NDkzOWlkZV90Zl9sb2FkX2ZpeHVwKGRyaXZlLCB0YXNrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCQl1MTYgZGF0YTsKKworCQkvKiBubyBlbmRpYW4gc3dhcCAqLworCQlkYXRhID0gX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOworCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOworCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCisJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLworCXR4NDkzOWlkZV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwkJdGYtPmZlYXR1cmUgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwkJdGYtPm5zZWN0ICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCQl0Zi0+bGJhbCAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwkJdGYtPmxiYW0gICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJCXRmLT5sYmFoICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJCXRmLT5kZXZpY2UgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwkJdHg0OTM5aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJCXRmLT5ob2JfZmVhdHVyZSA9CisJCQkJdHg0OTM5aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJCXRmLT5ob2JfbnNlY3QgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCQl0Zi0+aG9iX2xiYW0gICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCQl0Zi0+aG9iX2xiYWggICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgdHg0OTM5aWRlX2lucHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBwb3J0ID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCAqcHRyID0gYnVmOworCXVuc2lnbmVkIGludCBjb3VudCA9IChsZW4gKyAxKSAvIDI7CisKKwl3aGlsZSAoY291bnQtLSkKKwkJKnB0cisrID0gY3B1X3RvX2xlMTYoX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKXBvcnQpKTsKKwlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCAqIDIpOworfQorCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfb3V0cHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBwb3J0ID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCAqcHRyID0gYnVmOworCXVuc2lnbmVkIGludCBjb3VudCA9IChsZW4gKyAxKSAvIDI7CisKKwl3aGlsZSAoY291bnQtLSkgeworCQlfX3Jhd193cml0ZXcobGUxNl90b19jcHUoKnB0ciksICh2b2lkIF9faW9tZW0gKilwb3J0KTsKKwkJcHRyKys7CisJfQorCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylidWYsIGNvdW50ICogMik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyB0eDQ5MzlpZGVfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSB0eDQ5MzlpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cywKKworCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAorCisJLnRmX2xvYWQJCT0gdHg0OTM5aWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gdHg0OTM5aWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSB0eDQ5MzlpZGVfaW5wdXRfZGF0YV9zd2FwLAorCS5vdXRwdXRfZGF0YQkJPSB0eDQ5MzlpZGVfb3V0cHV0X2RhdGFfc3dhcCwKK307CisKKyNlbHNlCS8qIF9fTElUVExFX0VORElBTiAqLworCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX3RmX2xvYWQoZHJpdmUsIHRhc2spOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCQl0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChkcml2ZSwgdGFzayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyB0eDQ5MzlpZGVfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cywKKworCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAorCisJLnRmX2xvYWQJCT0gdHg0OTM5aWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAorfTsKKworI2VuZGlmCS8qIF9fTElUVExFX0VORElBTiAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyB0eDQ5MzlpZGVfcG9ydF9vcHMgPSB7CisJLnNldF9waW9fbW9kZSA9IHR4NDkzOWlkZV9zZXRfcGlvX21vZGUsCisJLnNldF9kbWFfbW9kZSA9IHR4NDkzOWlkZV9zZXRfZG1hX21vZGUsCisJLmNsZWFyX2lycSA9IHR4NDkzOWlkZV9jbGVhcl9pcnEsCisJLmNhYmxlX2RldGVjdCA9IHR4NDkzOWlkZV9jYWJsZV9kZXRlY3QsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHR4NDkzOWlkZV9kbWFfb3BzID0geworCS5kbWFfaG9zdF9zZXQgPSB0eDQ5MzlpZGVfZG1hX2hvc3Rfc2V0LAorCS5kbWFfc2V0dXAgPSB0eDQ5MzlpZGVfZG1hX3NldHVwLAorCS5kbWFfZXhlY19jbWQgPSBpZGVfZG1hX2V4ZWNfY21kLAorCS5kbWFfc3RhcnQgPSBpZGVfZG1hX3N0YXJ0LAorCS5kbWFfZW5kID0gdHg0OTM5aWRlX2RtYV9lbmQsCisJLmRtYV90ZXN0X2lycSA9IHR4NDkzOWlkZV9kbWFfdGVzdF9pcnEsCisJLmRtYV9sb3N0X2lycSA9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lb3V0ID0gaWRlX2RtYV90aW1lb3V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHR4NDkzOWlkZV9wb3J0X2luZm8gX19pbml0ZGF0YSA9IHsKKwkuaW5pdF9od2lmID0gdHg0OTM5aWRlX2luaXRfaHdpZiwKKwkuaW5pdF9kbWEgPSB0eDQ5MzlpZGVfaW5pdF9kbWEsCisJLnBvcnRfb3BzID0gJnR4NDkzOWlkZV9wb3J0X29wcywKKwkuZG1hX29wcyA9ICZ0eDQ5MzlpZGVfZG1hX29wcywKKwkudHBfb3BzID0gJnR4NDkzOWlkZV90cF9vcHMsCisJLmhvc3RfZmxhZ3MgPSBJREVfSEZMQUdfTU1JTywKKwkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHR4NDkzOWlkZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWh3X3JlZ3NfdCBodzsKKwlod19yZWdzX3QgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycSwgcmV0OworCXVuc2lnbmVkIGxvbmcgbWFwYmFzZTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiAtRU5PREVWOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJCSAgICAgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgInR4NDkzOGlkZSIpKQorCQlyZXR1cm4gLUVCVVNZOworCW1hcGJhc2UgPSAodW5zaWduZWQgbG9uZylkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCQkJICAgICAgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCFtYXBiYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworCWh3LmlvX3BvcnRzLmRhdGFfYWRkciA9CisJCW1hcGJhc2UgKyB0eDQ5MzlpZGVfc3dpenpsZXcoVFg0OTM5SURFX0RhdGEpOworCWh3LmlvX3BvcnRzLmVycm9yX2FkZHIgPQorCQltYXBiYXNlICsgdHg0OTM5aWRlX3N3aXp6bGViKFRYNDkzOUlERV9FcnJvcl9GZWF0dXJlKTsKKwlody5pb19wb3J0cy5uc2VjdF9hZGRyID0KKwkJbWFwYmFzZSArIHR4NDkzOWlkZV9zd2l6emxlYihUWDQ5MzlJREVfU2VjKTsKKwlody5pb19wb3J0cy5sYmFsX2FkZHIgPQorCQltYXBiYXNlICsgdHg0OTM5aWRlX3N3aXp6bGViKFRYNDkzOUlERV9MQkEwKTsKKwlody5pb19wb3J0cy5sYmFtX2FkZHIgPQorCQltYXBiYXNlICsgdHg0OTM5aWRlX3N3aXp6bGViKFRYNDkzOUlERV9MQkExKTsKKwlody5pb19wb3J0cy5sYmFoX2FkZHIgPQorCQltYXBiYXNlICsgdHg0OTM5aWRlX3N3aXp6bGViKFRYNDkzOUlERV9MQkEyKTsKKwlody5pb19wb3J0cy5kZXZpY2VfYWRkciA9CisJCW1hcGJhc2UgKyB0eDQ5MzlpZGVfc3dpenpsZWIoVFg0OTM5SURFX0RldkhlYWQpOworCWh3LmlvX3BvcnRzLmNvbW1hbmRfYWRkciA9CisJCW1hcGJhc2UgKyB0eDQ5MzlpZGVfc3dpenpsZWIoVFg0OTM5SURFX1N0YXRfQ21kKTsKKwlody5pb19wb3J0cy5jdGxfYWRkciA9CisJCW1hcGJhc2UgKyB0eDQ5MzlpZGVfc3dpenpsZWIoVFg0OTM5SURFX0FsdFN0YXRfRGV2Q3RsKTsKKwlody5pcnEgPSBpcnE7CisJaHcuZGV2ID0gJnBkZXYtPmRldjsKKworCXByX2luZm8oIlRYNDkzOSBJREUgaW50ZXJmYWNlIChiYXNlICUjbHgsIGlycSAlZClcbiIsIG1hcGJhc2UsIGlycSk7CisJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKCZ0eDQ5MzlpZGVfcG9ydF9pbmZvLCBod3MpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyogdXNlIGV4dHJhX2Jhc2UgZm9yIGJhc2UgYWRkcmVzcyBvZiB0aGUgYWxsIHJlZ2lzdGVycyAqLworCWhvc3QtPnBvcnRzWzBdLT5leHRyYV9iYXNlID0gbWFwYmFzZTsKKwlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCAmdHg0OTM5aWRlX3BvcnRfaW5mbywgaHdzKTsKKwlpZiAocmV0KSB7CisJCWlkZV9ob3N0X2ZyZWUoaG9zdCk7CisJCXJldHVybiByZXQ7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCB0eDQ5MzlpZGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdHg0OTM5aWRlX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpZGVfaHdpZl90ICpod2lmID0gaG9zdC0+cG9ydHNbMF07CisKKwl0eDQ5MzlpZGVfaW5pdF9od2lmKGh3aWYpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgdHg0OTM5aWRlX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHg0OTM5aWRlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IE1PRE5BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZXhpdF9wKHR4NDkzOWlkZV9yZW1vdmUpLAorCS5yZXN1bWUgPSB0eDQ5MzlpZGVfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHg0OTM5aWRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZ0eDQ5MzlpZGVfZHJpdmVyLCB0eDQ5MzlpZGVfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdHg0OTM5aWRlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHg0OTM5aWRlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHR4NDkzOWlkZV9pbml0KTsKK21vZHVsZV9leGl0KHR4NDkzOWlkZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUWDQ5MzkgaW50ZXJuYWwgSURFIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0eDQ5MzlpZGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMgYi9kcml2ZXJzL2lkZS91bWM4NjcyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMKcmVuYW1lIHRvIGRyaXZlcnMvaWRlL3VtYzg2NzIuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYwpyZW5hbWUgdG8gZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRsZS9LY29uZmlnIGIvZHJpdmVycy9pZGxlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViMjZkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRsZS9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKKworbWVudSAiTWVtb3J5IHBvd2VyIHNhdmluZ3MiCisKK2NvbmZpZyBJNzMwMF9JRExFX0lPQVRfQ0hBTk5FTAorCWJvb2wKKworY29uZmlnIEk3MzAwX0lETEUKKwl0cmlzdGF0ZSAiSW50ZWwgY2hpcHNldCBpZGxlIHBvd2VyIHNhdmluZyBkcml2ZXIiCisJc2VsZWN0IEk3MzAwX0lETEVfSU9BVF9DSEFOTkVMCisJZGVwZW5kcyBvbiBYODZfNjQKKwloZWxwCisJICBFbmFibGUgaWRsZSBwb3dlciBzYXZpbmdzIHdpdGggY2VydGFpbiBJbnRlbCBzZXJ2ZXIgY2hpcHNldHMuCisJICBUaGUgY2hpcHNldCBtdXN0IGhhdmUgSS9PIEFUIHN1cHBvcnQsIHN1Y2ggYXMgdGhlIEludGVsIDczMDAuCisJICBUaGUgcG93ZXIgc2F2aW5ncyBkZXBlbmRzIG9uIHRoZSB0eXBlIGFuZCBxdWFudGl0eSBvZiBEUkFNIGRldmljZXMuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRsZS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjY4ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGxlL01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLSQoQ09ORklHX0k3MzAwX0lETEUpCQkJKz0gaTczMDBfaWRsZS5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRsZS9pNzMwMF9pZGxlLmMgYi9kcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZDFiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jCkBAIC0wLDAgKzEsNjc0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3JzOgorICogQW5keSBIZW5yb2lkIDxhbmRyZXcuZC5oZW5yb2lkQGludGVsLmNvbT4KKyAqIFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgorICovCisKKy8qCisgKiBTYXZlIERJTU0gcG93ZXIgb24gSW50ZWwgNzMwMC1iYXNlZCBwbGF0Zm9ybXMgd2hlbiBhbGwgQ1BVcy9jb3JlcworICogYXJlIGlkbGUsIHVzaW5nIHRoZSBESU1NIHRoZXJtYWwgdGhyb3R0bGluZyBjYXBhYmlsaXR5LgorICoKKyAqIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIEludGVsIGludGVncmF0ZWQgRE1BIGNvbnRyb2xsZXIgKEkvTyBBVCkuCisgKiBJZiB0aGUgZHJpdmVyIGZvciBJL08gQVQgKGRyaXZlcnMvZG1hL2lvYXRkbWEqKSBpcyBhbHNvIGVuYWJsZWQsCisgKiB0aGlzIGRyaXZlciBzaG91bGQgd29yayBjb29wZXJhdGl2ZWx5LgorICovCisKKy8qICNkZWZpbmUgREVCVUcgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KKworI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisKKyNpbmNsdWRlICIuLi9kbWEvaW9hdGRtYV9ody5oIgorI2luY2x1ZGUgIi4uL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oIgorCisjZGVmaW5lIEk3MzAwX0lETEVfRFJJVkVSX1ZFUlNJT04JIjEuNTUiCisjZGVmaW5lIEk3MzAwX1BSSU5UCQkJImk3MzAwX2lkbGU6IgorCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkZWJ1ZywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnIHByaW50a3MgaW4gdGhpcyBkcml2ZXIiKTsKKworI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKSBcCisJZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0lORk8gSTczMDBfUFJJTlQgZm10LCAjI2FyZyk7IH0gd2hpbGUgKDApCisKKy8qCisgKiBWYWx1ZSB0byBzZXQgVEhSVExPVyB0byB3aGVuIGluaXRpYXRpbmcgdGhyb3R0bGluZworICogIDAgPSBObyB0aHJvdHRsaW5nCisgKiAgMSA9IFRocm90dGxlIHdoZW4gPiA0IGFjdGl2YXRpb25zIHBlciBldmFsIHdpbmRvdyAoTWF4aW11bSB0aHJvdHRsaW5nKQorICogIDIgPSBUaHJvdHRsZSB3aGVuID4gOCBhY3RpdmF0aW9ucworICogIDE2OCA9IFRocm90dGxlIHdoZW4gPiAxNjggYWN0aXZhdGlvbnMgKE1pbmltdW0gdGhyb3R0bGluZykKKyAqLworI2RlZmluZSBNQVhfVEhSVExXTElNSVQJCTE2OAorc3RhdGljIHVpbnQgaTczMDBfaWRsZV90aHJ0bG93bG0gPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKHRocnRsd2xpbWl0LCBpNzMwMF9pZGxlX3RocnRsb3dsbSwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRocnRsd2xpbWl0LAorCQkiVmFsdWUgZm9yIFRIUlRMT1dMTSBhY3RpdmF0aW9uIGZpZWxkICIKKwkJIigwID0gZGlzYWJsZSB0aHJvdHRsZSwgMSA9IE1heCB0aHJvdHRsZSwgMTY4ID0gTWluIHRocm90dGxlKSIpOworCisvKgorICogc2ltcGxlIGludm9jYXRpb24gYW5kIGR1cmF0aW9uIHN0YXRpc3RpY3MKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfc3RhcnRzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXM7CisKKyNpZmRlZiBERUJVRworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFzdF9za2lwOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZmJkX2RldjsKKworc3RhdGljIHNwaW5sb2NrX3QgaTczMDBfaWRsZV9sb2NrOworc3RhdGljIGludCBpNzMwMF9pZGxlX2FjdGl2ZTsKKworc3RhdGljIHU4IGk3MzAwX2lkbGVfdGhydGN0bF9zYXZlZDsKK3N0YXRpYyB1OCBpNzMwMF9pZGxlX3RocnRsb3dfc2F2ZWQ7CitzdGF0aWMgdTMyIGk3MzAwX2lkbGVfbWNfc2F2ZWQ7CisKK3N0YXRpYyBjcHVtYXNrX3QgaWRsZV9jcHVtYXNrOworc3RhdGljIGt0aW1lX3Qgc3RhcnRfa3RpbWU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBhdmdfaWRsZV91czsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyOworCisvKiBCZWdpbjogSS9PIEFUIEhlbHBlciByb3V0aW5lcyAqLworCisjZGVmaW5lIElPQVRfQ0hBTkJBU0UoaW9hdF9jdGwsIGNoYW4pIChpb2F0X2N0bCArIDB4ODAgKyAweDgwICogY2hhbikKKy8qIFNub29wIGNvbnRyb2wgKGRpc2FibGUgc25vb3BzIHdoZW4gY29oZXJlbmN5IGlzIG5vdCBpbXBvcnRhbnQpICovCisjZGVmaW5lIElPQVRfREVTQ19TQUREUl9TTlBfQ1RMICgxVUwgPDwgMSkKKyNkZWZpbmUgSU9BVF9ERVNDX0RBRERSX1NOUF9DVEwgKDFVTCA8PCAyKQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmlvYXRfZGV2Oworc3RhdGljIHN0cnVjdCBpb2F0X2RtYV9kZXNjcmlwdG9yICppb2F0X2Rlc2M7IC8qIEkvTyBBVCBkZXNjICYgZGF0YSAoMSBwYWdlKSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9hdF9kZXNjX3BoeXM7CitzdGF0aWMgdTggKmlvYXRfaW9tYXA7IC8qIEkvTyBBVCBtZW1vcnktbWFwcGVkIGNvbnRyb2wgcmVncyAoYWthIENCX0JBUikgKi8KK3N0YXRpYyB1OCAqaW9hdF9jaGFuYmFzZTsKKworLyogU3RhcnQgSS9PIEFUIG1lbW9yeSBjb3B5ICovCitzdGF0aWMgaW50IGk3MzAwX2lkbGVfaW9hdF9zdGFydCh2b2lkKQoreworCXUzMiBlcnI7CisJLyogQ2xlYXIgZXJyb3IgKGR1ZSB0byBjaXJjdWxhciBkZXNjcmlwdG9yIHBvaW50ZXIpICovCisJZXJyID0gcmVhZGwoaW9hdF9jaGFuYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOworCWlmIChlcnIpCisJCXdyaXRlbChlcnIsIGlvYXRfY2hhbmJhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKworCXdyaXRlYihJT0FUX0NIQU5DTURfU1RBUlQsIGlvYXRfY2hhbmJhc2UgKyBJT0FUMV9DSEFOQ01EX09GRlNFVCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFN0b3AgSS9PIEFUIG1lbW9yeSBjb3B5ICovCitzdGF0aWMgdm9pZCBpNzMwMF9pZGxlX2lvYXRfc3RvcCh2b2lkKQoreworCWludCBpOworCXU4IHN0czsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJd3JpdGViKElPQVRfQ0hBTkNNRF9SRVNFVCwKKwkJCWlvYXRfY2hhbmJhc2UgKyBJT0FUMV9DSEFOQ01EX09GRlNFVCk7CisKKwkJdWRlbGF5KDEwKTsKKworCQlzdHMgPSByZWFkcShpb2F0X2NoYW5iYXNlICsgSU9BVDFfQ0hBTlNUU19PRkZTRVQpICYKKwkJCUlPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTOworCisJCWlmIChzdHMgIT0gSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVNfQUNUSVZFKQorCQkJYnJlYWs7CisKKwl9CisKKwlpZiAoaSA9PSA1KQorCQlkcHJpbnRrKCJmYWlsZWQgdG8gc3VzcGVuZCtyZXNldCBJL08gQVQgYWZ0ZXIgNSByZXRyaWVzXG4iKTsKKworfQorCisvKiBUZXN0IEkvTyBBVCBieSBjb3B5aW5nIDEwMjQgYnl0ZSBmcm9tIDJrIHRvIDFrICovCitzdGF0aWMgaW50IF9faW5pdCBpNzMwMF9pZGxlX2lvYXRfc2VsZnRlc3QodTggKmN0bCwKKwkJc3RydWN0IGlvYXRfZG1hX2Rlc2NyaXB0b3IgKmRlc2MsIHVuc2lnbmVkIGxvbmcgZGVzY19waHlzKQoreworCXU2NCBjaGFuX3N0czsKKworCW1lbXNldChkZXNjLCAwLCAyMDQ4KTsKKwltZW1zZXQoKHU4ICopIGRlc2MgKyAyMDQ4LCAweGFiLCAxMDI0KTsKKworCWRlc2NbMF0uc2l6ZSA9IDEwMjQ7CisJZGVzY1swXS5jdGwgPSAwOworCWRlc2NbMF0uc3JjX2FkZHIgPSBkZXNjX3BoeXMgKyAyMDQ4OworCWRlc2NbMF0uZHN0X2FkZHIgPSBkZXNjX3BoeXMgKyAxMDI0OworCWRlc2NbMF0ubmV4dCA9IDA7CisKKwl3cml0ZWIoSU9BVF9DSEFOQ01EX1JFU0VULCBpb2F0X2NoYW5iYXNlICsgSU9BVDFfQ0hBTkNNRF9PRkZTRVQpOworCXdyaXRlYihJT0FUX0NIQU5DTURfU1RBUlQsIGlvYXRfY2hhbmJhc2UgKyBJT0FUMV9DSEFOQ01EX09GRlNFVCk7CisKKwl1ZGVsYXkoMTAwMCk7CisKKwljaGFuX3N0cyA9IHJlYWRxKGlvYXRfY2hhbmJhc2UgKyBJT0FUMV9DSEFOU1RTX09GRlNFVCkgJgorCQkJSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVM7CisKKwlpZiAoY2hhbl9zdHMgIT0gSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVNfRE9ORSkgeworCQkvKiBOb3QgY29tcGxldGUsIHJlc2V0IHRoZSBjaGFubmVsICovCisJCXdyaXRlYihJT0FUX0NIQU5DTURfUkVTRVQsCisJCSAgICAgICBpb2F0X2NoYW5iYXNlICsgSU9BVDFfQ0hBTkNNRF9PRkZTRVQpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCoodTMyICopICgodTggKikgZGVzYyArIDMwNjgpICE9IDB4YWJhYmFiYWIgfHwKKwkgICAgKih1MzIgKikgKCh1OCAqKSBkZXNjICsgMjA0NCkgIT0gMHhhYmFiYWJhYikgeworCQlkcHJpbnRrKCJEYXRhIHZhbHVlcyBzcmMgMHgleCwgZGVzdCAweCV4LCBtZW1zZXQgMHgleFxuIiwKKwkJCSoodTMyICopICgodTggKikgZGVzYyArIDIwNDgpLAorCQkJKih1MzIgKikgKCh1OCAqKSBkZXNjICsgMTAyNCksCisJCQkqKHUzMiAqKSAoKHU4ICopIGRlc2MgKyAzMDcyKSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGR1bW15X2RtYV9kZXYgPSB7CisJLmJ1c19pZCA9ICJmYWxsYmFjayBkZXZpY2UiLAorCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV82NEJJVF9NQVNLLAorCS5kbWFfbWFzayA9ICZkdW1teV9kbWFfZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorfTsKKworLyogU2V0dXAgYW5kIGluaXRpYWxpemUgSS9PIEFUICovCisvKiBUaGlzIGRyaXZlciBuZWVkcyBJL08gQVQgYXMgdGhlIHRocm90dGxpbmcgdGFrZXMgZWZmZWN0IG9ubHkgd2hlbiB0aGVyZSBpcworICogc29tZSBtZW1vcnkgYWN0aXZpdHkuIFdlIHVzZSBJL08gQVQgdG8gc2V0IHVwIGEgZHVtbXkgY29weSwgd2hpbGUgYWxsIENQVXMKKyAqIGdvIGlkbGUgYW5kIG1lbW9yeSBpcyB0aHJvdHRsZWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGk3MzAwX2lkbGVfaW9hdF9pbml0KHZvaWQpCit7CisJdTggdmVyLCBjaGFuX2NvdW50LCBpb2F0X2NoYW47CisJdTE2IGNoYW5fY3RsOworCisJaW9hdF9pb21hcCA9ICh1OCAqKSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGlvYXRfZGV2LCAwKSwKKwkJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4oaW9hdF9kZXYsIDApKTsKKworCWlmICghaW9hdF9pb21hcCkgeworCQlwcmludGsoS0VSTl9FUlIgSTczMDBfUFJJTlQgImZhaWxlZCB0byBtYXAgSS9PIEFUIHJlZ2lzdGVyc1xuIik7CisJCWdvdG8gZXJyX3JldDsKKwl9CisKKwl2ZXIgPSByZWFkYihpb2F0X2lvbWFwICsgSU9BVF9WRVJfT0ZGU0VUKTsKKwlpZiAodmVyICE9IElPQVRfVkVSXzFfMikgeworCQlwcmludGsoS0VSTl9FUlIgSTczMDBfUFJJTlQgInVua25vd24gSS9PIEFUIHZlcnNpb24gKCV1LiV1KVxuIiwKKwkJCXZlciA+PiA0LCB2ZXIgJiAweGYpOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisKKwljaGFuX2NvdW50ID0gcmVhZGIoaW9hdF9pb21hcCArIElPQVRfQ0hBTkNOVF9PRkZTRVQpOworCWlmICghY2hhbl9jb3VudCkgeworCQlwcmludGsoS0VSTl9FUlIgSTczMDBfUFJJTlQgInVuZXhwZWN0ZWQgIyBvZiBJL08gQVQgY2hhbm5lbHMgIgorCQkJIigldSlcbiIsCisJCQljaGFuX2NvdW50KTsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJaW9hdF9jaGFuID0gY2hhbl9jb3VudCAtIDE7CisJaW9hdF9jaGFuYmFzZSA9IElPQVRfQ0hBTkJBU0UoaW9hdF9pb21hcCwgaW9hdF9jaGFuKTsKKworCWNoYW5fY3RsID0gcmVhZHcoaW9hdF9jaGFuYmFzZSArIElPQVRfQ0hBTkNUUkxfT0ZGU0VUKTsKKwlpZiAoY2hhbl9jdGwgJiBJT0FUX0NIQU5DVFJMX0NIQU5ORUxfSU5fVVNFKSB7CisJCXByaW50ayhLRVJOX0VSUiBJNzMwMF9QUklOVCAiY2hhbm5lbCAlZCBpbiB1c2VcbiIsIGlvYXRfY2hhbik7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKworCXdyaXRldyhJT0FUX0NIQU5DVFJMX0NIQU5ORUxfSU5fVVNFLAorCQlpb2F0X2NoYW5iYXNlICsgSU9BVF9DSEFOQ1RSTF9PRkZTRVQpOworCisJaW9hdF9kZXNjID0gKHN0cnVjdCBpb2F0X2RtYV9kZXNjcmlwdG9yICopZG1hX2FsbG9jX2NvaGVyZW50KAorCQkJJmR1bW15X2RtYV9kZXYsIDQwOTYsCisJCQkoZG1hX2FkZHJfdCAqKSZpb2F0X2Rlc2NfcGh5cywgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2F0X2Rlc2MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEk3MzAwX1BSSU5UICJmYWlsZWQgdG8gYWxsb2NhdGUgSS9PIEFUIGRlc2NcbiIpOworCQlnb3RvIGVycl9tYXJrX3VudXNlZDsKKwl9CisKKwl3cml0ZWwoaW9hdF9kZXNjX3BoeXMgJiAweGZmZmZmZmZmVUwsCisJICAgICAgIGlvYXRfY2hhbmJhc2UgKyBJT0FUMV9DSEFJTkFERFJfT0ZGU0VUX0xPVyk7CisJd3JpdGVsKGlvYXRfZGVzY19waHlzID4+IDMyLAorCSAgICAgICBpb2F0X2NoYW5iYXNlICsgSU9BVDFfQ0hBSU5BRERSX09GRlNFVF9ISUdIKTsKKworCWlmIChpNzMwMF9pZGxlX2lvYXRfc2VsZnRlc3QoaW9hdF9pb21hcCwgaW9hdF9kZXNjLCBpb2F0X2Rlc2NfcGh5cykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEk3MzAwX1BSSU5UICJJL08gQVQgc2VsZi10ZXN0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJLyogU2V0dXAgY2lyY3VsYXIgSS9PIEFUIGRlc2NyaXB0b3IgY2hhaW4gKi8KKwlpb2F0X2Rlc2NbMF0uY3RsID0gSU9BVF9ERVNDX1NBRERSX1NOUF9DVEwgfCBJT0FUX0RFU0NfREFERFJfU05QX0NUTDsKKwlpb2F0X2Rlc2NbMF0uc3JjX2FkZHIgPSBpb2F0X2Rlc2NfcGh5cyArIDIwNDg7CisJaW9hdF9kZXNjWzBdLmRzdF9hZGRyID0gaW9hdF9kZXNjX3BoeXMgKyAzMDcyOworCWlvYXRfZGVzY1swXS5zaXplID0gMTI4OworCWlvYXRfZGVzY1swXS5uZXh0ID0gaW9hdF9kZXNjX3BoeXMgKyBzaXplb2Yoc3RydWN0IGlvYXRfZG1hX2Rlc2NyaXB0b3IpOworCisJaW9hdF9kZXNjWzFdLmN0bCA9IGlvYXRfZGVzY1swXS5jdGw7CisJaW9hdF9kZXNjWzFdLnNyY19hZGRyID0gaW9hdF9kZXNjWzBdLnNyY19hZGRyOworCWlvYXRfZGVzY1sxXS5kc3RfYWRkciA9IGlvYXRfZGVzY1swXS5kc3RfYWRkcjsKKwlpb2F0X2Rlc2NbMV0uc2l6ZSA9IGlvYXRfZGVzY1swXS5zaXplOworCWlvYXRfZGVzY1sxXS5uZXh0ID0gaW9hdF9kZXNjX3BoeXM7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJZG1hX2ZyZWVfY29oZXJlbnQoJmR1bW15X2RtYV9kZXYsIDQwOTYsICh2b2lkICopaW9hdF9kZXNjLCAwKTsKK2Vycl9tYXJrX3VudXNlZDoKKwl3cml0ZXcoMCwgaW9hdF9jaGFuYmFzZSArIElPQVRfQ0hBTkNUUkxfT0ZGU0VUKTsKK2Vycl91bm1hcDoKKwlpb3VubWFwKGlvYXRfaW9tYXApOworZXJyX3JldDoKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyogQ2xlYW51cCBJL08gQVQgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBpNzMwMF9pZGxlX2lvYXRfZXhpdCh2b2lkKQoreworCWludCBpOworCXU2NCBjaGFuX3N0czsKKworCWk3MzAwX2lkbGVfaW9hdF9zdG9wKCk7CisKKwkvKiBXYWl0IGZvciBhIHdoaWxlIGZvciB0aGUgY2hhbm5lbCB0byBoYWx0IGJlZm9yZSByZWxlYXNpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQl3cml0ZWIoSU9BVF9DSEFOQ01EX1JFU0VULAorCQkgICAgICAgaW9hdF9jaGFuYmFzZSArIElPQVQxX0NIQU5DTURfT0ZGU0VUKTsKKworCQljaGFuX3N0cyA9IHJlYWRxKGlvYXRfY2hhbmJhc2UgKyBJT0FUMV9DSEFOU1RTX09GRlNFVCkgJgorCQkJSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVM7CisKKwkJaWYgKGNoYW5fc3RzICE9IElPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTX0FDVElWRSkgeworCQkJd3JpdGV3KDAsIGlvYXRfY2hhbmJhc2UgKyBJT0FUX0NIQU5DVFJMX09GRlNFVCk7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMTAwMCk7CisJfQorCisJY2hhbl9zdHMgPSByZWFkcShpb2F0X2NoYW5iYXNlICsgSU9BVDFfQ0hBTlNUU19PRkZTRVQpICYKKwkJCUlPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTOworCisJLyoKKwkgKiBXZSB0cmllZCB0byByZXNldCBtdWx0aXBsZSB0aW1lcy4gSWYgSU8gQS9UIGNoYW5uZWwgaXMgc3RpbGwgYWN0aXZlCisJICogZmxhZyBhbiBlcnJvciBhbmQgcmV0dXJuIHdpdGhvdXQgY2xlYW51cC4gTWVtb3J5IGxlYWsgaXMgYmV0dGVyCisJICogdGhhbiByYW5kb20gY29ycnVwdGlvbiBpbiB0aGF0IGV4dHJlbWUgZXJyb3Igc2l0dWF0aW9uLgorCSAqLworCWlmIChjaGFuX3N0cyA9PSBJT0FUX0NIQU5TVFNfRE1BX1RSQU5TRkVSX1NUQVRVU19BQ1RJVkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEk3MzAwX1BSSU5UICJVbmFibGUgdG8gc3RvcCBJTyBBL1QgY2hhbm5lbHMuIgorCQkJIiBOb3QgZnJlZWluZyByZXNvdXJjZXNcbiIpOworCQlyZXR1cm47CisJfQorCisJZG1hX2ZyZWVfY29oZXJlbnQoJmR1bW15X2RtYV9kZXYsIDQwOTYsICh2b2lkICopaW9hdF9kZXNjLCAwKTsKKwlpb3VubWFwKGlvYXRfaW9tYXApOworfQorCisvKiBFbmQ6IEkvTyBBVCBIZWxwZXIgcm91dGluZXMgKi8KKworI2RlZmluZSBESU1NX1RIUlRMT1cgMHg2NAorI2RlZmluZSBESU1NX1RIUlRDVEwgMHg2NworI2RlZmluZSBESU1NX1RIUlRDVExfVEhSTUhVTlQgKDFVTCA8PCAwKQorI2RlZmluZSBESU1NX01DIDB4NDAKKyNkZWZpbmUgRElNTV9HVFdfTU9ERSAoMVVMIDw8IDE3KQorI2RlZmluZSBESU1NX0dCTEFDVCAweDYwCisKKy8qCisgKiBLZWVwIHRyYWNrIG9mIGFuIGV4cG9uZW50aWFsLWRlY2F5aW5nIGF2ZXJhZ2Ugb2YgcmVjZW50IGlkbGUgZHVyYXRpb25zLgorICogVGhlIGxhdGVzdCBkdXJhdGlvbiBnZXRzIERVUkFUSU9OX1dFSUdIVF9QQ1QgcGVyY2VudGFnZSB3ZWlnaHQKKyAqIGluIHRoaXMgYXZlcmFnZSwgd2l0aCB0aGUgb2xkIGF2ZXJhZ2UgZ2V0dGluZyB0aGUgcmVtYWluaW5nIHdlaWdodC4KKyAqCisgKiBIaWdoIHdlaWdodHMgZW1waGFzaXplIHJlY2VudCBoaXN0b3J5LCBsb3cgd2VpZ2h0cyBpbmNsdWRlIGxvbmcgaGlzdG9yeS4KKyAqLworI2RlZmluZSBEVVJBVElPTl9XRUlHSFRfUENUIDU1CisKKy8qCisgKiBXaGVuIHRoZSBkZWNheWluZyBhdmVyYWdlIG9mIHJlY2VudCBkdXJhdGlvbnMgb3IgdGhlIHByZWRpY3RlZCBkdXJhdGlvbgorICogb2YgdGhlIG5leHQgdGltZXIgaW50ZXJydXB0IGlzIHNob3J0ZXIgdGhhbiBkdXJhdGlvbl90aHJlc2hvbGQsIHRoZQorICogZHJpdmVyIHdpbGwgZGVjbGluZSB0byB0aHJvdHRsZS4KKyAqLworI2RlZmluZSBEVVJBVElPTl9USFJFU0hPTERfVVMgMTAwCisKKworLyogU3RvcmUgRElNTSB0aGVybWFsIHRocm90dGxlIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBpbnQgaTczMDBfaWRsZV90aHJ0X3NhdmUodm9pZCkKK3sKKwl1MzIgbmV3X21jX3ZhbDsKKwl1OCBnYmxhY3RsbTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZiZF9kZXYsIERJTU1fVEhSVENUTCwgJmk3MzAwX2lkbGVfdGhydGN0bF9zYXZlZCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZmJkX2RldiwgRElNTV9USFJUTE9XLCAmaTczMDBfaWRsZV90aHJ0bG93X3NhdmVkKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZmJkX2RldiwgRElNTV9NQywgJmk3MzAwX2lkbGVfbWNfc2F2ZWQpOworCS8qCisJICogTWFrZSBzdXJlIHdlIGhhdmUgR2xvYmFsIFRocm90dGxpbmcgV2luZG93IE1vZGUgc2V0IHRvIGhhdmUgYQorCSAqICJzaG9ydCIgd2luZG93LiBUaGlzIChtb3N0bHkpIHdvcmtzIGFyb3VuZCBhbiBpc3N1ZSB3aGVyZQorCSAqIHRocm90dGxpbmcgcGVyc2lzdHMgdW50aWwgdGhlIGVuZCBvZiB0aGUgZ2xvYmFsIHRocm90dGxpbmcgd2luZG93CisJICogc2l6ZS4gT24gdGhlIHRlc3RlZCBzeXN0ZW0sIHRoaXMgd2FzIHJlc3VsdGluZyBpbiBhIG1heGltdW0gb2YKKwkgKiA2NCBtcyB0byBleGl0IHRocm90dGxpbmcgKGF2ZXJhZ2UgMzIgbXMpLiBUaGUgYWN0dWFsIG51bWJlcnMKKwkgKiBkZXBlbmRzIG9uIHN5c3RlbSBmcmVxdWVuY2llcy4gU2V0dGluZyB0aGUgc2hvcnQgd2luZG93IHJlZHVjZXMKKwkgKiB0aGlzIGJ5IGEgZmFjdG9yIG9mIDQwOTYuCisJICoKKwkgKiBXZSB3aWxsIG9ubHkgZG8gdGhpcyBvbmx5IGlmIHRoZSBzeXN0ZW0gaXMgc2V0IGZvcgorCSAqIHVubGltaXRlZC1hY3RpdmF0aW9ucyB3aGlsZSBpbiBvcGVuLWxvb3AgdGhyb3R0bGluZyAoaS5lLiwgd2hlbgorCSAqIEdsb2JhbCBBY3RpdmF0aW9uIFRocm90dGxlIExpbWl0IGlzIHplcm8pLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZiZF9kZXYsIERJTU1fR0JMQUNULCAmZ2JsYWN0bG0pOworCWRwcmludGsoInRocnRjdGxfc2F2ZWQgPSAweCUwMngsIHRocnRsb3dfc2F2ZWQgPSAweCUwMnhcbiIsCisJCWk3MzAwX2lkbGVfdGhydGN0bF9zYXZlZCwKKwkJaTczMDBfaWRsZV90aHJ0bG93X3NhdmVkKTsKKwlkcHJpbnRrKCJtY19zYXZlZCA9IDB4JTA4eCwgZ2JsYWN0bG0gPSAweCUwMnhcbiIsCisJCWk3MzAwX2lkbGVfbWNfc2F2ZWQsCisJCWdibGFjdGxtKTsKKwlpZiAoZ2JsYWN0bG0gPT0gMCkgeworCQluZXdfbWNfdmFsID0gaTczMDBfaWRsZV9tY19zYXZlZCB8IERJTU1fR1RXX01PREU7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZmJkX2RldiwgRElNTV9NQywgbmV3X21jX3ZhbCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWRwcmludGsoImNvdWxkIG5vdCBzZXQgR1RXX01PREUgPSAxIChPTFRUIGVuYWJsZWQpXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorfQorCisvKiBSZXN0b3JlIERJTU0gdGhlcm1hbCB0aHJvdHRsZSBjb25maWd1cmF0aW9uICovCitzdGF0aWMgdm9pZCBpNzMwMF9pZGxlX3RocnRfcmVzdG9yZSh2b2lkKQoreworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZmJkX2RldiwgRElNTV9NQywgaTczMDBfaWRsZV9tY19zYXZlZCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZiZF9kZXYsIERJTU1fVEhSVExPVywgaTczMDBfaWRsZV90aHJ0bG93X3NhdmVkKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZmJkX2RldiwgRElNTV9USFJUQ1RMLCBpNzMwMF9pZGxlX3RocnRjdGxfc2F2ZWQpOworfQorCisvKiBFbmFibGUgRElNTSB0aGVybWFsIHRocm90dGxpbmcgKi8KK3N0YXRpYyB2b2lkIGk3MzAwX2lkbGVfc3RhcnQodm9pZCkKK3sKKwl1OCBuZXdfY3RsOworCXU4IGxpbWl0OworCisJbmV3X2N0bCA9IGk3MzAwX2lkbGVfdGhydGN0bF9zYXZlZCAmIH5ESU1NX1RIUlRDVExfVEhSTUhVTlQ7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZiZF9kZXYsIERJTU1fVEhSVENUTCwgbmV3X2N0bCk7CisKKwlsaW1pdCA9IGk3MzAwX2lkbGVfdGhydGxvd2xtOworCWlmICh1bmxpa2VseShsaW1pdCA+IE1BWF9USFJUTFdMSU1JVCkpCisJCWxpbWl0ID0gTUFYX1RIUlRMV0xJTUlUOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZiZF9kZXYsIERJTU1fVEhSVExPVywgbGltaXQpOworCisJbmV3X2N0bCA9IGk3MzAwX2lkbGVfdGhydGN0bF9zYXZlZCB8IERJTU1fVEhSVENUTF9USFJNSFVOVDsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZmJkX2RldiwgRElNTV9USFJUQ1RMLCBuZXdfY3RsKTsKK30KKworLyogRGlzYWJsZSBESU1NIHRoZXJtYWwgdGhyb3R0bGluZyAqLworc3RhdGljIHZvaWQgaTczMDBfaWRsZV9zdG9wKHZvaWQpCit7CisJdTggbmV3X2N0bDsKKwl1OCBnb3RfY3RsOworCisJbmV3X2N0bCA9IGk3MzAwX2lkbGVfdGhydGN0bF9zYXZlZCAmIH5ESU1NX1RIUlRDVExfVEhSTUhVTlQ7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZiZF9kZXYsIERJTU1fVEhSVENUTCwgbmV3X2N0bCk7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZmJkX2RldiwgRElNTV9USFJUTE9XLCBpNzMwMF9pZGxlX3RocnRsb3dfc2F2ZWQpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShmYmRfZGV2LCBESU1NX1RIUlRDVEwsIGk3MzAwX2lkbGVfdGhydGN0bF9zYXZlZCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZmJkX2RldiwgRElNTV9USFJUQ1RMLCAmZ290X2N0bCk7CisJV0FSTl9PTl9PTkNFKGdvdF9jdGwgIT0gaTczMDBfaWRsZV90aHJ0Y3RsX3NhdmVkKTsKK30KKworCisvKgorICogaTczMDBfYXZnX2R1cmF0aW9uX2NoZWNrKCkKKyAqIHJldHVybiAwIGlmIHRoZSBkZWNheWluZyBhdmVyYWdlIG9mIHJlY2VudCBpZGxlIGR1cmF0aW9ucyBpcworICogbW9yZSB0aGFuIERVUkFUSU9OX1RIUkVTSE9MRF9VUworICovCitzdGF0aWMgaW50IGk3MzAwX2F2Z19kdXJhdGlvbl9jaGVjayh2b2lkKQoreworCWlmIChhdmdfaWRsZV91cyA+PSBEVVJBVElPTl9USFJFU0hPTERfVVMpCisJCXJldHVybiAwOworCisjaWZkZWYgREVCVUcKKwlwYXN0X3NraXArKzsKKyNlbmRpZgorCXJldHVybiAxOworfQorCisvKiBJZGxlIG5vdGlmaWVyIHRvIGxvb2sgYXQgaWRsZSBDUFVzICovCitzdGF0aWMgaW50IGk3MzAwX2lkbGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkJdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWt0aW1lX3Qgbm93X2t0aW1lOworCXN0YXRpYyBrdGltZV90IGlkbGVfYmVnaW5fdGltZTsKKwlzdGF0aWMgaW50IHRpbWVfaW5pdCA9IDE7CisKKwlpZiAoIWk3MzAwX2lkbGVfdGhydGxvd2xtKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseSh0aW1lX2luaXQpKSB7CisJCXRpbWVfaW5pdCA9IDA7CisJCWlkbGVfYmVnaW5fdGltZSA9IGt0aW1lX2dldCgpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpNzMwMF9pZGxlX2xvY2ssIGZsYWdzKTsKKwlpZiAodmFsID09IElETEVfU1RBUlQpIHsKKworCQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgaWRsZV9jcHVtYXNrKTsKKworCQlpZiAoY3B1c193ZWlnaHQoaWRsZV9jcHVtYXNrKSAhPSBudW1fb25saW5lX2NwdXMoKSkKKwkJCWdvdG8gZW5kOworCisJCW5vd19rdGltZSA9IGt0aW1lX2dldCgpOworCQlpZGxlX2JlZ2luX3RpbWUgPSBub3dfa3RpbWU7CisKKwkJaWYgKGk3MzAwX2F2Z19kdXJhdGlvbl9jaGVjaygpKQorCQkJZ290byBlbmQ7CisKKwkJaTczMDBfaWRsZV9hY3RpdmUgPSAxOworCQl0b3RhbF9zdGFydHMrKzsKKwkJc3RhcnRfa3RpbWUgPSBub3dfa3RpbWU7CisKKwkJaTczMDBfaWRsZV9zdGFydCgpOworCQlpNzMwMF9pZGxlX2lvYXRfc3RhcnQoKTsKKworCX0gZWxzZSBpZiAodmFsID09IElETEVfRU5EKSB7CisJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGlkbGVfY3B1bWFzayk7CisJCWlmIChjcHVzX3dlaWdodChpZGxlX2NwdW1hc2spID09IChudW1fb25saW5lX2NwdXMoKSAtIDEpKSB7CisJCQkvKiBGaXJzdCBDUFUgY29taW5nIG91dCBvZiBpZGxlICovCisJCQl1NjQgaWRsZV9kdXJhdGlvbl91czsKKworCQkJbm93X2t0aW1lID0ga3RpbWVfZ2V0KCk7CisKKwkJCWlkbGVfZHVyYXRpb25fdXMgPSBrdGltZV90b191cyhrdGltZV9zdWIKKwkJCQkJCShub3dfa3RpbWUsIGlkbGVfYmVnaW5fdGltZSkpOworCisJCQlhdmdfaWRsZV91cyA9CisJCQkJKCgxMDAgLSBEVVJBVElPTl9XRUlHSFRfUENUKSAqIGF2Z19pZGxlX3VzICsKKwkJCQkgRFVSQVRJT05fV0VJR0hUX1BDVCAqIGlkbGVfZHVyYXRpb25fdXMpIC8gMTAwOworCisJCQlpZiAoaTczMDBfaWRsZV9hY3RpdmUpIHsKKwkJCQlrdGltZV90IGlkbGVfa3RpbWU7CisKKwkJCQlpZGxlX2t0aW1lID0ga3RpbWVfc3ViKG5vd19rdGltZSwgc3RhcnRfa3RpbWUpOworCQkJCXRvdGFsX3VzICs9IGt0aW1lX3RvX3VzKGlkbGVfa3RpbWUpOworCisJCQkJaTczMDBfaWRsZV9pb2F0X3N0b3AoKTsKKwkJCQlpNzMwMF9pZGxlX3N0b3AoKTsKKwkJCQlpNzMwMF9pZGxlX2FjdGl2ZSA9IDA7CisJCQl9CisJCX0KKwl9CitlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTczMDBfaWRsZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaTczMDBfaWRsZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGk3MzAwX2lkbGVfbm90aWZpZXIsCit9OworCisvKgorICogSS9PIEFUIGNvbnRyb2xzIChQQ0kgYnVzIDAgZGV2aWNlIDggZnVuY3Rpb24gMCkKKyAqIERJTU0gY29udHJvbHMgKFBDSSBidXMgMCBkZXZpY2UgMTYgZnVuY3Rpb24gMSkKKyAqLworI2RlZmluZSBJT0FUX0JVUyAwCisjZGVmaW5lIElPQVRfREVWRk4gUENJX0RFVkZOKDgsIDApCisjZGVmaW5lIE1FTUNUTF9CVVMgMAorI2RlZmluZSBNRU1DVExfREVWRk4gUENJX0RFVkZOKDE2LCAxKQorCitzdHJ1Y3QgZmJkX2lvYXQgeworCXVuc2lnbmVkIGludCB2ZW5kb3I7CisJdW5zaWduZWQgaW50IGlvYXRfZGV2OworfTsKKworLyoKKyAqIFRoZSBpNTAwMCBjaGlwLXNldCBoYXMgdGhlIHNhbWUgaG9va3MgYXMgdGhlIGk3MzAwCisgKiBidXQgc3VwcG9ydCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhpcyBkcml2ZXIKKyAqIGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgb24gdGhhdCBwbGF0Zm9ybS4KKyAqLworI2RlZmluZSBTVVBQT1JUX0k1MDAwIDAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmYmRfaW9hdCBmYmRfaW9hdF9saXN0W10gPSB7CisJe1BDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9DTkJ9LAorI2lmIFNVUFBPUlRfSTUwMDAKKwl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUfSwKKyNlbmRpZgorCXswLCAwfQorfTsKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9GQkRfQ05CKSB9LAorI2lmIFNVUFBPUlRfSTUwMDAKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF81MDAwX0VSUikgfSwKKyNlbmRpZgorCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV90YmwpOworCisvKiBDaGVjayBmb3Iga25vd24gcGxhdGZvcm1zIHdpdGggSS9PLUFUICovCitzdGF0aWMgaW50IF9faW5pdCBpNzMwMF9pZGxlX3BsYXRmb3JtX3Byb2JlKHZvaWQpCit7CisJaW50IGk7CisKKwlmYmRfZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoTUVNQ1RMX0JVUywgTUVNQ1RMX0RFVkZOKTsKKwlpZiAoIWZiZF9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJZm9yIChpID0gMDsgcGNpX3RibFtpXS52ZW5kb3IgIT0gMDsgaSsrKSB7CisJCWlmIChmYmRfZGV2LT52ZW5kb3IgPT0gcGNpX3RibFtpXS52ZW5kb3IgJiYKKwkJICAgIGZiZF9kZXYtPmRldmljZSA9PSBwY2lfdGJsW2ldLmRldmljZSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHBjaV90YmxbaV0udmVuZG9yID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJaW9hdF9kZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdChJT0FUX0JVUywgSU9BVF9ERVZGTik7CisJaWYgKCFpb2F0X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmb3IgKGkgPSAwOyBmYmRfaW9hdF9saXN0W2ldLnZlbmRvciAhPSAwOyBpKyspIHsKKwkJaWYgKGlvYXRfZGV2LT52ZW5kb3IgPT0gZmJkX2lvYXRfbGlzdFtpXS52ZW5kb3IgJiYKKwkJICAgIGlvYXRfZGV2LT5kZXZpY2UgPT0gZmJkX2lvYXRfbGlzdFtpXS5pb2F0X2RldikgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK2ludCBzdGF0c19vcGVuX2dlbmVyaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwKQoreworCWZwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzdGF0c19yZWFkX3VsKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjb3VudCwKKwkJCQlsb2ZmX3QgKm9mZikKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gZnAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlszMl07CisJaW50IGxlbjsKKworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgMzIsICIlbHVcbiIsICpwKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIG9mZiwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGxlX2ZvcHMgPSB7CisJLm9wZW4JPSBzdGF0c19vcGVuX2dlbmVyaWMsCisJLnJlYWQJPSBzdGF0c19yZWFkX3VsLAorfTsKKworc3RydWN0IGRlYnVnZnNfZmlsZV9pbmZvIHsKKwl2b2lkICpwdHI7CisJY2hhciBuYW1lWzMyXTsKKwlzdHJ1Y3QgZGVudHJ5ICpmaWxlOworfSBkZWJ1Z2ZzX2ZpbGVfbGlzdFtdID0geworCQkJCXsmdG90YWxfc3RhcnRzLCAidG90YWxfc3RhcnRzIiwgTlVMTH0sCisJCQkJeyZ0b3RhbF91cywgInRvdGFsX3VzIiwgTlVMTH0sCisjaWZkZWYgREVCVUcKKwkJCQl7JnBhc3Rfc2tpcCwgInBhc3Rfc2tpcCIsIE5VTEx9LAorI2VuZGlmCisJCQkJe05VTEwsICIiLCBOVUxMfQorCQkJfTsKKworc3RhdGljIGludCBfX2luaXQgaTczMDBfaWRsZV9pbml0KHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJmk3MzAwX2lkbGVfbG9jayk7CisJY3B1c19jbGVhcihpZGxlX2NwdW1hc2spOworCXRvdGFsX3VzID0gMDsKKworCWlmIChpNzMwMF9pZGxlX3BsYXRmb3JtX3Byb2JlKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGk3MzAwX2lkbGVfdGhydF9zYXZlKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGk3MzAwX2lkbGVfaW9hdF9pbml0KCkpCisJCXJldHVybiAtRU5PREVWOworCisJZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImk3MzAwX2lkbGUiLCBOVUxMKTsKKwlpZiAoZGVidWdmc19kaXIpIHsKKwkJaW50IGkgPSAwOworCisJCXdoaWxlIChkZWJ1Z2ZzX2ZpbGVfbGlzdFtpXS5wdHIgIT0gTlVMTCkgeworCQkJZGVidWdmc19maWxlX2xpc3RbaV0uZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoCisJCQkJCWRlYnVnZnNfZmlsZV9saXN0W2ldLm5hbWUsCisJCQkJCVNfSVJVU1IsCisJCQkJCWRlYnVnZnNfZGlyLAorCQkJCQlkZWJ1Z2ZzX2ZpbGVfbGlzdFtpXS5wdHIsCisJCQkJCSZpZGxlX2ZvcHMpOworCQkJaSsrOworCQl9CisJfQorCisJaWRsZV9ub3RpZmllcl9yZWdpc3RlcigmaTczMDBfaWRsZV9uYik7CisKKwlwcmludGsoS0VSTl9JTkZPICJpNzMwMF9pZGxlOiBsb2FkZWQgdiVzXG4iLCBJNzMwMF9JRExFX0RSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGk3MzAwX2lkbGVfZXhpdCh2b2lkKQoreworCWlkbGVfbm90aWZpZXJfdW5yZWdpc3RlcigmaTczMDBfaWRsZV9uYik7CisKKwlpZiAoZGVidWdmc19kaXIpIHsKKwkJaW50IGkgPSAwOworCisJCXdoaWxlIChkZWJ1Z2ZzX2ZpbGVfbGlzdFtpXS5maWxlICE9IE5VTEwpIHsKKwkJCWRlYnVnZnNfcmVtb3ZlKGRlYnVnZnNfZmlsZV9saXN0W2ldLmZpbGUpOworCQkJaSsrOworCQl9CisKKwkJZGVidWdmc19yZW1vdmUoZGVidWdmc19kaXIpOworCX0KKwlpNzMwMF9pZGxlX3RocnRfcmVzdG9yZSgpOworCWk3MzAwX2lkbGVfaW9hdF9leGl0KCk7Cit9CisKK21vZHVsZV9pbml0KGk3MzAwX2lkbGVfaW5pdCk7Cittb2R1bGVfZXhpdChpNzMwMF9pZGxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbmR5IEhlbnJvaWQgPGFuZHJldy5kLmhlbnJvaWRAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBDaGlwc2V0IERJTU0gSWRsZSBQb3dlciBTYXZpbmcgRHJpdmVyIHYiCisJCQlJNzMwMF9JRExFX0RSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGE3OGQzNWEuLmYxZTgyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICNkZWZpbmUgQ01fQ09VTlRFUl9BVFRSKF9uYW1lLCBfaW5kZXgpIFwKIHN0cnVjdCBjbV9jb3VudGVyX2F0dHJpYnV0ZSBjbV8jI19uYW1lIyNfY291bnRlcl9hdHRyID0geyBcCi0JLmF0dHIgPSB7IC5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IDA0NDQsIC5vd25lciA9IFRISVNfTU9EVUxFIH0sIFwKKwkuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gMDQ0NCB9LCBcCiAJLmluZGV4ID0gX2luZGV4IFwKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCA0OWM0NWZlLi41YzU0ZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtNDA2LDE5ICs0MDYsMTUgQEAKIAogCWlmIChpID09IHFwX2luZm8tPnNub29wX3RhYmxlX3NpemUpIHsKIAkJLyogR3JvdyB0YWJsZS4gKi8KLQkJbmV3X3Nub29wX3RhYmxlID0ga21hbGxvYyhzaXplb2YgbWFkX3Nub29wX3ByaXYgKgotCQkJCQkgIHFwX2luZm8tPnNub29wX3RhYmxlX3NpemUgKyAxLAotCQkJCQkgIEdGUF9BVE9NSUMpOworCQluZXdfc25vb3BfdGFibGUgPSBrcmVhbGxvYyhxcF9pbmZvLT5zbm9vcF90YWJsZSwKKwkJCQkJICAgc2l6ZW9mIG1hZF9zbm9vcF9wcml2ICoKKwkJCQkJICAgKHFwX2luZm8tPnNub29wX3RhYmxlX3NpemUgKyAxKSwKKwkJCQkJICAgR0ZQX0FUT01JQyk7CiAJCWlmICghbmV3X3Nub29wX3RhYmxlKSB7CiAJCQlpID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmIChxcF9pbmZvLT5zbm9vcF90YWJsZSkgewotCQkJbWVtY3B5KG5ld19zbm9vcF90YWJsZSwgcXBfaW5mby0+c25vb3BfdGFibGUsCi0JCQkgICAgICAgc2l6ZW9mIG1hZF9zbm9vcF9wcml2ICoKLQkJCSAgICAgICBxcF9pbmZvLT5zbm9vcF90YWJsZV9zaXplKTsKLQkJCWtmcmVlKHFwX2luZm8tPnNub29wX3RhYmxlKTsKLQkJfQorCiAJCXFwX2luZm8tPnNub29wX3RhYmxlID0gbmV3X3Nub29wX3RhYmxlOwogCQlxcF9pbmZvLT5zbm9vcF90YWJsZV9zaXplKys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCmluZGV4IDNkZGFjZjMuLjQzNDZhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKQEAgLTkwNCw4ICs5MDQsOCBAQAogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0KTsKIAltYyA9IHVjbWFfYWxsb2NfbXVsdGljYXN0KGN0eCk7Ci0JaWYgKElTX0VSUihtYykpIHsKLQkJcmV0ID0gUFRSX0VSUihtYyk7CisJaWYgKCFtYykgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwppbmRleCBjMzI1YzQ0Li40NGU5MzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKQEAgLTE5NDIsNiArMTk0Miw3IEBACiBmYWlsMzoKIAljeGdiM19mcmVlX2F0aWQoZXAtPmNvbS50ZGV2LCBlcC0+YXRpZCk7CiBmYWlsMjoKKwljbV9pZC0+cmVtX3JlZihjbV9pZCk7CiAJcHV0X2VwKCZlcC0+Y29tKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NsYXNzZXMuaAppbmRleCA1ZDdiNzg1Li40ZGY4ODdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NsYXNzZXMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NsYXNzZXMuaApAQCAtMTI4LDYgKzEyOCw4IEBACiAJLyogTVIgcGdzaXplOiBiaXQgMC0zIG1lYW5zIDRLLCA2NEssIDFNLCAxNk0gcmVzcGVjdGl2ZWx5ICovCiAJdTMyIGhjYV9jYXBfbXJfcGdzaXplOwogCWludCBtYXhfbXR1OworCWludCBtYXhfbnVtX3FwczsKKwlpbnQgbWF4X251bV9jcXM7CiAJYXRvbWljX3QgbnVtX2NxczsKIAlhdG9taWNfdCBudW1fcXBzOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY3EuYwppbmRleCAzMzY0N2E5Li4yZjRjMjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jcS5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAlpZiAoY3FlID49IDB4RkZGRkZGRkYgLSA2NCAtIGFkZGl0aW9uYWxfY3FlKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWlmICghYXRvbWljX2FkZF91bmxlc3MoJnNoY2EtPm51bV9jcXMsIDEsIGVoY2FfbWF4X2NxKSkgeworCWlmICghYXRvbWljX2FkZF91bmxlc3MoJnNoY2EtPm51bV9jcXMsIDEsIHNoY2EtPm1heF9udW1fY3FzKSkgewogCQllaGNhX2VycihkZXZpY2UsICJVbmFibGUgdG8gY3JlYXRlIENRLCBtYXggbnVtYmVyIG9mICVpICIKLQkJCSJDUXMgcmVhY2hlZC4iLCBlaGNhX21heF9jcSk7CisJCQkiQ1FzIHJlYWNoZWQuIiwgc2hjYS0+bWF4X251bV9jcXMpOwogCQllaGNhX2VycihkZXZpY2UsICJUbyBpbmNyZWFzZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1FzICIKIAkJCSJ1c2UgdGhlIG51bWJlcl9vZl9jcXMgbW9kdWxlIHBhcmFtZXRlci5cbiIpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKaW5kZXggNTk4ODQ0ZC4uYmIwMmE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKQEAgLTQ0LDYgKzQ0LDggQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSAiZWhjYV9jbGFzc2VzLmgiCiAjaW5jbHVkZSAiZWhjYV9pdmVyYnMuaCIKICNpbmNsdWRlICJlaGNhX21ybXcuaCIKQEAgLTM2NiwyMiArMzY4LDIzIEBACiAJCQlzaGNhLT5oY2FfY2FwX21yX3Bnc2l6ZSB8PSBwZ3NpemVfbWFwW2kgKyAxXTsKIAogCS8qIFNldCBtYXhpbXVtIG51bWJlciBvZiBDUXMgYW5kIFFQcyB0byBjYWxjdWxhdGUgRVEgc2l6ZSAqLwotCWlmIChlaGNhX21heF9xcCA9PSAtMSkKLQkJZWhjYV9tYXhfcXAgPSBtaW5fdChpbnQsIHJibG9jay0+bWF4X3FwLCBFSENBX01BWF9OVU1fUVVFVUVTKTsKLQllbHNlIGlmIChlaGNhX21heF9xcCA8IDEgfHwgZWhjYV9tYXhfcXAgPiByYmxvY2stPm1heF9xcCkgewotCQllaGNhX2dlbl9lcnIoIlJlcXVlc3RlZCBudW1iZXIgb2YgUVBzIGlzIG91dCBvZiByYW5nZSAoMSAtICVpKSAiCi0JCQkic3BlY2lmaWVkIGJ5IEhXIiwgcmJsb2NrLT5tYXhfcXApOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIHNlbnNlX2F0dHJpYnV0ZXMxOworCWlmIChzaGNhLT5tYXhfbnVtX3FwcyA9PSAtMSkKKwkJc2hjYS0+bWF4X251bV9xcHMgPSBtaW5fdChpbnQsIHJibG9jay0+bWF4X3FwLAorCQkJCQkgIEVIQ0FfTUFYX05VTV9RVUVVRVMpOworCWVsc2UgaWYgKHNoY2EtPm1heF9udW1fcXBzIDwgMSB8fCBzaGNhLT5tYXhfbnVtX3FwcyA+IHJibG9jay0+bWF4X3FwKSB7CisJCWVoY2FfZ2VuX3dhcm4oIlRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIFFQcyBpcyBvdXQgb2YgcmFuZ2UgIgorCQkJICAgICAgIigxIC0gJWkpIHNwZWNpZmllZCBieSBIVy4gVmFsdWUgaXMgc2V0IHRvICVpIiwKKwkJCSAgICAgIHJibG9jay0+bWF4X3FwLCByYmxvY2stPm1heF9xcCk7CisJCXNoY2EtPm1heF9udW1fcXBzID0gcmJsb2NrLT5tYXhfcXA7CiAJfQogCi0JaWYgKGVoY2FfbWF4X2NxID09IC0xKQotCQllaGNhX21heF9jcSA9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfY3EsIEVIQ0FfTUFYX05VTV9RVUVVRVMpOwotCWVsc2UgaWYgKGVoY2FfbWF4X2NxIDwgMSB8fCBlaGNhX21heF9jcSA+IHJibG9jay0+bWF4X2NxKSB7Ci0JCWVoY2FfZ2VuX2VycigiUmVxdWVzdGVkIG51bWJlciBvZiBDUXMgaXMgb3V0IG9mIHJhbmdlICgxIC0gJWkpICIKLQkJCSJzcGVjaWZpZWQgYnkgSFciLCByYmxvY2stPm1heF9jcSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gc2Vuc2VfYXR0cmlidXRlczE7CisJaWYgKHNoY2EtPm1heF9udW1fY3FzID09IC0xKQorCQlzaGNhLT5tYXhfbnVtX2NxcyA9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfY3EsCisJCQkJCSAgRUhDQV9NQVhfTlVNX1FVRVVFUyk7CisJZWxzZSBpZiAoc2hjYS0+bWF4X251bV9jcXMgPCAxIHx8IHNoY2EtPm1heF9udW1fY3FzID4gcmJsb2NrLT5tYXhfY3EpIHsKKwkJZWhjYV9nZW5fd2FybigiVGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgQ1FzIGlzIG91dCBvZiByYW5nZSAiCisJCQkgICAgICAiKDEgLSAlaSkgc3BlY2lmaWVkIGJ5IEhXLiBWYWx1ZSBpcyBzZXQgdG8gJWkiLAorCQkJICAgICAgcmJsb2NrLT5tYXhfY3EsIHJibG9jay0+bWF4X2NxKTsKIAl9CiAKIAkvKiBxdWVyeSBtYXggTVRVIGZyb20gZmlyc3QgcG9ydCAtLSBpdCdzIHRoZSBzYW1lIGZvciBhbGwgcG9ydHMgKi8KQEAgLTczMyw5ICs3MzYsMTMgQEAKIAkJZWhjYV9nZW5fZXJyKCJDYW5ub3QgYWxsb2NhdGUgc2hjYSBtZW1vcnkuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwogCW11dGV4X2luaXQoJnNoY2EtPm1vZGlmeV9tdXRleCk7CiAJYXRvbWljX3NldCgmc2hjYS0+bnVtX2NxcywgMCk7CiAJYXRvbWljX3NldCgmc2hjYS0+bnVtX3FwcywgMCk7CisJc2hjYS0+bWF4X251bV9xcHMgPSBlaGNhX21heF9xcDsKKwlzaGNhLT5tYXhfbnVtX2NxcyA9IGVoY2FfbWF4X2NxOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2hjYS0+c3BvcnQpOyBpKyspCiAJCXNwaW5fbG9ja19pbml0KCZzaGNhLT5zcG9ydFtpXS5tb2Rfc3FwX2xvY2spOwogCkBAIC03NTUsNyArNzYyLDcgQEAKIAkJZ290byBwcm9iZTE7CiAJfQogCi0JZXFfc2l6ZSA9IDIgKiBlaGNhX21heF9jcSArIDQgKiBlaGNhX21heF9xcDsKKwllcV9zaXplID0gMiAqIHNoY2EtPm1heF9udW1fY3FzICsgNCAqIHNoY2EtPm1heF9udW1fcXBzOwogCS8qIGNyZWF0ZSBldmVudCBxdWV1ZXMgKi8KIAlyZXQgPSBlaGNhX2NyZWF0ZV9lcShzaGNhLCAmc2hjYS0+ZXEsIEVIQ0FfRVEsIGVxX3NpemUpOwogCWlmIChyZXQpIHsKQEAgLTk2NCw2ICs5NzEsNDEgQEAKIAlzcGluX3VubG9jaygmc2hjYV9saXN0X2xvY2spOwogfQogCitzdGF0aWMgaW50IGVoY2FfbWVtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGVoY2FfZG1lbV93YXJuX3RpbWU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgTUVNX0NBTkNFTF9PRkZMSU5FOgorCWNhc2UgTUVNX0NBTkNFTF9PTkxJTkU6CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX09GRkxJTkU6CisJCXJldHVybiBOT1RJRllfT0s7CisJY2FzZSBNRU1fR09JTkdfT05MSU5FOgorCWNhc2UgTUVNX0dPSU5HX09GRkxJTkU6CisJCS8qIG9ubHkgb2sgaWYgbm8gaGNhIGlzIGF0dGFjaGVkIHRvIHRoZSBscGFyICovCisJCXNwaW5fbG9jaygmc2hjYV9saXN0X2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmc2hjYV9saXN0KSkgeworCQkJc3Bpbl91bmxvY2soJnNoY2FfbGlzdF9sb2NrKTsKKwkJCXJldHVybiBOT1RJRllfT0s7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9jaygmc2hjYV9saXN0X2xvY2spOworCQkJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJmVoY2FfZG1lbV93YXJuX3RpbWUsCisJCQkJCQkgICAzMCAqIDEwMDApKQorCQkJCWVoY2FfZ2VuX2VycigiRE1FTSBvcGVyYXRpb25zIGFyZSBub3QgYWxsb3dlZCIKKwkJCQkJICAgICAiYXMgbG9uZyBhcyBhbiBlaGNhIGFkYXB0ZXIgaXMiCisJCQkJCSAgICAgImF0dGFjaGVkIHRvIHRoZSBMUEFSIik7CisJCQlyZXR1cm4gTk9USUZZX0JBRDsKKwkJfQorCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGVoY2FfbWVtX25iID0geworCS5ub3RpZmllcl9jYWxsID0gZWhjYV9tZW1fbm90aWZpZXIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBlaGNhX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTk5MSw2ICsxMDMzLDEyIEBACiAJCWdvdG8gbW9kdWxlX2luaXQyOwogCX0KIAorCXJldCA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcigmZWhjYV9tZW1fbmIpOworCWlmIChyZXQpIHsKKwkJZWhjYV9nZW5fZXJyKCJGYWlsZWQgcmVnaXN0ZXJpbmcgbWVtb3J5IGFkZC9yZW1vdmUgbm90aWZpZXIiKTsKKwkJZ290byBtb2R1bGVfaW5pdDM7CisJfQorCiAJaWYgKGVoY2FfcG9sbF9hbGxfZXFzICE9IDEpIHsKIAkJZWhjYV9nZW5fZXJyKCJXQVJOSU5HISEhIik7CiAJCWVoY2FfZ2VuX2VycigiSXQgaXMgcG9zc2libGUgdG8gbG9zZSBpbnRlcnJ1cHRzLiIpOwpAQCAtMTAwMyw2ICsxMDUxLDkgQEAKIAogCXJldHVybiAwOwogCittb2R1bGVfaW5pdDM6CisJaWJtZWJ1c191bnJlZ2lzdGVyX2RyaXZlcigmZWhjYV9kcml2ZXIpOworCiBtb2R1bGVfaW5pdDI6CiAJZWhjYV9kZXN0cm95X3NsYWJfY2FjaGVzKCk7CiAKQEAgLTEwMTgsNiArMTA2OSw4IEBACiAKIAlpYm1lYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlaGNhX2RyaXZlcik7CiAKKwl1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcigmZWhjYV9tZW1fbmIpOworCiAJZWhjYV9kZXN0cm95X3NsYWJfY2FjaGVzKCk7CiAKIAllaGNhX2Rlc3Ryb3lfY29tcF9wb29sKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKaW5kZXggNGRiZTI4Ny4uNGQ1NGI5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYwpAQCAtNDY1LDkgKzQ2NSw5IEBACiAJdTMyIHN3cWVfc2l6ZSA9IDAsIHJ3cWVfc2l6ZSA9IDAsIGliX3FwX251bTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFhdG9taWNfYWRkX3VubGVzcygmc2hjYS0+bnVtX3FwcywgMSwgZWhjYV9tYXhfcXApKSB7CisJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmc2hjYS0+bnVtX3FwcywgMSwgc2hjYS0+bWF4X251bV9xcHMpKSB7CiAJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJVbmFibGUgdG8gY3JlYXRlIFFQLCBtYXggbnVtYmVyIG9mICVpICIKLQkJCSAiUVBzIHJlYWNoZWQuIiwgZWhjYV9tYXhfcXApOworCQkJICJRUHMgcmVhY2hlZC4iLCBzaGNhLT5tYXhfbnVtX3Fwcyk7CiAJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJUbyBpbmNyZWFzZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgUVBzICIKIAkJCSAidXNlIHRoZSBudW1iZXJfb2ZfcXBzIG1vZHVsZSBwYXJhbWV0ZXIuXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CkBAIC01MDIsNiArNTAyLDEyIEBACiAJaWYgKGluaXRfYXR0ci0+c3JxKSB7CiAJCW15X3NycSA9IGNvbnRhaW5lcl9vZihpbml0X2F0dHItPnNycSwgc3RydWN0IGVoY2FfcXAsIGliX3NycSk7CiAKKwkJaWYgKHFwX3R5cGUgPT0gSUJfUVBUX1VDKSB7CisJCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiVUMgd2l0aCBTUlEgbm90IHN1cHBvcnRlZCIpOworCQkJYXRvbWljX2RlYygmc2hjYS0+bnVtX3Fwcyk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJfQorCiAJCWhhc19zcnEgPSAxOwogCQlwYXJtcy5leHRfdHlwZSA9IEVRUFRfU1JRQkFTRTsKIAkJcGFybXMuc3JxX3FwbiA9IG15X3NycS0+cmVhbF9xcF9udW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCmluZGV4IGNkY2EzYTUuLjYwNmYxZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAlpbnQgcCwgcTsKIAlpbnQgcmV0OwogCi0JZm9yIChwID0gMDsgcCA8IGRldi0+ZGV2LT5jYXBzLm51bV9wb3J0czsgKytwKQorCWZvciAocCA9IDA7IHAgPCBkZXYtPm51bV9wb3J0czsgKytwKQogCQlmb3IgKHEgPSAwOyBxIDw9IDE7ICsrcSkgewogCQkJYWdlbnQgPSBpYl9yZWdpc3Rlcl9tYWRfYWdlbnQoJmRldi0+aWJfZGV2LCBwICsgMSwKIAkJCQkJCSAgICAgIHEgPyBJQl9RUFRfR1NJIDogSUJfUVBUX1NNSSwKQEAgLTMxNCw3ICszMTQsNyBAQAogCXJldHVybiAwOwogCiBlcnI6Ci0JZm9yIChwID0gMDsgcCA8IGRldi0+ZGV2LT5jYXBzLm51bV9wb3J0czsgKytwKQorCWZvciAocCA9IDA7IHAgPCBkZXYtPm51bV9wb3J0czsgKytwKQogCQlmb3IgKHEgPSAwOyBxIDw9IDE7ICsrcSkKIAkJCWlmIChkZXYtPnNlbmRfYWdlbnRbcF1bcV0pCiAJCQkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoZGV2LT5zZW5kX2FnZW50W3BdW3FdKTsKQEAgLTMyNyw3ICszMjcsNyBAQAogCXN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50OwogCWludCBwLCBxOwogCi0JZm9yIChwID0gMDsgcCA8IGRldi0+ZGV2LT5jYXBzLm51bV9wb3J0czsgKytwKSB7CisJZm9yIChwID0gMDsgcCA8IGRldi0+bnVtX3BvcnRzOyArK3ApIHsKIAkJZm9yIChxID0gMDsgcSA8PSAxOyArK3EpIHsKIAkJCWFnZW50ID0gZGV2LT5zZW5kX2FnZW50W3BdW3FdOwogCQkJZGV2LT5zZW5kX2FnZW50W3BdW3FdID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwppbmRleCBhM2MyODUxLi4yZTgwZjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCkBAIC01NzQsNyArNTc0LDEwIEBACiAJaWJkZXYtPmliX2Rldi5vd25lcgkJPSBUSElTX01PRFVMRTsKIAlpYmRldi0+aWJfZGV2Lm5vZGVfdHlwZQkJPSBSRE1BX05PREVfSUJfQ0E7CiAJaWJkZXYtPmliX2Rldi5sb2NhbF9kbWFfbGtleQk9IGRldi0+Y2Fwcy5yZXNlcnZlZF9sa2V5OwotCWliZGV2LT5pYl9kZXYucGh5c19wb3J0X2NudAk9IGRldi0+Y2Fwcy5udW1fcG9ydHM7CisJaWJkZXYtPm51bV9wb3J0cyA9IDA7CisJbWx4NF9mb3JlYWNoX3BvcnQoaSwgZGV2LCBNTFg0X1BPUlRfVFlQRV9JQikKKwkJaWJkZXYtPm51bV9wb3J0cysrOworCWliZGV2LT5pYl9kZXYucGh5c19wb3J0X2NudCAgICAgPSBpYmRldi0+bnVtX3BvcnRzOwogCWliZGV2LT5pYl9kZXYubnVtX2NvbXBfdmVjdG9ycwk9IDE7CiAJaWJkZXYtPmliX2Rldi5kbWFfZGV2aWNlCT0gJmRldi0+cGRldi0+ZGV2OwogCkBAIC02OTEsNyArNjk0LDcgQEAKIAlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmliZGV2ID0gaWJkZXZfcHRyOwogCWludCBwOwogCi0JZm9yIChwID0gMTsgcCA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyArK3ApCisJZm9yIChwID0gMTsgcCA8PSBpYmRldi0+bnVtX3BvcnRzOyArK3ApCiAJCW1seDRfQ0xPU0VfUE9SVChkZXYsIHApOwogCiAJbWx4NF9pYl9tYWRfY2xlYW51cChpYmRldik7CkBAIC03MDYsNiArNzA5LDEwIEBACiAJCQkgIGVudW0gbWx4NF9kZXZfZXZlbnQgZXZlbnQsIGludCBwb3J0KQogewogCXN0cnVjdCBpYl9ldmVudCBpYmV2OworCXN0cnVjdCBtbHg0X2liX2RldiAqaWJkZXYgPSB0b19tZGV2KChzdHJ1Y3QgaWJfZGV2aWNlICopIGliZGV2X3B0cik7CisKKwlpZiAocG9ydCA+IGliZGV2LT5udW1fcG9ydHMpCisJCXJldHVybjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE1MWDRfREVWX0VWRU5UX1BPUlRfVVA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmgKaW5kZXggNmUyYjBkYy4uOTk3NGU4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWx4NF9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21seDRfaWIuaApAQCAtMTYyLDYgKzE2Miw3IEBACiBzdHJ1Y3QgbWx4NF9pYl9kZXYgewogCXN0cnVjdCBpYl9kZXZpY2UJaWJfZGV2OwogCXN0cnVjdCBtbHg0X2RldgkgICAgICAgKmRldjsKKwlpbnQJCQludW1fcG9ydHM7CiAJdm9pZCBfX2lvbWVtCSAgICAgICAqdWFyX21hcDsKIAogCXN0cnVjdCBtbHg0X3VhcgkJcHJpdl91YXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCBiYWEwMWRlLi4zOTE2N2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTQ1MSw2ICs0NTEsNyBAQAogCQkJICAgIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKmluaXRfYXR0ciwKIAkJCSAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLCBpbnQgc3Fwbiwgc3RydWN0IG1seDRfaWJfcXAgKnFwKQogeworCWludCBxcG47CiAJaW50IGVycjsKIAogCW11dGV4X2luaXQoJnFwLT5tdXRleCk7CkBAIC01NDUsOSArNTQ2LDE3IEBACiAJCX0KIAl9CiAKLQllcnIgPSBtbHg0X3FwX2FsbG9jKGRldi0+ZGV2LCBzcXBuLCAmcXAtPm1xcCk7CisJaWYgKHNxcG4pIHsKKwkJcXBuID0gc3FwbjsKKwl9IGVsc2UgeworCQllcnIgPSBtbHg0X3FwX3Jlc2VydmVfcmFuZ2UoZGV2LT5kZXYsIDEsIDEsICZxcG4pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfd3JpZDsKKwl9CisKKwllcnIgPSBtbHg0X3FwX2FsbG9jKGRldi0+ZGV2LCBxcG4sICZxcC0+bXFwKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl93cmlkOworCQlnb3RvIGVycl9xcG47CiAKIAkvKgogCSAqIEhhcmR3YXJlIHdhbnRzIFFQTiB3cml0dGVuIGluIGJpZy1lbmRpYW4gb3JkZXIgKGFmdGVyCkBAIC01NjAsNiArNTY5LDEwIEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX3FwbjoKKwlpZiAoIXNxcG4pCisJCW1seDRfcXBfcmVsZWFzZV9yYW5nZShkZXYtPmRldiwgcXBuLCAxKTsKKwogZXJyX3dyaWQ6CiAJaWYgKHBkLT51b2JqZWN0KSB7CiAJCWlmICghaW5pdF9hdHRyLT5zcnEpCkBAIC02NTUsNiArNjY4LDEwIEBACiAJbWx4NF9pYl91bmxvY2tfY3FzKHNlbmRfY3EsIHJlY3ZfY3EpOwogCiAJbWx4NF9xcF9mcmVlKGRldi0+ZGV2LCAmcXAtPm1xcCk7CisKKwlpZiAoIWlzX3NxcChkZXYsIHFwKSkKKwkJbWx4NF9xcF9yZWxlYXNlX3JhbmdlKGRldi0+ZGV2LCBxcC0+bXFwLnFwbiwgMSk7CisKIAltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmcXAtPm10dCk7CiAKIAlpZiAoaXNfdXNlcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDY4YmE1YzMuLmUwYzdkZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTUwNyw2ICs1MDcsNyBAQAogdm9pZCBpcG9pYl9kcmFpbl9jcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogdm9pZCBpcG9pYl9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgaXBvaWJfc2V0X2Rldl9mZWF0dXJlcyhzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBpYl9kZXZpY2UgKmhjYSk7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jCmluZGV4IDY2YWY1YzEuLmU5Nzk1ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jCkBAIC00Miw2ICs0MiwxMyBAQAogCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCAiaXBvaWIiLCBzaXplb2YoZHJ2aW5mby0+ZHJpdmVyKSAtIDEpOwogfQogCitzdGF0aWMgdTMyIGlwb2liX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gdGVzdF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpICYmCisJCSF0ZXN0X2JpdChJUE9JQl9GTEFHX0FETUlOX0NNLCAmcHJpdi0+ZmxhZ3MpOworfQorCiBzdGF0aWMgaW50IGlwb2liX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCiB7CkBAIC0xMjksNyArMTM2LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpcG9pYl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gaXBvaWJfZ2V0X2RydmluZm8sCi0JLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5nZXRfcnhfY3N1bQkJPSBpcG9pYl9nZXRfcnhfY3N1bSwKIAkuZ2V0X2NvYWxlc2NlCQk9IGlwb2liX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGlwb2liX3NldF9jb2FsZXNjZSwKIAkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCmluZGV4IDBlNzQ4YWUuLjI4ZWI2ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTY4NSwxMCArNjg1LDYgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+YWhfcmVhcF90YXNrLAogCQkJICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikpOwogCi0JaW5pdF90aW1lcigmcHJpdi0+cG9sbF90aW1lcik7Ci0JcHJpdi0+cG9sbF90aW1lci5mdW5jdGlvbiA9IGlwb2liX2liX3R4X3RpbWVyX2Z1bmM7Ci0JcHJpdi0+cG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotCiAJc2V0X2JpdChJUE9JQl9GTEFHX0lOSVRJQUxJWkVELCAmcHJpdi0+ZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC05MDYsNiArOTAyLDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJc2V0dXBfdGltZXIoJnByaXYtPnBvbGxfdGltZXIsIGlwb2liX2liX3R4X3RpbWVyX2Z1bmMsCisJCSAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKKwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCWlmIChpcG9pYl9pYl9kZXZfb3BlbihkZXYpKSB7CiAJCQlpcG9pYl90cmFuc3BvcnRfZGV2X2NsZWFudXAoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggYzBlZTUxNC4uZmRkZGVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTExNzMsMTEgKzExNzMsNDggQEAKIAlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX3BrZXkpOwogfQogCitpbnQgaXBvaWJfc2V0X2Rldl9mZWF0dXJlcyhzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBpYl9kZXZpY2UgKmhjYSkKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldmljZV9hdHRyOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCisJZGV2aWNlX2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqZGV2aWNlX2F0dHIsIEdGUF9LRVJORUwpOworCWlmICghZGV2aWNlX2F0dHIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGFsbG9jYXRpb24gb2YgJXp1IGJ5dGVzIGZhaWxlZFxuIiwKKwkJICAgICAgIGhjYS0+bmFtZSwgc2l6ZW9mICpkZXZpY2VfYXR0cik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gaWJfcXVlcnlfZGV2aWNlKGhjYSwgZGV2aWNlX2F0dHIpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGliX3F1ZXJ5X2RldmljZSBmYWlsZWQgKHJldCA9ICVkKVxuIiwKKwkJICAgICAgIGhjYS0+bmFtZSwgcmVzdWx0KTsKKwkJa2ZyZWUoZGV2aWNlX2F0dHIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlwcml2LT5oY2FfY2FwcyA9IGRldmljZV9hdHRyLT5kZXZpY2VfY2FwX2ZsYWdzOworCisJa2ZyZWUoZGV2aWNlX2F0dHIpOworCisJaWYgKHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX0lQX0NTVU0pIHsKKwkJc2V0X2JpdChJUE9JQl9GTEFHX0NTVU0sICZwcml2LT5mbGFncyk7CisJCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKwl9CisKKwlpZiAobHJvKQorCQlwcml2LT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCisJaWYgKHByaXYtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHICYmIHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX1RTTykKKwkJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKworCXJldHVybiAwOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBvaWJfYWRkX3BvcnQoY29uc3QgY2hhciAqZm9ybWF0LAogCQkJCQkgc3RydWN0IGliX2RldmljZSAqaGNhLCB1OCBwb3J0KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldmljZV9hdHRyOwogCXN0cnVjdCBpYl9wb3J0X2F0dHIgYXR0cjsKIAlpbnQgcmVzdWx0ID0gLUVOT01FTTsKIApAQCAtMTIwNiwzMSArMTI0Myw4IEBACiAJCWdvdG8gZGV2aWNlX2luaXRfZmFpbGVkOwogCX0KIAotCWRldmljZV9hdHRyID0ga21hbGxvYyhzaXplb2YgKmRldmljZV9hdHRyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldmljZV9hdHRyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBhbGxvY2F0aW9uIG9mICV6dSBieXRlcyBmYWlsZWRcbiIsCi0JCSAgICAgICBoY2EtPm5hbWUsIHNpemVvZiAqZGV2aWNlX2F0dHIpOworCWlmIChpcG9pYl9zZXRfZGV2X2ZlYXR1cmVzKHByaXYsIGhjYSkpCiAJCWdvdG8gZGV2aWNlX2luaXRfZmFpbGVkOwotCX0KLQotCXJlc3VsdCA9IGliX3F1ZXJ5X2RldmljZShoY2EsIGRldmljZV9hdHRyKTsKLQlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpYl9xdWVyeV9kZXZpY2UgZmFpbGVkIChyZXQgPSAlZClcbiIsCi0JCSAgICAgICBoY2EtPm5hbWUsIHJlc3VsdCk7Ci0JCWtmcmVlKGRldmljZV9hdHRyKTsKLQkJZ290byBkZXZpY2VfaW5pdF9mYWlsZWQ7Ci0JfQotCXByaXYtPmhjYV9jYXBzID0gZGV2aWNlX2F0dHItPmRldmljZV9jYXBfZmxhZ3M7Ci0KLQlrZnJlZShkZXZpY2VfYXR0cik7Ci0KLQlpZiAocHJpdi0+aGNhX2NhcHMgJiBJQl9ERVZJQ0VfVURfSVBfQ1NVTSkgewotCQlzZXRfYml0KElQT0lCX0ZMQUdfQ1NVTSwgJnByaXYtPmZsYWdzKTsKLQkJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOwotCX0KLQotCWlmIChscm8pCi0JCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiAKIAkvKgogCSAqIFNldCB0aGUgZnVsbCBtZW1iZXJzaGlwIGJpdCwgc28gdGhhdCB3ZSBqb2luIHRoZSByaWdodApAQCAtMTI2Niw5ICsxMjgwLDYgQEAKIAkJZ290byBldmVudF9mYWlsZWQ7CiAJfQogCi0JaWYgKHByaXYtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHICYmIHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX1RTTykKLQkJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQogCXJlc3VsdCA9IHJlZ2lzdGVyX25ldGRldihwcml2LT5kZXYpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNvdWxkbid0IHJlZ2lzdGVyIGlwb2liIHBvcnQgJWQ7IGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92bGFuLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYwppbmRleCBiMDhlYjU2Li4yY2YxYTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYwpAQCAtOTMsNiArOTMsMTAgQEAKIAlwcml2LT5tY2FzdF9tdHUgID0gcHJpdi0+YWRtaW5fbXR1ID0gcHJpdi0+ZGV2LT5tdHU7CiAJc2V0X2JpdChJUE9JQl9GTEFHX1NVQklOVEVSRkFDRSwgJnByaXYtPmZsYWdzKTsKIAorCXJlc3VsdCA9IGlwb2liX3NldF9kZXZfZmVhdHVyZXMocHJpdiwgcHByaXYtPmNhKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGRldmljZV9pbml0X2ZhaWxlZDsKKwogCXByaXYtPnBrZXkgPSBwa2V5OwogCiAJbWVtY3B5KHByaXYtPmRldi0+ZGV2X2FkZHIsIHBwcml2LT5kZXYtPmRldl9hZGRyLCBJTkZJTklCQU5EX0FMRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggNWExY2YyNS4uMWU1YjY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC0zNzgsNiArMzc4LDcgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOwogCisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CiAJaXNjc2lfaG9zdF9yZW1vdmUoc2hvc3QpOwogCWlzY3NpX2hvc3RfZnJlZShzaG9zdCk7CiB9CkBAIC01OTcsNyArNTk4LDcgQEAKIAkuY21kX3Blcl9sdW4gICAgICAgICAgICA9IElTQ1NJX01BWF9DTURfUEVSX0xVTiwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAotCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBpc2NzaV9laF9ob3N0X3Jlc2V0LAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LAogCS51c2VfY2x1c3RlcmluZyAgICAgICAgID0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5wcm9jX25hbWUgICAgICAgICAgICAgID0gImlzY3NpX2lzZXIiLAogCS50aGlzX2lkICAgICAgICAgICAgICAgID0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtZmYuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCmluZGV4IDc4MzliN2IuLjBkZTlhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCkBAIC0xOTcsMTMgKzE5NywxNiBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhbiBjb25kaXRpb24KICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2NvbmRpdGlvbl9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwKKwkJCQkgICBzdHJ1Y3QgZmZfZWZmZWN0ICpuZXcpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKIAlpZiAobmV3LT50eXBlICE9IEZGX1NQUklORyAmJiBuZXctPnR5cGUgIT0gRkZfRlJJQ1RJT04pIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfY29uZGl0aW9uX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjIsMTAgKzIyNSwxMyBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhIG1hZ25pdHVkZQogICogcGFyYW1ldGVyIHBhY2tldAogICovCi1zdGF0aWMgaW50IG5lZWRfbWFnbml0dWRlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX21hZ25pdHVkZV9tb2RpZmllcihzdHJ1Y3QgaWZvcmNlICppZm9yY2UsCisJCQkJICAgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKIHsKIAlpZiAoZWZmZWN0LT50eXBlICE9IEZGX0NPTlNUQU5UKSB7Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMzYsNyArMjQyLDggQEAKICAqIEFuYWx5c2UgdGhlIGNoYW5nZXMgaW4gYW4gZWZmZWN0LCBhbmQgdGVsbCBpZiB3ZSBuZWVkIHRvIHNlbmQgYW4gZW52ZWxvcGUKICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSwgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQogewogCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7CiAJY2FzZSBGRl9DT05TVEFOVDoKQEAgLTI1Niw3ICsyNjMsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2NiwxMCArMjc0LDEyIEBACiAgKiBBbmFseXNlIHRoZSBjaGFuZ2VzIGluIGFuIGVmZmVjdCwgYW5kIHRlbGwgaWYgd2UgbmVlZCB0byBzZW5kIGEgcGVyaW9kaWMKICAqIHBhcmFtZXRlciBlZmZlY3QKICAqLwotc3RhdGljIGludCBuZWVkX3BlcmlvZF9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9wZXJpb2RfbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLCBzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsCisJCQkJc3RydWN0IGZmX2VmZmVjdCAqbmV3KQogewogCWlmIChuZXctPnR5cGUgIT0gRkZfUEVSSU9ESUMpIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfcGVyaW9kX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAob2xkLT51LnBlcmlvZGljLnBlcmlvZCAhPSBuZXctPnUucGVyaW9kaWMucGVyaW9kCkBAIC0zNTUsNyArMzY1LDcgQEAKIAlpbnQgcGFyYW0yX2VyciA9IDE7CiAJaW50IGNvcmVfZXJyID0gMDsKIAotCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMV9lcnIgPSBtYWtlX3BlcmlvZF9tb2RpZmllcihpZm9yY2UsIG1vZDFfY2h1bmssCiAJCQlvbGQgIT0gTlVMTCwKIAkJCWVmZmVjdC0+dS5wZXJpb2RpYy5tYWduaXR1ZGUsIGVmZmVjdC0+dS5wZXJpb2RpYy5vZmZzZXQsCkBAIC0zNjUsNyArMzc1LDcgQEAKIAkJc2V0X2JpdChGRl9NT0QxX0lTX1VTRUQsIGNvcmVfZWZmZWN0LT5mbGFncyk7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9lbnZlbG9wZV9tb2RpZmllcihvbGQsIGVmZmVjdCkpIHsKKwlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMl9lcnIgPSBtYWtlX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgbW9kMl9jaHVuaywKIAkJCW9sZCAhPU5VTEwsCiAJCQllZmZlY3QtPnUucGVyaW9kaWMuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQyNSw3ICs0MzUsNyBAQAogCWludCBwYXJhbTJfZXJyID0gMTsKIAlpbnQgY29yZV9lcnIgPSAwOwogCi0JaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0xX2VyciA9IG1ha2VfbWFnbml0dWRlX21vZGlmaWVyKGlmb3JjZSwgbW9kMV9jaHVuaywKIAkJCW9sZCAhPSBOVUxMLAogCQkJZWZmZWN0LT51LmNvbnN0YW50LmxldmVsKTsKQEAgLTQzNCw3ICs0NDQsNyBAQAogCQlzZXRfYml0KEZGX01PRDFfSVNfVVNFRCwgY29yZV9lZmZlY3QtPmZsYWdzKTsKIAl9CiAKLQlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0yX2VyciA9IG1ha2VfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBtb2QyX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uc3RhbnQuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQ4Nyw3ICs0OTcsNyBAQAogCQlkZWZhdWx0OiByZXR1cm4gLTE7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW1fZXJyID0gbWFrZV9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBtb2QxX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uZGl0aW9uWzBdLnJpZ2h0X3NhdHVyYXRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwppbmRleCA2MWVlNmUzLi5iYWFiZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTIxOCw3ICsyMTgsOSBAQAogCQkvKiBDaGVjazogbm8gZWZmZWN0cyBzaG91bGQgYmUgcHJlc2VudCBpbiBtZW1vcnkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGRldi0+ZmYtPm1heF9lZmZlY3RzOyBpKyspIHsKIAkJCWlmICh0ZXN0X2JpdChGRl9DT1JFX0lTX1VTRUQsIGlmb3JjZS0+Y29yZV9lZmZlY3RzW2ldLmZsYWdzKSkgewotCQkJCXdhcm4oImlmb3JjZV9yZWxlYXNlOiBEZXZpY2Ugc3RpbGwgb3ducyBlZmZlY3RzIik7CisJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCQkiJXM6IERldmljZSBzdGlsbCBvd25zIGVmZmVjdHNcbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzM1LDI2ICszMzcsMjYgQEAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk0iKSkKIAkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTSIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBNXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiUCIpKQogCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgUCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBQXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiQiIpKQogCQlpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kID0gKGlmb3JjZS0+ZWRhdGFbMl0gPDwgOCkgfCBpZm9yY2UtPmVkYXRhWzFdOwogCWVsc2UKLQkJd2FybigiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gaWQgcGFja2V0IEIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgQlxuIik7CiAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk4iKSkKIAkJZmZfZWZmZWN0cyA9IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTiIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBOXG4iKTsKIAogCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIHN0b3JlIG1vcmUgZWZmZWN0cyB0aGFuIHRoZSBkcml2ZXIgY2FuIHJlYWxseSBoYW5kbGUgKi8KIAlpZiAoZmZfZWZmZWN0cyA+IElGT1JDRV9FRkZFQ1RTX01BWCkgewotCQl3YXJuKCJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpIiwKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpXG4iLAogCQkgICAgICAgSUZPUkNFX0VGRkVDVFNfTUFYLCBmZl9lZmZlY3RzKTsKIAkJZmZfZWZmZWN0cyA9IElGT1JDRV9FRkZFQ1RTX01BWDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXBhY2tldHMuYwppbmRleCAwMTViNTBhLi5hMTdiNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1wYWNrZXRzLmMKQEAgLTY1LDcgKzY1LDggQEAKIAogCiAJaWYgKENJUkNfU1BBQ0UoaGVhZCwgdGFpbCwgWE1JVF9TSVpFKSA8IG4rMikgewotCQl3YXJuKCJub3QgZW5vdWdoIHNwYWNlIGluIHhtaXQgYnVmZmVyIHRvIHNlbmQgbmV3IHBhY2tldCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAibm90IGVub3VnaCBzcGFjZSBpbiB4bWl0IGJ1ZmZlciB0byBzZW5kIG5ldyBwYWNrZXRcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZm9yY2UtPnhtaXRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQl3YXJuKCJ1bnVzZWQgZWZmZWN0ICUwNHggdXBkYXRlZCAhISEiLCBhZGRyKTsKKwlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVudXNlZCBlZmZlY3QgJTA0eCB1cGRhdGVkICEhIVxuIiwgYWRkcik7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xNTksNyArMTYwLDggQEAKIAlzdGF0aWMgaW50IGJlaW5nX3VzZWQgPSAwOwogCiAJaWYgKGJlaW5nX3VzZWQpCi0JCXdhcm4oInJlLWVudHJhbnQgY2FsbCB0byBpZm9yY2VfcHJvY2VzcyAlZCIsIGJlaW5nX3VzZWQpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAicmUtZW50cmFudCBjYWxsIHRvIGlmb3JjZV9wcm9jZXNzICVkXG4iLCBiZWluZ191c2VkKTsKIAliZWluZ191c2VkKys7CiAKICNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCmluZGV4IDg1MWNjNDAuLmY4MzE4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS11c2IuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogCWlmICggKG49dXNiX3N1Ym1pdF91cmIoaWZvcmNlLT5vdXQsIEdGUF9BVE9NSUMpKSApIHsKIAkJY2xlYXJfYml0KElGT1JDRV9YTUlUX1JVTk5JTkcsIGlmb3JjZS0+eG1pdF9mbGFncyk7Ci0JCXdhcm4oInVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxuIiwgbik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkICVkXG4iLCBuKTsKIAl9CiAKIAkvKiBUaGUgSUZPUkNFX1hNSVRfUlVOTklORyBiaXQgaXMgbm90IGNsZWFyZWQgaGVyZS4gVGhhdCdzIGludGVuZGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwppbmRleCA4MzlkMWM5Li5iODY4YjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwpAQCAtOTExLDcgKzkxMSw3IEBACiB7CiAJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmeHBhZF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKLQkJaW5mbyhEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYwppbmRleCBkZWJmYzFhLi5lMjkwZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlLmMKQEAgLTI4NSw3ICsyODUsNiBAQAogfTsKIAogLyogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9kdW1wCQkodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGgpOwogc3RhdGljIGludCBhdGlfcmVtb3RlX29wZW4JCShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldik7CiBzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2Nsb3NlCQkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpOwogc3RhdGljIGludCBhdGlfcmVtb3RlX3NlbmRwYWNrZXQJKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlLCB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKQEAgLTMwNywxNSArMzA2LDE2IEBACiAvKgogICoJYXRpX3JlbW90ZV9kdW1wX2lucHV0CiAgKi8KLXN0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcCh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9kdW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlmICgobGVuID09IDEpICYmIChkYXRhWzBdICE9ICh1bnNpZ25lZCBjaGFyKTB4ZmYpICYmIChkYXRhWzBdICE9IDB4MDApKQotCQl3YXJuKCJXZWlyZCBieXRlIDB4JTAyeCIsIGRhdGFbMF0pOworCQlkZXZfd2FybihkZXYsICJXZWlyZCBieXRlIDB4JTAyeFxuIiwgZGF0YVswXSk7CiAJZWxzZSBpZiAobGVuID09IDQpCi0JCXdhcm4oIldlaXJkIGtleSAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKKwkJZGV2X3dhcm4oZGV2LCAiV2VpcmQga2V5ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCSAgICAgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7CiAJZWxzZQotCQl3YXJuKCJXZWlyZCBkYXRhLCBsZW49JWQgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggLi4uIiwKKwkJZGV2X3dhcm4oZGV2LCAiV2VpcmQgZGF0YSwgbGVuPSVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC4uLlxuIiwKIAkJICAgICBsZW4sIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sIGRhdGFbNF0sIGRhdGFbNV0pOwogfQogCkBAIC00NzAsNyArNDcwLDcgQEAKIAkvKiBEZWFsIHdpdGggc3RyYW5nZSBsb29raW5nIGlucHV0cyAqLwogCWlmICggKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSA0KSB8fCAoZGF0YVswXSAhPSAweDE0KSB8fAogCQkoKGRhdGFbM10gJiAweDBmKSAhPSAweDAwKSApIHsKLQkJYXRpX3JlbW90ZV9kdW1wKGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWF0aV9yZW1vdGVfZHVtcCgmdXJiLT5kZXYtPmRldiwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODE0LDcgKzgxNCw3IEBACiAJYXRpX3JlbW90ZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJaWYgKCFhdGlfcmVtb3RlKSB7Ci0JCXdhcm4oIiVzIC0gbnVsbCBkZXZpY2U/XG4iLCBfX2Z1bmNfXyk7CisJCWRldl93YXJuKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gbnVsbCBkZXZpY2U/XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgzNCw5ICs4MzQsMTEgQEAKIAogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYXRpX3JlbW90ZV9kcml2ZXIpOwogCWlmIChyZXN1bHQpCi0JCWVycigidXNiX3JlZ2lzdGVyIGVycm9yICMlZFxuIiwgcmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiB1c2JfcmVnaXN0ZXIgZXJyb3IgIyVkXG4iLCByZXN1bHQpOwogCWVsc2UKLQkJaW5mbygiUmVnaXN0ZXJlZCBVU0IgZHJpdmVyICIgRFJJVkVSX0RFU0MgIiB2LiAiIERSSVZFUl9WRVJTSU9OKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKaW5kZXggMTFiNWM3ZS4uOTNhMjJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCkBAIC05OTksNyArOTk5LDggQEAKIHsKIAlpbnQgcmV0ID0gdXNiX3JlZ2lzdGVyKCZ5ZWFsaW5rX2RyaXZlcik7CiAJaWYgKHJldCA9PSAwKQotCQlpbmZvKERSSVZFUl9ERVNDICI6IiBEUklWRVJfVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKaW5kZXggNTcwZTBlOC4uNjcwYzYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKQEAgLTI4MCw3ICsyODAsOCBAQAogewogCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9hY2VjYWRfZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwppbmRleCBlNTNjODM4Li43ZDAwNWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwpAQCAtMTcwNiwyMCArMTcwNiwyMSBAQAogCWFpcHRlayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhaXB0ZWspLCBHRlBfS0VSTkVMKTsKIAlpbnB1dGRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghYWlwdGVrIHx8ICFpbnB1dGRldikgewotCQl3YXJuKCJhaXB0ZWs6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgb3IgaW5wdXQgZGV2aWNlIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgb3IgaW5wdXQgZGV2aWNlXG4iKTsKIAkJZ290byBmYWlsMTsKICAgICAgICAgfQogCiAJYWlwdGVrLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1c2JkZXYsIEFJUFRFS19QQUNLRVRfTEVOR1RILAogCQkJCQlHRlBfQVRPTUlDLCAmYWlwdGVrLT5kYXRhX2RtYSk7CiAgICAgICAgIGlmICghYWlwdGVrLT5kYXRhKSB7Ci0JCXdhcm4oImFpcHRlazogY2Fubm90IGFsbG9jYXRlIHVzYiBidWZmZXIiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSB1c2IgYnVmZmVyXG4iKTsKIAkJZ290byBmYWlsMTsKIAl9CiAKIAlhaXB0ZWstPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhaXB0ZWstPnVyYikgewotCSAgICAgICAgd2FybigiYWlwdGVrOiBjYW5ub3QgYWxsb2NhdGUgdXJiIik7CisJICAgICAgICBkZXZfd2FybigmaW50Zi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIHVyYlxuIik7CiAJCWdvdG8gZmFpbDI7CiAJfQogCkBAIC0xODQzLDggKzE4NDQsOSBAQAogCQlhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkgPSBzcGVlZHNbaV07CiAJCSh2b2lkKWFpcHRla19wcm9ncmFtX3RhYmxldChhaXB0ZWspOwogCQlpZiAoYWlwdGVrLT5pbnB1dGRldi0+YWJzbWF4W0FCU19YXSA+IDApIHsKLQkJCWluZm8oImlucHV0OiBBaXB0ZWsgdXNpbmcgJWQgbXMgcHJvZ3JhbW1pbmcgc3BlZWRcbiIsCi0JCQkgICAgIGFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7CisJCQlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkJCSAiQWlwdGVrIHVzaW5nICVkIG1zIHByb2dyYW1taW5nIHNwZWVkXG4iLAorCQkJCSBhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xODUyLDcgKzE4NTQsOCBAQAogCS8qIE11cnBoeSBzYXlzIHRoYXQgc29tZSBkYXkgc29tZW9uZSB3aWxsIGhhdmUgYSB0YWJsZXQgdGhhdCBmYWlscyB0aGUKIAkgICBhYm92ZSB0ZXN0LiBUaGF0J3MgeW91LCBGcmVkZXJpYyBSb2RyaWdvICovCiAJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVlZHMpKSB7Ci0JCWluZm8oImlucHV0OiBBaXB0ZWsgdHJpZWQgYWxsIHNwZWVkcywgbm8gc2FuZSByZXNwb25zZSIpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkJICJBaXB0ZWsgdHJpZWQgYWxsIHNwZWVkcywgbm8gc2FuZSByZXNwb25zZVxuIik7CiAJCWdvdG8gZmFpbDI7CiAJfQogCkBAIC0xODY0LDcgKzE4NjcsOCBAQAogCSAqLwogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZhaXB0ZWtfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAoZXJyKSB7Ci0JCXdhcm4oImFpcHRlazogY2Fubm90IGNyZWF0ZSBzeXNmcyBncm91cCBlcnI6ICVkIiwgZXJyKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImNhbm5vdCBjcmVhdGUgc3lzZnMgZ3JvdXAgZXJyOiAlZFxuIiwKKwkJCSBlcnIpOwogCQlnb3RvIGZhaWwzOwogICAgICAgICB9CiAKQEAgLTE4NzIsNyArMTg3Niw4IEBACiAJICovCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFpcHRlay0+aW5wdXRkZXYpOwogCWlmIChlcnIpIHsKLQkJd2FybigiYWlwdGVrOiBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgcmV0dXJuZWQgZXJyOiAlZCIsIGVycik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgImlucHV0X3JlZ2lzdGVyX2RldmljZSByZXR1cm5lZCBlcnI6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGZhaWw0OwogICAgICAgICB9CiAJcmV0dXJuIDA7CkBAIC0xOTIyLDggKzE5MjcsOSBAQAogewogCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmFpcHRla19kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkgewotCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6ICIgRFJJVkVSX0FVVEhPUik7Ci0JCWluZm8oRFJJVkVSX0RFU0MpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9BVVRIT1IgIlxuIik7CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKaW5kZXggN2RmMDIyOC4uNTUyNGUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYwpAQCAtMiw3ICsyLDcgQEAKIAogR1RDTyBkaWdpdGl6ZXIgVVNCIGRyaXZlcgogCi1Vc2UgdGhlIGVycigpLCBkYmcoKSBhbmQgaW5mbygpIG1hY3JvcyBmcm9tIHVzYi5oIGZvciBzeXN0ZW0gbG9nZ2luZworVXNlIHRoZSBlcnIoKSBhbmQgZGJnKCkgbWFjcm9zIGZyb20gdXNiLmggZm9yIHN5c3RlbSBsb2dnaW5nCiAKIFRPIENIRUNLOiAgSXMgcHJlc3N1cmUgZG9uZSByaWdodCBvbiByZXBvcnQgNT8KIApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAkJa2ZyZWUoZ3Rjbyk7CiAJfQogCi0JaW5mbygiZ3RjbyBkcml2ZXIgZGlzY29ubmVjdGVkIik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiZ3RjbyBkcml2ZXIgZGlzY29ubmVjdGVkXG4iKTsKIH0KIAogLyogICBTVEFOREFSRCBNT0RVTEUgTE9BRCBST1VUSU5FUyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jCmluZGV4IGQ4OTExMmYuLjY2ODJiMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYwpAQCAtMjE1LDcgKzIxNSw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrYnRhYl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogb3V0OgogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCmluZGV4IDVmYmM0NjMuLjA5ZTIyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC0zODUsNyArMzg1LDggQEAKIAl3YWNvbV9kcml2ZXIuaWRfdGFibGUgPSBnZXRfZGV2aWNlX3RhYmxlKCk7CiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ3YWNvbV9kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKLQkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggNmUxZThjNi4uM2QxYWI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtNDIsOCArNDIsOSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGgzNjAwX3RzX2lucHV0LgogCiBjb25maWcgVE9VQ0hTQ1JFRU5fQ09SR0kKLQl0cmlzdGF0ZSAiU2hhcnBTTCAoQ29yZ2kgYW5kIFNwaXR6IHNlcmllcykgdG91Y2hzY3JlZW4gZHJpdmVyIgorCXRyaXN0YXRlICJTaGFycFNMIChDb3JnaSBhbmQgU3BpdHogc2VyaWVzKSB0b3VjaHNjcmVlbiBkcml2ZXIgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gUFhBX1NIQVJQU0wKKwlzZWxlY3QgQ09SR0lfU1NQX0RFUFJFQ0FURUQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZHJpdmVyIGZvciB0aGUgdG91Y2hzY3JlZW4gb24gdGhlCkBAIC01NCw2ICs1NSw5IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjb3JnaV90cy4KIAorCSAgTk9URTogdGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCwgdHJ5IGVuYWJsZSBTUEkgYW5kIGdlbmVyaWMKKwkgIEFEUzc4NDYtYmFzZWQgdG91Y2hzY3JlZW4gZHJpdmVyLgorCiBjb25maWcgVE9VQ0hTQ1JFRU5fRlVKSVRTVQogCXRyaXN0YXRlICJGdWppdHN1IHNlcmlhbCB0b3VjaHNjcmVlbiIKIAlzZWxlY3QgU0VSSU8KQEAgLTIxOSw3ICsyMjMsNyBAQAogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVUNCMTQwMAogCXRyaXN0YXRlICJQaGlsaXBzIFVDQjE0MDAgdG91Y2hzY3JlZW4iCi0Jc2VsZWN0IEFDOTdfQlVTCisJZGVwZW5kcyBvbiBBQzk3X0JVUwogCWRlcGVuZHMgb24gVUNCMTQwMF9DT1JFCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFVDQjE0MDAgdG91Y2hzY3JlZW4gaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCmluZGV4IGMzOGQ0ZTAuLmE4OTcwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2FkYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogI2RlZmluZSBNT0ROQU1FICJocDY4MF90c19pbnB1dCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCBlM2U0MDQyLi5lN2ZiN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMTEzLDExICsxMTMsMTIgQEAKIAkgIG91dHB1dHMuIFRvIGJlIHVzZWZ1bCB0aGUgcGFydGljdWxhciBib2FyZCBtdXN0IGhhdmUgTEVEcwogCSAgYW5kIHRoZXkgbXVzdCBiZSBjb25uZWN0ZWQgdG8gdGhlIEdQSU8gbGluZXMuCiAKLWNvbmZpZyBMRURTX0NNX1gyNzAKLQl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIHRoZSBDTS1YMjcwIExFRHMiCi0JZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIE1BQ0hfQVJNQ09SRQorY29uZmlnIExFRFNfSFBfRElTSworCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgZGlzayBwcm90ZWN0aW9uIExFRCBvbiBIUCBub3RlYm9va3MiCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIEFDUEkKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBDTS1YMjcwIExFRHMuCisJICBUaGlzIG9wdGlvbiBlbmFibGUgc3VwcG9ydCBmb3IgZGlzayBwcm90ZWN0aW9uIExFRCwgZm91bmQgb24KKwkgIG5ld2VyIEhQIG5vdGVib29rcy4KIAogY29uZmlnIExFRFNfQ0xFVk9fTUFJTAogCXRyaXN0YXRlICJNYWlsIExFRCBvbiBDbGV2byBub3RlYm9vayAoRVhQRVJJTUVOVEFMKSIKQEAgLTE1Nyw2ICsxNTgsMTMgQEAKIAkgIExFRCBkcml2ZXIgY2hpcHMgYWNjZXNzZWQgdmlhIHRoZSBJMkMgYnVzLiAgU3VwcG9ydGVkCiAJICBkZXZpY2VzIGluY2x1ZGUgUENBOTU1MCwgUENBOTU1MSwgUENBOTU1MiwgYW5kIFBDQTk1NTMuCiAKK2NvbmZpZyBMRURTX0RBOTAzWAorCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgREE5MDMwL0RBOTAzNCBQTUlDIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBQTUlDX0RBOTAzWAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3Igb24tY2hpcCBMRUQgZHJpdmVycyBmb3VuZAorCSAgb24gRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDMwL0RBOTAzNCBQTUlDcy4KKwogY29tbWVudCAiTEVEIFRyaWdnZXJzIgogCiBjb25maWcgTEVEU19UUklHR0VSUwpAQCAtMTc5LDcgKzE4Nyw3IEBACiAKIGNvbmZpZyBMRURTX1RSSUdHRVJfSURFX0RJU0sKIAlib29sICJMRUQgSURFIERpc2sgVHJpZ2dlciIKLQlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMgJiYgQkxLX0RFVl9JREVESVNLCisJZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTICYmIElERV9HRF9BVEEKIAloZWxwCiAJICBUaGlzIGFsbG93cyBMRURzIHRvIGJlIGNvbnRyb2xsZWQgYnkgSURFIGRpc2sgYWN0aXZpdHkuCiAJICBJZiB1bnN1cmUsIHNheSBZLgpAQCAtMTkzLDYgKzIwMSwxNSBAQAogCSAgbG9hZCBhdmVyYWdlLgogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIExFRFNfVFJJR0dFUl9CQUNLTElHSFQKKwl0cmlzdGF0ZSAiTEVEIGJhY2tsaWdodCBUcmlnZ2VyIgorCWRlcGVuZHMgb24gTEVEU19UUklHR0VSUworCWhlbHAKKwkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBhcyBhIGJhY2tsaWdodCBkZXZpY2U6IHRoZXkKKwkgIHR1cm4gb2ZmIGFuZCBvbiB3aGVuIHRoZSBkaXNwbGF5IGlzIGJsYW5rZWQgYW5kIHVuYmxhbmtlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIExFRFNfVFJJR0dFUl9ERUZBVUxUX09OCiAJdHJpc3RhdGUgIkxFRCBEZWZhdWx0IE9OIFRyaWdnZXIiCiAJZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKaW5kZXggZWIxODZjMy4uZTE5NjdhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtMTcsMTQgKzE3LDE2IEBACiBvYmotJChDT05GSUdfTEVEU19TVU5GSVJFKQkJKz0gbGVkcy1zdW5maXJlLm8KIG9iai0kKENPTkZJR19MRURTX1BDQTk1MzIpCQkrPSBsZWRzLXBjYTk1MzIubwogb2JqLSQoQ09ORklHX0xFRFNfR1BJTykJCQkrPSBsZWRzLWdwaW8ubwotb2JqLSQoQ09ORklHX0xFRFNfQ01fWDI3MCkgICAgICAgICAgICAgICs9IGxlZHMtY20teDI3MC5vCiBvYmotJChDT05GSUdfTEVEU19DTEVWT19NQUlMKQkJKz0gbGVkcy1jbGV2by1tYWlsLm8KIG9iai0kKENPTkZJR19MRURTX0hQNlhYKQkJKz0gbGVkcy1ocDZ4eC5vCiBvYmotJChDT05GSUdfTEVEU19GU0cpCQkJKz0gbGVkcy1mc2cubwogb2JqLSQoQ09ORklHX0xFRFNfUENBOTU1WCkJCSs9IGxlZHMtcGNhOTU1eC5vCitvYmotJChDT05GSUdfTEVEU19EQTkwM1gpCQkrPSBsZWRzLWRhOTAzeC5vCitvYmotJChDT05GSUdfTEVEU19IUF9ESVNLKQkJKz0gbGVkcy1ocC1kaXNrLm8KIAogIyBMRUQgVHJpZ2dlcnMKIG9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIpCSs9IGxlZHRyaWctdGltZXIubwogb2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSykJKz0gbGVkdHJpZy1pZGUtZGlzay5vCiBvYmotJChDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCkJKz0gbGVkdHJpZy1oZWFydGJlYXQubworb2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQpCSs9IGxlZHRyaWctYmFja2xpZ2h0Lm8KIG9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTikJKz0gbGVkdHJpZy1kZWZhdWx0LW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwppbmRleCBlZTc0ZWU3Li42YzRhMzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCkBAIC0zNCwxNCArMzQsMTEgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0ID0gMDsKIAogCS8qIG5vIGxvY2sgbmVlZGVkIGZvciB0aGlzICovCiAJbGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTsKLQlzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBsZWRfY2Rldi0+YnJpZ2h0bmVzcyk7Ci0JcmV0ID0gc3RybGVuKGJ1ZikgKyAxOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbGVkX2NkZXYtPmJyaWdodG5lc3MpOwogfQogCiBzdGF0aWMgc3NpemVfdCBsZWRfYnJpZ2h0bmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTMsNiArMTEwLDkgQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIAorI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCisJaW5pdF9yd3NlbSgmbGVkX2NkZXYtPnRyaWdnZXJfbG9jayk7CisjZW5kaWYKIAkvKiBhZGQgdG8gdGhlIGxpc3Qgb2YgbGVkcyAqLwogCWRvd25fd3JpdGUoJmxlZHNfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZsZWRfY2Rldi0+bm9kZSwgJmxlZHNfbGlzdCk7CkBAIC0xMjEsOCArMTIxLDYgQEAKIAlsZWRfdXBkYXRlX2JyaWdodG5lc3MobGVkX2NkZXYpOwogCiAjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKLQlpbml0X3J3c2VtKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKLQogCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGxlZF9jZGV2LT5kZXYsICZkZXZfYXR0cl90cmlnZ2VyKTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dF9sZWRfbGlzdDsKQEAgLTE0Nyw3ICsxNDUsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGVkX2NsYXNzZGV2X3JlZ2lzdGVyKTsKIAogLyoqCi0gKiBfX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlcnMgYSBvYmplY3Qgb2YgbGVkX3Byb3BlcnRpZXMgY2xhc3MuCisgKiBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXJzIGEgb2JqZWN0IG9mIGxlZF9wcm9wZXJ0aWVzIGNsYXNzLgogICogQGxlZF9jZGV2OiB0aGUgbGVkIGRldmljZSB0byB1bnJlZ2lzdGVyCiAgKgogICogVW5yZWdpc3RlcnMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdmlhIGxlZF9jbGFzc2Rldl9yZWdpc3RlciBvYmplY3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1hbXMtZGVsdGEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWFtcy1kZWx0YS5jCmluZGV4IDMyYzk4YjIuLjFiZDU5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWFtcy1kZWx0YS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWFtcy1kZWx0YS5jCkBAIC0xMDcsMjcgKzEwNywyNyBAQAogCiBzdGF0aWMgaW50IGFtc19kZWx0YV9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgaTsKLQlpbnQgcmV0OworCWludCBpLCByZXQ7CiAKLQlmb3IgKGkgPSByZXQgPSAwOyByZXQgPj0gMCAmJiBpIDwgQVJSQVlfU0laRShhbXNfZGVsdGFfbGVkcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtc19kZWx0YV9sZWRzKTsgaSsrKSB7CiAJCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LAogCQkJCSZhbXNfZGVsdGFfbGVkc1tpXS5jZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWw7CiAJfQogCi0JaWYgKHJldCA8IDAgJiYgaSA+IDEpIHsKLQkJZm9yIChpID0gaSAtIDI7IGkgPj0gMDsgaS0tKQotCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFtc19kZWx0YV9sZWRzW2ldLmNkZXYpOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CitmYWlsOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFtc19kZWx0YV9sZWRzW2ldLmNkZXYpOworCXJldHVybiByZXQ7CQogfQogCiBzdGF0aWMgaW50IGFtc19kZWx0YV9sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSBBUlJBWV9TSVpFKGFtc19kZWx0YV9sZWRzKSAtIDE7IGkgPj0gMDsgaS0tKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtc19kZWx0YV9sZWRzKTsgaS0tKQogCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYW1zX2RlbHRhX2xlZHNbaV0uY2Rldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNtLXgyNzAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNtLXgyNzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM2YTQzZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jbS14MjcwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbGVkcy9sZWRzLWNtLXgyNzAuYwotICoKLSAqIENvcHlyaWdodCAyMDA3IENvbXB1TGFiIEx0ZC4KLSAqIEF1dGhvcjogTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4KLSAqCi0gKiBCYXNlZCBvbiBsZWRzLWNvcmdpLmMKLSAqIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotCi0jZGVmaW5lIEdQSU9fUkVEX0xFRAkJCSg5MykKLSNkZWZpbmUgR1BJT19HUkVFTl9MRUQJCQkoOTQpCi0KLXN0YXRpYyB2b2lkIGNteDI3MF9yZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAotCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKLXsKLQlpZiAodmFsdWUpCi0JCUdQQ1IoR1BJT19SRURfTEVEKSA9IEdQSU9fYml0KEdQSU9fUkVEX0xFRCk7Ci0JZWxzZQotCQlHUFNSKEdQSU9fUkVEX0xFRCkgPSBHUElPX2JpdChHUElPX1JFRF9MRUQpOwotfQotCi1zdGF0aWMgdm9pZCBjbXgyNzBfZ3JlZW5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAotCQkJICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQotewotCWlmICh2YWx1ZSkKLQkJR1BDUihHUElPX0dSRUVOX0xFRCkgPSBHUElPX2JpdChHUElPX0dSRUVOX0xFRCk7Ci0JZWxzZQotCQlHUFNSKEdQSU9fR1JFRU5fTEVEKSA9IEdQSU9fYml0KEdQSU9fR1JFRU5fTEVEKTsKLX0KLQotc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgY214MjcwX3JlZF9sZWQgPSB7Ci0JLm5hbWUJCQk9ICJjbS14MjcwOnJlZCIsCi0JLmRlZmF1bHRfdHJpZ2dlcgk9ICJuYW5kLWRpc2siLAotCS5icmlnaHRuZXNzX3NldAkJPSBjbXgyNzBfcmVkX3NldCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNteDI3MF9ncmVlbl9sZWQgPSB7Ci0JLm5hbWUJCQk9ICJjbS14MjcwOmdyZWVuIiwKLQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JLmJyaWdodG5lc3Nfc2V0CQk9IGNteDI3MF9ncmVlbl9zZXQsCi19OwotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGNteDI3MGxlZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZjbXgyNzBfcmVkX2xlZCk7Ci0JbGVkX2NsYXNzZGV2X3N1c3BlbmQoJmNteDI3MF9ncmVlbl9sZWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNteDI3MGxlZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCWxlZF9jbGFzc2Rldl9yZXN1bWUoJmNteDI3MF9yZWRfbGVkKTsKLQlsZWRfY2xhc3NkZXZfcmVzdW1lKCZjbXgyNzBfZ3JlZW5fbGVkKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGNteDI3MGxlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmNteDI3MF9yZWRfbGVkKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmY214MjcwX2dyZWVuX2xlZCk7Ci0JaWYgKHJldCA8IDApCi0JCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZjbXgyNzBfcmVkX2xlZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGNteDI3MGxlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmY214MjcwX3JlZF9sZWQpOwotCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZjbXgyNzBfZ3JlZW5fbGVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY214MjcwbGVkX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gY214MjcwbGVkX3Byb2JlLAotCS5yZW1vdmUJCT0gY214MjcwbGVkX3JlbW92ZSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IGNteDI3MGxlZF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gY214MjcwbGVkX3Jlc3VtZSwKLSNlbmRpZgotCS5kcml2ZXIJCT0gewotCQkubmFtZQkJPSAiY20teDI3MC1sZWQiLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNteDI3MGxlZF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY214MjcwbGVkX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbXgyNzBsZWRfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjbXgyNzBsZWRfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoY214MjcwbGVkX2luaXQpOwotbW9kdWxlX2V4aXQoY214MjcwbGVkX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDTS14MjcwIExFRCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06Y20teDI3MC1sZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWRhOTAzeC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtZGE5MDN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmZGRiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWRhOTAzeC5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogTEVEcyBkcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIsIEx0ZC4KKyAqIAlNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CisKKyNkZWZpbmUgREE5MDMwX0xFRDFfQ09OVFJPTAkweDIwCisjZGVmaW5lIERBOTAzMF9MRUQyX0NPTlRST0wJMHgyMQorI2RlZmluZSBEQTkwMzBfTEVEM19DT05UUk9MCTB4MjIKKyNkZWZpbmUgREE5MDMwX0xFRDRfQ09OVFJPTAkweDIzCisjZGVmaW5lIERBOTAzMF9MRURQQ19DT05UUk9MCTB4MjQKKyNkZWZpbmUgREE5MDMwX01JU0NfQ09OVFJPTF9BCTB4MjYJLyogVmlicmF0b3IgQ29udHJvbCAqLworCisjZGVmaW5lIERBOTAzNF9MRUQxX0NPTlRST0wJMHgzNQorI2RlZmluZSBEQTkwMzRfTEVEMl9DT05UUk9MCTB4MzYKKyNkZWZpbmUgREE5MDM0X1ZJQlJBCQkweDQwCisKK3N0cnVjdCBkYTkwM3hfbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2CWNkZXY7CisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJc3RydWN0IGRldmljZQkJKm1hc3RlcjsKKwllbnVtIGxlZF9icmlnaHRuZXNzCW5ld19icmlnaHRuZXNzOworCWludAkJCWlkOworCWludAkJCWZsYWdzOworfTsKKworI2RlZmluZSBEQTkwMzBfTEVEX09GRlNFVChpZCkJKChpZCkgLSBEQTkwMzBfSURfTEVEXzEpCisjZGVmaW5lIERBOTAzNF9MRURfT0ZGU0VUKGlkKQkoKGlkKSAtIERBOTAzNF9JRF9MRURfMSkKKworc3RhdGljIHZvaWQgZGE5MDN4X2xlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkYTkwM3hfbGVkLCB3b3JrKTsKKwl1aW50OF90IHZhbDsKKwlpbnQgb2Zmc2V0OworCisJc3dpdGNoIChsZWQtPmlkKSB7CisJY2FzZSBEQTkwMzBfSURfTEVEXzE6CisJY2FzZSBEQTkwMzBfSURfTEVEXzI6CisJY2FzZSBEQTkwMzBfSURfTEVEXzM6CisJY2FzZSBEQTkwMzBfSURfTEVEXzQ6CisJY2FzZSBEQTkwMzBfSURfTEVEX1BDOgorCQlvZmZzZXQgPSBEQTkwMzBfTEVEX09GRlNFVChsZWQtPmlkKTsKKwkJdmFsID0gbGVkLT5mbGFncyAmIH4weDg3OworCQl2YWwgfD0gKGxlZC0+bmV3X2JyaWdodG5lc3MpID8gMHg4MCA6IDA7IC8qIEVOIGJpdCAqLworCQl2YWwgfD0gKGxlZC0+bmV3X2JyaWdodG5lc3MgPj4gNSkgJiAweDc7IC8qIFBXTTwyOjA+ICovCisJCWRhOTAzeF93cml0ZShsZWQtPm1hc3RlciwgREE5MDMwX0xFRDFfQ09OVFJPTCArIG9mZnNldCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBEQTkwMzBfSURfVklCUkE6CisJCXZhbCA9IGxlZC0+ZmxhZ3MgJiB+MHg4MDsKKwkJdmFsIHw9IChsZWQtPm5ld19icmlnaHRuZXNzKSA/IDB4ODAgOiAwOyAvKiBFTiBiaXQgKi8KKwkJZGE5MDN4X3dyaXRlKGxlZC0+bWFzdGVyLCBEQTkwMzBfTUlTQ19DT05UUk9MX0EsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgREE5MDM0X0lEX0xFRF8xOgorCWNhc2UgREE5MDM0X0lEX0xFRF8yOgorCQlvZmZzZXQgPSBEQTkwMzRfTEVEX09GRlNFVChsZWQtPmlkKTsKKwkJdmFsID0gKGxlZC0+bmV3X2JyaWdodG5lc3MgKiAweDVmIC8gTEVEX0ZVTEwpICYgMHg3ZjsKKwkJdmFsIHw9IChsZWQtPmZsYWdzICYgREE5MDM0X0xFRF9SQU1QKSA/IDB4ODAgOiAwOworCQlkYTkwM3hfd3JpdGUobGVkLT5tYXN0ZXIsIERBOTAzNF9MRUQxX0NPTlRST0wgKyBvZmZzZXQsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgREE5MDM0X0lEX1ZJQlJBOgorCQl2YWwgPSBsZWQtPm5ld19icmlnaHRuZXNzICYgMHhmZTsKKwkJZGE5MDN4X3dyaXRlKGxlZC0+bWFzdGVyLCBEQTkwMzRfVklCUkEsIHZhbCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZGE5MDN4X2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBkYTkwM3hfbGVkICpsZWQ7CisJCisJbGVkID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgZGE5MDN4X2xlZCwgY2Rldik7CisJbGVkLT5uZXdfYnJpZ2h0bmVzcyA9IHZhbHVlOworCXNjaGVkdWxlX3dvcmsoJmxlZC0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhOTAzeF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbGVkX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRhOTAzeF9sZWQgKmxlZDsKKwlpbnQgaWQsIHJldDsKKworCWlmIChwZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlkID0gcGRldi0+aWQ7CisKKwlpZiAoISgoaWQgPj0gREE5MDMwX0lEX0xFRF8xICYmIGlkIDw9IERBOTAzMF9JRF9WSUJSQSkgfHwKKwkgICAgICAoaWQgPj0gREE5MDM0X0lEX0xFRF8xICYmIGlkIDw9IERBOTAzNF9JRF9WSUJSQSkpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgTEVEIElEICglZCkgc3BlY2lmaWVkXG4iLCBpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYTkwM3hfbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvYyBtZW1vcnkgZm9yIExFRCVkXG4iLCBpZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWxlZC0+Y2Rldi5uYW1lID0gcGRhdGEtPm5hbWU7CisJbGVkLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHBkYXRhLT5kZWZhdWx0X3RyaWdnZXI7CisJbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gZGE5MDN4X2xlZF9zZXQ7CisJbGVkLT5jZGV2LmJyaWdodG5lc3MgPSBMRURfT0ZGOworCisJbGVkLT5pZCA9IGlkOworCWxlZC0+ZmxhZ3MgPSBwZGF0YS0+ZmxhZ3M7CisJbGVkLT5tYXN0ZXIgPSBwZGV2LT5kZXYucGFyZW50OworCWxlZC0+bmV3X2JyaWdodG5lc3MgPSBMRURfT0ZGOworCisJSU5JVF9XT1JLKCZsZWQtPndvcmssIGRhOTAzeF9sZWRfd29yayk7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIobGVkLT5tYXN0ZXIsICZsZWQtPmNkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIExFRCAlZFxuIiwgaWQpOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZWQpOworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUobGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYTkwM3hfbGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYTkwM3hfbGVkICpsZWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmNkZXYpOworCWtmcmVlKGxlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhOTAzeF9sZWRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRhOTAzeC1sZWQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBkYTkwM3hfbGVkX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZGE5MDN4X2xlZF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGE5MDN4X2xlZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGE5MDN4X2xlZF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZGE5MDN4X2xlZF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRhOTAzeF9sZWRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkYTkwM3hfbGVkX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkYTkwM3hfbGVkX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxFRHMgZHJpdmVyIGZvciBEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwMzAvREE5MDM0Iik7CitNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iCisJICAgICAgIk1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRhOTAzeC1sZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwLWRpc2suYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWhwLWRpc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2EyNWIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtaHAtZGlzay5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogIGxlZHMtaHAtZGlzay5jIC0gZHJpdmVyIGZvciBIUCAiaGFyZCBkaXNrIHByb3RlY3Rpb24iIExFRAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggUGF2ZWwgTWFjaGVrCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAgICAgImxlZHMtaHAtZGlzayIKKyNkZWZpbmUgQUNQSV9NRFBTX0NMQVNTICJsZWQiCisKKy8qIEZvciBhdXRvbWF0aWMgaW5zZXJ0aW9uIG9mIHRoZSBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgaHBsZWRfZGV2aWNlX2lkc1tdID0geworCXsiSFBRMDAwNCIsIDB9LCAvKiBIUCBNb2JpbGUgRGF0YSBQcm90ZWN0aW9uIFN5c3RlbSBQTlAgKi8KKwl7IiIsIDB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgaHBsZWRfZGV2aWNlX2lkcyk7CisKK3N0cnVjdCBhY3BpX2hwbGVkIHsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UJKmRldmljZTsgICAvKiBUaGUgQUNQSSBkZXZpY2UgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9ocGxlZCBhZGV2OworCitzdGF0aWMgYWNwaV9zdGF0dXMgaHBsZWRfYWNwaV93cml0ZShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7IC8qIE5vdCB1c2VkIHdoZW4gd3JpdGluZyAqLworCXVuaW9uIGFjcGlfb2JqZWN0IGluX29ialsxXTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCBpbl9vYmogfTsKKworCWluX29ialswXS50eXBlICAgICAgICAgID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fb2JqWzBdLmludGVnZXIudmFsdWUgPSByZWc7CisKKwlyZXR1cm4gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIkFMRUQiLCAmYXJncywgJnJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGhwbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCWhwbGVkX2FjcGlfd3JpdGUoYWRldi5kZXZpY2UtPmhhbmRsZSwgISF2YWx1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IGhwbGVkX2xlZCA9IHsKKwkubmFtZQkJCT0gImhwOnJlZDpoZGRwcm90ZWN0aW9uIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJLmJyaWdodG5lc3Nfc2V0CQk9IGhwbGVkX3NldCwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaHBsZWRfc3VzcGVuZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZocGxlZF9sZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwbGVkX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldikKK3sKKwlsZWRfY2xhc3NkZXZfcmVzdW1lKCZocGxlZF9sZWQpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgaHBsZWRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGhwbGVkX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBocGxlZF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJldDsKKworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFkZXYuZGV2aWNlID0gZGV2aWNlOworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIERSSVZFUl9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9NRFBTX0NMQVNTKTsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gJmFkZXY7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoTlVMTCwgJmhwbGVkX2xlZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBocGxlZF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQoreworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZocGxlZF9sZWQpOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBsZWRzX2hwX2RyaXZlciA9IHsKKwkubmFtZSAgPSBEUklWRVJfTkFNRSwKKwkuY2xhc3MgPSBBQ1BJX01EUFNfQ0xBU1MsCisJLmlkcyAgID0gaHBsZWRfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkICAgICA9IGhwbGVkX2FkZCwKKwkJLnJlbW92ZSAgPSBocGxlZF9yZW1vdmUsCisJCS5zdXNwZW5kID0gaHBsZWRfc3VzcGVuZCwKKwkJLnJlc3VtZSAgPSBocGxlZF9yZXN1bWUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaHBsZWRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZsZWRzX2hwX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICIgZHJpdmVyIGxvYWRlZC5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBocGxlZF9leGl0X21vZHVsZSh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZsZWRzX2hwX2RyaXZlcik7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBIUCBkaXNrIHByb3RlY3Rpb24gTEVEIik7CitNT0RVTEVfQVVUSE9SKCJQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGhwbGVkX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGhwbGVkX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCmluZGV4IDg0NGQ1OTcuLmU4ZmIxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtaHA2eHguYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogc3RhdGljIHZvaWQgaHA2eHhsZWRfZ3JlZW5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJICAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTV4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTV4LmMKaW5kZXggZjUwODcyOS4uNGUyZDFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTU1eC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1NXguYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJcGNhOTU1eF93cml0ZV9scyhwY2E5NTV4LT5jbGllbnQsIGNoaXBfbHMsIGxzKTsKIH0KIAotdm9pZCBwY2E5NTV4X2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCitzdGF0aWMgdm9pZCBwY2E5NTV4X2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCiB7CiAJc3RydWN0IHBjYTk1NXhfbGVkICpwY2E5NTV4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy13cmFwLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy13cmFwLmMKaW5kZXggN2FjNjFhNy4uMmYzYWE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtd3JhcC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXdyYXAuYwpAQCAtNTMsOCArNTMsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiB3cmFwX3Bvd2VyX2xlZCA9IHsKLQkubmFtZQkJPSAid3JhcDo6cG93ZXIiLAotCS5icmlnaHRuZXNzX3NldAk9IHdyYXBfcG93ZXJfbGVkX3NldCwKKwkubmFtZQkJCT0gIndyYXA6OnBvd2VyIiwKKwkuYnJpZ2h0bmVzc19zZXQJCT0gd3JhcF9wb3dlcl9sZWRfc2V0LAorCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiB3cmFwX2Vycm9yX2xlZCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWJhY2tsaWdodC5jIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctYmFja2xpZ2h0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkZmNmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWJhY2tsaWdodC5jCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQmFja2xpZ2h0IGVtdWxhdGlvbiBMRUQgdHJpZ2dlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IChDKSBSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4KKyAqIENvcHlyaWdodCAyMDA4IChDKSBFdXJvdGVjaCBTLnAuQS4gPGluZm9AZXVyb3RlY2guaXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlICJsZWRzLmgiCisKKyNkZWZpbmUgQkxBTksJCTEKKyNkZWZpbmUgVU5CTEFOSwkJMAorCitzdHJ1Y3QgYmxfdHJpZ19ub3RpZmllciB7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkOworCWludCBicmlnaHRuZXNzOworCWludCBvbGRfc3RhdHVzOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBub3RpZmllcjsKK307CisKK3N0YXRpYyBpbnQgZmJfbm90aWZpZXJfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpwLAorCQkJCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJsX3RyaWdfbm90aWZpZXIgKm4gPSBjb250YWluZXJfb2YocCwKKwkJCQkJc3RydWN0IGJsX3RyaWdfbm90aWZpZXIsIG5vdGlmaWVyKTsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQgPSBuLT5sZWQ7CisJc3RydWN0IGZiX2V2ZW50ICpmYl9ldmVudCA9IGRhdGE7CisJaW50ICpibGFuayA9IGZiX2V2ZW50LT5kYXRhOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkJfRVZFTlRfQkxBTksgOgorCQlpZiAoKmJsYW5rICYmIG4tPm9sZF9zdGF0dXMgPT0gVU5CTEFOSykgeworCQkJbi0+YnJpZ2h0bmVzcyA9IGxlZC0+YnJpZ2h0bmVzczsKKwkJCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWQsIExFRF9PRkYpOworCQkJbi0+b2xkX3N0YXR1cyA9IEJMQU5LOworCQl9IGVsc2UgaWYgKCEqYmxhbmsgJiYgbi0+b2xkX3N0YXR1cyA9PSBCTEFOSykgeworCQkJbGVkX3NldF9icmlnaHRuZXNzKGxlZCwgbi0+YnJpZ2h0bmVzcyk7CisJCQluLT5vbGRfc3RhdHVzID0gVU5CTEFOSzsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmxfdHJpZ19hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQpCit7CisJaW50IHJldDsKKworCXN0cnVjdCBibF90cmlnX25vdGlmaWVyICpuOworCisJbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBibF90cmlnX25vdGlmaWVyKSwgR0ZQX0tFUk5FTCk7CisJbGVkLT50cmlnZ2VyX2RhdGEgPSBuOworCWlmICghbikgeworCQlkZXZfZXJyKGxlZC0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIGJhY2tsaWdodCB0cmlnZ2VyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW4tPmxlZCA9IGxlZDsKKwluLT5icmlnaHRuZXNzID0gbGVkLT5icmlnaHRuZXNzOworCW4tPm9sZF9zdGF0dXMgPSBVTkJMQU5LOworCW4tPm5vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBmYl9ub3RpZmllcl9jYWxsYmFjazsKKworCXJldCA9IGZiX3JlZ2lzdGVyX2NsaWVudCgmbi0+bm90aWZpZXIpOworCWlmIChyZXQpCisJCWRldl9lcnIobGVkLT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0IHRyaWdnZXJcbiIpOworfQorCitzdGF0aWMgdm9pZCBibF90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkKQoreworCXN0cnVjdCBibF90cmlnX25vdGlmaWVyICpuID0KKwkJKHN0cnVjdCBibF90cmlnX25vdGlmaWVyICopIGxlZC0+dHJpZ2dlcl9kYXRhOworCisJaWYgKG4pIHsKKwkJZmJfdW5yZWdpc3Rlcl9jbGllbnQoJm4tPm5vdGlmaWVyKTsKKwkJa2ZyZWUobik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGJsX2xlZF90cmlnZ2VyID0geworCS5uYW1lCQk9ICJiYWNrbGlnaHQiLAorCS5hY3RpdmF0ZQk9IGJsX3RyaWdfYWN0aXZhdGUsCisJLmRlYWN0aXZhdGUJPSBibF90cmlnX2RlYWN0aXZhdGUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJsX3RyaWdfaW5pdCh2b2lkKQoreworCXJldHVybiBsZWRfdHJpZ2dlcl9yZWdpc3RlcigmYmxfbGVkX3RyaWdnZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmxfdHJpZ19leGl0KHZvaWQpCit7CisJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmYmxfbGVkX3RyaWdnZXIpOworfQorCittb2R1bGVfaW5pdChibF90cmlnX2luaXQpOworbW9kdWxlX2V4aXQoYmxfdHJpZ19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiUm9kb2xmbyBHaW9tZXR0aSA8Z2lvbWV0dGlAbGludXguaXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJhY2tsaWdodCBlbXVsYXRpb24gTEVEIHRyaWdnZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMgYi9kcml2ZXJzL2xlZHMvbGVkdHJpZy10aW1lci5jCmluZGV4IDVjOTlmNGYuLmRiNjgxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYwpAQCAtNzAsOSArNzAsNyBAQAogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHRpbWVyX3RyaWdfZGF0YSAqdGltZXJfZGF0YSA9IGxlZF9jZGV2LT50cmlnZ2VyX2RhdGE7CiAKLQlzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgdGltZXJfZGF0YS0+ZGVsYXlfb24pOwotCi0JcmV0dXJuIHN0cmxlbihidWYpICsgMTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHRpbWVyX2RhdGEtPmRlbGF5X29uKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbGVkX2RlbGF5X29uX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTExNiw5ICsxMTQsNyBAQAogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHRpbWVyX3RyaWdfZGF0YSAqdGltZXJfZGF0YSA9IGxlZF9jZGV2LT50cmlnZ2VyX2RhdGE7CiAKLQlzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgdGltZXJfZGF0YS0+ZGVsYXlfb2ZmKTsKLQotCXJldHVybiBzdHJsZW4oYnVmKSArIDE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCB0aW1lcl9kYXRhLT5kZWxheV9vZmYpOwogfQogCiBzdGF0aWMgc3NpemVfdCBsZWRfZGVsYXlfb2ZmX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IGYxZWYzM2QuLjFjNjE1ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtMzQsNyArMzQsNyBAQAogb2JqLSQoQ09ORklHX0RNX0RFTEFZKQkJKz0gZG0tZGVsYXkubwogb2JqLSQoQ09ORklHX0RNX01VTFRJUEFUSCkJKz0gZG0tbXVsdGlwYXRoLm8gZG0tcm91bmQtcm9iaW4ubwogb2JqLSQoQ09ORklHX0RNX1NOQVBTSE9UKQkrPSBkbS1zbmFwc2hvdC5vCi1vYmotJChDT05GSUdfRE1fTUlSUk9SKQkJKz0gZG0tbWlycm9yLm8gZG0tbG9nLm8KK29iai0kKENPTkZJR19ETV9NSVJST1IpCQkrPSBkbS1taXJyb3IubyBkbS1sb2cubyBkbS1yZWdpb24taGFzaC5vCiBvYmotJChDT05GSUdfRE1fWkVSTykJCSs9IGRtLXplcm8ubwogCiBxdWlldF9jbWRfdW5yb2xsID0gVU5ST0xMICAkQApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCmluZGV4IDY4MmVmOWUuLmNlMjZjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYworKysgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAotI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogCiAjZGVmaW5lIERNX01TR19QUkVGSVggImNyeXB0IgogI2RlZmluZSBNRVNHX1NUUih4KSB4LCBzaXplb2YoeCkKQEAgLTU2LDYgKzU2LDcgQEAKIAlhdG9taWNfdCBwZW5kaW5nOwogCWludCBlcnJvcjsKIAlzZWN0b3JfdCBzZWN0b3I7CisJc3RydWN0IGRtX2NyeXB0X2lvICpiYXNlX2lvOwogfTsKIAogc3RydWN0IGRtX2NyeXB0X3JlcXVlc3QgewpAQCAtOTMsNyArOTQsNiBAQAogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlvX3F1ZXVlOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjcnlwdF9xdWV1ZTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cml0ZXE7CiAKIAkvKgogCSAqIGNyeXB0byByZWxhdGVkIGRhdGEKQEAgLTUzNCw2ICs1MzQsNyBAQAogCWlvLT5iYXNlX2JpbyA9IGJpbzsKIAlpby0+c2VjdG9yID0gc2VjdG9yOwogCWlvLT5lcnJvciA9IDA7CisJaW8tPmJhc2VfaW8gPSBOVUxMOwogCWF0b21pY19zZXQoJmlvLT5wZW5kaW5nLCAwKTsKIAogCXJldHVybiBpbzsKQEAgLTU0Nyw2ICs1NDgsNyBAQAogLyoKICAqIE9uZSBvZiB0aGUgYmlvcyB3YXMgZmluaXNoZWQuIENoZWNrIGZvciBjb21wbGV0aW9uIG9mCiAgKiB0aGUgd2hvbGUgcmVxdWVzdCBhbmQgY29ycmVjdGx5IGNsZWFuIHVwIHRoZSBidWZmZXIuCisgKiBJZiBiYXNlX2lvIGlzIHNldCwgd2FpdCBmb3IgdGhlIGxhc3QgZnJhZ21lbnQgdG8gY29tcGxldGUuCiAgKi8KIHN0YXRpYyB2b2lkIGNyeXB0X2RlY19wZW5kaW5nKHN0cnVjdCBkbV9jcnlwdF9pbyAqaW8pCiB7CkBAIC01NTUsNyArNTU3LDE0IEBACiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+cGVuZGluZykpCiAJCXJldHVybjsKIAotCWJpb19lbmRpbyhpby0+YmFzZV9iaW8sIGlvLT5lcnJvcik7CisJaWYgKGxpa2VseSghaW8tPmJhc2VfaW8pKQorCQliaW9fZW5kaW8oaW8tPmJhc2VfYmlvLCBpby0+ZXJyb3IpOworCWVsc2UgeworCQlpZiAoaW8tPmVycm9yICYmICFpby0+YmFzZV9pby0+ZXJyb3IpCisJCQlpby0+YmFzZV9pby0+ZXJyb3IgPSBpby0+ZXJyb3I7CisJCWNyeXB0X2RlY19wZW5kaW5nKGlvLT5iYXNlX2lvKTsKKwl9CisKIAltZW1wb29sX2ZyZWUoaW8sIGNjLT5pb19wb29sKTsKIH0KIApAQCAtNjQ2LDEwICs2NTUsNyBAQAogc3RhdGljIHZvaWQga2NyeXB0ZF9pb193cml0ZShzdHJ1Y3QgZG1fY3J5cHRfaW8gKmlvKQogewogCXN0cnVjdCBiaW8gKmNsb25lID0gaW8tPmN0eC5iaW9fb3V0OwotCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gaW8tPnRhcmdldC0+cHJpdmF0ZTsKLQogCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGNsb25lKTsKLQl3YWtlX3VwKCZjYy0+d3JpdGVxKTsKIH0KIAogc3RhdGljIHZvaWQga2NyeXB0ZF9pbyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC02ODgsNyArNjk0LDYgQEAKIAlCVUdfT04oaW8tPmN0eC5pZHhfb3V0IDwgY2xvbmUtPmJpX3ZjbnQpOwogCiAJY2xvbmUtPmJpX3NlY3RvciA9IGNjLT5zdGFydCArIGlvLT5zZWN0b3I7Ci0JaW8tPnNlY3RvciArPSBiaW9fc2VjdG9ycyhjbG9uZSk7CiAKIAlpZiAoYXN5bmMpCiAJCWtjcnlwdGRfcXVldWVfaW8oaW8pOwpAQCAtNzAwLDE2ICs3MDUsMTggQEAKIHsKIAlzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyA9IGlvLT50YXJnZXQtPnByaXZhdGU7CiAJc3RydWN0IGJpbyAqY2xvbmU7CisJc3RydWN0IGRtX2NyeXB0X2lvICpuZXdfaW87CiAJaW50IGNyeXB0X2ZpbmlzaGVkOwogCXVuc2lnbmVkIG91dF9vZl9wYWdlcyA9IDA7CiAJdW5zaWduZWQgcmVtYWluaW5nID0gaW8tPmJhc2VfYmlvLT5iaV9zaXplOworCXNlY3Rvcl90IHNlY3RvciA9IGlvLT5zZWN0b3I7CiAJaW50IHI7CiAKIAkvKgogCSAqIFByZXZlbnQgaW8gZnJvbSBkaXNhcHBlYXJpbmcgdW50aWwgdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMuCiAJICovCiAJY3J5cHRfaW5jX3BlbmRpbmcoaW8pOwotCWNyeXB0X2NvbnZlcnRfaW5pdChjYywgJmlvLT5jdHgsIE5VTEwsIGlvLT5iYXNlX2JpbywgaW8tPnNlY3Rvcik7CisJY3J5cHRfY29udmVydF9pbml0KGNjLCAmaW8tPmN0eCwgTlVMTCwgaW8tPmJhc2VfYmlvLCBzZWN0b3IpOwogCiAJLyoKIAkgKiBUaGUgYWxsb2NhdGVkIGJ1ZmZlcnMgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgYmlvLApAQCAtNzI2LDYgKzczMyw3IEBACiAJCWlvLT5jdHguaWR4X291dCA9IDA7CiAKIAkJcmVtYWluaW5nIC09IGNsb25lLT5iaV9zaXplOworCQlzZWN0b3IgKz0gYmlvX3NlY3RvcnMoY2xvbmUpOwogCiAJCWNyeXB0X2luY19wZW5kaW5nKGlvKTsKIAkJciA9IGNyeXB0X2NvbnZlcnQoY2MsICZpby0+Y3R4KTsKQEAgLTc0MSw2ICs3NDksOCBAQAogCQkJICovCiAJCQlpZiAodW5saWtlbHkociA8IDApKQogCQkJCWJyZWFrOworCisJCQlpby0+c2VjdG9yID0gc2VjdG9yOwogCQl9CiAKIAkJLyoKQEAgLTc1MCw4ICs3NjAsMzMgQEAKIAkJaWYgKHVubGlrZWx5KG91dF9vZl9wYWdlcykpCiAJCQljb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwMCk7CiAKLQkJaWYgKHVubGlrZWx5KHJlbWFpbmluZykpCi0JCQl3YWl0X2V2ZW50KGNjLT53cml0ZXEsICFhdG9taWNfcmVhZCgmaW8tPmN0eC5wZW5kaW5nKSk7CisJCS8qCisJCSAqIFdpdGggYXN5bmMgY3J5cHRvIGl0IGlzIHVuc2FmZSB0byBzaGFyZSB0aGUgY3J5cHRvIGNvbnRleHQKKwkJICogYmV0d2VlbiBmcmFnbWVudHMsIHNvIHN3aXRjaCB0byBhIG5ldyBkbV9jcnlwdF9pbyBzdHJ1Y3R1cmUuCisJCSAqLworCQlpZiAodW5saWtlbHkoIWNyeXB0X2ZpbmlzaGVkICYmIHJlbWFpbmluZykpIHsKKwkJCW5ld19pbyA9IGNyeXB0X2lvX2FsbG9jKGlvLT50YXJnZXQsIGlvLT5iYXNlX2JpbywKKwkJCQkJCXNlY3Rvcik7CisJCQljcnlwdF9pbmNfcGVuZGluZyhuZXdfaW8pOworCQkJY3J5cHRfY29udmVydF9pbml0KGNjLCAmbmV3X2lvLT5jdHgsIE5VTEwsCisJCQkJCSAgIGlvLT5iYXNlX2Jpbywgc2VjdG9yKTsKKwkJCW5ld19pby0+Y3R4LmlkeF9pbiA9IGlvLT5jdHguaWR4X2luOworCQkJbmV3X2lvLT5jdHgub2Zmc2V0X2luID0gaW8tPmN0eC5vZmZzZXRfaW47CisKKwkJCS8qCisJCQkgKiBGcmFnbWVudHMgYWZ0ZXIgdGhlIGZpcnN0IHVzZSB0aGUgYmFzZV9pbworCQkJICogcGVuZGluZyBjb3VudC4KKwkJCSAqLworCQkJaWYgKCFpby0+YmFzZV9pbykKKwkJCQluZXdfaW8tPmJhc2VfaW8gPSBpbzsKKwkJCWVsc2UgeworCQkJCW5ld19pby0+YmFzZV9pbyA9IGlvLT5iYXNlX2lvOworCQkJCWNyeXB0X2luY19wZW5kaW5nKGlvLT5iYXNlX2lvKTsKKwkJCQljcnlwdF9kZWNfcGVuZGluZyhpbyk7CisJCQl9CisKKwkJCWlvID0gbmV3X2lvOworCQl9CiAJfQogCiAJY3J5cHRfZGVjX3BlbmRpbmcoaW8pOwpAQCAtMTA3OCw3ICsxMTEzLDYgQEAKIAkJZ290byBiYWRfY3J5cHRfcXVldWU7CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmY2MtPndyaXRlcSk7CiAJdGktPnByaXZhdGUgPSBjYzsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1kZWxheS5jIGIvZHJpdmVycy9tZC9kbS1kZWxheS5jCmluZGV4IGJkZDM3ZjguLjg0OGIzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZGVsYXkuYworKysgYi9kcml2ZXJzL21kL2RtLWRlbGF5LmMKQEAgLTEzLDcgKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KKwogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAiZGVsYXkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwppbmRleCA3NjlhYjY3Li4wMTU5MGYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYworKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCkBAIC03LDcgKzcsNiBAQAogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KIAotI2luY2x1ZGUgImRtLmgiCiAjaW5jbHVkZSAiZG0tc25hcC5oIgogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTEwNSw2ICsxMDQsMTEgQEAKIAl2b2lkICphcmVhOwogCiAJLyoKKwkgKiBBbiBhcmVhIG9mIHplcm9zIHVzZWQgdG8gY2xlYXIgdGhlIG5leHQgYXJlYS4KKwkgKi8KKwl2b2lkICp6ZXJvX2FyZWE7CisKKwkvKgogCSAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBtZXRhZGF0YSBhcmVhIHRoZSBkYXRhIGluCiAJICogJ2NodW5rJyByZWZlcnMgdG8uCiAJICovCkBAIC0xNDksNiArMTUzLDEzIEBACiAJaWYgKCFwcy0+YXJlYSkKIAkJcmV0dXJuIHI7CiAKKwlwcy0+emVyb19hcmVhID0gdm1hbGxvYyhsZW4pOworCWlmICghcHMtPnplcm9fYXJlYSkgeworCQl2ZnJlZShwcy0+YXJlYSk7CisJCXJldHVybiByOworCX0KKwltZW1zZXQocHMtPnplcm9fYXJlYSwgMCwgbGVuKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTYsNiArMTY3LDggQEAKIHsKIAl2ZnJlZShwcy0+YXJlYSk7CiAJcHMtPmFyZWEgPSBOVUxMOworCXZmcmVlKHBzLT56ZXJvX2FyZWEpOworCXBzLT56ZXJvX2FyZWEgPSBOVUxMOwogfQogCiBzdHJ1Y3QgbWRhdGFfcmVxIHsKQEAgLTIyMCwyNSArMjMzLDQxIEBACiAgKiBSZWFkIG9yIHdyaXRlIGEgbWV0YWRhdGEgYXJlYS4gIFJlbWVtYmVyaW5nIHRvIHNraXAgdGhlIGZpcnN0CiAgKiBjaHVuayB3aGljaCBob2xkcyB0aGUgaGVhZGVyLgogICovCi1zdGF0aWMgaW50IGFyZWFfaW8oc3RydWN0IHBzdG9yZSAqcHMsIGNodW5rX3QgYXJlYSwgaW50IHJ3KQorc3RhdGljIGludCBhcmVhX2lvKHN0cnVjdCBwc3RvcmUgKnBzLCBpbnQgcncpCiB7CiAJaW50IHI7CiAJY2h1bmtfdCBjaHVuazsKIAotCWNodW5rID0gYXJlYV9sb2NhdGlvbihwcywgYXJlYSk7CisJY2h1bmsgPSBhcmVhX2xvY2F0aW9uKHBzLCBwcy0+Y3VycmVudF9hcmVhKTsKIAogCXIgPSBjaHVua19pbyhwcywgY2h1bmssIHJ3LCAwKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlwcy0+Y3VycmVudF9hcmVhID0gYXJlYTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB6ZXJvX2FyZWEoc3RydWN0IHBzdG9yZSAqcHMsIGNodW5rX3QgYXJlYSkKK3N0YXRpYyB2b2lkIHplcm9fbWVtb3J5X2FyZWEoc3RydWN0IHBzdG9yZSAqcHMpCiB7CiAJbWVtc2V0KHBzLT5hcmVhLCAwLCBwcy0+c25hcC0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQpOwotCXJldHVybiBhcmVhX2lvKHBzLCBhcmVhLCBXUklURSk7Cit9CisKK3N0YXRpYyBpbnQgemVyb19kaXNrX2FyZWEoc3RydWN0IHBzdG9yZSAqcHMsIGNodW5rX3QgYXJlYSkKK3sKKwlzdHJ1Y3QgZG1faW9fcmVnaW9uIHdoZXJlID0geworCQkuYmRldiA9IHBzLT5zbmFwLT5jb3ctPmJkZXYsCisJCS5zZWN0b3IgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSAqIGFyZWFfbG9jYXRpb24ocHMsIGFyZWEpLAorCQkuY291bnQgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSwKKwl9OworCXN0cnVjdCBkbV9pb19yZXF1ZXN0IGlvX3JlcSA9IHsKKwkJLmJpX3J3ID0gV1JJVEUsCisJCS5tZW0udHlwZSA9IERNX0lPX1ZNQSwKKwkJLm1lbS5wdHIudm1hID0gcHMtPnplcm9fYXJlYSwKKwkJLmNsaWVudCA9IHBzLT5pb19jbGllbnQsCisJCS5ub3RpZnkuZm4gPSBOVUxMLAorCX07CisKKwlyZXR1cm4gZG1faW8oJmlvX3JlcSwgMSwgJndoZXJlLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCByZWFkX2hlYWRlcihzdHJ1Y3QgcHN0b3JlICpwcywgaW50ICpuZXdfc25hcHNob3QpCkBAIC00MTEsMTUgKzQ0MCwxNCBAQAogCiBzdGF0aWMgaW50IHJlYWRfZXhjZXB0aW9ucyhzdHJ1Y3QgcHN0b3JlICpwcykKIHsKLQljaHVua190IGFyZWE7CiAJaW50IHIsIGZ1bGwgPSAxOwogCiAJLyoKIAkgKiBLZWVwaW5nIHJlYWRpbmcgY2h1bmtzIGFuZCBpbnNlcnRpbmcgZXhjZXB0aW9ucyB1bnRpbAogCSAqIHdlIGZpbmQgYSBwYXJ0aWFsbHkgZnVsbCBhcmVhLgogCSAqLwotCWZvciAoYXJlYSA9IDA7IGZ1bGw7IGFyZWErKykgewotCQlyID0gYXJlYV9pbyhwcywgYXJlYSwgUkVBRCk7CisJZm9yIChwcy0+Y3VycmVudF9hcmVhID0gMDsgZnVsbDsgcHMtPmN1cnJlbnRfYXJlYSsrKSB7CisJCXIgPSBhcmVhX2lvKHBzLCBSRUFEKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIApAQCAtNDI4LDYgKzQ1Niw4IEBACiAJCQlyZXR1cm4gcjsKIAl9CiAKKwlwcy0+Y3VycmVudF9hcmVhLS07CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2LDEyICs1MTYsMTMgQEAKIAkJCXJldHVybiByOwogCQl9CiAKLQkJciA9IHplcm9fYXJlYShwcywgMCk7CisJCXBzLT5jdXJyZW50X2FyZWEgPSAwOworCQl6ZXJvX21lbW9yeV9hcmVhKHBzKTsKKwkJciA9IHplcm9fZGlza19hcmVhKHBzLCAwKTsKIAkJaWYgKHIpIHsKLQkJCURNV0FSTigiemVyb19hcmVhKDApIGZhaWxlZCIpOworCQkJRE1XQVJOKCJ6ZXJvX2Rpc2tfYXJlYSgwKSBmYWlsZWQiKTsKIAkJCXJldHVybiByOwogCQl9Ci0KIAl9IGVsc2UgewogCQkvKgogCQkgKiBTYW5pdHkgY2hlY2tzLgpAQCAtNTUxLDcgKzU4Miw2IEBACiAJCQkgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICosIGludCBzdWNjZXNzKSwKIAkJCSAgICAgIHZvaWQgKmNhbGxiYWNrX2NvbnRleHQpCiB7Ci0JaW50IHI7CiAJdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IHBzdG9yZSAqcHMgPSBnZXRfaW5mbyhzdG9yZSk7CiAJc3RydWN0IGRpc2tfZXhjZXB0aW9uIGRlOwpAQCAtNTcyLDMzICs2MDIsNDEgQEAKIAljYi0+Y29udGV4dCA9IGNhbGxiYWNrX2NvbnRleHQ7CiAKIAkvKgotCSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIGV4Y2VwdGlvbnMgaW4gZmxpZ2h0LCBvciB3ZSBoYXZlCi0JICogZmlsbGVkIHRoaXMgbWV0YWRhdGEgYXJlYSB3ZSBjb21taXQgdGhlIGV4Y2VwdGlvbnMgdG8KLQkgKiBkaXNrLgorCSAqIElmIHRoZXJlIGFyZSBleGNlcHRpb25zIGluIGZsaWdodCBhbmQgd2UgaGF2ZSBub3QgeWV0CisJICogZmlsbGVkIHRoaXMgbWV0YWRhdGEgYXJlYSB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkby4KIAkgKi8KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcHMtPnBlbmRpbmdfY291bnQpIHx8Ci0JICAgIChwcy0+Y3VycmVudF9jb21taXR0ZWQgPT0gcHMtPmV4Y2VwdGlvbnNfcGVyX2FyZWEpKSB7Ci0JCXIgPSBhcmVhX2lvKHBzLCBwcy0+Y3VycmVudF9hcmVhLCBXUklURSk7Ci0JCWlmIChyKQotCQkJcHMtPnZhbGlkID0gMDsKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnBzLT5wZW5kaW5nX2NvdW50KSAmJgorCSAgICAocHMtPmN1cnJlbnRfY29tbWl0dGVkICE9IHBzLT5leGNlcHRpb25zX3Blcl9hcmVhKSkKKwkJcmV0dXJuOwogCi0JCS8qCi0JCSAqIEhhdmUgd2UgY29tcGxldGVseSBmaWxsZWQgdGhlIGN1cnJlbnQgYXJlYSA/Ci0JCSAqLwotCQlpZiAocHMtPmN1cnJlbnRfY29tbWl0dGVkID09IHBzLT5leGNlcHRpb25zX3Blcl9hcmVhKSB7Ci0JCQlwcy0+Y3VycmVudF9jb21taXR0ZWQgPSAwOwotCQkJciA9IHplcm9fYXJlYShwcywgcHMtPmN1cnJlbnRfYXJlYSArIDEpOwotCQkJaWYgKHIpCi0JCQkJcHMtPnZhbGlkID0gMDsKLQkJfQorCS8qCisJICogSWYgd2UgY29tcGxldGVseSBmaWxsZWQgdGhlIGN1cnJlbnQgYXJlYSwgdGhlbiB3aXBlIHRoZSBuZXh0IG9uZS4KKwkgKi8KKwlpZiAoKHBzLT5jdXJyZW50X2NvbW1pdHRlZCA9PSBwcy0+ZXhjZXB0aW9uc19wZXJfYXJlYSkgJiYKKwkgICAgIHplcm9fZGlza19hcmVhKHBzLCBwcy0+Y3VycmVudF9hcmVhICsgMSkpCisJCXBzLT52YWxpZCA9IDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IHBzLT5jYWxsYmFja19jb3VudDsgaSsrKSB7Ci0JCQljYiA9IHBzLT5jYWxsYmFja3MgKyBpOwotCQkJY2ItPmNhbGxiYWNrKGNiLT5jb250ZXh0LCByID09IDAgPyAxIDogMCk7Ci0JCX0KKwkvKgorCSAqIENvbW1pdCBleGNlcHRpb25zIHRvIGRpc2suCisJICovCisJaWYgKHBzLT52YWxpZCAmJiBhcmVhX2lvKHBzLCBXUklURSkpCisJCXBzLT52YWxpZCA9IDA7CiAKLQkJcHMtPmNhbGxiYWNrX2NvdW50ID0gMDsKKwkvKgorCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgYXJlYSBpZiB0aGlzIG9uZSBpcyBmdWxsLgorCSAqLworCWlmIChwcy0+Y3VycmVudF9jb21taXR0ZWQgPT0gcHMtPmV4Y2VwdGlvbnNfcGVyX2FyZWEpIHsKKwkJcHMtPmN1cnJlbnRfY29tbWl0dGVkID0gMDsKKwkJcHMtPmN1cnJlbnRfYXJlYSsrOworCQl6ZXJvX21lbW9yeV9hcmVhKHBzKTsKIAl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcHMtPmNhbGxiYWNrX2NvdW50OyBpKyspIHsKKwkJY2IgPSBwcy0+Y2FsbGJhY2tzICsgaTsKKwkJY2ItPmNhbGxiYWNrKGNiLT5jb250ZXh0LCBwcy0+dmFsaWQpOworCX0KKworCXBzLT5jYWxsYmFja19jb3VudCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcnNpc3RlbnRfZHJvcChzdHJ1Y3QgZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCA0Nzg5YzQyLi4yZmQ2ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC01LDcgKzUsNyBAQAogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KIAotI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogCiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCmluZGV4IGRjYTQwMWQuLjc3N2M5NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYworKysgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKQEAgLTk4OCw5ICs5ODgsOSBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfbW9kZShzdHJ1Y3QgZG1faW9jdGwgKnBhcmFtKQorc3RhdGljIGlubGluZSBmbW9kZV90IGdldF9tb2RlKHN0cnVjdCBkbV9pb2N0bCAqcGFyYW0pCiB7Ci0JaW50IG1vZGUgPSBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEU7CisJZm1vZGVfdCBtb2RlID0gRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFOwogCiAJaWYgKHBhcmFtLT5mbGFncyAmIERNX1JFQURPTkxZX0ZMQUcpCiAJCW1vZGUgPSBGTU9ERV9SRUFEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1rY29weWQuYyBiL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMKaW5kZXggOTk2ODAyYi4uMzA3MzYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1rY29weWQuYworKysgYi9kcml2ZXJzL21kL2RtLWtjb3B5ZC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWtjb3B5ZC5oPgogCiAjaW5jbHVkZSAiZG0uaCIKQEAgLTI2OCw2ICsyNjksMTcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYy0+am9iX2xvY2ssIGZsYWdzKTsKIH0KIAorCitzdGF0aWMgdm9pZCBwdXNoX2hlYWQoc3RydWN0IGxpc3RfaGVhZCAqam9icywgc3RydWN0IGtjb3B5ZF9qb2IgKmpvYikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkbV9rY29weWRfY2xpZW50ICprYyA9IGpvYi0+a2M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgma2MtPmpvYl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmpvYi0+bGlzdCwgam9icyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2MtPmpvYl9sb2NrLCBmbGFncyk7Cit9CisKIC8qCiAgKiBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgcHJvY2VzcyAxIGl0ZW0gZnJvbSB0aGUgY29ycmVzcG9uZGluZwogICogam9iIGxpc3QuCkBAIC0zOTgsNyArNDEwLDcgQEAKIAkJCSAqIFdlIGNvdWxkbid0IHNlcnZpY2UgdGhpcyBqb2IgQVRNLCBzbwogCQkJICogcHVzaCB0aGlzIGpvYiBiYWNrIG9udG8gdGhlIGxpc3QuCiAJCQkgKi8KLQkJCXB1c2goam9icywgam9iKTsKKwkJCXB1c2hfaGVhZChqb2JzLCBqb2IpOwogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1saW5lYXIuYyBiL2RyaXZlcnMvbWQvZG0tbGluZWFyLmMKaW5kZXggNjQ0OWJjZC4uNDQwNDJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2RtLWxpbmVhci5jCkBAIC01LDEyICs1LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImRtLmgiCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJsaW5lYXIiCiAKQEAgLTExMCwyMCArMTEwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGluZWFyX2lvY3RsKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCitzdGF0aWMgaW50IGxpbmVhcl9pb2N0bChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBsaW5lYXJfYyAqbGMgPSAoc3RydWN0IGxpbmVhcl9jICopIHRpLT5wcml2YXRlOwotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBsYy0+ZGV2LT5iZGV2OwotCXN0cnVjdCBmaWxlIGZha2VfZmlsZSA9IHt9OwotCXN0cnVjdCBkZW50cnkgZmFrZV9kZW50cnkgPSB7fTsKLQotCWZha2VfZmlsZS5mX21vZGUgPSBsYy0+ZGV2LT5tb2RlOwotCWZha2VfZmlsZS5mX3BhdGguZGVudHJ5ID0gJmZha2VfZGVudHJ5OwotCWZha2VfZGVudHJ5LmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCXJldHVybiBibGtkZXZfZHJpdmVyX2lvY3RsKGJkZXYtPmJkX2lub2RlLCAmZmFrZV9maWxlLCBiZGV2LT5iZF9kaXNrLCBjbWQsIGFyZyk7CisJcmV0dXJuIF9fYmxrZGV2X2RyaXZlcl9pb2N0bChsYy0+ZGV2LT5iZGV2LCBsYy0+ZGV2LT5tb2RlLCBjbWQsIGFyZyk7CiB9CiAKIHN0YXRpYyBpbnQgbGluZWFyX21lcmdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhICpidm0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy5jIGIvZHJpdmVycy9tZC9kbS1sb2cuYwppbmRleCA1YjQ4NDc4Li5hOGMwZmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbS1pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWRpcnR5LWxvZy5oPgogCi0jaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UtbWFwcGVyLmg+CiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAiZGlydHkgcmVnaW9uIGxvZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IDEwMzMwNGMuLjQ4NDA3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTUsNyArNSw4IEBACiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogCi0jaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UtbWFwcGVyLmg+CisKICNpbmNsdWRlICJkbS1wYXRoLXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKICNpbmNsdWRlICJkbS1iaW8tcmVjb3JkLmgiCkBAIC04NDksNyArODUwLDcgQEAKIAlkbV9iaW9fcmVjb3JkKCZtcGlvLT5kZXRhaWxzLCBiaW8pOwogCiAJbWFwX2NvbnRleHQtPnB0ciA9IG1waW87Ci0JYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1QpOworCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCk7CiAJciA9IG1hcF9pbyhtLCBiaW8sIG1waW8sIDApOwogCWlmIChyIDwgMCB8fCByID09IERNX01BUElPX1JFUVVFVUUpCiAJCW1lbXBvb2xfZnJlZShtcGlvLCBtLT5tcGlvX3Bvb2wpOwpAQCAtMTM5NSwxOSArMTM5NiwxNSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IG11bHRpcGF0aF9pb2N0bChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorc3RhdGljIGludCBtdWx0aXBhdGhfaW9jdGwoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgbXVsdGlwYXRoICptID0gKHN0cnVjdCBtdWx0aXBhdGggKikgdGktPnByaXZhdGU7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IE5VTEw7CisJZm1vZGVfdCBtb2RlID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBmaWxlIGZha2VfZmlsZSA9IHt9OwotCXN0cnVjdCBkZW50cnkgZmFrZV9kZW50cnkgPSB7fTsKIAlpbnQgciA9IDA7CiAKLQlmYWtlX2ZpbGUuZl9wYXRoLmRlbnRyeSA9ICZmYWtlX2RlbnRyeTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZtLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIW0tPmN1cnJlbnRfcGdwYXRoKQpAQCAtMTQxNSw4ICsxNDEyLDcgQEAKIAogCWlmIChtLT5jdXJyZW50X3BncGF0aCkgewogCQliZGV2ID0gbS0+Y3VycmVudF9wZ3BhdGgtPnBhdGguZGV2LT5iZGV2OwotCQlmYWtlX2RlbnRyeS5kX2lub2RlID0gYmRldi0+YmRfaW5vZGU7Ci0JCWZha2VfZmlsZS5mX21vZGUgPSBtLT5jdXJyZW50X3BncGF0aC0+cGF0aC5kZXYtPm1vZGU7CisJCW1vZGUgPSBtLT5jdXJyZW50X3BncGF0aC0+cGF0aC5kZXYtPm1vZGU7CiAJfQogCiAJaWYgKG0tPnF1ZXVlX2lvKQpAQCAtMTQyNiw4ICsxNDIyLDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiByID8gOiBibGtkZXZfZHJpdmVyX2lvY3RsKGJkZXYtPmJkX2lub2RlLCAmZmFrZV9maWxlLAotCQkJCQkgYmRldi0+YmRfZGlzaywgY21kLCBhcmcpOworCXJldHVybiByID8gOiBfX2Jsa2Rldl9kcml2ZXJfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYyBiL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jCmluZGV4IGNhMWJiNjMuLjk2ZWEyMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jCkBAIC05LDcgKzksOCBAQAogICogUGF0aCBzZWxlY3RvciByZWdpc3RyYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgorCiAjaW5jbHVkZSAiZG0tcGF0aC1zZWxlY3Rvci5oIgogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDI5OTEzZTQuLjkyZGNjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTEsMzAgKzEsMzAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgU2lzdGluYSBTb2Z0d2FyZSBMaW1pdGVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgogICovCiAKLSNpbmNsdWRlICJkbS5oIgogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAjaW5jbHVkZSAiZG0tYmlvLXJlY29yZC5oIgogCi0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbS1pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWRpcnR5LWxvZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWtjb3B5ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtLXJlZ2lvbi1oYXNoLmg+CiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAicmFpZDEiCisKKyNkZWZpbmUgTUFYX1JFQ09WRVJZIDEJLyogTWF4aW11bSBudW1iZXIgb2YgcmVnaW9ucyByZWNvdmVyZWQgaW4gcGFyYWxsZWwuICovCiAjZGVmaW5lIERNX0lPX1BBR0VTIDY0CisjZGVmaW5lIERNX0tDT1BZRF9QQUdFUyA2NAogCiAjZGVmaW5lIERNX1JBSUQxX0hBTkRMRV9FUlJPUlMgMHgwMQogI2RlZmluZSBlcnJvcnNfaGFuZGxlZChwKQkoKHApLT5mZWF0dXJlcyAmIERNX1JBSUQxX0hBTkRMRV9FUlJPUlMpCkBAIC0zMiw4NyArMzIsNiBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKF9rbWlycm9yZF9yZWNvdmVyeV9zdG9wcGVkKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUmVnaW9uIGhhc2gKLSAqCi0gKiBUaGUgbWlycm9yIHNwbGl0cyBpdHNlbGYgdXAgaW50byBkaXNjcmV0ZSByZWdpb25zLiAgRWFjaAotICogcmVnaW9uIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBjbGVhbiwgZGlydHksCi0gKiBub3N5bmMuICBUaGVyZSBpcyBubyBuZWVkIHRvIHB1dCBjbGVhbiByZWdpb25zIGluIHRoZSBoYXNoLgotICoKLSAqIEluIGFkZGl0aW9uIHRvIGJlaW5nIHByZXNlbnQgaW4gdGhlIGhhc2ggdGFibGUgYSByZWdpb24gX21heV8KLSAqIGJlIHByZXNlbnQgb24gb25lIG9mIHRocmVlIGxpc3RzLgotICoKLSAqICAgY2xlYW5fcmVnaW9uczogUmVnaW9ucyBvbiB0aGlzIGxpc3QgaGF2ZSBubyBpbyBwZW5kaW5nIHRvCi0gKiAgIHRoZW0sIHRoZXkgYXJlIGluIHN5bmMsIHdlIGFyZSBubyBsb25nZXIgaW50ZXJlc3RlZCBpbiB0aGVtLAotICogICB0aGV5IGFyZSBkdWxsLiAgcmhfdXBkYXRlX3N0YXRlcygpIHdpbGwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUKLSAqICAgaGFzaCB0YWJsZS4KLSAqCi0gKiAgIHF1aWVzY2VkX3JlZ2lvbnM6IFRoZXNlIHJlZ2lvbnMgaGF2ZSBiZWVuIHNwdW4gZG93biwgcmVhZHkKLSAqICAgZm9yIHJlY292ZXJ5LiAgcmhfcmVjb3Zlcnlfc3RhcnQoKSB3aWxsIHJlbW92ZSByZWdpb25zIGZyb20KLSAqICAgdGhpcyBsaXN0IGFuZCBoYW5kIHRoZW0gdG8ga21pcnJvcmQsIHdoaWNoIHdpbGwgc2NoZWR1bGUgdGhlCi0gKiAgIHJlY292ZXJ5IGlvIHdpdGgga2NvcHlkLgotICoKLSAqICAgcmVjb3ZlcmVkX3JlZ2lvbnM6IFJlZ2lvbnMgdGhhdCBrY29weWQgaGFzIHN1Y2Nlc3NmdWxseQotICogICByZWNvdmVyZWQuICByaF91cGRhdGVfc3RhdGVzKCkgd2lsbCBub3cgc2NoZWR1bGUgYW55IGRlbGF5ZWQKLSAqICAgaW8sIHVwIHRoZSByZWNvdmVyeV9jb3VudCwgYW5kIHJlbW92ZSB0aGUgcmVnaW9uIGZyb20gdGhlCi0gKiAgIGhhc2guCi0gKgotICogVGhlcmUgYXJlIDIgbG9ja3M6Ci0gKiAgIEEgcncgc3BpbiBsb2NrICdoYXNoX2xvY2snIHByb3RlY3RzIGp1c3QgdGhlIGhhc2ggdGFibGUsCi0gKiAgIHRoaXMgaXMgbmV2ZXIgaGVsZCBpbiB3cml0ZSBtb2RlIGZyb20gaW50ZXJydXB0IGNvbnRleHQsCi0gKiAgIHdoaWNoIEkgYmVsaWV2ZSBtZWFucyB0aGF0IHdlIG9ubHkgaGF2ZSB0byBkaXNhYmxlIGlycXMgd2hlbgotICogICBkb2luZyBhIHdyaXRlIGxvY2suCi0gKgotICogICBBbiBvcmRpbmFyeSBzcGluIGxvY2sgJ3JlZ2lvbl9sb2NrJyB0aGF0IHByb3RlY3RzIHRoZSB0aHJlZQotICogICBsaXN0cyBpbiB0aGUgcmVnaW9uX2hhc2gsIHdpdGggdGhlICdzdGF0ZScsICdsaXN0JyBhbmQKLSAqICAgJ2Joc19kZWxheWVkJyBmaWVsZHMgb2YgdGhlIHJlZ2lvbnMuICBUaGlzIGlzIHVzZWQgZnJvbSBpcnEKLSAqICAgY29udGV4dCwgc28gYWxsIG90aGVyIHVzZXMgd2lsbCBoYXZlIHRvIHN1c3BlbmQgbG9jYWwgaXJxcy4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0cnVjdCBtaXJyb3Jfc2V0Owotc3RydWN0IHJlZ2lvbl9oYXNoIHsKLQlzdHJ1Y3QgbWlycm9yX3NldCAqbXM7Ci0JdWludDMyX3QgcmVnaW9uX3NpemU7Ci0JdW5zaWduZWQgcmVnaW9uX3NoaWZ0OwotCi0JLyogaG9sZHMgcGVyc2lzdGVudCByZWdpb24gc3RhdGUgKi8KLQlzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2c7Ci0KLQkvKiBoYXNoIHRhYmxlICovCi0Jcndsb2NrX3QgaGFzaF9sb2NrOwotCW1lbXBvb2xfdCAqcmVnaW9uX3Bvb2w7Ci0JdW5zaWduZWQgaW50IG1hc2s7Ci0JdW5zaWduZWQgaW50IG5yX2J1Y2tldHM7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqYnVja2V0czsKLQotCXNwaW5sb2NrX3QgcmVnaW9uX2xvY2s7Ci0JYXRvbWljX3QgcmVjb3ZlcnlfaW5fZmxpZ2h0OwotCXN0cnVjdCBzZW1hcGhvcmUgcmVjb3ZlcnlfY291bnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjbGVhbl9yZWdpb25zOwotCXN0cnVjdCBsaXN0X2hlYWQgcXVpZXNjZWRfcmVnaW9uczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlY292ZXJlZF9yZWdpb25zOwotCXN0cnVjdCBsaXN0X2hlYWQgZmFpbGVkX3JlY292ZXJlZF9yZWdpb25zOwotfTsKLQotZW51bSB7Ci0JUkhfQ0xFQU4sCi0JUkhfRElSVFksCi0JUkhfTk9TWU5DLAotCVJIX1JFQ09WRVJJTkcKLX07Ci0KLXN0cnVjdCByZWdpb24gewotCXN0cnVjdCByZWdpb25faGFzaCAqcmg7CS8qIEZJWE1FOiBjYW4gd2UgZ2V0IHJpZCBvZiB0aGlzID8gKi8KLQlyZWdpb25fdCBrZXk7Ci0JaW50IHN0YXRlOwotCi0Jc3RydWN0IGxpc3RfaGVhZCBoYXNoX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCi0JYXRvbWljX3QgcGVuZGluZzsKLQlzdHJ1Y3QgYmlvX2xpc3QgZGVsYXllZF9iaW9zOwotfTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBNaXJyb3Igc2V0IHN0cnVjdHVyZXMuCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBlbnVtIGRtX3JhaWQxX2Vycm9yIHsKQEAgLTEzMiw4ICs1MSw3IEBACiBzdHJ1Y3QgbWlycm9yX3NldCB7CiAJc3RydWN0IGRtX3RhcmdldCAqdGk7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCByZWdpb25faGFzaCByaDsKLQlzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqa2NvcHlkX2NsaWVudDsKKwogCXVpbnQ2NF90IGZlYXR1cmVzOwogCiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBwcm90ZWN0cyB0aGUgbGlzdHMgKi8KQEAgLTE0MSw2ICs1OSw4IEBACiAJc3RydWN0IGJpb19saXN0IHdyaXRlczsKIAlzdHJ1Y3QgYmlvX2xpc3QgZmFpbHVyZXM7CiAKKwlzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoOworCXN0cnVjdCBkbV9rY29weWRfY2xpZW50ICprY29weWRfY2xpZW50OwogCXN0cnVjdCBkbV9pb19jbGllbnQgKmlvX2NsaWVudDsKIAltZW1wb29sX3QgKnJlYWRfcmVjb3JkX3Bvb2w7CiAKQEAgLTE1OSwyNSArNzksMTQgQEAKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCB0cmlnZ2VyX2V2ZW50OwogCi0JdW5zaWduZWQgaW50IG5yX21pcnJvcnM7CisJdW5zaWduZWQgbnJfbWlycm9yczsKIAlzdHJ1Y3QgbWlycm9yIG1pcnJvclswXTsKIH07CiAKLS8qCi0gKiBDb252ZXJzaW9uIGZucwotICovCi1zdGF0aWMgaW5saW5lIHJlZ2lvbl90IGJpb190b19yZWdpb24oc3RydWN0IHJlZ2lvbl9oYXNoICpyaCwgc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIHZvaWQgd2FrZXVwX21pcnJvcmQodm9pZCAqY29udGV4dCkKIHsKLQlyZXR1cm4gKGJpby0+Ymlfc2VjdG9yIC0gcmgtPm1zLT50aS0+YmVnaW4pID4+IHJoLT5yZWdpb25fc2hpZnQ7Ci19CisJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gY29udGV4dDsKIAotc3RhdGljIGlubGluZSBzZWN0b3JfdCByZWdpb25fdG9fc2VjdG9yKHN0cnVjdCByZWdpb25faGFzaCAqcmgsIHJlZ2lvbl90IHJlZ2lvbikKLXsKLQlyZXR1cm4gcmVnaW9uIDw8IHJoLT5yZWdpb25fc2hpZnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdha2Uoc3RydWN0IG1pcnJvcl9zZXQgKm1zKQotewogCXF1ZXVlX3dvcmsobXMtPmttaXJyb3JkX3dxLCAmbXMtPmttaXJyb3JkX3dvcmspOwogfQogCkBAIC0xODYsNyArOTUsNyBAQAogCXN0cnVjdCBtaXJyb3Jfc2V0ICptcyA9IChzdHJ1Y3QgbWlycm9yX3NldCAqKSBkYXRhOwogCiAJY2xlYXJfYml0KDAsICZtcy0+dGltZXJfcGVuZGluZyk7Ci0Jd2FrZShtcyk7CisJd2FrZXVwX21pcnJvcmQobXMpOwogfQogCiBzdGF0aWMgdm9pZCBkZWxheWVkX3dha2Uoc3RydWN0IG1pcnJvcl9zZXQgKm1zKQpAQCAtMjAwLDQ3MyArMTA5LDM0IEBACiAJYWRkX3RpbWVyKCZtcy0+dGltZXIpOwogfQogCi0vKiBGSVhNRSBtb3ZlIHRoaXMgKi8KLXN0YXRpYyB2b2lkIHF1ZXVlX2JpbyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KTsKLQotI2RlZmluZSBNSU5fUkVHSU9OUyA2NAotI2RlZmluZSBNQVhfUkVDT1ZFUlkgMQotc3RhdGljIGludCByaF9pbml0KHN0cnVjdCByZWdpb25faGFzaCAqcmgsIHN0cnVjdCBtaXJyb3Jfc2V0ICptcywKLQkJICAgc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCB1aW50MzJfdCByZWdpb25fc2l6ZSwKLQkJICAgcmVnaW9uX3QgbnJfcmVnaW9ucykKK3N0YXRpYyB2b2lkIHdha2V1cF9hbGxfcmVjb3Zlcnlfd2FpdGVycyh2b2lkICpjb250ZXh0KQogewotCXVuc2lnbmVkIGludCBucl9idWNrZXRzLCBtYXhfYnVja2V0czsKLQlzaXplX3QgaTsKLQotCS8qCi0JICogQ2FsY3VsYXRlIGEgc3VpdGFibGUgbnVtYmVyIG9mIGJ1Y2tldHMgZm9yIG91ciBoYXNoCi0JICogdGFibGUuCi0JICovCi0JbWF4X2J1Y2tldHMgPSBucl9yZWdpb25zID4+IDY7Ci0JZm9yIChucl9idWNrZXRzID0gMTI4dTsgbnJfYnVja2V0cyA8IG1heF9idWNrZXRzOyBucl9idWNrZXRzIDw8PSAxKQotCQk7Ci0JbnJfYnVja2V0cyA+Pj0gMTsKLQotCXJoLT5tcyA9IG1zOwotCXJoLT5sb2cgPSBsb2c7Ci0JcmgtPnJlZ2lvbl9zaXplID0gcmVnaW9uX3NpemU7Ci0JcmgtPnJlZ2lvbl9zaGlmdCA9IGZmcyhyZWdpb25fc2l6ZSkgLSAxOwotCXJ3bG9ja19pbml0KCZyaC0+aGFzaF9sb2NrKTsKLQlyaC0+bWFzayA9IG5yX2J1Y2tldHMgLSAxOwotCXJoLT5ucl9idWNrZXRzID0gbnJfYnVja2V0czsKLQotCXJoLT5idWNrZXRzID0gdm1hbGxvYyhucl9idWNrZXRzICogc2l6ZW9mKCpyaC0+YnVja2V0cykpOwotCWlmICghcmgtPmJ1Y2tldHMpIHsKLQkJRE1FUlIoInVuYWJsZSB0byBhbGxvY2F0ZSByZWdpb24gaGFzaCBtZW1vcnkiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG5yX2J1Y2tldHM7IGkrKykKLQkJSU5JVF9MSVNUX0hFQUQocmgtPmJ1Y2tldHMgKyBpKTsKLQotCXNwaW5fbG9ja19pbml0KCZyaC0+cmVnaW9uX2xvY2spOwotCXNlbWFfaW5pdCgmcmgtPnJlY292ZXJ5X2NvdW50LCAwKTsKLQlhdG9taWNfc2V0KCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0LCAwKTsKLQlJTklUX0xJU1RfSEVBRCgmcmgtPmNsZWFuX3JlZ2lvbnMpOwotCUlOSVRfTElTVF9IRUFEKCZyaC0+cXVpZXNjZWRfcmVnaW9ucyk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJoLT5yZWNvdmVyZWRfcmVnaW9ucyk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJoLT5mYWlsZWRfcmVjb3ZlcmVkX3JlZ2lvbnMpOwotCi0JcmgtPnJlZ2lvbl9wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKE1JTl9SRUdJT05TLAotCQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCByZWdpb24pKTsKLQlpZiAoIXJoLT5yZWdpb25fcG9vbCkgewotCQl2ZnJlZShyaC0+YnVja2V0cyk7Ci0JCXJoLT5idWNrZXRzID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7CisJd2FrZV91cF9hbGwoJl9rbWlycm9yZF9yZWNvdmVyeV9zdG9wcGVkKTsKIH0KIAotc3RhdGljIHZvaWQgcmhfZXhpdChzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoKQotewotCXVuc2lnbmVkIGludCBoOwotCXN0cnVjdCByZWdpb24gKnJlZywgKm5yZWc7Ci0KLQlCVUdfT04oIWxpc3RfZW1wdHkoJnJoLT5xdWllc2NlZF9yZWdpb25zKSk7Ci0JZm9yIChoID0gMDsgaCA8IHJoLT5ucl9idWNrZXRzOyBoKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZywgbnJlZywgcmgtPmJ1Y2tldHMgKyBoLCBoYXNoX2xpc3QpIHsKLQkJCUJVR19PTihhdG9taWNfcmVhZCgmcmVnLT5wZW5kaW5nKSk7Ci0JCQltZW1wb29sX2ZyZWUocmVnLCByaC0+cmVnaW9uX3Bvb2wpOwotCQl9Ci0JfQotCi0JaWYgKHJoLT5sb2cpCi0JCWRtX2RpcnR5X2xvZ19kZXN0cm95KHJoLT5sb2cpOwotCWlmIChyaC0+cmVnaW9uX3Bvb2wpCi0JCW1lbXBvb2xfZGVzdHJveShyaC0+cmVnaW9uX3Bvb2wpOwotCXZmcmVlKHJoLT5idWNrZXRzKTsKLX0KLQotI2RlZmluZSBSSF9IQVNIX01VTFQgMjY1NDQzNTM4N1UKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmhfaGFzaChzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoLCByZWdpb25fdCByZWdpb24pCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBpbnQpICgocmVnaW9uICogUkhfSEFTSF9NVUxUKSA+PiAxMikgJiByaC0+bWFzazsKLX0KLQotc3RhdGljIHN0cnVjdCByZWdpb24gKl9fcmhfbG9va3VwKHN0cnVjdCByZWdpb25faGFzaCAqcmgsIHJlZ2lvbl90IHJlZ2lvbikKLXsKLQlzdHJ1Y3QgcmVnaW9uICpyZWc7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZWcsIHJoLT5idWNrZXRzICsgcmhfaGFzaChyaCwgcmVnaW9uKSwgaGFzaF9saXN0KQotCQlpZiAocmVnLT5rZXkgPT0gcmVnaW9uKQotCQkJcmV0dXJuIHJlZzsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBfX3JoX2luc2VydChzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoLCBzdHJ1Y3QgcmVnaW9uICpyZWcpCi17Ci0JdW5zaWduZWQgaW50IGggPSByaF9oYXNoKHJoLCByZWctPmtleSk7Ci0JbGlzdF9hZGQoJnJlZy0+aGFzaF9saXN0LCByaC0+YnVja2V0cyArIGgpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlZ2lvbiAqX19yaF9hbGxvYyhzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoLCByZWdpb25fdCByZWdpb24pCi17Ci0Jc3RydWN0IHJlZ2lvbiAqcmVnLCAqbnJlZzsKLQotCXJlYWRfdW5sb2NrKCZyaC0+aGFzaF9sb2NrKTsKLQlucmVnID0gbWVtcG9vbF9hbGxvYyhyaC0+cmVnaW9uX3Bvb2wsIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghbnJlZykpCi0JCW5yZWcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnaW9uKSwgR0ZQX05PSU8pOwotCW5yZWctPnN0YXRlID0gcmgtPmxvZy0+dHlwZS0+aW5fc3luYyhyaC0+bG9nLCByZWdpb24sIDEpID8KLQkJUkhfQ0xFQU4gOiBSSF9OT1NZTkM7Ci0JbnJlZy0+cmggPSByaDsKLQlucmVnLT5rZXkgPSByZWdpb247Ci0KLQlJTklUX0xJU1RfSEVBRCgmbnJlZy0+bGlzdCk7Ci0KLQlhdG9taWNfc2V0KCZucmVnLT5wZW5kaW5nLCAwKTsKLQliaW9fbGlzdF9pbml0KCZucmVnLT5kZWxheWVkX2Jpb3MpOwotCXdyaXRlX2xvY2tfaXJxKCZyaC0+aGFzaF9sb2NrKTsKLQotCXJlZyA9IF9fcmhfbG9va3VwKHJoLCByZWdpb24pOwotCWlmIChyZWcpCi0JCS8qIHdlIGxvc3QgdGhlIHJhY2UgKi8KLQkJbWVtcG9vbF9mcmVlKG5yZWcsIHJoLT5yZWdpb25fcG9vbCk7Ci0KLQllbHNlIHsKLQkJX19yaF9pbnNlcnQocmgsIG5yZWcpOwotCQlpZiAobnJlZy0+c3RhdGUgPT0gUkhfQ0xFQU4pIHsKLQkJCXNwaW5fbG9jaygmcmgtPnJlZ2lvbl9sb2NrKTsKLQkJCWxpc3RfYWRkKCZucmVnLT5saXN0LCAmcmgtPmNsZWFuX3JlZ2lvbnMpOwotCQkJc3Bpbl91bmxvY2soJnJoLT5yZWdpb25fbG9jayk7Ci0JCX0KLQkJcmVnID0gbnJlZzsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2lycSgmcmgtPmhhc2hfbG9jayk7Ci0JcmVhZF9sb2NrKCZyaC0+aGFzaF9sb2NrKTsKLQotCXJldHVybiByZWc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ2lvbiAqX19yaF9maW5kKHN0cnVjdCByZWdpb25faGFzaCAqcmgsIHJlZ2lvbl90IHJlZ2lvbikKLXsKLQlzdHJ1Y3QgcmVnaW9uICpyZWc7Ci0KLQlyZWcgPSBfX3JoX2xvb2t1cChyaCwgcmVnaW9uKTsKLQlpZiAoIXJlZykKLQkJcmVnID0gX19yaF9hbGxvYyhyaCwgcmVnaW9uKTsKLQotCXJldHVybiByZWc7Ci19Ci0KLXN0YXRpYyBpbnQgcmhfc3RhdGUoc3RydWN0IHJlZ2lvbl9oYXNoICpyaCwgcmVnaW9uX3QgcmVnaW9uLCBpbnQgbWF5X2Jsb2NrKQotewotCWludCByOwotCXN0cnVjdCByZWdpb24gKnJlZzsKLQotCXJlYWRfbG9jaygmcmgtPmhhc2hfbG9jayk7Ci0JcmVnID0gX19yaF9sb29rdXAocmgsIHJlZ2lvbik7Ci0JcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOwotCi0JaWYgKHJlZykKLQkJcmV0dXJuIHJlZy0+c3RhdGU7Ci0KLQkvKgotCSAqIFRoZSByZWdpb24gd2Fzbid0IGluIHRoZSBoYXNoLCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlCi0JICogZGlydHkgbG9nLgotCSAqLwotCXIgPSByaC0+bG9nLT50eXBlLT5pbl9zeW5jKHJoLT5sb2csIHJlZ2lvbiwgbWF5X2Jsb2NrKTsKLQotCS8qCi0JICogQW55IGVycm9yIGZyb20gdGhlIGRpcnR5IGxvZyAoZWcuIC1FV09VTERCTE9DSykgZ2V0cwotCSAqIHRha2VuIGFzIGEgUkhfTk9TWU5DCi0JICovCi0JcmV0dXJuIHIgPT0gMSA/IFJIX0NMRUFOIDogUkhfTk9TWU5DOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByaF9pbl9zeW5jKHN0cnVjdCByZWdpb25faGFzaCAqcmgsCi0JCQkgICAgIHJlZ2lvbl90IHJlZ2lvbiwgaW50IG1heV9ibG9jaykKLXsKLQlpbnQgc3RhdGUgPSByaF9zdGF0ZShyaCwgcmVnaW9uLCBtYXlfYmxvY2spOwotCXJldHVybiBzdGF0ZSA9PSBSSF9DTEVBTiB8fCBzdGF0ZSA9PSBSSF9ESVJUWTsKLX0KLQotc3RhdGljIHZvaWQgZGlzcGF0Y2hfYmlvcyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW9fbGlzdCAqYmlvX2xpc3QpCi17Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0Jd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoYmlvX2xpc3QpKSkgewotCQlxdWV1ZV9iaW8obXMsIGJpbywgV1JJVEUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY29tcGxldGVfcmVzeW5jX3dvcmsoc3RydWN0IHJlZ2lvbiAqcmVnLCBpbnQgc3VjY2VzcykKLXsKLQlzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoID0gcmVnLT5yaDsKLQotCXJoLT5sb2ctPnR5cGUtPnNldF9yZWdpb25fc3luYyhyaC0+bG9nLCByZWctPmtleSwgc3VjY2Vzcyk7Ci0KLQkvKgotCSAqIERpc3BhdGNoIHRoZSBiaW9zIGJlZm9yZSB3ZSBjYWxsICd3YWtlX3VwX2FsbCcuCi0JICogVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpZiB3ZSBhcmUgc3VzcGVuZGluZywKLQkgKiB3ZSB3YW50IHRvIGtub3cgdGhhdCByZWNvdmVyeSBpcyBjb21wbGV0ZSBhbmQKLQkgKiB0aGUgd29yayBxdWV1ZSBpcyBmbHVzaGVkLiAgSWYgd2Ugd2FrZV91cF9hbGwKLQkgKiBiZWZvcmUgd2UgZGlzcGF0Y2hfYmlvcyAocXVldWUgYmlvcyBhbmQgY2FsbCB3YWtlKCkpLAotCSAqIHRoZW4gd2UgcmlzayBzdXNwZW5kaW5nIGJlZm9yZSB0aGUgd29yayBxdWV1ZQotCSAqIGhhcyBiZWVuIHByb3Blcmx5IGZsdXNoZWQuCi0JICovCi0JZGlzcGF0Y2hfYmlvcyhyaC0+bXMsICZyZWctPmRlbGF5ZWRfYmlvcyk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpKQotCQl3YWtlX3VwX2FsbCgmX2ttaXJyb3JkX3JlY292ZXJ5X3N0b3BwZWQpOwotCXVwKCZyaC0+cmVjb3ZlcnlfY291bnQpOwotfQotCi1zdGF0aWMgdm9pZCByaF91cGRhdGVfc3RhdGVzKHN0cnVjdCByZWdpb25faGFzaCAqcmgpCi17Ci0Jc3RydWN0IHJlZ2lvbiAqcmVnLCAqbmV4dDsKLQotCUxJU1RfSEVBRChjbGVhbik7Ci0JTElTVF9IRUFEKHJlY292ZXJlZCk7Ci0JTElTVF9IRUFEKGZhaWxlZF9yZWNvdmVyZWQpOwotCi0JLyoKLQkgKiBRdWlja2x5IGdyYWIgdGhlIGxpc3RzLgotCSAqLwotCXdyaXRlX2xvY2tfaXJxKCZyaC0+aGFzaF9sb2NrKTsKLQlzcGluX2xvY2soJnJoLT5yZWdpb25fbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZyaC0+Y2xlYW5fcmVnaW9ucykpIHsKLQkJbGlzdF9zcGxpY2VfaW5pdCgmcmgtPmNsZWFuX3JlZ2lvbnMsICZjbGVhbik7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsICZjbGVhbiwgbGlzdCkKLQkJCWxpc3RfZGVsKCZyZWctPmhhc2hfbGlzdCk7Ci0JfQotCi0JaWYgKCFsaXN0X2VtcHR5KCZyaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpKSB7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJnJoLT5yZWNvdmVyZWRfcmVnaW9ucywgJnJlY292ZXJlZCk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVnLCAmcmVjb3ZlcmVkLCBsaXN0KQotCQkJbGlzdF9kZWwoJnJlZy0+aGFzaF9saXN0KTsKLQl9Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJnJoLT5mYWlsZWRfcmVjb3ZlcmVkX3JlZ2lvbnMpKSB7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJnJoLT5mYWlsZWRfcmVjb3ZlcmVkX3JlZ2lvbnMsCi0JCQkJICZmYWlsZWRfcmVjb3ZlcmVkKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgJmZhaWxlZF9yZWNvdmVyZWQsIGxpc3QpCi0JCQlsaXN0X2RlbCgmcmVnLT5oYXNoX2xpc3QpOwotCX0KLQotCXNwaW5fdW5sb2NrKCZyaC0+cmVnaW9uX2xvY2spOwotCXdyaXRlX3VubG9ja19pcnEoJnJoLT5oYXNoX2xvY2spOwotCi0JLyoKLQkgKiBBbGwgdGhlIHJlZ2lvbnMgb24gdGhlIHJlY292ZXJlZCBhbmQgY2xlYW4gbGlzdHMgaGF2ZQotCSAqIG5vdyBiZWVuIHB1bGxlZCBvdXQgb2YgdGhlIHN5c3RlbSwgc28gbm8gbmVlZCB0byBkbwotCSAqIGFueSBtb3JlIGxvY2tpbmcuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIChyZWcsIG5leHQsICZyZWNvdmVyZWQsIGxpc3QpIHsKLQkJcmgtPmxvZy0+dHlwZS0+Y2xlYXJfcmVnaW9uKHJoLT5sb2csIHJlZy0+a2V5KTsKLQkJY29tcGxldGVfcmVzeW5jX3dvcmsocmVnLCAxKTsKLQkJbWVtcG9vbF9mcmVlKHJlZywgcmgtPnJlZ2lvbl9wb29sKTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnLCBuZXh0LCAmZmFpbGVkX3JlY292ZXJlZCwgbGlzdCkgewotCQljb21wbGV0ZV9yZXN5bmNfd29yayhyZWcsIGVycm9yc19oYW5kbGVkKHJoLT5tcykgPyAwIDogMSk7Ci0JCW1lbXBvb2xfZnJlZShyZWcsIHJoLT5yZWdpb25fcG9vbCk7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZywgbmV4dCwgJmNsZWFuLCBsaXN0KSB7Ci0JCXJoLT5sb2ctPnR5cGUtPmNsZWFyX3JlZ2lvbihyaC0+bG9nLCByZWctPmtleSk7Ci0JCW1lbXBvb2xfZnJlZShyZWcsIHJoLT5yZWdpb25fcG9vbCk7Ci0JfQotCi0JcmgtPmxvZy0+dHlwZS0+Zmx1c2gocmgtPmxvZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJoX2luYyhzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoLCByZWdpb25fdCByZWdpb24pCi17Ci0Jc3RydWN0IHJlZ2lvbiAqcmVnOwotCi0JcmVhZF9sb2NrKCZyaC0+aGFzaF9sb2NrKTsKLQlyZWcgPSBfX3JoX2ZpbmQocmgsIHJlZ2lvbik7Ci0KLQlzcGluX2xvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOwotCWF0b21pY19pbmMoJnJlZy0+cGVuZGluZyk7Ci0KLQlpZiAocmVnLT5zdGF0ZSA9PSBSSF9DTEVBTikgewotCQlyZWctPnN0YXRlID0gUkhfRElSVFk7Ci0JCWxpc3RfZGVsX2luaXQoJnJlZy0+bGlzdCk7CS8qIHRha2Ugb2ZmIHRoZSBjbGVhbiBsaXN0ICovCi0JCXNwaW5fdW5sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKLQotCQlyaC0+bG9nLT50eXBlLT5tYXJrX3JlZ2lvbihyaC0+bG9nLCByZWctPmtleSk7Ci0JfSBlbHNlCi0JCXNwaW5fdW5sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKLQotCi0JcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCByaF9pbmNfcGVuZGluZyhzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoLCBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpCi17Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0JZm9yIChiaW8gPSBiaW9zLT5oZWFkOyBiaW87IGJpbyA9IGJpby0+YmlfbmV4dCkKLQkJcmhfaW5jKHJoLCBiaW9fdG9fcmVnaW9uKHJoLCBiaW8pKTsKLX0KLQotc3RhdGljIHZvaWQgcmhfZGVjKHN0cnVjdCByZWdpb25faGFzaCAqcmgsIHJlZ2lvbl90IHJlZ2lvbikKK3N0YXRpYyB2b2lkIHF1ZXVlX2JpbyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJlZ2lvbiAqcmVnOwogCWludCBzaG91bGRfd2FrZSA9IDA7CisJc3RydWN0IGJpb19saXN0ICpibDsKIAotCXJlYWRfbG9jaygmcmgtPmhhc2hfbG9jayk7Ci0JcmVnID0gX19yaF9sb29rdXAocmgsIHJlZ2lvbik7Ci0JcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJoLT5yZWdpb25fbG9jaywgZmxhZ3MpOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZWctPnBlbmRpbmcpKSB7Ci0JCS8qCi0JCSAqIFRoZXJlIGlzIG5vIHBlbmRpbmcgSS9PIGZvciB0aGlzIHJlZ2lvbi4KLQkJICogV2UgY2FuIG1vdmUgdGhlIHJlZ2lvbiB0byBjb3JyZXNwb25kaW5nIGxpc3QgZm9yIG5leHQgYWN0aW9uLgotCQkgKiBBdCB0aGlzIHBvaW50LCB0aGUgcmVnaW9uIGlzIG5vdCB5ZXQgY29ubmVjdGVkIHRvIGFueSBsaXN0LgotCQkgKgotCQkgKiBJZiB0aGUgc3RhdGUgaXMgUkhfTk9TWU5DLCB0aGUgcmVnaW9uIHNob3VsZCBiZSBrZXB0IG9mZgotCQkgKiBmcm9tIGNsZWFuIGxpc3QuCi0JCSAqIFRoZSBoYXNoIGVudHJ5IGZvciBSSF9OT1NZTkMgd2lsbCByZW1haW4gaW4gbWVtb3J5Ci0JCSAqIHVudGlsIHRoZSByZWdpb24gaXMgcmVjb3ZlcmVkIG9yIHRoZSBtYXAgaXMgcmVsb2FkZWQuCi0JCSAqLwotCi0JCS8qIGRvIG5vdGhpbmcgZm9yIFJIX05PU1lOQyAqLwotCQlpZiAocmVnLT5zdGF0ZSA9PSBSSF9SRUNPVkVSSU5HKSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZyZWctPmxpc3QsICZyaC0+cXVpZXNjZWRfcmVnaW9ucyk7Ci0JCX0gZWxzZSBpZiAocmVnLT5zdGF0ZSA9PSBSSF9ESVJUWSkgewotCQkJcmVnLT5zdGF0ZSA9IFJIX0NMRUFOOwotCQkJbGlzdF9hZGQoJnJlZy0+bGlzdCwgJnJoLT5jbGVhbl9yZWdpb25zKTsKLQkJfQotCQlzaG91bGRfd2FrZSA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJoLT5yZWdpb25fbG9jaywgZmxhZ3MpOworCWJsID0gKHJ3ID09IFdSSVRFKSA/ICZtcy0+d3JpdGVzIDogJm1zLT5yZWFkczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXMtPmxvY2ssIGZsYWdzKTsKKwlzaG91bGRfd2FrZSA9ICEoYmwtPmhlYWQpOworCWJpb19saXN0X2FkZChibCwgYmlvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcy0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHNob3VsZF93YWtlKQotCQl3YWtlKHJoLT5tcyk7CisJCXdha2V1cF9taXJyb3JkKG1zKTsKIH0KIAotLyoKLSAqIFN0YXJ0cyBxdWllc2NpbmcgYSByZWdpb24gaW4gcHJlcGFyYXRpb24gZm9yIHJlY292ZXJ5LgotICovCi1zdGF0aWMgaW50IF9fcmhfcmVjb3ZlcnlfcHJlcGFyZShzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoKQorc3RhdGljIHZvaWQgZGlzcGF0Y2hfYmlvcyh2b2lkICpjb250ZXh0LCBzdHJ1Y3QgYmlvX2xpc3QgKmJpb19saXN0KQogewotCWludCByOwotCXN0cnVjdCByZWdpb24gKnJlZzsKLQlyZWdpb25fdCByZWdpb247CisJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gY29udGV4dDsKKwlzdHJ1Y3QgYmlvICpiaW87CiAKLQkvKgotCSAqIEFzayB0aGUgZGlydHkgbG9nIHdoYXQncyBuZXh0LgotCSAqLwotCXIgPSByaC0+bG9nLT50eXBlLT5nZXRfcmVzeW5jX3dvcmsocmgtPmxvZywgJnJlZ2lvbik7Ci0JaWYgKHIgPD0gMCkKLQkJcmV0dXJuIHI7Ci0KLQkvKgotCSAqIEdldCB0aGlzIHJlZ2lvbiwgYW5kIHN0YXJ0IGl0IHF1aWVzY2luZyBieSBzZXR0aW5nIHRoZQotCSAqIHJlY292ZXJpbmcgZmxhZy4KLQkgKi8KLQlyZWFkX2xvY2soJnJoLT5oYXNoX2xvY2spOwotCXJlZyA9IF9fcmhfZmluZChyaCwgcmVnaW9uKTsKLQlyZWFkX3VubG9jaygmcmgtPmhhc2hfbG9jayk7Ci0KLQlzcGluX2xvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOwotCXJlZy0+c3RhdGUgPSBSSF9SRUNPVkVSSU5HOwotCi0JLyogQWxyZWFkeSBxdWllc2NlZCA/ICovCi0JaWYgKGF0b21pY19yZWFkKCZyZWctPnBlbmRpbmcpKQotCQlsaXN0X2RlbF9pbml0KCZyZWctPmxpc3QpOwotCWVsc2UKLQkJbGlzdF9tb3ZlKCZyZWctPmxpc3QsICZyaC0+cXVpZXNjZWRfcmVnaW9ucyk7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJoLT5yZWdpb25fbG9jayk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgcmhfcmVjb3ZlcnlfcHJlcGFyZShzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoKQotewotCS8qIEV4dHJhIHJlZmVyZW5jZSB0byBhdm9pZCByYWNlIHdpdGggcmhfc3RvcF9yZWNvdmVyeSAqLwotCWF0b21pY19pbmMoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpOwotCi0Jd2hpbGUgKCFkb3duX3RyeWxvY2soJnJoLT5yZWNvdmVyeV9jb3VudCkpIHsKLQkJYXRvbWljX2luYygmcmgtPnJlY292ZXJ5X2luX2ZsaWdodCk7Ci0JCWlmIChfX3JoX3JlY292ZXJ5X3ByZXBhcmUocmgpIDw9IDApIHsKLQkJCWF0b21pY19kZWMoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpOwotCQkJdXAoJnJoLT5yZWNvdmVyeV9jb3VudCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIERyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqLwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0KSkKLQkJd2FrZV91cF9hbGwoJl9rbWlycm9yZF9yZWNvdmVyeV9zdG9wcGVkKTsKLX0KLQotLyoKLSAqIFJldHVybnMgYW55IHF1aWVzY2VkIHJlZ2lvbnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVnaW9uICpyaF9yZWNvdmVyeV9zdGFydChzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoKQotewotCXN0cnVjdCByZWdpb24gKnJlZyA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmcmgtPnF1aWVzY2VkX3JlZ2lvbnMpKSB7Ci0JCXJlZyA9IGxpc3RfZW50cnkocmgtPnF1aWVzY2VkX3JlZ2lvbnMubmV4dCwKLQkJCQkgc3RydWN0IHJlZ2lvbiwgbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQoJnJlZy0+bGlzdCk7CS8qIHJlbW92ZSBmcm9tIHRoZSBxdWllc2NlZCBsaXN0ICovCi0JfQotCXNwaW5fdW5sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKLQotCXJldHVybiByZWc7Ci19Ci0KLXN0YXRpYyB2b2lkIHJoX3JlY292ZXJ5X2VuZChzdHJ1Y3QgcmVnaW9uICpyZWcsIGludCBzdWNjZXNzKQotewotCXN0cnVjdCByZWdpb25faGFzaCAqcmggPSByZWctPnJoOwotCi0Jc3Bpbl9sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKLQlpZiAoc3VjY2VzcykKLQkJbGlzdF9hZGQoJnJlZy0+bGlzdCwgJnJlZy0+cmgtPnJlY292ZXJlZF9yZWdpb25zKTsKLQllbHNlIHsKLQkJcmVnLT5zdGF0ZSA9IFJIX05PU1lOQzsKLQkJbGlzdF9hZGQoJnJlZy0+bGlzdCwgJnJlZy0+cmgtPmZhaWxlZF9yZWNvdmVyZWRfcmVnaW9ucyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKLQotCXdha2UocmgtPm1zKTsKLX0KLQotc3RhdGljIGludCByaF9mbHVzaChzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoKQotewotCXJldHVybiByaC0+bG9nLT50eXBlLT5mbHVzaChyaC0+bG9nKTsKLX0KLQotc3RhdGljIHZvaWQgcmhfZGVsYXkoc3RydWN0IHJlZ2lvbl9oYXNoICpyaCwgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCByZWdpb24gKnJlZzsKLQotCXJlYWRfbG9jaygmcmgtPmhhc2hfbG9jayk7Ci0JcmVnID0gX19yaF9maW5kKHJoLCBiaW9fdG9fcmVnaW9uKHJoLCBiaW8pKTsKLQliaW9fbGlzdF9hZGQoJnJlZy0+ZGVsYXllZF9iaW9zLCBiaW8pOwotCXJlYWRfdW5sb2NrKCZyaC0+aGFzaF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcmhfc3RvcF9yZWNvdmVyeShzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoKQotewotCWludCBpOwotCi0JLyogd2FpdCBmb3IgYW55IHJlY292ZXJpbmcgcmVnaW9ucyAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVDT1ZFUlk7IGkrKykKLQkJZG93bigmcmgtPnJlY292ZXJ5X2NvdW50KTsKLX0KLQotc3RhdGljIHZvaWQgcmhfc3RhcnRfcmVjb3Zlcnkoc3RydWN0IHJlZ2lvbl9oYXNoICpyaCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVDT1ZFUlk7IGkrKykKLQkJdXAoJnJoLT5yZWNvdmVyeV9jb3VudCk7Ci0KLQl3YWtlKHJoLT5tcyk7CisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoYmlvX2xpc3QpKSkKKwkJcXVldWVfYmlvKG1zLCBiaW8sIFdSSVRFKTsKIH0KIAogI2RlZmluZSBNSU5fUkVBRF9SRUNPUkRTIDIwCkBAIC03NzYsOCArMjQ2LDggQEAKIHN0YXRpYyB2b2lkIHJlY292ZXJ5X2NvbXBsZXRlKGludCByZWFkX2VyciwgdW5zaWduZWQgbG9uZyB3cml0ZV9lcnIsCiAJCQkgICAgICB2b2lkICpjb250ZXh0KQogewotCXN0cnVjdCByZWdpb24gKnJlZyA9IChzdHJ1Y3QgcmVnaW9uICopY29udGV4dDsKLQlzdHJ1Y3QgbWlycm9yX3NldCAqbXMgPSByZWctPnJoLT5tczsKKwlzdHJ1Y3QgZG1fcmVnaW9uICpyZWcgPSBjb250ZXh0OworCXN0cnVjdCBtaXJyb3Jfc2V0ICptcyA9IGRtX3JoX3JlZ2lvbl9jb250ZXh0KHJlZyk7CiAJaW50IG0sIGJpdCA9IDA7CiAKIAlpZiAocmVhZF9lcnIpIHsKQEAgLTgwMywzMSArMjczLDMzIEBACiAJCX0KIAl9CiAKLQlyaF9yZWNvdmVyeV9lbmQocmVnLCAhKHJlYWRfZXJyIHx8IHdyaXRlX2VycikpOworCWRtX3JoX3JlY292ZXJ5X2VuZChyZWcsICEocmVhZF9lcnIgfHwgd3JpdGVfZXJyKSk7CiB9CiAKLXN0YXRpYyBpbnQgcmVjb3ZlcihzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCByZWdpb24gKnJlZykKK3N0YXRpYyBpbnQgcmVjb3ZlcihzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBkbV9yZWdpb24gKnJlZykKIHsKIAlpbnQgcjsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpOwogCXN0cnVjdCBkbV9pb19yZWdpb24gZnJvbSwgdG9bRE1fS0NPUFlEX01BWF9SRUdJT05TXSwgKmRlc3Q7CiAJc3RydWN0IG1pcnJvciAqbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlyZWdpb25fdCBrZXkgPSBkbV9yaF9nZXRfcmVnaW9uX2tleShyZWcpOworCXNlY3Rvcl90IHJlZ2lvbl9zaXplID0gZG1fcmhfZ2V0X3JlZ2lvbl9zaXplKG1zLT5yaCk7CiAKIAkvKiBmaWxsIGluIHRoZSBzb3VyY2UgKi8KIAltID0gZ2V0X2RlZmF1bHRfbWlycm9yKG1zKTsKIAlmcm9tLmJkZXYgPSBtLT5kZXYtPmJkZXY7Ci0JZnJvbS5zZWN0b3IgPSBtLT5vZmZzZXQgKyByZWdpb25fdG9fc2VjdG9yKHJlZy0+cmgsIHJlZy0+a2V5KTsKLQlpZiAocmVnLT5rZXkgPT0gKG1zLT5ucl9yZWdpb25zIC0gMSkpIHsKKwlmcm9tLnNlY3RvciA9IG0tPm9mZnNldCArIGRtX3JoX3JlZ2lvbl90b19zZWN0b3IobXMtPnJoLCBrZXkpOworCWlmIChrZXkgPT0gKG1zLT5ucl9yZWdpb25zIC0gMSkpIHsKIAkJLyoKIAkJICogVGhlIGZpbmFsIHJlZ2lvbiBtYXkgYmUgc21hbGxlciB0aGFuCiAJCSAqIHJlZ2lvbl9zaXplLgogCQkgKi8KLQkJZnJvbS5jb3VudCA9IG1zLT50aS0+bGVuICYgKHJlZy0+cmgtPnJlZ2lvbl9zaXplIC0gMSk7CisJCWZyb20uY291bnQgPSBtcy0+dGktPmxlbiAmIChyZWdpb25fc2l6ZSAtIDEpOwogCQlpZiAoIWZyb20uY291bnQpCi0JCQlmcm9tLmNvdW50ID0gcmVnLT5yaC0+cmVnaW9uX3NpemU7CisJCQlmcm9tLmNvdW50ID0gcmVnaW9uX3NpemU7CiAJfSBlbHNlCi0JCWZyb20uY291bnQgPSByZWctPnJoLT5yZWdpb25fc2l6ZTsKKwkJZnJvbS5jb3VudCA9IHJlZ2lvbl9zaXplOwogCiAJLyogZmlsbCBpbiB0aGUgZGVzdGluYXRpb25zICovCiAJZm9yIChpID0gMCwgZGVzdCA9IHRvOyBpIDwgbXMtPm5yX21pcnJvcnM7IGkrKykgewpAQCAtODM2LDcgKzMwOCw3IEBACiAKIAkJbSA9IG1zLT5taXJyb3IgKyBpOwogCQlkZXN0LT5iZGV2ID0gbS0+ZGV2LT5iZGV2OwotCQlkZXN0LT5zZWN0b3IgPSBtLT5vZmZzZXQgKyByZWdpb25fdG9fc2VjdG9yKHJlZy0+cmgsIHJlZy0+a2V5KTsKKwkJZGVzdC0+c2VjdG9yID0gbS0+b2Zmc2V0ICsgZG1fcmhfcmVnaW9uX3RvX3NlY3Rvcihtcy0+cmgsIGtleSk7CiAJCWRlc3QtPmNvdW50ID0gZnJvbS5jb3VudDsKIAkJZGVzdCsrOwogCX0KQEAgLTg1MywyMiArMzI1LDIyIEBACiAKIHN0YXRpYyB2b2lkIGRvX3JlY292ZXJ5KHN0cnVjdCBtaXJyb3Jfc2V0ICptcykKIHsKKwlzdHJ1Y3QgZG1fcmVnaW9uICpyZWc7CisJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gZG1fcmhfZGlydHlfbG9nKG1zLT5yaCk7CiAJaW50IHI7Ci0Jc3RydWN0IHJlZ2lvbiAqcmVnOwotCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IG1zLT5yaC5sb2c7CiAKIAkvKgogCSAqIFN0YXJ0IHF1aWVzY2luZyBzb21lIHJlZ2lvbnMuCiAJICovCi0JcmhfcmVjb3ZlcnlfcHJlcGFyZSgmbXMtPnJoKTsKKwlkbV9yaF9yZWNvdmVyeV9wcmVwYXJlKG1zLT5yaCk7CiAKIAkvKgogCSAqIENvcHkgYW55IGFscmVhZHkgcXVpZXNjZWQgcmVnaW9ucy4KIAkgKi8KLQl3aGlsZSAoKHJlZyA9IHJoX3JlY292ZXJ5X3N0YXJ0KCZtcy0+cmgpKSkgeworCXdoaWxlICgocmVnID0gZG1fcmhfcmVjb3Zlcnlfc3RhcnQobXMtPnJoKSkpIHsKIAkJciA9IHJlY292ZXIobXMsIHJlZyk7CiAJCWlmIChyKQotCQkJcmhfcmVjb3ZlcnlfZW5kKHJlZywgMCk7CisJCQlkbV9yaF9yZWNvdmVyeV9lbmQocmVnLCAwKTsKIAl9CiAKIAkvKgpAQCAtOTA5LDkgKzM4MSwxMCBAQAogCiBzdGF0aWMgaW50IG1pcnJvcl9hdmFpbGFibGUoc3RydWN0IG1pcnJvcl9zZXQgKm1zLCBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JcmVnaW9uX3QgcmVnaW9uID0gYmlvX3RvX3JlZ2lvbigmbXMtPnJoLCBiaW8pOworCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IGRtX3JoX2RpcnR5X2xvZyhtcy0+cmgpOworCXJlZ2lvbl90IHJlZ2lvbiA9IGRtX3JoX2Jpb190b19yZWdpb24obXMtPnJoLCBiaW8pOwogCi0JaWYgKG1zLT5yaC5sb2ctPnR5cGUtPmluX3N5bmMobXMtPnJoLmxvZywgcmVnaW9uLCAwKSkKKwlpZiAobG9nLT50eXBlLT5pbl9zeW5jKGxvZywgcmVnaW9uLCAwKSkKIAkJcmV0dXJuIGNob29zZV9taXJyb3IobXMsICBiaW8tPmJpX3NlY3RvcikgPyAxIDogMDsKIAogCXJldHVybiAwOwpAQCAtOTg1LDcgKzQ1OCwxNCBAQAogCiAJbWFwX3JlZ2lvbigmaW8sIG0sIGJpbyk7CiAJYmlvX3NldF9tKGJpbywgbSk7Ci0JKHZvaWQpIGRtX2lvKCZpb19yZXEsIDEsICZpbywgTlVMTCk7CisJQlVHX09OKGRtX2lvKCZpb19yZXEsIDEsICZpbywgTlVMTCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZWdpb25faW5fc3luYyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHJlZ2lvbl90IHJlZ2lvbiwKKwkJCQkgaW50IG1heV9ibG9jaykKK3sKKwlpbnQgc3RhdGUgPSBkbV9yaF9nZXRfc3RhdGUobXMtPnJoLCByZWdpb24sIG1heV9ibG9jayk7CisJcmV0dXJuIHN0YXRlID09IERNX1JIX0NMRUFOIHx8IHN0YXRlID09IERNX1JIX0RJUlRZOwogfQogCiBzdGF0aWMgdm9pZCBkb19yZWFkcyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW9fbGlzdCAqcmVhZHMpCkBAIC05OTUsMTMgKzQ3NSwxMyBAQAogCXN0cnVjdCBtaXJyb3IgKm07CiAKIAl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChyZWFkcykpKSB7Ci0JCXJlZ2lvbiA9IGJpb190b19yZWdpb24oJm1zLT5yaCwgYmlvKTsKKwkJcmVnaW9uID0gZG1fcmhfYmlvX3RvX3JlZ2lvbihtcy0+cmgsIGJpbyk7CiAJCW0gPSBnZXRfZGVmYXVsdF9taXJyb3IobXMpOwogCiAJCS8qCiAJCSAqIFdlIGNhbiBvbmx5IHJlYWQgYmFsYW5jZSBpZiB0aGUgcmVnaW9uIGlzIGluIHN5bmMuCiAJCSAqLwotCQlpZiAobGlrZWx5KHJoX2luX3N5bmMoJm1zLT5yaCwgcmVnaW9uLCAxKSkpCisJCWlmIChsaWtlbHkocmVnaW9uX2luX3N5bmMobXMsIHJlZ2lvbiwgMSkpKQogCQkJbSA9IGNob29zZV9taXJyb3IobXMsIGJpby0+Ymlfc2VjdG9yKTsKIAkJZWxzZSBpZiAobSAmJiBhdG9taWNfcmVhZCgmbS0+ZXJyb3JfY291bnQpKQogCQkJbSA9IE5VTEw7CkBAIC0xMDI0LDU3ICs1MDQsNiBAQAogICogTk9TWU5DOglpbmNyZW1lbnQgcGVuZGluZywganVzdCB3cml0ZSB0byB0aGUgZGVmYXVsdCBtaXJyb3IKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogX19iaW9fbWFya19ub3N5bmMKLSAqIEBtcwotICogQGJpbwotICogQGRvbmUKLSAqIEBlcnJvcgotICoKLSAqIFRoZSBiaW8gd2FzIHdyaXR0ZW4gb24gc29tZSBtaXJyb3IocykgYnV0IGZhaWxlZCBvbiBvdGhlciBtaXJyb3IocykuCi0gKiBXZSBjYW4gc3VjY2Vzc2Z1bGx5IGVuZGlvIHRoZSBiaW8gYnV0IHNob3VsZCBhdm9pZCB0aGUgcmVnaW9uIGJlaW5nCi0gKiBtYXJrZWQgY2xlYW4gYnkgc2V0dGluZyB0aGUgc3RhdGUgUkhfTk9TWU5DLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgX25vdF8gc2FmZSBpbiBpbnRlcnJ1cHQgY29udGV4dCEKLSAqLwotc3RhdGljIHZvaWQgX19iaW9fbWFya19ub3N5bmMoc3RydWN0IG1pcnJvcl9zZXQgKm1zLAotCQkJICAgICAgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBkb25lLCBpbnQgZXJyb3IpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoID0gJm1zLT5yaDsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cgPSBtcy0+cmgubG9nOwotCXN0cnVjdCByZWdpb24gKnJlZzsKLQlyZWdpb25fdCByZWdpb24gPSBiaW9fdG9fcmVnaW9uKHJoLCBiaW8pOwotCWludCByZWNvdmVyaW5nID0gMDsKLQotCS8qIFdlIG11c3QgaW5mb3JtIHRoZSBsb2cgdGhhdCB0aGUgc3luYyBjb3VudCBoYXMgY2hhbmdlZC4gKi8KLQlsb2ctPnR5cGUtPnNldF9yZWdpb25fc3luYyhsb2csIHJlZ2lvbiwgMCk7Ci0JbXMtPmluX3N5bmMgPSAwOwotCi0JcmVhZF9sb2NrKCZyaC0+aGFzaF9sb2NrKTsKLQlyZWcgPSBfX3JoX2ZpbmQocmgsIHJlZ2lvbik7Ci0JcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOwotCi0JLyogcmVnaW9uIGhhc2ggZW50cnkgc2hvdWxkIGV4aXN0IGJlY2F1c2Ugd3JpdGUgd2FzIGluLWZsaWdodCAqLwotCUJVR19PTighcmVnKTsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnJlZy0+bGlzdCkpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJoLT5yZWdpb25fbG9jaywgZmxhZ3MpOwotCS8qCi0JICogUG9zc2libGUgY2FzZXM6Ci0JICogICAxKSBSSF9ESVJUWQotCSAqICAgMikgUkhfTk9TWU5DOiB3YXMgZGlydHksIG90aGVyIHByZWNlZWRpbmcgd3JpdGVzIGZhaWxlZAotCSAqICAgMykgUkhfUkVDT1ZFUklORzogZmx1c2hpbmcgcGVuZGluZyB3cml0ZXMKLQkgKiBFaXRoZXIgY2FzZSwgdGhlIHJlZ2lvbiBzaG91bGQgaGF2ZSBub3QgYmVlbiBjb25uZWN0ZWQgdG8gbGlzdC4KLQkgKi8KLQlyZWNvdmVyaW5nID0gKHJlZy0+c3RhdGUgPT0gUkhfUkVDT1ZFUklORyk7Ci0JcmVnLT5zdGF0ZSA9IFJIX05PU1lOQzsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnJlZy0+bGlzdCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJoLT5yZWdpb25fbG9jaywgZmxhZ3MpOwotCi0JYmlvX2VuZGlvKGJpbywgZXJyb3IpOwotCWlmIChyZWNvdmVyaW5nKQotCQljb21wbGV0ZV9yZXN5bmNfd29yayhyZWcsIDApOwotfQogCiBzdGF0aWMgdm9pZCB3cml0ZV9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGVycm9yLCB2b2lkICpjb250ZXh0KQogewpAQCAtMTExOSw3ICs1NDgsNyBAQAogCQliaW9fbGlzdF9hZGQoJm1zLT5mYWlsdXJlcywgYmlvKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXMtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHNob3VsZF93YWtlKQotCQkJd2FrZShtcyk7CisJCQl3YWtldXBfbWlycm9yZChtcyk7CiAJCXJldHVybjsKIAl9CiBvdXQ6CkBAIC0xMTQ5LDcgKzU3OCw3IEBACiAJICovCiAJYmlvX3NldF9tKGJpbywgZ2V0X2RlZmF1bHRfbWlycm9yKG1zKSk7CiAKLQkodm9pZCkgZG1faW8oJmlvX3JlcSwgbXMtPm5yX21pcnJvcnMsIGlvLCBOVUxMKTsKKwlCVUdfT04oZG1faW8oJmlvX3JlcSwgbXMtPm5yX21pcnJvcnMsIGlvLCBOVUxMKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3dyaXRlcyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW9fbGlzdCAqd3JpdGVzKQpAQCAtMTE2OSwxOCArNTk4LDE5IEBACiAJYmlvX2xpc3RfaW5pdCgmcmVjb3Zlcik7CiAKIAl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCh3cml0ZXMpKSkgewotCQlzdGF0ZSA9IHJoX3N0YXRlKCZtcy0+cmgsIGJpb190b19yZWdpb24oJm1zLT5yaCwgYmlvKSwgMSk7CisJCXN0YXRlID0gZG1fcmhfZ2V0X3N0YXRlKG1zLT5yaCwKKwkJCQkJZG1fcmhfYmlvX3RvX3JlZ2lvbihtcy0+cmgsIGJpbyksIDEpOwogCQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCWNhc2UgUkhfQ0xFQU46Ci0JCWNhc2UgUkhfRElSVFk6CisJCWNhc2UgRE1fUkhfQ0xFQU46CisJCWNhc2UgRE1fUkhfRElSVFk6CiAJCQl0aGlzX2xpc3QgPSAmc3luYzsKIAkJCWJyZWFrOwogCi0JCWNhc2UgUkhfTk9TWU5DOgorCQljYXNlIERNX1JIX05PU1lOQzoKIAkJCXRoaXNfbGlzdCA9ICZub3N5bmM7CiAJCQlicmVhazsKIAotCQljYXNlIFJIX1JFQ09WRVJJTkc6CisJCWNhc2UgRE1fUkhfUkVDT1ZFUklORzoKIAkJCXRoaXNfbGlzdCA9ICZyZWNvdmVyOwogCQkJYnJlYWs7CiAJCX0KQEAgLTExOTMsOSArNjIzLDkgQEAKIAkgKiBiZSB3cml0dGVuIHRvICh3cml0ZXMgdG8gcmVjb3ZlciByZWdpb25zIGFyZSBnb2luZyB0bwogCSAqIGJlIGRlbGF5ZWQpLgogCSAqLwotCXJoX2luY19wZW5kaW5nKCZtcy0+cmgsICZzeW5jKTsKLQlyaF9pbmNfcGVuZGluZygmbXMtPnJoLCAmbm9zeW5jKTsKLQltcy0+bG9nX2ZhaWx1cmUgPSByaF9mbHVzaCgmbXMtPnJoKSA/IDEgOiAwOworCWRtX3JoX2luY19wZW5kaW5nKG1zLT5yaCwgJnN5bmMpOworCWRtX3JoX2luY19wZW5kaW5nKG1zLT5yaCwgJm5vc3luYyk7CisJbXMtPmxvZ19mYWlsdXJlID0gZG1fcmhfZmx1c2gobXMtPnJoKSA/IDEgOiAwOwogCiAJLyoKIAkgKiBEaXNwYXRjaCBpby4KQEAgLTEyMDQsMTMgKzYzNCwxMyBAQAogCQlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7CiAJCWJpb19saXN0X21lcmdlKCZtcy0+ZmFpbHVyZXMsICZzeW5jKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZtcy0+bG9jayk7Ci0JCXdha2UobXMpOworCQl3YWtldXBfbWlycm9yZChtcyk7CiAJfSBlbHNlCiAJCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZzeW5jKSkpCiAJCQlkb193cml0ZShtcywgYmlvKTsKIAogCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZyZWNvdmVyKSkpCi0JCXJoX2RlbGF5KCZtcy0+cmgsIGJpbyk7CisJCWRtX3JoX2RlbGF5KG1zLT5yaCwgYmlvKTsKIAogCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZub3N5bmMpKSkgewogCQltYXBfYmlvKGdldF9kZWZhdWx0X21pcnJvcihtcyksIGJpbyk7CkBAIC0xMjI3LDcgKzY1Nyw4IEBACiAKIAlpZiAoIW1zLT5sb2dfZmFpbHVyZSkgewogCQl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChmYWlsdXJlcykpKQotCQkJX19iaW9fbWFya19ub3N5bmMobXMsIGJpbywgYmlvLT5iaV9zaXplLCAwKTsKKwkJCW1zLT5pbl9zeW5jID0gMDsKKwkJCWRtX3JoX21hcmtfbm9zeW5jKG1zLT5yaCwgYmlvLCBiaW8tPmJpX3NpemUsIDApOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjgwLDggKzcxMSw4IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBkb19taXJyb3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBtaXJyb3Jfc2V0ICptcyA9Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtaXJyb3Jfc2V0LAotCQkJCQkgICAga21pcnJvcmRfd29yayk7CisJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtaXJyb3Jfc2V0LAorCQkJCQkgICAgIGttaXJyb3JkX3dvcmspOwogCXN0cnVjdCBiaW9fbGlzdCByZWFkcywgd3JpdGVzLCBmYWlsdXJlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMjk0LDcgKzcyNSw3IEBACiAJYmlvX2xpc3RfaW5pdCgmbXMtPmZhaWx1cmVzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcy0+bG9jaywgZmxhZ3MpOwogCi0JcmhfdXBkYXRlX3N0YXRlcygmbXMtPnJoKTsKKwlkbV9yaF91cGRhdGVfc3RhdGVzKG1zLT5yaCwgZXJyb3JzX2hhbmRsZWQobXMpKTsKIAlkb19yZWNvdmVyeShtcyk7CiAJZG9fcmVhZHMobXMsICZyZWFkcyk7CiAJZG9fd3JpdGVzKG1zLCAmd3JpdGVzKTsKQEAgLTEzMDMsNyArNzM0LDYgQEAKIAlkbV90YWJsZV91bnBsdWdfYWxsKG1zLT50aS0+dGFibGUpOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRhcmdldCBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEzMTUsOSArNzQ1LDYgQEAKIAlzaXplX3QgbGVuOwogCXN0cnVjdCBtaXJyb3Jfc2V0ICptcyA9IE5VTEw7CiAKLQlpZiAoYXJyYXlfdG9vX2JpZyhzaXplb2YoKm1zKSwgc2l6ZW9mKG1zLT5taXJyb3JbMF0pLCBucl9taXJyb3JzKSkKLQkJcmV0dXJuIE5VTEw7Ci0KIAlsZW4gPSBzaXplb2YoKm1zKSArIChzaXplb2YobXMtPm1pcnJvclswXSkgKiBucl9taXJyb3JzKTsKIAogCW1zID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwpAQCAtMTM1Myw3ICs3ODAsMTEgQEAKICAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmIChyaF9pbml0KCZtcy0+cmgsIG1zLCBkbCwgcmVnaW9uX3NpemUsIG1zLT5ucl9yZWdpb25zKSkgeworCW1zLT5yaCA9IGRtX3JlZ2lvbl9oYXNoX2NyZWF0ZShtcywgZGlzcGF0Y2hfYmlvcywgd2FrZXVwX21pcnJvcmQsCisJCQkJICAgICAgIHdha2V1cF9hbGxfcmVjb3Zlcnlfd2FpdGVycywKKwkJCQkgICAgICAgbXMtPnRpLT5iZWdpbiwgTUFYX1JFQ09WRVJZLAorCQkJCSAgICAgICBkbCwgcmVnaW9uX3NpemUsIG1zLT5ucl9yZWdpb25zKTsKKwlpZiAoSVNfRVJSKG1zLT5yaCkpIHsKIAkJdGktPmVycm9yID0gIkVycm9yIGNyZWF0aW5nIGRpcnR5IHJlZ2lvbiBoYXNoIjsKIAkJZG1faW9fY2xpZW50X2Rlc3Ryb3kobXMtPmlvX2NsaWVudCk7CiAJCW1lbXBvb2xfZGVzdHJveShtcy0+cmVhZF9yZWNvcmRfcG9vbCk7CkBAIC0xMzcxLDcgKzgwMiw3IEBACiAJCWRtX3B1dF9kZXZpY2UodGksIG1zLT5taXJyb3JbbV0uZGV2KTsKIAogCWRtX2lvX2NsaWVudF9kZXN0cm95KG1zLT5pb19jbGllbnQpOwotCXJoX2V4aXQoJm1zLT5yaCk7CisJZG1fcmVnaW9uX2hhc2hfZGVzdHJveShtcy0+cmgpOwogCW1lbXBvb2xfZGVzdHJveShtcy0+cmVhZF9yZWNvcmRfcG9vbCk7CiAJa2ZyZWUobXMpOwogfQpAQCAtMTQxMSwxMCArODQyLDEwIEBACiAgKiBDcmVhdGUgZGlydHkgbG9nOiBsb2dfdHlwZSAjbG9nX3BhcmFtcyA8bG9nX3BhcmFtcz4KICAqLwogc3RhdGljIHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmNyZWF0ZV9kaXJ0eV9sb2coc3RydWN0IGRtX3RhcmdldCAqdGksCi0JCQkJCSAgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAotCQkJCQkgIHVuc2lnbmVkIGludCAqYXJnc191c2VkKQorCQkJCQkgICAgIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2LAorCQkJCQkgICAgIHVuc2lnbmVkICphcmdzX3VzZWQpCiB7Ci0JdW5zaWduZWQgaW50IHBhcmFtX2NvdW50OworCXVuc2lnbmVkIHBhcmFtX2NvdW50OwogCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmRsOwogCiAJaWYgKGFyZ2MgPCAyKSB7CkBAIC0xNTQ1LDcgKzk3Niw3IEBACiAJfQogCiAJdGktPnByaXZhdGUgPSBtczsKLSAJdGktPnNwbGl0X2lvID0gbXMtPnJoLnJlZ2lvbl9zaXplOworCXRpLT5zcGxpdF9pbyA9IGRtX3JoX2dldF9yZWdpb25fc2l6ZShtcy0+cmgpOwogCiAJbXMtPmttaXJyb3JkX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImttaXJyb3JkIik7CiAJaWYgKCFtcy0+a21pcnJvcmRfd3EpIHsKQEAgLTE1ODAsMTEgKzEwMTEsMTEgQEAKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAl9CiAKLQlyID0gZG1fa2NvcHlkX2NsaWVudF9jcmVhdGUoRE1fSU9fUEFHRVMsICZtcy0+a2NvcHlkX2NsaWVudCk7CisJciA9IGRtX2tjb3B5ZF9jbGllbnRfY3JlYXRlKERNX0tDT1BZRF9QQUdFUywgJm1zLT5rY29weWRfY2xpZW50KTsKIAlpZiAocikKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAotCXdha2UobXMpOworCXdha2V1cF9taXJyb3JkKG1zKTsKIAlyZXR1cm4gMDsKIAogZXJyX2Rlc3Ryb3lfd3E6CkBAIC0xNjA1LDIyICsxMDM2LDYgQEAKIAlmcmVlX2NvbnRleHQobXMsIHRpLCBtcy0+bnJfbWlycm9ycyk7CiB9CiAKLXN0YXRpYyB2b2lkIHF1ZXVlX2JpbyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHNob3VsZF93YWtlID0gMDsKLQlzdHJ1Y3QgYmlvX2xpc3QgKmJsOwotCi0JYmwgPSAocncgPT0gV1JJVEUpID8gJm1zLT53cml0ZXMgOiAmbXMtPnJlYWRzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcy0+bG9jaywgZmxhZ3MpOwotCXNob3VsZF93YWtlID0gIShibC0+aGVhZCk7Ci0JYmlvX2xpc3RfYWRkKGJsLCBiaW8pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoc2hvdWxkX3dha2UpCi0JCXdha2UobXMpOwotfQotCiAvKgogICogTWlycm9yIG1hcHBpbmcgZnVuY3Rpb24KICAqLwpAQCAtMTYzMSwxNiArMTA0NiwxNiBAQAogCXN0cnVjdCBtaXJyb3IgKm07CiAJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gdGktPnByaXZhdGU7CiAJc3RydWN0IGRtX3JhaWQxX3JlYWRfcmVjb3JkICpyZWFkX3JlY29yZCA9IE5VTEw7CisJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gZG1fcmhfZGlydHlfbG9nKG1zLT5yaCk7CiAKIAlpZiAocncgPT0gV1JJVEUpIHsKIAkJLyogU2F2ZSByZWdpb24gZm9yIG1pcnJvcl9lbmRfaW8oKSBoYW5kbGVyICovCi0JCW1hcF9jb250ZXh0LT5sbCA9IGJpb190b19yZWdpb24oJm1zLT5yaCwgYmlvKTsKKwkJbWFwX2NvbnRleHQtPmxsID0gZG1fcmhfYmlvX3RvX3JlZ2lvbihtcy0+cmgsIGJpbyk7CiAJCXF1ZXVlX2JpbyhtcywgYmlvLCBydyk7CiAJCXJldHVybiBETV9NQVBJT19TVUJNSVRURUQ7CiAJfQogCi0JciA9IG1zLT5yaC5sb2ctPnR5cGUtPmluX3N5bmMobXMtPnJoLmxvZywKLQkJCQkgICAgICBiaW9fdG9fcmVnaW9uKCZtcy0+cmgsIGJpbyksIDApOworCXIgPSBsb2ctPnR5cGUtPmluX3N5bmMobG9nLCBkbV9yaF9iaW9fdG9fcmVnaW9uKG1zLT5yaCwgYmlvKSwgMCk7CiAJaWYgKHIgPCAwICYmIHIgIT0gLUVXT1VMREJMT0NLKQogCQlyZXR1cm4gcjsKIApAQCAtMTY4OCw3ICsxMTAzLDcgQEAKIAkgKiBXZSBuZWVkIHRvIGRlYyBwZW5kaW5nIGlmIHRoaXMgd2FzIGEgd3JpdGUuCiAJICovCiAJaWYgKHJ3ID09IFdSSVRFKSB7Ci0JCXJoX2RlYygmbXMtPnJoLCBtYXBfY29udGV4dC0+bGwpOworCQlkbV9yaF9kZWMobXMtPnJoLCBtYXBfY29udGV4dC0+bGwpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCkBAIC0xNzQ0LDcgKzExNTksNyBAQAogc3RhdGljIHZvaWQgbWlycm9yX3ByZXN1c3BlbmQoc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7CiAJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gKHN0cnVjdCBtaXJyb3Jfc2V0ICopIHRpLT5wcml2YXRlOwotCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IG1zLT5yaC5sb2c7CisJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gZG1fcmhfZGlydHlfbG9nKG1zLT5yaCk7CiAKIAlhdG9taWNfc2V0KCZtcy0+c3VzcGVuZCwgMSk7CiAKQEAgLTE3NTIsMTAgKzExNjcsMTAgQEAKIAkgKiBXZSBtdXN0IGZpbmlzaCB1cCBhbGwgdGhlIHdvcmsgdGhhdCB3ZSd2ZQogCSAqIGdlbmVyYXRlZCAoaS5lLiByZWNvdmVyeSB3b3JrKS4KIAkgKi8KLQlyaF9zdG9wX3JlY292ZXJ5KCZtcy0+cmgpOworCWRtX3JoX3N0b3BfcmVjb3ZlcnkobXMtPnJoKTsKIAogCXdhaXRfZXZlbnQoX2ttaXJyb3JkX3JlY292ZXJ5X3N0b3BwZWQsCi0JCSAgICFhdG9taWNfcmVhZCgmbXMtPnJoLnJlY292ZXJ5X2luX2ZsaWdodCkpOworCQkgICAhZG1fcmhfcmVjb3ZlcnlfaW5fZmxpZ2h0KG1zLT5yaCkpOwogCiAJaWYgKGxvZy0+dHlwZS0+cHJlc3VzcGVuZCAmJiBsb2ctPnR5cGUtPnByZXN1c3BlbmQobG9nKSkKIAkJLyogRklYTUU6IG5lZWQgYmV0dGVyIGVycm9yIGhhbmRsaW5nICovCkBAIC0xNzczLDcgKzExODgsNyBAQAogc3RhdGljIHZvaWQgbWlycm9yX3Bvc3RzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQogewogCXN0cnVjdCBtaXJyb3Jfc2V0ICptcyA9IHRpLT5wcml2YXRlOwotCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IG1zLT5yaC5sb2c7CisJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gZG1fcmhfZGlydHlfbG9nKG1zLT5yaCk7CiAKIAlpZiAobG9nLT50eXBlLT5wb3N0c3VzcGVuZCAmJiBsb2ctPnR5cGUtPnBvc3RzdXNwZW5kKGxvZykpCiAJCS8qIEZJWE1FOiBuZWVkIGJldHRlciBlcnJvciBoYW5kbGluZyAqLwpAQCAtMTc4MywxMyArMTE5OCwxMyBAQAogc3RhdGljIHZvaWQgbWlycm9yX3Jlc3VtZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHsKIAlzdHJ1Y3QgbWlycm9yX3NldCAqbXMgPSB0aS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cgPSBtcy0+cmgubG9nOworCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IGRtX3JoX2RpcnR5X2xvZyhtcy0+cmgpOwogCiAJYXRvbWljX3NldCgmbXMtPnN1c3BlbmQsIDApOwogCWlmIChsb2ctPnR5cGUtPnJlc3VtZSAmJiBsb2ctPnR5cGUtPnJlc3VtZShsb2cpKQogCQkvKiBGSVhNRTogbmVlZCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgKi8KIAkJRE1XQVJOKCJsb2cgcmVzdW1lIGZhaWxlZCIpOwotCXJoX3N0YXJ0X3JlY292ZXJ5KCZtcy0+cmgpOworCWRtX3JoX3N0YXJ0X3JlY292ZXJ5KG1zLT5yaCk7CiB9CiAKIC8qCkBAIC0xODIxLDcgKzEyMzYsNyBAQAogewogCXVuc2lnbmVkIGludCBtLCBzeiA9IDA7CiAJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gKHN0cnVjdCBtaXJyb3Jfc2V0ICopIHRpLT5wcml2YXRlOwotCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IG1zLT5yaC5sb2c7CisJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gZG1fcmhfZGlydHlfbG9nKG1zLT5yaCk7CiAJY2hhciBidWZmZXJbbXMtPm5yX21pcnJvcnMgKyAxXTsKIAogCXN3aXRjaCAodHlwZSkgewpAQCAtMTgzNCwxNSArMTI0OSwxNSBAQAogCQlidWZmZXJbbV0gPSAnXDAnOwogCiAJCURNRU1JVCgiJWxsdS8lbGx1IDEgJXMgIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsb2ctPnR5cGUtPmdldF9zeW5jX2NvdW50KG1zLT5yaC5sb2cpLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxvZy0+dHlwZS0+Z2V0X3N5bmNfY291bnQobG9nKSwKIAkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltcy0+bnJfcmVnaW9ucywgYnVmZmVyKTsKIAotCQlzeiArPSBsb2ctPnR5cGUtPnN0YXR1cyhtcy0+cmgubG9nLCB0eXBlLCByZXN1bHQrc3osIG1heGxlbi1zeik7CisJCXN6ICs9IGxvZy0+dHlwZS0+c3RhdHVzKGxvZywgdHlwZSwgcmVzdWx0K3N6LCBtYXhsZW4tc3opOwogCiAJCWJyZWFrOwogCiAJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgotCQlzeiA9IGxvZy0+dHlwZS0+c3RhdHVzKG1zLT5yaC5sb2csIHR5cGUsIHJlc3VsdCwgbWF4bGVuKTsKKwkJc3ogPSBsb2ctPnR5cGUtPnN0YXR1cyhsb2csIHR5cGUsIHJlc3VsdCwgbWF4bGVuKTsKIAogCQlETUVNSVQoIiVkIiwgbXMtPm5yX21pcnJvcnMpOwogCQlmb3IgKG0gPSAwOyBtIDwgbXMtPm5yX21pcnJvcnM7IG0rKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYyBiL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWY4ZDlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jCkBAIC0wLDAgKzEsNzA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFNpc3RpbmEgU29mdHdhcmUgTGltaXRlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG0tZGlydHktbG9nLmg+CisjaW5jbHVkZSA8bGludXgvZG0tcmVnaW9uLWhhc2guaD4KKworI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKKworI2RlZmluZQlETV9NU0dfUFJFRklYCSJyZWdpb24gaGFzaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaW9uIGhhc2gKKyAqCisgKiBUaGUgbWlycm9yIHNwbGl0cyBpdHNlbGYgdXAgaW50byBkaXNjcmV0ZSByZWdpb25zLiAgRWFjaAorICogcmVnaW9uIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBjbGVhbiwgZGlydHksCisgKiBub3N5bmMuICBUaGVyZSBpcyBubyBuZWVkIHRvIHB1dCBjbGVhbiByZWdpb25zIGluIHRoZSBoYXNoLgorICoKKyAqIEluIGFkZGl0aW9uIHRvIGJlaW5nIHByZXNlbnQgaW4gdGhlIGhhc2ggdGFibGUgYSByZWdpb24gX21heV8KKyAqIGJlIHByZXNlbnQgb24gb25lIG9mIHRocmVlIGxpc3RzLgorICoKKyAqICAgY2xlYW5fcmVnaW9uczogUmVnaW9ucyBvbiB0aGlzIGxpc3QgaGF2ZSBubyBpbyBwZW5kaW5nIHRvCisgKiAgIHRoZW0sIHRoZXkgYXJlIGluIHN5bmMsIHdlIGFyZSBubyBsb25nZXIgaW50ZXJlc3RlZCBpbiB0aGVtLAorICogICB0aGV5IGFyZSBkdWxsLiAgZG1fcmhfdXBkYXRlX3N0YXRlcygpIHdpbGwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUKKyAqICAgaGFzaCB0YWJsZS4KKyAqCisgKiAgIHF1aWVzY2VkX3JlZ2lvbnM6IFRoZXNlIHJlZ2lvbnMgaGF2ZSBiZWVuIHNwdW4gZG93biwgcmVhZHkKKyAqICAgZm9yIHJlY292ZXJ5LiAgcmhfcmVjb3Zlcnlfc3RhcnQoKSB3aWxsIHJlbW92ZSByZWdpb25zIGZyb20KKyAqICAgdGhpcyBsaXN0IGFuZCBoYW5kIHRoZW0gdG8ga21pcnJvcmQsIHdoaWNoIHdpbGwgc2NoZWR1bGUgdGhlCisgKiAgIHJlY292ZXJ5IGlvIHdpdGgga2NvcHlkLgorICoKKyAqICAgcmVjb3ZlcmVkX3JlZ2lvbnM6IFJlZ2lvbnMgdGhhdCBrY29weWQgaGFzIHN1Y2Nlc3NmdWxseQorICogICByZWNvdmVyZWQuICBkbV9yaF91cGRhdGVfc3RhdGVzKCkgd2lsbCBub3cgc2NoZWR1bGUgYW55IGRlbGF5ZWQKKyAqICAgaW8sIHVwIHRoZSByZWNvdmVyeV9jb3VudCwgYW5kIHJlbW92ZSB0aGUgcmVnaW9uIGZyb20gdGhlCisgKiAgIGhhc2guCisgKgorICogVGhlcmUgYXJlIDIgbG9ja3M6CisgKiAgIEEgcncgc3BpbiBsb2NrICdoYXNoX2xvY2snIHByb3RlY3RzIGp1c3QgdGhlIGhhc2ggdGFibGUsCisgKiAgIHRoaXMgaXMgbmV2ZXIgaGVsZCBpbiB3cml0ZSBtb2RlIGZyb20gaW50ZXJydXB0IGNvbnRleHQsCisgKiAgIHdoaWNoIEkgYmVsaWV2ZSBtZWFucyB0aGF0IHdlIG9ubHkgaGF2ZSB0byBkaXNhYmxlIGlycXMgd2hlbgorICogICBkb2luZyBhIHdyaXRlIGxvY2suCisgKgorICogICBBbiBvcmRpbmFyeSBzcGluIGxvY2sgJ3JlZ2lvbl9sb2NrJyB0aGF0IHByb3RlY3RzIHRoZSB0aHJlZQorICogICBsaXN0cyBpbiB0aGUgcmVnaW9uX2hhc2gsIHdpdGggdGhlICdzdGF0ZScsICdsaXN0JyBhbmQKKyAqICAgJ2RlbGF5ZWRfYmlvcycgZmllbGRzIG9mIHRoZSByZWdpb25zLiAgVGhpcyBpcyB1c2VkIGZyb20gaXJxCisgKiAgIGNvbnRleHQsIHNvIGFsbCBvdGhlciB1c2VzIHdpbGwgaGF2ZSB0byBzdXNwZW5kIGxvY2FsIGlycXMuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggeworCXVpbnQzMl90IHJlZ2lvbl9zaXplOworCXVuc2lnbmVkIHJlZ2lvbl9zaGlmdDsKKworCS8qIGhvbGRzIHBlcnNpc3RlbnQgcmVnaW9uIHN0YXRlICovCisJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nOworCisJLyogaGFzaCB0YWJsZSAqLworCXJ3bG9ja190IGhhc2hfbG9jazsKKwltZW1wb29sX3QgKnJlZ2lvbl9wb29sOworCXVuc2lnbmVkIG1hc2s7CisJdW5zaWduZWQgbnJfYnVja2V0czsKKwl1bnNpZ25lZCBwcmltZTsKKwl1bnNpZ25lZCBzaGlmdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpidWNrZXRzOworCisJdW5zaWduZWQgbWF4X3JlY292ZXJ5OyAvKiBNYXggIyBvZiByZWdpb25zIHRvIHJlY292ZXIgaW4gcGFyYWxsZWwgKi8KKworCXNwaW5sb2NrX3QgcmVnaW9uX2xvY2s7CisJYXRvbWljX3QgcmVjb3ZlcnlfaW5fZmxpZ2h0OworCXN0cnVjdCBzZW1hcGhvcmUgcmVjb3ZlcnlfY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCBjbGVhbl9yZWdpb25zOworCXN0cnVjdCBsaXN0X2hlYWQgcXVpZXNjZWRfcmVnaW9uczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlY292ZXJlZF9yZWdpb25zOworCXN0cnVjdCBsaXN0X2hlYWQgZmFpbGVkX3JlY292ZXJlZF9yZWdpb25zOworCisJdm9pZCAqY29udGV4dDsKKwlzZWN0b3JfdCB0YXJnZXRfYmVnaW47CisKKwkvKiBDYWxsYmFjayBmdW5jdGlvbiB0byBzY2hlZHVsZSBiaW9zIHdyaXRlcyAqLworCXZvaWQgKCpkaXNwYXRjaF9iaW9zKSh2b2lkICpjb250ZXh0LCBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpOworCisJLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gd2FrZXVwIGNhbGxlcnMgd29ya2VyIHRocmVhZC4gKi8KKwl2b2lkICgqd2FrZXVwX3dvcmtlcnMpKHZvaWQgKmNvbnRleHQpOworCisJLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gd2FrZXVwIGNhbGxlcnMgcmVjb3Zlcnkgd2FpdGVycy4gKi8KKwl2b2lkICgqd2FrZXVwX2FsbF9yZWNvdmVyeV93YWl0ZXJzKSh2b2lkICpjb250ZXh0KTsKK307CisKK3N0cnVjdCBkbV9yZWdpb24geworCXN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmg7CS8qIEZJWE1FOiBjYW4gd2UgZ2V0IHJpZCBvZiB0aGlzID8gKi8KKwlyZWdpb25fdCBrZXk7CisJaW50IHN0YXRlOworCisJc3RydWN0IGxpc3RfaGVhZCBoYXNoX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJYXRvbWljX3QgcGVuZGluZzsKKwlzdHJ1Y3QgYmlvX2xpc3QgZGVsYXllZF9iaW9zOworfTsKKworLyoKKyAqIENvbnZlcnNpb24gZm5zCisgKi8KK3N0YXRpYyByZWdpb25fdCBkbV9yaF9zZWN0b3JfdG9fcmVnaW9uKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHNlY3Rvcl90IHNlY3RvcikKK3sKKwlyZXR1cm4gc2VjdG9yID4+IHJoLT5yZWdpb25fc2hpZnQ7Cit9CisKK3NlY3Rvcl90IGRtX3JoX3JlZ2lvbl90b19zZWN0b3Ioc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwgcmVnaW9uX3QgcmVnaW9uKQoreworCXJldHVybiByZWdpb24gPDwgcmgtPnJlZ2lvbl9zaGlmdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX3JlZ2lvbl90b19zZWN0b3IpOworCityZWdpb25fdCBkbV9yaF9iaW9fdG9fcmVnaW9uKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlyZXR1cm4gZG1fcmhfc2VjdG9yX3RvX3JlZ2lvbihyaCwgYmlvLT5iaV9zZWN0b3IgLSByaC0+dGFyZ2V0X2JlZ2luKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX2Jpb190b19yZWdpb24pOworCit2b2lkICpkbV9yaF9yZWdpb25fY29udGV4dChzdHJ1Y3QgZG1fcmVnaW9uICpyZWcpCit7CisJcmV0dXJuIHJlZy0+cmgtPmNvbnRleHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9yZWdpb25fY29udGV4dCk7CisKK3JlZ2lvbl90IGRtX3JoX2dldF9yZWdpb25fa2V5KHN0cnVjdCBkbV9yZWdpb24gKnJlZykKK3sKKwlyZXR1cm4gcmVnLT5rZXk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9nZXRfcmVnaW9uX2tleSk7CisKK3NlY3Rvcl90IGRtX3JoX2dldF9yZWdpb25fc2l6ZShzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKQoreworCXJldHVybiByaC0+cmVnaW9uX3NpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9nZXRfcmVnaW9uX3NpemUpOworCisvKgorICogRklYTUU6IHNoYWxsIHdlIHBhc3MgaW4gYSBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiBhbGwgdGhlc2UgYXJncyB0bworICogZG1fcmVnaW9uX2hhc2hfY3JlYXRlKCk/Pz8/CisgKi8KKyNkZWZpbmUgUkhfSEFTSF9NVUxUIDI2NTQ0MzUzODdVCisjZGVmaW5lIFJIX0hBU0hfU0hJRlQgMTIKKworI2RlZmluZSBNSU5fUkVHSU9OUyA2NAorc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpkbV9yZWdpb25faGFzaF9jcmVhdGUoCisJCXZvaWQgKmNvbnRleHQsIHZvaWQgKCpkaXNwYXRjaF9iaW9zKSh2b2lkICpjb250ZXh0LAorCQkJCQkJICAgICBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpLAorCQl2b2lkICgqd2FrZXVwX3dvcmtlcnMpKHZvaWQgKmNvbnRleHQpLAorCQl2b2lkICgqd2FrZXVwX2FsbF9yZWNvdmVyeV93YWl0ZXJzKSh2b2lkICpjb250ZXh0KSwKKwkJc2VjdG9yX3QgdGFyZ2V0X2JlZ2luLCB1bnNpZ25lZCBtYXhfcmVjb3ZlcnksCisJCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZywgdWludDMyX3QgcmVnaW9uX3NpemUsCisJCXJlZ2lvbl90IG5yX3JlZ2lvbnMpCit7CisJc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaDsKKwl1bnNpZ25lZCBucl9idWNrZXRzLCBtYXhfYnVja2V0czsKKwlzaXplX3QgaTsKKworCS8qCisJICogQ2FsY3VsYXRlIGEgc3VpdGFibGUgbnVtYmVyIG9mIGJ1Y2tldHMgZm9yIG91ciBoYXNoCisJICogdGFibGUuCisJICovCisJbWF4X2J1Y2tldHMgPSBucl9yZWdpb25zID4+IDY7CisJZm9yIChucl9idWNrZXRzID0gMTI4dTsgbnJfYnVja2V0cyA8IG1heF9idWNrZXRzOyBucl9idWNrZXRzIDw8PSAxKQorCQk7CisJbnJfYnVja2V0cyA+Pj0gMTsKKworCXJoID0ga21hbGxvYyhzaXplb2YoKnJoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyaCkgeworCQlETUVSUigidW5hYmxlIHRvIGFsbG9jYXRlIHJlZ2lvbiBoYXNoIG1lbW9yeSIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyaC0+Y29udGV4dCA9IGNvbnRleHQ7CisJcmgtPmRpc3BhdGNoX2Jpb3MgPSBkaXNwYXRjaF9iaW9zOworCXJoLT53YWtldXBfd29ya2VycyA9IHdha2V1cF93b3JrZXJzOworCXJoLT53YWtldXBfYWxsX3JlY292ZXJ5X3dhaXRlcnMgPSB3YWtldXBfYWxsX3JlY292ZXJ5X3dhaXRlcnM7CisJcmgtPnRhcmdldF9iZWdpbiA9IHRhcmdldF9iZWdpbjsKKwlyaC0+bWF4X3JlY292ZXJ5ID0gbWF4X3JlY292ZXJ5OworCXJoLT5sb2cgPSBsb2c7CisJcmgtPnJlZ2lvbl9zaXplID0gcmVnaW9uX3NpemU7CisJcmgtPnJlZ2lvbl9zaGlmdCA9IGZmcyhyZWdpb25fc2l6ZSkgLSAxOworCXJ3bG9ja19pbml0KCZyaC0+aGFzaF9sb2NrKTsKKwlyaC0+bWFzayA9IG5yX2J1Y2tldHMgLSAxOworCXJoLT5ucl9idWNrZXRzID0gbnJfYnVja2V0czsKKworCXJoLT5zaGlmdCA9IFJIX0hBU0hfU0hJRlQ7CisJcmgtPnByaW1lID0gUkhfSEFTSF9NVUxUOworCisJcmgtPmJ1Y2tldHMgPSB2bWFsbG9jKG5yX2J1Y2tldHMgKiBzaXplb2YoKnJoLT5idWNrZXRzKSk7CisJaWYgKCFyaC0+YnVja2V0cykgeworCQlETUVSUigidW5hYmxlIHRvIGFsbG9jYXRlIHJlZ2lvbiBoYXNoIGJ1Y2tldCBtZW1vcnkiKTsKKwkJa2ZyZWUocmgpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYnVja2V0czsgaSsrKQorCQlJTklUX0xJU1RfSEVBRChyaC0+YnVja2V0cyArIGkpOworCisJc3Bpbl9sb2NrX2luaXQoJnJoLT5yZWdpb25fbG9jayk7CisJc2VtYV9pbml0KCZyaC0+cmVjb3ZlcnlfY291bnQsIDApOworCWF0b21pY19zZXQoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQsIDApOworCUlOSVRfTElTVF9IRUFEKCZyaC0+Y2xlYW5fcmVnaW9ucyk7CisJSU5JVF9MSVNUX0hFQUQoJnJoLT5xdWllc2NlZF9yZWdpb25zKTsKKwlJTklUX0xJU1RfSEVBRCgmcmgtPnJlY292ZXJlZF9yZWdpb25zKTsKKwlJTklUX0xJU1RfSEVBRCgmcmgtPmZhaWxlZF9yZWNvdmVyZWRfcmVnaW9ucyk7CisKKwlyaC0+cmVnaW9uX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woTUlOX1JFR0lPTlMsCisJCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGRtX3JlZ2lvbikpOworCWlmICghcmgtPnJlZ2lvbl9wb29sKSB7CisJCXZmcmVlKHJoLT5idWNrZXRzKTsKKwkJa2ZyZWUocmgpOworCQlyaCA9IEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcmV0dXJuIHJoOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fcmVnaW9uX2hhc2hfY3JlYXRlKTsKKwordm9pZCBkbV9yZWdpb25faGFzaF9kZXN0cm95KHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgpCit7CisJdW5zaWduZWQgaDsKKwlzdHJ1Y3QgZG1fcmVnaW9uICpyZWcsICpucmVnOworCisJQlVHX09OKCFsaXN0X2VtcHR5KCZyaC0+cXVpZXNjZWRfcmVnaW9ucykpOworCWZvciAoaCA9IDA7IGggPCByaC0+bnJfYnVja2V0czsgaCsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWcsIG5yZWcsIHJoLT5idWNrZXRzICsgaCwKKwkJCQkJIGhhc2hfbGlzdCkgeworCQkJQlVHX09OKGF0b21pY19yZWFkKCZyZWctPnBlbmRpbmcpKTsKKwkJCW1lbXBvb2xfZnJlZShyZWcsIHJoLT5yZWdpb25fcG9vbCk7CisJCX0KKwl9CisKKwlpZiAocmgtPmxvZykKKwkJZG1fZGlydHlfbG9nX2Rlc3Ryb3kocmgtPmxvZyk7CisKKwlpZiAocmgtPnJlZ2lvbl9wb29sKQorCQltZW1wb29sX2Rlc3Ryb3kocmgtPnJlZ2lvbl9wb29sKTsKKworCXZmcmVlKHJoLT5idWNrZXRzKTsKKwlrZnJlZShyaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yZWdpb25faGFzaF9kZXN0cm95KTsKKworc3RydWN0IGRtX2RpcnR5X2xvZyAqZG1fcmhfZGlydHlfbG9nKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgpCit7CisJcmV0dXJuIHJoLT5sb2c7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9kaXJ0eV9sb2cpOworCitzdGF0aWMgdW5zaWduZWQgcmhfaGFzaChzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCByZWdpb25fdCByZWdpb24pCit7CisJcmV0dXJuICh1bnNpZ25lZCkgKChyZWdpb24gKiByaC0+cHJpbWUpID4+IHJoLT5zaGlmdCkgJiByaC0+bWFzazsKK30KKworc3RhdGljIHN0cnVjdCBkbV9yZWdpb24gKl9fcmhfbG9va3VwKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHJlZ2lvbl90IHJlZ2lvbikKK3sKKwlzdHJ1Y3QgZG1fcmVnaW9uICpyZWc7CisJc3RydWN0IGxpc3RfaGVhZCAqYnVja2V0ID0gcmgtPmJ1Y2tldHMgKyByaF9oYXNoKHJoLCByZWdpb24pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIGJ1Y2tldCwgaGFzaF9saXN0KQorCQlpZiAocmVnLT5rZXkgPT0gcmVnaW9uKQorCQkJcmV0dXJuIHJlZzsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX3JoX2luc2VydChzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCBzdHJ1Y3QgZG1fcmVnaW9uICpyZWcpCit7CisJbGlzdF9hZGQoJnJlZy0+aGFzaF9saXN0LCByaC0+YnVja2V0cyArIHJoX2hhc2gocmgsIHJlZy0+a2V5KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1fcmVnaW9uICpfX3JoX2FsbG9jKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHJlZ2lvbl90IHJlZ2lvbikKK3sKKwlzdHJ1Y3QgZG1fcmVnaW9uICpyZWcsICpucmVnOworCisJbnJlZyA9IG1lbXBvb2xfYWxsb2MocmgtPnJlZ2lvbl9wb29sLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIW5yZWcpKQorCQlucmVnID0ga21hbGxvYyhzaXplb2YoKm5yZWcpLCBHRlBfTk9JTyk7CisKKwlucmVnLT5zdGF0ZSA9IHJoLT5sb2ctPnR5cGUtPmluX3N5bmMocmgtPmxvZywgcmVnaW9uLCAxKSA/CisJCSAgICAgIERNX1JIX0NMRUFOIDogRE1fUkhfTk9TWU5DOworCW5yZWctPnJoID0gcmg7CisJbnJlZy0+a2V5ID0gcmVnaW9uOworCUlOSVRfTElTVF9IRUFEKCZucmVnLT5saXN0KTsKKwlhdG9taWNfc2V0KCZucmVnLT5wZW5kaW5nLCAwKTsKKwliaW9fbGlzdF9pbml0KCZucmVnLT5kZWxheWVkX2Jpb3MpOworCisJd3JpdGVfbG9ja19pcnEoJnJoLT5oYXNoX2xvY2spOworCXJlZyA9IF9fcmhfbG9va3VwKHJoLCByZWdpb24pOworCWlmIChyZWcpCisJCS8qIFdlIGxvc3QgdGhlIHJhY2UuICovCisJCW1lbXBvb2xfZnJlZShucmVnLCByaC0+cmVnaW9uX3Bvb2wpOworCWVsc2UgeworCQlfX3JoX2luc2VydChyaCwgbnJlZyk7CisJCWlmIChucmVnLT5zdGF0ZSA9PSBETV9SSF9DTEVBTikgeworCQkJc3Bpbl9sb2NrKCZyaC0+cmVnaW9uX2xvY2spOworCQkJbGlzdF9hZGQoJm5yZWctPmxpc3QsICZyaC0+Y2xlYW5fcmVnaW9ucyk7CisJCQlzcGluX3VubG9jaygmcmgtPnJlZ2lvbl9sb2NrKTsKKwkJfQorCisJCXJlZyA9IG5yZWc7CisJfQorCXdyaXRlX3VubG9ja19pcnEoJnJoLT5oYXNoX2xvY2spOworCisJcmV0dXJuIHJlZzsKK30KKworc3RhdGljIHN0cnVjdCBkbV9yZWdpb24gKl9fcmhfZmluZChzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCByZWdpb25fdCByZWdpb24pCit7CisJc3RydWN0IGRtX3JlZ2lvbiAqcmVnOworCisJcmVnID0gX19yaF9sb29rdXAocmgsIHJlZ2lvbik7CisJaWYgKCFyZWcpIHsKKwkJcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOworCQlyZWcgPSBfX3JoX2FsbG9jKHJoLCByZWdpb24pOworCQlyZWFkX2xvY2soJnJoLT5oYXNoX2xvY2spOworCX0KKworCXJldHVybiByZWc7Cit9CisKK2ludCBkbV9yaF9nZXRfc3RhdGUoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwgcmVnaW9uX3QgcmVnaW9uLCBpbnQgbWF5X2Jsb2NrKQoreworCWludCByOworCXN0cnVjdCBkbV9yZWdpb24gKnJlZzsKKworCXJlYWRfbG9jaygmcmgtPmhhc2hfbG9jayk7CisJcmVnID0gX19yaF9sb29rdXAocmgsIHJlZ2lvbik7CisJcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOworCisJaWYgKHJlZykKKwkJcmV0dXJuIHJlZy0+c3RhdGU7CisKKwkvKgorCSAqIFRoZSByZWdpb24gd2Fzbid0IGluIHRoZSBoYXNoLCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlCisJICogZGlydHkgbG9nLgorCSAqLworCXIgPSByaC0+bG9nLT50eXBlLT5pbl9zeW5jKHJoLT5sb2csIHJlZ2lvbiwgbWF5X2Jsb2NrKTsKKworCS8qCisJICogQW55IGVycm9yIGZyb20gdGhlIGRpcnR5IGxvZyAoZWcuIC1FV09VTERCTE9DSykgZ2V0cworCSAqIHRha2VuIGFzIGEgRE1fUkhfTk9TWU5DCisJICovCisJcmV0dXJuIHIgPT0gMSA/IERNX1JIX0NMRUFOIDogRE1fUkhfTk9TWU5DOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fcmhfZ2V0X3N0YXRlKTsKKworc3RhdGljIHZvaWQgY29tcGxldGVfcmVzeW5jX3dvcmsoc3RydWN0IGRtX3JlZ2lvbiAqcmVnLCBpbnQgc3VjY2VzcykKK3sKKwlzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoID0gcmVnLT5yaDsKKworCXJoLT5sb2ctPnR5cGUtPnNldF9yZWdpb25fc3luYyhyaC0+bG9nLCByZWctPmtleSwgc3VjY2Vzcyk7CisKKwkvKgorCSAqIERpc3BhdGNoIHRoZSBiaW9zIGJlZm9yZSB3ZSBjYWxsICd3YWtlX3VwX2FsbCcuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpZiB3ZSBhcmUgc3VzcGVuZGluZywKKwkgKiB3ZSB3YW50IHRvIGtub3cgdGhhdCByZWNvdmVyeSBpcyBjb21wbGV0ZSBhbmQKKwkgKiB0aGUgd29yayBxdWV1ZSBpcyBmbHVzaGVkLiAgSWYgd2Ugd2FrZV91cF9hbGwKKwkgKiBiZWZvcmUgd2UgZGlzcGF0Y2hfYmlvcyAocXVldWUgYmlvcyBhbmQgY2FsbCB3YWtlKCkpLAorCSAqIHRoZW4gd2UgcmlzayBzdXNwZW5kaW5nIGJlZm9yZSB0aGUgd29yayBxdWV1ZQorCSAqIGhhcyBiZWVuIHByb3Blcmx5IGZsdXNoZWQuCisJICovCisJcmgtPmRpc3BhdGNoX2Jpb3MocmgtPmNvbnRleHQsICZyZWctPmRlbGF5ZWRfYmlvcyk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpKQorCQlyaC0+d2FrZXVwX2FsbF9yZWNvdmVyeV93YWl0ZXJzKHJoLT5jb250ZXh0KTsKKwl1cCgmcmgtPnJlY292ZXJ5X2NvdW50KTsKK30KKworLyogZG1fcmhfbWFya19ub3N5bmMKKyAqIEBtcworICogQGJpbworICogQGRvbmUKKyAqIEBlcnJvcgorICoKKyAqIFRoZSBiaW8gd2FzIHdyaXR0ZW4gb24gc29tZSBtaXJyb3IocykgYnV0IGZhaWxlZCBvbiBvdGhlciBtaXJyb3IocykuCisgKiBXZSBjYW4gc3VjY2Vzc2Z1bGx5IGVuZGlvIHRoZSBiaW8gYnV0IHNob3VsZCBhdm9pZCB0aGUgcmVnaW9uIGJlaW5nCisgKiBtYXJrZWQgY2xlYW4gYnkgc2V0dGluZyB0aGUgc3RhdGUgRE1fUkhfTk9TWU5DLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgX25vdF8gc2FmZSBpbiBpbnRlcnJ1cHQgY29udGV4dCEKKyAqLwordm9pZCBkbV9yaF9tYXJrX25vc3luYyhzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLAorCQkgICAgICAgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBkb25lLCBpbnQgZXJyb3IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cgPSByaC0+bG9nOworCXN0cnVjdCBkbV9yZWdpb24gKnJlZzsKKwlyZWdpb25fdCByZWdpb24gPSBkbV9yaF9iaW9fdG9fcmVnaW9uKHJoLCBiaW8pOworCWludCByZWNvdmVyaW5nID0gMDsKKworCS8qIFdlIG11c3QgaW5mb3JtIHRoZSBsb2cgdGhhdCB0aGUgc3luYyBjb3VudCBoYXMgY2hhbmdlZC4gKi8KKwlsb2ctPnR5cGUtPnNldF9yZWdpb25fc3luYyhsb2csIHJlZ2lvbiwgMCk7CisKKwlyZWFkX2xvY2soJnJoLT5oYXNoX2xvY2spOworCXJlZyA9IF9fcmhfZmluZChyaCwgcmVnaW9uKTsKKwlyZWFkX3VubG9jaygmcmgtPmhhc2hfbG9jayk7CisKKwkvKiByZWdpb24gaGFzaCBlbnRyeSBzaG91bGQgZXhpc3QgYmVjYXVzZSB3cml0ZSB3YXMgaW4tZmxpZ2h0ICovCisJQlVHX09OKCFyZWcpOworCUJVR19PTighbGlzdF9lbXB0eSgmcmVnLT5saXN0KSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmgtPnJlZ2lvbl9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBQb3NzaWJsZSBjYXNlczoKKwkgKiAgIDEpIERNX1JIX0RJUlRZCisJICogICAyKSBETV9SSF9OT1NZTkM6IHdhcyBkaXJ0eSwgb3RoZXIgcHJlY2VlZGluZyB3cml0ZXMgZmFpbGVkCisJICogICAzKSBETV9SSF9SRUNPVkVSSU5HOiBmbHVzaGluZyBwZW5kaW5nIHdyaXRlcworCSAqIEVpdGhlciBjYXNlLCB0aGUgcmVnaW9uIHNob3VsZCBoYXZlIG5vdCBiZWVuIGNvbm5lY3RlZCB0byBsaXN0LgorCSAqLworCXJlY292ZXJpbmcgPSAocmVnLT5zdGF0ZSA9PSBETV9SSF9SRUNPVkVSSU5HKTsKKwlyZWctPnN0YXRlID0gRE1fUkhfTk9TWU5DOworCUJVR19PTighbGlzdF9lbXB0eSgmcmVnLT5saXN0KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmgtPnJlZ2lvbl9sb2NrLCBmbGFncyk7CisKKwliaW9fZW5kaW8oYmlvLCBlcnJvcik7CisJaWYgKHJlY292ZXJpbmcpCisJCWNvbXBsZXRlX3Jlc3luY193b3JrKHJlZywgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9tYXJrX25vc3luYyk7CisKK3ZvaWQgZG1fcmhfdXBkYXRlX3N0YXRlcyhzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCBpbnQgZXJyb3JzX2hhbmRsZWQpCit7CisJc3RydWN0IGRtX3JlZ2lvbiAqcmVnLCAqbmV4dDsKKworCUxJU1RfSEVBRChjbGVhbik7CisJTElTVF9IRUFEKHJlY292ZXJlZCk7CisJTElTVF9IRUFEKGZhaWxlZF9yZWNvdmVyZWQpOworCisJLyoKKwkgKiBRdWlja2x5IGdyYWIgdGhlIGxpc3RzLgorCSAqLworCXdyaXRlX2xvY2tfaXJxKCZyaC0+aGFzaF9sb2NrKTsKKwlzcGluX2xvY2soJnJoLT5yZWdpb25fbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZyaC0+Y2xlYW5fcmVnaW9ucykpIHsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcmgtPmNsZWFuX3JlZ2lvbnMsICZjbGVhbik7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsICZjbGVhbiwgbGlzdCkKKwkJCWxpc3RfZGVsKCZyZWctPmhhc2hfbGlzdCk7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZyaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpKSB7CisJCWxpc3Rfc3BsaWNlX2luaXQoJnJoLT5yZWNvdmVyZWRfcmVnaW9ucywgJnJlY292ZXJlZCk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsICZyZWNvdmVyZWQsIGxpc3QpCisJCQlsaXN0X2RlbCgmcmVnLT5oYXNoX2xpc3QpOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmcmgtPmZhaWxlZF9yZWNvdmVyZWRfcmVnaW9ucykpIHsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcmgtPmZhaWxlZF9yZWNvdmVyZWRfcmVnaW9ucywKKwkJCQkgJmZhaWxlZF9yZWNvdmVyZWQpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnLCAmZmFpbGVkX3JlY292ZXJlZCwgbGlzdCkKKwkJCWxpc3RfZGVsKCZyZWctPmhhc2hfbGlzdCk7CisJfQorCisJc3Bpbl91bmxvY2soJnJoLT5yZWdpb25fbG9jayk7CisJd3JpdGVfdW5sb2NrX2lycSgmcmgtPmhhc2hfbG9jayk7CisKKwkvKgorCSAqIEFsbCB0aGUgcmVnaW9ucyBvbiB0aGUgcmVjb3ZlcmVkIGFuZCBjbGVhbiBsaXN0cyBoYXZlCisJICogbm93IGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgc3lzdGVtLCBzbyBubyBuZWVkIHRvIGRvCisJICogYW55IG1vcmUgbG9ja2luZy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnLCBuZXh0LCAmcmVjb3ZlcmVkLCBsaXN0KSB7CisJCXJoLT5sb2ctPnR5cGUtPmNsZWFyX3JlZ2lvbihyaC0+bG9nLCByZWctPmtleSk7CisJCWNvbXBsZXRlX3Jlc3luY193b3JrKHJlZywgMSk7CisJCW1lbXBvb2xfZnJlZShyZWcsIHJoLT5yZWdpb25fcG9vbCk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZywgbmV4dCwgJmZhaWxlZF9yZWNvdmVyZWQsIGxpc3QpIHsKKwkJY29tcGxldGVfcmVzeW5jX3dvcmsocmVnLCBlcnJvcnNfaGFuZGxlZCA/IDAgOiAxKTsKKwkJbWVtcG9vbF9mcmVlKHJlZywgcmgtPnJlZ2lvbl9wb29sKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnLCBuZXh0LCAmY2xlYW4sIGxpc3QpIHsKKwkJcmgtPmxvZy0+dHlwZS0+Y2xlYXJfcmVnaW9uKHJoLT5sb2csIHJlZy0+a2V5KTsKKwkJbWVtcG9vbF9mcmVlKHJlZywgcmgtPnJlZ2lvbl9wb29sKTsKKwl9CisKKwlyaC0+bG9nLT50eXBlLT5mbHVzaChyaC0+bG9nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX3VwZGF0ZV9zdGF0ZXMpOworCitzdGF0aWMgdm9pZCByaF9pbmMoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwgcmVnaW9uX3QgcmVnaW9uKQoreworCXN0cnVjdCBkbV9yZWdpb24gKnJlZzsKKworCXJlYWRfbG9jaygmcmgtPmhhc2hfbG9jayk7CisJcmVnID0gX19yaF9maW5kKHJoLCByZWdpb24pOworCisJc3Bpbl9sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKKwlhdG9taWNfaW5jKCZyZWctPnBlbmRpbmcpOworCisJaWYgKHJlZy0+c3RhdGUgPT0gRE1fUkhfQ0xFQU4pIHsKKwkJcmVnLT5zdGF0ZSA9IERNX1JIX0RJUlRZOworCQlsaXN0X2RlbF9pbml0KCZyZWctPmxpc3QpOwkvKiB0YWtlIG9mZiB0aGUgY2xlYW4gbGlzdCAqLworCQlzcGluX3VubG9ja19pcnEoJnJoLT5yZWdpb25fbG9jayk7CisKKwkJcmgtPmxvZy0+dHlwZS0+bWFya19yZWdpb24ocmgtPmxvZywgcmVnLT5rZXkpOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnEoJnJoLT5yZWdpb25fbG9jayk7CisKKworCXJlYWRfdW5sb2NrKCZyaC0+aGFzaF9sb2NrKTsKK30KKwordm9pZCBkbV9yaF9pbmNfcGVuZGluZyhzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpCit7CisJc3RydWN0IGJpbyAqYmlvOworCisJZm9yIChiaW8gPSBiaW9zLT5oZWFkOyBiaW87IGJpbyA9IGJpby0+YmlfbmV4dCkKKwkJcmhfaW5jKHJoLCBkbV9yaF9iaW9fdG9fcmVnaW9uKHJoLCBiaW8pKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX2luY19wZW5kaW5nKTsKKwordm9pZCBkbV9yaF9kZWMoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwgcmVnaW9uX3QgcmVnaW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRtX3JlZ2lvbiAqcmVnOworCWludCBzaG91bGRfd2FrZSA9IDA7CisKKwlyZWFkX2xvY2soJnJoLT5oYXNoX2xvY2spOworCXJlZyA9IF9fcmhfbG9va3VwKHJoLCByZWdpb24pOworCXJlYWRfdW5sb2NrKCZyaC0+aGFzaF9sb2NrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyaC0+cmVnaW9uX2xvY2ssIGZsYWdzKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmVnLT5wZW5kaW5nKSkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBwZW5kaW5nIEkvTyBmb3IgdGhpcyByZWdpb24uCisJCSAqIFdlIGNhbiBtb3ZlIHRoZSByZWdpb24gdG8gY29ycmVzcG9uZGluZyBsaXN0IGZvciBuZXh0IGFjdGlvbi4KKwkJICogQXQgdGhpcyBwb2ludCwgdGhlIHJlZ2lvbiBpcyBub3QgeWV0IGNvbm5lY3RlZCB0byBhbnkgbGlzdC4KKwkJICoKKwkJICogSWYgdGhlIHN0YXRlIGlzIERNX1JIX05PU1lOQywgdGhlIHJlZ2lvbiBzaG91bGQgYmUga2VwdCBvZmYKKwkJICogZnJvbSBjbGVhbiBsaXN0LgorCQkgKiBUaGUgaGFzaCBlbnRyeSBmb3IgRE1fUkhfTk9TWU5DIHdpbGwgcmVtYWluIGluIG1lbW9yeQorCQkgKiB1bnRpbCB0aGUgcmVnaW9uIGlzIHJlY292ZXJlZCBvciB0aGUgbWFwIGlzIHJlbG9hZGVkLgorCQkgKi8KKworCQkvKiBkbyBub3RoaW5nIGZvciBETV9SSF9OT1NZTkMgKi8KKwkJaWYgKHJlZy0+c3RhdGUgPT0gRE1fUkhfUkVDT1ZFUklORykgeworCQkJbGlzdF9hZGRfdGFpbCgmcmVnLT5saXN0LCAmcmgtPnF1aWVzY2VkX3JlZ2lvbnMpOworCQl9IGVsc2UgaWYgKHJlZy0+c3RhdGUgPT0gRE1fUkhfRElSVFkpIHsKKwkJCXJlZy0+c3RhdGUgPSBETV9SSF9DTEVBTjsKKwkJCWxpc3RfYWRkKCZyZWctPmxpc3QsICZyaC0+Y2xlYW5fcmVnaW9ucyk7CisJCX0KKwkJc2hvdWxkX3dha2UgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaC0+cmVnaW9uX2xvY2ssIGZsYWdzKTsKKworCWlmIChzaG91bGRfd2FrZSkKKwkJcmgtPndha2V1cF93b3JrZXJzKHJoLT5jb250ZXh0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX2RlYyk7CisKKy8qCisgKiBTdGFydHMgcXVpZXNjaW5nIGEgcmVnaW9uIGluIHByZXBhcmF0aW9uIGZvciByZWNvdmVyeS4KKyAqLworc3RhdGljIGludCBfX3JoX3JlY292ZXJ5X3ByZXBhcmUoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCkKK3sKKwlpbnQgcjsKKwlyZWdpb25fdCByZWdpb247CisJc3RydWN0IGRtX3JlZ2lvbiAqcmVnOworCisJLyoKKwkgKiBBc2sgdGhlIGRpcnR5IGxvZyB3aGF0J3MgbmV4dC4KKwkgKi8KKwlyID0gcmgtPmxvZy0+dHlwZS0+Z2V0X3Jlc3luY193b3JrKHJoLT5sb2csICZyZWdpb24pOworCWlmIChyIDw9IDApCisJCXJldHVybiByOworCisJLyoKKwkgKiBHZXQgdGhpcyByZWdpb24sIGFuZCBzdGFydCBpdCBxdWllc2NpbmcgYnkgc2V0dGluZyB0aGUKKwkgKiByZWNvdmVyaW5nIGZsYWcuCisJICovCisJcmVhZF9sb2NrKCZyaC0+aGFzaF9sb2NrKTsKKwlyZWcgPSBfX3JoX2ZpbmQocmgsIHJlZ2lvbik7CisJcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKKwlyZWctPnN0YXRlID0gRE1fUkhfUkVDT1ZFUklORzsKKworCS8qIEFscmVhZHkgcXVpZXNjZWQgPyAqLworCWlmIChhdG9taWNfcmVhZCgmcmVnLT5wZW5kaW5nKSkKKwkJbGlzdF9kZWxfaW5pdCgmcmVnLT5saXN0KTsKKwllbHNlCisJCWxpc3RfbW92ZSgmcmVnLT5saXN0LCAmcmgtPnF1aWVzY2VkX3JlZ2lvbnMpOworCisJc3Bpbl91bmxvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZG1fcmhfcmVjb3ZlcnlfcHJlcGFyZShzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKQoreworCS8qIEV4dHJhIHJlZmVyZW5jZSB0byBhdm9pZCByYWNlIHdpdGggZG1fcmhfc3RvcF9yZWNvdmVyeSAqLworCWF0b21pY19pbmMoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpOworCisJd2hpbGUgKCFkb3duX3RyeWxvY2soJnJoLT5yZWNvdmVyeV9jb3VudCkpIHsKKwkJYXRvbWljX2luYygmcmgtPnJlY292ZXJ5X2luX2ZsaWdodCk7CisJCWlmIChfX3JoX3JlY292ZXJ5X3ByZXBhcmUocmgpIDw9IDApIHsKKwkJCWF0b21pY19kZWMoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpOworCQkJdXAoJnJoLT5yZWNvdmVyeV9jb3VudCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIERyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0KSkKKwkJcmgtPndha2V1cF9hbGxfcmVjb3Zlcnlfd2FpdGVycyhyaC0+Y29udGV4dCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9yZWNvdmVyeV9wcmVwYXJlKTsKKworLyoKKyAqIFJldHVybnMgYW55IHF1aWVzY2VkIHJlZ2lvbnMuCisgKi8KK3N0cnVjdCBkbV9yZWdpb24gKmRtX3JoX3JlY292ZXJ5X3N0YXJ0KHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgpCit7CisJc3RydWN0IGRtX3JlZ2lvbiAqcmVnID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnEoJnJoLT5yZWdpb25fbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZyaC0+cXVpZXNjZWRfcmVnaW9ucykpIHsKKwkJcmVnID0gbGlzdF9lbnRyeShyaC0+cXVpZXNjZWRfcmVnaW9ucy5uZXh0LAorCQkJCSBzdHJ1Y3QgZG1fcmVnaW9uLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcmVnLT5saXN0KTsgIC8qIHJlbW92ZSBmcm9tIHRoZSBxdWllc2NlZCBsaXN0ICovCisJfQorCXNwaW5fdW5sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKKworCXJldHVybiByZWc7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9yZWNvdmVyeV9zdGFydCk7CisKK3ZvaWQgZG1fcmhfcmVjb3ZlcnlfZW5kKHN0cnVjdCBkbV9yZWdpb24gKnJlZywgaW50IHN1Y2Nlc3MpCit7CisJc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCA9IHJlZy0+cmg7CisKKwlzcGluX2xvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOworCWlmIChzdWNjZXNzKQorCQlsaXN0X2FkZCgmcmVnLT5saXN0LCAmcmVnLT5yaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpOworCWVsc2UgeworCQlyZWctPnN0YXRlID0gRE1fUkhfTk9TWU5DOworCQlsaXN0X2FkZCgmcmVnLT5saXN0LCAmcmVnLT5yaC0+ZmFpbGVkX3JlY292ZXJlZF9yZWdpb25zKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOworCisJcmgtPndha2V1cF93b3JrZXJzKHJoLT5jb250ZXh0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX3JlY292ZXJ5X2VuZCk7CisKKy8qIFJldHVybiByZWNvdmVyeSBpbiBmbGlnaHQgY291bnQuICovCitpbnQgZG1fcmhfcmVjb3ZlcnlfaW5fZmxpZ2h0KHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX3JlY292ZXJ5X2luX2ZsaWdodCk7CisKK2ludCBkbV9yaF9mbHVzaChzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKQoreworCXJldHVybiByaC0+bG9nLT50eXBlLT5mbHVzaChyaC0+bG9nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX2ZsdXNoKTsKKwordm9pZCBkbV9yaF9kZWxheShzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGRtX3JlZ2lvbiAqcmVnOworCisJcmVhZF9sb2NrKCZyaC0+aGFzaF9sb2NrKTsKKwlyZWcgPSBfX3JoX2ZpbmQocmgsIGRtX3JoX2Jpb190b19yZWdpb24ocmgsIGJpbykpOworCWJpb19saXN0X2FkZCgmcmVnLT5kZWxheWVkX2Jpb3MsIGJpbyk7CisJcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fcmhfZGVsYXkpOworCit2b2lkIGRtX3JoX3N0b3BfcmVjb3Zlcnkoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCkKK3sKKwlpbnQgaTsKKworCS8qIHdhaXQgZm9yIGFueSByZWNvdmVyaW5nIHJlZ2lvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmgtPm1heF9yZWNvdmVyeTsgaSsrKQorCQlkb3duKCZyaC0+cmVjb3ZlcnlfY291bnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fcmhfc3RvcF9yZWNvdmVyeSk7CisKK3ZvaWQgZG1fcmhfc3RhcnRfcmVjb3Zlcnkoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByaC0+bWF4X3JlY292ZXJ5OyBpKyspCisJCXVwKCZyaC0+cmVjb3ZlcnlfY291bnQpOworCisJcmgtPndha2V1cF93b3JrZXJzKHJoLT5jb250ZXh0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3JoX3N0YXJ0X3JlY292ZXJ5KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERNX05BTUUgIiByZWdpb24gaGFzaCIpOworTU9EVUxFX0FVVEhPUigiSm9lIFRob3JuYmVyL0hlaW56IE1hdWVsc2hhZ2VuIDxkbS1kZXZlbEByZWRoYXQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yb3VuZC1yb2Jpbi5jIGIvZHJpdmVycy9tZC9kbS1yb3VuZC1yb2Jpbi5jCmluZGV4IDM5MWRmYTIuLmNkZmJmNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcm91bmQtcm9iaW4uYworKysgYi9kcml2ZXJzL21kL2RtLXJvdW5kLXJvYmluLmMKQEAgLTksNyArOSw4IEBACiAgKiBSb3VuZC1yb2JpbiBwYXRoIHNlbGVjdG9yLgogICovCiAKLSNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KKwogI2luY2x1ZGUgImRtLXBhdGgtc2VsZWN0b3IuaCIKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggNmU1NTI4YS4uYjJkOWQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTYwMCw3ICs2MDAsNiBAQAogCiAJcy0+dmFsaWQgPSAxOwogCXMtPmFjdGl2ZSA9IDA7Ci0Jcy0+bGFzdF9wZXJjZW50ID0gMDsKIAlpbml0X3J3c2VtKCZzLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcy0+cGVfbG9jayk7CiAJcy0+dGkgPSB0aTsKQEAgLTgyNCw4ICs4MjMsMTAgQEAKIAkgKiB0aGUgYmlvcyBmb3IgdGhlIG9yaWdpbmFsIHdyaXRlIHRvIHRoZSBvcmlnaW4uCiAJICovCiAJaWYgKHByaW1hcnlfcGUgJiYKLQkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcHJpbWFyeV9wZS0+cmVmX2NvdW50KSkKKwkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcHJpbWFyeV9wZS0+cmVmX2NvdW50KSkgewogCQlvcmlnaW5fYmlvcyA9IGJpb19saXN0X2dldCgmcHJpbWFyeV9wZS0+b3JpZ2luX2Jpb3MpOworCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHByaW1hcnlfcGUpOworCX0KIAogCS8qCiAJICogRnJlZSB0aGUgcGUgaWYgaXQncyBub3QgbGlua2VkIHRvIGFuIG9yaWdpbiB3cml0ZSBvciBpZgpAQCAtODM0LDEyICs4MzUsNiBAQAogCWlmICghcHJpbWFyeV9wZSB8fCBwcmltYXJ5X3BlICE9IHBlKQogCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKIAotCS8qCi0JICogRnJlZSB0aGUgcHJpbWFyeSBwZSBpZiBub3RoaW5nIHJlZmVyZW5jZXMgaXQuCi0JICovCi0JaWYgKHByaW1hcnlfcGUgJiYgIWF0b21pY19yZWFkKCZwcmltYXJ5X3BlLT5yZWZfY291bnQpKQotCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHByaW1hcnlfcGUpOwotCiAJcmV0dXJuIG9yaWdpbl9iaW9zOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAuaCBiL2RyaXZlcnMvbWQvZG0tc25hcC5oCmluZGV4IDI5MmMxNTYuLmYwNzMxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC5oCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC5oCkBAIC05LDcgKzksNyBAQAogI2lmbmRlZiBETV9TTkFQU0hPVF9ICiAjZGVmaW5lIERNX1NOQVBTSE9UX0gKIAotI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CkBAIC0xNTgsOSArMTU4LDYgQEAKIAkvKiBVc2VkIGZvciBkaXNwbGF5IG9mIHRhYmxlICovCiAJY2hhciB0eXBlOwogCi0JLyogVGhlIGxhc3QgcGVyY2VudGFnZSB3ZSBub3RpZmllZCAqLwotCWludCBsYXN0X3BlcmNlbnQ7Ci0KIAltZW1wb29sX3QgKnBlbmRpbmdfcG9vbDsKIAogCXN0cnVjdCBleGNlcHRpb25fdGFibGUgcGVuZGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCmluZGV4IGI3NDVkOGEuLmEyZDA2OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zdHJpcGUuYwpAQCAtNCw3ICs0LDcgQEAKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgogICovCiAKLSNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTYwLDggKzYwLDggQEAKIHsKIAlzaXplX3QgbGVuOwogCi0JaWYgKGFycmF5X3Rvb19iaWcoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfYyksIHNpemVvZihzdHJ1Y3Qgc3RyaXBlKSwKLQkJCSAgc3RyaXBlcykpCisJaWYgKGRtX2FycmF5X3Rvb19iaWcoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfYyksIHNpemVvZihzdHJ1Y3Qgc3RyaXBlKSwKKwkJCSAgICAgc3RyaXBlcykpCiAJCXJldHVybiBOVUxMOwogCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBzdHJpcGVfYykgKyAoc2l6ZW9mKHN0cnVjdCBzdHJpcGUpICogc3RyaXBlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKaW5kZXggYTc0MGE2OS4uYTYzMTYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10YWJsZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwpAQCAtNDMsNyArNDMsNyBAQAogCSAqIGRldmljZS4gIFRoaXMgc2hvdWxkIGJlIGEgY29tYmluYXRpb24gb2YgRk1PREVfUkVBRAogCSAqIGFuZCBGTU9ERV9XUklURS4KIAkgKi8KLQlpbnQgbW9kZTsKKwlmbW9kZV90IG1vZGU7CiAKIAkvKiBhIGxpc3Qgb2YgZGV2aWNlcyB1c2VkIGJ5IHRoaXMgdGFibGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7CkBAIC0yMTcsNyArMjE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGRtX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgZG1fdGFibGUgKipyZXN1bHQsIGludCBtb2RlLAoraW50IGRtX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgZG1fdGFibGUgKipyZXN1bHQsIGZtb2RlX3QgbW9kZSwKIAkJICAgIHVuc2lnbmVkIG51bV90YXJnZXRzLCBzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7CiAJc3RydWN0IGRtX3RhYmxlICp0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKQEAgLTMxMywxOSArMzEzLDYgQEAKIH0KIAogLyoKLSAqIENvbnZlcnQgYSBkZXZpY2UgcGF0aCB0byBhIGRldl90LgotICovCi1zdGF0aWMgaW50IGxvb2t1cF9kZXZpY2UoY29uc3QgY2hhciAqcGF0aCwgZGV2X3QgKmRldikKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gbG9va3VwX2JkZXYocGF0aCk7Ci0JaWYgKElTX0VSUihiZGV2KSkKLQkJcmV0dXJuIFBUUl9FUlIoYmRldik7Ci0JKmRldiA9IGJkZXYtPmJkX2RldjsKLQliZHB1dChiZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIFNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhIGRldmljZSBpbiB0aGUgbGlzdC4KICAqLwogc3RhdGljIHN0cnVjdCBkbV9kZXZfaW50ZXJuYWwgKmZpbmRfZGV2aWNlKHN0cnVjdCBsaXN0X2hlYWQgKmwsIGRldl90IGRldikKQEAgLTM1Nyw3ICszNDQsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihiZGV2KTsKIAlyID0gYmRfY2xhaW1fYnlfZGlzayhiZGV2LCBfY2xhaW1fcHRyLCBkbV9kaXNrKG1kKSk7CiAJaWYgKHIpCi0JCWJsa2Rldl9wdXQoYmRldik7CisJCWJsa2Rldl9wdXQoYmRldiwgZC0+ZG1fZGV2Lm1vZGUpOwogCWVsc2UKIAkJZC0+ZG1fZGV2LmJkZXYgPSBiZGV2OwogCXJldHVybiByOwpAQCAtMzcyLDcgKzM1OSw3IEBACiAJCXJldHVybjsKIAogCWJkX3JlbGVhc2VfZnJvbV9kaXNrKGQtPmRtX2Rldi5iZGV2LCBkbV9kaXNrKG1kKSk7Ci0JYmxrZGV2X3B1dChkLT5kbV9kZXYuYmRldik7CisJYmxrZGV2X3B1dChkLT5kbV9kZXYuYmRldiwgZC0+ZG1fZGV2Lm1vZGUpOwogCWQtPmRtX2Rldi5iZGV2ID0gTlVMTDsKIH0KIApAQCAtMzk1LDcgKzM4Miw3IEBACiAgKiBjYXJlZnVsIHRvIGxlYXZlIHRoaW5ncyBhcyB0aGV5IHdlcmUgaWYgd2UgZmFpbCB0byByZW9wZW4gdGhlCiAgKiBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbnQgdXBncmFkZV9tb2RlKHN0cnVjdCBkbV9kZXZfaW50ZXJuYWwgKmRkLCBpbnQgbmV3X21vZGUsCitzdGF0aWMgaW50IHVwZ3JhZGVfbW9kZShzdHJ1Y3QgZG1fZGV2X2ludGVybmFsICpkZCwgZm1vZGVfdCBuZXdfbW9kZSwKIAkJCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKIAlpbnQgcjsKQEAgLTQyMSw3ICs0MDgsNyBAQAogICovCiBzdGF0aWMgaW50IF9fdGFibGVfZ2V0X2RldmljZShzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCBkbV90YXJnZXQgKnRpLAogCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IGxlbiwKLQkJCSAgICAgIGludCBtb2RlLCBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KQorCQkJICAgICAgZm1vZGVfdCBtb2RlLCBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KQogewogCWludCByOwogCWRldl90IHVuaW5pdGlhbGl6ZWRfdmFyKGRldik7CkBAIC00MzcsOCArNDI0LDEyIEBACiAJCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAl9IGVsc2UgewogCQkvKiBjb252ZXJ0IHRoZSBwYXRoIHRvIGEgZGV2aWNlICovCi0JCWlmICgociA9IGxvb2t1cF9kZXZpY2UocGF0aCwgJmRldikpKQotCQkJcmV0dXJuIHI7CisJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBsb29rdXBfYmRldihwYXRoKTsKKworCQlpZiAoSVNfRVJSKGJkZXYpKQorCQkJcmV0dXJuIFBUUl9FUlIoYmRldik7CisJCWRldiA9IGJkZXYtPmJkX2RldjsKKwkJYmRwdXQoYmRldik7CiAJfQogCiAJZGQgPSBmaW5kX2RldmljZSgmdC0+ZGV2aWNlcywgZGV2KTsKQEAgLTUzNyw3ICs1MjgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZG1fc2V0X2RldmljZV9saW1pdHMpOwogCiBpbnQgZG1fZ2V0X2RldmljZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgY29uc3QgY2hhciAqcGF0aCwgc2VjdG9yX3Qgc3RhcnQsCi0JCSAgc2VjdG9yX3QgbGVuLCBpbnQgbW9kZSwgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKKwkJICBzZWN0b3JfdCBsZW4sIGZtb2RlX3QgbW9kZSwgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKIHsKIAlpbnQgciA9IF9fdGFibGVfZ2V0X2RldmljZSh0aS0+dGFibGUsIHRpLCBwYXRoLAogCQkJCSAgIHN0YXJ0LCBsZW4sIG1vZGUsIHJlc3VsdCk7CkBAIC04ODcsNyArODc4LDcgQEAKIAlyZXR1cm4gJnQtPmRldmljZXM7CiB9CiAKLWludCBkbV90YWJsZV9nZXRfbW9kZShzdHJ1Y3QgZG1fdGFibGUgKnQpCitmbW9kZV90IGRtX3RhYmxlX2dldF9tb2RlKHN0cnVjdCBkbV90YWJsZSAqdCkKIHsKIAlyZXR1cm4gdC0+bW9kZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0temVyby5jIGIvZHJpdmVycy9tZC9kbS16ZXJvLmMKaW5kZXggYmRlYzIwNi4uY2RiZjEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS16ZXJvLmMKKysrIGIvZHJpdmVycy9tZC9kbS16ZXJvLmMKQEAgLTQsNyArNCw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogCi0jaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UtbWFwcGVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggMzI3ZGUwMy4uNjk2M2FkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJjb3JlIgogCkBAIC03Niw3ICs3NSw2IEBACiAgKi8KIHN0cnVjdCBkbV93cV9yZXEgewogCWVudW0gewotCQlETV9XUV9GTFVTSF9BTEwsCiAJCURNX1dRX0ZMVVNIX0RFRkVSUkVELAogCX0gdHlwZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKQEAgLTE1MSw0MCArMTQ5LDQwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGxvY2FsX2luaXQodm9pZCkKIHsKLQlpbnQgcjsKKwlpbnQgciA9IC1FTk9NRU07CiAKIAkvKiBhbGxvY2F0ZSBhIHNsYWIgZm9yIHRoZSBkbV9pb3MgKi8KIAlfaW9fY2FjaGUgPSBLTUVNX0NBQ0hFKGRtX2lvLCAwKTsKIAlpZiAoIV9pb19jYWNoZSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiByOwogCiAJLyogYWxsb2NhdGUgYSBzbGFiIGZvciB0aGUgdGFyZ2V0IGlvcyAqLwogCV90aW9fY2FjaGUgPSBLTUVNX0NBQ0hFKGRtX3RhcmdldF9pbywgMCk7Ci0JaWYgKCFfdGlvX2NhY2hlKSB7Ci0JCWttZW1fY2FjaGVfZGVzdHJveShfaW9fY2FjaGUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCFfdGlvX2NhY2hlKQorCQlnb3RvIG91dF9mcmVlX2lvX2NhY2hlOwogCiAJciA9IGRtX3VldmVudF9pbml0KCk7Ci0JaWYgKHIpIHsKLQkJa21lbV9jYWNoZV9kZXN0cm95KF90aW9fY2FjaGUpOwotCQlrbWVtX2NhY2hlX2Rlc3Ryb3koX2lvX2NhY2hlKTsKLQkJcmV0dXJuIHI7Ci0JfQorCWlmIChyKQorCQlnb3RvIG91dF9mcmVlX3Rpb19jYWNoZTsKIAogCV9tYWpvciA9IG1ham9yOwogCXIgPSByZWdpc3Rlcl9ibGtkZXYoX21ham9yLCBfbmFtZSk7Ci0JaWYgKHIgPCAwKSB7Ci0JCWttZW1fY2FjaGVfZGVzdHJveShfdGlvX2NhY2hlKTsKLQkJa21lbV9jYWNoZV9kZXN0cm95KF9pb19jYWNoZSk7Ci0JCWRtX3VldmVudF9leGl0KCk7Ci0JCXJldHVybiByOwotCX0KKwlpZiAociA8IDApCisJCWdvdG8gb3V0X3VldmVudF9leGl0OwogCiAJaWYgKCFfbWFqb3IpCiAJCV9tYWpvciA9IHI7CiAKIAlyZXR1cm4gMDsKKworb3V0X3VldmVudF9leGl0OgorCWRtX3VldmVudF9leGl0KCk7CitvdXRfZnJlZV90aW9fY2FjaGU6CisJa21lbV9jYWNoZV9kZXN0cm95KF90aW9fY2FjaGUpOworb3V0X2ZyZWVfaW9fY2FjaGU6CisJa21lbV9jYWNoZV9kZXN0cm95KF9pb19jYWNoZSk7CisKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgbG9jYWxfZXhpdCh2b2lkKQpAQCAtMjQ5LDEzICsyNDcsMTMgQEAKIC8qCiAgKiBCbG9jayBkZXZpY2UgZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbnQgZG1fYmxrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGRtX2Jsa19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQ7CiAKIAlzcGluX2xvY2soJl9taW5vcl9sb2NrKTsKIAotCW1kID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCW1kID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCWlmICghbWQpCiAJCWdvdG8gb3V0OwogCkBAIC0yNzQsMTEgKzI3Miw5IEBACiAJcmV0dXJuIG1kID8gMCA6IC1FTlhJTzsKIH0KIAotc3RhdGljIGludCBkbV9ibGtfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGRtX2Jsa19jbG9zZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZDsKLQotCW1kID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlhdG9taWNfZGVjKCZtZC0+b3Blbl9jb3VudCk7CiAJZG1fcHV0KG1kKTsKIAlyZXR1cm4gMDsKQEAgLTMxNSwyMSArMzExLDE0IEBACiAJcmV0dXJuIGRtX2dldF9nZW9tZXRyeShtZCwgZ2VvKTsKIH0KIAotc3RhdGljIGludCBkbV9ibGtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGRtX2Jsa19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQ7Ci0Jc3RydWN0IGRtX3RhYmxlICptYXA7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0Z3Q7CiAJaW50IHIgPSAtRU5PVFRZOwogCi0JLyogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyBsb2NrLCBidXQgd2UgZG8gbmVlZCAnaW5vZGUnLiAqLwotCXVubG9ja19rZXJuZWwoKTsKLQotCW1kID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKLQogCWlmICghbWFwIHx8ICFkbV90YWJsZV9nZXRfc2l6ZShtYXApKQogCQlnb3RvIG91dDsKIApAQCAtMzQ1LDEyICszMzQsMTEgQEAKIAl9CiAKIAlpZiAodGd0LT50eXBlLT5pb2N0bCkKLQkJciA9IHRndC0+dHlwZS0+aW9jdGwodGd0LCBpbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCQlyID0gdGd0LT50eXBlLT5pb2N0bCh0Z3QsIGNtZCwgYXJnKTsKIAogb3V0OgogCWRtX3RhYmxlX3B1dChtYXApOwogCi0JbG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtNjY5LDYgKzY1Nyw3IEBACiAJY2xvbmUtPmJpX3NpemUgPSB0b19ieXRlcyhsZW4pOwogCWNsb25lLT5iaV9pb192ZWMtPmJ2X29mZnNldCA9IG9mZnNldDsKIAljbG9uZS0+YmlfaW9fdmVjLT5idl9sZW4gPSBjbG9uZS0+Ymlfc2l6ZTsKKwljbG9uZS0+YmlfZmxhZ3MgfD0gMSA8PCBCSU9fQ0xPTkVEOwogCiAJcmV0dXJuIGNsb25lOwogfQpAQCAtMTM5NCw5ICsxMzgzLDYgQEAKIAogCWRvd25fd3JpdGUoJm1kLT5pb19sb2NrKTsKIAlzd2l0Y2ggKHJlcS0+dHlwZSkgewotCWNhc2UgRE1fV1FfRkxVU0hfQUxMOgotCQlfX21lcmdlX3B1c2hiYWNrX2xpc3QobWQpOwotCQkvKiBwYXNzIHRocm91Z2ggKi8KIAljYXNlIERNX1dRX0ZMVVNIX0RFRkVSUkVEOgogCQlfX2ZsdXNoX2RlZmVycmVkX2lvKG1kKTsKIAkJYnJlYWs7CkBAIC0xNTI2LDcgKzE1MTIsNyBAQAogCQlpZiAoIW1kLT5zdXNwZW5kZWRfYmRldikgewogCQkJRE1XQVJOKCJiZGdldCBmYWlsZWQgaW4gZG1fc3VzcGVuZCIpOwogCQkJciA9IC1FTk9NRU07Ci0JCQlnb3RvIGZsdXNoX2FuZF9vdXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCS8qCkBAIC0xNTc3LDE0ICsxNTYzLDYgQEAKIAogCXNldF9iaXQoRE1GX1NVU1BFTkRFRCwgJm1kLT5mbGFncyk7CiAKLWZsdXNoX2FuZF9vdXQ6Ci0JaWYgKHIgJiYgbm9mbHVzaCkKLQkJLyoKLQkJICogQmVjYXVzZSB0aGVyZSBtYXkgYmUgYWxyZWFkeSBJL09zIGluIHRoZSBwdXNoYmFjayBsaXN0LAotCQkgKiBmbHVzaCB0aGVtIGJlZm9yZSByZXR1cm4uCi0JCSAqLwotCQlkbV9xdWV1ZV9mbHVzaChtZCwgRE1fV1FfRkxVU0hfQUxMLCBOVUxMKTsKLQogb3V0OgogCWlmIChyICYmIG1kLT5zdXNwZW5kZWRfYmRldikgewogCQliZHB1dChtZC0+c3VzcGVuZGVkX2JkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IGNkMTg5ZGEuLjBhZGU2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uaAorKysgYi9kcml2ZXJzL21kL2RtLmgKQEAgLTYyLDE1ICs2Miw2IEBACiBpbnQgZG1fdGFyZ2V0X2l0ZXJhdGUodm9pZCAoKml0ZXJfZnVuYykoc3RydWN0IHRhcmdldF90eXBlICp0dCwKIAkJCQkJdm9pZCAqcGFyYW0pLCB2b2lkICpwYXJhbSk7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFVzZWZ1bCBpbmxpbmVzLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGlubGluZSBpbnQgYXJyYXlfdG9vX2JpZyh1bnNpZ25lZCBsb25nIGZpeGVkLCB1bnNpZ25lZCBsb25nIG9iaiwKLQkJCQl1bnNpZ25lZCBsb25nIG51bSkKLXsKLQlyZXR1cm4gKG51bSA+IChVTE9OR19NQVggLSBmaXhlZCkgLyBvYmopOwotfQotCiBpbnQgZG1fc3BsaXRfYXJncyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndnAsIGNoYXIgKmlucHV0KTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBhYWEzZDQ2Li5jMWE4MzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0xNTIwLDcgKzE1MjAsNyBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZDogY291bGQgbm90IGJkX2NsYWltICVzLlxuIiwKIAkJCWJkZXZuYW1lKGJkZXYsIGIpKTsKLQkJYmxrZGV2X3B1dChiZGV2KTsKKwkJYmxrZGV2X3B1dChiZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKCFzaGFyZWQpCkBAIC0xNTM2LDcgKzE1MzYsNyBAQAogCWlmICghYmRldikKIAkJTURfQlVHKCk7CiAJYmRfcmVsZWFzZShiZGV2KTsKLQlibGtkZXZfcHV0KGJkZXYpOworCWJsa2Rldl9wdXQoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiB9CiAKIHZvaWQgbWRfYXV0b2RldGVjdF9kZXYoZGV2X3QgZGV2KTsKQEAgLTQ3ODUsNyArNDc4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCBlcnIgPSAwOwpAQCAtNDgyMyw3ICs0ODIzLDcgQEAKIAkgKiBDb21tYW5kcyBjcmVhdGluZy9zdGFydGluZyBhIG5ldyBhcnJheToKIAkgKi8KIAotCW1kZGV2ID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCW1kZGV2ID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFtZGRldikgewogCQlCVUcoKTsKQEAgLTQ5OTYsMTMgKzQ5OTYsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1kX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG1kX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewogCS8qCiAJICogU3VjY2VlZCBpZiB3ZSBjYW4gbG9jayB0aGUgbWRkZXYsIHdoaWNoIGNvbmZpcm1zIHRoYXQKIAkgKiBpdCBpc24ndCBiZWluZyBzdG9wcGVkIHJpZ2h0IG5vdy4KIAkgKi8KLQltZGRldl90ICptZGRldiA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwltZGRldl90ICptZGRldiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCiAJaWYgKChlcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGVfbmVzdGVkKCZtZGRldi0+cmVjb25maWdfbXV0ZXgsIDEpKSkKQEAgLTUwMTMsMTQgKzUwMTMsMTQgQEAKIAlhdG9taWNfaW5jKCZtZGRldi0+b3BlbmVycyk7CiAJbWRkZXZfdW5sb2NrKG1kZGV2KTsKIAotCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOworCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwogIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1kX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQorc3RhdGljIGludCBtZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0gCW1kZGV2X3QgKm1kZGV2ID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworIAltZGRldl90ICptZGRldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAogCUJVR19PTighbWRkZXYpOwogCWF0b21pY19kZWMoJm1kZGV2LT5vcGVuZXJzKTsKQEAgLTUwNDgsNyArNTA0OCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IG1kX29wZW4sCiAJLnJlbGVhc2UJPSBtZF9yZWxlYXNlLAotCS5pb2N0bAkJPSBtZF9pb2N0bCwKKwkubG9ja2VkX2lvY3RsCT0gbWRfaW9jdGwsCiAJLmdldGdlbwkJPSBtZF9nZXRnZW8sCiAJLm1lZGlhX2NoYW5nZWQJPSBtZF9tZWRpYV9jaGFuZ2VkLAogCS5yZXZhbGlkYXRlX2Rpc2s9IG1kX3JldmFsaWRhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCA4NzQ0MDE0Li5kNGFjNDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCW1wX2JoLT5iaW8gPSAqYmlvOwogCW1wX2JoLT5iaW8uYmlfc2VjdG9yICs9IG11bHRpcGF0aC0+cmRldi0+ZGF0YV9vZmZzZXQ7CiAJbXBfYmgtPmJpby5iaV9iZGV2ID0gbXVsdGlwYXRoLT5yZGV2LT5iZGV2OwotCW1wX2JoLT5iaW8uYmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUKTsKKwltcF9iaC0+YmlvLmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQpOwogCW1wX2JoLT5iaW8uYmlfZW5kX2lvID0gbXVsdGlwYXRoX2VuZF9yZXF1ZXN0OwogCW1wX2JoLT5iaW8uYmlfcHJpdmF0ZSA9IG1wX2JoOwogCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KCZtcF9iaC0+YmlvKTsKQEAgLTM5Myw3ICszOTMsNyBAQAogCQkJKmJpbyA9ICoobXBfYmgtPm1hc3Rlcl9iaW8pOwogCQkJYmlvLT5iaV9zZWN0b3IgKz0gY29uZi0+bXVsdGlwYXRoc1ttcF9iaC0+cGF0aF0ucmRldi0+ZGF0YV9vZmZzZXQ7CiAJCQliaW8tPmJpX2JkZXYgPSBjb25mLT5tdWx0aXBhdGhzW21wX2JoLT5wYXRoXS5yZGV2LT5iZGV2OwotCQkJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1QpOworCQkJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAkJCWJpby0+YmlfZW5kX2lvID0gbXVsdGlwYXRoX2VuZF9yZXF1ZXN0OwogCQkJYmlvLT5iaV9wcml2YXRlID0gbXBfYmg7CiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCA1YjM0YzEzLi4xMjdiMDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtNTQ1LDExICs1NDUsMTEgQEAKIAlpZiggVkZMX1RZUEVfR1JBQkJFUiA9PSB0eXBlICkgewogCQl2di0+dmlkZW9fbWlub3IgPSB2ZmQtPm1pbm9yOwogCQlJTkZPKCgiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW3Y0bDJdXG4iLAotCQkJZGV2LT5uYW1lLCB2ZmQtPm1pbm9yICYgMHgxZikpOworCQkJZGV2LT5uYW1lLCB2ZmQtPm51bSkpOwogCX0gZWxzZSB7CiAJCXZ2LT52YmlfbWlub3IgPSB2ZmQtPm1pbm9yOwogCQlJTkZPKCgiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIFt2NGwyXVxuIiwKLQkJCWRldi0+bmFtZSwgdmZkLT5taW5vciAmIDB4MWYpKTsKKwkJCWRldi0+bmFtZSwgdmZkLT5udW0pKTsKIAl9CiAKIAkqdmlkID0gdmZkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCmluZGV4IDk5YmU5ZTUuLmZlMGJkNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKQEAgLTgzNCw3ICs4MzQsNyBAQAogICogY29weWluZyBpcyBkb25lIGFscmVhZHksIGFyZyBpcyBhIGtlcm5lbCBwb2ludGVyLgogICovCiAKLWludCBzYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IF9fc2FhNzE0Nl92aWRlb19kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwpAQCAtMTIxNSwxMiArMTIxNSwxOCBAQAogCX0KICNlbmRpZgogCWRlZmF1bHQ6Ci0JCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCi0JCQkJCQkgIHNhYTcxNDZfdmlkZW9fZG9faW9jdGwpOworCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoZmlsZSwgY21kLCBhcmcsCisJCQkJCQkgIF9fc2FhNzE0Nl92aWRlb19kb19pb2N0bCk7CiAJfQogCXJldHVybiAwOwogfQogCitpbnQgc2FhNzE0Nl92aWRlb19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiBfX3NhYTcxNDZfdmlkZW9fZG9faW9jdGwoZmlsZSwgY21kLCBhcmcpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogYnVmZmVyIGhhbmRsaW5nIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwppbmRleCAyMjc2NDJiLi5hODg3ODI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwpAQCAtMzQ4MSw3ICszNDgxLDkgQEAKIAkJCQkJfQogCQkJCQljdHJsVmFsID0gMDsKIAkJCQkJZm9yIChrID0gMDsgayA8IHN0YXRlLT5NWExfQ3RybFtpXS5zaXplOyBrKyspCi0JCQkJCQljdHJsVmFsICs9IHN0YXRlLT5NWExfQ3RybFtpXS52YWxba10gKiAoMSA8PCBrKTsKKwkJCQkJCWN0cmxWYWwgKz0gc3RhdGUtPgorCQkJCQkJCU1YTF9DdHJsW2ldLnZhbFtrXSAqCisJCQkJCQkJKDEgPDwgayk7CiAJCQkJfSBlbHNlCiAJCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTM1ODEsNyArMzU4Myw3IEBACiAKIHN0YXRpYyB1MzIgTVhMX0NlaWxpbmcodTMyIHZhbHVlLCB1MzIgcmVzb2x1dGlvbikKIHsKLQlyZXR1cm4gKHZhbHVlL3Jlc29sdXRpb24gKyAodmFsdWUgJSByZXNvbHV0aW9uID4gMCA/IDEgOiAwKSk7CisJcmV0dXJuIHZhbHVlIC8gcmVzb2x1dGlvbiArICh2YWx1ZSAlIHJlc29sdXRpb24gPiAwID8gMSA6IDApOwogfQogCiAvKiBSZXRyaWV2ZSB0aGUgSW5pdGlhbHphdGlvbiBSZWdpc3RlcnMgKi8KQEAgLTM5MTAsNyArMzkxMiwxMCBAQAogCiBzdGF0aWMgaW50IG14bDUwMDVzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CisJc3RydWN0IG14bDUwMDVzX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCXN0YXRlLT5jdXJyZW50X21vZGUgPSBNWExfUUFNOwogCXJldHVybiBteGw1MDA1c19yZWNvbmZpZ3VyZShmZSwgTVhMX1FBTSwgTVhMNTAwNVNfQkFORFdJRFRIXzZNSFopOwogfQogCkBAIC00MDkyLDcgKzQwOTcsNiBAQAogCXN0YXRlLT5mcm9udGVuZCA9IGZlOwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKLQlzdGF0ZS0+Y3VycmVudF9tb2RlID0gTVhMX1FBTTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1YTDUwMDVTOiBBdHRhY2hlZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKIAkJY29uZmlnLT5pMmNfYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKaW5kZXggMmExYWFjMS4uZmIzZjNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYwpAQCAtNDkzLDYgKzQ5Myw3IEBACiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMzoKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMzoKIAljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMzoKKwljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzM6CiAJY2FzZSBUVU5FUl9MR19OVFNDX1RBUEU6CiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTI1Nl9JSDM6CiAJY2FzZSBUVU5FUl9UQ0xfTUYwMkdJUF81TjoKQEAgLTc2Nyw2ICs3NjgsNyBAQAogCiAJc3dpdGNoIChwcml2LT50eXBlKSB7CiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzM6CisJY2FzZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszOgogCQlpZiAocGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoID09IEJBTkRXSURUSF84X01IWiAmJgogCQkgICAgcGFyYW1zLT5mcmVxdWVuY3kgPj0gMTU4ODcwMDAwKQogCQkJYnVmWzNdIHw9IDB4MDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCmluZGV4IDA0OTYxYTEuLjdjMGJjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCkBAIC05NDYsNyArOTQ2LDcgQEAKIAl9LAogfTsKIAotLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FKFgpX01LMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzW10gPSB7CiAJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDg2LCAweDUxLCB9LApAQCAtOTg0LDYgKzk4NCwyNyBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZXhfbWszX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzKSwKKwkJLmhhc190ZGE5ODg3ID0gMSwKKwkJLnBvcnQxX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9hY3RpdmUgPSAxLAorCQkucG9ydDJfZm1faGlnaF9zZW5zaXRpdml0eSA9IDEsCisJCS5wb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKKwkJLnBvcnQxX3NldF9mb3JfZm1fbW9ubyA9IDEsCisJCS5yYWRpb19pZiA9IDEsCisJCS5mbV9nYWluX25vcm1hbCA9IDEsCisJfSwKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX0RJR0lUQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfZHZiX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX2R2Yl9yYW5nZXMpLAorCQkuaWZmcmVxID0gMTYgKiAzNi4xMjUsIC8qTUh6Ki8KKwl9LAorfTsKIAogLyogLS0tLS0tIFRVTkVSX0xHX1REVlNfSDA2WEYgLSBMRyBJTk5PVEVLIC8gSU5GSU5FT04gQVRTQyAtLS0tLSAqLwogCkBAIC0xNjYzLDYgKzE2ODQsMTYgQEAKIAkJLnBhcmFtcyA9IHR1bmVyX3RjbF9tZjAyZ2lwXzVuX3BhcmFtcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGNsX21mMDJnaXBfNW5fcGFyYW1zKSwKIAl9LAorCVtUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIEZNRDEyMTZNRVggTUszIEh5YnJpZCBUdW5lciIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZXhfbWszX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWV4X21rM19wYXJhbXMpLAorCQkubWluID0gMTYgKiAgNTAuODcsCisJCS5tYXggPSAxNiAqIDg1OC4wMCwKKwkJLnN0ZXBzaXplID0gMTY2NjY3LAorCQkuaW5pdGRhdGEgPSB0dWE2MDN4X2FnYzExMiwKKwkJLnNsZWVwZGF0YSA9ICh1OFtdKXsgNCwgMHg5YywgMHg2MCwgMHg4NSwgMHg1NCB9LAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTCh0dW5lcnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKaW5kZXggZjljMmJiOS4uZTEyZDEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwpAQCAtNDMsNyArNDMsNyBAQAogc3RhdGljIERFRklORV9NVVRFWCh4YzUwMDBfbGlzdF9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0KTsKIAotI2RlZmluZSBkcHJpbnRrKGxldmVsLGZtdCwgYXJnLi4uKSBpZiAoZGVidWcgPj0gbGV2ZWwpIFwKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIGlmIChkZWJ1ZyA+PSBsZXZlbCkgXAogCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCwgInhjNTAwMCIsICMjIGFyZykKIAogI2RlZmluZSBYQzUwMDBfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLXhjNTAwMC0xLjEuZnciCkBAIC0xMzgsMTEgKzEzOCwxMSBAQAogICAgaW1tZWRpYXRlbHkgdGhlIGxlbmd0aCBvZiB0aGUgZm9sbG93aW5nIHRyYW5zYWN0aW9uLgogCiAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IFhDX1RWX1NUQU5EQVJEIHsKIAljaGFyICpOYW1lOwogCXUxNiBBdWRpb01vZGU7CiAJdTE2IFZpZGVvTW9kZTsKLX0gWENfVFZfU1RBTkRBUkQ7Cit9OwogCiAvKiBUdW5lciBzdGFuZGFyZHMgKi8KICNkZWZpbmUgTU5fTlRTQ19QQUxfQlRTQwkwCkBAIC0xNjksNyArMTY5LDcgQEAKICNkZWZpbmUgRk1fUmFkaW9fSU5QVVQyIAkyMQogI2RlZmluZSBGTV9SYWRpb19JTlBVVDEgCTIyCiAKLXN0YXRpYyBYQ19UVl9TVEFOREFSRCBYQzUwMDBfU3RhbmRhcmRbTUFYX1RWX1NUQU5EQVJEXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgWENfVFZfU1RBTkRBUkQgWEM1MDAwX1N0YW5kYXJkW01BWF9UVl9TVEFOREFSRF0gPSB7CiAJeyJNL04tTlRTQy9QQUwtQlRTQyIsIDB4MDQwMCwgMHg4MDIwfSwKIAl7Ik0vTi1OVFNDL1BBTC1BMiIsICAgMHgwNjAwLCAweDgwMjB9LAogCXsiTS9OLU5UU0MvUEFMLUVJQUoiLCAweDA0NDAsIDB4ODAyMH0sCkBAIC0xODMsNyArMTgzLDcgQEAKIAl7IkQvSy1QQUwtTklDQU0iLCAgICAgMHgwRTgwLCAweDgwMDl9LAogCXsiRC9LLVBBTC1NT05PIiwgICAgICAweDE0NzgsIDB4ODAwOX0sCiAJeyJEL0stU0VDQU0tQTIgREsxIiwgIDB4MTIwMCwgMHg4MDA5fSwKLQl7IkQvSy1TRUNBTS1BMiBML0RLMyIsMHgwRTAwLCAweDgwMDl9LAorCXsiRC9LLVNFQ0FNLUEyIEwvREszIiwgMHgwRTAwLCAweDgwMDl9LAogCXsiRC9LLVNFQ0FNLUEyIE1PTk8iLCAweDE0NzgsIDB4ODAwOX0sCiAJeyJMLVNFQ0FNLU5JQ0FNIiwgICAgIDB4OEU4MiwgMHgwMDA5fSwKIAl7IkwnLVNFQ0FNLU5JQ0FNIiwgICAgMHg4RTgyLCAweDQwMDl9LApAQCAtMzA3LDkgKzMwNywxMCBAQAogCXVuc2lnbmVkIGludCBsZW4sIHBvcywgaW5kZXg7CiAJdTggYnVmW1hDX01BWF9JMkNfV1JJVEVfTEVOR1RIXTsKIAotCWluZGV4PTA7Ci0Jd2hpbGUgKChpMmNfc2VxdWVuY2VbaW5kZXhdIT0weEZGKSB8fCAoaTJjX3NlcXVlbmNlW2luZGV4KzFdIT0weEZGKSkgewotCQlsZW4gPSBpMmNfc2VxdWVuY2VbaW5kZXhdKiAyNTYgKyBpMmNfc2VxdWVuY2VbaW5kZXgrMV07CisJaW5kZXggPSAwOworCXdoaWxlICgoaTJjX3NlcXVlbmNlW2luZGV4XSAhPSAweEZGKSB8fAorCQkoaTJjX3NlcXVlbmNlW2luZGV4ICsgMV0gIT0gMHhGRikpIHsKKwkJbGVuID0gaTJjX3NlcXVlbmNlW2luZGV4XSAqIDI1NiArIGkyY19zZXF1ZW5jZVtpbmRleCsxXTsKIAkJaWYgKGxlbiA9PSAweDAwMDApIHsKIAkJCS8qIFJFU0VUIGNvbW1hbmQgKi8KIAkJCXJlc3VsdCA9IHhjX3Jlc2V0KGZlKTsKQEAgLTMyOSwxNSArMzMwLDE3IEBACiAJCQlidWZbMV0gPSBpMmNfc2VxdWVuY2VbaW5kZXggKyAxXTsKIAkJCXBvcyA9IDI7CiAJCQl3aGlsZSAocG9zIDwgbGVuKSB7Ci0JCQkJaWYgKChsZW4gLSBwb3MpID4gWENfTUFYX0kyQ19XUklURV9MRU5HVEggLSAyKSB7Ci0JCQkJCW5ieXRlc190b19zZW5kID0gWENfTUFYX0kyQ19XUklURV9MRU5HVEg7Ci0JCQkJfSBlbHNlIHsKKwkJCQlpZiAoKGxlbiAtIHBvcykgPiBYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSCAtIDIpCisJCQkJCW5ieXRlc190b19zZW5kID0KKwkJCQkJCVhDX01BWF9JMkNfV1JJVEVfTEVOR1RIOworCQkJCWVsc2UKIAkJCQkJbmJ5dGVzX3RvX3NlbmQgPSAobGVuIC0gcG9zICsgMik7CisJCQkJZm9yIChpID0gMjsgaSA8IG5ieXRlc190b19zZW5kOyBpKyspIHsKKwkJCQkJYnVmW2ldID0gaTJjX3NlcXVlbmNlW2luZGV4ICsgcG9zICsKKwkJCQkJCWkgLSAyXTsKIAkJCQl9Ci0JCQkJZm9yIChpPTI7IGk8bmJ5dGVzX3RvX3NlbmQ7IGkrKykgewotCQkJCQlidWZbaV0gPSBpMmNfc2VxdWVuY2VbaW5kZXggKyBwb3MgKyBpIC0gMl07Ci0JCQkJfQotCQkJCXJlc3VsdCA9IHhjX3NlbmRfaTJjX2RhdGEocHJpdiwgYnVmLCBuYnl0ZXNfdG9fc2VuZCk7CisJCQkJcmVzdWx0ID0geGNfc2VuZF9pMmNfZGF0YShwcml2LCBidWYsCisJCQkJCW5ieXRlc190b19zZW5kKTsKIAogCQkJCWlmIChyZXN1bHQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpCiAJCQkJCXJldHVybiByZXN1bHQ7CkBAIC0zODYsOCArMzg5LDcgQEAKIAlkcHJpbnRrKDEsICIlcyglZCkgU291cmNlID0gJXNcbiIsIF9fZnVuY19fLCByZl9tb2RlLAogCQlyZl9tb2RlID09IFhDX1JGX01PREVfQUlSID8gIkFOVEVOTkEiIDogIkNBQkxFIik7CiAKLQlpZiAoKHJmX21vZGUgIT0gWENfUkZfTU9ERV9BSVIpICYmIChyZl9tb2RlICE9IFhDX1JGX01PREVfQ0FCTEUpKQotCXsKKwlpZiAoKHJmX21vZGUgIT0gWENfUkZfTU9ERV9BSVIpICYmIChyZl9tb2RlICE9IFhDX1JGX01PREVfQ0FCTEUpKSB7CiAJCXJmX21vZGUgPSBYQ19SRl9NT0RFX0NBQkxFOwogCQlwcmludGsoS0VSTl9FUlIKIAkJCSIlcygpLCBJbnZhbGlkIG1vZGUsIGRlZmF1bHRpbmcgdG8gQ0FCTEUiLApAQCAtNTYwLDEzICs1NjIsMTMgQEAKIAkJLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfTsKIAogCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX3Byb3BzLmFkYXAsICZtc2csIDEpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDAgSTJDIHJlYWQgZmFpbGVkIChsZW49JWkpXG4iLChpbnQpbGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDAgSTJDIHJlYWQgZmFpbGVkIChsZW49JWkpXG4iLCAoaW50KWxlbik7CiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB4YzUwMDBfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHhjNTAwMF9md3VwbG9hZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgeGM1MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwpAQCAtNTc2LDcgKzU3OCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAieGM1MDAwOiB3YWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwKIAkJWEM1MDAwX0RFRkFVTFRfRklSTVdBUkUpOwogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFLCAmcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmRldik7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFLAorCQkmcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmRldik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgInhjNTAwMDogVXBsb2FkIGZhaWxlZC4gKGZpbGUgbm90IGZvdW5kPylcbiIpOwogCQlyZXQgPSBYQ19SRVNVTFRfUkVTRVRfRkFJTFVSRTsKQEAgLTU5Miw3ICs1OTUsNyBAQAogCQlyZXQgPSBYQ19SRVNVTFRfUkVTRVRfRkFJTFVSRTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICJ4YzUwMDA6IGZpcm13YXJlIHVwbG9hZFxuIik7Ci0JCXJldCA9IHhjX2xvYWRfaTJjX3NlcXVlbmNlKGZlLCAgZnctPmRhdGEgKTsKKwkJcmV0ID0geGNfbG9hZF9pMmNfc2VxdWVuY2UoZmUsICBmdy0+ZGF0YSk7CiAJfQogCiBvdXQ6CkBAIC02NTEsNyArNjU0LDcgQEAKIAogCWRwcmludGsoMSwgIiVzKCkgZnJlcXVlbmN5PSVkIChIeilcbiIsIF9fZnVuY19fLCBwYXJhbXMtPmZyZXF1ZW5jeSk7CiAKLQlzd2l0Y2gocGFyYW1zLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJc3dpdGNoIChwYXJhbXMtPnUudnNiLm1vZHVsYXRpb24pIHsKIAljYXNlIFZTQl84OgogCWNhc2UgVlNCXzE2OgogCQlkcHJpbnRrKDEsICIlcygpIFZTQiBtb2R1bGF0aW9uXG4iLCBfX2Z1bmNfXyk7CkBAIC03NDgsNDIgKzc1MSw0MiBAQAogCS8qIEZJWCBNRTogU29tZSB2aWRlbyBzdGFuZGFyZHMgbWF5IGhhdmUgc2V2ZXJhbCBwb3NzaWJsZSBhdWRpbwogCQkgICBzdGFuZGFyZHMuIFdlIHNpbXBseSBkZWZhdWx0IHRvIG9uZSBvZiB0aGVtIGhlcmUuCiAJICovCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX01OKSB7CiAJCS8qIGRlZmF1bHQgdG8gQlRTQyBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IE1OX05UU0NfUEFMX0JUU0M7CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0JHKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0JHKSB7CiAJCS8qIGRlZmF1bHQgdG8gTklDQU0gYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBCR19QQUxfTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfSSkgewogCQkvKiBkZWZhdWx0IHRvIE5JQ0FNIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gSV9QQUxfTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0RLKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0RLKSB7CiAJCS8qIGRlZmF1bHQgdG8gTklDQU0gYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBES19QQUxfTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fREspIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9ESykgewogCQkvKiBkZWZhdWx0IHRvIEEyIERLMSBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IERLX1NFQ0FNX0EyREsxOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7CiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gTF9TRUNBTV9OSUNBTTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MQykgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0xDKSB7CiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gTENfU0VDQU1fTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KQEAgLTc5MSw3ICs3OTQsNyBAQAogdHVuZV9jaGFubmVsOgogCXJldCA9IHhjX1NldFNpZ25hbFNvdXJjZShwcml2LCBwcml2LT5yZl9tb2RlKTsKIAlpZiAocmV0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKSB7Ci0JcHJpbnRrKEtFUk5fRVJSCisJCXByaW50ayhLRVJOX0VSUgogCQkJInhjNTAwMDogeGNfU2V0U2lnbmFsU291cmNlKCVkKSBmYWlsZWRcbiIsCiAJCQlwcml2LT5yZl9tb2RlKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CkBAIC04NjMsNyArODY2LDcgQEAKIAkgKiBJMkMgdHJhbnNhY3Rpb25zIHVudGlsIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlLiAgVGhpcyB3YXkgd2UKIAkgKiBkb24ndCBoYXZlIHRvIHJlbHkgb24gY2xvY2sgc3RyZXRjaGluZyB3b3JraW5nLgogCSAqLwotCXhjX3dhaXQoIDEwMCApOworCXhjX3dhaXQoMTAwKTsKIAogCS8qIERlZmF1bHQgdG8gIkNBQkxFIiBtb2RlICovCiAJcmV0IHw9IHhjX3dyaXRlX3JlZyhwcml2LCBYUkVHX1NJR05BTFNPVVJDRSwgWENfUkZfTU9ERV9DQUJMRSk7CkBAIC04ODUsMTUgKzg4OCwxMyBAQAogCSAqLwogCiAJcmV0ID0geGNfc2h1dGRvd24ocHJpdik7Ci0JaWYocmV0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKSB7CisJaWYgKHJldCAhPSBYQ19SRVNVTFRfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJ4YzUwMDA6ICVzKCkgdW5hYmxlIHRvIHNodXRkb3duIHR1bmVyXG4iLAogCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlCiAJCXJldHVybiBYQ19SRVNVTFRfU1VDQ0VTUzsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgeGM1MDAwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCkBAIC05ODksNyArOTkwLDcgQEAKIAlpZiAoeGM1MDAwX3JlYWRyZWcocHJpdiwgWFJFR19QUk9EVUNUX0lELCAmaWQpICE9IDApCiAJCWdvdG8gZmFpbDsKIAotCXN3aXRjaChpZCkgeworCXN3aXRjaCAoaWQpIHsKIAljYXNlIFhDX1BST0RVQ1RfSURfRldfTE9BREVEOgogCQlwcmludGsoS0VSTl9JTkZPCiAJCQkieGM1MDAwOiBTdWNjZXNzZnVsbHkgaWRlbnRpZmllZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuaAppbmRleCBjZjFhNTU4Li5mNGMxNDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5oCkBAIC00NSwxNyArNDUsMTcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMCkgfHwgXAogICAgIChkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp4YzUwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAogCQkJCQkgIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKIAkJCQkJCSBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDAKKyNlbmRpZgogCi0jZW5kaWYgLy8gX19YQzUwMDBfSF9fCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwppbmRleCBmNzMyMTQ0Li4xNGU2MjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCkBAIC01OTUsNiArNTk1LDE4IEBACiAJZG0xMTA1ZHZiX2RtYV91bm1hcChkbTExMDVkdmIpOwogfQogCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX2luaXR0YWIsCisJLm1jbGsgPSA4ODAwMDAwMFVMLAorCS5pbnZlcnQgPSAxLAorCS5za2lwX3JlaW5pdCA9IDAsCisJLmxvY2tfb3V0cHV0ID0gU1RWMDI5OV9MT0NLT1VUUFVUXzEsCisJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF9zeW1ib2xfcmF0ZSA9IHNoYXJwX3owMTk0YV9zZXRfc3ltYm9sX3JhdGUsCit9OworCiBzdGF0aWMgc3RydWN0IHN0djAyODhfY29uZmlnIGVhcmRhX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCiAJLm1pbl9kZWxheV9tcyA9IDEwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggZjE3MGU4Mi4uNTY4OWQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIHN0YXRpYyBpbnQgZHZiX2ZvcmNlX2F1dG9faW52ZXJzaW9uOwogc3RhdGljIGludCBkdmJfb3ZlcnJpZGVfdHVuZV9kZWxheTsKIHN0YXRpYyBpbnQgZHZiX3Bvd2VyZG93bl9vbl9zbGVlcCA9IDE7CitzdGF0aWMgaW50IGR2Yl9tZmVfd2FpdF90aW1lID0gNTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGZyb250ZW5kX2RlYnVnLCBkdmJfZnJvbnRlbmRfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZyb250ZW5kX2RlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgY29yZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKQEAgLTU4LDYgKzU5LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoZHZiX292ZXJyaWRlX3R1bmVfZGVsYXksICIwOiBub3JtYWwgKGRlZmF1bHQpLCA+MCA9PiBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgbG9jayBhZnRlciBhIHR1bmUgYXR0ZW1wdCIpOwogbW9kdWxlX3BhcmFtKGR2Yl9wb3dlcmRvd25fb25fc2xlZXAsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR2Yl9wb3dlcmRvd25fb25fc2xlZXAsICIwOiBkbyBub3QgcG93ZXIgZG93biwgMTogdHVybiBMTkIgdm9sdGFnZSBvZmYgb24gc2xlZXAgKGRlZmF1bHQpIik7Cittb2R1bGVfcGFyYW0oZHZiX21mZV93YWl0X3RpbWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGR2Yl9tZmVfd2FpdF90aW1lLCAiV2FpdCB1cCB0byA8bWZlX3dhaXRfdGltZT4gc2Vjb25kcyBvbiBvcGVuKCkgZm9yIG11bHRpLWZyb250ZW5kIHRvIGJlY29tZSBhdmFpbGFibGUgKGRlZmF1bHQ6NSBzZWNvbmRzKSIpOwogCiAjZGVmaW5lIGRwcmludGsgaWYgKGR2Yl9mcm9udGVuZF9kZWJ1ZykgcHJpbnRrCiAKQEAgLTIxMiw4ICsyMTUsOSBAQAogCiBzdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlkcHJpbnRrICgiRFZCOiBpbml0aWFsaXNpbmcgZnJvbnRlbmQgJWkgKCVzKS4uLlxuIiwKKwlkcHJpbnRrICgiRFZCOiBpbml0aWFsaXNpbmcgYWRhcHRlciAlaSBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAogCQkgZmUtPmR2Yi0+bnVtLAorCQkgZmUtPmlkLAogCQkgZmUtPm9wcy5pbmZvLm5hbWUpOwogCiAJaWYgKGZlLT5vcHMuaW5pdCkKQEAgLTY4Niw3ICs2OTAsNyBAQAogCW1iKCk7CiAKIAlmZV90aHJlYWQgPSBrdGhyZWFkX3J1bihkdmJfZnJvbnRlbmRfdGhyZWFkLCBmZSwKLQkJImtkdmItZmUtJWkiLCBmZS0+ZHZiLT5udW0pOworCQkia2R2Yi1hZC0laS1mZS0laSIsIGZlLT5kdmItPm51bSxmZS0+aWQpOwogCWlmIChJU19FUlIoZmVfdGhyZWFkKSkgewogCQlyZXQgPSBQVFJfRVJSKGZlX3RocmVhZCk7CiAJCXByaW50aygiZHZiX2Zyb250ZW5kX3N0YXJ0OiBmYWlsZWQgdG8gc3RhcnQga3RocmVhZCAoJWQpXG4iLCByZXQpOwpAQCAtNzEwLDggKzcxNCw4IEBACiAJCSpmcmVxX21heCA9IG1pbihmZS0+b3BzLmluZm8uZnJlcXVlbmN5X21heCwgZmUtPm9wcy50dW5lcl9vcHMuaW5mby5mcmVxdWVuY3lfbWF4KTsKIAogCWlmICgqZnJlcV9taW4gPT0gMCB8fCAqZnJlcV9tYXggPT0gMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBmcm9udGVuZCAldSBmcmVxdWVuY3kgbGltaXRzIHVuZGVmaW5lZCAtIGZpeCB0aGUgZHJpdmVyXG4iLAotCQkgICAgICAgZmUtPmR2Yi0+bnVtKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICV1IGZyZXF1ZW5jeSBsaW1pdHMgdW5kZWZpbmVkIC0gZml4IHRoZSBkcml2ZXJcbiIsCisJCSAgICAgICBmZS0+ZHZiLT5udW0sZmUtPmlkKTsKIH0KIAogc3RhdGljIGludCBkdmJfZnJvbnRlbmRfY2hlY2tfcGFyYW1ldGVycyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKQEAgLTcyNCw4ICs3MjgsOCBAQAogCWR2Yl9mcm9udGVuZF9nZXRfZnJlcXVlbnlfbGltaXRzKGZlLCAmZnJlcV9taW4sICZmcmVxX21heCk7CiAJaWYgKChmcmVxX21pbiAmJiBwYXJtcy0+ZnJlcXVlbmN5IDwgZnJlcV9taW4pIHx8CiAJICAgIChmcmVxX21heCAmJiBwYXJtcy0+ZnJlcXVlbmN5ID4gZnJlcV9tYXgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogZnJvbnRlbmQgJXUgZnJlcXVlbmN5ICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKLQkJICAgICAgIGZlLT5kdmItPm51bSwgcGFybXMtPmZyZXF1ZW5jeSwgZnJlcV9taW4sIGZyZXFfbWF4KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICVpIGZyZXF1ZW5jeSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCisJCSAgICAgICBmZS0+ZHZiLT5udW0sIGZlLT5pZCwgcGFybXMtPmZyZXF1ZW5jeSwgZnJlcV9taW4sIGZyZXFfbWF4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03MzUsOCArNzM5LDggQEAKIAkJICAgICBwYXJtcy0+dS5xcHNrLnN5bWJvbF9yYXRlIDwgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21pbikgfHwKIAkJICAgIChmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4ICYmCiAJCSAgICAgcGFybXMtPnUucXBzay5zeW1ib2xfcmF0ZSA+IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGZyb250ZW5kICV1IHN5bWJvbCByYXRlICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKLQkJCSAgICAgICBmZS0+ZHZiLT5udW0sIHBhcm1zLT51LnFwc2suc3ltYm9sX3JhdGUsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgc3ltYm9sIHJhdGUgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAorCQkJICAgICAgIGZlLT5kdmItPm51bSwgZmUtPmlkLCBwYXJtcy0+dS5xcHNrLnN5bWJvbF9yYXRlLAogCQkJICAgICAgIGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4sIGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTc0Niw4ICs3NTAsOCBAQAogCQkgICAgIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSA8IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4pIHx8CiAJCSAgICAoZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCAmJgogCQkgICAgIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSA+IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGZyb250ZW5kICV1IHN5bWJvbCByYXRlICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKLQkJCSAgICAgICBmZS0+ZHZiLT5udW0sIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogYWRhcHRlciAlaSBmcm9udGVuZCAlaSBzeW1ib2wgcmF0ZSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCisJCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBmZS0+aWQsIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSwKIAkJCSAgICAgICBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluLCBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC04OTksMzAgKzkwMywzMCBAQAogCWludCBpOwogCiAJaWYgKHR2cC0+Y21kIDw9IDAgfHwgdHZwLT5jbWQgPiBEVFZfTUFYX0NPTU1BTkQpIHsKLQkJcHJpbnRrKCIlczogdHZwLmNtZCA9IDB4JTA4eCAodW5kZWZpbmVkL3Vua25vd24vaW52YWxpZClcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0dnAuY21kID0gMHglMDh4IHVuZGVmaW5lZFxuIiwKIAkJCV9fZnVuY19fLCB0dnAtPmNtZCk7CiAJCXJldHVybjsKIAl9CiAKLQlwcmludGsoIiVzKCkgdHZwLmNtZCAgICA9IDB4JTA4eCAoJXMpXG4iCi0JCSxfX0ZVTkNUSU9OX18KKwlkcHJpbnRrKCIlcygpIHR2cC5jbWQgICAgPSAweCUwOHggKCVzKVxuIgorCQksX19mdW5jX18KIAkJLHR2cC0+Y21kCiAJCSxkdHZfY21kc1sgdHZwLT5jbWQgXS5uYW1lKTsKIAogCWlmKGR0dl9jbWRzWyB0dnAtPmNtZCBdLmJ1ZmZlcikgewogCi0JCXByaW50aygiJXMoKSB0dnAudS5idWZmZXIubGVuID0gMHglMDJ4XG4iCi0JCQksX19GVU5DVElPTl9fCisJCWRwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmxlbiA9IDB4JTAyeFxuIgorCQkJLF9fZnVuY19fCiAJCQksdHZwLT51LmJ1ZmZlci5sZW4pOwogCiAJCWZvcihpID0gMDsgaSA8IHR2cC0+dS5idWZmZXIubGVuOyBpKyspCi0JCQlwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmRhdGFbMHglMDJ4XSA9IDB4JTAyeFxuIgotCQkJCSxfX0ZVTkNUSU9OX18KKwkJCWRwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmRhdGFbMHglMDJ4XSA9IDB4JTAyeFxuIgorCQkJCSxfX2Z1bmNfXwogCQkJCSxpCiAJCQkJLHR2cC0+dS5idWZmZXIuZGF0YVtpXSk7CiAKIAl9IGVsc2UKLQkJcHJpbnRrKCIlcygpIHR2cC51LmRhdGEgPSAweCUwOHhcbiIsIF9fRlVOQ1RJT05fXywgdHZwLT51LmRhdGEpOworCQlkcHJpbnRrKCIlcygpIHR2cC51LmRhdGEgPSAweCUwOHhcbiIsIF9fZnVuY19fLCB0dnAtPnUuZGF0YSk7CiB9CiAKIGludCBpc19sZWdhY3lfZGVsaXZlcnlfc3lzdGVtKGZlX2RlbGl2ZXJ5X3N5c3RlbV90IHMpCkBAIC05NDIsOCArOTQ2LDYgQEAKIHsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCWMtPmZyZXF1ZW5jeSA9IHAtPmZyZXF1ZW5jeTsKIAljLT5pbnZlcnNpb24gPSBwLT5pbnZlcnNpb247CiAKQEAgLTk5OCwyNyArMTAwMCwyNSBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwID0gJmZlcHJpdi0+cGFyYW1ldGVyczsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCXAtPmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKIAlwLT5pbnZlcnNpb24gPSBjLT5pbnZlcnNpb247CiAKIAlzd2l0Y2ggKGZlLT5vcHMuaW5mby50eXBlKSB7CiAJY2FzZSBGRV9RUFNLOgotCQlwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFQU0sgcmVxXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIFByZXBhcmluZyBRUFNLIHJlcVxuIiwgX19mdW5jX18pOwogCQlwLT51LnFwc2suc3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKIAkJcC0+dS5xcHNrLmZlY19pbm5lciA9IGMtPmZlY19pbm5lcjsKIAkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlM7CiAJCWJyZWFrOwogCWNhc2UgRkVfUUFNOgotCQlwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFBTSByZXFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFBTSByZXFcbiIsIF9fZnVuY19fKTsKIAkJcC0+dS5xYW0uc3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKIAkJcC0+dS5xYW0uZmVjX2lubmVyID0gYy0+ZmVjX2lubmVyOwogCQlwLT51LnFhbS5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKIAkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQkNfQU5ORVhfQUM7CiAJCWJyZWFrOwogCWNhc2UgRkVfT0ZETToKLQkJcHJpbnRrKCIlcygpIFByZXBhcmluZyBPRkRNIHJlcVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZHByaW50aygiJXMoKSBQcmVwYXJpbmcgT0ZETSByZXFcbiIsIF9fZnVuY19fKTsKIAkJaWYgKGMtPmJhbmR3aWR0aF9oeiA9PSA2MDAwMDAwKQogCQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKIAkJZWxzZSBpZiAoYy0+YmFuZHdpZHRoX2h6ID09IDcwMDAwMDApCkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCVDsKIAkJYnJlYWs7CiAJY2FzZSBGRV9BVFNDOgotCQlwcmludGsoIiVzKCkgUHJlcGFyaW5nIFZTQiByZXFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIFZTQiByZXFcbiIsIF9fZnVuY19fKTsKIAkJcC0+dS52c2IubW9kdWxhdGlvbiA9IGMtPm1vZHVsYXRpb247CiAJCWlmICgoYy0+bW9kdWxhdGlvbiA9PSBWU0JfOCkgfHwgKGMtPm1vZHVsYXRpb24gPT0gVlNCXzE2KSkKIAkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19BVFNDOwpAQCAtMTA1NSwxNCArMTA1NSwxMyBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwID0gJmZlcHJpdi0+cGFyYW1ldGVyczsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCXAtPmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKIAlwLT5pbnZlcnNpb24gPSBjLT5pbnZlcnNpb247CiAKIAlzd2l0Y2goYy0+bW9kdWxhdGlvbikgewogCWNhc2UgUFNLXzg6CiAJY2FzZSBBUFNLXzE2OgorCWNhc2UgQVBTS18zMjoKIAljYXNlIFFQU0s6CiAJCXAtPnUucXBzay5zeW1ib2xfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOwogCQlwLT51LnFwc2suZmVjX2lubmVyID0gYy0+ZmVjX2lubmVyOwpAQCAtMTA4OSwxOSArMTA4OCwxNyBAQAogewogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCi0JcHJpbnRrKCIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJLyogRm9yIGxlZ2FjeSBkZWxpdmVyeSBzeXN0ZW1zIHdlIGRvbid0IG5lZWQgdGhlIGRlbGl2ZXJ5X3N5c3RlbSB0bwogCSAqIGJlIHNwZWNpZmllZCwgYnV0IHdlIHBvcHVsYXRlIHRoZSBvbGRlciBzdHJ1Y3R1cmVzIGZyb20gdGhlIGNhY2hlCiAJICogc28gd2UgY2FuIGNhbGwgc2V0X2Zyb250ZW5kIG9uIG9sZGVyIGRyaXZlcnMuCiAJICovCiAJaWYoaXNfbGVnYWN5X2RlbGl2ZXJ5X3N5c3RlbShjLT5kZWxpdmVyeV9zeXN0ZW0pKSB7CiAKLQkJcHJpbnRrKCIlcygpIGxlZ2FjeSwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGMtPm1vZHVsYXRpb24pOworCQlkcHJpbnRrKCIlcygpIGxlZ2FjeSwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CiAJCWR0dl9wcm9wZXJ0eV9sZWdhY3lfcGFyYW1zX3N5bmMoZmUpOwogCiAJfSBlbHNlIHsKLQkJcHJpbnRrKCIlcygpIGFkdiwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGMtPm1vZHVsYXRpb24pOworCQlkcHJpbnRrKCIlcygpIGFkdiwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CiAKIAkJLyogRm9yIGFkdmFuY2VkIGRlbGl2ZXJ5IHN5c3RlbXMgLyBtb2R1bGF0aW9uIHR5cGVzIC4uLgogCQkgKiB3ZSBzZWVkIHRoZSBsZWNhY3kgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgc3RydWN0dXJlCkBAIC0xMTIzLDggKzExMjAsNiBAQAogewogCWludCByID0gMDsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCWR0dl9wcm9wZXJ0eV9kdW1wKHR2cCk7CiAKIAkvKiBBbGxvdyB0aGUgZnJvbnRlbmQgdG8gdmFsaWRhdGUgaW5jb21pbmcgcHJvcGVydGllcyAqLwpAQCAtMTE5OCw3ICsxMTkzLDYgQEAKIHsKIAlpbnQgciA9IDA7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKLQlwcmludGsoIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAJZHR2X3Byb3BlcnR5X2R1bXAodHZwKTsKIAogCS8qIEFsbG93IHRoZSBmcm9udGVuZCB0byB2YWxpZGF0ZSBpbmNvbWluZyBwcm9wZXJ0aWVzICovCkBAIC0xMjEzLDcgKzEyMDcsNyBAQAogCQkvKiBSZXNldCBhIGNhY2hlIG9mIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGZyb250ZW5kIGhlcmUuIFRoaXMgZG9lcwogCQkgKiBub3QgZWZmZWN0IGhhcmR3YXJlLgogCQkgKi8KLQkJcHJpbnRrKCIlcygpIEZsdXNoaW5nIHByb3BlcnR5IGNhY2hlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIEZsdXNoaW5nIHByb3BlcnR5IGNhY2hlXG4iLCBfX2Z1bmNfXyk7CiAJCW1lbXNldCgmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZSwgMCwgc2l6ZW9mKHN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcykpOwogCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN0YXRlID0gdHZwLT5jbWQ7CiAJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX1VOREVGSU5FRDsKQEAgLTEyMjQsNyArMTIxOCw3IEBACiAJCSAqIGlvY3RsLgogCQkgKi8KIAkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9IHR2cC0+Y21kOwotCQlwcmludGsoIiVzKCkgRmluYWxpc2VkIHByb3BlcnR5IGNhY2hlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIEZpbmFsaXNlZCBwcm9wZXJ0eSBjYWNoZVxuIiwgX19mdW5jX18pOwogCQlkdHZfcHJvcGVydHlfY2FjaGVfc3VibWl0KGZlKTsKIAogCQlyIHw9IGR2Yl9mcm9udGVuZF9pb2N0bF9sZWdhY3koaW5vZGUsIGZpbGUsIEZFX1NFVF9GUk9OVEVORCwKQEAgLTEzMzUsMTIgKzEzMjksMTAgQEAKIAlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYoY21kID09IEZFX1NFVF9QUk9QRVJUWSkgewotCQlwcmludGsoIiVzKCkgRkVfU0VUX1BST1BFUlRZXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJCXR2cHMgPSAoc3RydWN0IGR0dl9wcm9wZXJ0aWVzIF9fdXNlciAqKXBhcmc7CiAKLQkJcHJpbnRrKCIlcygpIHByb3BlcnRpZXMubnVtID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgdHZwcy0+bnVtKTsKLQkJcHJpbnRrKCIlcygpIHByb3BlcnRpZXMucHJvcHMgPSAlcFxuIiwgX19GVU5DVElPTl9fLCB0dnBzLT5wcm9wcyk7CisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5udW0gPSAlZFxuIiwgX19mdW5jX18sIHR2cHMtPm51bSk7CisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5wcm9wcyA9ICVwXG4iLCBfX2Z1bmNfXywgdHZwcy0+cHJvcHMpOwogCiAJCS8qIFB1dCBhbiBhcmJpdHJhcnkgbGltaXQgb24gdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGNhbgogCQkgKiBiZSBzZW50IGF0IG9uY2UgKi8KQEAgLTEzNjQsMTggKzEzNTYsMTYgQEAKIAkJCWVyciB8PSAodHZwICsgaSktPnJlc3VsdDsKIAkJfQogCi0JCWlmKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPT0gRFRWX1RVTkUpIHsKLQkJCXByaW50aygiJXMoKSBQcm9wZXJ0eSBjYWNoZSBpcyBmdWxsLCB0dW5pbmdcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCX0KKwkJaWYoZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9PSBEVFZfVFVORSkKKwkJCWRwcmludGsoIiVzKCkgUHJvcGVydHkgY2FjaGUgaXMgZnVsbCwgdHVuaW5nXG4iLCBfX2Z1bmNfXyk7CiAKIAl9IGVsc2UKIAlpZihjbWQgPT0gRkVfR0VUX1BST1BFUlRZKSB7Ci0JCXByaW50aygiJXMoKSBGRV9HRVRfUFJPUEVSVFlcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkJdHZwcyA9IChzdHJ1Y3QgZHR2X3Byb3BlcnRpZXMgX191c2VyICopcGFyZzsKIAotCQlwcmludGsoIiVzKCkgcHJvcGVydGllcy5udW0gPSAlZFxuIiwgX19GVU5DVElPTl9fLCB0dnBzLT5udW0pOwotCQlwcmludGsoIiVzKCkgcHJvcGVydGllcy5wcm9wcyA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sIHR2cHMtPnByb3BzKTsKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLm51bSA9ICVkXG4iLCBfX2Z1bmNfXywgdHZwcy0+bnVtKTsKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLnByb3BzID0gJXBcbiIsIF9fZnVuY19fLCB0dnBzLT5wcm9wcyk7CiAKIAkJLyogUHV0IGFuIGFyYml0cmFyeSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgY2FuCiAJCSAqIGJlIHNlbnQgYXQgb25jZSAqLwpAQCAtMTcwNCwxMyArMTY5NCw1MyBAQAogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBkdmJkZXYtPnByaXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmZS0+ZHZiOwogCWludCByZXQ7CiAKIAlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKIAorCWlmIChhZGFwdGVyLT5tZmVfc2hhcmVkKSB7CisJCW11dGV4X2xvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisKKwkJaWYgKGFkYXB0ZXItPm1mZV9kdmJkZXYgPT0gTlVMTCkKKwkJCWFkYXB0ZXItPm1mZV9kdmJkZXYgPSBkdmJkZXY7CisKKwkJZWxzZSBpZiAoYWRhcHRlci0+bWZlX2R2YmRldiAhPSBkdmJkZXYpIHsKKwkJCXN0cnVjdCBkdmJfZGV2aWNlCisJCQkJKm1mZWRldiA9IGFkYXB0ZXItPm1mZV9kdmJkZXY7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kCisJCQkJKm1mZSA9IG1mZWRldi0+cHJpdjsKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZQorCQkJCSptZmVwcml2ID0gbWZlLT5mcm9udGVuZF9wcml2OworCQkJaW50IG1mZXJldHJ5ID0gKGR2Yl9tZmVfd2FpdF90aW1lIDw8IDEpOworCisJCQltdXRleF91bmxvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisJCQl3aGlsZSAobWZlcmV0cnktLSAmJiAobWZlZGV2LT51c2VycyAhPSAtMSB8fAorCQkJCQltZmVwcml2LT50aHJlYWQgIT0gTlVMTCkpIHsKKwkJCQlpZihtc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApKSB7CisJCQkJCWlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9CisKKwkJCW11dGV4X2xvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisJCQlpZihhZGFwdGVyLT5tZmVfZHZiZGV2ICE9IGR2YmRldikgeworCQkJCW1mZWRldiA9IGFkYXB0ZXItPm1mZV9kdmJkZXY7CisJCQkJbWZlID0gbWZlZGV2LT5wcml2OworCQkJCW1mZXByaXYgPSBtZmUtPmZyb250ZW5kX3ByaXY7CisJCQkJaWYgKG1mZWRldi0+dXNlcnMgIT0gLTEgfHwKKwkJCQkJCW1mZXByaXYtPnRocmVhZCAhPSBOVUxMKSB7CisJCQkJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKKwkJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCQl9CisJCQkJYWRhcHRlci0+bWZlX2R2YmRldiA9IGR2YmRldjsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChkdmJkZXYtPnVzZXJzID09IC0xICYmIGZlLT5vcHMudHNfYnVzX2N0cmwpIHsKIAkJaWYgKChyZXQgPSBmZS0+b3BzLnRzX2J1c19jdHJsKGZlLCAxKSkgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZXJyMDsKIAl9CiAKIAlpZiAoKHJldCA9IGR2Yl9nZW5lcmljX29wZW4gKGlub2RlLCBmaWxlKSkgPCAwKQpAQCAtMTczMCw2ICsxNzYwLDggQEAKIAkJZmVwcml2LT5ldmVudHMuZXZlbnRyID0gZmVwcml2LT5ldmVudHMuZXZlbnR3ID0gMDsKIAl9CiAKKwlpZiAoYWRhcHRlci0+bWZlX3NoYXJlZCkKKwkJbXV0ZXhfdW5sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOwogCXJldHVybiByZXQ7CiAKIGVycjI6CkBAIC0xNzM3LDYgKzE3NjksOSBAQAogZXJyMToKIAlpZiAoZHZiZGV2LT51c2VycyA9PSAtMSAmJiBmZS0+b3BzLnRzX2J1c19jdHJsKQogCQlmZS0+b3BzLnRzX2J1c19jdHJsKGZlLCAwKTsKK2VycjA6CisJaWYgKGFkYXB0ZXItPm1mZV9zaGFyZWQpCisJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODA2LDggKzE4NDEsOSBAQAogCWZlLT5kdmIgPSBkdmI7CiAJZmVwcml2LT5pbnZlcnNpb24gPSBJTlZFUlNJT05fT0ZGOwogCi0JcHJpbnRrICgiRFZCOiByZWdpc3RlcmluZyBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAorCXByaW50ayAoIkRWQjogcmVnaXN0ZXJpbmcgYWRhcHRlciAlaSBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAogCQlmZS0+ZHZiLT5udW0sCisJCWZlLT5pZCwKIAkJZmUtPm9wcy5pbmZvLm5hbWUpOwogCiAJZHZiX3JlZ2lzdGVyX2RldmljZSAoZmUtPmR2YiwgJmZlcHJpdi0+ZHZiZGV2LCAmZHZiZGV2X3RlbXBsYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAppbmRleCAzMDU1MzAxLi5kYjRhNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaApAQCAtMjIyLDYgKzIyMiw3IEBACiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzIGR0dl9wcm9wZXJ0eV9jYWNoZTsKICNkZWZpbmUgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiAwCiAJaW50ICgqY2FsbGJhY2spKHZvaWQgKmFkYXB0ZXJfcHJpdiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IGFyZyk7CisJaW50IGlkOwogfTsKIAogZXh0ZXJuIGludCBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9hZGFwdGVyICpkdmIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCmluZGV4IDY2NTc3NmQuLmExMTM3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCkBAIC0zMjYsNiArMzI2LDkgQEAKIAlhZGFwLT5uYW1lID0gbmFtZTsKIAlhZGFwLT5tb2R1bGUgPSBtb2R1bGU7CiAJYWRhcC0+ZGV2aWNlID0gZGV2aWNlOworCWFkYXAtPm1mZV9zaGFyZWQgPSAwOworCWFkYXAtPm1mZV9kdmJkZXYgPSBOVUxMOworCW11dGV4X2luaXQgKCZhZGFwLT5tZmVfbG9jayk7CiAKIAlsaXN0X2FkZF90YWlsICgmYWRhcC0+bGlzdF9oZWFkLCAmZHZiX2FkYXB0ZXJfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKaW5kZXggODlkMTJkYy4uNTc0ZTMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKQEAgLTYyLDYgKzYyLDEwIEBACiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCisJaW50IG1mZV9zaGFyZWQ7CQkJLyogaW5kaWNhdGVzIG11dHVhbGx5IGV4Y2x1c2l2ZSBmcm9udGVuZHMgKi8KKwlzdHJ1Y3QgZHZiX2RldmljZSAqbWZlX2R2YmRldjsJLyogZnJvbnRlbmQgZGV2aWNlIGluIHVzZSAqLworCXN0cnVjdCBtdXRleCBtZmVfbG9jazsJCS8qIGFjY2VzcyBsb2NrIGZvciB0aHJlYWQgY3JlYXRpb24gKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKaW5kZXggY2E1M2RmNi4uNjI4NmZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCkBAIC00MjIsNiArNDIyLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2hhcnBfejAxOTRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLmluaXR0YWIgPSBzaGFycF96MDE5NGFfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDEsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubG9ja19vdXRwdXQgPSBTVFYwMjk5X0xPQ0tPVVRQVVRfMSwKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgZHcyMTA0X2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NTUsCiAJLm1wZ19jbGtfcG9zX3BvbCA9IDB4MDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwppbmRleCA5NDMwZTAzLi41ZDFhYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKQEAgLTM0LDEzICszNCwxMiBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImN4MjI3MDIuaCIKIAotCiBzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSB7CiAKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKIAogCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KLQljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcqIGNvbmZpZzsKKwljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgKmNvbmZpZzsKIAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CiAKQEAgLTQ5LDEwICs0OCwxMyBAQAogfTsKIAogc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpOworCiAjZGVmaW5lIGRwcmludGsJaWYgKGRlYnVnKSBwcmludGsKIAogLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGluaXRpYWxpc2UgdGhlIGRlbW9kICovCi1zdGF0aWMgdTggaW5pdF90YWIgW10gPSB7CitzdGF0aWMgdTggaW5pdF90YWJbXSA9IHsKIAkweDAwLCAweDAwLCAvKiBTdG9wIGFxdWlzaXRpb24gKi8KIAkweDBCLCAweDA2LAogCTB4MDksIDB4MDEsCkBAIC04MCw2NSArODIsNjcgQEAKIAkweGZkLCAweDAwLAogfTsKIAotc3RhdGljIGludCBjeDIyNzAyX3dyaXRlcmVnIChzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKK3N0YXRpYyBpbnQgY3gyMjcwMl93cml0ZXJlZyhzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKIHsKIAlpbnQgcmV0OwotCXU4IGJ1ZiBbXSA9IHsgcmVnLCBkYXRhIH07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKIAogCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKIAogCWlmIChyZXQgIT0gMSkKLQkJcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBlcnJvciAocmVnID09IDB4JTAyeCwgdmFsID09IDB4JTAyeCwgcmV0ID09ICVpKVxuIiwKIAkJCV9fZnVuY19fLCByZWcsIGRhdGEsIHJldCk7CiAKIAlyZXR1cm4gKHJldCAhPSAxKSA/IC0xIDogMDsKIH0KIAotc3RhdGljIHU4IGN4MjI3MDJfcmVhZHJlZyAoc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlLCB1OCByZWcpCitzdGF0aWMgdTggY3gyMjcwMl9yZWFkcmVnKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgdTggcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyB9OwotCXU4IGIxIFtdID0geyAwIH07CisJdTggYjBbXSA9IHsgcmVnIH07CisJdTggYjFbXSA9IHsgMCB9OwogCi0Jc3RydWN0IGkyY19tc2cgbXNnIFtdID0gewotCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAotCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBiMSwgLmxlbiA9IDEgfSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwgLmxlbiA9IDEgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLCAubGVuID0gMSB9IH07CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKIAogCWlmIChyZXQgIT0gMikKLQkJcHJpbnRrKCIlczogcmVhZHJlZyBlcnJvciAocmV0ID09ICVpKVxuIiwgX19mdW5jX18sIHJldCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlYWRyZWcgZXJyb3IgKHJldCA9PSAlaSlcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAogCXJldHVybiBiMVswXTsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3NldF9pbnZlcnNpb24gKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgaW50IGludmVyc2lvbikKK3N0YXRpYyBpbnQgY3gyMjcwMl9zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgaW50IGludmVyc2lvbikKIHsKIAl1OCB2YWw7CiAKIAlzd2l0Y2ggKGludmVyc2lvbikgewotCi0JCWNhc2UgSU5WRVJTSU9OX0FVVE86Ci0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkJY2FzZSBJTlZFUlNJT05fT046Ci0JCQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDBDKTsKLQkJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwQywgdmFsIHwgMHgwMSk7Ci0KLQkJY2FzZSBJTlZFUlNJT05fT0ZGOgotCQkJdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwQyk7Ci0JCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEMsIHZhbCAmIDB4ZmUpOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQorCWNhc2UgSU5WRVJTSU9OX0FVVE86CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwljYXNlIElOVkVSU0lPTl9PTjoKKwkJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIHZhbCB8IDB4MDEpOworCWNhc2UgSU5WRVJTSU9OX09GRjoKKwkJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIHZhbCAmIDB4ZmUpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogfQogCiAvKiBSZXRyaWV2ZSB0aGUgZGVtb2Qgc2V0dGluZ3MgKi8KLXN0YXRpYyBpbnQgY3gyMjcwMl9nZXRfdHBzIChzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDIyNzAyX2dldF90cHMoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLAorCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpwKQogewogCXU4IHZhbDsKIApAQCAtMTQ2LDE4MCArMTUwLDI4MSBAQAogCWlmICghKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQSkgJiAweDIwKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDAxKTsKLQlzd2l0Y2goICh2YWwmMHgxOCk+PjMpIHsKLQkJY2FzZSAwOiBwLT5jb25zdGVsbGF0aW9uID0gICBRUFNLOyBicmVhazsKLQkJY2FzZSAxOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzE2OyBicmVhazsKLQkJY2FzZSAyOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OyBicmVhazsKKwl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MDEpOworCXN3aXRjaCAoKHZhbCAmIDB4MTgpID4+IDMpIHsKKwljYXNlIDA6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRUFNLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsKKwkJYnJlYWs7CiAJfQotCXN3aXRjaCggdmFsJjB4MDcgKSB7Ci0JCWNhc2UgMDogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7IGJyZWFrOwotCQljYXNlIDE6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8xOyBicmVhazsKLQkJY2FzZSAyOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfMjsgYnJlYWs7Ci0JCWNhc2UgMzogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzQ7IGJyZWFrOworCXN3aXRjaCAodmFsICYgMHgwNykgeworCWNhc2UgMDoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzQ7CisJCWJyZWFrOwogCX0KIAogCi0JdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwMik7Ci0Jc3dpdGNoKCAodmFsJjB4MzgpPj4zICkgewotCQljYXNlIDA6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7IGJyZWFrOwotCQljYXNlIDE6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7IGJyZWFrOwotCQljYXNlIDI6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7IGJyZWFrOwotCQljYXNlIDM6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7IGJyZWFrOwotCQljYXNlIDQ6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7IGJyZWFrOworCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwMik7CisJc3dpdGNoICgodmFsICYgMHgzOCkgPj4gMykgeworCWNhc2UgMDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OworCQlicmVhazsKIAl9Ci0Jc3dpdGNoKCB2YWwmMHgwNyApIHsKLQkJY2FzZSAwOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOyBicmVhazsKLQkJY2FzZSAxOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOyBicmVhazsKLQkJY2FzZSAyOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OyBicmVhazsKLQkJY2FzZSAzOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OyBicmVhazsKLQkJY2FzZSA0OiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OyBicmVhazsKKwlzd2l0Y2ggKHZhbCAmIDB4MDcpIHsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQogCi0KLQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDAzKTsKLQlzd2l0Y2goICh2YWwmMHgwYyk+PjIgKSB7Ci0JCWNhc2UgMDogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOyBicmVhazsKLQkJY2FzZSAxOiBwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7IGJyZWFrOwotCQljYXNlIDI6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfODsgYnJlYWs7Ci0JCWNhc2UgMzogcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV80OyBicmVhazsKKwl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MDMpOworCXN3aXRjaCAoKHZhbCAmIDB4MGMpID4+IDIpIHsKKwljYXNlIDA6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzg7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzQ7CisJCWJyZWFrOwogCX0KLQlzd2l0Y2goIHZhbCYweDAzICkgewotCQljYXNlIDA6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7IGJyZWFrOwotCQljYXNlIDE6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7IGJyZWFrOworCXN3aXRjaCAodmFsICYgMHgwMykgeworCWNhc2UgMDoKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IGN4MjI3MDJfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlkcHJpbnRrICgiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOwogCWlmIChlbmFibGUpCi0JCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBEKSAmIDB4ZmUpOworCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwRCwKKwkJCWN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgJiAweGZlKTsKIAllbHNlCi0JCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBEKSB8IDEpOworCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwRCwKKwkJCWN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgfCAxKTsKIH0KIAogLyogVGFsayB0byB0aGUgZGVtb2QsIHNldCB0aGUgRkVDLCBHVUFSRCwgUUFNIHNldHRpbmdzIGV0YyAqLwotc3RhdGljIGludCBjeDIyNzAyX3NldF90cHMgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjI3MDJfc2V0X3RwcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJdTggdmFsOwotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKIAkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcCk7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCX0KIAogCS8qIHNldCBpbnZlcnNpb24gKi8KLQljeDIyNzAyX3NldF9pbnZlcnNpb24gKHN0YXRlLCBwLT5pbnZlcnNpb24pOworCWN4MjI3MDJfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKIAogCS8qIHNldCBiYW5kd2lkdGggKi8KLQlzd2l0Y2gocC0+dS5vZmRtLmJhbmR3aWR0aCkgeworCXN3aXRjaCAocC0+dS5vZmRtLmJhbmR3aWR0aCkgewogCWNhc2UgQkFORFdJRFRIXzZfTUhaOgotCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4Y2YpIHwgMHgyMCApOworCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAorCQkJKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKSB8IDB4MjApOwogCQlicmVhazsKIAljYXNlIEJBTkRXSURUSF83X01IWjoKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKSB8IDB4MTAgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZikgfCAweDEwKTsKIAkJYnJlYWs7CiAJY2FzZSBCQU5EV0lEVEhfOF9NSFo6Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJjB4Y2YgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCWN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGJhbmR3aWR0aFxuIixfX2Z1bmNfXyk7CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGJhbmR3aWR0aFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQotCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsgLy90ZW1wIGhhY2sgYXMgbWFudWFsIG5vdCB3b3JraW5nCisJcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ19BVVRPOyAvKiB0ZW1wIGhhY2sgYXMgbWFudWFsIG5vdCB3b3JraW5nICovCiAKIAkvKiB1c2UgYXV0byBjb25maWd1cmF0aW9uPyAqLwotCWlmKChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uPT1ISUVSQVJDSFlfQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLmNvbnN0ZWxsYXRpb249PVFBTV9BVVRPKSB8fAotCSAgIChwLT51Lm9mZG0uY29kZV9yYXRlX0hQPT1GRUNfQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9MUD09RkVDX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbD09R1VBUkRfSU5URVJWQUxfQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlPT1UUkFOU01JU1NJT05fTU9ERV9BVVRPKSApIHsKKwlpZiAoKHAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPT0gSElFUkFSQ0hZX0FVVE8pIHx8CisJICAgKHAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID09IFFBTV9BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uY29kZV9yYXRlX0hQID09IEZFQ19BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uY29kZV9yYXRlX0xQID09IEZFQ19BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPT0gR1VBUkRfSU5URVJWQUxfQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8pKSB7CiAKIAkJLyogVFBTIFNvdXJjZSAtIHVzZSBoYXJkd2FyZSBkcml2ZW4gdmFsdWVzICovCiAJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDYsIDB4MTApOwogCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA3LCAweDkpOwogCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA4LCAweEMxKTsKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKSAmIDB4ZmMgKTsKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDAgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKQorCQkJJiAweGZjKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwKTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7IC8qIEJlZ2luIGFxdWlzaXRpb24gKi8KLQkJZHByaW50aygiJXM6IEF1dG9kZXRlY3RpbmdcbiIsX19mdW5jX18pOworCQlkcHJpbnRrKCIlczogQXV0b2RldGVjdGluZ1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBtYW51YWxseSBwcm9ncmFtbWVkIHZhbHVlcyAqLwotCXZhbD0wOwotCXN3aXRjaChwLT51Lm9mZG0uY29uc3RlbGxhdGlvbikgewotCQljYXNlICAgUVBTSzogdmFsID0gKHZhbCYweGU3KTsgYnJlYWs7Ci0JCWNhc2UgUUFNXzE2OiB2YWwgPSAodmFsJjB4ZTcpfDB4MDg7IGJyZWFrOwotCQljYXNlIFFBTV82NDogdmFsID0gKHZhbCYweGU3KXwweDEwOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBjb25zdGVsbGF0aW9uXG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXZhbCA9IDA7CisJc3dpdGNoIChwLT51Lm9mZG0uY29uc3RlbGxhdGlvbikgeworCWNhc2UgUVBTSzoKKwkJdmFsID0gKHZhbCAmIDB4ZTcpOworCQlicmVhazsKKwljYXNlIFFBTV8xNjoKKwkJdmFsID0gKHZhbCAmIDB4ZTcpIHwgMHgwODsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJCXZhbCA9ICh2YWwgJiAweGU3KSB8IDB4MTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGNvbnN0ZWxsYXRpb25cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXN3aXRjaChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uKSB7Ci0JCWNhc2UgSElFUkFSQ0hZX05PTkU6IHZhbCA9ICh2YWwmMHhmOCk7IGJyZWFrOwotCQljYXNlICAgIEhJRVJBUkNIWV8xOiB2YWwgPSAodmFsJjB4ZjgpfDE7IGJyZWFrOwotCQljYXNlICAgIEhJRVJBUkNIWV8yOiB2YWwgPSAodmFsJjB4ZjgpfDI7IGJyZWFrOwotCQljYXNlICAgIEhJRVJBUkNIWV80OiB2YWwgPSAodmFsJjB4ZjgpfDM7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGhpZXJhcmNoeVxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24pIHsKKwljYXNlIEhJRVJBUkNIWV9OT05FOgorCQl2YWwgPSAodmFsICYgMHhmOCk7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzE6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDE7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzI6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDI7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzQ6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGhpZXJhcmNoeVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MDYsIHZhbCk7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwNiwgdmFsKTsKIAotCXZhbD0wOwotCXN3aXRjaChwLT51Lm9mZG0uY29kZV9yYXRlX0hQKSB7Ci0JCWNhc2UgRkVDX05PTkU6Ci0JCWNhc2UgRkVDXzFfMjogdmFsID0gKHZhbCYweGM3KTsgYnJlYWs7Ci0JCWNhc2UgRkVDXzJfMzogdmFsID0gKHZhbCYweGM3KXwweDA4OyBicmVhazsKLQkJY2FzZSBGRUNfM180OiB2YWwgPSAodmFsJjB4YzcpfDB4MTA7IGJyZWFrOwotCQljYXNlIEZFQ181XzY6IHZhbCA9ICh2YWwmMHhjNyl8MHgxODsgYnJlYWs7Ci0JCWNhc2UgRkVDXzdfODogdmFsID0gKHZhbCYweGM3KXwweDIwOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBjb2RlX3JhdGVfSFBcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJdmFsID0gMDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5jb2RlX3JhdGVfSFApIHsKKwljYXNlIEZFQ19OT05FOgorCWNhc2UgRkVDXzFfMjoKKwkJdmFsID0gKHZhbCAmIDB4YzcpOworCQlicmVhazsKKwljYXNlIEZFQ18yXzM6CisJCXZhbCA9ICh2YWwgJiAweGM3KSB8IDB4MDg7CisJCWJyZWFrOworCWNhc2UgRkVDXzNfNDoKKwkJdmFsID0gKHZhbCAmIDB4YzcpIHwgMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQl2YWwgPSAodmFsICYgMHhjNykgfCAweDE4OworCQlicmVhazsKKwljYXNlIEZFQ183Xzg6CisJCXZhbCA9ICh2YWwgJiAweGM3KSB8IDB4MjA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGNvZGVfcmF0ZV9IUFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc3dpdGNoKHAtPnUub2ZkbS5jb2RlX3JhdGVfTFApIHsKLQkJY2FzZSBGRUNfTk9ORToKLQkJY2FzZSBGRUNfMV8yOiB2YWwgPSAodmFsJjB4ZjgpOyBicmVhazsKLQkJY2FzZSBGRUNfMl8zOiB2YWwgPSAodmFsJjB4ZjgpfDE7IGJyZWFrOwotCQljYXNlIEZFQ18zXzQ6IHZhbCA9ICh2YWwmMHhmOCl8MjsgYnJlYWs7Ci0JCWNhc2UgRkVDXzVfNjogdmFsID0gKHZhbCYweGY4KXwzOyBicmVhazsKLQkJY2FzZSBGRUNfN184OiB2YWwgPSAodmFsJjB4ZjgpfDQ7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGNvZGVfcmF0ZV9MUFxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5jb2RlX3JhdGVfTFApIHsKKwljYXNlIEZFQ19OT05FOgorCWNhc2UgRkVDXzFfMjoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpOworCQlicmVhazsKKwljYXNlIEZFQ18yXzM6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDE7CisJCWJyZWFrOworCWNhc2UgRkVDXzNfNDoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMjsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAzOworCQlicmVhazsKKwljYXNlIEZFQ183Xzg6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGNvZGVfcmF0ZV9MUFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MDcsIHZhbCk7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwNywgdmFsKTsKIAotCXZhbD0wOwotCXN3aXRjaChwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwpIHsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzMyOiB2YWwgPSAodmFsJjB4ZjMpOyBicmVhazsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OiB2YWwgPSAodmFsJjB4ZjMpfDB4MDQ7IGJyZWFrOwotCQljYXNlICBHVUFSRF9JTlRFUlZBTF8xXzg6IHZhbCA9ICh2YWwmMHhmMyl8MHgwODsgYnJlYWs7Ci0JCWNhc2UgIEdVQVJEX0lOVEVSVkFMXzFfNDogdmFsID0gKHZhbCYweGYzKXwweDBjOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBndWFyZF9pbnRlcnZhbFxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwl2YWwgPSAwOworCXN3aXRjaCAocC0+dS5vZmRtLmd1YXJkX2ludGVydmFsKSB7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzMyOgorCQl2YWwgPSAodmFsICYgMHhmMyk7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8xNjoKKwkJdmFsID0gKHZhbCAmIDB4ZjMpIHwgMHgwNDsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzg6CisJCXZhbCA9ICh2YWwgJiAweGYzKSB8IDB4MDg7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV80OgorCQl2YWwgPSAodmFsICYgMHhmMykgfCAweDBjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBndWFyZF9pbnRlcnZhbFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc3dpdGNoKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgewotCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOiB2YWwgPSAodmFsJjB4ZmMpOyBicmVhazsKLQkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzogdmFsID0gKHZhbCYweGZjKXwxOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCB0cmFuc21pc3Npb25fbW9kZVxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgeworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6CisJCXZhbCA9ICh2YWwgJiAweGZjKTsKKwkJYnJlYWs7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzoKKwkJdmFsID0gKHZhbCAmIDB4ZmMpIHwgMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgdHJhbnNtaXNzaW9uX21vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDgsIHZhbCk7Ci0JY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQikgJiAweGZjKSB8IDB4MDIgKTsKLQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCApOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsCisJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEIpICYgMHhmYykgfCAweDAyKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAorCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCk7CiAKIAkvKiBCZWdpbiBjaGFubmVsIGFxdWlzaXRpb24gKi8KIAljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDAxKTsKQEAgLTMyOSwxMDkgKzQzNCwxMTEgQEAKIAogLyogUmVzZXQgdGhlIGRlbW9kIGhhcmR3YXJlIGFuZCByZXNldCBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCiAgICB0byBhIGRlZmF1bHQgc3RhdGUuICovCi1zdGF0aWMgaW50IGN4MjI3MDJfaW5pdCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjI3MDJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDAwLCAweDAyKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDAyKTsKIAogCW1zbGVlcCgxMCk7CiAKLQlmb3IgKGk9MDsgaTxzaXplb2YoaW5pdF90YWIpOyBpKz0yKQotCQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgaW5pdF90YWJbaV0sIGluaXRfdGFiW2krMV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfdGFiKTsgaSArPSAyKQorCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCBpbml0X3RhYltpXSwgaW5pdF90YWJbaSArIDFdKTsKIAotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweGY4LCAoc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGUgPDwgMSkgJiAweDAyKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweGY4LCAoc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGUgPDwgMSkKKwkJJiAweDAyKTsKIAogCWN4MjI3MDJfaTJjX2dhdGVfY3RybChmZSwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IHJlZzBBOwogCXU4IHJlZzIzOwogCiAJKnN0YXR1cyA9IDA7CiAKLQlyZWcwQSA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MEEpOwotCXJlZzIzID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgyMyk7CisJcmVnMEEgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEEpOworCXJlZzIzID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDIzKTsKIAotCWRwcmludGsgKCIlczogc3RhdHVzIGRlbW9kPTB4JTAyeCBhZ2M9MHglMDJ4XG4iCi0JCSxfX2Z1bmNfXyxyZWcwQSxyZWcyMyk7CisJZHByaW50aygiJXM6IHN0YXR1cyBkZW1vZD0weCUwMnggYWdjPTB4JTAyeFxuIgorCQksIF9fZnVuY19fLCByZWcwQSwgcmVnMjMpOwogCi0JaWYocmVnMEEgJiAweDEwKSB7CisJaWYgKHJlZzBBICYgMHgxMCkgewogCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOwogCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwogCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOwogCX0KIAotCWlmKHJlZzBBICYgMHgyMCkKKwlpZiAocmVnMEEgJiAweDIwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOwogCi0JaWYocmVnMjMgPCAweGYwKQorCWlmIChyZWcyMyA8IDB4ZjApCiAJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogYmVyKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCWlmKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4RTQpICYgMHgwMikgeworCWlmIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4RTQpICYgMHgwMikgewogCQkvKiBSZWFsdGltZSBzdGF0aXN0aWNzICovCi0JCSpiZXIgPSAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3Ci0JCQl8IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERGKSYweDdGKTsKKwkJKmJlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNworCQkJfCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKSAmIDB4N0YpOwogCX0gZWxzZSB7CiAJCS8qIEF2ZXJhZ3RpbmUgc3RhdGlzdGljcyAqLwotCQkqYmVyID0gKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNwotCQkJfCBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERGKTsKKwkJKmJlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNworCQkJfCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REYpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc2lnbmFsX3N0cmVuZ3RoKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUxNiAqc2lnbmFsX3N0cmVuZ3RoKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJdTE2IHJzX2JlciA9IDA7Ci0JcnNfYmVyID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgyMyk7CisJcnNfYmVyID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDIzKTsKIAkqc2lnbmFsX3N0cmVuZ3RoID0gKHJzX2JlciA8PCA4KSB8IHJzX2JlcjsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCXUxNiByc19iZXI9MDsKLQlpZihjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKKwl1MTYgcnNfYmVyID0gMDsKKwlpZiAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKIAkJLyogUmVhbHRpbWUgc3RhdGlzdGljcyAqLwotCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3Ci0JCQl8IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERGKSYgMHg3Rik7CisJCXJzX2JlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNworCQkJfCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKSAmIDB4N0YpOwogCX0gZWxzZSB7CiAJCS8qIEF2ZXJhZ2luZSBzdGF0aXN0aWNzICovCi0JCXJzX2JlciA9IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDgKLQkJCXwgY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERik7CisJCXJzX2JlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgOAorCQkJfCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REYpOwogCX0KIAkqc25yID0gfnJzX2JlcjsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiB1Y2Jsb2NrcykKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJdTggX3VjYmxvY2tzOwogCiAJLyogUlMgVW5jb3JyZWN0YWJsZSBQYWNrZXQgQ291bnQgdGhlbiByZXNldCAqLwotCV91Y2Jsb2NrcyA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4RTMpOworCV91Y2Jsb2NrcyA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhFMyk7CiAJaWYgKHN0YXRlLT5wcmV2VUNCbG9ja3MgPCBfdWNibG9ja3MpCiAJCSp1Y2Jsb2NrcyA9IChfdWNibG9ja3MgLSBzdGF0ZS0+cHJldlVDQmxvY2tzKTsKIAllbHNlCkBAIC00NDEsMzQgKzU0OCwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjI3MDJfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCXU4IHJlZzBDID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwQyk7CisJdTggcmVnMEMgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpOwogCiAJcC0+aW52ZXJzaW9uID0gcmVnMEMgJiAweDEgPyBJTlZFUlNJT05fT04gOiBJTlZFUlNJT05fT0ZGOwotCXJldHVybiBjeDIyNzAyX2dldF90cHMgKHN0YXRlLCAmcC0+dS5vZmRtKTsKKwlyZXR1cm4gY3gyMjcwMl9nZXRfdHBzKHN0YXRlLCAmcC0+dS5vZmRtKTsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCitzdGF0aWMgaW50IGN4MjI3MDJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQogewogCXR1bmUtPm1pbl9kZWxheV9tcyA9IDEwMDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGN4MjI3MDJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyB2b2lkIGN4MjI3MDJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlrZnJlZShzdGF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjeDIyNzAyX29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWcsCi0JCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gTlVMTDsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBOVUxMOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KIAlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDIyNzAyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CkBAIC00ODUsNyArNTk0LDggQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDIyNzAyX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyMjcwMl9vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKQEAgLTQ5Myw2ICs2MDMsNyBAQAogCWtmcmVlKHN0YXRlKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woY3gyMjcwMl9hdHRhY2gpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyMjcwMl9vcHMgPSB7CiAKQEAgLTUyNSwxMSArNjM2LDYgQEAKIAkucmVhZF91Y2Jsb2NrcyA9IGN4MjI3MDJfcmVhZF91Y2Jsb2NrcywKIH07CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oIkNvbmV4YW50IENYMjI3MDIgRFZCLVQgRGVtb2R1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1FWFBPUlRfU1lNQk9MKGN4MjI3MDJfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCmluZGV4IGIxZTQ2NWMuLmYxNTRlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaApAQCAtMzAsOCArMzAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCBjeDIyNzAyX2NvbmZpZwoteworc3RydWN0IGN4MjI3MDJfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CiAKQEAgLTQxLDE2ICs0MCwxOSBAQAogCXU4IG91dHB1dF9tb2RlOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDJfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMikgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyX01PRFVMRSkgXAorCSYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDIyNzAyX2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDIyNzAyX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcqIGNvbmZpZywKLQkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjI3MDJfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19EVkJfQ1gyMjcwMgorI2VuZGlmCiAKLSNlbmRpZiAvLyBDWDIyNzAyX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKaW5kZXggZGViMzZmNC4uYjE0NGIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCkBAIC00MSwxMCArNDEsMTQgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJjeDI0MTE2LmgiCiAKLXN0YXRpYyBpbnQgZGVidWcgPSAwOworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJBY3RpdmF0ZXMgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0OjApIik7CisKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCiAJZG8geyBcCi0JCWlmIChkZWJ1ZykgcHJpbnRrICgiY3gyNDExNjogIiBhcmdzKTsgXAorCQlpZiAoZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0lORk8gImN4MjQxMTY6ICIgYXJncyk7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIENYMjQxMTZfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLWN4MjQxMTYuZnciCkBAIC02OCwxMyArNzIsMjAgQEAKICNkZWZpbmUgQ1gyNDExNl9SRUdfVUNCOCAgICAoMHhjYSkKICNkZWZpbmUgQ1gyNDExNl9SRUdfQ0xLRElWICAoMHhmMykKICNkZWZpbmUgQ1gyNDExNl9SRUdfUkFURURJViAoMHhmOSkKLSNkZWZpbmUgQ1gyNDExNl9SRUdfRkVDU1RBVFVTICgweDljKSAgICAvKiBjb25maWd1cmVkIGZlYyAobm90IHR1bmVkKSBvciBhY3R1YWwgRkVDICh0dW5lZCkgMT0xLzIgMj0yLzMgZXRjICovCisKKy8qIGNvbmZpZ3VyZWQgZmVjIChub3QgdHVuZWQpIG9yIGFjdHVhbCBGRUMgKHR1bmVkKSAxPTEvMiAyPTIvMyBldGMgKi8KKyNkZWZpbmUgQ1gyNDExNl9SRUdfRkVDU1RBVFVTICgweDljKQogCiAvKiBGRUNTVEFUVVMgYml0cyAqLwotI2RlZmluZSBDWDI0MTE2X0ZFQ19GRUNNQVNLICAgKDB4MWYpICAgIC8qIG1hc2sgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgZmVjIChub3QgdHVuZWQpIG9yIGFjdHVhbCBmZWMgKHR1bmVkKSAqLwotI2RlZmluZSBDWDI0MTE2X0ZFQ19EVkJTICAgICAgKDB4MjApICAgIC8qIFNlbGVjdCBEVkItUyBkZW1vZHVsYXRvciwgZWxzZSBEVkItUzIgKi8KKy8qIG1hc2sgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgZmVjIChub3QgdHVuZWQpIG9yIGFjdHVhbCBmZWMgKHR1bmVkKSAqLworI2RlZmluZSBDWDI0MTE2X0ZFQ19GRUNNQVNLICAgKDB4MWYpCisKKy8qIFNlbGVjdCBEVkItUyBkZW1vZHVsYXRvciwgZWxzZSBEVkItUzIgKi8KKyNkZWZpbmUgQ1gyNDExNl9GRUNfRFZCUyAgICAgICgweDIwKQogI2RlZmluZSBDWDI0MTE2X0ZFQ19VTktOT1dOICAgKDB4NDApICAgIC8qIFVua25vd24vdW51c2VkICovCi0jZGVmaW5lIENYMjQxMTZfRkVDX1BJTE9UICAgICAoMHg4MCkgICAgLyogUGlsb3QgbW9kZSByZXF1ZXN0ZWQgd2hlbiB0dW5pbmcgZWxzZSBhbHdheXMgcmVzZXQgd2hlbiB0dW5lZCAqLworCisvKiBQaWxvdCBtb2RlIHJlcXVlc3RlZCB3aGVuIHR1bmluZyBlbHNlIGFsd2F5cyByZXNldCB3aGVuIHR1bmVkICovCisjZGVmaW5lIENYMjQxMTZfRkVDX1BJTE9UICAgICAoMHg4MCkKIAogLyogYXJnIGJ1ZmZlciBzaXplICovCiAjZGVmaW5lIENYMjQxMTZfQVJHTEVOICgweDFlKQpAQCAtMTE2LDEyICsxMjcsMTcgQEAKIAogLyogRGlTRXFDIHRvbmUgYnVyc3QgKi8KIHN0YXRpYyBpbnQgdG9uZWJ1cnN0ID0gMTsKK21vZHVsZV9wYXJhbSh0b25lYnVyc3QsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRvbmVidXJzdCwgIkRpU0VxQyB0b25lYnVyc3QgMD1PRkYsIDE9VE9ORSBDQUNIRSwgIlwKKwkiMj1NRVNTQUdFIENBQ0hFIChkZWZhdWx0OjEpIik7CiAKIC8qIFNOUiBtZWFzdXJlbWVudHMgKi8KLXN0YXRpYyBpbnQgZXNub19zbnIgPSAwOworc3RhdGljIGludCBlc25vX3NucjsKK21vZHVsZV9wYXJhbShlc25vX3NuciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTTlIgcmV0dXJuIHVuaXRzLCAwPVBFUkNFTlRBR0UgMC0xMDAsICJcCisJIjE9RVNOTyhkYiAqIDEwKSAoZGVmYXVsdDowKSIpOwogCi1lbnVtIGNtZHMKLXsKK2VudW0gY21kcyB7CiAJQ01EX1NFVF9WQ08gICAgID0gMHgxMCwKIAlDTURfVFVORVJFUVVFU1QgPSAweDExLAogCUNNRF9NUEVHQ09ORklHICA9IDB4MTMsCkBAIC0xMzgsOCArMTU0LDcgQEAKIH07CiAKIC8qIFRoZSBEZW1vZC9UdW5lciBjYW4ndCBlYXNpbHkgcHJvdmlkZSB0aGVzZSwgd2UgY2FjaGUgdGhlbSAqLwotc3RydWN0IGN4MjQxMTZfdHVuaW5nCi17CitzdHJ1Y3QgY3gyNDExNl90dW5pbmcgewogCXUzMiBmcmVxdWVuY3k7CiAJdTMyIHN5bWJvbF9yYXRlOwogCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbjsKQEAgLTE1OCwxNiArMTczLDE0IEBACiB9OwogCiAvKiBCYXNpYyBjb21tYW5kcyB0aGF0IGFyZSBzZW50IHRvIHRoZSBmaXJtd2FyZSAqLwotc3RydWN0IGN4MjQxMTZfY21kCi17CitzdHJ1Y3QgY3gyNDExNl9jbWQgewogCXU4IGxlbjsKIAl1OCBhcmdzW0NYMjQxMTZfQVJHTEVOXTsKIH07CiAKLXN0cnVjdCBjeDI0MTE2X3N0YXRlCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7Ci0JY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnKiBjb25maWc7CitzdHJ1Y3QgY3gyNDExNl9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC0xNzksMTkgKzE5MiwyMCBAQAogCXN0cnVjdCBjeDI0MTE2X2NtZCBkc2VjX2NtZDsKIH07CiAKLXN0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZyhzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUsIGludCByZWcsIGludCBkYXRhKQorc3RhdGljIGludCBjeDI0MTE2X3dyaXRlcmVnKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwgaW50IHJlZywgaW50IGRhdGEpCiB7CiAJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OwogCWludCBlcnI7CiAKLQlpZiAoZGVidWc+MSkKKwlpZiAoZGVidWcgPiAxKQogCQlwcmludGsoImN4MjQxMTY6ICVzOiB3cml0ZSByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIsCi0JCQkJCQlfX2Z1bmNfXyxyZWcsIGRhdGEpOworCQkJX19mdW5jX18sIHJlZywgZGF0YSk7CiAKLQlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewotCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCWVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAoZXJyICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCIKIAkJCSAiIHZhbHVlID09IDB4JTAyeClcbiIsIF9fZnVuY19fLCBlcnIsIHJlZywgZGF0YSk7CiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KQEAgLTIwMCw3ICsyMTQsOCBAQAogfQogCiAvKiBCdWxrIGJ5dGUgd3JpdGVzIHRvIGEgc2luZ2xlIEkyQyBhZGRyZXNzLCBmb3IgMzJrIGZpcm13YXJlIGxvYWQgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZ04oc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCBpbnQgcmVnLCB1OCAqZGF0YSwgdTE2IGxlbikKK3N0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZ04oc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCBpbnQgcmVnLAorCQkJICAgICBjb25zdCB1OCAqZGF0YSwgdTE2IGxlbikKIHsKIAlpbnQgcmV0ID0gLUVSRU1PVEVJTzsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CkBAIC0yMjEsMTIgKzIzNiwxMyBAQAogCW1zZy5idWYgPSBidWY7CiAJbXNnLmxlbiA9IGxlbiArIDE7CiAKLQlpZiAoZGVidWc+MSkKLQkJcHJpbnRrKCJjeDI0MTE2OiAlczogIHdyaXRlIHJlZ04gMHglMDJ4LCBsZW4gPSAlZFxuIiwKLQkJCQkJCV9fZnVuY19fLHJlZywgbGVuKTsKKwlpZiAoZGVidWcgPiAxKQorCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAlczogIHdyaXRlIHJlZ04gMHglMDJ4LCBsZW4gPSAlZFxuIiwKKwkJCV9fZnVuY19fLCByZWcsIGxlbik7CiAKLQlpZiAoKHJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewotCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMnhcbiIsCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMnhcbiIsCiAJCQkgX19mdW5jX18sIHJldCwgcmVnKTsKIAkJcmV0ID0gLUVSRU1PVEVJTzsKIAl9CkBAIC0yMzcsMzAgKzI1MywzNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9yZWFkcmVnKHN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSwgdTggcmVnKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRyZWcoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCB1OCByZWcpCiB7CiAJaW50IHJldDsKIAl1OCBiMFtdID0geyByZWcgfTsKIAl1OCBiMVtdID0geyAwIH07CiAJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7Ci0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCi0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMSB9CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCisJCQkuYnVmID0gYjEsIC5sZW4gPSAxIH0KIAl9OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CiAKIAlpZiAocmV0ICE9IDIpIHsKLQkJcHJpbnRrKCIlczogcmVnPTB4JXggKGVycm9yPSVkKVxuIiwgX19mdW5jX18sIHJlZywgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVnPTB4JXggKGVycm9yPSVkKVxuIiwKKwkJCV9fZnVuY19fLCByZWcsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGRlYnVnPjEpCi0JCXByaW50aygiY3gyNDExNjogcmVhZCByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIscmVnLCBiMVswXSk7CisJaWYgKGRlYnVnID4gMSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNDExNjogcmVhZCByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIsCisJCQlyZWcsIGIxWzBdKTsKIAogCXJldHVybiBiMVswXTsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb24pCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsCisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQogewogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGludmVyc2lvbik7CiAKQEAgLTMwOCwxMCArMzI5LDEwIEBACiAgKiBFZy4oMi8zKSBzemFwICJab25lIEhvcnJvciIKICAqCiAgKiBtYXNrL3ZhbCA9IDB4MDQsIDB4MjAKLSAqIHN0YXR1cyAxZiB8IHNpZ25hbCBjM2MwIHwgc25yIGEzMzMgfCBiZXIgMDAwMDAwOTggfCB1bmMgMDAwMDAwMDAgfCBGRV9IQVNfTE9DSworICogc3RhdHVzIDFmIHwgc2lnbmFsIGMzYzAgfCBzbnIgYTMzMyB8IGJlciAwMDAwMDA5OCB8IHVuYyAwIHwgRkVfSEFTX0xPQ0sKICAqCiAgKiBtYXNrL3ZhbCA9IDB4MDQsIDB4MzAKLSAqIHN0YXR1cyAxZiB8IHNpZ25hbCBjM2MwIHwgc25yIGEzMzMgfCBiZXIgMDAwMDAwMDAgfCB1bmMgMDAwMDAwMDAgfCBGRV9IQVNfTE9DSworICogc3RhdHVzIDFmIHwgc2lnbmFsIGMzYzAgfCBzbnIgYTMzMyB8IGJlciAwMDAwMDAwMCB8IHVuYyAwIHwgRkVfSEFTX0xPQ0sKICAqCiAgKiBBZnRlciB0dW5pbmcgRkVDU1RBVFVTIGNvbnRhaW5zIGFjdHVhbCBGRUMKICAqIGluIHVzZSBudW1iZXJlZCAxIHRocm91Z2ggdG8gOCBmb3IgMS8yIC4uIDIvMyBldGMKQEAgLTM4OSwxOCArNDEwLDE2IEBACiAgICovCiB9OwogCi1zdGF0aWMgaW50IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUsCitzdGF0aWMgaW50IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsCiAJZmVfbW9kdWxhdGlvbl90IG0sIGZlX2NvZGVfcmF0ZV90IGYpCiB7CiAJaW50IGksIHJldCA9IC1FT1BOT1RTVVBQOwogCiAJZHByaW50aygiJXMoMHglMDJ4LDB4JTAyeClcbiIsIF9fZnVuY19fLCBtLCBmKTsKIAotCWZvcihpPTAgOyBpIDwgc2l6ZW9mKENYMjQxMTZfTU9ERkVDX01PREVTKSAvIHNpemVvZihzdHJ1Y3QgY3gyNDExNl9tb2RmZWMpIDsgaSsrKQotCXsKLQkJaWYoIChtID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLm1vZHVsYXRpb24pICYmCi0JCQkoZiA9PSBDWDI0MTE2X01PREZFQ19NT0RFU1tpXS5mZWMpICkKLQkJCXsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShDWDI0MTE2X01PREZFQ19NT0RFUyk7IGkrKykgeworCQlpZiAoKG0gPT0gQ1gyNDExNl9NT0RGRUNfTU9ERVNbaV0ubW9kdWxhdGlvbikgJiYKKwkJCShmID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLmZlYykpIHsKIAkJCQlyZXQgPSBpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNDA5LDcgKzQyOCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF9mZWMoc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCBmZV9tb2R1bGF0aW9uX3QgbW9kLCBmZV9jb2RlX3JhdGVfdCBmZWMpCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X2ZlYyhzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsCisJZmVfbW9kdWxhdGlvbl90IG1vZCwgZmVfY29kZV9yYXRlX3QgZmVjKQogewogCWludCByZXQgPSAwOwogCkBAIC00MTcsNyArNDM3LDcgQEAKIAogCXJldCA9IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdGF0ZSwgbW9kLCBmZWMpOwogCi0JaWYocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCXN0YXRlLT5kbnh0LmZlYyA9IGZlYzsKQEAgLTQyOSw3ICs0NDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCB1MzIgcmF0ZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsIHUzMiByYXRlKQogewogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIHJhdGUpOwogCkBAIC00NDYsNDIgKzQ2Niw0OSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfbG9hZF9maXJtd2FyZSAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOworc3RhdGljIGludCBjeDI0MTE2X2xvYWRfZmlybXdhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9maXJtd2FyZV9vbmRlbWFuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9maXJtd2FyZV9vbmRlbWFuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQgPSAwOwogCi0JZHByaW50aygiJXMoKVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaWYgKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgPiAwKQotCXsKKwlpZiAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCAweDIwKSA+IDApIHsKIAogCQlpZiAoc3RhdGUtPnNraXBfZndfbG9hZCkKIAkJCXJldHVybiAwOwogCiAJCS8qIExvYWQgZmlybXdhcmUgKi8KLQkJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KLQkJcHJpbnRrKCIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcykuLi5cbiIsIF9fZnVuY19fLCBDWDI0MTE2X0RFRkFVTFRfRklSTVdBUkUpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgQ1gyNDExNl9ERUZBVUxUX0ZJUk1XQVJFLCAmc3RhdGUtPmkyYy0+ZGV2KTsKLQkJcHJpbnRrKCIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkKDIpLi4uXG4iLCBfX2Z1bmNfXyk7CisJCS8qIHJlcXVlc3QgdGhlIGZpcm13YXJlLCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgbG9hZGVkICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwKKwkJCV9fZnVuY19fLCBDWDI0MTE2X0RFRkFVTFRfRklSTVdBUkUpOworCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgQ1gyNDExNl9ERUZBVUxUX0ZJUk1XQVJFLAorCQkJJnN0YXRlLT5pMmMtPmRldik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQoMikuLi5cbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50aygiJXM6IE5vIGZpcm13YXJlIHVwbG9hZGVkICh0aW1lb3V0IG9yIGZpbGUgbm90IGZvdW5kPylcbiIsIF9fZnVuY19fKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIGZpcm13YXJlIHVwbG9hZGVkICIKKwkJCQkiKHRpbWVvdXQgb3IgZmlsZSBub3QgZm91bmQ/KVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWN1cnNlIGJhY2sgdGhyb3VnaCBoZXJlIGR1cmluZyBsb2FkaW5nICovCisJCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWN1cnNlIGJhY2sgdGhyb3VnaCBoZXJlCisJCSAqIGR1cmluZyBsb2FkaW5nICovCiAJCXN0YXRlLT5za2lwX2Z3X2xvYWQgPSAxOwogCiAJCXJldCA9IGN4MjQxMTZfbG9hZF9maXJtd2FyZShmZSwgZncpOwogCQlpZiAocmV0KQotCQkJcHJpbnRrKCIlczogV3JpdGluZyBmaXJtd2FyZSB0byBkZXZpY2UgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0aW5nIGZpcm13YXJlIHRvIGRldmljZSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18pOwogCiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JCXByaW50aygiJXM6IEZpcm13YXJlIHVwbG9hZCAlc1xuIiwgX19mdW5jX18sIHJldCA9PSAwID8gImNvbXBsZXRlIiA6ICJmYWlsZWQiKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpcm13YXJlIHVwbG9hZCAlc1xuIiwgX19mdW5jX18sCisJCQlyZXQgPT0gMCA/ICJjb21wbGV0ZSIgOiAiZmFpbGVkIik7CiAKIAkJLyogRW5zdXJlIGZpcm13YXJlIGlzIGFsd2F5cyBsb2FkZWQgaWYgcmVxdWlyZWQgKi8KIAkJc3RhdGUtPnNraXBfZndfbG9hZCA9IDA7CkBAIC00OTAsOCArNTE3LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogVGFrZSBhIGJhc2ljIGZpcm13YXJlIGNvbW1hbmQgc3RydWN0dXJlLCBmb3JtYXQgaXQgYW5kIGZvcndhcmQgaXQgZm9yIHByb2Nlc3NpbmcgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9jbWRfZXhlY3V0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGN4MjQxMTZfY21kICpjbWQpCisvKiBUYWtlIGEgYmFzaWMgZmlybXdhcmUgY29tbWFuZCBzdHJ1Y3R1cmUsIGZvcm1hdCBpdAorICogYW5kIGZvcndhcmQgaXQgZm9yIHByb2Nlc3NpbmcKKyAqLworc3RhdGljIGludCBjeDI0MTE2X2NtZF9leGVjdXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgY3gyNDExNl9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaSwgcmV0OwpAQCAtNDk5LDQ5ICs1MjgsNDkgQEAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBMb2FkIHRoZSBmaXJtd2FyZSBpZiByZXF1aXJlZCAqLwotCWlmICggKHJldCA9IGN4MjQxMTZfZmlybXdhcmVfb25kZW1hbmQoZmUpKSAhPSAwKQotCXsKLQkJcHJpbnRrKCIlcygpOiBVbmFibGUgaW5pdGlhbGlzZSB0aGUgZmlybXdhcmVcbiIsIF9fZnVuY19fKTsKKwlyZXQgPSBjeDI0MTE2X2Zpcm13YXJlX29uZGVtYW5kKGZlKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBVbmFibGUgaW5pdGlhbGlzZSB0aGUgZmlybXdhcmVcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogV3JpdGUgdGhlIGNvbW1hbmQgKi8KLQlmb3IoaSA9IDA7IGkgPCBjbWQtPmxlbiA7IGkrKykKLQl7CisJZm9yIChpID0gMDsgaSA8IGNtZC0+bGVuIDsgaSsrKSB7CiAJCWRwcmludGsoIiVzOiAweCUwMnggPT0gMHglMDJ4XG4iLCBfX2Z1bmNfXywgaSwgY21kLT5hcmdzW2ldKTsKIAkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgaSwgY21kLT5hcmdzW2ldKTsKIAl9CiAKIAkvKiBTdGFydCBleGVjdXRpb24gYW5kIHdhaXQgZm9yIGNtZCB0byB0ZXJtaW5hdGUgKi8KIAljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19FWEVDVVRFLCAweDAxKTsKLQl3aGlsZSggY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19FWEVDVVRFKSApCi0JeworCXdoaWxlIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0VYRUNVVEUpKSB7CiAJCW1zbGVlcCgxMCk7Ci0JCWlmKGkrKyA+IDY0KQotCQl7Ci0JCQkvKiBBdm9pZCBsb29waW5nIGZvcmV2ZXIgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm8gcmVzcG9uZCAqLwotCQkJcHJpbnRrKCIlcygpIEZpcm13YXJlIG5vdCByZXNwb25kaW5nXG4iLCBfX2Z1bmNfXyk7CisJCWlmIChpKysgPiA2NCkgeworCQkJLyogQXZvaWQgbG9vcGluZyBmb3JldmVyIGlmIHRoZSBmaXJtd2FyZSBkb2VzCisJCQkJbm90IHJlc3BvbmQgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCkgRmlybXdhcmUgbm90IHJlc3BvbmRpbmdcbiIsCisJCQkJX19mdW5jX18pOwogCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9sb2FkX2Zpcm13YXJlIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3N0YXRpYyBpbnQgY3gyNDExNl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0Jc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKIAlpbnQgaSwgcmV0OwogCXVuc2lnbmVkIGNoYXIgdmVyc1s0XTsKIAogCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JZHByaW50aygiRmlybXdhcmUgaXMgJXp1IGJ5dGVzICglMDJ4ICUwMnggLi4gJTAyeCAlMDJ4KVxuIgotCQkJLGZ3LT5zaXplCi0JCQksZnctPmRhdGFbMF0KLQkJCSxmdy0+ZGF0YVsxXQotCQkJLGZ3LT5kYXRhWyBmdy0+c2l6ZS0yIF0KLQkJCSxmdy0+ZGF0YVsgZnctPnNpemUtMSBdCi0JCQkpOworCWRwcmludGsoIkZpcm13YXJlIGlzICV6dSBieXRlcyAoJTAyeCAlMDJ4IC4uICUwMnggJTAyeClcbiIsCisJCQlmdy0+c2l6ZSwKKwkJCWZ3LT5kYXRhWzBdLAorCQkJZnctPmRhdGFbMV0sCisJCQlmdy0+ZGF0YVtmdy0+c2l6ZS0yXSwKKwkJCWZ3LT5kYXRhW2Z3LT5zaXplLTFdKTsKIAogCS8qIFRvZ2dsZSA4OHggU1JTVCBwaW4gdG8gcmVzZXQgZGVtb2QgKi8KIAlpZiAoc3RhdGUtPmNvbmZpZy0+cmVzZXRfZGV2aWNlKQpAQCAtNTg3LDcgKzYxNiw3IEBACiAJY21kLmFyZ3NbMHgwN10gPSAweDlkOwogCWNtZC5hcmdzWzB4MDhdID0gMHhmYzsKIAljbWQuYXJnc1sweDA5XSA9IDB4MDY7Ci0JY21kLmxlbj0gMHgwYTsKKwljbWQubGVuID0gMHgwYTsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC01OTgsNyArNjI3LDcgQEAKIAljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUklOSVQ7CiAJY21kLmFyZ3NbMHgwMV0gPSAweDAwOwogCWNtZC5hcmdzWzB4MDJdID0gMHgwMDsKLQljbWQubGVuPSAweDAzOworCWNtZC5sZW4gPSAweDAzOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTYxNSwzNiArNjQ0LDM4IEBACiAJZWxzZQogCQljbWQuYXJnc1sweDA0XSA9IDB4MDI7CiAJY21kLmFyZ3NbMHgwNV0gPSAweDAwOwotCWNtZC5sZW49IDB4MDY7CisJY21kLmxlbiA9IDB4MDY7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogRmlybXdhcmUgQ01EIDM1OiBHZXQgZmlybXdhcmUgdmVyc2lvbiAqLwogCWNtZC5hcmdzWzB4MDBdID0gQ01EX1VQREZXVkVSUzsKLQljbWQubGVuPSAweDAyOwotCWZvcihpPTA7IGk8NDsgaSsrKSB7CisJY21kLmxlbiA9IDB4MDI7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQljbWQuYXJnc1sweDAxXSA9IGk7CiAJCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlyZXR1cm4gcmV0OwotCQl2ZXJzW2ldPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX01BSUxCT1gpOworCQl2ZXJzW2ldID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19NQUlMQk9YKTsKIAl9Ci0JcHJpbnRrKCIlczogRlcgdmVyc2lvbiAlaS4laS4laS4laVxuIiwgX19mdW5jX18sCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZXIHZlcnNpb24gJWkuJWkuJWkuJWlcbiIsIF9fZnVuY19fLAogCQl2ZXJzWzBdLCB2ZXJzWzFdLCB2ZXJzWzJdLCB2ZXJzWzNdKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJLyogVGhlIGlzbDY0MjEgbW9kdWxlIHdpbGwgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZm9wcy4gKi8KLQlkcHJpbnRrKCIlcygpIFRoaXMgc2hvdWxkIG5ldmVyIGFwcGVhciBpZiB0aGUgaXNsNjQyMSBtb2R1bGUgaXMgbG9hZGVkIGNvcnJlY3RseVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygiJXMoKSBUaGlzIHNob3VsZCBuZXZlciBhcHBlYXIgaWYgdGhlIGlzbDY0MjEgbW9kdWxlICIKKwkJImlzIGxvYWRlZCBjb3JyZWN0bHlcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCkBAIC02NjYsMjIgKzY5NywyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogYmVyKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCSpiZXIgPSAgKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjI0KSA8PCAyNCApIHwKLQkJKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjE2KSA8PCAxNiApIHwKLQkJKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjggKSA8PCA4ICApIHwKLQkJICBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjAgKTsKKwkqYmVyID0gIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjI0KSA8PCAyNCkgfAorCQkoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIxNikgPDwgMTYpIHwKKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfQkVSOCkgIDw8IDgpICB8CisJCSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjApOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIFRPRE8gRGV0ZXJtaW5lIGZ1bmN0aW9uIGFuZCBzY2FsZSBhcHByb3ByaWF0ZWx5ICovCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc2lnbmFsX3N0cmVuZ3RoKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUxNiAqc2lnbmFsX3N0cmVuZ3RoKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CkBAIC02OTIsMzkgKzcyNCw0MyBAQAogCiAJLyogRmlybXdhcmUgQ01EIDE5OiBHZXQgQUdDICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfR0VUQUdDOwotCWNtZC5sZW49IDB4MDE7CisJY21kLmxlbiA9IDB4MDE7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0Jc2lnX3JlYWRpbmcgPSAoIGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUykgJiBDWDI0MTE2X1NJR05BTF9NQVNLICkgfAotCQkoIGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU0lHTkFMKSA8PCA2ICk7Ci0JKnNpZ25hbF9zdHJlbmd0aD0gMCAtIHNpZ19yZWFkaW5nOworCXNpZ19yZWFkaW5nID0KKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwKKwkJCUNYMjQxMTZfUkVHX1NTVEFUVVMpICYgQ1gyNDExNl9TSUdOQUxfTUFTSykgfAorCQkoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19TSUdOQUwpIDw8IDYpOworCSpzaWduYWxfc3RyZW5ndGggPSAwIC0gc2lnX3JlYWRpbmc7CiAKLQlkcHJpbnRrKCIlczogcmF3IC8gY29va2VkID0gMHglMDR4IC8gMHglMDR4XG4iLCBfX2Z1bmNfXywgc2lnX3JlYWRpbmcsICpzaWduYWxfc3RyZW5ndGgpOworCWRwcmludGsoIiVzOiByYXcgLyBjb29rZWQgPSAweCUwNHggLyAweCUwNHhcbiIsCisJCV9fZnVuY19fLCBzaWdfcmVhZGluZywgKnNpZ25hbF9zdHJlbmd0aCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogU05SICgwLi4xMDApJSA9IChzaWcgJiAweGYwKSAqIDEwICsgKHNpZyAmIDB4MGYpICogMTAgLyAxNiAqLwotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yX3BjdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfcGN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCBzbnJfcmVhZGluZzsKIAlzdGF0aWMgY29uc3QgdTMyIHNucl90YWJbXSA9IHsgLyogMTAgeCBUYWJsZSAocm91bmRlZCB1cCkgKi8KLQkJMHgwMDAwMCwweDAxOTlBLDB4MDMzMzMsMHgwNGNjRCwweDA2NjY3LAotCQkJMHgwODAwMCwweDA5OTlBLDB4MGIzMzMsMHgwY2NjRCwweDBlNjY3LAotCQkweDEwMDAwLDB4MTE5OUEsMHgxMzMzMywweDE0Y2NELDB4MTY2NjcsMHgxODAwMCB9OworCQkweDAwMDAwLCAweDAxOTlBLCAweDAzMzMzLCAweDA0Y2NELCAweDA2NjY3LAorCQkweDA4MDAwLCAweDA5OTlBLCAweDBiMzMzLCAweDBjY2NELCAweDBlNjY3LAorCQkweDEwMDAwLCAweDExOTlBLCAweDEzMzMzLCAweDE0Y2NELCAweDE2NjY3LAorCQkweDE4MDAwIH07CiAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzbnJfcmVhZGluZyA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfUVVBTElUWTApOwogCi0JaWYoc25yX3JlYWRpbmcgPj0gMHhhMCAvKiAxMDAlICovKQorCWlmIChzbnJfcmVhZGluZyA+PSAweGEwIC8qIDEwMCUgKi8pCiAJCSpzbnIgPSAweGZmZmY7CiAJZWxzZQotCQkqc25yID0gc25yX3RhYiBbICggc25yX3JlYWRpbmcgJiAweGYwICkgICA+PiA0IF0gKwotCQkJKCBzbnJfdGFiIFsgKCBzbnJfcmVhZGluZyAmIDB4MGYgKSBdID4+IDQgKTsKKwkJKnNuciA9IHNucl90YWJbKHNucl9yZWFkaW5nICYgMHhmMCkgPj4gNF0gKworCQkJKHNucl90YWJbKHNucl9yZWFkaW5nICYgMHgwZildID4+IDQpOwogCiAJZHByaW50aygiJXM6IHJhdyAvIGNvb2tlZCA9IDB4JTAyeCAvIDB4JTA0eFxuIiwgX19mdW5jX18sCiAJCXNucl9yZWFkaW5nLCAqc25yKTsKQEAgLTczNiw3ICs3NzIsNyBAQAogICogRVNOTywgZnJvbSAwLT4zMGRiICh2YWx1ZXMgMC0+MzAwKS4gV2UgcHJvdmlkZSB0aGlzIHZhbHVlIGJ5CiAgKiBkZWZhdWx0LgogICovCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfZXNubyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfZXNubyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKQEAgLTc1MCw3ICs3ODYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKIAlpZiAoZXNub19zbnIgPT0gMSkKIAkJcmV0dXJuIGN4MjQxMTZfcmVhZF9zbnJfZXNubyhmZSwgc25yKTsKQEAgLTc1OCwyNyArNzk0LDI3IEBACiAJCXJldHVybiBjeDI0MTE2X3JlYWRfc25yX3BjdChmZSwgc25yKTsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogdWNibG9ja3MpCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCSp1Y2Jsb2NrcyA9ICggY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19VQ0I4KSA8PCA4ICkgfAorCSp1Y2Jsb2NrcyA9IChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1VDQjgpIDw8IDgpIHwKIAkJY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19VQ0IwKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBPdmVyd3JpdGUgdGhlIGN1cnJlbnQgdHVuaW5nIHBhcmFtcywgd2UgYXJlIGFib3V0IHRvIHR1bmUgKi8KLXN0YXRpYyB2b2lkIGN4MjQxMTZfY2xvbmVfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIHZvaWQgY3gyNDExNl9jbG9uZV9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJbWVtY3B5KCZzdGF0ZS0+ZGN1ciwgJnN0YXRlLT5kbnh0LCBzaXplb2Yoc3RhdGUtPmRjdXIpKTsKIH0KIAogLyogV2FpdCBmb3IgTE5CICovCi1zdGF0aWMgaW50IGN4MjQxMTZfd2FpdF9mb3JfbG5iKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBjeDI0MTE2X3dhaXRfZm9yX2xuYihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaTsKQEAgLTc4Nyw3ICs4MjMsNyBAQAogCQljeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FTVEFUVVMpKTsKIAogCS8qIFdhaXQgZm9yIHVwIHRvIDMwMCBtcyAqLwotCWZvcihpID0gMDsgaSA8IDMwIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDMwIDsgaSsrKSB7CiAJCWlmIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FTVEFUVVMpICYgMHgyMCkKIAkJCXJldHVybiAwOwogCQltc2xlZXAoMTApOwpAQCAtNzk4LDIwICs4MzQsMjEgQEAKIAlyZXR1cm4gLUVUSU1FRE9VVDsgLyogLUVCVVNZID8gKi8KIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOwogCWludCByZXQ7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCB0b25lKTsKLQlpZiAoICh0b25lICE9IFNFQ19UT05FX09OKSAmJiAodG9uZSAhPSBTRUNfVE9ORV9PRkYpICkgewotCQlwcmludGsoIiVzOiBJbnZhbGlkLCB0b25lPSVkXG4iLCBfX2Z1bmNfXywgdG9uZSk7CisJaWYgKCh0b25lICE9IFNFQ19UT05FX09OKSAmJiAodG9uZSAhPSBTRUNfVE9ORV9PRkYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQsIHRvbmU9JWRcbiIsIF9fZnVuY19fLCB0b25lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCiAJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIE1pbiBkZWxheSB0aW1lIGFmdGVyIERpU0VxQyBzZW5kICovCkBAIC04MjAsNyArODU3LDcgQEAKIAkvKiBUaGlzIGlzIGFsd2F5cyBkb25lIGJlZm9yZSB0aGUgdG9uZSBpcyBzZXQgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9TRVRfVE9ORVBSRTsKIAljbWQuYXJnc1sweDAxXSA9IDB4MDA7Ci0JY21kLmxlbj0gMHgwMjsKKwljbWQubGVuID0gMHgwMjsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC04MzYsMTEgKzg3MywxMSBAQAogCQljbWQuYXJnc1sweDAzXSA9IDB4MDE7CiAJCWJyZWFrOwogCWNhc2UgU0VDX1RPTkVfT0ZGOgotCQlkcHJpbnRrKCIlczogc2V0dGluZyB0b25lIG9mZlxuIixfX2Z1bmNfXyk7CisJCWRwcmludGsoIiVzOiBzZXR0aW5nIHRvbmUgb2ZmXG4iLCBfX2Z1bmNfXyk7CiAJCWNtZC5hcmdzWzB4MDNdID0gMHgwMDsKIAkJYnJlYWs7CiAJfQotCWNtZC5sZW49IDB4MDQ7CisJY21kLmxlbiA9IDB4MDQ7CiAKIAkvKiBNaW4gZGVsYXkgdGltZSBiZWZvcmUgRGlTRXFDIHNlbmQgKi8KIAltc2xlZXAoMTUpOyAvKiBYWFggZGV0ZXJtaW5lIGlzIEZXIGRvZXMgdGhpcywgc2VlIHNlbmRfZGlzZXFjL2J1cnN0ICovCkBAIC04NDksNyArODg2LDcgQEAKIH0KIAogLyogSW5pdGlhbGlzZSBEaVNFcUMgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOwpAQCAtODY0LDcgKzkwMSw3IEBACiAJY21kLmFyZ3NbMHgwNV0gPSAweDI4OwogCWNtZC5hcmdzWzB4MDZdID0gKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKSA/IDB4MDAgOiAweDAxOwogCWNtZC5hcmdzWzB4MDddID0gMHgwMTsKLQljbWQubGVuPSAweDA4OworCWNtZC5sZW4gPSAweDA4OwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTg3OCwzNiArOTE1LDM4IEBACiAJLyogVW5rbm93biAqLwogCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzJfMl0gPSAweDAyOwogCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzNfMF0gPSAweDAwOwotCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzRfMF0gPSAweDAwOyAvKiBDb250aW51YXRpb24gZmxhZz8gKi8KKwkvKiBDb250aW51YXRpb24gZmxhZz8gKi8KKwlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19BUkc0XzBdID0gMHgwMDsKIAogCS8qIERpU0VxQyBtZXNzYWdlIGxlbmd0aCAqLwogCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPSAweDAwOwogCiAJLyogQ29tbWFuZCBsZW5ndGggKi8KLQlzdGF0ZS0+ZHNlY19jbWQubGVuPSBDWDI0MTE2X0RJU0VRQ19NU0dPRlM7CisJc3RhdGUtPmRzZWNfY21kLmxlbiA9IENYMjQxMTZfRElTRVFDX01TR09GUzsKIAogCXJldHVybiAwOwogfQogCiAvKiBTZW5kIERpU0VxQyBtZXNzYWdlIHdpdGggZGVyaXZlZCBidXJzdCAoaGFjaykgfHwgcHJldmlvdXMgYnVyc3QgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmQpCitzdGF0aWMgaW50IGN4MjQxMTZfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmQpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGksIHJldDsKIAogCS8qIER1bXAgRGlTRXFDIG1lc3NhZ2UgKi8KIAlpZiAoZGVidWcpIHsKLQkJcHJpbnRrKCJjeDI0MTE2OiAlcygiLCBfX2Z1bmNfXyk7Ci0JCWZvcihpID0gMCA7IGkgPCBkLT5tc2dfbGVuIDspIHsKLQkJCXByaW50aygiMHglMDJ4IiwgZC0+bXNnW2ldKTsKLQkJCWlmKCsraSA8IGQtPm1zZ19sZW4pCi0JCQkJcHJpbnRrKCIsICIpOwotCQkJfQorCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAlcygiLCBfX2Z1bmNfXyk7CisJCWZvciAoaSA9IDAgOyBpIDwgZC0+bXNnX2xlbiA7KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIweCUwMngiLCBkLT5tc2dbaV0pOworCQkJaWYgKCsraSA8IGQtPm1zZ19sZW4pCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCAiKTsKKwkJfQogCQlwcmludGsoIikgdG9uZWJ1cnN0PSVkXG4iLCB0b25lYnVyc3QpOwogCX0KIAogCS8qIFZhbGlkYXRlIGxlbmd0aCAqLwotCWlmKGQtPm1zZ19sZW4gPiAoQ1gyNDExNl9BUkdMRU4gLSBDWDI0MTE2X0RJU0VRQ19NU0dPRlMpKQorCWlmIChkLT5tc2dfbGVuID4gKENYMjQxMTZfQVJHTEVOIC0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEaVNFcUMgbWVzc2FnZSAqLwpAQCAtOTE4LDE4ICs5NTcsMTkgQEAKIAlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dID0gZC0+bXNnX2xlbjsKIAogCS8qIENvbW1hbmQgbGVuZ3RoICovCi0Jc3RhdGUtPmRzZWNfY21kLmxlbj0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTICsgc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXTsKKwlzdGF0ZS0+ZHNlY19jbWQubGVuID0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTICsKKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXTsKIAogCS8qIERpU0VxQyB0b25lYnVyc3QgKi8KLQlpZih0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfTUVTR0NBQ0hFKQorCWlmICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfTUVTR0NBQ0hFKQogCQkvKiBNZXNzYWdlIGlzIGNhY2hlZCAqLwogCQlyZXR1cm4gMDsKIAotCWVsc2UgaWYodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpCisJZWxzZSBpZiAodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpCiAJCS8qIE1lc3NhZ2UgaXMgc2VudCB3aXRob3V0IGJ1cnN0ICovCiAJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9IDA7CiAKLQllbHNlIGlmKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FQ0FDSEUpIHsKKwllbHNlIGlmICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfVE9ORUNBQ0hFKSB7CiAJCS8qCiAJCSAqIE1lc3NhZ2UgaXMgc2VudCB3aXRoIGRlcml2ZWQgZWxzZSBjYWNoZWQgYnVyc3QKIAkJICoKQEAgLTk0OCwxNSArOTg4LDE3IEBACiAJCSAqICAgICAgICAgICAgICBZID0gVk9MVEFHRSAgICAgICAgICAgICAoMD0xM1YsIDE9MThWKQogCQkgKiAgICAgICAgICAgICAgWiA9IEJBTkQgICAgICAgICAgICAgICAgKDA9TE9XLCAxPUhJR0goMjJLKSkKIAkJICovCi0JCWlmKGQtPm1zZ19sZW4gPj0gNCAmJiBkLT5tc2dbMl0gPT0gMHgzOCkKLQkJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9ICgoZC0+bXNnWzNdICYgNCkgPj4gMik7Ci0JCWlmKGRlYnVnKQotCQkJZHByaW50aygiJXMgYnVyc3Q9JWRcbiIsIF9fZnVuY19fLCBzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0pOworCQlpZiAoZC0+bXNnX2xlbiA+PSA0ICYmIGQtPm1zZ1syXSA9PSAweDM4KQorCQkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdID0KKwkJCQkoKGQtPm1zZ1szXSAmIDQpID4+IDIpOworCQlpZiAoZGVidWcpCisJCQlkcHJpbnRrKCIlcyBidXJzdD0lZFxuIiwgX19mdW5jX18sCisJCQkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdKTsKIAl9CiAKIAkvKiBXYWl0IGZvciBMTkIgcmVhZHkgKi8KIAlyZXQgPSBjeDI0MTE2X3dhaXRfZm9yX2xuYihmZSk7Ci0JaWYocmV0ICE9IDApCisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogV2FpdCBmb3Igdm9sdGFnZS9taW4gcmVwZWF0IGRlbGF5ICovCkBAIC05NjQsNyArMTAwNiw3IEBACiAKIAkvKiBDb21tYW5kICovCiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJnN0YXRlLT5kc2VjX2NtZCk7Ci0JaWYocmV0ICE9IDApCisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCS8qCiAJICogV2FpdCBmb3Igc2VuZApAQCAtOTc2LDI5ICsxMDE4LDMzIEBACiAJICogIDEyLjVtcyBidXJzdCAgICAgICAgKwogCSAqID4xNW1zIGRlbGF5ICAgICAgICAgICAgKFhYWCBkZXRlcm1pbmUgaWYgRlcgZG9lcyB0aGlzLCBzZWUgc2V0X3RvbmUpCiAJICovCi0JbXNsZWVwKCAoc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA8PCA0KSArICgodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpID8gMzAgOiA2MCkgKTsKKwltc2xlZXAoKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKworCQkoKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKSA/IDMwIDogNjApKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBTZW5kIERpU0VxQyBidXJzdCAqLwotc3RhdGljIGludCBjeDI0MTE2X2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3N0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiJXMoJWQpIHRvbmVidXJzdD0lZFxuIixfX2Z1bmNfXywgYnVyc3QsIHRvbmVidXJzdCk7CisJZHByaW50aygiJXMoJWQpIHRvbmVidXJzdD0lZFxuIiwgX19mdW5jX18sIGJ1cnN0LCB0b25lYnVyc3QpOwogCiAJLyogRGlTRXFDIGJ1cnN0ICovCiAJaWYgKGJ1cnN0ID09IFNFQ19NSU5JX0EpCi0JCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9IENYMjQxMTZfRElTRVFDX01JTklfQTsKLQllbHNlIGlmKGJ1cnN0ID09IFNFQ19NSU5JX0IpCi0JCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9IENYMjQxMTZfRElTRVFDX01JTklfQjsKKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdID0KKwkJCUNYMjQxMTZfRElTRVFDX01JTklfQTsKKwllbHNlIGlmIChidXJzdCA9PSBTRUNfTUlOSV9CKQorCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPQorCQkJQ1gyNDExNl9ESVNFUUNfTUlOSV9COwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEaVNFcUMgdG9uZWJ1cnN0ICovCi0JaWYodG9uZWJ1cnN0ICE9IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKKwlpZiAodG9uZWJ1cnN0ICE9IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKIAkJLyogQnVyc3QgaXMgY2FjaGVkICovCiAJCXJldHVybiAwOwogCkBAIC0xMDA2LDcgKzEwNTIsNyBAQAogCiAJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCiAJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFdhaXQgZm9yIHZvbHRhZ2UvbWluIHJlcGVhdCBkZWxheSAqLwpAQCAtMTAxNCw3ICsxMDYwLDcgQEAKIAogCS8qIENvbW1hbmQgKi8KIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmc3RhdGUtPmRzZWNfY21kKTsKLQlpZihyZXQgIT0gMCkKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKgpAQCAtMTAyNywzNCArMTA3MywzMiBAQAogCSAqICAxMi41bXMgYnVyc3QgICAgICAgICsKIAkgKiA+MTVtcyBkZWxheSAgICAgICAgICAgIChYWFggZGV0ZXJtaW5lIGlmIEZXIGRvZXMgdGhpcywgc2VlIHNldF90b25lKQogCSAqLwotCW1zbGVlcCggKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKyA2MCApOworCW1zbGVlcCgoc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA8PCA0KSArIDYwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjeDI0MTE2X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBjeDI0MTE2X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JZHByaW50aygiJXNcbiIsX19mdW5jX18pOworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAJa2ZyZWUoc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDExNl9vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyogY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gTlVMTDsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiJXNcbiIsX19mdW5jX18pOworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdGUgPT0gTlVMTCkgewotCQlwcmludGsoIlVuYWJsZSB0byBrbWFsbG9jXG4iKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJZ290byBlcnJvcjE7Ci0JfQogCiAJLyogc2V0dXAgdGhlIHN0YXRlICovCiAJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpKTsKQEAgLTEwNjMsMzIgKzExMDcsMzYgQEAKIAlzdGF0ZS0+aTJjID0gaTJjOwogCiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHByZXNlbnQgKi8KLQlyZXQgPSAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCAweEZGKSA8PCA4KSB8IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHhGRSk7CisJcmV0ID0gKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHhGRikgPDwgOCkgfAorCQljeDI0MTE2X3JlYWRyZWcoc3RhdGUsIDB4RkUpOwogCWlmIChyZXQgIT0gMHgwNTAxKSB7Ci0JCXByaW50aygiSW52YWxpZCBwcm9iZSwgcHJvYmFibHkgbm90IGEgQ1gyNDExNiBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJJbnZhbGlkIHByb2JlLCBwcm9iYWJseSBub3QgYSBDWDI0MTE2IGRldmljZVxuIik7CiAJCWdvdG8gZXJyb3IyOwogCX0KIAogCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDI0MTE2X29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDExNl9vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKIGVycm9yMjoga2ZyZWUoc3RhdGUpOwogZXJyb3IxOiByZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woY3gyNDExNl9hdHRhY2gpOworCiAvKgogICogSW5pdGlhbGlzZSBvciB3YWtlIHVwIGRldmljZQogICoKICAqIFBvd2VyIGNvbmZpZyB3aWxsIHJlc2V0IGFuZCBsb2FkIGluaXRpYWwgZmlybXdhcmUgaWYgcmVxdWlyZWQKICAqLwotc3RhdGljIGludCBjeDI0MTE2X2luaXRmZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiJXMoKVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogUG93ZXIgb24gKi8KIAljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGUwLCAwKTsKQEAgLTEwOTgsOSArMTE0Niw5IEBACiAJLyogRmlybXdhcmUgQ01EIDM2OiBQb3dlciBjb25maWcgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUlNMRUVQOwogCWNtZC5hcmdzWzB4MDFdID0gMDsKLQljbWQubGVuPSAweDAyOworCWNtZC5sZW4gPSAweDAyOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiBjeDI0MTE2X2Rpc2VxY19pbml0KGZlKTsKQEAgLTExMDksMjAgKzExNTcsMjAgQEAKIC8qCiAgKiBQdXQgZGV2aWNlIHRvIHNsZWVwCiAgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOwogCWludCByZXQ7CiAKLQlkcHJpbnRrKCIlcygpXG4iLF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBGaXJtd2FyZSBDTUQgMzY6IFBvd2VyIGNvbmZpZyAqLwogCWNtZC5hcmdzWzB4MDBdID0gQ01EX1RVTkVSU0xFRVA7CiAJY21kLmFyZ3NbMHgwMV0gPSAxOwotCWNtZC5sZW49IDB4MDI7CisJY21kLmxlbiA9IDB4MDI7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7Ci0JaWYocmV0ICE9IDApCisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogUG93ZXIgb2ZmIChTaHV0ZG93biBjbG9ja3MpICovCkBAIC0xMTMzLDEzICsxMTgxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9zZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdHZfcHJvcGVydHkqIHR2cCkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwKQogewogCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5KiB0dnApCitzdGF0aWMgaW50IGN4MjQxMTZfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKIHsKIAlkcHJpbnRrKCIlcyguLilcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKQEAgLTExNDgsNyArMTE5OCw4IEBACiAvKiBkdmItY29yZSB0b2xkIHVzIHRvIHR1bmUsIHRoZSB0diBwcm9wZXJ0eSBjYWNoZSB3aWxsIGJlIGNvbXBsZXRlLAogICogaXQncyBzYWZlIGZvciBpcyB0byBwdWxsIHZhbHVlcyBhbmQgdXNlIHRoZW0gZm9yIHR1bmluZyBwdXJwb3Nlcy4KICAqLwotc3RhdGljIGludCBjeDI0MTE2X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDI0MTE2X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CkBAIC0xMTU2LDk2ICsxMjA3LDEwMiBAQAogCWZlX3N0YXR1c190IHR1bmVyc3RhdDsKIAlpbnQgaSwgc3RhdHVzLCByZXQsIHJldHVuZTsKIAotCWRwcmludGsoIiVzKClcbiIsX19mdW5jX18pOworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCXN3aXRjaChjLT5kZWxpdmVyeV9zeXN0ZW0pIHsKLQkJY2FzZSBTWVNfRFZCUzoKLQkJCWRwcmludGsoIiVzOiBEVkItUyBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsX19mdW5jX18pOworCXN3aXRjaCAoYy0+ZGVsaXZlcnlfc3lzdGVtKSB7CisJY2FzZSBTWVNfRFZCUzoKKwkJZHByaW50aygiJXM6IERWQi1TIGRlbGl2ZXJ5IHN5c3RlbSBzZWxlY3RlZFxuIiwgX19mdW5jX18pOwogCi0JCQkvKiBPbmx5IFFQU0sgaXMgc3VwcG9ydGVkIGZvciBEVkItUyAqLwotCQkJaWYoYy0+bW9kdWxhdGlvbiAhPSBRUFNLKSB7Ci0JCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIG1vZHVsYXRpb24gc2VsZWN0ZWQgKCVkKVxuIiwKLQkJCQkJX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOwotCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJCX0KKwkJLyogT25seSBRUFNLIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMgKi8KKwkJaWYgKGMtPm1vZHVsYXRpb24gIT0gUVBTSykgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIG1vZHVsYXRpb24gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KIAotCQkJLyogUGlsb3QgZG9lc24ndCBleGlzdCBpbiBEVkItUywgdHVybiBiaXQgb2ZmICovCisJCS8qIFBpbG90IGRvZXNuJ3QgZXhpc3QgaW4gRFZCLVMsIHR1cm4gYml0IG9mZiAqLworCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09GRjsKKwkJcmV0dW5lID0gMTsKKworCQkvKiBEVkItUyBvbmx5IHN1cHBvcnRzIDAuMzUgKi8KKwkJaWYgKGMtPnJvbGxvZmYgIT0gUk9MTE9GRl8zNSkgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIHJvbGxvZmYgc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+cm9sbG9mZik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKwkJc3RhdGUtPmRueHQucm9sbG9mZl92YWwgPSBDWDI0MTE2X1JPTExPRkZfMDM1OworCQlicmVhazsKKworCWNhc2UgU1lTX0RWQlMyOgorCQlkcHJpbnRrKCIlczogRFZCLVMyIGRlbGl2ZXJ5IHN5c3RlbSBzZWxlY3RlZFxuIiwgX19mdW5jX18pOworCisJCS8qCisJCSAqIE5CQyA4UFNLL1FQU0sgd2l0aCBEVkItUyBpcyBzdXBwb3J0ZWQgZm9yIERWQi1TMiwKKwkJICogYnV0IG5vdCBoYXJkd2FyZSBhdXRvIGRldGVjdGlvbgorCQkgKi8KKwkJaWYgKGMtPm1vZHVsYXRpb24gIT0gUFNLXzggJiYgYy0+bW9kdWxhdGlvbiAhPSBRUFNLKSB7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgbW9kdWxhdGlvbiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCisJCXN3aXRjaCAoYy0+cGlsb3QpIHsKKwkJY2FzZSBQSUxPVF9BVVRPOgkvKiBOb3Qgc3VwcG9ydGVkIGJ1dCBlbXVsYXRlZCAqLworCQkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gKGMtPm1vZHVsYXRpb24gPT0gUVBTSykKKwkJCQk/IENYMjQxMTZfUElMT1RfT0ZGIDogQ1gyNDExNl9QSUxPVF9PTjsKKwkJCXJldHVuZSA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBQSUxPVF9PRkY6CiAJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09GRjsKLQkJCXJldHVuZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBQSUxPVF9PTjoKKwkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT047CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBwaWxvdCBtb2RlIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPnBpbG90KTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQogCi0JCQkvKiBEVkItUyBvbmx5IHN1cHBvcnRzIDAuMzUgKi8KLQkJCWlmKGMtPnJvbGxvZmYgIT0gUk9MTE9GRl8zNSkgewotCQkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCByb2xsb2ZmIHNlbGVjdGVkICglZClcbiIsCi0JCQkJCV9fZnVuY19fLCBjLT5yb2xsb2ZmKTsKLQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9CisJCXN3aXRjaCAoYy0+cm9sbG9mZikgeworCQljYXNlIFJPTExPRkZfMjA6CisJCQlzdGF0ZS0+ZG54dC5yb2xsb2ZmX3ZhbCA9IENYMjQxMTZfUk9MTE9GRl8wMjA7CisJCQlicmVhazsKKwkJY2FzZSBST0xMT0ZGXzI1OgorCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWwgPSBDWDI0MTE2X1JPTExPRkZfMDI1OworCQkJYnJlYWs7CisJCWNhc2UgUk9MTE9GRl8zNToKIAkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsID0gQ1gyNDExNl9ST0xMT0ZGXzAzNTsKIAkJCWJyZWFrOwotCi0JCWNhc2UgU1lTX0RWQlMyOgotCQkJZHByaW50aygiJXM6IERWQi1TMiBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsX19mdW5jX18pOwotCi0JCQkvKgotCQkJICogTkJDIDhQU0svUVBTSyB3aXRoIERWQi1TIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMyLAotCQkJICogYnV0IG5vdCBoYXJkd2FyZSBhdXRvIGRldGVjdGlvbgotCQkJICovCi0JCQlpZihjLT5tb2R1bGF0aW9uICE9IFBTS184ICYmIGMtPm1vZHVsYXRpb24gIT0gUVBTSykgewotCQkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBtb2R1bGF0aW9uIHNlbGVjdGVkICglZClcbiIsCi0JCQkJCV9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKLQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9Ci0KLQkJCXN3aXRjaChjLT5waWxvdCkgewotCQkJCWNhc2UgUElMT1RfQVVUTzoJLyogTm90IHN1cHBvcnRlZCBidXQgZW11bGF0ZWQgKi8KLQkJCQkJcmV0dW5lID0gMjsJLyogRmFsbC10aHJvdWdoICovCi0JCQkJY2FzZSBQSUxPVF9PRkY6Ci0JCQkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT0ZGOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFBJTE9UX09OOgotCQkJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09OOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcGlsb3QgbW9kZSBzZWxlY3RlZCAoJWQpXG4iLAotCQkJCQkJX19mdW5jX18sIGMtPnBpbG90KTsKLQkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJfQotCi0JCQlzd2l0Y2goYy0+cm9sbG9mZikgewotCQkJCWNhc2UgUk9MTE9GRl8yMDoKLQkJCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWw9IENYMjQxMTZfUk9MTE9GRl8wMjA7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUk9MTE9GRl8yNToKLQkJCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWw9IENYMjQxMTZfUk9MTE9GRl8wMjU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUk9MTE9GRl8zNToKLQkJCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWw9IENYMjQxMTZfUk9MTE9GRl8wMzU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUk9MTE9GRl9BVVRPOgkvKiBSb2xsb2ZmIG11c3QgYmUgZXhwbGljaXQgKi8KLQkJCQlkZWZhdWx0OgotCQkJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcm9sbG9mZiBzZWxlY3RlZCAoJWQpXG4iLAotCQkJCQkJX19mdW5jX18sIGMtPnJvbGxvZmYpOwotCQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9Ci0JCQlicmVhazsKLQorCQljYXNlIFJPTExPRkZfQVVUTzoJLyogUm9sbG9mZiBtdXN0IGJlIGV4cGxpY2l0ICovCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkICglZClcbiIsCi0JCQkJX19mdW5jX18sIGMtPmRlbGl2ZXJ5X3N5c3RlbSk7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcm9sbG9mZiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5yb2xsb2ZmKTsKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBjLT5kZWxpdmVyeV9zeXN0ZW0pOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCXN0YXRlLT5kbnh0Lm1vZHVsYXRpb24gPSBjLT5tb2R1bGF0aW9uOwogCXN0YXRlLT5kbnh0LmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKIAlzdGF0ZS0+ZG54dC5waWxvdCA9IGMtPnBpbG90OwogCXN0YXRlLT5kbnh0LnJvbGxvZmYgPSBjLT5yb2xsb2ZmOwogCi0JaWYgKChyZXQgPSBjeDI0MTE2X3NldF9pbnZlcnNpb24oc3RhdGUsIGMtPmludmVyc2lvbikpICE9ICAwKQorCXJldCA9IGN4MjQxMTZfc2V0X2ludmVyc2lvbihzdGF0ZSwgYy0+aW52ZXJzaW9uKTsKKwlpZiAocmV0ICE9ICAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogRkVDX05PTkUvQVVUTyBmb3IgRFZCLVMyIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGRldGVjdGVkIGhlcmUgKi8KLQlpZiAoKHJldCA9IGN4MjQxMTZfc2V0X2ZlYyhzdGF0ZSwgYy0+bW9kdWxhdGlvbiwgYy0+ZmVjX2lubmVyKSkgIT0gIDApCisJcmV0ID0gY3gyNDExNl9zZXRfZmVjKHN0YXRlLCBjLT5tb2R1bGF0aW9uLCBjLT5mZWNfaW5uZXIpOworCWlmIChyZXQgIT0gIDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKHJldCA9IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RhdGUsIGMtPnN5bWJvbF9yYXRlKSkgIT0gIDApCisJcmV0ID0gY3gyNDExNl9zZXRfc3ltYm9scmF0ZShzdGF0ZSwgYy0+c3ltYm9sX3JhdGUpOworCWlmIChyZXQgIT0gIDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBkaXNjYXJkIHRoZSAnY3VycmVudCcgdHVuaW5nIHBhcmFtZXRlcnMgYW5kIHByZXBhcmUgdG8gdHVuZSAqLwpAQCAtMTI3MSw3ICsxMzI4LDcgQEAKIAkvKiBTZXQvUmVzZXQgQi9XICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfQkFORFdJRFRIOwogCWNtZC5hcmdzWzB4MDFdID0gMHgwMTsKLQljbWQubGVuPSAweDAyOworCWNtZC5sZW4gPSAweDAyOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTEzMTksNyArMTM3Niw3IEBACiAJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1JBVEVESVYsIDB4MDApOwogCX0KIAotCWNtZC5sZW49IDB4MTM7CisJY21kLmxlbiA9IDB4MTM7CiAKIAkvKiBXZSBuZWVkIHRvIHN1cHBvcnQgcGlsb3QgYW5kIG5vbi1waWxvdCB0dW5pbmcgaW4gdGhlCiAJICogZHJpdmVyIGF1dG9tYXRpY2FsbHkuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBiZWNhdXNlCkBAIC0xMzI3LDEyICsxMzg0LDEzIEBACiAJICovCiAJZG8gewogCQkvKiBSZXNldCBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkJc3RhdHVzID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19TU1RBVFVTKSAmIENYMjQxMTZfU0lHTkFMX01BU0s7CisJCXN0YXR1cyA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUykKKwkJCSYgQ1gyNDExNl9TSUdOQUxfTUFTSzsKIAkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUywgc3RhdHVzKTsKIAogCQkvKiBUdW5lICovCiAJCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwotCQlpZiggcmV0ICE9IDAgKQorCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTM0MSwyOCArMTM5OSwyNyBAQAogCQkgKiBJZiB3ZSBhcmUgYWJsZSB0byB0dW5lIHRoZW4gZ2VuZXJhbGx5IGl0IG9jY3VycyB3aXRoaW4gMTAwbXMuCiAJCSAqIElmIGl0IHRha2VzIGxvbmdlciwgdHJ5IGEgZGlmZmVyZW50IHRvbmVidXJzdCBzZXR0aW5nLgogCQkgKi8KLQkJZm9yKGkgPSAwOyBpIDwgNTAgOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDUwIDsgaSsrKSB7CiAJCQljeDI0MTE2X3JlYWRfc3RhdHVzKGZlLCAmdHVuZXJzdGF0KTsKIAkJCXN0YXR1cyA9IHR1bmVyc3RhdCAmIChGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1NZTkMpOwotCQkJaWYoc3RhdHVzID09IChGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1NZTkMpKSB7Ci0JCQkJZHByaW50aygiJXM6IFR1bmVkXG4iLF9fZnVuY19fKTsKKwkJCWlmIChzdGF0dXMgPT0gKEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfU1lOQykpIHsKKwkJCQlkcHJpbnRrKCIlczogVHVuZWRcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIHR1bmVkOwogCQkJfQogCQkJbXNsZWVwKDEwKTsKIAkJfQogCi0JCWRwcmludGsoIiVzOiBOb3QgdHVuZWRcbiIsX19mdW5jX18pOworCQlkcHJpbnRrKCIlczogTm90IHR1bmVkXG4iLCBfX2Z1bmNfXyk7CiAKIAkJLyogVG9nZ2xlIHBpbG90IGJpdCB3aGVuIGluIGF1dG8tcGlsb3QgKi8KLQkJaWYoc3RhdGUtPmRjdXIucGlsb3QgPT0gUElMT1RfQVVUTykKKwkJaWYgKHN0YXRlLT5kY3VyLnBpbG90ID09IFBJTE9UX0FVVE8pCiAJCQljbWQuYXJnc1sweDA3XSBePSBDWDI0MTE2X1BJTE9UX09OOwotCX0KLQl3aGlsZSgtLXJldHVuZSk7CisJfSB3aGlsZSAoLS1yZXR1bmUpOwogCiB0dW5lZDogIC8qIFNldC9SZXNldCBCL1cgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9CQU5EV0lEVEg7CiAJY21kLmFyZ3NbMHgwMV0gPSAweDAwOwotCWNtZC5sZW49IDB4MDI7CisJY21kLmxlbiA9IDB4MDI7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTQwNywxNyArMTQ2NCw3IEBACiAJLnNldF9mcm9udGVuZCA9IGN4MjQxMTZfc2V0X2Zyb250ZW5kLAogfTsKIAotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKLQotbW9kdWxlX3BhcmFtKHRvbmVidXJzdCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModG9uZWJ1cnN0LCAiRGlTRXFDIHRvbmVidXJzdCAwPU9GRiwgMT1UT05FIENBQ0hFLCAyPU1FU1NBR0UgQ0FDSEUgKGRlZmF1bHQ6MSkiKTsKLQotbW9kdWxlX3BhcmFtKGVzbm9fc25yLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNOUiByZXR1cm4gdW5pdHMsIDA9UEVSQ0VOVEFHRSAwLTEwMCwgMT1FU05PKGRiICogMTApIChkZWZhdWx0OjApIik7Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiRFZCIEZyb250ZW5kIG1vZHVsZSBmb3IgQ29uZXhhbnQgY3gyNDExNi9jeDI0MTE4IGhhcmR3YXJlIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1FWFBPUlRfU1lNQk9MKGN4MjQxMTZfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5oCmluZGV4IDhkYmNlYzIuLjRjYjNkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuaApAQCAtMjMsMzEgKzIzLDMyIEBACiAKICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KIAotc3RydWN0IGN4MjQxMTZfY29uZmlnCi17CitzdHJ1Y3QgY3gyNDExNl9jb25maWcgewogCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCiAJdTggZGVtb2RfYWRkcmVzczsKIAogCS8qIE5lZWQgdG8gc2V0IGRldmljZSBwYXJhbSBmb3Igc3RhcnRfZG1hICovCi0JaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpOworCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKIAogCS8qIE5lZWQgdG8gcmVzZXQgZGV2aWNlIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nICovCi0JaW50ICgqcmVzZXRfZGV2aWNlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CisJaW50ICgqcmVzZXRfZGV2aWNlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CiAKIAkvKiBOZWVkIHRvIHNldCBNUEVHIHBhcmFtZXRlcnMgKi8KIAl1OCBtcGdfY2xrX3Bvc19wb2w6MHgwMjsKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDExNikgfHwgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTZfTU9EVUxFKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyogY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDExNl9hdHRhY2goCisJY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyNDExNl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnKiBjb25maWcsCi0JCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTE2X2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLy8gQ09ORklHX0RWQl9DWDI0MTE2CisjZW5kaWYKIAogI2VuZGlmIC8qIENYMjQxMTZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKaW5kZXggNzE1NjE1Ny4uMWE4YzM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCkBAIC0zMyw3ICszMywxMyBAQAogI2RlZmluZSBYVEFMIDEwMTExMDAwCiAKIHN0YXRpYyBpbnQgZm9yY2VfYmFuZDsKK21vZHVsZV9wYXJhbShmb3JjZV9iYW5kLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9iYW5kLCAiRm9yY2UgYSBzcGVjaWZpYyBiYW5kIHNlbGVjdCAiXAorCSIoMS05LCBkZWZhdWx0Om9mZikuIik7CisKIHN0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOwogCiAjZGVmaW5lIGluZm8oYXJncy4uLikgZG8geyBwcmludGsoS0VSTl9JTkZPICJDWDI0MTIzOiAiIGFyZ3MpOyB9IHdoaWxlICgwKQogI2RlZmluZSBlcnIoYXJncy4uLikgIGRvIHsgcHJpbnRrKEtFUk5fRVJSICAiQ1gyNDEyMzogIiBhcmdzKTsgfSB3aGlsZSAoMCkKQEAgLTQ2LDEwICs1Miw5IEBACiAJCX0gXAogCX0gd2hpbGUgKDApCiAKLXN0cnVjdCBjeDI0MTIzX3N0YXRlCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7Ci0JY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnKiBjb25maWc7CitzdHJ1Y3QgY3gyNDEyM19zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC03MCw4ICs3NSw3IEBACiB9OwogCiAvKiBWYXJpb3VzIHR1bmVyIGRlZmF1bHRzIG5lZWQgdG8gYmUgZXN0YWJsaXNoZWQgZm9yIGEgZ2l2ZW4gc3ltYm9sIHJhdGUgU3BzICovCi1zdGF0aWMgc3RydWN0Ci17CitzdGF0aWMgc3RydWN0IGN4MjQxMjNfQUdDX3ZhbCB7CiAJdTMyIHN5bWJvbHJhdGVfbG93OwogCXUzMiBzeW1ib2xyYXRlX2hpZ2g7CiAJdTMyIFZDQXByb2dkYXRhOwpAQCAtMTA5LDggKzExMyw3IEBACiAgKiBmaXhtZTogVGhlIGJvdW5kcyBvbiB0aGUgYmFuZHMgZG8gbm90IG1hdGNoIHRoZSBkb2MgaW4gcmVhbCBsaWZlLgogICogZml4bWU6IFNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gbW92ZWQsIG90aGVyIG1pZ2h0IG5lZWQgYWRqdXN0bWVudC4KICAqLwotc3RhdGljIHN0cnVjdAoteworc3RhdGljIHN0cnVjdCBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsIHsKIAl1MzIgZnJlcV9sb3c7CiAJdTMyIGZyZXFfaGlnaDsKIAl1MzIgVkNPZGl2aWRlcjsKQEAgLTI0OSw3ICsyNTIsOCBAQAogCiAJLyogcHJpbnRrKEtFUk5fREVCVUcgIndyKCUwMngpOiAlMDJ4ICUwMnhcbiIsIGkyY19hZGRyLCByZWcsIGRhdGEpOyAqLwogCi0JaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwllcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CisJaWYgKGVyciAhPSAxKSB7CiAJCXByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yKGVyciA9PSAlaSwgcmVnID09IDB4JTAyeCwiCiAJCQkgIiBkYXRhID09IDB4JTAyeClcbiIsIF9fZnVuY19fLCBlcnIsIHJlZywgZGF0YSk7CiAJCXJldHVybiBlcnI7CkBAIC0yODQsNyArMjg4LDggQEAKICNkZWZpbmUgY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgcmVnLCB2YWwpIFwKIAljeDI0MTIzX2kyY193cml0ZXJlZyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgcmVnLCB2YWwpCiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQorc3RhdGljIGludCBjeDI0MTIzX3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLAorCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbikKIHsKIAl1OCBub21fcmVnID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDBlKTsKIAl1OCBhdXRvX3JlZyA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxMCk7CkBAIC0zMTEsNyArMzE2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX2dldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCAqaW52ZXJzaW9uKQorc3RhdGljIGludCBjeDI0MTIzX2dldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLAorCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90ICppbnZlcnNpb24pCiB7CiAJdTggdmFsOwogCkBAIC0zMjgsMTggKzMzNCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X2ZlYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGZlX2NvZGVfcmF0ZV90IGZlYykKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwgZmVfY29kZV9yYXRlX3QgZmVjKQogewogCXU4IG5vbV9yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpICYgfjB4MDc7CiAKLQlpZiAoIChmZWMgPCBGRUNfTk9ORSkgfHwgKGZlYyA+IEZFQ19BVVRPKSApCisJaWYgKChmZWMgPCBGRUNfTk9ORSkgfHwgKGZlYyA+IEZFQ19BVVRPKSkKIAkJZmVjID0gRkVDX0FVVE87CiAKIAkvKiBTZXQgdGhlIHNvZnQgZGVjaXNpb24gdGhyZXNob2xkICovCi0JaWYoZmVjID09IEZFQ18xXzIpCi0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4NDMsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHg0MykgfCAweDAxKTsKKwlpZiAoZmVjID09IEZFQ18xXzIpCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4NDMsCisJCQljeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpIHwgMHgwMSk7CiAJZWxzZQotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpICYgfjB4MDEpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLAorCQkJY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDQzKSAmIH4weDAxKTsKIAogCXN3aXRjaCAoZmVjKSB7CiAJY2FzZSBGRUNfMV8yOgpAQCAtMzg4LDExICszOTYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX2dldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCAqZmVjKQorc3RhdGljIGludCBjeDI0MTIzX2dldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLCBmZV9jb2RlX3JhdGVfdCAqZmVjKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBjeDI0MTIzX3JlYWRyZWcgKHN0YXRlLCAweDFiKTsKKwlyZXQgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWIpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXJldCA9IHJldCAmIDB4MDc7CkBAIC00MzMsMTYgKzQ0MSwxNiBAQAogewogCXUzMiBleHAsIG5lYXJlc3QgPSAwOwogCXUzMiBkaXYgPSBhIC8gYjsKLQlpZihhICUgYiA+PSBiIC8gMikgKytkaXY7Ci0JaWYoZGl2IDwgKDEgPDwgMzEpKQotCXsKLQkJZm9yKGV4cCA9IDE7IGRpdiA+IGV4cDsgbmVhcmVzdCsrKQorCWlmIChhICUgYiA+PSBiIC8gMikKKwkJKytkaXY7CisJaWYgKGRpdiA8ICgxIDw8IDMxKSkgeworCQlmb3IgKGV4cCA9IDE7IGRpdiA+IGV4cDsgbmVhcmVzdCsrKQogCQkJZXhwICs9IGV4cDsKIAl9CiAJcmV0dXJuIG5lYXJlc3Q7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIHUzMiBzcmF0ZSkKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUsIHUzMiBzcmF0ZSkKIHsKIAl1MzIgdG1wLCBzYW1wbGVfcmF0ZSwgcmF0aW8sIHNhbXBsZV9nYWluOwogCXU4IHBsbF9tdWx0OwpAQCAtNDk4LDkgKzUwNiw5IEBACiAKIAljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAxLCBwbGxfbXVsdCAqIDYpOwogCi0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOCwgKHJhdGlvID4+IDE2KSAmIDB4M2YgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAocmF0aW8gPj4gIDgpICYgMHhmZiApOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGEsIChyYXRpbyAgICAgICkgJiAweGZmICk7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOCwgKHJhdGlvID4+IDE2KSAmIDB4M2YpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDksIChyYXRpbyA+PiA4KSAmIDB4ZmYpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGEsIHJhdGlvICYgMHhmZik7CiAKIAkvKiBhbHNvIHNldCB0aGUgZGVtb2R1bGF0b3Igc2FtcGxlIGdhaW4gKi8KIAlzYW1wbGVfZ2FpbiA9IGN4MjQxMjNfaW50X2xvZzIoc2FtcGxlX3JhdGUsIHNyYXRlKTsKQEAgLTUxNCwxMCArNTIyLDEyIEBACiB9CiAKIC8qCi0gKiBCYXNlZCBvbiB0aGUgcmVxdWlyZWQgZnJlcXVlbmN5IGFuZCBzeW1ib2xyYXRlLCB0aGUgdHVuZXIgQUdDIGhhcyB0byBiZSBjb25maWd1cmVkCi0gKiBhbmQgdGhlIGNvcnJlY3QgYmFuZCBzZWxlY3RlZC4gQ2FsY3VsYXRlIHRob3NlIHZhbHVlcworICogQmFzZWQgb24gdGhlIHJlcXVpcmVkIGZyZXF1ZW5jeSBhbmQgc3ltYm9scmF0ZSwgdGhlIHR1bmVyIEFHQyBoYXMKKyAqIHRvIGJlIGNvbmZpZ3VyZWQgYW5kIHRoZSBjb3JyZWN0IGJhbmQgc2VsZWN0ZWQuCisgKiBDYWxjdWxhdGUgdGhvc2UgdmFsdWVzLgogICovCi1zdGF0aWMgaW50IGN4MjQxMjNfcGxsX2NhbGN1bGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDI0MTIzX3BsbF9jYWxjdWxhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXUzMiBuZGl2ID0gMCwgYWRpdiA9IDAsIHZjb19kaXYgPSAwOwpAQCAtNTI1LDYgKzUzNSw4IEBACiAJaW50IHB1bXAgPSAyOwogCWludCBiYW5kID0gMDsKIAlpbnQgbnVtX2JhbmRzID0gQVJSQVlfU0laRShjeDI0MTIzX2JhbmRzZWxlY3RfdmFscyk7CisJc3RydWN0IGN4MjQxMjNfYmFuZHNlbGVjdF92YWwgKmJzdiA9IE5VTEw7CisJc3RydWN0IGN4MjQxMjNfQUdDX3ZhbCAqYWdjdiA9IE5VTEw7CiAKIAkvKiBEZWZhdWx0cyBmb3IgbG93IGZyZXEsIGxvdyByYXRlICovCiAJc3RhdGUtPlZDQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbMF0uVkNBcHJvZ2RhdGE7CkBAIC01MzIsNTggKzU0NCw2NSBAQAogCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbMF0ucHJvZ2RhdGE7CiAJdmNvX2RpdiA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLlZDT2RpdmlkZXI7CiAKLQkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbCByYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSwgVkdBIGFuZCBGSUxUVU5FIHByb2dyYW1taW5nIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjeDI0MTIzX0FHQ192YWxzKTsgaSsrKQotCXsKLQkJaWYgKChjeDI0MTIzX0FHQ192YWxzW2ldLnN5bWJvbHJhdGVfbG93IDw9IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgJiYKLQkJICAgIChjeDI0MTIzX0FHQ192YWxzW2ldLnN5bWJvbHJhdGVfaGlnaCA+PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICkgewotCQkJc3RhdGUtPlZDQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbaV0uVkNBcHJvZ2RhdGE7Ci0JCQlzdGF0ZS0+VkdBYXJnID0gY3gyNDEyM19BR0NfdmFsc1tpXS5WR0Fwcm9nZGF0YTsKLQkJCXN0YXRlLT5GSUxUdW5lID0gY3gyNDEyM19BR0NfdmFsc1tpXS5GSUxUdW5lOworCS8qIEZvciB0aGUgZ2l2ZW4gc3ltYm9sIHJhdGUsIGRldGVybWluZSB0aGUgVkNBLCBWR0EgYW5kCisJICogRklMVFVORSBwcm9ncmFtbWluZyBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3gyNDEyM19BR0NfdmFscyk7IGkrKykgeworCQlhZ2N2ID0gJmN4MjQxMjNfQUdDX3ZhbHNbaV07CisJCWlmICgoYWdjdi0+c3ltYm9scmF0ZV9sb3cgPD0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSAmJgorCQkgICAgKGFnY3YtPnN5bWJvbHJhdGVfaGlnaCA+PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpKSB7CisJCQlzdGF0ZS0+VkNBYXJnID0gYWdjdi0+VkNBcHJvZ2RhdGE7CisJCQlzdGF0ZS0+VkdBYXJnID0gYWdjdi0+VkdBcHJvZ2RhdGE7CisJCQlzdGF0ZS0+RklMVHVuZSA9IGFnY3YtPkZJTFR1bmU7CiAJCX0KIAl9CiAKIAkvKiBkZXRlcm1pbmUgdGhlIGJhbmQgdG8gdXNlICovCi0JaWYoZm9yY2VfYmFuZCA8IDEgfHwgZm9yY2VfYmFuZCA+IG51bV9iYW5kcykKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fYmFuZHM7IGkrKykKLQkJewotCQkJaWYgKChjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXS5mcmVxX2xvdyA8PSBwLT5mcmVxdWVuY3kpICYmCi0JCQkgICAgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2ldLmZyZXFfaGlnaCA+PSBwLT5mcmVxdWVuY3kpICkKKwlpZiAoZm9yY2VfYmFuZCA8IDEgfHwgZm9yY2VfYmFuZCA+IG51bV9iYW5kcykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmRzOyBpKyspIHsKKwkJCWJzdiA9ICZjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXTsKKwkJCWlmICgoYnN2LT5mcmVxX2xvdyA8PSBwLT5mcmVxdWVuY3kpICYmCisJCQkJKGJzdi0+ZnJlcV9oaWdoID49IHAtPmZyZXF1ZW5jeSkpCiAJCQkJYmFuZCA9IGk7CiAJCX0KLQl9Ci0JZWxzZQorCX0gZWxzZQogCQliYW5kID0gZm9yY2VfYmFuZCAtIDE7CiAKIAlzdGF0ZS0+YmFuZHNlbGVjdGFyZyA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLnByb2dkYXRhOwogCXZjb19kaXYgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5WQ09kaXZpZGVyOwogCiAJLyogZGV0ZXJtaW5lIHRoZSBjaGFyZ2UgcHVtcCBjdXJyZW50ICovCi0JaWYgKCBwLT5mcmVxdWVuY3kgPCAoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9sb3cgKyBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5mcmVxX2hpZ2gpLzIgKQorCWlmIChwLT5mcmVxdWVuY3kgPCAoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9sb3cgKworCQljeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5mcmVxX2hpZ2gpIC8gMikKIAkJcHVtcCA9IDB4MDE7CiAJZWxzZQogCQlwdW1wID0gMHgwMjsKIAogCS8qIERldGVybWluZSB0aGUgTi9BIGRpdmlkZXJzIGZvciB0aGUgcmVxdWVzdGVkIGxiYW5kIGZyZXEgKGluIGtIeikuICovCi0JLyogTm90ZTogdGhlIHJlZmVyZW5jZSBkaXZpZGVyIFI9MTAsIGZyZXF1ZW5jeSBpcyBpbiBLSHosIFhUQUwgaXMgaW4gSHogKi8KLQluZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYgKiAxMCkgLyAoMiAqIFhUQUwgLyAxMDAwKSkgLyAzMikgJiAweDFmZjsKLQlhZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYgKiAxMCkgLyAoMiAqIFhUQUwgLyAxMDAwKSkgJSAzMikgJiAweDFmOworCS8qIE5vdGU6IHRoZSByZWZlcmVuY2UgZGl2aWRlciBSPTEwLCBmcmVxdWVuY3kgaXMgaW4gS0h6LAorCSAqIFhUQUwgaXMgaW4gSHogKi8KKwluZGl2ID0gKCgocC0+ZnJlcXVlbmN5ICogdmNvX2RpdiAqIDEwKSAvCisJCSgyICogWFRBTCAvIDEwMDApKSAvIDMyKSAmIDB4MWZmOworCWFkaXYgPSAoKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8KKwkJKDIgKiBYVEFMIC8gMTAwMCkpICUgMzIpICYgMHgxZjsKIAogCWlmIChhZGl2ID09IDAgJiYgbmRpdiA+IDApCiAJCW5kaXYtLTsKIAotCS8qIGNvbnRyb2wgYml0cyAxMSwgcmVmZGl2IDExLCBjaGFyZ2UgcHVtcCBwb2xhcml0eSAxLCBjaGFyZ2UgcHVtcCBjdXJyZW50LCBuZGl2LCBhZGl2ICovCi0Jc3RhdGUtPnBsbGFyZyA9ICgzIDw8IDE5KSB8ICgzIDw8IDE3KSB8ICgxIDw8IDE2KSB8IChwdW1wIDw8IDE0KSB8IChuZGl2IDw8IDUpIHwgYWRpdjsKKwkvKiBjb250cm9sIGJpdHMgMTEsIHJlZmRpdiAxMSwgY2hhcmdlIHB1bXAgcG9sYXJpdHkgMSwKKwkgKiBjaGFyZ2UgcHVtcCBjdXJyZW50LCBuZGl2LCBhZGl2ICovCisJc3RhdGUtPnBsbGFyZyA9ICgzIDw8IDE5KSB8ICgzIDw8IDE3KSB8ICgxIDw8IDE2KSB8CisJCShwdW1wIDw8IDE0KSB8IChuZGl2IDw8IDUpIHwgYWRpdjsKIAogCXJldHVybiAwOwogfQogCiAvKgogICogVHVuZXIgZGF0YSBpcyAyMSBiaXRzIGxvbmcsIG11c3QgYmUgbGVmdC1hbGlnbmVkIGluIGRhdGEuCi0gKiBUdW5lciBjeDI0MTA5IGlzIHdyaXR0ZW4gdGhyb3VnaCBhIGRlZGljYXRlZCAzd2lyZSBpbnRlcmZhY2Ugb24gdGhlIGRlbW9kIGNoaXAuCisgKiBUdW5lciBjeDI0MTA5IGlzIHdyaXR0ZW4gdGhyb3VnaCBhIGRlZGljYXRlZCAzd2lyZSBpbnRlcmZhY2UKKyAqIG9uIHRoZSBkZW1vZCBjaGlwLgogICovCi1zdGF0aWMgaW50IGN4MjQxMjNfcGxsX3dyaXRlcmVnKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnAsIHUzMiBkYXRhKQorc3RhdGljIGludCBjeDI0MTIzX3BsbF93cml0ZXJlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnAsIHUzMiBkYXRhKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKQEAgLTYxMCw3ICs2MjksNyBAQAogCiAJLyogc2VuZCBhbm90aGVyIDggYnl0ZXMsIHdhaXQgZm9yIHRoZSBzZW5kIHRvIGJlIGNvbXBsZXRlZCAqLwogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg0MCk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMiwgKGRhdGE+PjgpICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhID4+IDgpICYgMHhmZik7CiAJd2hpbGUgKChjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjApICYgMHg0MCkgPT0gMCkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJZXJyKCIlczogIGRlbW9kdWxhdG9yIGlzIG5vdCByZXNwb25kaW5nLCAiXApAQCAtNjIwLDkgKzYzOSwxMCBAQAogCQltc2xlZXAoMTApOwogCX0KIAotCS8qIHNlbmQgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGlzIGJ5dGUsIHBhZGRlZCB3aXRoIDMgTEJCLCB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KKwkvKiBzZW5kIHRoZSBsb3dlciA1IGJpdHMgb2YgdGhpcyBieXRlLCBwYWRkZWQgd2l0aCAzIExCQiwKKwkgKiB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNDApOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhKSAmIDB4ZmYgKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YSkgJiAweGZmKTsKIAl3aGlsZSAoKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgJiAweDgwKSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJZXJyKCIlczogIGRlbW9kdWxhdG9yIGlzIG5vdCByZXNwb25kaW5nLCIgXApAQCAtNjM5LDcgKzY1OSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDI0MTIzX3BsbF90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCB2YWw7CkBAIC02OTAsNyArNzExLDcgQEAKIAlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMywgcik7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjQxMjNfaW5pdGZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCBpOwpAQCAtNjk5LDE5ICs3MjAsMjIgQEAKIAogCS8qIENvbmZpZ3VyZSB0aGUgZGVtb2QgdG8gYSBnb29kIHNldCBvZiBkZWZhdWx0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjQxMjNfcmVnZGF0YSk7IGkrKykKLQkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgY3gyNDEyM19yZWdkYXRhW2ldLnJlZywgY3gyNDEyM19yZWdkYXRhW2ldLmRhdGEpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCBjeDI0MTIzX3JlZ2RhdGFbaV0ucmVnLAorCQkJY3gyNDEyM19yZWdkYXRhW2ldLmRhdGEpOwogCiAJLyogU2V0IHRoZSBMTkIgcG9sYXJpdHkgKi8KLQlpZihzdGF0ZS0+Y29uZmlnLT5sbmJfcG9sYXJpdHkpCi0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MzIsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzMikgfCAweDAyKTsKKwlpZiAoc3RhdGUtPmNvbmZpZy0+bG5iX3BvbGFyaXR5KQorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDMyLAorCQkJY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDMyKSB8IDB4MDIpOwogCiAJaWYgKHN0YXRlLT5jb25maWctPmRvbnRfdXNlX3BsbCkKLQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOworCQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIGludCBjeDI0MTIzX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCB2YWw7CkBAIC03NDAsNyArNzY0LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOwogCXdoaWxlICghKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyOSkgJiAweDQwKSkgewotCQlpZih0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQllcnIoIiVzOiBkaXNlcWMgcXVldWUgbm90IHJlYWR5LCAiIFwKIAkJCQkiY29tbWFuZCBtYXkgYmUgbG9zdC5cbiIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOwpAQCAtNzQ5LDcgKzc3Myw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpjbWQpCitzdGF0aWMgaW50IGN4MjQxMjNfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaSwgdmFsLCB0b25lOwpAQCAtNzcxLDIwICs3OTYsMjEgQEAKIAkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyQyArIGksIGNtZC0+bXNnW2ldKTsKIAogCXZhbCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyOSk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgKCh2YWwgJiAweDkwKSB8IDB4NDApIHwgKChjbWQtPm1zZ19sZW4tMykgJiAzKSk7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgKCh2YWwgJiAweDkwKSB8IDB4NDApIHwKKwkJKChjbWQtPm1zZ19sZW4tMykgJiAzKSk7CiAKIAkvKiB3YWl0IGZvciBkaXNlcWMgbWVzc2FnZSB0byBmaW5pc2ggc2VuZGluZyAqLwogCWN4MjQxMjNfd2FpdF9mb3JfZGlzZXFjKHN0YXRlKTsKIAogCS8qIHJlc3RhcnQgY29udGludW91cyB0b25lIGlmIGVuYWJsZWQgKi8KLQlpZiAodG9uZSAmIDB4MTApIHsKKwlpZiAodG9uZSAmIDB4MTApCiAJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksIHRvbmUgJiB+MHg0MCk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19kaXNlcWNfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCitzdGF0aWMgaW50IGN4MjQxMjNfZGlzZXFjX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IHZhbCwgdG9uZTsKQEAgLTgxNCwxMyArODQwLDEzIEBACiAJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyYSwgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDJhKSAmIDB4ZmIpOwogCiAJLyogcmVzdGFydCBjb250aW51b3VzIHRvbmUgaWYgZW5hYmxlZCAqLwotCWlmICh0b25lICYgMHgxMCkgeworCWlmICh0b25lICYgMHgxMCkKIAkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgdG9uZSAmIH4weDQwKTsKLQl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCBzeW5jID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDE0KTsKQEAgLTg1Myw4ICs4NzksOSBAQAogfQogCiAvKgotICogQ29uZmlndXJlZCB0byByZXR1cm4gdGhlIG1lYXN1cmVtZW50IG9mIGVycm9ycyBpbiBibG9ja3MsIGJlY2F1c2Ugbm8gVUNCTE9DS1MgdmFsdWUKLSAqIGlzIGF2YWlsYWJsZSwgc28gdGhpcyB2YWx1ZSBkb3VibGVzIHVwIHRvIHNhdGlzZnkgYm90aCBtZWFzdXJlbWVudHMKKyAqIENvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBtZWFzdXJlbWVudCBvZiBlcnJvcnMgaW4gYmxvY2tzLAorICogYmVjYXVzZSBubyBVQ0JMT0NLUyB2YWx1ZSBpcyBhdmFpbGFibGUsIHNvIHRoaXMgdmFsdWUgZG91YmxlcyB1cAorICogdG8gc2F0aXNmeSBib3RoIG1lYXN1cmVtZW50cy4KICAqLwogc3RhdGljIGludCBjeDI0MTIzX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKQEAgLTg3Niw3ICs5MDMsOCBAQAogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JKnNpZ25hbF9zdHJlbmd0aCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzYikgPDwgODsgLyogbGFyZ2VyID0gYmV0dGVyICovCisJLyogbGFyZ2VyID0gYmV0dGVyICovCisJKnNpZ25hbF9zdHJlbmd0aCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzYikgPDwgODsKIAogCWRwcmludGsoIlNpZ25hbCBzdHJlbmd0aCA9ICVkXG4iLCAqc2lnbmFsX3N0cmVuZ3RoKTsKIApAQCAtOTA3LDcgKzkzNSw3IEBACiAJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCiAJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOwogCi0Jc3RhdGUtPmN1cnJlbnRmcmVxPXAtPmZyZXF1ZW5jeTsKKwlzdGF0ZS0+Y3VycmVudGZyZXEgPSBwLT5mcmVxdWVuY3k7CiAJc3RhdGUtPmN1cnJlbnRzeW1ib2xyYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlOwogCiAJY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0YXRlLCBwLT5pbnZlcnNpb24pOwpAQCAtOTMyLDcgKzk2MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCkBAIC05NTIsNyArOTgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggdmFsOwpAQCAtOTc3LDggKzEwMDYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKLQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zLAorc3RhdGljIGludCBjeDI0MTIzX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKIAkJCXVuc2lnbmVkIGludCBtb2RlX2ZsYWdzLAogCQkJdW5zaWduZWQgaW50ICpkZWxheSwKIAkJCWZlX3N0YXR1c190ICpzdGF0dXMpCkBAIC05OTcsMTIgKzEwMjYsMTIgQEAKIAogc3RhdGljIGludCBjeDI0MTIzX2dldF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXJldHVybiAxOyAvL0ZFX0FMR09fSFcKKwlyZXR1cm4gMTsgLyogRkVfQUxHT19IVyAqLwogfQogCi1zdGF0aWMgdm9pZCBjeDI0MTIzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBjeDI0MTIzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiXG4iKTsKIAlpMmNfZGVsX2FkYXB0ZXIoJnN0YXRlLT50dW5lcl9pMmNfYWRhcHRlcik7CiAJa2ZyZWUoc3RhdGUpOwpAQCAtMTAxMyw3ICsxMDQyLDcgQEAKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKIAkvKiB0aGlzIHJlcGVhdGVyIGNsb3NlcyBhZnRlciB0aGUgZmlyc3Qgc3RvcCAqLwotICAgIGN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMSk7CisJY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAxKTsKIAlyZXR1cm4gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgbnVtKTsKIH0KIApAQCAtMTAzNyw4ICsxMDY2LDggQEAKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMjNfb3BzOwogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcqIGNvbmZpZywKLQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcgKmNvbmZpZywKKwkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0KIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMjNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKQEAgLTEwNTcsMjAgKzEwODYsMjUgQEAKIAkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KIAlzdGF0ZS0+ZGVtb2RfcmV2ID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDAwKTsKIAlzd2l0Y2ggKHN0YXRlLT5kZW1vZF9yZXYpIHsKLQljYXNlIDB4ZTE6IGluZm8oImRldGVjdGVkIENYMjQxMjNDXG4iKTsgYnJlYWs7Ci0JY2FzZSAweGQxOiBpbmZvKCJkZXRlY3RlZCBDWDI0MTIzXG4iKTsgYnJlYWs7CisJY2FzZSAweGUxOgorCQlpbmZvKCJkZXRlY3RlZCBDWDI0MTIzQ1xuIik7CisJCWJyZWFrOworCWNhc2UgMHhkMToKKwkJaW5mbygiZGV0ZWN0ZWQgQ1gyNDEyM1xuIik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVycigid3JvbmcgZGVtb2QgcmV2aXNpb246ICV4XG4iLCBzdGF0ZS0+ZGVtb2RfcmV2KTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0JbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDEyM19vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjQxMjNfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKIAlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwogCi0gICAgLyogY3JlYXRlIHR1bmVyIGkyYyBhZGFwdGVyICovCi0gICAgaWYgKGNvbmZpZy0+ZG9udF91c2VfcGxsKQotCWN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMCk7CisJLyogY3JlYXRlIHR1bmVyIGkyYyBhZGFwdGVyICovCisJaWYgKGNvbmZpZy0+ZG9udF91c2VfcGxsKQorCQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOwogCiAJc3RybGNweShzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIubmFtZSwgIkNYMjQxMjMgdHVuZXIgSTJDIGJ1cyIsCiAJCXNpemVvZihzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIubmFtZSkpOwpAQCAtMTA3OSw3ICsxMTEzLDcgQEAKIAlzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIuYWxnb19kYXRhID0gTlVMTDsKIAlpMmNfc2V0X2FkYXBkYXRhKCZzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIsIHN0YXRlKTsKIAlpZiAoaTJjX2FkZF9hZGFwdGVyKCZzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIpIDwgMCkgewotCWVycigidHVuZXIgaTJjIGJ1cyBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWRcbiIpOworCQllcnIoInR1bmVyIGkyYyBidXMgY291bGQgbm90IGJlIGluaXRpYWxpemVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTEwOTAsNiArMTEyNCw3IEBACiAKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woY3gyNDEyM19hdHRhY2gpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDEyM19vcHMgPSB7CiAKQEAgLTExMjYsMTUgKzExNjEsOCBAQAogCS5nZXRfZnJvbnRlbmRfYWxnbyA9IGN4MjQxMjNfZ2V0X2FsZ28sCiB9OwogCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOwotCi1tb2R1bGVfcGFyYW0oZm9yY2VfYmFuZCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfYmFuZCwgIkZvcmNlIGEgc3BlY2lmaWMgYmFuZCBzZWxlY3QgKDEtOSwgZGVmYXVsdDpvZmYpLiIpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50ICIgXAogCSJDWDI0MTIzL0NYMjQxMDkvQ1gyNDExMyBoYXJkd2FyZSIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotRVhQT1JUX1NZTUJPTChjeDI0MTIzX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaAppbmRleCBjYzZiNDExLi41MWFlODY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmgKQEAgLTIzLDEzICsyMywxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCBjeDI0MTIzX2NvbmZpZwoteworc3RydWN0IGN4MjQxMjNfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CiAKIAkvKiBOZWVkIHRvIHNldCBkZXZpY2UgcGFyYW0gZm9yIHN0YXJ0X2RtYSAqLwotCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKKwlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGlzX3B1bmN0dXJlZCk7CiAKIAkvKiAwID0gTE5CIHZvbHRhZ2Ugbm9ybWFsLCAxID0gTE5CIHZvbHRhZ2UgaW52ZXJ0ZWQgKi8KIAlpbnQgbG5iX3BvbGFyaXR5OwpAQCAtMzksNyArMzgsOCBAQAogCXZvaWQgKCphZ2NfY2FsbGJhY2spIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyM19NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnICpjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKIGV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmN4MjQxMjNfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CkBAIC01Niw2ICs1Niw2IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLy8gQ09ORklHX0RWQl9DWDI0MTIzCisjZW5kaWYKIAogI2VuZGlmIC8qIENYMjQxMjNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMKaW5kZXggNzUwMGExYy4uY2Y0ZDg5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogc3RydWN0IHM1aDE0MDlfc3RhdGUgewogCi0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CiAKIAkvKiBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCi0JY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnKiBjb25maWc7CisJY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC00OCw2ICs0OCw5IEBACiB9OwogCiBzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIik7CisKICNkZWZpbmUgZHByaW50awlpZiAoZGVidWcpIHByaW50awogCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gaW5pdGlhbGlzZSB0aGUgZGVtb2QsIHRoaXMgd2lsbCBzZXQgVlNCIGJ5IGRlZmF1bHQgKi8KQEAgLTI5OSwxMCArMzAyLDEwIEBACiB9OwogCiAvKiA4IGJpdCByZWdpc3RlcnMsIDE2IGJpdCB2YWx1ZXMgKi8KLXN0YXRpYyBpbnQgczVoMTQwOV93cml0ZXJlZyhzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUsIHU4IHJlZywgdTE2IGRhdGEpCitzdGF0aWMgaW50IHM1aDE0MDlfd3JpdGVyZWcoc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHUxNiBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgPj4gOCwgIGRhdGEgJiAweGZmIH07CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSA+PiA4LCAgZGF0YSAmIDB4ZmYgfTsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkJICAgICAgIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAzIH07CkBAIC0zMTAsMTkgKzMxMywxOSBAQAogCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKIAogCWlmIChyZXQgIT0gMSkKLQkJcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwNHgsICIKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwNHgsICIKIAkJICAgICAgICJyZXQgPT0gJWkpXG4iLCBfX2Z1bmNfXywgcmVnLCBkYXRhLCByZXQpOwogCiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7CiB9CiAKLXN0YXRpYyB1MTYgczVoMTQwOV9yZWFkcmVnKHN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSwgdTggcmVnKQorc3RhdGljIHUxNiBzNWgxNDA5X3JlYWRyZWcoc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlLCB1OCByZWcpCiB7CiAJaW50IHJldDsKLQl1OCBiMCBbXSA9IHsgcmVnIH07Ci0JdTggYjEgW10gPSB7IDAsIDAgfTsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwLCAwIH07CiAKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgW10gPSB7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAogCQkgIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELApAQCAtMzM1LDkgKzMzOCw5IEBACiAJcmV0dXJuIChiMVswXSA8PCA4KSB8IGIxWzFdOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc29mdHJlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBzNWgxNDA5X3NvZnRyZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIApAQCAtMzQ5LDExICszNTIsMTEgQEAKIH0KIAogI2RlZmluZSBTNUgxNDA5X1ZTQl9JRl9GUkVRIDUzODAKLSNkZWZpbmUgUzVIMTQwOV9RQU1fSUZfRlJFUSBzdGF0ZS0+Y29uZmlnLT5xYW1faWYKKyNkZWZpbmUgUzVIMTQwOV9RQU1fSUZfRlJFUSAoc3RhdGUtPmNvbmZpZy0+cWFtX2lmKQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc2V0X2lmX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBLSHopCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X2lmX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBLSHopCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZCBLSHopXG4iLCBfX2Z1bmNfXywgS0h6KTsKIApAQCAtMzc2LDI2ICszNzksMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3NldF9zcGVjdHJhbGludmVyc2lvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGludmVydGVkKQorc3RhdGljIGludCBzNWgxNDA5X3NldF9zcGVjdHJhbGludmVyc2lvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGludmVydGVkKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgaW52ZXJ0ZWQpOwogCi0JaWYoaW52ZXJ0ZWQgPT0gMSkKKwlpZiAoaW52ZXJ0ZWQgPT0gMSkKIAkJcmV0dXJuIHM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4MWIsIDB4MTEwMSk7IC8qIEludmVydGVkICovCiAJZWxzZQogCQlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHgxYiwgMHgwMTEwKTsgLyogTm9ybWFsICovCiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9lbmFibGVfbW9kdWxhdGlvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKK3N0YXRpYyBpbnQgczVoMTQwOV9lbmFibGVfbW9kdWxhdGlvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkgICAgIGZlX21vZHVsYXRpb25fdCBtKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoMHglMDh4KVxuIiwgX19mdW5jX18sIG0pOwogCi0Jc3dpdGNoKG0pIHsKKwlzd2l0Y2ggKG0pIHsKIAljYXNlIFZTQl84OgogCQlkcHJpbnRrKCIlcygpIFZTQl84XG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0ZS0+aWZfZnJlcSAhPSBTNUgxNDA5X1ZTQl9JRl9GUkVRKQpAQCAtNDIyLDkgKzQyNSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBzNWgxNDA5X2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOwogCkBAIC00MzQsOSArNDM3LDkgQEAKIAkJcmV0dXJuIHM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4ZjMsIDApOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOwogCkBAIC00NDgsMTggKzQ1MSwxOCBAQAogCQkJczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGUzKSAmIDB4ZmVmZik7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CiAKIAlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhmMiwgZW5hYmxlKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBzNWgxNDA5X3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCkBAIC00ODMsNyArNDg2LDcgQEAKIAkJcmVnICY9IDB4ZmY7CiAKIAkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHg5NiwgMHgwMGMpOwotCQlpZiAoKHJlZyA8IDB4MzgpIHx8IChyZWcgPiAweDY4KSApIHsKKwkJaWYgKChyZWcgPCAweDM4KSB8fCAocmVnID4gMHg2OCkpIHsKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4OTMsIDB4MzMzMik7CiAJCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDllLCAweDJjMzcpOwogCQl9IGVsc2UgewpAQCAtNTE0LDcgKzUxNyw3IEBACiAKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4OTYsIDB4MjApOwogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhhZCwKLQkJCQkoICgocmVnMSAmIDB4ZjAwMCkgPj4gNCkgfCAocmVnMiAmIDB4ZjBmZikpICk7CisJCQkJKCgocmVnMSAmIDB4ZjAwMCkgPj4gNCkgfCAocmVnMiAmIDB4ZjBmZikpKTsKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4YWIsCiAJCQkJczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGFiKSAmIDB4ZWZmZSk7CiAJCX0KQEAgLTUyOSwxMCArNTMyLDEwIEBACiB9CiAKIC8qIFRhbGsgdG8gdGhlIGRlbW9kLCBzZXQgdGhlIEZFQywgR1VBUkQsIFFBTSBzZXR0aW5ncyBldGMgKi8KLXN0YXRpYyBpbnQgczVoMTQwOV9zZXRfZnJvbnRlbmQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorc3RhdGljIGludCBzNWgxNDA5X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoZnJlcXVlbmN5PSVkKVxuIiwgX19mdW5jX18sIHAtPmZyZXF1ZW5jeSk7CiAKQEAgLTU0Niw5ICs1NDksMTEgQEAKIAltc2xlZXAoMTAwKTsKIAogCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBwKTsKLQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJfQogCiAJLyogT3B0aW1pemUgdGhlIGRlbW9kIGZvciBRQU0gKi8KQEAgLTU5MiwxNyArNTk3LDE3IEBACiAKIC8qIFJlc2V0IHRoZSBkZW1vZCBoYXJkd2FyZSBhbmQgcmVzZXQgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwogICAgdG8gYSBkZWZhdWx0IHN0YXRlLiAqLwotc3RhdGljIGludCBzNWgxNDA5X2luaXQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBzNWgxNDA5X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJaW50IGk7CiAKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzNWgxNDA5X3NsZWVwKGZlLCAwKTsKIAlzNWgxNDA5X3JlZ2lzdGVyX3Jlc2V0KGZlKTsKIAotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkrKykKIAkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgaW5pdF90YWJbaV0ucmVnLCBpbml0X3RhYltpXS5kYXRhKTsKIAogCS8qIFRoZSBkYXRhc2hlZXQgc2F5cyB0aGF0IGFmdGVyIGluaXRpYWxpc2F0aW9uLCBWU0IgaXMgZGVmYXVsdCAqLwpAQCAtNjI3LDkgKzYzMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MTYgcmVnOwogCXUzMiB0dW5lcl9zdGF0dXMgPSAwOwogCkBAIC02MzcsMTIgKzY0MiwxMiBAQAogCiAJLyogR2V0IHRoZSBkZW1vZHVsYXRvciBzdGF0dXMgKi8KIAlyZWcgPSBzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZjEpOwotCWlmKHJlZyAmIDB4MTAwMCkKKwlpZiAocmVnICYgMHgxMDAwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwotCWlmKHJlZyAmIDB4ODAwMCkKKwlpZiAocmVnICYgMHg4MDAwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLIHwgRkVfSEFTX1NZTkM7CiAKLQlzd2l0Y2goc3RhdGUtPmNvbmZpZy0+c3RhdHVzX21vZGUpIHsKKwlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnN0YXR1c19tb2RlKSB7CiAJY2FzZSBTNUgxNDA5X0RFTU9ETE9DS0lORzoKIAkJaWYgKCpzdGF0dXMgJiBGRV9IQVNfVklURVJCSSkKIAkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfU0lHTkFMOwpAQCAtNjY4LDEyICs2NzMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3FhbTI1Nl9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNuciwgdTE2IHYpCitzdGF0aWMgaW50IHM1aDE0MDlfcWFtMjU2X2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yLCB1MTYgdikKIHsKIAlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUocWFtMjU2X3Nucl90YWIpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxYW0yNTZfc25yX3RhYik7IGkrKykgewogCQlpZiAodiA8IHFhbTI1Nl9zbnJfdGFiW2ldLnZhbCkgewogCQkJKnNuciA9IHFhbTI1Nl9zbnJfdGFiW2ldLmRhdGE7CiAJCQlyZXQgPSAwOwpAQCAtNjgzLDEyICs2ODgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcWFtNjRfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIsIHUxNiB2KQorc3RhdGljIGludCBzNWgxNDA5X3FhbTY0X2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yLCB1MTYgdikKIHsKIAlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUocWFtNjRfc25yX3RhYik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHFhbTY0X3Nucl90YWIpOyBpKyspIHsKIAkJaWYgKHYgPCBxYW02NF9zbnJfdGFiW2ldLnZhbCkgewogCQkJKnNuciA9IHFhbTY0X3Nucl90YWJbaV0uZGF0YTsKIAkJCXJldCA9IDA7CkBAIC02OTgsMTIgKzcwMywxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV92c2JfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIsIHUxNiB2KQorc3RhdGljIGludCBzNWgxNDA5X3ZzYl9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNuciwgdTE2IHYpCiB7CiAJaW50IGksIHJldCA9IC1FSU5WQUw7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKHZzYl9zbnJfdGFiKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnNiX3Nucl90YWIpOyBpKyspIHsKIAkJaWYgKHYgPiB2c2Jfc25yX3RhYltpXS52YWwpIHsKIAkJCSpzbnIgPSB2c2Jfc25yX3RhYltpXS5kYXRhOwogCQkJcmV0ID0gMDsKQEAgLTcxNCwxMyArNzE5LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNucikKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTE2IHJlZzsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlzd2l0Y2goc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgewogCWNhc2UgUUFNXzY0OgogCQlyZWcgPSBzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZjApICYgMHhmZjsKIAkJcmV0dXJuIHM1aDE0MDlfcWFtNjRfbG9va3VwX3NucihmZSwgc25yLCByZWcpOwpAQCAtNzM3LDMwICs3NDIsMzAgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJCQl1MTYqIHNpZ25hbF9zdHJlbmd0aCkKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJdTE2ICpzaWduYWxfc3RyZW5ndGgpCiB7CiAJcmV0dXJuIHM1aDE0MDlfcmVhZF9zbnIoZmUsIHNpZ25hbF9zdHJlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAkqdWNibG9ja3MgPSBzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4YjUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiBiZXIpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogewogCXJldHVybiBzNWgxNDA5X3JlYWRfdWNibG9ja3MoZmUsIGJlcik7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCitzdGF0aWMgaW50IHM1aDE0MDlfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXAtPmZyZXF1ZW5jeSA9IHN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeTsKIAlwLT51LnZzYi5tb2R1bGF0aW9uID0gc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbjsKQEAgLTc2OCwyNSArNzczLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKK3N0YXRpYyBpbnQgczVoMTQwOV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKIHsKIAl0dW5lLT5taW5fZGVsYXlfbXMgPSAxMDAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzNWgxNDA5X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBzNWgxNDA5X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJa2ZyZWUoc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgczVoMTQwOV9vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIHM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyogY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBOVUxMOworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IE5VTEw7CiAJdTE2IHJlZzsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCkBAIC04MjUsNiArODMwLDcgQEAKIAlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHM1aDE0MDlfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHM1aDE0MDlfb3BzID0gewogCkBAIC04NTAsMTQgKzg1NiwxMCBAQAogCS5yZWxlYXNlICAgICAgICAgICAgICA9IHM1aDE0MDlfcmVsZWFzZSwKIH07CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzVIMTQwOSBRQU0tQi9BVFNDIERlbW9kdWxhdG9yIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotRVhQT1JUX1NZTUJPTChzNWgxNDA5X2F0dGFjaCk7CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuaAppbmRleCBkMWExZDJlLi4wNzBkOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmgKQEAgLTI0LDggKzI0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi1zdHJ1Y3QgczVoMTQwOV9jb25maWcKLXsKK3N0cnVjdCBzNWgxNDA5X2NvbmZpZyB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwogCkBAIC02MCwxMiArNTksMTQgQEAKIAl1MTYgbXBlZ190aW1pbmc7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MDkpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQwOV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzNWgxNDA5X2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcqIGNvbmZpZywKLQkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDA5KSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MDlfTU9EVUxFKSBcCisJJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzNWgxNDA5X2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcqIGNvbmZpZywKLQkJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnM1aDE0MDlfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMKaW5kZXggMmRhMWEzNy4uNDA2NDRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jCkBAIC0zOCw2ICszOCw3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIAogCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247CisJdW5zaWduZWQgaW50IGZpcnN0X3R1bmU6MTsKIAogCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKIAlpbnQgaWZfZnJlcTsKQEAgLTYyLDcgKzYzLDcgQEAKIAl7IFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweDA4LCAweDAwNDcsIH0sCiAJeyBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHgxYywgMHgwNDAwLCB9LAogCXsgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4MWUsIDB4MDM3MCwgfSwKLQl7IFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweDFmLCAweDM0MmEsIH0sCisJeyBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHgxZiwgMHgzNDJjLCB9LAogCXsgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4MjQsIDB4MDIzMSwgfSwKIAl7IFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweDI1LCAweDEwMTEsIH0sCiAJeyBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHgyNiwgMHgwZjA3LCB9LApAQCAtMTAwLDcgKzEwMSw2IEBACiAJeyBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHg3OCwgMHgzMTQxLCB9LAogCXsgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4N2EsIDB4MzE0MSwgfSwKIAl7IFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweGIzLCAweDgwMDMsIH0sCi0JeyBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHhiNSwgMHhhZmJiLCB9LAogCXsgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4YjUsIDB4YTZiYiwgfSwKIAl7IFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweGI2LCAweDA2MDksIH0sCiAJeyBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHhiNywgMHgyZjA2LCB9LApAQCAtMzQzLDcgKzM0Myw3IEBACiAJdTggYWRkciwgdTggcmVnLCB1MTYgZGF0YSkKIHsKIAlpbnQgcmV0OwotCXU4IGJ1ZiBbXSA9IHsgcmVnLCBkYXRhID4+IDgsICBkYXRhICYgMHhmZiB9OworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgPj4gOCwgIGRhdGEgJiAweGZmIH07CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMgfTsKIApAQCAtMzU5LDEwICszNTksMTAgQEAKIHN0YXRpYyB1MTYgczVoMTQxMV9yZWFkcmVnKHN0cnVjdCBzNWgxNDExX3N0YXRlICpzdGF0ZSwgdTggYWRkciwgdTggcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyB9OwotCXU4IGIxIFtdID0geyAwLCAwIH07CisJdTggYjBbXSA9IHsgcmVnIH07CisJdTggYjFbXSA9IHsgMCwgMCB9OwogCi0Jc3RydWN0IGkyY19tc2cgbXNnIFtdID0geworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewogCQl7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAogCQl7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBiMSwgLmxlbiA9IDIgfSB9OwogCkBAIC0zOTMsNyArMzkzLDcgQEAKIAogCXN3aXRjaCAoS0h6KSB7CiAJY2FzZSAzMjUwOgotCQlzNWgxNDExX3dyaXRlcmVnKHN0YXRlLCBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHgzOCwgMHgxMGQ5KTsKKwkJczVoMTQxMV93cml0ZXJlZyhzdGF0ZSwgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4MzgsIDB4MTBkNSk7CiAJCXM1aDE0MTFfd3JpdGVyZWcoc3RhdGUsIFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweDM5LCAweDUzNDIpOwogCQlzNWgxNDExX3dyaXRlcmVnKHN0YXRlLCBTNUgxNDExX0kyQ19RQU1fQUREUiwgMHgyYywgMHgxMGQ5KTsKIAkJYnJlYWs7CkBAIC00NjQsMTMgKzQ2NCwyNSBAQAogCiAJaWYgKGludmVyc2lvbiA9PSAxKQogCQl2YWwgfD0gMHgxMDAwOyAvKiBJbnZlcnRlZCAqLwotCWVsc2UKLQkJdmFsIHw9IDB4MDAwMDsKIAogCXN0YXRlLT5pbnZlcnNpb24gPSBpbnZlcnNpb247CiAJcmV0dXJuIHM1aDE0MTFfd3JpdGVyZWcoc3RhdGUsIFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweDI0LCB2YWwpOwogfQogCitzdGF0aWMgaW50IHM1aDE0MTFfc2V0X3NlcmlhbG1vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBzZXJpYWwpCit7CisJc3RydWN0IHM1aDE0MTFfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHZhbDsKKworCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIHNlcmlhbCk7CisJdmFsID0gczVoMTQxMV9yZWFkcmVnKHN0YXRlLCBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHhiZCkgJiB+MHgxMDA7CisKKwlpZiAoc2VyaWFsID09IDEpCisJCXZhbCB8PSAweDEwMDsKKworCXJldHVybiBzNWgxNDExX3dyaXRlcmVnKHN0YXRlLCBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHhiZCwgdmFsKTsKK30KKwogc3RhdGljIGludCBzNWgxNDExX2VuYWJsZV9tb2R1bGF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSAgICAgZmVfbW9kdWxhdGlvbl90IG0pCiB7CkBAIC00NzgsNiArNDkwLDEyIEBACiAKIAlkcHJpbnRrKCIlcygweCUwOHgpXG4iLCBfX2Z1bmNfXywgbSk7CiAKKwlpZiAoKHN0YXRlLT5maXJzdF90dW5lID09IDApICYmIChtID09IHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pKSB7CisJCWRwcmludGsoIiVzKCkgQWxyZWFkeSBhdCBkZXNpcmVkIG1vZHVsYXRpb24uICBTa2lwcGluZy4uLlxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3dpdGNoIChtKSB7CiAJY2FzZSBWU0JfODoKIAkJZHByaW50aygiJXMoKSBWU0JfOFxuIiwgX19mdW5jX18pOwpAQCAtNTAyLDYgKzUyMCw3IEBACiAJfQogCiAJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IG07CisJc3RhdGUtPmZpcnN0X3R1bmUgPSAwOwogCXM1aDE0MTFfc29mdHJlc2V0KGZlKTsKIAogCXJldHVybiAwOwpAQCAtNTM1LDcgKzU1NCw3IEBACiAJCXJldHVybiBzNWgxNDExX3dyaXRlcmVnKHN0YXRlLCBTNUgxNDExX0kyQ19UT1BfQUREUiwgMHhlMCwgdmFsKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDExX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBzNWgxNDExX3NldF9wb3dlcnN0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBzNWgxNDExX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCkBAIC01NTEsNiArNTcwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgczVoMTQxMV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gczVoMTQxMV9zZXRfcG93ZXJzdGF0ZShmZSwgMSk7Cit9CisKIHN0YXRpYyBpbnQgczVoMTQxMV9yZWdpc3Rlcl9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgczVoMTQxMV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTU3NCw5ICs1OTgsNiBAQAogCiAJczVoMTQxMV9lbmFibGVfbW9kdWxhdGlvbihmZSwgcC0+dS52c2IubW9kdWxhdGlvbik7CiAKLQkvKiBBbGxvdyB0aGUgZGVtb2QgdG8gc2V0dGxlICovCi0JbXNsZWVwKDEwMCk7Ci0KIAlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykgewogCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKQEAgLTU4Nyw2ICs2MDgsMTAgQEAKIAkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJfQogCisJLyogSXNzdWUgYSByZXNldCB0byB0aGUgZGVtb2Qgc28gaXQga25vd3MgdG8gcmVzeW5jIGFnYWluc3QgdGhlCisJICAgbmV3bHkgdHVuZWQgZnJlcXVlbmN5ICovCisJczVoMTQxMV9zb2Z0cmVzZXQoZmUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5OSw3ICs2MjQsNyBAQAogCiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JczVoMTQxMV9zbGVlcChmZSwgMCk7CisJczVoMTQxMV9zZXRfcG93ZXJzdGF0ZShmZSwgMCk7CiAJczVoMTQxMV9yZWdpc3Rlcl9yZXNldChmZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkrKykKQEAgLTYxMCwxMiArNjM1LDE3IEBACiAJLyogVGhlIGRhdGFzaGVldCBzYXlzIHRoYXQgYWZ0ZXIgaW5pdGlhbGlzYXRpb24sIFZTQiBpcyBkZWZhdWx0ICovCiAJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IFZTQl84OwogCisJLyogQWx0aG91Z2ggdGhlIGRhdGFzaGVldCBzYXlzIGl0J3MgaW4gVlNCLCBlbXBpcmljYWwgZXZpZGVuY2UKKwkgICBzaG93cyBwcm9ibGVtcyBnZXR0aW5nIGxvY2sgb24gdGhlIGZpcnN0IHR1bmluZyByZXF1ZXN0LiAgTWFrZQorCSAgIHN1cmUgd2UgY2FsbCBlbmFibGVfbW9kdWxhdGlvbiB0aGUgZmlyc3QgdGltZSBhcm91bmQgKi8KKwlzdGF0ZS0+Zmlyc3RfdHVuZSA9IDE7CisKIAlpZiAoc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGUgPT0gUzVIMTQxMV9TRVJJQUxfT1VUUFVUKQogCQkvKiBTZXJpYWwgKi8KLQkJczVoMTQxMV93cml0ZXJlZyhzdGF0ZSwgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4YmQsIDB4MTEwMSk7CisJCXM1aDE0MTFfc2V0X3NlcmlhbG1vZGUoZmUsIDEpOwogCWVsc2UKIAkJLyogUGFyYWxsZWwgKi8KLQkJczVoMTQxMV93cml0ZXJlZyhzdGF0ZSwgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4YmQsIDB4MTAwMSk7CisJCXM1aDE0MTFfc2V0X3NlcmlhbG1vZGUoZmUsIDApOwogCiAJczVoMTQxMV9zZXRfc3BlY3RyYWxpbnZlcnNpb24oZmUsIHN0YXRlLT5jb25maWctPmludmVyc2lvbik7CiAJczVoMTQxMV9zZXRfaWZfZnJlcShmZSwgc3RhdGUtPmNvbmZpZy0+dnNiX2lmKTsKQEAgLTYzNywyOCArNjY3LDI5IEBACiAKIAkqc3RhdHVzID0gMDsKIAotCS8qIEdldCB0aGUgZGVtb2R1bGF0b3Igc3RhdHVzICovCi0JcmVnID0gKHM1aDE0MTFfcmVhZHJlZyhzdGF0ZSwgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4ZjIpID4+IDE1KQotCQkmIDB4MDAwMTsKLQlpZiAocmVnKQotCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfU0lHTkFMOworCS8qIFJlZ2lzdGVyIEYyIGJpdCAxNSA9IE1hc3RlciBMb2NrLCByZW1vdmVkICovCiAKIAlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKIAljYXNlIFFBTV82NDoKIAljYXNlIFFBTV8yNTY6CiAJCXJlZyA9IHM1aDE0MTFfcmVhZHJlZyhzdGF0ZSwgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4ZjApOwotCQlpZiAocmVnICYgMHgxMDApCi0JCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwotCQlpZiAocmVnICYgMHgxMCkKLQkJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CisJCWlmIChyZWcgJiAweDEwKSAvKiBRQU0gRkVDIExvY2sgKi8KKwkJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKKwkJaWYgKHJlZyAmIDB4MTAwKSAvKiBRQU0gRVEgTG9jayAqLworCQkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1NJR05BTDsKKwogCQlicmVhazsKIAljYXNlIFZTQl84OgotCQlyZWcgPSBzNWgxNDExX3JlYWRyZWcoc3RhdGUsIFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweDVlKTsKLQkJaWYgKHJlZyAmIDB4MDAwMSkKLQkJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CiAJCXJlZyA9IHM1aDE0MTFfcmVhZHJlZyhzdGF0ZSwgUzVIMTQxMV9JMkNfVE9QX0FERFIsIDB4ZjIpOwotCQlpZiAocmVnICYgMHgxMDAwKQotCQkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKwkJaWYgKHJlZyAmIDB4MTAwMCkgLyogRkVDIExvY2sgKi8KKwkJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKKwkJaWYgKHJlZyAmIDB4MjAwMCkgLyogRVEgTG9jayAqLworCQkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1NJR05BTDsKKworCQlyZWcgPSBzNWgxNDExX3JlYWRyZWcoc3RhdGUsIFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweDUzKTsKKwkJaWYgKHJlZyAmIDB4MSkgLyogQUZDIExvY2sgKi8KKwkJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg2Myw2ICs4OTQsNyBAQAogCX0sCiAKIAkuaW5pdCAgICAgICAgICAgICAgICAgPSBzNWgxNDExX2luaXQsCisJLnNsZWVwICAgICAgICAgICAgICAgID0gczVoMTQxMV9zbGVlcCwKIAkuaTJjX2dhdGVfY3RybCAgICAgICAgPSBzNWgxNDExX2kyY19nYXRlX2N0cmwsCiAJLnNldF9mcm9udGVuZCAgICAgICAgID0gczVoMTQxMV9zZXRfZnJvbnRlbmQsCiAJLmdldF9mcm9udGVuZCAgICAgICAgID0gczVoMTQxMV9nZXRfZnJvbnRlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuaAppbmRleCA3ZDU0MmJjLi40NWVjMGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAl1MTYgbXBlZ190aW1pbmc7CiAKIAkvKiBJRiBGcmVxIGZvciBRQU0gYW5kIFZTQiBpbiBLSHogKi8KLSNkZWZpbmUgUzVIMTQxMV9JRl8yNTAwICAyNTAwCisjZGVmaW5lIFM1SDE0MTFfSUZfMzI1MCAgMzI1MAogI2RlZmluZSBTNUgxNDExX0lGXzM1MDAgIDM1MDAKICNkZWZpbmUgUzVIMTQxMV9JRl80MDAwICA0MDAwCiAjZGVmaW5lIFM1SDE0MTFfSUZfNTM4MCAgNTM4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDQ4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYwppbmRleCAwNGU3ZjFjLi4yYThiYmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYwpAQCAtMTk1LDcgKzE5NSw3IEBACiBzdGF0aWMgaW50IHRkYTEwMDQ4X3dyaXRlcmVnKHN0cnVjdCB0ZGExMDA0OF9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKIHsKIAlpbnQgcmV0OwotCXU4IGJ1ZiBbXSA9IHsgcmVnLCBkYXRhIH07CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKIAkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OwpAQCAtMjEzLDkgKzIxMyw5IEBACiBzdGF0aWMgdTggdGRhMTAwNDhfcmVhZHJlZyhzdHJ1Y3QgdGRhMTAwNDhfc3RhdGUgKnN0YXRlLCB1OCByZWcpCiB7CiAJaW50IHJldDsKLQl1OCBiMCBbXSA9IHsgcmVnIH07Ci0JdTggYjEgW10gPSB7IDAgfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgW10gPSB7CisJdTggYjBbXSA9IHsgcmVnIH07CisJdTggYjFbXSA9IHsgMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKIAkJCS5mbGFncyA9IDAsIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCkBAIC0zOTMsNDMgKzM5Myw4OSBAQAogCiAJdmFsID0gdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfT1VUX0NPTkYyKTsKIAlzd2l0Y2ggKCh2YWwgJiAweDYwKSA+PiA1KSB7Ci0JY2FzZSAwOiBwLT5jb25zdGVsbGF0aW9uID0gICBRUFNLOyBicmVhazsKLQljYXNlIDE6IHAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7IGJyZWFrOwotCWNhc2UgMjogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsgYnJlYWs7CisJY2FzZSAwOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUVBTSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUUFNXzE2OworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7CisJCWJyZWFrOwogCX0KIAlzd2l0Y2ggKCh2YWwgJiAweDE4KSA+PiAzKSB7Ci0JY2FzZSAwOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfTk9ORTsgYnJlYWs7Ci0JY2FzZSAxOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfMTsgYnJlYWs7Ci0JY2FzZSAyOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfMjsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfNDsgYnJlYWs7CisJY2FzZSAwOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfNDsKKwkJYnJlYWs7CiAJfQogCXN3aXRjaCAodmFsICYgMHgwNykgewotCWNhc2UgMDogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsgYnJlYWs7Ci0JY2FzZSAxOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOyBicmVhazsKLQljYXNlIDI6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7IGJyZWFrOwotCWNhc2UgMzogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzVfNjsgYnJlYWs7Ci0JY2FzZSA0OiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQogCiAJdmFsID0gdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfT1VUX0NPTkYzKTsKIAlzd2l0Y2ggKHZhbCAmIDB4MDcpIHsKLQljYXNlIDA6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7IGJyZWFrOwotCWNhc2UgMTogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsgYnJlYWs7Ci0JY2FzZSAyOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OyBicmVhazsKLQljYXNlIDM6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7IGJyZWFrOwotCWNhc2UgNDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsgYnJlYWs7CisJY2FzZSAwOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OworCQlicmVhazsKKwljYXNlIDQ6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ183Xzg7CisJCWJyZWFrOwogCX0KIAogCXZhbCA9IHRkYTEwMDQ4X3JlYWRyZWcoc3RhdGUsIFREQTEwMDQ4X09VVF9DT05GMSk7CiAJc3dpdGNoICgodmFsICYgMHgwYykgPj4gMikgewotCWNhc2UgMDogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOyBicmVhazsKLQljYXNlIDE6IHAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsgYnJlYWs7Ci0JY2FzZSAyOiBwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzg7IGJyZWFrOwotCWNhc2UgMzogcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV80OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV84OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfNDsKKwkJYnJlYWs7CiAJfQogCXN3aXRjaCAodmFsICYgMHgwMikgewotCWNhc2UgMDogcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsgYnJlYWs7Ci0JY2FzZSAxOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOyBicmVhazsKKwljYXNlIDA6CisJCXAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvejAxOTRhLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvejAxOTRhLmgKaW5kZXggZDI4NzZkMi4uMDdmM2ZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96MDE5NGEuaApAQCAtMTIsNyArMTIsNyBAQAogI2lmbmRlZiBaMDE5NEEKICNkZWZpbmUgWjAxOTRBCiAKLXN0YXRpYyBpbnQgc2hhcnBfejAxOTRhX19zZXRfc3ltYm9sX3JhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCitzdGF0aWMgaW50IHNoYXJwX3owMTk0YV9zZXRfc3ltYm9sX3JhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJCSB1MzIgc3JhdGUsIHUzMiByYXRpbykKIHsKIAl1OCBhY2xrID0gMDsKQEAgLTQwLDcgKzQwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHU4IHNoYXJwX3owMTk0YV9faW5pdHRhYltdID0geworc3RhdGljIHU4IHNoYXJwX3owMTk0YV9pbml0dGFiW10gPSB7CiAJMHgwMSwgMHgxNSwKIAkweDAyLCAweDAwLAogCTB4MDMsIDB4MDAsCkBAIC04MiwxNiArODIsNCBAQAogCTB4ZmYsIDB4ZmYKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2hhcnBfejAxOTRhX2NvbmZpZyA9IHsKLQkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCi0JLmluaXR0YWIgPSBzaGFycF96MDE5NGFfX2luaXR0YWIsCi0JLm1jbGsgPSA4ODAwMDAwMFVMLAotCS5pbnZlcnQgPSAxLAotCS5za2lwX3JlaW5pdCA9IDAsCi0JLmxvY2tfb3V0cHV0ID0gU1RWMDI5OV9MT0NLT1VUUFVUXzEsCi0JLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLAotCS5taW5fZGVsYXlfbXMgPSAxMDAsCi0JLnNldF9zeW1ib2xfcmF0ZSA9IHNoYXJwX3owMTk0YV9fc2V0X3N5bWJvbF9yYXRlLAotfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCmluZGV4IDlkYTI2MGYuLjZmOWI3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCkBAIC00Miw2ICs0MiwxMCBAQAogCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTEwKSwKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUyMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MzApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTgwKSwKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU5MCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IGM3Yzc3MGMuLmFhMWZmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01Miw2ICs1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCBlNTFkNzA3Li4wNGNkN2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC0zNTksNyArMzU5LDcgQEAKIAkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLXNpbGFicy4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby1zaTQ3MHguCiAKIGNvbmZpZyBVU0JfTVI4MDAKIAl0cmlzdGF0ZSAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gcmFkaW8gc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKaW5kZXggNjY3ODNmZi4uYTVjYTE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKQEAgLTE3MSwxMSArMTcxLDExIEBACiAJaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCiAJCQlVU0JfUkVRX0dFVF9TVEFUVVMsCiAJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKLQkJCTB4MDAsIDB4QzcsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAorCQkJMHgwMCwgMHhDNywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKSA8IDAgfHwKIAl1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAogCQkJRFNCMTAwX09OT0ZGLAogCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCQkweDAxLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCisJCQkweDAxLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApIDwgMCkKIAkJcmV0dXJuIC0xOwogCXJhZGlvLT5tdXRlZD0wOwogCXJldHVybiAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF07CkBAIC0xODgsMTEgKzE4OCwxMSBAQAogCWlmICh1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAogCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAogCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCQkweDE2LCAweDFDLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDAgfHwKKwkJCTB4MTYsIDB4MUMsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCkgPCAwIHx8CiAJdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKIAkJCURTQjEwMF9PTk9GRiwKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAotCQkJMHgwMCwgMHgwMCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwKQorCQkJMHgwMCwgMHgwMCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKSA8IDApCiAJCXJldHVybiAtMTsKIAlyYWRpby0+bXV0ZWQ9MTsKIAlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOwpAQCAtMjAxLDI0ICsyMDEsMjQgQEAKIC8qIHNldCBhIGZyZXF1ZW5jeSwgZnJlcSBpcyBkZWZpbmVkIGJ5IHY0bCdzIFRVTkVSX0xPVywgaS5lLiAxLzE2dGgga0h6ICovCiBzdGF0aWMgaW50IGRzYnIxMDBfc2V0ZnJlcShzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvLCBpbnQgZnJlcSkKIHsKLQlmcmVxID0gKGZyZXEvMTYqODApLzEwMDArODU2OworCWZyZXEgPSAoZnJlcSAvIDE2ICogODApIC8gMTAwMCArIDg1NjsKIAlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKIAkJCURTQjEwMF9UVU5FLAogCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCQkoZnJlcT4+OCkmMHgwMGZmLCBmcmVxJjB4ZmYsCi0JCQlyYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDAgfHwKKwkJCShmcmVxID4+IDgpICYgMHgwMGZmLCBmcmVxICYgMHhmZiwKKwkJCXJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCkgPCAwIHx8CiAJICAgdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKIAkJCVVTQl9SRVFfR0VUX1NUQVRVUywKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAotCQkJMHg5NiwgMHhCNywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwIHx8CisJCQkweDk2LCAweEI3LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApIDwgMCB8fAogCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCiAJCQlVU0JfUkVRX0dFVF9TVEFUVVMsCiAJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgIFVTQl9ESVJfSU4sCi0JCQkweDAwLCAweDI0LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApIHsKKwkJCTB4MDAsIDB4MjQsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCkgPCAwKSB7CiAJCXJhZGlvLT5zdGVyZW8gPSAtMTsKIAkJcmV0dXJuIC0xOwogCX0KLQlyYWRpby0+c3RlcmVvID0gISAoKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdJjB4MDEpOworCXJhZGlvLT5zdGVyZW8gPSAhKChyYWRpby0+dHJhbnNmZXJfYnVmZmVyKVswXSAmIDB4MDEpOwogCXJldHVybiAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF07CiB9CiAKQEAgLTIyOSwxMCArMjI5LDEwIEBACiAJaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCiAJCVVTQl9SRVFfR0VUX1NUQVRVUywKIAkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCTB4MDAgLCAweDI0LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCisJCTB4MDAgLCAweDI0LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApIDwgMCkKIAkJcmFkaW8tPnN0ZXJlbyA9IC0xOwogCWVsc2UKLQkJcmFkaW8tPnN0ZXJlbyA9ICEgKHJhZGlvLT50cmFuc2Zlcl9idWZmZXJbMF0mMHgwMSk7CisJCXJhZGlvLT5zdGVyZW8gPSAhKHJhZGlvLT50cmFuc2Zlcl9idWZmZXJbMF0gJiAweDAxKTsKIH0KIAogCkBAIC0yNjUsNyArMjY1LDcgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgImRzYnIxMDAiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXNwcmludGYodi0+YnVzX2luZm8sICJVU0IiKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKIAl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKIAlyZXR1cm4gMDsKQEAgLTI4Miw5ICsyODIsOSBAQAogCWRzYnIxMDBfZ2V0c3RhdChyYWRpbyk7CiAJc3RyY3B5KHYtPm5hbWUsICJGTSIpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gRlJFUV9NSU4qRlJFUV9NVUw7Ci0Jdi0+cmFuZ2VoaWdoID0gRlJFUV9NQVgqRlJFUV9NVUw7Ci0Jdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPnJhbmdlbG93ID0gRlJFUV9NSU4gKiBGUkVRX01VTDsKKwl2LT5yYW5nZWhpZ2ggPSBGUkVRX01BWCAqIEZSRVFfTVVMOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJaWYocmFkaW8tPnN0ZXJlbykKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CkBAIC0zMDksOCArMzA5LDggQEAKIAlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCWlmIChkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKT09LTEpCi0JCXdhcm4oIlNldCBmcmVxdWVuY3kgZmFpbGVkIik7CisJaWYgKGRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpID09IC0xKQorCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LCAiU2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0zMzEsOCArMzMxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CiAJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0zNjEsMTIgKzM2MCwxNCBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKSB7CiAJCQlpZiAoZHNicjEwMF9zdG9wKHJhZGlvKSA9PSAtMSkgewotCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJCWRldl93YXJuKCZyYWRpby0+dXNiZGV2LT5kZXYsCisJCQkJCSAiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5XG4iKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pID09IC0xKSB7Ci0JCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCQkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCQkJICJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHlcbiIpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCX0KQEAgLTQxMCwxOCArNDExLDI1IEBACiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldHZhbDsKIAogCWxvY2tfa2VybmVsKCk7CiAJcmFkaW8tPnVzZXJzID0gMTsKIAlyYWRpby0+bXV0ZWQgPSAxOwogCi0JaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pPDApIHsKLQkJd2FybigiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseSIpOworCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKSA8IDApIHsKKwkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCSAiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseVxuIik7CiAJCXJhZGlvLT51c2VycyA9IDA7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpOworCisJcmV0dmFsID0gZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk7CisKKwlpZiAocmV0dmFsID09IC0xKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FICI6IFNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKKwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4MiwxMyArNDkwLDIwIEBACiB7CiAJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbzsKIAotCWlmICghKHJhZGlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRzYnIxMDBfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCXJhZGlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRzYnIxMDBfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJhZGlvKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoIShyYWRpby0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhUQl9MRU4sIEdGUF9LRVJORUwpKSkgeworCisJcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVEJfTEVOLCBHRlBfS0VSTkVMKTsKKworCWlmICghKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpKSB7CiAJCWtmcmVlKHJhZGlvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWlmICghKHJhZGlvLT52aWRlb2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpKSkgeworCXJhZGlvLT52aWRlb2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCisJaWYgKCEocmFkaW8tPnZpZGVvZGV2KSkgewogCQlrZnJlZShyYWRpby0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJa2ZyZWUocmFkaW8pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ5OCwxMCArNTEzLDEwIEBACiAJcmFkaW8tPnJlbW92ZWQgPSAwOwogCXJhZGlvLT51c2VycyA9IDA7CiAJcmFkaW8tPnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JcmFkaW8tPmN1cmZyZXEgPSBGUkVRX01JTipGUkVRX01VTDsKKwlyYWRpby0+Y3VyZnJlcSA9IEZSRVFfTUlOICogRlJFUV9NVUw7CiAJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7CiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXdhcm4oIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOwogCQlrZnJlZShyYWRpby0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJa2ZyZWUocmFkaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCmluZGV4IGEzMzcxN2MuLjI1NmNiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKQEAgLTQ2OSwxNiArNDY5LDIxIEBACiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOwogCisJbG9ja19rZXJuZWwoKTsKKwogCXJhZGlvLT51c2VycyA9IDE7CiAJcmFkaW8tPm11dGVkID0gMTsKIAogCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApIHsKIAkJd2FybigiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseSIpOwogCQlyYWRpby0+dXNlcnMgPSAwOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAoYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSkgPCAwKQogCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwppbmRleCBmNmNlZGNkLi41OTIwY2QzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCkBAIC0xMDQsNiArMTA0LDcgQEAKICAqCQktIGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrIHN1cHBvcnQKICAqCQktIGFmYyBpbmRpY2F0aW9uCiAgKgkJLSBtb3JlIHNhZmV0eSBjaGVja3MsIGxldCBzaTQ3MHhfZ2V0X2ZyZXEgcmV0dXJuIGVycm5vCisgKgkJLSB2aWRpb2MgYmVoYXZpb3IgY29ycmVjdGVkIGFjY29yZGluZyB0byB2NGwyIHNwZWMKICAqCiAgKiBUb0RvOgogICogLSBhZGQgZmlybXdhcmUgZG93bmxvYWQvdXBkYXRlIHN1cHBvcnQKQEAgLTE0MSw5ICsxNDIsOSBAQAogLyogVVNCIERldmljZSBJRCBMaXN0ICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2k0NzB4X3VzYl9kcml2ZXJfaWRfdGFibGVbXSA9IHsKIAkvKiBTaWxpY29uIExhYnMgVVNCIEZNIFJhZGlvIFJlZmVyZW5jZSBEZXNpZ24gKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTBjNCwgMHg4MThhLAlVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGM0LCAweDgxOGEsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCiAJLyogQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpICovCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDA2ZTEsIDB4YTE1NSwJVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyB9CiB9OwpAQCAtMTU3LDcgKzE1OCw3IEBACiAKIC8qIFJhZGlvIE5yICovCiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiUmFkaW8gTnIiKTsKIAogLyogU3BhY2luZyAoa0h6KSAqLwpAQCAtMTY1LDQyICsxNjYsNDIgQEAKIC8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCiAvKiAyOiAgNTAga0h6ICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc3BhY2UgPSAyOwotbW9kdWxlX3BhcmFtKHNwYWNlLCB1c2hvcnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIlNwYWNpbmc6IDA9MjAwa0h6IDE9MTAwa0h6ICoyPTUwa0h6KiIpOworbW9kdWxlX3BhcmFtKHNwYWNlLCB1c2hvcnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzcGFjZSwgIlNwYWNpbmc6IDA9MjAwa0h6IDE9MTAwa0h6ICoyPTUwa0h6KiIpOwogCiAvKiBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLwogLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSovCiAvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwogLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGJhbmQgPSAxOwotbW9kdWxlX3BhcmFtKGJhbmQsIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiQmFuZDogMD04Ny41Li4xMDhNSHogKjE9NzYuLjEwOE1IeiogMj03Ni4uOTBNSHoiKTsKK21vZHVsZV9wYXJhbShiYW5kLCB1c2hvcnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhiYW5kLCAiQmFuZDogMD04Ny41Li4xMDhNSHogKjE9NzYuLjEwOE1IeiogMj03Ni4uOTBNSHoiKTsKIAogLyogRGUtZW1waGFzaXMgKi8KIC8qIDA6IDc1IHVzIChVU0EpICovCiAvKiAxOiA1MCB1cyAoRXVyb3BlLCBBdXN0cmFsaWEsIEphcGFuKSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlID0gMTsKLW1vZHVsZV9wYXJhbShkZSwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJEZS1lbXBoYXNpczogMD03NXVzICoxPTUwdXMqIik7Cittb2R1bGVfcGFyYW0oZGUsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlLCAiRGUtZW1waGFzaXM6IDA9NzV1cyAqMT01MHVzKiIpOwogCiAvKiBVU0IgdGltZW91dCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB1c2JfdGltZW91dCA9IDUwMDsKLW1vZHVsZV9wYXJhbSh1c2JfdGltZW91dCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0odXNiX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2JfdGltZW91dCwgIlVTQiB0aW1lb3V0IChtcyk6ICo1MDAqIik7CiAKIC8qIFR1bmUgdGltZW91dCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB0dW5lX3RpbWVvdXQgPSAzMDAwOwotbW9kdWxlX3BhcmFtKHR1bmVfdGltZW91dCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0odHVuZV90aW1lb3V0LCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModHVuZV90aW1lb3V0LCAiVHVuZSB0aW1lb3V0OiAqMzAwMCoiKTsKIAogLyogU2VlayB0aW1lb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlZWtfdGltZW91dCA9IDUwMDA7Ci1tb2R1bGVfcGFyYW0oc2Vla190aW1lb3V0LCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShzZWVrX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzZWVrX3RpbWVvdXQsICJTZWVrIHRpbWVvdXQ6ICo1MDAwKiIpOwogCiAvKiBSRFMgYnVmZmVyIGJsb2NrcyAqLwogc3RhdGljIHVuc2lnbmVkIGludCByZHNfYnVmID0gMTAwOwotbW9kdWxlX3BhcmFtKHJkc19idWYsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKHJkc19idWYsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZHNfYnVmLCAiUkRTIGJ1ZmZlciBlbnRyaWVzOiAqMTAwKiIpOwogCiAvKiBSRFMgbWF4aW11bSBibG9jayBlcnJvcnMgKi8KQEAgLTIwOSw3ICsyMTAsNyBAQAogLyogMSBtZWFucyAxLTIgIGVycm9ycyByZXF1aXJpbmcgY29ycmVjdGlvbiAodXNlZCBieSBvcmlnaW5hbCBVU0JSYWRpby5leGUpICovCiAvKiAyIG1lYW5zIDMtNSAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICovCiAvKiAzIG1lYW5zICAgNisgZXJyb3JzIG9yIGVycm9ycyBpbiBjaGVja3dvcmQsIGNvcnJlY3Rpb24gbm90IHBvc3NpYmxlICovCi1tb2R1bGVfcGFyYW0obWF4X3Jkc19lcnJvcnMsIHVzaG9ydCwgMCk7Cittb2R1bGVfcGFyYW0obWF4X3Jkc19lcnJvcnMsIHVzaG9ydCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9yZHNfZXJyb3JzLCAiUkRTIG1heGltdW0gYmxvY2sgZXJyb3JzOiAqMSoiKTsKIAogLyogUkRTIHBvbGwgZnJlcXVlbmN5ICovCkBAIC0yMTgsNyArMjE5LDcgQEAKIC8qIDUwIGlzIHVzZWQgYnkgcmFkaW8tY2FkZXQgKi8KIC8qIDc1IHNob3VsZCBiZSBva2F5ICovCiAvKiA4MCBpcyB0aGUgdXN1YWwgUkRTIHJlY2VpdmUgaW50ZXJ2YWwgKi8KLW1vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmRzX3BvbGxfdGltZSwgIlJEUyBwb2xsIHRpbWUgKG1zKTogKjQwKiIpOwogCiAKQEAgLTY2NywyMyArNjY4LDI5IEBACiAJaW50IHJldHZhbDsKIAogCS8qIFNwYWNpbmcgKGtIeikgKi8KLQlzd2l0Y2ggKHNwYWNlKSB7CisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfU1BBQ0UpID4+IDQpIHsKIAkvKiAwOiAyMDAga0h6IChVU0EsIEF1c3RyYWxpYSkgKi8KLQljYXNlIDAgOiBzcGFjaW5nID0gMC4yMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAwOgorCQlzcGFjaW5nID0gMC4yMDAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMTogMTAwIGtIeiAoRXVyb3BlLCBKYXBhbikgKi8KLQljYXNlIDEgOiBzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAxOgorCQlzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogIDUwIGtIeiAqLwotCWRlZmF1bHQ6IHNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQlzcGFjaW5nID0gMC4wNTAgKiBGUkVRX01VTDsgYnJlYWs7CiAJfTsKIAogCS8qIEJvdHRvbSBvZiBCYW5kIChNSHopICovCi0Jc3dpdGNoIChiYW5kKSB7CisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewogCS8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSkgKi8KLQljYXNlIDAgOiBiYW5kX2JvdHRvbSA9IDg3LjUgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAwOgorCQliYW5kX2JvdHRvbSA9IDg3LjUgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMTogNzYgICAtIDEwOCBNSHogKEphcGFuIHdpZGUgYmFuZCkgKi8KLQlkZWZhdWx0OiBiYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CisJZGVmYXVsdDoKKwkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KLQljYXNlIDIgOiBiYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAyOgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJfTsKIAogCS8qIHJlYWQgY2hhbm5lbCAqLwpAQCAtNzA2LDIzICs3MTMsMjkgQEAKIAl1bnNpZ25lZCBzaG9ydCBjaGFuOwogCiAJLyogU3BhY2luZyAoa0h6KSAqLwotCXN3aXRjaCAoc3BhY2UpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgewogCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLwotCWNhc2UgMCA6IHNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCXNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiAxMDAga0h6IChFdXJvcGUsIEphcGFuKSAqLwotCWNhc2UgMSA6IHNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDE6CisJCXNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAyOiAgNTAga0h6ICovCi0JZGVmYXVsdDogc3BhY2luZyA9IDAuMDUwICogRlJFUV9NVUw7IGJyZWFrOworCWRlZmF1bHQ6CisJCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KLQlzd2l0Y2ggKGJhbmQpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLwotCWNhc2UgMCA6IGJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCWJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwotCWRlZmF1bHQ6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwotCWNhc2UgMiA6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDI6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQ2hhbiA9IFsgRnJlcSAoTWh6KSAtIEJvdHRvbSBvZiBCYW5kIChNSHopIF0gLyBTcGFjaW5nIChrSHopICovCkBAIC0xMTY0LDcgKzExNzcsNiBAQAogICogc2k0NzB4X3Y0bDJfcXVlcnljdHJsIC0gcXVlcnkgY29udHJvbAogICovCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHNpNDcweF92NGwyX3F1ZXJ5Y3RybFtdID0gewotLyogSElOVDogdGhlIGRpc2FibGVkIGNvbnRyb2xzIGFyZSBvbmx5IGhlcmUgdG8gc2F0aWZ5IGtyYWRpbyBhbmQgc3VjaCBhcHBzICovCiAJewogCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtMTE3NSwxOCArMTE4Nyw2IEBACiAJCS5kZWZhdWx0X3ZhbHVlCT0gMTUsCiAJfSwKIAl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQUxBTkNFLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQVNTLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19UUkVCTEUsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQl9LAotCXsKIAkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX01VVEUsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJCS5uYW1lCQk9ICJNdXRlIiwKQEAgLTExOTUsMTAgKzExOTUsNiBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDEsCiAJfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19MT1VETkVTUywKLQkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAotCX0sCiB9OwogCiAKQEAgLTEyMjAsNTYgKzEyMTYsMzQgQEAKIAogCiAvKgotICogc2k0NzB4X3ZpZGlvY19nX2lucHV0IC0gZ2V0IGlucHV0Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQl1bnNpZ25lZCBpbnQgKmkpCi17Ci0JKmkgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF92aWRpb2Nfc19pbnB1dCAtIHNldCBpbnB1dAotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKGkgIT0gMCkKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBzZXQgaW5wdXQgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgogICogc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwgLSBlbnVtZXJhdGUgY29udHJvbCBpdGVtcwogICovCiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCXVuc2lnbmVkIGNoYXIgaTsKKwl1bnNpZ25lZCBjaGFyIGkgPSAwOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JLyogc2FmZXR5IGNoZWNrcyAqLwotCWlmICghcWMtPmlkKQorCS8qIGFib3J0IGlmIHFjLT5pZCBpcyBiZWxvdyBWNEwyX0NJRF9CQVNFICovCisJaWYgKHFjLT5pZCA8IFY0TDJfQ0lEX0JBU0UpCiAJCWdvdG8gZG9uZTsKIAorCS8qIHNlYXJjaCB2aWRlbyBjb250cm9sICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2k0NzB4X3Y0bDJfcXVlcnljdHJsKTsgaSsrKSB7CiAJCWlmIChxYy0+aWQgPT0gc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldLmlkKSB7CiAJCQltZW1jcHkocWMsICYoc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dmFsID0gMDsKKwkJCXJldHZhbCA9IDA7IC8qIGZvdW5kICovCiAJCQlicmVhazsKIAkJfQogCX0KIAorCS8qIGRpc2FibGUgdW5zdXBwb3J0ZWQgYmFzZSBjb250cm9scyAqLworCS8qIHRvIHNhdGlzZnkga3JhZGlvIGFuZCBzdWNoIGFwcHMgKi8KKwlpZiAoKHJldHZhbCA9PSAtRUlOVkFMKSAmJiAocWMtPmlkIDwgVjRMMl9DSURfTEFTVFAxKSkgeworCQlxYy0+ZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKKwkJcmV0dmFsID0gMDsKKwl9CisKIGRvbmU6CiAJaWYgKHJldHZhbCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKQEAgLTEzNjAsNDQgKzEzMzQsMTMgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCiB7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKGF1ZGlvLT5pbmRleCAhPSAwKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KKwkvKiBkcml2ZXIgY29uc3RhbnRzICovCisJYXVkaW8tPmluZGV4ID0gMDsKIAlzdHJjcHkoYXVkaW8tPm5hbWUsICJSYWRpbyIpOwogCWF1ZGlvLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCWF1ZGlvLT5tb2RlID0gMDsKIAotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogZ2V0IGF1ZGlvIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF92aWRpb2Nfc19hdWRpbyAtIHNldCBhdWRpbyBhdHRyaWJ1dGVzCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKGF1ZGlvLT5pbmRleCAhPSAwKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLWRvbmU6Ci0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHNldCBhdWRpbyBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiAwOwogfQogCiAKQEAgLTE0MTUsNyArMTM1OCw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCh0dW5lci0+aW5kZXggIT0gMCkgJiYgKHR1bmVyLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJaWYgKHR1bmVyLT5pbmRleCAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNDI0LDggKzEzNjcsMTMgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwogCisJLyogZHJpdmVyIGNvbnN0YW50cyAqLwogCXN0cmNweSh0dW5lci0+bmFtZSwgIkZNIik7Ci0Jc3dpdGNoIChiYW5kKSB7CisJdHVuZXItPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworCisJLyogcmFuZ2UgbGltaXRzICovCisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewogCS8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSwgZGVmYXVsdCkgKi8KIAlkZWZhdWx0OgogCQl0dW5lci0+cmFuZ2Vsb3cgID0gIDg3LjUgKiBGUkVRX01VTDsKQEAgLTE0NDIsMTQgKzEzOTAsMTggQEAKIAkJdHVuZXItPnJhbmdlaGlnaCA9ICA5MCAgICogRlJFUV9NVUw7CiAJCWJyZWFrOwogCX07Ci0JdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCi0JLyogU3RlcmVvIGluZGljYXRvciA9PSBTdGVyZW8gKGluc3RlYWQgb2YgTW9ubykgKi8KKwkvKiBzdGVyZW8gaW5kaWNhdG9yID09IHN0ZXJlbyAoaW5zdGVhZCBvZiBtb25vKSAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1QpID09IDEpCi0JCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCWVsc2UKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCisJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICYgUE9XRVJDRkdfTU9OTykgPT0gMSkKIAkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwllbHNlCisJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAogCS8qIG1pbiBpcyB3b3JzdCwgbWF4IGlzIGJlc3Q7IHNpZ25hbDowLi4weGZmZmY7IHJzc2k6IDAuLjB4ZmYgKi8KIAl0dW5lci0+c2lnbmFsID0gKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1JTU0kpCkBAIC0xNDc0LDIzICsxNDI2LDI4IEBACiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCByZXR2YWwgPSAwOworCWludCByZXR2YWwgPSAtRUlOVkFMOwogCiAJLyogc2FmZXR5IGNoZWNrcyAqLwogCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKSB7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCh0dW5lci0+aW5kZXggIT0gMCkgJiYgKHR1bmVyLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7CisJaWYgKHR1bmVyLT5pbmRleCAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBtb25vL3N0ZXJlbyBzZWxlY3RvciAqLworCXN3aXRjaCAodHVuZXItPmF1ZG1vZGUpIHsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19NT05POyAgLyogZm9yY2UgbW9ubyAqLworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19NT05POyAvKiB0cnkgc3RlcmVvICovCisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodHVuZXItPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX01PTk8pCi0JCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX01PTk87ICAvKiBmb3JjZSBtb25vICovCi0JZWxzZQotCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfTU9OTzsgLyogdHJ5IHN0ZXJlbyAqLwotCiAJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOwogCiBkb25lOgpAQCAtMTUxNSwxMSArMTQ3MiwxMiBAQAogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgoZnJlcS0+dHVuZXIgIT0gMCkgJiYgKGZyZXEtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwlpZiAoZnJlcS0+dHVuZXIgIT0gMCkgewogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQogCisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJcmV0dmFsID0gc2k0NzB4X2dldF9mcmVxKHJhZGlvLCAmZnJlcS0+ZnJlcXVlbmN5KTsKIAogZG9uZToKQEAgLTE1NDQsNyArMTUwMiw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChmcmVxLT50dW5lciAhPSAwKSAmJiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgeworCWlmIChmcmVxLT50dW5lciAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNTczLDcgKzE1MzEsNyBAQAogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgoc2Vlay0+dHVuZXIgIT0gMCkgJiYgKHNlZWstPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwlpZiAoc2Vlay0+dHVuZXIgIT0gMCkgewogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTU4OCwxNSArMTU0NiwxNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKworLyoKKyAqIHNpNDcweF9pb2N0bF9vcHMgLSB2aWRlbyBkZXZpY2UgaW9jdGwgb3BlcmF0aW9ucworICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHNpNDcweF9pb2N0bF9vcHMgPSB7CiAJLnZpZGlvY19xdWVyeWNhcAk9IHNpNDcweF92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19nX2lucHV0CQk9IHNpNDcweF92aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQJCT0gc2k0NzB4X3ZpZGlvY19zX2lucHV0LAogCS52aWRpb2NfcXVlcnljdHJsCT0gc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwsCiAJLnZpZGlvY19nX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19zX2N0cmwsCiAJLnZpZGlvY19nX2F1ZGlvCQk9IHNpNDcweF92aWRpb2NfZ19hdWRpbywKLQkudmlkaW9jX3NfYXVkaW8JCT0gc2k0NzB4X3ZpZGlvY19zX2F1ZGlvLAogCS52aWRpb2NfZ190dW5lcgkJPSBzaTQ3MHhfdmlkaW9jX2dfdHVuZXIsCiAJLnZpZGlvY19zX3R1bmVyCQk9IHNpNDcweF92aWRpb2Nfc190dW5lciwKIAkudmlkaW9jX2dfZnJlcXVlbmN5CT0gc2k0NzB4X3ZpZGlvY19nX2ZyZXF1ZW5jeSwKQEAgLTE2MDQsMTQgKzE1NjMsMTUgQEAKIAkudmlkaW9jX3NfaHdfZnJlcV9zZWVrCT0gc2k0NzB4X3ZpZGlvY19zX2h3X2ZyZXFfc2VlaywKIH07CiAKKwogLyoKLSAqIHNpNDcweF92aWRkZXZfdGFtcGxlcyAtIHZpZGVvIGRldmljZSBpbnRlcmZhY2UKKyAqIHNpNDcweF92aWRkZXZfdGVtcGxhdGUgLSB2aWRlbyBkZXZpY2UgaW50ZXJmYWNlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNpNDcweF92aWRkZXZfdGVtcGxhdGUgPSB7CiAJLmZvcHMJCQk9ICZzaTQ3MHhfZm9wcywKLQkuaW9jdGxfb3BzIAkJPSAmc2k0NzB4X2lvY3RsX29wcywKIAkubmFtZQkJCT0gRFJJVkVSX05BTUUsCiAJLnJlbGVhc2UJCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLmlvY3RsX29wcwkJPSAmc2k0NzB4X2lvY3RsX29wcywKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwppbmRleCBmNzk0ZjJkLi5lMGViNGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwpAQCAtMjksNDMgKzI5LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1heGltIFlldnR5dXNoa2luIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRSh4KSAoeCktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzAgewpAQCAtODAsMjEgKzYxLDEyIEBACiAJaW50IHNhdDsKIH07CiAKLSNkZWZpbmUgICBJMkNfQURWNzE3MCAgICAgICAgMHhkNAotI2RlZmluZSAgIEkyQ19BRFY3MTcxICAgICAgICAweDU0Ci0KLXN0YXRpYyBjaGFyIGFkdjcxNzBfbmFtZVtdID0gImFkdjcxNzAiOwotc3RhdGljIGNoYXIgYWR2NzE3MV9uYW1lW10gPSAiYWR2NzE3MSI7Ci0KIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgInBhc3NfdGhyb3VnaCIsICJwbGF5X2JhY2siIH07CiBzdGF0aWMgY2hhciAqbm9ybXNbXSA9IHsgIlBBTCIsICJOVFNDIiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotYWR2NzE3MF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTEwMiwxNyArNzQsMTMgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYWR2NzE3MF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50Ci1hZHY3MTcwX3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IGFkdjcxNzBfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwpAQCAtMTMzLDMzICsxMDEsMjUgQEAKIAkJCQkgICAgZW5jb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQogCX0KLQogCXJldHVybiByZXQ7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vLyBPdXRwdXQgZmlsdGVyOiAgUy1WaWRlbyAgQ29tcG9zaXRlCi0KLSNkZWZpbmUgTVIwNTAgICAgICAgMHgxMQkvLzB4MDkKLSNkZWZpbmUgTVIwNjAgICAgICAgMHgxNAkvLzB4MGMKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2RlZmluZSBUUjBNT0RFICAgICAweDRjCiAjZGVmaW5lIFRSMFJTVAkgICAgMHg4MApAQCAtMTY3LDcgKzEyNyw2IEBACiAjZGVmaW5lIFRSMUNBUFQJICAgIDB4MDAKICNkZWZpbmUgVFIxUExBWQkgICAgMHgwMAogCi0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfTlRTQ1tdID0gewogCTB4MDAsIDB4MTAsCQkvLyBNUjAKIAkweDAxLCAweDIwLAkJLy8gTVIxCkBAIC0yMjcsMTUgKzE4NiwxMSBAQAogfTsKIAogCi1zdGF0aWMgaW50Ci1hZHY3MTcwX2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAqICAgICAgICAgICAgIGFyZykKK3N0YXRpYyBpbnQgYWR2NzE3MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogI2lmIDAKIAkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCkBAIC0yNTQsMTggKzIwOSwxNiBAQAogCQkJICAgICBWSURFT19FTkNPREVSX05UU0M7CiAJCWNhcC0+aW5wdXRzID0gMjsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKIAl7CiAJCWludCBpYXJnID0gKihpbnQgKikgYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXNfY29tbWFuZDogc2V0IG5vcm0gJWQiLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCBpYXJnKTsKIAogCQlzd2l0Y2ggKGlhcmcpIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCWFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X05UU0MsCiAJCQkJCSAgICBzaXplb2YoaW5pdF9OVFNDKSk7CkBAIC0yODUsMTYgKzIzOCwxMyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIG5vcm06ICVkXG4iLAotCQkJICAgICAgIEkyQ19OQU1FKGNsaWVudCksIGlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBub3JtOiAlZFxuIiwgaWFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IHN3aXRjaGVkIHRvICVzXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJbm9ybXNbaWFyZ10pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgbm9ybXNbaWFyZ10pOwogCQllbmNvZGVyLT5ub3JtID0gaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMzA0LDE5ICsyNTQsMTcgQEAKIAkJICppYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwCiAJCSAqaWFyZyA9IDI6IGNvbG9yIGJhciAqLwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXNfY29tbWFuZDogc2V0IGlucHV0IGZyb20gJXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgZnJvbSAlc1xuIiwKIAkJCWlhcmcgPT0gMCA/ICJkZWNvZGVyIiA6ICJaUjM2MDYwIik7CiAKIAkJc3dpdGNoIChpYXJnKSB7Ci0KIAkJY2FzZSAwOgogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDEsIDB4MjApOwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDgsIFRSMUNBUFQpOwkvKiBUUjEgKi8KIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAyLCAweDBlKTsJLy8gRW5hYmxlIGdlbmxvY2sKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8vdWRlbGF5KDEwKTsKKwkJCS8qIHVkZWxheSgxMCk7ICovCiAJCQlicmVhazsKIAogCQljYXNlIDE6CkBAIC0zMjUsMjAgKzI3MywxNyBAQAogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MDgpOwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLy91ZGVsYXkoMTApOworCQkJLyogdWRlbGF5KDEwKTsgKi8KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogaWxsZWdhbCBpbnB1dDogJWRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgaWFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IHN3aXRjaGVkIHRvICVzXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJaW5wdXRzW2lhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tpYXJnXSk7CiAJCWVuY29kZXItPmlucHV0ID0gaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgogCXsKQEAgLTM0OCwxNiArMjkzLDE2IEBACiAJCWlmICgqaWFyZyAhPSAwKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKIAkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzY4LDE0OSArMzEzLDY3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KLSAgICB7IEkyQ19BRFY3MTcwID4+IDEsIChJMkNfQURWNzE3MCA+PiAxKSArIDEsCi0JSTJDX0FEVjcxNzEgPj4gMSwgKEkyQ19BRFY3MTcxID4+IDEpICsgMSwKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHhkNCA+PiAxLCAweGQ2ID4+IDEsCS8qIGFkdjcxNzAgSURzICovCisJMHg1NCA+PiAxLCAweDU2ID4+IDEsCS8qIGFkdjcxNzEgSURzICovCiAJSTJDX0NMSUVOVF9FTkQKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfYWR2NzE3MDsKLQotc3RhdGljIGludAotYWR2NzE3MF9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IGFkdjcxNzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyOwotCWNoYXIgKmRuYW1lOwotCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJImFkdjcxNzAuYzogZGV0ZWN0aW5nIGFkdjcxNzAgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKKwlpbnQgaTsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX2FkdjcxNzA7Ci0JaWYgKChjbGllbnQtPmFkZHIgPT0gSTJDX0FEVjcxNzAgPj4gMSkgfHwKLQkgICAgKGNsaWVudC0+YWRkciA9PSAoSTJDX0FEVjcxNzAgPj4gMSkgKyAxKSkgewotCQlkbmFtZSA9IGFkdjcxNzBfbmFtZTsKLQl9IGVsc2UgaWYgKChjbGllbnQtPmFkZHIgPT0gSTJDX0FEVjcxNzEgPj4gMSkgfHwKLQkJICAgKGNsaWVudC0+YWRkciA9PSAoSTJDX0FEVjcxNzEgPj4gMSkgKyAxKSkgewotCQlkbmFtZSA9IGFkdjcxNzFfbmFtZTsKLQl9IGVsc2UgewotCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUhISEgKi8KLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIDA7Ci0JfQotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgZG5hbWUsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHY3MTcwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVuY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWVuY29kZXItPmlucHV0ID0gMDsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9OVFNDLCBzaXplb2YoaW5pdF9OVFNDKSk7CiAJaWYgKGkgPj0gMCkgewogCQlpID0gYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQlpID0gYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwogCQlpID0gYWR2NzE3MF9yZWFkKGNsaWVudCwgMHgxMik7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlc19hdHRhY2g6IHJldi4gJWQgYXQgMHglMDJ4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSAmIDEsIGNsaWVudC0+YWRkciA8PCAxKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKIAl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBlcnJvciAweCV4XG4iLAotCQkgICAgICAgSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfQotCisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1hZHY3MTcwX2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFkdjcxNzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJImFkdjcxNzAuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJmFkdjcxNzBfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFkdjcxNzBfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9hZHY3MTcwID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImFkdjcxNzAiLAkvKiBuYW1lICovCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYWR2NzE3MF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IGFkdjcxNzBfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IGFkdjcxNzBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHY3MTcwX2lkW10gPSB7CisJeyAiYWR2NzE3MCIsIDAgfSwKKwl7ICJhZHY3MTcxIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHY3MTcwX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLWFkdjcxNzBfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYWR2NzE3MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotYWR2NzE3MF9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2FkdjcxNzApOwotfQotCi1tb2R1bGVfaW5pdChhZHY3MTcwX2luaXQpOwotbW9kdWxlX2V4aXQoYWR2NzE3MF9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJhZHY3MTcwIiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3MCwKKwkuY29tbWFuZCA9IGFkdjcxNzBfY29tbWFuZCwKKwkucHJvYmUgPSBhZHY3MTcwX3Byb2JlLAorCS5yZW1vdmUgPSBhZHY3MTcwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBhZHY3MTcwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKaW5kZXggOGVlMDdhNi4uNjAwOGU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKQEAgLTI1LDQzICsyNSwyNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzUgewpAQCAtNzcsMzMgKzU4LDIzIEBACiAjZGVmaW5lICAgSTJDX0FEVjcxNzUgICAgICAgIDB4ZDQKICNkZWZpbmUgICBJMkNfQURWNzE3NiAgICAgICAgMHg1NAogCi1zdGF0aWMgY2hhciBhZHY3MTc1X25hbWVbXSA9ICJhZHY3MTc1IjsKLXN0YXRpYyBjaGFyIGFkdjcxNzZfbmFtZVtdID0gImFkdjcxNzYiOwotCiBzdGF0aWMgY2hhciAqaW5wdXRzW10gPSB7ICJwYXNzX3Rocm91Z2giLCAicGxheV9iYWNrIiwgImNvbG9yX2JhciIgfTsKIHN0YXRpYyBjaGFyICpub3Jtc1tdID0geyAiUEFMIiwgIk5UU0MiLCAiU0VDQU0tPlBBTCAobWF5IG5vdCB3b3JrISkiIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1hZHY3MTc1X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWFkdjcxNzVfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludAotYWR2NzE3NV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBhZHY3MTc1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCSAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTEyMywxOCArOTQsMTcgQEAKIAkJCQlyZWcrKzsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBibG9ja19sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCi0JCQkJCQkgICBibG9ja19sZW4pKSA8IDApCisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gYWR2NzE3NV93cml0ZShjbGllbnQsIHJlZywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gYWR2NzE3NV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CkBAIC0xNDMsMTMgKzExMywxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1zZXRfc3ViY2Fycmllcl9mcmVxIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGludCAgICAgICAgICAgICAgICBwYXNzX3Rocm91Z2gpCitzdGF0aWMgdm9pZCBzZXRfc3ViY2Fycmllcl9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYXNzX3Rocm91Z2gpCiB7CiAJLyogZm9yIHNvbWUgcmVhc29uIHBhc3NfdGhyb3VnaCBOVFNDIG5lZWRzCiAJICogYSBkaWZmZXJlbnQgc3ViLWNhcnJpZXIgZnJlcSB0byByZW1haW4gc3RhYmxlLiAqLwotCWlmKHBhc3NfdGhyb3VnaCkKKwlpZiAocGFzc190aHJvdWdoKQogCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwMCk7CiAJZWxzZQogCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHg1NSk7CkBAIC0xNjAsMTIgKzEyOCwxMiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLy8gT3V0cHV0IGZpbHRlcjogIFMtVmlkZW8gIENvbXBvc2l0ZQorLyogT3V0cHV0IGZpbHRlcjogIFMtVmlkZW8gIENvbXBvc2l0ZSAqLwogCi0jZGVmaW5lIE1SMDUwICAgICAgIDB4MTEJLy8weDA5Ci0jZGVmaW5lIE1SMDYwICAgICAgIDB4MTQJLy8weDBjCisjZGVmaW5lIE1SMDUwICAgICAgIDB4MTEJLyogMHgwOSAqLworI2RlZmluZSBNUjA2MCAgICAgICAweDE0CS8qIDB4MGMgKi8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgVFIwTU9ERSAgICAgMHg0NgogI2RlZmluZSBUUjBSU1QJICAgIDB4ODAKQEAgLTIxNiwxNSArMTg0LDExIEBACiAJMHgwNiwgMHgxYSwJCS8qIHN1YmMuIHBoYXNlICovCiB9OwogCi1zdGF0aWMgaW50Ci1hZHY3MTc1X2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgYWR2NzE3NV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KIAkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLApAQCAtMjQyLDE1ICsyMDYsMTQgQEAKIAkJCSAgICAgVklERU9fRU5DT0RFUl9TRUNBTTsgLyogd2VsbCwgaGFja3kgKi8KIAkJY2FwLT5pbnB1dHMgPSAyOwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9OT1JNOgogCXsKIAkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7CiAKIAkJc3dpdGNoIChpYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwpAQCAtMjg0LDE2ICsyNDcsMTMgQEAKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGlsbGVnYWwgbm9ybTogJWRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIG5vcm06ICVkXG4iLCBpYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCW5vcm1zW2lhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIG5vcm1zW2lhcmddKTsKIAkJZW5jb2Rlci0+bm9ybSA9IGlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTMwNCw3ICsyNjQsNiBAQAogCQkgKmlhcmcgPSAyOiBjb2xvciBiYXIgKi8KIAogCQlzd2l0Y2ggKGlhcmcpIHsKLQogCQljYXNlIDA6CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMSwgMHgwMCk7CiAKQEAgLTMzMSw3ICsyOTAsNyBAQAogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NDkpOwogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLy91ZGVsYXkoMTApOworCQkJLyogdWRlbGF5KDEwKTsgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgMjoKQEAgLTM0MywzOSArMzAyLDM1IEBACiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvL3VkZWxheSgxMCk7CisJCQkvKiB1ZGVsYXkoMTApOyAqLwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIGlucHV0OiAlZFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCBpYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCWlucHV0c1tpYXJnXSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbaWFyZ10pOwogCQllbmNvZGVyLT5pbnB1dCA9IGlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgeworCQlpZiAoKmlhcmcgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTAsMTQ1ICszNDUsNjcgQEAKICAqIEdlbmVyaWMgaTJjIHByb2JlCiAgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPQotICAgIHsgSTJDX0FEVjcxNzUgPj4gMSwgKEkyQ19BRFY3MTc1ID4+IDEpICsgMSwKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJSTJDX0FEVjcxNzUgPj4gMSwgKEkyQ19BRFY3MTc1ID4+IDEpICsgMSwKIAlJMkNfQURWNzE3NiA+PiAxLCAoSTJDX0FEVjcxNzYgPj4gMSkgKyAxLAogCUkyQ19DTElFTlRfRU5ECiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2FkdjcxNzU7Ci0KLXN0YXRpYyBpbnQKLWFkdjcxNzVfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBhZHY3MTc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlcjsKLQljaGFyICpkbmFtZTsKLQotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJhZHY3MTc1LmM6IGRldGVjdGluZyBhZHY3MTc1IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9hZHY3MTc1OwotCWlmICgoY2xpZW50LT5hZGRyID09IEkyQ19BRFY3MTc1ID4+IDEpIHx8Ci0JICAgIChjbGllbnQtPmFkZHIgPT0gKEkyQ19BRFY3MTc1ID4+IDEpICsgMSkpIHsKLQkJZG5hbWUgPSBhZHY3MTc1X25hbWU7Ci0JfSBlbHNlIGlmICgoY2xpZW50LT5hZGRyID09IEkyQ19BRFY3MTc2ID4+IDEpIHx8Ci0JCSAgIChjbGllbnQtPmFkZHIgPT0gKEkyQ19BRFY3MTc2ID4+IDEpICsgMSkpIHsKLQkJZG5hbWUgPSBhZHY3MTc2X25hbWU7Ci0JfSBlbHNlIHsKLQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlISEhICovCi0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAwOwotCX0KLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksIGRuYW1lLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR2NzE3NSksIEdGUF9LRVJORUwpOwotCWlmIChlbmNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfUEFMOwogCWVuY29kZXItPmlucHV0ID0gMDsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCWlmIChpID49IDApIHsKIAkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKIAkJaSA9IGFkdjcxNzVfcmVhZChjbGllbnQsIDB4MTIpOwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXNfYXR0YWNoOiByZXYuICVkIGF0IDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpICYgMSwgY2xpZW50LT5hZGRyIDw8IDEpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOwogCX0KLQlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoOiBpbml0IGVycm9yIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9Ci0KKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWFkdjcxNzVfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYWR2NzE3NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYWR2NzE3NS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYWR2NzE3NV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotYWR2NzE3NV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2FkdjcxNzUgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYWR2NzE3NSIsCS8qIG5hbWUgKi8KLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBhZHY3MTc1X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gYWR2NzE3NV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYWR2NzE3NV9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdjcxNzVfaWRbXSA9IHsKKwl7ICJhZHY3MTc1IiwgMCB9LAorCXsgImFkdjcxNzYiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdjcxNzVfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotYWR2NzE3NV9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9hZHY3MTc1KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1hZHY3MTc1X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYWR2NzE3NSk7Ci19Ci0KLW1vZHVsZV9pbml0KGFkdjcxNzVfaW5pdCk7Ci1tb2R1bGVfZXhpdChhZHY3MTc1X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImFkdjcxNzUiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCS5jb21tYW5kID0gYWR2NzE3NV9jb21tYW5kLAorCS5wcm9iZSA9IGFkdjcxNzVfcHJvYmUsCisJLnJlbW92ZSA9IGFkdjcxNzVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGFkdjcxNzVfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKaW5kZXggMjE4NzU0Yi4uZTA5YjAwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCkBAIC04NjYsNyArODY2LDcgQEAKIAl9CiAKIAlwcmludGsoInZpZGVvJWQ6IEZvdW5kIE02NDI3OCBWR0EgKElSUSAlZCwgRnJlcSAlZE1IeikuXG4iLAotCQlhci0+dmRldi0+bWlub3IsIE0zMlJfSVJRX0lOVDMsIGZyZXEpOworCQlhci0+dmRldi0+bnVtLCBNMzJSX0lSUV9JTlQzLCBmcmVxKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCmluZGV4IDVmMDdhOGEuLmQ2MDEyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCkBAIC05MCw2ICs5MCw3IEBACiAJY2FzZSA3MjIyMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzIyMzE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyMjQxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjI1MTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzIzMDE6IC8qIFdpblRWLUhWUjg1MCAoUmV0YWlsLCBJUiwgQVRTQyBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCiAJY2FzZSA3MjUwMDogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gKi8KIAkJYnJlYWs7CkBAIC0xODUsNyArMTg2LDcgQEAKIH0KIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RydWN0IHVzYl9kZXZpY2VfaWQgYXUwODI4X3VzYl9pZF90YWJsZSBbXSA9IHsKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGF1MDgyOF91c2JfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMDApLAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyNDApLApAQCAtMTk4LDYgKzE5OSw4IEBACiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxYiksCiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxZSksCisJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxZiksCiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzI4MCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYwppbmRleCBkODU2ZGU5Li41NzY1ZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKQEAgLTkxLDcgKzkxLDggQEAKIAkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dXNiZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShkZXYtPnVzYmRldiwgMCksCiAJCQkJcmVxdWVzdCwKLQkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCQlVU0JfUkVDSVBfREVWSUNFLAogCQkJCXZhbHVlLCBpbmRleCwKIAkJCQljcCwgc2l6ZSwgMTAwMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwppbmRleCBmMGZjZGI0Li5hODgyY2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCkBAIC0xNzMsNyArMTczLDggQEAKIAkJcHVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOwogCQl1c2JfZmlsbF9idWxrX3VyYihwdXJiLAogCQkJCSAgZGV2LT51c2JkZXYsCi0JCQkJICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51c2JkZXYsIF9BVTA4MjhfQlVMS1BJUEUpLAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dXNiZGV2LAorCQkJCQlfQVUwODI4X0JVTEtQSVBFKSwKIAkJCQkgIHB1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkgIFVSQl9CVUZTSVpFLAogCQkJCSAgdXJiX2NvbXBsZXRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKaW5kZXggZGRkMmE3OS4uYTA3YjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwpAQCAtMjksNDQgKzI5LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTgxOSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBidDgxOSB7CkBAIC05NywxNCArNzgsOSBAQAogCXs4NTggLSAyNCwgMjAsIDUyNSAtIDIsIDEsIDB4MDBmOCwgMHgwMDAwfSwKIH07CiAKLSNkZWZpbmUgICBJMkNfQlQ4MTkgICAgICAgIDB4OGEKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLWJ0ODE5X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTExMiwyNCArODgsMTUgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYnQ4MTlfc2V0Yml0IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIGJpdCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDgxOV9zZXRiaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQogewogCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJcmV0dXJuIGJ0ODE5X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJICAgKGRlY29kZXItPgotCQkJICAgIHJlZ1tyZWddICYgfigxIDw8IGJpdCkpIHwKLQkJCSAgICAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOworCQkoZGVjb2Rlci0+cmVnW3JlZ10gJiB+KDEgPDwgYml0KSkgfCAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOwogfQogCi1zdGF0aWMgaW50Ci1idDgxOV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IGJ0ODE5X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xNTAsMTAgKzExNyw5IEBACiAJCQkJICAgIGRlY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNjksMjAgKzEzNSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1idDgxOV9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQKLWJ0ODE5X2luaXQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJ0ODE5X2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGluaXRbXSA9IHsKLQkJLy8weDFmLCAweDAwLCAgICAgLyogUmVzZXQgKi8KKwkJLyoweDFmLCAweDAwLCovICAgICAvKiBSZXNldCAqLwogCQkweDAxLCAweDU5LAkvKiAweDAxIGlucHV0IGZvcm1hdCAqLwogCQkweDAyLCAweDAwLAkvKiAweDAyIHRlbXBvcmFsIGRlY2ltYXRpb24gKi8KIAkJMHgwMywgMHgxMiwJLyogMHgwMyBDcm9wcGluZyBtc2IgKi8KQEAgLTIxOCwxMiArMTgxLDEwIEBACiAJc3RydWN0IHRpbWluZyAqdGltaW5nID0gJnRpbWluZ19kYXRhW2RlY29kZXItPm5vcm1dOwogCiAJaW5pdFsweDAzICogMiAtIDFdID0KLQkgICAgKCgodGltaW5nLT52ZGVsYXkgPj4gOCkgJiAweDAzKSA8PCA2KSB8ICgoKHRpbWluZy0+Ci0JCQkJCQkgICAgICAgdmFjdGl2ZSA+PiA4KSAmCi0JCQkJCQkgICAgICAweDAzKSA8PCA0KSB8Ci0JICAgICgoKHRpbWluZy0+aGRlbGF5ID4+IDgpICYgMHgwMykgPDwgMikgfCAoKHRpbWluZy0+Ci0JCQkJCQkgICAgICBoYWN0aXZlID4+IDgpICYKLQkJCQkJCSAgICAgMHgwMyk7CisJICAgICgoKHRpbWluZy0+dmRlbGF5ID4+IDgpICYgMHgwMykgPDwgNikgfAorCSAgICAoKCh0aW1pbmctPnZhY3RpdmUgPj4gOCkgJiAweDAzKSA8PCA0KSB8CisJICAgICgoKHRpbWluZy0+aGRlbGF5ID4+IDgpICYgMHgwMykgPDwgMikgfAorCSAgICAoKHRpbWluZy0+aGFjdGl2ZSA+PiA4KSAmIDB4MDMpOwogCWluaXRbMHgwNCAqIDIgLSAxXSA9IHRpbWluZy0+dmRlbGF5ICYgMHhmZjsKIAlpbml0WzB4MDUgKiAyIC0gMV0gPSB0aW1pbmctPnZhY3RpdmUgJiAweGZmOwogCWluaXRbMHgwNiAqIDIgLSAxXSA9IHRpbWluZy0+aGRlbGF5ICYgMHhmZjsKQEAgLTIzOCwyNyArMTk5LDIyIEBACiAKIAkvKiBpbml0ICovCiAJcmV0dXJuIGJ0ODE5X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKLQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50Ci1idDgxOV9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCSAgICAgICB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBidDgxOV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCWludCB0ZW1wOwogCiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlpZiAoIWRlY29kZXItPmluaXRpYWxpemVkKSB7CS8vIEZpcnN0IGNhbGwgdG8gYnQ4MTlfaW5pdCBjb3VsZCBiZQotCQlidDgxOV9pbml0KGNsaWVudCk7CS8vIHdpdGhvdXQgI0ZSU1QgPSAwCisJaWYgKCFkZWNvZGVyLT5pbml0aWFsaXplZCkgewkvKiBGaXJzdCBjYWxsIHRvIGJ0ODE5X2luaXQgY291bGQgYmUgKi8KKwkJYnQ4MTlfaW5pdChjbGllbnQpOwkvKiB3aXRob3V0ICNGUlNUID0gMCAqLwogCQlkZWNvZGVyLT5pbml0aWFsaXplZCA9IDE7CiAJfQogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCiAJCWJ0ODE5X2luaXQoY2xpZW50KTsKQEAgLTI3NCw4ICsyMzAsOCBAQAogCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gODsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKQEAgLTI4NSw5ICsyNDEsOSBAQAogCiAJCXN0YXR1cyA9IGJ0ODE5X3JlYWQoY2xpZW50LCAweDAwKTsKIAkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAweDgwKSkgeworCQlpZiAoKHN0YXR1cyAmIDB4ODApKQogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCX0KKwogCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKQEAgLTI5NywyOCArMjUzLDI1IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlpZiAoKHN0YXR1cyAmIDB4MTApKSB7CisJCQlpZiAoKHN0YXR1cyAmIDB4MTApKQogCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJfQogCQkJYnJlYWs7CiAJCX0KIAkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwogCQkqaWFyZyA9IHJlczsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IGdldCBzdGF0dXMgJXhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkqaWFyZyk7Ci0JfQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgc3RhdHVzICV4XG4iLCAqaWFyZyk7CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAkJc3RydWN0IHRpbWluZyAqdGltaW5nID0gTlVMTDsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHNldCBub3JtICV4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybSAleFxuIiwgKmlhcmcpOwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CkBAIC0zMjcsNyArMjgwLDcgQEAKIAkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDUsIDApOwogCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE4LCAweDY4KTsKIAkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOSwgMHg1ZCk7Ci0JCQkvL2J0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAxKTsKKwkJCS8qIGJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAxKTsgKi8KIAkJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVtWSURFT19NT0RFX05UU0NdOwogCQkJYnJlYWs7CiAJCWNhc2UgVklERU9fTU9ERV9QQUw6CkBAIC0zMzYsNyArMjg5LDcgQEAKIAkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDUsIDEpOwogCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE4LCAweDdmKTsKIAkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOSwgMHg3Mik7Ci0JCQkvL2J0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAwKTsKKwkJCS8qIGJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAwKTsgKi8KIAkJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVtWSURFT19NT0RFX1BBTF07CiAJCQlicmVhazsKIAkJY2FzZSBWSURFT19NT0RFX0FVVE86CkBAIC0zNDQsMTAgKzI5Nyw3IEBACiAJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAxLCAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB1bnN1cHBvcnRlZCBub3JtICVkXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInVuc3VwcG9ydGVkIG5vcm0gJXhcbiIsICppYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTM2NiwxOSArMzE2LDE3IEBACiAJCX0KIAogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc2V0IGlucHV0ICV4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJXhcbiIsICppYXJnKTsKIAotCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykgeworCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAKIAkJaWYgKGRlY29kZXItPmlucHV0ICE9ICppYXJnKSB7CiAJCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwpAQCAtMzkxLDUyICszMzksNDIgQEAKIAkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAxLCAwKTsKIAkJCX0KIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgb3V0cHV0ICV4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICV4XG4iLCAqaWFyZyk7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKKwkJaWYgKCppYXJnICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAJCWludCBlbmFibGUgPSAoKmlhcmcgIT0gMCk7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBlbmFibGUgb3V0cHV0ICV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICV4XG4iLCAqaWFyZyk7CiAKIAkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKIAkJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKLQotCQkJaWYgKGRlY29kZXItPmVuYWJsZSkgewotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MTYsIDcsIDApOwotCQkJfSBlbHNlIHsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDE2LCA3LCAxKTsKLQkJCX0KKwkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MTYsIDcsICFlbmFibGUpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewogCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwogCi0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzOiBzZXQgcGljdHVyZSBicmlnaHRuZXNzICVkIGNvbnRyYXN0ICVkIGNvbG91ciAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwKLQkJCXBpYy0+Y29sb3VyKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInNldCBwaWN0dXJlIGJyaWdodG5lc3MgJWQgY29udHJhc3QgJWQgY29sb3VyICVkXG4iLAorCQkJcGljLT5icmlnaHRuZXNzLCBwaWMtPmNvbnRyYXN0LCBwaWMtPmNvbG91cik7CiAKIAogCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgewpAQCAtNDc0LDggKzQxMiw4IEBACiAJCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGYsCiAJCQkJICAgIDEyOCAtIChkZWNvZGVyLT5odWUgPj4gOCkpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ4Niw1NSArNDI0LDQ0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19CVDgxOSA+PiAxLAotCUkyQ19DTElFTlRfRU5ELAotfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4OGEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDgxOTsKLQotc3RhdGljIGludAotYnQ4MTlfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IGJ0ODE5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JaW50IGksIGlkOworCWludCBpLCB2ZXI7CiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0KLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYnQ4MTk6IGRldGVjdGluZyBidDgxOSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOworCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9idDgxOTsKKwl2ZXIgPSBidDgxOV9yZWFkKGNsaWVudCwgMHgxNyk7CisJc3dpdGNoICh2ZXIgJiAweGYwKSB7CisJY2FzZSAweDcwOgorCQluYW1lID0gImJ0ODE5YSI7CisJCWJyZWFrOworCWNhc2UgMHg2MDoKKwkJbmFtZSA9ICJidDgxN2EiOworCQlicmVhazsKKwljYXNlIDB4MjA6CisJCW5hbWUgPSAiYnQ4MTVhIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInVua25vd24gY2hpcCB2ZXJzaW9uIDB4JTAyeFxuIiwgdmVyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIG5hbWUsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnQ4MTkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGRlY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC01NDUsOTcgKzQ3MiwzMyBAQAogCWRlY29kZXItPmluaXRpYWxpemVkID0gMDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCWlkID0gYnQ4MTlfcmVhZChjbGllbnQsIDB4MTcpOwotCXN3aXRjaCAoaWQgJiAweGYwKSB7Ci0JY2FzZSAweDcwOgotCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJidDgxOWEiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQlicmVhazsKLQljYXNlIDB4NjA6Ci0JCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgImJ0ODE3YSIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMDoKLQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAiYnQ4MTVhIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSJidDgxOTogdW5rbm93biBjaGlwIHZlcnNpb24gMHgleCAodmVyIDB4JXgpXG4iLAotCQkJaWQgJiAweGYwLCBpZCAmIDB4MGYpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBidDgxOV9pbml0KGNsaWVudCk7Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBzdGF0dXMgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAweCV4IGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGlkICYgMHgwZiwKLQkJCWNsaWVudC0+YWRkciA8PCAxKTsKLQl9Ci0KKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYnQ4MTlfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYnQ4MTlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYnQ4MTlfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWJ0ODE5X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODE5ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImJ0ODE5IiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0JUODE5LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYnQ4MTlfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBidDgxOV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYnQ4MTlfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDgxOV9pZFtdID0geworCXsgImJ0ODE5YSIsIDAgfSwKKwl7ICJidDgxN2EiLCAwIH0sCisJeyAiYnQ4MTVhIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDgxOV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1idDgxOV9pbml0X21vZHVsZSAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4MTkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWJ0ODE5X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4MTkpOwotfQotCi1tb2R1bGVfaW5pdChidDgxOV9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChidDgxOV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJidDgxOSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODE5LAorCS5jb21tYW5kID0gYnQ4MTlfY29tbWFuZCwKKwkucHJvYmUgPSBidDgxOV9wcm9iZSwKKwkucmVtb3ZlID0gYnQ4MTlfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJ0ODE5X2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwppbmRleCBhYjJjZTRkLi40MjEzODY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCkBAIC0yOSw0MyArMjksMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04NTZBIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIEJlcm5zb24gJiBEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBCVDg1Nl9SRUdfT0ZGU0VUCTB4REEKQEAgLTc4LDE0ICs1OSw5IEBACiAJaW50IGVuYWJsZTsKIH07CiAKLSNkZWZpbmUgICBJMkNfQlQ4NTYgICAgICAgIDB4ODgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLWJ0ODU2X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTkzLDQ2ICs2OSwzNiBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1idDg1Nl9zZXRiaXQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgYml0LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3NldGJpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlyZXR1cm4gYnQ4NTZfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkgICAoZW5jb2Rlci0+Ci0JCQkgICAgcmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdICYgfigxIDw8IGJpdCkpIHwKLQkJCSAgICAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOworCQkoZW5jb2Rlci0+cmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdICYgfigxIDw8IGJpdCkpIHwKKwkJCQkodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOwogfQogCi1zdGF0aWMgdm9pZAotYnQ4NTZfZHVtcCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGJ0ODU2X2R1bXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlciBkdW1wOiIsIEkyQ19OQU1FKGNsaWVudCkpOworCXY0bF9pbmZvKGNsaWVudCwgInJlZ2lzdGVyIGR1bXA6XG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgQlQ4NTZfTlJfUkVHOyBpICs9IDIpCi0JCXByaW50aygiICUwMngiLCBlbmNvZGVyLT5yZWdbaV0pOwotCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBlbmNvZGVyLT5yZWdbaV0pOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQKLWJ0ODU2X2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JICAgICAgIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IGJ0ODU2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KLQkJZHByaW50aygxLCBLRVJOX0lORk8gImJ0ODU2OiBpbml0XG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdFxuIik7CiAJCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYywgMHgxOCk7CiAJCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYSwgMCk7CiAJCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7CkBAIC0xNDIsNyArMTA4LDYgQEAKIAkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNCwgMSk7CiAKIAkJc3dpdGNoIChlbmNvZGVyLT5ub3JtKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAwKTsKIAkJCWJyZWFrOwpAQCAtMTYzLDI2ICsxMjgsMjMgQEAKIAl7CiAJCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IGdldCBjYXBhYmlsaXRpZXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IGNhcGFiaWxpdGllc1xuIik7CiAKIAkJY2FwLT5mbGFncyA9IFZJREVPX0VOQ09ERVJfUEFMIHwKIAkJCSAgICAgVklERU9fRU5DT0RFUl9OVFNDIHwKIAkJCSAgICAgVklERU9fRU5DT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDI7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgbm9ybSAlZFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsICppYXJnKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAwKTsKIAkJCWJyZWFrOwpAQCAtMTk1LDI3ICsxNTcsMjMgQEAKIAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7CiAJCWlmIChkZWJ1ZyAhPSAwKQogCQkJYnQ4NTZfZHVtcChjbGllbnQpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHNldCBpbnB1dCAlZFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICVkXG4iLCAqaWFyZyk7CiAKIAkJLyogV2Ugb25seSBoYXZlIHZpZGVvIGJ1cy4KIAkJICogaWFyZyA9IDA6IGlucHV0IGlzIGZyb20gYnQ4MTkKIAkJICogaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLwotCiAJCXN3aXRjaCAoKmlhcmcpIHsKLQogCQljYXNlIDA6CiAJCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAwKTsKIAkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDMsIDEpOwpAQCAtMjM0LDI3ICsxOTIsMjQgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCiAJCWlmIChkZWJ1ZyAhPSAwKQogCQkJYnQ4NTZfZHVtcChjbGllbnQpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgb3V0cHV0ICVkXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICVkXG4iLCAqaWFyZyk7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKKwkJaWYgKCppYXJnICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewpAQCAtMjYyLDEwICsyMTcsOSBAQAogCiAJCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBlbmFibGUgb3V0cHV0ICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgZW5jb2Rlci0+ZW5hYmxlKTsKLQl9CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXQgJWRcbiIsIGVuY29kZXItPmVuYWJsZSk7CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjc2LDY0ICsyMzAsMjkgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19CVDg1NiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODU2OwotCi1zdGF0aWMgaW50Ci1idDg1Nl9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgYnQ4NTZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBidDg1NiAqZW5jb2RlcjsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJidDg1Ni5jOiBkZXRlY3RpbmcgYnQ4NTYgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX2J0ODU2OwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgImJ0ODU2Iiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODU2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVuY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWVuY29kZXItPmVuYWJsZSA9IDE7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CiAKLQlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoaSkgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShlbmNvZGVyKTsKLQkJcmV0dXJuIGk7Ci0JfQotCiAJYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRjLCAweDE4KTsKIAlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGEsIDApOwogCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7CkBAIC0zNTksNjUgKzI3OCwyNiBAQAogCiAJaWYgKGRlYnVnICE9IDApCiAJCWJ0ODU2X2R1bXAoY2xpZW50KTsKLQotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlc19hdHRhY2g6IGF0IGFkZHJlc3MgMHgleFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJY2xpZW50LT5hZGRyIDw8IDEpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWJ0ODU2X2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGJ0ODU2X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJidDg1Ni5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYnQ4NTZfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWJ0ODU2X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODU2ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImJ0ODU2IiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0JUODU2LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYnQ4NTZfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBidDg1Nl9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYnQ4NTZfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDg1Nl9pZFtdID0geworCXsgImJ0ODU2IiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDg1Nl9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1idDg1Nl9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9idDg1Nik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotYnQ4NTZfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9idDg1Nik7Ci19Ci0KLW1vZHVsZV9pbml0KGJ0ODU2X2luaXQpOwotbW9kdWxlX2V4aXQoYnQ4NTZfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiYnQ4NTYiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDg1NiwKKwkuY29tbWFuZCA9IGJ0ODU2X2NvbW1hbmQsCisJLnByb2JlID0gYnQ4NTZfcHJvYmUsCisJLnJlbW92ZSA9IGJ0ODU2X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBidDg1Nl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKaW5kZXggOTZiNDE1NS4uNTk2ZjllMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYwpAQCAtMjksNDIgKzI5LDI4IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKK01PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTg2NiB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lCUJUODY2X0RFVk5BTUUJImJ0ODY2IgotI2RlZmluZSBJMkNfQlQ4NjYJMHg4OAotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgREVCVUcoeCkJCS8qIERlYnVnIGRyaXZlciAqLworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYnQ4NjYgewotCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7Ci0JaW50IGFkZHI7Ci0JdW5zaWduZWQgY2hhciByZWdbMjU2XTsKKwl1OCByZWdbMjU2XTsKIAogCWludCBub3JtOwogCWludCBlbmFibGU7CkBAIC03NCwyMCArNjAsNDUgQEAKIAlpbnQgc2F0OwogfTsKIAotc3RhdGljIGludCBidDg2Nl93cml0ZShzdHJ1Y3QgYnQ4NjYgKmRldiwKLQkJCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKTsKLQotc3RhdGljIGludCBidDg2Nl9kb19jb21tYW5kKHN0cnVjdCBidDg2NiAqZW5jb2RlciwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYnQ4NjZfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggc3ViYWRkciwgdTggZGF0YSkKIHsKKwlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1OCBidWZmZXJbMl07CisJaW50IGVycjsKKworCWJ1ZmZlclswXSA9IHN1YmFkZHI7CisJYnVmZmVyWzFdID0gZGF0YTsKKworCWVuY29kZXItPnJlZ1tzdWJhZGRyXSA9IGRhdGE7CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0ZSAweCUwMnggPSAweCUwMnhcbiIsIHN1YmFkZHIsIGRhdGEpOworCisJZm9yIChlcnIgPSAwOyBlcnIgPCAzOykgeworCQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyLCAyKSA9PSAyKQorCQkJYnJlYWs7CisJCWVycisrOworCQl2NGxfd2FybihjbGllbnQsICJlcnJvciAjJWQgd3JpdGluZyB0byAweCUwMnhcbiIsCisJCQkJZXJyLCBzdWJhZGRyKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfQorCWlmIChlcnIgPT0gMykgeworCQl2NGxfd2FybihjbGllbnQsICJnaXZpbmcgdXBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4NjZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewogCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKLQkJREVCVUcocHJpbnRrCi0JCSAgICAgIChLRVJOX0lORk8gIiVzOiBnZXQgY2FwYWJpbGl0aWVzXG4iLAotCQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lKSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwogCiAJCWNhcC0+ZmxhZ3MKIAkJCT0gVklERU9fRU5DT0RFUl9QQUwKQEAgLTk1LDE4ICsxMDYsMTYgQEAKIAkJCXwgVklERU9fRU5DT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDI7CiAJCWNhcC0+b3V0cHV0cyA9IDE7CisJCWJyZWFrOwogCX0KLQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlERUJVRyhwcmludGsoS0VSTl9JTkZPICIlczogc2V0IG5vcm0gJWRcbiIsCi0JCQkgICAgIGVuY29kZXItPmkyYy0+bmFtZSwgKmlhcmcpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsICppYXJnKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlicmVhazsKIApAQCAtMTE1LDExICsxMjQsMTAgQEAKIAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7CisJCWJyZWFrOwogCX0KLQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMTU1LDcgKzE2Myw3IEBACiAJCXU4IHZhbDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0KSAvIDI7IGkgKz0gMikKLQkJCWJ0ODY2X3dyaXRlKGVuY29kZXIsIGluaXRbaV0sIGluaXRbaSsxXSk7CisJCQlidDg2Nl93cml0ZShjbGllbnQsIGluaXRbaV0sIGluaXRbaSsxXSk7CiAKIAkJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOwogCkBAIC0xNjQsMTcgKzE3MiwxNiBAQAogCQllbHNlCiAJCQl2YWwgJj0gfjB4NDA7IC8qICFDQlNXQVAgKi8KIAotCQlidDg2Nl93cml0ZShlbmNvZGVyLCAweGRjLCB2YWwpOworCQlidDg2Nl93cml0ZShjbGllbnQsIDB4ZGMsIHZhbCk7CiAKIAkJdmFsID0gZW5jb2Rlci0+cmVnWzB4Y2NdOwogCQlpZiAoKmlhcmcgPT0gMikKIAkJCXZhbCB8PSAweDAxOyAvKiBPU0RCQVIgKi8KIAkJZWxzZQogCQkJdmFsICY9IH4weDAxOyAvKiAhT1NEQkFSICovCi0JCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4Y2MsIHZhbCk7CisJCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhjYywgdmFsKTsKIAotCQlERUJVRyhwcmludGsoS0VSTl9JTkZPICIlczogc2V0IGlucHV0ICVkXG4iLAotCQkJICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsICppYXJnKSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAlZFxuIiwgKmlhcmcpOwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKIAkJY2FzZSAwOgpAQCAtMTgzLDQ4ICsxOTAsNDQgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQorCQlicmVhazsKIAl9Ci0JYnJlYWs7CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlERUJVRyhwcmludGsoS0VSTl9JTkZPICIlczogc2V0IG91dHB1dCAlZFxuIiwKLQkJCSAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCAqaWFyZykpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICVkXG4iLCAqaWFyZyk7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KIAkJaWYgKCppYXJnICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfQotCWJyZWFrOwogCiAJY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAJCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7CiAKLQkJREVCVUcocHJpbnRrCi0JCSAgICAgIChLRVJOX0lORk8gIiVzOiBlbmFibGUgb3V0cHV0ICVkXG4iLAotCQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCBlbmNvZGVyLT5lbmFibGUpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZW5hYmxlIG91dHB1dCAlZFxuIiwgZW5jb2Rlci0+ZW5hYmxlKTsKKwkJYnJlYWs7CiAJfQotCWJyZWFrOwogCiAJY2FzZSA0NzExOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCQlfX3U4IHZhbDsKIAotCQlwcmludGsoImJ0ODY2OiBzcXVhcmUgPSAlZFxuIiwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzcXVhcmUgJWRcbiIsICppYXJnKTsKIAogCQl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107CiAJCWlmICgqaWFyZykKIAkJCXZhbCB8PSAxOyAvKiBTUVVBUkUgKi8KIAkJZWxzZQogCQkJdmFsICY9IH4xOyAvKiAhU1FVQVJFICovCi0JCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIHZhbCk7CisJCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhkYywgdmFsKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMzUsMTQxICsyMzgsNDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidDg2Nl93cml0ZShzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIsCi0JCQl1bnNpZ25lZCBjaGFyIHN1YmFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKLQlpbnQgZXJyOworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0JYnVmZmVyWzBdID0gc3ViYWRkcjsKLQlidWZmZXJbMV0gPSBkYXRhOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLQllbmNvZGVyLT5yZWdbc3ViYWRkcl0gPSBkYXRhOwotCi0JREVCVUcocHJpbnRrCi0JICAgICAgKCIlczogd3JpdGUgMHglMDJYID0gMHglMDJYXG4iLAotCSAgICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsIHN1YmFkZHIsIGRhdGEpKTsKLQotCWZvciAoZXJyID0gMDsgZXJyIDwgMzspIHsKLQkJaWYgKGkyY19tYXN0ZXJfc2VuZChlbmNvZGVyLT5pMmMsIGJ1ZmZlciwgMikgPT0gMikKLQkJCWJyZWFrOwotCQllcnIrKzsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEkvTyBlcnJvciAjJWQgIgotCQkgICAgICAgIih3cml0ZSAweCUwMngvMHglMDJ4KVxuIiwKLQkJICAgICAgIGVuY29kZXItPmkyYy0+bmFtZSwgZXJyLCBlbmNvZGVyLT5hZGRyLCBzdWJhZGRyKTsKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Ci0JfQotCWlmIChlcnIgPT0gMykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZ2l2aW5nIHVwXG4iLAotCQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJ0ODY2X2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBidDg2Nl9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGJ0ODY2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotCi0KLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdCT0ge0kyQ19CVDg2Nj4+MSwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IHByb2JlWzJdCQk9IHtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVsyXQkJPSB7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0Jbm9ybWFsX2kyYywKLQlwcm9iZSwKLQlpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDg2NiA9IHsKLQkuZHJpdmVyLm5hbWUgPSBCVDg2Nl9ERVZOQU1FLAotCS5pZCA9IEkyQ19EUklWRVJJRF9CVDg2NiwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBidDg2Nl9hdHRhY2gsCi0JLmRldGFjaF9jbGllbnQgPSBidDg2Nl9kZXRhY2gsCi0JLmNvbW1hbmQgPSBidDg2Nl9jb21tYW5kCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBidDg2Nl9jbGllbnRfdG1wbCA9Ci17Ci0JLm5hbWUgPSAiKG5pbCkiLAotCS5hZGRyID0gMCwKLQkuYWRhcHRlciA9IE5VTEwsCi0JLmRyaXZlciA9ICZpMmNfZHJpdmVyX2J0ODY2LAotfTsKLQotc3RhdGljIGludCBidDg2Nl9mb3VuZF9wcm9jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICBpbnQgYWRkciwgaW50IGtpbmQpCitzdGF0aWMgaW50IGJ0ODY2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGJ0ODY2ICplbmNvZGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCAmYnQ4NjZfY2xpZW50X3RtcGwsIHNpemVvZigqY2xpZW50KSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKCplbmNvZGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVuY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQlzcHJpbnRmKGNsaWVudC0+bmFtZSwgIiVzLSUwMngiLCBCVDg2Nl9ERVZOQU1FLCBhZGFwdGVyLT5pZCk7Ci0KLQllbmNvZGVyLT5pMmMgPSBjbGllbnQ7Ci0JZW5jb2Rlci0+YWRkciA9IGFkZHI7Ci0JLy9lbmNvZGVyLT5lbmNvZGVyX3R5cGUgPSBFTkNPREVSX1RZUEVfVU5LTk9XTjsKLQotCS8qIGluaXRpYWxpemUgKi8KLQotCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidDg2Nl9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBidDg2Nl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpZiAoYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NykKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBidDg2Nl9mb3VuZF9wcm9jKTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJ0ODY2X2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKIH0KIAotc3RhdGljIGludCBidDg2Nl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXJldHVybiBidDg2Nl9kb19jb21tYW5kKGVuY29kZXIsIGNtZCwgYXJnKTsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDg2Nl9pZFtdID0geworCXsgImJ0ODY2IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDg2Nl9pZCk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGJ0ODY2X2luaXQodm9pZCkKLXsKLQlpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9idDg2Nik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBidDg2Nl9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NjYpOwotfQotCi1tb2R1bGVfaW5pdChidDg2Nl9pbml0KTsKLW1vZHVsZV9leGl0KGJ0ODY2X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImJ0ODY2IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCisJLmNvbW1hbmQgPSBidDg2Nl9jb21tYW5kLAorCS5wcm9iZSA9IGJ0ODY2X3Byb2JlLAorCS5yZW1vdmUgPSBidDg2Nl9yZW1vdmUsCisJLmxlZ2FjeV9wcm9iZSA9IGJ0ODY2X2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSBidDg2Nl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggNTg1OGJmNS4uOWVjNGNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtNDI0Niw3ICs0MjQ2LDcgQEAKIAkJCQkgIHZpZGVvX25yW2J0di0+Yy5ucl0pIDwgMCkKIAkJZ290byBlcnI7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkXG4iLAotCSAgICAgICBidHYtPmMubnIsYnR2LT52aWRlb19kZXYtPm1pbm9yICYgMHgxZik7CisJICAgICAgIGJ0di0+Yy5uciwgYnR2LT52aWRlb19kZXYtPm51bSk7CiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmYnR2LT52aWRlb19kZXYtPmRldiwKIAkJCQkgICAgICZkZXZfYXR0cl9jYXJkKTwwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnR0diVkOiBkZXZpY2VfY3JlYXRlX2ZpbGUgJ2NhcmQnICIKQEAgLTQyNjMsNyArNDI2Myw3IEBACiAJCQkJICB2YmlfbnJbYnR2LT5jLm5yXSkgPCAwKQogCQlnb3RvIGVycjsKIAlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IHJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkXG4iLAotCSAgICAgICBidHYtPmMubnIsYnR2LT52YmlfZGV2LT5taW5vciAmIDB4MWYpOworCSAgICAgICBidHYtPmMubnIsIGJ0di0+dmJpX2Rldi0+bnVtKTsKIAogCWlmICghYnR2LT5oYXNfcmFkaW8pCiAJCXJldHVybiAwOwpAQCAtNDI3NSw3ICs0Mjc1LDcgQEAKIAkJCQkgIHJhZGlvX25yW2J0di0+Yy5ucl0pIDwgMCkKIAkJZ290byBlcnI7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiByZWdpc3RlcmVkIGRldmljZSByYWRpbyVkXG4iLAotCSAgICAgICBidHYtPmMubnIsYnR2LT5yYWRpb19kZXYtPm1pbm9yICYgMHgxZik7CisJICAgICAgIGJ0di0+Yy5uciwgYnR2LT5yYWRpb19kZXYtPm51bSk7CiAKIAkvKiBhbGwgZG9uZSAqLwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKaW5kZXggMTdhYTBhZC4uMGY5MzBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jCkBAIC04MTUsNyArODE1LDcgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJ2aWRlbyVkOiBDb2xvdXIgUXVpY2tDYW0gZm91bmQgb24gJXNcbiIsCi0JICAgICAgIHFjYW0tPnZkZXYubWlub3IsIHFjYW0tPnBwb3J0LT5uYW1lKTsKKwkgICAgICAgcWNhbS0+dmRldi5udW0sIHFjYW0tPnBwb3J0LT5uYW1lKTsKIAogCXFjYW1zW251bV9jYW1zKytdID0gcWNhbTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKaW5kZXggZmM5NDk3Yi4uYThjMDY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCkBAIC0yMDU5LDEwICsyMDU5LDEwIEBACiAKIAlpZiAoIWNhZmVfZGZzX3Jvb3QpCiAJCXJldHVybjsKLQlzcHJpbnRmKGZuYW1lLCAicmVncy0lZCIsIGNhbS0+djRsZGV2Lm1pbm9yKTsKKwlzcHJpbnRmKGZuYW1lLCAicmVncy0lZCIsIGNhbS0+djRsZGV2Lm51bSk7CiAJY2FtLT5kZnNfcmVncyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZm5hbWUsIDA0NDQsIGNhZmVfZGZzX3Jvb3QsCiAJCQljYW0sICZjYWZlX2Rmc19yZWdfb3BzKTsKLQlzcHJpbnRmKGZuYW1lLCAiY2FtLSVkIiwgY2FtLT52NGxkZXYubWlub3IpOworCXNwcmludGYoZm5hbWUsICJjYW0tJWQiLCBjYW0tPnY0bGRldi5udW0pOwogCWNhbS0+ZGZzX2NhbV9yZWdzID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgMDQ0NCwgY2FmZV9kZnNfcm9vdCwKIAkJCWNhbSwgJmNhZmVfZGZzX2NhbV9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCAxNzk4Yjc3Li4xNmMwOTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAKIAlpZiAoIWNwaWFfcHJvY19yb290IHx8ICFjYW0pCiAJCXJldHVybjsKIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubWlub3IpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubnVtKTsKIAogCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCBjcGlhX3Byb2Nfcm9vdCk7CiAJaWYgKCFlbnQpCkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCWlmICghY2FtIHx8ICFjYW0tPnByb2NfZW50cnkpCiAJCXJldHVybjsKIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubWlub3IpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubnVtKTsKIAlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCBjcGlhX3Byb2Nfcm9vdCk7CiAJY2FtLT5wcm9jX2VudHJ5ID0gTlVMTDsKIH0KQEAgLTQwMDUsNyArNDAwNSw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlEQkcoImRlc3Ryb3lpbmcgL3Byb2MvY3BpYS92aWRlbyVkXG4iLCBjYW0tPnZkZXYubWlub3IpOworCURCRygiZGVzdHJveWluZyAvcHJvYy9jcGlhL3ZpZGVvJWRcbiIsIGNhbS0+dmRldi5udW0pOwogCWRlc3Ryb3lfcHJvY19jcGlhX2NhbShjYW0pOwogI2VuZGlmCiAJaWYgKCFjYW0tPm9wZW5fY291bnQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCmluZGV4IDg5N2U4ZDEuLjFjNmJkNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwpAQCAtMTk3Myw3ICsxOTczLDcgQEAKIAl9IGVsc2UgewogCQlMT0coIi9kZXYvdmlkZW8lZCByZW1vdmVkIHdoaWxlIG9wZW4sICIKIAkJICAgICJkZWZlcnJpbmcgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2VcbiIsCi0JCSAgICBjYW0tPnZkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+dmRldi0+bnVtKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKaW5kZXggMDg1MTIxYy4uN2ExYTc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKQEAgLTYxMyw2ICs2MTMsNyBAQAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJaW50IHJldHZhbCA9IDA7CisJaW50IGk7CiAJaW50IHZiaV9idWZfc2l6ZTsKIAl1MzIgZGV2dHlwZTsKIAlzdHJ1Y3QgY3gxOCAqY3g7CkBAIC02OTgsNyArNjk5LDggQEAKIAogCS8qIGFjdGl2ZSBpMmMgICovCiAJQ1gxOF9ERUJVR19JTkZPKCJhY3RpdmF0aW5nIGkyYy4uLlxuIik7Ci0JaWYgKGluaXRfY3gxOF9pMmMoY3gpKSB7CisJcmV0dmFsID0gaW5pdF9jeDE4X2kyYyhjeCk7CisJaWYgKHJldHZhbCkgewogCQlDWDE4X0VSUigiQ291bGQgbm90IGluaXRpYWxpemUgaTJjXG4iKTsKIAkJZ290byBmcmVlX21hcDsKIAl9CkBAIC04MzYsOCArODM4LDExIEBACiAJQ1gxOF9FUlIoIkVycm9yICVkIG9uIGluaXRpYWxpemF0aW9uXG4iLCByZXR2YWwpOwogCWN4MThfbG9nX3N0YXRpc3RpY3MoY3gpOwogCi0Ja2ZyZWUoY3gxOF9jYXJkc1tjeDE4X2NhcmRzX2FjdGl2ZV0pOwotCWN4MThfY2FyZHNbY3gxOF9jYXJkc19hY3RpdmVdID0gTlVMTDsKKwlpID0gY3gtPm51bTsKKwlzcGluX2xvY2soJmN4MThfY2FyZHNfbG9jayk7CisJa2ZyZWUoY3gxOF9jYXJkc1tpXSk7CisJY3gxOF9jYXJkc1tpXSA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmN4MThfY2FyZHNfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAppbmRleCBmYThiZTA3Li5hNGIxNzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi92aWRlby5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9hdWRpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmgKaW5kZXggMTk3ZDRmYi4uMjg3YTVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pby5oCkBAIC0zOSw3ICszOSw3IEBACiAKIC8qIFN0YXRpc3RpY3MgZ2F0aGVyaW5nICovCiBzdGF0aWMgaW5saW5lCi12b2lkIGN4MThfbG9nX3dyaXRlX3JldHJpZXMoc3RydWN0IGN4MTggKmN4LCBpbnQgaSwgY29uc3Qgdm9pZCAqYWRkcikKK3ZvaWQgY3gxOF9sb2dfd3JpdGVfcmV0cmllcyhzdHJ1Y3QgY3gxOCAqY3gsIGludCBpLCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJaWYgKGkgPiBDWDE4X01BWF9NTUlPX1JFVFJJRVMpCiAJCWkgPSBDWDE4X01BWF9NTUlPX1JFVFJJRVM7CkBAIC00OCw3ICs0OCw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUKLXZvaWQgY3gxOF9sb2dfcmVhZF9yZXRyaWVzKHN0cnVjdCBjeDE4ICpjeCwgaW50IGksIGNvbnN0IHZvaWQgKmFkZHIpCit2b2lkIGN4MThfbG9nX3JlYWRfcmV0cmllcyhzdHJ1Y3QgY3gxOCAqY3gsIGludCBpLCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJaWYgKGkgPiBDWDE4X01BWF9NTUlPX1JFVFJJRVMpCiAJCWkgPSBDWDE4X01BWF9NTUlPX1JFVFJJRVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKaW5kZXggMGM4ZTc1NC4uZTVmZjc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwpAQCAtMjAwLDE2ICsyMDAsMTggQEAKIC8qIEluaXRpYWxpemUgdjRsMiB2YXJpYWJsZXMgYW5kIHJlZ2lzdGVyIHY0bDIgZGV2aWNlcyAqLwogaW50IGN4MThfc3RyZWFtc19zZXR1cChzdHJ1Y3QgY3gxOCAqY3gpCiB7Ci0JaW50IHR5cGU7CisJaW50IHR5cGUsIHJldDsKIAogCS8qIFNldHVwIFY0TDIgRGV2aWNlcyAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBDWDE4X01BWF9TVFJFQU1TOyB0eXBlKyspIHsKIAkJLyogUHJlcGFyZSBkZXZpY2UgKi8KLQkJaWYgKGN4MThfcHJlcF9kZXYoY3gsIHR5cGUpKQorCQlyZXQgPSBjeDE4X3ByZXBfZGV2KGN4LCB0eXBlKTsKKwkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAogCQkvKiBBbGxvY2F0ZSBTdHJlYW0gKi8KLQkJaWYgKGN4MThfc3RyZWFtX2FsbG9jKCZjeC0+c3RyZWFtc1t0eXBlXSkpCisJCXJldCA9IGN4MThfc3RyZWFtX2FsbG9jKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAJfQogCWlmICh0eXBlID09IENYMThfTUFYX1NUUkVBTVMpCkBAIC0yMTcsMTQgKzIxOSwxNCBAQAogCiAJLyogT25lIG9yIG1vcmUgc3RyZWFtcyBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuIENsZWFuICdlbSBhbGwgdXAuICovCiAJY3gxOF9zdHJlYW1zX2NsZWFudXAoY3gsIDApOwotCXJldHVybiAtRU5PTUVNOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9yZWdfZGV2KHN0cnVjdCBjeDE4ICpjeCwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW3R5cGVdOwogCWludCB2ZmxfdHlwZSA9IGN4MThfc3RyZWFtX2luZm9bdHlwZV0udmZsX3R5cGU7Ci0JaW50IG51bTsKKwlpbnQgbnVtLCByZXQ7CiAKIAkvKiBUT0RPOiBTaG91bGRuJ3QgdGhpcyBiZSBhIFZGTF9UWVBFX1RSQU5TUE9SVCBvciBzb21ldGhpbmc/CiAJICogV2UgbmVlZCBhIFZGTF9UWVBFX1RTIGRlZmluZWQuCkBAIC0yMzMsOSArMjM1LDEwIEBACiAJCS8qIGp1c3QgcmV0dXJuIGlmIG5vIERWQiBpcyBzdXBwb3J0ZWQgKi8KIAkJaWYgKChjeC0+Y2FyZC0+aHdfYWxsICYgQ1gxOF9IV19EVkIpID09IDApCiAJCQlyZXR1cm4gMDsKLQkJaWYgKGN4MThfZHZiX3JlZ2lzdGVyKHMpIDwgMCkgeworCQlyZXQgPSBjeDE4X2R2Yl9yZWdpc3RlcihzKTsKKwkJaWYgKHJldCA8IDApIHsKIAkJCUNYMThfRVJSKCJEVkIgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtMjUyLDEyICsyNTUsMTMgQEAKIAl9CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52NGwyZGV2LCB2ZmxfdHlwZSwgbnVtKSkgeworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52NGwyZGV2LCB2ZmxfdHlwZSwgbnVtKTsKKwlpZiAocmV0IDwgMCkgewogCQlDWDE4X0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIGtlcm5lbCBudW1iZXIgJWRcbiIsCiAJCQlzLT5uYW1lLCBudW0pOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52NGwyZGV2KTsKIAkJcy0+djRsMmRldiA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gcmV0OwogCX0KIAludW0gPSBzLT52NGwyZGV2LT5udW07CiAKQEAgLTI5MCwxOCArMjk0LDIyIEBACiBpbnQgY3gxOF9zdHJlYW1zX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlpbnQgdHlwZTsKLQlpbnQgZXJyID0gMDsKKwlpbnQgZXJyOworCWludCByZXQgPSAwOwogCiAJLyogUmVnaXN0ZXIgVjRMMiBkZXZpY2VzICovCi0JZm9yICh0eXBlID0gMDsgdHlwZSA8IENYMThfTUFYX1NUUkVBTVM7IHR5cGUrKykKLQkJZXJyIHw9IGN4MThfcmVnX2RldihjeCwgdHlwZSk7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IENYMThfTUFYX1NUUkVBTVM7IHR5cGUrKykgeworCQllcnIgPSBjeDE4X3JlZ19kZXYoY3gsIHR5cGUpOworCQlpZiAoZXJyICYmIHJldCA9PSAwKQorCQkJcmV0ID0gZXJyOworCX0KIAotCWlmIChlcnIgPT0gMCkKKwlpZiAocmV0ID09IDApCiAJCXJldHVybiAwOwogCiAJLyogT25lIG9yIG1vcmUgc3RyZWFtcyBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuIENsZWFuICdlbSBhbGwgdXAuICovCiAJY3gxOF9zdHJlYW1zX2NsZWFudXAoY3gsIDEpOwotCXJldHVybiAtRU5PTUVNOworCXJldHVybiByZXQ7CiB9CiAKIC8qIFVucmVnaXN0ZXIgdjRsMiBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCmluZGV4IDM5NWMxMWYuLjAwODMxZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogCWN4MjM4ODVfbWM0MTdfaW5pdChkZXYpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW21wZWddXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+djRsX2RldmljZS0+bWlub3IgJiAweDFmKTsKKwkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnY0bF9kZXZpY2UtPm51bSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDJjZGExNWYuLmRhYzVjY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMzksMTYgKzM5LDE2IEBACiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMiwKIAkJCS52bXV4ICAgPSAxLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUzLAogCQkJLnZtdXggICA9IDIsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTQsCiAJCQkudm11eCAgID0gMywKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjE4MDBscCIsCkBAIC01NywxOSArNTcsMTkgQEAKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ZmYwMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfREVCVUcsCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGZmMDEsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweGZmMDIsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4ZmYwMiwKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxODAwIiwKQEAgLTg0LDIwICs4NCwyMCBAQAogCQkJCQlDWDI1ODQwX1ZJTjVfQ0gyIHwKIAkJCQkJQ1gyNTg0MF9WSU4yX0NIMSwKIAkJCS5ncGlvMCAgPSAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9CUNYMjU4NDBfVklON19DSDMgfAogCQkJCQlDWDI1ODQwX1ZJTjRfQ0gyIHwKIAkJCQkJQ1gyNTg0MF9WSU42X0NIMSwKIAkJCS5ncGlvMCAgPSAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0JQ1gyNTg0MF9WSU43X0NIMyB8CiAJCQkJCUNYMjU4NDBfVklONF9DSDIgfAogCQkJCQlDWDI1ODQwX1ZJTjhfQ0gxIHwKIAkJCQkJQ1gyNTg0MF9TVklERU9fT04sCiAJCQkuZ3BpbzAgID0gMCwKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxMjUwIiwKQEAgLTEwNiwxOSArMTA2LDE5IEBACiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGZmMDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0RFQlVHLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhmZjAxLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHhmZjAyLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweGZmMDIsCi0JCX19LAorCQl9IH0sCiAJfSwKIAlbQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfRVhQXSA9IHsKIAkJLm5hbWUJCT0gIkRWaUNPIEZ1c2lvbkhEVFY1IEV4cHJlc3MiLApAQCAtMTY5LDQzICsxNjksNDMgQEAKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4MzQwMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfVU5LTk9XTiwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc2MDAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3ODAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc4MDEsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzgwOSwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3OTExLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCiAJCS5zdWJkZXZpY2UgPSAweGQ1MDAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9FWFAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NzkwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFEsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3Nzk3LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFEsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NzEwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc3MTcsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwLApAQCAtMjI1LDExICsyMjUsMTEgQEAKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4ODAxMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE0MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkNjE4LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkYjc4LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQLApAQCAtMjQ3LDIzICsyNDcsMjUgQEAKIAogCWlmICgwID09IGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yICYmCiAJICAgIDAgPT0gZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpIHsKLQkJcHJpbnRrKCIlczogWW91ciBib2FyZCBoYXMgbm8gdmFsaWQgUENJZSBTdWJzeXN0ZW0gSUQgYW5kIHRodXMgY2FuJ3RcbiIKLQkJICAgICAgICIlczogYmUgYXV0b2RldGVjdGVkLiAgUGxlYXNlIHBhc3MgY2FyZD08bj4gaW5zbW9kIG9wdGlvbiB0b1xuIgotCQkgICAgICAgIiVzOiB3b3JrYXJvdW5kIHRoYXQuICBSZWRpcmVjdCBjb21wbGFpbnRzIHRvIHRoZSB2ZW5kb3Igb2ZcbiIKLQkJICAgICAgICIlczogdGhlIFRWIGNhcmQuICBCZXN0IHJlZ2FyZHMsXG4iCisJCXByaW50ayhLRVJOX0lORk8KKwkJCSIlczogQm9hcmQgaGFzIG5vIHZhbGlkIFBDSWUgU3Vic3lzdGVtIElEIGFuZCBjYW4ndFxuIgorCQkgICAgICAgIiVzOiBiZSBhdXRvZGV0ZWN0ZWQuIFBhc3MgY2FyZD08bj4gaW5zbW9kIG9wdGlvblxuIgorCQkgICAgICAgIiVzOiB0byB3b3JrYXJvdW5kIHRoYXQuIFJlZGlyZWN0IGNvbXBsYWludHMgdG8gdGhlXG4iCisJCSAgICAgICAiJXM6IHZlbmRvciBvZiB0aGUgVFYgY2FyZC4gIEJlc3QgcmVnYXJkcyxcbiIKIAkJICAgICAgICIlczogICAgICAgICAtLSB0dXhcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKCIlczogWW91ciBib2FyZCBpc24ndCBrbm93biAoeWV0KSB0byB0aGUgZHJpdmVyLiAgWW91IGNhblxuIgotCQkgICAgICAgIiVzOiB0cnkgdG8gcGljayBvbmUgb2YgdGhlIGV4aXN0aW5nIGNhcmQgY29uZmlncyB2aWFcbiIKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIiVzOiBZb3VyIGJvYXJkIGlzbid0IGtub3duICh5ZXQpIHRvIHRoZSBkcml2ZXIuXG4iCisJCSAgICAgICAiJXM6IFRyeSB0byBwaWNrIG9uZSBvZiB0aGUgZXhpc3RpbmcgY2FyZCBjb25maWdzIHZpYVxuIgogCQkgICAgICAgIiVzOiBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uLiAgVXBkYXRpbmcgdG8gdGhlIGxhdGVzdFxuIgogCQkgICAgICAgIiVzOiB2ZXJzaW9uIG1pZ2h0IGhlbHAgYXMgd2VsbC5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUpOwogCX0KLQlwcmludGsoIiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gaW5zbW9kIG9wdGlvbjpcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhlcmUgaXMgYSBsaXN0IG9mIHZhbGlkIGNob2ljZXMgZm9yIHRoZSBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uOlxuIiwKIAkgICAgICAgZGV2LT5uYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3gyMzg4NV9iY291bnQ7IGkrKykKLQkJcHJpbnRrKCIlczogICAgY2FyZD0lZCAtPiAlc1xuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgIGNhcmQ9JWQgLT4gJXNcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGksIGN4MjM4ODVfYm9hcmRzW2ldLm5hbWUpOwogfQogCkBAIC0yNzEsMTEgKzI3MywxMSBAQAogewogCXN0cnVjdCB0dmVlcHJvbSB0djsKIAotCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmRldi0+aTJjX2J1c1swXS5pMmNfY2xpZW50LCAmdHYsIGVlcHJvbV9kYXRhKTsKKwl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudCwgJnR2LAorCQllZXByb21fZGF0YSk7CiAKIAkvKiBNYWtlIHN1cmUgd2Ugc3VwcG9ydCB0aGUgYm9hcmQgbW9kZWwgKi8KLQlzd2l0Y2ggKHR2Lm1vZGVsKQotCXsKKwlzd2l0Y2ggKHR2Lm1vZGVsKSB7CiAJY2FzZSA3MTAwOToKIAkJLyogV2luVFYtSFZSMTIwMCAoUENJZSwgUmV0YWlsLCBmdWxsIGhlaWdodCkKIAkJICogRFZCLVQgYW5kIGJhc2ljIGFuYWxvZyAqLwpAQCAtMzAzLDIxICszMDUsNTEgQEAKIAljYXNlIDcxOTk5OgogCQkvKiBXaW5UVi1IVlIxMjAwIChQQ0llLCBPRU0sIGZ1bGwgaGVpZ2h0KQogCQkgKiBEVkItVCBhbmQgYmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NjYwMTogLyogV2luVFYtSFZSMTgwMGxwIChQQ0llLCBSZXRhaWwsIE5vIElSLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzcwMDE6IC8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NzAxMTogLyogV2luVFYtSFZSMTUwMCAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIE5vIElSLCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc3MDQxOiAvKiBXaW5UVi1IVlIxNTAwUSAoRXhwcmVzcyBDYXJkLCBPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NzA1MTogLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQy9RQU0gYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzgwMTE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIFJldGFpbCwgMy41bW0gaW4sIElSLCBObyBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc4NTAxOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIEZNLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzg1MjE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3ODUzMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBObyBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc4NjMxOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIE5vIElSLCBObyBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc5MDAxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBSZXRhaWwsIElSLCBmdWxsIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3OTEwMTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgaGFsZiBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzk1NjE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc5NTcxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBmdWxsIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3OTY3MTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgaGFsZiBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzY2MDE6CisJCS8qIFdpblRWLUhWUjE4MDBscCAoUENJZSwgUmV0YWlsLCBObyBJUiwgRHVhbAorCQkJY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3NzAwMToKKwkJLyogV2luVFYtSFZSMTUwMCAoRXhwcmVzcyBDYXJkLCBPRU0sIE5vIElSLCBBVFNDCisJCQlhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3NzAxMToKKwkJLyogV2luVFYtSFZSMTUwMCAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIE5vIElSLCBBVFNDCisJCQlhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3NzA0MToKKwkJLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQy9RQU0KKwkJCWFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc3MDUxOgorCQkvKiBXaW5UVi1IVlIxNTAwUSAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIE5vIElSLCBBVFNDL1FBTQorCQkJYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzgwMTE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIFJldGFpbCwgMy41bW0gaW4sIElSLCBObyBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODUwMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODUyMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODUzMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBObyBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODYzMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBObyBJUiwgTm8gRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzkwMDE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGZ1bGwgaGVpZ2h0LAorCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3OTEwMToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgaGFsZiBoZWlnaHQsCisJCQlBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc5NTYxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBoYWxmIGhlaWdodCwKKwkJCUFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzk1NzE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGZ1bGwgaGVpZ2h0LAorCQkgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3OTY3MToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgaGFsZiBoZWlnaHQsCisJCQlBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KIAljYXNlIDgwMDE5OgogCQkvKiBXaW5UVi1IVlIxNDAwIChFeHByZXNzIENhcmQsIFJldGFpbCwgSVIsCiAJCSAqIERWQi1UIGFuZCBCYXNpYyBhbmFsb2cgKi8KQEAgLTMyOSw3ICszNjEsOCBAQAogCQkgKiBEVkItVCBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoIiVzOiB3YXJuaW5nOiB1bmtub3duIGhhdXBwYXVnZSBtb2RlbCAjJWRcbiIsIGRldi0+bmFtZSwgdHYubW9kZWwpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd2FybmluZzogdW5rbm93biBoYXVwcGF1Z2UgbW9kZWwgIyVkXG4iLAorCQkJZGV2LT5uYW1lLCB0di5tb2RlbCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzUyLDcgKzM4NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBROgpAQCAtMzgzLDcgKzQxNiw3IEBACiAKIHZvaWQgY3gyMzg4NV9ncGlvX3NldHVwKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQogewotCXN3aXRjaChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwOgogCQkvKiBHUElPLTAgY3gyNDIyNyBkZW1vZHVsYXRvciByZXNldCAqLwogCQljeF9zZXQoR1AwX0lPLCAweDAwMDEwMDAxKTsgLyogQnJpbmcgdGhlIHBhcnQgb3V0IG9mIHJlc2V0ICovCkBAIC02MTcsMTAgKzY1MCwzIEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IGJlYjNlNjEuLjhmNmZiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTM3LDEyICszNywxMiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLGludCwwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhcmRbXSAgPSB7WzAgLi4uIChDWDIzODg1X01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CiBtb2R1bGVfcGFyYW1fYXJyYXkoY2FyZCwgIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNhcmQsImNhcmQgdHlwZSIpOworTU9EVUxFX1BBUk1fREVTQyhjYXJkLCAiY2FyZCB0eXBlIik7CiAKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pXAogCWRvIHsgaWYgKGRlYnVnID49IGxldmVsKVwKQEAgLTM2NCwxMyArMzY0LDEyIEBACiAJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKIAkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKIAl9Ci0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKIAkJZGVsX3RpbWVyKCZxLT50aW1lb3V0KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOwotCX0KIAlpZiAoYmMgIT0gMSkKLQkJcHJpbnRrKCIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBiYyk7CiB9CiAKQEAgLTM4MSw4ICszODAsNyBAQAogCXVuc2lnbmVkIGludCBpLCBsaW5lczsKIAl1MzIgY2R0OwogCi0JaWYgKGNoLT5jbWRzX3N0YXJ0ID09IDApCi0JeworCWlmIChjaC0+Y21kc19zdGFydCA9PSAwKSB7CiAJCWRwcmludGsoMSwgIiVzKCkgRXJhc2luZyBjaGFubmVsIFslc11cbiIsIF9fZnVuY19fLAogCQkJY2gtPm5hbWUpOwogCQljeF93cml0ZShjaC0+cHRyMV9yZWcsIDApOwpAQCAtNDE4LDE1ICs0MTYsMTUgQEAKIAogCS8qIHdyaXRlIENNRFMgKi8KIAlpZiAoY2gtPmp1bXBvbmx5KQotCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArICAwLCA4KTsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCA4KTsKIAllbHNlCi0JCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgIDAsIHJpc2MpOworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDAsIHJpc2MpOwogCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgIDQsIDApOyAvKiA2NCBiaXRzIDYzLTMyICovCiAJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAgOCwgY2R0KTsKIAljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDEyLCAobGluZXMqMTYpID4+IDMpOwogCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTYsIGNoLT5jdHJsX3N0YXJ0KTsKIAlpZiAoY2gtPmp1bXBvbmx5KQotCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCAweDgwMDAwMDAwIHwgKDY0ID4+IDIpICk7CisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMjAsIDB4ODAwMDAwMDAgfCAoNjQgPj4gMikpOwogCWVsc2UKIAkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgNjQgPj4gMik7CiAJZm9yIChpID0gMjQ7IGkgPCA4MDsgaSArPSA0KQpAQCAtNDM2LDkgKzQzNCw5IEBACiAJY3hfd3JpdGUoY2gtPnB0cjFfcmVnLCBjaC0+Zmlmb19zdGFydCk7CiAJY3hfd3JpdGUoY2gtPnB0cjJfcmVnLCBjZHQpOwogCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgKGxpbmVzKjE2KSA+PiAzKTsKLQljeF93cml0ZShjaC0+Y250MV9yZWcsIChicGwgPj4gMykgLTEpOworCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgKGJwbCA+PiAzKSAtIDEpOwogCi0JZHByaW50aygyLCJbYnJpZGdlICVkXSBzcmFtIHNldHVwICVzOiBicGw9JWQgbGluZXM9JWRcbiIsCisJZHByaW50aygyLCAiW2JyaWRnZSAlZF0gc3JhbSBzZXR1cCAlczogYnBsPSVkIGxpbmVzPSVkXG4iLAogCQlkZXYtPmJyaWRnZSwKIAkJY2gtPm5hbWUsCiAJCWJwbCwKQEAgLTQ2OSw0MyArNDY3LDQzIEBACiAJdTMyIHJpc2M7CiAJdW5zaWduZWQgaW50IGksIGosIG47CiAKLQlwcmludGsoIiVzOiAlcyAtIGRtYSBjaGFubmVsIHN0YXR1cyBkdW1wXG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyAtIGRtYSBjaGFubmVsIHN0YXR1cyBkdW1wXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGNoLT5uYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYW1lKTsgaSsrKQotCQlwcmludGsoIiVzOiAgIGNtZHM6ICUtMTVzOiAweCUwOHhcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGNtZHM6ICUtMTVzOiAweCUwOHhcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIG5hbWVbaV0sCiAJCSAgICAgICBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCppKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXJpc2MgPSBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCAqIChpICsgMTQpKTsKLQkJcHJpbnRrKCIlczogICByaXNjJWQ6ICIsIGRldi0+bmFtZSwgaSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIHJpc2MlZDogIiwgZGV2LT5uYW1lLCBpKTsKIAkJY3gyMzg4NV9yaXNjX2RlY29kZShyaXNjKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8ICg2NCA+PiAyKTsgaSArPSBuKSB7CiAJCXJpc2MgPSBjeF9yZWFkKGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGkpOwogCQkvKiBObyBjb25zaWRlcmF0aW9uIGZvciBiaXRzIDYzLTMyICovCiAKLQkJcHJpbnRrKCIlczogICAoMHglMDh4KSBpcSAleDogIiwgZGV2LT5uYW1lLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICAoMHglMDh4KSBpcSAleDogIiwgZGV2LT5uYW1lLAogCQkgICAgICAgY2gtPmN0cmxfc3RhcnQgKyA0ICogaSwgaSk7CiAJCW4gPSBjeDIzODg1X3Jpc2NfZGVjb2RlKHJpc2MpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKSB7CiAJCQlyaXNjID0gY3hfcmVhZChjaC0+Y3RybF9zdGFydCArIDQgKiAoaSArIGopKTsKLQkJCXByaW50aygiJXM6ICAgaXEgJXg6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGlxICV4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBpK2osIHJpc2MsIGopOwogCQl9CiAJfQogCi0JcHJpbnRrKCIlczogZmlmbzogMHglMDh4IC0+IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGNoLT5maWZvX3N0YXJ0LCBjaC0+Zmlmb19zdGFydCtjaC0+Zmlmb19zaXplKTsKLQlwcmludGsoIiVzOiBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY3RybDogMHglMDh4IC0+IDB4JXhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY2gtPmN0cmxfc3RhcnQsIGNoLT5jdHJsX3N0YXJ0ICsgNioxNik7Ci0JcHJpbnRrKCIlczogICBwdHIxX3JlZzogMHglMDh4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIHB0cjFfcmVnOiAweCUwOHhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY3hfcmVhZChjaC0+cHRyMV9yZWcpKTsKLQlwcmludGsoIiVzOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgcHRyMl9yZWc6IDB4JTA4eFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjeF9yZWFkKGNoLT5wdHIyX3JlZykpOwotCXByaW50aygiJXM6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBjbnQxX3JlZzogMHglMDh4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGN4X3JlYWQoY2gtPmNudDFfcmVnKSk7Ci0JcHJpbnRrKCIlczogICBjbnQyX3JlZzogMHglMDh4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGNudDJfcmVnOiAweCUwOHhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY3hfcmVhZChjaC0+Y250Ml9yZWcpKTsKIH0KIApAQCAtNTE1LDEzICs1MTMsMTMgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgbjsKIAotCXByaW50aygiJXM6IHJpc2MgZGlzYXNtOiAlcCBbZG1hPTB4JTA4bHhdXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiByaXNjIGRpc2FzbTogJXAgW2RtYT0weCUwOGx4XVxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCByaXNjLT5jcHUsICh1bnNpZ25lZCBsb25nKXJpc2MtPmRtYSk7CiAJZm9yIChpID0gMDsgaSA8IChyaXNjLT5zaXplID4+IDIpOyBpICs9IG4pIHsKLQkJcHJpbnRrKCIlczogICAlMDRkOiAiLCBkZXYtPm5hbWUsIGkpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogICAlMDRkOiAiLCBkZXYtPm5hbWUsIGkpOwogCQluID0gY3gyMzg4NV9yaXNjX2RlY29kZShsZTMyX3RvX2NwdShyaXNjLT5jcHVbaV0pKTsKIAkJZm9yIChqID0gMTsgaiA8IG47IGorKykKLQkJCXByaW50aygiJXM6ICAgJTA0ZDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgJTA0ZDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgaSArIGosIHJpc2MtPmNwdVtpICsgal0sIGopOwogCQlpZiAocmlzYy0+Y3B1W2ldID09IGNwdV90b19sZTMyKFJJU0NfSlVNUCkpCiAJCQlicmVhazsKQEAgLTYwMCw3ICs1OTgsNyBAQAogCSAqIHdoZW4gRE1BIGJlZ2lucyBpZiBSRFJfVExDVEwwIGJpdDQgaXMgbm90IGNsZWFyZWQuIEl0IGRvZXMgbm90CiAJICogb2NjdXIgb24gdGhlIGN4MjM4ODcgYnJpZGdlLgogCSAqLwotCWlmKGRldi0+YnJpZGdlID09IENYMjM4ODVfQlJJREdFXzg4NSkKKwlpZiAoZGV2LT5icmlkZ2UgPT0gQ1gyMzg4NV9CUklER0VfODg1KQogCQljeF9jbGVhcihSRFJfVExDVEwwLCAxIDw8IDQpOwogCiAJcmV0dXJuIDA7CkBAIC02MDgsMTMgKzYwNiwxMyBAQAogCiBzdGF0aWMgaW50IGdldF9yZXNvdXJjZXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0JaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCksCi0JCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwwKSwKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCksCiAJCQkgICAgICAgZGV2LT5uYW1lKSkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgTU1JTyBtZW1vcnkgQCAweCVsbHhcbiIsCi0JCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCkpOworCQlkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSk7CiAKIAlyZXR1cm4gLUVCVVNZOwogfQpAQCAtNjIzLDcgKzYyMSw4IEBACiBpbnQgY3gyMzg4NV9yaXNjX3N0b3BwZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKIAkJCQl1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIAotc3RhdGljIGludCBjeDIzODg1X2luaXRfdHNwb3J0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCBzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQsIGludCBwb3J0bm8pCitzdGF0aWMgaW50IGN4MjM4ODVfaW5pdF90c3BvcnQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCisJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0LCBpbnQgcG9ydG5vKQogewogCWRwcmludGsoMSwgIiVzKHBvcnRubz0lZClcbiIsIF9fZnVuY19fLCBwb3J0bm8pOwogCkBAIC02NDMsNyArNjQyLDE4IEBACiAJcG9ydC0+bXBlZ3EudGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcG9ydDsKIAlpbml0X3RpbWVyKCZwb3J0LT5tcGVncS50aW1lb3V0KTsKIAotCXN3aXRjaChwb3J0bm8pIHsKKwltdXRleF9pbml0KCZwb3J0LT5mcm9udGVuZHMubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPmZyb250ZW5kcy5mZWxpc3QpOworCXBvcnQtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSAwOworCisJLyogVGhpcyBzaG91bGQgYmUgaGFyZGNvZGVkIGFsbG93IGEgc2luZ2xlIGZyb250ZW5kCisJICogYXR0YWNobWVudCB0byB0aGlzIHRzcG9ydCwga2VlcGluZyB0aGUgLWR2Yi5jCisJICogY29kZSBjbGVhbiBhbmQgc2FmZS4KKwkgKi8KKwlpZiAoIXBvcnQtPm51bV9mcm9udGVuZHMpCisJCXBvcnQtPm51bV9mcm9udGVuZHMgPSAxOworCisJc3dpdGNoIChwb3J0bm8pIHsKIAljYXNlIDE6CiAJCXBvcnQtPnJlZ19ncGNudCAgICAgICAgICA9IFZJRF9CX0dQQ05UOwogCQlwb3J0LT5yZWdfZ3BjbnRfY3RsICAgICAgPSBWSURfQl9HUENOVF9DVEw7CkBAIC03NDQsMTMgKzc1NCwxMyBAQAogCW11dGV4X3VubG9jaygmZGV2bGlzdCk7CiAKIAkvKiBDb25maWd1cmUgdGhlIGludGVybmFsIG1lbW9yeSAqLwotCWlmKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODgwKSB7CisJaWYgKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODgwKSB7CiAJCWRldi0+YnJpZGdlID0gQ1gyMzg4NV9CUklER0VfODg3OwogCQkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJCWRldi0+Y2xrX2ZyZXEgPSAyNTAwMDAwMDsKIAkJZGV2LT5zcmFtX2NoYW5uZWxzID0gY3gyMzg4N19zcmFtX2NoYW5uZWxzOwogCX0gZWxzZQotCWlmKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODUyKSB7CisJaWYgKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODUyKSB7CiAJCWRldi0+YnJpZGdlID0gQ1gyMzg4NV9CUklER0VfODg1OwogCQkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJCWRldi0+Y2xrX2ZyZXEgPSAyODAwMDAwMDsKQEAgLTgzMSw4ICs4NDEsOCBAQAogCX0KIAogCS8qIFBDSWUgc3R1ZmYgKi8KLQlkZXYtPmxtbWlvID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCksCi0JCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksMCkpOworCWRldi0+bG1taW8gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApKTsKIAogCWRldi0+Ym1taW8gPSAodTggX19pb21lbSAqKWRldi0+bG1taW87CiAKQEAgLTg2Miw3ICs4NzIsNyBAQAogCWN4MjM4ODVfaTJjX3JlZ2lzdGVyKCZkZXYtPmkyY19idXNbMV0pOwogCWN4MjM4ODVfaTJjX3JlZ2lzdGVyKCZkZXYtPmkyY19idXNbMl0pOwogCWN4MjM4ODVfY2FyZF9zZXR1cChkZXYpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyAoJmRldi0+aTJjX2J1c1swXSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzBdLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAJY3gyMzg4NV9pcl9pbml0KGRldik7CiAKIAlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGEgPT0gQ1gyMzg4NV9BTkFMT0dfVklERU8pIHsKQEAgLTkwOCw4ICs5MTgsOCBAQAogCiBzdGF0aWMgdm9pZCBjeDIzODg1X2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQogewotCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCksCi0JCQkgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLDApKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApKTsKIAogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5yZWZjb3VudCkpCiAJCXJldHVybjsKQEAgLTkzNiw3ICs5NDYsNyBAQAogCWlvdW5tYXAoZGV2LT5sbW1pbyk7CiB9CiAKLXN0YXRpYyBfX2xlMzIqIGN4MjM4ODVfcmlzY19maWVsZChfX2xlMzIgKnJwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKK3N0YXRpYyBfX2xlMzIgKmN4MjM4ODVfcmlzY19maWVsZChfX2xlMzIgKnJwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MzIgc3luY19saW5lLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBicGwsIHVuc2lnbmVkIGludCBwYWRkaW5nLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBsaW5lcykKQEAgLTk1NywzMSArOTY3LDMxIEBACiAJCX0KIAkJaWYgKGJwbCA8PSBzZ19kbWFfbGVuKHNnKS1vZmZzZXQpIHsKIAkJCS8qIGZpdHMgaW50byBjdXJyZW50IGNodW5rICovCi0JCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8UklTQ19FT0x8YnBsKTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCi0JCQlvZmZzZXQrPWJwbDsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfFJJU0NfRU9MfGJwbCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCW9mZnNldCArPSBicGw7CiAJCX0gZWxzZSB7CiAJCQkvKiBzY2FubGluZSBuZWVkcyB0byBiZSBzcGxpdCAqLwogCQkJdG9kbyA9IGJwbDsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHwKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfAogCQkJCQkgICAgKHNnX2RtYV9sZW4oc2cpLW9mZnNldCkpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLwogCQkJdG9kbyAtPSAoc2dfZG1hX2xlbihzZyktb2Zmc2V0KTsKIAkJCW9mZnNldCA9IDA7CiAJCQlzZysrOwogCQkJd2hpbGUgKHRvZG8gPiBzZ19kbWFfbGVuKHNnKSkgewotCQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXwKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURXwKIAkJCQkJCSAgICBzZ19kbWFfbGVuKHNnKSk7Ci0JCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOwotCQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOwogCQkJCXNnKys7CiAJCQl9Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19FT0x8dG9kbyk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX0VPTHx0b2RvKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAJCQlvZmZzZXQgKz0gdG9kbzsKIAkJfQogCQlvZmZzZXQgKz0gcGFkZGluZzsKQEAgLTEwMTAsOSArMTAyMCwxMSBAQAogCSAgIGNhbiBjYXVzZSBuZXh0IGJwbCB0byBzdGFydCBjbG9zZSB0byBhIHBhZ2UgYm9yZGVyLiAgRmlyc3QgRE1BCiAJICAgcmVnaW9uIG1heSBiZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFICovCiAJLyogd3JpdGUgYW5kIGp1bXAgbmVlZCBhbmQgZXh0cmEgZHdvcmQgKi8KLQlpbnN0cnVjdGlvbnMgID0gZmllbGRzICogKDEgKyAoKGJwbCArIHBhZGRpbmcpICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXMpOworCWluc3RydWN0aW9ucyAgPSBmaWVsZHMgKiAoMSArICgoYnBsICsgcGFkZGluZykgKiBsaW5lcykKKwkJLyBQQUdFX1NJWkUgKyBsaW5lcyk7CiAJaW5zdHJ1Y3Rpb25zICs9IDI7Ci0JaWYgKChyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2kscmlzYyxpbnN0cnVjdGlvbnMqMTIpKSA8IDApCisJcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCBpbnN0cnVjdGlvbnMqMTIpOworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAogCS8qIHdyaXRlIHJpc2MgaW5zdHJ1Y3Rpb25zICovCkBAIC0xMDI2LDcgKzEwMzgsNyBAQAogCiAJLyogc2F2ZSBwb2ludGVyIHRvIGptcCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCiAJcmlzYy0+am1wID0gcnA7Ci0JQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZiAoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKKwlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mKCpyaXNjLT5jcHUpID4gcmlzYy0+c2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDgsNyArMTA2MCw4IEBACiAJaW5zdHJ1Y3Rpb25zICA9IDEgKyAoYnBsICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXM7CiAJaW5zdHJ1Y3Rpb25zICs9IDE7CiAKLQlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSxyaXNjLGluc3RydWN0aW9ucyoxMikpIDwgMCkKKwlyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyoxMik7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KQEAgLTEwNTcsNyArMTA3MCw3IEBACiAKIAkvKiBzYXZlIHBvaW50ZXIgdG8gam1wIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KIAlyaXNjLT5qbXAgPSBycDsKLQlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mICgqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2Nyw3ICsxMDgwLDggQEAKIAlfX2xlMzIgKnJwOwogCWludCByYzsKIAotCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCA0KjE2KSkgPCAwKQorCXJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgNCoxNik7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KQEAgLTExNjEsMjIgKzExNzUsMjMgQEAKIAogCS8qIHNldHVwIGZpZm8gKyBmb3JtYXQgKi8KIAljeDIzODg1X3NyYW1fY2hhbm5lbF9zZXR1cChkZXYsCi0JCQkJICAgJmRldi0+c3JhbV9jaGFubmVsc1sgcG9ydC0+c3JhbV9jaG5vIF0sCisJCQkJICAgJmRldi0+c3JhbV9jaGFubmVsc1twb3J0LT5zcmFtX2Nobm9dLAogCQkJCSAgIHBvcnQtPnRzX3BhY2tldF9zaXplLCBidWYtPnJpc2MuZG1hKTsKLQlpZihkZWJ1ZyA+IDUpIHsKLQkJY3gyMzg4NV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsICZkZXYtPnNyYW1fY2hhbm5lbHNbIHBvcnQtPnNyYW1fY2hubyBdICk7CisJaWYgKGRlYnVnID4gNSkgeworCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwKKwkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbcG9ydC0+c3JhbV9jaG5vXSk7CiAJCWN4MjM4ODVfcmlzY19kaXNhc20ocG9ydCwgJmJ1Zi0+cmlzYyk7CiAJfQogCiAJLyogd3JpdGUgVFMgbGVuZ3RoIHRvIGNoaXAgKi8KIAljeF93cml0ZShwb3J0LT5yZWdfbG5ndGgsIGJ1Zi0+dmIud2lkdGgpOwogCi0JaWYgKCAoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YiAmIENYMjM4ODVfTVBFR19EVkIpKSAmJgotCQkoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YyAmIENYMjM4ODVfTVBFR19EVkIpKSApIHsKLQkJcHJpbnRrKCAiJXMoKSBGYWlsZWQuIFVuc3VwcG9ydGVkIHZhbHVlIGluIC5wb3J0Yi9jICgweCUwOHgpLygweCUwOHgpXG4iLAorCWlmICgoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YiAmIENYMjM4ODVfTVBFR19EVkIpKSAmJgorCQkoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YyAmIENYMjM4ODVfTVBFR19EVkIpKSkgeworCQlwcmludGsoIiVzKCkgVW5zdXBwb3J0ZWQgLnBvcnRiL2MgKDB4JTA4eCkvKDB4JTA4eClcbiIsCiAJCQlfX2Z1bmNfXywKIAkJCWN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiLAotCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGMgKTsKKwkJCWN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTg2LDcgKzEyMDEsNyBAQAogCXVkZWxheSgxMDApOwogCiAJLyogSWYgdGhlIHBvcnQgc3VwcG9ydHMgU1JDIFNFTEVDVCwgY29uZmlndXJlIGl0ICovCi0JaWYocG9ydC0+cmVnX3NyY19zZWwpCisJaWYgKHBvcnQtPnJlZ19zcmNfc2VsKQogCQljeF93cml0ZShwb3J0LT5yZWdfc3JjX3NlbCwgcG9ydC0+c3JjX3NlbF92YWwpOwogCiAJY3hfd3JpdGUocG9ydC0+cmVnX2h3X3NvcF9jdHJsLCBwb3J0LT5od19zb3BfY3RybF92YWwpOwpAQCAtMTE5NSw3ICsxMjEwLDcgQEAKIAljeF93cml0ZShwb3J0LT5yZWdfZ2VuX2N0cmwsIHBvcnQtPmdlbl9jdHJsX3ZhbCk7CiAJdWRlbGF5KDEwMCk7CiAKLQkvLyBOT1RFOiB0aGlzIGlzIDIgKHJlc2VydmVkKSBmb3IgcG9ydGIsIGRvZXMgaXQgbWF0dGVyPworCS8qIE5PVEU6IHRoaXMgaXMgMiAocmVzZXJ2ZWQpIGZvciBwb3J0YiwgZG9lcyBpdCBtYXR0ZXI/ICovCiAJLyogcmVzZXQgY291bnRlciB0byB6ZXJvICovCiAJY3hfd3JpdGUocG9ydC0+cmVnX2dwY250X2N0bCwgMyk7CiAJcS0+Y291bnQgPSAxOwpAQCAtMTIyOSwxMSArMTI0NCwxMSBAQAogCQljeF93cml0ZShBTFRfUElOX09VVF9TRUwsIDB4MTAxMDAwNDUpOwogCX0KIAotCXN3aXRjaChkZXYtPmJyaWRnZSkgeworCXN3aXRjaCAoZGV2LT5icmlkZ2UpIHsKIAljYXNlIENYMjM4ODVfQlJJREdFXzg4NToKIAljYXNlIENYMjM4ODVfQlJJREdFXzg4NzoKIAkJLyogZW5hYmxlIGlycXMgKi8KLQkJZHByaW50aygxLCAiJXMoKSBlbmFibGluZyBUUyBpbnQncyBhbmQgRE1BXG4iLCBfX2Z1bmNfXyApOworCQlkcHJpbnRrKDEsICIlcygpIGVuYWJsaW5nIFRTIGludCdzIGFuZCBETUFcbiIsIF9fZnVuY19fKTsKIAkJY3hfc2V0KHBvcnQtPnJlZ190c19pbnRfbXNrLCAgcG9ydC0+dHNfaW50X21za192YWwpOwogCQljeF9zZXQocG9ydC0+cmVnX2RtYV9jdGwsIHBvcnQtPmRtYV9jdGxfdmFsKTsKIAkJY3hfc2V0KFBDSV9JTlRfTVNLLCBkZXYtPnBjaV9pcnFtYXNrIHwgcG9ydC0+cGNpX2lycW1hc2spOwpAQCAtMTI5Miw4ICsxMzA3LDcgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKmJ1ZjsKIAogCWRwcmludGsoNSwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKLQl7CisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKIAkJc3RydWN0IGN4MjM4ODVfYnVmZmVyICpwcmV2OwogCQlwcmV2ID0gTlVMTDsKIApAQCAtMTMxMSw3ICsxMzI1LDcgQEAKIAkJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwogCQkJCWJ1Zi0+Y291bnQgICAgPSBxLT5jb3VudCsrOwogCQkJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7Ci0JCQkJZHByaW50ayg1LCAiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gZmlyc3QgYWN0aXZlXG4iLAorCQkJCWRwcmludGsoNSwgIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIGYvYWN0aXZlXG4iLAogCQkJCQlidWYsIGJ1Zi0+dmIuaSk7CiAKIAkJCX0gZWxzZSBpZiAocHJldi0+dmIud2lkdGggID09IGJ1Zi0+dmIud2lkdGggICYmCkBAIC0xMzIyLDggKzEzMzYsOSBAQAogCQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CiAJCQkJYnVmLT5jb3VudCAgICA9IHEtPmNvdW50Kys7CiAJCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKLQkJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOyAvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJCWRwcmludGsoNSwiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gbW92ZSB0byBhY3RpdmVcbiIsCisJCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJCWRwcmludGsoNSwgIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIG0vYWN0aXZlXG4iLAogCQkJCQlidWYsIGJ1Zi0+dmIuaSk7CiAJCQl9IGVsc2UgewogCQkJCXJldHVybiAwOwpAQCAtMTM2Miw3ICsxMzc3LDggQEAKIAkJYnVmLT52Yi5zaXplICAgPSBzaXplOwogCQlidWYtPnZiLmZpZWxkICA9IGZpZWxkIC8qVjRMMl9GSUVMRF9UT1AqLzsKIAotCQlpZiAoMCAhPSAocmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgJmJ1Zi0+dmIsIE5VTEwpKSkKKwkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgJmJ1Zi0+dmIsIE5VTEwpOworCQlpZiAoMCAhPSByYykKIAkJCWdvdG8gZmFpbDsKIAkJY3gyMzg4NV9yaXNjX2RhdGFidWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCiAJCQkJCXZpZGVvYnVmX3RvX2RtYSgmYnVmLT52YiktPnNnbGlzdCwKQEAgLTEzODgsNyArMTQwNCw3IEBACiAJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAKIAlpZiAobGlzdF9lbXB0eSgmY3g4OHEtPmFjdGl2ZSkpIHsKLQkJZHByaW50ayggMSwgInF1ZXVlIGlzIGVtcHR5IC0gZmlyc3QgYWN0aXZlXG4iICk7CisJCWRwcmludGsoMSwgInF1ZXVlIGlzIGVtcHR5IC0gZmlyc3QgYWN0aXZlXG4iKTsKIAkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJmN4ODhxLT5hY3RpdmUpOwogCQljeDIzODg1X3N0YXJ0X2RtYShwb3J0LCBjeDg4cSwgYnVmKTsKIAkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKQEAgLTEzOTcsNyArMTQxMyw3IEBACiAJCWRwcmludGsoMSwgIlslcC8lZF0gJXMgLSBmaXJzdCBhY3RpdmVcbiIsCiAJCQlidWYsIGJ1Zi0+dmIuaSwgX19mdW5jX18pOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoIDEsICJxdWV1ZSBpcyBub3QgZW1wdHkgLSBhcHBlbmQgdG8gYWN0aXZlXG4iICk7CisJCWRwcmludGsoMSwgInF1ZXVlIGlzIG5vdCBlbXB0eSAtIGFwcGVuZCB0byBhY3RpdmVcbiIpOwogCQlwcmV2ID0gbGlzdF9lbnRyeShjeDg4cS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDIzODg1X2J1ZmZlciwKIAkJCQkgIHZiLnF1ZXVlKTsKIAkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJmN4ODhxLT5hY3RpdmUpOwpAQCAtMTQwNSw3ICsxNDIxLDcgQEAKIAkJYnVmLT5jb3VudCAgICA9IGN4ODhxLT5jb3VudCsrOwogCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwogCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOyAvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQlkcHJpbnRrKCAxLCAiWyVwLyVkXSAlcyAtIGFwcGVuZCB0byBhY3RpdmVcbiIsCisJCWRwcmludGsoMSwgIlslcC8lZF0gJXMgLSBhcHBlbmQgdG8gYWN0aXZlXG4iLAogCQkJIGJ1ZiwgYnVmLT52Yi5pLCBfX2Z1bmNfXyk7CiAJfQogfQpAQCAtMTQzMSw3ICsxNDQ3LDcgQEAKIAkJCWJ1ZiwgYnVmLT52Yi5pLCByZWFzb24sICh1bnNpZ25lZCBsb25nKWJ1Zi0+cmlzYy5kbWEpOwogCX0KIAlpZiAocmVzdGFydCkgewotCQlkcHJpbnRrKDEsICJyZXN0YXJ0aW5nIHF1ZXVlXG4iICk7CisJCWRwcmludGsoMSwgInJlc3RhcnRpbmcgcXVldWVcbiIpOwogCQljeDIzODg1X3Jlc3RhcnRfcXVldWUocG9ydCwgcSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnNsb2NrLCBmbGFncyk7CkBAIC0xNDUzLDEwICsxNDY5LDExIEBACiAJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqKWRhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CiAKLQlkcHJpbnRrKDEsICIlcygpXG4iLF9fZnVuY19fKTsKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGVidWcgPiA1KQotCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1sgcG9ydC0+c3JhbV9jaG5vIF0pOworCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwKKwkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbcG9ydC0+c3JhbV9jaG5vXSk7CiAKIAljeDIzODg1X3N0b3BfZG1hKHBvcnQpOwogCWRvX2NhbmNlbF9idWZmZXJzKHBvcnQsICJ0aW1lb3V0IiwgMSk7CkBAIC0xNTMyLDE2ICsxNTQ5LDIzIEBACiAJaWYgKChzdGF0dXMgJiBWSURfQkNfTVNLX09QQ19FUlIpIHx8CiAJCShzdGF0dXMgJiBWSURfQkNfTVNLX0JBRF9QS1QpIHx8CiAJCShzdGF0dXMgJiBWSURfQkNfTVNLX1NZTkMpIHx8Ci0JCShzdGF0dXMgJiBWSURfQkNfTVNLX09GKSkKLQl7CisJCShzdGF0dXMgJiBWSURfQkNfTVNLX09GKSkgeworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX09QQ19FUlIpCi0JCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfT1BDX0VSUiAweCUwOHgpXG4iLCBWSURfQkNfTVNLX09QQ19FUlIpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09QQ19FUlIgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX09QQ19FUlIpOworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX0JBRF9QS1QpCi0JCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfQkFEX1BLVCAweCUwOHgpXG4iLCBWSURfQkNfTVNLX0JBRF9QS1QpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX0JBRF9QS1QgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX0JBRF9QS1QpOworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX1NZTkMpCi0JCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfU1lOQyAgICAweCUwOHgpXG4iLCBWSURfQkNfTVNLX1NZTkMpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX1NZTkMgICAgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX1NZTkMpOworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX09GKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09GICAgICAgMHglMDh4KVxuIiwgVklEX0JDX01TS19PRik7CisJCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfT0YgICAgICAweCUwOHgpXG4iLAorCQkJCVZJRF9CQ19NU0tfT0YpOwogCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1wZWcgcmlzYyBvcCBjb2RlIGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCkBAIC0xNTk1LDcgKzE2MTksNyBAQAogCXRzMl9zdGF0dXMgPSBjeF9yZWFkKFZJRF9DX0lOVF9TVEFUKTsKIAl0czJfbWFzayA9IGN4X3JlYWQoVklEX0NfSU5UX01TSyk7CiAKLQlpZiAoIChwY2lfc3RhdHVzID09IDApICYmICh0czJfc3RhdHVzID09IDApICYmICh0czFfc3RhdHVzID09IDApICkKKwlpZiAoKHBjaV9zdGF0dXMgPT0gMCkgJiYgKHRzMl9zdGF0dXMgPT0gMCkgJiYgKHRzMV9zdGF0dXMgPT0gMCkpCiAJCWdvdG8gb3V0OwogCiAJdmlkYV9jb3VudCA9IGN4X3JlYWQoVklEX0FfR1BDTlQpOwpAQCAtMTYxMCwzOCArMTYzNCw1NiBAQAogCWRwcmludGsoNywgInRzMl9zdGF0dXM6IDB4JTA4eCAgdHMyX21hc2s6IDB4JTA4eCBjb3VudDogMHgleFxuIiwKIAkJdHMyX3N0YXR1cywgdHMyX21hc2ssIHRzMl9jb3VudCk7CiAKLQlpZiAoIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfV1IpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfUkQpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfV1IpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVBCX0RNQSkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQykgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQikgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQSkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpICkKLQl7CisJaWYgKChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19XUikgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1JEKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfV1IpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BUEJfRE1BKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0MpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQikgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9BKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0lOVCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpKSB7CiAKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfUkQpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19SRCAgIDB4JTA4eClcbiIsIFBDSV9NU0tfUklTQ19SRCk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19SRCAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19SSVNDX1JEKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19XUikKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19SSVNDX1dSICAgMHglMDh4KVxuIiwgUENJX01TS19SSVNDX1dSKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19SSVNDX1dSICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1JJU0NfV1IpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9SRCkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BTF9SRCAgICAgMHglMDh4KVxuIiwgUENJX01TS19BTF9SRCk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQUxfUkQgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BTF9SRCk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1dSKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FMX1dSICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FMX1dSKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BTF9XUiAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FMX1dSKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVBCX0RNQSkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BUEJfRE1BICAgMHglMDh4KVxuIiwgUENJX01TS19BUEJfRE1BKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BUEJfRE1BICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FQQl9ETUEpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQykKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQyAgICAgMHglMDh4KVxuIiwgUENJX01TS19WSURfQyk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0MgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19WSURfQyk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9CKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9CICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1ZJRF9CKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQiAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1ZJRF9CKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0EgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfVklEX0EpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9BICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfVklEX0EpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9JTlQgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FVRF9JTlQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9JTlQgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQVVEX0lOVCk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0VYVCAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQVVEX0VYVCk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0VYVCAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BVURfRVhUKTsKIAogCX0KIApAQCAtMTc1MywxMyArMTc5NSwxMyBAQAogCQkuZGV2aWNlICAgICAgID0gMHg4ODUyLAogCQkuc3VidmVuZG9yICAgID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSAgICA9IFBDSV9BTllfSUQsCi0JfSx7CisJfSwgewogCQkvKiBDWDIzODg3IFJldiAyICovCiAJCS52ZW5kb3IgICAgICAgPSAweDE0ZjEsCiAJCS5kZXZpY2UgICAgICAgPSAweDg4ODAsCiAJCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAogCQkuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKLQl9LHsKKwl9LCB7CiAJCS8qIC0tLSBlbmQgb2YgbGlzdCAtLS0gKi8KIAl9CiB9OwpAQCAtMTc5Nyw5ICsxODM5LDMgQEAKIG1vZHVsZV9leGl0KGN4MjM4ODVfZmluaSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwppbmRleCAyNGJkMTgzLi5lMWFhYzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwpAQCAtNzgsMTkgKzc4LDE5IEBACiAJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IHEtPnByaXZfZGF0YTsKLQlyZXR1cm4gY3gyMzg4NV9idWZfcHJlcGFyZShxLCBwb3J0LCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyKil2YiwgZmllbGQpOworCXJldHVybiBjeDIzODg1X2J1Zl9wcmVwYXJlKHEsIHBvcnQsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKil2YiwgZmllbGQpOwogfQogCiBzdGF0aWMgdm9pZCBkdmJfYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7CiAJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gcS0+cHJpdl9kYXRhOwotCWN4MjM4ODVfYnVmX3F1ZXVlKHBvcnQsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIqKXZiKTsKKwljeDIzODg1X2J1Zl9xdWV1ZShwb3J0LCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyICopdmIpOwogfQogCiBzdGF0aWMgdm9pZCBkdmJfYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAogCQkJICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewotCWN4MjM4ODVfZnJlZV9idWZmZXIocSwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciopdmIpOworCWN4MjM4ODVfZnJlZV9idWZmZXIocSwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciAqKXZiKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgZHZiX3FvcHMgPSB7CkBAIC0zMTIsMTkgKzMxMiwyNSBAQAogewogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2kyYyAqaTJjX2J1cyA9IE5VTEw7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJnBvcnQtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCi0JcG9ydC0+ZHZiLm5hbWUgPSBkZXYtPm5hbWU7CisJZmUwLT5kdmIubmFtZSA9IGRldi0+bmFtZTsKIAogCS8qIGluaXQgZnJvbnRlbmQgKi8KIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmaGF1cHBhdWdlX2dlbmVyaWNfY29uZmlnLAogCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAogCQkJCSAgICZoYXVwcGF1Z2VfZ2VuZXJpY190dW5lcmNvbmZpZywgMCk7CiAJCX0KQEAgLTMzMywyNyArMzM5LDI3IEBACiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwogCQlzd2l0Y2ggKGFsdF90dW5lcikgewogCQljYXNlIDE6Ci0JCQlwb3J0LT5kdmIuZnJvbnRlbmQgPQorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPQogCQkJCWR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCSAgICZoYXVwcGF1Z2VfZXpxYW1fY29uZmlnLAogCQkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXApOwotCQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJICAgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwgMHg0MiwKIAkJCQkJICAgJnRkYTgyOXhfbm9fcHJvYmUpOwotCQkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkgICAweDYwLCAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAogCQkJCQkgICAmaGF1cHBhdWdlX3RkYTE4MjcxX2NvbmZpZyk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAwOgogCQlkZWZhdWx0OgotCQkJcG9ydC0+ZHZiLmZyb250ZW5kID0KKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0KIAkJCQlkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkgICAmaGF1cHBhdWdlX2dlbmVyaWNfY29uZmlnLAogCQkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXApOwotCQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQotCQkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCisJCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAogCQkJCQkgICAmaGF1cHBhdWdlX2dlbmVyaWNfdHVuZXJjb25maWcsIDApOwogCQkJYnJlYWs7CkBAIC0zNjEsNDIgKzM2Nyw0MiBAQAogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBscDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZoYXVwcGF1Z2VfaHZyMTgwMGxwX2NvbmZpZywKIAkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkgICAmaGF1cHBhdWdlX2dlbmVyaWNfdHVuZXJjb25maWcsIDApOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfRVhQOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsCiAJCQkJCQkmZnVzaW9uaGR0dl81X2V4cHJlc3MsCiAJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfTEdfVERWU19IMDZYRik7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMV07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZoYXVwcGF1Z2VfaHZyMTUwMHFfY29uZmlnLAogCQkJCQkJJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKLQkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAogCQkJCSAgICZoYXVwcGF1Z2VfaHZyMTUwMHFfdHVuZXJjb25maWcpOwogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmaGF1cHBhdWdlX2h2cjE1MDBfY29uZmlnLAogCQkJCQkJJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CiAJCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZyBjZmcgPSB7CiAJCQkJLmkyY19hZGFwICA9ICZpMmNfYnVzLT5pMmNfYWRhcCwKQEAgLTQwOSw3ICs0MTUsNyBAQAogCQkJfTsKIAogCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsCi0JCQkJCXBvcnQtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQpAQCAtNDE3LDI0ICs0MjMsMjQgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNzAwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0OF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0OF9hdHRhY2gsCiAJCQkmaGF1cHBhdWdlX2h2cjEyMDBfY29uZmlnLAogCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLCAweDQyLAogCQkJCSZ0ZGE4Mjl4X25vX3Byb2JlKTsKLQkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJMHg2MCwgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKIAkJCQkmaGF1cHBhdWdlX2h2cjEyMDBfdHVuZXJfY29uZmlnKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE0MDA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwKIAkJCSZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCTB4MTIsICZoYXVwcGF1Z2VfaHZyMTQwMF9kaWI3MDAwX2NvbmZpZyk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CiAJCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZyBjZmcgPSB7CiAJCQkJLmkyY19hZGFwICA9ICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCkBAIC00NDQsMTIgKzQ1MCwxMyBAQAogCQkJCS5mbmFtZSAgID0gWEMzMDI4TF9ERUZBVUxUX0ZJUk1XQVJFLAogCQkJCS5tYXhfbGVuID0gNjQsCiAJCQkJLmRlbW9kICAgPSA1MDAwLAotCQkJCS8qIFRoaXMgaXMgdHJ1ZSBmb3IgYWxsIGRlbW9kcyB3aXRoIHYzNiBmaXJtd2FyZT8gKi8KKwkJCQkvKiBUaGlzIGlzIHRydWUgZm9yIGFsbCBkZW1vZHMgd2l0aAorCQkJCQl2MzYgZmlybXdhcmU/ICovCiAJCQkJLnR5cGUgICAgPSBYQzIwMjhfRDI2MzMsCiAJCQl9OwogCiAJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwKLQkJCQkJcG9ydC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CkBAIC00NTcsMjUgKzQ2NCwyNSBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzW3BvcnQtPm5yIC0gMV07CiAKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmR2aWNvX3M1aDE0MDlfY29uZmlnLAogCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCA9PSBOVUxMKQotCQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kID09IE5VTEwpCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCiAJCQkJCQkJJmR2aWNvX3M1aDE0MTFfY29uZmlnLAogCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKLQkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAogCQkJCSAgICZkdmljb194YzUwMDBfdHVuZXJjb25maWcpOwogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUDogewogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1twb3J0LT5uciAtIDFdOwogCi0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X3hjMzAyOCwKIAkJCQkJICAgICAgICZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAgICAgICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnCSAgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmaTJjX2J1cy0+aTJjX2FkYXAsCkBAIC00ODcsNyArNDk0LDcgQEAKIAkJCQkuZGVtb2QgICAgICAgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NiwKIAkJCX07CiAKLQkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwpAQCAtNDk3LDEwICs1MDQsMTAgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKIAotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkmZHZpY29fZnVzaW9uaGR0dl94YzMwMjgsCiAJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgICAgICAqZmU7CiAJCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZwkgIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKQEAgLTUxMiw3MyArNTE5LDEwOCBAQAogCQkJCS5kZW1vZCAgICAgICA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2LAogCQkJfTsKIAotCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkmY2ZnKTsKIAkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkICIKKwkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KLQlpZiAoTlVMTCA9PSBwb3J0LT5kdmIuZnJvbnRlbmQpIHsKLQkJcHJpbnRrKCIlczogZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCWlmIChOVUxMID09IGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKwkJCWRldi0+bmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CiAJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCi0JcG9ydC0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2s7CisJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCiAJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKGkyY19idXMsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAotCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkpCi0JCXBvcnQtPmR2Yi5mcm9udGVuZC0+b3BzLmFuYWxvZ19vcHMuc3RhbmRieShwb3J0LT5kdmIuZnJvbnRlbmQpOworCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmFuYWxvZ19vcHMuc3RhbmRieSkKKwkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkoZmUwLT5kdmIuZnJvbnRlbmQpOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyAqLwotCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIoJnBvcnQtPmR2YiwgVEhJU19NT0RVTEUsIHBvcnQsCi0JCQkJICAgICAmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9ucik7CisJcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJnBvcnQtPmZyb250ZW5kcywgVEhJU19NT0RVTEUsIHBvcnQsCisJCSZkZXYtPnBjaS0+ZGV2LCBhZGFwdGVyX25yLCAwKTsKKwogfQogCiBpbnQgY3gyMzg4NV9kdmJfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQogeworCisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwotCWludCBlcnI7CisJaW50IGVyciwgaTsKIAotCWRwcmludGsoMSwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JZHByaW50aygxLCAiIC0+YmVpbmcgcHJvYmVkIGJ5IENhcmQ9JWQgTmFtZT0lcywgUENJICUwMng6JTAyeFxuIiwKLQkJZGV2LT5ib2FyZCwKLQkJZGV2LT5uYW1lLAotCQlkZXYtPnBjaV9idXMsCi0JCWRldi0+cGNpX3Nsb3QpOworCS8qIEhlcmUgd2UgbmVlZCB0byBhbGxvY2F0ZSB0aGUgY29ycmVjdCBudW1iZXIgb2YgZnJvbnRlbmRzLAorCSAqIGFzIHJlZmxlY3RlZCBpbiB0aGUgY2FyZHMgc3RydWN0LiBUaGUgcmVhbGl0eSBpcyB0aGF0IGN1cnJyZW50bHkKKwkgKiBubyBjeDIzODg1IGJvYXJkcyBzdXBwb3J0IHRoaXMgLSB5ZXQuIEJ1dCwgaWYgd2UgZG9uJ3QgbW9kaWZ5IHRoaXMKKwkgKiBjb2RlIHRoZW4gdGhlIHNlY29uZCBmcm9udGVuZCB3b3VsZCBuZXZlciBiZSBhbGxvY2F0ZWQgKGxhdGVyKQorCSAqIGFuZCBmYWlsIHdpdGggZXJyb3IgYmVmb3JlIHRoZSBhdHRhY2ggaW4gZHZiX3JlZ2lzdGVyKCkuCisJICogV2l0aG91dCB0aGVzZSBjaGFuZ2VzIHdlIHJpc2sgYW4gT09QUyBsYXRlci4gVGhlIGNoYW5nZXMgaGVyZQorCSAqIGFyZSBmb3Igc2FmZXR5LCBhbmQgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGZvdW5kYXRpb24gZm9yIHRoZQorCSAqIGZ1dHVyZSBhZGRpdGlvbiBvZiBhbnkgbXVsdGktZnJvbnRlbmQgY3gyMzg4NSBiYXNlZCBib2FyZHMuCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBhbGxvY2F0aW5nICVkIGZyb250ZW5kKHMpXG4iLCBfX2Z1bmNfXywKKwkJcG9ydC0+bnVtX2Zyb250ZW5kcyk7CiAKLQllcnIgPSAtRU5PREVWOworCWZvciAoaSA9IDE7IGkgPD0gcG9ydC0+bnVtX2Zyb250ZW5kczsgaSsrKSB7CisJCWlmICh2aWRlb2J1Zl9kdmJfYWxsb2NfZnJvbnRlbmQoCisJCQkmcG9ydC0+ZnJvbnRlbmRzLCBpKSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGFsbG9jXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCi0JLyogZHZiIHN0dWZmICovCi0JcHJpbnRrKCIlczogY3gyMzg4NSBiYXNlZCBkdmIgY2FyZFxuIiwgZGV2LT5uYW1lKTsKLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZwb3J0LT5kdmIuZHZicSwgJmR2Yl9xb3BzLCAmZGV2LT5wY2ktPmRldiwgJnBvcnQtPnNsb2NrLAorCQlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZwb3J0LT5mcm9udGVuZHMsIGkpOworCQlpZiAoIWZlMCkKKwkJCWVyciA9IC1FSU5WQUw7CisKKwkJZHByaW50aygxLCAiJXNcbiIsIF9fZnVuY19fKTsKKwkJZHByaW50aygxLCAiIC0+cHJvYmVkIGJ5IENhcmQ9JWQgTmFtZT0lcywgUENJICUwMng6JTAyeFxuIiwKKwkJCWRldi0+Ym9hcmQsCisJCQlkZXYtPm5hbWUsCisJCQlkZXYtPnBjaV9idXMsCisJCQlkZXYtPnBjaV9zbG90KTsKKworCQllcnIgPSAtRU5PREVWOworCisJCS8qIGR2YiBzdHVmZiAqLworCQkvKiBXZSBoYXZlIHRvIGluaXQgdGhlIHF1ZXVlIGZvciBlYWNoIGZyb250ZW5kIG9uIGEgcG9ydC4gKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGN4MjM4ODUgYmFzZWQgZHZiIGNhcmRcbiIsIGRldi0+bmFtZSk7CisJCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZlMC0+ZHZiLmR2YnEsICZkdmJfcW9wcywKKwkJCSAgICAmZGV2LT5wY2ktPmRldiwgJnBvcnQtPnNsb2NrLAogCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwgVjRMMl9GSUVMRF9UT1AsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBjeDIzODg1X2J1ZmZlciksIHBvcnQpOworCX0KIAllcnIgPSBkdmJfcmVnaXN0ZXIocG9ydCk7CiAJaWYgKGVyciAhPSAwKQotCQlwcmludGsoIiVzKCkgZHZiX3JlZ2lzdGVyIGZhaWxlZCBlcnIgPSAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBkdmJfcmVnaXN0ZXIgZmFpbGVkIGVyciA9ICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CiAKIAlyZXR1cm4gZXJyOwogfQogCiBpbnQgY3gyMzg4NV9kdmJfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpCiB7Ci0JLyogZHZiICovCi0JaWYocG9ydC0+ZHZiLmZyb250ZW5kKQotCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcigmcG9ydC0+ZHZiKTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBGSVhNRTogaW4gYW4gZXJyb3IgY29uZGl0aW9uIHdoZXJlIHRoZSB3ZSBoYXZlCisJICogYW4gZXhwZWN0ZWQgbnVtYmVyIG9mIGZyb250ZW5kcyAoYXR0YWNoIHByb2JsZW0pCisJICogdGhlbiB0aGlzIG1pZ2h0IG5vdCBjbGVhbiB1cCBjb3JyZWN0bHksIGlmIDEKKwkgKiBpcyBpbnZhbGlkLgorCSAqIFRoaXMgY29tbWVudCBvbmx5IGFwcGxpZXMgdG8gZnV0dXJlIGJvYXJkcyBJRiB0aGV5CisJICogaW1wbGVtZW50IE1GRSBzdXBwb3J0LgorCSAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJnBvcnQtPmZyb250ZW5kcywgMSk7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJnBvcnQtPmZyb250ZW5kcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwppbmRleCBmOThlNDc2Li5iYjdmNzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCQlwcmludGsoIiA+XG4iKTsKIAl9CiAKLQlmb3IgKGNudCA9IDE7IGNudCA8IG1zZy0+bGVuOyBjbnQrKyApIHsKKwlmb3IgKGNudCA9IDE7IGNudCA8IG1zZy0+bGVuOyBjbnQrKykgewogCQkvKiBmb2xsb3dpbmcgYnl0ZXMgKi8KIAkJd2RhdGEgPSBtc2ctPmJ1ZltjbnRdOwogCQljdHJsID0gYnVzLT5pMmNfcGVyaW9kIHwgKDEgPDwgMTIpIHwgKDEgPDwgMik7CkBAIC0xNTEsOSArMTUxLDkgQEAKIAkJaWYgKHJldHZhbCA9PSAwKQogCQkJZ290byBlaW87CiAJCWlmIChpMmNfZGVidWcpIHsKLQkJCXByaW50aygiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKKwkJCWRwcmludGsoMSwgIiAlMDJ4IiwgbXNnLT5idWZbY250XSk7CiAJCQlpZiAoIShjdHJsICYgSTJDX05PU1RPUCkpCi0JCQkJcHJpbnRrKCIgPlxuIik7CisJCQkJZHByaW50aygxLCAiID5cbiIpOwogCQl9CiAJfQogCXJldHVybiBtc2ctPmxlbjsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHZhbCA9IC1FSU87CiAgZXJyOgogCWlmIChpMmNfZGVidWcpCi0JCXByaW50aygiIEVSUjogJWRcbiIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiAiIEVSUjogJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTk0LDEyICsxOTQsMTIgQEAKIAogCWlmIChpMmNfZGVidWcpIHsKIAkJaWYgKGpvaW5lZCkKLQkJCXByaW50aygiIFIiKTsKKwkJCWRwcmludGsoMSwgIiBSIik7CiAJCWVsc2UKLQkJCXByaW50aygiIDxSICUwMngiLCAobXNnLT5hZGRyIDw8IDEpICsgMSk7CisJCQlkcHJpbnRrKDEsICIgPFIgJTAyeCIsIChtc2ctPmFkZHIgPDwgMSkgKyAxKTsKIAl9CiAKLQlmb3IoY250ID0gMDsgY250IDwgbXNnLT5sZW47IGNudCsrKSB7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBtc2ctPmxlbjsgY250KyspIHsKIAogCQljdHJsID0gYnVzLT5pMmNfcGVyaW9kIHwgKDEgPDwgMTIpIHwgKDEgPDwgMikgfCAxOwogCkBAIC0yMTYsOSArMjE2LDkgQEAKIAkJCWdvdG8gZWlvOwogCQltc2ctPmJ1ZltjbnRdID0gY3hfcmVhZChidXMtPnJlZ19yZGF0YSkgJiAweGZmOwogCQlpZiAoaTJjX2RlYnVnKSB7Ci0JCQlwcmludGsoIiAlMDJ4IiwgbXNnLT5idWZbY250XSk7CisJCQlkcHJpbnRrKDEsICIgJTAyeCIsIG1zZy0+YnVmW2NudF0pOwogCQkJaWYgKCEoY3RybCAmIEkyQ19OT1NUT1ApKQotCQkJCXByaW50aygiID5cbiIpOworCQkJCWRwcmludGsoMSwgIiA+XG4iKTsKIAkJfQogCX0KIAlyZXR1cm4gbXNnLT5sZW47CkBAIC0yMjcsNyArMjI3LDcgQEAKIAlyZXR2YWwgPSAtRUlPOwogIGVycjoKIAlpZiAoaTJjX2RlYnVnKQotCQlwcmludGsoIiBFUlI6ICVkXG4iLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgIiBFUlI6ICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTM1MywxNyArMzUzLDE3IEBACiB9OwogCiBzdGF0aWMgY2hhciAqaTJjX2RldnNbMTI4XSA9IHsKLQlbMHgxMCA+PiAxXSAgID0gInRkYTEwMDQ4IiwKLQlbMHgxMiA+PiAxXSAgID0gImRpYjcwMDBwYyIsCi0JWyAweDFjID4+IDEgXSA9ICJsZ2R0MzMwMyIsCi0JWyAweDg2ID4+IDEgXSA9ICJ0ZGE5ODg3IiwKLQlbIDB4MzIgPj4gMSBdID0gImN4MjQyMjciLAotCVsgMHg4OCA+PiAxIF0gPSAiY3gyNTgzNyIsCi0JWyAweDg0ID4+IDEgXSA9ICJ0ZGE4Mjk1IiwKLQlbIDB4YTAgPj4gMSBdID0gImVlcHJvbSIsCi0JWyAweGMwID4+IDEgXSA9ICJ0dW5lci9tdDIxMzEvdGRhODI3NSIsCisJWzB4MTAgPj4gMV0gPSAidGRhMTAwNDgiLAorCVsweDEyID4+IDFdID0gImRpYjcwMDBwYyIsCisJWzB4MWMgPj4gMV0gPSAibGdkdDMzMDMiLAorCVsweDg2ID4+IDFdID0gInRkYTk4ODciLAorCVsweDMyID4+IDFdID0gImN4MjQyMjciLAorCVsweDg4ID4+IDFdID0gImN4MjU4MzciLAorCVsweDg0ID4+IDFdID0gInRkYTgyOTUiLAorCVsweGEwID4+IDFdID0gImVlcHJvbSIsCisJWzB4YzAgPj4gMV0gPSAidHVuZXIvbXQyMTMxL3RkYTgyNzUiLAogCVsweGMyID4+IDFdID0gInR1bmVyL210MjEzMS90ZGE4Mjc1L3hjNTAwMC94YzMwMjgiLAotCVsweGM4ID4+IDFdICAgPSAidHVuZXIveGMzMDI4TCIsCisJWzB4YzggPj4gMV0gPSAidHVuZXIveGMzMDI4TCIsCiB9OwogCiBzdGF0aWMgdm9pZCBkb19pMmNfc2NhbihjaGFyICpuYW1lLCBzdHJ1Y3QgaTJjX2NsaWVudCAqYykKQEAgLTM3Niw3ICszNzYsNyBAQAogCQlyYyA9IGkyY19tYXN0ZXJfcmVjdihjLCAmYnVmLCAwKTsKIAkJaWYgKHJjIDwgMCkKIAkJCWNvbnRpbnVlOwotCQlwcmludGsoIiVzOiBpMmMgc2NhbjogZm91bmQgZGV2aWNlIEAgMHgleCAgWyVzXVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGkyYyBzY2FuOiBmb3VuZCBkZXZpY2UgQCAweCV4ICBbJXNdXG4iLAogCQkgICAgICAgbmFtZSwgaSA8PCAxLCBpMmNfZGV2c1tpXSA/IGkyY19kZXZzW2ldIDogIj8/PyIpOwogCX0KIH0KQEAgLTQwOCwxMSArNDA4LDEyIEBACiAJYnVzLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmYnVzLT5pMmNfYWRhcDsKIAogCWlmICgwID09IGJ1cy0+aTJjX3JjKSB7Ci0JCXByaW50aygiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXJlZFxuIiwgZGV2LT5uYW1lLCBidXMtPm5yKTsKKwkJZHByaW50aygxLCAiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXJlZFxuIiwgZGV2LT5uYW1lLCBidXMtPm5yKTsKIAkJaWYgKGkyY19zY2FuKQogCQkJZG9faTJjX3NjYW4oZGV2LT5uYW1lLCAmYnVzLT5pMmNfY2xpZW50KTsKIAl9IGVsc2UKLQkJcHJpbnRrKCIlczogaTJjIGJ1cyAlZCByZWdpc3RlciBGQUlMRURcbiIsIGRldi0+bmFtZSwgYnVzLT5ucik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyIEZBSUxFRFxuIiwKKwkJCWRldi0+bmFtZSwgYnVzLT5ucik7CiAKIAlyZXR1cm4gYnVzLT5pMmNfcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCBmNzVlZDFjLi5jNzQyYTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTI4NSwxMSArMjg1LDEwIEBACiAJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKIAkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKIAl9Ci0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKIAkJZGVsX3RpbWVyKCZxLT50aW1lb3V0KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzK0JVRkZFUl9USU1FT1VUKTsKLQl9CiAJaWYgKGJjICE9IDEpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVkIGJ1ZmZlcnMgaGFuZGxlZCAoc2hvdWxkIGJlIDEpXG4iLAogCQkJX19mdW5jX18sIGJjKTsKQEAgLTM3OSwxMiArMzc4LDEyIEBACiAKIHN0YXRpYyBpbnQgcmVzX2NoZWNrKHN0cnVjdCBjeDIzODg1X2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdCkKIHsKLQlyZXR1cm4gKGZoLT5yZXNvdXJjZXMgJiBiaXQpOworCXJldHVybiBmaC0+cmVzb3VyY2VzICYgYml0OwogfQogCiBzdGF0aWMgaW50IHJlc19sb2NrZWQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBiaXQpCiB7Ci0JcmV0dXJuIChkZXYtPnJlc291cmNlcyAmIGJpdCk7CisJcmV0dXJuIGRldi0+cmVzb3VyY2VzICYgYml0OwogfQogCiBzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IGN4MjM4ODVfZmggKmZoLApAQCAtODg3LDE0ICs4ODYsMTYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogVklERU8gQ1RSTCBJT0NUTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLXN0YXRpYyBpbnQgY3gyMzg4NV9nZXRfY29udHJvbChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQorc3RhdGljIGludCBjeDIzODg1X2dldF9jb250cm9sKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKIHsKIAlkcHJpbnRrKDEsICIlcygpIGNhbGxpbmcgY3gyNTg0MChWSURJT0NfR19DVFJMKVxuIiwgX19mdW5jX18pOwogCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfR19DVFJMLCBjdGwpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjM4ODVfc2V0X2NvbnRyb2woc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3N0YXRpYyBpbnQgY3gyMzg4NV9zZXRfY29udHJvbChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCiB7CiAJZHByaW50aygxLCAiJXMoKSBjYWxsaW5nIGN4MjU4NDAoVklESU9DX1NfQ1RSTCkiCiAJCSIgKGRpc2FibGVkIC0gbm8gYWN0aW9uKVxuIiwgX19mdW5jX18pOwpAQCAtMTA3MywyOSArMTA3NCwyOSBAQAogCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpwKQogewogCXN0cnVjdCBjeDIzODg1X2ZoICpmaCA9IHByaXY7Ci0JcmV0dXJuICh2aWRlb2J1Zl9yZXFidWZzKGdldF9xdWV1ZShmaCksIHApKTsKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcyhnZXRfcXVldWUoZmgpLCBwKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJc3RydWN0IHY0bDJfYnVmZmVyICpwKQogewogCXN0cnVjdCBjeDIzODg1X2ZoICpmaCA9IHByaXY7Ci0JcmV0dXJuICh2aWRlb2J1Zl9xdWVyeWJ1ZihnZXRfcXVldWUoZmgpLCBwKSk7CisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKGdldF9xdWV1ZShmaCksIHApOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCXN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggPSBwcml2OwotCXJldHVybiAodmlkZW9idWZfcWJ1ZihnZXRfcXVldWUoZmgpLCBwKSk7CisJcmV0dXJuIHZpZGVvYnVmX3FidWYoZ2V0X3F1ZXVlKGZoKSwgcCk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCXN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggPSBwcml2OwotCXJldHVybiAodmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwKLQkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpOworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLAorCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC0xNTQyLDcgKzE1NDMsNyBAQAogCQlnb3RvIGZhaWxfdW5yZWc7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzLzA6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW3Y0bDJdXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+dmlkZW9fZGV2LT5taW5vciAmIDB4MWYpOworCSAgICAgICBkZXYtPm5hbWUsIGRldi0+dmlkZW9fZGV2LT5udW0pOwogCS8qIGluaXRpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWN4MjM4ODVfc2V0X3R2bm9ybShkZXYsIGRldi0+dHZub3JtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IGJhNGUwYWEuLjFkNTNmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jZGVmaW5lIENYMjM4ODVfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsMCwxKQorI2RlZmluZSBDWDIzODg1X1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKQogCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIG5yOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIHNyYW1fY2hubzsKIAotCXN0cnVjdCB2aWRlb2J1Zl9kdmIgICAgICAgIGR2YjsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyBmcm9udGVuZHM7CiAKIAkvKiBkbWEgcXVldWVzICovCiAJc3RydWN0IGN4MjM4ODVfZG1hcXVldWUgICAgbXBlZ3E7CkBAIC0yNjIsNiArMjYyLDkgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2VsX3ZhbDsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICB2bGRfbWlzY192YWw7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgaHdfc29wX2N0cmxfdmFsOworCisJLyogQWxsb3cgYSBzaW5nbGUgdHNwb3J0IHRvIGhhdmUgbXVsdGlwbGUgZnJvbnRlbmRzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Zyb250ZW5kczsKIH07CiAKIHN0cnVjdCBjeDIzODg1X2RldiB7CkBAIC0zNjcsMTQgKzM3MCwxNCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBjeF9yZWFkKHJlZykgICAgICAgICAgICAgcmVhZGwoZGV2LT5sbW1pbyArICgocmVnKT4+MikpCi0jZGVmaW5lIGN4X3dyaXRlKHJlZyx2YWx1ZSkgICAgICB3cml0ZWwoKHZhbHVlKSwgZGV2LT5sbW1pbyArICgocmVnKT4+MikpCisjZGVmaW5lIGN4X3dyaXRlKHJlZywgdmFsdWUpICAgICB3cml0ZWwoKHZhbHVlKSwgZGV2LT5sbW1pbyArICgocmVnKT4+MikpCiAKLSNkZWZpbmUgY3hfYW5kb3IocmVnLG1hc2ssdmFsdWUpIFwKKyNkZWZpbmUgY3hfYW5kb3IocmVnLCBtYXNrLCB2YWx1ZSkgXAogICB3cml0ZWwoKHJlYWRsKGRldi0+bG1taW8rKChyZWcpPj4yKSkgJiB+KG1hc2spKSB8XAogICAoKHZhbHVlKSAmIChtYXNrKSksIGRldi0+bG1taW8rKChyZWcpPj4yKSkKIAotI2RlZmluZSBjeF9zZXQocmVnLGJpdCkgICAgICAgICAgY3hfYW5kb3IoKHJlZyksKGJpdCksKGJpdCkpCi0jZGVmaW5lIGN4X2NsZWFyKHJlZyxiaXQpICAgICAgICBjeF9hbmRvcigocmVnKSwoYml0KSwwKQorI2RlZmluZSBjeF9zZXQocmVnLCBiaXQpICAgICAgICAgIGN4X2FuZG9yKChyZWcpLCAoYml0KSwgKGJpdCkpCisjZGVmaW5lIGN4X2NsZWFyKHJlZywgYml0KSAgICAgICAgY3hfYW5kb3IoKHJlZyksIChiaXQpLCAwKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gyMzg4NS1jb3JlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQxMSw3ICs0MTQsOCBAQAogZXh0ZXJuIHN0cnVjdCBjeDIzODg1X3N1YmlkIGN4MjM4ODVfc3ViaWRzW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudDsKIAotZXh0ZXJuIGludCBjeDIzODg1X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKK2V4dGVybiBpbnQgY3gyMzg4NV90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tcG9uZW50LAorCWludCBjb21tYW5kLCBpbnQgYXJnKTsKIGV4dGVybiB2b2lkIGN4MjM4ODVfY2FyZF9saXN0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKIGV4dGVybiBpbnQgIGN4MjM4ODVfaXJfaW5pdChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBjeDIzODg1X2dwaW9fc2V0dXAoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpOwpAQCAtNDc5LDExICs0ODMsMyBAQAogewogCXJldHVybiAobm9ybSAmIChWNEwyX1NURF9NTiAmIH5WNEwyX1NURF9QQUxfTmMpKSA/IDc1NCA6IDkyMjsKIH0KLQotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwppbmRleCBlNzEzNjk3Li4wNzhiZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogcmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZCBbbXBlZ11cbiIsCi0JICAgICAgIGRldi0+Y29yZS0+bmFtZSxkZXYtPm1wZWdfZGV2LT5taW5vciAmIDB4MWYpOworCSAgICAgICBkZXYtPmNvcmUtPm5hbWUsIGRldi0+bXBlZ19kZXYtPm51bSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IDVkYTA0ZTguLjViY2JiNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMTI3MCwyNyArMTI3MCw0MCBAQAogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDBdID0gewotCQkvKiBGSVhNRTogQWRkIGR2YiAmIHJhZGlvIHN1cHBvcnQgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlIzMDAwIFRyaU1vZGUgQW5hbG9nL0RWQi1TL0RWQi1UIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszLAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuYXVkaW9fY2hpcCAgICAgPSBWNEwyX0lERU5UX1dNODc3NSwKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ODRiZiwKKwkJCS8qIDE6IFRWIEF1ZGlvIC8gRk0gTW9ubyAqLworCQkJLmF1ZGlvcm91dGUgPSAxLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4ODRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4ODRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wCT0gMHg4NGJmLAorCQkJLyogNDogRk0gU3RlcmVvICh1bnRlc3RlZCkgKi8KKwkJCS5hdWRpb3JvdXRlID0gOCwKKwkJfSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwkJLm51bV9mcm9udGVuZHMJPSAyLAogCX0sCiAJW0NYODhfQk9BUkRfTk9SV09PRF9NSUNST10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJOb3J3b29kIE1pY3JvIFRWIFR1bmVyIiwKQEAgLTEzNTYsMjMgKzEzNjksMjcgQEAKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wCT0gMHhlZjg4LAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCiAJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0sewogCQkJLnR5cGUJPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4CT0gMSwKIAkJCS5ncGlvMAk9IDB4ZWY4OCwKKwkJCS8qIDI6IExpbmUtSW4gKi8KIAkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfSx7CiAJCQkudHlwZQk9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eAk9IDIsCiAJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiAyOiBMaW5lLUluICovCiAJCQkuYXVkaW9yb3V0ZSA9IDIsCiAJCX19LAotCQkvKiBmaXhtZTogQWRkIHJhZGlvIHN1cHBvcnQgKi8KIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiB8IENYODhfTVBFR19CTEFDS0JJUkQsCiAJCS5yYWRpbyA9IHsKIAkJCS50eXBlICAgPSBDWDg4X1JBRElPLAogCQkJLmdwaW8wCT0gMHhlZjg4LAorCQkJLyogNDogRk0gU3RlcmVvICh1bnRlc3RlZCkgKi8KKwkJCS5hdWRpb3JvdXRlID0gOCwKIAkJfSwKIAl9LAogCVtDWDg4X0JPQVJEX0FEU1RFQ0hfUFRWXzM5MF0gPSB7CkBAIC0xNzE2LDYgKzE3MzMsNyBAQAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5hdWRpb19jaGlwICAgICA9IFY0TDJfSURFTlRfV004Nzc1LAogCQkvKgogCQkgKiBHUElPMCAoV0lOVFYyMDAwKQogCQkgKgpAQCAtMTcyOSw3ICsxNzQ3LDcgQEAKIAkJICogQklUICBWQUxVRSAgIEZVTkNUSU9OIEdQe3h9X0lPCiAJCSAqIDAgICAgMSAgICAgICBJOj8KIAkJICogMSAgICAxICAgICAgIEk6PwotCQkgKiAyICAgIDEgICAgICAgTzpEVkItVCBERU1PRCBFTkFCTEUgTE9XL0FOQUxPRyBERU1PRCBFTkFCTEUgSElHSAorCQkgKiAyICAgIDEgICAgICAgTzpNUEVHIFBPUlQgMD1EVkItVCAxPURWQi1TCiAJCSAqIDMgICAgMSAgICAgICBJOj8KIAkJICogNCAgICAxICAgICAgIEk6PwogCQkgKiA1ICAgIDEgICAgICAgSTo/CkBAIC0xNzQ1LDIyICsxNzYzLDQxIEBACiAJCSAqIGQgICAgMCAgICAgICBJCiAJCSAqIGUgICAgMSAgICAgICBPCiAJCSAqIGYgICAgMSAgICAgICBPCisJCSAqCisJCSAqIFdNODc3NSBBREMKKwkJICoKKwkJICogMTogVFYgQXVkaW8gLyBGTSBNb25vCisJCSAqIDI6IExpbmUtSW4KKwkJICogMzogTGluZS1JbiBFeHBhbnNpb24KKwkJICogNDogRk0gU3RlcmVvCiAJCSAqLwogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhjNGJmLAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCisJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0sIHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4YzRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfSwgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweGM0YmYsCisJCQkvKiAyOiBMaW5lLUluICovCisJCQkuYXVkaW9yb3V0ZSA9IDIsCiAJCX0gfSwKLQkJLyogZml4bWU6IEFkZCByYWRpbyBzdXBwb3J0ICovCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wCT0gMHhjNGJmLAorCQkJLyogNDogRk0gU3RlcmVvICovCisJCQkuYXVkaW9yb3V0ZSA9IDgsCisJCX0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJCS5udW1fZnJvbnRlbmRzCT0gMiwKIAl9LAogCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSNDAwMChMaXRlKSBEVkItUy9TMiIsCkBAIC0yNjYyLDEwICsyNjk5LDEzIEBACiAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgotCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6CiAJCS8qIEluaXQgR1BJTyAqLwogCQljeF93cml0ZShNT19HUDBfSU8sIGNvcmUtPmJvYXJkLmlucHV0WzBdLmdwaW8wKTsKIAkJdWRlbGF5KDEwMDApOworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoNTApOworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsgLyogNzAyIG91dCBvZiByZXNldCAqLworCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTMwMDQsMTAgKzMwNDQsMTQgQEAKIAogCW1lbWNweSgmY29yZS0+Ym9hcmQsICZjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZG5yXSwgc2l6ZW9mKGNvcmUtPmJvYXJkKSk7CiAKLQlpbmZvX3ByaW50ayhjb3JlLCAic3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCisJaWYgKCFjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzICYmIChjb3JlLT5ib2FyZC5tcGVnICYgQ1g4OF9NUEVHX0RWQikpCisJCWNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHMgPSAxOworCisJaW5mb19wcmludGsoY29yZSwgInN1YnN5c3RlbTogJTA0eDolMDR4LCBib2FyZDogJXMgW2NhcmQ9JWQsJXNdLCBmcm9udGVuZChzKTogJWRcbiIsCiAJCXBjaS0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlLCBjb3JlLT5ib2FyZC5uYW1lLAogCQljb3JlLT5ib2FyZG5yLCBjYXJkW2NvcmUtPm5yXSA9PSBjb3JlLT5ib2FyZG5yID8KLQkJImluc21vZCBvcHRpb24iIDogImF1dG9kZXRlY3RlZCIpOworCQkiaW5zbW9kIG9wdGlvbiIgOiAiYXV0b2RldGVjdGVkIiwKKwkJY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kcyk7CiAKIAlpZiAodHVuZXJbY29yZS0+bnJdICE9IFVOU0VUKQogCQljb3JlLT5ib2FyZC50dW5lcl90eXBlID0gdHVuZXJbY29yZS0+bnJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IGQ2NTZmZWMuLjYwNzA1YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTU0OSw3ICs1NDksOCBAQAogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOwogCX0KIAlpZiAoYmMgIT0gMSkKLQkJcHJpbnRrKCIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsX19mdW5jX18sYmMpOworCQlkcHJpbnRrKDIsICIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCisJCQlfX2Z1bmNfXywgYmMpOwogfQogCiB2b2lkIGN4ODhfc2h1dGRvd24oc3RydWN0IGN4ODhfY29yZSAqY29yZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggMzQ0ZWQyNi4uY2Y2YzMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTExNiwxMyArMTE2LDIzIEBACiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKIAlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgZmVfaWQ7CisKKwlmZV9pZCA9IHZpZGVvYnVmX2R2Yl9maW5kX2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgZmUpOworCWlmICghZmVfaWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIE5vIGZyb250ZW5kIGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWRydiA9IGN4ODgwMl9nZXRfZHJpdmVyKGRldiwgQ1g4OF9NUEVHX0RWQik7CiAJaWYgKGRydikgewotCQlpZiAoYWNxdWlyZSkKKwkJaWYgKGFjcXVpcmUpeworCQkJZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gZmVfaWQ7CiAJCQlyZXQgPSBkcnYtPnJlcXVlc3RfYWNxdWlyZShkcnYpOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlyZXQgPSBkcnYtPnJlcXVlc3RfcmVsZWFzZShkcnYpOworCQkJZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gMDsKKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zOTYsNyArNDA2LDcgQEAKIAkJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwNjA2MCk7CiAJCQlicmVhazsKIAkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6Ci0JCQlwcmludGsoIkxOQiBWb2x0YWdlIFNFQ19WT0xUQUdFX29mZlxuIik7CisJCSAgIAlwcmludGsoIkxOQiBWb2x0YWdlIFNFQ19WT0xUQUdFX29mZlxuIik7CiAJCQlicmVhazsKIAl9CiAKQEAgLTQ4Myw2ICs0OTMsNyBAQAogc3RhdGljIGludCBhdHRhY2hfeGMzMDI4KHU4IGFkZHIsIHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwID0gTlVMTDsKIAlzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RsOwogCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJLmkyY19hZGFwICA9ICZkZXYtPmNvcmUtPmkyY19hZGFwLApAQCAtNDkwLDcgKzUwMSwxMiBAQAogCQkuY3RybCAgICAgID0gJmN0bCwKIAl9OwogCi0JaWYgKCFkZXYtPmR2Yi5mcm9udGVuZCkgeworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFmZTAtPmR2Yi5mcm9udGVuZCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IGR2YiBmcm9udGVuZCBub3QgYXR0YWNoZWQuICIKIAkJCQkiQ2FuJ3QgYXR0YWNoIHhjMzAyOFxuIiwKIAkJICAgICAgIGRldi0+Y29yZS0+bmFtZSk7CkBAIC01MDQsMTAgKzUyMCwxMyBAQAogCSAqLwogCWN4ODhfc2V0dXBfeGMzMDI4KGRldi0+Y29yZSwgJmN0bCk7CiAKLQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsICZjZmcpOworCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJaWYgKCFmZSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IHhjMzAyOCBhdHRhY2ggZmFpbGVkXG4iLAogCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBOVUxMOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUzMiw4ICs1NTEsMTAgQEAKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwogCiAJLyogUmVzZXQgdGhlIHBhcnQgKi8KKwkvKiBQdXQgdGhlIGN4MjQxMTYgaW50byByZXNldCAqLwogCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDApOwogCW1zbGVlcCgxMCk7CisJLyogVGFrZSB0aGUgY3gyNDExNiBvdXQgb2YgcmVzZXQgKi8KIAljeF93cml0ZShNT19TUlNUX0lPLCAxKTsKIAltc2xlZXAoMTApOwogCkBAIC01NTQsMTQgKzU3NSwxNCBAQAogCiBzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHRldmlpX3R1bmVyX3NoYXJwX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCi0JLmluaXR0YWIgPSBzaGFycF96MDE5NGFfX2luaXR0YWIsCisJLmluaXR0YWIgPSBzaGFycF96MDE5NGFfaW5pdHRhYiwKIAkubWNsayA9IDg4MDAwMDAwVUwsCiAJLmludmVydCA9IDEsCiAJLnNraXBfcmVpbml0ID0gMCwKIAkubG9ja19vdXRwdXQgPSAxLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKIAkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfX3NldF9zeW1ib2xfcmF0ZSwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZSwKIAkuc2V0X3RzX3BhcmFtcyA9IGN4MjQxMTZfc2V0X3RzX3BhcmFtLAogfTsKIApAQCAtNTc0LDE5ICs1OTUsMjUgQEAKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTAsICpmZTEgPSBOVUxMOworCWludCBtZmVfc2hhcmVkID0gMDsgLyogYnVzIG5vdCBzaGFyZWQgYnkgZGVmYXVsdCAqLwogCi0JLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCi0JZGV2LT5kdmIubmFtZSA9IGNvcmUtPm5hbWU7Ci0JZGV2LT50c19nZW5fY250cmwgPSAweDBjOworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOwogCi0JLyogaW5pdCBmcm9udGVuZCAqLworCS8qIG11bHRpLWZyb250ZW5kIGdhdGUgY29udHJvbCBpcyB1bmRlZmluZWQgb3IgZGVmYXVsdHMgdG8gZmUwICovCisJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDA7CisKKwkvKiBpbml0IGZyb250ZW5kKHMpICovCiAJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9EVkJfVDE6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmNvbm5leGFudF9yZWZib2FyZF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjEsICZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJRFZCX1BMTF9USE9NU09OX0RUVDc1OVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNTk2LDExICs2MjMsMTEgQEAKIAljYXNlIENYODhfQk9BUkRfQ09ORVhBTlRfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCX1RfQ1gyMjcwMjoKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYxMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKIAkJCQkJICAgICAgICZjb25uZXhhbnRfcmVmYm9hcmRfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCAmY29yZS0+aTJjX2FkYXAsCiAJCQkJCURWQl9QTExfVEhPTVNPTl9EVFQ3NTc5KSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTYxMCwzMyArNjM3LDY3IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMExQOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnJfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJCS8qIERWQi1TIGluaXQgKi8KKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQkJICAgICAgICZoYXVwcGF1Z2Vfbm92YXNfY29uZmlnLAorCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkgeworCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVMgTE5CIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItUyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJfQorCQkvKiBEVkItVCBpbml0ICovCisJCWZlMSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAyKTsKKwkJaWYgKGZlMSkgeworCQkJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDI7CisJCQltZmVfc2hhcmVkID0gMTsKKwkJCWZlMS0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJCQkmaGF1cHBhdWdlX2h2cl9jb25maWcsCisJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQkJaWYgKGZlMS0+ZHZiLmZyb250ZW5kKSB7CisJCQkJZmUxLT5kdmIuZnJvbnRlbmQtPmlkID0gMTsKKwkJCQlpZighZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTEtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDYxLAorCQkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkgeworCQkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIG1pc2MgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItVCBJbml0OiBjYW4ndCBmaW5kIGZyb250ZW5kIDIuXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVUzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCQlicmVhazsKIAkJfQogCQkvKiBaTDEwMzUzIHJlcGxhY2VzIE1UMzUyIG9uIGxhdGVyIGNhcmRzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfcGx1c192MV8xLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTY0NCwzMSArNzA1LDMxIEBACiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTDoKIAkJLyogVGhlIHRpbiBib3ggc2F5cyBERUUxNjAxLCBidXQgaXQgc2VlbXMgdG8gYmUgRFRUNzU3OQogCQkgKiBjb21wYXRpYmxlLCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IE1UMzUyIEFHQyBnYWluLiAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfZHVhbCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgTlVMTCwgRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogWkwxMDM1MyByZXBsYWNlcyBNVDM1MiBvbiBsYXRlciBjYXJkcyAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X3BsdXNfdjFfMSwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgTlVMTCwgRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX0xHX1oyMDEpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC02NzYsMTEgKzczNywxMSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCX1Q6CiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0k6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCSAgICAgICAmZG50dl9saXZlX2R2YnRfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX1VOS05PV05fMSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTY4OCwxMCArNzQ5LDEwIEBACiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk86CiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IChkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIAkJLyogTVQzNTIgaXMgb24gYSBzZWNvbmRhcnkgSTJDIGJ1cyBtYWRlIGZyb20gc29tZSBHUElPIGxpbmVzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkbnR2X2xpdmVfZHZidF9wcm9fY29uZmlnLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmZG50dl9saXZlX2R2YnRfcHJvX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPnZwMzA1NC0+YWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTcwMiwyMiArNzYzLDIyIEBACiAjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfSFlCUklEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X2h5YnJpZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX1RIT01TT05fRkU2NjAwKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QUk86Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kID09IE5VTEwpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmZHZpY29fZnVzaW9uaGR0dl9tdDM1Ml94YzMwMjgsCiAJCQkJCQkmY29yZS0+aTJjX2FkYXApOwogCQkvKgpAQCAtNzI1LDE2ICs3ODYsMTYgQEAKIAkJICogV2UgbXVzdCBub3QgcGVybWl0IGdhdGVfY3RybCB0byBiZSBwZXJmb3JtZWQsIG9yCiAJCSAqIHRoZSB4YzMwMjggY2Fubm90IGNvbW11bmljYXRlIG9uIHRoZSBidXMuCiAJCSAqLwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOwogCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gob3I1MTEzMl9hdHRhY2gsICZwY2hkdHZfaGQzMDAwLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gob3I1MTEzMl9hdHRhY2gsICZwY2hkdHZfaGQzMDAwLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9USE9NU09OX0RUVDc2MVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzUxLDExICs4MTIsMTEgQEAKIAogCQkvKiBTZWxlY3QgUkYgY29ubmVjdG9yIGNhbGxiYWNrICovCiAJCWZ1c2lvbmhkdHZfM19nb2xkLnBsbF9yZl9zZXQgPSBsZ2R0MzMweF9wbGxfcmZfc2V0OwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9NSUNST1RVTkVfNDA0MkZJNSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CkBAIC03NjksMTEgKzgzMCwxMSBAQAogCQltZGVsYXkoMTAwKTsKIAkJY3hfc2V0KE1PX0dQMF9JTywgOSk7CiAJCW1kZWxheSgyMDApOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9USE9NU09OX0RUVDc2MVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzg3LDE1ICs4NDgsMTUgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChNT19HUDBfSU8sIDEpOwogCQltZGVsYXkoMjAwKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzVfZ29sZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfTEdfVERWU19IMDZYRikpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7Ci0JCQlpZiAoIWR2Yl9hdHRhY2godGRhOTg4N19hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NDMpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC04MDgsMjUgKzg2OSwyNSBAQAogCQltZGVsYXkoMTAwKTsKIAkJY3hfc2V0KE1PX0dQMF9JTywgMSk7CiAJCW1kZWxheSgyMDApOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJnBjaGR0dl9oZDU1MDAsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJCVRVTkVSX0xHX1REVlNfSDA2WEYpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmICghZHZiX2F0dGFjaCh0ZGE5ODg3X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDQzKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVI6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmF0aV9oZHR2d29uZGVyLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9QSElMSVBTX1RVVjEyMzZEKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTgzNCw0OSArODk1LDQ5IEBACiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNQTFVTX1MxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCiAJCQkJCSAgICAgICAmaGF1cHBhdWdlX25vdmFzX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQlNfMTAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKIAkJCQkJICAgICAgICZrd29ybGRfZHZic18xMDBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBrd29ybGRfZHZic18xMDBfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0ga3dvcmxkX2R2YnNfMTAwX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfRFZCUzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCiAJCQkJCSAgICAgICAmZ2VuaWF0ZWNoX2R2YnNfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfUENUVl9IRF84MDBpOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgICAgICZwaW5uYWNsZV9wY3R2X2hkXzgwMGlfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLAogCQkJCQkmcGlubmFjbGVfcGN0dl9oZF84MDBpX3R1bmVyX2NvbmZpZykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9QQ0lfTkFOTzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmZHZpY29faGR0djVfcGNpX25hbm9fY29uZmlnLAogCQkJCQkJJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmY29yZS0+aTJjX2FkYXAsCkBAIC04ODksMTcgKzk1MCwxNyBAQAogCQkJfTsKIAogCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsCi0JCQkJCWRldi0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CiAJCWJyZWFrOwogCSBjYXNlIENYODhfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BDVFY6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmN4ODhfcGlubmFjbGVfaHlicmlkX3BjdHYsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gTlVMTDsKIAkJCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC05MDcsODUgKzk2OCwxMTcgQEAKIAkgY2FzZSBDWDg4X0JPQVJEX0dFTklBVEVDSF9YODAwMF9NVDoKIAkJZGV2LT50c19nZW5fY250cmwgPSAweDAwOwogCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmN4ODhfZ2VuaWF0ZWNoX3g4MDAwX210LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCiAJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJYnJlYWs7CiAJIGNhc2UgQ1g4OF9CT0FSRF9LV09STERfQVRTQ18xMjA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkgICAgICAgJmt3b3JsZF9hdHNjXzEyMF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwogCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKIAkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHY3X2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJJmR2aWNvX2Z1c2lvbmhkdHY3X3R1bmVyX2NvbmZpZykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgotCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6Ci0JCS8qIFN1cHBvcnQgZm9yIERWQi1TIG9ubHksIG5vdCBEVkItVCBzdXBwb3J0ICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJLyogRFZCLVMvUzIgSW5pdCAqLworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCiAJCQkmaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnLAogCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKSB7CisJCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItUyBMTkIgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1TIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl9CisJCS8qIERWQi1UIEluaXQgKi8KKwkJZmUxID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDIpOworCQlpZiAoZmUxKSB7CisJCQlkZXYtPmZyb250ZW5kcy5nYXRlID0gMjsKKwkJCW1mZV9zaGFyZWQgPSAxOworCQkJZmUxLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlmZTEtPmR2Yi5mcm9udGVuZC0+aWQgPSAxOworCQkJCWlmKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMS0+ZHZiLmZyb250ZW5kLAorCQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHg2MSwKKwkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkgeworCQkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIG1pc2MgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItVCBJbml0OiBjYW4ndCBmaW5kIGZyb250ZW5kIDIuXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJJmhhdXBwYXVnZV9odnI0MDAwX2NvbmZpZywKKwkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwKIAkJCQkweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0MjA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLAogCQkJCQkJJnRldmlpX3R1bmVyX3NoYXJwX2NvbmZpZywKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCBEVkJfUExMX09QRVJBMSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAogCQl9IGVsc2UgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyODhfYXR0YWNoLAorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyODhfYXR0YWNoLAogCQkJCQkJCSAgICAmdGV2aWlfdHVuZXJfZWFyZGFfY29uZmlnLAogCQkJCQkJCSAgICAmY29yZS0+aTJjX2FkYXApOwotCQkJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQkJCWlmICghZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCQkJaWYgKCFkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MSwKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCkpCiAJCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOwotCisJCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0NjA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAogCQkJCQkgICAgICAgJnRldmlpX3M0NjBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9PTUlDT01fU1M0X1BDSToKIAljYXNlIENYODhfQk9BUkRfVEJTXzg5MjA6CiAJY2FzZSBDWDg4X0JPQVJEX1BST0ZfNzMwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCiAJCQkJCSAgICAgICAmaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05OTMsMzAgKzEwODYsMzAgQEAKIAkJICAgICAgIGNvcmUtPm5hbWUpOwogCQlicmVhazsKIAl9Ci0JaWYgKE5VTEwgPT0gZGV2LT5kdmIuZnJvbnRlbmQpIHsKKworICAgICAgICBpZiAoIChOVUxMID09IGZlMC0+ZHZiLmZyb250ZW5kKSB8fCAoZmUxICYmIE5VTEwgPT0gZmUxLT5kdmIuZnJvbnRlbmQpICkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlcy8yOiBmcm9udGVuZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwotCWRldi0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2s7CisJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3g4OF90dW5lcl9jYWxsYmFjazsKIAogCS8qIEVuc3VyZSBhbGwgZnJvbnRlbmRzIG5lZ290aWF0ZSBidXMgYWNjZXNzICovCi0JZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50c19idXNfY3RybCA9IGN4ODhfZHZiX2J1c19jdHJsOworCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKKwlpZiAoZmUxKQorCQlmZTEtPmR2Yi5mcm9udGVuZC0+b3BzLnRzX2J1c19jdHJsID0gY3g4OF9kdmJfYnVzX2N0cmw7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwogCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCi0JcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3RlcigmZGV2LT5kdmIsIFRISVNfTU9EVUxFLCBkZXYsCi0JCQkJICAgICAmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9ucik7CisJcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgZGV2LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgbWZlX3NoYXJlZCk7CiAKIGZyb250ZW5kX2RldGFjaDoKLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJZHZiX2Zyb250ZW5kX2RldGFjaChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gTlVMTDsKLQl9CisJdmlkZW9idWZfZHZiX2RlYWxsb2NfZnJvbnRlbmRzKCZkZXYtPmZyb250ZW5kcyk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTEwMzksNiArMTEzMiwzOCBAQAogCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwMDQpOwogCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOworCisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwkJaWYoY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID09IDEpIHsKKwkJCS8qIERWQi1TL1MyIEVuYWJsZWQgKi8KKworCQkJLyogVG9nZ2xlIHJlc2V0IG9uIGN4MjI3MDIgbGVhdmluZyBpMmMgYWN0aXZlICovCisJCQljeF93cml0ZShNT19HUDBfSU8sIChjb3JlLT5ib2FyZC5pbnB1dFswXS5ncGlvMCAmIDB4MDAwMGZmMDApIHwgMHgwMDAwMDA4MCk7CisJCQl1ZGVsYXkoMTAwMCk7CisJCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQkJdWRlbGF5KDUwKTsKKwkJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOyAvKiBjeDIyNzAyIG91dCBvZiByZXNldCAqLworCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7IC8qIHRyaS1zdGF0ZSB0aGUgY3gyMjcwMiBwaW5zICovCisJCQl1ZGVsYXkoMTAwMCk7CisKKwkJCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDEpOyAvKiBUYWtlIHRoZSBjeDI0MTE2L2N4MjQxMjMgb3V0IG9mIHJlc2V0ICovCisJCQljb3JlLT5kdmJkZXYtPnRzX2dlbl9jbnRybCA9IDB4MDI7IC8qIFBhcmFsbGVsIElPICovCisJCX0gZWxzZQorCQlpZiAoY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID09IDIpIHsKKwkJCS8qIERWQi1UIEVuYWJsZWQgKi8KKworCQkJLyogUHV0IHRoZSBjeDI0MTE2L2N4MjQxMjMgaW50byByZXNldCAqLworCQkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMCk7CisKKwkJCS8qIGN4MjI3MDIgb3V0IG9mIHJlc2V0IGFuZCBlbmFibGUgaXQgKi8KKwkJCWN4X3NldChNT19HUDBfSU8sICAgMHgwMDAwMDA4MCk7CisJCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwMDQpOworCQkJY29yZS0+ZHZiZGV2LT50c19nZW5fY250cmwgPSAweDBjOyAvKiBTZXJpYWwgSU8gKi8KKwkJCXVkZWxheSgxMDAwKTsKKwkJfQorCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9ERVY7CiAJfQpAQCAtMTA1Niw2ICsxMTgxLDkgQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDA6CiAJCS8qIERvIE5vdGhpbmcsIGxlYXZlIHRoZSBjeDIyNzAyIG9uIHRoZSBidXMuICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9ERVY7CiAJfQpAQCAtMTA2Niw3ICsxMTk0LDggQEAKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZHJ2LT5jb3JlOwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBkcnYtPmNvcmUtPmR2YmRldjsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmU7CiAKIAlkcHJpbnRrKCAxLCAiJXNcbiIsIF9fZnVuY19fKTsKIAlkcHJpbnRrKCAxLCAiIC0+YmVpbmcgcHJvYmVkIGJ5IENhcmQ9JWQgTmFtZT0lcywgUENJICUwMng6JTAyeFxuIiwKQEAgLTEwODYsMjggKzEyMTUsMzkgQEAKIAogCS8qIGR2YiBzdHVmZiAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzLzI6IGN4MjM4OHggYmFzZWQgRFZCL0FUU0MgY2FyZFxuIiwgY29yZS0+bmFtZSk7Ci0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZGV2LT5kdmIuZHZicSwgJmR2Yl9xb3BzLAorCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwYzsKKworCWZvciAoaSA9IDE7IGkgPD0gY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kczsgaSsrKSB7CisJCWZlID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMsIGkpOworCQlpZiAoIWZlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGdldCBmcm9udGVuZCglZClcbiIsIF9fZnVuY19fLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZlLT5kdmIuZHZicSwgJmR2Yl9xb3BzLAogCQkJICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKIAkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCiAJCQkgICAgVjRMMl9GSUVMRF9UT1AsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBjeDg4X2J1ZmZlciksCiAJCQkgICAgZGV2KTsKKwkJLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCisJCWZlLT5kdmIubmFtZSA9IGRldi0+Y29yZS0+bmFtZTsKKwl9CiAJZXJyID0gZHZiX3JlZ2lzdGVyKGRldik7CiAJaWYgKGVyciAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IGR2Yl9yZWdpc3RlciBmYWlsZWQgKGVyciA9ICVkKVxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUsIGVycik7Ci0KLSBmYWlsX2NvcmU6CitmYWlsX2NvcmU6CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBjeDg4MDJfZHZiX3JlbW92ZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQogeworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGRydi0+Y29yZS0+ZHZiZGV2OwogCi0JLyogZHZiICovCi0JaWYgKGRldi0+ZHZiLmZyb250ZW5kKQotCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcigmZGV2LT5kdmIpOworCWRwcmludGsoIDEsICIlc1xuIiwgX19mdW5jX18pOworCisJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKCZkZXYtPmZyb250ZW5kcyk7CiAKIAl2cDMwNTRfaTJjX3JlbW92ZShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IDhlNzRkNjQuLjFhYjY5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC0xMTYsMTggKzExNiwyNyBAQAogCiB2b2lkIGN4ODhfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCX01PRFVMRSkKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiA9ICZjb3JlLT5kdmJkZXYtPmZyb250ZW5kczsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSA9IE5VTEw7CisjZW5kaWYKIAlpZiAoMCAhPSBjb3JlLT5pMmNfcmMpCiAJCXJldHVybjsKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQl9NT0RVTEUpCi0JaWYgKCAoY29yZS0+ZHZiZGV2KSAmJiAoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQpICkgewotCQlpZiAoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQkJY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLCAxKTsKKwlpZiAoY29yZS0+ZHZiZGV2ICYmIGYpIHsKKwkJaWYoZi0+Z2F0ZSA8PSAxKSAvKiB1bmRlZmluZWQgb3IgZmUwICovCisJCQlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoZiwgMSk7CisJCWVsc2UKKwkJCWZlID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZChmLCBmLT5nYXRlKTsKKworCQlpZiAoZmUgJiYgZmUtPmR2Yi5mcm9udGVuZCAmJiBmZS0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLT5kdmIuZnJvbnRlbmQsIDEpOwogCiAJCWkyY19jbGllbnRzX2NvbW1hbmQoJmNvcmUtPmkyY19hZGFwLCBjbWQsIGFyZyk7CiAKLQkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJCWNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMCk7CisJCWlmIChmZSAmJiBmZS0+ZHZiLmZyb250ZW5kICYmIGZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwoZmUtPmR2Yi5mcm9udGVuZCwgMCk7CiAJfSBlbHNlCiAjZW5kaWYKIAkJaTJjX2NsaWVudHNfY29tbWFuZCgmY29yZS0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCBhNmIwNjFjLi5hMWM0MzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC03NjksNiArNzY5LDEwIEBACiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldjsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZTsKIAlpbnQgZXJyOworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQl9NT0RVTEUpCisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZGVtb2Q7CisJaW50IGk7CisjZW5kaWYKIAogCS8qIGdlbmVyYWwgc2V0dXAgKi8KIAljb3JlID0gY3g4OF9jb3JlX2dldChwY2lfZGV2KTsKQEAgLTc5NSw2ICs3OTksMjMgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5kcnZsaXN0KTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsJmN4ODgwMl9kZXZsaXN0KTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQl9NT0RVTEUpCisJbXV0ZXhfaW5pdCgmZGV2LT5mcm9udGVuZHMubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZnJvbnRlbmRzLmZlbGlzdCk7CisKKwlpZiAoY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kcykKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBhbGxvY2F0aW5nICVkIGZyb250ZW5kKHMpXG4iLCBfX2Z1bmNfXywgY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kcyk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IGNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHM7IGkrKykgeworCQlkZW1vZCA9IHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIGkpOworCQlpZihkZW1vZCA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGFsbG9jXG4iLCBfX2Z1bmNfXyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmYWlsX2ZyZWU7CisJCX0KKwl9CisjZW5kaWYKKwogCS8qIE1haW50YWluIGEgcmVmZXJlbmNlIHNvIGN4ODgtdmlkZW8gY2FuIHF1ZXJ5IHRoZSA4ODAyIGRldmljZS4gKi8KIAljb3JlLT5kdmJkZXYgPSBkZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwppbmRleCAzYTE5NzdmLi43ZGQ1MDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCkBAIC03NjcsNiArNzY3LDE0IEBACiAJY2FzZSBXV19GTToKIAkJc2V0X2F1ZGlvX3N0YW5kYXJkX0ZNKGNvcmUsIHJhZGlvX2RlZW1waGFzaXMpOwogCQlicmVhazsKKwljYXNlIFdXX0kyU0FEQzoKKwkJc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIDB4MDEpOworCQkvKiBTbGF2ZS9QaGlsaXBzL0F1dG9iYXVkICovCisJCWN4X3dyaXRlKEFVRF9JMlNJTlBVVENOVEwsIDApOworCQkvKiBTd2l0Y2ggdG8gIkkyUyBBREMgbW9kZSIgKi8KKwkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDB4MSk7CisJCXNldF9hdWRpb19maW5pc2goY29yZSwgRU5fSTJTSU5fRU5BQkxFKTsKKwkJYnJlYWs7CiAJY2FzZSBXV19OT05FOgogCWRlZmF1bHQ6CiAJCXByaW50aygiJXMvMDogdW5rbm93biB0diBhdWRpbyBtb2RlIFslZF1cbiIsCkBAIC04OTUsNiArOTAzLDkgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCWNhc2UgV1dfSTJTQURDOgorCQkvKiBETyBOT1RISU5HICovCisJCWJyZWFrOwogCX0KIAogCWlmIChVTlNFVCAhPSBjdGwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IGJlNDU5NTUuLjYxMjY1ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtNDI2LDI0ICs0MjYsNyBAQAogCiAJLyogaWYgdGhlcmUgYXJlIGF1ZGlvcm91dGVzIGRlZmluZWQsIHdlIGhhdmUgYW4gZXh0ZXJuYWwKIAkgICBBREMgdG8gZGVhbCB3aXRoIGF1ZGlvICovCi0KIAlpZiAoSU5QVVQoaW5wdXQpLmF1ZGlvcm91dGUpIHsKLQotCQkvKiBjeDIzODgncyBDLUFEQyBpcyBjb25uZWN0ZWQgdG8gdGhlIHR1bmVyIG9ubHkuCi0JCSAgIFdoZW4gdXNlZCB3aXRoIFMtVmlkZW8sIHRoYXQgQURDIGlzIGJ1c3kgZGVhbGluZyB3aXRoCi0JCSAgIGNocm9tYSwgc28gYW4gZXh0ZXJuYWwgbXVzdCBiZSB1c2VkIGZvciBiYXNlYmFuZCBhdWRpbyAqLwotCi0JCWlmIChJTlBVVChpbnB1dCkudHlwZSAhPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiAmJgotCQkJSU5QVVQoaW5wdXQpLnR5cGUgIT0gQ1g4OF9SQURJTykgewotCQkJLyogIkFEQyBtb2RlIiAqLwotCQkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDB4MSk7Ci0JCQljeF9zZXQoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vcm1hbCBtb2RlICovCi0JCQljeF93cml0ZShBVURfSTJTQ05UTCwgMHgwKTsKLQkJCWN4X2NsZWFyKEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7Ci0JCX0KLQogCQkvKiBUaGUgd204Nzc1IG1vZHVsZSBoYXMgdGhlICIyIiByb3V0ZSBoYXJkd2lyZWQgaW50bwogCQkgICB0aGUgaW5pdGlhbGl6YXRpb24uIFNvbWUgYm9hcmRzIG1heSB1c2UgZGlmZmVyZW50CiAJCSAgIHJvdXRlcyBmb3IgZGlmZmVyZW50IGlucHV0cy4gSFZSLTEzMDAgc3VyZWx5IGRvZXMgKi8KQEAgLTQ1NCw5ICs0MzcsMTkgQEAKIAkJCXJvdXRlLmlucHV0ID0gSU5QVVQoaW5wdXQpLmF1ZGlvcm91dGU7CiAJCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwKIAkJCQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKLQogCQl9Ci0KKwkJLyogY3gyMzg4J3MgQy1BREMgaXMgY29ubmVjdGVkIHRvIHRoZSB0dW5lciBvbmx5LgorCQkgICBXaGVuIHVzZWQgd2l0aCBTLVZpZGVvLCB0aGF0IEFEQyBpcyBidXN5IGRlYWxpbmcgd2l0aAorCQkgICBjaHJvbWEsIHNvIGFuIGV4dGVybmFsIG11c3QgYmUgdXNlZCBmb3IgYmFzZWJhbmQgYXVkaW8gKi8KKwkJaWYgKElOUFVUKGlucHV0KS50eXBlICE9IENYODhfVk1VWF9URUxFVklTSU9OICkgeworCQkJLyogIkkyUyBBREMgbW9kZSIgKi8KKwkJCWNvcmUtPnR2YXVkaW8gPSBXV19JMlNBREM7CisJCQljeDg4X3NldF90dmF1ZGlvKGNvcmUpOworCQl9IGVsc2UgeworCQkJLyogTm9ybWFsIG1vZGUgKi8KKwkJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAweDApOworCQkJY3hfY2xlYXIoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtODMyLDkgKzgyNSwyNCBAQAogCQljeF93cml0ZShNT19HUDBfSU8sIGNvcmUtPmJvYXJkLnJhZGlvLmdwaW8wKTsKIAkJY3hfd3JpdGUoTU9fR1AxX0lPLCBjb3JlLT5ib2FyZC5yYWRpby5ncGlvMSk7CiAJCWN4X3dyaXRlKE1PX0dQMl9JTywgY29yZS0+Ym9hcmQucmFkaW8uZ3BpbzIpOwotCQljb3JlLT50dmF1ZGlvID0gV1dfRk07Ci0JCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7Ci0JCWN4ODhfc2V0X3N0ZXJlbyhjb3JlLFY0TDJfVFVORVJfTU9ERV9TVEVSRU8sMSk7CisJCWlmIChjb3JlLT5ib2FyZC5yYWRpby5hdWRpb3JvdXRlKSB7CisJCQlpZihjb3JlLT5ib2FyZC5hdWRpb19jaGlwICYmCisJCQkJY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1dNODc3NSkgeworCQkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisKKwkJCQlyb3V0ZS5pbnB1dCA9IGNvcmUtPmJvYXJkLnJhZGlvLmF1ZGlvcm91dGU7CisJCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCisJCQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQkJfQorCQkJLyogIkkyUyBBREMgbW9kZSIgKi8KKwkJCWNvcmUtPnR2YXVkaW8gPSBXV19JMlNBREM7CisJCQljeDg4X3NldF90dmF1ZGlvKGNvcmUpOworCQl9IGVsc2UgeworCQkJLyogRk0gTW9kZSAqLworCQkJY29yZS0+dHZhdWRpbyA9IFdXX0ZNOworCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKKwkJCWN4ODhfc2V0X3N0ZXJlbyhjb3JlLFY0TDJfVFVORVJfTU9ERV9TVEVSRU8sMSk7CisJCX0KIAkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsQVVEQ19TRVRfUkFESU8sTlVMTCk7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKQEAgLTE5MDMsNyArMTkxMSw3IEBACiAJCWdvdG8gZmFpbF91bnJlZzsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMDogcmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZCBbdjRsMl1cbiIsCi0JICAgICAgIGNvcmUtPm5hbWUsZGV2LT52aWRlb19kZXYtPm1pbm9yICYgMHgxZik7CisJICAgICAgIGNvcmUtPm5hbWUsIGRldi0+dmlkZW9fZGV2LT5udW0pOwogCiAJZGV2LT52YmlfZGV2ID0gY3g4OF92ZGV2X2luaXQoY29yZSxkZXYtPnBjaSwmY3g4ODAwX3ZiaV90ZW1wbGF0ZSwidmJpIik7CiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2RldixWRkxfVFlQRV9WQkksCkBAIC0xOTE0LDcgKzE5MjIsNyBAQAogCQlnb3RvIGZhaWxfdW5yZWc7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzLzA6IHJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkXG4iLAotCSAgICAgICBjb3JlLT5uYW1lLGRldi0+dmJpX2Rldi0+bWlub3IgJiAweDFmKTsKKwkgICAgICAgY29yZS0+bmFtZSwgZGV2LT52YmlfZGV2LT5udW0pOwogCiAJaWYgKGNvcmUtPmJvYXJkLnJhZGlvLnR5cGUgPT0gQ1g4OF9SQURJTykgewogCQlkZXYtPnJhZGlvX2RldiA9IGN4ODhfdmRldl9pbml0KGNvcmUsZGV2LT5wY2ksCkBAIC0xOTI3LDcgKzE5MzUsNyBAQAogCQkJZ290byBmYWlsX3VucmVnOwogCQl9CiAJCXByaW50ayhLRVJOX0lORk8gIiVzLzA6IHJlZ2lzdGVyZWQgZGV2aWNlIHJhZGlvJWRcbiIsCi0JCSAgICAgICBjb3JlLT5uYW1lLGRldi0+cmFkaW9fZGV2LT5taW5vciAmIDB4MWYpOworCQkgICAgICAgY29yZS0+bmFtZSwgZGV2LT5yYWRpb19kZXYtPm51bSk7CiAJfQogCiAJLyogZXZlcnl0aGluZyB3b3JrZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IGRiZjAxYjguLjc2MjA3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJZW51bSBjeDg4X2l0eXBlIHR5cGU7CiAJdTMyICAgICAgICAgICAgIGdwaW8wLCBncGlvMSwgZ3BpbzIsIGdwaW8zOwogCXVuc2lnbmVkIGludCAgICB2bXV4OjI7Ci0JdW5zaWduZWQgaW50ICAgIGF1ZGlvcm91dGU6MjsKKwl1bnNpZ25lZCBpbnQgICAgYXVkaW9yb3V0ZTo0OwogfTsKIAogc3RydWN0IGN4ODhfYm9hcmQgewpAQCAtMjYxLDYgKzI2MSw3IEBACiAJc3RydWN0IGN4ODhfaW5wdXQgICAgICAgcmFkaW87CiAJZW51bSBjeDg4X2JvYXJkX3R5cGUgICAgbXBlZzsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBhdWRpb19jaGlwOworCWludAkJCW51bV9mcm9udGVuZHM7CiB9OwogCiBzdHJ1Y3QgY3g4OF9zdWJpZCB7CkBAIC0zNTYsNiArMzU3LDcgQEAKIAlzdHJ1Y3QgY3g4ODAyX2RldiAgICAgICAgICAqZHZiZGV2OwogCWVudW0gY3g4OF9ib2FyZF90eXBlICAgICAgIGFjdGl2ZV90eXBlX2lkOwogCWludAkJCSAgIGFjdGl2ZV9yZWY7CisJaW50CQkJICAgYWN0aXZlX2ZlX2lkOwogfTsKIAogc3RydWN0IGN4ODgwMF9kZXY7CkBAIC00OTAsNyArNDkyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQl9NT0RVTEUpCiAJLyogZm9yIGR2YiBvbmx5ICovCi0Jc3RydWN0IHZpZGVvYnVmX2R2YiAgICAgICAgZHZiOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzIGZyb250ZW5kczsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IFwKQEAgLTYyOCw2ICs2MzAsNyBAQAogI2RlZmluZSBXV19FSUFKCQkgNwogI2RlZmluZSBXV19JMlNQVAkgOAogI2RlZmluZSBXV19GTQkJIDkKKyNkZWZpbmUgV1dfSTJTQURDCSAxMAogCiB2b2lkIGN4ODhfc2V0X3R2YXVkaW8oc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CiB2b2lkIGN4ODhfbmV3c3RhdGlvbihzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IDNhYTUzOGEuLjI5ODgxMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCQkJCWVycigiZGFidXNiX2lzb19jb21wbGV0ZTogaW52YWxpZCBsZW4gJWQiLCBsZW4pOwogCQkJfQogCQkJZWxzZQotCQkJCXdhcm4oImRhYnVzYl9pc29fY29tcGxldGU6IGNvcnJ1cHRlZCBwYWNrZXQgc3RhdHVzOiAlZCIsIHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CisJCQkJZGV2X3dhcm4oJnB1cmItPmRldi0+ZGV2LCAiZGFidXNiX2lzb19jb21wbGV0ZTogY29ycnVwdGVkIHBhY2tldCBzdGF0dXM6ICVkXG4iLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOwogCQlpZiAoZHN0ICE9IHB1cmItPmFjdHVhbF9sZW5ndGgpCiAJCQllcnIoImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWQiLCBkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0KQEAgLTI4OSw3ICsyODksNyBAQAogCX0KIAogCWlmKCByZXQgPT0gLUVQSVBFICkgewotCQl3YXJuKCJDTEVBUl9GRUFUVVJFIHJlcXVlc3QgdG8gcmVtb3ZlIFNUQUxMIGNvbmRpdGlvbi4iKTsKKwkJZGV2X3dhcm4oJnMtPnVzYmRldi0+ZGV2LCAiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uXG4iKTsKIAkJaWYodXNiX2NsZWFyX2hhbHQocy0+dXNiZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpKSkKIAkJCWVycigicmVxdWVzdCBmYWlsZWQiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IGM1MzY0OWUuLmExYWIyZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0yMDQyLDcgKzIwNDIsNyBAQAogCQkJZ290byBmYWlsX3VucmVnOwogCQl9CiAJCWVtMjh4eF9pbmZvKCJSZWdpc3RlcmVkIHJhZGlvIGRldmljZSBhcyAvZGV2L3JhZGlvJWRcbiIsCi0JCQkgICAgZGV2LT5yYWRpb19kZXYtPm1pbm9yICYgMHgxZik7CisJCQkgICAgZGV2LT5yYWRpb19kZXYtPm51bSk7CiAJfQogCiAJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCmluZGV4IDdhODVjNDEuLjlkMGVmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCkBAIC01ODgsNyArNTg4LDcgQEAKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJVUkIgdGltZW91dCByZWFjaGVkLiBUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIFRvICIKIAkJICAgICAgICJ1c2UgaXQsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTExOTUsNyArMTE5NSw3IEBACiAKIAljYW0gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGV0NjF4MjUxX2RldmljZSwga3JlZik7CiAKLQlEQkcoMiwgIlY0TDIgZGV2aWNlIC9kZXYvdmlkZW8lZCBkZXJlZ2lzdGVyZWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygyLCAiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZCIsIGNhbS0+djRsZGV2LT5udW0pOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBOVUxMKTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CiAJdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIAogCWlmIChjYW0tPnVzZXJzKSB7CiAJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBhbHJlYWR5IGluIHVzZSIsCi0JCSAgICAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgICAgY2FtLT52NGxkZXYtPm51bSk7CiAJCURCRygzLCAiU2ltdWx0YW5lb3VzIG9wZW5zIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8CiAJCSAgICAoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSkgewpAQCAtMTI4MCw3ICsxMjgwLDcgQEAKIAljYW0tPmZyYW1lX2NvdW50ID0gMDsKIAlldDYxeDI1MV9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOwogCi0JREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuIiwgY2FtLT52NGxkZXYtPm51bSk7CiAKIG91dDoKIAltdXRleF91bmxvY2soJmNhbS0+b3Blbl9tdXRleCk7CkBAIC0xMzA0LDcgKzEzMDQsNyBAQAogCWNhbS0+dXNlcnMtLTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+d2FpdF9vcGVuLCAxKTsKIAotCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBjbG9zZWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBjbG9zZWQiLCBjYW0tPnY0bGRldi0+bnVtKTsKIAogCWtyZWZfcHV0KCZjYW0tPmtyZWYsIGV0NjF4MjUxX3JlbGVhc2VfcmVzb3VyY2VzKTsKIApAQCAtMTg0NSw3ICsxODQ1LDcgQEAKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlIHByb2JsZW1zLiBUbyAiCiAJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE4NTgsNyArMTg1OCw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQgYmVjYXVzZSBvZiBub3QgZW5vdWdoIG1lbW9yeS4gVG8gIgogCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yMDY4LDcgKzIwNjgsNyBAQAogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gVG8gIgogCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yMDgwLDcgKzIwODAsNyBAQAogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBub3QgZW5vdWdoIG1lbW9yeS4gVG8gIgogCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0pQRUdDT01QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlICIKIAkJICAgICAgICJwcm9ibGVtcy4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKLQkJICAgICAgICIvZGV2L3ZpZGVvJWQgYWdhaW4uIiwgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgICAgICIvZGV2L3ZpZGVvJWQgYWdhaW4uIiwgY2FtLT52NGxkZXYtPm51bSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjYwNSw3ICsyNjA1LDcgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCURCRygyLCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygyLCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bnVtKTsKIAogCWNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCA9IGZvcmNlX211bm1hcFtkZXZfbnJdOwogCWNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgPSBmcmFtZV90aW1lb3V0W2Rldl9ucl07CkBAIC0yNjU4LDcgKzI2NTgsNyBAQAogCWlmIChjYW0tPnVzZXJzKSB7CiAJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgogCQkgICAgICAgIm1lbW9yeSBkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCWV0NjF4MjUxX3N0b3BfdHJhbnNmZXIoY2FtKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGMyMWFmMzEuLmU0OGZiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgImdzcGNhIgogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNDAzLDcgKzQwNCw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAlQREVCVUcoRF9TVFJFQU0sICJraWxsIHRyYW5zZmVyIik7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9OVVJCUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVVJCUzsgaSsrKSB7CiAJCXVyYiA9IGdzcGNhX2Rldi0+dXJiW2ldOwogCQlpZiAodXJiID09IE5VTEwpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA0Nzc5ZGQwLi4xZDlkYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBHU1BDQVYyX0gKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oCmluZGV4IGM3ODZkN2QuLjFhMzdhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9icmlkZ2UuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBVU0IgRHJpdmVyIGZvciBBTGkgbTU2MDIgYmFzZWQgd2ViY2FtcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMjUsMzMgKzI1LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jdW5kZWYgUERFQlVHCi0jdW5kZWYgaW5mbwotI3VuZGVmIGVycgotCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ICIgXAotCWZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgXAotCWZvcm1hdCAiXG4iICwgIyMgYXJnKQotCi0vKiBEZWJ1ZyBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIERCR19JTklUIDB4MQotI2RlZmluZSBEQkdfUFJPQkUgMHgyCi0jZGVmaW5lIERCR19WNEwyIDB4NAotI2RlZmluZSBEQkdfVFJBQ0UgMHg4Ci0jZGVmaW5lIERCR19EQVRBIDB4MTAKLSNkZWZpbmUgREJHX1Y0TDJfQ0lEIDB4MjAKLSNkZWZpbmUgREJHX0dTUENBIDB4NDAKLQotI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAobTU2MDJfZGVidWcgJiBsZXZlbCkgICAgIFwKLQkJCWluZm8oIlslczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXyAsIFwKLQkJCSMjIGFyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiAjZGVmaW5lIE01NjAyX1hCX1NFTlNPUl9UWVBFIDB4MDAKICNkZWZpbmUgTTU2MDJfWEJfU0VOU09SX0NUUkwgMHgwMQogI2RlZmluZSBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0ggMHgwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwppbmRleCAxOWQ1ZTM1Li5mZDZjZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwpAQCAtMSw3ICsxLDcgQEAKLS8qCisgLyoKICAqIFVTQiBEcml2ZXIgZm9yIEFMaSBtNTYwMiBiYXNlZCB3ZWJjYW1zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0yNiw3ICsyNiw2IEBACiBpbnQgZm9yY2Vfc2Vuc29yOwogaW50IGR1bXBfYnJpZGdlOwogaW50IGR1bXBfc2Vuc29yOwotdW5zaWduZWQgaW50IG01NjAyX2RlYnVnOwogCiBzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtNTYwMl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQwMiwgMHg1NjAyKX0sCkBAIC00OCw3ICs0Nyw3IEBACiAJCQkgICAgICAxLCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOwogCSppMmNfZGF0YSA9IGJ1ZlswXTsKIAotCVBERUJVRyhEQkdfVFJBQ0UsICJSZWFkaW5nIGJyaWRnZSByZWdpc3RlciAweCV4IGNvbnRhaW5pbmcgMHgleCIsCisJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgYnJpZGdlIHJlZ2lzdGVyIDB4JXggY29udGFpbmluZyAweCV4IiwKIAkgICAgICAgYWRkcmVzcywgKmkyY19kYXRhKTsKIAogCS8qIHVzYl9jb250cm9sX21zZyguLi4pIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzZW50IHVwb24gc3VjY2VzcywKQEAgLTYzLDcgKzYyLDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OwogCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKIAotCVBERUJVRyhEQkdfVFJBQ0UsICJXcml0aW5nIGJyaWRnZSByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgYnJpZGdlIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKIAkgICAgICAgYWRkcmVzcywgaTJjX2RhdGEpOwogCiAJbWVtY3B5KGJ1ZiwgYnJpZGdlX3VyYl9za2VsZXRvbiwKQEAgLTkxLDcgKzkwLDggQEAKIAkJbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIGksICZ2YWwpOwogCQlpbmZvKCJBTGkgbTU2MDIgYWRkcmVzcyAweCV4IGNvbnRhaW5zIDB4JXgiLCBpLCB2YWwpOwogCX0KLQlpbmZvKCJXYXJuaW5nOiBUaGUgY2FtZXJhIHByb2JhYmx5IHdvbid0IHdvcmsgdW50aWwgaXQncyBwb3dlciBjeWNsZWQiKTsKKwlpbmZvKCJXYXJuaW5nOiBUaGUgQUxpIG01NjAyIHdlYmNhbSBwcm9iYWJseSB3b24ndCB3b3JrICIKKwkJInVudGlsIGl0J3MgcG93ZXIgY3ljbGVkIik7CiB9CiAKIHN0YXRpYyBpbnQgbTU2MDJfcHJvYmVfc2Vuc29yKHN0cnVjdCBzZCAqc2QpCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVFJBQ0UsICJJbml0aWFsaXppbmcgQUxpIG01NjAyIHdlYmNhbSIpOworCVBERUJVRyhEX0NPTkYsICJJbml0aWFsaXppbmcgQUxpIG01NjAyIHdlYmNhbSIpOwogCS8qIFJ1biB0aGUgaW5pdCBzZXF1ZW5jZSAqLwogCWVyciA9IHNkLT5zZW5zb3ItPmluaXQoc2QpOwogCkBAIC0xNDYsMTYgKzE0NiwxOCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisJaW50IGVycjsKIAogCS8qIFNlbmQgc3RhcnQgY29tbWFuZCB0byB0aGUgY2FtZXJhICovCiAJY29uc3QgdTggYnVmZmVyWzRdID0gezB4MTMsIDB4ZjksIDB4MGYsIDB4MDF9OwogCW1lbWNweShidWYsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCTB4MDQsIDB4NDAsIDB4MTksIDB4MDAwMCwgYnVmLAotCQkJNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwgMHgwMDAwLCBidWYsCisJCQkgICAgICA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOwogCi0JUERFQlVHKERCR19WNEwyLCAiVHJhbnNmZXIgc3RhcnRlZCIpOwotCXJldHVybiAwOworCVBERUJVRyhEX1NUUkVBTSwgIlRyYW5zZmVyIHN0YXJ0ZWQiKTsKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIAogc3RhdGljIHZvaWQgbTU2MDJfdXJiX2NvbXBsZXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE2NSwxNCArMTY3LDE0IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJaWYgKGxlbiA8IDYpIHsKLQkJUERFQlVHKERCR19EQVRBLCAiUGFja2V0IGlzIGxlc3MgdGhhbiA2IGJ5dGVzIik7CisJCVBERUJVRyhEX1BBQ0ssICJQYWNrZXQgaXMgbGVzcyB0aGFuIDYgYnl0ZXMiKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEZyYW1lIGRlbGltaXRlcjogZmYgeHggeHggeHggZmYgZmYgKi8KIAlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbNF0gPT0gMHhmZiAmJiBkYXRhWzVdID09IDB4ZmYgJiYKIAkgICAgZGF0YVsyXSAhPSBzZC0+ZnJhbWVfaWQpIHsKLQkJUERFQlVHKERCR19EQVRBLCAiRnJhbWUgZGVsaW1pdGVyIGRldGVjdGVkIik7CisJCVBERUJVRyhEX0ZSQU0sICJGcmFtZSBkZWxpbWl0ZXIgZGV0ZWN0ZWQiKTsKIAkJc2QtPmZyYW1lX2lkID0gZGF0YVsyXTsKIAogCQkvKiBSZW1vdmUgdGhlIGV4dHJhIGZsdWZmIGFwcGVuZGVkIG9uIGVhY2ggaGVhZGVyICovCkBAIC0xODcsNyArMTg5LDcgQEAKIAkJLyogQ3JlYXRlIGEgbmV3IGZyYW1lICovCiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CiAKLQkJUERFQlVHKERCR19WNEwyLCAiU3RhcnRpbmcgbmV3IGZyYW1lICVkIiwKKwkJUERFQlVHKERfRlJBTSwgIlN0YXJ0aW5nIG5ldyBmcmFtZSAlZCIsCiAJCSAgICAgICBzZC0+ZnJhbWVfY291bnQpOwogCiAJfSBlbHNlIHsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCQlsZW4gLT0gNDsKIAogCQlpZiAoY3VyX2ZyYW1lX2xlbiArIGxlbiA8PSBmcmFtZS0+djRsMl9idWYubGVuZ3RoKSB7Ci0JCQlQREVCVUcoREJHX0RBVEEsICJDb250aW51aW5nIGZyYW1lICVkIGNvcHlpbmcgJWQgYnl0ZXMiLAorCQkJUERFQlVHKERfRlJBTSwgIkNvbnRpbnVpbmcgZnJhbWUgJWQgY29weWluZyAlZCBieXRlcyIsCiAJCQkgICAgICAgc2QtPmZyYW1lX2NvdW50LCBsZW4pOwogCiAJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLApAQCAtMjM0LDggKzIzNiw2IEBACiAJc3RydWN0IGNhbSAqY2FtOwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX0dTUENBLCAibTU2MDJfY29uZmlndXJlIHN0YXJ0Iik7Ci0KIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAJY2FtLT5lcGFkZHIgPSBNNTYwMl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSAmc2RfZGVzYzsKQEAgLTI0OCwxMSArMjQ4LDEwIEBACiAJaWYgKGVycikKIAkJZ290byBmYWlsOwogCi0JUERFQlVHKERCR19HU1BDQSwgIm01NjAyX2NvbmZpZ3VyZSBlbmQiKTsKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlQREVCVUcoREJHX0dTUENBLCAibTU2MDJfY29uZmlndXJlIGZhaWxlZCIpOworCVBERUJVRyhEX0VSUiwgIkFMaSBtNTYwMiB3ZWJjYW0gZmFpbGVkIik7CiAJY2FtLT5jYW1fbW9kZSA9IE5VTEw7CiAJY2FtLT5ubW9kZXMgPSAwOwogCkBAIC0yODIsMTMgKzI4MSwxMyBAQAogewogCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQogCQlyZXR1cm4gLTE7Ci0JUERFQlVHKERfUFJPQkUsICJtNTYwMiBtb2R1bGUgcmVnaXN0ZXJlZCIpOworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQogc3RhdGljIHZvaWQgX19leGl0IG1vZF9tNTYwMl9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7Ci0JUERFQlVHKERfUFJPQkUsICJtNTYwMiBtb2R1bGUgZGVyZWdpc3RlcmVkIik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKIH0KIAogbW9kdWxlX2luaXQobW9kX201NjAyX2luaXQpOwpAQCAtMjk3LDkgKzI5Niw2IEBACiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgbTU2MDJfZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInRvZ2dsZXMgZGVidWcgb24vb2ZmIik7Ci0KIG1vZHVsZV9wYXJhbShmb3JjZV9zZW5zb3IsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9zZW5zb3IsCiAJCSJmb3JjZSBkZXRlY3Rpb24gb2Ygc2Vuc29yLCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCmluZGV4IDU2NmQ0OTIuLmZiNzAwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIG10OW0xMTEgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0xMDcsNyArMTA3LDcgQEAKIAllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCiAJCQkJICBkYXRhLCAyKTsKIAkqdmFsID0gZGF0YVswXSAmIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTExOCw3ICsxMTgsNyBAQAogCXU4IGRhdGFbMl0gPSB7MHgwMCwgMHgwMH07CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOwogCiAJLyogU2V0IHRoZSBjb3JyZWN0IHBhZ2UgbWFwICovCiAJZXJyID0gbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfUEFHRV9NQVAsIGRhdGEsIDIpOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJZXJyID0gbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLAogCQkJCSAgZGF0YSwgMik7CiAJKnZhbCA9IGRhdGFbMF0gJiBNVDlNMTExX1JNQl9NSVJST1JfQ09MUzsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMTU2LDcgKzE1Niw3IEBACiAJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLCB2YWwpOwogCiAJLyogU2V0IHRoZSBjb3JyZWN0IHBhZ2UgbWFwICovCiAJZXJyID0gbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfUEFHRV9NQVAsIGRhdGEsIDIpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJICAgICAgKCh0bXAgJiAoMSA8PCAgOCkpICogMikgfAogCSAgICAgICAodG1wICYgMHg3Zik7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yMjIsNyArMjIyLDcgQEAKIAogCWRhdGFbMV0gPSAodG1wICYgMHhmZjAwKSA+PiA4OwogCWRhdGFbMF0gPSAodG1wICYgMHhmZik7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgInRtcD0lZCwgZGF0YVsxXT0lZCwgZGF0YVswXT0lZCIsIHRtcCwKKwlQREVCVUcoRF9WNEwyLCAidG1wPSVkLCBkYXRhWzFdPSVkLCBkYXRhWzBdPSVkIiwgdG1wLAogCSAgICAgICBkYXRhWzFdLCBkYXRhWzBdKTsKIAogCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX0dMT0JBTF9HQUlOLApAQCAtMjU3LDcgKzI1Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxlbiAmJiAhZXJyOyBpKyspIHsKIAkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CiAKLQkJUERFQlVHKERCR19UUkFDRSwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKIAkJICAgICAgICIweCV4IGNvbnRhaW5zIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKIAl9CiBvdXQ6CkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CiAJCXBbM10gPSBpMmNfZGF0YVtpXTsKIAkJcCArPSA0OwotCQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAogCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuaAppbmRleCA3OWE1ZDg4Li4zMTUyMDlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgbXQ5bTExMSBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTgyLDcgKzgyLDYgQEAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CiBleHRlcm4gaW50IGR1bXBfc2Vuc29yOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKIAogaW50IG10OW0xMTFfcHJvYmUoc3RydWN0IHNkICpzZCk7CiBpbnQgbXQ5bTExMV9pbml0KHN0cnVjdCBzZCAqc2QpOwpAQCAtMTUyLDggKzE1MSw4IEBACiAJCQkuZGVmYXVsdF92YWx1ZSAgPSBERUZBVUxUX0dBSU4sCiAJCQkuZmxhZ3MgICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKIAkJfSwKLQkJLnNldCA9IG10OW0xMTFfc2V0X2hmbGlwLAotCQkuZ2V0ID0gbXQ5bTExMV9nZXRfaGZsaXAKKwkJLnNldCA9IG10OW0xMTFfc2V0X2dhaW4sCisJCS5nZXQgPSBtdDltMTExX2dldF9nYWluCiAJfQogCX0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCmluZGV4IDMxYzU4OTYuLjgzN2M3ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgb3Y5NjUwIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtNDAsNyArNDAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKIAotCQlQREVCVUcoREJHX1RSQUNFLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgogCQkJCSIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOwogCX0KIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTcyLDcgKzcyLDcgQEAKIAkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CiAJCXBbM10gPSBpMmNfZGF0YVtpXTsKIAkJcCArPSA0OwotCQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAogCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwogCX0KIApAQCAtMTk5LDcgKzE5OSw3IEBACiAJCWdvdG8gb3V0OwogCSp2YWwgfD0gKGkyY19kYXRhICYgMHgzZikgPDwgMTA7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGV4cG9zdXJlICVkIiwgKnZhbCk7CiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yMTAsNyArMjEwLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBleHBvc3VyZSB0byAlZCIsCisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsCiAJICAgICAgIHZhbCAmIDB4ZmZmZik7CiAKIAkvKiBUaGUgNiBNU0JzICovCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7CiAJKnZhbCB8PSBpMmNfZGF0YTsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCkBAIC0yODAsNyArMjgwLDcgQEAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9SRUQsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IGkyY19kYXRhOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgcmVkIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCByZWQgZ2FpbiAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yOTEsNyArMjkxLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IHJlZCBnYWluIHRvICVkIiwKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHJlZCBnYWluIHRvICVkIiwKIAkJCSAgICAgdmFsICYgMHhmZik7CiAKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CkBAIC0zMDksNyArMzA5LDcgQEAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9CTFVFLCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSBpMmNfZGF0YTsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGJsdWUgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGJsdWUgZ2FpbiAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0zMjAsNyArMzIwLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGJsdWUgZ2FpbiB0byAlZCIsCisJUERFQlVHKERfVjRMMiwgIlNldCBibHVlIGdhaW4gdG8gJWQiLAogCSAgICAgICB2YWwgJiAweGZmKTsKIAogCWkyY19kYXRhID0gdmFsICYgMHhmZjsKQEAgLTM0MCw3ICszNDAsNyBAQAogCQkqdmFsID0gKChpMmNfZGF0YSAmIE9WOTY1MF9IRkxJUCkgPj4gNSkgPyAwIDogMTsKIAllbHNlCiAJCSp2YWwgPSAoaTJjX2RhdGEgJiBPVjk2NTBfSEZMSVApID4+IDU7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTM1MSw3ICszNTEsNyBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zNzksNyArMzc5LDcgQEAKIAkJKnZhbCA9ICgoaTJjX2RhdGEgJiAweDEwKSA+PiA0KSA/IDAgOiAxOwogCWVsc2UKIAkJKnZhbCA9IChpMmNfZGF0YSAmIDB4MTApID4+IDQ7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMzkwLDcgKzM5MCw3IEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOwogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtNDIwLDcgKzQyMCw3IEBACiAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgfD0gaTJjX2RhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKIG91dDoKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTQzMSw3ICs0MzEsNyBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgZ2FpbiB0byAlZCIsIHZhbCAmIDB4M2ZmKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGdhaW4gdG8gJWQiLCB2YWwgJiAweDNmZik7CiAKIAkvKiBSZWFkIHRoZSBPVjk2NTBfVlJFRiByZWdpc3RlciBmaXJzdCB0byBhdm9pZAogCQljb3JydXB0aW5nIHRoZSBWUkVGIGhpZ2ggYW5kIGxvdyBiaXRzICovCkBAIC00NjEsNyArNDYxLDcgQEAKIAogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BV0JfRU4pID4+IDE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgYXV0byB3aGl0ZSBiYWxhbmNlICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byB3aGl0ZSBiYWxhbmNlICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTQ3Miw3ICs0NzIsNyBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgYXV0byB3aGl0ZSBiYWxhbmNlIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gd2hpdGUgYmFsYW5jZSB0byAlZCIsIHZhbCk7CiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC00OTEsNyArNDkxLDcgQEAKIAogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BR0NfRU4pID4+IDI7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgYXV0byBnYWluIGNvbnRyb2wgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBhdXRvIGdhaW4gY29udHJvbCAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC01MDIsNyArNTAyLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGF1dG8gZ2FpbiBjb250cm9sIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gZ2FpbiBjb250cm9sIHRvICVkIiwgdmFsKTsKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oCmluZGV4IDJmMjljYjAuLjA2NTYzMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBvdjk2NTAgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0xMjEsNyArMTIxLDYgQEAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CiBleHRlcm4gaW50IGR1bXBfc2Vuc29yOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKIAogaW50IG92OTY1MF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKIGludCBvdjk2NTBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCmluZGV4IDA4YzAxNWIuLmQxN2FjNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBwbzEwMzAgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC04Miw3ICs4Miw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREFUQSwgJihpMmNfZGF0YVtpXSkpOwogCi0JCVBERUJVRyhEQkdfVFJBQ0UsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCisJCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCiAJCQkJIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CiAJfQogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOwogCQlwWzNdID0gaTJjX2RhdGFbaV07CiAJCXAgKz0gNDsKLQkJUERFQlVHKERCR19UUkFDRSwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKIAkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKIAl9CiAKQEAgLTE4NSw3ICsxODUsNyBAQAogCQkJCSAmaTJjX2RhdGEsIDEpOwogCSp2YWwgfD0gaTJjX2RhdGE7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiRXhwb3N1cmUgcmVhZCBhcyAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJFeHBvc3VyZSByZWFkIGFzICVkIiwgKnZhbCk7CiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0xOTYsMTAgKzE5NiwxMCBAQAogCXU4IGkyY19kYXRhOwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gJWQiLCB2YWwgJiAweGZmZmYpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gJWQiLCB2YWwgJiAweGZmZmYpOwogCiAJaTJjX2RhdGEgPSAoKHZhbCAmIDB4ZmYwMCkgPj4gOCk7Ci0JUERFQlVHKERCR19WNEwyLCAiU2V0IGV4cG9zdXJlIHRvIGhpZ2ggYnl0ZSB0byAweCV4IiwKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvIGhpZ2ggYnl0ZSB0byAweCV4IiwKIAkgICAgICAgaTJjX2RhdGEpOwogCiAJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX0gsCkBAIC0yMDgsNyArMjA4LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlpMmNfZGF0YSA9ICh2YWwgJiAweGZmKTsKLQlQREVCVUcoREJHX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gbG93IGJ5dGUgdG8gMHgleCIsCisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byBsb3cgYnl0ZSB0byAweCV4IiwKIAkgICAgICAgaTJjX2RhdGEpOwogCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19NLAogCQkJCSAgJmkyY19kYXRhLCAxKTsKQEAgLTIyNiw3ICsyMjYsNzEgQEAKIAllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfR0xPQkFMR0FJTiwKIAkJCQkgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZ2xvYmFsIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnbG9iYWwgZ2FpbiAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19DT05UUk9MMiwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKworCSp2YWwgPSAoaTJjX2RhdGEgPj4gNykgJiAweDAxIDsKKworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhmbGlwICVkIiwgdmFsKTsKKworCWkyY19kYXRhID0gKHZhbCAmIDB4MDEpIDw8IDc7CisKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAorCQkJCSAgJmkyY19kYXRhLCAxKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfR0xPQkFMR0FJTiwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKworCSp2YWwgPSAoaTJjX2RhdGEgPj4gNikgJiAweDAxOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmZsaXAgJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgdmZsaXAgJWQiLCB2YWwpOworCisJaTJjX2RhdGEgPSAodmFsICYgMHgwMSkgPDwgNjsKKworCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsCisJCQkJICAmaTJjX2RhdGEsIDEpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yMzgsNyArMzAyLDcgQEAKIAlpbnQgZXJyOwogCiAJaTJjX2RhdGEgPSB2YWwgJiAweGZmOwotCVBERUJVRyhEQkdfVjRMMiwgIlNldCBnbG9iYWwgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGdsb2JhbCBnYWluIHRvICVkIiwgaTJjX2RhdGEpOwogCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfR0xPQkFMR0FJTiwKIAkJCQkgICZpMmNfZGF0YSwgMSk7CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC0yNTMsNyArMzE3LDcgQEAKIAllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfUkVEX0dBSU4sCiAJCQkJICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IGkyY19kYXRhOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIHJlZCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgcmVkIGdhaW4gJWQiLCAqdmFsKTsKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIApAQCAtMjY0LDcgKzMyOCw3IEBACiAJaW50IGVycjsKIAogCWkyY19kYXRhID0gdmFsICYgMHhmZjsKLQlQREVCVUcoREJHX1Y0TDIsICJTZXQgcmVkIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CisJUERFQlVHKERfVjRMMiwgIlNldCByZWQgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKIAllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX1JFRF9HQUlOLAogCQkJCSAgJmkyY19kYXRhLCAxKTsKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTI3OSw3ICszNDMsNyBAQAogCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19CTFVFX0dBSU4sCiAJCQkJICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IGkyY19kYXRhOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGJsdWUgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGJsdWUgZ2FpbiAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yOTAsNyArMzU0LDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlpbnQgZXJyOwogCWkyY19kYXRhID0gdmFsICYgMHhmZjsKLQlQREVCVUcoREJHX1Y0TDIsICJTZXQgYmx1ZSBnYWluIHRvICVkIiwgaTJjX2RhdGEpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgYmx1ZSBnYWluIHRvICVkIiwgaTJjX2RhdGEpOwogCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQkxVRV9HQUlOLAogCQkJCSAgJmkyY19kYXRhLCAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmgKaW5kZXggNjhmMzRjOS4uYTBiNzVmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oCkBAIC0xLDggKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIHBvMTAzMCBzZW5zb3IuCi0gKiBUaGlzIGlzIHByb2JhYmx5IGEgcGl4ZWwgcGx1cyBzZW5zb3IgYnV0IHdlIGhhdmVuJ3QgaWRlbnRpZmllZCBpdCB5ZXQKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoYykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTEwOSwxMCArMTA4LDEzIEBACiAjZGVmaW5lIFBPMTAzMF9SRUdfWUNPTlRSQVNUCQkweDc0CiAjZGVmaW5lIFBPMTAzMF9SRUdfWVNBVFVSQVRJT04JCTB4NzUKIAorI2RlZmluZSBQTzEwMzBfSEZMSVAJCQkoMSA8PCA3KQorI2RlZmluZSBQTzEwMzBfVkZMSVAJCQkoMSA8PCA2KQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgUE8xMDMwX0dMT0JBTF9HQUlOX0RFRkFVTFQJMHgxMgotI2RlZmluZSBQTzEwMzBfRVhQT1NVUkVfREVGQVVMVAkJMHhmMGZmCisjZGVmaW5lIFBPMTAzMF9FWFBPU1VSRV9ERUZBVUxUCQkweDAwODUKICNkZWZpbmUgUE8xMDMwX0JMVUVfR0FJTl9ERUZBVUxUIAkweDQwCiAjZGVmaW5lIFBPMTAzMF9SRURfR0FJTl9ERUZBVUxUIAkweDQwCiAKQEAgLTEyMSw3ICsxMjMsNiBAQAogLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKIGV4dGVybiBpbnQgZHVtcF9zZW5zb3I7Ci1leHRlcm4gdW5zaWduZWQgaW50IG01NjAyX2RlYnVnOwogCiBpbnQgcG8xMDMwX3Byb2JlKHN0cnVjdCBzZCAqc2QpOwogaW50IHBvMTAzMF9pbml0KHN0cnVjdCBzZCAqc2QpOwpAQCAtMTQyLDYgKzE0MywxMCBAQAogaW50IHBvMTAzMF9zZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogaW50IHBvMTAzMF9nZXRfYmx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBpbnQgcG8xMDMwX3NldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHBvMTAzMF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBwbzEwMzBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBwbzEwMzBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgcG8xMDMwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiAKIHN0YXRpYyBzdHJ1Y3QgbTU2MDJfc2Vuc29yIHBvMTAzMCA9IHsKIAkubmFtZSA9ICJQTzEwMzAiLApAQCAtMTUyLDcgKzE1Nyw3IEBACiAJLmluaXQgPSBwbzEwMzBfaW5pdCwKIAkucG93ZXJfZG93biA9IHBvMTAzMF9wb3dlcl9kb3duLAogCi0JLm5jdHJscyA9IDQsCisJLm5jdHJscyA9IDYsCiAJLmN0cmxzID0gewogCXsKIAkJewpAQCAtMTYwLDcgKzE2NSw3IEBACiAJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJCS5uYW1lIAkJPSAiZ2FpbiIsCiAJCQkubWluaW11bSAJPSAweDAwLAotCQkJLm1heGltdW0gCT0gMHhmZiwKKwkJCS5tYXhpbXVtIAk9IDB4NGYsCiAJCQkuc3RlcCAJCT0gMHgxLAogCQkJLmRlZmF1bHRfdmFsdWUgCT0gUE8xMDMwX0dMT0JBTF9HQUlOX0RFRkFVTFQsCiAJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKQEAgLTE3Myw3ICsxNzgsNyBAQAogCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCQkubmFtZSAJCT0gImV4cG9zdXJlIiwKIAkJCS5taW5pbXVtIAk9IDB4MDAsCi0JCQkubWF4aW11bSAJPSAweGZmZmYsCisJCQkubWF4aW11bSAJPSAweDAyZmYsCiAJCQkuc3RlcCAJCT0gMHgxLAogCQkJLmRlZmF1bHRfdmFsdWUgCT0gUE8xMDMwX0VYUE9TVVJFX0RFRkFVTFQsCiAJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKQEAgLTIwNiw4ICsyMTEsMzMgQEAKIAkJfSwKIAkJLnNldCA9IHBvMTAzMF9zZXRfYmx1ZV9iYWxhbmNlLAogCQkuZ2V0ID0gcG8xMDMwX2dldF9ibHVlX2JhbGFuY2UKKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfSEZMSVAsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lIAkJPSAiaG9yaXpvbnRhbCBmbGlwIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwLAorCQl9LAorCQkuc2V0ID0gcG8xMDMwX3NldF9oZmxpcCwKKwkJLmdldCA9IHBvMTAzMF9nZXRfaGZsaXAKKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfVkZMSVAsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lIAkJPSAidmVydGljYWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMCwKKwkJfSwKKwkJLnNldCA9IHBvMTAzMF9zZXRfdmZsaXAsCisJCS5nZXQgPSBwbzEwMzBfZ2V0X3ZmbGlwCiAJfQogCX0sCisKIAkubm1vZGVzID0gMSwKIAkubW9kZXMgPSB7CiAJewpAQCAtMzgxLDcgKzQxMSw3IEBACiAKIAkvKiBTZXQgdGhlIHkgd2luZG93IHRvIDEgKi8KIAl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1lfSCwgMHgwMH0sCi0Je1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dYX0wsIDB4MDF9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XWV9MLCAweDAxfSwKIAogCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XV0lEVEhfSCwgMHgwMn0sCiAJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dXSURUSF9MLCAweDg3fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCmluZGV4IDY4MjAyNTYuLjE0YjFlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBzNWs0YWEgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlmb3IgKGkgPSAwOyAoaSA8IGxlbikgJiAhZXJyOyBpKyspIHsKIAkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CiAKLQkJUERFQlVHKERCR19UUkFDRSwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKIAkJCQkgICIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOwogCX0KIG91dDoKQEAgLTE1MCw3ICsxNTAsNyBAQAogCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKIAkJcFszXSA9IGkyY19kYXRhW2ldOwogCQlwICs9IDQ7Ci0JCVBERUJVRyhEQkdfVFJBQ0UsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCiAJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CiAJfQogCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkqdmFsID0gZGF0YSA8PCA4OwogCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0VYUE9TVVJFX0xPLCAmZGF0YSwgMSk7CiAJKnZhbCB8PSBkYXRhOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGV4cG9zdXJlICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZXhwb3N1cmUgJWQiLCAqdmFsKTsKIG91dDoKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTI1OSw3ICsyNTksNyBAQAogCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBleHBvc3VyZSB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsIHZhbCk7CiAJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMjg1LDcgKzI4NSw3IEBACiAKIAllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCSp2YWwgPSAoZGF0YSAmIFM1SzRBQV9STV9WX0ZMSVApID4+IDc7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKIAogb3V0OgogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CiAJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMzQxLDcgKzM0MSw3IEBACiAKIAllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCSp2YWwgPSAoZGF0YSAmIFM1SzRBQV9STV9IX0ZMSVApID4+IDY7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0zNTIsNyArMzUyLDcgQEAKIAl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsCiAJICAgICAgIHZhbCk7CiAJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCkBAIC0zOTcsNyArMzk3LDcgQEAKIAogCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0dBSU5fMiwgJmRhdGEsIDEpOwogCSp2YWwgPSBkYXRhOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CiAKIG91dDoKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTQwOSw3ICs0MDksNyBAQAogCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBnYWluIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGdhaW4gdG8gJWQiLCB2YWwpOwogCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oCmluZGV4IGJiN2Y3ZTMuLmVhZWY2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBzNWs0YWEgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC02Myw3ICs2Myw2IEBACiAvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOwogZXh0ZXJuIGludCBkdW1wX3NlbnNvcjsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbTU2MDJfZGVidWc7CiAKIGludCBzNWs0YWFfcHJvYmUoc3RydWN0IHNkICpzZCk7CiBpbnQgczVrNGFhX2luaXQoc3RydWN0IHNkICpzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwppbmRleCBiNGIzM2MyLi44OTg4YTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgczVrODNhIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMTAxLDcgKzEwMSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxlbiAmJiAhbGVuOyBpKyspIHsKIAkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CiAKLQkJUERFQlVHKERCR19UUkFDRSwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKIAkJCQkgICIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOwogCX0KIApAQCAtMTM1LDcgKzEzNSw3IEBACiAJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOwogCQlwWzNdID0gaTJjX2RhdGFbaV07CiAJCXAgKz0gNDsKLQkJUERFQlVHKERCR19UUkFDRSwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKIAkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5oCmluZGV4IDgzMzcwOGUuLmVlM2VlOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBzNWs4M2Egc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC00MSw4ICs0MSw2IEBACiAvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOwogZXh0ZXJuIGludCBkdW1wX3NlbnNvcjsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbTU2MDJfZGVidWc7Ci0KIAogaW50IHM1azgzYV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKIGludCBzNWs4M2FfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3NlbnNvci5oCmluZGV4IDkzMGZjYWEuLjYwYzlhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBVU0IgRHJpdmVyIGZvciBBTGkgbTU2MDIgYmFzZWQgd2ViY2FtcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCBiNTYxZjdjLi5lYWMyNDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtNTAsNyArNTAsNyBAQAogCiAJX191OCBzZW5zb3I7CiAjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAwCi0jZGVmaW5lIFNFTlNPUl9PVEhFUiAxCisjZGVmaW5lIFNFTlNPUl9PTTY4MDIgMQogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDEsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDAsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0d2hpdGViYWxhbmNlLAogCSAuZ2V0ID0gc2RfZ2V0d2hpdGViYWxhbmNlCkBAIC0yNjEsNiArMjYxLDU5IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCisvKiBzZW5zb3Igc3BlY2lmaWMgZGF0YSAqLworc3RydWN0IGFkZGl0aW9uYWxfc2Vuc29yX2RhdGEgeworCWNvbnN0IF9fdTggZGF0YTFbMjBdOworCWNvbnN0IF9fdTggZGF0YTJbMThdOworCWNvbnN0IF9fdTggZGF0YTNbMThdOworCWNvbnN0IF9fdTggZGF0YTRbNF07CisJY29uc3QgX191OCBkYXRhNVs2XTsKKwljb25zdCBfX3U4IHN0cmVhbVs0XTsKK307CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSBzZW5zb3JfZGF0YVtdID0geworICAgIHsJCQkJLyogVEFTNTEzMEEgKi8KKwkuZGF0YTEgPQorCQl7MHhkMCwgMHhiYiwgMHhkMSwgMHgyOCwgMHhkMiwgMHgxMCwgMHhkMywgMHgxMCwKKwkJIDB4ZDQsIDB4YmIsIDB4ZDUsIDB4MjgsIDB4ZDYsIDB4MWUsIDB4ZDcsIDB4MjcsCisJCSAweGQ4LCAweGM4LCAweGQ5LCAweGZjfSwKKwkuZGF0YTIgPQorCQl7MHhlMCwgMHg2MCwgMHhlMSwgMHhhOCwgMHhlMiwgMHhlMCwgMHhlMywgMHg2MCwKKwkJIDB4ZTQsIDB4YTgsIDB4ZTUsIDB4ZTAsIDB4ZTYsIDB4NjAsIDB4ZTcsIDB4YTgsCisJCSAweGU4LCAweGUwfSwKKwkuZGF0YTMgPQorCQl7MHhjNywgMHg2MCwgMHhjOCwgMHhhOCwgMHhjOSwgMHhlMCwgMHhjYSwgMHg2MCwKKwkJIDB4Y2IsIDB4YTgsIDB4Y2MsIDB4ZTAsIDB4Y2QsIDB4NjAsIDB4Y2UsIDB4YTgsCisJCSAweGNmLCAweGUwfSwKKwkuZGF0YTQgPQkvKiBGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLworCQl7MHg2NiwgMHgwMCwgMHhhOCwgMHhlOH0sCisJLmRhdGE1ID0KKwkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MTAsIDB4ODEsIDB4MjB9LAorCS5zdHJlYW0gPQorCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg0MH0sCisgICAgfSwKKyAgICB7CQkJCS8qIE9NNjgwMiAqLworCS5kYXRhMSA9CisJCXsweGQwLCAweGMyLCAweGQxLCAweDI4LCAweGQyLCAweDBmLCAweGQzLCAweDIyLAorCQkgMHhkNCwgMHhjZCwgMHhkNSwgMHgyNywgMHhkNiwgMHgyYywgMHhkNywgMHgwNiwKKwkJIDB4ZDgsIDB4YjMsIDB4ZDksIDB4ZmN9LAorCS5kYXRhMiA9CisJCXsweGUwLCAweDgwLCAweGUxLCAweGZmLCAweGUyLCAweGZmLCAweGUzLCAweDgwLAorCQkgMHhlNCwgMHhmZiwgMHhlNSwgMHhmZiwgMHhlNiwgMHg4MCwgMHhlNywgMHhmZiwKKwkJIDB4ZTgsIDB4ZmZ9LAorCS5kYXRhMyA9CisJCXsweGM3LCAweDgwLCAweGM4LCAweGZmLCAweGM5LCAweGZmLCAweGNhLCAweDgwLAorCQkgMHhjYiwgMHhmZiwgMHhjYywgMHhmZiwgMHhjZCwgMHg4MCwgMHhjZSwgMHhmZiwKKwkJIDB4Y2YsIDB4ZmZ9LAorCS5kYXRhNCA9CS8qRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KKwkJezB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjAgfSwKKwkuZGF0YTUgPQkvKiB0aGlzIGNvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgKi8KKwkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MTMsIDB4ODEsIDB4MjN9LAorCS5zdHJlYW0gPQorCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg3OH0sCisgICAgfQorfTsKKwogI2RlZmluZSBNQVhfRUZGRUNUUyA3CiAvKiBlYXNpbHkgZG9uZSBieSBzb2Z0LCB0aGlzIHRhYmxlIGNvdWxkIGJlIHJlbW92ZWQsCiAgKiBpIGtlZXAgaXQgaGVyZSBqdXN0IGluIGNhc2UgKi8KQEAgLTM2NSw2ICs0MTgsOCBAQAogCXt9LAogfTsKIAorc3RhdGljIF9fdTggc2Vuc29yX3Jlc2V0W10gPSB7MHg2MSwgMHg2OCwgMHg2MiwgMHhmZiwgMHg2MCwgMHgwN307CisKIC8qIHJlYWQgMSBieXRlICovCiBzdGF0aWMgaW50IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICAgX191MTYgaW5kZXgpCkBAIC0zODUsMTIgKzQ0MCwxMiBAQAogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQkwLAotCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJMCwgaW5kZXgsCiAJCQlOVUxMLCAwLCA1MDApOwogfQogCi1zdGF0aWMgdm9pZCBpMmNfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIGNvbnN0IF9fdTggKmJ1ZmZlciwgX191MTYgbGVuKQogewogCWlmIChsZW4gPD0gVVNCX0JVRl9TWikgewpAQCAtMzk4LDcgKzQ1Myw3IEBACiAJCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAogCQkJCTAsCi0JCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkJMHgwMSwgMCwKIAkJCQlnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKIAl9IGVsc2UgewpAQCAtNDA5LDE0ICs0NjQsMTUgQEAKIAkJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQkJMCwKLQkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCQkweDAxLCAwLAogCQkJCXRtcGJ1ZiwgbGVuLCA1MDApOwogCQlrZnJlZSh0bXBidWYpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgb3RoZXJfc2Vuc29yX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorLyogUmVwb3J0ZWQgYXMgT002ODAyKi8KK3N0YXRpYyB2b2lkIG9tNjgwMl9zZW5zb3JfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJaW50IGk7CiAJY29uc3QgX191OCAqcDsKQEAgLTQzNiwxOSArNDkyLDMyIEBACiAJCTB4OTAsIDB4MjQsCiAJCTB4OTEsIDB4YjIsCiAJCTB4ODIsIDB4MzIsCi0JCTB4ZmQsIDB4MDAsCi0JCTB4ZmQsIDB4MDEsCiAJCTB4ZmQsIDB4NDEsCiAJCTB4MDAJCQkvKiB0YWJsZSBlbmQgKi8KIAl9OwogCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKKwltc2xlZXAoNSk7CisJaSA9IDQ7CisJd2hpbGUgKC0taSA8IDApIHsKKwkJYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYwKTsKKwkJaWYgKCEoYnl0ZSAmIDB4MDEpKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMDApOworCX0KKwlieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjMpOworCWlmIChieXRlICE9IDB4MTcpIHsKKwkJZXJyKCJCYWQgc2Vuc29yIHJlc2V0ICUwMngiLCBieXRlKTsKKwkJLyogY29udGludWU/ICovCisJfQorCiAJcCA9IHNlbnNvcl9pbml0OwogCXdoaWxlICgqcCAhPSAwKSB7CiAJCXZhbFsxXSA9ICpwKys7CiAJCXZhbFszXSA9ICpwKys7CiAJCWlmICgqcCA9PSAwKQogCQkJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOwotCQlpMmNfdyhnc3BjYV9kZXYsIHZhbCwgc2l6ZW9mIHZhbCk7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHZhbCwgc2l6ZW9mIHZhbCk7CiAJCWkgPSA0OwogCQl3aGlsZSAoLS1pID49IDApIHsKIAkJCW1zbGVlcCgxNSk7CkBAIC00NTcsNyArNTI2LDggQEAKIAkJCQlicmVhazsKIAkJfQogCX0KLQkJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKKwltc2xlZXAoMTUpOworCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpAQCAtNDg1LDEyICs1NTUsNzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOworCV9fdTggc2V0Nls0XSA9IHsgMHg4ZiwgMHgyNCwgMHhjMywgMHgwMCB9OworCisJYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOworCWlmIChicmlnaHRuZXNzIDwgNykgeworCQlzZXQ2WzFdID0gMHgyNjsKKwkJc2V0NlszXSA9IDB4NzAgLSBicmlnaHRuZXNzICogMHgxMDsKKwl9IGVsc2UgeworCQlzZXQ2WzNdID0gMHgwMCArICgoYnJpZ2h0bmVzcyAtIDcpICogMHgxMCk7CisJfQorCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2V0Niwgc2l6ZW9mIHNldDYpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXVuc2lnbmVkIGludCBjb250cmFzdCA9IHNkLT5jb250cmFzdDsKKwlfX3UxNiByZWdfdG9fd3JpdGU7CisKKwlpZiAoY29udHJhc3QgPCA3KQorCQlyZWdfdG9fd3JpdGUgPSAweDhlYTkgLSBjb250cmFzdCAqIDB4MjAwOworCWVsc2UKKwkJcmVnX3RvX3dyaXRlID0gMHgwMGE5ICsgKGNvbnRyYXN0IC0gNykgKiAweDIwMDsKKworCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191MTYgcmVnX3RvX3dyaXRlOworCisJcmVnX3RvX3dyaXRlID0gMHg4MGJiICsgc2QtPmNvbG9ycyAqIDB4MTAwOwkvKiB3YXMgMHhjMCAqLworCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKK30KKwogc3RhdGljIHZvaWQgc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCVBERUJVRyhEX0NPTkYsICJHYW1tYTogJWQiLCBzZC0+Z2FtbWEpOwotCWkyY193KGdzcGNhX2RldiwgZ2FtbWFfdGFibGVbc2QtPmdhbW1hXSwgc2l6ZW9mIGdhbW1hX3RhYmxlWzBdKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBnYW1tYV90YWJsZVtzZC0+Z2FtbWFdLCBzaXplb2YgZ2FtbWFfdGFibGVbMF0pOworfQorCitzdGF0aWMgdm9pZCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCV9fdTggd2hpdGVfYmFsYW5jZVs4XSA9CisJCXsweDg3LCAweDIwLCAweDg4LCAweDIwLCAweDg5LCAweDIwLCAweDgwLCAweDM4fTsKKworCWlmIChzZC0+d2hpdGViYWxhbmNlKQorCQl3aGl0ZV9iYWxhbmNlWzddID0gMHgzYzsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHdoaXRlX2JhbGFuY2UsIHNpemVvZiB3aGl0ZV9iYWxhbmNlKTsKK30KKworc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191MTYgcmVnX3RvX3dyaXRlOworCisJcmVnX3RvX3dyaXRlID0gMHgwYWE2ICsgMHgxMDAwICogc2QtPnNoYXJwbmVzczsKKworCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCkBAIC01MTEsOCArNjQ0LDYgQEAKIAkJCXsweDA4LCAweDAzLCAweDA5LCAweDAzLCAweDEyLCAweDA0fTsKIAlzdGF0aWMgY29uc3QgX191OCBuMltdID0KIAkJCXsweDA4LCAweDAwfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0W10gPQotCQkJeyAweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3IH07CiAJc3RhdGljIGNvbnN0IF9fdTggbjNbXSA9CiAJCQl7MHg2MSwgMHg2OCwgMHg2NSwgMHgwYSwgMHg2MCwgMHgwNH07CiAJc3RhdGljIGNvbnN0IF9fdTggbjRbXSA9CkBAIC01MjUsNTEgKzY1NiwyOSBAQAogCQkgMHg2NSwgMHgwYSwgMHhiYiwgMHg4NiwgMHhhZiwgMHg1OCwgMHhiMCwgMHg2OCwKIAkJIDB4ODcsIDB4NDAsIDB4ODksIDB4MmIsIDB4OGQsIDB4ZmYsIDB4ODMsIDB4NDAsCiAJCSAweGFjLCAweDg0LCAweGFkLCAweDg2LCAweGFmLCAweDQ2fTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0NFtdID0gewotCQkweGUwLCAweDYwLCAweGUxLCAweGE4LCAweGUyLCAweGUwLCAweGUzLCAweDYwLCAweGU0LCAweGE4LAotCQkweGU1LCAweGUwLCAweGU2LCAweDYwLCAweGU3LCAweGE4LAotCQkweGU4LCAweGUwCi0JfTsKLQkvKiBvam8gcHVlZGUgc2VyIDB4ZTYgZW4gdmV6IGRlIDB4ZTkgKi8KLQlzdGF0aWMgY29uc3QgX191OCBuc2V0MltdID0gewotCQkweGQwLCAweGJiLCAweGQxLCAweDI4LCAweGQyLCAweDEwLCAweGQzLCAweDEwLCAweGQ0LCAweGJiLAotCQkweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAotCQkweGQ4LCAweGM4LCAweGQ5LCAweGZjCi0JfTsKLQlzdGF0aWMgY29uc3QgX191OCBtaXNzaW5nW10gPQotCQl7IDB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4MzggfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0M1tdID0gewotCQkweGM3LCAweDYwLCAweGM4LCAweGE4LCAweGM5LCAweGUwLCAweGNhLCAweDYwLCAweGNiLCAweGE4LAotCQkweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAotCQkweGNmLCAweGUwCi0JfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0NVtdID0KLQkJCXsgMHg4ZiwgMHgyNCwgMHhjMywgMHgwMCB9OwkvKiBicmlnaHQgKi8KLQlzdGF0aWMgY29uc3QgX191OCBuc2V0N1s0XSA9Ci0JCQl7IDB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjggfTsJLyogNTAvNjAgSHogKi8KIAlzdGF0aWMgY29uc3QgX191OCBuc2V0OVs0XSA9CiAJCQl7IDB4MGIsIDB4MDQsIDB4MGEsIDB4NzggfTsKIAlzdGF0aWMgY29uc3QgX191OCBuc2V0OFs2XSA9CiAJCQl7IDB4YTgsIDB4ZjAsIDB4YzYsIDB4ODgsIDB4YzAsIDB4MDAgfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0MTBbNl0gPQotCQkJeyAweDBjLCAweDAzLCAweGFiLCAweDEwLCAweDgxLCAweDIwIH07CiAKIAlieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA2KTsKIAl0ZXN0X2J5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDcpOwogCWlmIChieXRlID09IDB4MDggJiYgdGVzdF9ieXRlID09IDB4MDcpIHsKLQkJUERFQlVHKERfQ09ORiwgIm90aGVyIHNlbnNvciIpOwotCQlzZC0+c2Vuc29yID0gU0VOU09SX09USEVSOworCQlQREVCVUcoRF9DT05GLCAic2Vuc29yIG9tNjgwMiIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX09NNjgwMjsKKwl9IGVsc2UgaWYgKGJ5dGUgPT0gMHgwOCAmJiB0ZXN0X2J5dGUgPT0gMHgwMSkgeworCQlQREVCVUcoRF9DT05GLCAic2Vuc29yIHRhczUxMzBhIik7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CiAJfSBlbHNlIHsKLQkJUERFQlVHKERfQ09ORiwgInNlbnNvciAlMDJ4ICUwMngiLCBieXRlLCB0ZXN0X2J5dGUpOworCQlQREVCVUcoRF9DT05GLCAidW5rbm93biBzZW5zb3IgJTAyeCAlMDJ4IiwgYnl0ZSwgdGVzdF9ieXRlKTsKIAkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKIAl9CiAKLQlpMmNfdyhnc3BjYV9kZXYsIG4xLCBzaXplb2YgbjEpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4xLCBzaXplb2YgbjEpOwogCXRlc3RfYnl0ZSA9IDA7CiAJaSA9IDU7CiAJd2hpbGUgKC0taSA+PSAwKSB7Ci0JCWkyY193KGdzcGNhX2RldiwgbnNldCwgc2l6ZW9mIG5zZXQpOwotCQltc2xlZXAoNSk7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7CiAJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKIAkJbXNsZWVwKDEwMCk7CiAJCWlmICh0ZXN0X2J5dGUgPT0gMHgxNykKQEAgLTU4MCw3ICs2ODksNyBAQAogLyoJCXJldHVybiAtRUlPOyAqLwogLypmaXhtZTogdGVzdCAtIGNvbnRpbnVlICovCiAJfQotCWkyY193KGdzcGNhX2RldiwgbjIsIHNpemVvZiBuMik7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjIsIHNpemVvZiBuMik7CiAKIAlpID0gMDsKIAl3aGlsZSAocmVhZF9pbmRleHNbaV0gIT0gMHgwMCkgewpAQCAtNTkwLDU4ICs2OTksNTIgQEAKIAkJaSsrOwogCX0KIAotCWkyY193KGdzcGNhX2RldiwgbjMsIHNpemVvZiBuMyk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuNCwgc2l6ZW9mIG40KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMywgc2l6ZW9mIG4zKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuNCwgc2l6ZW9mIG40KTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDA4MCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDJjODApOwotCWkyY193KGdzcGNhX2RldiwgbnNldDIsIHNpemVvZiBuc2V0Mik7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0Mywgc2l6ZW9mIG5zZXQzKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQ0LCBzaXplb2YgbnNldDQpOworCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CisKIAlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDM4ODApOwogCXJlZ193KGdzcGNhX2RldiwgMHgzMzhlKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQ1LCBzaXplb2YgbnNldDUpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMGE5KTsKKworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOwogCXNldGdhbW1hKGdzcGNhX2Rldik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDg2YmIpOwotCXJlZ193KGdzcGNhX2RldiwgMHg0YWE2KTsKKwlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKIAotCWkyY193KGdzcGNhX2RldiwgbWlzc2luZywgc2l6ZW9mIG1pc3NpbmcpOwotCi0JcmVnX3coZ3NwY2FfZGV2LCAweDIwODcpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMDg3KTsJLyogdGllZCB0byB3aGl0ZSBiYWxhbmNlPyAqLwogCXJlZ193KGdzcGNhX2RldiwgMHgyMDg4KTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4OSk7CiAKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQ3LCBzaXplb2YgbnNldDcpOwotCWkyY193KGdzcGNhX2RldiwgbnNldDEwLCBzaXplb2YgbnNldDEwKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQ4LCBzaXplb2YgbnNldDgpOwotCWkyY193KGdzcGNhX2RldiwgbnNldDksIHNpemVvZiBuc2V0OSk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE1LAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE1KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OSwgc2l6ZW9mIG5zZXQ5KTsKIAogCXJlZ193KGdzcGNhX2RldiwgMHgyODgwKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQyLCBzaXplb2YgbnNldDIpOwotCWkyY193KGdzcGNhX2RldiwgbnNldDMsIHNpemVvZiBuc2V0Myk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0NCwgc2l6ZW9mIG5zZXQ0KTsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMywKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMyk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKLQlfX3U4IHNldDZbNF0gPSB7IDB4OGYsIDB4MjYsIDB4YzMsIDB4MDAgfTsKLQotCWJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKLQlpZiAoYnJpZ2h0bmVzcyA8IDcpIHsKLQkJc2V0NlszXSA9IDB4NzAgLSBicmlnaHRuZXNzICogMHgxMDsKLQl9IGVsc2UgewotCQlzZXQ2WzFdID0gMHgyNDsKLQkJc2V0NlszXSA9IDB4MDAgKyAoKGJyaWdodG5lc3MgLSA3KSAqIDB4MTApOwotCX0KLQotCWkyY193KGdzcGNhX2Rldiwgc2V0Niwgc2l6ZW9mIHNldDYpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC02NTEsMTQgKzc1NCwxNSBAQAogCWlmIChzZC0+bWlycm9yKQogCQlmbGlwY21kWzNdID0gMHgwMTsKIAotCWkyY193KGdzcGNhX2RldiwgZmxpcGNtZCwgc2l6ZW9mIGZsaXBjbWQpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIGZsaXBjbWQsIHNpemVvZiBmbGlwY21kKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0ZWZmZWN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpMmNfdyhnc3BjYV9kZXYsIGVmZmVjdHNfdGFibGVbc2QtPmVmZmVjdF0sIHNpemVvZiBlZmZlY3RzX3RhYmxlWzBdKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBlZmZlY3RzX3RhYmxlW3NkLT5lZmZlY3RdLAorCQkJCXNpemVvZiBlZmZlY3RzX3RhYmxlWzBdKTsKIAlpZiAoc2QtPmVmZmVjdCA9PSAxIHx8IHNkLT5lZmZlY3QgPT0gNSkgewogCQlQREVCVUcoRF9DT05GLAogCQkgICAgICAgIlRoaXMgZWZmZWN0IGhhdmUgYmVlbiBkaXNhYmxlZCBmb3Igd2ViY2FtIFwic2FmZXR5XCIiKTsKQEAgLTY3MSwxOSArNzc1LDYgQEAKIAkJcmVnX3coZ3NwY2FfZGV2LCAweGZhYTYpOwogfQogCi1zdGF0aWMgdm9pZCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCV9fdTggd2hpdGVfYmFsYW5jZVs4XSA9Ci0JICAgIHsgMHg4NywgMHgyMCwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyMCwgMHg4MCwgMHgzOCB9OwotCi0JaWYgKHNkLT53aGl0ZWJhbGFuY2UgPT0gMSkKLQkJd2hpdGVfYmFsYW5jZVs3XSA9IDB4M2M7Ci0KLQlpMmNfdyhnc3BjYV9kZXYsIHdoaXRlX2JhbGFuY2UsIHNpemVvZiB3aGl0ZV9iYWxhbmNlKTsKLX0KLQogc3RhdGljIHZvaWQgc2V0bGlnaHRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC02OTIsNTIgKzc4Myw0NiBAQAogCWlmIChzZC0+ZnJlcSA9PSAyKQkvKiA2MGh6ICovCiAJCWZyZXFbMV0gPSAweDAwOwogCi0JaTJjX3coZ3NwY2FfZGV2LCBmcmVxLCBzaXplb2YgZnJlcSk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgZnJlcSwgc2l6ZW9mIGZyZXEpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCisvKiBJcyB0aGlzIHJlYWxseSBuZWVkZWQ/CisgKiBpIGFkZGVkIHNvbWUgbW9kdWxlIHBhcmFtZXRlcnMgZm9yIHRlc3Qgd2l0aCBzb21lIHVzZXJzICovCitzdGF0aWMgdm9pZCBwb2xsX3NlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXVuc2lnbmVkIGludCBjb250cmFzdCA9IHNkLT5jb250cmFzdDsKLQlfX3UxNiByZWdfdG9fd3JpdGU7CisJc3RhdGljIGNvbnN0IF9fdTggcG9sbDFbXSA9CisJCXsweDY3LCAweDA1LCAweDY4LCAweDgxLCAweDY5LCAweDgwLCAweDZhLCAweDgyLAorCQkgMHg2YiwgMHg2OCwgMHg2YywgMHg2OSwgMHg3MiwgMHhkOSwgMHg3MywgMHgzNCwKKwkJIDB4NzQsIDB4MzIsIDB4NzUsIDB4OTIsIDB4NzYsIDB4MDAsIDB4MDksIDB4MDEsCisJCSAweDYwLCAweDE0fTsKKwlzdGF0aWMgY29uc3QgX191OCBwb2xsMltdID0KKwkJezB4NjcsIDB4MDIsIDB4NjgsIDB4NzEsIDB4NjksIDB4NzIsIDB4NzIsIDB4YTksCisJCSAweDczLCAweDAyLCAweDczLCAweDAyLCAweDYwLCAweDE0fTsKKwlzdGF0aWMgY29uc3QgX191OCBwb2xsM1tdID0KKwkJezB4ODcsIDB4M2YsIDB4ODgsIDB4MjAsIDB4ODksIDB4MmR9OworCXN0YXRpYyBjb25zdCBfX3U4IHBvbGw0W10gPQorCQl7MHhhNiwgMHgwYSwgMHhlYSwgMHhjZiwgMHhiZSwgMHgyNiwgMHhiMSwgMHg1ZiwKKwkJIDB4YTEsIDB4YjEsIDB4ZGEsIDB4NmIsIDB4ZGIsIDB4OTgsIDB4ZGYsIDB4MGMsCisJCSAweGMyLCAweDgwLCAweGMzLCAweDEwfTsKIAotCWlmIChjb250cmFzdCA8IDcpCi0JCXJlZ190b193cml0ZSA9IDB4OGVhOSAtICgweDIwMCAqIGNvbnRyYXN0KTsKLQllbHNlCi0JCXJlZ190b193cml0ZSA9ICgweDAwYTkgKyAoKGNvbnRyYXN0IC0gNykgKiAweDIwMCkpOwotCi0JcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3UxNiByZWdfdG9fd3JpdGU7Ci0KLQlyZWdfdG9fd3JpdGUgPSAweGMwYmIgKyBzZC0+Y29sb3JzICogMHgxMDA7Ci0JcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3UxNiByZWdfdG9fd3JpdGU7Ci0KLQlyZWdfdG9fd3JpdGUgPSAweDBhYTYgKyAweDEwMDAgKiBzZC0+c2hhcnBuZXNzOwotCi0JcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9UQVM1MTMwQSkgeworCQlQREVCVUcoRF9TVFJFQU0sICJbU2Vuc29yIHJlcXVpcmVzIHBvbGxpbmddIik7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwxLCBzaXplb2YgcG9sbDEpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMiwgc2l6ZW9mIHBvbGwyKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDMsIHNpemVvZiBwb2xsMyk7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGw0LCBzaXplb2YgcG9sbDQpOworCX0KIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpLCBtb2RlOwotCXN0YXRpYyBjb25zdCBfX3U4IHQxW10gPSB7IDB4NjYsIDB4MDAsIDB4YTgsIDB4ZTggfTsKIAlfX3U4IHQyW10gPSB7IDB4MDcsIDB4MDAsIDB4MGQsIDB4NjAsIDB4MGUsIDB4ODAgfTsKIAlzdGF0aWMgY29uc3QgX191OCB0M1tdID0KIAkJeyAweGIzLCAweDA3LCAweGI0LCAweDAwLCAweGI1LCAweDg4LCAweGI2LCAweDAyLCAweGI3LCAweDA2LAogCQkgIDB4YjgsIDB4MDAsIDB4YjksIDB4ZTcsIDB4YmEsIDB4MDEgfTsKLQlzdGF0aWMgY29uc3QgX191OCB0NFtdID0geyAweDBiLCAweDA0LCAweDBhLCAweDQwIH07CiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLiBwcml2OwogCXN3aXRjaCAobW9kZSkgewpAQCAtNzYwLDI1ICs4NDUsMjkgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfVEFTNTEzMEEpIHsKIAkJaSA9IDA7CiAJCXdoaWxlICh0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXVswXSAhPSAwKSB7Ci0JCQlpMmNfdyhnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0W2ldLAorCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbaV0sCiAJCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOwogCQkJaSsrOwogCQl9CiAJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKIAkJLyoganVzdCBpbiBjYXNlIGFuZCB0byBrZWVwIHN5bmMgd2l0aCBsb2dzIChmb3IgbWluZSkgKi8KLQkJaTJjX3coZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFszXSwKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sCiAJCQkJIHNpemVvZiB0YXM1MTMwYV9zZW5zb3JfaW5pdFswXSk7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKIAl9IGVsc2UgewotCQlvdGhlcl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOworCQlvbTY4MDJfc2Vuc29yX2luaXQoZ3NwY2FfZGV2KTsKIAl9Ci0JLyoganVzdCBpbiBjYXNlIGFuZCB0byBrZWVwIHN5bmMgd2l0aCBsb2dzICAoZm9yIG1pbmUpICovCi0JaTJjX3coZ3NwY2FfZGV2LCB0MSwgc2l6ZW9mIHQxKTsKLQlpMmNfdyhnc3BjYV9kZXYsIHQyLCBzaXplb2YgdDIpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE0LAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE0KTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMik7Ci0JaTJjX3coZ3NwY2FfZGV2LCB0Mywgc2l6ZW9mIHQzKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCB0Miwgc2l6ZW9mIHQyKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCB0Mywgc2l6ZW9mIHQzKTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAxMyk7Ci0JaTJjX3coZ3NwY2FfZGV2LCB0NCwgc2l6ZW9mIHQ0KTsKKwltc2xlZXAoMTUpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOworCXBvbGxfc2Vuc29yKGdzcGNhX2Rldik7CisKIAkvKiByZXN0YXJ0IG9uIGVhY2ggc3RhcnQsIGp1c3QgaW4gY2FzZSwgc29tZXRpbWVzIHJlZ3MgZ29lcyB3cm9uZwogCSAqIHdoZW4gdXNpbmcgY29udHJvbHMgZnJvbSBhcHAgKi8KIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CkBAIC03ODcsNiArODc2LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKKwltc2xlZXAoMjApOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOworCW1zbGVlcCgyMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAzMDkpOworfQorCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KIAkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KQEAgLTEwMzYsNiArMTEzOCw3IEBACiAJLmNvbmZpZyA9IHNkX2NvbmZpZywKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGFlYWExM2YuLmQzNjQ4NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC0xMjExLDYgKzEyMTEsMTAgQEAKIAogCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7CiAJCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19JTlRfU19TVERfT1VUUFVULCAmaXR2LT5zdGQpOworCQkvKiBUdXJuIG9mZiB0aGUgb3V0cHV0IHNpZ25hbC4gVGhlIG1wZWcgZGVjb2RlciBpcyBub3QgeWV0CisJCSAgIGFjdGl2ZSBzbyB3aXRob3V0IHRoaXMgeW91IHdvdWxkIGdldCBhIGdyZWVuIGltYWdlIHVudGlsIHRoZQorCQkgICBtcGVnIGRlY29kZXIgYmVjb21lcyBhY3RpdmUuICovCisJCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19TVFJFQU1PRkYsIE5VTEwpOwogCX0KIAogCS8qIGNsZWFyIGludGVycnVwdCBtYXNrLCBlZmZlY3RpdmVseSBkaXNhYmxpbmcgaW50ZXJydXB0cyAqLwpAQCAtMTMzMCw2ICsxMzM0LDEwIEBACiAJaXZ0dl9zX2ZyZXF1ZW5jeShOVUxMLCAmZmgsICZ2Zik7CiAKIAlpZiAoaXR2LT5jYXJkLT52NGwyX2NhcGFiaWxpdGllcyAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgeworCQkvKiBUdXJuIG9uIHRoZSBUVi1vdXQ6IGl2dHZfaW5pdF9tcGVnX2RlY29kZXIoKSBpbml0aWFsaXplcworCQkgICB0aGUgbXBlZyBkZWNvZGVyIHNvIG5vdyB0aGUgc2FhNzEyNyByZWNlaXZlcyBhIHByb3BlcgorCQkgICBzaWduYWwuICovCisJCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19TVFJFQU1PTiwgTlVMTCk7CiAJCWl2dHZfaW5pdF9tcGVnX2RlY29kZXIoaXR2KTsKIAl9CiAJaXZ0dl9zX3N0ZChOVUxMLCAmZmgsICZpdHYtPnR1bmVyX3N0ZCk7CkBAIC0xMzY2LDYgKzEzNzQsMTAgQEAKIAogCQkvKiBTdG9wIGFsbCBkZWNvZGluZyAqLwogCQlJVlRWX0RFQlVHX0lORk8oIlN0b3BwaW5nIGRlY29kaW5nXG4iKTsKKworCQkvKiBUdXJuIG9mZiB0aGUgVFYtb3V0ICovCisJCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKQorCQkJaXZ0dl9zYWE3MTI3KGl0diwgVklESU9DX1NUUkVBTU9GRiwgTlVMTCk7CiAJCWlmIChhdG9taWNfcmVhZCgmaXR2LT5kZWNvZGluZykgPiAwKSB7CiAJCQlpbnQgdHlwZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAppbmRleCBiYzI5NDM2Li4zNzMzYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSA8bGludXgvZHZiL3ZpZGVvLmg+CiAjaW5jbHVkZSA8bGludXgvZHZiL2F1ZGlvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggYjc0NTdmYy4uMWM0MDRlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtNjAwLDEzICs2MDAsMTQgQEAKIAlzaW5jZSB3ZSBtYXkgZ2V0IGhlcmUgYmVmb3JlIHRoZSBzdHJlYW0gaGFzIGJlZW4gZnVsbHkgc2V0LXVwICovCiAJaWYgKG1vZGUgPT0gT1VUX1lVViAmJiBzLT5xX2Z1bGwubGVuZ3RoID09IDAgJiYgaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSkgewogCQl3aGlsZSAoY291bnQgPj0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSkgewotCQkJaWYgKCFpdnR2X3l1dl91ZG1hX3N0cmVhbV9mcmFtZSAoaXR2LCAodm9pZCBfX3VzZXIgKil1c2VyX2J1ZikpIHsKLQkJCQlieXRlc193cml0dGVuICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7Ci0JCQkJdXNlcl9idWYgKz0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKLQkJCQljb3VudCAtPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXJjID0gaXZ0dl95dXZfdWRtYV9zdHJlYW1fZnJhbWUoaXR2LCAodm9pZCBfX3VzZXIgKil1c2VyX2J1Zik7CisKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCisJCQlieXRlc193cml0dGVuICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7CisJCQl1c2VyX2J1ZiArPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOworCQkJY291bnQgLT0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKIAkJfQogCQlpZiAoY291bnQgPT0gMCkgewogCQkJSVZUVl9ERUJVR19ISV9GSUxFKCJXcm90ZSAlZCBieXRlcyB0byAlcyAoJWQpXG4iLCBieXRlc193cml0dGVuLCBzLT5uYW1lLCBzLT5xX2Z1bGwuYnl0ZXN1c2VkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKaW5kZXggMjQ3MDBjMi4uNDFkYmJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKQEAgLTcyNiw2ICs3MjYsNyBAQAogewogCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIElWVFZfU0FBNzEyN19JMkNfQUREUiwgY21kLCBhcmcpOwogfQorRVhQT1JUX1NZTUJPTChpdnR2X3NhYTcxMjcpOwogCiBpbnQgaXZ0dl9zYWE3MTd4KHN0cnVjdCBpdnR2ICppdHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IDg2OTY1MjcuLjRiYWUzOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtNTA5LDcgKzUwOSw2IEBACiBzdGF0aWMgaW50IGl2dHZfdHJ5X2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKIAlzMzIgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAlzMzIgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CiAJaW50IGZpZWxkID0gZm10LT5mbXQucGl4LmZpZWxkOwpAQCAtNTE3LDcgKzUxNiwyMiBAQAogCiAJdyA9IG1pbih3LCA3MjApOwogCXcgPSBtYXgodywgMik7Ci0JaCA9IG1pbihoLCBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwKTsKKwkvKiBXaHkgY2FuIHRoZSBoZWlnaHQgYmUgNTc2IGV2ZW4gd2hlbiB0aGUgb3V0cHV0IGlzIE5UU0M/CisKKwkgICBJbnRlcm5hbGx5IHRoZSBidWZmZXJzIG9mIHRoZSBQVlIzNTAgYXJlIGFsd2F5cyBzZXQgdG8gNzIweDU3Ni4gVGhlCisJICAgZGVjb2RlZCB2aWRlbyBmcmFtZSB3aWxsIGFsd2F5cyBiZSBwbGFjZWQgaW4gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZgorCSAgIHRoaXMgYnVmZmVyLiBGb3IgYW55IHZpZGVvIHdoaWNoIGlzIG5vdCA3MjB4NTc2LCB0aGUgYnVmZmVyIHdpbGwKKwkgICB0aGVuIGJlIGNyb3BwZWQgdG8gcmVtb3ZlIHRoZSB1bnVzZWQgcmlnaHQgYW5kIGxvd2VyIGFyZWFzLCB3aXRoCisJICAgdGhlIHJlbWFpbmluZyBpbWFnZSBiZWluZyBzY2FsZWQgYnkgdGhlIGhhcmR3YXJlIHRvIGZpdCB0aGUgZGlzcGxheQorCSAgIGFyZWEuIFRoZSB2aWRlbyBjYW4gYmUgc2NhbGVkIGJvdGggdXAgYW5kIGRvd24sIHNvIGEgNzIweDQ4MCB2aWRlbworCSAgIGNhbiBiZSBkaXNwbGF5ZWQgZnVsbC1zY3JlZW4gb24gUEFMIGFuZCBhIDcyMHg1NzYgdmlkZW8gY2FuIGJlCisJICAgZGlzcGxheWVkIHdpdGhvdXQgY3JvcHBpbmcgb24gTlRTQy4KKworCSAgIE5vdGUgdGhhdCB0aGUgc2NhbGluZyBvbmx5IG9jY3VycyBvbiB0aGUgdmlkZW8gc3RyZWFtLCB0aGUgb3NkCisJICAgcmVzb2x1dGlvbiBpcyBsb2NrZWQgdG8gdGhlIGJyb2FkY2FzdCBzdGFuZGFyZCBhbmQgbm90IHNjYWxlZC4KKworCSAgIFRoYW5rcyB0byBJYW4gQXJtc3Ryb25nIGZvciB0aGlzIGV4cGxhbmF0aW9uLiAqLworCWggPSBtaW4oaCwgNTc2KTsKIAloID0gbWF4KGgsIDIpOwogCWlmIChpZC0+dHlwZSA9PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVYpCiAJCWZtdC0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwpAQCAtMTc0MiwxMiArMTc1NiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl2dHZfc2VyaWFsaXplZF9pb2N0bChzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBsb25nIGl2dHZfc2VyaWFsaXplZF9pb2N0bChzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKIAlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCByZXQ7CisJbG9uZyByZXQ7CiAKIAkvKiBGaWx0ZXIgZHZiIGlvY3RscyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoZSB2NGwgaW9jdGwgZnJhbWV3b3JrICovCiAJc3dpdGNoIChjbWQpIHsKQEAgLTE4MTYsMjAgKzE4MzAsMTkgQEAKIAogCWlmIChpdnR2X2RlYnVnICYgSVZUVl9EQkdGTEdfSU9DVEwpCiAJCXZmZC0+ZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMIHwgVjRMMl9ERUJVR19JT0NUTF9BUkc7Ci0JcmV0ID0gdmlkZW9faW9jdGwyKGlub2RlLCBmaWxwLCBjbWQsIGFyZyk7CisJcmV0ID0gX192aWRlb19pb2N0bDIoZmlscCwgY21kLCBhcmcpOwogCXZmZC0+ZGVidWcgPSAwOwogCXJldHVybiByZXQ7CiB9CiAKLWludCBpdnR2X3Y0bDJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JCSAgICB1bnNpZ25lZCBsb25nIGFyZykKK2xvbmcgaXZ0dl92NGwyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OwotCWludCByZXM7CisJbG9uZyByZXM7CiAKIAltdXRleF9sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKLQlyZXMgPSBpdnR2X3NlcmlhbGl6ZWRfaW9jdGwoaXR2LCBpbm9kZSwgZmlscCwgY21kLCBhcmcpOworCXJlcyA9IGl2dHZfc2VyaWFsaXplZF9pb2N0bChpdHYsIGZpbHAsIGNtZCwgYXJnKTsKIAltdXRleF91bmxvY2soJml0di0+c2VyaWFsaXplX2xvY2spOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaAppbmRleCA3MDE4ODU4Li41OGYwMDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmgKQEAgLTMwLDcgKzMwLDYgQEAKIGludCBpdnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCk7CiBpbnQgaXZ0dl9zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYpOwogaW50IGl2dHZfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnApOwotaW50IGl2dHZfdjRsMl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2xvbmcgaXZ0dl92NGwyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCmluZGV4IDViYmYzMWUuLjliN2FhNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkucmVhZCA9IGl2dHZfdjRsMl9yZWFkLAogCS53cml0ZSA9IGl2dHZfdjRsMl93cml0ZSwKIAkub3BlbiA9IGl2dHZfdjRsMl9vcGVuLAotCS5pb2N0bCA9IGl2dHZfdjRsMl9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBpdnR2X3Y0bDJfaW9jdGwsCiAJLmNvbXBhdF9pb2N0bCA9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkucmVsZWFzZSA9IGl2dHZfdjRsMl9jbG9zZSwKIAkucG9sbCA9IGl2dHZfdjRsMl9lbmNfcG9sbCwKQEAgLTU5LDcgKzU5LDcgQEAKIAkucmVhZCA9IGl2dHZfdjRsMl9yZWFkLAogCS53cml0ZSA9IGl2dHZfdjRsMl93cml0ZSwKIAkub3BlbiA9IGl2dHZfdjRsMl9vcGVuLAotCS5pb2N0bCA9IGl2dHZfdjRsMl9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBpdnR2X3Y0bDJfaW9jdGwsCiAJLmNvbXBhdF9pb2N0bCA9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkucmVsZWFzZSA9IGl2dHZfdjRsMl9jbG9zZSwKIAkucG9sbCA9IGl2dHZfdjRsMl9kZWNfcG9sbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwppbmRleCA4YTRhMTUwLi45MjFlMjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCkBAIC00OCw2ICs0OCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIml2dHYtZHJpdmVyLmgiCisjaW5jbHVkZSAiaXZ0di1pMmMuaCIKICNpbmNsdWRlICJpdnR2LXVkbWEuaCIKICNpbmNsdWRlICJpdnR2LW1haWxib3guaCIKIApAQCAtODk0LDExICs4OTUsMTYgQEAKIAlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKIAljYXNlIEZCX0JMQU5LX1VOQkxBTks6CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9TVEFURSwgMSwgMSk7CisJCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19TVFJFQU1PTiwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfTk9STUFMOgogCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKIAljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9TVEFURSwgMSwgMCk7CisJCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19TVFJFQU1PTiwgTlVMTCk7CisJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCQlpdnR2X3NhYTcxMjcoaXR2LCBWSURJT0NfU1RSRUFNT0ZGLCBOVUxMKTsKIAkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX1NUQVRFLCAxLCAwKTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKaW5kZXggMmZkNGI0YS4uYmFlMmQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCkBAIC0zMywyNyArMzMsMjAgQEAKICAqIFYxLjEgR2VyYXJkIHYuZC4gSG9yc3QgIEFkZGVkIHNvbWUgZGVidWdvdXRwdXQsIHJlc2V0IHRoZSB2aWRlby1zdGFuZGFyZAogICovCiAKLSNpZm5kZWYgX19LRVJORUxfXwotI2RlZmluZSBfX0tFUk5FTF9fCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlICJrczAxMjcuaCIKLQogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlICJrczAxMjcuaCIKIAotI2RlZmluZSBkcHJpbnRrICAgICBpZiAoZGVidWcpIHByaW50awotCi0vKiBpMmMgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKLSNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKK01PRFVMRV9ERVNDUklQVElPTigiS1MwMTI3IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJSeWFuIERyYWtlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgS1NfVFlQRV9VTktOT1dOCTAKICNkZWZpbmUgS1NfVFlQRV8wMTIyUwkxCkBAIC0yMDQsOCArMTk3LDYgQEAKIH07CiAKIHN0cnVjdCBrczAxMjcgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JdW5zaWduZWQgY2hhcglhZGRyOwogCWludAkJZm9ybWF0X3dpZHRoOwogCWludAkJZm9ybWF0X2hlaWdodDsKIAlpbnQJCWNhcF93aWR0aDsKQEAgLTIyMCwxNiArMjExLDE4IEBACiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBvdXRwdXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHU4IHJlZ19kZWZhdWx0c1s2NF07CiAKLQotCiBzdGF0aWMgdm9pZCBpbml0X3JlZ19kZWZhdWx0cyh2b2lkKQogeworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAJdTggKnRhYmxlID0gcmVnX2RlZmF1bHRzOwogCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm47CisJaW5pdGlhbGl6ZWQgPSAxOworCiAJdGFibGVbS1NfQ01EQV0gICAgID0gMHgyYzsgIC8qIFZTRT0wLCBDQ0lSIDYwMSwgYXV0b2RldGVjdCBzdGFuZGFyZCAqLwogCXRhYmxlW0tTX0NNREJdICAgICA9IDB4MTI7ICAvKiBWQUxJR049MCwgQUdDIGNvbnRyb2wgYW5kIGlucHV0ICovCiAJdGFibGVbS1NfQ01EQ10gICAgID0gMHgwMDsgIC8qIFRlc3Qgb3B0aW9ucyAqLwpAQCAtMzA4LDUwICszMDEsNTMgQEAKICAqIEFuIGV4cGxhbmF0aW9uIGZyb20ga2F5b3JrQG1haWwudXRleGFzLmVkdToKICAqCiAgKiBEdXJpbmcgSTJDIHJlYWRzLCB0aGUgS1MwMTI3IG9ubHkgc2FtcGxlcyBmb3IgYSBzdG9wIGNvbmRpdGlvbgotICogZHVyaW5nIHRoZSBwbGFjZSB3aGVyZSB0aGUgYWNrbm9sZWRnZSBiaXQgc2hvdWxkIGJlLiBBbnkgc3RhbmRhcmQKKyAqIGR1cmluZyB0aGUgcGxhY2Ugd2hlcmUgdGhlIGFja25vd2xlZGdlIGJpdCBzaG91bGQgYmUuIEFueSBzdGFuZGFyZAogICogSTJDIGltcGxlbWVudGF0aW9uIChjb3JyZWN0bHkpIHRocm93cyBpbiBhbm90aGVyIGNsb2NrIHRyYW5zaXRpb24KICAqIGF0IHRoZSA5dGggYml0LCBhbmQgdGhlIEtTMDEyNyB3aWxsIG5vdCByZWNvZ25pemUgdGhlIHN0b3AgY29uZGl0aW9uCiAgKiBhbmQgd2lsbCBjb250aW51ZSB0byBjbG9jayBvdXQgZGF0YS4KICAqCiAgKiBTbyB3ZSBoYXZlIHRvIGRvIHRoZSByZWFkIG91cnNlbGYuICBCaWcgZGVhbC4KLQkgICB3b3JrYXJvdW5kIGluIGkyYy1hbGdvLWJpdAorICoJICAgd29ya2Fyb3VuZCBpbiBpMmMtYWxnby1iaXQKICAqLwogCiAKLXN0YXRpYyB1OCBrczAxMjdfcmVhZChzdHJ1Y3Qga3MwMTI3ICprcywgdTggcmVnKQorc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmMgPSBrcy0+Y2xpZW50OwogCWNoYXIgdmFsID0gMDsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXtjLT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZ30sCi0JCXtjLT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PX1JEX0FDSywgc2l6ZW9mKHZhbCksICZ2YWx9fTsKKwkJeyBjLT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZyB9LAorCQl7IGMtPmFkZHIsIEkyQ19NX1JEIHwgSTJDX01fTk9fUkRfQUNLLCBzaXplb2YodmFsKSwgJnZhbCB9CisJfTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwogCWlmIChyZXQgIT0gQVJSQVlfU0laRShtc2dzKSkKLQkJZHByaW50aygia3MwMTI3X3dyaXRlIGVycm9yXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgInJlYWQgZXJyb3JcbiIpOwogCiAJcmV0dXJuIHZhbDsKIH0KIAogCi1zdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIHZvaWQga3MwMTI3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcsIHU4IHZhbCkKIHsKLQljaGFyIG1zZ1tdID0ge3JlZywgdmFsfTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwljaGFyIG1zZ1tdID0geyByZWcsIHZhbCB9OwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChrcy0+Y2xpZW50LCBtc2csIHNpemVvZihtc2cpKSAhPSBzaXplb2YobXNnKSkKLQkJZHByaW50aygia3MwMTI3X3dyaXRlIGVycm9yXG4iKTsKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGMsIG1zZywgc2l6ZW9mKG1zZykpICE9IHNpemVvZihtc2cpKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAid3JpdGUgZXJyb3JcbiIpOwogCiAJa3MtPnJlZ3NbcmVnXSA9IHZhbDsKIH0KIAogCiAvKiBnZW5lcmljIGJpdC10d2lkZGxpbmcgKi8KLXN0YXRpYyB2b2lkIGtzMDEyN19hbmRfb3Ioc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCitzdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCiB7CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwogCXU4IHZhbCA9IGtzLT5yZWdzW3JlZ107CiAJdmFsID0gKHZhbCAmIGFuZF92KSB8IG9yX3Y7Ci0Ja3MwMTI3X3dyaXRlKGtzLCByZWcsIHZhbCk7CisJa3MwMTI3X3dyaXRlKGNsaWVudCwgcmVnLCB2YWwpOwogfQogCiAKQEAgLTM1OSw3MyArMzU1LDY5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBrczAxMjcgcHJpdmF0ZSBhcGkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGtzMDEyNyoga3MpCitzdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7Ci0JaW50IGk7CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAJdTggKnRhYmxlID0gcmVnX2RlZmF1bHRzOworCWludCBpOwogCiAJa3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CiAKLQlkcHJpbnRrKCJrczAxMjc6IHJlc2V0XG4iKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjLCAicmVzZXRcbiIpOwogCW1zbGVlcCgxKTsKIAogCS8qIGluaXRpYWxpemUgYWxsIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KIAkvKiAoZXhjZXB0IFNUQVQsIDB4MjEsIDB4MjIsIFRFU1QgYW5kIDB4MzgsMHgzOSkgKi8KIAotCWZvcihpID0gMTsgaSA8IDMzOyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDE7IGkgPCAzMzsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCi0JZm9yKGkgPSAzNTsgaSA8IDQwOyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDM1OyBpIDwgNDA7IGkrKykKKwkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKIAotCWZvcihpID0gNDE7IGkgPCA1NjsgaSsrKQotCQlrczAxMjdfd3JpdGUoa3MsIGksIHRhYmxlW2ldKTsKKwlmb3IgKGkgPSA0MTsgaSA8IDU2OyBpKyspCisJCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CiAKLQlmb3IoaSA9IDU4OyBpIDwgNjQ7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGtzLCBpLCB0YWJsZVtpXSk7CisJZm9yIChpID0gNTg7IGkgPCA2NDsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCiAKLQlpZiAoKGtzMDEyN19yZWFkKGtzLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKKwlpZiAoKGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpICYgMHg4MCkgPT0gMCkgewogCQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfMDEyMlM7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTIycyBGb3VuZFxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjJzIGZvdW5kXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaChrczAxMjdfcmVhZChrcywgS1NfQ01ERSkgJiAweDBmKSB7Ci0KKwlzd2l0Y2ggKGtzMDEyN19yZWFkKGMsIEtTX0NNREUpICYgMHgwZikgewogCWNhc2UgMDoKIAkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjc7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTI3IGZvdW5kXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyNyBmb3VuZFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSA5OgogCQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfMDEyN0I7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyN0IgUmV2aXNpb24gQSBmb3VuZFxuIik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZHByaW50aygia3MwMTI3OiB1bmtub3duIHJldmlzaW9uXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgInVua25vd24gcmV2aXNpb25cbiIpOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQga3MwMTI3X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWludAkJKmlhcmcgPSAoaW50Kilhcmc7Ci0KKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlpbnQJCSppYXJnID0gKGludCAqKWFyZzsKIAlpbnQJCXN0YXR1czsKIAogCWlmICgha3MpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgREVDT0RFUl9JTklUOgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9JTklUXG4iKTsKLQkJa3MwMTI3X3Jlc2V0KGtzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIkRFQ09ERVJfSU5JVFxuIik7CisJCWtzMDEyN19yZXNldChjKTsKIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgpAQCAtNDM2LDE2MSArNDI4LDE2MCBAQAogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV81OgogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV82OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUICVkOiAiCi0JCQkJIkNvbXBvc2l0ZVxuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IENvbXBvc2l0ZVxuIiwgKmlhcmcpOwogCQkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKIAkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CiAJCQkvKiBzZXQgaW5wdXQgbGluZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOwogCQkJLyogbm9uLWZyZWVydW5uaW5nIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CiAJCQkvKiBhbmFsb2cgaW5wdXQgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CiAJCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKIAkJCS8qIGNocm9tYSB0cmFwLCBIWUJXUj0xICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19MVU1BLCAgIDB4MDAsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0xVTUEsICAgMHgwMCwKIAkJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19MVU1BXSl8MHgwYyk7CiAJCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwogCQkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CiAKIAkJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOwogCi0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzE6CiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzI6CiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzM6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQgJWQ6ICIKLQkJCQkiUy1WaWRlb1xuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IFMtVmlkZW9cbiIsICppYXJnKTsKIAkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CiAJCQkvKiBWU0U9MCAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwogCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKIAkJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwogCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDApOwogCQkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19MVU1BLCAweDAwLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAweDAwLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOwogCQkJLyogZGlzYWJsZSBsdW1hIGNvbWIgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQSwgMHgwOCwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LAogCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX1ZFUlRJQV0mMHhmMCl8MHgwMSk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUMsIDB4MGYsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwKIAkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CiAKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKIAotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX0lOUFVUX1lVVjY1NjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9JTlBVVCAxNTogIgotCQkJCSJZVVY2NTZcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgMTU6IFlVVjY1NlxuIik7CiAJCQlpZiAoa3MtPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDIHx8CiAJCQkgICAga3MtPm5vcm0gPT0gS1NfU1REX1BBTF9NKQogCQkJCS8qIGZvcmNlIDYwIEh6ICovCi0JCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKKwkJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7CiAJCQllbHNlCiAJCQkJLyogZm9yY2UgNTAgSHogKi8KLQkJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDIpOworCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZmLCAweDQwKTsgLyogVlNFPTEgKi8KKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZmLCAweDQwKTsgLyogVlNFPTEgKi8KIAkJCS8qIHNldCBpbnB1dCBsaW5lIGFuZCBWQUxJR04gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREIsICAgMHhiMCwgKCppYXJnIHwgMHg0MCkpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKIAkJCS8qIGZyZWVydW5uaW5nIG1vZGUsICovCiAJCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CiAJCQkvKiBkaWdpdGFsIGlucHV0LCBTWU5ESVIgPSAwIElOUFNMPTAxIENMS0RJUj0wIEVBVj0wICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOwogCQkJLyogZGlzYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOwogCQkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfVkVSVElDXSYweGYwKTsKIAogCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01CLCAweDBmLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsCiAJCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19DSFJPTUJdJjB4ZjApOwogCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DT04sIDB4MDAsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQlJULCAweDAwLCAzMik7CS8qIHNwZWM6IDM0ICovCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NPTiwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0JSVCwgMHgwMCwgMzIpOwkvKiBzcGVjOiAzNCAqLwogCQkJCS8qIHNwZWM6IDIyOSAoZTUpICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19TQVQsIDB4MDAsIDB4ZTgpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfSFVFLCAweDAwLCAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfU0FULCAweDAwLCAweGU4KTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfSFVFLCAweDAwLCAwKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVUdBSU4sIDB4MDAsIDIzOCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1VHQUlOLCAweDAwLCAyMzgpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7CiAKIAkJCS8qVU9GRjoweDMwLCBWT0ZGOjB4MzAsIFRTVENHTj0xICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVVZPRkZMLCAweDAwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVVZPRkZILCAweDAwLCAweDRmKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVVZPRkZMLCAweDAwLCAweDAwKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQ6ICIKLQkJCQkiVW5rbm93biBpbnB1dCAlZFxuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQ6IFVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogaGFjazogQ0RNTFBGIHNvbWV0aW1lcyBzcG9udGFuZW91c2x5IHN3aXRjaGVzIG9uOyAqLwogCQkvKiBmb3JjZSBiYWNrIG9mZiAqLwotCQlrczAxMjdfd3JpdGUoa3MsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKKwkJa3MwMTI3X3dyaXRlKGMsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAkJc3dpdGNoKCppYXJnKSB7CiAJCWNhc2UgS1NfT1VUUFVUX1lVVjY1NkU6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfT1VUUFVUOiAiCi0JCQkJIk9VVFBVVF9ZVVY2NTZFIChNaXNzaW5nKVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9PVVRQVVQ6IE9VVFBVVF9ZVVY2NTZFIChNaXNzaW5nKVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwogCiAJCWNhc2UgS1NfT1VUUFVUX0VYVjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9PVVRQVVQ6ICIKLQkJCQkiT1VUUFVUX0VYVlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9PVVRQVVQ6IE9VVFBVVF9FWFZcbiIpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLy9zYW0gVGhpcyBibG9jayBtaXhlcyBvbGQgYW5kIG5ldyBub3JtIG5hbWVzLi4uCisJY2FzZSBERUNPREVSX1NFVF9OT1JNOiAvKiBzYW0gVGhpcyBibG9jayBtaXhlcyBvbGQgYW5kIG5ldyBub3JtIG5hbWVzLi4uICovCiAJCS8qIFNldCB0byBhdXRvbWF0aWMgU0VDQU0vRnNjIG1vZGUgKi8KLQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKIAogCQlrcy0+bm9ybSA9ICppYXJnOwotCQlzd2l0Y2goKmlhcmcpCi0JCXsKKwkJc3dpdGNoICgqaWFyZykgewogCQkvKiB0aGlzIGlzIHVudGVzdGVkICEhICovCiAJCS8qIEl0IGp1c3QgZGV0ZWN0cyBQQUxfTi9OVFNDX00gKG5vIHNwZWNpYWwgZnJlcXVlbmNpZXMpICovCiAJCS8qIEFuZCB5b3UgaGF2ZSB0byBzZXQgdGhlIHN0YW5kYXJkIGEgc2Vjb25kIHRpbWUgYWZ0ZXJ3YXJkcyAqLwogCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IEFVVE9cbiIpOwogCiAJCQkvKiBUaGUgY2hpcCBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgKi8KIAkJCS8qIGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpZWxkIHJhdGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOwogCQkJLyogVGhpcyBpcyB3cm9uZyBmb3IgUEFMICEgQXMgSSBzYWlkLCAqLwogCQkJLyogeW91IG5lZWQgdG8gc2V0IHRoZSBzdGFuZGFyZCBvbmNlIGFnYWluICEhICovCiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKQEAgLTU5OCw4NCArNTg5LDg2IEBACiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBOVFNDX01cbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IE5UU0NfTVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX1NURF9OVFNDX046Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgotCQkJCSJOVFNDX04gKGZpeG1lKVxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiS1MwMTI3X1NFVF9OT1JNOiBOVFNDX04gKGZpeG1lKVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06IFBBTF9OXG4iKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBQQUxfTlxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX1NURF9QQUxfTToKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBLUzAxMjdfU0VUX1NUQU5EQVJEOiAiCi0JCQkJIlBBTF9NIChmaXhtZSlcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIktTMDEyN19TRVRfTk9STTogUEFMX00gKGZpeG1lKVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgotCQkJCSJTRUNBTVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJLUzAxMjdfU0VUX05PUk06IFNFQ0FNXG4iKTsKIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwogCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKIAogCQkJLyogc2V0IHRvIHNlY2FtIGF1dG9kZXRlY3Rpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHhkZiwgMHgyMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHhkZiwgMHgyMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKIAkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCsxKTsKIAogCQkJLyogZGlkIGl0IGF1dG9kZXRlY3Q/ICovCi0JCQlpZiAoa3MwMTI3X3JlYWQoa3MsIEtTX0RFTU9EKSAmIDB4NDApCisJCQlpZiAoa3MwMTI3X3JlYWQoYywgS1NfREVNT0QpICYgMHg0MCkKIAkJCQlicmVhazsKIAogCQkJLyogZm9yY2UgdG8gc2VjYW0gbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwZik7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06ICIKLQkJCQkiVW5rbm93biBub3JtICVkXG4iLCAqaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBVbmtub3duIG5vcm0gJWRcbiIsICppYXJnKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfUElDVFVSRSAiCi0JCQkibm90IHlldCBzdXBwb3J0ZWQgKGZpeG1lKVxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkiREVDT0RFUl9TRVRfUElDVFVSRTogbm90IHlldCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQlJJR0hUTkVTUzogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9DT05UUkFTVDogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9IVUU6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRT8KLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1NBVFVSQVRJT046IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRQotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9BR0M6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9DSFJPTUFfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1BJWENMS19NT0RFOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfR0FNTUFfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1VHQUlOOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVkdBSU46Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFk6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFY6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVk6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVY6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9WU0FMSUdOX01PREU6CisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQlJJR0hUTkVTUzogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQ09OVFJBU1Q6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0hVRTogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFPyAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1NBVFVSQVRJT046IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQ19NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQzogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9DSFJPTUFfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9QSVhDTEtfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9HQU1NQV9NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VHQUlOOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1ZHQUlOOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMWTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxWOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFWTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VWOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1ZTQUxJR05fTU9ERTogKi8KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTY4NCwzNCArNjc3LDMyIEBACiAJCWlhcmcgPSBhcmc7CiAJCWVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKIAkJaWYgKGVuYWJsZSkgewotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kICIKLQkJCQkJIkRFQ09ERVJfRU5BQkxFX09VVFBVVCBvbiAiCi0JCQkJCSIoJWQpXG4iLCBlbmFibGUpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9uXG4iKTsKIAkJCS8qIEFsbCBvdXRwdXQgcGlucyBvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfT0ZNVEEsIDB4Y2YsIDB4MzApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7CiAJCQkvKiBPYmV5IHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DREVNLCAweDdmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7CiAJCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgIgotCQkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9mZiAiCi0JCQkJCSIoJWQpXG4iLCBlbmFibGUpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9mZlxuIik7CiAJCQkvKiBWaWRlbyBvdXRwdXQgcGlucyBvZmYgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX09GTVRBLCAweGNmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfT0ZNVEEsIDB4Y2YsIDB4MDApOwogCQkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DREVNLCAweDdmLCAweDgwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfT1VUUFVUX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hFSUdIVDoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hTQ0FMRToKKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9PVVRQVVRfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IRUlHSFQ6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFNDQUxFOiAqLwogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX0dFVF9TVEFUVVNcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKIAkJKmlhcmcgPSAwOwotCQlzdGF0dXMgPSBrczAxMjdfcmVhZChrcywgS1NfU1RBVCk7CisJCXN0YXR1cyA9IGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpOwogCQlpZiAoIShzdGF0dXMgJiAweDIwKSkJCSAvKiBOT1ZJRCBub3Qgc2V0ICovCiAJCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0dPT0QpOwogCQlpZiAoKHN0YXR1cyAmIDB4MDEpKQkJICAgICAgLyogQ0xPQ0sgc2V0ICovCkBAIC03MjIsMTI0ICs3MTMsODEgQEAKIAkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfTlRTQyk7CiAJCWJyZWFrOwogCi0JLy9DYXRjaCBhbnkgdW5rbm93biBjb21tYW5kCisJLyogQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZCAqLwogCWRlZmF1bHQ6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCB1bmtub3duOiAlMDRYXG4iLCBjbWQpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAidW5rbm93bjogMHglMDh4XG4iLCBjbWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIAotCi0KLXN0YXRpYyBpbnQga3MwMTI3X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IGtzMDEyN19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGtzMDEyN19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci0KLQotCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHtJMkNfS1MwMTI3X0FERE9OPj4xLAotCQkJCSAgICAgICBJMkNfS1MwMTI3X09OQk9BUkQ+PjEsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwcm9iZVsyXSA9CXtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVsyXSA9IAl7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCW5vcm1hbF9pMmMsCi0JcHJvYmUsCi0JaWdub3JlLAorI2RlZmluZSBJMkNfS1MwMTI3X0FERE9OICAgMHhEOAorI2RlZmluZSBJMkNfS1MwMTI3X09OQk9BUkQgMHhEQQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCUkyQ19LUzAxMjdfQURET04gPj4gMSwKKwlJMkNfS1MwMTI3X09OQk9BUkQgPj4gMSwKKwlJMkNfQ0xJRU5UX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfa3MwMTI3ID0gewotCS5kcml2ZXIubmFtZSA9ICJrczAxMjciLAotCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9LUzAxMjcsCi0JLmF0dGFjaF9hZGFwdGVyID0ga3MwMTI3X3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICA9IGtzMDEyN19kZXRhY2gsCi0JLmNvbW1hbmQgICAgICAgID0ga3MwMTI3X2NvbW1hbmQKLX07CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGtzMDEyN19jbGllbnRfdG1wbCA9Ci17Ci0JLm5hbWUgPSAiKGtzMDEyNyB1bnNldCkiLAotCS5hZGRyID0gMCwKLQkuYWRhcHRlciA9IE5VTEwsCi0JLmRyaXZlciA9ICZpMmNfZHJpdmVyX2tzMDEyNywKLX07Ci0KLXN0YXRpYyBpbnQga3MwMTI3X2ZvdW5kX3Byb2Moc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCitzdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBrczAxMjcgKmtzOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCAma3MwMTI3X2NsaWVudF90bXBsLCBzaXplb2YoKmNsaWVudCkpOworCXY0bF9pbmZvKGMsICIlcyBjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQljLT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCisJCWMtPmFkZHIgPDwgMSwgYy0+YWRhcHRlci0+bmFtZSk7CiAKIAlrcyA9IGt6YWxsb2Moc2l6ZW9mKCprcyksIEdGUF9LRVJORUwpOwotCWlmIChrcyA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGtzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGtzKTsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0Jc3ByaW50ZihjbGllbnQtPm5hbWUsICJrczAxMjctJTAyeCIsIGFkYXB0ZXItPmlkKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoYywga3MpOwogCi0Ja3MtPmNsaWVudCA9IGNsaWVudDsKLQlrcy0+YWRkciA9IGFkZHI7CiAJa3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CiAKIAkvKiBwb3dlciB1cCAqLwotCWtzMDEyN193cml0ZShrcywgS1NfQ01EQSwgMHgyYyk7CisJaW5pdF9yZWdfZGVmYXVsdHMoKTsKKwlrczAxMjdfd3JpdGUoYywgS1NfQ01EQSwgMHgyYyk7CiAJbWRlbGF5KDEwKTsKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgKi8KLQlrczAxMjdfcmVzZXQoa3MpOwotCXByaW50ayhLRVJOX0lORk8gImtzMDEyNzogYXR0YWNoOiAlcyB2aWRlbyBkZWNvZGVyXG4iLAotCSAgICAgICBrcy0+YWRkcj09KEkyQ19LUzAxMjdfQURET04+PjEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIpOwotCi0JaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlrczAxMjdfcmVzZXQoYyk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBrczAxMjdfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBrczAxMjdfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewotCWlmIChhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3KQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGtzMDEyN19mb3VuZF9wcm9jKTsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAotc3RhdGljIGludCBrczAxMjdfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlrczAxMjdfd3JpdGUoYywgS1NfT0ZNVEEsIDB4MjApOyAvKiB0cmlzdGF0ZSAqLworCWtzMDEyN193cml0ZShjLCBLU19DTURBLCAweDJjIHwgMHg4MCk7IC8qIHBvd2VyIGRvd24gKi8KIAotCWtzMDEyN193cml0ZShrcywgS1NfT0ZNVEEsIDB4MjApOyAvKnRyaXN0YXRlKi8KLQlrczAxMjdfd3JpdGUoa3MsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZShrcyk7Ci0Ja2ZyZWUoY2xpZW50KTsKLQotCWRwcmludGsoImtzMDEyNzogZGV0YWNoXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBrczAxMjdfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQga3MwMTI3X2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaW5pdF9yZWdfZGVmYXVsdHMoKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfa3MwMTI3KTsKKwlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IGtzMDEyN19jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2tzMDEyNyk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQga3MwMTI3X2lkW10gPSB7CisJeyAia3MwMTI3IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBrczAxMjdfaWQpOwogCi0KLW1vZHVsZV9pbml0KGtzMDEyN19pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChrczAxMjdfY2xlYW51cF9tb2R1bGUpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImtzMDEyNyIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0tTMDEyNywKKwkuY29tbWFuZCA9IGtzMDEyN19jb21tYW5kLAorCS5wcm9iZSA9IGtzMDEyN19wcm9iZSwKKwkucmVtb3ZlID0ga3MwMTI3X3JlbW92ZSwKKwkubGVnYWN5X3Byb2JlID0ga3MwMTI3X2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSBrczAxMjdfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmluZGV4IDkzNWQ3M2QuLjIxMGYxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTEwOTgsOSArMTA5OCwxMCBAQAogCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMik7CiAJCXJlZ193KG92LCBSNTF4X1NZU19TTkFQLCAweDAwKTsKIAl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7Ci0JCXdhcm4oInNuYXBzaG90IHJlc2V0IG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspIik7CisJCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCisJCQkgInNuYXBzaG90IHJlc2V0IG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspXG4iKTsKIAl9IGVsc2UgewotCQllcnIoImNsZWFyIHNuYXA6IGludmFsaWQgYnJpZGdlIHR5cGUiKTsKKwkJZGV2X2Vycigmb3YtPmRldi0+ZGV2LCAiY2xlYXIgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZVxuIik7CiAJfQogfQogCkBAIC0xMTE1LDE0ICsxMTE2LDE2IEBACiAJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKSB7CiAJCXJldCA9IHJlZ19yKG92LCBSNTF4X1NZU19TTkFQKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWVycigiRXJyb3IgY2hlY2tpbmcgc25zcHNob3Qgc3RhdHVzICglZCkiLCByZXQpOworCQkJZGV2X2Vycigmb3YtPmRldi0+ZGV2LAorCQkJCSJFcnJvciBjaGVja2luZyBzbnNwc2hvdCBzdGF0dXMgKCVkKVxuIiwgcmV0KTsKIAkJfSBlbHNlIGlmIChyZXQgJiAweDA4KSB7CiAJCQlzdGF0dXMgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQl3YXJuKCJzbmFwc2hvdCBjaGVjayBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAorCQkJICJzbmFwc2hvdCBjaGVjayBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKVxuIik7CiAJfSBlbHNlIHsKLQkJZXJyKCJjaGVjayBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCWRldl9lcnIoJm92LT5kZXYtPmRldiwgImNsZWFyIHNuYXA6IGludmFsaWQgYnJpZGdlIHR5cGVcbiIpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC01MjE3LDcgKzUyMjAsOCBAQAogCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkKIAkJcmVnX3cob3YsIDB4MTEsIDB4MDApOwogCWVsc2UKLQkJd2FybigiU0FBNzExMUEgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBPVjUxOC9PVjUxOCsiKTsKKwkJZGV2X3dhcm4oJm92LT5kZXYtPmRldiwKKwkJCSAiU0FBNzExMUEgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBPVjUxOC9PVjUxOCtcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDU2LDcgKzU0NjAsOCBAQAogCSAqIHJlcXVpcmVkLiBPVjUxOCBoYXMgbm8gdW5jb21wcmVzc2VkIG1vZGUsIHRvIHNhdmUgUkFNLiAqLwogCWlmICghZHVtcHBpeCAmJiAhb3YtPmNvbXByZXNzKSB7CiAJCW92LT5jb21wcmVzcyA9IDE7Ci0JCXdhcm4oIkNvbXByZXNzaW9uIHJlcXVpcmVkIHdpdGggT1Y1MTguLi5lbmFibGluZyIpOworCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAorCQkJICJDb21wcmVzc2lvbiByZXF1aXJlZCB3aXRoIE9WNTE4Li4uZW5hYmxpbmdcbiIpOwogCX0KIAogCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxOCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCmluZGV4IGExMjUyZDYuLjI3M2QyYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKQEAgLTQwMiw2ICs0MDIsMTAgQEAKIAlyZXQgfD0gcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LCBDWDIzNDFYX0VOQ19NSVNDLDQsIDAsMywwLDApOwogCXJldCB8PSBwdnIyX2VuY29kZXJfdmNtZChoZHcsIENYMjM0MVhfRU5DX01JU0MsNCwxNSwwLDAsMCk7CiAKKwkvKiBwcmV2ZW50IHRoZSBQVFNzIGZyb20gc2xvd2x5IGRyaWZ0aW5nIGF3YXkgaW4gdGhlIGdlbmVyYXRlZAorCSAgIE1QRUcgc3RyZWFtICovCisJcmV0IHw9IHB2cjJfZW5jb2Rlcl92Y21kKGhkdywgQ1gyMzQxWF9FTkNfTUlTQywgMiwgNCwgMSk7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IDk0MjY1YmQuLjViODFiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC02MCw3ICs2MCw2IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKHB2cjJfdW5pdF9tdHgpOwogCiBzdGF0aWMgaW50IGN0bGNoZzsKLXN0YXRpYyBpbnQgaW5pdHVzYnJlc2V0ID0gMTsKIHN0YXRpYyBpbnQgcHJvY3JlbG9hZDsKIHN0YXRpYyBpbnQgdHVuZXJbUFZSX05VTV0gPSB7IFswIC4uLiBQVlJfTlVNLTFdID0gLTEgfTsKIHN0YXRpYyBpbnQgdG9sZXJhbmNlW1BWUl9OVU1dID0geyBbMCAuLi4gUFZSX05VTS0xXSA9IDAgfTsKQEAgLTcxLDggKzcwLDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoY3RsY2hnLCAiMD1vcHRpbWl6ZSBjdGwgY2hhbmdlIDE9YWx3YXlzIGFjY2VwdCBuZXcgY3RsIHZhbHVlIik7CiBtb2R1bGVfcGFyYW0oaW5pdF9wYXVzZV9tc2VjLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGluaXRfcGF1c2VfbXNlYywgImhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNldHRsaW5nIGRlbGF5Iik7Ci1tb2R1bGVfcGFyYW0oaW5pdHVzYnJlc2V0LCBpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXR1c2JyZXNldCwgIkRvIFVTQiByZXNldCBkZXZpY2Ugb24gcHJvYmUiKTsKIG1vZHVsZV9wYXJhbShwcm9jcmVsb2FkLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHByb2NyZWxvYWQsCiAJCSAiQXR0ZW1wdCBpbml0IGZhaWx1cmUgcmVjb3Zlcnkgd2l0aCBmaXJtd2FyZSByZWxvYWQiKTsKQEAgLTE5NjcsOSArMTk2NCw2IEBACiAJfQogCWhkdy0+ZncxX3N0YXRlID0gRlcxX1NUQVRFX09LOwogCi0JaWYgKGluaXR1c2JyZXNldCkgewotCQlwdnIyX2hkd19kZXZpY2VfcmVzZXQoaGR3KTsKLQl9CiAJaWYgKCFwdnIyX2hkd19kZXZfb2soaGR3KSkgcmV0dXJuOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCBoZHctPmhkd19kZXNjLT5jbGllbnRfbW9kdWxlcy5jbnQ7IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggZjA0OGQ4MC4uOTdlZDk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgKiBUaGlzIGlzIHBhcnQgb2YgVmlkZW8gNCBMaW51eCBBUEkuIFRoZSBwcm9jZWR1cmUgaGFuZGxlcyBpb2N0bCgpIGNhbGxzLgogICoKICAqLwotc3RhdGljIGludCBwdnIyX3Y0bDJfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IF9fcHZyMl92NGwyX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBwdnIyX3Y0bDJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtODYzLDggKzg2Myw4IEBACiAjZW5kaWYKIAogCWRlZmF1bHQgOgotCQlyZXQgPSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCwKLQkJCQkJCSBhcmcscHZyMl92NGwyX2RvX2lvY3RsKTsKKwkJcmV0ID0gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoZmlsZSwgY21kLAorCQkJCQkJIGFyZywgX19wdnIyX3Y0bDJfZG9faW9jdGwpOwogCX0KIAogCXB2cjJfaGR3X2NvbW1pdF9jdGwoaGR3KTsKQEAgLTg5MCwxMCArODkwLDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBwdnIyX3Y0bDJfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9fcHZyMl92NGwyX2RvX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKK30KIAogc3RhdGljIHZvaWQgcHZyMl92NGwyX2Rldl9kZXN0cm95KHN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkaXApCiB7Ci0JaW50IG1pbm9yX2lkID0gZGlwLT5kZXZiYXNlLm1pbm9yOworCWludCBudW0gPSBkaXAtPmRldmJhc2UubnVtOwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gZGlwLT52NGxwLT5jaGFubmVsLm1jX2hlYWQtPmhkdzsKIAllbnVtIHB2cjJfY29uZmlnIGNmZyA9IGRpcC0+Y29uZmlnOwogCWludCB2NGxfdHlwZSA9IGRpcC0+djRsX3R5cGU7CkBAIC05MDksNyArOTE0LDcgQEAKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGlwLT5kZXZiYXNlKTsKIAogCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6IHVucmVnaXN0ZXJlZCBkZXZpY2UgJXMldSBbJXNdXG4iLAotCSAgICAgICBnZXRfdjRsX25hbWUodjRsX3R5cGUpLG1pbm9yX2lkICYgMHgxZiwKKwkgICAgICAgZ2V0X3Y0bF9uYW1lKHY0bF90eXBlKSwgbnVtLAogCSAgICAgICBwdnIyX2NvbmZpZ19nZXRfbmFtZShjZmcpKTsKIAogfQpAQCAtMTMxMCw3ICsxMzE1LDcgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiByZWdpc3RlcmVkIGRldmljZSAlcyV1IFslc11cbiIsCi0JICAgICAgIGdldF92NGxfbmFtZShkaXAtPnY0bF90eXBlKSxkaXAtPmRldmJhc2UubWlub3IgJiAweDFmLAorCSAgICAgICBnZXRfdjRsX25hbWUoZGlwLT52NGxfdHlwZSksIGRpcC0+ZGV2YmFzZS5udW0sCiAJICAgICAgIHB2cjJfY29uZmlnX2dldF9uYW1lKGRpcC0+Y29uZmlnKSk7CiAKIAlwdnIyX2hkd192NGxfc3RvcmVfbWlub3JfbnVtYmVyKHZwLT5jaGFubmVsLm1jX2hlYWQtPmhkdywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggYWIyODM4OS4uZjM4OTdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTE3OTUsNyArMTc5NSw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAllbHNlIHsKLQkJUFdDX0lORk8oIlJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkLlxuIiwgcGRldi0+dmRldi0+bWlub3IgJiAweDNGKTsKKwkJUFdDX0lORk8oIlJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkLlxuIiwgcGRldi0+dmRldi0+bnVtKTsKIAl9CiAKIAkvKiBvY2N1cHkgc2xvdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwppbmRleCA0YWE4MmIzLi5hZGYyYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwpAQCAtMzEsMzYgKzMxLDI0IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTEwIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJQYXVsaW5lIE1pZGRlbGluayIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogI2RlZmluZSBTQUE3MTEwX01BWF9JTlBVVAk5CS8qIDYgQ1ZCUywgMyBTVkhTICovCiAjZGVmaW5lIFNBQTcxMTBfTUFYX09VVFBVVAkwCS8qIGl0cyBhIGRlY29kZXIgb25seSAqLwogCi0jZGVmaW5lCUkyQ19TQUE3MTEwCQkweDlDCS8qIG9yIDB4OUUgKi8KLQogI2RlZmluZSBTQUE3MTEwX05SX1JFRwkJMHgzNQogCiBzdHJ1Y3Qgc2FhNzExMCB7CkBAIC04MSwxMCArNjksNyBAQAogLyogSTJDIHN1cHBvcnQgZnVuY3Rpb25zCQkJCQkJICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzExMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTkyLDEwICs3Nyw3IEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludAotc2FhNzExMF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWcgPSAqZGF0YTsJCS8qIGZpcnN0IHJlZ2lzdGVyIHRvIHdyaXRlIHRvICovCkBAIC0xMTUsOCArOTcsOCBAQAogCQltZW1jcHkoZGVjb2Rlci0+cmVnICsgcmVnLCBkYXRhICsgMSwgbGVuIC0gMSk7CiAJfSBlbHNlIHsKIAkJZm9yICgrK2RhdGEsIC0tbGVuOyBsZW47IGxlbi0tKSB7Ci0JCQlpZiAoKHJldCA9IHNhYTcxMTBfd3JpdGUoY2xpZW50LCByZWcrKywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gc2FhNzExMF93cml0ZShjbGllbnQsIHJlZysrLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTI0LDggKzEwNiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTBfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CkBAIC0xMzgsOSArMTE5LDcgQEAKICNkZWZpbmUgRlJFU1BfMDZIX1NWSURFTyAweDgzCS8vMHhDMAogCiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfc2VsbXV4IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQlpbnQgICAgICAgICAgICAgICAgY2hhbikKK3N0YXRpYyBpbnQgc2FhNzExMF9zZWxtdXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNoYW4pCiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9kZXNbOV1bOF0gPSB7CiAJCS8qIG1vZGUgMCAqLwpAQCAtMTk3LDggKzE3Niw3IEBACiAJLyogMHgzMCAqLyAweDQ0LCAweDcxLCAweDAyLCAweDhDLCAweDAyCiB9OwogCi1zdGF0aWMgaW50Ci1kZXRlcm1pbmVfbm9ybSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgZGV0ZXJtaW5lX25vcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwpAQCAtMjEyLDI5ICsxOTAsMjMgQEAKIAlmaW5pc2hfd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0KTsKIAlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKIAlpZiAoc3RhdHVzICYgMHg0MCkgewotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKG5vIHNpZ25hbClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChubyBzaWduYWwpXG4iLCBzdGF0dXMpOwogCQlyZXR1cm4gZGVjb2Rlci0+bm9ybTsJLy8gbm8gY2hhbmdlCiAJfQogCWlmICgoc3RhdHVzICYgMykgPT0gMCkgewogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgMHg4Myk7CiAJCWlmIChzdGF0dXMgJiAweDIwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQy9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CiAJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg4MSk7CiAJCQlyZXR1cm4gVklERU9fTU9ERV9OVFNDOwogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFBBTC9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CiAJCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDlBKTsKIAkJcmV0dXJuIFZJREVPX01PREVfUEFMOwogCX0KIAkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MDYsMHgwMyk7CiAJaWYgKHN0YXR1cyAmIDB4MjApIHsJLyogNjBIeiAqLwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKE5UU0MpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsIHN0YXR1cyk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4NTApOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHgyQyk7CkBAIC0yNTQsMTMgKzIyNiwxMSBAQAogCiAJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7CiAJaWYgKChzdGF0dXMgJiAweDAzKSA9PSAweDAxKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLCBzdGF0dXMpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nyk7CiAJCXJldHVybiBWSURFT19NT0RFX1NFQ0FNOwogCX0KLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKFBBTClcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCXN0YXR1cyk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoUEFMKVxuIiwgc3RhdHVzKTsKIAlyZXR1cm4gVklERU9fTU9ERV9QQUw7CiB9CiAKQEAgLTI4Niw4ICsyNTYsOCBAQAogCQkgICAgVklERU9fREVDT0RFUl9TRUNBTSB8IFZJREVPX0RFQ09ERVJfQVVUTzsKIAkJZGMtPmlucHV0cyA9IFNBQTcxMTBfTUFYX0lOUFVUOwogCQlkYy0+b3V0cHV0cyA9IFNBQTcxMTBfTUFYX09VVFBVVDsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKQEAgLTI5NSw4ICsyNjUsOCBAQAogCQlpbnQgcmVzID0gMDsKIAogCQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IG5vcm09JWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMsIGRlY29kZXItPm5vcm0pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IG5vcm09JWRcbiIsCisJCQkgICAgICAgc3RhdHVzLCBkZWNvZGVyLT5ub3JtKTsKIAkJaWYgKCEoc3RhdHVzICYgMHg0MCkpCiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKIAkJaWYgKHN0YXR1cyAmIDB4MDMpCkBAIC0zMTQsOCArMjg0LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCSooaW50ICopIGFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAkJdiA9ICooaW50ICopIGFyZzsKQEAgLTMyOCwzNCArMjk4LDI0IEBACiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4NTApOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDJDKTsKIAkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDgxKTsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvIE5UU0NcbiIsCi0JCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIE5UU0NcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBWSURFT19NT0RFX1BBTDoKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKIAkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvIFBBTFxuIiwKLQkJCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gUEFMXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVklERU9fTU9ERV9TRUNBTToKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nyk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKIAkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTwotCQkJCQkiJXM6IHN3aXRjaGVkIHRvIFNFQ0FNXG4iLAotCQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBTRUNBTVxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTwotCQkJCQkiJXM6IFRWIHN0YW5kYXJkIGRldGVjdGlvbi4uLlxuIiwKLQkJCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gQVVUT1xuIik7CiAJCQkJZGVjb2Rlci0+bm9ybSA9IGRldGVybWluZV9ub3JtKGNsaWVudCk7CiAJCQkJKihpbnQgKikgYXJnID0gZGVjb2Rlci0+bm9ybTsKIAkJCQlicmVhazsKQEAgLTM2OCwxNSArMzI4LDEyIEBACiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAkJdiA9ICooaW50ICopIGFyZzsKIAkJaWYgKHYgPCAwIHx8IHYgPiBTQUE3MTEwX01BWF9JTlBVVCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTyAiJXM6IGlucHV0PSVkIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgdik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbnB1dD0lZCBub3QgYXZhaWxhYmxlXG4iLCB2KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChkZWNvZGVyLT5pbnB1dCAhPSB2KSB7CiAJCQlzYWE3MTEwX3NlbG11eChjbGllbnQsIHYpOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byBpbnB1dD0lZFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCB2KTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLCB2KTsKIAkJfQogCQlicmVhazsKIApAQCAtMzkyLDggKzM0OSw3IEBACiAJCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gdikgewogCQkJZGVjb2Rlci0+ZW5hYmxlID0gdjsKIAkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBFLCB2ID8gMHgxOCA6IDB4ODApOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBZVVYgJXNcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkJdiA/ICJvbiIgOiAib2ZmIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJZVVYgJXNcbiIsIHYgPyAib24iIDogIm9mZiIpOwogCQl9CiAJCWJyZWFrOwogCkBAIC00MjMsMjMgKzM3OSwyMyBAQAogCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MDcsCiAJCQkJICAgICAgKGRlY29kZXItPmh1ZSA+PiA4KSAtIDEyOCk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9EVU1QOgorCQlpZiAoIWRlYnVnKQorCQkJYnJlYWs7CiAJCWZvciAodiA9IDA7IHYgPCBTQUE3MTEwX05SX1JFRzsgdiArPSAxNikgewogCQkJaW50IGo7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiAlMDJ4OiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkJdik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlMDJ4OiIsIHYpOwogCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIHYgKyBqIDwgU0FBNzExMF9OUl9SRUc7IGorKykKLQkJCQlkcHJpbnRrKDEsICIgJTAyeCIsIGRlY29kZXItPnJlZ1t2ICsgal0pOwotCQkJZHByaW50aygxLCAiXG4iKTsKKwkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsIGRlY29kZXItPnJlZ1t2ICsgal0pOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICJ1bmtub3duIHNhYTcxMTBfY29tbWFuZD8/KCVkKVxuIiwKLQkJCWNtZCk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInVua25vd24gY29tbWFuZCAlMDh4XG4iLCBjbWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTEsNTUgKzQwNywyOCBAQAogICogR2VuZXJpYyBpMmMgcHJvYmUKICAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKICAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfU0FBNzExMCA+PiAxLAotCShJMkNfU0FBNzExMCA+PiAxKSArIDEsCi0JSTJDX0NMSUVOVF9FTkQKLX07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4OWMgPj4gMSwgMHg5ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTEwOwotCi1zdGF0aWMgaW50Ci1zYWE3MTEwX2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzExMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxMTAgKmRlY29kZXI7CiAJaW50IHJ2OwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTAuYzogZGV0ZWN0aW5nIHNhYTcxMTAgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5Ci0JICAgIChhZGFwdGVyLAotCSAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCUkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzExMDsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTEwIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlY29kZXIpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoIWRlY29kZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC01MTAsMTggKzQzOSwxMCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRlY29kZXItPndxKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCXJ2ID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAocnYpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBydjsKLQl9Ci0KIAlydiA9IHNhYTcxMTBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOwotCWlmIChydiA8IDApCi0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBzdGF0dXMgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBydik7Ci0JZWxzZSB7CisJaWYgKHJ2IDwgMCkgeworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgcnYpOworCX0gZWxzZSB7CiAJCWludCB2ZXIsIHN0YXR1czsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MjEsIDB4MTApOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwZSwgMHgxOCk7CkBAIC01MzAsMTAgKzQ1MSw4IEBACiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDA2KTsKIAkJLy9tZGVsYXkoMTUwKTsKIAkJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogU0FBNzExMEEgdmVyc2lvbiAleCBhdCAweCUwMngsIHN0YXR1cz0weCUwMnhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCB2ZXIsIGNsaWVudC0+YWRkciA8PCAxLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ2ZXJzaW9uICV4LCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJICAgICAgIHZlciwgc3RhdHVzKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKQEAgLTU0Nyw1OCArNDY2LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc2FhNzExMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMC5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzExMF9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzExMF9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTAgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzExMCIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExMF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMTBfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxMTBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTEwX2lkW10gPSB7CisJeyAic2FhNzExMCIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzExMF9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTEwX2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxMTBfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTEwKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzExMF9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxMTBfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzExMCIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCisJLmNvbW1hbmQgPSBzYWE3MTEwX2NvbW1hbmQsCisJLnByb2JlID0gc2FhNzExMF9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzExMF9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzExMF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCmluZGV4IDk2YzNkNDMuLmE0NzM4YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCkBAIC0yOCw0MyArMjgsMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTExIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBTQUE3MTExX05SX1JFRwkJMHgxOApAQCAtNzcsMTQgKzU4LDkgQEAKIAlpbnQgZW5hYmxlOwogfTsKIAotI2RlZmluZSAgIEkyQ19TQUE3MTExICAgICAgICAweDQ4Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTExX3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTExX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtOTIsOCArNjgsNyBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMTAzLDEwICs3OCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTExX3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxMTFfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTEyNywxOCArOTksMTcgQEAKIAkJCQkgICAgZGVjb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IHNhYTcxMTFfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IHNhYTcxMTFfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMTQ3LDE2ICsxMTgsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTExX2luaXRfZGVjb2RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQorc3RhdGljIGludCBzYWE3MTExX2luaXRfZGVjb2RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQogewogCXJldHVybiBzYWE3MTExX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdC0+ZGF0YSwgaW5pdC0+bGVuKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTFfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExMV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KQEAgLTIwMywyOCArMTcxLDIzIEBACiAJMHgxNywgMHgwMCwJCS8qIDE3IC0gVkJJICovCiB9OwogCi1zdGF0aWMgaW50Ci1zYWE3MTExX2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgc2FhNzExMV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogCQlicmVhazsKIAljYXNlIERFQ09ERVJfSU5JVDoKIAl7CiAJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQgPSBhcmc7CisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgdmRpOworCiAJCWlmIChOVUxMICE9IGluaXQpCiAJCQlyZXR1cm4gc2FhNzExMV9pbml0X2RlY29kZXIoY2xpZW50LCBpbml0KTsKLQkJZWxzZSB7Ci0JCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKLQkJCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKLQkJCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7Ci0JCQlyZXR1cm4gc2FhNzExMV9pbml0X2RlY29kZXIoY2xpZW50LCAmdmRpKTsKLQkJfQorCQl2ZGkuZGF0YSA9IHNhYTcxMTFfaTJjX2luaXQ7CisJCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7CisJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwogCX0KIAogCWNhc2UgREVDT0RFUl9EVU1QOgpAQCAtMjM0LDE1ICsxOTcsMTUgQEAKIAkJZm9yIChpID0gMDsgaSA8IFNBQTcxMTFfTlJfUkVHOyBpICs9IDE2KSB7CiAJCQlpbnQgajsKIAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDN4IiwgSTJDX05BTUUoY2xpZW50KSwgaSk7CisJCQl2NGxfaW5mbyhjbGllbnQsICIlMDN4IiwgaSk7CiAJCQlmb3IgKGogPSAwOyBqIDwgMTYgJiYgaSArIGogPCBTQUE3MTExX05SX1JFRzsgKytqKSB7Ci0JCQkJcHJpbnRrKCIgJTAyeCIsCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLAogCQkJCSAgICAgICBzYWE3MTExX3JlYWQoY2xpZW50LCBpICsgaikpOwogCQkJfQotCQkJcHJpbnRrKCJcbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewpAQCAtMjU1LDggKzIxOCw4IEBACiAJCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSA4OwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewpAQCAtMjY1LDggKzIyOCw3IEBACiAJCWludCByZXM7CiAKIAkJc3RhdHVzID0gc2FhNzExMV9yZWFkKGNsaWVudCwgMHgxZik7Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXMgc3RhdHVzOiAweCUwMnhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKIAkJcmVzID0gMDsKIAkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7CkBAIC0yOTQsOCArMjU2LDggQEAKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKIAkJfQogCQkqaWFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfR1BJTzoKIAl7CkBAIC0zNjIsOCArMzI0LDggQEAKIAogCQl9CiAJCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMzg3LDggKzM0OSw4IEBACiAJCQkJCQkJICAgICAzKSA/IDB4ODAgOgogCQkJCQkJCSAgICAwKSk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgogCXsKQEAgLTM5OCw4ICszNjAsOCBAQAogCQlpZiAoKmlhcmcgIT0gMCkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTQzOSw4ICs0MDEsOCBAQAogCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MTFdICYgMHhmMykpOwogCQkJfQogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewpAQCAtNDU0LDggKzQxNiw4IEBACiAJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBjLCBwaWMtPmNvbG91ciA+PiA5KTsKIAkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwogCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZCwgKHBpYy0+aHVlIC0gMzI3NjgpID4+IDgpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NjYsNDggKzQyOCwyMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1NBQTcxMTEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTExOwotCi1zdGF0aWMgaW50Ci1zYWE3MTExX2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzExMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXI7CiAJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMS5jOiBkZXRlY3Rpbmcgc2FhNzExMSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzExMTsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTExIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGVjb2RlciA9PSBOVUxMKSB7CkBAIC01MTksODIgKzQ1NiwzNyBAQAogCWRlY29kZXItPmVuYWJsZSA9IDE7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKLQlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoaSkgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJcmV0dXJuIGk7Ci0JfQotCiAJdmRpLmRhdGEgPSBzYWE3MTExX2kyY19pbml0OwogCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7CiAJaSA9IHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7CiAJaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaCBlcnJvcjogaW5pdCBzdGF0dXMgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBzdGF0dXMgJWRcbiIsIGkpOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICV4IGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMTFfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uICV4XG4iLAorCQkJc2FhNzExMV9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCk7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc2FhNzExMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzExMV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzExMV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTEgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzExMSIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTExQSwKLQotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTcxMTFfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBzYWE3MTExX2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSBzYWE3MTExX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNzExMV9pZFtdID0geworCXsgInNhYTcxMTFfb2xkIiwgMCB9LAkvKiAic2FhNzExMSIgbWFwcyB0byB0aGUgc2FhNzExNSBkcml2ZXIgKi8KKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzExMV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTExX2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTEpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxMTFfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTExKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzExMV9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxMTFfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzExMSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAorCS5jb21tYW5kID0gc2FhNzExMV9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxMTFfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxMTFfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxMTFfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYwppbmRleCBlNzkwNzU1Li43Y2E3MDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYwpAQCAtMjksNDMgKzI5LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExNEggdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1heGltIFlldnR5dXNoa2luIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRSh4KSAoeCktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHNhYTcxMTQgewpAQCAtODEsOSArNjIsNiBAQAogCWludCBwbGF5YmFjazsKIH07CiAKLSNkZWZpbmUgICBJMkNfU0FBNzExNCAgICAgICAgMHg0MgotI2RlZmluZSAgIEkyQ19TQUE3MTE0QSAgICAgICAweDQwCi0KICNkZWZpbmUgICBJMkNfREVMQVkgICAxMAogCiAKQEAgLTEyOSwxOCArMTA3LDEyIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTE0X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTE0X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludAotc2FhNzExNF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTE0X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xNjAsMTggKzEzMiwxNyBAQAogCQkJCXJlZysrOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTE4MCw5ICsxNTEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTE0X3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CkBAIC00NTIsMTUgKzQyMSwxMSBAQAogCTB4ZWYsIDB4MDAKIH07CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTRfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTE0X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxMTQgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCS8vZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB3cml0aW5nIGluaXRcbiIsIEkyQ19OQU1FKGNsaWVudCkpOwogCQkvL3NhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOwpAQCAtNDcwLDI3ICs0MzUsMjggQEAKIAl7CiAJCWludCBpOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogZGVjb2RlciBkdW1wXG4iLCBJMkNfTkFNRShjbGllbnQpKTsKKwkJaWYgKCFkZWJ1ZykKKwkJCWJyZWFrOworCQl2NGxfaW5mbyhjbGllbnQsICJkZWNvZGVyIGR1bXBcbiIpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSAxNikgewogCQkJaW50IGo7CiAKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJTAzeCIsIEkyQ19OQU1FKGNsaWVudCksIGkpOworCQkJdjRsX2luZm8oY2xpZW50LCAiJTAzeCIsIGkpOwogCQkJZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHsKLQkJCQlwcmludGsoIiAlMDJ4IiwKKwkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsCiAJCQkJICAgICAgIHNhYTcxMTRfcmVhZChjbGllbnQsIGkgKyBqKSk7CiAJCQl9Ci0JCQlwcmludGsoIlxuIik7CisJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKIAl7CiAJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIGdldCBjYXBhYmlsaXRpZXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IGNhcGFiaWxpdGllc1xuIik7CiAKIAkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKIAkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKQEAgLTQ5OCw4ICs0NjQsOCBAQAogCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gODsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKQEAgLTUwOSw4ICs0NzUsNyBAQAogCiAJCXN0YXR1cyA9IHNhYTcxMTRfcmVhZChjbGllbnQsIDB4MWYpOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXMgc3RhdHVzOiAweCUwMnhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKIAkJcmVzID0gMDsKIAkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7CkBAIC01MzgsOCArNTAzLDggQEAKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKIAkJfQogCQkqaWFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAl7CkBAIC01NDcsMTIgKzUxMiwxMSBAQAogCiAJCXNob3J0IGludCBob2ZmID0gMCwgdm9mZiA9IDAsIHcgPSAwLCBoID0gMDsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIHNldCBub3JtICIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKLQkJc3dpdGNoICgqaWFyZykgeworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybVxuIik7CiAKKwkJc3dpdGNoICgqaWFyZykgewogCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWRwcmludGsoMSwgIk5UU0NcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiTlRTQ1xuIik7CiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNildID0KIAkJCSAgICBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJUOwogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDcpXSA9CkBAIC01NzEsNyArNTM1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlkcHJpbnRrKDEsICJQQUxcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiUEFMXG4iKTsKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA2KV0gPQogCQkJICAgIFNBQV83MTE0X1BBTF9IU1lOQ19TVEFSVDsKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA3KV0gPQpAQCAtNTkwLDkgKzU1NCw4IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLCAiIFVua25vd24gdmlkZW8gbW9kZSEhIVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJVbmtub3duIHZpZGVvIG1vZGVcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCiAKQEAgLTY0NCwyMiArNjA3LDIwIEBACiAJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFjayBlbmQgY2xvY2sgc2VsZWN0aW9uCiAKIAkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIHNldCBpbnB1dCAoJWQpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgKCVkKVxuIiwgKmlhcmcpOwogCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gKmlhcmcpIHsKLQkJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IG5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksCisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3cgc2V0dGluZyAlcyBpbnB1dFxuIiwKIAkJCQkqaWFyZyA+PSA2ID8gIlMtVmlkZW8iIDogIkNvbXBvc2l0ZSIpOwogCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKIApAQCAtNjkwLDMwICs2NTEsMjkgQEAKIAkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBlLAogCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0pOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIHNldCBvdXRwdXRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dFxuIik7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KIAkJaWYgKCppYXJnICE9IDApIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAkJaW50IGVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyICVzIG91dHB1dFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXMgb3V0cHV0XG4iLAorCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwogCiAJCWRlY29kZXItPnBsYXliYWNrID0gIWVuYWJsZTsKIApAQCAtNzU0LDE4ICs3MTQsMTYgQEAKIAkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsKIAogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewogCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwogCi0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogZGVjb2RlciBzZXQgcGljdHVyZSBicmlnaHQ9JWQgY29udHJhc3Q9JWQgc2F0dXJhdGlvbj0lZCBodWU9JWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsCi0JCQlwaWMtPmNvbG91ciwgcGljLT5odWUpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkiZGVjb2RlciBzZXQgcGljdHVyZSBicmlnaHQ9JWQgY29udHJhc3Q9JWQgc2F0dXJhdGlvbj0lZCBodWU9JWRcbiIsCisJCQlwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsIHBpYy0+Y29sb3VyLCBwaWMtPmh1ZSk7CiAKIAkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKIAkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KQEAgLTc4OSw4ICs3NDcsOCBAQAogCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGQsCiAJCQkJICAgICAgKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA4KTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MDEsNTggKzc1OSwzMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9Ci0gICAgeyBJMkNfU0FBNzExNCA+PiAxLCBJMkNfU0FBNzExNEEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDIgPj4gMSwgMHg0MCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTQ7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTRfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTE0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGksIGVyclszMF07CiAJc2hvcnQgaW50IGhvZmYgPSBTQUFfNzExNF9OVFNDX0hPRkZTRVQ7CiAJc2hvcnQgaW50IHZvZmYgPSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQ7CiAJc2hvcnQgaW50IHcgPSBTQUFfNzExNF9OVFNDX1dJRFRIOwogCXNob3J0IGludCBoID0gU0FBXzcxMTRfTlRTQ19IRUlHSFQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzExNCAqZGVjb2RlcjsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTE0LmM6IGRldGVjdGluZyBzYWE3MTE0IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTE0OwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxMTQiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExNCksIEdGUF9LRVJORUwpOwotCWlmIChkZWNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZGVjb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKIAlkZWNvZGVyLT5pbnB1dCA9IC0xOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC05MzcsOCArODY3LDcgQEAKIAlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldIHw9IDE7CS8vIGNvbWJmaWx0ZXIgb24KIAogCi0JZHByaW50aygxLCBLRVJOX0RFQlVHICIlc19hdHRhY2g6IHN0YXJ0aW5nIGRlY29kZXIgaW5pdFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhcnRpbmcgaW5pdFxuIik7CiAKIAllcnJbMF0gPQogCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4MjAgPDwgMSksCkBAIC05NjIsMjggKzg5MSwyMyBAQAogCiAJZm9yIChpID0gMDsgaSA8PSA1OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKIAlmb3IgKGkgPSA2OyBpIDwgODsgaSsrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlc19hdHRhY2g6IHJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKKwkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7CiAJfQogCi0JZHByaW50aygxLAotCQlLRVJOX0RFQlVHCi0JCSIlc19hdHRhY2g6IHBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKIAogCWVycls2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDA2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFja2VuZCBjbG9jayBzZWxlY3Rpb24sIHRhc2sgQSZCIG9mZgogCWVycls3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCkBAIC05OTEsMTkgKzkxNSwxNSBAQAogCiAJZm9yIChpID0gNjsgaSA8PSA4OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXNfYXR0YWNoOiBwZXJmb3JtaW5nIHRoZSByZXN0IG9mIGluaXRcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCkpOwotCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyB0aGUgcmVzdCBvZiBpbml0XG4iKTsKIAogCWVycls5XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDAxLCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMSldKTsKIAllcnJbMTBdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDAzIDw8IDEpLCAoMHgxZSArIDEgLSAweDAzKSA8PCAxKTsJLy8gYmlnIHNlcQpAQCAtMTAzOSwzNyArOTU5LDMyIEBACiAKIAlmb3IgKGkgPSA5OyBpIDw9IDE4OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKIAogCWZvciAoaSA9IDY7IGkgPCA4OyBpKyspIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzX2F0dGFjaDogcmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAorCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKIAl9CiAKIAogCWZvciAoaSA9IDB4MTE7IGkgPD0gMHgxMzsgaSsrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlc19hdHRhY2g6IHJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKKwkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7CiAJfQogCiAKLQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzX2F0dGFjaDogc2V0dGluZyB2aWRlbyBpbnB1dFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0dGluZyB2aWRlbyBpbnB1dFxuIik7CiAKIAllcnJbMTldID0KIAkgICAgc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDIsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAyKV0pOwpAQCAtMTA4MCwyMCArOTk1LDE1IEBACiAKIAlmb3IgKGkgPSAxOTsgaSA8PSAyMTsgaSsrKSB7CiAJCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXNfYXR0YWNoOiBpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgZXJyW2ldKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAorCQkJCWksIGVycltpXSk7CiAJCQlrZnJlZShkZWNvZGVyKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCi0JZHByaW50aygxLAotCQlLRVJOX0RFQlVHCi0JCSIlc19hdHRhY2g6IHBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKIAogCWVyclsyMl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgogCWVyclsyM10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlCkBAIC0xMTAyLDEzICsxMDEyLDExIEBACiAKIAlmb3IgKGkgPSAyMjsgaSA8PSAyNDsgaSsrKSB7CiAJCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXNfYXR0YWNoOiBpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgZXJyW2ldKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAorCQkJCWksIGVycltpXSk7CiAJCQlrZnJlZShkZWNvZGVyKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCkBAIC0xMTE2LDEwMSArMTAyNCw0NSBAQAogCWVyclsyNl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwNywgaW5pdFtSRUdfQUREUigweDA3KV0pOwogCWVyclsyN10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgxMCwgaW5pdFtSRUdfQUREUigweDEwKV0pOwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICV4LCBkZWNvZGVyIHN0YXR1cyAweCUwMnhcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcCB2ZXJzaW9uICV4LCBkZWNvZGVyIHN0YXR1cyAweCUwMnhcbiIsCisJCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCiAJCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MWYpKTsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fREVCVUcKLQkJIiVzX2F0dGFjaDogcG93ZXIgc2F2ZSBjb250cm9sOiAweCUwMngsIHNjYWxlciBzdGF0dXM6IDB4JTAyeFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4OCksCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkicG93ZXIgc2F2ZSBjb250cm9sOiAweCUwMngsIHNjYWxlciBzdGF0dXM6IDB4JTAyeFxuIiwKKwkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4OCksCiAJCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4OGYpKTsKIAogCiAJZm9yIChpID0gMHg5NDsgaSA8IDB4OTY7IGkrKykgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXNfYXR0YWNoOiByZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCisJCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwogCX0KIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAkvL2kgPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKLQlpID0gMDsKLQlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoIGVycm9yOiBpbml0IHN0YXR1cyAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkpOwotCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICV4IGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTRfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc2FhNzExNF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExNC5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzExNF9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzExNF9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTQgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzExNCIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTE0LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExNF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMTRfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxMTRfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTE0X2lkW10gPSB7CisJeyAic2FhNzExNF9vbGQiLCAwIH0sCS8qICJzYWE3MTE0IiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLworCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTE0X2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxMTRfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzExNF9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTQpOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTE0X2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzExNF9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTE0IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExNCwKKwkuY29tbWFuZCA9IHNhYTcxMTRfY29tbWFuZCwKKwkucHJvYmUgPSBzYWE3MTE0X3Byb2JlLAorCS5yZW1vdmUgPSBzYWE3MTE0X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE3MTE0X2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggZDBlODNmZS4uY2MwMmZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTI5LDcgKzI5LDcgQEAKICAqIE5vdGU6IHRoZSBzYWE3MTI2IGlzIGlkZW50aWNhbCB0byB0aGUgc2FhNzEyNywgYW5kIHRoZSBzYWE3MTI4IGlzCiAgKiBpZGVudGljYWwgdG8gdGhlIHNhYTcxMjksIGV4Y2VwdCB0aGF0IHRoZSBzYWE3MTI2IGFuZCBzYWE3MTI4IGhhdmUKICAqIG1hY3JvdmlzaW9uIGFudGktdGFwaW5nIHN1cHBvcnQuIFRoaXMgZHJpdmVyIHdpbGwgYWxtb3N0IGNlcnRhaW5seQotICogd29yayBmaW5kIGZvciB0aG9zZSBjaGlwcywgZXhjZXB0IG9mIGNvdXJzZSBmb3IgdGhlIG1pc3NpbmcgYW50aS10YXBpbmcKKyAqIHdvcmsgZmluZSBmb3IgdGhvc2UgY2hpcHMsIGV4Y2VwdCBvZiBjb3Vyc2UgZm9yIHRoZSBtaXNzaW5nIGFudGktdGFwaW5nCiAgKiBzdXBwb3J0LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggYjY4NmJmYS4uMjQ5MTg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtOTk2LDcgKzk5Niw3IEBACiAJCWdvdG8gZmFpbDQ7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFt2NGwyXVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLGRldi0+dmlkZW9fZGV2LT5taW5vciAmIDB4MWYpOworCSAgICAgICBkZXYtPm5hbWUsIGRldi0+dmlkZW9fZGV2LT5udW0pOwogCiAJZGV2LT52YmlfZGV2ID0gdmRldl9pbml0KGRldiwgJnNhYTcxMzRfdmlkZW9fdGVtcGxhdGUsICJ2YmkiKTsKIApAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsNDsKIAlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWRcbiIsCi0JICAgICAgIGRldi0+bmFtZSxkZXYtPnZiaV9kZXYtPm1pbm9yICYgMHgxZik7CisJICAgICAgIGRldi0+bmFtZSwgZGV2LT52YmlfZGV2LT5udW0pOwogCiAJaWYgKGNhcmRfaGFzX3JhZGlvKGRldikpIHsKIAkJZGV2LT5yYWRpb19kZXYgPSB2ZGV2X2luaXQoZGV2LCZzYWE3MTM0X3JhZGlvX3RlbXBsYXRlLCJyYWRpbyIpOwpAQCAtMTAxNCw3ICsxMDE0LDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGZhaWw0OwogCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBkZXZpY2UgcmFkaW8lZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSxkZXYtPnJhZGlvX2Rldi0+bWlub3IgJiAweDFmKTsKKwkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5yYWRpb19kZXYtPm51bSk7CiAJfQogCiAJLyogZXZlcnl0aGluZyB3b3JrZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggODdjMTA5OC4uOGM0NjExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTUzNSwxMSArNTM1LDE2IEBACiAJCQkJc3RydWN0IHRkYTEwMDR4X2NvbmZpZyAqY2RlY19jb25mLAogCQkJCXN0cnVjdCB0ZGE4Mjd4X2NvbmZpZyAqdHVuZXJfY29uZikKIHsKLQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCBjZGVjX2NvbmYsICZkZXYtPmkyY19hZGFwKTsKLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCisJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwgY2RlY19jb25mLCAmZGV2LT5pMmNfYWRhcCk7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CiAJCWlmIChjZGVjX2NvbmYtPmkyY19nYXRlKQotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gdGRhODI5MF9pMmNfZ2F0ZV9jdHJsOwotCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSB0ZGE4MjkwX2kyY19nYXRlX2N0cmw7CisJCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCSAgICAgICBjZGVjX2NvbmYtPnR1bmVyX2FkZHJlc3MsCiAJCQkgICAgICAgJmRldi0+aTJjX2FkYXAsIHR1bmVyX2NvbmYpKQogCQkJcmV0dXJuIDA7CkBAIC05NDQsMTIgKzk0OSwzMCBAQAogewogCWludCByZXQ7CiAJaW50IGF0dGFjaF94YzMwMjggPSAwOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgbXVsdGktZnJvbnRlbmQgKi8KKwltdXRleF9pbml0KCZkZXYtPmZyb250ZW5kcy5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5mcm9udGVuZHMuZmVsaXN0KTsKKwlkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBhbGxvY2F0aW5nIDEgZnJvbnRlbmRcbiIsIF9fZnVuY19fKTsKKworCWlmICh2aWRlb2J1Zl9kdmJfYWxsb2NfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQgdG8gYWxsb2NcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KIAlkZXYtPnRzLm5yX2J1ZnMgICAgPSAzMjsKIAlkZXYtPnRzLm5yX3BhY2tldHMgPSAzMio0OwotCWRldi0+ZHZiLm5hbWUgPSBkZXYtPm5hbWU7Ci0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZGV2LT5kdmIuZHZicSwgJnNhYTcxMzRfdHNfcW9wcywKKwlmZTAtPmR2Yi5uYW1lID0gZGV2LT5uYW1lOworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZlMC0+ZHZiLmR2YnEsICZzYWE3MTM0X3RzX3FvcHMsCiAJCQkgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAogCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCSAgICBWNEwyX0ZJRUxEX0FMVEVSTkFURSwKQEAgLTk1OSw0NyArOTgyLDQ3IEBACiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFXzMwMElfRFZCVF9QQUw6CiAJCWRwcmludGsoInBpbm5hY2xlIDMwMGkgZHZiIHNldHVwXG4iKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnBpbm5hY2xlXzMwMGksCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZwaW5uYWNsZV8zMDBpLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBtdDM1Ml9waW5uYWNsZV90dW5lcl9zZXRfcGFyYW1zOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBtdDM1Ml9waW5uYWNsZV90dW5lcl9zZXRfcGFyYW1zOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CiAJCWRwcmludGsoImF2ZXJ0diA3NzcgZHZiIHNldHVwXG4iKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmF2ZXJtZWRpYV83NzcsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZhdmVybWVkaWFfNzc3LAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkgICBUVU5FUl9QSElMSVBTX1REMTMxNik7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTZEOgogCQlkcHJpbnRrKCJBdmVyTWVkaWEgQTE2RCBkdmIgc2V0dXBcbiIpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkJJmF2ZXJtZWRpYV94YzMwMjhfbXQzNTJfZGV2LAogCQkJCQkJJmRldi0+aTJjX2FkYXApOwogCQlhdHRhY2hfeGMzMDI4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01ENzEzNDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkJICAgICAgICZtZWRpb25fY2FyZGJ1cywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmRldi0+aTJjX2FkYXAsIG1lZGlvbl9jYXJkYnVzLnR1bmVyX2FkZHJlc3MsCiAJCQkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19UT1VHSDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkJICAgICAgICZwaGlsaXBzX3R1MTIxNl82MF9jb25maWcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdHUxMjE2X2luaXQ7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQ7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdHUxMjE2X2luaXQ7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlREVU86CkBAIC0xMDEwLDI0ICsxMDMzLDI0IEBACiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX0VVUk9QQToKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJnBoaWxpcHNfZXVyb3BhX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPm9yaWdpbmFsX2RlbW9kX3NsZWVwID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV9kZW1vZF9zbGVlcDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX2V1cm9wYV90dW5lcl9pbml0OwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV90dW5lcl9zbGVlcDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9zZXRfcGFyYW1zOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX2luaXQ7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX3NsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkJICAgICAgICZwaGlsaXBzX3R1MTIxNl82MV9jb25maWcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdHUxMjE2X2luaXQ7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQ7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdHUxMjE2X2luaXQ7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9EVkJUXzIxMDoKQEAgLTEwNjYsMTQgKzEwODksMTQgQEAKIAkJCQkJCSAmdGRhODI3eF9jZmdfMCkgPCAwKQogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJfSBlbHNlIHsgIAkJLyogc2F0ZWxsaXRlICovCi0JCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywgJmRldi0+aTJjX2FkYXApOwotCQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYzLAorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsICZkZXYtPmkyY19hZGFwKTsKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MywKIAkJCQkJCQkJCSZkZXYtPmkyY19hZGFwLCAwKSA9PSBOVUxMKSB7CiAJCQkJCXdwcmludGsoIiVzOiBMaWZldmlldyBUcmlvLCBObyB0ZGE4MjZ4IGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQkJfQotCQkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgJmRldi0+aTJjX2FkYXAsCisJCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAmZGV2LT5pMmNfYWRhcCwKIAkJCQkJCQkJCQkweDA4LCAwLCAwKSA9PSBOVUxMKSB7CiAJCQkJCXdwcmludGsoIiVzOiBMaWZldmlldyBUcmlvLCBObyBJU0w2NDIxIGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CkBAIC0xMDgzLDExICsxMTA2LDExIEBACiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfRFVPX0NBUkRCVVNfUFRWMzMxOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJmFkc190ZWNoX2R1b19jb25maWcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgYWRzX3RlY2hfZHVvX2NvbmZpZy50dW5lcl9hZGRyZXNzLCAmZGV2LT5pMmNfYWRhcCwKIAkJCQkJCQkJJmFkc19kdW9fY2ZnKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygibm8gdGRhODI3eCB0dW5lciBmb3VuZCBhdCBhZGRyOiAlMDJ4XG4iLApAQCAtMTEwOCwxNSArMTEzMSwxNSBAQAogCQkJCQkJICZ0ZGE4Mjd4X2NmZ18wKSA8IDApCiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQl9IGVsc2UgeyAgICAgICAgLyogc2F0ZWxsaXRlICovCi0JCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKIAkJCQkJCQkmZmx5ZHZicywgJmRldi0+aTJjX2FkYXApOwotCQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBkZXYtPmR2Yi5mcm9udGVuZDsKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gZmUwLT5kdmIuZnJvbnRlbmQ7CiAJCQkJdTggZGV2X2lkID0gZGV2LT5lZWRhdGFbMl07CiAJCQkJdTggZGF0YSA9IDB4YzQ7CiAJCQkJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwgLmxlbiA9IDF9OwogCi0JCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJCTB4NjAsICZkZXYtPmkyY19hZGFwLCAwKSA9PSBOVUxMKSB7CiAJCQkJCXdwcmludGsoIiVzOiBNZWRpb24gUXVhZHJvLCBubyB0ZGE4MjZ4ICIKIAkJCQkJCSJmb3VuZCAhXG4iLCBfX2Z1bmNfXyk7CkBAIC0xMTUwLDMxICsxMTczLDMxIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BVkVSVFZIRF9BMTgwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsICZhdmVydHZoZGExODAsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmF2ZXJ0dmhkYTE4MCwKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKQotCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYxLAogCQkJCSAgIE5VTEwsIERWQl9QTExfVERIVTIpOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfSERUVl9QQ0k6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9BVFNDMTEwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsICZrd29ybGRhdHNjMTEwLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsICZrd29ybGRhdHNjMTEwLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZkZXYtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX1BISUxJUFNfVFVWMTIzNkQpOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCU19MUjMwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjAsCiAJCQkJICAgICAgICZkZXYtPmkyY19hZGFwLCAwKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE5vIHRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQkJfQotCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCwgMHgwOCwgMCwgMCkgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIiVzOiBObyBJU0w2NDIxIGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKQEAgLTExODIsMjUgKzEyMDUsMjUgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU19FVVJPUEEyX0hZQlJJRDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkJICAgICAgICZtZWRpb25fY2FyZGJ1cywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPm9yaWdpbmFsX2RlbW9kX3NsZWVwID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV9kZW1vZF9zbGVlcDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkZXYtPm9yaWdpbmFsX2RlbW9kX3NsZWVwID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV9kZW1vZF9zbGVlcDsKIAotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmRldi0+aTJjX2FkYXAsIG1lZGlvbl9jYXJkYnVzLnR1bmVyX2FkZHJlc3MsCiAJCQkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwQToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkmcGhpbGlwc19ldXJvcGFfY29uZmlnLAogCQkJCSZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9zZXRfcGFyYW1zOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9pbml0OworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBOgpAQCAtMTIzOSwxNSArMTI2MiwxNSBAQAogCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19TTkFLRToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLAogCQkJCQkJJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjAsCiAJCQkJCSZkZXYtPmkyY19hZGFwLCAwKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE5vIHRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQkJfQotCQkJaWYgKGR2Yl9hdHRhY2gobG5icDIxX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmRldi0+aTJjX2FkYXAsIDAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gbG5icDIxIGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKQEAgLTEyNjksMjQgKzEyOTIsMjQgQEAKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAwKTsKIAkJbXNsZWVwKDEwKTsKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAxKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJCSZhdmVybWVkaWFfeGMzMDI4X210MzUyX2RldiwKIAkJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJYXR0YWNoX3hjMzAyOCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRDcxMzRfQlJJREdFXzI6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCiAJCQkJCQkmc2QxODc4XzRtLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwotCQkJaWYgKGR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQkJaWYgKGR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYwLAogCQkJCSAgJmRldi0+aTJjX2FkYXAsIERWQl9QTExfUEhJTElQU19TRDE4NzhfVERBODI2MSkgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIiVzOiBNRDcxMzQgRFZCLVMsIG5vIFNEMTg3OCAiCiAJCQkJCSJmb3VuZCAhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQkJfQogCQkJLyogd2UgbmVlZCB0byBvcGVuIHRoZSBpMmMgZ2F0ZSAod2Uga25vdyBpdCBleGlzdHMpICovCi0JCQlmZSA9IGRldi0+ZHZiLmZyb250ZW5kOworCQkJZmUgPSBmZTAtPmR2Yi5mcm9udGVuZDsKIAkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDA1X2F0dGFjaCwgZmUsCiAJCQkJCSZkZXYtPmkyY19hZGFwLCAweDA4LCAwLCAwKSA9PSBOVUxMKSB7CkBAIC0xMzA1LDcgKzEzMjgsNyBAQAogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDApOwogCQltc2xlZXAoMTApOwogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDEpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkJJmF2ZXJtZWRpYV94YzMwMjhfbXQzNTJfZGV2LAogCQkJCQkJJmRldi0+aTJjX2FkYXApOwogCQlhdHRhY2hfeGMzMDI4ID0gMTsKQEAgLTEzMTYsMTcgKzEzMzksMTcgQEAKIAkJCQkJCQkmdGRhODI3eF9jZmdfMikgPCAwKQogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJfSBlbHNlIHsgIAkJLyogc2F0ZWxsaXRlICovCi0JCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKIAkJCQkJCSZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgewogCQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLAotCQkJCQkJZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjAsCisJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkJCSZkZXYtPmkyY19hZGFwLCAwKSA9PSBOVUxMKSB7CiAJCQkJCXdwcmludGsoIiVzOiBBc3VzIFRpZ2VyIDNpbjEsIG5vICIKIAkJCQkJCSJ0ZGE4MjZ4IGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQkJfQotCQkJCWlmIChkdmJfYXR0YWNoKGxuYnAyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJCWlmIChkdmJfYXR0YWNoKGxuYnAyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkJJmRldi0+aTJjX2FkYXAsIDAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IEFzdXMgVGlnZXIgM2luMSwgbm8gbG5icDIxIgogCQkJCQkJIiBmb3VuZCFcbiIsIF9fZnVuY19fKTsKQEAgLTEzNTIsMTAgKzEzNzUsMTAgQEAKIAkJCS5pMmNfYWRkciAgPSAweDYxLAogCQl9OwogCi0JCWlmICghZGV2LT5kdmIuZnJvbnRlbmQpCisJCWlmICghZmUwLT5kdmIuZnJvbnRlbmQpCiAJCQlyZXR1cm4gLTE7CiAKLQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAkJaWYgKCFmZSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiB4YzMwMjggYXR0YWNoIGZhaWxlZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtMTM2Myw0MCArMTM4Niw0NyBAQAogCQl9CiAJfQogCi0JaWYgKE5VTEwgPT0gZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwlpZiAoTlVMTCA9PSBmZTAtPmR2Yi5mcm9udGVuZCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzL2R2YjogZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwotCWRldi0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2s7CisJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gc2FhNzEzNF90dW5lcl9jYWxsYmFjazsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgZWxzZSAqLwotCXJldCA9IHZpZGVvYnVmX2R2Yl9yZWdpc3RlcigmZGV2LT5kdmIsIFRISVNfTU9EVUxFLCBkZXYsICZkZXYtPnBjaS0+ZGV2LAotCQkJCSAgICBhZGFwdGVyX25yKTsKKwlyZXQgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZkZXYtPmZyb250ZW5kcywgVEhJU19NT0RVTEUsIGRldiwKKwkJJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIsIDApOwogCiAJLyogdGhpcyBzZXF1ZW5jZSBpcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgdGRhMTAwNHggbG9hZCBpdHMgZmlybXdhcmUKIAkgKiBhbmQgdG8gZW50ZXIgYW5hbG9nIG1vZGUgb2YgaHlicmlkIGJvYXJkcwogCSAqLwogCWlmICghcmV0KSB7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmluaXQpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmluaXQoZGV2LT5kdmIuZnJvbnRlbmQpOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXAoZGV2LT5kdmIuZnJvbnRlbmQpOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXApCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcChkZXYtPmR2Yi5mcm9udGVuZCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmluaXQpCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmluaXQoZmUwLT5kdmIuZnJvbnRlbmQpOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXAoZmUwLT5kdmIuZnJvbnRlbmQpOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXApCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcChmZTAtPmR2Yi5mcm9udGVuZCk7CiAJfQogCXJldHVybiByZXQ7CiAKIGRldHRhY2hfZnJvbnRlbmQ6Ci0JaWYgKGRldi0+ZHZiLmZyb250ZW5kKQotCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGRldi0+ZHZiLmZyb250ZW5kKTsKLQlkZXYtPmR2Yi5mcm9udGVuZCA9IE5VTEw7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwlmZTAtPmR2Yi5mcm9udGVuZCA9IE5VTEw7CiAKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgZHZiX2Zpbmkoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBGSVhNRTogSSBzdXNwZWN0IHRoYXQgdGhpcyBjb2RlIGlzIGJvZ3VzLCBzaW5jZSB0aGUgZW50cnkgZm9yCiAJICAgUGlubmFjbGUgMzAwSSBEVkItVCBQQUwgYWxyZWFkeSBkZWZpbmVzIHRoZSBwcm9wZXIgaW5pdCB0byBhbGxvdwogCSAgIHRoZSBkZXRlY3Rpb24gb2YgbXQyMDMyIChUREE5ODg3X1BPUlQyX0lOQUNUSVZFKQpAQCAtMTQxNiw3ICsxNDQ2LDcgQEAKIAkJCXU4IGRhdGEgPSAweDgwOwogCQkJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gMHgwOCwgLmJ1ZiA9ICZkYXRhLCAuZmxhZ3MgPSAwLCAubGVuID0gMX07CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKLQkJCWZlID0gZGV2LT5kdmIuZnJvbnRlbmQ7CisJCQlmZSA9IGZlMC0+ZHZiLmZyb250ZW5kOwogCQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgewogCQkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJCQkJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKQEAgLTE0MjQsOCArMTQ1NCw4IEBACiAJCQl9CiAJCX0KIAl9Ci0JaWYgKGRldi0+ZHZiLmZyb250ZW5kKQotCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcigmZGV2LT5kdmIpOworCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKCZkZXYtPmZyb250ZW5kcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwppbmRleCA5YTg3NjZhLi43ZjQwNTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCkBAIC01MzQsNyArNTM0LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW21wZWddXG4iLAotCSAgICAgICBkZXYtPm5hbWUsZGV2LT5lbXByZXNzX2Rldi0+bWlub3IgJiAweDFmKTsKKwkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmVtcHJlc3NfZGV2LT5udW0pOwogCiAJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZGV2LT5lbXByZXNzX3RzcSwgJnNhYTcxMzRfdHNfcW9wcywKIAkJCSAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA0OTFhYjFmLi4yNDA5NmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTU4MSw3ICs1ODEsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fU0FBNzEzNF9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX1NBQTcxMzRfRFZCX01PRFVMRSkKIAkvKiBTQUE3MTM0X01QRUdfRFZCIG9ubHkgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgZnJvbnRlbmRzOwogCWludCAoKm9yaWdpbmFsX2RlbW9kX3NsZWVwKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CiAJaW50ICgqb3JpZ2luYWxfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOwogCWludCAoKm9yaWdpbmFsX3NldF9oaWdoX3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCmluZGV4IDAyZmRhNGUuLjZkZWJiNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCkBAIC0yNSw0MyArMjUsMjUgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHNhYTcxODUgewpAQCAtNzUsMzIgKzU3LDI0IEBACiAJaW50IHNhdDsKIH07CiAKLSNkZWZpbmUgICBJMkNfU0FBNzE4NSAgICAgICAgMHg4OAotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzE4NV9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGlubGluZSBpbnQgc2FhNzE4NV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKIH0KIAotc3RhdGljIGludAotc2FhNzE4NV93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiU0FBNzE4NTogJTAyeCBzZXQgdG8gJTAyeFxuIiwgcmVnLCB2YWx1ZSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJTAyeCBzZXQgdG8gJTAyeFxuIiwgcmVnLCB2YWx1ZSk7CiAJZW5jb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTg1X3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxODVfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTEyMSwxOCArOTUsMTcgQEAKIAkJCQkgICAgZW5jb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IHNhYTcxODVfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IHNhYTcxODVfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMjQwLDE1ICsyMTMsMTEgQEAKIAkweDY2LCAweDIxLAkJLyogRlNDMyAqLwogfTsKIAotc3RhdGljIGludAotc2FhNzE4NV9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHNhYTcxODVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLAogCQkJCSAgICBzaXplb2YoaW5pdF9jb21tb24pKTsKQEAgLTI2NCw3ICsyMzMsNiBAQAogCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7CiAJCQlicmVhazsKIAkJfQotCiAJCWJyZWFrOwogCiAJY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6CkBAIC0yNzYsOCArMjQ0LDggQEAKIAkJICAgIFZJREVPX0VOQ09ERVJfU0VDQU0gfCBWSURFT19FTkNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gMTsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKIAl7CkBAIC0yODYsNyArMjU0LDYgQEAKIAkJLy9zYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCiAJCQkJCSAgICBzaXplb2YoaW5pdF9udHNjKSk7CkBAIC0zMDAsMTEgKzI2NywxMCBAQAogCQljYXNlIFZJREVPX01PREVfU0VDQU06CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9CiAJCWVuY29kZXItPm5vcm0gPSAqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMzE0LDcgKzI4MCw2IEBACiAJCSAqaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKLQogCQljYXNlIDA6CiAJCQkvKiBTd2l0Y2ggUlRDRSB0byAxICovCiAJCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwKQEAgLTMzMiwyMSArMjk3LDE5IEBACiAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCiAJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7CisJCWlmICgqaWFyZyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTM1Niw4ICszMTksOCBAQAogCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwKIAkJCSAgICAgIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGJmKSB8CiAJCQkgICAgICAoZW5jb2Rlci0+ZW5hYmxlID8gMHgwMCA6IDB4NDApKTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzY4LDEzOCArMzMxLDY1IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfU0FBNzE4NSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxODU7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxODVfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlcjsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTg1LmM6IGRldGVjdGluZyBzYWE3MTg1IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTg1OwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxODUiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE4NSksIEdGUF9LRVJORUwpOwotCWlmIChlbmNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwotCWlmIChpID49IDApIHsKLQkJaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCXNpemVvZihpbml0X250c2MpKTsKLQl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkpOwotCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICVkIGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxODVfcmVhZChjbGllbnQpID4+IDUsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7Ci0JfQotCisJaWYgKGkgPj0gMCkKKwkJaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgJWRcbiIsIGkpOworCWVsc2UKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gMHgleFxuIiwKKwkJCQlzYWE3MTg1X3JlYWQoY2xpZW50KSA+PiA1KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzE4NV9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTg1LmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTg1X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTg1X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHNhYTcxODVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0pIHwgMHg0MCk7CS8qIFNXOiBvdXRwdXQgb2ZmIGlzIGFjdGl2ZSAqLwogCS8vc2FhNzE4NV93cml0ZShjbGllbnQsIDB4M2EsIChlbmNvZGVyLT5yZWdbMHgzYV0pIHwgMHg4MCk7IC8qIFNXOiBjb2xvciBiYXIgKi8KIAogCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzE4NSA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTg1IiwJLyogbmFtZSAqLwotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTg1X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gc2FhNzE4NV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gc2FhNzE4NV9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxODVfaWRbXSA9IHsKKwl7ICJzYWE3MTg1IiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTg1X2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxODVfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzE4NSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzE4NV9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxODUpOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTg1X2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzE4NV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTg1IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCisJLmNvbW1hbmQgPSBzYWE3MTg1X2NvbW1hbmQsCisJLnByb2JlID0gc2FhNzE4NV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzE4NV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzE4NV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMKaW5kZXggYWUzOTQ5MS4uMDQ0YTJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYwpAQCAtMTQxMiw3ICsxNDEyLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldl9pbmZvKCZpbnRmLT5kZXYsICJyZWdpc3RlcmVkIG5ldyB2aWRlbyBkZXZpY2U6IHZpZGVvJWRcbiIsCi0JCSBzZTQwMS0+dmRldi5taW5vcik7CisJCSBzZTQwMS0+dmRldi5udW0pOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgc2U0MDEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDc2ODM4MDkuLjI0MDc2MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTQwLDM5ICs0MCwzOSBAQAogCiAvKiByZWdpc3RlciBvZmZzZXRzIGZvciBzaDc3MjIgLyBzaDc3MjMgKi8KIAotI2RlZmluZSBDQVBTUiAgMHgwMAotI2RlZmluZSBDQVBDUiAgMHgwNAotI2RlZmluZSBDQU1DUiAgMHgwOAotI2RlZmluZSBDTUNZUiAgMHgwYwotI2RlZmluZSBDQU1PUiAgMHgxMAotI2RlZmluZSBDQVBXUiAgMHgxNAotI2RlZmluZSBDQUlGUiAgMHgxOAotI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBub3Qgb24gc2g3NzIzICovCi0jZGVmaW5lIENTRUNSICAweDI0IC8qIG5vdCBvbiBzaDc3MjMgKi8KLSNkZWZpbmUgQ1JDTlRSIDB4MjgKLSNkZWZpbmUgQ1JDTVBSIDB4MmMKLSNkZWZpbmUgQ0ZMQ1IgIDB4MzAKLSNkZWZpbmUgQ0ZTWlIgIDB4MzQKLSNkZWZpbmUgQ0RXRFIgIDB4MzgKLSNkZWZpbmUgQ0RBWVIgIDB4M2MKLSNkZWZpbmUgQ0RBQ1IgIDB4NDAKLSNkZWZpbmUgQ0RCWVIgIDB4NDQKLSNkZWZpbmUgQ0RCQ1IgIDB4NDgKLSNkZWZpbmUgQ0JEU1IgIDB4NGMKLSNkZWZpbmUgQ0ZXQ1IgIDB4NWMKLSNkZWZpbmUgQ0xGQ1IgIDB4NjAKLSNkZWZpbmUgQ0RPQ1IgIDB4NjQKLSNkZWZpbmUgQ0REQ1IgIDB4NjgKLSNkZWZpbmUgQ0REQVIgIDB4NmMKLSNkZWZpbmUgQ0VJRVIgIDB4NzAKLSNkZWZpbmUgQ0VUQ1IgIDB4NzQKLSNkZWZpbmUgQ1NUU1IgIDB4N2MKLSNkZWZpbmUgQ1NSVFIgIDB4ODAKLSNkZWZpbmUgQ0RTU1IgIDB4ODQKLSNkZWZpbmUgQ0RBWVIyIDB4OTAKLSNkZWZpbmUgQ0RBQ1IyIDB4OTQKLSNkZWZpbmUgQ0RCWVIyIDB4OTgKLSNkZWZpbmUgQ0RCQ1IyIDB4OWMKKyNkZWZpbmUgQ0FQU1IgIDB4MDAgLyogQ2FwdHVyZSBzdGFydCByZWdpc3RlciAqLworI2RlZmluZSBDQVBDUiAgMHgwNCAvKiBDYXB0dXJlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNQ1IgIDB4MDggLyogQ2FwdHVyZSBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNZUiAgMHgwYyAvKiBDYXB0dXJlIGludGVyZmFjZSBjeWNsZSAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNT1IgIDB4MTAgLyogQ2FwdHVyZSBpbnRlcmZhY2Ugb2Zmc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENBUFdSICAweDE0IC8qIENhcHR1cmUgaW50ZXJmYWNlIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENBSUZSICAweDE4IC8qIENhcHR1cmUgaW50ZXJmYWNlIGlucHV0IGZvcm1hdCByZWdpc3RlciAqLworI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBDYW1lcmEgc3Ryb2JlIGNvbnRyb2wgcmVnaXN0ZXIgKDw9IHNoNzcyMikgKi8KKyNkZWZpbmUgQ1NFQ1IgIDB4MjQgLyogQ2FtZXJhIHN0cm9iZSBlbWlzc2lvbiBjb3VudCByZWdpc3RlciAoPD0gc2g3NzIyKSAqLworI2RlZmluZSBDUkNOVFIgMHgyOCAvKiBDRVUgcmVnaXN0ZXIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDUkNNUFIgMHgyYyAvKiBDRVUgcmVnaXN0ZXIgZm9yY2libGUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDRkxDUiAgMHgzMCAvKiBDYXB0dXJlIGZpbHRlciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENGU1pSICAweDM0IC8qIENhcHR1cmUgZmlsdGVyIHNpemUgY2xpcCByZWdpc3RlciAqLworI2RlZmluZSBDRFdEUiAgMHgzOCAvKiBDYXB0dXJlIGRlc3RpbmF0aW9uIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSICAweDNjIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RBQ1IgIDB4NDAgLyogQ2FwdHVyZSBkYXRhIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDREJZUiAgMHg0NCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgWSByZWdpc3RlciAqLworI2RlZmluZSBDREJDUiAgMHg0OCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDQkRTUiAgMHg0YyAvKiBDYXB0dXJlIGJ1bmRsZSBkZXN0aW5hdGlvbiBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENGV0NSICAweDVjIC8qIEZpcmV3YWxsIG9wZXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENMRkNSICAweDYwIC8qIENhcHR1cmUgbG93LXBhc3MgZmlsdGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RPQ1IgIDB4NjQgLyogQ2FwdHVyZSBkYXRhIG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENERENSICAweDY4IC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENEREFSICAweDZjIC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0VJRVIgIDB4NzAgLyogQ2FwdHVyZSBldmVudCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIENFVENSICAweDc0IC8qIENhcHR1cmUgZXZlbnQgZmxhZyBjbGVhciByZWdpc3RlciAqLworI2RlZmluZSBDU1RTUiAgMHg3YyAvKiBDYXB0dXJlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBDU1JUUiAgMHg4MCAvKiBDYXB0dXJlIHNvZnR3YXJlIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENEU1NSICAweDg0IC8qIENhcHR1cmUgZGF0YSBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSMiAweDkwIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREFDUjIgMHg5NCAvKiBDYXB0dXJlIGRhdGEgYWRkcmVzcyBDIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQ0RCWVIyIDB4OTggLyogQ2FwdHVyZSBkYXRhIGJvdHRvbS1maWVsZCBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREJDUjIgMHg5YyAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAyICovCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoY2FtZXJhX2xvY2spOwogCkBAIC0xNjUsNiArMTY1LDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENFVENSLCAweDAzMTdmMzEzIF4gMHgxMCk7CiAKIAlpZiAocGNkZXYtPmFjdGl2ZSkgeworCQlwY2Rldi0+YWN0aXZlLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKSk7CiAJCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDB4MSk7IC8qIHN0YXJ0IGNhcHR1cmUgKi8KIAl9CkBAIC0yMzYsNyArMjM3LDcgQEAKIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CiAKLQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKIApAQCAtMzIzLDEyICszMjQsMjQgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlCVUdfT04oaWNkICE9IHBjZGV2LT5pY2QpOwogCiAJLyogZGlzYWJsZSBjYXB0dXJlLCBkaXNhYmxlIGludGVycnVwdHMgKi8KIAljZXVfd3JpdGUocGNkZXYsIENFSUVSLCAwKTsKIAljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAxIDw8IDE2KTsgLyogcmVzZXQgKi8KKworCS8qIG1ha2Ugc3VyZSBhY3RpdmUgYnVmZmVyIGlzIGNhbmNlbGVkICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHBjZGV2LT5hY3RpdmUpIHsKKwkJbGlzdF9kZWwoJnBjZGV2LT5hY3RpdmUtPnF1ZXVlKTsKKwkJcGNkZXYtPmFjdGl2ZS0+c3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwkJd2FrZV91cF9hbGwoJnBjZGV2LT5hY3RpdmUtPmRvbmUpOworCQlwY2Rldi0+YWN0aXZlID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKwogCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7CiAKIAlkZXZfaW5mbygmaWNkLT5kZXYsCkBAIC0zOTEsNyArNDA0LDIwIEBACiAJY2V1X3dyaXRlKHBjZGV2LCBDRkxDUiwgMCk7IC8qIGRhdGEgZmV0Y2ggbW9kZSAtIG5vIHNjYWxpbmcgKi8KIAljZXVfd3JpdGUocGNkZXYsIENGU1pSLCAoaWNkLT5oZWlnaHQgPDwgMTYpIHwgY2ZzenJfd2lkdGgpOwogCWNldV93cml0ZShwY2RldiwgQ0xGQ1IsIDApOyAvKiBkYXRhIGZldGNoIG1vZGUgLSBubyBsb3dwYXNzIGZpbHRlciAqLwotCWNldV93cml0ZShwY2RldiwgQ0RPQ1IsIDB4MDAwMDAwMTYpOworCisJLyogQSBmZXcgd29yZHMgYWJvdXQgYnl0ZSBvcmRlciAob2JzZXJ2ZWQgaW4gQmlnIEVuZGlhbiBtb2RlKQorCSAqCisJICogSW4gZGF0YSBmZXRjaCBtb2RlIGJ5dGVzIGFyZSByZWNlaXZlZCBpbiBjaHVua3Mgb2YgOCBieXRlcy4KKwkgKiBEMCwgRDEsIEQyLCBEMywgRDQsIEQ1LCBENiwgRDcgKEQwIHJlY2VpdmVkIGZpcnN0KQorCSAqCisJICogVGhlIGRhdGEgaXMgaG93ZXZlciBieSBkZWZhdWx0IHdyaXR0ZW4gdG8gbWVtb3J5IGluIHJldmVyc2Ugb3JkZXI6CisJICogRDcsIEQ2LCBENSwgRDQsIEQzLCBEMiwgRDEsIEQwIChENyB3cml0dGVuIHRvIGxvd2VzdCBieXRlKQorCSAqCisJICogVGhlIGxvd2VzdCB0aHJlZSBiaXRzIG9mIENET0NSIGFsbG93cyB1cyB0byBkbyBzd2FwcGluZywKKwkgKiB1c2luZyA3IHdlIHN3YXAgdGhlIGRhdGEgYnl0ZXMgdG8gbWF0Y2ggdGhlIGluY29taW5nIG9yZGVyOgorCSAqIEQwLCBEMSwgRDIsIEQzLCBENCwgRDUsIEQ2LCBENworCSAqLworCWNldV93cml0ZShwY2RldiwgQ0RPQ1IsIDB4MDAwMDAwMTcpOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDRFdEUiwgY2R3ZHJfd2lkdGgpOwogCWNldV93cml0ZShwY2RldiwgQ0ZXQ1IsIDApOyAvKiBrZWVwICJkYXRhZmV0Y2ggZmlyZXdhbGwiIGRpc2FibGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggMjBlMzBiZC4uZmNkMmI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJVUkIgdGltZW91dCByZWFjaGVkLiBUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuICIKIAkJICAgICAgICJUbyB1c2UgaXQsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE3MzQsNyArMTczNCw3IEBACiAKIAljYW0gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHNuOWMxMDJfZGV2aWNlLCBrcmVmKTsKIAotCURCRygyLCAiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZCIsIGNhbS0+djRsZGV2LT5taW5vcik7CisJREJHKDIsICJWNEwyIGRldmljZSAvZGV2L3ZpZGVvJWQgZGVyZWdpc3RlcmVkIiwgY2FtLT52NGxkZXYtPm51bSk7CiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIE5VTEwpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2KTsKIAl1c2JfcHV0X2RldihjYW0tPnVzYmRldik7CkBAIC0xNzkyLDcgKzE3OTIsNyBAQAogCiAJaWYgKGNhbS0+dXNlcnMpIHsKIAkJREJHKDIsICJEZXZpY2UgL2Rldi92aWRlbyVkIGlzIGFscmVhZHkgaW4gdXNlIiwKLQkJICAgICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCSAgICAgICBjYW0tPnY0bGRldi0+bnVtKTsKIAkJREJHKDMsICJTaW11bHRhbmVvdXMgb3BlbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKIAkJLyoKIAkJICAgb3BlbigpIG11c3QgZm9sbG93IHRoZSBvcGVuIGZsYWdzIGFuZCBzaG91bGQgYmxvY2sKQEAgLTE4NDUsNyArMTg0NSw3IEBACiAJY2FtLT5mcmFtZV9jb3VudCA9IDA7CiAJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOwogCi0JREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuIiwgY2FtLT52NGxkZXYtPm51bSk7CiAKIG91dDoKIAltdXRleF91bmxvY2soJmNhbS0+b3Blbl9tdXRleCk7CkBAIC0xODcwLDcgKzE4NzAsNyBAQAogCWNhbS0+dXNlcnMtLTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+d2FpdF9vcGVuLCAxKTsKIAotCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBjbG9zZWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBjbG9zZWQiLCBjYW0tPnY0bGRldi0+bnVtKTsKIAogCWtyZWZfcHV0KCZjYW0tPmtyZWYsIHNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMpOwogCkBAIC0yNDMyLDcgKzI0MzIsNyBAQAogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0NST1AgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuIFRvICIKIAkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQ0NSw3ICsyNDQ1LDcgQEAKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCiAJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI2ODksNyArMjY4OSw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfRk1UIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlIHByb2JsZW1zLiBUbyAiCiAJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI3MDEsNyArMjcwMSw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfRk1UIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCiAJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI3NDgsNyArMjc0OCw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfSlBFR0NPTVAgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgogCQkgICAgICAgInByb2JsZW1zLiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgotCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bnVtKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0zMzQ4LDcgKzMzNDgsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5taW5vcik7CisJREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5udW0pOwogCiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7CiAJY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwID0gZm9yY2VfbXVubWFwW2Rldl9ucl07CkBAIC0zNDAyLDcgKzM0MDIsNyBAQAogCWlmIChjYW0tPnVzZXJzKSB7CiAJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgogCQkgICAgICAgIm1lbW9yeSBkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCXNuOWMxMDJfc3RvcF90cmFuc2ZlcihjYW0pOwogCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCmluZGV4IDFhZGMyNTcuLmJiN2E5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCkBAIC0xOCwxNSArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgotCi1zdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvIHsKLQlpbnQgaWZhY2U7Ci0JY2hhciAqZm9ybWF0X25hbWU7Ci0JdW5zaWduZWQgbG9uZyBmb3JtYXRfZGVwdGg7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmb3JtYXQ7Ci0JdW5zaWduZWQgbG9uZyBidXNfcGFyYW07Ci0JaW50ICgqc2V0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm8sIGludCBlbmFibGUpOwotfTsKKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAKIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgewogCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm87CkBAIC00NCwxMSArMzYsMjEgQEAKIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKKworCWlmIChwLT5wb3dlcikKKwkJcC0+cG93ZXIoMSk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKKworCWlmIChwLT5wb3dlcikKKwkJcC0+cG93ZXIoMCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwppbmRleCBkYjY5YmM1Li5lOWViNmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC01NjAsNyArNTU5LDcgQEAKIAogCQl1cmIgPSBkZXYtPmlzb2J1ZnNbaV0udXJiOwogCQlpZiAodXJiKSB7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dXJic191c2VkKSkKKwkJCWlmIChhdG9taWNfcmVhZCgmZGV2LT51cmJzX3VzZWQpICYmIGlzX3ByZXNlbnQoZGV2KSkKIAkJCQl1c2Jfa2lsbF91cmIodXJiKTsKIAkJCXVzYl9mcmVlX3VyYih1cmIpOwogCQl9CkBAIC02ODksMTggKzY4OCwxNCBAQAogewogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGRldi0+b3duZXIgIT0gZnApIHsKLQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50ZXJmYWNlKTsKLQkJcmV0dXJuIDA7CisJaWYgKGRldi0+b3duZXIgPT0gZnApIHsKKwkJc3RrX3N0b3Bfc3RyZWFtKGRldik7CisJCXN0a19mcmVlX2J1ZmZlcnMoZGV2KTsKKwkJZGV2LT5vd25lciA9IE5VTEw7CiAJfQogCi0Jc3RrX3N0b3Bfc3RyZWFtKGRldik7Ci0KLQlzdGtfZnJlZV9idWZmZXJzKGRldik7Ci0KLQlkZXYtPm93bmVyID0gTlVMTDsKLQotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGVyZmFjZSk7CisJaWYoaXNfcHJlc2VudChkZXYpKQorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRlcmZhY2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MTQsOSArNzA5LDYgQEAKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWY7CiAJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IGZwLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlPOwotCiAJaWYgKCFpc19wcmVzZW50KGRldikpCiAJCXJldHVybiAtRUlPOwogCWlmIChkZXYtPm93bmVyICYmIGRldi0+b3duZXIgIT0gZnApCkBAIC03NzMsOSArNzY1LDYgQEAKIHsKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsKIAotCWlmIChkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlwb2xsX3dhaXQoZnAsICZkZXYtPndhaXRfZnJhbWUsIHdhaXQpOwogCiAJaWYgKCFpc19wcmVzZW50KGRldikpCkBAIC0xMzQyLDcgKzEzMzEsNyBAQAogCQlTVEtfRVJST1IoInY0bCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAllbHNlCiAJCVNUS19JTkZPKCJTeW50ZWsgVVNCMi4wIENhbWVyYSBpcyBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlIgotCQkJIiAvZGV2L3ZpZGVvJWRcbiIsIGRldi0+dmRldi5taW5vcik7CisJCQkiIC9kZXYvdmlkZW8lZFxuIiwgZGV2LT52ZGV2Lm51bSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQzNiw4ICsxNDI1LDggQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9mcmFtZSk7CiAJc3RrX3JlbW92ZV9zeXNmc19maWxlcygmZGV2LT52ZGV2KTsKIAotCVNUS19JTkZPKCJTeW50ZWsgVVNCMi4wIENhbWVyYSByZWxlYXNlIHJlc291cmNlcyIKLQkJInZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWRcbiIsIGRldi0+dmRldi5taW5vcik7CisJU1RLX0lORk8oIlN5bnRlayBVU0IyLjAgQ2FtZXJhIHJlbGVhc2UgcmVzb3VyY2VzICIKKwkJInZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWRcbiIsIGRldi0+dmRldi5udW0pOwogCiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCmluZGV4IDA4NGE4NWIuLjlmNjczNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCkBAIC0xMjIsNyArMTIyLDYgQEAKIAogI2RlZmluZSB2ZGV2X3RvX2NhbWVyYShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHN0a19jYW1lcmEsIHZkZXYpCiAKLXZvaWQgc3RrX2NhbWVyYV9kZWxldGUoc3RydWN0IGtyZWYgKik7CiBpbnQgc3RrX2NhbWVyYV93cml0ZV9yZWcoc3RydWN0IHN0a19jYW1lcmEgKiwgdTE2LCB1OCk7CiBpbnQgc3RrX2NhbWVyYV9yZWFkX3JlZyhzdHJ1Y3Qgc3RrX2NhbWVyYSAqLCB1MTYsIGludCAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKaW5kZXggOWM1NDlkOS4uMzI4YzQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCkBAIC0xNDcwLDcgKzE0NzAsOCBAQAogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVycm9yX3ZkZXY7CiAJfQotCVBERUJVRyAoMCwgIlNUVihpKTogcmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiB2aWRlbyVkIiwgc3R2NjgwLT52ZGV2LT5taW5vcik7CisJUERFQlVHKDAsICJTVFYoaSk6IHJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogdmlkZW8lZCIsCisJCXN0djY4MC0+dmRldi0+bnVtKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHN0djY4MCk7CiAJcmV0dmFsID0gc3R2NjgwX2NyZWF0ZV9zeXNmc19maWxlcyhzdHY2ODAtPnZkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IGJjYzMyZmEuLjNiMGI4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE0yNTIzXzNEQkhfRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE0yNTIzXzNESUhfRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE1GUEUwNV8yX1UifSwKLQl7IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywJIlBoaWxpcHMgRk1EMTIxNk1FWCJ9LAorCXsgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMywJIlBoaWxpcHMgRk1EMTIxNk1FWCJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGhpbGlwcyBGUkgyMDM2QiJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGFuYXNvbmljIEVOR0Y3NV8wMUdGIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJNYXhMaW5lYXIgTVhMNTAwNSJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCmluZGV4IGU5ODZjMjguLmRhMjdhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKQEAgLTIyOSw3ICsyMjksOCBAQAogCiAJY2FtLT5pbnB1dCA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KSB7Ci0JCXdhcm4oIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjYW1lcmEncyBpbnB1dCBkZXZpY2VcbiIpOworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjYW1lcmEncyBpbnB1dCBkZXZpY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDMsOCArMjQ0LDkgQEAKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNhbS0+aW5wdXQpOwogCWlmIChlcnJvcikgewotCQl3YXJuKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAotCQkgICAgIGVycm9yKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAorCQkJIGVycm9yKTsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJCWNhbS0+aW5wdXQgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCmluZGV4IDA1YzYxYjUuLjQ0NTliOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYwpAQCAtOTMsNyArOTMsNyBAQAogCiAJY2FtLT5pbnB1dCA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KSB7Ci0JCXdhcm4oImluc3VmZmljaWVudCBtZW0gZm9yIGNhbSBpbnB1dCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiaW5zdWZmaWNpZW50IG1lbSBmb3IgY2FtIGlucHV0IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNyw4ICsxMDcsOSBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJaWYgKGVycm9yKSB7Ci0JCXdhcm4oIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCi0JCSAgICAgZXJyb3IpOworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCisJCQkgZXJyb3IpOwogCQlpbnB1dF9mcmVlX2RldmljZShjYW0tPmlucHV0KTsKIAkJY2FtLT5pbnB1dCA9IE5VTEw7CiAJfQpAQCAtNTg3LDggKzU4OCw5IEBACiAJCQlkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CiAKIAkJaWYgKHN0IDwgMCkgewotCQkJd2FybigiRGF0YSBlcnJvcjogcGFja2V0PSVkLiBsZW49JWQuIHN0YXR1cz0lZC4iLAotCQkJICAgICAgaSwgbiwgc3QpOworCQkJZGV2X3dhcm4oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJEYXRhIGVycm9yOiBwYWNrZXQ9JWQuIGxlbj0lZC4gc3RhdHVzPSVkLlxuIiwKKwkJCQkgaSwgbiwgc3QpOwogCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjk5LDcgKzcwMSw3IEBACiAKIAlyZXQgPSBxY21fY2FtZXJhX29mZih1dmQpOwogCWlmIChyZXQpCi0JCXdhcm4oImNvdWxkbid0IHR1cm4gdGhlIGNhbSBvZmYuIik7CisJCWRldl93YXJuKCZ1dmQtPmRldi0+ZGV2LCAiY291bGRuJ3QgdHVybiB0aGUgY2FtIG9mZi5cbiIpOwogCiAJdXZkLT5zdHJlYW1pbmcgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKaW5kZXggMDdjZDg3ZC4uN2M1NzViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYwpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIAogCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXMgb24gL2Rldi92aWRlbyVkOiBjYW52YXM9JXMgdmlkZW9zaXplPSVzXG4iLAogCQkgKHV2ZC0+aGFuZGxlICE9IE5VTEwpID8gdXZkLT5oYW5kbGUtPmRydk5hbWUgOiAiPz8/IiwKLQkJIHV2ZC0+dmRldi5taW5vciwgdG1wMiwgdG1wMSk7CisJCSB1dmQtPnZkZXYubnVtLCB0bXAyLCB0bXAxKTsKIAogCXVzYl9nZXRfZGV2KHV2ZC0+ZGV2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYwppbmRleCA3YTEyN2Q2Li44ZTJkNThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCkBAIC04NzcsNyArODc3LDggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiVmlDYW0gd2ViY2FtIGRyaXZlciBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlICVkXG4iLGNhbS0+dmRldi5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVmlDYW0gd2ViY2FtIGRyaXZlciBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlICVkXG4iLAorCQkJY2FtLT52ZGV2Lm51bSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBjYW0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKaW5kZXggOTI0MjdmZC4uOTkwN2I5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCiAJc3ByaW50Zih1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUgKyBzdHJsZW4odXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKSwKLQkJIiAjJWQiLCB1c2J2aXNpb24tPnZkZXYtPm1pbm9yICYgMHgxZik7CisJCSIgIyVkIiwgdXNidmlzaW9uLT52ZGV2LT5udW0pOwogCVBERUJVRyhEQkdfSTJDLCJBZGFwdGVybmFtZTogJXMiLCB1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUpOwogCXVzYnZpc2lvbi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZ1c2J2aXNpb24tPmRldi0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IDc3YWViMzkuLmQxODViNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogCS8vIHZiaSBEZXZpY2U6CiAJaWYgKHVzYnZpc2lvbi0+dmJpKSB7CiAJCVBERUJVRyhEQkdfUFJPQkUsICJ1bnJlZ2lzdGVyIC9kZXYvdmJpJWQgW3Y0bDJdIiwKLQkJICAgICAgIHVzYnZpc2lvbi0+dmJpLT5taW5vciAmIDB4MWYpOworCQkgICAgICAgdXNidmlzaW9uLT52YmktPm51bSk7CiAJCWlmICh1c2J2aXNpb24tPnZiaS0+bWlub3IgIT0gLTEpIHsKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+dmJpKTsKIAkJfSBlbHNlIHsKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAJLy8gUmFkaW8gRGV2aWNlOgogCWlmICh1c2J2aXNpb24tPnJkZXYpIHsKIAkJUERFQlVHKERCR19QUk9CRSwgInVucmVnaXN0ZXIgL2Rldi9yYWRpbyVkIFt2NGwyXSIsCi0JCSAgICAgICB1c2J2aXNpb24tPnJkZXYtPm1pbm9yICYgMHgxZik7CisJCSAgICAgICB1c2J2aXNpb24tPnJkZXYtPm51bSk7CiAJCWlmICh1c2J2aXNpb24tPnJkZXYtPm1pbm9yICE9IC0xKSB7CiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh1c2J2aXNpb24tPnJkZXYpOwogCQl9IGVsc2UgewpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAKIAkvLyBWaWRlbyBEZXZpY2U6CiAJaWYgKHVzYnZpc2lvbi0+dmRldikgewogCQlQREVCVUcoREJHX1BST0JFLCAidW5yZWdpc3RlciAvZGV2L3ZpZGVvJWQgW3Y0bDJdIiwKLQkJICAgICAgIHVzYnZpc2lvbi0+dmRldi0+bWlub3IgJiAweDFmKTsKKwkJICAgICAgIHVzYnZpc2lvbi0+dmRldi0+bnVtKTsKIAkJaWYgKHVzYnZpc2lvbi0+dmRldi0+bWlub3IgIT0gLTEpIHsKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+dmRldik7CiAJCX0gZWxzZSB7CkBAIC0xNDkwLDcgKzE0OTAsNyBAQAogCQlnb3RvIGVycl9leGl0OwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJVU0JWaXNpb25bJWRdOiByZWdpc3RlcmVkIFVTQlZpc2lvbiBWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIFt2NGwyXVxuIiwKLQkgICAgICAgdXNidmlzaW9uLT5ucix1c2J2aXNpb24tPnZkZXYtPm1pbm9yICYgMHgxZik7CisJICAgICAgIHVzYnZpc2lvbi0+bnIsIHVzYnZpc2lvbi0+dmRldi0+bnVtKTsKIAogCS8vIFJhZGlvIERldmljZToKIAlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlJhZGlvKSB7CkBAIC0xNTA3LDcgKzE1MDcsNyBAQAogCQkJZ290byBlcnJfZXhpdDsKIAkJfQogCQlwcmludGsoS0VSTl9JTkZPICJVU0JWaXNpb25bJWRdOiByZWdpc3RlcmVkIFVTQlZpc2lvbiBSYWRpbyBkZXZpY2UgL2Rldi9yYWRpbyVkIFt2NGwyXVxuIiwKLQkJICAgICAgIHVzYnZpc2lvbi0+bnIsIHVzYnZpc2lvbi0+cmRldi0+bWlub3IgJiAweDFmKTsKKwkJICAgICAgIHVzYnZpc2lvbi0+bnIsIHVzYnZpc2lvbi0+cmRldi0+bnVtKTsKIAl9CiAJLy8gdmJpIERldmljZToKIAlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLnZiaSkgewpAQCAtMTUyMyw3ICsxNTIzLDcgQEAKIAkJCWdvdG8gZXJyX2V4aXQ7CiAJCX0KIAkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gVkJJIGRldmljZSAvZGV2L3ZiaSVkIFt2NGwyXSAoTm90IFdvcmtpbmcgWWV0ISlcbiIsCi0JCSAgICAgICB1c2J2aXNpb24tPm5yLHVzYnZpc2lvbi0+dmJpLT5taW5vciAmIDB4MWYpOworCQkgICAgICAgdXNidmlzaW9uLT5uciwgdXNidmlzaW9uLT52YmktPm51bSk7CiAJfQogCS8vIGFsbCBkb25lCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCA3OGU0YzRlLi43NThkZmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHV2Y192NGwyX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBfX3V2Y192NGwyX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKQEAgLTk3OCw4ICs5NzgsOCBAQAogCQlyZXR1cm4gdXZjX3h1X2N0cmxfcXVlcnkodmlkZW8sIGFyZywgMSk7CiAKIAlkZWZhdWx0OgotCQlpZiAoKHJldCA9IHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZywKLQkJCXV2Y192NGwyX2RvX2lvY3RsKSkgPT0gLUVOT0lPQ1RMQ01EKQorCQlpZiAoKHJldCA9IHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGZpbGUsIGNtZCwgYXJnLAorCQkJX191dmNfdjRsMl9kb19pb2N0bCkpID09IC1FTk9JT0NUTENNRCkKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfSU9DVEwsICJVbmtub3duIGlvY3RsIDB4JTA4eFxuIiwKIAkJCQkgIGNtZCk7CiAJCXJldHVybiByZXQ7CkBAIC05ODgsNiArOTg4LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB1dmNfdjRsMl9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX191dmNfdjRsMl9kb19pb2N0bChmaWxlLCBjbWQsIGFyZyk7Cit9CisKIHN0YXRpYyBpbnQgdXZjX3Y0bDJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKaW5kZXggOTI4Y2I0MC4uZjEzYzBhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwpAQCAtNTcsOCArNTcsNyBAQAogICovCiAKIHN0YXRpYyBpbnQKLWdldF92NGxfY29udHJvbChzdHJ1Y3QgaW5vZGUgICAgICAgICAgICAqaW5vZGUsCi0JCXN0cnVjdCBmaWxlICAgICAgICAgICAgICpmaWxlLAorZ2V0X3Y0bF9jb250cm9sKHN0cnVjdCBmaWxlICAgICAgICAgICAgICpmaWxlLAogCQlpbnQJCQljaWQsCiAJCXY0bDJfa2lvY3RsICAgICAgICAgICAgIGRydikKIHsKQEAgLTY3LDEyICs2NiwxMiBAQAogCWludAkJCWVycjsKIAogCXFjdHJsMi5pZCA9IGNpZDsKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19RVUVSWUNUUkwsICZxY3RybDIpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfUVVFUllDVFJMLCAmcWN0cmwyKTsKIAlpZiAoZXJyIDwgMCkKIAkJZHByaW50aygiVklESU9DX1FVRVJZQ1RSTDogJWRcbiIsIGVycik7CiAJaWYgKGVyciA9PSAwICYmICEocWN0cmwyLmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQpKSB7CiAJCWN0cmwyLmlkID0gcWN0cmwyLmlkOwotCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0NUUkwsICZjdHJsMik7CisJCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19DVFJMLCAmY3RybDIpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJZHByaW50aygiVklESU9DX0dfQ1RSTDogJWRcbiIsIGVycik7CiAJCQlyZXR1cm4gMDsKQEAgLTg1LDggKzg0LDcgQEAKIH0KIAogc3RhdGljIGludAotc2V0X3Y0bF9jb250cm9sKHN0cnVjdCBpbm9kZSAgICAgICAgICAgICppbm9kZSwKLQkJc3RydWN0IGZpbGUgICAgICAgICAgICAgKmZpbGUsCitzZXRfdjRsX2NvbnRyb2woc3RydWN0IGZpbGUgICAgICAgICAgICAgKmZpbGUsCiAJCWludAkJCWNpZCwKIAkJaW50CQkJdmFsdWUsCiAJCXY0bDJfa2lvY3RsICAgICAgICAgICAgIGRydikKQEAgLTk2LDcgKzk0LDcgQEAKIAlpbnQJCQllcnI7CiAKIAlxY3RybDIuaWQgPSBjaWQ7Ci0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfUVVFUllDVFJMLCAmcWN0cmwyKTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX1FVRVJZQ1RSTCwgJnFjdHJsMik7CiAJaWYgKGVyciA8IDApCiAJCWRwcmludGsoIlZJRElPQ19RVUVSWUNUUkw6ICVkXG4iLCBlcnIpOwogCWlmIChlcnIgPT0gMCAmJgpAQCAtMTE0LDcgKzExMiw3IEBACiAJCQkgKyAzMjc2NykKIAkJCS8gNjU1MzU7CiAJCWN0cmwyLnZhbHVlICs9IHFjdHJsMi5taW5pbXVtOwotCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0NUUkwsICZjdHJsMik7CisJCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19DVFJMLCAmY3RybDIpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWRwcmludGsoIlZJRElPQ19TX0NUUkw6ICVkXG4iLCBlcnIpOwogCX0KQEAgLTIyMiw3ICsyMjAsNiBAQAogfQogCiBzdGF0aWMgaW50IGNvdW50X2lucHV0cygKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTIzMiwxNCArMjI5LDEzIEBACiAJZm9yIChpID0gMDs7IGkrKykgewogCQltZW1zZXQoJmlucHV0MiwgMCwgc2l6ZW9mKGlucHV0MikpOwogCQlpbnB1dDIuaW5kZXggPSBpOwotCQlpZiAoMCAhPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19FTlVNSU5QVVQsICZpbnB1dDIpKQorCQlpZiAoMCAhPSBkcnYoZmlsZSwgVklESU9DX0VOVU1JTlBVVCwgJmlucHV0MikpCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIGk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfc2l6ZSgKLQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCXY0bDJfa2lvY3RsIGRydiwKIAkJaW50ICptYXh3LApAQCAtMjUyLDE0ICsyNDgsMTQgQEAKIAltZW1zZXQoJmZtdDIsIDAsIHNpemVvZihmbXQyKSk7CiAKIAlkZXNjMi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWlmICgwICE9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0VOVU1fRk1ULCAmZGVzYzIpKQorCWlmICgwICE9IGRydihmaWxlLCBWSURJT0NfRU5VTV9GTVQsICZkZXNjMikpCiAJCWdvdG8gZG9uZTsKIAogCWZtdDIudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmbXQyLmZtdC5waXgud2lkdGggICAgICAgPSAxMDAwMDsKIAlmbXQyLmZtdC5waXguaGVpZ2h0ICAgICAgPSAxMDAwMDsKIAlmbXQyLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBkZXNjMi5waXhlbGZvcm1hdDsKLQlpZiAoMCAhPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19UUllfRk1ULCAmZm10MikpCisJaWYgKDAgIT0gZHJ2KGZpbGUsIFZJRElPQ19UUllfRk1ULCAmZm10MikpCiAJCWdvdG8gZG9uZTsKIAogCSptYXh3ID0gZm10Mi5mbXQucGl4LndpZHRoOwpAQCAtMjczLDcgKzI2OSw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfZ2V0X2NhcGFiaWxpdGllcygKIAkJCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmNhcCwKLQkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTI4OSwxMyArMjg0LDEzIEBACiAJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAltZW1zZXQoJmZidWYsIDAsIHNpemVvZihmYnVmKSk7CiAKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19RVUVSWUNBUCwgY2FwMik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19RVUVSWUNBUCwgY2FwMik7CiAJaWYgKGVyciA8IDApIHsKIAkJZHByaW50aygiVklESU9DR0NBUCAvIFZJRElPQ19RVUVSWUNBUDogJWRcbiIsIGVycik7CiAJCWdvdG8gZG9uZTsKIAl9CiAJaWYgKGNhcDItPmNhcGFiaWxpdGllcyAmIFY0TDJfQ0FQX1ZJREVPX09WRVJMQVkpIHsKLQkJZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GQlVGLCAmZmJ1Zik7CisJCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GQlVGLCAmZmJ1Zik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlkcHJpbnRrKCJWSURJT0NHQ0FQIC8gVklESU9DX0dfRkJVRjogJWRcbiIsIGVycik7CiAJCQltZW1zZXQoJmZidWYsIDAsIHNpemVvZihmYnVmKSk7CkBAIC0zMTcsOCArMzEyLDggQEAKIAlpZiAoZmJ1Zi5jYXBhYmlsaXR5ICYgVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HKQogCQljYXAtPnR5cGUgfD0gVklEX1RZUEVfQ0xJUFBJTkc7CiAKLQljYXAtPmNoYW5uZWxzICA9IGNvdW50X2lucHV0cyhpbm9kZSwgZmlsZSwgZHJ2KTsKLQljaGVja19zaXplKGlub2RlLCBmaWxlLCBkcnYsCisJY2FwLT5jaGFubmVscyAgPSBjb3VudF9pbnB1dHMoZmlsZSwgZHJ2KTsKKwljaGVja19zaXplKGZpbGUsIGRydiwKIAkJICAgJmNhcC0+bWF4d2lkdGgsICZjYXAtPm1heGhlaWdodCk7CiAJY2FwLT5hdWRpb3MgICAgPSAgMDsgLyogRklYTUUgKi8KIAljYXAtPm1pbndpZHRoICA9IDQ4OyAvKiBGSVhNRSAqLwpAQCAtMzMxLDcgKzMyNiw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfZ2V0X2ZyYW1lX2J1ZmZlcigKIAkJCQkJc3RydWN0IHZpZGVvX2J1ZmZlciAqYnVmZmVyLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJdjRsMl9raW9jdGwgZHJ2KQogewpAQCAtMzQxLDcgKzMzNSw3IEBACiAJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKCpidWZmZXIpKTsKIAltZW1zZXQoJmZidWYsIDAsIHNpemVvZihmYnVmKSk7CiAKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0ZCVUYsICZmYnVmKTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfRkJVRiwgJmZidWYpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ0dGQlVGIC8gVklESU9DX0dfRkJVRjogJWRcbiIsIGVycik7CiAJCWdvdG8gZG9uZTsKQEAgLTM4Niw3ICszODAsNiBAQAogCiBzdGF0aWMgbm9pbmxpbmUgaW50IHY0bDFfY29tcGF0X3NldF9mcmFtZV9idWZmZXIoCiAJCQkJCXN0cnVjdCB2aWRlb19idWZmZXIgKmJ1ZmZlciwKLQkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTQxNSw3ICs0MDgsNyBAQAogCQlicmVhazsKIAl9CiAJZmJ1Zi5mbXQuYnl0ZXNwZXJsaW5lID0gYnVmZmVyLT5ieXRlc3BlcmxpbmU7Ci0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfU19GQlVGLCAmZmJ1Zik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0ZCVUYsICZmYnVmKTsKIAlpZiAoZXJyIDwgMCkKIAkJZHByaW50aygiVklESU9DU0ZCVUYgLyBWSURJT0NfU19GQlVGOiAlZFxuIiwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtNDIzLDcgKzQxNiw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfZ2V0X3dpbl9jYXBfZGltZW5zaW9ucygKIAkJCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqd2luLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJdjRsMl9raW9jdGwgZHJ2KQogewpAQCAtNDM4LDcgKzQzMCw3IEBACiAJbWVtc2V0KHdpbiwgMCwgc2l6ZW9mKCp3aW4pKTsKIAogCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTsKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0ZNVCwgZm10KTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfRk1ULCBmbXQpOwogCWlmIChlcnIgPCAwKQogCQlkcHJpbnRrKCJWSURJT0NHV0lOIC8gVklESU9DX0dfV0lOOiAlZFxuIiwgZXJyKTsKIAlpZiAoZXJyID09IDApIHsKQEAgLTQ1Myw3ICs0NDUsNyBAQAogCX0KIAogCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0ZNVCwgZm10KTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfRk1ULCBmbXQpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ0dXSU4gLyBWSURJT0NfR19GTVQ6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGRvbmU7CkBAIC00NzIsNyArNDY0LDYgQEAKIAogc3RhdGljIG5vaW5saW5lIGludCB2NGwxX2NvbXBhdF9zZXRfd2luX2NhcF9kaW1lbnNpb25zKAogCQkJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp3aW4sCi0JCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQl2NGwyX2tpb2N0bCBkcnYpCiB7CkBAIC00ODUsOCArNDc2LDggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWRydihpbm9kZSwgZmlsZSwgVklESU9DX1NUUkVBTU9GRiwgJmZtdC0+dHlwZSk7Ci0JZXJyMSA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQpOworCWRydihmaWxlLCBWSURJT0NfU1RSRUFNT0ZGLCAmZm10LT50eXBlKTsKKwllcnIxID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZNVCwgZm10KTsKIAlpZiAoZXJyMSA8IDApCiAJCWRwcmludGsoIlZJRElPQ1NXSU4gLyBWSURJT0NfR19GTVQ6ICVkXG4iLCBlcnIxKTsKIAlpZiAoZXJyMSA9PSAwKSB7CkBAIC00OTQsNyArNDg1LDcgQEAKIAkJZm10LT5mbXQucGl4LmhlaWdodCA9IHdpbi0+aGVpZ2h0OwogCQlmbXQtPmZtdC5waXguZmllbGQgID0gVjRMMl9GSUVMRF9BTlk7CiAJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwkJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10KTsKIAkJaWYgKGVyciA8IDApCiAJCQlkcHJpbnRrKCJWSURJT0NTV0lOIC8gVklESU9DX1NfRk1UICMxOiAlZFxuIiwKIAkJCQllcnIpOwpAQCAtNTExLDcgKzUwMiw3IEBACiAJZm10LT5mbXQud2luLmNocm9tYWtleSA9IHdpbi0+Y2hyb21ha2V5OwogCWZtdC0+Zm10Lndpbi5jbGlwcyAgICAgPSAodm9pZCBfX3VzZXIgKil3aW4tPmNsaXBzOwogCWZtdC0+Zm10Lndpbi5jbGlwY291bnQgPSB3aW4tPmNsaXBjb3VudDsKLQllcnIyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfU19GTVQsIGZtdCk7CisJZXJyMiA9IGRydihmaWxlLCBWSURJT0NfU19GTVQsIGZtdCk7CiAJaWYgKGVycjIgPCAwKQogCQlkcHJpbnRrKCJWSURJT0NTV0lOIC8gVklESU9DX1NfRk1UICMyOiAlZFxuIiwgZXJyMik7CiAKQEAgLTUyNSw3ICs1MTYsNiBAQAogCiBzdGF0aWMgbm9pbmxpbmUgaW50IHY0bDFfY29tcGF0X3R1cm5fcHJldmlld19vbl9vZmYoCiAJCQkJCWludCAqb24sCi0JCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQl2NGwyX2tpb2N0bCBkcnYpCiB7CkBAIC01MzYsOSArNTI2LDkgQEAKIAkJLyogZGlydHkgaGFjayB0aW1lLiAgQnV0IHY0bDEgaGFzIG5vIFNUUkVBTU9GRgogCQkgKiBlcXVpdmFsZW50IGluIHRoZSBBUEksIGFuZCB0aGlzIG9uZSBhdAogCQkgKiBsZWFzdCBjb21lcyBjbG9zZSAuLi4gKi8KLQkJZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfU1RSRUFNT0ZGLCAmY2FwdHlwZSk7CisJCWRydihmaWxlLCBWSURJT0NfU1RSRUFNT0ZGLCAmY2FwdHlwZSk7CiAJfQotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX09WRVJMQVksIG9uKTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX09WRVJMQVksIG9uKTsKIAlpZiAoZXJyIDwgMCkKIAkJZHByaW50aygiVklESU9DQ0FQVFVSRSAvIFZJRElPQ19QUkVWSUVXOiAlZFxuIiwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtNTQ2LDcgKzUzNiw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfZ2V0X2lucHV0X2luZm8oCiAJCQkJCXN0cnVjdCB2aWRlb19jaGFubmVsICpjaGFuLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJdjRsMl9raW9jdGwgZHJ2KQogewpAQCAtNTU2LDcgKzU0NSw3IEBACiAKIAltZW1zZXQoJmlucHV0MiwgMCwgc2l6ZW9mKGlucHV0MikpOwogCWlucHV0Mi5pbmRleCA9IGNoYW4tPmNoYW5uZWw7Ci0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfRU5VTUlOUFVULCAmaW5wdXQyKTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX0VOVU1JTlBVVCwgJmlucHV0Mik7CiAJaWYgKGVyciA8IDApIHsKIAkJZHByaW50aygiVklESU9DR0NIQU4gLyBWSURJT0NfRU5VTUlOUFVUOiAiCiAJCQkiY2hhbm5lbD0lZCBlcnI9JWRcbiIsIGNoYW4tPmNoYW5uZWwsIGVycik7CkBAIC01NzgsNyArNTY3LDcgQEAKIAkJYnJlYWs7CiAJfQogCWNoYW4tPm5vcm0gPSAwOwotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKTsKIAlpZiAoZXJyIDwgMCkKIAkJZHByaW50aygiVklESU9DR0NIQU4gLyBWSURJT0NfR19TVEQ6ICVkXG4iLCBlcnIpOwogCWlmIChlcnIgPT0gMCkgewpAQCAtNTk1LDE0ICs1ODQsMTMgQEAKIAogc3RhdGljIG5vaW5saW5lIGludCB2NGwxX2NvbXBhdF9zZXRfaW5wdXQoCiAJCQkJCXN0cnVjdCB2aWRlb19jaGFubmVsICpjaGFuLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJdjRsMl9raW9jdGwgZHJ2KQogewogCWludCBlcnI7CiAJdjRsMl9zdGRfaWQgc2lkID0gMDsKIAotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX1NfSU5QVVQsICZjaGFuLT5jaGFubmVsKTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfSU5QVVQsICZjaGFuLT5jaGFubmVsKTsKIAlpZiAoZXJyIDwgMCkKIAkJZHByaW50aygiVklESU9DU0NIQU4gLyBWSURJT0NfU19JTlBVVDogJWRcbiIsIGVycik7CiAJc3dpdGNoIChjaGFuLT5ub3JtKSB7CkBAIC02MTcsNyArNjA1LDcgQEAKIAkJYnJlYWs7CiAJfQogCWlmICgwICE9IHNpZCkgewotCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX1NURCwgJnNpZCk7CisJCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19TVEQsICZzaWQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWRwcmludGsoIlZJRElPQ1NDSEFOIC8gVklESU9DX1NfU1REOiAlZFxuIiwgZXJyKTsKIAl9CkBAIC02MjYsNyArNjE0LDYgQEAKIAogc3RhdGljIG5vaW5saW5lIGludCB2NGwxX2NvbXBhdF9nZXRfcGljdHVyZSgKIAkJCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpY3QsCi0JCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQl2NGwyX2tpb2N0bCBkcnYpCiB7CkBAIC02MzksMTkgKzYyNiwxOSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXBpY3QtPmJyaWdodG5lc3MgPSBnZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsCisJcGljdC0+YnJpZ2h0bmVzcyA9IGdldF92NGxfY29udHJvbChmaWxlLAogCQkJCQkgICBWNEwyX0NJRF9CUklHSFRORVNTLCBkcnYpOwotCXBpY3QtPmh1ZSA9IGdldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKKwlwaWN0LT5odWUgPSBnZXRfdjRsX2NvbnRyb2woZmlsZSwKIAkJCQkgICAgVjRMMl9DSURfSFVFLCBkcnYpOwotCXBpY3QtPmNvbnRyYXN0ID0gZ2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLAorCXBpY3QtPmNvbnRyYXN0ID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsCiAJCQkJCSBWNEwyX0NJRF9DT05UUkFTVCwgZHJ2KTsKLQlwaWN0LT5jb2xvdXIgPSBnZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsCisJcGljdC0+Y29sb3VyID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsCiAJCQkJICAgICAgIFY0TDJfQ0lEX1NBVFVSQVRJT04sIGRydik7Ci0JcGljdC0+d2hpdGVuZXNzID0gZ2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLAorCXBpY3QtPndoaXRlbmVzcyA9IGdldF92NGxfY29udHJvbChmaWxlLAogCQkJCQkgIFY0TDJfQ0lEX1dISVRFTkVTUywgZHJ2KTsKIAogCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0ZNVCwgZm10KTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfRk1ULCBmbXQpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ0dQSUNUIC8gVklESU9DX0dfRk1UOiAlZFxuIiwgZXJyKTsKIAkJZ290byBkb25lOwpAQCAtNjY5LDcgKzY1Niw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfc2V0X3BpY3R1cmUoCiAJCQkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWN0LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJdjRsMl9raW9jdGwgZHJ2KQogewpAQCAtNjg1LDE1ICs2NzEsMTUgQEAKIAl9CiAJbWVtc2V0KCZmYnVmLCAwLCBzaXplb2YoZmJ1ZikpOwogCi0Jc2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLAorCXNldF92NGxfY29udHJvbChmaWxlLAogCQkJVjRMMl9DSURfQlJJR0hUTkVTUywgcGljdC0+YnJpZ2h0bmVzcywgZHJ2KTsKLQlzZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsCisJc2V0X3Y0bF9jb250cm9sKGZpbGUsCiAJCQlWNEwyX0NJRF9IVUUsIHBpY3QtPmh1ZSwgZHJ2KTsKLQlzZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsCisJc2V0X3Y0bF9jb250cm9sKGZpbGUsCiAJCQlWNEwyX0NJRF9DT05UUkFTVCwgcGljdC0+Y29udHJhc3QsIGRydik7Ci0Jc2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLAorCXNldF92NGxfY29udHJvbChmaWxlLAogCQkJVjRMMl9DSURfU0FUVVJBVElPTiwgcGljdC0+Y29sb3VyLCBkcnYpOwotCXNldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKKwlzZXRfdjRsX2NvbnRyb2woZmlsZSwKIAkJCVY0TDJfQ0lEX1dISVRFTkVTUywgcGljdC0+d2hpdGVuZXNzLCBkcnYpOwogCS8qCiAJICogVjRMMSB1c2VzIHRoaXMgaW9jdGwgdG8gc2V0IGJvdGggbWVtb3J5IGNhcHR1cmUgYW5kIG92ZXJsYXkKQEAgLTcwMyw3ICs2ODksNyBAQAogCSAqLwogCiAJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GTVQsIGZtdCk7CiAJLyogSWYgVklESU9DX0dfRk1UIGZhaWxlZCwgdGhlbiB0aGUgZHJpdmVyIGxpa2VseSBkb2Vzbid0CiAJICAgc3VwcG9ydCBtZW1vcnkgY2FwdHVyZS4gIFRyeWluZyB0byBzZXQgdGhlIG1lbW9yeSBjYXB0dXJlCiAJICAgcGFyYW1ldGVycyB3b3VsZCBiZSBwb2ludGxlc3MuICAqLwpAQCAtNzE0LDEzICs3MDAsMTMgQEAKIAkJIHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQocGljdC0+cGFsZXR0ZSkpIHsKIAkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGFsZXR0ZV90b19waXhlbGZvcm1hdCgKIAkJCXBpY3QtPnBhbGV0dGUpOwotCQltZW1fZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfU19GTVQsIGZtdCk7CisJCW1lbV9lcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfRk1ULCBmbXQpOwogCQlpZiAobWVtX2VyciA8IDApCiAJCQlkcHJpbnRrKCJWSURJT0NTUElDVCAvIFZJRElPQ19TX0ZNVDogJWRcbiIsCiAJCQkJbWVtX2Vycik7CiAJfQogCi0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GQlVGLCAmZmJ1Zik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZCVUYsICZmYnVmKTsKIAkvKiBJZiBWSURJT0NfR19GQlVGIGZhaWxlZCwgdGhlbiB0aGUgZHJpdmVyIGxpa2VseSBkb2Vzbid0CiAJICAgc3VwcG9ydCBvdmVybGF5LiAgVHJ5aW5nIHRvIHNldCB0aGUgb3ZlcmxheSBwYXJhbWV0ZXJzCiAJICAgd291bGQgYmUgcXVpdGUgcG9pbnRsZXNzLiAgKi8KQEAgLTczMSw3ICs3MTcsNyBAQAogCQkgcGFsZXR0ZV90b19waXhlbGZvcm1hdChwaWN0LT5wYWxldHRlKSkgewogCQlmYnVmLmZtdC5waXhlbGZvcm1hdCA9IHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQoCiAJCQlwaWN0LT5wYWxldHRlKTsKLQkJb3ZsX2VyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX1NfRkJVRiwgJmZidWYpOworCQlvdmxfZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0ZCVUYsICZmYnVmKTsKIAkJaWYgKG92bF9lcnIgPCAwKQogCQkJZHByaW50aygiVklESU9DU1BJQ1QgLyBWSURJT0NfU19GQlVGOiAlZFxuIiwKIAkJCQlvdmxfZXJyKTsKQEAgLTc1Miw3ICs3MzgsNiBAQAogCiBzdGF0aWMgbm9pbmxpbmUgaW50IHY0bDFfY29tcGF0X2dldF90dW5lcigKIAkJCQkJc3RydWN0IHZpZGVvX3R1bmVyICp0dW4sCi0JCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQl2NGwyX2tpb2N0bCBkcnYpCiB7CkBAIC03NjIsNyArNzQ3LDcgQEAKIAl2NGwyX3N0ZF9pZCAgICAJCXNpZDsKIAogCW1lbXNldCgmdHVuMiwgMCwgc2l6ZW9mKHR1bjIpKTsKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7CiAJaWYgKGVyciA8IDApIHsKIAkJZHByaW50aygiVklESU9DR1RVTkVSIC8gVklESU9DX0dfVFVORVI6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGRvbmU7CkBAIC03NzgsNyArNzYzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewogCQltZW1zZXQoJnN0ZDIsIDAsIHNpemVvZihzdGQyKSk7CiAJCXN0ZDIuaW5kZXggPSBpOwotCQlpZiAoMCAhPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19FTlVNU1RELCAmc3RkMikpCisJCWlmICgwICE9IGRydihmaWxlLCBWSURJT0NfRU5VTVNURCwgJnN0ZDIpKQogCQkJYnJlYWs7CiAJCWlmIChzdGQyLmlkICYgVjRMMl9TVERfUEFMKQogCQkJdHVuLT5mbGFncyB8PSBWSURFT19UVU5FUl9QQUw7CkBAIC03ODgsNyArNzczLDcgQEAKIAkJCXR1bi0+ZmxhZ3MgfD0gVklERU9fVFVORVJfU0VDQU07CiAJfQogCi0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19TVEQsICZzaWQpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19TVEQsICZzaWQpOwogCWlmIChlcnIgPCAwKQogCQlkcHJpbnRrKCJWSURJT0NHVFVORVIgLyBWSURJT0NfR19TVEQ6ICVkXG4iLCBlcnIpOwogCWlmIChlcnIgPT0gMCkgewpAQCAtODExLDcgKzc5Niw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfc2VsZWN0X3R1bmVyKAogCQkJCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnR1biwKLQkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTgyMSw3ICs4MDUsNyBAQAogCiAJdC5pbmRleCA9IHR1bi0+dHVuZXI7CiAKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0lOUFVULCAmdCk7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0lOUFVULCAmdCk7CiAJaWYgKGVyciA8IDApCiAJCWRwcmludGsoIlZJRElPQ1NUVU5FUiAvIFZJRElPQ19TX0lOUFVUOiAlZFxuIiwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtODI5LDcgKzgxMyw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfZ2V0X2ZyZXF1ZW5jeSgKIAkJCQkJdW5zaWduZWQgbG9uZyAqZnJlcSwKLQkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTgzOCw3ICs4MjEsNyBAQAogCW1lbXNldCgmZnJlcTIsIDAsIHNpemVvZihmcmVxMikpOwogCiAJZnJlcTIudHVuZXIgPSAwOwotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRlJFUVVFTkNZLCAmZnJlcTIpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GUkVRVUVOQ1ksICZmcmVxMik7CiAJaWYgKGVyciA8IDApCiAJCWRwcmludGsoIlZJRElPQ0dGUkVRIC8gVklESU9DX0dfRlJFUVVFTkNZOiAlZFxuIiwgZXJyKTsKIAlpZiAoMCA9PSBlcnIpCkBAIC04NDgsNyArODMxLDYgQEAKIAogc3RhdGljIG5vaW5saW5lIGludCB2NGwxX2NvbXBhdF9zZXRfZnJlcXVlbmN5KAogCQkJCQl1bnNpZ25lZCBsb25nICpmcmVxLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJdjRsMl9raW9jdGwgZHJ2KQogewpAQCAtODU2LDkgKzgzOCw5IEBACiAJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICAgZnJlcTI7CiAJbWVtc2V0KCZmcmVxMiwgMCwgc2l6ZW9mKGZyZXEyKSk7CiAKLQlkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0ZSRVFVRU5DWSwgJmZyZXEyKTsKKwlkcnYoZmlsZSwgVklESU9DX0dfRlJFUVVFTkNZLCAmZnJlcTIpOwogCWZyZXEyLmZyZXF1ZW5jeSA9ICpmcmVxOwotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX1NfRlJFUVVFTkNZLCAmZnJlcTIpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19GUkVRVUVOQ1ksICZmcmVxMik7CiAJaWYgKGVyciA8IDApCiAJCWRwcmludGsoIlZJRElPQ1NGUkVRIC8gVklESU9DX1NfRlJFUVVFTkNZOiAlZFxuIiwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtODY2LDcgKzg0OCw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfZ2V0X2F1ZGlvKAogCQkJCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKmF1ZCwKLQkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTg3Niw3ICs4NTcsNyBAQAogCXN0cnVjdCB2NGwyX3R1bmVyCXR1bjI7CiAJbWVtc2V0KCZhdWQyLCAwLCBzaXplb2YoYXVkMikpOwogCi0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19BVURJTywgJmF1ZDIpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19BVURJTywgJmF1ZDIpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ0dBVURJTyAvIFZJRElPQ19HX0FVRElPOiAlZFxuIiwgZXJyKTsKIAkJZ290byBkb25lOwpAQCAtODg2LDI3ICs4NjcsMjcgQEAKIAlhdWQtPm5hbWVbc2l6ZW9mKGF1ZC0+bmFtZSkgLSAxXSA9IDA7CiAJYXVkLT5hdWRpbyA9IGF1ZDIuaW5kZXg7CiAJYXVkLT5mbGFncyA9IDA7Ci0JaSA9IGdldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwgVjRMMl9DSURfQVVESU9fVk9MVU1FLCBkcnYpOworCWkgPSBnZXRfdjRsX2NvbnRyb2woZmlsZSwgVjRMMl9DSURfQVVESU9fVk9MVU1FLCBkcnYpOwogCWlmIChpID49IDApIHsKIAkJYXVkLT52b2x1bWUgPSBpOwogCQlhdWQtPmZsYWdzIHw9IFZJREVPX0FVRElPX1ZPTFVNRTsKIAl9Ci0JaSA9IGdldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwgVjRMMl9DSURfQVVESU9fQkFTUywgZHJ2KTsKKwlpID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX0JBU1MsIGRydik7CiAJaWYgKGkgPj0gMCkgewogCQlhdWQtPmJhc3MgPSBpOwogCQlhdWQtPmZsYWdzIHw9IFZJREVPX0FVRElPX0JBU1M7CiAJfQotCWkgPSBnZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsIFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwgZHJ2KTsKKwlpID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwgZHJ2KTsKIAlpZiAoaSA+PSAwKSB7CiAJCWF1ZC0+dHJlYmxlID0gaTsKIAkJYXVkLT5mbGFncyB8PSBWSURFT19BVURJT19UUkVCTEU7CiAJfQotCWkgPSBnZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsIGRydik7CisJaSA9IGdldF92NGxfY29udHJvbChmaWxlLCBWNEwyX0NJRF9BVURJT19CQUxBTkNFLCBkcnYpOwogCWlmIChpID49IDApIHsKIAkJYXVkLT5iYWxhbmNlID0gaTsKIAkJYXVkLT5mbGFncyB8PSBWSURFT19BVURJT19CQUxBTkNFOwogCX0KLQlpID0gZ2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLCBWNEwyX0NJRF9BVURJT19NVVRFLCBkcnYpOworCWkgPSBnZXRfdjRsX2NvbnRyb2woZmlsZSwgVjRMMl9DSURfQVVESU9fTVVURSwgZHJ2KTsKIAlpZiAoaSA+PSAwKSB7CiAJCWlmIChpKQogCQkJYXVkLT5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOwpAQCAtOTE0LDEzICs4OTUsMTMgQEAKIAl9CiAJYXVkLT5zdGVwID0gMTsKIAlxY3RybDIuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUU7Ci0JaWYgKGRydihpbm9kZSwgZmlsZSwgVklESU9DX1FVRVJZQ1RSTCwgJnFjdHJsMikgPT0gMCAmJgorCWlmIChkcnYoZmlsZSwgVklESU9DX1FVRVJZQ1RSTCwgJnFjdHJsMikgPT0gMCAmJgogCSAgICAhKHFjdHJsMi5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSkKIAkJYXVkLT5zdGVwID0gcWN0cmwyLnN0ZXA7CiAJYXVkLT5tb2RlID0gMDsKIAogCW1lbXNldCgmdHVuMiwgMCwgc2l6ZW9mKHR1bjIpKTsKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7CiAJaWYgKGVyciA8IDApIHsKIAkJZHByaW50aygiVklESU9DR0FVRElPIC8gVklESU9DX0dfVFVORVI6ICVkXG4iLCBlcnIpOwogCQllcnIgPSAwOwpAQCAtOTM5LDcgKzkyMCw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfc2V0X2F1ZGlvKAogCQkJCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKmF1ZCwKLQkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTk1MSwyNCArOTMxLDI0IEBACiAJbWVtc2V0KCZ0dW4yLCAwLCBzaXplb2YodHVuMikpOwogCiAJYXVkMi5pbmRleCA9IGF1ZC0+YXVkaW87Ci0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfU19BVURJTywgJmF1ZDIpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19BVURJTywgJmF1ZDIpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ1NBVURJTyAvIFZJRElPQ19TX0FVRElPOiAlZFxuIiwgZXJyKTsKIAkJZ290byBkb25lOwogCX0KIAotCXNldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwgVjRMMl9DSURfQVVESU9fVk9MVU1FLAorCXNldF92NGxfY29udHJvbChmaWxlLCBWNEwyX0NJRF9BVURJT19WT0xVTUUsCiAJCQlhdWQtPnZvbHVtZSwgZHJ2KTsKLQlzZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsIFY0TDJfQ0lEX0FVRElPX0JBU1MsCisJc2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX0JBU1MsCiAJCQlhdWQtPmJhc3MsIGRydik7Ci0Jc2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLCBWNEwyX0NJRF9BVURJT19UUkVCTEUsCisJc2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKIAkJCWF1ZC0+dHJlYmxlLCBkcnYpOwotCXNldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwgVjRMMl9DSURfQVVESU9fQkFMQU5DRSwKKwlzZXRfdjRsX2NvbnRyb2woZmlsZSwgVjRMMl9DSURfQVVESU9fQkFMQU5DRSwKIAkJCWF1ZC0+YmFsYW5jZSwgZHJ2KTsKLQlzZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsIFY0TDJfQ0lEX0FVRElPX01VVEUsCisJc2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX01VVEUsCiAJCQkhIShhdWQtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSksIGRydik7CiAKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7CiAJaWYgKGVyciA8IDApCiAJCWRwcmludGsoIlZJRElPQ1NBVURJTyAvIFZJRElPQ19HX1RVTkVSOiAlZFxuIiwgZXJyKTsKIAlpZiAoZXJyID09IDApIHsKQEAgLTk4NSw3ICs5NjUsNyBAQAogCQkJdHVuMi5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcyOwogCQkJYnJlYWs7CiAJCX0KLQkJZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfU19UVU5FUiwgJnR1bjIpOworCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfVFVORVIsICZ0dW4yKTsKIAkJaWYgKGVyciA8IDApCiAJCQlkcHJpbnRrKCJWSURJT0NTQVVESU8gLyBWSURJT0NfU19UVU5FUjogJWRcbiIsIGVycik7CiAJfQpAQCAtOTk2LDcgKzk3Niw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfY2FwdHVyZV9mcmFtZSgKIAkJCQkJc3RydWN0IHZpZGVvX21tYXAgKm1tLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJdjRsMl9raW9jdGwgZHJ2KQogewpAQCAtMTAxMyw3ICs5OTIsNyBAQAogCW1lbXNldCgmYnVmLCAwLCBzaXplb2YoYnVmKSk7CiAKIAlmbXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GTVQsIGZtdCk7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZNVCwgZm10KTsKIAlpZiAoZXJyIDwgMCkgewogCQlkcHJpbnRrKCJWSURJT0NNQ0FQVFVSRSAvIFZJRElPQ19HX0ZNVDogJWRcbiIsIGVycik7CiAJCWdvdG8gZG9uZTsKQEAgLTEwMjksNyArMTAwOCw3IEBACiAJCQlwYWxldHRlX3RvX3BpeGVsZm9ybWF0KG1tLT5mb3JtYXQpOwogCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0FOWTsKIAkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX1NfRk1ULCBmbXQpOworCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfRk1ULCBmbXQpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJZHByaW50aygiVklESU9DTUNBUFRVUkUgLyBWSURJT0NfU19GTVQ6ICVkXG4iLCBlcnIpOwogCQkJZ290byBkb25lOwpAQCAtMTAzNywxNyArMTAxNiwxNyBAQAogCX0KIAlidWYuaW5kZXggPSBtbS0+ZnJhbWU7CiAJYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfUVVFUllCVUYsICZidWYpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfUVVFUllCVUYsICZidWYpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ01DQVBUVVJFIC8gVklESU9DX1FVRVJZQlVGOiAlZFxuIiwgZXJyKTsKIAkJZ290byBkb25lOwogCX0KLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19RQlVGLCAmYnVmKTsKKwllcnIgPSBkcnYoZmlsZSwgVklESU9DX1FCVUYsICZidWYpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ01DQVBUVVJFIC8gVklESU9DX1FCVUY6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGRvbmU7CiAJfQotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX1NUUkVBTU9OLCAmY2FwdHlwZSk7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TVFJFQU1PTiwgJmNhcHR5cGUpOwogCWlmIChlcnIgPCAwKQogCQlkcHJpbnRrKCJWSURJT0NNQ0FQVFVSRSAvIFZJRElPQ19TVFJFQU1PTjogJWRcbiIsIGVycik7CiBkb25lOgpAQCAtMTA1Nyw3ICsxMDM2LDYgQEAKIAogc3RhdGljIG5vaW5saW5lIGludCB2NGwxX2NvbXBhdF9zeW5jKAogCQkJCWludCAqaSwKLQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBmaWxlICpmaWxlLAogCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTEwNjksNyArMTA0Nyw3IEBACiAJbWVtc2V0KCZidWYsIDAsIHNpemVvZihidWYpKTsKIAlidWYuaW5kZXggPSAqaTsKIAlidWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19RVUVSWUJVRiwgJmJ1Zik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19RVUVSWUJVRiwgJmJ1Zik7CiAJaWYgKGVyciA8IDApIHsKIAkJLyogIE5vIHN1Y2ggYnVmZmVyICovCiAJCWRwcmludGsoIlZJRElPQ1NZTkMgLyBWSURJT0NfUVVFUllCVUY6ICVkXG4iLCBlcnIpOwpAQCAtMTA4Miw3ICsxMDYwLDcgQEAKIAl9CiAKIAkvKiBtYWtlIHN1cmUgY2FwdHVyZSBhY3R1YWxseSBydW5zIHNvIHdlIGRvbid0IGJsb2NrIGZvcmV2ZXIgKi8KLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TVFJFQU1PTiwgJmNhcHR5cGUpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfU1RSRUFNT04sICZjYXB0eXBlKTsKIAlpZiAoZXJyIDwgMCkgewogCQlkcHJpbnRrKCJWSURJT0NTWU5DIC8gVklESU9DX1NUUkVBTU9OOiAlZFxuIiwgZXJyKTsKIAkJZ290byBkb25lOwpAQCAtMTA5Niw3ICsxMDc0LDcgQEAKIAkJaWYgKGVyciA8IDAgfHwJLyogZXJyb3Igb3Igc2xlZXAgd2FzIGludGVycnVwdGVkICAqLwogCQkgICAgZXJyID09IDApCS8qIHRpbWVvdXQ/IFNob3VsZG4ndCBvY2N1ci4gICovCiAJCQlicmVhazsKLQkJZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfUVVFUllCVUYsICZidWYpOworCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1FVRVJZQlVGLCAmYnVmKTsKIAkJaWYgKGVyciA8IDApCiAJCQlkcHJpbnRrKCJWSURJT0NTWU5DIC8gVklESU9DX1FVRVJZQlVGOiAlZFxuIiwgZXJyKTsKIAl9CkBAIC0xMTA0LDcgKzEwODIsNyBAQAogCWlmICghKGJ1Zi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfRE9ORSkpIC8qIG5vdCBkb25lICovCiAJCWdvdG8gZG9uZTsKIAlkbyB7Ci0JCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0RRQlVGLCAmYnVmKTsKKwkJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19EUUJVRiwgJmJ1Zik7CiAJCWlmIChlcnIgPCAwKQogCQkJZHByaW50aygiVklESU9DU1lOQyAvIFZJRElPQ19EUUJVRjogJWRcbiIsIGVycik7CiAJfSB3aGlsZSAoZXJyID09IDAgJiYgYnVmLmluZGV4ICE9ICppKTsKQEAgLTExMTQsNyArMTA5Miw2IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgdjRsMV9jb21wYXRfZ2V0X3ZiaV9mb3JtYXQoCiAJCQkJc3RydWN0IHZiaV9mb3JtYXQgKmZtdCwKLQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBmaWxlICpmaWxlLAogCQkJCXY0bDJfa2lvY3RsIGRydikKIHsKQEAgLTExMjgsNyArMTEwNSw3IEBACiAJfQogCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCi0JZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GTVQsIGZtdDIpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GTVQsIGZtdDIpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlZJRElPQ0dWQklGTVQgLyBWSURJT0NfR19GTVQ6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGRvbmU7CkBAIC0xMTUzLDcgKzExMzAsNiBAQAogCiBzdGF0aWMgbm9pbmxpbmUgaW50IHY0bDFfY29tcGF0X3NldF92YmlfZm9ybWF0KAogCQkJCXN0cnVjdCB2YmlfZm9ybWF0ICpmbXQsCi0JCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl2NGwyX2tpb2N0bCBkcnYpCiB7CkBAIC0xMTc5LDcgKzExNTUsNyBAQAogCWZtdDItPmZtdC52Ymkuc3RhcnRbMV0gICAgICAgICA9IGZtdC0+c3RhcnRbMV07CiAJZm10Mi0+Zm10LnZiaS5jb3VudFsxXSAgICAgICAgID0gZm10LT5jb3VudFsxXTsKIAlmbXQyLT5mbXQudmJpLmZsYWdzICAgICAgICAgICAgPSBmbXQtPmZsYWdzOwotCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX1RSWV9GTVQsIGZtdDIpOworCWVyciA9IGRydihmaWxlLCBWSURJT0NfVFJZX0ZNVCwgZm10Mik7CiAJaWYgKGVyciA8IDApIHsKIAkJZHByaW50aygiVklESU9DU1ZCSUZNVCAvIFZJRElPQ19UUllfRk1UOiAlZFxuIiwgZXJyKTsKIAkJZ290byBkb25lOwpAQCAtMTE5Niw3ICsxMTcyLDcgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KLQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10Mik7CisJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10Mik7CiAJaWYgKGVyciA8IDApCiAJCWRwcmludGsoIlZJRElPQ1NWQklGTVQgLyBWSURJT0NfU19GTVQ6ICVkXG4iLCBlcnIpOwogZG9uZToKQEAgLTEyMDgsOCArMTE4NCw3IEBACiAgKglUaGlzIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLgogICovCiBpbnQKLXY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKHN0cnVjdCBpbm9kZSAgICAgICAgICppbm9kZSwKLQkJCSAgIHN0cnVjdCBmaWxlCQkqZmlsZSwKK3Y0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKHN0cnVjdCBmaWxlCQkqZmlsZSwKIAkJCSAgIGludAkJCWNtZCwKIAkJCSAgIHZvaWQJCQkqYXJnLAogCQkJICAgdjRsMl9raW9jdGwgICAgICAgICAgZHJ2KQpAQCAtMTIxOCw2NCArMTE5Myw2NCBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZJRElPQ0dDQVA6CS8qIGNhcGFiaWxpdHkgKi8KLQkJZXJyID0gdjRsMV9jb21wYXRfZ2V0X2NhcGFiaWxpdGllcyhhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfY2FwYWJpbGl0aWVzKGFyZywgZmlsZSwgZHJ2KTsKIAkJYnJlYWs7CiAJY2FzZSBWSURJT0NHRkJVRjogLyogIGdldCBmcmFtZSBidWZmZXIgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF9mcmFtZV9idWZmZXIoYXJnLCBpbm9kZSwgZmlsZSwgZHJ2KTsKKwkJZXJyID0gdjRsMV9jb21wYXRfZ2V0X2ZyYW1lX2J1ZmZlcihhcmcsIGZpbGUsIGRydik7CiAJCWJyZWFrOwogCWNhc2UgVklESU9DU0ZCVUY6IC8qICBzZXQgZnJhbWUgYnVmZmVyICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfZnJhbWVfYnVmZmVyKGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X3NldF9mcmFtZV9idWZmZXIoYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ0dXSU46IC8qICBnZXQgd2luZG93IG9yIGNhcHR1cmUgZGltZW5zaW9ucyAgKi8KLQkJZXJyID0gdjRsMV9jb21wYXRfZ2V0X3dpbl9jYXBfZGltZW5zaW9ucyhhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfd2luX2NhcF9kaW1lbnNpb25zKGFyZywgZmlsZSwgZHJ2KTsKIAkJYnJlYWs7CiAJY2FzZSBWSURJT0NTV0lOOiAvKiAgc2V0IHdpbmRvdyBhbmQvb3IgY2FwdHVyZSBkaW1lbnNpb25zICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfd2luX2NhcF9kaW1lbnNpb25zKGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X3NldF93aW5fY2FwX2RpbWVuc2lvbnMoYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ0NBUFRVUkU6IC8qICB0dXJuIG9uL29mZiBwcmV2aWV3ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF90dXJuX3ByZXZpZXdfb25fb2ZmKGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X3R1cm5fcHJldmlld19vbl9vZmYoYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ0dDSEFOOiAvKiAgZ2V0IGlucHV0IGluZm9ybWF0aW9uICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfaW5wdXRfaW5mbyhhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfaW5wdXRfaW5mbyhhcmcsIGZpbGUsIGRydik7CiAJCWJyZWFrOwogCWNhc2UgVklESU9DU0NIQU46IC8qICBzZXQgaW5wdXQgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3NldF9pbnB1dChhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfaW5wdXQoYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ0dQSUNUOiAvKiAgZ2V0IHRvbmUgY29udHJvbHMgJiBwYXJ0aWFsIGNhcHR1cmUgZm9ybWF0ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfcGljdHVyZShhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfcGljdHVyZShhcmcsIGZpbGUsIGRydik7CiAJCWJyZWFrOwogCWNhc2UgVklESU9DU1BJQ1Q6IC8qICBzZXQgdG9uZSBjb250cm9scyAmIHBhcnRpYWwgY2FwdHVyZSBmb3JtYXQgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3NldF9waWN0dXJlKGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X3NldF9waWN0dXJlKGFyZywgZmlsZSwgZHJ2KTsKIAkJYnJlYWs7CiAJY2FzZSBWSURJT0NHVFVORVI6IC8qICBnZXQgdHVuZXIgaW5mb3JtYXRpb24gICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF90dW5lcihhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfdHVuZXIoYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ1NUVU5FUjogLyogIHNlbGVjdCBhIHR1bmVyIGlucHV0ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9zZWxlY3RfdHVuZXIoYXJnLCBpbm9kZSwgZmlsZSwgZHJ2KTsKKwkJZXJyID0gdjRsMV9jb21wYXRfc2VsZWN0X3R1bmVyKGFyZywgZmlsZSwgZHJ2KTsKIAkJYnJlYWs7CiAJY2FzZSBWSURJT0NHRlJFUTogLyogIGdldCBmcmVxdWVuY3kgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF9mcmVxdWVuY3koYXJnLCBpbm9kZSwgZmlsZSwgZHJ2KTsKKwkJZXJyID0gdjRsMV9jb21wYXRfZ2V0X2ZyZXF1ZW5jeShhcmcsIGZpbGUsIGRydik7CiAJCWJyZWFrOwogCWNhc2UgVklESU9DU0ZSRVE6IC8qICBzZXQgZnJlcXVlbmN5ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfZnJlcXVlbmN5KGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X3NldF9mcmVxdWVuY3koYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ0dBVURJTzogLyogIGdldCBhdWRpbyBwcm9wZXJ0aWVzL2NvbnRyb2xzICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfYXVkaW8oYXJnLCBpbm9kZSwgZmlsZSwgZHJ2KTsKKwkJZXJyID0gdjRsMV9jb21wYXRfZ2V0X2F1ZGlvKGFyZywgZmlsZSwgZHJ2KTsKIAkJYnJlYWs7CiAJY2FzZSBWSURJT0NTQVVESU86IC8qICBzZXQgYXVkaW8gY29udHJvbHMgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3NldF9hdWRpbyhhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfYXVkaW8oYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ01DQVBUVVJFOiAvKiAgY2FwdHVyZSBhIGZyYW1lICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9jYXB0dXJlX2ZyYW1lKGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X2NhcHR1cmVfZnJhbWUoYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ1NZTkM6IC8qICB3YWl0IGZvciBhIGZyYW1lICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9zeW5jKGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X3N5bmMoYXJnLCBmaWxlLCBkcnYpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ0dWQklGTVQ6IC8qIHF1ZXJ5IFZCSSBkYXRhIGNhcHR1cmUgZm9ybWF0ICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF92YmlfZm9ybWF0KGFyZywgaW5vZGUsIGZpbGUsIGRydik7CisJCWVyciA9IHY0bDFfY29tcGF0X2dldF92YmlfZm9ybWF0KGFyZywgZmlsZSwgZHJ2KTsKIAkJYnJlYWs7CiAJY2FzZSBWSURJT0NTVkJJRk1UOgotCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfdmJpX2Zvcm1hdChhcmcsIGlub2RlLCBmaWxlLCBkcnYpOworCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfdmJpX2Zvcm1hdChhcmcsIGZpbGUsIGRydik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9JT0NUTENNRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pbnQtZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW50LWRldmljZS5jCmluZGV4IDBlNDU0OTkuLmE5MzViYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pbnQtZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWludC1kZXZpY2UuYwpAQCAtMzIsNyArMzIsNyBAQAogc3RhdGljIERFRklORV9NVVRFWChtdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGludF9saXN0KTsKIAotc3RhdGljIHZvaWQgdjRsMl9pbnRfZGV2aWNlX3RyeV9hdHRhY2hfYWxsKHZvaWQpCit2b2lkIHY0bDJfaW50X2RldmljZV90cnlfYXR0YWNoX2FsbCh2b2lkKQogewogCXN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKm0sICpzOwogCkBAIC02Niw2ICs2Niw3IEBACiAJCX0KIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2ludF9kZXZpY2VfdHJ5X2F0dGFjaF9hbGwpOwogCiBzdGF0aWMgaW50IGlvY3RsX3NvcnRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiB7CkBAIC0xNDQsNiArMTQ1LDcgQEAKIAkJZmluZF9pb2N0bChkLT51LnNsYXZlLCBjbWQsCiAJCQkgICAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKW5vX3N1Y2hfaW9jdGxfMCkpKGQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pbnRfaW9jdGxfMCk7CiAKIHN0YXRpYyBpbnQgbm9fc3VjaF9pb2N0bF8xKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKmQsIHZvaWQgKmFyZykKIHsKQEAgLTE1Niw1ICsxNTgsNiBAQAogCQlmaW5kX2lvY3RsKGQtPnUuc2xhdmUsIGNtZCwKIAkJCSAgICh2NGwyX2ludF9pb2N0bF9mdW5jICopbm9fc3VjaF9pb2N0bF8xKSkoZCwgYXJnKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHY0bDJfaW50X2lvY3RsXzEpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCmluZGV4IDE1NWM5ZDcuLjcxMGUxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCkBAIC02MjUsMTMgKzYyNSwxMyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IF9fdmlkZW9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IF9fdmlkZW9fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCWNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyAqb3BzID0gdmZkLT5pb2N0bF9vcHM7Ci0Jdm9pZCAgICAgICAgICAgICAgICAgKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisJdm9pZCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoKHZmZC0+ZGVidWcgJiBWNEwyX0RFQlVHX0lPQ1RMKSAmJgogCQkJCSEodmZkLT5kZWJ1ZyAmIFY0TDJfREVCVUdfSU9DVExfQVJHKSkgewpAQCAtNjc1LDcgKzY3NSw3IEBACiAJIFY0TDIgaW9jdGxzLgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gJ3YnICYmIF9JT0NfTlIoY21kKSA8IEJBU0VfVklESU9DUFJJVkFURSkKLQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZywKKwkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGZpbGUsIGNtZCwgYXJnLAogCQkJCQkJX192aWRlb19kb19pb2N0bCk7CiAjZW5kaWYKIApAQCAtMTc2OCw3ICsxNzY4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgdmlkZW9faW9jdGwyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAoraW50IF9fdmlkZW9faW9jdGwyKHN0cnVjdCBmaWxlICpmaWxlLAogCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAljaGFyCXNidWZbMTI4XTsKQEAgLTE4MzIsNyArMTgzMiw3IEBACiAJfQogCiAJLyogSGFuZGxlcyBJT0NUTCAqLwotCWVyciA9IF9fdmlkZW9fZG9faW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgcGFyZyk7CisJZXJyID0gX192aWRlb19kb19pb2N0bChmaWxlLCBjbWQsIHBhcmcpOwogCWlmIChlcnIgPT0gLUVOT0lPQ1RMQ01EKQogCQllcnIgPSAtRUlOVkFMOwogCWlmIChpc19leHRfY3RybCkgewpAQCAtMTg2MCw0ICsxODYwLDExIEBACiAJa2ZyZWUobWJ1Zik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woX192aWRlb19pb2N0bDIpOworCitpbnQgdmlkZW9faW9jdGwyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gX192aWRlb19pb2N0bDIoZmlsZSwgY21kLCBhcmcpOworfQogRVhQT1JUX1NZTUJPTCh2aWRlb19pb2N0bDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMKaW5kZXggYjU2Y2ZmYy4uMGU3ZGNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jCkBAIC0xMjYsNyArMTI2LDYgQEAKIAltdXRleF9sb2NrKCZkdmItPmxvY2spOwogCWR2Yi0+bmZlZWRzLS07CiAJaWYgKDAgPT0gZHZiLT5uZmVlZHMgICYmICBOVUxMICE9IGR2Yi0+dGhyZWFkKSB7Ci0JCS8vIEZJWE1FOiBjeDg4MDJfY2FuY2VsX2J1ZmZlcnMoZGV2KTsKIAkJZXJyID0ga3RocmVhZF9zdG9wKGR2Yi0+dGhyZWFkKTsKIAkJZHZiLT50aHJlYWQgPSBOVUxMOwogCX0KQEAgLTEzNCwzMCArMTMzLDM4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIoc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiLAorc3RhdGljIGludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYWRhcHRlcihzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZmUsCiAJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKIAkJCSAgdm9pZCAqYWRhcHRlcl9wcml2LAogCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCQkgIHNob3J0ICphZGFwdGVyX25yKQorCQkJICBjaGFyICphZGFwdGVyX25hbWUsCisJCQkgIHNob3J0ICphZGFwdGVyX25yLAorCQkJICBpbnQgbWZlX3NoYXJlZCkKIHsKIAlpbnQgcmVzdWx0OwogCi0JbXV0ZXhfaW5pdCgmZHZiLT5sb2NrKTsKKwltdXRleF9pbml0KCZmZS0+bG9jayk7CiAKIAkvKiByZWdpc3RlciBhZGFwdGVyICovCi0JcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlciwgZHZiLT5uYW1lLCBtb2R1bGUsIGRldmljZSwKLQkJCQkgICAgICBhZGFwdGVyX25yKTsKKwlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZmUtPmFkYXB0ZXIsIGFkYXB0ZXJfbmFtZSwgbW9kdWxlLAorCQlkZXZpY2UsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkdmJfcmVnaXN0ZXJfYWRhcHRlciBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAotCQkgICAgICAgZHZiLT5uYW1lLCByZXN1bHQpOwotCQlnb3RvIGZhaWxfYWRhcHRlcjsKKwkJICAgICAgIGFkYXB0ZXJfbmFtZSwgcmVzdWx0KTsKIAl9Ci0JZHZiLT5hZGFwdGVyLnByaXYgPSBhZGFwdGVyX3ByaXY7CisJZmUtPmFkYXB0ZXIucHJpdiA9IGFkYXB0ZXJfcHJpdjsKKwlmZS0+YWRhcHRlci5tZmVfc2hhcmVkID0gbWZlX3NoYXJlZDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKHN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIpCit7CisJaW50IHJlc3VsdDsKIAogCS8qIHJlZ2lzdGVyIGZyb250ZW5kICovCi0JcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkdmItPmFkYXB0ZXIsIGR2Yi0+ZnJvbnRlbmQpOworCXJlc3VsdCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZChhZGFwdGVyLCBkdmItPmZyb250ZW5kKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHZiX3JlZ2lzdGVyX2Zyb250ZW5kIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCiAJCSAgICAgICBkdmItPm5hbWUsIHJlc3VsdCk7CkBAIC0xODMsNyArMTkwLDggQEAKIAlkdmItPmRteGRldi5maWx0ZXJudW0gICAgPSAyNTY7CiAJZHZiLT5kbXhkZXYuZGVtdXggICAgICAgID0gJmR2Yi0+ZGVtdXguZG14OwogCWR2Yi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7Ci0JcmVzdWx0ID0gZHZiX2RteGRldl9pbml0KCZkdmItPmRteGRldiwgJmR2Yi0+YWRhcHRlcik7CisJcmVzdWx0ID0gZHZiX2RteGRldl9pbml0KCZkdmItPmRteGRldiwgYWRhcHRlcik7CisKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHZiX2RteGRldl9pbml0IGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCiAJCSAgICAgICBkdmItPm5hbWUsIHJlc3VsdCk7CkBAIC0yMTQsNyArMjIyLDExIEBACiAJfQogCiAJLyogcmVnaXN0ZXIgbmV0d29yayBhZGFwdGVyICovCi0JZHZiX25ldF9pbml0KCZkdmItPmFkYXB0ZXIsICZkdmItPm5ldCwgJmR2Yi0+ZGVtdXguZG14KTsKKwlkdmJfbmV0X2luaXQoYWRhcHRlciwgJmR2Yi0+bmV0LCAmZHZiLT5kZW11eC5kbXgpOworCWlmIChkdmItPm5ldC5kdmJkZXYgPT0gTlVMTCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfZmVfY29ubjsKKwl9CiAJcmV0dXJuIDA7CiAKIGZhaWxfZmVfY29ubjoKQEAgLTIyOSwzMCArMjQxLDE1NyBAQAogCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZnJvbnRlbmQpOwogZmFpbF9mcm9udGVuZDoKIAlkdmJfZnJvbnRlbmRfZGV0YWNoKGR2Yi0+ZnJvbnRlbmQpOwotCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlcik7Ci1mYWlsX2FkYXB0ZXI6CisJZHZiLT5mcm9udGVuZCA9IE5VTEw7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2YikKLXsKLQlkdmJfbmV0X3JlbGVhc2UoJmR2Yi0+bmV0KTsKLQlkdmItPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2Yi0+ZGVtdXguZG14LCAmZHZiLT5mZV9tZW0pOwotCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX2h3KTsKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmR2Yi0+ZG14ZGV2KTsKLQlkdmJfZG14X3JlbGVhc2UoJmR2Yi0+ZGVtdXgpOwotCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZnJvbnRlbmQpOwotCWR2Yl9mcm9udGVuZF9kZXRhY2goZHZiLT5mcm9udGVuZCk7Ci0JZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyKTsKLX0KLQotRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcik7Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBjb21waWxlLWNvbW1hbmQ6ICJtYWtlIERWQj0xIgotICogRW5kOgotICovCisvKiBSZWdpc3RlciBhIHNpbmdsZSBhZGFwdGVyIGFuZCBvbmUgb3IgbW9yZSBmcm9udGVuZHMgKi8KK2ludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLAorCQkJICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCisJCQkgIHZvaWQgKmFkYXB0ZXJfcHJpdiwKKwkJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICBzaG9ydCAqYWRhcHRlcl9uciwKKwkJCSAgaW50IG1mZV9zaGFyZWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnE7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmU7CisJaW50IHJlczsKKworCWZlID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZChmLCAxKTsKKwlpZiAoIWZlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byByZWdpc3RlciB0aGUgYWRhcHRlciB3aGljaCBoYXMgbm8gZnJvbnRlbmRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQnJpbmcgdXAgdGhlIGFkYXB0ZXIgKi8KKwlyZXMgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYWRhcHRlcihmLCBtb2R1bGUsIGFkYXB0ZXJfcHJpdiwgZGV2aWNlLAorCQlmZS0+ZHZiLm5hbWUsIGFkYXB0ZXJfbnIsIG1mZV9zaGFyZWQpOworCWlmIChyZXMgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9hZGFwdGVyIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsIHJlcyk7CisJCXJldHVybiByZXM7CisJfQorCisJLyogQXR0YWNoIGFsbCBvZiB0aGUgZnJvbnRlbmRzIHRvIHRoZSBhZGFwdGVyICovCisJbXV0ZXhfbG9jaygmZi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHEsICZmLT5mZWxpc3QpIHsKKwkJZmUgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQsIGZlbGlzdCk7CisJCXJlcyA9IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZi0+YWRhcHRlciwgJmZlLT5kdmIpOworCQlpZiAocmVzIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9mcm9udGVuZCBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAorCQkJCWZlLT5kdmIubmFtZSwgcmVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisJcmV0dXJuIDA7CisKK2VycjoKKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cyhmKTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKTsKKwordm9pZCB2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYpCit7CisJdmlkZW9idWZfZHZiX2RlYWxsb2NfZnJvbnRlbmRzKGYpOworCisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZi0+YWRhcHRlcik7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cyk7CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKnZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoCisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIGludCBpZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSwgKnJldCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmlkID09IGlkKSB7CisJCQlyZXQgPSBmZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQpOworCitpbnQgdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsCisJc3RydWN0IGR2Yl9mcm9udGVuZCAqcCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmR2Yi5mcm9udGVuZCA9PSBwKSB7CisJCQlyZXQgPSBmZS0+aWQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfZmluZF9mcm9udGVuZCk7CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKnZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKQoreworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOworCisJZmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZlID09IE5VTEwpCisJCWdvdG8gZmFpbF9hbGxvYzsKKworCWZlLT5pZCA9IGlkOworCW11dGV4X2luaXQoJmZlLT5kdmIubG9jayk7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZmZS0+ZmVsaXN0LCAmZi0+ZmVsaXN0KTsKKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCitmYWlsX2FsbG9jOgorCXJldHVybiBmZTsKK30KK0VYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKTsKKwordm9pZCB2aWRlb2J1Zl9kdmJfZGVhbGxvY19mcm9udGVuZHMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnE7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmU7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgcSwgJmYtPmZlbGlzdCkgeworCQlmZSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCwgZmVsaXN0KTsKKwkJaWYgKGZlLT5kdmIubmV0LmR2YmRldikgeworCQkJZHZiX25ldF9yZWxlYXNlKCZmZS0+ZHZiLm5ldCk7CisJCQlmZS0+ZHZiLmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZlLT5kdmIuZGVtdXguZG14LAorCQkJCSZmZS0+ZHZiLmZlX21lbSk7CisJCQlmZS0+ZHZiLmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZlLT5kdmIuZGVtdXguZG14LAorCQkJCSZmZS0+ZHZiLmZlX2h3KTsKKwkJCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZmUtPmR2Yi5kbXhkZXYpOworCQkJZHZiX2RteF9yZWxlYXNlKCZmZS0+ZHZiLmRlbXV4KTsKKwkJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGZlLT5kdmIuZnJvbnRlbmQpOworCQl9CisJCWlmIChmZS0+ZHZiLmZyb250ZW5kKQorCQkJLyogYWx3YXlzIGFsbG9jYXRlZCwgbWF5IGhhdmUgYmVlbiByZXNldCAqLworCQkJZHZiX2Zyb250ZW5kX2RldGFjaChmZS0+ZHZiLmZyb250ZW5kKTsKKwkJbGlzdF9kZWwobGlzdCk7IC8qIHJlbW92ZSBsaXN0IGVudHJ5ICovCisJCWtmcmVlKGZlKTsJLyogZnJlZSBmcm9udGVuZCBhbGxvY2F0aW9uICovCisJfQorCW11dGV4X3VubG9jaygmZi0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9kZWFsbG9jX2Zyb250ZW5kcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDY1YzhhZjEuLmUxNWU0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0xMjgsMTIgKzEyOCw1NiBAQAogCWludCAgIGRlcHRoOwogfTsKIAotc3RhdGljIHN0cnVjdCB2aXZpX2ZtdCBmb3JtYXQgPSB7Ci0JLm5hbWUgICAgID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAotCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9ZVVlWLAotCS5kZXB0aCAgICA9IDE2LAorc3RhdGljIHN0cnVjdCB2aXZpX2ZtdCBmb3JtYXRzW10gPSB7CisJeworCQkubmFtZSAgICAgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkuZGVwdGggICAgPSAxNiwKKwl9LAorCXsKKwkJLm5hbWUgICAgID0gIjQ6MjoyLCBwYWNrZWQsIFVZVlkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NjUgKExFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NjUsIC8qIGdnZ2JiYmJiIHJycnJyZ2dnICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTY1IChCRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTY1WCwgLyogcnJycnJnZ2cgZ2dnYmJiYmIgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NTUgKExFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NTUsIC8qIGdnZ2JiYmJiIGFycnJycmdnICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTU1IChCRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTU1WCwgLyogYXJycnJyZ2cgZ2dnYmJiYmIgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgdml2aV9mbXQgKmdldF9mb3JtYXQoc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXZpX2ZtdCAqZm10OworCXVuc2lnbmVkIGludCBrOworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoZm9ybWF0cyk7IGsrKykgeworCQlmbXQgPSAmZm9ybWF0c1trXTsKKwkJaWYgKGZtdC0+Zm91cmNjID09IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoayA9PSBBUlJBWV9TSVpFKGZvcm1hdHMpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAmZm9ybWF0c1trXTsKK30KKwogc3RydWN0IHNnX3RvX2FkZHIgewogCWludCBwb3M7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKQEAgLTE5MCw2ICsyMzQsNyBAQAogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZiX3ZpZHE7CiAKIAllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICB0eXBlOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIGJhcnNbOF1bM107CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzNCwxMyArMjc5LDEwNyBAQAogI2RlZmluZSBUU1RBTVBfTUFYX1kgVFNUQU1QX01JTl9ZKzE1CiAjZGVmaW5lIFRTVEFNUF9NSU5fWCA2NAogCi1zdGF0aWMgdm9pZCBnZW5fbGluZShjaGFyICpiYXNlcCwgaW50IGluaXBvcywgaW50IHdtYXgsCitzdGF0aWMgdm9pZCBnZW5fdHdvcGl4KHN0cnVjdCB2aXZpX2ZoICpmaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY29sb3Jwb3MpCit7CisJdW5zaWduZWQgY2hhciByX3ksIGdfdSwgYl92OworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IGNvbG9yOworCisJcl95ID0gZmgtPmJhcnNbY29sb3Jwb3NdWzBdOyAvKiBSIG9yIHByZWNhbGN1bGF0ZWQgWSAqLworCWdfdSA9IGZoLT5iYXJzW2NvbG9ycG9zXVsxXTsgLyogRyBvciBwcmVjYWxjdWxhdGVkIFUgKi8KKwliX3YgPSBmaC0+YmFyc1tjb2xvcnBvc11bMl07IC8qIEIgb3IgcHJlY2FsY3VsYXRlZCBWICovCisKKwlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCA0OyBjb2xvcisrKSB7CisJCXAgPSBidWYgKyBjb2xvcjsKKworCQlzd2l0Y2ggKGZoLT5mbXQtPmZvdXJjYykgeworCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gcl95OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCSpwID0gZ191OworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCSpwID0gYl92OworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDE6CisJCQljYXNlIDM6CisJCQkJKnAgPSByX3k7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJKnAgPSBnX3U7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJKnAgPSBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChyX3kgPDwgMykgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NVg6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAocl95IDw8IDMpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChyX3kgPDwgMikgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NVg6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAocl95IDw8IDIpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2VuX2xpbmUoc3RydWN0IHZpdmlfZmggKmZoLCBjaGFyICpiYXNlcCwgaW50IGluaXBvcywgaW50IHdtYXgsCiAJCWludCBobWF4LCBpbnQgbGluZSwgaW50IGNvdW50LCBjaGFyICp0aW1lc3RyKQogewotCWludCAgdywgaSwgaiwgeTsKKwlpbnQgIHcsIGksIGo7CiAJaW50IHBvcyA9IGluaXBvczsKLQljaGFyICpwLCAqczsKLQl1OCAgIGNociwgciwgZywgYiwgY29sb3I7CisJY2hhciAqczsKKwl1OCBjaHI7CiAKIAkvKiBXZSB3aWxsIGp1c3QgZHVwbGljYXRlIHRoZSBzZWNvbmQgcGl4ZWwgYXQgdGhlIHBhY2tldCAqLwogCXdtYXggLz0gMjsKQEAgLTI0OCwyNyArMzg3LDkgQEAKIAkvKiBHZW5lcmF0ZSBhIHN0YW5kYXJkIGNvbG9yIGJhciBwYXR0ZXJuICovCiAJZm9yICh3ID0gMDsgdyA8IHdtYXg7IHcrKykgewogCQlpbnQgY29sb3Jwb3MgPSAoKHcgKyBjb3VudCkgKiA4Lyh3bWF4ICsgMSkpICUgODsKLQkJciA9IGJhcnNbY29sb3Jwb3NdWzBdOwotCQlnID0gYmFyc1tjb2xvcnBvc11bMV07Ci0JCWIgPSBiYXJzW2NvbG9ycG9zXVsyXTsKIAotCQlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCA0OyBjb2xvcisrKSB7Ci0JCQlwID0gYmFzZXAgKyBwb3M7Ci0KLQkJCXN3aXRjaCAoY29sb3IpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMjoKLQkJCQkqcCA9IFRPX1kociwgZywgYik7CS8qIEx1bWEgKi8KLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQkqcCA9IFRPX1UociwgZywgYik7CS8qIENiICovCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJKnAgPSBUT19WKHIsIGcsIGIpOwkvKiBDciAqLwotCQkJCWJyZWFrOwotCQkJfQotCQkJcG9zKys7Ci0JCX0KKwkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIGNvbG9ycG9zKTsKKwkJcG9zICs9IDQ7IC8qIG9ubHkgMTYgYnBwIHN1cHBvcnRlZCBmb3Igbm93ICovCiAJfQogCiAJLyogQ2hlY2tzIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGltZXN0YW1wICovCkBAIC0yODMsMzggKzQwNCwxMiBAQAogCQlmb3IgKHMgPSB0aW1lc3RyOyAqczsgcysrKSB7CiAJCQljaHIgPSByb204eDE2X2JpdHNbKCpzLTB4MzApKjE2K2xpbmUtVFNUQU1QX01JTl9ZXTsKIAkJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJCQlpZiAoY2hyICYgMSA8PCAoNyAtIGkpKSB7Ci0JCQkJCS8qIEZvbnQgY29sb3IqLwotCQkJCQlyID0gMDsKLQkJCQkJZyA9IDE5ODsKLQkJCQkJYiA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogQmFja2dyb3VuZCBjb2xvciAqLwotCQkJCQlyID0gYmFyc1tCTEFDS11bMF07Ci0JCQkJCWcgPSBiYXJzW0JMQUNLXVsxXTsKLQkJCQkJYiA9IGJhcnNbQkxBQ0tdWzJdOwotCQkJCX0KLQogCQkJCXBvcyA9IGluaXBvcyArIGogKiAyOwotCQkJCWZvciAoY29sb3IgPSAwOyBjb2xvciA8IDQ7IGNvbG9yKyspIHsKLQkJCQkJcCA9IGJhc2VwICsgcG9zOwotCi0JCQkJCXkgPSBUT19ZKHIsIGcsIGIpOwotCi0JCQkJCXN3aXRjaCAoY29sb3IpIHsKLQkJCQkJY2FzZSAwOgotCQkJCQljYXNlIDI6Ci0JCQkJCQkqcCA9IFRPX1kociwgZywgYik7IC8qIEx1bWEgKi8KLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDE6Ci0JCQkJCQkqcCA9IFRPX1UociwgZywgYik7IC8qIENiICovCi0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSAzOgotCQkJCQkJKnAgPSBUT19WKHIsIGcsIGIpOyAvKiBDciAqLwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJcG9zKys7Ci0JCQkJfQorCQkJCS8qIERyYXcgd2hpdGUgZm9udCBvbiBibGFjayBiYWNrZ3JvdW5kICovCisJCQkJaWYgKGNociAmIDEgPDwgKDcgLSBpKSkKKwkJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIFdISVRFKTsKKwkJCQllbHNlCisJCQkJCWdlbl90d29waXgoZmgsIGJhc2VwICsgcG9zLCBCTEFDSyk7CiAJCQkJaisrOwogCQkJfQogCQl9CkBAIC0zMjQsOCArNDE5LDkgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHZpdmlfZmlsbGJ1ZmYoc3RydWN0IHZpdmlfZGV2ICpkZXYsIHN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgdml2aV9maWxsYnVmZihzdHJ1Y3Qgdml2aV9maCAqZmgsIHN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmKQogeworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAlpbnQgaCAsIHBvcyA9IDA7CiAJaW50IGhtYXggID0gYnVmLT52Yi5oZWlnaHQ7CiAJaW50IHdtYXggID0gYnVmLT52Yi53aWR0aDsKQEAgLTM0MSw3ICs0MzcsNyBAQAogCQlyZXR1cm47CiAKIAlmb3IgKGggPSAwOyBoIDwgaG1heDsgaCsrKSB7Ci0JCWdlbl9saW5lKHRtcGJ1ZiwgMCwgd21heCwgaG1heCwgaCwgZGV2LT5tdl9jb3VudCwKKwkJZ2VuX2xpbmUoZmgsIHRtcGJ1ZiwgMCwgd21heCwgaG1heCwgaCwgZGV2LT5tdl9jb3VudCwKIAkJCSBkZXYtPnRpbWVzdHIpOwogCQltZW1jcHkodmJ1ZiArIHBvcywgdG1wYnVmLCB3bWF4ICogMik7CiAJCXBvcyArPSB3bWF4KjI7CkBAIC00MTAsNyArNTA2LDcgQEAKIAlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwogCiAJLyogRmlsbCBidWZmZXIgKi8KLQl2aXZpX2ZpbGxidWZmKGRldiwgYnVmKTsKKwl2aXZpX2ZpbGxidWZmKGZoLCBidWYpOwogCWRwcmludGsoZGV2LCAxLCAiZmlsbGVkIGJ1ZmZlciAlcFxuIiwgYnVmKTsKIAogCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CkBAIC02MzYsMTEgKzczMiwxNSBAQAogc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7Ci0JaWYgKGYtPmluZGV4ID4gMCkKKwlzdHJ1Y3Qgdml2aV9mbXQgKmZtdDsKKworCWlmIChmLT5pbmRleCA+PSBBUlJBWV9TSVpFKGZvcm1hdHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZvcm1hdC5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdC5mb3VyY2M7CisJZm10ID0gJmZvcm1hdHNbZi0+aW5kZXhdOworCisJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgZm10LT5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZtdC0+Zm91cmNjOwogCXJldHVybiAwOwogfQogCkBAIC02NzAsMTMgKzc3MCwxMiBAQAogCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKIAl1bnNpZ25lZCBpbnQgbWF4dywgbWF4aDsKIAotCWlmIChmb3JtYXQuZm91cmNjICE9IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpIHsKLQkJZHByaW50ayhkZXYsIDEsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIGludmFsaWQuICIKLQkJCSJEcml2ZXIgYWNjZXB0cyBvbmx5IDB4JTA4eFxuIiwKLQkJCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQsIGZvcm1hdC5mb3VyY2MpOworCWZtdCA9IGdldF9mb3JtYXQoZik7CisJaWYgKCFmbXQpIHsKKwkJZHByaW50ayhkZXYsIDEsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIGludmFsaWQuXG4iLAorCQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlmbXQgPSAmZm9ybWF0OwogCiAJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwogCkBAIC03MTQsNiArODEzLDggQEAKIHsKIAlzdHJ1Y3Qgdml2aV9maCAgKmZoID0gcHJpdjsKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZiX3ZpZHE7CisJdW5zaWduZWQgY2hhciByLCBnLCBiOworCWludCBrLCBpc195dXY7CiAKIAlpbnQgcmV0ID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CiAJaWYgKHJldCA8IDApCkBAIC03MjcsMTIgKzgyOCw0OSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmaC0+Zm10ICAgICAgICAgICA9ICZmb3JtYXQ7CisJZmgtPmZtdCAgICAgICAgICAgPSBnZXRfZm9ybWF0KGYpOwogCWZoLT53aWR0aCAgICAgICAgID0gZi0+Zm10LnBpeC53aWR0aDsKIAlmaC0+aGVpZ2h0ICAgICAgICA9IGYtPmZtdC5waXguaGVpZ2h0OwogCWZoLT52Yl92aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKIAlmaC0+dHlwZSAgICAgICAgICA9IGYtPnR5cGU7CiAKKwkvKiBwcmVjYWxjdWxhdGUgY29sb3IgYmFyIHZhbHVlcyB0byBzcGVlZCB1cCByZW5kZXJpbmcgKi8KKwlmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisJCXIgPSBiYXJzW2tdWzBdOworCQlnID0gYmFyc1trXVsxXTsKKwkJYiA9IGJhcnNba11bMl07CisJCWlzX3l1diA9IDA7CisKKwkJc3dpdGNoIChmaC0+Zm10LT5mb3VyY2MpIHsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwkJCWlzX3l1diA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjVYOgorCQkJciA+Pj0gMzsKKwkJCWcgPj49IDI7CisJCQliID4+PSAzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1WDoKKwkJCXIgPj49IDM7CisJCQlnID4+PSAzOworCQkJYiA+Pj0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGlzX3l1dikgeworCQkJZmgtPmJhcnNba11bMF0gPSBUT19ZKHIsIGcsIGIpOwkvKiBMdW1hICovCisJCQlmaC0+YmFyc1trXVsxXSA9IFRPX1UociwgZywgYik7CS8qIENiICovCisJCQlmaC0+YmFyc1trXVsyXSA9IFRPX1YociwgZywgYik7CS8qIENyICovCisJCX0gZWxzZSB7CisJCQlmaC0+YmFyc1trXVswXSA9IHI7CisJCQlmaC0+YmFyc1trXVsxXSA9IGc7CisJCQlmaC0+YmFyc1trXVsyXSA9IGI7CisJCX0KKwl9CisKIAlyZXQgPSAwOwogb3V0OgogCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CkBAIC04ODYsOCArMTAyNCw2IEBACiAJRmlsZSBvcGVyYXRpb25zIGZvciB0aGUgZGV2aWNlCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIGxpbmVfYnVmX3NpemUobm9ybSkgKG5vcm1fbWF4dyhub3JtKSooZm9ybWF0LmRlcHRoKzcpLzgpCi0KIHN0YXRpYyBpbnQgdml2aV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CkBAIC05MzYsNyArMTA3Miw3IEBACiAJZmgtPmRldiAgICAgID0gZGV2OwogCiAJZmgtPnR5cGUgICAgID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWZoLT5mbXQgICAgICA9ICZmb3JtYXQ7CisJZmgtPmZtdCAgICAgID0gJmZvcm1hdHNbMF07CiAJZmgtPndpZHRoICAgID0gNjQwOwogCWZoLT5oZWlnaHQgICA9IDQ4MDsKIApAQCAtMTAyNywxMSArMTE2MywxMSBAQAogCiAJCWlmICgtMSAhPSBkZXYtPnZmZC0+bWlub3IpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bnJlZ2lzdGVyaW5nIC9kZXYvdmlkZW8lZFxuIiwKLQkJCQlWSVZJX01PRFVMRV9OQU1FLCBkZXYtPnZmZC0+bWlub3IpOworCQkJCVZJVklfTU9EVUxFX05BTUUsIGRldi0+dmZkLT5udW0pOwogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZmQpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbGVhc2luZyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQkJVklWSV9NT0RVTEVfTkFNRSwgZGV2LT52ZmQtPm1pbm9yKTsKKwkJCQlWSVZJX01PRFVMRV9OQU1FLCBkZXYtPnZmZC0+bnVtKTsKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmZkKTsKIAkJfQogCkBAIC0xMTcxLDcgKzEzMDcsNyBAQAogCiAJCWRldi0+dmZkID0gdmZkOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQlWSVZJX01PRFVMRV9OQU1FLCB2ZmQtPm1pbm9yKTsKKwkJCVZJVklfTU9EVUxFX05BTUUsIHZmZC0+bnVtKTsKIAl9CiAKIAlpZiAocmV0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwppbmRleCA0NWJlOWVjLi42N2FhMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwpAQCAtMjIsMzIgKzIyLDIxIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KLSNkZWZpbmUgSTJDX05BTUUoeCkgKHgpLT5uYW1lCi0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogCi0jZGVmaW5lIEkyQ19WUFgzMjIwICAgICAgICAweDg2Ci0jZGVmaW5lIFZQWDMyMjBfREVCVUcJS0VSTl9ERUJVRyAidnB4MzIyMDogIgorTU9EVUxFX0RFU0NSSVBUSU9OKCJ2cHgzMjIwYS92cHgzMjE2Yi92cHgzMjE0YyB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTGF1cmVudCBQaW5jaGFydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogI2RlZmluZSBWUFhfVElNRU9VVF9DT1VOVCAgMTAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTY3LDEwICs1Niw4IEBACiBzdGF0aWMgY2hhciAqaW5wdXRzW10gPSB7ICJpbnRlcm5hbCIsICJjb21wb3NpdGUiLCAic3ZpZGVvIiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXZweDMyMjBfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKKworc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTc4LDE1ICs2NSwxMiBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci12cHgzMjIwX3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfZnBfc3RhdHVzIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCXVuc2lnbmVkIGludCBpOwpAQCAtMTA2LDE0ICs5MCwxMSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9mcF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICB1OCAgICAgICAgICAgICAgICAgZnBhZGRyLAotCQkgIHUxNiAgICAgICAgICAgICAgICBkYXRhKQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGZwYWRkciwgdTE2IGRhdGEpCiB7CiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFdSIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI3LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTIyLDIyICsxMDMsMjAgQEAKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgZGF0YSB0byB0aGUgRlBEQVQgcmVnaXN0ZXIgKi8KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDB4MjgsIHN3YWIxNihkYXRhKSkgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2Ci12cHgzMjIwX2ZwX3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1MTYgICAgICAgICAgICAgICAgZnBhZGRyKQorc3RhdGljIHUxNiB2cHgzMjIwX2ZwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGZwYWRkcikKIHsKIAlzMTYgZGF0YTsKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgYWRkcmVzcyB0byB0aGUgRlBSRCByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyNiwgc3dhYjE2KGZwYWRkcikpID09IC0xKSB7Ci0JCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE0NywyNSArMTI2LDIyIEBACiAJLyogUmVhZCB0aGUgMTYtYml0IGRhdGEgZnJvbSB0aGUgRlBEQVQgcmVnaXN0ZXIgKi8KIAlkYXRhID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgMHgyOCk7CiAJaWYgKGRhdGEgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiBzd2FiMTYoZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IC0xOwogCiAJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCXJlZyA9ICpkYXRhKys7Ci0JCWlmICgocmV0ID0KLQkJICAgICB2cHgzMjIwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKSkgPCAwKQorCQlyZXQgPSB2cHgzMjIwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAkJbGVuIC09IDI7CiAJfQpAQCAtMTczLDEwICsxNDksOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfd3JpdGVfZnBfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCB1MTYgICAgICAgICAqZGF0YSwKLQkJCXVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHZweDMyMjBfd3JpdGVfZnBfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3QgdTE2ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gMDsKQEAgLTI4NSwyNSArMjU5LDIwIEBACiAJMHg0YiwgMHgyOTgsCQkvKiBQTEwgZ2FpbiAqLwogfTsKIAotc3RhdGljIHZvaWQKLXZweDMyMjBfZHVtcF9pMmMgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCB2cHgzMjIwX2R1bXBfaTJjKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IGxlbiA9IHNpemVvZihpbml0X2NvbW1vbik7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGluaXRfY29tbW9uOwogCiAJd2hpbGUgKGxlbiA+IDEpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRyAidnB4MzIxNmIgaTJjIHJlZyAweCUwMnggZGF0YSAweCUwMnhcbiIsCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImkyYyByZWcgMHglMDJ4IGRhdGEgMHglMDJ4XG4iLAogCQkJKmRhdGEsIHZweDMyMjBfcmVhZChjbGllbnQsICpkYXRhKSk7CiAJCWRhdGEgKz0gMjsKIAkJbGVuIC09IDI7CiAJfQogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgdnB4MzIyMF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTMxNSw3ICsyODQsNiBAQAogCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9mcCwKIAkJCQkgICAgICAgc2l6ZW9mKGluaXRfZnApID4+IDEpOwogCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X250c2MsCiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKQEAgLTMzNCwyMSArMzAyLDIwIEBACiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwogCQkJYnJlYWs7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9EVU1QOgogCXsKIAkJdnB4MzIyMF9kdW1wX2kyYyhjbGllbnQpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewogCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX0NBUEFCSUxJVElFU1xuIik7CiAKIAkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKIAkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKQEAgLTM1NywyMCArMzI0LDE4IEBACiAJCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSAzOwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewogCQlpbnQgcmVzID0gMCwgc3RhdHVzOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogREVDT0RFUl9HRVRfU1RBVFVTXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX1NUQVRVU1xuIik7CiAKIAkJc3RhdHVzID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHgwZjMpOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzOiAweCUwNHhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTA0eFxuIiwgc3RhdHVzKTsKIAogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCXJldHVybiBzdGF0dXM7CkBAIC0zNzksNyArMzQ0LDYgQEAKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EIHwgREVDT0RFUl9TVEFUVVNfQ09MT1I7CiAKIAkJCXN3aXRjaCAoc3RhdHVzICYgMHgxOCkgewotCiAJCQljYXNlIDB4MDA6CiAJCQljYXNlIDB4MTA6CiAJCQljYXNlIDB4MTQ6CkBAIC00MDAsOCArMzY0LDggQEAKIAkJfQogCiAJCSooaW50ICopIGFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAl7CkBAIC00MTMsNTAgKzM3Nyw0MyBAQAogCQkgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KIAkJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IERFQ09ERVJfU0VUX05PUk0gJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfU0VUX05PUk0gJWRcbiIsICppYXJnKTsKIAkJc3dpdGNoICgqaWFyZykgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKIAkJCQkJICAgICAgIHNpemVvZihpbml0X250c2MpID4+IDEpOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBub3JtIHN3aXRjaGVkIHRvIE5UU0NcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIE5UU0NcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1BBTDoKIAkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKIAkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gUEFMXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfc2VjYW0sCiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9zZWNhbSkgPj4gMSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gU0VDQU1cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9BVVRPOgogCQkJLyogRklYTUUgVGhpcyBpcyBvbmx5IHByZWxpbWluYXJ5IHN1cHBvcnQgKi8KIAkJCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKSAmIDB4MjA7CiAJCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgMHgwMGMwIHwgZGF0YSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gQXV0b1xuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gQVVUT1xuIik7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7CiAKIAkJLyogQW5kIGhlcmUgd2Ugc2V0IHRoZSBiYWNrZWQgdXAgdmlkZW8gaW5wdXQgYWdhaW4gKi8KIAkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIHRlbXBfaW5wdXQgfCAweDAwMTApOwogCQl1ZGVsYXkoMTApOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAl7CkBAIC00NzUsOCArNDMyLDcgQEAKIAkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IGlucHV0IHN3aXRjaGVkIHRvICVzXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaW5wdXRzWyppYXJnXSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlucHV0IHN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbKmlhcmddKTsKIAogCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHgzMywgaW5wdXRbKmlhcmddWzBdKTsKIApAQCAtNDg4LDggKzQ0NCw4IEBACiAJCQkJIGRhdGEgfCAoaW5wdXRbKmlhcmddWzFdIDw8IDUpIHwgMHgwMDEwKTsKIAogCQl1ZGVsYXkoMTApOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJewpAQCAtNDk5LDE5ICs0NTUsMTggQEAKIAkJaWYgKCppYXJnICE9IDApIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBERUNPREVSX0VOQUJMRV9PVVRQVVQgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfRU5BQkxFX09VVFBVVCAlZFxuIiwgKmlhcmcpOwogCiAJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGYyLCAoKmlhcmcgPyAweDFiIDogMHgwMCkpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgogCXsKQEAgLTU0Miw4ICs0OTcsOCBAQAogCQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4MWMsCiAJCQkJCSAoKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA2KSAmIDB4RkZGKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NTIsOCArNTA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9pbml0X2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXZweDMyMjBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CiAJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKQEAgLTU2NywxMTUgKzUyMSwyNiBAQAogICogQ2xpZW50IG1hbmFnZW1lbnQgY29kZQogICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KLSAgICB7IEkyQ19WUFgzMjIwID4+IDEsIChJMkNfVlBYMzIyMCA+PiAxKSArIDQsCi0JSTJDX0NMSUVOVF9FTkQKLX07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg2ID4+IDEsIDB4OGUgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdnB4MzIyMF9pMmNfZHJpdmVyOwotCi1zdGF0aWMgaW50Ci12cHgzMjIwX2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHZweDMyMjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXZweDMyMjBfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlcjsKLQotCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXNcbiIsIF9fZnVuY19fKTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKwl1OCB2ZXI7CisJdTE2IHBuOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkKLQkgICAgKGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCi0JCXJldHVybiAwOwotCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJnZweDMyMjBfaTJjX2RyaXZlcjsKLQotCS8qIENoZWNrIGZvciBtYW51ZmFjdHVyZSBJRCBhbmQgcGFydCBudW1iZXIgKi8KLQlpZiAoa2luZCA8IDApIHsKLQkJdTggaWQ7Ci0JCXUxNiBwbjsKLQotCQlpZCA9IHZweDMyMjBfcmVhZChjbGllbnQsIDB4MDApOwotCQlpZiAoaWQgIT0gMHhlYykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTwotCQkJCSJ2cHgzMjIwX2F0dGFjaDogV3JvbmcgbWFudWZhY3R1cmVyIElEICgweCUwMngpXG4iLAotCQkJCWlkKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCXBuID0gKHZweDMyMjBfcmVhZChjbGllbnQsIDB4MDIpIDw8IDgpICsKLQkJICAgIHZweDMyMjBfcmVhZChjbGllbnQsIDB4MDEpOwotCQlzd2l0Y2ggKHBuKSB7Ci0JCWNhc2UgMHg0NjgwOgotCQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAidnB4MzIyMGEiLAotCQkJCXNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSAweDQyNjA6Ci0JCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJ2cHgzMjE2YiIsCi0JCQkJc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIDB4NDI4MDoKLQkJCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInZweDMyMTRjIiwKLQkJCQlzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBXcm9uZyBwYXJ0IG51bWJlciAoMHglMDR4KVxuIiwKLQkJCQlfX2Z1bmNfXywgcG4pOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAiZm9yY2VkIHZweDMyeHgiLAotCQkJc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQl9CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCiAJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2cHgzMjIwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC02ODUsNjMgKzU1MCw1MiBAQAogCWRlY29kZXItPnNhdCA9IDMyNzY4OwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCi0JZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gZXJyOworCXZlciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDApOworCXBuID0gKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDIpIDw8IDgpICsKKwkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMSk7CisJaWYgKHZlciA9PSAweGVjKSB7CisJCXN3aXRjaCAocG4pIHsKKwkJY2FzZSAweDQ2ODA6CisJCQluYW1lID0gInZweDMyMjBhIjsKKwkJCWJyZWFrOworCQljYXNlIDB4NDI2MDoKKwkJCW5hbWUgPSAidnB4MzIxNmIiOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MjgwOgorCQkJbmFtZSA9ICJ2cHgzMjE0YyI7CisJCQlicmVhazsKKwkJfQogCX0KLQotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogdnB4MzJ4eCBjbGllbnQgZm91bmQgYXQgYWRkcmVzcyAweCUwMnhcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCksIGNsaWVudC0+YWRkciA8PCAxKTsKKwlpZiAobmFtZSkKKwkJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIG5hbWUsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwllbHNlCisJCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgKCUwMng6JTA0eCkgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQl2ZXIsIHBuLCBjbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCXZweDMyMjBfaW5pdF9jbGllbnQoY2xpZW50KTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHZweDMyMjBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmdnB4MzIyMF9kZXRlY3RfY2xpZW50KTsKLQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBpMmNfcHJvYmUgcmV0dXJuZWQgJWRcbiIsCi0JCV9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIGNvZGUKLSAqLwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdnB4MzIyMF9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInZweDMyMjAiLAotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQotCS5hdHRhY2hfYWRhcHRlciA9IHZweDMyMjBfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSB2cHgzMjIwX2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSB2cHgzMjIwX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdnB4MzIyMF9pZFtdID0geworCXsgInZweDMyMjBhIiwgMCB9LAorCXsgInZweDMyMTZiIiwgMCB9LAorCXsgInZweDMyMTRjIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB2cHgzMjIwX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXZweDMyMjBfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnZweDMyMjBfaTJjX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotdnB4MzIyMF9jbGVhbnVwICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZ2cHgzMjIwX2kyY19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh2cHgzMjIwX2luaXQpOwotbW9kdWxlX2V4aXQodnB4MzIyMF9jbGVhbnVwKTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJ2cHgzMjIwYS92cHgzMjE2Yi92cHgzMjE0YyB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiTGF1cmVudCBQaW5jaGFydCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInZweDMyMjAiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAorCS5jb21tYW5kID0gdnB4MzIyMF9jb21tYW5kLAorCS5wcm9iZSA9IHZweDMyMjBfcHJvYmUsCisJLnJlbW92ZSA9IHZweDMyMjBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHZweDMyMjBfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCBkY2Q0NWRiLi40ZGZiNDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtMjM5OCw3ICsyMzk4LDcgQEAKIAljYW0tPnNlbnNvciA9IENDX1VOS05PV047CiAJREJHKDEsICJJbWFnZSBzZW5zb3IgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGZvciAlcyAoL2Rldi92aWRlbyVkKS4gIgogCSAgICAgICAiVHJ5IHRvIGRldGFjaCBhbmQgYXR0YWNoIHRoaXMgZGV2aWNlIGFnYWluIiwKLQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGNhbS0+djRsZGV2LT5taW5vcikKKwkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGNhbS0+djRsZGV2LT5udW0pCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjY0NCw3ICsyNjQ0LDcgQEAKIHsKIAltdXRleF9sb2NrKCZ3OTk2OGNmX2Rldmxpc3RfbXV0ZXgpOwogCi0JREJHKDIsICJWNEwgZGV2aWNlIGRlcmVnaXN0ZXJlZDogL2Rldi92aWRlbyVkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCURCRygyLCAiVjRMIGRldmljZSBkZXJlZ2lzdGVyZWQ6IC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5udW0pCiAKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CiAJbGlzdF9kZWwoJmNhbS0+djRsbGlzdCk7CkBAIC0yNjc5LDcgKzI2NzksNyBAQAogCQlEQkcoMiwgIk5vIHN1cHBvcnRlZCBpbWFnZSBzZW5zb3IgaGFzIGJlZW4gZGV0ZWN0ZWQgYnkgdGhlICIKIAkJICAgICAgICInb3ZjYW1jaGlwJyBtb2R1bGUgZm9yIHRoZSAlcyAoL2Rldi92aWRlbyVkKS4gTWFrZSAiCiAJCSAgICAgICAic3VyZSBpdCBpcyBsb2FkZWQgKmJlZm9yZSogKHJlKWNvbm5lY3RpbmcgdGhlIGNhbWVyYS4iLAotCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGNhbS0+djRsZGV2LT5taW5vcikKKwkJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bnVtKQogCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yNjg3LDcgKzI2ODcsNyBAQAogCiAJaWYgKGNhbS0+dXNlcnMpIHsKIAkJREJHKDIsICIlcyAoL2Rldi92aWRlbyVkKSBoYXMgYmVlbiBhbHJlYWR5IG9jY3VwaWVkIGJ5ICclcyciLAotCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksY2FtLT52NGxkZXYtPm1pbm9yLGNhbS0+Y29tbWFuZCkKKwkJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bnVtLCBjYW0tPmNvbW1hbmQpCiAJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spfHwoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSkgewogCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwpAQCAtMjcwOSw3ICsyNzA5LDcgQEAKIAl9CiAKIAlEQkcoNSwgIk9wZW5pbmcgJyVzJywgL2Rldi92aWRlbyVkIC4uLiIsCi0JICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bWlub3IpCisJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bnVtKQogCiAJY2FtLT5zdHJlYW1pbmcgPSAwOwogCWNhbS0+bWlzY29uZmlndXJlZCA9IDA7CkBAIC0yOTQ3LDcgKzI5NDcsNyBAQAogCQkJLm1pbmhlaWdodCA9IGNhbS0+bWluaGVpZ2h0LAogCQl9OwogCQlzcHJpbnRmKGNhcC5uYW1lLCAiVzk5Nls4N11DRiBVU0IgQ2FtZXJhICMlZCIsCi0JCQljYW0tPnY0bGRldi0+bWlub3IpOworCQkJY2FtLT52NGxkZXYtPm51bSk7CiAJCWNhcC5tYXh3aWR0aCA9IChjYW0tPnVwc2NhbGluZyAmJiB3OTk2OGNmX3ZwcCkKIAkJCSAgICAgICA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX1dJRFRILCBjYW0tPm1heHdpZHRoKQogCQkJCSA6IGNhbS0+bWF4d2lkdGg7CkBAIC0zNTY3LDcgKzM1NjcsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JREJHKDIsICJWNEwgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCURCRygyLCAiVjRMIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5udW0pCiAKIAkvKiBTZXQgc29tZSBiYXNpYyBjb25zdGFudHMgKi8KIAl3OTk2OGNmX2NvbmZpZ3VyZV9jYW1lcmEoY2FtLCB1ZGV2LCBtb2RfaWQsIGRldl9ucik7CkBAIC0zNjE4LDcgKzM2MTgsNyBAQAogCQkJREJHKDIsICJUaGUgZGV2aWNlIGlzIG9wZW4gKC9kZXYvdmlkZW8lZCkhICIKIAkJCSAgICAgICAiUHJvY2VzcyBuYW1lOiAlcy4gRGVyZWdpc3RyYXRpb24gYW5kIG1lbW9yeSAiCiAJCQkgICAgICAgImRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQgb24gY2xvc2UuIiwKLQkJCSAgICBjYW0tPnY0bGRldi0+bWlub3IsIGNhbS0+Y29tbWFuZCkKKwkJCSAgICBjYW0tPnY0bGRldi0+bnVtLCBjYW0tPmNvbW1hbmQpCiAJCQljYW0tPm1pc2NvbmZpZ3VyZWQgPSAxOwogCQkJdzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSk7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwppbmRleCA2YTA5MDJiLi45ZmM1ODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKQEAgLTUzOSw3ICs1MzksNyBAQAogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlVSQiB0aW1lb3V0IHJlYWNoZWQuIFRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gVG8gIgogCQkgICAgICAgInVzZSBpdCwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNjQwLDcgKzY0MCw3IEBACiB7CiAJc3RydWN0IHpjMDMwMV9kZXZpY2UgKmNhbSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgemMwMzAxX2RldmljZSwKIAkJCQkJCSBrcmVmKTsKLQlEQkcoMiwgIlY0TDIgZGV2aWNlIC9kZXYvdmlkZW8lZCBkZXJlZ2lzdGVyZWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygyLCAiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZCIsIGNhbS0+djRsZGV2LT5udW0pOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBOVUxMKTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CiAJdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOwpAQCAtNjc5LDcgKzY3OSw3IEBACiAJfQogCiAJaWYgKGNhbS0+dXNlcnMpIHsKLQkJREJHKDIsICJEZXZpY2UgL2Rldi92aWRlbyVkIGlzIGJ1c3kuLi4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCQlEQkcoMiwgIkRldmljZSAvZGV2L3ZpZGVvJWQgaXMgYnVzeS4uLiIsIGNhbS0+djRsZGV2LT5udW0pOwogCQlEQkcoMywgIlNpbXVsdGFuZW91cyBvcGVucyBhcmUgbm90IHN1cHBvcnRlZCIpOwogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAogCQkgICAgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKQEAgLTcyMiw3ICs3MjIsNyBAQAogCWNhbS0+ZnJhbWVfY291bnQgPSAwOwogCXpjMDMwMV9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOwogCi0JREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuIiwgY2FtLT52NGxkZXYtPm51bSk7CiAKIG91dDoKIAltdXRleF91bmxvY2soJmNhbS0+b3Blbl9tdXRleCk7CkBAIC03NDYsNyArNzQ2LDcgQEAKIAljYW0tPnVzZXJzLS07CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZjYW0tPndhaXRfb3BlbiwgMSk7CiAKLQlEQkcoMywgIlZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgY2xvc2VkIiwgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwlEQkcoMywgIlZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgY2xvc2VkIiwgY2FtLT52NGxkZXYtPm51bSk7CiAKIAlrcmVmX3B1dCgmY2FtLT5rcmVmLCB6YzAzMDFfcmVsZWFzZV9yZXNvdXJjZXMpOwogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQAogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0NST1AgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuIFRvICIKIAkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTI4OCw3ICsxMjg4LDcgQEAKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCiAJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE0NzAsNyArMTQ3MCw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfRk1UIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlIHByb2JsZW1zLiBUbyAiCiAJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE0ODIsNyArMTQ4Miw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfRk1UIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCiAJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJICAgIGNhbS0+djRsZGV2LT5udW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE1MjksNyArMTUyOSw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfSlBFR0NPTVAgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgogCQkgICAgICAgInByb2JsZW1zLiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgotCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bnVtKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yMDA1LDcgKzIwMDUsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5taW5vcik7CisJREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5udW0pOwogCiAJY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwID0gZm9yY2VfbXVubWFwW2Rldl9ucl07CiAJY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCA9IGZyYW1lX3RpbWVvdXRbZGV2X25yXTsKQEAgLTIwNDQsNyArMjA0NCw3IEBACiAJaWYgKGNhbS0+dXNlcnMpIHsKIAkJREJHKDIsICJEZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCAiCiAJCSAgICAgICAibWVtb3J5IGRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQuIiwKLQkJICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJemMwMzAxX3N0b3BfdHJhbnNmZXIoY2FtKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwppbmRleCAzMjgyYmU3Li5mYTVmMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwpAQCAtODE3LDYgKzgxNyw3IEBACiAJbWVtY3B5KCZ6ci0+aTJjX2FsZ28sICZ6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAl6ci0+aTJjX2FsZ28uZGF0YSA9IHpyOworCXpyLT5pMmNfYWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0c7CiAJenItPmkyY19hZGFwdGVyLmlkID0gSTJDX0hXX0JfWlIzNjA2NzsKIAl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3JlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF9yZWdpc3RlcjsKIAl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3VucmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwppbmRleCAyNWRlNzYzLi5kYjExYWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKQEAgLTI5OTYsNyArMjk5Niw2IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygzLCAidW5zdXBwb3J0ZWRcbiIpOwogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCiAJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwppbmRleCA3Y2RhYzk5Li5hMWQ4MWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwpAQCAtODg1LDcgKzg4NSw3IEBACiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOwogCiAJZGV2X2luZm8oJnVkZXYtPmRldiwgRFJJVkVSX0RFU0MgIiBjb250cm9sbGluZyB2aWRlbyBkZXZpY2UgJWRcbiIsCi0JCSBjYW0tPnZkZXYtPm1pbm9yKTsKKwkJIGNhbS0+dmRldi0+bnVtKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwppbmRleCA2ZTI5MWJmLi43OTExMTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwpAQCAtMTcyLDkgKzE3Miw5IEBACiAKIC8qKiogQmxvY2sgZGV2aWNlICoqKi8KIAotc3RhdGljIGludCBtc3Byb19ibG9ja19iZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBtc3Byb19ibG9ja19iZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCBtc3Byb19ibG9ja19kYXRhICptc2IgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IHJjID0gLUVOWElPOwogCkBAIC0xODIsNyArMTgyLDcgQEAKIAogCWlmIChtc2IgJiYgbXNiLT5jYXJkKSB7CiAJCW1zYi0+dXNhZ2VfY291bnQrKzsKLQkJaWYgKChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYgbXNiLT5yZWFkX29ubHkpCisJCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBtc2ItPnJlYWRfb25seSkKIAkJCXJjID0gLUVST0ZTOwogCQllbHNlCiAJCQlyYyA9IDA7CkBAIC0yMTgsOSArMjE4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtc3Byb19ibG9ja19iZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBtc3Byb19ibG9ja19iZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwogCXJldHVybiBtc3Byb19ibG9ja19kaXNrX3JlbGVhc2UoZGlzayk7CiB9CiAKQEAgLTEwNDQsNyArMTA0Myw2IEBACiAKIAkJc19hdHRyLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBzX2F0dHItPm5hbWU7CiAJCXNfYXR0ci0+ZGV2X2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKLQkJc19hdHRyLT5kZXZfYXR0ci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXNfYXR0ci0+ZGV2X2F0dHIuc2hvdyA9IG1zcHJvX2Jsb2NrX2F0dHJfc2hvdyhzX2F0dHItPmlkKTsKIAogCQlpZiAoIXJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDlmOTM1NGYuLmQ2MmZkNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTE3NjAsMTAgKzE3NjAsOSBAQAogCWNhc2UgRkM6CiAJCXJldHVybiA0MDsKIAljYXNlIFNBUzoKLQkJcmV0dXJuIDEwOwogCWNhc2UgU1BJOgogCWRlZmF1bHQ6Ci0JCXJldHVybiAyOworCQlyZXR1cm4gMTA7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYwppbmRleCA4MTQ4M2RlLi4xMWE2MTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKQEAgLTU3NSw5ICs1NzUsOSBAQAogICoKICAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBpMm9fYmxvY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgaTJvX2Jsb2NrX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBpMm9fYmxvY2tfZGV2aWNlICpkZXYgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGkyb19ibG9ja19kZXZpY2UgKmRldiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAogCWlmICghZGV2LT5pMm9fZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTYwNCw5ICs2MDQsOCBAQAogICoKICAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBpMm9fYmxvY2tfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgaTJvX2Jsb2NrX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IGkyb19ibG9ja19kZXZpY2UgKmRldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAl1OCBvcGVyYXRpb247CiAKQEAgLTY1MywxMCArNjUyLDEwIEBACiAgKgogICoJUmV0dXJuIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IGkyb19ibG9ja19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgaTJvX2Jsb2NrX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IGkyb19ibG9ja19kZXZpY2UgKmRldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAogCS8qIEFueW9uZSBjYXBhYmxlIG9mIHRoaXMgc3lzY2FsbCBjYW4gZG8gKnJlYWwgYmFkKiB0aGluZ3MgKi8KQEAgLTkzMyw3ICs5MzIsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gaTJvX2Jsb2NrX29wZW4sCiAJLnJlbGVhc2UgPSBpMm9fYmxvY2tfcmVsZWFzZSwKLQkuaW9jdGwgPSBpMm9fYmxvY2tfaW9jdGwsCisJLmxvY2tlZF9pb2N0bCA9IGkyb19ibG9ja19pb2N0bCwKIAkuZ2V0Z2VvID0gaTJvX2Jsb2NrX2dldGdlbywKIAkubWVkaWFfY2hhbmdlZCA9IGkyb19ibG9ja19tZWRpYV9jaGFuZ2VkCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggNWVmZjhhZC4uNWE3OWQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC01Miw2ICs1Miw4IEBACiAKIGNvbmZpZyBVQ0IxNDAwX0NPUkUKIAl0cmlzdGF0ZSAiUGhpbGlwcyBVQ0IxNDAwIENvcmUgZHJpdmVyIgorCWRlcGVuZHMgb24gQUM5N19CVVMKKwlkZXBlbmRzIG9uIEdQSU9MSUIKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgVUNCMTQwMCBjb3JlIGZ1bmN0aW9ucy4KIAkgIFRoZSBVQ0IxNDAwIGlzIGFuIEFDOTcgYXVkaW8gY29kZWMuCkBAIC01OSw2ICs2MSwyMCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWNiMTQwMF9jb3JlLgogCitjb25maWcgVFdMNDAzMF9DT1JFCisJYm9vbCAiVGV4YXMgSW5zdHJ1bWVudHMgVFdMNDAzMC9UUFM2NTl4MCBTdXBwb3J0IgorCWRlcGVuZHMgb24gSTJDPXkgJiYgR0VORVJJQ19IQVJESVJRUyAmJiAoQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzKQorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBUV0w0MDMwIGZhbWlseSBjaGlwIG9uIHlvdXIgYm9hcmQuCisJICBUaGlzIGNvcmUgZHJpdmVyIHByb3ZpZGVzIHJlZ2lzdGVyIGFjY2VzcyBhbmQgSVJRIGhhbmRsaW5nCisJICBmYWNpbGl0aWVzLCBhbmQgcmVnaXN0ZXJzIGRldmljZXMgZm9yIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucworCSAgc28gdGhhdCBmdW5jdGlvbi1zcGVjaWZpYyBkcml2ZXJzIGNhbiBiaW5kIHRvIHRoZW0uCisKKwkgIFRoZXNlIG11bHRpLWZ1bmN0aW9uIGNoaXBzIGFyZSBmb3VuZCBvbiBtYW55IE9NQVAyIGFuZCBPTUFQMworCSAgYm9hcmRzLCBwcm92aWRpbmcgcG93ZXIgbWFuYWdlbWVudCwgUlRDLCBHUElPLCBrZXlwYWQsIGEKKwkgIGhpZ2ggc3BlZWQgVVNCIE9URyB0cmFuc2NlaXZlciwgYW4gYXVkaW8gY29kZWMgKG9uIG1vc3QKKwkgIHZlcnNpb25zKSBhbmQgbWFueSBvdGhlciBmZWF0dXJlcy4KKwogY29uZmlnIE1GRF9UTUlPCiAJYm9vbAogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQppbmRleCA3NTliMWZlLi4wYWNlZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQpAQCAtMTcsNiArMTcsOCBAQAogb2JqLSQoQ09ORklHX01GRF9XTTgzNTApCSs9IHdtODM1MC5vCiBvYmotJChDT05GSUdfTUZEX1dNODM1MF9JMkMpCSs9IHdtODM1MC1pMmMubwogCitvYmotJChDT05GSUdfVFdMNDAzMF9DT1JFKQkrPSB0d2w0MDMwLWNvcmUubyB0d2w0MDMwLWlycS5vCisKIG9iai0kKENPTkZJR19NRkRfQ09SRSkJCSs9IG1mZC1jb3JlLm8KIAogb2JqLSQoQ09ORklHX01DUCkJCSs9IG1jcC1jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FzaWMzLmMgYi9kcml2ZXJzL21mZC9hc2ljMy5jCmluZGV4IGJhNWFhMjAuLmU0YzBkYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvYXNpYzMuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCQkJCWlycW5yID0gYXNpYy0+aXJxX2Jhc2UgKwogCQkJCQkJKEFTSUMzX0dQSU9TX1BFUl9CQU5LICogYmFuaykKIAkJCQkJCSsgaTsKLQkJCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxbnI7CisJCQkJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnFucik7CiAJCQkJCWRlc2MtPmhhbmRsZV9pcnEoaXJxbnIsIGRlc2MpOwogCQkJCQlpZiAoYXNpYy0+aXJxX2JvdGhlZGdlW2JhbmtdICYgYml0KQogCQkJCQkJYXNpYzNfaXJxX2ZsaXBfZWRnZShhc2ljLCBiYXNlLApAQCAtMTM2LDcgKzEzNiw3IEBACiAJCWZvciAoaSA9IEFTSUMzX05VTV9HUElPUzsgaSA8IEFTSUMzX05SX0lSUVM7IGkrKykgewogCQkJLyogVGhleSBzdGFydCBhdCBiaXQgNCBhbmQgZ28gdXAgKi8KIAkJCWlmIChzdGF0dXMgJiAoMSA8PCAoaSAtIEFTSUMzX05VTV9HUElPUyArIDQpKSkgewotCQkJCWRlc2MgPSBpcnFfZGVzYyArIGFzaWMtPmlycV9iYXNlICsgaTsKKwkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoYXNpYy0+aXJxX2Jhc2UgKyBpKTsKIAkJCQlkZXNjLT5oYW5kbGVfaXJxKGFzaWMtPmlycV9iYXNlICsgaSwKIAkJCQkJCSBkZXNjKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RhOTAzeC5jIGIvZHJpdmVycy9tZmQvZGE5MDN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3MzI2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL2RhOTAzeC5jCkBAIC0wLDAgKzEsNTYzIEBACisvKgorICogQmFzZSBkcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIsIEx0ZC4KKyAqIAlNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2RhOTAzeC5oPgorCisjZGVmaW5lIERBOTAzMF9DSElQX0lECQkweDAwCisjZGVmaW5lIERBOTAzMF9FVkVOVF9BCQkweDAxCisjZGVmaW5lIERBOTAzMF9FVkVOVF9CCQkweDAyCisjZGVmaW5lIERBOTAzMF9FVkVOVF9DCQkweDAzCisjZGVmaW5lIERBOTAzMF9TVEFUVVMJCTB4MDQKKyNkZWZpbmUgREE5MDMwX0lSUV9NQVNLX0EJMHgwNQorI2RlZmluZSBEQTkwMzBfSVJRX01BU0tfQgkweDA2CisjZGVmaW5lIERBOTAzMF9JUlFfTUFTS19DCTB4MDcKKyNkZWZpbmUgREE5MDMwX1NZU19DVFJMX0EJMHgwOAorI2RlZmluZSBEQTkwMzBfU1lTX0NUUkxfQgkweDA5CisjZGVmaW5lIERBOTAzMF9GQVVMVF9MT0cJMHgwYQorCisjZGVmaW5lIERBOTAzNF9DSElQX0lECQkweDAwCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BCQkweDAxCisjZGVmaW5lIERBOTAzNF9FVkVOVF9CCQkweDAyCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DCQkweDAzCisjZGVmaW5lIERBOTAzNF9FVkVOVF9ECQkweDA0CisjZGVmaW5lIERBOTAzNF9TVEFUVVNfQQkJMHgwNQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0IJCTB4MDYKKyNkZWZpbmUgREE5MDM0X0lSUV9NQVNLX0EJMHgwNworI2RlZmluZSBEQTkwMzRfSVJRX01BU0tfQgkweDA4CisjZGVmaW5lIERBOTAzNF9JUlFfTUFTS19DCTB4MDkKKyNkZWZpbmUgREE5MDM0X0lSUV9NQVNLX0QJMHgwYQorI2RlZmluZSBEQTkwMzRfU1lTX0NUUkxfQQkweDBiCisjZGVmaW5lIERBOTAzNF9TWVNfQ1RSTF9CCTB4MGMKKyNkZWZpbmUgREE5MDM0X0ZBVUxUX0xPRwkweDBkCisKK3N0cnVjdCBkYTkwM3hfY2hpcDsKKworc3RydWN0IGRhOTAzeF9jaGlwX29wcyB7CisJaW50CSgqaW5pdF9jaGlwKShzdHJ1Y3QgZGE5MDN4X2NoaXAgKik7CisJaW50CSgqdW5tYXNrX2V2ZW50cykoc3RydWN0IGRhOTAzeF9jaGlwICosIHVuc2lnbmVkIGludCBldmVudHMpOworCWludAkoKm1hc2tfZXZlbnRzKShzdHJ1Y3QgZGE5MDN4X2NoaXAgKiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisJaW50CSgqcmVhZF9ldmVudHMpKHN0cnVjdCBkYTkwM3hfY2hpcCAqLCB1bnNpZ25lZCBpbnQgKmV2ZW50cyk7CisJaW50CSgqcmVhZF9zdGF0dXMpKHN0cnVjdCBkYTkwM3hfY2hpcCAqLCB1bnNpZ25lZCBpbnQgKnN0YXR1cyk7Cit9OworCitzdHJ1Y3QgZGE5MDN4X2NoaXAgeworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgZGE5MDN4X2NoaXBfb3BzCSpvcHM7CisKKwlpbnQJCQl0eXBlOworCXVpbnQzMl90CQlldmVudHNfbWFzazsKKworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJaXJxX3dvcms7CisKKwlzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBub3RpZmllcl9saXN0OworfTsKKworc3RhdGljIGlubGluZSBpbnQgX19kYTkwM3hfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCWludCByZWcsIHVpbnQ4X3QgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCByZWFkaW5nIGF0IDB4JTAyeFxuIiwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkqdmFsID0gKHVpbnQ4X3QpcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2RhOTAzeF9yZWFkcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLAorCQkJCSBpbnQgbGVuLCB1aW50OF90ICp2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVnLCBsZW4sIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgcmVhZGluZyBmcm9tIDB4JTAyeFxuIiwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGE5MDN4X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJIGludCByZWcsIHVpbnQ4X3QgdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHdyaXRpbmcgMHglMDJ4IHRvIDB4JTAyeFxuIiwKKwkJCQl2YWwsIHJlZyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2RhOTAzeF93cml0ZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywKKwkJCQkgIGludCBsZW4sIHVpbnQ4X3QgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVnLCBsZW4sIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgd3JpdGluZ3MgdG8gMHglMDJ4XG4iLCByZWcpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGRhOTAzeF9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgaW50IGV2ZW50cykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNoaXAtPm9wcy0+dW5tYXNrX2V2ZW50cyhjaGlwLCBldmVudHMpOworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmY2hpcC0+bm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X3JlZ2lzdGVyX25vdGlmaWVyKTsKKworaW50IGRhOTAzeF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2hpcC0+b3BzLT5tYXNrX2V2ZW50cyhjaGlwLCBldmVudHMpOworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZjaGlwLT5ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfdW5yZWdpc3Rlcl9ub3RpZmllcik7CisKK2ludCBkYTkwM3hfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCkKK3sKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGUodG9faTJjX2NsaWVudChkZXYpLCByZWcsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfd3JpdGUpOworCitpbnQgZGE5MDN4X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90ICp2YWwpCit7CisJcmV0dXJuIF9fZGE5MDN4X3JlYWQodG9faTJjX2NsaWVudChkZXYpLCByZWcsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfcmVhZCk7CisKK2ludCBkYTkwM3hfc2V0X2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCisJcmV0ID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIHJlZywgJnJlZ192YWwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKChyZWdfdmFsICYgYml0X21hc2spID09IDApIHsKKwkJcmVnX3ZhbCB8PSBiaXRfbWFzazsKKwkJcmV0ID0gX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfc2V0X2JpdHMpOworCitpbnQgZGE5MDN4X2Nscl9iaXRzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1aW50OF90IHJlZ192YWw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKworCXJldCA9IF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCByZWcsICZyZWdfdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmIChyZWdfdmFsICYgYml0X21hc2spIHsKKwkJcmVnX3ZhbCAmPSB+Yml0X21hc2s7CisJCXJldCA9IF9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgcmVnLCByZWdfdmFsKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X2Nscl9iaXRzKTsKKworaW50IGRhOTAzeF91cGRhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCwgdWludDhfdCBtYXNrKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCisJcmV0ID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIHJlZywgJnJlZ192YWwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKChyZWdfdmFsICYgbWFzaykgIT0gdmFsKSB7CisJCXJlZ192YWwgPSAocmVnX3ZhbCAmIH5tYXNrKSB8IHZhbDsKKwkJcmV0ID0gX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfdXBkYXRlKTsKKworaW50IGRhOTAzeF9xdWVyeV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc2JpdHMpCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisKKwljaGlwLT5vcHMtPnJlYWRfc3RhdHVzKGNoaXAsICZzdGF0dXMpOworCXJldHVybiAoKHN0YXR1cyAmIHNiaXRzKSA9PSBzYml0cyk7Cit9CitFWFBPUlRfU1lNQk9MKGRhOTAzeF9xdWVyeV9zdGF0dXMpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwMzBfaW5pdF9jaGlwKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCkKK3sKKwl1aW50OF90IGNoaXBfaWQ7CisJaW50IGVycjsKKworCWVyciA9IF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCBEQTkwMzBfQ0hJUF9JRCwgJmNoaXBfaWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIERBOTAzMF9TWVNfQ1RSTF9BLCAweEU4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZGV2X2luZm8oY2hpcC0+ZGV2LCAiREE5MDMwIChDSElQIElEOiAweCUwMngpIGRldGVjdGVkXG4iLCBjaGlwX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwMzBfdW5tYXNrX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpCit7CisJdWludDhfdCB2WzNdOworCisJY2hpcC0+ZXZlbnRzX21hc2sgJj0gfmV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGVzKGNoaXAtPmNsaWVudCwgREE5MDMwX0lSUV9NQVNLX0EsIDMsIHYpOworfQorCitzdGF0aWMgaW50IGRhOTAzMF9tYXNrX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpCit7CisJdWludDhfdCB2WzNdOworCisJY2hpcC0+ZXZlbnRzX21hc2sgJj0gfmV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGVzKGNoaXAtPmNsaWVudCwgREE5MDMwX0lSUV9NQVNLX0EsIDMsIHYpOworfQorCitzdGF0aWMgaW50IGRhOTAzMF9yZWFkX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCAqZXZlbnRzKQoreworCXVpbnQ4X3QgdlszXSA9IHswLCAwLCAwfTsKKwlpbnQgcmV0OworCisJcmV0ID0gX19kYTkwM3hfcmVhZHMoY2hpcC0+Y2xpZW50LCBEQTkwMzBfRVZFTlRfQSwgMywgdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkqZXZlbnRzID0gKHZbMl0gPDwgMTYpIHwgKHZbMV0gPDwgOCkgfCB2WzBdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhOTAzMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCAqc3RhdHVzKQoreworCXJldHVybiBfX2RhOTAzeF9yZWFkKGNoaXAtPmNsaWVudCwgREE5MDMwX1NUQVRVUywgKHVpbnQ4X3QgKilzdGF0dXMpOworfQorCitzdGF0aWMgaW50IGRhOTAzNF9pbml0X2NoaXAoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwKQoreworCXVpbnQ4X3QgY2hpcF9pZDsKKwlpbnQgZXJyOworCisJZXJyID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIERBOTAzNF9DSElQX0lELCAmY2hpcF9pZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IF9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgREE5MDM0X1NZU19DVFJMX0EsIDB4RTgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBhdm9pZCBTUkFNIHBvd2VyIG9mZiBkdXJpbmcgc2xlZXAqLworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHgxMCwgMHgwNyk7CisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCAweDExLCAweGZmKTsKKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4MTIsIDB4ZmYpOworCisJLyogRW5hYmxlIHRoZSBPTktFWSBwb3dlciBkb3duIGZ1bmN0aW9uYWxpdHkgKi8KKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIERBOTAzNF9TWVNfQ1RSTF9CLCAweDIwKTsKKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIERBOTAzNF9TWVNfQ1RSTF9BLCAweDYwKTsKKworCS8qIHdvcmthcm91bmQgdG8gbWFrZSBMRURzIHdvcmsgKi8KKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4OTAsIDB4MDEpOworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHhCMCwgMHgwOCk7CisKKwkvKiBtYWtlIEFEVFYxIGFuZCBTRFRWMSBlZmZlY3RpdmUgKi8KKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4MjAsIDB4MDApOworCisJZGV2X2luZm8oY2hpcC0+ZGV2LCAiREE5MDM0IChDSElQIElEOiAweCUwMngpIGRldGVjdGVkXG4iLCBjaGlwX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwMzRfdW5tYXNrX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpCit7CisJdWludDhfdCB2WzRdOworCisJY2hpcC0+ZXZlbnRzX21hc2sgJj0gfmV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisJdlszXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAyNCkgJiAweGZmOworCisJcmV0dXJuIF9fZGE5MDN4X3dyaXRlcyhjaGlwLT5jbGllbnQsIERBOTAzNF9JUlFfTUFTS19BLCA0LCB2KTsKK30KKworc3RhdGljIGludCBkYTkwMzRfbWFza19ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXVpbnQ4X3Qgdls0XTsKKworCWNoaXAtPmV2ZW50c19tYXNrIHw9IGV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisJdlszXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAyNCkgJiAweGZmOworCisJcmV0dXJuIF9fZGE5MDN4X3dyaXRlcyhjaGlwLT5jbGllbnQsIERBOTAzNF9JUlFfTUFTS19BLCA0LCB2KTsKK30KKworc3RhdGljIGludCBkYTkwMzRfcmVhZF9ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgKmV2ZW50cykKK3sKKwl1aW50OF90IHZbNF0gPSB7MCwgMCwgMCwgMH07CisJaW50IHJldDsKKworCXJldCA9IF9fZGE5MDN4X3JlYWRzKGNoaXAtPmNsaWVudCwgREE5MDM0X0VWRU5UX0EsIDQsIHYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJKmV2ZW50cyA9ICh2WzNdIDw8IDI0KSB8ICh2WzJdIDw8IDE2KSB8ICh2WzFdIDw8IDgpIHwgdlswXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwMzRfcmVhZF9zdGF0dXMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgKnN0YXR1cykKK3sKKwl1aW50OF90IHZbMl0gPSB7MCwgMH07CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBfX2RhOTAzeF9yZWFkcyhjaGlwLT5jbGllbnQsIERBOTAzNF9TVEFUVVNfQSwgMiwgdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCSpzdGF0dXMgPSAodlsxXSA8PCA4KSB8IHZbMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRhOTAzeF9pcnFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkYTkwM3hfY2hpcCwgaXJxX3dvcmspOworCXVuc2lnbmVkIGludCBldmVudHMgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKGNoaXAtPm9wcy0+cmVhZF9ldmVudHMoY2hpcCwgJmV2ZW50cykpCisJCQlicmVhazsKKworCQlldmVudHMgJj0gfmNoaXAtPmV2ZW50c19tYXNrOworCQlpZiAoZXZlbnRzID09IDApCisJCQlicmVhazsKKworCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKAorCQkJCSZjaGlwLT5ub3RpZmllcl9saXN0LCBldmVudHMsIE5VTEwpOworCX0KKwllbmFibGVfaXJxKGNoaXAtPmNsaWVudC0+aXJxKTsKK30KKworc3RhdGljIGludCBkYTkwM3hfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkYXRhOworCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJKHZvaWQpc2NoZWR1bGVfd29yaygmY2hpcC0+aXJxX3dvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGRhOTAzeF9jaGlwX29wcyBkYTkwM3hfb3BzW10gPSB7CisJWzBdID0geworCQkuaW5pdF9jaGlwCT0gZGE5MDMwX2luaXRfY2hpcCwKKwkJLnVubWFza19ldmVudHMJPSBkYTkwMzBfdW5tYXNrX2V2ZW50cywKKwkJLm1hc2tfZXZlbnRzCT0gZGE5MDMwX21hc2tfZXZlbnRzLAorCQkucmVhZF9ldmVudHMJPSBkYTkwMzBfcmVhZF9ldmVudHMsCisJCS5yZWFkX3N0YXR1cwk9IGRhOTAzMF9yZWFkX3N0YXR1cywKKwl9LAorCVsxXSA9IHsKKwkJLmluaXRfY2hpcAk9IGRhOTAzNF9pbml0X2NoaXAsCisJCS51bm1hc2tfZXZlbnRzCT0gZGE5MDM0X3VubWFza19ldmVudHMsCisJCS5tYXNrX2V2ZW50cwk9IGRhOTAzNF9tYXNrX2V2ZW50cywKKwkJLnJlYWRfZXZlbnRzCT0gZGE5MDM0X3JlYWRfZXZlbnRzLAorCQkucmVhZF9zdGF0dXMJPSBkYTkwMzRfcmVhZF9zdGF0dXMsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGRhOTAzeF9pZF90YWJsZVtdID0geworCXsgImRhOTAzMCIsIDAgfSwKKwl7ICJkYTkwMzQiLCAxIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkYTkwM3hfaWRfdGFibGUpOworCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBfX3JlbW92ZV9zdWJkZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp1bnVzZWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYTkwM3hfcmVtb3ZlX3N1YmRldnMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwKQoreworCXJldHVybiBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoY2hpcC0+ZGV2LCBOVUxMLCBfX3JlbW92ZV9zdWJkZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwM3hfYWRkX3N1YmRldnMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLAorCQkJCQlzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBkYTkwM3hfc3ViZGV2X2luZm8gKnN1YmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCBpLCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fc3ViZGV2czsgaSsrKSB7CisJCXN1YmRldiA9ICZwZGF0YS0+c3ViZGV2c1tpXTsKKworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKHN1YmRldi0+bmFtZSwgc3ViZGV2LT5pZCk7CisKKwkJcGRldi0+ZGV2LnBhcmVudCA9IGNoaXAtPmRldjsKKwkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBzdWJkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWRhOTAzeF9yZW1vdmVfc3ViZGV2cyhjaGlwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwM3hfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXA7CisJdW5zaWduZWQgaW50IHRtcDsKKwlpbnQgcmV0OworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYTkwM3hfY2hpcCksIEdGUF9LRVJORUwpOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2hpcC0+Y2xpZW50ID0gY2xpZW50OworCWNoaXAtPmRldiA9ICZjbGllbnQtPmRldjsKKwljaGlwLT5vcHMgPSAmZGE5MDN4X29wc1tpZC0+ZHJpdmVyX2RhdGFdOworCisJbXV0ZXhfaW5pdCgmY2hpcC0+bG9jayk7CisJSU5JVF9XT1JLKCZjaGlwLT5pcnFfd29yaywgZGE5MDN4X2lycV93b3JrKTsKKwlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJmNoaXAtPm5vdGlmaWVyX2xpc3QpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7CisKKwlyZXQgPSBjaGlwLT5vcHMtPmluaXRfY2hpcChjaGlwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX2NoaXA7CisKKwkvKiBtYXNrIGFuZCBjbGVhciBhbGwgSVJRcyAqLworCWNoaXAtPmV2ZW50c19tYXNrID0gMHhmZmZmZmZmZjsKKwljaGlwLT5vcHMtPm1hc2tfZXZlbnRzKGNoaXAsIGNoaXAtPmV2ZW50c19tYXNrKTsKKwljaGlwLT5vcHMtPnJlYWRfZXZlbnRzKGNoaXAsICZ0bXApOworCisJcmV0ID0gcmVxdWVzdF9pcnEoY2xpZW50LT5pcnEsIGRhOTAzeF9pcnFfaGFuZGxlciwKKwkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCSJkYTkwM3giLCBjaGlwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAorCQkJCWNsaWVudC0+aXJxKTsKKwkJZ290byBvdXRfZnJlZV9jaGlwOworCX0KKworCXJldCA9IGRhOTAzeF9hZGRfc3ViZGV2cyhjaGlwLCBwZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjaGlwKTsKK291dF9mcmVlX2NoaXA6CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGE5MDN4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGE5MDN4X3JlbW92ZV9zdWJkZXZzKGNoaXApOworCWtmcmVlKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZGE5MDN4X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJkYTkwM3giLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBkYTkwM3hfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkYTkwM3hfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBkYTkwM3hfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYTkwM3hfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZGE5MDN4X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChkYTkwM3hfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYTkwM3hfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZkYTkwM3hfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRhOTAzeF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQTUlDIERyaXZlciBmb3IgRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDM0Iik7CitNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iCisJICAgICAgIk1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9odGMtZWdwaW8uYyBiL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCmluZGV4IDZiZTQzMTcuLjFhNGQwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJLyogUnVuIGlycSBoYW5kbGVyICovCiAJCXByX2RlYnVnKCJnb3QgSVJRICVkXG4iLCBpcnFwaW4pOwogCQlpcnEgPSBlaS0+aXJxX3N0YXJ0ICsgaXJxcGluOwotCQlkZXNjID0gJmlycV9kZXNjW2lycV07CisJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCQlkZXNjLT5oYW5kbGVfaXJxKGlycSwgZGVzYyk7CiAJfQogfQpAQCAtMjg5LDcgKzI4OSw3IEBACiAJZWktPmJhc2VfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOwogCWlmICghZWktPmJhc2VfYWRkcikKIAkJZ290byBmYWlsOwotCXByX2RlYnVnKCJFR1BJTyBwaHlzPSUwOHggdmlydD0lcFxuIiwgcmVzLT5zdGFydCwgZWktPmJhc2VfYWRkcik7CisJcHJfZGVidWcoIkVHUElPIHBoeXM9JTA4eCB2aXJ0PSVwXG4iLCAodTMyKXJlcy0+c3RhcnQsIGVpLT5iYXNlX2FkZHIpOwogCiAJaWYgKChwZGF0YS0+YnVzX3dpZHRoICE9IDE2KSAmJiAocGRhdGEtPmJ1c193aWR0aCAhPSAzMikpCiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tZmQtY29yZS5jCmluZGV4IDljOWMxMjYuLjZjMGQxYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwpAQCAtMjAsNyArMjAsNyBAQAogCQkJICBzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9iYXNlLAogCQkJICBpbnQgaXJxX2Jhc2UpCiB7Ci0Jc3RydWN0IHJlc291cmNlIHJlc1tjZWxsLT5udW1fcmVzb3VyY2VzXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWludCByZXQgPSAtRU5PTUVNOwogCWludCByOwpAQCAtMjksMTQgKzI5LDE3IEBACiAJaWYgKCFwZGV2KQogCQlnb3RvIGZhaWxfYWxsb2M7CiAKKwlyZXMgPSBremFsbG9jKHNpemVvZigqcmVzKSAqIGNlbGwtPm51bV9yZXNvdXJjZXMsIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlnb3RvIGZhaWxfZGV2aWNlOworCiAJcGRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LAogCQkJY2VsbC0+cGxhdGZvcm1fZGF0YSwgY2VsbC0+ZGF0YV9zaXplKTsKIAlpZiAocmV0KQotCQlnb3RvIGZhaWxfZGV2aWNlOworCQlnb3RvIGZhaWxfcmVzOwogCi0JbWVtc2V0KHJlcywgMCwgc2l6ZW9mKHJlcykpOwogCWZvciAociA9IDA7IHIgPCBjZWxsLT5udW1fcmVzb3VyY2VzOyByKyspIHsKIAkJcmVzW3JdLm5hbWUgPSBjZWxsLT5yZXNvdXJjZXNbcl0ubmFtZTsKIAkJcmVzW3JdLmZsYWdzID0gY2VsbC0+cmVzb3VyY2VzW3JdLmZsYWdzOwpAQCAtNjQsMTEgKzY3LDE1IEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9kZXZpY2U7CisJCWdvdG8gZmFpbF9yZXM7CisKKwlrZnJlZShyZXMpOwogCiAJcmV0dXJuIDA7CiAKIC8qCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7ICovCitmYWlsX3JlczoKKwlrZnJlZShyZXMpOwogZmFpbF9kZXZpY2U6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIGZhaWxfYWxsb2M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zbTUwMS5jIGIvZHJpdmVycy9tZmQvc201MDEuYwppbmRleCA3YWViYWQ0Li4xNzBmOWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zbTUwMS5jCisrKyBiL2RyaXZlcnMvbWZkL3NtNTAxLmMKQEAgLTYyMyw4ICs2MjMsOCBAQAogCiAJc201MDFfc3luY19yZWdzKHNtKTsKIAotCWRldl9pbmZvKHNtLT5kZXYsICJnYXRlICUwOGx4LCBjbG9jayAlMDhseCwgbW9kZSAlMDhseFxuIiwKLQkJIGdhdGUsIGNsb2NrLCBtb2RlKTsKKwlkZXZfZGJnKHNtLT5kZXYsICJnYXRlICUwOGx4LCBjbG9jayAlMDhseCwgbW9kZSAlMDhseFxuIiwKKwkJZ2F0ZSwgY2xvY2ssIG1vZGUpOwogCiAJc201MDFfbWRlbGF5KHNtLCAxNik7CiAJbXV0ZXhfdW5sb2NrKCZzbS0+Y2xvY2tfbG9jayk7CkBAIC03NDIsNyArNzQyLDcgQEAKIAlpbnQgcmV0OwogCiAJZm9yIChwdHIgPSAwOyBwdHIgPCBwZGV2LT5udW1fcmVzb3VyY2VzOyBwdHIrKykgewotCQlwcmludGsoIiVzWyVkXSBmbGFncyAlMDhseDogJTA4bGx4Li4lMDhsbHhcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICIlc1slZF0gZmxhZ3MgJTA4bHg6ICUwOGxseC4uJTA4bGx4XG4iLAogCQkgICAgICAgcGRldi0+bmFtZSwgcHRyLAogCQkgICAgICAgcGRldi0+cmVzb3VyY2VbcHRyXS5mbGFncywKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGRldi0+cmVzb3VyY2VbcHRyXS5zdGFydCwKQEAgLTEzNzQsMzEgKzEzNzQsMzEgQEAKIHN0YXRpYyBpbnQgc201MDFfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtOwotCWludCBlcnI7CisJaW50IHJldDsKIAogCXNtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtNTAxX2RldmRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc20gPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgZGV2aWNlIGRhdGFcbiIpOwotCQllcnIgPSAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjE7CiAJfQogCiAJc20tPmRldiA9ICZkZXYtPmRldjsKIAlzbS0+cGRldl9pZCA9IGRldi0+aWQ7Ci0Jc20tPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlzbS0+aW9fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwotCXNtLT5tZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXNtLT5wbGF0ZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAoc20tPmlycSA8IDApIHsKKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGlycSByZXNvdXJjZVxuIik7Ci0JCWVyciA9IHNtLT5pcnE7CiAJCWdvdG8gZXJyX3JlczsKIAl9CisJc20tPmlycSA9IHJldDsKIAorCXNtLT5pb19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJc20tPm1lbV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHNtLT5pb19yZXMgPT0gTlVMTCB8fCBzbS0+bWVtX3JlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJTyByZXNvdXJjZVxuIik7Ci0JCWVyciA9IC1FTk9FTlQ7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyX3JlczsKIAl9CiAKQEAgLTE0MDcsNyArMTQwNyw3IEBACiAKIAlpZiAoc20tPnJlZ3NfY2xhaW0gPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBjbGFpbSByZWdpc3RlcnNcbiIpOwotCQllcnI9IC1FQlVTWTsKKwkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGVycl9yZXM7CiAJfQogCkBAIC0xNDE4LDcgKzE0MTgsNyBAQAogCiAJaWYgKHNtLT5yZWdzID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgcmVnaXN0ZXJzXG4iKTsKLQkJZXJyID0gLUVJTzsKKwkJcmV0ID0gLUVJTzsKIAkJZ290byBlcnJfY2xhaW07CiAJfQogCkBAIC0xNDMwLDcgKzE0MzAsNyBAQAogIGVycl9yZXM6CiAJa2ZyZWUoc20pOwogIGVycjE6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcmV0OwogCiB9CiAKQEAgLTE2MjUsOCArMTYyNSw3IEBACiAJCWdvdG8gZXJyMzsKIAl9CiAKLQlzbS0+cmVncyA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMSksCi0JCQkgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMSkpOworCXNtLT5yZWdzID0gcGNpX2lvcmVtYXBfYmFyKGRldiwgMSk7CiAKIAlpZiAoc20tPnJlZ3MgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCByZW1hcCByZWdpc3RlcnNcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCmluZGV4IDQ5YTBmZmYuLjlmNzAyNGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90N2w2NnhiLmMKKysrIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCkBAIC0yNCw4ICsyNCwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CkBAIC01Niw2ICs1OCw4IEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAogCXN0cnVjdCByZXNvdXJjZQkJcnNjcjsKKwlzdHJ1Y3QgY2xrCQkqY2xrNDhtOworCXN0cnVjdCBjbGsJCSpjbGszMms7CiAJaW50CQkJaXJxOwogCWludAkJCWlycV9iYXNlOwogfTsKQEAgLTY1LDEzICs2OSwxMSBAQAogc3RhdGljIGludCB0N2w2NnhiX21tY19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbW1jKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgICAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGRldl9jdGw7CiAKLQlpZiAocGRhdGEtPmVuYWJsZV9jbGszMmspCi0JCXBkYXRhLT5lbmFibGVfY2xrMzJrKGRldik7CisJY2xrX2VuYWJsZSh0N2w2NnhiLT5jbGszMmspOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIApAQCAtODcsNyArODksNiBAQAogc3RhdGljIGludCB0N2w2NnhiX21tY19kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1tYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICAgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdDdsNjZ4YiAqdDdsNjZ4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBkZXZfY3RsOwpAQCAtMTAwLDggKzEwMSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0N2w2NnhiLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocGRhdGEtPmRpc2FibGVfY2xrMzJrKQotCQlwZGF0YS0+ZGlzYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTgsMTggKzI1OCwyMiBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB0N2w2NnhiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IHQ3bDY2eGIgKnQ3bDY2eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKKwljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGs0OG0pOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdDdsNjZ4Yl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtMzA5LDYgKzMxMywxOSBAQAogCiAJdDdsNjZ4Yi0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAKKwl0N2w2NnhiLT5jbGszMmsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgIkNMS19DSzMySyIpOworCWlmIChJU19FUlIodDdsNjZ4Yi0+Y2xrMzJrKSkgeworCQlyZXQgPSBQVFJfRVJSKHQ3bDY2eGItPmNsazMyayk7CisJCWdvdG8gZXJyX2NsazMya19nZXQ7CisJfQorCisJdDdsNjZ4Yi0+Y2xrNDhtID0gY2xrX2dldCgmZGV2LT5kZXYsICJDTEtfQ0s0OE0iKTsKKwlpZiAoSVNfRVJSKHQ3bDY2eGItPmNsazQ4bSkpIHsKKwkJcmV0ID0gUFRSX0VSUih0N2w2NnhiLT5jbGs0OG0pOworCQljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CisJCWdvdG8gZXJyX2NsazQ4bV9nZXQ7CisJfQorCiAJcnNjciA9ICZ0N2w2NnhiLT5yc2NyOwogCXJzY3ItPm5hbWUgPSAidDdsNjZ4Yi1jb3JlIjsKIAlyc2NyLT5zdGFydCA9IGlvbWVtLT5zdGFydDsKQEAgLTMyNSw2ICszNDIsOCBAQAogCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAorCWNsa19lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwogCWlmIChwZGF0YSAmJiBwZGF0YS0+ZW5hYmxlKQogCQlwZGF0YS0+ZW5hYmxlKGRldik7CiAKQEAgLTM1OSw5ICszNzgsMTMgQEAKIAlpb3VubWFwKHQ3bDY2eGItPnNjcik7CiBlcnJfaW9yZW1hcDoKIAlyZWxlYXNlX3Jlc291cmNlKCZ0N2w2NnhiLT5yc2NyKTsKLWVycl9ub2lycToKIGVycl9yZXF1ZXN0X3NjcjoKIAlrZnJlZSh0N2w2NnhiKTsKKwljbGtfcHV0KHQ3bDY2eGItPmNsazQ4bSk7CitlcnJfY2xrNDhtX2dldDoKKwljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CitlcnJfY2xrMzJrX2dldDoKK2Vycl9ub2lycToKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzIsNyArMzk1LDggQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gcGRhdGEtPmRpc2FibGUoZGV2KTsKLQorCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX3B1dCh0N2w2NnhiLT5jbGs0OG0pOwogCXQ3bDY2eGJfZGV0YWNoX2lycShkZXYpOwogCWlvdW5tYXAodDdsNjZ4Yi0+c2NyKTsKIAlyZWxlYXNlX3Jlc291cmNlKCZ0N2w2NnhiLT5yc2NyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMgYi9kcml2ZXJzL21mZC90YzYzODd4Yi5jCmluZGV4IGEyMmIyMWEuLjQzMjIyYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKKysrIGIvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYwpAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpAQCAtMjQsMTggKzI1LDIyIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHRjNjM4N3hiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnN1c3BlbmQpCiAJCXBkYXRhLT5zdXNwZW5kKGRldik7CisJY2xrX2Rpc2FibGUoY2xrMzJrKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwljbGtfZW5hYmxlKGNsazMyayk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtNTEsMTAgKzU2LDkgQEAKIHN0YXRpYyBpbnQgdGM2Mzg3eGJfbW1jX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqdGM2Mzg3eGIgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAodGM2Mzg3eGItPmVuYWJsZV9jbGszMmspCi0JCXRjNjM4N3hiLT5lbmFibGVfY2xrMzJrKGRldik7CisJY2xrX2VuYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MiwxMCArNjYsOSBAQAogc3RhdGljIGludCB0YzYzODd4Yl9tbWNfZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqdGM2Mzg3eGIgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAodGM2Mzg3eGItPmRpc2FibGVfY2xrMzJrKQotCQl0YzYzODd4Yi0+ZGlzYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZGlzYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDIsMTQgKzEwNSwxNCBAQAogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtOworCXN0cnVjdCBjbGsgKmNsazMyazsKIAlpbnQgaXJxLCByZXQ7CiAKIAlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIWlvbWVtKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3Jlc291cmNlOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwpAQCAtMTE4LDggKzEyMSwxNSBAQAogCWVsc2UKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAKLQlpZiAoZGF0YSAmJiBkYXRhLT5lbmFibGUpCi0JCWRhdGEtPmVuYWJsZShkZXYpOworCWNsazMyayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQ0xLX0NLMzJLIik7CisJaWYgKElTX0VSUihjbGszMmspKSB7CisJCXJldCA9IFBUUl9FUlIoY2xrMzJrKTsKKwkJZ290byBlcnJfcmVzb3VyY2U7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgY2xrMzJrKTsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+ZW5hYmxlKQorCQlwZGF0YS0+ZW5hYmxlKGRldik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3NoaWJhIHRjNjM4N3hiIGluaXRpYWxpc2VkXG4iKTsKIApAQCAtMTM0LDE4ICsxNDQsMTkgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKKwljbGtfcHV0KGNsazMyayk7CiBlcnJfcmVzb3VyY2U6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0YzYzODd4Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGRhdGEgJiYgZGF0YS0+ZGlzYWJsZSkKLQkJZGF0YS0+ZGlzYWJsZShkZXYpOwotCi0JLyogRklYTUUgLSBmcmVlIHRoZSByZXNvdXJjZXMhICovCisJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CisJY2xrX2Rpc2FibGUoY2xrMzJrKTsKKwljbGtfcHV0KGNsazMyayk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggZTRjMWM3OC4uZjg1NmU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC0xMTMsNiArMTEzLDggQEAKIGVudW0gewogCVRDNjM5M1hCX0NFTExfTkFORCwKIAlUQzYzOTNYQl9DRUxMX01NQywKKwlUQzYzOTNYQl9DRUxMX09IQ0ksCisJVEM2MzkzWEJfQ0VMTF9GQiwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTcwLDYgKzE3MiwxNzYgQEAKIAl9LAogfTsKIAorY29uc3Qgc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHgzMDAwLAorCQkuZW5kCT0gMHgzMWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMzAwLAorCQkuZW5kCT0gMHgwM2ZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMTAwMDAsCisJCS5lbmQJPSAweDAxN2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MDE4MDAwLAorCQkuZW5kCT0gMHgwMWZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVEM2MzkzX09IQ0ksCisJCS5lbmQJPSBJUlFfVEM2MzkzX09IQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIF9fZGV2aW5pdGRhdGEgdGM2MzkzeGJfZmJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDUwMDAsCisJCS5lbmQJPSAweDUxZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDA1MDAsCisJCS5lbmQJPSAweDA1ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDEwMDAwMCwKKwkJLmVuZAk9IDB4MWZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RDNjM5M19GQiwKKwkJLmVuZAk9IElSUV9UQzYzOTNfRkIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgaW50IHRjNjM5M3hiX29oY2lfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCXU4IGZlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJY2NyID0gdG1pb19pb3JlYWQxNih0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJY2NyIHw9IFNDUl9DQ1JfVVNCQ0s7CisJdG1pb19pb3dyaXRlMTYoY2NyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisKKwlmZXIgPSB0bWlvX2lvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWZlciB8PSBTQ1JfRkVSX1VTQkVOOworCXRtaW9faW93cml0ZTgoZmVyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfb2hjaV9kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCXU4IGZlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJZmVyID0gdG1pb19pb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlmZXIgJj0gflNDUl9GRVJfVVNCRU47CisJdG1pb19pb3dyaXRlOChmZXIsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9VU0JDSzsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9mYl9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9NQ0xLX01BU0s7CisJY2NyIHw9IFNDUl9DQ1JfTUNMS180ODsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9mYl9kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwljY3IgPSB0bWlvX2lvcmVhZDE2KHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwljY3IgJj0gflNDUl9DQ1JfTUNMS19NQVNLOworCWNjciB8PSBTQ1JfQ0NSX01DTEtfT0ZGOworCXRtaW9faW93cml0ZTE2KGNjciwgdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGM2MzkzeGJfbGNkX3NldF9wb3dlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYiwgYm9vbCBvbikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZmItPmRldi5wYXJlbnQpOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IGZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlmZXIgPSBpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpZiAob24pCisJCWZlciB8PSBTQ1JfRkVSX1NMQ0RFTjsKKwllbHNlCisJCWZlciAmPSB+U0NSX0ZFUl9TTENERU47CisJaW93cml0ZTgoZmVyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRjNjM5M3hiX2xjZF9zZXRfcG93ZXIpOworCitpbnQgdGM2MzkzeGJfbGNkX21vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsCisJCQkJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZmItPmRldi5wYXJlbnQpOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWlvd3JpdGUxNihtb2RlLT5waXhjbG9jaywgdGM2MzkzeGItPnNjciArIFNDUl9QTEwxQ1IgKyAwKTsKKwlpb3dyaXRlMTYobW9kZS0+cGl4Y2xvY2sgPj4gMTYsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMUNSICsgMik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRjNjM5M3hiX2xjZF9tb2RlKTsKKwogc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBfX2RldmluaXRkYXRhIHRjNjM5M3hiX2NlbGxzW10gPSB7CiAJW1RDNjM5M1hCX0NFTExfTkFORF0gPSB7CiAJCS5uYW1lID0gInRtaW8tbmFuZCIsCkBAIC0xODIsNiArMzU0LDI0IEBACiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0YzYzOTN4Yl9tbWNfcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9IHRjNjM5M3hiX21tY19yZXNvdXJjZXMsCiAJfSwKKwlbVEM2MzkzWEJfQ0VMTF9PSENJXSA9IHsKKwkJLm5hbWUgPSAidG1pby1vaGNpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzLAorCQkuZW5hYmxlID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCisJCS5zdXNwZW5kID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCQkucmVzdW1lID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCisJCS5kaXNhYmxlID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCX0sCisJW1RDNjM5M1hCX0NFTExfRkJdID0geworCQkubmFtZSA9ICJ0bWlvLWZiIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX2ZiX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0YzYzOTN4Yl9mYl9yZXNvdXJjZXMsCisJCS5lbmFibGUgPSB0YzYzOTN4Yl9mYl9lbmFibGUsCisJCS5zdXNwZW5kID0gdGM2MzkzeGJfZmJfZGlzYWJsZSwKKwkJLnJlc3VtZSA9IHRjNjM5M3hiX2ZiX2VuYWJsZSwKKwkJLmRpc2FibGUgPSB0YzYzOTN4Yl9mYl9kaXNhYmxlLAorCX0sCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM2OSw0MSArNTU5LDEyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHRjNjM5M3hiX2h3X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgaTsKLQotCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciwJdGM2MzkzeGItPnNjciArIFNDUl9GRVIpOwotCWlvd3JpdGUxNih0Y3BkLT5zY3JfcGxsMmNyLAkJdGM2MzkzeGItPnNjciArIFNDUl9QTEwyQ1IpOwotCWlvd3JpdGUxNih0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKLQlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAotCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKLQkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKLQlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOwotCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKLQlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0sCi0JCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RTUihpKSk7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kb2VjcltpXSwKLQkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRE9FQ1IoaSkpOwotCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncGlfYmNyW2ldLAotCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQSV9CQ1IoaSkpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0YzYzOTN4Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGI7CiAJc3RydWN0IHJlc291cmNlICppb21lbSwgKnJzY3I7CiAJaW50IHJldCwgdGVtcDsKLQlpbnQgaTsKIAogCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghaW9tZW0pCkBAIC00NTgsMjEgKzYxOSwxNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2VuYWJsZTsKIAotCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0gPQotCQkJKHRjcGQtPnNjcl9ncG9fZHNyID4+ICg4ICogaSkpICYgMHhmZjsKLQkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RvZWNyW2ldID0KLQkJCSh0Y3BkLT5zY3JfZ3BvX2RvZWNyID4+ICg4ICogaSkpICYgMHhmZjsKLQl9Ci0KLQl0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IgPSBTQ1JfQ0NSX1VOSzEgfAotCQkJCQlTQ1JfQ0NSX0hDTEtfNDg7Ci0KLQlyZXQgPSB0YzYzOTN4Yl9od19pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfaHdfaW5pdDsKKwlpb3dyaXRlOCgwLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisJaW93cml0ZTE2KHRjcGQtPnNjcl9wbGwyY3IsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDJDUik7CisJaW93cml0ZTE2KFNDUl9DQ1JfVU5LMSB8IFNDUl9DQ1JfSENMS180OCwKKwkJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAorCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKKwkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOworCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKKwlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3NoaWJhIHRjNjM5M3hiIHJldmlzaW9uICVkIGF0IDB4JTA4bHgsIGlycSAlZFxuIiwKIAkJCXRtaW9faW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsgU0NSX1JFVklEKSwKQEAgLTQ4OCwxNiArNjQ0LDMzIEBACiAKIAl0YzYzOTN4Yl9hdHRhY2hfaXJxKGRldik7CiAKKwlpZiAodGNwZC0+c2V0dXApIHsKKwkJcmV0ID0gdGNwZC0+c2V0dXAoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3NldHVwOworCX0KKwogCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTkFORF0uZHJpdmVyX2RhdGEgPSB0Y3BkLT5uYW5kX2RhdGE7CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5wbGF0Zm9ybV9kYXRhID0KIAkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTkFORF07CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5kYXRhX3NpemUgPQogCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXSk7CisKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10ucGxhdGZvcm1fZGF0YSA9CiAJCSZ0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ107CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9NTUNdLmRhdGFfc2l6ZSA9CiAJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10pOwogCisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXS5wbGF0Zm9ybV9kYXRhID0KKwkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfT0hDSV07CisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXS5kYXRhX3NpemUgPQorCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXSk7CisKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5kcml2ZXJfZGF0YSA9IHRjcGQtPmZiX2RhdGE7CisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9GQl0ucGxhdGZvcm1fZGF0YSA9CisJCSZ0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXTsKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5kYXRhX3NpemUgPQorCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9GQl0pOwogCiAJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgZGV2LT5pZCwKIAkJCXRjNjM5M3hiX2NlbGxzLCBBUlJBWV9TSVpFKHRjNjM5M3hiX2NlbGxzKSwKQEAgLTUwNiwxMiArNjc5LDE1IEBACiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCisJaWYgKHRjcGQtPnRlYXJkb3duKQorCQl0Y3BkLT50ZWFyZG93bihkZXYpOworCitlcnJfc2V0dXA6CiAJdGM2MzkzeGJfZGV0YWNoX2lycShkZXYpOwogCiBlcnJfZ3Bpb19hZGQ6CiAJaWYgKHRjNjM5M3hiLT5ncGlvLmJhc2UgIT0gLTEpCiAJCXRlbXAgPSBncGlvY2hpcF9yZW1vdmUoJnRjNjM5M3hiLT5ncGlvKTsKLWVycl9od19pbml0OgogCXRjcGQtPmRpc2FibGUoZGV2KTsKIGVycl9jbGtfZW5hYmxlOgogCWNsa19kaXNhYmxlKHRjNjM5M3hiLT5jbGspOwpAQCAtNTM1LDYgKzcxMSwxMCBAQAogCWludCByZXQ7CiAKIAltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKKworCWlmICh0Y3BkLT50ZWFyZG93bikKKwkJdGNwZC0+dGVhcmRvd24oZGV2KTsKKwogCXRjNjM5M3hiX2RldGFjaF9pcnEoZGV2KTsKIAogCWlmICh0YzYzOTN4Yi0+Z3Bpby5iYXNlICE9IC0xKSB7CkBAIC01ODUsMTUgKzc2NSwzNyBAQAogCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0OworCWludCBpOwogCiAJY2xrX2VuYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKIAogCXJldCA9IHRjcGQtPnJlc3VtZShkZXYpOwotCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiB0YzYzOTN4Yl9od19pbml0KGRldik7CisJaWYgKCF0Y3BkLT5yZXN1bWVfcmVzdG9yZSkKKwkJcmV0dXJuIDA7CisKKwlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5mZXIsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX3BsbDJjciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMkNSKTsKKwlpb3dyaXRlMTYodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuY2NyLAl0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJaW93cml0ZTE2KFNDUl9NQ1JfUkRZX09QRU5EUkFJTiB8IFNDUl9NQ1JfUkRZX1VOSyB8IFNDUl9NQ1JfUkRZX0VOIHwKKwkJICBTQ1JfTUNSX0lOVF9PUEVORFJBSU4gfCBTQ1JfTUNSX0lOVF9VTksgfCBTQ1JfTUNSX0lOVF9FTiB8CisJCSAgQklUKDE1KSwJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX01DUik7CisJaW93cml0ZTE2KHRjcGQtPnNjcl9ncGVyLAkJdGM2MzkzeGItPnNjciArIFNDUl9HUEVSKTsKKwlpb3dyaXRlOCgwLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lSUik7CisJaW93cml0ZTgoMHhiZiwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JTVIpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZHNyW2ldLAorCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19EU1IoaSkpOworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZG9lY3JbaV0sCisJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RPRUNSKGkpKTsKKwkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BpX2JjcltpXSwKKwkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUElfQkNSKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIHRjNjM5M3hiX3N1c3BlbmQgTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDg0M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKQEAgLTAsMCArMSw4MDYgQEAKKy8qCisgKiB0d2w0MDMwX2NvcmUuYyAtIGRyaXZlciBmb3IgVFdMNDAzMC9UUFM2NTl4MCBQTSBhbmQgYXVkaW8gQ09ERUMgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogTW9kaWZpY2F0aW9ucyB0byBkZWZlciBpbnRlcnJ1cHQgaGFuZGxpbmcgdG8gYSBrZXJuZWwgdGhyZWFkOgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBCYXNlZCBvbiB0bHYzMjBhaWMyMy5jOgorICogQ29weXJpZ2h0IChjKSBieSBLYWkgU3ZhaG4gPGthaS5zdmFobkBub2tpYS5jb20+CisgKgorICogQ29kZSBjbGVhbnVwIGFuZCBtb2RpZmljYXRpb25zIHRvIElSUSBoYW5kbGVyLgorICogYnkgc3llZCBraGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisKKy8qCisgKiBUaGUgVFdMNDAzMCAiVHJpdG9uIDIiIGlzIG9uZSBvZiBhIGZhbWlseSBvZiBhIG11bHRpLWZ1bmN0aW9uICJQb3dlcgorICogTWFuYWdlbWVudCBhbmQgU3lzdGVtIENvbXBhbmlvbiBEZXZpY2UiIGNoaXBzIG9yaWdpbmFsbHkgZGVzaWduZWQgZm9yCisgKiB1c2UgaW4gT01BUDIgYW5kIE9NQVAgMyBiYXNlZCBzeXN0ZW1zLiAgSXRzIGNvbnRyb2wgaW50ZXJmYWNlcyB1c2UgSTJDLAorICogb2Z0ZW4gYXQgYXJvdW5kIDMgTWJpdC9zZWMsIGluY2x1ZGluZyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLgorICoKKyAqIFRoaXMgZHJpdmVyIGNvcmUgcHJvdmlkZXMgZ2VuaXJxIHN1cHBvcnQgZm9yIHRoZSBpbnRlcnJ1cHRzIGVtaXR0ZWQsCisgKiBieSB0aGUgdmFyaW91cyBtb2R1bGVzLCBhbmQgZXhwb3J0cyByZWdpc3RlciBhY2Nlc3MgcHJpbWl0aXZlcy4KKyAqCisgKiBGSVhNRSB0aGlzIGRyaXZlciBjdXJyZW50bHkgcmVxdWlyZXMgdXNlIG9mIHRoZSBmaXJzdCBpbnRlcnJ1cHQgbGluZQorICogKGFuZCBhc3NvY2lhdGVkIHJlZ2lzdGVycykuCisgKi8KKworI2RlZmluZSBEUklWRVJfTkFNRQkJCSJ0d2w0MDMwIgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWSkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUllfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19rZXlwYWQoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2tleXBhZCgpCWZhbHNlCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9fVFdMNDAzMCkgfHwgZGVmaW5lZChDT05GSUdfR1BJT19UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9NQURDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX01BRENfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX21hZGMoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX21hZGMoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfcnRjKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ydGMoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX1VTQikgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0JfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX3VzYigpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfdXNiKCkJZmFsc2UKKyNlbmRpZgorCisKKy8qIFRyaXRvbiBDb3JlIGludGVybmFsIGluZm9ybWF0aW9uIChCRUdJTikgKi8KKworLyogTGFzdCAtIGZvciBpbmRleCBtYXgqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9MQVNUCQlUV0w0MDMwX01PRFVMRV9TRUNVUkVEX1JFRworCisjZGVmaW5lIFRXTDQwMzBfTlVNX1NMQVZFUwkJNAorCisKKy8qIEJhc2UgQWRkcmVzcyBkZWZucyBmb3IgdHdsNDAzMF9tYXBbXSAqLworCisvKiBzdWJjaGlwL3NsYXZlIDAgLSBVU0IgSUQgKi8KKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1VTQgkJMHgwMDAwCisKKy8qIHN1YmNoaXAvc2xhdmUgMSAtIEFVRCBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfQVVESU9fVk9JQ0UJMHgwMDAwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9HUElPCQkweDAwOTgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0lOVEJSCQkweDAwODUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BJSAkJMHgwMDgwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9URVNUCQkweDAwNEMKKworLyogc3ViY2hpcC9zbGF2ZSAyIC0gQVVYIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTCTB4MDBCOQorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTEVECQkweDAwRUUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX01BREMJCTB4MDAwMAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UJMHgwMDc0CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UJMHgwMEFBCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV00wCQkweDAwRjgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BXTTEJCTB4MDBGQgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNQQkJMHgwMEVGCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV01CCQkweDAwRjEKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0tFWVBBRAkJMHgwMEQyCisKKy8qIHN1YmNoaXAvc2xhdmUgMyAtIFBPV0VSIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAJCTB4MDAxNAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfSU5UCQkweDAwMkUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BNX01BU1RFUgkweDAwMzYKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BNX1JFQ0VJVkVSCTB4MDA1QgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUlRDCQkweDAwMUMKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1NFQ1VSRURfUkVHCTB4MDAwMAorCisvKiBUcml0b24gQ29yZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiAoRU5EKSAqLworCisKKy8qIEZldyBwb3dlciB2YWx1ZXMgKi8KKyNkZWZpbmUgUl9DRkdfQk9PVAkJCTB4MDUKKyNkZWZpbmUgUl9QUk9URUNUX0tFWQkJCTB4MEUKKworLyogYWNjZXNzIGNvbnRyb2wgdmFsdWVzIGZvciBSX1BST1RFQ1RfS0VZICovCisjZGVmaW5lIEtFWV9VTkxPQ0sxCQkJMHhjZQorI2RlZmluZSBLRVlfVU5MT0NLMgkJCTB4ZWMKKyNkZWZpbmUgS0VZX0xPQ0sJCQkweDAwCisKKy8qIHNvbWUgZmllbGRzIGluIFJfQ0ZHX0JPT1QgKi8KKyNkZWZpbmUgSEZDTEtfRlJFUV8xOXAyX01IWgkJKDEgPDwgMCkKKyNkZWZpbmUgSEZDTEtfRlJFUV8yNl9NSFoJCSgyIDw8IDApCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMzhwNF9NSFoJCSgzIDw8IDApCisjZGVmaW5lIEhJR0hfUEVSRl9TUQkJCSgxIDw8IDMpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaXMgZHJpdmVyIGFjdGl2ZSwgYm91bmQgdG8gYSBjaGlwPyAqLworc3RhdGljIGJvb2wgaW51c2U7CisKKy8qIFN0cnVjdHVyZSBmb3IgZWFjaCBUV0w0MDMwIFNsYXZlICovCitzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJdTggYWRkcmVzczsKKworCS8qIG1heCBudW1iIG9mIGkyY19tc2cgcmVxdWlyZWQgaXMgZm9yIHJlYWQgPTIgKi8KKwlzdHJ1Y3QgaTJjX21zZyB4ZmVyX21zZ1syXTsKKworCS8qIFRvIGxvY2sgYWNjZXNzIHRvIHhmZXJfbXNnICovCisJc3RydWN0IG11dGV4IHhmZXJfbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgdHdsNDAzMF9tb2R1bGVzW1RXTDQwMzBfTlVNX1NMQVZFU107CisKKworLyogbWFwcGluZyB0aGUgbW9kdWxlIGlkIHRvIHNsYXZlIGlkIGFuZCBiYXNlIGFkZHJlc3MgKi8KK3N0cnVjdCB0d2w0MDMwbWFwcGluZyB7CisJdW5zaWduZWQgY2hhciBzaWQ7CS8qIFNsYXZlIElEICovCisJdW5zaWduZWQgY2hhciBiYXNlOwkvKiBiYXNlIGFkZHJlc3MgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMG1hcHBpbmcgdHdsNDAzMF9tYXBbVFdMNDAzMF9NT0RVTEVfTEFTVCArIDFdID0geworCS8qCisJICogTk9URTogIGRvbid0IGNoYW5nZSB0aGlzIHRhYmxlIHdpdGhvdXQgdXBkYXRpbmcgdGhlCisJICogPGxpbnV4L2kyYy90d2w0MDMwLmg+IGRlZmluZXMgZm9yIFRXTDQwMzBfTU9EVUxFXyoKKwkgKiBzbyB0aGV5IGNvbnRpbnVlIHRvIG1hdGNoIHRoZSBvcmRlciBpbiB0aGlzIHRhYmxlLgorCSAqLworCisJeyAwLCBUV0w0MDMwX0JBU0VBRERfVVNCIH0sCisKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9BVURJT19WT0lDRSB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX0dQSU8gfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9JTlRCUiB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1BJSCB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1RFU1QgfSwKKworCXsgMiwgVFdMNDAzMF9CQVNFQUREX0tFWVBBRCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX01BREMgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTEVEIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV00wIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNMSB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX1BXTUEgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV01CIH0sCisKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9JTlQgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9NQVNURVIgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9SRUNFSVZFUiB9LAorCXsgMywgVFdMNDAzMF9CQVNFQUREX1JUQyB9LAorCXsgMywgVFdMNDAzMF9CQVNFQUREX1NFQ1VSRURfUkVHIH0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFeHBvcnRlZCBGdW5jdGlvbnMgKi8KKworLyoqCisgKiB0d2w0MDMwX2kyY193cml0ZSAtIFdyaXRlcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogYW4gYXJyYXkgb2YgbnVtX2J5dGVzKzEgY29udGFpbmluZyBkYXRhIHRvIHdyaXRlCisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICogQG51bV9ieXRlczogbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyCisgKgorICogSU1QT1JUQU5UOiBmb3IgJ3ZhbHVlJyBwYXJhbWV0ZXI6IEFsbG9jYXRlIHZhbHVlIG51bV9ieXRlcysxIGFuZAorICogdmFsaWQgZGF0YSBzdGFydHMgYXQgT2Zmc2V0IDEuCisgKgorICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdTggbnVtX2J5dGVzKQoreworCWludCByZXQ7CisJaW50IHNpZDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgKnR3bDsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnOworCisJaWYgKHVubGlrZWx5KG1vZF9ubyA+IFRXTDQwMzBfTU9EVUxFX0xBU1QpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgbW9kdWxlIG51bWJlciAlZFxuIiwgRFJJVkVSX05BTUUsIG1vZF9ubyk7CisJCXJldHVybiAtRVBFUk07CisJfQorCXNpZCA9IHR3bDQwMzBfbWFwW21vZF9ub10uc2lkOworCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbc2lkXTsKKworCWlmICh1bmxpa2VseSghaW51c2UpKSB7CisJCXByX2VycigiJXM6IGNsaWVudCAlZCBpcyBub3QgaW5pdGlhbGl6ZWRcbiIsIERSSVZFUl9OQU1FLCBzaWQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwltdXRleF9sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisJLyoKKwkgKiBbTVNHMV06IGZpbGwgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgZGF0YQorCSAqIGZpbGwgdGhlIGRhdGEgVHggYnVmZmVyCisJICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+bGVuID0gbnVtX2J5dGVzICsgMTsKKwltc2ctPmZsYWdzID0gMDsKKwltc2ctPmJ1ZiA9IHZhbHVlOworCS8qIG92ZXIgd3JpdGUgdGhlIGZpcnN0IGJ5dGUgb2YgYnVmZmVyIHdpdGggdGhlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwkqdmFsdWUgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAxKTsKKwltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKKworCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY193cml0ZSk7CisKKy8qKgorICogdHdsNDAzMF9pMmNfcmVhZCAtIFJlYWRzIGEgbiBiaXQgcmVnaXN0ZXIgaW4gVFdMNDAzMAorICogQG1vZF9ubzogbW9kdWxlIG51bWJlcgorICogQHZhbHVlOiBhbiBhcnJheSBvZiBudW1fYnl0ZXMgY29udGFpbmluZyBkYXRhIHRvIGJlIHJlYWQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKiBAbnVtX2J5dGVzOiBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIKKyAqCisgKiBSZXR1cm5zIHJlc3VsdCBvZiBvcGVyYXRpb24gLSBudW1fYnl0ZXMgaXMgc3VjY2VzcyBlbHNlIGZhaWx1cmUuCisgKi8KK2ludCB0d2w0MDMwX2kyY19yZWFkKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcykKK3sKKwlpbnQgcmV0OworCXU4IHZhbDsKKwlpbnQgc2lkOworCXN0cnVjdCB0d2w0MDMwX2NsaWVudCAqdHdsOworCXN0cnVjdCBpMmNfbXNnICptc2c7CisKKwlpZiAodW5saWtlbHkobW9kX25vID4gVFdMNDAzMF9NT0RVTEVfTEFTVCkpIHsKKwkJcHJfZXJyKCIlczogaW52YWxpZCBtb2R1bGUgbnVtYmVyICVkXG4iLCBEUklWRVJfTkFNRSwgbW9kX25vKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJc2lkID0gdHdsNDAzMF9tYXBbbW9kX25vXS5zaWQ7CisJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tzaWRdOworCisJaWYgKHVubGlrZWx5KCFpbnVzZSkpIHsKKwkJcHJfZXJyKCIlczogY2xpZW50ICVkIGlzIG5vdCBpbml0aWFsaXplZFxuIiwgRFJJVkVSX05BTUUsIHNpZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCW11dGV4X2xvY2soJnR3bC0+eGZlcl9sb2NrKTsKKwkvKiBbTVNHMV0gZmlsbCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBkYXRhICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+bGVuID0gMTsKKwltc2ctPmZsYWdzID0gMDsJLyogUmVhZCB0aGUgcmVnaXN0ZXIgdmFsdWUgKi8KKwl2YWwgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7CisJbXNnLT5idWYgPSAmdmFsOworCS8qIFtNU0cyXSBmaWxsIHRoZSBkYXRhIHJ4IGJ1ZmZlciAqLworCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzFdOworCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKKwltc2ctPmZsYWdzID0gSTJDX01fUkQ7CS8qIFJlYWQgdGhlIHJlZ2lzdGVyIHZhbHVlICovCisJbXNnLT5sZW4gPSBudW1fYnl0ZXM7CS8qIG9ubHkgbiBieXRlcyAqLworCW1zZy0+YnVmID0gdmFsdWU7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAyKTsKKwltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKKworCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY19yZWFkKTsKKworLyoqCisgKiB0d2w0MDMwX2kyY193cml0ZV91OCAtIFdyaXRlcyBhIDggYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gOCBiaXQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCisgKi8KK2ludCB0d2w0MDMwX2kyY193cml0ZV91OCh1OCBtb2Rfbm8sIHU4IHZhbHVlLCB1OCByZWcpCit7CisKKwkvKiAyIGJ5dGVzIG9mZnNldCAxIGNvbnRhaW5zIHRoZSBkYXRhIG9mZnNldCAwIGlzIHVzZWQgYnkgaTJjX3dyaXRlICovCisJdTggdGVtcF9idWZmZXJbMl0gPSB7IDAgfTsKKwkvKiBvZmZzZXQgMSBjb250YWlucyB0aGUgZGF0YSAqLworCXRlbXBfYnVmZmVyWzFdID0gdmFsdWU7CisJcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlKG1vZF9ubywgdGVtcF9idWZmZXIsIHJlZywgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHR3bDQwMzBfaTJjX3dyaXRlX3U4KTsKKworLyoqCisgKiB0d2w0MDMwX2kyY19yZWFkX3U4IC0gUmVhZHMgYSA4IGJpdCByZWdpc3RlciBmcm9tIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHJlYWQgOCBiaXQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCisgKi8KK2ludCB0d2w0MDMwX2kyY19yZWFkX3U4KHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcpCit7CisJcmV0dXJuIHR3bDQwMzBfaTJjX3JlYWQobW9kX25vLCB2YWx1ZSwgcmVnLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfcmVhZF91OCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBOT1RFOiAgV2Uga25vdyB0aGUgZmlyc3QgOCBJUlFzIGFmdGVyIHBkYXRhLT5iYXNlX2lycSBhcmUKKyAqIGZvciB0aGUgUElILCBhbmQgdGhlIG5leHQgYXJlIGZvciB0aGUgUFdSX0lOVCBTSUgsIHNpbmNlCisgKiB0aGF0J3MgaG93IHR3bF9pbml0X2lycSgpIHNldHMgdGhpbmdzIHVwLgorICovCisKK3N0YXRpYyBpbnQgYWRkX2NoaWxkcmVuKHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSBOVUxMOworCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gTlVMTDsKKwlpbnQJCQlzdGF0dXMgPSAwOworCisJaWYgKHR3bF9oYXNfYmNpKCkgJiYgcGRhdGEtPmJjaSkgeworCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzNdOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfYmNpIiwgLTEpOworCQlpZiAoIXBkZXYpIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgYmNpIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPmJjaSwKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+YmNpKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhZGQgYmNpIGRhdGEsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlzdHJ1Y3QgcmVzb3VyY2UgciA9IHsKKwkJCQkuc3RhcnQgPSBwZGF0YS0+aXJxX2Jhc2UgKyA4ICsgMSwKKwkJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX07CisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyLCAxKTsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgY3JlYXRlIGJjaSBkZXYsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc19ncGlvKCkgJiYgcGRhdGEtPmdwaW8pIHsKKwkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1sxXTsKKworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0d2w0MDMwX2dwaW8iLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBncGlvIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyogbW9yZSBkcml2ZXIgbW9kZWwgaW5pdCAqLworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCS8qIGRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsgKi8KKworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIHBkYXRhLT5ncGlvLAorCQkJCQlzaXplb2YoKnBkYXRhLT5ncGlvKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhZGQgZ3BpbyBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJCS8qIEdQSU8gbW9kdWxlIElSUSAqLworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXN0cnVjdCByZXNvdXJjZQlyID0geworCQkJCS5zdGFydCA9IHBkYXRhLT5pcnFfYmFzZSArIDAsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSBncGlvIGRldiwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmICh0d2xfaGFzX2tleXBhZCgpICYmIHBkYXRhLT5rZXlwYWQpIHsKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9rZXlwYWQiLCAtMSk7CisJCWlmIChwZGV2KSB7CisJCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzJdOworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIHBkYXRhLT5rZXlwYWQsCisJCQkJCXNpemVvZigqcGRhdGEtPmtleXBhZCkpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIGtleXBhZCBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkJImNhbid0IGNyZWF0ZSBrZXlwYWQgZGV2LCAlZFxuIiwKKwkJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIGtleXBhZCBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmICh0d2xfaGFzX21hZGMoKSAmJiBwZGF0YS0+bWFkYykgeworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0d2w0MDMwX21hZGMiLCAtMSk7CisJCWlmIChwZGV2KSB7CisJCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzJdOworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIHBkYXRhLT5tYWRjLAorCQkJCQlzaXplb2YoKnBkYXRhLT5tYWRjKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCBtYWRjIGRhdGEsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkJImNhbid0IGNyZWF0ZSBtYWRjIGRldiwgJWRcbiIsCisJCQkJCQlzdGF0dXMpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBtYWRjIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfcnRjKCkpIHsKKwkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1szXTsKKworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0d2w0MDMwX3J0YyIsIC0xKTsKKwkJaWYgKCFwZGV2KSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIHJ0YyBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCX0KKworCQkvKgorCQkgKiBSRVZJU0lUIHBsYXRmb3JtX2RhdGEgaGVyZSBjdXJyZW50bHkgbWlnaHQgdXNlIG9mCisJCSAqICJtc2VjdXJlIiBsaW5lIC4uLiBidXQgZm9yIG5vdyB3ZSBqdXN0IGV4cGVjdCBib2FyZAorCQkgKiBzZXR1cCB0byB0ZWxsIHRoZSBjaGlwICJ3ZSBhcmUgc2VjdXJlIiBhdCBhbGwgdGltZXMuCisJCSAqIEV2ZW50dWFsbHksIExpbnV4IG1pZ2h0IGJlY29tZSBtb3JlIGF3YXJlIG9mIHN1Y2gKKwkJICogSFcgc2VjdXJpdHkgY29uY2VybnMsIGFuZCAibGVhc3QgcHJpdmlsZWdlIi4KKwkJICovCisKKwkJLyogUlRDIG1vZHVsZSBJUlEgKi8KKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlzdHJ1Y3QgcmVzb3VyY2UJciA9IHsKKwkJCQkuc3RhcnQgPSBwZGF0YS0+aXJxX2Jhc2UgKyA4ICsgMywKKwkJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX07CisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyLCAxKTsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgY3JlYXRlIHJ0YyBkZXYsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc191c2IoKSAmJiBwZGF0YS0+dXNiKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMF07CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF91c2IiLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyB1c2IgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+dXNiLAorCQkJCQlzaXplb2YoKnBkYXRhLT51c2IpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIHVzYiBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlIHIgPSB7CisJCQkJLnN0YXJ0ID0gcGRhdGEtPmlycV9iYXNlICsgOCArIDIsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSB1c2IgZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJfQorCX0KKworZXJyOgorCWlmIChzdGF0dXMpCisJCXByX2VycigiZmFpbGVkIHRvIGFkZCB0d2w0MDMwJ3MgY2hpbGRyZW4gKHN0YXR1cyAlZClcbiIsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBpbml0aWFsaXplIHRoZSBvbi1jaGlwIGNsb2NrIGZyYW1ld29yaywKKyAqIGxldHRpbmcgaXQgZ2VuZXJhdGUgdGhlIHJpZ2h0IGZyZXF1ZW5jaWVzIGZvciBVU0IsIE1BREMsIGFuZAorICogb3RoZXIgcHVycG9zZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBwcm90ZWN0X3BtX21hc3Rlcih2b2lkKQoreworCWludCBlID0gMDsKKworCWUgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9MT0NLLAorCQkJUl9QUk9URUNUX0tFWSk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCB1bnByb3RlY3RfcG1fbWFzdGVyKHZvaWQpCit7CisJaW50IGUgPSAwOworCisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0sxLAorCQkJUl9QUk9URUNUX0tFWSk7CisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0syLAorCQkJUl9QUk9URUNUX0tFWSk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbG9ja3NfaW5pdCh2b2lkKQoreworCWludCBlID0gMDsKKwlzdHJ1Y3QgY2xrICpvc2M7CisJdTMyIHJhdGU7CisJdTggY3RybCA9IEhGQ0xLX0ZSRVFfMjZfTUhaOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9zYyA9IGNsa19nZXQoTlVMTCwgIm9zY19jayIpOworCWVsc2UKKwkJb3NjID0gY2xrX2dldChOVUxMLCAib3NjX3N5c19jayIpOworI2Vsc2UKKwkvKiBSRVZJU0lUIGZvciBub24tT01BUCBzeXN0ZW1zLCBwYXNzIHRoZSBjbG9jayByYXRlIGZyb20KKwkgKiBib2FyZCBpbml0IGNvZGUsIHVzaW5nIHBsYXRmb3JtX2RhdGEuCisJICovCisJb3NjID0gRVJSX1BUUigtRUlPKTsKKyNlbmRpZgorCWlmIChJU19FUlIob3NjKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTa2lwcGluZyB0d2w0MDMwIGludGVybmFsIGNsb2NrIGluaXQgYW5kICIKKwkJCQkidXNpbmcgYm9vdGxvYWRlciB2YWx1ZSAodW5rbm93biBvc2MgcmF0ZSlcbiIpOworCQlyZXR1cm47CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShvc2MpOworCWNsa19wdXQob3NjKTsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMTkyMDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzE5cDJfTUhaOworCQlicmVhazsKKwljYXNlIDI2MDAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8yNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMzg0MDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzM4cDRfTUhaOworCQlicmVhazsKKwl9CisKKwljdHJsIHw9IEhJR0hfUEVSRl9TUTsKKwllIHw9IHVucHJvdGVjdF9wbV9tYXN0ZXIoKTsKKwkvKiBlZmZlY3QtPk1BREMrVVNCIGNrIGVuICovCisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGN0cmwsIFJfQ0ZHX0JPT1QpOworCWUgfD0gcHJvdGVjdF9wbV9tYXN0ZXIoKTsKKworCWlmIChlIDwgMCkKKwkJcHJfZXJyKCIlczogY2xvY2sgaW5pdCBlcnIgWyVkXVxuIiwgRFJJVkVSX05BTUUsIGUpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgdHdsX2luaXRfaXJxKGludCBpcnFfbnVtLCB1bnNpZ25lZCBpcnFfYmFzZSwgdW5zaWduZWQgaXJxX2VuZCk7CitpbnQgdHdsX2V4aXRfaXJxKHZvaWQpOworCitzdGF0aWMgaW50IHR3bDQwMzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJdW5zaWduZWQgaTsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdHdsX2V4aXRfaXJxKCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFdMNDAzMF9OVU1fU0xBVkVTOyBpKyspIHsKKwkJc3RydWN0IHR3bDQwMzBfY2xpZW50CSp0d2wgPSAmdHdsNDAzMF9tb2R1bGVzW2ldOworCisJCWlmICh0d2wtPmNsaWVudCAmJiB0d2wtPmNsaWVudCAhPSBjbGllbnQpCisJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UodHdsLT5jbGllbnQpOworCQl0d2w0MDMwX21vZHVsZXNbaV0uY2xpZW50ID0gTlVMTDsKKwl9CisJaW51c2UgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworLyogTk9URTogIHRoaXMgZHJpdmVyIG9ubHkgaGFuZGxlcyBhIHNpbmdsZSB0d2w0MDMwL3RwczY1OXgwIGNoaXAgKi8KK3N0YXRpYyBpbnQKK3R3bDQwMzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludAkJCQlzdGF0dXM7CisJdW5zaWduZWQJCQlpOworCXN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykgPT0gMCkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImNhbid0IHRhbGsgSTJDP1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChpbnVzZSkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImRyaXZlciBpcyBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRXTDQwMzBfTlVNX1NMQVZFUzsgaSsrKSB7CisJCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tpXTsKKworCQl0d2wtPmFkZHJlc3MgPSBjbGllbnQtPmFkZHIgKyBpOworCQlpZiAoaSA9PSAwKQorCQkJdHdsLT5jbGllbnQgPSBjbGllbnQ7CisJCWVsc2UgeworCQkJdHdsLT5jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKKwkJCQkJdHdsLT5hZGRyZXNzKTsKKwkJCWlmICghdHdsLT5jbGllbnQpIHsKKwkJCQlkZXZfZXJyKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYXR0YWNoIGNsaWVudCAlZFxuIiwgaSk7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlzdHJsY3B5KHR3bC0+Y2xpZW50LT5uYW1lLCBpZC0+bmFtZSwKKwkJCQkJc2l6ZW9mKHR3bC0+Y2xpZW50LT5uYW1lKSk7CisJCX0KKwkJbXV0ZXhfaW5pdCgmdHdsLT54ZmVyX2xvY2spOworCX0KKwlpbnVzZSA9IHRydWU7CisKKwkvKiBzZXR1cCBjbG9jayBmcmFtZXdvcmsgKi8KKwljbG9ja3NfaW5pdCgpOworCisJLyogTWF5YmUgaW5pdCB0aGUgVDIgSW50ZXJydXB0IHN1YnN5c3RlbSAqLworCWlmIChjbGllbnQtPmlycQorCQkJJiYgcGRhdGEtPmlycV9iYXNlCisJCQkmJiBwZGF0YS0+aXJxX2VuZCA+IHBkYXRhLT5pcnFfYmFzZSkgeworCQlzdGF0dXMgPSB0d2xfaW5pdF9pcnEoY2xpZW50LT5pcnEsIHBkYXRhLT5pcnFfYmFzZSwgcGRhdGEtPmlycV9lbmQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlzdGF0dXMgPSBhZGRfY2hpbGRyZW4ocGRhdGEpOworZmFpbDoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJdHdsNDAzMF9yZW1vdmUoY2xpZW50KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHdsNDAzMF9pZHNbXSA9IHsKKwl7ICJ0d2w0MDMwIiwgMCB9LAkvKiAiVHJpdG9uIDIiICovCisJeyAidHBzNjU5NTAiLCAwIH0sCS8qIGNhdGFsb2cgdmVyc2lvbiBvZiB0d2w0MDMwICovCisJeyAidHBzNjU5MzAiLCAwIH0sCS8qIGZld2VyIExET3MgYW5kIERBQ3M7IG5vIGNoYXJnZXIgKi8KKwl7ICJ0cHM2NTkyMCIsIDAgfSwJLyogZmV3ZXIgTERPczsgbm8gY29kZWMgb3IgY2hhcmdlciAqLworCXsgInR3bDUwMzAiLCAwIH0sCS8qIFQyIHVwZGF0ZWQgKi8KKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR3bDQwMzBfaWRzKTsKKworLyogT25lIENsaWVudCBEcml2ZXIgLCA0IENsaWVudHMgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0d2w0MDMwX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUJPSB0d2w0MDMwX2lkcywKKwkucHJvYmUJCT0gdHdsNDAzMF9wcm9iZSwKKwkucmVtb3ZlCQk9IHR3bDQwMzBfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0d2w0MDMwX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHdsNDAzMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHR3bDQwMzBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0d2w0MDMwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0d2w0MDMwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgQ29yZSBpbnRlcmZhY2UgZm9yIFRXTDQwMzAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtaXJxLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTg2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jCkBAIC0wLDAgKzEsNzQzIEBACisvKgorICogdHdsNDAzMC1pcnEuYyAtIFRXTDQwMzAvVFBTNjU5eDAgaXJxIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIE1vZGlmaWNhdGlvbnMgdG8gZGVmZXIgaW50ZXJydXB0IGhhbmRsaW5nIHRvIGEga2VybmVsIHRocmVhZDoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKKyAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgorICoKKyAqIENvZGUgY2xlYW51cCBhbmQgbW9kaWZpY2F0aW9ucyB0byBJUlEgaGFuZGxlci4KKyAqIGJ5IHN5ZWQga2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisKKy8qCisgKiBUV0w0MDMwIElSUSBoYW5kbGluZyBoYXMgdHdvIHN0YWdlcyBpbiBoYXJkd2FyZSwgYW5kIHRodXMgaW4gc29mdHdhcmUuCisgKiBUaGUgUHJpbWFyeSBJbnRlcnJ1cHQgSGFuZGxlciAoUElIKSBzdGFnZSBleHBvc2VzIHN0YXR1cyBiaXRzIHNheWluZworICogd2hpY2ggU2Vjb25kYXJ5IEludGVycnVwdCBIYW5kbGVyIChTSUgpIHN0YWdlIGlzIHJhaXNpbmcgYW4gaW50ZXJydXB0LgorICogU0lIIG1vZHVsZXMgYXJlIG1vcmUgdHJhZGl0aW9uYWwgSVJRIGNvbXBvbmVudHMsIHdoaWNoIHN1cHBvcnQgcGVyLUlSUQorICogZW5hYmxlL2Rpc2FibGUgYW5kIHRyaWdnZXIgY29udHJvbHM7IHRoZXkgZG8gbW9zdCBvZiB0aGUgd29yay4KKyAqCisgKiBUaGVzZSBjaGlwcyBhcmUgZGVzaWduZWQgdG8gc3VwcG9ydCBJUlEgaGFuZGxpbmcgZnJvbSB0d28gZGlmZmVyZW50CisgKiBJMkMgbWFzdGVycy4gIEVhY2ggaGFzIGEgZGVkaWNhdGVkIElSUSBsaW5lLCBhbmQgZGVkaWNhdGVkIElSUSBzdGF0dXMKKyAqIGFuZCBtYXNrIHJlZ2lzdGVycyBpbiB0aGUgUElIIGFuZCBTSUggbW9kdWxlcy4KKyAqCisgKiBXZSBzZXQgdXAgSVJRcyBzdGFydGluZyBhdCBhIHBsYXRmb3JtLXNwZWNpZmllZCBiYXNlLCBhbHdheXMgc3RhcnRpbmcKKyAqIHdpdGggUElIIGFuZCB0aGUgU0lIIGZvciBQV1JfSU5UIGFuZCB0aGVuIHVzdWFsbHkgYWRkaW5nIEdQSU86CisgKgliYXNlICsgMCAgLi4gYmFzZSArIDcJUElICisgKgliYXNlICsgOCAgLi4gYmFzZSArIDE1CVNJSCBmb3IgUFdSX0lOVAorICoJYmFzZSArIDE2IC4uIGJhc2UgKyAzMwlTSUggZm9yIEdQSU8KKyAqLworCisvKiBQSUggcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBSRUdfUElIX0lTUl9QMQkJCTB4MDEKKyNkZWZpbmUgUkVHX1BJSF9JU1JfUDIJCQkweDAyCisjZGVmaW5lIFJFR19QSUhfU0lSCQkJMHgwMwkvKiBmb3IgdGVzdGluZyAqLworCisKKy8qIExpbnV4IGNvdWxkIChldmVudHVhbGx5KSB1c2UgZWl0aGVyIElSUSBsaW5lICovCitzdGF0aWMgaW50IGlycV9saW5lOworCitzdHJ1Y3Qgc2loIHsKKwljaGFyCW5hbWVbOF07CisJdTgJbW9kdWxlOwkJCS8qIG1vZHVsZSBpZCAqLworCXU4CWNvbnRyb2xfb2Zmc2V0OwkJLyogZm9yIFNJSF9DVFJMICovCisJYm9vbAlzZXRfY29yOworCisJdTgJYml0czsJCQkvKiB2YWxpZCBpbiBpc3IvaW1yICovCisJdTgJYnl0ZXNfaXhyOwkJLyogYnl0ZWxlbiBvZiBJU1IvSU1SL1NJUiAqLworCisJdTgJZWRyX29mZnNldDsKKwl1OAlieXRlc19lZHI7CQkvKiBieXRlbGVuIG9mIEVEUiAqLworCisJLyogU0lSIGlnbm9yZWQgLS0gc2V0IGludGVycnVwdCwgZm9yIHRlc3Rpbmcgb25seSAqLworCXN0cnVjdCBpcnFfZGF0YSB7CisJCXU4CWlzcl9vZmZzZXQ7CisJCXU4CWltcl9vZmZzZXQ7CisJfSBtYXNrWzJdOworCS8qICsgMiBieXRlcyBwYWRkaW5nICovCit9OworCisjZGVmaW5lIFNJSF9JTklUSUFMSVpFUihtb2RuYW1lLCBuYml0cykgXAorCS5tb2R1bGUJCT0gVFdMNDAzMF9NT0RVTEVfICMjIG1vZG5hbWUsIFwKKwkuY29udHJvbF9vZmZzZXQgPSBUV0w0MDMwXyAjIyBtb2RuYW1lICMjIF9TSUhfQ1RSTCwgXAorCS5iaXRzCQk9IG5iaXRzLCBcCisJLmJ5dGVzX2l4cgk9IERJVl9ST1VORF9VUChuYml0cywgOCksIFwKKwkuZWRyX29mZnNldAk9IFRXTDQwMzBfICMjIG1vZG5hbWUgIyMgX0VEUiwgXAorCS5ieXRlc19lZHIJPSBESVZfUk9VTkRfVVAoKDIqKG5iaXRzKSksIDgpLCBcCisJLm1hc2sgPSB7IHsgXAorCQkuaXNyX29mZnNldAk9IFRXTDQwMzBfICMjIG1vZG5hbWUgIyMgX0lTUjEsIFwKKwkJLmltcl9vZmZzZXQJPSBUV0w0MDMwXyAjIyBtb2RuYW1lICMjIF9JTVIxLCBcCisJfSwgXAorCXsgXAorCQkuaXNyX29mZnNldAk9IFRXTDQwMzBfICMjIG1vZG5hbWUgIyMgX0lTUjIsIFwKKwkJLmltcl9vZmZzZXQJPSBUV0w0MDMwXyAjIyBtb2RuYW1lICMjIF9JTVIyLCBcCisJfSwgfSwKKworLyogcmVnaXN0ZXIgbmFtaW5nIHBvbGljaWVzIGFyZSBpbmNvbnNpc3RlbnQgLi4uICovCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9FRFIJCVRXTDQwMzBfSU5UX1BXUl9FRFIxCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0tFWVBBRF9LRVlQCVRXTDQwMzBfTU9EVUxFX0tFWVBBRAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlRfUFdSCQlUV0w0MDMwX01PRFVMRV9JTlQKKworCisvKiBPcmRlciBpbiB0aGlzIHRhYmxlIG1hdGNoZXMgb3JkZXIgaW4gUElIX0lTUi4gIFRoYXQgaXMsCisgKiBCSVQobikgaW4gUElIX0lTUiBpcyBzaWhfbW9kdWxlc1tuXS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzaWggc2loX21vZHVsZXNbNl0gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAiZ3BpbyIsCisJCS5tb2R1bGUJCT0gVFdMNDAzMF9NT0RVTEVfR1BJTywKKwkJLmNvbnRyb2xfb2Zmc2V0CT0gUkVHX0dQSU9fU0lIX0NUUkwsCisJCS5zZXRfY29yCT0gdHJ1ZSwKKwkJLmJpdHMJCT0gVFdMNDAzMF9HUElPX01BWCwKKwkJLmJ5dGVzX2l4cgk9IDMsCisJCS8qIE5vdGU6ICphbGwqIG9mIHRoZXNlIElSUXMgZGVmYXVsdCB0byBuby10cmlnZ2VyICovCisJCS5lZHJfb2Zmc2V0CT0gUkVHX0dQSU9fRURSMSwKKwkJLmJ5dGVzX2Vkcgk9IDUsCisJCS5tYXNrID0geyB7CisJCQkuaXNyX29mZnNldAk9IFJFR19HUElPX0lTUjFBLAorCQkJLmltcl9vZmZzZXQJPSBSRUdfR1BJT19JTVIxQSwKKwkJfSwgeworCQkJLmlzcl9vZmZzZXQJPSBSRUdfR1BJT19JU1IxQiwKKwkJCS5pbXJfb2Zmc2V0CT0gUkVHX0dQSU9fSU1SMUIsCisJCX0sIH0sCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJrZXlwYWQiLAorCQkuc2V0X2Nvcgk9IHRydWUsCisJCVNJSF9JTklUSUFMSVpFUihLRVlQQURfS0VZUCwgNCkKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJCT0gImJjaSIsCisJCS5tb2R1bGUJCT0gVFdMNDAzMF9NT0RVTEVfSU5URVJSVVBUUywKKwkJLmNvbnRyb2xfb2Zmc2V0CT0gVFdMNDAzMF9JTlRFUlJVUFRTX0JDSVNJSENUUkwsCisJCS5iaXRzCQk9IDEyLAorCQkuYnl0ZXNfaXhyCT0gMiwKKwkJLmVkcl9vZmZzZXQJPSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMSwKKwkJLyogTm90ZTogbW9zdCBvZiB0aGVzZSBJUlFzIGRlZmF1bHQgdG8gbm8tdHJpZ2dlciAqLworCQkuYnl0ZXNfZWRyCT0gMywKKwkJLm1hc2sgPSB7IHsKKwkJCS5pc3Jfb2Zmc2V0CT0gVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFBLAorCQkJLmltcl9vZmZzZXQJPSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUEsCisJCX0sIHsKKwkJCS5pc3Jfb2Zmc2V0CT0gVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFCLAorCQkJLmltcl9vZmZzZXQJPSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUIsCisJCX0sIH0sCisJfSwKKwlbM10gPSB7CisJCS5uYW1lCQk9ICJtYWRjIiwKKwkJU0lIX0lOSVRJQUxJWkVSKE1BREMsIDQpCisJfSwKKwlbNF0gPSB7CisJCS8qIFVTQiBkb2Vzbid0IHVzZSB0aGUgc2FtZSBTSUggb3JnYW5pemF0aW9uICovCisJCS5uYW1lCQk9ICJ1c2IiLAorCX0sCisJWzVdID0geworCQkubmFtZQkJPSAicG93ZXIiLAorCQkuc2V0X2Nvcgk9IHRydWUsCisJCVNJSF9JTklUSUFMSVpFUihJTlRfUFdSLCA4KQorCX0sCisJCS8qIHRoZXJlIGFyZSBubyBTSUggbW9kdWxlcyAjNiBvciAjNyAuLi4gKi8KK307CisKKyN1bmRlZiBUV0w0MDMwX01PRFVMRV9LRVlQQURfS0VZUAorI3VuZGVmIFRXTDQwMzBfTU9EVUxFX0lOVF9QV1IKKyN1bmRlZiBUV0w0MDMwX0lOVF9QV1JfRURSCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCB0d2w0MDMwX2lycV9iYXNlOworCitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gaXJxX2V2ZW50OworCisvKgorICogVGhpcyB0aHJlYWQgcHJvY2Vzc2VzIGludGVycnVwdHMgcmVwb3J0ZWQgYnkgdGhlIFByaW1hcnkgSW50ZXJydXB0IEhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9pcnFfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJbG9uZyBpcnEgPSAobG9uZylkYXRhOworCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdGF0aWMgdW5zaWduZWQgaTJjX2Vycm9yczsKKwljb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4X2kyY19lcnJvcnMgPSAxMDA7CisKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWludCByZXQ7CisJCWludCBtb2R1bGVfaXJxOworCQl1OCBwaWhfaXNyOworCisJCS8qIFdhaXQgZm9yIElSUSwgdGhlbiByZWFkIFBJSCBpcnEgc3RhdHVzIChhbHNvIGJsb2NraW5nKSAqLworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmlycV9ldmVudCk7CisKKwkJcmV0ID0gdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QSUgsICZwaWhfaXNyLAorCQkJCQkgIFJFR19QSUhfSVNSX1AxKTsKKwkJaWYgKHJldCkgeworCQkJcHJfd2FybmluZygidHdsNDAzMDogSTJDIGVycm9yICVkIHJlYWRpbmcgUElIIElTUlxuIiwKKwkJCQkJcmV0KTsKKwkJCWlmICgrK2kyY19lcnJvcnMgPj0gbWF4X2kyY19lcnJvcnMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIk1heGltdW0gSTJDIGVycm9yIGNvdW50IgorCQkJCQkJIiBleGNlZWRlZC4gIFRlcm1pbmF0aW5nICVzLlxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbXBsZXRlKCZpcnFfZXZlbnQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiB0aGVzZSBoYW5kbGVycyBkZWFsIHdpdGggdGhlIHJlbGV2YW50IFNJSCBpcnEgc3RhdHVzICovCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWZvciAobW9kdWxlX2lycSA9IHR3bDQwMzBfaXJxX2Jhc2U7CisJCQkJcGloX2lzcjsKKwkJCQlwaWhfaXNyID4+PSAxLCBtb2R1bGVfaXJxKyspIHsKKwkJCWlmIChwaWhfaXNyICYgMHgxKSB7CisJCQkJaXJxX2Rlc2NfdCAqZCA9IGlycV9kZXNjICsgbW9kdWxlX2lycTsKKworCQkJCS8qIFRoZXNlIGNhbid0IGJlIG1hc2tlZCAuLi4gYWx3YXlzIHdhcm4KKwkJCQkgKiBpZiB3ZSBnZXQgYW55IHN1cnByaXNlcy4KKwkJCQkgKi8KKwkJCQlpZiAoZC0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKQorCQkJCQlub3RlX2ludGVycnVwdChtb2R1bGVfaXJxLCBkLAorCQkJCQkJCUlSUV9OT05FKTsKKwkJCQllbHNlCisJCQkJCWQtPmhhbmRsZV9pcnEobW9kdWxlX2lycSwgZCk7CisJCQl9CisJCX0KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogaGFuZGxlX3R3bDQwMzBfcGloKCkgaXMgdGhlIGRlc2MtPmhhbmRsZSBtZXRob2QgZm9yIHRoZSB0d2w0MDMwIGludGVycnVwdC4KKyAqIFRoaXMgaXMgYSBjaGFpbmVkIGludGVycnVwdCwgc28gdGhlcmUgaXMgbm8gZGVzYy0+YWN0aW9uIG1ldGhvZCBmb3IgaXQuCisgKiBOb3cgd2UgbmVlZCB0byBxdWVyeSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW4gdGhlIHR3bDQwMzAgdG8gZGV0ZXJtaW5lCisgKiB3aGljaCBtb2R1bGUgaXMgZ2VuZXJhdGluZyB0aGUgaW50ZXJydXB0IHJlcXVlc3QuICBIb3dldmVyLCB3ZSBjYW4ndCBkbyBpMmMKKyAqIHRyYW5zYWN0aW9ucyBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgbXVzdCBkZWZlciB0aGF0IHdvcmsgdG8gYSBrZXJuZWwKKyAqIHRocmVhZC4gIEFsbCB3ZSBkbyBoZXJlIGlzIGFja25vd2xlZGdlIGFuZCBtYXNrIHRoZSBpbnRlcnJ1cHQgYW5kIHdha2V1cAorICogdGhlIGtlcm5lbCB0aHJlYWQuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV90d2w0MDMwX3BpaCh1bnNpZ25lZCBpbnQgaXJxLCBpcnFfZGVzY190ICpkZXNjKQoreworCS8qIEFja25vd2xlZGdlLCBjbGVhciAqQU5EKiBtYXNrIHRoZSBpbnRlcnJ1cHQuLi4gKi8KKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwljb21wbGV0ZSgmaXJxX2V2ZW50KTsKK30KKworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnRfdHdsNDAzMF9pcnFfdGhyZWFkKGxvbmcgaXJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCisJaW5pdF9jb21wbGV0aW9uKCZpcnFfZXZlbnQpOworCXRocmVhZCA9IGt0aHJlYWRfcnVuKHR3bDQwMzBfaXJxX3RocmVhZCwgKHZvaWQgKilpcnEsICJ0d2w0MDMwLWlycSIpOworCWlmICghdGhyZWFkKQorCQlwcl9lcnIoInR3bDQwMzA6IGNvdWxkIG5vdCBjcmVhdGUgaXJxICVsZCB0aHJlYWQhXG4iLCBpcnEpOworCisJcmV0dXJuIHRocmVhZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHR3bDQwMzBfaW5pdF9zaWhfbW9kdWxlcygpIC4uLiBzdGFydCBmcm9tIGEga25vd24gc3RhdGUgd2hlcmUgbm8KKyAqIElSUXMgd2lsbCBiZSBjb21pbmcgaW4sIGFuZCB3aGVyZSB3ZSBjYW4gcXVpY2tseSBlbmFibGUgdGhlbSB0aGVuCisgKiBoYW5kbGUgdGhlbSBhcyB0aGV5IGFycml2ZS4gIE1hc2sgYWxsIElSUXM6IG1heWJlIGluaXQgU0lIX0NUUkwuCisgKgorICogTk9URTogIHdlIGRvbid0IHRvdWNoIEVEUiByZWdpc3RlcnMgaGVyZTsgdGhleSBzdGF5IHdpdGggaGFyZHdhcmUKKyAqIGRlZmF1bHRzIG9yIHdoYXRldmVyIHRoZSBsYXN0IHZhbHVlIHdhcy4gIE5vdGUgdGhhdCB3aGVuIGJvdGggRURSCisgKiBiaXRzIGZvciBhbiBJUlEgYXJlIGNsZWFyLCB0aGF0J3MgYXMgaWYgaXRzIElNUiBiaXQgaXMgc2V0Li4uCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9pbml0X3NpaF9tb2R1bGVzKHVuc2lnbmVkIGxpbmUpCit7CisJY29uc3Qgc3RydWN0IHNpaCAqc2loOworCXU4IGJ1Zls0XTsKKwlpbnQgaTsKKwlpbnQgc3RhdHVzOworCisJLyogbGluZSAwID09IGludDFfbiBzaWduYWw7IGxpbmUgMSA9PSBpbnQyX24gc2lnbmFsICovCisJaWYgKGxpbmUgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlycV9saW5lID0gbGluZTsKKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgb24gb3VyIGxpbmUgKi8KKwltZW1zZXQoYnVmLCAweGZmLCBzaXplb2YgYnVmKTsKKwlzaWggPSBzaWhfbW9kdWxlczsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaWhfbW9kdWxlcyk7IGkrKywgc2loKyspIHsKKworCQkvKiBza2lwIFVTQiAtLSBpdCdzIGZ1bmt5ICovCisJCWlmICghc2loLT5ieXRlc19peHIpCisJCQljb250aW51ZTsKKworCQlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZShzaWgtPm1vZHVsZSwgYnVmLAorCQkJCXNpaC0+bWFza1tsaW5lXS5pbXJfb2Zmc2V0LCBzaWgtPmJ5dGVzX2l4cik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcHJfZXJyKCJ0d2w0MDMwOiBlcnIgJWQgaW5pdGlhbGl6aW5nICVzICVzXG4iLAorCQkJCQlzdGF0dXMsIHNpaC0+bmFtZSwgIklNUiIpOworCisJCS8qIE1heWJlIGRpc2FibGUgImV4Y2x1c2l2ZSIgbW9kZTsgYnVmZmVyIHNlY29uZCBwZW5kaW5nIGlycTsKKwkJICogc2V0IENsZWFyLU9uLVJlYWQgKENPUikgYml0LgorCQkgKgorCQkgKiBOT1RFIHRoYXQgc29tZXRpbWVzIENPUiBwb2xhcml0eSBpcyBkb2N1bWVudGVkIGFzIGJlaW5nCisJCSAqIGludmVydGVkOiAgZm9yIE1BREMgYW5kIEJDSSwgQ09SPTEgbWVhbnMgImNsZWFyIG9uIHdyaXRlIi4KKwkJICogQW5kIGZvciBQV1JfSU5UIGl0J3Mgbm90IGRvY3VtZW50ZWQuLi4KKwkJICovCisJCWlmIChzaWgtPnNldF9jb3IpIHsKKwkJCXN0YXR1cyA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KHNpaC0+bW9kdWxlLAorCQkJCQlUV0w0MDMwX1NJSF9DVFJMX0NPUl9NQVNLLAorCQkJCQlzaWgtPmNvbnRyb2xfb2Zmc2V0KTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCXByX2VycigidHdsNDAzMDogZXJyICVkIGluaXRpYWxpemluZyAlcyAlc1xuIiwKKwkJCQkJCXN0YXR1cywgc2loLT5uYW1lLCAiU0lIX0NUUkwiKTsKKwkJfQorCX0KKworCXNpaCA9IHNpaF9tb2R1bGVzOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpaF9tb2R1bGVzKTsgaSsrLCBzaWgrKykgeworCQl1OCByeGJ1Zls0XTsKKwkJaW50IGo7CisKKwkJLyogc2tpcCBVU0IgKi8KKwkJaWYgKCFzaWgtPmJ5dGVzX2l4cikKKwkJCWNvbnRpbnVlOworCisJCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cy4gIEVpdGhlciB0aGUgcmVhZCB3YXMKKwkJICogZW5vdWdoLCBvciB3ZSBuZWVkIHRvIHdyaXRlIHRob3NlIGJpdHMuICBSZXBlYXQsIGluCisJCSAqIGNhc2UgYW4gSVJRIGlzIHBlbmRpbmcgKFBFTkRESVM9MCkgLi4uIHRoYXQncyBub3QKKwkJICogdW5jb21tb24gd2l0aCBQV1JfSU5ULlBXUk9OLgorCQkgKi8KKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJc3RhdHVzID0gdHdsNDAzMF9pMmNfcmVhZChzaWgtPm1vZHVsZSwgcnhidWYsCisJCQkJc2loLT5tYXNrW2xpbmVdLmlzcl9vZmZzZXQsIHNpaC0+Ynl0ZXNfaXhyKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCXByX2VycigidHdsNDAzMDogZXJyICVkIGluaXRpYWxpemluZyAlcyAlc1xuIiwKKwkJCQkJc3RhdHVzLCBzaWgtPm5hbWUsICJJU1IiKTsKKworCQkJaWYgKCFzaWgtPnNldF9jb3IpCisJCQkJc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGUoc2loLT5tb2R1bGUsIGJ1ZiwKKwkJCQkJc2loLT5tYXNrW2xpbmVdLmlzcl9vZmZzZXQsCisJCQkJCXNpaC0+Ynl0ZXNfaXhyKTsKKwkJCS8qIGVsc2UgQ09SPTEgbWVhbnMgcmVhZCBzdWZmaWNlZC4KKwkJCSAqIChmb3IgbW9zdCBTSUggbW9kdWxlcy4uLikKKwkJCSAqLworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9pcnEoaW50IGlycSkKK3sKKyNpZmRlZiBDT05GSUdfQVJNCisJLyogQVJNIHJlcXVpcmVzIGFuIGV4dHJhIHN0ZXAgdG8gY2xlYXIgSVJRX05PUkVRVUVTVCwgd2hpY2ggaXQKKwkgKiBzZXRzIG9uIGJlaGFsZiBvZiBldmVyeSBpcnFfY2hpcC4gIEFsc28gc2V0cyBJUlFfTk9QUk9CRS4KKwkgKi8KKwlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisjZWxzZQorCS8qIHNhbWUgZWZmZWN0IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgKi8KKwlzZXRfaXJxX25vcHJvYmUoaXJxKTsKKyNlbmRpZgorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNpaF9hZ2VudF9sb2NrKTsKKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKworc3RydWN0IHNpaF9hZ2VudCB7CisJaW50CQkJaXJxX2Jhc2U7CisJY29uc3Qgc3RydWN0IHNpaAkqc2loOworCisJdTMyCQkJaW1yOworCWJvb2wJCQlpbXJfY2hhbmdlX3BlbmRpbmc7CisJc3RydWN0IHdvcmtfc3RydWN0CW1hc2tfd29yazsKKworCXUzMgkJCWVkZ2VfY2hhbmdlOworCXN0cnVjdCB3b3JrX3N0cnVjdAllZGdlX3dvcms7Cit9OworCitzdGF0aWMgdm9pZCB0d2w0MDMwX3NpaF9kb19tYXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2loX2FnZW50CSphZ2VudDsKKwljb25zdCBzdHJ1Y3Qgc2loCSpzaWg7CisJdW5pb24geworCQl1OAlieXRlc1s0XTsKKwkJdTMyCXdvcmQ7CisJfQkJCWltcjsKKwlpbnQJCQlzdGF0dXM7CisKKwlhZ2VudCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2loX2FnZW50LCBtYXNrX3dvcmspOworCisJLyogc2VlIHdoYXQgd29yayB3ZSBoYXZlICovCisJc3Bpbl9sb2NrX2lycSgmc2loX2FnZW50X2xvY2spOworCWlmIChhZ2VudC0+aW1yX2NoYW5nZV9wZW5kaW5nKSB7CisJCXNpaCA9IGFnZW50LT5zaWg7CisJCS8qIGJ5dGVbMF0gZ2V0cyBvdmVyd3JpdHRlbiBhcyB3ZSB3cml0ZSAuLi4gKi8KKwkJaW1yLndvcmQgPSBjcHVfdG9fbGUzMihhZ2VudC0+aW1yIDw8IDgpOworCQlhZ2VudC0+aW1yX2NoYW5nZV9wZW5kaW5nID0gZmFsc2U7CisJfSBlbHNlCisJCXNpaCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKCZzaWhfYWdlbnRfbG9jayk7CisJaWYgKCFzaWgpCisJCXJldHVybjsKKworCS8qIHdyaXRlIHRoZSB3aG9sZSBtYXNrIC4uLiBzaW1wbGVyIHRoYW4gc3Vic2V0dGluZyBpdCAqLworCXN0YXR1cyA9IHR3bDQwMzBfaTJjX3dyaXRlKHNpaC0+bW9kdWxlLCBpbXIuYnl0ZXMsCisJCQlzaWgtPm1hc2tbaXJxX2xpbmVdLmltcl9vZmZzZXQsIHNpaC0+Ynl0ZXNfaXhyKTsKKwlpZiAoc3RhdHVzKQorCQlwcl9lcnIoInR3bDQwMzA6ICVzLCAlcyAtLT4gJWRcbiIsIF9fZnVuY19fLAorCQkJCSJ3cml0ZSIsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHR3bDQwMzBfc2loX2RvX2VkZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzaWhfYWdlbnQJKmFnZW50OworCWNvbnN0IHN0cnVjdCBzaWgJKnNpaDsKKwl1OAkJCWJ5dGVzWzZdOworCXUzMgkJCWVkZ2VfY2hhbmdlOworCWludAkJCXN0YXR1czsKKworCWFnZW50ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzaWhfYWdlbnQsIGVkZ2Vfd29yayk7CisKKwkvKiBzZWUgd2hhdCB3b3JrIHdlIGhhdmUgKi8KKwlzcGluX2xvY2tfaXJxKCZzaWhfYWdlbnRfbG9jayk7CisJZWRnZV9jaGFuZ2UgPSBhZ2VudC0+ZWRnZV9jaGFuZ2U7CisJYWdlbnQtPmVkZ2VfY2hhbmdlID0gMDs7CisJc2loID0gZWRnZV9jaGFuZ2UgPyBhZ2VudC0+c2loIDogTlVMTDsKKwlzcGluX3VubG9ja19pcnEoJnNpaF9hZ2VudF9sb2NrKTsKKwlpZiAoIXNpaCkKKwkJcmV0dXJuOworCisJLyogUmVhZCwgcmVzZXJ2aW5nIGZpcnN0IGJ5dGUgZm9yIHdyaXRlIHNjcmF0Y2guICBZZXMsIHRoaXMKKwkgKiBjb3VsZCBiZSBjYWNoZWQgZm9yIHNvbWUgc3BlZWR1cCAuLi4gYnV0IGJlIGNhcmVmdWwgYWJvdXQKKwkgKiBhbnkgcHJvY2Vzc29yIG9uIHRoZSBvdGhlciBJUlEgbGluZSwgRURSIHJlZ2lzdGVycyBhcmUKKwkgKiBzaGFyZWQuCisJICovCisJc3RhdHVzID0gdHdsNDAzMF9pMmNfcmVhZChzaWgtPm1vZHVsZSwgYnl0ZXMgKyAxLAorCQkJc2loLT5lZHJfb2Zmc2V0LCBzaWgtPmJ5dGVzX2Vkcik7CisJaWYgKHN0YXR1cykgeworCQlwcl9lcnIoInR3bDQwMzA6ICVzLCAlcyAtLT4gJWRcbiIsIF9fZnVuY19fLAorCQkJCSJyZWFkIiwgc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1vZGlmeSBvbmx5IHRoZSBiaXRzIHdlIGtub3cgbXVzdCBjaGFuZ2UgKi8KKwl3aGlsZSAoZWRnZV9jaGFuZ2UpIHsKKwkJaW50CQlpID0gZmxzKGVkZ2VfY2hhbmdlKSAtIDE7CisJCXN0cnVjdCBpcnFfZGVzYwkqZCA9IGlycV9kZXNjICsgaSArIGFnZW50LT5pcnFfYmFzZTsKKwkJaW50CQlieXRlID0gMSArIChpID4+IDIpOworCQlpbnQJCW9mZiA9IChpICYgMHgzKSAqIDI7CisKKwkJYnl0ZXNbYnl0ZV0gJj0gfigweDAzIDw8IG9mZik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZC0+bG9jayk7CisJCWlmIChkLT5zdGF0dXMgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJCWJ5dGVzW2J5dGVdIHw9IEJJVChvZmYgKyAxKTsKKwkJaWYgKGQtPnN0YXR1cyAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJCWJ5dGVzW2J5dGVdIHw9IEJJVChvZmYgKyAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkLT5sb2NrKTsKKworCQllZGdlX2NoYW5nZSAmPSB+QklUKGkpOworCX0KKworCS8qIFdyaXRlICovCisJc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGUoc2loLT5tb2R1bGUsIGJ5dGVzLAorCQkJc2loLT5lZHJfb2Zmc2V0LCBzaWgtPmJ5dGVzX2Vkcik7CisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCJ0d2w0MDMwOiAlcywgJXMgLS0+ICVkXG4iLCBfX2Z1bmNfXywKKwkJCQkid3JpdGUiLCBzdGF0dXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQWxsIGlycV9jaGlwIG1ldGhvZHMgZ2V0IGlzc3VlZCBmcm9tIGNvZGUgaG9sZGluZyBpcnFfZGVzY1tpcnFdLmxvY2ssCisgKiB3aGljaCBjYW4ndCBwZXJmb3JtIHRoZSB1bmRlcmx5aW5nIEkyQyBvcGVyYXRpb25zIChiZWNhdXNlIHRoZXkgc2xlZXApLgorICogU28gd2UgbXVzdCBoYW5kIHRoZW0gb2ZmIHRvIGEgdGhyZWFkICh3b3JrcXVldWUpIGFuZCBjb3BlIHdpdGggYXN5bmNoCisgKiBjb21wbGV0aW9uLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgc29tZSByZS1vcmRlcmluZywgb2YgdGhlc2UgcmVxdWVzdHMuCisgKi8KKworc3RhdGljIHZvaWQgdHdsNDAzMF9zaWhfbWFzayh1bnNpZ25lZCBpcnEpCit7CisJc3RydWN0IHNpaF9hZ2VudCAqc2loID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNpaF9hZ2VudF9sb2NrLCBmbGFncyk7CisJc2loLT5pbXIgfD0gQklUKGlycSAtIHNpaC0+aXJxX2Jhc2UpOworCXNpaC0+aW1yX2NoYW5nZV9wZW5kaW5nID0gdHJ1ZTsKKwlxdWV1ZV93b3JrKHdxLCAmc2loLT5tYXNrX3dvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNpaF9hZ2VudF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHR3bDQwMzBfc2loX3VubWFzayh1bnNpZ25lZCBpcnEpCit7CisJc3RydWN0IHNpaF9hZ2VudCAqc2loID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNpaF9hZ2VudF9sb2NrLCBmbGFncyk7CisJc2loLT5pbXIgJj0gfkJJVChpcnEgLSBzaWgtPmlycV9iYXNlKTsKKwlzaWgtPmltcl9jaGFuZ2VfcGVuZGluZyA9IHRydWU7CisJcXVldWVfd29yayh3cSwgJnNpaC0+bWFza193b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaWhfYWdlbnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHR3bDQwMzBfc2loX3NldF90eXBlKHVuc2lnbmVkIGlycSwgdW5zaWduZWQgdHJpZ2dlcikKK3sKKwlzdHJ1Y3Qgc2loX2FnZW50ICpzaWggPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHJpZ2dlciAmIH4oSVJRX1RZUEVfRURHRV9GQUxMSU5HIHwgSVJRX1RZUEVfRURHRV9SSVNJTkcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzaWhfYWdlbnRfbG9jaywgZmxhZ3MpOworCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgIT0gdHJpZ2dlcikgeworCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9UWVBFX1NFTlNFX01BU0s7CisJCWRlc2MtPnN0YXR1cyB8PSB0cmlnZ2VyOworCQlzaWgtPmVkZ2VfY2hhbmdlIHw9IEJJVChpcnEgLSBzaWgtPmlycV9iYXNlKTsKKwkJcXVldWVfd29yayh3cSwgJnNpaC0+ZWRnZV93b3JrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2loX2FnZW50X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0d2w0MDMwX3NpaF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAidHdsNDAzMCIsCisJLm1hc2sJCT0gdHdsNDAzMF9zaWhfbWFzaywKKwkudW5tYXNrCQk9IHR3bDQwMzBfc2loX3VubWFzaywKKwkuc2V0X3R5cGUJPSB0d2w0MDMwX3NpaF9zZXRfdHlwZSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNpaF9yZWFkX2lzcihjb25zdCBzdHJ1Y3Qgc2loICpzaWgpCit7CisJaW50IHN0YXR1czsKKwl1bmlvbiB7CisJCXU4IGJ5dGVzWzRdOworCQl1MzIgd29yZDsKKwl9IGlzcjsKKworCS8qIEZJWE1FIG5lZWQgcmV0cnktb24tZXJyb3IgLi4uICovCisKKwlpc3Iud29yZCA9IDA7CisJc3RhdHVzID0gdHdsNDAzMF9pMmNfcmVhZChzaWgtPm1vZHVsZSwgaXNyLmJ5dGVzLAorCQkJc2loLT5tYXNrW2lycV9saW5lXS5pc3Jfb2Zmc2V0LCBzaWgtPmJ5dGVzX2l4cik7CisKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogbGUzMl90b19jcHUoaXNyLndvcmQpOworfQorCisvKgorICogR2VuZXJpYyBoYW5kbGVyIGZvciBTSUggaW50ZXJydXB0cyAuLi4gd2UgImtub3ciIHRoaXMgaXMgY2FsbGVkCisgKiBpbiB0YXNrIGNvbnRleHQsIHdpdGggSVJRcyBlbmFibGVkLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfdHdsNDAzMF9zaWgodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHNpaF9hZ2VudCAqYWdlbnQgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwljb25zdCBzdHJ1Y3Qgc2loICpzaWggPSBhZ2VudC0+c2loOworCWludCBpc3I7CisKKwkvKiByZWFkaW5nIElTUiBhY2tzIHRoZSBJUlFzLCB1c2luZyBjbGVhci1vbi1yZWFkIG1vZGUgKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJaXNyID0gc2loX3JlYWRfaXNyKHNpaCk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCWlmIChpc3IgPCAwKSB7CisJCXByX2VycigidHdsNDAzMDogJXMgU0lILCByZWFkIElTUiBlcnJvciAlZFxuIiwKKwkJCXNpaC0+bmFtZSwgaXNyKTsKKwkJLyogUkVWSVNJVDogIHJlY292ZXI7IGV2ZW50dWFsbHkgbWFzayBpdCBhbGwsIGV0YyAqLworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKGlzcikgeworCQlpcnEgPSBmbHMoaXNyKTsKKwkJaXJxLS07CisJCWlzciAmPSB+QklUKGlycSk7CisKKwkJaWYgKGlycSA8IHNpaC0+Yml0cykKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShhZ2VudC0+aXJxX2Jhc2UgKyBpcnEpOworCQllbHNlCisJCQlwcl9lcnIoInR3bDQwMzA6ICVzIFNJSCwgaW52YWxpZCBJU1IgYml0ICVkXG4iLAorCQkJCXNpaC0+bmFtZSwgaXJxKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB0d2w0MDMwX2lycV9uZXh0OworCisvKiByZXR1cm5zIHRoZSBmaXJzdCBJUlEgdXNlZCBieSB0aGlzIFNJSCBiYW5rLAorICogb3IgbmVnYXRpdmUgZXJybm8KKyAqLworaW50IHR3bDQwMzBfc2loX3NldHVwKGludCBtb2R1bGUpCit7CisJaW50CQkJc2loX21vZDsKKwljb25zdCBzdHJ1Y3Qgc2loCSpzaWggPSBOVUxMOworCXN0cnVjdCBzaWhfYWdlbnQJKmFnZW50OworCWludAkJCWksIGlycTsKKwlpbnQJCQlzdGF0dXMgPSAtRUlOVkFMOworCXVuc2lnbmVkCQlpcnFfYmFzZSA9IHR3bDQwMzBfaXJxX25leHQ7CisKKwkvKiBvbmx5IHN1cHBvcnQgbW9kdWxlcyB3aXRoIHN0YW5kYXJkIGNsZWFyLW9uLXJlYWQgZm9yIG5vdyAqLworCWZvciAoc2loX21vZCA9IDAsIHNpaCA9IHNpaF9tb2R1bGVzOworCQkJc2loX21vZCA8IEFSUkFZX1NJWkUoc2loX21vZHVsZXMpOworCQkJc2loX21vZCsrLCBzaWgrKykgeworCQlpZiAoc2loLT5tb2R1bGUgPT0gbW9kdWxlICYmIHNpaC0+c2V0X2NvcikgeworCQkJaWYgKCFXQVJOKChpcnFfYmFzZSArIHNpaC0+Yml0cykgPiBOUl9JUlFTLAorCQkJCQkiaXJxICVkIGZvciAlcyB0b28gYmlnXG4iLAorCQkJCQlpcnFfYmFzZSArIHNpaC0+Yml0cywKKwkJCQkJc2loLT5uYW1lKSkKKwkJCQlzdGF0dXMgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlhZ2VudCA9IGt6YWxsb2Moc2l6ZW9mICphZ2VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZ2VudCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGF0dXMgPSAwOworCisJYWdlbnQtPmlycV9iYXNlID0gaXJxX2Jhc2U7CisJYWdlbnQtPnNpaCA9IHNpaDsKKwlhZ2VudC0+aW1yID0gfjA7CisJSU5JVF9XT1JLKCZhZ2VudC0+bWFza193b3JrLCB0d2w0MDMwX3NpaF9kb19tYXNrKTsKKwlJTklUX1dPUksoJmFnZW50LT5lZGdlX3dvcmssIHR3bDQwMzBfc2loX2RvX2VkZ2UpOworCisJZm9yIChpID0gMDsgaSA8IHNpaC0+Yml0czsgaSsrKSB7CisJCWlycSA9IGlycV9iYXNlICsgaTsKKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmdHdsNDAzMF9zaWhfaXJxX2NoaXAsCisJCQkJaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBhZ2VudCk7CisJCWFjdGl2YXRlX2lycShpcnEpOworCX0KKworCXN0YXR1cyA9IGlycV9iYXNlOworCXR3bDQwMzBfaXJxX25leHQgKz0gaTsKKworCS8qIHJlcGxhY2UgZ2VuZXJpYyBQSUggaGFuZGxlciAoaGFuZGxlX3NpbXBsZV9pcnEpICovCisJaXJxID0gc2loX21vZCArIHR3bDQwMzBfaXJxX2Jhc2U7CisJc2V0X2lycV9kYXRhKGlycSwgYWdlbnQpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSwgaGFuZGxlX3R3bDQwMzBfc2loKTsKKworCXByX2luZm8oInR3bDQwMzA6ICVzIChpcnEgJWQpIGNoYWluaW5nIElSUXMgJWQuLiVkXG4iLCBzaWgtPm5hbWUsCisJCQlpcnEsIGlycV9iYXNlLCB0d2w0MDMwX2lycV9uZXh0IC0gMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBGSVhNRSBuZWVkIGEgY2FsbCB0byByZXZlcnNlIHR3bDQwMzBfc2loX3NldHVwKCkgLi4uICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRklYTUUgcGFzcyBpbiB3aGljaCBpbnRlcnJ1cHQgbGluZSB3ZSdsbCB1c2UgLi4uICovCisjZGVmaW5lIHR3bF9pcnFfbGluZQkwCisKK2ludCB0d2xfaW5pdF9pcnEoaW50IGlycV9udW0sIHVuc2lnbmVkIGlycV9iYXNlLCB1bnNpZ25lZCBpcnFfZW5kKQoreworCXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAJdHdsNDAzMF9pcnFfY2hpcDsKKworCWludAkJCXN0YXR1czsKKwlpbnQJCQlpOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKKworCS8qCisJICogTWFzayBhbmQgY2xlYXIgYWxsIFRXTDQwMzAgaW50ZXJydXB0cyBzaW5jZSBpbml0aWFsbHkgd2UgZG8KKwkgKiBub3QgaGF2ZSBhbnkgVFdMNDAzMCBtb2R1bGUgaW50ZXJydXB0IGhhbmRsZXJzIHByZXNlbnQKKwkgKi8KKwlzdGF0dXMgPSB0d2w0MDMwX2luaXRfc2loX21vZHVsZXModHdsX2lycV9saW5lKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInR3bDQwMzAtaXJxY2hpcCIpOworCWlmICghd3EpIHsKKwkJcHJfZXJyKCJ0d2w0MDMwOiB3b3JrcXVldWUgRkFJTFxuIik7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCisJdHdsNDAzMF9pcnFfYmFzZSA9IGlycV9iYXNlOworCisJLyogaW5zdGFsbCBhbiBpcnEgaGFuZGxlciBmb3IgZWFjaCBvZiB0aGUgU0lIIG1vZHVsZXM7CisJICogY2xvbmUgZHVtbXkgaXJxX2NoaXAgc2luY2UgUElIIGNhbid0ICpkbyogYW55dGhpbmcKKwkgKi8KKwl0d2w0MDMwX2lycV9jaGlwID0gZHVtbXlfaXJxX2NoaXA7CisJdHdsNDAzMF9pcnFfY2hpcC5uYW1lID0gInR3bDQwMzAiOworCisJdHdsNDAzMF9zaWhfaXJxX2NoaXAuYWNrID0gZHVtbXlfaXJxX2NoaXAuYWNrOworCisJZm9yIChpID0gaXJxX2Jhc2U7IGkgPCBpcnFfZW5kOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZ0d2w0MDMwX2lycV9jaGlwLAorCQkJCWhhbmRsZV9zaW1wbGVfaXJxKTsKKwkJYWN0aXZhdGVfaXJxKGkpOworCX0KKwl0d2w0MDMwX2lycV9uZXh0ID0gaTsKKwlwcl9pbmZvKCJ0d2w0MDMwOiAlcyAoaXJxICVkKSBjaGFpbmluZyBJUlFzICVkLi4lZFxuIiwgIlBJSCIsCisJCQlpcnFfbnVtLCBpcnFfYmFzZSwgdHdsNDAzMF9pcnFfbmV4dCAtIDEpOworCisJLyogLi4uIGFuZCB0aGUgUFdSX0lOVCBtb2R1bGUgLi4uICovCisJc3RhdHVzID0gdHdsNDAzMF9zaWhfc2V0dXAoVFdMNDAzMF9NT0RVTEVfSU5UKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcl9lcnIoInR3bDQwMzA6IHNpaF9zZXR1cCBQV1IgSU5UIC0tPiAlZFxuIiwgc3RhdHVzKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIGluc3RhbGwgYW4gaXJxIGhhbmRsZXIgdG8gZGVtdWx0aXBsZXggdGhlIFRXTDQwMzAgaW50ZXJydXB0ICovCisJdGFzayA9IHN0YXJ0X3R3bDQwMzBfaXJxX3RocmVhZChpcnFfbnVtKTsKKwlpZiAoIXRhc2spIHsKKwkJcHJfZXJyKCJ0d2w0MDMwOiBpcnEgdGhyZWFkIEZBSUxcbiIpOworCQlzdGF0dXMgPSAtRVNSQ0g7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzZXRfaXJxX2RhdGEoaXJxX251bSwgdGFzayk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxX251bSwgaGFuZGxlX3R3bDQwMzBfcGloKTsKKworCXJldHVybiBzdGF0dXM7CisKK2ZhaWw6CisJZm9yIChpID0gaXJxX2Jhc2U7IGkgPCBpcnFfZW5kOyBpKyspCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCBOVUxMLCBOVUxMKTsKKwlkZXN0cm95X3dvcmtxdWV1ZSh3cSk7CisJd3EgPSBOVUxMOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCB0d2xfZXhpdF9pcnEodm9pZCkKK3sKKwkvKiBGSVhNRSB1bmRvIHR3bF9pbml0X2lycSgpICovCisJaWYgKHR3bDQwMzBfaXJxX2Jhc2UpIHsKKwkJcHJfZXJyKCJ0d2w0MDMwOiBjYW4ndCB5ZXQgY2xlYW4gdXAgSVJRcz9cbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwppbmRleCAyNWE3YTVkLi4wZDQ3ZmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKQEAgLTE4Myw2ICsxODMsOSBAQAogCQkJKHdtODM1MC0+cmVnX2NhY2hlW2ldICYgfndtODM1MF9yZWdfaW9fbWFwW2ldLndyaXRhYmxlKQogCQkJfCBzcmNbaSAtIHJlZ107CiAKKwkJLyogRG9uJ3Qgc3RvcmUgdm9sYXRpbGUgYml0cyAqLworCQl3bTgzNTAtPnJlZ19jYWNoZVtpXSAmPSB+d204MzUwX3JlZ19pb19tYXBbaV0udm9sOworCiAJCXNyY1tpIC0gcmVnXSA9IGNwdV90b19iZTE2KHNyY1tpIC0gcmVnXSk7CiAJfQogCkBAIC0xMTIwLDYgKzExMjMsNyBAQAogCQkJfQogCQkJdmFsdWUgPSBiZTE2X3RvX2NwdSh2YWx1ZSk7CiAJCQl2YWx1ZSAmPSB3bTgzNTBfcmVnX2lvX21hcFtpXS5yZWFkYWJsZTsKKwkJCXZhbHVlICY9IH53bTgzNTBfcmVnX2lvX21hcFtpXS52b2w7CiAJCQl3bTgzNTAtPnJlZ19jYWNoZVtpXSA9IHZhbHVlOwogCQl9IGVsc2UKIAkJCXdtODM1MC0+cmVnX2NhY2hlW2ldID0gcmVnX21hcFtpXTsKQEAgLTExMjgsNyArMTEzMiw2IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9jcmVhdGVfY2FjaGUpOwogCiAvKgogICogUmVnaXN0ZXIgYSBjbGllbnQgZGV2aWNlLiAgVGhpcyBpcyBub24tZmF0YWwgc2luY2UgdGhlcmUgaXMgbm8gbmVlZCB0bwpAQCAtMTIxNyw3ICsxMjIwLDcgQEAKIAogCW11dGV4X2luaXQoJndtODM1MC0+aXJxX211dGV4KTsKIAlJTklUX1dPUksoJndtODM1MC0+aXJxX3dvcmssIHdtODM1MF9pcnFfd29ya2VyKTsKLQlpZiAoaXJxICE9IE5PX0lSUSkgeworCWlmIChpcnEpIHsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB3bTgzNTBfaXJxLCAwLAogCQkJCSAgIndtODM1MCIsIHdtODM1MCk7CiAJCWlmIChyZXQgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCBlZmQzYWEwLi45NDk0NDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMTQ1LDYgKzE0NSw3IEBACiAJZGVwZW5kcyBvbiBORVdfTEVEUwogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gU0VSSU9fSTgwNDIKKwlkZXBlbmRzIG9uIFJGS0lMTAogCXNlbGVjdCBBQ1BJX1dNSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIG5ld2VyIEFjZXIgKGFuZCBXaXN0cm9uKSBsYXB0b3BzLiBJdCBhZGRzCkBAIC0yNDUsNiArMjQ2LDE3IEBACiAKIAkgIElmIHlvdSBoYXZlIGFuIE1TSSBTMjcwIGxhcHRvcCwgc2F5IFkgb3IgTSBoZXJlLgogCitjb25maWcgUEFOQVNPTklDX0xBUFRPUAorCXRyaXN0YXRlICJQYW5hc29uaWMgTGFwdG9wIEV4dHJhcyIKKwlkZXBlbmRzIG9uIFg4NiAmJiBJTlBVVCAmJiBBQ1BJCisgICAgICAgIGRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYWNjZXNzIHRvIGJhY2tsaWdodCBjb250cm9sIGFuZCBob3RrZXlzCisJICBvbiBQYW5hc29uaWMgTGV0J3MgTm90ZSBsYXB0b3BzLgorCisJICBJZiB5b3UgaGF2ZSBhIFBhbmFzb25pYyBMZXQncyBub3RlIGxhcHRvcCAoc3VjaCBhcyB0aGUgUjEoTiB2YXJpYW50KSwKKwkgIFIyLCBSMywgUjUsIFQyLCBXMiBhbmQgWTIgc2VyaWVzKSwgc2F5IFkuCisKIGNvbmZpZyBDT01QQUxfTEFQVE9QCiAJdHJpc3RhdGUgIkNvbXBhbCBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggYzZjMTNmNi4uOTA5ZTI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX1NPTllfTEFQVE9QKQkrPSBzb255LWxhcHRvcC5vCiBvYmotJChDT05GSUdfVEhJTktQQURfQUNQSSkJKz0gdGhpbmtwYWRfYWNwaS5vCiBvYmotJChDT05GSUdfRlVKSVRTVV9MQVBUT1ApCSs9IGZ1aml0c3UtbGFwdG9wLm8KK29iai0kKENPTkZJR19QQU5BU09OSUNfTEFQVE9QKQkrPSBwYW5hc29uaWMtbGFwdG9wLm8KIG9iai0kKENPTkZJR19FRVBST01fOTNDWDYpCSs9IGVlcHJvbV85M2N4Ni5vCiBvYmotJChDT05GSUdfSU5URUxfTUVOTE9XKQkrPSBpbnRlbF9tZW5sb3cubwogb2JqLSQoQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUykgKz0gZW5jbG9zdXJlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9hY2VyLXdtaS5jIGIvZHJpdmVycy9taXNjL2FjZXItd21pLmMKaW5kZXggZDhiMGQzMi4uMDUzMmEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9taXNjL2FjZXItd21pLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaTgwNDIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgpAQCAtMTIzLDIxICsxMjUsMTUgQEAKIAogc3RhdGljIGludCBtYXhfYnJpZ2h0bmVzcyA9IDB4RjsKIAotc3RhdGljIGludCB3aXJlbGVzcyA9IC0xOwotc3RhdGljIGludCBibHVldG9vdGggPSAtMTsKIHN0YXRpYyBpbnQgbWFpbGxlZCA9IC0xOwogc3RhdGljIGludCBicmlnaHRuZXNzID0gLTE7CiBzdGF0aWMgaW50IHRocmVlZyA9IC0xOwogc3RhdGljIGludCBmb3JjZV9zZXJpZXM7CiAKIG1vZHVsZV9wYXJhbShtYWlsbGVkLCBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHdpcmVsZXNzLCBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKGJsdWV0b290aCwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShicmlnaHRuZXNzLCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHRocmVlZywgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShmb3JjZV9zZXJpZXMsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHdpcmVsZXNzLCAiU2V0IGluaXRpYWwgc3RhdGUgb2YgV2lyZWxlc3MgaGFyZHdhcmUiKTsKLU1PRFVMRV9QQVJNX0RFU0MoYmx1ZXRvb3RoLCAiU2V0IGluaXRpYWwgc3RhdGUgb2YgQmx1ZXRvb3RoIGhhcmR3YXJlIik7CiBNT0RVTEVfUEFSTV9ERVNDKG1haWxsZWQsICJTZXQgaW5pdGlhbCBzdGF0ZSBvZiBNYWlsIExFRCIpOwogTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzLCAiU2V0IGluaXRpYWwgTENEIGJhY2tsaWdodCBicmlnaHRuZXNzIik7CiBNT0RVTEVfUEFSTV9ERVNDKHRocmVlZywgIlNldCBpbml0aWFsIHN0YXRlIG9mIDNHIGhhcmR3YXJlIik7CkBAIC0xNDUsOCArMTQxLDYgQEAKIAogc3RydWN0IGFjZXJfZGF0YSB7CiAJaW50IG1haWxsZWQ7Ci0JaW50IHdpcmVsZXNzOwotCWludCBibHVldG9vdGg7CiAJaW50IHRocmVlZzsKIAlpbnQgYnJpZ2h0bmVzczsKIH07CkBAIC0xNTcsNiArMTUxLDkgQEAKIAl1MzIgd21pZF9kZXZpY2VzOwogfTsKIAorc3RhdGljIHN0cnVjdCByZmtpbGwgKndpcmVsZXNzX3Jma2lsbDsKK3N0YXRpYyBzdHJ1Y3QgcmZraWxsICpibHVldG9vdGhfcmZraWxsOworCiAvKiBFYWNoIGxvdy1sZXZlbCBpbnRlcmZhY2UgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZm9sbG93aW5nICovCiBzdHJ1Y3Qgd21pX2ludGVyZmFjZSB7CiAJLyogVGhlIFdNSSBkZXZpY2UgdHlwZSAqLwpAQCAtNDc2LDcgKzQ3Myw3IEBACiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIEFFX0JBRF9BRERSRVNTOworCQlyZXR1cm4gQUVfRVJST1I7CiAJfQogCXJldHVybiBBRV9PSzsKIH0KQEAgLTUxNCw3ICs1MTEsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAlkZWZhdWx0OgotCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAKIAkvKiBBY3R1YWxseSBkbyB0aGUgc2V0ICovCkBAIC02ODksNyArNjg2LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJZGVmYXVsdDoKLQkJcmV0dXJuIEFFX0JBRF9BRERSRVNTOworCQlyZXR1cm4gQUVfRVJST1I7CiAJfQogCXN0YXR1cyA9IFdNSV9leGVjdXRlX3UzMihtZXRob2RfaWQsIDAsICZyZXN1bHQpOwogCkBAIC03MzUsNyArNzMyLDcgQEAKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAJcmV0dXJuIFdNSV9leGVjdXRlX3UzMihtZXRob2RfaWQsICh1MzIpdmFsdWUsIE5VTEwpOwogfQpAQCAtNzg1LDcgKzc4Miw3IEBACiAKIHN0YXRpYyBhY3BpX3N0YXR1cyBnZXRfdTMyKHUzMiAqdmFsdWUsIHUzMiBjYXApCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQkFEX0FERFJFU1M7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfRVJST1I7CiAKIAlzd2l0Y2ggKGludGVyZmFjZS0+dHlwZSkgewogCWNhc2UgQUNFUl9BTVcwOgpAQCAtODQ2LDggKzg0Myw2IEBACiAJICogY2FwYWJpbGl0eSBpc24ndCBhdmFpbGFibGUgb24gdGhlIGdpdmVuIGludGVyZmFjZQogCSAqLwogCXNldF91MzIobWFpbGxlZCwgQUNFUl9DQVBfTUFJTExFRCk7Ci0Jc2V0X3UzMih3aXJlbGVzcywgQUNFUl9DQVBfV0lSRUxFU1MpOwotCXNldF91MzIoYmx1ZXRvb3RoLCBBQ0VSX0NBUF9CTFVFVE9PVEgpOwogCXNldF91MzIodGhyZWVnLCBBQ0VSX0NBUF9USFJFRUcpOwogCXNldF91MzIoYnJpZ2h0bmVzcywgQUNFUl9DQVBfQlJJR0hUTkVTUyk7CiB9CkBAIC05MzMsNDAgKzkyOCwxMzUgQEAKIH0KIAogLyoKLSAqIFJlYWQvIHdyaXRlIGJvb2wgc3lzZnMgbWFjcm8KKyAqIFJma2lsbCBkZXZpY2VzCiAgKi8KLSNkZWZpbmUgc2hvd19zZXRfYm9vbCh2YWx1ZSwgY2FwKSBcCi1zdGF0aWMgc3NpemVfdCBcCi1zaG93X2Jvb2xfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCi0JY2hhciAqYnVmKSBcCi17IFwKLQl1MzIgcmVzdWx0OyBcCi0JYWNwaV9zdGF0dXMgc3RhdHVzID0gZ2V0X3UzMigmcmVzdWx0LCBjYXApOyBcCi0JaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSBcCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCByZXN1bHQpOyBcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiUmVhZCBlcnJvclxuIik7IFwKLX0gXAotXAotc3RhdGljIHNzaXplX3QgXAotc2V0X2Jvb2xfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCi0JY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKLXsgXAotCXUzMiB0bXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsgXAotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IHNldF91MzIodG1wLCBjYXApOyBcCi0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgXAotCQkJcmV0dXJuIC1FSU5WQUw7IFwKLQlyZXR1cm4gY291bnQ7IFwKLX0gXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTyB8IFNfSVdVU1IsIFwKLQlzaG93X2Jvb2xfIyN2YWx1ZSwgc2V0X2Jvb2xfIyN2YWx1ZSk7CitzdGF0aWMgdm9pZCBhY2VyX3Jma2lsbF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKTsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhhY2VyX3Jma2lsbF93b3JrLCBhY2VyX3Jma2lsbF91cGRhdGUpOworc3RhdGljIHZvaWQgYWNlcl9yZmtpbGxfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKK3sKKwl1MzIgc3RhdGU7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi1zaG93X3NldF9ib29sKHdpcmVsZXNzLCBBQ0VSX0NBUF9XSVJFTEVTUyk7Ci1zaG93X3NldF9ib29sKGJsdWV0b290aCwgQUNFUl9DQVBfQkxVRVRPT1RIKTsKLXNob3dfc2V0X2Jvb2wodGhyZWVnLCBBQ0VSX0NBUF9USFJFRUcpOworCXN0YXR1cyA9IGdldF91MzIoJnN0YXRlLCBBQ0VSX0NBUF9XSVJFTEVTUyk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlyZmtpbGxfZm9yY2Vfc3RhdGUod2lyZWxlc3NfcmZraWxsLCBzdGF0ZSA/CisJCQlSRktJTExfU1RBVEVfVU5CTE9DS0VEIDogUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCk7CisKKwlpZiAoaGFzX2NhcChBQ0VSX0NBUF9CTFVFVE9PVEgpKSB7CisJCXN0YXR1cyA9IGdldF91MzIoJnN0YXRlLCBBQ0VSX0NBUF9CTFVFVE9PVEgpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCQlyZmtpbGxfZm9yY2Vfc3RhdGUoYmx1ZXRvb3RoX3Jma2lsbCwgc3RhdGUgPworCQkJCVJGS0lMTF9TVEFURV9VTkJMT0NLRUQgOgorCQkJCVJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQpOworCX0KKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWNlcl9yZmtpbGxfd29yaywgcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikpOworfQorCitzdGF0aWMgaW50IGFjZXJfcmZraWxsX3NldCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTMyICpjYXAgPSBkYXRhOworCXN0YXR1cyA9IHNldF91MzIoKHUzMikgKHN0YXRlID09IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpLCAqY2FwKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJma2lsbCAqIGFjZXJfcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKK2VudW0gcmZraWxsX3R5cGUgdHlwZSwgY2hhciAqbmFtZSwgdTMyIGNhcCkKK3sKKwlpbnQgZXJyOworCXUzMiBzdGF0ZTsKKwl1MzIgKmRhdGE7CisJc3RydWN0IHJma2lsbCAqcmZraWxsX2RldjsKKworCXJma2lsbF9kZXYgPSByZmtpbGxfYWxsb2NhdGUoZGV2LCB0eXBlKTsKKwlpZiAoIXJma2lsbF9kZXYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXJma2lsbF9kZXYtPm5hbWUgPSBuYW1lOworCWdldF91MzIoJnN0YXRlLCBjYXApOworCXJma2lsbF9kZXYtPnN0YXRlID0gc3RhdGUgPyBSRktJTExfU1RBVEVfVU5CTE9DS0VEIDoKKwkJUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwlkYXRhID0ga3phbGxvYyhzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCXJma2lsbF9mcmVlKHJma2lsbF9kZXYpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisJKmRhdGEgPSBjYXA7CisJcmZraWxsX2Rldi0+ZGF0YSA9IGRhdGE7CisJcmZraWxsX2Rldi0+dG9nZ2xlX3JhZGlvID0gYWNlcl9yZmtpbGxfc2V0OworCXJma2lsbF9kZXYtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOworCisJZXJyID0gcmZraWxsX3JlZ2lzdGVyKHJma2lsbF9kZXYpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUocmZraWxsX2Rldi0+ZGF0YSk7CisJCXJma2lsbF9mcmVlKHJma2lsbF9kZXYpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKwlyZXR1cm4gcmZraWxsX2RldjsKK30KKworc3RhdGljIGludCBhY2VyX3Jma2lsbF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl3aXJlbGVzc19yZmtpbGwgPSBhY2VyX3Jma2lsbF9yZWdpc3RlcihkZXYsIFJGS0lMTF9UWVBFX1dMQU4sCisJCSJhY2VyLXdpcmVsZXNzIiwgQUNFUl9DQVBfV0lSRUxFU1MpOworCWlmIChJU19FUlIod2lyZWxlc3NfcmZraWxsKSkKKwkJcmV0dXJuIFBUUl9FUlIod2lyZWxlc3NfcmZraWxsKTsKKworCWlmIChoYXNfY2FwKEFDRVJfQ0FQX0JMVUVUT09USCkpIHsKKwkJYmx1ZXRvb3RoX3Jma2lsbCA9IGFjZXJfcmZraWxsX3JlZ2lzdGVyKGRldiwKKwkJCVJGS0lMTF9UWVBFX0JMVUVUT09USCwgImFjZXItYmx1ZXRvb3RoIiwKKwkJCUFDRVJfQ0FQX0JMVUVUT09USCk7CisJCWlmIChJU19FUlIoYmx1ZXRvb3RoX3Jma2lsbCkpIHsKKwkJCWtmcmVlKHdpcmVsZXNzX3Jma2lsbC0+ZGF0YSk7CisJCQlyZmtpbGxfdW5yZWdpc3Rlcih3aXJlbGVzc19yZmtpbGwpOworCQkJcmV0dXJuIFBUUl9FUlIoYmx1ZXRvb3RoX3Jma2lsbCk7CisJCX0KKwl9CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFjZXJfcmZraWxsX3dvcmssIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY2VyX3Jma2lsbF9leGl0KHZvaWQpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhY2VyX3Jma2lsbF93b3JrKTsKKwlrZnJlZSh3aXJlbGVzc19yZmtpbGwtPmRhdGEpOworCXJma2lsbF91bnJlZ2lzdGVyKHdpcmVsZXNzX3Jma2lsbCk7CisJaWYgKGhhc19jYXAoQUNFUl9DQVBfQkxVRVRPT1RIKSkgeworCQlrZnJlZSh3aXJlbGVzc19yZmtpbGwtPmRhdGEpOworCQlyZmtpbGxfdW5yZWdpc3RlcihibHVldG9vdGhfcmZraWxsKTsKKwl9CisJcmV0dXJuOworfQogCiAvKgotICogUmVhZCBpbnRlcmZhY2Ugc3lzZnMgbWFjcm8KKyAqIHN5c2ZzIGludGVyZmFjZQogICovCitzdGF0aWMgc3NpemVfdCBzaG93X2Jvb2xfdGhyZWVnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXUzMiByZXN1bHQ7IFwKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBnZXRfdTMyKCZyZXN1bHQsIEFDRVJfQ0FQX1RIUkVFRyk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcmVzdWx0KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICJSZWFkIGVycm9yXG4iKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2Jvb2xfdGhyZWVnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdTMyIHRtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IHNldF91MzIodG1wLCBBQ0VSX0NBUF9USFJFRUcpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodGhyZWVnLCBTX0lXVUdPIHwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYm9vbF90aHJlZWcsCisJc2V0X2Jvb2xfdGhyZWVnKTsKKwogc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljaGFyICpidWYpCiB7CkBAIC0xMDI2LDcgKzExMTYsOSBAQAogCQkJZ290byBlcnJvcl9icmlnaHRuZXNzOwogCX0KIAotCXJldHVybiAwOworCWVyciA9IGFjZXJfcmZraWxsX2luaXQoJmRldmljZS0+ZGV2KTsKKworCXJldHVybiBlcnI7CiAKIGVycm9yX2JyaWdodG5lc3M6CiAJYWNlcl9sZWRfZXhpdCgpOwpAQCAtMTA0MCw2ICsxMTMyLDggQEAKIAkJYWNlcl9sZWRfZXhpdCgpOwogCWlmIChoYXNfY2FwKEFDRVJfQ0FQX0JSSUdIVE5FU1MpKQogCQlhY2VyX2JhY2tsaWdodF9leGl0KCk7CisKKwlhY2VyX3Jma2lsbF9leGl0KCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNTIsMTYgKzExNDYsNiBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoaGFzX2NhcChBQ0VSX0NBUF9XSVJFTEVTUykpIHsKLQkJZ2V0X3UzMigmdmFsdWUsIEFDRVJfQ0FQX1dJUkVMRVNTKTsKLQkJZGF0YS0+d2lyZWxlc3MgPSB2YWx1ZTsKLQl9Ci0KLQlpZiAoaGFzX2NhcChBQ0VSX0NBUF9CTFVFVE9PVEgpKSB7Ci0JCWdldF91MzIoJnZhbHVlLCBBQ0VSX0NBUF9CTFVFVE9PVEgpOwotCQlkYXRhLT5ibHVldG9vdGggPSB2YWx1ZTsKLQl9Ci0KIAlpZiAoaGFzX2NhcChBQ0VSX0NBUF9NQUlMTEVEKSkgewogCQlnZXRfdTMyKCZ2YWx1ZSwgQUNFUl9DQVBfTUFJTExFRCk7CiAJCWRhdGEtPm1haWxsZWQgPSB2YWx1ZTsKQEAgLTEwODIsMTUgKzExNjYsNiBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoaGFzX2NhcChBQ0VSX0NBUF9XSVJFTEVTUykpCi0JCXNldF91MzIoZGF0YS0+d2lyZWxlc3MsIEFDRVJfQ0FQX1dJUkVMRVNTKTsKLQotCWlmIChoYXNfY2FwKEFDRVJfQ0FQX0JMVUVUT09USCkpCi0JCXNldF91MzIoZGF0YS0+Ymx1ZXRvb3RoLCBBQ0VSX0NBUF9CTFVFVE9PVEgpOwotCi0JaWYgKGhhc19jYXAoQUNFUl9DQVBfVEhSRUVHKSkKLQkJc2V0X3UzMihkYXRhLT50aHJlZWcsIEFDRVJfQ0FQX1RIUkVFRyk7Ci0KIAlpZiAoaGFzX2NhcChBQ0VSX0NBUF9NQUlMTEVEKSkKIAkJc2V0X3UzMihkYXRhLT5tYWlsbGVkLCBBQ0VSX0NBUF9NQUlMTEVEKTsKIApAQCAtMTExNSwxMiArMTE5MCw2IEBACiAKIHN0YXRpYyBpbnQgcmVtb3ZlX3N5c2ZzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKLQlpZiAoaGFzX2NhcChBQ0VSX0NBUF9XSVJFTEVTUykpCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl93aXJlbGVzcyk7Ci0KLQlpZiAoaGFzX2NhcChBQ0VSX0NBUF9CTFVFVE9PVEgpKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfYmx1ZXRvb3RoKTsKLQogCWlmIChoYXNfY2FwKEFDRVJfQ0FQX1RIUkVFRykpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl90aHJlZWcpOwogCkBAIC0xMTMzLDIwICsxMjAyLDYgQEAKIHsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCWlmIChoYXNfY2FwKEFDRVJfQ0FQX1dJUkVMRVNTKSkgewotCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFjZXJfcGxhdGZvcm1fZGV2aWNlLT5kZXYsCi0JCQkmZGV2X2F0dHJfd2lyZWxlc3MpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBlcnJvcl9zeXNmczsKLQl9Ci0KLQlpZiAoaGFzX2NhcChBQ0VSX0NBUF9CTFVFVE9PVEgpKSB7Ci0JCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmYWNlcl9wbGF0Zm9ybV9kZXZpY2UtPmRldiwKLQkJCSZkZXZfYXR0cl9ibHVldG9vdGgpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBlcnJvcl9zeXNmczsKLQl9Ci0KIAlpZiAoaGFzX2NhcChBQ0VSX0NBUF9USFJFRUcpKSB7CiAJCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmYWNlcl9wbGF0Zm9ybV9kZXZpY2UtPmRldiwKIAkJCSZkZXZfYXR0cl90aHJlZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2FzdXMtbGFwdG9wLmMgYi9kcml2ZXJzL21pc2MvYXN1cy1sYXB0b3AuYwppbmRleCA3YzZkZmQwLi5hOWQ1MjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL21pc2MvYXN1cy1sYXB0b3AuYwpAQCAtMTM5LDYgKzEzOSw3IEBACiAJICAgICJcXF9TQi5QQ0kwLlBYNDAuRUNEMC5fUTEwIiwJLyogTDNDICovCiAJICAgICJcXF9TQi5QQ0kwLlBYNDAuRUMwLlExMCIsCS8qIE0xQSAqLwogCSAgICAiXFxfU0IuUENJMC5MUENCLkVDMC5fUTEwIiwJLyogUDMwICovCisJICAgICJcXF9TQi5QQ0kwLkxQQ0IuRUMwLl9RMEUiLCAvKiBQMzAvUDM1ICovCiAJICAgICJcXF9TQi5QQ0kwLlBYNDAuUTEwIiwJLyogUzF4ICovCiAJICAgICJcXFExMCIpOwkJLyogQTJ4LCBMMkQsIEwzRCwgTTJFICovCiAKQEAgLTI4MCw3ICsyODEsNyBAQAogCiBzdGF0aWMgaW50IHJlYWRfd2lyZWxlc3Nfc3RhdHVzKGludCBtYXNrKQogewotCXVsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdHVzOwogCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CiAKIAlpZiAoIXdpcmVsZXNzX3N0YXR1c19oYW5kbGUpCkBAIC0yOTcsNyArMjk4LDcgQEAKIAogc3RhdGljIGludCByZWFkX2dwc19zdGF0dXModm9pZCkKIHsKLQl1bG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXR1czsKIAlhY3BpX3N0YXR1cyBydiA9IEFFX09LOwogCiAJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZ3BzX3N0YXR1c19oYW5kbGUsIE5VTEwsIE5VTEwsICZzdGF0dXMpOwpAQCAtMzUwLDcgKzM1MSw3IEBACiAJc3RhdGljIHZvaWQgb2JqZWN0IyNfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwJXAogCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkJCVwKIAl7CQkJCQkJCQlcCi0JCW9iamVjdCMjX2xlZF93ayA9IHZhbHVlOwkJCQlcCisJCW9iamVjdCMjX2xlZF93ayA9ICh2YWx1ZSA+IDApID8gMSA6IDA7CQkJXAogCQlxdWV1ZV93b3JrKGxlZF93b3JrcXVldWUsICZvYmplY3QjI19sZWRfd29yayk7CQlcCiAJfQkJCQkJCQkJXAogCXN0YXRpYyB2b2lkIG9iamVjdCMjX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQlcCkBAIC00MDQsNyArNDA1LDcgQEAKIAogc3RhdGljIGludCByZWFkX2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXVsb25nIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKIAlhY3BpX3N0YXR1cyBydiA9IEFFX09LOwogCiAJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoYnJpZ2h0bmVzc19nZXRfaGFuZGxlLCBOVUxMLCBOVUxMLCAmdmFsdWUpOwpAQCAtNDU1LDcgKzQ1Niw3IEBACiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQogewogCWludCBsZW4gPSAwOwotCXVsb25nIHRlbXA7CisJdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7CiAJY2hhciBidWZbMTZdOwkJLy9lbm91Z2ggZm9yIGFsbCBpbmZvCiAJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKIApAQCAtNjAzLDcgKzYwNCw3IEBACiAKIHN0YXRpYyBpbnQgcmVhZF9kaXNwbGF5KHZvaWQpCiB7Ci0JdWxvbmcgdmFsdWUgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSA9IDA7CiAJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKIAogCS8qIEluIG1vc3Qgb2YgdGhlIGNhc2UsIHdlIGtub3cgaG93IHRvIHNldCB0aGUgZGlzcGxheSwgYnV0IHNvbWV0aW1lCkBAIC04NDksNyArODUwLDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCXVuaW9uIGFjcGlfb2JqZWN0ICptb2RlbCA9IE5VTEw7Ci0JdWxvbmcgYnN0c19yZXN1bHQsIGh3cnNfcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBic3RzX3Jlc3VsdCwgaHdyc19yZXN1bHQ7CiAJY2hhciAqc3RyaW5nID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKQEAgLTk5Niw3ICs5OTcsNyBAQAogCWhvdGstPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFTVVNfSE9US19ERVZJQ0VfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFTVVNfSE9US19DTEFTUyk7Ci0JYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gaG90azsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gaG90azsKIAlob3RrLT5kZXZpY2UgPSBkZXZpY2U7CiAKIAlyZXN1bHQgPSBhc3VzX2hvdGtfY2hlY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvbWlzYy9lZWVwYy1sYXB0b3AuYwppbmRleCAxZWU4NTAxLi45ZWY5OGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZWVlcGMtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9taXNjL2VlZXBjLWxhcHRvcC5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAKICNkZWZpbmUgRUVFUENfTEFQVE9QX1ZFUlNJT04JIjAuMSIKIApAQCAtMTI1LDYgKzEyNywxMCBAQAogCQkJCQkgICBieSB0aGlzIEJJT1MgKi8KIAl1aW50IGluaXRfZmxhZzsJCQkvKiBJbml0IGZsYWdzICovCiAJdTE2IGV2ZW50X2NvdW50WzEyOF07CQkvKiBjb3VudCBmb3IgZWFjaCBldmVudCAqLworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXUxNiAqa2V5Y29kZV9tYXA7CisJc3RydWN0IHJma2lsbCAqZWVlcGNfd2xhbl9yZmtpbGw7CisJc3RydWN0IHJma2lsbCAqZWVlcGNfYmx1ZXRvb3RoX3Jma2lsbDsKIH07CiAKIC8qIFRoZSBhY3R1YWwgZGV2aWNlIHRoZSBkcml2ZXIgYmluZHMgdG8gKi8KQEAgLTE0MCw2ICsxNDYsMjcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZTsKIAorc3RydWN0IGtleV9lbnRyeSB7CisJY2hhciB0eXBlOworCXU4IGNvZGU7CisJdTE2IGtleWNvZGU7Cit9OworCitlbnVtIHsgS0VfS0VZLCBLRV9FTkQgfTsKKworc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgZWVlcGNfa2V5bWFwW10gPSB7CisJLyogU2xlZXAgYWxyZWFkeSBoYW5kbGVkIHZpYSBnZW5lcmljIEFDUEkgY29kZSAqLworCXtLRV9LRVksIDB4MTAsIEtFWV9XTEFOIH0sCisJe0tFX0tFWSwgMHgxMiwgS0VZX1BST0cxIH0sCisJe0tFX0tFWSwgMHgxMywgS0VZX01VVEUgfSwKKwl7S0VfS0VZLCAweDE0LCBLRVlfVk9MVU1FRE9XTiB9LAorCXtLRV9LRVksIDB4MTUsIEtFWV9WT0xVTUVVUCB9LAorCXtLRV9LRVksIDB4MzAsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKKwl7S0VfS0VZLCAweDMxLCBLRVlfU1dJVENIVklERU9NT0RFIH0sCisJe0tFX0tFWSwgMHgzMiwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAorCXtLRV9FTkQsIDB9LAorfTsKKwogLyoKICAqIFRoZSBob3RrZXkgZHJpdmVyIGRlY2xhcmF0aW9uCiAgKi8KQEAgLTIwNCw3ICsyMzEsNyBAQAogc3RhdGljIGludCByZWFkX2FjcGlfaW50KGFjcGlfaGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciAqbWV0aG9kLCBpbnQgKnZhbCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdWxvbmcgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHQ7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAoY2hhciAqKW1ldGhvZCwgTlVMTCwgJnJlc3VsdCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0yNjEsNiArMjg4LDQ0IEBACiB9CiAKIC8qCisgKiBSZmtpbGwgaGVscGVycworICovCisKK3N0YXRpYyBpbnQgZWVlcGNfd2xhbl9yZmtpbGxfc2V0KHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQoreworCWlmIChzdGF0ZSA9PSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEKQorCQlyZXR1cm4gc2V0X2FjcGkoQ01fQVNMX1dMQU4sIDApOworCWVsc2UKKwkJcmV0dXJuIHNldF9hY3BpKENNX0FTTF9XTEFOLCAxKTsKK30KKworc3RhdGljIGludCBlZWVwY193bGFuX3Jma2lsbF9zdGF0ZSh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGdldF9hY3BpKENNX0FTTF9XTEFOKSA9PSAxKQorCQkqc3RhdGUgPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOworCWVsc2UKKwkJKnN0YXRlID0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZWVwY19ibHVldG9vdGhfcmZraWxsX3NldCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCkKKwkJcmV0dXJuIHNldF9hY3BpKENNX0FTTF9CTFVFVE9PVEgsIDApOworCWVsc2UKKwkJcmV0dXJuIHNldF9hY3BpKENNX0FTTF9CTFVFVE9PVEgsIDEpOworfQorCitzdGF0aWMgaW50IGVlZXBjX2JsdWV0b290aF9yZmtpbGxfc3RhdGUodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgKnN0YXRlKQoreworCWlmIChnZXRfYWNwaShDTV9BU0xfQkxVRVRPT1RIKSA9PSAxKQorCQkqc3RhdGUgPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOworCWVsc2UKKwkJKnN0YXRlID0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFN5cyBoZWxwZXJzCiAgKi8KIHN0YXRpYyBpbnQgcGFyc2VfYXJnKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50ICp2YWwpCkBAIC0zMTEsMTMgKzM3NiwxMSBAQAogRUVFUENfQ1JFQVRFX0RFVklDRV9BVFRSKGNhbWVyYSwgQ01fQVNMX0NBTUVSQSk7CiBFRUVQQ19DUkVBVEVfREVWSUNFX0FUVFIoY2FyZHIsIENNX0FTTF9DQVJEUkVBREVSKTsKIEVFRVBDX0NSRUFURV9ERVZJQ0VfQVRUUihkaXNwLCBDTV9BU0xfRElTUExBWVNXSVRDSCk7Ci1FRUVQQ19DUkVBVEVfREVWSUNFX0FUVFIod2xhbiwgQ01fQVNMX1dMQU4pOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGxhdGZvcm1fYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9jYW1lcmEuYXR0ciwKIAkmZGV2X2F0dHJfY2FyZHIuYXR0ciwKIAkmZGV2X2F0dHJfZGlzcC5hdHRyLAotCSZkZXZfYXR0cl93bGFuLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMzI4LDggKzM5MSw2NCBAQAogLyoKICAqIEhvdGtleSBmdW5jdGlvbnMKICAqLworc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmVlcGNfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKGludCBjb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gZWVlcGNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKKwkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqZWVwY19nZXRfZW50cnlfYnlfa2V5Y29kZShpbnQgY29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlmb3IgKGtleSA9IGVlZXBjX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+a2V5Y29kZSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGVlZXBjX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXkgPSBlZXBjX2dldF9lbnRyeV9ieV9zY2FuY29kZShzY2FuY29kZSk7CisKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJKmtleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGVlZXBjX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCBrZXljb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKwlpbnQgb2xkX2tleWNvZGU7CisKKwlpZiAoa2V5Y29kZSA8IDAgfHwga2V5Y29kZSA+IEtFWV9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJa2V5ID0gZWVwY19nZXRfZW50cnlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOworCWlmIChrZXkgJiYga2V5LT50eXBlID09IEtFX0tFWSkgeworCQlvbGRfa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKKwkJa2V5LT5rZXljb2RlID0ga2V5Y29kZTsKKwkJc2V0X2JpdChrZXljb2RlLCBkZXYtPmtleWJpdCk7CisJCWlmICghZWVwY19nZXRfZW50cnlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCisJCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBpbnQgZWVlcGNfaG90a19jaGVjayh2b2lkKQogeworCWNvbnN0IHN0cnVjdCBrZXlfZW50cnkgKmtleTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCWludCByZXN1bHQ7CiAKQEAgLTM1Niw2ICs0NzUsMzEgQEAKIAkJCSAgICAgICAiR2V0IGNvbnRyb2wgbWV0aG9kcyBzdXBwb3J0ZWQ6IDB4JXhcbiIsCiAJCQkgICAgICAgZWhvdGstPmNtX3N1cHBvcnRlZCk7CiAJCX0KKwkJZWhvdGstPmlucHV0ZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJCWlmICghZWhvdGstPmlucHV0ZGV2KSB7CisJCQlwcmludGsoRUVFUENfSU5GTyAiVW5hYmxlIHRvIGFsbG9jYXRlIGlucHV0IGRldmljZVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQllaG90ay0+aW5wdXRkZXYtPm5hbWUgPSAiQXN1cyBFZWVQQyBleHRyYSBidXR0b25zIjsKKwkJZWhvdGstPmlucHV0ZGV2LT5waHlzID0gRUVFUENfSE9US19GSUxFICIvaW5wdXQwIjsKKwkJZWhvdGstPmlucHV0ZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJCWVob3RrLT5pbnB1dGRldi0+Z2V0a2V5Y29kZSA9IGVlZXBjX2dldGtleWNvZGU7CisJCWVob3RrLT5pbnB1dGRldi0+c2V0a2V5Y29kZSA9IGVlZXBjX3NldGtleWNvZGU7CisKKwkJZm9yIChrZXkgPSBlZWVwY19rZXltYXA7IGtleS0+dHlwZSAhPSBLRV9FTkQ7IGtleSsrKSB7CisJCQlzd2l0Y2ggKGtleS0+dHlwZSkgeworCQkJY2FzZSBLRV9LRVk6CisJCQkJc2V0X2JpdChFVl9LRVksIGVob3RrLT5pbnB1dGRldi0+ZXZiaXQpOworCQkJCXNldF9iaXQoa2V5LT5rZXljb2RlLCBlaG90ay0+aW5wdXRkZXYtPmtleWJpdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmVzdWx0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGVob3RrLT5pbnB1dGRldik7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhFRUVQQ19JTkZPICJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJCWlucHV0X2ZyZWVfZGV2aWNlKGVob3RrLT5pbnB1dGRldik7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0gZWxzZSB7CiAJCXByaW50ayhFRUVQQ19FUlIgIkhvdGtleSBkZXZpY2Ugbm90IHByZXNlbnQsIGFib3J0aW5nXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNjMsMjEgKzUwNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5vdGlmeV93bGFuKHUzMiAqZXZlbnQpCi17Ci0JLyogaWYgRElTQUJMRV9BU0xfV0xBTiBpcyBzZXQsIHRoZSBub3RpZnkgY29kZSBmb3IgZm4rZjIKLQkgICB3aWxsIGFsd2F5cyBiZSAweDEwICovCi0JaWYgKGVob3RrLT5jbV9zdXBwb3J0ZWQgJiAoMHgxIDw8IENNX0FTTF9XTEFOKSkgewotCQljb25zdCBjaGFyICptZXRob2QgPSBjbV9nZXR2W0NNX0FTTF9XTEFOXTsKLQkJaW50IHZhbHVlOwotCQlpZiAocmVhZF9hY3BpX2ludChlaG90ay0+aGFuZGxlLCBtZXRob2QsICZ2YWx1ZSkpCi0JCQlwcmludGsoRUVFUENfV0FSTklORyAiRXJyb3IgcmVhZGluZyAlc1xuIiwKLQkJCSAgICAgICBtZXRob2QpOwotCQllbHNlIGlmICh2YWx1ZSA9PSAxKQotCQkJKmV2ZW50ID0gMHgxMTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIG5vdGlmeV9icm4odm9pZCkKIHsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBlZWVwY19iYWNrbGlnaHRfZGV2aWNlOwpAQCAtMzg2LDE0ICs1MTUsMjggQEAKIAogc3RhdGljIHZvaWQgZWVlcGNfaG90a19ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CisJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKIAlpZiAoIWVob3RrKQogCQlyZXR1cm47Ci0JaWYgKGV2ZW50ID09IE5PVElGWV9XTEFOX09OICYmIChESVNBQkxFX0FTTF9XTEFOICYgZWhvdGstPmluaXRfZmxhZykpCi0JCW5vdGlmeV93bGFuKCZldmVudCk7CiAJaWYgKGV2ZW50ID49IE5PVElGWV9CUk5fTUlOICYmIGV2ZW50IDw9IE5PVElGWV9CUk5fTUFYKQogCQlub3RpZnlfYnJuKCk7CiAJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChlaG90ay0+ZGV2aWNlLCBldmVudCwKIAkJCQkgICAgIGVob3RrLT5ldmVudF9jb3VudFtldmVudCAlIDEyOF0rKyk7CisJaWYgKGVob3RrLT5pbnB1dGRldikgeworCQlrZXkgPSBlZXBjX2dldF9lbnRyeV9ieV9zY2FuY29kZShldmVudCk7CisJCWlmIChrZXkpIHsKKwkJCXN3aXRjaCAoa2V5LT50eXBlKSB7CisJCQljYXNlIEtFX0tFWToKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGVob3RrLT5pbnB1dGRldiwga2V5LT5rZXljb2RlLAorCQkJCQkJIDEpOworCQkJCWlucHV0X3N5bmMoZWhvdGstPmlucHV0ZGV2KTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGVob3RrLT5pbnB1dGRldiwga2V5LT5rZXljb2RlLAorCQkJCQkJIDApOworCQkJCWlucHV0X3N5bmMoZWhvdGstPmlucHV0ZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIH0KIAogc3RhdGljIGludCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTQxMSw3ICs1NTQsNyBAQAogCWVob3RrLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBFRUVQQ19IT1RLX0RFVklDRV9OQU1FKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgRUVFUENfSE9US19DTEFTUyk7Ci0JYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gZWhvdGs7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVob3RrOwogCWVob3RrLT5kZXZpY2UgPSBkZXZpY2U7CiAJcmVzdWx0ID0gZWVlcGNfaG90a19jaGVjaygpOwogCWlmIChyZXN1bHQpCkBAIC00MjAsNiArNTYzLDQ3IEBACiAJCQkJCSAgICAgZWVlcGNfaG90a19ub3RpZnksIGVob3RrKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXByaW50ayhFRUVQQ19FUlIgIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpOworCisJaWYgKGdldF9hY3BpKENNX0FTTF9XTEFOKSAhPSAtMSkgeworCQllaG90ay0+ZWVlcGNfd2xhbl9yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoJmRldmljZS0+ZGV2LAorCQkJCQkJCSAgIFJGS0lMTF9UWVBFX1dMQU4pOworCisJCWlmICghZWhvdGstPmVlZXBjX3dsYW5fcmZraWxsKQorCQkJZ290byBlbmQ7CisKKwkJZWhvdGstPmVlZXBjX3dsYW5fcmZraWxsLT5uYW1lID0gImVlZXBjLXdsYW4iOworCQllaG90ay0+ZWVlcGNfd2xhbl9yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IGVlZXBjX3dsYW5fcmZraWxsX3NldDsKKwkJZWhvdGstPmVlZXBjX3dsYW5fcmZraWxsLT5nZXRfc3RhdGUgPSBlZWVwY193bGFuX3Jma2lsbF9zdGF0ZTsKKwkJaWYgKGdldF9hY3BpKENNX0FTTF9XTEFOKSA9PSAxKQorCQkJZWhvdGstPmVlZXBjX3dsYW5fcmZraWxsLT5zdGF0ZSA9CisJCQkJUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKKwkJZWxzZQorCQkJZWhvdGstPmVlZXBjX3dsYW5fcmZraWxsLT5zdGF0ZSA9CisJCQkJUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwkJcmZraWxsX3JlZ2lzdGVyKGVob3RrLT5lZWVwY193bGFuX3Jma2lsbCk7CisJfQorCisJaWYgKGdldF9hY3BpKENNX0FTTF9CTFVFVE9PVEgpICE9IC0xKSB7CisJCWVob3RrLT5lZWVwY19ibHVldG9vdGhfcmZraWxsID0KKwkJCXJma2lsbF9hbGxvY2F0ZSgmZGV2aWNlLT5kZXYsIFJGS0lMTF9UWVBFX0JMVUVUT09USCk7CisKKwkJaWYgKCFlaG90ay0+ZWVlcGNfYmx1ZXRvb3RoX3Jma2lsbCkKKwkJCWdvdG8gZW5kOworCisJCWVob3RrLT5lZWVwY19ibHVldG9vdGhfcmZraWxsLT5uYW1lID0gImVlZXBjLWJsdWV0b290aCI7CisJCWVob3RrLT5lZWVwY19ibHVldG9vdGhfcmZraWxsLT50b2dnbGVfcmFkaW8gPQorCQkJZWVlcGNfYmx1ZXRvb3RoX3Jma2lsbF9zZXQ7CisJCWVob3RrLT5lZWVwY19ibHVldG9vdGhfcmZraWxsLT5nZXRfc3RhdGUgPQorCQkJZWVlcGNfYmx1ZXRvb3RoX3Jma2lsbF9zdGF0ZTsKKwkJaWYgKGdldF9hY3BpKENNX0FTTF9CTFVFVE9PVEgpID09IDEpCisJCQllaG90ay0+ZWVlcGNfYmx1ZXRvb3RoX3Jma2lsbC0+c3RhdGUgPQorCQkJCVJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7CisJCWVsc2UKKwkJCWVob3RrLT5lZWVwY19ibHVldG9vdGhfcmZraWxsLT5zdGF0ZSA9CisJCQkJUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwkJcmZraWxsX3JlZ2lzdGVyKGVob3RrLT5lZWVwY19ibHVldG9vdGhfcmZraWxsKTsKKwl9CisKICBlbmQ6CiAJaWYgKHJlc3VsdCkgewogCQlrZnJlZShlaG90ayk7CkBAIC01NTMsNiArNzM3LDEyIEBACiB7CiAJaWYgKGVlZXBjX2JhY2tsaWdodF9kZXZpY2UpCiAJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihlZWVwY19iYWNrbGlnaHRfZGV2aWNlKTsKKwlpZiAoZWhvdGstPmlucHV0ZGV2KQorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShlaG90ay0+aW5wdXRkZXYpOworCWlmIChlaG90ay0+ZWVlcGNfd2xhbl9yZmtpbGwpCisJCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT5lZWVwY193bGFuX3Jma2lsbCk7CisJaWYgKGVob3RrLT5lZWVwY19ibHVldG9vdGhfcmZraWxsKQorCQlyZmtpbGxfdW5yZWdpc3RlcihlaG90ay0+ZWVlcGNfYmx1ZXRvb3RoX3Jma2lsbCk7CiAJZWVlcGNfYmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9mdWppdHN1LWxhcHRvcC5jIGIvZHJpdmVycy9taXNjL2Z1aml0c3UtbGFwdG9wLmMKaW5kZXggM2U1NjIwMy4uZDJjZjBiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9taXNjL2Z1aml0c3UtbGFwdG9wLmMKQEAgLTQ0LDggKzQ0LDkgQEAKICAqIEhvdGtleXMgcHJlc2VudCBvbiBjZXJ0YWluIEZ1aml0c3UgbGFwdG9wcyAoZWc6IHRoZSBTNnh4eCBzZXJpZXMpIGFyZQogICogYWxzbyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCiAgKgotICogVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIGEgRnVqaXRzdSBMaWZlYm9vayBTNjQxMCBhbmQgUzcwMjAuICBJdAotICogc2hvdWxkIHdvcmsgb24gbW9zdCBQLXNlcmllcyBhbmQgUy1zZXJpZXMgTGlmZWJvb2tzLCBidXQgWU1NVi4KKyAqIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBhIEZ1aml0c3UgTGlmZWJvb2sgUzY0MTAsIFM3MDIwIGFuZAorICogUDgwMTAuICBJdCBzaG91bGQgd29yayBvbiBtb3N0IFAtc2VyaWVzIGFuZCBTLXNlcmllcyBMaWZlYm9va3MsIGJ1dAorICogWU1NVi4KICAqCiAgKiBUaGUgbW9kdWxlIHBhcmFtZXRlciB1c2VfYWx0X2xjZF9sZXZlbHMgc3dpdGNoZXMgYmV0d2VlbiBkaWZmZXJlbnQgQUNQSQogICogYnJpZ2h0bmVzcyBjb250cm9scyB3aGljaCBhcmUgdXNlZCBieSBkaWZmZXJlbnQgRnVqaXRzdSBsYXB0b3BzLiAgSW4gbW9zdApAQCAtNjUsNyArNjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX291dHB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jZGVmaW5lIEZVSklUU1VfRFJJVkVSX1ZFUlNJT04gIjAuNC4yIgorI2RlZmluZSBGVUpJVFNVX0RSSVZFUl9WRVJTSU9OICIwLjQuMyIKIAogI2RlZmluZSBGVUpJVFNVX0xDRF9OX0xFVkVMUyA4CiAKQEAgLTgzLDEwICs4NCwxMCBAQAogI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9ERUNfQlJJR0hUTkVTUyAgICAgMHg4NwogCiAvKiBIb3RrZXkgZGV0YWlscyAqLwotI2RlZmluZSBMT0NLX0tFWQkweDQxMAkvKiBjb2RlcyBmb3IgdGhlIGtleXMgaW4gdGhlIEdJUkIgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRElTUExBWV9LRVkJMHg0MTEJLyoga2V5cyBhcmUgbWFwcGVkIHRvIEtFWV9TQ1JFRU5MT0NLICh0aGUga2V5IHdpdGggdGhlIGtleSBzeW1ib2wpICovCi0jZGVmaW5lIEVORVJHWV9LRVkJMHg0MTIJLyogS0VZX01FRElBICh0aGUga2V5IHdpdGggdGhlIGxhcHRvcCBzeW1ib2wsIEtFWV9FTUFJTCAoRSBrZXkpKSAqLwotI2RlZmluZSBSRVNUX0tFWQkweDQxMwkvKiBLRVlfU1VTUEVORCAoUiBrZXkpICovCisjZGVmaW5lIEtFWTFfQ09ERQkweDQxMAkvKiBjb2RlcyBmb3IgdGhlIGtleXMgaW4gdGhlIEdJUkIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgS0VZMl9DT0RFCTB4NDExCisjZGVmaW5lIEtFWTNfQ09ERQkweDQxMgorI2RlZmluZSBLRVk0X0NPREUJMHg0MTMKIAogI2RlZmluZSBNQVhfSE9US0VZX1JJTkdCVUZGRVJfU0laRSAxMDAKICNkZWZpbmUgUklOR0JVRkZFUlNJWkUgNDAKQEAgLTEyMyw2ICsxMjQsNyBAQAogCWNoYXIgcGh5c1szMl07CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsX2RldmljZTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZl9kZXZpY2U7CisJaW50IGtleWNvZGUxLCBrZXljb2RlMiwga2V5Y29kZTMsIGtleWNvZGU0OwogCiAJdW5zaWduZWQgaW50IG1heF9icmlnaHRuZXNzOwogCXVuc2lnbmVkIGludCBicmlnaHRuZXNzX2NoYW5nZWQ7CkBAIC0yMjQsNyArMjI2LDcgQEAKIAogc3RhdGljIGludCBnZXRfbGNkX2xldmVsKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGF0ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAogCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfVFJBQ0UsICJnZXQgbGNkIGxldmVsIHZpYSBHQkxMXG4iKTsKQEAgLTI0Niw3ICsyNDgsNyBAQAogCiBzdGF0aWMgaW50IGdldF9tYXhfYnJpZ2h0bmVzcyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgc3RhdGUgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZSA9IDA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKIAl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX1RSQUNFLCAiZ2V0IG1heCBsY2QgbGV2ZWwgdmlhIFJCTExcbiIpOwpAQCAtMjYzLDcgKzI2NSw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2xjZF9sZXZlbF9hbHQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXRlID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdGUgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCiAJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19UUkFDRSwgImdldCBsY2QgbGV2ZWwgdmlhIEdCTFNcbiIpOwpAQCAtMzg0LDcgKzM4Niw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2lyYih2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgc3RhdGUgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZSA9IDA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKIAl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX1RSQUNFLCAiR2V0IGlyYlxuIik7CkBAIC00MzAsNyArNDMyLDcgQEAKIAkJICAgfQogfTsKIAotc3RhdGljIGludCBkbWlfY2hlY2tfY2JfczY0MTAoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQorc3RhdGljIHZvaWQgZG1pX2NoZWNrX2NiX2NvbW1vbihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCiB7CiAJYWNwaV9oYW5kbGUgaGFuZGxlOwogCWludCBoYXZlX2JsbmY7CkBAIC00NTIsMjQgKzQ1NCw0MCBAQAogCQkJICAgICJhdXRvLWRldGVjdGluZyBkaXNhYmxlX2FkanVzdFxuIik7CiAJCWRpc2FibGVfYnJpZ2h0bmVzc19hZGp1c3QgPSBoYXZlX2JsbmYgPyAwIDogMTsKIAl9Cit9CisKK3N0YXRpYyBpbnQgZG1pX2NoZWNrX2NiX3M2NDEwKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlkbWlfY2hlY2tfY2JfY29tbW9uKGlkKTsKKwlmdWppdHN1LT5rZXljb2RlMSA9IEtFWV9TQ1JFRU5MT0NLOwkvKiAiTG9jayIgKi8KKwlmdWppdHN1LT5rZXljb2RlMiA9IEtFWV9IRUxQOwkvKiAiTW9iaWxpdHkgQ2VudGVyIiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRtaV9jaGVja19jYl9wODAxMChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJZG1pX2NoZWNrX2NiX2NvbW1vbihpZCk7CisJZnVqaXRzdS0+a2V5Y29kZTEgPSBLRVlfSEVMUDsJLyogIlN1cHBvcnQiICovCisJZnVqaXRzdS0+a2V5Y29kZTMgPSBLRVlfU1dJVENIVklERU9NT0RFOwkvKiAiUHJlc2VudGF0aW9uIiAqLworCWZ1aml0c3UtPmtleWNvZGU0ID0gS0VZX1dXVzsJLyogIkludGVybmV0IiAqLwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBmdWppdHN1X2RtaV90YWJsZVtdID0gewogCXsKLQkgLmlkZW50ID0gIkZ1aml0c3UgU2llbWVucyIsCisJIC5pZGVudCA9ICJGdWppdHN1IFNpZW1lbnMgUzY0MTAiLAogCSAubWF0Y2hlcyA9IHsKIAkJICAgICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKIAkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxJRkVCT09LIFM2NDEwIiksCiAJCSAgICAgfSwKIAkgLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiX3M2NDEwfSwKIAl7Ci0JIC5pZGVudCA9ICJGVUpJVFNVIExpZmVCb29rIFA4MDEwIiwKKwkgLmlkZW50ID0gIkZ1aml0c3UgTGlmZUJvb2sgUDgwMTAiLAogCSAubWF0Y2hlcyA9IHsKIAkJICAgICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIiksCiAJCSAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMaWZlQm9vayBQODAxMCIpLAotCQkgICAgfSwKLQkgLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiX3M2NDEwfSwKKwkJICAgICB9LAorCSAuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2JfcDgwMTB9LAogCXt9CiB9OwogCkBAIC00OTAsNyArNTA4LDcgQEAKIAlmdWppdHN1LT5hY3BpX2hhbmRsZSA9IGRldmljZS0+aGFuZGxlOwogCXNwcmludGYoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCAiJXMiLCBBQ1BJX0ZVSklUU1VfREVWSUNFX05BTUUpOwogCXNwcmludGYoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgIiVzIiwgQUNQSV9GVUpJVFNVX0NMQVNTKTsKLQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBmdWppdHN1OworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBmdWppdHN1OwogCiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCQkgICAgIEFDUElfREVWSUNFX05PVElGWSwKQEAgLTU0Nyw3ICs1NjUsNiBAQAogCX0KIAogCS8qIGRvIGNvbmZpZyAoZGV0ZWN0IGRlZmF1bHRzKSAqLwotCWRtaV9jaGVja19zeXN0ZW0oZnVqaXRzdV9kbWlfdGFibGUpOwogCXVzZV9hbHRfbGNkX2xldmVscyA9IHVzZV9hbHRfbGNkX2xldmVscyA9PSAxID8gMSA6IDA7CiAJZGlzYWJsZV9icmlnaHRuZXNzX2tleXMgPSBkaXNhYmxlX2JyaWdodG5lc3Nfa2V5cyA9PSAxID8gMSA6IDA7CiAJZGlzYWJsZV9icmlnaHRuZXNzX2FkanVzdCA9IGRpc2FibGVfYnJpZ2h0bmVzc19hZGp1c3QgPT0gMSA/IDEgOiAwOwpAQCAtNjIzLDE3ICs2NDAsMTcgQEAKIAkJCWtleWNvZGUgPSAwOwogCQkJaWYgKGRpc2FibGVfYnJpZ2h0bmVzc19rZXlzICE9IDEpIHsKIAkJCQlpZiAob2xkYiA9PSAwKSB7Ci0JCQkJCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZnVqaXRzdS0+Ci0JCQkJCQlkZXYsCi0JCQkJCQlBQ1BJX1ZJREVPX05PVElGWV9ERUNfQlJJR0hUTkVTUywKLQkJCQkJCTApOworCQkJCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50CisJCQkJCSAgICAoZnVqaXRzdS0+ZGV2LAorCQkJCQkgICAgIEFDUElfVklERU9fTk9USUZZX0RFQ19CUklHSFRORVNTLAorCQkJCQkgICAgIDApOwogCQkJCQlrZXljb2RlID0gS0VZX0JSSUdIVE5FU1NET1dOOwogCQkJCX0gZWxzZSBpZiAob2xkYiA9PQogCQkJCQkgICAoZnVqaXRzdS0+bWF4X2JyaWdodG5lc3MpIC0gMSkgewotCQkJCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGZ1aml0c3UtPgotCQkJCQkJZGV2LAotCQkJCQkJQUNQSV9WSURFT19OT1RJRllfSU5DX0JSSUdIVE5FU1MsCi0JCQkJCQkwKTsKKwkJCQkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudAorCQkJCQkgICAgKGZ1aml0c3UtPmRldiwKKwkJCQkJICAgICBBQ1BJX1ZJREVPX05PVElGWV9JTkNfQlJJR0hUTkVTUywKKwkJCQkJICAgICAwKTsKIAkJCQkJa2V5Y29kZSA9IEtFWV9CUklHSFRORVNTVVA7CiAJCQkJfQogCQkJfQpAQCAtNjQ2LDggKzY2Myw3IEBACiAJCQl9CiAJCQlpZiAoZGlzYWJsZV9icmlnaHRuZXNzX2tleXMgIT0gMSkgewogCQkJCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZnVqaXRzdS0+ZGV2LAotCQkJCQlBQ1BJX1ZJREVPX05PVElGWV9JTkNfQlJJR0hUTkVTUywKLQkJCQkJMCk7CisJCQkJCUFDUElfVklERU9fTk9USUZZX0lOQ19CUklHSFRORVNTLCAwKTsKIAkJCQlrZXljb2RlID0gS0VZX0JSSUdIVE5FU1NVUDsKIAkJCX0KIAkJfSBlbHNlIGlmIChvbGRiID4gbmV3YikgewpAQCAtNjU5LDggKzY3NSw3IEBACiAJCQl9CiAJCQlpZiAoZGlzYWJsZV9icmlnaHRuZXNzX2tleXMgIT0gMSkgewogCQkJCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZnVqaXRzdS0+ZGV2LAotCQkJCQlBQ1BJX1ZJREVPX05PVElGWV9ERUNfQlJJR0hUTkVTUywKLQkJCQkJMCk7CisJCQkJCUFDUElfVklERU9fTk9USUZZX0RFQ19CUklHSFRORVNTLCAwKTsKIAkJCQlrZXljb2RlID0gS0VZX0JSSUdIVE5FU1NET1dOOwogCQkJfQogCQl9IGVsc2UgewpAQCAtNzAzLDcgKzcxOCw3IEBACiAJc3ByaW50ZihhY3BpX2RldmljZV9uYW1lKGRldmljZSksICIlcyIsCiAJCUFDUElfRlVKSVRTVV9IT1RLRVlfREVWSUNFX05BTUUpOwogCXNwcmludGYoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgIiVzIiwgQUNQSV9GVUpJVFNVX0NMQVNTKTsKLQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBmdWppdHN1X2hvdGtleTsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gZnVqaXRzdV9ob3RrZXk7CiAKIAlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCiAJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLApAQCAtNzQyLDEwICs3NTcsMTAgQEAKIAlpbnB1dC0+aWQucHJvZHVjdCA9IDB4MDY7CiAJaW5wdXQtPmRldi5wYXJlbnQgPSAmZGV2aWNlLT5kZXY7CiAJaW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7Ci0Jc2V0X2JpdChLRVlfU0NSRUVOTE9DSywgaW5wdXQtPmtleWJpdCk7Ci0Jc2V0X2JpdChLRVlfTUVESUEsIGlucHV0LT5rZXliaXQpOwotCXNldF9iaXQoS0VZX0VNQUlMLCBpbnB1dC0+a2V5Yml0KTsKLQlzZXRfYml0KEtFWV9TVVNQRU5ELCBpbnB1dC0+a2V5Yml0KTsKKwlzZXRfYml0KGZ1aml0c3UtPmtleWNvZGUxLCBpbnB1dC0+a2V5Yml0KTsKKwlzZXRfYml0KGZ1aml0c3UtPmtleWNvZGUyLCBpbnB1dC0+a2V5Yml0KTsKKwlzZXRfYml0KGZ1aml0c3UtPmtleWNvZGUzLCBpbnB1dC0+a2V5Yml0KTsKKwlzZXRfYml0KGZ1aml0c3UtPmtleWNvZGU0LCBpbnB1dC0+a2V5Yml0KTsKIAlzZXRfYml0KEtFWV9VTktOT1dOLCBpbnB1dC0+a2V5Yml0KTsKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKQEAgLTgzMywyNCArODQ4LDI0IEBACiAJCQkJICAgIGlyYik7CiAKIAkJCXN3aXRjaCAoaXJiICYgMHg0ZmYpIHsKLQkJCWNhc2UgTE9DS19LRVk6Ci0JCQkJa2V5Y29kZSA9IEtFWV9TQ1JFRU5MT0NLOworCQkJY2FzZSBLRVkxX0NPREU6CisJCQkJa2V5Y29kZSA9IGZ1aml0c3UtPmtleWNvZGUxOwogCQkJCWJyZWFrOwotCQkJY2FzZSBESVNQTEFZX0tFWToKLQkJCQlrZXljb2RlID0gS0VZX01FRElBOworCQkJY2FzZSBLRVkyX0NPREU6CisJCQkJa2V5Y29kZSA9IGZ1aml0c3UtPmtleWNvZGUyOwogCQkJCWJyZWFrOwotCQkJY2FzZSBFTkVSR1lfS0VZOgotCQkJCWtleWNvZGUgPSBLRVlfRU1BSUw7CisJCQljYXNlIEtFWTNfQ09ERToKKwkJCQlrZXljb2RlID0gZnVqaXRzdS0+a2V5Y29kZTM7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIFJFU1RfS0VZOgotCQkJCWtleWNvZGUgPSBLRVlfU1VTUEVORDsKKwkJCWNhc2UgS0VZNF9DT0RFOgorCQkJCWtleWNvZGUgPSBmdWppdHN1LT5rZXljb2RlNDsKIAkJCQlicmVhazsKIAkJCWNhc2UgMDoKIAkJCQlrZXljb2RlID0gMDsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19XQVJOLAotCQkJCQkiVW5rbm93biBHSVJCIHJlc3VsdCBbJXhdXG4iLCBpcmIpOworCQkJCQkgICAgIlVua25vd24gR0lSQiByZXN1bHQgWyV4XVxuIiwgaXJiKTsKIAkJCQlrZXljb2RlID0gLTE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04NTksMTIgKzg3NCwxMiBAQAogCQkJCQkiUHVzaCBrZXljb2RlIGludG8gcmluZ2J1ZmZlciBbJWRdXG4iLAogCQkJCQlrZXljb2RlKTsKIAkJCQlzdGF0dXMgPSBrZmlmb19wdXQoZnVqaXRzdV9ob3RrZXktPmZpZm8sCi0JCQkJCQkodW5zaWduZWQgY2hhciAqKSZrZXljb2RlLAotCQkJCQkJc2l6ZW9mKGtleWNvZGUpKTsKKwkJCQkJCSAgICh1bnNpZ25lZCBjaGFyICopJmtleWNvZGUsCisJCQkJCQkgICBzaXplb2Yoa2V5Y29kZSkpOwogCQkJCWlmIChzdGF0dXMgIT0gc2l6ZW9mKGtleWNvZGUpKSB7CiAJCQkJCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfV0FSTiwKLQkJCQkJCSJDb3VsZCBub3QgcHVzaCBrZXljb2RlIFsweCV4XVxuIiwKLQkJCQkJCWtleWNvZGUpOworCQkJCQkgICAgIkNvdWxkIG5vdCBwdXNoIGtleWNvZGUgWzB4JXhdXG4iLAorCQkJCQkgICAga2V5Y29kZSk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZSwgMSk7CiAJCQkJCWlucHV0X3N5bmMoaW5wdXQpOwpAQCAtODc5LDggKzg5NCw4IEBACiAJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIGtleWNvZGVfciwgMCk7CiAJCQkJCWlucHV0X3N5bmMoaW5wdXQpOwogCQkJCQl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX1RSQUNFLAotCQkJCQkJICAgICJQb3Aga2V5Y29kZSBmcm9tIHJpbmdidWZmZXIgWyVkXVxuIiwKLQkJCQkJCSAgICBrZXljb2RlX3IpOworCQkJCQkgICJQb3Aga2V5Y29kZSBmcm9tIHJpbmdidWZmZXIgWyVkXVxuIiwKKwkJCQkJICBrZXljb2RlX3IpOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtOTQzLDYgKzk1OCwxMSBAQAogCWlmICghZnVqaXRzdSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGZ1aml0c3UsIDAsIHNpemVvZihzdHJ1Y3QgZnVqaXRzdV90KSk7CisJZnVqaXRzdS0+a2V5Y29kZTEgPSBLRVlfUFJPRzE7CisJZnVqaXRzdS0+a2V5Y29kZTIgPSBLRVlfUFJPRzI7CisJZnVqaXRzdS0+a2V5Y29kZTMgPSBLRVlfUFJPRzM7CisJZnVqaXRzdS0+a2V5Y29kZTQgPSBLRVlfUFJPRzQ7CisJZG1pX2NoZWNrX3N5c3RlbShmdWppdHN1X2RtaV90YWJsZSk7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfZnVqaXRzdV9kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7CkBAIC0xMDc2LDE1ICsxMDk2LDE0IEBACiBNT0RVTEVfVkVSU0lPTihGVUpJVFNVX0RSSVZFUl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotTU9EVUxFX0FMSUFTCi0gICAgKCJkbWk6Kjpzdm5GVUpJVFNVU0lFTUVOUzoqOnB2cjpydm5GVUpJVFNVOnJuRkpOQjFEMzoqOmN2clM2NDEwOioiKTsKLU1PRFVMRV9BTElBUwotICAgICgiZG1pOio6c3ZuRlVKSVRTVToqOnB2cjpydm5GVUpJVFNVOnJuRkpOQjE5QzoqOmN2clM3MDIwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRlVKSVRTVVNJRU1FTlM6KjpwdnI6cnZuRlVKSVRTVTpybkZKTkIxRDM6KjpjdnJTNjQxMDoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkZVSklUU1U6KjpwdnI6cnZuRlVKSVRTVTpybkZKTkIxOUM6KjpjdnJTNzAyMDoqIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBwbnBfaWRzW10gPSB7Ci0JeyAuaWQgPSAiRlVKMDJiZiIgfSwKLQl7IC5pZCA9ICJGVUowMkIxIiB9LAotCXsgLmlkID0gIkZVSjAyRTMiIH0sCi0JeyAuaWQgPSAiIiB9CisJey5pZCA9ICJGVUowMmJmIn0sCisJey5pZCA9ICJGVUowMkIxIn0sCisJey5pZCA9ICJGVUowMkUzIn0sCisJey5pZCA9ICIifQogfTsKKwogTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHBucF9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hwLXdtaS5jIGIvZHJpdmVycy9taXNjL2hwLXdtaS5jCmluZGV4IDVkYWJmYjYuLjRiN2MyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ocC13bWkuYworKysgYi9kcml2ZXJzL21pc2MvaHAtd21pLmMKQEAgLTgyLDYgKzgyLDcgQEAKIAl7S0VfS0VZLCAweDAzLCBLRVlfQlJJR0hUTkVTU0RPV059LAogCXtLRV9LRVksIDB4MjBlNiwgS0VZX1BST0cxfSwKIAl7S0VfS0VZLCAweDIxNDIsIEtFWV9NRURJQX0sCisJe0tFX0tFWSwgMHgyMTNiLCBLRVlfSU5GT30sCiAJe0tFX0tFWSwgMHgyMzFiLCBLRVlfSEVMUH0sCiAJe0tFX0VORCwgMH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaW50ZWxfbWVubG93LmMgYi9kcml2ZXJzL21pc2MvaW50ZWxfbWVubG93LmMKaW5kZXggODBhMTM2My4uZTAwYTI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2ludGVsX21lbmxvdy5jCisrKyBiL2RyaXZlcnMvbWlzYy9pbnRlbF9tZW5sb3cuYwpAQCAtNTcsNyArNTcsNyBAQAogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKIAl1bmlvbiBhY3BpX29iamVjdCBhcmc7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CkBAIC05MCw3ICs5MCw3IEBACiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0OwogCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHZhbHVlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWVtb3J5X3NldF9jdXJfYmFuZHdpZHRoKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LApAQCAtMTE1LDcgKzExNSw3IEBACiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3Q7CiAJdW5pb24gYWNwaV9vYmplY3QgYXJnOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlpbnQgdGVtcDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKIAl1bnNpZ25lZCBsb25nIG1heF9zdGF0ZTsKIAogCWlmIChtZW1vcnlfZ2V0X2ludF9tYXhfYmFuZHdpZHRoKGNkZXYsICZtYXhfc3RhdGUpKQpAQCAtMTMxLDcgKzEzMSw3IEBACiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRU1PUllfU0VUX0JBTkRXSURUSCwgJmFyZ19saXN0LAotCQkJCSAgKHVuc2lnbmVkIGxvbmcgKikmdGVtcCk7CisJCQkJICAmdGVtcCk7CiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICJCYW5kd2lkdGggdmFsdWUgd2FzICVkOiBzdGF0dXMgaXMgJWRcbiIsIHN0YXRlLCBzdGF0dXMpOwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJCWdvdG8gZW5kOwogCX0KIAotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGNkZXY7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGNkZXY7CiAJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosCiAJCQkJJmNkZXYtPmRldmljZS5rb2JqLCAidGhlcm1hbF9jb29saW5nIik7CiAJaWYgKHJlc3VsdCkKQEAgLTI1Miw3ICsyNTIsOCBAQAogICogQGF1eHR5cGUgOiBBVVgwL0FVWDEKICAqIEBidWY6IHN5ZnMgYnVmZmVyCiAgKi8KLXN0YXRpYyBpbnQgc2Vuc29yX2dldF9hdXh0cmlwKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGluZGV4LCBpbnQgKnZhbHVlKQorc3RhdGljIGludCBzZW5zb3JfZ2V0X2F1eHRyaXAoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgaW5kZXgsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBsb25nICp2YWx1ZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKQEAgLTI2MCw3ICsyNjEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsIGluZGV4ID8gR0VUX0FVWDEgOiBHRVRfQVVYMCwKLQkJCQkgICAgICAgTlVMTCwgKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSk7CisJCQkJICAgICAgIE5VTEwsIHZhbHVlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRUlPOwogCkBAIC0yODIsMTMgKzI4MywxMyBAQAogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7CiAJCTEsICZhcmcKIAl9OwotCWludCB0ZW1wOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wOwogCiAJaWYgKGluZGV4ICE9IDAgJiYgaW5kZXggIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBpbmRleCA/IEdFVF9BVVgwIDogR0VUX0FVWDEsCi0JCQkJICAgICAgIE5VTEwsICh1bnNpZ25lZCBsb25nICopJnRlbXApOworCQkJCSAgICAgICBOVUxMLCAmdGVtcCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAoKGluZGV4ICYmIHZhbHVlIDwgdGVtcCkgfHwgKCFpbmRleCAmJiB2YWx1ZSA+IHRlbXApKQpAQCAtMjk2LDcgKzI5Nyw3IEBACiAKIAlhcmcuaW50ZWdlci52YWx1ZSA9IHZhbHVlOwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsIGluZGV4ID8gU0VUX0FVWDEgOiBTRVRfQVVYMCwKLQkJCQkgICAgICAgJmFyZ3MsICh1bnNpZ25lZCBsb25nICopJnRlbXApOworCQkJCSAgICAgICAmYXJncywgJnRlbXApOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTMxMiw3ICszMTMsNyBAQAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpbnRlbF9tZW5sb3dfYXR0cmlidXRlICphdHRyID0gdG9faW50ZWxfbWVubG93X2F0dHIoZGV2X2F0dHIpOwotCWludCB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CiAJaW50IHJlc3VsdDsKIAogCXJlc3VsdCA9IHNlbnNvcl9nZXRfYXV4dHJpcChhdHRyLT5oYW5kbGUsIDAsICZ2YWx1ZSk7CkBAIC0zMjQsNyArMzI1LDcgQEAKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2X2F0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaW50ZWxfbWVubG93X2F0dHJpYnV0ZSAqYXR0ciA9IHRvX2ludGVsX21lbmxvd19hdHRyKGRldl9hdHRyKTsKLQlpbnQgdmFsdWU7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOwogCWludCByZXN1bHQ7CiAKIAlyZXN1bHQgPSBzZW5zb3JfZ2V0X2F1eHRyaXAoYXR0ci0+aGFuZGxlLCAxLCAmdmFsdWUpOwpAQCAtMzc2LDcgKzM3Nyw3IEBACiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgYmlvc19lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBiaW9zX2VuYWJsZWQ7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoTlVMTCwgQklPU19FTkFCTEVELCBOVUxMLCAmYmlvc19lbmFibGVkKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCkBAIC00OTIsNyArNDkzLDcgQEAKIHsKIAlpbnQgcmVzdWx0ID0gLUVOT0RFVjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBlbmFibGU7CisJdW5zaWduZWQgbG9uZyBsb25nIGVuYWJsZTsKIAogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3BhbmFzb25pYy1sYXB0b3AuYyBiL2RyaXZlcnMvbWlzYy9wYW5hc29uaWMtbGFwdG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjYjU5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9wYW5hc29uaWMtbGFwdG9wLmMKQEAgLTAsMCArMSw3NjcgQEAKKy8qCisgKiAgUGFuYXNvbmljIEhvdEtleSBhbmQgTENEIGJyaWdodG5lc3MgY29udHJvbCBkcml2ZXIKKyAqICAoQykgMjAwNCBIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPgorICogIChDKSAyMDA0IE5UVCBEQVRBIEludGVsbGlsaW5rIENvLiBodHRwOi8vd3d3LmludGVsbGlsaW5rLmNvLmpwLworICogIChDKSBZT0tPVEEgSGlyb3NoaSA8eW9rb3RhIChhdCkgbmV0bGFiLiBpcy4gdHN1a3ViYS4gYWMuIGpwPgorICogIChDKSAyMDA0IERhdmlkIEJyb25hdWdoIDxkYnJvbmF1Z2g+CisgKiAgKEMpIDIwMDYtMjAwOCBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqICBkZXJpdmVkIGZyb20gdG9zaGliYV9hY3BpLmMsIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IEpvaG4gQmVsbW9udGUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1YmxpY3NoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ2hhbmdlTG9nOgorICoJU2VwLjIzLCAyMDA4CUhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKgkJLXYwLjk1CXJlbmFtZSBkcml2ZXIgZnJvbSBkcml2ZXJzL2FjcGkvcGNjX2FjcGkuYyB0bworICoJCQlkcml2ZXJzL21pc2MvcGFuYXNvbmljLWxhcHRvcC5jCisgKgorICogCUp1bC4wNCwgMjAwOAlIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogCQktdjAuOTQJcmVwbGFjZSAvcHJvYyBpbnRlcmZhY2Ugd2l0aCBkZXZpY2UgYXR0cmlidXRlcworICogCQkJc3VwcG9ydCB7c2V0LGdldH1rZXljb2RlIG9uIHRoIGlucHV0IGRldmljZQorICoKKyAqICAgICAgSnVuLjI3LCAyMDA4CUhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKiAgICAgIAktdjAuOTIJbWVyZ2Ugd2l0aCAyLjYuMjYtcmM2IGlucHV0IEFQSSBjaGFuZ2VzCisgKiAgICAgIAkJcmVtb3ZlIGJyb2tlbiA8PSAyLjYuMTUga2VybmVsIHN1cHBvcnQKKyAqICAgICAgCQlyZXNvbHZlIGFsbCBjb21waWxlciB3YXJuaW5ncworICogICAgICAJCXZhcmlvdXMgY29kaW5nIHN0eWxlIGZpeGVzIChjaGVja3BhdGNoLnBsKQorICogICAgICAJCWFkZCBzdXBwb3J0IGZvciBiYWNrbGlnaHQgYXBpCisgKiAgICAgIAkJbWFqb3IgY29kZSByZXN0cnVjdHVyaW5nCisgKgorICogCURhYy4yOCwgMjAwNwlIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogCQktdjAuOTEJbWVyZ2Ugd2l0aCAyLjYuMjQtcmM2IEFDUEkgY2hhbmdlcworICoKKyAqIAlOb3YuMDQsIDIwMDYJSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4KKyAqIAkJLXYwLjkJcmVtb3ZlIHdhcm5pbmcgYWJvdXQgc2VjdGlvbiByZWZlcmVuY2UuCisgKiAJCQlyZW1vdmUgYWNwaV9vc19mcmVlCisgKiAJCQlhZGQgL3Byb2MvYWNwaS9wY2MvYnJpZ2h0bmVzcyBpbnRlcmZhY2UgZm9yIEhBTCBhY2Nlc3MKKyAqIAkJCW1lcmdlIGRicm9uYXVnaCdzIGVuaGFuY2VtZW50CisgKiAJCQlBdWcuMTcsIDIwMDQgRGF2aWQgQnJvbmF1Z2ggKGRicm9uYXVnaCkKKyAqICAJCQkJLSBBZGRlZCBzY3JlZW4gYnJpZ2h0bmVzcyBzZXR0aW5nIGludGVyZmFjZQorICoJCQkJICBUaGFua3MgdG8gRnJlZUJTRCBjcmV3IChhY3BpX3BhbmFzb25pYy5jKQorICogCQkJCSAgZm9yIHRoZSBpZGVhcyBJIG5lZWRlZCB0byBhY2NvbXBsaXNoIGl0CisgKgorICoJTWF5LjI5LCAyMDA2CUhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+CisgKgkJLXYwLjguNCBmb2xsb3cgdG8gY2hhbmdlIGtleWlucHV0IHN0cnVjdHVyZQorICoJCQl0aGFua3MgRmFiaWFuIFlhbWFndWNoaSA8ZmFic0Bjcy50dS1iZXJsaW4uZGU+LAorICoJCQlKYWNvYiBCb3dlciA8amFjb2IuYm93ZXJAaWMuYWMudWs+IGFuZAorICoJCQlIaXJvc2hpIFlva290YSBmb3IgcHJvdmlkaW5nIHNvbHV0aW9ucy4KKyAqCisgKglPY3QuMDIsIDIwMDQJSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4KKyAqCQktdjAuOC4yCW1lcmdlIGNvZGUgb2YgWU9LT1RBIEhpcm9zaGkKKyAqCQkJCQk8eW9rb3RhQG5ldGxhYi5pcy50c3VrdWJhLmFjLmpwPi4KKyAqCQkJQWRkIHN0aWNreSBrZXkgbW9kZSBpbnRlcmZhY2UuCisgKgkJCVJlZmFjdG9yaW5nIGFjcGlfcGNjX2dlbmVyYXRlX2tleWlucHV0KCkuCisgKgorICoJU2VwLjE1LCAyMDA0CUhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+CisgKgkJLXYwLjgJR2VuZXJhdGUga2V5IGlucHV0IGV2ZW50IG9uIGlucHV0IHN1YnN5c3RlbS4KKyAqCQkJVGhpcyBpcyBiYXNlZCBvbiB5ZXQgYW5vdGhlciBkcml2ZXIgd3JpdHRlbiBieQorICoJCQkJCQkJUnl1dGEgTmFrYW5pc2hpLgorICoKKyAqCVNlcC4xMCwgMjAwNAlIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPgorICoJCS12MC43CUNoYW5nZSBwcm9jIGludGVyZmFjZSBmdW5jdGlvbnMgdXNpbmcgc2VxX2ZpbGUKKyAqCQkJZmFjaWxpdHkgYXMgc2FtZSBhcyBvdGhlciBBQ1BJIGRyaXZlcnMuCisgKgorICoJQXVnLjI4LCAyMDA0CUhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+CisgKgkJLXYwLjYuNCBGaXggYSBzaWxseSBlcnJvciB3aXRoIHN0YXR1cyBjaGVja2luZworICoKKyAqCUF1Zy4yNSwgMjAwNAlIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPgorICoJCS12MC42LjMgcmVwbGFjZSByZWFkX2FjcGlfaW50IGJ5IHN0YW5kYXJkIGZ1bmN0aW9uCisgKgkJCQkJCQlhY3BpX2V2YWx1YXRlX2ludGVnZXIKKyAqCQkJc29tZSBjbGVhbiB1cCBhbmQgbWFrZSBzbWFydCBjb3B5cmlnaHQgbm90aWNlLgorICoJCQlmaXggcmV0dXJuIHZhbHVlIG9mIHBjY19hY3BpX2dldF9rZXkoKQorICoJCQlmaXggY2hlY2tpbmcgcmV0dXJuIHZhbHVlIG9mIGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigpCisgKgorICogICAgICBBdWcuMjIsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggPGRicm9uYXVnaEBsaW51eGJveGVuLm9yZz4KKyAqICAgICAgICAgICAgICAtdjAuNi4yIEFkZCBjaGVjayBvbiBBQ1BJIGRhdGEgKG51bV9zaWZyKQorICogICAgICAgICAgICAgICAgICAgICAgQ29kaW5nIHN0eWxlIGNsZWFudXBzLCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMvaGFuZGxpbmcKKyAqCQkJRml4ZWQgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqICAgICAgQXVnLjIxLCAyMDA0ICAgIERhdmlkIEJyb25hdWdoIDxkYnJvbmF1Z2hAbGludXhib3hlbi5vcmc+CisgKiAgICAgICAgICAgICAgLXYwLjYuMSBGaXggYSBzaWxseSBlcnJvciB3aXRoIHN0YXR1cyBjaGVja2luZworICoKKyAqICAgICAgQXVnLjIwLCAyMDA0ICAgIERhdmlkIEJyb25hdWdoIDxkYnJvbmF1Z2hAbGludXhib3hlbi5vcmc+CisgKiAgICAgICAgICAgICAgLSB2MC42ICBDb3JyZWN0IGJyaWdodG5lc3MgY29udHJvbHMgdG8gcmVmbGVjdCByZWFsaXR5CisgKiAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBpbmZvcm1hdGlvbiBnbGVhbmVkIGJ5IEhpcm9zaGkgTWl1cmEKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBkaXNjdXNzaW9ucyB3aXRoIEhpcm9zaGkgTWl1cmEKKyAqCisgKglBdWcuMTAsIDIwMDQJSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4KKyAqCQktIHYwLjUgIHN1cHBvcnQgTENEIGJyaWdodG5lc3MgY29udHJvbAorICoJCQliYXNlZCBvbiB0aGUgZGlzY2xvc2VkIGluZm9ybWF0aW9uIGJ5IE1FSS4KKyAqCisgKglKdWwuMjUsIDIwMDQJSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4KKyAqCQktIHYwLjQgIGZpcnN0IHBvc3QgdmVyc2lvbgorICoJCSAgICAgICAgYWRkIGZ1bmN0aW9uIHRvIHJldHJpdmUgU0lGUgorICoKKyAqCUp1bC4yNCwgMjAwNAlIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPgorICoJCS0gdjAuMyAgZ2V0IHByb3BlciBzdGF0dXMgb2YgaG90a2V5CisgKgorICogICAgICBKdWwuMjIsIDIwMDQJSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4KKyAqCQktIHYwLjIgIGFkZCBIb3RLZXkgaGFuZGxlcgorICoKKyAqICAgICAgSnVsLjE3LCAyMDA0CUhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+CisgKgkJLSB2MC4xICBzdGFydCBmcm9tIHRvc2hpYmFfYWNwaSBkcml2ZXIgd3JpdHRlbiBieSBKb2huIEJlbG1vbnRlCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisKKyNpZm5kZWYgQUNQSV9IT1RLRVlfQ09NUE9ORU5UCisjZGVmaW5lIEFDUElfSE9US0VZX0NPTVBPTkVOVAkweDEwMDAwMDAwCisjZW5kaWYKKworI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX0hPVEtFWV9DT01QT05FTlQKKworTU9EVUxFX0FVVEhPUigiSGlyb3NoaSBNaXVyYSwgRGF2aWQgQnJvbmF1Z2ggYW5kIEhhcmFsZCBXZWx0ZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIEhvdEtleSBkcml2ZXIgZm9yIFBhbmFzb25pYyBMZXQncyBOb3RlIGxhcHRvcHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBMT0dQUkVGSVggInBjY19hY3BpOiAiCisKKy8qIERlZmluZSBBQ1BJIFBBVEhzICovCisvKiBMZXRzIG5vdGUgaG90a2V5cyAqLworI2RlZmluZSBNRVRIT0RfSEtFWV9RVUVSWQkiSElORiIKKyNkZWZpbmUgTUVUSE9EX0hLRVlfU1FUWQkiU1FUWSIKKyNkZWZpbmUgTUVUSE9EX0hLRVlfU0lORgkiU0lORiIKKyNkZWZpbmUgTUVUSE9EX0hLRVlfU1NFVAkiU1NFVCIKKyNkZWZpbmUgSEtFWV9OT1RJRlkJCSAweDgwCisKKyNkZWZpbmUgQUNQSV9QQ0NfRFJJVkVSX05BTUUJIlBhbmFzb25pYyBMYXB0b3AgU3VwcG9ydCIKKyNkZWZpbmUgQUNQSV9QQ0NfREVWSUNFX05BTUUJIkhvdGtleSIKKyNkZWZpbmUgQUNQSV9QQ0NfQ0xBU1MJCSJwY2MiCisKKyNkZWZpbmUgQUNQSV9QQ0NfSU5QVVRfUEhZUwkicGFuYXNvbmljL2hrZXkwIgorCisvKiBMQ0RfVFlQRXM6IDAgPSBOb3JtYWwsIDEgPSBTZW1pLXRyYW5zcGFyZW50CisgICBFTlZfU1RBVEVzOiBOb3JtYWwgdGVtcD0weDAxLCBIaWdoIHRlbXA9MHg4MSwgTi9BPTB4MDAKKyovCitlbnVtIFNJTkZfQklUUyB7IFNJTkZfTlVNX0JBVFRFUklFUyA9IDAsCisJCSBTSU5GX0xDRF9UWVBFLAorCQkgU0lORl9BQ19NQVhfQlJJR0hULAorCQkgU0lORl9BQ19NSU5fQlJJR0hULAorCQkgU0lORl9BQ19DVVJfQlJJR0hULAorCQkgU0lORl9EQ19NQVhfQlJJR0hULAorCQkgU0lORl9EQ19NSU5fQlJJR0hULAorCQkgU0lORl9EQ19DVVJfQlJJR0hULAorCQkgU0lORl9NVVRFLAorCQkgU0lORl9SRVNFUlZFRCwKKwkJIFNJTkZfRU5WX1NUQVRFLAorCQkgU0lORl9TVElDS1lfS0VZID0gMHg4MCwKKwl9OworLyogUjEgaGFuZGxlcyBTSU5GX0FDX0NVUl9CUklHSFQgYXMgU0lORl9DVVJfQlJJR0hULCBkb2Vzbid0IGtub3cgQUMgc3RhdGUgKi8KKworc3RhdGljIGludCBhY3BpX3BjY19ob3RrZXlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKK3N0YXRpYyBpbnQgYWNwaV9wY2NfaG90a2V5X3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOworc3RhdGljIGludCBhY3BpX3BjY19ob3RrZXlfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBwY2NfZGV2aWNlX2lkc1tdID0geworCXsgIk1BVDAwMTIiLCAwfSwKKwl7ICJNQVQwMDEzIiwgMH0sCisJeyAiTUFUMDAxOCIsIDB9LAorCXsgIk1BVDAwMTkiLCAwfSwKKwl7ICIiLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9wY2NfZHJpdmVyID0geworCS5uYW1lID0JCUFDUElfUENDX0RSSVZFUl9OQU1FLAorCS5jbGFzcyA9CUFDUElfUENDX0NMQVNTLAorCS5pZHMgPQkJcGNjX2RldmljZV9pZHMsCisJLm9wcyA9CQl7CisJCQkJLmFkZCA9CQlhY3BpX3BjY19ob3RrZXlfYWRkLAorCQkJCS5yZW1vdmUgPQlhY3BpX3BjY19ob3RrZXlfcmVtb3ZlLAorCQkJCS5yZXN1bWUgPSAgICAgICBhY3BpX3BjY19ob3RrZXlfcmVzdW1lLAorCQkJfSwKK307CisKKyNkZWZpbmUgS0VZTUFQX1NJWkUJCTExCitzdGF0aWMgY29uc3QgaW50IGluaXRpYWxfa2V5bWFwW0tFWU1BUF9TSVpFXSA9IHsKKwkvKiAgMCAqLyBLRVlfUkVTRVJWRUQsCisJLyogIDEgKi8gS0VZX0JSSUdIVE5FU1NET1dOLAorCS8qICAyICovIEtFWV9CUklHSFRORVNTVVAsCisJLyogIDMgKi8gS0VZX0RJU1BMQVlUT0dHTEUsCisJLyogIDQgKi8gS0VZX01VVEUsCisJLyogIDUgKi8gS0VZX1ZPTFVNRURPV04sCisJLyogIDYgKi8gS0VZX1ZPTFVNRVVQLAorCS8qICA3ICovIEtFWV9TTEVFUCwKKwkvKiAgOCAqLyBLRVlfUFJPRzEsIC8qIENoYW5nZSBDUFUgYm9vc3QgKi8KKwkvKiAgOSAqLyBLRVlfQkFUVEVSWSwKKwkvKiAxMCAqLyBLRVlfU1VTUEVORCwKK307CisKK3N0cnVjdCBwY2NfYWNwaSB7CisJYWNwaV9oYW5kbGUJCWhhbmRsZTsKKwl1bnNpZ25lZCBsb25nCQludW1fc2lmcjsKKwlpbnQJCQlzdGlja3lfbW9kZTsKKwl1MzIgCQkJKnNpbmY7CisJc3RydWN0IGFjcGlfZGV2aWNlCSpkZXZpY2U7CisJc3RydWN0IGlucHV0X2RldgkqaW5wdXRfZGV2OworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlCSpiYWNrbGlnaHQ7CisJaW50CQkJa2V5bWFwW0tFWU1BUF9TSVpFXTsKK307CisKK3N0cnVjdCBwY2Nfa2V5aW5wdXQgeworCXN0cnVjdCBhY3BpX2hvdGtleSAgICAgICpob3RrZXk7Cit9OworCisvKiBtZXRob2QgYWNjZXNzIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBhY3BpX3BjY193cml0ZV9zc2V0KHN0cnVjdCBwY2NfYWNwaSAqcGNjLCBpbnQgZnVuYywgaW50IHZhbCkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmpzW10gPSB7CisJCXsgLmludGVnZXIudHlwZSAgPSBBQ1BJX1RZUEVfSU5URUdFUiwKKwkJICAuaW50ZWdlci52YWx1ZSA9IGZ1bmMsIH0sCisJCXsgLmludGVnZXIudHlwZSAgPSBBQ1BJX1RZUEVfSU5URUdFUiwKKwkJICAuaW50ZWdlci52YWx1ZSA9IHZhbCwgfSwKKwl9OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtcyA9IHsKKwkJLmNvdW50ICAgPSBBUlJBWV9TSVpFKGluX29ianMpLAorCQkucG9pbnRlciA9IGluX29ianMsCisJfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNjX3dyaXRlX3NzZXQiKTsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHBjYy0+aGFuZGxlLCBNRVRIT0RfSEtFWV9TU0VULAorCQkJCSAgICAgICZwYXJhbXMsIE5VTEwpOworCisJcmV0dXJuIHN0YXR1cyA9PSBBRV9PSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWNwaV9wY2NfZ2V0X3NxdHkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHM7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2NfZ2V0X3NxdHkiKTsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgTUVUSE9EX0hLRVlfU1FUWSwKKwkJCQkgICAgICAgTlVMTCwgJnMpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIHM7CisJZWxzZSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICAiZXZhbHVhdGlvbiBlcnJvciBIS0VZLlNRVFlcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IGFjcGlfcGNjX3JldHJpZXZlX2Jpb3NkYXRhKHN0cnVjdCBwY2NfYWNwaSAqcGNjLCB1MzIgKnNpbmYpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCXVuaW9uIGFjcGlfb2JqZWN0ICpoa2V5ID0gTlVMTDsKKwlpbnQgaTsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNjX3JldHJpZXZlX2Jpb3NkYXRhIik7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChwY2MtPmhhbmRsZSwgTUVUSE9EX0hLRVlfU0lORiwgMCwKKwkJCQkgICAgICAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKKwkJCQkgICJldmFsdWF0aW9uIGVycm9yIEhLRVkuU0lORlxuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwloa2V5ID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKCFoa2V5IHx8IChoa2V5LT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSkgeworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBIS0VZLlNJTkZcbiIpKTsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKHBjYy0+bnVtX3NpZnIgPCBoa2V5LT5wYWNrYWdlLmNvdW50KSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICJTUVRZIHJlcG9ydHMgYmFkIFNJTkYgbGVuZ3RoXG4iKSk7CisJCXN0YXR1cyA9IEFFX0VSUk9SOworCQlnb3RvIGVuZDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaGtleS0+cGFja2FnZS5jb3VudDsgaSsrKSB7CisJCXVuaW9uIGFjcGlfb2JqZWN0ICplbGVtZW50ID0gJihoa2V5LT5wYWNrYWdlLmVsZW1lbnRzW2ldKTsKKwkJaWYgKGxpa2VseShlbGVtZW50LT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSkgeworCQkJc2luZltpXSA9IGVsZW1lbnQtPmludGVnZXIudmFsdWU7CisJCX0gZWxzZQorCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKKwkJCQkJICJJbnZhbGlkIEhLRVkuU0lORiBkYXRhXG4iKSk7CisJfQorCXNpbmZbaGtleS0+cGFja2FnZS5jb3VudF0gPSAtMTsKKworZW5kOgorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gc3RhdHVzID09IEFFX09LOworfQorCisvKiBiYWNrbGlnaHQgQVBJIGludGVyZmFjZSBmdW5jdGlvbnMgKi8KKworLyogVGhpcyBkcml2ZXIgY3VycmVudGx5IHRyZWF0cyBBQyBhbmQgREMgYnJpZ2h0bmVzcyBpZGVudGljYWwsCisgKiBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGludmVudCBhbiBpbnRlcmZhY2UgdG8gdGhlIGNvcmUgQUNQSQorICogbG9naWMgdG8gcmVjZWl2ZSBldmVudHMgaW4gY2FzZSBhIHBvd2VyIHN1cHBseSBpcyBwbHVnZ2VkIGluCisgKiBvciByZW1vdmVkICovCisKK3N0YXRpYyBpbnQgYmxfZ2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlzdHJ1Y3QgcGNjX2FjcGkgKnBjYyA9IGJsX2dldF9kYXRhKGJkKTsKKworCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBwY2MtPnNpbmZbU0lORl9BQ19DVVJfQlJJR0hUXTsKK30KKworc3RhdGljIGludCBibF9zZXRfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlzdHJ1Y3QgcGNjX2FjcGkgKnBjYyA9IGJsX2dldF9kYXRhKGJkKTsKKwlpbnQgYnJpZ2h0ID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisJaW50IHJjOworCisJaWYgKCFhY3BpX3BjY19yZXRyaWV2ZV9iaW9zZGF0YShwY2MsIHBjYy0+c2luZikpCisJCXJldHVybiAtRUlPOworCisJaWYgKGJyaWdodCA8IHBjYy0+c2luZltTSU5GX0FDX01JTl9CUklHSFRdKQorCQlicmlnaHQgPSBwY2MtPnNpbmZbU0lORl9BQ19NSU5fQlJJR0hUXTsKKworCWlmIChicmlnaHQgPCBwY2MtPnNpbmZbU0lORl9EQ19NSU5fQlJJR0hUXSkKKwkJYnJpZ2h0ID0gcGNjLT5zaW5mW1NJTkZfRENfTUlOX0JSSUdIVF07CisKKwlpZiAoYnJpZ2h0IDwgcGNjLT5zaW5mW1NJTkZfQUNfTUlOX0JSSUdIVF0gfHwKKwkgICAgYnJpZ2h0ID4gcGNjLT5zaW5mW1NJTkZfQUNfTUFYX0JSSUdIVF0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmMgPSBhY3BpX3BjY193cml0ZV9zc2V0KHBjYywgU0lORl9BQ19DVVJfQlJJR0hULCBicmlnaHQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiBhY3BpX3BjY193cml0ZV9zc2V0KHBjYywgU0lORl9EQ19DVVJfQlJJR0hULCBicmlnaHQpOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgcGNjX2JhY2tsaWdodF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzCT0gYmxfZ2V0LAorCS51cGRhdGVfc3RhdHVzCT0gYmxfc2V0X3N0YXR1cywKK307CisKKworLyogc3lzZnMgdXNlciBpbnRlcmZhY2UgZnVuY3Rpb25zICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbnVtYmF0dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBwY2NfYWNwaSAqcGNjID0gYWNwaV9kcml2ZXJfZGF0YShhY3BpKTsKKworCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9OVU1fQkFUVEVSSUVTXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbGNkdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBwY2NfYWNwaSAqcGNjID0gYWNwaV9kcml2ZXJfZGF0YShhY3BpKTsKKworCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9MQ0RfVFlQRV0pOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X211dGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGNjX2FjcGkgKnBjYyA9IGFjcGlfZHJpdmVyX2RhdGEoYWNwaSk7CisKKwlpZiAoIWFjcGlfcGNjX3JldHJpZXZlX2Jpb3NkYXRhKHBjYywgcGNjLT5zaW5mKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcGNjLT5zaW5mW1NJTkZfTVVURV0pOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3N0aWNreShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJc3RydWN0IHBjY19hY3BpICpwY2MgPSBhY3BpX2RyaXZlcl9kYXRhKGFjcGkpOworCisJaWYgKCFhY3BpX3BjY19yZXRyaWV2ZV9iaW9zZGF0YShwY2MsIHBjYy0+c2luZikpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHBjYy0+c2luZltTSU5GX1NUSUNLWV9LRVldKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3N0aWNreShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBwY2NfYWNwaSAqcGNjID0gYWNwaV9kcml2ZXJfZGF0YShhY3BpKTsKKwlpbnQgdmFsOworCisJaWYgKGNvdW50ICYmIHNzY2FuZihidWYsICIlaSIsICZ2YWwpID09IDEgJiYKKwkgICAgKHZhbCA9PSAwIHx8IHZhbCA9PSAxKSkgeworCQlhY3BpX3BjY193cml0ZV9zc2V0KHBjYywgU0lORl9TVElDS1lfS0VZLCB2YWwpOworCQlwY2MtPnN0aWNreV9tb2RlID0gdmFsOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG51bWJhdHQsIFNfSVJVR08sIHNob3dfbnVtYmF0dCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGNkdHlwZSwgU19JUlVHTywgc2hvd19sY2R0eXBlLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtdXRlLCBTX0lSVUdPLCBzaG93X211dGUsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN0aWNreV9rZXksIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3N0aWNreSwgc2V0X3N0aWNreSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2Nfc3lzZnNfZW50cmllc1tdID0geworCSZkZXZfYXR0cl9udW1iYXR0LmF0dHIsCisJJmRldl9hdHRyX2xjZHR5cGUuYXR0ciwKKwkmZGV2X2F0dHJfbXV0ZS5hdHRyLAorCSZkZXZfYXR0cl9zdGlja3lfa2V5LmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjY19hdHRyX2dyb3VwID0geworCS5uYW1lCT0gTlVMTCwJCS8qIHB1dCBpbiBkZXZpY2UgZGlyZWN0b3J5ICovCisJLmF0dHJzCT0gcGNjX3N5c2ZzX2VudHJpZXMsCit9OworCisKKy8qIGhvdGtleSBpbnB1dCBkZXZpY2UgZHJpdmVyICovCisKK3N0YXRpYyBpbnQgcGNjX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3QgcGNjX2FjcGkgKnBjYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoc2NhbmNvZGUgPj0gQVJSQVlfU0laRShwY2MtPmtleW1hcCkpCisJCXJldHVybiAtRUlOVkFMOworCisJKmtleWNvZGUgPSBwY2MtPmtleW1hcFtzY2FuY29kZV07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrZXltYXBfZ2V0X2J5X2tleWNvZGUoc3RydWN0IHBjY19hY3BpICpwY2MsIGludCBrZXljb2RlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNjLT5rZXltYXApOyBpKyspIHsKKwkJaWYgKHBjYy0+a2V5bWFwW2ldID09IGtleWNvZGUpCisJCQlyZXR1cm4gaSsxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjY19zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3QgcGNjX2FjcGkgKnBjYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJaW50IG9sZGtleWNvZGU7CisKKwlpZiAoc2NhbmNvZGUgPj0gQVJSQVlfU0laRShwY2MtPmtleW1hcCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGtleWNvZGUgPCAwIHx8IGtleWNvZGUgPiBLRVlfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9sZGtleWNvZGUgPSBwY2MtPmtleW1hcFtzY2FuY29kZV07CisJcGNjLT5rZXltYXBbc2NhbmNvZGVdID0ga2V5Y29kZTsKKworCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCisJaWYgKCFrZXltYXBfZ2V0X2J5X2tleWNvZGUocGNjLCBvbGRrZXljb2RlKSkKKwkJY2xlYXJfYml0KG9sZGtleWNvZGUsIGRldi0+a2V5Yml0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY3BpX3BjY19nZW5lcmF0ZV9rZXlpbnB1dChzdHJ1Y3QgcGNjX2FjcGkgKnBjYykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpob3RrX2lucHV0X2RldiA9IHBjYy0+aW5wdXRfZGV2OworCWludCByYzsKKwlpbnQga2V5X2NvZGUsIGhrZXlfbnVtOworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHQ7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjY19nZW5lcmF0ZV9rZXlpbnB1dCIpOworCisJcmMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocGNjLT5oYW5kbGUsIE1FVEhPRF9IS0VZX1FVRVJZLAorCQkJCSAgIE5VTEwsICZyZXN1bHQpOworCWlmICghQUNQSV9TVUNDRVNTKHJjKSkgeworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAorCQkJCSAiZXJyb3IgZ2V0dGluZyBob3RrZXkgc3RhdHVzXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KHBjYy0+ZGV2aWNlLCBIS0VZX05PVElGWSwgcmVzdWx0KTsKKworCWhrZXlfbnVtID0gcmVzdWx0ICYgMHhmOworCisJaWYgKGhrZXlfbnVtIDwgMCB8fCBoa2V5X251bSA+IEFSUkFZX1NJWkUocGNjLT5rZXltYXApKSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICAiaG90a2V5IG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkXG4iLAorCQkJCSAgaGtleV9udW0pKTsKKwkJcmV0dXJuOworCX0KKworCWtleV9jb2RlID0gcGNjLT5rZXltYXBbaGtleV9udW1dOworCisJaWYgKGtleV9jb2RlICE9IEtFWV9SRVNFUlZFRCkgeworCQlpbnQgcHVzaGVkID0gKHJlc3VsdCAmIDB4ODApID8gVFJVRSA6IEZBTFNFOworCisJCWlucHV0X3JlcG9ydF9rZXkoaG90a19pbnB1dF9kZXYsIGtleV9jb2RlLCBwdXNoZWQpOworCQlpbnB1dF9zeW5jKGhvdGtfaW5wdXRfZGV2KTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGNjX2hvdGtleV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBjY19hY3BpICpwY2MgPSAoc3RydWN0IHBjY19hY3BpICopIGRhdGE7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjY19ob3RrZXlfbm90aWZ5Iik7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBIS0VZX05PVElGWToKKwkJYWNwaV9wY2NfZ2VuZXJhdGVfa2V5aW5wdXQocGNjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbm90aGluZyB0byBkbyAqLworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wY2NfaW5pdF9pbnB1dChzdHJ1Y3QgcGNjX2FjcGkgKnBjYykKK3sKKwlpbnQgaSwgcmM7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjY19pbml0X2lucHV0Iik7CisKKwlwY2MtPmlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghcGNjLT5pbnB1dF9kZXYpIHsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKKwkJCQkgICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnB1dCBkZXZpY2UgZm9yIGhvdGtleSIpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGNjLT5pbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7CisKKwlwY2MtPmlucHV0X2Rldi0+bmFtZSA9IEFDUElfUENDX0RSSVZFUl9OQU1FOworCXBjYy0+aW5wdXRfZGV2LT5waHlzID0gQUNQSV9QQ0NfSU5QVVRfUEhZUzsKKwlwY2MtPmlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCXBjYy0+aW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAweDAwMDE7CisJcGNjLT5pbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CisJcGNjLT5pbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CisJcGNjLT5pbnB1dF9kZXYtPmdldGtleWNvZGUgPSBwY2NfZ2V0a2V5Y29kZTsKKwlwY2MtPmlucHV0X2Rldi0+c2V0a2V5Y29kZSA9IHBjY19zZXRrZXljb2RlOworCisJLyogbG9hZCBpbml0aWFsIGtleW1hcCAqLworCW1lbWNweShwY2MtPmtleW1hcCwgaW5pdGlhbF9rZXltYXAsIHNpemVvZihwY2MtPmtleW1hcCkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNjLT5rZXltYXApOyBpKyspCisJCV9fc2V0X2JpdChwY2MtPmtleW1hcFtpXSwgcGNjLT5pbnB1dF9kZXYtPmtleWJpdCk7CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBwY2MtPmlucHV0X2Rldi0+a2V5Yml0KTsKKworCWlucHV0X3NldF9kcnZkYXRhKHBjYy0+aW5wdXRfZGV2LCBwY2MpOworCisJcmMgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocGNjLT5pbnB1dF9kZXYpOworCWlmIChyYyA8IDApCisJCWlucHV0X2ZyZWVfZGV2aWNlKHBjYy0+aW5wdXRfZGV2KTsKKworCXJldHVybiByYzsKK30KKworLyoga2VybmVsIG1vZHVsZSBpbnRlcmZhY2UgKi8KKworc3RhdGljIGludCBhY3BpX3BjY19ob3RrZXlfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2NfYWNwaSAqcGNjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCisJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2NfaG90a2V5X3Jlc3VtZSIpOworCisJaWYgKGRldmljZSA9PSBOVUxMIHx8IHBjYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJTdGlja3kgbW9kZSByZXN0b3JlOiAlZFxuIiwKKwkJCSAgcGNjLT5zdGlja3lfbW9kZSkpOworCisJc3RhdHVzID0gYWNwaV9wY2Nfd3JpdGVfc3NldChwY2MsIFNJTkZfU1RJQ0tZX0tFWSwgcGNjLT5zdGlja3lfbW9kZSk7CisKKwlyZXR1cm4gc3RhdHVzID09IEFFX09LID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wY2NfaG90a2V5X2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHBjY19hY3BpICpwY2M7CisJaW50IG51bV9zaWZyLCByZXN1bHQ7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjY19ob3RrZXlfYWRkIik7CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwludW1fc2lmciA9IGFjcGlfcGNjX2dldF9zcXR5KGRldmljZSk7CisKKwlpZiAobnVtX3NpZnIgPiAyNTUpIHsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIm51bV9zaWZyIHRvbyBsYXJnZSIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjY19hY3BpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2MpIHsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKKwkJCQkgICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW0gZm9yIHBjYyIpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGNjLT5zaW5mID0ga3phbGxvYyhzaXplb2YodTMyKSAqIChudW1fc2lmciArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjYy0+c2luZikgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ob3RrZXk7CisJfQorCisJcGNjLT5kZXZpY2UgPSBkZXZpY2U7CisJcGNjLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKKwlwY2MtPm51bV9zaWZyID0gbnVtX3NpZnI7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IHBjYzsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1BDQ19ERVZJQ0VfTkFNRSk7CisJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfUENDX0NMQVNTKTsKKworCXJlc3VsdCA9IGFjcGlfcGNjX2luaXRfaW5wdXQocGNjKTsKKwlpZiAocmVzdWx0KSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICAiRXJyb3IgaW5zdGFsbGluZyBrZXlpbnB1dCBoYW5kbGVyXG4iKSk7CisJCWdvdG8gb3V0X3NpbmY7CisJfQorCisJLyogaW5pdGlhbGl6ZSBob3RrZXkgaW5wdXQgZGV2aWNlICovCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKHBjYy0+aGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgICAgYWNwaV9wY2NfaG90a2V5X25vdGlmeSwgcGNjKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAorCQkJCSAgIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfaW5wdXQ7CisJfQorCisJLyogaW5pdGlhbGl6ZSBiYWNrbGlnaHQgKi8KKwlwY2MtPmJhY2tsaWdodCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInBhbmFzb25pYyIsIE5VTEwsIHBjYywKKwkJCQkJCSAgICZwY2NfYmFja2xpZ2h0X29wcyk7CisJaWYgKElTX0VSUihwY2MtPmJhY2tsaWdodCkpCisJCWdvdG8gb3V0X25vdGlmeTsKKworCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICJDb3VsZG4ndCByZXRyaWV2ZSBCSU9TIGRhdGFcbiIpKTsKKwkJZ290byBvdXRfYmFja2xpZ2h0OworCX0KKworCS8qIHJlYWQgdGhlIGluaXRpYWwgYnJpZ2h0bmVzcyBzZXR0aW5nIGZyb20gdGhlIGhhcmR3YXJlICovCisJcGNjLT5iYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzID0KKwkJCQkJcGNjLT5zaW5mW1NJTkZfQUNfTUFYX0JSSUdIVF07CisJcGNjLT5iYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPSBwY2MtPnNpbmZbU0lORl9BQ19DVVJfQlJJR0hUXTsKKworCS8qIHJlYWQgdGhlIGluaXRpYWwgc3RpY2t5IGtleSBtb2RlIGZyb20gdGhlIGhhcmR3YXJlICovCisJcGNjLT5zdGlja3lfbW9kZSA9IHBjYy0+c2luZltTSU5GX1NUSUNLWV9LRVldOworCisJLyogYWRkIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldmljZS0+ZGV2LmtvYmosICZwY2NfYXR0cl9ncm91cCk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBvdXRfYmFja2xpZ2h0OworCisJcmV0dXJuIDA7CisKK291dF9iYWNrbGlnaHQ6CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHBjYy0+YmFja2xpZ2h0KTsKK291dF9ub3RpZnk6CisJYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIocGNjLT5oYW5kbGUsIEFDUElfREVWSUNFX05PVElGWSwKKwkJCQkgICBhY3BpX3BjY19ob3RrZXlfbm90aWZ5KTsKK291dF9pbnB1dDoKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShwY2MtPmlucHV0X2Rldik7CisJLyogbm8gbmVlZCB0byBpbnB1dF9mcmVlX2RldmljZSgpIHNpbmNlIGNvcmUgaW5wdXQgQVBJIHJlZmNvdW50IGFuZAorCSAqIGZyZWUoKXMgdGhlIGRldmljZSAqLworb3V0X3NpbmY6CisJa2ZyZWUocGNjLT5zaW5mKTsKK291dF9ob3RrZXk6CisJa2ZyZWUocGNjKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfcGNjX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNjX2luaXQiKTsKKworCWlmIChhY3BpX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wY2NfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAorCQkJCSAgIkVycm9yIHJlZ2lzdGVyaW5nIGhvdGtleSBkcml2ZXJcbiIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wY2NfaG90a2V5X3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCit7CisJc3RydWN0IHBjY19hY3BpICpwY2MgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjY19ob3RrZXlfcmVtb3ZlIik7CisKKwlpZiAoIWRldmljZSB8fCAhcGNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2aWNlLT5kZXYua29iaiwgJnBjY19hdHRyX2dyb3VwKTsKKworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihwY2MtPmJhY2tsaWdodCk7CisKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihwY2MtPmhhbmRsZSwgQUNQSV9ERVZJQ0VfTk9USUZZLAorCQkJCSAgIGFjcGlfcGNjX2hvdGtleV9ub3RpZnkpOworCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocGNjLT5pbnB1dF9kZXYpOworCS8qIG5vIG5lZWQgdG8gaW5wdXRfZnJlZV9kZXZpY2UoKSBzaW5jZSBjb3JlIGlucHV0IEFQSSByZWZjb3VudCBhbmQKKwkgKiBmcmVlKClzIHRoZSBkZXZpY2UgKi8KKworCWtmcmVlKHBjYy0+c2luZik7CisJa2ZyZWUocGNjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9wY2NfZXhpdCh2b2lkKQoreworCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNjX2V4aXQiKTsKKworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BjY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhY3BpX3BjY19pbml0KTsKK21vZHVsZV9leGl0KGFjcGlfcGNjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYwppbmRleCA2MDc3NWJlLi41YTk3ZDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYwpAQCAtOTcwLDcgKzk3MCw3IEBACiAJLyogc2V0IHRoZSBsYXN0IHJlcXVlc3RlZCBicmlnaHRuZXNzIGxldmVsICovCiAJaWYgKHNvbnlfYmFja2xpZ2h0X2RldmljZSAmJgogCQkJIXNvbnlfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc29ueV9iYWNrbGlnaHRfZGV2aWNlKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfUEZYICJ1bmFibGUgdG8gcmVzdG9yZSBicmlnaHRuZXNzIGxldmVsIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX1BGWCAidW5hYmxlIHRvIHJlc3RvcmUgYnJpZ2h0bmVzcyBsZXZlbFxuIik7CiAKIAkvKiByZS1pbml0aWFsaXplIG1vZGVscyB3aXRoIHNwZWNpZmljIHJlcXVpcmVtZW50cyAqLwogCWRtaV9jaGVja19zeXN0ZW0oc29ueV9uY19pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvbWlzYy90aGlua3BhZF9hY3BpLmMKaW5kZXggNmI5MzAwNy4uNGRiMWNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5jCkBAIC0xNTksNyArMTU5LDYgQEAKICNkZWZpbmUgVFBBQ1BJX0RFQlVHICBLRVJOX0RFQlVHICBUUEFDUElfTE9HCiAKICNkZWZpbmUgVFBBQ1BJX0RCR19BTEwJCTB4ZmZmZgotI2RlZmluZSBUUEFDUElfREJHX0FMTAkJMHhmZmZmCiAjZGVmaW5lIFRQQUNQSV9EQkdfSU5JVAkJMHgwMDAxCiAjZGVmaW5lIFRQQUNQSV9EQkdfRVhJVAkJMHgwMDAyCiAjZGVmaW5lIGRiZ19wcmludGsoYV9kYmdfbGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCkBAIC01NDMsNyArNTQyLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JYWNwaV9kcml2ZXJfZGF0YShpYm0tPmFjcGktPmRldmljZSkgPSBpYm07CisJaWJtLT5hY3BpLT5kZXZpY2UtPmRyaXZlcl9kYXRhID0gaWJtOwogCXNwcmludGYoYWNwaV9kZXZpY2VfY2xhc3MoaWJtLT5hY3BpLT5kZXZpY2UpLCAiJXMvJXMiLAogCQlUUEFDUElfQUNQSV9FVkVOVF9QUkVGSVgsCiAJCWlibS0+bmFtZSk7CkBAIC01ODIsNyArNTgxLDggQEAKIAogCWlibS0+YWNwaS0+ZHJpdmVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpYm0tPmFjcGktPmRyaXZlcikgewotCQlwcmludGsoVFBBQ1BJX0VSUiAia3phbGxvYyhpYm0tPmRyaXZlcikgZmFpbGVkXG4iKTsKKwkJcHJpbnRrKFRQQUNQSV9FUlIKKwkJICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpYm0tPmFjcGktPmRyaXZlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODM4LDYgKzgzOCwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB0cGFjcGlfZGlzYWJsZV9icmlnaHRuZXNzX2RlbGF5KHZvaWQpCit7CisJaWYgKGFjcGlfZXZhbGYoaGtleV9oYW5kbGUsIE5VTEwsICJQV01TIiwgInF2ZCIsIDApKQorCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkJIkFDUEkgYmFja2xpZ2h0IGNvbnRyb2wgZGVsYXkgZGlzYWJsZWRcbiIpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCB0cGFjcGlfcXVlcnlfYmNsX2xldmVscyhhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKQEAgLTIxMzksNiArMjE0Niw4IEBACiAJaWYgKCF0cF9mZWF0dXJlcy5ob3RrZXkpCiAJCXJldHVybiAxOwogCisJdHBhY3BpX2Rpc2FibGVfYnJpZ2h0bmVzc19kZWxheSgpOworCiAJaG90a2V5X2Rldl9hdHRyaWJ1dGVzID0gY3JlYXRlX2F0dHJfc2V0KDEzLCBOVUxMKTsKIAlpZiAoIWhvdGtleV9kZXZfYXR0cmlidXRlcykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNTEyLDYgKzI1MjEsOCBAQAogCiBzdGF0aWMgdm9pZCBob3RrZXlfcmVzdW1lKHZvaWQpCiB7CisJdHBhY3BpX2Rpc2FibGVfYnJpZ2h0bmVzc19kZWxheSgpOworCiAJaWYgKGhvdGtleV9tYXNrX2dldCgpKQogCQlwcmludGsoVFBBQ1BJX0VSUgogCQkgICAgICAgImVycm9yIHdoaWxlIHRyeWluZyB0byByZWFkIGhvdCBrZXkgbWFzayAiCkBAIC01OTgzLDYgKzU5OTQsNTIgQEAKIAlmbHVzaF93b3JrcXVldWUodHBhY3BpX3dxKTsKIH0KIAorc3RhdGljIHZvaWQgZmFuX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQoreworCWlmICghZmFuX2NvbnRyb2xfYWxsb3dlZCkKKwkJcmV0dXJuOworCisJLyogU3RvcmUgZmFuIHN0YXR1cyBpbiBjYWNoZSAqLworCWZhbl9nZXRfc3RhdHVzX3NhZmUoTlVMTCk7CisJaWYgKHRwX2ZlYXR1cmVzLmZhbl9jdHJsX3N0YXR1c191bmRlZikKKwkJZmFuX2NvbnRyb2xfZGVzaXJlZF9sZXZlbCA9IFRQX0VDX0ZBTl9BVVRPOworfQorCitzdGF0aWMgdm9pZCBmYW5fcmVzdW1lKHZvaWQpCit7CisJdTggc2F2ZWRfZmFuX2xldmVsOworCXU4IGN1cnJlbnRfbGV2ZWwgPSA3OworCWJvb2wgZG9fc2V0ID0gZmFsc2U7CisKKwkvKiBEU0RUICphbHdheXMqIHVwZGF0ZXMgc3RhdHVzIG9uIHJlc3VtZSAqLworCXRwX2ZlYXR1cmVzLmZhbl9jdHJsX3N0YXR1c191bmRlZiA9IDA7CisKKwlzYXZlZF9mYW5fbGV2ZWwgPSBmYW5fY29udHJvbF9kZXNpcmVkX2xldmVsOworCWlmICghZmFuX2NvbnRyb2xfYWxsb3dlZCB8fAorCSAgICAoZmFuX2dldF9zdGF0dXNfc2FmZSgmY3VycmVudF9sZXZlbCkgPCAwKSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSkgeworCWNhc2UgVFBBQ1BJX0ZBTl9XUl9BQ1BJX1NGQU46CisJCWRvX3NldCA9IChzYXZlZF9mYW5fbGV2ZWwgPiBjdXJyZW50X2xldmVsKTsKKwkJYnJlYWs7CisJY2FzZSBUUEFDUElfRkFOX1dSX0FDUElfRkFOUzoKKwljYXNlIFRQQUNQSV9GQU5fV1JfVFBFQzoKKwkJZG9fc2V0ID0gKChzYXZlZF9mYW5fbGV2ZWwgJiBUUF9FQ19GQU5fRlVMTFNQRUVEKSB8fAorCQkJICAoc2F2ZWRfZmFuX2xldmVsID09IDcgJiYKKwkJCSAgICEoY3VycmVudF9sZXZlbCAmIFRQX0VDX0ZBTl9GVUxMU1BFRUQpKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJaWYgKGRvX3NldCkgeworCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkJInJlc3RvcmluZyBmYW4gbGV2ZWwgdG8gMHglMDJ4XG4iLAorCQkJc2F2ZWRfZmFuX2xldmVsKTsKKwkJZmFuX3NldF9sZXZlbF9zYWZlKHNhdmVkX2Zhbl9sZXZlbCk7CisJfQorfQorCiBzdGF0aWMgaW50IGZhbl9yZWFkKGNoYXIgKnApCiB7CiAJaW50IGxlbiA9IDA7CkBAIC02MTc0LDYgKzYyMzEsOCBAQAogCS5yZWFkID0gZmFuX3JlYWQsCiAJLndyaXRlID0gZmFuX3dyaXRlLAogCS5leGl0ID0gZmFuX2V4aXQsCisJLnN1c3BlbmQgPSBmYW5fc3VzcGVuZCwKKwkucmVzdW1lID0gZmFuX3Jlc3VtZSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKaW5kZXggMjRjOTdkMy4uM2QwNjdjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwpAQCAtOTIsMTggKzkyLDE3IEBACiAJbXV0ZXhfdW5sb2NrKCZvcGVuX2xvY2spOwogfQogCi1zdGF0aWMgaW50IG1tY19ibGtfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgbW1jX2Jsa19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZDsKKwlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IG1tY19ibGtfZ2V0KGJkZXYtPmJkX2Rpc2spOwogCWludCByZXQgPSAtRU5YSU87CiAKLQltZCA9IG1tY19ibGtfZ2V0KGlub2RlLT5pX2JkZXYtPmJkX2Rpc2spOwogCWlmIChtZCkgewogCQlpZiAobWQtPnVzYWdlID09IDIpCi0JCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKKwkJCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwogCQlyZXQgPSAwOwogCi0JCWlmICgoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIG1kLT5yZWFkX29ubHkpIHsKKwkJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmIG1kLT5yZWFkX29ubHkpIHsKIAkJCW1tY19ibGtfcHV0KG1kKTsKIAkJCXJldCA9IC1FUk9GUzsKIAkJfQpAQCAtMTEyLDkgKzExMSw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtbWNfYmxrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG1tY19ibGtfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJbW1jX2Jsa19wdXQobWQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCmluZGV4IDQwNjk4OWUuLjdhNzJlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKQEAgLTEzMiw2ICsxMzIsNyBAQAogCiAJYmxrX3F1ZXVlX3ByZXBfcnEobXEtPnF1ZXVlLCBtbWNfcHJlcF9yZXF1ZXN0KTsKIAlibGtfcXVldWVfb3JkZXJlZChtcS0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOworCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfTk9OUk9ULCBtcS0+cXVldWUpOwogCiAjaWZkZWYgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UKIAlpZiAoaG9zdC0+bWF4X2h3X3NlZ3MgPT0gMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggYWUxNmQ4NC4uM2IyMDg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC0zLDYgKzMsOSBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBtYWludGVjaCBHbWJILCBUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+CiAgKgorICogQ3VycmVudCBkcml2ZXIgbWFpbnRhaW5lZCBieSBCZW4gRG9va3MgYW5kIFNpbXRlYyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCAoQykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTEzLDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC0zOSw5ICs0Myw5IEBACiAJZGJnX2NvbmYgID0gKDEgPDwgOCksCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGRiZ21hcF9lcnIgICA9IGRiZ19lcnIgfCBkYmdfZmFpbDsKK3N0YXRpYyBjb25zdCBpbnQgZGJnbWFwX2VyciAgID0gZGJnX2ZhaWw7CiBzdGF0aWMgY29uc3QgaW50IGRiZ21hcF9pbmZvICA9IGRiZ19pbmZvIHwgZGJnX2NvbmY7Ci1zdGF0aWMgY29uc3QgaW50IGRiZ21hcF9kZWJ1ZyA9IGRiZ19kZWJ1ZzsKK3N0YXRpYyBjb25zdCBpbnQgZGJnbWFwX2RlYnVnID0gZGJnX2VyciB8IGRiZ19kZWJ1ZzsKIAogI2RlZmluZSBkYmcoaG9zdCwgY2hhbm5lbHMsIGFyZ3MuLi4pCQkgIFwKIAlkbyB7CQkJCQkgIFwKQEAgLTE4OSw3ICsxOTMsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZGF0YV9idWZmZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LAotCQkJCSAgdTMyICp3b3JkcywgdTMyICoqcG9pbnRlcikKKwkJCQkgIHUzMiAqYnl0ZXMsIHUzMiAqKnBvaW50ZXIpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIApAQCAtMjA2LDcgKzIxMCw3IEBACiAJfQogCXNnID0gJmhvc3QtPm1ycS0+ZGF0YS0+c2dbaG9zdC0+cGlvX3NncHRyXTsKIAotCSp3b3JkcyA9IHNnLT5sZW5ndGggPj4gMjsKKwkqYnl0ZXMgPSBzZy0+bGVuZ3RoOwogCSpwb2ludGVyID0gc2dfdmlydChzZyk7CiAKIAlob3N0LT5waW9fc2dwdHIrKzsKQEAgLTIyMiw3ICsyMjYsNyBAQAogCXUzMiBmaWZvc3RhdCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwogCiAJZmlmb3N0YXQgJj0gUzNDMjQxMF9TRElGU1RBX0NPVU5UTUFTSzsKLQlyZXR1cm4gZmlmb3N0YXQgPj4gMjsKKwlyZXR1cm4gZmlmb3N0YXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGZpZm9fZnJlZShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCkBAIC0yMzAsMTMgKzIzNCwxNSBAQAogCXUzMiBmaWZvc3RhdCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwogCiAJZmlmb3N0YXQgJj0gUzNDMjQxMF9TRElGU1RBX0NPVU5UTUFTSzsKLQlyZXR1cm4gKDYzIC0gZmlmb3N0YXQpID4+IDI7CisJcmV0dXJuIDYzIC0gZmlmb3N0YXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3Bpb19yZWFkKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKIHsKIAlpbnQgcmVzOwogCXUzMiBmaWZvOworCXUzMiAqcHRyOworCXUzMiBmaWZvX3dvcmRzOwogCXZvaWQgX19pb21lbSAqZnJvbV9wdHI7CiAKIAkvKiB3cml0ZSByZWFsIHByZXNjYWxlciB0byBob3N0LCBpdCBtaWdodCBiZSBzZXQgc2xvdyB0byBmaXggKi8KQEAgLTI0NSw4ICsyNTEsOCBAQAogCWZyb21fcHRyID0gaG9zdC0+YmFzZSArIGhvc3QtPnNkaWRhdGE7CiAKIAl3aGlsZSAoKGZpZm8gPSBmaWZvX2NvdW50KGhvc3QpKSkgewotCQlpZiAoIWhvc3QtPnBpb193b3JkcykgewotCQkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fd29yZHMsCisJCWlmICghaG9zdC0+cGlvX2J5dGVzKSB7CisJCQlyZXMgPSBnZXRfZGF0YV9idWZmZXIoaG9zdCwgJmhvc3QtPnBpb19ieXRlcywKIAkJCQkJICAgICAgJmhvc3QtPnBpb19wdHIpOwogCQkJaWYgKHJlcykgewogCQkJCWhvc3QtPnBpb19hY3RpdmUgPSBYRkVSX05PTkU7CkBAIC0yNTksMjYgKzI2NSw0NyBAQAogCiAJCQlkYmcoaG9zdCwgZGJnX3BpbywKIAkJCSAgICAicGlvX3JlYWQoKTogbmV3IHRhcmdldDogWyVpXUBbJXBdXG4iLAotCQkJICAgIGhvc3QtPnBpb193b3JkcywgaG9zdC0+cGlvX3B0cik7CisJCQkgICAgaG9zdC0+cGlvX2J5dGVzLCBob3N0LT5waW9fcHRyKTsKIAkJfQogCiAJCWRiZyhob3N0LCBkYmdfcGlvLAogCQkgICAgInBpb19yZWFkKCk6IGZpZm86WyUwMmldIGJ1ZmZlcjpbJTAzaV0gZGNudDpbJTA4WF1cbiIsCi0JCSAgICBmaWZvLCBob3N0LT5waW9fd29yZHMsCisJCSAgICBmaWZvLCBob3N0LT5waW9fYnl0ZXMsCiAJCSAgICByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEQ05UKSk7CiAKLQkJaWYgKGZpZm8gPiBob3N0LT5waW9fd29yZHMpCi0JCQlmaWZvID0gaG9zdC0+cGlvX3dvcmRzOworCQkvKiBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIHdlIGNhbgorCQkgKiByZWFkIGEgd29yZCBhbmQgZ2V0IDEgdG8gMyBieXRlcy4gIElmIHdlIGluIHRoZQorCQkgKiBtaWRkbGUgb2YgdGhlIGJsb2NrLCB3ZSBoYXZlIHRvIHJlYWQgZnVsbCB3b3JkcywKKwkJICogb3RoZXJ3aXNlIHdlIHdpbGwgd3JpdGUgZ2FyYmFnZSwgc28gcm91bmQgZG93biB0bworCQkgKiBhbiBldmVuIG11bHRpcGxlIG9mIDQuICovCisJCWlmIChmaWZvID49IGhvc3QtPnBpb19ieXRlcykKKwkJCWZpZm8gPSBob3N0LT5waW9fYnl0ZXM7CisJCWVsc2UKKwkJCWZpZm8gLT0gZmlmbyAmIDM7CiAKLQkJaG9zdC0+cGlvX3dvcmRzIC09IGZpZm87CisJCWhvc3QtPnBpb19ieXRlcyAtPSBmaWZvOwogCQlob3N0LT5waW9fY291bnQgKz0gZmlmbzsKIAotCQl3aGlsZSAoZmlmby0tKQotCQkJKihob3N0LT5waW9fcHRyKyspID0gcmVhZGwoZnJvbV9wdHIpOworCQlmaWZvX3dvcmRzID0gZmlmbyA+PiAyOworCQlwdHIgPSBob3N0LT5waW9fcHRyOworCQl3aGlsZSAoZmlmb193b3Jkcy0tKQorCQkJKnB0cisrID0gcmVhZGwoZnJvbV9wdHIpOworCQlob3N0LT5waW9fcHRyID0gcHRyOworCisJCWlmIChmaWZvICYgMykgeworCQkJdTMyIG4gPSBmaWZvICYgMzsKKwkJCXUzMiBkYXRhID0gcmVhZGwoZnJvbV9wdHIpOworCQkJdTggKnAgPSAodTggKilob3N0LT5waW9fcHRyOworCisJCQl3aGlsZSAobi0tKSB7CisJCQkJKnArKyA9IGRhdGE7CisJCQkJZGF0YSA+Pj0gODsKKwkJCX0KKwkJfQogCX0KIAotCWlmICghaG9zdC0+cGlvX3dvcmRzKSB7Ci0JCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX3dvcmRzLCAmaG9zdC0+cGlvX3B0cik7CisJaWYgKCFob3N0LT5waW9fYnl0ZXMpIHsKKwkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fYnl0ZXMsICZob3N0LT5waW9fcHRyKTsKIAkJaWYgKHJlcykgewogCQkJZGJnKGhvc3QsIGRiZ19waW8sCiAJCQkgICAgInBpb19yZWFkKCk6IGNvbXBsZXRlIChubyBtb3JlIGJ1ZmZlcnMpLlxuIik7CkBAIC0yOTgsMTIgKzMyNSwxMyBAQAogCXZvaWQgX19pb21lbSAqdG9fcHRyOwogCWludCByZXM7CiAJdTMyIGZpZm87CisJdTMyICpwdHI7CiAKIAl0b19wdHIgPSBob3N0LT5iYXNlICsgaG9zdC0+c2RpZGF0YTsKIAogCXdoaWxlICgoZmlmbyA9IGZpZm9fZnJlZShob3N0KSkpIHsKLQkJaWYgKCFob3N0LT5waW9fd29yZHMpIHsKLQkJCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX3dvcmRzLAorCQlpZiAoIWhvc3QtPnBpb19ieXRlcykgeworCQkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fYnl0ZXMsCiAJCQkJCQkJJmhvc3QtPnBpb19wdHIpOwogCQkJaWYgKHJlcykgewogCQkJCWRiZyhob3N0LCBkYmdfcGlvLApAQCAtMzE1LDE4ICszNDMsMjcgQEAKIAogCQkJZGJnKGhvc3QsIGRiZ19waW8sCiAJCQkgICAgInBpb193cml0ZSgpOiBuZXcgc291cmNlOiBbJWldQFslcF1cbiIsCi0JCQkgICAgaG9zdC0+cGlvX3dvcmRzLCBob3N0LT5waW9fcHRyKTsKKwkJCSAgICBob3N0LT5waW9fYnl0ZXMsIGhvc3QtPnBpb19wdHIpOwogCiAJCX0KIAotCQlpZiAoZmlmbyA+IGhvc3QtPnBpb193b3JkcykKLQkJCWZpZm8gPSBob3N0LT5waW9fd29yZHM7CisJCS8qIElmIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBibG9jaywgd2UgaGF2ZSB0bworCQkgKiB3cml0ZSBleGFjdGx5IHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzLiAgSWYgd2UKKwkJICogaW4gdGhlIG1pZGRsZSBvZiB0aGUgYmxvY2ssIHdlIGhhdmUgdG8gd3JpdGUgZnVsbAorCQkgKiB3b3Jkcywgc28gcm91bmQgZG93biB0byBhbiBldmVuIG11bHRpcGxlIG9mIDQuICovCisJCWlmIChmaWZvID49IGhvc3QtPnBpb19ieXRlcykKKwkJCWZpZm8gPSBob3N0LT5waW9fYnl0ZXM7CisJCWVsc2UKKwkJCWZpZm8gLT0gZmlmbyAmIDM7CiAKLQkJaG9zdC0+cGlvX3dvcmRzIC09IGZpZm87CisJCWhvc3QtPnBpb19ieXRlcyAtPSBmaWZvOwogCQlob3N0LT5waW9fY291bnQgKz0gZmlmbzsKIAorCQlmaWZvID0gKGZpZm8gKyAzKSA+PiAyOworCQlwdHIgPSBob3N0LT5waW9fcHRyOwogCQl3aGlsZSAoZmlmby0tKQotCQkJd3JpdGVsKCooaG9zdC0+cGlvX3B0cisrKSwgdG9fcHRyKTsKKwkJCXdyaXRlbCgqcHRyKyssIHRvX3B0cik7CisJCWhvc3QtPnBpb19wdHIgPSBwdHI7CiAJfQogCiAJZW5hYmxlX2ltYXNrKGhvc3QsIFMzQzI0MTBfU0RJSU1TS19UWEZJRk9IQUxGKTsKQEAgLTM0OSw5ICszODYsOSBAQAogCQljbGVhcl9pbWFzayhob3N0KTsKIAkJaWYgKGhvc3QtPnBpb19hY3RpdmUgIT0gWEZFUl9OT05FKSB7CiAJCQlkYmcoaG9zdCwgZGJnX2VyciwgInVuZmluaXNoZWQgJXMgIgotCQkJICAgICItIHBpb19jb3VudDpbJXVdIHBpb193b3JkczpbJXVdXG4iLAorCQkJICAgICItIHBpb19jb3VudDpbJXVdIHBpb19ieXRlczpbJXVdXG4iLAogCQkJICAgIChob3N0LT5waW9fYWN0aXZlID09IFhGRVJfUkVBRCkgPyAicmVhZCIgOiAid3JpdGUiLAotCQkJICAgIGhvc3QtPnBpb19jb3VudCwgaG9zdC0+cGlvX3dvcmRzKTsKKwkJCSAgICBob3N0LT5waW9fY291bnQsIGhvc3QtPnBpb19ieXRlcyk7CiAKIAkJCWlmIChob3N0LT5tcnEtPmRhdGEpCiAJCQkJaG9zdC0+bXJxLT5kYXRhLT5lcnJvciA9IC1FSU5WQUw7CkBAIC04MTIsMTEgKzg0OSwxMCBAQAogCQkvKiBXZSBjYW5ub3QgZGVhbCB3aXRoIHVuYWxpZ25lZCBibG9ja3Mgd2l0aCBtb3JlIHRoYW4KIAkJICogb25lIGJsb2NrIGJlaW5nIHRyYW5zZmVyZWQuICovCiAKLQkJaWYgKGRhdGEtPmJsb2NrcyA+IDEpCisJCWlmIChkYXRhLT5ibG9ja3MgPiAxKSB7CisJCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgZG8gbm9uLXdvcmQgc2l6ZWQgYmxvY2sgdHJhbnNmZXJzIChibGtzeiAlZClcbiIsIF9fZnVuY19fLCBkYXRhLT5ibGtzeik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBObyBzdXBwb3J0IHlldCBmb3Igbm9uLXdvcmQgYmxvY2sgdHJhbnNmZXJzLiAqLwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCXdoaWxlIChyZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKSAmCkBAIC04OTYsNyArOTMyLDcgQEAKIAlCVUdfT04oKGRhdGEtPmZsYWdzICYgQk9USF9ESVIpID09IEJPVEhfRElSKTsKIAogCWhvc3QtPnBpb19zZ3B0ciA9IDA7Ci0JaG9zdC0+cGlvX3dvcmRzID0gMDsKKwlob3N0LT5waW9fYnl0ZXMgPSAwOwogCWhvc3QtPnBpb19jb3VudCA9IDA7CiAJaG9zdC0+cGlvX2FjdGl2ZSA9IHJ3ID8gWEZFUl9XUklURSA6IFhGRVJfUkVBRDsKIApAQCAtMTAzMywxMCArMTA2OSwzMyBAQAogCQlzM2NtY2lfc2VuZF9yZXF1ZXN0KG1tYyk7CiB9CiAKK3N0YXRpYyB2b2lkIHMzY21jaV9zZXRfY2xrKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwl1MzIgbWNpX3BzYzsKKworCS8qIFNldCBjbG9jayAqLworCWZvciAobWNpX3BzYyA9IDA7IG1jaV9wc2MgPCAyNTU7IG1jaV9wc2MrKykgeworCQlob3N0LT5yZWFsX3JhdGUgPSBob3N0LT5jbGtfcmF0ZSAvIChob3N0LT5jbGtfZGl2KihtY2lfcHNjKzEpKTsKKworCQlpZiAoaG9zdC0+cmVhbF9yYXRlIDw9IGlvcy0+Y2xvY2spCisJCQlicmVhazsKKwl9CisKKwlpZiAobWNpX3BzYyA+IDI1NSkKKwkJbWNpX3BzYyA9IDI1NTsKKworCWhvc3QtPnByZXNjYWxlciA9IG1jaV9wc2M7CisJd3JpdGVsKGhvc3QtPnByZXNjYWxlciwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJUFJFKTsKKworCS8qIElmIHJlcXVlc3RlZCBjbG9jayBpcyAwLCByZWFsX3JhdGUgd2lsbCBiZSAwLCB0b28gKi8KKwlpZiAoaW9zLT5jbG9jayA9PSAwKQorCQlob3N0LT5yZWFsX3JhdGUgPSAwOworfQorCiBzdGF0aWMgdm9pZCBzM2NtY2lfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXUzMiBtY2lfcHNjLCBtY2lfY29uOworCXUzMiBtY2lfY29uOwogCiAJLyogU2V0IHRoZSBwb3dlciBzdGF0ZSAqLwogCkBAIC0xMDc0LDIzICsxMTMzLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogU2V0IGNsb2NrICovCi0JZm9yIChtY2lfcHNjID0gMDsgbWNpX3BzYyA8IDI1NTsgbWNpX3BzYysrKSB7Ci0JCWhvc3QtPnJlYWxfcmF0ZSA9IGhvc3QtPmNsa19yYXRlIC8gKGhvc3QtPmNsa19kaXYqKG1jaV9wc2MrMSkpOwotCi0JCWlmIChob3N0LT5yZWFsX3JhdGUgPD0gaW9zLT5jbG9jaykKLQkJCWJyZWFrOwotCX0KLQotCWlmIChtY2lfcHNjID4gMjU1KQotCQltY2lfcHNjID0gMjU1OwotCi0JaG9zdC0+cHJlc2NhbGVyID0gbWNpX3BzYzsKLQl3cml0ZWwoaG9zdC0+cHJlc2NhbGVyLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElQUkUpOwotCi0JLyogSWYgcmVxdWVzdGVkIGNsb2NrIGlzIDAsIHJlYWxfcmF0ZSB3aWxsIGJlIDAsIHRvbyAqLwotCWlmIChpb3MtPmNsb2NrID09IDApCi0JCWhvc3QtPnJlYWxfcmF0ZSA9IDA7CisJczNjbWNpX3NldF9jbGsoaG9zdCwgaW9zKTsKIAogCS8qIFNldCBDTE9DS19FTkFCTEUgKi8KIAlpZiAoaW9zLT5jbG9jaykKQEAgLTExNDgsNiArMTE5MSw2MSBAQAogCSAqIGNoZWNrcy4gQW55IHplcm8gZmllbGRzIHRvIGVuc3VyZSByZWFvbmFibGUgZGVmYXVsdHMgYXJlIHBpY2tlZC4gKi8KIH07CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKworc3RhdGljIGludCBzM2NtY2lfY3B1ZnJlcV90cmFuc2l0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJdW5zaWduZWQgbG9uZyBuZXdjbGs7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWhvc3QgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBzM2NtY2lfaG9zdCwgZnJlcV90cmFuc2l0aW9uKTsKKwluZXdjbGsgPSBjbGtfZ2V0X3JhdGUoaG9zdC0+Y2xrKTsKKwltbWMgPSBob3N0LT5tbWM7CisKKwlpZiAoKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAmJiBuZXdjbGsgPiBob3N0LT5jbGtfcmF0ZSkgfHwKKwkgICAgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UgJiYgbmV3Y2xrIDwgaG9zdC0+Y2xrX3JhdGUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtbWMtPmxvY2ssIGZsYWdzKTsKKworCQlob3N0LT5jbGtfcmF0ZSA9IG5ld2NsazsKKworCQlpZiAobW1jLT5pb3MucG93ZXJfbW9kZSAhPSBNTUNfUE9XRVJfT0ZGICYmCisJCSAgICBtbWMtPmlvcy5jbG9jayAhPSAwKQorCQkJczNjbWNpX3NldF9jbGsoaG9zdCwgJm1tYy0+aW9zKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbWMtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgczNjbWNpX2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWhvc3QtPmZyZXFfdHJhbnNpdGlvbi5ub3RpZmllcl9jYWxsID0gczNjbWNpX2NwdWZyZXFfdHJhbnNpdGlvbjsKKworCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZob3N0LT5mcmVxX3RyYW5zaXRpb24sCisJCQkJCSBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjbWNpX2NwdWZyZXFfZGVyZWdpc3RlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZob3N0LT5mcmVxX3RyYW5zaXRpb24sCisJCQkJICAgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzM2NtY2lfY3B1ZnJlcV9yZWdpc3RlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlzMjQ0MCkKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CkBAIC0xMjk4LDEwICsxMzk2LDE2IEBACiAJICAgIChob3N0LT5pczI0NDA/IjI0NDAiOiIiKSwKIAkgICAgaG9zdC0+YmFzZSwgaG9zdC0+aXJxLCBob3N0LT5pcnFfY2QsIGhvc3QtPmRtYSk7CiAKKwlyZXQgPSBzM2NtY2lfY3B1ZnJlcV9yZWdpc3Rlcihob3N0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxXG4iKTsKKwkJZ290byBmcmVlX2RtYWJ1ZjsKKwl9CisKIAlyZXQgPSBtbWNfYWRkX2hvc3QobW1jKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgbW1jIGhvc3QuXG4iKTsKLQkJZ290byBmcmVlX2RtYWJ1ZjsKKwkJZ290byBmcmVlX2NwdWZyZXE7CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKQEAgLTEzMDksNiArMTQxMyw5IEBACiAKIAlyZXR1cm4gMDsKIAorIGZyZWVfY3B1ZnJlcToKKwlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOworCiAgZnJlZV9kbWFidWY6CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIApAQCAtMTM0Miw2ICsxNDQ5LDcgQEAKIAlpZiAoaG9zdC0+aXJxX2NkID49IDApCiAJCWZyZWVfaXJxKGhvc3QtPmlycV9jZCwgaG9zdCk7CiAKKwlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOwogCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CiB9CkBAIC0xNDU1LDcgKzE1NjMsNyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDIE1NQy9TRCBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4sIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4iKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMC1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMi1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQ0MC1zZGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCmluZGV4IDM3ZDljNjAuLmNhMWJhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaApAQCAtNTEsNyArNTEsNyBAQAogCWludAkJCWRtYV9jb21wbGV0ZTsKIAogCXUzMgkJCXBpb19zZ3B0cjsKLQl1MzIJCQlwaW9fd29yZHM7CisJdTMyCQkJcGlvX2J5dGVzOwogCXUzMgkJCXBpb19jb3VudDsKIAl1MzIJCQkqcGlvX3B0cjsKICNkZWZpbmUgWEZFUl9OT05FIDAKQEAgLTY3LDQgKzY3LDggQEAKIAogCXVuc2lnbmVkIGludAkJY2NudCwgZGNudDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcGlvX3Rhc2tsZXQ7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJZnJlcV90cmFuc2l0aW9uOworI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKaW5kZXggMTRmMTFmOC4uYTkwZDUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCkBAIC0xNzIsNiArMTcyLDExIEBACiAJICBtZW1vcnkgY2hpcHMsIGFuZCBhbHNvIHVzZSBpb2N0bCgpIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dAogCSAgdGhlIGRldmljZSwgb3IgdG8gZXJhc2UgcGFydHMgb2YgaXQuCiAKK2NvbmZpZyBIQVZFX01URF9PVFAKKwlib29sCisJaGVscAorCSAgRW5hYmxlIGFjY2VzcyB0byBPVFAgcmVnaW9ucyB1c2luZyBNVERfQ0hBUi4KKwogY29uZmlnIE1URF9CTEtERVZTCiAJdHJpc3RhdGUgIkNvbW1vbiBpbnRlcmZhY2UgdG8gYmxvY2sgbGF5ZXIgZm9yIE1URCAndHJhbnNsYXRpb24gbGF5ZXJzJyIKIAlkZXBlbmRzIG9uIEJMT0NLCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwppbmRleCA0NzlkMzJiLi45NDA4MDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiBjb25maWcgTVREX0NGSQogCXRyaXN0YXRlICJEZXRlY3QgZmxhc2ggY2hpcHMgYnkgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKSBwcm9iZSIKIAlzZWxlY3QgTVREX0dFTl9QUk9CRQorCXNlbGVjdCBNVERfQ0ZJX1VUSUwKIAloZWxwCiAJICBUaGUgQ29tbW9uIEZsYXNoIEludGVyZmFjZSBzcGVjaWZpY2F0aW9uIHdhcyBkZXZlbG9wZWQgYnkgSW50ZWwsCiAJICBBTUQgYW5kIG90aGVyIGZsYXNoIG1hbnVmYWN0dXJlcyB0aGF0IHByb3ZpZGVzIGEgdW5pdmVyc2FsIG1ldGhvZApAQCAtMTU0LDYgKzE1NSw3IEBACiBjb25maWcgTVREX09UUAogCWJvb2wgIlByb3RlY3Rpb24gUmVnaXN0ZXJzIGFrYSBvbmUtdGltZSBwcm9ncmFtbWFibGUgKE9UUCkgYml0cyIKIAlkZXBlbmRzIG9uIE1URF9DRklfQURWX09QVElPTlMKKwlzZWxlY3QgSEFWRV9NVERfT1RQCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcgYW5kIGxvY2tpbmcgc28gY2FsbGVkCkBAIC0xODcsNyArMTg5LDcgQEAKIAkgIFN0cmF0YUZsYXNoIGFuZCBvdGhlciBwYXJ0cy4KIAogY29uZmlnIE1URF9DRklfQU1EU1RECi0JdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEFNRC9GdWppdHN1IGZsYXNoIGNoaXBzIgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBBTUQvRnVqaXRzdS9TcGFuc2lvbiBmbGFzaCBjaGlwcyIKIAlkZXBlbmRzIG9uIE1URF9HRU5fUFJPQkUKIAlzZWxlY3QgTVREX0NGSV9VVElMCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwppbmRleCA1ZjFiNDcyLi5jOTNhOGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwpAQCAtNDc4LDYgKzQ3OCwyOCBAQAogCQllbHNlCiAJCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAyMDAwMDAwOwogCisJCWlmIChjZmktPmNmaXEtPldvcmRXcml0ZVRpbWVvdXRUeXAgJiYKKwkJICAgIGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dE1heCkKKwkJCWNmaS0+Y2hpcHNbaV0ud29yZF93cml0ZV90aW1lX21heCA9CisJCQkJMTw8KGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cCArCisJCQkJICAgIGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dE1heCk7CisJCWVsc2UKKwkJCWNmaS0+Y2hpcHNbaV0ud29yZF93cml0ZV90aW1lX21heCA9IDUwMDAwICogODsKKworCQlpZiAoY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXAgJiYKKwkJICAgIGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0TWF4KQorCQkJY2ZpLT5jaGlwc1tpXS5idWZmZXJfd3JpdGVfdGltZV9tYXggPQorCQkJCTE8PChjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCArCisJCQkJICAgIGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0TWF4KTsKKworCQlpZiAoY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dFR5cCAmJgorCQkgICAgY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dE1heCkKKwkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZV9tYXggPQorCQkJCTEwMDA8PChjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwICsKKwkJCQkgICAgICAgY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dE1heCk7CisJCWVsc2UKKwkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZV9tYXggPSAyMDAwMDAwICogODsKKwogCQljZmktPmNoaXBzW2ldLnJlZl9wb2ludF9jb3VudGVyID0gMDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNmaS0+Y2hpcHNbaV0ud3EpKTsKIAl9CkBAIC03MDMsNiArNzI1LDEwIEBACiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgSFo7CiAKKwkvKiBQcmV2ZW50IHNldHRpbmcgc3RhdGUgRkxfU1lOQ0lORyBmb3IgY2hpcCBpbiBzdXNwZW5kZWQgc3RhdGUuICovCisJaWYgKG1vZGUgPT0gRkxfU1lOQ0lORyAmJiBjaGlwLT5vbGRzdGF0ZSAhPSBGTF9SRUFEWSkKKwkJZ290byBzbGVlcDsKKwogCXN3aXRjaCAoY2hpcC0+c3RhdGUpIHsKIAogCWNhc2UgRkxfU1RBVFVTOgpAQCAtODA4LDggKzgzNCw5IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKICByZXRyeToKLQlpZiAoY2hpcC0+cHJpdiAmJiAobW9kZSA9PSBGTF9XUklUSU5HIHx8IG1vZGUgPT0gRkxfRVJBU0lORwotCQkJICAgfHwgbW9kZSA9PSBGTF9PVFBfV1JJVEUgfHwgbW9kZSA9PSBGTF9TSFVURE9XTikpIHsKKwlpZiAoY2hpcC0+cHJpdiAmJgorCSAgICAobW9kZSA9PSBGTF9XUklUSU5HIHx8IG1vZGUgPT0gRkxfRVJBU0lORyB8fCBtb2RlID09IEZMX09UUF9XUklURQorCSAgICB8fCBtb2RlID09IEZMX1NIVVRET1dOKSAmJiBjaGlwLT5zdGF0ZSAhPSBGTF9TWU5DSU5HKSB7CiAJCS8qCiAJCSAqIE9LLiBXZSBoYXZlIHBvc3NpYmlsaXR5IGZvciBjb250ZW50aW9uIG9uIHRoZSB3cml0ZS9lcmFzZQogCQkgKiBvcGVyYXRpb25zIHdoaWNoIGFyZSBnbG9iYWwgdG8gdGhlIHJlYWwgY2hpcCBhbmQgbm90IHBlcgpAQCAtODU5LDYgKzg4NiwxNCBAQAogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCQlzcGluX2xvY2soJnNoYXJlZC0+bG9jayk7CisKKwkJCS8qIFdlIHNob3VsZCBub3Qgb3duIGNoaXAgaWYgaXQgaXMgYWxyZWFkeQorCQkJICogaW4gRkxfU1lOQ0lORyBzdGF0ZS4gUHV0IGNvbnRlbmRlciBhbmQgcmV0cnkuICovCisJCQlpZiAoY2hpcC0+c3RhdGUgPT0gRkxfU1lOQ0lORykgeworCQkJCXB1dF9jaGlwKG1hcCwgY29udGVuZGVyLCBjb250ZW5kZXItPnN0YXJ0KTsKKwkJCQlzcGluX3VubG9jayhjb250ZW5kZXItPm11dGV4KTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQogCQkJc3Bpbl91bmxvY2soY29udGVuZGVyLT5tdXRleCk7CiAJCX0KIApAQCAtMTAxMiw3ICsxMDQ3LDcgQEAKIAogc3RhdGljIGludCBfX3hpcHJhbSB4aXBfd2FpdF9mb3Jfb3BlcmF0aW9uKAogCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKLQkJdW5zaWduZWQgbG9uZyBhZHIsIHVuc2lnbmVkIGludCBjaGlwX29wX3RpbWUgKQorCQl1bnNpZ25lZCBsb25nIGFkciwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZV9tYXgpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwpAQCAtMTAyMSw3ICsxMDU2LDcgQEAKIAlmbHN0YXRlX3Qgb2xkc3RhdGUsIG5ld3N0YXRlOwogCiAgICAgICAgCXN0YXJ0ID0geGlwX2N1cnJ0aW1lKCk7Ci0JdXNlYyA9IGNoaXBfb3BfdGltZSAqIDg7CisJdXNlYyA9IGNoaXBfb3BfdGltZV9tYXg7CiAJaWYgKHVzZWMgPT0gMCkKIAkJdXNlYyA9IDUwMDAwMDsKIAlkb25lID0gMDsKQEAgLTExMzEsOCArMTE2Niw4IEBACiAjZGVmaW5lIFhJUF9JTlZBTF9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKSAgXAogCUlOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKG1hcCwgZnJvbSwgc2l6ZSkKIAotI2RlZmluZSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsIGludmFsX2FkciwgaW52YWxfbGVuLCB1c2VjKSBcCi0JeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWMpCisjZGVmaW5lIElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwgaW52YWxfYWRyLCBpbnZhbF9sZW4sIHVzZWMsIHVzZWNfbWF4KSBcCisJeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWNfbWF4KQogCiAjZWxzZQogCkBAIC0xMTQ0LDcgKzExNzksNyBAQAogc3RhdGljIGludCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uKAogCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKIAkJdW5zaWduZWQgbG9uZyBjbWRfYWRyLCB1bnNpZ25lZCBsb25nIGludmFsX2FkciwgaW50IGludmFsX2xlbiwKLQkJdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSkKKwkJdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZV9tYXgpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJbWFwX3dvcmQgc3RhdHVzLCBzdGF0dXNfT0sgPSBDTUQoMHg4MCk7CkBAIC0xMTU2LDggKzExOTEsNyBAQAogCQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGludmFsX2FkciwgaW52YWxfbGVuKTsKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwogCi0JLyogc2V0IG91ciB0aW1lb3V0IHRvIDggdGltZXMgdGhlIGV4cGVjdGVkIGRlbGF5ICovCi0JdGltZW8gPSBjaGlwX29wX3RpbWUgKiA4OworCXRpbWVvID0gY2hpcF9vcF90aW1lX21heDsKIAlpZiAoIXRpbWVvKQogCQl0aW1lbyA9IDUwMDAwMDsKIAlyZXNldF90aW1lbyA9IHRpbWVvOwpAQCAtMTIxNyw4ICsxMjUxLDggQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXkpIFwKLQlJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgdWRlbGF5KTsKKyNkZWZpbmUgV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXksIHVkZWxheV9tYXgpIFwKKwlJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgdWRlbGF5LCB1ZGVsYXlfbWF4KTsKIAogCiBzdGF0aWMgaW50IGRvX3BvaW50X29uZWNoaXAgKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLCBsb2ZmX3QgYWRyLCBzaXplX3QgbGVuKQpAQCAtMTQ1Miw3ICsxNDg2LDggQEAKIAogCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLAogCQkJCSAgIGFkciwgbWFwX2Jhbmt3aWR0aChtYXApLAotCQkJCSAgIGNoaXAtPndvcmRfd3JpdGVfdGltZSk7CisJCQkJICAgY2hpcC0+d29yZF93cml0ZV90aW1lLAorCQkJCSAgIGNoaXAtPndvcmRfd3JpdGVfdGltZV9tYXgpOwogCWlmIChyZXQpIHsKIAkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdvcmQgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKQEAgLTE2MjMsNyArMTY1OCw3IEBACiAKIAljaGlwLT5zdGF0ZSA9IEZMX1dSSVRJTkdfVE9fQlVGRkVSOwogCW1hcF93cml0ZShtYXAsIHdyaXRlX2NtZCwgY21kX2Fkcik7Ci0JcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgY21kX2FkciwgMCk7CisJcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgY21kX2FkciwgMCwgMCk7CiAJaWYgKHJldCkgewogCQkvKiBBcmdoLiBOb3QgcmVhZHkgZm9yIHdyaXRlIHRvIGJ1ZmZlciAqLwogCQltYXBfd29yZCBYc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKQEAgLTE2NDAsNyArMTY3NSw3IEBACiAKIAkvKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2Ygd29yZHMgdG8gd3JpdGUgKi8KIAl3b3JkX2dhcCA9ICgtYWRyICYgKG1hcF9iYW5rd2lkdGgobWFwKS0xKSk7Ci0Jd29yZHMgPSAobGVuIC0gd29yZF9nYXAgKyBtYXBfYmFua3dpZHRoKG1hcCkgLSAxKSAvIG1hcF9iYW5rd2lkdGgobWFwKTsKKwl3b3JkcyA9IERJVl9ST1VORF9VUChsZW4gLSB3b3JkX2dhcCwgbWFwX2Jhbmt3aWR0aChtYXApKTsKIAlpZiAoIXdvcmRfZ2FwKSB7CiAJCXdvcmRzLS07CiAJfSBlbHNlIHsKQEAgLTE2OTIsNyArMTcyNyw4IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsCiAJCQkJICAgaW5pdGlhbF9hZHIsIGluaXRpYWxfbGVuLAotCQkJCSAgIGNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lKTsKKwkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZSwKKwkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZV9tYXgpOwogCWlmIChyZXQpIHsKIAkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKIAkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CkBAIC0xODI3LDcgKzE4NjMsOCBAQAogCiAJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsCiAJCQkJICAgYWRyLCBsZW4sCi0JCQkJICAgY2hpcC0+ZXJhc2VfdGltZSk7CisJCQkJICAgY2hpcC0+ZXJhc2VfdGltZSwKKwkJCQkgICBjaGlwLT5lcmFzZV90aW1lX21heCk7CiAJaWYgKHJldCkgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7CiAJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwpAQCAtMjAwNiw3ICsyMDQzLDcgQEAKIAkgKi8KIAl1ZGVsYXkgPSAoIWV4dHAgfHwgIShleHRwLT5GZWF0dXJlU3VwcG9ydCAmICgxIDw8IDUpKSkgPyAxMDAwMDAwL0haIDogMDsKIAotCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5KTsKKwlyZXQgPSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSwgdWRlbGF5ICogMTAwKTsKIAlpZiAocmV0KSB7CiAJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKIAkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCmluZGV4IGE5NzJjYzYuLjNlNmY1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCkBAIC0xMyw2ICsxMyw4IEBACiAgKiBYSVAgc3VwcG9ydCBob29rcyBieSBWaXRhbHkgV29vbCAoYmFzZWQgb24gY29kZSBmb3IgSW50ZWwgZmxhc2gKICAqIGJ5IE5pY29sYXMgUGl0cmUpCiAgKgorICogMjUvMDkvMjAwOCBDaHJpc3RvcGhlciBNb29yZTogVG9wQm90dG9tIGZpeHVwIGZvciBtYW55IE1hY3Jvbml4IHdpdGggQ0ZJIFYxLjAKKyAqCiAgKiBPY2Nhc2lvbmFsbHkgbWFpbnRhaW5lZCBieSBUaGF5bmUgSGFyYmF1Z2ggdGhhcmJhdWdoIGF0IGxueGkgZG90IGNvbQogICoKICAqIFRoaXMgY29kZSBpcyBHUEwKQEAgLTQzLDYgKzQ1LDcgQEAKIAogI2RlZmluZSBNQU5VRkFDVFVSRVJfQU1ECTB4MDAwMQogI2RlZmluZSBNQU5VRkFDVFVSRVJfQVRNRUwJMHgwMDFGCisjZGVmaW5lIE1BTlVGQUNUVVJFUl9NQUNST05JWAkweDAwQzIKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NTVAkweDAwQkYKICNkZWZpbmUgU1NUNDlMRjAwNEIJICAgICAgICAweDAwNjAKICNkZWZpbmUgU1NUNDlMRjA0MEIJICAgICAgICAweDAwNTAKQEAgLTE0NCwxMiArMTQ3LDQ0IEBACiAKIAlpZiAoKChtYWpvciA8PCA4KSB8IG1pbm9yKSA8IDB4MzEzMSkgewogCQkvKiBDRkkgdmVyc2lvbiAxLjAgPT4gZG9uJ3QgdHJ1c3QgYm9vdGxvYyAqLworCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsCisJCQkiJXM6IEpFREVDIFZlbmRvciBJRCBpcyAweCUwMlggRGV2aWNlIElEIGlzIDB4JTAyWFxuIiwKKwkJCW1hcC0+bmFtZSwgY2ZpLT5tZnIsIGNmaS0+aWQpOworCisJCS8qIEFGQUlDUyBhbGwgMjlMVjQwMCB3aXRoIGEgYm90dG9tIGJvb3QgYmxvY2sgaGF2ZSBhIGRldmljZSBJRAorCQkgKiBvZiAweDIyQkEgaW4gMTYtYml0IG1vZGUgYW5kIDB4QkEgaW4gOC1iaXQgbW9kZS4KKwkJICogVGhlc2Ugd2VyZSBiYWRseSBkZXRlY3RlZCBhcyB0aGV5IGhhdmUgdGhlIDB4ODAgYml0IHNldAorCQkgKiBzbyB0cmVhdCB0aGVtIGFzIGEgc3BlY2lhbCBjYXNlLgorCQkgKi8KKwkJaWYgKCgoY2ZpLT5pZCA9PSAweEJBKSB8fCAoY2ZpLT5pZCA9PSAweDIyQkEpKSAmJgorCisJCQkvKiBNYWNyb25peCBhZGRlZCBDRkkgdG8gdGhlaXIgMm5kIGdlbmVyYXRpb24KKwkJCSAqIE1YMjlMVjQwMEMgQi9UIGJ1dCBBRkFJQ1Mgbm8gb3RoZXIgMjlMVjQwMCAoQU1ELAorCQkJICogRnVqaXRzdSwgU3BhbnNpb24sIEVPTiwgRVNJIGFuZCBvbGRlciBNYWNyb25peCkKKwkJCSAqIGhhcyBDRkkuCisJCQkgKgorCQkJICogVGhlcmVmb3JlIGFsc28gY2hlY2sgdGhlIG1hbnVmYWN0dXJlci4KKwkJCSAqIFRoaXMgcmVkdWNlcyB0aGUgcmlzayBvZiBmYWxzZSBkZXRlY3Rpb24gZHVlIHRvCisJCQkgKiB0aGUgOC1iaXQgZGV2aWNlIElELgorCQkJICovCisJCQkoY2ZpLT5tZnIgPT0gTUFOVUZBQ1RVUkVSX01BQ1JPTklYKSkgeworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKKwkJCQkiJXM6IE1hY3Jvbml4IE1YMjlMVjQwMEMgd2l0aCBib3R0b20gYm9vdCBibG9jayIKKwkJCQkiIGRldGVjdGVkXG4iLCBtYXAtPm5hbWUpOworCQkJZXh0cC0+VG9wQm90dG9tID0gMjsJLyogYm90dG9tIGJvb3QgKi8KKwkJfSBlbHNlCiAJCWlmIChjZmktPmlkICYgMHg4MCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEpFREVDIERldmljZSBJRCBpcyAweCUwMlguIEFzc3VtaW5nIGJyb2tlbiBDRkkgdGFibGUuXG4iLCBtYXAtPm5hbWUsIGNmaS0+aWQpOwogCQkJZXh0cC0+VG9wQm90dG9tID0gMzsJLyogdG9wIGJvb3QgKi8KIAkJfSBlbHNlIHsKIAkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CS8qIGJvdHRvbSBib290ICovCiAJCX0KKworCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJIiVzOiBBTUQgQ0ZJIFBSSSBWJWMuJWMgaGFzIG5vIGJvb3QgYmxvY2sgZmllbGQ7IgorCQkJIiBkZWR1Y2VkICVzIGZyb20gRGV2aWNlIElEXG4iLCBtYXAtPm5hbWUsIG1ham9yLCBtaW5vciwKKwkJCWV4dHAtPlRvcEJvdHRvbSA9PSAyID8gImJvdHRvbSIgOiAidG9wIik7CiAJfQogfQogI2VuZGlmCkBAIC0xNzgsMTAgKzIxMywxOCBAQAogCWlmIChhdG1lbF9wcmkuRmVhdHVyZXMgJiAweDAyKQogCQlleHRwLT5FcmFzZVN1c3BlbmQgPSAyOwogCi0JaWYgKGF0bWVsX3ByaS5Cb3R0b21Cb290KQotCQlleHRwLT5Ub3BCb3R0b20gPSAyOwotCWVsc2UKLQkJZXh0cC0+VG9wQm90dG9tID0gMzsKKwkvKiBTb21lIGNoaXBzIGdvdCBpdCBiYWNrd2FyZHMuLi4gKi8KKwlpZiAoY2ZpLT5pZCA9PSBBVDQ5QlY2NDE2KSB7CisJCWlmIChhdG1lbF9wcmkuQm90dG9tQm9vdCkKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDM7CisJCWVsc2UKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CisJfSBlbHNlIHsKKwkJaWYgKGF0bWVsX3ByaS5Cb3R0b21Cb290KQorCQkJZXh0cC0+VG9wQm90dG9tID0gMjsKKwkJZWxzZQorCQkJZXh0cC0+VG9wQm90dG9tID0gMzsKKwl9CiAKIAkvKiBidXJzdCB3cml0ZSBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KIAljZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCA9IDA7CkBAIC0yNDMsNiArMjg2LDcgQEAKIAl7IENGSV9NRlJfQVRNRUwsIENGSV9JRF9BTlksIGZpeHVwX2NvbnZlcnRfYXRtZWxfcHJpLCBOVUxMIH0sCiAjaWZkZWYgQU1EX0JPT1RMT0NfQlVHCiAJeyBDRklfTUZSX0FNRCwgQ0ZJX0lEX0FOWSwgZml4dXBfYW1kX2Jvb3RibG9jaywgTlVMTCB9LAorCXsgTUFOVUZBQ1RVUkVSX01BQ1JPTklYLCBDRklfSURfQU5ZLCBmaXh1cF9hbWRfYm9vdGJsb2NrLCBOVUxMIH0sCiAjZW5kaWYKIAl7IENGSV9NRlJfQU1ELCAweDAwNTAsIGZpeHVwX3VzZV9zZWNzaSwgTlVMTCwgfSwKIAl7IENGSV9NRlJfQU1ELCAweDAwNTMsIGZpeHVwX3VzZV9zZWNzaSwgTlVMTCwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKaW5kZXggYzQxOGU5Mi4uZTYzZTY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKQEAgLTQ0LDE3ICs0NCwxNCBAQAogCiAjZGVmaW5lIHhpcF9lbmFibGUoYmFzZSwgbWFwLCBjZmkpIFwKIGRvIHsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsJCVwKIAl4aXBfYWxsb3dlZChiYXNlLCBtYXApOyBcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIHhpcF9kaXNhYmxlX3FyeShiYXNlLCBtYXAsIGNmaSkgXAogZG8geyBcCiAJeGlwX2Rpc2FibGUoKTsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsgXAorCWNmaV9xcnlfbW9kZV9vbihiYXNlLCBtYXAsIGNmaSk7IFwKIH0gd2hpbGUgKDApCiAKICNlbHNlCkBAIC03MCwzMiArNjcsNiBAQAogICAgaW46IGludGVybGVhdmUsdHlwZSxtb2RlCiAgICByZXQ6IHRhYmxlIGluZGV4LCA8MCBmb3IgZXJyb3IKICAqLwotc3RhdGljIGludCBfX3hpcHJhbSBxcnlfcHJlc2VudChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKLQkJCQlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKLXsKLQlpbnQgb3NmID0gY2ZpLT5pbnRlcmxlYXZlICogY2ZpLT5kZXZpY2VfdHlwZTsJLy8gc2NhbGUgZmFjdG9yCi0JbWFwX3dvcmQgdmFsWzNdOwotCW1hcF93b3JkIHFyeVszXTsKLQotCXFyeVswXSA9IGNmaV9idWlsZF9jbWQoJ1EnLCBtYXAsIGNmaSk7Ci0JcXJ5WzFdID0gY2ZpX2J1aWxkX2NtZCgnUicsIG1hcCwgY2ZpKTsKLQlxcnlbMl0gPSBjZmlfYnVpbGRfY21kKCdZJywgbWFwLCBjZmkpOwotCi0JdmFsWzBdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTApOwotCXZhbFsxXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDExKTsKLQl2YWxbMl0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMik7Ci0KLQlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzBdLCB2YWxbMF0pKQotCQlyZXR1cm4gMDsKLQotCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMV0sIHZhbFsxXSkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsyXSwgdmFsWzJdKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsgCS8vICJRUlkiIGZvdW5kCi19CiAKIHN0YXRpYyBpbnQgX194aXByYW0gY2ZpX3Byb2JlX2NoaXAoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGJhc2UsCiAJCQkJICAgdW5zaWduZWQgbG9uZyAqY2hpcF9tYXAsIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKQpAQCAtMTE2LDExICs4Nyw3IEBACiAJfQogCiAJeGlwX2Rpc2FibGUoKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQotCWlmICghcXJ5X3ByZXNlbnQobWFwLGJhc2UsY2ZpKSkgeworCWlmICghY2ZpX3FyeV9tb2RlX29uKGJhc2UsIG1hcCwgY2ZpKSkgewogCQl4aXBfZW5hYmxlKGJhc2UsIG1hcCwgY2ZpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQxLDE0ICsxMDgsMTMgQEAKICAJCXN0YXJ0ID0gaSA8PCBjZmktPmNoaXBzaGlmdDsKIAkJLyogVGhpcyBjaGlwIHNob3VsZCBiZSBpbiByZWFkIG1vZGUgaWYgaXQncyBvbmUKIAkJICAgd2UndmUgYWxyZWFkeSB0b3VjaGVkLiAqLwotCQlpZiAocXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgeworCQlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgc3RhcnQsIGNmaSkpIHsKIAkJCS8qIEVlcC4gVGhpcyBjaGlwIGFsc28gaGFkIHRoZSBRUlkgbWFya2VyLgogCQkJICogSXMgaXQgYW4gYWxpYXMgZm9yIHRoZSBuZXcgb25lPyAqLwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCQkJY2ZpX3FyeV9tb2RlX29mZihzdGFydCwgbWFwLCBjZmkpOwogCiAJCQkvKiBJZiB0aGUgUVJZIG1hcmtlciBnb2VzIGF3YXksIGl0J3MgYW4gYWxpYXMgKi8KLQkJCWlmICghcXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgeworCQkJaWYgKCFjZmlfcXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgewogCQkJCXhpcF9hbGxvd2VkKGJhc2UsIG1hcCk7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3VuZCBhbiBhbGlhcyBhdCAweCV4IGZvciB0aGUgY2hpcCBhdCAweCVseFxuIiwKIAkJCQkgICAgICAgbWFwLT5uYW1lLCBiYXNlLCBzdGFydCk7CkBAIC0xNTgsMTAgKzEyNCw5IEBACiAJCQkgKiB1bmZvcnR1bmF0ZS4gU3RpY2sgdGhlIG5ldyBjaGlwIGluIHJlYWQgbW9kZQogCQkJICogdG9vIGFuZCBpZiBpdCdzIHRoZSBzYW1lLCBhc3N1bWUgaXQncyBhbiBhbGlhcy4gKi8KIAkJCS8qIEZJWE1FOiBVc2Ugb3RoZXIgbW9kZXMgdG8gZG8gYSBwcm9wZXIgY2hlY2sgKi8KLQkJCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCQkJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAKLQkJCWlmIChxcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpIHsKKwkJCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKSB7CiAJCQkJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvdW5kIGFuIGFsaWFzIGF0IDB4JXggZm9yIHRoZSBjaGlwIGF0IDB4JWx4XG4iLAogCQkJCSAgICAgICBtYXAtPm5hbWUsIGJhc2UsIHN0YXJ0KTsKQEAgLTE3Niw4ICsxNDEsNyBAQAogCWNmaS0+bnVtY2hpcHMrKzsKIAogCS8qIFB1dCBpdCBiYWNrIGludG8gUmVhZCBNb2RlICovCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCAlZCB4JWQgZGV2aWNlcyBhdCAweCV4IGluICVkLWJpdCBiYW5rXG4iLApAQCAtMjM3LDkgKzIwMSw3IEBACiAJCQkgIGNmaV9yZWFkX3F1ZXJ5KG1hcCwgYmFzZSArIDB4ZiAqIG9mc19mYWN0b3IpOwogCiAJLyogUHV0IGl0IGJhY2sgaW50byBSZWFkIE1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQkvKiAuLi4gZXZlbiBpZiBpdCdzIGFuIEludGVsIGNoaXAgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAl4aXBfYWxsb3dlZChiYXNlLCBtYXApOwogCiAJLyogRG8gYW55IG5lY2Vzc2FyeSBieXRlc3dhcHBpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCmluZGV4IDBlZTQ1NzAuLjM0ZDQwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYwpAQCAtMjQsNiArMjQsNjYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCitpbnQgX194aXByYW0gY2ZpX3FyeV9wcmVzZW50KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBiYXNlLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwlpbnQgb3NmID0gY2ZpLT5pbnRlcmxlYXZlICogY2ZpLT5kZXZpY2VfdHlwZTsJLyogc2NhbGUgZmFjdG9yICovCisJbWFwX3dvcmQgdmFsWzNdOworCW1hcF93b3JkIHFyeVszXTsKKworCXFyeVswXSA9IGNmaV9idWlsZF9jbWQoJ1EnLCBtYXAsIGNmaSk7CisJcXJ5WzFdID0gY2ZpX2J1aWxkX2NtZCgnUicsIG1hcCwgY2ZpKTsKKwlxcnlbMl0gPSBjZmlfYnVpbGRfY21kKCdZJywgbWFwLCBjZmkpOworCisJdmFsWzBdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTApOworCXZhbFsxXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDExKTsKKwl2YWxbMl0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMik7CisKKwlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzBdLCB2YWxbMF0pKQorCQlyZXR1cm4gMDsKKworCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMV0sIHZhbFsxXSkpCisJCXJldHVybiAwOworCisJaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsyXSwgdmFsWzJdKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsgCS8qICJRUlkiIGZvdW5kICovCit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X3ByZXNlbnQpOworCitpbnQgX194aXByYW0gY2ZpX3FyeV9tb2RlX29uKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkKKwkJcmV0dXJuIDE7CisJLyogUVJZIG5vdCBmb3VuZCBwcm9iYWJseSB3ZSBkZWFsIHdpdGggc29tZSBvZGQgQ0ZJIGNoaXBzICovCisJLyogU29tZSByZXZpc2lvbnMgb2Ygc29tZSBvbGQgSW50ZWwgY2hpcHM/ICovCisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJaWYgKGNmaV9xcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpCisJCXJldHVybiAxOworCS8qIFNUIE0yOURXIGNoaXBzICovCisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKQorCQlyZXR1cm4gMTsKKwkvKiBRUlkgbm90IGZvdW5kICovCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X21vZGVfb24pOworCit2b2lkIF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vZmYodWludDMyX3QgYmFzZSwgc3RydWN0IG1hcF9pbmZvICptYXAsCisJCQkgICAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpCit7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X21vZGVfb2ZmKTsKKwogc3RydWN0IGNmaV9leHRxdWVyeSAqCiBfX3hpcHJhbSBjZmlfcmVhZF9wcmkoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTE2IGFkciwgX191MTYgc2l6ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKQEAgLTQ4LDggKzEwOCw3IEBACiAjZW5kaWYKIAogCS8qIFN3aXRjaCBpdCBpbnRvIFF1ZXJ5IE1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQorCWNmaV9xcnlfbW9kZV9vbihiYXNlLCBtYXAsIGNmaSk7CiAJLyogUmVhZCBpbiB0aGUgRXh0ZW5kZWQgUXVlcnkgVGFibGUgKi8KIAlmb3IgKGk9MDsgaTxzaXplOyBpKyspIHsKIAkJKCh1bnNpZ25lZCBjaGFyICopZXh0cClbaV0gPQpAQCAtNTcsOCArMTE2LDcgQEAKIAl9CiAKIAkvKiBNYWtlIHN1cmUgaXQgcmV0dXJucyB0byByZWFkIG1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4ZjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4ZmYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAogI2lmZGVmIENPTkZJR19NVERfWElQCiAJKHZvaWQpIG1hcF9yZWFkKG1hcCwgYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCmluZGV4IGYwNjE4ODUuLmUyZGM5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJbWF4X2NoaXBzID0gMTsKIAl9CiAKLQltYXBzaXplID0gc2l6ZW9mKGxvbmcpICogKCAobWF4X2NoaXBzICsgQklUU19QRVJfTE9ORy0xKSAvIEJJVFNfUEVSX0xPTkcgKTsKKwltYXBzaXplID0gc2l6ZW9mKGxvbmcpICogRElWX1JPVU5EX1VQKG1heF9jaGlwcywgQklUU19QRVJfTE9ORyk7CiAJY2hpcF9tYXAgPSBremFsbG9jKG1hcHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghY2hpcF9tYXApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGttYWxsb2MgZmFpbGVkIGZvciBDRkkgY2hpcCBtYXBcbiIsIG1hcC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jIGIvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYwppbmRleCA3MWJjMDdmLi41MGEzNDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKQEAgLTcsNiArNyw3IEBACiAgKgogICogbXRkcGFydHM9PG10ZGRlZj5bOzxtdGRkZWZdCiAgKiA8bXRkZGVmPiAgOj0gPG10ZC1pZD46PHBhcnRkZWY+Wyw8cGFydGRlZj5dCisgKiAgICAgICAgICAgICAgd2hlcmUgPG10ZC1pZD4gaXMgdGhlIG5hbWUgZnJvbSB0aGUgImNhdCAvcHJvYy9tdGQiIGNvbW1hbmQKICAqIDxwYXJ0ZGVmPiA6PSA8c2l6ZT5bQG9mZnNldF1bPG5hbWU+XVtyb11bbGtdCiAgKiA8bXRkLWlkPiAgOj0gdW5pcXVlIG5hbWUgdXNlZCBpbiBtYXBwaW5nIGRyaXZlci9kZXZpY2UgKG10ZC0+bmFtZSkKICAqIDxzaXplPiAgICA6PSBzdGFuZGFyZCBsaW51eCBtZW1zaXplIE9SICItIiB0byBkZW5vdGUgYWxsIHJlbWFpbmluZyBzcGFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCmluZGV4IDljNjEzZjAuLjZmZGUwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKQEAgLTU5LDYgKzU5LDI3IEBACiAJICBTb21ldGltZXMgRGF0YUZsYXNoIGNoaXBzIGFyZSBwYWNrYWdlZCBpbnNpZGUgTU1DLWZvcm1hdAogCSAgY2FyZHM7IGF0IHRoaXMgd3JpdGluZywgdGhlIE1NQyBzdGFjayB3b24ndCBoYW5kbGUgdGhvc2UuCiAKK2NvbmZpZyBNVERfREFUQUZMQVNIX1dSSVRFX1ZFUklGWQorCWJvb2wgIlZlcmlmeSBEYXRhRmxhc2ggcGFnZSB3cml0ZXMiCisJZGVwZW5kcyBvbiBNVERfREFUQUZMQVNICisJaGVscAorCSAgVGhpcyBhZGRzIGFuIGV4dHJhIGNoZWNrIHdoZW4gZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBmbGFzaC4KKwkgIEl0IG1heSBoZWxwIGlmIHlvdSBhcmUgdmVyaWZ5aW5nIGNoaXAgc2V0dXAgKHRpbWluZ3MgZXRjKSBvbgorCSAgeW91ciBib2FyZC4gIFRoZXJlIGlzIGEgcmFyZSBwb3NzaWJpbGl0eSB0aGF0IGV2ZW4gdGhvdWdoIHRoZQorCSAgZGV2aWNlIHRoaW5rcyB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwsIGEgYml0IGNvdWxkIGhhdmUgYmVlbgorCSAgZmxpcHBlZCBhY2NpZGVudGFsbHkgZHVlIHRvIGRldmljZSB3ZWFyIG9yIHNvbWV0aGluZyBlbHNlLgorCitjb25maWcgTVREX0RBVEFGTEFTSF9PVFAKKwlib29sICJEYXRhRmxhc2ggT1RQIHN1cHBvcnQgKFNlY3VyaXR5IFJlZ2lzdGVyKSIKKwlkZXBlbmRzIG9uIE1URF9EQVRBRkxBU0gKKwlzZWxlY3QgSEFWRV9NVERfT1RQCisJaGVscAorCSAgTmV3ZXIgRGF0YUZsYXNoIGNoaXBzIChyZXZpc2lvbnMgQyBhbmQgRCkgc3VwcG9ydCAxMjggYnl0ZXMgb2YKKwkgIG9uZS10aW1lLXByb2dyYW1tYWJsZSAoT1RQKSBkYXRhLiAgVGhlIGZpcnN0IGhhbGYgbWF5IGJlIHdyaXR0ZW4KKwkgIChvbmNlKSB3aXRoIHVwIHRvIDY0IGJ5dGVzIG9mIGRhdGEsIHN1Y2ggYXMgYSBzZXJpYWwgbnVtYmVyIG9yCisJICBvdGhlciBrZXkgcHJvZHVjdCBkYXRhLiAgVGhlIHNlY29uZCBoYWxmIGlzIHByb2dyYW1tZWQgd2l0aCBhCisJICB1bmlxdWUtdG8tZWFjaC1jaGlwIGJpdCBwYXR0ZXJuIGF0IHRoZSBmYWN0b3J5LgorCiBjb25maWcgTVREX00yNVA4MAogCXRyaXN0YXRlICJTdXBwb3J0IG1vc3QgU1BJIEZsYXNoIGNoaXBzIChBVDI2REYsIE0yNVAsIFcyNVgsIC4uLikiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKaW5kZXggOTFmYmJhNy4uOGMyOTVmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlpZiAoZGV2LT5ibGtkZXYpIHsKIAkJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGRldi0+YmxrZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLAogCQkJCQkwLCAtMSk7Ci0JCWNsb3NlX2JkZXZfZXhjbChkZXYtPmJsa2Rldik7CisJCWNsb3NlX2JkZXZfZXhjbHVzaXZlKGRldi0+YmxrZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIAl9CiAKIAlrZnJlZShkZXYpOwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJLyogR2V0IGEgaGFuZGxlIG9uIHRoZSBkZXZpY2UgKi8KLQliZGV2ID0gb3Blbl9iZGV2X2V4Y2woZGV2bmFtZSwgT19SRFdSLCBOVUxMKTsKKwliZGV2ID0gb3Blbl9iZGV2X2V4Y2x1c2l2ZShkZXZuYW1lLCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFLCBOVUxMKTsKICNpZm5kZWYgTU9EVUxFCiAJaWYgKElTX0VSUihiZGV2KSkgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCBiMzVjMzMzLi43NmE3Njc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNkZWZpbmUJT1BDT0RFX1BQCQkweDAyCS8qIFBhZ2UgcHJvZ3JhbSAodXAgdG8gMjU2IGJ5dGVzKSAqLwogI2RlZmluZQlPUENPREVfQkVfNEsgCQkweDIwCS8qIEVyYXNlIDRLaUIgYmxvY2sgKi8KICNkZWZpbmUJT1BDT0RFX0JFXzMySwkJMHg1MgkvKiBFcmFzZSAzMktpQiBibG9jayAqLworI2RlZmluZQlPUENPREVfQkUJCTB4YzcJLyogRXJhc2Ugd2hvbGUgZmxhc2ggYmxvY2sgKi8KICNkZWZpbmUJT1BDT0RFX1NFCQkweGQ4CS8qIFNlY3RvciBlcmFzZSAodXN1YWxseSA2NEtpQikgKi8KICNkZWZpbmUJT1BDT0RFX1JESUQJCTB4OWYJLyogUmVhZCBKRURFQyBJRCAqLwogCkBAIC0xNjEsNiArMTYyLDMxIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBFcmFzZSB0aGUgd2hvbGUgZmxhc2ggbWVtb3J5CisgKgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBlcmFzZV9ibG9jayhzdHJ1Y3QgbTI1cCAqZmxhc2gpCit7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiAlcyAlZEtpQlxuIiwKKwkJCWZsYXNoLT5zcGktPmRldi5idXNfaWQsIF9fZnVuY19fLAorCQkJZmxhc2gtPm10ZC5zaXplIC8gMTAyNCk7CisKKwkvKiBXYWl0IHVudGlsIGZpbmlzaGVkIHByZXZpb3VzIHdyaXRlIGNvbW1hbmQuICovCisJaWYgKHdhaXRfdGlsbF9yZWFkeShmbGFzaCkpCisJCXJldHVybiAxOworCisJLyogU2VuZCB3cml0ZSBlbmFibGUsIHRoZW4gZXJhc2UgY29tbWFuZHMuICovCisJd3JpdGVfZW5hYmxlKGZsYXNoKTsKKworCS8qIFNldCB1cCBjb21tYW5kIGJ1ZmZlci4gKi8KKwlmbGFzaC0+Y29tbWFuZFswXSA9IE9QQ09ERV9CRTsKKworCXNwaV93cml0ZShmbGFzaC0+c3BpLCBmbGFzaC0+Y29tbWFuZCwgMSk7CisKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIEVyYXNlIG9uZSBzZWN0b3Igb2YgZmxhc2ggbWVtb3J5IGF0IG9mZnNldCBgYG9mZnNldCcnIHdoaWNoIGlzIGFueQpAQCAtMjI5LDE1ICsyNTUsMjEgQEAKIAkgKi8KIAogCS8qIG5vdyBlcmFzZSB0aG9zZSBzZWN0b3JzICovCi0Jd2hpbGUgKGxlbikgewotCQlpZiAoZXJhc2Vfc2VjdG9yKGZsYXNoLCBhZGRyKSkgewotCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KKwlpZiAobGVuID09IGZsYXNoLT5tdGQuc2l6ZSAmJiBlcmFzZV9ibG9jayhmbGFzaCkpIHsKKwkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKKwkJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCXdoaWxlIChsZW4pIHsKKwkJCWlmIChlcmFzZV9zZWN0b3IoZmxhc2gsIGFkZHIpKSB7CisJCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKKwkJCQltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KIAotCQlhZGRyICs9IG10ZC0+ZXJhc2VzaXplOwotCQlsZW4gLT0gbXRkLT5lcmFzZXNpemU7CisJCQlhZGRyICs9IG10ZC0+ZXJhc2VzaXplOworCQkJbGVuIC09IG10ZC0+ZXJhc2VzaXplOworCQl9CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CkBAIC00MzcsNiArNDY5LDcgQEAKIAkgKiB0aGVuIGEgdHdvIGJ5dGUgZGV2aWNlIGlkLgogCSAqLwogCXUzMgkJamVkZWNfaWQ7CisJdTE2ICAgICAgICAgICAgIGV4dF9pZDsKIAogCS8qIFRoZSBzaXplIGxpc3RlZCBoZXJlIGlzIHdoYXQgd29ya3Mgd2l0aCBPUENPREVfU0UsIHdoaWNoIGlzbid0CiAJICogbmVjZXNzYXJpbHkgY2FsbGVkIGEgInNlY3RvciIgYnkgdGhlIHZlbmRvci4KQEAgLTQ1Niw3MiArNDg5LDc1IEBACiBzdGF0aWMgc3RydWN0IGZsYXNoX2luZm8gX19kZXZpbml0ZGF0YSBtMjVwX2RhdGEgW10gPSB7CiAKIAkvKiBBdG1lbCAtLSBzb21lIGFyZSAoY29uZnVzaW5nbHkpIG1hcmtldGVkIGFzICJEYXRhRmxhc2giICovCi0JeyAiYXQyNWZzMDEwIiwgIDB4MWY2NjAxLCAzMiAqIDEwMjQsIDQsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNWZzMDQwIiwgIDB4MWY2NjA0LCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAiYXQyNWZzMDEwIiwgIDB4MWY2NjAxLCAwLCAzMiAqIDEwMjQsIDQsIFNFQ1RfNEssIH0sCisJeyAiYXQyNWZzMDQwIiwgIDB4MWY2NjA0LCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCiAKLQl7ICJhdDI1ZGYwNDFhIiwgMHgxZjQ0MDEsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKLQl7ICJhdDI1ZGY2NDEiLCAgMHgxZjQ4MDAsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLLCB9LAorCXsgImF0MjVkZjA0MWEiLCAweDFmNDQwMSwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAorCXsgImF0MjVkZjY0MSIsICAweDFmNDgwMCwgMCwgNjQgKiAxMDI0LCAxMjgsIFNFQ1RfNEssIH0sCiAKLQl7ICJhdDI2ZjAwNCIsICAgMHgxZjA0MDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKLQl7ICJhdDI2ZGYwODFhIiwgMHgxZjQ1MDEsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNmRmMTYxYSIsIDB4MWY0NjAxLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAotCXsgImF0MjZkZjMyMSIsICAweDFmNDcwMSwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKKwl7ICJhdDI2ZjAwNCIsICAgMHgxZjA0MDAsIDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKKwl7ICJhdDI2ZGYwODFhIiwgMHgxZjQ1MDEsIDAsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCisJeyAiYXQyNmRmMTYxYSIsIDB4MWY0NjAxLCAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAorCXsgImF0MjZkZjMyMSIsICAweDFmNDcwMSwgMCwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKIAogCS8qIFNwYW5zaW9uIC0tIHNpbmdsZSAobGFyZ2UpIHNlY3RvciBzaXplIG9ubHksIGF0IGxlYXN0CiAJICogZm9yIHRoZSBjaGlwcyBsaXN0ZWQgaGVyZSAod2l0aG91dCBib290IHNlY3RvcnMpLgogCSAqLwotCXsgInMyNXNsMDA0YSIsIDB4MDEwMjEyLCA2NCAqIDEwMjQsIDgsIH0sCi0JeyAiczI1c2wwMDhhIiwgMHgwMTAyMTMsIDY0ICogMTAyNCwgMTYsIH0sCi0JeyAiczI1c2wwMTZhIiwgMHgwMTAyMTQsIDY0ICogMTAyNCwgMzIsIH0sCi0JeyAiczI1c2wwMzJhIiwgMHgwMTAyMTUsIDY0ICogMTAyNCwgNjQsIH0sCi0JeyAiczI1c2wwNjRhIiwgMHgwMTAyMTYsIDY0ICogMTAyNCwgMTI4LCB9LAorCXsgInMyNXNsMDA0YSIsIDB4MDEwMjEyLCAwLCA2NCAqIDEwMjQsIDgsIH0sCisJeyAiczI1c2wwMDhhIiwgMHgwMTAyMTMsIDAsIDY0ICogMTAyNCwgMTYsIH0sCisJeyAiczI1c2wwMTZhIiwgMHgwMTAyMTQsIDAsIDY0ICogMTAyNCwgMzIsIH0sCisJeyAiczI1c2wwMzJhIiwgMHgwMTAyMTUsIDAsIDY0ICogMTAyNCwgNjQsIH0sCisJeyAiczI1c2wwNjRhIiwgMHgwMTAyMTYsIDAsIDY0ICogMTAyNCwgMTI4LCB9LAorICAgICAgICB7ICJzMjVzbDEyODAwIiwgMHgwMTIwMTgsIDB4MDMwMCwgMjU2ICogMTAyNCwgNjQsIH0sCisJeyAiczI1c2wxMjgwMSIsIDB4MDEyMDE4LCAweDAzMDEsIDY0ICogMTAyNCwgMjU2LCB9LAogCiAJLyogU1NUIC0tIGxhcmdlIGVyYXNlIHNpemVzIGFyZSAib3ZlcmxheXMiLCAic2VjdG9ycyIgYXJlIDRLICovCi0JeyAic3N0MjV2ZjA0MGIiLCAweGJmMjU4ZCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAotCXsgInNzdDI1dmYwODBiIiwgMHhiZjI1OGUsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCi0JeyAic3N0MjV2ZjAxNmIiLCAweGJmMjU0MSwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKLQl7ICJzc3QyNXZmMDMyYiIsIDB4YmYyNTRhLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAorCXsgInNzdDI1dmYwNDBiIiwgMHhiZjI1OGQsIDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKKwl7ICJzc3QyNXZmMDgwYiIsIDB4YmYyNThlLCAwLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAorCXsgInNzdDI1dmYwMTZiIiwgMHhiZjI1NDEsIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCisJeyAic3N0MjV2ZjAzMmIiLCAweGJmMjU0YSwgMCwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKIAogCS8qIFNUIE1pY3JvZWxlY3Ryb25pY3MgLS0gbmV3ZXIgcHJvZHVjdGlvbiBtYXkgaGF2ZSBmZWF0dXJlIHVwZGF0ZXMgKi8KLQl7ICJtMjVwMDUiLCAgMHgyMDIwMTAsICAzMiAqIDEwMjQsIDIsIH0sCi0JeyAibTI1cDEwIiwgIDB4MjAyMDExLCAgMzIgKiAxMDI0LCA0LCB9LAotCXsgIm0yNXAyMCIsICAweDIwMjAxMiwgIDY0ICogMTAyNCwgNCwgfSwKLQl7ICJtMjVwNDAiLCAgMHgyMDIwMTMsICA2NCAqIDEwMjQsIDgsIH0sCi0JeyAibTI1cDgwIiwgICAgICAgICAwLCAgNjQgKiAxMDI0LCAxNiwgfSwKLQl7ICJtMjVwMTYiLCAgMHgyMDIwMTUsICA2NCAqIDEwMjQsIDMyLCB9LAotCXsgIm0yNXAzMiIsICAweDIwMjAxNiwgIDY0ICogMTAyNCwgNjQsIH0sCi0JeyAibTI1cDY0IiwgIDB4MjAyMDE3LCAgNjQgKiAxMDI0LCAxMjgsIH0sCi0JeyAibTI1cDEyOCIsIDB4MjAyMDE4LCAyNTYgKiAxMDI0LCA2NCwgfSwKKwl7ICJtMjVwMDUiLCAgMHgyMDIwMTAsICAwLCAzMiAqIDEwMjQsIDIsIH0sCisJeyAibTI1cDEwIiwgIDB4MjAyMDExLCAgMCwgMzIgKiAxMDI0LCA0LCB9LAorCXsgIm0yNXAyMCIsICAweDIwMjAxMiwgIDAsIDY0ICogMTAyNCwgNCwgfSwKKwl7ICJtMjVwNDAiLCAgMHgyMDIwMTMsICAwLCA2NCAqIDEwMjQsIDgsIH0sCisJeyAibTI1cDgwIiwgICAgICAgICAwLCAgMCwgNjQgKiAxMDI0LCAxNiwgfSwKKwl7ICJtMjVwMTYiLCAgMHgyMDIwMTUsICAwLCA2NCAqIDEwMjQsIDMyLCB9LAorCXsgIm0yNXAzMiIsICAweDIwMjAxNiwgIDAsIDY0ICogMTAyNCwgNjQsIH0sCisJeyAibTI1cDY0IiwgIDB4MjAyMDE3LCAgMCwgNjQgKiAxMDI0LCAxMjgsIH0sCisJeyAibTI1cDEyOCIsIDB4MjAyMDE4LCAwLCAyNTYgKiAxMDI0LCA2NCwgfSwKIAotCXsgIm00NXBlODAiLCAweDIwNDAxNCwgIDY0ICogMTAyNCwgMTYsIH0sCi0JeyAibTQ1cGUxNiIsIDB4MjA0MDE1LCAgNjQgKiAxMDI0LCAzMiwgfSwKKwl7ICJtNDVwZTgwIiwgMHgyMDQwMTQsICAwLCA2NCAqIDEwMjQsIDE2LCB9LAorCXsgIm00NXBlMTYiLCAweDIwNDAxNSwgIDAsIDY0ICogMTAyNCwgMzIsIH0sCiAKLQl7ICJtMjVwZTgwIiwgMHgyMDgwMTQsICA2NCAqIDEwMjQsIDE2LCB9LAotCXsgIm0yNXBlMTYiLCAweDIwODAxNSwgIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCisJeyAibTI1cGU4MCIsIDB4MjA4MDE0LCAgMCwgNjQgKiAxMDI0LCAxNiwgfSwKKwl7ICJtMjVwZTE2IiwgMHgyMDgwMTUsICAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAogCiAJLyogV2luYm9uZCAtLSB3MjV4ICJibG9ja3MiIGFyZSA2NEssICJzZWN0b3JzIiBhcmUgNEtpQiAqLwotCXsgIncyNXgxMCIsIDB4ZWYzMDExLCA2NCAqIDEwMjQsIDIsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDIwIiwgMHhlZjMwMTIsIDY0ICogMTAyNCwgNCwgU0VDVF80SywgfSwKLQl7ICJ3MjV4NDAiLCAweGVmMzAxMywgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAotCXsgIncyNXg4MCIsIDB4ZWYzMDE0LCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAotCXsgIncyNXgxNiIsIDB4ZWYzMDE1LCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAotCXsgIncyNXgzMiIsIDB4ZWYzMDE2LCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAotCXsgIncyNXg2NCIsIDB4ZWYzMDE3LCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SywgfSwKKwl7ICJ3MjV4MTAiLCAweGVmMzAxMSwgMCwgNjQgKiAxMDI0LCAyLCBTRUNUXzRLLCB9LAorCXsgIncyNXgyMCIsIDB4ZWYzMDEyLCAwLCA2NCAqIDEwMjQsIDQsIFNFQ1RfNEssIH0sCisJeyAidzI1eDQwIiwgMHhlZjMwMTMsIDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKKwl7ICJ3MjV4ODAiLCAweGVmMzAxNCwgMCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKKwl7ICJ3MjV4MTYiLCAweGVmMzAxNSwgMCwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKKwl7ICJ3MjV4MzIiLCAweGVmMzAxNiwgMCwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKKwl7ICJ3MjV4NjQiLCAweGVmMzAxNywgMCwgNjQgKiAxMDI0LCAxMjgsIFNFQ1RfNEssIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGZsYXNoX2luZm8gKl9fZGV2aW5pdCBqZWRlY19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCWludAkJCXRtcDsKIAl1OAkJCWNvZGUgPSBPUENPREVfUkRJRDsKLQl1OAkJCWlkWzNdOworCXU4CQkJaWRbNV07CiAJdTMyCQkJamVkZWM7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgZXh0X2plZGVjOwogCXN0cnVjdCBmbGFzaF9pbmZvCSppbmZvOwogCiAJLyogSkVERUMgYWxzbyBkZWZpbmVzIGFuIG9wdGlvbmFsICJleHRlbmRlZCBkZXZpY2UgaW5mb3JtYXRpb24iCiAJICogc3RyaW5nIGZvciBhZnRlciB2ZW5kb3Itc3BlY2lmaWMgZGF0YSwgYWZ0ZXIgdGhlIHRocmVlIGJ5dGVzCiAJICogd2UgdXNlIGhlcmUuICBTdXBwb3J0aW5nIHNvbWUgY2hpcHMgbWlnaHQgcmVxdWlyZSB1c2luZyBpdC4KIAkgKi8KLQl0bXAgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJmNvZGUsIDEsIGlkLCAzKTsKKwl0bXAgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJmNvZGUsIDEsIGlkLCA1KTsKIAlpZiAodG1wIDwgMCkgewogCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IGVycm9yICVkIHJlYWRpbmcgSkVERUMgSURcbiIsCiAJCQlzcGktPmRldi5idXNfaWQsIHRtcCk7CkBAIC01MzMsMTAgKzU2OSwxNCBAQAogCWplZGVjID0gamVkZWMgPDwgODsKIAlqZWRlYyB8PSBpZFsyXTsKIAorCWV4dF9qZWRlYyA9IGlkWzNdIDw8IDggfCBpZFs0XTsKKwogCWZvciAodG1wID0gMCwgaW5mbyA9IG0yNXBfZGF0YTsKIAkJCXRtcCA8IEFSUkFZX1NJWkUobTI1cF9kYXRhKTsKIAkJCXRtcCsrLCBpbmZvKyspIHsKIAkJaWYgKGluZm8tPmplZGVjX2lkID09IGplZGVjKQorCQkJaWYgKGV4dF9qZWRlYyAhPSAwICYmIGluZm8tPmV4dF9pZCAhPSBleHRfamVkZWMpCisJCQkJY29udGludWU7CiAJCQlyZXR1cm4gaW5mbzsKIAl9CiAJZGV2X2Vycigmc3BpLT5kZXYsICJ1bnJlY29nbml6ZWQgSkVERUMgaWQgJTA2eFxuIiwgamVkZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwppbmRleCA4YmQwZGVhLi42ZGQ5YWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwpAQCAtMzAsMTIgKzMwLDEwIEBACiAgKiBkb2Vzbid0ICh5ZXQpIHVzZSB0aGVzZSBmb3IgYW55IGtpbmQgb2YgaS9vIG92ZXJsYXAgb3IgcHJlZmV0Y2hpbmcuCiAgKgogICogU29tZXRpbWVzIERhdGFGbGFzaCBpcyBwYWNrYWdlZCBpbiBNTUMtZm9ybWF0IGNhcmRzLCBhbHRob3VnaCB0aGUKLSAqIE1NQyBzdGFjayBjYW4ndCB1c2UgU1BJICh5ZXQpLCBvciBkaXN0aW5ndWlzaCBiZXR3ZWVuIE1NQyBhbmQgRGF0YUZsYXNoCisgKiBNTUMgc3RhY2sgY2FuJ3QgKHlldD8pIGRpc3Rpbmd1aXNoIGJldHdlZW4gTU1DIGFuZCBEYXRhRmxhc2gKICAqIHByb3RvY29scyBkdXJpbmcgZW51bWVyYXRpb24uCiAgKi8KIAotI2RlZmluZSBDT05GSUdfREFUQUZMQVNIX1dSSVRFX1ZFUklGWQotCiAvKiByZWFkcyBjYW4gYnlwYXNzIHRoZSBidWZmZXJzICovCiAjZGVmaW5lIE9QX1JFQURfQ09OVElOVU9VUwkweEU4CiAjZGVmaW5lIE9QX1JFQURfUEFHRQkJMHhEMgpAQCAtODAsNyArNzgsOCBAQAogICovCiAjZGVmaW5lIE9QX1JFQURfSUQJCTB4OUYKICNkZWZpbmUgT1BfUkVBRF9TRUNVUklUWQkweDc3Ci0jZGVmaW5lIE9QX1dSSVRFX1NFQ1VSSVRZCTB4OUEJLyogT1RQIGJpdHMgKi8KKyNkZWZpbmUgT1BfV1JJVEVfU0VDVVJJVFlfUkVWQwkweDlBCisjZGVmaW5lIE9QX1dSSVRFX1NFQ1VSSVRZCTB4OUIJLyogcmV2aXNpb24gRCAqLwogCiAKIHN0cnVjdCBkYXRhZmxhc2ggewpAQCAtNDAyLDcgKzQwMSw3IEBACiAJCSh2b2lkKSBkYXRhZmxhc2hfd2FpdHJlYWR5KHByaXYtPnNwaSk7CiAKIAotI2lmZGVmCUNPTkZJR19EQVRBRkxBU0hfV1JJVEVfVkVSSUZZCisjaWZkZWYgQ09ORklHX01URF9EQVRBRkxBU0hfVkVSSUZZX1dSSVRFCiAKIAkJLyogKDMpIENvbXBhcmUgdG8gQnVmZmVyMSAqLwogCQlhZGRyID0gcGFnZWFkZHIgPDwgcHJpdi0+cGFnZV9vZmZzZXQ7CkBAIC00MzEsNyArNDMwLDcgQEAKIAkJfSBlbHNlCiAJCQlzdGF0dXMgPSAwOwogCi0jZW5kaWYJLyogQ09ORklHX0RBVEFGTEFTSF9XUklURV9WRVJJRlkgKi8KKyNlbmRpZgkvKiBDT05GSUdfTVREX0RBVEFGTEFTSF9WRVJJRllfV1JJVEUgKi8KIAogCQlyZW1haW5pbmcgPSByZW1haW5pbmcgLSB3cml0ZWxlbjsKIAkJcGFnZWFkZHIrKzsKQEAgLTQ1MSwxNiArNDUwLDE5MiBAQAogCiAvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCiAKKyNpZmRlZiBDT05GSUdfTVREX0RBVEFGTEFTSF9PVFAKKworc3RhdGljIGludCBkYXRhZmxhc2hfZ2V0X290cF9pbmZvKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQlzdHJ1Y3Qgb3RwX2luZm8gKmluZm8sIHNpemVfdCBsZW4pCit7CisJLyogUmVwb3J0IGJvdGggYmxvY2tzIGFzIGlkZW50aWNhbDogIGJ5dGVzIDAuLjY0LCBsb2NrZWQuCisJICogVW5sZXNzIHRoZSB1c2VyIGJsb2NrIGNoYW5nZWQgZnJvbSBhbGwtb25lcywgd2UgY2FuJ3QKKwkgKiB0ZWxsIHdoZXRoZXIgaXQncyBzdGlsbCB3cml0YWJsZTsgc28gd2UgYXNzdW1lIGl0IGlzbid0LgorCSAqLworCWluZm8tPnN0YXJ0ID0gMDsKKwlpbmZvLT5sZW5ndGggPSA2NDsKKwlpbmZvLT5sb2NrZWQgPSAxOworCXJldHVybiBzaXplb2YoKmluZm8pOworfQorCitzdGF0aWMgc3NpemVfdCBvdHBfcmVhZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1bnNpZ25lZCBiYXNlLAorCQl1aW50OF90ICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV9tZXNzYWdlCW07CisJc2l6ZV90CQkJbDsKKwl1aW50OF90CQkJKnNjcmF0Y2g7CisJc3RydWN0IHNwaV90cmFuc2Zlcgl0OworCWludAkJCXN0YXR1czsKKworCWlmIChvZmYgPiA2NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKG9mZiArIGxlbikgPiA2NCkKKwkJbGVuID0gNjQgLSBvZmY7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gbGVuOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisKKwlsID0gNCArIGJhc2UgKyBvZmYgKyBsZW47CisJc2NyYXRjaCA9IGt6YWxsb2MobCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzY3JhdGNoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIE9VVDogT1BfUkVBRF9TRUNVUklUWSwgMyBkb24ndC1jYXJlIGJ5dGVzLCB6ZXJvZXMKKwkgKiBJTjogIGlnbm9yZSA0IGJ5dGVzLCBkYXRhIGJ5dGVzIDAuLk4gKG1heCAxMjcpCisJICovCisJc2NyYXRjaFswXSA9IE9QX1JFQURfU0VDVVJJVFk7CisKKwltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKKwl0LnR4X2J1ZiA9IHNjcmF0Y2g7CisJdC5yeF9idWYgPSBzY3JhdGNoOworCXQubGVuID0gbDsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCisJZGF0YWZsYXNoX3dhaXRyZWFkeShzcGkpOworCisJc3RhdHVzID0gc3BpX3N5bmMoc3BpLCAmbSk7CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCW1lbWNweShidWYsIHNjcmF0Y2ggKyA0ICsgYmFzZSArIG9mZiwgbGVuKTsKKwkJc3RhdHVzID0gbGVuOworCX0KKworCWtmcmVlKHNjcmF0Y2gpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZGF0YWZsYXNoX3JlYWRfZmFjdF9vdHAoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCWxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IGRhdGFmbGFzaAkqcHJpdiA9IChzdHJ1Y3QgZGF0YWZsYXNoICopbXRkLT5wcml2OworCWludAkJCXN0YXR1czsKKworCS8qIDY0IGJ5dGVzLCBmcm9tIDAuLjYzIC4uLiBzdGFydCBhdCA2NCBvbi1jaGlwICovCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisJc3RhdHVzID0gb3RwX3JlYWQocHJpdi0+c3BpLCA2NCwgYnVmLCBmcm9tLCBsZW4pOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwkqcmV0bGVuID0gc3RhdHVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdGFmbGFzaF9yZWFkX3VzZXJfb3RwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQlsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSAoc3RydWN0IGRhdGFmbGFzaCAqKW10ZC0+cHJpdjsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiA2NCBieXRlcywgZnJvbSAwLi42MyAuLi4gc3RhcnQgYXQgMCBvbi1jaGlwICovCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisJc3RhdHVzID0gb3RwX3JlYWQocHJpdi0+c3BpLCAwLCBidWYsIGZyb20sIGxlbik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCSpyZXRsZW4gPSBzdGF0dXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGF0YWZsYXNoX3dyaXRlX3VzZXJfb3RwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQlsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZQltOworCWNvbnN0IHNpemVfdAkJbCA9IDQgKyA2NDsKKwl1aW50OF90CQkJKnNjcmF0Y2g7CisJc3RydWN0IHNwaV90cmFuc2Zlcgl0OworCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSAoc3RydWN0IGRhdGFmbGFzaCAqKW10ZC0+cHJpdjsKKwlpbnQJCQlzdGF0dXM7CisKKwlpZiAobGVuID4gNjQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU3RyaWN0bHkgc3BlYWtpbmcsIHdlICpjb3VsZCogdHJ1bmNhdGUgdGhlIHdyaXRlIC4uLiBidXQKKwkgKiBsZXQncyBub3QgZG8gdGhhdCBmb3IgdGhlIG9ubHkgd3JpdGUgdGhhdCdzIGV2ZXIgcG9zc2libGUuCisJICovCisJaWYgKChmcm9tICsgbGVuKSA+IDY0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE9VVDogT1BfV1JJVEVfU0VDVVJJVFksIDMgemVyb2VzLCA2NCBkYXRhLW9yLXplcm8gYnl0ZXMKKwkgKiBJTjogIGlnbm9yZSBhbGwKKwkgKi8KKwlzY3JhdGNoID0ga3phbGxvYyhsLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjcmF0Y2gpCisJCXJldHVybiAtRU5PTUVNOworCXNjcmF0Y2hbMF0gPSBPUF9XUklURV9TRUNVUklUWTsKKwltZW1jcHkoc2NyYXRjaCArIDQgKyBmcm9tLCBidWYsIGxlbik7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKworCW1lbXNldCgmdCwgMCwgc2l6ZW9mIHQpOworCXQudHhfYnVmID0gc2NyYXRjaDsKKwl0LmxlbiA9IGw7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCS8qIFdyaXRlIHRoZSBPVFAgYml0cywgaWYgdGhleSd2ZSBub3QgeWV0IGJlZW4gd3JpdHRlbi4KKwkgKiBUaGlzIG1vZGlmaWVzIFNSQU0gYnVmZmVyMS4KKwkgKi8KKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlkYXRhZmxhc2hfd2FpdHJlYWR5KHByaXYtPnNwaSk7CisJc3RhdHVzID0gc3BpX3N5bmMocHJpdi0+c3BpLCAmbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCWtmcmVlKHNjcmF0Y2gpOworCisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCXN0YXR1cyA9IDA7CisJCSpyZXRsZW4gPSBsZW47CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBjaGFyICpvdHBfc2V0dXAoc3RydWN0IG10ZF9pbmZvICpkZXZpY2UsIGNoYXIgcmV2aXNpb24pCit7CisJZGV2aWNlLT5nZXRfZmFjdF9wcm90X2luZm8gPSBkYXRhZmxhc2hfZ2V0X290cF9pbmZvOworCWRldmljZS0+cmVhZF9mYWN0X3Byb3RfcmVnID0gZGF0YWZsYXNoX3JlYWRfZmFjdF9vdHA7CisJZGV2aWNlLT5nZXRfdXNlcl9wcm90X2luZm8gPSBkYXRhZmxhc2hfZ2V0X290cF9pbmZvOworCWRldmljZS0+cmVhZF91c2VyX3Byb3RfcmVnID0gZGF0YWZsYXNoX3JlYWRfdXNlcl9vdHA7CisKKwkvKiByZXYgYyBwYXJ0cyAoYXQ0NWRiMzIxYyBhbmQgYXQ0NWRiMTI4MSBvbmx5ISkgdXNlIGEKKwkgKiBkaWZmZXJlbnQgd3JpdGUgcHJvY2VkdXJlOyBub3QgKHlldD8pIGltcGxlbWVudGVkLgorCSAqLworCWlmIChyZXZpc2lvbiA+ICdjJykKKwkJZGV2aWNlLT53cml0ZV91c2VyX3Byb3RfcmVnID0gZGF0YWZsYXNoX3dyaXRlX3VzZXJfb3RwOworCisJcmV0dXJuICIsIE9UUCI7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBjaGFyICpvdHBfc2V0dXAoc3RydWN0IG10ZF9pbmZvICpkZXZpY2UsIGNoYXIgcmV2aXNpb24pCit7CisJcmV0dXJuICIgKE9UUCkiOworfQorCisjZW5kaWYKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCiAvKgogICogUmVnaXN0ZXIgRGF0YUZsYXNoIGRldmljZSB3aXRoIE1URCBzdWJzeXN0ZW0uCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1hZGRfZGF0YWZsYXNoKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNoYXIgKm5hbWUsCi0JCWludCBucl9wYWdlcywgaW50IHBhZ2VzaXplLCBpbnQgcGFnZW9mZnNldCkKK2FkZF9kYXRhZmxhc2hfb3RwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNoYXIgKm5hbWUsCisJCWludCBucl9wYWdlcywgaW50IHBhZ2VzaXplLCBpbnQgcGFnZW9mZnNldCwgY2hhciByZXZpc2lvbikKIHsKIAlzdHJ1Y3QgZGF0YWZsYXNoCQkqcHJpdjsKIAlzdHJ1Y3QgbXRkX2luZm8JCQkqZGV2aWNlOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY2hhcgkJCQkqb3RwX3RhZyA9ICIiOwogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mICpwcml2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCkBAIC00ODksOCArNjY0LDEyIEBACiAJZGV2aWNlLT53cml0ZSA9IGRhdGFmbGFzaF93cml0ZTsKIAlkZXZpY2UtPnByaXYgPSBwcml2OwogCi0JZGV2X2luZm8oJnNwaS0+ZGV2LCAiJXMgKCVkIEtCeXRlcykgcGFnZXNpemUgJWQgYnl0ZXNcbiIsCi0JCQluYW1lLCBESVZfUk9VTkRfVVAoZGV2aWNlLT5zaXplLCAxMDI0KSwgcGFnZXNpemUpOworCWlmIChyZXZpc2lvbiA+PSAnYycpCisJCW90cF90YWcgPSBvdHBfc2V0dXAoZGV2aWNlLCByZXZpc2lvbik7CisKKwlkZXZfaW5mbygmc3BpLT5kZXYsICIlcyAoJWQgS0J5dGVzKSBwYWdlc2l6ZSAlZCBieXRlcyVzXG4iLAorCQkJbmFtZSwgRElWX1JPVU5EX1VQKGRldmljZS0+c2l6ZSwgMTAyNCksCisJCQlwYWdlc2l6ZSwgb3RwX3RhZyk7CiAJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgcHJpdik7CiAKIAlpZiAobXRkX2hhc19wYXJ0aXRpb25zKCkpIHsKQEAgLTUxOSw2ICs2OTgsMTQgQEAKIAlyZXR1cm4gYWRkX210ZF9kZXZpY2UoZGV2aWNlKSA9PSAxID8gLUVOT0RFViA6IDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGV2aW5pdAorYWRkX2RhdGFmbGFzaChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjaGFyICpuYW1lLAorCQlpbnQgbnJfcGFnZXMsIGludCBwYWdlc2l6ZSwgaW50IHBhZ2VvZmZzZXQpCit7CisJcmV0dXJuIGFkZF9kYXRhZmxhc2hfb3RwKHNwaSwgbmFtZSwgbnJfcGFnZXMsIHBhZ2VzaXplLAorCQkJcGFnZW9mZnNldCwgMCk7Cit9CisKIHN0cnVjdCBmbGFzaF9pbmZvIHsKIAljaGFyCQkqbmFtZTsKIApAQCAtNjY0LDEzICs4NTEsMTYgQEAKIAkgKiBUcnkgdG8gZGV0ZWN0IGRhdGFmbGFzaCBieSBKRURFQyBJRC4KIAkgKiBJZiBpdCBzdWNjZWVkcyB3ZSBrbm93IHdlIGhhdmUgZWl0aGVyIGEgQyBvciBEIHBhcnQuCiAJICogRCB3aWxsIHN1cHBvcnQgcG93ZXIgb2YgMiBwYWdlc2l6ZSBvcHRpb24uCisJICogQm90aCBzdXBwb3J0IHRoZSBzZWN1cml0eSByZWdpc3RlciwgdGhvdWdoIHdpdGggZGlmZmVyZW50CisJICogd3JpdGUgcHJvY2VkdXJlcy4KIAkgKi8KIAlpbmZvID0gamVkZWNfcHJvYmUoc3BpKTsKIAlpZiAoSVNfRVJSKGluZm8pKQogCQlyZXR1cm4gUFRSX0VSUihpbmZvKTsKIAlpZiAoaW5mbyAhPSBOVUxMKQotCQlyZXR1cm4gYWRkX2RhdGFmbGFzaChzcGksIGluZm8tPm5hbWUsIGluZm8tPm5yX3BhZ2VzLAotCQkJCSBpbmZvLT5wYWdlc2l6ZSwgaW5mby0+cGFnZW9mZnNldCk7CisJCXJldHVybiBhZGRfZGF0YWZsYXNoX290cChzcGksIGluZm8tPm5hbWUsIGluZm8tPm5yX3BhZ2VzLAorCQkJCWluZm8tPnBhZ2VzaXplLCBpbmZvLT5wYWdlb2Zmc2V0LAorCQkJCShpbmZvLT5mbGFncyAmIFNVUF9QT1cyUFMpID8gJ2QnIDogJ2MnKTsKIAogCS8qCiAJICogT2xkZXIgY2hpcHMgc3VwcG9ydCBvbmx5IGxlZ2FjeSBjb21tYW5kcywgaWRlbnRpZmluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMgYi9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYwppbmRleCBjNGY5ZDMzLi41MGNlMTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYwpAQCAtMzg4LDYgKzM4OCwxMCBAQAogCQlpZiAodGhpc0VVTiA9PSB0YXJnZXRFVU4pCiAJCQlicmVhazsKIAorCQkvKiBVbmxpbmsgdGhlIGxhc3QgYmxvY2sgZnJvbSB0aGUgY2hhaW4uICovCisJCWluZnRsLT5QVXRhYmxlW3ByZXZFVU5dID0gQkxPQ0tfTklMOworCisJCS8qIE5vdyB0cnkgdG8gZXJhc2UgaXQuICovCiAJCWlmIChJTkZUTF9mb3JtYXRibG9jayhpbmZ0bCwgdGhpc0VVTikgPCAwKSB7CiAJCQkvKgogCQkJICogQ291bGQgbm90IGVyYXNlIDogbWFyayBibG9jayBhcyByZXNlcnZlZC4KQEAgLTM5Niw3ICs0MDAsNiBAQAogCQl9IGVsc2UgewogCQkJLyogQ29ycmVjdGx5IGVyYXNlZCA6IG1hcmsgaXQgYXMgZnJlZSAqLwogCQkJaW5mdGwtPlBVdGFibGVbdGhpc0VVTl0gPSBCTE9DS19GUkVFOwotCQkJaW5mdGwtPlBVdGFibGVbcHJldkVVTl0gPSBCTE9DS19OSUw7CiAJCQlpbmZ0bC0+bnVtZnJlZUVVTnMrKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCBkZjhlMDBiLi41ZWExNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0zMzIsMzAgKzMzMiw2IEBACiAJICBNYXBwaW5nIGZvciB0aGUgRmxhZ2EgZGlnaXRhbCBtb2R1bGUuIElmIHlvdSBkb24ndCBoYXZlIG9uZSwgaWdub3JlCiAJICB0aGlzIHNldHRpbmcuCiAKLWNvbmZpZyBNVERfV0FMTlVUCi0JdHJpc3RhdGUgIkZsYXNoIGRldmljZSBtYXBwZWQgb24gSUJNIDQwNUdQIFdhbG51dCIKLQlkZXBlbmRzIG9uIE1URF9KRURFQ1BST0JFICYmIFdBTE5VVCAmJiAhUFBDX01FUkdFCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFjY2VzcyByb3V0aW5lcyBmb3IgdGhlIGZsYXNoIGNoaXBzIG9uIHRoZSBJQk0gNDA1R1AKLQkgIFdhbG51dCBib2FyZC4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGJvYXJkcyBhbmQgd291bGQgbGlrZSB0bwotCSAgdXNlIHRoZSBmbGFzaCBjaGlwcyBvbiBpdCwgc2F5ICdZJy4KLQotY29uZmlnIE1URF9FQk9OWQotCXRyaXN0YXRlICJGbGFzaCBkZXZpY2VzIG1hcHBlZCBvbiBJQk0gNDQwR1AgRWJvbnkiCi0JZGVwZW5kcyBvbiBNVERfSkVERUNQUk9CRSAmJiBFQk9OWSAmJiAhUFBDX01FUkdFCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFjY2VzcyByb3V0aW5lcyBmb3IgdGhlIGZsYXNoIGNoaXBzIG9uIHRoZSBJQk0gNDQwR1AKLQkgIEVib255IGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZCBsaWtlIHRvCi0JICB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgotCi1jb25maWcgTVREX09DT1RFQQotCXRyaXN0YXRlICJGbGFzaCBkZXZpY2VzIG1hcHBlZCBvbiBJQk0gNDQwR1ggT2NvdGVhIgotCWRlcGVuZHMgb24gTVREX0NGSSAmJiBPQ09URUEgJiYgIVBQQ19NRVJHRQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSUJNIDQ0MEdYCi0JICBPY290ZWEgYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5kIHdvdWxkIGxpa2UgdG8KLQkgIHVzZSB0aGUgZmxhc2ggY2hpcHMgb24gaXQsIHNheSAnWScuCi0KIGNvbmZpZyBNVERfUkVEV09PRAogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlcyBtYXBwZWQgb24gSUJNIFJlZHdvb2QiCiAJZGVwZW5kcyBvbiBNVERfQ0ZJICYmICggUkVEV09PRF80IHx8IFJFRFdPT0RfNSB8fCBSRURXT09EXzYgKQpAQCAtNDU4LDEzICs0MzQsNiBAQAogCSAgUGhvdG9NYXggRGlnaXRhbCBQaWN0dXJlIEZyYW1lLgogCSAgSWYgeW91IGhhdmUgc3VjaCBhIGRldmljZSwgc2F5ICdZJy4KIAotY29uZmlnIE1URF9OT1JfVE9UTwotCXRyaXN0YXRlICJOT1IgRmxhc2ggZGV2aWNlIG9uIFRPVE8gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAgJiYgT01BUF9UT1RPCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUgTk9SIGZsYXNoIG9uIHRoZSBUZXhhcyBJbnN0cnVtZW50cwotCSAgVE9UTyBib2FyZC4KLQogY29uZmlnIE1URF9INzIwWAogCXRyaXN0YXRlICJIeW5peCBldmFsdWF0aW9uIGJvYXJkIG1hcHBpbmdzIgogCWRlcGVuZHMgb24gTVREX0NGSSAmJiAoIEFSQ0hfSDcyMDEgfHwgQVJDSF9INzIwMiApCkBAIC01MjIsNyArNDkxLDcgQEAKIAogY29uZmlnIE1URF9VQ0xJTlVYCiAJdHJpc3RhdGUgIkdlbmVyaWMgdUNsaW51eCBSQU0vUk9NIGZpbGVzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1URF9QQVJUSVRJT05TICYmICFNTVUKKwlkZXBlbmRzIG9uIE1URF9QQVJUSVRJT05TICYmIE1URF9SQU0gJiYgIU1NVQogCWhlbHAKIAkgIE1hcCBkcml2ZXIgdG8gc3VwcG9ydCBpbWFnZSBiYXNlZCBmaWxlc3lzdGVtcyBmb3IgdUNsaW51eC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggNmNkYTZkZi4uNmQ5YmEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC01MCwxMiArNTAsOCBAQAogb2JqLSQoQ09ORklHX01URF9VQ0xJTlVYKQkrPSB1Y2xpbnV4Lm8KIG9iai0kKENPTkZJR19NVERfTkVUdGVsKQkrPSBuZXR0ZWwubwogb2JqLSQoQ09ORklHX01URF9TQ0IyX0ZMQVNIKQkrPSBzY2IyX2ZsYXNoLm8KLW9iai0kKENPTkZJR19NVERfRUJPTlkpCQkrPSBlYm9ueS5vCi1vYmotJChDT05GSUdfTVREX09DT1RFQSkJKz0gb2NvdGVhLm8KLW9iai0kKENPTkZJR19NVERfV0FMTlVUKSAgICAgICAgKz0gd2FsbnV0Lm8KIG9iai0kKENPTkZJR19NVERfSDcyMFgpCQkrPSBoNzIweC1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX1NCQzgyNDApCSs9IHNiYzgyNDAubwotb2JqLSQoQ09ORklHX01URF9OT1JfVE9UTykJKz0gb21hcC10b3RvLWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfSVhQNFhYKQkrPSBpeHA0eHgubwogb2JqLSQoQ09ORklHX01URF9JWFAyMDAwKQkrPSBpeHAyMDAwLm8KIG9iai0kKENPTkZJR19NVERfV1JTQkM4MjYwKQkrPSB3cl9zYmM4Mnh4X2ZsYXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYyBiL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkyYjdjNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIE1hcHBpbmcgZm9yIEVib255IHVzZXIgZmxhc2gKLSAqCi0gKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KLSNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2Vib255Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoOwotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIGVib255X3NtYWxsX21hcCA9IHsKLQkubmFtZSA9CQkiRWJvbnkgc21hbGwgZmxhc2giLAotCS5zaXplID0JCUVCT05ZX1NNQUxMX0ZMQVNIX1NJWkUsCi0JLmJhbmt3aWR0aCA9CTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIGVib255X2xhcmdlX21hcCA9IHsKLQkubmFtZSA9CQkiRWJvbnkgbGFyZ2UgZmxhc2giLAotCS5zaXplID0JCUVCT05ZX0xBUkdFX0ZMQVNIX1NJWkUsCi0JLmJhbmt3aWR0aCA9CTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWJvbnlfc21hbGxfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJPcGVuQklPUyIsCi0JCS5vZmZzZXQgPSAweDAsCi0JCS5zaXplID0gICAweDgwMDAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlYm9ueV9sYXJnZV9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9ICAgImZzIiwKLQkJLm9mZnNldCA9IDAsCi0JCS5zaXplID0gICAweDM4MDAwMCwKLQl9LAotCXsKLQkJLm5hbWUgPSAgICJmaXJtd2FyZSIsCi0JCS5vZmZzZXQgPSAweDM4MDAwMCwKLQkJLnNpemUgPSAgIDB4ODAwMDAsCi0JfQotfTsKLQotaW50IF9faW5pdCBpbml0X2Vib255KHZvaWQpCi17Ci0JdTggZnBnYTBfcmVnOwotCXU4IF9faW9tZW0gKmZwZ2EwX2FkcjsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc21hbGxfZmxhc2hfYmFzZSwgbGFyZ2VfZmxhc2hfYmFzZTsKLQotCWZwZ2EwX2FkciA9IGlvcmVtYXA2NChFQk9OWV9GUEdBX0FERFIsIDE2KTsKLQlpZiAoIWZwZ2EwX2FkcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmcGdhMF9yZWcgPSByZWFkYihmcGdhMF9hZHIpOwotCWlvdW5tYXAoZnBnYTBfYWRyKTsKLQotCWlmIChFQk9OWV9CT09UX1NNQUxMX0ZMQVNIKGZwZ2EwX3JlZykgJiYKLQkJCSFFQk9OWV9GTEFTSF9TRUwoZnBnYTBfcmVnKSkKLQkJc21hbGxfZmxhc2hfYmFzZSA9IEVCT05ZX1NNQUxMX0ZMQVNIX0hJR0gyOwotCWVsc2UgaWYgKEVCT05ZX0JPT1RfU01BTExfRkxBU0goZnBnYTBfcmVnKSAmJgotCQkJRUJPTllfRkxBU0hfU0VMKGZwZ2EwX3JlZykpCi0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBFQk9OWV9TTUFMTF9GTEFTSF9ISUdIMTsKLQllbHNlIGlmICghRUJPTllfQk9PVF9TTUFMTF9GTEFTSChmcGdhMF9yZWcpICYmCi0JCQkhRUJPTllfRkxBU0hfU0VMKGZwZ2EwX3JlZykpCi0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBFQk9OWV9TTUFMTF9GTEFTSF9MT1cyOwotCWVsc2UKLQkJc21hbGxfZmxhc2hfYmFzZSA9IEVCT05ZX1NNQUxMX0ZMQVNIX0xPVzE7Ci0KLQlpZiAoRUJPTllfQk9PVF9TTUFMTF9GTEFTSChmcGdhMF9yZWcpICYmCi0JCQkhRUJPTllfT05CUkRfRkxBU0hfRU4oZnBnYTBfcmVnKSkKLQkJbGFyZ2VfZmxhc2hfYmFzZSA9IEVCT05ZX0xBUkdFX0ZMQVNIX0xPVzsKLQllbHNlCi0JCWxhcmdlX2ZsYXNoX2Jhc2UgPSBFQk9OWV9MQVJHRV9GTEFTSF9ISUdIOwotCi0JZWJvbnlfc21hbGxfbWFwLnBoeXMgPSBzbWFsbF9mbGFzaF9iYXNlOwotCWVib255X3NtYWxsX21hcC52aXJ0ID0gaW9yZW1hcDY0KHNtYWxsX2ZsYXNoX2Jhc2UsCi0JCQkJCSBlYm9ueV9zbWFsbF9tYXAuc2l6ZSk7Ci0KLQlpZiAoIWVib255X3NtYWxsX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2hcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJmVib255X3NtYWxsX21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmZWJvbnlfc21hbGxfbWFwKTsKLQlpZiAoZmxhc2gpIHsKLQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgZWJvbnlfc21hbGxfcGFydGl0aW9ucywKLQkJCQkJQVJSQVlfU0laRShlYm9ueV9zbWFsbF9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWVib255X2xhcmdlX21hcC5waHlzID0gbGFyZ2VfZmxhc2hfYmFzZTsKLQllYm9ueV9sYXJnZV9tYXAudmlydCA9IGlvcmVtYXA2NChsYXJnZV9mbGFzaF9iYXNlLAotCQkJCQkgZWJvbnlfbGFyZ2VfbWFwLnNpemUpOwotCi0JaWYgKCFlYm9ueV9sYXJnZV9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKLQkJaW91bm1hcChlYm9ueV9zbWFsbF9tYXAudmlydCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmZWJvbnlfbGFyZ2VfbWFwKTsKLQotCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJqZWRlY19wcm9iZSIsICZlYm9ueV9sYXJnZV9tYXApOwotCWlmIChmbGFzaCkgewotCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoLCBlYm9ueV9sYXJnZV9wYXJ0aXRpb25zLAotCQkJCQlBUlJBWV9TSVpFKGVib255X2xhcmdlX3BhcnRpdGlvbnMpKTsKLQl9IGVsc2UgewotCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKLQkJaW91bm1hcChlYm9ueV9zbWFsbF9tYXAudmlydCk7Ci0JCWlvdW5tYXAoZWJvbnlfbGFyZ2VfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9lYm9ueSh2b2lkKQotewotCWlmIChmbGFzaCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoZmxhc2gpOwotCQltYXBfZGVzdHJveShmbGFzaCk7Ci0JfQotCi0JaWYgKGVib255X3NtYWxsX21hcC52aXJ0KSB7Ci0JCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOwotCQllYm9ueV9zbWFsbF9tYXAudmlydCA9IE5VTEw7Ci0JfQotCi0JaWYgKGVib255X2xhcmdlX21hcC52aXJ0KSB7Ci0JCWlvdW5tYXAoZWJvbnlfbGFyZ2VfbWFwLnZpcnQpOwotCQllYm9ueV9sYXJnZV9tYXAudmlydCA9IE5VTEw7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpbml0X2Vib255KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfZWJvbnkpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciBJQk0gNDQwR1AgRWJvbnkgYm9hcmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jIGIvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyMmVhYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qCi0gKiBNYXBwaW5nIGZvciBPY290ZWEgdXNlciBmbGFzaAotICoKLSAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKgotICogQ29weXJpZ2h0IDIwMDItMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2libTQ0eC5oPgotI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvb2NvdGVhLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoOwotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIG9jb3RlYV9zbWFsbF9tYXAgPSB7Ci0JLm5hbWUgPQkJIk9jb3RlYSBzbWFsbCBmbGFzaCIsCi0JLnNpemUgPQkJT0NPVEVBX1NNQUxMX0ZMQVNIX1NJWkUsCi0JLmJ1c3dpZHRoID0JMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gb2NvdGVhX2xhcmdlX21hcCA9IHsKLQkubmFtZSA9CQkiT2NvdGVhIGxhcmdlIGZsYXNoIiwKLQkuc2l6ZSA9CQlPQ09URUFfTEFSR0VfRkxBU0hfU0laRSwKLQkuYnVzd2lkdGggPQkxLAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9jb3RlYV9zbWFsbF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9ICAgInBpYnMiLAotCQkub2Zmc2V0ID0gMHgwLAotCQkuc2l6ZSA9ICAgMHgxMDAwMDAsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9jb3RlYV9sYXJnZV9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9ICAgImZzIiwKLQkJLm9mZnNldCA9IDAsCi0JCS5zaXplID0gICAweDMwMDAwMCwKLQl9LAotCXsKLQkJLm5hbWUgPSAgICJmaXJtd2FyZSIsCi0JCS5vZmZzZXQgPSAweDMwMDAwMCwKLQkJLnNpemUgPSAgIDB4MTAwMDAwLAotCX0KLX07Ci0KLWludCBfX2luaXQgaW5pdF9vY290ZWEodm9pZCkKLXsKLQl1OCBmcGdhMF9yZWc7Ci0JdTggKmZwZ2EwX2FkcjsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc21hbGxfZmxhc2hfYmFzZSwgbGFyZ2VfZmxhc2hfYmFzZTsKLQotCWZwZ2EwX2FkciA9IGlvcmVtYXA2NChPQ09URUFfRlBHQV9BRERSLCAxNik7Ci0JaWYgKCFmcGdhMF9hZHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnBnYTBfcmVnID0gcmVhZGIoKHVuc2lnbmVkIGxvbmcpZnBnYTBfYWRyKTsKLQlpb3VubWFwKGZwZ2EwX2Fkcik7Ci0KLQlpZiAoT0NPVEVBX0JPT1RfTEFSR0VfRkxBU0goZnBnYTBfcmVnKSkgewotCQlzbWFsbF9mbGFzaF9iYXNlID0gT0NPVEVBX1NNQUxMX0ZMQVNIX0hJR0g7Ci0JCWxhcmdlX2ZsYXNoX2Jhc2UgPSBPQ09URUFfTEFSR0VfRkxBU0hfTE9XOwotCX0KLQllbHNlIHsKLQkJc21hbGxfZmxhc2hfYmFzZSA9IE9DT1RFQV9TTUFMTF9GTEFTSF9MT1c7Ci0JCWxhcmdlX2ZsYXNoX2Jhc2UgPSBPQ09URUFfTEFSR0VfRkxBU0hfSElHSDsKLQl9Ci0KLQlvY290ZWFfc21hbGxfbWFwLnBoeXMgPSBzbWFsbF9mbGFzaF9iYXNlOwotCW9jb3RlYV9zbWFsbF9tYXAudmlydCA9IGlvcmVtYXA2NChzbWFsbF9mbGFzaF9iYXNlLAotCQkJCQkgb2NvdGVhX3NtYWxsX21hcC5zaXplKTsKLQotCWlmICghb2NvdGVhX3NtYWxsX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2hcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJm9jb3RlYV9zbWFsbF9tYXApOwotCi0JZmxhc2ggPSBkb19tYXBfcHJvYmUoIm1hcF9yb20iLCAmb2NvdGVhX3NtYWxsX21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIG9jb3RlYV9zbWFsbF9wYXJ0aXRpb25zLAotCQkJCQlBUlJBWV9TSVpFKG9jb3RlYV9zbWFsbF9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAob2NvdGVhX3NtYWxsX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlvY290ZWFfbGFyZ2VfbWFwLnBoeXMgPSBsYXJnZV9mbGFzaF9iYXNlOwotCW9jb3RlYV9sYXJnZV9tYXAudmlydCA9IGlvcmVtYXA2NChsYXJnZV9mbGFzaF9iYXNlLAotCQkJCQkgb2NvdGVhX2xhcmdlX21hcC5zaXplKTsKLQotCWlmICghb2NvdGVhX2xhcmdlX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2hcbiIpOwotCQlpb3VubWFwKG9jb3RlYV9zbWFsbF9tYXAudmlydCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmb2NvdGVhX2xhcmdlX21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJm9jb3RlYV9sYXJnZV9tYXApOwotCWlmIChmbGFzaCkgewotCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoLCBvY290ZWFfbGFyZ2VfcGFydGl0aW9ucywKLQkJCQkJQVJSQVlfU0laRShvY290ZWFfbGFyZ2VfcGFydGl0aW9ucykpOwotCX0gZWxzZSB7Ci0JCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQlpb3VubWFwKG9jb3RlYV9zbWFsbF9tYXAudmlydCk7Ci0JCWlvdW5tYXAob2NvdGVhX2xhcmdlX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfb2NvdGVhKHZvaWQpCi17Ci0JaWYgKGZsYXNoKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhmbGFzaCk7Ci0JCW1hcF9kZXN0cm95KGZsYXNoKTsKLQl9Ci0KLQlpZiAob2NvdGVhX3NtYWxsX21hcC52aXJ0KSB7Ci0JCWlvdW5tYXAoKHZvaWQgKilvY290ZWFfc21hbGxfbWFwLnZpcnQpOwotCQlvY290ZWFfc21hbGxfbWFwLnZpcnQgPSAwOwotCX0KLQotCWlmIChvY290ZWFfbGFyZ2VfbWFwLnZpcnQpIHsKLQkJaW91bm1hcCgodm9pZCAqKW9jb3RlYV9sYXJnZV9tYXAudmlydCk7Ci0JCW9jb3RlYV9sYXJnZV9tYXAudmlydCA9IDA7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpbml0X29jb3RlYSk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX29jb3RlYSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgYW5kIHBhcnRpdGlvbnMgZm9yIElCTSA0NDBHWCBPY290ZWEgYm9hcmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL29tYXAtdG90by1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE2MGViYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXAtdG90by1mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBOT1IgRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiBUSSBUb3RvIGJvYXJkCi0gKgotICoganpoYW5nQHRpLmNvbSAoQykgMjAwMyBUZXhhcyBJbnN0cnVtZW50cy4KLSAqCi0gKiAgKEMpIDIwMDIgTW9udFZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLQotI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQCi0jZXJyb3IgVGhpcyBpcyBmb3IgT01BUCBhcmNoaXRlY3R1cmUgb25seQotI2VuZGlmCi0KLS8vdGhlc2UgbGluZXMgbmVlZCBiZSBtb3ZlZCB0byBhIGhhcmR3YXJlIGhlYWRlciBmaWxlCi0jZGVmaW5lIE9NQVBfVE9UT19GTEFTSF9CQVNFIDB4ZDgwMDAwMDAKLSNkZWZpbmUgT01BUF9UT1RPX0ZMQVNIX1NJWkUgMHg4MDAwMAotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIG9tYXBfdG90b19tYXBfZmxhc2ggPSB7Ci0JLm5hbWUgPQkJIk9NQVAgVG90byBmbGFzaCIsCi0JLmJhbmt3aWR0aCA9CTIsCi0JLnZpcnQgPQkJKHZvaWQgX19pb21lbSAqKU9NQVBfVE9UT19GTEFTSF9CQVNFLAotfTsKLQotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gdG90b19mbGFzaF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9CQkiQm9vdExvYWRlciIsCi0JCS5zaXplID0JCTB4MDAwNDAwMDAsICAgICAvKiBob3BlZnVsbHkgdS1ib290IHdpbGwgc3RheSAxMjhrICsgMTI4Ki8KLQkJLm9mZnNldCA9CTAsCi0JCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSwgIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sIHsKLQkJLm5hbWUgPQkJIlJlc2VydmVkU3BhY2UiLAotCQkuc2l6ZSA9CQkweDAwMDMwMDAwLAotCQkub2Zmc2V0ID0JTVREUEFSVF9PRlNfQVBQRU5ELAotCQkvL21hc2tfZmxhZ3M6CU1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7Ci0JCS5uYW1lID0JCSJFbnZBcmVhIiwgICAgICAvKiBib3R0b20gNjRLaUIgZm9yIGVudiB2YXJzICovCi0JCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCi0JCS5vZmZzZXQgPQlNVERQQVJUX09GU19BUFBFTkQsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydHM7Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9mbGFzaCAodm9pZCkKLXsKLQotCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKLQlpbnQgbmJfcGFydHMgPSAwOwotCWludCBwYXJzZWRfbnJfcGFydHMgPSAwOwotCWNvbnN0IGNoYXIgKnBhcnRfdHlwZTsKLQotCS8qCi0JICogU3RhdGljIHBhcnRpdGlvbiBkZWZpbml0aW9uIHNlbGVjdGlvbgotCSAqLwotCXBhcnRfdHlwZSA9ICJzdGF0aWMiOwotCi0gCXBhcnRzID0gdG90b19mbGFzaF9wYXJ0aXRpb25zOwotCW5iX3BhcnRzID0gQVJSQVlfU0laRSh0b3RvX2ZsYXNoX3BhcnRpdGlvbnMpOwotCW9tYXBfdG90b19tYXBfZmxhc2guc2l6ZSA9IE9NQVBfVE9UT19GTEFTSF9TSVpFOwotCW9tYXBfdG90b19tYXBfZmxhc2gucGh5cyA9IHZpcnRfdG9fcGh5cyhPTUFQX1RPVE9fRkxBU0hfQkFTRSk7Ci0KLQlzaW1wbGVfbWFwX2luaXQoJm9tYXBfdG90b19tYXBfZmxhc2gpOwotCS8qCi0JICogTm93IGxldCdzIHByb2JlIGZvciB0aGUgYWN0dWFsIGZsYXNoLiAgRG8gaXQgaGVyZSBzaW5jZQotCSAqIHNwZWNpZmljIG1hY2hpbmUgc2V0dGluZ3MgbWlnaHQgaGF2ZSBiZWVuIHNldCBhYm92ZS4KLQkgKi8KLQlwcmludGsoS0VSTl9OT1RJQ0UgIk9NQVAgdG90byBmbGFzaDogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzXG4iLAotCQlvbWFwX3RvdG9fbWFwX2ZsYXNoLmJhbmt3aWR0aCo4KTsKLQlmbGFzaF9tdGQgPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJm9tYXBfdG90b19tYXBfZmxhc2gpOwotCWlmICghZmxhc2hfbXRkKQotCQlyZXR1cm4gLUVOWElPOwotCi0gCWlmIChwYXJzZWRfbnJfcGFydHMgPiAwKSB7Ci0JCXBhcnRzID0gcGFyc2VkX3BhcnRzOwotCQluYl9wYXJ0cyA9IHBhcnNlZF9ucl9wYXJ0czsKLQl9Ci0KLQlpZiAobmJfcGFydHMgPT0gMCkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIk9NQVAgdG90byBmbGFzaDogbm8gcGFydGl0aW9uIGluZm8gYXZhaWxhYmxlLCIKLQkJCSJyZWdpc3RlcmluZyB3aG9sZSBmbGFzaCBhdCBvbmNlXG4iKTsKLQkJaWYgKGFkZF9tdGRfZGV2aWNlKGZsYXNoX210ZCkpewotICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKLSAgICAgICAgfQotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiVXNpbmcgJXMgcGFydGl0aW9uIGRlZmluaXRpb25cbiIsCi0JCQlwYXJ0X3R5cGUpOwotCQlyZXR1cm4gYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoX210ZCwgcGFydHMsIG5iX3BhcnRzKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2luaXQgb21hcF90b3RvX210ZF9pbml0KHZvaWQpCi17Ci0JaW50IHN0YXR1czsKLQotIAlpZiAoc3RhdHVzID0gaW5pdF9mbGFzaCgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiT01BUCBUb3RvIEZsYXNoOiB1bmFibGUgdG8gaW5pdCBtYXAgZm9yIHRvdG8gZmxhc2hcbiIpOwotCX0KLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCAgX19leGl0IG9tYXBfdG90b19tdGRfY2xlYW51cCh2b2lkKQotewotCWlmIChmbGFzaF9tdGQpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKGZsYXNoX210ZCk7Ci0JCW1hcF9kZXN0cm95KGZsYXNoX210ZCk7Ci0JCWtmcmVlKHBhcnNlZF9wYXJ0cyk7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChvbWFwX3RvdG9fbXRkX2luaXQpOwotbW9kdWxlX2V4aXQob21hcF90b3RvX210ZF9jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiSmlhbiBaaGFuZyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIFRvdG8gYm9hcmQgbWFwIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wY2kuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMKaW5kZXggNWM2YTI1Yy4uNDhmNGNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wY2kuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BjaS5jCkBAIC0yMDMsMTUgKzIwMyw4IEBACiAJCSAqIG5vdCBlbmFibGVkLCBzaG91bGQgd2UgYmUgYWxsb2NhdGluZyBhIG5ldyByZXNvdXJjZSBmb3IgaXQKIAkJICogb3Igc2ltcGx5IGVuYWJsaW5nIGl0PwogCQkgKi8KLQkJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgUENJX1JPTV9SRVNPVVJDRSkgJgotCQkJCSAgICBJT1JFU09VUkNFX1JPTV9FTkFCTEUpKSB7Ci0JCSAgICAgCXUzMiB2YWw7Ci0JCQlwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBQQ0lfUk9NX1JFU09VUkNFKSB8PSBJT1JFU09VUkNFX1JPTV9FTkFCTEU7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZ2YWwpOwotCQkJdmFsIHw9IFBDSV9ST01fQUREUkVTU19FTkFCTEU7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCB2YWwpOwotCQkJcHJpbnRrKCIlczogZW5hYmxpbmcgZXhwYW5zaW9uIFJPTVxuIiwgcGNpX25hbWUoZGV2KSk7Ci0JCX0KKwkJcGNpX2VuYWJsZV9yb20oZGV2KTsKKwkJcHJpbnRrKCIlczogZW5hYmxpbmcgZXhwYW5zaW9uIFJPTVxuIiwgcGNpX25hbWUoZGV2KSk7CiAJfQogCiAJaWYgKCFsZW4gfHwgIWJhc2UpCkBAIC0yMzIsMTggKzIyNSwxMyBAQAogc3RhdGljIHZvaWQKIGludGVsX2RjMjEyODVfZXhpdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbWFwX3BjaV9pbmZvICptYXApCiB7Ci0JdTMyIHZhbDsKLQogCWlmIChtYXAtPmJhc2UpCiAJCWlvdW5tYXAobWFwLT5iYXNlKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byB1bmRvIHRoZSBQQ0kgQkFSMi9QQ0kgUk9NIEJBUiBhZGRyZXNzIGFsdGVyYXRpb24uCiAJICovCi0JcGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgUENJX1JPTV9SRVNPVVJDRSkgJj0gfklPUkVTT1VSQ0VfUk9NX0VOQUJMRTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZ2YWwpOwotCXZhbCAmPSB+UENJX1JPTV9BRERSRVNTX0VOQUJMRTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCB2YWwpOworCXBjaV9kaXNhYmxlX3JvbShkZXYpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYwppbmRleCA0OWFjZDQxLi41ZmNmZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYwpAQCAtMjMwLDggKzIzMCw3IEBACiAKICNpZmRlZiBDT05GSUdfTVREX09GX1BBUlRTCiAJaWYgKGVyciA9PSAwKSB7Ci0JCWVyciA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKCZkZXYtPmRldiwgaW5mby0+bXRkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcCwgJmluZm8tPnBhcnRzKTsKKwkJZXJyID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMoJmRldi0+ZGV2LCBkcCwgJmluZm8tPnBhcnRzKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMgYi9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQzNDc2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIE1hcHBpbmcgZm9yIFdhbG51dCBmbGFzaAotICogKHVzZWQgZWJvbnkuYyBhcyBhICJmcmFtZXdvcmsiKQotICoKLSAqIEhlaWtraSBMaW5kaG9sbSA8aG9saW5kaG9AaW5mcmFkZWFkLm9yZz4KLSAqCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KLSNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3dhbG51dC5oPgotCi0vKiB0aGVzZSBzaG91bGQgYmUgaW4gcGxhdGZvcm1zLzR4eC93YWxudXQuaCA/ICovCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9PTkJEX04oeCkJCSh4ICYgMHgwMikKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX1NSQU1fU0VMKHgpCSh4ICYgMHgwMSkKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX0xPVwkJMHhGRkYwMDAwMAotI2RlZmluZSBXQUxOVVRfRkxBU0hfSElHSAkJMHhGRkY4MDAwMAotI2RlZmluZSBXQUxOVVRfRkxBU0hfU0laRQkJMHg4MDAwMAotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaDsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyB3YWxudXRfbWFwID0gewotCS5uYW1lID0JCSJXYWxudXQgZmxhc2giLAotCS5zaXplID0JCVdBTE5VVF9GTEFTSF9TSVpFLAotCS5iYW5rd2lkdGggPQkxLAotfTsKLQotLyogQWN0dWFsbHksIE9wZW5CSU9TIGlzIHRoZSBsYXN0IDEyOCBLaUIgb2YgdGhlIGZsYXNoIC0gYmV0dGVyCi0gKiBwYXJ0aXRpb25pbmcgY291bGQgYmUgbWFkZSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHdhbG51dF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9ICAgIk9wZW5CSU9TIiwKLQkJLm9mZnNldCA9IDB4MCwKLQkJLnNpemUgPSAgIFdBTE5VVF9GTEFTSF9TSVpFLAotCQkvKi5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwgKi8gLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfQotfTsKLQotaW50IF9faW5pdCBpbml0X3dhbG51dCh2b2lkKQotewotCXU4IGZwZ2FfYnJkczE7Ci0Jdm9pZCAqZnBnYV9icmRzMV9hZHI7Ci0Jdm9pZCAqZnBnYV9zdGF0dXNfYWRyOwotCXVuc2lnbmVkIGxvbmcgZmxhc2hfYmFzZTsKLQotCS8qIHRoaXMgc2hvdWxkIGFscmVhZHkgYmUgbWFwcGVkIChwbGF0Zm9ybS80eHgvd2FsbnV0LmMpICovCi0JZnBnYV9zdGF0dXNfYWRyID0gaW9yZW1hcChXQUxOVVRfRlBHQV9CQVNFLCA4KTsKLQlpZiAoIWZwZ2Ffc3RhdHVzX2FkcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmcGdhX2JyZHMxX2FkciA9IGZwZ2Ffc3RhdHVzX2Fkcis1OwotCWZwZ2FfYnJkczEgPSByZWFkYihmcGdhX2JyZHMxX2Fkcik7Ci0JLyogaW91bm1hcChmcGdhX3N0YXR1c19hZHIpOyAqLwotCi0JaWYgKFdBTE5VVF9GTEFTSF9PTkJEX04oZnBnYV9icmRzMSkpIHsKLQkJcHJpbnRrKCJUaGUgb24tYm9hcmQgZmxhc2ggaXMgZGlzYWJsZWQgKFU3OSBzdyA1KSEiKTsKLQkJaW91bm1hcChmcGdhX3N0YXR1c19hZHIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JaWYgKFdBTE5VVF9GTEFTSF9TUkFNX1NFTChmcGdhX2JyZHMxKSkKLQkJZmxhc2hfYmFzZSA9IFdBTE5VVF9GTEFTSF9MT1c7Ci0JZWxzZQotCQlmbGFzaF9iYXNlID0gV0FMTlVUX0ZMQVNIX0hJR0g7Ci0KLQl3YWxudXRfbWFwLnBoeXMgPSBmbGFzaF9iYXNlOwotCXdhbG51dF9tYXAudmlydCA9Ci0JCSh2b2lkIF9faW9tZW0gKilpb3JlbWFwKGZsYXNoX2Jhc2UsIHdhbG51dF9tYXAuc2l6ZSk7Ci0KLQlpZiAoIXdhbG51dF9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoLlxuIik7Ci0JCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2ltcGxlX21hcF9pbml0KCZ3YWxudXRfbWFwKTsKLQotCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJqZWRlY19wcm9iZSIsICZ3YWxudXRfbWFwKTsKLQlpZiAoZmxhc2gpIHsKLQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgd2FsbnV0X3BhcnRpdGlvbnMsCi0JCQkJCUFSUkFZX1NJWkUod2FsbnV0X3BhcnRpdGlvbnMpKTsKLQl9IGVsc2UgewotCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKLQkJaW91bm1hcChmcGdhX3N0YXR1c19hZHIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfd2FsbnV0KHZvaWQpCi17Ci0JaWYgKGZsYXNoKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhmbGFzaCk7Ci0JCW1hcF9kZXN0cm95KGZsYXNoKTsKLQl9Ci0KLQlpZiAod2FsbnV0X21hcC52aXJ0KSB7Ci0JCWlvdW5tYXAoKHZvaWQgKil3YWxudXRfbWFwLnZpcnQpOwotCQl3YWxudXRfbWFwLnZpcnQgPSAwOwotCX0KLX0KLQotbW9kdWxlX2luaXQoaW5pdF93YWxudXQpOwotbW9kdWxlX2V4aXQoY2xlYW51cF93YWxudXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJIZWlra2kgTGluZGhvbG0gPGhvbGluZGhvQGluZnJhZGVhZC5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgYW5kIHBhcnRpdGlvbnMgZm9yIElCTSA0MDVHUCBXYWxudXQgYm9hcmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCA2ODFkNWFjLi4xNDA5ZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTEzMywxNSArMTMzLDEyIEBACiB9CiAKIAotc3RhdGljIGludCBibGt0cmFuc19vcGVuKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCitzdGF0aWMgaW50IGJsa3RyYW5zX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXY7Ci0Jc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyOworCXN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyID0gZGV2LT50cjsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAotCWRldiA9IGktPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXRyID0gZGV2LT50cjsKLQogCWlmICghdHJ5X21vZHVsZV9nZXQoZGV2LT5tdGQtPm93bmVyKSkKIAkJZ290byBvdXQ7CiAKQEAgLTE2NCwxNSArMTYxLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBibGt0cmFuc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCitzdGF0aWMgaW50IGJsa3RyYW5zX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2OwotCXN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0cjsKKwlzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0ciA9IGRldi0+dHI7CiAJaW50IHJldCA9IDA7CiAKLQlkZXYgPSBpLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQl0ciA9IGRldi0+dHI7Ci0KIAlpZiAodHItPnJlbGVhc2UpCiAJCXJldCA9IHRyLT5yZWxlYXNlKGRldik7CiAKQEAgLTE5NCwxMCArMTg4LDEwIEBACiAJcmV0dXJuIC1FTk9UVFk7CiB9CiAKLXN0YXRpYyBpbnQgYmxrdHJhbnNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGJsa3RyYW5zX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHIgPSBkZXYtPnRyOwogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTIxNSw3ICsyMDksNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBibGt0cmFuc19vcGVuLAogCS5yZWxlYXNlCT0gYmxrdHJhbnNfcmVsZWFzZSwKLQkuaW9jdGwJCT0gYmxrdHJhbnNfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAk9IGJsa3RyYW5zX2lvY3RsLAogCS5nZXRnZW8JCT0gYmxrdHJhbnNfZ2V0Z2VvLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IDFjNzQ3NjIuLmJjZmZlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBZb3UgY2FuJ3Qgb3BlbiB0aGUgUk8gZGV2aWNlcyBSVyAqLwotCWlmICgoZmlsZS0+Zl9tb2RlICYgMikgJiYgKG1pbm9yICYgMSkpCisJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYgKG1pbm9yICYgMSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCiAJbG9ja19rZXJuZWwoKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogCX0KIAogCS8qIFlvdSBjYW4ndCBvcGVuIGl0IFJXIGlmIGl0J3Mgbm90IGEgd3JpdGVhYmxlIGRldmljZSAqLwotCWlmICgoZmlsZS0+Zl9tb2RlICYgMikgJiYgIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpIHsKKwlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAhKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkgewogCQlwdXRfbXRkX2RldmljZShtdGQpOwogCQlyZXQgPSAtRUFDQ0VTOwogCQlnb3RvIG91dDsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJNVERfY2xvc2VcbiIpOwogCiAJLyogT25seSBzeW5jIGlmIG9wZW5lZCBSVyAqLwotCWlmICgoZmlsZS0+Zl9tb2RlICYgMikgJiYgbXRkLT5zeW5jKQorCWlmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIG10ZC0+c3luYykKIAkJbXRkLT5zeW5jKG10ZCk7CiAKIAlwdXRfbXRkX2RldmljZShtdGQpOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJd2FrZV91cCgod2FpdF9xdWV1ZV9oZWFkX3QgKilpbnN0ci0+cHJpdik7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfT1RQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfT05FTkFORF9PVFApCisjaWZkZWYgQ09ORklHX0hBVkVfTVREX09UUAogc3RhdGljIGludCBvdHBfc2VsZWN0X2ZpbGVtb2RlKHN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmksIGludCBtb2RlKQogewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbWZpLT5tdGQ7CkBAIC00NDMsNyArNDQzLDcgQEAKIAl7CiAJCXN0cnVjdCBlcmFzZV9pbmZvICplcmFzZTsKIAotCQlpZighKGZpbGUtPmZfbW9kZSAmIDIpKQorCQlpZighKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJCXJldHVybiAtRVBFUk07CiAKIAkJZXJhc2U9a3phbGxvYyhzaXplb2Yoc3RydWN0IGVyYXNlX2luZm8pLEdGUF9LRVJORUwpOwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJCXN0cnVjdCBtdGRfb29iX2J1ZiBfX3VzZXIgKnVzZXJfYnVmID0gYXJncDsKIAkgICAgICAgIHVpbnQzMl90IHJldGxlbjsKIAotCQlpZighKGZpbGUtPmZfbW9kZSAmIDIpKQorCQlpZighKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJCXJldHVybiAtRVBFUk07CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgbXRkX29vYl9idWYpKSkKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQlicmVhazsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfT1RQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfT05FTkFORF9PVFApCisjaWZkZWYgQ09ORklHX0hBVkVfTVREX09UUAogCWNhc2UgT1RQU0VMRUNUOgogCXsKIAkJaW50IG1vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjb25jYXQuYyBiL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCmluZGV4IDI5NzJhNWUuLjc4OTg0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBtYWtlIGEgbG9jYWwgY29weSBvZiBpbnN0ciB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIGNhbGxlcidzIHN0cnVjdCAqLwogCWVyYXNlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBlcmFzZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCS8qIHNhbml0eSBjaGVjazogc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZQogCQkJICogYmxvY2sgYWxpZ25tZW50IGhhcyBiZWVuIGNoZWNrZWQgYWJvdmUgKi8KIAkJCUJVR19PTihlcnIgPT0gLUVJTlZBTCk7Ci0JCQlpZiAoZXJhc2UtPmZhaWxfYWRkciAhPSAweGZmZmZmZmZmKQorCQkJaWYgKGVyYXNlLT5mYWlsX2FkZHIgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKQogCQkJCWluc3RyLT5mYWlsX2FkZHIgPSBlcmFzZS0+ZmFpbF9hZGRyICsgb2Zmc2V0OwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZG9vcHMuYyBiL2RyaXZlcnMvbXRkL210ZG9vcHMuYwppbmRleCA1YTY4MGUxLi5hZWJiM2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRvb3BzLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkb29wcy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogCisjZGVmaW5lIE1URE9PUFNfS0VSTk1TR19NQUdJQyAweDVkMDA1ZDAwCiAjZGVmaW5lIE9PUFNfUEFHRV9TSVpFIDQwOTYKIAogc3RhdGljIHN0cnVjdCBtdGRvb3BzX2NvbnRleHQgewpAQCAtOTksNyArMTAwLDcgQEAKIAlpbnQgcmV0OwogCiAJY3h0LT5uZXh0cGFnZSsrOwotCWlmIChjeHQtPm5leHRwYWdlID4gY3h0LT5vb3BzX3BhZ2VzKQorCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJY3h0LT5uZXh0cGFnZSA9IDA7CiAJY3h0LT5uZXh0Y291bnQrKzsKIAlpZiAoY3h0LT5uZXh0Y291bnQgPT0gMHhmZmZmZmZmZikKQEAgLTE0MSw3ICsxNDIsNyBAQAogCW1vZCA9IChjeHQtPm5leHRwYWdlICogT09QU19QQUdFX1NJWkUpICUgbXRkLT5lcmFzZXNpemU7CiAJaWYgKG1vZCAhPSAwKSB7CiAJCWN4dC0+bmV4dHBhZ2UgPSBjeHQtPm5leHRwYWdlICsgKChtdGQtPmVyYXNlc2l6ZSAtIG1vZCkgLyBPT1BTX1BBR0VfU0laRSk7Ci0JCWlmIChjeHQtPm5leHRwYWdlID4gY3h0LT5vb3BzX3BhZ2VzKQorCQlpZiAoY3h0LT5uZXh0cGFnZSA+PSBjeHQtPm9vcHNfcGFnZXMpCiAJCQljeHQtPm5leHRwYWdlID0gMDsKIAl9CiAKQEAgLTE1OCw3ICsxNTksNyBAQAogCQkJCWN4dC0+bmV4dHBhZ2UgKiBPT1BTX1BBR0VfU0laRSk7CiAJCWkrKzsKIAkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAobXRkLT5lcmFzZXNpemUgLyBPT1BTX1BBR0VfU0laRSk7Ci0JCWlmIChjeHQtPm5leHRwYWdlID4gY3h0LT5vb3BzX3BhZ2VzKQorCQlpZiAoY3h0LT5uZXh0cGFnZSA+PSBjeHQtPm9vcHNfcGFnZXMpCiAJCQljeHQtPm5leHRwYWdlID0gMDsKIAkJaWYgKGkgPT0gKGN4dC0+b29wc19wYWdlcyAvIChtdGQtPmVyYXNlc2l6ZSAvIE9PUFNfUEFHRV9TSVpFKSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogQWxsIGJsb2NrcyBiYWQhXG4iKTsKQEAgLTIyNCw0MCArMjI1LDQwIEBACiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKIAlpbnQgcmV0LCBwYWdlLCBtYXhwb3MgPSAwOwotCXUzMiBjb3VudCwgbWF4Y291bnQgPSAweGZmZmZmZmZmOworCXUzMiBjb3VudFsyXSwgbWF4Y291bnQgPSAweGZmZmZmZmZmOwogCXNpemVfdCByZXRsZW47CiAKIAlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgY3h0LT5vb3BzX3BhZ2VzOyBwYWdlKyspIHsKLQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCA0LCAmcmV0bGVuLCAodV9jaGFyICopICZjb3VudCk7Ci0JCWlmICgocmV0bGVuICE9IDQpIHx8ICgocmV0IDwgMCkgJiYgKHJldCAhPSAtRVVDTEVBTikpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IFJlYWQgZmFpbHVyZSBhdCAlZCAoJXRkIG9mIDQgcmVhZCkiCisJCXJldCA9IG10ZC0+cmVhZChtdGQsIHBhZ2UgKiBPT1BTX1BBR0VfU0laRSwgOCwgJnJldGxlbiwgKHVfY2hhciAqKSAmY291bnRbMF0pOworCQlpZiAoKHJldGxlbiAhPSA4KSB8fCAoKHJldCA8IDApICYmIChyZXQgIT0gLUVVQ0xFQU4pKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBSZWFkIGZhaWx1cmUgYXQgJWQgKCV0ZCBvZiA4IHJlYWQpIgogCQkJCSIsIGVyciAlZC5cbiIsIHBhZ2UgKiBPT1BTX1BBR0VfU0laRSwgcmV0bGVuLCByZXQpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoY291bnQgPT0gMHhmZmZmZmZmZikKKwkJaWYgKGNvdW50WzFdICE9IE1URE9PUFNfS0VSTk1TR19NQUdJQykKKwkJCWNvbnRpbnVlOworCQlpZiAoY291bnRbMF0gPT0gMHhmZmZmZmZmZikKIAkJCWNvbnRpbnVlOwogCQlpZiAobWF4Y291bnQgPT0gMHhmZmZmZmZmZikgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA8IDB4NDAwMDAwMDApICYmIChtYXhjb3VudCA+IDB4YzAwMDAwMDApKSB7Ci0JCQltYXhjb3VudCA9IGNvdW50OworCQl9IGVsc2UgaWYgKChjb3VudFswXSA8IDB4NDAwMDAwMDApICYmIChtYXhjb3VudCA+IDB4YzAwMDAwMDApKSB7CisJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKLQkJfSBlbHNlIGlmICgoY291bnQgPiBtYXhjb3VudCkgJiYgKGNvdW50IDwgMHhjMDAwMDAwMCkpIHsKLQkJCW1heGNvdW50ID0gY291bnQ7CisJCX0gZWxzZSBpZiAoKGNvdW50WzBdID4gbWF4Y291bnQpICYmIChjb3VudFswXSA8IDB4YzAwMDAwMDApKSB7CisJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKLQkJfSBlbHNlIGlmICgoY291bnQgPiBtYXhjb3VudCkgJiYgKGNvdW50ID4gMHhjMDAwMDAwMCkKKwkJfSBlbHNlIGlmICgoY291bnRbMF0gPiBtYXhjb3VudCkgJiYgKGNvdW50WzBdID4gMHhjMDAwMDAwMCkKIAkJCQkJJiYgKG1heGNvdW50ID4gMHg4MDAwMDAwMCkpIHsKLQkJCW1heGNvdW50ID0gY291bnQ7CisJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKIAkJfQogCX0KIAlpZiAobWF4Y291bnQgPT0gMHhmZmZmZmZmZikgewogCQljeHQtPm5leHRwYWdlID0gMDsKIAkJY3h0LT5uZXh0Y291bnQgPSAxOwotCQljeHQtPnJlYWR5ID0gMTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm10ZG9vcHM6IFJlYWR5ICVkLCAlZCAoZmlyc3QgaW5pdClcbiIsCi0JCQkJY3h0LT5uZXh0cGFnZSwgY3h0LT5uZXh0Y291bnQpOworCQlzY2hlZHVsZV93b3JrKCZjeHQtPndvcmtfZXJhc2UpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNTgsOCArMzU5LDkgQEAKIAogCWlmIChjeHQtPndyaXRlY291bnQgPT0gMCkgewogCQl1MzIgKnN0YW1wID0gY3h0LT5vb3BzX2J1ZjsKLQkJKnN0YW1wID0gY3h0LT5uZXh0Y291bnQ7Ci0JCWN4dC0+d3JpdGVjb3VudCA9IDQ7CisJCSpzdGFtcCsrID0gY3h0LT5uZXh0Y291bnQ7CisJCSpzdGFtcCA9IE1URE9PUFNfS0VSTk1TR19NQUdJQzsKKwkJY3h0LT53cml0ZWNvdW50ID0gODsKIAl9CiAKIAlpZiAoKGNvdW50ICsgY3h0LT53cml0ZWNvdW50KSA+IE9PUFNfUEFHRV9TSVpFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkcGFydC5jIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCmluZGV4IDlhMDZkYzkuLjM3Mjg5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYworKysgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCWluc3RyLT5hZGRyICs9IHBhcnQtPm9mZnNldDsKIAlyZXQgPSBwYXJ0LT5tYXN0ZXItPmVyYXNlKHBhcnQtPm1hc3RlciwgaW5zdHIpOwogCWlmIChyZXQpIHsKLQkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gMHhmZmZmZmZmZikKKwkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKQogCQkJaW5zdHItPmZhaWxfYWRkciAtPSBwYXJ0LT5vZmZzZXQ7CiAJCWluc3RyLT5hZGRyIC09IHBhcnQtPm9mZnNldDsKIAl9CkBAIC0yMjYsNyArMjI2LDcgQEAKIAlpZiAoaW5zdHItPm10ZC0+ZXJhc2UgPT0gcGFydF9lcmFzZSkgewogCQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKGluc3RyLT5tdGQpOwogCi0JCWlmIChpbnN0ci0+ZmFpbF9hZGRyICE9IDB4ZmZmZmZmZmYpCisJCWlmIChpbnN0ci0+ZmFpbF9hZGRyICE9IE1URF9GQUlMX0FERFJfVU5LTk9XTikKIAkJCWluc3RyLT5mYWlsX2FkZHIgLT0gcGFydC0+b2Zmc2V0OwogCQlpbnN0ci0+YWRkciAtPSBwYXJ0LT5vZmZzZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IDQxZjM2MWMuLjFjMmU5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTU2LDYgKzU2LDEyIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBpUEFRIGgxOTAwIGZsYXNoLgogCitjb25maWcgTVREX05BTkRfR1BJTworCXRyaXN0YXRlICJHUElPIE5BTkQgRmxhc2ggZHJpdmVyIgorCWRlcGVuZHMgb24gR0VORVJJQ19HUElPICYmIEFSTQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBhIEdQSU8gYmFzZWQgTkFORCBmbGFzaCBkcml2ZXIuCisKIGNvbmZpZyBNVERfTkFORF9TUElBCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFNQSUEgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX1A3MjBUCkBAIC02OCwxMiArNzQsNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gQW1zdHJhZCBFMyAoRGVsdGEpLgogCi1jb25maWcgTVREX05BTkRfVE9UTwotCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBUT1RPIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQICYmIEJST0tFTgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gVGV4YXMgSW5zdHJ1bWVudHMgVG90byBwbGF0Zm9ybS4KLQogY29uZmlnIE1URF9OQU5EX1RTNzI1MAogCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBUUy03MjUwIGJvYXJkIgogCWRlcGVuZHMgb24gTUFDSF9UUzcyWFgKQEAgLTE2MywxMyArMTYzLDYgQEAKIAkgIGluY29ycmVjdCBFQ0MgZ2VuZXJhdGlvbiwgYW5kIGlmIHVzaW5nIHRoZXNlLCB0aGUgZGVmYXVsdCBvZgogCSAgc29mdHdhcmUgRUNDIGlzIHByZWZlcmFibGUuCiAKLWNvbmZpZyBNVERfTkFORF9OREZDCi0JdHJpc3RhdGUgIk5ERkMgTmFuRCBGbGFzaCBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gNHh4ICYmICFQUENfTUVSR0UKLQlzZWxlY3QgTVREX05BTkRfRUNDX1NNQwotCWhlbHAKLQkgTkRGQyBOYW5kIEZsYXNoIENvbnRyb2xsZXJzIGFyZSBpbnRlZ3JhdGVkIGluIElCTS9BTUNDJ3MgNHh4IFNvQ3MKLQogY29uZmlnIE1URF9OQU5EX1MzQzI0MTBfQ0xLU1RPUAogCWJvb2wgIlMzQzI0MTAgTkFORCBJRExFIGNsb2NrIHN0b3AiCiAJZGVwZW5kcyBvbiBNVERfTkFORF9TM0MyNDEwCkBAIC0zNDAsNiArMzMzLDEzIEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uCiAJICBQWEEzeHggcHJvY2Vzc29ycwogCitjb25maWcgTVREX05BTkRfUFhBM3h4X0JVSUxUSU4KKwlib29sICJVc2UgYnVpbHRpbiBkZWZpbml0aW9ucyBmb3Igc29tZSBOQU5EIGNoaXBzIChkZXByZWNhdGVkKSIKKwlkZXBlbmRzIG9uIE1URF9OQU5EX1BYQTN4eAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBidWlsdGluIGRlZmluaXRpb25zIGZvciBzb21lIE5BTkQgY2hpcHMuIFRoaXMKKwkgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YS4KKwogY29uZmlnIE1URF9OQU5EX0NNX1gyNzAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBDTS1YMjcwIG1vZHVsZXMiCiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBNQUNIX0FSTUNPUkUKQEAgLTQwMCwxMCArNDAwLDI0IEBACiAKIGNvbmZpZyBNVERfTkFORF9GU0xfVVBNCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgb24gRnJlZXNjYWxlIFVQTSIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIE9GX0dQSU8gJiYgKFBQQ184M3h4IHx8IFBQQ184NXh4KQorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgKFBQQ184M3h4IHx8IFBQQ184NXh4KQogCXNlbGVjdCBGU0xfTEJDCiAJaGVscAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIEZsYXNoIGNoaXBzIHdpcmVkIG9udG8gRnJlZXNjYWxlIFBvd2VyUEMKIAkgIHByb2Nlc3NvciBsb2NhbGJ1cyB3aXRoIFVzZXItUHJvZ3JhbW1hYmxlIE1hY2hpbmUgc3VwcG9ydC4KIAorY29uZmlnIE1URF9OQU5EX01YQworCXRyaXN0YXRlICJNWEMgTkFORCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9NWDIKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbiB0aGUKKwkgIE1YQyBwcm9jZXNzb3JzLgorCitjb25maWcgTVREX05BTkRfU0hfRkxDVEwKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBSZW5lc2FzIFN1cGVySCBGTENUTCIKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFNVUEVSSCAmJiBDUFVfU1VCVFlQRV9TSDc3MjMKKwloZWxwCisJICBTZXZlcmFsIFJlbmVzYXMgU3VwZXJIIENQVSBoYXMgRkxDVEwuIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydAorCSAgZm9yIE5BTkQgRmxhc2ggdXNpbmcgRkxDVEwuIFRoaXMgZHJpdmVyIHN1cHBvcnQgU0g3NzIzLgorCiBlbmRpZiAjIE1URF9OQU5ECmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQppbmRleCBiNzg2YzVkLi5iNjYxNTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKQEAgLTgsNyArOCw2IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfQ0FGRSkJCSs9IGNhZmVfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfU1BJQSkJCSs9IHNwaWEubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FNU19ERUxUQSkJKz0gYW1zLWRlbHRhLm8KLW9iai0kKENPTkZJR19NVERfTkFORF9UT1RPKQkJKz0gdG90by5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQVVUQ1BVMTIpCQkrPSBhdXRjcHUxMi5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRURCNzMxMikJCSs9IGVkYjczMTIubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FVMTU1MCkJCSs9IGF1MTU1MG5kLm8KQEAgLTI0LDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19NVERfTkFORF9DUzU1M1gpCQkrPSBjczU1M3hfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfTkRGQykJCSs9IG5kZmMubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FUTUVMKQkJKz0gYXRtZWxfbmFuZC5vCitvYmotJChDT05GSUdfTVREX05BTkRfR1BJTykJCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0NNX1gyNzApCQkrPSBjbXgyNzBfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQkFTTEVSX0VYQ0lURSkJKz0gZXhjaXRlX25hbmRmbGFzaC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfUFhBM3h4KQkJKz0gcHhhM3h4X25hbmQubwpAQCAtMzQsNSArMzQsNyBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX09SSU9OKQkJKz0gb3Jpb25fbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRlNMX0VMQkMpCQkrPSBmc2xfZWxiY19uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9GU0xfVVBNKQkJKz0gZnNsX3VwbS5vCitvYmotJChDT05GSUdfTVREX05BTkRfU0hfRkxDVEwpCQkrPSBzaF9mbGN0bC5vCitvYmotJChDT05GSUdfTVREX05BTkRfTVhDKQkJKz0gbXhjX25hbmQubwogCiBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYWxhdWRhLmMKaW5kZXggMjU3OTM3Yy4uOTYyMzgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2FsYXVkYS5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAlhbFswXS5wb3J0ID0gQUxBVURBX1BPUlRfWEQ7CiAJYWxbMV0ucG9ydCA9IEFMQVVEQV9QT1JUX1NNOwogCi0JaW5mbygiYWxhdWRhIHByb2JlZCIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImFsYXVkYSBwcm9iZWRcbiIpOwogCWFsYXVkYV9jaGVja19tZWRpYShhbCk7CiAJYWxhdWRhX2NoZWNrX21lZGlhKGFsKzEpOwogCkBAIC03MTYsNyArNzE2LDcgQEAKIAlpZiAoYWwpCiAJCWtyZWZfcHV0KCZhbC0+a3JlZiwgYWxhdWRhX2RlbGV0ZSk7CiAKLQlpbmZvKCJhbGF1ZGEgZ29uZSIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImFsYXVkYSBnb25lIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwppbmRleCAzMzg3ZTBkLi5jOThjMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwpAQCAtMTc0LDQ4ICsxNzQsNiBAQAogfQogCiAvKgotICogd3JpdGUgb29iIGZvciBzbWFsbCBwYWdlcwotICovCi1zdGF0aWMgaW50IGF0bWVsX25hbmRfd3JpdGVfb29iXzUxMihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCi17Ci0JaW50IGNodW5rID0gY2hpcC0+ZWNjLmJ5dGVzICsgY2hpcC0+ZWNjLnByZXBhZCArIGNoaXAtPmVjYy5wb3N0cGFkOwotCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemUsIGxlbmd0aCA9IG10ZC0+b29ic2l6ZTsKLQlpbnQgbGVuLCBwb3MsIHN0YXR1cyA9IDA7Ci0JY29uc3QgdWludDhfdCAqYnVmcG9pID0gY2hpcC0+b29iX3BvaTsKLQotCXBvcyA9IGVjY3NpemUgKyBjaHVuazsKLQotCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgcG9zLCBwYWdlKTsKLQlsZW4gPSBtaW5fdChpbnQsIGxlbmd0aCwgY2h1bmspOwotCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuKTsKLQlidWZwb2kgKz0gbGVuOwotCWxlbmd0aCAtPSBsZW47Ci0JaWYgKGxlbmd0aCA+IDApCi0JCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuZ3RoKTsKLQotCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKLQlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOwotCi0JcmV0dXJuIHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwgPyAtRUlPIDogMDsKLQotfQotCi0vKgotICogcmVhZCBvb2IgZm9yIHNtYWxsIHBhZ2VzCi0gKi8KLXN0YXRpYyBpbnQgYXRtZWxfbmFuZF9yZWFkX29vYl81MTIoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCWludCBwYWdlLCBpbnQgc25kY21kKQotewotCWlmIChzbmRjbWQpIHsKLQkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURPT0IsIDAsIHBhZ2UpOwotCQlzbmRjbWQgPSAwOwotCX0KLQljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7Ci0JcmV0dXJuIHNuZGNtZDsKLX0KLQotLyoKICAqIENhbGN1bGF0ZSBIVyBFQ0MKICAqCiAgKiBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgYSB3cml0ZQpAQCAtMjM1LDE0ICsxOTMsMTQgQEAKIAkvKiBnZXQgdGhlIGZpcnN0IDIgRUNDIGJ5dGVzICovCiAJZWNjX3ZhbHVlID0gZWNjX3JlYWRsKGhvc3QtPmVjYywgUFIpOwogCi0JZWNjX2NvZGVbZWNjcG9zWzBdXSA9IGVjY192YWx1ZSAmIDB4RkY7Ci0JZWNjX2NvZGVbZWNjcG9zWzFdXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOworCWVjY19jb2RlWzBdID0gZWNjX3ZhbHVlICYgMHhGRjsKKwllY2NfY29kZVsxXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOwogCiAJLyogZ2V0IHRoZSBsYXN0IDIgRUNDIGJ5dGVzICovCiAJZWNjX3ZhbHVlID0gZWNjX3JlYWRsKGhvc3QtPmVjYywgTlBSKSAmIEFUTUVMX0VDQ19OUEFSSVRZOwogCi0JZWNjX2NvZGVbZWNjcG9zWzJdXSA9IGVjY192YWx1ZSAmIDB4RkY7Ci0JZWNjX2NvZGVbZWNjcG9zWzNdXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOworCWVjY19jb2RlWzJdID0gZWNjX3ZhbHVlICYgMHhGRjsKKwllY2NfY29kZVszXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzYsMTQgKzQzNCwxMiBAQAogCQkJcmVzID0gLUVJTzsKIAkJCWdvdG8gZXJyX2VjY19pb3JlbWFwOwogCQl9Ci0JCW5hbmRfY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwkJbmFuZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOwogCQluYW5kX2NoaXAtPmVjYy5jYWxjdWxhdGUgPSBhdG1lbF9uYW5kX2NhbGN1bGF0ZTsKIAkJbmFuZF9jaGlwLT5lY2MuY29ycmVjdCA9IGF0bWVsX25hbmRfY29ycmVjdDsKIAkJbmFuZF9jaGlwLT5lY2MuaHdjdGwgPSBhdG1lbF9uYW5kX2h3Y3RsOwogCQluYW5kX2NoaXAtPmVjYy5yZWFkX3BhZ2UgPSBhdG1lbF9uYW5kX3JlYWRfcGFnZTsKIAkJbmFuZF9jaGlwLT5lY2MuYnl0ZXMgPSA0OwotCQluYW5kX2NoaXAtPmVjYy5wcmVwYWQgPSAwOwotCQluYW5kX2NoaXAtPmVjYy5wb3N0cGFkID0gMDsKIAl9CiAKIAluYW5kX2NoaXAtPmNoaXBfZGVsYXkgPSAyMDsJCS8qIDIwdXMgY29tbWFuZCBkZWxheSB0aW1lICovCkBAIC01MTQsNyArNDcwLDcgQEAKIAkJZ290byBlcnJfc2Nhbl9pZGVudDsKIAl9CiAKLQlpZiAobmFuZF9jaGlwLT5lY2MubW9kZSA9PSBOQU5EX0VDQ19IV19TWU5EUk9NRSkgeworCWlmIChuYW5kX2NoaXAtPmVjYy5tb2RlID09IE5BTkRfRUNDX0hXKSB7CiAJCS8qIEVDQyBpcyBjYWxjdWxhdGVkIGZvciB0aGUgd2hvbGUgcGFnZSAoMSBzdGVwKSAqLwogCQluYW5kX2NoaXAtPmVjYy5zaXplID0gbXRkLT53cml0ZXNpemU7CiAKQEAgLTUyMiw4ICs0NzgsNiBAQAogCQlzd2l0Y2ggKG10ZC0+d3JpdGVzaXplKSB7CiAJCWNhc2UgNTEyOgogCQkJbmFuZF9jaGlwLT5lY2MubGF5b3V0ID0gJmF0bWVsX29vYmluZm9fc21hbGw7Ci0JCQluYW5kX2NoaXAtPmVjYy5yZWFkX29vYiA9IGF0bWVsX25hbmRfcmVhZF9vb2JfNTEyOwotCQkJbmFuZF9jaGlwLT5lY2Mud3JpdGVfb29iID0gYXRtZWxfbmFuZF93cml0ZV9vb2JfNTEyOwogCQkJZWNjX3dyaXRlbChob3N0LT5lY2MsIE1SLCBBVE1FTF9FQ0NfUEFHRVNJWkVfNTI4KTsKIAkJCWJyZWFrOwogCQljYXNlIDEwMjQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKaW5kZXggMzM3MGE4MC4uOWYxYjQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwpAQCAtMjg5LDggKzI4OSwxMCBAQAogCWludCBpOwogCXVpbnQ2NF90IHZhbDsKIAorI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWludCBtdGRfcGFydHNfbmIgPSAwOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICptdGRfcGFydHMgPSBOVUxMOworI2VuZGlmCiAKIAkvKiBJZiB0aGUgQ1BVIGlzbid0IGEgR2VvZGUgR1ggb3IgTFgsIGFib3J0ICovCiAJaWYgKCFpc19nZW9kZSgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwppbmRleCA5OGFkM2NlLi40YWE1YmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwpAQCAtOTE4LDggKzkxOCw3IEBACiAKICNpZmRlZiBDT05GSUdfTVREX09GX1BBUlRTCiAJaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKHByaXYtPmRldiwgJnByaXYtPm10ZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgJnBhcnRzKTsKKwkJcmV0ID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMocHJpdi0+ZGV2LCBub2RlLCAmcGFydHMpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX3VwbS5jIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKaW5kZXggMWViZmQ4Ny4uMDI0ZTNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpAQCAtMzYsOCArMzcsNiBAQAogCXVpbnQ4X3QgdXBtX2NtZF9vZmZzZXQ7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCWludCBybmJfZ3BpbzsKLQljb25zdCB1aW50MzJfdCAqd2FpdF9wYXR0ZXJuOwotCWNvbnN0IHVpbnQzMl90ICp3YWl0X3dyaXRlOwogCWludCBjaGlwX2RlbGF5OwogfTsKIApAQCAtNjEsMTAgKzYwLDExIEBACiAJaWYgKGZ1bi0+cm5iX2dwaW8gPj0gMCkgewogCQl3aGlsZSAoLS1jbnQgJiYgIWZ1bl9jaGlwX3JlYWR5KCZmdW4tPm10ZCkpCiAJCQljcHVfcmVsYXgoKTsKKwkJaWYgKCFjbnQpCisJCQlkZXZfZXJyKGZ1bi0+ZGV2LCAidGlyZWQgd2FpdGluZyBmb3IgUk5CXG4iKTsKKwl9IGVsc2UgeworCQluZGVsYXkoMTAwKTsKIAl9Ci0KLQlpZiAoIWNudCkKLQkJZGV2X2VycihmdW4tPmRldiwgInRpcmVkIHdhaXRpbmcgZm9yIFJOQlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1bl9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCkBAIC04OSw4ICs4OSw3IEBACiAKIAlmc2xfdXBtX3J1bl9wYXR0ZXJuKCZmdW4tPnVwbSwgZnVuLT5pb19iYXNlLCBjbWQpOwogCi0JaWYgKGZ1bi0+d2FpdF9wYXR0ZXJuKQotCQlmdW5fd2FpdF9ybmIoZnVuKTsKKwlmdW5fd2FpdF9ybmIoZnVuKTsKIH0KIAogc3RhdGljIHVpbnQ4X3QgZnVuX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKQEAgLTExNiwxNCArMTE1LDE2IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJb3V0XzgoZnVuLT5jaGlwLklPX0FERFJfVywgYnVmW2ldKTsKLQkJaWYgKGZ1bi0+d2FpdF93cml0ZSkKLQkJCWZ1bl93YWl0X3JuYihmdW4pOworCQlmdW5fd2FpdF9ybmIoZnVuKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGZ1bl9jaGlwX2luaXQoc3RydWN0IGZzbF91cG1fbmFuZCAqZnVuKQorc3RhdGljIGludCBfX2RldmluaXQgZnVuX2NoaXBfaW5pdChzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4sCisJCQkJICAgY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICp1cG1fbnAsCisJCQkJICAgY29uc3Qgc3RydWN0IHJlc291cmNlICppb19yZXMpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmZsYXNoX25wOwogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwsIH07CiAjZW5kaWYKQEAgLTE0MywxOCArMTQ0LDM3IEBACiAJZnVuLT5tdGQucHJpdiA9ICZmdW4tPmNoaXA7CiAJZnVuLT5tdGQub3duZXIgPSBUSElTX01PRFVMRTsKIAorCWZsYXNoX25wID0gb2ZfZ2V0X25leHRfY2hpbGQodXBtX25wLCBOVUxMKTsKKwlpZiAoIWZsYXNoX25wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZ1bi0+bXRkLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiV4LiVzIiwgaW9fcmVzLT5zdGFydCwKKwkJCQkgIGZsYXNoX25wLT5uYW1lKTsKKwlpZiAoIWZ1bi0+bXRkLm5hbWUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCiAJcmV0ID0gbmFuZF9zY2FuKCZmdW4tPm10ZCwgMSk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWZ1bi0+bXRkLm5hbWUgPSBmdW4tPmRldi0+YnVzX2lkOworCQlnb3RvIGVycjsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXJldCA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgcGFydF90eXBlcywgJmZ1bi0+cGFydHMsIDApOwotCWlmIChyZXQgPiAwKQotCQlyZXR1cm4gYWRkX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgZnVuLT5wYXJ0cywgcmV0KTsKKworI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFMKKwlpZiAocmV0ID09IDApCisJCXJldCA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKGZ1bi0+ZGV2LCAmZnVuLT5tdGQsCisJCQkJCSAgICAgIGZsYXNoX25wLCAmZnVuLT5wYXJ0cyk7CiAjZW5kaWYKLQlyZXR1cm4gYWRkX210ZF9kZXZpY2UoJmZ1bi0+bXRkKTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0ID0gYWRkX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgZnVuLT5wYXJ0cywgcmV0KTsKKwllbHNlCisjZW5kaWYKKwkJcmV0ID0gYWRkX210ZF9kZXZpY2UoJmZ1bi0+bXRkKTsKK2VycjoKKwlvZl9ub2RlX3B1dChmbGFzaF9ucCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZnVuX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LApAQCAtMjExLDYgKzIzMSwxMiBAQAogCQlnb3RvIGVycjI7CiAJfQogCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImNoaXAtZGVsYXkiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJZnVuLT5jaGlwX2RlbGF5ID0gKnByb3A7CisJZWxzZQorCQlmdW4tPmNoaXBfZGVsYXkgPSA1MDsKKwogCWZ1bi0+aW9fYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZvZmRldi0+ZGV2LCBpb19yZXMuc3RhcnQsCiAJCQkJCSAgaW9fcmVzLmVuZCAtIGlvX3Jlcy5zdGFydCArIDEpOwogCWlmICghZnVuLT5pb19iYXNlKSB7CkBAIC0yMjAsMTcgKzI0Niw4IEBACiAKIAlmdW4tPmRldiA9ICZvZmRldi0+ZGV2OwogCWZ1bi0+bGFzdF9jdHJsID0gTkFORF9DTEU7Ci0JZnVuLT53YWl0X3BhdHRlcm4gPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsICJmc2wsd2FpdC1wYXR0ZXJuIiwKLQkJCQkJICAgIE5VTEwpOwotCWZ1bi0+d2FpdF93cml0ZSA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImZzbCx3YWl0LXdyaXRlIiwgTlVMTCk7CiAKLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiY2hpcC1kZWxheSIsIE5VTEwpOwotCWlmIChwcm9wKQotCQlmdW4tPmNoaXBfZGVsYXkgPSAqcHJvcDsKLQllbHNlCi0JCWZ1bi0+Y2hpcF9kZWxheSA9IDUwOwotCi0JcmV0ID0gZnVuX2NoaXBfaW5pdChmdW4pOworCXJldCA9IGZ1bl9jaGlwX2luaXQoZnVuLCBvZmRldi0+bm9kZSwgJmlvX3Jlcyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnIyOwogCkBAIC0yNTEsNiArMjY4LDcgQEAKIAlzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4gPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwogCiAJbmFuZF9yZWxlYXNlKCZmdW4tPm10ZCk7CisJa2ZyZWUoZnVuLT5tdGQubmFtZSk7CiAKIAlpZiAoZnVuLT5ybmJfZ3BpbyA+PSAwKQogCQlncGlvX2ZyZWUoZnVuLT5ybmJfZ3Bpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2dwaW8uYyBiL2RyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTAyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2dwaW8uYwpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIGRyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCisgKgorICogVXBkYXRlZCwgYW5kIGNvbnZlcnRlZCB0byBnZW5lcmljIEdQSU8gYmFzZWQgZHJpdmVyIGJ5IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBXcml0dGVuIGJ5IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgQmFzZWQgb24gMi40IHZlcnNpb24gYnkgTWFyayBXaGl0dGFrZXIKKyAqCisgKiDCqSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIERldmljZSBkcml2ZXIgZm9yIE5BTkQgY29ubmVjdGVkIHZpYSBHUElPCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC1ncGlvLmg+CisKK3N0cnVjdCBncGlvbXRkIHsKKwl2b2lkIF9faW9tZW0JCSppb19zeW5jOworCXN0cnVjdCBtdGRfaW5mbwkJbXRkX2luZm87CisJc3RydWN0IG5hbmRfY2hpcAluYW5kX2NoaXA7CisJc3RydWN0IGdwaW9fbmFuZF9wbGF0ZGF0YSBwbGF0OworfTsKKworI2RlZmluZSBncGlvX25hbmRfZ2V0cHJpdih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGdwaW9tdGQsIG10ZF9pbmZvKQorCisKKyNpZmRlZiBDT05GSUdfQVJNCisvKiBncGlvX25hbmRfZG9zeW5jKCkKKyAqCisgKiBNYWtlIHN1cmUgdGhlIEdQSU8gc3RhdGUgY2hhbmdlcyBvY2N1ciBpbi1vcmRlciB3aXRoIHdyaXRlcyB0byBOQU5ECisgKiBtZW1vcnkgcmVnaW9uLgorICogTmVlZGVkIG9uIFBYQSBkdWUgdG8gYnVzLXJlb3JkZXJpbmcgd2l0aGluIHRoZSBTb0MgaXRzZWxmIChzZWUgc2VjdGlvbiBvbgorICogSS9PIG9yZGVyaW5nIGluIFBYQSBtYW51YWwgKHNlY3Rpb24gMi4zLCBwMzUpCisgKi8KK3N0YXRpYyB2b2lkIGdwaW9fbmFuZF9kb3N5bmMoc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAoZ3Bpb210ZC0+aW9fc3luYykgeworCQkvKgorCQkgKiBMaW51eCBtZW1vcnkgYmFycmllcnMgZG9uJ3QgY2F0ZXIgZm9yIHdoYXQncyByZXF1aXJlZCBoZXJlLgorCQkgKiBXaGF0J3MgcmVxdWlyZWQgaXMgd2hhdCdzIGhlcmUgLSBhIHJlYWQgZnJvbSBhIHNlcGFyYXRlCisJCSAqIHJlZ2lvbiB3aXRoIGEgZGVwZW5kZW5jeSBvbiB0aGF0IHJlYWQuCisJCSAqLworCQl0bXAgPSByZWFkbChncGlvbXRkLT5pb19zeW5jKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3YgJTEsICUwXG4iIDogIj1yIiAodG1wKSA6ICJyIiAodG1wKSk7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX25hbmRfZG9zeW5jKHN0cnVjdCBncGlvbXRkICpncGlvbXRkKSB7fQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdwaW9fbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQgPSBncGlvX25hbmRfZ2V0cHJpdihtdGQpOworCisJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlLCAhKGN0cmwgJiBOQU5EX05DRSkpOworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fY2xlLCAhIShjdHJsICYgTkFORF9DTEUpKTsKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSwgISEoY3RybCAmIE5BTkRfQUxFKSk7CisJCWdwaW9fbmFuZF9kb3N5bmMoZ3Bpb210ZCk7CisJfQorCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJd3JpdGViKGNtZCwgZ3Bpb210ZC0+bmFuZF9jaGlwLklPX0FERFJfVyk7CisJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJd3JpdGVzYih0aGlzLT5JT19BRERSX1csIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlyZWFkc2IodGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBjaGFyIHJlYWQsICpwID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJlYWQgPSByZWFkYih0aGlzLT5JT19BRERSX1IpOworCQlpZiAocmVhZCAhPSBwW2ldKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGVyciBhdCAlZCAocmVhZCAlMDR4IHZzICUwNHgpXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpLCByZWFkLCBwW2ldKTsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3dyaXRlYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylidWYsIDIpKSB7CisJCXdyaXRlc3codGhpcy0+SU9fQUREUl9XLCBidWYsIGxlbj4+MSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXVuc2lnbmVkIHNob3J0ICpwdHIgPSAodW5zaWduZWQgc2hvcnQgKilidWY7CisKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyLCBwdHIrKykKKwkJCXdyaXRldygqcHRyLCB0aGlzLT5JT19BRERSX1cpOworCX0KK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3JlYWRidWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWJ1ZiwgMikpIHsKKwkJcmVhZHN3KHRoaXMtPklPX0FERFJfUiwgYnVmLCBsZW4+PjEpOworCX0gZWxzZSB7CisJCWludCBpOworCQl1bnNpZ25lZCBzaG9ydCAqcHRyID0gKHVuc2lnbmVkIHNob3J0ICopYnVmOworCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMiwgcHRyKyspCisJCQkqcHRyID0gcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX3ZlcmlmeWJ1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIHNob3J0IHJlYWQsICpwID0gKHVuc2lnbmVkIHNob3J0ICopIGJ1ZjsKKwlpbnQgaSwgZXJyID0gMDsKKwlsZW4gPj49IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJcmVhZCA9IHJlYWR3KHRoaXMtPklPX0FERFJfUik7CisJCWlmIChyZWFkICE9IHBbaV0pIHsKKwkJCXByX2RlYnVnKCIlczogZXJyIGF0ICVkIChyZWFkICUwNHggdnMgJTA0eClcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGksIHJlYWQsIHBbaV0pOworCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX2RldnJlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkID0gZ3Bpb19uYW5kX2dldHByaXYobXRkKTsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdwaW9fbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCW5hbmRfcmVsZWFzZSgmZ3Bpb210ZC0+bXRkX2luZm8pOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlvdW5tYXAoZ3Bpb210ZC0+aW9fc3luYyk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlvdW5tYXAoZ3Bpb210ZC0+bmFuZF9jaGlwLklPX0FERFJfUik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsIDApOworCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsIDEpOworCisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUpOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fYWxlKTsKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbndwKTsKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7CisKKwlrZnJlZShncGlvbXRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZXF1ZXN0X2FuZF9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgc2l6ZV90IHNpemUsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyKQoreworCXZvaWQgX19pb21lbSAqcHRyOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgbmFtZSkpIHsKKwkJKmVyciA9IC1FQlVTWTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcHRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoIXB0cikgeworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJCSplcnIgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBncGlvX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJc3RydWN0IHJlc291cmNlICpyZXMwLCAqcmVzMTsKKwlpbnQgcmV0OworCisJaWYgKCFkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlczAgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdwaW9tdGQgPSBremFsbG9jKHNpemVvZigqZ3Bpb210ZCksIEdGUF9LRVJORUwpOworCWlmIChncGlvbXRkID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIE5BTkQgTVREXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdGhpcyA9ICZncGlvbXRkLT5uYW5kX2NoaXA7CisJdGhpcy0+SU9fQUREUl9SID0gcmVxdWVzdF9hbmRfcmVtYXAocmVzMCwgMiwgIk5BTkQiLCAmcmV0KTsKKwlpZiAoIXRoaXMtPklPX0FERFJfUikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byBtYXAgTkFORFxuIik7CisJCWdvdG8gZXJyX21hcDsKKwl9CisKKwlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmIChyZXMxKSB7CisJCWdwaW9tdGQtPmlvX3N5bmMgPSByZXF1ZXN0X2FuZF9yZW1hcChyZXMxLCA0LCAiTkFORCBzeW5jIiwgJnJldCk7CisJCWlmICghZ3Bpb210ZC0+aW9fc3luYykgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gbWFwIHN5bmMgTkFORFxuIik7CisJCQlnb3RvIGVycl9zeW5jOworCQl9CisJfQorCisJbWVtY3B5KCZncGlvbXRkLT5wbGF0LCBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBzaXplb2YoZ3Bpb210ZC0+cGxhdCkpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsICJOQU5EIE5DRSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX25jZTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSwgMSk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsICJOQU5EIE5XUCIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfbndwOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgMSk7CisJfQorCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fYWxlLCAiTkFORCBBTEUiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hbGU7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9tdGQtPnBsYXQuZ3Bpb19hbGUsIDApOworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fY2xlLCAiTkFORCBDTEUiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGU7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUsIDApOworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fcmR5LCAiTkFORCBSRFkiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZHk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7CisKKworCXRoaXMtPklPX0FERFJfVyAgPSB0aGlzLT5JT19BRERSX1I7CisJdGhpcy0+ZWNjLm1vZGUgICA9IE5BTkRfRUNDX1NPRlQ7CisJdGhpcy0+b3B0aW9ucyAgICA9IGdwaW9tdGQtPnBsYXQub3B0aW9uczsKKwl0aGlzLT5jaGlwX2RlbGF5ID0gZ3Bpb210ZC0+cGxhdC5jaGlwX2RlbGF5OworCisJLyogaW5zdGFsbCBvdXIgcm91dGluZXMgKi8KKwl0aGlzLT5jbWRfY3RybCAgID0gZ3Bpb19uYW5kX2NtZF9jdHJsOworCXRoaXMtPmRldl9yZWFkeSAgPSBncGlvX25hbmRfZGV2cmVhZHk7CisKKwlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKKwkJdGhpcy0+cmVhZF9idWYgICA9IGdwaW9fbmFuZF9yZWFkYnVmMTY7CisJCXRoaXMtPndyaXRlX2J1ZiAgPSBncGlvX25hbmRfd3JpdGVidWYxNjsKKwkJdGhpcy0+dmVyaWZ5X2J1ZiA9IGdwaW9fbmFuZF92ZXJpZnlidWYxNjsKKwl9IGVsc2UgeworCQl0aGlzLT5yZWFkX2J1ZiAgID0gZ3Bpb19uYW5kX3JlYWRidWY7CisJCXRoaXMtPndyaXRlX2J1ZiAgPSBncGlvX25hbmRfd3JpdGVidWY7CisJCXRoaXMtPnZlcmlmeV9idWYgPSBncGlvX25hbmRfdmVyaWZ5YnVmOworCX0KKworCS8qIHNldCB0aGUgbXRkIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5hbmQgZHJpdmVyICovCisJZ3Bpb210ZC0+bXRkX2luZm8ucHJpdiA9IHRoaXM7CisJZ3Bpb210ZC0+bXRkX2luZm8ub3duZXIgPSBUSElTX01PRFVMRTsKKworCWlmIChuYW5kX3NjYW4oJmdwaW9tdGQtPm10ZF9pbmZvLCAxKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIG5hbmQgY2hpcHMgZm91bmQ/XG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl93cDsKKwl9CisKKwlpZiAoZ3Bpb210ZC0+cGxhdC5hZGp1c3RfcGFydHMpCisJCWdwaW9tdGQtPnBsYXQuYWRqdXN0X3BhcnRzKCZncGlvbXRkLT5wbGF0LAorCQkJCQkgICBncGlvbXRkLT5tdGRfaW5mby5zaXplKTsKKworCWFkZF9tdGRfcGFydGl0aW9ucygmZ3Bpb210ZC0+bXRkX2luZm8sIGdwaW9tdGQtPnBsYXQucGFydHMsCisJCQkgICBncGlvbXRkLT5wbGF0Lm51bV9wYXJ0cyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBncGlvbXRkKTsKKworCXJldHVybiAwOworCitlcnJfd3A6CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsIDApOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKK2Vycl9yZHk6CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUpOworZXJyX2NsZToKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSk7CitlcnJfYWxlOgorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3ApKQorCQlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCk7CitlcnJfbndwOgorCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlKTsKK2Vycl9uY2U6CisJaW91bm1hcChncGlvbXRkLT5pb19zeW5jKTsKKwlpZiAocmVzMSkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDEpOworZXJyX3N5bmM6CisJaW91bm1hcChncGlvbXRkLT5uYW5kX2NoaXAuSU9fQUREUl9SKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzMC0+c3RhcnQsIHJlczAtPmVuZCAtIHJlczAtPnN0YXJ0ICsgMSk7CitlcnJfbWFwOgorCWtmcmVlKGdwaW9tdGQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGdwaW9fbmFuZF9wcm9iZSwKKwkucmVtb3ZlCQk9IGdwaW9fbmFuZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImdwaW8tbmFuZCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdwaW9fbmFuZF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiR1BJTyBOQU5EIGRyaXZlciwgwqkgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ3Bpb19uYW5kX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBncGlvX25hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZncGlvX25hbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ3Bpb19uYW5kX2luaXQpOworbW9kdWxlX2V4aXQoZ3Bpb19uYW5kX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdQSU8gTkFORCBEcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZkNGYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCkBAIC0wLDAgKzEsMTA3NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAibXhjX25hbmQiCisKKy8qIEFkZHJlc3NlcyBmb3IgTkZDIHJlZ2lzdGVycyAqLworI2RlZmluZSBORkNfQlVGX1NJWkUJCTB4RTAwCisjZGVmaW5lIE5GQ19CVUZfQUREUgkJMHhFMDQKKyNkZWZpbmUgTkZDX0ZMQVNIX0FERFIJCTB4RTA2CisjZGVmaW5lIE5GQ19GTEFTSF9DTUQJCTB4RTA4CisjZGVmaW5lIE5GQ19DT05GSUcJCTB4RTBBCisjZGVmaW5lIE5GQ19FQ0NfU1RBVFVTX1JFU1VMVAkweEUwQworI2RlZmluZSBORkNfUlNMVE1BSU5fQVJFQQkweEUwRQorI2RlZmluZSBORkNfUlNMVFNQQVJFX0FSRUEJMHhFMTAKKyNkZWZpbmUgTkZDX1dSUFJPVAkJMHhFMTIKKyNkZWZpbmUgTkZDX1VOTE9DS1NUQVJUX0JMS0FERFIJMHhFMTQKKyNkZWZpbmUgTkZDX1VOTE9DS0VORF9CTEtBRERSCTB4RTE2CisjZGVmaW5lIE5GQ19ORl9XUlBSU1QJCTB4RTE4CisjZGVmaW5lIE5GQ19DT05GSUcxCQkweEUxQQorI2RlZmluZSBORkNfQ09ORklHMgkJMHhFMUMKKworLyogQWRkcmVzc2VzIGZvciBORkMgUkFNIEJVRkZFUiBNYWluIGFyZWEgMCAqLworI2RlZmluZSBNQUlOX0FSRUEwCQkweDAwMAorI2RlZmluZSBNQUlOX0FSRUExCQkweDIwMAorI2RlZmluZSBNQUlOX0FSRUEyCQkweDQwMAorI2RlZmluZSBNQUlOX0FSRUEzCQkweDYwMAorCisvKiBBZGRyZXNzZXMgZm9yIE5GQyBTUEFSRSBCVUZGRVIgU3BhcmUgYXJlYSAwICovCisjZGVmaW5lIFNQQVJFX0FSRUEwCQkweDgwMAorI2RlZmluZSBTUEFSRV9BUkVBMQkJMHg4MTAKKyNkZWZpbmUgU1BBUkVfQVJFQTIJCTB4ODIwCisjZGVmaW5lIFNQQVJFX0FSRUEzCQkweDgzMAorCisvKiBTZXQgSU5UIHRvIDAsIEZDTUQgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgQ29tbWFuZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0NNRCAgICAgICAgICAgIDB4MQorCisvKiBTZXQgSU5UIHRvIDAsIEZBREQgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgQWRkcmVzcyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0FERFIgICAgICAgICAgIDB4MgorCisvKiBTZXQgSU5UIHRvIDAsIEZESSB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBJbnB1dCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lOUFVUICAgICAgICAgIDB4NAorCisvKiBTZXQgSU5UIHRvIDAsIEZETyB0byAwMDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgorICogZm9yIERhdGEgT3V0cHV0IG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfT1VUUFVUICAgICAgICAgMHg4CisKKy8qIFNldCBJTlQgdG8gMCwgRkQwIHRvIDAxMCwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgUmVhZCBJRCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lEICAgICAgICAgICAgIDB4MTAKKworLyogU2V0IElOVCB0byAwLCBGRE8gdG8gMTAwLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBSZWFkIFN0YXR1cyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX1NUQVRVUyAgICAgICAgIDB4MjAKKworLyogU2V0IElOVCB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIgZm9yIFJlYWQKKyAqIFN0YXR1cyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lOVCAgICAgICAgICAgIDB4ODAwMAorCisjZGVmaW5lIE5GQ19TUF9FTiAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTkZDX0VDQ19FTiAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBORkNfSU5UX01TSyAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIE5GQ19CSUcgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgTkZDX1JTVCAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBORkNfQ0UgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIE5GQ19PTkVfQ1lDTEUgICAgICAgKDEgPDwgOCkKKworc3RydWN0IG14Y19uYW5kX2hvc3QgeworCXN0cnVjdCBtdGRfaW5mbwkJbXRkOworCXN0cnVjdCBuYW5kX2NoaXAJbmFuZDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CisJc3RydWN0IGRldmljZQkJKmRldjsKKworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJaW50CQkJc3BhcmVfb25seTsKKwlpbnQJCQlzdGF0dXNfcmVxdWVzdDsKKwlpbnQJCQlwYWdlc2l6ZV8yazsKKwl1aW50MTZfdAkJY29sX2FkZHI7CisJc3RydWN0IGNsawkJKmNsazsKKwlpbnQJCQljbGtfYWN0OworCWludAkJCWlycTsKKworCXdhaXRfcXVldWVfaGVhZF90CWlycV93YWl0cTsKK307CisKKy8qIERlZmluZSBkZWxheXMgaW4gbWljcm9zZWMgZm9yIE5BTkQgZGV2aWNlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgVFJPUF9VU19ERUxBWSAgIDIwMDAKKy8qIE1hY3JvcyB0byBnZXQgYnl0ZSBhbmQgYml0IHBvc2l0aW9ucyBvZiBFQ0MgKi8KKyNkZWZpbmUgQ09MUE9TKHgpICAoKHgpID4+IDMpCisjZGVmaW5lIEJJVFBPUyh4KSAoKHgpICYgMHhmKQorCisvKiBEZWZpbmUgc2luZ2xlIGJpdCBFcnJvciBwb3NpdGlvbnMgaW4gTWFpbiAmIFNwYXJlIGFyZWEgKi8KKyNkZWZpbmUgTUFJTl9TSU5HTEVCSVRfRVJST1IgMHg0CisjZGVmaW5lIFNQQVJFX1NJTkdMRUJJVF9FUlJPUiAweDEKKworLyogT09CIHBsYWNlbWVudCBibG9jayBmb3IgdXNlIHdpdGggaGFyZHdhcmUgZWNjIGdlbmVyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9od19lY2Nvb2JfOCA9IHsKKwkuZWNjYnl0ZXMgPSA1LAorCS5lY2Nwb3MgPSB7NiwgNywgOCwgOSwgMTB9LAorCS5vb2JmcmVlID0ge3swLCA1fSwgezExLCA1fSwgfQorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYl8xNiA9IHsKKwkuZWNjYnl0ZXMgPSA1LAorCS5lY2Nwb3MgPSB7NiwgNywgOCwgOSwgMTB9LAorCS5vb2JmcmVlID0ge3swLCA2fSwgezEyLCA0fSwgfQorfTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworI2VuZGlmCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteGNfbmZjX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CisKKwl1aW50MTZfdCB0bXA7CisKKwl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCXRtcCB8PSBORkNfSU5UX01TSzsgLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd2FrZV91cCgmaG9zdC0+aXJxX3dhaXRxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgTkFOREZDIHRvIHdhaXQgZm9yIHRoZSBiYXNpYyBvcGVyYXRpb24gdG8KKyAqIGNvbXBsZXRlIGJ5IGNoZWNraW5nIHRoZSBJTlQgYml0IG9mIGNvbmZpZzIgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHdhaXRfb3BfZG9uZShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgaW50IG1heF9yZXRyaWVzLAorCQkJCXVpbnQxNl90IHBhcmFtLCBpbnQgdXNlaXJxKQoreworCXVpbnQzMl90IHRtcDsKKworCWlmICh1c2VpcnEpIHsKKwkJaWYgKChyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpICYgTkZDX0lOVCkgPT0gMCkgeworCisJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQkJdG1wICAmPSB+TkZDX0lOVF9NU0s7CS8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KKwkJCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisKKwkJCXdhaXRfZXZlbnQoaG9zdC0+aXJxX3dhaXRxLAorCQkJCXJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgJiBORkNfSU5UKTsKKworCQkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKwkJCXRtcCAgJj0gfk5GQ19JTlQ7CisJCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQl9CisJfSBlbHNlIHsKKwkJd2hpbGUgKG1heF9yZXRyaWVzLS0gPiAwKSB7CisJCQlpZiAocmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKSAmIE5GQ19JTlQpIHsKKwkJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJCXRtcCAgJj0gfk5GQ19JTlQ7CisJCQkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVkZWxheSgxKTsKKwkJfQorCQlpZiAobWF4X3JldHJpZXMgPD0gMCkKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlcyglZCk6IElOVCBub3Qgc2V0XG4iLAorCQkJICAgICAgX19mdW5jX18sIHBhcmFtKTsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHRoZSBzcGVjaWZpZWQgY29tbWFuZCB0byB0aGUgTkFORCBkZXZpY2UgYW5kCisgKiB3YWl0cyBmb3IgY29tcGxldGlvbi4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfY21kKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50MTZfdCBjbWQsIGludCB1c2VpcnEpCit7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfY21kKGhvc3QsIDB4JXgsICVkKVxuIiwgY21kLCB1c2VpcnEpOworCisJd3JpdGV3KGNtZCwgaG9zdC0+cmVncyArIE5GQ19GTEFTSF9DTUQpOworCXdyaXRldyhORkNfQ01ELCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIGNtZCwgdXNlaXJxKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBhZGRyZXNzIChvciBwYXJ0aWFsIGFkZHJlc3MpIHRvIHRoZQorICogTkFORCBkZXZpY2UuIFRoZSBhZGRyZXNzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzb3VyY2UvZGVzdGluYXRpb24gZm9yCisgKiBhIE5BTkQgY29tbWFuZC4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfYWRkcihzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgdWludDE2X3QgYWRkciwgaW50IGlzbGFzdCkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9hZGRyKGhvc3QsIDB4JXggJWQpXG4iLCBhZGRyLCBpc2xhc3QpOworCisJd3JpdGV3KGFkZHIsIGhvc3QtPnJlZ3MgKyBORkNfRkxBU0hfQUREUik7CisJd3JpdGV3KE5GQ19BRERSLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIGFkZHIsIGlzbGFzdCk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdGhlIE5BTkRGQyB0byBpbml0YXRlIHRoZSB0cmFuc2ZlcgorICogb2YgZGF0YSBjdXJyZW50bHkgaW4gdGhlIE5BTkRGQyBSQU0gYnVmZmVyIHRvIHRoZSBOQU5EIGRldmljZS4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfcHJvZ19wYWdlKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50OF90IGJ1Zl9pZCwKKwkJCWludCBzcGFyZV9vbmx5KQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJzZW5kX3Byb2dfcGFnZSAoJWQpXG4iLCBzcGFyZV9vbmx5KTsKKworCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KKwl3cml0ZXcoYnVmX2lkLCBob3N0LT5yZWdzICsgTkZDX0JVRl9BRERSKTsKKworCS8qIENvbmZpZ3VyZSBzcGFyZSBvciBwYWdlK3NwYXJlIGFjY2VzcyAqLworCWlmICghaG9zdC0+cGFnZXNpemVfMmspIHsKKwkJdWludDE2X3QgY29uZmlnMSA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCWlmIChzcGFyZV9vbmx5KQorCQkJY29uZmlnMSB8PSBORkNfU1BfRU47CisJCWVsc2UKKwkJCWNvbmZpZzEgJj0gfihORkNfU1BfRU4pOworCQl3cml0ZXcoY29uZmlnMSwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9CisKKwl3cml0ZXcoTkZDX0lOUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOworfQorCisvKiBSZXF1ZXN0cyBOQU5ERkMgdG8gaW5pdGF0ZWQgdGhlIHRyYW5zZmVyIG9mIGRhdGEgZnJvbSB0aGUKKyAqIE5BTkQgZGV2aWNlIGludG8gaW4gdGhlIE5BTkRGQyByYW0gYnVmZmVyLiAqLworc3RhdGljIHZvaWQgc2VuZF9yZWFkX3BhZ2Uoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQ4X3QgYnVmX2lkLAorCQlpbnQgc3BhcmVfb25seSkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9yZWFkX3BhZ2UgKCVkKVxuIiwgc3BhcmVfb25seSk7CisKKwkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgcGFnZSByZWFkL3dyaXRlICovCisJd3JpdGV3KGJ1Zl9pZCwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisKKwkvKiBDb25maWd1cmUgc3BhcmUgb3IgcGFnZStzcGFyZSBhY2Nlc3MgKi8KKwlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCXVpbnQzMl90IGNvbmZpZzEgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQlpZiAoc3BhcmVfb25seSkKKwkJCWNvbmZpZzEgfD0gTkZDX1NQX0VOOworCQllbHNlCisJCQljb25maWcxICY9IH5ORkNfU1BfRU47CisJCXdyaXRldyhjb25maWcxLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0KKworCXdyaXRldyhORkNfT1VUUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOworfQorCisvKiBSZXF1ZXN0IHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlIE5BTkQgZGV2aWNlIElELiAqLworc3RhdGljIHZvaWQgc2VuZF9yZWFkX2lkKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaG9zdC0+bmFuZDsKKwl1aW50MTZfdCB0bXA7CisKKwkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgZGV2aWNlIElEIG91dHB1dCAqLworCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogUmVhZCBJRCBpbnRvIG1haW4gYnVmZmVyICovCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgJj0gfk5GQ19TUF9FTjsKKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd3JpdGV3KE5GQ19JRCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKworCS8qIFdhaXQgZm9yIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLworCXdhaXRfb3BfZG9uZShob3N0LCBUUk9QX1VTX0RFTEFZLCAwLCB0cnVlKTsKKworCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgeworCQl2b2lkIF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTA7CisJCS8qIGNvbXByZXNzIHRoZSBJRCBpbmZvICovCisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDIpLCBtYWluX2J1ZiArIDEpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyA0KSwgbWFpbl9idWYgKyAyKTsKKwkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgNiksIG1haW5fYnVmICsgMyk7CisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDgpLCBtYWluX2J1ZiArIDQpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyAxMCksIG1haW5fYnVmICsgNSk7CisJfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlcXVlc3RzIHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlCisgKiBOQU5EIGRldmljZSBzdGF0dXMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdHVzLiAqLworc3RhdGljIHVpbnQxNl90IGdldF9kZXZfc3RhdHVzKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXZvaWQgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMTsKKwl1aW50MzJfdCBzdG9yZTsKKwl1aW50MTZfdCByZXQsIHRtcDsKKwkvKiBJc3N1ZSBzdGF0dXMgcmVxdWVzdCB0byBOQU5EIGRldmljZSAqLworCisJLyogc3RvcmUgdGhlIG1haW4gYXJlYTEgZmlyc3Qgd29yZCwgbGF0ZXIgZG8gcmVjb3ZlcnkgKi8KKwlzdG9yZSA9IHJlYWRsKG1haW5fYnVmKTsKKwkvKiBOQU5ERkMgYnVmZmVyIDEgaXMgdXNlZCBmb3IgZGV2aWNlIHN0YXR1cyB0byBwcmV2ZW50CisJICogY29ycnVwdGlvbiBvZiByZWFkL3dyaXRlIGJ1ZmZlciBvbiBzdGF0dXMgcmVxdWVzdHMuICovCisJd3JpdGV3KDEsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogUmVhZCBzdGF0dXMgaW50byBtYWluIGJ1ZmZlciAqLworCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJdG1wICY9IH5ORkNfU1BfRU47CisJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCXdyaXRldyhORkNfU1RBVFVTLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIDAsIHRydWUpOworCisJLyogU3RhdHVzIGlzIHBsYWNlZCBpbiBmaXJzdCB3b3JkIG9mIG1haW4gYnVmZmVyICovCisJLyogZ2V0IHN0YXR1cywgdGhlbiByZWNvdmVyeSBhcmVhIDEgZGF0YSAqLworCXJldCA9IHJlYWR3KG1haW5fYnVmKTsKKwl3cml0ZWwoc3RvcmUsIG1haW5fYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb25zIGlzIHVzZWQgYnkgdXBwZXIgbGF5ZXIgdG8gY2hlY2tzIGlmIGRldmljZSBpcyByZWFkeSAqLworc3RhdGljIGludCBteGNfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJLyoKKwkgKiBORkMgaGFuZGxlcyBSL0IgaW50ZXJuYWxseS4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uCisJICogYWx3YXlzIHJldHVybnMgc3RhdHVzIGFzIHJlYWR5LgorCSAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBteGNfbmFuZF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQoreworCS8qCisJICogSWYgSFcgRUNDIGlzIGVuYWJsZWQsIHdlIHR1cm4gaXQgb24gZHVyaW5nIGluaXQuIFRoZXJlIGlzCisJICogbm8gbmVlZCB0byBlbmFibGUgYWdhaW4gaGVyZS4KKwkgKi8KK30KKworc3RhdGljIGludCBteGNfbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAorCQkJCSB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKworCS8qCisJICogMS1CaXQgZXJyb3JzIGFyZSBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZCBpbiBIVy4gIE5vIG5lZWQgZm9yCisJICogYWRkaXRpb25hbCBjb3JyZWN0aW9uLiAgMi1CaXQgZXJyb3JzIGNhbm5vdCBiZSBjb3JyZWN0ZWQgYnkKKwkgKiBIVyBFQ0MsIHNvIHdlIG5lZWQgdG8gcmV0dXJuIGZhaWx1cmUKKwkgKi8KKwl1aW50MTZfdCBlY2Nfc3RhdHVzID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19FQ0NfU1RBVFVTX1JFU1VMVCk7CisKKwlpZiAoKChlY2Nfc3RhdHVzICYgMHgzKSA9PSAyKSB8fCAoKGVjY19zdGF0dXMgPj4gMikgPT0gMikpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwKKwkJICAgICAgIk1YQ19OQU5EOiBIV0VDQyB1bmNvcnJlY3RhYmxlIDItYml0IEVDQyBlcnJvclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteGNfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKKwkJCQkgIHVfY2hhciAqZWNjX2NvZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1X2NoYXIgbXhjX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwl1aW50OF90IHJldCA9IDA7CisJdWludDE2X3QgY29sLCByZF93b3JkOworCXVpbnQxNl90IF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTA7CisJdWludDE2X3QgX19pb21lbSAqc3BhcmVfYnVmID0gaG9zdC0+cmVncyArIFNQQVJFX0FSRUEwOworCisJLyogQ2hlY2sgZm9yIHN0YXR1cyByZXF1ZXN0ICovCisJaWYgKGhvc3QtPnN0YXR1c19yZXF1ZXN0KQorCQlyZXR1cm4gZ2V0X2Rldl9zdGF0dXMoaG9zdCkgJiAweEZGOworCisJLyogR2V0IGNvbHVtbiBmb3IgMTYtYml0IGFjY2VzcyAqLworCWNvbCA9IGhvc3QtPmNvbF9hZGRyID4+IDE7CisKKwkvKiBJZiB3ZSBhcmUgYWNjZXNzaW5nIHRoZSBzcGFyZSByZWdpb24gKi8KKwlpZiAoaG9zdC0+c3BhcmVfb25seSkKKwkJcmRfd29yZCA9IHJlYWR3KCZzcGFyZV9idWZbY29sXSk7CisJZWxzZQorCQlyZF93b3JkID0gcmVhZHcoJm1haW5fYnVmW2NvbF0pOworCisJLyogUGljayB1cHBlci9sb3dlciBieXRlIG9mIHdvcmQgZnJvbSBSQU0gYnVmZmVyICovCisJaWYgKGhvc3QtPmNvbF9hZGRyICYgMHgxKQorCQlyZXQgPSAocmRfd29yZCA+PiA4KSAmIDB4RkY7CisJZWxzZQorCQlyZXQgPSByZF93b3JkICYgMHhGRjsKKworCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyKys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDE2X3QgbXhjX25hbmRfcmVhZF93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwl1aW50MTZfdCBjb2wsIHJkX3dvcmQsIHJldDsKKwl1aW50MTZfdCBfX2lvbWVtICpwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfcmVhZF93b3JkKGNvbCA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIpOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisJLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCisJCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKKworCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJcCA9IChob3N0LT5yZWdzICsgTUFJTl9BUkVBMCkgKyAoY29sID4+IDEpOworCWVsc2UKKwkJcCA9IChob3N0LT5yZWdzICsgU1BBUkVfQVJFQTApICsgKChjb2wgLSBtdGQtPndyaXRlc2l6ZSkgPj4gMSk7CisKKwlpZiAoY29sICYgMSkgeworCQlyZF93b3JkID0gcmVhZHcocCk7CisJCXJldCA9IChyZF93b3JkID4+IDgpICYgMHhmZjsKKwkJcmRfd29yZCA9IHJlYWR3KCZwWzFdKTsKKwkJcmV0IHw9IChyZF93b3JkIDw8IDgpICYgMHhmZjAwOworCisJfSBlbHNlCisJCXJldCA9IHJlYWR3KHApOworCisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIgPSBjb2wgKyAyOworCisJcmV0dXJuIHJldDsKK30KKworLyogV3JpdGUgZGF0YSBvZiBsZW5ndGggbGVuIHRvIGJ1ZmZlciBidWYuIFRoZSBkYXRhIHRvIGJlCisgKiB3cml0dGVuIG9uIE5BTkQgRmxhc2ggaXMgZmlyc3QgY29waWVkIHRvIFJBTWJ1ZmZlci4gQWZ0ZXIgdGhlIERhdGEgSW5wdXQKKyAqIE9wZXJhdGlvbiBieSB0aGUgTkZDLCB0aGUgZGF0YSBpcyB3cml0dGVuIHRvIE5BTkQgRmxhc2ggKi8KK3N0YXRpYyB2b2lkIG14Y19uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisJaW50IG4sIGNvbCwgaSA9IDA7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICJteGNfbmFuZF93cml0ZV9idWYoY29sID0gJWQsIGxlbiA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIsCisJICAgICAgbGVuKTsKKworCWNvbCA9IGhvc3QtPmNvbF9hZGRyOworCisJLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCisJCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKKworCW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZSAtIGNvbDsKKwluID0gbWluKGxlbiwgbik7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICIlczolZDogY29sID0gJWQsIG4gPSAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBjb2wsIG4pOworCisJd2hpbGUgKG4pIHsKKwkJdm9pZCBfX2lvbWVtICpwOworCisJCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJCXAgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMCArIChjb2wgJiB+Myk7CisJCWVsc2UKKwkJCXAgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTAgLQorCQkJCQkJbXRkLT53cml0ZXNpemUgKyAoY29sICYgfjMpOworCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczolZDogcCA9ICVwXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgX19MSU5FX18sIHApOworCisJCWlmICgoKGNvbCB8IChpbnQpJmJ1ZltpXSkgJiAzKSB8fCBuIDwgMTYpIHsKKwkJCXVpbnQzMl90IGRhdGEgPSAwOworCisJCQlpZiAoY29sICYgMyB8fCBuIDwgNCkKKwkJCQlkYXRhID0gcmVhZGwocCk7CisKKwkJCXN3aXRjaCAoY29sICYgMykgeworCQkJY2FzZSAwOgorCQkJCWlmIChuKSB7CisJCQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmZmZmZmMDApIHwKKwkJCQkJICAgIChidWZbaSsrXSA8PCAwKTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDE6CisJCQkJaWYgKG4pIHsKKwkJCQkJZGF0YSA9IChkYXRhICYgMHhmZmZmMDBmZikgfAorCQkJCQkgICAgKGJ1ZltpKytdIDw8IDgpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMjoKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweGZmMDBmZmZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgMTYpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMzoKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweDAwZmZmZmZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgMjQpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCX0KKworCQkJd3JpdGVsKGRhdGEsIHApOworCQl9IGVsc2UgeworCQkJaW50IG0gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKKworCQkJaWYgKGNvbCA+PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQltICs9IG10ZC0+b29ic2l6ZTsKKworCQkJbSA9IG1pbihuLCBtKSAmIH4zOworCisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCQkJICAgICAgIiVzOiVkOiBuID0gJWQsIG0gPSAlZCwgaSA9ICVkLCBjb2wgPSAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCAgX19MSU5FX18sIG4sIG0sIGksIGNvbCk7CisKKwkJCW1lbWNweShwLCAmYnVmW2ldLCBtKTsKKwkJCWNvbCArPSBtOworCQkJaSArPSBtOworCQkJbiAtPSBtOworCQl9CisJfQorCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyID0gY29sOworfQorCisvKiBSZWFkIHRoZSBkYXRhIGJ1ZmZlciBmcm9tIHRoZSBOQU5EIEZsYXNoLiBUbyByZWFkIHRoZSBkYXRhIGZyb20gTkFORAorICogRmxhc2ggZmlyc3QgdGhlIGRhdGEgb3V0cHV0IGN5Y2xlIGlzIGluaXRpYXRlZCBieSB0aGUgTkZDLCB3aGljaCBjb3BpZXMKKyAqIHRoZSBkYXRhIHRvIFJBTWJ1ZmZlci4gVGhpcyBkYXRhIG9mIGxlbmd0aCBsZW4gaXMgdGhlbiBjb3BpZWQgdG8gYnVmZmVyIGJ1Zi4KKyAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwlpbnQgbiwgY29sLCBpID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIm14Y19uYW5kX3JlYWRfYnVmKGNvbCA9ICVkLCBsZW4gPSAlZClcbiIsIGhvc3QtPmNvbF9hZGRyLCBsZW4pOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisKKwkvKiBBZGp1c3Qgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUgJiYgaG9zdC0+c3BhcmVfb25seSkKKwkJY29sICs9IG10ZC0+d3JpdGVzaXplOworCisJbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplIC0gY29sOworCW4gPSBtaW4obGVuLCBuKTsKKworCXdoaWxlIChuKSB7CisJCXZvaWQgX19pb21lbSAqcDsKKworCQlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUpCisJCQlwID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTAgKyAoY29sICYgfjMpOworCQllbHNlCisJCQlwID0gaG9zdC0+cmVncyArIFNQQVJFX0FSRUEwIC0KKwkJCQkJbXRkLT53cml0ZXNpemUgKyAoY29sICYgfjMpOworCisJCWlmICgoKGNvbCB8IChpbnQpJmJ1ZltpXSkgJiAzKSB8fCBuIDwgMTYpIHsKKwkJCXVpbnQzMl90IGRhdGE7CisKKwkJCWRhdGEgPSByZWFkbChwKTsKKwkJCXN3aXRjaCAoY29sICYgMykgeworCQkJY2FzZSAwOgorCQkJCWlmIChuKSB7CisJCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhKTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDE6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gOCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJY2FzZSAyOgorCQkJCWlmIChuKSB7CisJCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhID4+IDE2KTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDM6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gMjQpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBtID0gbXRkLT53cml0ZXNpemUgLSBjb2w7CisKKwkJCWlmIChjb2wgPj0gbXRkLT53cml0ZXNpemUpCisJCQkJbSArPSBtdGQtPm9vYnNpemU7CisKKwkJCW0gPSBtaW4obiwgbSkgJiB+MzsKKwkJCW1lbWNweSgmYnVmW2ldLCBwLCBtKTsKKwkJCWNvbCArPSBtOworCQkJaSArPSBtOworCQkJbiAtPSBtOworCQl9CisJfQorCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyID0gY29sOworCit9CisKKy8qIFVzZWQgYnkgdGhlIHVwcGVyIGxheWVyIHRvIHZlcmlmeSB0aGUgZGF0YSBpbiBOQU5EIEZsYXNoCisgKiB3aXRoIHRoZSBkYXRhIGluIHRoZSBidWYuICovCitzdGF0aWMgaW50IG14Y19uYW5kX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB1cHBlciBsYXllciBmb3Igc2VsZWN0IGFuZAorICogZGVzZWxlY3Qgb2YgdGhlIE5BTkQgY2hpcCAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKworI2lmZGVmIENPTkZJR19NVERfTkFORF9NWENfRk9SQ0VfQ0UKKwlpZiAoY2hpcCA+IDApIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwKKwkJICAgICAgIkVSUk9SOiAgSWxsZWdhbCBjaGlwIHNlbGVjdCAoY2hpcCA9ICVkKVxuIiwgY2hpcCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2hpcCA9PSAtMSkgeworCQl3cml0ZXcocmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKSAmIH5ORkNfQ0UsCisJCQkJaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRldyhyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpIHwgTkZDX0NFLAorCQkJaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKyNlbmRpZgorCisJc3dpdGNoIChjaGlwKSB7CisJY2FzZSAtMToKKwkJLyogRGlzYWJsZSB0aGUgTkZDIGNsb2NrICovCisJCWlmIChob3N0LT5jbGtfYWN0KSB7CisJCQljbGtfZGlzYWJsZShob3N0LT5jbGspOworCQkJaG9zdC0+Y2xrX2FjdCA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAwOgorCQkvKiBFbmFibGUgdGhlIE5GQyBjbG9jayAqLworCQlpZiAoIWhvc3QtPmNsa19hY3QpIHsKKwkJCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwkJCWhvc3QtPmNsa19hY3QgPSAxOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBVc2VkIGJ5IHRoZSB1cHBlciBsYXllciB0byB3cml0ZSBjb21tYW5kIHRvIE5BTkQgRmxhc2ggZm9yCisgKiBkaWZmZXJlbnQgb3BlcmF0aW9ucyB0byBiZSBjYXJyaWVkIG91dCBvbiBOQU5EIEZsYXNoICovCitzdGF0aWMgdm9pZCBteGNfbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLAorCQkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCWludCB1c2VpcnEgPSB0cnVlOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfY29tbWFuZCAoY21kID0gMHgleCwgY29sID0gMHgleCwgcGFnZSA9IDB4JXgpXG4iLAorCSAgICAgIGNvbW1hbmQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKKworCS8qIFJlc2V0IGNvbW1hbmQgc3RhdGUgaW5mb3JtYXRpb24gKi8KKwlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IGZhbHNlOworCisJLyogQ29tbWFuZCBwcmUtcHJvY2Vzc2luZyBzdGVwICovCisJc3dpdGNoIChjb21tYW5kKSB7CisKKwljYXNlIE5BTkRfQ01EX1NUQVRVUzoKKwkJaG9zdC0+Y29sX2FkZHIgPSAwOworCQlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW47CisJCWhvc3QtPnNwYXJlX29ubHkgPSBmYWxzZTsKKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKwkJaG9zdC0+c3BhcmVfb25seSA9IHRydWU7CisJCXVzZWlycSA9IGZhbHNlOworCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCisJCQljb21tYW5kID0gTkFORF9DTURfUkVBRDA7IC8qIG9ubHkgUkVBRDAgaXMgdmFsaWQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkvKgorCQkJICogRklYTUU6IGJlZm9yZSBzZW5kIFNFUUlOIGNvbW1hbmQgZm9yIHdyaXRlIE9PQiwKKwkJCSAqIFdlIG11c3QgcmVhZCBvbmUgcGFnZSBvdXQuCisJCQkgKiBGb3IgSzlGMUdYWCBoYXMgbm8gUkVBRDEgY29tbWFuZCB0byBzZXQgY3VycmVudCBIVworCQkJICogcG9pbnRlciB0byBzcGFyZSBhcmVhLCB3ZSBtdXN0IHdyaXRlIHRoZSB3aG9sZSBwYWdlCisJCQkgKiBpbmNsdWRpbmcgT09CIHRvZ2V0aGVyLgorCQkJICovCisJCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCisJCQkJLyogY2FsbCBvdXJzZWxmIHRvIHJlYWQgYSBwYWdlICovCisJCQkJbXhjX25hbmRfY29tbWFuZChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLAorCQkJCQkJcGFnZV9hZGRyKTsKKworCQkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW4gLSBtdGQtPndyaXRlc2l6ZTsKKwkJCWhvc3QtPnNwYXJlX29ubHkgPSB0cnVlOworCisJCQkvKiBTZXQgcHJvZ3JhbSBwb2ludGVyIHRvIHNwYXJlIHJlZ2lvbiAqLworCQkJaWYgKCFob3N0LT5wYWdlc2l6ZV8yaykKKwkJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFET09CLCBmYWxzZSk7CisJCX0gZWxzZSB7CisJCQlob3N0LT5zcGFyZV9vbmx5ID0gZmFsc2U7CisJCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKworCQkJLyogU2V0IHByb2dyYW0gcG9pbnRlciB0byBwYWdlIHN0YXJ0ICovCisJCQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKQorCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQUQwLCBmYWxzZSk7CisJCX0KKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCQkvKiBkYXRhIGluIDQgYXJlYXMgZGF0YXMgKi8KKwkJCXNlbmRfcHJvZ19wYWdlKGhvc3QsIDEsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMiwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3Byb2dfcGFnZShob3N0LCAzLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTE6CisJCXVzZWlycSA9IGZhbHNlOworCQlicmVhazsKKwl9CisKKwkvKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4gKi8KKwlzZW5kX2NtZChob3N0LCBjb21tYW5kLCB1c2VpcnEpOworCisJLyogV3JpdGUgb3V0IGNvbHVtbiBhZGRyZXNzLCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY29sdW1uICE9IC0xKSB7CisJCS8qCisJCSAqIE1YQyBOQU5ERkMgY2FuIG9ubHkgcGVyZm9ybSBmdWxsIHBhZ2Urc3BhcmUgb3IKKwkJICogc3BhcmUtb25seSByZWFkL3dyaXRlLiAgV2hlbiB0aGUgdXBwZXIgbGF5ZXJzCisJCSAqIGxheWVycyBwZXJmb3JtIGEgcmVhZC93cml0ZSBidWYgb3BlcmF0aW9uLAorCQkgKiB3ZSB3aWxsIHVzZWQgdGhlIHNhdmVkIGNvbHVtbiBhZHJlc3MgdG8gaW5kZXggaW50bworCQkgKiB0aGUgZnVsbCBwYWdlLgorCQkgKi8KKwkJc2VuZF9hZGRyKGhvc3QsIDAsIHBhZ2VfYWRkciA9PSAtMSk7CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykKKwkJCS8qIGFub3RoZXIgY29sIGFkZHIgY3ljbGUgZm9yIDJrIHBhZ2UgKi8KKwkJCXNlbmRfYWRkcihob3N0LCAwLCBmYWxzZSk7CisJfQorCisJLyogV3JpdGUgb3V0IHBhZ2UgYWRkcmVzcywgaWYgbmVjZXNzYXJ5ICovCisJaWYgKHBhZ2VfYWRkciAhPSAtMSkgeworCQkvKiBwYWRkcl8wIC0gcF9hZGRyXzcgKi8KKwkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgJiAweGZmKSwgZmFsc2UpOworCisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykgeworCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweEZGLCBmYWxzZSk7CisJCQlpZiAobXRkLT5zaXplID49IDB4NDAwMDAwMDApCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZiwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBoaWdoZXIgZGVuc2l0eSBkZXZpY2VzICovCisJCQlpZiAobXRkLT5zaXplID49IDB4NDAwMDAwMCkgeworCQkJCS8qIHBhZGRyXzggLSBwYWRkcl8xNSAqLworCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDgpICYgMHhmZiwgZmFsc2UpOworCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYsIHRydWUpOworCQkJfSBlbHNlCisJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCB0cnVlKTsKKwkJfQorCX0KKworCS8qIENvbW1hbmQgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgKi8KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKworCWNhc2UgTkFORF9DTURfUkVTRVQ6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCWNhc2UgTkFORF9DTURfUkVBRDA6CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykgeworCQkJLyogc2VuZCByZWFkIGNvbmZpcm0gY29tbWFuZCAqLworCQkJc2VuZF9jbWQoaG9zdCwgTkFORF9DTURfUkVBRFNUQVJULCB0cnVlKTsKKwkJCS8qIHJlYWQgZm9yIGVhY2ggQVJFQSAqLworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAxLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJCXNlbmRfcmVhZF9wYWdlKGhvc3QsIDIsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMywgaG9zdC0+c3BhcmVfb25seSk7CisJCX0gZWxzZQorCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCXNlbmRfcmVhZF9pZChob3N0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfRVJBU0UyOgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y25kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1aW50MTZfdCB0bXA7CisJaW50IGVyciA9IDAsIG5yX3BhcnRzID0gMDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLworCWhvc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhjX25hbmRfaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OworCS8qIHN0cnVjdHVyZXMgbXVzdCBiZSBsaW5rZWQgKi8KKwl0aGlzID0gJmhvc3QtPm5hbmQ7CisJbXRkID0gJmhvc3QtPm10ZDsKKwltdGQtPnByaXYgPSB0aGlzOworCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIDUwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLworCXRoaXMtPmNoaXBfZGVsYXkgPSA1OworCisJdGhpcy0+cHJpdiA9IGhvc3Q7CisJdGhpcy0+ZGV2X3JlYWR5ID0gbXhjX25hbmRfZGV2X3JlYWR5OworCXRoaXMtPmNtZGZ1bmMgPSBteGNfbmFuZF9jb21tYW5kOworCXRoaXMtPnNlbGVjdF9jaGlwID0gbXhjX25hbmRfc2VsZWN0X2NoaXA7CisJdGhpcy0+cmVhZF9ieXRlID0gbXhjX25hbmRfcmVhZF9ieXRlOworCXRoaXMtPnJlYWRfd29yZCA9IG14Y19uYW5kX3JlYWRfd29yZDsKKwl0aGlzLT53cml0ZV9idWYgPSBteGNfbmFuZF93cml0ZV9idWY7CisJdGhpcy0+cmVhZF9idWYgPSBteGNfbmFuZF9yZWFkX2J1ZjsKKwl0aGlzLT52ZXJpZnlfYnVmID0gbXhjX25hbmRfdmVyaWZ5X2J1ZjsKKworCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5mY19jbGsiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpCisJCWdvdG8gZWNsazsKKworCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwlob3N0LT5jbGtfYWN0ID0gMTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcmVzOworCX0KKworCWhvc3QtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghaG9zdC0+cmVncykgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVyZXM7CisJfQorCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgfD0gTkZDX0lOVF9NU0s7CisJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhvc3QtPmlycV93YWl0cSk7CisKKwlob3N0LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJZXJyID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBteGNfbmZjX2lycSwgMCwgIm14Y19uZCIsIGhvc3QpOworCWlmIChlcnIpCisJCWdvdG8gZWlycTsKKworCWlmIChwZGF0YS0+aHdfZWNjKSB7CisJCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBteGNfbmFuZF9jYWxjdWxhdGVfZWNjOworCQl0aGlzLT5lY2MuaHdjdGwgPSBteGNfbmFuZF9lbmFibGVfaHdlY2M7CisJCXRoaXMtPmVjYy5jb3JyZWN0ID0gbXhjX25hbmRfY29ycmVjdF9kYXRhOworCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCQl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwkJdGhpcy0+ZWNjLmJ5dGVzID0gMzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl84OworCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQl0bXAgfD0gTkZDX0VDQ19FTjsKKwkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9IGVsc2UgeworCQl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwkJdGhpcy0+ZWNjLmJ5dGVzID0gMzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl84OworCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCXRtcCAmPSB+TkZDX0VDQ19FTjsKKwkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9CisKKwkvKiBSZXNldCBOQU5EICovCisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCisJLyogcHJlc2V0IG9wZXJhdGlvbiAqLworCS8qIFVubG9jayB0aGUgaW50ZXJuYWwgUkFNIEJ1ZmZlciAqLworCXdyaXRldygweDIsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHKTsKKworCS8qIEJsb2NrcyB0byBiZSB1bmxvY2tlZCAqLworCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfVU5MT0NLU1RBUlRfQkxLQUREUik7CisJd3JpdGV3KDB4NDAwMCwgaG9zdC0+cmVncyArIE5GQ19VTkxPQ0tFTkRfQkxLQUREUik7CisKKwkvKiBVbmxvY2sgQmxvY2sgQ29tbWFuZCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZSAqLworCXdyaXRldygweDQsIGhvc3QtPnJlZ3MgKyBORkNfV1JQUk9UKTsKKworCS8qIE5BTkQgYnVzIHdpZHRoIGRldGVybWluZXMgYWNjZXNzIGZ1bnRpb25zIHVzZWQgYnkgdXBwZXIgbGF5ZXIgKi8KKwlpZiAocGRhdGEtPndpZHRoID09IDIpIHsKKwkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OworCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzE2OworCX0KKworCWhvc3QtPnBhZ2VzaXplXzJrID0gMDsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4obXRkLCAxKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkgICAgICAiTVhDX05EOiBVbmFibGUgdG8gZmluZCBhbnkgTkFORCBkZXZpY2UuXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVzY2FuOworCX0KKworCS8qIFJlZ2lzdGVyIHRoZSBwYXJ0aXRpb25zICovCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJbnJfcGFydHMgPQorCSAgICBwYXJzZV9tdGRfcGFydGl0aW9ucyhtdGQsIHBhcnRfcHJvYmVzLCAmaG9zdC0+cGFydHMsIDApOworCWlmIChucl9wYXJ0cyA+IDApCisJCWFkZF9tdGRfcGFydGl0aW9ucyhtdGQsIGhvc3QtPnBhcnRzLCBucl9wYXJ0cyk7CisJZWxzZQorI2VuZGlmCisJeworCQlwcl9pbmZvKCJSZWdpc3RlcmluZyAlcyBhcyB3aG9sZSBkZXZpY2VcbiIsIG10ZC0+bmFtZSk7CisJCWFkZF9tdGRfZGV2aWNlKG10ZCk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwlyZXR1cm4gMDsKKworZXNjYW46CisJZnJlZV9pcnEoaG9zdC0+aXJxLCBOVUxMKTsKK2VpcnE6CisJaW91bm1hcChob3N0LT5yZWdzKTsKK2VyZXM6CisJY2xrX3B1dChob3N0LT5jbGspOworZWNsazoKKwlrZnJlZShob3N0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG14Y25kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfcHV0KGhvc3QtPmNsayk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCW5hbmRfcmVsZWFzZSgmaG9zdC0+bXRkKTsKKwlmcmVlX2lycShob3N0LT5pcnEsIE5VTEwpOworCWlvdW5tYXAoaG9zdC0+cmVncyk7CisJa2ZyZWUoaG9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBteGNuZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJNWENfTkQgOiBOQU5EIHN1c3BlbmRcbiIpOworCWlmIChpbmZvKQorCQlyZXQgPSBpbmZvLT5zdXNwZW5kKGluZm8pOworCisJLyogRGlzYWJsZSB0aGUgTkZDIGNsb2NrICovCisJY2xrX2Rpc2FibGUobmZjX2Nsayk7CS8qIEZJWE1FICovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14Y25kX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQgPSAwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1YQ19ORCA6IE5BTkQgcmVzdW1lXG4iKTsKKwkvKiBFbmFibGUgdGhlIE5GQyBjbG9jayAqLworCWNsa19lbmFibGUobmZjX2Nsayk7CS8qIEZJWE1FICovCisKKwlpZiAoaW5mbykKKwkJaW5mby0+cmVzdW1lKGluZm8pOworCisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UKKyMgZGVmaW5lIG14Y25kX3N1c3BlbmQgICBOVUxMCisjIGRlZmluZSBteGNuZF9yZXN1bWUgICAgTlVMTAorI2VuZGlmCQkJCS8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJICAgfSwKKwkucmVtb3ZlID0gX19leGl0X3AobXhjbmRfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IG14Y25kX3N1c3BlbmQsCisJLnJlc3VtZSA9IG14Y25kX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y19uZF9pbml0KHZvaWQpCit7CisJLyogUmVnaXN0ZXIgdGhlIGRldmljZSBkcml2ZXIgc3RydWN0dXJlLiAqLworCXByX2luZm8oIk1YQyBNVEQgbmFuZCBEcml2ZXJcbiIpOworCWlmIChwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm14Y25kX2RyaXZlciwgbXhjbmRfcHJvYmUpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0ZXIgZmFpbGVkIGZvciBteGNuZF9kcml2ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBteGNfbmRfY2xlYW51cCh2b2lkKQoreworCS8qIFVucmVnaXN0ZXIgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhjbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXhjX25kX2luaXQpOworbW9kdWxlX2V4aXQobXhjX25kX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNWEMgTkFORCBNVEQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCBkMTEyOWJhLi4wYTljOWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTgwMSw5ICs4MDEsOSBAQAogICogbmFuZF9yZWFkX3N1YnBhZ2UgLSBbUkVQTEFDQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHN1Yi1wYWdlIHJlYWQgZnVuY3Rpb24KICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQotICogQGRhdGFvZnMJb2Zmc2V0IG9mIHJlcXVlc3RlZCBkYXRhIHdpdGhpbiB0aGUgcGFnZQotICogQHJlYWRsZW4JZGF0YSBsZW5ndGgKLSAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBkYXRhX29mZnM6CW9mZnNldCBvZiByZXF1ZXN0ZWQgZGF0YSB3aXRoaW4gdGhlIHBhZ2UKKyAqIEByZWFkbGVuOglkYXRhIGxlbmd0aAorICogQGJ1ZnBvaToJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9zdWJwYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50MzJfdCBkYXRhX29mZnMsIHVpbnQzMl90IHJlYWRsZW4sIHVpbnQ4X3QgKmJ1ZnBvaSkKIHsKQEAgLTIwNDIsNyArMjA0Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9FUkFTSU5HKTsKQEAgLTIzMTgsNiArMjMxOCwxMiBAQAogCS8qIFNlbGVjdCB0aGUgZGV2aWNlICovCiAJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAwKTsKIAorCS8qCisJICogUmVzZXQgdGhlIGNoaXAsIHJlcXVpcmVkIGJ5IHNvbWUgY2hpcHMgKGUuZy4gTWljcm9uIE1UMjlGeEd4eHh4eCkKKwkgKiBhZnRlciBwb3dlci11cAorCSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKKwogCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCiAJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwogCkBAIC0yNDg4LDYgKzI0OTQsOCBAQAogCS8qIENoZWNrIGZvciBhIGNoaXAgYXJyYXkgKi8KIAlmb3IgKGkgPSAxOyBpIDwgbWF4Y2hpcHM7IGkrKykgewogCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGkpOworCQkvKiBTZWUgY29tbWVudCBpbiBuYW5kX2dldF9mbGFzaF90eXBlIGZvciByZXNldCAqLworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CiAJCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCiAJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDB4MDAsIC0xKTsKIAkJLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwppbmRleCA5MThhODA2Li44NjgxNDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCkBAIC0xLDEzICsxLDE4IEBACiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFuIEVDQyBhbGdvcml0aG0gZnJvbSBUb3NoaWJhIHRoYXQgZGV0ZWN0cyBhbmQKLSAqIGNvcnJlY3RzIDEgYml0IGVycm9ycyBpbiBhIDI1NiBieXRlIGJsb2NrIG9mIGRhdGEuCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gRUNDIGFsZ29yaXRobSB0aGF0IGRldGVjdHMgYW5kIGNvcnJlY3RzIDEgYml0CisgKiBlcnJvcnMgaW4gYSAyNTYgYnl0ZSBibG9jayBvZiBkYXRhLgogICoKICAqIGRyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQotICogICAgICAgICAgICAgICAgICAgICAgICAgVG9zaGliYSBBbWVyaWNhIEVsZWN0cm9uaWNzIENvbXBvbmVudHMsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA4IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuCisgKiAgICAgICAgICAgICAgICAgIEF1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29tcGxldGVseSByZXBsYWNlcyB0aGUgcHJldmlvdXMgRUNDIGltcGxlbWVudGF0aW9uIHdoaWNoIHdhcyB3cml0dGVuIGJ5OgorICogICBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqICAgVGhvbWFzIEdsZWl4bmVyICh0Z2x4QGxpbnV0cm9uaXguZGUpCisgKgorICogSW5mb3JtYXRpb24gb24gaG93IHRoaXMgYWxnb3JpdGhtIHdvcmtzIGFuZCBob3cgaXQgd2FzIGRldmVsb3BlZAorICogY2FuIGJlIGZvdW5kIGluIERvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dAogICoKICAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIzLDE3NCArMjgsNDc1IEBACiAgKiB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCiAgKgotICogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZQotICogbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGVzZSBmaWxlcywgb3IgeW91IGNvbXBpbGUgdGhlc2UKLSAqIGZpbGVzIGFuZCBsaW5rIHRoZW0gd2l0aCBvdGhlciB3b3JrcyB0byBwcm9kdWNlIGEgd29yayBiYXNlZCBvbiB0aGVzZQotICogZmlsZXMsIHRoZXNlIGZpbGVzIGRvIG5vdCBieSB0aGVtc2VsdmVzIGNhdXNlIHRoZSByZXN1bHRpbmcgd29yayB0byBiZQotICogY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvcgotICogdGhlc2UgZmlsZXMgbXVzdCBzdGlsbCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsgYmFzZWQgb24KLSAqIHRoaXMgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAqLwogCisvKgorICogVGhlIFNUQU5EQUxPTkUgbWFjcm8gaXMgdXNlZnVsIHdoZW4gcnVubmluZyB0aGUgY29kZSBvdXRzaWRlIHRoZSBrZXJuZWwKKyAqIGUuZy4gd2hlbiBydW5uaW5nIHRoZSBjb2RlIGluIGEgdGVzdGJlZCBvciBhIGJlbmNobWFyayBwcm9ncmFtLgorICogV2hlbiBTVEFOREFMT05FIGlzIHVzZWQsIHRoZSBtb2R1bGUgcmVsYXRlZCBtYWNyb3MgYXJlIGNvbW1lbnRlZCBvdXQKKyAqIGFzIHdlbGwgYXMgdGhlIGxpbnV4IGluY2x1ZGUgZmlsZXMuCisgKiBJbnN0ZWFkIGEgcHJpdmF0ZSBkZWZpbml0aW9uIG9mIG10ZF9pbmZvIGlzIGdpdmVuIHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyCisgKiAodGhlIGNvZGUgZG9lcyBub3QgdXNlIG10ZF9pbmZvLCBzbyB0aGUgY29kZSBkb2VzIG5vdCBjYXJlKQorICovCisjaWZuZGVmIFNUQU5EQUxPTkUKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CitzdHJ1Y3QgbXRkX2luZm87CisjZGVmaW5lIEVYUE9SVF9TWU1CT0woeCkgIC8qIHggKi8KKworI2RlZmluZSBNT0RVTEVfTElDRU5TRSh4KQkvKiB4ICovCisjZGVmaW5lIE1PRFVMRV9BVVRIT1IoeCkJLyogeCAqLworI2RlZmluZSBNT0RVTEVfREVTQ1JJUFRJT04oeCkJLyogeCAqLworCisjZGVmaW5lIHByaW50ayBwcmludGYKKyNkZWZpbmUgS0VSTl9FUlIJCSIiCisjZW5kaWYKIAogLyoKLSAqIFByZS1jYWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkKKyAqIGludnBhcml0eSBpcyBhIDI1NiBieXRlIHRhYmxlIHRoYXQgY29udGFpbnMgdGhlIG9kZCBwYXJpdHkKKyAqIGZvciBlYWNoIGJ5dGUuIFNvIGlmIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhIGJ5dGUgaXMgZXZlbiwKKyAqIHRoZSBhcnJheSBlbGVtZW50IGlzIDEsIGFuZCB3aGVuIHRoZSBudW1iZXIgb2YgYml0cyBpcyBvZGQKKyAqIHRoZSBhcnJheSBlbGVlbW50IGlzIDAuCiAgKi8KLXN0YXRpYyBjb25zdCB1X2NoYXIgbmFuZF9lY2NfcHJlY2FsY190YWJsZVtdID0gewotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsCi0JMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKLQkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKLQkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAKK3N0YXRpYyBjb25zdCBjaGFyIGludnBhcml0eVsyNTZdID0geworCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEKK307CisKKy8qCisgKiBiaXRzcGVyYnl0ZSBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUKKyAqIHRoaXMgaXMgb25seSB1c2VkIGZvciB0ZXN0aW5nIGFuZCByZXBhaXJpbmcgcGFyaXR5CisgKiAoYSBwcmVjYWxjdWxhdGVkIHZhbHVlIHNsaWdodGx5IGltcHJvdmVzIHBlcmZvcm1hbmNlKQorICovCitzdGF0aWMgY29uc3QgY2hhciBiaXRzcGVyYnl0ZVsyNTZdID0geworCTAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDgsCit9OworCisvKgorICogYWRkcmVzc2JpdHMgaXMgYSBsb29rdXAgdGFibGUgdG8gZmlsdGVyIG91dCB0aGUgYml0cyBmcm9tIHRoZSB4b3ItZWQKKyAqIGVjYyBkYXRhIHRoYXQgaWRlbnRpZnkgdGhlIGZhdWx0eSBsb2NhdGlvbi4KKyAqIHRoaXMgaXMgb25seSB1c2VkIGZvciByZXBhaXJpbmcgcGFyaXR5CisgKiBzZWUgdGhlIGNvbW1lbnRzIGluIG5hbmRfY29ycmVjdF9kYXRhIGZvciBtb3JlIGRldGFpbHMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgYWRkcmVzc2JpdHNbMjU2XSA9IHsKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsCisJMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwKKwkweDA2LCAweDA2LCAweDA3LCAweDA3LCAweDA2LCAweDA2LCAweDA3LCAweDA3LAorCTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwgMHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAweDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwKKwkweDBhLCAweDBhLCAweDBiLCAweDBiLCAweDBhLCAweDBhLCAweDBiLCAweDBiLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDBjLCAweDBjLCAweDBkLCAweDBkLCAweDBjLCAweDBjLCAweDBkLCAweDBkLAorCTB4MGUsIDB4MGUsIDB4MGYsIDB4MGYsIDB4MGUsIDB4MGUsIDB4MGYsIDB4MGYKIH07CiAKIC8qKgotICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LWJ5dGUgYmxvY2sKKyAqIG5hbmRfY2FsY3VsYXRlX2VjYyAtIFtOQU5EIEludGVyZmFjZV0gQ2FsY3VsYXRlIDMtYnl0ZSBFQ0MgZm9yIDI1Ni81MTItYnl0ZQorICoJCQkgYmxvY2sKICAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKLSAqIEBkYXQ6CXJhdyBkYXRhCi0gKiBAZWNjX2NvZGU6CWJ1ZmZlciBmb3IgRUNDCisgKiBAYnVmOglpbnB1dCBidWZmZXIgd2l0aCByYXcgZGF0YQorICogQGNvZGU6CW91dHB1dCBidWZmZXIgd2l0aCBFQ0MKICAqLwotaW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCi0JCSAgICAgICB1X2NoYXIgKmVjY19jb2RlKQoraW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqY29kZSkKIHsKLQl1aW50OF90IGlkeCwgcmVnMSwgcmVnMiwgcmVnMywgdG1wMSwgdG1wMjsKIAlpbnQgaTsKKwljb25zdCB1aW50MzJfdCAqYnAgPSAodWludDMyX3QgKilidWY7CisJLyogMjU2IG9yIDUxMiBieXRlcy9lY2MgICovCisJY29uc3QgdWludDMyX3QgZWNjc2l6ZV9tdWx0ID0KKwkJCSgoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSkgPj4gODsKKwl1aW50MzJfdCBjdXI7CQkvKiBjdXJyZW50IHZhbHVlIGluIGJ1ZmZlciAqLworCS8qIHJwMC4ucnAxNS4ucnAxNyBhcmUgdGhlIHZhcmlvdXMgYWNjdW11bGF0ZWQgcGFyaXRpZXMgKHBlciBieXRlKSAqLworCXVpbnQzMl90IHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OworCXVpbnQzMl90IHJwOCwgcnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1LCBycDE2OworCXVpbnQzMl90IHVuaW5pdGlhbGl6ZWRfdmFyKHJwMTcpOwkvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJdWludDMyX3QgcGFyOwkJLyogdGhlIGN1bXVsYXRpdmUgcGFyaXR5IGZvciBhbGwgZGF0YSAqLworCXVpbnQzMl90IHRtcHBhcjsJLyogdGhlIGN1bXVsYXRpdmUgcGFyaXR5IGZvciB0aGlzIGl0ZXJhdGlvbjsKKwkJCQkgICBmb3IgcnAxMiwgcnAxNCBhbmQgcnAxNiBhdCB0aGUgZW5kIG9mIHRoZQorCQkJCSAgIGxvb3AgKi8KIAotCS8qIEluaXRpYWxpemUgdmFyaWFibGVzICovCi0JcmVnMSA9IHJlZzIgPSByZWczID0gMDsKKwlwYXIgPSAwOworCXJwNCA9IDA7CisJcnA2ID0gMDsKKwlycDggPSAwOworCXJwMTAgPSAwOworCXJwMTIgPSAwOworCXJwMTQgPSAwOworCXJwMTYgPSAwOwogCi0JLyogQnVpbGQgdXAgY29sdW1uIHBhcml0eSAqLwotCWZvcihpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCS8qIEdldCBDUDAgLSBDUDUgZnJvbSB0YWJsZSAqLwotCQlpZHggPSBuYW5kX2VjY19wcmVjYWxjX3RhYmxlWypkYXQrK107Ci0JCXJlZzEgXj0gKGlkeCAmIDB4M2YpOworCS8qCisJICogVGhlIGxvb3AgaXMgdW5yb2xsZWQgYSBudW1iZXIgb2YgdGltZXM7CisJICogVGhpcyBhdm9pZHMgaWYgc3RhdGVtZW50cyB0byBkZWNpZGUgb24gd2hpY2ggcnAgdmFsdWUgdG8gdXBkYXRlCisJICogQWxzbyB3ZSBwcm9jZXNzIHRoZSBkYXRhIGJ5IGxvbmd3b3Jkcy4KKwkgKiBOb3RlOiBwYXNzaW5nIHVuYWxpZ25lZCBkYXRhIG1pZ2h0IGdpdmUgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgYnVmZmVycyBhcmUgYWxpZ25lZC4KKwkgKiB0bXBwYXIgaXMgdGhlIGN1bXVsYXRpdmUgc3VtIG9mIHRoaXMgaXRlcmF0aW9uLgorCSAqIG5lZWRlZCBmb3IgY2FsY3VsYXRpbmcgcnAxMiwgcnAxNCwgcnAxNiBhbmQgcGFyCisJICogYWxzbyB1c2VkIGFzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIHJwNiwgcnA4IGFuZCBycDEwCisJICovCisJZm9yIChpID0gMDsgaSA8IGVjY3NpemVfbXVsdCA8PCAyOyBpKyspIHsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciA9IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNiBePSB0bXBwYXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA4IF49IHRtcHBhcjsKIAotCQkvKiBBbGwgYml0IFhPUiA9IDEgPyAqLwotCQlpZiAoaWR4ICYgMHg0MCkgewotCQkJcmVnMyBePSAodWludDhfdCkgaTsKLQkJCXJlZzIgXj0gfigodWludDhfdCkgaSk7Ci0JCX0KKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwMTAgXj0gdG1wcGFyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQlycDggXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJcnA4IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwOCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDggXj0gY3VyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCisJCXBhciBePSB0bXBwYXI7CisJCWlmICgoaSAmIDB4MSkgPT0gMCkKKwkJCXJwMTIgXj0gdG1wcGFyOworCQlpZiAoKGkgJiAweDIpID09IDApCisJCQlycDE0IF49IHRtcHBhcjsKKwkJaWYgKGVjY3NpemVfbXVsdCA9PSAyICYmIChpICYgMHg0KSA9PSAwKQorCQkJcnAxNiBePSB0bXBwYXI7CiAJfQogCi0JLyogQ3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MgY29kZSBmcm9tIGxpbmUgcGFyaXR5ICovCi0JdG1wMSAgPSAocmVnMyAmIDB4ODApID4+IDA7IC8qIEI3IC0+IEI3ICovCi0JdG1wMSB8PSAocmVnMiAmIDB4ODApID4+IDE7IC8qIEI3IC0+IEI2ICovCi0JdG1wMSB8PSAocmVnMyAmIDB4NDApID4+IDE7IC8qIEI2IC0+IEI1ICovCi0JdG1wMSB8PSAocmVnMiAmIDB4NDApID4+IDI7IC8qIEI2IC0+IEI0ICovCi0JdG1wMSB8PSAocmVnMyAmIDB4MjApID4+IDI7IC8qIEI1IC0+IEIzICovCi0JdG1wMSB8PSAocmVnMiAmIDB4MjApID4+IDM7IC8qIEI1IC0+IEIyICovCi0JdG1wMSB8PSAocmVnMyAmIDB4MTApID4+IDM7IC8qIEI0IC0+IEIxICovCi0JdG1wMSB8PSAocmVnMiAmIDB4MTApID4+IDQ7IC8qIEI0IC0+IEIwICovCisJLyoKKwkgKiBoYW5kbGUgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgbG9uZ3dvcmQgb3BlcmF0aW9ucworCSAqIHdlJ2xsIGJyaW5nIHJwNC4ucnAxNC4ucnAxNiBiYWNrIHRvIHNpbmdsZSBieXRlIGVudGl0aWVzIGJ5CisJICogc2hpZnRpbmcgYW5kIHhvcmluZyBmaXJzdCBmb2xkIHRoZSB1cHBlciBhbmQgbG93ZXIgMTYgYml0cywKKwkgKiB0aGVuIHRoZSB1cHBlciBhbmQgbG93ZXIgOCBiaXRzLgorCSAqLworCXJwNCBePSAocnA0ID4+IDE2KTsKKwlycDQgXj0gKHJwNCA+PiA4KTsKKwlycDQgJj0gMHhmZjsKKwlycDYgXj0gKHJwNiA+PiAxNik7CisJcnA2IF49IChycDYgPj4gOCk7CisJcnA2ICY9IDB4ZmY7CisJcnA4IF49IChycDggPj4gMTYpOworCXJwOCBePSAocnA4ID4+IDgpOworCXJwOCAmPSAweGZmOworCXJwMTAgXj0gKHJwMTAgPj4gMTYpOworCXJwMTAgXj0gKHJwMTAgPj4gOCk7CisJcnAxMCAmPSAweGZmOworCXJwMTIgXj0gKHJwMTIgPj4gMTYpOworCXJwMTIgXj0gKHJwMTIgPj4gOCk7CisJcnAxMiAmPSAweGZmOworCXJwMTQgXj0gKHJwMTQgPj4gMTYpOworCXJwMTQgXj0gKHJwMTQgPj4gOCk7CisJcnAxNCAmPSAweGZmOworCWlmIChlY2NzaXplX211bHQgPT0gMikgeworCQlycDE2IF49IChycDE2ID4+IDE2KTsKKwkJcnAxNiBePSAocnAxNiA+PiA4KTsKKwkJcnAxNiAmPSAweGZmOworCX0KIAotCXRtcDIgID0gKHJlZzMgJiAweDA4KSA8PCA0OyAvKiBCMyAtPiBCNyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA4KSA8PCAzOyAvKiBCMyAtPiBCNiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDA0KSA8PCAzOyAvKiBCMiAtPiBCNSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA0KSA8PCAyOyAvKiBCMiAtPiBCNCAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAyKSA8PCAyOyAvKiBCMSAtPiBCMyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAyKSA8PCAxOyAvKiBCMSAtPiBCMiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAxKSA8PCAxOyAvKiBCMCAtPiBCMSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAxKSA8PCAwOyAvKiBCNyAtPiBCMCAqLwotCi0JLyogQ2FsY3VsYXRlIGZpbmFsIEVDQyBjb2RlICovCi0jaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQllY2NfY29kZVswXSA9IH50bXAyOwotCWVjY19jb2RlWzFdID0gfnRtcDE7CisJLyoKKwkgKiB3ZSBhbHNvIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSByb3cgcGFyaXR5IGZvciBycDAuLnJwMworCSAqIFRoaXMgaXMgcHJlc2VudCBpbiBwYXIsIGJlY2F1c2UgcGFyIGlzIG5vdworCSAqIHJwMyBycDMgcnAyIHJwMiBpbiBsaXR0bGUgZW5kaWFuIGFuZAorCSAqIHJwMiBycDIgcnAzIHJwMyBpbiBiaWcgZW5kaWFuCisJICogYXMgd2VsbCBhcworCSAqIHJwMSBycDAgcnAxIHJwMCBpbiBsaXR0bGUgZW5kaWFuIGFuZAorCSAqIHJwMCBycDEgcnAwIHJwMSBpbiBiaWcgZW5kaWFuCisJICogRmlyc3QgY2FsY3VsYXRlIHJwMiBhbmQgcnAzCisJICovCisjaWZkZWYgX19CSUdfRU5ESUFOCisJcnAyID0gKHBhciA+PiAxNik7CisJcnAyIF49IChycDIgPj4gOCk7CisJcnAyICY9IDB4ZmY7CisJcnAzID0gcGFyICYgMHhmZmZmOworCXJwMyBePSAocnAzID4+IDgpOworCXJwMyAmPSAweGZmOwogI2Vsc2UKLQllY2NfY29kZVswXSA9IH50bXAxOwotCWVjY19jb2RlWzFdID0gfnRtcDI7CisJcnAzID0gKHBhciA+PiAxNik7CisJcnAzIF49IChycDMgPj4gOCk7CisJcnAzICY9IDB4ZmY7CisJcnAyID0gcGFyICYgMHhmZmZmOworCXJwMiBePSAocnAyID4+IDgpOworCXJwMiAmPSAweGZmOwogI2VuZGlmCi0JZWNjX2NvZGVbMl0gPSAoKH5yZWcxKSA8PCAyKSB8IDB4MDM7CiAKKwkvKiByZWR1Y2UgcGFyIHRvIDE2IGJpdHMgdGhlbiBjYWxjdWxhdGUgcnAxIGFuZCBycDAgKi8KKwlwYXIgXj0gKHBhciA+PiAxNik7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJcnAwID0gKHBhciA+PiA4KSAmIDB4ZmY7CisJcnAxID0gKHBhciAmIDB4ZmYpOworI2Vsc2UKKwlycDEgPSAocGFyID4+IDgpICYgMHhmZjsKKwlycDAgPSAocGFyICYgMHhmZik7CisjZW5kaWYKKworCS8qIGZpbmFsbHkgcmVkdWNlIHBhciB0byA4IGJpdHMgKi8KKwlwYXIgXj0gKHBhciA+PiA4KTsKKwlwYXIgJj0gMHhmZjsKKworCS8qCisJICogYW5kIGNhbGN1bGF0ZSBycDUuLnJwMTUuLnJwMTcKKwkgKiBub3RlIHRoYXQgcGFyID0gcnA0IF4gcnA1IGFuZCBkdWUgdG8gdGhlIGNvbW11dGF0aXZlIHByb3BlcnR5CisJICogb2YgdGhlIF4gb3BlcmF0b3Igd2UgY2FuIHNheToKKwkgKiBycDUgPSAocGFyIF4gcnA0KTsKKwkgKiBUaGUgJiAweGZmIHNlZW1zIHN1cGVyZmx1b3VzLCBidXQgYmVuY2htYXJraW5nIGxlYXJuZWQgdGhhdAorCSAqIGxlYXZpbmcgaXQgb3V0IGdpdmVzIHNsaWdodGx5IHdvcnNlIHJlc3VsdHMuIE5vIGlkZWEgd2h5LCBwcm9iYWJseQorCSAqIGl0IGhhcyB0byBkbyB3aXRoIHRoZSB3YXkgdGhlIHBpcGVsaW5lIGluIHBlbnRpdW0gaXMgb3JnYW5pemVkLgorCSAqLworCXJwNSA9IChwYXIgXiBycDQpICYgMHhmZjsKKwlycDcgPSAocGFyIF4gcnA2KSAmIDB4ZmY7CisJcnA5ID0gKHBhciBeIHJwOCkgJiAweGZmOworCXJwMTEgPSAocGFyIF4gcnAxMCkgJiAweGZmOworCXJwMTMgPSAocGFyIF4gcnAxMikgJiAweGZmOworCXJwMTUgPSAocGFyIF4gcnAxNCkgJiAweGZmOworCWlmIChlY2NzaXplX211bHQgPT0gMikKKwkJcnAxNyA9IChwYXIgXiBycDE2KSAmIDB4ZmY7CisKKwkvKgorCSAqIEZpbmFsbHkgY2FsY3VsYXRlIHRoZSBlY2MgYml0cy4KKwkgKiBBZ2FpbiBoZXJlIGl0IG1pZ2h0IHNlZW0gdGhhdCB0aGVyZSBhcmUgcGVyZm9ybWFuY2Ugb3B0aW1pc2F0aW9ucworCSAqIHBvc3NpYmxlLCBidXQgYmVuY2htYXJrcyBzaG93ZWQgdGhhdCBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgZGV2ZWxvcGVkCisJICogdGhlIGNvZGUgYmVsb3cgaXMgdGhlIGZhc3Rlc3QKKwkgKi8KKyNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQworCWNvZGVbMF0gPQorCSAgICAoaW52cGFyaXR5W3JwN10gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwNl0gPDwgNikgfAorCSAgICAoaW52cGFyaXR5W3JwNV0gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwNF0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwM10gPDwgMykgfAorCSAgICAoaW52cGFyaXR5W3JwMl0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwMV0gPDwgMSkgfAorCSAgICAoaW52cGFyaXR5W3JwMF0pOworCWNvZGVbMV0gPQorCSAgICAoaW52cGFyaXR5W3JwMTVdIDw8IDcpIHwKKwkgICAgKGludnBhcml0eVtycDE0XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnAxM10gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwMTJdIDw8IDQpIHwKKwkgICAgKGludnBhcml0eVtycDExXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAxMF0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwOV0gPDwgMSkgIHwKKwkgICAgKGludnBhcml0eVtycDhdKTsKKyNlbHNlCisJY29kZVsxXSA9CisJICAgIChpbnZwYXJpdHlbcnA3XSA8PCA3KSB8CisJICAgIChpbnZwYXJpdHlbcnA2XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnA1XSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnA0XSA8PCA0KSB8CisJICAgIChpbnZwYXJpdHlbcnAzXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAyXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnAxXSA8PCAxKSB8CisJICAgIChpbnZwYXJpdHlbcnAwXSk7CisJY29kZVswXSA9CisJICAgIChpbnZwYXJpdHlbcnAxNV0gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwMTRdIDw8IDYpIHwKKwkgICAgKGludnBhcml0eVtycDEzXSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnAxMl0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwMTFdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtycDEwXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnA5XSA8PCAxKSAgfAorCSAgICAoaW52cGFyaXR5W3JwOF0pOworI2VuZGlmCisJaWYgKGVjY3NpemVfbXVsdCA9PSAxKQorCQljb2RlWzJdID0KKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpIHwKKwkJICAgIDM7CisJZWxzZQorCQljb2RlWzJdID0KKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpIHwKKwkJICAgIChpbnZwYXJpdHlbcnAxN10gPDwgMSkgfAorCQkgICAgKGludnBhcml0eVtycDE2XSA8PCAwKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmFuZF9jYWxjdWxhdGVfZWNjKTsKIAotc3RhdGljIGlubGluZSBpbnQgY291bnRiaXRzKHVpbnQzMl90IGJ5dGUpCi17Ci0JaW50IHJlcyA9IDA7Ci0KLQlmb3IgKDtieXRlOyBieXRlID4+PSAxKQotCQlyZXMgKz0gYnl0ZSAmIDB4MDE7Ci0JcmV0dXJuIHJlczsKLX0KLQogLyoqCiAgKiBuYW5kX2NvcnJlY3RfZGF0YSAtIFtOQU5EIEludGVyZmFjZV0gRGV0ZWN0IGFuZCBjb3JyZWN0IGJpdCBlcnJvcihzKQogICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQotICogQGRhdDoJcmF3IGRhdGEgcmVhZCBmcm9tIHRoZSBjaGlwCisgKiBAYnVmOglyYXcgZGF0YSByZWFkIGZyb20gdGhlIGNoaXAKICAqIEByZWFkX2VjYzoJRUNDIGZyb20gdGhlIGNoaXAKICAqIEBjYWxjX2VjYzoJdGhlIEVDQyBjYWxjdWxhdGVkIGZyb20gcmF3IGRhdGEKICAqCi0gKiBEZXRlY3QgYW5kIGNvcnJlY3QgYSAxIGJpdCBlcnJvciBmb3IgMjU2IGJ5dGUgYmxvY2sKKyAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYvNTEyIGJ5dGUgYmxvY2sKICAqLwotaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKLQkJICAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKK2ludCBuYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpyZWFkX2VjYywgdW5zaWduZWQgY2hhciAqY2FsY19lY2MpCiB7Ci0JdWludDhfdCBzMCwgczEsIHMyOworCXVuc2lnbmVkIGNoYXIgYjAsIGIxLCBiMjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVfYWRkciwgYml0X2FkZHI7CisJLyogMjU2IG9yIDUxMiBieXRlcy9lY2MgICovCisJY29uc3QgdWludDMyX3QgZWNjc2l6ZV9tdWx0ID0KKwkJCSgoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSkgPj4gODsKIAorCS8qCisJICogYjAgdG8gYjIgaW5kaWNhdGUgd2hpY2ggYml0IGlzIGZhdWx0eSAoaWYgYW55KQorCSAqIHdlIG1pZ2h0IG5lZWQgdGhlIHhvciByZXN1bHQgIG1vcmUgdGhhbiBvbmNlLAorCSAqIHNvIGtlZXAgdGhlbSBpbiBhIGxvY2FsIHZhcgorCSovCiAjaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQlzMCA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JczEgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CisJYjEgPSByZWFkX2VjY1sxXSBeIGNhbGNfZWNjWzFdOwogI2Vsc2UKLQlzMSA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JczAgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJlYWRfZWNjWzFdIF4gY2FsY19lY2NbMV07CisJYjEgPSByZWFkX2VjY1swXSBeIGNhbGNfZWNjWzBdOwogI2VuZGlmCi0JaWYgKChzMCB8IHMxIHwgczIpID09IDApCi0JCXJldHVybiAwOworCWIyID0gcmVhZF9lY2NbMl0gXiBjYWxjX2VjY1syXTsKIAotCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8KLQlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCi0JICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgotCSAgICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKwkvKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGJpdGZhdWx0cyAqLwogCi0JCXVpbnQzMl90IGJ5dGVvZmZzLCBiaXRudW07CisJLyogcmVwZWF0ZWQgaWYgc3RhdGVtZW50cyBhcmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdGhhbiBzd2l0Y2ggLi4uICovCisJLyogb3JkZXJlZCBpbiBvcmRlciBvZiBsaWtlbGlob29kICovCiAKLQkJYnl0ZW9mZnMgPSAoczEgPDwgMCkgJiAweDgwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMSkgJiAweDQwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMikgJiAweDIwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMykgJiAweDEwOworCWlmICgoYjAgfCBiMSB8IGIyKSA9PSAwKQorCQlyZXR1cm4gMDsJLyogbm8gZXJyb3IgKi8KIAotCQlieXRlb2ZmcyB8PSAoczAgPj4gNCkgJiAweDA4OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMSkgJiAweDAxOwotCi0JCWJpdG51bSA9IChzMiA+PiA1KSAmIDB4MDQ7Ci0JCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOwotCQliaXRudW0gfD0gKHMyID4+IDMpICYgMHgwMTsKLQotCQlkYXRbYnl0ZW9mZnNdIF49ICgxIDw8IGJpdG51bSk7Ci0KKwlpZiAoKCgoYjAgXiAoYjAgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSkgJiYKKwkgICAgKCgoYjEgXiAoYjEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSkgJiYKKwkgICAgKChlY2NzaXplX211bHQgPT0gMSAmJiAoKGIyIF4gKGIyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHx8CisJICAgICAoZWNjc2l6ZV9tdWx0ID09IDIgJiYgKChiMiBeIChiMiA+PiAxKSkgJiAweDU1KSA9PSAweDU1KSkpIHsKKwkvKiBzaW5nbGUgYml0IGVycm9yICovCisJCS8qCisJCSAqIHJwMTcvcnAxNS8xMy8xMS85LzcvNS8zLzEgaW5kaWNhdGUgd2hpY2ggYnl0ZSBpcyB0aGUgZmF1bHR5CisJCSAqIGJ5dGUsIGNwIDUvMy8xIGluZGljYXRlIHRoZSBmYXVsdHkgYml0LgorCQkgKiBBIGxvb2t1cCB0YWJsZSAoY2FsbGVkIGFkZHJlc3NiaXRzKSBpcyB1c2VkIHRvIGZpbHRlcgorCQkgKiB0aGUgYml0cyBmcm9tIHRoZSBieXRlIHRoZXkgYXJlIGluLgorCQkgKiBBIG1hcmdpbmFsIG9wdGltaXNhdGlvbiBpcyBwb3NzaWJsZSBieSBoYXZpbmcgdGhyZWUKKwkJICogZGlmZmVyZW50IGxvb2t1cCB0YWJsZXMuCisJCSAqIE9uZSBhcyB3ZSBoYXZlIG5vdyAoZm9yIGIwKSwgb25lIGZvciBiMgorCQkgKiAodGhhdCB3b3VsZCBhdm9pZCB0aGUgPj4gMSksIGFuZCBvbmUgZm9yIGIxICh3aXRoIGFsbCB2YWx1ZXMKKwkJICogPDwgNCkuIEhvd2V2ZXIgaXQgd2FzIGZlbHQgdGhhdCBpbnRyb2R1Y2luZyB0d28gbW9yZSB0YWJsZXMKKwkJICogaGFyZGx5IGp1c3RpZnkgdGhlIGdhaW4uCisJCSAqCisJCSAqIFRoZSBiMiBzaGlmdCBpcyB0aGVyZSB0byBnZXQgcmlkIG9mIHRoZSBsb3dlc3QgdHdvIGJpdHMuCisJCSAqIFdlIGNvdWxkIGFsc28gZG8gYWRkcmVzc2JpdHNbYjJdID4+IDEgYnV0IGZvciB0aGUKKwkJICogcGVyZm9ybWFjZSBpdCBkb2VzIG5vdCBtYWtlIGFueSBkaWZmZXJlbmNlCisJCSAqLworCQlpZiAoZWNjc2l6ZV9tdWx0ID09IDEpCisJCQlieXRlX2FkZHIgPSAoYWRkcmVzc2JpdHNbYjFdIDw8IDQpICsgYWRkcmVzc2JpdHNbYjBdOworCQllbHNlCisJCQlieXRlX2FkZHIgPSAoYWRkcmVzc2JpdHNbYjIgJiAweDNdIDw8IDgpICsKKwkJCQkgICAgKGFkZHJlc3NiaXRzW2IxXSA8PCA0KSArIGFkZHJlc3NiaXRzW2IwXTsKKwkJYml0X2FkZHIgPSBhZGRyZXNzYml0c1tiMiA+PiAyXTsKKwkJLyogZmxpcCB0aGUgYml0ICovCisJCWJ1ZltieXRlX2FkZHJdIF49ICgxIDw8IGJpdF9hZGRyKTsKIAkJcmV0dXJuIDE7CisKIAl9CisJLyogY291bnQgbnIgb2YgYml0czsgdXNlIHRhYmxlIGxvb2t1cCwgZmFzdGVyIHRoYW4gY2FsY3VsYXRpbmcgaXQgKi8KKwlpZiAoKGJpdHNwZXJieXRlW2IwXSArIGJpdHNwZXJieXRlW2IxXSArIGJpdHNwZXJieXRlW2IyXSkgPT0gMSkKKwkJcmV0dXJuIDE7CS8qIGVycm9yIGluIGVjYyBkYXRhOyBubyBhY3Rpb24gbmVlZGVkICovCiAKLQlpZihjb3VudGJpdHMoczAgfCAoKHVpbnQzMl90KXMxIDw8IDgpIHwgKCh1aW50MzJfdClzMiA8PDE2KSkgPT0gMSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gLUVCQURNU0c7CisJcHJpbnRrKEtFUk5fRVJSICJ1bmNvcnJlY3RhYmxlIGVycm9yIDogIik7CisJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTChuYW5kX2NvcnJlY3RfZGF0YSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbnMgTWV1bGVuYnJvZWtzIDxmcmFuc21ldWxlbmJyb2Vrc0BnbWFpbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgTkFORCBFQ0Mgc3VwcG9ydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwppbmRleCA1NTZlODEzLi5hZTdjNTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAvKiBEZWZhdWx0IHNpbXVsYXRvciBwYXJhbWV0ZXJzIHZhbHVlcyAqLwogI2lmICFkZWZpbmVkKENPTkZJR19OQU5EU0lNX0ZJUlNUX0lEX0JZVEUpICB8fCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKaW5kZXggYTY0YWQxNS4uYzBmYTljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwpAQCAtMTE1LDU1ICsxMTUsMTEgQEAKIAlTVEFURV9QSU9fV1JJVElORywKIH07CiAKLXN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgewotCXVuc2lnbmVkIGludAl0Q0g7ICAvKiBFbmFibGUgc2lnbmFsIGhvbGQgdGltZSAqLwotCXVuc2lnbmVkIGludAl0Q1M7ICAvKiBFbmFibGUgc2lnbmFsIHNldHVwIHRpbWUgKi8KLQl1bnNpZ25lZCBpbnQJdFdIOyAgLyogTkRfbldFIGhpZ2ggZHVyYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQJdFdQOyAgLyogTkRfbldFIHB1bHNlIHRpbWUgKi8KLQl1bnNpZ25lZCBpbnQJdFJIOyAgLyogTkRfblJFIGhpZ2ggZHVyYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQJdFJQOyAgLyogTkRfblJFIHB1bHNlIHdpZHRoICovCi0JdW5zaWduZWQgaW50CXRSOyAgIC8qIE5EX25XRSBoaWdoIHRvIE5EX25SRSBsb3cgZm9yIHJlYWQgKi8KLQl1bnNpZ25lZCBpbnQJdFdIUjsgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3Igc3RhdHVzIHJlYWQgKi8KLQl1bnNpZ25lZCBpbnQJdEFSOyAgLyogTkRfQUxFIGxvdyB0byBORF9uUkUgbG93IGRlbGF5ICovCi19OwotCi1zdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0IHsKLQl1aW50MTZfdAlyZWFkMTsKLQl1aW50MTZfdAlyZWFkMjsKLQl1aW50MTZfdAlwcm9ncmFtOwotCXVpbnQxNl90CXJlYWRfc3RhdHVzOwotCXVpbnQxNl90CXJlYWRfaWQ7Ci0JdWludDE2X3QJZXJhc2U7Ci0JdWludDE2X3QJcmVzZXQ7Ci0JdWludDE2X3QJbG9jazsKLQl1aW50MTZfdAl1bmxvY2s7Ci0JdWludDE2X3QJbG9ja19zdGF0dXM7Ci19OwotCi1zdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggewotCXN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnRpbWluZzsgLyogTkFORCBGbGFzaCB0aW1pbmcgKi8KLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQ7Ci0KLQl1aW50MzJfdCBwYWdlX3Blcl9ibG9jazsvKiBQYWdlcyBwZXIgYmxvY2sgKFBHX1BFUl9CTEspICovCi0JdWludDMyX3QgcGFnZV9zaXplOwkvKiBQYWdlIHNpemUgaW4gYnl0ZXMgKFBBR0VfU1opICovCi0JdWludDMyX3QgZmxhc2hfd2lkdGg7CS8qIFdpZHRoIG9mIEZsYXNoIG1lbW9yeSAoRFdJRFRIX00pICovCi0JdWludDMyX3QgZGZjX3dpZHRoOwkvKiBXaWR0aCBvZiBmbGFzaCBjb250cm9sbGVyKERXSURUSF9DKSAqLwotCXVpbnQzMl90IG51bV9ibG9ja3M7CS8qIE51bWJlciBvZiBwaHlzaWNhbCBibG9ja3MgaW4gRmxhc2ggKi8KLQl1aW50MzJfdCBjaGlwX2lkOwotCi0JLyogTk9URTogdGhlc2UgYXJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCwgZG8gbm90IGRlZmluZSAqLwotCXNpemVfdAkJb29iX3NpemU7Ci0Jc2l6ZV90CQlyZWFkX2lkX2J5dGVzOwotCi0JdW5zaWduZWQgaW50CWNvbF9hZGRyX2N5Y2xlczsKLQl1bnNpZ25lZCBpbnQJcm93X2FkZHJfY3ljbGVzOwotfTsKLQogc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gewogCXN0cnVjdCBuYW5kX2NoaXAJbmFuZF9jaGlwOwogCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkgKnBkZXY7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbzsKIAogCXN0cnVjdCBjbGsJCSpjbGs7CiAJdm9pZCBfX2lvbWVtCQkqbW1pb19iYXNlOwpAQCAtMjAyLDEyICsxNTgsMjAgQEAKIAl1aW50MzJfdAkJbmRjYjA7CiAJdWludDMyX3QJCW5kY2IxOwogCXVpbnQzMl90CQluZGNiMjsKKworCS8qIGNhbGN1bGF0ZWQgZnJvbSBweGEzeHhfbmFuZF9mbGFzaCBkYXRhICovCisJc2l6ZV90CQlvb2Jfc2l6ZTsKKwlzaXplX3QJCXJlYWRfaWRfYnl0ZXM7CisKKwl1bnNpZ25lZCBpbnQJY29sX2FkZHJfY3ljbGVzOworCXVuc2lnbmVkIGludAlyb3dfYWRkcl9jeWNsZXM7CiB9OwogCiBzdGF0aWMgaW50IHVzZV9kbWEgPSAxOwogbW9kdWxlX3BhcmFtKHVzZV9kbWEsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hLCAiZW5hYmxlIERNQSBmb3IgZGF0YSB0cmFuc2ZlcmluZyB0by9mcm9tIE5BTkQgSFciKTsKIAorI2lmZGVmIENPTkZJR19NVERfTkFORF9QWEEzeHhfQlVJTFRJTgogc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgc21hbGxwYWdlX2NtZHNldCA9IHsKIAkucmVhZDEJCT0gMHgwMDAwLAogCS5yZWFkMgkJPSAweDAwNTAsCkBAIC0yOTEsMTEgKzI1NSwzNSBAQAogCS5jaGlwX2lkCT0gMHhiMTJjLAogfTsKIAorc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgc3RtMkdiWDE2X3RpbWluZyA9IHsKKwkudENIID0gMTAsCisJLnRDUyA9IDM1LAorCS50V0ggPSAxNSwKKwkudFdQID0gMjUsCisJLnRSSCA9IDE1LAorCS50UlAgPSAyNSwKKwkudFIgPSAyNTAwMCwKKwkudFdIUiA9IDYwLAorCS50QVIgPSAxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggc3RtMkdiWDE2ID0geworCS50aW1pbmcgPSAmc3RtMkdiWDE2X3RpbWluZywKKwkucGFnZV9wZXJfYmxvY2sgPSA2NCwKKwkucGFnZV9zaXplID0gMjA0OCwKKwkuZmxhc2hfd2lkdGggPSAxNiwKKwkuZGZjX3dpZHRoID0gMTYsCisJLm51bV9ibG9ja3MgPSAyMDQ4LAorCS5jaGlwX2lkID0gMHhiYTIwLAorfTsKKwogc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqYnVpbHRpbl9mbGFzaF90eXBlc1tdID0gewogCSZzYW1zdW5nNTEyTWJYMTYsCiAJJm1pY3JvbjFHYlg4LAogCSZtaWNyb24xR2JYMTYsCisJJnN0bTJHYlgxNiwKIH07CisjZW5kaWYgLyogQ09ORklHX01URF9OQU5EX1BYQTN4eF9CVUlMVElOICovCiAKICNkZWZpbmUgTkRUUjBfdENIKGMpCShtaW4oKGMpLCA3KSA8PCAxOSkKICNkZWZpbmUgTkRUUjBfdENTKGMpCShtaW4oKGMpLCA3KSA8PCAxNikKQEAgLTMxMiw3ICszMDAsNyBAQAogI2RlZmluZSBuczJjeWNsZShucywgY2xrKQkoaW50KSgoKG5zKSAqIChjbGsgLyAxMDAwMDAwKSAvIDEwMDApICsgMSkKIAogc3RhdGljIHZvaWQgcHhhM3h4X25hbmRfc2V0X3RpbWluZyhzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgcHhhM3h4X25hbmRfdGltaW5nICp0KQorCQkJCSAgIGNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnQpCiB7CiAJdW5zaWduZWQgbG9uZyBuYW5kX2NsayA9IGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOwogCXVpbnQzMl90IG5kdHIwLCBuZHRyMTsKQEAgLTM1NCw4ICszNDIsOCBAQAogc3RhdGljIGludCBwcmVwYXJlX3JlYWRfcHJvZ19jbWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCiAJCQl1aW50MTZfdCBjbWQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CiAKIAkvKiBjYWxjdWxhdGUgZGF0YSBzaXplICovCiAJc3dpdGNoIChmLT5wYWdlX3NpemUpIHsKQEAgLTM3MywxNCArMzYxLDE0IEBACiAJaW5mby0+bmRjYjAgPSBjbWQgfCAoKGNtZCAmIDB4ZmYwMCkgPyBORENCMF9EQkMgOiAwKTsKIAlpbmZvLT5uZGNiMSA9IDA7CiAJaW5mby0+bmRjYjIgPSAwOwotCWluZm8tPm5kY2IwIHw9IE5EQ0IwX0FERFJfQ1lDKGYtPnJvd19hZGRyX2N5Y2xlcyArIGYtPmNvbF9hZGRyX2N5Y2xlcyk7CisJaW5mby0+bmRjYjAgfD0gTkRDQjBfQUREUl9DWUMoaW5mby0+cm93X2FkZHJfY3ljbGVzICsgaW5mby0+Y29sX2FkZHJfY3ljbGVzKTsKIAotCWlmIChmLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgeworCWlmIChpbmZvLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgewogCQkvKiBsYXJnZSBibG9jaywgMiBjeWNsZXMgZm9yIGNvbHVtbiBhZGRyZXNzCiAJCSAqIHJvdyBhZGRyZXNzIHN0YXJ0cyBmcm9tIDNyZCBjeWNsZQogCQkgKi8KIAkJaW5mby0+bmRjYjEgfD0gKHBhZ2VfYWRkciA8PCAxNikgfCAoY29sdW1uICYgMHhmZmZmKTsKLQkJaWYgKGYtPnJvd19hZGRyX2N5Y2xlcyA9PSAzKQorCQlpZiAoaW5mby0+cm93X2FkZHJfY3ljbGVzID09IDMpCiAJCQlpbmZvLT5uZGNiMiA9IChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZjsKIAl9IGVsc2UKIAkJLyogc21hbGwgYmxvY2ssIDEgY3ljbGVzIGZvciBjb2x1bW4gYWRkcmVzcwpAQCAtNDA2LDcgKzM5NCw3IEBACiAKIHN0YXRpYyBpbnQgcHJlcGFyZV9vdGhlcl9jbWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sIHVpbnQxNl90IGNtZCkKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBpbmZvLT5mbGFzaF9pbmZvLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gaW5mby0+Zmxhc2hfaW5mby0+Y21kc2V0OwogCiAJaW5mby0+bmRjYjAgPSBjbWQgfCAoKGNtZCAmIDB4ZmYwMCkgPyBORENCMF9EQkMgOiAwKTsKIAlpbmZvLT5uZGNiMSA9IDA7CkBAIC02NDEsOCArNjI5LDggQEAKIAkJCQlpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewogCXN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvID0gbXRkLT5wcml2OwotCXN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbyA9IGluZm8tPmZsYXNoX2luZm87Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gZmxhc2hfaW5mby0+Y21kc2V0OworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbyA9IGluZm8tPmZsYXNoX2luZm87CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gZmxhc2hfaW5mby0+Y21kc2V0OwogCWludCByZXQ7CiAKIAlpbmZvLT51c2VfZG1hID0gKHVzZV9kbWEpID8gMSA6IDA7CkBAIC03MjAsNyArNzA4LDcgQEAKIAkJaW5mby0+dXNlX2RtYSA9IDA7CS8qIGZvcmNlIFBJTyByZWFkICovCiAJCWluZm8tPmJ1Zl9zdGFydCA9IDA7CiAJCWluZm8tPmJ1Zl9jb3VudCA9IChjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkgPwotCQkJCWZsYXNoX2luZm8tPnJlYWRfaWRfYnl0ZXMgOiAxOworCQkJCWluZm8tPnJlYWRfaWRfYnl0ZXMgOiAxOwogCiAJCWlmIChwcmVwYXJlX290aGVyX2NtZChpbmZvLCAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFESUQpID8KIAkJCQljbWRzZXQtPnJlYWRfaWQgOiBjbWRzZXQtPnJlYWRfc3RhdHVzKSkKQEAgLTg2MSw4ICs4NDksOCBAQAogCiBzdGF0aWMgaW50IF9fcmVhZGlkKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLCB1aW50MzJfdCAqaWQpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CiAJdWludDMyX3QgbmRjcjsKIAl1aW50OF90ICBpZF9idWZmWzhdOwogCkBAIC04OTEsNyArODc5LDcgQEAKIH0KIAogc3RhdGljIGludCBweGEzeHhfbmFuZF9jb25maWdfZmxhc2goc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZikKKwkJCQkgICAgY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBpbmZvLT5wZGV2OwogCXN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtOTA0LDI1ICs4OTIsMjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBjYWxjdWxhdGUgZmxhc2ggaW5mb3JtYXRpb24gKi8KLQlmLT5vb2Jfc2l6ZSA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyA2NCA6IDE2OwotCWYtPnJlYWRfaWRfYnl0ZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNCA6IDI7CisJaW5mby0+b29iX3NpemUgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNjQgOiAxNjsKKwlpbmZvLT5yZWFkX2lkX2J5dGVzID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDQgOiAyOwogCiAJLyogY2FsY3VsYXRlIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24gKi8KLQlmLT5jb2xfYWRkcl9jeWNsZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gMiA6IDE7CisJaW5mby0+Y29sX2FkZHJfY3ljbGVzID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDIgOiAxOwogCiAJaWYgKGYtPm51bV9ibG9ja3MgKiBmLT5wYWdlX3Blcl9ibG9jayA+IDY1NTM2KQotCQlmLT5yb3dfYWRkcl9jeWNsZXMgPSAzOworCQlpbmZvLT5yb3dfYWRkcl9jeWNsZXMgPSAzOwogCWVsc2UKLQkJZi0+cm93X2FkZHJfY3ljbGVzID0gMjsKKwkJaW5mby0+cm93X2FkZHJfY3ljbGVzID0gMjsKIAogCW5kY3IgfD0gKHBkYXRhLT5lbmFibGVfYXJiaXRlcikgPyBORENSX05EX0FSQl9FTiA6IDA7Ci0JbmRjciB8PSAoZi0+Y29sX2FkZHJfY3ljbGVzID09IDIpID8gTkRDUl9SQV9TVEFSVCA6IDA7CisJbmRjciB8PSAoaW5mby0+Y29sX2FkZHJfY3ljbGVzID09IDIpID8gTkRDUl9SQV9TVEFSVCA6IDA7CiAJbmRjciB8PSAoZi0+cGFnZV9wZXJfYmxvY2sgPT0gNjQpID8gTkRDUl9QR19QRVJfQkxLIDogMDsKIAluZGNyIHw9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyBORENSX1BBR0VfU1ogOiAwOwogCW5kY3IgfD0gKGYtPmZsYXNoX3dpZHRoID09IDE2KSA/IE5EQ1JfRFdJRFRIX00gOiAwOwogCW5kY3IgfD0gKGYtPmRmY193aWR0aCA9PSAxNikgPyBORENSX0RXSURUSF9DIDogMDsKIAotCW5kY3IgfD0gTkRDUl9SRF9JRF9DTlQoZi0+cmVhZF9pZF9ieXRlcyk7CisJbmRjciB8PSBORENSX1JEX0lEX0NOVChpbmZvLT5yZWFkX2lkX2J5dGVzKTsKIAluZGNyIHw9IE5EQ1JfU1BBUkVfRU47IC8qIGVuYWJsZSBzcGFyZSBieSBkZWZhdWx0ICovCiAKIAlpbmZvLT5yZWdfbmRjciA9IG5kY3I7CkBAIC05MzIsMTIgKzkyMCwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgcHhhM3h4X25hbmRfZGV0ZWN0X2ZsYXNoKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmOwotCXVpbnQzMl90IGlkOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZjsKKwl1aW50MzJfdCBpZCA9IC0xOwogCWludCBpOwogCisJZm9yIChpID0gMDsgaTxwZGF0YS0+bnVtX2ZsYXNoOyArK2kpIHsKKwkJZiA9IHBkYXRhLT5mbGFzaCArIGk7CisKKwkJaWYgKHB4YTN4eF9uYW5kX2NvbmZpZ19mbGFzaChpbmZvLCBmKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChfX3JlYWRpZChpbmZvLCAmaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkID09IGYtPmNoaXBfaWQpCisJCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU4KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWlsdGluX2ZsYXNoX3R5cGVzKTsgaSsrKSB7CiAKIAkJZiA9IGJ1aWx0aW5fZmxhc2hfdHlwZXNbaV07CkBAIC05NTEsNyArOTU0LDExIEBACiAJCWlmIChpZCA9PSBmLT5jaGlwX2lkKQogCQkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAKKwlkZXZfd2FybigmaW5mby0+cGRldi0+ZGV2LAorCQkgImZhaWxlZCB0byBkZXRlY3QgY29uZmlndXJlZCBuYW5kIGZsYXNoOyBmb3VuZCAlMDR4IGluc3RlYWQgb2ZcbiIsCisJCSBpZCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTEwMTQsNyArMTAyMSw3IEBACiBzdGF0aWMgdm9pZCBweGEzeHhfbmFuZF9pbml0X210ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJCQkgc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaW5mby0+bmFuZF9jaGlwOwogCiAJdGhpcy0+b3B0aW9ucyA9IChmLT5mbGFzaF93aWR0aCA9PSAxNikgPyBOQU5EX0JVU1dJRFRIXzE2OiAwOwpAQCAtMTEzNSw3ICsxMTQyLDcgQEAKIAkJZ290byBmYWlsX2ZyZWVfYnVmOwogCX0KIAotCXJldCA9IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChpbmZvKTsKKwlyZXQgPSBweGEzeHhfbmFuZF9kZXRlY3RfZmxhc2goaW5mbywgcGRhdGEpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGRldGVjdCBmbGFzaFxuIik7CiAJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxYWNiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYwpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIFN1cGVySCBGTENUTCBuYW5kIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IMKpIDIwMDggQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKgorICogQmFzZWQgb24gZnNsX2VsYmNfbmFuZC5jLCBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9zaF9mbGN0bC5oPgorCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZsY3RsXzRzZWNjX29vYl8xNiA9IHsKKwkuZWNjYnl0ZXMgPSAxMCwKKwkuZWNjcG9zID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDl9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDEyLAorCQkuIGxlbmd0aCA9IDR9IH0sCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZsY3RsXzRzZWNjX29vYl82NCA9IHsKKwkuZWNjYnl0ZXMgPSAxMCwKKwkuZWNjcG9zID0gezQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3fSwKKwkub29iZnJlZSA9IHsKKwkJey5vZmZzZXQgPSA2MCwKKwkJLiBsZW5ndGggPSA0fSB9LAorfTsKKworc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYsIDB4ZmYgfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBmbGN0bF80c2VjY19zbWFsbHBhZ2UgPSB7CisJLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSwKKwkub2ZmcyA9IDExLAorCS5sZW4gPSAxLAorCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuLAorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBmbGN0bF80c2VjY19sYXJnZXBhZ2UgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNTgsCisJLmxlbiA9IDIsCisJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4sCit9OworCitzdGF0aWMgdm9pZCBlbXB0eV9maWZvKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJd3JpdGVsKDB4MDAwYzAwMDAsIEZMSU5URE1BQ1IoZmxjdGwpKTsJLyogRklGTyBDbGVhciAqLworCXdyaXRlbCgweDAwMDAwMDAwLCBGTElOVERNQUNSKGZsY3RsKSk7CS8qIENsZWFyIEVycm9yIGZsYWdzICovCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3RyYW5zbGF0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJd3JpdGViKFRSU1RSVCwgRkxUUkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfY29tcGxldGlvbihzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQlpZiAocmVhZGIoRkxUUkNSKGZsY3RsKSkgJiBUUkVORCkgeworCQkJd3JpdGViKDB4MCwgRkxUUkNSKGZsY3RsKSk7CisJCQlyZXR1cm47CisJCX0KKwkJdWRlbGF5KDEpOworCX0KKworCXByaW50ayhLRVJOX0VSUiAid2FpdF9jb21wbGV0aW9uKCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXdyaXRlYigweDAsIEZMVFJDUihmbGN0bCkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYWRkcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJdWludDMyX3QgYWRkciA9IDA7CisKKwlpZiAoY29sdW1uID09IC0xKSB7CisJCWFkZHIgPSBwYWdlX2FkZHI7CS8qIEVSQVNFMSAqLworCX0gZWxzZSBpZiAocGFnZV9hZGRyICE9IC0xKSB7CisJCS8qIFNFUUlOLCBSRUFEMCwgZXRjLi4gKi8KKwkJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCWFkZHIgPSBjb2x1bW4gJiAweDBGRkY7CisJCQlhZGRyIHw9IChwYWdlX2FkZHIgJiAweGZmKSA8PCAxNjsKKwkJCWFkZHIgfD0gKChwYWdlX2FkZHIgPj4gOCkgJiAweGZmKSA8PCAyNDsKKwkJCS8qIGJpZyB0aGFuIDEyOE1CICovCisJCQlpZiAoZmxjdGwtPnJ3X0FEUkNOVCA9PSBBRFJDTlQyX0UpIHsKKwkJCQl1aW50MzJfdCAJYWRkcjI7CisJCQkJYWRkcjIgPSAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmY7CisJCQkJd3JpdGVsKGFkZHIyLCBGTEFEUjIoZmxjdGwpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSBjb2x1bW47CisJCQlhZGRyIHw9IChwYWdlX2FkZHIgJiAweGZmKSA8PCA4OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpIDw8IDE2OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmKSA8PCAyNDsKKwkJfQorCX0KKwl3cml0ZWwoYWRkciwgRkxBRFIoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9yZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQl1aW50MzJfdCB2YWw7CisJCS8qIGNoZWNrIEZJRk8gKi8KKwkJdmFsID0gcmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAxNjsKKwkJaWYgKHZhbCAmIDB4RkYpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3dmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgbGVuLCB0aW1lb3V0ID0gTE9PUF9USU1FT1VUX01BWDsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJLyogY2hlY2sgRklGTyAqLworCQlsZW4gPSAocmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAxNikgJiAweEZGOworCQlpZiAobGVuID49IDQpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgaW50IHdhaXRfcmVjZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCWludCBjaGVja2VkWzRdOworCXZvaWQgX19pb21lbSAqZWNjX3JlZ1s0XTsKKwlpbnQgaTsKKwl1aW50MzJfdCBkYXRhLCBzaXplOworCisJbWVtc2V0KGNoZWNrZWQsIDAsIHNpemVvZihjaGVja2VkKSk7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCXNpemUgPSByZWFkbChGTERUQ05UUihmbGN0bCkpID4+IDI0OworCQlpZiAoc2l6ZSAmIDB4RkYpCisJCQlyZXR1cm4gMDsJLyogc3VjY2VzcyAqLworCisJCWlmIChyZWFkbChGTDRFQ0NDUihmbGN0bCkpICYgXzRFQ0NGQSkKKwkJCXJldHVybiAxOwkvKiBjYW4ndCBjb3JyZWN0ICovCisKKwkJdWRlbGF5KDEpOworCQlpZiAoIShyZWFkbChGTDRFQ0NDUihmbGN0bCkpICYgXzRFQ0NFTkQpKQorCQkJY29udGludWU7CisKKwkJLyogc3RhcnQgZXJyb3IgY29ycmVjdGlvbiAqLworCQllY2NfcmVnWzBdID0gRkw0RUNDUkVTVUxUMChmbGN0bCk7CisJCWVjY19yZWdbMV0gPSBGTDRFQ0NSRVNVTFQxKGZsY3RsKTsKKwkJZWNjX3JlZ1syXSA9IEZMNEVDQ1JFU1VMVDIoZmxjdGwpOworCQllY2NfcmVnWzNdID0gRkw0RUNDUkVTVUxUMyhmbGN0bCk7CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJZGF0YSA9IHJlYWRsKGVjY19yZWdbaV0pOworCQkJaWYgKGRhdGEgIT0gSU5JVF9GTDRFQ0NSRVNVTFRfVkFMICYmICFjaGVja2VkW2ldKSB7CisJCQkJdWludDhfdCBvcmc7CisJCQkJaW50IGluZGV4OworCisJCQkJaW5kZXggPSBkYXRhID4+IDE2OworCQkJCW9yZyA9IGZsY3RsLT5kb25lX2J1ZmZbaW5kZXhdOworCQkJCWZsY3RsLT5kb25lX2J1ZmZbaW5kZXhdID0gb3JnIF4gKGRhdGEgJiAweEZGKTsKKwkJCQljaGVja2VkW2ldID0gMTsKKwkJCX0KKwkJfQorCisJCXdyaXRlbCgwLCBGTDRFQ0NDUihmbGN0bCkpOworCX0KKworCXByaW50ayhLRVJOX0VSUiAid2FpdF9yZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXJldHVybiAxOwkvKiB0aW1lb3V0ICovCit9CisKK3N0YXRpYyB2b2lkIHdhaXRfd2VjZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCXVpbnQzMl90IGxlbjsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJLyogY2hlY2sgRkxFQ0ZJRk8gKi8KKwkJbGVuID0gKHJlYWRsKEZMRFRDTlRSKGZsY3RsKSkgPj4gMjQpICYgMHhGRjsKKwkJaWYgKGxlbiA+PSA0KQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMSk7CisJfQorCXByaW50ayhLRVJOX0VSUiAid2FpdF93ZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2RhdGFyZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikmZmxjdGwtPmRvbmVfYnVmZltvZmZzZXRdOworCisJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKworCWRhdGEgPSByZWFkbChGTERBVEFSKGZsY3RsKSk7CisJKmJ1ZiA9IGxlMzJfdG9fY3B1KGRhdGEpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHJsZW4sIGludCBvZmZzZXQpCit7CisJaW50IGksIGxlbl80YWxpZ247CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikmZmxjdGwtPmRvbmVfYnVmZltvZmZzZXRdOworCXZvaWQgKmZpZm9fYWRkciA9ICh2b2lkICopRkxEVEZJRk8oZmxjdGwpOworCisJbGVuXzRhbGlnbiA9IChybGVuICsgMykgLyA0OworCisJZm9yIChpID0gMDsgaSA8IGxlbl80YWxpZ247IGkrKykgeworCQl3YWl0X3JmaWZvX3JlYWR5KGZsY3RsKTsKKwkJYnVmW2ldID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJYnVmW2ldID0gYmUzMl90b19jcHUoYnVmW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9lY2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgdWludDhfdCAqYnVmZikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nICplY2NfYnVmID0gKHVuc2lnbmVkIGxvbmcgKilidWZmOworCXZvaWQgKmZpZm9fYWRkciA9ICh2b2lkICopRkxFQ0ZJRk8oZmxjdGwpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAod2FpdF9yZWNmaWZvX3JlYWR5KGZsY3RsKSkKKwkJCXJldHVybiAxOworCQllY2NfYnVmW2ldID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJZWNjX2J1ZltpXSA9IGJlMzJfdG9fY3B1KGVjY19idWZbaV0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9maWZvcmVnKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGludCBybGVuLCBpbnQgb2Zmc2V0KQoreworCWludCBpLCBsZW5fNGFsaWduOworCXVuc2lnbmVkIGxvbmcgKmRhdGEgPSAodW5zaWduZWQgbG9uZyAqKSZmbGN0bC0+ZG9uZV9idWZmW29mZnNldF07CisJdm9pZCAqZmlmb19hZGRyID0gKHZvaWQgKilGTERURklGTyhmbGN0bCk7CisKKwlsZW5fNGFsaWduID0gKHJsZW4gKyAzKSAvIDQ7CisJZm9yIChpID0gMDsgaSA8IGxlbl80YWxpZ247IGkrKykgeworCQl3YWl0X3dmaWZvX3JlYWR5KGZsY3RsKTsKKwkJd3JpdGVsKGNwdV90b19iZTMyKGRhdGFbaV0pLCBmaWZvX2FkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2NtZF9yZWdzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50MzJfdCBjbWQsIHVpbnQzMl90IGZsY21jZHJfdmFsKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKTsKKwl1aW50MzJfdCBmbGNtZGNyX3ZhbCwgYWRkcl9sZW5fYnl0ZXMgPSAwOworCisJLyogU2V0IFNOQU5EIGJpdCBpZiBwYWdlIHNpemUgaXMgMjA0OGJ5dGUgKi8KKwlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJZmxjbW5jcl92YWwgfD0gU05BTkRfRTsKKwllbHNlCisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCisJLyogZGVmYXVsdCBGTENNRENSIHZhbCAqLworCWZsY21kY3JfdmFsID0gRE9DTUQxX0UgfCBET0FEUl9FOworCisJLyogU2V0IGZvciBGTENNRENSICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+ZXJhc2VfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRTsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCWFkZHJfbGVuX2J5dGVzID0gZmxjdGwtPnJ3X0FEUkNOVDsKKwkJZmxjbWRjcl92YWwgfD0gQ0RTUkNfRTsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwkJLyogVGhpcyBjYXNlIGlzIHRoYXQgY21kIGlzIFJFQUQwIG9yIFJFQUQxIG9yIFJFQUQwMCAqLworCQlmbGNtZGNyX3ZhbCAmPSB+RE9BRFJfRTsJLyogT05MWSBleGVjdXRlIDFzdCBjbWQgKi8KKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRSB8IENEU1JDX0UgfCBTRUxSVzsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCQlhZGRyX2xlbl9ieXRlcyA9IEFEUkNOVF8xOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1NUQVRVUzoKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlmbGNtbmNyX3ZhbCAmPSB+U05BTkRfRTsKKwkJZmxjbWRjcl92YWwgJj0gfihET0FEUl9FIHwgRE9TUl9FKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IGFkZHJlc3MgYnl0ZXMgcGFyYW1ldGVyICovCisJZmxjbWRjcl92YWwgfD0gYWRkcl9sZW5fYnl0ZXM7CisKKwkvKiBOb3cgYWN0dWFsbHkgd3JpdGUgKi8KKwl3cml0ZWwoZmxjbW5jcl92YWwsIEZMQ01OQ1IoZmxjdGwpKTsKKwl3cml0ZWwoZmxjbWRjcl92YWwsIEZMQ01EQ1IoZmxjdGwpKTsKKwl3cml0ZWwoZmxjbWNkcl92YWwsIEZMQ01DRFIoZmxjdGwpKTsKK30KKworc3RhdGljIGludCBmbGN0bF9yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWlmIChmbGN0bC0+aHdlY2NfY2FudF9jb3JyZWN0W2ldKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmbGN0bF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIHAsIGVjY3NpemUpOworfQorCitzdGF0aWMgdm9pZCBleGVjbWRfcmVhZF9wYWdlX3NlY3RvcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpCisJCXBhZ2Vfc2VjdG9ycyA9IDQ7CisJZWxzZQorCQlwYWdlX3NlY3RvcnMgPSAxOworCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IEFDTV9TQUNDRVNfTU9ERSB8IF80RUNDQ09SUkVDVCwKKwkJIEZMQ01OQ1IoZmxjdGwpKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1JFQUQwLAorCQkoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpIHwgTkFORF9DTURfUkVBRDApOworCisJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBwYWdlX3NlY3RvcnM7IHNlY3RvcisrKSB7CisJCWludCByZXQ7CisKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXdyaXRlbChyZWFkbChGTENNRENSKGZsY3RsKSkgfCAxLCBGTENNRENSKGZsY3RsKSk7CisJCXdyaXRlbChwYWdlX2FkZHIgPDwgMiB8IHNlY3RvciwgRkxBRFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZmlmb3JlZyhmbGN0bCwgNTEyLCA1MTIgKiBzZWN0b3IpOworCisJCXJldCA9IHJlYWRfZWNmaWZvcmVnKGZsY3RsLAorCQkJJmZsY3RsLT5kb25lX2J1ZmZbbXRkLT53cml0ZXNpemUgKyAxNiAqIHNlY3Rvcl0pOworCisJCWlmIChyZXQpCisJCQlmbGN0bC0+aHdlY2NfY2FudF9jb3JyZWN0W3NlY3Rvcl0gPSAxOworCisJCXdyaXRlbCgweDAsIEZMNEVDQ0NSKGZsY3RsKSk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorCXdyaXRlbChyZWFkbChGTENNTkNSKGZsY3RsKSkgJiB+KEFDTV9TQUNDRVNfTU9ERSB8IF80RUNDQ09SUkVDVCksCisJCQlGTENNTkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNtZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisKKwlzZXRfY21kX3JlZ3MobXRkLCBOQU5EX0NNRF9SRUFEMCwKKwkJKE5BTkRfQ01EX1JFQURTVEFSVCA8PCA4KSB8IE5BTkRfQ01EX1JFQUQwKTsKKworCWVtcHR5X2ZpZm8oZmxjdGwpOworCWlmIChmbGN0bC0+cGFnZV9zaXplKSB7CisJCWludCBpOworCQkvKiBJbiBjYXNlIHRoYXQgdGhlIHBhZ2Ugc2l6ZSBpcyAyayAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTYgKiAzOyBpKyspCisJCQlmbGN0bC0+ZG9uZV9idWZmW2ldID0gMHhGRjsKKworCQlzZXRfYWRkcihtdGQsIDMgKiA1MjggKyA1MTIsIHBhZ2VfYWRkcik7CisJCXdyaXRlbCgxNiwgRkxEVENOVFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZmlmb3JlZyhmbGN0bCwgMTYsIDE2ICogMyk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfSBlbHNlIHsKKwkJLyogSW4gY2FzZSB0aGF0IHRoZSBwYWdlIHNpemUgaXMgNTEyYiAqLworCQlzZXRfYWRkcihtdGQsIDUxMiwgcGFnZV9hZGRyKTsKKwkJd3JpdGVsKDE2LCBGTERUQ05UUihmbGN0bCkpOworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9maWZvcmVnKGZsY3RsLCAxNiwgMCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjbWRfd3JpdGVfcGFnZV9zZWN0b3Ioc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpLCBwYWdlX2FkZHIgPSBmbGN0bC0+c2VxaW5fcGFnZV9hZGRyOworCWludCBzZWN0b3IsIHBhZ2Vfc2VjdG9yczsKKworCWlmIChmbGN0bC0+cGFnZV9zaXplKQorCQlwYWdlX3NlY3RvcnMgPSA0OworCWVsc2UKKwkJcGFnZV9zZWN0b3JzID0gMTsKKworCXdyaXRlbChyZWFkbChGTENNTkNSKGZsY3RsKSkgfCBBQ01fU0FDQ0VTX01PREUsIEZMQ01OQ1IoZmxjdGwpKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLAorCQkJKE5BTkRfQ01EX1BBR0VQUk9HIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCisJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBwYWdlX3NlY3RvcnM7IHNlY3RvcisrKSB7CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQl3cml0ZWwocmVhZGwoRkxDTURDUihmbGN0bCkpIHwgMSwgRkxDTURDUihmbGN0bCkpOworCQl3cml0ZWwocGFnZV9hZGRyIDw8IDIgfCBzZWN0b3IsIEZMQURSKGZsY3RsKSk7CisKKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQl3cml0ZV9maWZvcmVnKGZsY3RsLCA1MTIsIDUxMiAqIHNlY3Rvcik7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJd2FpdF93ZWNmaWZvX3JlYWR5KGZsY3RsKTsgLyogd2FpdCBmb3Igd3JpdGUgcmVhZHkgKi8KKwkJCXdyaXRlbCgweEZGRkZGRkZGLCBGTEVDRklGTyhmbGN0bCkpOworCQl9CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSAmIH5BQ01fU0FDQ0VTX01PREUsIEZMQ01OQ1IoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgZXhlY21kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IHBhZ2VfYWRkciA9IGZsY3RsLT5zZXFpbl9wYWdlX2FkZHI7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJc2VjdG9yID0gMzsKKwkJcGFnZV9zZWN0b3JzID0gNDsKKwl9IGVsc2UgeworCQlzZWN0b3IgPSAwOworCQlwYWdlX3NlY3RvcnMgPSAxOworCX0KKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLAorCQkJKE5BTkRfQ01EX1BBR0VQUk9HIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCisJZm9yICg7IHNlY3RvciA8IHBhZ2Vfc2VjdG9yczsgc2VjdG9yKyspIHsKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXNldF9hZGRyKG10ZCwgc2VjdG9yICogNTI4ICsgNTEyLCBwYWdlX2FkZHIpOworCQl3cml0ZWwoMTYsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCByZWFkIHNpemUgKi8KKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdyaXRlX2ZpZm9yZWcoZmxjdGwsIDE2LCAxNiAqIHNlY3Rvcik7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbGN0bF9jbWRmdW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXVpbnQzMl90IHJlYWRfY21kID0gMDsKKworCWZsY3RsLT5yZWFkX2J5dGVzID0gMDsKKwlpZiAoY29tbWFuZCAhPSBOQU5EX0NNRF9QQUdFUFJPRykKKwkJZmxjdGwtPmluZGV4ID0gMDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgTkFORF9DTURfUkVBRDE6CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaWYgKGZsY3RsLT5od2VjYykgeworCQkJLyogcmVhZCBwYWdlIHdpdGggaHdlY2MgKi8KKwkJCWV4ZWNtZF9yZWFkX3BhZ2Vfc2VjdG9yKG10ZCwgcGFnZV9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIChOQU5EX0NNRF9SRUFEU1RBUlQgPDwgOCkKKwkJCQl8IGNvbW1hbmQpOworCQllbHNlCisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKworCQlzZXRfYWRkcihtdGQsIDAsIHBhZ2VfYWRkcik7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKKwkJZmxjdGwtPmluZGV4ICs9IGNvbHVtbjsKKwkJZ290byByZWFkX25vcm1hbF9leGl0OworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCQlpZiAoZmxjdGwtPmh3ZWNjKSB7CisJCQkvKiByZWFkIHBhZ2Ugd2l0aCBod2VjYyAqLworCQkJZXhlY21kX3JlYWRfb29iKG10ZCwgcGFnZV9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCWlmIChmbGN0bC0+cGFnZV9zaXplKSB7CisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCAoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpCisJCQkJfCBOQU5EX0NNRF9SRUFEMCk7CisJCQlzZXRfYWRkcihtdGQsIG10ZC0+d3JpdGVzaXplLCBwYWdlX2FkZHIpOworCQl9IGVsc2UgeworCQkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCQlzZXRfYWRkcihtdGQsIDAsIHBhZ2VfYWRkcik7CisJCX0KKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSBtdGQtPm9vYnNpemU7CisJCWdvdG8gcmVhZF9ub3JtYWxfZXhpdDsKKworCWNhc2UgTkFORF9DTURfUkVBRElEOgorCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCXNldF9hZGRyKG10ZCwgMCwgMCk7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSA0OworCQl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7IC8qIHNldCByZWFkIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQlyZWFkX2RhdGFyZWcoZmxjdGwsIDApOwkvKiByZWFkIGFuZCBlbmQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJZmxjdGwtPmVyYXNlMV9wYWdlX2FkZHIgPSBwYWdlX2FkZHI7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CisJCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwKKwkJCShjb21tYW5kIDw8IDgpIHwgTkFORF9DTURfRVJBU0UxKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgZmxjdGwtPmVyYXNlMV9wYWdlX2FkZHIpOworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwkJaWYgKCFmbGN0bC0+cGFnZV9zaXplKSB7CisJCQkvKiBvdXRwdXQgcmVhZCBjb21tYW5kICovCisJCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOworCQkJCXJlYWRfY21kID0gTkFORF9DTURfUkVBRE9PQjsKKwkJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CisJCQkJcmVhZF9jbWQgPSBOQU5EX0NNRF9SRUFEMDsKKwkJCX0gZWxzZSB7CisJCQkJY29sdW1uIC09IDI1NjsKKwkJCQlyZWFkX2NtZCA9IE5BTkRfQ01EX1JFQUQxOworCQkJfQorCQl9CisJCWZsY3RsLT5zZXFpbl9jb2x1bW4gPSBjb2x1bW47CisJCWZsY3RsLT5zZXFpbl9wYWdlX2FkZHIgPSBwYWdlX2FkZHI7CisJCWZsY3RsLT5zZXFpbl9yZWFkX2NtZCA9IHJlYWRfY21kOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlpZiAoIWZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1NFUUlOLAorCQkJCQlmbGN0bC0+c2VxaW5fcmVhZF9jbWQpOworCQkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCQkJd3JpdGVsKDAsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCAwIHNpemUgKi8KKwkJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCX0KKwkJaWYgKGZsY3RsLT5od2VjYykgeworCQkJLyogd3JpdGUgcGFnZSB3aXRoIGh3ZWNjICovCisJCQlpZiAoZmxjdGwtPnNlcWluX2NvbHVtbiA9PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQlleGVjbWRfd3JpdGVfb29iKG10ZCk7CisJCQllbHNlIGlmICghZmxjdGwtPnNlcWluX2NvbHVtbikKKwkJCQlleGVjbWRfd3JpdGVfcGFnZV9zZWN0b3IobXRkKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYWRkcmVzcyAhP1xuIik7CisJCQlicmVhazsKKwkJfQorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCAoY29tbWFuZCA8PCA4KSB8IE5BTkRfQ01EX1NFUUlOKTsKKwkJc2V0X2FkZHIobXRkLCBmbGN0bC0+c2VxaW5fY29sdW1uLCBmbGN0bC0+c2VxaW5fcGFnZV9hZGRyKTsKKwkJd3JpdGVsKGZsY3RsLT5pbmRleCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IHdyaXRlIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQl3cml0ZV9maWZvcmVnKGZsY3RsLCBmbGN0bC0+aW5kZXgsIDApOworCQl3YWl0X2NvbXBsZXRpb24oZmxjdGwpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCisJCWZsY3RsLT5yZWFkX2J5dGVzID0gMTsKKwkJd3JpdGVsKGZsY3RsLT5yZWFkX2J5dGVzLCBGTERUQ05UUihmbGN0bCkpOyAvKiBzZXQgcmVhZCBzaXplICovCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9kYXRhcmVnKGZsY3RsLCAwKTsgLyogcmVhZCBhbmQgZW5kICovCisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRVNFVDoKKwkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCXNldF9hZGRyKG10ZCwgLTEsIC0xKTsKKworCQl3cml0ZWwoMCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IDAgc2l6ZSAqLworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybjsKKworcmVhZF9ub3JtYWxfZXhpdDoKKwl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCByZWFkIHNpemUgKi8KKwlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJcmVhZF9maWZvcmVnKGZsY3RsLCBmbGN0bC0+cmVhZF9ieXRlcywgMCk7CisJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcG5yKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKTsKKworCXN3aXRjaCAoY2hpcG5yKSB7CisJY2FzZSAtMToKKwkJZmxjbW5jcl92YWwgJj0gfkNFMF9FTkFCTEU7CisJCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCQlicmVhazsKKwljYXNlIDA6CisJCWZsY21uY3JfdmFsIHw9IENFMF9FTkFCTEU7CisJCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlpbnQgaSwgaW5kZXggPSBmbGN0bC0+aW5kZXg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWZsY3RsLT5kb25lX2J1ZmZbaW5kZXggKyBpXSA9IGJ1ZltpXTsKKwlmbGN0bC0+aW5kZXggKz0gbGVuOworfQorCitzdGF0aWMgdWludDhfdCBmbGN0bF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKwl1aW50OF90IGRhdGE7CisKKwlkYXRhID0gZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisJZmxjdGwtPmluZGV4Kys7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWJ1ZltpXSA9IGZsY3RsX3JlYWRfYnl0ZShtdGQpOworfQorCitzdGF0aWMgaW50IGZsY3RsX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IGZsY3RsX3JlYWRfYnl0ZShtdGQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3JlZ2lzdGVyX2luaXQoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJd3JpdGVsKHZhbCwgRkxDTU5DUihmbGN0bCkpOworfQorCitzdGF0aWMgaW50IGZsY3RsX2NoaXBfaW5pdF90YWlsKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gJmZsY3RsLT5jaGlwOworCisJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikgeworCQlmbGN0bC0+cGFnZV9zaXplID0gMDsKKwkJaWYgKGNoaXAtPmNoaXBzaXplID4gKDMyIDw8IDIwKSkgeworCQkJLyogYmlnIHRoYW4gMzJNQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF80OworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8zOworCQl9IGVsc2UgaWYgKGNoaXAtPmNoaXBzaXplID4gKDIgPDwgMTYpKSB7CisJCQkvKiBiaWcgdGhhbiAxMjhLQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8zOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8yOworCQl9IGVsc2UgeworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8yOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8xOworCQl9CisJfSBlbHNlIHsKKwkJZmxjdGwtPnBhZ2Vfc2l6ZSA9IDE7CisJCWlmIChjaGlwLT5jaGlwc2l6ZSA+ICgxMjggPDwgMjApKSB7CisJCQkvKiBiaWcgdGhhbiAxMjhNQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVDJfRTsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMzsKKwkJfSBlbHNlIGlmIChjaGlwLT5jaGlwc2l6ZSA+ICg4IDw8IDE2KSkgeworCQkJLyogYmlnIHRoYW4gNTEyS0IgKi8KKwkJCWZsY3RsLT5yd19BRFJDTlQgPSBBRFJDTlRfNDsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMjsKKwkJfSBlbHNlIHsKKwkJCWZsY3RsLT5yd19BRFJDTlQgPSBBRFJDTlRfMzsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMTsKKwkJfQorCX0KKworCWlmIChmbGN0bC0+aHdlY2MpIHsKKwkJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikgeworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZmbGN0bF80c2VjY19vb2JfMTY7CisJCQljaGlwLT5iYWRibG9ja19wYXR0ZXJuID0gJmZsY3RsXzRzZWNjX3NtYWxscGFnZTsKKwkJfSBlbHNlIHsKKwkJCWNoaXAtPmVjYy5sYXlvdXQgPSAmZmxjdGxfNHNlY2Nfb29iXzY0OworCQkJY2hpcC0+YmFkYmxvY2tfcGF0dGVybiA9ICZmbGN0bF80c2VjY19sYXJnZXBhZ2U7CisJCX0KKworCQljaGlwLT5lY2Muc2l6ZSA9IDUxMjsKKwkJY2hpcC0+ZWNjLmJ5dGVzID0gMTA7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBmbGN0bF9yZWFkX3BhZ2VfaHdlY2M7CisJCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gZmxjdGxfd3JpdGVfcGFnZV9od2VjYzsKKwkJY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKworCQkvKiA0IHN5bWJvbHMgRUNDIGVuYWJsZWQgKi8KKwkJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IF80RUNDRU4gfCBFQ0NQT1MyIHwgRUNDUE9TXzAyLAorCQkJCUZMQ01OQ1IoZmxjdGwpKTsKKwl9IGVsc2UgeworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZsY3RsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bDsKKwlzdHJ1Y3QgbXRkX2luZm8gKmZsY3RsX210ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOworCXN0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInNoX2ZsY3RsIHBsYXRmb3JtX2RhdGEgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZsY3RsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX2ZsY3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbGN0bCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBOQU5EIE1URCBkZXYgc3RydWN0dXJlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzb3VyY2Ugbm90IGZvdW5kLlxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwlmbGN0bC0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoZmxjdGwtPnJlZyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZsY3RsKTsKKwlmbGN0bF9tdGQgPSAmZmxjdGwtPm10ZDsKKwluYW5kID0gJmZsY3RsLT5jaGlwOworCWZsY3RsX210ZC0+cHJpdiA9IG5hbmQ7CisJZmxjdGwtPmh3ZWNjID0gcGRhdGEtPmhhc19od2VjYzsKKworCWZsY3RsX3JlZ2lzdGVyX2luaXQoZmxjdGwsIHBkYXRhLT5mbGNtbmNyX3ZhbCk7CisKKwluYW5kLT5vcHRpb25zID0gTkFORF9OT19BVVRPSU5DUjsKKworCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KKwkvKiAyMCB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KKwluYW5kLT5jaGlwX2RlbGF5ID0gMjA7CisKKwluYW5kLT5yZWFkX2J5dGUgPSBmbGN0bF9yZWFkX2J5dGU7CisJbmFuZC0+d3JpdGVfYnVmID0gZmxjdGxfd3JpdGVfYnVmOworCW5hbmQtPnJlYWRfYnVmID0gZmxjdGxfcmVhZF9idWY7CisJbmFuZC0+dmVyaWZ5X2J1ZiA9IGZsY3RsX3ZlcmlmeV9idWY7CisJbmFuZC0+c2VsZWN0X2NoaXAgPSBmbGN0bF9zZWxlY3RfY2hpcDsKKwluYW5kLT5jbWRmdW5jID0gZmxjdGxfY21kZnVuYzsKKworCXJldCA9IG5hbmRfc2Nhbl9pZGVudChmbGN0bF9tdGQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gZmxjdGxfY2hpcF9pbml0X3RhaWwoZmxjdGxfbXRkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IG5hbmRfc2Nhbl90YWlsKGZsY3RsX210ZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlhZGRfbXRkX3BhcnRpdGlvbnMoZmxjdGxfbXRkLCBwZGF0YS0+cGFydHMsIHBkYXRhLT5ucl9wYXJ0cyk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKGZsY3RsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBmbGN0bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwluYW5kX3JlbGVhc2UoJmZsY3RsLT5tdGQpOworCWtmcmVlKGZsY3RsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbGN0bF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGZsY3RsX3Byb2JlLAorCS5yZW1vdmUJCT0gZmxjdGxfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInNoX2ZsY3RsIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZsY3RsX25hbmRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZsY3RsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmbGN0bF9uYW5kX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZmxjdGxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZmxjdGxfbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KGZsY3RsX25hbmRfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIllvc2hpaGlybyBTaGltb2RhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBGTENUTCBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2hfZmxjdGwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvdG90by5jIGIvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjQ5MmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqICBkcml2ZXJzL210ZC9uYW5kL3RvdG8uYwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMgVGV4YXMgSW5zdHJ1bWVudHMKLSAqCi0gKiAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL2F1dGNwdTEyLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAyIFRob21hcyBHbGVpeG5lciA8dGd4bEBsaW51dHJvbml4LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIE92ZXJ2aWV3OgotICogICBUaGlzIGlzIGEgZGV2aWNlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uIHRoZQotICogICBUSSBmaWRvIGJvYXJkLiBJdCBzdXBwb3J0cyAzMk1pQiBhbmQgNjRNaUIgY2FyZHMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90b3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gtb21hcDE1MTAvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0KLSNkZWZpbmUgQ09ORklHX05BTkRfV09SS0FST1VORCAxCi0KLS8qCi0gKiBNVEQgc3RydWN0dXJlIGZvciBUT1RPIGJvYXJkCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnRvdG9fbXRkID0gTlVMTDsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90b19pb19iYXNlID0gT01BUF9GTEFTSF8xX0JBU0U7Ci0KLS8qCi0gKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlcwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mbzY0TVtdID0gewotCXsgLm5hbWUgPQkidG90byBrZXJuZWwgcGFydGl0aW9uIDEiLAotCSAgLm9mZnNldCA9CTAsCi0JICAuc2l6ZQk9CTIgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBmaWxlIHN5cyBwYXJ0aXRpb24gMiIsCi0JICAub2Zmc2V0ID0JMiAqIFNaXzFNLAotCSAgLnNpemUgPQkxNCAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIHVzZXIgcGFydGl0aW9uIDMiLAotCSAgLm9mZnNldCA9CTE2ICogU1pfMU0sCi0JICAuc2l6ZSA9CTE2ICogU1pfMU0gfSwKLQl7IC5uYW1lID0JInRvdG8gZGV2Ym9hcmQgZXh0cmEgcGFydGl0aW9uIDQiLAotCSAgLm9mZnNldCA9CTMyICogU1pfMU0sCi0JICAuc2l6ZSA9CTMyICogU1pfMU0gfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mbzMyTVtdID0gewotCXsgLm5hbWUgPQkidG90byBrZXJuZWwgcGFydGl0aW9uIDEiLAotCSAgLm9mZnNldCA9CTAsCi0JICAuc2l6ZSA9CTIgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBmaWxlIHN5cyBwYXJ0aXRpb24gMiIsCi0JICAub2Zmc2V0ID0JMiAqIFNaXzFNLAotCSAgLnNpemUgPQkxNCAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIHVzZXIgcGFydGl0aW9uIDMiLAotCSAgLm9mZnNldCA9CTE2ICogU1pfMU0sCi0JICAuc2l6ZSA9CTE2ICogU1pfMU0gfSwKLX07Ci0KLSNkZWZpbmUgTlVNX1BBUlRJVElPTlMzMk0gMwotI2RlZmluZSBOVU1fUEFSVElUSU9OUzY0TSA0Ci0KLS8qCi0gKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcwotICoKLSAqCWN0cmw6Ci0gKglOQU5EX05DRTogYml0IDAgLT4gYml0IDE0ICgweDQwMDApCi0gKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDEyICgweDEwMDApCi0gKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDEgICgweDAwMDIpCi0gKi8KLXN0YXRpYyB2b2lkIHRvdG9faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAotCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKLQotCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgewotCQl1bnNpZ25lZCBsb25nIGJpdHM7Ci0KLQkJLyogaG9wZWZ1bGx5IGVub3VnaCB0aW1lIGZvciB0YyBtYWtlIHByb2NlZGluZyB3cml0ZSB0byBjbGVhciAqLwotCQl1ZGVsYXkoMSk7Ci0KLQkJYml0cyA9ICh+Y3RybCAmIE5BTkRfTkNFKSA8PCAxNDsKLQkJYml0cyB8PSAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxMjsKLQkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA+PiAxOwotCi0jd2FybmluZyBXaWxkIGd1ZXNzIGFzIGdwaW9zZXRvdXQoKSBpcyBub3doZXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgLSB0Z2x4Ci0JCWdwaW9zZXRvdXQoMHg1MDAyLCBiaXRzKTsKLQotI2lmZGVmIENPTkZJR19OQU5EX1dPUktBUk9VTkQKLQkJLyogInNvbWUiIGRldiBib2FyZHMgYnVzdGVkLCBibHVlIHdpcmVkIHRvIHJ0czIgOiggKi8KLQkJcnRzMnNldG91dCgyLCAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxKTsKLSNlbmRpZgotCQkvKiBhbGxvdyB0aW1lIHRvIGVuc3VyZSBncGlvIHN0YXRlIHRvIG92ZXIgdGFrZSBtZW1vcnkgd3JpdGUgKi8KLQkJdWRlbGF5KDEpOwotCX0KLQotCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKLQkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKLX0KLQotLyoKLSAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQotICovCi1zdGF0aWMgaW50IF9faW5pdCB0b3RvX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwotCWludCBlcnIgPSAwOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JdG90b19tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRvdG9fbXRkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSB0b3RvIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZ0b3RvX210ZFsxXSk7Ci0KLQkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQodG90b19tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKLQotCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCi0JdG90b19tdGQtPnByaXYgPSB0aGlzOwotCXRvdG9fbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JLyogU2V0IGFkZHJlc3Mgb2YgTkFORCBJTyBsaW5lcyAqLwotCXRoaXMtPklPX0FERFJfUiA9IHRvdG9faW9fYmFzZTsKLQl0aGlzLT5JT19BRERSX1cgPSB0b3RvX2lvX2Jhc2U7Ci0JdGhpcy0+Y21kX2N0cmwgPSB0b3RvX2h3Y29udHJvbDsKLQl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOwotCS8qIDI1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwotCXRoaXMtPmNoaXBfZGVsYXkgPSAzMDsKLQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7Ci0KLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuKHRvdG9fbXRkLCAxKSkgewotCQllcnIgPSAtRU5YSU87Ci0JCWdvdG8gb3V0X210ZDsKLQl9Ci0KLQkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXN3aXRjaCAodG90b19tdGQtPnNpemUpIHsKLQljYXNlIFNaXzY0TToKLQkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzY0TSwgTlVNX1BBUlRJVElPTlM2NE0pOwotCQlicmVhazsKLQljYXNlIFNaXzMyTToKLQkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzMyTSwgTlVNX1BBUlRJVElPTlMzMk0pOwotCQlicmVhazsKLQlkZWZhdWx0OnsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuc3VwcG9ydGVkIE5hbmQgZGV2aWNlXG4iKTsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJfQotCX0KLQotCWdwaW9yZXNlcnZlKE5BTkRfTUFTSyk7CS8qIGNsYWltIG91ciBncGlvcyAqLwotCWFyY2hmbGFzaHdwKDAsIDApOwkvKiBvcGVuIHVwIGZsYXNoIGZvciB3cml0aW5nICovCi0KLQlnb3RvIG91dDsKLQotIG91dF9tdGQ6Ci0Ja2ZyZWUodG90b19tdGQpOwotIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1tb2R1bGVfaW5pdCh0b3RvX2luaXQpOwotCi0vKgotICogQ2xlYW4gdXAgcm91dGluZQotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgdG90b19jbGVhbnVwKHZvaWQpCi17Ci0JLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlKHRvdG9fbXRkKTsKLQotCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUodG90b19tdGQpOwotCi0JLyogc3RvcCBmbGFzaCB3cml0ZXMgKi8KLQlhcmNoZmxhc2h3cCgwLCAxKTsKLQotCS8qIHJlbGVhc2UgZ3Bpb3MgdG8gc3lzdGVtICovCi0JZ3Bpb3JlbGVhc2UoTkFORF9NQVNLKTsKLX0KLQotbW9kdWxlX2V4aXQodG90b19jbGVhbnVwKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHbHVlIGxheWVyIGZvciBOQU5EIGZsYXNoIG9uIHRvdG8gYm9hcmQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29mcGFydC5jIGIvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKaW5kZXggNGY4MGMyZi4uOWU0NWIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCiBpbnQgX19kZXZpbml0IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9pbmZvICptdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKaW5kZXggY2I0MWNiYy4uNzlmYTc5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwpAQCAtMjcsOCArMjcsMTYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBPbmVOQU5EIGZsYXNoIHZpYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLgogCitjb25maWcgTVREX09ORU5BTkRfT01BUDIKKwl0cmlzdGF0ZSAiT25lTkFORCBvbiBPTUFQMi9PTUFQMyBzdXBwb3J0IgorCWRlcGVuZHMgb24gTVREX09ORU5BTkQgJiYgKEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMykKKwloZWxwCisJICBTdXBwb3J0IGZvciBhIE9uZU5BTkQgZmxhc2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhbiBPTUFQMi9PTUFQMyBDUFUKKwkgIHZpYSB0aGUgR1BNQyBtZW1vcnkgY29udHJvbGxlci4KKwogY29uZmlnIE1URF9PTkVOQU5EX09UUAogCWJvb2wgIk9uZU5BTkQgT1RQIFN1cHBvcnQiCisJc2VsZWN0IEhBVkVfTVREX09UUAogCWhlbHAKIAkgIE9uZSBCbG9jayBvZiB0aGUgTkFORCBGbGFzaCBBcnJheSBtZW1vcnkgaXMgcmVzZXJ2ZWQgYXMKIAkgIGEgT25lLVRpbWUgUHJvZ3JhbW1hYmxlIEJsb2NrIG1lbW9yeSBhcmVhLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUKaW5kZXggNGQyZWFjZi4uNjRiNmNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogCiAjIEJvYXJkIHNwZWNpZmljLgogb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMpCSs9IGdlbmVyaWMubworb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQkJKz0gb21hcDIubwogCiAjIFNpbXVsYXRvcgogb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX1NJTSkJCSs9IG9uZW5hbmRfc2ltLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg3ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC0wLDAgKzEsODAyIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYworICoKKyAqICBPbmVOQU5EIGRyaXZlciBmb3IgT01BUDIgLyBPTUFQMworICoKKyAqICBDb3B5cmlnaHQgwqkgMjAwNS0yMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIEF1dGhvcjogSmFya2tvIExhdmluZW4gPGphcmtrby5sYXZpbmVuQG5va2lhLmNvbT4gYW5kIEp1aGEgWXJqw7Zsw6QKKyAqICBJUlEgYW5kIERNQSBzdXBwb3J0IHdyaXR0ZW4gYnkgVGltbyBUZXJhcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb25lbmFuZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJvbWFwMi1vbmVuYW5kIgorCisjZGVmaW5lIE9ORU5BTkRfSU9fU0laRQkJU1pfMTI4SworI2RlZmluZSBPTkVOQU5EX0JVRlJBTV9TSVpFCSgxMDI0ICogNSkKKworc3RydWN0IG9tYXAyX29uZW5hbmQgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IGdwbWNfY3M7CisJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CisJaW50IGdwaW9faXJxOworCXN0cnVjdCBtdGRfaW5mbyBtdGQ7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgb25lbmFuZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBpcnFfZG9uZTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkbWFfZG9uZTsKKwlpbnQgZG1hX2NoYW5uZWw7CisJaW50IGZyZXE7CisJaW50ICgqc2V0dXApKHZvaWQgX19pb21lbSAqYmFzZSwgaW50IGZyZXEpOworfTsKKworc3RhdGljIHZvaWQgb21hcDJfb25lbmFuZF9kbWFfY2IoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGRhdGE7CisKKwljb21wbGV0ZSgmYy0+ZG1hX2RvbmUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDJfb25lbmFuZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGV2X2lkOworCisJY29tcGxldGUoJmMtPmlycV9kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkX3JlZyhzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYywgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZHcoYy0+b25lbmFuZC5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3JlZyhzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYywgdW5zaWduZWQgc2hvcnQgdmFsdWUsCisJCQkgICAgIGludCByZWcpCit7CisJd3JpdGV3KHZhbHVlLCBjLT5vbmVuYW5kLmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2VycihjaGFyICptc2csIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGN0cmwsIHVuc2lnbmVkIGludCBpbnRyKQoreworCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiAlcyEgc3RhdGUgJWQgY3RybCAweCUwNHggaW50ciAweCUwNHhcbiIsCisJICAgICAgIG1zZywgc3RhdGUsIGN0cmwsIGludHIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3dhcm4oY2hhciAqbXNnLCBpbnQgc3RhdGUsIHVuc2lnbmVkIGludCBjdHJsLAorCQkgICAgICB1bnNpZ25lZCBpbnQgaW50cikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICJvbmVuYW5kX3dhaXQ6ICVzISBzdGF0ZSAlZCBjdHJsIDB4JTA0eCAiCisJICAgICAgICJpbnRyIDB4JTA0eFxuIiwgbXNnLCBzdGF0ZSwgY3RybCwgaW50cik7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfb25lbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc3RhdGUpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwl1bnNpZ25lZCBpbnQgaW50ciA9IDA7CisJdW5zaWduZWQgaW50IGN0cmw7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBzeXNjZmc7CisKKwlpZiAoc3RhdGUgPT0gRkxfUkVTRVRJTkcpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJCXVkZWxheSgxKTsKKwkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJaWYgKGludHIgJiBPTkVOQU5EX0lOVF9NQVNURVIpCisJCQkJYnJlYWs7CisJCX0KKwkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKKwkJCXdhaXRfZXJyKCJjb250cm9sbGVyIGVycm9yIiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKCEoaW50ciAmIE9ORU5BTkRfSU5UX1JFU0VUKSkgeworCQkJd2FpdF9lcnIoInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RhdGUgIT0gRkxfUkVBRElORykgeworCQlpbnQgcmVzdWx0OworCisJCS8qIFR1cm4gaW50ZXJydXB0cyBvbiAqLworCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCWlmICghKHN5c2NmZyAmIE9ORU5BTkRfU1lTX0NGRzFfSU9CRSkpIHsKKwkJCXN5c2NmZyB8PSBPTkVOQU5EX1NZU19DRkcxX0lPQkU7CisJCQl3cml0ZV9yZWcoYywgc3lzY2ZnLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCQkJLyogQWRkIGEgZGVsYXkgdG8gbGV0IEdQSU8gc2V0dGxlICovCisJCQkJc3lzY2ZnID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfU1lTX0NGRzEpOworCQl9CisKKwkJSU5JVF9DT01QTEVUSU9OKGMtPmlycV9kb25lKTsKKwkJaWYgKGMtPmdwaW9faXJxKSB7CisJCQlyZXN1bHQgPSBvbWFwX2dldF9ncGlvX2RhdGFpbihjLT5ncGlvX2lycSk7CisJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpbnRyID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKKwkJCQl3YWl0X2VycigiZ3BpbyBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXN1bHQgPSAwOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCWludCByZXRyeV9jbnQgPSAwOworcmV0cnk6CisJCQlyZXN1bHQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmMtPmlycV9kb25lLAorCQkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCS8qIFRpbWVvdXQgYWZ0ZXIgMjBtcyAqLworCQkJCWN0cmwgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyk7CisJCQkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfT05HTykgeworCQkJCQkvKgorCQkJCQkgKiBUaGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIHN0aWxsIGdvaW5nCisJCQkJCSAqIHNvIGdpdmUgaXQgc29tZSBtb3JlIHRpbWUuCisJCQkJCSAqLworCQkJCQlyZXRyeV9jbnQgKz0gMTsKKwkJCQkJaWYgKHJldHJ5X2NudCA8IDMpCisJCQkJCQlnb3RvIHJldHJ5OworCQkJCQlpbnRyID0gcmVhZF9yZWcoYywKKwkJCQkJCQlPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCQl3YWl0X2VycigidGltZW91dCIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJfQorCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCWlmICgoaW50ciAmIE9ORU5BTkRfSU5UX01BU1RFUikgPT0gMCkKKwkJCQkJd2FpdF93YXJuKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaW50IHJldHJ5X2NudCA9IDA7CisKKwkJLyogVHVybiBpbnRlcnJ1cHRzIG9mZiAqLworCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCXN5c2NmZyAmPSB+T05FTkFORF9TWVNfQ0ZHMV9JT0JFOworCQl3cml0ZV9yZWcoYywgc3lzY2ZnLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisKKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCWlmIChpbnRyICYgT05FTkFORF9JTlRfTUFTVEVSKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyogVGltZW91dCBhZnRlciAyMG1zICovCisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9PTkdPKSB7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBvcGVyYXRpb24gc2VlbXMgdG8gYmUgc3RpbGwgZ29pbmcKKwkJCQkJICogc28gZ2l2ZSBpdCBzb21lIG1vcmUgdGltZS4KKwkJCQkJICovCisJCQkJCXJldHJ5X2NudCArPSAxOworCQkJCQlpZiAocmV0cnlfY250IDwgMykgeworCQkJCQkJdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJCSAgbXNlY3NfdG9famlmZmllcygyMCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCWN0cmwgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyk7CisKKwlpZiAoaW50ciAmIE9ORU5BTkRfSU5UX1JFQUQpIHsKKwkJaW50IGVjYyA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMpOworCisJCWlmIChlY2MpIHsKKwkJCXVuc2lnbmVkIGludCBhZGRyMSwgYWRkcjg7CisKKwkJCWFkZHIxID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEpOworCQkJYWRkcjggPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTOCk7CisJCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd2FpdDogRUNDIGVycm9yID0gIgorCQkJCSAgICAgICAiMHglMDR4LCBhZGRyMSAlI3gsIGFkZHI4ICUjeFxuIiwKKwkJCQkgICAgICAgZWNjLCBhZGRyMSwgYWRkcjgpOworCQkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQkJCXJldHVybiAtRUJBRE1TRzsKKwkJCX0gZWxzZSBpZiAoZWNjICYgT05FTkFORF9FQ0NfMUJJVF9BTEwpIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm9uZW5hbmRfd2FpdDogY29ycmVjdGFibGUgIgorCQkJCSAgICAgICAiRUNDIGVycm9yID0gMHglMDR4LCBhZGRyMSAlI3gsICIKKwkJCQkgICAgICAgImFkZHI4ICUjeFxuIiwgZWNjLCBhZGRyMSwgYWRkcjgpOworCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChzdGF0ZSA9PSBGTF9SRUFESU5HKSB7CisJCXdhaXRfZXJyKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9FUlJPUikgeworCQl3YWl0X2VycigiY29udHJvbGxlciBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfTE9DSykKKwkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiAiCisJCQkJCSJEZXZpY2UgaXMgd3JpdGUgcHJvdGVjdGVkISEhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGN0cmwgJiAweEZFOUYpCisJCXdhaXRfd2FybigidW5leHBlY3RlZCBjb250cm9sbGVyIHN0YXR1cyIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoT05FTkFORF9DVVJSRU5UX0JVRkZFUlJBTSh0aGlzKSkgeworCQlpZiAoYXJlYSA9PSBPTkVOQU5EX0RBVEFSQU0pCisJCQlyZXR1cm4gbXRkLT53cml0ZXNpemU7CisJCWlmIChhcmVhID09IE9ORU5BTkRfU1BBUkVSQU0pCisJCQlyZXR1cm4gbXRkLT5vb2JzaXplOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChNVUxUSV9PTUFQMikKKworc3RhdGljIGludCBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgb2Zmc2V0LAorCQkJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXZvaWQgKmJ1ZiA9ICh2b2lkICopYnVmZmVyOworCXNpemVfdCB4dHJhOworCXZvbGF0aWxlIHVuc2lnbmVkICpkb25lOworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJaWYgKGJyYW1fb2Zmc2V0ICYgMyB8fCAoc2l6ZV90KWJ1ZiAmIDMgfHwgY291bnQgPCAzODQpCisJCWdvdG8gb3V0X2NvcHk7CisKKwlpZiAoYnVmID49IGhpZ2hfbWVtb3J5KSB7CisJCXN0cnVjdCBwYWdlICpwMTsKKworCQlpZiAoKChzaXplX3QpYnVmICYgUEFHRV9NQVNLKSAhPQorCQkgICAgKChzaXplX3QpKGJ1ZiArIGNvdW50IC0gMSkgJiBQQUdFX01BU0spKQorCQkJZ290byBvdXRfY29weTsKKwkJcDEgPSB2bWFsbG9jX3RvX3BhZ2UoYnVmKTsKKwkJaWYgKCFwMSkKKwkJCWdvdG8gb3V0X2NvcHk7CisJCWJ1ZiA9IHBhZ2VfYWRkcmVzcyhwMSkgKyAoKHNpemVfdClidWYgJiB+UEFHRV9NQVNLKTsKKwl9CisKKwl4dHJhID0gY291bnQgJiAzOworCWlmICh4dHJhKSB7CisJCWNvdW50IC09IHh0cmE7CisJCW1lbWNweShidWYgKyBjb3VudCwgdGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0ICsgY291bnQsIHh0cmEpOworCX0KKworCWRtYV9zcmMgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlkbWFfZHN0ID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgYnVmLCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJZ290byBvdXRfY29weTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCSAgICAgY291bnQgPj4gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvbmUgPSAmYy0+ZG1hX2RvbmUuZG9uZTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCWlmICgqZG9uZSkKKwkJCWJyZWFrOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKworCWlmICghKmRvbmUpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBETUFcbiIpOworCQlnb3RvIG91dF9jb3B5OworCX0KKworCXJldHVybiAwOworCitvdXRfY29weToKKwltZW1jcHkoYnVmLCB0aGlzLT5iYXNlICsgYnJhbV9vZmZzZXQsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM19vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCSBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXZvaWQgKmJ1ZiA9ICh2b2lkICopYnVmZmVyOworCXZvbGF0aWxlIHVuc2lnbmVkICpkb25lOworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJaWYgKGJyYW1fb2Zmc2V0ICYgMyB8fCAoc2l6ZV90KWJ1ZiAmIDMgfHwgY291bnQgPCAzODQpCisJCWdvdG8gb3V0X2NvcHk7CisKKwkvKiBwYW5pY193cml0ZSgpIG1heSBiZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAqLworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJZ290byBvdXRfY29weTsKKworCWlmIChidWYgPj0gaGlnaF9tZW1vcnkpIHsKKwkJc3RydWN0IHBhZ2UgKnAxOworCisJCWlmICgoKHNpemVfdClidWYgJiBQQUdFX01BU0spICE9CisJCSAgICAoKHNpemVfdCkoYnVmICsgY291bnQgLSAxKSAmIFBBR0VfTUFTSykpCisJCQlnb3RvIG91dF9jb3B5OworCQlwMSA9IHZtYWxsb2NfdG9fcGFnZShidWYpOworCQlpZiAoIXAxKQorCQkJZ290byBvdXRfY29weTsKKwkJYnVmID0gcGFnZV9hZGRyZXNzKHAxKSArICgoc2l6ZV90KWJ1ZiAmIH5QQUdFX01BU0spOworCX0KKworCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBidWYsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfZHN0ID0gYy0+cGh5c19iYXNlICsgYnJhbV9vZmZzZXQ7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QpKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwKKwkJCSJDb3VsZG4ndCBETUEgbWFwIGEgJWQgYnl0ZSBidWZmZXJcbiIsCisJCQljb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCSAgICAgY291bnQgPj4gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvbmUgPSAmYy0+ZG1hX2RvbmUuZG9uZTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCWlmICgqZG9uZSkKKwkJCWJyZWFrOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAoISpkb25lKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgRE1BXG4iKTsKKwkJZ290byBvdXRfY29weTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2NvcHk6CisJbWVtY3B5KHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCwgYnVmLCBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKK2ludCBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgb2Zmc2V0LAorCQkJCSBzaXplX3QgY291bnQpOworCitpbnQgb21hcDNfb25lbmFuZF93cml0ZV9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCSAgaW50IG9mZnNldCwgc2l6ZV90IGNvdW50KTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAyKQorCitzdGF0aWMgaW50IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKworCWJyYW1fb2Zmc2V0ID0gb21hcDJfb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSkgKyBhcmVhICsgb2Zmc2V0OworCS8qIERNQSBpcyBub3QgdXNlZC4gIFJldmlzaXQgUE0gcmVxdWlyZW1lbnRzIGJlZm9yZSBlbmFibGluZyBpdC4gKi8KKwlpZiAoMSB8fCAoYy0+ZG1hX2NoYW5uZWwgPCAwKSB8fAorCSAgICAoKHZvaWQgKikgYnVmZmVyID49ICh2b2lkICopIGhpZ2hfbWVtb3J5KSB8fCAoYnJhbV9vZmZzZXQgJiAzKSB8fAorCSAgICAoKCh1bnNpZ25lZCBpbnQpIGJ1ZmZlcikgJiAzKSB8fCAoY291bnQgPCAxMDI0KSB8fCAoY291bnQgJiAzKSkgeworCQltZW1jcHkoYnVmZmVyLCAoX19mb3JjZSB2b2lkICopKHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCksCisJCSAgICAgICBjb3VudCk7CisJCXJldHVybiAwOworCX0KKworCWRtYV9zcmMgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlkbWFfZHN0ID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgYnVmZmVyLCBjb3VudCwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQkJICAgICBjb3VudCAvIDQsIDEsIDAsIDAsIDApOworCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQlkbWFfc3JjLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCSBkbWFfZHN0LCAwLCAwKTsKKworCUlOSVRfQ09NUExFVElPTihjLT5kbWFfZG9uZSk7CisJb21hcF9zdGFydF9kbWEoYy0+ZG1hX2NoYW5uZWwpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmMtPmRtYV9kb25lKTsKKworCWRtYV91bm1hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCwgY291bnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCSBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisKKwlicmFtX29mZnNldCA9IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChtdGQsIGFyZWEpICsgYXJlYSArIG9mZnNldDsKKwkvKiBETUEgaXMgbm90IHVzZWQuICBSZXZpc2l0IFBNIHJlcXVpcmVtZW50cyBiZWZvcmUgZW5hYmxpbmcgaXQuICovCisJaWYgKDEgfHwgKGMtPmRtYV9jaGFubmVsIDwgMCkgfHwKKwkgICAgKCh2b2lkICopIGJ1ZmZlciA+PSAodm9pZCAqKSBoaWdoX21lbW9yeSkgfHwgKGJyYW1fb2Zmc2V0ICYgMykgfHwKKwkgICAgKCgodW5zaWduZWQgaW50KSBidWZmZXIpICYgMykgfHwgKGNvdW50IDwgMTAyNCkgfHwgKGNvdW50ICYgMykpIHsKKwkJbWVtY3B5KChfX2ZvcmNlIHZvaWQgKikodGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0KSwgYnVmZmVyLAorCQkgICAgICAgY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgKHZvaWQgKikgYnVmZmVyLCBjb3VudCwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJZG1hX2RzdCA9IGMtPnBoeXNfYmFzZSArIGJyYW1fb2Zmc2V0OworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfZHN0KSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsCisJCQkiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGUgYnVmZmVyXG4iLAorCQkJY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKKwkJCQkgICAgIGNvdW50IC8gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJIHNpemVfdCBjb3VudCk7CisKK2ludCBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJICBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpOworCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfb25lbmFuZF9kcml2ZXI7CisKK3N0YXRpYyBpbnQgX19hZGp1c3RfdGltaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYzsKKworCWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCUJVR19PTihjLT5zZXR1cCA9PSBOVUxMKTsKKworCS8qIERNQSBpcyBub3QgaW4gdXNlIHNvIHRoaXMgaXMgYWxsIHRoYXQgaXMgbmVlZGVkICovCisJLyogUmV2aXNpdCBmb3IgT01BUDMhICovCisJcmV0ID0gYy0+c2V0dXAoYy0+b25lbmFuZC5iYXNlLCBjLT5mcmVxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBvbWFwMl9vbmVuYW5kX3JlcGhhc2Uodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmb21hcDJfb25lbmFuZF9kcml2ZXIuZHJpdmVyLCBOVUxMLAorCQkJCSAgICAgIE5VTEwsIF9fYWRqdXN0X3RpbWluZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBvbWFwMl9vbmVuYW5kX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwkvKiBXaXRoIGNlcnRhaW4gY29udGVudCBpbiB0aGUgYnVmZmVyIFJBTSwgdGhlIE9NQVAgYm9vdCBST00gY29kZQorCSAqIGNhbiByZWNvZ25pemUgdGhlIGZsYXNoIGNoaXAgaW5jb3JyZWN0bHkuIFplcm8gaXQgb3V0IGJlZm9yZQorCSAqIHNvZnQgcmVzZXQuCisJICovCisJbWVtc2V0KChfX2ZvcmNlIHZvaWQgKiljLT5vbmVuYW5kLmJhc2UsIDAsIE9ORU5BTkRfQlVGUkFNX1NJWkUpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMl9vbmVuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYzsKKwlpbnQgcjsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwMl9vbmVuYW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluaXRfY29tcGxldGlvbigmYy0+aXJxX2RvbmUpOworCWluaXRfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCWMtPmdwbWNfY3MgPSBwZGF0YS0+Y3M7CisJYy0+Z3Bpb19pcnEgPSBwZGF0YS0+Z3Bpb19pcnE7CisJYy0+ZG1hX2NoYW5uZWwgPSBwZGF0YS0+ZG1hX2NoYW5uZWw7CisJaWYgKGMtPmRtYV9jaGFubmVsIDwgMCkgeworCQkvKiBpZiAtMSwgZG9uJ3QgdXNlIERNQSAqLworCQljLT5ncGlvX2lycSA9IDA7CisJfQorCisJciA9IGdwbWNfY3NfcmVxdWVzdChjLT5ncG1jX2NzLCBPTkVOQU5EX0lPX1NJWkUsICZjLT5waHlzX2Jhc2UpOworCWlmIChyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSwKKwkJCSAgICAgICBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZXNlcnZlIG1lbW9yeSByZWdpb24gYXQgMHglMDhseCwgIgorCQkJInNpemU6IDB4JXhcbiIsCWMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9jczsKKwl9CisJYy0+b25lbmFuZC5iYXNlID0gaW9yZW1hcChjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSk7CisJaWYgKGMtPm9uZW5hbmQuYmFzZSA9PSBOVUxMKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CisJfQorCisJaWYgKHBkYXRhLT5vbmVuYW5kX3NldHVwICE9IE5VTEwpIHsKKwkJciA9IHBkYXRhLT5vbmVuYW5kX3NldHVwKGMtPm9uZW5hbmQuYmFzZSwgYy0+ZnJlcSk7CisJCWlmIChyIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiT25lbmFuZCBwbGF0Zm9ybSBzZXR1cCBmYWlsZWQ6ICIKKwkJCQkiJWRcbiIsIHIpOworCQkJZ290byBlcnJfaW91bm1hcDsKKwkJfQorCQljLT5zZXR1cCA9IHBkYXRhLT5vbmVuYW5kX3NldHVwOworCX0KKworCWlmIChjLT5ncGlvX2lycSkgeworCQlpZiAoKHIgPSBvbWFwX3JlcXVlc3RfZ3BpbyhjLT5ncGlvX2lycSkpIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3IgIgorCQkJCSJPbmVOQU5EXG4iLCBjLT5ncGlvX2lycSk7CisJCQlnb3RvIGVycl9pb3VubWFwOworCX0KKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihjLT5ncGlvX2lycSwgMSk7CisKKwlpZiAoKHIgPSByZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwKKwkJCSAgICAgb21hcDJfb25lbmFuZF9pbnRlcnJ1cHQsIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICAgIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsIGMpKSA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfZ3BpbzsKKwl9CisKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgPj0gMCkgeworCQlyID0gb21hcF9yZXF1ZXN0X2RtYSgwLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lLAorCQkJCSAgICAgb21hcDJfb25lbmFuZF9kbWFfY2IsICh2b2lkICopIGMsCisJCQkJICAgICAmYy0+ZG1hX2NoYW5uZWwpOworCQlpZiAociA9PSAwKSB7CisJCQlvbWFwX3NldF9kbWFfd3JpdGVfbW9kZShjLT5kbWFfY2hhbm5lbCwKKwkJCQkJCU9NQVBfRE1BX1dSSVRFX05PTl9QT1NURUQpOworCQkJb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soYy0+ZG1hX2NoYW5uZWwsIDEpOworCQkJb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKGMtPmRtYV9jaGFubmVsLAorCQkJCQkJICAgIE9NQVBfRE1BX0RBVEFfQlVSU1RfOCk7CisJCQlvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soYy0+ZG1hX2NoYW5uZWwsIDEpOworCQkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShjLT5kbWFfY2hhbm5lbCwKKwkJCQkJCSAgICAgT01BUF9ETUFfREFUQV9CVVJTVF84KTsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkJICJmYWlsZWQgdG8gYWxsb2NhdGUgRE1BIGZvciBPbmVOQU5ELCAiCisJCQkJICJ1c2luZyBQSU8gaW5zdGVhZFxuIik7CisJCQljLT5kbWFfY2hhbm5lbCA9IC0xOworCQl9CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImluaXRpYWxpemluZyBvbiBDUyVkLCBwaHlzIGJhc2UgMHglMDhseCwgdmlydHVhbCAiCisJCSAiYmFzZSAlcFxuIiwgYy0+Z3BtY19jcywgYy0+cGh5c19iYXNlLAorCQkgYy0+b25lbmFuZC5iYXNlKTsKKworCWMtPnBkZXYgPSBwZGV2OworCWMtPm10ZC5uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwljLT5tdGQucHJpdiA9ICZjLT5vbmVuYW5kOworCWMtPm10ZC5vd25lciA9IFRISVNfTU9EVUxFOworCisJaWYgKGMtPmRtYV9jaGFubmVsID49IDApIHsKKwkJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9ICZjLT5vbmVuYW5kOworCisJCXRoaXMtPndhaXQgPSBvbWFwMl9vbmVuYW5kX3dhaXQ7CisJCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQkJdGhpcy0+cmVhZF9idWZmZXJyYW0gPSBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtOworCQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtID0gb21hcDNfb25lbmFuZF93cml0ZV9idWZmZXJyYW07CisJCX0gZWxzZSB7CisJCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbSA9IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW07CisJCQl0aGlzLT53cml0ZV9idWZmZXJyYW0gPSBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbTsKKwkJfQorCX0KKworCWlmICgociA9IG9uZW5hbmRfc2NhbigmYy0+bXRkLCAxKSkgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX2RtYTsKKworCXN3aXRjaCAoKGMtPm9uZW5hbmQudmVyc2lvbl9pZCA+PiA0KSAmIDB4ZikgeworCWNhc2UgMDoKKwkJYy0+ZnJlcSA9IDQwOworCQlicmVhazsKKwljYXNlIDE6CisJCWMtPmZyZXEgPSA1NDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljLT5mcmVxID0gNjY7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYy0+ZnJlcSA9IDgzOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpZiAocGRhdGEtPnBhcnRzICE9IE5VTEwpCisJCXIgPSBhZGRfbXRkX3BhcnRpdGlvbnMoJmMtPm10ZCwgcGRhdGEtPnBhcnRzLAorCQkJCSAgICAgICBwZGF0YS0+bnJfcGFydHMpOworCWVsc2UKKyNlbmRpZgorCQlyID0gYWRkX210ZF9kZXZpY2UoJmMtPm10ZCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX29uZW5hbmQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjKTsKKworCXJldHVybiAwOworCitlcnJfcmVsZWFzZV9vbmVuYW5kOgorCW9uZW5hbmRfcmVsZWFzZSgmYy0+bXRkKTsKK2Vycl9yZWxlYXNlX2RtYToKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgIT0gLTEpCisJCW9tYXBfZnJlZV9kbWEoYy0+ZG1hX2NoYW5uZWwpOworCWlmIChjLT5ncGlvX2lycSkKKwkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShjLT5ncGlvX2lycSksIGMpOworZXJyX3JlbGVhc2VfZ3BpbzoKKwlpZiAoYy0+Z3Bpb19pcnEpCisJCW9tYXBfZnJlZV9ncGlvKGMtPmdwaW9faXJxKTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoYy0+b25lbmFuZC5iYXNlKTsKK2Vycl9yZWxlYXNlX21lbV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKGMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKK2Vycl9mcmVlX2NzOgorCWdwbWNfY3NfZnJlZShjLT5ncG1jX2NzKTsKK2Vycl9rZnJlZToKKwlrZnJlZShjKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwMl9vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJQlVHX09OKGMgPT0gTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpZiAoYy0+cGFydHMpCisJCWRlbF9tdGRfcGFydGl0aW9ucygmYy0+bXRkKTsKKwllbHNlCisJCWRlbF9tdGRfZGV2aWNlKCZjLT5tdGQpOworI2Vsc2UKKwlkZWxfbXRkX2RldmljZSgmYy0+bXRkKTsKKyNlbmRpZgorCisJb25lbmFuZF9yZWxlYXNlKCZjLT5tdGQpOworCWlmIChjLT5kbWFfY2hhbm5lbCAhPSAtMSkKKwkJb21hcF9mcmVlX2RtYShjLT5kbWFfY2hhbm5lbCk7CisJb21hcDJfb25lbmFuZF9zaHV0ZG93bihwZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZiAoYy0+Z3Bpb19pcnEpIHsKKwkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShjLT5ncGlvX2lycSksIGMpOworCQlvbWFwX2ZyZWVfZ3BpbyhjLT5ncGlvX2lycSk7CisJfQorCWlvdW5tYXAoYy0+b25lbmFuZC5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYy0+cGh5c19iYXNlLCBPTkVOQU5EX0lPX1NJWkUpOworCWtmcmVlKGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAyX29uZW5hbmRfZHJpdmVyID0geworCS5wcm9iZQkJPSBvbWFwMl9vbmVuYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gb21hcDJfb25lbmFuZF9yZW1vdmUsCisJLnNodXRkb3duCT0gb21hcDJfb25lbmFuZF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9vbmVuYW5kX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EIGRyaXZlciBpbml0aWFsaXppbmdcbiIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXAyX29uZW5hbmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAyX29uZW5hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMl9vbmVuYW5kX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9tYXAyX29uZW5hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwMl9vbmVuYW5kX2V4aXQpOworCitNT0RVTEVfQUxJQVMoRFJJVkVSX05BTUUpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFya2tvIExhdmluZW4gPGphcmtrby5sYXZpbmVuQG5va2lhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2x1ZSBsYXllciBmb3IgT25lTkFORCBmbGFzaCBvbiBPTUFQMiAvIE9NQVAzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCA5MjZjZjNhLi45MGVkMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTE3OTQsNyArMTc5NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9FUkFTSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NzZmRjLmMgYi9kcml2ZXJzL210ZC9zc2ZkYy5jCmluZGV4IGE1ZjNkNjAuLjMzYTVkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NzZmRjLmMKKysrIGIvZHJpdmVycy9tdGQvc3NmZGMuYwpAQCAtMzIxLDggKzMyMSw3IEBACiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKIAkJIlNTRkRDX1JPOiBjaXNfYmxvY2s9JWQsZXJhc2Vfc2l6ZT0lZCxtYXBfbGVuPSVkLG5fem9uZXM9JWRcbiIsCiAJCXNzZmRjLT5jaXNfYmxvY2ssIHNzZmRjLT5lcmFzZV9zaXplLCBzc2ZkYy0+bWFwX2xlbiwKLQkJKHNzZmRjLT5tYXBfbGVuICsgTUFYX1BIWVNfQkxLX1BFUl9aT05FIC0gMSkgLwotCQlNQVhfUEhZU19CTEtfUEVSX1pPTkUpOworCQlESVZfUk9VTkRfVVAoc3NmZGMtPm1hcF9sZW4sIE1BWF9QSFlTX0JMS19QRVJfWk9ORSkpOwogCiAJLyogU2V0IGdlb21ldHJ5ICovCiAJc3NmZGMtPmhlYWRzID0gMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvY2Rldi5jIGIvZHJpdmVycy9tdGQvdWJpL2NkZXYuYwppbmRleCAwM2M3NTliLi5iMzBhMGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvY2Rldi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9jZGV2LmMKQEAgLTEwNCwxMiArMTA0LDkgQEAKIAlzdHJ1Y3QgdWJpX3ZvbHVtZV9kZXNjICpkZXNjOwogCWludCB2b2xfaWQgPSBpbWlub3IoaW5vZGUpIC0gMSwgbW9kZSwgdWJpX251bTsKIAotCWxvY2tfa2VybmVsKCk7CiAJdWJpX251bSA9IHViaV9tYWpvcjJudW0oaW1ham9yKGlub2RlKSk7Ci0JaWYgKHViaV9udW0gPCAwKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwlpZiAodWJpX251bSA8IDApCiAJCXJldHVybiB1YmlfbnVtOwotCX0KIAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJbW9kZSA9IFVCSV9SRUFEV1JJVEU7CkBAIC0xMTksNyArMTE2LDYgQEAKIAlkYmdfZ2VuKCJvcGVuIHZvbHVtZSAlZCwgbW9kZSAlZCIsIHZvbF9pZCwgbW9kZSk7CiAKIAlkZXNjID0gdWJpX29wZW5fdm9sdW1lKHViaV9udW0sIHZvbF9pZCwgbW9kZSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCWlmIChJU19FUlIoZGVzYykpCiAJCXJldHVybiBQVFJfRVJSKGRlc2MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCA5NjdiYjQ0Li40ZjJkYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTM4Nyw3ICszODcsNyBAQAogCQlwbnVtLCB2b2xfaWQsIGxudW0sIGVjLCBzcW51bSwgYml0ZmxpcHMpOwogCiAJc3YgPSBhZGRfdm9sdW1lKHNpLCB2b2xfaWQsIHBudW0sIHZpZF9oZHIpOwotCWlmIChJU19FUlIoc3YpIDwgMCkKKwlpZiAoSVNfRVJSKHN2KSkKIAkJcmV0dXJuIFBUUl9FUlIoc3YpOwogCiAJaWYgKHNpLT5tYXhfc3FudW0gPCBzcW51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMgYi9kcml2ZXJzL210ZC91YmkvdnRibC5jCmluZGV4IDIxN2QwZTEuLjMzM2M4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYwpAQCAtMjQ0LDggKzI0NCw4IEBACiAJCX0KIAogCQlpZiAocmVzZXJ2ZWRfcGVicyA+IHViaS0+Z29vZF9wZWJfY291bnQpIHsKLQkJCWRiZ19lcnIoInRvbyBsYXJnZSByZXNlcnZlZF9wZWJzLCBnb29kIFBFQnMgJWQiLAotCQkJCXViaS0+Z29vZF9wZWJfY291bnQpOworCQkJZGJnX2VycigidG9vIGxhcmdlIHJlc2VydmVkX3BlYnMgJWQsIGdvb2QgUEVCcyAlZCIsCisJCQkJcmVzZXJ2ZWRfcGVicywgdWJpLT5nb29kX3BlYl9jb3VudCk7CiAJCQllcnIgPSA5OwogCQkJZ290byBiYWQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IDQ5MWVlMTYuLjliYTI5NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtOTAsNyArOTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vpc2EuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgkJCS8qIEZvciBOUl9JUlFTIG9ubHkuICovCisjaW5jbHVkZSA8YXNtL2lycS5oPgkJCS8qIEZvciBucl9pcnFzIG9ubHkuICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTIyMSw3ICsxMjIxLDcgQEAKIAlpZiAocHJpbnRfaW5mbykKIAkJcHJpbnRrKCIsIElSUSAlZFxuIiwgZGV2LT5pcnEpOwogCS8qIFRlbGwgdGhlbSBhYm91dCBhbiBpbnZhbGlkIElSUS4gKi8KLQlpZiAoZGV2LT5pcnEgPD0gMCB8fCBkZXYtPmlycSA+PSBOUl9JUlFTKQorCWlmIChkZXYtPmlycSA8PSAwIHx8IGRldi0+aXJxID49IG5yX2lycXMpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAqKiogV2FybmluZzogSVJRICVkIGlzIHVubGlrZWx5IHRvIHdvcmshICoqKlxuIiwKIAkJCSAgIGRldi0+aXJxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCA4NWZhNDBhLi45YmExZjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtMTgzNiwxMCArMTgzNiw5IEBACiAKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUkVBTFRFSyAmJgogCSAgICBwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzkgJiYgcGRldi0+cmV2aXNpb24gPCAweDIwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSAgICJUaGlzIChpZCAlMDR4OiUwNHggcmV2ICUwMngpIGlzIG5vdCBhbiA4MTM5QysgY29tcGF0aWJsZSBjaGlwXG4iLAorCQlkZXZfaW5mbygmcGRldi0+ZGV2LAorCQkJICAgIlRoaXMgKGlkICUwNHg6JTA0eCByZXYgJTAyeCkgaXMgbm90IGFuIDgxMzlDKyBjb21wYXRpYmxlIGNoaXAsIHVzZSA4MTM5dG9vXG4iLAogCQkgICAgICAgICAgIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCBwZGV2LT5yZXZpc2lvbik7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlRyeSB0aGUgXCI4MTM5dG9vXCIgZHJpdmVyIGluc3RlYWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggMGRhZjhjMS4uNjNmOTA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtOTQ2LDEwICs5NDYsOSBAQAogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9SRUFMVEVLICYmCiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSAmJiBwZGV2LT5yZXZpc2lvbiA+PSAweDIwKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsCi0JCQkgICAiVGhpcyAoaWQgJTA0eDolMDR4IHJldiAlMDJ4KSBpcyBhbiBlbmhhbmNlZCA4MTM5QysgY2hpcFxuIiwKKwkJCSAgICJUaGlzIChpZCAlMDR4OiUwNHggcmV2ICUwMngpIGlzIGFuIGVuaGFuY2VkIDgxMzlDKyBjaGlwLCB1c2UgODEzOWNwXG4iLAogCQkgICAgICAgCSAgIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCBwZGV2LT5yZXZpc2lvbik7Ci0JCWRldl9pbmZvKCZwZGV2LT5kZXYsCi0JCQkgICAiVXNlIHRoZSBcIjgxMzljcFwiIGRyaXZlciBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUkVBTFRFSyAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggMWQ4YWYzMy4uZjc0OWI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC00NjQsNiArNDY0LDEyIEBACiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBvbmJvYXJkIGNhcmQgb2YgTUlQUyBNYWdudW0gNDAwMCwKIAkgIEFjZXIgUElDQSwgT2xpdmV0dGkgTTcwMC0xMCBhbmQgYSBmZXcgb3RoZXIgaWRlbnRpY2FsIE9FTSBzeXN0ZW1zLgogCitjb25maWcgWFRFTlNBX1hUMjAwMF9TT05JQworCXRyaXN0YXRlICJYdGVuc2EgWFQyMDAwIG9uYm9hcmQgU09OSUMgRXRoZXJuZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFhURU5TQV9QTEFURk9STV9YVDIwMDAKKwloZWxwCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBvbmJvYXJkIGNhcmQgb2YgdGhlIFh0ZW5zYSBYVDIwMDAgYm9hcmQuCisKIGNvbmZpZyBNSVBTX0FVMVgwMF9FTkVUCiAJYm9vbCAiTUlQUyBBVTEwMDAgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19BVTFYMDAKQEAgLTg4OCw3ICs4OTQsNyBAQAogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBNSUkKIAlkZXBlbmRzIG9uIEFSTSB8fCBSRURXT09EXzUgfHwgUkVEV09PRF82IHx8IE0zMlIgfHwgU1VQRVJIIHx8IFwKLQkJU09DX0FVMVgwMCB8fCBCTEFDS0ZJTiB8fCBNTjEwMzAwCisJCU1JUFMgfHwgQkxBQ0tGSU4gfHwgTU4xMDMwMAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFNNQydzIDkxeCBzZXJpZXMgb2YgRXRoZXJuZXQgY2hpcHNldHMsCiAJICBpbmNsdWRpbmcgdGhlIFNNQzkxQzk0IGFuZCB0aGUgU01DOTFDMTExLiBTYXkgWSBpZiB5b3Ugd2FudCBpdApAQCAtOTYwLDcgKzk2Niw3IEBACiAJdHJpc3RhdGUgIlNNU0MgTEFOOTExWzU2NzhdIHN1cHBvcnQiCiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IE1JSQotCWRlcGVuZHMgb24gQVJDSF9QWEEgfHwgU1VQRVJICisJZGVwZW5kcyBvbiBBUk0gfHwgU1VQRVJICiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgU01TQydzIExBTjkxMXggc2VyaWVzIG9mIEV0aGVybmV0IGNoaXBzZXRzCiAJICBpbmNsdWRpbmcgdGhlIG5ldyBMQU45MTE1LCBMQU45MTE2LCBMQU45MTE3LCBhbmQgTEFOOTExOC4KQEAgLTIwMDMsNiArMjAwOSwxMSBAQAogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBJR0JfRENBCisJYm9vbCAiRW5hYmxlIERDQSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIElHQiAmJiBEQ0EgJiYgIShJR0I9eSAmJiBEQ0E9bSkKKwogc291cmNlICJkcml2ZXJzL25ldC9peHAyMDAwL0tjb25maWciCiAKIGNvbmZpZyBNWVJJX1NCVVMKQEAgLTI0MTAsNyArMjQyMSw2IEBACiAJdHJpc3RhdGUgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvCkBAIC0yNDI2LDYgKzI0MzYsMTEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGl4Z2JlLgogCitjb25maWcgSVhHQkVfRENBCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gSVhHQkUgJiYgRENBICYmICEoSVhHQkU9eSAmJiBEQ0E9bSkKKwogY29uZmlnIElYR0IKIAl0cmlzdGF0ZSAiSW50ZWwoUikgUFJPLzEwR2JFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTI0NjIsNyArMjQ3Nyw2IEBACiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTXlyaWNvbSBNeXJpLTEwRyBEdWFsIFByb3RvY29sIGludGVyZmFjZSBpbgogCSAgRXRoZXJuZXQgbW9kZS4gSWYgdGhlIGVlcHJvbSBvbiB5b3VyIGJvYXJkIGlzIG5vdCByZWNlbnQgZW5vdWdoLApAQCAtMjQ3NCw2ICsyNDg4LDExIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBteXJpMTBnZS4KIAorY29uZmlnIE1ZUkkxMEdFX0RDQQorCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1ZUkkxMEdFICYmIERDQSAmJiAhKE1ZUkkxMEdFPXkgJiYgRENBPW0pCisKIGNvbmZpZyBORVRYRU5fTklDCiAJdHJpc3RhdGUgIk5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IEV0aGVybmV0IE5JQyIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtMjQ5Niw2ICsyNTE1LDE1IEBACiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgb24tY2hpcCAxLzEwR2JpdCBFdGhlcm5ldCBjb250cm9sbGVyIG9uCiAJICBQQSBTZW1pJ3MgUFdSZmljaWVudCBsaW5lIG9mIGNoaXBzLgogCitjb25maWcgTUxYNF9FTgorCXRyaXN0YXRlICJNZWxsYW5veCBUZWNobm9sb2dpZXMgMTBHYml0IEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAorCXNlbGVjdCBNTFg0X0NPUkUKKwlzZWxlY3QgSU5FVF9MUk8KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNZWxsYW5veCBUZWNobm9sb2dpZXMgQ29ubmVjdFggRXRoZXJuZXQKKwkgIGRldmljZXMuCisKIGNvbmZpZyBNTFg0X0NPUkUKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGZhMjUxMGIuLmYxOWFjZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0yMjcsNiArMjI3LDggQEAKIG9iai0kKENPTkZJR19NTFg0X0NPUkUpICs9IG1seDQvCiBvYmotJChDT05GSUdfRU5DMjhKNjApICs9IGVuYzI4ajYwLm8KIAorb2JqLSQoQ09ORklHX1hURU5TQV9YVDIwMDBfU09OSUMpICs9IHh0c29uaWMubworCiBvYmotJChDT05GSUdfTUFDQikgKz0gbWFjYi5vCiAKIG9iai0kKENPTkZJR19BUk0pICs9IGFybS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwppbmRleCA0MjA3ZDZlLi45YTMxNGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMKKysrIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCkBAIC04MzgsMTIgKzgzOCwxMiBAQAogCiAJLyogZmluZCB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzICovCiAKLQlkZXYtPmlycSAgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChkZXYtPmlycSA8IDApIHsKKwlyZXQgID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJUlEgc3BlY2lmaWVkXG4iKTsKLQkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGV4aXRfbWVtOwogCX0KKwlkZXYtPmlycSA9IHJldDsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA4ZTJiZTI0Li44MzI3MzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTEzNDEsMTggKzEzNDEsMjQgQEAKIAlpbnQgaTsKIAogCWZlYXR1cmVzICY9IH4oTkVUSUZfRl9BTExfQ1NVTSB8IEJPTkRfVkxBTl9GRUFUVVJFUyk7Ci0JZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkgICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfTk9fQ1NVTTsKKwlmZWF0dXJlcyB8PSAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfTk9fQ1NVTTsKKworCWlmICghYm9uZC0+Zmlyc3Rfc2xhdmUpCisJCWdvdG8gZG9uZTsKKworCWZlYXR1cmVzICY9IH5ORVRJRl9GX09ORV9GT1JfQUxMOwogCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewotCQlmZWF0dXJlcyA9IG5ldGRldl9jb21wdXRlX2ZlYXR1cmVzKGZlYXR1cmVzLAotCQkJCQkJICAgc2xhdmUtPmRldi0+ZmVhdHVyZXMpOworCQlmZWF0dXJlcyA9IG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXMoZmVhdHVyZXMsCisJCQkJCQkgICAgIHNsYXZlLT5kZXYtPmZlYXR1cmVzLAorCQkJCQkJICAgICBORVRJRl9GX09ORV9GT1JfQUxMKTsKIAkJaWYgKHNsYXZlLT5kZXYtPmhhcmRfaGVhZGVyX2xlbiA+IG1heF9oYXJkX2hlYWRlcl9sZW4pCiAJCQltYXhfaGFyZF9oZWFkZXJfbGVuID0gc2xhdmUtPmRldi0+aGFyZF9oZWFkZXJfbGVuOwogCX0KIAorZG9uZToKIAlmZWF0dXJlcyB8PSAoYm9uZF9kZXYtPmZlYXR1cmVzICYgQk9ORF9WTEFOX0ZFQVRVUkVTKTsKLQlib25kX2Rldi0+ZmVhdHVyZXMgPSBmZWF0dXJlczsKKwlib25kX2Rldi0+ZmVhdHVyZXMgPSBuZXRkZXZfZml4X2ZlYXR1cmVzKGZlYXR1cmVzLCBOVUxMKTsKIAlib25kX2Rldi0+aGFyZF9oZWFkZXJfbGVuID0gbWF4X2hhcmRfaGVhZGVyX2xlbjsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmMgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwppbmRleCA0NDA3YWM5Li5mZjE2MTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwpAQCAtNDMxLDYgKzQzMSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGwydF9jYXBhY2l0eTsgKytpKSB7CiAJCWQtPmwydGFiW2ldLmlkeCA9IGk7CiAJCWQtPmwydGFiW2ldLnN0YXRlID0gTDJUX1NUQVRFX1VOVVNFRDsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KCZkLT5sMnRhYltpXS5hcnBxKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmQtPmwydGFiW2ldLmxvY2spOwogCQlhdG9taWNfc2V0KCZkLT5sMnRhYltpXS5yZWZjbnQsIDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggZjQyYzIzZi4uNWE5MDgzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTQ3LDE1ICs0Nyw2IEBACiAjZGVmaW5lIENBUkROQU1FCSJkbTkwMDAiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjMxIgogCi0jaWZkZWYgQ09ORklHX0JMQUNLRklOCi0jZGVmaW5lIHJlYWRzYglpbnNiCi0jZGVmaW5lIHJlYWRzdwlpbnN3Ci0jZGVmaW5lIHJlYWRzbAlpbnNsCi0jZGVmaW5lIHdyaXRlc2IJb3V0c2IKLSNkZWZpbmUgd3JpdGVzdwlvdXRzdwotI2RlZmluZSB3cml0ZXNsCW91dHNsCi0jZW5kaWYKLQogLyoKICAqIFRyYW5zbWl0IHRpbWVvdXQsIGRlZmF1bHQgNSBzZWNvbmRzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCmluZGV4IDU1MjQyNzEuLjgyZGQxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJImVoZWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwOTMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwOTQiCiAKIC8qIGVIRUEgY2FwYWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBETFBBUl9QT1JUX0FERF9SRU0gMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKaW5kZXggYjcwYzUzMS4uNDIyZmNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCkBAIC0yODYzLDcgKzI4NjMsNyBAQAogCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXI7CiAKIAltdXRleF9sb2NrKCZkbHBhcl9tZW1fbG9jayk7Ci0JZWhlYV9pbmZvKCJMUEFSIG1lbW9yeSBlbmxhcmdlZCAtIHJlLWluaXRpYWxpemluZyBkcml2ZXIiKTsKKwllaGVhX2luZm8oIkxQQVIgbWVtb3J5IGNoYW5nZWQgLSByZS1pbml0aWFsaXppbmcgZHJpdmVyIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpCiAJCWlmIChhZGFwdGVyLT5hY3RpdmVfcG9ydHMpIHsKQEAgLTI5MDAsMTMgKzI5MDAsNiBAQAogCQkJfQogCQl9CiAKLQllaGVhX2Rlc3Ryb3lfYnVzbWFwKCk7Ci0JcmV0ID0gZWhlYV9jcmVhdGVfYnVzbWFwKCk7Ci0JaWYgKHJldCkgewotCQllaGVhX2Vycm9yKCJjcmVhdGluZyBlaGVhIGJ1c21hcCBmYWlsZWQiKTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJY2xlYXJfYml0KF9fRUhFQV9TVE9QX1hGRVIsICZlaGVhX2RyaXZlcl9mbGFncyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpCkBAIC0zNTE5LDkgKzM1MTIsMjEgQEAKIHN0YXRpYyBpbnQgZWhlYV9tZW1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IG1lbW9yeV9ub3RpZnkgKmFyZyA9IGRhdGE7CiAJc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIE1FTV9PRkZMSU5FOgotCQllaGVhX2luZm8oIm1lbW9yeSBoYXMgYmVlbiByZW1vdmVkIik7CisJY2FzZSBNRU1fQ0FOQ0VMX09GRkxJTkU6CisJCWVoZWFfaW5mbygibWVtb3J5IG9mZmxpbmluZyBjYW5jZWxlZCIpOworCQkvKiBSZWFkZCBjYW5jZWxlZCBtZW1vcnkgYmxvY2sgKi8KKwljYXNlIE1FTV9PTkxJTkU6CisJCWVoZWFfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9ubGluZSIpOworCQlpZiAoZWhlYV9hZGRfc2VjdF9ibWFwKGFyZy0+c3RhcnRfcGZuLCBhcmctPm5yX3BhZ2VzKSkKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQllaGVhX3JlcmVnX21ycyhOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKKwkJZWhlYV9pbmZvKCJtZW1vcnkgaXMgZ29pbmcgb2ZmbGluZSIpOworCQlpZiAoZWhlYV9yZW1fc2VjdF9ibWFwKGFyZy0+c3RhcnRfcGZuLCBhcmctPm5yX3BhZ2VzKSkKKwkJCXJldHVybiBOT1RJRllfQkFEOwogCQllaGVhX3JlcmVnX21ycyhOVUxMKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYwppbmRleCBkYjhhOTI1Li45YjYxZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCkBAIC01NjcsNyArNTY3LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGVoZWFfaW5pdF90b3BfYm1hcChzdHJ1Y3QgZWhlYV90b3BfYm1hcCAqZWhlYV90b3BfYm1hcCwKIAkJCQkgICAgIGludCBkaXIpCiB7Ci0JaWYoIWVoZWFfdG9wX2JtYXAtPmRpcltkaXJdKSB7CisJaWYgKCFlaGVhX3RvcF9ibWFwLT5kaXJbZGlyXSkgewogCQllaGVhX3RvcF9ibWFwLT5kaXJbZGlyXSA9CiAJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZWhlYV9kaXJfYm1hcCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWVoZWFfdG9wX2JtYXAtPmRpcltkaXJdKQpAQCAtNTc4LDcgKzU3OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGVoZWFfaW5pdF9ibWFwKHN0cnVjdCBlaGVhX2JtYXAgKmVoZWFfYm1hcCwgaW50IHRvcCwgaW50IGRpcikKIHsKLQlpZighZWhlYV9ibWFwLT50b3BbdG9wXSkgeworCWlmICghZWhlYV9ibWFwLT50b3BbdG9wXSkgewogCQllaGVhX2JtYXAtPnRvcFt0b3BdID0KIAkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlaGVhX3RvcF9ibWFwKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZWhlYV9ibWFwLT50b3BbdG9wXSkKQEAgLTU4Nyw1MyArNTg3LDEyNCBAQAogCXJldHVybiBlaGVhX2luaXRfdG9wX2JtYXAoZWhlYV9ibWFwLT50b3BbdG9wXSwgZGlyKTsKIH0KIAotc3RhdGljIGludCBlaGVhX2NyZWF0ZV9idXNtYXBfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBwZm4sCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZykKK3N0YXRpYyBERUZJTkVfTVVURVgoZWhlYV9idXNtYXBfbXV0ZXgpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZWhlYV9tcl9sZW47CisKKyNkZWZpbmUgRUhFQV9CVVNNQVBfQUREX1NFQ1QgMQorI2RlZmluZSBFSEVBX0JVU01BUF9SRU1fU0VDVCAwCisKK3N0YXRpYyB2b2lkIGVoZWFfcmVidWlsZF9idXNtYXAodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGksIG1yX2xlbiwgc3RhcnRfc2VjdGlvbiwgZW5kX3NlY3Rpb247Ci0Jc3RhcnRfc2VjdGlvbiA9IChwZm4gKiBQQUdFX1NJWkUpIC8gRUhFQV9TRUNUU0laRTsKLQllbmRfc2VjdGlvbiA9IHN0YXJ0X3NlY3Rpb24gKyAoKG5yX3BhZ2VzICogUEFHRV9TSVpFKSAvIEVIRUFfU0VDVFNJWkUpOwotCW1yX2xlbiA9ICoodW5zaWduZWQgbG9uZyAqKWFyZzsKKwl1NjQgdmFkZHIgPSBFSEVBX0JVU01BUF9TVEFSVDsKKwlpbnQgdG9wLCBkaXIsIGlkeDsKIAotCWlmICghZWhlYV9ibWFwKQorCWZvciAodG9wID0gMDsgdG9wIDwgRUhFQV9NQVBfRU5UUklFUzsgdG9wKyspIHsKKwkJc3RydWN0IGVoZWFfdG9wX2JtYXAgKmVoZWFfdG9wOworCQlpbnQgdmFsaWRfZGlyX2VudHJpZXMgPSAwOworCisJCWlmICghZWhlYV9ibWFwLT50b3BbdG9wXSkKKwkJCWNvbnRpbnVlOworCQllaGVhX3RvcCA9IGVoZWFfYm1hcC0+dG9wW3RvcF07CisJCWZvciAoZGlyID0gMDsgZGlyIDwgRUhFQV9NQVBfRU5UUklFUzsgZGlyKyspIHsKKwkJCXN0cnVjdCBlaGVhX2Rpcl9ibWFwICplaGVhX2RpcjsKKwkJCWludCB2YWxpZF9lbnRyaWVzID0gMDsKKworCQkJaWYgKCFlaGVhX3RvcC0+ZGlyW2Rpcl0pCisJCQkJY29udGludWU7CisJCQl2YWxpZF9kaXJfZW50cmllcysrOworCQkJZWhlYV9kaXIgPSBlaGVhX3RvcC0+ZGlyW2Rpcl07CisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEVIRUFfTUFQX0VOVFJJRVM7IGlkeCsrKSB7CisJCQkJaWYgKCFlaGVhX2Rpci0+ZW50W2lkeF0pCisJCQkJCWNvbnRpbnVlOworCQkJCXZhbGlkX2VudHJpZXMrKzsKKwkJCQllaGVhX2Rpci0+ZW50W2lkeF0gPSB2YWRkcjsKKwkJCQl2YWRkciArPSBFSEVBX1NFQ1RTSVpFOworCQkJfQorCQkJaWYgKCF2YWxpZF9lbnRyaWVzKSB7CisJCQkJZWhlYV90b3AtPmRpcltkaXJdID0gTlVMTDsKKwkJCQlrZnJlZShlaGVhX2Rpcik7CisJCQl9CisJCX0KKwkJaWYgKCF2YWxpZF9kaXJfZW50cmllcykgeworCQkJZWhlYV9ibWFwLT50b3BbdG9wXSA9IE5VTEw7CisJCQlrZnJlZShlaGVhX3RvcCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZWhlYV91cGRhdGVfYnVzbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHBnbnVtLCBpbnQgYWRkKQoreworCXVuc2lnbmVkIGxvbmcgaSwgc3RhcnRfc2VjdGlvbiwgZW5kX3NlY3Rpb247CisKKwlpZiAoIWVoZWFfYm1hcCkgewogCQllaGVhX2JtYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZWhlYV9ibWFwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlaGVhX2JtYXApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gc3RhcnRfc2VjdGlvbjsgaSA8IGVuZF9zZWN0aW9uOyBpKyspIHsKLQkJaW50IHJldDsKLQkJaW50IHRvcCwgZGlyLCBpZHg7Ci0JCXU2NCB2YWRkcjsKLQotCQl0b3AgPSBlaGVhX2NhbGNfaW5kZXgoaSwgRUhFQV9UT1BfSU5ERVhfU0hJRlQpOwotCQlkaXIgPSBlaGVhX2NhbGNfaW5kZXgoaSwgRUhFQV9ESVJfSU5ERVhfU0hJRlQpOwotCi0JCXJldCA9IGVoZWFfaW5pdF9ibWFwKGVoZWFfYm1hcCwgdG9wLCBkaXIpOwotCQlpZihyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCWlkeCA9IGkgJiBFSEVBX0lOREVYX01BU0s7Ci0JCXZhZGRyID0gRUhFQV9CVVNNQVBfU1RBUlQgKyBtcl9sZW4gKyBpICogRUhFQV9TRUNUU0laRTsKLQotCQllaGVhX2JtYXAtPnRvcFt0b3BdLT5kaXJbZGlyXS0+ZW50W2lkeF0gPSB2YWRkcjsKKwkJaWYgKCFlaGVhX2JtYXApCisJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltcl9sZW4gKz0gbnJfcGFnZXMgKiBQQUdFX1NJWkU7Ci0JKih1bnNpZ25lZCBsb25nICopYXJnID0gbXJfbGVuOworCXN0YXJ0X3NlY3Rpb24gPSAocGZuICogUEFHRV9TSVpFKSAvIEVIRUFfU0VDVFNJWkU7CisJZW5kX3NlY3Rpb24gPSBzdGFydF9zZWN0aW9uICsgKChwZ251bSAqIFBBR0VfU0laRSkgLyBFSEVBX1NFQ1RTSVpFKTsKKwkvKiBNYXJrIGVudHJpZXMgYXMgdmFsaWQgb3IgaW52YWxpZCBvbmx5OyBhZGRyZXNzIGlzIGFzc2lnbmVkIGxhdGVyICovCisJZm9yIChpID0gc3RhcnRfc2VjdGlvbjsgaSA8IGVuZF9zZWN0aW9uOyBpKyspIHsKKwkJdTY0IGZsYWc7CisJCWludCB0b3AgPSBlaGVhX2NhbGNfaW5kZXgoaSwgRUhFQV9UT1BfSU5ERVhfU0hJRlQpOworCQlpbnQgZGlyID0gZWhlYV9jYWxjX2luZGV4KGksIEVIRUFfRElSX0lOREVYX1NISUZUKTsKKwkJaW50IGlkeCA9IGkgJiBFSEVBX0lOREVYX01BU0s7CisJCQorCQlpZiAoYWRkKSB7CisJCQlpbnQgcmV0ID0gZWhlYV9pbml0X2JtYXAoZWhlYV9ibWFwLCB0b3AsIGRpcik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlmbGFnID0gMTsgLyogdmFsaWQgKi8KKwkJCWVoZWFfbXJfbGVuICs9IEVIRUFfU0VDVFNJWkU7CisJCX0gZWxzZSB7CisJCQlpZiAoIWVoZWFfYm1hcC0+dG9wW3RvcF0pCisJCQkJY29udGludWU7CisJCQlpZiAoIWVoZWFfYm1hcC0+dG9wW3RvcF0tPmRpcltkaXJdKQorCQkJCWNvbnRpbnVlOworCQkJZmxhZyA9IDA7IC8qIGludmFsaWQgKi8KKwkJCWVoZWFfbXJfbGVuIC09IEVIRUFfU0VDVFNJWkU7CisJCX0KIAorCQllaGVhX2JtYXAtPnRvcFt0b3BdLT5kaXJbZGlyXS0+ZW50W2lkeF0gPSBmbGFnOworCX0KKwllaGVhX3JlYnVpbGRfYnVzbWFwKCk7IC8qIEFzc2lnbiBjb250aWd1b3VzIGFkZHJlc3NlcyBmb3IgbXIgKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZWhlYV9tcl9sZW47CitpbnQgZWhlYV9hZGRfc2VjdF9ibWFwKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCWludCByZXQ7CiAKLXN0YXRpYyBERUZJTkVfTVVURVgoZWhlYV9idXNtYXBfbXV0ZXgpOworCW11dGV4X2xvY2soJmVoZWFfYnVzbWFwX211dGV4KTsKKwlyZXQgPSBlaGVhX3VwZGF0ZV9idXNtYXAocGZuLCBucl9wYWdlcywgRUhFQV9CVVNNQVBfQUREX1NFQ1QpOworCW11dGV4X3VubG9jaygmZWhlYV9idXNtYXBfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBlaGVhX3JlbV9zZWN0X2JtYXAodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmVoZWFfYnVzbWFwX211dGV4KTsKKwlyZXQgPSBlaGVhX3VwZGF0ZV9idXNtYXAocGZuLCBucl9wYWdlcywgRUhFQV9CVVNNQVBfUkVNX1NFQ1QpOworCW11dGV4X3VubG9jaygmZWhlYV9idXNtYXBfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9jcmVhdGVfYnVzbWFwX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB2b2lkICphcmcpCit7CisJcmV0dXJuIGVoZWFfdXBkYXRlX2J1c21hcChwZm4sIG5yX3BhZ2VzLCBFSEVBX0JVU01BUF9BRERfU0VDVCk7Cit9CiAKIGludCBlaGVhX2NyZWF0ZV9idXNtYXAodm9pZCkKIHsKIAlpbnQgcmV0OworCiAJbXV0ZXhfbG9jaygmZWhlYV9idXNtYXBfbXV0ZXgpOwogCWVoZWFfbXJfbGVuID0gMDsKLQlyZXQgPSB3YWxrX21lbW9yeV9yZXNvdXJjZSgwLCAxVUxMIDw8IE1BWF9QSFlTTUVNX0JJVFMsICZlaGVhX21yX2xlbiwKKwlyZXQgPSB3YWxrX21lbW9yeV9yZXNvdXJjZSgwLCAxVUxMIDw8IE1BWF9QSFlTTUVNX0JJVFMsIE5VTEwsCiAJCQkJICAgZWhlYV9jcmVhdGVfYnVzbWFwX2NhbGxiYWNrKTsKIAltdXRleF91bmxvY2soJmVoZWFfYnVzbWFwX211dGV4KTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oCmluZGV4IDBiYjZmOTIuLjFlNThkYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmgKQEAgLTM3OCw2ICszNzgsOCBAQAogCiB2b2lkIGVoZWFfZXJyb3JfZGF0YShzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLCB1NjQgcmVzX2hhbmRsZSk7CiAKK2ludCBlaGVhX2FkZF9zZWN0X2JtYXAodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOworaW50IGVoZWFfcmVtX3NlY3RfYm1hcCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiBpbnQgZWhlYV9jcmVhdGVfYnVzbWFwKHZvaWQpOwogdm9pZCBlaGVhX2Rlc3Ryb3lfYnVzbWFwKHZvaWQpOwogdTY0IGVoZWFfbWFwX3ZhZGRyKHZvaWQgKmNhZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCmluZGV4IDRlNGY2ODMuLmFlYzNiOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwpAQCAtNDAxLDYgKzQwMSwyMSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZmVjX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtcGM1Mnh4X2ZlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRpc2FibGVfaXJxKHByaXYtPnRfaXJxKTsKKwltcGM1Mnh4X2ZlY190eF9pbnRlcnJ1cHQocHJpdi0+dF9pcnEsIGRldik7CisJZW5hYmxlX2lycShwcml2LT50X2lycSk7CisJZGlzYWJsZV9pcnEocHJpdi0+cl9pcnEpOworCW1wYzUyeHhfZmVjX3J4X2ludGVycnVwdChwcml2LT5yX2lycSwgZGV2KTsKKwllbmFibGVfaXJxKHByaXYtPnJfaXJxKTsKK30KKyNlbmRpZgorCisKIC8qIFRoaXMgaGFuZGxlcyBCZXN0Q29tbSB0cmFuc21pdCB0YXNrIGludGVycnVwdHMKICAqLwogc3RhdGljIGlycXJldHVybl90IG1wYzUyeHhfZmVjX3R4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC05MjYsNiArOTQxLDkgQEAKIAluZGV2LT50eF90aW1lb3V0CT0gbXBjNTJ4eF9mZWNfdHhfdGltZW91dDsKIAluZGV2LT53YXRjaGRvZ190aW1lbwk9IEZFQ19XQVRDSERPR19USU1FT1VUOwogCW5kZXYtPmJhc2VfYWRkcgkJPSBtZW0uc3RhcnQ7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwluZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBtcGM1Mnh4X2ZlY19wb2xsX2NvbnRyb2xsZXI7CisjZW5kaWYKIAogCXByaXYtPnRfaXJxID0gcHJpdi0+cl9pcnEgPSBuZGV2LT5pcnEgPSBOT19JUlE7IC8qIElSUSBhcmUgZnJlZSBmb3Igbm93ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHhfcGh5LmMKaW5kZXggMDhlMThiYy4uNDVkZDliZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHhfcGh5LmMKQEAgLTIsNiArMiw3IEBACiAgKiBEcml2ZXIgZm9yIHRoZSBNUEM1MjAwIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciAtIE1ESU8gYnVzIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyAgRG9tZW4gUHVuY2VyLCBUZWxhcmdvLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIFdvbGZyYW0gU2FuZywgUGVuZ3V0cm9uaXgKICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKQEAgLTIxLDU4ICsyMiw0NSBAQAogCXN0cnVjdCBtcGM1Mnh4X2ZlYyBfX2lvbWVtICpyZWdzOwogfTsKIAotc3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZykKK3N0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb190cmFuc2ZlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLAorCQlpbnQgcmVnLCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IG1wYzUyeHhfZmVjX21kaW9fcHJpdiAqcHJpdiA9IGJ1cy0+cHJpdjsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWMgX19pb21lbSAqZmVjOwogCWludCB0cmllcyA9IDEwMDsKLQl1MzIgcmVxdWVzdCA9IEZFQ19NSUlfUkVBRF9GUkFNRTsKKworCXZhbHVlIHw9IChwaHlfaWQgPDwgRkVDX01JSV9EQVRBX1BBX1NISUZUKSAmIEZFQ19NSUlfREFUQV9QQV9NU0s7CisJdmFsdWUgfD0gKHJlZyA8PCBGRUNfTUlJX0RBVEFfUkFfU0hJRlQpICYgRkVDX01JSV9EQVRBX1JBX01TSzsKIAogCWZlYyA9IHByaXYtPnJlZ3M7CiAJb3V0X2JlMzIoJmZlYy0+aWV2ZW50LCBGRUNfSUVWRU5UX01JSSk7Ci0KLQlyZXF1ZXN0IHw9IChwaHlfaWQgPDwgRkVDX01JSV9EQVRBX1BBX1NISUZUKSAmIEZFQ19NSUlfREFUQV9QQV9NU0s7Ci0JcmVxdWVzdCB8PSAocmVnIDw8IEZFQ19NSUlfREFUQV9SQV9TSElGVCkgJiBGRUNfTUlJX0RBVEFfUkFfTVNLOwotCi0Jb3V0X2JlMzIoJnByaXYtPnJlZ3MtPm1paV9kYXRhLCByZXF1ZXN0KTsKKwlvdXRfYmUzMigmcHJpdi0+cmVncy0+bWlpX2RhdGEsIHZhbHVlKTsKIAogCS8qIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgdGhpcyB0YWtlcyBhYm91dCAyMyB1cyBvbiBsaXRlNTIwMGIgKi8KIAl3aGlsZSAoIShpbl9iZTMyKCZmZWMtPmlldmVudCkgJiBGRUNfSUVWRU5UX01JSSkgJiYgLS10cmllcykKIAkJdWRlbGF5KDUpOwogCi0JaWYgKHRyaWVzID09IDApCisJaWYgKCF0cmllcykKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAKLQlyZXR1cm4gaW5fYmUzMigmcHJpdi0+cmVncy0+bWlpX2RhdGEpICYgRkVDX01JSV9EQVRBX0RBVEFNU0s7CisJcmV0dXJuIHZhbHVlICYgRkVDX01JSV9EQVRBX09QX1JEID8KKwkJaW5fYmUzMigmcHJpdi0+cmVncy0+bWlpX2RhdGEpICYgRkVDX01JSV9EQVRBX0RBVEFNU0sgOiAwOwogfQogCi1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZywgdTE2IGRhdGEpCitzdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKQogewotCXN0cnVjdCBtcGM1Mnh4X2ZlY19tZGlvX3ByaXYgKnByaXYgPSBidXMtPnByaXY7Ci0Jc3RydWN0IG1wYzUyeHhfZmVjIF9faW9tZW0gKmZlYzsKLQl1MzIgdmFsdWUgPSBkYXRhOwotCWludCB0cmllcyA9IDEwMDsKLQotCWZlYyA9IHByaXYtPnJlZ3M7Ci0Jb3V0X2JlMzIoJmZlYy0+aWV2ZW50LCBGRUNfSUVWRU5UX01JSSk7Ci0KLQl2YWx1ZSB8PSBGRUNfTUlJX1dSSVRFX0ZSQU1FOwotCXZhbHVlIHw9IChwaHlfaWQgPDwgRkVDX01JSV9EQVRBX1BBX1NISUZUKSAmIEZFQ19NSUlfREFUQV9QQV9NU0s7Ci0JdmFsdWUgfD0gKHJlZyA8PCBGRUNfTUlJX0RBVEFfUkFfU0hJRlQpICYgRkVDX01JSV9EQVRBX1JBX01TSzsKLQotCW91dF9iZTMyKCZwcml2LT5yZWdzLT5taWlfZGF0YSwgdmFsdWUpOwotCi0JLyogd2FpdCBmb3IgcmVxdWVzdCB0byBmaW5pc2ggKi8KLQl3aGlsZSAoIShpbl9iZTMyKCZmZWMtPmlldmVudCkgJiBGRUNfSUVWRU5UX01JSSkgJiYgLS10cmllcykKLQkJdWRlbGF5KDUpOwotCi0JaWYgKHRyaWVzID09IDApCi0JCXJldHVybiAtRVRJTUVET1VUOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG1wYzUyeHhfZmVjX21kaW9fdHJhbnNmZXIoYnVzLCBwaHlfaWQsIHJlZywgRkVDX01JSV9SRUFEX0ZSQU1FKTsKIH0KIAotc3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3N0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnLAorCQl1MTYgZGF0YSkKK3sKKwlyZXR1cm4gbXBjNTJ4eF9mZWNfbWRpb190cmFuc2ZlcihidXMsIHBoeV9pZCwgcmVnLAorCQlkYXRhIHwgRkVDX01JSV9XUklURV9GUkFNRSk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZiwKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mLT5kZXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mLT5ub2RlOwpAQCAtMTMxLDcgKzExOSw4IEBACiAJZGV2X3NldF9kcnZkYXRhKGRldiwgYnVzKTsKIAogCS8qIHNldCBNSUkgc3BlZWQgKi8KLQlvdXRfYmUzMigmcHJpdi0+cmVncy0+bWlpX3NwZWVkLCAoKG1wYzUyeHhfZmluZF9pcGJfZnJlcShvZi0+bm9kZSkgPj4gMjApIC8gNSkgPDwgMSk7CisJb3V0X2JlMzIoJnByaXYtPnJlZ3MtPm1paV9zcGVlZCwKKwkJKChtcGM1Mnh4X2ZpbmRfaXBiX2ZyZXEob2YtPm5vZGUpID4+IDIwKSAvIDUpIDw8IDEpOwogCiAJLyogZW5hYmxlIE1JSSBpbnRlcnJ1cHQgKi8KIAlvdXRfYmUzMigmcHJpdi0+cmVncy0+aW1hc2ssIGluX2JlMzIoJnByaXYtPnJlZ3MtPmltYXNrKSB8IEZFQ19JTUFTS19NSUkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IGI1YmI3YWUuLjY0YjIwMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBOVUxMOwogCXN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKmVpbmZvOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKLQlpbnQgZXJyID0gMDsKKwlpbnQgZXJyID0gMCwgaXJxOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJZWluZm8gPSAoc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTE4NywxNSArMTg3LDI1IEBACiAKIAkvKiBmaWxsIG91dCBJUlEgZmllbGRzICovCiAJaWYgKGVpbmZvLT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIpIHsKLQkJcHJpdi0+aW50ZXJydXB0VHJhbnNtaXQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAidHgiKTsKLQkJcHJpdi0+aW50ZXJydXB0UmVjZWl2ZSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJyeCIpOwotCQlwcml2LT5pbnRlcnJ1cHRFcnJvciA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJlcnJvciIpOwotCQlpZiAocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQgPCAwIHx8IHByaXYtPmludGVycnVwdFJlY2VpdmUgPCAwIHx8IHByaXYtPmludGVycnVwdEVycm9yIDwgMCkKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInR4Iik7CisJCWlmIChpcnEgPCAwKQogCQkJZ290byByZWdzX2ZhaWw7CisJCXByaXYtPmludGVycnVwdFRyYW5zbWl0ID0gaXJxOworCisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJyeCIpOworCQlpZiAoaXJxIDwgMCkKKwkJCWdvdG8gcmVnc19mYWlsOworCQlwcml2LT5pbnRlcnJ1cHRSZWNlaXZlID0gaXJxOworCisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJlcnJvciIpOworCQlpZiAoaXJxIDwgMCkKKwkJCWdvdG8gcmVnc19mYWlsOworCQlwcml2LT5pbnRlcnJ1cHRFcnJvciA9IGlycTsKIAl9IGVsc2UgewotCQlwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JCWlmIChwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCA8IDApCisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJCWlmIChpcnEgPCAwKQogCQkJZ290byByZWdzX2ZhaWw7CisJCXByaXYtPmludGVycnVwdFRyYW5zbWl0ID0gaXJxOwogCX0KIAogCS8qIGdldCBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIG1lbW9yeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKaW5kZXggMTdhYzY5Ny4uYjZhODE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCkBAIC00MTYsMTAgKzQxNiwxMCBAQAogCWlmICghZGV2IHx8ICFiYykKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoIWRldi0+YmFzZV9hZGRyIHx8IGRldi0+YmFzZV9hZGRyID4gMHhmZmZmLVNFUjEyX0VYVEVOVCB8fAotCSAgICBkZXYtPmlycSA8IDIgfHwgZGV2LT5pcnEgPiBOUl9JUlFTKSB7CisJICAgIGRldi0+aXJxIDwgMiB8fCBkZXYtPmlycSA+IG5yX2lycXMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYmF5Y29tX3Nlcl9mZHg6IGludmFsaWQgcG9ydG51bWJlciAobWF4ICV1KSAiCiAJCQkJIm9yIGlycSAoMiA8PSBpcnEgPD0gJWQpXG4iLAotCQkJCTB4ZmZmZi1TRVIxMl9FWFRFTlQsIE5SX0lSUVMpOworCQkJCTB4ZmZmZi1TRVIxMl9FWFRFTlQsIG5yX2lycXMpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAlpZiAoYmMtPmJhdWQgPCAzMDAgfHwgYmMtPmJhdWQgPiA0ODAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCmluZGV4IDQ1YWU5ZDEuLmMxN2UzOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIkluaXQgWjg1MzAgZHJpdmVyOiAldSBjaGFubmVscywgSVJRIiwgTmNoaXBzKjIpOwogCQogCWZsYWc9IiAiOwotCWZvciAoayA9IDA7IGsgPCBOUl9JUlFTOyBrKyspCisJZm9yIChrID0gMDsgayA8IG5yX2lycXM7IGsrKykKIAkJaWYgKEl2ZWNba10udXNlZCkgCiAJCXsKIAkJCXByaW50aygiJXMlZCIsIGZsYWcsIGspOwpAQCAtMTcyOCw3ICsxNzI4LDcgQEAKIAogCQkJaWYgKGh3Y2ZnLmlycSA9PSAyKSBod2NmZy5pcnEgPSA5OwogCi0JCQlpZiAoaHdjZmcuaXJxIDwgMCB8fCBod2NmZy5pcnEgPj0gTlJfSVJRUykKKwkJCWlmIChod2NmZy5pcnEgPCAwIHx8IGh3Y2ZnLmlycSA+PSBucl9pcnFzKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCQogCQkJaWYgKCFJdmVjW2h3Y2ZnLmlycV0udXNlZCAmJiBod2NmZy5pcnEpCkBAIC0yMTQ4LDcgKzIxNDgsNyBAQAogCQl9CiAJCQogCS8qIFRvIHVubG9hZCB0aGUgcG9ydCBtdXN0IGJlIGNsb3NlZCBzbyBubyByZWFsIElSUSBwZW5kaW5nICovCi0JZm9yIChrPTA7IGsgPCBOUl9JUlFTIDsgaysrKQorCWZvciAoayA9IDA7IGsgPCBucl9pcnFzIDsgaysrKQogCQlpZiAoSXZlY1trXS51c2VkKSBmcmVlX2lycShrLCBOVUxMKTsKIAkJCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IGVmY2YyMWMuLjJlZTI2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTI2MDQsOCArMjYwNCwxNiBAQAogCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00NDBlcCIpIHx8CiAJCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxlbWFjLTQ0MGdyIikpCiAJCQlkZXYtPmZlYXR1cmVzIHw9IEVNQUNfRlRSXzQ0MEVQX1BIWV9DTEtfRklYOwotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00MDVleiIpKQorCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00MDVleiIpKSB7CisjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NPTlRST0wKIAkJCWRldi0+ZmVhdHVyZXMgfD0gRU1BQ19GVFJfTk9fRkxPV19DT05UUk9MXzQweDsKKyNlbHNlCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbG93IGNvbnRyb2wgbm90IGRpc2FibGVkIVxuIiwKKwkJCQkJbnAtPmZ1bGxfbmFtZSk7CisJCQlyZXR1cm4gLUVOWElPOworI2VuZGlmCisJCX0KKwogCX0KIAogCS8qIEZpeHVwIHNvbWUgZmVhdHVyZSBiaXRzIGJhc2VkIG9uIHRoZSBkZXZpY2UgdHJlZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYwppbmRleCAxODM5ZDNmLi5lY2Y5Nzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYwpAQCAtMjgwLDkgKzI4MCwxMSBAQAogCW1hbF9zY2hlZHVsZV9wb2xsKG1hbCk7CiAJc2V0X21hbF9kY3JuKG1hbCwgTUFMX1RYRU9CSVNSLCByKTsKIAorI2lmZGVmIENPTkZJR19QUENfRENSX05BVElWRQogCWlmIChtYWxfaGFzX2ZlYXR1cmUobWFsLCBNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVCkpCiAJCW10ZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQsCiAJCQkJKG1mZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQpIHwgSUNJTlRTVEFUX0lDVFgpKTsKKyNlbmRpZgogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjk4LDkgKzMwMCwxMSBAQAogCW1hbF9zY2hlZHVsZV9wb2xsKG1hbCk7CiAJc2V0X21hbF9kY3JuKG1hbCwgTUFMX1JYRU9CSVNSLCByKTsKIAorI2lmZGVmIENPTkZJR19QUENfRENSX05BVElWRQogCWlmIChtYWxfaGFzX2ZlYXR1cmUobWFsLCBNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVCkpCiAJCW10ZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQsCiAJCQkJKG1mZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQpIHwgSUNJTlRTVEFUX0lDUlgpKTsKKyNlbmRpZgogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNTcyLDkgKzU3NiwxOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG9mZGV2LT5ub2RlLCAiaWJtLG1jbWFsLTQwNWV6IikpCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG9mZGV2LT5ub2RlLCAiaWJtLG1jbWFsLTQwNWV6IikpIHsKKyNpZiBkZWZpbmVkKENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQpICYmIFwKKwkJZGVmaW5lZChDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSKQogCQltYWwtPmZlYXR1cmVzIHw9IChNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVCB8CiAJCQkJTUFMX0ZUUl9DT01NT05fRVJSX0lOVCk7CisjZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTdXBwb3J0IGZvciA0MDVFWiBub3QgZW5hYmxlZCFcbiIsCisJCQkJb2ZkZXYtPm5vZGUtPmZ1bGxfbmFtZSk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKyNlbmRpZgorCX0KIAogCW1hbC0+dHhlb2JfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDApOwogCW1hbC0+cnhlb2JfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCA5M2QwMmVmLi4xZjM5N2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMzgsMTAgKzM4LDExIEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNpZmRlZiBDT05GSUdfRENBCisjaWZkZWYgQ09ORklHX0lHQl9EQ0EKICNpbmNsdWRlIDxsaW51eC9kY2EuaD4KICNlbmRpZgogI2luY2x1ZGUgImlnYi5oIgpAQCAtMTA2LDExICsxMDcsMTEgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF9yeChpbnQgaXJxLCB2b2lkICopOwogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X3R4KGludCBpcnEsIHZvaWQgKik7CiBzdGF0aWMgaW50IGlnYl9jbGVhbl9yeF9yaW5nX21zaXgoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7Ci0jaWZkZWYgQ09ORklHX0RDQQorI2lmZGVmIENPTkZJR19JR0JfRENBCiBzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3J4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKik7CiBzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3R4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKik7CiBzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfZGNhKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKLSNlbmRpZiAvKiBDT05GSUdfRENBICovCisjZW5kaWYgLyogQ09ORklHX0lHQl9EQ0EgKi8KIHN0YXRpYyBib29sIGlnYl9jbGVhbl90eF9pcnEoc3RydWN0IGlnYl9yaW5nICopOwogc3RhdGljIGludCBpZ2JfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKIHN0YXRpYyBib29sIGlnYl9jbGVhbl9yeF9pcnFfYWR2KHN0cnVjdCBpZ2JfcmluZyAqLCBpbnQgKiwgaW50KTsKQEAgLTEzMSw3ICsxMzIsNyBAQAogc3RhdGljIGludCBpZ2JfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICopOwogI2VuZGlmCiBzdGF0aWMgdm9pZCBpZ2Jfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKik7Ci0jaWZkZWYgQ09ORklHX0RDQQorI2lmZGVmIENPTkZJR19JR0JfRENBCiBzdGF0aWMgaW50IGlnYl9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkY2Ffbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSBpZ2Jfbm90aWZ5X2RjYSwKQEAgLTIwNyw3ICsyMDgsNyBAQAogCWdsb2JhbF9xdWFkX3BvcnRfYSA9IDA7CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpZ2JfZHJpdmVyKTsKLSNpZmRlZiBDT05GSUdfRENBCisjaWZkZWYgQ09ORklHX0lHQl9EQ0EKIAlkY2FfcmVnaXN0ZXJfbm90aWZ5KCZkY2Ffbm90aWZpZXIpOwogI2VuZGlmCiAJcmV0dXJuIHJldDsKQEAgLTIyMyw3ICsyMjQsNyBAQAogICoqLwogc3RhdGljIHZvaWQgX19leGl0IGlnYl9leGl0X21vZHVsZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19EQ0EKKyNpZmRlZiBDT05GSUdfSUdCX0RDQQogCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaWdiX2RyaXZlcik7CkBAIC05NjYsMTAgKzk2NywxMSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCBlMTAwMF9odyAqaHc7CisJc3RydWN0IHBjaV9kZXYgKnVzX2RldjsKIAljb25zdCBzdHJ1Y3QgZTEwMDBfaW5mbyAqZWkgPSBpZ2JfaW5mb190YmxbZW50LT5kcml2ZXJfZGF0YV07CiAJdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0LCBtbWlvX2xlbjsKLQlpbnQgaSwgZXJyLCBwY2lfdXNpbmdfZGFjOwotCXUxNiBlZXByb21fZGF0YSA9IDA7CisJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYywgcG9zOworCXUxNiBlZXByb21fZGF0YSA9IDAsIHN0YXRlID0gMDsKIAl1MTYgZWVwcm9tX2FwbWVfbWFzayA9IElHQl9FRVBST01fQVBNRTsKIAl1MzIgcGFydF9udW07CiAJaW50IGJhcnMsIG5lZWRfaW9wb3J0OwpAQCAtMTAwNCw2ICsxMDA2LDI4IEBACiAJCX0KIAl9CiAKKwkvKiA4MjU3NSByZXF1aXJlcyB0aGF0IHRoZSBwY2ktZSBsaW5rIHBhcnRuZXIgZGlzYWJsZSB0aGUgTDBzIHN0YXRlICovCisJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSOgorCQl1c19kZXYgPSBwZGV2LT5idXMtPnNlbGY7CisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkodXNfZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJCWlmIChwb3MpIHsKKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHVzX2RldiwgcG9zICsgUENJX0VYUF9MTktDVEwsCisJCQkgICAgICAgICAgICAgICAgICAgICAmc3RhdGUpOworCQkJc3RhdGUgJj0gflBDSUVfTElOS19TVEFURV9MMFM7CisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodXNfZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSk7CisJCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgQVNQTSBMMHMgdXBzdHJlYW0gc3dpdGNoICIKKwkJCSAgICAgICAicG9ydCAleDoleC4leFxuIiwgdXNfZGV2LT5idXMtPm51bWJlciwKKwkJCSAgICAgICBQQ0lfU0xPVCh1c19kZXYtPmRldmZuKSwKKwkJCSAgICAgICBQQ0lfRlVOQyh1c19kZXYtPmRldmZuKSk7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKIAllcnIgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGJhcnMsIGlnYl9kcml2ZXJfbmFtZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcGNpX3JlZzsKQEAgLTEyMzcsNyArMTI2MSw3IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKLSNpZmRlZiBDT05GSUdfRENBCisjaWZkZWYgQ09ORklHX0lHQl9EQ0EKIAlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfSEFTX0RDQSkgJiYKIAkgICAgKGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpID09IDApKSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0RDQV9FTkFCTEVEOwpAQCAtMTMxMSw3ICsxMzM1LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0jaWZkZWYgQ09ORklHX0RDQQorI2lmZGVmIENPTkZJR19JR0JfRENBCiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKICNlbmRpZgogCkBAIC0xMzIzLDcgKzEzNDcsNyBAQAogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotI2lmZGVmIENPTkZJR19EQ0EKKyNpZmRlZiBDT05GSUdfSUdCX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEQ0EgZGlzYWJsZWRcbiIpOwogCQlkY2FfcmVtb3ZlX3JlcXVlc3RlcigmcGRldi0+ZGV2KTsKQEAgLTMyNzEsNyArMzI5NSw3IEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gdHhfcmluZy0+YWRhcHRlcjsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0jaWZkZWYgQ09ORklHX0RDQQorI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWlnYl91cGRhdGVfdHhfZGNhKHR4X3JpbmcpOwogI2VuZGlmCkBAIC0zMzIzLDE0ICszMzQ3LDE0IEBACiAJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoYWRhcHRlci0+bmV0ZGV2LCAmcnhfcmluZy0+bmFwaSkpCiAJCV9fbmV0aWZfcnhfc2NoZWR1bGUoYWRhcHRlci0+bmV0ZGV2LCAmcnhfcmluZy0+bmFwaSk7CiAKLSNpZmRlZiBDT05GSUdfRENBCisjaWZkZWYgQ09ORklHX0lHQl9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaWdiX3VwZGF0ZV9yeF9kY2EocnhfcmluZyk7CiAjZW5kaWYKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jaWZkZWYgQ09ORklHX0RDQQorI2lmZGVmIENPTkZJR19JR0JfRENBCiBzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3J4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCiB7CiAJdTMyIGRjYV9yeGN0cmw7CkBAIC0zNDUwLDcgKzM0NzQsNyBAQAogCiAJcmV0dXJuIHJldF92YWwgPyBOT1RJRllfQkFEIDogTk9USUZZX0RPTkU7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0RDQSAqLworI2VuZGlmIC8qIENPTkZJR19JR0JfRENBICovCiAKIC8qKgogICogaWdiX2ludHJfbXNpIC0gSW50ZXJydXB0IEhhbmRsZXIKQEAgLTM1MjksMTMgKzM1NTMsMTMgQEAKIAlpbnQgdHhfY2xlYW5fY29tcGxldGUsIHdvcmtfZG9uZSA9IDA7CiAKIAkvKiB0aGlzIHBvbGwgcm91dGluZSBvbmx5IHN1cHBvcnRzIG9uZSB0eCBhbmQgb25lIHJ4IHF1ZXVlICovCi0jaWZkZWYgQ09ORklHX0RDQQorI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWlnYl91cGRhdGVfdHhfZGNhKCZhZGFwdGVyLT50eF9yaW5nWzBdKTsKICNlbmRpZgogCXR4X2NsZWFuX2NvbXBsZXRlID0gaWdiX2NsZWFuX3R4X2lycSgmYWRhcHRlci0+dHhfcmluZ1swXSk7CiAKLSNpZmRlZiBDT05GSUdfRENBCisjaWZkZWYgQ09ORklHX0lHQl9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaWdiX3VwZGF0ZV9yeF9kY2EoJmFkYXB0ZXItPnJ4X3JpbmdbMF0pOwogI2VuZGlmCkBAIC0zNTYzLDcgKzM1ODcsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IHdvcmtfZG9uZSA9IDA7CiAKLSNpZmRlZiBDT05GSUdfRENBCisjaWZkZWYgQ09ORklHX0lHQl9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaWdiX3VwZGF0ZV9yeF9kY2EocnhfcmluZyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwppbmRleCA3M2ZlODNiLi5lMTQyOWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCkBAIC01NDAsNyArNTQwLDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9tZW07CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4vRG9uU2hpbmUgZGV2aWNlICVzIiwgbmV0LT5uYW1lKTsKKwlkZXZfaW5mbygmbmV0LT5kZXYsICJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4vRG9uU2hpbmUgZGV2aWNlICVzXG4iLAorCQkgbmV0LT5uYW1lKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2luZ3N1bik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCmluZGV4IDhjMjU3YTUuLjI0ODJkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwpAQCAtODAxLDcgKzgwMSw4IEBACiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZyZWVfbWVtOwogCi0JaW5mbygiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuIEtTLTk1OSBkZXZpY2UgJXMiLCBuZXQtPm5hbWUpOworCWRldl9pbmZvKCZuZXQtPmRldiwgIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1biBLUy05NTkgZGV2aWNlICVzXG4iLAorCQkgbmV0LT5uYW1lKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2luZ3N1bik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCmluZGV4IGQwMWEyODUuLjFlMGRlOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwpAQCAtNzA1LDcgKzcwNSw4IEBACiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZyZWVfbWVtOwogCi0JaW5mbygiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuL0RhenpsZSBkZXZpY2UgJXMiLCBuZXQtPm5hbWUpOworCWRldl9pbmZvKCZuZXQtPmRldiwgIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9EYXp6bGUgZGV2aWNlICVzXG4iLAorCQkgbmV0LT5uYW1lKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2luZ3N1bik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwppbmRleCAwNTE5NjM3Li4zNTc1ODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCkBAIC01MDYsNyArNTA2LDcgQEAKIAkJCWdvdG8gZm91bmQ7CiAJfQogCi0Jd2FybigiJXM6IGludmFsaWQgc3BlZWQgJWQiLCBzdGlyLT5uZXRkZXYtPm5hbWUsIHNwZWVkKTsKKwlkZXZfd2Fybigmc3Rpci0+bmV0ZGV2LT5kZXYsICJpbnZhbGlkIHNwZWVkICVkXG4iLCBzcGVlZCk7CiAJcmV0dXJuIC1FSU5WQUw7CiAKICBmb3VuZDoKQEAgLTU5OCw4ICs1OTgsOCBAQAogCQllcnIgPSByZWFkX3JlZyhzdGlyLCBSRUdfRklGT0NUTCwgc3Rpci0+Zmlmb19zdGF0dXMsIAogCQkJCSAgIEZJRk9fUkVHU19TSVpFKTsKIAkJaWYgKHVubGlrZWx5KGVyciAhPSBGSUZPX1JFR1NfU0laRSkpIHsKLQkJCXdhcm4oIiVzOiBGSUZPIHJlZ2lzdGVyIHJlYWQgZXJyb3I6ICVkIiwgCi0JCQkgICAgIHN0aXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJCWRldl93YXJuKCZzdGlyLT5uZXRkZXYtPmRldiwKKwkJCQkgIkZJRk8gcmVnaXN0ZXIgcmVhZCBlcnJvcjogJWRcbiIsIGVycik7CiAKIAkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTc4Myw4ICs3ODMsOSBAQAogCiAJCQlpZiAodW5saWtlbHkocmVjZWl2ZV9zdGFydChzdGlyKSkpIHsKIAkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlpbmZvKCIlczogcmVjZWl2ZSB1c2Igc3VibWl0IGZhaWxlZCIsCi0JCQkJCSAgICAgc3Rpci0+bmV0ZGV2LT5uYW1lKTsKKwkJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkJICIlczogcmVjZWl2ZSB1c2Igc3VibWl0IGZhaWxlZFxuIiwKKwkJCQkJCSBzdGlyLT5uZXRkZXYtPm5hbWUpOwogCQkJCXN0aXItPnJlY2VpdmluZyA9IDA7CiAJCQkJbXNsZWVwKDEwKTsKIAkJCQljb250aW51ZTsKQEAgLTgzNiw4ICs4MzcsOCBAQAogCiAJLyogaW4gY2FzZSBvZiBlcnJvciwgdGhlIGtlcm5lbCB0aHJlYWQgd2lsbCByZXN0YXJ0IHVzICovCiAJaWYgKGVycikgewotCQl3YXJuKCIlczogdXNiIHJlY2VpdmUgc3VibWl0IGVycm9yOiAlZCIsCi0JCQlzdGlyLT5uZXRkZXYtPm5hbWUsIGVycik7CisJCWRldl93YXJuKCZzdGlyLT5uZXRkZXYtPmRldiwgInVzYiByZWNlaXZlIHN1Ym1pdCBlcnJvcjogJWRcbiIsCisJCQkgZXJyKTsKIAkJc3Rpci0+cmVjZWl2aW5nID0gMDsKIAkJd2FrZV91cF9wcm9jZXNzKHN0aXItPnRocmVhZCk7CiAJfQpAQCAtMTA3Myw3ICsxMDc0LDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZXJyX291dDI7CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIFNpZ21hVGVsIGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIklyREE6IFJlZ2lzdGVyZWQgU2lnbWFUZWwgZGV2aWNlICVzXG4iLAorCQkgbmV0LT5uYW1lKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgc3Rpcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IDIxOThiNzcuLmUxMTZkMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKICNpbmNsdWRlICJpeGdiZV9jb21tb24uaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAjaW5jbHVkZSA8bGludXgvZGNhLmg+CiAjZW5kaWYKIApAQCAtMTM2LDcgKzEzNiw3IEBACiAJCSAgICAgICogb2Zmc2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJpbmcsIHdoaWNoIGlzIGRpZmZlcmVudAogCQkgICAgICAqIGZvciBEQ0UgYW5kIFJTUyBtb2RlcyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkvKiBjcHUgZm9yIHR4IHF1ZXVlICovCiAJaW50IGNwdTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGNhMTdhZjQuLjc1NDhmYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC04MCw3ICs4MCw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGl4Z2JlX3BjaV90YmwpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIHN0YXRpYyBpbnQgaXhnYmVfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwKTsKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGNhX25vdGlmaWVyID0gewpAQCAtMjk2LDcgKzI5Niw3IEBACiAJcmV0dXJuICh0b3RhbF9wYWNrZXRzID8gdHJ1ZSA6IGZhbHNlKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiBzdGF0aWMgdm9pZCBpeGdiZV91cGRhdGVfcnhfZGNhKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZykKIHsKQEAgLTM4Myw3ICszODMsNyBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0RDQSBvciBDT05GSUdfRENBX01PRFVMRSAqLworI2VuZGlmIC8qIENPTkZJR19JWEdCRV9EQ0EgKi8KIC8qKgogICogaXhnYmVfcmVjZWl2ZV9za2IgLSBTZW5kIGEgY29tcGxldGVkIHBhY2tldCB1cCB0aGUgc3RhY2sKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewogCQl0eF9yaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV90eF9kY2EoYWRhcHRlciwgdHhfcmluZyk7CiAjZW5kaWYKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKIAlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQogCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsIHJ4X3JpbmcpOwogI2VuZGlmCkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKIAkJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOwotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsIHJ4X3JpbmcpOwogI2VuZGlmCkBAIC0yMTU1LDcgKzIxNTUsNyBAQAogCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19EQ0FfRU5BQkxFRDsKIAkJZGNhX3JlbW92ZV9yZXF1ZXN0ZXIoJmFkYXB0ZXItPnBkZXYtPmRldik7CkBAIC0yMTY3LDcgKzIxNjcsNyBAQAogCWl4Z2JlX2NsZWFuX2FsbF90eF9yaW5ncyhhZGFwdGVyKTsKIAlpeGdiZV9jbGVhbl9hbGxfcnhfcmluZ3MoYWRhcHRlcik7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCS8qIHNpbmNlIHdlIHJlc2V0IHRoZSBoYXJkd2FyZSBEQ0Egc2V0dGluZ3Mgd2VyZSBjbGVhcmVkICovCiAJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKCZhZGFwdGVyLT5wZGV2LT5kZXYpID09IDApIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19EQ0FfRU5BQkxFRDsKQEAgLTIxOTMsNyArMjE5Myw3IEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKIAlpbnQgdHhfY2xlYW5lZCwgd29ya19kb25lID0gMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewogCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmcpOwogCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmcpOwpAQCAtMzkyMiw3ICszOTIyLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZWdpc3RlcjsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpID09IDApIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19EQ0FfRU5BQkxFRDsKIAkJLyogYWx3YXlzIHVzZSBDQjIgbW9kZSwgZGlmZmVyZW5jZSBpcyBtYXNrZWQKQEAgLTM5NzIsNyArMzk3Miw3IEBACiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwogCQlkY2FfcmVtb3ZlX3JlcXVlc3RlcigmcGRldi0+ZGV2KTsKQEAgLTQxMDUsMTAgKzQxMDUsMTAgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgaXhnYmVfZHJpdmVyX25hbWUsIGl4Z2JlX2NvcHlyaWdodCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWRjYV9yZWdpc3Rlcl9ub3RpZnkoJmRjYV9ub3RpZmllcik7Ci0KICNlbmRpZgorCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXhnYmVfZHJpdmVyKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDEyMywxMyArNDEyMywxMyBAQAogICoqLwogc3RhdGljIHZvaWQgX19leGl0IGl4Z2JlX2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlkY2FfdW5yZWdpc3Rlcl9ub3RpZnkoJmRjYV9ub3RpZmllcik7CiAjZW5kaWYKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml4Z2JlX2RyaXZlcik7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogc3RhdGljIGludCBpeGdiZV9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcCkKIHsKQEAgLTQxNDAsNyArNDE0MCw3IEBACiAKIAlyZXR1cm4gcmV0X3ZhbCA/IE5PVElGWV9CQUQgOiBOT1RJRllfRE9ORTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfRENBIG9yIENPTkZJR19EQ0FfTU9EVUxFICovCisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLwogCiBtb2R1bGVfZXhpdChpeGdiZV9leGl0X21vZHVsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tbHg0L01ha2VmaWxlCmluZGV4IDA5NTJhNjUuLmE3YTk3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZQpAQCAtMSw0ICsxLDkgQEAKIG9iai0kKENPTkZJR19NTFg0X0NPUkUpCQkrPSBtbHg0X2NvcmUubwogCiBtbHg0X2NvcmUteSA6PQlhbGxvYy5vIGNhdGFzLm8gY21kLm8gY3EubyBlcS5vIGZ3Lm8gaWNtLm8gaW50Zi5vIG1haW4ubyBtY2cubyBcCi0JCW1yLm8gcGQubyBwcm9maWxlLm8gcXAubyByZXNldC5vIHNycS5vCisJCW1yLm8gcGQubyBwb3J0Lm8gcHJvZmlsZS5vIHFwLm8gcmVzZXQubyBzcnEubworCitvYmotJChDT05GSUdfTUxYNF9FTikgICAgICAgICAgICAgICArPSBtbHg0X2VuLm8KKworbWx4NF9lbi15IDo9IAllbl9tYWluLm8gZW5fdHgubyBlbl9yeC5vIGVuX3BhcmFtcy5vIGVuX3BvcnQubyBlbl9jcS5vIFwKKwkJZW5fcmVzb3VyY2VzLm8gZW5fbmV0ZGV2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvYWxsb2MuYyBiL2RyaXZlcnMvbmV0L21seDQvYWxsb2MuYwppbmRleCBiNDExYjc5Li5hZDk1ZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2FsbG9jLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9hbGxvYy5jCkBAIC00OCwxMyArNDgsMTYgQEAKIAogCW9iaiA9IGZpbmRfbmV4dF96ZXJvX2JpdChiaXRtYXAtPnRhYmxlLCBiaXRtYXAtPm1heCwgYml0bWFwLT5sYXN0KTsKIAlpZiAob2JqID49IGJpdG1hcC0+bWF4KSB7Ci0JCWJpdG1hcC0+dG9wID0gKGJpdG1hcC0+dG9wICsgYml0bWFwLT5tYXgpICYgYml0bWFwLT5tYXNrOworCQliaXRtYXAtPnRvcCA9IChiaXRtYXAtPnRvcCArIGJpdG1hcC0+bWF4ICsgYml0bWFwLT5yZXNlcnZlZF90b3ApCisJCQkJJiBiaXRtYXAtPm1hc2s7CiAJCW9iaiA9IGZpbmRfZmlyc3RfemVyb19iaXQoYml0bWFwLT50YWJsZSwgYml0bWFwLT5tYXgpOwogCX0KIAogCWlmIChvYmogPCBiaXRtYXAtPm1heCkgewogCQlzZXRfYml0KG9iaiwgYml0bWFwLT50YWJsZSk7Ci0JCWJpdG1hcC0+bGFzdCA9IChvYmogKyAxKSAmIChiaXRtYXAtPm1heCAtIDEpOworCQliaXRtYXAtPmxhc3QgPSAob2JqICsgMSk7CisJCWlmIChiaXRtYXAtPmxhc3QgPT0gYml0bWFwLT5tYXgpCisJCQliaXRtYXAtPmxhc3QgPSAwOwogCQlvYmogfD0gYml0bWFwLT50b3A7CiAJfSBlbHNlCiAJCW9iaiA9IC0xOwpAQCAtNjYsMTYgKzY5LDkwIEBACiAKIHZvaWQgbWx4NF9iaXRtYXBfZnJlZShzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCwgdTMyIG9iaikKIHsKLQlvYmogJj0gYml0bWFwLT5tYXggLSAxOworCW1seDRfYml0bWFwX2ZyZWVfcmFuZ2UoYml0bWFwLCBvYmosIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2FsaWduZWRfcmFuZ2UodW5zaWduZWQgbG9uZyAqYml0bWFwLAorCQkJCQl1MzIgc3RhcnQsIHUzMiBuYml0cywKKwkJCQkJaW50IGxlbiwgaW50IGFsaWduKQoreworCXVuc2lnbmVkIGxvbmcgZW5kLCBpOworCithZ2FpbjoKKwlzdGFydCA9IEFMSUdOKHN0YXJ0LCBhbGlnbik7CisKKwl3aGlsZSAoKHN0YXJ0IDwgbmJpdHMpICYmIHRlc3RfYml0KHN0YXJ0LCBiaXRtYXApKQorCQlzdGFydCArPSBhbGlnbjsKKworCWlmIChzdGFydCA+PSBuYml0cykKKwkJcmV0dXJuIC0xOworCisJZW5kID0gc3RhcnQrbGVuOworCWlmIChlbmQgPiBuYml0cykKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gc3RhcnQgKyAxOyBpIDwgZW5kOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIGJpdG1hcCkpIHsKKwkJCXN0YXJ0ID0gaSArIDE7CisJCQlnb3RvIGFnYWluOworCQl9CisJfQorCisJcmV0dXJuIHN0YXJ0OworfQorCit1MzIgbWx4NF9iaXRtYXBfYWxsb2NfcmFuZ2Uoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXAsIGludCBjbnQsIGludCBhbGlnbikKK3sKKwl1MzIgb2JqLCBpOworCisJaWYgKGxpa2VseShjbnQgPT0gMSAmJiBhbGlnbiA9PSAxKSkKKwkJcmV0dXJuIG1seDRfYml0bWFwX2FsbG9jKGJpdG1hcCk7CiAKIAlzcGluX2xvY2soJmJpdG1hcC0+bG9jayk7Ci0JY2xlYXJfYml0KG9iaiwgYml0bWFwLT50YWJsZSk7CisKKwlvYmogPSBmaW5kX2FsaWduZWRfcmFuZ2UoYml0bWFwLT50YWJsZSwgYml0bWFwLT5sYXN0LAorCQkJCSBiaXRtYXAtPm1heCwgY250LCBhbGlnbik7CisJaWYgKG9iaiA+PSBiaXRtYXAtPm1heCkgeworCQliaXRtYXAtPnRvcCA9IChiaXRtYXAtPnRvcCArIGJpdG1hcC0+bWF4ICsgYml0bWFwLT5yZXNlcnZlZF90b3ApCisJCQkJJiBiaXRtYXAtPm1hc2s7CisJCW9iaiA9IGZpbmRfYWxpZ25lZF9yYW5nZShiaXRtYXAtPnRhYmxlLCAwLCBiaXRtYXAtPm1heCwKKwkJCQkJIGNudCwgYWxpZ24pOworCX0KKworCWlmIChvYmogPCBiaXRtYXAtPm1heCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCQlzZXRfYml0KG9iaiArIGksIGJpdG1hcC0+dGFibGUpOworCQlpZiAob2JqID09IGJpdG1hcC0+bGFzdCkgeworCQkJYml0bWFwLT5sYXN0ID0gKG9iaiArIGNudCk7CisJCQlpZiAoYml0bWFwLT5sYXN0ID49IGJpdG1hcC0+bWF4KQorCQkJCWJpdG1hcC0+bGFzdCA9IDA7CisJCX0KKwkJb2JqIHw9IGJpdG1hcC0+dG9wOworCX0gZWxzZQorCQlvYmogPSAtMTsKKworCXNwaW5fdW5sb2NrKCZiaXRtYXAtPmxvY2spOworCisJcmV0dXJuIG9iajsKK30KKwordm9pZCBtbHg0X2JpdG1hcF9mcmVlX3JhbmdlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgb2JqLCBpbnQgY250KQoreworCXUzMiBpOworCisJb2JqICY9IGJpdG1hcC0+bWF4ICsgYml0bWFwLT5yZXNlcnZlZF90b3AgLSAxOworCisJc3Bpbl9sb2NrKCZiaXRtYXAtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJY2xlYXJfYml0KG9iaiArIGksIGJpdG1hcC0+dGFibGUpOwogCWJpdG1hcC0+bGFzdCA9IG1pbihiaXRtYXAtPmxhc3QsIG9iaik7Ci0JYml0bWFwLT50b3AgPSAoYml0bWFwLT50b3AgKyBiaXRtYXAtPm1heCkgJiBiaXRtYXAtPm1hc2s7CisJYml0bWFwLT50b3AgPSAoYml0bWFwLT50b3AgKyBiaXRtYXAtPm1heCArIGJpdG1hcC0+cmVzZXJ2ZWRfdG9wKQorCQkJJiBiaXRtYXAtPm1hc2s7CiAJc3Bpbl91bmxvY2soJmJpdG1hcC0+bG9jayk7CiB9CiAKLWludCBtbHg0X2JpdG1hcF9pbml0KHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgbnVtLCB1MzIgbWFzaywgdTMyIHJlc2VydmVkKQoraW50IG1seDRfYml0bWFwX2luaXQoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXAsIHUzMiBudW0sIHUzMiBtYXNrLAorCQkgICAgIHUzMiByZXNlcnZlZF9ib3QsIHUzMiByZXNlcnZlZF90b3ApCiB7CiAJaW50IGk7CiAKQEAgLTg1LDE0ICsxNjIsMTYgQEAKIAogCWJpdG1hcC0+bGFzdCA9IDA7CiAJYml0bWFwLT50b3AgID0gMDsKLQliaXRtYXAtPm1heCAgPSBudW07CisJYml0bWFwLT5tYXggID0gbnVtIC0gcmVzZXJ2ZWRfdG9wOwogCWJpdG1hcC0+bWFzayA9IG1hc2s7CisJYml0bWFwLT5yZXNlcnZlZF90b3AgPSByZXNlcnZlZF90b3A7CiAJc3Bpbl9sb2NrX2luaXQoJmJpdG1hcC0+bG9jayk7Ci0JYml0bWFwLT50YWJsZSA9IGt6YWxsb2MoQklUU19UT19MT05HUyhudW0pICogc2l6ZW9mIChsb25nKSwgR0ZQX0tFUk5FTCk7CisJYml0bWFwLT50YWJsZSA9IGt6YWxsb2MoQklUU19UT19MT05HUyhiaXRtYXAtPm1heCkgKgorCQkJCXNpemVvZiAobG9uZyksIEdGUF9LRVJORUwpOwogCWlmICghYml0bWFwLT50YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmVzZXJ2ZWQ7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgcmVzZXJ2ZWRfYm90OyArK2kpCiAJCXNldF9iaXQoaSwgYml0bWFwLT50YWJsZSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvY3EuYyBiL2RyaXZlcnMvbmV0L21seDQvY3EuYwppbmRleCA5YmI1MGUzLi5iN2FkMjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2NxLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9jcS5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAlJTklUX1JBRElYX1RSRUUoJmNxX3RhYmxlLT50cmVlLCBHRlBfQVRPTUlDKTsKIAogCWVyciA9IG1seDRfYml0bWFwX2luaXQoJmNxX3RhYmxlLT5iaXRtYXAsIGRldi0+Y2Fwcy5udW1fY3FzLAotCQkJICAgICAgIGRldi0+Y2Fwcy5udW1fY3FzIC0gMSwgZGV2LT5jYXBzLnJlc2VydmVkX2Nxcyk7CisJCQkgICAgICAgZGV2LT5jYXBzLm51bV9jcXMgLSAxLCBkZXYtPmNhcHMucmVzZXJ2ZWRfY3FzLCAwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX2NxLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX2NxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2OGE4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fY3EuYwpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21seDQvY3EuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L3FwLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgIm1seDRfZW4uaCIKKworc3RhdGljIHZvaWQgbWx4NF9lbl9jcV9ldmVudChzdHJ1Y3QgbWx4NF9jcSAqY3EsIGVudW0gbWx4NF9ldmVudCBldmVudCkKK3sKKwlyZXR1cm47Cit9CisKKworaW50IG1seDRfZW5fY3JlYXRlX2NxKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCSAgICAgIHN0cnVjdCBtbHg0X2VuX2NxICpjcSwKKwkJICAgICAgaW50IGVudHJpZXMsIGludCByaW5nLCBlbnVtIGNxX3R5cGUgbW9kZSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCWludCBlcnI7CisKKwljcS0+c2l6ZSA9IGVudHJpZXM7CisJaWYgKG1vZGUgPT0gUlgpCisJCWNxLT5idWZfc2l6ZSA9IGNxLT5zaXplICogc2l6ZW9mKHN0cnVjdCBtbHg0X2NxZSk7CisJZWxzZQorCQljcS0+YnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IG1seDRfY3FlKTsKKworCWNxLT5yaW5nID0gcmluZzsKKwljcS0+aXNfdHggPSBtb2RlOworCXNwaW5fbG9ja19pbml0KCZjcS0+bG9jayk7CisKKwllcnIgPSBtbHg0X2FsbG9jX2h3cV9yZXMobWRldi0+ZGV2LCAmY3EtPndxcmVzLAorCQkJCWNxLT5idWZfc2l6ZSwgMiAqIFBBR0VfU0laRSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG1seDRfZW5fbWFwX2J1ZmZlcigmY3EtPndxcmVzLmJ1Zik7CisJaWYgKGVycikKKwkJbWx4NF9mcmVlX2h3cV9yZXMobWRldi0+ZGV2LCAmY3EtPndxcmVzLCBjcS0+YnVmX3NpemUpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IG1seDRfZW5fYWN0aXZhdGVfY3Eoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IG1seDRfZW5fY3EgKmNxKQoreworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJaW50IGVycjsKKworCWNxLT5kZXYgPSBtZGV2LT5wbmRldltwcml2LT5wb3J0XTsKKwljcS0+bWNxLnNldF9jaV9kYiAgPSBjcS0+d3FyZXMuZGIuZGI7CisJY3EtPm1jcS5hcm1fZGIgICAgID0gY3EtPndxcmVzLmRiLmRiICsgMTsKKwkqY3EtPm1jcS5zZXRfY2lfZGIgPSAwOworCSpjcS0+bWNxLmFybV9kYiAgICA9IDA7CisJY3EtPmJ1ZiA9IChzdHJ1Y3QgbWx4NF9jcWUgKikgY3EtPndxcmVzLmJ1Zi5kaXJlY3QuYnVmOworCW1lbXNldChjcS0+YnVmLCAwLCBjcS0+YnVmX3NpemUpOworCisJZXJyID0gbWx4NF9jcV9hbGxvYyhtZGV2LT5kZXYsIGNxLT5zaXplLCAmY3EtPndxcmVzLm10dCwgJm1kZXYtPnByaXZfdWFyLAorCQkJICAgIGNxLT53cXJlcy5kYi5kbWEsICZjcS0+bWNxLCBjcS0+aXNfdHgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwljcS0+bWNxLmNvbXAgID0gY3EtPmlzX3R4ID8gbWx4NF9lbl90eF9pcnEgOiBtbHg0X2VuX3J4X2lycTsKKwljcS0+bWNxLmV2ZW50ID0gbWx4NF9lbl9jcV9ldmVudDsKKworCWlmIChjcS0+aXNfdHgpIHsKKwkJaW5pdF90aW1lcigmY3EtPnRpbWVyKTsKKwkJY3EtPnRpbWVyLmZ1bmN0aW9uID0gbWx4NF9lbl9wb2xsX3R4X2NxOworCQljcS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjcTsKKwl9IGVsc2UgeworCQluZXRpZl9uYXBpX2FkZChjcS0+ZGV2LCAmY3EtPm5hcGksIG1seDRfZW5fcG9sbF9yeF9jcSwgNjQpOworCQluYXBpX2VuYWJsZSgmY3EtPm5hcGkpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfZW5fZGVzdHJveV9jcShzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LCBzdHJ1Y3QgbWx4NF9lbl9jcSAqY3EpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKworCW1seDRfZW5fdW5tYXBfYnVmZmVyKCZjcS0+d3FyZXMuYnVmKTsKKwltbHg0X2ZyZWVfaHdxX3JlcyhtZGV2LT5kZXYsICZjcS0+d3FyZXMsIGNxLT5idWZfc2l6ZSk7CisJY3EtPmJ1Zl9zaXplID0gMDsKKwljcS0+YnVmID0gTlVMTDsKK30KKwordm9pZCBtbHg0X2VuX2RlYWN0aXZhdGVfY3Eoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IG1seDRfZW5fY3EgKmNxKQoreworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisKKwlpZiAoY3EtPmlzX3R4KQorCQlkZWxfdGltZXIoJmNxLT50aW1lcik7CisJZWxzZQorCQluYXBpX2Rpc2FibGUoJmNxLT5uYXBpKTsKKworCW1seDRfY3FfZnJlZShtZGV2LT5kZXYsICZjcS0+bWNxKTsKK30KKworLyogU2V0IHJ4IGNxIG1vZGVyYXRpb24gcGFyYW1ldGVycyAqLworaW50IG1seDRfZW5fc2V0X2NxX21vZGVyKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX2NxICpjcSkKK3sKKwlyZXR1cm4gbWx4NF9jcV9tb2RpZnkocHJpdi0+bWRldi0+ZGV2LCAmY3EtPm1jcSwKKwkJCSAgICAgIGNxLT5tb2Rlcl9jbnQsIGNxLT5tb2Rlcl90aW1lKTsKK30KKworaW50IG1seDRfZW5fYXJtX2NxKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX2NxICpjcSkKK3sKKwljcS0+YXJtZWQgPSAxOworCW1seDRfY3FfYXJtKCZjcS0+bWNxLCBNTFg0X0NRX0RCX1JFUV9OT1QsIHByaXYtPm1kZXYtPnVhcl9tYXAsCisJCSAgICAmcHJpdi0+bWRldi0+dWFyX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBlZWJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgIm1seDRfZW4uaCIKKworTU9EVUxFX0FVVEhPUigiTGlyYW4gTGlzcywgWWV2Z2VueSBQZXRyaWxpbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWxsYW5veCBDb25uZWN0WCBIQ0EgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTiAiICgiRFJWX1JFTERBVEUiKSIpOworCitzdGF0aWMgY29uc3QgY2hhciBtbHg0X2VuX3ZlcnNpb25bXSA9CisJRFJWX05BTUUgIjogTWVsbGFub3ggQ29ubmVjdFggSENBIEV0aGVybmV0IGRyaXZlciB2IgorCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CisKK3N0YXRpYyB2b2lkIG1seDRfZW5fZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmVuZGV2X3B0ciwKKwkJCSAgZW51bSBtbHg0X2Rldl9ldmVudCBldmVudCwgaW50IHBvcnQpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gKHN0cnVjdCBtbHg0X2VuX2RldiAqKSBlbmRldl9wdHI7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdjsKKworCWlmICghbWRldi0+cG5kZXZbcG9ydF0pCisJCXJldHVybjsKKworCXByaXYgPSBuZXRkZXZfcHJpdihtZGV2LT5wbmRldltwb3J0XSk7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTUxYNF9ERVZfRVZFTlRfUE9SVF9VUDoKKwljYXNlIE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTjoKKwkJLyogVG8gcHJldmVudCByYWNlcywgd2UgcG9sbCB0aGUgbGluayBzdGF0ZSBpbiBhIHNlcGFyYXRlCisJCSAgdGFzayByYXRoZXIgdGhhbiBjaGFuZ2luZyBpdCBoZXJlICovCisJCXByaXYtPmxpbmtfc3RhdGUgPSBldmVudDsKKwkJcXVldWVfd29yayhtZGV2LT53b3JrcXVldWUsICZwcml2LT5saW5rc3RhdGVfdGFzayk7CisJCWJyZWFrOworCisJY2FzZSBNTFg0X0RFVl9FVkVOVF9DQVRBU1RST1BISUNfRVJST1I6CisJCW1seDRfZXJyKG1kZXYsICJJbnRlcm5hbCBlcnJvciBkZXRlY3RlZCwgcmVzdGFydGluZyBkZXZpY2VcbiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW1seDRfd2FybihtZGV2LCAiVW5oYW5kbGVkIGV2ZW50OiAlZFxuIiwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9yZW1vdmUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmVuZGV2X3B0cikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBlbmRldl9wdHI7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwltZGV2LT5kZXZpY2VfdXAgPSBmYWxzZTsKKwltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCisJbWx4NF9mb3JlYWNoX3BvcnQoaSwgZGV2LCBNTFg0X1BPUlRfVFlQRV9FVEgpCisJCWlmIChtZGV2LT5wbmRldltpXSkKKwkJCW1seDRfZW5fZGVzdHJveV9uZXRkZXYobWRldi0+cG5kZXZbaV0pOworCisJZmx1c2hfd29ya3F1ZXVlKG1kZXYtPndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUobWRldi0+d29ya3F1ZXVlKTsKKwltbHg0X21yX2ZyZWUoZGV2LCAmbWRldi0+bXIpOworCW1seDRfdWFyX2ZyZWUoZGV2LCAmbWRldi0+cHJpdl91YXIpOworCW1seDRfcGRfZnJlZShkZXYsIG1kZXYtPnByaXZfcGRuKTsKKwlrZnJlZShtZGV2KTsKK30KKworc3RhdGljIHZvaWQgKm1seDRfZW5fYWRkKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0YXRpYyBpbnQgbWx4NF9lbl92ZXJzaW9uX3ByaW50ZWQ7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2OworCWludCBpOworCWludCBlcnI7CisKKwlpZiAoIW1seDRfZW5fdmVyc2lvbl9wcmludGVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIiwgbWx4NF9lbl92ZXJzaW9uKTsKKwkJbWx4NF9lbl92ZXJzaW9uX3ByaW50ZWQrKzsKKwl9CisKKwltZGV2ID0ga3phbGxvYyhzaXplb2YgKm1kZXYsIEdGUF9LRVJORUwpOworCWlmICghbWRldikgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkRldmljZSBzdHJ1Y3QgYWxsb2MgZmFpbGVkLCAiCisJCQkiYWJvcnRpbmcuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9yZXM7CisJfQorCisJaWYgKG1seDRfcGRfYWxsb2MoZGV2LCAmbWRldi0+cHJpdl9wZG4pKQorCQlnb3RvIGVycl9mcmVlX2RldjsKKworCWlmIChtbHg0X3Vhcl9hbGxvYyhkZXYsICZtZGV2LT5wcml2X3VhcikpCisJCWdvdG8gZXJyX3BkOworCisJbWRldi0+dWFyX21hcCA9IGlvcmVtYXAobWRldi0+cHJpdl91YXIucGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CisJaWYgKCFtZGV2LT51YXJfbWFwKQorCQlnb3RvIGVycl91YXI7CisJc3Bpbl9sb2NrX2luaXQoJm1kZXYtPnVhcl9sb2NrKTsKKworCW1kZXYtPmRldiA9IGRldjsKKwltZGV2LT5kbWFfZGV2aWNlID0gJihkZXYtPnBkZXYtPmRldik7CisJbWRldi0+cGRldiA9IGRldi0+cGRldjsKKwltZGV2LT5kZXZpY2VfdXAgPSBmYWxzZTsKKworCW1kZXYtPkxTT19zdXBwb3J0ID0gISEoZGV2LT5jYXBzLmZsYWdzICYgKDEgPDwgMTUpKTsKKwlpZiAoIW1kZXYtPkxTT19zdXBwb3J0KQorCQltbHg0X3dhcm4obWRldiwgIkxTTyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXBncmFkZSB0byBsYXRlciAiCisJCQkJIkZXIHZlcnNpb24gdG8gZW5hYmxlIExTT1xuIik7CisKKwlpZiAobWx4NF9tcl9hbGxvYyhtZGV2LT5kZXYsIG1kZXYtPnByaXZfcGRuLCAwLCB+MHVsbCwKKwkJCSBNTFg0X1BFUk1fTE9DQUxfV1JJVEUgfCAgTUxYNF9QRVJNX0xPQ0FMX1JFQUQsCisJCQkgMCwgMCwgJm1kZXYtPm1yKSkgeworCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIGFsbG9jYXRpbmcgbWVtb3J5IHJlZ2lvblxuIik7CisJCWdvdG8gZXJyX3VhcjsKKwl9CisJaWYgKG1seDRfbXJfZW5hYmxlKG1kZXYtPmRldiwgJm1kZXYtPm1yKSkgeworCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIGVuYWJsaW5nIG1lbW9yeSByZWdpb25cbiIpOworCQlnb3RvIGVycl9tcjsKKwl9CisKKwkvKiBCdWlsZCBkZXZpY2UgcHJvZmlsZSBhY2NvcmRpbmcgdG8gc3VwcGxpZWQgbW9kdWxlIHBhcmFtZXRlcnMgKi8KKwllcnIgPSBtbHg0X2VuX2dldF9wcm9maWxlKG1kZXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkJhZCBtb2R1bGUgcGFyYW1ldGVycywgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfbXI7CisJfQorCisJLyogQ29uZmlndXJlIHdpY2ggcG9ydHMgdG8gc3RhcnQgYWNjb3JkaW5nIHRvIG1vZHVsZSBwYXJhbWV0ZXJzICovCisJbWRldi0+cG9ydF9jbnQgPSAwOworCW1seDRfZm9yZWFjaF9wb3J0KGksIGRldiwgTUxYNF9QT1JUX1RZUEVfRVRIKQorCQltZGV2LT5wb3J0X2NudCsrOworCisJLyogSWYgd2UgZGlkIG5vdCByZWNlaXZlIGFuIGV4cGxpY2l0IG51bWJlciBvZiBSeCByaW5ncywgZGVmYXVsdCB0bworCSAqIHRoZSBudW1iZXIgb2YgY29tcGxldGlvbiB2ZWN0b3JzIHBvcHVsYXRlZCBieSB0aGUgbWx4NF9jb3JlICovCisJbWx4NF9mb3JlYWNoX3BvcnQoaSwgZGV2LCBNTFg0X1BPUlRfVFlQRV9FVEgpIHsKKwkJbWx4NF9pbmZvKG1kZXYsICJVc2luZyAlZCB0eCByaW5ncyBmb3IgcG9ydDolZFxuIiwKKwkJCSAgbWRldi0+cHJvZmlsZS5wcm9mW2ldLnR4X3JpbmdfbnVtLCBpKTsKKwkJaWYgKCFtZGV2LT5wcm9maWxlLnByb2ZbaV0ucnhfcmluZ19udW0pIHsKKwkJCW1kZXYtPnByb2ZpbGUucHJvZltpXS5yeF9yaW5nX251bSA9IDE7CisJCQltbHg0X2luZm8obWRldiwgIkRlZmF1bHRpbmcgdG8gJWQgcnggcmluZ3MgZm9yIHBvcnQ6JWRcbiIsCisJCQkJICAxLCBpKTsKKwkJfSBlbHNlCisJCQltbHg0X2luZm8obWRldiwgIlVzaW5nICVkIHJ4IHJpbmdzIGZvciBwb3J0OiVkXG4iLAorCQkJCSAgbWRldi0+cHJvZmlsZS5wcm9mW2ldLnJ4X3JpbmdfbnVtLCBpKTsKKwl9CisKKwkvKiBDcmVhdGUgb3VyIG93biB3b3JrcXVldWUgZm9yIHJlc2V0L211bHRpY2FzdCB0YXNrcworCSAqIE5vdGU6IHdlIGNhbm5vdCB1c2UgdGhlIHNoYXJlZCB3b3JrcXVldWUgYmVjYXVzZSBvZiBkZWFkbG9ja3MgY2F1c2VkCisJICogICAgICAgYnkgdGhlIHJ0bmwgbG9jayAqLworCW1kZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJtbHg0X2VuIik7CisJaWYgKCFtZGV2LT53b3JrcXVldWUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfY2xvc2VfbmljOworCX0KKworCS8qIEF0IHRoaXMgc3RhZ2UgYWxsIG5vbi1wb3J0IHNwZWNpZmljIHRhc2tzIGFyZSBjb21wbGV0ZToKKwkgKiBtYXJrIHRoZSBjYXJkIHN0YXRlIGFzIHVwICovCisJbXV0ZXhfaW5pdCgmbWRldi0+c3RhdGVfbG9jayk7CisJbWRldi0+ZGV2aWNlX3VwID0gdHJ1ZTsKKworCS8qIFNldHVwIHBvcnRzICovCisKKwkvKiBDcmVhdGUgYSBuZXRkZXYgZm9yIGVhY2ggcG9ydCAqLworCW1seDRfZm9yZWFjaF9wb3J0KGksIGRldiwgTUxYNF9QT1JUX1RZUEVfRVRIKSB7CisJCW1seDRfaW5mbyhtZGV2LCAiQWN0aXZhdGluZyBwb3J0OiVkXG4iLCBpKTsKKwkJaWYgKG1seDRfZW5faW5pdF9uZXRkZXYobWRldiwgaSwgJm1kZXYtPnByb2ZpbGUucHJvZltpXSkpIHsKKwkJCW1kZXYtPnBuZGV2W2ldID0gTlVMTDsKKwkJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCQl9CisJfQorCXJldHVybiBtZGV2OworCisKK2Vycl9mcmVlX25ldGRldjoKKwltbHg0X2ZvcmVhY2hfcG9ydChpLCBkZXYsIE1MWDRfUE9SVF9UWVBFX0VUSCkgeworCQlpZiAobWRldi0+cG5kZXZbaV0pCisJCQltbHg0X2VuX2Rlc3Ryb3lfbmV0ZGV2KG1kZXYtPnBuZGV2W2ldKTsKKwl9CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwltZGV2LT5kZXZpY2VfdXAgPSBmYWxzZTsKKwltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCWZsdXNoX3dvcmtxdWV1ZShtZGV2LT53b3JrcXVldWUpOworCisJLyogU3RvcCBldmVudCBxdWV1ZSBiZWZvcmUgd2UgZHJvcCBkb3duIHRvIHJlbGVhc2Ugc2hhcmVkIFNXIHN0YXRlICovCisKK2Vycl9jbG9zZV9uaWM6CisJZGVzdHJveV93b3JrcXVldWUobWRldi0+d29ya3F1ZXVlKTsKK2Vycl9tcjoKKwltbHg0X21yX2ZyZWUoZGV2LCAmbWRldi0+bXIpOworZXJyX3VhcjoKKwltbHg0X3Vhcl9mcmVlKGRldiwgJm1kZXYtPnByaXZfdWFyKTsKK2Vycl9wZDoKKwltbHg0X3BkX2ZyZWUoZGV2LCBtZGV2LT5wcml2X3Bkbik7CitlcnJfZnJlZV9kZXY6CisJa2ZyZWUobWRldik7CitlcnJfZnJlZV9yZXM6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgbWx4NF9lbl9pbnRlcmZhY2UgPSB7CisJLmFkZAk9IG1seDRfZW5fYWRkLAorCS5yZW1vdmUJPSBtbHg0X2VuX3JlbW92ZSwKKwkuZXZlbnQJPSBtbHg0X2VuX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWx4NF9lbl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG1seDRfcmVnaXN0ZXJfaW50ZXJmYWNlKCZtbHg0X2VuX2ludGVyZmFjZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtbHg0X2VuX2NsZWFudXAodm9pZCkKK3sKKwltbHg0X3VucmVnaXN0ZXJfaW50ZXJmYWNlKCZtbHg0X2VuX2ludGVyZmFjZSk7Cit9CisKK21vZHVsZV9pbml0KG1seDRfZW5faW5pdCk7Cittb2R1bGVfZXhpdChtbHg0X2VuX2NsZWFudXApOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM5YWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwpAQCAtMCwwICsxLDEwODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9jcS5oPgorCisjaW5jbHVkZSAibWx4NF9lbi5oIgorI2luY2x1ZGUgImVuX3BvcnQuaCIKKworCitzdGF0aWMgdm9pZCBtbHg0X2VuX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCWludCBlcnI7CisKKwltbHg0X2RiZyhIVywgcHJpdiwgIlJlZ2lzdGVyaW5nIFZMQU4gZ3JvdXA6JXBcbiIsIGdycCk7CisJcHJpdi0+dmxncnAgPSBncnA7CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwlpZiAobWRldi0+ZGV2aWNlX3VwICYmIHByaXYtPnBvcnRfdXApIHsKKwkJZXJyID0gbWx4NF9TRVRfVkxBTl9GTFRSKG1kZXYtPmRldiwgcHJpdi0+cG9ydCwgZ3JwKTsKKwkJaWYgKGVycikKKwkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgY29uZmlndXJpbmcgVkxBTiBmaWx0ZXJcbiIpOworCX0KKwltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlpbnQgZXJyOworCisJaWYgKCFwcml2LT52bGdycCkKKwkJcmV0dXJuOworCisJbWx4NF9kYmcoSFcsIHByaXYsICJhZGRpbmcgVkxBTjolZCAodmxncnAgZW50cnk6JXApXG4iLAorCQkgdmlkLCB2bGFuX2dyb3VwX2dldF9kZXZpY2UocHJpdi0+dmxncnAsIHZpZCkpOworCisJLyogQWRkIFZJRCB0byBwb3J0IFZMQU4gZmlsdGVyICovCisJbXV0ZXhfbG9jaygmbWRldi0+c3RhdGVfbG9jayk7CisJaWYgKG1kZXYtPmRldmljZV91cCAmJiBwcml2LT5wb3J0X3VwKSB7CisJCWVyciA9IG1seDRfU0VUX1ZMQU5fRkxUUihtZGV2LT5kZXYsIHByaXYtPnBvcnQsIHByaXYtPnZsZ3JwKTsKKwkJaWYgKGVycikKKwkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgY29uZmlndXJpbmcgVkxBTiBmaWx0ZXJcbiIpOworCX0KKwltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJaW50IGVycjsKKworCWlmICghcHJpdi0+dmxncnApCisJCXJldHVybjsKKworCW1seDRfZGJnKEhXLCBwcml2LCAiS2lsbGluZyBWSUQ6JWQgKHZsZ3JwOiVwIHZsZ3JwICIKKwkJICJlbnRyeTolcClcbiIsIHZpZCwgcHJpdi0+dmxncnAsCisJCSB2bGFuX2dyb3VwX2dldF9kZXZpY2UocHJpdi0+dmxncnAsIHZpZCkpOworCXZsYW5fZ3JvdXBfc2V0X2RldmljZShwcml2LT52bGdycCwgdmlkLCBOVUxMKTsKKworCS8qIFJlbW92ZSBWSUQgZnJvbSBwb3J0IFZMQU4gZmlsdGVyICovCisJbXV0ZXhfbG9jaygmbWRldi0+c3RhdGVfbG9jayk7CisJaWYgKG1kZXYtPmRldmljZV91cCAmJiBwcml2LT5wb3J0X3VwKSB7CisJCWVyciA9IG1seDRfU0VUX1ZMQU5fRkxUUihtZGV2LT5kZXYsIHByaXYtPnBvcnQsIHByaXYtPnZsZ3JwKTsKKwkJaWYgKGVycikKKwkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgY29uZmlndXJpbmcgVkxBTiBmaWx0ZXJcbiIpOworCX0KKwltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworfQorCitzdGF0aWMgdTY0IG1seDRfZW5fbWFjX3RvX3U2NCh1OCAqYWRkcikKK3sKKwl1NjQgbWFjID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKSB7CisJCW1hYyA8PD0gODsKKwkJbWFjIHw9IGFkZHJbaV07CisJfQorCXJldHVybiBtYWM7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lbl9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyID0gYWRkcjsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihzYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBzYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCXByaXYtPm1hYyA9IG1seDRfZW5fbWFjX3RvX3U2NChkZXYtPmRldl9hZGRyKTsKKwlxdWV1ZV93b3JrKG1kZXYtPndvcmtxdWV1ZSwgJnByaXYtPm1hY190YXNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9kb19zZXRfbWFjKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbHg0X2VuX3ByaXYsCisJCQkJCQkgbWFjX3Rhc2spOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwlpZiAocHJpdi0+cG9ydF91cCkgeworCQkvKiBSZW1vdmUgb2xkIE1BQyBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lICovCisJCW1seDRfdW5yZWdpc3Rlcl9tYWMobWRldi0+ZGV2LCBwcml2LT5wb3J0LCBwcml2LT5tYWNfaW5kZXgpOworCQllcnIgPSBtbHg0X3JlZ2lzdGVyX21hYyhtZGV2LT5kZXYsIHByaXYtPnBvcnQsCisJCQkJCXByaXYtPm1hYywgJnByaXYtPm1hY19pbmRleCk7CisJCWlmIChlcnIpCisJCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIGNoYW5naW5nIEhXIE1BQyBhZGRyZXNzXG4iKTsKKwl9IGVsc2UKKwkJbWx4NF9kYmcoSFcsIHByaXYsICJQb3J0IGlzIGRvd24sIGV4aXRpbmcuLi5cbiIpOworCisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9jbGVhcl9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9tY19saXN0ICpwbGlzdCA9IHByaXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpuZXh0OworCisJd2hpbGUgKHBsaXN0KSB7CisJCW5leHQgPSBwbGlzdC0+bmV4dDsKKwkJa2ZyZWUocGxpc3QpOworCQlwbGlzdCA9IG5leHQ7CisJfQorCXByaXYtPm1jX2xpc3QgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX2NhY2hlX21jbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICp0bXA7CisJc3RydWN0IGRldl9tY19saXN0ICpwbGlzdCA9IE5VTEw7CisKKwlmb3IgKG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0OyBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJdG1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9tY19saXN0KSwgR0ZQX0FUT01JQyk7CisJCWlmICghdG1wKSB7CisJCQltbHg0X2VycihtZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG11bHRpY2FzdCBsaXN0XG4iKTsKKwkJCW1seDRfZW5fY2xlYXJfbGlzdChkZXYpOworCQkJcmV0dXJuOworCQl9CisJCW1lbWNweSh0bXAsIG1jbGlzdCwgc2l6ZW9mKHN0cnVjdCBkZXZfbWNfbGlzdCkpOworCQl0bXAtPm5leHQgPSBOVUxMOworCQlpZiAocGxpc3QpCisJCQlwbGlzdC0+bmV4dCA9IHRtcDsKKwkJZWxzZQorCQkJcHJpdi0+bWNfbGlzdCA9IHRtcDsKKwkJcGxpc3QgPSB0bXA7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIG1seDRfZW5fc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFwcml2LT5wb3J0X3VwKQorCQlyZXR1cm47CisKKwlxdWV1ZV93b3JrKHByaXYtPm1kZXYtPndvcmtxdWV1ZSwgJnByaXYtPm1jYXN0X3Rhc2spOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX2RvX3NldF9tdWx0aWNhc3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1seDRfZW5fcHJpdiwKKwkJCQkJCSBtY2FzdF90YXNrKTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisJdTY0IG1jYXN0X2FkZHIgPSAwOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwlpZiAoIW1kZXYtPmRldmljZV91cCkgeworCQltbHg0X2RiZyhIVywgcHJpdiwgIkNhcmQgaXMgbm90IHVwLCBpZ25vcmluZyAiCisJCQkJICAgIm11bHRpY2FzdCBjaGFuZ2UuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWlmICghcHJpdi0+cG9ydF91cCkgeworCQltbHg0X2RiZyhIVywgcHJpdiwgIlBvcnQgaXMgZG93biwgaWdub3JpbmcgIgorCQkJCSAgICJtdWx0aWNhc3QgY2hhbmdlLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUHJvbXNpY3VvdXMgbW9kZTogZGlzYWJsZSBhbGwgZmlsdGVycworCSAqLworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlpZiAoIShwcml2LT5mbGFncyAmIE1MWDRfRU5fRkxBR19QUk9NSVNDKSkgeworCQkJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMocHJpdikpCisJCQkJbWx4NF93YXJuKG1kZXYsICJQb3J0OiVkIGVudGVyaW5nIHByb21pc2N1b3VzIG1vZGVcbiIsCisJCQkJCSAgcHJpdi0+cG9ydCk7CisJCQlwcml2LT5mbGFncyB8PSBNTFg0X0VOX0ZMQUdfUFJPTUlTQzsKKworCQkJLyogRW5hYmxlIHByb21pc2NvdW9zIG1vZGUgKi8KKwkJCWVyciA9IG1seDRfU0VUX1BPUlRfcXBuX2NhbGMobWRldi0+ZGV2LCBwcml2LT5wb3J0LAorCQkJCQkJICAgICBwcml2LT5iYXNlX3FwbiwgMSk7CisJCQlpZiAoZXJyKQorCQkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgZW5hYmxpbmcgIgorCQkJCQkgInByb21pc2NvdXMgbW9kZVxuIik7CisKKwkJCS8qIERpc2FibGUgcG9ydCBtdWx0aWNhc3QgZmlsdGVyICh1bmNvbmRpdGlvbmFsbHkpICovCisJCQllcnIgPSBtbHg0X1NFVF9NQ0FTVF9GTFRSKG1kZXYtPmRldiwgcHJpdi0+cG9ydCwgMCwKKwkJCQkJCSAgMCwgTUxYNF9NQ0FTVF9ESVNBQkxFKTsKKwkJCWlmIChlcnIpCisJCQkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCBkaXNhYmxpbmcgIgorCQkJCQkgIm11bHRpY2FzdCBmaWx0ZXJcbiIpOworCisJCQkvKiBEaXNhYmxlIHBvcnQgVkxBTiBmaWx0ZXIgKi8KKwkJCWVyciA9IG1seDRfU0VUX1ZMQU5fRkxUUihtZGV2LT5kZXYsIHByaXYtPnBvcnQsIE5VTEwpOworCQkJaWYgKGVycikKKwkJCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIGRpc2FibGluZyAiCisJCQkJCSAiVkxBTiBmaWx0ZXJcbiIpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogTm90IGluIHByb21pc2NvdXMgbW9kZQorCSAqLworCisJaWYgKHByaXYtPmZsYWdzICYgTUxYNF9FTl9GTEFHX1BST01JU0MpIHsKKwkJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMocHJpdikpCisJCQltbHg0X3dhcm4obWRldiwgIlBvcnQ6JWQgbGVhdmluZyBwcm9taXNjdW91cyBtb2RlXG4iLAorCQkJCSAgcHJpdi0+cG9ydCk7CisJCXByaXYtPmZsYWdzICY9IH5NTFg0X0VOX0ZMQUdfUFJPTUlTQzsKKworCQkvKiBEaXNhYmxlIHByb21pc2NvdW9zIG1vZGUgKi8KKwkJZXJyID0gbWx4NF9TRVRfUE9SVF9xcG5fY2FsYyhtZGV2LT5kZXYsIHByaXYtPnBvcnQsCisJCQkJCSAgICAgcHJpdi0+YmFzZV9xcG4sIDApOworCQlpZiAoZXJyKQorCQkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCBkaXNhYmxpbmcgcHJvbWlzY291cyBtb2RlXG4iKTsKKworCQkvKiBFbmFibGUgcG9ydCBWTEFOIGZpbHRlciAqLworCQllcnIgPSBtbHg0X1NFVF9WTEFOX0ZMVFIobWRldi0+ZGV2LCBwcml2LT5wb3J0LCBwcml2LT52bGdycCk7CisJCWlmIChlcnIpCisJCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIGVuYWJsaW5nIFZMQU4gZmlsdGVyXG4iKTsKKwl9CisKKwkvKiBFbmFibGUvZGlzYWJsZSB0aGUgbXVsdGljYXN0IGZpbHRlciBhY2NvcmRpbmcgdG8gSUZGX0FMTE1VTFRJICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJZXJyID0gbWx4NF9TRVRfTUNBU1RfRkxUUihtZGV2LT5kZXYsIHByaXYtPnBvcnQsIDAsCisJCQkJCSAgMCwgTUxYNF9NQ0FTVF9ESVNBQkxFKTsKKwkJaWYgKGVycikKKwkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgZGlzYWJsaW5nIG11bHRpY2FzdCBmaWx0ZXJcbiIpOworCX0gZWxzZSB7CisJCWVyciA9IG1seDRfU0VUX01DQVNUX0ZMVFIobWRldi0+ZGV2LCBwcml2LT5wb3J0LCAwLAorCQkJCQkgIDAsIE1MWDRfTUNBU1RfRElTQUJMRSk7CisJCWlmIChlcnIpCisJCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIGRpc2FibGluZyBtdWx0aWNhc3QgZmlsdGVyXG4iKTsKKworCQkvKiBGbHVzaCBtY2FzdCBmaWx0ZXIgYW5kIGluaXQgaXQgd2l0aCBicm9hZGNhc3QgYWRkcmVzcyAqLworCQltbHg0X1NFVF9NQ0FTVF9GTFRSKG1kZXYtPmRldiwgcHJpdi0+cG9ydCwgRVRIX0JDQVNULAorCQkJCSAgICAxLCBNTFg0X01DQVNUX0NPTkZJRyk7CisKKwkJLyogVXBkYXRlIG11bHRpY2FzdCBsaXN0IC0gd2UgY2FjaGUgYWxsIGFkZHJlc3NlcyBzbyB0aGV5IHdvbid0CisJCSAqIGNoYW5nZSB3aGlsZSBIVyBpcyB1cGRhdGVkIGhvbGRpbmcgdGhlIGNvbW1hbmQgc2VtYXBob3IgKi8KKwkJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCQltbHg0X2VuX2NhY2hlX21jbGlzdChkZXYpOworCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwkJZm9yIChtY2xpc3QgPSBwcml2LT5tY19saXN0OyBtY2xpc3Q7IG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJbWNhc3RfYWRkciA9IG1seDRfZW5fbWFjX3RvX3U2NChtY2xpc3QtPmRtaV9hZGRyKTsKKwkJCW1seDRfU0VUX01DQVNUX0ZMVFIobWRldi0+ZGV2LCBwcml2LT5wb3J0LAorCQkJCQkgICAgbWNhc3RfYWRkciwgMCwgTUxYNF9NQ0FTVF9DT05GSUcpOworCQl9CisJCWVyciA9IG1seDRfU0VUX01DQVNUX0ZMVFIobWRldi0+ZGV2LCBwcml2LT5wb3J0LCAwLAorCQkJCQkgIDAsIE1MWDRfTUNBU1RfRU5BQkxFKTsKKwkJaWYgKGVycikKKwkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgZW5hYmxpbmcgbXVsdGljYXN0IGZpbHRlclxuIik7CisKKwkJbWx4NF9lbl9jbGVhcl9saXN0KGRldik7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmbWRldi0+c3RhdGVfbG9jayk7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgbWx4NF9lbl9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fY3EgKmNxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19udW07IGkrKykgeworCQljcSA9ICZwcml2LT5yeF9jcVtpXTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNxLT5sb2NrLCBmbGFncyk7CisJCW5hcGlfc3luY2hyb25pemUoJmNxLT5uYXBpKTsKKwkJbWx4NF9lbl9wcm9jZXNzX3J4X2NxKGRldiwgY3EsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+bG9jaywgZmxhZ3MpOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBtbHg0X2VuX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCisJaWYgKG5ldGlmX21zZ190aW1lcihwcml2KSkKKwkJbWx4NF93YXJuKG1kZXYsICJUeCB0aW1lb3V0IGNhbGxlZCBvbiBwb3J0OiVkXG4iLCBwcml2LT5wb3J0KTsKKworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJcHJpdi0+cG9ydF9zdGF0cy50eF90aW1lb3V0Kys7CisJCW1seDRfZGJnKERSViwgcHJpdiwgIlNjaGVkdWxpbmcgd2F0Y2hkb2dcbiIpOworCQlxdWV1ZV93b3JrKG1kZXYtPndvcmtxdWV1ZSwgJnByaXYtPndhdGNoZG9nX3Rhc2spOworCX0KK30KKworCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm1seDRfZW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YXRzX2xvY2spOworCW1lbWNweSgmcHJpdi0+cmV0X3N0YXRzLCAmcHJpdi0+c3RhdHMsIHNpemVvZihwcml2LT5zdGF0cykpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdGF0c19sb2NrKTsKKworCXJldHVybiAmcHJpdi0+cmV0X3N0YXRzOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX3NldF9kZWZhdWx0X21vZGVyYXRpb24oc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBtbHg0X2VuX2NxICpjcTsKKwlpbnQgaTsKKworCS8qIElmIHdlIGhhdmVuJ3QgcmVjZWl2ZWQgYSBzcGVjaWZpYyBjb2FsZXNjaW5nIHNldHRpbmcKKwkgKiAobW9kdWxlIHBhcmFtKSwgd2Ugc2V0IHRoZSBtb2RlcmF0aW9uIHBhcmFtdGVycyBhcyBmb2xsb3dzOgorCSAqIC0gbW9kZXJfY250IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIG10dSBzaXplZCBwYWNrZXRzIHRvCisJICogICBzYXRpc2Z5IG91ciBjb2Vsc2luZyB0YXJnZXQuCisJICogLSBtb2Rlcl90aW1lIGlzIHNldCB0byBhIGZpeGVkIHZhbHVlLgorCSAqLworCXByaXYtPnJ4X2ZyYW1lcyA9IChtZGV2LT5wcm9maWxlLnJ4X21vZGVyX2NudCA9PQorCQkJICAgTUxYNF9FTl9BVVRPX0NPTkYpID8KKwkJCQlNTFg0X0VOX1JYX0NPQUxfVEFSR0VUIC8KKwkJCQlwcml2LT5kZXYtPm10dSArIDEgOgorCQkJCW1kZXYtPnByb2ZpbGUucnhfbW9kZXJfY250OworCXByaXYtPnJ4X3VzZWNzID0gKG1kZXYtPnByb2ZpbGUucnhfbW9kZXJfdGltZSA9PQorCQkJICBNTFg0X0VOX0FVVE9fQ09ORikgPworCQkJCU1MWDRfRU5fUlhfQ09BTF9USU1FIDoKKwkJCQltZGV2LT5wcm9maWxlLnJ4X21vZGVyX3RpbWU7CisJbWx4NF9kYmcoSU5UUiwgcHJpdiwgIkRlZmF1bHQgY29hbGVzaW5nIHBhcmFtcyBmb3IgbXR1OiVkIC0gIgorCQkJICAgICAicnhfZnJhbWVzOiVkIHJ4X3VzZWNzOiVkXG4iLAorCQkgcHJpdi0+ZGV2LT5tdHUsIHByaXYtPnJ4X2ZyYW1lcywgcHJpdi0+cnhfdXNlY3MpOworCisJLyogU2V0dXAgY3EgbW9kZXJhdGlvbiBwYXJhbXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19udW07IGkrKykgeworCQljcSA9ICZwcml2LT5yeF9jcVtpXTsKKwkJY3EtPm1vZGVyX2NudCA9IHByaXYtPnJ4X2ZyYW1lczsKKwkJY3EtPm1vZGVyX3RpbWUgPSBwcml2LT5yeF91c2VjczsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dHhfcmluZ19udW07IGkrKykgeworCQljcSA9ICZwcml2LT50eF9jcVtpXTsKKwkJY3EtPm1vZGVyX2NudCA9IE1MWDRfRU5fVFhfQ09BTF9QS1RTOworCQljcS0+bW9kZXJfdGltZSA9IE1MWDRfRU5fVFhfQ09BTF9USU1FOworCX0KKworCS8qIFJlc2V0IGF1dG8tbW9kZXJhdGlvbiBwYXJhbXMgKi8KKwlwcml2LT5wa3RfcmF0ZV9sb3cgPSBNTFg0X0VOX1JYX1JBVEVfTE9XOworCXByaXYtPnJ4X3VzZWNzX2xvdyA9IE1MWDRfRU5fUlhfQ09BTF9USU1FX0xPVzsKKwlwcml2LT5wa3RfcmF0ZV9oaWdoID0gTUxYNF9FTl9SWF9SQVRFX0hJR0g7CisJcHJpdi0+cnhfdXNlY3NfaGlnaCA9IE1MWDRfRU5fUlhfQ09BTF9USU1FX0hJR0g7CisJcHJpdi0+c2FtcGxlX2ludGVydmFsID0gTUxYNF9FTl9TQU1QTEVfSU5URVJWQUw7CisJcHJpdi0+YWRhcHRpdmVfcnhfY29hbCA9IG1kZXYtPnByb2ZpbGUuYXV0b19tb2RlcjsKKwlwcml2LT5sYXN0X21vZGVyX3RpbWUgPSBNTFg0X0VOX0FVVE9fQ09ORjsKKwlwcml2LT5sYXN0X21vZGVyX2ppZmZpZXMgPSAwOworCXByaXYtPmxhc3RfbW9kZXJfcGFja2V0cyA9IDA7CisJcHJpdi0+bGFzdF9tb2Rlcl90eF9wYWNrZXRzID0gMDsKKwlwcml2LT5sYXN0X21vZGVyX2J5dGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9hdXRvX21vZGVyYXRpb24oc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIHBlcmlvZCA9ICh1bnNpZ25lZCBsb25nKSAoamlmZmllcyAtIHByaXYtPmxhc3RfbW9kZXJfamlmZmllcyk7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3QgbWx4NF9lbl9jcSAqY3E7CisJdW5zaWduZWQgbG9uZyBwYWNrZXRzOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGF2Z19wa3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHM7CisJdW5zaWduZWQgbG9uZyByeF9ieXRlczsKKwl1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7CisJdW5zaWduZWQgbG9uZyB0eF9wa3RfZGlmZjsKKwl1bnNpZ25lZCBsb25nIHJ4X3BrdF9kaWZmOworCWludCBtb2Rlcl90aW1lOworCWludCBpLCBlcnI7CisKKwlpZiAoIXByaXYtPmFkYXB0aXZlX3J4X2NvYWwgfHwgcGVyaW9kIDwgcHJpdi0+c2FtcGxlX2ludGVydmFsICogSFopCisJCXJldHVybjsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+c3RhdHNfbG9jayk7CisJcnhfcGFja2V0cyA9IHByaXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJcnhfYnl0ZXMgPSBwcml2LT5zdGF0cy5yeF9ieXRlczsKKwl0eF9wYWNrZXRzID0gcHJpdi0+c3RhdHMudHhfcGFja2V0czsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RhdHNfbG9jayk7CisKKwlpZiAoIXByaXYtPmxhc3RfbW9kZXJfamlmZmllcyB8fCAhcGVyaW9kKQorCQlnb3RvIG91dDsKKworCXR4X3BrdF9kaWZmID0gKCh1bnNpZ25lZCBsb25nKSAodHhfcGFja2V0cyAtCisJCQkJCXByaXYtPmxhc3RfbW9kZXJfdHhfcGFja2V0cykpOworCXJ4X3BrdF9kaWZmID0gKCh1bnNpZ25lZCBsb25nKSAocnhfcGFja2V0cyAtCisJCQkJCXByaXYtPmxhc3RfbW9kZXJfcGFja2V0cykpOworCXBhY2tldHMgPSBtYXgodHhfcGt0X2RpZmYsIHJ4X3BrdF9kaWZmKTsKKwlyYXRlID0gcGFja2V0cyAqIEhaIC8gcGVyaW9kOworCWF2Z19wa3Rfc2l6ZSA9IHBhY2tldHMgPyAoKHVuc2lnbmVkIGxvbmcpIChyeF9ieXRlcyAtCisJCQkJIHByaXYtPmxhc3RfbW9kZXJfYnl0ZXMpKSAvIHBhY2tldHMgOiAwOworCisJLyogQXBwbHkgYXV0by1tb2RlcmF0aW9uIG9ubHkgd2hlbiBwYWNrZXQgcmF0ZSBleGNlZWRzIGEgcmF0ZSB0aGF0CisJICogaXQgbWF0dGVycyAqLworCWlmIChyYXRlID4gTUxYNF9FTl9SWF9SQVRFX1RIUkVTSCkgeworCQkvKiBJZiB0eCBhbmQgcnggcGFja2V0IHJhdGVzIGFyZSBub3QgYmFsYW5jZWQsIGFzc3VtZSB0aGF0CisJCSAqIHRyYWZmaWMgaXMgbWFpbmx5IEJXIGJvdW5kIGFuZCBhcHBseSBtYXhpbXVtIG1vZGVyYXRpb24uCisJCSAqIE90aGVyd2lzZSwgbW9kZXJhdGUgYWNjb3JkaW5nIHRvIHBhY2tldCByYXRlICovCisJCWlmICgyICogdHhfcGt0X2RpZmYgPiAzICogcnhfcGt0X2RpZmYgfHwKKwkJICAgIDIgKiByeF9wa3RfZGlmZiA+IDMgKiB0eF9wa3RfZGlmZikgeworCQkJbW9kZXJfdGltZSA9IHByaXYtPnJ4X3VzZWNzX2hpZ2g7CisJCX0gZWxzZSB7CisJCQlpZiAocmF0ZSA8IHByaXYtPnBrdF9yYXRlX2xvdykKKwkJCQltb2Rlcl90aW1lID0gcHJpdi0+cnhfdXNlY3NfbG93OworCQkJZWxzZSBpZiAocmF0ZSA+IHByaXYtPnBrdF9yYXRlX2hpZ2gpCisJCQkJbW9kZXJfdGltZSA9IHByaXYtPnJ4X3VzZWNzX2hpZ2g7CisJCQllbHNlCisJCQkJbW9kZXJfdGltZSA9IChyYXRlIC0gcHJpdi0+cGt0X3JhdGVfbG93KSAqCisJCQkJCShwcml2LT5yeF91c2Vjc19oaWdoIC0gcHJpdi0+cnhfdXNlY3NfbG93KSAvCisJCQkJCShwcml2LT5wa3RfcmF0ZV9oaWdoIC0gcHJpdi0+cGt0X3JhdGVfbG93KSArCisJCQkJCXByaXYtPnJ4X3VzZWNzX2xvdzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdoZW4gcGFja2V0IHJhdGUgaXMgbG93LCB1c2UgZGVmYXVsdCBtb2RlcmF0aW9uIHJhdGhlciB0aGFuCisJCSAqIDAgdG8gcHJldmVudCBpbnRlcnJ1cHQgc3Rvcm1zIGlmIHRyYWZmaWMgc3VkZGVubHkgaW5jcmVhc2VzICovCisJCW1vZGVyX3RpbWUgPSBwcml2LT5yeF91c2VjczsKKwl9CisKKwltbHg0X2RiZyhJTlRSLCBwcml2LCAidHggcmF0ZTolbHUgcnhfcmF0ZTolbHVcbiIsCisJCSB0eF9wa3RfZGlmZiAqIEhaIC8gcGVyaW9kLCByeF9wa3RfZGlmZiAqIEhaIC8gcGVyaW9kKTsKKworCW1seDRfZGJnKElOVFIsIHByaXYsICJSeCBtb2Rlcl90aW1lIGNoYW5nZWQgZnJvbTolZCB0byAlZCBwZXJpb2Q6JWx1ICIKKwkJICJbamlmZl0gcGFja2V0czolbHUgYXZnX3BrdF9zaXplOiVsdSByYXRlOiVsdSBbcC9zXSlcbiIsCisJCSBwcml2LT5sYXN0X21vZGVyX3RpbWUsIG1vZGVyX3RpbWUsIHBlcmlvZCwgcGFja2V0cywKKwkJIGF2Z19wa3Rfc2l6ZSwgcmF0ZSk7CisKKwlpZiAobW9kZXJfdGltZSAhPSBwcml2LT5sYXN0X21vZGVyX3RpbWUpIHsKKwkJcHJpdi0+bGFzdF9tb2Rlcl90aW1lID0gbW9kZXJfdGltZTsKKwkJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJCWNxID0gJnByaXYtPnJ4X2NxW2ldOworCQkJY3EtPm1vZGVyX3RpbWUgPSBtb2Rlcl90aW1lOworCQkJZXJyID0gbWx4NF9lbl9zZXRfY3FfbW9kZXIocHJpdiwgY3EpOworCQkJaWYgKGVycikgeworCQkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgbW9kaWZ5aW5nIG1vZGVyYXRpb24gZm9yIGNxOiVkICIKKwkJCQkJICJvbiBwb3J0OiVkXG4iLCBpLCBwcml2LT5wb3J0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworb3V0OgorCXByaXYtPmxhc3RfbW9kZXJfcGFja2V0cyA9IHJ4X3BhY2tldHM7CisJcHJpdi0+bGFzdF9tb2Rlcl90eF9wYWNrZXRzID0gdHhfcGFja2V0czsKKwlwcml2LT5sYXN0X21vZGVyX2J5dGVzID0gcnhfYnl0ZXM7CisJcHJpdi0+bGFzdF9tb2Rlcl9qaWZmaWVzID0gamlmZmllczsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9kb19nZXRfc3RhdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGVsYXksIHN0cnVjdCBtbHg0X2VuX3ByaXYsCisJCQkJCQkgc3RhdHNfdGFzayk7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlpbnQgZXJyOworCisJZXJyID0gbWx4NF9lbl9EVU1QX0VUSF9TVEFUUyhtZGV2LCBwcml2LT5wb3J0LCAwKTsKKwlpZiAoZXJyKQorCQltbHg0X2RiZyhIVywgcHJpdiwgIkNvdWxkIG5vdCB1cGRhdGUgc3RhdHMgZm9yICIKKwkJCQkgICAicG9ydDolZFxuIiwgcHJpdi0+cG9ydCk7CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwlpZiAobWRldi0+ZGV2aWNlX3VwKSB7CisJCWlmIChwcml2LT5wb3J0X3VwKQorCQkJbWx4NF9lbl9hdXRvX21vZGVyYXRpb24ocHJpdik7CisKKwkJcXVldWVfZGVsYXllZF93b3JrKG1kZXYtPndvcmtxdWV1ZSwgJnByaXYtPnN0YXRzX3Rhc2ssIFNUQVRTX0RFTEFZKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9saW5rc3RhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1seDRfZW5fcHJpdiwKKwkJCQkJCSBsaW5rc3RhdGVfdGFzayk7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlpbnQgbGlua3N0YXRlID0gcHJpdi0+bGlua19zdGF0ZTsKKworCW11dGV4X2xvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCS8qIElmIG9ic2VydmFibGUgcG9ydCBzdGF0ZSBjaGFuZ2VkIHNldCBjYXJyaWVyIHN0YXRlIGFuZAorCSAqIHJlcG9ydCB0byBzeXN0ZW0gbG9nICovCisJaWYgKHByaXYtPmxhc3RfbGlua19zdGF0ZSAhPSBsaW5rc3RhdGUpIHsKKwkJaWYgKGxpbmtzdGF0ZSA9PSBNTFg0X0RFVl9FVkVOVF9QT1JUX0RPV04pIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKKwkJCQltbHg0X2luZm8obWRldiwgIlBvcnQgJWQgLSBsaW5rIGRvd25cbiIsIHByaXYtPnBvcnQpOworCQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKKwkJCQltbHg0X2luZm8obWRldiwgIlBvcnQgJWQgLSBsaW5rIHVwXG4iLCBwcml2LT5wb3J0KTsKKwkJCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKKwkJfQorCX0KKwlwcml2LT5sYXN0X2xpbmtfc3RhdGUgPSBsaW5rc3RhdGU7CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKK30KKworCitzdGF0aWMgaW50IG1seDRfZW5fc3RhcnRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJc3RydWN0IG1seDRfZW5fY3EgKmNxOworCXN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnR4X3Jpbmc7CisJc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcnhfcmluZzsKKwlpbnQgcnhfaW5kZXggPSAwOworCWludCB0eF9pbmRleCA9IDA7CisJdTE2IHN0cmlkZTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKwlpbnQgajsKKworCWlmIChwcml2LT5wb3J0X3VwKSB7CisJCW1seDRfZGJnKERSViwgcHJpdiwgInN0YXJ0IHBvcnQgY2FsbGVkIHdoaWxlIHBvcnQgYWxyZWFkeSB1cFxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIENhbGN1bGF0ZSBSeCBidWYgc2l6ZSAqLworCWRldi0+bXR1ID0gbWluKGRldi0+bXR1LCBwcml2LT5tYXhfbXR1KTsKKwltbHg0X2VuX2NhbGNfcnhfYnVmKGRldik7CisJbWx4NF9kYmcoRFJWLCBwcml2LCAiUnggYnVmIHNpemU6JWRcbiIsIHByaXYtPnJ4X3NrYl9zaXplKTsKKwlzdHJpZGUgPSByb3VuZHVwX3Bvd19vZl90d28oc2l6ZW9mKHN0cnVjdCBtbHg0X2VuX3J4X2Rlc2MpICsKKwkJCQkgICAgRFNfU0laRSAqIHByaXYtPm51bV9mcmFncyk7CisJLyogQ29uZmlndXJlIHJ4IGNxJ3MgYW5kIHJpbmdzICovCisJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJY3EgPSAmcHJpdi0+cnhfY3FbaV07CisJCXJ4X3JpbmcgPSAmcHJpdi0+cnhfcmluZ1tpXTsKKworCQllcnIgPSBtbHg0X2VuX2FjdGl2YXRlX2NxKHByaXYsIGNxKTsKKwkJaWYgKGVycikgeworCQkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCBhY3RpdmF0aW5nIFJ4IENRXG4iKTsKKwkJCWdvdG8gcnhfZXJyOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBjcS0+c2l6ZTsgaisrKQorCQkJY3EtPmJ1ZltqXS5vd25lcl9zcl9vcGNvZGUgPSBNTFg0X0NRRV9PV05FUl9NQVNLOworCQllcnIgPSBtbHg0X2VuX3NldF9jcV9tb2Rlcihwcml2LCBjcSk7CisJCWlmIChlcnIpIHsKKwkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgc2V0dGluZyBjcSBtb2RlcmF0aW9uIHBhcmFtZXRlcnMiKTsKKwkJCW1seDRfZW5fZGVhY3RpdmF0ZV9jcShwcml2LCBjcSk7CisJCQlnb3RvIGNxX2VycjsKKwkJfQorCQltbHg0X2VuX2FybV9jcShwcml2LCBjcSk7CisKKwkJKytyeF9pbmRleDsKKwl9CisKKwllcnIgPSBtbHg0X2VuX2FjdGl2YXRlX3J4X3JpbmdzKHByaXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byBhY3RpdmF0ZSBSWCByaW5nc1xuIik7CisJCWdvdG8gY3FfZXJyOworCX0KKworCWVyciA9IG1seDRfZW5fY29uZmlnX3Jzc19zdGVlcihwcml2KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgY29uZmlndXJpbmcgcnNzIHN0ZWVyaW5nXG4iKTsKKwkJZ290byByeF9lcnI7CisJfQorCisJLyogQ29uZmlndXJlIHR4IGNxJ3MgYW5kIHJpbmdzICovCisJZm9yIChpID0gMDsgaSA8IHByaXYtPnR4X3JpbmdfbnVtOyBpKyspIHsKKwkJLyogQ29uZmlndXJlIGNxICovCisJCWNxID0gJnByaXYtPnR4X2NxW2ldOworCQllcnIgPSBtbHg0X2VuX2FjdGl2YXRlX2NxKHByaXYsIGNxKTsKKwkJaWYgKGVycikgeworCQkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCBhbGxvY2F0aW5nIFR4IENRXG4iKTsKKwkJCWdvdG8gdHhfZXJyOworCQl9CisJCWVyciA9IG1seDRfZW5fc2V0X2NxX21vZGVyKHByaXYsIGNxKTsKKwkJaWYgKGVycikgeworCQkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCBzZXR0aW5nIGNxIG1vZGVyYXRpb24gcGFyYW1ldGVycyIpOworCQkJbWx4NF9lbl9kZWFjdGl2YXRlX2NxKHByaXYsIGNxKTsKKwkJCWdvdG8gdHhfZXJyOworCQl9CisJCW1seDRfZGJnKERSViwgcHJpdiwgIlJlc2V0dGluZyBpbmRleCBvZiBjb2xsYXBzZWQgQ1E6JWQgdG8gLTFcbiIsIGkpOworCQljcS0+YnVmLT53cWVfaW5kZXggPSBjcHVfdG9fYmUxNigweGZmZmYpOworCisJCS8qIENvbmZpZ3VyZSByaW5nICovCisJCXR4X3JpbmcgPSAmcHJpdi0+dHhfcmluZ1tpXTsKKwkJZXJyID0gbWx4NF9lbl9hY3RpdmF0ZV90eF9yaW5nKHByaXYsIHR4X3JpbmcsIGNxLT5tY3EuY3FuLAorCQkJCQkgICAgICAgcHJpdi0+cnhfcmluZ1swXS5zcnEuc3Jxbik7CisJCWlmIChlcnIpIHsKKwkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgYWxsb2NhdGluZyBUeCByaW5nXG4iKTsKKwkJCW1seDRfZW5fZGVhY3RpdmF0ZV9jcShwcml2LCBjcSk7CisJCQlnb3RvIHR4X2VycjsKKwkJfQorCQkvKiBTZXQgaW5pdGlhbCBvd25lcnNoaXAgb2YgYWxsIFR4IFRYQkJzIHRvIFNXICgxKSAqLworCQlmb3IgKGogPSAwOyBqIDwgdHhfcmluZy0+YnVmX3NpemU7IGogKz0gU1RBTVBfU1RSSURFKQorCQkJKigodTMyICopICh0eF9yaW5nLT5idWYgKyBqKSkgPSAweGZmZmZmZmZmOworCQkrK3R4X2luZGV4OworCX0KKworCS8qIENvbmZpZ3VyZSBwb3J0ICovCisJZXJyID0gbWx4NF9TRVRfUE9SVF9nZW5lcmFsKG1kZXYtPmRldiwgcHJpdi0+cG9ydCwKKwkJCQkgICAgcHJpdi0+cnhfc2tiX3NpemUgKyBFVEhfRkNTX0xFTiwKKwkJCQkgICAgbWRldi0+cHJvZmlsZS50eF9wYXVzZSwKKwkJCQkgICAgbWRldi0+cHJvZmlsZS50eF9wcHAsCisJCQkJICAgIG1kZXYtPnByb2ZpbGUucnhfcGF1c2UsCisJCQkJICAgIG1kZXYtPnByb2ZpbGUucnhfcHBwKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgc2V0dGluZyBwb3J0IGdlbmVyYWwgY29uZmlndXJhdGlvbnMiCisJCQkgICAgICAgIiBmb3IgcG9ydCAlZCwgd2l0aCBlcnJvciAlZFxuIiwgcHJpdi0+cG9ydCwgZXJyKTsKKwkJZ290byB0eF9lcnI7CisJfQorCS8qIFNldCBkZWZhdWx0IHFwIG51bWJlciAqLworCWVyciA9IG1seDRfU0VUX1BPUlRfcXBuX2NhbGMobWRldi0+ZGV2LCBwcml2LT5wb3J0LCBwcml2LT5iYXNlX3FwbiwgMCk7CisJaWYgKGVycikgeworCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIHNldHRpbmcgZGVmYXVsdCBxcCBudW1iZXJzXG4iKTsKKwkJZ290byB0eF9lcnI7CisJfQorCS8qIFNldCBwb3J0IG1hYyBudW1iZXIgKi8KKwltbHg0X2RiZyhEUlYsIHByaXYsICJTZXR0aW5nIG1hYyBmb3IgcG9ydCAlZFxuIiwgcHJpdi0+cG9ydCk7CisJZXJyID0gbWx4NF9yZWdpc3Rlcl9tYWMobWRldi0+ZGV2LCBwcml2LT5wb3J0LAorCQkJCXByaXYtPm1hYywgJnByaXYtPm1hY19pbmRleCk7CisJaWYgKGVycikgeworCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIHNldHRpbmcgcG9ydCBtYWNcbiIpOworCQlnb3RvIHR4X2VycjsKKwl9CisKKwkvKiBJbml0IHBvcnQgKi8KKwltbHg0X2RiZyhIVywgcHJpdiwgIkluaXRpYWxpemluZyBwb3J0XG4iKTsKKwllcnIgPSBtbHg0X0lOSVRfUE9SVChtZGV2LT5kZXYsIHByaXYtPnBvcnQpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCBJbml0aWFsaXppbmcgcG9ydFxuIik7CisJCWdvdG8gbWFjX2VycjsKKwl9CisKKwkvKiBTY2hlZHVsZSBtdWx0aWNhc3QgdGFzayB0byBwb3B1bGF0ZSBtdWx0aWNhc3QgbGlzdCAqLworCXF1ZXVlX3dvcmsobWRldi0+d29ya3F1ZXVlLCAmcHJpdi0+bWNhc3RfdGFzayk7CisKKwlwcml2LT5wb3J0X3VwID0gdHJ1ZTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCXJldHVybiAwOworCittYWNfZXJyOgorCW1seDRfdW5yZWdpc3Rlcl9tYWMobWRldi0+ZGV2LCBwcml2LT5wb3J0LCBwcml2LT5tYWNfaW5kZXgpOwordHhfZXJyOgorCXdoaWxlICh0eF9pbmRleC0tKSB7CisJCW1seDRfZW5fZGVhY3RpdmF0ZV90eF9yaW5nKHByaXYsICZwcml2LT50eF9yaW5nW3R4X2luZGV4XSk7CisJCW1seDRfZW5fZGVhY3RpdmF0ZV9jcShwcml2LCAmcHJpdi0+dHhfY3FbdHhfaW5kZXhdKTsKKwl9CisKKwltbHg0X2VuX3JlbGVhc2VfcnNzX3N0ZWVyKHByaXYpOworcnhfZXJyOgorCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX251bTsgaSsrKQorCQltbHg0X2VuX2RlYWN0aXZhdGVfcnhfcmluZyhwcml2LCAmcHJpdi0+cnhfcmluZ1tyeF9pbmRleF0pOworY3FfZXJyOgorCXdoaWxlIChyeF9pbmRleC0tKQorCQltbHg0X2VuX2RlYWN0aXZhdGVfY3EocHJpdiwgJnByaXYtPnJ4X2NxW3J4X2luZGV4XSk7CisKKwlyZXR1cm4gZXJyOyAvKiBuZWVkIHRvIGNsb3NlIGRldmljZXMgKi8KK30KKworCitzdGF0aWMgdm9pZCBtbHg0X2VuX3N0b3BfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJaW50IGk7CisKKwlpZiAoIXByaXYtPnBvcnRfdXApIHsKKwkJbWx4NF9kYmcoRFJWLCBwcml2LCAic3RvcCBwb3J0ICglZCkgY2FsbGVkIHdoaWxlIHBvcnQgYWxyZWFkeSBkb3duXG4iLAorCQkJIHByaXYtPnBvcnQpOworCQlyZXR1cm47CisJfQorCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIFN5bmNocm9uaXplIHdpdGggdHggcm91dGluZSAqLworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKKwlwcml2LT5wb3J0X3VwID0gZmFsc2U7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisKKwkvKiBjbG9zZSBwb3J0Ki8KKwltbHg0X0NMT1NFX1BPUlQobWRldi0+ZGV2LCBwcml2LT5wb3J0KTsKKworCS8qIFVucmVnaXN0ZXIgTWFjIGFkZHJlc3MgZm9yIHRoZSBwb3J0ICovCisJbWx4NF91bnJlZ2lzdGVyX21hYyhtZGV2LT5kZXYsIHByaXYtPnBvcnQsIHByaXYtPm1hY19pbmRleCk7CisKKwkvKiBGcmVlIFRYIFJpbmdzICovCisJZm9yIChpID0gMDsgaSA8IHByaXYtPnR4X3JpbmdfbnVtOyBpKyspIHsKKwkJbWx4NF9lbl9kZWFjdGl2YXRlX3R4X3JpbmcocHJpdiwgJnByaXYtPnR4X3JpbmdbaV0pOworCQltbHg0X2VuX2RlYWN0aXZhdGVfY3EocHJpdiwgJnByaXYtPnR4X2NxW2ldKTsKKwl9CisJbXNsZWVwKDEwKTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eF9yaW5nX251bTsgaSsrKQorCQltbHg0X2VuX2ZyZWVfdHhfYnVmKGRldiwgJnByaXYtPnR4X3JpbmdbaV0pOworCisJLyogRnJlZSBSU1MgcXBzICovCisJbWx4NF9lbl9yZWxlYXNlX3Jzc19zdGVlcihwcml2KTsKKworCS8qIEZyZWUgUlggUmluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19udW07IGkrKykgeworCQltbHg0X2VuX2RlYWN0aXZhdGVfcnhfcmluZyhwcml2LCAmcHJpdi0+cnhfcmluZ1tpXSk7CisJCXdoaWxlICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVELCAmcHJpdi0+cnhfY3FbaV0ubmFwaS5zdGF0ZSkpCisJCQltc2xlZXAoMSk7CisJCW1seDRfZW5fZGVhY3RpdmF0ZV9jcShwcml2LCAmcHJpdi0+cnhfY3FbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbHg0X2VuX3ByaXYsCisJCQkJCQkgd2F0Y2hkb2dfdGFzayk7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCisJbWx4NF9kYmcoRFJWLCBwcml2LCAiV2F0Y2hkb2cgdGFzayBjYWxsZWQgZm9yIHBvcnQgJWRcbiIsIHByaXYtPnBvcnQpOworCW1seDRfZW5fc3RvcF9wb3J0KGRldik7CisJaWYgKG1seDRfZW5fc3RhcnRfcG9ydChkZXYpKQorCSAgICBtbHg0X2VycihtZGV2LCAiRmFpbGVkIHJlc3RhcnRpbmcgcG9ydCAlZFxuIiwgcHJpdi0+cG9ydCk7Cit9CisKKworc3RhdGljIGludCBtbHg0X2VuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCWludCBpOworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmbWRldi0+c3RhdGVfbG9jayk7CisKKwlpZiAoIW1kZXYtPmRldmljZV91cCkgeworCQltbHg0X2VycihtZGV2LCAiQ2Fubm90IG9wZW4gLSBkZXZpY2UgZG93bi9kaXNhYmxlZFxuIik7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUmVzZXQgSFcgc3RhdGlzdGljcyBhbmQgcGVyZm9ybWFuY2UgY291bnRlcnMgKi8KKwlpZiAobWx4NF9lbl9EVU1QX0VUSF9TVEFUUyhtZGV2LCBwcml2LT5wb3J0LCAxKSkKKwkJbWx4NF9kYmcoSFcsIHByaXYsICJGYWlsZWQgZHVtcGluZyBzdGF0aXN0aWNzXG4iKTsKKworCW1lbXNldCgmcHJpdi0+c3RhdHMsIDAsIHNpemVvZihwcml2LT5zdGF0cykpOworCW1lbXNldCgmcHJpdi0+cHN0YXRzLCAwLCBzaXplb2YocHJpdi0+cHN0YXRzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dHhfcmluZ19udW07IGkrKykgeworCQlwcml2LT50eF9yaW5nW2ldLmJ5dGVzID0gMDsKKwkJcHJpdi0+dHhfcmluZ1tpXS5wYWNrZXRzID0gMDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJcHJpdi0+cnhfcmluZ1tpXS5ieXRlcyA9IDA7CisJCXByaXYtPnJ4X3JpbmdbaV0ucGFja2V0cyA9IDA7CisJfQorCisJbWx4NF9lbl9zZXRfZGVmYXVsdF9tb2RlcmF0aW9uKHByaXYpOworCWVyciA9IG1seDRfZW5fc3RhcnRfcG9ydChkZXYpOworCWlmIChlcnIpCisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgc3RhcnRpbmcgcG9ydDolZFxuIiwgcHJpdi0+cG9ydCk7CisKK291dDoKKwltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBtbHg0X2VuX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKworCWlmIChuZXRpZl9tc2dfaWZkb3duKHByaXYpKQorCQltbHg0X2luZm8obWRldiwgIkNsb3NlIGNhbGxlZCBmb3IgcG9ydDolZFxuIiwgcHJpdi0+cG9ydCk7CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKworCW1seDRfZW5fc3RvcF9wb3J0KGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCW11dGV4X3VubG9jaygmbWRldi0+c3RhdGVfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfZW5fZnJlZV9yZXNvdXJjZXMoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eF9yaW5nX251bTsgaSsrKSB7CisJCWlmIChwcml2LT50eF9yaW5nW2ldLnR4X2luZm8pCisJCQltbHg0X2VuX2Rlc3Ryb3lfdHhfcmluZyhwcml2LCAmcHJpdi0+dHhfcmluZ1tpXSk7CisJCWlmIChwcml2LT50eF9jcVtpXS5idWYpCisJCQltbHg0X2VuX2Rlc3Ryb3lfY3EocHJpdiwgJnByaXYtPnR4X2NxW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19udW07IGkrKykgeworCQlpZiAocHJpdi0+cnhfcmluZ1tpXS5yeF9pbmZvKQorCQkJbWx4NF9lbl9kZXN0cm95X3J4X3JpbmcocHJpdiwgJnByaXYtPnJ4X3JpbmdbaV0pOworCQlpZiAocHJpdi0+cnhfY3FbaV0uYnVmKQorCQkJbWx4NF9lbl9kZXN0cm95X2NxKHByaXYsICZwcml2LT5yeF9jcVtpXSk7CisJfQorfQorCitzdGF0aWMgaW50IG1seDRfZW5fYWxsb2NfcmVzb3VyY2VzKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3QgbWx4NF9lbl9wb3J0X3Byb2ZpbGUgKnByb2YgPSBwcml2LT5wcm9mOworCWludCBpOworCisJLyogQ3JlYXRlIHR4IFJpbmdzICovCisJZm9yIChpID0gMDsgaSA8IHByaXYtPnR4X3JpbmdfbnVtOyBpKyspIHsKKwkJaWYgKG1seDRfZW5fY3JlYXRlX2NxKHByaXYsICZwcml2LT50eF9jcVtpXSwKKwkJCQkgICAgICBwcm9mLT50eF9yaW5nX3NpemUsIGksIFRYKSkKKwkJCWdvdG8gZXJyOworCisJCWlmIChtbHg0X2VuX2NyZWF0ZV90eF9yaW5nKHByaXYsICZwcml2LT50eF9yaW5nW2ldLAorCQkJCQkgICBwcm9mLT50eF9yaW5nX3NpemUsIFRYQkJfU0laRSkpCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKiBDcmVhdGUgcnggUmluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19udW07IGkrKykgeworCQlpZiAobWx4NF9lbl9jcmVhdGVfY3EocHJpdiwgJnByaXYtPnJ4X2NxW2ldLAorCQkJCSAgICAgIHByb2YtPnJ4X3Jpbmdfc2l6ZSwgaSwgUlgpKQorCQkJZ290byBlcnI7CisKKwkJaWYgKG1seDRfZW5fY3JlYXRlX3J4X3JpbmcocHJpdiwgJnByaXYtPnJ4X3JpbmdbaV0sCisJCQkJCSAgIHByb2YtPnJ4X3Jpbmdfc2l6ZSwgcHJpdi0+c3RyaWRlKSkKKwkJCWdvdG8gZXJyOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBOSUMgcmVzb3VyY2VzXG4iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCit2b2lkIG1seDRfZW5fZGVzdHJveV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCisJbWx4NF9kYmcoRFJWLCBwcml2LCAiRGVzdHJveWluZyBuZXRkZXYgb24gcG9ydDolZFxuIiwgcHJpdi0+cG9ydCk7CisKKwkvKiBVbnJlZ2lzdGVyIGRldmljZSAtIHRoaXMgd2lsbCBjbG9zZSB0aGUgcG9ydCBpZiBpdCB3YXMgdXAgKi8KKwlpZiAocHJpdi0+cmVnaXN0ZXJlZCkKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCWlmIChwcml2LT5hbGxvY2F0ZWQpCisJCW1seDRfZnJlZV9od3FfcmVzKG1kZXYtPmRldiwgJnByaXYtPnJlcywgTUxYNF9FTl9QQUdFX1NJWkUpOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c3RhdHNfdGFzayk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmVmaWxsX3Rhc2spOworCS8qIGZsdXNoIGFueSBwZW5kaW5nIHRhc2sgZm9yIHRoaXMgbmV0ZGV2ICovCisJZmx1c2hfd29ya3F1ZXVlKG1kZXYtPndvcmtxdWV1ZSk7CisKKwkvKiBEZXRhY2ggdGhlIG5ldGRldiBzbyB0YXNrcyB3b3VsZCBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgaXQgKi8KKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwltZGV2LT5wbmRldltwcml2LT5wb3J0XSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKworCW1seDRfZW5fZnJlZV9yZXNvdXJjZXMocHJpdik7CisJZnJlZV9uZXRkZXYoZGV2KTsKK30KKworc3RhdGljIGludCBtbHg0X2VuX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlpbnQgZXJyID0gMDsKKworCW1seDRfZGJnKERSViwgcHJpdiwgIkNoYW5nZSBNVFUgY2FsbGVkIC0gY3VycmVudDolZCBuZXc6JWRcbiIsCisJCSBkZXYtPm10dSwgbmV3X210dSk7CisKKwlpZiAoKG5ld19tdHUgPCBNTFg0X0VOX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gcHJpdi0+bWF4X210dSkpIHsKKwkJbWx4NF9lcnIobWRldiwgIkJhZCBNVFUgc2l6ZTolZC5cbiIsIG5ld19tdHUpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlkZXYtPm10dSA9IG5ld19tdHU7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW11dGV4X2xvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCQlpZiAoIW1kZXYtPmRldmljZV91cCkgeworCQkJLyogTklDIGlzIHByb2JhYmx5IHJlc3RhcnRpbmcgLSBsZXQgd2F0Y2hkb2cgdGFzayByZXNldAorCQkJICogdGhlIHBvcnQgKi8KKwkJCW1seDRfZGJnKERSViwgcHJpdiwgIkNoYW5nZSBNVFUgY2FsbGVkIHdpdGggY2FyZCBkb3duIT9cbiIpOworCQl9IGVsc2UgeworCQkJbWx4NF9lbl9zdG9wX3BvcnQoZGV2KTsKKwkJCW1seDRfZW5fc2V0X2RlZmF1bHRfbW9kZXJhdGlvbihwcml2KTsKKwkJCWVyciA9IG1seDRfZW5fc3RhcnRfcG9ydChkZXYpOworCQkJaWYgKGVycikgeworCQkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgcmVzdGFydGluZyBwb3J0OiVkXG4iLAorCQkJCQkgcHJpdi0+cG9ydCk7CisJCQkJcXVldWVfd29yayhtZGV2LT53b3JrcXVldWUsICZwcml2LT53YXRjaGRvZ190YXNrKTsKKwkJCX0KKwkJfQorCQltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG1seDRfZW5faW5pdF9uZXRkZXYoc3RydWN0IG1seDRfZW5fZGV2ICptZGV2LCBpbnQgcG9ydCwKKwkJCXN0cnVjdCBtbHg0X2VuX3BvcnRfcHJvZmlsZSAqcHJvZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXY7CisJaW50IGk7CisJaW50IGVycjsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbWx4NF9lbl9wcml2KSk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCW1seDRfZXJyKG1kZXYsICJOZXQgZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJU0VUX05FVERFVl9ERVYoZGV2LCAmbWRldi0+ZGV2LT5wZGV2LT5kZXYpOworCisJLyoKKwkgKiBJbml0aWFsaXplIGRyaXZlciBwcml2YXRlIGRhdGEKKwkgKi8KKworCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IG1seDRfZW5fcHJpdikpOworCXByaXYtPmRldiA9IGRldjsKKwlwcml2LT5tZGV2ID0gbWRldjsKKwlwcml2LT5wcm9mID0gcHJvZjsKKwlwcml2LT5wb3J0ID0gcG9ydDsKKwlwcml2LT5wb3J0X3VwID0gZmFsc2U7CisJcHJpdi0+cnhfY3N1bSA9IDE7CisJcHJpdi0+ZmxhZ3MgPSBwcm9mLT5mbGFnczsKKwlwcml2LT50eF9yaW5nX251bSA9IHByb2YtPnR4X3JpbmdfbnVtOworCXByaXYtPnJ4X3JpbmdfbnVtID0gcHJvZi0+cnhfcmluZ19udW07CisJcHJpdi0+bWNfbGlzdCA9IE5VTEw7CisJcHJpdi0+bWFjX2luZGV4ID0gLTE7CisJcHJpdi0+bXNnX2VuYWJsZSA9IE1MWDRfRU5fTVNHX0xFVkVMOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5zdGF0c19sb2NrKTsKKwlJTklUX1dPUksoJnByaXYtPm1jYXN0X3Rhc2ssIG1seDRfZW5fZG9fc2V0X211bHRpY2FzdCk7CisJSU5JVF9XT1JLKCZwcml2LT5tYWNfdGFzaywgbWx4NF9lbl9kb19zZXRfbWFjKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cmVmaWxsX3Rhc2ssIG1seDRfZW5fcnhfcmVmaWxsKTsKKwlJTklUX1dPUksoJnByaXYtPndhdGNoZG9nX3Rhc2ssIG1seDRfZW5fcmVzdGFydCk7CisJSU5JVF9XT1JLKCZwcml2LT5saW5rc3RhdGVfdGFzaywgbWx4NF9lbl9saW5rc3RhdGUpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zdGF0c190YXNrLCBtbHg0X2VuX2RvX2dldF9zdGF0cyk7CisKKwkvKiBRdWVyeSBmb3IgZGVmYXVsdCBtYWMgYW5kIG1heCBtdHUgKi8KKwlwcml2LT5tYXhfbXR1ID0gbWRldi0+ZGV2LT5jYXBzLmV0aF9tdHVfY2FwW3ByaXYtPnBvcnRdOworCXByaXYtPm1hYyA9IG1kZXYtPmRldi0+Y2Fwcy5kZWZfbWFjW3ByaXYtPnBvcnRdOworCWlmIChJTExFR0FMX01BQyhwcml2LT5tYWMpKSB7CisJCW1seDRfZXJyKG1kZXYsICJQb3J0OiAlZCwgaW52YWxpZCBtYWMgYnVybmVkOiAweCVsbHgsIHF1aXRpbmdcbiIsCisJCQkgcHJpdi0+cG9ydCwgcHJpdi0+bWFjKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdi0+c3RyaWRlID0gcm91bmR1cF9wb3dfb2ZfdHdvKHNpemVvZihzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjKSArCisJCQkJCSAgRFNfU0laRSAqIE1MWDRfRU5fTUFYX1JYX0ZSQUdTKTsKKwllcnIgPSBtbHg0X2VuX2FsbG9jX3Jlc291cmNlcyhwcml2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIFBvcHVsYXRlIFJ4IGRlZmF1bHQgUlNTIG1hcHBpbmdzICovCisJbWx4NF9lbl9zZXRfZGVmYXVsdF9yc3NfbWFwKHByaXYsICZwcml2LT5yc3NfbWFwLCBwcml2LT5yeF9yaW5nX251bSAqCisJCQkJCQlSU1NfRkFDVE9SLCBwcml2LT5yeF9yaW5nX251bSk7CisJLyogQWxsb2NhdGUgcGFnZSBmb3IgcmVjZWl2ZSByaW5ncyAqLworCWVyciA9IG1seDRfYWxsb2NfaHdxX3JlcyhtZGV2LT5kZXYsICZwcml2LT5yZXMsCisJCQkJTUxYNF9FTl9QQUdFX1NJWkUsIE1MWDRfRU5fUEFHRV9TSVpFKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcGFnZSBmb3IgcnggcXBzXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXByaXYtPmFsbG9jYXRlZCA9IDE7CisKKwkvKiBQb3B1bGF0ZSBUeCBwcmlvcml0eSBtYXBwaW5ncyAqLworCW1seDRfZW5fc2V0X3ByaW9fbWFwKHByaXYsIHByaXYtPnR4X3ByaW9fbWFwLCBwcm9mLT50eF9yaW5nX251bSk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgbmV0ZGV2IGVudHJ5IHBvaW50cworCSAqLworCisJZGV2LT5vcGVuID0gJm1seDRfZW5fb3BlbjsKKwlkZXYtPnN0b3AgPSAmbWx4NF9lbl9jbG9zZTsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZtbHg0X2VuX3htaXQ7CisJZGV2LT5nZXRfc3RhdHMgPSAmbWx4NF9lbl9nZXRfc3RhdHM7CisJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbWx4NF9lbl9zZXRfbXVsdGljYXN0OworCWRldi0+c2V0X21hY19hZGRyZXNzID0gJm1seDRfZW5fc2V0X21hYzsKKwlkZXYtPmNoYW5nZV9tdHUgPSAmbWx4NF9lbl9jaGFuZ2VfbXR1OworCWRldi0+dHhfdGltZW91dCA9ICZtbHg0X2VuX3R4X3RpbWVvdXQ7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IE1MWDRfRU5fV0FUQ0hET0dfVElNRU9VVDsKKwlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBtbHg0X2VuX3ZsYW5fcnhfcmVnaXN0ZXI7CisJZGV2LT52bGFuX3J4X2FkZF92aWQgPSBtbHg0X2VuX3ZsYW5fcnhfYWRkX3ZpZDsKKwlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBtbHg0X2VuX3ZsYW5fcnhfa2lsbF92aWQ7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwlkZXYtPnBvbGxfY29udHJvbGxlciA9IG1seDRfZW5fbmV0cG9sbDsKKyNlbmRpZgorCVNFVF9FVEhUT09MX09QUyhkZXYsICZtbHg0X2VuX2V0aHRvb2xfb3BzKTsKKworCS8qIFNldCBkZWZ1YWx0IE1BQyAqLworCWRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJZGV2LT5kZXZfYWRkcltFVEhfQUxFTiAtIDEgLSBpXSA9CisJCSh1OCkgKHByaXYtPm1hYyA+PiAoOCAqIGkpKTsKKworCS8qCisJICogU2V0IGRyaXZlciBmZWF0dXJlcworCSAqLworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCQkgTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJCSBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCWlmIChtZGV2LT5wcm9maWxlLm51bV9scm8pCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJaWYgKG1kZXYtPkxTT19zdXBwb3J0KSB7CisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCX0KKworCW1kZXYtPnBuZGV2W3BvcnRdID0gZGV2OworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKG1kZXYsICJOZXRkZXYgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlwcml2LT5yZWdpc3RlcmVkID0gMTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsobWRldi0+d29ya3F1ZXVlLCAmcHJpdi0+c3RhdHNfdGFzaywgU1RBVFNfREVMQVkpOworCXJldHVybiAwOworCitvdXQ6CisJbWx4NF9lbl9kZXN0cm95X25ldGRldihkZXYpOworCXJldHVybiBlcnI7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fcGFyYW1zLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3BhcmFtcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTY5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3BhcmFtcy5jCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSAibWx4NF9lbi5oIgorI2luY2x1ZGUgImVuX3BvcnQuaCIKKworI2RlZmluZSBNTFg0X0VOX1BBUk1fSU5UKFgsIGRlZl92YWwsIGRlc2MpIFwKKwlzdGF0aWMgdW5zaWduZWQgaW50IFggPSBkZWZfdmFsO1wKKwltb2R1bGVfcGFyYW0oWCAsIHVpbnQsIDA0NDQpOyBcCisJTU9EVUxFX1BBUk1fREVTQyhYLCBkZXNjKTsKKworCisvKgorICogRGV2aWNlIHNjb3BlIG1vZHVsZSBwYXJhbWV0ZXJzCisgKi8KKworCisvKiBVc2UgYSBYT1IgcmF0aGVybiB0aGFuIFRvZXBsaXR6IGhhc2ggZnVuY3Rpb24gZm9yIFJTUyAqLworTUxYNF9FTl9QQVJNX0lOVChyc3NfeG9yLCAwLCAiVXNlIFhPUiBoYXNoIGZ1bmN0aW9uIGZvciBSU1MiKTsKKworLyogUlNTIGhhc2ggdHlwZSBtYXNrIC0gZGVmYXVsdCB0byA8c2FkZHIsIGRhZGRyLCBzcG9ydCwgZHBvcnQ+ICovCitNTFg0X0VOX1BBUk1fSU5UKHJzc19tYXNrLCAweGYsICJSU1MgaGFzaCB0eXBlIGJpdG1hc2siKTsKKworLyogTnVtYmVyIG9mIExSTyBzZXNzaW9ucyBwZXIgUnggcmluZyAocm91bmRlZCB1cCB0byBhIHBvd2VyIG9mIHR3bykgKi8KK01MWDRfRU5fUEFSTV9JTlQobnVtX2xybywgTUxYNF9FTl9NQVhfTFJPX0RFU0NSSVBUT1JTLAorCQkgIk51bWJlciBvZiBMUk8gc2Vzc2lvbnMgcGVyIHJpbmcgb3IgZGlzYWJsZWQgKDApIik7CisKKy8qIFByaW9yaXR5IHBhdXNpbmcgKi8KK01MWDRfRU5fUEFSTV9JTlQocHB0eCwgTUxYNF9FTl9ERUZfVFhfUEFVU0UsCisJCSAiUGF1c2UgcG9saWN5IG9uIFRYOiAwIG5ldmVyIGdlbmVyYXRlIHBhdXNlIGZyYW1lcyAiCisJCSAiMSBnZW5lcmF0ZSBwYXVzZSBmcmFtZXMgYWNjb3JkaW5nIHRvIFJYIGJ1ZmZlciB0aHJlc2hvbGQiKTsKK01MWDRfRU5fUEFSTV9JTlQocHByeCwgTUxYNF9FTl9ERUZfUlhfUEFVU0UsCisJCSAiUGF1c2UgcG9saWN5IG9uIFJYOiAwIGlnbm9yZSByZWNlaXZlZCBwYXVzZSBmcmFtZXMgIgorCQkgIjEgcmVzcGVjdCByZWNlaXZlZCBwYXVzZSBmcmFtZXMiKTsKK01MWDRfRU5fUEFSTV9JTlQocGZjdHgsIDAsICJQcmlvcml0eSBiYXNlZCBGbG93IENvbnRyb2wgcG9saWN5IG9uIFRYWzc6MF0uIgorCQkJICAgIiBQZXIgcHJpb3JpdHkgYml0IG1hc2siKTsKK01MWDRfRU5fUEFSTV9JTlQocGZjcngsIDAsICJQcmlvcml0eSBiYXNlZCBGbG93IENvbnRyb2wgcG9saWN5IG9uIFJYWzc6MF0uIgorCQkJICAgIiBQZXIgcHJpb3JpdHkgYml0IG1hc2siKTsKKworLyogSW50ZXJydXB0IG1vZGVyYXRpb24gdHVubmluZyAqLworTUxYNF9FTl9QQVJNX0lOVChyeF9tb2Rlcl9jbnQsIE1MWDRfRU5fQVVUT19DT05GLAorCSAgICAgICAiTWF4IGNvYWxlc2NlZCBkZXNjcmlwdG9ycyBmb3IgUnggaW50ZXJydXB0IG1vZGVyYXRpb24iKTsKK01MWDRfRU5fUEFSTV9JTlQocnhfbW9kZXJfdGltZSwgTUxYNF9FTl9BVVRPX0NPTkYsCisJICAgICAgICJUaW1lb3V0IGZvbGxvd2luZyBsYXN0IHBhY2tldCBmb3IgUnggaW50ZXJydXB0IG1vZGVyYXRpb24iKTsKK01MWDRfRU5fUEFSTV9JTlQoYXV0b19tb2RlciwgMSwgIkVuYWJsZSBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uIik7CisKK01MWDRfRU5fUEFSTV9JTlQocnhfcmluZ19udW0xLCAwLCAiTnVtYmVyIG9yIFJ4IHJpbmdzIGZvciBwb3J0IDEgKDAgPSAjY29yZXMpIik7CitNTFg0X0VOX1BBUk1fSU5UKHJ4X3JpbmdfbnVtMiwgMCwgIk51bWJlciBvciBSeCByaW5ncyBmb3IgcG9ydCAyICgwID0gI2NvcmVzKSIpOworCitNTFg0X0VOX1BBUk1fSU5UKHR4X3Jpbmdfc2l6ZTEsIE1MWDRfRU5fQVVUT19DT05GLCAiVHggcmluZyBzaXplIGZvciBwb3J0IDEiKTsKK01MWDRfRU5fUEFSTV9JTlQodHhfcmluZ19zaXplMiwgTUxYNF9FTl9BVVRPX0NPTkYsICJUeCByaW5nIHNpemUgZm9yIHBvcnQgMiIpOworTUxYNF9FTl9QQVJNX0lOVChyeF9yaW5nX3NpemUxLCBNTFg0X0VOX0FVVE9fQ09ORiwgIlJ4IHJpbmcgc2l6ZSBmb3IgcG9ydCAxIik7CitNTFg0X0VOX1BBUk1fSU5UKHJ4X3Jpbmdfc2l6ZTIsIE1MWDRfRU5fQVVUT19DT05GLCAiUnggcmluZyBzaXplIGZvciBwb3J0IDIiKTsKKworCitpbnQgbWx4NF9lbl9nZXRfcHJvZmlsZShzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYpCit7CisJc3RydWN0IG1seDRfZW5fcHJvZmlsZSAqcGFyYW1zID0gJm1kZXYtPnByb2ZpbGU7CisKKwlwYXJhbXMtPnJ4X21vZGVyX2NudCA9IG1pbl90KGludCwgcnhfbW9kZXJfY250LCBNTFg0X0VOX0FVVE9fQ09ORik7CisJcGFyYW1zLT5yeF9tb2Rlcl90aW1lID0gbWluX3QoaW50LCByeF9tb2Rlcl90aW1lLCBNTFg0X0VOX0FVVE9fQ09ORik7CisJcGFyYW1zLT5hdXRvX21vZGVyID0gYXV0b19tb2RlcjsKKwlwYXJhbXMtPnJzc194b3IgPSAocnNzX3hvciAhPSAwKTsKKwlwYXJhbXMtPnJzc19tYXNrID0gcnNzX21hc2sgJiAweDFmOworCXBhcmFtcy0+bnVtX2xybyA9IG1pbl90KGludCwgbnVtX2xybyAsIE1MWDRfRU5fTUFYX0xST19ERVNDUklQVE9SUyk7CisJcGFyYW1zLT5yeF9wYXVzZSA9IHBwcng7CisJcGFyYW1zLT5yeF9wcHAgPSBwZmNyeDsKKwlwYXJhbXMtPnR4X3BhdXNlID0gcHB0eDsKKwlwYXJhbXMtPnR4X3BwcCA9IHBmY3R4OworCWlmIChwYXJhbXMtPnJ4X3BwcCB8fCBwYXJhbXMtPnR4X3BwcCkgeworCQlwYXJhbXMtPnByb2ZbMV0udHhfcmluZ19udW0gPSBNTFg0X0VOX1RYX1JJTkdfTlVNOworCQlwYXJhbXMtPnByb2ZbMl0udHhfcmluZ19udW0gPSBNTFg0X0VOX1RYX1JJTkdfTlVNOworCX0gZWxzZSB7CisJCXBhcmFtcy0+cHJvZlsxXS50eF9yaW5nX251bSA9IDE7CisJCXBhcmFtcy0+cHJvZlsyXS50eF9yaW5nX251bSA9IDE7CisJfQorCXBhcmFtcy0+cHJvZlsxXS5yeF9yaW5nX251bSA9IG1pbl90KGludCwgcnhfcmluZ19udW0xLCBNQVhfUlhfUklOR1MpOworCXBhcmFtcy0+cHJvZlsyXS5yeF9yaW5nX251bSA9IG1pbl90KGludCwgcnhfcmluZ19udW0yLCBNQVhfUlhfUklOR1MpOworCisJaWYgKHR4X3Jpbmdfc2l6ZTEgPT0gTUxYNF9FTl9BVVRPX0NPTkYpCisJCXR4X3Jpbmdfc2l6ZTEgPSBNTFg0X0VOX0RFRl9UWF9SSU5HX1NJWkU7CisJcGFyYW1zLT5wcm9mWzFdLnR4X3Jpbmdfc2l6ZSA9CisJCSh0eF9yaW5nX3NpemUxIDwgTUxYNF9FTl9NSU5fVFhfU0laRSkgPworCQkgTUxYNF9FTl9NSU5fVFhfU0laRSA6IHJvdW5kdXBfcG93X29mX3R3byh0eF9yaW5nX3NpemUxKTsKKworCWlmICh0eF9yaW5nX3NpemUyID09IE1MWDRfRU5fQVVUT19DT05GKQorCQl0eF9yaW5nX3NpemUyID0gTUxYNF9FTl9ERUZfVFhfUklOR19TSVpFOworCXBhcmFtcy0+cHJvZlsyXS50eF9yaW5nX3NpemUgPQorCQkodHhfcmluZ19zaXplMiA8IE1MWDRfRU5fTUlOX1RYX1NJWkUpID8KKwkJIE1MWDRfRU5fTUlOX1RYX1NJWkUgOiByb3VuZHVwX3Bvd19vZl90d28odHhfcmluZ19zaXplMik7CisKKwlpZiAocnhfcmluZ19zaXplMSA9PSBNTFg0X0VOX0FVVE9fQ09ORikKKwkJcnhfcmluZ19zaXplMSA9IE1MWDRfRU5fREVGX1JYX1JJTkdfU0laRTsKKwlwYXJhbXMtPnByb2ZbMV0ucnhfcmluZ19zaXplID0KKwkJKHJ4X3Jpbmdfc2l6ZTEgPCBNTFg0X0VOX01JTl9SWF9TSVpFKSA/CisJCSBNTFg0X0VOX01JTl9SWF9TSVpFIDogcm91bmR1cF9wb3dfb2ZfdHdvKHJ4X3Jpbmdfc2l6ZTEpOworCisJaWYgKHJ4X3Jpbmdfc2l6ZTIgPT0gTUxYNF9FTl9BVVRPX0NPTkYpCisJCXJ4X3Jpbmdfc2l6ZTIgPSBNTFg0X0VOX0RFRl9SWF9SSU5HX1NJWkU7CisJcGFyYW1zLT5wcm9mWzJdLnJ4X3Jpbmdfc2l6ZSA9CisJCShyeF9yaW5nX3NpemUyIDwgTUxYNF9FTl9NSU5fUlhfU0laRSkgPworCQkgTUxYNF9FTl9NSU5fUlhfU0laRSA6IHJvdW5kdXBfcG93X29mX3R3byhyeF9yaW5nX3NpemUyKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogRXRodG9vbCBzdXBwb3J0CisgKi8KKworc3RhdGljIHZvaWQgbWx4NF9lbl91cGRhdGVfbHJvX3N0YXRzKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisKKwlwcml2LT5wb3J0X3N0YXRzLmxyb19hZ2dyZWdhdGVkID0gMDsKKwlwcml2LT5wb3J0X3N0YXRzLmxyb19mbHVzaGVkID0gMDsKKwlwcml2LT5wb3J0X3N0YXRzLmxyb19ub19kZXNjID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX251bTsgaSsrKSB7CisJCXByaXYtPnBvcnRfc3RhdHMubHJvX2FnZ3JlZ2F0ZWQgKz0gcHJpdi0+cnhfcmluZ1tpXS5scm8uc3RhdHMuYWdncmVnYXRlZDsKKwkJcHJpdi0+cG9ydF9zdGF0cy5scm9fZmx1c2hlZCArPSBwcml2LT5yeF9yaW5nW2ldLmxyby5zdGF0cy5mbHVzaGVkOworCQlwcml2LT5wb3J0X3N0YXRzLmxyb19ub19kZXNjICs9IHByaXYtPnJ4X3JpbmdbaV0ubHJvLnN0YXRzLm5vX2Rlc2M7CisJfQorfQorCitzdGF0aWMgdm9pZAorbWx4NF9lbl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisKKwlzcHJpbnRmKGRydmluZm8tPmRyaXZlciwgRFJWX05BTUUgIiAoJXMpIiwgbWRldi0+ZGV2LT5ib2FyZF9pZCk7CisJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIiwgMzIpOworCXNwcmludGYoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIiVkLiVkLiVkIiwKKwkJKHUxNikgKG1kZXYtPmRldi0+Y2Fwcy5md192ZXIgPj4gMzIpLAorCQkodTE2KSAoKG1kZXYtPmRldi0+Y2Fwcy5md192ZXIgPj4gMTYpICYgMHhmZmZmKSwKKwkJKHUxNikgKG1kZXYtPmRldi0+Y2Fwcy5md192ZXIgJiAweGZmZmYpKTsKKwlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShtZGV2LT5kZXYtPnBkZXYpLCAzMik7CisJZHJ2aW5mby0+bl9zdGF0cyA9IDA7CisJZHJ2aW5mby0+cmVnZHVtcF9sZW4gPSAwOworCWRydmluZm8tPmVlZHVtcF9sZW4gPSAwOworfQorCitzdGF0aWMgdTMyIG1seDRfZW5fZ2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAhPSAwOworfQorCitzdGF0aWMgaW50IG1seDRfZW5fc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChkYXRhKSB7CisJCWlmICghcHJpdi0+bWRldi0+TFNPX3N1cHBvcnQpCisJCQlyZXR1cm4gLUVQRVJNOworCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisJfSBlbHNlCisJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgbWx4NF9lbl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBwcml2LT5yeF9jc3VtOworfQorCitzdGF0aWMgaW50IG1seDRfZW5fc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJcHJpdi0+cnhfY3N1bSA9IChkYXRhICE9IDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciBtYWluX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0geworCSJyeF9wYWNrZXRzIiwgInR4X3BhY2tldHMiLCAicnhfYnl0ZXMiLCAidHhfYnl0ZXMiLCAicnhfZXJyb3JzIiwKKwkidHhfZXJyb3JzIiwgInJ4X2Ryb3BwZWQiLCAidHhfZHJvcHBlZCIsICJtdWx0aWNhc3QiLCAiY29sbGlzaW9ucyIsCisJInJ4X2xlbmd0aF9lcnJvcnMiLCAicnhfb3Zlcl9lcnJvcnMiLCAicnhfY3JjX2Vycm9ycyIsCisJInJ4X2ZyYW1lX2Vycm9ycyIsICJyeF9maWZvX2Vycm9ycyIsICJyeF9taXNzZWRfZXJyb3JzIiwKKwkidHhfYWJvcnRlZF9lcnJvcnMiLCAidHhfY2Fycmllcl9lcnJvcnMiLCAidHhfZmlmb19lcnJvcnMiLAorCSJ0eF9oZWFydGJlYXRfZXJyb3JzIiwgInR4X3dpbmRvd19lcnJvcnMiLAorCisJLyogcG9ydCBzdGF0aXN0aWNzICovCisJImxyb19hZ2dyZWdhdGVkIiwgImxyb19mbHVzaGVkIiwgImxyb19ub19kZXNjIiwgInRzb19wYWNrZXRzIiwKKwkicXVldWVfc3RvcHBlZCIsICJ3YWtlX3F1ZXVlIiwgInR4X3RpbWVvdXQiLCAicnhfYWxsb2NfZmFpbGVkIiwKKwkicnhfY3N1bV9nb29kIiwgInJ4X2NzdW1fbm9uZSIsICJ0eF9jaGtzdW1fb2ZmbG9hZCIsCisKKwkvKiBwYWNrZXQgc3RhdGlzdGljcyAqLworCSJicm9hZGNhc3QiLCAicnhfcHJpb18wIiwgInJ4X3ByaW9fMSIsICJyeF9wcmlvXzIiLCAicnhfcHJpb18zIiwKKwkicnhfcHJpb180IiwgInJ4X3ByaW9fNSIsICJyeF9wcmlvXzYiLCAicnhfcHJpb183IiwgInR4X3ByaW9fMCIsCisJInR4X3ByaW9fMSIsICJ0eF9wcmlvXzIiLCAidHhfcHJpb18zIiwgInR4X3ByaW9fNCIsICJ0eF9wcmlvXzUiLAorCSJ0eF9wcmlvXzYiLCAidHhfcHJpb183IiwKK307CisjZGVmaW5lIE5VTV9NQUlOX1NUQVRTCTIxCisjZGVmaW5lIE5VTV9BTExfU1RBVFMJKE5VTV9NQUlOX1NUQVRTICsgTlVNX1BPUlRfU1RBVFMgKyBOVU1fUEtUX1NUQVRTICsgTlVNX1BFUkZfU1RBVFMpCisKK3N0YXRpYyB1MzIgbWx4NF9lbl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgbWx4NF9lbl9wcml2ICopIG5ldGRldl9wcml2KGRldikpLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsKQoreworCSgoc3RydWN0IG1seDRfZW5fcHJpdiAqKSBuZXRkZXZfcHJpdihkZXYpKS0+bXNnX2VuYWJsZSA9IHZhbDsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXdvbC0+c3VwcG9ydGVkID0gMDsKKwl3b2wtPndvbG9wdHMgPSAwOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG1seDRfZW5fZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoc3NldCAhPSBFVEhfU1NfU1RBVFMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBOVU1fQUxMX1NUQVRTICsgKHByaXYtPnR4X3JpbmdfbnVtICsgcHJpdi0+cnhfcmluZ19udW0pICogMjsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHVpbnQ2NF90ICpkYXRhKQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpbmRleCA9IDA7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YXRzX2xvY2spOworCisJbWx4NF9lbl91cGRhdGVfbHJvX3N0YXRzKHByaXYpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9NQUlOX1NUQVRTOyBpKyspCisJCWRhdGFbaW5kZXgrK10gPSAoKHVuc2lnbmVkIGxvbmcgKikgJnByaXYtPnN0YXRzKVtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1BPUlRfU1RBVFM7IGkrKykKKwkJZGF0YVtpbmRleCsrXSA9ICgodW5zaWduZWQgbG9uZyAqKSAmcHJpdi0+cG9ydF9zdGF0cylbaV07CisJZm9yIChpID0gMDsgaSA8IHByaXYtPnR4X3JpbmdfbnVtOyBpKyspIHsKKwkJZGF0YVtpbmRleCsrXSA9IHByaXYtPnR4X3JpbmdbaV0ucGFja2V0czsKKwkJZGF0YVtpbmRleCsrXSA9IHByaXYtPnR4X3JpbmdbaV0uYnl0ZXM7CisJfQorCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX251bTsgaSsrKSB7CisJCWRhdGFbaW5kZXgrK10gPSBwcml2LT5yeF9yaW5nW2ldLnBhY2tldHM7CisJCWRhdGFbaW5kZXgrK10gPSBwcml2LT5yeF9yaW5nW2ldLmJ5dGVzOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1BLVF9TVEFUUzsgaSsrKQorCQlkYXRhW2luZGV4KytdID0gKCh1bnNpZ25lZCBsb25nICopICZwcml2LT5wa3N0YXRzKVtpXTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RhdHNfbG9jayk7CisKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaW5kZXggPSAwOworCWludCBpOworCisJaWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpCisJCXJldHVybjsKKworCS8qIEFkZCBtYWluIGNvdW50ZXJzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9NQUlOX1NUQVRTOyBpKyspCisJCXN0cmNweShkYXRhICsgKGluZGV4KyspICogRVRIX0dTVFJJTkdfTEVOLCBtYWluX3N0cmluZ3NbaV0pOworCWZvciAoaSA9IDA7IGkgPCBOVU1fUE9SVF9TVEFUUzsgaSsrKQorCQlzdHJjcHkoZGF0YSArIChpbmRleCsrKSAqIEVUSF9HU1RSSU5HX0xFTiwKKwkJCW1haW5fc3RyaW5nc1tpICsgTlVNX01BSU5fU1RBVFNdKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dHhfcmluZ19udW07IGkrKykgeworCQlzcHJpbnRmKGRhdGEgKyAoaW5kZXgrKykgKiBFVEhfR1NUUklOR19MRU4sCisJCQkidHglZF9wYWNrZXRzIiwgaSk7CisJCXNwcmludGYoZGF0YSArIChpbmRleCsrKSAqIEVUSF9HU1RSSU5HX0xFTiwKKwkJCSJ0eCVkX2J5dGVzIiwgaSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX251bTsgaSsrKSB7CisJCXNwcmludGYoZGF0YSArIChpbmRleCsrKSAqIEVUSF9HU1RSSU5HX0xFTiwKKwkJCSJyeCVkX3BhY2tldHMiLCBpKTsKKwkJc3ByaW50ZihkYXRhICsgKGluZGV4KyspICogRVRIX0dTVFJJTkdfTEVOLAorCQkJInJ4JWRfYnl0ZXMiLCBpKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5VTV9QS1RfU1RBVFM7IGkrKykKKwkJc3RyY3B5KGRhdGEgKyAoaW5kZXgrKykgKiBFVEhfR1NUUklOR19MRU4sCisJCQltYWluX3N0cmluZ3NbaSArIE5VTV9NQUlOX1NUQVRTICsgTlVNX1BPUlRfU1RBVFNdKTsKK30KKworc3RhdGljIGludCBtbHg0X2VuX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCWNtZC0+YWR2ZXJ0aXNpbmcgPSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0gZWxzZSB7CisJCWNtZC0+c3BlZWQgPSAtMTsKKwkJY21kLT5kdXBsZXggPSAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lbl9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJaWYgKChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHx8CisJICAgIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fCAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE5vdGhpbmcgdG8gY2hhbmdlICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lbl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgPSAwOworCWNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gMDsKKwljb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IHByaXYtPnJ4X3VzZWNzOworCWNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gcHJpdi0+cnhfZnJhbWVzOworCisJY29hbC0+cGt0X3JhdGVfbG93ID0gcHJpdi0+cGt0X3JhdGVfbG93OworCWNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzX2xvdyA9IHByaXYtPnJ4X3VzZWNzX2xvdzsKKwljb2FsLT5wa3RfcmF0ZV9oaWdoID0gcHJpdi0+cGt0X3JhdGVfaGlnaDsKKwljb2FsLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoID0gcHJpdi0+cnhfdXNlY3NfaGlnaDsKKwljb2FsLT5yYXRlX3NhbXBsZV9pbnRlcnZhbCA9IHByaXYtPnNhbXBsZV9pbnRlcnZhbDsKKwljb2FsLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBwcml2LT5hZGFwdGl2ZV9yeF9jb2FsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1seDRfZW5fc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyLCBpOworCisJcHJpdi0+cnhfZnJhbWVzID0gKGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID09CisJCQkgICBNTFg0X0VOX0FVVE9fQ09ORikgPworCQkJCU1MWDRfRU5fUlhfQ09BTF9UQVJHRVQgLworCQkJCXByaXYtPmRldi0+bXR1ICsgMSA6CisJCQkJY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisJcHJpdi0+cnhfdXNlY3MgPSAoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPT0KKwkJCSAgTUxYNF9FTl9BVVRPX0NPTkYpID8KKwkJCQlNTFg0X0VOX1JYX0NPQUxfVElNRSA6CisJCQkJY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CisKKwkvKiBTZXQgYWRhcHRpdmUgY29hbGVzY2luZyBwYXJhbXMgKi8KKwlwcml2LT5wa3RfcmF0ZV9sb3cgPSBjb2FsLT5wa3RfcmF0ZV9sb3c7CisJcHJpdi0+cnhfdXNlY3NfbG93ID0gY29hbC0+cnhfY29hbGVzY2VfdXNlY3NfbG93OworCXByaXYtPnBrdF9yYXRlX2hpZ2ggPSBjb2FsLT5wa3RfcmF0ZV9oaWdoOworCXByaXYtPnJ4X3VzZWNzX2hpZ2ggPSBjb2FsLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoOworCXByaXYtPnNhbXBsZV9pbnRlcnZhbCA9IGNvYWwtPnJhdGVfc2FtcGxlX2ludGVydmFsOworCXByaXYtPmFkYXB0aXZlX3J4X2NvYWwgPSBjb2FsLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7CisJcHJpdi0+bGFzdF9tb2Rlcl90aW1lID0gTUxYNF9FTl9BVVRPX0NPTkY7CisJaWYgKHByaXYtPmFkYXB0aXZlX3J4X2NvYWwpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJcHJpdi0+cnhfY3FbaV0ubW9kZXJfY250ID0gcHJpdi0+cnhfZnJhbWVzOworCQlwcml2LT5yeF9jcVtpXS5tb2Rlcl90aW1lID0gcHJpdi0+cnhfdXNlY3M7CisJCWVyciA9IG1seDRfZW5fc2V0X2NxX21vZGVyKHByaXYsICZwcml2LT5yeF9jcVtpXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X2VuX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlpbnQgZXJyOworCisJbWRldi0+cHJvZmlsZS50eF9wYXVzZSA9IHBhdXNlLT50eF9wYXVzZSAhPSAwOworCW1kZXYtPnByb2ZpbGUucnhfcGF1c2UgPSBwYXVzZS0+cnhfcGF1c2UgIT0gMDsKKwllcnIgPSBtbHg0X1NFVF9QT1JUX2dlbmVyYWwobWRldi0+ZGV2LCBwcml2LT5wb3J0LAorCQkJCSAgICBwcml2LT5yeF9za2Jfc2l6ZSArIEVUSF9GQ1NfTEVOLAorCQkJCSAgICBtZGV2LT5wcm9maWxlLnR4X3BhdXNlLAorCQkJCSAgICBtZGV2LT5wcm9maWxlLnR4X3BwcCwKKwkJCQkgICAgbWRldi0+cHJvZmlsZS5yeF9wYXVzZSwKKwkJCQkgICAgbWRldi0+cHJvZmlsZS5yeF9wcHApOworCWlmIChlcnIpCisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgc2V0dGluZyBwYXVzZSBwYXJhbXMgdG9cbiIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCisJcGF1c2UtPnR4X3BhdXNlID0gbWRldi0+cHJvZmlsZS50eF9wYXVzZTsKKwlwYXVzZS0+cnhfcGF1c2UgPSBtZGV2LT5wcm9maWxlLnJ4X3BhdXNlOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcGFyYW0pCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKworCW1lbXNldChwYXJhbSwgMCwgc2l6ZW9mKCpwYXJhbSkpOworCXBhcmFtLT5yeF9tYXhfcGVuZGluZyA9IG1kZXYtPmRldi0+Y2Fwcy5tYXhfcnFfc2c7CisJcGFyYW0tPnR4X21heF9wZW5kaW5nID0gbWRldi0+ZGV2LT5jYXBzLm1heF9zcV9zZzsKKwlwYXJhbS0+cnhfcGVuZGluZyA9IG1kZXYtPnByb2ZpbGUucHJvZltwcml2LT5wb3J0XS5yeF9yaW5nX3NpemU7CisJcGFyYW0tPnR4X3BlbmRpbmcgPSBtZGV2LT5wcm9maWxlLnByb2ZbcHJpdi0+cG9ydF0udHhfcmluZ19zaXplOworfQorCitjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NF9lbl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBtbHg0X2VuX2dldF9kcnZpbmZvLAorCS5nZXRfc2V0dGluZ3MgPSBtbHg0X2VuX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzID0gbWx4NF9lbl9zZXRfc2V0dGluZ3MsCisjaWZkZWYgTkVUSUZfRl9UU08KKwkuZ2V0X3RzbyA9IG1seDRfZW5fZ2V0X3RzbywKKwkuc2V0X3RzbyA9IG1seDRfZW5fc2V0X3RzbywKKyNlbmRpZgorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3J4X2NzdW0gPSBtbHg0X2VuX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSA9IG1seDRfZW5fc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCisJLmdldF9zdHJpbmdzID0gbWx4NF9lbl9nZXRfc3RyaW5ncywKKwkuZ2V0X3NzZXRfY291bnQgPSBtbHg0X2VuX2dldF9zc2V0X2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IG1seDRfZW5fZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF93b2wgPSBtbHg0X2VuX2dldF93b2wsCisJLmdldF9tc2dsZXZlbCA9IG1seDRfZW5fZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgPSBtbHg0X2VuX3NldF9tc2dsZXZlbCwKKwkuZ2V0X2NvYWxlc2NlID0gbWx4NF9lbl9nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZSA9IG1seDRfZW5fc2V0X2NvYWxlc2NlLAorCS5nZXRfcGF1c2VwYXJhbSA9IG1seDRfZW5fZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtID0gbWx4NF9lbl9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3JpbmdwYXJhbSA9IG1seDRfZW5fZ2V0X3JpbmdwYXJhbSwKKwkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCisJLnNldF9mbGFncyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzLAorfTsKKworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3BvcnQuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YTRjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3BvcnQuYwpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorCisjaW5jbHVkZSAiZW5fcG9ydC5oIgorI2luY2x1ZGUgIm1seDRfZW4uaCIKKworCitpbnQgbWx4NF9TRVRfTUNBU1RfRkxUUihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggcG9ydCwKKwkJCXU2NCBtYWMsIHU2NCBjbGVhciwgdTggbW9kZSkKK3sKKwlyZXR1cm4gbWx4NF9jbWQoZGV2LCAobWFjIHwgKGNsZWFyIDw8IDYzKSksIHBvcnQsIG1vZGUsCisJCQlNTFg0X0NNRF9TRVRfTUNBU1RfRkxUUiwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKK30KKworaW50IG1seDRfU0VUX1ZMQU5fRkxUUihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggcG9ydCwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlzdHJ1Y3QgbWx4NF9zZXRfdmxhbl9mbHRyX21ib3ggKmZpbHRlcjsKKwlpbnQgaTsKKwlpbnQgajsKKwlpbnQgaW5kZXggPSAwOworCXUzMiBlbnRyeTsKKwlpbnQgZXJyID0gMDsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisKKwlmaWx0ZXIgPSBtYWlsYm94LT5idWY7CisJaWYgKGdycCkgeworCQltZW1zZXQoZmlsdGVyLCAwLCBzaXplb2YgKmZpbHRlcik7CisJCWZvciAoaSA9IFZMQU5fRkxUUl9TSVpFIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJCWVudHJ5ID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKQorCQkJCWlmICh2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCBpbmRleCsrKSkKKwkJCQkJZW50cnkgfD0gMSA8PCBqOworCQkJZmlsdGVyLT5lbnRyeVtpXSA9IGNwdV90b19iZTMyKGVudHJ5KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdoZW4gbm8gdmxhbnMgYXJlIGNvbmZpZ3VyZWQgd2UgYmxvY2sgYWxsIHZsYW5zICovCisJCW1lbXNldChmaWx0ZXIsIDAsIHNpemVvZigqZmlsdGVyKSk7CisJfQorCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCBwb3J0LCAwLCBNTFg0X0NNRF9TRVRfVkxBTl9GTFRSLAorCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKwlyZXR1cm4gZXJyOworfQorCisKK2ludCBtbHg0X1NFVF9QT1JUX2dlbmVyYWwoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU4IHBvcnQsIGludCBtdHUsCisJCQkgIHU4IHBwdHgsIHU4IHBmY3R4LCB1OCBwcHJ4LCB1OCBwZmNyeCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlzdHJ1Y3QgbWx4NF9zZXRfcG9ydF9nZW5lcmFsX2NvbnRleHQgKmNvbnRleHQ7CisJaW50IGVycjsKKwl1MzIgaW5fbW9kOworCisJbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwljb250ZXh0ID0gbWFpbGJveC0+YnVmOworCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2YgKmNvbnRleHQpOworCisJY29udGV4dC0+ZmxhZ3MgPSBTRVRfUE9SVF9HRU5fQUxMX1ZBTElEOworCWNvbnRleHQtPm10dSA9IGNwdV90b19iZTE2KG10dSk7CisJY29udGV4dC0+cHB0eCA9IChwcHR4ICogKCFwZmN0eCkpIDw8IDc7CisJY29udGV4dC0+cGZjdHggPSBwZmN0eDsKKwljb250ZXh0LT5wcHJ4ID0gKHBwcnggKiAoIXBmY3J4KSkgPDwgNzsKKwljb250ZXh0LT5wZmNyeCA9IHBmY3J4OworCisJaW5fbW9kID0gTUxYNF9TRVRfUE9SVF9HRU5FUkFMIDw8IDggfCBwb3J0OworCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCBpbl9tb2QsIDEsIE1MWDRfQ01EX1NFVF9QT1JULAorCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBtbHg0X1NFVF9QT1JUX3Fwbl9jYWxjKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBwb3J0LCB1MzIgYmFzZV9xcG4sCisJCQkgICB1OCBwcm9taXNjKQoreworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCXN0cnVjdCBtbHg0X3NldF9wb3J0X3JxcF9jYWxjX2NvbnRleHQgKmNvbnRleHQ7CisJaW50IGVycjsKKwl1MzIgaW5fbW9kOworCisJbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwljb250ZXh0ID0gbWFpbGJveC0+YnVmOworCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2YgKmNvbnRleHQpOworCisJY29udGV4dC0+YmFzZV9xcG4gPSBjcHVfdG9fYmUzMihiYXNlX3Fwbik7CisJY29udGV4dC0+cHJvbWlzYyA9IGNwdV90b19iZTMyKHByb21pc2MgPDwgU0VUX1BPUlRfUFJPTUlTQ19TSElGVCB8IGJhc2VfcXBuKTsKKwljb250ZXh0LT5tY2FzdCA9IGNwdV90b19iZTMyKDEgPDwgU0VUX1BPUlRfUFJPTUlTQ19TSElGVCB8IGJhc2VfcXBuKTsKKwljb250ZXh0LT5pbnRyYV9ub192bGFuID0gMDsKKwljb250ZXh0LT5ub192bGFuID0gTUxYNF9OT19WTEFOX0lEWDsKKwljb250ZXh0LT5pbnRyYV92bGFuX21pc3MgPSAwOworCWNvbnRleHQtPnZsYW5fbWlzcyA9IE1MWDRfVkxBTl9NSVNTX0lEWDsKKworCWluX21vZCA9IE1MWDRfU0VUX1BPUlRfUlFQX0NBTEMgPDwgOCB8IHBvcnQ7CisJZXJyID0gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIGluX21vZCwgMSwgTUxYNF9DTURfU0VUX1BPUlQsCisJCSAgICAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0IpOworCisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJcmV0dXJuIGVycjsKK30KKworCitpbnQgbWx4NF9lbl9EVU1QX0VUSF9TVEFUUyhzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYsIHU4IHBvcnQsIHU4IHJlc2V0KQoreworCXN0cnVjdCBtbHg0X2VuX3N0YXRfb3V0X21ib3ggKm1seDRfZW5fc3RhdHM7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG1kZXYtPnBuZGV2W3BvcnRdKTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisJdTY0IGluX21vZCA9IHJlc2V0IDw8IDggfCBwb3J0OworCWludCBlcnI7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChtZGV2LT5kZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCW1lbXNldChtYWlsYm94LT5idWYsIDAsIHNpemVvZigqbWx4NF9lbl9zdGF0cykpOworCWVyciA9IG1seDRfY21kX2JveChtZGV2LT5kZXYsIDAsIG1haWxib3gtPmRtYSwgaW5fbW9kLCAwLAorCQkJICAgTUxYNF9DTURfRFVNUF9FVEhfU1RBVFMsIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwltbHg0X2VuX3N0YXRzID0gbWFpbGJveC0+YnVmOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zdGF0c19sb2NrKTsKKworCXN0YXRzLT5yeF9wYWNrZXRzID0gYmUzMl90b19jcHUobWx4NF9lbl9zdGF0cy0+UlRPVEZSTVMpIC0KKwkJCSAgICBiZTMyX3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SRFJPUCk7CisJc3RhdHMtPnR4X3BhY2tldHMgPSBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5UVE9UX3ByaW9fMCkgKworCQkJICAgIGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlRUT1RfcHJpb18xKSArCisJCQkgICAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRPVF9wcmlvXzIpICsKKwkJCSAgICBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5UVE9UX3ByaW9fMykgKworCQkJICAgIGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlRUT1RfcHJpb180KSArCisJCQkgICAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRPVF9wcmlvXzUpICsKKwkJCSAgICBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5UVE9UX3ByaW9fNikgKworCQkJICAgIGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlRUT1RfcHJpb183KSArCisJCQkgICAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRPVF9ub3ZsYW4pICsKKwkJCSAgICBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5UVE9UX2xvb3Biayk7CisJc3RhdHMtPnJ4X2J5dGVzID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzApICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzEpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzIpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzMpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzQpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzUpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzYpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9wcmlvXzcpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+Uk9DVF9ub3ZsYW4pOworCisJc3RhdHMtPnR4X2J5dGVzID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzApICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzEpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzIpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzMpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzQpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzUpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzYpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9wcmlvXzcpICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9ub3ZsYW4pICsKKwkJCSAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRUTE9DVF9sb29wYmspOworCisJc3RhdHMtPnJ4X2Vycm9ycyA9IGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlBDUykgKworCQkJICAgYmUzMl90b19jcHUobWx4NF9lbl9zdGF0cy0+UmRyb3BMZW5ndGgpICsKKwkJCSAgIGJlMzJfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJKQkJSKSArCisJCQkgICBiZTMyX3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SQ1JDKSArCisJCQkgICBiZTMyX3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SUlVOVCk7CisJc3RhdHMtPnR4X2Vycm9ycyA9IGJlMzJfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlREUk9QKTsKKwlzdGF0cy0+bXVsdGljYXN0ID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+TUNBU1RfcHJpb18wKSArCisJCQkgICBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5NQ0FTVF9wcmlvXzEpICsKKwkJCSAgIGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPk1DQVNUX3ByaW9fMikgKworCQkJICAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+TUNBU1RfcHJpb18zKSArCisJCQkgICBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5NQ0FTVF9wcmlvXzQpICsKKwkJCSAgIGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPk1DQVNUX3ByaW9fNSkgKworCQkJICAgYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+TUNBU1RfcHJpb182KSArCisJCQkgICBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5NQ0FTVF9wcmlvXzcpICsKKwkJCSAgIGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPk1DQVNUX25vdmxhbik7CisJc3RhdHMtPmNvbGxpc2lvbnMgPSAwOworCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gYmUzMl90b19jcHUobWx4NF9lbl9zdGF0cy0+UmRyb3BMZW5ndGgpOworCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IGJlMzJfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJkcm9wT3ZmbHcpOworCXN0YXRzLT5yeF9jcmNfZXJyb3JzID0gYmUzMl90b19jcHUobWx4NF9lbl9zdGF0cy0+UkNSQyk7CisJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IDA7CisJc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gYmUzMl90b19jcHUobWx4NF9lbl9zdGF0cy0+UmRyb3BPdmZsdyk7CisJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBiZTMyX3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SZHJvcE92Zmx3KTsKKwlzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPSAwOworCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyA9IDA7CisJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKKwlzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7CisJc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgPSAwOworCisJcHJpdi0+cGtzdGF0cy5icm9hZGNhc3QgPQorCQkJCWJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJCQ0FTVF9wcmlvXzApICsKKwkJCQliZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SQkNBU1RfcHJpb18xKSArCisJCQkJYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+UkJDQVNUX3ByaW9fMikgKworCQkJCWJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJCQ0FTVF9wcmlvXzMpICsKKwkJCQliZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SQkNBU1RfcHJpb180KSArCisJCQkJYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+UkJDQVNUX3ByaW9fNSkgKworCQkJCWJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJCQ0FTVF9wcmlvXzYpICsKKwkJCQliZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SQkNBU1RfcHJpb183KSArCisJCQkJYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+UkJDQVNUX25vdmxhbik7CisJcHJpdi0+cGtzdGF0cy5yeF9wcmlvWzBdID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+UlRPVF9wcmlvXzApOworCXByaXYtPnBrc3RhdHMucnhfcHJpb1sxXSA9IGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJUT1RfcHJpb18xKTsKKwlwcml2LT5wa3N0YXRzLnJ4X3ByaW9bMl0gPSBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SVE9UX3ByaW9fMik7CisJcHJpdi0+cGtzdGF0cy5yeF9wcmlvWzNdID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+UlRPVF9wcmlvXzMpOworCXByaXYtPnBrc3RhdHMucnhfcHJpb1s0XSA9IGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJUT1RfcHJpb180KTsKKwlwcml2LT5wa3N0YXRzLnJ4X3ByaW9bNV0gPSBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5SVE9UX3ByaW9fNSk7CisJcHJpdi0+cGtzdGF0cy5yeF9wcmlvWzZdID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+UlRPVF9wcmlvXzYpOworCXByaXYtPnBrc3RhdHMucnhfcHJpb1s3XSA9IGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlJUT1RfcHJpb183KTsKKwlwcml2LT5wa3N0YXRzLnR4X3ByaW9bMF0gPSBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5UVE9UX3ByaW9fMCk7CisJcHJpdi0+cGtzdGF0cy50eF9wcmlvWzFdID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRPVF9wcmlvXzEpOworCXByaXYtPnBrc3RhdHMudHhfcHJpb1syXSA9IGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlRUT1RfcHJpb18yKTsKKwlwcml2LT5wa3N0YXRzLnR4X3ByaW9bM10gPSBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5UVE9UX3ByaW9fMyk7CisJcHJpdi0+cGtzdGF0cy50eF9wcmlvWzRdID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRPVF9wcmlvXzQpOworCXByaXYtPnBrc3RhdHMudHhfcHJpb1s1XSA9IGJlNjRfdG9fY3B1KG1seDRfZW5fc3RhdHMtPlRUT1RfcHJpb181KTsKKwlwcml2LT5wa3N0YXRzLnR4X3ByaW9bNl0gPSBiZTY0X3RvX2NwdShtbHg0X2VuX3N0YXRzLT5UVE9UX3ByaW9fNik7CisJcHJpdi0+cGtzdGF0cy50eF9wcmlvWzddID0gYmU2NF90b19jcHUobWx4NF9lbl9zdGF0cy0+VFRPVF9wcmlvXzcpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdGF0c19sb2NrKTsKKworb3V0OgorCW1seDRfZnJlZV9jbWRfbWFpbGJveChtZGV2LT5kZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fcG9ydC5oIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0NzdmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcG9ydC5oCkBAIC0wLDAgKzEsNTcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9NTFg0X0VOX1BPUlRfSF8KKyNkZWZpbmUgX01MWDRfRU5fUE9SVF9IXworCisKKyNkZWZpbmUgU0VUX1BPUlRfR0VOX0FMTF9WQUxJRAkweDcKKyNkZWZpbmUgU0VUX1BPUlRfUFJPTUlTQ19TSElGVAkzMQorCitlbnVtIHsKKwlNTFg0X0NNRF9TRVRfVkxBTl9GTFRSICA9IDB4NDcsCisJTUxYNF9DTURfU0VUX01DQVNUX0ZMVFIgPSAweDQ4LAorCU1MWDRfQ01EX0RVTVBfRVRIX1NUQVRTID0gMHg0OSwKK307CisKK3N0cnVjdCBtbHg0X3NldF9wb3J0X2dlbmVyYWxfY29udGV4dCB7CisJdTggcmVzZXJ2ZWRbM107CisJdTggZmxhZ3M7CisJdTE2IHJlc2VydmVkMjsKKwlfX2JlMTYgbXR1OworCXU4IHBwdHg7CisJdTggcGZjdHg7CisJdTE2IHJlc2VydmVkMzsKKwl1OCBwcHJ4OworCXU4IHBmY3J4OworCXUxNiByZXNlcnZlZDQ7Cit9OworCitzdHJ1Y3QgbWx4NF9zZXRfcG9ydF9ycXBfY2FsY19jb250ZXh0IHsKKwlfX2JlMzIgYmFzZV9xcG47CisJX19iZTMyIGZsYWdzOworCXU4IHJlc2VydmVkWzNdOworCXU4IG1hY19taXNzOworCXU4IGludHJhX25vX3ZsYW47CisJdTggbm9fdmxhbjsKKwl1OCBpbnRyYV92bGFuX21pc3M7CisJdTggdmxhbl9taXNzOworCXU4IHJlc2VydmVkMlszXTsKKwl1OCBub192bGFuX3ByaW87CisJX19iZTMyIHByb21pc2M7CisJX19iZTMyIG1jYXN0OworfTsKKworI2RlZmluZSBWTEFOX0ZMVFJfU0laRQkxMjgKK3N0cnVjdCBtbHg0X3NldF92bGFuX2ZsdHJfbWJveCB7CisJX19iZTMyIGVudHJ5W1ZMQU5fRkxUUl9TSVpFXTsKK307CisKKworZW51bSB7CisJTUxYNF9NQ0FTVF9DT05GSUcgICAgICAgPSAwLAorCU1MWDRfTUNBU1RfRElTQUJMRSAgICAgID0gMSwKKwlNTFg0X01DQVNUX0VOQUJMRSAgICAgICA9IDIsCit9OworCisKK3N0cnVjdCBtbHg0X2VuX3N0YXRfb3V0X21ib3ggeworCS8qIFJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoIG9mIDY0IG9jdGV0cyAqLworCV9fYmU2NCBSNjRfcHJpb18wOworCV9fYmU2NCBSNjRfcHJpb18xOworCV9fYmU2NCBSNjRfcHJpb18yOworCV9fYmU2NCBSNjRfcHJpb18zOworCV9fYmU2NCBSNjRfcHJpb180OworCV9fYmU2NCBSNjRfcHJpb181OworCV9fYmU2NCBSNjRfcHJpb182OworCV9fYmU2NCBSNjRfcHJpb183OworCV9fYmU2NCBSNjRfbm92bGFuOworCS8qIFJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoIG9mIDEyNyBvY3RldHMgKi8KKwlfX2JlNjQgUjEyN19wcmlvXzA7CisJX19iZTY0IFIxMjdfcHJpb18xOworCV9fYmU2NCBSMTI3X3ByaW9fMjsKKwlfX2JlNjQgUjEyN19wcmlvXzM7CisJX19iZTY0IFIxMjdfcHJpb180OworCV9fYmU2NCBSMTI3X3ByaW9fNTsKKwlfX2JlNjQgUjEyN19wcmlvXzY7CisJX19iZTY0IFIxMjdfcHJpb183OworCV9fYmU2NCBSMTI3X25vdmxhbjsKKwkvKiBSZWNlaXZlZCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiAyNTUgb2N0ZXRzICovCisJX19iZTY0IFIyNTVfcHJpb18wOworCV9fYmU2NCBSMjU1X3ByaW9fMTsKKwlfX2JlNjQgUjI1NV9wcmlvXzI7CisJX19iZTY0IFIyNTVfcHJpb18zOworCV9fYmU2NCBSMjU1X3ByaW9fNDsKKwlfX2JlNjQgUjI1NV9wcmlvXzU7CisJX19iZTY0IFIyNTVfcHJpb182OworCV9fYmU2NCBSMjU1X3ByaW9fNzsKKwlfX2JlNjQgUjI1NV9ub3ZsYW47CisJLyogUmVjZWl2ZWQgZnJhbWVzIHdpdGggYSBsZW5ndGggb2YgNTExIG9jdGV0cyAqLworCV9fYmU2NCBSNTExX3ByaW9fMDsKKwlfX2JlNjQgUjUxMV9wcmlvXzE7CisJX19iZTY0IFI1MTFfcHJpb18yOworCV9fYmU2NCBSNTExX3ByaW9fMzsKKwlfX2JlNjQgUjUxMV9wcmlvXzQ7CisJX19iZTY0IFI1MTFfcHJpb181OworCV9fYmU2NCBSNTExX3ByaW9fNjsKKwlfX2JlNjQgUjUxMV9wcmlvXzc7CisJX19iZTY0IFI1MTFfbm92bGFuOworCS8qIFJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoIG9mIDEwMjMgb2N0ZXRzICovCisJX19iZTY0IFIxMDIzX3ByaW9fMDsKKwlfX2JlNjQgUjEwMjNfcHJpb18xOworCV9fYmU2NCBSMTAyM19wcmlvXzI7CisJX19iZTY0IFIxMDIzX3ByaW9fMzsKKwlfX2JlNjQgUjEwMjNfcHJpb180OworCV9fYmU2NCBSMTAyM19wcmlvXzU7CisJX19iZTY0IFIxMDIzX3ByaW9fNjsKKwlfX2JlNjQgUjEwMjNfcHJpb183OworCV9fYmU2NCBSMTAyM19ub3ZsYW47CisJLyogUmVjZWl2ZWQgZnJhbWVzIHdpdGggYSBsZW5ndGggb2YgMTUxOCBvY3RldHMgKi8KKwlfX2JlNjQgUjE1MThfcHJpb18wOworCV9fYmU2NCBSMTUxOF9wcmlvXzE7CisJX19iZTY0IFIxNTE4X3ByaW9fMjsKKwlfX2JlNjQgUjE1MThfcHJpb18zOworCV9fYmU2NCBSMTUxOF9wcmlvXzQ7CisJX19iZTY0IFIxNTE4X3ByaW9fNTsKKwlfX2JlNjQgUjE1MThfcHJpb182OworCV9fYmU2NCBSMTUxOF9wcmlvXzc7CisJX19iZTY0IFIxNTE4X25vdmxhbjsKKwkvKiBSZWNlaXZlZCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiAxNTIyIG9jdGV0cyAqLworCV9fYmU2NCBSMTUyMl9wcmlvXzA7CisJX19iZTY0IFIxNTIyX3ByaW9fMTsKKwlfX2JlNjQgUjE1MjJfcHJpb18yOworCV9fYmU2NCBSMTUyMl9wcmlvXzM7CisJX19iZTY0IFIxNTIyX3ByaW9fNDsKKwlfX2JlNjQgUjE1MjJfcHJpb181OworCV9fYmU2NCBSMTUyMl9wcmlvXzY7CisJX19iZTY0IFIxNTIyX3ByaW9fNzsKKwlfX2JlNjQgUjE1MjJfbm92bGFuOworCS8qIFJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoIG9mIDE1NDggb2N0ZXRzICovCisJX19iZTY0IFIxNTQ4X3ByaW9fMDsKKwlfX2JlNjQgUjE1NDhfcHJpb18xOworCV9fYmU2NCBSMTU0OF9wcmlvXzI7CisJX19iZTY0IFIxNTQ4X3ByaW9fMzsKKwlfX2JlNjQgUjE1NDhfcHJpb180OworCV9fYmU2NCBSMTU0OF9wcmlvXzU7CisJX19iZTY0IFIxNTQ4X3ByaW9fNjsKKwlfX2JlNjQgUjE1NDhfcHJpb183OworCV9fYmU2NCBSMTU0OF9ub3ZsYW47CisJLyogUmVjZWl2ZWQgZnJhbWVzIHdpdGggYSBsZW5ndGggb2YgMTU0OCA8IG9jdGV0cyA8IE1UVSAqLworCV9fYmU2NCBSMk1UVV9wcmlvXzA7CisJX19iZTY0IFIyTVRVX3ByaW9fMTsKKwlfX2JlNjQgUjJNVFVfcHJpb18yOworCV9fYmU2NCBSMk1UVV9wcmlvXzM7CisJX19iZTY0IFIyTVRVX3ByaW9fNDsKKwlfX2JlNjQgUjJNVFVfcHJpb181OworCV9fYmU2NCBSMk1UVV9wcmlvXzY7CisJX19iZTY0IFIyTVRVX3ByaW9fNzsKKwlfX2JlNjQgUjJNVFVfbm92bGFuOworCS8qIFJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoIG9mIE1UVTwgb2N0ZXRzIGFuZCBnb29kIENSQyAqLworCV9fYmU2NCBSR0lBTlRfcHJpb18wOworCV9fYmU2NCBSR0lBTlRfcHJpb18xOworCV9fYmU2NCBSR0lBTlRfcHJpb18yOworCV9fYmU2NCBSR0lBTlRfcHJpb18zOworCV9fYmU2NCBSR0lBTlRfcHJpb180OworCV9fYmU2NCBSR0lBTlRfcHJpb181OworCV9fYmU2NCBSR0lBTlRfcHJpb182OworCV9fYmU2NCBSR0lBTlRfcHJpb183OworCV9fYmU2NCBSR0lBTlRfbm92bGFuOworCS8qIFJlY2VpdmVkIGJyb2FkY2FzdCBmcmFtZXMgd2l0aCBnb29kIENSQyAqLworCV9fYmU2NCBSQkNBU1RfcHJpb18wOworCV9fYmU2NCBSQkNBU1RfcHJpb18xOworCV9fYmU2NCBSQkNBU1RfcHJpb18yOworCV9fYmU2NCBSQkNBU1RfcHJpb18zOworCV9fYmU2NCBSQkNBU1RfcHJpb180OworCV9fYmU2NCBSQkNBU1RfcHJpb181OworCV9fYmU2NCBSQkNBU1RfcHJpb182OworCV9fYmU2NCBSQkNBU1RfcHJpb183OworCV9fYmU2NCBSQkNBU1Rfbm92bGFuOworCS8qIFJlY2VpdmVkIG11bHRpY2FzdCBmcmFtZXMgd2l0aCBnb29kIENSQyAqLworCV9fYmU2NCBNQ0FTVF9wcmlvXzA7CisJX19iZTY0IE1DQVNUX3ByaW9fMTsKKwlfX2JlNjQgTUNBU1RfcHJpb18yOworCV9fYmU2NCBNQ0FTVF9wcmlvXzM7CisJX19iZTY0IE1DQVNUX3ByaW9fNDsKKwlfX2JlNjQgTUNBU1RfcHJpb181OworCV9fYmU2NCBNQ0FTVF9wcmlvXzY7CisJX19iZTY0IE1DQVNUX3ByaW9fNzsKKwlfX2JlNjQgTUNBU1Rfbm92bGFuOworCS8qIFJlY2VpdmVkIHVuaWNhc3Qgbm90IHNob3J0IG9yIEdJQU5UIGZyYW1lcyB3aXRoIGdvb2QgQ1JDICovCisJX19iZTY0IFJUT1RHX3ByaW9fMDsKKwlfX2JlNjQgUlRPVEdfcHJpb18xOworCV9fYmU2NCBSVE9UR19wcmlvXzI7CisJX19iZTY0IFJUT1RHX3ByaW9fMzsKKwlfX2JlNjQgUlRPVEdfcHJpb180OworCV9fYmU2NCBSVE9UR19wcmlvXzU7CisJX19iZTY0IFJUT1RHX3ByaW9fNjsKKwlfX2JlNjQgUlRPVEdfcHJpb183OworCV9fYmU2NCBSVE9UR19ub3ZsYW47CisKKwkvKiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLCBpbmNsdWRlcyBmcmFtaW5nIGNoYXJhY3RlcnMgKi8KKwlfX2JlNjQgUlRUTE9DVF9wcmlvXzA7CisJLyogQ291bnQgb2YgdG90YWwgb2N0ZXRzIG9mIHJlY2VpdmVkIGZyYW1lcywgbm90IGluY2x1ZGluZyBmcmFtaW5nCisJICAgY2hhcmFjdGVycyAqLworCV9fYmU2NCBSVFRMT0NUX05PRlJNX3ByaW9fMDsKKwkvKiBDb3VudCBvZiBUb3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkCisJICAgKG9ubHkgZm9yIGZyYW1lcyB3aXRob3V0IGVycm9ycykgKi8KKwlfX2JlNjQgUk9DVF9wcmlvXzA7CisKKwlfX2JlNjQgUlRUTE9DVF9wcmlvXzE7CisJX19iZTY0IFJUVExPQ1RfTk9GUk1fcHJpb18xOworCV9fYmU2NCBST0NUX3ByaW9fMTsKKworCV9fYmU2NCBSVFRMT0NUX3ByaW9fMjsKKwlfX2JlNjQgUlRUTE9DVF9OT0ZSTV9wcmlvXzI7CisJX19iZTY0IFJPQ1RfcHJpb18yOworCisJX19iZTY0IFJUVExPQ1RfcHJpb18zOworCV9fYmU2NCBSVFRMT0NUX05PRlJNX3ByaW9fMzsKKwlfX2JlNjQgUk9DVF9wcmlvXzM7CisKKwlfX2JlNjQgUlRUTE9DVF9wcmlvXzQ7CisJX19iZTY0IFJUVExPQ1RfTk9GUk1fcHJpb180OworCV9fYmU2NCBST0NUX3ByaW9fNDsKKworCV9fYmU2NCBSVFRMT0NUX3ByaW9fNTsKKwlfX2JlNjQgUlRUTE9DVF9OT0ZSTV9wcmlvXzU7CisJX19iZTY0IFJPQ1RfcHJpb181OworCisJX19iZTY0IFJUVExPQ1RfcHJpb182OworCV9fYmU2NCBSVFRMT0NUX05PRlJNX3ByaW9fNjsKKwlfX2JlNjQgUk9DVF9wcmlvXzY7CisKKwlfX2JlNjQgUlRUTE9DVF9wcmlvXzc7CisJX19iZTY0IFJUVExPQ1RfTk9GUk1fcHJpb183OworCV9fYmU2NCBST0NUX3ByaW9fNzsKKworCV9fYmU2NCBSVFRMT0NUX25vdmxhbjsKKwlfX2JlNjQgUlRUTE9DVF9OT0ZSTV9ub3ZsYW47CisJX19iZTY0IFJPQ1Rfbm92bGFuOworCisJLyogQ291bnQgb2YgVG90YWwgcmVjZWl2ZWQgZnJhbWVzIGluY2x1ZGluZyBiYWQgZnJhbWVzICovCisJX19iZTY0IFJUT1RfcHJpb18wOworCS8qIENvdW50IG9mICBUb3RhbCBudW1iZXIgb2YgcmVjZWl2ZWQgZnJhbWVzIHdpdGggODAyLjFRIGVuY2Fwc3VsYXRpb24gKi8KKwlfX2JlNjQgUjFRX3ByaW9fMDsKKwlfX2JlNjQgcmVzZXJ2ZWQxOworCisJX19iZTY0IFJUT1RfcHJpb18xOworCV9fYmU2NCBSMVFfcHJpb18xOworCV9fYmU2NCByZXNlcnZlZDI7CisKKwlfX2JlNjQgUlRPVF9wcmlvXzI7CisJX19iZTY0IFIxUV9wcmlvXzI7CisJX19iZTY0IHJlc2VydmVkMzsKKworCV9fYmU2NCBSVE9UX3ByaW9fMzsKKwlfX2JlNjQgUjFRX3ByaW9fMzsKKwlfX2JlNjQgcmVzZXJ2ZWQ0OworCisJX19iZTY0IFJUT1RfcHJpb180OworCV9fYmU2NCBSMVFfcHJpb180OworCV9fYmU2NCByZXNlcnZlZDU7CisKKwlfX2JlNjQgUlRPVF9wcmlvXzU7CisJX19iZTY0IFIxUV9wcmlvXzU7CisJX19iZTY0IHJlc2VydmVkNjsKKworCV9fYmU2NCBSVE9UX3ByaW9fNjsKKwlfX2JlNjQgUjFRX3ByaW9fNjsKKwlfX2JlNjQgcmVzZXJ2ZWQ3OworCisJX19iZTY0IFJUT1RfcHJpb183OworCV9fYmU2NCBSMVFfcHJpb183OworCV9fYmU2NCByZXNlcnZlZDg7CisKKwlfX2JlNjQgUlRPVF9ub3ZsYW47CisJX19iZTY0IFIxUV9ub3ZsYW47CisJX19iZTY0IHJlc2VydmVkOTsKKworCS8qIFRvdGFsIG51bWJlciBvZiBTdWNjZXNzZnVsbHkgUmVjZWl2ZWQgQ29udHJvbCBGcmFtZXMgKi8KKwlfX2JlNjQgUkNOVEw7CisJX19iZTY0IHJlc2VydmVkMTA7CisJX19iZTY0IHJlc2VydmVkMTE7CisJX19iZTY0IHJlc2VydmVkMTI7CisJLyogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHdpdGggYSBsZW5ndGgvdHlwZSBmaWVsZCAgdmFsdWUgYmV0d2VlbiA0NgorCSAgICg0MiBmb3IgVkxBTnRhZ2dlZCBmcmFtZXMpIGFuZCAxNTAwIChhbHNvIDE1MDAgZm9yIFZMQU4tdGFnZ2VkIGZyYW1lcyksCisJICAgaW5jbHVzaXZlICovCisJX19iZTY0IFJJblJhbmdlTGVuZ3RoRXJyOworCS8qIENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIGxlbmd0aC90eXBlIGZpZWxkIGJldHdlZW4gMTUwMSBhbmQgMTUzNQorCSAgIGRlY2ltYWwsIGluY2x1c2l2ZSAqLworCV9fYmU2NCBST3V0UmFuZ2VMZW5ndGhFcnI7CisJLyogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGxvbmdlciB0aGFuIG1heCBhbGxvd2VkIHNpemUgZm9yCisJICAgODAyLjMgZnJhbWVzICgxNTE4LzE1MjIpICovCisJX19iZTY0IFJGcm1Ub29Mb25nOworCS8qIENvdW50IGZyYW1lcyByZWNlaXZlZCB3aXRoIFBDUyBlcnJvciAqLworCV9fYmU2NCBQQ1M7CisKKwkvKiBUcmFuc21pdCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiA2NCBvY3RldHMgKi8KKwlfX2JlNjQgVDY0X3ByaW9fMDsKKwlfX2JlNjQgVDY0X3ByaW9fMTsKKwlfX2JlNjQgVDY0X3ByaW9fMjsKKwlfX2JlNjQgVDY0X3ByaW9fMzsKKwlfX2JlNjQgVDY0X3ByaW9fNDsKKwlfX2JlNjQgVDY0X3ByaW9fNTsKKwlfX2JlNjQgVDY0X3ByaW9fNjsKKwlfX2JlNjQgVDY0X3ByaW9fNzsKKwlfX2JlNjQgVDY0X25vdmxhbjsKKwlfX2JlNjQgVDY0X2xvb3BiazsKKwkvKiBUcmFuc21pdCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiA2NSB0byAxMjcgb2N0ZXRzLiAqLworCV9fYmU2NCBUMTI3X3ByaW9fMDsKKwlfX2JlNjQgVDEyN19wcmlvXzE7CisJX19iZTY0IFQxMjdfcHJpb18yOworCV9fYmU2NCBUMTI3X3ByaW9fMzsKKwlfX2JlNjQgVDEyN19wcmlvXzQ7CisJX19iZTY0IFQxMjdfcHJpb181OworCV9fYmU2NCBUMTI3X3ByaW9fNjsKKwlfX2JlNjQgVDEyN19wcmlvXzc7CisJX19iZTY0IFQxMjdfbm92bGFuOworCV9fYmU2NCBUMTI3X2xvb3BiazsKKwkvKiBUcmFuc21pdCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiAxMjggdG8gMjU1IG9jdGV0cyAqLworCV9fYmU2NCBUMjU1X3ByaW9fMDsKKwlfX2JlNjQgVDI1NV9wcmlvXzE7CisJX19iZTY0IFQyNTVfcHJpb18yOworCV9fYmU2NCBUMjU1X3ByaW9fMzsKKwlfX2JlNjQgVDI1NV9wcmlvXzQ7CisJX19iZTY0IFQyNTVfcHJpb181OworCV9fYmU2NCBUMjU1X3ByaW9fNjsKKwlfX2JlNjQgVDI1NV9wcmlvXzc7CisJX19iZTY0IFQyNTVfbm92bGFuOworCV9fYmU2NCBUMjU1X2xvb3BiazsKKwkvKiBUcmFuc21pdCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiAyNTYgdG8gNTExIG9jdGV0cyAqLworCV9fYmU2NCBUNTExX3ByaW9fMDsKKwlfX2JlNjQgVDUxMV9wcmlvXzE7CisJX19iZTY0IFQ1MTFfcHJpb18yOworCV9fYmU2NCBUNTExX3ByaW9fMzsKKwlfX2JlNjQgVDUxMV9wcmlvXzQ7CisJX19iZTY0IFQ1MTFfcHJpb181OworCV9fYmU2NCBUNTExX3ByaW9fNjsKKwlfX2JlNjQgVDUxMV9wcmlvXzc7CisJX19iZTY0IFQ1MTFfbm92bGFuOworCV9fYmU2NCBUNTExX2xvb3BiazsKKwkvKiBUcmFuc21pdCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiA1MTIgdG8gMTAyMyBvY3RldHMgKi8KKwlfX2JlNjQgVDEwMjNfcHJpb18wOworCV9fYmU2NCBUMTAyM19wcmlvXzE7CisJX19iZTY0IFQxMDIzX3ByaW9fMjsKKwlfX2JlNjQgVDEwMjNfcHJpb18zOworCV9fYmU2NCBUMTAyM19wcmlvXzQ7CisJX19iZTY0IFQxMDIzX3ByaW9fNTsKKwlfX2JlNjQgVDEwMjNfcHJpb182OworCV9fYmU2NCBUMTAyM19wcmlvXzc7CisJX19iZTY0IFQxMDIzX25vdmxhbjsKKwlfX2JlNjQgVDEwMjNfbG9vcGJrOworCS8qIFRyYW5zbWl0IGZyYW1lcyB3aXRoIGEgbGVuZ3RoIG9mIDEwMjQgdG8gMTUxOCBvY3RldHMgKi8KKwlfX2JlNjQgVDE1MThfcHJpb18wOworCV9fYmU2NCBUMTUxOF9wcmlvXzE7CisJX19iZTY0IFQxNTE4X3ByaW9fMjsKKwlfX2JlNjQgVDE1MThfcHJpb18zOworCV9fYmU2NCBUMTUxOF9wcmlvXzQ7CisJX19iZTY0IFQxNTE4X3ByaW9fNTsKKwlfX2JlNjQgVDE1MThfcHJpb182OworCV9fYmU2NCBUMTUxOF9wcmlvXzc7CisJX19iZTY0IFQxNTE4X25vdmxhbjsKKwlfX2JlNjQgVDE1MThfbG9vcGJrOworCS8qIENvdW50cyB0cmFuc21pdCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiAxNTE5IHRvIDE1MjIgYnl0ZXMgKi8KKwlfX2JlNjQgVDE1MjJfcHJpb18wOworCV9fYmU2NCBUMTUyMl9wcmlvXzE7CisJX19iZTY0IFQxNTIyX3ByaW9fMjsKKwlfX2JlNjQgVDE1MjJfcHJpb18zOworCV9fYmU2NCBUMTUyMl9wcmlvXzQ7CisJX19iZTY0IFQxNTIyX3ByaW9fNTsKKwlfX2JlNjQgVDE1MjJfcHJpb182OworCV9fYmU2NCBUMTUyMl9wcmlvXzc7CisJX19iZTY0IFQxNTIyX25vdmxhbjsKKwlfX2JlNjQgVDE1MjJfbG9vcGJrOworCS8qIFRyYW5zbWl0IGZyYW1lcyB3aXRoIGEgbGVuZ3RoIG9mIDE1MjMgdG8gMTU0OCBvY3RldHMgKi8KKwlfX2JlNjQgVDE1NDhfcHJpb18wOworCV9fYmU2NCBUMTU0OF9wcmlvXzE7CisJX19iZTY0IFQxNTQ4X3ByaW9fMjsKKwlfX2JlNjQgVDE1NDhfcHJpb18zOworCV9fYmU2NCBUMTU0OF9wcmlvXzQ7CisJX19iZTY0IFQxNTQ4X3ByaW9fNTsKKwlfX2JlNjQgVDE1NDhfcHJpb182OworCV9fYmU2NCBUMTU0OF9wcmlvXzc7CisJX19iZTY0IFQxNTQ4X25vdmxhbjsKKwlfX2JlNjQgVDE1NDhfbG9vcGJrOworCS8qIENvdW50cyB0cmFuc21pdCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBvZiAxNTQ5IHRvIE1UVSBieXRlcyAqLworCV9fYmU2NCBUMk1UVV9wcmlvXzA7CisJX19iZTY0IFQyTVRVX3ByaW9fMTsKKwlfX2JlNjQgVDJNVFVfcHJpb18yOworCV9fYmU2NCBUMk1UVV9wcmlvXzM7CisJX19iZTY0IFQyTVRVX3ByaW9fNDsKKwlfX2JlNjQgVDJNVFVfcHJpb181OworCV9fYmU2NCBUMk1UVV9wcmlvXzY7CisJX19iZTY0IFQyTVRVX3ByaW9fNzsKKwlfX2JlNjQgVDJNVFVfbm92bGFuOworCV9fYmU2NCBUMk1UVV9sb29wYms7CisJLyogVHJhbnNtaXQgZnJhbWVzIHdpdGggYSBsZW5ndGggZ3JlYXRlciB0aGFuIE1UVSBvY3RldHMgYW5kIGEgZ29vZCBDUkMuICovCisJX19iZTY0IFRHSUFOVF9wcmlvXzA7CisJX19iZTY0IFRHSUFOVF9wcmlvXzE7CisJX19iZTY0IFRHSUFOVF9wcmlvXzI7CisJX19iZTY0IFRHSUFOVF9wcmlvXzM7CisJX19iZTY0IFRHSUFOVF9wcmlvXzQ7CisJX19iZTY0IFRHSUFOVF9wcmlvXzU7CisJX19iZTY0IFRHSUFOVF9wcmlvXzY7CisJX19iZTY0IFRHSUFOVF9wcmlvXzc7CisJX19iZTY0IFRHSUFOVF9ub3ZsYW47CisJX19iZTY0IFRHSUFOVF9sb29wYms7CisJLyogVHJhbnNtaXQgYnJvYWRjYXN0IGZyYW1lcyB3aXRoIGEgZ29vZCBDUkMgKi8KKwlfX2JlNjQgVEJDQVNUX3ByaW9fMDsKKwlfX2JlNjQgVEJDQVNUX3ByaW9fMTsKKwlfX2JlNjQgVEJDQVNUX3ByaW9fMjsKKwlfX2JlNjQgVEJDQVNUX3ByaW9fMzsKKwlfX2JlNjQgVEJDQVNUX3ByaW9fNDsKKwlfX2JlNjQgVEJDQVNUX3ByaW9fNTsKKwlfX2JlNjQgVEJDQVNUX3ByaW9fNjsKKwlfX2JlNjQgVEJDQVNUX3ByaW9fNzsKKwlfX2JlNjQgVEJDQVNUX25vdmxhbjsKKwlfX2JlNjQgVEJDQVNUX2xvb3BiazsKKwkvKiBUcmFuc21pdCBtdWx0aWNhc3QgZnJhbWVzIHdpdGggYSBnb29kIENSQyAqLworCV9fYmU2NCBUTUNBU1RfcHJpb18wOworCV9fYmU2NCBUTUNBU1RfcHJpb18xOworCV9fYmU2NCBUTUNBU1RfcHJpb18yOworCV9fYmU2NCBUTUNBU1RfcHJpb18zOworCV9fYmU2NCBUTUNBU1RfcHJpb180OworCV9fYmU2NCBUTUNBU1RfcHJpb181OworCV9fYmU2NCBUTUNBU1RfcHJpb182OworCV9fYmU2NCBUTUNBU1RfcHJpb183OworCV9fYmU2NCBUTUNBU1Rfbm92bGFuOworCV9fYmU2NCBUTUNBU1RfbG9vcGJrOworCS8qIFRyYW5zbWl0IGdvb2QgZnJhbWVzIHRoYXQgYXJlIG5laXRoZXIgYnJvYWRjYXN0IG5vciBtdWx0aWNhc3QgKi8KKwlfX2JlNjQgVFRPVEdfcHJpb18wOworCV9fYmU2NCBUVE9UR19wcmlvXzE7CisJX19iZTY0IFRUT1RHX3ByaW9fMjsKKwlfX2JlNjQgVFRPVEdfcHJpb18zOworCV9fYmU2NCBUVE9UR19wcmlvXzQ7CisJX19iZTY0IFRUT1RHX3ByaW9fNTsKKwlfX2JlNjQgVFRPVEdfcHJpb182OworCV9fYmU2NCBUVE9UR19wcmlvXzc7CisJX19iZTY0IFRUT1RHX25vdmxhbjsKKwlfX2JlNjQgVFRPVEdfbG9vcGJrOworCisJLyogdG90YWwgb2N0ZXRzIG9mIHRyYW5zbWl0dGVkIGZyYW1lcywgaW5jbHVkaW5nIGZyYW1pbmcgY2hhcmFjdGVycyAqLworCV9fYmU2NCBUVFRMT0NUX3ByaW9fMDsKKwkvKiB0b3RhbCBvY3RldHMgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzLCBub3QgaW5jbHVkaW5nIGZyYW1pbmcgY2hhcmFjdGVycyAqLworCV9fYmU2NCBUVFRMT0NUX05PRlJNX3ByaW9fMDsKKwkvKiBpZk91dE9jdGV0cyAqLworCV9fYmU2NCBUT0NUX3ByaW9fMDsKKworCV9fYmU2NCBUVFRMT0NUX3ByaW9fMTsKKwlfX2JlNjQgVFRUTE9DVF9OT0ZSTV9wcmlvXzE7CisJX19iZTY0IFRPQ1RfcHJpb18xOworCisJX19iZTY0IFRUVExPQ1RfcHJpb18yOworCV9fYmU2NCBUVFRMT0NUX05PRlJNX3ByaW9fMjsKKwlfX2JlNjQgVE9DVF9wcmlvXzI7CisKKwlfX2JlNjQgVFRUTE9DVF9wcmlvXzM7CisJX19iZTY0IFRUVExPQ1RfTk9GUk1fcHJpb18zOworCV9fYmU2NCBUT0NUX3ByaW9fMzsKKworCV9fYmU2NCBUVFRMT0NUX3ByaW9fNDsKKwlfX2JlNjQgVFRUTE9DVF9OT0ZSTV9wcmlvXzQ7CisJX19iZTY0IFRPQ1RfcHJpb180OworCisJX19iZTY0IFRUVExPQ1RfcHJpb181OworCV9fYmU2NCBUVFRMT0NUX05PRlJNX3ByaW9fNTsKKwlfX2JlNjQgVE9DVF9wcmlvXzU7CisKKwlfX2JlNjQgVFRUTE9DVF9wcmlvXzY7CisJX19iZTY0IFRUVExPQ1RfTk9GUk1fcHJpb182OworCV9fYmU2NCBUT0NUX3ByaW9fNjsKKworCV9fYmU2NCBUVFRMT0NUX3ByaW9fNzsKKwlfX2JlNjQgVFRUTE9DVF9OT0ZSTV9wcmlvXzc7CisJX19iZTY0IFRPQ1RfcHJpb183OworCisJX19iZTY0IFRUVExPQ1Rfbm92bGFuOworCV9fYmU2NCBUVFRMT0NUX05PRlJNX25vdmxhbjsKKwlfX2JlNjQgVE9DVF9ub3ZsYW47CisKKwlfX2JlNjQgVFRUTE9DVF9sb29wYms7CisJX19iZTY0IFRUVExPQ1RfTk9GUk1fbG9vcGJrOworCV9fYmU2NCBUT0NUX2xvb3BiazsKKworCS8qIFRvdGFsIGZyYW1lcyB0cmFuc21pdHRlZCB3aXRoIGEgZ29vZCBDUkMgdGhhdCBhcmUgbm90IGFib3J0ZWQgICovCisJX19iZTY0IFRUT1RfcHJpb18wOworCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCA4MDIuMVEgZW5jYXBzdWxhdGlvbiAqLworCV9fYmU2NCBUMVFfcHJpb18wOworCV9fYmU2NCByZXNlcnZlZDEzOworCisJX19iZTY0IFRUT1RfcHJpb18xOworCV9fYmU2NCBUMVFfcHJpb18xOworCV9fYmU2NCByZXNlcnZlZDE0OworCisJX19iZTY0IFRUT1RfcHJpb18yOworCV9fYmU2NCBUMVFfcHJpb18yOworCV9fYmU2NCByZXNlcnZlZDE1OworCisJX19iZTY0IFRUT1RfcHJpb18zOworCV9fYmU2NCBUMVFfcHJpb18zOworCV9fYmU2NCByZXNlcnZlZDE2OworCisJX19iZTY0IFRUT1RfcHJpb180OworCV9fYmU2NCBUMVFfcHJpb180OworCV9fYmU2NCByZXNlcnZlZDE3OworCisJX19iZTY0IFRUT1RfcHJpb181OworCV9fYmU2NCBUMVFfcHJpb181OworCV9fYmU2NCByZXNlcnZlZDE4OworCisJX19iZTY0IFRUT1RfcHJpb182OworCV9fYmU2NCBUMVFfcHJpb182OworCV9fYmU2NCByZXNlcnZlZDE5OworCisJX19iZTY0IFRUT1RfcHJpb183OworCV9fYmU2NCBUMVFfcHJpb183OworCV9fYmU2NCByZXNlcnZlZDIwOworCisJX19iZTY0IFRUT1Rfbm92bGFuOworCV9fYmU2NCBUMVFfbm92bGFuOworCV9fYmU2NCByZXNlcnZlZDIxOworCisJX19iZTY0IFRUT1RfbG9vcGJrOworCV9fYmU2NCBUMVFfbG9vcGJrOworCV9fYmU2NCByZXNlcnZlZDIyOworCisJLyogUmVjZWl2ZWQgZnJhbWVzIHdpdGggYSBsZW5ndGggZ3JlYXRlciB0aGFuIE1UVSBvY3RldHMgYW5kIGEgYmFkIENSQyAqLworCV9fYmUzMiBSSkJCUjsKKwkvKiBSZWNlaXZlZCBmcmFtZXMgd2l0aCBhIGJhZCBDUkMgdGhhdCBhcmUgbm90IHJ1bnRzLCBqYWJiZXJzLAorCSAgIG9yIGFsaWdubWVudCBlcnJvcnMgKi8KKwlfX2JlMzIgUkNSQzsKKwkvKiBSZWNlaXZlZCBmcmFtZXMgd2l0aCBTRkQgd2l0aCBhIGxlbmd0aCBvZiBsZXNzIHRoYW4gNjQgb2N0ZXRzIGFuZCBhCisJICAgYmFkIENSQyAqLworCV9fYmUzMiBSUlVOVDsKKwkvKiBSZWNlaXZlZCBmcmFtZXMgd2l0aCBhIGxlbmd0aCBsZXNzIHRoYW4gNjQgb2N0ZXRzIGFuZCBhIGdvb2QgQ1JDICovCisJX19iZTMyIFJTSE9SVDsKKwkvKiBUb3RhbCBOdW1iZXIgb2YgUmVjZWl2ZWQgUGFja2V0cyBEcm9wcGVkICovCisJX19iZTMyIFJEUk9QOworCS8qIERyb3AgZHVlIHRvIG92ZXJmbG93ICAqLworCV9fYmUzMiBSZHJvcE92Zmx3OworCS8qIERyb3AgZHVlIHRvIG92ZXJmbG93ICovCisJX19iZTMyIFJkcm9wTGVuZ3RoOworCS8qIFRvdGFsIG9mIGdvb2QgZnJhbWVzLiBEb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZCB3aXRoCisJICAgZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycyAqLworCV9fYmUzMiBSVE9URlJNUzsKKwkvKiBUb3RhbCBkcm9wcGVkIFhtaXRlZCBwYWNrZXRzICovCisJX19iZTMyIFREUk9QOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fcmVzb3VyY2VzLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3Jlc291cmNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTQ1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3Jlc291cmNlcy5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9xcC5oPgorCisjaW5jbHVkZSAibWx4NF9lbi5oIgorCit2b2lkIG1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIGludCBzaXplLCBpbnQgc3RyaWRlLAorCQkJICAgICBpbnQgaXNfdHgsIGludCByc3MsIGludCBxcG4sIGludCBjcW4sIGludCBzcnFuLAorCQkJICAgICBzdHJ1Y3QgbWx4NF9xcF9jb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisKKwltZW1zZXQoY29udGV4dCwgMCwgc2l6ZW9mICpjb250ZXh0KTsKKwljb250ZXh0LT5mbGFncyA9IGNwdV90b19iZTMyKDcgPDwgMTYgfCByc3MgPDwgMTMpOworCWNvbnRleHQtPnBkID0gY3B1X3RvX2JlMzIobWRldi0+cHJpdl9wZG4pOworCWNvbnRleHQtPm10dV9tc2dtYXggPSAweGZmOworCWNvbnRleHQtPnJxX3NpemVfc3RyaWRlID0gMDsKKwlpZiAoaXNfdHgpCisJCWNvbnRleHQtPnNxX3NpemVfc3RyaWRlID0gaWxvZzIoc2l6ZSkgPDwgMyB8IChpbG9nMihzdHJpZGUpIC0gNCk7CisJZWxzZQorCQljb250ZXh0LT5zcV9zaXplX3N0cmlkZSA9IDE7CisJY29udGV4dC0+dXNyX3BhZ2UgPSBjcHVfdG9fYmUzMihtZGV2LT5wcml2X3Vhci5pbmRleCk7CisJY29udGV4dC0+bG9jYWxfcXBuID0gY3B1X3RvX2JlMzIocXBuKTsKKwljb250ZXh0LT5wcmlfcGF0aC5hY2t0byA9IDEgJiAweDA3OworCWNvbnRleHQtPnByaV9wYXRoLnNjaGVkX3F1ZXVlID0gMHg4MyB8IChwcml2LT5wb3J0IC0gMSkgPDwgNjsKKwljb250ZXh0LT5wcmlfcGF0aC5jb3VudGVyX2luZGV4ID0gMHhmZjsKKwljb250ZXh0LT5jcW5fc2VuZCA9IGNwdV90b19iZTMyKGNxbik7CisJY29udGV4dC0+Y3FuX3JlY3YgPSBjcHVfdG9fYmUzMihjcW4pOworCWNvbnRleHQtPmRiX3JlY19hZGRyID0gY3B1X3RvX2JlNjQocHJpdi0+cmVzLmRiLmRtYSA8PCAyKTsKKwlpZiAoIXJzcykKKwkJY29udGV4dC0+c3JxbiA9IGNwdV90b19iZTMyKE1MWDRfRU5fVVNFX1NSUSB8IHNycW4pOworfQorCisKK2ludCBtbHg0X2VuX21hcF9idWZmZXIoc3RydWN0IG1seDRfYnVmICpidWYpCit7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlpbnQgaTsKKworCWlmIChCSVRTX1BFUl9MT05HID09IDY0IHx8IGJ1Zi0+bmJ1ZnMgPT0gMSkKKwkJcmV0dXJuIDA7CisKKwlwYWdlcyA9IGttYWxsb2Moc2l6ZW9mICpwYWdlcyAqIGJ1Zi0+bmJ1ZnMsIEdGUF9LRVJORUwpOworCWlmICghcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IGJ1Zi0+bmJ1ZnM7ICsraSkKKwkJcGFnZXNbaV0gPSB2aXJ0X3RvX3BhZ2UoYnVmLT5wYWdlX2xpc3RbaV0uYnVmKTsKKworCWJ1Zi0+ZGlyZWN0LmJ1ZiA9IHZtYXAocGFnZXMsIGJ1Zi0+bmJ1ZnMsIFZNX01BUCwgUEFHRV9LRVJORUwpOworCWtmcmVlKHBhZ2VzKTsKKwlpZiAoIWJ1Zi0+ZGlyZWN0LmJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtbHg0X2VuX3VubWFwX2J1ZmZlcihzdHJ1Y3QgbWx4NF9idWYgKmJ1ZikKK3sKKwlpZiAoQklUU19QRVJfTE9ORyA9PSA2NCB8fCBidWYtPm5idWZzID09IDEpCisJCXJldHVybjsKKworCXZ1bm1hcChidWYtPmRpcmVjdC5idWYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzIyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKQEAgLTAsMCArMSwxMDgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbWx4NC9jcS5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvcXAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJtbHg0X2VuLmgiCisKK3N0YXRpYyB2b2lkICpnZXRfd3FlKHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcsIGludCBuKQoreworCWludCBvZmZzZXQgPSBuIDw8IHJpbmctPnNycS53cWVfc2hpZnQ7CisJcmV0dXJuIHJpbmctPmJ1ZiArIG9mZnNldDsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9zcnFfZXZlbnQoc3RydWN0IG1seDRfc3JxICpzcnEsIGVudW0gbWx4NF9ldmVudCB0eXBlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGludCBtbHg0X2VuX2dldF9mcmFnX2hlYWRlcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFncywgdm9pZCAqKm1hY19oZHIsCisJCQkJICAgdm9pZCAqKmlwX2hkciwgdm9pZCAqKnRjcHVkcF9oZHIsCisJCQkJICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCit7CisJKm1hY19oZHIgPSBwYWdlX2FkZHJlc3MoZnJhZ3MtPnBhZ2UpICsgZnJhZ3MtPnBhZ2Vfb2Zmc2V0OworCSppcF9oZHIgPSAqbWFjX2hkciArIEVUSF9ITEVOOworCSp0Y3B1ZHBfaGRyID0gKHN0cnVjdCB0Y3BoZHIgKikoKmlwX2hkciArIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKKwkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lbl9hbGxvY19mcmFnKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjICpyeF9kZXNjLAorCQkJICAgICAgc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqc2tiX2ZyYWdzLAorCQkJICAgICAgc3RydWN0IG1seDRfZW5fcnhfYWxsb2MgKnJpbmdfYWxsb2MsCisJCQkgICAgICBpbnQgaSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBtbHg0X2VuX2ZyYWdfaW5mbyAqZnJhZ19pbmZvID0gJnByaXYtPmZyYWdfaW5mb1tpXTsKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9hbGxvYyAqcGFnZV9hbGxvYyA9ICZyaW5nX2FsbG9jW2ldOworCXN0cnVjdCBwYWdlICpwYWdlOworCWRtYV9hZGRyX3QgZG1hOworCisJaWYgKHBhZ2VfYWxsb2MtPm9mZnNldCA9PSBmcmFnX2luZm8tPmxhc3Rfb2Zmc2V0KSB7CisJCS8qIEFsbG9jYXRlIG5ldyBwYWdlICovCisJCXBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCwgTUxYNF9FTl9BTExPQ19PUkRFUik7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNrYl9mcmFnc1tpXS5wYWdlID0gcGFnZV9hbGxvYy0+cGFnZTsKKwkJc2tiX2ZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ID0gcGFnZV9hbGxvYy0+b2Zmc2V0OworCQlwYWdlX2FsbG9jLT5wYWdlID0gcGFnZTsKKwkJcGFnZV9hbGxvYy0+b2Zmc2V0ID0gZnJhZ19pbmZvLT5mcmFnX2FsaWduOworCX0gZWxzZSB7CisJCXBhZ2UgPSBwYWdlX2FsbG9jLT5wYWdlOworCQlnZXRfcGFnZShwYWdlKTsKKworCQlza2JfZnJhZ3NbaV0ucGFnZSA9IHBhZ2U7CisJCXNrYl9mcmFnc1tpXS5wYWdlX29mZnNldCA9IHBhZ2VfYWxsb2MtPm9mZnNldDsKKwkJcGFnZV9hbGxvYy0+b2Zmc2V0ICs9IGZyYWdfaW5mby0+ZnJhZ19zdHJpZGU7CisJfQorCWRtYSA9IHBjaV9tYXBfc2luZ2xlKG1kZXYtPnBkZXYsIHBhZ2VfYWRkcmVzcyhza2JfZnJhZ3NbaV0ucGFnZSkgKworCQkJICAgICBza2JfZnJhZ3NbaV0ucGFnZV9vZmZzZXQsIGZyYWdfaW5mby0+ZnJhZ19zaXplLAorCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXJ4X2Rlc2MtPmRhdGFbaV0uYWRkciA9IGNwdV90b19iZTY0KGRtYSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lbl9pbml0X2FsbG9jYXRvcihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9hbGxvYyAqcGFnZV9hbGxvYzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fZnJhZ3M7IGkrKykgeworCQlwYWdlX2FsbG9jID0gJnJpbmctPnBhZ2VfYWxsb2NbaV07CisJCXBhZ2VfYWxsb2MtPnBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCwKKwkJCQkJICAgICAgIE1MWDRfRU5fQUxMT0NfT1JERVIpOworCQlpZiAoIXBhZ2VfYWxsb2MtPnBhZ2UpCisJCQlnb3RvIG91dDsKKworCQlwYWdlX2FsbG9jLT5vZmZzZXQgPSBwcml2LT5mcmFnX2luZm9baV0uZnJhZ19hbGlnbjsKKwkJbWx4NF9kYmcoRFJWLCBwcml2LCAiSW5pdGlhbGl6ZWQgYWxsb2NhdG9yOiVkIHdpdGggcGFnZTolcFxuIiwKKwkJCSBpLCBwYWdlX2FsbG9jLT5wYWdlKTsKKwl9CisJcmV0dXJuIDA7CisKK291dDoKKwl3aGlsZSAoaS0tKSB7CisJCXBhZ2VfYWxsb2MgPSAmcmluZy0+cGFnZV9hbGxvY1tpXTsKKwkJcHV0X3BhZ2UocGFnZV9hbGxvYy0+cGFnZSk7CisJCXBhZ2VfYWxsb2MtPnBhZ2UgPSBOVUxMOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9kZXN0cm95X2FsbG9jYXRvcihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IG1seDRfZW5fcnhfYWxsb2MgKnBhZ2VfYWxsb2M7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2ZyYWdzOyBpKyspIHsKKwkJcGFnZV9hbGxvYyA9ICZyaW5nLT5wYWdlX2FsbG9jW2ldOworCQltbHg0X2RiZyhEUlYsIHByaXYsICJGcmVlaW5nIGFsbG9jYXRvcjolZCBjb3VudDolZFxuIiwKKwkJCSBpLCBwYWdlX2NvdW50KHBhZ2VfYWxsb2MtPnBhZ2UpKTsKKworCQlwdXRfcGFnZShwYWdlX2FsbG9jLT5wYWdlKTsKKwkJcGFnZV9hbGxvYy0+cGFnZSA9IE5VTEw7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIG1seDRfZW5faW5pdF9yeF9kZXNjKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjICpyeF9kZXNjID0gcmluZy0+YnVmICsgcmluZy0+c3RyaWRlICogaW5kZXg7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqc2tiX2ZyYWdzID0gcmluZy0+cnhfaW5mbyArCisJCQkJCSAgICAoaW5kZXggPDwgcHJpdi0+bG9nX3J4X2luZm8pOworCWludCBwb3NzaWJsZV9mcmFnczsKKwlpbnQgaTsKKworCS8qIFByZS1saW5rIGRlc2NyaXB0b3IgKi8KKwlyeF9kZXNjLT5uZXh0Lm5leHRfd3FlX2luZGV4ID0gY3B1X3RvX2JlMTYoKGluZGV4ICsgMSkgJiByaW5nLT5zaXplX21hc2spOworCisJLyogU2V0IHNpemUgYW5kIG1lbXR5cGUgZmllbGRzICovCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9mcmFnczsgaSsrKSB7CisJCXNrYl9mcmFnc1tpXS5zaXplID0gcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfc2l6ZTsKKwkJcnhfZGVzYy0+ZGF0YVtpXS5ieXRlX2NvdW50ID0KKwkJCWNwdV90b19iZTMyKHByaXYtPmZyYWdfaW5mb1tpXS5mcmFnX3NpemUpOworCQlyeF9kZXNjLT5kYXRhW2ldLmxrZXkgPSBjcHVfdG9fYmUzMihwcml2LT5tZGV2LT5tci5rZXkpOworCX0KKworCS8qIElmIHRoZSBudW1iZXIgb2YgdXNlZCBmcmFnbWVudHMgZG9lcyBub3QgZmlsbCB1cCB0aGUgcmluZyBzdHJpZGUsCisJICogcmVtYWluaW5nICh1bnVzZWQpIGZyYWdtZW50cyBtdXN0IGJlIHBhZGRlZCB3aXRoIG51bGwgYWRkcmVzcy9zaXplCisJICogYW5kIGEgc3BlY2lhbCBtZW1vcnkga2V5ICovCisJcG9zc2libGVfZnJhZ3MgPSAocmluZy0+c3RyaWRlIC0gc2l6ZW9mKHN0cnVjdCBtbHg0X2VuX3J4X2Rlc2MpKSAvIERTX1NJWkU7CisJZm9yIChpID0gcHJpdi0+bnVtX2ZyYWdzOyBpIDwgcG9zc2libGVfZnJhZ3M7IGkrKykgeworCQlyeF9kZXNjLT5kYXRhW2ldLmJ5dGVfY291bnQgPSAwOworCQlyeF9kZXNjLT5kYXRhW2ldLmxrZXkgPSBjcHVfdG9fYmUzMihNTFg0X0VOX01FTVRZUEVfUEFEKTsKKwkJcnhfZGVzYy0+ZGF0YVtpXS5hZGRyID0gMDsKKwl9Cit9CisKKworc3RhdGljIGludCBtbHg0X2VuX3ByZXBhcmVfcnhfZGVzYyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjICpyeF9kZXNjID0gcmluZy0+YnVmICsgKGluZGV4ICogcmluZy0+c3RyaWRlKTsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpza2JfZnJhZ3MgPSByaW5nLT5yeF9pbmZvICsKKwkJCQkJICAgIChpbmRleCA8PCBwcml2LT5sb2dfcnhfaW5mbyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2ZyYWdzOyBpKyspCisJCWlmIChtbHg0X2VuX2FsbG9jX2ZyYWcocHJpdiwgcnhfZGVzYywgc2tiX2ZyYWdzLCByaW5nLT5wYWdlX2FsbG9jLCBpKSkKKwkJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoaS0tKQorCQlwdXRfcGFnZShza2JfZnJhZ3NbaV0ucGFnZSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbHg0X2VuX3VwZGF0ZV9yeF9wcm9kX2RiKHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcpCit7CisJKnJpbmctPndxcmVzLmRiLmRiID0gY3B1X3RvX2JlMzIocmluZy0+cHJvZCAmIDB4ZmZmZik7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lbl9maWxsX3J4X2J1ZmZlcnMoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmc7CisJaW50IHJpbmdfaW5kOworCWludCBidWZfaW5kOworCisJZm9yIChidWZfaW5kID0gMDsgYnVmX2luZCA8IHByaXYtPnByb2YtPnJ4X3Jpbmdfc2l6ZTsgYnVmX2luZCsrKSB7CisJCWZvciAocmluZ19pbmQgPSAwOyByaW5nX2luZCA8IHByaXYtPnJ4X3JpbmdfbnVtOyByaW5nX2luZCsrKSB7CisJCQlyaW5nID0gJnByaXYtPnJ4X3JpbmdbcmluZ19pbmRdOworCisJCQlpZiAobWx4NF9lbl9wcmVwYXJlX3J4X2Rlc2MocHJpdiwgcmluZywKKwkJCQkJCSAgICByaW5nLT5hY3R1YWxfc2l6ZSkpIHsKKwkJCQlpZiAocmluZy0+YWN0dWFsX3NpemUgPCBNTFg0X0VOX01JTl9SWF9TSVpFKSB7CisJCQkJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJCQkJICAgICAgICJlbm91Z2ggcnggYnVmZmVyc1xuIik7CisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHByaXYpKQorCQkJCQkJbWx4NF93YXJuKG1kZXYsCisJCQkJCQkJICAiT25seSAlZCBidWZmZXJzIGFsbG9jYXRlZFxuIiwKKwkJCQkJCQkgIHJpbmctPmFjdHVhbF9zaXplKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfQorCQkJcmluZy0+YWN0dWFsX3NpemUrKzsKKwkJCXJpbmctPnByb2QrKzsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X2VuX2ZpbGxfcnhfYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbnVtID0gMDsKKwlpbnQgZXJyOworCisJd2hpbGUgKCh1MzIpIChyaW5nLT5wcm9kIC0gcmluZy0+Y29ucykgPCByaW5nLT5hY3R1YWxfc2l6ZSkgeworCQllcnIgPSBtbHg0X2VuX3ByZXBhcmVfcnhfZGVzYyhwcml2LCByaW5nLCByaW5nLT5wcm9kICYKKwkJCQkJICAgICAgcmluZy0+c2l6ZV9tYXNrKTsKKwkJaWYgKGVycikgeworCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIocHJpdikpCisJCQkJbWx4NF93YXJuKHByaXYtPm1kZXYsCisJCQkJCSAgIkZhaWxlZCBwcmVwYXJpbmcgcnggZGVzY3JpcHRvclxuIik7CisJCQlwcml2LT5wb3J0X3N0YXRzLnJ4X2FsbG9jX2ZhaWxlZCsrOworCQkJYnJlYWs7CisJCX0KKwkJKytudW07CisJCSsrcmluZy0+cHJvZDsKKwl9CisJaWYgKCh1MzIpIChyaW5nLT5wcm9kIC0gcmluZy0+Y29ucykgPT0gcmluZy0+c2l6ZSkKKwkJcmluZy0+ZnVsbCA9IDE7CisKKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX2ZyZWVfcnhfYnVmKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnNrYl9mcmFnczsKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjICpyeF9kZXNjOworCWRtYV9hZGRyX3QgZG1hOworCWludCBpbmRleDsKKwlpbnQgbnI7CisKKwltbHg0X2RiZyhEUlYsIHByaXYsICJGcmVlaW5nIFJ4IGJ1ZiAtIGNvbnM6JWQgcHJvZDolZFxuIiwKKwkJCXJpbmctPmNvbnMsIHJpbmctPnByb2QpOworCisJLyogVW5tYXAgYW5kIGZyZWUgUnggYnVmZmVycyAqLworCUJVR19PTigodTMyKSAocmluZy0+cHJvZCAtIHJpbmctPmNvbnMpID4gcmluZy0+c2l6ZSk7CisJd2hpbGUgKHJpbmctPmNvbnMgIT0gcmluZy0+cHJvZCkgeworCQlpbmRleCA9IHJpbmctPmNvbnMgJiByaW5nLT5zaXplX21hc2s7CisJCXJ4X2Rlc2MgPSByaW5nLT5idWYgKyAoaW5kZXggPDwgcmluZy0+bG9nX3N0cmlkZSk7CisJCXNrYl9mcmFncyA9IHJpbmctPnJ4X2luZm8gKyAoaW5kZXggPDwgcHJpdi0+bG9nX3J4X2luZm8pOworCQltbHg0X2RiZyhEUlYsIHByaXYsICJQcm9jZXNzaW5nIGRlc2NyaXB0b3I6JWRcbiIsIGluZGV4KTsKKworCQlmb3IgKG5yID0gMDsgbnIgPCBwcml2LT5udW1fZnJhZ3M7IG5yKyspIHsKKwkJCW1seDRfZGJnKERSViwgcHJpdiwgIkZyZWVpbmcgZnJhZ21lbnQ6JWRcbiIsIG5yKTsKKwkJCWRtYSA9IGJlNjRfdG9fY3B1KHJ4X2Rlc2MtPmRhdGFbbnJdLmFkZHIpOworCisJCQltbHg0X2RiZyhEUlYsIHByaXYsICJVbm1hcGluZyBidWZmZXIgYXQgZG1hOjB4JWxseFxuIiwgKHU2NCkgZG1hKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUobWRldi0+cGRldiwgZG1hLCBza2JfZnJhZ3NbbnJdLnNpemUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcHV0X3BhZ2Uoc2tiX2ZyYWdzW25yXS5wYWdlKTsKKwkJfQorCQkrK3JpbmctPmNvbnM7CisJfQorfQorCisKK3ZvaWQgbWx4NF9lbl9yeF9yZWZpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGVsYXksIHN0cnVjdCBtbHg0X2VuX3ByaXYsCisJCQkJCQkgcmVmaWxsX3Rhc2spOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9yaW5nICpyaW5nOworCWludCBuZWVkX3JlZmlsbCA9IDA7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKKwlpZiAoIW1kZXYtPmRldmljZV91cCB8fCAhcHJpdi0+cG9ydF91cCkKKwkJZ290byBvdXQ7CisKKwkvKiBXZSBvbmx5IGdldCBoZXJlIGlmIHRoZXJlIGFyZSBubyByZWNlaXZlIGJ1ZmZlcnMsIHNvIHdlIGNhbid0IHJhY2UKKwkgKiB3aXRoIFJ4IGludGVycnVwdHMgd2hpbGUgZmlsbGluZyBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJcmluZyA9ICZwcml2LT5yeF9yaW5nW2ldOworCQlpZiAocmluZy0+bmVlZF9yZWZpbGwpIHsKKwkJCWlmIChtbHg0X2VuX2ZpbGxfcnhfYnVmKGRldiwgcmluZykpIHsKKwkJCQlyaW5nLT5uZWVkX3JlZmlsbCA9IDA7CisJCQkJbWx4NF9lbl91cGRhdGVfcnhfcHJvZF9kYihyaW5nKTsKKwkJCX0gZWxzZQorCQkJCW5lZWRfcmVmaWxsID0gMTsKKwkJfQorCX0KKwlpZiAobmVlZF9yZWZpbGwpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhtZGV2LT53b3JrcXVldWUsICZwcml2LT5yZWZpbGxfdGFzaywgSFopOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKK30KKworCitpbnQgbWx4NF9lbl9jcmVhdGVfcnhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZywgdTMyIHNpemUsIHUxNiBzdHJpZGUpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlpbnQgZXJyOworCWludCB0bXA7CisKKwkvKiBTYW5pdHkgY2hlY2sgU1JRIHNpemUgYmVmb3JlIHByb2NlZWRpbmcgKi8KKwlpZiAoc2l6ZSA+PSBtZGV2LT5kZXYtPmNhcHMubWF4X3NycV93cWVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJpbmctPnByb2QgPSAwOworCXJpbmctPmNvbnMgPSAwOworCXJpbmctPnNpemUgPSBzaXplOworCXJpbmctPnNpemVfbWFzayA9IHNpemUgLSAxOworCXJpbmctPnN0cmlkZSA9IHN0cmlkZTsKKwlyaW5nLT5sb2dfc3RyaWRlID0gZmZzKHJpbmctPnN0cmlkZSkgLSAxOworCXJpbmctPmJ1Zl9zaXplID0gcmluZy0+c2l6ZSAqIHJpbmctPnN0cmlkZTsKKworCXRtcCA9IHNpemUgKiByb3VuZHVwX3Bvd19vZl90d28oTUxYNF9FTl9NQVhfUlhfRlJBR1MgKgorCQkJCQlzaXplb2Yoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCkpOworCXJpbmctPnJ4X2luZm8gPSB2bWFsbG9jKHRtcCk7CisJaWYgKCFyaW5nLT5yeF9pbmZvKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgYWxsb2NhdGluZyByeF9pbmZvIHJpbmdcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWx4NF9kYmcoRFJWLCBwcml2LCAiQWxsb2NhdGVkIHJ4X2luZm8gcmluZyBhdCBhZGRyOiVwIHNpemU6JWRcbiIsCisJCSByaW5nLT5yeF9pbmZvLCB0bXApOworCisJZXJyID0gbWx4NF9hbGxvY19od3FfcmVzKG1kZXYtPmRldiwgJnJpbmctPndxcmVzLAorCQkJCSByaW5nLT5idWZfc2l6ZSwgMiAqIFBBR0VfU0laRSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmluZzsKKworCWVyciA9IG1seDRfZW5fbWFwX2J1ZmZlcigmcmluZy0+d3FyZXMuYnVmKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgdG8gbWFwIFJYIGJ1ZmZlclxuIik7CisJCWdvdG8gZXJyX2h3cTsKKwl9CisJcmluZy0+YnVmID0gcmluZy0+d3FyZXMuYnVmLmRpcmVjdC5idWY7CisKKwkvKiBDb25maWd1cmUgbHJvIG1uZ3IgKi8KKwltZW1zZXQoJnJpbmctPmxybywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfbHJvX21ncikpOworCXJpbmctPmxyby5kZXYgPSBwcml2LT5kZXY7CisJcmluZy0+bHJvLmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKKwlyaW5nLT5scm8uZnJhZ19hbGlnbl9wYWQgPSBORVRfSVBfQUxJR047CisJcmluZy0+bHJvLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJpbmctPmxyby5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJpbmctPmxyby5tYXhfZGVzYyA9IG1kZXYtPnByb2ZpbGUubnVtX2xybzsKKwlyaW5nLT5scm8ubWF4X2FnZ3IgPSBNQVhfU0tCX0ZSQUdTOworCXJpbmctPmxyby5scm9fYXJyID0ga3phbGxvYyhtZGV2LT5wcm9maWxlLm51bV9scm8gKgorCQkJCSAgICBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYyksCisJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+bHJvLmxyb19hcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBscm8gYXJyYXlcbiIpOworCQlnb3RvIGVycl9tYXA7CisJfQorCXJpbmctPmxyby5nZXRfZnJhZ19oZWFkZXIgPSBtbHg0X2VuX2dldF9mcmFnX2hlYWRlcjsKKworCXJldHVybiAwOworCitlcnJfbWFwOgorCW1seDRfZW5fdW5tYXBfYnVmZmVyKCZyaW5nLT53cXJlcy5idWYpOworZXJyX2h3cToKKwltbHg0X2ZyZWVfaHdxX3JlcyhtZGV2LT5kZXYsICZyaW5nLT53cXJlcywgcmluZy0+YnVmX3NpemUpOworZXJyX3Jpbmc6CisJdmZyZWUocmluZy0+cnhfaW5mbyk7CisJcmluZy0+cnhfaW5mbyA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKworaW50IG1seDRfZW5fYWN0aXZhdGVfcnhfcmluZ3Moc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBtbHg0X3dxZV9zcnFfbmV4dF9zZWcgKm5leHQ7CisJc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZzsKKwlpbnQgaTsKKwlpbnQgcmluZ19pbmQ7CisJaW50IGVycjsKKwlpbnQgc3RyaWRlID0gcm91bmR1cF9wb3dfb2ZfdHdvKHNpemVvZihzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjKSArCisJCQkJCURTX1NJWkUgKiBwcml2LT5udW1fZnJhZ3MpOworCWludCBtYXhfZ3MgPSAoc3RyaWRlIC0gc2l6ZW9mKHN0cnVjdCBtbHg0X3dxZV9zcnFfbmV4dF9zZWcpKSAvIERTX1NJWkU7CisKKwlmb3IgKHJpbmdfaW5kID0gMDsgcmluZ19pbmQgPCBwcml2LT5yeF9yaW5nX251bTsgcmluZ19pbmQrKykgeworCQlyaW5nID0gJnByaXYtPnJ4X3JpbmdbcmluZ19pbmRdOworCisJCXJpbmctPnByb2QgPSAwOworCQlyaW5nLT5jb25zID0gMDsKKwkJcmluZy0+YWN0dWFsX3NpemUgPSAwOworCQlyaW5nLT5jcW4gPSBwcml2LT5yeF9jcVtyaW5nX2luZF0ubWNxLmNxbjsKKworCQlyaW5nLT5zdHJpZGUgPSBzdHJpZGU7CisJCXJpbmctPmxvZ19zdHJpZGUgPSBmZnMocmluZy0+c3RyaWRlKSAtIDE7CisJCXJpbmctPmJ1Zl9zaXplID0gcmluZy0+c2l6ZSAqIHJpbmctPnN0cmlkZTsKKworCQltZW1zZXQocmluZy0+YnVmLCAwLCByaW5nLT5idWZfc2l6ZSk7CisJCW1seDRfZW5fdXBkYXRlX3J4X3Byb2RfZGIocmluZyk7CisKKwkJLyogSW5pdGFpbGl6ZSBhbGwgZGVzY3JpcHRvcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJpbmctPnNpemU7IGkrKykKKwkJCW1seDRfZW5faW5pdF9yeF9kZXNjKHByaXYsIHJpbmcsIGkpOworCisJCS8qIEluaXRpYWxpemUgcGFnZSBhbGxvY2F0b3JzICovCisJCWVyciA9IG1seDRfZW5faW5pdF9hbGxvY2F0b3IocHJpdiwgcmluZyk7CisJCWlmIChlcnIpIHsKKwkJCSBtbHg0X2VycihtZGV2LCAiRmFpbGVkIGluaXRpYWxpemluZyByaW5nIGFsbG9jYXRvclxuIik7CisJCQkgZ290byBlcnJfYWxsb2NhdG9yOworCQl9CisKKwkJLyogRmlsbCBSeCBidWZmZXJzICovCisJCXJpbmctPmZ1bGwgPSAwOworCX0KKwlpZiAobWx4NF9lbl9maWxsX3J4X2J1ZmZlcnMocHJpdikpCisJCWdvdG8gZXJyX2J1ZmZlcnM7CisKKwlmb3IgKHJpbmdfaW5kID0gMDsgcmluZ19pbmQgPCBwcml2LT5yeF9yaW5nX251bTsgcmluZ19pbmQrKykgeworCQlyaW5nID0gJnByaXYtPnJ4X3JpbmdbcmluZ19pbmRdOworCisJCW1seDRfZW5fdXBkYXRlX3J4X3Byb2RfZGIocmluZyk7CisKKwkJLyogQ29uZmlndXJlIFNSUSByZXByZXNlbnRpbmcgdGhlIHJpbmcgKi8KKwkJcmluZy0+c3JxLm1heCAgICA9IHJpbmctPnNpemU7CisJCXJpbmctPnNycS5tYXhfZ3MgPSBtYXhfZ3M7CisJCXJpbmctPnNycS53cWVfc2hpZnQgPSBpbG9nMihyaW5nLT5zdHJpZGUpOworCisJCWZvciAoaSA9IDA7IGkgPCByaW5nLT5zcnEubWF4OyArK2kpIHsKKwkJCW5leHQgPSBnZXRfd3FlKHJpbmcsIGkpOworCQkJbmV4dC0+bmV4dF93cWVfaW5kZXggPQorCQkJY3B1X3RvX2JlMTYoKGkgKyAxKSAmIChyaW5nLT5zcnEubWF4IC0gMSkpOworCQl9CisKKwkJZXJyID0gbWx4NF9zcnFfYWxsb2MobWRldi0+ZGV2LCBtZGV2LT5wcml2X3BkbiwgJnJpbmctPndxcmVzLm10dCwKKwkJCQkgICAgIHJpbmctPndxcmVzLmRiLmRtYSwgJnJpbmctPnNycSk7CisJCWlmIChlcnIpeworCQkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBzcnFcbiIpOworCQkJZ290byBlcnJfc3JxOworCQl9CisJCXJpbmctPnNycS5ldmVudCA9IG1seDRfZW5fc3JxX2V2ZW50OworCX0KKworCXJldHVybiAwOworCitlcnJfc3JxOgorCXdoaWxlIChyaW5nX2luZCA+PSAwKSB7CisJCXJpbmcgPSAmcHJpdi0+cnhfcmluZ1tyaW5nX2luZF07CisJCW1seDRfc3JxX2ZyZWUobWRldi0+ZGV2LCAmcmluZy0+c3JxKTsKKwkJcmluZ19pbmQtLTsKKwl9CisKK2Vycl9idWZmZXJzOgorCWZvciAocmluZ19pbmQgPSAwOyByaW5nX2luZCA8IHByaXYtPnJ4X3JpbmdfbnVtOyByaW5nX2luZCsrKQorCQltbHg0X2VuX2ZyZWVfcnhfYnVmKHByaXYsICZwcml2LT5yeF9yaW5nW3JpbmdfaW5kXSk7CisKKwlyaW5nX2luZCA9IHByaXYtPnJ4X3JpbmdfbnVtIC0gMTsKK2Vycl9hbGxvY2F0b3I6CisJd2hpbGUgKHJpbmdfaW5kID49IDApIHsKKwkJbWx4NF9lbl9kZXN0cm95X2FsbG9jYXRvcihwcml2LCAmcHJpdi0+cnhfcmluZ1tyaW5nX2luZF0pOworCQlyaW5nX2luZC0tOworCX0KKwlyZXR1cm4gZXJyOworfQorCit2b2lkIG1seDRfZW5fZGVzdHJveV9yeF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKworCWtmcmVlKHJpbmctPmxyby5scm9fYXJyKTsKKwltbHg0X2VuX3VubWFwX2J1ZmZlcigmcmluZy0+d3FyZXMuYnVmKTsKKwltbHg0X2ZyZWVfaHdxX3JlcyhtZGV2LT5kZXYsICZyaW5nLT53cXJlcywgcmluZy0+YnVmX3NpemUpOworCXZmcmVlKHJpbmctPnJ4X2luZm8pOworCXJpbmctPnJ4X2luZm8gPSBOVUxMOworfQorCit2b2lkIG1seDRfZW5fZGVhY3RpdmF0ZV9yeF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCisJbWx4NF9zcnFfZnJlZShtZGV2LT5kZXYsICZyaW5nLT5zcnEpOworCW1seDRfZW5fZnJlZV9yeF9idWYocHJpdiwgcmluZyk7CisJbWx4NF9lbl9kZXN0cm95X2FsbG9jYXRvcihwcml2LCByaW5nKTsKK30KKworCisvKiBVbm1hcCBhIGNvbXBsZXRlZCBkZXNjcmlwdG9yIGFuZCBmcmVlIHVudXNlZCBwYWdlcyAqLworc3RhdGljIGludCBtbHg0X2VuX2NvbXBsZXRlX3J4X2Rlc2Moc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IG1seDRfZW5fcnhfZGVzYyAqcnhfZGVzYywKKwkJCQkgICAgc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqc2tiX2ZyYWdzLAorCQkJCSAgICBzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpza2JfZnJhZ3NfcngsCisJCQkJICAgIHN0cnVjdCBtbHg0X2VuX3J4X2FsbG9jICpwYWdlX2FsbG9jLAorCQkJCSAgICBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJc3RydWN0IG1seDRfZW5fZnJhZ19pbmZvICpmcmFnX2luZm87CisJaW50IG5yOworCWRtYV9hZGRyX3QgZG1hOworCisJLyogQ29sbGVjdCB1c2VkIGZyYWdtZW50cyB3aGlsZSByZXBsYWNpbmcgdGhlbSBpbiB0aGUgSFcgZGVzY2lycHRvcnMgKi8KKwlmb3IgKG5yID0gMDsgbnIgPCBwcml2LT5udW1fZnJhZ3M7IG5yKyspIHsKKwkJZnJhZ19pbmZvID0gJnByaXYtPmZyYWdfaW5mb1tucl07CisJCWlmIChsZW5ndGggPD0gZnJhZ19pbmZvLT5mcmFnX3ByZWZpeF9zaXplKQorCQkJYnJlYWs7CisKKwkJLyogU2F2ZSBwYWdlIHJlZmVyZW5jZSBpbiBza2IgKi8KKwkJc2tiX2ZyYWdzX3J4W25yXS5wYWdlID0gc2tiX2ZyYWdzW25yXS5wYWdlOworCQlza2JfZnJhZ3NfcnhbbnJdLnNpemUgPSBza2JfZnJhZ3NbbnJdLnNpemU7CisJCXNrYl9mcmFnc19yeFtucl0ucGFnZV9vZmZzZXQgPSBza2JfZnJhZ3NbbnJdLnBhZ2Vfb2Zmc2V0OworCQlkbWEgPSBiZTY0X3RvX2NwdShyeF9kZXNjLT5kYXRhW25yXS5hZGRyKTsKKworCQkvKiBBbGxvY2F0ZSBhIHJlcGxhY2VtZW50IHBhZ2UgKi8KKwkJaWYgKG1seDRfZW5fYWxsb2NfZnJhZyhwcml2LCByeF9kZXNjLCBza2JfZnJhZ3MsIHBhZ2VfYWxsb2MsIG5yKSkKKwkJCWdvdG8gZmFpbDsKKworCQkvKiBVbm1hcCBidWZmZXIgKi8KKwkJcGNpX3VubWFwX3NpbmdsZShtZGV2LT5wZGV2LCBkbWEsIHNrYl9mcmFnc1tucl0uc2l6ZSwKKwkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9CisJLyogQWRqdXN0IHNpemUgb2YgbGFzdCBmcmFnbWVudCB0byBtYXRjaCBhY3R1YWwgbGVuZ3RoICovCisJc2tiX2ZyYWdzX3J4W25yIC0gMV0uc2l6ZSA9IGxlbmd0aCAtCisJCXByaXYtPmZyYWdfaW5mb1tuciAtIDFdLmZyYWdfcHJlZml4X3NpemU7CisJcmV0dXJuIG5yOworCitmYWlsOgorCS8qIERyb3AgYWxsIGFjY3VtdWxhdGVkIGZyYWdtZW50cyAod2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gcmVwbGFjZWQgaW4KKwkgKiB0aGUgZGVzY3JpcHRvcikgb2YgdGhpcyBwYWNrZXQ7IHJlbWFpbmluZyBmcmFnbWVudHMgYXJlIHJldXNlZC4uLiAqLworCXdoaWxlIChuciA+IDApIHsKKwkJbnItLTsKKwkJcHV0X3BhZ2Uoc2tiX2ZyYWdzX3J4W25yXS5wYWdlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBza19idWZmICptbHg0X2VuX3J4X3NrYihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBtbHg0X2VuX3J4X2Rlc2MgKnJ4X2Rlc2MsCisJCQkJICAgICAgc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqc2tiX2ZyYWdzLAorCQkJCSAgICAgIHN0cnVjdCBtbHg0X2VuX3J4X2FsbG9jICpwYWdlX2FsbG9jLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKnZhOworCWludCB1c2VkX2ZyYWdzOworCWRtYV9hZGRyX3QgZG1hOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihTTUFMTF9QQUNLRVRfU0laRSArIE5FVF9JUF9BTElHTik7CisJaWYgKCFza2IpIHsKKwkJbWx4NF9kYmcoUlhfRVJSLCBwcml2LCAiRmFpbGVkIGFsbG9jYXRpbmcgc2tiXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNrYi0+ZGV2ID0gcHJpdi0+ZGV2OworCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKKwlza2ItPmxlbiA9IGxlbmd0aDsKKwlza2ItPnRydWVzaXplID0gbGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKKworCS8qIEdldCBwb2ludGVyIHRvIGZpcnN0IGZyYWdtZW50IHNvIHdlIGNvdWxkIGNvcHkgdGhlIGhlYWRlcnMgaW50byB0aGUKKwkgKiAobGluZWFyIHBhcnQgb2YgdGhlKSBza2IgKi8KKwl2YSA9IHBhZ2VfYWRkcmVzcyhza2JfZnJhZ3NbMF0ucGFnZSkgKyBza2JfZnJhZ3NbMF0ucGFnZV9vZmZzZXQ7CisKKwlpZiAobGVuZ3RoIDw9IFNNQUxMX1BBQ0tFVF9TSVpFKSB7CisJCS8qIFdlIGFyZSBjb3B5aW5nIGFsbCByZWxldmFudCBkYXRhIHRvIHRoZSBza2IgLSB0ZW1wb3JhcmlseQorCQkgKiBzeW5jaCBidWZmZXJzIGZvciB0aGUgY29weSAqLworCQlkbWEgPSBiZTY0X3RvX2NwdShyeF9kZXNjLT5kYXRhWzBdLmFkZHIpOworCQlkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSgmbWRldi0+cGRldi0+ZGV2LCBkbWEsIDAsCisJCQkJCSAgICAgIGxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCB2YSwgbGVuZ3RoKTsKKwkJZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoJm1kZXYtPnBkZXYtPmRldiwgZG1hLCAwLAorCQkJCQkJIGxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJc2tiLT50YWlsICs9IGxlbmd0aDsKKwl9IGVsc2UgeworCisJCS8qIE1vdmUgcmVsZXZhbnQgZnJhZ21lbnRzIHRvIHNrYiAqLworCQl1c2VkX2ZyYWdzID0gbWx4NF9lbl9jb21wbGV0ZV9yeF9kZXNjKHByaXYsIHJ4X2Rlc2MsIHNrYl9mcmFncywKKwkJCQkJCSAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsCisJCQkJCQkgICAgICBwYWdlX2FsbG9jLCBsZW5ndGgpOworCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gdXNlZF9mcmFnczsKKworCQkvKiBDb3B5IGhlYWRlcnMgaW50byB0aGUgc2tiIGxpbmVhciBidWZmZXIgKi8KKwkJbWVtY3B5KHNrYi0+ZGF0YSwgdmEsIEhFQURFUl9DT1BZX1NJWkUpOworCQlza2ItPnRhaWwgKz0gSEVBREVSX0NPUFlfU0laRTsKKworCQkvKiBTa2lwIGhlYWRlcnMgaW4gZmlyc3QgZnJhZ21lbnQgKi8KKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPSBIRUFERVJfQ09QWV9TSVpFOworCisJCS8qIEFkanVzdCBzaXplIG9mIGZpcnN0IGZyYWdtZW50ICovCisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPSBIRUFERVJfQ09QWV9TSVpFOworCQlza2ItPmRhdGFfbGVuID0gbGVuZ3RoIC0gSEVBREVSX0NPUFlfU0laRTsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHZvaWQgbWx4NF9lbl9jb3B5X2Rlc2Moc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcsCisJCQkgICAgICBpbnQgZnJvbSwgaW50IHRvLCBpbnQgbnVtKQoreworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnNrYl9mcmFnc19mcm9tOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnNrYl9mcmFnc190bzsKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjICpyeF9kZXNjX2Zyb207CisJc3RydWN0IG1seDRfZW5fcnhfZGVzYyAqcnhfZGVzY190bzsKKwlpbnQgZnJvbV9pbmRleCwgdG9faW5kZXg7CisJaW50IG5yLCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWZyb21faW5kZXggPSAoZnJvbSArIGkpICYgcmluZy0+c2l6ZV9tYXNrOworCQl0b19pbmRleCA9ICh0byArIGkpICYgcmluZy0+c2l6ZV9tYXNrOworCQlza2JfZnJhZ3NfZnJvbSA9IHJpbmctPnJ4X2luZm8gKyAoZnJvbV9pbmRleCA8PCBwcml2LT5sb2dfcnhfaW5mbyk7CisJCXNrYl9mcmFnc190byA9IHJpbmctPnJ4X2luZm8gKyAodG9faW5kZXggPDwgcHJpdi0+bG9nX3J4X2luZm8pOworCQlyeF9kZXNjX2Zyb20gPSByaW5nLT5idWYgKyAoZnJvbV9pbmRleCA8PCByaW5nLT5sb2dfc3RyaWRlKTsKKwkJcnhfZGVzY190byA9IHJpbmctPmJ1ZiArICh0b19pbmRleCA8PCByaW5nLT5sb2dfc3RyaWRlKTsKKworCQlmb3IgKG5yID0gMDsgbnIgPCBwcml2LT5udW1fZnJhZ3M7IG5yKyspIHsKKwkJCXNrYl9mcmFnc190b1tucl0ucGFnZSA9IHNrYl9mcmFnc19mcm9tW25yXS5wYWdlOworCQkJc2tiX2ZyYWdzX3RvW25yXS5wYWdlX29mZnNldCA9IHNrYl9mcmFnc19mcm9tW25yXS5wYWdlX29mZnNldDsKKwkJCXJ4X2Rlc2NfdG8tPmRhdGFbbnJdLmFkZHIgPSByeF9kZXNjX2Zyb20tPmRhdGFbbnJdLmFkZHI7CisJCX0KKwl9Cit9CisKKworaW50IG1seDRfZW5fcHJvY2Vzc19yeF9jcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NF9lbl9jcSAqY3EsIGludCBidWRnZXQpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3QgbWx4NF9jcWUgKmNxZTsKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9yaW5nICpyaW5nID0gJnByaXYtPnJ4X3JpbmdbY3EtPnJpbmddOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnNrYl9mcmFnczsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0IGxyb19mcmFnc1tNTFg0X0VOX01BWF9SWF9GUkFHU107CisJc3RydWN0IG1seDRfZW5fcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpbmRleDsKKwlpbnQgbnI7CisJdW5zaWduZWQgaW50IGxlbmd0aDsKKwlpbnQgcG9sbGVkID0gMDsKKwlpbnQgaXBfc3VtbWVkOworCisJaWYgKCFwcml2LT5wb3J0X3VwKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGFzc3VtZSBhIDE6MSBtYXBwaW5nIGJldHdlZW4gQ1FFcyBhbmQgUnggZGVzY3JpcHRvcnMsIHNvIFJ4CisJICogZGVzY3JpcHRvciBvZmZzZXQgY2FuIGJlIGRlZHVjZWQgZnJvbSB0aGUgQ1FFIGluZGV4IGluc3RlYWQgb2YKKwkgKiByZWFkaW5nICdjcWUtPmluZGV4JyAqLworCWluZGV4ID0gY3EtPm1jcS5jb25zX2luZGV4ICYgcmluZy0+c2l6ZV9tYXNrOworCWNxZSA9ICZjcS0+YnVmW2luZGV4XTsKKworCS8qIFByb2Nlc3MgYWxsIGNvbXBsZXRlZCBDUUVzICovCisJd2hpbGUgKFhOT1IoY3FlLT5vd25lcl9zcl9vcGNvZGUgJiBNTFg0X0NRRV9PV05FUl9NQVNLLAorCQkgICAgY3EtPm1jcS5jb25zX2luZGV4ICYgY3EtPnNpemUpKSB7CisKKwkJc2tiX2ZyYWdzID0gcmluZy0+cnhfaW5mbyArIChpbmRleCA8PCBwcml2LT5sb2dfcnhfaW5mbyk7CisJCXJ4X2Rlc2MgPSByaW5nLT5idWYgKyAoaW5kZXggPDwgcmluZy0+bG9nX3N0cmlkZSk7CisKKwkJLyoKKwkJICogbWFrZSBzdXJlIHdlIHJlYWQgdGhlIENRRSBhZnRlciB3ZSByZWFkIHRoZSBvd25lcnNoaXAgYml0CisJCSAqLworCQlybWIoKTsKKworCQkvKiBEcm9wIHBhY2tldCBvbiBiYWQgcmVjZWl2ZSBvciBiYWQgY2hlY2tzdW0gKi8KKwkJaWYgKHVubGlrZWx5KChjcWUtPm93bmVyX3NyX29wY29kZSAmIE1MWDRfQ1FFX09QQ09ERV9NQVNLKSA9PQorCQkJCQkJTUxYNF9DUUVfT1BDT0RFX0VSUk9SKSkgeworCQkJbWx4NF9lcnIobWRldiwgIkNRRSBjb21wbGV0ZWQgaW4gZXJyb3IgLSB2ZW5kb3IgIgorCQkJCSAgInN5bmRyb206JWQgc3luZHJvbTolZFxuIiwKKwkJCQkgICgoc3RydWN0IG1seDRfZXJyX2NxZSAqKSBjcWUpLT52ZW5kb3JfZXJyX3N5bmRyb21lLAorCQkJCSAgKChzdHJ1Y3QgbWx4NF9lcnJfY3FlICopIGNxZSktPnN5bmRyb21lKTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCQlpZiAodW5saWtlbHkoY3FlLT5iYWRmY3NfZW5jICYgTUxYNF9DUUVfQkFEX0ZDUykpIHsKKwkJCW1seDRfZGJnKFJYX0VSUiwgcHJpdiwgIkFjY2VwdGVkIGZyYW1lIHdpdGggYmFkIEZDU1xuIik7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQkvKgorCQkgKiBQYWNrZXQgaXMgT0sgLSBwcm9jZXNzIGl0LgorCQkgKi8KKwkJbGVuZ3RoID0gYmUzMl90b19jcHUoY3FlLT5ieXRlX2NudCk7CisJCXJpbmctPmJ5dGVzICs9IGxlbmd0aDsKKwkJcmluZy0+cGFja2V0cysrOworCisJCWlmIChsaWtlbHkocHJpdi0+cnhfY3N1bSkpIHsKKwkJCWlmICgoY3FlLT5zdGF0dXMgJiBjcHVfdG9fYmUxNihNTFg0X0NRRV9TVEFUVVNfSVBPSykpICYmCisJCQkgICAgKGNxZS0+Y2hlY2tzdW0gPT0gY3B1X3RvX2JlMTYoMHhmZmZmKSkpIHsKKwkJCQlwcml2LT5wb3J0X3N0YXRzLnJ4X2Noa3N1bV9nb29kKys7CisJCQkJLyogVGhpcyBwYWNrZXQgaXMgZWxpZ2libGUgZm9yIExSTyBpZiBpdCBpczoKKwkJCQkgKiAtIERJWCBFdGhlcm5ldCAodHlwZSBpbnRlcnByZXRhdGlvbikKKwkJCQkgKiAtIFRDUC9JUCAodjQpCisJCQkJICogLSB3aXRob3V0IElQIG9wdGlvbnMKKwkJCQkgKiAtIG5vdCBhbiBJUCBmcmFnbWVudCAqLworCQkJCWlmIChtbHg0X2VuX2Nhbl9scm8oY3FlLT5zdGF0dXMpICYmCisJCQkJICAgIGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgeworCisJCQkJCW5yID0gbWx4NF9lbl9jb21wbGV0ZV9yeF9kZXNjKAorCQkJCQkJcHJpdiwgcnhfZGVzYywKKwkJCQkJCXNrYl9mcmFncywgbHJvX2ZyYWdzLAorCQkJCQkJcmluZy0+cGFnZV9hbGxvYywgbGVuZ3RoKTsKKwkJCQkJaWYgKCFucikKKwkJCQkJCWdvdG8gbmV4dDsKKworCQkJCQlpZiAocHJpdi0+dmxncnAgJiYgKGNxZS0+dmxhbl9teV9xcG4gJgorCQkJCQkJCSAgICBjcHVfdG9fYmUzMihNTFg0X0NRRV9WTEFOX1BSRVNFTlRfTUFTSykpKSB7CisJCQkJCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfZnJhZ3MoCisJCQkJCQkgICAgICAgJnJpbmctPmxybywgbHJvX2ZyYWdzLAorCQkJCQkJICAgICAgIGxlbmd0aCwgbGVuZ3RoLAorCQkJCQkJICAgICAgIHByaXYtPnZsZ3JwLAorCQkJCQkJICAgICAgIGJlMTZfdG9fY3B1KGNxZS0+c2xfdmlkKSwKKwkJCQkJCSAgICAgICBOVUxMLCAwKTsKKwkJCQkJfSBlbHNlCisJCQkJCQlscm9fcmVjZWl2ZV9mcmFncygmcmluZy0+bHJvLAorCQkJCQkJCQkgIGxyb19mcmFncywKKwkJCQkJCQkJICBsZW5ndGgsCisJCQkJCQkJCSAgbGVuZ3RoLAorCQkJCQkJCQkgIE5VTEwsIDApOworCisJCQkJCWdvdG8gbmV4dDsKKwkJCQl9CisKKwkJCQkvKiBMUk8gbm90IHBvc3NpYmxlLCBjb21wbGV0ZSBwcm9jZXNzaW5nIGhlcmUgKi8KKwkJCQlpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQlJTkNfUEVSRl9DT1VOVEVSKHByaXYtPnBzdGF0cy5scm9fbWlzc2VzKTsKKwkJCX0gZWxzZSB7CisJCQkJaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCQlwcml2LT5wb3J0X3N0YXRzLnJ4X2Noa3N1bV9ub25lKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQkJcHJpdi0+cG9ydF9zdGF0cy5yeF9jaGtzdW1fbm9uZSsrOworCQl9CisKKwkJc2tiID0gbWx4NF9lbl9yeF9za2IocHJpdiwgcnhfZGVzYywgc2tiX2ZyYWdzLAorCQkJCSAgICAgcmluZy0+cGFnZV9hbGxvYywgbGVuZ3RoKTsKKwkJaWYgKCFza2IpIHsKKwkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCXNrYi0+aXBfc3VtbWVkID0gaXBfc3VtbWVkOworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCisJCS8qIFB1c2ggaXQgdXAgdGhlIHN0YWNrICovCisJCWlmIChwcml2LT52bGdycCAmJiAoYmUzMl90b19jcHUoY3FlLT52bGFuX215X3FwbikgJgorCQkJCSAgICBNTFg0X0NRRV9WTEFOX1BSRVNFTlRfTUFTSykpIHsKKwkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHByaXYtPnZsZ3JwLAorCQkJCQkJYmUxNl90b19jcHUoY3FlLT5zbF92aWQpKTsKKwkJfSBlbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKK25leHQ6CisJCSsrY3EtPm1jcS5jb25zX2luZGV4OworCQlpbmRleCA9IChjcS0+bWNxLmNvbnNfaW5kZXgpICYgcmluZy0+c2l6ZV9tYXNrOworCQljcWUgPSAmY3EtPmJ1ZltpbmRleF07CisJCWlmICgrK3BvbGxlZCA9PSBidWRnZXQpIHsKKwkJCS8qIFdlIGFyZSBoZXJlIGJlY2F1c2Ugd2UgcmVhY2hlZCB0aGUgTkFQSSBidWRnZXQgLQorCQkJICogZmx1c2ggb25seSBwZW5kaW5nIExSTyBzZXNzaW9ucyAqLworCQkJbHJvX2ZsdXNoX2FsbCgmcmluZy0+bHJvKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogSWYgQ1EgaXMgZW1wdHkgZmx1c2ggYWxsIExSTyBzZXNzaW9ucyB1bmNvbmRpdGlvbmFsbHkgKi8KKwlscm9fZmx1c2hfYWxsKCZyaW5nLT5scm8pOworCitvdXQ6CisJQVZHX1BFUkZfQ09VTlRFUihwcml2LT5wc3RhdHMucnhfY29hbF9hdmcsIHBvbGxlZCk7CisJbWx4NF9jcV9zZXRfY2koJmNxLT5tY3EpOworCXdtYigpOyAvKiBlbnN1cmUgSFcgc2VlcyBDUSBjb25zdW1lciBiZWZvcmUgd2UgcG9zdCBuZXcgYnVmZmVycyAqLworCXJpbmctPmNvbnMgPSBjcS0+bWNxLmNvbnNfaW5kZXg7CisJcmluZy0+cHJvZCArPSBwb2xsZWQ7IC8qIFBvbGxlZCBkZXNjcmlwdG9ycyB3ZXJlIHJlYWxvY2F0ZWQgaW4gcGxhY2UgKi8KKwlpZiAodW5saWtlbHkoIXJpbmctPmZ1bGwpKSB7CisJCW1seDRfZW5fY29weV9kZXNjKHByaXYsIHJpbmcsIHJpbmctPmNvbnMgLSBwb2xsZWQsCisJCQkJICByaW5nLT5wcm9kIC0gcG9sbGVkLCBwb2xsZWQpOworCQltbHg0X2VuX2ZpbGxfcnhfYnVmKGRldiwgcmluZyk7CisJfQorCW1seDRfZW5fdXBkYXRlX3J4X3Byb2RfZGIocmluZyk7CisJcmV0dXJuIHBvbGxlZDsKK30KKworCit2b2lkIG1seDRfZW5fcnhfaXJxKHN0cnVjdCBtbHg0X2NxICptY3EpCit7CisJc3RydWN0IG1seDRfZW5fY3EgKmNxID0gY29udGFpbmVyX29mKG1jcSwgc3RydWN0IG1seDRfZW5fY3EsIG1jcSk7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGNxLT5kZXYpOworCisJaWYgKHByaXYtPnBvcnRfdXApCisJCW5ldGlmX3J4X3NjaGVkdWxlKGNxLT5kZXYsICZjcS0+bmFwaSk7CisJZWxzZQorCQltbHg0X2VuX2FybV9jcShwcml2LCBjcSk7Cit9CisKKy8qIFJ4IENRIHBvbGxpbmcgLSBjYWxsZWQgYnkgTkFQSSAqLworaW50IG1seDRfZW5fcG9sbF9yeF9jcShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IG1seDRfZW5fY3EgKmNxID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBtbHg0X2VuX2NxLCBuYXBpKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3EtPmRldjsKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZG9uZTsKKworCWRvbmUgPSBtbHg0X2VuX3Byb2Nlc3NfcnhfY3EoZGV2LCBjcSwgYnVkZ2V0KTsKKworCS8qIElmIHdlIHVzZWQgdXAgYWxsIHRoZSBxdW90YSAtIHdlJ3JlIHByb2JhYmx5IG5vdCBkb25lIHlldC4uLiAqLworCWlmIChkb25lID09IGJ1ZGdldCkKKwkJSU5DX1BFUkZfQ09VTlRFUihwcml2LT5wc3RhdHMubmFwaV9xdW90YSk7CisJZWxzZSB7CisJCS8qIERvbmUgZm9yIG5vdyAqLworCQluZXRpZl9yeF9jb21wbGV0ZShkZXYsIG5hcGkpOworCQltbHg0X2VuX2FybV9jcShwcml2LCBjcSk7CisJfQorCXJldHVybiBkb25lOworfQorCisKKy8qIENhbGN1bGF0ZSB0aGUgbGFzdCBvZmZzZXQgcG9zaXRpb24gdGhhdCBhY2NvbW9kYXRlcyBhIGZ1bGwgZnJhZ21lbnQKKyAqIChhc3N1bWluZyBmYWdtZW50IHNpemUgPSBzdHJpZGUtYWxpZ24pICovCitzdGF0aWMgaW50IG1seDRfZW5fbGFzdF9hbGxvY19vZmZzZXQoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgdTE2IHN0cmlkZSwgdTE2IGFsaWduKQoreworCXUxNiByZXMgPSBNTFg0X0VOX0FMTE9DX1NJWkUgJSBzdHJpZGU7CisJdTE2IG9mZnNldCA9IE1MWDRfRU5fQUxMT0NfU0laRSAtIHN0cmlkZSAtIHJlcyArIGFsaWduOworCisJbWx4NF9kYmcoRFJWLCBwcml2LCAiQ2FsY3VsYXRlZCBsYXN0IG9mZnNldCBmb3Igc3RyaWRlOiVkIGFsaWduOiVkICIKKwkJCSAgICAicmVzOiVkIG9mZnNldDolZFxuIiwgc3RyaWRlLCBhbGlnbiwgcmVzLCBvZmZzZXQpOworCXJldHVybiBvZmZzZXQ7Cit9CisKKworc3RhdGljIGludCBmcmFnX3NpemVzW10gPSB7CisJRlJBR19TWjAsCisJRlJBR19TWjEsCisJRlJBR19TWjIsCisJRlJBR19TWjMKK307CisKK3ZvaWQgbWx4NF9lbl9jYWxjX3J4X2J1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlZmZfbXR1ID0gZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTiArIEVUSF9MTENfU05BUF9TSVpFOworCWludCBidWZfc2l6ZSA9IDA7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGJ1Zl9zaXplIDwgZWZmX210dSkgeworCQlwcml2LT5mcmFnX2luZm9baV0uZnJhZ19zaXplID0KKwkJCShlZmZfbXR1ID4gYnVmX3NpemUgKyBmcmFnX3NpemVzW2ldKSA/CisJCQkJZnJhZ19zaXplc1tpXSA6IGVmZl9tdHUgLSBidWZfc2l6ZTsKKwkJcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfcHJlZml4X3NpemUgPSBidWZfc2l6ZTsKKwkJaWYgKCFpKQl7CisJCQlwcml2LT5mcmFnX2luZm9baV0uZnJhZ19hbGlnbiA9IE5FVF9JUF9BTElHTjsKKwkJCXByaXYtPmZyYWdfaW5mb1tpXS5mcmFnX3N0cmlkZSA9CisJCQkJQUxJR04oZnJhZ19zaXplc1tpXSArIE5FVF9JUF9BTElHTiwgU01QX0NBQ0hFX0JZVEVTKTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmZyYWdfaW5mb1tpXS5mcmFnX2FsaWduID0gMDsKKwkJCXByaXYtPmZyYWdfaW5mb1tpXS5mcmFnX3N0cmlkZSA9CisJCQkJQUxJR04oZnJhZ19zaXplc1tpXSwgU01QX0NBQ0hFX0JZVEVTKTsKKwkJfQorCQlwcml2LT5mcmFnX2luZm9baV0ubGFzdF9vZmZzZXQgPSBtbHg0X2VuX2xhc3RfYWxsb2Nfb2Zmc2V0KAorCQkJCQkJcHJpdiwgcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfc3RyaWRlLAorCQkJCQkJcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfYWxpZ24pOworCQlidWZfc2l6ZSArPSBwcml2LT5mcmFnX2luZm9baV0uZnJhZ19zaXplOworCQlpKys7CisJfQorCisJcHJpdi0+bnVtX2ZyYWdzID0gaTsKKwlwcml2LT5yeF9za2Jfc2l6ZSA9IGVmZl9tdHU7CisJcHJpdi0+bG9nX3J4X2luZm8gPSBST1VORFVQX0xPRzIoaSAqIHNpemVvZihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0KSk7CisKKwltbHg0X2RiZyhEUlYsIHByaXYsICJSeCBidWZmZXIgc2NhdHRlci1saXN0IChlZmZlY3RpdmUtbXR1OiVkICIKKwkJICAibnVtX2ZyYWdzOiVkKTpcbiIsIGVmZl9tdHUsIHByaXYtPm51bV9mcmFncyk7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9mcmFnczsgaSsrKSB7CisJCW1seDRfZGJnKERSViwgcHJpdiwgIiAgZnJhZzolZCAtIHNpemU6JWQgcHJlZml4OiVkIGFsaWduOiVkICIKKwkJCQkic3RyaWRlOiVkIGxhc3Rfb2Zmc2V0OiVkXG4iLCBpLAorCQkJCXByaXYtPmZyYWdfaW5mb1tpXS5mcmFnX3NpemUsCisJCQkJcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfcHJlZml4X3NpemUsCisJCQkJcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfYWxpZ24sCisJCQkJcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfc3RyaWRlLAorCQkJCXByaXYtPmZyYWdfaW5mb1tpXS5sYXN0X29mZnNldCk7CisJfQorfQorCisvKiBSU1MgcmVsYXRlZCBmdW5jdGlvbnMgKi8KKworLyogQ2FsY3VsYXRlIHJzcyBzaXplIGFuZCBtYXAgZWFjaCBlbnRyeSBpbiByc3MgdGFibGUgdG8gcnggcmluZyAqLwordm9pZCBtbHg0X2VuX3NldF9kZWZhdWx0X3Jzc19tYXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IG1seDRfZW5fcnNzX21hcCAqcnNzX21hcCwKKwkJCQkgaW50IG51bV9lbnRyaWVzLCBpbnQgbnVtX3JpbmdzKQoreworCWludCBpOworCisJcnNzX21hcC0+c2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhudW1fZW50cmllcyk7CisJbWx4NF9kYmcoRFJWLCBwcml2LCAiU2V0dGluZyBkZWZhdWx0IFJTUyBtYXAgb2YgJWQgZW50aXJlc1xuIiwKKwkJIHJzc19tYXAtPnNpemUpOworCisJZm9yIChpID0gMDsgaSA8IHJzc19tYXAtPnNpemU7IGkrKykgeworCQlyc3NfbWFwLT5tYXBbaV0gPSBpICUgbnVtX3JpbmdzOworCQltbHg0X2RiZyhEUlYsIHByaXYsICJFbnRyeSAlZCAtLS0+IHJpbmcgJWRcbiIsIGksIHJzc19tYXAtPm1hcFtpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX3NxcF9ldmVudChzdHJ1Y3QgbWx4NF9xcCAqcXAsIGVudW0gbWx4NF9ldmVudCBldmVudCkKK3sKKyAgICByZXR1cm47Cit9CisKKworc3RhdGljIGludCBtbHg0X2VuX2NvbmZpZ19yc3NfcXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCQkgaW50IHFwbiwgaW50IHNycW4sIGludCBjcW4sCisJCQkJIGVudW0gbWx4NF9xcF9zdGF0ZSAqc3RhdGUsCisJCQkJIHN0cnVjdCBtbHg0X3FwICpxcCkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBtbHg0X3FwX2NvbnRleHQgKmNvbnRleHQ7CisJaW50IGVyciA9IDA7CisKKwljb250ZXh0ID0ga21hbGxvYyhzaXplb2YgKmNvbnRleHQgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbnRleHQpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBxcCBjb250ZXh0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXJyID0gbWx4NF9xcF9hbGxvYyhtZGV2LT5kZXYsIHFwbiwgcXApOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBxcCAjJWRcbiIsIHFwbik7CisJCWdvdG8gb3V0OworCQlyZXR1cm4gZXJyOworCX0KKwlxcC0+ZXZlbnQgPSBtbHg0X2VuX3NxcF9ldmVudDsKKworCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2YgKmNvbnRleHQpOworCW1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHByaXYsIDAsIDAsIDAsIDAsIHFwbiwgY3FuLCBzcnFuLCBjb250ZXh0KTsKKworCWVyciA9IG1seDRfcXBfdG9fcmVhZHkobWRldi0+ZGV2LCAmcHJpdi0+cmVzLm10dCwgY29udGV4dCwgcXAsIHN0YXRlKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfcXBfcmVtb3ZlKG1kZXYtPmRldiwgcXApOworCQltbHg0X3FwX2ZyZWUobWRldi0+ZGV2LCBxcCk7CisJfQorb3V0OgorCWtmcmVlKGNvbnRleHQpOworCXJldHVybiBlcnI7Cit9CisKKy8qIEFsbG9jYXRlIHJ4IHFwJ3MgYW5kIGNvbmZpZ3VyZSB0aGVtIGFjY29yZGluZyB0byByc3MgbWFwICovCitpbnQgbWx4NF9lbl9jb25maWdfcnNzX3N0ZWVyKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3QgbWx4NF9lbl9yc3NfbWFwICpyc3NfbWFwID0gJnByaXYtPnJzc19tYXA7CisJc3RydWN0IG1seDRfcXBfY29udGV4dCBjb250ZXh0OworCXN0cnVjdCBtbHg0X2VuX3Jzc19jb250ZXh0ICpyc3NfY29udGV4dDsKKwl2b2lkICpwdHI7CisJaW50IHJzc194b3IgPSBtZGV2LT5wcm9maWxlLnJzc194b3I7CisJdTggcnNzX21hc2sgPSBtZGV2LT5wcm9maWxlLnJzc19tYXNrOworCWludCBpLCBzcnFuLCBxcG4sIGNxbjsKKwlpbnQgZXJyID0gMDsKKwlpbnQgZ29vZF9xcHMgPSAwOworCisJbWx4NF9kYmcoRFJWLCBwcml2LCAiQ29uZmlndXJpbmcgcnNzIHN0ZWVyaW5nIGZvciBwb3J0ICV1XG4iLCBwcml2LT5wb3J0KTsKKwllcnIgPSBtbHg0X3FwX3Jlc2VydmVfcmFuZ2UobWRldi0+ZGV2LCByc3NfbWFwLT5zaXplLAorCQkJCSAgICByc3NfbWFwLT5zaXplLCAmcnNzX21hcC0+YmFzZV9xcG4pOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCByZXNlcnZpbmcgJWQgcXBzIGZvciBwb3J0ICV1XG4iLAorCQkJIHJzc19tYXAtPnNpemUsIHByaXYtPnBvcnQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByc3NfbWFwLT5zaXplOyBpKyspIHsKKwkJY3FuID0gcHJpdi0+cnhfcmluZ1tyc3NfbWFwLT5tYXBbaV1dLmNxbjsKKwkJc3JxbiA9IHByaXYtPnJ4X3JpbmdbcnNzX21hcC0+bWFwW2ldXS5zcnEuc3JxbjsKKwkJcXBuID0gcnNzX21hcC0+YmFzZV9xcG4gKyBpOworCQllcnIgPSBtbHg0X2VuX2NvbmZpZ19yc3NfcXAocHJpdiwgcXBuLCBzcnFuLCBjcW4sCisJCQkJCSAgICAmcnNzX21hcC0+c3RhdGVbaV0sCisJCQkJCSAgICAmcnNzX21hcC0+cXBzW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcnNzX2VycjsKKworCQkrK2dvb2RfcXBzOworCX0KKworCS8qIENvbmZpZ3VyZSBSU1MgaW5kaXJlY3Rpb24gcXAgKi8KKwllcnIgPSBtbHg0X3FwX3Jlc2VydmVfcmFuZ2UobWRldi0+ZGV2LCAxLCAxLCAmcHJpdi0+YmFzZV9xcG4pOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byByZXNlcnZlIHJhbmdlIGZvciBSU1MgIgorCQkJICAgICAgICJpbmRpcmVjdGlvbiBxcFxuIik7CisJCWdvdG8gcnNzX2VycjsKKwl9CisJZXJyID0gbWx4NF9xcF9hbGxvYyhtZGV2LT5kZXYsIHByaXYtPmJhc2VfcXBuLCAmcnNzX21hcC0+aW5kaXJfcXApOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBSU1MgaW5kaXJlY3Rpb24gUVBcbiIpOworCQlnb3RvIHJlc2VydmVfZXJyOworCX0KKwlyc3NfbWFwLT5pbmRpcl9xcC5ldmVudCA9IG1seDRfZW5fc3FwX2V2ZW50OworCW1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHByaXYsIDAsIDAsIDAsIDEsIHByaXYtPmJhc2VfcXBuLAorCQkJCXByaXYtPnJ4X3JpbmdbMF0uY3FuLCAwLCAmY29udGV4dCk7CisKKwlwdHIgPSAoKHZvaWQgKikgJmNvbnRleHQpICsgMHgzYzsKKwlyc3NfY29udGV4dCA9IChzdHJ1Y3QgbWx4NF9lbl9yc3NfY29udGV4dCAqKSBwdHI7CisJcnNzX2NvbnRleHQtPmJhc2VfcXBuID0gY3B1X3RvX2JlMzIoaWxvZzIocnNzX21hcC0+c2l6ZSkgPDwgMjQgfAorCQkJCQkgICAgKHJzc19tYXAtPmJhc2VfcXBuKSk7CisJcnNzX2NvbnRleHQtPmRlZmF1bHRfcXBuID0gY3B1X3RvX2JlMzIocnNzX21hcC0+YmFzZV9xcG4pOworCXJzc19jb250ZXh0LT5oYXNoX2ZuID0gcnNzX3hvciAmIDB4MzsKKwlyc3NfY29udGV4dC0+ZmxhZ3MgPSByc3NfbWFzayA8PCAyOworCisJZXJyID0gbWx4NF9xcF90b19yZWFkeShtZGV2LT5kZXYsICZwcml2LT5yZXMubXR0LCAmY29udGV4dCwKKwkJCSAgICAgICAmcnNzX21hcC0+aW5kaXJfcXAsICZyc3NfbWFwLT5pbmRpcl9zdGF0ZSk7CisJaWYgKGVycikKKwkJZ290byBpbmRpcl9lcnI7CisKKwlyZXR1cm4gMDsKKworaW5kaXJfZXJyOgorCW1seDRfcXBfbW9kaWZ5KG1kZXYtPmRldiwgTlVMTCwgcnNzX21hcC0+aW5kaXJfc3RhdGUsCisJCSAgICAgICBNTFg0X1FQX1NUQVRFX1JTVCwgTlVMTCwgMCwgMCwgJnJzc19tYXAtPmluZGlyX3FwKTsKKwltbHg0X3FwX3JlbW92ZShtZGV2LT5kZXYsICZyc3NfbWFwLT5pbmRpcl9xcCk7CisJbWx4NF9xcF9mcmVlKG1kZXYtPmRldiwgJnJzc19tYXAtPmluZGlyX3FwKTsKK3Jlc2VydmVfZXJyOgorCW1seDRfcXBfcmVsZWFzZV9yYW5nZShtZGV2LT5kZXYsIHByaXYtPmJhc2VfcXBuLCAxKTsKK3Jzc19lcnI6CisJZm9yIChpID0gMDsgaSA8IGdvb2RfcXBzOyBpKyspIHsKKwkJbWx4NF9xcF9tb2RpZnkobWRldi0+ZGV2LCBOVUxMLCByc3NfbWFwLT5zdGF0ZVtpXSwKKwkJCSAgICAgICBNTFg0X1FQX1NUQVRFX1JTVCwgTlVMTCwgMCwgMCwgJnJzc19tYXAtPnFwc1tpXSk7CisJCW1seDRfcXBfcmVtb3ZlKG1kZXYtPmRldiwgJnJzc19tYXAtPnFwc1tpXSk7CisJCW1seDRfcXBfZnJlZShtZGV2LT5kZXYsICZyc3NfbWFwLT5xcHNbaV0pOworCX0KKwltbHg0X3FwX3JlbGVhc2VfcmFuZ2UobWRldi0+ZGV2LCByc3NfbWFwLT5iYXNlX3FwbiwgcnNzX21hcC0+c2l6ZSk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBtbHg0X2VuX3JlbGVhc2VfcnNzX3N0ZWVyKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlzdHJ1Y3QgbWx4NF9lbl9yc3NfbWFwICpyc3NfbWFwID0gJnByaXYtPnJzc19tYXA7CisJaW50IGk7CisKKwltbHg0X3FwX21vZGlmeShtZGV2LT5kZXYsIE5VTEwsIHJzc19tYXAtPmluZGlyX3N0YXRlLAorCQkgICAgICAgTUxYNF9RUF9TVEFURV9SU1QsIE5VTEwsIDAsIDAsICZyc3NfbWFwLT5pbmRpcl9xcCk7CisJbWx4NF9xcF9yZW1vdmUobWRldi0+ZGV2LCAmcnNzX21hcC0+aW5kaXJfcXApOworCW1seDRfcXBfZnJlZShtZGV2LT5kZXYsICZyc3NfbWFwLT5pbmRpcl9xcCk7CisJbWx4NF9xcF9yZWxlYXNlX3JhbmdlKG1kZXYtPmRldiwgcHJpdi0+YmFzZV9xcG4sIDEpOworCisJZm9yIChpID0gMDsgaSA8IHJzc19tYXAtPnNpemU7IGkrKykgeworCQltbHg0X3FwX21vZGlmeShtZGV2LT5kZXYsIE5VTEwsIHJzc19tYXAtPnN0YXRlW2ldLAorCQkJICAgICAgIE1MWDRfUVBfU1RBVEVfUlNULCBOVUxMLCAwLCAwLCAmcnNzX21hcC0+cXBzW2ldKTsKKwkJbWx4NF9xcF9yZW1vdmUobWRldi0+ZGV2LCAmcnNzX21hcC0+cXBzW2ldKTsKKwkJbWx4NF9xcF9mcmVlKG1kZXYtPmRldiwgJnJzc19tYXAtPnFwc1tpXSk7CisJfQorCW1seDRfcXBfcmVsZWFzZV9yYW5nZShtZGV2LT5kZXYsIHJzc19tYXAtPmJhc2VfcXBuLCByc3NfbWFwLT5zaXplKTsKK30KKworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3R4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5MmY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fdHguYwpAQCAtMCwwICsxLDgyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9jcS5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvcXAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAibWx4NF9lbi5oIgorCitlbnVtIHsKKwlNQVhfSU5MSU5FID0gMTA0LCAvKiAxMjggLSAxNiAtIDQgLSA0ICovCit9OworCitzdGF0aWMgaW50IGlubGluZV90aG9sZCBfX3JlYWRfbW9zdGx5ID0gTUFYX0lOTElORTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGlubGluZV90aG9sZCwgaW5saW5lX3Rob2xkLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmxpbmVfdGhvbGQsICJ0cmVzaG9sZCBmb3IgdXNpbmcgaW5saW5lIGRhdGEiKTsKKworaW50IG1seDRfZW5fY3JlYXRlX3R4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcsIHUzMiBzaXplLAorCQkJICAgdTE2IHN0cmlkZSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCWludCB0bXA7CisJaW50IGVycjsKKworCXJpbmctPnNpemUgPSBzaXplOworCXJpbmctPnNpemVfbWFzayA9IHNpemUgLSAxOworCXJpbmctPnN0cmlkZSA9IHN0cmlkZTsKKworCWlubGluZV90aG9sZCA9IG1pbihpbmxpbmVfdGhvbGQsIE1BWF9JTkxJTkUpOworCisJc3Bpbl9sb2NrX2luaXQoJnJpbmctPmNvbXBfbG9jayk7CisKKwl0bXAgPSBzaXplICogc2l6ZW9mKHN0cnVjdCBtbHg0X2VuX3R4X2luZm8pOworCXJpbmctPnR4X2luZm8gPSB2bWFsbG9jKHRtcCk7CisJaWYgKCFyaW5nLT50eF9pbmZvKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgYWxsb2NhdGluZyB0eF9pbmZvIHJpbmdcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWx4NF9kYmcoRFJWLCBwcml2LCAiQWxsb2NhdGVkIHR4X2luZm8gcmluZyBhdCBhZGRyOiVwIHNpemU6JWRcbiIsCisJCSByaW5nLT50eF9pbmZvLCB0bXApOworCisJcmluZy0+Ym91bmNlX2J1ZiA9IGttYWxsb2MoTUFYX0RFU0NfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyaW5nLT5ib3VuY2VfYnVmKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgYWxsb2NhdGluZyBib3VuY2UgYnVmZmVyXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfdHg7CisJfQorCXJpbmctPmJ1Zl9zaXplID0gQUxJR04oc2l6ZSAqIHJpbmctPnN0cmlkZSwgTUxYNF9FTl9QQUdFX1NJWkUpOworCisJZXJyID0gbWx4NF9hbGxvY19od3FfcmVzKG1kZXYtPmRldiwgJnJpbmctPndxcmVzLCByaW5nLT5idWZfc2l6ZSwKKwkJCQkgMiAqIFBBR0VfU0laRSk7CisJaWYgKGVycikgeworCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIGFsbG9jYXRpbmcgaHdxIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX2JvdW5jZTsKKwl9CisKKwllcnIgPSBtbHg0X2VuX21hcF9idWZmZXIoJnJpbmctPndxcmVzLmJ1Zik7CisJaWYgKGVycikgeworCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIHRvIG1hcCBUWCBidWZmZXJcbiIpOworCQlnb3RvIGVycl9od3FfcmVzOworCX0KKworCXJpbmctPmJ1ZiA9IHJpbmctPndxcmVzLmJ1Zi5kaXJlY3QuYnVmOworCisJbWx4NF9kYmcoRFJWLCBwcml2LCAiQWxsb2NhdGVkIFRYIHJpbmcgKGFkZHI6JXApIC0gYnVmOiVwIHNpemU6JWQgIgorCQkgImJ1Zl9zaXplOiVkIGRtYTolbGx4XG4iLCByaW5nLCByaW5nLT5idWYsIHJpbmctPnNpemUsCisJCSByaW5nLT5idWZfc2l6ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmluZy0+d3FyZXMuYnVmLmRpcmVjdC5tYXApOworCisJZXJyID0gbWx4NF9xcF9yZXNlcnZlX3JhbmdlKG1kZXYtPmRldiwgMSwgMSwgJnJpbmctPnFwbik7CisJaWYgKGVycikgeworCQltbHg0X2VycihtZGV2LCAiRmFpbGVkIHJlc2VydmluZyBxcCBmb3IgdHggcmluZy5cbiIpOworCQlnb3RvIGVycl9tYXA7CisJfQorCisJZXJyID0gbWx4NF9xcF9hbGxvYyhtZGV2LT5kZXYsIHJpbmctPnFwbiwgJnJpbmctPnFwKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgYWxsb2NhdGluZyBxcCAlZFxuIiwgcmluZy0+cXBuKTsKKwkJZ290byBlcnJfcmVzZXJ2ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3Jlc2VydmU6CisJbWx4NF9xcF9yZWxlYXNlX3JhbmdlKG1kZXYtPmRldiwgcmluZy0+cXBuLCAxKTsKK2Vycl9tYXA6CisJbWx4NF9lbl91bm1hcF9idWZmZXIoJnJpbmctPndxcmVzLmJ1Zik7CitlcnJfaHdxX3JlczoKKwltbHg0X2ZyZWVfaHdxX3JlcyhtZGV2LT5kZXYsICZyaW5nLT53cXJlcywgcmluZy0+YnVmX3NpemUpOworZXJyX2JvdW5jZToKKwlrZnJlZShyaW5nLT5ib3VuY2VfYnVmKTsKKwlyaW5nLT5ib3VuY2VfYnVmID0gTlVMTDsKK2Vycl90eDoKKwl2ZnJlZShyaW5nLT50eF9pbmZvKTsKKwlyaW5nLT50eF9pbmZvID0gTlVMTDsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIG1seDRfZW5fZGVzdHJveV90eF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwltbHg0X2RiZyhEUlYsIHByaXYsICJEZXN0cm95aW5nIHR4IHJpbmcsIHFwbjogJWRcbiIsIHJpbmctPnFwbik7CisKKwltbHg0X3FwX3JlbW92ZShtZGV2LT5kZXYsICZyaW5nLT5xcCk7CisJbWx4NF9xcF9mcmVlKG1kZXYtPmRldiwgJnJpbmctPnFwKTsKKwltbHg0X3FwX3JlbGVhc2VfcmFuZ2UobWRldi0+ZGV2LCByaW5nLT5xcG4sIDEpOworCW1seDRfZW5fdW5tYXBfYnVmZmVyKCZyaW5nLT53cXJlcy5idWYpOworCW1seDRfZnJlZV9od3FfcmVzKG1kZXYtPmRldiwgJnJpbmctPndxcmVzLCByaW5nLT5idWZfc2l6ZSk7CisJa2ZyZWUocmluZy0+Ym91bmNlX2J1Zik7CisJcmluZy0+Ym91bmNlX2J1ZiA9IE5VTEw7CisJdmZyZWUocmluZy0+dHhfaW5mbyk7CisJcmluZy0+dHhfaW5mbyA9IE5VTEw7Cit9CisKK2ludCBtbHg0X2VuX2FjdGl2YXRlX3R4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IG1seDRfZW5fdHhfcmluZyAqcmluZywKKwkJCSAgICAgaW50IGNxLCBpbnQgc3JxbikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCWludCBlcnI7CisKKwlyaW5nLT5jcW4gPSBjcTsKKwlyaW5nLT5wcm9kID0gMDsKKwlyaW5nLT5jb25zID0gMHhmZmZmZmZmZjsKKwlyaW5nLT5sYXN0X25yX3R4YmIgPSAxOworCXJpbmctPnBvbGxfY250ID0gMDsKKwlyaW5nLT5ibG9ja2VkID0gMDsKKwltZW1zZXQocmluZy0+dHhfaW5mbywgMCwgcmluZy0+c2l6ZSAqIHNpemVvZihzdHJ1Y3QgbWx4NF9lbl90eF9pbmZvKSk7CisJbWVtc2V0KHJpbmctPmJ1ZiwgMCwgcmluZy0+YnVmX3NpemUpOworCisJcmluZy0+cXBfc3RhdGUgPSBNTFg0X1FQX1NUQVRFX1JTVDsKKwlyaW5nLT5kb29yYmVsbF9xcG4gPSBzd2FiMzIocmluZy0+cXAucXBuIDw8IDgpOworCisJbWx4NF9lbl9maWxsX3FwX2NvbnRleHQocHJpdiwgcmluZy0+c2l6ZSwgcmluZy0+c3RyaWRlLCAxLCAwLCByaW5nLT5xcG4sCisJCQkJcmluZy0+Y3FuLCBzcnFuLCAmcmluZy0+Y29udGV4dCk7CisKKwllcnIgPSBtbHg0X3FwX3RvX3JlYWR5KG1kZXYtPmRldiwgJnJpbmctPndxcmVzLm10dCwgJnJpbmctPmNvbnRleHQsCisJCQkgICAgICAgJnJpbmctPnFwLCAmcmluZy0+cXBfc3RhdGUpOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBtbHg0X2VuX2RlYWN0aXZhdGVfdHhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKworCW1seDRfcXBfbW9kaWZ5KG1kZXYtPmRldiwgTlVMTCwgcmluZy0+cXBfc3RhdGUsCisJCSAgICAgICBNTFg0X1FQX1NUQVRFX1JTVCwgTlVMTCwgMCwgMCwgJnJpbmctPnFwKTsKK30KKworCitzdGF0aWMgdTMyIG1seDRfZW5fZnJlZV90eF9kZXNjKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IG1seDRfZW5fdHhfcmluZyAqcmluZywKKwkJCQlpbnQgaW5kZXgsIHU4IG93bmVyKQoreworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CisJc3RydWN0IG1seDRfZW5fdHhfaW5mbyAqdHhfaW5mbyA9ICZyaW5nLT50eF9pbmZvW2luZGV4XTsKKwlzdHJ1Y3QgbWx4NF9lbl90eF9kZXNjICp0eF9kZXNjID0gcmluZy0+YnVmICsgaW5kZXggKiBUWEJCX1NJWkU7CisJc3RydWN0IG1seDRfd3FlX2RhdGFfc2VnICpkYXRhID0gKHZvaWQgKikgdHhfZGVzYyArIHR4X2luZm8tPmRhdGFfb2Zmc2V0OworCXN0cnVjdCBza19idWZmICpza2IgPSB0eF9pbmZvLT5za2I7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKKwl2b2lkICplbmQgPSByaW5nLT5idWYgKyByaW5nLT5idWZfc2l6ZTsKKwlpbnQgZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCWludCBpOworCV9fYmUzMiAqcHRyID0gKF9fYmUzMiAqKXR4X2Rlc2M7CisJX19iZTMyIHN0YW1wID0gY3B1X3RvX2JlMzIoU1RBTVBfVkFMIHwgKCEhb3duZXIgPDwgU1RBTVBfU0hJRlQpKTsKKworCS8qIE9wdGltaXplIHRoZSBjb21tb24gY2FzZSB3aGVuIHRoZXJlIGFyZSBubyB3cmFwYXJvdW5kcyAqLworCWlmIChsaWtlbHkoKHZvaWQgKikgdHhfZGVzYyArIHR4X2luZm8tPm5yX3R4YmIgKiBUWEJCX1NJWkUgPD0gZW5kKSkgeworCQlpZiAodHhfaW5mby0+bGluZWFyKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKG1kZXYtPnBkZXYsCisJCQkJCSAoZG1hX2FkZHJfdCkgYmU2NF90b19jcHUoZGF0YS0+YWRkciksCisJCQkJCSBiZTMyX3RvX2NwdShkYXRhLT5ieXRlX2NvdW50KSwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJKytkYXRhOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYWdzOyBpKyspIHsKKwkJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJCXBjaV91bm1hcF9wYWdlKG1kZXYtPnBkZXYsCisJCQkJICAgICAgIChkbWFfYWRkcl90KSBiZTY0X3RvX2NwdShkYXRhW2ldLmFkZHIpLAorCQkJCSAgICAgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfQorCQkvKiBTdGFtcCB0aGUgZnJlZWQgZGVzY3JpcHRvciAqLworCQlmb3IgKGkgPSAwOyBpIDwgdHhfaW5mby0+bnJfdHhiYiAqIFRYQkJfU0laRTsgaSArPSBTVEFNUF9TVFJJREUpIHsKKwkJCSpwdHIgPSBzdGFtcDsKKwkJCXB0ciArPSBTVEFNUF9EV09SRFM7CisJCX0KKworCX0gZWxzZSB7CisJCWlmICgodm9pZCAqKSBkYXRhID49IGVuZCkgeworCQkJZGF0YSA9IChzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgKikKKwkJCQkJKHJpbmctPmJ1ZiArICgodm9pZCAqKSBkYXRhIC0gZW5kKSk7CisJCX0KKworCQlpZiAodHhfaW5mby0+bGluZWFyKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKG1kZXYtPnBkZXYsCisJCQkJCSAoZG1hX2FkZHJfdCkgYmU2NF90b19jcHUoZGF0YS0+YWRkciksCisJCQkJCSBiZTMyX3RvX2NwdShkYXRhLT5ieXRlX2NvdW50KSwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJKytkYXRhOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYWdzOyBpKyspIHsKKwkJCS8qIENoZWNrIGZvciB3cmFwYXJvdW5kIGJlZm9yZSB1bm1hcHBpbmcgKi8KKwkJCWlmICgodm9pZCAqKSBkYXRhID49IGVuZCkKKwkJCQlkYXRhID0gKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyAqKSByaW5nLT5idWY7CisJCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQlwY2lfdW5tYXBfcGFnZShtZGV2LT5wZGV2LAorCQkJCQkoZG1hX2FkZHJfdCkgYmU2NF90b19jcHUoZGF0YS0+YWRkciksCisJCQkJCSBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfQorCQkvKiBTdGFtcCB0aGUgZnJlZWQgZGVzY3JpcHRvciAqLworCQlmb3IgKGkgPSAwOyBpIDwgdHhfaW5mby0+bnJfdHhiYiAqIFRYQkJfU0laRTsgaSArPSBTVEFNUF9TVFJJREUpIHsKKwkJCSpwdHIgPSBzdGFtcDsKKwkJCXB0ciArPSBTVEFNUF9EV09SRFM7CisJCQlpZiAoKHZvaWQgKikgcHRyID49IGVuZCkgeworCQkJCXB0ciA9IHJpbmctPmJ1ZjsKKwkJCQlzdGFtcCBePSBjcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKKwkJCX0KKwkJfQorCisJfQorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIHR4X2luZm8tPm5yX3R4YmI7Cit9CisKKworaW50IG1seDRfZW5fZnJlZV90eF9idWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDRfZW5fdHhfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgY250ID0gMDsKKworCS8qIFNraXAgbGFzdCBwb2xsZWQgZGVzY3JpcHRvciAqLworCXJpbmctPmNvbnMgKz0gcmluZy0+bGFzdF9ucl90eGJiOworCW1seDRfZGJnKERSViwgcHJpdiwgIkZyZWVpbmcgVHggYnVmIC0gY29uczoweCV4IHByb2Q6MHgleFxuIiwKKwkJIHJpbmctPmNvbnMsIHJpbmctPnByb2QpOworCisJaWYgKCh1MzIpIChyaW5nLT5wcm9kIC0gcmluZy0+Y29ucykgPiByaW5nLT5zaXplKSB7CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHByaXYpKQorCQkJbWx4NF93YXJuKHByaXYtPm1kZXYsICJUeCBjb25zdW1lciBwYXNzZWQgcHJvZHVjZXIhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKHJpbmctPmNvbnMgIT0gcmluZy0+cHJvZCkgeworCQlyaW5nLT5sYXN0X25yX3R4YmIgPSBtbHg0X2VuX2ZyZWVfdHhfZGVzYyhwcml2LCByaW5nLAorCQkJCQkJcmluZy0+Y29ucyAmIHJpbmctPnNpemVfbWFzaywKKwkJCQkJCSEhKHJpbmctPmNvbnMgJiByaW5nLT5zaXplKSk7CisJCXJpbmctPmNvbnMgKz0gcmluZy0+bGFzdF9ucl90eGJiOworCQljbnQrKzsKKwl9CisKKwlpZiAoY250KQorCQltbHg0X2RiZyhEUlYsIHByaXYsICJGcmVlZCAlZCB1bmNvbXBsZXRlZCB0eCBkZXNjcmlwdG9yc1xuIiwgY250KTsKKworCXJldHVybiBjbnQ7Cit9CisKK3ZvaWQgbWx4NF9lbl9zZXRfcHJpb19tYXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgdTE2ICpwcmlvX21hcCwgdTMyIHJpbmdfbnVtKQoreworCWludCBibG9jayA9IDggLyByaW5nX251bTsKKwlpbnQgZXh0cmEgPSA4IC0gKGJsb2NrICogcmluZ19udW0pOworCWludCBudW0gPSAwOworCXUxNiByaW5nID0gMTsKKwlpbnQgcHJpbzsKKworCWlmIChyaW5nX251bSA9PSAxKSB7CisJCWZvciAocHJpbyA9IDA7IHByaW8gPCA4OyBwcmlvKyspCisJCQlwcmlvX21hcFtwcmlvXSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKHByaW8gPSAwOyBwcmlvIDwgODsgcHJpbysrKSB7CisJCWlmIChleHRyYSAmJiAobnVtID09IGJsb2NrICsgMSkpIHsKKwkJCXJpbmcrKzsKKwkJCW51bSA9IDA7CisJCQlleHRyYS0tOworCQl9IGVsc2UgaWYgKCFleHRyYSAmJiAobnVtID09IGJsb2NrKSkgeworCQkJcmluZysrOworCQkJbnVtID0gMDsKKwkJfQorCQlwcmlvX21hcFtwcmlvXSA9IHJpbmc7CisJCW1seDRfZGJnKERSViwgcHJpdiwgIiBwcmlvOiVkIC0tPiByaW5nOiVkXG4iLCBwcmlvLCByaW5nKTsKKwkJbnVtKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBtbHg0X2VuX3Byb2Nlc3NfdHhfY3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDRfZW5fY3EgKmNxKQoreworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2NxICptY3EgPSAmY3EtPm1jcTsKKwlzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nID0gJnByaXYtPnR4X3JpbmdbY3EtPnJpbmddOworCXN0cnVjdCBtbHg0X2NxZSAqY3FlID0gY3EtPmJ1ZjsKKwl1MTYgaW5kZXg7CisJdTE2IG5ld19pbmRleDsKKwl1MzIgdHhiYnNfc2tpcHBlZCA9IDA7CisJdTMyIGNxX2xhc3Rfc2F2OworCisJLyogaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgZmlyc3QgVFhCQiBvZiB0aGUgbGFzdCBwb2xsZWQgZGVzY3JpcHRvciAqLworCWluZGV4ID0gcmluZy0+Y29ucyAmIHJpbmctPnNpemVfbWFzazsKKwluZXdfaW5kZXggPSBiZTE2X3RvX2NwdShjcWUtPndxZV9pbmRleCkgJiByaW5nLT5zaXplX21hc2s7CisJaWYgKGluZGV4ID09IG5ld19pbmRleCkKKwkJcmV0dXJuOworCisJaWYgKCFwcml2LT5wb3J0X3VwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIHVzZSBhIHR3by1zdGFnZSBsb29wOgorCSAqIC0gdGhlIGZpcnN0IHNhbXBsZXMgdGhlIEhXLXVwZGF0ZWQgQ1FFCisJICogLSB0aGUgc2Vjb25kIGZyZWVzIFRYQkJzIHVudGlsIHRoZSBsYXN0IHNhbXBsZQorCSAqIFRoaXMgbGV0cyB1cyBhbW9ydGl6ZSBDUUUgY2FjaGUgbWlzc2VzLCB3aGlsZSBzdGlsbCBwb2xsaW5nIHRoZSBDUQorCSAqIHVudGlsIGlzIHF1aWVzY2VudC4KKwkgKi8KKwljcV9sYXN0X3NhdiA9IG1jcS0+Y29uc19pbmRleDsKKwlkbyB7CisJCWRvIHsKKwkJCS8qIFNraXAgb3ZlciBsYXN0IHBvbGxlZCBDUUUgKi8KKwkJCWluZGV4ID0gKGluZGV4ICsgcmluZy0+bGFzdF9ucl90eGJiKSAmIHJpbmctPnNpemVfbWFzazsKKwkJCXR4YmJzX3NraXBwZWQgKz0gcmluZy0+bGFzdF9ucl90eGJiOworCisJCQkvKiBQb2xsIG5leHQgQ1FFICovCisJCQlyaW5nLT5sYXN0X25yX3R4YmIgPSBtbHg0X2VuX2ZyZWVfdHhfZGVzYygKKwkJCQkJCXByaXYsIHJpbmcsIGluZGV4LAorCQkJCQkJISEoKHJpbmctPmNvbnMgKyB0eGJic19za2lwcGVkKSAmCisJCQkJCQkgICByaW5nLT5zaXplKSk7CisJCQkrK21jcS0+Y29uc19pbmRleDsKKworCQl9IHdoaWxlIChpbmRleCAhPSBuZXdfaW5kZXgpOworCisJCW5ld19pbmRleCA9IGJlMTZfdG9fY3B1KGNxZS0+d3FlX2luZGV4KSAmIHJpbmctPnNpemVfbWFzazsKKwl9IHdoaWxlIChpbmRleCAhPSBuZXdfaW5kZXgpOworCUFWR19QRVJGX0NPVU5URVIocHJpdi0+cHN0YXRzLnR4X2NvYWxfYXZnLAorCQkJICh1MzIpIChtY3EtPmNvbnNfaW5kZXggLSBjcV9sYXN0X3NhdikpOworCisJLyoKKwkgKiBUbyBwcmV2ZW50IENRIG92ZXJmbG93IHdlIGZpcnN0IHVwZGF0ZSBDUSBjb25zdW1lciBhbmQgb25seSB0aGVuCisJICogdGhlIHJpbmcgY29uc3VtZXIuCisJICovCisJbWx4NF9jcV9zZXRfY2kobWNxKTsKKwl3bWIoKTsKKwlyaW5nLT5jb25zICs9IHR4YmJzX3NraXBwZWQ7CisKKwkvKiBXYWtldXAgVHggcXVldWUgaWYgdGhpcyByaW5nIHN0b3BwZWQgaXQgKi8KKwlpZiAodW5saWtlbHkocmluZy0+YmxvY2tlZCkpIHsKKwkJaWYgKCgodTMyKSAocmluZy0+cHJvZCAtIHJpbmctPmNvbnMpIDw9CisJCSAgICAgcmluZy0+c2l6ZSAtIEhFQURST09NIC0gTUFYX0RFU0NfVFhCQlMpICYmICFjcS0+YXJtZWQpIHsKKworCQkJLyogVE9ETzogc3VwcG9ydCBtdWx0aXF1ZXVlIG5ldGRldnMuIEN1cnJlbnRseSwgd2UgYmxvY2sKKwkJCSAqIHdoZW4gKmFueSogcmluZyBpcyBmdWxsLiBOb3RlIHRoYXQ6CisJCQkgKiAtIDIgVHggcmluZ3MgY2FuIHVuYmxvY2sgYXQgdGhlIHNhbWUgdGltZSBhbmQgY2FsbAorCQkJICogICBuZXRpZl93YWtlX3F1ZXVlKCksIHdoaWNoIGlzIE9LIHNpbmNlIHRoaXMKKwkJCSAqICAgb3BlcmF0aW9uIGlzIGlkZW1wb3RlbnQuCisJCQkgKiAtIFdlIG1pZ2h0IHdha2UgdGhlIHF1ZXVlIGp1c3QgYWZ0ZXIgYW5vdGhlciByaW5nCisJCQkgKiAgIHN0b3BwZWQgaXQuIFRoaXMgaXMgbm8gYmlnIGRlYWwgYmVjYXVzZSB0aGUgbmV4dAorCQkJICogICB0cmFuc21pc3Npb24gb24gdGhhdCByaW5nIHdvdWxkIHN0b3AgdGhlIHF1ZXVlLgorCQkJICovCisJCQlyaW5nLT5ibG9ja2VkID0gMDsKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJCXByaXYtPnBvcnRfc3RhdHMud2FrZV9xdWV1ZSsrOworCQl9CisJfQorfQorCit2b2lkIG1seDRfZW5fdHhfaXJxKHN0cnVjdCBtbHg0X2NxICptY3EpCit7CisJc3RydWN0IG1seDRfZW5fY3EgKmNxID0gY29udGFpbmVyX29mKG1jcSwgc3RydWN0IG1seDRfZW5fY3EsIG1jcSk7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGNxLT5kZXYpOworCXN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcgPSAmcHJpdi0+dHhfcmluZ1tjcS0+cmluZ107CisKKwlzcGluX2xvY2tfaXJxKCZyaW5nLT5jb21wX2xvY2spOworCWNxLT5hcm1lZCA9IDA7CisJbWx4NF9lbl9wcm9jZXNzX3R4X2NxKGNxLT5kZXYsIGNxKTsKKwlpZiAocmluZy0+YmxvY2tlZCkKKwkJbWx4NF9lbl9hcm1fY3EocHJpdiwgY3EpOworCWVsc2UKKwkJbW9kX3RpbWVyKCZjcS0+dGltZXIsIGppZmZpZXMgKyAxKTsKKwlzcGluX3VubG9ja19pcnEoJnJpbmctPmNvbXBfbG9jayk7Cit9CisKKwordm9pZCBtbHg0X2VuX3BvbGxfdHhfY3EodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBtbHg0X2VuX2NxICpjcSA9IChzdHJ1Y3QgbWx4NF9lbl9jcSAqKSBkYXRhOworCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihjcS0+ZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nID0gJnByaXYtPnR4X3JpbmdbY3EtPnJpbmddOworCXUzMiBpbmZsaWdodDsKKworCUlOQ19QRVJGX0NPVU5URVIocHJpdi0+cHN0YXRzLnR4X3BvbGwpOworCisJbmV0aWZfdHhfbG9jayhwcml2LT5kZXYpOworCXNwaW5fbG9ja19pcnEoJnJpbmctPmNvbXBfbG9jayk7CisJbWx4NF9lbl9wcm9jZXNzX3R4X2NxKGNxLT5kZXYsIGNxKTsKKwlpbmZsaWdodCA9ICh1MzIpIChyaW5nLT5wcm9kIC0gcmluZy0+Y29ucyAtIHJpbmctPmxhc3RfbnJfdHhiYik7CisKKwkvKiBJZiB0aGVyZSBhcmUgc3RpbGwgcGFja2V0cyBpbiBmbGlnaHQgYW5kIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkKKwkgKiBiZWVuIHNjaGVkdWxlZCBieSB0aGUgVHggcm91dGluZSB0aGVuIHNjaGVkdWxlIGl0IGhlcmUgdG8gZ3VhcmFudGVlCisJICogY29tcGxldGlvbiBwcm9jZXNzaW5nIG9mIHRoZXNlIHBhY2tldHMgKi8KKwlpZiAoaW5mbGlnaHQgJiYgcHJpdi0+cG9ydF91cCkKKwkJbW9kX3RpbWVyKCZjcS0+dGltZXIsIGppZmZpZXMgKyBNTFg0X0VOX1RYX1BPTExfVElNRU9VVCk7CisKKwlzcGluX3VubG9ja19pcnEoJnJpbmctPmNvbXBfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrKHByaXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWx4NF9lbl90eF9kZXNjICptbHg0X2VuX2JvdW5jZV90b19kZXNjKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkJCQkgICAgICBzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nLAorCQkJCQkJICAgICAgdTMyIGluZGV4LAorCQkJCQkJICAgICAgdW5zaWduZWQgaW50IGRlc2Nfc2l6ZSkKK3sKKwl1MzIgY29weSA9IChyaW5nLT5zaXplIC0gaW5kZXgpICogVFhCQl9TSVpFOworCWludCBpOworCisJZm9yIChpID0gZGVzY19zaXplIC0gY29weSAtIDQ7IGkgPj0gMDsgaSAtPSA0KSB7CisJCWlmICgoaSAmIChUWEJCX1NJWkUgLSAxKSkgPT0gMCkKKwkJCXdtYigpOworCisJCSooKHUzMiAqKSAocmluZy0+YnVmICsgaSkpID0KKwkJCSooKHUzMiAqKSAocmluZy0+Ym91bmNlX2J1ZiArIGNvcHkgKyBpKSk7CisJfQorCisJZm9yIChpID0gY29weSAtIDQ7IGkgPj0gNCA7IGkgLT0gNCkgeworCQlpZiAoKGkgJiAoVFhCQl9TSVpFIC0gMSkpID09IDApCisJCQl3bWIoKTsKKworCQkqKCh1MzIgKikgKHJpbmctPmJ1ZiArIGluZGV4ICogVFhCQl9TSVpFICsgaSkpID0KKwkJCSooKHUzMiAqKSAocmluZy0+Ym91bmNlX2J1ZiArIGkpKTsKKwl9CisKKwkvKiBSZXR1cm4gcmVhbCBkZXNjcmlwdG9yIGxvY2F0aW9uICovCisJcmV0dXJuIHJpbmctPmJ1ZiArIGluZGV4ICogVFhCQl9TSVpFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NF9lbl94bWl0X3BvbGwoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgaW50IHR4X2luZCkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9jcSAqY3EgPSAmcHJpdi0+dHhfY3FbdHhfaW5kXTsKKwlzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nID0gJnByaXYtPnR4X3JpbmdbdHhfaW5kXTsKKworCS8qIElmIHdlIGRvbid0IGhhdmUgYSBwZW5kaW5nIHRpbWVyLCBzZXQgb25lIHVwIHRvIGNhdGNoIG91ciByZWNlbnQKKwkgICBwb3N0IGluIGNhc2UgdGhlIGludGVyZmFjZSBiZWNvbWVzIGlkbGUgKi8KKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmNxLT50aW1lcikpCisJCW1vZF90aW1lcigmY3EtPnRpbWVyLCBqaWZmaWVzICsgTUxYNF9FTl9UWF9QT0xMX1RJTUVPVVQpOworCisJLyogUG9sbCB0aGUgQ1EgZXZlcnkgbWx4NF9lbl9UWF9NT0RFUl9QT0xMIHBhY2tldHMgKi8KKwlpZiAoKCsrcmluZy0+cG9sbF9jbnQgJiAoTUxYNF9FTl9UWF9QT0xMX01PREVSIC0gMSkpID09IDApCisJCW1seDRfZW5fcHJvY2Vzc190eF9jcShwcml2LT5kZXYsIGNxKTsKK30KKworc3RhdGljIHZvaWQgKmdldF9mcmFnX3B0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWcgPSAgJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF07CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBmcmFnLT5wYWdlOworCXZvaWQgKnB0cjsKKworCXB0ciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlpZiAodW5saWtlbHkoIXB0cikpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHB0ciArIGZyYWctPnBhZ2Vfb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGlzX2lubGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqcGZyYWcpCit7CisJdm9pZCAqcHRyOworCisJaWYgKGlubGluZV90aG9sZCAmJiAhc2tiX2lzX2dzbyhza2IpICYmIHNrYi0+bGVuIDw9IGlubGluZV90aG9sZCkgeworCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAxKSB7CisJCQlwdHIgPSBnZXRfZnJhZ19wdHIoc2tiKTsKKwkJCWlmICh1bmxpa2VseSghcHRyKSkKKwkJCQlyZXR1cm4gMDsKKworCQkJaWYgKHBmcmFnKQorCQkJCSpwZnJhZyA9IHB0cjsKKworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoc2tiLT5sZW4gKyBDVFJMX1NJWkUgKyBzaXplb2Yoc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcpCisJICAgIDw9IE1MWDRfSU5MSU5FX0FMSUdOKQorCQlyZXR1cm4gQUxJR04oc2tiLT5sZW4gKyBDVFJMX1NJWkUgKworCQkJICAgICBzaXplb2Yoc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcpLCAxNik7CisJZWxzZQorCQlyZXR1cm4gQUxJR04oc2tiLT5sZW4gKyBDVFJMX1NJWkUgKyAyICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtbHg0X3dxZV9pbmxpbmVfc2VnKSwgMTYpOworfQorCitzdGF0aWMgaW50IGdldF9yZWFsX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBpbnQgKmxzb19oZWFkZXJfc2l6ZSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCWludCByZWFsX3NpemU7CisKKwlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CisJCSpsc29faGVhZGVyX3NpemUgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOworCQlyZWFsX3NpemUgPSBDVFJMX1NJWkUgKyBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICogRFNfU0laRSArCisJCQlBTElHTigqbHNvX2hlYWRlcl9zaXplICsgNCwgRFNfU0laRSk7CisJCWlmICh1bmxpa2VseSgqbHNvX2hlYWRlcl9zaXplICE9IHNrYl9oZWFkbGVuKHNrYikpKSB7CisJCQkvKiBXZSBhZGQgYSBzZWdtZW50IGZvciB0aGUgc2tiIGxpbmVhciBidWZmZXIgb25seSBpZgorCQkJICogaXQgY29udGFpbnMgZGF0YSAqLworCQkJaWYgKCpsc29faGVhZGVyX3NpemUgPCBza2JfaGVhZGxlbihza2IpKQorCQkJCXJlYWxfc2l6ZSArPSBEU19TSVpFOworCQkJZWxzZSB7CisJCQkJaWYgKG5ldGlmX21zZ190eF9lcnIocHJpdikpCisJCQkJCW1seDRfd2FybihtZGV2LCAiTm9uLWxpbmVhciBoZWFkZXJzXG4iKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCWlmICh1bmxpa2VseSgqbHNvX2hlYWRlcl9zaXplID4gTUFYX0xTT19IRFJfU0laRSkpIHsKKwkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHByaXYpKQorCQkJCW1seDRfd2FybihtZGV2LCAiTFNPIGhlYWRlciBzaXplIHRvbyBiaWdcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJKmxzb19oZWFkZXJfc2l6ZSA9IDA7CisJCWlmICghaXNfaW5saW5lKHNrYiwgTlVMTCkpCisJCQlyZWFsX3NpemUgPSBDVFJMX1NJWkUgKyAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpICogRFNfU0laRTsKKwkJZWxzZQorCQkJcmVhbF9zaXplID0gaW5saW5lX3NpemUoc2tiKTsKKwl9CisKKwlyZXR1cm4gcmVhbF9zaXplOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9pbmxpbmVfd3FlKHN0cnVjdCBtbHg0X2VuX3R4X2Rlc2MgKnR4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIGludCByZWFsX3NpemUsIHUxNiAqdmxhbl90YWcsIGludCB0eF9pbmQsIHZvaWQgKmZyYWdwdHIpCit7CisJc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcgKmlubCA9ICZ0eF9kZXNjLT5pbmw7CisJaW50IHNwYyA9IE1MWDRfSU5MSU5FX0FMSUdOIC0gQ1RSTF9TSVpFIC0gc2l6ZW9mICppbmw7CisKKwlpZiAoc2tiLT5sZW4gPD0gc3BjKSB7CisJCWlubC0+Ynl0ZV9jb3VudCA9IGNwdV90b19iZTMyKDEgPDwgMzEgfCBza2ItPmxlbik7CisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBpbmwgKyAxLCBza2JfaGVhZGxlbihza2IpKTsKKwkJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpCisJCQltZW1jcHkoKCh2b2lkICopKGlubCArIDEpKSArIHNrYl9oZWFkbGVuKHNrYiksIGZyYWdwdHIsCisJCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplKTsKKworCX0gZWxzZSB7CisJCWlubC0+Ynl0ZV9jb3VudCA9IGNwdV90b19iZTMyKDEgPDwgMzEgfCBzcGMpOworCQlpZiAoc2tiX2hlYWRsZW4oc2tiKSA8PSBzcGMpIHsKKwkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBpbmwgKyAxLCBza2JfaGVhZGxlbihza2IpKTsKKwkJCWlmIChza2JfaGVhZGxlbihza2IpIDwgc3BjKSB7CisJCQkJbWVtY3B5KCgodm9pZCAqKShpbmwgKyAxKSkgKyBza2JfaGVhZGxlbihza2IpLAorCQkJCQlmcmFncHRyLCBzcGMgLSBza2JfaGVhZGxlbihza2IpKTsKKwkJCQlmcmFncHRyICs9ICBzcGMgLSBza2JfaGVhZGxlbihza2IpOworCQkJfQorCQkJaW5sID0gKHZvaWQgKikgKGlubCArIDEpICsgc3BjOworCQkJbWVtY3B5KCgodm9pZCAqKShpbmwgKyAxKSksIGZyYWdwdHIsIHNrYi0+bGVuIC0gc3BjKTsKKwkJfSBlbHNlIHsKKwkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBpbmwgKyAxLCBzcGMpOworCQkJaW5sID0gKHZvaWQgKikgKGlubCArIDEpICsgc3BjOworCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBzcGMsIGlubCArIDEsCisJCQkJCXNrYl9oZWFkbGVuKHNrYikgLSBzcGMpOworCQkJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpCisJCQkJbWVtY3B5KCgodm9pZCAqKShpbmwgKyAxKSkgKyBza2JfaGVhZGxlbihza2IpIC0gc3BjLAorCQkJCQlmcmFncHRyLCBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnNpemUpOworCQl9CisKKwkJd21iKCk7CisJCWlubC0+Ynl0ZV9jb3VudCA9IGNwdV90b19iZTMyKDEgPDwgMzEgfCAoc2tiLT5sZW4gLSBzcGMpKTsKKwl9CisJdHhfZGVzYy0+Y3RybC52bGFuX3RhZyA9IGNwdV90b19iZTE2KCp2bGFuX3RhZyk7CisJdHhfZGVzYy0+Y3RybC5pbnNfdmxhbiA9IE1MWDRfV1FFX0NUUkxfSU5TX1ZMQU4gKiAhISgqdmxhbl90YWcpOworCXR4X2Rlc2MtPmN0cmwuZmVuY2Vfc2l6ZSA9IChyZWFsX3NpemUgLyAxNikgJiAweDNmOworfQorCitzdGF0aWMgaW50IGdldF92bGFuX2luZm8oc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSB1MTYgKnZsYW5fdGFnKQoreworCWludCB0eF9pbmQ7CisKKwkvKiBPYnRhaW4gVkxBTiBpbmZvcm1hdGlvbiBpZiBwcmVzZW50ICovCisJaWYgKHByaXYtPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQkqdmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJLyogU2V0IHRoZSBUeCByaW5nIHRvIHVzZSBhY2NvcmRpbmcgdG8gdmxhbiBwcmlvcml0eSAqLworCQl0eF9pbmQgPSBwcml2LT50eF9wcmlvX21hcFsqdmxhbl90YWcgPj4gMTNdOworCX0gZWxzZSB7CisJCSp2bGFuX3RhZyA9IDA7CisJCXR4X2luZCA9IDA7CisJfQorCXJldHVybiB0eF9pbmQ7Cit9CisKK2ludCBtbHg0X2VuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmc7CisJc3RydWN0IG1seDRfZW5fY3EgKmNxOworCXN0cnVjdCBtbHg0X2VuX3R4X2Rlc2MgKnR4X2Rlc2M7CisJc3RydWN0IG1seDRfd3FlX2RhdGFfc2VnICpkYXRhOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7CisJc3RydWN0IG1seDRfZW5fdHhfaW5mbyAqdHhfaW5mbzsKKwlpbnQgdHhfaW5kID0gMDsKKwlpbnQgbnJfdHhiYjsKKwlpbnQgZGVzY19zaXplOworCWludCByZWFsX3NpemU7CisJZG1hX2FkZHJfdCBkbWE7CisJdTMyIGluZGV4OworCV9fYmUzMiBvcF9vd247CisJdTE2IHZsYW5fdGFnOworCWludCBpOworCWludCBsc29faGVhZGVyX3NpemU7CisJdm9pZCAqZnJhZ3B0cjsKKworCWlmICh1bmxpa2VseSghc2tiLT5sZW4pKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCXJlYWxfc2l6ZSA9IGdldF9yZWFsX3NpemUoc2tiLCBkZXYsICZsc29faGVhZGVyX3NpemUpOworCWlmICh1bmxpa2VseSghcmVhbF9zaXplKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworCS8qIEFsbGlnbiBkZXNjcmlwdG9yIHRvIFRYQkIgc2l6ZSAqLworCWRlc2Nfc2l6ZSA9IEFMSUdOKHJlYWxfc2l6ZSwgVFhCQl9TSVpFKTsKKwlucl90eGJiID0gZGVzY19zaXplIC8gVFhCQl9TSVpFOworCWlmICh1bmxpa2VseShucl90eGJiID4gTUFYX0RFU0NfVFhCQlMpKSB7CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHByaXYpKQorCQkJbWx4NF93YXJuKG1kZXYsICJPdmVyc2l6ZWQgaGVhZGVyIG9yIFNHIGxpc3RcbiIpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCXR4X2luZCA9IGdldF92bGFuX2luZm8ocHJpdiwgc2tiLCAmdmxhbl90YWcpOworCXJpbmcgPSAmcHJpdi0+dHhfcmluZ1t0eF9pbmRdOworCisJLyogQ2hlY2sgYXZhaWxhYmxlIFRYQkJzIEFuZCAySyBzcGFyZSBmb3IgcHJlZmV0Y2ggKi8KKwlpZiAodW5saWtlbHkoKChpbnQpKHJpbmctPnByb2QgLSByaW5nLT5jb25zKSkgPgorCQkgICAgIHJpbmctPnNpemUgLSBIRUFEUk9PTSAtIE1BWF9ERVNDX1RYQkJTKSkgeworCQkvKiBldmVyeSBmdWxsIFR4IHJpbmcgc3RvcHMgcXVldWUuCisJCSAqIFRPRE86IGltcGxlbWVudCBtdWx0aS1xdWV1ZSBzdXBwb3J0IChwZXItcXVldWUgc3RvcCkgKi8KKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyaW5nLT5ibG9ja2VkID0gMTsKKwkJcHJpdi0+cG9ydF9zdGF0cy5xdWV1ZV9zdG9wcGVkKys7CisKKwkJLyogVXNlIGludGVycnVwdHMgdG8gZmluZCBvdXQgd2hlbiBxdWV1ZSBvcGVuZWQgKi8KKwkJY3EgPSAmcHJpdi0+dHhfY3FbdHhfaW5kXTsKKwkJbWx4NF9lbl9hcm1fY3EocHJpdiwgY3EpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJLyogTm93IHRoYXQgd2Uga25vdyB3aGF0IFR4IHJpbmcgdG8gdXNlICovCisJaWYgKHVubGlrZWx5KCFwcml2LT5wb3J0X3VwKSkgeworCQlpZiAobmV0aWZfbXNnX3R4X2Vycihwcml2KSkKKwkJCW1seDRfd2FybihtZGV2LCAieG1pdDogcG9ydCBkb3duIVxuIik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJLyogVHJhY2sgY3VycmVudCBpbmZsaWdodCBwYWNrZXRzIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcyAqLworCUFWR19QRVJGX0NPVU5URVIocHJpdi0+cHN0YXRzLmluZmxpZ2h0X2F2ZywKKwkJCSAodTMyKSAocmluZy0+cHJvZCAtIHJpbmctPmNvbnMgLSAxKSk7CisKKwkvKiBQYWNrZXQgaXMgZ29vZCAtIGdyYWIgYW4gaW5kZXggYW5kIHRyYW5zbWl0IGl0ICovCisJaW5kZXggPSByaW5nLT5wcm9kICYgcmluZy0+c2l6ZV9tYXNrOworCisJLyogU2VlIGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGZvciB3aG9sZSBkZXNjcmlwdG9yIFRYQkIgZm9yIHNldHRpbmcKKwkgKiBTVyBvd25lcnNoaXAgb24gbmV4dCBkZXNjcmlwdG9yOyBpZiBub3QsIHVzZSBhIGJvdW5jZSBidWZmZXIuICovCisJaWYgKGxpa2VseShpbmRleCArIG5yX3R4YmIgPD0gcmluZy0+c2l6ZSkpCisJCXR4X2Rlc2MgPSByaW5nLT5idWYgKyBpbmRleCAqIFRYQkJfU0laRTsKKwllbHNlCisJCXR4X2Rlc2MgPSAoc3RydWN0IG1seDRfZW5fdHhfZGVzYyAqKSByaW5nLT5ib3VuY2VfYnVmOworCisJLyogU2F2ZSBza2IgaW4gdHhfaW5mbyByaW5nICovCisJdHhfaW5mbyA9ICZyaW5nLT50eF9pbmZvW2luZGV4XTsKKwl0eF9pbmZvLT5za2IgPSBza2I7CisJdHhfaW5mby0+bnJfdHhiYiA9IG5yX3R4YmI7CisKKwkvKiBQcmVwYXJlIGN0cmwgc2VnZW1lbnQgYXBhcnQgb3Bjb2RlK293bmVyc2hpcCwgd2hpY2ggZGVwZW5kcyBvbgorCSAqIHdoZXRoZXIgTFNPIGlzIHVzZWQgKi8KKwl0eF9kZXNjLT5jdHJsLnZsYW5fdGFnID0gY3B1X3RvX2JlMTYodmxhbl90YWcpOworCXR4X2Rlc2MtPmN0cmwuaW5zX3ZsYW4gPSBNTFg0X1dRRV9DVFJMX0lOU19WTEFOICogISF2bGFuX3RhZzsKKwl0eF9kZXNjLT5jdHJsLmZlbmNlX3NpemUgPSAocmVhbF9zaXplIC8gMTYpICYgMHgzZjsKKwl0eF9kZXNjLT5jdHJsLnNyY3JiX2ZsYWdzID0gY3B1X3RvX2JlMzIoTUxYNF9XUUVfQ1RSTF9DUV9VUERBVEUgfAorCQkJCQkJTUxYNF9XUUVfQ1RSTF9TT0xJQ0lURUQpOworCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKKwkJdHhfZGVzYy0+Y3RybC5zcmNyYl9mbGFncyB8PSBjcHVfdG9fYmUzMihNTFg0X1dRRV9DVFJMX0lQX0NTVU0gfAorCQkJCQkJCSBNTFg0X1dRRV9DVFJMX1RDUF9VRFBfQ1NVTSk7CisJCXByaXYtPnBvcnRfc3RhdHMudHhfY2hrc3VtX29mZmxvYWQrKzsKKwl9CisKKwkvKiBIYW5kbGUgTFNPIChUU08pIHBhY2tldHMgKi8KKwlpZiAobHNvX2hlYWRlcl9zaXplKSB7CisJCS8qIE1hcmsgb3Bjb2RlIGFzIExTTyAqLworCQlvcF9vd24gPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08gfCAoMSA8PCA2KSkgfAorCQkJKChyaW5nLT5wcm9kICYgcmluZy0+c2l6ZSkgPworCQkJCWNwdV90b19iZTMyKE1MWDRfRU5fQklUX0RFU0NfT1dOKSA6IDApOworCisJCS8qIEZpbGwgaW4gdGhlIExTTyBwcmVmaXggKi8KKwkJdHhfZGVzYy0+bHNvLm1zc19oZHJfc2l6ZSA9IGNwdV90b19iZTMyKAorCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA8PCAxNiB8IGxzb19oZWFkZXJfc2l6ZSk7CisKKwkJLyogQ29weSBoZWFkZXJzOworCQkgKiBub3RlIHRoYXQgd2UgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IGl0IGlzIGxpbmVhciAqLworCQltZW1jcHkodHhfZGVzYy0+bHNvLmhlYWRlciwgc2tiLT5kYXRhLCBsc29faGVhZGVyX3NpemUpOworCQlkYXRhID0gKCh2b2lkICopICZ0eF9kZXNjLT5sc28gKworCQkJQUxJR04obHNvX2hlYWRlcl9zaXplICsgNCwgRFNfU0laRSkpOworCisJCXByaXYtPnBvcnRfc3RhdHMudHNvX3BhY2tldHMrKzsKKwkJaSA9ICgoc2tiLT5sZW4gLSBsc29faGVhZGVyX3NpemUpIC8gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgKworCQkJISEoKHNrYi0+bGVuIC0gbHNvX2hlYWRlcl9zaXplKSAlIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOworCQlyaW5nLT5ieXRlcyArPSBza2ItPmxlbiArIChpIC0gMSkgKiBsc29faGVhZGVyX3NpemU7CisJCXJpbmctPnBhY2tldHMgKz0gaTsKKwl9IGVsc2UgeworCQkvKiBOb3JtYWwgKE5vbiBMU08pIHBhY2tldCAqLworCQlvcF9vd24gPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSB8CisJCQkoKHJpbmctPnByb2QgJiByaW5nLT5zaXplKSA/CisJCQkgY3B1X3RvX2JlMzIoTUxYNF9FTl9CSVRfREVTQ19PV04pIDogMCk7CisJCWRhdGEgPSAmdHhfZGVzYy0+ZGF0YTsKKwkJcmluZy0+Ynl0ZXMgKz0gbWF4KHNrYi0+bGVuLCAodW5zaWduZWQgaW50KSBFVEhfWkxFTik7CisJCXJpbmctPnBhY2tldHMrKzsKKworCX0KKwlBVkdfUEVSRl9DT1VOVEVSKHByaXYtPnBzdGF0cy50eF9wa3Rzel9hdmcsIHNrYi0+bGVuKTsKKworCisJLyogdmFsaWQgb25seSBmb3Igbm9uZSBpbmxpbmUgc2VnbWVudHMgKi8KKwl0eF9pbmZvLT5kYXRhX29mZnNldCA9ICh2b2lkICopIGRhdGEgLSAodm9pZCAqKSB0eF9kZXNjOworCisJdHhfaW5mby0+bGluZWFyID0gKGxzb19oZWFkZXJfc2l6ZSA8IHNrYl9oZWFkbGVuKHNrYikgJiYgIWlzX2lubGluZShza2IsIE5VTEwpKSA/IDEgOiAwOworCWRhdGEgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIHR4X2luZm8tPmxpbmVhciAtIDE7CisKKwlpZiAoIWlzX2lubGluZShza2IsICZmcmFncHRyKSkgeworCQkvKiBNYXAgZnJhZ21lbnRzICovCisJCWZvciAoaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgLSAxOyBpID49IDA7IGktLSkgeworCQkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQkJZG1hID0gcGNpX21hcF9wYWdlKG1kZXYtPmRldi0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJCSAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZGF0YS0+YWRkciA9IGNwdV90b19iZTY0KGRtYSk7CisJCQlkYXRhLT5sa2V5ID0gY3B1X3RvX2JlMzIobWRldi0+bXIua2V5KTsKKwkJCXdtYigpOworCQkJZGF0YS0+Ynl0ZV9jb3VudCA9IGNwdV90b19iZTMyKGZyYWctPnNpemUpOworCQkJLS1kYXRhOworCQl9CisKKwkJLyogTWFwIGxpbmVhciBwYXJ0ICovCisJCWlmICh0eF9pbmZvLT5saW5lYXIpIHsKKwkJCWRtYSA9IHBjaV9tYXBfc2luZ2xlKG1kZXYtPmRldi0+cGRldiwgc2tiLT5kYXRhICsgbHNvX2hlYWRlcl9zaXplLAorCQkJCQkgICAgIHNrYl9oZWFkbGVuKHNrYikgLSBsc29faGVhZGVyX3NpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZGF0YS0+YWRkciA9IGNwdV90b19iZTY0KGRtYSk7CisJCQlkYXRhLT5sa2V5ID0gY3B1X3RvX2JlMzIobWRldi0+bXIua2V5KTsKKwkJCXdtYigpOworCQkJZGF0YS0+Ynl0ZV9jb3VudCA9IGNwdV90b19iZTMyKHNrYl9oZWFkbGVuKHNrYikgLSBsc29faGVhZGVyX3NpemUpOworCQl9CisJfSBlbHNlCisJCWJ1aWxkX2lubGluZV93cWUodHhfZGVzYywgc2tiLCByZWFsX3NpemUsICZ2bGFuX3RhZywgdHhfaW5kLCBmcmFncHRyKTsKKworCXJpbmctPnByb2QgKz0gbnJfdHhiYjsKKworCS8qIElmIHdlIHVzZWQgYSBib3VuY2UgYnVmZmVyIHRoZW4gY29weSBkZXNjcmlwdG9yIGJhY2sgaW50byBwbGFjZSAqLworCWlmICh0eF9kZXNjID09IChzdHJ1Y3QgbWx4NF9lbl90eF9kZXNjICopIHJpbmctPmJvdW5jZV9idWYpCisJCXR4X2Rlc2MgPSBtbHg0X2VuX2JvdW5jZV90b19kZXNjKHByaXYsIHJpbmcsIGluZGV4LCBkZXNjX3NpemUpOworCisJLyogUnVuIGRlc3RydWN0b3IgYmVmb3JlIHBhc3Npbmcgc2tiIHRvIEhXICovCisJaWYgKGxpa2VseSghc2tiX3NoYXJlZChza2IpKSkKKwkJc2tiX29ycGhhbihza2IpOworCisJLyogRW5zdXJlIG5ldyBkZXNjaXJwdG9yIGhpdHMgbWVtb3J5CisJICogYmVmb3JlIHNldHRpbmcgb3duZXJzaGlwIG9mIHRoaXMgZGVzY3JpcHRvciB0byBIVyAqLworCXdtYigpOworCXR4X2Rlc2MtPmN0cmwub3duZXJfb3Bjb2RlID0gb3Bfb3duOworCisJLyogUmluZyBkb29yYmVsbCEgKi8KKwl3bWIoKTsKKwl3cml0ZWwocmluZy0+ZG9vcmJlbGxfcXBuLCBtZGV2LT51YXJfbWFwICsgTUxYNF9TRU5EX0RPT1JCRUxMKTsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCS8qIFBvbGwgQ1EgaGVyZSAqLworCW1seDRfZW5feG1pdF9wb2xsKHByaXYsIHR4X2luZCk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lcS5jIGIvZHJpdmVycy9uZXQvbWx4NC9lcS5jCmluZGV4IDhhOGI1NjEuLmRlMTY5MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZXEuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKQEAgLTU1OCw3ICs1NTgsNyBAQAogCWludCBpOwogCiAJZXJyID0gbWx4NF9iaXRtYXBfaW5pdCgmcHJpdi0+ZXFfdGFibGUuYml0bWFwLCBkZXYtPmNhcHMubnVtX2VxcywKLQkJCSAgICAgICBkZXYtPmNhcHMubnVtX2VxcyAtIDEsIGRldi0+Y2Fwcy5yZXNlcnZlZF9lcXMpOworCQkJICAgICAgIGRldi0+Y2Fwcy5udW1fZXFzIC0gMSwgZGV2LT5jYXBzLnJlc2VydmVkX2VxcywgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9mdy5jIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCmluZGV4IDdlMzI5NTUuLmJlMDlmZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZncuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKQEAgLTg4LDYgKzg4LDcgQEAKIAkJWyA4XSA9ICJQX0tleSB2aW9sYXRpb24gY291bnRlciIsCiAJCVsgOV0gPSAiUV9LZXkgdmlvbGF0aW9uIGNvdW50ZXIiLAogCQlbMTBdID0gIlZNTSIsCisJCVsxMl0gPSAiRFBEUCIsCiAJCVsxNl0gPSAiTVcgc3VwcG9ydCIsCiAJCVsxN10gPSAiQVBNIHN1cHBvcnQiLAogCQlbMThdID0gIkF0b21pYyBvcHMgc3VwcG9ydCIsCkBAIC0zNDYsNyArMzQ3LDcgQEAKIAkJCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfVkxfUE9SVF9PRkZTRVQpOwogCQkJZGV2X2NhcC0+bWF4X3ZsW2ldCSAgID0gZmllbGQgPj4gNDsKIAkJCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTVRVX1dJRFRIX09GRlNFVCk7Ci0JCQlkZXZfY2FwLT5tYXhfbXR1W2ldCSAgID0gZmllbGQgPj4gNDsKKwkJCWRldl9jYXAtPmliX210dVtpXQkgICA9IGZpZWxkID4+IDQ7CiAJCQlkZXZfY2FwLT5tYXhfcG9ydF93aWR0aFtpXSA9IGZpZWxkICYgMHhmOwogCQkJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfR0lEX09GRlNFVCk7CiAJCQlkZXZfY2FwLT5tYXhfZ2lkc1tpXQkgICA9IDEgPDwgKGZpZWxkICYgMHhmKTsKQEAgLTM1NCw5ICszNTUsMTMgQEAKIAkJCWRldl9jYXAtPm1heF9wa2V5c1tpXQkgICA9IDEgPDwgKGZpZWxkICYgMHhmKTsKIAkJfQogCX0gZWxzZSB7CisjZGVmaW5lIFFVRVJZX1BPUlRfU1VQUE9SVEVEX1RZUEVfT0ZGU0VUCTB4MDAKICNkZWZpbmUgUVVFUllfUE9SVF9NVFVfT0ZGU0VUCQkJMHgwMQorI2RlZmluZSBRVUVSWV9QT1JUX0VUSF9NVFVfT0ZGU0VUCQkweDAyCiAjZGVmaW5lIFFVRVJZX1BPUlRfV0lEVEhfT0ZGU0VUCQkJMHgwNgogI2RlZmluZSBRVUVSWV9QT1JUX01BWF9HSURfUEtFWV9PRkZTRVQJCTB4MDcKKyNkZWZpbmUgUVVFUllfUE9SVF9NQUNfT0ZGU0VUCQkJMHgwOAorI2RlZmluZSBRVUVSWV9QT1JUX01BWF9NQUNWTEFOX09GRlNFVAkJMHgwYQogI2RlZmluZSBRVUVSWV9QT1JUX01BWF9WTF9PRkZTRVQJCTB4MGIKIAogCQlmb3IgKGkgPSAxOyBpIDw9IGRldl9jYXAtPm51bV9wb3J0czsgKytpKSB7CkBAIC0zNjUsOCArMzcwLDEwIEBACiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwogCisJCQlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9QT1JUX1NVUFBPUlRFRF9UWVBFX09GRlNFVCk7CisJCQlkZXZfY2FwLT5zdXBwb3J0ZWRfcG9ydF90eXBlc1tpXSA9IGZpZWxkICYgMzsKIAkJCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX1BPUlRfTVRVX09GRlNFVCk7Ci0JCQlkZXZfY2FwLT5tYXhfbXR1W2ldCSAgID0gZmllbGQgJiAweGY7CisJCQlkZXZfY2FwLT5pYl9tdHVbaV0JICAgPSBmaWVsZCAmIDB4ZjsKIAkJCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX1BPUlRfV0lEVEhfT0ZGU0VUKTsKIAkJCWRldl9jYXAtPm1heF9wb3J0X3dpZHRoW2ldID0gZmllbGQgJiAweGY7CiAJCQlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9QT1JUX01BWF9HSURfUEtFWV9PRkZTRVQpOwpAQCAtMzc0LDYgKzM4MSwxMSBAQAogCQkJZGV2X2NhcC0+bWF4X3BrZXlzW2ldCSAgID0gMSA8PCAoZmllbGQgJiAweGYpOwogCQkJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfUE9SVF9NQVhfVkxfT0ZGU0VUKTsKIAkJCWRldl9jYXAtPm1heF92bFtpXQkgICA9IGZpZWxkICYgMHhmOworCQkJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfUE9SVF9NQVhfTUFDVkxBTl9PRkZTRVQpOworCQkJZGV2X2NhcC0+bG9nX21heF9tYWNzW2ldICA9IGZpZWxkICYgMHhmOworCQkJZGV2X2NhcC0+bG9nX21heF92bGFuc1tpXSA9IGZpZWxkID4+IDQ7CisJCQlNTFg0X0dFVChkZXZfY2FwLT5ldGhfbXR1W2ldLCBvdXRib3gsIFFVRVJZX1BPUlRfRVRIX01UVV9PRkZTRVQpOworCQkJTUxYNF9HRVQoZGV2X2NhcC0+ZGVmX21hY1tpXSwgb3V0Ym94LCBRVUVSWV9QT1JUX01BQ19PRkZTRVQpOwogCQl9CiAJfQogCkBAIC00MDcsNyArNDE5LDcgQEAKIAltbHg0X2RiZyhkZXYsICJNYXggQ1FFczogJWQsIG1heCBXUUVzOiAlZCwgbWF4IFNSUSBXUUVzOiAlZFxuIiwKIAkJIGRldl9jYXAtPm1heF9jcV9zeiwgZGV2X2NhcC0+bWF4X3FwX3N6LCBkZXZfY2FwLT5tYXhfc3JxX3N6KTsKIAltbHg0X2RiZyhkZXYsICJMb2NhbCBDQSBBQ0sgZGVsYXk6ICVkLCBtYXggTVRVOiAlZCwgcG9ydCB3aWR0aCBjYXA6ICVkXG4iLAotCQkgZGV2X2NhcC0+bG9jYWxfY2FfYWNrX2RlbGF5LCAxMjggPDwgZGV2X2NhcC0+bWF4X210dVsxXSwKKwkJIGRldl9jYXAtPmxvY2FsX2NhX2Fja19kZWxheSwgMTI4IDw8IGRldl9jYXAtPmliX210dVsxXSwKIAkJIGRldl9jYXAtPm1heF9wb3J0X3dpZHRoWzFdKTsKIAltbHg0X2RiZyhkZXYsICJNYXggU1EgZGVzYyBzaXplOiAlZCwgbWF4IFNRIFMvRzogJWRcbiIsCiAJCSBkZXZfY2FwLT5tYXhfc3FfZGVzY19zeiwgZGV2X2NhcC0+bWF4X3NxX3NnKTsKQEAgLTgxOSw3ICs4MzEsNyBAQAogCQlmbGFncyB8PSAoZGV2LT5jYXBzLnBvcnRfd2lkdGhfY2FwW3BvcnRdICYgMHhmKSA8PCBJTklUX1BPUlRfUE9SVF9XSURUSF9TSElGVDsKIAkJTUxYNF9QVVQoaW5ib3gsIGZsYWdzLAkJICBJTklUX1BPUlRfRkxBR1NfT0ZGU0VUKTsKIAotCQlmaWVsZCA9IDEyOCA8PCBkZXYtPmNhcHMubXR1X2NhcFtwb3J0XTsKKwkJZmllbGQgPSAxMjggPDwgZGV2LT5jYXBzLmliX210dV9jYXBbcG9ydF07CiAJCU1MWDRfUFVUKGluYm94LCBmaWVsZCwgSU5JVF9QT1JUX01UVV9PRkZTRVQpOwogCQlmaWVsZCA9IGRldi0+Y2Fwcy5naWRfdGFibGVfbGVuW3BvcnRdOwogCQlNTFg0X1BVVChpbmJveCwgZmllbGQsIElOSVRfUE9SVF9NQVhfR0lEX09GRlNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2Z3LmggYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmgKaW5kZXggZGVjYmI1Yy4uNTI2ZDdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9mdy5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZncuaApAQCAtNjYsMTEgKzY2LDEzIEBACiAJaW50IGxvY2FsX2NhX2Fja19kZWxheTsKIAlpbnQgbnVtX3BvcnRzOwogCXUzMiBtYXhfbXNnX3N6OwotCWludCBtYXhfbXR1W01MWDRfTUFYX1BPUlRTICsgMV07CisJaW50IGliX210dVtNTFg0X01BWF9QT1JUUyArIDFdOwogCWludCBtYXhfcG9ydF93aWR0aFtNTFg0X01BWF9QT1JUUyArIDFdOwogCWludCBtYXhfdmxbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAlpbnQgbWF4X2dpZHNbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAlpbnQgbWF4X3BrZXlzW01MWDRfTUFYX1BPUlRTICsgMV07CisJdTY0IGRlZl9tYWNbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwl1MTYgZXRoX210dVtNTFg0X01BWF9QT1JUUyArIDFdOwogCXUxNiBzdGF0X3JhdGVfc3VwcG9ydDsKIAl1MzIgZmxhZ3M7CiAJaW50IHJlc2VydmVkX3VhcnM7CkBAIC0xMDIsNiArMTA0LDkgQEAKIAl1MzIgcmVzZXJ2ZWRfbGtleTsKIAl1NjQgbWF4X2ljbV9zejsKIAlpbnQgbWF4X2dzb19zejsKKwl1OCAgc3VwcG9ydGVkX3BvcnRfdHlwZXNbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwl1OCAgbG9nX21heF9tYWNzW01MWDRfTUFYX1BPUlRTICsgMV07CisJdTggIGxvZ19tYXhfdmxhbnNbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIH07CiAKIHN0cnVjdCBtbHg0X2FkYXB0ZXIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCAxMjUyYTkxOS4uNDY4OTIxYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC04NSw2ICs4NSw1NyBAQAogCS5udW1fbXR0CT0gMSA8PCAyMCwKIH07CiAKK3N0YXRpYyBpbnQgbG9nX251bV9tYWMgPSAyOworbW9kdWxlX3BhcmFtX25hbWVkKGxvZ19udW1fbWFjLCBsb2dfbnVtX21hYywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobG9nX251bV9tYWMsICJMb2cyIG1heCBudW1iZXIgb2YgTUFDcyBwZXIgRVRIIHBvcnQgKDEtNykiKTsKKworc3RhdGljIGludCBsb2dfbnVtX3ZsYW47Cittb2R1bGVfcGFyYW1fbmFtZWQobG9nX251bV92bGFuLCBsb2dfbnVtX3ZsYW4sIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGxvZ19udW1fdmxhbiwgIkxvZzIgbWF4IG51bWJlciBvZiBWTEFOcyBwZXIgRVRIIHBvcnQgKDAtNykiKTsKKworc3RhdGljIGludCB1c2VfcHJpbzsKK21vZHVsZV9wYXJhbV9uYW1lZCh1c2VfcHJpbywgdXNlX3ByaW8sIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfcHJpbywgIkVuYWJsZSBzdGVlcmluZyBieSBWTEFOIHByaW9yaXR5IG9uIEVUSCBwb3J0cyAiCisJCSAgIigwLzEsIGRlZmF1bHQgMCkiKTsKKworc3RhdGljIGludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJCSAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHMgLSAxOyBpKyspIHsKKwkJaWYgKHBvcnRfdHlwZVtpXSAhPSBwb3J0X3R5cGVbaSsxXSAmJgorCQkgICAgIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgeworCQkJbWx4NF9lcnIoZGV2LCAiT25seSBzYW1lIHBvcnQgdHlwZXMgc3VwcG9ydGVkICIKKwkJCQkgIm9uIHRoaXMgSENBLCBhYm9ydGluZy5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKChwb3J0X3R5cGVbMF0gPT0gTUxYNF9QT1JUX1RZUEVfRVRIKSAmJgorCSAgICAocG9ydF90eXBlWzFdID09IE1MWDRfUE9SVF9UWVBFX0lCKSkgeworCQltbHg0X2VycihkZXYsICJldGgtaWIgY29uZmlndXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKKwkJaWYgKCEocG9ydF90eXBlW2ldICYgZGV2LT5jYXBzLnN1cHBvcnRlZF90eXBlW2krMV0pKSB7CisJCQltbHg0X2VycihkZXYsICJSZXF1ZXN0ZWQgcG9ydCB0eXBlIGZvciBwb3J0ICVkIGlzIG5vdCAiCisJCQkJICAgICAgInN1cHBvcnRlZCBvbiB0aGlzIEhDQVxuIiwgaSArIDEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfc2V0X3BvcnRfbWFzayhzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlpbnQgaTsKKworCWRldi0+Y2Fwcy5wb3J0X21hc2sgPSAwOworCWZvciAoaSA9IDE7IGkgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgKytpKQorCQlpZiAoZGV2LT5jYXBzLnBvcnRfdHlwZVtpXSA9PSBNTFg0X1BPUlRfVFlQRV9JQikKKwkJCWRldi0+Y2Fwcy5wb3J0X21hc2sgfD0gMSA8PCAoaSAtIDEpOworfQogc3RhdGljIGludCBtbHg0X2Rldl9jYXAoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2Rldl9jYXAgKmRldl9jYXApCiB7CiAJaW50IGVycjsKQEAgLTEyMCwxMCArMTcxLDEzIEBACiAJZGV2LT5jYXBzLm51bV9wb3J0cwkgICAgID0gZGV2X2NhcC0+bnVtX3BvcnRzOwogCWZvciAoaSA9IDE7IGkgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgKytpKSB7CiAJCWRldi0+Y2Fwcy52bF9jYXBbaV0JICAgID0gZGV2X2NhcC0+bWF4X3ZsW2ldOwotCQlkZXYtPmNhcHMubXR1X2NhcFtpXQkgICAgPSBkZXZfY2FwLT5tYXhfbXR1W2ldOworCQlkZXYtPmNhcHMuaWJfbXR1X2NhcFtpXQkgICAgPSBkZXZfY2FwLT5pYl9tdHVbaV07CiAJCWRldi0+Y2Fwcy5naWRfdGFibGVfbGVuW2ldICA9IGRldl9jYXAtPm1heF9naWRzW2ldOwogCQlkZXYtPmNhcHMucGtleV90YWJsZV9sZW5baV0gPSBkZXZfY2FwLT5tYXhfcGtleXNbaV07CiAJCWRldi0+Y2Fwcy5wb3J0X3dpZHRoX2NhcFtpXSA9IGRldl9jYXAtPm1heF9wb3J0X3dpZHRoW2ldOworCQlkZXYtPmNhcHMuZXRoX210dV9jYXBbaV0gICAgPSBkZXZfY2FwLT5ldGhfbXR1W2ldOworCQlkZXYtPmNhcHMuZGVmX21hY1tpXSAgICAgICAgPSBkZXZfY2FwLT5kZWZfbWFjW2ldOworCQlkZXYtPmNhcHMuc3VwcG9ydGVkX3R5cGVbaV0gPSBkZXZfY2FwLT5zdXBwb3J0ZWRfcG9ydF90eXBlc1tpXTsKIAl9CiAKIAlkZXYtPmNhcHMubnVtX3VhcnMJICAgICA9IGRldl9jYXAtPnVhcl9zaXplIC8gUEFHRV9TSVpFOwpAQCAtMTM0LDcgKzE4OCw2IEBACiAJZGV2LT5jYXBzLm1heF9ycV9zZwkgICAgID0gZGV2X2NhcC0+bWF4X3JxX3NnOwogCWRldi0+Y2Fwcy5tYXhfd3FlcwkgICAgID0gZGV2X2NhcC0+bWF4X3FwX3N6OwogCWRldi0+Y2Fwcy5tYXhfcXBfaW5pdF9yZG1hICAgPSBkZXZfY2FwLT5tYXhfcmVxdWVzdGVyX3Blcl9xcDsKLQlkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzCSAgICAgPSBkZXZfY2FwLT5yZXNlcnZlZF9xcHM7CiAJZGV2LT5jYXBzLm1heF9zcnFfd3FlcwkgICAgID0gZGV2X2NhcC0+bWF4X3NycV9zejsKIAlkZXYtPmNhcHMubWF4X3NycV9zZ2UJICAgICA9IGRldl9jYXAtPm1heF9ycV9zZyAtIDE7CiAJZGV2LT5jYXBzLnJlc2VydmVkX3NycXMJICAgICA9IGRldl9jYXAtPnJlc2VydmVkX3NycXM7CkBAIC0xNjMsOSArMjE2LDEzOCBAQAogCWRldi0+Y2Fwcy5zdGF0X3JhdGVfc3VwcG9ydCAgPSBkZXZfY2FwLT5zdGF0X3JhdGVfc3VwcG9ydDsKIAlkZXYtPmNhcHMubWF4X2dzb19zegkgICAgID0gZGV2X2NhcC0+bWF4X2dzb19zejsKIAorCWRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgID0gbG9nX251bV9tYWM7CisJZGV2LT5jYXBzLmxvZ19udW1fdmxhbnMgPSBsb2dfbnVtX3ZsYW47CisJZGV2LT5jYXBzLmxvZ19udW1fcHJpb3MgPSB1c2VfcHJpbyA/IDMgOiAwOworCisJZm9yIChpID0gMTsgaSA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyArK2kpIHsKKwkJaWYgKGRldi0+Y2Fwcy5zdXBwb3J0ZWRfdHlwZVtpXSAhPSBNTFg0X1BPUlRfVFlQRV9FVEgpCisJCQlkZXYtPmNhcHMucG9ydF90eXBlW2ldID0gTUxYNF9QT1JUX1RZUEVfSUI7CisJCWVsc2UKKwkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbaV0gPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisKKwkJaWYgKGRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPiBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV0pIHsKKwkJCWRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPSBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV07CisJCQltbHg0X3dhcm4oZGV2LCAiUmVxdWVzdGVkIG51bWJlciBvZiBNQUNzIGlzIHRvbyBtdWNoICIKKwkJCQkgICJmb3IgcG9ydCAlZCwgcmVkdWNpbmcgdG8gJWQuXG4iLAorCQkJCSAgaSwgMSA8PCBkZXYtPmNhcHMubG9nX251bV9tYWNzKTsKKwkJfQorCQlpZiAoZGV2LT5jYXBzLmxvZ19udW1fdmxhbnMgPiBkZXZfY2FwLT5sb2dfbWF4X3ZsYW5zW2ldKSB7CisJCQlkZXYtPmNhcHMubG9nX251bV92bGFucyA9IGRldl9jYXAtPmxvZ19tYXhfdmxhbnNbaV07CisJCQltbHg0X3dhcm4oZGV2LCAiUmVxdWVzdGVkIG51bWJlciBvZiBWTEFOcyBpcyB0b28gbXVjaCAiCisJCQkJICAiZm9yIHBvcnQgJWQsIHJlZHVjaW5nIHRvICVkLlxuIiwKKwkJCQkgIGksIDEgPDwgZGV2LT5jYXBzLmxvZ19udW1fdmxhbnMpOworCQl9CisJfQorCisJbWx4NF9zZXRfcG9ydF9tYXNrKGRldik7CisKKwlkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2NudFtNTFg0X1FQX1JFR0lPTl9GV10gPSBkZXZfY2FwLT5yZXNlcnZlZF9xcHM7CisJZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbTUxYNF9RUF9SRUdJT05fRVRIX0FERFJdID0KKwkJZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbTUxYNF9RUF9SRUdJT05fRkNfQUREUl0gPQorCQkoMSA8PCBkZXYtPmNhcHMubG9nX251bV9tYWNzKSAqCisJCSgxIDw8IGRldi0+Y2Fwcy5sb2dfbnVtX3ZsYW5zKSAqCisJCSgxIDw8IGRldi0+Y2Fwcy5sb2dfbnVtX3ByaW9zKSAqCisJCWRldi0+Y2Fwcy5udW1fcG9ydHM7CisJZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbTUxYNF9RUF9SRUdJT05fRkNfRVhDSF0gPSBNTFg0X05VTV9GRVhDSDsKKworCWRldi0+Y2Fwcy5yZXNlcnZlZF9xcHMgPSBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2NudFtNTFg0X1FQX1JFR0lPTl9GV10gKworCQlkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2NudFtNTFg0X1FQX1JFR0lPTl9FVEhfQUREUl0gKworCQlkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2NudFtNTFg0X1FQX1JFR0lPTl9GQ19BRERSXSArCisJCWRldi0+Y2Fwcy5yZXNlcnZlZF9xcHNfY250W01MWDRfUVBfUkVHSU9OX0ZDX0VYQ0hdOworCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBDaGFuZ2UgdGhlIHBvcnQgY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlLgorICogRXZlcnkgdXNlciBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgaG9sZCB0aGUgcG9ydCBtdXRleC4KKyAqLworc3RhdGljIGludCBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJCSAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlcykKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgY2hhbmdlID0gMDsKKwlpbnQgcG9ydDsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCAgZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKSB7CisJCWlmIChwb3J0X3R5cGVzW3BvcnRdICE9IGRldi0+Y2Fwcy5wb3J0X3R5cGVbcG9ydCArIDFdKSB7CisJCQljaGFuZ2UgPSAxOworCQkJZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0ICsgMV0gPSBwb3J0X3R5cGVzW3BvcnRdOworCQl9CisJfQorCWlmIChjaGFuZ2UpIHsKKwkJbWx4NF91bnJlZ2lzdGVyX2RldmljZShkZXYpOworCQlmb3IgKHBvcnQgPSAxOyBwb3J0IDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykgeworCQkJbWx4NF9DTE9TRV9QT1JUKGRldiwgcG9ydCk7CisJCQllcnIgPSBtbHg0X1NFVF9QT1JUKGRldiwgcG9ydCk7CisJCQlpZiAoZXJyKSB7CisJCQkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBwb3J0ICVkLCAiCisJCQkJCSAgICAgICJhYm9ydGluZ1xuIiwgcG9ydCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJbWx4NF9zZXRfcG9ydF9tYXNrKGRldik7CisJCWVyciA9IG1seDRfcmVnaXN0ZXJfZGV2aWNlKGRldik7CisJfQorCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IG1seDRfcG9ydF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBtbHg0X3BvcnRfaW5mbywKKwkJCQkJCSAgIHBvcnRfYXR0cik7CisJc3RydWN0IG1seDRfZGV2ICptZGV2ID0gaW5mby0+ZGV2OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCisJCSAgICAgICBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9JQiA/CisJCSAgICAgICAiaWIiIDogImV0aCIpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcG9ydF90eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBtbHg0X3BvcnRfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgbWx4NF9wb3J0X2luZm8sCisJCQkJCQkgICBwb3J0X2F0dHIpOworCXN0cnVjdCBtbHg0X2RldiAqbWRldiA9IGluZm8tPmRldjsKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KG1kZXYpOworCWVudW0gbWx4NF9wb3J0X3R5cGUgdHlwZXNbTUxYNF9NQVhfUE9SVFNdOworCWludCBpOworCWludCBlcnIgPSAwOworCisJaWYgKCFzdHJjbXAoYnVmLCAiaWJcbiIpKQorCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0lCOworCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZXRoXG4iKSkKKwkJaW5mby0+dG1wX3R5cGUgPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisJZWxzZSB7CisJCW1seDRfZXJyKG1kZXYsICIlcyBpcyBub3Qgc3VwcG9ydGVkIHBvcnQgdHlwZVxuIiwgYnVmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmcHJpdi0+cG9ydF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG1kZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCisJCXR5cGVzW2ldID0gcHJpdi0+cG9ydFtpKzFdLnRtcF90eXBlID8gcHJpdi0+cG9ydFtpKzFdLnRtcF90eXBlIDoKKwkJCQkJbWRldi0+Y2Fwcy5wb3J0X3R5cGVbaSsxXTsKKworCWVyciA9IG1seDRfY2hlY2tfcG9ydF9wYXJhbXMobWRldiwgdHlwZXMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMTsgaSA8PSBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKQorCQlwcml2LT5wb3J0W2ldLnRtcF90eXBlID0gMDsKKworCWVyciA9IG1seDRfY2hhbmdlX3BvcnRfdHlwZXMobWRldiwgdHlwZXMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKKwlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7Cit9CisKIHN0YXRpYyBpbnQgbWx4NF9sb2FkX2Z3KHN0cnVjdCBtbHg0X2RldiAqZGV2KQogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKQEAgLTIxMSw3ICszOTMsOCBAQAogCQkJCSAgKCh1NjQpIChNTFg0X0NNUFRfVFlQRV9RUCAqCiAJCQkJCSAgY21wdF9lbnRyeV9zeikgPDwgTUxYNF9DTVBUX1NISUZUKSwKIAkJCQkgIGNtcHRfZW50cnlfc3osIGRldi0+Y2Fwcy5udW1fcXBzLAotCQkJCSAgZGV2LT5jYXBzLnJlc2VydmVkX3FwcywgMCwgMCk7CisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2NudFtNTFg0X1FQX1JFR0lPTl9GV10sCisJCQkJICAwLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycjsKIApAQCAtMzM2LDcgKzUxOSw4IEBACiAJCQkJICBpbml0X2hjYS0+cXBjX2Jhc2UsCiAJCQkJICBkZXZfY2FwLT5xcGNfZW50cnlfc3osCiAJCQkJICBkZXYtPmNhcHMubnVtX3FwcywKLQkJCQkgIGRldi0+Y2Fwcy5yZXNlcnZlZF9xcHMsIDAsIDApOworCQkJCSAgZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbTUxYNF9RUF9SRUdJT05fRlddLAorCQkJCSAgMCwgMCk7CiAJaWYgKGVycikgewogCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIFFQIGNvbnRleHQgbWVtb3J5LCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl91bm1hcF9kbXB0OwpAQCAtMzQ2LDcgKzUzMCw4IEBACiAJCQkJICBpbml0X2hjYS0+YXV4Y19iYXNlLAogCQkJCSAgZGV2X2NhcC0+YXV4X2VudHJ5X3N6LAogCQkJCSAgZGV2LT5jYXBzLm51bV9xcHMsCi0JCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzLCAwLCAwKTsKKwkJCQkgIGRldi0+Y2Fwcy5yZXNlcnZlZF9xcHNfY250W01MWDRfUVBfUkVHSU9OX0ZXXSwKKwkJCQkgIDAsIDApOwogCWlmIChlcnIpIHsKIAkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBBVVhDIGNvbnRleHQgbWVtb3J5LCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl91bm1hcF9xcDsKQEAgLTM1Niw3ICs1NDEsOCBAQAogCQkJCSAgaW5pdF9oY2EtPmFsdGNfYmFzZSwKIAkJCQkgIGRldl9jYXAtPmFsdGNfZW50cnlfc3osCiAJCQkJICBkZXYtPmNhcHMubnVtX3FwcywKLQkJCQkgIGRldi0+Y2Fwcy5yZXNlcnZlZF9xcHMsIDAsIDApOworCQkJCSAgZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbTUxYNF9RUF9SRUdJT05fRlddLAorCQkJCSAgMCwgMCk7CiAJaWYgKGVycikgewogCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIEFMVEMgY29udGV4dCBtZW1vcnksIGFib3J0aW5nLlxuIik7CiAJCWdvdG8gZXJyX3VubWFwX2F1eGM7CkBAIC0zNjYsNyArNTUyLDggQEAKIAkJCQkgIGluaXRfaGNhLT5yZG1hcmNfYmFzZSwKIAkJCQkgIGRldl9jYXAtPnJkbWFyY19lbnRyeV9zeiA8PCBwcml2LT5xcF90YWJsZS5yZG1hcmNfc2hpZnQsCiAJCQkJICBkZXYtPmNhcHMubnVtX3FwcywKLQkJCQkgIGRldi0+Y2Fwcy5yZXNlcnZlZF9xcHMsIDAsIDApOworCQkJCSAgZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbTUxYNF9RUF9SRUdJT05fRlddLAorCQkJCSAgMCwgMCk7CiAJaWYgKGVycikgewogCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIFJETUFSQyBjb250ZXh0IG1lbW9yeSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl91bm1hcF9hbHRjOwpAQCAtNTY1LDYgKzc1Miw3IEBACiB7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwogCWludCBlcnI7CisJaW50IHBvcnQ7CiAKIAllcnIgPSBtbHg0X2luaXRfdWFyX3RhYmxlKGRldik7CiAJaWYgKGVycikgewpAQCAtNjYzLDggKzg1MSwyMCBAQAogCQlnb3RvIGVycl9xcF90YWJsZV9mcmVlOwogCX0KIAorCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKSB7CisJCWVyciA9IG1seDRfU0VUX1BPUlQoZGV2LCBwb3J0KTsKKwkJaWYgKGVycikgeworCQkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBwb3J0ICVkLCBhYm9ydGluZ1xuIiwKKwkJCQlwb3J0KTsKKwkJCWdvdG8gZXJyX21jZ190YWJsZV9mcmVlOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKK2Vycl9tY2dfdGFibGVfZnJlZToKKwltbHg0X2NsZWFudXBfbWNnX3RhYmxlKGRldik7CisKIGVycl9xcF90YWJsZV9mcmVlOgogCW1seDRfY2xlYW51cF9xcF90YWJsZShkZXYpOwogCkBAIC03MjgsMTEgKzkyOCw0NSBAQAogCQlwcml2LT5lcV90YWJsZS5lcVtpXS5pcnEgPSBkZXYtPnBkZXYtPmlycTsKIH0KIAorc3RhdGljIGludCBtbHg0X2luaXRfcG9ydF9pbmZvKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCkKK3sKKwlzdHJ1Y3QgbWx4NF9wb3J0X2luZm8gKmluZm8gPSAmbWx4NF9wcml2KGRldiktPnBvcnRbcG9ydF07CisJaW50IGVyciA9IDA7CisKKwlpbmZvLT5kZXYgPSBkZXY7CisJaW5mby0+cG9ydCA9IHBvcnQ7CisJbWx4NF9pbml0X21hY190YWJsZShkZXYsICZpbmZvLT5tYWNfdGFibGUpOworCW1seDRfaW5pdF92bGFuX3RhYmxlKGRldiwgJmluZm8tPnZsYW5fdGFibGUpOworCisJc3ByaW50ZihpbmZvLT5kZXZfbmFtZSwgIm1seDRfcG9ydCVkIiwgcG9ydCk7CisJaW5mby0+cG9ydF9hdHRyLmF0dHIubmFtZSA9IGluZm8tPmRldl9uYW1lOworCWluZm8tPnBvcnRfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUjsKKwlpbmZvLT5wb3J0X2F0dHIuc2hvdyAgICAgID0gc2hvd19wb3J0X3R5cGU7CisJaW5mby0+cG9ydF9hdHRyLnN0b3JlICAgICA9IHNldF9wb3J0X3R5cGU7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+cGRldi0+ZGV2LCAmaW5mby0+cG9ydF9hdHRyKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgZmlsZSBmb3IgcG9ydCAlZFxuIiwgcG9ydCk7CisJCWluZm8tPnBvcnQgPSAtMTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2NsZWFudXBfcG9ydF9pbmZvKHN0cnVjdCBtbHg0X3BvcnRfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5mby0+cG9ydCA8IDApCisJCXJldHVybjsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmaW5mby0+ZGV2LT5wZGV2LT5kZXYsICZpbmZvLT5wb3J0X2F0dHIpOworfQorCiBzdGF0aWMgaW50IF9fbWx4NF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXY7CiAJc3RydWN0IG1seDRfZGV2ICpkZXY7CiAJaW50IGVycjsKKwlpbnQgcG9ydDsKIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJJbml0aWFsaXppbmcgJXNcbiIsCiAJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKQEAgLTgwNyw2ICsxMDQxLDggQEAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y3R4X2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5jdHhfbG9jayk7CiAKKwltdXRleF9pbml0KCZwcml2LT5wb3J0X211dGV4KTsKKwogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5wZ2Rpcl9saXN0KTsKIAltdXRleF9pbml0KCZwcml2LT5wZ2Rpcl9tdXRleCk7CiAKQEAgLTg0MiwxNSArMTA3OCwyNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2Nsb3NlOwogCisJZm9yIChwb3J0ID0gMTsgcG9ydCA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyBwb3J0KyspIHsKKwkJZXJyID0gbWx4NF9pbml0X3BvcnRfaW5mbyhkZXYsIHBvcnQpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfcG9ydDsKKwl9CisKIAllcnIgPSBtbHg0X3JlZ2lzdGVyX2RldmljZShkZXYpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2NsZWFudXA7CisJCWdvdG8gZXJyX3BvcnQ7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCXJldHVybiAwOwogCi1lcnJfY2xlYW51cDoKK2Vycl9wb3J0OgorCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKQorCQltbHg0X2NsZWFudXBfcG9ydF9pbmZvKCZwcml2LT5wb3J0W3BvcnRdKTsKKwogCW1seDRfY2xlYW51cF9tY2dfdGFibGUoZGV2KTsKIAltbHg0X2NsZWFudXBfcXBfdGFibGUoZGV2KTsKIAltbHg0X2NsZWFudXBfc3JxX3RhYmxlKGRldik7CkBAIC05MDcsOCArMTE1MiwxMCBAQAogCWlmIChkZXYpIHsKIAkJbWx4NF91bnJlZ2lzdGVyX2RldmljZShkZXYpOwogCi0JCWZvciAocCA9IDE7IHAgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgKytwKQorCQlmb3IgKHAgPSAxOyBwIDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IHArKykgeworCQkJbWx4NF9jbGVhbnVwX3BvcnRfaW5mbygmcHJpdi0+cG9ydFtwXSk7CiAJCQltbHg0X0NMT1NFX1BPUlQoZGV2LCBwKTsKKwkJfQogCiAJCW1seDRfY2xlYW51cF9tY2dfdGFibGUoZGV2KTsKIAkJbWx4NF9jbGVhbnVwX3FwX3RhYmxlKGRldik7CkBAIC05NDgsNiArMTE5NSw4IEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzU0KSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIFFEUiAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjczMikgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBERFIgUENJZSBnZW4yICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzNjKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIFFEUiBQQ0llIGdlbjIgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNjgpIH0sIC8qIE1UMjU0MDggIkhlcm1vbiIgRU4gMTBHaWdFICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzUwKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIEVOIDEwR2lnRSBQQ0llIGdlbjIgKi8KIAl7IDAsIH0KIH07CiAKQEAgLTk2MCwxMCArMTIwOSwyOCBAQAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWx4NF9yZW1vdmVfb25lKQogfTsKIAorc3RhdGljIGludCBfX2luaXQgbWx4NF92ZXJpZnlfcGFyYW1zKHZvaWQpCit7CisJaWYgKChsb2dfbnVtX21hYyA8IDApIHx8IChsb2dfbnVtX21hYyA+IDcpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1seDRfY29yZTogYmFkIG51bV9tYWM6ICVkXG4iLCBsb2dfbnVtX21hYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKGxvZ19udW1fdmxhbiA8IDApIHx8IChsb2dfbnVtX3ZsYW4gPiA3KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtbHg0X2NvcmU6IGJhZCBudW1fdmxhbjogJWRcbiIsIGxvZ19udW1fdmxhbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgbWx4NF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAorCWlmIChtbHg0X3ZlcmlmeV9wYXJhbXMoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyZXQgPSBtbHg0X2NhdGFzX2luaXQoKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tY2cuYyBiL2RyaXZlcnMvbmV0L21seDQvbWNnLmMKaW5kZXggYzgzZjg4Yy4uNTkyYzAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tY2cuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21jZy5jCkBAIC0zNjgsOCArMzY4LDggQEAKIAlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CiAJaW50IGVycjsKIAotCWVyciA9IG1seDRfYml0bWFwX2luaXQoJnByaXYtPm1jZ190YWJsZS5iaXRtYXAsCi0JCQkgICAgICAgZGV2LT5jYXBzLm51bV9hbWdtcywgZGV2LT5jYXBzLm51bV9hbWdtcyAtIDEsIDApOworCWVyciA9IG1seDRfYml0bWFwX2luaXQoJnByaXYtPm1jZ190YWJsZS5iaXRtYXAsIGRldi0+Y2Fwcy5udW1fYW1nbXMsCisJCQkgICAgICAgZGV2LT5jYXBzLm51bV9hbWdtcyAtIDEsIDAsIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKaW5kZXggNTMzN2UzYS4uZmE0MzFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKQEAgLTExMSw2ICsxMTEsNyBAQAogCXUzMgkJCWxhc3Q7CiAJdTMyCQkJdG9wOwogCXUzMgkJCW1heDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZF90b3A7CiAJdTMyCQkJbWFzazsKIAlzcGlubG9ja190CQlsb2NrOwogCXVuc2lnbmVkIGxvbmcJICAgICAgICp0YWJsZTsKQEAgLTI1MSw2ICsyNTIsMzggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCisjZGVmaW5lIE1MWDRfTUFYX01BQ19OVU0JMTI4CisjZGVmaW5lIE1MWDRfTUFDX1RBQkxFX1NJWkUJKE1MWDRfTUFYX01BQ19OVU0gPDwgMykKKworc3RydWN0IG1seDRfbWFjX3RhYmxlIHsKKwlfX2JlNjQJCQllbnRyaWVzW01MWDRfTUFYX01BQ19OVU1dOworCWludAkJCXJlZnNbTUxYNF9NQVhfTUFDX05VTV07CisJc3RydWN0IG11dGV4CQltdXRleDsKKwlpbnQJCQl0b3RhbDsKKwlpbnQJCQltYXg7Cit9OworCisjZGVmaW5lIE1MWDRfTUFYX1ZMQU5fTlVNCTEyOAorI2RlZmluZSBNTFg0X1ZMQU5fVEFCTEVfU0laRQkoTUxYNF9NQVhfVkxBTl9OVU0gPDwgMikKKworc3RydWN0IG1seDRfdmxhbl90YWJsZSB7CisJX19iZTMyCQkJZW50cmllc1tNTFg0X01BWF9WTEFOX05VTV07CisJaW50CQkJcmVmc1tNTFg0X01BWF9WTEFOX05VTV07CisJc3RydWN0IG11dGV4CQltdXRleDsKKwlpbnQJCQl0b3RhbDsKKwlpbnQJCQltYXg7Cit9OworCitzdHJ1Y3QgbWx4NF9wb3J0X2luZm8geworCXN0cnVjdCBtbHg0X2RldgkgICAgICAgKmRldjsKKwlpbnQJCQlwb3J0OworCWNoYXIJCQlkZXZfbmFtZVsxNl07CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcG9ydF9hdHRyOworCWVudW0gbWx4NF9wb3J0X3R5cGUJdG1wX3R5cGU7CisJc3RydWN0IG1seDRfbWFjX3RhYmxlCW1hY190YWJsZTsKKwlzdHJ1Y3QgbWx4NF92bGFuX3RhYmxlCXZsYW5fdGFibGU7Cit9OworCiBzdHJ1Y3QgbWx4NF9wcml2IHsKIAlzdHJ1Y3QgbWx4NF9kZXYJCWRldjsKIApAQCAtMjc5LDYgKzMxMiw4IEBACiAKIAlzdHJ1Y3QgbWx4NF91YXIJCWRyaXZlcl91YXI7CiAJdm9pZCBfX2lvbWVtCSAgICAgICAqa2FyOworCXN0cnVjdCBtbHg0X3BvcnRfaW5mbwlwb3J0W01MWDRfTUFYX1BPUlRTICsgMV07CisJc3RydWN0IG11dGV4CQlwb3J0X211dGV4OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWx4NF9wcml2ICptbHg0X3ByaXYoc3RydWN0IG1seDRfZGV2ICpkZXYpCkBAIC0yODgsNyArMzIzLDEwIEBACiAKIHUzMiBtbHg0X2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCk7CiB2b2lkIG1seDRfYml0bWFwX2ZyZWUoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXAsIHUzMiBvYmopOwotaW50IG1seDRfYml0bWFwX2luaXQoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXAsIHUzMiBudW0sIHUzMiBtYXNrLCB1MzIgcmVzZXJ2ZWQpOwordTMyIG1seDRfYml0bWFwX2FsbG9jX3JhbmdlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCBpbnQgY250LCBpbnQgYWxpZ24pOwordm9pZCBtbHg0X2JpdG1hcF9mcmVlX3JhbmdlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgb2JqLCBpbnQgY250KTsKK2ludCBtbHg0X2JpdG1hcF9pbml0KHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgbnVtLCB1MzIgbWFzaywKKwkJICAgICB1MzIgcmVzZXJ2ZWRfYm90LCB1MzIgcmVzZXRydmVkX3RvcCk7CiB2b2lkIG1seDRfYml0bWFwX2NsZWFudXAoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXApOwogCiBpbnQgbWx4NF9yZXNldChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CkBAIC0zNDYsNCArMzg0LDkgQEAKIAogdm9pZCBtbHg0X2hhbmRsZV9jYXRhc19lcnIoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogCit2b2lkIG1seDRfaW5pdF9tYWNfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X21hY190YWJsZSAqdGFibGUpOwordm9pZCBtbHg0X2luaXRfdmxhbl90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfdmxhbl90YWJsZSAqdGFibGUpOworCitpbnQgbWx4NF9TRVRfUE9SVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggcG9ydCk7CisKICNlbmRpZiAvKiBNTFg0X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmYjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCkBAIC0wLDAgKzEsNTYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9NTFg0X0VOX0hfCisjZGVmaW5lIF9NTFg0X0VOX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvcXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L2NxLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9zcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L2Rvb3JiZWxsLmg+CisKKyNpbmNsdWRlICJlbl9wb3J0LmgiCisKKyNkZWZpbmUgRFJWX05BTUUJIm1seDRfZW4iCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjQuMCIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIlNlcCAyMDA4IgorCisKKyNkZWZpbmUgTUxYNF9FTl9NU0dfTEVWRUwJKE5FVElGX01TR19MSU5LIHwgTkVUSUZfTVNHX0lGRE9XTikKKworI2RlZmluZSBtbHg0X2RiZyhtbGV2ZWwsIHByaXYsIGZvcm1hdCwgYXJnLi4uKQlcCisJaWYgKE5FVElGX01TR18jI21sZXZlbCAmIHByaXYtPm1zZ19lbmFibGUpIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMgJXM6ICIgZm9ybWF0ICwgRFJWX05BTUUgLFwKKwkJKCZwcml2LT5tZGV2LT5wZGV2LT5kZXYpLT5idXNfaWQgLCAjIyBhcmcpCisKKyNkZWZpbmUgbWx4NF9lcnIobWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgIiVzICVzOiAiIGZvcm1hdCAsIERSVl9OQU1FICxcCisJCSgmbWRldi0+cGRldi0+ZGV2KS0+YnVzX2lkICwgIyMgYXJnKQorI2RlZmluZSBtbHg0X2luZm8obWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPICIlcyAlczogIiBmb3JtYXQgLCBEUlZfTkFNRSAsXAorCQkoJm1kZXYtPnBkZXYtPmRldiktPmJ1c19pZCAsICMjIGFyZykKKyNkZWZpbmUgbWx4NF93YXJuKG1kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXM6ICIgZm9ybWF0ICwgRFJWX05BTUUgLFwKKwkJKCZtZGV2LT5wZGV2LT5kZXYpLT5idXNfaWQgLCAjIyBhcmcpCisKKy8qCisgKiBEZXZpY2UgY29uc3RhbnRzCisgKi8KKworCisjZGVmaW5lIE1MWDRfRU5fUEFHRV9TSElGVAkxMgorI2RlZmluZSBNTFg0X0VOX1BBR0VfU0laRQkoMSA8PCBNTFg0X0VOX1BBR0VfU0hJRlQpCisjZGVmaW5lIE1BWF9UWF9SSU5HUwkJMTYKKyNkZWZpbmUgTUFYX1JYX1JJTkdTCQkxNgorI2RlZmluZSBNQVhfUlNTX01BUF9TSVpFCTY0CisjZGVmaW5lIFJTU19GQUNUT1IJCTIKKyNkZWZpbmUgVFhCQl9TSVpFCQk2NAorI2RlZmluZSBIRUFEUk9PTQkJKDIwNDggLyBUWEJCX1NJWkUgKyAxKQorI2RlZmluZSBNQVhfTFNPX0hEUl9TSVpFCTkyCisjZGVmaW5lIFNUQU1QX1NUUklERQkJNjQKKyNkZWZpbmUgU1RBTVBfRFdPUkRTCQkoU1RBTVBfU1RSSURFIC8gNCkKKyNkZWZpbmUgU1RBTVBfU0hJRlQJCTMxCisjZGVmaW5lIFNUQU1QX1ZBTAkJMHg3ZmZmZmZmZgorI2RlZmluZSBTVEFUU19ERUxBWQkJKEhaIC8gNCkKKworLyogVHlwaWNhbCBUU08gZGVzY3JpcHRvciB3aXRoIDE2IGdhdGhlciBlbnRyaWVzIGlzIDM1MiBieXRlcy4uLiAqLworI2RlZmluZSBNQVhfREVTQ19TSVpFCQk1MTIKKyNkZWZpbmUgTUFYX0RFU0NfVFhCQlMJCShNQVhfREVTQ19TSVpFIC8gVFhCQl9TSVpFKQorCisvKgorICogT1MgcmVsYXRlZCBjb25zdGFudHMgYW5kIHR1bmFibGVzCisgKi8KKworI2RlZmluZSBNTFg0X0VOX1dBVENIRE9HX1RJTUVPVVQJKDE1ICogSFopCisKKyNkZWZpbmUgTUxYNF9FTl9BTExPQ19PUkRFUgkyCisjZGVmaW5lIE1MWDRfRU5fQUxMT0NfU0laRQkoUEFHRV9TSVpFIDw8IE1MWDRfRU5fQUxMT0NfT1JERVIpCisKKyNkZWZpbmUgTUxYNF9FTl9NQVhfTFJPX0RFU0NSSVBUT1JTCTMyCisKKy8qIFJlY2VpdmUgZnJhZ21lbnQgc2l6ZXM7IHdlIHVzZSBhdCBtb3N0IDQgZnJhZ21lbnRzIChmb3IgOTYwMCBieXRlIE1UVQorICogYW5kIDRLIGFsbG9jYXRpb25zKSAqLworZW51bSB7CisJRlJBR19TWjAgPSA1MTIgLSBORVRfSVBfQUxJR04sCisJRlJBR19TWjEgPSAxMDI0LAorCUZSQUdfU1oyID0gNDA5NiwKKwlGUkFHX1NaMyA9IE1MWDRfRU5fQUxMT0NfU0laRQorfTsKKyNkZWZpbmUgTUxYNF9FTl9NQVhfUlhfRlJBR1MJNAorCisvKiBNaW5pbXVtIHJpbmcgc2l6ZSBmb3Igb3VyIHBhZ2UtYWxsb2NhdGlvbiBzY2VtZSB0byB3b3JrICovCisjZGVmaW5lIE1MWDRfRU5fTUlOX1JYX1NJWkUJKE1MWDRfRU5fQUxMT0NfU0laRSAvIFNNUF9DQUNIRV9CWVRFUykKKyNkZWZpbmUgTUxYNF9FTl9NSU5fVFhfU0laRQkoNDA5NiAvIFRYQkJfU0laRSkKKworI2RlZmluZSBNTFg0X0VOX1RYX1JJTkdfTlVNCQk5CisjZGVmaW5lIE1MWDRfRU5fREVGX1RYX1JJTkdfU0laRQkxMDI0CisjZGVmaW5lIE1MWDRfRU5fREVGX1JYX1JJTkdfU0laRSAgCTEwMjQKKworLyogVGFyZ2V0IG51bWJlciBvZiBieXRlcyB0byBjb2FsZXNjZSB3aXRoIGludGVycnVwdCBtb2RlcmF0aW9uICovCisjZGVmaW5lIE1MWDRfRU5fUlhfQ09BTF9UQVJHRVQJMHgyMDAwMAorI2RlZmluZSBNTFg0X0VOX1JYX0NPQUxfVElNRQkweDEwCisKKyNkZWZpbmUgTUxYNF9FTl9UWF9DT0FMX1BLVFMJNQorI2RlZmluZSBNTFg0X0VOX1RYX0NPQUxfVElNRQkweDgwCisKKyNkZWZpbmUgTUxYNF9FTl9SWF9SQVRFX0xPVwkJNDAwMDAwCisjZGVmaW5lIE1MWDRfRU5fUlhfQ09BTF9USU1FX0xPVwkwCisjZGVmaW5lIE1MWDRfRU5fUlhfUkFURV9ISUdICQk0NTAwMDAKKyNkZWZpbmUgTUxYNF9FTl9SWF9DT0FMX1RJTUVfSElHSAkxMjgKKyNkZWZpbmUgTUxYNF9FTl9SWF9TSVpFX1RIUkVTSAkJMTAyNAorI2RlZmluZSBNTFg0X0VOX1JYX1JBVEVfVEhSRVNICQkoMTAwMDAwMCAvIE1MWDRfRU5fUlhfQ09BTF9USU1FX0hJR0gpCisjZGVmaW5lIE1MWDRfRU5fU0FNUExFX0lOVEVSVkFMCQkwCisKKyNkZWZpbmUgTUxYNF9FTl9BVVRPX0NPTkYJMHhmZmZmCisKKyNkZWZpbmUgTUxYNF9FTl9ERUZfUlhfUEFVU0UJMQorI2RlZmluZSBNTFg0X0VOX0RFRl9UWF9QQVVTRQkxCisKKy8qIEludGVydmFsIGJldHdlZW4gc3VjZXNzaXZlIHBvbGxzIGluIHRoZSBUeCByb3V0aW5lIHdoZW4gcG9sbGluZyBpcyB1c2VkCisgICBpbnN0ZWFkIG9mIGludGVycnVwdHMgKGluIHBlci1jb3JlIFR4IHJpbmdzKSAtIHNob3VsZCBiZSBwb3dlciBvZiAyICovCisjZGVmaW5lIE1MWDRfRU5fVFhfUE9MTF9NT0RFUgkxNgorI2RlZmluZSBNTFg0X0VOX1RYX1BPTExfVElNRU9VVAkoSFogLyA0KQorCisjZGVmaW5lIEVUSF9MTENfU05BUF9TSVpFCTgKKworI2RlZmluZSBTTUFMTF9QQUNLRVRfU0laRSAgICAgICgyNTYgLSBORVRfSVBfQUxJR04pCisjZGVmaW5lIEhFQURFUl9DT1BZX1NJWkUgICAgICAgKDEyOCAtIE5FVF9JUF9BTElHTikKKworI2RlZmluZSBNTFg0X0VOX01JTl9NVFUJCTQ2CisjZGVmaW5lIEVUSF9CQ0FTVAkJMHhmZmZmZmZmZmZmZmZVTEwKKworI2lmZGVmIE1MWDRfRU5fUEVSRl9TVEFUCisvKiBOdW1iZXIgb2Ygc2FtcGxlcyB0byAnYXZlcmFnZScgKi8KKyNkZWZpbmUgQVZHX1NJWkUJCQkxMjgKKyNkZWZpbmUgQVZHX0ZBQ1RPUgkJCTEwMjQKKyNkZWZpbmUgTlVNX1BFUkZfU1RBVFMJCQlOVU1fUEVSRl9DT1VOVEVSUworCisjZGVmaW5lIElOQ19QRVJGX0NPVU5URVIoY250KQkJKCsrKGNudCkpCisjZGVmaW5lIEFERF9QRVJGX0NPVU5URVIoY250LCBhZGQpCSgoY250KSArPSAoYWRkKSkKKyNkZWZpbmUgQVZHX1BFUkZfQ09VTlRFUihjbnQsIHNhbXBsZSkgXAorCSgoY250KSA9ICgoY250KSAqIChBVkdfU0laRSAtIDEpICsgKHNhbXBsZSkgKiBBVkdfRkFDVE9SKSAvIEFWR19TSVpFKQorI2RlZmluZSBHRVRfUEVSRl9DT1VOVEVSKGNudCkJCShjbnQpCisjZGVmaW5lIEdFVF9BVkdfUEVSRl9DT1VOVEVSKGNudCkJKChjbnQpIC8gQVZHX0ZBQ1RPUikKKworI2Vsc2UKKworI2RlZmluZSBOVU1fUEVSRl9TVEFUUwkJCTAKKyNkZWZpbmUgSU5DX1BFUkZfQ09VTlRFUihjbnQpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQUREX1BFUkZfQ09VTlRFUihjbnQsIGFkZCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIEFWR19QRVJGX0NPVU5URVIoY250LCBzYW1wbGUpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBHRVRfUEVSRl9DT1VOVEVSKGNudCkJCSgwKQorI2RlZmluZSBHRVRfQVZHX1BFUkZfQ09VTlRFUihjbnQpCSgwKQorI2VuZGlmIC8qIE1MWDRfRU5fUEVSRl9TVEFUICovCisKKy8qCisgKiBDb25maWd1cmFibGVzCisgKi8KKworZW51bSBjcV90eXBlIHsKKwlSWCA9IDAsCisJVFggPSAxLAorfTsKKworCisvKgorICogVXNlZnVsIG1hY3JvcworICovCisjZGVmaW5lIFJPVU5EVVBfTE9HMih4KQkJaWxvZzIocm91bmR1cF9wb3dfb2ZfdHdvKHgpKQorI2RlZmluZSBYTk9SKHgsIHkpCQkoISh4KSA9PSAhKHkpKQorI2RlZmluZSBJTExFR0FMX01BQyhhZGRyKQkoYWRkciA9PSAweGZmZmZmZmZmZmZmZlVMTCB8fCBhZGRyID09IDB4MCkKKworCitzdHJ1Y3QgbWx4NF9lbl90eF9pbmZvIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBucl90eGJiOworCXU4IGxpbmVhcjsKKwl1OCBkYXRhX29mZnNldDsKK307CisKKworI2RlZmluZSBNTFg0X0VOX0JJVF9ERVNDX09XTgkweDgwMDAwMDAwCisjZGVmaW5lIENUUkxfU0laRQlzaXplb2Yoc3RydWN0IG1seDRfd3FlX2N0cmxfc2VnKQorI2RlZmluZSBNTFg0X0VOX01FTVRZUEVfUEFECTB4MTAwCisjZGVmaW5lIERTX1NJWkUJCXNpemVvZihzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcpCisKKworc3RydWN0IG1seDRfZW5fdHhfZGVzYyB7CisJc3RydWN0IG1seDRfd3FlX2N0cmxfc2VnIGN0cmw7CisJdW5pb24geworCQlzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgZGF0YTsgLyogYXQgbGVhc3Qgb25lIGRhdGEgc2VnbWVudCAqLworCQlzdHJ1Y3QgbWx4NF93cWVfbHNvX3NlZyBsc287CisJCXN0cnVjdCBtbHg0X3dxZV9pbmxpbmVfc2VnIGlubDsKKwl9OworfTsKKworI2RlZmluZSBNTFg0X0VOX1VTRV9TUlEJCTB4MDEwMDAwMDAKKworc3RydWN0IG1seDRfZW5fcnhfYWxsb2MgeworCXN0cnVjdCBwYWdlICpwYWdlOworCXUxNiBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nIHsKKwlzdHJ1Y3QgbWx4NF9od3FfcmVzb3VyY2VzIHdxcmVzOworCXUzMiBzaXplIDsgLyogbnVtYmVyIG9mIFRYQkJzICovCisJdTMyIHNpemVfbWFzazsKKwl1MTYgc3RyaWRlOworCXUxNiBjcW47CS8qIGluZGV4IG9mIHBvcnQgQ1EgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmluZyAqLworCXUzMiBwcm9kOworCXUzMiBjb25zOworCXUzMiBidWZfc2l6ZTsKKwl1MzIgZG9vcmJlbGxfcXBuOworCXZvaWQgKmJ1ZjsKKwl1MTYgcG9sbF9jbnQ7CisJaW50IGJsb2NrZWQ7CisJc3RydWN0IG1seDRfZW5fdHhfaW5mbyAqdHhfaW5mbzsKKwl1OCAqYm91bmNlX2J1ZjsKKwl1MzIgbGFzdF9ucl90eGJiOworCXN0cnVjdCBtbHg0X3FwIHFwOworCXN0cnVjdCBtbHg0X3FwX2NvbnRleHQgY29udGV4dDsKKwlpbnQgcXBuOworCWVudW0gbWx4NF9xcF9zdGF0ZSBxcF9zdGF0ZTsKKwlzdHJ1Y3QgbWx4NF9zcnEgZHVtbXk7CisJdW5zaWduZWQgbG9uZyBieXRlczsKKwl1bnNpZ25lZCBsb25nIHBhY2tldHM7CisJc3BpbmxvY2tfdCBjb21wX2xvY2s7Cit9OworCitzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjIHsKKwlzdHJ1Y3QgbWx4NF93cWVfc3JxX25leHRfc2VnIG5leHQ7CisJLyogYWN0dWFsIG51bWJlciBvZiBlbnRyaWVzIGRlcGVuZHMgb24gcnggcmluZyBzdHJpZGUgKi8KKwlzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgZGF0YVswXTsKK307CisKK3N0cnVjdCBtbHg0X2VuX3J4X3JpbmcgeworCXN0cnVjdCBtbHg0X3NycSBzcnE7CisJc3RydWN0IG1seDRfaHdxX3Jlc291cmNlcyB3cXJlczsKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9hbGxvYyBwYWdlX2FsbG9jW01MWDRfRU5fTUFYX1JYX0ZSQUdTXTsKKwlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvOworCXUzMiBzaXplIDsJLyogbnVtYmVyIG9mIFJ4IGRlc2NzKi8KKwl1MzIgYWN0dWFsX3NpemU7CisJdTMyIHNpemVfbWFzazsKKwl1MTYgc3RyaWRlOworCXUxNiBsb2dfc3RyaWRlOworCXUxNiBjcW47CS8qIGluZGV4IG9mIHBvcnQgQ1EgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmluZyAqLworCXUzMiBwcm9kOworCXUzMiBjb25zOworCXUzMiBidWZfc2l6ZTsKKwlpbnQgbmVlZF9yZWZpbGw7CisJaW50IGZ1bGw7CisJdm9pZCAqYnVmOworCXZvaWQgKnJ4X2luZm87CisJdW5zaWduZWQgbG9uZyBieXRlczsKKwl1bnNpZ25lZCBsb25nIHBhY2tldHM7Cit9OworCisKK3N0YXRpYyBpbmxpbmUgaW50IG1seDRfZW5fY2FuX2xybyhfX2JlMTYgc3RhdHVzKQoreworCXJldHVybiAoc3RhdHVzICYgY3B1X3RvX2JlMTYoTUxYNF9DUUVfU1RBVFVTX0lQVjQJfAorCQkJCSAgICAgTUxYNF9DUUVfU1RBVFVTX0lQVjRGCXwKKwkJCQkgICAgIE1MWDRfQ1FFX1NUQVRVU19JUFY2CXwKKwkJCQkgICAgIE1MWDRfQ1FFX1NUQVRVU19JUFY0T1BUCXwKKwkJCQkgICAgIE1MWDRfQ1FFX1NUQVRVU19UQ1AJfAorCQkJCSAgICAgTUxYNF9DUUVfU1RBVFVTX1VEUAl8CisJCQkJICAgICBNTFg0X0NRRV9TVEFUVVNfSVBPSykpID09CisJCWNwdV90b19iZTE2KE1MWDRfQ1FFX1NUQVRVU19JUFY0IHwKKwkJCSAgICBNTFg0X0NRRV9TVEFUVVNfSVBPSyB8CisJCQkgICAgTUxYNF9DUUVfU1RBVFVTX1RDUCk7Cit9CisKK3N0cnVjdCBtbHg0X2VuX2NxIHsKKwlzdHJ1Y3QgbWx4NF9jcSAgICAgICAgICBtY3E7CisJc3RydWN0IG1seDRfaHdxX3Jlc291cmNlcyB3cXJlczsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByaW5nOworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7CisJc3RydWN0IG5ldF9kZXZpY2UgICAgICAqZGV2OworCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOworCS8qIFBlci1jb3JlIFR4IGNxIHByb2Nlc3Npbmcgc3VwcG9ydCAqLworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCWludCBzaXplOworCWludCBidWZfc2l6ZTsKKwl1bnNpZ25lZCB2ZWN0b3I7CisJZW51bSBjcV90eXBlIGlzX3R4OworCXUxNiBtb2Rlcl90aW1lOworCXUxNiBtb2Rlcl9jbnQ7CisJaW50IGFybWVkOworCXN0cnVjdCBtbHg0X2NxZSAqYnVmOworI2RlZmluZSBNTFg0X0VOX09QQ09ERV9FUlJPUgkweDFlCit9OworCitzdHJ1Y3QgbWx4NF9lbl9wb3J0X3Byb2ZpbGUgeworCXUzMiBmbGFnczsKKwl1MzIgdHhfcmluZ19udW07CisJdTMyIHJ4X3JpbmdfbnVtOworCXUzMiB0eF9yaW5nX3NpemU7CisJdTMyIHJ4X3Jpbmdfc2l6ZTsKK307CisKK3N0cnVjdCBtbHg0X2VuX3Byb2ZpbGUgeworCWludCByc3NfeG9yOworCWludCBudW1fbHJvOworCXU4IHJzc19tYXNrOworCXUzMiBhY3RpdmVfcG9ydHM7CisJdTMyIHNtYWxsX3BrdF9pbnQ7CisJaW50IHJ4X21vZGVyX2NudDsKKwlpbnQgcnhfbW9kZXJfdGltZTsKKwlpbnQgYXV0b19tb2RlcjsKKwl1OCByeF9wYXVzZTsKKwl1OCByeF9wcHA7CisJdTggdHhfcGF1c2U7CisJdTggdHhfcHBwOworCXU4IG5vX3Jlc2V0OworCXN0cnVjdCBtbHg0X2VuX3BvcnRfcHJvZmlsZSBwcm9mW01MWDRfTUFYX1BPUlRTICsgMV07Cit9OworCitzdHJ1Y3QgbWx4NF9lbl9kZXYgeworCXN0cnVjdCBtbHg0X2RldiAgICAgICAgICpkZXY7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCXN0cnVjdCBtdXRleAkJc3RhdGVfbG9jazsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAqcG5kZXZbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBwb3J0X2NudDsKKwlib29sCQkJZGV2aWNlX3VwOworCXN0cnVjdCBtbHg0X2VuX3Byb2ZpbGUgIHByb2ZpbGU7CisJdTMyCQkJTFNPX3N1cHBvcnQ7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqZG1hX2RldmljZTsKKwl2b2lkIF9faW9tZW0gICAgICAgICAgICAqdWFyX21hcDsKKwlzdHJ1Y3QgbWx4NF91YXIgICAgICAgICBwcml2X3VhcjsKKwlzdHJ1Y3QgbWx4NF9tcgkJbXI7CisJdTMyICAgICAgICAgICAgICAgICAgICAgcHJpdl9wZG47CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgdWFyX2xvY2s7Cit9OworCisKK3N0cnVjdCBtbHg0X2VuX3Jzc19tYXAgeworCWludCBzaXplOworCWludCBiYXNlX3FwbjsKKwl1MTYgbWFwW01BWF9SU1NfTUFQX1NJWkVdOworCXN0cnVjdCBtbHg0X3FwIHFwc1tNQVhfUlNTX01BUF9TSVpFXTsKKwllbnVtIG1seDRfcXBfc3RhdGUgc3RhdGVbTUFYX1JTU19NQVBfU0laRV07CisJc3RydWN0IG1seDRfcXAgaW5kaXJfcXA7CisJZW51bSBtbHg0X3FwX3N0YXRlIGluZGlyX3N0YXRlOworfTsKKworc3RydWN0IG1seDRfZW5fcnNzX2NvbnRleHQgeworCV9fYmUzMiBiYXNlX3FwbjsKKwlfX2JlMzIgZGVmYXVsdF9xcG47CisJdTE2IHJlc2VydmVkOworCXU4IGhhc2hfZm47CisJdTggZmxhZ3M7CisJX19iZTMyIHJzc19rZXlbMTBdOworfTsKKworc3RydWN0IG1seDRfZW5fcGt0X3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIGJyb2FkY2FzdDsKKwl1bnNpZ25lZCBsb25nIHJ4X3ByaW9bOF07CisJdW5zaWduZWQgbG9uZyB0eF9wcmlvWzhdOworI2RlZmluZSBOVU1fUEtUX1NUQVRTCQkxNworfTsKKworc3RydWN0IG1seDRfZW5fcG9ydF9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBscm9fYWdncmVnYXRlZDsKKwl1bnNpZ25lZCBsb25nIGxyb19mbHVzaGVkOworCXVuc2lnbmVkIGxvbmcgbHJvX25vX2Rlc2M7CisJdW5zaWduZWQgbG9uZyB0c29fcGFja2V0czsKKwl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BwZWQ7CisJdW5zaWduZWQgbG9uZyB3YWtlX3F1ZXVlOworCXVuc2lnbmVkIGxvbmcgdHhfdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHJ4X2FsbG9jX2ZhaWxlZDsKKwl1bnNpZ25lZCBsb25nIHJ4X2Noa3N1bV9nb29kOworCXVuc2lnbmVkIGxvbmcgcnhfY2hrc3VtX25vbmU7CisJdW5zaWduZWQgbG9uZyB0eF9jaGtzdW1fb2ZmbG9hZDsKKyNkZWZpbmUgTlVNX1BPUlRfU1RBVFMJCTExCit9OworCitzdHJ1Y3QgbWx4NF9lbl9wZXJmX3N0YXRzIHsKKwl1MzIgdHhfcG9sbDsKKwl1NjQgdHhfcGt0c3pfYXZnOworCXUzMiBpbmZsaWdodF9hdmc7CisJdTE2IHR4X2NvYWxfYXZnOworCXUxNiByeF9jb2FsX2F2ZzsKKwl1MzIgbmFwaV9xdW90YTsKKyNkZWZpbmUgTlVNX1BFUkZfQ09VTlRFUlMJCTYKK307CisKK3N0cnVjdCBtbHg0X2VuX2ZyYWdfaW5mbyB7CisJdTE2IGZyYWdfc2l6ZTsKKwl1MTYgZnJhZ19wcmVmaXhfc2l6ZTsKKwl1MTYgZnJhZ19zdHJpZGU7CisJdTE2IGZyYWdfYWxpZ247CisJdTE2IGxhc3Rfb2Zmc2V0OworCit9OworCitzdHJ1Y3QgbWx4NF9lbl9wcml2IHsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXY7CisJc3RydWN0IG1seDRfZW5fcG9ydF9wcm9maWxlICpwcm9mOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHJldF9zdGF0czsKKwlzcGlubG9ja190IHN0YXRzX2xvY2s7CisKKwl1bnNpZ25lZCBsb25nIGxhc3RfbW9kZXJfcGFja2V0czsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbW9kZXJfdHhfcGFja2V0czsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbW9kZXJfYnl0ZXM7CisJdW5zaWduZWQgbG9uZyBsYXN0X21vZGVyX2ppZmZpZXM7CisJaW50IGxhc3RfbW9kZXJfdGltZTsKKwl1MTYgcnhfdXNlY3M7CisJdTE2IHJ4X2ZyYW1lczsKKwl1MTYgdHhfdXNlY3M7CisJdTE2IHR4X2ZyYW1lczsKKwl1MzIgcGt0X3JhdGVfbG93OworCXUxNiByeF91c2Vjc19sb3c7CisJdTMyIHBrdF9yYXRlX2hpZ2g7CisJdTE2IHJ4X3VzZWNzX2hpZ2g7CisJdTE2IHNhbXBsZV9pbnRlcnZhbDsKKwl1MTYgYWRhcHRpdmVfcnhfY29hbDsKKwl1MzIgbXNnX2VuYWJsZTsKKworCXN0cnVjdCBtbHg0X2h3cV9yZXNvdXJjZXMgcmVzOworCWludCBsaW5rX3N0YXRlOworCWludCBsYXN0X2xpbmtfc3RhdGU7CisJYm9vbCBwb3J0X3VwOworCWludCBwb3J0OworCWludCByZWdpc3RlcmVkOworCWludCBhbGxvY2F0ZWQ7CisJaW50IHN0cmlkZTsKKwlpbnQgcnhfY3N1bTsKKwl1NjQgbWFjOworCWludCBtYWNfaW5kZXg7CisJdW5zaWduZWQgbWF4X210dTsKKwlpbnQgYmFzZV9xcG47CisKKwlzdHJ1Y3QgbWx4NF9lbl9yc3NfbWFwIHJzc19tYXA7CisJdTE2IHR4X3ByaW9fbWFwWzhdOworCXUzMiBmbGFnczsKKyNkZWZpbmUgTUxYNF9FTl9GTEFHX1BST01JU0MJMHgxCisJdTMyIHR4X3JpbmdfbnVtOworCXUzMiByeF9yaW5nX251bTsKKwl1MzIgcnhfc2tiX3NpemU7CisJc3RydWN0IG1seDRfZW5fZnJhZ19pbmZvIGZyYWdfaW5mb1tNTFg0X0VOX01BWF9SWF9GUkFHU107CisJdTE2IG51bV9mcmFnczsKKwl1MTYgbG9nX3J4X2luZm87CisKKwlzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nIHR4X3JpbmdbTUFYX1RYX1JJTkdTXTsKKwlzdHJ1Y3QgbWx4NF9lbl9yeF9yaW5nIHJ4X3JpbmdbTUFYX1JYX1JJTkdTXTsKKwlzdHJ1Y3QgbWx4NF9lbl9jcSB0eF9jcVtNQVhfVFhfUklOR1NdOworCXN0cnVjdCBtbHg0X2VuX2NxIHJ4X2NxW01BWF9SWF9SSU5HU107CisJc3RydWN0IHdvcmtfc3RydWN0IG1jYXN0X3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IG1hY190YXNrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgcmVmaWxsX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtzdGF0ZV90YXNrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfdGFzazsKKwlzdHJ1Y3QgbWx4NF9lbl9wZXJmX3N0YXRzIHBzdGF0czsKKwlzdHJ1Y3QgbWx4NF9lbl9wa3Rfc3RhdHMgcGtzdGF0czsKKwlzdHJ1Y3QgbWx4NF9lbl9wb3J0X3N0YXRzIHBvcnRfc3RhdHM7CisJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OworCXN0cnVjdCBtbHg0X2VuX3N0YXRfb3V0X21ib3ggaHdfc3RhdHM7Cit9OworCisKK3ZvaWQgbWx4NF9lbl9kZXN0cm95X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBtbHg0X2VuX2luaXRfbmV0ZGV2KHN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiwgaW50IHBvcnQsCisJCQlzdHJ1Y3QgbWx4NF9lbl9wb3J0X3Byb2ZpbGUgKnByb2YpOworCitpbnQgbWx4NF9lbl9nZXRfcHJvZmlsZShzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYpOworCitpbnQgbWx4NF9lbl9jcmVhdGVfY3Eoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IG1seDRfZW5fY3EgKmNxLAorCQkgICAgICBpbnQgZW50cmllcywgaW50IHJpbmcsIGVudW0gY3FfdHlwZSBtb2RlKTsKK3ZvaWQgbWx4NF9lbl9kZXN0cm95X2NxKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX2NxICpjcSk7CitpbnQgbWx4NF9lbl9hY3RpdmF0ZV9jcShzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LCBzdHJ1Y3QgbWx4NF9lbl9jcSAqY3EpOwordm9pZCBtbHg0X2VuX2RlYWN0aXZhdGVfY3Eoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IG1seDRfZW5fY3EgKmNxKTsKK2ludCBtbHg0X2VuX3NldF9jcV9tb2RlcihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LCBzdHJ1Y3QgbWx4NF9lbl9jcSAqY3EpOworaW50IG1seDRfZW5fYXJtX2NxKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX2NxICpjcSk7CisKK3ZvaWQgbWx4NF9lbl9wb2xsX3R4X2NxKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIG1seDRfZW5fdHhfaXJxKHN0cnVjdCBtbHg0X2NxICptY3EpOworaW50IG1seDRfZW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworaW50IG1seDRfZW5fY3JlYXRlX3R4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IG1seDRfZW5fdHhfcmluZyAqcmluZywKKwkJCSAgIHUzMiBzaXplLCB1MTYgc3RyaWRlKTsKK3ZvaWQgbWx4NF9lbl9kZXN0cm95X3R4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IG1seDRfZW5fdHhfcmluZyAqcmluZyk7CitpbnQgbWx4NF9lbl9hY3RpdmF0ZV90eF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcsCisJCQkgICAgIGludCBjcSwgaW50IHNycW4pOwordm9pZCBtbHg0X2VuX2RlYWN0aXZhdGVfdHhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcpOworCitpbnQgbWx4NF9lbl9jcmVhdGVfcnhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZywKKwkJCSAgIHUzMiBzaXplLCB1MTYgc3RyaWRlKTsKK3ZvaWQgbWx4NF9lbl9kZXN0cm95X3J4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZyk7CitpbnQgbWx4NF9lbl9hY3RpdmF0ZV9yeF9yaW5ncyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KTsKK3ZvaWQgbWx4NF9lbl9kZWFjdGl2YXRlX3J4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgbWx4NF9lbl9yeF9yaW5nICpyaW5nKTsKK2ludCBtbHg0X2VuX3Byb2Nlc3NfcnhfY3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IG1seDRfZW5fY3EgKmNxLAorCQkJICBpbnQgYnVkZ2V0KTsKK2ludCBtbHg0X2VuX3BvbGxfcnhfY3Eoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKK3ZvaWQgbWx4NF9lbl9maWxsX3FwX2NvbnRleHQoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgaW50IHNpemUsIGludCBzdHJpZGUsCisJCQkgICAgIGludCBpc190eCwgaW50IHJzcywgaW50IHFwbiwgaW50IGNxbiwgaW50IHNycW4sCisJCQkgICAgIHN0cnVjdCBtbHg0X3FwX2NvbnRleHQgKmNvbnRleHQpOworaW50IG1seDRfZW5fbWFwX2J1ZmZlcihzdHJ1Y3QgbWx4NF9idWYgKmJ1Zik7Cit2b2lkIG1seDRfZW5fdW5tYXBfYnVmZmVyKHN0cnVjdCBtbHg0X2J1ZiAqYnVmKTsKKwordm9pZCBtbHg0X2VuX2NhbGNfcnhfYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBtbHg0X2VuX3NldF9kZWZhdWx0X3Jzc19tYXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IG1seDRfZW5fcnNzX21hcCAqcnNzX21hcCwKKwkJCQkgaW50IG51bV9lbnRyaWVzLCBpbnQgbnVtX3JpbmdzKTsKK3ZvaWQgbWx4NF9lbl9zZXRfcHJpb19tYXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgdTE2ICpwcmlvX21hcCwgdTMyIHJpbmdfbnVtKTsKK2ludCBtbHg0X2VuX2NvbmZpZ19yc3Nfc3RlZXIoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdik7Cit2b2lkIG1seDRfZW5fcmVsZWFzZV9yc3Nfc3RlZXIoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdik7CitpbnQgbWx4NF9lbl9mcmVlX3R4X2J1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nKTsKK3ZvaWQgbWx4NF9lbl9yeF9yZWZpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgbWx4NF9lbl9yeF9pcnEoc3RydWN0IG1seDRfY3EgKm1jcSk7CisKK2ludCBtbHg0X1NFVF9NQ0FTVF9GTFRSKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBwb3J0LCB1NjQgbWFjLCB1NjQgY2xlYXIsIHU4IG1vZGUpOworaW50IG1seDRfU0VUX1ZMQU5fRkxUUihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggcG9ydCwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCk7CitpbnQgbWx4NF9TRVRfUE9SVF9nZW5lcmFsKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBwb3J0LCBpbnQgbXR1LAorCQkJICB1OCBwcHR4LCB1OCBwZmN0eCwgdTggcHByeCwgdTggcGZjcngpOworaW50IG1seDRfU0VUX1BPUlRfcXBuX2NhbGMoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU4IHBvcnQsIHUzMiBiYXNlX3FwbiwKKwkJCSAgIHU4IHByb21pc2MpOworCitpbnQgbWx4NF9lbl9EVU1QX0VUSF9TVEFUUyhzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYsIHU4IHBvcnQsIHU4IHJlc2V0KTsKKworLyoKKyAqIEdsb2JhbHMKKyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg0X2VuX2V0aHRvb2xfb3BzOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21yLmMgYi9kcml2ZXJzL25ldC9tbHg0L21yLmMKaW5kZXggZDFkZDViNC4uMGNhZjc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tci5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbXIuYwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJaW50IGVycjsKIAogCWVyciA9IG1seDRfYml0bWFwX2luaXQoJm1yX3RhYmxlLT5tcHRfYml0bWFwLCBkZXYtPmNhcHMubnVtX21wdHMsCi0JCQkgICAgICAgfjAsIGRldi0+Y2Fwcy5yZXNlcnZlZF9tcndzKTsKKwkJCSAgICAgICB+MCwgZGV2LT5jYXBzLnJlc2VydmVkX21yd3MsIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvcGQuYyBiL2RyaXZlcnMvbmV0L21seDQvcGQuYwppbmRleCBhYTYxNjg5Li4yNmQxYTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L3BkLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9wZC5jCkBAIC02Miw3ICs2Miw3IEBACiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwogCiAJcmV0dXJuIG1seDRfYml0bWFwX2luaXQoJnByaXYtPnBkX2JpdG1hcCwgZGV2LT5jYXBzLm51bV9wZHMsCi0JCQkJKDEgPDwgMjQpIC0gMSwgZGV2LT5jYXBzLnJlc2VydmVkX3Bkcyk7CisJCQkJKDEgPDwgMjQpIC0gMSwgZGV2LT5jYXBzLnJlc2VydmVkX3BkcywgMCk7CiB9CiAKIHZvaWQgbWx4NF9jbGVhbnVwX3BkX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAKIAlyZXR1cm4gbWx4NF9iaXRtYXBfaW5pdCgmbWx4NF9wcml2KGRldiktPnVhcl90YWJsZS5iaXRtYXAsCiAJCQkJZGV2LT5jYXBzLm51bV91YXJzLCBkZXYtPmNhcHMubnVtX3VhcnMgLSAxLAotCQkJCW1heCgxMjgsIGRldi0+Y2Fwcy5yZXNlcnZlZF91YXJzKSk7CisJCQkJbWF4KDEyOCwgZGV2LT5jYXBzLnJlc2VydmVkX3VhcnMpLCAwKTsKIH0KIAogdm9pZCBtbHg0X2NsZWFudXBfdWFyX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMgYi9kcml2ZXJzL25ldC9tbHg0L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmZkYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisKKyNpbmNsdWRlICJtbHg0LmgiCisKKyNkZWZpbmUgTUxYNF9NQUNfVkFMSUQJCSgxdWxsIDw8IDYzKQorI2RlZmluZSBNTFg0X01BQ19NQVNLCQkweGZmZmZmZmZmZmZmZlVMTAorCisjZGVmaW5lIE1MWDRfVkxBTl9WQUxJRAkJKDF1IDw8IDMxKQorI2RlZmluZSBNTFg0X1ZMQU5fTUFTSwkJMHhmZmYKKwordm9pZCBtbHg0X2luaXRfbWFjX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tYWNfdGFibGUgKnRhYmxlKQoreworCWludCBpOworCisJbXV0ZXhfaW5pdCgmdGFibGUtPm11dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9NQVhfTUFDX05VTTsgaSsrKSB7CisJCXRhYmxlLT5lbnRyaWVzW2ldID0gMDsKKwkJdGFibGUtPnJlZnNbaV0JID0gMDsKKwl9CisJdGFibGUtPm1heCAgID0gMSA8PCBkZXYtPmNhcHMubG9nX251bV9tYWNzOworCXRhYmxlLT50b3RhbCA9IDA7Cit9CisKK3ZvaWQgbWx4NF9pbml0X3ZsYW5fdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X3ZsYW5fdGFibGUgKnRhYmxlKQoreworCWludCBpOworCisJbXV0ZXhfaW5pdCgmdGFibGUtPm11dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9NQVhfVkxBTl9OVU07IGkrKykgeworCQl0YWJsZS0+ZW50cmllc1tpXSA9IDA7CisJCXRhYmxlLT5yZWZzW2ldCSA9IDA7CisJfQorCXRhYmxlLT5tYXggICA9IDEgPDwgZGV2LT5jYXBzLmxvZ19udW1fdmxhbnM7CisJdGFibGUtPnRvdGFsID0gMDsKK30KKworc3RhdGljIGludCBtbHg0X3NldF9wb3J0X21hY190YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggcG9ydCwKKwkJCQkgICBfX2JlNjQgKmVudHJpZXMpCit7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisJdTMyIGluX21vZDsKKwlpbnQgZXJyOworCisJbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKworCW1lbWNweShtYWlsYm94LT5idWYsIGVudHJpZXMsIE1MWDRfTUFDX1RBQkxFX1NJWkUpOworCisJaW5fbW9kID0gTUxYNF9TRVRfUE9SVF9NQUNfVEFCTEUgPDwgOCB8IHBvcnQ7CisJZXJyID0gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIGluX21vZCwgMSwgTUxYNF9DTURfU0VUX1BPUlQsCisJCSAgICAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0IpOworCisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IG1seDRfcmVnaXN0ZXJfbWFjKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBwb3J0LCB1NjQgbWFjLCBpbnQgKmluZGV4KQoreworCXN0cnVjdCBtbHg0X21hY190YWJsZSAqdGFibGUgPSAmbWx4NF9wcml2KGRldiktPnBvcnRbcG9ydF0ubWFjX3RhYmxlOworCWludCBpLCBlcnIgPSAwOworCWludCBmcmVlID0gLTE7CisKKwltbHg0X2RiZyhkZXYsICJSZWdpc3RlcmluZyBNQUM6IDB4JWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWFjKTsKKwltdXRleF9sb2NrKCZ0YWJsZS0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBNTFg0X01BWF9NQUNfTlVNIC0gMTsgaSsrKSB7CisJCWlmIChmcmVlIDwgMCAmJiAhdGFibGUtPnJlZnNbaV0pIHsKKwkJCWZyZWUgPSBpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAobWFjID09IChNTFg0X01BQ19NQVNLICYgYmU2NF90b19jcHUodGFibGUtPmVudHJpZXNbaV0pKSkgeworCQkJLyogTUFDIGFscmVhZHkgcmVnaXN0ZXJlZCwgaW5jcmVhc2UgcmVmZXJuY2UgY291bnQgKi8KKwkJCSppbmRleCA9IGk7CisJCQkrK3RhYmxlLT5yZWZzW2ldOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJbWx4NF9kYmcoZGV2LCAiRnJlZSBNQUMgaW5kZXggaXMgJWRcbiIsIGZyZWUpOworCisJaWYgKHRhYmxlLT50b3RhbCA9PSB0YWJsZS0+bWF4KSB7CisJCS8qIE5vIGZyZWUgbWFjIGVudHJpZXMgKi8KKwkJZXJyID0gLUVOT1NQQzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUmVnaXN0ZXIgbmV3IE1BQyAqLworCXRhYmxlLT5yZWZzW2ZyZWVdID0gMTsKKwl0YWJsZS0+ZW50cmllc1tmcmVlXSA9IGNwdV90b19iZTY0KG1hYyB8IE1MWDRfTUFDX1ZBTElEKTsKKworCWVyciA9IG1seDRfc2V0X3BvcnRfbWFjX3RhYmxlKGRldiwgcG9ydCwgdGFibGUtPmVudHJpZXMpOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCBhZGRpbmcgTUFDOiAweCVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIG1hYyk7CisJCXRhYmxlLT5yZWZzW2ZyZWVdID0gMDsKKwkJdGFibGUtPmVudHJpZXNbZnJlZV0gPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwkqaW5kZXggPSBmcmVlOworCSsrdGFibGUtPnRvdGFsOworb3V0OgorCW11dGV4X3VubG9jaygmdGFibGUtPm11dGV4KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9yZWdpc3Rlcl9tYWMpOworCit2b2lkIG1seDRfdW5yZWdpc3Rlcl9tYWMoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU4IHBvcnQsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbWx4NF9tYWNfdGFibGUgKnRhYmxlID0gJm1seDRfcHJpdihkZXYpLT5wb3J0W3BvcnRdLm1hY190YWJsZTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5tdXRleCk7CisJaWYgKCF0YWJsZS0+cmVmc1tpbmRleF0pIHsKKwkJbWx4NF93YXJuKGRldiwgIk5vIE1BQyBlbnRyeSBmb3IgaW5kZXggJWRcbiIsIGluZGV4KTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgtLXRhYmxlLT5yZWZzW2luZGV4XSkgeworCQltbHg0X3dhcm4oZGV2LCAiSGF2ZSBtb3JlIHJlZmVyZW5jZXMgZm9yIGluZGV4ICVkLCIKKwkJCSAgIm5vIG5lZWQgdG8gbW9kaWZ5IE1BQyB0YWJsZVxuIiwgaW5kZXgpOworCQlnb3RvIG91dDsKKwl9CisJdGFibGUtPmVudHJpZXNbaW5kZXhdID0gMDsKKwltbHg0X3NldF9wb3J0X21hY190YWJsZShkZXYsIHBvcnQsIHRhYmxlLT5lbnRyaWVzKTsKKwktLXRhYmxlLT50b3RhbDsKK291dDoKKwltdXRleF91bmxvY2soJnRhYmxlLT5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3VucmVnaXN0ZXJfbWFjKTsKKworc3RhdGljIGludCBtbHg0X3NldF9wb3J0X3ZsYW5fdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU4IHBvcnQsCisJCQkJICAgIF9fYmUzMiAqZW50cmllcykKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwl1MzIgaW5fbW9kOworCWludCBlcnI7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCisJbWVtY3B5KG1haWxib3gtPmJ1ZiwgZW50cmllcywgTUxYNF9WTEFOX1RBQkxFX1NJWkUpOworCWluX21vZCA9IE1MWDRfU0VUX1BPUlRfVkxBTl9UQUJMRSA8PCA4IHwgcG9ydDsKKwllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgaW5fbW9kLCAxLCBNTFg0X0NNRF9TRVRfUE9SVCwKKwkJICAgICAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQik7CisKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBtbHg0X3JlZ2lzdGVyX3ZsYW4oc3RydWN0IG1seDRfZGV2ICpkZXYsIHU4IHBvcnQsIHUxNiB2bGFuLCBpbnQgKmluZGV4KQoreworCXN0cnVjdCBtbHg0X3ZsYW5fdGFibGUgKnRhYmxlID0gJm1seDRfcHJpdihkZXYpLT5wb3J0W3BvcnRdLnZsYW5fdGFibGU7CisJaW50IGksIGVyciA9IDA7CisJaW50IGZyZWUgPSAtMTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5tdXRleCk7CisJZm9yIChpID0gTUxYNF9WTEFOX1JFR1VMQVI7IGkgPCBNTFg0X01BWF9WTEFOX05VTTsgaSsrKSB7CisJCWlmIChmcmVlIDwgMCAmJiAodGFibGUtPnJlZnNbaV0gPT0gMCkpIHsKKwkJCWZyZWUgPSBpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAodGFibGUtPnJlZnNbaV0gJiYKKwkJICAgICh2bGFuID09IChNTFg0X1ZMQU5fTUFTSyAmCisJCQkgICAgICBiZTMyX3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXSkpKSkgeworCQkJLyogVmxhbiBhbHJlYWR5IHJlZ2lzdGVyZWQsIGluY3JlYXNlIHJlZmVybmNlIGNvdW50ICovCisJCQkqaW5kZXggPSBpOworCQkJKyt0YWJsZS0+cmVmc1tpXTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKHRhYmxlLT50b3RhbCA9PSB0YWJsZS0+bWF4KSB7CisJCS8qIE5vIGZyZWUgdmxhbiBlbnRyaWVzICovCisJCWVyciA9IC1FTk9TUEM7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFJlZ2lzdGVyIG5ldyBNQUMgKi8KKwl0YWJsZS0+cmVmc1tmcmVlXSA9IDE7CisJdGFibGUtPmVudHJpZXNbZnJlZV0gPSBjcHVfdG9fYmUzMih2bGFuIHwgTUxYNF9WTEFOX1ZBTElEKTsKKworCWVyciA9IG1seDRfc2V0X3BvcnRfdmxhbl90YWJsZShkZXYsIHBvcnQsIHRhYmxlLT5lbnRyaWVzKTsKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQltbHg0X3dhcm4oZGV2LCAiRmFpbGVkIGFkZGluZyB2bGFuOiAldVxuIiwgdmxhbik7CisJCXRhYmxlLT5yZWZzW2ZyZWVdID0gMDsKKwkJdGFibGUtPmVudHJpZXNbZnJlZV0gPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwkqaW5kZXggPSBmcmVlOworCSsrdGFibGUtPnRvdGFsOworb3V0OgorCW11dGV4X3VubG9jaygmdGFibGUtPm11dGV4KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9yZWdpc3Rlcl92bGFuKTsKKwordm9pZCBtbHg0X3VucmVnaXN0ZXJfdmxhbihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggcG9ydCwgaW50IGluZGV4KQoreworCXN0cnVjdCBtbHg0X3ZsYW5fdGFibGUgKnRhYmxlID0gJm1seDRfcHJpdihkZXYpLT5wb3J0W3BvcnRdLnZsYW5fdGFibGU7CisKKwlpZiAoaW5kZXggPCBNTFg0X1ZMQU5fUkVHVUxBUikgeworCQltbHg0X3dhcm4oZGV2LCAiVHJ5aW5nIHRvIGZyZWUgc3BlY2lhbCB2bGFuIGluZGV4ICVkXG4iLCBpbmRleCk7CisJCXJldHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZ0YWJsZS0+bXV0ZXgpOworCWlmICghdGFibGUtPnJlZnNbaW5kZXhdKSB7CisJCW1seDRfd2FybihkZXYsICJObyB2bGFuIGVudHJ5IGZvciBpbmRleCAlZFxuIiwgaW5kZXgpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKC0tdGFibGUtPnJlZnNbaW5kZXhdKSB7CisJCW1seDRfZGJnKGRldiwgIkhhdmUgbW9yZSByZWZlcmVuY2VzIGZvciBpbmRleCAlZCwiCisJCQkgIm5vIG5lZWQgdG8gbW9kaWZ5IHZsYW4gdGFibGVcbiIsIGluZGV4KTsKKwkJZ290byBvdXQ7CisJfQorCXRhYmxlLT5lbnRyaWVzW2luZGV4XSA9IDA7CisJbWx4NF9zZXRfcG9ydF92bGFuX3RhYmxlKGRldiwgcG9ydCwgdGFibGUtPmVudHJpZXMpOworCS0tdGFibGUtPnRvdGFsOworb3V0OgorCW11dGV4X3VubG9jaygmdGFibGUtPm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfdW5yZWdpc3Rlcl92bGFuKTsKKworaW50IG1seDRfU0VUX1BPUlQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU4IHBvcnQpCit7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisJaW50IGVycjsKKwl1OCBpc19ldGggPSBkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID09IE1MWDRfUE9SVF9UWVBFX0VUSDsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisKKwltZW1zZXQobWFpbGJveC0+YnVmLCAwLCAyNTYpOworCWlmIChpc19ldGgpIHsKKwkJKCh1OCAqKSBtYWlsYm94LT5idWYpWzNdID0gNjsKKwkJKChfX2JlMTYgKikgbWFpbGJveC0+YnVmKVs0XSA9IGNwdV90b19iZTE2KDEgPDwgMTUpOworCQkoKF9fYmUxNiAqKSBtYWlsYm94LT5idWYpWzZdID0gY3B1X3RvX2JlMTYoMSA8PCAxNSk7CisJfQorCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCBwb3J0LCBpc19ldGgsIE1MWDRfQ01EX1NFVF9QT1JULAorCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3FwLmMgYi9kcml2ZXJzL25ldC9tbHg0L3FwLmMKaW5kZXggYzQ5YTg2MC4uMWM1NjVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvcXAuYwpAQCAtMTQ3LDE5ICsxNDcsNDIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1seDRfcXBfbW9kaWZ5KTsKIAotaW50IG1seDRfcXBfYWxsb2Moc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBzcXBuLCBzdHJ1Y3QgbWx4NF9xcCAqcXApCitpbnQgbWx4NF9xcF9yZXNlcnZlX3JhbmdlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgY250LCBpbnQgYWxpZ24sIGludCAqYmFzZSkKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfcXBfdGFibGUgKnFwX3RhYmxlID0gJnByaXYtPnFwX3RhYmxlOworCWludCBxcG47CisKKwlxcG4gPSBtbHg0X2JpdG1hcF9hbGxvY19yYW5nZSgmcXBfdGFibGUtPmJpdG1hcCwgY250LCBhbGlnbik7CisJaWYgKHFwbiA9PSAtMSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqYmFzZSA9IHFwbjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfcXBfcmVzZXJ2ZV9yYW5nZSk7CisKK3ZvaWQgbWx4NF9xcF9yZWxlYXNlX3JhbmdlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgYmFzZV9xcG4sIGludCBjbnQpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X3FwX3RhYmxlICpxcF90YWJsZSA9ICZwcml2LT5xcF90YWJsZTsKKwlpZiAoYmFzZV9xcG4gPCBkZXYtPmNhcHMuc3FwX3N0YXJ0ICsgOCkKKwkJcmV0dXJuOworCisJbWx4NF9iaXRtYXBfZnJlZV9yYW5nZSgmcXBfdGFibGUtPmJpdG1hcCwgYmFzZV9xcG4sIGNudCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3FwX3JlbGVhc2VfcmFuZ2UpOworCitpbnQgbWx4NF9xcF9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHFwbiwgc3RydWN0IG1seDRfcXAgKnFwKQogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWx4NF9xcF90YWJsZSAqcXBfdGFibGUgPSAmcHJpdi0+cXBfdGFibGU7CiAJaW50IGVycjsKIAotCWlmIChzcXBuKQotCQlxcC0+cXBuID0gc3FwbjsKLQllbHNlIHsKLQkJcXAtPnFwbiA9IG1seDRfYml0bWFwX2FsbG9jKCZxcF90YWJsZS0+Yml0bWFwKTsKLQkJaWYgKHFwLT5xcG4gPT0gLTEpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCFxcG4pCisJCXJldHVybiAtRUlOVkFMOworCisJcXAtPnFwbiA9IHFwbjsKIAogCWVyciA9IG1seDRfdGFibGVfZ2V0KGRldiwgJnFwX3RhYmxlLT5xcF90YWJsZSwgcXAtPnFwbik7CiAJaWYgKGVycikKQEAgLTIwOCw5ICsyMzEsNiBAQAogCW1seDRfdGFibGVfcHV0KGRldiwgJnFwX3RhYmxlLT5xcF90YWJsZSwgcXAtPnFwbik7CiAKIGVycl9vdXQ6Ci0JaWYgKCFzcXBuKQotCQltbHg0X2JpdG1hcF9mcmVlKCZxcF90YWJsZS0+Yml0bWFwLCBxcC0+cXBuKTsKLQogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3FwX2FsbG9jKTsKQEAgLTIzOSw5ICsyNTksNiBAQAogCW1seDRfdGFibGVfcHV0KGRldiwgJnFwX3RhYmxlLT5hbHRjX3RhYmxlLCBxcC0+cXBuKTsKIAltbHg0X3RhYmxlX3B1dChkZXYsICZxcF90YWJsZS0+YXV4Y190YWJsZSwgcXAtPnFwbik7CiAJbWx4NF90YWJsZV9wdXQoZGV2LCAmcXBfdGFibGUtPnFwX3RhYmxlLCBxcC0+cXBuKTsKLQotCWlmIChxcC0+cXBuID49IGRldi0+Y2Fwcy5zcXBfc3RhcnQgKyA4KQotCQltbHg0X2JpdG1hcF9mcmVlKCZxcF90YWJsZS0+Yml0bWFwLCBxcC0+cXBuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1seDRfcXBfZnJlZSk7CiAKQEAgLTI1NSw2ICsyNzIsNyBAQAogewogCXN0cnVjdCBtbHg0X3FwX3RhYmxlICpxcF90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+cXBfdGFibGU7CiAJaW50IGVycjsKKwlpbnQgcmVzZXJ2ZWRfZnJvbV90b3AgPSAwOwogCiAJc3Bpbl9sb2NrX2luaXQoJnFwX3RhYmxlLT5sb2NrKTsKIAlJTklUX1JBRElYX1RSRUUoJmRldi0+cXBfdGFibGVfdHJlZSwgR0ZQX0FUT01JQyk7CkBAIC0yNjQsOSArMjgyLDQwIEBACiAJICogYmxvY2sgb2Ygc3BlY2lhbCBRUHMgbXVzdCBiZSBhbGlnbmVkIHRvIGEgbXVsdGlwbGUgb2YgOCwgc28KIAkgKiByb3VuZCB1cC4KIAkgKi8KLQlkZXYtPmNhcHMuc3FwX3N0YXJ0ID0gQUxJR04oZGV2LT5jYXBzLnJlc2VydmVkX3FwcywgOCk7CisJZGV2LT5jYXBzLnNxcF9zdGFydCA9CisJCUFMSUdOKGRldi0+Y2Fwcy5yZXNlcnZlZF9xcHNfY250W01MWDRfUVBfUkVHSU9OX0ZXXSwgOCk7CisKKwl7CisJCWludCBzb3J0W01MWDRfTlVNX1FQX1JFR0lPTl07CisJCWludCBpLCBqLCB0bXA7CisJCWludCBsYXN0X2Jhc2UgPSBkZXYtPmNhcHMubnVtX3FwczsKKworCQlmb3IgKGkgPSAxOyBpIDwgTUxYNF9OVU1fUVBfUkVHSU9OOyArK2kpCisJCQlzb3J0W2ldID0gaTsKKworCQlmb3IgKGkgPSBNTFg0X05VTV9RUF9SRUdJT047IGkgPiAwOyAtLWkpIHsKKwkJCWZvciAoaiA9IDI7IGogPCBpOyArK2opIHsKKwkJCQlpZiAoZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbc29ydFtqXV0gPgorCQkJCSAgICBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2NudFtzb3J0W2ogLSAxXV0pIHsKKwkJCQkJdG1wICAgICAgICAgICAgID0gc29ydFtqXTsKKwkJCQkJc29ydFtqXSAgICAgICAgID0gc29ydFtqIC0gMV07CisJCQkJCXNvcnRbaiAtIDFdICAgICA9IHRtcDsKKwkJCQl9CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAxOyBpIDwgTUxYNF9OVU1fUVBfUkVHSU9OOyArK2kpIHsKKwkJCWxhc3RfYmFzZSAtPSBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2NudFtzb3J0W2ldXTsKKwkJCWRldi0+Y2Fwcy5yZXNlcnZlZF9xcHNfYmFzZVtzb3J0W2ldXSA9IGxhc3RfYmFzZTsKKwkJCXJlc2VydmVkX2Zyb21fdG9wICs9CisJCQkJZGV2LT5jYXBzLnJlc2VydmVkX3Fwc19jbnRbc29ydFtpXV07CisJCX0KKworCX0KKwogCWVyciA9IG1seDRfYml0bWFwX2luaXQoJnFwX3RhYmxlLT5iaXRtYXAsIGRldi0+Y2Fwcy5udW1fcXBzLAotCQkJICAgICAgICgxIDw8IDI0KSAtIDEsIGRldi0+Y2Fwcy5zcXBfc3RhcnQgKyA4KTsKKwkJCSAgICAgICAoMSA8PCAyMykgLSAxLCBkZXYtPmNhcHMuc3FwX3N0YXJ0ICsgOCwKKwkJCSAgICAgICByZXNlcnZlZF9mcm9tX3RvcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9zcnEuYyBiL2RyaXZlcnMvbmV0L21seDQvc3JxLmMKaW5kZXggNTMzZWI2ZC4uZmU5ZjIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9zcnEuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L3NycS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlJTklUX1JBRElYX1RSRUUoJnNycV90YWJsZS0+dHJlZSwgR0ZQX0FUT01JQyk7CiAKIAllcnIgPSBtbHg0X2JpdG1hcF9pbml0KCZzcnFfdGFibGUtPmJpdG1hcCwgZGV2LT5jYXBzLm51bV9zcnFzLAotCQkJICAgICAgIGRldi0+Y2Fwcy5udW1fc3JxcyAtIDEsIGRldi0+Y2Fwcy5yZXNlcnZlZF9zcnFzKTsKKwkJCSAgICAgICBkZXYtPmNhcHMubnVtX3NycXMgLSAxLCBkZXYtPmNhcHMucmVzZXJ2ZWRfc3JxcywgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggNmRjZTkwMS4uYjE1NTZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC03NSw3ICs3NSw3IEBACiAjaW5jbHVkZSAibXlyaTEwZ2VfbWNwLmgiCiAjaW5jbHVkZSAibXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCIKIAotI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS40LjMtMS4zNjkiCisjZGVmaW5lIE1ZUkkxMEdFX1ZFUlNJT05fU1RSICIxLjQuMy0xLjM3MSIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNeXJpY29tIDEwRyBkcml2ZXIgKDEwR2JFKSIpOwogTU9EVUxFX0FVVEhPUigiTWFpbnRhaW5lcjogaGVscEBteXJpLmNvbSIpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJZG1hX2FkZHJfdCBmd19zdGF0c19idXM7CiAJaW50IHdhdGNoZG9nX3R4X2RvbmU7CiAJaW50IHdhdGNoZG9nX3R4X3JlcTsKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJaW50IGNhY2hlZF9kY2FfdGFnOwogCWludCBjcHU7CiAJX19iZTMyIF9faW9tZW0gKmRjYV90YWc7CkBAIC0yMjAsNyArMjIwLDcgQEAKIAlpbnQgbXNpX2VuYWJsZWQ7CiAJaW50IG1zaXhfZW5hYmxlZDsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF92ZWN0b3JzOwotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpbnQgZGNhX2VuYWJsZWQ7CiAjZW5kaWYKIAl1MzIgbGlua19zdGF0ZTsKQEAgLTkwMiw3ICs5MDIsNyBAQAogCXN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3M7CiAJaW50IGksIHN0YXR1czsKIAlzaXplX3QgYnl0ZXM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCXVuc2lnbmVkIGxvbmcgZGNhX3RhZ19vZmY7CiAjZW5kaWYKIApAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAl9CiAJcHV0X2JlMzIoaHRvbmwobWdwLT5pbnRyX2NvYWxfZGVsYXkpLCBtZ3AtPmludHJfY29hbF9kZWxheV9wdHIpOwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfRENBX09GRlNFVCwgJmNtZCwgMCk7CiAJZGNhX3RhZ19vZmYgPSBjbWQuZGF0YTA7CiAJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiBzdGF0aWMgdm9pZAogbXlyaTEwZ2Vfd3JpdGVfZGNhKHN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3MsIGludCBjcHUsIGludCB0YWcpCiB7CkBAIC0xNTA1LDcgKzE1MDUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBzcy0+bWdwLT5kZXY7CiAJaW50IHdvcmtfZG9uZTsKIAotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpZiAoc3MtPm1ncC0+ZGNhX2VuYWJsZWQpCiAJCW15cmkxMGdlX3VwZGF0ZV9kY2Eoc3MpOwogI2VuZGlmCkBAIC0xNzM2LDcgKzE3MzYsNyBAQAogCSJ0eF9ib3VuZGFyeSIsICJXQyIsICJpcnEiLCAiTVNJIiwgIk1TSVgiLAogCSJyZWFkX2RtYV9id19NQnMiLCAid3JpdGVfZG1hX2J3X01CcyIsICJyZWFkX3dyaXRlX2RtYV9id19NQnMiLAogCSJzZXJpYWxfbnVtYmVyIiwgIndhdGNoZG9nX3Jlc2V0cyIsCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCSJkY2FfY2FwYWJsZV9maXJtd2FyZSIsICJkY2FfZGV2aWNlX3ByZXNlbnQiLAogI2VuZGlmCiAJImxpbmtfY2hhbmdlcyIsICJsaW5rX3VwIiwgImRyb3BwZWRfbGlua19vdmVyZmxvdyIsCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5yZWFkX3dyaXRlX2RtYTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+c2VyaWFsX251bWJlcjsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+d2F0Y2hkb2dfcmVzZXRzOwotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KShtZ3AtPnNzWzBdLmRjYV90YWcgIT0gTlVMTCk7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCkobWdwLT5kY2FfZW5hYmxlZCk7CiAjZW5kaWYKQEAgLTI0OTcsNiArMjQ5NywxMCBAQAogCXJldHVybiAwOwogCiBhYm9ydF93aXRoX3JpbmdzOgorCXdoaWxlIChzbGljZSkgeworCQlzbGljZS0tOworCQluYXBpX2Rpc2FibGUoJm1ncC0+c3Nbc2xpY2VdLm5hcGkpOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspCiAJCW15cmkxMGdlX2ZyZWVfcmluZ3MoJm1ncC0+c3NbaV0pOwogCkBAIC0zODQ0LDcgKzM4NDgsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgcmVzZXRcbiIpOwogCQlnb3RvIGFib3J0X3dpdGhfc2xpY2VzOwogCX0KLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJbXlyaTEwZ2Vfc2V0dXBfZGNhKG1ncCk7CiAjZW5kaWYKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgbWdwKTsKQEAgLTM5NDgsNyArMzk1Miw3IEBACiAJbmV0ZGV2ID0gbWdwLT5kZXY7CiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlteXJpMTBnZV90ZWFyZG93bl9kY2EobWdwKTsKICNlbmRpZgogCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCAwKTsKQEAgLTM5OTMsNyArMzk5Nyw3IEBACiAjZW5kaWYKIH07CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiBzdGF0aWMgaW50CiBteXJpMTBnZV9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnApCiB7CkBAIC00MDI0LDcgKzQwMjgsNyBAQAogCQkgICAgICAgbXlyaTEwZ2VfZHJpdmVyLm5hbWUsIG15cmkxMGdlX3Jzc19oYXNoKTsKIAkJbXlyaTEwZ2VfcnNzX2hhc2ggPSBNWEdFRldfUlNTX0hBU0hfVFlQRV9TUkNfUE9SVDsKIAl9Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWRjYV9yZWdpc3Rlcl9ub3RpZnkoJm15cmkxMGdlX2RjYV9ub3RpZmllcik7CiAjZW5kaWYKIAlpZiAobXlyaTEwZ2VfbWF4X3NsaWNlcyA+IE1ZUkkxMEdFX01BWF9TTElDRVMpCkBAIC00MDM3LDcgKzQwNDEsNyBAQAogCiBzdGF0aWMgX19leGl0IHZvaWQgbXlyaTEwZ2VfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJZGNhX3VucmVnaXN0ZXJfbm90aWZ5KCZteXJpMTBnZV9kY2Ffbm90aWZpZXIpOwogI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZteXJpMTBnZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL25ldC9wY21jaWEvS2NvbmZpZwppbmRleCBlOGY1NWQ4Li45YjhmNzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvS2NvbmZpZwpAQCAtMTExLDcgKzExMSw3IEBACiAKIGNvbmZpZyBQQ01DSUFfSUJNVFIKIAl0cmlzdGF0ZSAiSUJNIFBDTUNJQSB0b2tlbnJpbmcgYWRhcHRlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gSUJNVFIhPXkgJiYgVFIgJiYgITY0QklUCisJZGVwZW5kcyBvbiBJQk1UUiE9eSAmJiBUUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggdGhpcyB0eXBlIG9mIFRva2VuIFJpbmcgUENNQ0lBCiAJICBjYXJkIHRvIHlvdXIgY29tcHV0ZXIuIFlvdSB0aGVuIGFsc28gbmVlZCB0byBzYXkgWSB0byAiVG9rZW4gUmluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCAzODExNmY5Li5iYTJlMWM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKQEAgLTEzNzUsNyArMTM3NSw2IEBACiAJc3BpbmxvY2tfdCBhZGFwdGVyX2xvY2s7CiAJc3BpbmxvY2tfdCBod19sb2NrOwogCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKLQlzcGlubG9ja190IGxlZ2FjeV9sb2NrOwkvKiB1c2VkIGZvciBtYWludGFpbmluZyBsZWdhY3kgaW50ciBzeW5jICovCiAKIAkvKiBQQ0kgQnVzIFJlbGF0aXZlIFJlZ2lzdGVyIEFkZHJlc3NlcyAqLwogCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CkBAIC0xMzk5LDggKzEzOTgsNiBAQAogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2lfeF9lbnRyeTsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0IGludHJfY29udGV4dFtNQVhfUlhfUklOR1NdOwogCi0JaW50ICgqbGVnYWN5X2NoZWNrKSAoc3RydWN0IHFsX2FkYXB0ZXIgKik7Ci0KIAlpbnQgdHhfcmluZ19jb3VudDsJLyogT25lIHBlciBvbmxpbmUgQ1BVLiAqLwogCXUzMiByc3NfcmluZ19maXJzdF9jcV9pZDsvKiBpbmRleCBvZiBmaXJzdCBpbmJvdW5kIChyc3MpIHJ4X3JpbmcgKi8KIAl1MzIgcnNzX3JpbmdfY291bnQ7CS8qIE9uZSBwZXIgb25saW5lIENQVS4gICovCkBAIC0xNTAyLDcgKzE0OTksNyBAQAogdm9pZCBxbF9tcGlfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogaW50IHFsX3dhaXRfcmVnX3JkeShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyIGJpdCwgdTMyIGViaXQpOwogdm9pZCBxbF9xdWV1ZV9hc2ljX2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKLXZvaWQgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7Cit1MzIgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7CiB2b2lkIHFsX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgcWxfcmVhZF94Z21hY19yZWc2NChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTY0ICpkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggNGIyY2FhNi4uYjgzYTljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC01NzcsNDEgKzU3Nyw1MyBAQAogICogaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHdlIHF1ZXVlIGEgd29ya2VyIGFuZCBkZWNyZW1lbnRlZCBldmVyeXRpbWUKICAqIGEgd29ya2VyIGZpbmlzaGVzLiAgT25jZSBpdCBoaXRzIHplcm8gd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQuCiAgKi8KLXZvaWQgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cikKK3UzMiBxbF9lbmFibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiBpbnRyKQogewotCWlmIChsaWtlbHkodGVzdF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpKSkKKwl1MzIgdmFyID0gMDsKKwl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzID0gMDsKKwlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHggPSBxZGV2LT5pbnRyX2NvbnRleHQgKyBpbnRyOworCisJaWYgKGxpa2VseSh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykgJiYgaW50cikpIHsKKwkJLyogQWx3YXlzIGVuYWJsZSBpZiB3ZSdyZSBNU0lYIG11bHRpIGludGVycnVwdHMgYW5kCisJCSAqIGl0J3Mgbm90IHRoZSBkZWZhdWx0ICh6ZXJvZXRoKSBpbnRlcnJ1cHQuCisJCSAqLwogCQlxbF93cml0ZTMyKHFkZXYsIElOVFJfRU4sCi0JCQkgICBxZGV2LT5pbnRyX2NvbnRleHRbaW50cl0uaW50cl9lbl9tYXNrKTsKLQllbHNlIHsKLQkJaWYgKHFkZXYtPmxlZ2FjeV9jaGVjaykKLQkJCXNwaW5fbG9jaygmcWRldi0+bGVnYWN5X2xvY2spOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcWRldi0+aW50cl9jb250ZXh0W2ludHJdLmlycV9jbnQpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElOVFIsIEVSUiwgIkVuYWJsaW5nIGludGVycnVwdCAlZC5cbiIsCi0JCQkJaW50cik7Ci0JCQlxbF93cml0ZTMyKHFkZXYsIElOVFJfRU4sCi0JCQkJICAgcWRldi0+aW50cl9jb250ZXh0W2ludHJdLmludHJfZW5fbWFzayk7Ci0JCX0gZWxzZSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElOVFIsIEVSUiwKLQkJCQkiU2tpcCBlbmFibGUsIG90aGVyIHF1ZXVlKHMpIGFyZSBhY3RpdmUuXG4iKTsKLQkJfQotCQlpZiAocWRldi0+bGVnYWN5X2NoZWNrKQotCQkJc3Bpbl91bmxvY2soJnFkZXYtPmxlZ2FjeV9sb2NrKTsKKwkJCSAgIGN0eC0+aW50cl9lbl9tYXNrKTsKKwkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CisJCXJldHVybiB2YXI7CiAJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3R4LT5pcnFfY250KSkgeworCQlxbF93cml0ZTMyKHFkZXYsIElOVFJfRU4sCisJCQkgICBjdHgtPmludHJfZW5fbWFzayk7CisJCXZhciA9IHFsX3JlYWQzMihxZGV2LCBTVFMpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJcmV0dXJuIHZhcjsKIH0KIAogc3RhdGljIHUzMiBxbF9kaXNhYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cikKIHsKIAl1MzIgdmFyID0gMDsKKwl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOworCXN0cnVjdCBpbnRyX2NvbnRleHQgKmN0eDsKIAotCWlmIChsaWtlbHkodGVzdF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpKSkKLQkJZ290byBleGl0OwotCWVsc2UgaWYgKCFhdG9taWNfcmVhZCgmcWRldi0+aW50cl9jb250ZXh0W2ludHJdLmlycV9jbnQpKSB7CisJLyogSFcgZGlzYWJsZXMgZm9yIHVzIGlmIHdlJ3JlIE1TSVggbXVsdGkgaW50ZXJydXB0cyBhbmQKKwkgKiBpdCdzIG5vdCB0aGUgZGVmYXVsdCAoemVyb2V0aCkgaW50ZXJydXB0LgorCSAqLworCWlmIChsaWtlbHkodGVzdF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpICYmIGludHIpKQorCQlyZXR1cm4gMDsKKworCWN0eCA9IHFkZXYtPmludHJfY29udGV4dCArIGludHI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwlpZiAoIWF0b21pY19yZWFkKCZjdHgtPmlycV9jbnQpKSB7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9FTiwKLQkJCSAgIHFkZXYtPmludHJfY29udGV4dFtpbnRyXS5pbnRyX2Rpc19tYXNrKTsKKwkJY3R4LT5pbnRyX2Rpc19tYXNrKTsKIAkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CiAJfQotCWF0b21pY19pbmMoJnFkZXYtPmludHJfY29udGV4dFtpbnRyXS5pcnFfY250KTsKLWV4aXQ6CisJYXRvbWljX2luYygmY3R4LT5pcnFfY250KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CiAJcmV0dXJuIHZhcjsKIH0KIApAQCAtNjIzLDcgKzYzNSw5IEBACiAJCSAqIGFuZCBlbmFibGVzIG9ubHkgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLgogCQkgKiBTbyB3ZSBwcmVjaGFyZ2UgaXQgaGVyZS4KIAkJICovCi0JCWF0b21pY19zZXQoJnFkZXYtPmludHJfY29udGV4dFtpXS5pcnFfY250LCAxKTsKKwkJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykgfHwKKwkJCWkgPT0gMCkpCisJCQlhdG9taWNfc2V0KCZxZGV2LT5pbnRyX2NvbnRleHRbaV0uaXJxX2NudCwgMSk7CiAJCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCBpKTsKIAl9CiAKQEAgLTE3MjUsMTkgKzE3MzksNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotLyogV2UgY2hlY2sgaGVyZSB0byBzZWUgaWYgd2UncmUgYWxyZWFkeSBoYW5kbGluZyBhIGxlZ2FjeQotICogaW50ZXJydXB0LiAgSWYgd2UgYXJlLCB0aGVuIGl0IG11c3QgYmVsb25nIHRvIGFub3RoZXIKLSAqIGNoaXAgd2l0aCB3aGljaCB3ZSdyZSBzaGFyaW5nIHRoZSBpbnRlcnJ1cHQgbGluZS4KLSAqLwotaW50IHFsX2xlZ2FjeV9jaGVjayhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKLXsKLQlpbnQgZXJyOwotCXNwaW5fbG9jaygmcWRldi0+bGVnYWN5X2xvY2spOwotCWVyciA9IGF0b21pY19yZWFkKCZxZGV2LT5pbnRyX2NvbnRleHRbMF0uaXJxX2NudCk7Ci0Jc3Bpbl91bmxvY2soJnFkZXYtPmxlZ2FjeV9sb2NrKTsKLQlyZXR1cm4gZXJyOwotfQotCiAvKiBUaGlzIGhhbmRsZXMgYSBmYXRhbCBlcnJvciwgTVBJIGFjdGl2aXR5LCBhbmQgdGhlIGRlZmF1bHQKICAqIHJ4X3JpbmcgaW4gYW4gTVNJLVggbXVsdGlwbGUgdmVjdG9yIGVudmlyb25tZW50LgogICogSW4gTVNJL0xlZ2FjeSBlbnZpcm9ubWVudCBpdCBhbHNvIHByb2Nlc3MgdGhlIHJlc3Qgb2YKQEAgLTE3NTIsMTIgKzE3NTMsMTUgQEAKIAlpbnQgaTsKIAlpbnQgd29ya19kb25lID0gMDsKIAotCWlmIChxZGV2LT5sZWdhY3lfY2hlY2sgJiYgcWRldi0+bGVnYWN5X2NoZWNrKHFkZXYpKSB7Ci0JCVFQUklOVEsocWRldiwgSU5UUiwgSU5GTywgIkFscmVhZHkgYnVzeSwgbm90IG91ciBpbnRlcnJ1cHQuXG4iKTsKLQkJcmV0dXJuIElSUV9OT05FOwkvKiBOb3Qgb3VyIGludGVycnVwdCAqLworCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CisJaWYgKGF0b21pY19yZWFkKCZxZGV2LT5pbnRyX2NvbnRleHRbMF0uaXJxX2NudCkpIHsKKwkJUVBSSU5USyhxZGV2LCBJTlRSLCBERUJVRywgIlNoYXJlZCBJbnRlcnJ1cHQsIE5vdCBvdXJzIVxuIik7CisJCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOwogCX0KKwlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CiAKLQl2YXIgPSBxbF9yZWFkMzIocWRldiwgU1RTKTsKKwl2YXIgPSBxbF9kaXNhYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIGludHJfY29udGV4dC0+aW50cik7CiAKIAkvKgogCSAqIENoZWNrIGZvciBmYXRhbCBlcnJvci4KQEAgLTE4MjMsNiArMTgyNyw3IEBACiAJCQl9CiAJCX0KIAl9CisJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIGludHJfY29udGV4dC0+aW50cik7CiAJcmV0dXJuIHdvcmtfZG9uZSA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CiAKQEAgLTI3MDEsOCArMjcwNiw2IEBACiAJCX0KIAl9CiAJaXJxX3R5cGUgPSBMRUdfSVJROwotCXNwaW5fbG9ja19pbml0KCZxZGV2LT5sZWdhY3lfbG9jayk7Ci0JcWRldi0+bGVnYWN5X2NoZWNrID0gcWxfbGVnYWN5X2NoZWNrOwogCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJSdW5uaW5nIHdpdGggbGVnYWN5IGludGVycnVwdHMuXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggYzgyMWRhMi4uMmI0ZTk3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC04MSw2ICs4MSwxMCBAQAogI2RlZmluZSBSVEw4MTY5X1RYX1RJTUVPVVQJKDYqSFopCiAjZGVmaW5lIFJUTDgxNjlfUEhZX1RJTUVPVVQJKDEwKkhaKQogCisjZGVmaW5lIFJUTF9FRVBST01fU0lHCQljcHVfdG9fbGUzMigweDgxMjkpCisjZGVmaW5lIFJUTF9FRVBST01fU0lHX01BU0sJY3B1X3RvX2xlMzIoMHhmZmZmKQorI2RlZmluZSBSVExfRUVQUk9NX1NJR19BRERSCTB4MDAwMAorCiAvKiB3cml0ZS9yZWFkIE1NSU8gcmVnaXN0ZXIgKi8KICNkZWZpbmUgUlRMX1c4KHJlZywgdmFsOCkJd3JpdGViICgodmFsOCksIGlvYWRkciArIChyZWcpKQogI2RlZmluZSBSVExfVzE2KHJlZywgdmFsMTYpCXdyaXRldyAoKHZhbDE2KSwgaW9hZGRyICsgKHJlZykpCkBAIC0xOTQ0LDE0ICsxOTQ4LDE1IEBACiAJCQkJIHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBjaV9kZXY7Ci0JdTggY2ZnMTsKIAlpbnQgdnBkX2NhcDsKKwlfX2xlMzIgc2lnOwogCXU4IG1hY1s4XTsKLQlERUNMQVJFX01BQ19CVUYoYnVmKTsKKwl1OCBjZmcxOwogCiAJY2ZnMSA9IFJUTF9SOChDb25maWcxKTsKIAlpZiAoIShjZmcxICAmIFZQRCkpIHsKLQkJZHByaW50aygiVlBEIGFjY2VzcyBub3QgZW5hYmxlZCwgZW5hYmxpbmdcbiIpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJWUEQgYWNjZXNzIGRpc2FibGVkLCBlbmFibGluZ1xuIik7CiAJCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CiAJCVJUTF9XOChDb25maWcxLCBjZmcxIHwgVlBEKTsKIAkJUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfTG9jayk7CkBAIC0xOTYxLDcgKzE5NjYsMTYgQEAKIAlpZiAoIXZwZF9jYXApCiAJCXJldHVybjsKIAotCS8qIE1BQyBhZGRyZXNzIGlzIHN0b3JlZCBpbiBFRVBST00gYXQgb2Zmc2V0IDB4MGUKKwlpZiAocnRsX2VlcHJvbV9yZWFkKHBkZXYsIHZwZF9jYXAsIFJUTF9FRVBST01fU0lHX0FERFIsICZzaWcpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKChzaWcgJiBSVExfRUVQUk9NX1NJR19NQVNLKSAhPSBSVExfRUVQUk9NX1NJRykgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTWlzc2luZyBFRVBST00gc2lnbmF0dXJlOiAlMDh4XG4iLCBzaWcpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBNQUMgYWRkcmVzcyBpcyBzdG9yZWQgaW4gRUVQUk9NIGF0IG9mZnNldCAweDBlCiAJICogUmVhbHRlayBzYXlzOiAiVGhlIFZQRCBhZGRyZXNzIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBEV09SRC1hbGlnbmVkCiAJICogYWRkcmVzcyBhcyBkZWZpbmVkIGluIHRoZSBQQ0kgMi4yIFNwZWNpZmljYXRpb25zLCBidXQgdGhlIFZQRCBkYXRhCiAJICogaXMgYWx3YXlzIGNvbnNlY3V0aXZlIDQtYnl0ZSBkYXRhIHN0YXJ0aW5nIGZyb20gdGhlIFZQRCBhZGRyZXNzCkBAIC0xOTY5LDE0ICsxOTgzLDIyIEBACiAJICovCiAJaWYgKHJ0bF9lZXByb21fcmVhZChwZGV2LCB2cGRfY2FwLCAweDAwMGUsIChfX2xlMzIqKSZtYWNbMF0pIDwgMCB8fAogCSAgICBydGxfZWVwcm9tX3JlYWQocGRldiwgdnBkX2NhcCwgMHgwMDEyLCAoX19sZTMyKikmbWFjWzRdKSA8IDApIHsKLQkJZHByaW50aygiUmVhZGluZyBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTSBmYWlsZWRcbiIpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkgInJlYWRpbmcgTUFDIGFkZHJlc3MgZnJvbSBFRVBST00gZmFpbGVkXG4iKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCi0JZHByaW50aygiTUFDIGFkZHJlc3MgZm91bmQgaW4gRUVQUk9NOiAlc1xuIiwgcHJpbnRfbWFjKGJ1ZiwgbWFjKSk7CisJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKKwkJREVDTEFSRV9NQUNfQlVGKGJ1Zik7CiAKLQkvKiBXcml0ZSBNQUMgYWRkcmVzcyAqLwotCXJ0bF9yYXJfc2V0KHRwLCBtYWMpOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDIGFkZHJlc3MgZm91bmQgaW4gRUVQUk9NOiAlc1xuIiwKKwkJCSBwcmludF9tYWMoYnVmLCBtYWMpKTsKKwl9CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKQorCQlydGxfcmFyX3NldCh0cCwgbWFjKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggYjM5ZDFjYy4uYTI0YmI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTEyMDUsMTEgKzEyMDUsMTIgQEAKIAkJZGV2bm8gPSAwOwogCiAJbmRldi0+ZG1hID0gLTE7Ci0JbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAobmRldi0+aXJxIDwgMCkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJldCA8IDApIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CisJbmRldi0+aXJxID0gcmV0OwogCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczE5MC5jIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKaW5kZXggM2ZlMDE3Ni4uZTZlM2JmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzMTkwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKQEAgLTMxNyw2ICszMTcsNyBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZTsKIAl1MzIgZmVhdHVyZTsKIH0gbWlpX2NoaXBfdGFibGVbXSA9IHsKKwl7ICJBdGhlcm9zIFBIWSBBUjgwMTIiLCAgIHsgMHgwMDRkLCAweGQwMjAgfSwgTEFOLCAwIH0sCiAJeyAiQnJvYWRjb20gUEhZIEJDTTU0NjEiLCB7IDB4MDAyMCwgMHg2MGMwIH0sIExBTiwgRl9QSFlfQkNNNTQ2MSB9LAogCXsgIkJyb2FkY29tIFBIWSBBQzEzMSIsICAgeyAweDAxNDMsIDB4YmM3MCB9LCBMQU4sIDAgfSwKIAl7ICJBZ2VyZSBQSFkgRVQxMTAxQiIsICAgIHsgMHgwMjgyLCAweGYwMTAgfSwgTEFOLCAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggOGFhNzQ2MC4uZjU5Yzc3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMTU1LDIzICsxNTUsMTcgQEAKIC8qIHRoaXMgZW5hYmxlcyBhbiBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCiAjZGVmaW5lIFNNQ19FTkFCTEVfSU5UKGxwLCB4KSBkbyB7CQkJXAogCXVuc2lnbmVkIGludCAgX19tYXNrOwkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQlcCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJCVwKIAlfX21hc2sgPSBTTUNfR0VUX0lOVF9FTigobHApKTsJCQlcCiAJX19tYXNrIHw9ICh4KTsJCQkJCVwKIAlTTUNfU0VUX0lOVF9FTigobHApLCBfX21hc2spOwkJCVwKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgX19mbGFncyk7CVwKIH0gd2hpbGUgKDApCiAKIC8qIHRoaXMgZGlzYWJsZXMgYW4gaW50ZXJydXB0IGZyb20gdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCiAjZGVmaW5lIFNNQ19ESVNBQkxFX0lOVChscCwgeCkgZG8gewkJCVwKIAl1bnNpZ25lZCBpbnQgIF9fbWFzazsJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJXAotCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgX19mbGFncyk7CQlcCiAJX19tYXNrID0gU01DX0dFVF9JTlRfRU4oKGxwKSk7CQkJXAogCV9fbWFzayAmPSB+KHgpOwkJCQkJXAogCVNNQ19TRVRfSU5UX0VOKChscCksIF9fbWFzayk7CQkJXAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJXAogfSB3aGlsZSAoMCkKIAogLyoKQEAgLTE4MCw3ICsxNzQsNyBAQAogc3RhdGljIHZvaWQgc21jOTExeF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHJlZywgdGltZW91dD0wLCByZXNldHM9MTsKKwl1bnNpZ25lZCBpbnQgcmVnLCB0aW1lb3V0PTAsIHJlc2V0cz0xLCBpcnFfY2ZnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fZnVuY19fKTsKQEAgLTI1Miw3ICsyNDYsMTIgQEAKIAkgKiBEZWFzc2VydCBJUlEgZm9yIDEqMTB1cyBmb3IgZWRnZSB0eXBlIGludGVycnVwdHMKIAkgKiBhbmQgZHJpdmUgSVJRIHBpbiBwdXNoLXB1bGwKIAkgKi8KLQlTTUNfU0VUX0lSUV9DRkcobHAsICgxIDw8IDI0KSB8IElOVF9DRkdfSVJRX0VOXyB8IElOVF9DRkdfSVJRX1RZUEVfKTsKKwlpcnFfY2ZnID0gKDEgPDwgMjQpIHwgSU5UX0NGR19JUlFfRU5fIHwgSU5UX0NGR19JUlFfVFlQRV87CisjaWZkZWYgU01DX0RZTkFNSUNfQlVTX0NPTkZJRworCWlmIChscC0+Y2ZnLmlycV9wb2xhcml0eSkKKwkJaXJxX2NmZyB8PSBJTlRfQ0ZHX0lSUV9QT0xfOworI2VuZGlmCisJU01DX1NFVF9JUlFfQ0ZHKGxwLCBpcnFfY2ZnKTsKIAogCS8qIGNsZWFyIGFueXRoaW5nIHNhdmVkICovCiAJaWYgKGxwLT5wZW5kaW5nX3R4X3NrYiAhPSBOVUxMKSB7CkBAIC0yNzQsNiArMjczLDggQEAKIAogCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19mdW5jX18pOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisKIAlTTUNfU0VUX01BQ19BRERSKGxwLCBkZXYtPmRldl9hZGRyKTsKIAogCS8qIEVuYWJsZSBUWCAqLwpAQCAtMjg2LDEyICsyODcsMTAgQEAKIAlTTUNfU0VUX0ZJRk9fVFNMKGxwLCA2NCk7CiAJU01DX1NFVF9HUFRfQ0ZHKGxwLCBHUFRfQ0ZHX1RJTUVSX0VOXyB8IDEwMDAwKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCVNNQ19HRVRfTUFDX0NSKGxwLCBjcik7CiAJY3IgfD0gTUFDX0NSX1RYRU5fIHwgTUFDX0NSX0hCRElTXzsKIAlTTUNfU0VUX01BQ19DUihscCwgY3IpOwogCVNNQ19TRVRfVFhfQ0ZHKGxwLCBUWF9DRkdfVFhfT05fKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJLyogQWRkIDIgYnl0ZSBwYWRkaW5nIHRvIHN0YXJ0IG9mIHBhY2tldHMgKi8KIAlTTUNfU0VUX1JYX0NGRyhscCwgKDI8PDgpICYgUlhfQ0ZHX1JYRE9GRl8pOwpAQCAtMzAwLDkgKzI5OSw3IEBACiAJaWYgKGNyICYgTUFDX0NSX1JYRU5fKQogCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJlY2VpdmVyIGFscmVhZHkgZW5hYmxlZFxuIiwgZGV2LT5uYW1lKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCVNNQ19TRVRfTUFDX0NSKGxwLCBjciB8IE1BQ19DUl9SWEVOXyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIEludGVycnVwdCBvbiBldmVyeSByZWNlaXZlZCBwYWNrZXQgKi8KIAlTTUNfU0VUX0ZJRk9fUlNBKGxwLCAweDAxKTsKQEAgLTMxOCw2ICszMTUsOCBAQAogCQltYXNrfD1JTlRfRU5fUkRGT19FTl87CiAJfQogCVNNQ19FTkFCTEVfSU5UKGxwLCBtYXNrKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC00NTgsNyArNDU3LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBjbWRBLCBjbWRCLCBsZW47CiAJdW5zaWduZWQgY2hhciAqYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMgfCBTTUNfREVCVUdfVFgsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fZnVuY19fKTsKIAlCVUdfT04obHAtPnBlbmRpbmdfdHhfc2tiID09IE5VTEwpOwpAQCAtNTAzLDExICs1MDEsOSBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKICNlbmRpZgotCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCWlmICghbHAtPnR4X3Rocm90dGxlKSB7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAlTTUNfRU5BQkxFX0lOVChscCwgSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1RTRkxfRU5fKTsKIH0KIApAQCAtNTI2LDYgKzUyMiw4IEBACiAJREJHKFNNQ19ERUJVR19GVU5DIHwgU01DX0RFQlVHX1RYLCAiJXM6IC0tPiAlc1xuIiwKIAkJZGV2LT5uYW1lLCBfX2Z1bmNfXyk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwogCUJVR19PTihscC0+cGVuZGluZ190eF9za2IgIT0gTlVMTCk7CiAKIAlmcmVlID0gU01DX0dFVF9UWF9GSUZPX0lORihscCkgJiBUWF9GSUZPX0lORl9UREZSRUVfOwpAQCAtNTM1LDEyICs1MzMsMTAgQEAKIAlpZiAoZnJlZSA8PSBTTUM5MTFYX1RYX0ZJRk9fTE9XX1RIUkVTSE9MRCkgewogCQlEQkcoU01DX0RFQlVHX1RYLCAiJXM6IERpc2FibGluZyBkYXRhIGZsb3cgZHVlIHRvIGxvdyBGSUZPIHNwYWNlICglZClcbiIsCiAJCQlkZXYtPm5hbWUsIGZyZWUpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJLyogUmVlbmFibGUgd2hlbiBhdCBsZWFzdCAxIHBhY2tldCBvZiBzaXplIE1UVSBwcmVzZW50ICovCiAJCVNNQ19TRVRfRklGT19UREEobHAsIChTTUM5MTFYX1RYX0ZJRk9fTE9XX1RIUkVTSE9MRCkvNjQpOwogCQlscC0+dHhfdGhyb3R0bGUgPSAxOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJLyogRHJvcCBwYWNrZXRzIHdoZW4gd2UgcnVuIG91dCBvZiBzcGFjZSBpbiBUWCBGSUZPCkBAIC01NTYsNiArNTUyLDcgQEAKIAkJbHAtPnBlbmRpbmdfdHhfc2tiID0gTlVMTDsKIAkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTY1LDcgKzU2Miw2IEBACiAJCS8qIElmIHRoZSBETUEgaXMgYWxyZWFkeSBydW5uaW5nIHRoZW4gZGVmZXIgdGhpcyBwYWNrZXQgVHggdW50aWwKIAkJICogdGhlIERNQSBJUlEgc3RhcnRzIGl0CiAJCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKGxwLT50eGRtYV9hY3RpdmUpIHsKIAkJCURCRyhTTUNfREVCVUdfVFggfCBTTUNfREVCVUdfRE1BLCAiJXM6IFR4IERNQSBydW5uaW5nLCBkZWZlcnJpbmcgcGFja2V0XG4iLCBkZXYtPm5hbWUpOwogCQkJbHAtPnBlbmRpbmdfdHhfc2tiID0gc2tiOwpAQCAtNTc2LDExICs1NzIsMTEgQEAKIAkJCURCRyhTTUNfREVCVUdfVFggfCBTTUNfREVCVUdfRE1BLCAiJXM6IEFjdGl2YXRpbmcgVHggRE1BXG4iLCBkZXYtPm5hbWUpOwogCQkJbHAtPnR4ZG1hX2FjdGl2ZSA9IDE7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAl9CiAjZW5kaWYKIAlscC0+cGVuZGluZ190eF9za2IgPSBza2I7CiAJc21jOTExeF9oYXJkd2FyZV9zZW5kX3BrdChkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNDIsNyArMTIzOCw3IEBACiAJbmV0aWZfcngoc2tiKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCXBrdHMgPSAoU01DX0dFVF9SWF9GSUZPX0lORigpICYgUlhfRklGT19JTkZfUlhTVVNFRF8pID4+IDE2OworCXBrdHMgPSAoU01DX0dFVF9SWF9GSUZPX0lORihscCkgJiBSWF9GSUZPX0lORl9SWFNVU0VEXykgPj4gMTY7CiAJaWYgKHBrdHMgIT0gMCkgewogCQlzbWM5MTF4X3JjdihkZXYpOwogCX1lbHNlIHsKQEAgLTIwNTQsNyArMjA1MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc21jOTExeF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzbWM5MTF4X3BsYXRkYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaAppbmRleCBiZjYyNDBmLi5jYzdkODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCkBAIC01MCw2ICs1MCwxMCBAQAogI2RlZmluZSBTTUNfRFlOQU1JQ19CVVNfQ09ORklHCiAjZW5kaWYKIAorI2lmZGVmIFNNQ19VU0VfUFhBX0RNQQorI2RlZmluZSBTTUNfVVNFX0RNQQorI2VuZGlmCisKIC8qIHN0b3JlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBkcml2ZXIuLiAqLwogc3RydWN0IHNtYzkxMXhfbG9jYWwgewogCS8qCkBAIC0xOTYsOCArMjAwLDYgQEAKIAogCiAjaWZkZWYgU01DX1VTRV9QWEFfRE1BCi0jZGVmaW5lIFNNQ19VU0VfRE1BCi0KIC8qCiAgKiBEZWZpbmUgdGhlIHJlcXVlc3QgYW5kIGZyZWUgZnVuY3Rpb25zCiAgKiBUaGVzZSBhcmUgdW5mb3J0dW5hdGVseSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYXMgbm8gZ2VuZXJpYyBhbGxvY2F0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCAyMmMxN2JiLi40NjZhODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTQ1Niw3ICs0NTYsNyBAQAogewogCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCXdhcm4oIlRyYW5zbWl0IHRpbWVkIG91dC4iKTsKKwlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJUcmFuc21pdCB0aW1lZCBvdXQuXG4iKTsKIAl1c2JfdW5saW5rX3VyYihjYXRjLT50eF91cmIpOwogfQogCkBAIC04NDcsNyArODQ3LDggQEAKIAkJCWRiZygiNjRrIE1lbW9yeVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXdhcm4oIkNvdWxkbid0IGRldGVjdCBtZW1vcnkgc2l6ZSwgYXNzdW1pbmcgMzJrIik7CisJCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJCSAiQ291bGRuJ3QgZGV0ZWN0IG1lbW9yeSBzaXplLCBhc3N1bWluZyAzMmtcbiIpOwogCQljYXNlIDB4ODc2NTQzMjE6CiAJCQljYXRjX3NldF9yZWcoY2F0YywgVHhCdWZDb3VudCwgNCk7CiAJCQljYXRjX3NldF9yZWcoY2F0YywgUnhCdWZDb3VudCwgMTYpOwpAQCAtOTUzLDcgKzk1NCw4IEBACiB7CiAJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmY2F0Y19kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKLQkJaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKaW5kZXggZDY4MjlkYi4uZmRiZjNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwpAQCAtODMyLDcgKzgzMiw3IEBACiAKIAlpZigocmVzID0gdXNiX3N1Ym1pdF91cmIoa2F3ZXRoLT50eF91cmIsIEdGUF9BVE9NSUMpKSkKIAl7Ci0JCXdhcm4oImthd2V0aCBmYWlsZWQgdHhfdXJiICVkIiwgcmVzKTsKKwkJZGV2X3dhcm4oJm5ldC0+ZGV2LCAia2F3ZXRoIGZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7CiBza2lwOgogCQlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOwogCkBAIC05MjQsNyArOTI0LDcgQEAKIHsKIAlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gbmV0ZGV2X3ByaXYobmV0KTsKIAotCXdhcm4oIiVzOiBUeCB0aW1lZCBvdXQuIFJlc2V0dGluZy4iLCBuZXQtPm5hbWUpOworCWRldl93YXJuKCZuZXQtPmRldiwgIiVzOiBUeCB0aW1lZCBvdXQuIFJlc2V0dGluZy5cbiIsIG5ldC0+bmFtZSk7CiAJa2F3ZXRoLT5zdGF0cy50eF9lcnJvcnMrKzsKIAluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIApAQCAtMTAxNiwxMCArMTAxNiwxMCBAQAogCSAqLwogCiAJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpID4+IDgpIHsKLQkJaW5mbygiRmlybXdhcmUgcHJlc2VudCBpbiBkZXZpY2UuIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJGaXJtd2FyZSBwcmVzZW50IGluIGRldmljZS5cbiIpOwogCX0gZWxzZSB7CiAJCS8qIERvd25sb2FkIHRoZSBmaXJtd2FyZSAqLwotCQlpbmZvKCJEb3dubG9hZGluZyBmaXJtd2FyZS4uLiIpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRG93bmxvYWRpbmcgZmlybXdhcmUuLi5cbiIpOwogCQlrYXdldGgtPmZpcm13YXJlX2J1ZiA9IChfX3U4ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAoKHJlc3VsdCA9IGthd2V0aF9kb3dubG9hZF9maXJtd2FyZShrYXdldGgsCiAJCQkJCQkgICAgICAia2F3ZXRoL25ld19jb2RlLmJpbiIsCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCQl9CiAKIAkJLyogRGV2aWNlIHdpbGwgbm93IGRpc2FwcGVhciBmb3IgYSBtb21lbnQuLi4gICovCi0JCWluZm8oIkZpcm13YXJlIGxvYWRlZC4gIEknbGwgYmUgYmFjay4uLiIpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRmlybXdhcmUgbG9hZGVkLiAgSSdsbCBiZSBiYWNrLi4uXG4iKTsKIGVycl9mdzoKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWthd2V0aC0+ZmlybXdhcmVfYnVmKTsKIAkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTEwNzUsMTAgKzEwNzUsMTAgQEAKIAkJZ290byBlcnJfZnJlZV9uZXRkZXY7CiAJfQogCi0JaW5mbygiU3RhdGlzdGljcyBjb2xsZWN0aW9uOiAleCIsIGthd2V0aC0+Y29uZmlndXJhdGlvbi5zdGF0aXN0aWNzX21hc2spOwotCWluZm8oIk11bHRpY2FzdCBmaWx0ZXIgbGltaXQ6ICV4Iiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLm1heF9tdWx0aWNhc3RfZmlsdGVycyAmICgoMSA8PCAxNSkgLSAxKSk7Ci0JaW5mbygiTVRVOiAlZCIsIGxlMTZfdG9fY3B1KGthd2V0aC0+Y29uZmlndXJhdGlvbi5zZWdtZW50X3NpemUpKTsKLQlpbmZvKCJSZWFkIE1BQyBhZGRyZXNzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4IiwKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiU3RhdGlzdGljcyBjb2xsZWN0aW9uOiAleFxuIiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLnN0YXRpc3RpY3NfbWFzayk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIk11bHRpY2FzdCBmaWx0ZXIgbGltaXQ6ICV4XG4iLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24ubWF4X211bHRpY2FzdF9maWx0ZXJzICYgKCgxIDw8IDE1KSAtIDEpKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTVRVOiAlZFxuIiwgbGUxNl90b19jcHUoa2F3ZXRoLT5jb25maWd1cmF0aW9uLnNlZ21lbnRfc2l6ZSkpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJSZWFkIE1BQyBhZGRyZXNzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4XG4iLAogCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclswXSwKIAkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMV0sCiAJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzJdLApAQCAtMTE3NCw3ICsxMTc0LDggQEAKIAkJZ290byBlcnJfaW50ZmRhdGE7CiAJfQogCi0JaW5mbygia2F3ZXRoIGludGVyZmFjZSBjcmVhdGVkIGF0ICVzIiwga2F3ZXRoLT5uZXQtPm5hbWUpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJrYXdldGggaW50ZXJmYWNlIGNyZWF0ZWQgYXQgJXNcbiIsCisJCSBrYXdldGgtPm5ldC0+bmFtZSk7CiAKIAlkYmcoIkthd2V0aCBwcm9iZSByZXR1cm5pbmcuIik7CiAKQEAgLTEyMDUsMTEgKzEyMDYsMTEgQEAKIAlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCi0JaW5mbygiVW5yZWdpc3RlcmluZyIpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVbnJlZ2lzdGVyaW5nXG4iKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJaWYgKCFrYXdldGgpIHsKLQkJd2FybigidW5yZWdpc3RlcmluZyBub24tZXhpc3RhbnQgZGV2aWNlIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCW5ldGRldiA9IGthd2V0aC0+bmV0OwpAQCAtMTI2OSw3ICsxMjcwLDcgQEAKIAogCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGF3ZC53cWgsIGF3ZC5kb25lLCB0aW1lb3V0KSkgewogICAgICAgICAgICAgICAgIC8vIHRpbWVvdXQKLSAgICAgICAgICAgICAgICB3YXJuKCJ1c2JfY29udHJvbC9idWxrX21zZzogdGltZW91dCIpOworICAgICAgICAgICAgICAgIGRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAidXNiX2NvbnRyb2wvYnVsa19tc2c6IHRpbWVvdXRcbiIpOwogICAgICAgICAgICAgICAgIHVzYl9raWxsX3VyYih1cmIpOyAgLy8gcmVtb3ZlIHVyYiBzYWZlbHkKICAgICAgICAgICAgICAgICBzdGF0dXMgPSAtRVRJTUVET1VUOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwppbmRleCAzOGI5MGU3Li43OTE0ODY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChwZWdhc3VzLT5uZXQpOwogCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlkZXZfZXJyKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcywgc3RhdHVzICVkXG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIHJldCk7CisJCQkJCV9fZnVuY19fLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWlmICghYnVmZmVyKSB7CiAJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQogCQkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKaW5kZXggZGY1NmE1MS4uNjEzMzQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYworKysgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAljYXNlIC1FTk9FTlQ6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXdhcm4oImN0cmwgdXJiIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJjdHJsIHVyYiBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiAJZGV2ID0gdXJiLT5jb250ZXh0OwogCWNsZWFyX2JpdChSWF9SRUdfU0VULCAmZGV2LT5mbGFncyk7CkBAIC00NDEsMTAgKzQ0MSwxMCBAQAogCWNhc2UgLUVOT0VOVDoKIAkJcmV0dXJuOwkvKiB0aGUgdXJiIGlzIGluIHVubGluayBzdGF0ZSAqLwogCWNhc2UgLUVUSU1FOgotCQl3YXJuKCJtYXkgYmUgcmVzZXQgaXMgbmVlZGVkPy4uIik7CisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAibWF5IGJlIHJlc2V0IGlzIG5lZWRlZD8uLlxuIik7CiAJCWdvdG8gZ29vbjsKIAlkZWZhdWx0OgotCQl3YXJuKCJSeCBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAiUnggc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CiAJCWdvdG8gZ29vbjsKIAl9CiAKQEAgLTUzOCw3ICs1MzgsOCBAQAogCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2LT5uZXRkZXYpKQogCQlyZXR1cm47CiAJaWYgKHVyYi0+c3RhdHVzKQotCQlpbmZvKCIlczogVHggc3RhdHVzICVkIiwgZGV2LT5uZXRkZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICIlczogVHggc3RhdHVzICVkXG4iLAorCQkJIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CiAJZGV2LT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAluZXRpZl93YWtlX3F1ZXVlKGRldi0+bmV0ZGV2KTsKIH0KQEAgLTU2MSw3ICs1NjIsOCBAQAogCQlyZXR1cm47CiAJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCiAJZGVmYXVsdDoKLQkJaW5mbygiJXM6IGludHIgc3RhdHVzICVkIiwgZGV2LT5uZXRkZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICIlczogaW50ciBzdGF0dXMgJWRcbiIsCisJCQkgZGV2LT5uZXRkZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKIAkJZ290byByZXN1Ym1pdDsKIAl9CiAKQEAgLTY2NSw3ICs2NjcsNyBAQAogCXU4IGNyLCB0Y3IsIHJjciwgbXNyOwogCiAJaWYgKCFydGw4MTUwX3Jlc2V0KGRldikpIHsKLQkJd2FybigiJXMgLSBkZXZpY2UgcmVzZXQgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2X3dhcm4oJmRldi0+dWRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0IGZhaWxlZFxuIik7CiAJfQogCS8qIFJDUiBiaXQ3PTEgYXR0YWNoIFJ4IGluZm8gYXQgdGhlIGVuZDsgID0wIEhXIENSQyAod2hpY2ggaXMgYnJva2VuKSAqLwogCXJjciA9IDB4OWU7CkBAIC02OTksNyArNzAxLDcgQEAKIHN0YXRpYyB2b2lkIHJ0bDgxNTBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl3YXJuKCIlczogVHggdGltZW91dC4iLCBuZXRkZXYtPm5hbWUpOworCWRldl93YXJuKCZuZXRkZXYtPmRldiwgIlR4IHRpbWVvdXQuXG4iKTsKIAl1c2JfdW5saW5rX3VyYihkZXYtPnR4X3VyYik7CiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIH0KQEAgLTcxMCwxMiArNzEyLDEyIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJZGV2LT5yeF9jcmVnIHw9IGNwdV90b19sZTE2KDB4MDAwMSk7Ci0JCWluZm8oIiVzOiBwcm9taXNjdW91cyBtb2RlIiwgbmV0ZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiJXM6IHByb21pc2N1b3VzIG1vZGVcbiIsIG5ldGRldi0+bmFtZSk7CiAJfSBlbHNlIGlmIChuZXRkZXYtPm1jX2NvdW50IHx8CiAJCSAgIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQlkZXYtPnJ4X2NyZWcgJj0gY3B1X3RvX2xlMTYoMHhmZmZlKTsKIAkJZGV2LT5yeF9jcmVnIHw9IGNwdV90b19sZTE2KDB4MDAwMik7Ci0JCWluZm8oIiVzOiBhbGxtdWx0aSBzZXQiLCBuZXRkZXYtPm5hbWUpOworCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICIlczogYWxsbXVsdGkgc2V0XG4iLCBuZXRkZXYtPm5hbWUpOwogCX0gZWxzZSB7CiAJCS8qIH5SWF9NVUxUSUNBU1QsIH5SWF9QUk9NSVNDVU9VUyAqLwogCQlkZXYtPnJ4X2NyZWcgJj0gY3B1X3RvX2xlMTYoMHgwMGZjKTsKQEAgLTc0MCw3ICs3NDIsNyBAQAogCQlpZiAocmVzID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKIAkJZWxzZSB7Ci0JCQl3YXJuKCJmYWlsZWQgdHhfdXJiICVkXG4iLCByZXMpOworCQkJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKIAkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCQl9CkBAIC03ODMsNyArNzg1LDcgQEAKIAlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+cnhfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7Ci0JCXdhcm4oIiVzOiByeF91cmIgc3VibWl0IGZhaWxlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHJlcyk7CisJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgInJ4X3VyYiBzdWJtaXQgZmFpbGVkOiAlZFxuIiwgcmVzKTsKIAkJcmV0dXJuIHJlczsKIAl9CiAJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludHJfdXJiLCBkZXYtPnVkZXYsIHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwgMyksCkBAIC03OTIsNyArNzk0LDcgQEAKIAlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50cl91cmIsIEdGUF9LRVJORUwpKSkgewogCQlpZiAocmVzID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKLQkJd2FybigiJXM6IGludHJfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkIiwgX19GVU5DVElPTl9fLCByZXMpOworCQlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJpbnRyX3VyYiBzdWJtaXQgZmFpbGVkOiAlZFxuIiwgcmVzKTsKIAkJdXNiX2tpbGxfdXJiKGRldi0+cnhfdXJiKTsKIAkJcmV0dXJuIHJlczsKIAl9CkBAIC05NDcsNyArOTQ5LDcgQEAKIAkJZ290byBvdXQyOwogCX0KIAotCWluZm8oIiVzOiBydGw4MTUwIGlzIGRldGVjdGVkIiwgbmV0ZGV2LT5uYW1lKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXM6IHJ0bDgxNTAgaXMgZGV0ZWN0ZWRcbiIsIG5ldGRldi0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtOTg0LDcgKzk4Niw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHVzYl9ydGw4MTUwX2luaXQodm9pZCkKIHsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZydGw4MTUwX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwppbmRleCBmODA2NDBmLi5kN2JiNjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCkBAIC0xMjIsNyArMTIyLDYgQEAKICAgICAgKiBNb3N0IGZ1bmN0aW9ucyBtZXNzIHdpdGggdGhlIHN0cnVjdHVyZQogICAgICAqIERpc2FibGUgaW50ZXJydXB0cyB3aGlsZSB3ZSBkbyB0aGUgcG9sbGluZwogICAgICAqLwotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgIHN3aXRjaCAoY21kKSB7CiAgICAgICAgIC8qCkBAIC0xNTIsNiArMTUxLDcgQEAKIAkJYnJlYWs7CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBzYy0+bG1jX21lZGlhLT5zZXRfc3RhdHVzIChzYywgJmN0bCk7CiAKICAgICAgICAgaWYoY3RsLmNyY19sZW5ndGggIT0gc2MtPmljdGwuY3JjX2xlbmd0aCkgewpAQCAtMTYxLDYgKzE2MSw3IEBACiAJICAgIGVsc2UKIAkJc2MtPlR4RGVzY3JpcHRDb250cm9sSW5pdCAmPSB+TE1DX1RERVNfQUREX0NSQ19ESVNBQkxFOwogICAgICAgICB9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAKICAgICAgICAgcmV0ID0gMDsKICAgICAgICAgYnJlYWs7CkBAIC0xODcsMTUgKzE4OCwxOCBAQAogCQlicmVhazsJCQkJLyogbm8gY2hhbmdlICovCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKwkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgbG1jX3Byb3RvX2Nsb3NlKHNjKTsKIAogICAgICAgICAgICAgc2MtPmlmX3R5cGUgPSBuZXdfdHlwZTsKICAgICAgICAgICAgIGxtY19wcm90b19hdHRhY2goc2MpOwogCSAgICByZXQgPSBsbWNfcHJvdG9fb3BlbihzYyk7CisJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCSAgICBicmVhazsKIAl9CiAKICAgICBjYXNlIExNQ0lPQ0dFVFhJTkZPOiAvKmZvbGQwMSovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBzYy0+bG1jX3hpbmZvLk1hZ2ljMCA9IDB4QkVFRkNBRkU7CiAKICAgICAgICAgc2MtPmxtY194aW5mby5QY2lDYXJkVHlwZSA9IHNjLT5sbWNfY2FyZHR5cGU7CkBAIC0yMDgsNiArMjEyLDcgQEAKICAgICAgICAgc2MtPmxtY194aW5mby5NYXhGcmFtZVNpemUgPSBMTUNfUEtUX0JVRl9TWjsKICAgICAgICAgc2MtPmxtY194aW5mby5saW5rX3N0YXR1cyA9IHNjLT5sbWNfbWVkaWEtPmdldF9saW5rX3N0YXR1cyAoc2MpOwogICAgICAgICBzYy0+bG1jX3hpbmZvLm1paV9yZWcxNiA9IGxtY19taWlfcmVhZHJlZyAoc2MsIDAsIDE2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICBzYy0+bG1jX3hpbmZvLk1hZ2ljMSA9IDB4REVBREJFRUY7CiAKQEAgLTIyMCw2ICsyMjUsNyBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTE1DSU9DR0VUTE1DU1RBVFM6CisJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAkgICAgaWYgKHNjLT5sbWNfY2FyZHR5cGUgPT0gTE1DX0NBUkRUWVBFX1QxKSB7CiAJCSAgICBsbWNfbWlpX3dyaXRlcmVnKHNjLCAwLCAxNywgVDFGUkFNRVJfRkVSUl9MU0IpOwogCQkgICAgc2MtPmV4dHJhX3N0YXRzLmZyYW1pbmdCaXRFcnJvckNvdW50ICs9CkBAIC0yNDMsNiArMjQ5LDcgQEAKIAkJICAgIHNjLT5leHRyYV9zdGF0cy5zZXZlcmVseUVycm9yZWRGcmFtZUNvdW50ICs9CiAJCQkgICAgcmVnVmFsICYgVDFGUkFNRVJfU0VGX01BU0s7CiAJICAgIH0KKwkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIGlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJfZGF0YSwgJnNjLT5sbWNfZGV2aWNlLT5zdGF0cywKIAkJCSAgICAgc2l6ZW9mKHNjLT5sbWNfZGV2aWNlLT5zdGF0cykpIHx8CiAJCWNvcHlfdG9fdXNlcihpZnItPmlmcl9kYXRhICsgc2l6ZW9mKHNjLT5sbWNfZGV2aWNlLT5zdGF0cyksCkBAIC0yNTgsMTIgKzI2NSwxNCBAQAogCQkgICAgYnJlYWs7CiAJICAgIH0KIAorCSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIG1lbXNldCgmc2MtPmxtY19kZXZpY2UtPnN0YXRzLCAwLCBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSk7CiAJICAgIG1lbXNldCgmc2MtPmV4dHJhX3N0YXRzLCAwLCBzaXplb2Yoc2MtPmV4dHJhX3N0YXRzKSk7CiAJICAgIHNjLT5leHRyYV9zdGF0cy5jaGVjayA9IFNUQVRDSEVDSzsKIAkgICAgc2MtPmV4dHJhX3N0YXRzLnZlcnNpb25fc2l6ZSA9IChEUklWRVJfVkVSU0lPTiA8PCAxNikgKwogCQkgICAgc2l6ZW9mKHNjLT5sbWNfZGV2aWNlLT5zdGF0cykgKyBzaXplb2Yoc2MtPmV4dHJhX3N0YXRzKTsKIAkgICAgc2MtPmV4dHJhX3N0YXRzLmxtY19jYXJkdHlwZSA9IHNjLT5sbWNfY2FyZHR5cGU7CisJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCSAgICByZXQgPSAwOwogCSAgICBicmVhazsKIApAQCAtMjgyLDggKzI5MSwxMCBAQAogCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBzYy0+bG1jX21lZGlhLT5zZXRfY2lyY3VpdF90eXBlKHNjLCBjdGwuY2lyY3VpdF90eXBlKTsKICAgICAgICAgc2MtPmljdGwuY2lyY3VpdF90eXBlID0gY3RsLmNpcmN1aXRfdHlwZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcmV0ID0gMDsKIAogICAgICAgICBicmVhazsKQEAgLTI5NCwxMiArMzA1LDE0IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAvKiBSZXNldCBkcml2ZXIgYW5kIGJyaW5nIGJhY2sgdG8gY3VycmVudCBzdGF0ZSAqLwogICAgICAgICBwcmludGsgKCIgUkVHMTYgYmVmb3JlIHJlc2V0ICslMDR4XG4iLCBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNikpOwogICAgICAgICBsbWNfcnVubmluZ19yZXNldCAoZGV2KTsKICAgICAgICAgcHJpbnRrICgiIFJFRzE2IGFmdGVyIHJlc2V0ICslMDR4XG4iLCBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNikpOwogCiAgICAgICAgIExNQ19FVkVOVF9MT0coTE1DX0VWRU5UX0ZPUkNFRFJFU0VULCBMTUNfQ1NSX1JFQUQgKHNjLCBjc3Jfc3RhdHVzKSwgbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICByZXQgPSAwOwogICAgICAgICBicmVhazsKQEAgLTMzOCwxNCArMzUxLDE1IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmeGMsIGlmci0+aWZyX2RhdGEsIHNpemVvZihzdHJ1Y3QgbG1jX3hpbGlueF9jb250cm9sKSkpIHsKKwkgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZ4YywgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBsbWNfeGlsaW54X2NvbnRyb2wpKSkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKLQl9CisJICAgIH0KICAgICAgICAgICAgIHN3aXRjaCh4Yy5jb21tYW5kKXsKICAgICAgICAgICAgIGNhc2UgbG1jX3hpbGlueF9yZXNldDogLypmb2xkMDIqLwogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdTE2IG1paTsKKwkJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgbWlpID0gbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC00MDQsNiArNDE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbWNfbGVkX29mZihzYywgTE1DX0RTM19MRUQyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQorCQkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKIApAQCAtNDE2LDYgKzQzMSw3IEBACiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1MTYgbWlpOwogICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dCA9IDUwMDAwMDsKKwkJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgbWlpID0gbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC00NTEsMTMgKzQ2NywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIChMTUNfQ1NSX1JFQUQoc2MsIGNzcl9ncCkgJiBMTUNfR0VQX0lOSVQpID09IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lb3V0LS0gPiAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yZWxheCgpOwogCiAKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogc3RvcCBkcml2aW5nIFhpbGlueC1yZWxhdGVkIHNpZ25hbHMKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIGxtY19ncGlvX21raW5wdXQoc2MsIDB4ZmYpOworCQkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAKICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMHgwOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ5Myw2ICs1MTAsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgIHByaW50aygiJXM6IFN0YXJ0aW5nIGxvYWQgb2YgZGF0YSBMZW46ICVkIGF0IDB4JXAgPT0gMHglcFxuIiwgZGV2LT5uYW1lLCB4Yy5sZW4sIHhjLmRhdGEsIGRhdGEpOwogCisJCSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgICAgIGxtY19ncGlvX21raW5wdXQoc2MsIDB4ZmYpOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC01NDUsNyArNTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoTE1DX0NTUl9SRUFEKHNjLCBjc3JfZ3ApICYgTE1DX0dFUF9JTklUKSA9PSAwICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGltZW91dC0tID4gMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcmVsYXgoKTsKIAogICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdhaXRlZCAlZCBmb3IgdGhlIFhpbGlueCB0byBjbGVhciBpdCdzIG1lbW9yeVxuIiwgZGV2LT5uYW1lLCA1MDAwMDAtdGltZW91dCk7CiAKQEAgLTU4OCw2ICs2MDYsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgIHNjLT5sbWNfbWlpcmVnMTYgJj0gfkxNQ19NSUkxNl9GSUZPX1JFU0VUOwogICAgICAgICAgICAgICAgICAgICBsbWNfbWlpX3dyaXRlcmVnKHNjLCAwLCAxNiwgc2MtPmxtY19taWlyZWcxNik7CisJCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICAgICAgICAgICAgICBrZnJlZShkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC02MTEsOCArNjMwLDYgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7IC8qZm9sZDAxKi8KLQogICAgIGxtY190cmFjZShkZXYsICJsbWNfaW9jdGwgb3V0Iik7CiAKICAgICByZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKaW5kZXggZjk3MmZlZi4uZWU1MWI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJCQljb250aW51ZTsKIAkJfQogCi0JCWlmKCBwY2lfaXJxX2xpbmUgPD0gMCAgfHwgIHBjaV9pcnFfbGluZSA+PSBOUl9JUlFTICkKKwkJaWYgKHBjaV9pcnFfbGluZSA8PSAwIHx8IHBjaV9pcnFfbGluZSA+PSBucl9pcnFzKQogCQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgIiAgV0FSTklORzogVGhlIFBDSSBCSU9TIGFzc2lnbmVkICIKIAkJCQkidGhpcyBQQ0kgY2FyZCB0byBJUlEgJWQsIHdoaWNoIGlzIHVubGlrZWx5ICIKIAkJCQkidG8gd29yayEuXG4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKaW5kZXggOWI5NWM0MC4uMGYxZDZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYwpAQCAtMzQwLDkgKzM0MCw5IEBACiB9CiAKIC8qIEludGVycnVwdCBoYW5kbGluZyAqLwotc3RhdGljIGludCAJYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgCWF0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19yZXN1bWUpOwogc3RhdGljIGludCAJYXRoNWtfc3RvcF9sb2NrZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworc3RhdGljIGludCAJYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3N1c3BlbmQpOwogc3RhdGljIGlycXJldHVybl90IGF0aDVrX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIAlhdGg1a190YXNrbGV0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKQEAgLTY0Niw3ICs2NDYsNyBAQAogCiAJYXRoNWtfbGVkX29mZihzYyk7CiAKLQlhdGg1a19zdG9wX2h3KHNjKTsKKwlhdGg1a19zdG9wX2h3KHNjLCB0cnVlKTsKIAogCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwpAQCAtNjgzLDcgKzY4Myw3IEBACiAJCWdvdG8gZXJyX25vX2lycTsKIAl9CiAKLQllcnIgPSBhdGg1a19pbml0KHNjKTsKKwllcnIgPSBhdGg1a19pbml0KHNjLCB0cnVlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9pcnE7CiAJYXRoNWtfbGVkX2VuYWJsZShzYyk7CkBAIC0yMjAwLDEyICsyMjAwLDE3IEBACiBcKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQKLWF0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK2F0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19yZXN1bWUpCiB7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKIAorCWlmIChpc19yZXN1bWUgJiYgIXRlc3RfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpKQorCQlnb3RvIG91dF9vazsKKworCV9fY2xlYXJfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpOworCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgIm1vZGUgJWRcbiIsIHNjLT5vcG1vZGUpOwogCiAJLyoKQEAgLTIyMzAsMTIgKzIyMzUsMTUgQEAKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CiAKKwlfX3NldF9iaXQoQVRIX1NUQVRfU1RBUlRFRCwgc2MtPnN0YXR1cyk7CisKIAkvKiBTZXQgYWNrIHRvIGJlIHNlbnQgYXQgbG93IGJpdC1yYXRlcyAqLwogCWF0aDVrX2h3X3NldF9hY2tfYml0cmF0ZV9oaWdoKHNjLT5haCwgZmFsc2UpOwogCiAJbW9kX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhhdGg1a19jYWxpbnRlcnZhbCAqIDEwMDApKSk7CiAKK291dF9vazoKIAlyZXQgPSAwOwogZG9uZToKIAltbWlvd2IoKTsKQEAgLTIyOTAsNyArMjI5OCw3IEBACiAgKiBzdG9wIGlzIHByZWVtcHRlZCkuCiAgKi8KIHN0YXRpYyBpbnQKLWF0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK2F0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19zdXNwZW5kKQogewogCWludCByZXQ7CiAKQEAgLTIzMjEsNiArMjMyOSw5IEBACiAJCX0KIAl9CiAJYXRoNWtfdHhidWZfZnJlZShzYywgc2MtPmJidWYpOworCWlmICghaXNfc3VzcGVuZCkKKwkJX19jbGVhcl9iaXQoQVRIX1NUQVRfU1RBUlRFRCwgc2MtPnN0YXR1cyk7CisKIAltbWlvd2IoKTsKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKIApAQCAtMjcxOCwxMiArMjcyOSwxMiBAQAogCiBzdGF0aWMgaW50IGF0aDVrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXJldHVybiBhdGg1a19pbml0KGh3LT5wcml2KTsKKwlyZXR1cm4gYXRoNWtfaW5pdChody0+cHJpdiwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg1a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCWF0aDVrX3N0b3BfaHcoaHctPnByaXYpOworCWF0aDVrX3N0b3BfaHcoaHctPnByaXYsIGZhbHNlKTsKIH0KIAogc3RhdGljIGludCBhdGg1a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCmluZGV4IDlkMGI3MjguLjA2ZDEwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmgKQEAgLTEyOCwxMSArMTI4LDEyIEBACiAJc2l6ZV90CQkJZGVzY19sZW47CS8qIHNpemUgb2YgVFgvUlggZGVzY3JpcHRvcnMgKi8KIAl1MTYJCQljYWNoZWxzejsJLyogY2FjaGUgbGluZSBzaXplICovCiAKLQlERUNMQVJFX0JJVE1BUChzdGF0dXMsIDQpOworCURFQ0xBUkVfQklUTUFQKHN0YXR1cywgNSk7CiAjZGVmaW5lIEFUSF9TVEFUX0lOVkFMSUQJMAkJLyogZGlzYWJsZSBoYXJkd2FyZSBhY2Nlc3NlcyAqLwogI2RlZmluZSBBVEhfU1RBVF9NUlJFVFJZCTEJCS8qIG11bHRpLXJhdGUgcmV0cnkgc3VwcG9ydCAqLwogI2RlZmluZSBBVEhfU1RBVF9QUk9NSVNDCTIKICNkZWZpbmUgQVRIX1NUQVRfTEVEU09GVAkzCQkvKiBlbmFibGUgTEVEIGdwaW8gc3RhdHVzICovCisjZGVmaW5lIEFUSF9TVEFUX1NUQVJURUQJNAkJLyogb3BlbmVkICYgaXJxcyBlbmFibGVkICovCiAKIAl1bnNpZ25lZCBpbnQJCWZpbHRlcl9mbGFnczsJLyogSFcgZmxhZ3MsIEFSNUtfUlhfRklMVEVSXyogKi8KIAl1bnNpZ25lZCBpbnQJCWN1cm1vZGU7CS8qIGN1cnJlbnQgcGh5IG1vZGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwppbmRleCA1MDkwNDc3Li5lMDUxMmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCkBAIC00MzMsNyArNDMzLDcgQEAKIGNvbnN0IHN0YXRpYyBzdHJ1Y3QgZndfaW5mbyBvcmlub2NvX2Z3W10gPSB7CiAJeyAiIiwgImFnZXJlX3N0YV9mdy5iaW4iLCAiYWdlcmVfYXBfZncuYmluIiwgMHgwMDM5MDAwMCwgMTAwMCB9LAogCXsgIiIsICJwcmlzbV9zdGFfZncuYmluIiwgInByaXNtX2FwX2Z3LmJpbiIsIDAsIDEwMjQgfSwKLQl7ICJzeW1ib2xfc3AyNHRfcHJpbV9mdyIsICJzeW1ib2xfc3AyNHRfc2VjX2Z3IiwgIiIsIDB4MDAwMDMxMDAsIDB4MTAwIH0KKwl7ICJzeW1ib2xfc3AyNHRfcHJpbV9mdyIsICJzeW1ib2xfc3AyNHRfc2VjX2Z3IiwgIiIsIDB4MDAwMDMxMDAsIDUxMiB9CiB9OwogCiAvKiBTdHJ1Y3R1cmUgdXNlZCB0byBhY2Nlc3MgZmllbGRzIGluIEZXCkBAIC00NTgsNyArNDU4LDcgQEAKIAkJICAgIGludCBhcCkKIHsKIAkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLwotCV9fbGUxNiBwZGFbNTEyXSA9IHsgMCB9OworCV9fbGUxNiAqcGRhOwogCiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CkBAIC00NjcsNyArNDY3LDExIEBACiAJY29uc3QgdW5zaWduZWQgY2hhciAqZW5kOwogCWNvbnN0IGNoYXIgKmZpcm13YXJlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CisKKwlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGEpCisJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGFwKQogCQlmaXJtd2FyZSA9IGZ3LT5hcF9mdzsKQEAgLTQ3OCwxNyArNDgyLDE3IEBACiAJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOwogCiAJLyogUmVhZCBjdXJyZW50IHBsdWcgZGF0YSAqLwotCWVyciA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsCi0JCQkgICAgICBtaW5fdCh1MTYsIGZ3LT5wZGFfc2l6ZSwgc2l6ZW9mKHBkYSkpLCAwKTsKKwllcnIgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDApOwogCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVhZCBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGZyZWU7CiAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZmlybXdhcmUsIHByaXYtPmRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZSAlc1xuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBmcmVlOwogCX0KIAogCWhkciA9IChjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKikgZndfZW50cnktPmRhdGE7CkBAIC01MzIsNiArNTM2LDkgQEAKIAogYWJvcnQ6CiAJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisKK2ZyZWU6CisJa2ZyZWUocGRhKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01NDksMTIgKzU1NiwxMiBAQAogCQlpbnQgc2Vjb25kYXJ5KQogewogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpmaXJzdF9ibG9jazsKIAogCS8qIFBsdWcgRGF0YSBBcmVhIChQREEpICovCi0JX19sZTE2IHBkYVsyNTZdOworCV9fbGUxNiAqcGRhID0gTlVMTDsKIAogCS8qIEJpbmFyeSBibG9jayBiZWdpbnMgYWZ0ZXIgdGhlIDB4MUEgbWFya2VyICovCiAJcHRyID0gaW1hZ2U7CkBAIC01NjMsMjggKzU3MCwzMyBAQAogCiAJLyogUmVhZCB0aGUgUERBIGZyb20gRUVQUk9NICovCiAJaWYgKHNlY29uZGFyeSkgewotCQlyZXQgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBzaXplb2YocGRhKSwgMSk7CisJCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZGEpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDEpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZnJlZTsKIAl9CiAKIAkvKiBTdG9wIHRoZSBmaXJtd2FyZSwgc28gdGhhdCBpdCBjYW4gYmUgc2FmZWx5IHJld3JpdHRlbiAqLwogCWlmIChwcml2LT5zdG9wX2Z3KSB7CiAJCXJldCA9IHByaXYtPnN0b3BfZncocHJpdiwgMSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBmcmVlOwogCX0KIAogCS8qIFByb2dyYW0gdGhlIGFkYXB0ZXIgd2l0aCBuZXcgZmlybXdhcmUgKi8KIAlyZXQgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBmcmVlOwogCiAJLyogV3JpdGUgdGhlIFBEQSB0byB0aGUgYWRhcHRlciAqLwogCWlmIChzZWNvbmRhcnkpIHsKIAkJc2l6ZV90IGxlbiA9IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGZpcnN0X2Jsb2NrKTsKIAkJcHRyID0gZmlyc3RfYmxvY2sgKyBsZW47CiAJCXJldCA9IGhlcm1lc19hcHBseV9wZGEoaHcsIHB0ciwgcGRhKTsKKwkJa2ZyZWUocGRhKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNjA4LDYgKzYyMCwxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiAwOworCitmcmVlOgorCWtmcmVlKHBkYSk7CisJcmV0dXJuIHJldDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKaW5kZXggMTE3YzdkMy4uMmQwMjJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYwpAQCAtMzA2LDggKzMwNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpwNTRfcmZfY2hpcHNbXSA9IHsgIk5VTEwiLCAiSW5kaWdvPyIsICJEdWV0dGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZyaXNiZWUiLCAiWGJvdyIsICJMb25nYm93IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnA1NF9yZl9jaGlwc1tdID0geyAiTlVMTCIsICJEdWV0dGUzIiwgIkR1ZXR0ZTIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZyaXNiZWUiLCAiWGJvdyIsICJMb25nYm93IiwgIk5VTEwiLCAiTlVMTCIgfTsKIHN0YXRpYyBpbnQgcDU0X2luaXRfeGJvd19zeW50aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwogCiBzdGF0aWMgaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pCkBAIC0zMTksNiArMzE5LDcgQEAKIAl2b2lkICp0bXA7CiAJaW50IGVycjsKIAl1OCAqZW5kID0gKHU4ICopZWVwcm9tICsgbGVuOworCXUxNiBzeW50aDsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCXdyYXAgPSAoc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqKSBlZXByb207CkBAIC00MDAsOCArNDAxLDggQEAKIAkJCXRtcCA9IGVudHJ5LT5kYXRhOwogCQkJd2hpbGUgKCh1OCAqKXRtcCA8IGVudHJ5LT5kYXRhICsgZGF0YV9sZW4pIHsKIAkJCQlzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKmV4cF9pZiA9IHRtcDsKLQkJCQlpZiAobGUxNl90b19jcHUoZXhwX2lmLT5pZl9pZCkgPT0gMHhGKQotCQkJCQlwcml2LT5yeGh3ID0gbGUxNl90b19jcHUoZXhwX2lmLT52YXJpYW50KSAmIDB4MDc7CisJCQkJaWYgKGxlMTZfdG9fY3B1KGV4cF9pZi0+aWZfaWQpID09IDB4ZikKKwkJCQkJc3ludGggPSBsZTE2X3RvX2NwdShleHBfaWYtPnZhcmlhbnQpOwogCQkJCXRtcCArPSBzaXplb2Yoc3RydWN0IGJvb3RyZWNfZXhwX2lmKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNDI3LDIyICs0MjgsMTMgQEAKIAkJZ290byBlcnI7CiAJfQogCi0Jc3dpdGNoIChwcml2LT5yeGh3KSB7Ci0JY2FzZSA0OiAvKiBYQm93ICovCisJcHJpdi0+cnhodyA9IHN5bnRoICYgMHgwNzsKKwlpZiAocHJpdi0+cnhodyA9PSA0KQogCQlwNTRfaW5pdF94Ym93X3N5bnRoKGRldik7Ci0JY2FzZSAxOiAvKiBJbmRpZ28/ICovCi0JY2FzZSAyOiAvKiBEdWV0dGUgKi8KLQkJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmYmFuZF81R0h6OwotCWNhc2UgMzogLyogRnJpc2JlZSAqLwotCWNhc2UgNTogLyogTG9uZ2JvdyAqLworCWlmICghKHN5bnRoICYgMHg0MCkpCiAJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmRfMkdIejsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5zdXBwb3J0ZWQgUkYtQ2hpcFxuIiwKLQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9CisJaWYgKCEoc3ludGggJiAweDgwKSkKKwkJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmYmFuZF81R0h6OwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+d2lwaHktPnBlcm1fYWRkcikpIHsKIAkJdTggcGVybV9hZGRyW0VUSF9BTEVOXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggNWM3YTg3ZS4uYzY5NDhkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTIzOSwxMSArMjM5LDE0IEBACiAJICovCiAJYmF0Y2hfdGFyZ2V0ID0gbnAtPnJ4X3RhcmdldCAtIChyZXFfcHJvZCAtIG5wLT5yeC5yc3BfY29ucyk7CiAJZm9yIChpID0gc2tiX3F1ZXVlX2xlbigmbnAtPnJ4X2JhdGNoKTsgaSA8IGJhdGNoX3RhcmdldDsgaSsrKSB7Ci0JCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIFJYX0NPUFlfVEhSRVNIT0xELAorCQlza2IgPSBfX25ldGRldl9hbGxvY19za2IoZGV2LCBSWF9DT1BZX1RIUkVTSE9MRCArIE5FVF9JUF9BTElHTiwKIAkJCQkJIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwogCQlpZiAodW5saWtlbHkoIXNrYikpCiAJCQlnb3RvIG5vX3NrYjsKIAorCQkvKiBBbGlnbiBpcCBoZWFkZXIgdG8gYSAxNiBieXRlcyBib3VuZGFyeSAqLworCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKIAkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJCWlmICghcGFnZSkgewogCQkJa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94dHNvbmljLmMgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0MmFhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3h0c29uaWMuYwpAQCAtMCwwICsxLDMxOSBAQAorLyoKKyAqIHh0c29uaWMuYworICoKKyAqIChDKSAyMDAxIC0gMjAwNyBUZW5zaWxpY2EgSW5jLgorICoJS2V2aW4gQ2hlYSA8a2NoZWFAeWFob28uY29tPgorICoJTWFyYyBHYXV0aGllciA8bWFyY0BsaW51eC14dGVuc2Eub3JnPgorICoJQ2hyaXMgWmFua2VsIDxjaHJpc0B6YW5rZWwubmV0PgorICoKKyAqIChDKSAxOTk2LDE5OTggYnkgVGhvbWFzIEJvZ2VuZG9lcmZlciAodHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB3b3JrIGZyb20gQW5kcmVhcyBCdXNzZSwgYnV0IG1vc3Qgb2YKKyAqIHRoZSBjb2RlIGlzIHJld3JpdHRlbi4KKyAqCisgKiAoQykgMTk5NSBieSBBbmRyZWFzIEJ1c3NlIChhbmR5QHdhbGRvcmYtZ21iaC5kZSkKKyAqCisgKiBBIGRyaXZlciBmb3IgdGhlIG9uYm9hcmQgU29uaWMgZXRoZXJuZXQgY29udHJvbGxlciBvbiB0aGUgWFQyMDAwLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworc3RhdGljIGNoYXIgeHRzb25pY19zdHJpbmdbXSA9ICJ4dHNvbmljIjsKKworZXh0ZXJuIHVuc2lnbmVkIHh0Ym9hcmRfbnZyYW1fdmFsaWQodm9pZCk7CitleHRlcm4gdm9pZCB4dGJvYXJkX2dldF9ldGhlcl9hZGRyKHVuc2lnbmVkIGNoYXIgKmJ1Zik7CisKKyNpbmNsdWRlICJzb25pYy5oIgorCisvKgorICogQWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU29uaWMgZXRoZXJuZXQgY29udHJvbGxlciwKKyAqIEVPQkMgc2hvdWxkIGJlIDc2MCB3b3JkcyAoMTUyMCBieXRlcykgZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnMsIGFuZCwKKyAqIGFzIHN1Y2gsIDIgd29yZHMgbGVzcyB0aGFuIHRoZSBidWZmZXIgc2l6ZS4gVGhlIHZhbHVlIGZvciBSQlNJWkUKKyAqIGRlZmluZWQgaW4gc29uaWMuaCwgaG93ZXZlciBpcyBvbmx5IDE1MjAuCisgKgorICogKE5vdGUgdGhhdCBpbiAxNi1iaXQgY29uZmlndXJhdGlvbnMsIEVPQkMgaXMgNzU5IHdvcmRzICgxNTE4IGJ5dGVzKSBhbmQKKyAqIFJCU0laRSAxNTIwIGJ5dGVzKQorICovCisjdW5kZWYgU09OSUNfUkJTSVpFCisjZGVmaW5lIFNPTklDX1JCU0laRQkxNTI0CisKKy8qCisgKiBUaGUgY2hpcCBwcm92aWRlcyAyNTYgYnl0ZSByZWdpc3RlciBzcGFjZS4KKyAqLworI2RlZmluZSBTT05JQ19NRU1fU0laRQkweDEwMAorCisvKgorICogTWFjcm9zIHRvIGFjY2VzcyBTT05JQyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBTT05JQ19SRUFEKHJlZykgXAorCSgweGZmZmYgJiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilkZXYtPmJhc2VfYWRkcityZWcpKQorCisjZGVmaW5lIFNPTklDX1dSSVRFKHJlZyx2YWwpIFwKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilkZXYtPmJhc2VfYWRkcityZWcpID0gdmFsCisKKworLyogVXNlIDAgZm9yIHByb2R1Y3Rpb24sIDEgZm9yIHZlcmlmaWNhdGlvbiwgYW5kID4yIGZvciBkZWJ1ZyAqLworI2lmZGVmIFNPTklDX0RFQlVHCitzdGF0aWMgdW5zaWduZWQgaW50IHNvbmljX2RlYnVnID0gU09OSUNfREVCVUc7CisjZWxzZQorc3RhdGljIHVuc2lnbmVkIGludCBzb25pY19kZWJ1ZyA9IDE7CisjZW5kaWYKKworLyoKKyAqIFdlIGNhbm5vdCB1c2Ugc3RhdGlvbiAoZXRoZXJuZXQpIGFkZHJlc3MgcHJlZml4ZXMgdG8gZGV0ZWN0IHRoZQorICogc29uaWMgY29udHJvbGxlciBzaW5jZSB0aGVzZSBhcmUgYm9hcmQgbWFudWZhY3R1cmVyIGRlcGVuZGVkLgorICogU28gd2UgY2hlY2sgZm9yIGtub3duIFNpbGljb24gUmV2aXNpb24gSURzIGluc3RlYWQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBrbm93bl9yZXZpc2lvbnNbXSA9Cit7CisJMHgxMDEsCQkJLyogU09OSUMgODM5MzQgKi8KKwkweGZmZmYJCQkvKiBlbmQgb2YgbGlzdCAqLworfTsKKworc3RhdGljIGludCB4dHNvbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsJnNvbmljX2ludGVycnVwdCxJUlFGX0RJU0FCTEVELCJzb25pYyIsZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXJldHVybiBzb25pY19vcGVuKGRldik7Cit9CisKK3N0YXRpYyBpbnQgeHRzb25pY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBlcnI7CisJZXJyID0gc29uaWNfY2xvc2UoZGV2KTsKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzb25pY19wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkID0gMDsKKwl1bnNpZ25lZCBpbnQgc2lsaWNvbl9yZXZpc2lvbjsKKwlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgYmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihiYXNlX2FkZHIsIDB4MTAwLCB4dHNvbmljX3N0cmluZykpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKgorCSAqIGdldCB0aGUgU2lsaWNvbiBSZXZpc2lvbiBJRC4gSWYgdGhpcyBpcyBvbmUgb2YgdGhlIGtub3duCisJICogb25lIGFzc3VtZSB0aGF0IHdlIGZvdW5kIGEgU09OSUMgZXRoZXJuZXQgY29udHJvbGxlciBhdAorCSAqIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KKwkgKi8KKwlzaWxpY29uX3JldmlzaW9uID0gU09OSUNfUkVBRChTT05JQ19TUik7CisJaWYgKHNvbmljX2RlYnVnID4gMSkKKwkJcHJpbnRrKCJTT05JQyBTaWxpY29uIFJldmlzaW9uID0gMHglMDR4XG4iLHNpbGljb25fcmV2aXNpb24pOworCisJaSA9IDA7CisJd2hpbGUgKChrbm93bl9yZXZpc2lvbnNbaV0gIT0gMHhmZmZmKSAmJgorCQkJKGtub3duX3JldmlzaW9uc1tpXSAhPSBzaWxpY29uX3JldmlzaW9uKSkKKwkJaSsrOworCisJaWYgKGtub3duX3JldmlzaW9uc1tpXSA9PSAweGZmZmYpIHsKKwkJcHJpbnRrKCJTT05JQyBldGhlcm5ldCBjb250cm9sbGVyIG5vdCBmb3VuZCAoMHglNHgpXG4iLAorCQkJCXNpbGljb25fcmV2aXNpb24pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoc29uaWNfZGVidWcgICYmICB2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQorCQlwcmludGsodmVyc2lvbik7CisKKwkvKgorCSAqIFB1dCB0aGUgc29uaWMgaW50byBzb2Z0d2FyZSByZXNldCwgdGhlbiByZXRyaWV2ZSBldGhlcm5ldCBhZGRyZXNzLgorCSAqIE5vdGU6IHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBib290LWxvYWRlciBoYXMgaW5pdGlhbGl6ZWQgdGhlIGNhbS4KKwkgKi8KKwlTT05JQ19XUklURShTT05JQ19DTUQsU09OSUNfQ1JfUlNUKTsKKwlTT05JQ19XUklURShTT05JQ19EQ1IsCisJCSAgICBTT05JQ19EQ1JfV0MwfFNPTklDX0RDUl9EV3xTT05JQ19EQ1JfTEJSfFNPTklDX0RDUl9TQlVTKTsKKwlTT05JQ19XUklURShTT05JQ19DRVAsMCk7CisJU09OSUNfV1JJVEUoU09OSUNfSU1SLDApOworCisJU09OSUNfV1JJVEUoU09OSUNfQ01ELFNPTklDX0NSX1JTVCk7CisJU09OSUNfV1JJVEUoU09OSUNfQ0VQLDApOworCisJZm9yIChpPTA7IGk8MzsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSBTT05JQ19SRUFEKFNPTklDX0NBUDAtaSk7CisJCWRldi0+ZGV2X2FkZHJbaSoyXSA9IHZhbDsKKwkJZGV2LT5kZXZfYWRkcltpKjIrMV0gPSB2YWwgPj4gODsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLworCisJbHAtPmRtYV9iaXRtb2RlID0gU09OSUNfQklUTU9ERTMyOworCisJLyoKKwkgKiAgQWxsb2NhdGUgbG9jYWwgcHJpdmF0ZSBkZXNjcmlwdG9yIGFyZWFzIGluIHVuY2FjaGVkIHNwYWNlLgorCSAqICBUaGUgZW50aXJlIHN0cnVjdHVyZSBtdXN0IGJlIGxvY2F0ZWQgd2l0aGluIHRoZSBzYW1lIDY0a2Igc2VnbWVudC4KKwkgKiAgQSBzaW1wbGUgd2F5IHRvIGVuc3VyZSB0aGlzIGlzIHRvIGFsbG9jYXRlIHR3aWNlIHRoZQorCSAqICBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgLS0gZ2l2ZW4gdGhhdCB0aGUgc3RydWN0dXJlIGlzCisJICogIG11Y2ggbGVzcyB0aGFuIDY0IGtCLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGhhbHZlcyBvZgorCSAqICB0aGUgYWxsb2NhdGVkIGFyZWEgd2lsbCBiZSBjb250YWluZWQgZW50aXJlbHkgaW4gNjQga0IuCisJICogIFdlIGFsc28gYWxsb2NhdGUgZXh0cmEgc3BhY2UgZm9yIGEgcG9pbnRlciB0byBhbGxvdyBmcmVlaW5nCisJICogIHRoaXMgc3RydWN0dXJlIGxhdGVyIG9uIChpbiB4dHNvbmljX2NsZWFudXBfbW9kdWxlKCkpLgorCSAqLworCWxwLT5kZXNjcmlwdG9ycyA9CisJCWRtYV9hbGxvY19jb2hlcmVudChscC0+ZGV2aWNlLAorCQkJU0laRU9GX1NPTklDX0RFU0MgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSwKKwkJCSZscC0+ZGVzY3JpcHRvcnNfbGFkZHIsIEdGUF9LRVJORUwpOworCisJaWYgKGxwLT5kZXNjcmlwdG9ycyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkbid0IGFsbG9jIERNQSBtZW1vcnkgZm9yICIKKwkJCQkiIGRlc2NyaXB0b3JzLlxuIiwgbHAtPmRldmljZS0+YnVzX2lkKTsKKwkJZ290byBvdXQ7CisJfQorCisJbHAtPmNkYSA9IGxwLT5kZXNjcmlwdG9yczsKKwlscC0+dGRhID0gbHAtPmNkYSArIChTSVpFT0ZfU09OSUNfQ0RBCisJCQkgICAgICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSkpOworCWxwLT5yZGEgPSBscC0+dGRhICsgKFNJWkVPRl9TT05JQ19URCAqIFNPTklDX05VTV9URFMKKwkJCSAgICAgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSk7CisJbHAtPnJyYSA9IGxwLT5yZGEgKyAoU0laRU9GX1NPTklDX1JEICogU09OSUNfTlVNX1JEUworCQkJICAgICAqIFNPTklDX0JVU19TQ0FMRShscC0+ZG1hX2JpdG1vZGUpKTsKKworCS8qIGdldCB0aGUgdmlydHVhbCBkbWEgYWRkcmVzcyAqLworCisJbHAtPmNkYV9sYWRkciA9IGxwLT5kZXNjcmlwdG9yc19sYWRkcjsKKwlscC0+dGRhX2xhZGRyID0gbHAtPmNkYV9sYWRkciArIChTSVpFT0ZfU09OSUNfQ0RBCisJCQkJICAgICAgICAgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSk7CisJbHAtPnJkYV9sYWRkciA9IGxwLT50ZGFfbGFkZHIgKyAoU0laRU9GX1NPTklDX1REICogU09OSUNfTlVNX1REUworCQkJCQkgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSk7CisJbHAtPnJyYV9sYWRkciA9IGxwLT5yZGFfbGFkZHIgKyAoU0laRU9GX1NPTklDX1JEICogU09OSUNfTlVNX1JEUworCQkJCQkgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSk7CisKKwlkZXYtPm9wZW4gPSB4dHNvbmljX29wZW47CisJZGV2LT5zdG9wID0geHRzb25pY19jbG9zZTsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHNvbmljX3NlbmRfcGFja2V0OworCWRldi0+Z2V0X3N0YXRzCQk9IHNvbmljX2dldF9zdGF0czsKKwlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdAk9ICZzb25pY19tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPnR4X3RpbWVvdXQJCT0gc29uaWNfdHhfdGltZW91dDsKKwlkZXYtPndhdGNoZG9nX3RpbWVvCT0gVFhfVElNRU9VVDsKKworCS8qCisJICogY2xlYXIgdGFsbHkgY291bnRlcgorCSAqLworCVNPTklDX1dSSVRFKFNPTklDX0NSQ1QsMHhmZmZmKTsKKwlTT05JQ19XUklURShTT05JQ19GQUVULDB4ZmZmZik7CisJU09OSUNfV1JJVEUoU09OSUNfTVBULDB4ZmZmZik7CisKKwlyZXR1cm4gMDsKK291dDoKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU09OSUNfTUVNX1NJWkUpOworCXJldHVybiBlcnI7Cit9CisKKworLyoKKyAqIFByb2JlIGZvciBhIFNPTklDIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gYW4gWFQyMDAwIGJvYXJkLgorICogQWN0dWFsbHkgcHJvYmluZyBpcyBzdXBlcmZsdW91cyBidXQgd2UncmUgcGFyYW5vaWQuCisgKi8KKworaW50IF9faW5pdCB4dHNvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzbWVtLCAqcmVzaXJxOworCWludCBlcnIgPSAwOworCisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZiAoKHJlc21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChyZXNpcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBzb25pY19sb2NhbCkpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlscC0+ZGV2aWNlID0gJnBkZXYtPmRldjsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CisKKwlkZXYtPmJhc2VfYWRkciA9IHJlc21lbS0+c3RhcnQ7CisJZGV2LT5pcnEgPSByZXNpcnEtPnN0YXJ0OworCisJaWYgKChlcnIgPSBzb25pY19wcm9iZTEoZGV2KSkpCisJCWdvdG8gb3V0OworCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldikpKQorCQlnb3RvIG91dDE7CisKKwlwcmludGsoIiVzOiBTT05JQyBldGhlcm5ldCBAJTA4bHgsIE1BQyAlcywgSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIGRldi0+YmFzZV9hZGRyLCBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSwgZGV2LT5pcnEpOworCisJcmV0dXJuIDA7CisKK291dDE6CisJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFNPTklDX01FTV9TSVpFKTsKK291dDoKKwlmcmVlX25ldGRldihkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGVuc2EgWFQyMDAwIFNPTklDIGV0aGVybmV0IGRyaXZlciIpOworbW9kdWxlX3BhcmFtKHNvbmljX2RlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzb25pY19kZWJ1ZywgInh0c29uaWMgZGVidWcgbGV2ZWwgKDEtNCkiKTsKKworI2luY2x1ZGUgInNvbmljLmMiCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHh0c29uaWNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNvbmljX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCWRtYV9mcmVlX2NvaGVyZW50KGxwLT5kZXZpY2UsCisJCQkgIFNJWkVPRl9TT05JQ19ERVNDICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSksCisJCQkgIGxwLT5kZXNjcmlwdG9ycywgbHAtPmRlc2NyaXB0b3JzX2xhZGRyKTsKKwlyZWxlYXNlX3JlZ2lvbiAoZGV2LT5iYXNlX2FkZHIsIFNPTklDX01FTV9TSVpFKTsKKwlmcmVlX25ldGRldihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHh0c29uaWNfZHJpdmVyID0geworCS5wcm9iZSA9IHh0c29uaWNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHh0c29uaWNfZGV2aWNlX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSB4dHNvbmljX3N0cmluZywKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRzb25pY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeHRzb25pY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRzb25pY19jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnh0c29uaWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoeHRzb25pY19pbml0KTsKK21vZHVsZV9leGl0KHh0c29uaWNfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX2kyYy5jIGIvZHJpdmVycy9vZi9vZl9pMmMuYwppbmRleCA2YTk4ZGM4Li4yNGJiZWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX2kyYy5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAogCQlpbmZvLmFkZHIgPSAqYWRkcjsKIAotCQlyZXF1ZXN0X21vZHVsZShpbmZvLnR5cGUpOworCQlyZXF1ZXN0X21vZHVsZSgiJXMiLCBpbmZvLnR5cGUpOwogCiAJCXJlc3VsdCA9IGkyY19uZXdfZGV2aWNlKGFkYXAsICZpbmZvKTsKIAkJaWYgKHJlc3VsdCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX3NwaS5jIGIvZHJpdmVycy9vZi9vZl9zcGkuYwppbmRleCBiMDFlZWMwLi5iZWQwZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX3NwaS5jCisrKyBiL2RyaXZlcnMvb2Yvb2Zfc3BpLmMKQEAgLTYxLDYgKzYxLDggQEAKIAkJCXNwaS0+bW9kZSB8PSBTUElfQ1BIQTsKIAkJaWYgKG9mX2ZpbmRfcHJvcGVydHkobmMsICJzcGktY3BvbCIsIE5VTEwpKQogCQkJc3BpLT5tb2RlIHw9IFNQSV9DUE9MOworCQlpZiAob2ZfZmluZF9wcm9wZXJ0eShuYywgInNwaS1jcy1oaWdoIiwgTlVMTCkpCisJCQlzcGktPm1vZGUgfD0gU1BJX0NTX0hJR0g7CiAKIAkJLyogRGV2aWNlIHNwZWVkICovCiAJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobmMsICJzcGktbWF4LWZyZXF1ZW5jeSIsICZsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCmluZGV4IGVkOTgyMjcuLmI1NWNkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKQEAgLTQxLDcgKzQxLDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19tb3J0dWFyeSk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzX3Rhc2tfbW9ydHVhcnkodm9pZCk7CiAKLQogLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIHRhc2sgc3RydWN0IGFuZCBwbGFjZSBpdCBvbiB0aGUKICAqIGxpc3QgZm9yIHByb2Nlc3NpbmcuIE9ubHkgYWZ0ZXIgdHdvIGZ1bGwgYnVmZmVyIHN5bmNzCiAgKiBkb2VzIHRoZSB0YXNrIGV2ZW50dWFsbHkgZ2V0IGZyZWVkLCBiZWNhdXNlIGJ5IHRoZW4KQEAgLTM0MSw3ICszNDAsNyBAQAogICogQWRkIElCUyBmZXRjaCBhbmQgb3AgZW50cmllcyB0byBldmVudCBidWZmZXIKICAqLwogc3RhdGljIHZvaWQgYWRkX2lic19iZWdpbihzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiwgaW50IGNvZGUsCi0JaW50IGluX2tlcm5lbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCisJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXVuc2lnbmVkIGxvbmcgcmlwOwogCWludCBpLCBjb3VudDsKQEAgLTU2NSw5ICs1NjQsMTEgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldzsKIAl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IDA7CiAJaW50IGluX2tlcm5lbCA9IDE7Ci0JdW5zaWduZWQgaW50IGk7CiAJc3luY19idWZmZXJfc3RhdGUgc3RhdGUgPSBzYl9idWZmZXJfc3RhcnQ7CisjaWZuZGVmIENPTkZJR19PUFJPRklMRV9JQlMKKwl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTsKKyNlbmRpZgogCiAJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIApAQCAtNTc1LDkgKzU3NiwxMyBAQAogCiAJLyogUmVtZW1iZXIsIG9ubHkgd2UgY2FuIG1vZGlmeSB0YWlsX3BvcyAqLwogCisjaWZuZGVmIENPTkZJR19PUFJPRklMRV9JQlMKIAlhdmFpbGFibGUgPSBnZXRfc2xvdHMoY3B1X2J1Zik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYXZhaWxhYmxlOyArK2kpIHsKKyNlbHNlCisJd2hpbGUgKGdldF9zbG90cyhjcHVfYnVmKSkgeworI2VuZGlmCiAJCXN0cnVjdCBvcF9zYW1wbGUgKnMgPSAmY3B1X2J1Zi0+YnVmZmVyW2NwdV9idWYtPnRhaWxfcG9zXTsKIAogCQlpZiAoaXNfY29kZShzLT5laXApKSB7CkBAIC01OTMsMTIgKzU5OCwxMCBAQAogI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKIAkJCX0gZWxzZSBpZiAocy0+ZXZlbnQgPT0gSUJTX0ZFVENIX0JFR0lOKSB7CiAJCQkJc3RhdGUgPSBzYl9idF9zdGFydDsKLQkJCQlhZGRfaWJzX2JlZ2luKGNwdV9idWYsCi0JCQkJCUlCU19GRVRDSF9DT0RFLCBpbl9rZXJuZWwsIG1tKTsKKwkJCQlhZGRfaWJzX2JlZ2luKGNwdV9idWYsIElCU19GRVRDSF9DT0RFLCBtbSk7CiAJCQl9IGVsc2UgaWYgKHMtPmV2ZW50ID09IElCU19PUF9CRUdJTikgewogCQkJCXN0YXRlID0gc2JfYnRfc3RhcnQ7Ci0JCQkJYWRkX2lic19iZWdpbihjcHVfYnVmLAotCQkJCQlJQlNfT1BfQ09ERSwgaW5fa2VybmVsLCBtbSk7CisJCQkJYWRkX2lic19iZWdpbihjcHVfYnVmLCBJQlNfT1BfQ09ERSwgbW0pOwogI2VuZGlmCiAJCQl9IGVsc2UgewogCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tID0gbW07CkBAIC02MjgsMyArNjMxLDI3IEBACiAKIAltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CisKKy8qIFRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhZGQgYSBidWZmZXIgd29ydGggb2YgZGF0YSBkaXJlY3RseSB0bworICogdGhlIGtlcm5lbCBidWZmZXIuIFRoZSBidWZmZXIgaXMgYXNzdW1lZCB0byBiZSBhIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFRha2UgdGhlIGVudHJpZXMgZnJvbSBpbmRleCBzdGFydCBhbmQgZW5kIGF0IGluZGV4IGVuZCwgd3JhcHBpbmcKKyAqIGF0IG1heF9lbnRyaWVzLgorICovCit2b2lkIG9wcm9maWxlX3B1dF9idWZmKHVuc2lnbmVkIGxvbmcgKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHN0b3AsIHVuc2lnbmVkIGludCBtYXgpCit7CisJaW50IGk7CisKKwlpID0gc3RhcnQ7CisKKwltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOworCXdoaWxlIChpICE9IHN0b3ApIHsKKwkJYWRkX2V2ZW50X2VudHJ5KGJ1ZltpKytdKTsKKworCQlpZiAoaSA+PSBtYXgpCisJCQlpID0gMDsKKwl9CisKKwltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaAppbmRleCAwODg2NmY2Li4zMTEwNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmgKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oCkBAIC05LDEzICs5LDEzIEBACiAKICNpZm5kZWYgT1BST0ZJTEVfQlVGRkVSX1NZTkNfSAogI2RlZmluZSBPUFJPRklMRV9CVUZGRVJfU1lOQ19ICi0gCisKIC8qIGFkZCB0aGUgbmVjZXNzYXJ5IHByb2ZpbGluZyBob29rcyAqLwogaW50IHN5bmNfc3RhcnQodm9pZCk7CiAKIC8qIHJlbW92ZSB0aGUgaG9va3MgKi8KIHZvaWQgc3luY19zdG9wKHZvaWQpOwotIAorCiAvKiBzeW5jIHRoZSBnaXZlbiBDUFUncyBidWZmZXIgKi8KIHZvaWQgc3luY19idWZmZXIoaW50IGNwdSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKaW5kZXggZTFiZDVhOS4uMDFkMzhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotIAorCiAjaW5jbHVkZSAiZXZlbnRfYnVmZmVyLmgiCiAjaW5jbHVkZSAiY3B1X2J1ZmZlci5oIgogI2luY2x1ZGUgImJ1ZmZlcl9zeW5jLmgiCkBAIC0zOCwyNyArMzgsNDAgQEAKIHZvaWQgZnJlZV9jcHVfYnVmZmVycyh2b2lkKQogewogCWludCBpOwotIAotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdmZyZWUocGVyX2NwdShjcHVfYnVmZmVyLCBpKS5idWZmZXIpOwogCQlwZXJfY3B1KGNwdV9idWZmZXIsIGkpLmJ1ZmZlciA9IE5VTEw7CiAJfQogfQogCit1bnNpZ25lZCBsb25nIG9wcm9maWxlX2dldF9jcHVfYnVmZmVyX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gZnNfY3B1X2J1ZmZlcl9zaXplOworfQorCit2b2lkIG9wcm9maWxlX2NwdV9idWZmZXJfaW5jX3NtcGxfbG9zdCh2b2lkKQoreworCXN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmCisJCT0gJl9fZ2V0X2NwdV92YXIoY3B1X2J1ZmZlcik7CisKKwljcHVfYnVmLT5zYW1wbGVfbG9zdF9vdmVyZmxvdysrOworfQorCiBpbnQgYWxsb2NfY3B1X2J1ZmZlcnModm9pZCkKIHsKIAlpbnQgaTsKLSAKKwogCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3NpemUgPSBmc19jcHVfYnVmZmVyX3NpemU7Ci0gCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqYiA9ICZwZXJfY3B1KGNwdV9idWZmZXIsIGkpOwotIAorCiAJCWItPmJ1ZmZlciA9IHZtYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IG9wX3NhbXBsZSkgKiBidWZmZXJfc2l6ZSwKIAkJCWNwdV90b19ub2RlKGkpKTsKIAkJaWYgKCFiLT5idWZmZXIpCiAJCQlnb3RvIGZhaWw7Ci0gCisKIAkJYi0+bGFzdF90YXNrID0gTlVMTDsKIAkJYi0+bGFzdF9pc19rZXJuZWwgPSAtMTsKIAkJYi0+dHJhY2luZyA9IDA7CkBAIC0xMTIsNyArMTI1LDcgQEAKIH0KIAogLyogUmVzZXRzIHRoZSBjcHUgYnVmZmVyIHRvIGEgc2FuZSBzdGF0ZS4gKi8KLXZvaWQgY3B1X2J1ZmZlcl9yZXNldChzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqIGNwdV9idWYpCit2b2lkIGNwdV9idWZmZXJfcmVzZXQoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYpCiB7CiAJLyogcmVzZXQgdGhlc2UgdG8gaW52YWxpZCB2YWx1ZXM7IHRoZSBuZXh0IHNhbXBsZQogCSAqIGNvbGxlY3RlZCB3aWxsIHBvcHVsYXRlIHRoZSBidWZmZXIgd2l0aCBwcm9wZXIKQEAgLTEyMyw3ICsxMzYsNyBAQAogfQogCiAvKiBjb21wdXRlIG51bWJlciBvZiBhdmFpbGFibGUgc2xvdHMgaW4gY3B1X2J1ZmZlciBxdWV1ZSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlX3Nsb3RzKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyIGNvbnN0ICogYikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZV9zbG90cyhzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciBjb25zdCAqYikKIHsKIAl1bnNpZ25lZCBsb25nIGhlYWQgPSBiLT5oZWFkX3BvczsKIAl1bnNpZ25lZCBsb25nIHRhaWwgPSBiLT50YWlsX3BvczsKQEAgLTEzNCw3ICsxNDcsNyBAQAogCXJldHVybiB0YWlsICsgKGItPmJ1ZmZlcl9zaXplIC0gaGVhZCkgLSAxOwogfQogCi1zdGF0aWMgdm9pZCBpbmNyZW1lbnRfaGVhZChzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqIGIpCitzdGF0aWMgdm9pZCBpbmNyZW1lbnRfaGVhZChzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqYikKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19oZWFkID0gYi0+aGVhZF9wb3MgKyAxOwogCkBAIC0xNDksMTcgKzE2MiwxNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWFkZF9zYW1wbGUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKiBjcHVfYnVmLAotICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGV2ZW50KQorYWRkX3NhbXBsZShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiwKKwkgICB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGV2ZW50KQogewotCXN0cnVjdCBvcF9zYW1wbGUgKiBlbnRyeSA9ICZjcHVfYnVmLT5idWZmZXJbY3B1X2J1Zi0+aGVhZF9wb3NdOworCXN0cnVjdCBvcF9zYW1wbGUgKmVudHJ5ID0gJmNwdV9idWYtPmJ1ZmZlcltjcHVfYnVmLT5oZWFkX3Bvc107CiAJZW50cnktPmVpcCA9IHBjOwogCWVudHJ5LT5ldmVudCA9IGV2ZW50OwogCWluY3JlbWVudF9oZWFkKGNwdV9idWYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWFkZF9jb2RlKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICogYnVmZmVyLCB1bnNpZ25lZCBsb25nIHZhbHVlKQorYWRkX2NvZGUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKIAlhZGRfc2FtcGxlKGJ1ZmZlciwgRVNDQVBFX0NPREUsIHZhbHVlKTsKIH0KQEAgLTE3MywxMCArMTg2LDEwIEBACiAgKiBwYy4gV2UgdGFnIHRoaXMgaW4gdGhlIGJ1ZmZlciBieSBnZW5lcmF0aW5nIGtlcm5lbCBlbnRlci9leGl0CiAgKiBldmVudHMgd2hlbmV2ZXIgaXNfa2VybmVsIGNoYW5nZXMKICAqLwotc3RhdGljIGludCBsb2dfc2FtcGxlKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICogY3B1X2J1ZiwgdW5zaWduZWQgbG9uZyBwYywKK3N0YXRpYyBpbnQgbG9nX3NhbXBsZShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiwgdW5zaWduZWQgbG9uZyBwYywKIAkJICAgICAgaW50IGlzX2tlcm5lbCwgdW5zaWduZWQgbG9uZyBldmVudCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAogCWNwdV9idWYtPnNhbXBsZV9yZWNlaXZlZCsrOwogCkBAIC0yMDUsNyArMjE4LDcgQEAKIAkJY3B1X2J1Zi0+bGFzdF90YXNrID0gdGFzazsKIAkJYWRkX2NvZGUoY3B1X2J1ZiwgKHVuc2lnbmVkIGxvbmcpdGFzayk7CiAJfQotIAorCiAJYWRkX3NhbXBsZShjcHVfYnVmLCBwYywgZXZlbnQpOwogCXJldHVybiAxOwogfQpAQCAtMjIyLDcgKzIzNSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIG9wcm9maWxlX2VuZF90cmFjZShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqIGNwdV9idWYpCitzdGF0aWMgdm9pZCBvcHJvZmlsZV9lbmRfdHJhY2Uoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYpCiB7CiAJY3B1X2J1Zi0+dHJhY2luZyA9IDA7CiB9CkBAIC0yNTcsMjEgKzI3MCwyMyBAQAogCiAjaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwogCi0jZGVmaW5lIE1BWF9JQlNfU0FNUExFX1NJWkUJMTQKLXN0YXRpYyBpbnQgbG9nX2lic19zYW1wbGUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYsCi0JdW5zaWduZWQgbG9uZyBwYywgaW50IGlzX2tlcm5lbCwgdW5zaWduZWQgIGludCAqaWJzLCBpbnQgaWJzX2NvZGUpCisjZGVmaW5lIE1BWF9JQlNfU0FNUExFX1NJWkUgMTQKKwordm9pZCBvcHJvZmlsZV9hZGRfaWJzX3NhbXBsZShzdHJ1Y3QgcHRfcmVncyAqY29uc3QgcmVncywKKwkJCSAgICAgdW5zaWduZWQgaW50ICpjb25zdCBpYnNfc2FtcGxlLCBpbnQgaWJzX2NvZGUpCiB7CisJaW50IGlzX2tlcm5lbCA9ICF1c2VyX21vZGUocmVncyk7CisJc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYgPSAmX19nZXRfY3B1X3ZhcihjcHVfYnVmZmVyKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAKIAljcHVfYnVmLT5zYW1wbGVfcmVjZWl2ZWQrKzsKIAogCWlmIChucl9hdmFpbGFibGVfc2xvdHMoY3B1X2J1ZikgPCBNQVhfSUJTX1NBTVBMRV9TSVpFKSB7CisJCS8qIHdlIGNhbid0IGJhY2t0cmFjZSBzaW5jZSB3ZSBsb3N0IHRoZSBzb3VyY2Ugb2YgdGhpcyBldmVudCAqLwogCQljcHVfYnVmLT5zYW1wbGVfbG9zdF9vdmVyZmxvdysrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAotCWlzX2tlcm5lbCA9ICEhaXNfa2VybmVsOwotCiAJLyogbm90aWNlIGEgc3dpdGNoIGZyb20gdXNlci0+a2VybmVsIG9yIHZpY2UgdmVyc2EgKi8KIAlpZiAoY3B1X2J1Zi0+bGFzdF9pc19rZXJuZWwgIT0gaXNfa2VybmVsKSB7CiAJCWNwdV9idWYtPmxhc3RfaXNfa2VybmVsID0gaXNfa2VybmVsOwpAQCAtMjgxLDcgKzI5Niw2IEBACiAJLyogbm90aWNlIGEgdGFzayBzd2l0Y2ggKi8KIAlpZiAoIWlzX2tlcm5lbCkgewogCQl0YXNrID0gY3VycmVudDsKLQogCQlpZiAoY3B1X2J1Zi0+bGFzdF90YXNrICE9IHRhc2spIHsKIAkJCWNwdV9idWYtPmxhc3RfdGFzayA9IHRhc2s7CiAJCQlhZGRfY29kZShjcHVfYnVmLCAodW5zaWduZWQgbG9uZyl0YXNrKTsKQEAgLTI4OSwzNiArMzAzLDE3IEBACiAJfQogCiAJYWRkX2NvZGUoY3B1X2J1ZiwgaWJzX2NvZGUpOwotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzBdLCBpYnNbMV0pOwotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzJdLCBpYnNbM10pOwotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzRdLCBpYnNbNV0pOworCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVswXSwgaWJzX3NhbXBsZVsxXSk7CisJYWRkX3NhbXBsZShjcHVfYnVmLCBpYnNfc2FtcGxlWzJdLCBpYnNfc2FtcGxlWzNdKTsKKwlhZGRfc2FtcGxlKGNwdV9idWYsIGlic19zYW1wbGVbNF0sIGlic19zYW1wbGVbNV0pOwogCiAJaWYgKGlic19jb2RlID09IElCU19PUF9CRUdJTikgewotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzZdLCBpYnNbN10pOwotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzhdLCBpYnNbOV0pOwotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzEwXSwgaWJzWzExXSk7CisJCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVs2XSwgaWJzX3NhbXBsZVs3XSk7CisJCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVs4XSwgaWJzX3NhbXBsZVs5XSk7CisJCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVsxMF0sIGlic19zYW1wbGVbMTFdKTsKIAl9CiAKLQlyZXR1cm4gMTsKLX0KLQotdm9pZCBvcHJvZmlsZV9hZGRfaWJzX3NhbXBsZShzdHJ1Y3QgcHRfcmVncyAqY29uc3QgcmVncywKLQkJCQl1bnNpZ25lZCBpbnQgKiBjb25zdCBpYnNfc2FtcGxlLCB1OCBjb2RlKQotewotCWludCBpc19rZXJuZWwgPSAhdXNlcl9tb2RlKHJlZ3MpOwotCXVuc2lnbmVkIGxvbmcgcGMgPSBwcm9maWxlX3BjKHJlZ3MpOwotCi0Jc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYgPQotCQkJICZwZXJfY3B1KGNwdV9idWZmZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlpZiAoIWJhY2t0cmFjZV9kZXB0aCkgewotCQlsb2dfaWJzX3NhbXBsZShjcHVfYnVmLCBwYywgaXNfa2VybmVsLCBpYnNfc2FtcGxlLCBjb2RlKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGlmIGxvZ19zYW1wbGUoKSBmYWlscyB3ZSBjYW4ndCBiYWNrdHJhY2Ugc2luY2Ugd2UgbG9zdCB0aGUgc291cmNlCi0JKiBvZiB0aGlzIGV2ZW50ICovCi0JaWYgKGxvZ19pYnNfc2FtcGxlKGNwdV9idWYsIHBjLCBpc19rZXJuZWwsIGlic19zYW1wbGUsIGNvZGUpKQorCWlmIChiYWNrdHJhY2VfZGVwdGgpCiAJCW9wcm9maWxlX29wcy5iYWNrdHJhY2UocmVncywgYmFja3RyYWNlX2RlcHRoKTsKIH0KIApAQCAtMzYzLDExICszNTgsMTYgQEAKICAqLwogc3RhdGljIHZvaWQgd3Ffc3luY19idWZmZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICogYiA9CisJc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmIgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIsIHdvcmsud29yayk7CiAJaWYgKGItPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIldRIG9uIENQVSVkLCBwcmVmZXIgQ1BVJWRcbiIsCiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIGItPmNwdSk7CisKKwkJaWYgKCFjcHVfb25saW5lKGItPmNwdSkpIHsKKwkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmItPndvcmspOworCQkJcmV0dXJuOworCQl9CiAJfQogCXN5bmNfYnVmZmVyKGItPmNwdSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmgKaW5kZXggOWM0NGQwMC4uZDNjYzI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmgKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmgKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0gCisKIHN0cnVjdCB0YXNrX3N0cnVjdDsKLSAKKwogaW50IGFsbG9jX2NwdV9idWZmZXJzKHZvaWQpOwogdm9pZCBmcmVlX2NwdV9idWZmZXJzKHZvaWQpOwogCkBAIC0zMSwxNSArMzEsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGVpcDsKIAl1bnNpZ25lZCBsb25nIGV2ZW50OwogfTsKLSAKKwogc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgewogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaGVhZF9wb3M7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0YWlsX3BvczsKIAl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9zaXplOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqIGxhc3RfdGFzazsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFzazsKIAlpbnQgbGFzdF9pc19rZXJuZWw7CiAJaW50IHRyYWNpbmc7Ci0Jc3RydWN0IG9wX3NhbXBsZSAqIGJ1ZmZlcjsKKwlzdHJ1Y3Qgb3Bfc2FtcGxlICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfcmVjZWl2ZWQ7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfbG9zdF9vdmVyZmxvdzsKIAl1bnNpZ25lZCBsb25nIGJhY2t0cmFjZV9hYm9ydGVkOwpAQCAtNTAsNyArNTAsNyBAQAogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIsIGNwdV9idWZmZXIpOwogCi12b2lkIGNwdV9idWZmZXJfcmVzZXQoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKiBjcHVfYnVmKTsKK3ZvaWQgY3B1X2J1ZmZlcl9yZXNldChzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1Zik7CiAKIC8qIHRyYW5zaWVudCBldmVudHMgZm9yIHRoZSBDUFUgYnVmZmVyIC0+IGV2ZW50IGJ1ZmZlciAqLwogI2RlZmluZSBDUFVfSVNfS0VSTkVMIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMgYi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCmluZGV4IDhkNjkyYTUuLmQ5NjJiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYwpAQCAtMTksMTYgKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvZGNvb2tpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0gCisKICNpbmNsdWRlICJvcHJvZi5oIgogI2luY2x1ZGUgImV2ZW50X2J1ZmZlci5oIgogI2luY2x1ZGUgIm9wcm9maWxlX3N0YXRzLmgiCiAKIERFRklORV9NVVRFWChidWZmZXJfbXV0ZXgpOwotIAorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidWZmZXJfb3BlbmVkOwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGJ1ZmZlcl93YWl0KTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nICogZXZlbnRfYnVmZmVyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmV2ZW50X2J1ZmZlcjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1ZmZlcl9zaXplOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVmZmVyX3dhdGVyc2hlZDsKIHN0YXRpYyBzaXplX3QgYnVmZmVyX3BvczsKQEAgLTY2LDcgKzY2LDcgQEAKIAltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CiAKLSAKKwogaW50IGFsbG9jX2V2ZW50X2J1ZmZlcih2b2lkKQogewogCWludCBlcnIgPSAtRU5PTUVNOwpAQCAtNzYsMTMgKzc2LDEzIEBACiAJYnVmZmVyX3NpemUgPSBmc19idWZmZXJfc2l6ZTsKIAlidWZmZXJfd2F0ZXJzaGVkID0gZnNfYnVmZmVyX3dhdGVyc2hlZDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcHJvZmlsZWZzX2xvY2ssIGZsYWdzKTsKLSAKKwogCWlmIChidWZmZXJfd2F0ZXJzaGVkID49IGJ1ZmZlcl9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKLSAKKwogCWV2ZW50X2J1ZmZlciA9IHZtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogYnVmZmVyX3NpemUpOwogCWlmICghZXZlbnRfYnVmZmVyKQotCQlnb3RvIG91dDsgCisJCWdvdG8gb3V0OwogCiAJZXJyID0gMDsKIG91dDoKQEAgLTk3LDggKzk3LDggQEAKIAlldmVudF9idWZmZXIgPSBOVUxMOwogfQogCi0gCi1zdGF0aWMgaW50IGV2ZW50X2J1ZmZlcl9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCisKK3N0YXRpYyBpbnQgZXZlbnRfYnVmZmVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaW50IGVyciA9IC1FUEVSTTsKIApAQCAtMTE2LDE0ICsxMTYsMTQgQEAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkY29va2llX3JlZ2lzdGVyKCk7CiAJaWYgKCFmaWxlLT5wcml2YXRlX2RhdGEpCiAJCWdvdG8gb3V0OwotCQkgCisKIAlpZiAoKGVyciA9IG9wcm9maWxlX3NldHVwKCkpKQogCQlnb3RvIGZhaWw7CiAKIAkvKiBOQjogdGhlIGFjdHVhbCBzdGFydCBoYXBwZW5zIGZyb20gdXNlcnNwYWNlCiAJICogZWNobyAxID4vZGV2L29wcm9maWxlL2VuYWJsZQogCSAqLwotIAorCiAJcmV0dXJuIDA7CiAKIGZhaWw6CkBAIC0xMzQsNyArMTM0LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGV2ZW50X2J1ZmZlcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCitzdGF0aWMgaW50IGV2ZW50X2J1ZmZlcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCW9wcm9maWxlX3N0b3AoKTsKIAlvcHJvZmlsZV9zaHV0ZG93bigpOwpAQCAtMTQ2LDggKzE0Niw4IEBACiB9CiAKIAotc3RhdGljIHNzaXplX3QgZXZlbnRfYnVmZmVyX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKLQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCitzdGF0aWMgc3NpemVfdCBldmVudF9idWZmZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAlzaXplX3QgY29uc3QgbWF4ID0gYnVmZmVyX3NpemUgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CkBAIC0xNzIsMTggKzE3MiwxOCBAQAogCXJldHZhbCA9IC1FRkFVTFQ7CiAKIAljb3VudCA9IGJ1ZmZlcl9wb3MgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci0gCisKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgZXZlbnRfYnVmZmVyLCBjb3VudCkpCiAJCWdvdG8gb3V0OwogCiAJcmV0dmFsID0gY291bnQ7CiAJYnVmZmVyX3BvcyA9IDA7Ci0gCisKIG91dDoKIAltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KLSAKKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBldmVudF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbgkJPSBldmVudF9idWZmZXJfb3BlbiwKIAkucmVsZWFzZQk9IGV2ZW50X2J1ZmZlcl9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmgKaW5kZXggNTA3NmVkMS4uNGU3MDc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuaAorKysgYi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5oCkBAIC0xMCwxMyArMTAsMjAgQEAKICNpZm5kZWYgRVZFTlRfQlVGRkVSX0gKICNkZWZpbmUgRVZFTlRfQlVGRkVSX0gKIAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+IAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL211dGV4Lmg+Ci0gCisKIGludCBhbGxvY19ldmVudF9idWZmZXIodm9pZCk7CiAKIHZvaWQgZnJlZV9ldmVudF9idWZmZXIodm9pZCk7Ci0gCisKKy8qKgorICogQWRkIGRhdGEgdG8gdGhlIGV2ZW50IGJ1ZmZlci4KKyAqIFRoZSBkYXRhIHBhc3NlZCBpcyBmcmVlLWZvcm0sIGJ1dCB0eXBpY2FsbHkgY29uc2lzdHMgb2YKKyAqIGZpbGUgb2Zmc2V0cywgZGNvb2tpZXMsIGNvbnRleHQgaW5mb3JtYXRpb24sIGFuZCBFU0NBUEUgY29kZXMuCisgKi8KK3ZvaWQgYWRkX2V2ZW50X2VudHJ5KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKIC8qIHdha2UgdXAgdGhlIHByb2Nlc3Mgc2xlZXBpbmcgb24gdGhlIGV2ZW50IGZpbGUgKi8KIHZvaWQgd2FrZV91cF9idWZmZXJfd2FpdGVyKHZvaWQpOwogCkBAIC0yNCwxMCArMzEsMTAgQEAKICNkZWZpbmUgTk9fQ09PS0lFIDBVTAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBldmVudF9idWZmZXJfZm9wczsKLSAKKwogLyogbXV0ZXggYmV0d2VlbiBzeW5jX2NwdV9idWZmZXJzKCkgYW5kIHRoZQogICogZmlsZSByZWFkaW5nIGNvZGUuCiAgKi8KIGV4dGVybiBzdHJ1Y3QgbXV0ZXggYnVmZmVyX211dGV4OwotIAorCiAjZW5kaWYgLyogRVZFTlRfQlVGRkVSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYwppbmRleCAyYzY0NTE3Li5jZDM3NTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSAiY3B1X2J1ZmZlci5oIgogI2luY2x1ZGUgImJ1ZmZlcl9zeW5jLmgiCiAjaW5jbHVkZSAib3Byb2ZpbGVfc3RhdHMuaCIKLSAKKwogc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgb3Byb2ZpbGVfb3BzOwogCiB1bnNpZ25lZCBsb25nIG9wcm9maWxlX3N0YXJ0ZWQ7CkBAIC0zNiw3ICszNiw3IEBACiBpbnQgb3Byb2ZpbGVfc2V0dXAodm9pZCkKIHsKIAlpbnQgZXJyOwotIAorCiAJbXV0ZXhfbG9jaygmc3RhcnRfbXV0ZXgpOwogCiAJaWYgKChlcnIgPSBhbGxvY19jcHVfYnVmZmVycygpKSkKQEAgLTQ0LDEwICs0NCwxMCBAQAogCiAJaWYgKChlcnIgPSBhbGxvY19ldmVudF9idWZmZXIoKSkpCiAJCWdvdG8gb3V0MTsKLSAKKwogCWlmIChvcHJvZmlsZV9vcHMuc2V0dXAgJiYgKGVyciA9IG9wcm9maWxlX29wcy5zZXR1cCgpKSkKIAkJZ290byBvdXQyOwotIAorCiAJLyogTm90ZSBldmVuIHRob3VnaCB0aGlzIHN0YXJ0cyBwYXJ0IG9mIHRoZQogCSAqIHByb2ZpbGluZyBvdmVyaGVhZCwgaXQncyBuZWNlc3NhcnkgdG8gcHJldmVudAogCSAqIHVzIG1pc3NpbmcgdGFzayBkZWF0aHMgYW5kIGV2ZW50dWFsbHkgb29wc2luZwpAQCAtNzQsNyArNzQsNyBAQAogCWlzX3NldHVwID0gMTsKIAltdXRleF91bmxvY2soJnN0YXJ0X211dGV4KTsKIAlyZXR1cm4gMDsKLSAKKwogb3V0MzoKIAlpZiAob3Byb2ZpbGVfb3BzLnNodXRkb3duKQogCQlvcHJvZmlsZV9vcHMuc2h1dGRvd24oKTsKQEAgLTkyLDE3ICs5MiwxNyBAQAogaW50IG9wcm9maWxlX3N0YXJ0KHZvaWQpCiB7CiAJaW50IGVyciA9IC1FSU5WQUw7Ci0gCisKIAltdXRleF9sb2NrKCZzdGFydF9tdXRleCk7Ci0gCisKIAlpZiAoIWlzX3NldHVwKQogCQlnb3RvIG91dDsKIAotCWVyciA9IDA7IAotIAorCWVyciA9IDA7CisKIAlpZiAob3Byb2ZpbGVfc3RhcnRlZCkKIAkJZ290byBvdXQ7Ci0gCisKIAlvcHJvZmlsZV9yZXNldF9zdGF0cygpOwogCiAJaWYgKChlcnIgPSBvcHJvZmlsZV9vcHMuc3RhcnQoKSkpCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0gCisKIC8qIGVjaG8gMD4vZGV2L29wcm9maWxlL2VuYWJsZSAqLwogdm9pZCBvcHJvZmlsZV9zdG9wKHZvaWQpCiB7CkBAIC0yMDQsMTMgKzIwNCwxMyBAQAogCW9wcm9maWxlX2FyY2hfZXhpdCgpOwogfQogCi0gCisKIG1vZHVsZV9pbml0KG9wcm9maWxlX2luaXQpOwogbW9kdWxlX2V4aXQob3Byb2ZpbGVfZXhpdCk7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZCh0aW1lciwgdGltZXIsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRpbWVyLCAiZm9yY2UgdXNlIG9mIHRpbWVyIGludGVycnVwdCIpOwotIAorCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJKb2huIExldm9uIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmggYi9kcml2ZXJzL29wcm9maWxlL29wcm9mLmgKaW5kZXggMTgzMjM2NS4uNWRmMGMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5oCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuaApAQCAtMTEsNyArMTEsNyBAQAogI2RlZmluZSBPUFJPRl9ICiAKIGludCBvcHJvZmlsZV9zZXR1cCh2b2lkKTsKLXZvaWQgb3Byb2ZpbGVfc2h1dGRvd24odm9pZCk7IAordm9pZCBvcHJvZmlsZV9zaHV0ZG93bih2b2lkKTsKIAogaW50IG9wcm9maWxlZnNfcmVnaXN0ZXIodm9pZCk7CiB2b2lkIG9wcm9maWxlZnNfdW5yZWdpc3Rlcih2b2lkKTsKQEAgLTIwLDIwICsyMCwyMCBAQAogdm9pZCBvcHJvZmlsZV9zdG9wKHZvaWQpOwogCiBzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9uczsKLSAKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnNfYnVmZmVyX3NpemU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBmc19jcHVfYnVmZmVyX3NpemU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBmc19idWZmZXJfd2F0ZXJzaGVkOwogZXh0ZXJuIHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zIG9wcm9maWxlX29wczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG9wcm9maWxlX3N0YXJ0ZWQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBiYWNrdHJhY2VfZGVwdGg7Ci0gCisKIHN0cnVjdCBzdXBlcl9ibG9jazsKIHN0cnVjdCBkZW50cnk7CiAKLXZvaWQgb3Byb2ZpbGVfY3JlYXRlX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCk7Ci12b2lkIG9wcm9maWxlX3RpbWVyX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKiBvcHMpOwordm9pZCBvcHJvZmlsZV9jcmVhdGVfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCk7Cit2b2lkIG9wcm9maWxlX3RpbWVyX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcyk7CiAKIGludCBvcHJvZmlsZV9zZXRfYmFja3RyYWNlKHVuc2lnbmVkIGxvbmcgZGVwdGgpOwotIAorCiAjZW5kaWYgLyogT1BST0ZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9maWxlcy5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9maWxlcy5jCmluZGV4IGVmOTUzYmEuLmNjMTA2ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfZmlsZXMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMKQEAgLTEzLDE4ICsxMywxOCBAQAogI2luY2x1ZGUgImV2ZW50X2J1ZmZlci5oIgogI2luY2x1ZGUgIm9wcm9maWxlX3N0YXRzLmgiCiAjaW5jbHVkZSAib3Byb2YuaCIKLSAKKwogdW5zaWduZWQgbG9uZyBmc19idWZmZXJfc2l6ZSA9IDEzMTA3MjsKIHVuc2lnbmVkIGxvbmcgZnNfY3B1X2J1ZmZlcl9zaXplID0gODE5MjsKIHVuc2lnbmVkIGxvbmcgZnNfYnVmZmVyX3dhdGVyc2hlZCA9IDMyNzY4OyAvKiBGSVhNRTogdHVuZSAqLwogCi1zdGF0aWMgc3NpemVfdCBkZXB0aF9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQorc3RhdGljIHNzaXplX3QgZGVwdGhfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKIAlyZXR1cm4gb3Byb2ZpbGVmc191bG9uZ190b191c2VyKGJhY2t0cmFjZV9kZXB0aCwgYnVmLCBjb3VudCwgb2Zmc2V0KTsKIH0KIAogCi1zdGF0aWMgc3NpemVfdCBkZXB0aF93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgY29uc3QgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3N0YXRpYyBzc2l6ZV90IGRlcHRoX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIGNvbnN0IF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCByZXR2YWw7CkBAIC00OSw4ICs0OSw4IEBACiAJLndyaXRlCQk9IGRlcHRoX3dyaXRlCiB9OwogCi0gCi1zdGF0aWMgc3NpemVfdCBwb2ludGVyX3NpemVfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKKworc3RhdGljIHNzaXplX3QgcG9pbnRlcl9zaXplX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7CiAJcmV0dXJuIG9wcm9maWxlZnNfdWxvbmdfdG9fdXNlcihzaXplb2Yodm9pZCAqKSwgYnVmLCBjb3VudCwgb2Zmc2V0KTsKIH0KQEAgLTYxLDI0ICs2MSwyNCBAQAogfTsKIAogCi1zdGF0aWMgc3NpemVfdCBjcHVfdHlwZV9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQorc3RhdGljIHNzaXplX3QgY3B1X3R5cGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKIAlyZXR1cm4gb3Byb2ZpbGVmc19zdHJfdG9fdXNlcihvcHJvZmlsZV9vcHMuY3B1X3R5cGUsIGJ1ZiwgY291bnQsIG9mZnNldCk7CiB9Ci0gCi0gCisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3B1X3R5cGVfZm9wcyA9IHsKIAkucmVhZAkJPSBjcHVfdHlwZV9yZWFkLAogfTsKLSAKLSAKLXN0YXRpYyBzc2l6ZV90IGVuYWJsZV9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQorCisKK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewogCXJldHVybiBvcHJvZmlsZWZzX3Vsb25nX3RvX3VzZXIob3Byb2ZpbGVfc3RhcnRlZCwgYnVmLCBjb3VudCwgb2Zmc2V0KTsKIH0KIAogCi1zdGF0aWMgc3NpemVfdCBlbmFibGVfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIGNvbnN0IF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCitzdGF0aWMgc3NpemVfdCBlbmFibGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgY29uc3QgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IHJldHZhbDsKQEAgLTg5LDcgKzg5LDcgQEAKIAlyZXR2YWwgPSBvcHJvZmlsZWZzX3Vsb25nX2Zyb21fdXNlcigmdmFsLCBidWYsIGNvdW50KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwotIAorCiAJaWYgKHZhbCkKIAkJcmV0dmFsID0gb3Byb2ZpbGVfc3RhcnQoKTsKIAllbHNlCkBAIC0xMDAsMTQgKzEwMCwxNCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotIAorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlbmFibGVfZm9wcyA9IHsKIAkucmVhZAkJPSBlbmFibGVfcmVhZCwKIAkud3JpdGUJCT0gZW5hYmxlX3dyaXRlLAogfTsKIAogCi1zdGF0aWMgc3NpemVfdCBkdW1wX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBjb25zdCBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQorc3RhdGljIHNzaXplX3QgZHVtcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBjb25zdCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKIAl3YWtlX3VwX2J1ZmZlcl93YWl0ZXIoKTsKIAlyZXR1cm4gY291bnQ7CkBAIC0xMTcsOCArMTE3LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR1bXBfZm9wcyA9IHsKIAkud3JpdGUJCT0gZHVtcF93cml0ZSwKIH07Ci0gCi12b2lkIG9wcm9maWxlX2NyZWF0ZV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGRlbnRyeSAqIHJvb3QpCisKK3ZvaWQgb3Byb2ZpbGVfY3JlYXRlX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QpCiB7CiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgImVuYWJsZSIsICZlbmFibGVfZm9wcyk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZV9wZXJtKHNiLCByb290LCAiZHVtcCIsICZkdW1wX2ZvcHMsIDA2NjYpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIHJvb3QsICJidWZmZXJfc2l6ZSIsICZmc19idWZmZXJfc2l6ZSk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIHJvb3QsICJidWZmZXJfd2F0ZXJzaGVkIiwgJmZzX2J1ZmZlcl93YXRlcnNoZWQpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCByb290LCAiY3B1X2J1ZmZlcl9zaXplIiwgJmZzX2NwdV9idWZmZXJfc2l6ZSk7Ci0Jb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgImNwdV90eXBlIiwgJmNwdV90eXBlX2ZvcHMpOyAKKwlvcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHNiLCByb290LCAiY3B1X3R5cGUiLCAmY3B1X3R5cGVfZm9wcyk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgImJhY2t0cmFjZV9kZXB0aCIsICZkZXB0aF9mb3BzKTsKIAlvcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHNiLCByb290LCAicG9pbnRlcl9zaXplIiwgJnBvaW50ZXJfc2l6ZV9mb3BzKTsKIAlvcHJvZmlsZV9jcmVhdGVfc3RhdHNfZmlsZXMoc2IsIHJvb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9zdGF0cy5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9zdGF0cy5jCmluZGV4IGY5OWIyOGUuLmUxZjZjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfc3RhdHMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX3N0YXRzLmMKQEAgLTExLDE3ICsxMSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0gCisKICNpbmNsdWRlICJvcHJvZmlsZV9zdGF0cy5oIgogI2luY2x1ZGUgImNwdV9idWZmZXIuaCIKLSAKKwogc3RydWN0IG9wcm9maWxlX3N0YXRfc3RydWN0IG9wcm9maWxlX3N0YXRzOwotIAorCiB2b2lkIG9wcm9maWxlX3Jlc2V0X3N0YXRzKHZvaWQpCiB7Ci0Jc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKiBjcHVfYnVmOyAKKwlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZjsKIAlpbnQgaTsKLSAKKwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWNwdV9idWYgPSAmcGVyX2NwdShjcHVfYnVmZmVyLCBpKTsKIAkJY3B1X2J1Zi0+c2FtcGxlX3JlY2VpdmVkID0gMDsKQEAgLTI5LDE4ICsyOSwxOCBAQAogCQljcHVfYnVmLT5iYWNrdHJhY2VfYWJvcnRlZCA9IDA7CiAJCWNwdV9idWYtPnNhbXBsZV9pbnZhbGlkX2VpcCA9IDA7CiAJfQotIAorCiAJYXRvbWljX3NldCgmb3Byb2ZpbGVfc3RhdHMuc2FtcGxlX2xvc3Rfbm9fbW0sIDApOwogCWF0b21pY19zZXQoJm9wcm9maWxlX3N0YXRzLnNhbXBsZV9sb3N0X25vX21hcHBpbmcsIDApOwogCWF0b21pY19zZXQoJm9wcm9maWxlX3N0YXRzLmV2ZW50X2xvc3Rfb3ZlcmZsb3csIDApOwogfQogCiAKLXZvaWQgb3Byb2ZpbGVfY3JlYXRlX3N0YXRzX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCkKK3ZvaWQgb3Byb2ZpbGVfY3JlYXRlX3N0YXRzX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QpCiB7Ci0Jc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKiBjcHVfYnVmOwotCXN0cnVjdCBkZW50cnkgKiBjcHVkaXI7Ci0Jc3RydWN0IGRlbnRyeSAqIGRpcjsKKwlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZjsKKwlzdHJ1Y3QgZGVudHJ5ICpjcHVkaXI7CisJc3RydWN0IGRlbnRyeSAqZGlyOwogCWNoYXIgYnVmWzEwXTsKIAlpbnQgaTsKIApAQCAtNTIsNyArNTIsNyBAQAogCQljcHVfYnVmID0gJnBlcl9jcHUoY3B1X2J1ZmZlciwgaSk7CiAJCXNucHJpbnRmKGJ1ZiwgMTAsICJjcHUlZCIsIGkpOwogCQljcHVkaXIgPSBvcHJvZmlsZWZzX21rZGlyKHNiLCBkaXIsIGJ1Zik7Ci0gCisKIAkJLyogU3RyaWN0bHkgc3BlYWtpbmcgYWNjZXNzIHRvIHRoZXNlIHVsb25ncyBpcyByYWN5LAogCQkgKiBidXQgd2UgY2FuJ3Qgc2ltcGx5IGxvY2sgdGhlbSwgYW5kIHRoZXkgYXJlCiAJCSAqIGluZm9ybWF0aW9uYWwgb25seS4KQEAgLTY2LDcgKzY2LDcgQEAKIAkJb3Byb2ZpbGVmc19jcmVhdGVfcm9fdWxvbmcoc2IsIGNwdWRpciwgInNhbXBsZV9pbnZhbGlkX2VpcCIsCiAJCQkmY3B1X2J1Zi0+c2FtcGxlX2ludmFsaWRfZWlwKTsKIAl9Ci0gCisKIAlvcHJvZmlsZWZzX2NyZWF0ZV9yb19hdG9taWMoc2IsIGRpciwgInNhbXBsZV9sb3N0X25vX21tIiwKIAkJJm9wcm9maWxlX3N0YXRzLnNhbXBsZV9sb3N0X25vX21tKTsKIAlvcHJvZmlsZWZzX2NyZWF0ZV9yb19hdG9taWMoc2IsIGRpciwgInNhbXBsZV9sb3N0X25vX21hcHBpbmciLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9zdGF0cy5oIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9zdGF0cy5oCmluZGV4IDZkNzU1YTYuLjNkYTBkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfc3RhdHMuaAorKysgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX3N0YXRzLmgKQEAgLTExLDcgKzExLDcgQEAKICNkZWZpbmUgT1BST0ZJTEVfU1RBVFNfSAogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotIAorCiBzdHJ1Y3Qgb3Byb2ZpbGVfc3RhdF9zdHJ1Y3QgewogCWF0b21pY190IHNhbXBsZV9sb3N0X25vX21tOwogCWF0b21pY190IHNhbXBsZV9sb3N0X25vX21hcHBpbmc7CkBAIC0yMCwxNCArMjAsMTQgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3Qgb3Byb2ZpbGVfc3RhdF9zdHJ1Y3Qgb3Byb2ZpbGVfc3RhdHM7Ci0gCisKIC8qIHJlc2V0IGFsbCBzdGF0cyB0byB6ZXJvICovCiB2b2lkIG9wcm9maWxlX3Jlc2V0X3N0YXRzKHZvaWQpOwotIAorCiBzdHJ1Y3Qgc3VwZXJfYmxvY2s7CiBzdHJ1Y3QgZGVudHJ5OwotIAorCiAvKiBjcmVhdGUgdGhlIHN0YXRzLyBkaXIgKi8KLXZvaWQgb3Byb2ZpbGVfY3JlYXRlX3N0YXRzX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCk7Cit2b2lkIG9wcm9maWxlX2NyZWF0ZV9zdGF0c19maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTsKIAogI2VuZGlmIC8qIE9QUk9GSUxFX1NUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVmcy5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKaW5kZXggODU0M2NiMi4uZGRjNGM1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKQEAgLTIzLDkgKzIzLDkgQEAKIAogREVGSU5FX1NQSU5MT0NLKG9wcm9maWxlZnNfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKiBvcHJvZmlsZWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgaW50IG1vZGUpCitzdGF0aWMgc3RydWN0IGlub2RlICpvcHJvZmlsZWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IG5ld19pbm9kZShzYik7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CiAKIAlpZiAoaW5vZGUpIHsKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CkBAIC00NCw3ICs0NCw3IEBACiB9OwogCiAKLXNzaXplX3Qgb3Byb2ZpbGVmc19zdHJfdG9fdXNlcihjaGFyIGNvbnN0ICogc3RyLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCitzc2l6ZV90IG9wcm9maWxlZnNfc3RyX3RvX3VzZXIoY2hhciBjb25zdCAqc3RyLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBvZmZzZXQsIHN0ciwgc3RybGVuKHN0cikpOwogfQpAQCAtNTIsNyArNTIsNyBAQAogCiAjZGVmaW5lIFRNUEJVRlNJWkUgNTAKIAotc3NpemVfdCBvcHJvZmlsZWZzX3Vsb25nX3RvX3VzZXIodW5zaWduZWQgbG9uZyB2YWwsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3NzaXplX3Qgb3Byb2ZpbGVmc191bG9uZ190b191c2VyKHVuc2lnbmVkIGxvbmcgdmFsLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewogCWNoYXIgdG1wYnVmW1RNUEJVRlNJWkVdOwogCXNpemVfdCBtYXhsZW4gPSBzbnByaW50Zih0bXBidWYsIFRNUEJVRlNJWkUsICIlbHVcbiIsIHZhbCk7CkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIAotaW50IG9wcm9maWxlZnNfdWxvbmdfZnJvbV91c2VyKHVuc2lnbmVkIGxvbmcgKiB2YWwsIGNoYXIgY29uc3QgX191c2VyICogYnVmLCBzaXplX3QgY291bnQpCitpbnQgb3Byb2ZpbGVmc191bG9uZ19mcm9tX3VzZXIodW5zaWduZWQgbG9uZyAqdmFsLCBjaGFyIGNvbnN0IF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJY2hhciB0bXBidWZbVE1QQlVGU0laRV07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg1LDE2ICs4NSwxNiBAQAogfQogCiAKLXN0YXRpYyBzc2l6ZV90IHVsb25nX3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3N0YXRpYyBzc2l6ZV90IHVsb25nX3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKLQl1bnNpZ25lZCBsb25nICogdmFsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgKnZhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlyZXR1cm4gb3Byb2ZpbGVmc191bG9uZ190b191c2VyKCp2YWwsIGJ1ZiwgY291bnQsIG9mZnNldCk7CiB9CiAKIAotc3RhdGljIHNzaXplX3QgdWxvbmdfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgY29uc3QgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3N0YXRpYyBzc2l6ZV90IHVsb25nX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgY29uc3QgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7Ci0JdW5zaWduZWQgbG9uZyAqIHZhbHVlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgKnZhbHVlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXR2YWw7CiAKIAlpZiAoKm9mZnNldCkKQEAgLTEwOCw3ICsxMDgsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZGVmYXVsdF9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgaW50IGRlZmF1bHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpZiAoaW5vZGUtPmlfcHJpdmF0ZSkKIAkJZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKQEAgLTEyOSwxMiArMTI5LDEyIEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICogX19vcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLAotCXN0cnVjdCBkZW50cnkgKiByb290LCBjaGFyIGNvbnN0ICogbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHMsCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19vcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJc3RydWN0IGRlbnRyeSAqcm9vdCwgY2hhciBjb25zdCAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKIAlpbnQgcGVybSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqIGlub2RlOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCiAJZGVudHJ5ID0gZF9hbGxvY19uYW1lKHJvb3QsIG5hbWUpOwogCWlmICghZGVudHJ5KQpAQCAtMTUwLDEwICsxNTAsMTAgQEAKIH0KIAogCi1pbnQgb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiByb290LAotCWNoYXIgY29uc3QgKiBuYW1lLCB1bnNpZ25lZCBsb25nICogdmFsKQoraW50IG9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QsCisJY2hhciBjb25zdCAqbmFtZSwgdW5zaWduZWQgbG9uZyAqdmFsKQogewotCXN0cnVjdCBkZW50cnkgKiBkID0gX19vcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHNiLCByb290LCBuYW1lLAorCXN0cnVjdCBkZW50cnkgKmQgPSBfX29wcm9maWxlZnNfY3JlYXRlX2ZpbGUoc2IsIHJvb3QsIG5hbWUsCiAJCQkJCQkgICAgICZ1bG9uZ19mb3BzLCAwNjQ0KTsKIAlpZiAoIWQpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTYzLDEwICsxNjMsMTAgQEAKIH0KIAogCi1pbnQgb3Byb2ZpbGVmc19jcmVhdGVfcm9fdWxvbmcoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiByb290LAotCWNoYXIgY29uc3QgKiBuYW1lLCB1bnNpZ25lZCBsb25nICogdmFsKQoraW50IG9wcm9maWxlZnNfY3JlYXRlX3JvX3Vsb25nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QsCisJY2hhciBjb25zdCAqbmFtZSwgdW5zaWduZWQgbG9uZyAqdmFsKQogewotCXN0cnVjdCBkZW50cnkgKiBkID0gX19vcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHNiLCByb290LCBuYW1lLAorCXN0cnVjdCBkZW50cnkgKmQgPSBfX29wcm9maWxlZnNfY3JlYXRlX2ZpbGUoc2IsIHJvb3QsIG5hbWUsCiAJCQkJCQkgICAgICZ1bG9uZ19yb19mb3BzLCAwNDQ0KTsKIAlpZiAoIWQpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTc2LDIzICsxNzYsMjMgQEAKIH0KIAogCi1zdGF0aWMgc3NpemVfdCBhdG9taWNfcmVhZF9maWxlKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQorc3RhdGljIHNzaXplX3QgYXRvbWljX3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKLQlhdG9taWNfdCAqIHZhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlhdG9taWNfdCAqdmFsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXJldHVybiBvcHJvZmlsZWZzX3Vsb25nX3RvX3VzZXIoYXRvbWljX3JlYWQodmFsKSwgYnVmLCBjb3VudCwgb2Zmc2V0KTsKIH0KLSAKKwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdG9taWNfcm9fZm9wcyA9IHsKIAkucmVhZAkJPSBhdG9taWNfcmVhZF9maWxlLAogCS5vcGVuCQk9IGRlZmF1bHRfb3BlbiwKIH07Ci0gCiAKLWludCBvcHJvZmlsZWZzX2NyZWF0ZV9yb19hdG9taWMoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiByb290LAotCWNoYXIgY29uc3QgKiBuYW1lLCBhdG9taWNfdCAqIHZhbCkKKworaW50IG9wcm9maWxlZnNfY3JlYXRlX3JvX2F0b21pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZGVudHJ5ICpyb290LAorCWNoYXIgY29uc3QgKm5hbWUsIGF0b21pY190ICp2YWwpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqIGQgPSBfX29wcm9maWxlZnNfY3JlYXRlX2ZpbGUoc2IsIHJvb3QsIG5hbWUsCisJc3RydWN0IGRlbnRyeSAqZCA9IF9fb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgbmFtZSwKIAkJCQkJCSAgICAgJmF0b21pY19yb19mb3BzLCAwNDQ0KTsKIAlpZiAoIWQpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjAxLDkgKzIwMSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSAKLWludCBvcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwKLQljaGFyIGNvbnN0ICogbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHMpCisKK2ludCBvcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QsCisJY2hhciBjb25zdCAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcykKIHsKIAlpZiAoIV9fb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgbmFtZSwgZm9wcywgMDY0NCkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjExLDggKzIxMSw4IEBACiB9CiAKIAotaW50IG9wcm9maWxlZnNfY3JlYXRlX2ZpbGVfcGVybShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGRlbnRyeSAqIHJvb3QsCi0JY2hhciBjb25zdCAqIG5hbWUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBmb3BzLCBpbnQgcGVybSkKK2ludCBvcHJvZmlsZWZzX2NyZWF0ZV9maWxlX3Blcm0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCwKKwljaGFyIGNvbnN0ICpuYW1lLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLCBpbnQgcGVybSkKIHsKIAlpZiAoIV9fb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgbmFtZSwgZm9wcywgcGVybSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjIwLDExICsyMjAsMTEgQEAKIH0KIAogCi1zdHJ1Y3QgZGVudHJ5ICogb3Byb2ZpbGVmc19ta2RpcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwKLQlzdHJ1Y3QgZGVudHJ5ICogcm9vdCwgY2hhciBjb25zdCAqIG5hbWUpCitzdHJ1Y3QgZGVudHJ5ICpvcHJvZmlsZWZzX21rZGlyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJc3RydWN0IGRlbnRyeSAqcm9vdCwgY2hhciBjb25zdCAqbmFtZSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqIGlub2RlOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCiAJZGVudHJ5ID0gZF9hbGxvY19uYW1lKHJvb3QsIG5hbWUpOwogCWlmICghZGVudHJ5KQpAQCAtMjQxLDEwICsyNDEsMTAgQEAKIH0KIAogCi1zdGF0aWMgaW50IG9wcm9maWxlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdm9pZCAqIGRhdGEsIGludCBzaWxlbnQpCitzdGF0aWMgaW50IG9wcm9maWxlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewotCXN0cnVjdCBpbm9kZSAqIHJvb3RfaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqIHJvb3RfZGVudHJ5OworCXN0cnVjdCBpbm9kZSAqcm9vdF9pbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeTsKIAogCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IFBBR0VfQ0FDSEVfU0hJRlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL3RpbWVyX2ludC5jIGIvZHJpdmVycy9vcHJvZmlsZS90aW1lcl9pbnQuYwppbmRleCA3MTBhNDVmLi4zMzNmOTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL3RpbWVyX2ludC5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvdGltZXJfaW50LmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogc3RhdGljIGludCB0aW1lcl9ub3RpZnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0gCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgMCk7CisJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzUsNyArMzUsNyBAQAogfQogCiAKLXZvaWQgX19pbml0IG9wcm9maWxlX3RpbWVyX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKiBvcHMpCit2b2lkIF9faW5pdCBvcHJvZmlsZV90aW1lcl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCiB7CiAJb3BzLT5jcmVhdGVfZmlsZXMgPSBOVUxMOwogCW9wcy0+c2V0dXAgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYyBiL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKaW5kZXggYjMwZTM4Zi4uZGNjMWU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYworKysgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCkBAIC02NiwxNSArNjYsOCBAQAogI3VuZGVmIERFQlVHX0NDSU9fUlVOX1NHCiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotLyoKLSAqIENDSU9fU0VBUkNIX1RJTUUgY2FuIGhlbHAgbWVhc3VyZSBob3cgZmFzdCB0aGUgYml0bWFwIHNlYXJjaCBpcy4KLSAqIGltcGFjdHMgcGVyZm9ybWFuY2UgdGhvdWdoIC0gZGl0Y2ggaXQgaWYgeW91IGRvbid0IHVzZSBpdC4KLSAqLwotI2RlZmluZSBDQ0lPX1NFQVJDSF9USU1FCi0jdW5kZWYgQ0NJT19NQVBfU1RBVFMKLSNlbHNlCi0jdW5kZWYgQ0NJT19TRUFSQ0hfVElNRQotI3VuZGVmIENDSU9fTUFQX1NUQVRTCisvKiBkZXBlbmRzIG9uIHByb2MgZnMgc3VwcG9ydC4gQnV0IGNvc3RzIENQVSBwZXJmb3JtYW5jZS4gKi8KKyN1bmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKICNlbmRpZgogCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpAQCAtMjM5LDEyICsyMzIsMTAgQEAKIAl1MzIgcmVzX3NpemU7CQkgICAgCS8qIHNpemUgb2YgcmVzb3VyY2UgbWFwIGluIGJ5dGVzICovCiAJc3BpbmxvY2tfdCByZXNfbG9jazsKIAotI2lmZGVmIENDSU9fU0VBUkNIX1RJTUUKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKICNkZWZpbmUgQ0NJT19TRUFSQ0hfU0FNUExFIDB4MTAwCiAJdW5zaWduZWQgbG9uZyBhdmdfc2VhcmNoW0NDSU9fU0VBUkNIX1NBTVBMRV07CiAJdW5zaWduZWQgbG9uZyBhdmdfaWR4OwkJICAvKiBjdXJyZW50IGluZGV4IGludG8gYXZnX3NlYXJjaCAqLwotI2VuZGlmCi0jaWZkZWYgQ0NJT19NQVBfU1RBVFMKIAl1bnNpZ25lZCBsb25nIHVzZWRfcGFnZXM7CiAJdW5zaWduZWQgbG9uZyBtc2luZ2xlX2NhbGxzOwogCXVuc2lnbmVkIGxvbmcgbXNpbmdsZV9wYWdlczsKQEAgLTM1MSw3ICszNDIsNyBAQAogCXVuc2lnbmVkIGludCBwYWdlc19uZWVkZWQgPSBzaXplID4+IElPVlBfU0hJRlQ7CiAJdW5zaWduZWQgaW50IHJlc19pZHg7CiAJdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplOwotI2lmZGVmIENDSU9fU0VBUkNIX1RJTUUKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAl1bnNpZ25lZCBsb25nIGNyX3N0YXJ0ID0gbWZjdGwoMTYpOwogI2VuZGlmCiAJCkBAIC00MDYsNyArMzk3LDcgQEAKIAlEQkdfUkVTKCIlcygpIHJlc19pZHggJWQgcmVzX2hpbnQ6ICVkXG4iLAogCQlfX2Z1bmNfXywgcmVzX2lkeCwgaW9jLT5yZXNfaGludCk7CiAKLSNpZmRlZiBDQ0lPX1NFQVJDSF9USU1FCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJewogCQl1bnNpZ25lZCBsb25nIGNyX2VuZCA9IG1mY3RsKDE2KTsKIAkJdW5zaWduZWQgbG9uZyB0bXAgPSBjcl9lbmQgLSBjcl9zdGFydDsKQEAgLTQxNiw3ICs0MDcsNyBAQAogCWlvYy0+YXZnX3NlYXJjaFtpb2MtPmF2Z19pZHgrK10gPSBjcl9zdGFydDsKIAlpb2MtPmF2Z19pZHggJj0gQ0NJT19TRUFSQ0hfU0FNUExFIC0gMTsKICNlbmRpZgotI2lmZGVmIENDSU9fTUFQX1NUQVRTCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJaW9jLT51c2VkX3BhZ2VzICs9IHBhZ2VzX25lZWRlZDsKICNlbmRpZgogCS8qIApAQCAtNDUyLDcgKzQ0Myw3IEBACiAJREJHX1JFUygiJXMoKTogIHJlc19pZHg6ICVkIHBhZ2VzX21hcHBlZCAlZFxuIiwgCiAJCV9fZnVuY19fLCByZXNfaWR4LCBwYWdlc19tYXBwZWQpOwogCi0jaWZkZWYgQ0NJT19NQVBfU1RBVFMKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAlpb2MtPnVzZWRfcGFnZXMgLT0gcGFnZXNfbWFwcGVkOwogI2VuZGlmCiAKQEAgLTc2NCw3ICs3NTUsNyBAQAogCXNpemUgPSBBTElHTihzaXplICsgb2Zmc2V0LCBJT1ZQX1NJWkUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJlc19sb2NrLCBmbGFncyk7CiAKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCWlvYy0+bXNpbmdsZV9jYWxscysrOwogCWlvYy0+bXNpbmdsZV9wYWdlcyArPSBzaXplID4+IElPVlBfU0hJRlQ7CiAjZW5kaWYKQEAgLTgyOCw3ICs4MTksNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKIAotI2lmZGVmIENDSU9fTUFQX1NUQVRTCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJaW9jLT51c2luZ2xlX2NhbGxzKys7CiAJaW9jLT51c2luZ2xlX3BhZ2VzICs9IHNpemUgPj4gSU9WUF9TSElGVDsKICNlbmRpZgpAQCAtODk0LDcgKzg4NSw3IEBACiAqLwogI2RlZmluZSBQSURFX0ZMQUcgMHg4MDAwMDAwMFVMCiAKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogI2RlZmluZSBJT01NVV9NQVBfU1RBVFMKICNlbmRpZgogI2luY2x1ZGUgImlvbW11LWhlbHBlcnMuaCIKQEAgLTkzOCw3ICs5MjksNyBAQAogCQogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJlc19sb2NrLCBmbGFncyk7CiAKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCWlvYy0+bXNnX2NhbGxzKys7CiAjZW5kaWYKIApAQCAtOTk3LDEzICs5ODgsMTMgQEAKIAlEQkdfUlVOX1NHKCIlcygpIFNUQVJUICVkIGVudHJpZXMsICAlMDhseCwleFxuIiwKIAkJX19mdW5jX18sIG5lbnRzLCBzZ192aXJ0X2FkZHIoc2dsaXN0KSwgc2dsaXN0LT5sZW5ndGgpOwogCi0jaWZkZWYgQ0NJT19NQVBfU1RBVFMKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAlpb2MtPnVzZ19jYWxscysrOwogI2VuZGlmCiAKIAl3aGlsZShzZ19kbWFfbGVuKHNnbGlzdCkgJiYgbmVudHMtLSkgewogCi0jaWZkZWYgQ0NJT19NQVBfU1RBVFMKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAkJaW9jLT51c2dfcGFnZXMgKz0gc2dfZG1hX2xlbihzZ2xpc3QpID4+IFBBR0VfU0hJRlQ7CiAjZW5kaWYKIAkJY2Npb191bm1hcF9zaW5nbGUoZGV2LCBzZ19kbWFfYWRkcmVzcyhzZ2xpc3QpLApAQCAtMTA0OCw3ICsxMDM5LDcgQEAKIAkJbGVuICs9IHNlcV9wcmludGYobSwgIklPIFBESVIgc2l6ZSAgICA6ICVkIGJ5dGVzICglZCBlbnRyaWVzKVxuIiwKIAkJCSAgICAgICB0b3RhbF9wYWdlcyAqIDgsIHRvdGFsX3BhZ2VzKTsKIAotI2lmZGVmIENDSU9fTUFQX1NUQVRTCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICJJTyBQRElSIGVudHJpZXMgOiAlbGQgZnJlZSAgJWxkIHVzZWQgKCVkJSUpXG4iLAogCQkJCSAgdG90YWxfcGFnZXMgLSBpb2MtPnVzZWRfcGFnZXMsIGlvYy0+dXNlZF9wYWdlcywKIAkJCQkgIChpbnQpKGlvYy0+dXNlZF9wYWdlcyAqIDEwMCAvIHRvdGFsX3BhZ2VzKSk7CkBAIC0xMDU3LDcgKzEwNDgsNyBAQAogCQlsZW4gKz0gc2VxX3ByaW50ZihtLCAiUmVzb3VyY2UgYml0bWFwIDogJWQgYnl0ZXMgKCVkIHBhZ2VzKVxuIiwgCiAJCQkJICBpb2MtPnJlc19zaXplLCB0b3RhbF9wYWdlcyk7CiAKLSNpZmRlZiBDQ0lPX1NFQVJDSF9USU1FCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJCW1pbiA9IG1heCA9IGlvYy0+YXZnX3NlYXJjaFswXTsKIAkJZm9yKGogPSAwOyBqIDwgQ0NJT19TRUFSQ0hfU0FNUExFOyArK2opIHsKIAkJCWF2ZyArPSBpb2MtPmF2Z19zZWFyY2hbal07CkBAIC0xMDcwLDcgKzEwNjEsNyBAQAogCQlsZW4gKz0gc2VxX3ByaW50ZihtLCAiICBCaXRtYXAgc2VhcmNoIDogJWxkLyVsZC8lbGQgKG1pbi9hdmcvbWF4IENQVSBDeWNsZXMpXG4iLAogCQkJCSAgbWluLCBhdmcsIG1heCk7CiAjZW5kaWYKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCQlsZW4gKz0gc2VxX3ByaW50ZihtLCAicGNpX21hcF9zaW5nbGUoKTogJThsZCBjYWxscyAgJThsZCBwYWdlcyAoYXZnICVkLzEwMDApXG4iLAogCQkJCSAgaW9jLT5tc2luZ2xlX2NhbGxzLCBpb2MtPm1zaW5nbGVfcGFnZXMsCiAJCQkJICAoaW50KSgoaW9jLT5tc2luZ2xlX3BhZ2VzICogMTAwMCkvaW9jLT5tc2luZ2xlX2NhbGxzKSk7CkBAIC0xMDg4LDcgKzEwNzksNyBAQAogCQlsZW4gKz0gc2VxX3ByaW50ZihtLCAicGNpX3VubWFwX3NnKCkgIDogJThsZCBjYWxscyAgJThsZCBwYWdlcyAoYXZnICVkLzEwMDApXG5cblxuIiwKIAkJCQkgIGlvYy0+dXNnX2NhbGxzLCBpb2MtPnVzZ19wYWdlcywKIAkJCQkgIChpbnQpKChpb2MtPnVzZ19wYWdlcyAqIDEwMDApL2lvYy0+dXNnX2NhbGxzKSk7Ci0jZW5kaWYJLyogQ0NJT19NQVBfU1RBVFMgKi8KKyNlbmRpZgkvKiBDQ0lPX0NPTExFQ1RfU1RBVFMgKi8KIAogCQlpb2MgPSBpb2MtPm5leHQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZGluby5jIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCmluZGV4IGZkNTYxMjguLjNiYzU0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYworKysgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKQEAgLTI5OCw3ICsyOTgsOCBAQAogCiBzdGF0aWMgdm9pZCBkaW5vX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGRpbm9fZGV2aWNlICpkaW5vX2RldiA9IGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGRpbm9fZGV2aWNlICpkaW5vX2RldiA9IGRlc2MtPmNoaXBfZGF0YTsKIAlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgZGlub19kZXYtPmdsb2JhbF9pcnEsIERJTk9fTE9DQUxfSVJRUyk7CiAKIAlEQkcoS0VSTl9XQVJOSU5HICIlcygweCVwLCAlZClcbiIsIF9fZnVuY19fLCBkaW5vX2RldiwgaXJxKTsKQEAgLTMxMCw3ICszMTEsOCBAQAogCiBzdGF0aWMgdm9pZCBkaW5vX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gZGVzYy0+Y2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBkaW5vX2Rldi0+Z2xvYmFsX2lycSwgRElOT19MT0NBTF9JUlFTKTsKIAl1MzIgdG1wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9laXNhLmMgYi9kcml2ZXJzL3BhcmlzYy9laXNhLmMKaW5kZXggNzcxY2VmNS4uNzg5MWRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZWlzYS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYwpAQCAtMzQ2LDEwICszNDYsMTAgQEAKIAl9CiAJCiAJLyogUmVzZXJ2ZSBJUlEyICovCi0JaXJxX2Rlc2NbMl0uYWN0aW9uID0gJmlycTJfYWN0aW9uOworCWlycV90b19kZXNjKDIpLT5hY3Rpb24gPSAmaXJxMl9hY3Rpb247CiAJCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZlaXNhX2ludGVycnVwdF90eXBlOworCQlpcnFfdG9fZGVzYyhpKS0+Y2hpcCA9ICZlaXNhX2ludGVycnVwdF90eXBlOwogCX0KIAkKIAlFSVNBX2J1cyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9laXNhX2VlcHJvbS5jIGIvZHJpdmVycy9wYXJpc2MvZWlzYV9lZXByb20uYwppbmRleCA1YWMyMDc5Li42ODVkOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9laXNhX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZWVwcm9tLmMKQEAgLTg2LDcgKzg2LDcgQEAKIHsKIAljeWNsZV9rZXJuZWxfbG9jaygpOwogCi0JaWYgKGZpbGUtPmZfbW9kZSAmIDIpCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQlyZXR1cm4gLUVJTlZBTDsKICAgIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZ3NjLmMgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwppbmRleCBmN2QwODhiLi5lNzZkYjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9nc2MuYworKysgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwpAQCAtMTA4LDcgKzEwOCw4IEBACiAKIHN0YXRpYyB2b2lkIGdzY19hc2ljX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgZ3NjX2FzaWMgKmlycV9kZXYgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShpcnEsIGlycV9kZXYtPmdsb2JhbF9pcnEsIDMyKTsKIAl1MzIgaW1yOwogCkBAIC0xMjMsNyArMTI0LDggQEAKIAogc3RhdGljIHZvaWQgZ3NjX2FzaWNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gZGVzYy0+Y2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBpcnFfZGV2LT5nbG9iYWxfaXJxLCAzMik7CiAJdTMyIGltcjsKIApAQCAtMTU5LDEyICsxNjEsMTQgQEAKIGludCBnc2NfYXNzaWduX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKnR5cGUsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGludCBpcnEgPSBHU0NfSVJRX0JBU0U7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJaWYgKGlycSA+IEdTQ19JUlFfTUFYKQogCQlyZXR1cm4gTk9fSVJROwogCi0JaXJxX2Rlc2NbaXJxXS5jaGlwID0gdHlwZTsKLQlpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YSA9IGRhdGE7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+Y2hpcCA9IHR5cGU7CisJZGVzYy0+Y2hpcF9kYXRhID0gZGF0YTsKIAlyZXR1cm4gaXJxKys7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwppbmRleCA2ZmIzZjc5Li43YmVmZmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCkBAIC02MTksNyArNjE5LDkgQEAKIAogc3RhdGljIHN0cnVjdCB2ZWN0b3JfaW5mbyAqaW9zYXBpY19nZXRfdmVjdG9yKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlyZXR1cm4gZGVzYy0+Y2hpcF9kYXRhOwogfQogCiBzdGF0aWMgdm9pZCBpb3NhcGljX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggMWU4ZDJkMS4uMWU5M2M4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwpAQCAtMzYzLDcgKzM2Myw5IEBACiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLmNoaXAgPSAmc3VwZXJpb19pbnRlcnJ1cHRfdHlwZTsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisKKwkJZGVzYy0+Y2hpcCA9ICZzdXBlcmlvX2ludGVycnVwdF90eXBlOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwppbmRleCA4YTg0NmFkLi45NmYzYmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTI3OTEsNiArMjc5MSw3IEBACiAJb3hzZW1pXzk1MiwKIAlveHNlbWlfOTU0LAogCW94c2VtaV84NDAsCisJb3hzZW1pX3BjaWVfcHBvcnQsCiAJYWtzXzAxMDAsCiAJbW9iaWxpdHlfcHAsCiAJbmV0bW9zXzk3MDUsCkBAIC0yODY4LDYgKzI4NjksNyBAQAogCS8qIG94c2VtaV85NTIgKi8JCXsgMSwgeyB7IDAsIDEgfSwgfSB9LAogCS8qIG94c2VtaV85NTQgKi8JCXsgMSwgeyB7IDAsIC0xIH0sIH0gfSwKIAkvKiBveHNlbWlfODQwICovCQl7IDEsIHsgeyAwLCAxIH0sIH0gfSwKKwkvKiBveHNlbWlfcGNpZV9wcG9ydCAqLwkJeyAxLCB7IHsgMCwgMSB9LCB9IH0sCiAJLyogYWtzXzAxMDAgKi8gICAgICAgICAgICAgICAgICB7IDEsIHsgeyAwLCAtMSB9LCB9IH0sCiAJLyogbW9iaWxpdHlfcHAgKi8JCXsgMSwgeyB7IDAsIDEgfSwgfSB9LAogCS8qIG5ldG1vc185NzA1ICovICAgICAgICAgICAgICAgeyAxLCB7IHsgMCwgLTEgfSwgfSB9LCAvKiB1bnRlc3RlZCAqLwpAQCAtMjkyOCw3ICsyOTMwLDYgQEAKIAl7IDB4MTQwOSwgMHg3MjY4LCAweDE0MDksIDB4MDEwMywgMCwgMCwgdGltZWRpYV80MDA4YSB9LAogCXsgMHgxNDA5LCAweDcyNjgsIDB4MTQwOSwgMHgwMTA0LCAwLCAwLCB0aW1lZGlhXzQwMTggfSwKIAl7IDB4MTQwOSwgMHg3MjY4LCAweDE0MDksIDB4OTAxOCwgMCwgMCwgdGltZWRpYV85MDE4YSB9LAotCXsgMHgxNGYyLCAweDAxMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG1vYmlsaXR5X3BwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NZQkEsIFBDSV9ERVZJQ0VfSURfU1lCQV8yUF9FUFAsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzeWJhXzJwX2VwcCB9LAogCXsgUENJX1ZFTkRPUl9JRF9TWUJBLCBQQ0lfREVWSUNFX0lEX1NZQkFfMVBfRUNQLApAQCAtMjk0Niw4ICsyOTQ3LDI1IEBACiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBveHNlbWlfOTU0IH0sCiAJeyBQQ0lfVkVORE9SX0lEX09YU0VNSSwgUENJX0RFVklDRV9JRF9PWFNFTUlfMTJQQ0k4NDAsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBveHNlbWlfODQwIH0sCisJeyBQQ0lfVkVORE9SX0lEX09YU0VNSSwgUENJX0RFVklDRV9JRF9PWFNFTUlfUENJZTg0MCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG94c2VtaV9wY2llX3Bwb3J0IH0sCisJeyBQQ0lfVkVORE9SX0lEX09YU0VNSSwgUENJX0RFVklDRV9JRF9PWFNFTUlfUENJZTg0MF9HLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgb3hzZW1pX3BjaWVfcHBvcnQgfSwKKwl7IFBDSV9WRU5ET1JfSURfT1hTRU1JLCBQQ0lfREVWSUNFX0lEX09YU0VNSV9QQ0llOTUyXzAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBveHNlbWlfcGNpZV9wcG9ydCB9LAorCXsgUENJX1ZFTkRPUl9JRF9PWFNFTUksIFBDSV9ERVZJQ0VfSURfT1hTRU1JX1BDSWU5NTJfMF9HLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgb3hzZW1pX3BjaWVfcHBvcnQgfSwKKwl7IFBDSV9WRU5ET1JfSURfT1hTRU1JLCBQQ0lfREVWSUNFX0lEX09YU0VNSV9QQ0llOTUyXzEsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBveHNlbWlfcGNpZV9wcG9ydCB9LAorCXsgUENJX1ZFTkRPUl9JRF9PWFNFTUksIFBDSV9ERVZJQ0VfSURfT1hTRU1JX1BDSWU5NTJfMV9HLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgb3hzZW1pX3BjaWVfcHBvcnQgfSwKKwl7IFBDSV9WRU5ET1JfSURfT1hTRU1JLCBQQ0lfREVWSUNFX0lEX09YU0VNSV9QQ0llOTUyXzFfVSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG94c2VtaV9wY2llX3Bwb3J0IH0sCisJeyBQQ0lfVkVORE9SX0lEX09YU0VNSSwgUENJX0RFVklDRV9JRF9PWFNFTUlfUENJZTk1Ml8xX0dVLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgb3hzZW1pX3BjaWVfcHBvcnQgfSwKIAl7IFBDSV9WRU5ET1JfSURfQUtTLCBQQ0lfREVWSUNFX0lEX0FLU19BTEFERElOQ0FSRCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGFrc18wMTAwIH0sCisJeyAweDE0ZjIsIDB4MDEyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbW9iaWxpdHlfcHAgfSwKIAkvKiBOZXRNb3MgY29tbXVuaWNhdGlvbiBjb250cm9sbGVycyAqLwogCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MDUsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOTcwNSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCA0YjQ3ZjRlLi5hZjNiZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMyw3ICszLDggQEAKICMKIAogb2JqLXkJCSs9IGFjY2Vzcy5vIGJ1cy5vIHByb2JlLm8gcmVtb3ZlLm8gcGNpLm8gcXVpcmtzLm8gc2xvdC5vIFwKLQkJCXBjaS1kcml2ZXIubyBzZWFyY2gubyBwY2ktc3lzZnMubyByb20ubyBzZXR1cC1yZXMubworCQkJcGNpLWRyaXZlci5vIHNlYXJjaC5vIHBjaS1zeXNmcy5vIHJvbS5vIHNldHVwLXJlcy5vIFwKKwkJCWlycS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiAKICMgQnVpbGQgUENJIEV4cHJlc3Mgc3R1ZmYgaWYgbmVlZGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9idXMuYyBiL2RyaXZlcnMvcGNpL2J1cy5jCmluZGV4IDUyOWQ5ZDcuLjk5OWNjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2J1cy5jCisrKyBiL2RyaXZlcnMvcGNpL2J1cy5jCkBAIC0xNTEsNiArMTUxLDEzIEBACiAJCQlpZiAocmV0dmFsKQogCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgY3JlYXRpbmcgY3B1YWZmaW5pdHkiCiAJCQkJCSIgZmlsZSwgY29udGludWluZy4uLlxuIik7CisKKwkJCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2hpbGRfYnVzLT5kZXYsCisJCQkJCQkmZGV2X2F0dHJfY3B1bGlzdGFmZmluaXR5KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCSJFcnJvciBjcmVhdGluZyBjcHVsaXN0YWZmaW5pdHkiCisJCQkJCSIgZmlsZSwgY29udGludWluZy4uLlxuIik7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggZTg0MmU3NS4uNjkxYjNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtMTg4LDEyICsxODgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQKLWRtYXJfcGFyc2VfZGV2KHN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZG1hcnUpCitzdGF0aWMgaW50IF9faW5pdCBkbWFyX3BhcnNlX2RldihzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRtYXJ1KQogewogCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKIAlzdGF0aWMgaW50IGluY2x1ZGVfYWxsOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlkcmhkID0gKHN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqKSBkbWFydS0+aGRyOwogCkBAIC0yMTIsNyArMjExLDcgQEAKIAkJaW5jbHVkZV9hbGwgPSAxOwogCX0KIAotCWlmIChyZXQgfHwgKGRtYXJ1LT5kZXZpY2VzX2NudCA9PSAwICYmICFkbWFydS0+aW5jbHVkZV9hbGwpKSB7CisJaWYgKHJldCkgewogCQlsaXN0X2RlbCgmZG1hcnUtPmxpc3QpOwogCQlrZnJlZShkbWFydSk7CiAJfQpAQCAtMjc3LDE4ICsyNzYsMzcgQEAKIAkJZHJoZCA9IChzdHJ1Y3QgYWNwaV9kbWFyX2hhcmR3YXJlX3VuaXQgKiloZWFkZXI7CiAJCXByaW50ayAoS0VSTl9JTkZPIFBSRUZJWAogCQkJIkRSSEQgKGZsYWdzOiAweCUwOHgpYmFzZTogMHglMDE2THhcbiIsCi0JCQlkcmhkLT5mbGFncywgZHJoZC0+YWRkcmVzcyk7CisJCQlkcmhkLT5mbGFncywgKHVuc2lnbmVkIGxvbmcgbG9uZylkcmhkLT5hZGRyZXNzKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0RNQVJfVFlQRV9SRVNFUlZFRF9NRU1PUlk6CiAJCXJtcnIgPSAoc3RydWN0IGFjcGlfZG1hcl9yZXNlcnZlZF9tZW1vcnkgKiloZWFkZXI7CiAKIAkJcHJpbnRrIChLRVJOX0lORk8gUFJFRklYCiAJCQkiUk1SUiBiYXNlOiAweCUwMTZMeCBlbmQ6IDB4JTAxNkx4XG4iLAotCQkJcm1yci0+YmFzZV9hZGRyZXNzLCBybXJyLT5lbmRfYWRkcmVzcyk7CisJCQkodW5zaWduZWQgbG9uZyBsb25nKXJtcnItPmJhc2VfYWRkcmVzcywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcm1yci0+ZW5kX2FkZHJlc3MpOwogCQlicmVhazsKIAl9CiB9CiAKKy8qKgorICogZG1hcl90YWJsZV9kZXRlY3QgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBETUFSIGRldmljZXMKKyAqLworc3RhdGljIGludCBfX2luaXQgZG1hcl90YWJsZV9kZXRlY3Qodm9pZCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKworCS8qIGlmIHdlIGNvdWxkIGZpbmQgRE1BUiB0YWJsZSwgdGhlbiB0aGVyZSBhcmUgRE1BUiBkZXZpY2VzICovCisJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfRE1BUiwgMCwKKwkJCQkoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZkbWFyX3RibCk7CisKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgIWRtYXJfdGJsKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HIFBSRUZJWCAiVW5hYmxlIHRvIG1hcCBETUFSXG4iKTsKKwkJc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCX0KKworCXJldHVybiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgPyAxIDogMCk7Cit9CiAKIC8qKgogICogcGFyc2VfZG1hcl90YWJsZSAtIHBhcnNlcyB0aGUgRE1BIHJlcG9ydGluZyB0YWJsZQpAQCAtMzAwLDExICszMTgsMTcgQEAKIAlzdHJ1Y3QgYWNwaV9kbWFyX2hlYWRlciAqZW50cnlfaGVhZGVyOwogCWludCByZXQgPSAwOwogCisJLyoKKwkgKiBEbyBpdCBhZ2FpbiwgZWFybGllciBkbWFyX3RibCBtYXBwaW5nIGNvdWxkIGJlIG1hcHBlZCB3aXRoCisJICogZml4ZWQgbWFwLgorCSAqLworCWRtYXJfdGFibGVfZGV0ZWN0KCk7CisKIAlkbWFyID0gKHN0cnVjdCBhY3BpX3RhYmxlX2RtYXIgKilkbWFyX3RibDsKIAlpZiAoIWRtYXIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGRtYXItPndpZHRoIDwgUEFHRV9TSElGVF80SyAtIDEpIHsKKwlpZiAoZG1hci0+d2lkdGggPCBQQUdFX1NISUZUIC0gMSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiSW52YWxpZCBETUFSIGhhd1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTM3MywxMCArMzk3LDEwIEBACiAKIGludCBfX2luaXQgZG1hcl9kZXZfc2NvcGVfaW5pdCh2b2lkKQogewotCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQsICpkcmhkX247CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKLQlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcmhkLCBkcmhkX24sICZkbWFyX2RyaGRfdW5pdHMsIGxpc3QpIHsKIAkJcmV0ID0gZG1hcl9wYXJzZV9kZXYoZHJoZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMzg0LDggKzQwOCw4IEBACiAKICNpZmRlZiBDT05GSUdfRE1BUgogCXsKLQkJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyOwotCQlmb3JfZWFjaF9ybXJyX3VuaXRzKHJtcnIpIHsKKwkJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyLCAqcm1ycl9uOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm1yciwgcm1ycl9uLCAmZG1hcl9ybXJyX3VuaXRzLCBsaXN0KSB7CiAJCQlyZXQgPSBybXJyX3BhcnNlX2RldihybXJyKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTQzMCwzMyArNDU0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogZWFybHlfZG1hcl9kZXRlY3QgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBETUFSIGRldmljZXMKLSAqLwotaW50IF9faW5pdCBlYXJseV9kbWFyX2RldGVjdCh2b2lkKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCi0JLyogaWYgd2UgY291bGQgZmluZCBETUFSIHRhYmxlLCB0aGVuIHRoZXJlIGFyZSBETUFSIGRldmljZXMgKi8KLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19ETUFSLCAwLAotCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmRtYXJfdGJsKTsKLQotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiAhZG1hcl90YmwpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIERNQVJcbiIpOwotCQlzdGF0dXMgPSBBRV9OT1RfRk9VTkQ7Ci0JfQotCi0JcmV0dXJuIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSA/IDEgOiAwKTsKLX0KLQogdm9pZCBfX2luaXQgZGV0ZWN0X2ludGVsX2lvbW11KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGVhcmx5X2RtYXJfZGV0ZWN0KCk7CisJcmV0ID0gZG1hcl90YWJsZV9kZXRlY3QoKTsKIAotI2lmZGVmIENPTkZJR19ETUFSCiAJeworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCXN0cnVjdCBhY3BpX3RhYmxlX2RtYXIgKmRtYXI7CiAJCS8qCiAJCSAqIGZvciBub3cgd2Ugd2lsbCBkaXNhYmxlIGRtYS1yZW1hcHBpbmcgd2hlbiBpbnRlcnJ1cHQKQEAgLTQ2NSwyOCArNDcwLDE4IEBACiAJCSAqIGlzIGFkZGVkLCB3ZSB3aWxsIG5vdCBuZWVkIHRoaXMgYW55IG1vcmUuCiAJCSAqLwogCQlkbWFyID0gKHN0cnVjdCBhY3BpX3RhYmxlX2RtYXIgKikgZG1hcl90Ymw7Ci0JCWlmIChyZXQgJiYgY3B1X2hhc194MmFwaWMgJiYgZG1hci0+ZmxhZ3MgJiAweDEpIHsKKwkJaWYgKHJldCAmJiBjcHVfaGFzX3gyYXBpYyAmJiBkbWFyLT5mbGFncyAmIDB4MSkKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiUXVldWVkIGludmFsaWRhdGlvbiB3aWxsIGJlIGVuYWJsZWQgdG8gc3VwcG9ydCAiCiAJCQkgICAgICAgIngyYXBpYyBhbmQgSW50ci1yZW1hcHBpbmcuXG4iKTsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiRGlzYWJsaW5nIElPTU1VIGRldGVjdGlvbiwgYmVjYXVzZSBvZiBtaXNzaW5nICIKLQkJCSAgICAgICAicXVldWVkIGludmFsaWRhdGlvbiBzdXBwb3J0IGZvciBJT1RMQiAiCi0JCQkgICAgICAgImludmFsaWRhdGlvblxuIik7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIlVzZSBcIm5veDJhcGljXCIsIGlmIHlvdSB3YW50IHRvIHVzZSBJbnRlbCAiCi0JCQkgICAgICAgIiBJT01NVSBmb3IgRE1BLXJlbWFwcGluZyBhbmQgZG9uJ3QgY2FyZSBhYm91dCAiCi0JCQkgICAgICAgIiB4MmFwaWMgc3VwcG9ydFxuIik7Ci0KLQkJCWRtYXJfZGlzYWJsZWQgPSAxOwotCQkJcmV0dXJuOwotCQl9Ci0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19ETUFSCiAJCWlmIChyZXQgJiYgIW5vX2lvbW11ICYmICFpb21tdV9kZXRlY3RlZCAmJiAhc3dpb3RsYiAmJgogCQkgICAgIWRtYXJfZGlzYWJsZWQpCiAJCQlpb21tdV9kZXRlY3RlZCA9IDE7Ci0JfQogI2VuZGlmCisJfQorCWRtYXJfdGJsID0gTlVMTDsKIH0KIAogCkBAIC01MDMsNyArNDk4LDcgQEAKIAogCWlvbW11LT5zZXFfaWQgPSBpb21tdV9hbGxvY2F0ZWQrKzsKIAotCWlvbW11LT5yZWcgPSBpb3JlbWFwKGRyaGQtPnJlZ19iYXNlX2FkZHIsIFBBR0VfU0laRV80Syk7CisJaW9tbXUtPnJlZyA9IGlvcmVtYXAoZHJoZC0+cmVnX2Jhc2VfYWRkciwgVlREX1BBR0VfU0laRSk7CiAJaWYgKCFpb21tdS0+cmVnKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IGNhbid0IG1hcCB0aGUgcmVnaW9uXG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTUxNCw4ICs1MDksOCBAQAogCS8qIHRoZSByZWdpc3RlcnMgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBwYWdlICovCiAJbWFwX3NpemUgPSBtYXhfdChpbnQsIGVjYXBfbWF4X2lvdGxiX29mZnNldChpb21tdS0+ZWNhcCksCiAJCWNhcF9tYXhfZmF1bHRfcmVnX29mZnNldChpb21tdS0+Y2FwKSk7Ci0JbWFwX3NpemUgPSBQQUdFX0FMSUdOXzRLKG1hcF9zaXplKTsKLQlpZiAobWFwX3NpemUgPiBQQUdFX1NJWkVfNEspIHsKKwltYXBfc2l6ZSA9IFZURF9QQUdFX0FMSUdOKG1hcF9zaXplKTsKKwlpZiAobWFwX3NpemUgPiBWVERfUEFHRV9TSVpFKSB7CiAJCWlvdW5tYXAoaW9tbXUtPnJlZyk7CiAJCWlvbW11LT5yZWcgPSBpb3JlbWFwKGRyaGQtPnJlZ19iYXNlX2FkZHIsIG1hcF9zaXplKTsKIAkJaWYgKCFpb21tdS0+cmVnKSB7CkBAIC01MjYsOCArNTIxLDEwIEBACiAKIAl2ZXIgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9WRVJfUkVHKTsKIAlwcl9kZWJ1ZygiSU9NTVUgJWxseDogdmVyICVkOiVkIGNhcCAlbGx4IGVjYXAgJWxseFxuIiwKLQkJZHJoZC0+cmVnX2Jhc2VfYWRkciwgRE1BUl9WRVJfTUFKT1IodmVyKSwgRE1BUl9WRVJfTUlOT1IodmVyKSwKLQkJaW9tbXUtPmNhcCwgaW9tbXUtPmVjYXApOworCQkodW5zaWduZWQgbG9uZyBsb25nKWRyaGQtPnJlZ19iYXNlX2FkZHIsCisJCURNQVJfVkVSX01BSk9SKHZlciksIERNQVJfVkVSX01JTk9SKHZlciksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW9tbXUtPmNhcCwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylpb21tdS0+ZWNhcCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW9tbXUtPnJlZ2lzdGVyX2xvY2spOwogCkBAIC01ODAsMTEgKzU3NywxMSBAQAogCiAJaHcgPSBxaS0+ZGVzYzsKIAotCXNwaW5fbG9jaygmcWktPnFfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnFpLT5xX2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAocWktPmZyZWVfY250IDwgMykgewotCQlzcGluX3VubG9jaygmcWktPnFfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFpLT5xX2xvY2ssIGZsYWdzKTsKIAkJY3B1X3JlbGF4KCk7Ci0JCXNwaW5fbG9jaygmcWktPnFfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZxaS0+cV9sb2NrLCBmbGFncyk7CiAJfQogCiAJaW5kZXggPSBxaS0+ZnJlZV9oZWFkOwpAQCAtNjA1LDE1ICs2MDIsMjIgQEAKIAlxaS0+ZnJlZV9oZWFkID0gKHFpLT5mcmVlX2hlYWQgKyAyKSAlIFFJX0xFTkdUSDsKIAlxaS0+ZnJlZV9jbnQgLT0gMjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmaW9tbXUtPnJlZ2lzdGVyX2xvY2spOwogCS8qCiAJICogdXBkYXRlIHRoZSBIVyB0YWlsIHJlZ2lzdGVyIGluZGljYXRpbmcgdGhlIHByZXNlbmNlIG9mCiAJICogbmV3IGRlc2NyaXB0b3JzLgogCSAqLwogCXdyaXRlbChxaS0+ZnJlZV9oZWFkIDw8IDQsIGlvbW11LT5yZWcgKyBETUFSX0lRVF9SRUcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJmlvbW11LT5yZWdpc3Rlcl9sb2NrKTsKIAogCXdoaWxlIChxaS0+ZGVzY19zdGF0dXNbd2FpdF9pbmRleF0gIT0gUUlfRE9ORSkgeworCQkvKgorCQkgKiBXZSB3aWxsIGxlYXZlIHRoZSBpbnRlcnJ1cHRzIGRpc2FibGVkLCB0byBwcmV2ZW50IGludGVycnVwdAorCQkgKiBjb250ZXh0IHRvIHF1ZXVlIGFub3RoZXIgY21kIHdoaWxlIGEgY21kIGlzIGFscmVhZHkgc3VibWl0dGVkCisJCSAqIGFuZCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIG9uIHRoaXMgY3B1LiBUaGlzIGlzIHRvIGF2b2lkCisJCSAqIGEgZGVhZGxvY2sgd2hlcmUgdGhlIGludGVycnVwdCBjb250ZXh0IGNhbiB3YWl0IGluZGVmaW5pdGVseQorCQkgKiBmb3IgZnJlZSBzbG90cyBpbiB0aGUgcXVldWUuCisJCSAqLwogCQlzcGluX3VubG9jaygmcWktPnFfbG9jayk7CiAJCWNwdV9yZWxheCgpOwogCQlzcGluX2xvY2soJnFpLT5xX2xvY2spOwpAQCAtNjIyLDcgKzYyNiw3IEBACiAJcWktPmRlc2Nfc3RhdHVzW2luZGV4XSA9IFFJX0RPTkU7CiAKIAlyZWNsYWltX2ZyZWVfZGVzYyhxaSk7Ci0Jc3Bpbl91bmxvY2soJnFpLT5xX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFpLT5xX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTYzOCw2ICs2NDIsNjIgQEAKIAlxaV9zdWJtaXRfc3luYygmZGVzYywgaW9tbXUpOwogfQogCitpbnQgcWlfZmx1c2hfY29udGV4dChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLCB1MTYgc2lkLCB1OCBmbSwKKwkJICAgICB1NjQgdHlwZSwgaW50IG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKQoreworCisJc3RydWN0IHFpX2Rlc2MgZGVzYzsKKworCWlmIChub25fcHJlc2VudF9lbnRyeV9mbHVzaCkgeworCQlpZiAoIWNhcF9jYWNoaW5nX21vZGUoaW9tbXUtPmNhcCkpCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJZGlkID0gMDsKKwl9CisKKwlkZXNjLmxvdyA9IFFJX0NDX0ZNKGZtKSB8IFFJX0NDX1NJRChzaWQpIHwgUUlfQ0NfRElEKGRpZCkKKwkJCXwgUUlfQ0NfR1JBTih0eXBlKSB8IFFJX0NDX1RZUEU7CisJZGVzYy5oaWdoID0gMDsKKworCXFpX3N1Ym1pdF9zeW5jKCZkZXNjLCBpb21tdSk7CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQgcWlfZmx1c2hfaW90bGIoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGRpZCwgdTY0IGFkZHIsCisJCSAgIHVuc2lnbmVkIGludCBzaXplX29yZGVyLCB1NjQgdHlwZSwKKwkJICAgaW50IG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKQoreworCXU4IGR3ID0gMCwgZHIgPSAwOworCisJc3RydWN0IHFpX2Rlc2MgZGVzYzsKKwlpbnQgaWggPSAwOworCisJaWYgKG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKSB7CisJCWlmICghY2FwX2NhY2hpbmdfbW9kZShpb21tdS0+Y2FwKSkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlkaWQgPSAwOworCX0KKworCWlmIChjYXBfd3JpdGVfZHJhaW4oaW9tbXUtPmNhcCkpCisJCWR3ID0gMTsKKworCWlmIChjYXBfcmVhZF9kcmFpbihpb21tdS0+Y2FwKSkKKwkJZHIgPSAxOworCisJZGVzYy5sb3cgPSBRSV9JT1RMQl9ESUQoZGlkKSB8IFFJX0lPVExCX0RSKGRyKSB8IFFJX0lPVExCX0RXKGR3KQorCQl8IFFJX0lPVExCX0dSQU4odHlwZSkgfCBRSV9JT1RMQl9UWVBFOworCWRlc2MuaGlnaCA9IFFJX0lPVExCX0FERFIoYWRkcikgfCBRSV9JT1RMQl9JSChpaCkKKwkJfCBRSV9JT1RMQl9BTShzaXplX29yZGVyKTsKKworCXFpX3N1Ym1pdF9zeW5jKCZkZXNjLCBpb21tdSk7CisKKwlyZXR1cm4gMDsKKworfQorCiAvKgogICogRW5hYmxlIFF1ZXVlZCBJbnZhbGlkYXRpb24gaW50ZXJmYWNlLiBUaGlzIGlzIGEgbXVzdCB0byBzdXBwb3J0CiAgKiBpbnRlcnJ1cHQtcmVtYXBwaW5nLiBBbHNvIHVzZWQgYnkgRE1BLXJlbWFwcGluZywgd2hpY2ggcmVwbGFjZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKaW5kZXggNWE1OGIwNy4uZjllMjQ0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKQEAgLTUwLDkgKzUwLDYgQEAKICNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCiAKLS8qIG5hbWUgc2l6ZSB3aGljaCBpcyB1c2VkIGZvciBlbnRyaWVzIGluIHBjaWhwZnMgKi8KLSNkZWZpbmUgU0xPVF9OQU1FX1NJWkUJMjAJCS8qIHtfU1VOfSAqLwotCiBzdHJ1Y3QgYWNwaXBocF9icmlkZ2U7CiBzdHJ1Y3QgYWNwaXBocF9zbG90OwogCkBAIC02Myw5ICs2MCwxMyBAQAogCXN0cnVjdCBob3RwbHVnX3Nsb3QJKmhvdHBsdWdfc2xvdDsKIAlzdHJ1Y3QgYWNwaXBocF9zbG90CSphY3BpX3Nsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvIGluZm87Ci0JY2hhciBuYW1lW1NMT1RfTkFNRV9TSVpFXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2xvdF9uYW1lKHN0cnVjdCBzbG90ICpzbG90KQoreworCXJldHVybiBob3RwbHVnX3Nsb3RfbmFtZShzbG90LT5ob3RwbHVnX3Nsb3QpOworfQorCiAvKgogICogc3RydWN0IGFjcGlwaHBfYnJpZGdlIC0gUENJIGJyaWRnZSBpbmZvcm1hdGlvbgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCmluZGV4IDBlNDk2ZTguLjk1YjUzNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwpAQCAtNDQsNiArNDQsOSBAQAogCiAjZGVmaW5lIE1ZX05BTUUJImFjcGlwaHAiCiAKKy8qIG5hbWUgc2l6ZSB3aGljaCBpcyB1c2VkIGZvciBlbnRyaWVzIGluIHBjaWhwZnMgKi8KKyNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgIDIxICAgICAgICAgICAgICAvKiB7X1NVTn0gKi8KKwogc3RhdGljIGludCBkZWJ1ZzsKIGludCBhY3BpcGhwX2RlYnVnOwogCkBAIC04NCw3ICs4Nyw2IEBACiAJLmdldF9hZGFwdGVyX3N0YXR1cwk9IGdldF9hZGFwdGVyX3N0YXR1cywKIH07CiAKLQogLyoqCiAgKiBhY3BpcGhwX3JlZ2lzdGVyX2F0dGVudGlvbiAtIHNldCBhdHRlbnRpb24gTEVEIGNhbGxiYWNrCiAgKiBAaW5mbzogbXVzdCBiZSBjb21wbGV0ZWx5IGZpbGxlZCB3aXRoIExFRCBjYWxsYmFja3MKQEAgLTEzNiw3ICsxMzgsNyBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkvKiBlbmFibGUgdGhlIHNwZWNpZmllZCBzbG90ICovCiAJcmV0dXJuIGFjcGlwaHBfZW5hYmxlX3Nsb3Qoc2xvdC0+YWNwaV9zbG90KTsKQEAgLTE1NCw3ICsxNTYsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKIAogCS8qIGRpc2FibGUgdGhlIHNwZWNpZmllZCBzbG90ICovCiAJcmV0dmFsID0gYWNwaXBocF9kaXNhYmxlX3Nsb3Qoc2xvdC0+YWNwaV9zbG90KTsKQEAgLTE3Nyw3ICsxNzksNyBAQAogIHsKIAlpbnQgcmV0dmFsID0gLUVOT0RFVjsKIAotIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90X25hbWUoaG90cGx1Z19zbG90KSk7CiAgCiAJaWYgKGF0dGVudGlvbl9pbmZvICYmIHRyeV9tb2R1bGVfZ2V0KGF0dGVudGlvbl9pbmZvLT5vd25lcikpIHsKIAkJcmV0dmFsID0gYXR0ZW50aW9uX2luZm8tPnNldF9hdHRuKGhvdHBsdWdfc2xvdCwgc3RhdHVzKTsKQEAgLTIwMCw3ICsyMDIsNyBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkqdmFsdWUgPSBhY3BpcGhwX2dldF9wb3dlcl9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKIApAQCAtMjIyLDcgKzIyNCw3IEBACiB7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90X25hbWUoaG90cGx1Z19zbG90KSk7CiAKIAlpZiAoYXR0ZW50aW9uX2luZm8gJiYgdHJ5X21vZHVsZV9nZXQoYXR0ZW50aW9uX2luZm8tPm93bmVyKSkgewogCQlyZXR2YWwgPSBhdHRlbnRpb25faW5mby0+Z2V0X2F0dG4oaG90cGx1Z19zbG90LCB2YWx1ZSk7CkBAIC0yNDUsNyArMjQ3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJKnZhbHVlID0gYWNwaXBocF9nZXRfbGF0Y2hfc3RhdHVzKHNsb3QtPmFjcGlfc2xvdCk7CiAKQEAgLTI2NSw3ICsyNjcsNyBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkqdmFsdWUgPSBhY3BpcGhwX2dldF9hZGFwdGVyX3N0YXR1cyhzbG90LT5hY3BpX3Nsb3QpOwogCkBAIC0yOTksNyArMzAxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90KTsKIAlrZnJlZShzbG90KTsKQEAgLTMxMCw2ICszMTIsNyBAQAogewogCXN0cnVjdCBzbG90ICpzbG90OwogCWludCByZXR2YWwgPSAtRU5PTUVNOworCWNoYXIgbmFtZVtTTE9UX05BTUVfU0laRV07CiAKIAlzbG90ID0ga3phbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNsb3QpCkBAIC0zMjEsOCArMzI0LDYgQEAKIAogCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mbyA9ICZzbG90LT5pbmZvOwogCi0Jc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lID0gc2xvdC0+bmFtZTsKLQogCXNsb3QtPmhvdHBsdWdfc2xvdC0+cHJpdmF0ZSA9IHNsb3Q7CiAJc2xvdC0+aG90cGx1Z19zbG90LT5yZWxlYXNlID0gJnJlbGVhc2Vfc2xvdDsKIAlzbG90LT5ob3RwbHVnX3Nsb3QtPm9wcyA9ICZhY3BpX2hvdHBsdWdfc2xvdF9vcHM7CkBAIC0zMzYsMTEgKzMzNywxMiBAQAogCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+Y3VyX2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCiAJYWNwaXBocF9zbG90LT5zbG90ID0gc2xvdDsKLQlzbnByaW50ZihzbG90LT5uYW1lLCBzaXplb2Yoc2xvdC0+bmFtZSksICIldSIsIHNsb3QtPmFjcGlfc2xvdC0+c3VuKTsKKwlzbnByaW50ZihuYW1lLCBTTE9UX05BTUVfU0laRSwgIiV1Iiwgc2xvdC0+YWNwaV9zbG90LT5zdW4pOwogCiAJcmV0dmFsID0gcGNpX2hwX3JlZ2lzdGVyKHNsb3QtPmhvdHBsdWdfc2xvdCwKIAkJCQkJYWNwaXBocF9zbG90LT5icmlkZ2UtPnBjaV9idXMsCi0JCQkJCWFjcGlwaHBfc2xvdC0+ZGV2aWNlKTsKKwkJCQkJYWNwaXBocF9zbG90LT5kZXZpY2UsCisJCQkJCW5hbWUpOwogCWlmIChyZXR2YWwgPT0gLUVCVVNZKQogCQlnb3RvIGVycm9yX2hwc2xvdDsKIAlpZiAocmV0dmFsKSB7CkBAIC0zNDgsNyArMzUwLDcgQEAKIAkJZ290byBlcnJvcl9ocHNsb3Q7CiAgCX0KIAotCWluZm8oIlNsb3QgWyVzXSByZWdpc3RlcmVkXG4iLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCWluZm8oIlNsb3QgWyVzXSByZWdpc3RlcmVkXG4iLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dXJuIDA7CiBlcnJvcl9ocHNsb3Q6CkBAIC0zNjUsNyArMzY3LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGFjcGlwaHBfc2xvdC0+c2xvdDsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWluZm8gKCJTbG90IFslc10gdW5yZWdpc3RlcmVkXG4iLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCWluZm8oIlNsb3QgWyVzXSB1bnJlZ2lzdGVyZWRcbiIsIHNsb3RfbmFtZShzbG90KSk7CiAKIAlyZXR2YWwgPSBwY2lfaHBfZGVyZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwppbmRleCBhM2U0NzA1Li45NTVhYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKQEAgLTE2OSw3ICsxNjksOSBAQAogfQogCiAKLQorc3RhdGljIHN0cnVjdCBhY3BpX2RvY2tfb3BzIGFjcGlwaHBfZG9ja19vcHMgPSB7CisJLmhhbmRsZXIgPSBoYW5kbGVfaG90cGx1Z19ldmVudF9mdW5jLAorfTsKIAogLyogY2FsbGJhY2sgcm91dGluZSB0byByZWdpc3RlciBlYWNoIEFDUEkgUENJIHNsb3Qgb2JqZWN0ICovCiBzdGF0aWMgYWNwaV9zdGF0dXMKQEAgLTE4MCw3ICsxODIsNyBAQAogCXN0cnVjdCBhY3BpcGhwX2Z1bmMgKm5ld2Z1bmM7CiAJYWNwaV9oYW5kbGUgdG1wOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXVuc2lnbmVkIGxvbmcgYWRyLCBzdW47CisJdW5zaWduZWQgbG9uZyBsb25nIGFkciwgc3VuOwogCWludCBkZXZpY2UsIGZ1bmN0aW9uLCByZXR2YWw7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX0FEUiIsIE5VTEwsICZhZHIpOwpAQCAtMjg1LDcgKzI4Nyw3IEBACiAJCSAqLwogCQluZXdmdW5jLT5mbGFncyAmPSB+RlVOQ19IQVNfRUowOwogCQlpZiAocmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShoYW5kbGUsCi0JCQloYW5kbGVfaG90cGx1Z19ldmVudF9mdW5jLCBuZXdmdW5jKSkKKwkJCSZhY3BpcGhwX2RvY2tfb3BzLCBuZXdmdW5jKSkKIAkJCWRiZygiZmFpbGVkIHRvIHJlZ2lzdGVyIGRvY2sgZGV2aWNlXG4iKTsKIAogCQkvKiB3ZSBuZWVkIHRvIGJlIG5vdGlmaWVkIHdoZW4gZG9jayBldmVudHMgaGFwcGVuCkBAIC01MjgsNyArNTMwLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9oYW5kbGUgZHVtbXlfaGFuZGxlOwotCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJaW50IGRldmljZSwgZnVuY3Rpb247CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyA9IGNvbnRleHQ7CkBAIC01NzMsNyArNTc1LDcgQEAKIHN0YXRpYyBpbnQgYWRkX2JyaWRnZShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJaW50IHNlZywgYnVzOwogCWFjcGlfaGFuZGxlIGR1bW15X2hhbmRsZTsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1czsKQEAgLTc2Nyw3ICs3NjksNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlpbnQgcmVzdWx0ID0gLTE7Ci0JdW5zaWduZWQgbG9uZyBnc2I7CisJdW5zaWduZWQgbG9uZyBsb25nIGdzYjsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwogCXZvaWQgKnRhYmxlOwpAQCAtODA4LDcgKzgxMCw3IEBACiBpb2FwaWNfYWRkKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHN0YTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhOwogCWFjcGlfaGFuZGxlIHRtcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1MzIgZ3NpX2Jhc2U7CkBAIC04NzIsNyArODc0LDcgQEAKIGlvYXBpY19yZW1vdmUoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcnYpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgc3RhOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGE7CiAJYWNwaV9oYW5kbGUgdG1wOwogCXUzMiBnc2lfYmFzZTsKIAlzdHJ1Y3QgYWNwaXBocF9pb2FwaWMgKnBvcywgKm4sICppb2FwaWMgPSBOVUxMOwpAQCAtMTI2NCw3ICsxMjY2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3Nsb3Rfc3RhdHVzKHN0cnVjdCBhY3BpcGhwX3Nsb3QgKnNsb3QpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgc3RhID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhID0gMDsKIAl1MzIgZHZpZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCXN0cnVjdCBhY3BpcGhwX2Z1bmMgKmZ1bmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKaW5kZXggMmI3YzQ1ZS4uODgxZmRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJdW5pb24gYWNwaV9vYmplY3QgYXJnc1syXTsgCiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zID0geyAucG9pbnRlciA9IGFyZ3MsIC5jb3VudCA9IDIgfTsKIAlhY3BpX3N0YXR1cyBzdGF0OyAKLQl1bnNpZ25lZCBsb25nIHJjOworCXVuc2lnbmVkIGxvbmcgbG9uZyByYzsKIAl1bmlvbiBhcGNpX2Rlc2NyaXB0b3IgKmlibV9zbG90OwogCiAJaWJtX3Nsb3QgPSBpYm1fc2xvdF9mcm9tX2lkKGhwc2xvdF90b19zdW4oc2xvdCkpOwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJCWVycigiQVBMUyBldmFsdWF0aW9uIGZhaWxlZDogIDB4JTA4eFxuIiwgc3RhdCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSBpZiAoIXJjKSB7Ci0JCWVycigiQVBMUyBtZXRob2QgZmFpbGVkOiAgMHglMDhseFxuIiwgcmMpOworCQllcnIoIkFQTFMgbWV0aG9kIGZhaWxlZDogIDB4JTA4bGx4XG4iLCByYyk7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Zy5oCmluZGV4IGQ5NzY5YjMuLjlmZmY4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWcuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaG90cGx1Zy5oPgogCiAvKiBQSUNNRyAyLjEgUjIuMCBIUyBDU1IgYml0czogKi8KICNkZWZpbmUgSFNfQ1NSX0lOUwkweDAwODAKQEAgLTY5LDYgKzcwLDExIEBACiAJc3RydWN0IGNwY2lfaHBfY29udHJvbGxlcl9vcHMgKm9wczsKIH07CiAKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2xvdF9uYW1lKHN0cnVjdCBzbG90ICpzbG90KQoreworCXJldHVybiBob3RwbHVnX3Nsb3RfbmFtZShzbG90LT5ob3RwbHVnX3Nsb3QpOworfQorCiBleHRlcm4gaW50IGNwY2lfaHBfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgY3BjaV9ocF9jb250cm9sbGVyICpjb250cm9sbGVyKTsKIGV4dGVybiBpbnQgY3BjaV9ocF91bnJlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IGNwY2lfaHBfY29udHJvbGxlciAqY29udHJvbGxlcik7CiBleHRlcm4gaW50IGNwY2lfaHBfcmVnaXN0ZXJfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsIHU4IGZpcnN0LCB1OCBsYXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX2NvcmUuYwppbmRleCA5MzU5NDc5Li5kZTk0ZjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXMiLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlpZiAoY29udHJvbGxlci0+b3BzLT5zZXRfcG93ZXIpCiAJCXJldHZhbCA9IGNvbnRyb2xsZXItPm9wcy0+c2V0X3Bvd2VyKHNsb3QsIDEpOwpAQCAtMTIxLDI1ICsxMjEsMjMgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXMiLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlkb3duX3dyaXRlKCZsaXN0X3J3c2VtKTsKIAogCS8qIFVuY29uZmlndXJlIGRldmljZSAqLwotCWRiZygiJXMgLSB1bmNvbmZpZ3VyaW5nIHNsb3QgJXMiLAotCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gdW5jb25maWd1cmluZyBzbG90ICVzIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAJaWYgKChyZXR2YWwgPSBjcGNpX3VuY29uZmlndXJlX3Nsb3Qoc2xvdCkpKSB7CiAJCWVycigiJXMgLSBjb3VsZCBub3QgdW5jb25maWd1cmUgc2xvdCAlcyIsCi0JCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJICAgIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCQlnb3RvIGRpc2FibGVfZXJyb3I7CiAJfQotCWRiZygiJXMgLSBmaW5pc2hlZCB1bmNvbmZpZ3VyaW5nIHNsb3QgJXMiLAotCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gZmluaXNoZWQgdW5jb25maWd1cmluZyBzbG90ICVzIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkvKiBDbGVhciBFWFQgKGJ5IHNldHRpbmcgaXQpICovCiAJaWYgKGNwY2lfY2xlYXJfZXh0KHNsb3QpKSB7CiAJCWVycigiJXMgLSBjb3VsZCBub3QgY2xlYXIgRVhUIGZvciBzbG90ICVzIiwKLQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCQkgICAgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZGlzYWJsZV9lcnJvcjsKIAl9CkBAIC0yMTQsNyArMjEyLDYgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mbyk7Ci0Ja2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QpOwogCWlmIChzbG90LT5kZXYpCiAJCXBjaV9kZXZfcHV0KHNsb3QtPmRldik7CkBAIC0yMjIsMTIgKzIxOSw2IEBACiB9CiAKICNkZWZpbmUgU0xPVF9OQU1FX1NJWkUJNgotc3RhdGljIHZvaWQKLW1ha2Vfc2xvdF9uYW1lKHN0cnVjdCBzbG90ICpzbG90KQotewotCXNucHJpbnRmKHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSwKLQkJIFNMT1RfTkFNRV9TSVpFLCAiJTAyeDolMDJ4Iiwgc2xvdC0+YnVzLT5udW1iZXIsIHNsb3QtPm51bWJlcik7Ci19CiAKIGludAogY3BjaV9ocF9yZWdpc3Rlcl9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdTggZmlyc3QsIHU4IGxhc3QpCkBAIC0yMzUsNyArMjI2LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvICppbmZvOwotCWNoYXIgKm5hbWU7CisJY2hhciBuYW1lW1NMT1RfTkFNRV9TSVpFXTsKIAlpbnQgc3RhdHVzID0gLUVOT01FTTsKIAlpbnQgaTsKIApAQCAtMjYyLDM0ICsyNTMsMzEgQEAKIAkJCWdvdG8gZXJyb3JfaHBzbG90OwogCQlob3RwbHVnX3Nsb3QtPmluZm8gPSBpbmZvOwogCi0JCW5hbWUgPSBrbWFsbG9jKFNMT1RfTkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuYW1lKQotCQkJZ290byBlcnJvcl9pbmZvOwotCQlob3RwbHVnX3Nsb3QtPm5hbWUgPSBuYW1lOwotCiAJCXNsb3QtPmJ1cyA9IGJ1czsKIAkJc2xvdC0+bnVtYmVyID0gaTsKIAkJc2xvdC0+ZGV2Zm4gPSBQQ0lfREVWRk4oaSwgMCk7CiAKKwkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICIlMDJ4OiUwMngiLCBidXMtPm51bWJlciwgaSk7CisKIAkJaG90cGx1Z19zbG90LT5wcml2YXRlID0gc2xvdDsKIAkJaG90cGx1Z19zbG90LT5yZWxlYXNlID0gJnJlbGVhc2Vfc2xvdDsKLQkJbWFrZV9zbG90X25hbWUoc2xvdCk7CiAJCWhvdHBsdWdfc2xvdC0+b3BzID0gJmNwY2lfaG90cGx1Z19zbG90X29wczsKIAogCQkvKgogCQkgKiBJbml0aWFsaXplIHRoZSBzbG90IGluZm8gc3RydWN0dXJlIHdpdGggc29tZSBrbm93bgogCQkgKiBnb29kIHZhbHVlcy4KIAkJICovCi0JCWRiZygiaW5pdGlhbGl6aW5nIHNsb3QgJXMiLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCQlkYmcoImluaXRpYWxpemluZyBzbG90ICVzIiwgbmFtZSk7CiAJCWluZm8tPnBvd2VyX3N0YXR1cyA9IGNwY2lfZ2V0X3Bvd2VyX3N0YXR1cyhzbG90KTsKIAkJaW5mby0+YXR0ZW50aW9uX3N0YXR1cyA9IGNwY2lfZ2V0X2F0dGVudGlvbl9zdGF0dXMoc2xvdCk7CiAKLQkJZGJnKCJyZWdpc3RlcmluZyBzbG90ICVzIiwgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKLQkJc3RhdHVzID0gcGNpX2hwX3JlZ2lzdGVyKHNsb3QtPmhvdHBsdWdfc2xvdCwgYnVzLCBpKTsKKwkJZGJnKCJyZWdpc3RlcmluZyBzbG90ICVzIiwgbmFtZSk7CisJCXN0YXR1cyA9IHBjaV9ocF9yZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QsIGJ1cywgaSwgbmFtZSk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCWVycigicGNpX2hwX3JlZ2lzdGVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdHVzKTsKLQkJCWdvdG8gZXJyb3JfbmFtZTsKKwkJCWdvdG8gZXJyb3JfaW5mbzsKIAkJfQorCQlkYmcoInNsb3QgcmVnaXN0ZXJlZCB3aXRoIG5hbWU6ICVzIiwgc2xvdF9uYW1lKHNsb3QpKTsKIAogCQkvKiBBZGQgc2xvdCB0byBvdXIgaW50ZXJuYWwgbGlzdCAqLwogCQlkb3duX3dyaXRlKCZsaXN0X3J3c2VtKTsKQEAgLTI5OCw4ICsyODYsNiBAQAogCQl1cF93cml0ZSgmbGlzdF9yd3NlbSk7CiAJfQogCXJldHVybiAwOwotZXJyb3JfbmFtZToKLQlrZnJlZShuYW1lKTsKIGVycm9yX2luZm86CiAJa2ZyZWUoaW5mbyk7CiBlcnJvcl9ocHNsb3Q6CkBAIC0zMjcsNyArMzEzLDcgQEAKIAkJCWxpc3RfZGVsKCZzbG90LT5zbG90X2xpc3QpOwogCQkJc2xvdHMtLTsKIAotCQkJZGJnKCJkZXJlZ2lzdGVyaW5nIHNsb3QgJXMiLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCQkJZGJnKCJkZXJlZ2lzdGVyaW5nIHNsb3QgJXMiLCBzbG90X25hbWUoc2xvdCkpOwogCQkJc3RhdHVzID0gcGNpX2hwX2RlcmVnaXN0ZXIoc2xvdC0+aG90cGx1Z19zbG90KTsKIAkJCWlmIChzdGF0dXMpIHsKIAkJCQllcnIoInBjaV9ocF9kZXJlZ2lzdGVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwKQEAgLTM3OSwxMSArMzY1LDEwIEBACiAJCXJldHVybiAtMTsKIAl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmc2xvdF9saXN0LCBzbG90X2xpc3QpIHsKLQkJZGJnKCIlcyAtIGxvb2tpbmcgYXQgc2xvdCAlcyIsCi0JCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJZGJnKCIlcyAtIGxvb2tpbmcgYXQgc2xvdCAlcyIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCQlpZiAoY2xlYXJfaW5zICYmIGNwY2lfY2hlY2tfYW5kX2NsZWFyX2lucyhzbG90KSkKIAkJCWRiZygiJXMgLSBjbGVhcmVkIElOUyBmb3Igc2xvdCAlcyIsCi0JCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkgICAgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAJCWRldiA9IHBjaV9nZXRfc2xvdChzbG90LT5idXMsIFBDSV9ERVZGTihzbG90LT5udW1iZXIsIDApKTsKIAkJaWYgKGRldikgewogCQkJaWYgKHVwZGF0ZV9hZGFwdGVyX3N0YXR1cyhzbG90LT5ob3RwbHVnX3Nsb3QsIDEpKQpAQCAtNDE0LDggKzM5OSw3IEBACiAJfQogCWV4dHJhY3RlZCA9IGluc2VydGVkID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZzbG90X2xpc3QsIHNsb3RfbGlzdCkgewotCQlkYmcoIiVzIC0gbG9va2luZyBhdCBzbG90ICVzIiwKLQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCQlkYmcoIiVzIC0gbG9va2luZyBhdCBzbG90ICVzIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAJCWlmIChjcGNpX2NoZWNrX2FuZF9jbGVhcl9pbnMoc2xvdCkpIHsKIAkJCS8qCiAJCQkgKiBTb21lIGJyb2tlbiBoYXJkd2FyZSAoZS5nLiBQTFggOTA1NEFCKSBhc3NlcnRzCkBAIC00MjMsMzUgKzQwNywzNCBAQAogCQkJICovCiAJCQlpZiAoc2xvdC0+ZGV2KSB7CiAJCQkJd2Fybigic2xvdCAlcyBhbHJlYWR5IGluc2VydGVkIiwKLQkJCQkgICAgIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkJICAgICBzbG90X25hbWUoc2xvdCkpOwogCQkJCWluc2VydGVkKys7CiAJCQkJY29udGludWU7CiAJCQl9CiAKIAkJCS8qIFByb2Nlc3MgaW5zZXJ0aW9uICovCi0JCQlkYmcoIiVzIC0gc2xvdCAlcyBpbnNlcnRlZCIsCi0JCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQlkYmcoIiVzIC0gc2xvdCAlcyBpbnNlcnRlZCIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJCQkvKiBHU00sIGRlYnVnICovCiAJCQloc19jc3IgPSBjcGNpX2dldF9oc19jc3Ioc2xvdCk7CiAJCQlkYmcoIiVzIC0gc2xvdCAlcyBIU19DU1IgKDEpID0gJTA0eCIsCi0JCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSwgaHNfY3NyKTsKKwkJCSAgICBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpLCBoc19jc3IpOwogCiAJCQkvKiBDb25maWd1cmUgZGV2aWNlICovCiAJCQlkYmcoIiVzIC0gY29uZmlndXJpbmcgc2xvdCAlcyIsCi0JCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkgICAgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAJCQlpZiAoY3BjaV9jb25maWd1cmVfc2xvdChzbG90KSkgewogCQkJCWVycigiJXMgLSBjb3VsZCBub3QgY29uZmlndXJlIHNsb3QgJXMiLAotCQkJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJCQkgICAgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlkYmcoIiVzIC0gZmluaXNoZWQgY29uZmlndXJpbmcgc2xvdCAlcyIsCi0JCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkgICAgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkJCS8qIEdTTSwgZGVidWcgKi8KIAkJCWhzX2NzciA9IGNwY2lfZ2V0X2hzX2NzcihzbG90KTsKIAkJCWRiZygiJXMgLSBzbG90ICVzIEhTX0NTUiAoMikgPSAlMDR4IiwKLQkJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBoc19jc3IpOworCQkJICAgIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCksIGhzX2Nzcik7CiAKIAkJCWlmICh1cGRhdGVfbGF0Y2hfc3RhdHVzKHNsb3QtPmhvdHBsdWdfc2xvdCwgMSkpCiAJCQkJd2FybigiZmFpbHVyZSB0byB1cGRhdGUgbGF0Y2ggZmlsZSIpOwpAQCAtNDY0LDE4ICs0NDcsMTggQEAKIAkJCS8qIEdTTSwgZGVidWcgKi8KIAkJCWhzX2NzciA9IGNwY2lfZ2V0X2hzX2NzcihzbG90KTsKIAkJCWRiZygiJXMgLSBzbG90ICVzIEhTX0NTUiAoMykgPSAlMDR4IiwKLQkJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBoc19jc3IpOworCQkJICAgIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCksIGhzX2Nzcik7CiAKIAkJCWluc2VydGVkKys7CiAJCX0gZWxzZSBpZiAoY3BjaV9jaGVja19leHQoc2xvdCkpIHsKIAkJCS8qIFByb2Nlc3MgZXh0cmFjdGlvbiByZXF1ZXN0ICovCiAJCQlkYmcoIiVzIC0gc2xvdCAlcyBleHRyYWN0ZWQiLAotCQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCQkJICAgIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJCQkvKiBHU00sIGRlYnVnICovCiAJCQloc19jc3IgPSBjcGNpX2dldF9oc19jc3Ioc2xvdCk7CiAJCQlkYmcoIiVzIC0gc2xvdCAlcyBIU19DU1IgPSAlMDR4IiwKLQkJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBoc19jc3IpOworCQkJICAgIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCksIGhzX2Nzcik7CiAKIAkJCWlmICghc2xvdC0+ZXh0cmFjdGluZykgewogCQkJCWlmICh1cGRhdGVfbGF0Y2hfc3RhdHVzKHNsb3QtPmhvdHBsdWdfc2xvdCwgMCkpIHsKQEAgLTQ5Myw3ICs0NzYsNyBAQAogCQkJCSAqIGJvdGhlciB0cnlpbmcgdG8gdGVsbCB0aGUgZHJpdmVyIG9yIG5vdD8KIAkJCQkgKi8KIAkJCQllcnIoImNhcmQgaW4gc2xvdCAlcyB3YXMgaW1wcm9wZXJseSByZW1vdmVkIiwKLQkJCQkgICAgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJCQkgICAgc2xvdF9uYW1lKHNsb3QpKTsKIAkJCQlpZiAodXBkYXRlX2FkYXB0ZXJfc3RhdHVzKHNsb3QtPmhvdHBsdWdfc2xvdCwgMCkpCiAJCQkJCXdhcm4oImZhaWx1cmUgdG8gdXBkYXRlIGFkYXB0ZXIgZmlsZSIpOwogCQkJCXNsb3QtPmV4dHJhY3RpbmcgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYwppbmRleCBkZjgyYjk1Li44MjljMzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJCQkJCSAgICAgIGhzX2NhcCArIDIsCiAJCQkJCSAgICAgIGhzX2NzcikpIHsKIAkJCWVycigiQ291bGQgbm90IHNldCBMT08gZm9yIHNsb3QgJXMiLAotCQkJICAgIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkgICAgaG90cGx1Z19zbG90X25hbWUoc2xvdC0+aG90cGx1Z19zbG90KSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTIzOCw3ICsyMzgsNyBAQAogCQkJCQkgICAgICBoc19jYXAgKyAyLAogCQkJCQkgICAgICBoc19jc3IpKSB7CiAJCQllcnIoIkNvdWxkIG5vdCBjbGVhciBMT08gZm9yIHNsb3QgJXMiLAotCQkJICAgIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkgICAgaG90cGx1Z19zbG90X25hbWUoc2xvdC0+aG90cGx1Z19zbG90KSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCmluZGV4IGIxZGVjZmEuLmFmYWY4ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaApAQCAtNDQ5LDYgKzQ0OSwxMSBAQAogCiAvKiBpbmxpbmUgZnVuY3Rpb25zICovCiAKK3N0YXRpYyBpbmxpbmUgY2hhciAqc2xvdF9uYW1lKHN0cnVjdCBzbG90ICpzbG90KQoreworCXJldHVybiBob3RwbHVnX3Nsb3RfbmFtZShzbG90LT5ob3RwbHVnX3Nsb3QpOworfQorCiAvKgogICogcmV0dXJuX3Jlc291cmNlCiAgKgpAQCAtNjk2LDE0ICs3MDEsNiBAQAogCXJldHVybiBwcmVzZW5jZV9zYXZlOwogfQogCi0jZGVmaW5lIFNMT1RfTkFNRV9TSVpFIDEwCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX3Nsb3RfbmFtZShjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgc3RydWN0IHNsb3QgKnNsb3QpCi17Ci0Jc25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSwgIiVkIiwgc2xvdC0+bnVtYmVyKTsKLX0KLQotCiBzdGF0aWMgaW5saW5lIGludCB3YWl0X2Zvcl9jdHJsX2lycShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKICAgICAgICAgREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKaW5kZXggNTRkZWZlYy4uODUxNGMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYwpAQCAtMzE1LDE0ICszMTUsMTUgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKTsKLQlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOwogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdCk7CiAJa2ZyZWUoc2xvdCk7CiB9CiAKKyNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgMTAKKwogc3RhdGljIGludCBjdHJsX3Nsb3Rfc2V0dXAoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCiAJCQl2b2lkIF9faW9tZW0gKnNtYmlvc19zdGFydCwKIAkJCXZvaWQgX19pb21lbSAqc21iaW9zX3RhYmxlKQpAQCAtMzM1LDYgKzMzNiw3IEBACiAJdTggc2xvdF9udW1iZXI7CiAJdTggY3RybF9zbG90OwogCXUzMiB0ZW1wZHdvcmQ7CisJY2hhciBuYW1lW1NMT1RfTkFNRV9TSVpFXTsKIAl2b2lkIF9faW9tZW0gKnNsb3RfZW50cnk9IE5VTEw7CiAJaW50IHJlc3VsdCA9IC1FTk9NRU07CiAKQEAgLTM2MywxNiArMzY1LDEyIEBACiAJCWlmICghaG90cGx1Z19zbG90LT5pbmZvKQogCQkJZ290byBlcnJvcl9ocHNsb3Q7CiAJCWhvdHBsdWdfc2xvdF9pbmZvID0gaG90cGx1Z19zbG90LT5pbmZvOwotCQlob3RwbHVnX3Nsb3QtPm5hbWUgPSBrbWFsbG9jKFNMT1RfTkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoIWhvdHBsdWdfc2xvdC0+bmFtZSkKLQkJCWdvdG8gZXJyb3JfaW5mbzsKIAogCQlzbG90LT5jdHJsID0gY3RybDsKIAkJc2xvdC0+YnVzID0gY3RybC0+YnVzOwogCQlzbG90LT5kZXZpY2UgPSBzbG90X2RldmljZTsKIAkJc2xvdC0+bnVtYmVyID0gc2xvdF9udW1iZXI7Ci0JCWRiZygic2xvdC0+bnVtYmVyID0gJWRcbiIsIHNsb3QtPm51bWJlcik7CisJCWRiZygic2xvdC0+bnVtYmVyID0gJXVcbiIsIHNsb3QtPm51bWJlcik7CiAKIAkJc2xvdF9lbnRyeSA9IGdldF9TTUJJT1NfZW50cnkoc21iaW9zX3N0YXJ0LCBzbWJpb3NfdGFibGUsIDksCiAJCQkJCXNsb3RfZW50cnkpOwpAQCAtNDE4LDkgKzQxNiw5IEBACiAJCS8qIHJlZ2lzdGVyIHRoaXMgc2xvdCB3aXRoIHRoZSBob3RwbHVnIHBjaSBjb3JlICovCiAJCWhvdHBsdWdfc2xvdC0+cmVsZWFzZSA9ICZyZWxlYXNlX3Nsb3Q7CiAJCWhvdHBsdWdfc2xvdC0+cHJpdmF0ZSA9IHNsb3Q7Ci0JCW1ha2Vfc2xvdF9uYW1lKGhvdHBsdWdfc2xvdC0+bmFtZSwgU0xPVF9OQU1FX1NJWkUsIHNsb3QpOworCQlzbnByaW50ZihuYW1lLCBTTE9UX05BTUVfU0laRSwgIiV1Iiwgc2xvdC0+bnVtYmVyKTsKIAkJaG90cGx1Z19zbG90LT5vcHMgPSAmY3BxcGhwX2hvdHBsdWdfc2xvdF9vcHM7Ci0JCQorCiAJCWhvdHBsdWdfc2xvdF9pbmZvLT5wb3dlcl9zdGF0dXMgPSBnZXRfc2xvdF9lbmFibGVkKGN0cmwsIHNsb3QpOwogCQlob3RwbHVnX3Nsb3RfaW5mby0+YXR0ZW50aW9uX3N0YXR1cyA9CiAJCQljcHFfZ2V0X2F0dGVudGlvbl9zdGF0dXMoY3RybCwgc2xvdCk7CkBAIC00MzUsMTEgKzQzMywxMiBAQAogCQkJCXNsb3QtPm51bWJlciwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LAogCQkJCXNsb3RfbnVtYmVyKTsKIAkJcmVzdWx0ID0gcGNpX2hwX3JlZ2lzdGVyKGhvdHBsdWdfc2xvdCwKLQkJCQkJIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLAotCQkJCQkgc2xvdC0+ZGV2aWNlKTsKKwkJCQkJIGN0cmwtPnBjaV9kZXYtPmJ1cywKKwkJCQkJIHNsb3QtPmRldmljZSwKKwkJCQkJIG5hbWUpOwogCQlpZiAocmVzdWx0KSB7CiAJCQllcnIoInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmVzdWx0KTsKLQkJCWdvdG8gZXJyb3JfbmFtZTsKKwkJCWdvdG8gZXJyb3JfaW5mbzsKIAkJfQogCQkKIAkJc2xvdC0+bmV4dCA9IGN0cmwtPnNsb3Q7CkBAIC00NTEsOCArNDUwLDYgQEAKIAl9CiAKIAlyZXR1cm4gMDsKLWVycm9yX25hbWU6Ci0Ja2ZyZWUoaG90cGx1Z19zbG90LT5uYW1lKTsKIGVycm9yX2luZm86CiAJa2ZyZWUoaG90cGx1Z19zbG90X2luZm8pOwogZXJyb3JfaHBzbG90OgpAQCAtNjM4LDcgKzYzNSw3IEBACiAJdTggZGV2aWNlOwogCXU4IGZ1bmN0aW9uOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlpZiAoY3BxaHBfZ2V0X2J1c19kZXYoY3RybCwgJmJ1cywgJmRldmZuLCBzbG90LT5udW1iZXIpID09IC0xKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTY2NSw3ICs2NjIsNyBAQAogCXU4IGRldmljZTsKIAl1OCBmdW5jdGlvbjsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJaWYgKGNwcWhwX2dldF9idXNfZGV2KGN0cmwsICZidXMsICZkZXZmbiwgc2xvdC0+bnVtYmVyKSA9PSAtMSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02OTcsNyArNjk0LDcgQEAKIAl1OCBkZXZpY2U7CiAJdTggZnVuY3Rpb247CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKIAogCWlmIChjcHFocF9nZXRfYnVzX2RldihjdHJsLCAmYnVzLCAmZGV2Zm4sIHNsb3QtPm51bWJlcikgPT0gLTEpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNzIwLDcgKzcxNyw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlyZXR1cm4gY3BxaHBfaGFyZHdhcmVfdGVzdChjdHJsLCB2YWx1ZSk7CQogfQpAQCAtNzMxLDcgKzcyOCw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkqdmFsdWUgPSBnZXRfc2xvdF9lbmFibGVkKGN0cmwsIHNsb3QpOwogCXJldHVybiAwOwpAQCAtNzQyLDcgKzczOSw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwogCQotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJKnZhbHVlID0gY3BxX2dldF9hdHRlbnRpb25fc3RhdHVzKGN0cmwsIHNsb3QpOwogCXJldHVybiAwOwpAQCAtNzUzLDcgKzc1MCw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkqdmFsdWUgPSBjcHFfZ2V0X2xhdGNoX3N0YXR1cyhjdHJsLCBzbG90KTsKIApAQCAtNzY1LDcgKzc2Miw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAkqdmFsdWUgPSBnZXRfcHJlc2VuY2Vfc3RhdHVzKGN0cmwsIHNsb3QpOwogCkBAIC03NzcsNyArNzc0LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKIAogCSp2YWx1ZSA9IGN0cmwtPnNwZWVkX2NhcGFiaWxpdHk7CiAKQEAgLTc4OSw3ICs3ODYsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJKnZhbHVlID0gY3RybC0+c3BlZWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYwppbmRleCBlZjA0MWNhLi5hNjBhMjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCkBAIC0xMTM5LDcgKzExMzksNyBAQAogCWZvcihzbG90ID0gY3RybC0+c2xvdDsgc2xvdDsgc2xvdCA9IHNsb3QtPm5leHQpIHsKIAkJaWYgKHNsb3QtPmRldmljZSA9PSAoaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCkpIAogCQkJY29udGludWU7Ci0JCWlmICghc2xvdC0+aG90cGx1Z19zbG90ICYmICFzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8pIAorCQlpZiAoIXNsb3QtPmhvdHBsdWdfc2xvdCB8fCAhc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKQogCQkJY29udGludWU7CiAJCWlmIChzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmFkYXB0ZXJfc3RhdHVzID09IDApIAogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCmluZGV4IDE0NmNhOWMuLjNhMjYzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCkBAIC02NiwxMCArNjYsMTAgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZW1vdmVfd29yazsKIAl1bnNpZ25lZCBsb25nIHJlbW92ZWQ7Ci0JY2hhciBuYW1lWzhdOwogfTsKIAogc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBpbnQgZHVwX3Nsb3RzOwogc3RhdGljIExJU1RfSEVBRChzbG90X2xpc3QpOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkdW1teXBocF93cTsKIApAQCAtOTYsMTAgKzk2LDEzIEBACiAJa2ZyZWUoZHNsb3QpOwogfQogCisjZGVmaW5lIFNMT1RfTkFNRV9TSVpFCTgKKwogc3RhdGljIGludCBhZGRfc2xvdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBkdW1teV9zbG90ICpkc2xvdDsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90OworCWNoYXIgbmFtZVtTTE9UX05BTUVfU0laRV07CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAJc3RhdGljIGludCBjb3VudCA9IDE7CiAKQEAgLTExOSwxOSArMTIyLDIyIEBACiAJaWYgKCFkc2xvdCkKIAkJZ290byBlcnJvcl9pbmZvOwogCi0Jc2xvdC0+bmFtZSA9IGRzbG90LT5uYW1lOwotCXNucHJpbnRmKHNsb3QtPm5hbWUsIHNpemVvZihkc2xvdC0+bmFtZSksICJmYWtlJWQiLCBjb3VudCsrKTsKLQlkYmcoInNsb3QtPm5hbWUgPSAlc1xuIiwgc2xvdC0+bmFtZSk7CisJaWYgKGR1cF9zbG90cykKKwkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICJmYWtlIik7CisJZWxzZQorCQlzbnByaW50ZihuYW1lLCBTTE9UX05BTUVfU0laRSwgImZha2UlZCIsIGNvdW50KyspOworCWRiZygic2xvdC0+bmFtZSA9ICVzXG4iLCBuYW1lKTsKIAlzbG90LT5vcHMgPSAmZHVtbXlfaG90cGx1Z19zbG90X29wczsKIAlzbG90LT5yZWxlYXNlID0gJmR1bW15X3JlbGVhc2U7CiAJc2xvdC0+cHJpdmF0ZSA9IGRzbG90OwogCi0JcmV0dmFsID0gcGNpX2hwX3JlZ2lzdGVyKHNsb3QsIGRldi0+YnVzLCBQQ0lfU0xPVChkZXYtPmRldmZuKSk7CisJcmV0dmFsID0gcGNpX2hwX3JlZ2lzdGVyKHNsb3QsIGRldi0+YnVzLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwgbmFtZSk7CiAJaWYgKHJldHZhbCkgewogCQllcnIoInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKIAkJZ290byBlcnJvcl9kc2xvdDsKIAl9CiAKKwlkYmcoInNsb3QtPm5hbWUgPSAlc1xuIiwgaG90cGx1Z19zbG90X25hbWUoc2xvdCkpOwogCWRzbG90LT5zbG90ID0gc2xvdDsKIAlkc2xvdC0+ZGV2ID0gcGNpX2Rldl9nZXQoZGV2KTsKIAlsaXN0X2FkZCAoJmRzbG90LT5ub2RlLCAmc2xvdF9saXN0KTsKQEAgLTE2NywxMCArMTczLDExIEBACiB7CiAJaW50IHJldHZhbDsKIAotCWRiZygicmVtb3Zpbmcgc2xvdCAlc1xuIiwgZHNsb3QtPnNsb3QtPm5hbWUpOworCWRiZygicmVtb3Zpbmcgc2xvdCAlc1xuIiwgaG90cGx1Z19zbG90X25hbWUoZHNsb3QtPnNsb3QpKTsKIAlyZXR2YWwgPSBwY2lfaHBfZGVyZWdpc3Rlcihkc2xvdC0+c2xvdCk7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCJQcm9ibGVtIHVucmVnaXN0ZXJpbmcgYSBzbG90ICVzXG4iLCBkc2xvdC0+c2xvdC0+bmFtZSk7CisJCWVycigiUHJvYmxlbSB1bnJlZ2lzdGVyaW5nIGEgc2xvdCAlc1xuIiwKKwkJCWhvdHBsdWdfc2xvdF9uYW1lKGRzbG90LT5zbG90KSk7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIHRoZSBzaW5nbGUtdGhyZWFkZWQgd29ya3F1ZXVlIGhhbmRsZXIgdG8gcmVtb3ZlIGEgc2xvdCAqLwpAQCAtMzA4LDcgKzMxNSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCWRzbG90ID0gc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90X25hbWUoc2xvdCkpOwogCiAJZm9yIChmdW5jID0gNzsgZnVuYyA+PSAwOyBmdW5jLS0pIHsKIAkJZGV2ID0gcGNpX2dldF9zbG90KGRzbG90LT5kZXYtPmJ1cywgZHNsb3QtPmRldi0+ZGV2Zm4gKyBmdW5jKTsKQEAgLTM3Myw0ICszODAsNSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1vZGUgZW5hYmxlZCBvciBub3QiKTsKLQorbW9kdWxlX3BhcmFtKGR1cF9zbG90cywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkdXBfc2xvdHMsICJGb3JjZSBkdXBsaWNhdGUgc2xvdCBuYW1lcyBmb3IgZGVidWdnaW5nIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHAuaAppbmRleCA2MTJkOTYzLi5hOGQzOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwLmgKQEAgLTcwNywxNyArNzA3LDE2IEBACiAJdTggZGV2aWNlOwogCXU4IG51bWJlcjsKIAl1OCByZWFsX3BoeXNpY2FsX3Nsb3RfbnVtOwotCWNoYXIgbmFtZVsxMDBdOwogCXUzMiBjYXBhYmlsaXRpZXM7CiAJdTggc3VwcG9ydGVkX3NwZWVkOwogCXU4IHN1cHBvcnRlZF9idXNfbW9kZTsKKwl1OCBmbGFnOwkJLyogdGhpcyBpcyBmb3IgZGlzYWJsZSBzbG90IGFuZCBwb2xsaW5nICovCisJdTggY3Rscl9pbmRleDsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3Q7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CiAJc3RydWN0IHBjaV9mdW5jICpmdW5jOwogCXU4IGlycVs0XTsKLQl1OCBmbGFnOwkJLyogdGhpcyBpcyBmb3IgZGlzYWJsZSBzbG90IGFuZCBwb2xsaW5nICovCiAJaW50IGJpdF9tb2RlOwkJLyogMCA9IDMyLCAxID0gNjQgKi8KLQl1OCBjdGxyX2luZGV4OwogCXN0cnVjdCBidXNfaW5mbyAqYnVzX29uOwogCXN0cnVjdCBsaXN0X2hlYWQgaWJtX3Nsb3RfbGlzdDsKIAl1OCBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKaW5kZXggN2QyNzYzMS4uYzFhYmFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwpAQCAtMTIzLDEwICsxMjMsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IHByaW50X2J1c19pbmZvICh2b2lkKQogewogCXN0cnVjdCBidXNfaW5mbyAqcHRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjE7CiAJCi0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJmJ1c19pbmZvX2hlYWQpIHsKLQkJcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IGJ1c19pbmZvLCBidXNfaW5mb19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmJ1c19pbmZvX2hlYWQsIGJ1c19pbmZvX2xpc3QpIHsKIAkJZGVidWcgKCIlcyAtIHNsb3RfbWluID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPnNsb3RfbWluKTsKIAkJZGVidWcgKCIlcyAtIHNsb3RfbWF4ID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPnNsb3RfbWF4KTsKIAkJZGVidWcgKCIlcyAtIHNsb3RfY291bnQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+c2xvdF9jb3VudCk7CkBAIC0xNDYsMTAgKzE0NCw4IEBACiBzdGF0aWMgdm9pZCBwcmludF9sb19pbmZvICh2b2lkKQogewogCXN0cnVjdCByaW9fZGV0YWlsICpwdHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyMTsKIAlkZWJ1ZyAoInByaW50X2xvX2luZm8gLS0tLVxuIik7CQotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZyaW9fbG9faGVhZCkgewotCQlwdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3QgcmlvX2RldGFpbCwgcmlvX2RldGFpbF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnJpb19sb19oZWFkLCByaW9fZGV0YWlsX2xpc3QpIHsKIAkJZGVidWcgKCIlcyAtIHJpb19ub2RlX2lkID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPnJpb19ub2RlX2lkKTsKIAkJZGVidWcgKCIlcyAtIHJpb190eXBlID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPnJpb190eXBlKTsKIAkJZGVidWcgKCIlcyAtIG93bmVyX2lkID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPm93bmVyX2lkKTsKQEAgLTE2MywxMCArMTU5LDggQEAKIHN0YXRpYyB2b2lkIHByaW50X3ZnX2luZm8gKHZvaWQpCiB7CiAJc3RydWN0IHJpb19kZXRhaWwgKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIxOwogCWRlYnVnICgiJXMgLS0tXG4iLCBfX2Z1bmNfXyk7Ci0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJnJpb192Z19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCByaW9fZGV0YWlsLCByaW9fZGV0YWlsX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmcmlvX3ZnX2hlYWQsIHJpb19kZXRhaWxfbGlzdCkgewogCQlkZWJ1ZyAoIiVzIC0gcmlvX25vZGVfaWQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+cmlvX25vZGVfaWQpOwogCQlkZWJ1ZyAoIiVzIC0gcmlvX3R5cGUgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+cmlvX3R5cGUpOwogCQlkZWJ1ZyAoIiVzIC0gb3duZXJfaWQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+b3duZXJfaWQpOwpAQCAtMTgwLDEwICsxNzQsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IHByaW50X2ViZGFfcGNpX3JzcmMgKHZvaWQpCiB7CiAJc3RydWN0IGViZGFfcGNpX3JzcmMgKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIxOwogCi0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJmlibXBocF9lYmRhX3BjaV9yc3JjX2hlYWQpIHsKLQkJcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IGViZGFfcGNpX3JzcmMsIGViZGFfcGNpX3JzcmNfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZpYm1waHBfZWJkYV9wY2lfcnNyY19oZWFkLCBlYmRhX3BjaV9yc3JjX2xpc3QpIHsKIAkJZGVidWcgKCIlcyAtIHJzcmMgdHlwZTogJXggYnVzIzogJXggZGV2X2Z1bmM6ICV4IHN0YXJ0IGFkZHI6ICV4IGVuZCBhZGRyOiAleFxuIiwgCiAJCQlfX2Z1bmNfXywgcHRyLT5yc3JjX3R5cGUgLHB0ci0+YnVzX251bSwgcHRyLT5kZXZfZnVuLHB0ci0+c3RhcnRfYWRkciwgcHRyLT5lbmRfYWRkcik7CiAJfQpAQCAtMTkyLDEwICsxODQsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IHByaW50X2libV9zbG90ICh2b2lkKQogewogCXN0cnVjdCBzbG90ICpwdHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyMTsKIAotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZpYm1waHBfc2xvdF9oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBzbG90LCBpYm1fc2xvdF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmlibXBocF9zbG90X2hlYWQsIGlibV9zbG90X2xpc3QpIHsKIAkJZGVidWcgKCIlcyAtIHNsb3RfbnVtYmVyOiAleFxuIiwgX19mdW5jX18sIHB0ci0+bnVtYmVyKTsKIAl9CiB9CkBAIC0yMDMsMTAgKzE5Myw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfb3B0X3ZnICh2b2lkKQogewogCXN0cnVjdCBvcHRfcmlvICpwdHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyMTsKIAlkZWJ1ZyAoIiVzIC0tLVxuIiwgX19mdW5jX18pOwotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZvcHRfdmdfaGVhZCkgewotCQlwdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3Qgb3B0X3Jpbywgb3B0X3Jpb19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJm9wdF92Z19oZWFkLCBvcHRfcmlvX2xpc3QpIHsKIAkJZGVidWcgKCIlcyAtIHJpb190eXBlICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5yaW9fdHlwZSk7CiAJCWRlYnVnICgiJXMgLSBjaGFzc2lzX251bTogJXhcbiIsIF9fZnVuY19fLCBwdHItPmNoYXNzaXNfbnVtKTsKIAkJZGVidWcgKCIlcyAtIGZpcnN0X3Nsb3RfbnVtOiAleFxuIiwgX19mdW5jX18sIHB0ci0+Zmlyc3Rfc2xvdF9udW0pOwpAQCAtMjE3LDEzICsyMDUsOSBAQAogc3RhdGljIHZvaWQgX19pbml0IHByaW50X2ViZGFfaHBjICh2b2lkKQogewogCXN0cnVjdCBjb250cm9sbGVyICpocGNfcHRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjE7CiAJdTE2IGluZGV4OwogCi0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJmViZGFfaHBjX2hlYWQpIHsKLQotCQlocGNfcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IGNvbnRyb2xsZXIsIGViZGFfaHBjX2xpc3QpOyAKLQorCWxpc3RfZm9yX2VhY2hfZW50cnkoaHBjX3B0ciwgJmViZGFfaHBjX2hlYWQsIGViZGFfaHBjX2xpc3QpIHsKIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaHBjX3B0ci0+c2xvdF9jb3VudDsgaW5kZXgrKykgewogCQkJZGVidWcgKCIlcyAtIHBoeXNpY2FsIHNsb3QjOiAleFxuIiwgX19mdW5jX18sIGhwY19wdHItPnNsb3RzW2luZGV4XS5zbG90X251bSk7CiAJCQlkZWJ1ZyAoIiVzIC0gcGNpIGJ1cyMgb2YgdGhlIHNsb3Q6ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+c2xvdHNbaW5kZXhdLnNsb3RfYnVzX251bSk7CkBAIC00NjAsOSArNDQ0LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb3B0X3JpbyAqc2VhcmNoX29wdF92ZyAodTggY2hhc3Npc19udW0pCiB7CiAJc3RydWN0IG9wdF9yaW8gKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIxOwotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZvcHRfdmdfaGVhZCkgewotCQlwdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3Qgb3B0X3Jpbywgb3B0X3Jpb19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJm9wdF92Z19oZWFkLCBvcHRfcmlvX2xpc3QpIHsKIAkJaWYgKHB0ci0+Y2hhc3Npc19udW0gPT0gY2hhc3Npc19udW0pCiAJCQlyZXR1cm4gcHRyOwogCX0JCQpAQCAtNDczLDEwICs0NTUsOCBAQAogewogCXN0cnVjdCBvcHRfcmlvICpvcHRfcmlvX3B0ciA9IE5VTEw7CiAJc3RydWN0IHJpb19kZXRhaWwgKnJpb19kZXRhaWxfcHRyID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2hlYWRfcHRyID0gTlVMTDsKIAkKLQlsaXN0X2Zvcl9lYWNoIChsaXN0X2hlYWRfcHRyLCAmcmlvX3ZnX2hlYWQpIHsKLQkJcmlvX2RldGFpbF9wdHIgPSBsaXN0X2VudHJ5IChsaXN0X2hlYWRfcHRyLCBzdHJ1Y3QgcmlvX2RldGFpbCwgcmlvX2RldGFpbF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJpb19kZXRhaWxfcHRyLCAmcmlvX3ZnX2hlYWQsIHJpb19kZXRhaWxfbGlzdCkgewogCQlvcHRfcmlvX3B0ciA9IHNlYXJjaF9vcHRfdmcgKHJpb19kZXRhaWxfcHRyLT5jaGFzc2lzX251bSk7CiAJCWlmICghb3B0X3Jpb19wdHIpIHsKIAkJCW9wdF9yaW9fcHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9wdF9yaW8pLCBHRlBfS0VSTkVMKTsKQEAgLTQ5NywxNCArNDc3LDEyIEBACiB9CQogCiAvKgotICogcmVvcmduaXppbmcgbGlua2VkIGxpc3Qgb2YgZXhwYW5zaW9uIGJveAkgCisgKiByZW9yZ2FuaXppbmcgbGlua2VkIGxpc3Qgb2YgZXhwYW5zaW9uIGJveAogICovCiBzdGF0aWMgc3RydWN0IG9wdF9yaW9fbG8gKnNlYXJjaF9vcHRfbG8gKHU4IGNoYXNzaXNfbnVtKQogewogCXN0cnVjdCBvcHRfcmlvX2xvICpwdHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyMTsKLQlsaXN0X2Zvcl9lYWNoIChwdHIxLCAmb3B0X2xvX2hlYWQpIHsKLQkJcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IG9wdF9yaW9fbG8sIG9wdF9yaW9fbG9fbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZvcHRfbG9faGVhZCwgb3B0X3Jpb19sb19saXN0KSB7CiAJCWlmIChwdHItPmNoYXNzaXNfbnVtID09IGNoYXNzaXNfbnVtKQogCQkJcmV0dXJuIHB0cjsKIAl9CQkKQEAgLTUxNSwxMCArNDkzLDggQEAKIHsKIAlzdHJ1Y3Qgb3B0X3Jpb19sbyAqb3B0X3Jpb19sb19wdHIgPSBOVUxMOwogCXN0cnVjdCByaW9fZGV0YWlsICpyaW9fZGV0YWlsX3B0ciA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9oZWFkX3B0ciA9IE5VTEw7CiAJCi0JbGlzdF9mb3JfZWFjaCAobGlzdF9oZWFkX3B0ciwgJnJpb19sb19oZWFkKSB7Ci0JCXJpb19kZXRhaWxfcHRyID0gbGlzdF9lbnRyeSAobGlzdF9oZWFkX3B0ciwgc3RydWN0IHJpb19kZXRhaWwsIHJpb19kZXRhaWxfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyaW9fZGV0YWlsX3B0ciwgJnJpb19sb19oZWFkLCByaW9fZGV0YWlsX2xpc3QpIHsKIAkJb3B0X3Jpb19sb19wdHIgPSBzZWFyY2hfb3B0X2xvIChyaW9fZGV0YWlsX3B0ci0+Y2hhc3Npc19udW0pOwogCQlpZiAoIW9wdF9yaW9fbG9fcHRyKSB7CiAJCQlvcHRfcmlvX2xvX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcHRfcmlvX2xvKSwgR0ZQX0tFUk5FTCk7CkBAIC01NTAsMjAgKzUyNiwxNyBAQAogewogCXN0cnVjdCBvcHRfcmlvICpvcHRfdmdfcHRyID0gTlVMTDsKIAlzdHJ1Y3Qgb3B0X3Jpb19sbyAqb3B0X2xvX3B0ciA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyID0gTlVMTDsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCF2YXIpIHsKLQkJbGlzdF9mb3JfZWFjaCAocHRyLCAmb3B0X3ZnX2hlYWQpIHsKLQkJCW9wdF92Z19wdHIgPSBsaXN0X2VudHJ5IChwdHIsIHN0cnVjdCBvcHRfcmlvLCBvcHRfcmlvX2xpc3QpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wdF92Z19wdHIsICZvcHRfdmdfaGVhZCwgb3B0X3Jpb19saXN0KSB7CiAJCQlpZiAoKGZpcnN0X3Nsb3QgPCBvcHRfdmdfcHRyLT5maXJzdF9zbG90X251bSkgJiYgKHNsb3RfbnVtID49IG9wdF92Z19wdHItPmZpcnN0X3Nsb3RfbnVtKSkgeyAKIAkJCQlyYyA9IC1FTk9ERVY7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlsaXN0X2Zvcl9lYWNoIChwdHIsICZvcHRfbG9faGVhZCkgewotCQkJb3B0X2xvX3B0ciA9IGxpc3RfZW50cnkgKHB0ciwgc3RydWN0IG9wdF9yaW9fbG8sIG9wdF9yaW9fbG9fbGlzdCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkob3B0X2xvX3B0ciwgJm9wdF9sb19oZWFkLCBvcHRfcmlvX2xvX2xpc3QpIHsKIAkJCWlmICgoZmlyc3Rfc2xvdCA8IG9wdF9sb19wdHItPmZpcnN0X3Nsb3RfbnVtKSAmJiAoc2xvdF9udW0gPj0gb3B0X2xvX3B0ci0+Zmlyc3Rfc2xvdF9udW0pKSB7CiAJCQkJcmMgPSAtRU5PREVWOwogCQkJCWJyZWFrOwpAQCAtNTc2LDEwICs1NDksOCBAQAogc3RhdGljIHN0cnVjdCBvcHRfcmlvX2xvICogZmluZF9yeGVfbnVtICh1OCBzbG90X251bSkKIHsKIAlzdHJ1Y3Qgb3B0X3Jpb19sbyAqb3B0X2xvX3B0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CiAKLQlsaXN0X2Zvcl9lYWNoIChwdHIsICZvcHRfbG9faGVhZCkgewotCQlvcHRfbG9fcHRyID0gbGlzdF9lbnRyeSAocHRyLCBzdHJ1Y3Qgb3B0X3Jpb19sbywgb3B0X3Jpb19sb19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wdF9sb19wdHIsICZvcHRfbG9faGVhZCwgb3B0X3Jpb19sb19saXN0KSB7CiAJCS8vY2hlY2sgdG8gc2VlIGlmIHRoaXMgc2xvdF9udW0gYmVsb25ncyB0byBleHBhbnNpb24gYm94CiAJCWlmICgoc2xvdF9udW0gPj0gb3B0X2xvX3B0ci0+Zmlyc3Rfc2xvdF9udW0pICYmICghZmlyc3Rfc2xvdF9udW0gKHNsb3RfbnVtLCBvcHRfbG9fcHRyLT5maXJzdF9zbG90X251bSwgMSkpKSAKIAkJCXJldHVybiBvcHRfbG9fcHRyOwpAQCAtNTkwLDEwICs1NjEsOCBAQAogc3RhdGljIHN0cnVjdCBvcHRfcmlvICogZmluZF9jaGFzc2lzX251bSAodTggc2xvdF9udW0pCiB7CiAJc3RydWN0IG9wdF9yaW8gKm9wdF92Z19wdHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyOwogCi0JbGlzdF9mb3JfZWFjaCAocHRyLCAmb3B0X3ZnX2hlYWQpIHsKLQkJb3B0X3ZnX3B0ciA9IGxpc3RfZW50cnkgKHB0ciwgc3RydWN0IG9wdF9yaW8sIG9wdF9yaW9fbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHRfdmdfcHRyLCAmb3B0X3ZnX2hlYWQsIG9wdF9yaW9fbGlzdCkgewogCQkvL2NoZWNrIHRvIHNlZSBpZiB0aGlzIHNsb3RfbnVtIGJlbG9uZ3MgdG8gY2hhc3NpcyAKIAkJaWYgKChzbG90X251bSA+PSBvcHRfdmdfcHRyLT5maXJzdF9zbG90X251bSkgJiYgKCFmaXJzdF9zbG90X251bSAoc2xvdF9udW0sIG9wdF92Z19wdHItPmZpcnN0X3Nsb3RfbnVtLCAwKSkpIAogCQkJcmV0dXJuIG9wdF92Z19wdHI7CkBAIC02MDcsMTEgKzU3Niw5IEBACiBzdGF0aWMgdTggY2FsY3VsYXRlX2ZpcnN0X3Nsb3QgKHU4IHNsb3RfbnVtKQogewogCXU4IGZpcnN0X3Nsb3QgPSAxOwotCXN0cnVjdCBsaXN0X2hlYWQgKiBsaXN0OwogCXN0cnVjdCBzbG90ICogc2xvdF9jdXI7CiAJCi0JbGlzdF9mb3JfZWFjaCAobGlzdCwgJmlibXBocF9zbG90X2hlYWQpIHsKLQkJc2xvdF9jdXIgPSBsaXN0X2VudHJ5IChsaXN0LCBzdHJ1Y3Qgc2xvdCwgaWJtX3Nsb3RfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90X2N1ciwgJmlibXBocF9zbG90X2hlYWQsIGlibV9zbG90X2xpc3QpIHsKIAkJaWYgKHNsb3RfY3VyLT5jdHJsKSB7CiAJCQlpZiAoKHNsb3RfY3VyLT5jdHJsLT5jdGxyX3R5cGUgIT0gNCkgJiYgKHNsb3RfY3VyLT5jdHJsLT5lbmRpbmdfc2xvdF9udW0gPiBmaXJzdF9zbG90KSAmJiAoc2xvdF9udW0gPiBzbG90X2N1ci0+Y3RybC0+ZW5kaW5nX3Nsb3RfbnVtKSkgCiAJCQkJZmlyc3Rfc2xvdCA9IHNsb3RfY3VyLT5jdHJsLT5lbmRpbmdfc2xvdF9udW07CkBAIC02MjAsMTEgKzU4NywxNCBAQAogCXJldHVybiBmaXJzdF9zbG90ICsgMTsKIAogfQorCisjZGVmaW5lIFNMT1RfTkFNRV9TSVpFIDMwCisKIHN0YXRpYyBjaGFyICpjcmVhdGVfZmlsZV9uYW1lIChzdHJ1Y3Qgc2xvdCAqIHNsb3RfY3VyKQogewogCXN0cnVjdCBvcHRfcmlvICpvcHRfdmdfcHRyID0gTlVMTDsKIAlzdHJ1Y3Qgb3B0X3Jpb19sbyAqb3B0X2xvX3B0ciA9IE5VTEw7Ci0Jc3RhdGljIGNoYXIgc3RyWzMwXTsKKwlzdGF0aWMgY2hhciBzdHJbU0xPVF9OQU1FX1NJWkVdOwogCWludCB3aGljaCA9IDA7IC8qIHJ4ZSA9IDEsIGNoYXNzaXMgPSAwICovCiAJdTggbnVtYmVyID0gMTsgLyogZWl0aGVyIGNoYXNzaXMgb3IgcnhlICMgKi8KIAl1OCBmaXJzdF9zbG90ID0gMTsKQEAgLTczNiw3ICs3MDYsNiBAQAogCiAJc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8pOwotCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90KTsKIAlzbG90LT5jdHJsID0gTlVMTDsKIAlzbG90LT5idXNfb24gPSBOVUxMOwpAQCAtNzY3LDcgKzczNiw3IEBACiAJc3RydWN0IGJ1c19pbmZvICpidXNfaW5mb19wdHIxLCAqYnVzX2luZm9fcHRyMjsKIAlpbnQgcmM7CiAJc3RydWN0IHNsb3QgKnRtcF9zbG90OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJY2hhciBuYW1lW1NMT1RfTkFNRV9TSVpFXTsKIAogCWFkZHIgPSBocGNfbGlzdF9wdHItPnBoeXNfYWRkcjsKIAlmb3IgKGN0bHIgPSAwOyBjdGxyIDwgaHBjX2xpc3RfcHRyLT5udW1fY3RscnM7IGN0bHIrKykgewpAQCAtOTMxLDEyICs5MDAsNiBAQAogCQkJCWdvdG8gZXJyb3Jfbm9faHBfaW5mbzsKIAkJCX0KIAotCQkJaHBfc2xvdF9wdHItPm5hbWUgPSBrbWFsbG9jKDMwLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghaHBfc2xvdF9wdHItPm5hbWUpIHsKLQkJCQlyYyA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJvcl9ub19ocF9uYW1lOwotCQkJfQotCiAJCQl0bXBfc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBfc2xvdCksIEdGUF9LRVJORUwpOwogCQkJaWYgKCF0bXBfc2xvdCkgewogCQkJCXJjID0gLUVOT01FTTsKQEAgLTk5NywxMiArOTYwLDEwIEBACiAKIAl9CQkJLyogZWFjaCBocGMgICovCiAKLQlsaXN0X2Zvcl9lYWNoIChsaXN0LCAmaWJtcGhwX3Nsb3RfaGVhZCkgewotCQl0bXBfc2xvdCA9IGxpc3RfZW50cnkgKGxpc3QsIHN0cnVjdCBzbG90LCBpYm1fc2xvdF9saXN0KTsKLQotCQlzbnByaW50ZiAodG1wX3Nsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSwgMzAsICIlcyIsIGNyZWF0ZV9maWxlX25hbWUgKHRtcF9zbG90KSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfc2xvdCwgJmlibXBocF9zbG90X2hlYWQsIGlibV9zbG90X2xpc3QpIHsKKwkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICIlcyIsIGNyZWF0ZV9maWxlX25hbWUodG1wX3Nsb3QpKTsKIAkJcGNpX2hwX3JlZ2lzdGVyKHRtcF9zbG90LT5ob3RwbHVnX3Nsb3QsCi0JCQlwY2lfZmluZF9idXMoMCwgdG1wX3Nsb3QtPmJ1cyksIHRtcF9zbG90LT5kZXZpY2UpOworCQkJcGNpX2ZpbmRfYnVzKDAsIHRtcF9zbG90LT5idXMpLCB0bXBfc2xvdC0+ZGV2aWNlLCBuYW1lKTsKIAl9CiAKIAlwcmludF9lYmRhX2hwYyAoKTsKQEAgLTEwMTIsOCArOTczLDYgQEAKIGVycm9yOgogCWtmcmVlIChocF9zbG90X3B0ci0+cHJpdmF0ZSk7CiBlcnJvcl9ub19zbG90OgotCWtmcmVlIChocF9zbG90X3B0ci0+bmFtZSk7Ci1lcnJvcl9ub19ocF9uYW1lOgogCWtmcmVlIChocF9zbG90X3B0ci0+aW5mbyk7CiBlcnJvcl9ub19ocF9pbmZvOgogCWtmcmVlIChocF9zbG90X3B0cik7CkBAIC0xMTAxLDEwICsxMDYwLDggQEAKIHN0cnVjdCBzbG90ICppYm1waHBfZ2V0X3Nsb3RfZnJvbV9waHlzaWNhbF9udW0gKHU4IHBoeXNpY2FsX251bSkKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JbGlzdF9mb3JfZWFjaCAobGlzdCwgJmlibXBocF9zbG90X2hlYWQpIHsKLQkJc2xvdCA9IGxpc3RfZW50cnkgKGxpc3QsIHN0cnVjdCBzbG90LCBpYm1fc2xvdF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZpYm1waHBfc2xvdF9oZWFkLCBpYm1fc2xvdF9saXN0KSB7CiAJCWlmIChzbG90LT5udW1iZXIgPT0gcGh5c2ljYWxfbnVtKQogCQkJcmV0dXJuIHNsb3Q7CiAJfQpAQCAtMTEyMCwxMCArMTA3Nyw4IEBACiBzdHJ1Y3QgYnVzX2luZm8gKmlibXBocF9maW5kX3NhbWVfYnVzX251bSAodTMyIG51bSkKIHsKIAlzdHJ1Y3QgYnVzX2luZm8gKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAqcHRyMTsKIAotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZidXNfaW5mb19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBidXNfaW5mbywgYnVzX2luZm9fbGlzdCk7IAorCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmYnVzX2luZm9faGVhZCwgYnVzX2luZm9fbGlzdCkgewogCQlpZiAocHRyLT5idXNubyA9PSBudW0pIAogCQkJIHJldHVybiBwdHI7CiAJfQpAQCAtMTEzNiwxMCArMTA5MSw4IEBACiBpbnQgaWJtcGhwX2dldF9idXNfaW5kZXggKHU4IG51bSkKIHsKIAlzdHJ1Y3QgYnVzX2luZm8gKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAqcHRyMTsKIAotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZidXNfaW5mb19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBidXNfaW5mbywgYnVzX2luZm9fbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZidXNfaW5mb19oZWFkLCBidXNfaW5mb19saXN0KSB7CiAJCWlmIChwdHItPmJ1c25vID09IG51bSkgIAogCQkJcmV0dXJuIHB0ci0+aW5kZXg7CiAJfQpAQCAtMTIxMiwxMSArMTE2NSw5IEBACiBpbnQgaWJtcGhwX3JlZ2lzdGVyX3BjaSAodm9pZCkKIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJaW50IHJjID0gMDsKIAotCWxpc3RfZm9yX2VhY2ggKHRtcCwgJmViZGFfaHBjX2hlYWQpIHsKLQkJY3RybCA9IGxpc3RfZW50cnkgKHRtcCwgc3RydWN0IGNvbnRyb2xsZXIsIGViZGFfaHBjX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgJmViZGFfaHBjX2hlYWQsIGViZGFfaHBjX2xpc3QpIHsKIAkJaWYgKGN0cmwtPmN0bHJfdHlwZSA9PSAxKSB7CiAJCQlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlibXBocF9kcml2ZXIpOwogCQkJYnJlYWs7CkBAIC0xMjI3LDEyICsxMTc4LDEwIEBACiBzdGF0aWMgaW50IGlibXBocF9wcm9iZSAoc3RydWN0IHBjaV9kZXYgKiBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMpCiB7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCiAJZGVidWcgKCJpbnNpZGUgaWJtcGhwX3Byb2JlXG4iKTsKIAkKLQlsaXN0X2Zvcl9lYWNoICh0bXAsICZlYmRhX2hwY19oZWFkKSB7Ci0JCWN0cmwgPSBsaXN0X2VudHJ5ICh0bXAsIHN0cnVjdCBjb250cm9sbGVyLCBlYmRhX2hwY19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZlYmRhX2hwY19oZWFkLCBlYmRhX2hwY19saXN0KSB7CiAJCWlmIChjdHJsLT5jdGxyX3R5cGUgPT0gMSkgewogCQkJaWYgKChkZXYtPmRldmZuID09IGN0cmwtPnUucGNpX2N0bHIuZGV2X2Z1bikgJiYgKGRldi0+YnVzLT5udW1iZXIgPT0gY3RybC0+dS5wY2lfY3Rsci5idXMpKSB7CiAJCQkJY3RybC0+Y3RybF9kZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IDVmODViMWIuLjUzNWZjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9ob3RwbHVnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTYxLDcgKzYyLDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBzdGF0aWMgTElTVF9IRUFEKHBjaV9ob3RwbHVnX3Nsb3RfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBjaV9ob3RwbHVnX3Nsb3RfbGlzdF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgocGNpX2hwX211dGV4KTsKIAogLyogdGhlc2Ugc3RyaW5ncyBtYXRjaCB1cCB3aXRoIHRoZSB2YWx1ZXMgaW4gcGNpX2J1c19zcGVlZCAqLwogc3RhdGljIGNoYXIgKnBjaV9idXNfc3BlZWRfc3RyaW5nc1tdID0gewpAQCAtMTAyLDEzICsxMDMsMTMgQEAKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgKm9wcyA9IHNsb3QtPm9wczsJCQlcCiAJaW50IHJldHZhbCA9IDA7CQkJCQkJCVwKLQlpZiAodHJ5X21vZHVsZV9nZXQob3BzLT5vd25lcikpIHsJCQkJXAotCQlpZiAob3BzLT5nZXRfIyNuYW1lKQkJCQkJXAotCQkJcmV0dmFsID0gb3BzLT5nZXRfIyNuYW1lKHNsb3QsIHZhbHVlKTsJCVwKLQkJZWxzZQkJCQkJCQlcCi0JCQkqdmFsdWUgPSBzbG90LT5pbmZvLT5uYW1lOwkJCVwKLQkJbW9kdWxlX3B1dChvcHMtPm93bmVyKTsJCQkJCVwKLQl9CQkJCQkJCQlcCisJaWYgKCF0cnlfbW9kdWxlX2dldChvcHMtPm93bmVyKSkJCQkJXAorCQlyZXR1cm4gLUVOT0RFVjsJCQkJCQlcCisJaWYgKG9wcy0+Z2V0XyMjbmFtZSkJCQkJCQlcCisJCXJldHZhbCA9IG9wcy0+Z2V0XyMjbmFtZShzbG90LCB2YWx1ZSk7CQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJKnZhbHVlID0gc2xvdC0+aW5mby0+bmFtZTsJCQkJXAorCW1vZHVsZV9wdXQob3BzLT5vd25lcik7CQkJCQkJXAogCXJldHVybiByZXR2YWw7CQkJCQkJCVwKIH0KIApAQCAtNTMwLDE2ICs1MzEsMTIgQEAKIAlzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAotCXNwaW5fbG9jaygmcGNpX2hvdHBsdWdfc2xvdF9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2ggKHRtcCwgJnBjaV9ob3RwbHVnX3Nsb3RfbGlzdCkgewogCQlzbG90ID0gbGlzdF9lbnRyeSAodG1wLCBzdHJ1Y3QgaG90cGx1Z19zbG90LCBzbG90X2xpc3QpOwotCQlpZiAoc3RyY21wKHNsb3QtPm5hbWUsIG5hbWUpID09IDApCi0JCQlnb3RvIG91dDsKKwkJaWYgKHN0cmNtcChob3RwbHVnX3Nsb3RfbmFtZShzbG90KSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiBzbG90OwogCX0KLQlzbG90ID0gTlVMTDsKLW91dDoKLQlzcGluX3VubG9jaygmcGNpX2hvdHBsdWdfc2xvdF9saXN0X2xvY2spOwotCXJldHVybiBzbG90OworCXJldHVybiBOVUxMOwogfQogCiAvKioKQEAgLTU0NywxMyArNTQ0LDE1IEBACiAgKiBAYnVzOiBidXMgdGhpcyBzbG90IGlzIG9uCiAgKiBAc2xvdDogcG9pbnRlciB0byB0aGUgJnN0cnVjdCBob3RwbHVnX3Nsb3QgdG8gcmVnaXN0ZXIKICAqIEBzbG90X25yOiBzbG90IG51bWJlcgorICogQG5hbWU6IG5hbWUgcmVnaXN0ZXJlZCB3aXRoIGtvYmplY3QgY29yZQogICoKICAqIFJlZ2lzdGVycyBhIGhvdHBsdWcgc2xvdCB3aXRoIHRoZSBwY2kgaG90cGx1ZyBzdWJzeXN0ZW0sIHdoaWNoIHdpbGwgYWxsb3cKICAqIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB0byB0aGUgc2xvdC4KICAqCiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgYW55dGhpbmcgZWxzZSBmb3IgYW4gZXJyb3IuCiAgKi8KLWludCBwY2lfaHBfcmVnaXN0ZXIoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IHNsb3RfbnIpCitpbnQgcGNpX2hwX3JlZ2lzdGVyKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBzbG90X25yLAorCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3Q7CkBAIC01NjgsNDggKzU2NywyOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBDaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgcmVnaXN0ZXJlZCBhIHNsb3Qgd2l0aCB0aGUgc2FtZSBuYW1lLiAqLwotCWlmIChnZXRfc2xvdF9mcm9tX25hbWUoc2xvdC0+bmFtZSkpCi0JCXJldHVybiAtRUVYSVNUOworCW11dGV4X2xvY2soJnBjaV9ocF9tdXRleCk7CiAKIAkvKgogCSAqIE5vIHByb2JsZW1zIGlmIHdlIGNhbGwgdGhpcyBpbnRlcmZhY2UgZnJvbSBib3RoIEFDUElfUENJX1NMT1QKIAkgKiBkcml2ZXIgYW5kIGNhbGwgaXQgaGVyZSBhZ2Fpbi4gSWYgd2UndmUgYWxyZWFkeSBjcmVhdGVkIHRoZQogCSAqIHBjaV9zbG90LCB0aGUgaW50ZXJmYWNlIHdpbGwgc2ltcGx5IGJ1bXAgdGhlIHJlZmNvdW50LgogCSAqLwotCXBjaV9zbG90ID0gcGNpX2NyZWF0ZV9zbG90KGJ1cywgc2xvdF9uciwgc2xvdC0+bmFtZSk7Ci0JaWYgKElTX0VSUihwY2lfc2xvdCkpCi0JCXJldHVybiBQVFJfRVJSKHBjaV9zbG90KTsKLQotCWlmIChwY2lfc2xvdC0+aG90cGx1ZykgewotCQlkYmcoIiVzOiBhbHJlYWR5IGNsYWltZWRcbiIsIF9fZnVuY19fKTsKLQkJcGNpX2Rlc3Ryb3lfc2xvdChwY2lfc2xvdCk7Ci0JCXJldHVybiAtRUJVU1k7CisJcGNpX3Nsb3QgPSBwY2lfY3JlYXRlX3Nsb3QoYnVzLCBzbG90X25yLCBuYW1lLCBzbG90KTsKKwlpZiAoSVNfRVJSKHBjaV9zbG90KSkgeworCQlyZXN1bHQgPSBQVFJfRVJSKHBjaV9zbG90KTsKKwkJZ290byBvdXQ7CiAJfQogCiAJc2xvdC0+cGNpX3Nsb3QgPSBwY2lfc2xvdDsKIAlwY2lfc2xvdC0+aG90cGx1ZyA9IHNsb3Q7CiAKLQkvKgotCSAqIEFsbG93IHBjaWhwIGRyaXZlcnMgdG8gb3ZlcnJpZGUgdGhlIEFDUElfUENJX1NMT1QgbmFtZS4KLQkgKi8KLQlpZiAoc3RyY21wKGtvYmplY3RfbmFtZSgmcGNpX3Nsb3QtPmtvYmopLCBzbG90LT5uYW1lKSkgewotCQlyZXN1bHQgPSBrb2JqZWN0X3JlbmFtZSgmcGNpX3Nsb3QtPmtvYmosIHNsb3QtPm5hbWUpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlwY2lfZGVzdHJveV9zbG90KHBjaV9zbG90KTsKLQkJCXJldHVybiByZXN1bHQ7Ci0JCX0KLQl9Ci0KLQlzcGluX2xvY2soJnBjaV9ob3RwbHVnX3Nsb3RfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZCgmc2xvdC0+c2xvdF9saXN0LCAmcGNpX2hvdHBsdWdfc2xvdF9saXN0KTsKLQlzcGluX3VubG9jaygmcGNpX2hvdHBsdWdfc2xvdF9saXN0X2xvY2spOwogCiAJcmVzdWx0ID0gZnNfYWRkX3Nsb3QocGNpX3Nsb3QpOwogCWtvYmplY3RfdWV2ZW50KCZwY2lfc2xvdC0+a29iaiwgS09CSl9BREQpOwotCWRiZygiQWRkZWQgc2xvdCAlcyB0byB0aGUgbGlzdFxuIiwgc2xvdC0+bmFtZSk7Ci0KLQorCWRiZygiQWRkZWQgc2xvdCAlcyB0byB0aGUgbGlzdFxuIiwgbmFtZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwY2lfaHBfbXV0ZXgpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTYzMCwyMSArNjEwLDIzIEBACiAJaWYgKCFob3RwbHVnKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXRlbXAgPSBnZXRfc2xvdF9mcm9tX25hbWUoaG90cGx1Zy0+bmFtZSk7Ci0JaWYgKHRlbXAgIT0gaG90cGx1ZykKKwltdXRleF9sb2NrKCZwY2lfaHBfbXV0ZXgpOworCXRlbXAgPSBnZXRfc2xvdF9mcm9tX25hbWUoaG90cGx1Z19zbG90X25hbWUoaG90cGx1ZykpOworCWlmICh0ZW1wICE9IGhvdHBsdWcpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwY2lfaHBfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLQlzcGluX2xvY2soJnBjaV9ob3RwbHVnX3Nsb3RfbGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmaG90cGx1Zy0+c2xvdF9saXN0KTsKLQlzcGluX3VubG9jaygmcGNpX2hvdHBsdWdfc2xvdF9saXN0X2xvY2spOwogCiAJc2xvdCA9IGhvdHBsdWctPnBjaV9zbG90OwogCWZzX3JlbW92ZV9zbG90KHNsb3QpOwotCWRiZygiUmVtb3ZlZCBzbG90ICVzIGZyb20gdGhlIGxpc3RcbiIsIGhvdHBsdWctPm5hbWUpOworCWRiZygiUmVtb3ZlZCBzbG90ICVzIGZyb20gdGhlIGxpc3RcbiIsIGhvdHBsdWdfc2xvdF9uYW1lKGhvdHBsdWcpKTsKIAogCWhvdHBsdWctPnJlbGVhc2UoaG90cGx1Zyk7CiAJc2xvdC0+aG90cGx1ZyA9IE5VTEw7CiAJcGNpX2Rlc3Ryb3lfc2xvdChzbG90KTsKKwltdXRleF91bmxvY2soJnBjaV9ocF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCmluZGV4IDllNmNlYzYuLmIyODAxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaApAQCAtNTcsMTkgKzU3LDMwIEBACiAjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKIAorI2RlZmluZSBjdHJsX2RiZyhjdHJsLCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChwY2llaHBfZGVidWcpCQkJCQlcCisJCQlkZXZfcHJpbnRrKCwgJmN0cmwtPnBjaWUtPmRldmljZSwJCVwKKwkJCQkJZm9ybWF0LCAjIyBhcmcpOwkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGN0cmxfZXJyKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCWRldl9lcnIoJmN0cmwtPnBjaWUtPmRldmljZSwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGN0cmxfaW5mbyhjdHJsLCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKKwlkZXZfaW5mbygmY3RybC0+cGNpZS0+ZGV2aWNlLCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgY3RybF93YXJuKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCWRldl93YXJuKCZjdHJsLT5wY2llLT5kZXZpY2UsIGZvcm1hdCwgIyMgYXJnKQorCiAjZGVmaW5lIFNMT1RfTkFNRV9TSVpFIDEwCiBzdHJ1Y3Qgc2xvdCB7CiAJdTggYnVzOwogCXU4IGRldmljZTsKLQl1MzIgbnVtYmVyOwogCXU4IHN0YXRlOwotCXN0cnVjdCB0aW1lcl9saXN0IHRhc2tfZXZlbnQ7CiAJdTggaHBfc2xvdDsKKwl1MzIgbnVtYmVyOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwogCXN0cnVjdCBocGNfb3BzICpocGNfb3BzOwogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNsb3RfbGlzdDsKLQljaGFyIG5hbWVbU0xPVF9OQU1FX1NJWkVdOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9lbWlfdG9nZ2xlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsJLyogd29yayBmb3IgYnV0dG9uIGV2ZW50ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CkBAIC04Nyw2ICs5OCw3IEBACiAJaW50IG51bV9zbG90czsJCQkvKiBOdW1iZXIgb2Ygc2xvdHMgb24gY3RsciAqLwogCWludCBzbG90X251bV9pbmM7CQkvKiAxIG9yIC0xICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJc3RydWN0IHBjaWVfZGV2aWNlICpwY2llOwkvKiBQQ0kgRXhwcmVzcyBwb3J0IHNlcnZpY2UgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsb3RfbGlzdDsKIAlzdHJ1Y3QgaHBjX29wcyAqaHBjX29wczsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsJLyogc2xlZXAgJiB3YWtlIHByb2Nlc3MgKi8KQEAgLTk4LDYgKzExMCw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKIAlpbnQgY21kX2J1c3k7CiAJdW5zaWduZWQgaW50IG5vX2NtZF9jb21wbGV0ZToxOworCXVuc2lnbmVkIGludCBsaW5rX2FjdGl2ZV9yZXBvcnRpbmc6MTsKIH07CiAKICNkZWZpbmUgSU5UX0JVVFRPTl9JR05PUkUJCTAKQEAgLTE2MSw2ICsxNzQsMTEgQEAKIGludCBwY2llaHBfZGlzYWJsZV9zbG90KHN0cnVjdCBzbG90ICpwX3Nsb3QpOwogaW50IHBjaWVfZW5hYmxlX25vdGlmaWNhdGlvbihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CiAKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2xvdF9uYW1lKHN0cnVjdCBzbG90ICpzbG90KQoreworCXJldHVybiBob3RwbHVnX3Nsb3RfbmFtZShzbG90LT5ob3RwbHVnX3Nsb3QpOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzbG90ICpwY2llaHBfZmluZF9zbG90KHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1OCBkZXZpY2UpCiB7CiAJc3RydWN0IHNsb3QgKnNsb3Q7CkBAIC0xNzAsNyArMTg4LDcgQEAKIAkJCXJldHVybiBzbG90OwogCX0KIAotCWVycigiJXM6IHNsb3QgKGRldmljZT0weCV4KSBub3QgZm91bmRcbiIsIF9fZnVuY19fLCBkZXZpY2UpOworCWN0cmxfZXJyKGN0cmwsICJTbG90IChkZXZpY2U9MHglMDJ4KSBub3QgZm91bmRcbiIsIGRldmljZSk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwppbmRleCA0ZmQ1MzU1Li40YjIzYmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCkBAIC0xNDQsOSArMTQ0LDEwIEBACiAgKiBzeXNmcyBpbnRlcmZhY2Ugd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHRvZ2dsZSB0aGUgRWxlY3RybyBNZWNoYW5pY2FsCiAgKiBJbnRlcmxvY2suICBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlciAwIG9yIDEuICAwID09IHVubG9jaywgMSA9PSBsb2NrCiAgKi8KLXN0YXRpYyBzc2l6ZV90IGxvY2tfd3JpdGVfZmlsZShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBjb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGxvY2tfd3JpdGVfZmlsZShzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgbGxvY2s7CiAJdTggbG9jazsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTE1NywxMCArMTU4LDExIEBACiAJc3dpdGNoIChsb2NrKSB7CiAJCWNhc2UgMDoKIAkJY2FzZSAxOgotCQkJcmV0dmFsID0gc2V0X2xvY2tfc3RhdHVzKHNsb3QsIGxvY2spOworCQkJcmV0dmFsID0gc2V0X2xvY2tfc3RhdHVzKGhvdHBsdWdfc2xvdCwgbG9jayk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWVyciAoIiVkIGlzIGFuIGludmFsaWQgbG9jayB2YWx1ZVxuIiwgbG9jayk7CisJCQljdHJsX2VycihzbG90LT5jdHJsLCAiJWQgaXMgYW4gaW52YWxpZCBsb2NrIHZhbHVlXG4iLAorCQkJCSBsb2NrKTsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQogCWlmIChyZXR2YWwpCkBAIC0xODAsNyArMTgyLDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJlbGVhc2Vfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpCiB7Ci0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CisKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBob3RwbHVnX3Nsb3RfbmFtZShob3RwbHVnX3Nsb3QpKTsKIAogCWtmcmVlKGhvdHBsdWdfc2xvdC0+aW5mbyk7CiAJa2ZyZWUoaG90cGx1Z19zbG90KTsKQEAgLTE5MSw3ICsxOTYsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90OwogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmluZm87Ci0JaW50IGxlbiwgZHVwID0gMTsKKwljaGFyIG5hbWVbU0xPVF9OQU1FX1NJWkVdOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmY3RybC0+c2xvdF9saXN0LCBzbG90X2xpc3QpIHsKQEAgLTIwNSw0NiArMjEwLDM4IEBACiAKIAkJLyogcmVnaXN0ZXIgdGhpcyBzbG90IHdpdGggdGhlIGhvdHBsdWcgcGNpIGNvcmUgKi8KIAkJaG90cGx1Z19zbG90LT5pbmZvID0gaW5mbzsKLQkJaG90cGx1Z19zbG90LT5uYW1lID0gc2xvdC0+bmFtZTsKIAkJaG90cGx1Z19zbG90LT5wcml2YXRlID0gc2xvdDsKIAkJaG90cGx1Z19zbG90LT5yZWxlYXNlID0gJnJlbGVhc2Vfc2xvdDsKIAkJaG90cGx1Z19zbG90LT5vcHMgPSAmcGNpZWhwX2hvdHBsdWdfc2xvdF9vcHM7CisJCXNsb3QtPmhvdHBsdWdfc2xvdCA9IGhvdHBsdWdfc2xvdDsKKwkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICIldSIsIHNsb3QtPm51bWJlcik7CisKKyAJCWN0cmxfZGJnKGN0cmwsICJSZWdpc3RlcmluZyBkb21haW46YnVzOmRldj0lMDR4OiUwMng6JTAyeCAiCisgCQkJICJocF9zbG90PSV4IHN1bj0leCBzbG90X2RldmljZV9vZmZzZXQ9JXhcbiIsCisgCQkJIHBjaV9kb21haW5fbnIoY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUpLAorIAkJCSBzbG90LT5idXMsIHNsb3QtPmRldmljZSwgc2xvdC0+aHBfc2xvdCwgc2xvdC0+bnVtYmVyLAorIAkJCSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOworCQlyZXR2YWwgPSBwY2lfaHBfcmVnaXN0ZXIoaG90cGx1Z19zbG90LAorCQkJCQkgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsCisJCQkJCSBzbG90LT5kZXZpY2UsCisJCQkJCSBuYW1lKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY3RybF9lcnIoY3RybCwgInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwKKwkJCQkgcmV0dmFsKTsKKwkJCWdvdG8gZXJyb3JfaW5mbzsKKwkJfQogCQlnZXRfcG93ZXJfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPnBvd2VyX3N0YXR1cyk7CiAJCWdldF9hdHRlbnRpb25fc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmF0dGVudGlvbl9zdGF0dXMpOwogCQlnZXRfbGF0Y2hfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmxhdGNoX3N0YXR1cyk7CiAJCWdldF9hZGFwdGVyX3N0YXR1cyhob3RwbHVnX3Nsb3QsICZpbmZvLT5hZGFwdGVyX3N0YXR1cyk7Ci0JCXNsb3QtPmhvdHBsdWdfc2xvdCA9IGhvdHBsdWdfc2xvdDsKLQotCQlkYmcoIlJlZ2lzdGVyaW5nIGJ1cz0leCBkZXY9JXggaHBfc2xvdD0leCBzdW49JXggIgotCQkgICAgInNsb3RfZGV2aWNlX29mZnNldD0leFxuIiwgc2xvdC0+YnVzLCBzbG90LT5kZXZpY2UsCi0JCSAgICBzbG90LT5ocF9zbG90LCBzbG90LT5udW1iZXIsIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7Ci1kdXBsaWNhdGVfbmFtZToKLQkJcmV0dmFsID0gcGNpX2hwX3JlZ2lzdGVyKGhvdHBsdWdfc2xvdCwKLQkJCQkJIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLAotCQkJCQkgc2xvdC0+ZGV2aWNlKTsKLQkJaWYgKHJldHZhbCkgewotCQkJLyoKLQkJCSAqIElmIHNsb3QgTiBhbHJlYWR5IGV4aXN0cywgd2UnbGwgdHJ5IHRvIGNyZWF0ZQotCQkJICogc2xvdCBOLTEsIE4tMiAuLi4gTi1NLCB1bnRpbCB3ZSBvdmVyZmxvdy4KLQkJCSAqLwotCQkJaWYgKHJldHZhbCA9PSAtRUVYSVNUKSB7Ci0JCQkJbGVuID0gc25wcmludGYoc2xvdC0+bmFtZSwgU0xPVF9OQU1FX1NJWkUsCi0JCQkJCSAgICAgICAiJWQtJWQiLCBzbG90LT5udW1iZXIsIGR1cCsrKTsKLQkJCQlpZiAobGVuIDwgU0xPVF9OQU1FX1NJWkUpCi0JCQkJCWdvdG8gZHVwbGljYXRlX25hbWU7Ci0JCQkJZWxzZQotCQkJCQllcnIoImR1cGxpY2F0ZSBzbG90IG5hbWUgb3ZlcmZsb3dcbiIpOwotCQkJfQotCQkJZXJyKCJwY2lfaHBfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldHZhbCk7Ci0JCQlnb3RvIGVycm9yX2luZm87Ci0JCX0KIAkJLyogY3JlYXRlIGFkZGl0aW9uYWwgc3lzZnMgZW50cmllcyAqLwogCQlpZiAoRU1JKGN0cmwpKSB7CiAJCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmaG90cGx1Z19zbG90LT5wY2lfc2xvdC0+a29iaiwKIAkJCQkmaG90cGx1Z19zbG90X2F0dHJfbG9jay5hdHRyKTsKIAkJCWlmIChyZXR2YWwpIHsKIAkJCQlwY2lfaHBfZGVyZWdpc3Rlcihob3RwbHVnX3Nsb3QpOwotCQkJCWVycigiY2Fubm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN5c2ZzIGVudHJpZXNcbiIpOworCQkJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3lzZnMgIgorCQkJCQkgImVudHJpZXNcbiIpOwogCQkJCWdvdG8gZXJyb3JfaW5mbzsKIAkJCX0KIAkJfQpAQCAtMjc4LDcgKzI3NSw4IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJICBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKIAogCWhvdHBsdWdfc2xvdC0+aW5mby0+YXR0ZW50aW9uX3N0YXR1cyA9IHN0YXR1czsKIApAQCAtMjkzLDcgKzI5MSw4IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dXJuIHBjaWVocF9zeXNmc19lbmFibGVfc2xvdChzbG90KTsKIH0KQEAgLTMwMyw3ICszMDIsOCBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCisJCSAgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlyZXR1cm4gcGNpZWhwX3N5c2ZzX2Rpc2FibGVfc2xvdChzbG90KTsKIH0KQEAgLTMxMyw3ICszMTMsOCBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJICBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzI3LDcgKzMyOCw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2F0dGVudGlvbl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzQxLDcgKzM0Myw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHNsb3QsIHZhbHVlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTM1NSw3ICszNTgsOCBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHNsb3QsIHZhbHVlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTM3MCw3ICszNzQsOCBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzg0LDcgKzM4OSw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZChzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC00MDIsMTQgKzQwOCwxNSBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wb3J0OwogCiAJaWYgKHBjaWVocF9mb3JjZSkKLQkJZGJnKCJCeXBhc3NpbmcgQklPUyBjaGVjayBmb3IgcGNpZWhwIHVzZSBvbiAlc1xuIiwKLQkJICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2aWNlLAorCQkJICJCeXBhc3NpbmcgQklPUyBjaGVjayBmb3IgcGNpZWhwIHVzZSBvbiAlc1xuIiwKKwkJCSBwY2lfbmFtZShwZGV2KSk7CiAJZWxzZSBpZiAocGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUocGRldikpCiAJCWdvdG8gZXJyX291dF9ub25lOwogCiAJY3RybCA9IHBjaWVfaW5pdChkZXYpOwogCWlmICghY3RybCkgewotCQlkYmcoIiVzOiBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgUENJRV9NT0RVTEVfTkFNRSk7CisJCWRldl9lcnIoJmRldi0+ZGV2aWNlLCAiQ29udHJvbGxlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9vdXRfbm9uZTsKIAl9CiAJc2V0X3NlcnZpY2VfZGF0YShkZXYsIGN0cmwpOwpAQCAtNDE4LDExICs0MjUsMTAgQEAKIAlyYyA9IGluaXRfc2xvdHMoY3RybCk7CiAJaWYgKHJjKSB7CiAJCWlmIChyYyA9PSAtRUJVU1kpCi0JCQl3YXJuKCIlczogc2xvdCBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgYW5vdGhlciAiCi0JCQkJImhvdHBsdWcgZHJpdmVyXG4iLCBQQ0lFX01PRFVMRV9OQU1FKTsKKwkJCWN0cmxfd2FybihjdHJsLCAiU2xvdCBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgYW5vdGhlciAiCisJCQkJICAiaG90cGx1ZyBkcml2ZXJcbiIpOwogCQllbHNlCi0JCQllcnIoIiVzOiBzbG90IGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKLQkJCQlQQ0lFX01PRFVMRV9OQU1FKTsKKwkJCWN0cmxfZXJyKGN0cmwsICJTbG90IGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlX2N0bHI7CiAJfQogCkBAIC00NjEsMTMgKzQ2NywxMyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBwY2llaHBfc3VzcGVuZCAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlwcmludGsoIiVzIEVOVFJZXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2luZm8oJmRldi0+ZGV2aWNlLCAiJXMgRU5UUllcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2llaHBfcmVzdW1lIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoIiVzIEVOVFJZXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2luZm8oJmRldi0+ZGV2aWNlLCAiJXMgRU5UUllcbiIsIF9fZnVuY19fKTsKIAlpZiAocGNpZWhwX2ZvcmNlKSB7CiAJCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gZ2V0X3NlcnZpY2VfZGF0YShkZXYpOwogCQlzdHJ1Y3Qgc2xvdCAqdF9zbG90OwpAQCAtNDk3LDEwICs1MDMsOSBAQAogCS5kcml2ZXJfZGF0YSA9CTAsCiAJfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQogfTsKLXN0YXRpYyBjb25zdCBjaGFyIGRldmljZV9uYW1lW10gPSAiaHBkcml2ZXIiOwogCiBzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBocGRyaXZlcl9wb3J0ZHJ2ID0gewotCS5uYW1lCQk9IChjaGFyICopZGV2aWNlX25hbWUsCisJLm5hbWUJCT0gUENJRV9NT0RVTEVfTkFNRSwKIAkuaWRfdGFibGUJPSAmcG9ydF9wY2lfaWRzWzBdLAogCiAJLnByb2JlCQk9IHBjaWVocF9wcm9iZSwKQEAgLTUyMCw3ICs1MjUsNyBAQAogIAlkYmcoInBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyID0gJWRcbiIsIHJldHZhbCk7CiAgIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKICAJaWYgKHJldHZhbCkKLQkJZGJnKCIlczogRmFpbHVyZSB0byByZWdpc3RlciBzZXJ2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCWRiZygiRmFpbHVyZSB0byByZWdpc3RlciBzZXJ2aWNlXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggOTZhNWQ1NS4uZmVhZDYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtNTgsMTQgKzU4LDE1IEBACiB1OCBwY2llaHBfaGFuZGxlX2F0dGVudGlvbl9idXR0b24oc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAl1MzIgZXZlbnRfdHlwZTsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCS8qIEF0dGVudGlvbiBCdXR0b24gQ2hhbmdlICovCi0JZGJnKCJwY2llaHA6ICBBdHRlbnRpb24gYnV0dG9uIGludGVycnVwdCByZWNlaXZlZC5cbiIpOworCWN0cmxfZGJnKGN0cmwsICJBdHRlbnRpb24gYnV0dG9uIGludGVycnVwdCByZWNlaXZlZFxuIik7CiAKIAkvKgogCSAqICBCdXR0b24gcHJlc3NlZCAtIFNlZSBpZiBuZWVkIHRvIFRBS0UgQUNUSU9OISEhCiAJICovCi0JaW5mbygiQnV0dG9uIHByZXNzZWQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJY3RybF9pbmZvKGN0cmwsICJCdXR0b24gcHJlc3NlZCBvbiBTbG90KCVzKVxuIiwgc2xvdF9uYW1lKHBfc2xvdCkpOwogCWV2ZW50X3R5cGUgPSBJTlRfQlVUVE9OX1BSRVNTOwogCiAJcXVldWVfaW50ZXJydXB0X2V2ZW50KHBfc2xvdCwgZXZlbnRfdHlwZSk7CkBAIC03NywyMiArNzgsMjMgQEAKIHsKIAl1OCBnZXRzdGF0dXM7CiAJdTMyIGV2ZW50X3R5cGU7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAkvKiBTd2l0Y2ggQ2hhbmdlICovCi0JZGJnKCJwY2llaHA6ICBTd2l0Y2ggaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CisJY3RybF9kYmcoY3RybCwgIlN3aXRjaCBpbnRlcnJ1cHQgcmVjZWl2ZWRcbiIpOwogCiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKGdldHN0YXR1cykgewogCQkvKgogCQkgKiBTd2l0Y2ggb3BlbmVkCiAJCSAqLwotCQlpbmZvKCJMYXRjaCBvcGVuIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkxhdGNoIG9wZW4gb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZXZlbnRfdHlwZSA9IElOVF9TV0lUQ0hfT1BFTjsKIAl9IGVsc2UgewogCQkvKgogCQkgKiAgU3dpdGNoIGNsb3NlZAogCQkgKi8KLQkJaW5mbygiTGF0Y2ggY2xvc2Ugb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiTGF0Y2ggY2xvc2Ugb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZXZlbnRfdHlwZSA9IElOVF9TV0lUQ0hfQ0xPU0U7CiAJfQogCkBAIC0xMDUsOSArMTA3LDEwIEBACiB7CiAJdTMyIGV2ZW50X3R5cGU7CiAJdTggcHJlc2VuY2Vfc2F2ZTsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCS8qIFByZXNlbmNlIENoYW5nZSAqLwotCWRiZygicGNpZWhwOiAgUHJlc2VuY2UvTm90aWZ5IGlucHV0IGNoYW5nZS5cbiIpOworCWN0cmxfZGJnKGN0cmwsICJQcmVzZW5jZS9Ob3RpZnkgaW5wdXQgY2hhbmdlXG4iKTsKIAogCS8qIFN3aXRjaCBpcyBvcGVuLCBhc3N1bWUgYSBwcmVzZW5jZSBjaGFuZ2UKIAkgKiBTYXZlIHRoZSBwcmVzZW5jZSBzdGF0ZQpAQCAtMTE3LDEzICsxMjAsMTQgQEAKIAkJLyoKIAkJICogQ2FyZCBQcmVzZW50CiAJCSAqLwotCQlpbmZvKCJDYXJkIHByZXNlbnQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiQ2FyZCBwcmVzZW50IG9uIFNsb3QoJXMpXG4iLCBzbG90X25hbWUocF9zbG90KSk7CiAJCWV2ZW50X3R5cGUgPSBJTlRfUFJFU0VOQ0VfT047CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogTm90IFByZXNlbnQKIAkJICovCi0JCWluZm8oIkNhcmQgbm90IHByZXNlbnQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiQ2FyZCBub3QgcHJlc2VudCBvbiBTbG90KCVzKVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlldmVudF90eXBlID0gSU5UX1BSRVNFTkNFX09GRjsKIAl9CiAKQEAgLTEzNSwyMyArMTM5LDI1IEBACiB1OCBwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0KHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJdTMyIGV2ZW50X3R5cGU7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAkvKiBwb3dlciBmYXVsdCAqLwotCWRiZygicGNpZWhwOiAgUG93ZXIgZmF1bHQgaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CisJY3RybF9kYmcoY3RybCwgIlBvd2VyIGZhdWx0IGludGVycnVwdCByZWNlaXZlZFxuIik7CiAKIAlpZiAoICEocF9zbG90LT5ocGNfb3BzLT5xdWVyeV9wb3dlcl9mYXVsdChwX3Nsb3QpKSkgewogCQkvKgogCQkgKiBwb3dlciBmYXVsdCBDbGVhcmVkCiAJCSAqLwotCQlpbmZvKCJQb3dlciBmYXVsdCBjbGVhcmVkIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIlBvd2VyIGZhdWx0IGNsZWFyZWQgb24gU2xvdCglcylcbiIsCisJCQkgIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVF9DTEVBUjsKIAl9IGVsc2UgewogCQkvKgogCQkgKiAgIHBvd2VyIGZhdWx0CiAJCSAqLwotCQlpbmZvKCJQb3dlciBmYXVsdCBvbiBTbG90KCVzKVxuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJQb3dlciBmYXVsdCBvbiBTbG90KCVzKVxuIiwgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlldmVudF90eXBlID0gSU5UX1BPV0VSX0ZBVUxUOwotCQlpbmZvKCJwb3dlciBmYXVsdCBiaXQgJXggc2V0XG4iLCAwKTsKKwkJY3RybF9pbmZvKGN0cmwsICJQb3dlciBmYXVsdCBiaXQgJXggc2V0XG4iLCAwKTsKIAl9CiAKIAlxdWV1ZV9pbnRlcnJ1cHRfZXZlbnQocF9zbG90LCBldmVudF90eXBlKTsKQEAgLTE2OCw4ICsxNzQsOCBAQAogCS8qIHR1cm4gb2ZmIHNsb3QsIHR1cm4gb24gQW1iZXIgTEVELCB0dXJuIG9mZiBHcmVlbiBMRUQgaWYgc3VwcG9ydGVkKi8KIAlpZiAoUE9XRVJfQ1RSTChjdHJsKSkgewogCQlpZiAocHNsb3QtPmhwY19vcHMtPnBvd2VyX29mZl9zbG90KHBzbG90KSkgewotCQkJZXJyKCIlczogSXNzdWUgb2YgU2xvdCBQb3dlciBPZmYgY29tbWFuZCBmYWlsZWRcbiIsCi0JCQkgICAgX19mdW5jX18pOworCQkJY3RybF9lcnIoY3RybCwKKwkJCQkgIklzc3VlIG9mIFNsb3QgUG93ZXIgT2ZmIGNvbW1hbmQgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTE4Niw4ICsxOTIsOCBAQAogCiAJaWYgKEFUVE5fTEVEKGN0cmwpKSB7CiAJCWlmIChwc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMocHNsb3QsIDEpKSB7Ci0JCQllcnIoIiVzOiBJc3N1ZSBvZiBTZXQgQXR0ZW50aW9uIExlZCBjb21tYW5kIGZhaWxlZFxuIiwKLQkJCSAgICBfX2Z1bmNfXyk7CisJCQljdHJsX2VycihjdHJsLAorCQkJCSAiSXNzdWUgb2YgU2V0IEF0dGVudGlvbiBMZWQgY29tbWFuZCBmYWlsZWRcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMjA0LDEwICsyMTAsMTEgQEAKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAKLQlkYmcoIiVzOiBzbG90IGRldmljZSwgc2xvdCBvZmZzZXQsIGhwIHNsb3QgPSAlZCwgJWQgLCVkXG4iLAotCQkJX19mdW5jX18sIHBfc2xvdC0+ZGV2aWNlLAotCQkJY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LCBwX3Nsb3QtPmhwX3Nsb3QpOworCWN0cmxfZGJnKGN0cmwsICIlczogc2xvdCBkZXZpY2UsIHNsb3Qgb2Zmc2V0LCBocCBzbG90ID0gJWQsICVkLCAlZFxuIiwKKwkJIF9fZnVuY19fLCBwX3Nsb3QtPmRldmljZSwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LAorCQkgcF9zbG90LT5ocF9zbG90KTsKIAogCWlmIChQT1dFUl9DVFJMKGN0cmwpKSB7CiAJCS8qIFBvd2VyIG9uIHNsb3QgKi8KQEAgLTIxOSwyOCArMjI2LDI1IEBACiAJaWYgKFBXUl9MRUQoY3RybCkpCiAJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX2JsaW5rKHBfc2xvdCk7CiAKLQkvKiBXYWl0IGZvciB+MSBzZWNvbmQgKi8KLQltc2xlZXAoMTAwMCk7Ci0KIAkvKiBDaGVjayBsaW5rIHRyYWluaW5nIHN0YXR1cyAqLwogCXJldHZhbCA9IHBfc2xvdC0+aHBjX29wcy0+Y2hlY2tfbG5rX3N0YXR1cyhjdHJsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IEZhaWxlZCB0byBjaGVjayBsaW5rIHN0YXR1c1xuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiRmFpbGVkIHRvIGNoZWNrIGxpbmsgc3RhdHVzXG4iKTsKIAkJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCiAJLyogQ2hlY2sgZm9yIGEgcG93ZXIgZmF1bHQgKi8KIAlpZiAocF9zbG90LT5ocGNfb3BzLT5xdWVyeV9wb3dlcl9mYXVsdChwX3Nsb3QpKSB7Ci0JCWRiZygiJXM6IHBvd2VyIGZhdWx0IGRldGVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZGJnKGN0cmwsICJQb3dlciBmYXVsdCBkZXRlY3RlZFxuIik7CiAJCXJldHZhbCA9IFBPV0VSX0ZBSUxVUkU7CiAJCWdvdG8gZXJyX2V4aXQ7CiAJfQogCiAJcmV0dmFsID0gcGNpZWhwX2NvbmZpZ3VyZV9kZXZpY2UocF9zbG90KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiQ2Fubm90IGFkZCBkZXZpY2UgMHgleDoleFxuIiwgcF9zbG90LT5idXMsCi0JCSAgICBwX3Nsb3QtPmRldmljZSk7CisJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgYWRkIGRldmljZSBhdCAlMDR4OiUwMng6JTAyeFxuIiwKKwkJCSBwY2lfZG9tYWluX25yKHBhcmVudCksIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAJCWdvdG8gZXJyX2V4aXQ7CiAJfQogCkBAIC0yNzIsMTQgKzI3NiwxNCBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQlkYmcoIkluICVzLCBocF9zbG90ID0gJWRcbiIsIF9fZnVuY19fLCBwX3Nsb3QtPmhwX3Nsb3QpOworCWN0cmxfZGJnKGN0cmwsICIlczogaHBfc2xvdCA9ICVkXG4iLCBfX2Z1bmNfXywgcF9zbG90LT5ocF9zbG90KTsKIAogCWlmIChQT1dFUl9DVFJMKGN0cmwpKSB7CiAJCS8qIHBvd2VyIG9mZiBzbG90ICovCiAJCXJldHZhbCA9IHBfc2xvdC0+aHBjX29wcy0+cG93ZXJfb2ZmX3Nsb3QocF9zbG90KTsKIAkJaWYgKHJldHZhbCkgewotCQkJZXJyKCIlczogSXNzdWUgb2YgU2xvdCBEaXNhYmxlIGNvbW1hbmQgZmFpbGVkXG4iLAotCQkJICAgIF9fZnVuY19fKTsKKwkJCWN0cmxfZXJyKGN0cmwsCisJCQkJICJJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCX0KQEAgLTMyMCw4ICszMjQsMTAgQEAKIAlzd2l0Y2ggKHBfc2xvdC0+c3RhdGUpIHsKIAljYXNlIFBPV0VST0ZGX1NUQVRFOgogCQltdXRleF91bmxvY2soJnBfc2xvdC0+bG9jayk7Ci0JCWRiZygiJXM6IGRpc2FibGluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwKLQkJICAgIF9fZnVuY19fLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQljdHJsX2RiZyhwX3Nsb3QtPmN0cmwsCisJCQkgIkRpc2FibGluZyBkb21haW46YnVzOmRldmljZT0lMDR4OiUwMng6JTAyeFxuIiwKKwkJCSBwY2lfZG9tYWluX25yKHBfc2xvdC0+Y3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUpLAorCQkJIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAJCXBjaWVocF9kaXNhYmxlX3Nsb3QocF9zbG90KTsKIAkJbXV0ZXhfbG9jaygmcF9zbG90LT5sb2NrKTsKIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKQEAgLTM0OSw3ICszNTUsOCBAQAogCiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKSB7Ci0JCWVycigiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIocF9zbG90LT5jdHJsLCAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWluZm8tPnBfc2xvdCA9IHBfc2xvdDsKQEAgLTQwMywxMiArNDEwLDE0IEBACiAJCXBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAoZ2V0c3RhdHVzKSB7CiAJCQlwX3Nsb3QtPnN0YXRlID0gQkxJTktJTkdPRkZfU1RBVEU7Ci0JCQlpbmZvKCJQQ0kgc2xvdCAjJXMgLSBwb3dlcmluZyBvZmYgZHVlIHRvIGJ1dHRvbiAiCi0JCQkgICAgICJwcmVzcy5cbiIsIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwKKwkJCQkgICJQQ0kgc2xvdCAjJXMgLSBwb3dlcmluZyBvZmYgZHVlIHRvIGJ1dHRvbiAiCisJCQkJICAicHJlc3MuXG4iLCBzbG90X25hbWUocF9zbG90KSk7CiAJCX0gZWxzZSB7CiAJCQlwX3Nsb3QtPnN0YXRlID0gQkxJTktJTkdPTl9TVEFURTsKLQkJCWluZm8oIlBDSSBzbG90ICMlcyAtIHBvd2VyaW5nIG9uIGR1ZSB0byBidXR0b24gIgotCQkJICAgICAicHJlc3MuXG4iLCBwX3Nsb3QtPm5hbWUpOworCQkJY3RybF9pbmZvKGN0cmwsCisJCQkJICAiUENJIHNsb3QgIyVzIC0gcG93ZXJpbmcgb24gZHVlIHRvIGJ1dHRvbiAiCisJCQkJICAicHJlc3MuXG4iLCBzbG90X25hbWUocF9zbG90KSk7CiAJCX0KIAkJLyogYmxpbmsgZ3JlZW4gTEVEIGFuZCB0dXJuIG9mZiBhbWJlciAqLwogCQlpZiAoUFdSX0xFRChjdHJsKSkKQEAgLTQyNSw4ICs0MzQsNyBAQAogCQkgKiBwcmVzcyB0aGUgYXR0ZW50aW9uIGFnYWluIGJlZm9yZSB0aGUgNSBzZWMuIGxpbWl0CiAJCSAqIGV4cGlyZXMgdG8gY2FuY2VsIGhvdC1hZGQgb3IgaG90LXJlbW92ZQogCQkgKi8KLQkJaW5mbygiQnV0dG9uIGNhbmNlbCBvbiBTbG90KCVzKVxuIiwgcF9zbG90LT5uYW1lKTsKLQkJZGJnKCIlczogYnV0dG9uIGNhbmNlbFxuIiwgX19mdW5jX18pOworCQljdHJsX2luZm8oY3RybCwgIkJ1dHRvbiBjYW5jZWwgb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcF9zbG90LT53b3JrKTsKIAkJaWYgKHBfc2xvdC0+c3RhdGUgPT0gQkxJTktJTkdPRkZfU1RBVEUpIHsKIAkJCWlmIChQV1JfTEVEKGN0cmwpKQpAQCAtNDM3LDggKzQ0NSw4IEBACiAJCX0KIAkJaWYgKEFUVE5fTEVEKGN0cmwpKQogCQkJcF9zbG90LT5ocGNfb3BzLT5zZXRfYXR0ZW50aW9uX3N0YXR1cyhwX3Nsb3QsIDApOwotCQlpbmZvKCJQQ0kgc2xvdCAjJXMgLSBhY3Rpb24gY2FuY2VsZWQgZHVlIHRvIGJ1dHRvbiBwcmVzc1xuIiwKLQkJICAgICBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIlBDSSBzbG90ICMlcyAtIGFjdGlvbiBjYW5jZWxlZCAiCisJCQkgICJkdWUgdG8gYnV0dG9uIHByZXNzXG4iLCBzbG90X25hbWUocF9zbG90KSk7CiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJPRkZfU1RBVEU6CkBAIC00NDgsMTEgKzQ1NiwxMSBAQAogCQkgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIHByZXZpb3VzIGF0dGVudGlvbiBidXR0b24gYWN0aW9uCiAJCSAqIHRvIGhvdC1hZGQgb3IgaG90LXJlbW92ZSBpcyB1bmRlcmdvaW5nCiAJCSAqLwotCQlpbmZvKCJCdXR0b24gaWdub3JlIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkJ1dHRvbiBpZ25vcmUgb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJdXBkYXRlX3Nsb3RfaW5mbyhwX3Nsb3QpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl3YXJuKCJOb3QgYSB2YWxpZCBzdGF0ZVxuIik7CisJCWN0cmxfd2FybihjdHJsLCAiTm90IGEgdmFsaWQgc3RhdGVcbiIpOwogCQlicmVhazsKIAl9CiB9CkBAIC00NjcsNyArNDc1LDggQEAKIAogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykgewotCQllcnIoIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKHBfc2xvdC0+Y3RybCwgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlpbmZvLT5wX3Nsb3QgPSBwX3Nsb3Q7CkBAIC01MDUsNyArNTE0LDcgQEAKIAljYXNlIElOVF9QUkVTRU5DRV9PRkY6CiAJCWlmICghSFBfU1VQUl9STShjdHJsKSkKIAkJCWJyZWFrOwotCQlkYmcoIlN1cnByaXNlIFJlbW92YWxcbiIpOworCQljdHJsX2RiZyhjdHJsLCAiU3VycHJpc2UgUmVtb3ZhbFxuIik7CiAJCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKIAkJaGFuZGxlX3N1cnByaXNlX2V2ZW50KHBfc2xvdCk7CiAJCWJyZWFrOwpAQCAtNTIyLDIyICs1MzEsMjIgQEAKIHsKIAl1OCBnZXRzdGF0dXMgPSAwOwogCWludCByYzsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiAobGF0Y2ggY2xvc2VkLCBjYXJkIHByZXNlbnQsIHBvd2VyIG9mZikgKi8KIAltdXRleF9sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAKIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKHJjIHx8ICFnZXRzdGF0dXMpIHsKLQkJaW5mbygiJXM6IG5vIGFkYXB0ZXIgb24gc2xvdCglcylcbiIsIF9fZnVuY19fLAotCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiTm8gYWRhcHRlciBvbiBzbG90KCVzKVxuIiwgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmIChNUkxfU0VOUyhwX3Nsb3QtPmN0cmwpKSB7CiAJCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJCWlmIChyYyB8fCBnZXRzdGF0dXMpIHsKLQkJCWluZm8oIiVzOiBsYXRjaCBvcGVuIG9uIHNsb3QoJXMpXG4iLCBfX2Z1bmNfXywKLQkJCSAgICAgcF9zbG90LT5uYW1lKTsKKwkJCWN0cmxfaW5mbyhjdHJsLCAiTGF0Y2ggb3BlbiBvbiBzbG90KCVzKVxuIiwKKwkJCQkgIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTU0Niw4ICs1NTUsOCBAQAogCWlmIChQT1dFUl9DVFJMKHBfc2xvdC0+Y3RybCkpIHsKIAkJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJjIHx8IGdldHN0YXR1cykgewotCQkJaW5mbygiJXM6IGFscmVhZHkgZW5hYmxlZCBvbiBzbG90KCVzKVxuIiwgX19mdW5jX18sCi0JCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwgIkFscmVhZHkgZW5hYmxlZCBvbiBzbG90KCVzKVxuIiwKKwkJCQkgIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTU3MSw2ICs1ODAsNyBAQAogewogCXU4IGdldHN0YXR1cyA9IDA7CiAJaW50IHJldCA9IDA7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAlpZiAoIXBfc2xvdC0+Y3RybCkKIAkJcmV0dXJuIDE7CkBAIC01ODEsOCArNTkxLDggQEAKIAlpZiAoIUhQX1NVUFJfUk0ocF9zbG90LT5jdHJsKSkgewogCQlyZXQgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmV0IHx8ICFnZXRzdGF0dXMpIHsKLQkJCWluZm8oIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLCBfX2Z1bmNfXywKLQkJCSAgICAgcF9zbG90LT5uYW1lKTsKKwkJCWN0cmxfaW5mbyhjdHJsLCAiTm8gYWRhcHRlciBvbiBzbG90KCVzKVxuIiwKKwkJCQkgIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTU5MSw4ICs2MDEsOCBAQAogCWlmIChNUkxfU0VOUyhwX3Nsb3QtPmN0cmwpKSB7CiAJCXJldCA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmV0IHx8IGdldHN0YXR1cykgewotCQkJaW5mbygiJXM6IGxhdGNoIG9wZW4gb24gc2xvdCglcylcbiIsIF9fZnVuY19fLAotCQkJICAgICBwX3Nsb3QtPm5hbWUpOworCQkJY3RybF9pbmZvKGN0cmwsICJMYXRjaCBvcGVuIG9uIHNsb3QoJXMpXG4iLAorCQkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtNjAxLDggKzYxMSw4IEBACiAJaWYgKFBPV0VSX0NUUkwocF9zbG90LT5jdHJsKSkgewogCQlyZXQgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJldCB8fCAhZ2V0c3RhdHVzKSB7Ci0JCQlpbmZvKCIlczogYWxyZWFkeSBkaXNhYmxlZCBzbG90KCVzKVxuIiwgX19mdW5jX18sCi0JCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwgIkFscmVhZHkgZGlzYWJsZWQgb24gc2xvdCglcylcbiIsCisJCQkJICBzbG90X25hbWUocF9zbG90KSk7CiAJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02MTgsNiArNjI4LDcgQEAKIGludCBwY2llaHBfc3lzZnNfZW5hYmxlX3Nsb3Qoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCW11dGV4X2xvY2soJnBfc2xvdC0+bG9jayk7CiAJc3dpdGNoIChwX3Nsb3QtPnN0YXRlKSB7CkBAIC02MzEsMTUgKzY0MiwxNyBAQAogCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwogCQlicmVhazsKIAljYXNlIFBPV0VST05fU1RBVEU6Ci0JCWluZm8oIlNsb3QgJXMgaXMgYWxyZWFkeSBpbiBwb3dlcmluZyBvbiBzdGF0ZVxuIiwKLQkJICAgICBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIlNsb3QgJXMgaXMgYWxyZWFkeSBpbiBwb3dlcmluZyBvbiBzdGF0ZVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlicmVhazsKIAljYXNlIEJMSU5LSU5HT0ZGX1NUQVRFOgogCWNhc2UgUE9XRVJPRkZfU1RBVEU6Ci0JCWluZm8oIkFscmVhZHkgZW5hYmxlZCBvbiBzbG90ICVzXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkFscmVhZHkgZW5hYmxlZCBvbiBzbG90ICVzXG4iLAorCQkJICBzbG90X25hbWUocF9zbG90KSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiTm90IGEgdmFsaWQgc3RhdGUgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9lcnIoY3RybCwgIk5vdCBhIHZhbGlkIHN0YXRlIG9uIHNsb3QgJXNcbiIsCisJCQkgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlicmVhazsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmxvY2spOwpAQCAtNjUwLDYgKzY2Myw3IEBACiBpbnQgcGNpZWhwX3N5c2ZzX2Rpc2FibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCWludCByZXR2YWwgPSAtRU5PREVWOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCiAJbXV0ZXhfbG9jaygmcF9zbG90LT5sb2NrKTsKIAlzd2l0Y2ggKHBfc2xvdC0+c3RhdGUpIHsKQEAgLTY2MywxNSArNjc3LDE3IEBACiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJPRkZfU1RBVEU6Ci0JCWluZm8oIlNsb3QgJXMgaXMgYWxyZWFkeSBpbiBwb3dlcmluZyBvZmYgc3RhdGVcbiIsCi0JCSAgICAgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJTbG90ICVzIGlzIGFscmVhZHkgaW4gcG93ZXJpbmcgb2ZmIHN0YXRlXG4iLAorCQkJICBzbG90X25hbWUocF9zbG90KSk7CiAJCWJyZWFrOwogCWNhc2UgQkxJTktJTkdPTl9TVEFURToKIAljYXNlIFBPV0VST05fU1RBVEU6Ci0JCWluZm8oIkFscmVhZHkgZGlzYWJsZWQgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJBbHJlYWR5IGRpc2FibGVkIG9uIHNsb3QgJXNcbiIsCisJCQkgIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJOb3QgYSB2YWxpZCBzdGF0ZSBvbiBzbG90ICVzXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2VycihjdHJsLCAiTm90IGEgdmFsaWQgc3RhdGUgb24gc2xvdCAlc1xuIiwKKwkJCSBzbG90X25hbWUocF9zbG90KSk7CiAJCWJyZWFrOwogCX0KIAltdXRleF91bmxvY2soJnBfc2xvdC0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IDlkOTM0ZGQuLmI2NDNjYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIC8qIEZpZWxkIGRlZmluaXRpb25zIGluIExpbmsgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1BWF9MTktfU1BFRUQJCTB4MDAwRgogI2RlZmluZSBNQVhfTE5LX1dJRFRICQkweDAzRjAKKyNkZWZpbmUgTElOS19BQ1RJVkVfUkVQT1JUSU5HCTB4MDAxMDAwMDAKIAogLyogTGluayBXaWR0aCBFbmNvZGluZyAqLwogI2RlZmluZSBMTktfWDEJCTB4MDEKQEAgLTE0MSw2ICsxNDIsNyBAQAogI2RlZmluZSBMTktfVFJOX0VSUgkweDA0MDAKICNkZWZpbmUJTE5LX1RSTgkJMHgwODAwCiAjZGVmaW5lIFNMT1RfQ0xLX0NPTkYJMHgxMDAwCisjZGVmaW5lIExJTktfQUNUSVZFCTB4MjAwMAogCiAvKiBGaWVsZCBkZWZpbml0aW9ucyBpbiBTbG90IENhcGFiaWxpdGllcyBSZWdpc3RlciAqLwogI2RlZmluZSBBVFROX0JVVFROX1BSU04JMHgwMDAwMDAwMQpAQCAtMjIzLDcgKzIyNSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVocF9yZXF1ZXN0X2lycShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKLQlpbnQgcmV0dmFsLCBpcnEgPSBjdHJsLT5wY2lfZGV2LT5pcnE7CisJaW50IHJldHZhbCwgaXJxID0gY3RybC0+cGNpZS0+aXJxOwogCiAJLyogSW5zdGFsbCBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lci4gU3RhcnQgd2l0aCAxMCBzZWMgZGVsYXkgKi8KIAlpZiAocGNpZWhwX3BvbGxfbW9kZSkgewpAQCAtMjM1LDcgKzIzNyw4IEBACiAJLyogSW5zdGFsbHMgdGhlIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBwY2llX2lzciwgSVJRRl9TSEFSRUQsIE1ZX05BTUUsIGN0cmwpOwogCWlmIChyZXR2YWwpCi0JCWVycigiQ2Fubm90IGdldCBpcnEgJWQgZm9yIHRoZSBob3RwbHVnIGNvbnRyb2xsZXJcbiIsIGlycSk7CisJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgZ2V0IGlycSAlZCBmb3IgdGhlIGhvdHBsdWcgY29udHJvbGxlclxuIiwKKwkJCSBpcnEpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTI0NCw3ICsyNDcsNyBAQAogCWlmIChwY2llaHBfcG9sbF9tb2RlKQogCQlkZWxfdGltZXJfc3luYygmY3RybC0+cG9sbF90aW1lcik7CiAJZWxzZQotCQlmcmVlX2lycShjdHJsLT5wY2lfZGV2LT5pcnEsIGN0cmwpOworCQlmcmVlX2lycShjdHJsLT5wY2llLT5pcnEsIGN0cmwpOwogfQogCiBzdGF0aWMgaW50IHBjaWVfcG9sbF9jbWQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCkBAIC0yODIsNyArMjg1LDcgQEAKIAllbHNlCiAJCXJjID0gd2FpdF9ldmVudF90aW1lb3V0KGN0cmwtPnF1ZXVlLCAhY3RybC0+Y21kX2J1c3ksIHRpbWVvdXQpOwogCWlmICghcmMpCi0JCWRiZygiQ29tbWFuZCBub3QgY29tcGxldGVkIGluIDEwMDAgbXNlY1xuIik7CisJCWN0cmxfZGJnKGN0cmwsICJDb21tYW5kIG5vdCBjb21wbGV0ZWQgaW4gMTAwMCBtc2VjXG4iKTsKIH0KIAogLyoqCkBAIC0zMDEsNyArMzA0LDggQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmc2xvdF9zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsCisJCQkgX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTMxMiwyNiArMzE2LDI1IEBACiAJCQkgKiBwcm9jZWVkIGZvcndhcmQgdG8gaXNzdWUgdGhlIG5leHQgY29tbWFuZCBhY2NvcmRpbmcKIAkJCSAqIHRvIHNwZWMuIEp1c3QgcHJpbnQgb3V0IHRoZSBlcnJvciBtZXNzYWdlLgogCQkJICovCi0JCQlkYmcoIiVzOiBDTURfQ09NUExFVEVEIG5vdCBjbGVhciBhZnRlciAxIHNlYy5cbiIsCi0JCQkgICAgX19mdW5jX18pOworCQkJY3RybF9kYmcoY3RybCwgIkNNRF9DT01QTEVURUQgbm90IGNsZWFyIGFmdGVyIDEgc2VjXG4iKTsKIAkJfSBlbHNlIGlmICghTk9fQ01EX0NNUEwoY3RybCkpIHsKIAkJCS8qCiAJCQkgKiBUaGlzIGNvbnRyb2xsZXIgc2VtbXMgdG8gbm90aWZ5IG9mIGNvbW1hbmQgY29tcGxldGVkCiAJCQkgKiBldmVudCBldmVuIHRob3VnaCBpdCBzdXBwb3J0cyBub25lIG9mIHBvd2VyCiAJCQkgKiBjb250cm9sbGVyLCBhdHRlbnRpb24gbGVkLCBwb3dlciBsZWQgYW5kIEVNSS4KIAkJCSAqLwotCQkJZGJnKCIlczogVW5leHBlY3RlZCBDTURfQ09NUExFVEVELiBOZWVkIHRvIHdhaXQgZm9yICIKLQkJCSAgICAiY29tbWFuZCBjb21wbGV0ZWQgZXZlbnQuXG4iLCBfX2Z1bmNfXyk7CisJCQljdHJsX2RiZyhjdHJsLCAiVW5leHBlY3RlZCBDTURfQ09NUExFVEVELiBOZWVkIHRvICIKKwkJCQkgIndhaXQgZm9yIGNvbW1hbmQgY29tcGxldGVkIGV2ZW50LlxuIik7CiAJCQljdHJsLT5ub19jbWRfY29tcGxldGUgPSAwOwogCQl9IGVsc2UgewotCQkJZGJnKCIlczogVW5leHBlY3RlZCBDTURfQ09NUExFVEVELiBNYXliZSB0aGUgIgotCQkJICAgICJjb250cm9sbGVyIGlzIGJyb2tlbi5cbiIsIF9fZnVuY19fKTsKKwkJCWN0cmxfZGJnKGN0cmwsICJVbmV4cGVjdGVkIENNRF9DT01QTEVURUQuIE1heWJlICIKKwkJCQkgInRoZSBjb250cm9sbGVyIGlzIGJyb2tlbi5cbiIpOwogCQl9CiAJfQogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RDVFJMLCAmc2xvdF9jdHJsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zNDEsNyArMzQ0LDcgQEAKIAlzbXBfbWIoKTsKIAlyZXR2YWwgPSBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RDVFJMLCBzbG90X2N0cmwpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IHdyaXRlIHRvIFNMT1RDVFJMIHJlZ2lzdGVyXG4iKTsKIAogCS8qCiAJICogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9uLgpAQCAtMzYzLDIxICszNjYsNjIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjaGVja19saW5rX2FjdGl2ZShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKK3sKKwl1MTYgbGlua19zdGF0dXM7CisKKwlpZiAocGNpZWhwX3JlYWR3KGN0cmwsIExOS1NUQVRVUywgJmxpbmtfc3RhdHVzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICEhKGxpbmtfc3RhdHVzICYgTElOS19BQ1RJVkUpOworfQorCitzdGF0aWMgdm9pZCBwY2llX3dhaXRfbGlua19hY3RpdmUoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCit7CisJaW50IHRpbWVvdXQgPSAxMDAwOworCisJaWYgKGNoZWNrX2xpbmtfYWN0aXZlKGN0cmwpKQorCQlyZXR1cm47CisJd2hpbGUgKHRpbWVvdXQgPiAwKSB7CisJCW1zbGVlcCgxMCk7CisJCXRpbWVvdXQgLT0gMTA7CisJCWlmIChjaGVja19saW5rX2FjdGl2ZShjdHJsKSkKKwkJCXJldHVybjsKKwl9CisJY3RybF9kYmcoY3RybCwgIkRhdGEgTGluayBMYXllciBMaW5rIEFjdGl2ZSBub3Qgc2V0IGluIDEwMDAgbXNlY1xuIik7Cit9CisKIHN0YXRpYyBpbnQgaHBjX2NoZWNrX2xua19zdGF0dXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7CiAJdTE2IGxua19zdGF0dXM7CiAJaW50IHJldHZhbCA9IDA7CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogRGF0YSBMaW5rIExheWVyIExpbmsgQWN0aXZlIFJlcG9ydGluZyBtdXN0IGJlIGNhcGFibGUgZm9yCisgICAgICAgICAqIGhvdC1wbHVnIGNhcGFibGUgZG93bnN0cmVhbSBwb3J0LiBCdXQgb2xkIGNvbnRyb2xsZXIgbWlnaHQKKyAgICAgICAgICogbm90IGltcGxlbWVudCBpdC4gSW4gdGhpcyBjYXNlLCB3ZSB3YWl0IGZvciAxMDAwIG1zLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGN0cmwtPmxpbmtfYWN0aXZlX3JlcG9ydGluZyl7CisgICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgRGF0YSBMaW5rIExheWVyIExpbmsgQWN0aXZlIGJpdCB0byBiZSBzZXQgKi8KKyAgICAgICAgICAgICAgICBwY2llX3dhaXRfbGlua19hY3RpdmUoY3RybCk7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBXZSBtdXN0IHdhaXQgZm9yIDEwMCBtcyBhZnRlciB0aGUgRGF0YSBMaW5rIExheWVyCisgICAgICAgICAgICAgICAgICogTGluayBBY3RpdmUgYml0IHJlYWRzIDFiIGJlZm9yZSBpbml0aWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgKiBjb25maWd1cmF0aW9uIGFjY2VzcyB0byB0aGUgaG90IGFkZGVkIGRldmljZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbXNsZWVwKDEwMDApOworCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIExOS1NUQVRVUywgJmxua19zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgTE5LU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWRiZygiJXM6IGxua19zdGF0dXMgPSAleFxuIiwgX19mdW5jX18sIGxua19zdGF0dXMpOworCWN0cmxfZGJnKGN0cmwsICIlczogbG5rX3N0YXR1cyA9ICV4XG4iLCBfX2Z1bmNfXywgbG5rX3N0YXR1cyk7CiAJaWYgKCAobG5rX3N0YXR1cyAmIExOS19UUk4pIHx8IChsbmtfc3RhdHVzICYgTE5LX1RSTl9FUlIpIHx8CiAJCSEobG5rX3N0YXR1cyAmIE5FR19MSU5LX1dEKSkgewotCQllcnIoIiVzIDogTGluayBUcmFpbmluZyBFcnJvciBvY2N1cnMgXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICJMaW5rIFRyYWluaW5nIEVycm9yIG9jY3VycyBcbiIpOwogCQlyZXR2YWwgPSAtMTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CkBAIC0zOTQsMTIgKzQzOCwxMiBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RDVFJMLCAmc2xvdF9jdHJsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCwgdmFsdWUgcmVhZCAleFxuIiwKLQkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY3RybCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCwgdmFsdWUgcmVhZCAleFxuIiwKKwkJIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2N0cmwpOwogCiAJYXR0ZW5fbGVkX3N0YXRlID0gKHNsb3RfY3RybCAmIEFUVE5fTEVEX0NUUkwpID4+IDY7CiAKQEAgLTQzMywxMSArNDc3LDExIEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVENUUkwsICZzbG90X2N0cmwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB2YWx1ZSByZWFkICV4XG4iLAotCSAgICBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jdHJsKTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IFNMT1RDVFJMICV4IHZhbHVlIHJlYWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jdHJsKTsKIAogCXB3cl9zdGF0ZSA9IChzbG90X2N0cmwgJiBQV1JfQ1RSTCkgPj4gMTA7CiAKQEAgLTQ2NCw3ICs1MDgsOCBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC00ODIsNyArNTI3LDggQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmc2xvdF9zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAljYXJkX3N0YXRlID0gKHU4KSgoc2xvdF9zdGF0dXMgJiBQUlNOX1NUQVRFKSA+PiA2KTsKQEAgLTUwMCw3ICs1NDYsNyBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgY2hlY2sgZm9yIHBvd2VyIGZhdWx0XG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgY2hlY2sgZm9yIHBvd2VyIGZhdWx0XG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJcHdyX2ZhdWx0ID0gKHU4KSgoc2xvdF9zdGF0dXMgJiBQV1JfRkFVTFRfREVURUNURUQpID4+IDEpOwpAQCAtNTE2LDcgKzU2Miw3IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVFNUQVRVUywgJnNsb3Rfc3RhdHVzKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgOiBDYW5ub3QgY2hlY2sgRU1JIHN0YXR1c1xuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IGNoZWNrIEVNSSBzdGF0dXNcbiIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAkqc3RhdHVzID0gKHNsb3Rfc3RhdHVzICYgRU1JX1NUQVRFKSA+PiBFTUlfU1RBVFVTX0JJVDsKQEAgLTU2MCw4ICs2MDYsOCBAQAogCQkJcmV0dXJuIC0xOwogCX0KIAlyYyA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7Ci0JZGJnKCIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAotCSAgICBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOworCWN0cmxfZGJnKGN0cmwsICIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAorCQkgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTU3NSw4ICs2MjEsOCBAQAogCXNsb3RfY21kID0gMHgwMTAwOwogCWNtZF9tYXNrID0gUFdSX0xFRF9DVFJMOwogCXBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7Ci0JZGJnKCIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAotCSAgICBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOworCWN0cmxfZGJnKGN0cmwsICIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAorCQkgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKIH0KIAogc3RhdGljIHZvaWQgaHBjX3NldF9ncmVlbl9sZWRfb2ZmKHN0cnVjdCBzbG90ICpzbG90KQpAQCAtNTg4LDggKzYzNCw4IEBACiAJc2xvdF9jbWQgPSAweDAzMDA7CiAJY21kX21hc2sgPSBQV1JfTEVEX0NUUkw7CiAJcGNpZV93cml0ZV9jbWQoY3RybCwgc2xvdF9jbWQsIGNtZF9tYXNrKTsKLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCi0JICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOwogfQogCiBzdGF0aWMgdm9pZCBocGNfc2V0X2dyZWVuX2xlZF9ibGluayhzdHJ1Y3Qgc2xvdCAqc2xvdCkKQEAgLTYwMSw4ICs2NDcsOCBAQAogCXNsb3RfY21kID0gMHgwMjAwOwogCWNtZF9tYXNrID0gUFdSX0xFRF9DVFJMOwogCXBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7Ci0JZGJnKCIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAotCSAgICBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOworCWN0cmxfZGJnKGN0cmwsICIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAorCQkgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKIH0KIAogc3RhdGljIGludCBocGNfcG93ZXJfb25fc2xvdChzdHJ1Y3Qgc2xvdCAqIHNsb3QpCkBAIC02MTMsMjAgKzY1OSwyMiBAQAogCXUxNiBzbG90X3N0YXR1czsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXM6IHNsb3QtPmhwX3Nsb3QgJXhcbiIsIF9fZnVuY19fLCBzbG90LT5ocF9zbG90KTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IHNsb3QtPmhwX3Nsb3QgJXhcbiIsIF9fZnVuY19fLCBzbG90LT5ocF9zbG90KTsKIAogCS8qIENsZWFyIHN0aWNreSBwb3dlci1mYXVsdCBiaXQgZnJvbSBwcmV2aW91cyBwb3dlciBmYWlsdXJlcyAqLwogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmc2xvdF9zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlzbG90X3N0YXR1cyAmPSBQV1JfRkFVTFRfREVURUNURUQ7CiAJaWYgKHNsb3Rfc3RhdHVzKSB7CiAJCXJldHZhbCA9IHBjaWVocF93cml0ZXcoY3RybCwgU0xPVFNUQVRVUywgc2xvdF9zdGF0dXMpOwogCQlpZiAocmV0dmFsKSB7Ci0JCQllcnIoIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVFNUQVRVUyByZWdpc3RlclxuIiwKLQkJCSAgICBfX2Z1bmNfXyk7CisJCQljdHJsX2VycihjdHJsLAorCQkJCSAiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAJfQpAQCAtNjQ0LDExICs2OTIsMTEgQEAKIAlyZXR2YWwgPSBwY2llX3dyaXRlX2NtZChjdHJsLCBzbG90X2NtZCwgY21kX21hc2spOwogCiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBXcml0ZSAleCBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fLCBzbG90X2NtZCk7CisJCWN0cmxfZXJyKGN0cmwsICJXcml0ZSAleCBjb21tYW5kIGZhaWxlZCFcbiIsIHNsb3RfY21kKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCi0JICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTY5NCw3ICs3NDIsNyBAQAogCWludCByZXR2YWwgPSAwOwogCWludCBjaGFuZ2VkOwogCi0JZGJnKCIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOworCWN0cmxfZGJnKGN0cmwsICIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOwogCiAJLyoKIAkgKiBTZXQgQmFkIERMTFAgTWFzayBiaXQgaW4gQ29ycmVjdGFibGUgRXJyb3IgTWFzawpAQCAtNzIyLDEyICs3NzAsMTIgQEAKIAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIldyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIik7CiAJCXJldHZhbCA9IC0xOwogCQlnb3RvIG91dDsKIAl9Ci0JZGJnKCIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAotCSAgICBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOworCWN0cmxfZGJnKGN0cmwsICIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAorCQkgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKICBvdXQ6CiAJaWYgKGNoYW5nZWQpCiAJCXBjaWVfdW5tYXNrX2JhZF9kbGxwKGN0cmwpOwpAQCAtNzQ5LDcgKzc5Nyw4IEBACiAJaW50cl9sb2MgPSAwOwogCWRvIHsKIAkJaWYgKHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmZGV0ZWN0ZWQpKSB7Ci0JCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVNcbiIsCisJCQkJIF9fZnVuY19fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCkBAIC03NjAsMTIgKzgwOSwxMyBAQAogCQlpZiAoIWludHJfbG9jKQogCQkJcmV0dXJuIElSUV9OT05FOwogCQlpZiAoZGV0ZWN0ZWQgJiYgcGNpZWhwX3dyaXRldyhjdHJsLCBTTE9UU1RBVFVTLCBkZXRlY3RlZCkpIHsKLQkJCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UU1RBVFVTXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gSVJRX05PTkU7CiAJCX0KIAl9IHdoaWxlIChkZXRlY3RlZCk7CiAKLQlkYmcoIiVzOiBpbnRyX2xvYyAleFxuIiwgX19GVU5DVElPTl9fLCBpbnRyX2xvYyk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBpbnRyX2xvYyAleFxuIiwgX19mdW5jX18sIGludHJfbG9jKTsKIAogCS8qIENoZWNrIENvbW1hbmQgQ29tcGxldGUgSW50ZXJydXB0IFBlbmRpbmcgKi8KIAlpZiAoaW50cl9sb2MgJiBDTURfQ09NUExFVEVEKSB7CkBAIC04MDcsNyArODU3LDcgQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkbChjdHJsLCBMTktDQVAsICZsbmtfY2FwKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtODIxLDcgKzg3MSw3IEBACiAJfQogCiAJKnZhbHVlID0gbG5rX3NwZWVkOwotCWRiZygiTWF4IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKKwljdHJsX2RiZyhjdHJsLCAiTWF4IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC04MzYsNyArODg2LDcgQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkbChjdHJsLCBMTktDQVAsICZsbmtfY2FwKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtODcxLDcgKzkyMSw3IEBACiAJfQogCiAJKnZhbHVlID0gbG5rX3dkdGg7Ci0JZGJnKCJNYXggbGluayB3aWR0aCA9ICVkXG4iLCBsbmtfd2R0aCk7CisJY3RybF9kYmcoY3RybCwgIk1heCBsaW5rIHdpZHRoID0gJWRcbiIsIGxua193ZHRoKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC04ODUsNyArOTM1LDggQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBMTktTVEFUVVMsICZsbmtfc3RhdHVzKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIExOS1NUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS1NUQVRVUyByZWdpc3RlclxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC04OTksNyArOTUwLDcgQEAKIAl9CiAKIAkqdmFsdWUgPSBsbmtfc3BlZWQ7Ci0JZGJnKCJDdXJyZW50IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKKwljdHJsX2RiZyhjdHJsLCAiQ3VycmVudCBsaW5rIHNwZWVkID0gJWRcbiIsIGxua19zcGVlZCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtOTE0LDcgKzk2NSw4IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgTE5LU1RBVFVTLCAmbG5rX3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtOTQ5LDcgKzEwMDEsNyBAQAogCX0KIAogCSp2YWx1ZSA9IGxua193ZHRoOwotCWRiZygiQ3VycmVudCBsaW5rIHdpZHRoID0gJWRcbiIsIGxua193ZHRoKTsKKwljdHJsX2RiZyhjdHJsLCAiQ3VycmVudCBsaW5rIHdpZHRoID0gJWRcbiIsIGxua193ZHRoKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC05OTgsNyArMTA1MCw3IEBACiAJICAgICAgIFBXUl9GQVVMVF9ERVRFQ1RfRU5BQkxFIHwgSFBfSU5UUl9FTkFCTEUgfCBDTURfQ01QTF9JTlRSX0VOQUJMRTsKIAogCWlmIChwY2llX3dyaXRlX2NtZChjdHJsLCBjbWQsIG1hc2spKSB7Ci0JCWVycigiJXM6IENhbm5vdCBlbmFibGUgc29mdHdhcmUgbm90aWZpY2F0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgZW5hYmxlIHNvZnR3YXJlIG5vdGlmaWNhdGlvblxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMDEwLDcgKzEwNjIsNyBAQAogCW1hc2sgPSBQUlNOX0RFVEVDVF9FTkFCTEUgfCBBVFROX0JVVFROX0VOQUJMRSB8IE1STF9ERVRFQ1RfRU5BQkxFIHwKIAkgICAgICAgUFdSX0ZBVUxUX0RFVEVDVF9FTkFCTEUgfCBIUF9JTlRSX0VOQUJMRSB8IENNRF9DTVBMX0lOVFJfRU5BQkxFOwogCWlmIChwY2llX3dyaXRlX2NtZChjdHJsLCAwLCBtYXNrKSkKLQkJd2FybigiJXM6IENhbm5vdCBkaXNhYmxlIHNvZnR3YXJlIG5vdGlmaWNhdGlvblxuIiwgX19mdW5jX18pOworCQljdHJsX3dhcm4oY3RybCwgIkNhbm5vdCBkaXNhYmxlIHNvZnR3YXJlIG5vdGlmaWNhdGlvblxuIik7CiB9CiAKIHN0YXRpYyBpbnQgcGNpZV9pbml0X25vdGlmaWNhdGlvbihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKQEAgLTEwNDQsNyArMTA5Niw2IEBACiAJc2xvdC0+ZGV2aWNlID0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0ICsgc2xvdC0+aHBfc2xvdDsKIAlzbG90LT5ocGNfb3BzID0gY3RybC0+aHBjX29wczsKIAlzbG90LT5udW1iZXIgPSBjdHJsLT5maXJzdF9zbG90OwotCXNucHJpbnRmKHNsb3QtPm5hbWUsIFNMT1RfTkFNRV9TSVpFLCAiJWQiLCBzbG90LT5udW1iZXIpOwogCW11dGV4X2luaXQoJnNsb3QtPmxvY2spOwogCUlOSVRfREVMQVlFRF9XT1JLKCZzbG90LT53b3JrLCBwY2llaHBfcXVldWVfcHVzaGJ1dHRvbl93b3JrKTsKIAlsaXN0X2FkZCgmc2xvdC0+c2xvdF9saXN0LCAmY3RybC0+c2xvdF9saXN0KTsKQEAgLTEwNzEsNTggKzExMjIsNzAgQEAKIAlpZiAoIXBjaWVocF9kZWJ1ZykKIAkJcmV0dXJuOwogCi0JZGJnKCJIb3RwbHVnIENvbnRyb2xsZXI6XG4iKTsKLQlkYmcoIiAgU2VnL0J1cy9EZXYvRnVuYy9JUlEgOiAlcyBJUlEgJWRcbiIsIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwotCWRiZygiICBWZW5kb3IgSUQgICAgICAgICAgICA6IDB4JTA0eFxuIiwgcGRldi0+dmVuZG9yKTsKLQlkYmcoIiAgRGV2aWNlIElEICAgICAgICAgICAgOiAweCUwNHhcbiIsIHBkZXYtPmRldmljZSk7Ci0JZGJnKCIgIFN1YnN5c3RlbSBJRCAgICAgICAgIDogMHglMDR4XG4iLCBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKLQlkYmcoIiAgU3Vic3lzdGVtIFZlbmRvciBJRCAgOiAweCUwNHhcbiIsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOwotCWRiZygiICBQQ0llIENhcCBvZmZzZXQgICAgICA6IDB4JTAyeFxuIiwgY3RybC0+Y2FwX2Jhc2UpOworCWN0cmxfaW5mbyhjdHJsLCAiSG90cGx1ZyBDb250cm9sbGVyOlxuIik7CisJY3RybF9pbmZvKGN0cmwsICIgIFNlZy9CdXMvRGV2L0Z1bmMvSVJRIDogJXMgSVJRICVkXG4iLAorCQkgIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOworCWN0cmxfaW5mbyhjdHJsLCAiICBWZW5kb3IgSUQgICAgICAgICAgICA6IDB4JTA0eFxuIiwgcGRldi0+dmVuZG9yKTsKKwljdHJsX2luZm8oY3RybCwgIiAgRGV2aWNlIElEICAgICAgICAgICAgOiAweCUwNHhcbiIsIHBkZXYtPmRldmljZSk7CisJY3RybF9pbmZvKGN0cmwsICIgIFN1YnN5c3RlbSBJRCAgICAgICAgIDogMHglMDR4XG4iLAorCQkgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCWN0cmxfaW5mbyhjdHJsLCAiICBTdWJzeXN0ZW0gVmVuZG9yIElEICA6IDB4JTA0eFxuIiwKKwkJICBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yKTsKKwljdHJsX2luZm8oY3RybCwgIiAgUENJZSBDYXAgb2Zmc2V0ICAgICAgOiAweCUwMnhcbiIsIGN0cmwtPmNhcF9iYXNlKTsKIAlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKIAkJaWYgKCFwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpKQogCQkJY29udGludWU7Ci0JCWRiZygiICBQQ0kgcmVzb3VyY2UgWyVkXSAgICAgOiAweCVsbHhAMHglbGx4XG4iLCBpLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSkpOworCQljdHJsX2luZm8oY3RybCwgIiAgUENJIHJlc291cmNlIFslZF0gICAgIDogMHglbGx4QDB4JWxseFxuIiwKKwkJCSAgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKSk7CiAJfQotCWRiZygiU2xvdCBDYXBhYmlsaXRpZXMgICAgICA6IDB4JTA4eFxuIiwgY3RybC0+c2xvdF9jYXApOwotCWRiZygiICBQaHlzaWNhbCBTbG90IE51bWJlciA6ICVkXG4iLCBjdHJsLT5maXJzdF9zbG90KTsKLQlkYmcoIiAgQXR0ZW50aW9uIEJ1dHRvbiAgICAgOiAlM3NcbiIsIEFUVE5fQlVUVE4oY3RybCkgPyAieWVzIiA6ICJubyIpOwotCWRiZygiICBQb3dlciBDb250cm9sbGVyICAgICA6ICUzc1xuIiwgUE9XRVJfQ1RSTChjdHJsKSA/ICJ5ZXMiIDogIm5vIik7Ci0JZGJnKCIgIE1STCBTZW5zb3IgICAgICAgICAgIDogJTNzXG4iLCBNUkxfU0VOUyhjdHJsKSAgID8gInllcyIgOiAibm8iKTsKLQlkYmcoIiAgQXR0ZW50aW9uIEluZGljYXRvciAgOiAlM3NcbiIsIEFUVE5fTEVEKGN0cmwpICAgPyAieWVzIiA6ICJubyIpOwotCWRiZygiICBQb3dlciBJbmRpY2F0b3IgICAgICA6ICUzc1xuIiwgUFdSX0xFRChjdHJsKSAgICA/ICJ5ZXMiIDogIm5vIik7Ci0JZGJnKCIgIEhvdC1QbHVnIFN1cnByaXNlICAgIDogJTNzXG4iLCBIUF9TVVBSX1JNKGN0cmwpID8gInllcyIgOiAibm8iKTsKLQlkYmcoIiAgRU1JIFByZXNlbnQgICAgICAgICAgOiAlM3NcbiIsIEVNSShjdHJsKSAgICAgICAgPyAieWVzIiA6ICJubyIpOwotCWRiZygiICBDb21tYW5kIENvbXBsZXRlZCAgICA6ICUzc1xuIiwgTk9fQ01EX0NNUEwoY3RybCk/ICJubyIgOiAieWVzIik7CisJY3RybF9pbmZvKGN0cmwsICJTbG90IENhcGFiaWxpdGllcyAgICAgIDogMHglMDh4XG4iLCBjdHJsLT5zbG90X2NhcCk7CisJY3RybF9pbmZvKGN0cmwsICIgIFBoeXNpY2FsIFNsb3QgTnVtYmVyIDogJWRcbiIsIGN0cmwtPmZpcnN0X3Nsb3QpOworCWN0cmxfaW5mbyhjdHJsLCAiICBBdHRlbnRpb24gQnV0dG9uICAgICA6ICUzc1xuIiwKKwkJICBBVFROX0JVVFROKGN0cmwpID8gInllcyIgOiAibm8iKTsKKwljdHJsX2luZm8oY3RybCwgIiAgUG93ZXIgQ29udHJvbGxlciAgICAgOiAlM3NcbiIsCisJCSAgUE9XRVJfQ1RSTChjdHJsKSA/ICJ5ZXMiIDogIm5vIik7CisJY3RybF9pbmZvKGN0cmwsICIgIE1STCBTZW5zb3IgICAgICAgICAgIDogJTNzXG4iLAorCQkgIE1STF9TRU5TKGN0cmwpICAgPyAieWVzIiA6ICJubyIpOworCWN0cmxfaW5mbyhjdHJsLCAiICBBdHRlbnRpb24gSW5kaWNhdG9yICA6ICUzc1xuIiwKKwkJICBBVFROX0xFRChjdHJsKSAgID8gInllcyIgOiAibm8iKTsKKwljdHJsX2luZm8oY3RybCwgIiAgUG93ZXIgSW5kaWNhdG9yICAgICAgOiAlM3NcbiIsCisJCSAgUFdSX0xFRChjdHJsKSAgICA/ICJ5ZXMiIDogIm5vIik7CisJY3RybF9pbmZvKGN0cmwsICIgIEhvdC1QbHVnIFN1cnByaXNlICAgIDogJTNzXG4iLAorCQkgIEhQX1NVUFJfUk0oY3RybCkgPyAieWVzIiA6ICJubyIpOworCWN0cmxfaW5mbyhjdHJsLCAiICBFTUkgUHJlc2VudCAgICAgICAgICA6ICUzc1xuIiwKKwkJICBFTUkoY3RybCkgICAgICAgID8gInllcyIgOiAibm8iKTsKKwljdHJsX2luZm8oY3RybCwgIiAgQ29tbWFuZCBDb21wbGV0ZWQgICAgOiAlM3NcbiIsCisJCSAgTk9fQ01EX0NNUEwoY3RybCkgPyAibm8iIDogInllcyIpOwogCXBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmcmVnMTYpOwotCWRiZygiU2xvdCBTdGF0dXMgICAgICAgICAgICA6IDB4JTA0eFxuIiwgcmVnMTYpOworCWN0cmxfaW5mbyhjdHJsLCAiU2xvdCBTdGF0dXMgICAgICAgICAgICA6IDB4JTA0eFxuIiwgcmVnMTYpOwogCXBjaWVocF9yZWFkdyhjdHJsLCBTTE9UQ1RSTCwgJnJlZzE2KTsKLQlkYmcoIlNsb3QgQ29udHJvbCAgICAgICAgICAgOiAweCUwNHhcbiIsIHJlZzE2KTsKKwljdHJsX2luZm8oY3RybCwgIlNsb3QgQ29udHJvbCAgICAgICAgICAgOiAweCUwNHhcbiIsIHJlZzE2KTsKIH0KIAogc3RydWN0IGNvbnRyb2xsZXIgKnBjaWVfaW5pdChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybDsKLQl1MzIgc2xvdF9jYXA7CisJdTMyIHNsb3RfY2FwLCBsaW5rX2NhcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cG9ydDsKIAogCWN0cmwgPSBremFsbG9jKHNpemVvZigqY3RybCksIEdGUF9LRVJORUwpOwogCWlmICghY3RybCkgewotCQllcnIoIiVzIDogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZkZXYtPmRldmljZSwgIiVzOiBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCUlOSVRfTElTVF9IRUFEKCZjdHJsLT5zbG90X2xpc3QpOwogCisJY3RybC0+cGNpZSA9IGRldjsKIAljdHJsLT5wY2lfZGV2ID0gcGRldjsKIAljdHJsLT5jYXBfYmFzZSA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwogCWlmICghY3RybC0+Y2FwX2Jhc2UpIHsKLQkJZXJyKCIlczogQ2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGFib3J0OworCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eVxuIik7CisJCWdvdG8gYWJvcnRfY3RybDsKIAl9CiAJaWYgKHBjaWVocF9yZWFkbChjdHJsLCBTTE9UQ0FQLCAmc2xvdF9jYXApKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDQVAgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKLQkJZ290byBhYm9ydDsKKwkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCByZWFkIFNMT1RDQVAgcmVnaXN0ZXJcbiIpOworCQlnb3RvIGFib3J0X2N0cmw7CiAJfQogCiAJY3RybC0+c2xvdF9jYXAgPSBzbG90X2NhcDsKQEAgLTExNDQsNiArMTIwNywxNiBAQAogCSAgICAhKFBPV0VSX0NUUkwoY3RybCkgfCBBVFROX0xFRChjdHJsKSB8IFBXUl9MRUQoY3RybCkgfCBFTUkoY3RybCkpKQogCSAgICBjdHJsLT5ub19jbWRfY29tcGxldGUgPSAxOwogCisgICAgICAgIC8qIENoZWNrIGlmIERhdGEgTGluayBMYXllciBMaW5rIEFjdGl2ZSBSZXBvcnRpbmcgaXMgaW1wbGVtZW50ZWQgKi8KKyAgICAgICAgaWYgKHBjaWVocF9yZWFkbChjdHJsLCBMTktDQVAsICZsaW5rX2NhcCkpIHsKKyAgICAgICAgICAgICAgICBjdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOworICAgICAgICAgICAgICAgIGdvdG8gYWJvcnRfY3RybDsKKyAgICAgICAgfQorICAgICAgICBpZiAobGlua19jYXAgJiBMSU5LX0FDVElWRV9SRVBPUlRJTkcpIHsKKyAgICAgICAgICAgICAgICBjdHJsX2RiZyhjdHJsLCAiTGluayBBY3RpdmUgUmVwb3J0aW5nIHN1cHBvcnRlZFxuIik7CisgICAgICAgICAgICAgICAgY3RybC0+bGlua19hY3RpdmVfcmVwb3J0aW5nID0gMTsKKyAgICAgICAgfQorCiAJLyogQ2xlYXIgYWxsIHJlbWFpbmluZyBldmVudCBiaXRzIGluIFNsb3QgU3RhdHVzIHJlZ2lzdGVyICovCiAJaWYgKHBjaWVocF93cml0ZXcoY3RybCwgU0xPVFNUQVRVUywgMHgxZikpCiAJCWdvdG8gYWJvcnRfY3RybDsKQEAgLTExNjEsOSArMTIzNCw5IEBACiAJCQlnb3RvIGFib3J0X2N0cmw7CiAJfQogCi0JaW5mbygiSFBDIHZlbmRvcl9pZCAleCBkZXZpY2VfaWQgJXggc3NfdmlkICV4IHNzX2RpZCAleFxuIiwKLQkgICAgIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLAotCSAgICAgcGRldi0+c3Vic3lzdGVtX3ZlbmRvciwgcGRldi0+c3Vic3lzdGVtX2RldmljZSk7CisJY3RybF9pbmZvKGN0cmwsICJIUEMgdmVuZG9yX2lkICV4IGRldmljZV9pZCAleCBzc192aWQgJXggc3NfZGlkICV4XG4iLAorCQkgIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCiAJaWYgKHBjaWVfaW5pdF9zbG90KGN0cmwpKQogCQlnb3RvIGFib3J0X2N0cmw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCmluZGV4IDYwNDBkY2MuLjEwZjk1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCkBAIC0zOSw4ICszOSw3IEBACiAJdTE2IHBjaV9jbWQsIHBjaV9iY3RsOwogCiAJaWYgKGhwcC0+cmV2aXNpb24gPiAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXYuJWQgdHlwZTAgcmVjb3JkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgaHBwLT5yZXZpc2lvbik7CisJCXdhcm4oIlJldi4lZCB0eXBlMCByZWNvcmQgbm90IHN1cHBvcnRlZFxuIiwgaHBwLT5yZXZpc2lvbik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgxLDggKzgwLDcgQEAKIAl1MzIgcmVnMzI7CiAKIAlpZiAoaHBwLT5yZXZpc2lvbiA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJldi4lZCB0eXBlMiByZWNvcmQgbm90IHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBocHAtPnJldmlzaW9uKTsKKwkJd2FybigiUmV2LiVkIHR5cGUyIHJlY29yZCBub3Qgc3VwcG9ydGVkXG4iLCBocHAtPnJldmlzaW9uKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTQ5LDggKzE0Nyw3IEBACiAJCXJldHVybjsKIAogCWlmIChwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKGRldiwgJmhwcCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCBnZXQgaG90cGx1ZyBwYXJhbWV0ZXJzXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQl3YXJuKCJDb3VsZCBub3QgZ2V0IGhvdHBsdWcgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE5OCwxOCArMTk1LDIwIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKIAlpbnQgbnVtLCBmbjsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCWRldiA9IHBjaV9nZXRfc2xvdChwYXJlbnQsIFBDSV9ERVZGTihwX3Nsb3QtPmRldmljZSwgMCkpOwogCWlmIChkZXYpIHsKLQkJZXJyKCJEZXZpY2UgJXMgYWxyZWFkeSBleGlzdHMgYXQgJXg6JXgsIGNhbm5vdCBob3QtYWRkXG4iLAotCQkJCXBjaV9uYW1lKGRldiksIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCWN0cmxfZXJyKGN0cmwsICJEZXZpY2UgJXMgYWxyZWFkeSBleGlzdHMgIgorCQkJICJhdCAlMDR4OiUwMng6JTAyeCwgY2Fubm90IGhvdC1hZGRcbiIsIHBjaV9uYW1lKGRldiksCisJCQkgcGNpX2RvbWFpbl9ucihwYXJlbnQpLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCQlwY2lfZGV2X3B1dChkZXYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAludW0gPSBwY2lfc2Nhbl9zbG90KHBhcmVudCwgUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCAwKSk7CiAJaWYgKG51bSA9PSAwKSB7Ci0JCWVycigiTm8gbmV3IGRldmljZSBmb3VuZFxuIik7CisJCWN0cmxfZXJyKGN0cmwsICJObyBuZXcgZGV2aWNlIGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0yMTgsOCArMjE3LDggQEAKIAkJaWYgKCFkZXYpCiAJCQljb250aW51ZTsKIAkJaWYgKChkZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7Ci0JCQllcnIoIkNhbm5vdCBob3QtYWRkIGRpc3BsYXkgZGV2aWNlICVzXG4iLAotCQkJCQlwY2lfbmFtZShkZXYpKTsKKwkJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgaG90LWFkZCBkaXNwbGF5IGRldmljZSAlc1xuIiwKKwkJCQkgcGNpX25hbWUoZGV2KSk7CiAJCQlwY2lfZGV2X3B1dChkZXYpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI0NCw5ICsyNDMsMTAgQEAKIAl1OCBwcmVzZW5jZSA9IDA7CiAJc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IHBfc2xvdC0+Y3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAJdTE2IGNvbW1hbmQ7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKLQlkYmcoIiVzOiBidXMvZGV2ID0gJXgvJXhcbiIsIF9fZnVuY19fLCBwX3Nsb3QtPmJ1cywKLQkJCQlwX3Nsb3QtPmRldmljZSk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBkb21haW46YnVzOmRldiA9ICUwNHg6JTAyeDolMDJ4XG4iLAorCQkgX19mdW5jX18sIHBjaV9kb21haW5fbnIocGFyZW50KSwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAlyZXQgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZwcmVzZW5jZSk7CiAJaWYgKHJldCkKIAkJcHJlc2VuY2UgPSAwOwpAQCAtMjU3LDE2ICsyNTcsMTcgQEAKIAkJaWYgKCF0ZW1wKQogCQkJY29udGludWU7CiAJCWlmICgodGVtcC0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKLQkJCWVycigiQ2Fubm90IHJlbW92ZSBkaXNwbGF5IGRldmljZSAlc1xuIiwKLQkJCQkJcGNpX25hbWUodGVtcCkpOworCQkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJIHBjaV9uYW1lKHRlbXApKTsKIAkJCXBjaV9kZXZfcHV0KHRlbXApOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHRlbXAtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UgJiYgcHJlc2VuY2UpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHRlbXAsIFBDSV9CUklER0VfQ09OVFJPTCwgJmJjdGwpOwogCQkJaWYgKGJjdGwgJiBQQ0lfQlJJREdFX0NUTF9WR0EpIHsKLQkJCQllcnIoIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCi0JCQkJICAgIHBjaV9uYW1lKHRlbXApKTsKKwkJCQljdHJsX2VycihjdHJsLAorCQkJCQkgIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJCSBwY2lfbmFtZSh0ZW1wKSk7CiAJCQkJcGNpX2Rldl9wdXQodGVtcCk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaAppbmRleCA3ZDU5MjFiLi40MTk5MTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwLmgKQEAgLTQ2LDEwICs0NiwxMCBAQAogI2RlZmluZSBQUkVTRU5UICAgICAgICAgMQkvKiBDYXJkIGluIHNsb3QgKi8KIAogI2RlZmluZSBNWV9OQU1FICJycGFwaHAiCi1leHRlcm4gaW50IGRlYnVnOworZXh0ZXJuIGludCBycGFwaHBfZGVidWc7CiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikJCQkJCVwKIAlkbyB7CQkJCQkJCVwKLQkJaWYgKGRlYnVnKQkJCQkJXAorCQlpZiAocnBhcGhwX2RlYnVnKQkJCQkJXAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCwJXAogCQkJCU1ZX05BTUUgLCAjIyBhcmcpOyAJCVwKIAl9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCmluZGV4IDFmODRmNDAuLjk1ZDAyYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJCQkvKiBhbmQgcGNpX2RvX3NjYW5fYnVzICovCiAjaW5jbHVkZSAicnBhcGhwLmgiCiAKLWludCBkZWJ1ZzsKK2ludCBycGFwaHBfZGVidWc7CiBMSVNUX0hFQUQocnBhcGhwX3Nsb3RfaGVhZCk7CiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMSIKQEAgLTUwLDcgKzUwLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHJwYXBocF9kZWJ1ZywgYm9vbCwgMDY0NCk7CiAKIC8qKgogICogc2V0X2F0dGVudGlvbl9zdGF0dXMgLSBzZXQgYXR0ZW50aW9uIExFRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYwppbmRleCA1YWNmZDRmLi41MTNlMWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCQlzbG90LT5zdGF0ZSA9IENPTkZJR1VSRUQ7CiAJCX0KIAotCQlpZiAoZGVidWcpIHsKKwkJaWYgKHJwYXBocF9kZWJ1ZykgewogCQkJc3RydWN0IHBjaV9kZXYgKmRldjsKIAkJCWRiZygiJXM6IHBjaV9kZXZzIG9mIHNsb3RbJXNdXG4iLCBfX2Z1bmNfXywgc2xvdC0+ZG4tPmZ1bGxfbmFtZSk7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jCmluZGV4IDUwODg0NTAuLjJlYTljZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMKQEAgLTQzLDcgKzQzLDcgQEAKIHZvaWQgZGVhbGxvY19zbG90X3N0cnVjdChzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8pOwotCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJa2ZyZWUoc2xvdC0+bmFtZSk7CiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90KTsKIAlrZnJlZShzbG90KTsKIH0KQEAgLTYzLDExICs2Myw5IEBACiAJCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKQogCQlnb3RvIGVycm9yX2hwc2xvdDsKLQlzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUgPSBrbWFsbG9jKHN0cmxlbihkcmNfbmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSkKKwlzbG90LT5uYW1lID0ga3N0cmR1cChkcmNfbmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbG90LT5uYW1lKQogCQlnb3RvIGVycm9yX2luZm87CQotCXNsb3QtPm5hbWUgPSBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWU7Ci0Jc3RyY3B5KHNsb3QtPm5hbWUsIGRyY19uYW1lKTsKIAlzbG90LT5kbiA9IGRuOwogCXNsb3QtPmluZGV4ID0gZHJjX2luZGV4OwogCXNsb3QtPnBvd2VyX2RvbWFpbiA9IHBvd2VyX2RvbWFpbjsKQEAgLTEzNyw3ICsxMzUsNyBAQAogCQlzbG90bm8gPSBQQ0lfU0xPVChQQ0lfRE4oc2xvdC0+ZG4tPmNoaWxkKS0+ZGV2Zm4pOwogCWVsc2UKIAkJc2xvdG5vID0gLTE7Ci0JcmV0dmFsID0gcGNpX2hwX3JlZ2lzdGVyKHBocF9zbG90LCBzbG90LT5idXMsIHNsb3Rubyk7CisJcmV0dmFsID0gcGNpX2hwX3JlZ2lzdGVyKHBocF9zbG90LCBzbG90LT5idXMsIHNsb3Rubywgc2xvdC0+bmFtZSk7CiAJaWYgKHJldHZhbCkgewogCQllcnIoInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKIAkJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYwppbmRleCA0MTBmZTAzLi4zZWVlNzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zZ2lfaG90cGx1Zy5jCkBAIC0xNjEsNyArMTYxLDggQEAKIH0KIAogc3RhdGljIGludCBzbl9ocF9zbG90X3ByaXZhdGVfYWxsb2Moc3RydWN0IGhvdHBsdWdfc2xvdCAqYnNzX2hvdHBsdWdfc2xvdCwKLQkJCQkgICAgc3RydWN0IHBjaV9idXMgKnBjaV9idXMsIGludCBkZXZpY2UpCisJCQkJICAgIHN0cnVjdCBwY2lfYnVzICpwY2lfYnVzLCBpbnQgZGV2aWNlLAorCQkJCSAgICBjaGFyICpuYW1lKQogewogCXN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm87CiAJc3RydWN0IHNsb3QgKnNsb3Q7CkBAIC0xNzMsMTUgKzE3NCw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGUgPSBzbG90OwogCi0JYnNzX2hvdHBsdWdfc2xvdC0+bmFtZSA9IGttYWxsb2MoU05fU0xPVF9OQU1FX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghYnNzX2hvdHBsdWdfc2xvdC0+bmFtZSkgewotCQlrZnJlZShic3NfaG90cGx1Z19zbG90LT5wcml2YXRlKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJc2xvdC0+ZGV2aWNlX251bSA9IGRldmljZTsKIAlzbG90LT5wY2lfYnVzID0gcGNpX2J1czsKLQlzcHJpbnRmKGJzc19ob3RwbHVnX3Nsb3QtPm5hbWUsICIlMDR4OiUwMng6JTAyeCIsCisJc3ByaW50ZihuYW1lLCAiJTA0eDolMDJ4OiUwMngiLAogCQlwY2lfZG9tYWluX25yKHBjaV9idXMpLAogCQkoKHUxNilwY2lidXNfaW5mby0+cGJpX2J1c2NvbW1vbi5ic19wZXJzaXN0X2J1c251bSksCiAJCWRldmljZSArIDEpOwpAQCAtNDE4LDcgKzQxMyw3IEBACiAJLyoKIAkgKiBBZGQgdGhlIHNsb3QncyBkZXZpY2VzIHRvIHRoZSBBQ1BJIGluZnJhc3RydWN0dXJlICovCiAJaWYgKFNOX0FDUElfQkFTRV9TVVBQT1JUKCkgJiYgc3NkdCkgewotCQl1bnNpZ25lZCBsb25nIGFkcjsKKwkJdW5zaWduZWQgbG9uZyBsb25nIGFkcjsKIAkJc3RydWN0IGFjcGlfZGV2aWNlICpwZGV2aWNlOwogCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKIAkJYWNwaV9oYW5kbGUgcGhhbmRsZTsKQEAgLTUxMCw3ICs1MDUsNyBAQAogCS8qIGZyZWUgdGhlIEFDUEkgcmVzb3VyY2VzIGZvciB0aGUgc2xvdCAqLwogCWlmIChTTl9BQ1BJX0JBU0VfU1VQUE9SVCgpICYmCiAgICAgICAgICAgICBQQ0lfQ09OVFJPTExFUihzbG90LT5wY2lfYnVzKS0+YWNwaV9oYW5kbGUpIHsKLQkJdW5zaWduZWQgbG9uZyBhZHI7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBhZHI7CiAJCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwogCQlhY3BpX2hhbmRsZSBwaGFuZGxlOwogCQlhY3BpX2hhbmRsZSBjaGFuZGxlID0gTlVMTDsKQEAgLTYwOCw3ICs2MDMsNiBAQAogc3RhdGljIHZvaWQgc25fcmVsZWFzZV9zbG90KHN0cnVjdCBob3RwbHVnX3Nsb3QgKmJzc19ob3RwbHVnX3Nsb3QpCiB7CiAJa2ZyZWUoYnNzX2hvdHBsdWdfc2xvdC0+aW5mbyk7Ci0Ja2ZyZWUoYnNzX2hvdHBsdWdfc2xvdC0+bmFtZSk7CiAJa2ZyZWUoYnNzX2hvdHBsdWdfc2xvdC0+cHJpdmF0ZSk7CiAJa2ZyZWUoYnNzX2hvdHBsdWdfc2xvdCk7CiB9CkBAIC02MTgsNiArNjEyLDcgQEAKIAlpbnQgZGV2aWNlOwogCXN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqYnNzX2hvdHBsdWdfc2xvdDsKKwljaGFyIG5hbWVbU05fU0xPVF9OQU1FX1NJWkVdOwogCWludCByYyA9IDA7CiAKIAkvKgpAQCAtNjQ1LDE1ICs2NDAsMTQgQEAKIAkJfQogCiAJCWlmIChzbl9ocF9zbG90X3ByaXZhdGVfYWxsb2MoYnNzX2hvdHBsdWdfc2xvdCwKLQkJCQkJICAgICBwY2lfYnVzLCBkZXZpY2UpKSB7CisJCQkJCSAgICAgcGNpX2J1cywgZGV2aWNlLCBuYW1lKSkgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJZ290byBhbGxvY19lcnI7CiAJCX0KLQogCQlic3NfaG90cGx1Z19zbG90LT5vcHMgPSAmc25faG90cGx1Z19zbG90X29wczsKIAkJYnNzX2hvdHBsdWdfc2xvdC0+cmVsZWFzZSA9ICZzbl9yZWxlYXNlX3Nsb3Q7CiAKLQkJcmMgPSBwY2lfaHBfcmVnaXN0ZXIoYnNzX2hvdHBsdWdfc2xvdCwgcGNpX2J1cywgZGV2aWNlKTsKKwkJcmMgPSBwY2lfaHBfcmVnaXN0ZXIoYnNzX2hvdHBsdWdfc2xvdCwgcGNpX2J1cywgZGV2aWNlLCBuYW1lKTsKIAkJaWYgKHJjKQogCQkJZ290byByZWdpc3Rlcl9lcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCmluZGV4IDhhMDI2ZjcuLjZhYmEwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaApAQCAtNTksNiArNTksMjAgQEAKICNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikJCQkJCQlcCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogCisjZGVmaW5lIGN0cmxfZGJnKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKHNocGNocF9kZWJ1ZykJCQkJCVwKKwkJCWRldl9wcmludGsoLCAmY3RybC0+cGNpX2Rldi0+ZGV2LAkJXAorCQkJCQlmb3JtYXQsICMjIGFyZyk7CQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgY3RybF9lcnIoY3RybCwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCisJZGV2X2VycigmY3RybC0+cGNpX2Rldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgY3RybF9pbmZvKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCWRldl9pbmZvKCZjdHJsLT5wY2lfZGV2LT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorI2RlZmluZSBjdHJsX3dhcm4oY3RybCwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCisJZGV2X3dhcm4oJmN0cmwtPnBjaV9kZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpCisKKwogI2RlZmluZSBTTE9UX05BTUVfU0laRSAxMAogc3RydWN0IHNsb3QgewogCXU4IGJ1czsKQEAgLTY5LDE1ICs4MywxMyBAQAogCXU4IHN0YXRlOwogCXU4IHByZXNlbmNlX3NhdmU7CiAJdTggcHdyX3NhdmU7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGFza19ldmVudDsKLQl1OCBocF9zbG90OwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwogCXN0cnVjdCBocGNfb3BzICpocGNfb3BzOwogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNsb3RfbGlzdDsKLQljaGFyIG5hbWVbU0xPVF9OQU1FX1NJWkVdOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsJLyogd29yayBmb3IgYnV0dG9uIGV2ZW50ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CisJdTggaHBfc2xvdDsKIH07CiAKIHN0cnVjdCBldmVudF9pbmZvIHsKQEAgLTE2OSw2ICsxODEsMTEgQEAKIGV4dGVybiB2b2lkIHNocGNocF9xdWV1ZV9wdXNoYnV0dG9uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGV4dGVybiBpbnQgc2hwY19pbml0KCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnNsb3RfbmFtZShzdHJ1Y3Qgc2xvdCAqc2xvdCkKK3sKKwlyZXR1cm4gaG90cGx1Z19zbG90X25hbWUoc2xvdC0+aG90cGx1Z19zbG90KTsKK30KKwogI2lmZGVmIENPTkZJR19BQ1BJCiAjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KIHN0YXRpYyBpbmxpbmUgaW50IGdldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtMjM2LDcgKzI1Myw3IEBACiAJCQlyZXR1cm4gc2xvdDsKIAl9CiAKLQllcnIoIiVzOiBzbG90IChkZXZpY2U9MHgleCkgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXywgZGV2aWNlKTsKKwljdHJsX2VycihjdHJsLCAiU2xvdCAoZGV2aWNlPTB4JTAyeCkgbm90IGZvdW5kXG4iLCBkZXZpY2UpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzAsNyArMjg3LDkgQEAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocF9zbG90LT5jdHJsLT5wY2lfZGV2LCBQQ0lYX01JU0NfQlJJREdFX0VSUk9SU19PRkZTRVQsICZwY2l4X2JyaWRnZV9lcnJvcnNfcmVnKTsKIAlwZXJyX3NldCA9IHBjaXhfYnJpZGdlX2Vycm9yc19yZWcgJiBQRVJSX09CU0VSVkVEX01BU0s7CiAJaWYgKHBlcnJfc2V0KSB7Ci0JCWRiZyAoIiVzICBXMUM6IEJyaWRnZV9FcnJvcnNbIFBFUlJfT0JTRVJWRUQgPSAlMDhYXVxuIixfX2Z1bmNfXyAsIHBlcnJfc2V0KTsKKwkJY3RybF9kYmcocF9zbG90LT5jdHJsLAorCQkJICJCcmlkZ2VfRXJyb3JzWyBQRVJSX09CU0VSVkVEID0gJTA4WF0gKFcxQylcbiIsCisJCQkgcGVycl9zZXQpOwogCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocF9zbG90LT5jdHJsLT5wY2lfZGV2LCBQQ0lYX01JU0NfQlJJREdFX0VSUk9SU19PRkZTRVQsIHBlcnJfc2V0KTsKIAl9CkBAIC0yNzksNyArMjk4LDcgQEAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocF9zbG90LT5jdHJsLT5wY2lfZGV2LCBQQ0lYX01FTV9CQVNFX0xJTUlUX09GRlNFVCwgJnBjaXhfbWVtX2Jhc2VfcmVnKTsKIAlyc2Vfc2V0ID0gcGNpeF9tZW1fYmFzZV9yZWcgJiBSU0VfTUFTSzsKIAlpZiAocnNlX3NldCkgewotCQlkYmcgKCIlcyAgVzFDOiBNZW1vcnlfQmFzZV9MaW1pdFsgUlNFIF1cbiIsX19mdW5jX18gKTsKKwkJY3RybF9kYmcocF9zbG90LT5jdHJsLCAiTWVtb3J5X0Jhc2VfTGltaXRbIFJTRSBdIChXMUMpXG4iKTsKIAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBfc2xvdC0+Y3RybC0+cGNpX2RldiwgUENJWF9NRU1fQkFTRV9MSU1JVF9PRkZTRVQsIHJzZV9zZXQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYwppbmRleCBjYzM4NjE1Li5mZThkMTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCkBAIC04OSw3ICs4OSw4IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKTsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QpOwpAQCAtMTAxLDggKzEwMiw5IEBACiAJc3RydWN0IHNsb3QgKnNsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwogCXN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbzsKKwljaGFyIG5hbWVbU0xPVF9OQU1FX1NJWkVdOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwotCWludCBpLCBsZW4sIGR1cCA9IDE7CisJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY3RybC0+bnVtX3Nsb3RzOyBpKyspIHsKIAkJc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCpzbG90KSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTksOCArMTIxLDYgQEAKIAkJCWdvdG8gZXJyb3JfaHBzbG90OwogCQlob3RwbHVnX3Nsb3QtPmluZm8gPSBpbmZvOwogCi0JCWhvdHBsdWdfc2xvdC0+bmFtZSA9IHNsb3QtPm5hbWU7Ci0KIAkJc2xvdC0+aHBfc2xvdCA9IGk7CiAJCXNsb3QtPmN0cmwgPSBjdHJsOwogCQlzbG90LT5idXMgPSBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyOwpAQCAtMTMzLDM3ICsxMzMsMjcgQEAKIAkJLyogcmVnaXN0ZXIgdGhpcyBzbG90IHdpdGggdGhlIGhvdHBsdWcgcGNpIGNvcmUgKi8KIAkJaG90cGx1Z19zbG90LT5wcml2YXRlID0gc2xvdDsKIAkJaG90cGx1Z19zbG90LT5yZWxlYXNlID0gJnJlbGVhc2Vfc2xvdDsKLQkJc25wcmludGYoc2xvdC0+bmFtZSwgU0xPVF9OQU1FX1NJWkUsICIlZCIsIHNsb3QtPm51bWJlcik7CisJCXNucHJpbnRmKG5hbWUsIFNMT1RfTkFNRV9TSVpFLCAiJWQiLCBzbG90LT5udW1iZXIpOwogCQlob3RwbHVnX3Nsb3QtPm9wcyA9ICZzaHBjaHBfaG90cGx1Z19zbG90X29wczsKIAorIAkJY3RybF9kYmcoY3RybCwgIlJlZ2lzdGVyaW5nIGRvbWFpbjpidXM6ZGV2PSUwNHg6JTAyeDolMDJ4ICIKKyAJCQkgImhwX3Nsb3Q9JXggc3VuPSV4IHNsb3RfZGV2aWNlX29mZnNldD0leFxuIiwKKyAJCQkgcGNpX2RvbWFpbl9ucihjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSksCisgCQkJIHNsb3QtPmJ1cywgc2xvdC0+ZGV2aWNlLCBzbG90LT5ocF9zbG90LCBzbG90LT5udW1iZXIsCisgCQkJIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CisJCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QsCisJCQkJY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNsb3QtPmRldmljZSwgbmFtZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWN0cmxfZXJyKGN0cmwsICJwY2lfaHBfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsCisJCQkJIHJldHZhbCk7CisJCQlnb3RvIGVycm9yX2luZm87CisJCX0KKwogCQlnZXRfcG93ZXJfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPnBvd2VyX3N0YXR1cyk7CiAJCWdldF9hdHRlbnRpb25fc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmF0dGVudGlvbl9zdGF0dXMpOwogCQlnZXRfbGF0Y2hfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmxhdGNoX3N0YXR1cyk7CiAJCWdldF9hZGFwdGVyX3N0YXR1cyhob3RwbHVnX3Nsb3QsICZpbmZvLT5hZGFwdGVyX3N0YXR1cyk7CiAKLQkJZGJnKCJSZWdpc3RlcmluZyBidXM9JXggZGV2PSV4IGhwX3Nsb3Q9JXggc3VuPSV4ICIKLQkJICAgICJzbG90X2RldmljZV9vZmZzZXQ9JXhcbiIsIHNsb3QtPmJ1cywgc2xvdC0+ZGV2aWNlLAotCQkgICAgc2xvdC0+aHBfc2xvdCwgc2xvdC0+bnVtYmVyLCBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOwotZHVwbGljYXRlX25hbWU6Ci0JCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QsCi0JCQkJY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNsb3QtPmRldmljZSk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCS8qCi0JCQkgKiBJZiBzbG90IE4gYWxyZWFkeSBleGlzdHMsIHdlJ2xsIHRyeSB0byBjcmVhdGUKLQkJCSAqIHNsb3QgTi0xLCBOLTIgLi4uIE4tTSwgdW50aWwgd2Ugb3ZlcmZsb3cuCi0JCQkgKi8KLQkJCWlmIChyZXR2YWwgPT0gLUVFWElTVCkgewotCQkJCWxlbiA9IHNucHJpbnRmKHNsb3QtPm5hbWUsIFNMT1RfTkFNRV9TSVpFLAotCQkJCQkgICAgICAgIiVkLSVkIiwgc2xvdC0+bnVtYmVyLCBkdXArKyk7Ci0JCQkJaWYgKGxlbiA8IFNMT1RfTkFNRV9TSVpFKQotCQkJCQlnb3RvIGR1cGxpY2F0ZV9uYW1lOwotCQkJCWVsc2UKLQkJCQkJZXJyKCJkdXBsaWNhdGUgc2xvdCBuYW1lIG92ZXJmbG93XG4iKTsKLQkJCX0KLQkJCWVycigicGNpX2hwX3JlZ2lzdGVyIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCByZXR2YWwpOwotCQkJZ290byBlcnJvcl9pbmZvOwotCQl9Ci0KIAkJbGlzdF9hZGQoJnNsb3QtPnNsb3RfbGlzdCwgJmN0cmwtPnNsb3RfbGlzdCk7CiAJfQogCkBAIC0yMDEsNyArMTkxLDggQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJaG90cGx1Z19zbG90LT5pbmZvLT5hdHRlbnRpb25fc3RhdHVzID0gc3RhdHVzOwogCXNsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHNsb3QsIHN0YXR1cyk7CkBAIC0yMTMsNyArMjA0LDggQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dXJuIHNocGNocF9zeXNmc19lbmFibGVfc2xvdChzbG90KTsKIH0KQEAgLTIyMiw3ICsyMTQsOCBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlyZXR1cm4gc2hwY2hwX3N5c2ZzX2Rpc2FibGVfc2xvdChzbG90KTsKIH0KQEAgLTIzMiw3ICsyMjUsOCBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCisJCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMjQ2LDcgKzI0MCw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2F0dGVudGlvbl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMjYwLDcgKzI1NSw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0yNzQsNyArMjcwLDggQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7CiAKIAlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMjg5LDcgKzI4Niw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzAzLDcgKzMwMSw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2N1cl9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzM0LDE1ICszMzMsMTQgQEAKIAogCWN0cmwgPSBremFsbG9jKHNpemVvZigqY3RybCksIEdGUF9LRVJORUwpOwogCWlmICghY3RybCkgewotCQllcnIoIiVzIDogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycl9vdXRfbm9uZTsKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJmN0cmwtPnNsb3RfbGlzdCk7CiAKIAlyYyA9IHNocGNfaW5pdChjdHJsLCBwZGV2KTsKIAlpZiAocmMpIHsKLQkJZGJnKCIlczogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCi0JCSAgICBTSFBDX01PRFVMRV9OQU1FKTsKKwkJY3RybF9kYmcoY3RybCwgIkNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfY3RybDsKIAl9CiAKQEAgLTM1MSw3ICszNDksNyBAQAogCS8qIFNldHVwIHRoZSBzbG90IGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgKi8KIAlyYyA9IGluaXRfc2xvdHMoY3RybCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IHNsb3QgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLCBTSFBDX01PRFVMRV9OQU1FKTsKKwkJY3RybF9lcnIoY3RybCwgIlNsb3QgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2VfY3RscjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwppbmRleCBkZmI1MzkzLi5iOGFiMjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCkBAIC02Miw3ICs2Miw3IEBACiAJdTMyIGV2ZW50X3R5cGU7CiAKIAkvKiBBdHRlbnRpb24gQnV0dG9uIENoYW5nZSAqLwotCWRiZygic2hwY2hwOiAgQXR0ZW50aW9uIGJ1dHRvbiBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKKwljdHJsX2RiZyhjdHJsLCAiQXR0ZW50aW9uIGJ1dHRvbiBpbnRlcnJ1cHQgcmVjZWl2ZWRcbiIpOwogCiAJcF9zbG90ID0gc2hwY2hwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYocF9zbG90LT5wcmVzZW5jZV9zYXZlKSk7CkBAIC03MCw3ICs3MCw3IEBACiAJLyoKIAkgKiAgQnV0dG9uIHByZXNzZWQgLSBTZWUgaWYgbmVlZCB0byBUQUtFIEFDVElPTiEhIQogCSAqLwotCWluZm8oIkJ1dHRvbiBwcmVzc2VkIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCWN0cmxfaW5mbyhjdHJsLCAiQnV0dG9uIHByZXNzZWQgb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAlldmVudF90eXBlID0gSU5UX0JVVFRPTl9QUkVTUzsKIAogCXF1ZXVlX2ludGVycnVwdF9ldmVudChwX3Nsb3QsIGV2ZW50X3R5cGUpOwpAQCAtODYsMjkgKzg2LDI5IEBACiAJdTMyIGV2ZW50X3R5cGU7CiAKIAkvKiBTd2l0Y2ggQ2hhbmdlICovCi0JZGJnKCJzaHBjaHA6ICBTd2l0Y2ggaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CisJY3RybF9kYmcoY3RybCwgIlN3aXRjaCBpbnRlcnJ1cHQgcmVjZWl2ZWRcbiIpOwogCiAJcF9zbG90ID0gc2hwY2hwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYocF9zbG90LT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JZGJnKCIlczogQ2FyZCBwcmVzZW50ICV4IFBvd2VyIHN0YXR1cyAleFxuIiwgX19mdW5jX18sCi0JCXBfc2xvdC0+cHJlc2VuY2Vfc2F2ZSwgcF9zbG90LT5wd3Jfc2F2ZSk7CisJY3RybF9kYmcoY3RybCwgIkNhcmQgcHJlc2VudCAleCBQb3dlciBzdGF0dXMgJXhcbiIsCisJCSBwX3Nsb3QtPnByZXNlbmNlX3NhdmUsIHBfc2xvdC0+cHdyX3NhdmUpOwogCiAJaWYgKGdldHN0YXR1cykgewogCQkvKgogCQkgKiBTd2l0Y2ggb3BlbmVkCiAJCSAqLwotCQlpbmZvKCJMYXRjaCBvcGVuIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkxhdGNoIG9wZW4gb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZXZlbnRfdHlwZSA9IElOVF9TV0lUQ0hfT1BFTjsKIAkJaWYgKHBfc2xvdC0+cHdyX3NhdmUgJiYgcF9zbG90LT5wcmVzZW5jZV9zYXZlKSB7CiAJCQlldmVudF90eXBlID0gSU5UX1BPV0VSX0ZBVUxUOwotCQkJZXJyKCJTdXJwcmlzZSBSZW1vdmFsIG9mIGNhcmRcbiIpOworCQkJY3RybF9lcnIoY3RybCwgIlN1cnByaXNlIFJlbW92YWwgb2YgY2FyZFxuIik7CiAJCX0KIAl9IGVsc2UgewogCQkvKgogCQkgKiAgU3dpdGNoIGNsb3NlZAogCQkgKi8KLQkJaW5mbygiTGF0Y2ggY2xvc2Ugb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiTGF0Y2ggY2xvc2Ugb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZXZlbnRfdHlwZSA9IElOVF9TV0lUQ0hfQ0xPU0U7CiAJfQogCkBAIC0xMjMsNyArMTIzLDcgQEAKIAl1MzIgZXZlbnRfdHlwZTsKIAogCS8qIFByZXNlbmNlIENoYW5nZSAqLwotCWRiZygic2hwY2hwOiAgUHJlc2VuY2UvTm90aWZ5IGlucHV0IGNoYW5nZS5cbiIpOworCWN0cmxfZGJnKGN0cmwsICJQcmVzZW5jZS9Ob3RpZnkgaW5wdXQgY2hhbmdlXG4iKTsKIAogCXBfc2xvdCA9IHNocGNocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKQEAgLTEzNSwxMyArMTM1LDE1IEBACiAJCS8qCiAJCSAqIENhcmQgUHJlc2VudAogCQkgKi8KLQkJaW5mbygiQ2FyZCBwcmVzZW50IG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkNhcmQgcHJlc2VudCBvbiBTbG90KCVzKVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlldmVudF90eXBlID0gSU5UX1BSRVNFTkNFX09OOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIE5vdCBQcmVzZW50CiAJCSAqLwotCQlpbmZvKCJDYXJkIG5vdCBwcmVzZW50IG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkNhcmQgbm90IHByZXNlbnQgb24gU2xvdCglcylcbiIsCisJCQkgIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZXZlbnRfdHlwZSA9IElOVF9QUkVTRU5DRV9PRkY7CiAJfQogCkBAIC0xNTYsNyArMTU4LDcgQEAKIAl1MzIgZXZlbnRfdHlwZTsKIAogCS8qIFBvd2VyIGZhdWx0ICovCi0JZGJnKCJzaHBjaHA6ICBQb3dlciBmYXVsdCBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKKwljdHJsX2RiZyhjdHJsLCAiUG93ZXIgZmF1bHQgaW50ZXJydXB0IHJlY2VpdmVkXG4iKTsKIAogCXBfc2xvdCA9IHNocGNocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKQEAgLTE2NCwxOCArMTY2LDE5IEBACiAJCS8qCiAJCSAqIFBvd2VyIGZhdWx0IENsZWFyZWQKIAkJICovCi0JCWluZm8oIlBvd2VyIGZhdWx0IGNsZWFyZWQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiUG93ZXIgZmF1bHQgY2xlYXJlZCBvbiBTbG90KCVzKVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlwX3Nsb3QtPnN0YXR1cyA9IDB4MDA7CiAJCWV2ZW50X3R5cGUgPSBJTlRfUE9XRVJfRkFVTFRfQ0xFQVI7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogICBQb3dlciBmYXVsdAogCQkgKi8KLQkJaW5mbygiUG93ZXIgZmF1bHQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiUG93ZXIgZmF1bHQgb24gU2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVDsKIAkJLyogc2V0IHBvd2VyIGZhdWx0IHN0YXR1cyBmb3IgdGhpcyBib2FyZCAqLwogCQlwX3Nsb3QtPnN0YXR1cyA9IDB4RkY7Ci0JCWluZm8oInBvd2VyIGZhdWx0IGJpdCAleCBzZXRcbiIsIGhwX3Nsb3QpOworCQljdHJsX2luZm8oY3RybCwgIlBvd2VyIGZhdWx0IGJpdCAleCBzZXRcbiIsIGhwX3Nsb3QpOwogCX0KIAogCXF1ZXVlX2ludGVycnVwdF9ldmVudChwX3Nsb3QsIGV2ZW50X3R5cGUpOwpAQCAtMTkxLDEwICsxOTQsMTAgQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JZGJnKCIlczogY2hhbmdlIHRvIHNwZWVkICVkXG4iLCBfX2Z1bmNfXywgc3BlZWQpOworCWN0cmxfZGJnKGN0cmwsICJDaGFuZ2Ugc3BlZWQgdG8gJWRcbiIsIHNwZWVkKTsKIAlpZiAoKHJjID0gcF9zbG90LT5ocGNfb3BzLT5zZXRfYnVzX3NwZWVkX21vZGUocF9zbG90LCBzcGVlZCkpKSB7Ci0JCWVycigiJXM6IElzc3VlIG9mIHNldCBidXMgc3BlZWQgbW9kZSBjb21tYW5kIGZhaWxlZFxuIiwKLQkJICAgIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBJc3N1ZSBvZiBzZXQgYnVzIHNwZWVkIG1vZGUgY29tbWFuZCAiCisJCQkgImZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAl9CiAJcmV0dXJuIHJjOwpAQCAtMjEyLDggKzIxNSw4IEBACiAJICovCiAJaWYgKGZsYWcpIHsKIAkJaWYgKGFzcCA8IGJzcCkgewotCQkJZXJyKCIlczogc3BlZWQgb2YgYnVzICV4IGFuZCBhZGFwdGVyICV4IG1pc21hdGNoXG4iLAotCQkJICAgIF9fZnVuY19fLCBic3AsIGFzcCk7CisJCQljdHJsX2VycihjdHJsLCAiU3BlZWQgb2YgYnVzICV4IGFuZCBhZGFwdGVyICV4ICIKKwkJCQkgIm1pc21hdGNoXG4iLCBic3AsIGFzcCk7CiAJCQlyYyA9IFdST05HX0JVU19GUkVRVUVOQ1k7CiAJCX0KIAkJcmV0dXJuIHJjOwpAQCAtMjQzLDE3ICsyNDYsMTggQEAKIAlpbnQgcmMgPSAwOwogCWVudW0gcGNpX2J1c19zcGVlZCBhc3AsIGJzcCwgbXNwOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOworCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKIAogCWhwX3Nsb3QgPSBwX3Nsb3QtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAotCWRiZygiJXM6IHBfc2xvdC0+ZGV2aWNlLCBzbG90X29mZnNldCwgaHBfc2xvdCA9ICVkLCAlZCAsJWRcbiIsCi0JCQlfX2Z1bmNfXywgcF9zbG90LT5kZXZpY2UsCi0JCQljdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIGhwX3Nsb3QpOworCWN0cmxfZGJnKGN0cmwsCisJCSAiJXM6IHBfc2xvdC0+ZGV2aWNlLCBzbG90X29mZnNldCwgaHBfc2xvdCA9ICVkLCAlZCAsJWRcbiIsCisJCSBfX2Z1bmNfXywgcF9zbG90LT5kZXZpY2UsIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCwgaHBfc2xvdCk7CiAKIAkvKiBQb3dlciBvbiBzbG90IHdpdGhvdXQgY29ubmVjdGluZyB0byBidXMgKi8KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+cG93ZXJfb25fc2xvdChwX3Nsb3QpOwogCWlmIChyYykgewotCQllcnIoIiVzOiBGYWlsZWQgdG8gcG93ZXIgb24gc2xvdFxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiRmFpbGVkIHRvIHBvd2VyIG9uIHNsb3RcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNjIsMzMgKzI2NiwzNCBAQAogCQkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7CiAKIAkJaWYgKChyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2V0X2J1c19zcGVlZF9tb2RlKHBfc2xvdCwgUENJX1NQRUVEXzMzTUh6KSkpIHsKLQkJCWVycigiJXM6IElzc3VlIG9mIHNldCBidXMgc3BlZWQgbW9kZSBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJY3RybF9lcnIoY3RybCwgIiVzOiBJc3N1ZSBvZiBzZXQgYnVzIHNwZWVkIG1vZGUgY29tbWFuZCIKKwkJCQkgIiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCQl9CiAKIAkJLyogdHVybiBvbiBib2FyZCwgYmxpbmsgZ3JlZW4gTEVELCB0dXJuIG9mZiBBbWJlciBMRUQgKi8KIAkJaWYgKChyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2xvdF9lbmFibGUocF9zbG90KSkpIHsKLQkJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRW5hYmxlIGNvbW1hbmQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQljdHJsX2VycihjdHJsLCAiSXNzdWUgb2YgU2xvdCBFbmFibGUgY29tbWFuZCBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJfQogCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3NwZWVkKHBfc2xvdCwgJmFzcCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbid0IGdldCBhZGFwdGVyIHNwZWVkIG9yIGJ1cyBtb2RlIG1pc21hdGNoXG4iLAotCQkgICAgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiQ2FuJ3QgZ2V0IGFkYXB0ZXIgc3BlZWQgb3IgIgorCQkJICJidXMgbW9kZSBtaXNtYXRjaFxuIik7CiAJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCX0KIAogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZChwX3Nsb3QsICZic3ApOwogCWlmIChyYykgewotCQllcnIoIiVzOiBDYW4ndCBnZXQgYnVzIG9wZXJhdGlvbiBzcGVlZFxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiQ2FuJ3QgZ2V0IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIpOwogCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAl9CiAKIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQocF9zbG90LCAmbXNwKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2FuJ3QgZ2V0IG1heCBidXMgb3BlcmF0aW9uIHNwZWVkXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICJDYW4ndCBnZXQgbWF4IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIpOwogCQltc3AgPSBic3A7CiAJfQogCkBAIC0yOTYsOSArMzAxLDkgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKSkKIAkJc2xvdHNfbm90X2VtcHR5ID0gMTsKIAotCWRiZygiJXM6IHNsb3RzX25vdF9lbXB0eSAlZCwgYWRhcHRlcl9zcGVlZCAlZCwgYnVzX3NwZWVkICVkLCAiCi0JICAgICJtYXhfYnVzX3NwZWVkICVkXG4iLCBfX2Z1bmNfXywgc2xvdHNfbm90X2VtcHR5LCBhc3AsCi0JICAgIGJzcCwgbXNwKTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IHNsb3RzX25vdF9lbXB0eSAlZCwgYWRhcHRlcl9zcGVlZCAlZCwgYnVzX3NwZWVkICVkLCIKKwkJICIgbWF4X2J1c19zcGVlZCAlZFxuIiwgX19mdW5jX18sIHNsb3RzX25vdF9lbXB0eSwgYXNwLAorCQkgYnNwLCBtc3ApOwogCiAJcmMgPSBmaXhfYnVzX3NwZWVkKGN0cmwsIHBfc2xvdCwgc2xvdHNfbm90X2VtcHR5LCBhc3AsIGJzcCwgbXNwKTsKIAlpZiAocmMpCkBAIC0zMDYsMjYgKzMxMSwyNiBAQAogCiAJLyogdHVybiBvbiBib2FyZCwgYmxpbmsgZ3JlZW4gTEVELCB0dXJuIG9mZiBBbWJlciBMRUQgKi8KIAlpZiAoKHJjID0gcF9zbG90LT5ocGNfb3BzLT5zbG90X2VuYWJsZShwX3Nsb3QpKSkgewotCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IEVuYWJsZSBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiSXNzdWUgb2YgU2xvdCBFbmFibGUgY29tbWFuZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogV2FpdCBmb3IgfjEgc2Vjb25kICovCiAJbXNsZWVwKDEwMDApOwogCi0JZGJnKCIlczogc2xvdCBzdGF0dXMgPSAleFxuIiwgX19mdW5jX18sIHBfc2xvdC0+c3RhdHVzKTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IHNsb3Qgc3RhdHVzID0gJXhcbiIsIF9fZnVuY19fLCBwX3Nsb3QtPnN0YXR1cyk7CiAJLyogQ2hlY2sgZm9yIGEgcG93ZXIgZmF1bHQgKi8KIAlpZiAocF9zbG90LT5zdGF0dXMgPT0gMHhGRikgewogCQkvKiBwb3dlciBmYXVsdCBvY2N1cnJlZCwgYnV0IGl0IHdhcyBiZW5pZ24gKi8KLQkJZGJnKCIlczogcG93ZXIgZmF1bHRcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9kYmcoY3RybCwgIiVzOiBQb3dlciBmYXVsdFxuIiwgX19mdW5jX18pOwogCQlyYyA9IFBPV0VSX0ZBSUxVUkU7CiAJCXBfc2xvdC0+c3RhdHVzID0gMDsKIAkJZ290byBlcnJfZXhpdDsKIAl9CiAKIAlpZiAoc2hwY2hwX2NvbmZpZ3VyZV9kZXZpY2UocF9zbG90KSkgewotCQllcnIoIkNhbm5vdCBhZGQgZGV2aWNlIGF0IDB4JXg6MHgleFxuIiwgcF9zbG90LT5idXMsCi0JCQkJcF9zbG90LT5kZXZpY2UpOworCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IGFkZCBkZXZpY2UgYXQgJTA0eDolMDJ4OiUwMnhcbiIsCisJCQkgcGNpX2RvbWFpbl9ucihwYXJlbnQpLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCQlnb3RvIGVycl9leGl0OwogCX0KIApAQCAtMzQxLDcgKzM0Niw4IEBACiAJLyogdHVybiBvZmYgc2xvdCwgdHVybiBvbiBBbWJlciBMRUQsIHR1cm4gb2ZmIEdyZWVuIExFRCAqLwogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5zbG90X2Rpc2FibGUocF9zbG90KTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogSXNzdWUgb2YgU2xvdCBEaXNhYmxlIGNvbW1hbmQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogSXNzdWUgb2YgU2xvdCBEaXNhYmxlIGNvbW1hbmQgZmFpbGVkXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMzY1LDcgKzM3MSw3IEBACiAJaHBfc2xvdCA9IHBfc2xvdC0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwogCXBfc2xvdCA9IHNocGNocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKLQlkYmcoIkluICVzLCBocF9zbG90ID0gJWRcbiIsIF9fZnVuY19fLCBocF9zbG90KTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IGhwX3Nsb3QgPSAlZFxuIiwgX19mdW5jX18sIGhwX3Nsb3QpOwogCiAJLyogQ2hhbmdlIHN0YXR1cyB0byBzaHV0ZG93biAqLwogCWlmIChwX3Nsb3QtPmlzX2FfYm9hcmQpCkBAIC0zNzQsMTMgKzM4MCwxNCBAQAogCS8qIHR1cm4gb2ZmIHNsb3QsIHR1cm4gb24gQW1iZXIgTEVELCB0dXJuIG9mZiBHcmVlbiBMRUQgKi8KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2xvdF9kaXNhYmxlKHBfc2xvdCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRGlzYWJsZSBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IElzc3VlIG9mIFNsb3QgRGlzYWJsZSBjb21tYW5kIGZhaWxlZFxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiByYzsKIAl9CiAKIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMocF9zbG90LCAwKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogSXNzdWUgb2YgU2V0IEF0dGVudGlvbiBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiSXNzdWUgb2YgU2V0IEF0dGVudGlvbiBjb21tYW5kIGZhaWxlZFxuIik7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTQzOSw3ICs0NDYsOCBAQAogCiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKSB7Ci0JCWVycigiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIocF9zbG90LT5jdHJsLCAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWluZm8tPnBfc2xvdCA9IHBfc2xvdDsKQEAgLTQ4NiwxOCArNDk0LDE5IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfYnV0dG9uX3ByZXNzX2V2ZW50KHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJdTggZ2V0c3RhdHVzOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCiAJc3dpdGNoIChwX3Nsb3QtPnN0YXRlKSB7CiAJY2FzZSBTVEFUSUNfU1RBVEU6CiAJCXBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAoZ2V0c3RhdHVzKSB7CiAJCQlwX3Nsb3QtPnN0YXRlID0gQkxJTktJTkdPRkZfU1RBVEU7Ci0JCQlpbmZvKCJQQ0kgc2xvdCAjJXMgLSBwb3dlcmluZyBvZmYgZHVlIHRvIGJ1dHRvbiAiCi0JCQkgICAgICJwcmVzcy5cbiIsIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwgIlBDSSBzbG90ICMlcyAtIHBvd2VyaW5nIG9mZiBkdWUgdG8gIgorCQkJCSAgImJ1dHRvbiBwcmVzcy5cbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJfSBlbHNlIHsKIAkJCXBfc2xvdC0+c3RhdGUgPSBCTElOS0lOR09OX1NUQVRFOwotCQkJaW5mbygiUENJIHNsb3QgIyVzIC0gcG93ZXJpbmcgb24gZHVlIHRvIGJ1dHRvbiAiCi0JCQkgICAgICJwcmVzcy5cbiIsIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwgIlBDSSBzbG90ICMlcyAtIHBvd2VyaW5nIG9uIGR1ZSB0byAiCisJCQkJICAiYnV0dG9uIHByZXNzLlxuIiwgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQl9CiAJCS8qIGJsaW5rIGdyZWVuIExFRCBhbmQgdHVybiBvZmYgYW1iZXIgKi8KIAkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfYmxpbmsocF9zbG90KTsKQEAgLTUxMiwxNiArNTIxLDE2IEBACiAJCSAqIHByZXNzIHRoZSBhdHRlbnRpb24gYWdhaW4gYmVmb3JlIHRoZSA1IHNlYy4gbGltaXQKIAkJICogZXhwaXJlcyB0byBjYW5jZWwgaG90LWFkZCBvciBob3QtcmVtb3ZlCiAJCSAqLwotCQlpbmZvKCJCdXR0b24gY2FuY2VsIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOwotCQlkYmcoIiVzOiBidXR0b24gY2FuY2VsXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfaW5mbyhjdHJsLCAiQnV0dG9uIGNhbmNlbCBvbiBTbG90KCVzKVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQljYW5jZWxfZGVsYXllZF93b3JrKCZwX3Nsb3QtPndvcmspOwogCQlpZiAocF9zbG90LT5zdGF0ZSA9PSBCTElOS0lOR09GRl9TVEFURSkKIAkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29uKHBfc2xvdCk7CiAJCWVsc2UKIAkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOwogCQlwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMCk7Ci0JCWluZm8oIlBDSSBzbG90ICMlcyAtIGFjdGlvbiBjYW5jZWxlZCBkdWUgdG8gYnV0dG9uIHByZXNzXG4iLAotCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiUENJIHNsb3QgIyVzIC0gYWN0aW9uIGNhbmNlbGVkIGR1ZSB0byAiCisJCQkgICJidXR0b24gcHJlc3NcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUk9GRl9TVEFURToKQEAgLTUzMSwxMSArNTQwLDEyIEBACiAJCSAqIHRoaXMgbWVhbnMgdGhhdCB0aGUgcHJldmlvdXMgYXR0ZW50aW9uIGJ1dHRvbiBhY3Rpb24KIAkJICogdG8gaG90LWFkZCBvciBob3QtcmVtb3ZlIGlzIHVuZGVyZ29pbmcKIAkJICovCi0JCWluZm8oIkJ1dHRvbiBpZ25vcmUgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiQnV0dG9uIGlnbm9yZSBvbiBTbG90KCVzKVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQl1cGRhdGVfc2xvdF9pbmZvKHBfc2xvdCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXdhcm4oIk5vdCBhIHZhbGlkIHN0YXRlXG4iKTsKKwkJY3RybF93YXJuKGN0cmwsICJOb3QgYSB2YWxpZCBzdGF0ZVxuIik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTU1MSw3ICs1NjEsNyBAQAogCQloYW5kbGVfYnV0dG9uX3ByZXNzX2V2ZW50KHBfc2xvdCk7CiAJCWJyZWFrOwogCWNhc2UgSU5UX1BPV0VSX0ZBVUxUOgotCQlkYmcoIiVzOiBwb3dlciBmYXVsdFxuIiwgX19mdW5jX18pOworCQljdHJsX2RiZyhwX3Nsb3QtPmN0cmwsICIlczogUG93ZXIgZmF1bHRcbiIsIF9fZnVuY19fKTsKIAkJcF9zbG90LT5ocGNfb3BzLT5zZXRfYXR0ZW50aW9uX3N0YXR1cyhwX3Nsb3QsIDEpOwogCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vZmYocF9zbG90KTsKIAkJYnJlYWs7CkBAIC01NjksMjIgKzU3OSwyNCBAQAogewogCXU4IGdldHN0YXR1cyA9IDA7CiAJaW50IHJjLCByZXR2YWwgPSAtRU5PREVWOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIChsYXRjaCBjbG9zZWQsIGNhcmQgcHJlc2VudCwgcG93ZXIgb2ZmKSAqLwogCW11dGV4X2xvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKHJjIHx8ICFnZXRzdGF0dXMpIHsKLQkJaW5mbygiTm8gYWRhcHRlciBvbiBzbG90KCVzKVxuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJObyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLCBzbG90X25hbWUocF9zbG90KSk7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChyYyB8fCBnZXRzdGF0dXMpIHsKLQkJaW5mbygiTGF0Y2ggb3BlbiBvbiBzbG90KCVzKVxuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJMYXRjaCBvcGVuIG9uIHNsb3QoJXMpXG4iLCBzbG90X25hbWUocF9zbG90KSk7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChyYyB8fCBnZXRzdGF0dXMpIHsKLQkJaW5mbygiQWxyZWFkeSBlbmFibGVkIG9uIHNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkFscmVhZHkgZW5hYmxlZCBvbiBzbG90KCVzKVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU5Myw3ICs2MDUsNyBAQAogCS8qIFdlIGhhdmUgdG8gc2F2ZSB0aGUgcHJlc2VuY2UgaW5mbyBmb3IgdGhlc2Ugc2xvdHMgKi8KIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYocF9zbG90LT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJihwX3Nsb3QtPnB3cl9zYXZlKSk7Ci0JZGJnKCIlczogcF9zbG90LT5wd3Jfc2F2ZSAleFxuIiwgX19mdW5jX18sIHBfc2xvdC0+cHdyX3NhdmUpOworCWN0cmxfZGJnKGN0cmwsICIlczogcF9zbG90LT5wd3Jfc2F2ZSAleFxuIiwgX19mdW5jX18sIHBfc2xvdC0+cHdyX3NhdmUpOwogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCiAJaWYoKChwX3Nsb3QtPmN0cmwtPnBjaV9kZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkgfHwKQEAgLTYyNCw2ICs2MzYsNyBAQAogewogCXU4IGdldHN0YXR1cyA9IDA7CiAJaW50IHJjLCByZXR2YWwgPSAtRU5PREVWOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCiAJaWYgKCFwX3Nsb3QtPmN0cmwpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNjMzLDE3ICs2NDYsMTggQEAKIAogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAlpZiAocmMgfHwgIWdldHN0YXR1cykgewotCQlpbmZvKCJObyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIk5vIGFkYXB0ZXIgb24gc2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZ290byBvdXQ7CiAJfQogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKHJjIHx8IGdldHN0YXR1cykgewotCQlpbmZvKCJMYXRjaCBvcGVuIG9uIHNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkxhdGNoIG9wZW4gb24gc2xvdCglcylcbiIsIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJZ290byBvdXQ7CiAJfQogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKHJjIHx8ICFnZXRzdGF0dXMpIHsKLQkJaW5mbygiQWxyZWFkeSBkaXNhYmxlZCBzbG90KCVzKVxuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJBbHJlYWR5IGRpc2FibGVkIG9uIHNsb3QoJXMpXG4iLAorCQkJICBzbG90X25hbWUocF9zbG90KSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNjU3LDYgKzY3MSw3IEBACiBpbnQgc2hwY2hwX3N5c2ZzX2VuYWJsZV9zbG90KHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAltdXRleF9sb2NrKCZwX3Nsb3QtPmxvY2spOwogCXN3aXRjaCAocF9zbG90LT5zdGF0ZSkgewpAQCAtNjcwLDE1ICs2ODUsMTcgQEAKIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUk9OX1NUQVRFOgotCQlpbmZvKCJTbG90ICVzIGlzIGFscmVhZHkgaW4gcG93ZXJpbmcgb24gc3RhdGVcbiIsCi0JCSAgICAgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJTbG90ICVzIGlzIGFscmVhZHkgaW4gcG93ZXJpbmcgb24gc3RhdGVcbiIsCisJCQkgIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJYnJlYWs7CiAJY2FzZSBCTElOS0lOR09GRl9TVEFURToKIAljYXNlIFBPV0VST0ZGX1NUQVRFOgotCQlpbmZvKCJBbHJlYWR5IGVuYWJsZWQgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJBbHJlYWR5IGVuYWJsZWQgb24gc2xvdCAlc1xuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIk5vdCBhIHZhbGlkIHN0YXRlIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfZXJyKGN0cmwsICJOb3QgYSB2YWxpZCBzdGF0ZSBvbiBzbG90ICVzXG4iLAorCQkJIHNsb3RfbmFtZShwX3Nsb3QpKTsKIAkJYnJlYWs7CiAJfQogCW11dGV4X3VubG9jaygmcF9zbG90LT5sb2NrKTsKQEAgLTY4OSw2ICs3MDYsNyBAQAogaW50IHNocGNocF9zeXNmc19kaXNhYmxlX3Nsb3Qoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCW11dGV4X2xvY2soJnBfc2xvdC0+bG9jayk7CiAJc3dpdGNoIChwX3Nsb3QtPnN0YXRlKSB7CkBAIC03MDIsMTUgKzcyMCwxNyBAQAogCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwogCQlicmVhazsKIAljYXNlIFBPV0VST0ZGX1NUQVRFOgotCQlpbmZvKCJTbG90ICVzIGlzIGFscmVhZHkgaW4gcG93ZXJpbmcgb2ZmIHN0YXRlXG4iLAotCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiU2xvdCAlcyBpcyBhbHJlYWR5IGluIHBvd2VyaW5nIG9mZiBzdGF0ZVxuIiwKKwkJCSAgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlicmVhazsKIAljYXNlIEJMSU5LSU5HT05fU1RBVEU6CiAJY2FzZSBQT1dFUk9OX1NUQVRFOgotCQlpbmZvKCJBbHJlYWR5IGRpc2FibGVkIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiQWxyZWFkeSBkaXNhYmxlZCBvbiBzbG90ICVzXG4iLAorCQkJICBzbG90X25hbWUocF9zbG90KSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiTm90IGEgdmFsaWQgc3RhdGUgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9lcnIoY3RybCwgIk5vdCBhIHZhbGlkIHN0YXRlIG9uIHNsb3QgJXNcbiIsCisJCQkgc2xvdF9uYW1lKHBfc2xvdCkpOwogCQlicmVhazsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwppbmRleCA3YTBiZmYzLi44NmRjMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwpAQCAtMzAwLDEwICszMDAsMTAgQEAKIAkJCQkJCSFpc19jdHJsX2J1c3koY3RybCksIHRpbWVvdXQpOwogCWlmICghcmMgJiYgaXNfY3RybF9idXN5KGN0cmwpKSB7CiAJCXJldHZhbCA9IC1FSU87Ci0JCWVycigiQ29tbWFuZCBub3QgY29tcGxldGVkIGluIDEwMDAgbXNlY1xuIik7CisJCWN0cmxfZXJyKGN0cmwsICJDb21tYW5kIG5vdCBjb21wbGV0ZWQgaW4gMTAwMCBtc2VjXG4iKTsKIAl9IGVsc2UgaWYgKHJjIDwgMCkgewogCQlyZXR2YWwgPSAtRUlOVFI7Ci0JCWluZm8oIkNvbW1hbmQgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsXG4iKTsKKwkJY3RybF9pbmZvKGN0cmwsICJDb21tYW5kIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbFxuIik7CiAJfQogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTMyMCwxNSArMzIwLDE0IEBACiAKIAlpZiAoIXNocGNfcG9sbF9jdHJsX2J1c3koY3RybCkpIHsKIAkJLyogQWZ0ZXIgMSBzZWMgYW5kIGFuZCB0aGUgY29udHJvbGxlciBpcyBzdGlsbCBidXN5ICovCi0JCWVycigiJXMgOiBDb250cm9sbGVyIGlzIHN0aWxsIGJ1c3kgYWZ0ZXIgMSBzZWMuXG4iLAotCQkgICAgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiQ29udHJvbGxlciBpcyBzdGlsbCBidXN5IGFmdGVyIDEgc2VjXG4iKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CiAKIAkrK3Rfc2xvdDsKIAl0ZW1wX3dvcmQgPSAgKHRfc2xvdCA8PCA4KSB8IChjbWQgJiAweEZGKTsKLQlkYmcoIiVzOiB0X3Nsb3QgJXggY21kICV4XG4iLCBfX2Z1bmNfXywgdF9zbG90LCBjbWQpOworCWN0cmxfZGJnKGN0cmwsICIlczogdF9zbG90ICV4IGNtZCAleFxuIiwgX19mdW5jX18sIHRfc2xvdCwgY21kKTsKIAogCS8qIFRvIG1ha2Ugc3VyZSB0aGUgQ29udHJvbGxlciBCdXN5IGJpdCBpcyAwIGJlZm9yZSB3ZSBzZW5kIG91dCB0aGUKIAkgKiBjb21tYW5kLgpAQCAtMzQ0LDggKzM0Myw5IEBACiAKIAljbWRfc3RhdHVzID0gaHBjX2NoZWNrX2NtZF9zdGF0dXMoc2xvdC0+Y3RybCk7CiAJaWYgKGNtZF9zdGF0dXMpIHsKLQkJZXJyKCIlczogRmFpbGVkIHRvIGlzc3VlZCBjb21tYW5kIDB4JXggKGVycm9yIGNvZGUgPSAlZClcbiIsCi0JCSAgICBfX2Z1bmNfXywgY21kLCBjbWRfc3RhdHVzKTsKKwkJY3RybF9lcnIoY3RybCwKKwkJCSAiRmFpbGVkIHRvIGlzc3VlZCBjb21tYW5kIDB4JXggKGVycm9yIGNvZGUgPSAlZClcbiIsCisJCQkgY21kLCBjbWRfc3RhdHVzKTsKIAkJcmV0dmFsID0gLUVJTzsKIAl9CiAgb3V0OgpAQCAtMzY0LDE1ICszNjQsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlyZXR2YWwgPSBTV0lUQ0hfT1BFTjsKLQkJZXJyKCIlczogU3dpdGNoIG9wZW5lZCFcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIlN3aXRjaCBvcGVuZWQhXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlyZXR2YWwgPSBJTlZBTElEX0NNRDsKLQkJZXJyKCIlczogSW52YWxpZCBIUEMgY29tbWFuZCFcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIkludmFsaWQgSFBDIGNvbW1hbmQhXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgogCQlyZXR2YWwgPSBJTlZBTElEX1NQRUVEX01PREU7Ci0JCWVycigiJXM6IEludmFsaWQgYnVzIHNwZWVkL21vZGUhXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICJJbnZhbGlkIGJ1cyBzcGVlZC9tb2RlIVxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IGNtZF9zdGF0dXM7CkBAIC00ODMsOCArNDgzLDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKCIlczogc2xvdF9yZWcgPSAleCwgcGNpeF9jYXAgPSAleCwgbTY2X2NhcCA9ICV4XG4iLAotCSAgICBfX2Z1bmNfXywgc2xvdF9yZWcsIHBjaXhfY2FwLCBtNjZfY2FwKTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IHNsb3RfcmVnID0gJXgsIHBjaXhfY2FwID0gJXgsIG02Nl9jYXAgPSAleFxuIiwKKwkJIF9fZnVuY19fLCBzbG90X3JlZywgcGNpeF9jYXAsIG02Nl9jYXApOwogCiAJc3dpdGNoIChwY2l4X2NhcCkgewogCWNhc2UgMHgwOgpAQCAtNTA5LDcgKzUwOSw3IEBACiAJCWJyZWFrOwogCX0KIAotCWRiZygiQWRhcHRlciBzcGVlZCA9ICVkXG4iLCAqdmFsdWUpOworCWN0cmxfZGJnKGN0cmwsICJBZGFwdGVyIHNwZWVkID0gJWRcbiIsICp2YWx1ZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNTI2LDcgKzUyNiw3IEBACiAJCXJldHZhbCA9IC0xOwogCX0KIAotCWRiZygiTW9kZSAxIEVDQyBjYXAgPSAlZFxuIiwgKm1vZGUpOworCWN0cmxfZGJnKGN0cmwsICJNb2RlIDEgRUNDIGNhcCA9ICVkXG4iLCAqbW9kZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjI5LDcgKzYyOSw3IEBACiAKIAlyZXR2YWwgPSBzaHBjX3dyaXRlX2NtZChzbG90LCBzbG90LT5ocF9zbG90LCBTRVRfU0xPVF9QV1IpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihzbG90LT5jdHJsLCAiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTY0Miw3ICs2NDIsNyBAQAogCXJldHZhbCA9IHNocGNfd3JpdGVfY21kKHNsb3QsIHNsb3QtPmhwX3Nsb3QsCiAJCQlTRVRfU0xPVF9FTkFCTEUgfCBTRVRfUFdSX0JMSU5LIHwgU0VUX0FUVE5fT0ZGKTsKIAlpZiAocmV0dmFsKQotCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoc2xvdC0+Y3RybCwgIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC02NTUsNyArNjU1LDcgQEAKIAlyZXR2YWwgPSBzaHBjX3dyaXRlX2NtZChzbG90LCBzbG90LT5ocF9zbG90LAogCQkJU0VUX1NMT1RfRElTQUJMRSB8IFNFVF9QV1JfT0ZGIHwgU0VUX0FUVE5fT04pOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihzbG90LT5jdHJsLCAiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTcxOSw3ICs3MTksNyBAQAogCiAJcmV0dmFsID0gc2hwY193cml0ZV9jbWQoc2xvdCwgMCwgY21kKTsKIAlpZiAocmV0dmFsKQotCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC03MzUsNyArNzM1LDcgQEAKIAlpZiAoIWludHJfbG9jKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlkYmcoIiVzOiBpbnRyX2xvYyA9ICV4XG4iLF9fZnVuY19fLCBpbnRyX2xvYyk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBpbnRyX2xvYyA9ICV4XG4iLCBfX2Z1bmNfXywgaW50cl9sb2MpOwogCiAJaWYoIXNocGNocF9wb2xsX21vZGUpIHsKIAkJLyoKQEAgLTc0OCw3ICs3NDgsNyBAQAogCQlzaHBjX3dyaXRlbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFLCBzZXJyX2ludCk7CiAKIAkJaW50cl9sb2MyID0gc2hwY19yZWFkbChjdHJsLCBJTlRSX0xPQyk7Ci0JCWRiZygiJXM6IGludHJfbG9jMiA9ICV4XG4iLF9fZnVuY19fLCBpbnRyX2xvYzIpOworCQljdHJsX2RiZyhjdHJsLCAiJXM6IGludHJfbG9jMiA9ICV4XG4iLCBfX2Z1bmNfXywgaW50cl9sb2MyKTsKIAl9CiAKIAlpZiAoaW50cl9sb2MgJiBDTURfSU5UUl9QRU5ESU5HKSB7CkBAIC03NzMsOCArNzczLDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCXNsb3RfcmVnID0gc2hwY19yZWFkbChjdHJsLCBTTE9UX1JFRyhocF9zbG90KSk7Ci0JCWRiZygiJXM6IFNsb3QgJXggd2l0aCBpbnRyLCBzbG90IHJlZ2lzdGVyID0gJXhcbiIsCi0JCSAgICBfX2Z1bmNfXywgaHBfc2xvdCwgc2xvdF9yZWcpOworCQljdHJsX2RiZyhjdHJsLCAiU2xvdCAleCB3aXRoIGludHIsIHNsb3QgcmVnaXN0ZXIgPSAleFxuIiwKKwkJCSBocF9zbG90LCBzbG90X3JlZyk7CiAKIAkJaWYgKHNsb3RfcmVnICYgTVJMX0NIQU5HRV9ERVRFQ1RFRCkKIAkJCXNocGNocF9oYW5kbGVfc3dpdGNoX2NoYW5nZShocF9zbG90LCBjdHJsKTsKQEAgLTg0Myw3ICs4NDMsNyBAQAogCX0KIAogCSp2YWx1ZSA9IGJ1c19zcGVlZDsKLQlkYmcoIk1heCBidXMgc3BlZWQgPSAlZFxuIiwgYnVzX3NwZWVkKTsKKwljdHJsX2RiZyhjdHJsLCAiTWF4IGJ1cyBzcGVlZCA9ICVkXG4iLCBidXNfc3BlZWQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTkxMSw3ICs5MTEsNyBAQAogCQlicmVhazsKIAl9CiAKLQlkYmcoIkN1cnJlbnQgYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7CisJY3RybF9kYmcoY3RybCwgIkN1cnJlbnQgYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtOTQ5LDYgKzk0OSw3IEBACiAJdTggaTsKIAogCWN0cmwtPnBjaV9kZXYgPSBwZGV2OyAgLyogcGNpX2RldiBvZiB0aGUgUDJQIGJyaWRnZSAqLworCWN0cmxfZGJnKGN0cmwsICJIb3RwbHVnIENvbnRyb2xsZXI6XG4iKTsKIAogCWlmICgocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EKSB8fCAocGRldi0+ZGV2aWNlID09CiAJCQkJUENJX0RFVklDRV9JRF9BTURfR09MQU1fNzQ1MCkpIHsKQEAgLTk1OCwzNCArOTU5LDMzIEBACiAJfSBlbHNlIHsKIAkJY3RybC0+Y2FwX29mZnNldCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9TSFBDKTsKIAkJaWYgKCFjdHJsLT5jYXBfb2Zmc2V0KSB7Ci0JCQllcnIoIiVzIDogY2FwX29mZnNldCA9PSAwXG4iLCBfX2Z1bmNfXyk7CisJCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IGZpbmQgUENJIGNhcGFiaWxpdHlcbiIpOwogCQkJZ290byBhYm9ydDsKIAkJfQotCQlkYmcoIiVzOiBjYXBfb2Zmc2V0ID0gJXhcbiIsIF9fZnVuY19fLCBjdHJsLT5jYXBfb2Zmc2V0KTsKKwkJY3RybF9kYmcoY3RybCwgIiBjYXBfb2Zmc2V0ID0gJXhcbiIsIGN0cmwtPmNhcF9vZmZzZXQpOwogCiAJCXJjID0gc2hwY19pbmRpcmVjdF9yZWFkKGN0cmwsIDAsICZzaHBjX2Jhc2Vfb2Zmc2V0KTsKIAkJaWYgKHJjKSB7Ci0JCQllcnIoIiVzOiBjYW5ub3QgcmVhZCBiYXNlX29mZnNldFxuIiwgX19mdW5jX18pOworCQkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCByZWFkIGJhc2Vfb2Zmc2V0XG4iKTsKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KIAogCQlyYyA9IHNocGNfaW5kaXJlY3RfcmVhZChjdHJsLCAzLCAmdGVtcGR3b3JkKTsKIAkJaWYgKHJjKSB7Ci0JCQllcnIoIiVzOiBjYW5ub3QgcmVhZCBzbG90IGNvbmZpZ1xuIiwgX19mdW5jX18pOworCQkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCByZWFkIHNsb3QgY29uZmlnXG4iKTsKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KIAkJbnVtX3Nsb3RzID0gdGVtcGR3b3JkICYgU0xPVF9OVU07Ci0JCWRiZygiJXM6IG51bV9zbG90cyAoaW5kaXJlY3QpICV4XG4iLCBfX2Z1bmNfXywgbnVtX3Nsb3RzKTsKKwkJY3RybF9kYmcoY3RybCwgIiBudW1fc2xvdHMgKGluZGlyZWN0KSAleFxuIiwgbnVtX3Nsb3RzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgOSArIG51bV9zbG90czsgaSsrKSB7CiAJCQlyYyA9IHNocGNfaW5kaXJlY3RfcmVhZChjdHJsLCBpLCAmdGVtcGR3b3JkKTsKIAkJCWlmIChyYykgewotCQkJCWVycigiJXM6IGNhbm5vdCByZWFkIGNyZWcgKGluZGV4ID0gJWQpXG4iLAotCQkJCSAgICBfX2Z1bmNfXywgaSk7CisJCQkJY3RybF9lcnIoY3RybCwKKwkJCQkJICJDYW5ub3QgcmVhZCBjcmVnIChpbmRleCA9ICVkKVxuIiwgaSk7CiAJCQkJZ290byBhYm9ydDsKIAkJCX0KLQkJCWRiZygiJXM6IG9mZnNldCAlZDogdmFsdWUgJXhcbiIsIF9fZnVuY19fLGksCi0JCQkJCXRlbXBkd29yZCk7CisJCQljdHJsX2RiZyhjdHJsLCAiIG9mZnNldCAlZDogdmFsdWUgJXhcbiIsIGksIHRlbXBkd29yZCk7CiAJCX0KIAogCQljdHJsLT5tbWlvX2Jhc2UgPQpAQCAtOTkzLDMwICs5OTMsMzEgQEAKIAkJY3RybC0+bW1pb19zaXplID0gMHgyNCArIDB4NCAqIG51bV9zbG90czsKIAl9CiAKLQlpbmZvKCJIUEMgdmVuZG9yX2lkICV4IGRldmljZV9pZCAleCBzc192aWQgJXggc3NfZGlkICV4XG4iLCBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwgcGRldi0+c3Vic3lzdGVtX3ZlbmRvciwKLQkJcGRldi0+c3Vic3lzdGVtX2RldmljZSk7CisJY3RybF9pbmZvKGN0cmwsICJIUEMgdmVuZG9yX2lkICV4IGRldmljZV9pZCAleCBzc192aWQgJXggc3NfZGlkICV4XG4iLAorCQkgIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWRcbiIpOwogCQlnb3RvIGFib3J0OwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGN0cmwtPm1taW9fYmFzZSwgY3RybC0+bW1pb19zaXplLCBNWV9OQU1FKSkgewotCQllcnIoIiVzOiBjYW5ub3QgcmVzZXJ2ZSBNTUlPIHJlZ2lvblxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IHJlc2VydmUgTU1JTyByZWdpb25cbiIpOwogCQlyYyA9IC0xOwogCQlnb3RvIGFib3J0OwogCX0KIAogCWN0cmwtPmNyZWcgPSBpb3JlbWFwKGN0cmwtPm1taW9fYmFzZSwgY3RybC0+bW1pb19zaXplKTsKIAlpZiAoIWN0cmwtPmNyZWcpIHsKLQkJZXJyKCIlczogY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwgX19mdW5jX18sCi0JCSAgICBjdHJsLT5tbWlvX3NpemUsIGN0cmwtPm1taW9fYmFzZSk7CisJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAorCQkJIGN0cmwtPm1taW9fc2l6ZSwgY3RybC0+bW1pb19iYXNlKTsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGN0cmwtPm1taW9fYmFzZSwgY3RybC0+bW1pb19zaXplKTsKIAkJcmMgPSAtMTsKIAkJZ290byBhYm9ydDsKIAl9Ci0JZGJnKCIlczogY3RybC0+Y3JlZyAlcFxuIiwgX19mdW5jX18sIGN0cmwtPmNyZWcpOworCWN0cmxfZGJnKGN0cmwsICJjdHJsLT5jcmVnICVwXG4iLCBjdHJsLT5jcmVnKTsKIAogCW11dGV4X2luaXQoJmN0cmwtPmNyaXRfc2VjdCk7CiAJbXV0ZXhfaW5pdCgmY3RybC0+Y21kX2xvY2spOwpAQCAtMTAzNSwyMSArMTAzNiwyMSBAQAogCiAJLyogTWFzayBHbG9iYWwgSW50ZXJydXB0IE1hc2sgJiBDb21tYW5kIENvbXBsZXRlIEludGVycnVwdCBNYXNrICovCiAJdGVtcGR3b3JkID0gc2hwY19yZWFkbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFKTsKLQlkYmcoIiVzOiBTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIF9fZnVuY19fLCB0ZW1wZHdvcmQpOworCWN0cmxfZGJnKGN0cmwsICJTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIHRlbXBkd29yZCk7CiAJdGVtcGR3b3JkIHw9IChHTE9CQUxfSU5UUl9NQVNLICB8IEdMT0JBTF9TRVJSX01BU0sgfAogCQkgICAgICBDT01NQU5EX0lOVFJfTUFTSyB8IEFSQklURVJfU0VSUl9NQVNLKTsKIAl0ZW1wZHdvcmQgJj0gflNFUlJfSU5UUl9SU1ZEWl9NQVNLOwogCXNocGNfd3JpdGVsKGN0cmwsIFNFUlJfSU5UUl9FTkFCTEUsIHRlbXBkd29yZCk7CiAJdGVtcGR3b3JkID0gc2hwY19yZWFkbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFKTsKLQlkYmcoIiVzOiBTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIF9fZnVuY19fLCB0ZW1wZHdvcmQpOworCWN0cmxfZGJnKGN0cmwsICJTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIHRlbXBkd29yZCk7CiAKIAkvKiBNYXNrIHRoZSBNUkwgc2Vuc29yIFNFUlIgTWFzayBvZiBpbmRpdmlkdWFsIHNsb3QgaW4KIAkgKiBTbG90IFNFUlItSU5UIE1hc2sgJiBjbGVhciBhbGwgdGhlIGV4aXN0aW5nIGV2ZW50IGlmIGFueQogCSAqLwogCWZvciAoaHBfc2xvdCA9IDA7IGhwX3Nsb3QgPCBjdHJsLT5udW1fc2xvdHM7IGhwX3Nsb3QrKykgewogCQlzbG90X3JlZyA9IHNocGNfcmVhZGwoY3RybCwgU0xPVF9SRUcoaHBfc2xvdCkpOwotCQlkYmcoIiVzOiBEZWZhdWx0IExvZ2ljYWwgU2xvdCBSZWdpc3RlciAlZCB2YWx1ZSAleFxuIiwgX19mdW5jX18sCi0JCQlocF9zbG90LCBzbG90X3JlZyk7CisJCWN0cmxfZGJnKGN0cmwsICJEZWZhdWx0IExvZ2ljYWwgU2xvdCBSZWdpc3RlciAlZCB2YWx1ZSAleFxuIiwKKwkJCSBocF9zbG90LCBzbG90X3JlZyk7CiAJCXNsb3RfcmVnIHw9IChQUlNOVF9DSEFOR0VfSU5UUl9NQVNLIHwgSVNPX1BGQVVMVF9JTlRSX01BU0sgfAogCQkJICAgICBCVVRUT05fUFJFU1NfSU5UUl9NQVNLIHwgTVJMX0NIQU5HRV9JTlRSX01BU0sgfAogCQkJICAgICBDT05fUEZBVUxUX0lOVFJfTUFTSyAgIHwgTVJMX0NIQU5HRV9TRVJSX01BU0sgfApAQCAtMTA2NiwyNCArMTA2NywyNCBAQAogCQkvKiBJbnN0YWxscyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAkJcmMgPSBwY2lfZW5hYmxlX21zaShwZGV2KTsKIAkJaWYgKHJjKSB7Ci0JCQlpbmZvKCJDYW4ndCBnZXQgbXNpIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iKTsKLQkJCWluZm8oIlVzZSBJTlR4IGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iKTsKKwkJCWN0cmxfaW5mbyhjdHJsLAorCQkJCSAgIkNhbid0IGdldCBtc2kgZm9yIHRoZSBob3RwbHVnIGNvbnRyb2xsZXJcbiIpOworCQkJY3RybF9pbmZvKGN0cmwsCisJCQkJICAiVXNlIElOVHggZm9yIHRoZSBob3RwbHVnIGNvbnRyb2xsZXJcbiIpOwogCQl9CiAKIAkJcmMgPSByZXF1ZXN0X2lycShjdHJsLT5wY2lfZGV2LT5pcnEsIHNocGNfaXNyLCBJUlFGX1NIQVJFRCwKIAkJCQkgTVlfTkFNRSwgKHZvaWQgKiljdHJsKTsKLQkJZGJnKCIlczogcmVxdWVzdF9pcnEgJWQgZm9yIGhwYyVkIChyZXR1cm5zICVkKVxuIiwKLQkJICAgIF9fZnVuY19fLCBjdHJsLT5wY2lfZGV2LT5pcnEsCisJCWN0cmxfZGJnKGN0cmwsICJyZXF1ZXN0X2lycSAlZCBmb3IgaHBjJWQgKHJldHVybnMgJWQpXG4iLAorCQkJIGN0cmwtPnBjaV9kZXYtPmlycSwKIAkJICAgIGF0b21pY19yZWFkKCZzaHBjaHBfbnVtX2NvbnRyb2xsZXJzKSwgcmMpOwogCQlpZiAocmMpIHsKLQkJCWVycigiQ2FuJ3QgZ2V0IGlycSAlZCBmb3IgdGhlIGhvdHBsdWcgY29udHJvbGxlclxuIiwKLQkJCSAgICBjdHJsLT5wY2lfZGV2LT5pcnEpOworCQkJY3RybF9lcnIoY3RybCwgIkNhbid0IGdldCBpcnEgJWQgZm9yIHRoZSBob3RwbHVnICIKKwkJCQkgImNvbnRyb2xsZXJcbiIsIGN0cmwtPnBjaV9kZXYtPmlycSk7CiAJCQlnb3RvIGFib3J0X2lvdW5tYXA7CiAJCX0KIAl9Ci0JZGJnKCIlczogSFBDIGF0IGI6ZDpmOmlycT0weCV4OiV4OiV4OiV4XG4iLCBfX2Z1bmNfXywKLQkJCXBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCi0JCQlQQ0lfRlVOQyhwZGV2LT5kZXZmbiksIHBkZXYtPmlycSk7CisJY3RybF9kYmcoY3RybCwgIkhQQyBhdCAlcyBpcnE9JXhcbiIsIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBjb250cm9sbGVyIHRvIGJlIGluaXRpYWxpemVkLApAQCAtMTEwMiw4ICsxMTAzLDggQEAKIAkgKi8KIAlmb3IgKGhwX3Nsb3QgPSAwOyBocF9zbG90IDwgY3RybC0+bnVtX3Nsb3RzOyBocF9zbG90KyspIHsKIAkJc2xvdF9yZWcgPSBzaHBjX3JlYWRsKGN0cmwsIFNMT1RfUkVHKGhwX3Nsb3QpKTsKLQkJZGJnKCIlczogRGVmYXVsdCBMb2dpY2FsIFNsb3QgUmVnaXN0ZXIgJWQgdmFsdWUgJXhcbiIsIF9fZnVuY19fLAotCQkJaHBfc2xvdCwgc2xvdF9yZWcpOworCQljdHJsX2RiZyhjdHJsLCAiRGVmYXVsdCBMb2dpY2FsIFNsb3QgUmVnaXN0ZXIgJWQgdmFsdWUgJXhcbiIsCisJCQkgaHBfc2xvdCwgc2xvdF9yZWcpOwogCQlzbG90X3JlZyAmPSB+KFBSU05UX0NIQU5HRV9JTlRSX01BU0sgfCBJU09fUEZBVUxUX0lOVFJfTUFTSyB8CiAJCQkgICAgICBCVVRUT05fUFJFU1NfSU5UUl9NQVNLIHwgTVJMX0NIQU5HRV9JTlRSX01BU0sgfAogCQkJICAgICAgQ09OX1BGQVVMVF9JTlRSX01BU0sgfCBTTE9UX1JFR19SU1ZEWl9NQVNLKTsKQEAgLTExMTYsNyArMTExNyw3IEBACiAJCQkgICAgICAgU0VSUl9JTlRSX1JTVkRaX01BU0spOwogCQlzaHBjX3dyaXRlbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFLCB0ZW1wZHdvcmQpOwogCQl0ZW1wZHdvcmQgPSBzaHBjX3JlYWRsKGN0cmwsIFNFUlJfSU5UUl9FTkFCTEUpOwotCQlkYmcoIiVzOiBTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIF9fZnVuY19fLCB0ZW1wZHdvcmQpOworCQljdHJsX2RiZyhjdHJsLCAiU0VSUl9JTlRSX0VOQUJMRSA9ICV4XG4iLCB0ZW1wZHdvcmQpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwppbmRleCAzZmM0ZWMwLi4xMzhmMTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwpAQCAtNDksOSArNDksNyBAQAogCS8qIHVzZSBkZWZhdWx0IHZhbHVlcyBpZiB3ZSBjYW4ndCBnZXQgdGhlbSBmcm9tIGZpcm13YXJlICovCiAJaWYgKGdldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShkZXYsICZocHApIHx8CiAJICAgICFocHAudDAgfHwgKGhwcC50MC0+cmV2aXNpb24gPiAxKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IENvdWxkIG5vdCBnZXQgaG90cGx1ZyBwYXJhbWV0ZXJzLiBVc2UgZGVmYXVsdHNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7CisJCXdhcm4oIkNvdWxkIG5vdCBnZXQgaG90cGx1ZyBwYXJhbWV0ZXJzLiBVc2UgZGVmYXVsdHNcbiIpOwogCQlocHAudDAgPSAmaHBwLnR5cGUwX2RhdGE7CiAJCWhwcC50MC0+cmV2aXNpb24gPSAwOwogCQlocHAudDAtPmNhY2hlX2xpbmVfc2l6ZSA9IDg7CkBAIC0xMDEsMTggKzk5LDIwIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKIAlpbnQgbnVtLCBmbjsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCWRldiA9IHBjaV9nZXRfc2xvdChwYXJlbnQsIFBDSV9ERVZGTihwX3Nsb3QtPmRldmljZSwgMCkpOwogCWlmIChkZXYpIHsKLQkJZXJyKCJEZXZpY2UgJXMgYWxyZWFkeSBleGlzdHMgYXQgJXg6JXgsIGNhbm5vdCBob3QtYWRkXG4iLAotCQkJCXBjaV9uYW1lKGRldiksIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCWN0cmxfZXJyKGN0cmwsICJEZXZpY2UgJXMgYWxyZWFkeSBleGlzdHMgIgorCQkJICJhdCAlMDR4OiUwMng6JTAyeCwgY2Fubm90IGhvdC1hZGRcbiIsIHBjaV9uYW1lKGRldiksCisJCQkgcGNpX2RvbWFpbl9ucihwYXJlbnQpLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCQlwY2lfZGV2X3B1dChkZXYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAludW0gPSBwY2lfc2Nhbl9zbG90KHBhcmVudCwgUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCAwKSk7CiAJaWYgKG51bSA9PSAwKSB7Ci0JCWVycigiTm8gbmV3IGRldmljZSBmb3VuZFxuIik7CisJCWN0cmxfZXJyKGN0cmwsICJObyBuZXcgZGV2aWNlIGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMjEsOCArMTIxLDggQEAKIAkJaWYgKCFkZXYpCiAJCQljb250aW51ZTsKIAkJaWYgKChkZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7Ci0JCQllcnIoIkNhbm5vdCBob3QtYWRkIGRpc3BsYXkgZGV2aWNlICVzXG4iLAotCQkJCQlwY2lfbmFtZShkZXYpKTsKKwkJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgaG90LWFkZCBkaXNwbGF5IGRldmljZSAlc1xuIiwKKwkJCQkgcGNpX25hbWUoZGV2KSk7CiAJCQlwY2lfZGV2X3B1dChkZXYpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEzOCwxNCArMTM4LDE1IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGJ1c25yID49IGVuZCkgewotCQkJCWVycigiTm8gZnJlZSBidXMgZm9yIGhvdC1hZGRlZCBicmlkZ2VcbiIpOworCQkJCWN0cmxfZXJyKGN0cmwsCisJCQkJCSAiTm8gZnJlZSBidXMgZm9yIGhvdC1hZGRlZCBicmlkZ2VcbiIpOwogCQkJCXBjaV9kZXZfcHV0KGRldik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhwYXJlbnQsIGRldiwgYnVzbnIpOwogCQkJaWYgKCFjaGlsZCkgewotCQkJCWVycigiQ2Fubm90IGFkZCBuZXcgYnVzIGZvciAlc1xuIiwKLQkJCQkJCXBjaV9uYW1lKGRldikpOworCQkJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgYWRkIG5ldyBidXMgZm9yICVzXG4iLAorCQkJCQkgcGNpX25hbWUoZGV2KSk7CiAJCQkJcGNpX2Rldl9wdXQoZGV2KTsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTE2OCw4ICsxNjksMTAgQEAKIAlpbnQgajsKIAl1OCBiY3RsID0gMDsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAotCWRiZygiJXM6IGJ1cy9kZXYgPSAleC8leFxuIiwgX19mdW5jX18sIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBkb21haW46YnVzOmRldiA9ICUwNHg6JTAyeDolMDJ4XG4iLAorCQkgX19mdW5jX18sIHBjaV9kb21haW5fbnIocGFyZW50KSwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAogCWZvciAoaj0wOyBqPDggOyBqKyspIHsKIAkJc3RydWN0IHBjaV9kZXYqIHRlbXAgPSBwY2lfZ2V0X3Nsb3QocGFyZW50LApAQCAtMTc3LDE2ICsxODAsMTcgQEAKIAkJaWYgKCF0ZW1wKQogCQkJY29udGludWU7CiAJCWlmICgodGVtcC0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKLQkJCWVycigiQ2Fubm90IHJlbW92ZSBkaXNwbGF5IGRldmljZSAlc1xuIiwKLQkJCQkJcGNpX25hbWUodGVtcCkpOworCQkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJIHBjaV9uYW1lKHRlbXApKTsKIAkJCXBjaV9kZXZfcHV0KHRlbXApOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHRlbXAtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHRlbXAsIFBDSV9CUklER0VfQ09OVFJPTCwgJmJjdGwpOwogCQkJaWYgKGJjdGwgJiBQQ0lfQlJJREdFX0NUTF9WR0EpIHsKLQkJCQllcnIoIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCi0JCQkJCQlwY2lfbmFtZSh0ZW1wKSk7CisJCQkJY3RybF9lcnIoY3RybCwKKwkJCQkJICJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAorCQkJCQkgcGNpX25hbWUodGVtcCkpOwogCQkJCXBjaV9kZXZfcHV0KHRlbXApOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaHRpcnEuYyBiL2RyaXZlcnMvcGNpL2h0aXJxLmMKaW5kZXggMjc5Yzk0MC4uYmY3ZDZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaHRpcnEuYworKysgYi9kcml2ZXJzL3BjaS9odGlycS5jCkBAIC0xMjYsNyArMTI2LDggQEAKIAljZmctPm1zZy5hZGRyZXNzX2hpID0gMHhmZmZmZmZmZjsKIAogCWlycSA9IGNyZWF0ZV9pcnEoKTsKLQlpZiAoaXJxIDwgMCkgeworCisJaWYgKGlycSA8PSAwKSB7CiAJCWtmcmVlKGNmZyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggZmM1ZjJkYi4uYTI2OTI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKiBBdXRob3I6IEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KICAqIEF1dGhvcjogU2hhb2h1YSBMaSA8c2hhb2h1YS5saUBpbnRlbC5jb20+CiAgKiBBdXRob3I6IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CisgKiBBdXRob3I6IEZlbmdodWEgWXUgPGZlbmdodWEueXVAaW50ZWwuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zNSwxMSArMzYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvdmEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPiAvKiBmb3JjZV9pb21tdSBpbiB0aGlzIGhlYWRlciBpbiB4ODYtNjQqLwogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKKyNkZWZpbmUgUk9PVF9TSVpFCQlWVERfUEFHRV9TSVpFCisjZGVmaW5lIENPTlRFWFRfU0laRQkJVlREX1BBR0VfU0laRQorCiAjZGVmaW5lIElTX0dGWF9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkKICNkZWZpbmUgSVNfSVNBX0RFVklDRShwZGV2KSAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfSVNBKQogCkBAIC0xOTksNyArMjAyLDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQlfX2lvbW11X2ZsdXNoX2NhY2hlKGlvbW11LCAodm9pZCAqKWNvbnRleHQsIFBBR0VfU0laRV80Syk7CisJCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsICh2b2lkICopY29udGV4dCwgQ09OVEVYVF9TSVpFKTsKIAkJcGh5X2FkZHIgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKiljb250ZXh0KTsKIAkJc2V0X3Jvb3RfdmFsdWUocm9vdCwgcGh5X2FkZHIpOwogCQlzZXRfcm9vdF9wcmVzZW50KHJvb3QpOwpAQCAtMzQ1LDcgKzM0OCw3IEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCQlfX2lvbW11X2ZsdXNoX2NhY2hlKGRvbWFpbi0+aW9tbXUsIHRtcF9wYWdlLAotCQkJCQlQQUdFX1NJWkVfNEspOworCQkJCQlQQUdFX1NJWkUpOwogCQkJZG1hX3NldF9wdGVfYWRkcigqcHRlLCB2aXJ0X3RvX3BoeXModG1wX3BhZ2UpKTsKIAkJCS8qCiAJCQkgKiBoaWdoIGxldmVsIHRhYmxlIGFsd2F5cyBzZXRzIHIvdywgbGFzdCBsZXZlbCBwYWdlCkBAIC00MDgsMTMgKzQxMSwxMyBAQAogCXN0YXJ0ICY9ICgoKHU2NCkxKSA8PCBhZGRyX3dpZHRoKSAtIDE7CiAJZW5kICY9ICgoKHU2NCkxKSA8PCBhZGRyX3dpZHRoKSAtIDE7CiAJLyogaW4gY2FzZSBpdCdzIHBhcnRpYWwgcGFnZSAqLwotCXN0YXJ0ID0gUEFHRV9BTElHTl80SyhzdGFydCk7Ci0JZW5kICY9IFBBR0VfTUFTS180SzsKKwlzdGFydCA9IFBBR0VfQUxJR04oc3RhcnQpOworCWVuZCAmPSBQQUdFX01BU0s7CiAKIAkvKiB3ZSBkb24ndCBuZWVkIGxvY2sgaGVyZSwgbm9ib2R5IGVsc2UgdG91Y2hlcyB0aGUgaW92YSByYW5nZSAqLwogCXdoaWxlIChzdGFydCA8IGVuZCkgewogCQlkbWFfcHRlX2NsZWFyX29uZShkb21haW4sIHN0YXJ0KTsKLQkJc3RhcnQgKz0gUEFHRV9TSVpFXzRLOworCQlzdGFydCArPSBWVERfUEFHRV9TSVpFOwogCX0KIH0KIApAQCAtNDY4LDcgKzQ3MSw3IEBACiAJaWYgKCFyb290KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsIHJvb3QsIFBBR0VfU0laRV80Syk7CisJX19pb21tdV9mbHVzaF9jYWNoZShpb21tdSwgcm9vdCwgUk9PVF9TSVpFKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogCWlvbW11LT5yb290X2VudHJ5ID0gcm9vdDsKQEAgLTU2MywzMSArNTY2LDEwIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CiAKLQkvKiBmbHVzaCBjb250ZXh0IGVudHJ5IHdpbGwgaW1wbGljdGx5IGZsdXNoIHdyaXRlIGJ1ZmZlciAqLworCS8qIGZsdXNoIGNvbnRleHQgZW50cnkgd2lsbCBpbXBsaWNpdGx5IGZsdXNoIHdyaXRlIGJ1ZmZlciAqLwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBpb21tdV9mbHVzaF9jb250ZXh0X2dsb2JhbChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LAotCWludCBub25fcHJlc2VudF9lbnRyeV9mbHVzaCkKLXsKLQlyZXR1cm4gX19pb21tdV9mbHVzaF9jb250ZXh0KGlvbW11LCAwLCAwLCAwLCBETUFfQ0NNRF9HTE9CQUxfSU5WTCwKLQkJbm9uX3ByZXNlbnRfZW50cnlfZmx1c2gpOwotfQotCi1zdGF0aWMgaW50IGlubGluZSBpb21tdV9mbHVzaF9jb250ZXh0X2RvbWFpbihzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLAotCWludCBub25fcHJlc2VudF9lbnRyeV9mbHVzaCkKLXsKLQlyZXR1cm4gX19pb21tdV9mbHVzaF9jb250ZXh0KGlvbW11LCBkaWQsIDAsIDAsIERNQV9DQ01EX0RPTUFJTl9JTlZMLAotCQlub25fcHJlc2VudF9lbnRyeV9mbHVzaCk7Ci19Ci0KLXN0YXRpYyBpbnQgaW5saW5lIGlvbW11X2ZsdXNoX2NvbnRleHRfZGV2aWNlKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsCi0JdTE2IGRpZCwgdTE2IHNvdXJjZV9pZCwgdTggZnVuY3Rpb25fbWFzaywgaW50IG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKQotewotCXJldHVybiBfX2lvbW11X2ZsdXNoX2NvbnRleHQoaW9tbXUsIGRpZCwgc291cmNlX2lkLCBmdW5jdGlvbl9tYXNrLAotCQlETUFfQ0NNRF9ERVZJQ0VfSU5WTCwgbm9uX3ByZXNlbnRfZW50cnlfZmx1c2gpOwotfQotCiAvKiByZXR1cm4gdmFsdWUgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgYSB3cml0ZSBidWZmZXIgZmx1c2ggKi8KIHN0YXRpYyBpbnQgX19pb21tdV9mbHVzaF9pb3RsYihzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLAogCXU2NCBhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZV9vcmRlciwgdTY0IHR5cGUsCkBAIC02NTUsMzcgKzYzNywyNSBAQAogCQlwcmludGsoS0VSTl9FUlIiSU9NTVU6IGZsdXNoIElPVExCIGZhaWxlZFxuIik7CiAJaWYgKERNQV9UTEJfSUFJRyh2YWwpICE9IERNQV9UTEJfSUlSRyh0eXBlKSkKIAkJcHJfZGVidWcoIklPTU1VOiB0bGIgZmx1c2ggcmVxdWVzdCAlTHgsIGFjdHVhbCAlTHhcbiIsCi0JCQlETUFfVExCX0lJUkcodHlwZSksIERNQV9UTEJfSUFJRyh2YWwpKTsKLQkvKiBmbHVzaCBjb250ZXh0IGVudHJ5IHdpbGwgaW1wbGljdGx5IGZsdXNoIHdyaXRlIGJ1ZmZlciAqLworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylETUFfVExCX0lJUkcodHlwZSksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKURNQV9UTEJfSUFJRyh2YWwpKTsKKwkvKiBmbHVzaCBpb3RsYiBlbnRyeSB3aWxsIGltcGxpY2l0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIGlvbW11X2ZsdXNoX2lvdGxiX2dsb2JhbChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LAotCWludCBub25fcHJlc2VudF9lbnRyeV9mbHVzaCkKLXsKLQlyZXR1cm4gX19pb21tdV9mbHVzaF9pb3RsYihpb21tdSwgMCwgMCwgMCwgRE1BX1RMQl9HTE9CQUxfRkxVU0gsCi0JCW5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKTsKLX0KLQotc3RhdGljIGludCBpbmxpbmUgaW9tbXVfZmx1c2hfaW90bGJfZHNpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBkaWQsCi0JaW50IG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKQotewotCXJldHVybiBfX2lvbW11X2ZsdXNoX2lvdGxiKGlvbW11LCBkaWQsIDAsIDAsIERNQV9UTEJfRFNJX0ZMVVNILAotCQlub25fcHJlc2VudF9lbnRyeV9mbHVzaCk7Ci19Ci0KIHN0YXRpYyBpbnQgaW9tbXVfZmx1c2hfaW90bGJfcHNpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBkaWQsCiAJdTY0IGFkZHIsIHVuc2lnbmVkIGludCBwYWdlcywgaW50IG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKQogewogCXVuc2lnbmVkIGludCBtYXNrOwogCi0JQlVHX09OKGFkZHIgJiAoflBBR0VfTUFTS180SykpOworCUJVR19PTihhZGRyICYgKH5WVERfUEFHRV9NQVNLKSk7CiAJQlVHX09OKHBhZ2VzID09IDApOwogCiAJLyogRmFsbGJhY2sgdG8gZG9tYWluIHNlbGVjdGl2ZSBmbHVzaCBpZiBubyBQU0kgc3VwcG9ydCAqLwogCWlmICghY2FwX3Bnc2VsX2ludihpb21tdS0+Y2FwKSkKLQkJcmV0dXJuIGlvbW11X2ZsdXNoX2lvdGxiX2RzaShpb21tdSwgZGlkLAotCQkJbm9uX3ByZXNlbnRfZW50cnlfZmx1c2gpOworCQlyZXR1cm4gaW9tbXUtPmZsdXNoLmZsdXNoX2lvdGxiKGlvbW11LCBkaWQsIDAsIDAsCisJCQkJCQlETUFfVExCX0RTSV9GTFVTSCwKKwkJCQkJCW5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKTsKIAogCS8qCiAJICogUFNJIHJlcXVpcmVzIHBhZ2Ugc2l6ZSB0byBiZSAyIF4geCwgYW5kIHRoZSBiYXNlIGFkZHJlc3MgaXMgbmF0dXJhbGx5CkBAIC02OTQsMTEgKzY2NCwxMiBAQAogCW1hc2sgPSBpbG9nMihfX3JvdW5kdXBfcG93X29mX3R3byhwYWdlcykpOwogCS8qIEZhbGxiYWNrIHRvIGRvbWFpbiBzZWxlY3RpdmUgZmx1c2ggaWYgc2l6ZSBpcyB0b28gYmlnICovCiAJaWYgKG1hc2sgPiBjYXBfbWF4X2FtYXNrX3ZhbChpb21tdS0+Y2FwKSkKLQkJcmV0dXJuIGlvbW11X2ZsdXNoX2lvdGxiX2RzaShpb21tdSwgZGlkLAotCQkJbm9uX3ByZXNlbnRfZW50cnlfZmx1c2gpOworCQlyZXR1cm4gaW9tbXUtPmZsdXNoLmZsdXNoX2lvdGxiKGlvbW11LCBkaWQsIDAsIDAsCisJCQlETUFfVExCX0RTSV9GTFVTSCwgbm9uX3ByZXNlbnRfZW50cnlfZmx1c2gpOwogCi0JcmV0dXJuIF9faW9tbXVfZmx1c2hfaW90bGIoaW9tbXUsIGRpZCwgYWRkciwgbWFzaywKLQkJRE1BX1RMQl9QU0lfRkxVU0gsIG5vbl9wcmVzZW50X2VudHJ5X2ZsdXNoKTsKKwlyZXR1cm4gaW9tbXUtPmZsdXNoLmZsdXNoX2lvdGxiKGlvbW11LCBkaWQsIGFkZHIsIG1hc2ssCisJCQkJCURNQV9UTEJfUFNJX0ZMVVNILAorCQkJCQlub25fcHJlc2VudF9lbnRyeV9mbHVzaCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlvbW11X2Rpc2FibGVfcHJvdGVjdF9tZW1fcmVnaW9ucyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KQpAQCAtODMxLDcgKzgwMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaW9tbXVfcGFnZV9mYXVsdF9kb19vbmUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IHR5cGUsCi0JCXU4IGZhdWx0X3JlYXNvbiwgdTE2IHNvdXJjZV9pZCwgdTY0IGFkZHIpCisJCXU4IGZhdWx0X3JlYXNvbiwgdTE2IHNvdXJjZV9pZCwgdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCiB7CiAJY29uc3QgY2hhciAqcmVhc29uOwogCkBAIC0xMDg0LDkgKzEwNTUsOSBAQAogCQkJaWYgKCFyLT5mbGFncyB8fCAhKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKQogCQkJCWNvbnRpbnVlOwogCQkJYWRkciA9IHItPnN0YXJ0OwotCQkJYWRkciAmPSBQQUdFX01BU0tfNEs7CisJCQlhZGRyICY9IFBBR0VfTUFTSzsKIAkJCXNpemUgPSByLT5lbmQgLSBhZGRyOwotCQkJc2l6ZSA9IFBBR0VfQUxJR05fNEsoc2l6ZSk7CisJCQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIAkJCWlvdmEgPSByZXNlcnZlX2lvdmEoJnJlc2VydmVkX2lvdmFfbGlzdCwgSU9WQV9QRk4oYWRkciksCiAJCQkJSU9WQV9QRk4oc2l6ZSArIGFkZHIpIC0gMSk7CiAJCQlpZiAoIWlvdmEpCkBAIC0xMTQ4LDcgKzExMTksNyBAQAogCWRvbWFpbi0+cGdkID0gKHN0cnVjdCBkbWFfcHRlICopYWxsb2NfcGd0YWJsZV9wYWdlKCk7CiAJaWYgKCFkb21haW4tPnBnZCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JX19pb21tdV9mbHVzaF9jYWNoZShpb21tdSwgZG9tYWluLT5wZ2QsIFBBR0VfU0laRV80Syk7CisJX19pb21tdV9mbHVzaF9jYWNoZShpb21tdSwgZG9tYWluLT5wZ2QsIFBBR0VfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjQsNyArMTEzNSw3IEBACiAJLyogZGVzdHJveSBpb3ZhcyAqLwogCXB1dF9pb3ZhX2RvbWFpbigmZG9tYWluLT5pb3ZhZCk7CiAJZW5kID0gRE9NQUlOX01BWF9BRERSKGRvbWFpbi0+Z2F3KTsKLQllbmQgPSBlbmQgJiAoflBBR0VfTUFTS180Syk7CisJZW5kID0gZW5kICYgKH5QQUdFX01BU0spOwogCiAJLyogY2xlYXIgcHRlcyAqLwogCWRtYV9wdGVfY2xlYXJfcmFuZ2UoZG9tYWluLCAwLCBlbmQpOwpAQCAtMTIwNCwxMSArMTE3NSwxMyBAQAogCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsIGNvbnRleHQsIHNpemVvZigqY29udGV4dCkpOwogCiAJLyogaXQncyBhIG5vbi1wcmVzZW50IHRvIHByZXNlbnQgbWFwcGluZyAqLwotCWlmIChpb21tdV9mbHVzaF9jb250ZXh0X2RldmljZShpb21tdSwgZG9tYWluLT5pZCwKLQkJCSgoKHUxNilidXMpIDw8IDgpIHwgZGV2Zm4sIERNQV9DQ01EX01BU0tfTk9CSVQsIDEpKQorCWlmIChpb21tdS0+Zmx1c2guZmx1c2hfY29udGV4dChpb21tdSwgZG9tYWluLT5pZCwKKwkJKCgodTE2KWJ1cykgPDwgOCkgfCBkZXZmbiwgRE1BX0NDTURfTUFTS19OT0JJVCwKKwkJRE1BX0NDTURfREVWSUNFX0lOVkwsIDEpKQogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwogCWVsc2UKLQkJaW9tbXVfZmx1c2hfaW90bGJfZHNpKGlvbW11LCAwLCAwKTsKKwkJaW9tbXUtPmZsdXNoLmZsdXNoX2lvdGxiKGlvbW11LCAwLCAwLCAwLCBETUFfVExCX0RTSV9GTFVTSCwgMCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtMTI4MywyMiArMTI1NiwyNSBAQAogCXU2NCBzdGFydF9wZm4sIGVuZF9wZm47CiAJc3RydWN0IGRtYV9wdGUgKnB0ZTsKIAlpbnQgaW5kZXg7CisJaW50IGFkZHJfd2lkdGggPSBhZ2F3X3RvX3dpZHRoKGRvbWFpbi0+YWdhdyk7CisKKwlocGEgJj0gKCgodTY0KTEpIDw8IGFkZHJfd2lkdGgpIC0gMTsKIAogCWlmICgocHJvdCAmIChETUFfUFRFX1JFQUR8RE1BX1BURV9XUklURSkpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWlvdmEgJj0gUEFHRV9NQVNLXzRLOwotCXN0YXJ0X3BmbiA9ICgodTY0KWhwYSkgPj4gUEFHRV9TSElGVF80SzsKLQllbmRfcGZuID0gKFBBR0VfQUxJR05fNEsoKCh1NjQpaHBhKSArIHNpemUpKSA+PiBQQUdFX1NISUZUXzRLOworCWlvdmEgJj0gUEFHRV9NQVNLOworCXN0YXJ0X3BmbiA9ICgodTY0KWhwYSkgPj4gVlREX1BBR0VfU0hJRlQ7CisJZW5kX3BmbiA9IChWVERfUEFHRV9BTElHTigoKHU2NClocGEpICsgc2l6ZSkpID4+IFZURF9QQUdFX1NISUZUOwogCWluZGV4ID0gMDsKIAl3aGlsZSAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlwdGUgPSBhZGRyX3RvX2RtYV9wdGUoZG9tYWluLCBpb3ZhICsgUEFHRV9TSVpFXzRLICogaW5kZXgpOworCQlwdGUgPSBhZGRyX3RvX2RtYV9wdGUoZG9tYWluLCBpb3ZhICsgVlREX1BBR0VfU0laRSAqIGluZGV4KTsKIAkJaWYgKCFwdGUpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJLyogV2UgZG9uJ3QgbmVlZCBsb2NrIGhlcmUsIG5vYm9keSBlbHNlCiAJCSAqIHRvdWNoZXMgdGhlIGlvdmEgcmFuZ2UKIAkJICovCiAJCUJVR19PTihkbWFfcHRlX2FkZHIoKnB0ZSkpOwotCQlkbWFfc2V0X3B0ZV9hZGRyKCpwdGUsIHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUXzRLKTsKKwkJZG1hX3NldF9wdGVfYWRkcigqcHRlLCBzdGFydF9wZm4gPDwgVlREX1BBR0VfU0hJRlQpOwogCQlkbWFfc2V0X3B0ZV9wcm90KCpwdGUsIHByb3QpOwogCQlfX2lvbW11X2ZsdXNoX2NhY2hlKGRvbWFpbi0+aW9tbXUsIHB0ZSwgc2l6ZW9mKCpwdGUpKTsKIAkJc3RhcnRfcGZuKys7CkBAIC0xMzEwLDggKzEyODYsMTAgQEAKIHN0YXRpYyB2b2lkIGRldGFjaF9kb21haW5fZm9yX2RldihzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgdTggYnVzLCB1OCBkZXZmbikKIHsKIAljbGVhcl9jb250ZXh0X3RhYmxlKGRvbWFpbi0+aW9tbXUsIGJ1cywgZGV2Zm4pOwotCWlvbW11X2ZsdXNoX2NvbnRleHRfZ2xvYmFsKGRvbWFpbi0+aW9tbXUsIDApOwotCWlvbW11X2ZsdXNoX2lvdGxiX2dsb2JhbChkb21haW4tPmlvbW11LCAwKTsKKwlkb21haW4tPmlvbW11LT5mbHVzaC5mbHVzaF9jb250ZXh0KGRvbWFpbi0+aW9tbXUsIDAsIDAsIDAsCisJCQkJCSAgIERNQV9DQ01EX0dMT0JBTF9JTlZMLCAwKTsKKwlkb21haW4tPmlvbW11LT5mbHVzaC5mbHVzaF9pb3RsYihkb21haW4tPmlvbW11LCAwLCAwLCAwLAorCQkJCQkgRE1BX1RMQl9HTE9CQUxfRkxVU0gsIDApOwogfQogCiBzdGF0aWMgdm9pZCBkb21haW5fcmVtb3ZlX2Rldl9pbmZvKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKQpAQCAtMTQ3NCwxMSArMTQ1MiwxMyBAQAogCXJldHVybiBmaW5kX2RvbWFpbihwZGV2KTsKIH0KIAotc3RhdGljIGludCBpb21tdV9wcmVwYXJlX2lkZW50aXR5X21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTY0IHN0YXJ0LCB1NjQgZW5kKQorc3RhdGljIGludCBpb21tdV9wcmVwYXJlX2lkZW50aXR5X21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbjsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdTY0IGJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIGJhc2U7CiAJaW50IHJldDsKIAogCXByaW50ayhLRVJOX0lORk8KQEAgLTE0OTAsOSArMTQ3MCw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogVGhlIGFkZHJlc3MgbWlnaHQgbm90IGJlIGFsaWduZWQgKi8KLQliYXNlID0gc3RhcnQgJiBQQUdFX01BU0tfNEs7CisJYmFzZSA9IHN0YXJ0ICYgUEFHRV9NQVNLOwogCXNpemUgPSBlbmQgLSBiYXNlOwotCXNpemUgPSBQQUdFX0FMSUdOXzRLKHNpemUpOworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCWlmICghcmVzZXJ2ZV9pb3ZhKCZkb21haW4tPmlvdmFkLCBJT1ZBX1BGTihiYXNlKSwKIAkJCUlPVkFfUEZOKGJhc2UgKyBzaXplKSAtIDEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IHJlc2VydmUgaW92YSBmYWlsZWRcbiIpOwpAQCAtMTY2Miw2ICsxNjQyLDI4IEBACiAJCX0KIAl9CiAKKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlpZiAoZHJoZC0+aWdub3JlZCkKKwkJCWNvbnRpbnVlOworCisJCWlvbW11ID0gZHJoZC0+aW9tbXU7CisJCWlmIChkbWFyX2VuYWJsZV9xaShpb21tdSkpIHsKKwkJCS8qCisJCQkgKiBRdWV1ZWQgSW52YWxpZGF0ZSBub3QgZW5hYmxlZCwgdXNlIFJlZ2lzdGVyIEJhc2VkCisJCQkgKiBJbnZhbGlkYXRlCisJCQkgKi8KKwkJCWlvbW11LT5mbHVzaC5mbHVzaF9jb250ZXh0ID0gX19pb21tdV9mbHVzaF9jb250ZXh0OworCQkJaW9tbXUtPmZsdXNoLmZsdXNoX2lvdGxiID0gX19pb21tdV9mbHVzaF9pb3RsYjsKKwkJCXByaW50ayhLRVJOX0lORk8gIklPTU1VIDB4JUx4OiB1c2luZyBSZWdpc3RlciBiYXNlZCAiCisJCQkgICAgICAgImludmFsaWRhdGlvblxuIiwgZHJoZC0+cmVnX2Jhc2VfYWRkcik7CisJCX0gZWxzZSB7CisJCQlpb21tdS0+Zmx1c2guZmx1c2hfY29udGV4dCA9IHFpX2ZsdXNoX2NvbnRleHQ7CisJCQlpb21tdS0+Zmx1c2guZmx1c2hfaW90bGIgPSBxaV9mbHVzaF9pb3RsYjsKKwkJCXByaW50ayhLRVJOX0lORk8gIklPTU1VIDB4JUx4OiB1c2luZyBRdWV1ZWQgIgorCQkJICAgICAgICJpbnZhbGlkYXRpb25cbiIsIGRyaGQtPnJlZ19iYXNlX2FkZHIpOworCQl9CisJfQorCiAJLyoKIAkgKiBGb3IgZWFjaCBybXJyCiAJICogICBmb3IgZWFjaCBkZXYgYXR0YWNoZWQgdG8gcm1ycgpAQCAtMTcxNCw5ICsxNzE2LDEwIEBACiAKIAkJaW9tbXVfc2V0X3Jvb3RfZW50cnkoaW9tbXUpOwogCi0JCWlvbW11X2ZsdXNoX2NvbnRleHRfZ2xvYmFsKGlvbW11LCAwKTsKLQkJaW9tbXVfZmx1c2hfaW90bGJfZ2xvYmFsKGlvbW11LCAwKTsKLQorCQlpb21tdS0+Zmx1c2guZmx1c2hfY29udGV4dChpb21tdSwgMCwgMCwgMCwgRE1BX0NDTURfR0xPQkFMX0lOVkwsCisJCQkJCSAgIDApOworCQlpb21tdS0+Zmx1c2guZmx1c2hfaW90bGIoaW9tbXUsIDAsIDAsIDAsIERNQV9UTEJfR0xPQkFMX0ZMVVNILAorCQkJCQkgMCk7CiAJCWlvbW11X2Rpc2FibGVfcHJvdGVjdF9tZW1fcmVnaW9ucyhpb21tdSk7CiAKIAkJcmV0ID0gaW9tbXVfZW5hYmxlX3RyYW5zbGF0aW9uKGlvbW11KTsKQEAgLTE3MzgsOCArMTc0MSw4IEBACiBzdGF0aWMgaW5saW5lIHU2NCBhbGlnbmVkX3NpemUodTY0IGhvc3RfYWRkciwgc2l6ZV90IHNpemUpCiB7CiAJdTY0IGFkZHI7Ci0JYWRkciA9IChob3N0X2FkZHIgJiAoflBBR0VfTUFTS180SykpICsgc2l6ZTsKLQlyZXR1cm4gUEFHRV9BTElHTl80SyhhZGRyKTsKKwlhZGRyID0gKGhvc3RfYWRkciAmICh+UEFHRV9NQVNLKSkgKyBzaXplOworCXJldHVybiBQQUdFX0FMSUdOKGFkZHIpOwogfQogCiBzdHJ1Y3QgaW92YSAqCkBAIC0xNzUzLDIwICsxNzU2LDIwIEBACiAJCXJldHVybiBOVUxMOwogCiAJcGlvdmEgPSBhbGxvY19pb3ZhKCZkb21haW4tPmlvdmFkLAotCQkJc2l6ZSA+PiBQQUdFX1NISUZUXzRLLCBJT1ZBX1BGTihlbmQpLCAxKTsKKwkJCXNpemUgPj4gUEFHRV9TSElGVCwgSU9WQV9QRk4oZW5kKSwgMSk7CiAJcmV0dXJuIHBpb3ZhOwogfQogCiBzdGF0aWMgc3RydWN0IGlvdmEgKgogX19pbnRlbF9hbGxvY19pb3ZhKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCi0JCXNpemVfdCBzaXplKQorCQkgICBzaXplX3Qgc2l6ZSwgdTY0IGRtYV9tYXNrKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBpb3ZhICppb3ZhID0gTlVMTDsKIAotCWlmICgocGRldi0+ZG1hX21hc2sgPD0gRE1BXzMyQklUX01BU0spIHx8IChkbWFyX2ZvcmNlZGFjKSkgewotCQlpb3ZhID0gaW9tbXVfYWxsb2NfaW92YShkb21haW4sIHNpemUsIHBkZXYtPmRtYV9tYXNrKTsKLQl9IGVsc2UgIHsKKwlpZiAoZG1hX21hc2sgPD0gRE1BXzMyQklUX01BU0sgfHwgZG1hcl9mb3JjZWRhYykKKwkJaW92YSA9IGlvbW11X2FsbG9jX2lvdmEoZG9tYWluLCBzaXplLCBkbWFfbWFzayk7CisJZWxzZSB7CiAJCS8qCiAJCSAqIEZpcnN0IHRyeSB0byBhbGxvY2F0ZSBhbiBpbyB2aXJ0dWFsIGFkZHJlc3MgaW4KIAkJICogRE1BXzMyQklUX01BU0sgYW5kIGlmIHRoYXQgZmFpbHMgdGhlbiB0cnkgYWxsb2NhdGluZwpAQCAtMTc3NCw3ICsxNzc3LDcgQEAKIAkJICovCiAJCWlvdmEgPSBpb21tdV9hbGxvY19pb3ZhKGRvbWFpbiwgc2l6ZSwgRE1BXzMyQklUX01BU0spOwogCQlpZiAoIWlvdmEpCi0JCQlpb3ZhID0gaW9tbXVfYWxsb2NfaW92YShkb21haW4sIHNpemUsIHBkZXYtPmRtYV9tYXNrKTsKKwkJCWlvdmEgPSBpb21tdV9hbGxvY19pb3ZhKGRvbWFpbiwgc2l6ZSwgZG1hX21hc2spOwogCX0KIAogCWlmICghaW92YSkgewpAQCAtMTgxMywxMiArMTgxNiwxMiBAQAogCXJldHVybiBkb21haW47CiB9CiAKLXN0YXRpYyBkbWFfYWRkcl90Ci1pbnRlbF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgZG1hX2FkZHJfdCBfX2ludGVsX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHBoeXNfYWRkcl90IHBhZGRyLAorCQkJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXIsIHU2NCBkbWFfbWFzaykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaHdkZXYpOwogCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHI7CisJcGh5c19hZGRyX3Qgc3RhcnRfcGFkZHI7CiAJc3RydWN0IGlvdmEgKmlvdmE7CiAJaW50IHByb3QgPSAwOwogCWludCByZXQ7CkBAIC0xODMzLDExICsxODM2LDExIEBACiAKIAlzaXplID0gYWxpZ25lZF9zaXplKCh1NjQpcGFkZHIsIHNpemUpOwogCi0JaW92YSA9IF9faW50ZWxfYWxsb2NfaW92YShod2RldiwgZG9tYWluLCBzaXplKTsKKwlpb3ZhID0gX19pbnRlbF9hbGxvY19pb3ZhKGh3ZGV2LCBkb21haW4sIHNpemUsIHBkZXYtPmRtYV9tYXNrKTsKIAlpZiAoIWlvdmEpCiAJCWdvdG8gZXJyb3I7CiAKLQlzdGFydF9wYWRkciA9IGlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZUXzRLOworCXN0YXJ0X3BhZGRyID0gKHBoeXNfYWRkcl90KWlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZUOwogCiAJLyoKIAkgKiBDaGVjayBpZiBETUFSIHN1cHBvcnRzIHplcm8tbGVuZ3RoIHJlYWRzIG9uIHdyaXRlIG9ubHkKQEAgLTE4NTUsMzAgKzE4NTgsMzMgQEAKIAkgKiBpcyBub3QgYSBiaWcgcHJvYmxlbQogCSAqLwogCXJldCA9IGRvbWFpbl9wYWdlX21hcHBpbmcoZG9tYWluLCBzdGFydF9wYWRkciwKLQkJKCh1NjQpcGFkZHIpICYgUEFHRV9NQVNLXzRLLCBzaXplLCBwcm90KTsKKwkJKCh1NjQpcGFkZHIpICYgUEFHRV9NQVNLLCBzaXplLCBwcm90KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yOwogCi0JcHJfZGVidWcoIkRldmljZSAlcyByZXF1ZXN0OiAlbHhAJWxseCBtYXBwaW5nOiAlbHhAJWxseCwgZGlyICVkXG4iLAotCQlwY2lfbmFtZShwZGV2KSwgc2l6ZSwgKHU2NClwYWRkciwKLQkJc2l6ZSwgKHU2NClzdGFydF9wYWRkciwgZGlyKTsKLQogCS8qIGl0J3MgYSBub24tcHJlc2VudCB0byBwcmVzZW50IG1hcHBpbmcgKi8KIAlyZXQgPSBpb21tdV9mbHVzaF9pb3RsYl9wc2koZG9tYWluLT5pb21tdSwgZG9tYWluLT5pZCwKLQkJCXN0YXJ0X3BhZGRyLCBzaXplID4+IFBBR0VfU0hJRlRfNEssIDEpOworCQkJc3RhcnRfcGFkZHIsIHNpemUgPj4gVlREX1BBR0VfU0hJRlQsIDEpOwogCWlmIChyZXQpCiAJCWlvbW11X2ZsdXNoX3dyaXRlX2J1ZmZlcihkb21haW4tPmlvbW11KTsKIAotCXJldHVybiAoc3RhcnRfcGFkZHIgKyAoKHU2NClwYWRkciAmICh+UEFHRV9NQVNLXzRLKSkpOworCXJldHVybiBzdGFydF9wYWRkciArICgodTY0KXBhZGRyICYgKH5QQUdFX01BU0spKTsKIAogZXJyb3I6CiAJaWYgKGlvdmEpCiAJCV9fZnJlZV9pb3ZhKCZkb21haW4tPmlvdmFkLCBpb3ZhKTsKIAlwcmludGsoS0VSTl9FUlIiRGV2aWNlICVzIHJlcXVlc3Q6ICVseEAlbGx4IGRpciAlZCAtLS0gZmFpbGVkXG4iLAotCQlwY2lfbmFtZShwZGV2KSwgc2l6ZSwgKHU2NClwYWRkciwgZGlyKTsKKwkJcGNpX25hbWUocGRldiksIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsIGRpcik7CiAJcmV0dXJuIDA7CiB9CiAKK2RtYV9hZGRyX3QgaW50ZWxfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcGFkZHIsCisJCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCit7CisJcmV0dXJuIF9faW50ZWxfbWFwX3NpbmdsZShod2RldiwgcGFkZHIsIHNpemUsIGRpciwKKwkJCQkgIHRvX3BjaV9kZXYoaHdkZXYpLT5kbWFfbWFzayk7Cit9CisKIHN0YXRpYyB2b2lkIGZsdXNoX3VubWFwcyh2b2lkKQogewogCWludCBpLCBqOwpAQCAtMTg5MSw3ICsxODk3LDggQEAKIAkJCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPQogCQkJCWRlZmVycmVkX2ZsdXNoW2ldLmRvbWFpblswXS0+aW9tbXU7CiAKLQkJCWlvbW11X2ZsdXNoX2lvdGxiX2dsb2JhbChpb21tdSwgMCk7CisJCQlpb21tdS0+Zmx1c2guZmx1c2hfaW90bGIoaW9tbXUsIDAsIDAsIDAsCisJCQkJCQkgRE1BX1RMQl9HTE9CQUxfRkxVU0gsIDApOwogCQkJZm9yIChqID0gMDsgaiA8IGRlZmVycmVkX2ZsdXNoW2ldLm5leHQ7IGorKykgewogCQkJCV9fZnJlZV9pb3ZhKCZkZWZlcnJlZF9mbHVzaFtpXS5kb21haW5bal0tPmlvdmFkLAogCQkJCQkJZGVmZXJyZWRfZmx1c2hbaV0uaW92YVtqXSk7CkBAIC0xOTM2LDggKzE5NDMsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzeW5jX3VtYXBfZmx1c2hfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAotCXNpemVfdCBzaXplLCBpbnQgZGlyKQordm9pZCBpbnRlbF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCWludCBkaXIpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CkBAIC0xOTUzLDExICsxOTYwLDExIEBACiAJaWYgKCFpb3ZhKQogCQlyZXR1cm47CiAKLQlzdGFydF9hZGRyID0gaW92YS0+cGZuX2xvIDw8IFBBR0VfU0hJRlRfNEs7CisJc3RhcnRfYWRkciA9IGlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZUOwogCXNpemUgPSBhbGlnbmVkX3NpemUoKHU2NClkZXZfYWRkciwgc2l6ZSk7CiAKIAlwcl9kZWJ1ZygiRGV2aWNlICVzIHVubWFwcGluZzogJWx4QCVsbHhcbiIsCi0JCXBjaV9uYW1lKHBkZXYpLCBzaXplLCAodTY0KXN0YXJ0X2FkZHIpOworCQlwY2lfbmFtZShwZGV2KSwgc2l6ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9hZGRyKTsKIAogCS8qICBjbGVhciB0aGUgd2hvbGUgcGFnZSAqLwogCWRtYV9wdGVfY2xlYXJfcmFuZ2UoZG9tYWluLCBzdGFydF9hZGRyLCBzdGFydF9hZGRyICsgc2l6ZSk7CkBAIC0xOTY1LDcgKzE5NzIsNyBAQAogCWRtYV9wdGVfZnJlZV9wYWdldGFibGUoZG9tYWluLCBzdGFydF9hZGRyLCBzdGFydF9hZGRyICsgc2l6ZSk7CiAJaWYgKGludGVsX2lvbW11X3N0cmljdCkgewogCQlpZiAoaW9tbXVfZmx1c2hfaW90bGJfcHNpKGRvbWFpbi0+aW9tbXUsCi0JCQlkb21haW4tPmlkLCBzdGFydF9hZGRyLCBzaXplID4+IFBBR0VfU0hJRlRfNEssIDApKQorCQkJZG9tYWluLT5pZCwgc3RhcnRfYWRkciwgc2l6ZSA+PiBWVERfUEFHRV9TSElGVCwgMCkpCiAJCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoZG9tYWluLT5pb21tdSk7CiAJCS8qIGZyZWUgaW92YSAqLwogCQlfX2ZyZWVfaW92YSgmZG9tYWluLT5pb3ZhZCwgaW92YSk7CkBAIC0xOTc4LDEzICsxOTg1LDEzIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCAqIGludGVsX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKLQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQordm9pZCAqaW50ZWxfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZCAqdmFkZHI7CiAJaW50IG9yZGVyOwogCi0Jc2l6ZSA9IFBBR0VfQUxJR05fNEsoc2l6ZSk7CisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAJZmxhZ3MgJj0gfihHRlBfRE1BIHwgR0ZQX0RNQTMyKTsKIApAQCAtMTk5MywxOSArMjAwMCwyMSBAQAogCQlyZXR1cm4gTlVMTDsKIAltZW1zZXQodmFkZHIsIDAsIHNpemUpOwogCi0JKmRtYV9oYW5kbGUgPSBpbnRlbF9tYXBfc2luZ2xlKGh3ZGV2LCB2aXJ0X3RvX2J1cyh2YWRkciksIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkqZG1hX2hhbmRsZSA9IF9faW50ZWxfbWFwX3NpbmdsZShod2RldiwgdmlydF90b19idXModmFkZHIpLCBzaXplLAorCQkJCQkgRE1BX0JJRElSRUNUSU9OQUwsCisJCQkJCSBod2Rldi0+Y29oZXJlbnRfZG1hX21hc2spOwogCWlmICgqZG1hX2hhbmRsZSkKIAkJcmV0dXJuIHZhZGRyOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIG9yZGVyKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCi0Jdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3ZvaWQgaW50ZWxfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAorCQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKIAlpbnQgb3JkZXI7CiAKLQlzaXplID0gUEFHRV9BTElHTl80SyhzaXplKTsKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIAlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAogCWludGVsX3VubWFwX3NpbmdsZShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtMjAxMyw4ICsyMDIyLDkgQEAKIH0KIAogI2RlZmluZSBTR19FTlRfVklSVF9BRERSRVNTKHNnKQkoc2dfdmlydCgoc2cpKSkKLXN0YXRpYyB2b2lkIGludGVsX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKLQlpbnQgbmVsZW1zLCBpbnQgZGlyKQorCit2b2lkIGludGVsX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJICAgIGludCBuZWxlbXMsIGludCBkaXIpCiB7CiAJaW50IGk7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGh3ZGV2KTsKQEAgLTIwMzgsNyArMjA0OCw3IEBACiAJCXNpemUgKz0gYWxpZ25lZF9zaXplKCh1NjQpYWRkciwgc2ctPmxlbmd0aCk7CiAJfQogCi0Jc3RhcnRfYWRkciA9IGlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZUXzRLOworCXN0YXJ0X2FkZHIgPSBpb3ZhLT5wZm5fbG8gPDwgUEFHRV9TSElGVDsKIAogCS8qICBjbGVhciB0aGUgd2hvbGUgcGFnZSAqLwogCWRtYV9wdGVfY2xlYXJfcmFuZ2UoZG9tYWluLCBzdGFydF9hZGRyLCBzdGFydF9hZGRyICsgc2l6ZSk7CkBAIC0yMDQ2LDcgKzIwNTYsNyBAQAogCWRtYV9wdGVfZnJlZV9wYWdldGFibGUoZG9tYWluLCBzdGFydF9hZGRyLCBzdGFydF9hZGRyICsgc2l6ZSk7CiAKIAlpZiAoaW9tbXVfZmx1c2hfaW90bGJfcHNpKGRvbWFpbi0+aW9tbXUsIGRvbWFpbi0+aWQsIHN0YXJ0X2FkZHIsCi0JCQlzaXplID4+IFBBR0VfU0hJRlRfNEssIDApKQorCQkJc2l6ZSA+PiBWVERfUEFHRV9TSElGVCwgMCkpCiAJCWlvbW11X2ZsdXNoX3dyaXRlX2J1ZmZlcihkb21haW4tPmlvbW11KTsKIAogCS8qIGZyZWUgaW92YSAqLwpAQCAtMjA2Nyw4ICsyMDc3LDggQEAKIAlyZXR1cm4gbmVsZW1zOwogfQogCi1zdGF0aWMgaW50IGludGVsX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCQkJaW50IG5lbGVtcywgaW50IGRpcikKK2ludCBpbnRlbF9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQkgaW50IGRpcikKIHsKIAl2b2lkICphZGRyOwogCWludCBpOwpAQCAtMjA5Niw3ICsyMTA2LDcgQEAKIAkJc2l6ZSArPSBhbGlnbmVkX3NpemUoKHU2NClhZGRyLCBzZy0+bGVuZ3RoKTsKIAl9CiAKLQlpb3ZhID0gX19pbnRlbF9hbGxvY19pb3ZhKGh3ZGV2LCBkb21haW4sIHNpemUpOworCWlvdmEgPSBfX2ludGVsX2FsbG9jX2lvdmEoaHdkZXYsIGRvbWFpbiwgc2l6ZSwgcGRldi0+ZG1hX21hc2spOwogCWlmICghaW92YSkgewogCQlzZ2xpc3QtPmRtYV9sZW5ndGggPSAwOwogCQlyZXR1cm4gMDsKQEAgLTIxMTIsMTQgKzIxMjIsMTQgQEAKIAlpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSB8fCBkaXIgPT0gRE1BX0JJRElSRUNUSU9OQUwpCiAJCXByb3QgfD0gRE1BX1BURV9XUklURTsKIAotCXN0YXJ0X2FkZHIgPSBpb3ZhLT5wZm5fbG8gPDwgUEFHRV9TSElGVF80SzsKKwlzdGFydF9hZGRyID0gaW92YS0+cGZuX2xvIDw8IFBBR0VfU0hJRlQ7CiAJb2Zmc2V0ID0gMDsKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHNnLCBuZWxlbXMsIGkpIHsKIAkJYWRkciA9IFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpOwogCQlhZGRyID0gKHZvaWQgKil2aXJ0X3RvX3BoeXMoYWRkcik7CiAJCXNpemUgPSBhbGlnbmVkX3NpemUoKHU2NClhZGRyLCBzZy0+bGVuZ3RoKTsKIAkJcmV0ID0gZG9tYWluX3BhZ2VfbWFwcGluZyhkb21haW4sIHN0YXJ0X2FkZHIgKyBvZmZzZXQsCi0JCQkoKHU2NClhZGRyKSAmIFBBR0VfTUFTS180SywKKwkJCSgodTY0KWFkZHIpICYgUEFHRV9NQVNLLAogCQkJc2l6ZSwgcHJvdCk7CiAJCWlmIChyZXQpIHsKIAkJCS8qICBjbGVhciB0aGUgcGFnZSAqLwpAQCAtMjEzMywxNCArMjE0MywxNCBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJc2ctPmRtYV9hZGRyZXNzID0gc3RhcnRfYWRkciArIG9mZnNldCArCi0JCQkJKCh1NjQpYWRkciAmICh+UEFHRV9NQVNLXzRLKSk7CisJCQkJKCh1NjQpYWRkciAmICh+UEFHRV9NQVNLKSk7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAkJb2Zmc2V0ICs9IHNpemU7CiAJfQogCiAJLyogaXQncyBhIG5vbi1wcmVzZW50IHRvIHByZXNlbnQgbWFwcGluZyAqLwogCWlmIChpb21tdV9mbHVzaF9pb3RsYl9wc2koZG9tYWluLT5pb21tdSwgZG9tYWluLT5pZCwKLQkJCXN0YXJ0X2FkZHIsIG9mZnNldCA+PiBQQUdFX1NISUZUXzRLLCAxKSkKKwkJCXN0YXJ0X2FkZHIsIG9mZnNldCA+PiBWVERfUEFHRV9TSElGVCwgMSkpCiAJCWlvbW11X2ZsdXNoX3dyaXRlX2J1ZmZlcihkb21haW4tPmlvbW11KTsKIAlyZXR1cm4gbmVsZW1zOwogfQpAQCAtMjE4MCw3ICsyMTkwLDYgQEAKIAkJCQkJIHNpemVvZihzdHJ1Y3QgZGV2aWNlX2RvbWFpbl9pbmZvKSwKIAkJCQkJIDAsCiAJCQkJCSBTTEFCX0hXQ0FDSEVfQUxJR04sCi0KIAkJCQkJIE5VTEwpOwogCWlmICghaW9tbXVfZGV2aW5mb19jYWNoZSkgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGNyZWF0ZSBkZXZpbmZvIGNhY2hlXG4iKTsKQEAgLTIxOTgsNyArMjIwNyw2IEBACiAJCQkJCSBzaXplb2Yoc3RydWN0IGlvdmEpLAogCQkJCQkgMCwKIAkJCQkJIFNMQUJfSFdDQUNIRV9BTElHTiwKLQogCQkJCQkgTlVMTCk7CiAJaWYgKCFpb21tdV9pb3ZhX2NhY2hlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgY3JlYXRlIGlvdmEgY2FjaGVcbiIpOwpAQCAtMjMyNyw3ICsyMzM1LDcgQEAKIAkJcmV0dXJuOwogCiAJZW5kID0gRE9NQUlOX01BWF9BRERSKGRvbWFpbi0+Z2F3KTsKLQllbmQgPSBlbmQgJiAoflBBR0VfTUFTS180Syk7CisJZW5kID0gZW5kICYgKH5WVERfUEFHRV9NQVNLKTsKIAogCS8qIGNsZWFyIHB0ZXMgKi8KIAlkbWFfcHRlX2NsZWFyX3JhbmdlKGRvbWFpbiwgMCwgZW5kKTsKQEAgLTI0MjMsNiArMjQzMSw2IEBACiAJaWYgKHB0ZSkKIAkJcGZuID0gZG1hX3B0ZV9hZGRyKCpwdGUpOwogCi0JcmV0dXJuIHBmbiA+PiBQQUdFX1NISUZUXzRLOworCXJldHVybiBwZm4gPj4gVlREX1BBR0VfU0hJRlQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9pb3ZhX3RvX3Bmbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA3MzhkNGM4Li4yZGU1YTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgpAQCAtMTEsNDEgKzEyLDY0IEBACiBzdGF0aWMgaW50IGlyX2lvYXBpY19udW07CiBpbnQgaW50cl9yZW1hcHBpbmdfZW5hYmxlZDsKIAotc3RhdGljIHN0cnVjdCB7CitzdHJ1Y3QgaXJxXzJfaW9tbXUgewogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJdTE2IGlydGVfaW5kZXg7CiAJdTE2IHN1Yl9oYW5kbGU7CiAJdTggIGlydGVfbWFzazsKLX0gaXJxXzJfaW9tbXVbTlJfSVJRU107Cit9OworCitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11IGlycV8yX2lvbW11WFtOUl9JUlFTXTsKKworc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXUodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gKGlycSA8IG5yX2lycXMpID8gaXJxXzJfaW9tbXVYICsgaXJxIDogTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXVfYWxsb2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxXzJfaW9tbXUoaXJxKTsKK30KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfMl9pcl9sb2NrKTsKIAorc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqdmFsaWRfaXJxXzJfaW9tbXUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKworCWlycV9pb21tdSA9IGlycV8yX2lvbW11KGlycSk7CisKKwlpZiAoIWlycV9pb21tdSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlycV9pb21tdS0+aW9tbXUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGlycV9pb21tdTsKK30KKwogaW50IGlycV9yZW1hcHBlZChpbnQgaXJxKQogewotCWlmIChpcnEgPiBOUl9JUlFTKQotCQlyZXR1cm4gMDsKLQotCWlmICghaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKSAhPSBOVUxMOwogfQogCiBpbnQgZ2V0X2lydGUoaW50IGlycSwgc3RydWN0IGlydGUgKmVudHJ5KQogewogCWludCBpbmRleDsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKIAotCWlmICghZW50cnkgfHwgaXJxID4gTlJfSVJRUykKKwlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLTE7CiAKIAlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOwotCWlmICghaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgeworCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKIAkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaW5kZXggPSBpcnFfMl9pb21tdVtpcnFdLmlydGVfaW5kZXggKyBpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGU7Ci0JKmVudHJ5ID0gKihpcnFfMl9pb21tdVtpcnFdLmlvbW11LT5pcl90YWJsZS0+YmFzZSArIGluZGV4KTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKKwkqZW50cnkgPSAqKGlycV9pb21tdS0+aW9tbXUtPmlyX3RhYmxlLT5iYXNlICsgaW5kZXgpOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCXJldHVybiAwOwpAQCAtNTQsNiArNzgsNyBAQAogaW50IGFsbG9jX2lydGUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IGlycSwgdTE2IGNvdW50KQogewogCXN0cnVjdCBpcl90YWJsZSAqdGFibGUgPSBpb21tdS0+aXJfdGFibGU7CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAJdTE2IGluZGV4LCBzdGFydF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAJaW50IGk7CkBAIC02MSw2ICs4NiwxMCBAQAogCWlmICghY291bnQpCiAJCXJldHVybiAtMTsKIAorCS8qIHByb3RlY3QgaXJxXzJfaW9tbXVfYWxsb2MgbGF0ZXIgKi8KKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybiAtMTsKKwogCS8qCiAJICogc3RhcnQgdGhlIElSVEUgc2VhcmNoIGZyb20gaW5kZXggMC4KIAkgKi8KQEAgLTEwMCwxMCArMTI5LDExIEBACiAJZm9yIChpID0gaW5kZXg7IGkgPCBpbmRleCArIGNvdW50OyBpKyspCiAJCXRhYmxlLT5iYXNlW2ldLnByZXNlbnQgPSAxOwogCi0JaXJxXzJfaW9tbXVbaXJxXS5pb21tdSA9IGlvbW11OwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9ICBpbmRleDsKLQlpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGUgPSAwOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrID0gbWFzazsKKwlpcnFfaW9tbXUgPSBpcnFfMl9pb21tdV9hbGxvYyhpcnEpOworCWlycV9pb21tdS0+aW9tbXUgPSBpb21tdTsKKwlpcnFfaW9tbXUtPmlydGVfaW5kZXggPSAgaW5kZXg7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gMDsKKwlpcnFfaW9tbXUtPmlydGVfbWFzayA9IG1hc2s7CiAKIAlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAKQEAgLTEyNCwzMSArMTU0LDMzIEBACiBpbnQgbWFwX2lycV90b19pcnRlX2hhbmRsZShpbnQgaXJxLCB1MTYgKnN1Yl9oYW5kbGUpCiB7CiAJaW50IGluZGV4OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCSpzdWJfaGFuZGxlID0gaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlOwotCWluZGV4ID0gaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4OworCSpzdWJfaGFuZGxlID0gaXJxX2lvbW11LT5zdWJfaGFuZGxlOworCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4OwogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAlyZXR1cm4gaW5kZXg7CiB9CiAKIGludCBzZXRfaXJ0ZV9pcnEoaW50IGlycSwgc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGluZGV4LCB1MTYgc3ViaGFuZGxlKQogewotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwotCQlyZXR1cm4gLTE7Ci0JfQorCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCi0JaXJxXzJfaW9tbXVbaXJxXS5pb21tdSA9IGlvbW11OwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9IGluZGV4OwotCWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSA9IHN1YmhhbmRsZTsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayA9IDA7CisJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKworCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CisKKwlpcnFfaW9tbXUtPmlvbW11ID0gaW9tbXU7CisJaXJxX2lvbW11LT5pcnRlX2luZGV4ID0gaW5kZXg7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gc3ViaGFuZGxlOworCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIApAQCAtMTU3LDE2ICsxODksMTkgQEAKIAogaW50IGNsZWFyX2lydGVfaXJxKGludCBpcnEsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBpbmRleCkKIHsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwogCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8ICFpcnFfMl9pb21tdVtpcnFdLmlvbW11KSB7CisJaXJxX2lvbW11ID0gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKTsKKwlpZiAoIWlycV9pb21tdSkgewogCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpcnFfMl9pb21tdVtpcnFdLmlvbW11ID0gTlVMTDsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfaW5kZXggPSAwOwotCWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2sgPSAwOworCWlycV9pb21tdS0+aW9tbXUgPSBOVUxMOworCWlycV9pb21tdS0+aXJ0ZV9pbmRleCA9IDA7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gMDsKKwlpcnFfMl9pb21tdShpcnEpLT5pcnRlX21hc2sgPSAwOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCkBAIC0xNzgsMTYgKzIxMywxOCBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXJ0ZSAqaXJ0ZTsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpcnRlID0gJmlvbW11LT5pcl90YWJsZS0+YmFzZVtpbmRleF07CiAKIAlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCBpcnRlX21vZGlmaWVkLT5sb3cgfCAoMSA8PCAxKSk7CkBAIC0yMDMsMTggKzI0MCwyMCBAQAogewogCWludCBpbmRleDsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAotCXFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrKTsKKwlxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yNDYsMjggKzI4NSwzMCBAQAogCWludCBpbmRleCwgaTsKIAlzdHJ1Y3QgaXJ0ZSAqaXJ0ZTsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpcnRlID0gJmlvbW11LT5pcl90YWJsZS0+YmFzZVtpbmRleF07CiAKLQlpZiAoIWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2spOyBpKyspCisJaWYgKCFpcnFfaW9tbXUtPnN1Yl9oYW5kbGUpIHsKKwkJZm9yIChpID0gMDsgaSA8ICgxIDw8IGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsgaSsrKQogCQkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgMCk7Ci0JCXFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrKTsKKwkJcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgaXJxX2lvbW11LT5pcnRlX21hc2spOwogCX0KIAotCWlycV8yX2lvbW11W2lycV0uaW9tbXUgPSBOVUxMOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlID0gMDsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayA9IDA7CisJaXJxX2lvbW11LT5pb21tdSA9IE5VTEw7CisJaXJxX2lvbW11LT5pcnRlX2luZGV4ID0gMDsKKwlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOworCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaXJxLmMgYi9kcml2ZXJzL3BjaS9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDQxZGZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvaXJxLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIFBDSSBJUlEgZmFpbHVyZSBoYW5kaW5nIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK3N0YXRpYyB2b2lkIHBjaV9ub3RlX2lycV9wcm9ibGVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBjaGFyICpyZWFzb24pCit7CisJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IHRvX3BjaV9kZXYocGRldi0+ZGV2LnBhcmVudCk7CisKKwlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkgICAiUG90ZW50aWFsbHkgbWlzcm91dGVkIElSUSAoQnJpZGdlICVzICUwNHg6JTA0eClcbiIsCisJCSAgIHBhcmVudC0+ZGV2LmJ1c19pZCwgcGFyZW50LT52ZW5kb3IsIHBhcmVudC0+ZGV2aWNlKTsKKwlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LCAiJXNcbiIsIHJlYXNvbik7CisJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwgIlBsZWFzZSByZXBvcnQgdG8gbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZ1xuIik7CisJV0FSTl9PTigxKTsKK30KKworLyoqCisgKiBwY2lfbG9zdF9pbnRlcnJ1cHQgLSByZXBvcnRzIGEgbG9zdCBQQ0kgaW50ZXJydXB0CisgKiBAcGRldjoJZGV2aWNlIHdob3NlIGludGVycnVwdCBpcyBsb3N0CisgKiAKKyAqIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIHRoaXMgcm91dGluZSBpcyB0byByZXBvcnQgYSBsb3N0IGludGVycnVwdAorICogaW4gYSBzdGFuZGFyZCB3YXkgd2hpY2ggdXNlcnMgY2FuIHJlY29nbmlzZSAoaW5zdGVhZCBvZiBibGFtaW5nIHRoZQorICogZHJpdmVyKS4KKyAqCisgKiBSZXR1cm5zOgorICogIGEgc3VnZ2VzdGlvbiBmb3IgZml4aW5nIGl0IChhbHRob3VnaCB0aGUgZHJpdmVyIGlzIG5vdCByZXF1aXJlZCB0bworICogYWN0IG9uIHRoaXMpLgorICovCitlbnVtIHBjaV9sb3N0X2ludGVycnVwdF9yZWFzb24gcGNpX2xvc3RfaW50ZXJydXB0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChwZGV2LT5tc2lfZW5hYmxlZCB8fCBwZGV2LT5tc2l4X2VuYWJsZWQpIHsKKwkJZW51bSBwY2lfbG9zdF9pbnRlcnJ1cHRfcmVhc29uIHJldDsKKworCQlpZiAocGRldi0+bXNpeF9lbmFibGVkKSB7CisJCQlwY2lfbm90ZV9pcnFfcHJvYmxlbShwZGV2LCAiTVNJWCByb3V0aW5nIGZhaWx1cmUiKTsKKwkJCXJldCA9IFBDSV9MT1NUX0lSUV9ESVNBQkxFX01TSVg7CisJCX0gZWxzZSB7CisJCQlwY2lfbm90ZV9pcnFfcHJvYmxlbShwZGV2LCAiTVNJIHJvdXRpbmcgZmFpbHVyZSIpOworCQkJcmV0ID0gUENJX0xPU1RfSVJRX0RJU0FCTEVfTVNJOworCQl9CisJCXJldHVybiByZXQ7CisJfQorI2lmZGVmIENPTkZJR19BQ1BJCisJaWYgKCEoYWNwaV9kaXNhYmxlZCB8fCBhY3BpX25vaXJxKSkgeworCQlwY2lfbm90ZV9pcnFfcHJvYmxlbShwZGV2LCAiUG90ZW50aWFsIEFDUEkgbWlzcm91dGluZyBwbGVhc2UgcmVib290IHdpdGggYWNwaT1ub2lycSIpOworCQkvKiBjdXJyZW50bHkgbm8gd2F5IHRvIGZpeCBhY3BpIG9uIHRoZSBmbHkgKi8KKwkJcmV0dXJuIFBDSV9MT1NUX0lSUV9ESVNBQkxFX0FDUEk7CisJfQorI2VuZGlmCisJcGNpX25vdGVfaXJxX3Byb2JsZW0ocGRldiwgInVua25vd24gY2F1c2UgKG5vdCBNU0kgb3IgQUNQSSkiKTsKKwlyZXR1cm4gUENJX0xPU1RfSVJRX05PX0lORk9STUFUSU9OOworfQorRVhQT1JUX1NZTUJPTChwY2lfbG9zdF9pbnRlcnJ1cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCA0YTEwYjU2Li43NDgwMWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtMzc4LDIzICszNzgsMjEgQEAKIAllbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQgPSAxOwogCWVudHJ5LT5tc2lfYXR0cmliLmRlZmF1bHRfaXJxID0gZGV2LT5pcnE7CS8qIFNhdmUgSU9BUElDIElSUSAqLwogCWVudHJ5LT5tc2lfYXR0cmliLnBvcyA9IHBvczsKLQlpZiAoaXNfbWFza19iaXRfc3VwcG9ydChjb250cm9sKSkgeworCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7CiAJCWVudHJ5LT5tYXNrX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopKGxvbmcpbXNpX21hc2tfYml0c19yZWcocG9zLAotCQkJCWlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpOworCQkJCWVudHJ5LT5tc2lfYXR0cmliLmlzXzY0KTsKIAl9CiAJZW50cnktPmRldiA9IGRldjsKIAlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewogCQl1bnNpZ25lZCBpbnQgbWFza2JpdHMsIHRlbXA7CiAJCS8qIEFsbCBNU0lzIGFyZSB1bm1hc2tlZCBieSBkZWZhdWx0LCBNYXNrIHRoZW0gYWxsICovCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsCi0JCQltc2lfbWFza19iaXRzX3JlZyhwb3MsIGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpLAorCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBlbnRyeS0+bXNpX2F0dHJpYi5pc182NCksCiAJCQkmbWFza2JpdHMpOwogCQl0ZW1wID0gKDEgPDwgbXVsdGlfbXNpX2NhcGFibGUoY29udHJvbCkpOwogCQl0ZW1wID0gKCh0ZW1wIC0gMSkgJiB+dGVtcCk7CiAJCW1hc2tiaXRzIHw9IHRlbXA7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAotCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSwKLQkJCW1hc2tiaXRzKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGVudHJ5LT5tc2lfYXR0cmliLmlzXzY0LCBtYXNrYml0cyk7CiAJCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXRzX21hc2sgPSB0ZW1wOwogCX0KIAlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmRldi0+bXNpX2xpc3QpOwpAQCAtNzYxLDMgKzc1OSwyNCBAQAogewogCUlOSVRfTElTVF9IRUFEKCZkZXYtPm1zaV9saXN0KTsKIH0KKworI2lmZGVmIENPTkZJR19BQ1BJCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CitzdGF0aWMgdm9pZCBfX2RldmluaXQgbXNpX2FjcGlfaW5pdCh2b2lkKQoreworCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKKwkJcmV0dXJuOworCXBjaV9vc2Nfc3VwcG9ydF9zZXQoT1NDX01TSV9TVVBQT1JUKTsKKwlwY2llX29zY19zdXBwb3J0X3NldChPU0NfTVNJX1NVUFBPUlQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBtc2lfYWNwaV9pbml0KHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCisKK3ZvaWQgX19kZXZpbml0IG1zaV9pbml0KHZvaWQpCit7CisJaWYgKCFwY2lfbXNpX2VuYWJsZSkKKwkJcmV0dXJuOworCW1zaV9hY3BpX2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IDg5YTJmMGYuLmRmZTdjOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMjQsMTcgKzI0LDE3IEBACiAJYWNwaV9oYW5kbGUgaGFuZGxlOwogCXUzMiBzdXBwb3J0X3NldDsKIAl1MzIgY29udHJvbF9zZXQ7Ci0JaW50IGlzX3F1ZXJpZWQ7Ci0JdTMyIHF1ZXJ5X3Jlc3VsdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmlsaW5nOwogfTsKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9vc2NfZGF0YV9saXN0KTsKIAogc3RydWN0IGFjcGlfb3NjX2FyZ3MgewogCXUzMiBjYXBidWZbM107Ci0JdTMyIHF1ZXJ5X3Jlc3VsdDsKKwl1MzIgY3RybF9yZXN1bHQ7CiB9OwogCitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9hY3BpX2xvY2spOworCiBzdGF0aWMgc3RydWN0IGFjcGlfb3NjX2RhdGEgKmFjcGlfZ2V0X29zY19kYXRhKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgYWNwaV9vc2NfZGF0YSAqZGF0YTsKQEAgLTEwOCw5ICsxMDgsOCBAQAogCQlnb3RvIG91dF9rZnJlZTsKIAl9CiBvdXRfc3VjY2VzczoKLQlpZiAoZmxhZ3MgJiBPU0NfUVVFUllfRU5BQkxFKQotCQlvc2NfYXJncy0+cXVlcnlfcmVzdWx0ID0KLQkJCSooKHUzMiAqKShvdXRfb2JqLT5idWZmZXIucG9pbnRlciArIDgpKTsKKwlvc2NfYXJncy0+Y3RybF9yZXN1bHQgPQorCQkqKCh1MzIgKikob3V0X29iai0+YnVmZmVyLnBvaW50ZXIgKyA4KSk7CiAJc3RhdHVzID0gQUVfT0s7CiAKIG91dF9rZnJlZToKQEAgLTExOCwzOSArMTE3LDUxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGFjcGlfc3RhdHVzIF9fYWNwaV9xdWVyeV9vc2ModTMyIGZsYWdzLCBzdHJ1Y3QgYWNwaV9vc2NfZGF0YSAqb3NjX2RhdGEsCisJCQkJICAgIHUzMiAqcmVzdWx0KQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1MzIgc3VwcG9ydF9zZXQ7CisJc3RydWN0IGFjcGlfb3NjX2FyZ3Mgb3NjX2FyZ3M7CisKKwkvKiBkbyBfT1NDIHF1ZXJ5IGZvciBhbGwgcG9zc2libGUgY29udHJvbHMgKi8KKwlzdXBwb3J0X3NldCA9IG9zY19kYXRhLT5zdXBwb3J0X3NldCB8IChmbGFncyAmIE9TQ19TVVBQT1JUX01BU0tTKTsKKwlvc2NfYXJncy5jYXBidWZbT1NDX1FVRVJZX1RZUEVdID0gT1NDX1FVRVJZX0VOQUJMRTsKKwlvc2NfYXJncy5jYXBidWZbT1NDX1NVUFBPUlRfVFlQRV0gPSBzdXBwb3J0X3NldDsKKwlvc2NfYXJncy5jYXBidWZbT1NDX0NPTlRST0xfVFlQRV0gPSBPU0NfQ09OVFJPTF9NQVNLUzsKKworCXN0YXR1cyA9IGFjcGlfcnVuX29zYyhvc2NfZGF0YS0+aGFuZGxlLCAmb3NjX2FyZ3MpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQlvc2NfZGF0YS0+c3VwcG9ydF9zZXQgPSBzdXBwb3J0X3NldDsKKwkJKnJlc3VsdCA9IG9zY19hcmdzLmN0cmxfcmVzdWx0OworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3F1ZXJ5X29zYyhhY3BpX2hhbmRsZSBoYW5kbGUsCiAJCQkJICB1MzIgbGV2ZWwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR2YWwpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX29zY19kYXRhICpvc2NfZGF0YTsKLQl1MzIgZmxhZ3MgPSAodW5zaWduZWQgbG9uZyljb250ZXh0LCBzdXBwb3J0X3NldDsKKwl1MzIgZmxhZ3MgPSAodW5zaWduZWQgbG9uZyljb250ZXh0LCBkdW1teTsKIAlhY3BpX2hhbmRsZSB0bXA7Ci0Jc3RydWN0IGFjcGlfb3NjX2FyZ3Mgb3NjX2FyZ3M7CiAKIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX09TQyIsICZ0bXApOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuIHN0YXR1czsKKwkJcmV0dXJuIEFFX09LOwogCisJbXV0ZXhfbG9jaygmcGNpX2FjcGlfbG9jayk7CiAJb3NjX2RhdGEgPSBhY3BpX2dldF9vc2NfZGF0YShoYW5kbGUpOwogCWlmICghb3NjX2RhdGEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhY3BpIG9zYyBkYXRhIGFycmF5IGlzIGZ1bGxcbiIpOwotCQlyZXR1cm4gQUVfRVJST1I7CisJCWdvdG8gb3V0OwogCX0KIAotCS8qIGRvIF9PU0MgcXVlcnkgZm9yIGFsbCBwb3NzaWJsZSBjb250cm9scyAqLwotCXN1cHBvcnRfc2V0ID0gb3NjX2RhdGEtPnN1cHBvcnRfc2V0IHwgKGZsYWdzICYgT1NDX1NVUFBPUlRfTUFTS1MpOwotCW9zY19hcmdzLmNhcGJ1ZltPU0NfUVVFUllfVFlQRV0gPSBPU0NfUVVFUllfRU5BQkxFOwotCW9zY19hcmdzLmNhcGJ1ZltPU0NfU1VQUE9SVF9UWVBFXSA9IHN1cHBvcnRfc2V0OwotCW9zY19hcmdzLmNhcGJ1ZltPU0NfQ09OVFJPTF9UWVBFXSA9IE9TQ19DT05UUk9MX01BU0tTOwotCi0Jc3RhdHVzID0gYWNwaV9ydW5fb3NjKGhhbmRsZSwgJm9zY19hcmdzKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJb3NjX2RhdGEtPnN1cHBvcnRfc2V0ID0gc3VwcG9ydF9zZXQ7Ci0JCW9zY19kYXRhLT5xdWVyeV9yZXN1bHQgPSBvc2NfYXJncy5xdWVyeV9yZXN1bHQ7Ci0JCW9zY19kYXRhLT5pc19xdWVyaWVkID0gMTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOworCV9fYWNwaV9xdWVyeV9vc2MoZmxhZ3MsIG9zY19kYXRhLCAmZHVtbXkpOworb3V0OgorCW11dGV4X3VubG9jaygmcGNpX2FjcGlfbG9jayk7CisJcmV0dXJuIEFFX09LOwogfQogCiAvKioKQEAgLTE4MSw3ICsxOTIsNyBAQAogYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmbGFncykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIGN0cmxzZXQsIGNvbnRyb2xfc2V0OworCXUzMiBjdHJsc2V0LCBjb250cm9sX3NldCwgcmVzdWx0OwogCWFjcGlfaGFuZGxlIHRtcDsKIAlzdHJ1Y3QgYWNwaV9vc2NfZGF0YSAqb3NjX2RhdGE7CiAJc3RydWN0IGFjcGlfb3NjX2FyZ3Mgb3NjX2FyZ3M7CkBAIC0xOTAsMTkgKzIwMSwyOCBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIHN0YXR1czsKIAorCW11dGV4X2xvY2soJnBjaV9hY3BpX2xvY2spOwogCW9zY19kYXRhID0gYWNwaV9nZXRfb3NjX2RhdGEoaGFuZGxlKTsKIAlpZiAoIW9zY19kYXRhKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWNwaSBvc2MgZGF0YSBhcnJheSBpcyBmdWxsXG4iKTsKLQkJcmV0dXJuIEFFX0VSUk9SOworCQlzdGF0dXMgPSBBRV9FUlJPUjsKKwkJZ290byBvdXQ7CiAJfQogCiAJY3RybHNldCA9IChmbGFncyAmIE9TQ19DT05UUk9MX01BU0tTKTsKLQlpZiAoIWN0cmxzZXQpCi0JCXJldHVybiBBRV9UWVBFOworCWlmICghY3RybHNldCkgeworCQlzdGF0dXMgPSBBRV9UWVBFOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAob3NjX2RhdGEtPmlzX3F1ZXJpZWQgJiYKLQkgICAgKChvc2NfZGF0YS0+cXVlcnlfcmVzdWx0ICYgY3RybHNldCkgIT0gY3RybHNldCkpCi0JCXJldHVybiBBRV9TVVBQT1JUOworCXN0YXR1cyA9IF9fYWNwaV9xdWVyeV9vc2Mob3NjX2RhdGEtPnN1cHBvcnRfc2V0LCBvc2NfZGF0YSwgJnJlc3VsdCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlnb3RvIG91dDsKKworCWlmICgocmVzdWx0ICYgY3RybHNldCkgIT0gY3RybHNldCkgeworCQlzdGF0dXMgPSBBRV9TVVBQT1JUOworCQlnb3RvIG91dDsKKwl9CiAKIAljb250cm9sX3NldCA9IG9zY19kYXRhLT5jb250cm9sX3NldCB8IGN0cmxzZXQ7CiAJb3NjX2FyZ3MuY2FwYnVmW09TQ19RVUVSWV9UWVBFXSA9IDA7CkBAIC0yMTEsNyArMjMxLDggQEAKIAlzdGF0dXMgPSBhY3BpX3J1bl9vc2MoaGFuZGxlLCAmb3NjX2FyZ3MpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJb3NjX2RhdGEtPmNvbnRyb2xfc2V0ID0gY29udHJvbF9zZXQ7Ci0KK291dDoKKwltdXRleF91bmxvY2soJnBjaV9hY3BpX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9vc2NfY29udHJvbF9zZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGExM2Y1MzQuLmI0Y2RkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTQzLDE4ICs0MywzMiBAQAogewogCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwogCXN0cnVjdCBwY2lfZHJpdmVyICpwZHJ2ID0gdG9fcGNpX2RyaXZlcihkcml2ZXIpOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMgPSBwZHJ2LT5pZF90YWJsZTsKIAlfX3UzMiB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yPVBDSV9BTllfSUQsCiAJCXN1YmRldmljZT1QQ0lfQU5ZX0lELCBjbGFzcz0wLCBjbGFzc19tYXNrPTA7CiAJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YT0wOwogCWludCBmaWVsZHM9MDsKLQlpbnQgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsOwogCi0JZmllbGRzID0gc3NjYW5mKGJ1ZiwgIiV4ICV4ICV4ICV4ICV4ICV4ICVsdXgiLAorCWZpZWxkcyA9IHNzY2FuZihidWYsICIleCAleCAleCAleCAleCAleCAlbHgiLAogCQkJJnZlbmRvciwgJmRldmljZSwgJnN1YnZlbmRvciwgJnN1YmRldmljZSwKIAkJCSZjbGFzcywgJmNsYXNzX21hc2ssICZkcml2ZXJfZGF0YSk7CiAJaWYgKGZpZWxkcyA8IDIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogT25seSBhY2NlcHQgZHJpdmVyX2RhdGEgdmFsdWVzIHRoYXQgbWF0Y2ggYW4gZXhpc3RpbmcgaWRfdGFibGUKKwkgICBlbnRyeSAqLworCXJldHZhbCA9IC1FSU5WQUw7CisJd2hpbGUgKGlkcy0+dmVuZG9yIHx8IGlkcy0+c3VidmVuZG9yIHx8IGlkcy0+Y2xhc3NfbWFzaykgeworCQlpZiAoZHJpdmVyX2RhdGEgPT0gaWRzLT5kcml2ZXJfZGF0YSkgeworCQkJcmV0dmFsID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWlkcysrOworCX0KKwlpZiAocmV0dmFsKQkvKiBObyBtYXRjaCAqLworCQlyZXR1cm4gcmV0dmFsOworCiAJZHluaWQgPSBremFsbG9jKHNpemVvZigqZHluaWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR5bmlkKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY1LDggKzc5LDcgQEAKIAlkeW5pZC0+aWQuc3ViZGV2aWNlID0gc3ViZGV2aWNlOwogCWR5bmlkLT5pZC5jbGFzcyA9IGNsYXNzOwogCWR5bmlkLT5pZC5jbGFzc19tYXNrID0gY2xhc3NfbWFzazsKLQlkeW5pZC0+aWQuZHJpdmVyX2RhdGEgPSBwZHJ2LT5keW5pZHMudXNlX2RyaXZlcl9kYXRhID8KLQkJZHJpdmVyX2RhdGEgOiAwVUw7CisJZHluaWQtPmlkLmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGE7CiAKIAlzcGluX2xvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZkeW5pZC0+bm9kZSwgJnBkcnYtPmR5bmlkcy5saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggNzdiYWZmMC4uMTEwMDIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTQyMyw3ICs0MjMsNyBAQAogICogUmVhZHMgMSwgMiwgb3IgNCBieXRlcyBmcm9tIGxlZ2FjeSBJL08gcG9ydCBzcGFjZSB1c2luZyBhbiBhcmNoIHNwZWNpZmljCiAgKiBjYWxsYmFjayByb3V0aW5lIChwY2lfbGVnYWN5X3JlYWQpLgogICovCi1zc2l6ZV90CitzdGF0aWMgc3NpemVfdAogcGNpX3JlYWRfbGVnYWN5X2lvKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCSAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAgKiBXcml0ZXMgMSwgMiwgb3IgNCBieXRlcyBmcm9tIGxlZ2FjeSBJL08gcG9ydCBzcGFjZSB1c2luZyBhbiBhcmNoIHNwZWNpZmljCiAgKiBjYWxsYmFjayByb3V0aW5lIChwY2lfbGVnYWN5X3dyaXRlKS4KICAqLwotc3NpemVfdAorc3RhdGljIHNzaXplX3QKIHBjaV93cml0ZV9sZWdhY3lfaW8oc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewpAQCAtNDY4LDExICs0NjgsMTEgQEAKICAqIEBhdHRyOiBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBmb3IgdGhpcyBmaWxlCiAgKiBAdm1hOiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgcGFzc2VkIHRvIG1tYXAKICAqCi0gKiBVc2VzIGFuIGFyY2ggc3BlY2lmaWMgY2FsbGJhY2ssIHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlLCB0byBtbWFwCisgKiBVc2VzIGFuIGFyY2ggc3BlY2lmaWMgY2FsbGJhY2ssIHBjaV9tbWFwX2xlZ2FjeV9tZW1fcGFnZV9yYW5nZSwgdG8gbW1hcAogICogbGVnYWN5IG1lbW9yeSBzcGFjZSAoZmlyc3QgbWVnIG9mIGJ1cyBzcGFjZSkgaW50byBhcHBsaWNhdGlvbiB2aXJ0dWFsCiAgKiBtZW1vcnkgc3BhY2UuCiAgKi8KLWludAorc3RhdGljIGludAogcGNpX21tYXBfbGVnYWN5X21lbShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewpAQCAtNDgwLDcgKzQ4MCw5MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZSwKIAkJCQkJCSAgICAgIGtvYmopKTsKIAotICAgICAgICByZXR1cm4gcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2UoYnVzLCB2bWEpOworICAgICAgICByZXR1cm4gcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2UoYnVzLCB2bWEsIHBjaV9tbWFwX21lbSk7Cit9CisKKy8qKgorICogcGNpX21tYXBfbGVnYWN5X2lvIC0gbWFwIGxlZ2FjeSBQQ0kgSU8gaW50byB1c2VyIG1lbW9yeSBzcGFjZQorICogQGtvYmo6IGtvYmplY3QgY29ycmVzcG9uZGluZyB0byBkZXZpY2UgdG8gYmUgbWFwcGVkCisgKiBAYXR0cjogc3RydWN0IGJpbl9hdHRyaWJ1dGUgZm9yIHRoaXMgZmlsZQorICogQHZtYTogc3RydWN0IHZtX2FyZWFfc3RydWN0IHBhc3NlZCB0byBtbWFwCisgKgorICogVXNlcyBhbiBhcmNoIHNwZWNpZmljIGNhbGxiYWNrLCBwY2lfbW1hcF9sZWdhY3lfaW9fcGFnZV9yYW5nZSwgdG8gbW1hcAorICogbGVnYWN5IElPIHNwYWNlIChmaXJzdCBtZWcgb2YgYnVzIHNwYWNlKSBpbnRvIGFwcGxpY2F0aW9uIHZpcnR1YWwKKyAqIG1lbW9yeSBzcGFjZS4gUmV0dXJucyAtRU5PU1lTIGlmIHRoZSBvcGVyYXRpb24gaXNuJ3Qgc3VwcG9ydGVkCisgKi8KK3N0YXRpYyBpbnQKK3BjaV9tbWFwX2xlZ2FjeV9pbyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworICAgICAgICBzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gdG9fcGNpX2J1cyhjb250YWluZXJfb2Yoa29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2UsCisJCQkJCQkgICAgICBrb2JqKSk7CisKKyAgICAgICAgcmV0dXJuIHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKGJ1cywgdm1hLCBwY2lfbW1hcF9pbyk7Cit9CisKKy8qKgorICogcGNpX2NyZWF0ZV9sZWdhY3lfZmlsZXMgLSBjcmVhdGUgbGVnYWN5IEkvTyBwb3J0IGFuZCBtZW1vcnkgZmlsZXMKKyAqIEBiOiBidXMgdG8gY3JlYXRlIGZpbGVzIHVuZGVyCisgKgorICogU29tZSBwbGF0Zm9ybXMgYWxsb3cgYWNjZXNzIHRvIGxlZ2FjeSBJL08gcG9ydCBhbmQgSVNBIG1lbW9yeSBzcGFjZSBvbgorICogYSBwZXItYnVzIGJhc2lzLiAgVGhpcyByb3V0aW5lIGNyZWF0ZXMgdGhlIGZpbGVzIGFuZCB0aWVzIHRoZW0gaW50bworICogdGhlaXIgYXNzb2NpYXRlZCByZWFkLCB3cml0ZSBhbmQgbW1hcCBmaWxlcyBmcm9tIHBjaS1zeXNmcy5jCisgKgorICogT24gZXJyb3IgdW53aW5kLCBidXQgZG9uJ3QgcHJvcG9nYXRlIHRoZSBlcnJvciB0byB0aGUgY2FsbGVyCisgKiBhcyBpdCBpcyBvayB0byBzZXQgdXAgdGhlIFBDSSBidXMgd2l0aG91dCB0aGVzZSBmaWxlcy4KKyAqLwordm9pZCBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyhzdHJ1Y3QgcGNpX2J1cyAqYikKK3sKKwlpbnQgZXJyb3I7CisKKwliLT5sZWdhY3lfaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmluX2F0dHJpYnV0ZSkgKiAyLAorCQkJICAgICAgIEdGUF9BVE9NSUMpOworCWlmICghYi0+bGVnYWN5X2lvKQorCQlnb3RvIGt6YWxsb2NfZXJyOworCisJYi0+bGVnYWN5X2lvLT5hdHRyLm5hbWUgPSAibGVnYWN5X2lvIjsKKwliLT5sZWdhY3lfaW8tPnNpemUgPSAweGZmZmY7CisJYi0+bGVnYWN5X2lvLT5hdHRyLm1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKKwliLT5sZWdhY3lfaW8tPnJlYWQgPSBwY2lfcmVhZF9sZWdhY3lfaW87CisJYi0+bGVnYWN5X2lvLT53cml0ZSA9IHBjaV93cml0ZV9sZWdhY3lfaW87CisJYi0+bGVnYWN5X2lvLT5tbWFwID0gcGNpX21tYXBfbGVnYWN5X2lvOworCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfaW8pOworCWlmIChlcnJvcikKKwkJZ290byBsZWdhY3lfaW9fZXJyOworCisJLyogQWxsb2NhdGVkIGFib3ZlIGFmdGVyIHRoZSBsZWdhY3lfaW8gc3RydWN0ICovCisJYi0+bGVnYWN5X21lbSA9IGItPmxlZ2FjeV9pbyArIDE7CisJYi0+bGVnYWN5X21lbS0+YXR0ci5uYW1lID0gImxlZ2FjeV9tZW0iOworCWItPmxlZ2FjeV9tZW0tPnNpemUgPSAxMDI0KjEwMjQ7CisJYi0+bGVnYWN5X21lbS0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CisJYi0+bGVnYWN5X21lbS0+bW1hcCA9IHBjaV9tbWFwX2xlZ2FjeV9tZW07CisJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9tZW0pOworCWlmIChlcnJvcikKKwkJZ290byBsZWdhY3lfbWVtX2VycjsKKworCXJldHVybjsKKworbGVnYWN5X21lbV9lcnI6CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfaW8pOworbGVnYWN5X2lvX2VycjoKKwlrZnJlZShiLT5sZWdhY3lfaW8pOworCWItPmxlZ2FjeV9pbyA9IE5VTEw7CitremFsbG9jX2VycjoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwY2k6IHdhcm5pbmc6IGNvdWxkIG5vdCBjcmVhdGUgbGVnYWN5IEkvTyBwb3J0ICIKKwkgICAgICAgImFuZCBJU0EgbWVtb3J5IHJlc291cmNlcyB0byBzeXNmc1xuIik7CisJcmV0dXJuOworfQorCit2b2lkIHBjaV9yZW1vdmVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpiKQoreworCWlmIChiLT5sZWdhY3lfaW8pIHsKKwkJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfaW8pOworCQlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9tZW0pOworCQlrZnJlZShiLT5sZWdhY3lfaW8pOyAvKiBib3RoIGFyZSBhbGxvY2F0ZWQgaGVyZSAqLworCX0KIH0KICNlbmRpZiAvKiBIQVZFX1BDSV9MRUdBQ1kgKi8KIApAQCAtNzE1LDcgKzc5OCw3IEBACiAJCS5uYW1lID0gImNvbmZpZyIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCiAJfSwKLQkuc2l6ZSA9IDI1NiwKKwkuc2l6ZSA9IFBDSV9DRkdfU1BBQ0VfU0laRSwKIAkucmVhZCA9IHBjaV9yZWFkX2NvbmZpZywKIAkud3JpdGUgPSBwY2lfd3JpdGVfY29uZmlnLAogfTsKQEAgLTcyNSw3ICs4MDgsNyBAQAogCQkubmFtZSA9ICJjb25maWciLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAogCX0sCi0JLnNpemUgPSA0MDk2LAorCS5zaXplID0gUENJX0NGR19TUEFDRV9FWFBfU0laRSwKIAkucmVhZCA9IHBjaV9yZWFkX2NvbmZpZywKIAkud3JpdGUgPSBwY2lfd3JpdGVfY29uZmlnLAogfTsKQEAgLTczNSw4NiArODE4LDEwMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBjaV9jcmVhdGVfY2FwYWJpbGl0aWVzX3N5c2ZzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cjsKKworCS8qIElmIHRoZSBkZXZpY2UgaGFzIFZQRCwgdHJ5IHRvIGV4cG9zZSBpdCBpbiBzeXNmcy4gKi8KKwlpZiAoZGV2LT52cGQpIHsKKwkJYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCphdHRyKSwgR0ZQX0FUT01JQyk7CisJCWlmICghYXR0cikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWF0dHItPnNpemUgPSBkZXYtPnZwZC0+bGVuOworCQlhdHRyLT5hdHRyLm5hbWUgPSAidnBkIjsKKwkJYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CisJCWF0dHItPnJlYWQgPSBwY2lfcmVhZF92cGQ7CisJCWF0dHItPndyaXRlID0gcGNpX3dyaXRlX3ZwZDsKKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZkZXYtPmRldi5rb2JqLCBhdHRyKTsKKwkJaWYgKHJldHZhbCkgeworCQkJa2ZyZWUoZGV2LT52cGQtPmF0dHIpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlkZXYtPnZwZC0+YXR0ciA9IGF0dHI7CisJfQorCisJLyogQWN0aXZlIFN0YXRlIFBvd2VyIE1hbmFnZW1lbnQgKi8KKwlwY2llX2FzcG1fY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBfX211c3RfY2hlY2sgcGNpX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyID0gTlVMTDsKIAlpbnQgcmV0dmFsOworCWludCByb21fc2l6ZSA9IDA7CisJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHI7CiAKIAlpZiAoIXN5c2ZzX2luaXRpYWxpemVkKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWlmIChwZGV2LT5jZmdfc2l6ZSA8IDQwOTYpCisJaWYgKHBkZXYtPmNmZ19zaXplIDwgUENJX0NGR19TUEFDRV9FWFBfU0laRSkKIAkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaV9jb25maWdfYXR0cik7CiAJZWxzZQogCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmcGNpZV9jb25maWdfYXR0cik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnI7CiAKLQkvKiBJZiB0aGUgZGV2aWNlIGhhcyBWUEQsIHRyeSB0byBleHBvc2UgaXQgaW4gc3lzZnMuICovCi0JaWYgKHBkZXYtPnZwZCkgewotCQlhdHRyID0ga3phbGxvYyhzaXplb2YoKmF0dHIpLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGF0dHIpIHsKLQkJCXBkZXYtPnZwZC0+YXR0ciA9IGF0dHI7Ci0JCQlhdHRyLT5zaXplID0gcGRldi0+dnBkLT5sZW47Ci0JCQlhdHRyLT5hdHRyLm5hbWUgPSAidnBkIjsKLQkJCWF0dHItPmF0dHIubW9kZSA9IFNfSVJVU1IgfCBTX0lXVVNSOwotCQkJYXR0ci0+cmVhZCA9IHBjaV9yZWFkX3ZwZDsKLQkJCWF0dHItPndyaXRlID0gcGNpX3dyaXRlX3ZwZDsKLQkJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIGF0dHIpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlnb3RvIGVycl92cGQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBlcnJfY29uZmlnX2ZpbGU7Ci0JCX0KLQl9Ci0KIAlyZXR2YWwgPSBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHBkZXYpOwogCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX3ZwZF9maWxlOworCQlnb3RvIGVycl9jb25maWdfZmlsZTsKKworCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpKQorCQlyb21fc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgUENJX1JPTV9SRVNPVVJDRSk7CisJZWxzZSBpZiAocGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9TSEFET1cpCisJCXJvbV9zaXplID0gMHgyMDAwMDsKIAogCS8qIElmIHRoZSBkZXZpY2UgaGFzIGEgUk9NLCB0cnkgdG8gZXhwb3NlIGl0IGluIHN5c2ZzLiAqLwotCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpIHx8Ci0JICAgIChwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykpIHsKKwlpZiAocm9tX3NpemUpIHsKIAkJYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCphdHRyKSwgR0ZQX0FUT01JQyk7Ci0JCWlmIChhdHRyKSB7Ci0JCQlwZGV2LT5yb21fYXR0ciA9IGF0dHI7Ci0JCQlhdHRyLT5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBQQ0lfUk9NX1JFU09VUkNFKTsKLQkJCWF0dHItPmF0dHIubmFtZSA9ICJyb20iOwotCQkJYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUjsKLQkJCWF0dHItPnJlYWQgPSBwY2lfcmVhZF9yb207Ci0JCQlhdHRyLT53cml0ZSA9IHBjaV93cml0ZV9yb207Ci0JCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBhdHRyKTsKLQkJCWlmIChyZXR2YWwpCi0JCQkJZ290byBlcnJfcm9tOwotCQl9IGVsc2UgeworCQlpZiAoIWF0dHIpIHsKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9yZXNvdXJjZV9maWxlczsKIAkJfQorCQlhdHRyLT5zaXplID0gcm9tX3NpemU7CisJCWF0dHItPmF0dHIubmFtZSA9ICJyb20iOworCQlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVVNSOworCQlhdHRyLT5yZWFkID0gcGNpX3JlYWRfcm9tOworCQlhdHRyLT53cml0ZSA9IHBjaV93cml0ZV9yb207CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIGF0dHIpOworCQlpZiAocmV0dmFsKSB7CisJCQlrZnJlZShhdHRyKTsKKwkJCWdvdG8gZXJyX3Jlc291cmNlX2ZpbGVzOworCQl9CisJCXBkZXYtPnJvbV9hdHRyID0gYXR0cjsKIAl9CisKIAkvKiBhZGQgcGxhdGZvcm0tc3BlY2lmaWMgYXR0cmlidXRlcyAqLwotCWlmIChwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHBkZXYpKQorCXJldHZhbCA9IHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMocGRldik7CisJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfcm9tX2ZpbGU7CiAKLQlwY2llX2FzcG1fY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhwZGV2KTsKKwkvKiBhZGQgc3lzZnMgZW50cmllcyBmb3IgdmFyaW91cyBjYXBhYmlsaXRpZXMgKi8KKwlyZXR2YWwgPSBwY2lfY3JlYXRlX2NhcGFiaWxpdGllc19zeXNmcyhwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9yb21fZmlsZTsKIAogCXJldHVybiAwOwogCiBlcnJfcm9tX2ZpbGU6Ci0JaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgUENJX1JPTV9SRVNPVVJDRSkpCisJaWYgKHJvbV9zaXplKSB7CiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnJvbV9hdHRyKTsKLWVycl9yb206Ci0Ja2ZyZWUocGRldi0+cm9tX2F0dHIpOworCQlrZnJlZShwZGV2LT5yb21fYXR0cik7CisJCXBkZXYtPnJvbV9hdHRyID0gTlVMTDsKKwl9CiBlcnJfcmVzb3VyY2VfZmlsZXM6CiAJcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKLWVycl92cGRfZmlsZToKLQlpZiAocGRldi0+dnBkKSB7Ci0JCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnZwZC0+YXR0cik7Ci1lcnJfdnBkOgotCQlrZnJlZShwZGV2LT52cGQtPmF0dHIpOwotCX0KIGVycl9jb25maWdfZmlsZToKLQlpZiAocGRldi0+Y2ZnX3NpemUgPCA0MDk2KQorCWlmIChwZGV2LT5jZmdfc2l6ZSA8IFBDSV9DRkdfU1BBQ0VfRVhQX1NJWkUpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2lfY29uZmlnX2F0dHIpOwogCWVsc2UKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaWVfY29uZmlnX2F0dHIpOwpAQCAtODIyLDYgKzkyMiwxNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9yZW1vdmVfY2FwYWJpbGl0aWVzX3N5c2ZzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+dnBkICYmIGRldi0+dnBkLT5hdHRyKSB7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5kZXYua29iaiwgZGV2LT52cGQtPmF0dHIpOworCQlrZnJlZShkZXYtPnZwZC0+YXR0cik7CisJfQorCisJcGNpZV9hc3BtX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoZGV2KTsKK30KKwogLyoqCiAgKiBwY2lfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyAtIGNsZWFudXAgUENJIHNwZWNpZmljIHN5c2ZzIGZpbGVzCiAgKiBAcGRldjogZGV2aWNlIHdob3NlIGVudHJpZXMgd2Ugc2hvdWxkIGZyZWUKQEAgLTgzMCwyNyArOTQwLDI4IEBACiAgKi8KIHZvaWQgcGNpX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJaW50IHJvbV9zaXplID0gMDsKKwogCWlmICghc3lzZnNfaW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKIAotCXBjaWVfYXNwbV9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHBkZXYpOworCXBjaV9yZW1vdmVfY2FwYWJpbGl0aWVzX3N5c2ZzKHBkZXYpOwogCi0JaWYgKHBkZXYtPnZwZCkgewotCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBwZGV2LT52cGQtPmF0dHIpOwotCQlrZnJlZShwZGV2LT52cGQtPmF0dHIpOwotCX0KLQlpZiAocGRldi0+Y2ZnX3NpemUgPCA0MDk2KQorCWlmIChwZGV2LT5jZmdfc2l6ZSA8IFBDSV9DRkdfU1BBQ0VfRVhQX1NJWkUpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2lfY29uZmlnX2F0dHIpOwogCWVsc2UKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaWVfY29uZmlnX2F0dHIpOwogCiAJcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKIAotCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpKSB7Ci0JCWlmIChwZGV2LT5yb21fYXR0cikgewotCQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcGRldi0+cm9tX2F0dHIpOwotCQkJa2ZyZWUocGRldi0+cm9tX2F0dHIpOwotCQl9CisJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgUENJX1JPTV9SRVNPVVJDRSkpCisJCXJvbV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBQQ0lfUk9NX1JFU09VUkNFKTsKKwllbHNlIGlmIChwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykKKwkJcm9tX3NpemUgPSAweDIwMDAwOworCisJaWYgKHJvbV9zaXplICYmIHBkZXYtPnJvbV9hdHRyKSB7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnJvbV9hdHRyKTsKKwkJa2ZyZWUocGRldi0+cm9tX2F0dHIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBjOTg4NGJiLi4yMWYyYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3dha2V1cC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4JLyogaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKi8KICNpbmNsdWRlICJwY2kuaCIKIApAQCAtMjEzLDEwICsyMTQsMTMgQEAKIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKQogewogCXUzMiBoZWFkZXI7Ci0JaW50IHR0bCA9IDQ4MDsgLyogMzg0MCBieXRlcywgbWluaW11bSA4IGJ5dGVzIHBlciBjYXBhYmlsaXR5ICovCi0JaW50IHBvcyA9IDB4MTAwOworCWludCB0dGw7CisJaW50IHBvcyA9IFBDSV9DRkdfU1BBQ0VfU0laRTsKIAotCWlmIChkZXYtPmNmZ19zaXplIDw9IDI1NikKKwkvKiBtaW5pbXVtIDggYnl0ZXMgcGVyIGNhcGFiaWxpdHkgKi8KKwl0dGwgPSAoUENJX0NGR19TUEFDRV9FWFBfU0laRSAtIFBDSV9DRkdfU1BBQ0VfU0laRSkgLyA4OworCisJaWYgKGRldi0+Y2ZnX3NpemUgPD0gUENJX0NGR19TUEFDRV9TSVpFKQogCQlyZXR1cm4gMDsKIAogCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZoZWFkZXIpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKQEAgLTIzNCw3ICsyMzgsNyBAQAogCQkJcmV0dXJuIHBvczsKIAogCQlwb3MgPSBQQ0lfRVhUX0NBUF9ORVhUKGhlYWRlcik7Ci0JCWlmIChwb3MgPCAweDEwMCkKKwkJaWYgKHBvcyA8IFBDSV9DRkdfU1BBQ0VfU0laRSkKIAkJCWJyZWFrOwogCiAJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZoZWFkZXIpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKQEAgLTExMjcsNiArMTEzMSwyNyBAQAogfQogCiAvKioKKyAqIHBjaV93YWtlX2Zyb21fZDMgLSBlbmFibGUvZGlzYWJsZSBkZXZpY2UgdG8gd2FrZSB1cCBmcm9tIEQzX2hvdCBvciBEM19jb2xkCisgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIHByZXBhcmUKKyAqIEBlbmFibGU6IFRydWUgdG8gZW5hYmxlIHdha2UtdXAgZXZlbnQgZ2VuZXJhdGlvbjsgZmFsc2UgdG8gZGlzYWJsZQorICoKKyAqIE1hbnkgZHJpdmVycyB3YW50IHRoZSBkZXZpY2UgdG8gd2FrZSB1cCB0aGUgc3lzdGVtIGZyb20gRDNfaG90IG9yIEQzX2NvbGQKKyAqIGFuZCB0aGlzIGZ1bmN0aW9uIGFsbG93cyB0aGVtIHRvIHNldCB0aGF0IHVwIGNsZWFubHkgLSBwY2lfZW5hYmxlX3dha2UoKQorICogc2hvdWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UgaW4gYSByb3cgdG8gZW5hYmxlIHdha2UtdXAgZHVlIHRvIFBDSSBQTSB2cyBBQ1BJCisgKiBvcmRlcmluZyBjb25zdHJhaW50cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyBlcnJvciBjb2RlIGlmIHRoZSBkZXZpY2UgaXMgbm90IGNhcGFibGUgb2YKKyAqIGdlbmVyYXRpbmcgUE1FIyBmcm9tIGJvdGggRDNfaG90IGFuZCBEM19jb2xkLCBhbmQgdGhlIHBsYXRmb3JtIGlzIHVuYWJsZSB0bworICogZW5hYmxlIHdha2UtdXAgcG93ZXIgZm9yIGl0LgorICovCitpbnQgcGNpX3dha2VfZnJvbV9kMyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gcGNpX3BtZV9jYXBhYmxlKGRldiwgUENJX0QzY29sZCkgPworCQkJcGNpX2VuYWJsZV93YWtlKGRldiwgUENJX0QzY29sZCwgZW5hYmxlKSA6CisJCQlwY2lfZW5hYmxlX3dha2UoZGV2LCBQQ0lfRDNob3QsIGVuYWJsZSk7Cit9CisKKy8qKgogICogcGNpX3RhcmdldF9zdGF0ZSAtIGZpbmQgYW4gYXBwcm9wcmlhdGUgbG93IHBvd2VyIHN0YXRlIGZvciBhIGdpdmVuIFBDSSBkZXYKICAqIEBkZXY6IFBDSSBkZXZpY2UKICAqCkBAIC0xMjQyLDI1ICsxMjY3LDI1IEBACiAJZGV2LT5kMV9zdXBwb3J0ID0gZmFsc2U7CiAJZGV2LT5kMl9zdXBwb3J0ID0gZmFsc2U7CiAJaWYgKCFwY2lfbm9fZDFkMihkZXYpKSB7Ci0JCWlmIChwbWMgJiBQQ0lfUE1fQ0FQX0QxKSB7Ci0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInN1cHBvcnRzIEQxXG4iKTsKKwkJaWYgKHBtYyAmIFBDSV9QTV9DQVBfRDEpCiAJCQlkZXYtPmQxX3N1cHBvcnQgPSB0cnVlOwotCQl9Ci0JCWlmIChwbWMgJiBQQ0lfUE1fQ0FQX0QyKSB7Ci0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInN1cHBvcnRzIEQyXG4iKTsKKwkJaWYgKHBtYyAmIFBDSV9QTV9DQVBfRDIpCiAJCQlkZXYtPmQyX3N1cHBvcnQgPSB0cnVlOwotCQl9CisKKwkJaWYgKGRldi0+ZDFfc3VwcG9ydCB8fCBkZXYtPmQyX3N1cHBvcnQpCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInN1cHBvcnRzJXMlc1xuIiwKKwkJCQkgICBkZXYtPmQxX3N1cHBvcnQgPyAiIEQxIiA6ICIiLAorCQkJCSAgIGRldi0+ZDJfc3VwcG9ydCA/ICIgRDIiIDogIiIpOwogCX0KIAogCXBtYyAmPSBQQ0lfUE1fQ0FQX1BNRV9NQVNLOwogCWlmIChwbWMpIHsKLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZkZXYtPmRldiwKLQkJCSJQTUUjIHN1cHBvcnRlZCBmcm9tJXMlcyVzJXMlc1xuIiwKLQkJCShwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMCkgPyAiIEQwIiA6ICIiLAotCQkJKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QxKSA/ICIgRDEiIDogIiIsCi0JCQkocG1jICYgUENJX1BNX0NBUF9QTUVfRDIpID8gIiBEMiIgOiAiIiwKLQkJCShwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMykgPyAiIEQzaG90IiA6ICIiLAotCQkJKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QzY29sZCkgPyAiIEQzY29sZCIgOiAiIik7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIlBNRSMgc3VwcG9ydGVkIGZyb20lcyVzJXMlcyVzXG4iLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMCkgPyAiIEQwIiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMSkgPyAiIEQxIiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMikgPyAiIEQyIiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMykgPyAiIEQzaG90IiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EM2NvbGQpID8gIiBEM2NvbGQiIDogIiIpOwogCQlkZXYtPnBtZV9zdXBwb3J0ID0gcG1jID4+IFBDSV9QTV9DQVBfUE1FX1NISUZUOwogCQkvKgogCQkgKiBNYWtlIGRldmljZSdzIFBNIGZsYWdzIHJlZmxlY3QgdGhlIHdha2UtdXAgY2FwYWJpbGl0eSwgYnV0CkBAIC0xMjc1LDYgKzEzMDAsNDMgQEAKIAl9CiB9CiAKKy8qKgorICogcGNpX2VuYWJsZV9hcmkgLSBlbmFibGUgQVJJIGZvcndhcmRpbmcgaWYgaGFyZHdhcmUgc3VwcG9ydCBpdAorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqLwordm9pZCBwY2lfZW5hYmxlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3M7CisJdTMyIGNhcDsKKwl1MTYgY3RybDsKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlOworCisJaWYgKCFkZXYtPmlzX3BjaWUgfHwgZGV2LT5kZXZmbikKKwkJcmV0dXJuOworCisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9BUkkpOworCWlmICghcG9zKQorCQlyZXR1cm47CisKKwlicmlkZ2UgPSBkZXYtPmJ1cy0+c2VsZjsKKwlpZiAoIWJyaWRnZSB8fCAhYnJpZGdlLT5pc19wY2llKQorCQlyZXR1cm47CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGJyaWRnZSwgUENJX0NBUF9JRF9FWFApOworCWlmICghcG9zKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfRVhQX0RFVkNBUDIsICZjYXApOworCWlmICghKGNhcCAmIFBDSV9FWFBfREVWQ0FQMl9BUkkpKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChicmlkZ2UsIHBvcyArIFBDSV9FWFBfREVWQ1RMMiwgJmN0cmwpOworCWN0cmwgfD0gUENJX0VYUF9ERVZDVEwyX0FSSTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfRVhQX0RFVkNUTDIsIGN0cmwpOworCisJYnJpZGdlLT5hcmlfZW5hYmxlZCA9IDE7Cit9CisKIGludAogcGNpX2dldF9pbnRlcnJ1cHRfcGluKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfZGV2ICoqYnJpZGdlKQogewpAQCAtMTM1OCwxMSArMTQyMCwxMCBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0OgotCWRldl93YXJuKCZwZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IHJlc2VydmUgJXMgcmVnaW9uIFslI2xseC0lI2xseF1cbiIsCisJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgcmVzZXJ2ZSAlcyByZWdpb24gJXBSXG4iLAogCQkgYmFyLAogCQkgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJiBJT1JFU09VUkNFX0lPID8gIkkvTyIgOiAibWVtIiwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhciksCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9lbmQocGRldiwgYmFyKSk7CisJCSAmcGRldi0+cmVzb3VyY2VbYmFyXSk7CiAJcmV0dXJuIC1FQlVTWTsKIH0KIApAQCAtMTY5MSw2ICsxNzUyLDEwMyBAQAogI2VuZGlmCiAKIC8qKgorICogcGNpX2V4ZWN1dGVfcmVzZXRfZnVuY3Rpb24oKSAtIFJlc2V0IGEgUENJIGRldmljZSBmdW5jdGlvbgorICogQGRldjogRGV2aWNlIGZ1bmN0aW9uIHRvIHJlc2V0CisgKgorICogU29tZSBkZXZpY2VzIGFsbG93IGFuIGluZGl2aWR1YWwgZnVuY3Rpb24gdG8gYmUgcmVzZXQgd2l0aG91dCBhZmZlY3RpbmcKKyAqIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgc2FtZSBkZXZpY2UuICBUaGUgUENJIGRldmljZSBtdXN0IGJlIHJlc3BvbnNpdmUKKyAqIHRvIFBDSSBjb25maWcgc3BhY2UgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhlIGRldmljZSBmdW5jdGlvbiBpcyBwcmVzdW1lZCB0byBiZSB1bnVzZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqIFJlc2V0dGluZyB0aGUgZGV2aWNlIHdpbGwgbWFrZSB0aGUgY29udGVudHMgb2YgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UKKyAqIHJhbmRvbSwgc28gYW55IGNhbGxlciBvZiB0aGlzIG11c3QgYmUgcHJlcGFyZWQgdG8gcmVpbml0aWFsaXNlIHRoZQorICogZGV2aWNlIGluY2x1ZGluZyBNU0ksIGJ1cyBtYXN0ZXJpbmcsIEJBUnMsIGRlY29kaW5nIElPIGFuZCBtZW1vcnkgc3BhY2VzLAorICogZXRjLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgZGV2aWNlIGZ1bmN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcmVzZXQgb3IgLUVOT1RUWSBpZiB0aGUKKyAqIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgcmVzZXR0aW5nIGEgc2luZ2xlIGZ1bmN0aW9uLgorICovCitpbnQgcGNpX2V4ZWN1dGVfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MTYgc3RhdHVzOworCXUzMiBjYXA7CisJaW50IGV4cHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisKKwlpZiAoIWV4cHBvcykKKwkJcmV0dXJuIC1FTk9UVFk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZXhwcG9zICsgUENJX0VYUF9ERVZDQVAsICZjYXApOworCWlmICghKGNhcCAmIFBDSV9FWFBfREVWQ0FQX0ZMUikpCisJCXJldHVybiAtRU5PVFRZOworCisJcGNpX2Jsb2NrX3VzZXJfY2ZnX2FjY2VzcyhkZXYpOworCisJLyogV2FpdCBmb3IgVHJhbnNhY3Rpb24gUGVuZGluZyBiaXQgY2xlYW4gKi8KKwltc2xlZXAoMTAwKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGV4cHBvcyArIFBDSV9FWFBfREVWU1RBLCAmc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpIHsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiQnVzeSBhZnRlciAxMDBtcyB3aGlsZSB0cnlpbmcgdG8gcmVzZXQ7ICIKKwkJCSJzbGVlcGluZyBmb3IgMSBzZWNvbmRcbiIpOworCQlzc2xlZXAoMSk7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZXhwcG9zICsgUENJX0VYUF9ERVZTVEEsICZzdGF0dXMpOworCQlpZiAoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJTdGlsbCBidXN5IGFmdGVyIDFzOyAiCisJCQkJInByb2NlZWRpbmcgd2l0aCByZXNldCBhbnl3YXlcbiIpOworCX0KKworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGV4cHBvcyArIFBDSV9FWFBfREVWQ1RMLAorCQkJCVBDSV9FWFBfREVWQ1RMX0JDUl9GTFIpOworCW1kZWxheSgxMDApOworCisJcGNpX3VuYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZXhlY3V0ZV9yZXNldF9mdW5jdGlvbik7CisKKy8qKgorICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgLSBxdWllc2NlIGFuZCByZXNldCBhIFBDSSBkZXZpY2UgZnVuY3Rpb24KKyAqIEBkZXY6IERldmljZSBmdW5jdGlvbiB0byByZXNldAorICoKKyAqIFNvbWUgZGV2aWNlcyBhbGxvdyBhbiBpbmRpdmlkdWFsIGZ1bmN0aW9uIHRvIGJlIHJlc2V0IHdpdGhvdXQgYWZmZWN0aW5nCisgKiBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgZGV2aWNlLiAgVGhlIFBDSSBkZXZpY2UgbXVzdCBiZSByZXNwb25zaXZlCisgKiB0byBQQ0kgY29uZmlnIHNwYWNlIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QganVzdCByZXNldCB0aGUgUENJIHBvcnRpb24gb2YgYSBkZXZpY2UsIGJ1dAorICogY2xlYXJzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuICBUaGlzIGZ1bmN0aW9uIGRpZmZlcnMKKyAqIGZyb20gcGNpX2V4ZWN1dGVfcmVzZXRfZnVuY3Rpb24gaW4gdGhhdCBpdCBzYXZlcyBhbmQgcmVzdG9yZXMgZGV2aWNlIHN0YXRlCisgKiBvdmVyIHRoZSByZXNldC4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIGRldmljZSBmdW5jdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHJlc2V0IG9yIC1FTk9UVFkgaWYgdGhlCisgKiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHJlc2V0dGluZyBhIHNpbmdsZSBmdW5jdGlvbi4KKyAqLworaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUzMiBjYXA7CisJaW50IGV4cHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaW50IHI7CisKKwlpZiAoIWV4cHBvcykKKwkJcmV0dXJuIC1FTk9UVFk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZXhwcG9zICsgUENJX0VYUF9ERVZDQVAsICZjYXApOworCWlmICghKGNhcCAmIFBDSV9FWFBfREVWQ0FQX0ZMUikpCisJCXJldHVybiAtRU5PVFRZOworCisJaWYgKCFkZXYtPm1zaV9lbmFibGVkICYmICFkZXYtPm1zaXhfZW5hYmxlZCkKKwkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCXBjaV9zYXZlX3N0YXRlKGRldik7CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKTsKKworCXIgPSBwY2lfZXhlY3V0ZV9yZXNldF9mdW5jdGlvbihkZXYpOworCisJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKKwlpZiAoIWRldi0+bXNpX2VuYWJsZWQgJiYgIWRldi0+bXNpeF9lbmFibGVkKQorCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2Z1bmN0aW9uKTsKKworLyoqCiAgKiBwY2l4X2dldF9tYXhfbW1yYmMgLSBnZXQgUENJLVggbWF4aW11bSBkZXNpZ25lZCBtZW1vcnkgcmVhZCBieXRlIGNvdW50CiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiAgKgpAQCAtMTg3OCw2ICsyMDM2LDkgQEAKIAl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKIAkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGRldik7CiAJfQorCisJbXNpX2luaXQoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xOTQzLDYgKzIxMDQsNyBAQAogRVhQT1JUX1NZTUJPTChwY2lfcG1lX2NhcGFibGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcG1lX2FjdGl2ZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfd2FrZSk7CitFWFBPUlRfU1lNQk9MKHBjaV93YWtlX2Zyb21fZDMpOwogRVhQT1JUX1NZTUJPTChwY2lfdGFyZ2V0X3N0YXRlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3ByZXBhcmVfdG9fc2xlZXApOwogRVhQT1JUX1NZTUJPTChwY2lfYmFja19mcm9tX3NsZWVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggZDgwN2NkNy4uOWRlODdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTEsMyArMSw5IEBACisjaWZuZGVmIERSSVZFUlNfUENJX0gKKyNkZWZpbmUgRFJJVkVSU19QQ0lfSAorCisjZGVmaW5lIFBDSV9DRkdfU1BBQ0VfU0laRQkyNTYKKyNkZWZpbmUgUENJX0NGR19TUEFDRV9FWFBfU0laRQk0MDk2CisKIC8qIEZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUgUENJIGNvcmUgY29kZSAqLwogCiBleHRlcm4gaW50IHBjaV91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwpAQCAtNzYsNyArODIsMTMgQEAKIC8qIEZ1bmN0aW9ucyBmb3IgUENJIEhvdHBsdWcgZHJpdmVycyB0byB1c2UgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgcGNpX2RvX3NjYW5fYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCisjaWZkZWYgSEFWRV9QQ0lfTEVHQUNZCitleHRlcm4gdm9pZCBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGV4dGVybiB2b2lkIHBjaV9yZW1vdmVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKSB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZW1vdmVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgcmV0dXJuOyB9CisjZW5kaWYKIAogLyogTG9jayBmb3IgcmVhZC93cml0ZSBhY2Nlc3MgdG8gcGNpIGRldmljZSBhbmQgYnVzIGxpc3RzICovCiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBwY2lfYnVzX3NlbTsKQEAgLTg2LDkgKzk4LDExIEBACiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIHZvaWQgcGNpX25vX21zaSh2b2lkKTsKIGV4dGVybiB2b2lkIHBjaV9tc2lfaW5pdF9wY2lfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgX19kZXZpbml0IG1zaV9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbm9fbXNpKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9tc2lfaW5pdF9wY2lfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG1zaV9pbml0KHZvaWQpIHsgfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUENJRUFFUgpAQCAtMTA5LDYgKzEyMyw3IEBACiBleHRlcm4gaW50IHBjaWVfbWNoX3F1aXJrOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBjaV9kZXZfYXR0cnNbXTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9jcHVhZmZpbml0eTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9jcHVsaXN0YWZmaW5pdHk7CiAKIC8qKgogICogcGNpX21hdGNoX29uZV9kZXZpY2UgLSBUZWxsIGlmIGEgUENJIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcKQEAgLTE0NCwzICsxNTksMTYgQEAKIH07CiAjZGVmaW5lIHRvX3BjaV9zbG90X2F0dHIocykgY29udGFpbmVyX29mKHMsIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUsIGF0dHIpCiAKK2V4dGVybiB2b2lkIHBjaV9lbmFibGVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworLyoqCisgKiBwY2lfYXJpX2VuYWJsZWQgLSBxdWVyeSBBUkkgZm9yd2FyZGluZyBzdGF0dXMKKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCisgKgorICogUmV0dXJucyAxIGlmIEFSSSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIG9yIDAgaWYgbm90IGVuYWJsZWQ7CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9hcmlfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBkZXYtPmFyaV9lbmFibGVkOworfQorCisjZW5kaWYgLyogRFJJVkVSU19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCA3NzAzNmY0Li5lMzkwNzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcG9zOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldi0+cG9ydCk7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldi0+cG9ydCwgUENJX0VYVF9DQVBfSURfRVJSKTsKIAkvKgogCSAqIE11c3QgbG9jayBhY2Nlc3MgdG8gUm9vdCBFcnJvciBTdGF0dXMgUmVnLCBSb290IEVycm9yIElEIFJlZywKIAkgKiBhbmQgUm9vdCBlcnJvciBwcm9kdWNlci9jb25zdW1lciBpbmRleApAQCAtMjUyLDcgKzI1Miw3IEBACiAJdTMyIHN0YXR1czsKIAlpbnQgcG9zOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CiAKIAkvKiBEaXNhYmxlIFJvb3QncyBpbnRlcnJ1cHQgaW4gcmVzcG9uc2UgdG8gZXJyb3IgbWVzc2FnZXMgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9ST09UX0NPTU1BTkQsIDApOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZTVEEsIHJlZzE2KTsKIAogCS8qIENsZWFuIEFFUiBSb290IEVycm9yIFN0YXR1cyAqLwotCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfVU5DT1JfU1RBVFVTLCAmc3RhdHVzKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfRVJSX1VOQ09SX1NFVkVSLCAmbWFzayk7CiAJaWYgKGRldi0+ZXJyb3Jfc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKaW5kZXggZWU1ZTdiNS4uZGZjNjNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCkBAIC0yOCw0MSArMjgsMTUgQEAKIHN0YXRpYyBpbnQgZm9yY2Vsb2FkOwogbW9kdWxlX3BhcmFtKGZvcmNlbG9hZCwgYm9vbCwgMCk7CiAKLSNkZWZpbmUgUENJX0NGR19TUEFDRV9TSVpFCSgweDEwMCkKLWludCBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBwb3M7Ci0JdTMyIHJlZzMyID0gMDsKLQotCS8qIENoZWNrIGlmIGl0J3MgYSBwY2ktZXhwcmVzcyBkZXZpY2UgKi8KLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOwotCWlmICghcG9zKQotCQlyZXR1cm4gMDsKLQotCS8qIENoZWNrIGlmIGl0IHN1cHBvcnRzIHBjaS1leHByZXNzIEFFUiAqLwotCXBvcyA9IFBDSV9DRkdfU1BBQ0VfU0laRTsKLQl3aGlsZSAocG9zKSB7Ci0JCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZyZWczMikpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBzb21lIGJyb2tlbiBib2FyZHMgcmV0dXJuIH4wICovCi0JCWlmIChyZWczMiA9PSAweGZmZmZmZmZmKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKFBDSV9FWFRfQ0FQX0lEKHJlZzMyKSA9PSBQQ0lfRVhUX0NBUF9JRF9FUlIpCi0JCQlicmVhazsKLQotCQlwb3MgPSByZWczMiA+PiAyMDsKLQl9Ci0KLQlyZXR1cm4gcG9zOwotfQotCiBpbnQgcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUxNiByZWcxNiA9IDA7CiAJaW50IHBvczsKIAorCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfRVJSKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FSU87CisKIAlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOwogCWlmICghcG9zKQogCQlyZXR1cm4gLUVJTzsKQEAgLTEwMiw3ICs3Niw3IEBACiAJaW50IHBvczsKIAl1MzIgc3RhdHVzLCBtYXNrOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CiAJaWYgKCFwb3MpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMjMsNyArOTcsNyBAQAogCWludCBwb3M7CiAJdTMyIHN0YXR1czsKIAotCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCWlmICghcG9zKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNTAyLDcgKzQ3Niw3IEBACiAJCSAqIENvcnJlY3RhYmxlIGVycm9yIGRvZXMgbm90IG5lZWQgc29mdHdhcmUgaW50ZXZlbnRpb24uCiAJCSAqIE5vIG5lZWQgdG8gZ28gdGhyb3VnaCBlcnJvciByZWNvdmVyeSBwcm9jZXNzLgogCQkgKi8KLQkJcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwkJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCQlpZiAocG9zKQogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfQ09SX1NUQVRVUywKIAkJCQkJaW5mby5zdGF0dXMpOwpAQCAtNTQyLDcgKzUxNiw3IEBACiAJcmVnMTYgJj0gfihTWVNURU1fRVJST1JfSU5UUl9PTl9NRVNHX01BU0spOwogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX1JUQ1RMLCByZWcxNik7CiAKLQlhZXJfcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldik7CisJYWVyX3BvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CiAJLyogQ2xlYXIgZXJyb3Igc3RhdHVzICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFlcl9wb3MgKyBQQ0lfRVJSX1JPT1RfU1RBVFVTLCAmcmVnMzIpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWVyX3BvcyArIFBDSV9FUlJfUk9PVF9TVEFUVVMsIHJlZzMyKTsKQEAgLTU3OSw3ICs1NTMsNyBAQAogCXUzMiByZWczMjsKIAlpbnQgcG9zOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfRVJSKTsKIAkvKiBEaXNhYmxlIFJvb3QncyBpbnRlcnJ1cHQgaW4gcmVzcG9uc2UgdG8gZXJyb3IgbWVzc2FnZXMgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHBvcyArIFBDSV9FUlJfUk9PVF9DT01NQU5ELCAwKTsKIApAQCAtNjE4LDcgKzU5Miw3IEBACiB7CiAJaW50IHBvczsKIAotCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCiAJLyogVGhlIGRldmljZSBtaWdodCBub3Qgc3VwcG9ydCBBRVIgKi8KIAlpZiAoIXBvcykKQEAgLTc1NSw3ICs3MjksNiBAQAogCXJldHVybiBBRVJfU1VDQ0VTUzsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkpOwogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCmluZGV4IDg1MWY1YjguLjhmNjNmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCkBAIC01MjgsOSArNTI4LDkgQEAKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGNoaWxkX2RldiwgY2hpbGRfcG9zICsgUENJX0VYUF9ERVZDQVAsCiAJCQkmcmVnMzIpOwogCQlpZiAoIShyZWczMiAmIFBDSV9FWFBfREVWQ0FQX1JCRVIpICYmICFhc3BtX2ZvcmNlKSB7Ci0JCQlwcmludGsoIlByZS0xLjEgUENJZSBkZXZpY2UgZGV0ZWN0ZWQsICIKLQkJCQkiZGlzYWJsZSBBU1BNIGZvciAlcy4gSXQgY2FuIGJlIGVuYWJsZWQgZm9yY2VkbHkiCi0JCQkJIiB3aXRoICdwY2llX2FzcG09Zm9yY2UnXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmNoaWxkX2Rldi0+ZGV2LCAiZGlzYWJsaW5nIEFTUE0iCisJCQkJIiBvbiBwcmUtMS4xIFBDSWUgZGV2aWNlLiAgWW91IGNhbiBlbmFibGUgaXQiCisJCQkJIiB3aXRoICdwY2llX2FzcG09Zm9yY2UnXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmggYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAppbmRleCAzNjU2ZTAzLi4yNTI5ZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaApAQCAtMjUsNyArMjUsNiBAQAogI2RlZmluZSBQQ0lFX0NBUEFCSUxJVElFU19SRUcJCTB4MgogI2RlZmluZSBQQ0lFX1NMT1RfQ0FQQUJJTElUSUVTX1JFRwkweDE0CiAjZGVmaW5lIFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVMJNAotI2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX1NJWkUJCTI1NgogCiAjZGVmaW5lIGdldF9kZXNjcmlwdG9yX2lkKHR5cGUsIHNlcnZpY2UpICgoKHR5cGUgLSA0KSA8PCA0KSB8IHNlcnZpY2UpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IDg5MGYwZDIuLjJlMDkxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMTk1LDI0ICsxOTUsMTEgQEAKIAkvKiBQTUUgQ2FwYWJsZSAtIHJvb3QgcG9ydCBjYXBhYmlsaXR5ICovCiAJaWYgKCgocmVnMTYgPj4gNCkgJiBQT1JUX1RZUEVfTUFTSykgPT0gUENJRV9SQ19QT1JUKQogCQlzZXJ2aWNlcyB8PSBQQ0lFX1BPUlRfU0VSVklDRV9QTUU7Ci0JCi0JcG9zID0gUENJX0NGR19TUEFDRV9TSVpFOwotCXdoaWxlIChwb3MpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmcmVnMzIpOwotCQlzd2l0Y2ggKHJlZzMyICYgMHhmZmZmKSB7Ci0JCWNhc2UgUENJX0VYVF9DQVBfSURfRVJSOgotCQkJc2VydmljZXMgfD0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSOwotCQkJcG9zID0gcmVnMzIgPj4gMjA7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfRVhUX0NBUF9JRF9WQzoKLQkJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX1ZDOwotCQkJcG9zID0gcmVnMzIgPj4gMjA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBvcyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KKworCWlmIChwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUikpCisJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX0FFUjsKKwlpZiAocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9WQykpCisJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX1ZDOwogCiAJcmV0dXJuIHNlcnZpY2VzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IDM2N2M5YzIuLjU4NDQyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAkKIAlwY2lfc2V0X21hc3RlcihkZXYpOwogICAgICAgICBpZiAoIWRldi0+aXJxICYmIGRldi0+cGluKSB7Ci0JCWRldl93YXJuKCZkZXYtPmRldiwgImRldmljZSBbJTA0eC8lMDR4XSBoYXMgaW52YWxpZCBJUlE7ICIKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiZGV2aWNlIFslMDR4OiUwNHhdIGhhcyBpbnZhbGlkIElSUTsgIgogCQkJICJjaGVjayB2ZW5kb3IgQklPU1xuIiwgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlKTsKIAl9CiAJaWYgKHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggZGQ5MTYxYTA1Li4wMDNhOWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTE0LDggKzE0LDYgQEAKIAogI2RlZmluZSBDQVJEQlVTX0xBVEVOQ1lfVElNRVIJMTc2CS8qIHNlY29uZGFyeSBsYXRlbmN5IHRpbWVyICovCiAjZGVmaW5lIENBUkRCVVNfUkVTRVJWRV9CVVNOUgkzCi0jZGVmaW5lIFBDSV9DRkdfU1BBQ0VfU0laRQkyNTYKLSNkZWZpbmUgUENJX0NGR19TUEFDRV9FWFBfU0laRQk0MDk2CiAKIC8qIFVnaC4gIE5lZWQgdG8gc3RvcCBleHBvcnRpbmcgdGhpcyB0byBtb2R1bGVzLiAqLwogTElTVF9IRUFEKHBjaV9yb290X2J1c2VzKTsKQEAgLTQ0LDcyICs0Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5vX3BjaV9kZXZpY2VzKTsKIAotI2lmZGVmIEhBVkVfUENJX0xFR0FDWQotLyoqCi0gKiBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyAtIGNyZWF0ZSBsZWdhY3kgSS9PIHBvcnQgYW5kIG1lbW9yeSBmaWxlcwotICogQGI6IGJ1cyB0byBjcmVhdGUgZmlsZXMgdW5kZXIKLSAqCi0gKiBTb21lIHBsYXRmb3JtcyBhbGxvdyBhY2Nlc3MgdG8gbGVnYWN5IEkvTyBwb3J0IGFuZCBJU0EgbWVtb3J5IHNwYWNlIG9uCi0gKiBhIHBlci1idXMgYmFzaXMuICBUaGlzIHJvdXRpbmUgY3JlYXRlcyB0aGUgZmlsZXMgYW5kIHRpZXMgdGhlbSBpbnRvCi0gKiB0aGVpciBhc3NvY2lhdGVkIHJlYWQsIHdyaXRlIGFuZCBtbWFwIGZpbGVzIGZyb20gcGNpLXN5c2ZzLmMKLSAqCi0gKiBPbiBlcnJvciB1bndpbmQsIGJ1dCBkb24ndCBwcm9wb2dhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXIKLSAqIGFzIGl0IGlzIG9rIHRvIHNldCB1cCB0aGUgUENJIGJ1cyB3aXRob3V0IHRoZXNlIGZpbGVzLgotICovCi1zdGF0aWMgdm9pZCBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyhzdHJ1Y3QgcGNpX2J1cyAqYikKLXsKLQlpbnQgZXJyb3I7Ci0KLQliLT5sZWdhY3lfaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmluX2F0dHJpYnV0ZSkgKiAyLAotCQkJICAgICAgIEdGUF9BVE9NSUMpOwotCWlmICghYi0+bGVnYWN5X2lvKQotCQlnb3RvIGt6YWxsb2NfZXJyOwotCi0JYi0+bGVnYWN5X2lvLT5hdHRyLm5hbWUgPSAibGVnYWN5X2lvIjsKLQliLT5sZWdhY3lfaW8tPnNpemUgPSAweGZmZmY7Ci0JYi0+bGVnYWN5X2lvLT5hdHRyLm1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKLQliLT5sZWdhY3lfaW8tPnJlYWQgPSBwY2lfcmVhZF9sZWdhY3lfaW87Ci0JYi0+bGVnYWN5X2lvLT53cml0ZSA9IHBjaV93cml0ZV9sZWdhY3lfaW87Ci0JZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9pbyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGxlZ2FjeV9pb19lcnI7Ci0KLQkvKiBBbGxvY2F0ZWQgYWJvdmUgYWZ0ZXIgdGhlIGxlZ2FjeV9pbyBzdHJ1Y3QgKi8KLQliLT5sZWdhY3lfbWVtID0gYi0+bGVnYWN5X2lvICsgMTsKLQliLT5sZWdhY3lfbWVtLT5hdHRyLm5hbWUgPSAibGVnYWN5X21lbSI7Ci0JYi0+bGVnYWN5X21lbS0+c2l6ZSA9IDEwMjQqMTAyNDsKLQliLT5sZWdhY3lfbWVtLT5hdHRyLm1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKLQliLT5sZWdhY3lfbWVtLT5tbWFwID0gcGNpX21tYXBfbGVnYWN5X21lbTsKLQllcnJvciA9IGRldmljZV9jcmVhdGVfYmluX2ZpbGUoJmItPmRldiwgYi0+bGVnYWN5X21lbSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGxlZ2FjeV9tZW1fZXJyOwotCi0JcmV0dXJuOwotCi1sZWdhY3lfbWVtX2VycjoKLQlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9pbyk7Ci1sZWdhY3lfaW9fZXJyOgotCWtmcmVlKGItPmxlZ2FjeV9pbyk7Ci0JYi0+bGVnYWN5X2lvID0gTlVMTDsKLWt6YWxsb2NfZXJyOgotCXByaW50ayhLRVJOX1dBUk5JTkcgInBjaTogd2FybmluZzogY291bGQgbm90IGNyZWF0ZSBsZWdhY3kgSS9PIHBvcnQgIgotCSAgICAgICAiYW5kIElTQSBtZW1vcnkgcmVzb3VyY2VzIHRvIHN5c2ZzXG4iKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgcGNpX3JlbW92ZV9sZWdhY3lfZmlsZXMoc3RydWN0IHBjaV9idXMgKmIpCi17Ci0JaWYgKGItPmxlZ2FjeV9pbykgewotCQlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9pbyk7Ci0JCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoJmItPmRldiwgYi0+bGVnYWN5X21lbSk7Ci0JCWtmcmVlKGItPmxlZ2FjeV9pbyk7IC8qIGJvdGggYXJlIGFsbG9jYXRlZCBoZXJlICovCi0JfQotfQotI2Vsc2UgLyogIUhBVkVfUENJX0xFR0FDWSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBjaV9jcmVhdGVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgcmV0dXJuOyB9Ci12b2lkIHBjaV9yZW1vdmVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgcmV0dXJuOyB9Ci0jZW5kaWYgLyogSEFWRV9QQ0lfTEVHQUNZICovCi0KIC8qCiAgKiBQQ0kgQnVzIENsYXNzIERldmljZXMKICAqLwpAQCAtMjE5LDcgKzE1MSw3IEBACiAKIAlyZXMtPmZsYWdzID0gYmFyICYgflBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CiAKLQlpZiAocmVzLT5mbGFncyA9PSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KQorCWlmIChyZXMtPmZsYWdzICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCkKIAkJcmV0dXJuIHBjaV9iYXJfbWVtNjQ7CiAJcmV0dXJuIHBjaV9iYXJfbWVtMzI7CiB9CkBAIC0zMDQsOSArMjM2LDggQEAKIAkJfSBlbHNlIHsKIAkJCXJlcy0+c3RhcnQgPSBsNjQ7CiAJCQlyZXMtPmVuZCA9IGw2NCArIHN6NjQ7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcyByZWcgJXggNjRiaXQgbW1pbzogWyVsbHgsICVsbHhdXG4iLAotCQkJCXBjaV9uYW1lKGRldiksIHBvcywgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJInJlZyAleCA2NGJpdCBtbWlvOiAlcFJcbiIsIHBvcywgcmVzKTsKIAkJfQogCX0gZWxzZSB7CiAJCXN6ID0gcGNpX3NpemUobCwgc3osIG1hc2spOwpAQCAtMzE2LDkgKzI0NywxMCBAQAogCiAJCXJlcy0+c3RhcnQgPSBsOwogCQlyZXMtPmVuZCA9IGwgKyBzejsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogJXMgcmVnICV4ICVzOiBbJWxseCwgJWxseF1cbiIsIHBjaV9uYW1lKGRldiksCi0JCQlwb3MsIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCI6IjMyYml0IG1taW8iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInJlZyAleCAlczogJXBSXG4iLCBwb3MsCisJCQkocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gImlvIHBvcnQiIDogIjMyYml0IG1taW8iLAorCQkJcmVzKTsKIAl9CiAKICBvdXQ6CkBAIC0zNjYsOSArMjk4LDYgQEAKIAkJCWNoaWxkLT5yZXNvdXJjZVtpXSA9IGNoaWxkLT5wYXJlbnQtPnJlc291cmNlW2kgLSAzXTsKIAl9CiAKLQlmb3IoaT0wOyBpPDM7IGkrKykKLQkJY2hpbGQtPnJlc291cmNlW2ldID0gJmRldi0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07Ci0KIAlyZXMgPSBjaGlsZC0+cmVzb3VyY2VbMF07CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU9fQkFTRSwgJmlvX2Jhc2VfbG8pOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lPX0xJTUlULCAmaW9fbGltaXRfbG8pOwpAQCAtMzg5LDkgKzMxOCw3IEBACiAJCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJaWYgKCFyZXMtPmVuZCkKIAkJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZjsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzIGlvIHBvcnQ6IFslbGx4LCAlbGx4XVxuIiwKLQkJCXBjaV9uYW1lKGRldiksICh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPmVuZCk7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiYnJpZGdlIGlvIHBvcnQ6ICVwUlxuIiwgcmVzKTsKIAl9CiAKIAlyZXMgPSBjaGlsZC0+cmVzb3VyY2VbMV07CkBAIC00MDMsOSArMzMwLDggQEAKIAkJcmVzLT5mbGFncyA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfTUVNOwogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IGJyaWRnZSAlcyAzMmJpdCBtbWlvOiBbJWxseCwgJWxseF1cbiIsCi0JCQlwY2lfbmFtZShkZXYpLCAodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQpOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImJyaWRnZSAzMmJpdCBtbWlvOiAlcFJcbiIsCisJCQlyZXMpOwogCX0KIAogCXJlcyA9IGNoaWxkLT5yZXNvdXJjZVsyXTsKQEAgLTQ0MSw5ICszNjcsOSBAQAogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX01FTU9SWV9SQU5HRV9UWVBFX01BU0spIHwgSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1BSRUZFVENIOwogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IGJyaWRnZSAlcyAlc2JpdCBtbWlvIHByZWY6IFslbGx4LCAlbGx4XVxuIiwKLQkJCXBjaV9uYW1lKGRldiksIChyZXMtPmZsYWdzICYgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkgPyAiNjQiIDogIjMyIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJicmlkZ2UgJXNiaXQgbW1pbyBwcmVmOiAlcFJcbiIsCisJCQkocmVzLT5mbGFncyAmIFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQpID8gIjY0IiA6ICIzMiIsCisJCQlyZXMpOwogCX0KIH0KIApAQCAtNTUxLDE5ICs0NzcsMjcgQEAKIAlpbnQgaXNfY2FyZGJ1cyA9IChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKTsKIAl1MzIgYnVzZXMsIGksIGogPSAwOwogCXUxNiBiY3RsOworCWludCBicm9rZW4gPSAwOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX1BSSU1BUllfQlVTLCAmYnVzZXMpOwogCiAJZGV2X2RiZygmZGV2LT5kZXYsICJzY2FubmluZyBiZWhpbmQgYnJpZGdlLCBjb25maWcgJTA2eCwgcGFzcyAlZFxuIiwKIAkJYnVzZXMgJiAweGZmZmZmZiwgcGFzcyk7CiAKKwkvKiBDaGVjayBpZiBzZXR1cCBpcyBzZW5zaWJsZSBhdCBhbGwgKi8KKwlpZiAoIXBhc3MgJiYKKwkgICAgKChidXNlcyAmIDB4ZmYpICE9IGJ1cy0+bnVtYmVyIHx8ICgoYnVzZXMgPj4gOCkgJiAweGZmKSA8PSBidXMtPm51bWJlcikpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJidXMgY29uZmlndXJhdGlvbiBpbnZhbGlkLCByZWNvbmZpZ3VyaW5nXG4iKTsKKwkJYnJva2VuID0gMTsKKwl9CisKIAkvKiBEaXNhYmxlIE1hc3RlckFib3J0TW9kZSBkdXJpbmcgcHJvYmluZyB0byBhdm9pZCByZXBvcnRpbmcKIAkgICBvZiBidXMgZXJyb3JzIChpbiBzb21lIGFyY2hpdGVjdHVyZXMpICovIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAmYmN0bCk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLAogCQkJICAgICAgYmN0bCAmIH5QQ0lfQlJJREdFX0NUTF9NQVNURVJfQUJPUlQpOwogCi0JaWYgKChidXNlcyAmIDB4ZmZmZjAwKSAmJiAhcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpICYmICFpc19jYXJkYnVzKSB7CisJaWYgKChidXNlcyAmIDB4ZmZmZjAwKSAmJiAhcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpICYmICFpc19jYXJkYnVzICYmICFicm9rZW4pIHsKIAkJdW5zaWduZWQgaW50IGNtYXgsIGJ1c25yOwogCQkvKgogCQkgKiBCdXMgYWxyZWFkeSBjb25maWd1cmVkIGJ5IGZpcm13YXJlLCBwcm9jZXNzIGl0IGluIHRoZSBmaXJzdApAQCAtNjAxLDcgKzUzNSw3IEBACiAJCSAqIGRvIGluIHRoZSBzZWNvbmQgcGFzcy4KIAkJICovCiAJCWlmICghcGFzcykgewotCQkJaWYgKHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSkKKwkJCWlmIChwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgfHwgYnJva2VuKQogCQkJCS8qIFRlbXBvcmFyaWx5IGRpc2FibGUgZm9yd2FyZGluZyBvZiB0aGUKIAkJCQkgICBjb25maWd1cmF0aW9uIGN5Y2xlcyBvbiBhbGwgYnJpZGdlcyBpbgogCQkJCSAgIHRoaXMgYnVzIHNlZ21lbnQgdG8gYXZvaWQgcG9zc2libGUKQEAgLTc2NCw3ICs2OTgsNyBAQAogCWRldi0+Y2xhc3MgPSBjbGFzczsKIAljbGFzcyA+Pj0gODsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiZm91bmQgWyUwNHgvJTA0eF0gY2xhc3MgJTA2eCBoZWFkZXIgdHlwZSAlMDJ4XG4iLAorCWRldl9kYmcoJmRldi0+ZGV2LCAiZm91bmQgWyUwNHg6JTA0eF0gY2xhc3MgJTA2eCBoZWFkZXIgdHlwZSAlMDJ4XG4iLAogCQkgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlLCBjbGFzcywgZGV2LT5oZHJfdHlwZSk7CiAKIAkvKiAiVW5rbm93biBwb3dlciBzdGF0ZSIgKi8KQEAgLTg0Niw2ICs3ODAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcGNpX3JlbGVhc2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGNpX3ZwZF9yZWxlYXNlKGRldik7Cit9CisKIC8qKgogICogcGNpX3JlbGVhc2VfZGV2IC0gZnJlZSBhIHBjaSBkZXZpY2Ugc3RydWN0dXJlIHdoZW4gYWxsIHVzZXJzIG9mIGl0IGFyZSBmaW5pc2hlZC4KICAqIEBkZXY6IGRldmljZSB0aGF0J3MgYmVlbiBkaXNjb25uZWN0ZWQKQEAgLTg1OCw3ICs3OTcsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCiAJcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlwY2lfdnBkX3JlbGVhc2UocGNpX2Rldik7CisJcGNpX3JlbGVhc2VfY2FwYWJpbGl0aWVzKHBjaV9kZXYpOwogCWtmcmVlKHBjaV9kZXYpOwogfQogCkBAIC04ODksOCArODI4LDkgQEAKIGludCBwY2lfY2ZnX3NwYWNlX3NpemVfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIHN0YXR1czsKKwlpbnQgcG9zID0gUENJX0NGR19TUEFDRV9TSVpFOwogCi0JaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDI1NiwgJnN0YXR1cykgIT0gUENJQklPU19TVUNDRVNTRlVMKQorCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZzdGF0dXMpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKIAkJZ290byBmYWlsOwogCWlmIChzdGF0dXMgPT0gMHhmZmZmZmZmZikKIAkJZ290byBmYWlsOwpAQCAtOTM4LDggKzg3OCw2IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5idXNfbGlzdCk7CiAKLQlwY2lfbXNpX2luaXRfcGNpX2RldihkZXYpOwotCiAJcmV0dXJuIGRldjsKIH0KIEVYUE9SVF9TWU1CT0woYWxsb2NfcGNpX2Rldik7CkBAIC05NTEsNiArODg5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqcGNpX3NjYW5fZGV2aWNlKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCBwY2lfc2xvdCAqc2xvdDsKIAl1MzIgbDsKIAl1OCBoZHJfdHlwZTsKIAlpbnQgZGVsYXkgPSAxOwpAQCAtOTk5LDYgKzkzOCwxMCBAQAogCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CiAJc2V0X3BjaWVfcG9ydF90eXBlKGRldik7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZidXMtPnNsb3RzLCBsaXN0KQorCQlpZiAoUENJX1NMT1QoZGV2Zm4pID09IHNsb3QtPm51bWJlcikKKwkJCWRldi0+c2xvdCA9IHNsb3Q7CisKIAkvKiBBc3N1bWUgMzItYml0IFBDSTsgbGV0IDY0LWJpdCBQQ0kgY2FyZHMgKHdoaWNoIGFyZSBmYXIgcmFyZXIpCiAJICAgc2V0IHRoaXMgaGlnaGVyLCBhc3N1bWluZyB0aGUgc3lzdGVtIGV2ZW4gc3VwcG9ydHMgaXQuICAqLwogCWRldi0+ZG1hX21hc2sgPSAweGZmZmZmZmZmOwpAQCAtMTAwNyw5ICs5NTAsMjIgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJcmV0dXJuIGRldjsKK30KKworc3RhdGljIHZvaWQgcGNpX2luaXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyogTVNJL01TSS1YIGxpc3QgKi8KKwlwY2lfbXNpX2luaXRfcGNpX2RldihkZXYpOworCisJLyogUG93ZXIgTWFuYWdlbWVudCAqLworCXBjaV9wbV9pbml0KGRldik7CisKKwkvKiBWaXRhbCBQcm9kdWN0IERhdGEgKi8KIAlwY2lfdnBkX3BjaTIyX2luaXQoZGV2KTsKIAotCXJldHVybiBkZXY7CisJLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCBGb3J3YXJkaW5nICovCisJcGNpX2VuYWJsZV9hcmkoZGV2KTsKIH0KIAogdm9pZCBwY2lfZGV2aWNlX2FkZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQpAQCAtMTAyOCw4ICs5ODQsOCBAQAogCS8qIEZpeCB1cCBicm9rZW4gaGVhZGVycyAqLwogCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2hlYWRlciwgZGV2KTsKIAotCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCBvZiB0aGUgZGV2aWNlICovCi0JcGNpX3BtX2luaXQoZGV2KTsKKwkvKiBJbml0aWFsaXplIHZhcmlvdXMgY2FwYWJpbGl0aWVzICovCisJcGNpX2luaXRfY2FwYWJpbGl0aWVzKGRldik7CiAKIAkvKgogCSAqIEFkZCB0aGUgZGV2aWNlIHRvIG91ciBsaXN0IG9mIGRpc2NvdmVyZWQgZGV2aWNlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCBlODcyYWM5Li45NmNmOGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtMjQsNiArMjQsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgInBjaS5oIgogCitpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CitFWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKK2ludCBwY2lfcGNpX3Byb2JsZW1zOworRVhQT1JUX1NZTUJPTChwY2lfcGNpX3Byb2JsZW1zKTsKK2ludCBwY2llX21jaF9xdWlyazsKK0VYUE9SVF9TWU1CT0wocGNpZV9tY2hfcXVpcmspOworCisjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKIC8qIFRoZSBNZWxsYW5veCBUYXZvciBkZXZpY2UgZ2l2ZXMgZmFsc2UgcG9zaXRpdmUgcGFyaXR5IGVycm9ycwogICogTWFyayB0aGlzIGRldmljZSB3aXRoIGEgYnJva2VuX3Bhcml0eV9zdGF0dXMsIHRvIGFsbG93CiAgKiBQQ0kgc2Nhbm5pbmcgY29kZSB0byAic2tpcCIgdGhpcyBub3cgYmxhY2tsaXN0ZWQgZGV2aWNlLgpAQCAtMzUsNiArNDMsMjAgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTUVMTEFOT1gsUENJX0RFVklDRV9JRF9NRUxMQU5PWF9UQVZPUixxdWlya19tZWxsYW5veF90YXZvcik7CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX01FTExBTk9YLFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfVEFWT1JfQlJJREdFLHF1aXJrX21lbGxhbm94X3Rhdm9yKTsKIAorLyogTWFueSBWSUEgYnJpZGdlcyBzZWVtIHRvIGNvcnJ1cHQgZGF0YSBmb3IgREFDLiBEaXNhYmxlIGl0IGhlcmUgKi8KK2ludCBmb3JiaWRfZGFjIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKGZvcmJpZF9kYWMpOworCitzdGF0aWMgX19kZXZpbml0IHZvaWQgdmlhX25vX2RhYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAmJiBmb3JiaWRfZGFjID09IDApIHsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJIlZJQSBQQ0kgYnJpZGdlIGRldGVjdGVkLiBEaXNhYmxpbmcgREFDLlxuIik7CisJCWZvcmJpZF9kYWMgPSAxOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfQU5ZX0lELCB2aWFfbm9fZGFjKTsKKwogLyogRGVhbCB3aXRoIGJyb2tlbiBCSU9TJ2VzIHRoYXQgbmVnbGVjdCB0byBlbmFibGUgcGFzc2l2ZSByZWxlYXNlLAogICAgd2hpY2ggY2FuIGNhdXNlIHByb2JsZW1zIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIDgyNDQxRlgvUFBybyBNVFJScyAqLwogc3RhdGljIHZvaWQgcXVpcmtfcGFzc2l2ZV9yZWxlYXNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC02Miw4ICs4NCw2IEBACiAgICAgCiAgICAgVGhpcyBhcHBlYXJzIHRvIGJlIEJJT1Mgbm90IHZlcnNpb24gZGVwZW5kZW50LiBTbyBwcmVzdW1hYmx5IHRoZXJlIGlzIGEgCiAgICAgY2hpcHNldCBsZXZlbCBmaXggKi8KLWludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKLUVYUE9SVF9TWU1CT0woaXNhX2RtYV9icmlkZ2VfYnVnZ3kpOwogICAgIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2lzYV9kbWFfaGFuZ3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTg0LDkgKzEwNCw2IEBACiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05FQywJUENJX0RFVklDRV9JRF9ORUNfQ0JVU18yLAlxdWlya19pc2FfZG1hX2hhbmdzKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTkVDLAlQQ0lfREVWSUNFX0lEX05FQ19DQlVTXzMsCXF1aXJrX2lzYV9kbWFfaGFuZ3MpOwogCi1pbnQgcGNpX3BjaV9wcm9ibGVtczsKLUVYUE9SVF9TWU1CT0wocGNpX3BjaV9wcm9ibGVtcyk7Ci0KIC8qCiAgKglDaGlwc2V0cyB3aGVyZSBQQ0ktPlBDSSB0cmFuc2ZlcnMgdmFuaXNoIG9yIGhhbmcKICAqLwpAQCAtMTM2Miw5ICsxMzc5LDYgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMX0VFU1NDLAlxdWlya19hbGRlcl9pb2FwaWMpOwogI2VuZGlmCiAKLWludCBwY2llX21jaF9xdWlyazsKLUVYUE9SVF9TWU1CT0wocGNpZV9tY2hfcXVpcmspOwotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfcGNpZV9tY2goc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJcGNpZV9tY2hfcXVpcmsgPSAxOwpAQCAtMTU1NSw4NCArMTU2OSw2IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OQ1IsIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxMCwgZml4dXBfcmV2MV81M2M4MTApOwogCi1zdGF0aWMgdm9pZCBwY2lfZG9fZml4dXBzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfZml4dXAgKmYsIHN0cnVjdCBwY2lfZml4dXAgKmVuZCkKLXsKLQl3aGlsZSAoZiA8IGVuZCkgewotCQlpZiAoKGYtPnZlbmRvciA9PSBkZXYtPnZlbmRvciB8fCBmLT52ZW5kb3IgPT0gKHUxNikgUENJX0FOWV9JRCkgJiYKLSAJCSAgICAoZi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlIHx8IGYtPmRldmljZSA9PSAodTE2KSBQQ0lfQU5ZX0lEKSkgewotI2lmZGVmIERFQlVHCi0JCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhbGxpbmcgJXBGXG4iLCBmLT5ob29rKTsKLSNlbmRpZgotCQkJZi0+aG9vayhkZXYpOwotCQl9Ci0JCWYrKzsKLQl9Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19lYXJseVtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19lYXJseVtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX2hlYWRlcltdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19oZWFkZXJbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19maW5hbFtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19maW5hbFtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX2VuYWJsZVtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19lbmFibGVbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWVbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfcmVzdW1lW107Ci1leHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfcmVzdW1lX2Vhcmx5W107Ci1leHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX2VuZF9wY2lfZml4dXBzX3Jlc3VtZV9lYXJseVtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX3N1c3BlbmRbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfc3VzcGVuZFtdOwotCi0KLXZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IHBjaV9maXh1cCAqc3RhcnQsICplbmQ7Ci0KLQlzd2l0Y2gocGFzcykgewotCWNhc2UgcGNpX2ZpeHVwX2Vhcmx5OgotCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19lYXJseTsKLQkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19lYXJseTsKLQkJYnJlYWs7Ci0KLQljYXNlIHBjaV9maXh1cF9oZWFkZXI6Ci0JCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX2hlYWRlcjsKLQkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19oZWFkZXI7Ci0JCWJyZWFrOwotCi0JY2FzZSBwY2lfZml4dXBfZmluYWw6Ci0JCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX2ZpbmFsOwotCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX2ZpbmFsOwotCQlicmVhazsKLQotCWNhc2UgcGNpX2ZpeHVwX2VuYWJsZToKLQkJc3RhcnQgPSBfX3N0YXJ0X3BjaV9maXh1cHNfZW5hYmxlOwotCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX2VuYWJsZTsKLQkJYnJlYWs7Ci0KLQljYXNlIHBjaV9maXh1cF9yZXN1bWU6Ci0JCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX3Jlc3VtZTsKLQkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19yZXN1bWU7Ci0JCWJyZWFrOwotCi0JY2FzZSBwY2lfZml4dXBfcmVzdW1lX2Vhcmx5OgotCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWVfZWFybHk7Ci0JCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfcmVzdW1lX2Vhcmx5OwotCQlicmVhazsKLQotCWNhc2UgcGNpX2ZpeHVwX3N1c3BlbmQ6Ci0JCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX3N1c3BlbmQ7Ci0JCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfc3VzcGVuZDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQkvKiBzdHVwaWQgY29tcGlsZXIgd2FybmluZywgeW91IHdvdWxkIHRoaW5rIHdpdGggYW4gZW51bS4uLiAqLwotCQlyZXR1cm47Ci0JfQotCXBjaV9kb19maXh1cHMoZGV2LCBzdGFydCwgZW5kKTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2ZpeHVwX2RldmljZSk7Ci0KIC8qIEVuYWJsZSAxayBJL08gc3BhY2UgZ3JhbnVsYXJpdHkgb24gdGhlIEludGVsIFA2NEgyICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfcDY0aDJfMWtfaW8oc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTIwMDYsMyArMTk0Miw4MiBAQAogCQkJcXVpcmtfbXNpX2ludHhfZGlzYWJsZV9idWcpOwogCiAjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KKworc3RhdGljIHZvaWQgcGNpX2RvX2ZpeHVwcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2ZpeHVwICpmLCBzdHJ1Y3QgcGNpX2ZpeHVwICplbmQpCit7CisJd2hpbGUgKGYgPCBlbmQpIHsKKwkJaWYgKChmLT52ZW5kb3IgPT0gZGV2LT52ZW5kb3IgfHwgZi0+dmVuZG9yID09ICh1MTYpIFBDSV9BTllfSUQpICYmCisgCQkgICAgKGYtPmRldmljZSA9PSBkZXYtPmRldmljZSB8fCBmLT5kZXZpY2UgPT0gKHUxNikgUENJX0FOWV9JRCkpIHsKKwkJCWRldl9kYmcoJmRldi0+ZGV2LCAiY2FsbGluZyAlcEZcbiIsIGYtPmhvb2spOworCQkJZi0+aG9vayhkZXYpOworCQl9CisJCWYrKzsKKwl9Cit9CisKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19lYXJseVtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19lYXJseVtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX2hlYWRlcltdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19oZWFkZXJbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19maW5hbFtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19maW5hbFtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX2VuYWJsZVtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19lbmFibGVbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWVbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfcmVzdW1lW107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfcmVzdW1lX2Vhcmx5W107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX2VuZF9wY2lfZml4dXBzX3Jlc3VtZV9lYXJseVtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX3N1c3BlbmRbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfc3VzcGVuZFtdOworCisKK3ZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHBjaV9maXh1cCAqc3RhcnQsICplbmQ7CisKKwlzd2l0Y2gocGFzcykgeworCWNhc2UgcGNpX2ZpeHVwX2Vhcmx5OgorCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19lYXJseTsKKwkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19lYXJseTsKKwkJYnJlYWs7CisKKwljYXNlIHBjaV9maXh1cF9oZWFkZXI6CisJCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX2hlYWRlcjsKKwkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19oZWFkZXI7CisJCWJyZWFrOworCisJY2FzZSBwY2lfZml4dXBfZmluYWw6CisJCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX2ZpbmFsOworCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX2ZpbmFsOworCQlicmVhazsKKworCWNhc2UgcGNpX2ZpeHVwX2VuYWJsZToKKwkJc3RhcnQgPSBfX3N0YXJ0X3BjaV9maXh1cHNfZW5hYmxlOworCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX2VuYWJsZTsKKwkJYnJlYWs7CisKKwljYXNlIHBjaV9maXh1cF9yZXN1bWU6CisJCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX3Jlc3VtZTsKKwkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19yZXN1bWU7CisJCWJyZWFrOworCisJY2FzZSBwY2lfZml4dXBfcmVzdW1lX2Vhcmx5OgorCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWVfZWFybHk7CisJCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfcmVzdW1lX2Vhcmx5OworCQlicmVhazsKKworCWNhc2UgcGNpX2ZpeHVwX3N1c3BlbmQ6CisJCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX3N1c3BlbmQ7CisJCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfc3VzcGVuZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBzdHVwaWQgY29tcGlsZXIgd2FybmluZywgeW91IHdvdWxkIHRoaW5rIHdpdGggYW4gZW51bS4uLiAqLworCQlyZXR1cm47CisJfQorCXBjaV9kb19maXh1cHMoZGV2LCBzdGFydCwgZW5kKTsKK30KKyNlbHNlCit2b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorI2VuZGlmCitFWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcmVtb3ZlLmMgYi9kcml2ZXJzL3BjaS9yZW1vdmUuYwppbmRleCBiZGMyYTQ0Li4wNDJlMDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9yZW1vdmUuYworKysgYi9kcml2ZXJzL3BjaS9yZW1vdmUuYwpAQCAtNzMsNiArNzMsNyBAQAogCXVwX3dyaXRlKCZwY2lfYnVzX3NlbSk7CiAJcGNpX3JlbW92ZV9sZWdhY3lfZmlsZXMocGNpX2J1cyk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwY2lfYnVzLT5kZXYsICZkZXZfYXR0cl9jcHVhZmZpbml0eSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwY2lfYnVzLT5kZXYsICZkZXZfYXR0cl9jcHVsaXN0YWZmaW5pdHkpOwogCWRldmljZV91bnJlZ2lzdGVyKCZwY2lfYnVzLT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfcmVtb3ZlX2J1cyk7CkBAIC0xMTQsMTMgKzExNSw5IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbCwgKm47CiAKLQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSkgewotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJmRldi0+c3Vib3JkaW5hdGUtPmRldmljZXMpIHsKLQkJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwY2lfZGV2X2IobCk7Ci0KLQkJCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOwotCQl9Ci0JfQorCWlmIChkZXYtPnN1Ym9yZGluYXRlKQorCQlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJmRldi0+c3Vib3JkaW5hdGUtPmRldmljZXMpCisJCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UocGNpX2Rldl9iKGwpKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX3N0b3BfYnVzX2RldmljZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3JvbS5jIGIvZHJpdmVycy9wY2kvcm9tLmMKaW5kZXggYmQ1YzBlMC4uMWY1ZjYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcm9tLmMKKysrIGIvZHJpdmVycy9wY2kvcm9tLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqIGJldHdlZW4gdGhlIFJPTSBhbmQgb3RoZXIgcmVzb3VyY2VzLCBzbyBlbmFibGluZyBpdCBtYXkgZGlzYWJsZSBhY2Nlc3MKICAqIHRvIE1NSU8gcmVnaXN0ZXJzIG9yIG90aGVyIGNhcmQgbWVtb3J5LgogICovCi1zdGF0aWMgaW50IHBjaV9lbmFibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoraW50IHBjaV9lbmFibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2UgKyBQQ0lfUk9NX1JFU09VUkNFOwogCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CkBAIC00NSw3ICs0NSw3IEBACiAgKiBEaXNhYmxlIFJPTSBkZWNvZGluZyBvbiBhIFBDSSBkZXZpY2UgYnkgdHVybmluZyBvZmYgdGhlIGxhc3QgYml0IGluIHRoZQogICogUk9NIEJBUi4KICAqLwotc3RhdGljIHZvaWQgcGNpX2Rpc2FibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQordm9pZCBwY2lfZGlzYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdTMyIHJvbV9hZGRyOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LT5yb21fYmFzZV9yZWcsICZyb21fYWRkcik7CkBAIC0yNjAsMyArMjYwLDUgQEAKIAogRVhQT1JUX1NZTUJPTChwY2lfbWFwX3JvbSk7CiBFWFBPUlRfU1lNQk9MKHBjaV91bm1hcF9yb20pOworRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VuYWJsZV9yb20pOworRVhQT1JUX1NZTUJPTF9HUEwocGNpX2Rpc2FibGVfcm9tKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggNGVkZmM0Ny4uNWFmOGJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmMKKysrIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKQEAgLTE2Niw2ICsxNjYsNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCisJcGNpX2Rldl9nZXQoZnJvbSk7CiAJcGRldiA9IHBjaV9nZXRfc3Vic3lzKHZlbmRvciwgZGV2aWNlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBmcm9tKTsKIAlwY2lfZGV2X3B1dChwZGV2KTsKIAlyZXR1cm4gcGRldjsKQEAgLTI3MCwxMiArMjcxLDggQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAKIAlXQVJOX09OKGluX2ludGVycnVwdCgpKTsKLQlpZiAoZnJvbSkgewotCQkvKiBGSVhNRQotCQkgKiB0YWtlIHRoZSBjYXN0IG9mZiwgd2hlbiBidXNfZmluZF9kZXZpY2UgaXMgbWFkZSBjb25zdC4KLQkJICovCi0JCWRldl9zdGFydCA9IChzdHJ1Y3QgZGV2aWNlICopJmZyb20tPmRldjsKLQl9CisJaWYgKGZyb20pCisJCWRldl9zdGFydCA9ICZmcm9tLT5kZXY7CiAJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZwY2lfYnVzX3R5cGUsIGRldl9zdGFydCwgKHZvaWQgKilpZCwKIAkJCSAgICAgIG1hdGNoX3BjaV9kZXZfYnlfaWQpOwogCWlmIChkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IGQ1ZTIxMDYuLmVhOTc5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAogCQkJaWYgKHItPnBhcmVudCB8fCAhKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykpCiAJCQkJY29udGludWU7Ci0JCQlyX3NpemUgPSByLT5lbmQgLSByLT5zdGFydCArIDE7CisJCQlyX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOwogCiAJCQlpZiAocl9zaXplIDwgMHg0MDApCiAJCQkJLyogTWlnaHQgYmUgcmUtYWxpZ25lZCBmb3IgSVNBICovCkBAIC0zNTAsMTYgKzM1MCwxMyBAQAogCiAJCQlpZiAoci0+cGFyZW50IHx8IChyLT5mbGFncyAmIG1hc2spICE9IHR5cGUpCiAJCQkJY29udGludWU7Ci0JCQlyX3NpemUgPSByLT5lbmQgLSByLT5zdGFydCArIDE7CisJCQlyX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOwogCQkJLyogRm9yIGJyaWRnZXMgc2l6ZSAhPSBhbGlnbm1lbnQgKi8KIAkJCWFsaWduID0gcmVzb3VyY2VfYWxpZ25tZW50KHIpOwogCQkJb3JkZXIgPSBfX2ZmcyhhbGlnbikgLSAyMDsKIAkJCWlmIChvcmRlciA+IDExKSB7CiAJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQkFSICVkIGJhZCBhbGlnbm1lbnQgJWxseDogIgotCQkJCSAgICAgICAiJSMwMTZsbHgtJSMwMTZsbHhcbiIsIGksCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+c3RhcnQsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kKTsKKwkJCQkJICIlcFJcbiIsIGksICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sIHIpOwogCQkJCXItPmZsYWdzID0gMDsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTUzOSwxMSArNTM2LDkgQEAKICAgICAgICAgICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0JCXByaW50ayhLRVJOX0lORk8gImJ1czogJTAyeCBpbmRleCAleCAlczogWyVsbHgsICVsbHhdXG4iLAotCQkJYnVzLT5udW1iZXIsIGksCi0JCQkocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gImlvIHBvcnQiIDogIm1taW8iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYnVzOiAlMDJ4IGluZGV4ICV4ICVzOiAlcFJcbiIsCisJCSAgICAgICBidXMtPm51bWJlciwgaSwKKwkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCIgOiAibW1pbyIsIHJlcyk7CiAgICAgICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCAxYTVmYzgzLi4yZGJkOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtNDksMTAgKzQ5LDggQEAKIAogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGRldiwgJnJlZ2lvbiwgcmVzKTsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzIFslI2xseC0lI2xseF0gYnVzIFslI2xseC0lI2xseF0gIgotCQkiZmxhZ3MgJSNseFxuIiwgcmVzbm8sCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAorCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzICVwUiBidXMgWyUjbGx4LSUjbGx4XSAiCisJCSJmbGFncyAlI2x4XG4iLCByZXNubywgcmVzLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWdpb24uc3RhcnQsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi5lbmQsCiAJCSAodW5zaWduZWQgbG9uZylyZXMtPmZsYWdzKTsKQEAgLTExNCwxMyArMTEyLDExIEBACiAJCWVyciA9IGluc2VydF9yZXNvdXJjZShyb290LCByZXMpOwogCiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogJXMgb2YgJXMgWyUjbGx4LSUjbGx4XVxuIiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6ICVzIG9mICVzICVwUlxuIiwKIAkJCXJlc291cmNlLAogCQkJcm9vdCA/ICJhZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiIgOgogCQkJCSJubyBwYXJlbnQgZm91bmQgZm9yIiwKLQkJCWR0eXBlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCQlkdHlwZSwgcmVzKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTMzLDE1ICsxMjksMTQgQEAKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgbWluLCBhbGlnbjsKIAlpbnQgcmV0OwogCi0Jc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAltaW4gPSAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gUENJQklPU19NSU5fSU8gOiBQQ0lCSU9TX01JTl9NRU07CiAKIAlhbGlnbiA9IHJlc291cmNlX2FsaWdubWVudChyZXMpOwogCWlmICghYWxpZ24pIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlIHJlc291cmNlIChib2d1cyAiCi0JCQkiYWxpZ25tZW50KSBbJSNsbHgtJSNsbHhdIGZsYWdzICUjbHhcbiIsCi0JCQlyZXNubywgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCwgcmVzLT5mbGFncyk7CisJCQkiYWxpZ25tZW50KSAlcFIgZmxhZ3MgJSNseFxuIiwKKwkJCXJlc25vLCByZXMsIHJlcy0+ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE2MiwxMSArMTU3LDggQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAiCi0JCQkiWyUjbGx4LSUjbGx4XVxuIiwgcmVzbm8sCi0JCQlyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKKwkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7CiAJfSBlbHNlIHsKIAkJcmVzLT5mbGFncyAmPSB+SU9SRVNPVVJDRV9TVEFSVEFMSUdOOwogCQlpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykKQEAgLTIwMiwxMSArMTk0LDggQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAiCi0JCQkiWyUjbGx4LSUjbGx4XG5dIiwgcmVzbm8sCi0JCQlyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKKwkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7CiAJfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7CiAJCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXMsIHJlc25vKTsKIAl9CkBAIC0yMzcsOSArMjI2LDggQEAKIAkJcl9hbGlnbiA9IHJlc291cmNlX2FsaWdubWVudChyKTsKIAkJaWYgKCFyX2FsaWduKSB7CiAJCQlkZXZfd2FybigmZGV2LT5kZXYsICJCQVIgJWQ6IGJvZ3VzIGFsaWdubWVudCAiCi0JCQkJIlslI2xseC0lI2xseF0gZmxhZ3MgJSNseFxuIiwKLQkJCQlpLCAodW5zaWduZWQgbG9uZyBsb25nKXItPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kLCByLT5mbGFncyk7CisJCQkJIiVwUiBmbGFncyAlI2x4XG4iLAorCQkJCWksIHIsIHItPmZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWZvciAobGlzdCA9IGhlYWQ7IDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKQEAgLTI4Nyw5ICsyNzUsNyBAQAogCiAJCWlmICghci0+cGFyZW50KSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgImRldmljZSBub3QgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgIgotCQkJCSJCQVIgJWQgWyUjbGx4LSUjbGx4XSBjb2xsaXNpb25zXG4iLCBpLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHItPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHItPmVuZCk7CisJCQkJIkJBUiAlZCAlcFIgY29sbGlzaW9uc1xuIiwgaSwgcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zbG90LmMgYi9kcml2ZXJzL3BjaS9zbG90LmMKaW5kZXggN2U1Yjg1Yy4uNGRkMWMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2xvdC5jCisrKyBiL2RyaXZlcnMvcGNpL3Nsb3QuYwpAQCAtNDksMTEgKzQ5LDE2IEBACiAKIHN0YXRpYyB2b2lkIHBjaV9zbG90X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QgPSB0b19wY2lfc2xvdChrb2JqKTsKIAogCXByX2RlYnVnKCIlczogcmVsZWFzaW5nIHBjaV9zbG90IG9uICV4OiVkXG4iLCBfX2Z1bmNfXywKIAkJIHNsb3QtPmJ1cy0+bnVtYmVyLCBzbG90LT5udW1iZXIpOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzbG90LT5idXMtPmRldmljZXMsIGJ1c19saXN0KQorCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gc2xvdC0+bnVtYmVyKQorCQkJZGV2LT5zbG90ID0gTlVMTDsKKwogCWxpc3RfZGVsKCZzbG90LT5saXN0KTsKIAogCWtmcmVlKHNsb3QpOwpAQCAtNzMsMTggKzc4LDEwMCBAQAogCS5kZWZhdWx0X2F0dHJzID0gcGNpX3Nsb3RfZGVmYXVsdF9hdHRycywKIH07CiAKK3N0YXRpYyBjaGFyICptYWtlX3Nsb3RfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKm5ld19uYW1lOworCWludCBsZW4sIG1heCwgZHVwOworCisJbmV3X25hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOworCWlmICghbmV3X25hbWUpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgaGl0IHRoZSByZWFsbG9jIGNhc2UgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCB0aGUKKwkgKiBsb29wLiAgJ2xlbicgd2lsbCBiZSBzdHJsZW4obmFtZSkgKyAzIGF0IHRoYXQgcG9pbnQgd2hpY2ggaXMKKwkgKiBlbm91Z2ggc3BhY2UgZm9yICJuYW1lLVgiIGFuZCB0aGUgdHJhaWxpbmcgTlVMLgorCSAqLworCWxlbiA9IHN0cmxlbihuYW1lKSArIDI7CisJbWF4ID0gMTsKKwlkdXAgPSAxOworCisJZm9yICg7OykgeworCQlzdHJ1Y3Qga29iamVjdCAqZHVwX3Nsb3Q7CisJCWR1cF9zbG90ID0ga3NldF9maW5kX29iaihwY2lfc2xvdHNfa3NldCwgbmV3X25hbWUpOworCQlpZiAoIWR1cF9zbG90KQorCQkJYnJlYWs7CisJCWtvYmplY3RfcHV0KGR1cF9zbG90KTsKKwkJaWYgKGR1cCA9PSBtYXgpIHsKKwkJCWxlbisrOworCQkJbWF4ICo9IDEwOworCQkJa2ZyZWUobmV3X25hbWUpOworCQkJbmV3X25hbWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5ld19uYW1lKQorCQkJCWJyZWFrOworCQl9CisJCXNwcmludGYobmV3X25hbWUsICIlcy0lZCIsIG5hbWUsIGR1cCsrKTsKKwl9CisKKwlyZXR1cm4gbmV3X25hbWU7Cit9CisKK3N0YXRpYyBpbnQgcmVuYW1lX3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCByZXN1bHQgPSAwOworCWNoYXIgKnNsb3RfbmFtZTsKKworCWlmIChzdHJjbXAocGNpX3Nsb3RfbmFtZShzbG90KSwgbmFtZSkgPT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXNsb3RfbmFtZSA9IG1ha2Vfc2xvdF9uYW1lKG5hbWUpOworCWlmICghc2xvdF9uYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlc3VsdCA9IGtvYmplY3RfcmVuYW1lKCZzbG90LT5rb2JqLCBzbG90X25hbWUpOworCWtmcmVlKHNsb3RfbmFtZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHBjaV9zbG90ICpnZXRfc2xvdChzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBpbnQgc2xvdF9ucikKK3sKKwlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3Q7CisJLyoKKwkgKiBXZSBhbHJlYWR5IGhvbGQgcGNpX2J1c19zZW0gc28gZG9uJ3Qgd29ycnkKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZwYXJlbnQtPnNsb3RzLCBsaXN0KQorCQlpZiAoc2xvdC0+bnVtYmVyID09IHNsb3RfbnIpIHsKKwkJCWtvYmplY3RfZ2V0KCZzbG90LT5rb2JqKTsKKwkJCXJldHVybiBzbG90OworCQl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBwY2lfY3JlYXRlX3Nsb3QgLSBjcmVhdGUgb3IgaW5jcmVtZW50IHJlZmNvdW50IGZvciBwaHlzaWNhbCBQQ0kgc2xvdAogICogQHBhcmVudDogc3RydWN0IHBjaV9idXMgb2YgcGFyZW50IGJyaWRnZQogICogQHNsb3RfbnI6IFBDSV9TTE9UKHBjaV9kZXYtPmRldmZuKSBvciAtMSBmb3IgcGxhY2Vob2xkZXIKICAqIEBuYW1lOiB1c2VyIHZpc2libGUgc3RyaW5nIHByZXNlbnRlZCBpbiAvc3lzL2J1cy9wY2kvc2xvdHMvPG5hbWU+CisgKiBAaG90cGx1Zzogc2V0IGlmIGNhbGxlciBpcyBob3RwbHVnIGRyaXZlciwgTlVMTCBvdGhlcndpc2UKICAqCiAgKiBQQ0kgc2xvdHMgaGF2ZSBmaXJzdCBjbGFzcyBhdHRyaWJ1dGVzIHN1Y2ggYXMgYWRkcmVzcywgc3BlZWQsIHdpZHRoLAogICogYW5kIGEgJnN0cnVjdCBwY2lfc2xvdCBpcyB1c2VkIHRvIG1hbmFnZSB0aGVtLiBUaGlzIGludGVyZmFjZSB3aWxsCiAgKiBlaXRoZXIgcmV0dXJuIGEgbmV3ICZzdHJ1Y3QgcGNpX3Nsb3QgdG8gdGhlIGNhbGxlciwgb3IgaWYgdGhlIHBjaV9zbG90CiAgKiBhbHJlYWR5IGV4aXN0cywgaXRzIHJlZmNvdW50IHdpbGwgYmUgaW5jcmVtZW50ZWQuCiAgKgotICogU2xvdHMgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgYSBAcGNpX2J1cywgQHNsb3RfbnIsIEBuYW1lIHR1cGxlLgorICogU2xvdHMgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgYSBAcGNpX2J1cywgQHNsb3RfbnIgdHVwbGUuCisgKgorICogVGhlcmUgYXJlIGtub3duIHBsYXRmb3JtcyB3aXRoIGJyb2tlbiBmaXJtd2FyZSB0aGF0IGFzc2lnbiB0aGUgc2FtZQorICogbmFtZSB0byBtdWx0aXBsZSBzbG90cy4gV29ya2Fyb3VuZCB0aGVzZSBicm9rZW4gcGxhdGZvcm1zIGJ5IHJlbmFtaW5nCisgKiB0aGUgc2xvdHMgb24gYmVoYWxmIG9mIHRoZSBjYWxsZXIuIElmIGZpcm13YXJlIGFzc2lnbnMgbmFtZSBOIHRvCisgKiBtdWx0aXBsZSBzbG90czoKKyAqCisgKiBUaGUgZmlyc3Qgc2xvdCBpcyBhc3NpZ25lZCBOCisgKiBUaGUgc2Vjb25kIHNsb3QgaXMgYXNzaWduZWQgTi0xCisgKiBUaGUgdGhpcmQgc2xvdCBpcyBhc3NpZ25lZCBOLTIKKyAqIGV0Yy4KICAqCiAgKiBQbGFjZWhvbGRlciBzbG90czoKICAqIEluIG1vc3QgY2FzZXMsIEBwY2lfYnVzLCBAc2xvdF9uciB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gdW5pcXVlbHkgaWRlbnRpZnkKQEAgLTkzLDcxICsxODAsODIgQEAKICAqIHRoZSBzbG90LiBJbiB0aGlzIHNjZW5hcmlvLCB0aGUgY2FsbGVyIG1heSBwYXNzIC0xIGZvciBAc2xvdF9uci4KICAqCiAgKiBUaGUgZm9sbG93aW5nIHNlbWFudGljcyBhcmUgaW1wb3NlZCB3aGVuIHRoZSBjYWxsZXIgcGFzc2VzIEBzbG90X25yID09Ci0gKiAtMS4gRmlyc3QsIHRoZSBjaGVjayBmb3IgZXhpc3RpbmcgJXN0cnVjdCBwY2lfc2xvdCBpcyBza2lwcGVkLCBhcyB0aGUKLSAqIGNhbGxlciBtYXkga25vdyBhYm91dCBzZXZlcmFsIHVucG9wdWxhdGVkIHNsb3RzIG9uIGEgZ2l2ZW4gJXN0cnVjdAotICogcGNpX2J1cywgYW5kIGVhY2ggc2xvdCB3b3VsZCBoYXZlIGEgQHNsb3RfbnIgb2YgLTEuICBVbmlxdWVuZXNzIGZvcgotICogdGhlc2Ugc2xvdHMgaXMgdGhlbiBkZXRlcm1pbmVkIGJ5IHRoZSBAbmFtZSBwYXJhbWV0ZXIuIFdlIGV4cGVjdAotICoga29iamVjdF9pbml0X2FuZF9hZGQoKSB0byB3YXJuIHVzIGlmIHRoZSBjYWxsZXIgYXR0ZW1wdHMgdG8gY3JlYXRlCi0gKiBtdWx0aXBsZSBzbG90cyB3aXRoIHRoZSBzYW1lIG5hbWUuIFRoZSBvdGhlciBjaGFuZ2UgaW4gc2VtYW50aWNzIGlzCisgKiAtMS4gRmlyc3QsIHdlIG5vIGxvbmdlciBjaGVjayBmb3IgYW4gZXhpc3RpbmcgJXN0cnVjdCBwY2lfc2xvdCwgYXMgdGhlcmUKKyAqIG1heSBiZSBtYW55IHNsb3RzIHdpdGggQHNsb3RfbnIgb2YgLTEuICBUaGUgb3RoZXIgY2hhbmdlIGluIHNlbWFudGljcyBpcwogICogdXNlci12aXNpYmxlLCB3aGljaCBpcyB0aGUgJ2FkZHJlc3MnIHBhcmFtZXRlciBwcmVzZW50ZWQgaW4gc3lzZnMgd2lsbAogICogY29uc2lzdCBzb2xlbHkgb2YgYSBkZGRkOmJiIHR1cGxlLCB3aGVyZSBkZGRkIGlzIHRoZSBQQ0kgZG9tYWluIG9mIHRoZQogICogJXN0cnVjdCBwY2lfYnVzIGFuZCBiYiBpcyB0aGUgYnVzIG51bWJlci4gSW4gb3RoZXIgd29yZHMsIHRoZSBkZXZmbiBvZgogICogdGhlICdwbGFjZWhvbGRlcicgc2xvdCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuCiAgKi8KLQogc3RydWN0IHBjaV9zbG90ICpwY2lfY3JlYXRlX3Nsb3Qoc3RydWN0IHBjaV9idXMgKnBhcmVudCwgaW50IHNsb3RfbnIsCi0JCQkJIGNvbnN0IGNoYXIgKm5hbWUpCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWcpCiB7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3Q7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKKwljaGFyICpzbG90X25hbWUgPSBOVUxMOwogCiAJZG93bl93cml0ZSgmcGNpX2J1c19zZW0pOwogCiAJaWYgKHNsb3RfbnIgPT0gLTEpCiAJCWdvdG8gcGxhY2Vob2xkZXI7CiAKLQkvKiBJZiB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQgdGhpcyBzbG90LCBidW1wIHJlZmNvdW50IGFuZCByZXR1cm4uICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmcGFyZW50LT5zbG90cywgbGlzdCkgewotCQlpZiAoc2xvdC0+bnVtYmVyID09IHNsb3RfbnIpIHsKLQkJCWtvYmplY3RfZ2V0KCZzbG90LT5rb2JqKTsKLQkJCXByX2RlYnVnKCIlczogaW5jIHJlZmNvdW50IHRvICVkIG9uICUwNHg6JTAyeDolMDJ4XG4iLAotCQkJCSBfX2Z1bmNfXywKLQkJCQkgYXRvbWljX3JlYWQoJnNsb3QtPmtvYmoua3JlZi5yZWZjb3VudCksCi0JCQkJIHBjaV9kb21haW5fbnIocGFyZW50KSwgcGFyZW50LT5udW1iZXIsCi0JCQkJIHNsb3RfbnIpOwotCQkJZ290byBvdXQ7CisJLyoKKwkgKiBIb3RwbHVnIGRyaXZlcnMgYXJlIGFsbG93ZWQgdG8gcmVuYW1lIGFuIGV4aXN0aW5nIHNsb3QsCisJICogYnV0IG9ubHkgaWYgbm90IGFscmVhZHkgY2xhaW1lZC4KKwkgKi8KKwlzbG90ID0gZ2V0X3Nsb3QocGFyZW50LCBzbG90X25yKTsKKwlpZiAoc2xvdCkgeworCQlpZiAoaG90cGx1ZykgeworCQkJaWYgKChlcnIgPSBzbG90LT5ob3RwbHVnID8gLUVCVVNZIDogMCkKKwkJCSAgICAgfHwgKGVyciA9IHJlbmFtZV9zbG90KHNsb3QsIG5hbWUpKSkgeworCQkJCWtvYmplY3RfcHV0KCZzbG90LT5rb2JqKTsKKwkJCQlzbG90ID0gTlVMTDsKKwkJCQlnb3RvIGVycjsKKwkJCX0KIAkJfQorCQlnb3RvIG91dDsKIAl9CiAKIHBsYWNlaG9sZGVyOgogCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOwogCWlmICghc2xvdCkgewotCQlzbG90ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBvdXQ7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOwogCX0KIAogCXNsb3QtPmJ1cyA9IHBhcmVudDsKIAlzbG90LT5udW1iZXIgPSBzbG90X25yOwogCiAJc2xvdC0+a29iai5rc2V0ID0gcGNpX3Nsb3RzX2tzZXQ7Ci0JZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoJnNsb3QtPmtvYmosICZwY2lfc2xvdF9rdHlwZSwgTlVMTCwKLQkJCQkgICAiJXMiLCBuYW1lKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIGtvYmplY3QgJXNcbiIsIG5hbWUpOworCisJc2xvdF9uYW1lID0gbWFrZV9zbG90X25hbWUobmFtZSk7CisJaWYgKCFzbG90X25hbWUpIHsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnI7CiAJfQogCisJZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoJnNsb3QtPmtvYmosICZwY2lfc2xvdF9rdHlwZSwgTlVMTCwKKwkJCQkgICAiJXMiLCBzbG90X25hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCiAJSU5JVF9MSVNUX0hFQUQoJnNsb3QtPmxpc3QpOwogCWxpc3RfYWRkKCZzbG90LT5saXN0LCAmcGFyZW50LT5zbG90cyk7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnBhcmVudC0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSBzbG90X25yKQorCQkJZGV2LT5zbG90ID0gc2xvdDsKKwogCS8qIERvbid0IGNhcmUgaWYgZGVidWcgcHJpbnRrIGhhcyBhIC0xIGZvciBzbG90X25yICovCiAJcHJfZGVidWcoIiVzOiBjcmVhdGVkIHBjaV9zbG90IG9uICUwNHg6JTAyeDolMDJ4XG4iLAogCQkgX19mdW5jX18sIHBjaV9kb21haW5fbnIocGFyZW50KSwgcGFyZW50LT5udW1iZXIsIHNsb3RfbnIpOwogCi0gb3V0Ogorb3V0OgogCXVwX3dyaXRlKCZwY2lfYnVzX3NlbSk7CiAJcmV0dXJuIHNsb3Q7Ci0gZXJyOgorZXJyOgogCWtmcmVlKHNsb3QpOwogCXNsb3QgPSBFUlJfUFRSKGVycik7CiAJZ290byBvdXQ7CkBAIC0xNjUsNyArMjYzLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9jcmVhdGVfc2xvdCk7CiAKIC8qKgotICogcGNpX3VwZGF0ZV9zbG90X251bWJlciAtIHVwZGF0ZSAlc3RydWN0IHBjaV9zbG90IC0+IG51bWJlcgorICogcGNpX3JlbnVtYmVyX3Nsb3QgLSB1cGRhdGUgJXN0cnVjdCBwY2lfc2xvdCAtPiBudW1iZXIKICAqIEBzbG90IC0gJXN0cnVjdCBwY2lfc2xvdCB0byB1cGRhdGUKICAqIEBzbG90X25yIC0gbmV3IG51bWJlciBmb3Igc2xvdAogICoKQEAgLTE3MywyNyArMjcxLDIyIEBACiAgKiBjcmVhdGVkIGEgcGxhY2Vob2xkZXIgc2xvdCBpbiBwY2lfY3JlYXRlX3Nsb3QoKSBieSBwYXNzaW5nIGEgLTEgYXMKICAqIHNsb3RfbnIsIHRvIHVwZGF0ZSB0aGVpciAlc3RydWN0IHBjaV9zbG90IHdpdGggdGhlIGNvcnJlY3QgQHNsb3RfbnIuCiAgKi8KLQotdm9pZCBwY2lfdXBkYXRlX3Nsb3RfbnVtYmVyKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgaW50IHNsb3RfbnIpCit2b2lkIHBjaV9yZW51bWJlcl9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgaW50IHNsb3RfbnIpCiB7Ci0JaW50IG5hbWVfY291bnQgPSAwOwogCXN0cnVjdCBwY2lfc2xvdCAqdG1wOwogCiAJZG93bl93cml0ZSgmcGNpX2J1c19zZW0pOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZzbG90LT5idXMtPnNsb3RzLCBsaXN0KSB7CiAJCVdBUk5fT04odG1wLT5udW1iZXIgPT0gc2xvdF9ucik7Ci0JCWlmICghc3RyY21wKGtvYmplY3RfbmFtZSgmdG1wLT5rb2JqKSwga29iamVjdF9uYW1lKCZzbG90LT5rb2JqKSkpCi0JCQluYW1lX2NvdW50Kys7CisJCWdvdG8gb3V0OwogCX0KIAotCWlmIChuYW1lX2NvdW50ID4gMSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNpX3VwZGF0ZV9zbG90X251bWJlciBmb3VuZCAlZCBzbG90cyB3aXRoIHRoZSBzYW1lIG5hbWU6ICVzXG4iLCBuYW1lX2NvdW50LCBrb2JqZWN0X25hbWUoJnNsb3QtPmtvYmopKTsKLQogCXNsb3QtPm51bWJlciA9IHNsb3RfbnI7CitvdXQ6CiAJdXBfd3JpdGUoJnBjaV9idXNfc2VtKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaV91cGRhdGVfc2xvdF9udW1iZXIpOworRVhQT1JUX1NZTUJPTF9HUEwocGNpX3JlbnVtYmVyX3Nsb3QpOwogCiAvKioKICAqIHBjaV9kZXN0cm95X3Nsb3QgLSBkZWNyZW1lbnQgcmVmY291bnQgZm9yIHBoeXNpY2FsIFBDSSBzbG90CkBAIC0yMDMsNyArMjk2LDYgQEAKICAqIGp1c3QgY2FsbCBrb2JqZWN0X3B1dCBvbiBpdHMga29iaiBhbmQgbGV0IG91ciByZWxlYXNlIG1ldGhvZHMgZG8gdGhlCiAgKiByZXN0LgogICovCi0KIHZvaWQgcGNpX2Rlc3Ryb3lfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCiB7CiAJcHJfZGVidWcoIiVzOiBkZWMgcmVmY291bnQgdG8gJWQgb24gJTA0eDolMDJ4OiUwMnhcbiIsIF9fZnVuY19fLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCBiNDZjNjBiLi4yM2U0OTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtNzAsNyArNzAsNyBAQAogcHhhMnh4LW9iai0kKENPTkZJR19QWEFfU0hBUlBTTCkJCSs9IHB4YTJ4eF9zaGFycHNsLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9BUk1DT1JFKQkJKz0gcHhhMnh4X2NtX3gyeHhfY3MubwogcHhhMnh4LW9iai0kKENPTkZJR19BUkNIX1ZJUEVSKQkJCSs9IHB4YTJ4eF92aXBlci5vCi1weGEyeHgtb2JqLSQoQ09ORklHX1RSSVpFUFNfUENNQ0lBKQkJKz0gcHhhMnh4X3RyaXplcHMubworcHhhMnh4LW9iai0kKENPTkZJR19UUklaRVBTX1BDTUNJQSkJCSs9IHB4YTJ4eF90cml6ZXBzNC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkJKz0gcHhhMnh4X3BhbG10eC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTUxEKQkJKz0gcHhhMnh4X3BhbG1sZC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwppbmRleCBhMGZmYjhlLi45ZTExNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCkBAIC0yNzMsNyArMjczLDcgQEAKIAkJCWdvdG8gZmFpbDBkOwogCQljZi0+c29ja2V0LnBjaV9pcnEgPSBib2FyZC0+aXJxX3BpbjsKIAl9IGVsc2UKLQkJY2YtPnNvY2tldC5wY2lfaXJxID0gTlJfSVJRUyArIDE7CisJCWNmLT5zb2NrZXQucGNpX2lycSA9IG5yX2lycXMgKyAxOwogCiAJLyogcGNtY2lhIGxheWVyIG9ubHkgcmVtYXBzICJyZWFsIiBtZW1vcnkgbm90IGlvc3BhY2UgKi8KIAljZi0+c29ja2V0LmlvX29mZnNldCA9ICh1bnNpZ25lZCBsb25nKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jIGIvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jCmluZGV4IDExN2RjMTIuLjllZjY5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2hkNjQ0NjVfc3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMKQEAgLTIzMywxNSArMjMzLDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGhzX21hcF9pcnEoaHNfc29ja2V0X3QgKnNwLCB1bnNpZ25lZCBpbnQgaXJxKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwogICAgIAlEUFJJTlRLKCJoc19tYXBfaXJxKHNvY2s9JWQgaXJxPSVkKVxuIiwgc3AtPm51bWJlciwgaXJxKTsKIAkKIAlpZiAoaXJxID49IEhTX05VTV9NQVBQRURfSVJRUykKIAkgICAgcmV0dXJuOwogCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAgICAgCWhzX21hcHBlZF9pcnFbaXJxXS5zb2NrID0gc3A7CiAJLyogaW5zZXJ0IG91cnNlbHZlcyBhcyB0aGUgaXJxIGNvbnRyb2xsZXIgKi8KLQloc19tYXBwZWRfaXJxW2lycV0ub2xkX2hhbmRsZXIgPSBpcnFfZGVzY1tpcnFdLmNoaXA7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwID0gJmhkNjQ0NjVfc3NfaXJxX3R5cGU7CisJaHNfbWFwcGVkX2lycVtpcnFdLm9sZF9oYW5kbGVyID0gZGVzYy0+Y2hpcDsKKwlkZXNjLT5jaGlwID0gJmhkNjQ0NjVfc3NfaXJxX3R5cGU7CiB9CiAKIApAQCAtMjUwLDEzICsyNTMsMTYgQEAKICAqLwogc3RhdGljIHZvaWQgaHNfdW5tYXBfaXJxKGhzX3NvY2tldF90ICpzcCwgdW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKICAgICAJRFBSSU5USygiaHNfdW5tYXBfaXJxKHNvY2s9JWQgaXJxPSVkKVxuIiwgc3AtPm51bWJlciwgaXJxKTsKIAkKIAlpZiAoaXJxID49IEhTX05VTV9NQVBQRURfSVJRUykKIAkgICAgcmV0dXJuOwogCQkKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBpcnEgY29udHJvbGxlciAqLwotCWlycV9kZXNjW2lycV0uY2hpcCA9IGhzX21hcHBlZF9pcnFbaXJxXS5vbGRfaGFuZGxlcjsKKwlkZXNjLT5jaGlwID0gaHNfbWFwcGVkX2lycVtpcnFdLm9sZF9oYW5kbGVyOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCmluZGV4IGVlZTJmMWMuLmIyYzQxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCkBAIC02MzksNyArNjM5LDcgQEAKIAkJaW50IGlycTsKIAkJb3B0aW9ucyArPSA0OwogCQlpcnEgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCAmb3B0aW9ucywgMCk7Ci0JCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBOUl9JUlFTKQorCQlpZiAoaXJxID49IDAgJiYgaXJxIDwgbnJfaXJxcykKIAkJCXZyYzQxNzFfaXJxID0gaXJxOwogCiAJCWlmICgqb3B0aW9ucyAhPSAnLCcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9LY29uZmlnIGIvZHJpdmVycy9wbnAvS2NvbmZpZwppbmRleCA4MjE5MzNmLi4yYTM3YjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG5wL0tjb25maWcKQEAgLTIwLDEzICsyMCwyMSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCi1pZiBQTlAKLQotY29uZmlnIFBOUF9ERUJVRwotCWJvb2wgIlBuUCBEZWJ1ZyBNZXNzYWdlcyIKK2NvbmZpZyBQTlBfREVCVUdfTUVTU0FHRVMKKwlkZWZhdWx0IHkKKwlib29sICJQTlAgZGVidWdnaW5nIG1lc3NhZ2VzIgorCWRlcGVuZHMgb24gUE5QCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdGhlIFBsdWcgYW5kIFBsYXkgTGF5ZXIgdG8gcHJpbnQgZGVidWcgbWVzc2FnZXMuCi0JICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIGRldmVsb3BpbmcgYSBQblAgZHJpdmVyIG9yIHRyb3VibGVzaG9vdGluZy4KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIFBOUCBsYXllciB0byBiZSBhYmxlIHRvIHByb2R1Y2UgZGVidWdnaW5nCisJICBtZXNzYWdlcyBpZiBuZWVkZWQuICBUaGUgbWVzc2FnZXMgY2FuIGJlIGVuYWJsZWQgYXQgYm9vdC10aW1lIHdpdGgKKwkgIHRoZSBwbnAuZGVidWcga2VybmVsIHBhcmFtZXRlci4KKworCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzYXZlIGEgYml0IG9mIHNwYWNlIGlmIHlvdSBkbyBub3Qgd2FudAorCSAgdGhlIG1lc3NhZ2VzIHRvIGV2ZW4gYmUgYnVpbHQgaW50byB0aGUga2VybmVsLgorCisJICBJZiB5b3UgaGF2ZSBhbnkgZG91YnRzIGFib3V0IHRoaXMsIHNheSBZIGhlcmUuCisKK2lmIFBOUAogCiBjb21tZW50ICJQcm90b2NvbHMiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL01ha2VmaWxlIGIvZHJpdmVycy9wbnAvTWFrZWZpbGUKaW5kZXggZTgzZjM0Zi4uOGRlMzc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wbnAvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDMgQEAKIAogIyBwbnBfc3lzdGVtX2luaXQgZ29lcyBhZnRlciBwbnBhY3BpL3BucGJpb3MgaW5pdAogb2JqLXkJCQkJKz0gc3lzdGVtLm8KLQotaWZlcSAoJChDT05GSUdfUE5QX0RFQlVHKSx5KQotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9iYXNlLmggYi9kcml2ZXJzL3BucC9iYXNlLmgKaW5kZXggM2I4YjlkMy4uMGI4ZDE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvYmFzZS5oCisrKyBiL2RyaXZlcnMvcG5wL2Jhc2UuaApAQCAtMTY2LDMgKzE2NiwxMyBAQAogc3RydWN0IHBucF9yZXNvdXJjZSAqcG5wX2FkZF9tZW1fcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKmRldiwKIAkJCQkJICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IGVuZCwgaW50IGZsYWdzKTsKKworZXh0ZXJuIGludCBwbnBfZGVidWc7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTlBfREVCVUdfTUVTU0FHRVMpCisjZGVmaW5lIHBucF9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKKwkoeyBpZiAocG5wX2RlYnVnKSBkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjIyBhcmcpOyAwOyB9KQorI2Vsc2UKKyNkZWZpbmUgcG5wX2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCSh7IGlmICgwKSBkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjIyBhcmcpOyAwOyB9KQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9jb3JlLmMgYi9kcml2ZXJzL3BucC9jb3JlLmMKaW5kZXggODE3ZmU2Mi4uMTZjMDFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL2NvcmUuYwpAQCAtMTc3LDYgKzE3Nyw5IEBACiBpbnQgcG5wX2FkZF9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldikKIHsKIAlpbnQgcmV0OworCWNoYXIgYnVmWzEyOF07CisJaW50IGxlbiA9IDA7CisJc3RydWN0IHBucF9pZCAqaWQ7CiAKIAlpZiAoZGV2LT5jYXJkKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4NSwxNyArMTg4LDEyIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19QTlBfREVCVUcKLQl7Ci0JCXN0cnVjdCBwbnBfaWQgKmlkOworCWJ1ZlswXSA9ICdcMCc7CisJZm9yIChpZCA9IGRldi0+aWQ7IGlkOyBpZCA9IGlkLT5uZXh0KQorCQlsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICIgJXMiLCBpZC0+aWQpOwogCi0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiJXMgZGV2aWNlLCBJRHMiLAotCQkJZGV2LT5wcm90b2NvbC0+bmFtZSk7Ci0JCWZvciAoaWQgPSBkZXYtPmlkOyBpZDsgaWQgPSBpZC0+bmV4dCkKLQkJCXByaW50aygiICVzIiwgaWQtPmlkKTsKLQkJcHJpbnRrKCIgKCVzKVxuIiwgZGV2LT5hY3RpdmUgPyAiYWN0aXZlIiA6ICJkaXNhYmxlZCIpOwotCX0KLSNlbmRpZgorCXBucF9kYmcoJmRldi0+ZGV2LCAiJXMgZGV2aWNlLCBJRHMlcyAoJXMpXG4iLAorCQlkZXYtPnByb3RvY29sLT5uYW1lLCBidWYsIGRldi0+YWN0aXZlID8gImFjdGl2ZSIgOiAiZGlzYWJsZWQiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE0LDMgKzIxMiwxNCBAQAogfQogCiBzdWJzeXNfaW5pdGNhbGwocG5wX2luaXQpOworCitpbnQgcG5wX2RlYnVnOworCisjaWYgZGVmaW5lZChDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTKQorc3RhdGljIGludCBfX2luaXQgcG5wX2RlYnVnX3NldHVwKGNoYXIgKl9fdW51c2VkKQoreworCXBucF9kZWJ1ZyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJwbnAuZGVidWciLCBwbnBfZGVidWdfc2V0dXApOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9kcml2ZXIuYyBiL2RyaXZlcnMvcG5wL2RyaXZlci5jCmluZGV4IGUzZjdlODkuLjUyN2VlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvcG5wL2RyaXZlci5jCkBAIC0xMTQsNyArMTE0LDYgQEAKIAl9IGVsc2UKIAkJZ290byBmYWlsOwogCi0JZGV2X2RiZyhkZXYsICJkcml2ZXIgYXR0YWNoZWRcbiIpOwogCXJldHVybiBlcnJvcjsKIAogZmFpbDoKQEAgLTIxMSw4ICsyMTAsNiBAQAogCiBpbnQgcG5wX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcG5wX2RyaXZlciAqZHJ2KQogewotCXBucF9kYmcoInRoZSBkcml2ZXIgJyVzJyBoYXMgYmVlbiByZWdpc3RlcmVkIiwgZHJ2LT5uYW1lKTsKLQogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7CiAJZHJ2LT5kcml2ZXIuYnVzID0gJnBucF9idXNfdHlwZTsKIApAQCAtMjIyLDcgKzIxOSw2IEBACiB2b2lkIHBucF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcG5wX2RyaXZlciAqZHJ2KQogewogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci0JcG5wX2RiZygidGhlIGRyaXZlciAnJXMnIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCIsIGRydi0+bmFtZSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaXNhcG5wL01ha2VmaWxlIGIvZHJpdmVycy9wbnAvaXNhcG5wL01ha2VmaWxlCmluZGV4IDNlMzhmMDYuLmNhYzE4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2lzYXBucC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BucC9pc2FwbnAvTWFrZWZpbGUKQEAgLTUsNyArNSwzIEBACiBpc2FwbnAtcHJvYy0kKENPTkZJR19QUk9DX0ZTKSA9IHByb2MubwogCiBvYmoteSA6PSBjb3JlLm8gY29tcGF0Lm8gJChpc2FwbnAtcHJvYy15KQotCi1pZmVxICgkKENPTkZJR19QTlBfREVCVUcpLHkpCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRwotZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMgYi9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jCmluZGV4IDQ2NDU1ZmIuLmU4NTExNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYwpAQCAtOTAxLDcgKzkwMSw3IEBACiB7CiAJaW50IGksIHJldDsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiZ2V0IHJlc291cmNlc1xuIik7CisJcG5wX2RiZygmZGV2LT5kZXYsICJnZXQgcmVzb3VyY2VzXG4iKTsKIAlwbnBfaW5pdF9yZXNvdXJjZXMoZGV2KTsKIAlpc2FwbnBfY2ZnX2JlZ2luKGRldi0+Y2FyZC0+bnVtYmVyLCBkZXYtPm51bWJlcik7CiAJZGV2LT5hY3RpdmUgPSBpc2FwbnBfcmVhZF9ieXRlKElTQVBOUF9DRkdfQUNUSVZBVEUpOwpAQCAtOTM5LDEzICs5MzksMTMgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgdG1wOwogCi0JZGV2X2RiZygmZGV2LT5kZXYsICJzZXQgcmVzb3VyY2VzXG4iKTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgInNldCByZXNvdXJjZXNcbiIpOwogCWlzYXBucF9jZmdfYmVnaW4oZGV2LT5jYXJkLT5udW1iZXIsIGRldi0+bnVtYmVyKTsKIAlkZXYtPmFjdGl2ZSA9IDE7CiAJZm9yICh0bXAgPSAwOyB0bXAgPCBJU0FQTlBfTUFYX1BPUlQ7IHRtcCsrKSB7CiAJCXJlcyA9IHBucF9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0lPLCB0bXApOwogCQlpZiAocG5wX3Jlc291cmNlX2VuYWJsZWQocmVzKSkgewotCQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIHNldCBpbyAgJWQgdG8gJSNsbHhcbiIsCisJCQlwbnBfZGJnKCZkZXYtPmRldiwgIiAgc2V0IGlvICAlZCB0byAlI2xseFxuIiwKIAkJCQl0bXAsICh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+c3RhcnQpOwogCQkJaXNhcG5wX3dyaXRlX3dvcmQoSVNBUE5QX0NGR19QT1JUICsgKHRtcCA8PCAxKSwKIAkJCQkJICByZXMtPnN0YXJ0KTsKQEAgLTk1NywxNCArOTU3LDE0IEBACiAJCQlpbnQgaXJxID0gcmVzLT5zdGFydDsKIAkJCWlmIChpcnEgPT0gMikKIAkJCQlpcnEgPSA5OwotCQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIHNldCBpcnEgJWQgdG8gJWRcbiIsIHRtcCwgaXJxKTsKKwkJCXBucF9kYmcoJmRldi0+ZGV2LCAiICBzZXQgaXJxICVkIHRvICVkXG4iLCB0bXAsIGlycSk7CiAJCQlpc2FwbnBfd3JpdGVfYnl0ZShJU0FQTlBfQ0ZHX0lSUSArICh0bXAgPDwgMSksIGlycSk7CiAJCX0KIAl9CiAJZm9yICh0bXAgPSAwOyB0bXAgPCBJU0FQTlBfTUFYX0RNQTsgdG1wKyspIHsKIAkJcmVzID0gcG5wX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfRE1BLCB0bXApOwogCQlpZiAocG5wX3Jlc291cmNlX2VuYWJsZWQocmVzKSkgewotCQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIHNldCBkbWEgJWQgdG8gJWxsZFxuIiwKKwkJCXBucF9kYmcoJmRldi0+ZGV2LCAiICBzZXQgZG1hICVkIHRvICVsbGRcbiIsCiAJCQkJdG1wLCAodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPnN0YXJ0KTsKIAkJCWlzYXBucF93cml0ZV9ieXRlKElTQVBOUF9DRkdfRE1BICsgdG1wLCByZXMtPnN0YXJ0KTsKIAkJfQpAQCAtOTcyLDcgKzk3Miw3IEBACiAJZm9yICh0bXAgPSAwOyB0bXAgPCBJU0FQTlBfTUFYX01FTTsgdG1wKyspIHsKIAkJcmVzID0gcG5wX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCB0bXApOwogCQlpZiAocG5wX3Jlc291cmNlX2VuYWJsZWQocmVzKSkgewotCQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIHNldCBtZW0gJWQgdG8gJSNsbHhcbiIsCisJCQlwbnBfZGJnKCZkZXYtPmRldiwgIiAgc2V0IG1lbSAlZCB0byAlI2xseFxuIiwKIAkJCQl0bXAsICh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+c3RhcnQpOwogCQkJaXNhcG5wX3dyaXRlX3dvcmQoSVNBUE5QX0NGR19NRU0gKyAodG1wIDw8IDMpLAogCQkJCQkgIChyZXMtPnN0YXJ0ID4+IDgpICYgMHhmZmZmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL21hbmFnZXIuYyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwppbmRleCBiNTI2ZWFhLi4wMGZkMzU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwpAQCAtMjUsNyArMjUsNyBAQAogCiAJcmVzID0gcG5wX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfSU8sIGlkeCk7CiAJaWYgKHJlcykgewotCQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgaW8gJWQgYWxyZWFkeSBzZXQgdG8gJSNsbHgtJSNsbHggIgorCQlwbnBfZGJnKCZkZXYtPmRldiwgIiAgaW8gJWQgYWxyZWFkeSBzZXQgdG8gJSNsbHgtJSNsbHggIgogCQkJImZsYWdzICUjbHhcbiIsIGlkeCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kLCByZXMtPmZsYWdzKTsKIAkJcmV0dXJuIDA7CkBAIC0zOCw3ICszOCw3IEBACiAKIAlpZiAoIXJ1bGUtPnNpemUpIHsKIAkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX0RJU0FCTEVEOwotCQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgaW8gJWQgZGlzYWJsZWRcbiIsIGlkeCk7CisJCXBucF9kYmcoJmRldi0+ZGV2LCAiICBpbyAlZCBkaXNhYmxlZFxuIiwgaWR4KTsKIAkJZ290byBfX2FkZDsKIAl9CiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkJcmVzLT5zdGFydCArPSBydWxlLT5hbGlnbjsKIAkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgcnVsZS0+c2l6ZSAtIDE7CiAJCWlmIChyZXMtPnN0YXJ0ID4gcnVsZS0+bWF4IHx8ICFydWxlLT5hbGlnbikgewotCQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIGNvdWxkbid0IGFzc2lnbiBpbyAlZCAiCisJCQlwbnBfZGJnKCZkZXYtPmRldiwgIiAgY291bGRuJ3QgYXNzaWduIGlvICVkICIKIAkJCQkiKG1pbiAlI2xseCBtYXggJSNsbHgpXG4iLCBpZHgsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcnVsZS0+bWluLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJ1bGUtPm1heCk7CkBAIC02OCw3ICs2OCw3IEBACiAKIAlyZXMgPSBwbnBfZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIGlkeCk7CiAJaWYgKHJlcykgewotCQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgbWVtICVkIGFscmVhZHkgc2V0IHRvICUjbGx4LSUjbGx4ICIKKwkJcG5wX2RiZygmZGV2LT5kZXYsICIgIG1lbSAlZCBhbHJlYWR5IHNldCB0byAlI2xseC0lI2xseCAiCiAJCQkiZmxhZ3MgJSNseFxuIiwgaWR4LCAodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPnN0YXJ0LAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQsIHJlcy0+ZmxhZ3MpOwogCQlyZXR1cm4gMDsKQEAgLTkwLDcgKzkwLDcgQEAKIAogCWlmICghcnVsZS0+c2l6ZSkgewogCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfRElTQUJMRUQ7Ci0JCWRldl9kYmcoJmRldi0+ZGV2LCAiICBtZW0gJWQgZGlzYWJsZWRcbiIsIGlkeCk7CisJCXBucF9kYmcoJmRldi0+ZGV2LCAiICBtZW0gJWQgZGlzYWJsZWRcbiIsIGlkeCk7CiAJCWdvdG8gX19hZGQ7CiAJfQogCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJcmVzLT5zdGFydCArPSBydWxlLT5hbGlnbjsKIAkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgcnVsZS0+c2l6ZSAtIDE7CiAJCWlmIChyZXMtPnN0YXJ0ID4gcnVsZS0+bWF4IHx8ICFydWxlLT5hbGlnbikgewotCQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIGNvdWxkbid0IGFzc2lnbiBtZW0gJWQgIgorCQkJcG5wX2RiZygmZGV2LT5kZXYsICIgIGNvdWxkbid0IGFzc2lnbiBtZW0gJWQgIgogCQkJCSIobWluICUjbGx4IG1heCAlI2xseClcbiIsIGlkeCwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBydWxlLT5taW4sCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcnVsZS0+bWF4KTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAJcmVzID0gcG5wX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfSVJRLCBpZHgpOwogCWlmIChyZXMpIHsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIGlycSAlZCBhbHJlYWR5IHNldCB0byAlZCBmbGFncyAlI2x4XG4iLAorCQlwbnBfZGJnKCZkZXYtPmRldiwgIiAgaXJxICVkIGFscmVhZHkgc2V0IHRvICVkIGZsYWdzICUjbHhcbiIsCiAJCQlpZHgsIChpbnQpIHJlcy0+c3RhcnQsIHJlcy0+ZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMzgsNyArMTM4LDcgQEAKIAogCWlmIChiaXRtYXBfZW1wdHkocnVsZS0+bWFwLmJpdHMsIFBOUF9JUlFfTlIpKSB7CiAJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9ESVNBQkxFRDsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIGlycSAlZCBkaXNhYmxlZFxuIiwgaWR4KTsKKwkJcG5wX2RiZygmZGV2LT5kZXYsICIgIGlycSAlZCBkaXNhYmxlZFxuIiwgaWR4KTsKIAkJZ290byBfX2FkZDsKIAl9CiAKQEAgLTE2MCwxMSArMTYwLDExIEBACiAJCXJlcy0+c3RhcnQgPSAtMTsKIAkJcmVzLT5lbmQgPSAtMTsKIAkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX0RJU0FCTEVEOwotCQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgaXJxICVkIGRpc2FibGVkIChvcHRpb25hbClcbiIsIGlkeCk7CisJCXBucF9kYmcoJmRldi0+ZGV2LCAiICBpcnEgJWQgZGlzYWJsZWQgKG9wdGlvbmFsKVxuIiwgaWR4KTsKIAkJZ290byBfX2FkZDsKIAl9CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgY291bGRuJ3QgYXNzaWduIGlycSAlZFxuIiwgaWR4KTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgY291bGRuJ3QgYXNzaWduIGlycSAlZFxuIiwgaWR4KTsKIAlyZXR1cm4gLUVCVVNZOwogCiBfX2FkZDoKQEAgLTE4NCw3ICsxODQsNyBAQAogCiAJcmVzID0gcG5wX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfRE1BLCBpZHgpOwogCWlmIChyZXMpIHsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIGRtYSAlZCBhbHJlYWR5IHNldCB0byAlZCBmbGFncyAlI2x4XG4iLAorCQlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZG1hICVkIGFscmVhZHkgc2V0IHRvICVkIGZsYWdzICUjbHhcbiIsCiAJCQlpZHgsIChpbnQpIHJlcy0+c3RhcnQsIHJlcy0+ZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMDUsNyArMjA1LDcgQEAKIAlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQgPSBNQVhfRE1BX0NIQU5ORUxTOwogI2VuZGlmCiAJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX0RJU0FCTEVEOwotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBkaXNhYmxlIGRtYSAlZFxuIiwgaWR4KTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZGlzYWJsZSBkbWEgJWRcbiIsIGlkeCk7CiAKIF9fYWRkOgogCXBucF9hZGRfZG1hX3Jlc291cmNlKGRldiwgcmVzLT5zdGFydCwgcmVzLT5mbGFncyk7CkBAIC0yMzgsNyArMjM4LDcgQEAKIAlpbnQgbnBvcnQgPSAwLCBubWVtID0gMCwgbmlycSA9IDAsIG5kbWEgPSAwOwogCWludCByZXQgPSAwOwogCi0JZGV2X2RiZygmZGV2LT5kZXYsICJwbnBfYXNzaWduX3Jlc291cmNlcywgdHJ5IGRlcGVuZGVudCBzZXQgJWRcbiIsIHNldCk7CisJcG5wX2RiZygmZGV2LT5kZXYsICJwbnBfYXNzaWduX3Jlc291cmNlcywgdHJ5IGRlcGVuZGVudCBzZXQgJWRcbiIsIHNldCk7CiAJbXV0ZXhfbG9jaygmcG5wX3Jlc19tdXRleCk7CiAJcG5wX2NsZWFuX3Jlc291cmNlX3RhYmxlKGRldik7CiAKQEAgLTI3MCw3ICsyNzAsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwbnBfcmVzX211dGV4KTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfZGJnKCZkZXYtPmRldiwgInBucF9hc3NpZ25fcmVzb3VyY2VzIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQlwbnBfZGJnKCZkZXYtPmRldiwgInBucF9hc3NpZ25fcmVzb3VyY2VzIGZhaWxlZCAoJWQpXG4iLCByZXQpOwogCQlwbnBfY2xlYW5fcmVzb3VyY2VfdGFibGUoZGV2KTsKIAl9IGVsc2UKIAkJZGJnX3BucF9zaG93X3Jlc291cmNlcyhkZXYsICJwbnBfYXNzaWduX3Jlc291cmNlcyBzdWNjZWVkZWQiKTsKQEAgLTI4Niw3ICsyODYsNyBAQAogCWludCBpLCByZXQ7CiAKIAlpZiAoIXBucF9jYW5fY29uZmlndXJlKGRldikpIHsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICJjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwbnBfZGJnKCZkZXYtPmRldiwgImNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMzEzLDcgKzMxMyw3IEBACiBpbnQgcG5wX3N0YXJ0X2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewogCWlmICghcG5wX2Nhbl93cml0ZShkZXYpKSB7Ci0JCWRldl9kYmcoJmRldi0+ZGV2LCAiYWN0aXZhdGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcG5wX2RiZygmZGV2LT5kZXYsICJhY3RpdmF0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMzNiw3ICszMzYsNyBAQAogaW50IHBucF9zdG9wX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewogCWlmICghcG5wX2Nhbl9kaXNhYmxlKGRldikpIHsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICJkaXNhYmxpbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXBucF9kYmcoJmRldi0+ZGV2LCAiZGlzYWJsaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGRldi0+cHJvdG9jb2wtPmRpc2FibGUoZGV2KSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3BucC9wbnBhY3BpL01ha2VmaWxlCmluZGV4IDJkN2ExZTYuLjkwNTMyNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9NYWtlZmlsZQpAQCAtMyw3ICszLDMgQEAKICMKIAogb2JqLXkgOj0gY29yZS5vIHJzcGFyc2VyLm8KLQotaWZlcSAoJChDT05GSUdfUE5QX0RFQlVHKSx5KQotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IDUzNTYxZDcuLjM4M2U0N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCkBAIC03NSw3ICs3NSw3IEBACiAKIHN0YXRpYyBpbnQgcG5wYWNwaV9nZXRfcmVzb3VyY2VzKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7Ci0JZGV2X2RiZygmZGV2LT5kZXYsICJnZXQgcmVzb3VyY2VzXG4iKTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgImdldCByZXNvdXJjZXNcbiIpOwogCXJldHVybiBwbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9yZXNvdXJjZShkZXYpOwogfQogCkBAIC04Niw3ICs4Niw3IEBACiAJaW50IHJldDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgInNldCByZXNvdXJjZXNcbiIpOworCXBucF9kYmcoJmRldi0+ZGV2LCAic2V0IHJlc291cmNlc1xuIik7CiAJcmV0ID0gcG5wYWNwaV9idWlsZF9yZXNvdXJjZV90ZW1wbGF0ZShkZXYsICZidWZmZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xNDgsOSArMTQ4LDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBwbnBfZGV2ICpkZXY7CiAKKwkvKgorCSAqIElmIGEgUG5QYWNwaSBkZXZpY2UgaXMgbm90IHByZXNlbnQgLCB0aGUgZGV2aWNlCisJICogZHJpdmVyIHNob3VsZCBub3QgYmUgbG9hZGVkLgorCSAqLwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9DUlMiLCAmdGVtcCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8ICFpc3BucGlkYWNwaShhY3BpX2RldmljZV9oaWQoZGV2aWNlKSkgfHwKLQkgICAgaXNfZXhjbHVzaXZlX2RldmljZShkZXZpY2UpKQorCSAgICBpc19leGNsdXNpdmVfZGV2aWNlKGRldmljZSkgfHwgKCFkZXZpY2UtPnN0YXR1cy5wcmVzZW50KSkKIAkJcmV0dXJuIDA7CiAKIAlkZXYgPSBwbnBfYWxsb2NfZGV2KCZwbnBhY3BpX3Byb3RvY29sLCBudW0sIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKTsKQEAgLTI1NSwxNCArMjU5LDE0IEBACiBzdGF0aWMgaW50IF9faW5pdCBwbnBhY3BpX2luaXQodm9pZCkKIHsKIAlpZiAoYWNwaV9kaXNhYmxlZCB8fCBwbnBhY3BpX2Rpc2FibGVkKSB7Ci0JCXBucF9pbmZvKCJQblAgQUNQSTogZGlzYWJsZWQiKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicG5wOiBQblAgQUNQSTogZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcG5wX2luZm8oIlBuUCBBQ1BJIGluaXQiKTsKKwlwcmludGsoS0VSTl9JTkZPICJwbnA6IFBuUCBBQ1BJIGluaXRcbiIpOwogCXBucF9yZWdpc3Rlcl9wcm90b2NvbCgmcG5wYWNwaV9wcm90b2NvbCk7CiAJcmVnaXN0ZXJfYWNwaV9idXNfdHlwZSgmYWNwaV9wbnBfYnVzKTsKIAlhY3BpX2dldF9kZXZpY2VzKE5VTEwsIHBucGFjcGlfYWRkX2RldmljZV9oYW5kbGVyLCBOVUxMLCBOVUxMKTsKLQlwbnBfaW5mbygiUG5QIEFDUEk6IGZvdW5kICVkIGRldmljZXMiLCBudW0pOworCXByaW50ayhLRVJOX0lORk8gInBucDogUG5QIEFDUEk6IGZvdW5kICVkIGRldmljZXNcbiIsIG51bSk7CiAJdW5yZWdpc3Rlcl9hY3BpX2J1c190eXBlKCZhY3BpX3BucF9idXMpOwogCXBucF9wbGF0Zm9ybV9kZXZpY2VzID0gMTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYwppbmRleCA5NTAxNWNiLi5hZGYxNzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCkBAIC0xMzIsNyArMTMyLDggQEAKIAlwbnBfYWRkX2lycV9yZXNvdXJjZShkZXYsIGlycSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGRtYV9mbGFncyhpbnQgdHlwZSwgaW50IGJ1c19tYXN0ZXIsIGludCB0cmFuc2ZlcikKK3N0YXRpYyBpbnQgZG1hX2ZsYWdzKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGludCB0eXBlLCBpbnQgYnVzX21hc3RlciwKKwkJICAgICBpbnQgdHJhbnNmZXIpCiB7CiAJaW50IGZsYWdzID0gMDsKIApAQCAtMTU0LDcgKzE1NSw3IEBACiAJZGVmYXVsdDoKIAkJLyogU2V0IGEgZGVmYXVsdCB2YWx1ZSA/ICovCiAJCWZsYWdzIHw9IElPUkVTT1VSQ0VfRE1BX0NPTVBBVElCTEU7Ci0JCXBucF9lcnIoIkludmFsaWQgRE1BIHR5cGUiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJpbnZhbGlkIERNQSB0eXBlICVkXG4iLCB0eXBlKTsKIAl9CiAJc3dpdGNoICh0cmFuc2ZlcikgewogCWNhc2UgQUNQSV9UUkFOU0ZFUl84OgpAQCAtMTY5LDcgKzE3MCw3IEBACiAJZGVmYXVsdDoKIAkJLyogU2V0IGEgZGVmYXVsdCB2YWx1ZSA/ICovCiAJCWZsYWdzIHw9IElPUkVTT1VSQ0VfRE1BXzhBTkQxNkJJVDsKLQkJcG5wX2VycigiSW52YWxpZCBETUEgdHJhbnNmZXIgdHlwZSIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgImludmFsaWQgRE1BIHRyYW5zZmVyIHR5cGUgJWRcbiIsIHRyYW5zZmVyKTsKIAl9CiAKIAlyZXR1cm4gZmxhZ3M7CkBAIC0zMzYsNyArMzM3LDcgQEAKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9ETUE6CiAJCWRtYSA9ICZyZXMtPmRhdGEuZG1hOwogCQlpZiAoZG1hLT5jaGFubmVsX2NvdW50ID4gMCAmJiBkbWEtPmNoYW5uZWxzWzBdICE9ICh1OCkgLTEpCi0JCQlmbGFncyA9IGRtYV9mbGFncyhkbWEtPnR5cGUsIGRtYS0+YnVzX21hc3RlciwKKwkJCWZsYWdzID0gZG1hX2ZsYWdzKGRldiwgZG1hLT50eXBlLCBkbWEtPmJ1c19tYXN0ZXIsCiAJCQkJCSAgZG1hLT50cmFuc2Zlcik7CiAJCWVsc2UKIAkJCWZsYWdzID0gSU9SRVNPVVJDRV9ESVNBQkxFRDsKQEAgLTQ0OSw3ICs0NTAsNyBAQAogCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRldi0+ZGF0YTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgInBhcnNlIGFsbG9jYXRlZCByZXNvdXJjZXNcbiIpOworCXBucF9kYmcoJmRldi0+ZGV2LCAicGFyc2UgYWxsb2NhdGVkIHJlc291cmNlc1xuIik7CiAKIAlwbnBfaW5pdF9yZXNvdXJjZXMoZGV2KTsKIApAQCAtNDc3LDcgKzQ3OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHAtPmNoYW5uZWxfY291bnQ7IGkrKykKIAkJbWFwIHw9IDEgPDwgcC0+Y2hhbm5lbHNbaV07CiAKLQlmbGFncyA9IGRtYV9mbGFncyhwLT50eXBlLCBwLT5idXNfbWFzdGVyLCBwLT50cmFuc2Zlcik7CisJZmxhZ3MgPSBkbWFfZmxhZ3MoZGV2LCBwLT50eXBlLCBwLT5idXNfbWFzdGVyLCBwLT50cmFuc2Zlcik7CiAJcG5wX3JlZ2lzdGVyX2RtYV9yZXNvdXJjZShkZXYsIG9wdGlvbl9mbGFncywgbWFwLCBmbGFncyk7CiB9CiAKQEAgLTYwOCw4ICs2MDksOCBAQAogCXVuc2lnbmVkIGNoYXIgZmxhZ3MgPSAwOwogCiAJc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQociwgcCk7Ci0JaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQlwbnBfd2FybigiUG5QQUNQSTogZmFpbGVkIHRvIGNvbnZlcnQgcmVzb3VyY2UgdHlwZSAlZCIsCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwgImNhbid0IGNvbnZlcnQgcmVzb3VyY2UgdHlwZSAlZFxuIiwKIAkJCSByLT50eXBlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTczNSw3ICs3MzYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaXBucF9wYXJzZV9vcHRpb25fcyBwYXJzZV9kYXRhOwogCi0JZGV2X2RiZygmZGV2LT5kZXYsICJwYXJzZSByZXNvdXJjZSBvcHRpb25zXG4iKTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgInBhcnNlIHJlc291cmNlIG9wdGlvbnNcbiIpOwogCiAJcGFyc2VfZGF0YS5kZXYgPSBkZXY7CiAJcGFyc2VfZGF0YS5vcHRpb25fZmxhZ3MgPSAwOwpAQCAtODQzLDcgKzg0NCw3IEBACiAKIAlpZiAoIXBucF9yZXNvdXJjZV9lbmFibGVkKHApKSB7CiAJCWlycS0+aW50ZXJydXB0X2NvdW50ID0gMDsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBpcnEgKCVzKVxuIiwKKwkJcG5wX2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBpcnEgKCVzKVxuIiwKIAkJCXAgPyAiZGlzYWJsZWQiIDogIm1pc3NpbmciKTsKIAkJcmV0dXJuOwogCX0KQEAgLTg1NSw3ICs4NTYsNyBAQAogCWlycS0+aW50ZXJydXB0X2NvdW50ID0gMTsKIAlpcnEtPmludGVycnVwdHNbMF0gPSBwLT5zdGFydDsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgaXJxICVkICVzICVzICVzICglZC1ieXRlIGRlc2NyaXB0b3IpXG4iLAorCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgaXJxICVkICVzICVzICVzICglZC1ieXRlIGRlc2NyaXB0b3IpXG4iLAogCQkoaW50KSBwLT5zdGFydCwKIAkJdHJpZ2dlcmluZyA9PSBBQ1BJX0xFVkVMX1NFTlNJVElWRSA/ICJsZXZlbCIgOiAiZWRnZSIsCiAJCXBvbGFyaXR5ID09IEFDUElfQUNUSVZFX0xPVyA/ICJsb3ciIDogImhpZ2giLApAQCAtODcyLDcgKzg3Myw3IEBACiAKIAlpZiAoIXBucF9yZXNvdXJjZV9lbmFibGVkKHApKSB7CiAJCWV4dGVuZGVkX2lycS0+aW50ZXJydXB0X2NvdW50ID0gMDsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBleHRlbmRlZCBpcnEgKCVzKVxuIiwKKwkJcG5wX2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBleHRlbmRlZCBpcnEgKCVzKVxuIiwKIAkJCXAgPyAiZGlzYWJsZWQiIDogIm1pc3NpbmciKTsKIAkJcmV0dXJuOwogCX0KQEAgLTg4NSw3ICs4ODYsNyBAQAogCWV4dGVuZGVkX2lycS0+aW50ZXJydXB0X2NvdW50ID0gMTsKIAlleHRlbmRlZF9pcnEtPmludGVycnVwdHNbMF0gPSBwLT5zdGFydDsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgaXJxICVkICVzICVzICVzXG4iLCAoaW50KSBwLT5zdGFydCwKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGlycSAlZCAlcyAlcyAlc1xuIiwgKGludCkgcC0+c3RhcnQsCiAJCXRyaWdnZXJpbmcgPT0gQUNQSV9MRVZFTF9TRU5TSVRJVkUgPyAibGV2ZWwiIDogImVkZ2UiLAogCQlwb2xhcml0eSA9PSBBQ1BJX0FDVElWRV9MT1cgPyAibG93IiA6ICJoaWdoIiwKIAkJZXh0ZW5kZWRfaXJxLT5zaGFyYWJsZSA9PSBBQ1BJX1NIQVJFRCA/ICJzaGFyZWQiIDogImV4Y2x1c2l2ZSIpOwpAQCAtODk5LDcgKzkwMCw3IEBACiAKIAlpZiAoIXBucF9yZXNvdXJjZV9lbmFibGVkKHApKSB7CiAJCWRtYS0+Y2hhbm5lbF9jb3VudCA9IDA7Ci0JCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgZG1hICglcylcbiIsCisJCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgZG1hICglcylcbiIsCiAJCQlwID8gImRpc2FibGVkIiA6ICJtaXNzaW5nIik7CiAJCXJldHVybjsKIAl9CkBAIC05MzQsNyArOTM1LDcgQEAKIAlkbWEtPmNoYW5uZWxfY291bnQgPSAxOwogCWRtYS0+Y2hhbm5lbHNbMF0gPSBwLT5zdGFydDsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgZG1hICVkICIKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGRtYSAlZCAiCiAJCSJ0eXBlICUjeCB0cmFuc2ZlciAlI3ggbWFzdGVyICVkXG4iLAogCQkoaW50KSBwLT5zdGFydCwgZG1hLT50eXBlLCBkbWEtPnRyYW5zZmVyLCBkbWEtPmJ1c19tYXN0ZXIpOwogfQpAQCAtOTU4LDcgKzk1OSw3IEBACiAJCWlvLT5hZGRyZXNzX2xlbmd0aCA9IDA7CiAJfQogCi0JZGV2X2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBpbyAlI3gtJSN4IGRlY29kZSAlI3hcbiIsIGlvLT5taW5pbXVtLAorCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgaW8gJSN4LSUjeCBkZWNvZGUgJSN4XG4iLCBpby0+bWluaW11bSwKIAkJaW8tPm1pbmltdW0gKyBpby0+YWRkcmVzc19sZW5ndGggLSAxLCBpby0+aW9fZGVjb2RlKTsKIH0KIApAQCAtOTc2LDcgKzk3Nyw3IEBACiAJCWZpeGVkX2lvLT5hZGRyZXNzX2xlbmd0aCA9IDA7CiAJfQogCi0JZGV2X2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBmaXhlZF9pbyAlI3gtJSN4XG4iLCBmaXhlZF9pby0+YWRkcmVzcywKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGZpeGVkX2lvICUjeC0lI3hcbiIsIGZpeGVkX2lvLT5hZGRyZXNzLAogCQlmaXhlZF9pby0+YWRkcmVzcyArIGZpeGVkX2lvLT5hZGRyZXNzX2xlbmd0aCAtIDEpOwogfQogCkBAIC05OTksNyArMTAwMCw3IEBACiAJCW1lbW9yeTI0LT5hZGRyZXNzX2xlbmd0aCA9IDA7CiAJfQogCi0JZGV2X2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBtZW0yNCAlI3gtJSN4IHdyaXRlX3Byb3RlY3QgJSN4XG4iLAorCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgbWVtMjQgJSN4LSUjeCB3cml0ZV9wcm90ZWN0ICUjeFxuIiwKIAkJbWVtb3J5MjQtPm1pbmltdW0sCiAJCW1lbW9yeTI0LT5taW5pbXVtICsgbWVtb3J5MjQtPmFkZHJlc3NfbGVuZ3RoIC0gMSwKIAkJbWVtb3J5MjQtPndyaXRlX3Byb3RlY3QpOwpAQCAtMTAyMyw3ICsxMDI0LDcgQEAKIAkJbWVtb3J5MzItPmFsaWdubWVudCA9IDA7CiAJfQogCi0JZGV2X2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBtZW0zMiAlI3gtJSN4IHdyaXRlX3Byb3RlY3QgJSN4XG4iLAorCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgbWVtMzIgJSN4LSUjeCB3cml0ZV9wcm90ZWN0ICUjeFxuIiwKIAkJbWVtb3J5MzItPm1pbmltdW0sCiAJCW1lbW9yeTMyLT5taW5pbXVtICsgbWVtb3J5MzItPmFkZHJlc3NfbGVuZ3RoIC0gMSwKIAkJbWVtb3J5MzItPndyaXRlX3Byb3RlY3QpOwpAQCAtMTA0Niw3ICsxMDQ3LDcgQEAKIAkJZml4ZWRfbWVtb3J5MzItPmFkZHJlc3NfbGVuZ3RoID0gMDsKIAl9CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGZpeGVkX21lbTMyICUjeC0lI3ggd3JpdGVfcHJvdGVjdCAlI3hcbiIsCisJcG5wX2RiZygmZGV2LT5kZXYsICIgIGVuY29kZSBmaXhlZF9tZW0zMiAlI3gtJSN4IHdyaXRlX3Byb3RlY3QgJSN4XG4iLAogCQlmaXhlZF9tZW1vcnkzMi0+YWRkcmVzcywKIAkJZml4ZWRfbWVtb3J5MzItPmFkZHJlc3MgKyBmaXhlZF9tZW1vcnkzMi0+YWRkcmVzc19sZW5ndGggLSAxLAogCQlmaXhlZF9tZW1vcnkzMi0+d3JpdGVfcHJvdGVjdCk7CkBAIC0xMDYwLDcgKzEwNjEsNyBAQAogCXN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSA9IGJ1ZmZlci0+cG9pbnRlcjsKIAlpbnQgcG9ydCA9IDAsIGlycSA9IDAsIGRtYSA9IDAsIG1lbSA9IDA7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgImVuY29kZSAlZCByZXNvdXJjZXNcbiIsIHJlc19jbnQpOworCXBucF9kYmcoJmRldi0+ZGV2LCAiZW5jb2RlICVkIHJlc291cmNlc1xuIiwgcmVzX2NudCk7CiAJd2hpbGUgKGkgPCByZXNfY250KSB7CiAJCXN3aXRjaCAocmVzb3VyY2UtPnR5cGUpIHsKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSVJROgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9NYWtlZmlsZSBiL2RyaXZlcnMvcG5wL3BucGJpb3MvTWFrZWZpbGUKaW5kZXggMzEwZTJiMy4uM2NkM2VkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYmlvcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL01ha2VmaWxlCkBAIC01LDcgKzUsMyBAQAogcG5wYmlvcy1wcm9jLSQoQ09ORklHX1BOUEJJT1NfUFJPQ19GUykgPSBwcm9jLm8KIAogb2JqLXkgOj0gY29yZS5vIGJpb3NjYWxscy5vIHJzcGFyc2VyLm8gJChwbnBiaW9zLXByb2MteSkKLQotaWZlcSAoJChDT05GSUdfUE5QX0RFQlVHKSx5KQotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCmluZGV4IDJiZmUxMzMuLjk5NmY2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAlpZiAoIXBucGJpb3NfaXNfZHluYW1pYyhkZXYpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZGV2X2RiZygmZGV2LT5kZXYsICJnZXQgcmVzb3VyY2VzXG4iKTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgImdldCByZXNvdXJjZXNcbiIpOwogCW5vZGUgPSBremFsbG9jKG5vZGVfaW5mby5tYXhfbm9kZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAtMTsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWlmICghcG5wYmlvc19pc19keW5hbWljKGRldikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgInNldCByZXNvdXJjZXNcbiIpOworCXBucF9kYmcoJmRldi0+ZGV2LCAic2V0IHJlc291cmNlc1xuIik7CiAJbm9kZSA9IGt6YWxsb2Mobm9kZV9pbmZvLm1heF9ub2RlX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jCmluZGV4IGNhNTY3NjcuLjg3YjRmNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYworKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlpZiAoIXApCiAJCXJldHVybiBOVUxMOwogCi0JZGV2X2RiZygmZGV2LT5kZXYsICJwYXJzZSBhbGxvY2F0ZWQgcmVzb3VyY2VzXG4iKTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgInBhcnNlIGFsbG9jYXRlZCByZXNvdXJjZXNcbiIpOwogCiAJcG5wX2luaXRfcmVzb3VyY2VzKGRldik7CiAKQEAgLTMyNCw3ICszMjQsNyBAQAogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgInBhcnNlIHJlc291cmNlIG9wdGlvbnNcbiIpOworCXBucF9kYmcoJmRldi0+ZGV2LCAicGFyc2UgcmVzb3VyY2Ugb3B0aW9uc1xuIik7CiAJb3B0aW9uX2ZsYWdzID0gMDsKIAl3aGlsZSAoKGNoYXIgKilwIDwgKGNoYXIgKillbmQpIHsKIApAQCAtNTE5LDcgKzUxOSw3IEBACiAJcFsxMF0gPSAobGVuID4+IDgpICYgMHhmZjsKIAlwWzExXSA9ICgobGVuID4+IDgpID4+IDgpICYgMHhmZjsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgbWVtICUjbHgtJSNseFxuIiwgYmFzZSwgYmFzZSArIGxlbiAtIDEpOworCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgbWVtICUjbHgtJSNseFxuIiwgYmFzZSwgYmFzZSArIGxlbiAtIDEpOwogfQogCiBzdGF0aWMgdm9pZCBwbnBiaW9zX2VuY29kZV9tZW0zMihzdHJ1Y3QgcG5wX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyICpwLApAQCAtNTQ5LDcgKzU0OSw3IEBACiAJcFsxOF0gPSAobGVuID4+IDE2KSAmIDB4ZmY7CiAJcFsxOV0gPSAobGVuID4+IDI0KSAmIDB4ZmY7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIG1lbTMyICUjbHgtJSNseFxuIiwgYmFzZSwgYmFzZSArIGxlbiAtIDEpOworCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgbWVtMzIgJSNseC0lI2x4XG4iLCBiYXNlLCBiYXNlICsgbGVuIC0gMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBucGJpb3NfZW5jb2RlX2ZpeGVkX21lbTMyKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgKnAsCkBAIC01NzUsNyArNTc1LDcgQEAKIAlwWzEwXSA9IChsZW4gPj4gMTYpICYgMHhmZjsKIAlwWzExXSA9IChsZW4gPj4gMjQpICYgMHhmZjsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgZml4ZWRfbWVtMzIgJSNseC0lI2x4XG4iLCBiYXNlLAorCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgZml4ZWRfbWVtMzIgJSNseC0lI2x4XG4iLCBiYXNlLAogCQliYXNlICsgbGVuIC0gMSk7CiB9CiAKQEAgLTU5Miw3ICs1OTIsNyBAQAogCXBbMV0gPSBtYXAgJiAweGZmOwogCXBbMl0gPSAobWFwID4+IDgpICYgMHhmZjsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgaXJxIG1hc2sgJSNseFxuIiwgbWFwKTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGlycSBtYXNrICUjbHhcbiIsIG1hcCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBucGJpb3NfZW5jb2RlX2RtYShzdHJ1Y3QgcG5wX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyICpwLApAQCAtNjA3LDcgKzYwNyw3IEBACiAKIAlwWzFdID0gbWFwICYgMHhmZjsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgZG1hIG1hc2sgJSNseFxuIiwgbWFwKTsKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGRtYSBtYXNrICUjbHhcbiIsIG1hcCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBucGJpb3NfZW5jb2RlX3BvcnQoc3RydWN0IHBucF9kZXYgKmRldiwgdW5zaWduZWQgY2hhciAqcCwKQEAgLTYzMCw3ICs2MzAsNyBAQAogCXBbNV0gPSAoYmFzZSA+PiA4KSAmIDB4ZmY7CiAJcFs3XSA9IGxlbiAmIDB4ZmY7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGlvICUjbHgtJSNseFxuIiwgYmFzZSwgYmFzZSArIGxlbiAtIDEpOworCXBucF9kYmcoJmRldi0+ZGV2LCAiICBlbmNvZGUgaW8gJSNseC0lI2x4XG4iLCBiYXNlLCBiYXNlICsgbGVuIC0gMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBucGJpb3NfZW5jb2RlX2ZpeGVkX3BvcnQoc3RydWN0IHBucF9kZXYgKmRldiwgdW5zaWduZWQgY2hhciAqcCwKQEAgLTY1MSw3ICs2NTEsNyBAQAogCXBbMl0gPSAoYmFzZSA+PiA4KSAmIDB4ZmY7CiAJcFszXSA9IGxlbiAmIDB4ZmY7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGZpeGVkX2lvICUjbHgtJSNseFxuIiwgYmFzZSwKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgZW5jb2RlIGZpeGVkX2lvICUjbHgtJSNseFxuIiwgYmFzZSwKIAkJYmFzZSArIGxlbiAtIDEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9xdWlya3MuYyBiL2RyaXZlcnMvcG5wL3F1aXJrcy5jCmluZGV4IGMxNDRiZDUuLjg0NzNmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcG5wL3F1aXJrcy5jCkBAIC0zMzcsOSArMzM3LDggQEAKIAlmb3IgKGYgPSBwbnBfZml4dXBzOyAqZi0+aWQ7IGYrKykgewogCQlpZiAoIWNvbXBhcmVfcG5wX2lkKGRldi0+aWQsIGYtPmlkKSkKIAkJCWNvbnRpbnVlOwotI2lmZGVmIERFQlVHCi0JCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IGNhbGxpbmcgJXBGXG4iLCBmLT5pZCwgZi0+cXVpcmtfZnVuY3Rpb24pOwotI2VuZGlmCisJCXBucF9kYmcoJmRldi0+ZGV2LCAiJXM6IGNhbGxpbmcgJXBGXG4iLCBmLT5pZCwKKwkJCWYtPnF1aXJrX2Z1bmN0aW9uKTsKIAkJZi0+cXVpcmtfZnVuY3Rpb24oZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jIGIvZHJpdmVycy9wbnAvcmVzb3VyY2UuYwppbmRleCBkYmFlMjNhLi5mNjA0MDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcG5wL3Jlc291cmNlLmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCXU4IHByb2dpZjsKIAogCWlmIChwY2ktPmlycSA9PSBpcnEpIHsKLQkJZGV2X2RiZygmcG5wLT5kZXYsICJkZXZpY2UgJXMgdXNpbmcgaXJxICVkXG4iLAorCQlwbnBfZGJnKCZwbnAtPmRldiwgIiAgZGV2aWNlICVzIHVzaW5nIGlycSAlZFxuIiwKIAkJCXBjaV9uYW1lKHBjaSksIGlycSk7CiAJCXJldHVybiAxOwogCX0KQEAgLTMxNiw3ICszMTYsNyBAQAogCQlpZiAoKHByb2dpZiAmIDB4NSkgIT0gMHg1KQogCQkJaWYgKHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEocGNpLCAwKSA9PSBpcnEgfHwKIAkJCSAgICBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHBjaSwgMSkgPT0gaXJxKSB7Ci0JCQkJZGV2X2RiZygmcG5wLT5kZXYsICJsZWdhY3kgSURFIGRldmljZSAlcyAiCisJCQkJcG5wX2RiZygmcG5wLT5kZXYsICIgIGxlZ2FjeSBJREUgZGV2aWNlICVzICIKIAkJCQkJInVzaW5nIGlycSAlZFxuIiwgcGNpX25hbWUocGNpKSwgaXJxKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KQEAgLTUxNyw3ICs1MTcsNyBAQAogCXJlcy0+c3RhcnQgPSBpcnE7CiAJcmVzLT5lbmQgPSBpcnE7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgYWRkIGlycSAlZCBmbGFncyAlI3hcbiIsIGlycSwgZmxhZ3MpOworCXBucF9kYmcoJmRldi0+ZGV2LCAiICBhZGQgaXJxICVkIGZsYWdzICUjeFxuIiwgaXJxLCBmbGFncyk7CiAJcmV0dXJuIHBucF9yZXM7CiB9CiAKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXJlcy0+c3RhcnQgPSBkbWE7CiAJcmVzLT5lbmQgPSBkbWE7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiAgYWRkIGRtYSAlZCBmbGFncyAlI3hcbiIsIGRtYSwgZmxhZ3MpOworCXBucF9kYmcoJmRldi0+ZGV2LCAiICBhZGQgZG1hICVkIGZsYWdzICUjeFxuIiwgZG1hLCBmbGFncyk7CiAJcmV0dXJuIHBucF9yZXM7CiB9CiAKQEAgLTU2Miw3ICs1NjIsNyBAQAogCXJlcy0+c3RhcnQgPSBzdGFydDsKIAlyZXMtPmVuZCA9IGVuZDsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBhZGQgaW8gICUjbGx4LSUjbGx4IGZsYWdzICUjeFxuIiwKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgYWRkIGlvICAlI2xseC0lI2xseCBmbGFncyAlI3hcbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQsIGZsYWdzKTsKIAlyZXR1cm4gcG5wX3JlczsKIH0KQEAgLTU4Nyw3ICs1ODcsNyBAQAogCXJlcy0+c3RhcnQgPSBzdGFydDsKIAlyZXMtPmVuZCA9IGVuZDsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiICBhZGQgbWVtICUjbGx4LSUjbGx4IGZsYWdzICUjeFxuIiwKKwlwbnBfZGJnKCZkZXYtPmRldiwgIiAgYWRkIG1lbSAlI2xseC0lI2xseCBmbGFncyAlI3hcbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQsIGZsYWdzKTsKIAlyZXR1cm4gcG5wX3JlczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3N1cHBvcnQuYyBiL2RyaXZlcnMvcG5wL3N1cHBvcnQuYwppbmRleCBiNDJkZjE2Li42MzA4N2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9zdXBwb3J0LmMKKysrIGIvZHJpdmVycy9wbnAvc3VwcG9ydC5jCkBAIC03NSwxOCArNzUsMTcgQEAKIAogdm9pZCBkYmdfcG5wX3Nob3dfcmVzb3VyY2VzKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNoYXIgKmRlc2MpCiB7Ci0jaWZkZWYgREVCVUcKIAljaGFyIGJ1ZlsxMjhdOwogCWludCBsZW47CiAJc3RydWN0IHBucF9yZXNvdXJjZSAqcG5wX3JlczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWlmIChsaXN0X2VtcHR5KCZkZXYtPnJlc291cmNlcykpIHsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogbm8gY3VycmVudCByZXNvdXJjZXNcbiIsIGRlc2MpOworCQlwbnBfZGJnKCZkZXYtPmRldiwgIiVzOiBubyBjdXJyZW50IHJlc291cmNlc1xuIiwgZGVzYyk7CiAJCXJldHVybjsKIAl9CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBjdXJyZW50IHJlc291cmNlczpcbiIsIGRlc2MpOworCXBucF9kYmcoJmRldi0+ZGV2LCAiJXM6IGN1cnJlbnQgcmVzb3VyY2VzOlxuIiwgZGVzYyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwbnBfcmVzLCAmZGV2LT5yZXNvdXJjZXMsIGxpc3QpIHsKIAkJcmVzID0gJnBucF9yZXMtPnJlczsKIAkJbGVuID0gMDsKQEAgLTk1LDcgKzk0LDcgQEAKIAkJCQkgcG5wX3Jlc291cmNlX3R5cGVfbmFtZShyZXMpKTsKIAogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfRElTQUJMRUQpIHsKLQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXNkaXNhYmxlZFxuIiwgYnVmKTsKKwkJCXBucF9kYmcoJmRldi0+ZGV2LCAiJXNkaXNhYmxlZFxuIiwgYnVmKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTExNiw5ICsxMTUsOCBAQAogCQkJCQkgcmVzLT5mbGFncyk7CiAJCQlicmVhazsKIAkJfQotCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzXG4iLCBidWYpOworCQlwbnBfZGJnKCZkZXYtPmRldiwgIiVzXG4iLCBidWYpOwogCX0KLSNlbmRpZgogfQogCiBjaGFyICpwbnBfb3B0aW9uX3ByaW9yaXR5X25hbWUoc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbikKQEAgLTEzNiw3ICsxMzQsNiBAQAogCiB2b2lkIGRiZ19wbnBfc2hvd19vcHRpb24oc3RydWN0IHBucF9kZXYgKmRldiwgc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbikKIHsKLSNpZmRlZiBERUJVRwogCWNoYXIgYnVmWzEyOF07CiAJaW50IGxlbiA9IDAsIGk7CiAJc3RydWN0IHBucF9wb3J0ICpwb3J0OwpAQCAtMjA4LDYgKzIwNSw1IEBACiAJCQkJICJmbGFncyAlI3giLCBkbWEtPm1hcCwgZG1hLT5mbGFncyk7CiAJCWJyZWFrOwogCX0KLQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzXG4iLCBidWYpOwotI2VuZGlmCisJcG5wX2RiZygmZGV2LT5kZXYsICIlc1xuIiwgYnVmKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCA2M2JiNTc5Li44ZTBjMmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCkBAIC01MSw3ICs1MSw3IEBACiAKIGNvbmZpZyBCQVRURVJZX1RPU0EKIAl0cmlzdGF0ZSAiU2hhcnAgU0wtNjAwMCAodG9zYSkgYmF0dGVyeSIKLQlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIKKwlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIgJiYgVE9VQ0hTQ1JFRU5fV005N1hYCiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBiYXR0ZXJ5IG9uIHRoZSBTaGFycCBaYXVydXMKIAkgIFNMLTYwMDAgKHRvc2EpIG1vZGVscy4KQEAgLTYyLDQgKzYyLDEwIEBACiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGJhdHRlcnkgbWVhc3VyZWQgYnkgV005N3h4IGF1eCBwb3J0LgogCitjb25maWcgQkFUVEVSWV9CUTI3eDAwCisJdHJpc3RhdGUgIkJRMjcyMDAgYmF0dGVyeSBkcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJpZXMgd2l0aCBCUTI3MjAwKEkyQykgY2hpcC4KKwogZW5kaWYgIyBQT1dFUl9TVVBQTFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCmluZGV4IDRlMjAwMjYuLmU4ZjFlY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQpAQCAtMjEsNCArMjEsNSBAQAogb2JqLSQoQ09ORklHX0JBVFRFUllfUE1VKQkrPSBwbXVfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9PTFBDKQkrPSBvbHBjX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfVE9TQSkJKz0gdG9zYV9iYXR0ZXJ5Lm8KLW9iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubworb2JqLSQoQ09ORklHX0JBVFRFUllfQlEyN3gwMCkJKz0gYnEyN3gwMF9iYXR0ZXJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQlEyN3gwMCBiYXR0ZXJ5IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFdXJvdGVjaCBTLnAuQS4gPGluZm9AZXVyb3RlY2guaXQ+CisgKgorICogQmFzZWQgb24gYSBwcmV2aW91cyB3b3JrIGJ5IENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSIxLjAuMCIKKworI2RlZmluZSBCUTI3eDAwX1JFR19URU1QCQkweDA2CisjZGVmaW5lIEJRMjd4MDBfUkVHX1ZPTFQJCTB4MDgKKyNkZWZpbmUgQlEyN3gwMF9SRUdfUlNPQwkJMHgwQiAvKiBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UgKi8KKyNkZWZpbmUgQlEyN3gwMF9SRUdfQUkJCQkweDE0CisjZGVmaW5lIEJRMjd4MDBfUkVHX0ZMQUdTCQkweDBBCisKKy8qIElmIHRoZSBzeXN0ZW0gaGFzIHNldmVyYWwgYmF0dGVyaWVzIHdlIG5lZWQgYSBkaWZmZXJlbnQgbmFtZSBmb3IgZWFjaAorICogb2YgdGhlbS4uLgorICovCitzdGF0aWMgREVGSU5FX0lEUihiYXR0ZXJ5X2lkKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYmF0dGVyeV9tdXRleCk7CisKK3N0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvOworc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMgeworCWludCAoKnJlYWQpKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpOworfTsKKworc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8geworCXN0cnVjdCBkZXZpY2UgCQkqZGV2OworCWludAkJCWlkOworCWludAkJCXZvbHRhZ2VfdVY7CisJaW50CQkJY3VycmVudF91QTsKKwlpbnQJCQl0ZW1wX0M7CisJaW50CQkJY2hhcmdlX3Jzb2M7CisJc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMJKmJ1czsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5CWJhdDsKKworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7Cit9OworCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorfTsKKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBCUTI3eDAwIGRldmljZXMKKyAqLworCitzdGF0aWMgaW50IGJxMjd4MDBfcmVhZCh1OCByZWcsIGludCAqcnRfdmFsdWUsIGludCBiX3NpbmdsZSwKKwkJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGktPmJ1cy0+cmVhZChyZWcsIHJ0X3ZhbHVlLCBiX3NpbmdsZSwgZGkpOworCSpydF92YWx1ZSA9IGJlMTZfdG9fY3B1KCpydF92YWx1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IHRlbXBlcmF0dXJlIGluIENlbGNpdXMgZGVncmVlcworICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfdGVtcGVyYXR1cmUoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHRlbXAgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1RFTVAsICZ0ZW1wLCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHRlbXBlcmF0dXJlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gKHRlbXAgPj4gMikgLSAyNzM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgVm9sdGFnZSBpbiBtaWxpdm9sdHMKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2Uoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHZvbHQgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1ZPTFQsICZ2b2x0LCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHZvbHRhZ2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB2b2x0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IGF2ZXJhZ2UgY3VycmVudAorICogTm90ZSB0aGF0IGN1cnJlbnQgY2FuIGJlIG5lZ2F0aXZlIHNpZ25lZCBhcyB3ZWxsCisgKiBPciAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfY3VycmVudChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJaW50IHJldDsKKwlpbnQgY3VyciA9IDA7CisJaW50IGZsYWdzID0gMDsKKworCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3eDAwX1JFR19BSSwgJmN1cnIsIDAsIGRpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgY3VycmVudFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfRkxBR1MsICZmbGFncywgMCwgZGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgZmxhZ3NcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKChmbGFncyAmICgxIDw8IDcpKSAhPSAwKSB7CisJCWRldl9kYmcoZGktPmRldiwgIm5lZ2F0aXZlIGN1cnJlbnQhXG4iKTsKKwkJcmV0dXJuIC1jdXJyOworCX0KKwlyZXR1cm4gY3VycjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgYmF0dGVyeSBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3Jzb2Moc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHJzb2MgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1JTT0MsICZyc29jLCAxLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHJlbGF0aXZlIFN0YXRlLW9mLUNoYXJnZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJzb2MgPj4gODsKK30KKworI2RlZmluZSB0b19icTI3eDAwX2RldmljZV9pbmZvKHgpIGNvbnRhaW5lcl9vZigoeCksIFwKKwkJCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbywgYmF0KTsKKworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSA9IHRvX2JxMjd4MDBfZGV2aWNlX2luZm8ocHN5KTsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2UoZGkpOworCQlpZiAocHNwID09IFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQpCisJCQl2YWwtPmludHZhbCA9IHZhbC0+aW50dmFsIDw9IDAgPyAwIDogMTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBicTI3eDAwX2JhdHRlcnlfY3VycmVudChkaSk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3Jzb2MoZGkpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3RlbXBlcmF0dXJlKGRpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJxMjd4MDBfcG93ZXJzdXBwbHlfaW5pdChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJZGktPmJhdC50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKKwlkaS0+YmF0LnByb3BlcnRpZXMgPSBicTI3eDAwX2JhdHRlcnlfcHJvcHM7CisJZGktPmJhdC5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzKTsKKwlkaS0+YmF0LmdldF9wcm9wZXJ0eSA9IGJxMjd4MDBfYmF0dGVyeV9nZXRfcHJvcGVydHk7CisJZGktPmJhdC5leHRlcm5hbF9wb3dlcl9jaGFuZ2VkID0gTlVMTDsKK30KKworLyoKKyAqIEJRMjcyMDAgc3BlY2lmaWMgY29kZQorICovCisKK3N0YXRpYyBpbnQgYnEyNzIwMF9yZWFkKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkaS0+Y2xpZW50OworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMl07CisJaW50IGVycjsKKworCWlmICghY2xpZW50LT5hZGFwdGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1zZy0+YWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2ctPmZsYWdzID0gMDsKKwltc2ctPmxlbiA9IDE7CisJbXNnLT5idWYgPSBkYXRhOworCisJZGF0YVswXSA9IHJlZzsKKwllcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpOworCisJaWYgKGVyciA+PSAwKSB7CisJCWlmICghYl9zaW5nbGUpCisJCQltc2ctPmxlbiA9IDI7CisJCWVsc2UKKwkJCW1zZy0+bGVuID0gMTsKKworCQltc2ctPmZsYWdzID0gSTJDX01fUkQ7CisJCWVyciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CisJCWlmIChlcnIgPj0gMCkgeworCQkJaWYgKCFiX3NpbmdsZSkKKwkJCQkqcnRfdmFsdWUgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7CisJCQllbHNlCisJCQkJKnJ0X3ZhbHVlID0gZGF0YVswXTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWNoYXIgKm5hbWU7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpOworCXN0cnVjdCBicTI3eDAwX2FjY2Vzc19tZXRob2RzICpidXM7CisJaW50IG51bTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIEdldCBuZXcgSUQgZm9yIHRoZSBuZXcgYmF0dGVyeSBkZXZpY2UgKi8KKwlyZXR2YWwgPSBpZHJfcHJlX2dldCgmYmF0dGVyeV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9sb2NrKCZiYXR0ZXJ5X211dGV4KTsKKwlyZXR2YWwgPSBpZHJfZ2V0X25ldygmYmF0dGVyeV9pZCwgY2xpZW50LCAmbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYnEyNzIwMC0lZCIsIG51bSk7CisJaWYgKCFuYW1lKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBuYW1lXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8xOworCX0KKworCWRpID0ga3phbGxvYyhzaXplb2YoKmRpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkaSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2UgaW5mbyBkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8yOworCX0KKwlkaS0+aWQgPSBudW07CisKKwlidXMgPSBremFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidXMpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgYWNjZXNzIG1ldGhvZCAiCisJCQkJCSJkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8zOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRpKTsKKwlkaS0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWRpLT5iYXQubmFtZSA9IG5hbWU7CisJYnVzLT5yZWFkID0gJmJxMjcyMDBfcmVhZDsKKwlkaS0+YnVzID0gYnVzOworCWRpLT5jbGllbnQgPSBjbGllbnQ7CisKKwlicTI3eDAwX3Bvd2Vyc3VwcGx5X2luaXQoZGkpOworCisJcmV0dmFsID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgJmRpLT5iYXQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmF0dGVyeVxuIik7CisJCWdvdG8gYmF0dF9mYWlsZWRfNDsKKwl9CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJzdXBwb3J0IHZlci4gJXMgZW5hYmxlZFxuIiwgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CisKK2JhdHRfZmFpbGVkXzQ6CisJa2ZyZWUoYnVzKTsKK2JhdHRfZmFpbGVkXzM6CisJa2ZyZWUoZGkpOworYmF0dF9mYWlsZWRfMjoKKwlrZnJlZShuYW1lKTsKK2JhdHRfZmFpbGVkXzE6CisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGktPmJhdCk7CisKKwlrZnJlZShkaS0+YmF0Lm5hbWUpOworCisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgZGktPmlkKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJa2ZyZWUoZGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNb2R1bGUgc3R1ZmYKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnEyNzIwMF9pZFtdID0geworCXsgImJxMjcyMDAiLCAwIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJicTI3MjAwLWJhdHRlcnkiLAorCX0sCisJLnByb2JlID0gYnEyNzIwMF9iYXR0ZXJ5X3Byb2JlLAorCS5yZW1vdmUgPSBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJxMjcyMDBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBicTI3eDAwX2JhdHRlcnlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgQlEyNzIwMCBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGJxMjd4MDBfYmF0dGVyeV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGJxMjd4MDBfYmF0dGVyeV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmJxMjcyMDBfYmF0dGVyeV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYnEyN3gwMF9iYXR0ZXJ5X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQlEyN3gwMCBiYXR0ZXJ5IG1vbml0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jIGIvZHJpdmVycy9wb3dlci9wZGFfcG93ZXIuYwppbmRleCAwNDcxZWM3Li5kMzBiYjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcGRhX3Bvd2VyLmMKQEAgLTMzNCwxMyArMzM0LDE2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWNfd2FrZXVwX2VuYWJsZWQ7CitzdGF0aWMgaW50IHVzYl93YWtldXBfZW5hYmxlZDsKKwogc3RhdGljIGludCBwZGFfcG93ZXJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CiAJCWlmIChhY19pcnEpCi0JCQllbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CisJCQlhY193YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CiAJCWlmICh1c2JfaXJxKQotCQkJZW5hYmxlX2lycV93YWtlKHVzYl9pcnEtPnN0YXJ0KTsKKwkJCXVzYl93YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzQ5LDkgKzM1Miw5IEBACiBzdGF0aWMgaW50IHBkYV9wb3dlcl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKLQkJaWYgKHVzYl9pcnEpCisJCWlmICh1c2JfaXJxICYmIHVzYl93YWtldXBfZW5hYmxlZCkKIAkJCWRpc2FibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwotCQlpZiAoYWNfaXJxKQorCQlpZiAoYWNfaXJxICYmIGFjX3dha2V1cF9lbmFibGVkKQogCQkJZGlzYWJsZV9pcnFfd2FrZShhY19pcnEtPnN0YXJ0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwppbmRleCAzMDA3Njk1Li41NTIwMDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9jb3JlLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCkBAIC04Nyw2ICs4NywzMCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBfX3Bvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsIHJldCA9IHswLH07CisJc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAocHN5LT50eXBlICE9IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlkpIHsKKwkJaWYgKHBzeS0+Z2V0X3Byb3BlcnR5KHBzeSwgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FLCAmcmV0KSkKKwkJCXJldHVybiAwOworCQlpZiAocmV0LmludHZhbCkKKwkJCXJldHVybiByZXQuaW50dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGNsYXNzX2Zvcl9lYWNoX2RldmljZShwb3dlcl9zdXBwbHlfY2xhc3MsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgX19wb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogaW50IHBvd2VyX3N1cHBseV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSkKIHsKIAlpbnQgcmMgPSAwOwpAQCAtMTQ4LDYgKzE3Miw3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9jaGFuZ2VkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9hbV9pX3N1cHBsaWVkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQpOwogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKaW5kZXggZmUyYWViMS4uMjNhZTg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYworKysgYi9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCkBAIC0zMCw3ICszMCw3IEBACiAKICNkZWZpbmUgUE9XRVJfU1VQUExZX0FUVFIoX25hbWUpCQkJCQlcCiB7CQkJCQkJCQkJXAotCS5hdHRyID0geyAubmFtZSA9ICNfbmFtZSwgLm1vZGUgPSAwNDQ0LCAub3duZXIgPSBUSElTX01PRFVMRSB9LAlcCisJLmF0dHIgPSB7IC5uYW1lID0gI19uYW1lLCAubW9kZSA9IDA0NDQgfSwJXAogCS5zaG93ID0gcG93ZXJfc3VwcGx5X3Nob3dfcHJvcGVydHksCQkJCVwKIAkuc3RvcmUgPSBOVUxMLAkJCQkJCQlcCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNhdi5jIGIvZHJpdmVycy9wczMvcHMzYXYuYwppbmRleCA2ZjJmOTBlLi4wNjg0OGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdi5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKQEAgLTkxNSw2ICs5MTUsMjIgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwocHMzYXZfdmlkZW9fbXV0ZSk7CiAKKy8qIG11dGUgYW5hbG9nIG91dHB1dCBvbmx5ICovCitpbnQgcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coaW50IG11dGUpCit7CisJaW50IGksIHJlczsKKworCWZvciAoaSA9IDA7IGkgPCBwczNhdi0+YXZfaHdfY29uZi5udW1fb2ZfYXZtdWx0aTsgaSsrKSB7CisJCXJlcyA9IHBzM2F2X2NtZF9hdl9hdWRpb19tdXRlKDEsCisJCQkmcHMzYXYtPmF2X3BvcnRbaSArIHBzM2F2LT5hdl9od19jb25mLm51bV9vZl9oZG1pXSwKKwkJCW11dGUpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwczNhdl9hdWRpb19tdXRlX2FuYWxvZyk7CisKIGludCBwczNhdl9hdWRpb19tdXRlKGludCBtdXRlKQogewogCXJldHVybiBwczNhdl9zZXRfYXVkaW9fbXV0ZShtdXRlID8gUFMzQVZfQ01EX01VVEVfT04KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzM2F2X2NtZC5jIGIvZHJpdmVycy9wczMvcHMzYXZfY21kLmMKaW5kZXggN2Y4ODBjMi4uMTFlYjUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzYXZfY21kLmMKKysrIGIvZHJpdmVycy9wczMvcHMzYXZfY21kLmMKQEAgLTY2MCw5ICs2NjAsMTAgQEAKIH0KIAogLyogZGVmYXVsdCBjcyB2YWwgKi8KLXN0YXRpYyBjb25zdCB1OCBwczNhdl9tb2RlX2NzX2luZm9bXSA9IHsKK3U4IHBzM2F2X21vZGVfY3NfaW5mb1tdID0gewogCTB4MDAsIDB4MDksIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAKIH07CitFWFBPUlRfU1lNQk9MX0dQTChwczNhdl9tb2RlX2NzX2luZm8pOwogCiAjZGVmaW5lIENTXzQ0CTB4MDAKICNkZWZpbmUgQ1NfNDgJMHgwMgpAQCAtNjc3LDcgKzY3OCw3IEBACiAJCQkgICAgICB1MzIgY2gsIHUzMiBmcywgdTMyIHdvcmRfYml0cywgdTMyIGZvcm1hdCwKIAkJCSAgICAgIHUzMiBzb3VyY2UpCiB7Ci0JaW50IHNwZGlmX3Rocm91Z2gsIHNwZGlmX2JpdHN0cmVhbTsKKwlpbnQgc3BkaWZfdGhyb3VnaDsKIAlpbnQgaTsKIAogCWlmICghKGNoIHwgZnMgfCBmb3JtYXQgfCB3b3JkX2JpdHMgfCBzb3VyY2UpKSB7CkBAIC02ODcsNyArNjg4LDYgQEAKIAkJZm9ybWF0ID0gUFMzQVZfQ01EX0FVRElPX0ZPUk1BVF9QQ007CiAJCXNvdXJjZSA9IFBTM0FWX0NNRF9BVURJT19TT1VSQ0VfU0VSSUFMOwogCX0KLQlzcGRpZl90aHJvdWdoID0gc3BkaWZfYml0c3RyZWFtID0gMDsJLyogWFhYIG5vdCBzdXBwb3J0ZWQgKi8KIAogCS8qIGF1ZGlvIG1vZGUgKi8KIAltZW1zZXQoYXVkaW8sIDAsIHNpemVvZigqYXVkaW8pKTsKQEAgLTc3NywxNiArNzc3LDE3IEBACiAJCWJyZWFrOwogCX0KIAorCS8qIG5vbi1hdWRpbyBiaXQgKi8KKwlzcGRpZl90aHJvdWdoID0gYXVkaW8tPmF1ZGlvX2NzX2luZm9bMF0gJiAweDAyOworCiAJLyogcGFzcyB0aHJvdWdoIHNldHRpbmcgKi8KIAlpZiAoc3BkaWZfdGhyb3VnaCAmJgogCSAgICAoYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfU1BESUZfMCB8fAotCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfU1BESUZfMSkpIHsKKwkgICAgIGF2cG9ydCA9PSBQUzNBVl9DTURfQVZQT1JUX1NQRElGXzEgfHwKKwkgICAgIGF2cG9ydCA9PSBQUzNBVl9DTURfQVZQT1JUX0hETUlfMCB8fAorCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfSERNSV8xKSkgewogCQlhdWRpby0+YXVkaW9fd29yZF9iaXRzID0gUFMzQVZfQ01EX0FVRElPX1dPUkRfQklUU18xNjsKLQkJYXVkaW8tPmF1ZGlvX3NvdXJjZSA9IFBTM0FWX0NNRF9BVURJT19TT1VSQ0VfU1BESUY7Ci0JCWlmIChzcGRpZl9iaXRzdHJlYW0pIHsKLQkJCWF1ZGlvLT5hdWRpb19mb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX0JJVFNUUkVBTTsKLQkJCWF1ZGlvLT5hdWRpb19jc19pbmZvWzBdIHw9IENTX0JJVDsKLQkJfQorCQlhdWRpby0+YXVkaW9fZm9ybWF0ID0gUFMzQVZfQ01EX0FVRElPX0ZPUk1BVF9CSVRTVFJFQU07CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCBmNjYwZWYzLi44YWJiYjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTE3MSwxMCArMTcxLDEwIEBACiAJICB3aWxsIGJlIGNhbGxlZCBydGMtbWF4NjkwMC4KIAogY29uZmlnIFJUQ19EUlZfUlM1QzM3MgotCXRyaXN0YXRlICJSaWNvaCBSUzVDMzcyQS9CLCBSVjVDMzg2LCBSVjVDMzg3QSIKKwl0cmlzdGF0ZSAiUmljb2ggUjIwMjVTL0QsIFJTNUMzNzJBL0IsIFJWNUMzODYsIFJWNUMzODdBIgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUKLQkgIFJpY29oIFJTNUMzNzJBLCBSUzVDMzcyQiwgUlY1QzM4NiwgYW5kIFJWNUMzODdBIFJUQyBjaGlwcy4KKwkgIFJpY29oIFIyMDI1Uy9ELCBSUzVDMzcyQSwgUlM1QzM3MkIsIFJWNUMzODYsIGFuZCBSVjVDMzg3QSBSVEMgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXJzNWMzNzIuCkBAIC0yNDYsNiArMjQ2LDE2IEBACiAJICBwbGF0Zm9ybXMuICBUaGUgc3VwcG9ydCBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIHJlc3Qgb2YKIAkgIHRoZSBNZW5lbGF1cyBkcml2ZXI7IGl0J3Mgbm90IHNlcGFyYXRlIG1vZHVsZS4KIAorY29uZmlnIFJUQ19EUlZfVFdMNDAzMAorCXRyaXN0YXRlICJUSSBUV0w0MDMwL1RXTDUwMzAvVFBTNjU5eDAiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgVFdMNDAzMF9DT1JFCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBSVEMgb24gdGhlCisJICBUV0w0MDMwIGZhbWlseSBjaGlwcywgdXNlZCBtb3N0bHkgd2l0aCBPTUFQMyBwbGF0Zm9ybXMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXR3bDQwMzAuCisKIGNvbmZpZyBSVENfRFJWX1MzNTM5MEEKIAl0cmlzdGF0ZSAiU2Vpa28gSW5zdHJ1bWVudHMgUy0zNTM5MEEiCiAJc2VsZWN0IEJJVFJFVkVSU0UKQEAgLTYxMCw2ICs2MjAsMTQgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFJpY29oIFJTNUMzMTMgUlRDIGNoaXBzLgogCitjb25maWcgUlRDX0RSVl9QQVJJU0MKKwl0cmlzdGF0ZSAiUEEtUklTQyBmaXJtd2FyZSBSVEMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBBUklTQworCWhlbHAKKwkgIFNheSBZIG9yIE0gaGVyZSB0byBlbmFibGUgUlRDIHN1cHBvcnQgb24gUEEtUklTQyBzeXN0ZW1zIHVzaW5nCisJICBmaXJtd2FyZSBjYWxscy4gSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZAorCSAganVzdCBzYXkgWS4KKwogY29uZmlnIFJUQ19EUlZfUFBDCiAgICAgICAgdHJpc3RhdGUgIlBvd2VyUEMgbWFjaGluZSBkZXBlbmRlbnQgUlRDIHN1cHBvcnQiCiAgICAgICAgZGVwZW5kcyBvbiBQUEMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggZDA1OTI4Yi4uZTllODQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTUxLDYgKzUxLDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjg1ODMpCSs9IHJ0Yy1wY2Y4NTgzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BMMDMwKQkrPSBydGMtcGwwMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzEpCSs9IHJ0Yy1wbDAzMS5vCitvYmotJChDT05GSUdfUlRDX0RSVl9QQVJJU0MpCSs9IHJ0Yy1wYXJpc2Mubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUFBDKQkrPSBydGMtcHBjLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1I5NzAxKQkrPSBydGMtcjk3MDEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzMxMykJKz0gcnRjLXJzNWMzMTMubwpAQCAtNjIsNiArNjMsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfU0gpCSs9IHJ0Yy1zaC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCkJKz0gcnRjLXN0azE3dGE4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1RFU1QpCSs9IHJ0Yy10ZXN0Lm8KK29iai0kKENPTkZJR19SVENfRFJWX1RXTDQwMzApCSs9IHJ0Yy10d2w0MDMwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1YzMDIwKQkrPSBydGMtdjMwMjAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfVlI0MVhYKQkrPSBydGMtdnI0MXh4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1gxMjA1KQkrPSBydGMteDEyMDUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKaW5kZXggMzcwODI2MS4uYjViZjkzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCkBAIC01MywyMSArNTMsMjEgQEAKIAl9IHdoaWxlICgodGltZSAhPSBhdDkxX3N5c19yZWFkKHRpbWVyZWcpKSB8fAogCQkJKGRhdGUgIT0gYXQ5MV9zeXNfcmVhZChjYWxyZWcpKSk7CiAKLQl0bS0+dG1fc2VjICA9IEJDRDJCSU4oKHRpbWUgJiBBVDkxX1JUQ19TRUMpID4+IDApOwotCXRtLT50bV9taW4gID0gQkNEMkJJTigodGltZSAmIEFUOTFfUlRDX01JTikgPj4gOCk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKCh0aW1lICYgQVQ5MV9SVENfSE9VUikgPj4gMTYpOworCXRtLT50bV9zZWMgID0gYmNkMmJpbigodGltZSAmIEFUOTFfUlRDX1NFQykgPj4gMCk7CisJdG0tPnRtX21pbiAgPSBiY2QyYmluKCh0aW1lICYgQVQ5MV9SVENfTUlOKSA+PiA4KTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oKHRpbWUgJiBBVDkxX1JUQ19IT1VSKSA+PiAxNik7CiAKIAkvKgogCSAqIFRoZSBDYWxlbmRhciBBbGFybSByZWdpc3RlciBkb2VzIG5vdCBoYXZlIGEgZmllbGQgZm9yCiAJICogdGhlIHllYXIgLSBzbyB0aGVzZSB3aWxsIHJldHVybiBhbiBpbnZhbGlkIHZhbHVlLiAgV2hlbiBhbgogCSAqIGFsYXJtIGlzIHNldCwgYXQ5MV9hbGFybV95ZWFyIHdpbGxlIHN0b3JlIHRoZSBjdXJyZW50IHllYXIuCiAJICovCi0JdG0tPnRtX3llYXIgID0gQkNEMkJJTihkYXRlICYgQVQ5MV9SVENfQ0VOVCkgKiAxMDA7CS8qIGNlbnR1cnkgKi8KLQl0bS0+dG1feWVhciArPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfWUVBUikgPj4gOCk7CS8qIHllYXIgKi8KKwl0bS0+dG1feWVhciAgPSBiY2QyYmluKGRhdGUgJiBBVDkxX1JUQ19DRU5UKSAqIDEwMDsJLyogY2VudHVyeSAqLworCXRtLT50bV95ZWFyICs9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19ZRUFSKSA+PiA4KTsJLyogeWVhciAqLwogCi0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfREFZKSA+PiAyMSkgLSAxOwkvKiBkYXkgb2YgdGhlIHdlZWsgWzAtNl0sIFN1bmRheT0wICovCi0JdG0tPnRtX21vbiAgPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfTU9OVEgpID4+IDE2KSAtIDE7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfREFURSkgPj4gMjQpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX0RBWSkgPj4gMjEpIC0gMTsJLyogZGF5IG9mIHRoZSB3ZWVrIFswLTZdLCBTdW5kYXk9MCAqLworCXRtLT50bV9tb24gID0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX01PTlRIKSA+PiAxNikgLSAxOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX0RBVEUpID4+IDI0KTsKIH0KIAogLyoKQEAgLTEwNiwxNiArMTA2LDE2IEBACiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BQ0tVUEQpOwogCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfVElNUiwKLQkJCSAgQklOMkJDRCh0bS0+dG1fc2VjKSA8PCAwCi0JCQl8IEJJTjJCQ0QodG0tPnRtX21pbikgPDwgOAotCQkJfCBCSU4yQkNEKHRtLT50bV9ob3VyKSA8PCAxNik7CisJCQkgIGJpbjJiY2QodG0tPnRtX3NlYykgPDwgMAorCQkJfCBiaW4yYmNkKHRtLT50bV9taW4pIDw8IDgKKwkJCXwgYmluMmJjZCh0bS0+dG1faG91cikgPDwgMTYpOwogCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfQ0FMUiwKLQkJCSAgQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCkJLyogY2VudHVyeSAqLwotCQkJfCBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSA8PCA4CS8qIHllYXIgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgPDwgMTYJCS8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLwotCQkJfCBCSU4yQkNEKHRtLT50bV93ZGF5ICsgMSkgPDwgMjEJLyogZGF5IG9mIHRoZSB3ZWVrIFswLTZdLCBTdW5kYXk9MCAqLwotCQkJfCBCSU4yQkNEKHRtLT50bV9tZGF5KSA8PCAyNCk7CisJCQkgIGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApCS8qIGNlbnR1cnkgKi8KKwkJCXwgYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCkgPDwgOAkvKiB5ZWFyICovCisJCQl8IGJpbjJiY2QodG0tPnRtX21vbiArIDEpIDw8IDE2CQkvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KKwkJCXwgYmluMmJjZCh0bS0+dG1fd2RheSArIDEpIDw8IDIxCS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KKwkJCXwgYmluMmJjZCh0bS0+dG1fbWRheSkgPDwgMjQpOwogCiAJLyogUmVzdGFydCBUaW1lL0NhbGVuZGFyICovCiAJY3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUlRDX0NSKTsKQEAgLTE2MiwxMyArMTYyLDEzIEBACiAKIAlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRFIsIEFUOTFfUlRDX0FMQVJNKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19USU1BTFIsCi0JCSAgQklOMkJDRCh0bS50bV9zZWMpIDw8IDAKLQkJfCBCSU4yQkNEKHRtLnRtX21pbikgPDwgOAotCQl8IEJJTjJCQ0QodG0udG1faG91cikgPDwgMTYKKwkJICBiaW4yYmNkKHRtLnRtX3NlYykgPDwgMAorCQl8IGJpbjJiY2QodG0udG1fbWluKSA8PCA4CisJCXwgYmluMmJjZCh0bS50bV9ob3VyKSA8PCAxNgogCQl8IEFUOTFfUlRDX0hPVVJFTiB8IEFUOTFfUlRDX01JTkVOIHwgQVQ5MV9SVENfU0VDRU4pOwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0NBTEFMUiwKLQkJICBCSU4yQkNEKHRtLnRtX21vbiArIDEpIDw8IDE2CQkvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KLQkJfCBCSU4yQkNEKHRtLnRtX21kYXkpIDw8IDI0CisJCSAgYmluMmJjZCh0bS50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJCXwgYmluMmJjZCh0bS50bV9tZGF5KSA8PCAyNAogCQl8IEFUOTFfUlRDX0RBVEVFTiB8IEFUOTFfUlRDX01USEVOKTsKIAogCWlmIChhbHJtLT5lbmFibGVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMKaW5kZXggMTg5YTAxOC4uZDAwYTI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1icTQ4MDIuYwpAQCAtNzEsMTQgKzcxLDE0IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CiAKLQlCQ0RfVE9fQklOKHRtLT50bV9zZWMpOwotCUJDRF9UT19CSU4odG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTih0bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHRtLT50bV95ZWFyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV93ZGF5KTsKLQlCQ0RfVE9fQklOKGNlbnR1cnkpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih0bS0+dG1fd2RheSk7CisJY2VudHVyeSA9IGJjZDJiaW4oY2VudHVyeSk7CiAKIAl0bS0+dG1feWVhciArPSAoY2VudHVyeSAqIDEwMCk7CiAJdG0tPnRtX3llYXIgLT0gMTkwMDsKQEAgLTEwNiwxMyArMTA2LDEzIEBACiAJbWluID0gdG0tPnRtX21pbjsKIAlzZWMgPSB0bS0+dG1fc2VjOwogCi0JQklOX1RPX0JDRChzZWMpOwotCUJJTl9UT19CQ0QobWluKTsKLQlCSU5fVE9fQkNEKGhycyk7Ci0JQklOX1RPX0JDRChkYXkpOwotCUJJTl9UT19CQ0QobW9uKTsKLQlCSU5fVE9fQkNEKHlycyk7Ci0JQklOX1RPX0JDRChjZW50dXJ5KTsKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKKwljZW50dXJ5ID0gYmluMmJjZChjZW50dXJ5KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCmluZGV4IDk2M2FkMGIuLjU1NDkyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwpAQCAtMTQzLDYgKzE0Myw0MyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWZkZWYgUlRDX1BPUlQKKworLyogTW9zdCBuZXdlciB4ODYgc3lzdGVtcyBoYXZlIHR3byByZWdpc3RlciBiYW5rcywgdGhlIGZpcnN0IHVzZWQKKyAqIGZvciBSVEMgYW5kIE5WUkFNIGFuZCB0aGUgc2Vjb25kIG9ubHkgZm9yIE5WUkFNLiAgQ2FsbGVyIG11c3QKKyAqIG93biBydGNfbG9jayAuLi4gYW5kIHdlIHdvbid0IHdvcnJ5IGFib3V0IGFjY2VzcyBkdXJpbmcgTk1JLgorICovCisjZGVmaW5lIGNhbl9iYW5rMgl0cnVlCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjbW9zX3JlYWRfYmFuazIodW5zaWduZWQgY2hhciBhZGRyKQoreworCW91dGIoYWRkciwgUlRDX1BPUlQoMikpOworCXJldHVybiBpbmIoUlRDX1BPUlQoMykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY21vc193cml0ZV9iYW5rMih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKQoreworCW91dGIoYWRkciwgUlRDX1BPUlQoMikpOworCW91dGIodmFsLCBSVENfUE9SVCgyKSk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgY2FuX2JhbmsyCWZhbHNlCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjbW9zX3JlYWRfYmFuazIodW5zaWduZWQgY2hhciBhZGRyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY21vc193cml0ZV9iYW5rMih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKQoreworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIGludCBjbW9zX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdCkKIHsKIAkvKiBSRVZJU0lUOiAgaWYgdGhlIGNsb2NrIGhhcyBhICJjZW50dXJ5IiByZWdpc3RlciwgdXNlCkBAIC0yMDMsMjYgKzI0MCwyNiBAQAogCS8qIFJFVklTSVQgdGhpcyBhc3N1bWVzIFBDIHN0eWxlIHVzYWdlOiAgYWx3YXlzIEJDRCAqLwogCiAJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9zZWMpIDwgMHg2MCkKLQkJdC0+dGltZS50bV9zZWMgPSBCQ0QyQklOKHQtPnRpbWUudG1fc2VjKTsKKwkJdC0+dGltZS50bV9zZWMgPSBiY2QyYmluKHQtPnRpbWUudG1fc2VjKTsKIAllbHNlCiAJCXQtPnRpbWUudG1fc2VjID0gLTE7CiAJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9taW4pIDwgMHg2MCkKLQkJdC0+dGltZS50bV9taW4gPSBCQ0QyQklOKHQtPnRpbWUudG1fbWluKTsKKwkJdC0+dGltZS50bV9taW4gPSBiY2QyYmluKHQtPnRpbWUudG1fbWluKTsKIAllbHNlCiAJCXQtPnRpbWUudG1fbWluID0gLTE7CiAJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9ob3VyKSA8IDB4MjQpCi0JCXQtPnRpbWUudG1faG91ciA9IEJDRDJCSU4odC0+dGltZS50bV9ob3VyKTsKKwkJdC0+dGltZS50bV9ob3VyID0gYmNkMmJpbih0LT50aW1lLnRtX2hvdXIpOwogCWVsc2UKIAkJdC0+dGltZS50bV9ob3VyID0gLTE7CiAKIAlpZiAoY21vcy0+ZGF5X2Fscm0pIHsKIAkJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9tZGF5KSA8PSAweDMxKQotCQkJdC0+dGltZS50bV9tZGF5ID0gQkNEMkJJTih0LT50aW1lLnRtX21kYXkpOworCQkJdC0+dGltZS50bV9tZGF5ID0gYmNkMmJpbih0LT50aW1lLnRtX21kYXkpOwogCQllbHNlCiAJCQl0LT50aW1lLnRtX21kYXkgPSAtMTsKIAkJaWYgKGNtb3MtPm1vbl9hbHJtKSB7CiAJCQlpZiAoKCh1bnNpZ25lZCl0LT50aW1lLnRtX21vbikgPD0gMHgxMikKLQkJCQl0LT50aW1lLnRtX21vbiA9IEJDRDJCSU4odC0+dGltZS50bV9tb24pIC0gMTsKKwkJCQl0LT50aW1lLnRtX21vbiA9IGJjZDJiaW4odC0+dGltZS50bV9tb24pIC0gMTsKIAkJCWVsc2UKIAkJCQl0LT50aW1lLnRtX21vbiA9IC0xOwogCQl9CkBAIC0yOTQsMTkgKzMzMSwxOSBAQAogCS8qIFdyaXRpbmcgMHhmZiBtZWFucyAiZG9uJ3QgY2FyZSIgb3IgIm1hdGNoIGFsbCIuICAqLwogCiAJbW9uID0gdC0+dGltZS50bV9tb24gKyAxOwotCW1vbiA9IChtb24gPD0gMTIpID8gQklOMkJDRChtb24pIDogMHhmZjsKKwltb24gPSAobW9uIDw9IDEyKSA/IGJpbjJiY2QobW9uKSA6IDB4ZmY7CiAKIAltZGF5ID0gdC0+dGltZS50bV9tZGF5OwotCW1kYXkgPSAobWRheSA+PSAxICYmIG1kYXkgPD0gMzEpID8gQklOMkJDRChtZGF5KSA6IDB4ZmY7CisJbWRheSA9IChtZGF5ID49IDEgJiYgbWRheSA8PSAzMSkgPyBiaW4yYmNkKG1kYXkpIDogMHhmZjsKIAogCWhycyA9IHQtPnRpbWUudG1faG91cjsKLQlocnMgPSAoaHJzIDwgMjQpID8gQklOMkJDRChocnMpIDogMHhmZjsKKwlocnMgPSAoaHJzIDwgMjQpID8gYmluMmJjZChocnMpIDogMHhmZjsKIAogCW1pbiA9IHQtPnRpbWUudG1fbWluOwotCW1pbiA9IChtaW4gPCA2MCkgPyBCSU4yQkNEKG1pbikgOiAweGZmOworCW1pbiA9IChtaW4gPCA2MCkgPyBiaW4yYmNkKG1pbikgOiAweGZmOwogCiAJc2VjID0gdC0+dGltZS50bV9zZWM7Ci0Jc2VjID0gKHNlYyA8IDYwKSA/IEJJTjJCQ0Qoc2VjKSA6IDB4ZmY7CisJc2VjID0gKHNlYyA8IDYwKSA/IGJpbjJiY2Qoc2VjKSA6IDB4ZmY7CiAKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CiAKQEAgLTQ5MSwxMiArNTI4LDIxIEBACiAKIAlpZiAodW5saWtlbHkob2ZmID49IGF0dHItPnNpemUpKQogCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkob2ZmIDwgMCkpCisJCXJldHVybiAtRUlOVkFMOwogCWlmICgob2ZmICsgY291bnQpID4gYXR0ci0+c2l6ZSkKIAkJY291bnQgPSBhdHRyLT5zaXplIC0gb2ZmOwogCisJb2ZmICs9IE5WUkFNX09GRlNFVDsKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JZm9yIChyZXR2YWwgPSAwLCBvZmYgKz0gTlZSQU1fT0ZGU0VUOyBjb3VudC0tOyByZXR2YWwrKywgb2ZmKyspCi0JCSpidWYrKyA9IENNT1NfUkVBRChvZmYpOworCWZvciAocmV0dmFsID0gMDsgY291bnQ7IGNvdW50LS0sIG9mZisrLCByZXR2YWwrKykgeworCQlpZiAob2ZmIDwgMTI4KQorCQkJKmJ1ZisrID0gQ01PU19SRUFEKG9mZik7CisJCWVsc2UgaWYgKGNhbl9iYW5rMikKKwkJCSpidWYrKyA9IGNtb3NfcmVhZF9iYW5rMihvZmYpOworCQllbHNlCisJCQlicmVhazsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTEyLDYgKzU1OCw4IEBACiAJY21vcyA9IGRldl9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwogCWlmICh1bmxpa2VseShvZmYgPj0gYXR0ci0+c2l6ZSkpCiAJCXJldHVybiAtRUZCSUc7CisJaWYgKHVubGlrZWx5KG9mZiA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoKG9mZiArIGNvdW50KSA+IGF0dHItPnNpemUpCiAJCWNvdW50ID0gYXR0ci0+c2l6ZSAtIG9mZjsKIApAQCAtNTIwLDE1ICs1NjgsMjAgQEAKIAkgKiBoZXJlLiAgSWYgdXNlcnNwYWNlIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHdoYXQgZmllbGRzIG9mCiAJICogTlZSQU0gdG8gdXBkYXRlLCB1cGRhdGluZyBjaGVja3N1bXMgaXMgYWxzbyBwYXJ0IG9mIGl0cyBqb2IuCiAJICovCisJb2ZmICs9IE5WUkFNX09GRlNFVDsKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JZm9yIChyZXR2YWwgPSAwLCBvZmYgKz0gTlZSQU1fT0ZGU0VUOyBjb3VudC0tOyByZXR2YWwrKywgb2ZmKyspIHsKKwlmb3IgKHJldHZhbCA9IDA7IGNvdW50OyBjb3VudC0tLCBvZmYrKywgcmV0dmFsKyspIHsKIAkJLyogZG9uJ3QgdHJhc2ggUlRDIHJlZ2lzdGVycyAqLwogCQlpZiAob2ZmID09IGNtb3MtPmRheV9hbHJtCiAJCQkJfHwgb2ZmID09IGNtb3MtPm1vbl9hbHJtCiAJCQkJfHwgb2ZmID09IGNtb3MtPmNlbnR1cnkpCiAJCQlidWYrKzsKLQkJZWxzZQorCQllbHNlIGlmIChvZmYgPCAxMjgpCiAJCQlDTU9TX1dSSVRFKCpidWYrKywgb2ZmKTsKKwkJZWxzZSBpZiAoY2FuX2JhbmsyKQorCQkJY21vc193cml0ZV9iYW5rMigqYnVmKyssIG9mZik7CisJCWVsc2UKKwkJCWJyZWFrOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIApAQCAtNTM5LDcgKzU5Miw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lCT0gIm52cmFtIiwKIAkJLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAogCS5yZWFkCT0gY21vc19udnJhbV9yZWFkLApAQCAtNjMxLDggKzY4Myw4IEBACiAKIAkvKiBIZXVyaXN0aWMgdG8gZGVkdWNlIE5WUkFNIHNpemUgLi4uIGRvIHdoYXQgdGhlIGxlZ2FjeSBOVlJBTQogCSAqIGRyaXZlciBkaWQsIGJ1dCBkb24ndCByZWplY3QgdW5rbm93biBjb25maWdzLiAgIE9sZCBoYXJkd2FyZQotCSAqIHdvbid0IGFkZHJlc3MgMTI4IGJ5dGVzLCBhbmQgZm9yIG5vdyB3ZSBpZ25vcmUgdGhlIHdheSBuZXdlcgotCSAqIGNoaXBzIGNhbiBhZGRyZXNzIDI1NiBieXRlcyAodXNpbmcgdHdvIG1vcmUgaS9vIHBvcnRzKS4KKwkgKiB3b24ndCBhZGRyZXNzIDEyOCBieXRlcy4gIE5ld2VyIGNoaXBzIGhhdmUgbXVsdGlwbGUgYmFua3MsCisJICogdGhvdWdoIHRoZXkgbWF5IG5vdCBiZSBsaXN0ZWQgaW4gb25lIEkvTyByZXNvdXJjZS4KIAkgKi8KICNpZglkZWZpbmVkKENPTkZJR19BVEFSSSkKIAlhZGRyZXNzX3NwYWNlID0gNjQ7CkBAIC02NDIsNiArNjk0LDggQEAKICN3YXJuaW5nIEFzc3VtaW5nIDEyOCBieXRlcyBvZiBSVEMrTlZSQU0gYWRkcmVzcyBzcGFjZSwgbm90IDY0IGJ5dGVzLgogCWFkZHJlc3Nfc3BhY2UgPSAxMjg7CiAjZW5kaWYKKwlpZiAoY2FuX2JhbmsyICYmIHBvcnRzLT5lbmQgPiAocG9ydHMtPnN0YXJ0ICsgMSkpCisJCWFkZHJlc3Nfc3BhY2UgPSAyNTY7CiAKIAkvKiBGb3IgQUNQSSBzeXN0ZW1zIGV4dGVuc2lvbiBpbmZvIGNvbWVzIGZyb20gdGhlIEZBRFQuICBPbiBvdGhlcnMsCiAJICogYm9hcmQgc3BlY2lmaWMgc2V0dXAgcHJvdmlkZXMgaXQgYXMgYXBwcm9wcmlhdGUuICBTeXN0ZW1zIHdoZXJlCkBAIC03NDAsNyArNzk0LDcgQEAKIAkJZ290byBjbGVhbnVwMjsKIAl9CiAKLQlwcl9pbmZvKCIlczogYWxhcm1zIHVwIHRvIG9uZSAlcyVzJXNcbiIsCisJcHJfaW5mbygiJXM6IGFsYXJtcyB1cCB0byBvbmUgJXMlcywgJXpkIGJ5dGVzIG52cmFtLCAlcyBpcnFzXG4iLAogCQkJY21vc19ydGMucnRjLT5kZXYuYnVzX2lkLAogCQkJaXNfdmFsaWRfaXJxKHJ0Y19pcnEpCiAJCQkJPyAgKGNtb3NfcnRjLm1vbl9hbHJtCkBAIC03NDksNiArODAzLDcgQEAKIAkJCQkJCT8gIm1vbnRoIiA6ICJkYXkiKSkKIAkJCQk6ICJubyIsCiAJCQljbW9zX3J0Yy5jZW50dXJ5ID8gIiwgeTNrIiA6ICIiLAorCQkJbnZyYW0uc2l6ZSwKIAkJCWlzX2hwZXRfZW5hYmxlZCgpID8gIiwgaHBldCBpcnFzIiA6ICIiKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTIxNi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTIxNi5jCmluZGV4IDBiMTc3NzAuLjlhMjM0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMKQEAgLTg2LDE5ICs4NiwxOSBAQAogCWRzMTIxNl9zd2l0Y2hfZHNfdG9fY2xvY2socHJpdi0+aW9hZGRyKTsKIAlkczEyMTZfcmVhZChwcml2LT5pb2FkZHIsICh1OCAqKSZyZWdzKTsKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHJlZ3Muc2VjKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihyZWdzLm1pbik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocmVncy5zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3MubWluKTsKIAlpZiAocmVncy5ob3VyICYgRFMxMjE2X0hPVVJfMTIyNCkgewogCQkvKiBBTS9QTSBtb2RlICovCi0JCXRtLT50bV9ob3VyID0gQkNEMkJJTihyZWdzLmhvdXIgJiAweDFmKTsKKwkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3MuaG91ciAmIDB4MWYpOwogCQlpZiAocmVncy5ob3VyICYgRFMxMjE2X0hPVVJfQU1QTSkKIAkJCXRtLT50bV9ob3VyICs9IDEyOwogCX0gZWxzZQotCQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVncy5ob3VyICYgMHgzZik7CisJCXRtLT50bV9ob3VyID0gYmNkMmJpbihyZWdzLmhvdXIgJiAweDNmKTsKIAl0bS0+dG1fd2RheSA9IChyZWdzLndkYXkgJiA3KSAtIDE7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJlZ3MubWRheSAmIDB4M2YpOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHJlZ3MubW9udGggJiAweDFmKTsKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4ocmVncy55ZWFyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVncy5tZGF5ICYgMHgzZik7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4ocmVncy5tb250aCAmIDB4MWYpOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyZWdzLnllYXIpOwogCWlmICh0bS0+dG1feWVhciA8IDcwKQogCQl0bS0+dG1feWVhciArPSAxMDA7CiAJcmV0dXJuIDA7CkBAIC0xMTQsMTkgKzExNCwxOSBAQAogCWRzMTIxNl9yZWFkKHByaXYtPmlvYWRkciwgKHU4ICopJnJlZ3MpOwogCiAJcmVncy50c2VjID0gMDsgLyogY2xlYXIgMC4xIGFuZCAwLjAxIHNlY29uZHMgKi8KLQlyZWdzLnNlYyA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JcmVncy5taW4gPSBCSU4yQkNEKHRtLT50bV9taW4pOworCXJlZ3Muc2VjID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlyZWdzLm1pbiA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAJcmVncy5ob3VyICY9IERTMTIxNl9IT1VSXzEyMjQ7CiAJaWYgKHJlZ3MuaG91ciAmJiB0bS0+dG1faG91ciA+IDEyKSB7CiAJCXJlZ3MuaG91ciB8PSBEUzEyMTZfSE9VUl9BTVBNOwogCQl0bS0+dG1faG91ciAtPSAxMjsKIAl9Ci0JcmVncy5ob3VyIHw9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOworCXJlZ3MuaG91ciB8PSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKIAlyZWdzLndkYXkgJj0gfjc7CiAJcmVncy53ZGF5IHw9IHRtLT50bV93ZGF5OwotCXJlZ3MubWRheSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCXJlZ3MubW9udGggPSBCSU4yQkNEKHRtLT50bV9tb24pOwotCXJlZ3MueWVhciA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCXJlZ3MubWRheSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCXJlZ3MubW9udGggPSBiaW4yYmNkKHRtLT50bV9tb24pOworCXJlZ3MueWVhciA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCiAJZHMxMjE2X3N3aXRjaF9kc190b19jbG9jayhwcml2LT5pb2FkZHIpOwogCWRzMTIxNl93cml0ZShwcml2LT5pb2FkZHIsICh1OCAqKSZyZWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDIuYwppbmRleCBiOTM5NzgxLi4xODQ1NTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jCkBAIC00MCw3ICs0MCw3IEBACiAjZGVmaW5lCVJUQ19TQ0xLCTB4MDQwMAogCiAjaWZkZWYgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwCi0jaW5jbHVkZSA8YXNtL3NuYXBnZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9zbmFwZ2Vhci5oPgogI2RlZmluZSBzZXRfZHAoeCkJU0VDVVJFRURHRV9XUklURV9JT1BPUlQoeCwgMHgxYzAwKQogI2RlZmluZSBnZXRfZHAoKQlTRUNVUkVFREdFX1JFQURfSU9QT1JUKCkKICNlbHNlCkBAIC0xMDcsMTMgKzEwNywxMyBAQAogCiAJc3Bpbl9sb2NrX2lycSgmcnRjLT5sb2NrKTsKIAotCXRtLT50bV9zZWMJPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9TRUMpKTsKLQl0bS0+dG1fbWluCT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfTUlOKSk7Ci0JdG0tPnRtX2hvdXIJPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9IT1VSKSk7Ci0JdG0tPnRtX3dkYXkJPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9EQVkpKTsKLQl0bS0+dG1fbWRheQk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0RBVEUpKTsKLQl0bS0+dG1fbW9uCT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfTU9OKSkgLSAxOwotCXRtLT50bV95ZWFyCT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfWUVBUikpOworCXRtLT50bV9zZWMJPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9TRUMpKTsKKwl0bS0+dG1fbWluCT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfTUlOKSk7CisJdG0tPnRtX2hvdXIJPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9IT1VSKSk7CisJdG0tPnRtX3dkYXkJPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9EQVkpKTsKKwl0bS0+dG1fbWRheQk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0RBVEUpKTsKKwl0bS0+dG1fbW9uCT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfTU9OKSkgLSAxOworCXRtLT50bV95ZWFyCT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfWUVBUikpOwogCiAJaWYgKHRtLT50bV95ZWFyIDwgNzApCiAJCXRtLT50bV95ZWFyICs9IDEwMDsKQEAgLTE0MSwxMyArMTQxLDEzIEBACiAJLyogU3RvcCBSVEMgKi8KIAlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1NFQywgZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1NFQykgfCAweDgwKTsKIAotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfU0VDLCBCSU4yQkNEKHRtLT50bV9zZWMpKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX01JTiwgQklOMkJDRCh0bS0+dG1fbWluKSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9IT1VSLCBCSU4yQkNEKHRtLT50bV9ob3VyKSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9EQVksIEJJTjJCQ0QodG0tPnRtX3dkYXkpKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0RBVEUsIEJJTjJCQ0QodG0tPnRtX21kYXkpKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX01PTiwgQklOMkJDRCh0bS0+dG1fbW9uICsgMSkpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfWUVBUiwgQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCkpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfU0VDLCBiaW4yYmNkKHRtLT50bV9zZWMpKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX01JTiwgYmluMmJjZCh0bS0+dG1fbWluKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9IT1VSLCBiaW4yYmNkKHRtLT50bV9ob3VyKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9EQVksIGJpbjJiY2QodG0tPnRtX3dkYXkpKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0RBVEUsIGJpbjJiY2QodG0tPnRtX21kYXkpKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX01PTiwgYmluMmJjZCh0bS0+dG1fbW9uICsgMSkpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfWUVBUiwgYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCkpOwogCiAJLyogU3RhcnQgUlRDICovCiAJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9TRUMpICYgfjB4ODApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCmluZGV4IGI5MWQwMmEuLmZjMzcyZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKQEAgLTExNCwxMCArMTE0LDEwIEBACiAJCQlob3VyID0gMTI7CiAJCQliY2QgJj0gfkRTMTMwNV9IUl9QTTsKIAkJfQotCQlob3VyICs9IEJDRDJCSU4oYmNkKTsKKwkJaG91ciArPSBiY2QyYmluKGJjZCk7CiAJCXJldHVybiBob3VyIC0gMTsKIAl9Ci0JcmV0dXJuIEJDRDJCSU4oYmNkKTsKKwlyZXR1cm4gYmNkMmJpbihiY2QpOwogfQogCiBzdGF0aWMgdTggaG91cjJiY2QoYm9vbCBocjEyLCBpbnQgaG91cikKQEAgLTEyNSwxMSArMTI1LDExIEBACiAJaWYgKGhyMTIpIHsKIAkJaG91cisrOwogCQlpZiAoaG91ciA8PSAxMikKLQkJCXJldHVybiBEUzEzMDVfSFJfMTIgfCBCSU4yQkNEKGhvdXIpOworCQkJcmV0dXJuIERTMTMwNV9IUl8xMiB8IGJpbjJiY2QoaG91cik7CiAJCWhvdXIgLT0gMTI7Ci0JCXJldHVybiBEUzEzMDVfSFJfMTIgfCBEUzEzMDVfSFJfUE0gfCBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gRFMxMzA1X0hSXzEyIHwgRFMxMzA1X0hSX1BNIHwgYmluMmJjZChob3VyKTsKIAl9Ci0JcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJcmV0dXJuIGJpbjJiY2QoaG91cik7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMDYsMTMgKzIwNiwxMyBAQAogCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdKTsKIAogCS8qIERlY29kZSB0aGUgcmVnaXN0ZXJzICovCi0JdGltZS0+dG1fc2VjID0gQkNEMkJJTihidWZbRFMxMzA1X1NFQ10pOwotCXRpbWUtPnRtX21pbiA9IEJDRDJCSU4oYnVmW0RTMTMwNV9NSU5dKTsKKwl0aW1lLT50bV9zZWMgPSBiY2QyYmluKGJ1ZltEUzEzMDVfU0VDXSk7CisJdGltZS0+dG1fbWluID0gYmNkMmJpbihidWZbRFMxMzA1X01JTl0pOwogCXRpbWUtPnRtX2hvdXIgPSBiY2QyaG91cihidWZbRFMxMzA1X0hPVVJdKTsKIAl0aW1lLT50bV93ZGF5ID0gYnVmW0RTMTMwNV9XREFZXSAtIDE7Ci0JdGltZS0+dG1fbWRheSA9IEJDRDJCSU4oYnVmW0RTMTMwNV9NREFZXSk7Ci0JdGltZS0+dG1fbW9uID0gQkNEMkJJTihidWZbRFMxMzA1X01PTl0pIC0gMTsKLQl0aW1lLT50bV95ZWFyID0gQkNEMkJJTihidWZbRFMxMzA1X1lFQVJdKSArIDEwMDsKKwl0aW1lLT50bV9tZGF5ID0gYmNkMmJpbihidWZbRFMxMzA1X01EQVldKTsKKwl0aW1lLT50bV9tb24gPSBiY2QyYmluKGJ1ZltEUzEzMDVfTU9OXSkgLSAxOworCXRpbWUtPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltEUzEzMDVfWUVBUl0pICsgMTAwOwogCiAJZGV2X3ZkYmcoZGV2LCAiJXMgc2Vjcz0lZCwgbWlucz0lZCwgIgogCQkiaG91cnM9JWQsIG1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKQEAgLTIzOSwxMyArMjM5LDEzIEBACiAJLyogV3JpdGUgcmVnaXN0ZXJzIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCB0aW1lL2RhdGUgYWRkcmVzcy4gKi8KIAkqYnArKyA9IERTMTMwNV9XUklURSB8IERTMTMwNV9TRUM7CiAKLQkqYnArKyA9IEJJTjJCQ0QodGltZS0+dG1fc2VjKTsKLQkqYnArKyA9IEJJTjJCQ0QodGltZS0+dG1fbWluKTsKKwkqYnArKyA9IGJpbjJiY2QodGltZS0+dG1fc2VjKTsKKwkqYnArKyA9IGJpbjJiY2QodGltZS0+dG1fbWluKTsKIAkqYnArKyA9IGhvdXIyYmNkKGRzMTMwNS0+aHIxMiwgdGltZS0+dG1faG91cik7CiAJKmJwKysgPSAodGltZS0+dG1fd2RheSA8IDcpID8gKHRpbWUtPnRtX3dkYXkgKyAxKSA6IDE7Ci0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX21kYXkpOwotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV9tb24gKyAxKTsKLQkqYnArKyA9IEJJTjJCQ0QodGltZS0+dG1feWVhciAtIDEwMCk7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX21kYXkpOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV9tb24gKyAxKTsKKwkqYnArKyA9IGJpbjJiY2QodGltZS0+dG1feWVhciAtIDEwMCk7CiAKIAlkZXZfZGJnKGRldiwgIiVzOiAlMDJ4ICUwMnggJTAyeCwgJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJIndyaXRlIiwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwKQEAgLTMyOSw4ICszMjksOCBAQAogCSAqIGZpbGwgaW4gdGhlIHJlc3QgLi4uIGFuZCBhbHNvIGhhbmRsZSByb2xsb3ZlciB0byB0b21vcnJvdyB3aGVuCiAJICogdGhhdCdzIG5lZWRlZC4KIAkgKi8KLQlhbG0tPnRpbWUudG1fc2VjID0gQkNEMkJJTihidWZbRFMxMzA1X1NFQ10pOwotCWFsbS0+dGltZS50bV9taW4gPSBCQ0QyQklOKGJ1ZltEUzEzMDVfTUlOXSk7CisJYWxtLT50aW1lLnRtX3NlYyA9IGJjZDJiaW4oYnVmW0RTMTMwNV9TRUNdKTsKKwlhbG0tPnRpbWUudG1fbWluID0gYmNkMmJpbihidWZbRFMxMzA1X01JTl0pOwogCWFsbS0+dGltZS50bV9ob3VyID0gYmNkMmhvdXIoYnVmW0RTMTMwNV9IT1VSXSk7CiAJYWxtLT50aW1lLnRtX21kYXkgPSAtMTsKIAlhbG0tPnRpbWUudG1fbW9uID0gLTE7CkBAIC0zODcsOCArMzg3LDggQEAKIAogCS8qIHdyaXRlIGFsYXJtICovCiAJYnVmWzBdID0gRFMxMzA1X1dSSVRFIHwgRFMxMzA1X0FMTTAoRFMxMzA1X1NFQyk7Ci0JYnVmWzEgKyBEUzEzMDVfU0VDXSA9IEJJTjJCQ0QoYWxtLT50aW1lLnRtX3NlYyk7Ci0JYnVmWzEgKyBEUzEzMDVfTUlOXSA9IEJJTjJCQ0QoYWxtLT50aW1lLnRtX21pbik7CisJYnVmWzEgKyBEUzEzMDVfU0VDXSA9IGJpbjJiY2QoYWxtLT50aW1lLnRtX3NlYyk7CisJYnVmWzEgKyBEUzEzMDVfTUlOXSA9IGJpbjJiY2QoYWxtLT50aW1lLnRtX21pbik7CiAJYnVmWzEgKyBEUzEzMDVfSE9VUl0gPSBob3VyMmJjZChkczEzMDUtPmhyMTIsIGFsbS0+dGltZS50bV9ob3VyKTsKIAlidWZbMSArIERTMTMwNV9XREFZXSA9IERTMTMwNV9BTE1fRElTQUJMRTsKIApAQCAtNjA2LDcgKzYwNiw2IEBACiBzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgbnZyYW0gPSB7CiAJLmF0dHIubmFtZQk9ICJudnJhbSIsCiAJLmF0dHIubW9kZQk9IFNfSVJVR08gfCBTX0lXVVNSLAotCS5hdHRyLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gZHMxMzA1X252cmFtX3JlYWQsCiAJLndyaXRlCQk9IGRzMTMwNV9udnJhbV93cml0ZSwKIAkuc2l6ZQkJPSBEUzEzMDVfTlZSQU1fTEVOLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IDRmY2YwNzMuLjE2MjMzMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTIyMiwxNyArMjIyLDE3IEBACiAJCQlkczEzMDctPnJlZ3NbNF0sIGRzMTMwNy0+cmVnc1s1XSwKIAkJCWRzMTMwNy0+cmVnc1s2XSk7CiAKLQl0LT50bV9zZWMgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1NFQ1NdICYgMHg3Zik7Ci0JdC0+dG1fbWluID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CisJdC0+dG1fc2VjID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19TRUNTXSAmIDB4N2YpOworCXQtPnRtX21pbiA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTUlOXSAmIDB4N2YpOwogCXRtcCA9IGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX0hPVVJdICYgMHgzZjsKLQl0LT50bV9ob3VyID0gQkNEMkJJTih0bXApOwotCXQtPnRtX3dkYXkgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1dEQVldICYgMHgwNykgLSAxOwotCXQtPnRtX21kYXkgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01EQVldICYgMHgzZik7CisJdC0+dG1faG91ciA9IGJjZDJiaW4odG1wKTsKKwl0LT50bV93ZGF5ID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19XREFZXSAmIDB4MDcpIC0gMTsKKwl0LT50bV9tZGF5ID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NREFZXSAmIDB4M2YpOwogCXRtcCA9IGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01PTlRIXSAmIDB4MWY7Ci0JdC0+dG1fbW9uID0gQkNEMkJJTih0bXApIC0gMTsKKwl0LT50bV9tb24gPSBiY2QyYmluKHRtcCkgLSAxOwogCiAJLyogYXNzdW1lIDIwWVkgbm90IDE5WVksIGFuZCBpZ25vcmUgRFMxMzM3X0JJVF9DRU5UVVJZICovCi0JdC0+dG1feWVhciA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfWUVBUl0pICsgMTAwOworCXQtPnRtX3llYXIgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1lFQVJdKSArIDEwMDsKIAogCWRldl9kYmcoZGV2LCAiJXMgc2Vjcz0lZCwgbWlucz0lZCwgIgogCQkiaG91cnM9JWQsIG1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKQEAgLTI1OCwxNiArMjU4LDE2IEBACiAJCXQtPnRtX21vbiwgdC0+dG1feWVhciwgdC0+dG1fd2RheSk7CiAKIAkqYnVmKysgPSAwOwkJLyogZmlyc3QgcmVnaXN0ZXIgYWRkciAqLwotCWJ1ZltEUzEzMDdfUkVHX1NFQ1NdID0gQklOMkJDRCh0LT50bV9zZWMpOwotCWJ1ZltEUzEzMDdfUkVHX01JTl0gPSBCSU4yQkNEKHQtPnRtX21pbik7Ci0JYnVmW0RTMTMwN19SRUdfSE9VUl0gPSBCSU4yQkNEKHQtPnRtX2hvdXIpOwotCWJ1ZltEUzEzMDdfUkVHX1dEQVldID0gQklOMkJDRCh0LT50bV93ZGF5ICsgMSk7Ci0JYnVmW0RTMTMwN19SRUdfTURBWV0gPSBCSU4yQkNEKHQtPnRtX21kYXkpOwotCWJ1ZltEUzEzMDdfUkVHX01PTlRIXSA9IEJJTjJCQ0QodC0+dG1fbW9uICsgMSk7CisJYnVmW0RTMTMwN19SRUdfU0VDU10gPSBiaW4yYmNkKHQtPnRtX3NlYyk7CisJYnVmW0RTMTMwN19SRUdfTUlOXSA9IGJpbjJiY2QodC0+dG1fbWluKTsKKwlidWZbRFMxMzA3X1JFR19IT1VSXSA9IGJpbjJiY2QodC0+dG1faG91cik7CisJYnVmW0RTMTMwN19SRUdfV0RBWV0gPSBiaW4yYmNkKHQtPnRtX3dkYXkgKyAxKTsKKwlidWZbRFMxMzA3X1JFR19NREFZXSA9IGJpbjJiY2QodC0+dG1fbWRheSk7CisJYnVmW0RTMTMwN19SRUdfTU9OVEhdID0gYmluMmJjZCh0LT50bV9tb24gKyAxKTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZICovCiAJdG1wID0gdC0+dG1feWVhciAtIDEwMDsKLQlidWZbRFMxMzA3X1JFR19ZRUFSXSA9IEJJTjJCQ0QodG1wKTsKKwlidWZbRFMxMzA3X1JFR19ZRUFSXSA9IGJpbjJiY2QodG1wKTsKIAogCXN3aXRjaCAoZHMxMzA3LT50eXBlKSB7CiAJY2FzZSBkc18xMzM3OgpAQCAtNTUxLDcgKzU1MSw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lCT0gIm52cmFtIiwKIAkJLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAogCS5yZWFkCT0gZHMxMzA3X252cmFtX3JlYWQsCkBAIC03MDksMTggKzcwOCwxOCBAQAogCX0KIAogCXRtcCA9IGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1NFQ1NdOwotCXRtcCA9IEJDRDJCSU4odG1wICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbih0bXAgJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7Ci0JdG1wID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CiAJaWYgKHRtcCA+IDYwKQogCQlnb3RvIGV4aXRfYmFkOwogCi0JdG1wID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NREFZXSAmIDB4M2YpOworCXRtcCA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKIAlpZiAodG1wID09IDAgfHwgdG1wID4gMzEpCiAJCWdvdG8gZXhpdF9iYWQ7CiAKLQl0bXAgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01PTlRIXSAmIDB4MWYpOworCXRtcCA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTU9OVEhdICYgMHgxZik7CiAJaWYgKHRtcCA9PSAwIHx8IHRtcCA+IDEyKQogCQlnb3RvIGV4aXRfYmFkOwogCkBAIC03MzksMTQgKzczOCwxNCBAQAogCQkvKiBCZSBzdXJlIHdlJ3JlIGluIDI0IGhvdXIgbW9kZS4gIE11bHRpLW1hc3RlciBzeXN0ZW1zCiAJCSAqIHRha2Ugbm90ZS4uLgogCQkgKi8KLQkJdG1wID0gQkNEMkJJTih0bXAgJiAweDFmKTsKKwkJdG1wID0gYmNkMmJpbih0bXAgJiAweDFmKTsKIAkJaWYgKHRtcCA9PSAxMikKIAkJCXRtcCA9IDA7CiAJCWlmIChkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19IT1VSXSAmIERTMTMwN19CSVRfUE0pCiAJCQl0bXAgKz0gMTI7CiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAogCQkJCURTMTMwN19SRUdfSE9VUiwKLQkJCQlCSU4yQkNEKHRtcCkpOworCQkJCWJpbjJiY2QodG1wKSk7CiAJfQogCiAJZHMxMzA3LT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKGNsaWVudC0+bmFtZSwgJmNsaWVudC0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCmluZGV4IDg2OTgxZDMuLjI1Y2FhZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKQEAgLTE1Myw4ICsxNTMsOCBAQAogCS8qCiAJICogc2V0IHRoZSB3ZG9nIHZhbHVlcyBpbiB0aGUgd2RvZyByZWdpc3RlcnMKIAkgKi8KLQlydGNfd3JpdGUoQklOMkJDRChkZWNpc2Vjb25kcyAlIDEwMCksIERTMTUxMV9XRF9NU0VDKTsKLQlydGNfd3JpdGUoQklOMkJDRChkZWNpc2Vjb25kcyAvIDEwMCksIERTMTUxMV9XRF9TRUMpOworCXJ0Y193cml0ZShiaW4yYmNkKGRlY2lzZWNvbmRzICUgMTAwKSwgRFMxNTExX1dEX01TRUMpOworCXJ0Y193cml0ZShiaW4yYmNkKGRlY2lzZWNvbmRzIC8gMTAwKSwgRFMxNTExX1dEX1NFQyk7CiAJLyoKIAkgKiBzZXQgd2RvZyBlbmFibGUgYW5kIHdkb2cgJ3N0ZWVyaW5nJyBiaXQgdG8gaXNzdWUgYSByZXNldAogCSAqLwpAQCAtMjIwLDEzICsyMjAsMTMgQEAKIAkvKgogCSAqIGVhY2ggcmVnaXN0ZXIgaXMgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHZhbGlkIGJpdHMKIAkgKi8KLQlzZWMgPSBCSU4yQkNEKHNlYykgJiAweDdmOwotCW1pbiA9IEJJTjJCQ0QobWluKSAmIDB4N2Y7Ci0JaHJzID0gQklOMkJDRChocnMpICYgMHgzZjsKLQlkYXkgPSBCSU4yQkNEKGRheSkgJiAweDNmOwotCW1vbiA9IEJJTjJCQ0QobW9uKSAmIDB4MWY7Ci0JeXJzID0gQklOMkJDRCh5cnMpICYgMHhmZjsKLQljZW4gPSBCSU4yQkNEKGNlbikgJiAweGZmOworCXNlYyA9IGJpbjJiY2Qoc2VjKSAmIDB4N2Y7CisJbWluID0gYmluMmJjZChtaW4pICYgMHg3ZjsKKwlocnMgPSBiaW4yYmNkKGhycykgJiAweDNmOworCWRheSA9IGJpbjJiY2QoZGF5KSAmIDB4M2Y7CisJbW9uID0gYmluMmJjZChtb24pICYgMHgxZjsKKwl5cnMgPSBiaW4yYmNkKHlycykgJiAweGZmOworCWNlbiA9IGJpbjJiY2QoY2VuKSAmIDB4ZmY7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHMxNTExX2xvY2ssIGZsYWdzKTsKIAlydGNfZGlzYWJsZV91cGRhdGUoKTsKQEAgLTI2NCwxNCArMjY0LDE0IEBACiAJcnRjX2VuYWJsZV91cGRhdGUoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkczE1MTFfbG9jaywgZmxhZ3MpOwogCi0JcnRjX3RtLT50bV9zZWMgPSBCQ0QyQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlydGNfdG0tPnRtX21pbiA9IEJDRDJCSU4ocnRjX3RtLT50bV9taW4pOwotCXJ0Y190bS0+dG1faG91ciA9IEJDRDJCSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlydGNfdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JcnRjX3RtLT50bV93ZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX3dkYXkpOwotCXJ0Y190bS0+dG1fbW9uID0gQkNEMkJJTihydGNfdG0tPnRtX21vbik7Ci0JcnRjX3RtLT50bV95ZWFyID0gQkNEMkJJTihydGNfdG0tPnRtX3llYXIpOwotCWNlbnR1cnkgPSBCQ0QyQklOKGNlbnR1cnkpICogMTAwOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fd2RheSA9IGJjZDJiaW4ocnRjX3RtLT50bV93ZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKKwljZW50dXJ5ID0gYmNkMmJpbihjZW50dXJ5KSAqIDEwMDsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTMwNCwxNiArMzA0LDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1fbWRheSA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9tZGF5KSAmIDB4M2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpICYgMHgzZiwKIAkgICAgICAgUlRDX0FMQVJNX0RBVEUpOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9ob3VyIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX2hvdXIpICYgMHgzZiwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1faG91cikgJiAweDNmLAogCSAgICAgICBSVENfQUxBUk1fSE9VUik7CiAJcnRjX3dyaXRlKHBkYXRhLT5hbHJtX21pbiA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9taW4pICYgMHg3ZiwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWluKSAmIDB4N2YsCiAJICAgICAgIFJUQ19BTEFSTV9NSU4pOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9zZWMgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fc2VjKSAmIDB4N2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX3NlYykgJiAweDdmLAogCSAgICAgICBSVENfQUxBUk1fU0VDKTsKIAlydGNfd3JpdGUocnRjX3JlYWQoUlRDX0NNRCkgfCAocGRhdGEtPmlycWVuID8gUlRDX1RJRSA6IDApLCBSVENfQ01EKTsKIAlydGNfcmVhZChSVENfQ01EMSk7CS8qIGNsZWFyIGludGVycnVwdHMgKi8KQEAgLTQ4MSw3ICs0ODEsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJudnJhbSIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVR08sCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBEUzE1MTFfUkFNX01BWCwKIAkucmVhZCA9IGRzMTUxMV9udnJhbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCmluZGV4IDRlZjU5MjguLmI5NDc1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKQEAgLTc4LDE3ICs3OCwxNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKIAl1OCBjZW50dXJ5OwogCi0JY2VudHVyeSA9IEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOworCWNlbnR1cnkgPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAogCXdyaXRlYihSVENfV1JJVEUsIHBkYXRhLT5pb2FkZHIgKyBSVENfQ09OVFJPTCk7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKIAogCS8qIFJUQ19DRU5UVVJZIGFuZCBSVENfQ09OVFJPTCBzaGFyZSBzYW1lIHJlZ2lzdGVyICovCiAJd3JpdGViKFJUQ19XUklURSB8IChjZW50dXJ5ICYgUlRDX0NFTlRVUllfTUFTSyksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKQEAgLTExOCwxNCArMTE4LDE0IEBACiAJeWVhciA9IHJlYWRiKGlvYWRkciArIFJUQ19ZRUFSKTsKIAljZW50dXJ5ID0gcmVhZGIoaW9hZGRyICsgUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSzsKIAl3cml0ZWIoMCwgaW9hZGRyICsgUlRDX0NPTlRST0wpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHNlY29uZCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4obWludXRlKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oaG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRheSk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHdlZWspOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKG1vbnRoKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oc2Vjb25kKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihtaW51dGUpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF5KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4od2Vlayk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4obW9udGgpIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih5ZWFyKSArIEJDRDJCSU4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIGJjZDJiaW4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKQEAgLTE0MSwxNiArMTQxLDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKIAl3cml0ZWIocGRhdGEtPmFscm1fbWRheSA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9tZGF5KSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWRheSksCiAJICAgICAgIGlvYWRkciArIFJUQ19EQVRFX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmFscm1faG91ciA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9ob3VyKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1faG91ciksCiAJICAgICAgIGlvYWRkciArIFJUQ19IT1VSU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX21pbiA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9taW4pLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9taW4pLAogCSAgICAgICBpb2FkZHIgKyBSVENfTUlOVVRFU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX3NlYyA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9zZWMpLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9zZWMpLAogCSAgICAgICBpb2FkZHIgKyBSVENfU0VDT05EU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5pcnFlbiA/IFJUQ19JTlRTX0FFIDogMCwgaW9hZGRyICsgUlRDX0lOVEVSUlVQVFMpOwogCXJlYWRiKGlvYWRkciArIFJUQ19GTEFHUyk7CS8qIGNsZWFyIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYwppbmRleCAyNGQzNWVkZS4uOGJjODUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYwpAQCAtNjYsMTcgKzY2LDE3IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyX3J0YzsKIAl1OCBjZW50dXJ5OwogCi0JY2VudHVyeSA9IEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOworCWNlbnR1cnkgPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAogCXdyaXRlYihSVENfV1JJVEUsIGlvYWRkciArIFJUQ19DT05UUk9MKTsKIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOwogCiAJLyogUlRDX0NFTlRVUlkgYW5kIFJUQ19DT05UUk9MIHNoYXJlIHNhbWUgcmVnaXN0ZXIgKi8KIAl3cml0ZWIoUlRDX1dSSVRFIHwgKGNlbnR1cnkgJiBSVENfQ0VOVFVSWV9NQVNLKSwgaW9hZGRyICsgUlRDX0NFTlRVUlkpOwpAQCAtMTA2LDE0ICsxMDYsMTQgQEAKIAl5ZWFyID0gcmVhZGIoaW9hZGRyICsgUlRDX1lFQVIpOwogCWNlbnR1cnkgPSByZWFkYihpb2FkZHIgKyBSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLOwogCXdyaXRlYigwLCBpb2FkZHIgKyBSVENfQ09OVFJPTCk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oc2Vjb25kKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihtaW51dGUpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihob3VyKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oZGF5KTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4od2Vlayk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4obW9udGgpIC0gMTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihzZWNvbmQpOworCXRtLT50bV9taW4gPSBiY2QyYmluKG1pbnV0ZSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihkYXkpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihtb250aCkgLSAxOwogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHllYXIpICsgQkNEMkJJTihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHllYXIpICsgYmNkMmJpbihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CiAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKIAkJZGV2X2VycihkZXYsICJyZXRyaWV2ZWQgZGF0ZS90aW1lIGlzIG5vdCB2YWxpZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jIGIvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCmluZGV4IGFiZmRmY2IuLjNhN2JlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKQEAgLTEzMSwxNyArMTMxLDE3IEBACiAJCQlmbTMxMzAtPnJlZ3NbMHhjXSwgZm0zMTMwLT5yZWdzWzB4ZF0sCiAJCQlmbTMxMzAtPnJlZ3NbMHhlXSk7CiAKLQl0LT50bV9zZWMgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1NFQ09ORFNdICYgMHg3Zik7Ci0JdC0+dG1fbWluID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NSU5VVEVTXSAmIDB4N2YpOworCXQtPnRtX3NlYyA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfU0VDT05EU10gJiAweDdmKTsKKwl0LT50bV9taW4gPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01JTlVURVNdICYgMHg3Zik7CiAJdG1wID0gZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfSE9VUlNdICYgMHgzZjsKLQl0LT50bV9ob3VyID0gQkNEMkJJTih0bXApOwotCXQtPnRtX3dkYXkgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBWV0gJiAweDA3KSAtIDE7Ci0JdC0+dG1fbWRheSA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFURV0gJiAweDNmKTsKKwl0LT50bV9ob3VyID0gYmNkMmJpbih0bXApOworCXQtPnRtX3dkYXkgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBWV0gJiAweDA3KSAtIDE7CisJdC0+dG1fbWRheSA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFURV0gJiAweDNmKTsKIAl0bXAgPSBmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NT05USFNdICYgMHgxZjsKLQl0LT50bV9tb24gPSBCQ0QyQklOKHRtcCkgLSAxOworCXQtPnRtX21vbiA9IGJjZDJiaW4odG1wKSAtIDE7CiAKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSwgYW5kIGlnbm9yZSBDRiBiaXQgKi8KLQl0LT50bV95ZWFyID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19ZRUFSU10pICsgMTAwOworCXQtPnRtX3llYXIgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1lFQVJTXSkgKyAxMDA7CiAKIAlkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKIAkJImhvdXJzPSVkLCBtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0xNjcsMTYgKzE2NywxNiBAQAogCQl0LT50bV9tb24sIHQtPnRtX3llYXIsIHQtPnRtX3dkYXkpOwogCiAJLyogZmlyc3QgcmVnaXN0ZXIgYWRkciAqLwotCWJ1ZltGTTMxMzBfUlRDX1NFQ09ORFNdID0gQklOMkJDRCh0LT50bV9zZWMpOwotCWJ1ZltGTTMxMzBfUlRDX01JTlVURVNdID0gQklOMkJDRCh0LT50bV9taW4pOwotCWJ1ZltGTTMxMzBfUlRDX0hPVVJTXSA9IEJJTjJCQ0QodC0+dG1faG91cik7Ci0JYnVmW0ZNMzEzMF9SVENfREFZXSA9IEJJTjJCQ0QodC0+dG1fd2RheSArIDEpOwotCWJ1ZltGTTMxMzBfUlRDX0RBVEVdID0gQklOMkJDRCh0LT50bV9tZGF5KTsKLQlidWZbRk0zMTMwX1JUQ19NT05USFNdID0gQklOMkJDRCh0LT50bV9tb24gKyAxKTsKKwlidWZbRk0zMTMwX1JUQ19TRUNPTkRTXSA9IGJpbjJiY2QodC0+dG1fc2VjKTsKKwlidWZbRk0zMTMwX1JUQ19NSU5VVEVTXSA9IGJpbjJiY2QodC0+dG1fbWluKTsKKwlidWZbRk0zMTMwX1JUQ19IT1VSU10gPSBiaW4yYmNkKHQtPnRtX2hvdXIpOworCWJ1ZltGTTMxMzBfUlRDX0RBWV0gPSBiaW4yYmNkKHQtPnRtX3dkYXkgKyAxKTsKKwlidWZbRk0zMTMwX1JUQ19EQVRFXSA9IGJpbjJiY2QodC0+dG1fbWRheSk7CisJYnVmW0ZNMzEzMF9SVENfTU9OVEhTXSA9IGJpbjJiY2QodC0+dG1fbW9uICsgMSk7CiAKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSAqLwogCXRtcCA9IHQtPnRtX3llYXIgLSAxMDA7Ci0JYnVmW0ZNMzEzMF9SVENfWUVBUlNdID0gQklOMkJDRCh0bXApOworCWJ1ZltGTTMxMzBfUlRDX1lFQVJTXSA9IGJpbjJiY2QodG1wKTsKIAogCWRldl9kYmcoZGV2LCAiJXM6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiCiAJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCkBAIC0yMjIsMTEgKzIyMiwxMSBAQAogCQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NT05USFNdKTsKIAogCi0JdG0tPnRtX3NlYwk9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9TRUNPTkRTXSAmIDB4N0YpOwotCXRtLT50bV9taW4JPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTUlOVVRFU10gJiAweDdGKTsKLQl0bS0+dG1faG91cgk9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9IT1VSU10gJiAweDNGKTsKLQl0bS0+dG1fbWRheQk9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9EQVRFXSAmIDB4M0YpOwotCXRtLT50bV9tb24JPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTU9OVEhTXSAmIDB4MUYpOworCXRtLT50bV9zZWMJPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fU0VDT05EU10gJiAweDdGKTsKKwl0bS0+dG1fbWluCT0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01JTlVURVNdICYgMHg3Rik7CisJdG0tPnRtX2hvdXIJPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fSE9VUlNdICYgMHgzRik7CisJdG0tPnRtX21kYXkJPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fREFURV0gJiAweDNGKTsKKwl0bS0+dG1fbW9uCT0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01PTlRIU10gJiAweDFGKTsKIAlpZiAodG0tPnRtX21vbiA+IDApCiAJCXRtLT50bV9tb24gLT0gMTsgLyogUlRDIGlzIDEtMTIsIHRtX21vbiBpcyAwLTExICovCiAJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCkBAIC0yNTIsMjMgKzI1MiwyMyBAQAogCiAJaWYgKHRtLT50bV9zZWMgIT0gLTEpCiAJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fU0VDT05EU10gPQotCQkJQklOMkJDRCh0bS0+dG1fc2VjKSB8IDB4ODA7CisJCQliaW4yYmNkKHRtLT50bV9zZWMpIHwgMHg4MDsKIAogCWlmICh0bS0+dG1fbWluICE9IC0xKQogCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01JTlVURVNdID0KLQkJCUJJTjJCQ0QodG0tPnRtX21pbikgfCAweDgwOworCQkJYmluMmJjZCh0bS0+dG1fbWluKSB8IDB4ODA7CiAKIAlpZiAodG0tPnRtX2hvdXIgIT0gLTEpCiAJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fSE9VUlNdID0KLQkJCUJJTjJCQ0QodG0tPnRtX2hvdXIpIHwgMHg4MDsKKwkJCWJpbjJiY2QodG0tPnRtX2hvdXIpIHwgMHg4MDsKIAogCWlmICh0bS0+dG1fbWRheSAhPSAtMSkKIAkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9EQVRFXSA9Ci0JCQlCSU4yQkNEKHRtLT50bV9tZGF5KSB8IDB4ODA7CisJCQliaW4yYmNkKHRtLT50bV9tZGF5KSB8IDB4ODA7CiAKIAlpZiAodG0tPnRtX21vbiAhPSAtMSkKIAkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NT05USFNdID0KLQkJCUJJTjJCQ0QodG0tPnRtX21vbiArIDEpIHwgMHg4MDsKKwkJCWJpbjJiY2QodG0tPnRtX21vbiArIDEpIHwgMHg4MDsKIAogCWRldl9kYmcoZGV2LCAiYWxhcm0gd3JpdGUgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9TRUNPTkRTXSwKQEAgLTQxNCwxOCArNDE0LDE4IEBACiAJLyogVE9ETyAqLwogCS8qIFRPRE8gbmVlZCB0byBzYW5pdHkgY2hlY2sgYWxhcm0gKi8KIAl0bXAgPSBmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19TRUNPTkRTXTsKLQl0bXAgPSBCQ0QyQklOKHRtcCAmIDB4N2YpOworCXRtcCA9IGJjZDJiaW4odG1wICYgMHg3Zik7CiAJaWYgKHRtcCA+IDYwKQogCQlnb3RvIGV4aXRfYmFkOwotCXRtcCA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTUlOVVRFU10gJiAweDdmKTsKKwl0bXAgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01JTlVURVNdICYgMHg3Zik7CiAJaWYgKHRtcCA+IDYwKQogCQlnb3RvIGV4aXRfYmFkOwogCi0JdG1wID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFURV0gJiAweDNmKTsKIAlpZiAodG1wID09IDAgfHwgdG1wID4gMzEpCiAJCWdvdG8gZXhpdF9iYWQ7CiAKLQl0bXAgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01PTlRIU10gJiAweDFmKTsKKwl0bXAgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01PTlRIU10gJiAweDFmKTsKIAlpZiAodG1wID09IDAgfHwgdG1wID4gMTIpCiAJCWdvdG8gZXhpdF9iYWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jCmluZGV4IGE4MWFkYWIuLjJjZDc3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYwpAQCAtMjU5LDI2ICsyNTksMjYgQEAKIAkJcmV0dXJuIHNyOwogCX0KIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfU0NdKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX01OXSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19TQ10pOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfTU5dKTsKIAogCS8qIEhSIGZpZWxkIGhhcyBhIG1vcmUgY29tcGxleCBpbnRlcnByZXRhdGlvbiAqLwogCXsKIAkJY29uc3QgdTggX2hyID0gcmVnc1tJU0wxMjA4X1JFR19IUl07CiAJCWlmIChfaHIgJiBJU0wxMjA4X1JFR19IUl9NSUwpCS8qIDI0aCBmb3JtYXQgKi8KLQkJCXRtLT50bV9ob3VyID0gQkNEMkJJTihfaHIgJiAweDNmKTsKKwkJCXRtLT50bV9ob3VyID0gYmNkMmJpbihfaHIgJiAweDNmKTsKIAkJZWxzZSB7CiAJCQkvKiAxMmggZm9ybWF0ICovCi0JCQl0bS0+dG1faG91ciA9IEJDRDJCSU4oX2hyICYgMHgxZik7CisJCQl0bS0+dG1faG91ciA9IGJjZDJiaW4oX2hyICYgMHgxZik7CiAJCQlpZiAoX2hyICYgSVNMMTIwOF9SRUdfSFJfUE0pCS8qIFBNIGZsYWcgc2V0ICovCiAJCQkJdG0tPnRtX2hvdXIgKz0gMTI7CiAJCX0KIAl9CiAKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19EVF0pOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfTU9dKSAtIDE7CS8qIHJ0YyBzdGFydHMgYXQgMSAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX1lSXSkgKyAxMDA7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfRFddKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19EVF0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfTU9dKSAtIDE7CS8qIHJ0YyBzdGFydHMgYXQgMSAqLworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX1lSXSkgKyAxMDA7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfRFddKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzA1LDEzICszMDUsMTMgQEAKIAl9CiAKIAkvKiBNU0Igb2YgZWFjaCBhbGFybSByZWdpc3RlciBpcyBhbiBlbmFibGUgYml0ICovCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19TQ0EgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHg3Zik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19NTkEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHg3Zik7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfSFJBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4M2YpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX0RUQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDNmKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX1NDQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDdmKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX01OQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDdmKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19IUkEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgzZik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfRFRBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4M2YpOwogCXRtLT50bV9tb24gPQotCQlCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfTU9BIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4MWYpIC0gMTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19EV0EgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgwMyk7CisJCWJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19NT0EgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgxZikgLSAxOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX0RXQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDAzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI4LDE1ICszMjgsMTUgQEAKIAlpbnQgc3I7CiAJdTggcmVnc1tJU0wxMjA4X1JUQ19TRUNUSU9OX0xFTl0gPSB7IDAsIH07CiAKLQlyZWdzW0lTTDEyMDhfUkVHX1NDXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JcmVnc1tJU0wxMjA4X1JFR19NTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCXJlZ3NbSVNMMTIwOF9SRUdfSFJdID0gQklOMkJDRCh0bS0+dG1faG91cikgfCBJU0wxMjA4X1JFR19IUl9NSUw7CisJcmVnc1tJU0wxMjA4X1JFR19TQ10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXJlZ3NbSVNMMTIwOF9SRUdfTU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlyZWdzW0lTTDEyMDhfUkVHX0hSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpIHwgSVNMMTIwOF9SRUdfSFJfTUlMOwogCi0JcmVnc1tJU0wxMjA4X1JFR19EVF0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlyZWdzW0lTTDEyMDhfUkVHX01PXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOwotCXJlZ3NbSVNMMTIwOF9SRUdfWVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCk7CisJcmVnc1tJU0wxMjA4X1JFR19EVF0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlyZWdzW0lTTDEyMDhfUkVHX01PXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOworCXJlZ3NbSVNMMTIwOF9SRUdfWVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7CiAKLQlyZWdzW0lTTDEyMDhfUkVHX0RXXSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkgJiA3KTsKKwlyZWdzW0lTTDEyMDhfUkVHX0RXXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkgJiA3KTsKIAogCXNyID0gaXNsMTIwOF9pMmNfZ2V0X3NyKGNsaWVudCk7CiAJaWYgKHNyIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCmluZGV4IDQ3MGZiMmQuLjg5M2Y3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKQEAgLTExMCwxNSArMTEwLDE1IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX1NFQ10gJiAweDdmKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19NSU5dICYgMHg3Zik7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX0hPVVJdICYgMHgzZik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX0RBWV0gJiAweDNmKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihidWZbTTQxVDgwX1JFR19TRUNdICYgMHg3Zik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfTUlOXSAmIDB4N2YpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihidWZbTTQxVDgwX1JFR19IT1VSXSAmIDB4M2YpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihidWZbTTQxVDgwX1JFR19EQVldICYgMHgzZik7CiAJdG0tPnRtX3dkYXkgPSBidWZbTTQxVDgwX1JFR19XREFZXSAmIDB4MDc7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfTU9OXSAmIDB4MWYpIC0gMTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihidWZbTTQxVDgwX1JFR19NT05dICYgMHgxZikgLSAxOwogCiAJLyogYXNzdW1lIDIwWVkgbm90IDE5WVksIGFuZCBpZ25vcmUgdGhlIENlbnR1cnkgQml0ICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX1lFQVJdKSArIDEwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfWUVBUl0pICsgMTAwOwogCXJldHVybiAwOwogfQogCkBAIC0xNjEsMTkgKzE2MSwxOSBAQAogCS8qIE1lcmdlIHRpbWUtZGF0YSBhbmQgcmVnaXN0ZXIgZmxhZ3MgaW50byBidWZbMC4uN10gKi8KIAlidWZbTTQxVDgwX1JFR19TU0VDXSA9IDA7CiAJYnVmW000MVQ4MF9SRUdfU0VDXSA9Ci0JCUJJTjJCQ0QodG0tPnRtX3NlYykgfCAoYnVmW000MVQ4MF9SRUdfU0VDXSAmIH4weDdmKTsKKwkJYmluMmJjZCh0bS0+dG1fc2VjKSB8IChidWZbTTQxVDgwX1JFR19TRUNdICYgfjB4N2YpOwogCWJ1ZltNNDFUODBfUkVHX01JTl0gPQotCQlCSU4yQkNEKHRtLT50bV9taW4pIHwgKGJ1ZltNNDFUODBfUkVHX01JTl0gJiB+MHg3Zik7CisJCWJpbjJiY2QodG0tPnRtX21pbikgfCAoYnVmW000MVQ4MF9SRUdfTUlOXSAmIH4weDdmKTsKIAlidWZbTTQxVDgwX1JFR19IT1VSXSA9Ci0JCUJJTjJCQ0QodG0tPnRtX2hvdXIpIHwgKGJ1ZltNNDFUODBfUkVHX0hPVVJdICYgfjB4M2YpIDsKKwkJYmluMmJjZCh0bS0+dG1faG91cikgfCAoYnVmW000MVQ4MF9SRUdfSE9VUl0gJiB+MHgzZikgOwogCWJ1ZltNNDFUODBfUkVHX1dEQVldID0KIAkJKHRtLT50bV93ZGF5ICYgMHgwNykgfCAoYnVmW000MVQ4MF9SRUdfV0RBWV0gJiB+MHgwNyk7CiAJYnVmW000MVQ4MF9SRUdfREFZXSA9Ci0JCUJJTjJCQ0QodG0tPnRtX21kYXkpIHwgKGJ1ZltNNDFUODBfUkVHX0RBWV0gJiB+MHgzZik7CisJCWJpbjJiY2QodG0tPnRtX21kYXkpIHwgKGJ1ZltNNDFUODBfUkVHX0RBWV0gJiB+MHgzZik7CiAJYnVmW000MVQ4MF9SRUdfTU9OXSA9Ci0JCUJJTjJCQ0QodG0tPnRtX21vbiArIDEpIHwgKGJ1ZltNNDFUODBfUkVHX01PTl0gJiB+MHgxZik7CisJCWJpbjJiY2QodG0tPnRtX21vbiArIDEpIHwgKGJ1ZltNNDFUODBfUkVHX01PTl0gJiB+MHgxZik7CiAJLyogYXNzdW1lIDIwWVkgbm90IDE5WVkgKi8KLQlidWZbTTQxVDgwX1JFR19ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCWJ1ZltNNDFUODBfUkVHX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAKIAlpZiAoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMSkgIT0gMSkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIndyaXRlIGVycm9yXG4iKTsKQEAgLTI4OCwxNSArMjg4LDE1IEBACiAKIAl3YnVmWzBdID0gTTQxVDgwX1JFR19BTEFSTV9NT047IC8qIG9mZnNldCBpbnRvIHJ0YydzIHJlZ3MgKi8KIAlyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdIHw9IHQtPnRpbWUudG1fc2VjID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1fc2VjKSA6IDB4ODA7CisJCWJpbjJiY2QodC0+dGltZS50bV9zZWMpIDogMHg4MDsKIAlyZWdbTTQxVDgwX1JFR19BTEFSTV9NSU5dIHw9IHQtPnRpbWUudG1fbWluID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1fbWluKSA6IDB4ODA7CisJCWJpbjJiY2QodC0+dGltZS50bV9taW4pIDogMHg4MDsKIAlyZWdbTTQxVDgwX1JFR19BTEFSTV9IT1VSXSB8PSB0LT50aW1lLnRtX2hvdXIgPj0gMCA/Ci0JCUJJTjJCQ0QodC0+dGltZS50bV9ob3VyKSA6IDB4ODA7CisJCWJpbjJiY2QodC0+dGltZS50bV9ob3VyKSA6IDB4ODA7CiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSB8PSB0LT50aW1lLnRtX21kYXkgPj0gMCA/Ci0JCUJJTjJCQ0QodC0+dGltZS50bV9tZGF5KSA6IDB4ODA7CisJCWJpbjJiY2QodC0+dGltZS50bV9tZGF5KSA6IDB4ODA7CiAJaWYgKHQtPnRpbWUudG1fbW9uID49IDApCi0JCXJlZ1tNNDFUODBfUkVHX0FMQVJNX01PTl0gfD0gQklOMkJDRCh0LT50aW1lLnRtX21vbiArIDEpOworCQlyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dIHw9IGJpbjJiY2QodC0+dGltZS50bV9tb24gKyAxKTsKIAllbHNlCiAJCXJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gfD0gMHg0MDsKIApAQCAtMzQ3LDE1ICszNDcsMTUgQEAKIAl0LT50aW1lLnRtX21kYXkgPSAtMTsKIAl0LT50aW1lLnRtX21vbiA9IC0xOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX1NFQ10gJiAweDgwKSkKLQkJdC0+dGltZS50bV9zZWMgPSBCQ0QyQklOKHJlZ1tNNDFUODBfUkVHX0FMQVJNX1NFQ10gJiAweDdmKTsKKwkJdC0+dGltZS50bV9zZWMgPSBiY2QyYmluKHJlZ1tNNDFUODBfUkVHX0FMQVJNX1NFQ10gJiAweDdmKTsKIAlpZiAoIShyZWdbTTQxVDgwX1JFR19BTEFSTV9NSU5dICYgMHg4MCkpCi0JCXQtPnRpbWUudG1fbWluID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9NSU5dICYgMHg3Zik7CisJCXQtPnRpbWUudG1fbWluID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9NSU5dICYgMHg3Zik7CiAJaWYgKCEocmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gJiAweDgwKSkKLQkJdC0+dGltZS50bV9ob3VyID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9IT1VSXSAmIDB4M2YpOworCQl0LT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0hPVVJdICYgMHgzZik7CiAJaWYgKCEocmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSAmIDB4ODApKQotCQl0LT50aW1lLnRtX21kYXkgPSBCQ0QyQklOKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDNmKTsKKwkJdC0+dGltZS50bV9tZGF5ID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldICYgMHgzZik7CiAJaWYgKCEocmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSAmIDB4NDApKQotCQl0LT50aW1lLnRtX21vbiA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTU9OXSAmIDB4MWYpIC0gMTsKKwkJdC0+dGltZS50bV9tb24gPSBiY2QyYmluKHJlZ1tNNDFUODBfUkVHX0FMQVJNX01PTl0gJiAweDFmKSAtIDE7CiAJdC0+dGltZS50bV95ZWFyID0gLTE7CiAJdC0+dGltZS50bV93ZGF5ID0gLTE7CiAJdC0+dGltZS50bV95ZGF5ID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKaW5kZXggOWIxOTQ5OS4uYzNhMThjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYwpAQCAtNDEsMTcgKzQxLDE3IEBACiAJCXRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKIAlidWZbMF0gPSAweDgwIHwgTTQxVDk0X1JFR19TRUNPTkRTOyAvKiB3cml0ZSB0aW1lICsgZGF0ZSAqLwotCWJ1ZltNNDFUOTRfUkVHX1NFQ09ORFNdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlidWZbTTQxVDk0X1JFR19NSU5VVEVTXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JYnVmW000MVQ5NF9SRUdfSE9VUlNdICAgPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKLQlidWZbTTQxVDk0X1JFR19XREFZXSAgICA9IEJJTjJCQ0QodG0tPnRtX3dkYXkgKyAxKTsKLQlidWZbTTQxVDk0X1JFR19EQVldICAgICA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCWJ1ZltNNDFUOTRfUkVHX01PTlRIXSAgID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJYnVmW000MVQ5NF9SRUdfU0VDT05EU10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCWJ1ZltNNDFUOTRfUkVHX01JTlVURVNdID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlidWZbTTQxVDk0X1JFR19IT1VSU10gICA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCWJ1ZltNNDFUOTRfUkVHX1dEQVldICAgID0gYmluMmJjZCh0bS0+dG1fd2RheSArIDEpOworCWJ1ZltNNDFUOTRfUkVHX0RBWV0gICAgID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJYnVmW000MVQ5NF9SRUdfTU9OVEhdICAgPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAogCWJ1ZltNNDFUOTRfUkVHX0hPVVJTXSB8PSBNNDFUOTRfQklUX0NFQjsKIAlpZiAodG0tPnRtX3llYXIgPj0gMTAwKQogCQlidWZbTTQxVDk0X1JFR19IT1VSU10gfD0gTTQxVDk0X0JJVF9DQjsKLQlidWZbTTQxVDk0X1JFR19ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCWJ1ZltNNDFUOTRfUkVHX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAKIAlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgYnVmLCA4KTsKIH0KQEAgLTgyLDE0ICs4MiwxNCBAQAogCQlzcGlfd3JpdGUoc3BpLCBidWYsIDIpOwogCX0KIAotCXRtLT50bV9zZWMgID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfU0VDT05EUykpOwotCXRtLT50bV9taW4gID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfTUlOVVRFUykpOworCXRtLT50bV9zZWMgID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfU0VDT05EUykpOworCXRtLT50bV9taW4gID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfTUlOVVRFUykpOwogCWhvdXIgPSBzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfSE9VUlMpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihob3VyICYgMHgzZik7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19XREFZKSkgLSAxOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfREFZKSk7Ci0JdG0tPnRtX21vbiAgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NT05USCkpIC0gMTsKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1lFQVIpKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oaG91ciAmIDB4M2YpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfV0RBWSkpIC0gMTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX0RBWSkpOworCXRtLT50bV9tb24gID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfTU9OVEgpKSAtIDE7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19ZRUFSKSk7CiAJaWYgKChob3VyICYgTTQxVDk0X0JJVF9DQikgfHwgIShob3VyICYgTTQxVDk0X0JJVF9DRUIpKQogCQl0bS0+dG1feWVhciArPSAxMDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwppbmRleCBjZTRlZmY2Li4wNGI2M2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCkBAIC03NiwxMCArNzYsMTAgQEAKIAkvKiBJc3N1ZSB0aGUgUkVBRCBjb21tYW5kICovCiAJTTQ4VDU5X1NFVF9CSVRTKE00OFQ1OV9DTlRMX1JFQUQsIE00OFQ1OV9DTlRMKTsKIAotCXRtLT50bV95ZWFyCT0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfWUVBUikpOworCXRtLT50bV95ZWFyCT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfWUVBUikpOwogCS8qIHRtX21vbiBpcyAwLTExICovCi0JdG0tPnRtX21vbgk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01PTlRIKSkgLSAxOwotCXRtLT50bV9tZGF5CT0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfTURBWSkpOworCXRtLT50bV9tb24JPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9NT05USCkpIC0gMTsKKwl0bS0+dG1fbWRheQk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01EQVkpKTsKIAogCXZhbCA9IE00OFQ1OV9SRUFEKE00OFQ1OV9XREFZKTsKIAlpZiAoKHBkYXRhLT50eXBlID09IE00OFQ1OVJUQ19UWVBFX000OFQ1OSkgJiYKQEAgLTg4LDEwICs4OCwxMCBAQAogCQl0bS0+dG1feWVhciArPSAxMDA7CS8qIG9uZSBjZW50dXJ5ICovCiAJfQogCi0JdG0tPnRtX3dkYXkJPSBCQ0QyQklOKHZhbCAmIDB4MDcpOwotCXRtLT50bV9ob3VyCT0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfSE9VUikgJiAweDNGKTsKLQl0bS0+dG1fbWluCT0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfTUlOKSAmIDB4N0YpOwotCXRtLT50bV9zZWMJPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9TRUMpICYgMHg3Rik7CisJdG0tPnRtX3dkYXkJPSBiY2QyYmluKHZhbCAmIDB4MDcpOworCXRtLT50bV9ob3VyCT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfSE9VUikgJiAweDNGKTsKKwl0bS0+dG1fbWluCT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfTUlOKSAmIDB4N0YpOworCXRtLT50bV9zZWMJPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9TRUMpICYgMHg3Rik7CiAKIAkvKiBDbGVhciB0aGUgUkVBRCBiaXQgKi8KIAlNNDhUNTlfQ0xFQVJfQklUUyhNNDhUNTlfQ05UTF9SRUFELCBNNDhUNTlfQ05UTCk7CkBAIC0xMTksMTcgKzExOSwxNyBAQAogCS8qIElzc3VlIHRoZSBXUklURSBjb21tYW5kICovCiAJTTQ4VDU5X1NFVF9CSVRTKE00OFQ1OV9DTlRMX1dSSVRFLCBNNDhUNTlfQ05UTCk7CiAKLQlNNDhUNTlfV1JJVEUoKEJJTjJCQ0QodG0tPnRtX3NlYykgJiAweDdGKSwgTTQ4VDU5X1NFQyk7Ci0JTTQ4VDU5X1dSSVRFKChCSU4yQkNEKHRtLT50bV9taW4pICYgMHg3RiksIE00OFQ1OV9NSU4pOwotCU00OFQ1OV9XUklURSgoQklOMkJDRCh0bS0+dG1faG91cikgJiAweDNGKSwgTTQ4VDU5X0hPVVIpOwotCU00OFQ1OV9XUklURSgoQklOMkJDRCh0bS0+dG1fbWRheSkgJiAweDNGKSwgTTQ4VDU5X01EQVkpOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1fc2VjKSAmIDB4N0YpLCBNNDhUNTlfU0VDKTsKKwlNNDhUNTlfV1JJVEUoKGJpbjJiY2QodG0tPnRtX21pbikgJiAweDdGKSwgTTQ4VDU5X01JTik7CisJTTQ4VDU5X1dSSVRFKChiaW4yYmNkKHRtLT50bV9ob3VyKSAmIDB4M0YpLCBNNDhUNTlfSE9VUik7CisJTTQ4VDU5X1dSSVRFKChiaW4yYmNkKHRtLT50bV9tZGF5KSAmIDB4M0YpLCBNNDhUNTlfTURBWSk7CiAJLyogdG1fbW9uIGlzIDAtMTEgKi8KLQlNNDhUNTlfV1JJVEUoKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpICYgMHgxRiksIE00OFQ1OV9NT05USCk7Ci0JTTQ4VDU5X1dSSVRFKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBNNDhUNTlfWUVBUik7CisJTTQ4VDU5X1dSSVRFKChiaW4yYmNkKHRtLT50bV9tb24gKyAxKSAmIDB4MUYpLCBNNDhUNTlfTU9OVEgpOworCU00OFQ1OV9XUklURShiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSwgTTQ4VDU5X1lFQVIpOwogCiAJaWYgKHBkYXRhLT50eXBlID09IE00OFQ1OVJUQ19UWVBFX000OFQ1OSAmJiAodG0tPnRtX3llYXIgLyAxMDApKQogCQl2YWwgPSAoTTQ4VDU5X1dEQVlfQ0VCIHwgTTQ4VDU5X1dEQVlfQ0IpOwotCXZhbCB8PSAoQklOMkJDRCh0bS0+dG1fd2RheSkgJiAweDA3KTsKKwl2YWwgfD0gKGJpbjJiY2QodG0tPnRtX3dkYXkpICYgMHgwNyk7CiAJTTQ4VDU5X1dSSVRFKHZhbCwgTTQ4VDU5X1dEQVkpOwogCiAJLyogQ2xlYXIgdGhlIFdSSVRFIGJpdCAqLwpAQCAtMTU4LDE4ICsxNTgsMTggQEAKIAkvKiBJc3N1ZSB0aGUgUkVBRCBjb21tYW5kICovCiAJTTQ4VDU5X1NFVF9CSVRTKE00OFQ1OV9DTlRMX1JFQUQsIE00OFQ1OV9DTlRMKTsKIAotCXRtLT50bV95ZWFyID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfWUVBUikpOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfWUVBUikpOwogCS8qIHRtX21vbiBpcyAwLTExICovCi0JdG0tPnRtX21vbiA9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01PTlRIKSkgLSAxOworCXRtLT50bV9tb24gPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9NT05USCkpIC0gMTsKIAogCXZhbCA9IE00OFQ1OV9SRUFEKE00OFQ1OV9XREFZKTsKIAlpZiAoKHZhbCAmIE00OFQ1OV9XREFZX0NFQikgJiYgKHZhbCAmIE00OFQ1OV9XREFZX0NCKSkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwkvKiBvbmUgY2VudHVyeSAqLwogCi0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9EQVRFKSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9IT1VSKSk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX01JTikpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9TRUMpKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX0RBVEUpKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX0hPVVIpKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fTUlOKSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX1NFQykpOwogCiAJLyogQ2xlYXIgdGhlIFJFQUQgYml0ICovCiAJTTQ4VDU5X0NMRUFSX0JJVFMoTTQ4VDU5X0NOVExfUkVBRCwgTTQ4VDU5X0NOVEwpOwpAQCAtMjAxLDE4ICsyMDEsMTggQEAKIAkgKiAweGZmIG1lYW5zICJhbHdheXMgbWF0Y2giCiAJICovCiAJbWRheSA9IHRtLT50bV9tZGF5OwotCW1kYXkgPSAobWRheSA+PSAxICYmIG1kYXkgPD0gMzEpID8gQklOMkJDRChtZGF5KSA6IDB4ZmY7CisJbWRheSA9IChtZGF5ID49IDEgJiYgbWRheSA8PSAzMSkgPyBiaW4yYmNkKG1kYXkpIDogMHhmZjsKIAlpZiAobWRheSA9PSAweGZmKQogCQltZGF5ID0gTTQ4VDU5X1JFQUQoTTQ4VDU5X01EQVkpOwogCiAJaG91ciA9IHRtLT50bV9ob3VyOwotCWhvdXIgPSAoaG91ciA8IDI0KSA/IEJJTjJCQ0QoaG91cikgOiAweDAwOworCWhvdXIgPSAoaG91ciA8IDI0KSA/IGJpbjJiY2QoaG91cikgOiAweDAwOwogCiAJbWluID0gdG0tPnRtX21pbjsKLQltaW4gPSAobWluIDwgNjApID8gQklOMkJDRChtaW4pIDogMHgwMDsKKwltaW4gPSAobWluIDwgNjApID8gYmluMmJjZChtaW4pIDogMHgwMDsKIAogCXNlYyA9IHRtLT50bV9zZWM7Ci0Jc2VjID0gKHNlYyA8IDYwKSA/IEJJTjJCQ0Qoc2VjKSA6IDB4MDA7CisJc2VjID0gKHNlYyA8IDYwKSA/IGJpbjJiY2Qoc2VjKSA6IDB4MDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbTQ4dDU5LT5sb2NrLCBmbGFncyk7CiAJLyogSXNzdWUgdGhlIFdSSVRFIGNvbW1hbmQgKi8KQEAgLTM2MCw3ICszNjAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJudnJhbSIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnJlYWQgPSBtNDh0NTlfbnZyYW1fcmVhZCwKIAkud3JpdGUgPSBtNDh0NTlfbnZyYW1fd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKaW5kZXggM2Y3Zjk5YS4uN2MwNDVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYwpAQCAtNjIsMTQgKzYyLDE0IEBACiAJCXRtLT50bV93ZGF5CT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0RPVyk7CiAJfSBlbHNlIHsKIAkJLyogYmNkIG1vZGUgKi8KLQkJdG0tPnRtX3NlYwk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1NFQykpOwotCQl0bS0+dG1fbWluCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfTUlOKSk7Ci0JCXRtLT50bV9ob3VyCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfSE9VUikgJiAweDNGKTsKLQkJdG0tPnRtX21kYXkJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET00pKTsKKwkJdG0tPnRtX3NlYwk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1NFQykpOworCQl0bS0+dG1fbWluCT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfTUlOKSk7CisJCXRtLT50bV9ob3VyCT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfSE9VUikgJiAweDNGKTsKKwkJdG0tPnRtX21kYXkJPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET00pKTsKIAkJLyogdG1fbW9uIGlzIDAtMTEgKi8KLQkJdG0tPnRtX21vbgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01PTlRIKSkgLSAxOwotCQl0bS0+dG1feWVhcgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1lFQVIpKSArIDEwMDsKLQkJdG0tPnRtX3dkYXkJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET1cpKTsKKwkJdG0tPnRtX21vbgk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01PTlRIKSkgLSAxOworCQl0bS0+dG1feWVhcgk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1lFQVIpKSArIDEwMDsKKwkJdG0tPnRtX3dkYXkJPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET1cpKTsKIAl9CiAKIAkvKiBjb3JyZWN0IHRoZSBob3VyIGlmIHRoZSBjbG9jayBpcyBpbiAxMmggbW9kZSAqLwpAQCAtMTAzLDEzICsxMDMsMTMgQEAKIAkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX3dkYXksIE00OFQ4Nl9SRUdfRE9XKTsKIAl9IGVsc2UgewogCQkvKiBiY2QgbW9kZSAqLwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9zZWMpLCBNNDhUODZfUkVHX1NFQyk7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX21pbiksIE00OFQ4Nl9SRUdfTUlOKTsKLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1faG91ciksIE00OFQ4Nl9SRUdfSE9VUik7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBNNDhUODZfUkVHX0RPTSk7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBNNDhUODZfUkVHX01PTlRIKTsKLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ4Nl9SRUdfWUVBUik7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX3dkYXkpLCBNNDhUODZfUkVHX0RPVyk7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX3NlYyksIE00OFQ4Nl9SRUdfU0VDKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1fbWluKSwgTTQ4VDg2X1JFR19NSU4pOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV9ob3VyKSwgTTQ4VDg2X1JFR19IT1VSKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1fbWRheSksIE00OFQ4Nl9SRUdfRE9NKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIE00OFQ4Nl9SRUdfTU9OVEgpOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSwgTTQ4VDg2X1JFR19ZRUFSKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1fd2RheSksIE00OFQ4Nl9SRUdfRE9XKTsKIAl9CiAKIAkvKiB1cGRhdGUgZW5kZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jCmluZGV4IDEyYzljZDIuLjgwNzgyNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYwpAQCAtMTUwLDE0ICsxNTAsMTQgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX1NDXSk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19NTl0pOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0hSXSAmIDB4M2YpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0RUXSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19NT10pIC0gMTsKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19ZUl0pICsKLQkgICAgQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0NFTlRVUlldKSAqIDEwMCAtIDE5MDA7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfRFddKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX1NDXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19NTl0pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX0hSXSAmIDB4M2YpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX0RUXSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19NT10pIC0gMTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19ZUl0pICsKKwkJICAgICAgYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX0NFTlRVUlldKSAqIDEwMCAtIDE5MDA7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfRFddKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg0LDE0ICsxODQsMTQgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZWdzW01BWDY5MDBfUkVHX1NDXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JcmVnc1tNQVg2OTAwX1JFR19NTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCXJlZ3NbTUFYNjkwMF9SRUdfSFJdID0gQklOMkJDRCh0bS0+dG1faG91cik7Ci0JcmVnc1tNQVg2OTAwX1JFR19EVF0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlyZWdzW01BWDY5MDBfUkVHX01PXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOwotCXJlZ3NbTUFYNjkwMF9SRUdfRFddID0gQklOMkJDRCh0bS0+dG1fd2RheSk7Ci0JcmVnc1tNQVg2OTAwX1JFR19ZUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKLQlyZWdzW01BWDY5MDBfUkVHX0NFTlRVUlldID0gQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CisJcmVnc1tNQVg2OTAwX1JFR19TQ10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXJlZ3NbTUFYNjkwMF9SRUdfTU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlyZWdzW01BWDY5MDBfUkVHX0hSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCXJlZ3NbTUFYNjkwMF9SRUdfRFRdID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJcmVnc1tNQVg2OTAwX1JFR19NT10gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlyZWdzW01BWDY5MDBfUkVHX0RXXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOworCXJlZ3NbTUFYNjkwMF9SRUdfWVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CisJcmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSA9IGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOwogCS8qIHNldCB3cml0ZSBwcm90ZWN0ICovCiAJcmVnc1tNQVg2OTAwX1JFR19DVF0gPSBNQVg2OTAwX1JFR19DVF9XUDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKaW5kZXggNzhiMjU1MS4uMmY2NTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCkBAIC0xMjQsMTUgKzEyNCwxNSBAQAogCiAJLyogVGhlIGNoaXAgc2VuZHMgZGF0YSBpbiB0aGlzIG9yZGVyOgogCSAqIFNlY29uZHMsIE1pbnV0ZXMsIEhvdXJzLCBEYXRlLCBNb250aCwgRGF5LCBZZWFyICovCi0JZHQtPnRtX3NlYwk9IEJDRDJCSU4oY2hpcC0+YnVmWzFdKTsKLQlkdC0+dG1fbWluCT0gQkNEMkJJTihjaGlwLT5idWZbMl0pOwotCWR0LT50bV9ob3VyCT0gQkNEMkJJTihjaGlwLT5idWZbM10pOwotCWR0LT50bV9tZGF5CT0gQkNEMkJJTihjaGlwLT5idWZbNF0pOwotCWR0LT50bV9tb24JPSBCQ0QyQklOKGNoaXAtPmJ1Zls1XSkgLSAxOwotCWR0LT50bV93ZGF5CT0gQkNEMkJJTihjaGlwLT5idWZbNl0pOwotCWR0LT50bV95ZWFyID0gQkNEMkJJTihjaGlwLT5idWZbN10pOworCWR0LT50bV9zZWMJPSBiY2QyYmluKGNoaXAtPmJ1ZlsxXSk7CisJZHQtPnRtX21pbgk9IGJjZDJiaW4oY2hpcC0+YnVmWzJdKTsKKwlkdC0+dG1faG91cgk9IGJjZDJiaW4oY2hpcC0+YnVmWzNdKTsKKwlkdC0+dG1fbWRheQk9IGJjZDJiaW4oY2hpcC0+YnVmWzRdKTsKKwlkdC0+dG1fbW9uCT0gYmNkMmJpbihjaGlwLT5idWZbNV0pIC0gMTsKKwlkdC0+dG1fd2RheQk9IGJjZDJiaW4oY2hpcC0+YnVmWzZdKTsKKwlkdC0+dG1feWVhciA9IGJjZDJiaW4oY2hpcC0+YnVmWzddKTsKIAotCWNlbnR1cnkgPSBCQ0QyQklOKHRtcCkgKiAxMDA7CisJY2VudHVyeSA9IGJjZDJiaW4odG1wKSAqIDEwMDsKIAogCWR0LT50bV95ZWFyICs9IGNlbnR1cnk7CiAJZHQtPnRtX3llYXIgLT0gMTkwMDsKQEAgLTE2OCwxNSArMTY4LDE1IEBACiAJLyogUmVtb3ZlIHdyaXRlIHByb3RlY3Rpb24gKi8KIAltYXg2OTAyX3NldF9yZWcoZGV2LCAweEYsIDApOwogCi0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMSwgQklOMkJDRChkdC0+dG1fc2VjKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMywgQklOMkJDRChkdC0+dG1fbWluKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNSwgQklOMkJDRChkdC0+dG1faG91cikpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDEsIGJpbjJiY2QoZHQtPnRtX3NlYykpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDMsIGJpbjJiY2QoZHQtPnRtX21pbikpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDUsIGJpbjJiY2QoZHQtPnRtX2hvdXIpKTsKIAotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDcsIEJJTjJCQ0QoZHQtPnRtX21kYXkpKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA5LCBCSU4yQkNEKGR0LT50bV9tb24rMSkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MEIsIEJJTjJCQ0QoZHQtPnRtX3dkYXkpKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDBELCBCSU4yQkNEKGR0LT50bV95ZWFyJTEwMCkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MTMsIEJJTjJCQ0QoZHQtPnRtX3llYXIvMTAwKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNywgYmluMmJjZChkdC0+dG1fbWRheSkpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDksIGJpbjJiY2QoZHQtPnRtX21vbisxKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwQiwgYmluMmJjZChkdC0+dG1fd2RheSkpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MEQsIGJpbjJiY2QoZHQtPnRtX3llYXIlMTAwKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgxMywgYmluMmJjZChkdC0+dG1feWVhci8xMDApKTsKIAogCS8qIENvbXB1bGFiIHVzZWQgYSBkZWxheSBoZXJlLiBIb3dldmVyLCB0aGUgZGF0YXNoZWV0CiAJICogZG9lcyBub3QgbWVudGlvbiBhIGRlbGF5IGJlaW5nIHJlcXVpcmVkIGFueXdoZXJlLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCA4ODc2NjA1Li4yY2JlYjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTE4NiwzMCArMTg2LDMwIEBACiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0bS0+dG1fc2VjID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQl0bS0+dG1fbWluID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQl0bS0+dG1faG91ciA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOwotCXRtLT50bV9tZGF5ID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJdG0tPnRtX3NlYyA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOwogCi0JdG0tPnRtX21vbiA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOworCXRtLT50bV9tb24gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAogCS8qIGVwb2NoID09IDE5MDAgKi8KIAlpZiAodG0tPnRtX3llYXIgPCAxMDAgfHwgdG0tPnRtX3llYXIgPiAxOTkpCiAJCXJldHVybiAtRUlOVkFMOwotCXRtLT50bV95ZWFyID0gQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCk7CisJdG0tPnRtX3llYXIgPSBiaW4yYmNkKHRtLT50bV95ZWFyIC0gMTAwKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBiY2QydG0oc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTih0bS0+dG1fc2VjKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTih0bS0+dG1fbWluKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4odG0tPnRtX2hvdXIpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTih0bS0+dG1fbWRheSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4odG0tPnRtX21vbikgLSAxOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKSAtIDE7CiAJLyogZXBvY2ggPT0gMTkwMCAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih0bS0+dG1feWVhcikgKyAxMDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHRtLT50bV95ZWFyKSArIDEwMDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGFyaXNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGFyaXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2ZDYzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYwpAQCAtMCwwICsxLDExMSBAQAorLyogcnRjLXBhcmlzYzogUlRDIGZvciBIUCBQQS1SSVNDIGZpcm13YXJlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9ydGMuaD4KKworLyogYXMgc2ltcGxlIGFzIGNhbiBiZSwgYW5kIG5vIHNpbXBsZXIuICovCitzdHJ1Y3QgcGFyaXNjX3J0YyB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgaW50IHBhcmlzY19nZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IHBhcmlzY19ydGMgKnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCXJldCA9IGdldF9ydGNfdGltZSh0bSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldCAmIFJUQ19CQVRUX0JBRCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyaXNjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgcGFyaXNjX3J0YyAqcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gc2V0X3J0Y190aW1lKHRtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwYXJpc2NfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lID0gcGFyaXNjX2dldF90aW1lLAorCS5zZXRfdGltZSA9IHBhcmlzY19zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcmlzY19ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwYXJpc2NfcnRjICpwOworCisJcCA9IGt6YWxsb2Moc2l6ZW9mICgqcCksIEdGUF9LRVJORUwpOworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmcC0+bG9jayk7CisKKwlwLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtcGFyaXNjIiwgJmRldi0+ZGV2LCAmcGFyaXNjX3J0Y19vcHMsCisJCQkJCVRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHAtPnJ0YykpIHsKKwkJaW50IGVyciA9IFBUUl9FUlIocC0+cnRjKTsKKwkJa2ZyZWUocCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwYXJpc2NfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBhcmlzY19ydGMgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHAtPnJ0Yyk7CisJa2ZyZWUocCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGFyaXNjX3J0Y19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnRjLXBhcmlzYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gcGFyaXNjX3J0Y19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AocGFyaXNjX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGFyaXNjX3J0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGFyaXNjX3J0Y19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFyaXNjX3J0Y19maW5pKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBhcmlzY19ydGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGFyaXNjX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KHBhcmlzY19ydGNfZmluaSk7CisKK01PRFVMRV9BVVRIT1IoIkt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhQIFBBLVJJU0MgUlRDIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKaW5kZXggYTgyOWYyMC4uYjcyNTkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCkBAIC05NywxMyArOTcsMTMgQEAKIAkJYnVmWzhdKTsKIAogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX1NDXSAmIDB4N0YpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19NTl0gJiAweDdGKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX0hSXSAmIDB4M0YpOyAvKiBydGMgaHIgMC0yMyAqLwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfRE1dICYgMHgzRik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX1NDXSAmIDB4N0YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19NTl0gJiAweDdGKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX0hSXSAmIDB4M0YpOyAvKiBydGMgaHIgMC0yMyAqLworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfRE1dICYgMHgzRik7CiAJdG0tPnRtX3dkYXkgPSBidWZbUENGODU2M19SRUdfRFddICYgMHgwNzsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfTU9dICYgMHgxRikgLSAxOyAvKiBydGMgbW4gMS0xMiAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfWVJdKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfTU9dICYgMHgxRikgLSAxOyAvKiBydGMgbW4gMS0xMiAqLworCXRtLT50bV95ZWFyID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfWVJdKTsKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwkvKiBhc3N1bWUgd2UgYXJlIGluIDE5NzAuLi4yMDY5ICovCiAJLyogZGV0ZWN0IHRoZSBwb2xhcml0eSBoZXVyaXN0aWNhbGx5LiBzZWUgbm90ZSBhYm92ZS4gKi8KQEAgLTEzOCwxNyArMTM4LDE3IEBACiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJLyogaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHMgKi8KLQlidWZbUENGODU2M19SRUdfU0NdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlidWZbUENGODU2M19SRUdfTU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlidWZbUENGODU2M19SRUdfSFJdID0gQklOMkJDRCh0bS0+dG1faG91cik7CisJYnVmW1BDRjg1NjNfUkVHX1NDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmW1BDRjg1NjNfUkVHX01OXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJYnVmW1BDRjg1NjNfUkVHX0hSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOwogCi0JYnVmW1BDRjg1NjNfUkVHX0RNXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOworCWJ1ZltQQ0Y4NTYzX1JFR19ETV0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKIAogCS8qIG1vbnRoLCAxIC0gMTIgKi8KLQlidWZbUENGODU2M19SRUdfTU9dID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJYnVmW1BDRjg1NjNfUkVHX01PXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCiAJLyogeWVhciBhbmQgY2VudHVyeSAqLwotCWJ1ZltQQ0Y4NTYzX1JFR19ZUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlidWZbUENGODU2M19SRUdfWVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAJaWYgKHBjZjg1NjMtPmNfcG9sYXJpdHkgPyAodG0tPnRtX3llYXIgPj0gMTAwKSA6ICh0bS0+dG1feWVhciA8IDEwMCkpCiAJCWJ1ZltQQ0Y4NTYzX1JFR19NT10gfD0gUENGODU2M19NT19DOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYwppbmRleCBkMzg4YzY2Li43ZDMzY2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMKQEAgLTc2LDExICs3NiwxMSBAQAogCQlidWZbNF0gJj0gMHgzZjsKIAkJYnVmWzVdICY9IDB4MWY7CiAKLQkJZHQtPnRtX3NlYyA9IEJDRDJCSU4oYnVmWzFdKTsKLQkJZHQtPnRtX21pbiA9IEJDRDJCSU4oYnVmWzJdKTsKLQkJZHQtPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZlszXSk7Ci0JCWR0LT50bV9tZGF5ID0gQkNEMkJJTihidWZbNF0pOwotCQlkdC0+dG1fbW9uID0gQkNEMkJJTihidWZbNV0pIC0gMTsKKwkJZHQtPnRtX3NlYyA9IGJjZDJiaW4oYnVmWzFdKTsKKwkJZHQtPnRtX21pbiA9IGJjZDJiaW4oYnVmWzJdKTsKKwkJZHQtPnRtX2hvdXIgPSBiY2QyYmluKGJ1ZlszXSk7CisJCWR0LT50bV9tZGF5ID0gYmNkMmJpbihidWZbNF0pOworCQlkdC0+dG1fbW9uID0gYmNkMmJpbihidWZbNV0pIC0gMTsKIAl9CiAKIAlyZXR1cm4gcmV0ID09IDIgPyAwIDogLUVJTzsKQEAgLTk0LDE0ICs5NCwxNCBAQAogCWJ1ZlswXSA9IDA7CiAJYnVmWzFdID0gZ2V0X2N0cmwoY2xpZW50KSB8IDB4ODA7CiAJYnVmWzJdID0gMDsKLQlidWZbM10gPSBCSU4yQkNEKGR0LT50bV9zZWMpOwotCWJ1Zls0XSA9IEJJTjJCQ0QoZHQtPnRtX21pbik7Ci0JYnVmWzVdID0gQklOMkJDRChkdC0+dG1faG91cik7CisJYnVmWzNdID0gYmluMmJjZChkdC0+dG1fc2VjKTsKKwlidWZbNF0gPSBiaW4yYmNkKGR0LT50bV9taW4pOworCWJ1Zls1XSA9IGJpbjJiY2QoZHQtPnRtX2hvdXIpOwogCiAJaWYgKGRhdGV0b28pIHsKIAkJbGVuID0gODsKLQkJYnVmWzZdID0gQklOMkJDRChkdC0+dG1fbWRheSkgfCAoZHQtPnRtX3llYXIgPDwgNik7Ci0JCWJ1Zls3XSA9IEJJTjJCQ0QoZHQtPnRtX21vbiArIDEpICB8IChkdC0+dG1fd2RheSA8PCA1KTsKKwkJYnVmWzZdID0gYmluMmJjZChkdC0+dG1fbWRheSkgfCAoZHQtPnRtX3llYXIgPDwgNik7CisJCWJ1Zls3XSA9IGJpbjJiY2QoZHQtPnRtX21vbiArIDEpICB8IChkdC0+dG1fd2RheSA8PCA1KTsKIAl9CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAoY2hhciAqKWJ1ZiwgbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yOTcwMS5jIGIvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMKaW5kZXggMzk1OTg1Yi4uNDIwMjhmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMKQEAgLTgwLDEzICs4MCwxMyBAQAogCiAJbWVtc2V0KGR0LCAwLCBzaXplb2YoKmR0KSk7CiAKLQlkdC0+dG1fc2VjID0gQkNEMkJJTihidWZbMF0pOyAvKiBSU0VDQ05UICovCi0JZHQtPnRtX21pbiA9IEJDRDJCSU4oYnVmWzFdKTsgLyogUk1JTkNOVCAqLwotCWR0LT50bV9ob3VyID0gQkNEMkJJTihidWZbMl0pOyAvKiBSSFJDTlQgKi8KKwlkdC0+dG1fc2VjID0gYmNkMmJpbihidWZbMF0pOyAvKiBSU0VDQ05UICovCisJZHQtPnRtX21pbiA9IGJjZDJiaW4oYnVmWzFdKTsgLyogUk1JTkNOVCAqLworCWR0LT50bV9ob3VyID0gYmNkMmJpbihidWZbMl0pOyAvKiBSSFJDTlQgKi8KIAotCWR0LT50bV9tZGF5ID0gQkNEMkJJTihidWZbM10pOyAvKiBSREFZQ05UICovCi0JZHQtPnRtX21vbiA9IEJDRDJCSU4oYnVmWzRdKSAtIDE7IC8qIFJNT05DTlQgKi8KLQlkdC0+dG1feWVhciA9IEJDRDJCSU4oYnVmWzVdKSArIDEwMDsgLyogUllSQ05UICovCisJZHQtPnRtX21kYXkgPSBiY2QyYmluKGJ1ZlszXSk7IC8qIFJEQVlDTlQgKi8KKwlkdC0+dG1fbW9uID0gYmNkMmJpbihidWZbNF0pIC0gMTsgLyogUk1PTkNOVCAqLworCWR0LT50bV95ZWFyID0gYmNkMmJpbihidWZbNV0pICsgMTAwOyAvKiBSWVJDTlQgKi8KIAogCS8qIHRoZSBydGMgZGV2aWNlIG1heSBjb250YWluIGlsbGVnYWwgdmFsdWVzIG9uIHBvd2VyIHVwCiAJICogYWNjb3JkaW5nIHRvIHRoZSBkYXRhIHNoZWV0LiBtYWtlIHN1cmUgdGhleSBhcmUgdmFsaWQuCkBAIC0xMDMsMTIgKzEwMywxMiBAQAogCWlmICh5ZWFyID49IDIxMDAgfHwgeWVhciA8IDIwMDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gd3JpdGVfcmVnKGRldiwgUkhSQ05ULCBCSU4yQkNEKGR0LT50bV9ob3VyKSk7Ci0JcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUk1JTkNOVCwgQklOMkJDRChkdC0+dG1fbWluKSk7Ci0JcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUlNFQ0NOVCwgQklOMkJDRChkdC0+dG1fc2VjKSk7Ci0JcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUkRBWUNOVCwgQklOMkJDRChkdC0+dG1fbWRheSkpOwotCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJNT05DTlQsIEJJTjJCQ0QoZHQtPnRtX21vbiArIDEpKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSWVJDTlQsIEJJTjJCQ0QoZHQtPnRtX3llYXIgLSAxMDApKTsKKwlyZXQgPSB3cml0ZV9yZWcoZGV2LCBSSFJDTlQsIGJpbjJiY2QoZHQtPnRtX2hvdXIpKTsKKwlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSTUlOQ05ULCBiaW4yYmNkKGR0LT50bV9taW4pKTsKKwlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSU0VDQ05ULCBiaW4yYmNkKGR0LT50bV9zZWMpKTsKKwlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSREFZQ05ULCBiaW4yYmNkKGR0LT50bV9tZGF5KSk7CisJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUk1PTkNOVCwgYmluMmJjZChkdC0+dG1fbW9uICsgMSkpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJZUkNOVCwgYmluMmJjZChkdC0+dG1feWVhciAtIDEwMCkpOwogCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJXS0NOVCwgMSA8PCBkdC0+dG1fd2RheSk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzEzLmMKaW5kZXggMWMxNGQ0NC4uZTZlYTNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jCkBAIC0yMzUsMzMgKzIzNSwzMyBAQAogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX1NFQyk7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfU0VDMTApIDw8IDQpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKGRhdGEpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKGRhdGEpOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX01JTik7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTUlOMTApIDw8IDQpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKGRhdGEpOworCXRtLT50bV9taW4gPSBiY2QyYmluKGRhdGEpOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX0hPVVIpOwogCWRhdGEgfD0gKHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX0hPVVIxMCkgPDwgNCk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGRhdGEpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihkYXRhKTsKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9EQVkpOwogCWRhdGEgfD0gKHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX0RBWTEwKSA8PCA0KTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGRhdGEpOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX01PTik7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTU9OMTApIDw8IDQpOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGRhdGEpIC0gMTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihkYXRhKSAtIDE7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfWUVBUik7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfWUVBUjEwKSA8PCA0KTsKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGRhdGEpOwogCiAJaWYgKHRtLT50bV95ZWFyIDwgNzApCiAJCXRtLT50bV95ZWFyICs9IDEwMDsKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9XRUVLKTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKGRhdGEpOwogCiAJUlM1QzMxM19DRURJU0FCTEU7CiAJbmRlbGF5KDcwMCk7CQkvKiBDRTpMICovCkBAIC0yOTQsMzEgKzI5NCwzMSBAQAogCQl9CiAJfQogCi0JZGF0YSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1NFQywgZGF0YSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1NFQzEwLCAoZGF0YSA+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fbWluKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfTUlOLCBkYXRhICk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX01JTjEwLCAoZGF0YSA+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1faG91cik7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9IT1VSLCBkYXRhKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfSE9VUjEwLCAoZGF0YSA+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9EQVksIGRhdGEpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9EQVkxMCwgKGRhdGE+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9NT04sIGRhdGEpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9NT04xMCwgKGRhdGEgPj4gNCkpOwogCi0JZGF0YSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfWUVBUiwgZGF0YSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1lFQVIxMCwgKGRhdGEgPj4gNCkpOwogCi0JZGF0YSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkpOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfV0VFSywgZGF0YSk7CiAKIAlSUzVDMzEzX0NFRElTQUJMRTsJLyogQ0U6SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKaW5kZXggODM5NDYyNi4uZGQxZTJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jCkBAIC03NCwyMCArNzQsMjAgQEAKIAl0eGJ1ZlszXSA9IDA7CS8qIGR1bW15ICovCiAJdHhidWZbNF0gPSBSUzVDMzQ4X0NNRF9NVyhSUzVDMzQ4X1JFR19TRUNTKTsgLyogY21kLCBzZWMsIC4uLiAqLwogCXR4cCA9ICZ0eGJ1Zls1XTsKLQl0eHBbUlM1QzM0OF9SRUdfU0VDU10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXR4cFtSUzVDMzQ4X1JFR19NSU5TXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7CisJdHhwW1JTNUMzNDhfUkVHX1NFQ1NdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwl0eHBbUlM1QzM0OF9SRUdfTUlOU10gPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCWlmIChwZGF0YS0+cnRjXzI0aCkgewotCQl0eHBbUlM1QzM0OF9SRUdfSE9VUlNdID0gQklOMkJDRCh0bS0+dG1faG91cik7CisJCXR4cFtSUzVDMzQ4X1JFR19IT1VSU10gPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKIAl9IGVsc2UgewogCQkvKiBob3VyIDAgaXMgQU0xMiwgbm9vbiBpcyBQTTEyICovCi0JCXR4cFtSUzVDMzQ4X1JFR19IT1VSU10gPSBCSU4yQkNEKCh0bS0+dG1faG91ciArIDExKSAlIDEyICsgMSkgfAorCQl0eHBbUlM1QzM0OF9SRUdfSE9VUlNdID0gYmluMmJjZCgodG0tPnRtX2hvdXIgKyAxMSkgJSAxMiArIDEpIHwKIAkJCSh0bS0+dG1faG91ciA+PSAxMiA/IFJTNUMzNDhfQklUX1BNIDogMCk7CiAJfQotCXR4cFtSUzVDMzQ4X1JFR19XREFZXSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkpOwotCXR4cFtSUzVDMzQ4X1JFR19EQVldID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JdHhwW1JTNUMzNDhfUkVHX01PTlRIXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpIHwKKwl0eHBbUlM1QzM0OF9SRUdfV0RBWV0gPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKKwl0eHBbUlM1QzM0OF9SRUdfREFZXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCXR4cFtSUzVDMzQ4X1JFR19NT05USF0gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSB8CiAJCSh0bS0+dG1feWVhciA+PSAxMDAgPyBSUzVDMzQ4X0JJVF9ZMksgOiAwKTsKLQl0eHBbUlM1QzM0OF9SRUdfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwl0eHBbUlM1QzM0OF9SRUdfWUVBUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAkvKiB3cml0ZSBpbiBvbmUgdHJhbnNmZXIgdG8gYXZvaWQgZGF0YSBpbmNvbnNpc3RlbmN5ICovCiAJcmV0ID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksIHR4YnVmLCBzaXplb2YodHhidWYpLCBOVUxMLCAwKTsKIAl1ZGVsYXkoNjIpOwkvKiBUY3NyIDYydXMgKi8KQEAgLTExNiwyMCArMTE2LDIwIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19TRUNTXSAmIFJTNUMzNDhfU0VDU19NQVNLKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19NSU5TXSAmIFJTNUMzNDhfTUlOU19NQVNLKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfSE9VUlNdICYgUlM1QzM0OF9IT1VSU19NQVNLKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19TRUNTXSAmIFJTNUMzNDhfU0VDU19NQVNLKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19NSU5TXSAmIFJTNUMzNDhfTUlOU19NQVNLKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfSE9VUlNdICYgUlM1QzM0OF9IT1VSU19NQVNLKTsKIAlpZiAoIXBkYXRhLT5ydGNfMjRoKSB7CiAJCXRtLT50bV9ob3VyICU9IDEyOwogCQlpZiAocnhidWZbUlM1QzM0OF9SRUdfSE9VUlNdICYgUlM1QzM0OF9CSVRfUE0pCiAJCQl0bS0+dG1faG91ciArPSAxMjsKIAl9Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX1dEQVldICYgUlM1QzM0OF9XREFZX01BU0spOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19EQVldICYgUlM1QzM0OF9EQVlfTUFTSyk7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX1dEQVldICYgUlM1QzM0OF9XREFZX01BU0spOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19EQVldICYgUlM1QzM0OF9EQVlfTUFTSyk7CiAJdG0tPnRtX21vbiA9Ci0JCUJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfTU9OVEhdICYgUlM1QzM0OF9NT05USF9NQVNLKSAtIDE7CisJCWJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfTU9OVEhdICYgUlM1QzM0OF9NT05USF9NQVNLKSAtIDE7CiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfWUVBUl0pICsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfWUVBUl0pICsKIAkJKChyeGJ1ZltSUzVDMzQ4X1JFR19NT05USF0gJiBSUzVDMzQ4X0JJVF9ZMkspID8gMTAwIDogMCk7CiAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCmluZGV4IDhiNTYxOTUuLjJmMmM2OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwpAQCAtMTQ4LDkgKzE0OCw5IEBACiAJdW5zaWduZWQJaG91cjsKIAogCWlmIChyczVjLT50aW1lMjQpCi0JCXJldHVybiBCQ0QyQklOKHJlZyAmIDB4M2YpOworCQlyZXR1cm4gYmNkMmJpbihyZWcgJiAweDNmKTsKIAotCWhvdXIgPSBCQ0QyQklOKHJlZyAmIDB4MWYpOworCWhvdXIgPSBiY2QyYmluKHJlZyAmIDB4MWYpOwogCWlmIChob3VyID09IDEyKQogCQlob3VyID0gMDsKIAlpZiAocmVnICYgMHgyMCkKQEAgLTE2MSwxNSArMTYxLDE1IEBACiBzdGF0aWMgdW5zaWduZWQgcnM1Y19ocjJyZWcoc3RydWN0IHJzNWMzNzIgKnJzNWMsIHVuc2lnbmVkIGhvdXIpCiB7CiAJaWYgKHJzNWMtPnRpbWUyNCkKLQkJcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBiaW4yYmNkKGhvdXIpOwogCiAJaWYgKGhvdXIgPiAxMikKLQkJcmV0dXJuIDB4MjAgfCBCSU4yQkNEKGhvdXIgLSAxMik7CisJCXJldHVybiAweDIwIHwgYmluMmJjZChob3VyIC0gMTIpOwogCWlmIChob3VyID09IDEyKQotCQlyZXR1cm4gMHgyMCB8IEJJTjJCQ0QoMTIpOworCQlyZXR1cm4gMHgyMCB8IGJpbjJiY2QoMTIpOwogCWlmIChob3VyID09IDApCi0JCXJldHVybiBCSU4yQkNEKDEyKTsKLQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIGJpbjJiY2QoMTIpOworCXJldHVybiBiaW4yYmNkKGhvdXIpOwogfQogCiBzdGF0aWMgaW50IHJzNWMzNzJfZ2V0X2RhdGV0aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC0xODAsMTggKzE4MCwxOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19TRUNTXSAmIDB4N2YpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTUlOU10gJiAweDdmKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1NFQ1NdICYgMHg3Zik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19NSU5TXSAmIDB4N2YpOwogCXRtLT50bV9ob3VyID0gcnM1Y19yZWcyaHIocnM1YywgcnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19IT1VSU10pOwogCi0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfV0RBWV0gJiAweDA3KTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19EQVldICYgMHgzZik7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfV0RBWV0gJiAweDA3KTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19EQVldICYgMHgzZik7CiAKIAkvKiB0bS0+dG1fbW9uIGlzIHplcm8tYmFzZWQgKi8KLQl0bS0+dG1fbW9uID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX01PTlRIXSAmIDB4MWYpIC0gMTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX01PTlRIXSAmIDB4MWYpIC0gMTsKIAogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfWUVBUl0pICsgMTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1lFQVJdKSArIDEwMDsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0yMTYsMTMgKzIxNiwxMyBAQAogCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAogCWFkZHIgICA9IFJTNUNfQUREUihSUzVDMzcyX1JFR19TRUNTKTsKLQlidWZbMF0gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCWJ1ZlsxXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7CisJYnVmWzBdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlidWZbMV0gPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCWJ1ZlsyXSA9IHJzNWNfaHIycmVnKHJzNWMsIHRtLT50bV9ob3VyKTsKLQlidWZbM10gPSBCSU4yQkNEKHRtLT50bV93ZGF5KTsKLQlidWZbNF0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlidWZbNV0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKLQlidWZbNl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKTsKKwlidWZbM10gPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKKwlidWZbNF0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlidWZbNV0gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlidWZbNl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyIC0gMTAwKTsKIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBhZGRyLCBzaXplb2YoYnVmKSwgYnVmKSA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogd3JpdGUgZXJyb3JcbiIsIF9fZnVuY19fKTsKQEAgLTM2Nyw3ICszNjcsNyBAQAogCiAJLyogcmVwb3J0IGFsYXJtIHRpbWUgKi8KIAl0LT50aW1lLnRtX3NlYyA9IDA7Ci0JdC0+dGltZS50bV9taW4gPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1Q19SRUdfQUxBUk1fQV9NSU5dICYgMHg3Zik7CisJdC0+dGltZS50bV9taW4gPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1Q19SRUdfQUxBUk1fQV9NSU5dICYgMHg3Zik7CiAJdC0+dGltZS50bV9ob3VyID0gcnM1Y19yZWcyaHIocnM1YywgcnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX0hPVVJTXSk7CiAJdC0+dGltZS50bV9tZGF5ID0gLTE7CiAJdC0+dGltZS50bV9tb24gPSAtMTsKQEAgLTQxMyw3ICs0MTMsNyBAQAogCX0KIAogCS8qIHNldCBhbGFybSAqLwotCWJ1ZlswXSA9IEJJTjJCQ0QodC0+dGltZS50bV9taW4pOworCWJ1ZlswXSA9IGJpbjJiY2QodC0+dGltZS50bV9taW4pOwogCWJ1ZlsxXSA9IHJzNWNfaHIycmVnKHJzNWMsIHQtPnRpbWUudG1faG91cik7CiAJYnVmWzJdID0gMHg3ZjsJLyogYW55L2FsbCBkYXlzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jCmluZGV4IGE2ZmExZjIuLmRlZjRkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXMzNTM5MGEuYwpAQCAtMTA0LDEyICsxMDQsMTIgQEAKIHN0YXRpYyBjaGFyIHMzNTM5MGFfaHIycmVnKHN0cnVjdCBzMzUzOTBhICpzMzUzOTBhLCBpbnQgaG91cikKIHsKIAlpZiAoczM1MzkwYS0+dHdlbnR5Zm91cmhvdXIpCi0JCXJldHVybiBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gYmluMmJjZChob3VyKTsKIAogCWlmIChob3VyIDwgMTIpCi0JCXJldHVybiBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gYmluMmJjZChob3VyKTsKIAotCXJldHVybiAweDQwIHwgQklOMkJDRChob3VyIC0gMTIpOworCXJldHVybiAweDQwIHwgYmluMmJjZChob3VyIC0gMTIpOwogfQogCiBzdGF0aWMgaW50IHMzNTM5MGFfcmVnMmhyKHN0cnVjdCBzMzUzOTBhICpzMzUzOTBhLCBjaGFyIHJlZykKQEAgLTExNyw5ICsxMTcsOSBAQAogCXVuc2lnbmVkIGhvdXI7CiAKIAlpZiAoczM1MzkwYS0+dHdlbnR5Zm91cmhvdXIpCi0JCXJldHVybiBCQ0QyQklOKHJlZyAmIDB4M2YpOworCQlyZXR1cm4gYmNkMmJpbihyZWcgJiAweDNmKTsKIAotCWhvdXIgPSBCQ0QyQklOKHJlZyAmIDB4M2YpOworCWhvdXIgPSBiY2QyYmluKHJlZyAmIDB4M2YpOwogCWlmIChyZWcgJiAweDQwKQogCQlob3VyICs9IDEyOwogCkBAIC0xMzcsMTMgKzEzNywxMyBAQAogCQl0bS0+dG1fbWluLCB0bS0+dG1faG91ciwgdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLAogCQl0bS0+dG1fd2RheSk7CiAKLQlidWZbUzM1MzkwQV9CWVRFX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCk7Ci0JYnVmW1MzNTM5MEFfQllURV9NT05USF0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKLQlidWZbUzM1MzkwQV9CWVRFX0RBWV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlidWZbUzM1MzkwQV9CWVRFX1dEQVldID0gQklOMkJDRCh0bS0+dG1fd2RheSk7CisJYnVmW1MzNTM5MEFfQllURV9ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOworCWJ1ZltTMzUzOTBBX0JZVEVfTU9OVEhdID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisJYnVmW1MzNTM5MEFfQllURV9EQVldID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJYnVmW1MzNTM5MEFfQllURV9XREFZXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOwogCWJ1ZltTMzUzOTBBX0JZVEVfSE9VUlNdID0gczM1MzkwYV9ocjJyZWcoczM1MzkwYSwgdG0tPnRtX2hvdXIpOwotCWJ1ZltTMzUzOTBBX0JZVEVfTUlOU10gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCWJ1ZltTMzUzOTBBX0JZVEVfU0VDU10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOworCWJ1ZltTMzUzOTBBX0JZVEVfTUlOU10gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCWJ1ZltTMzUzOTBBX0JZVEVfU0VDU10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOwogCiAJLyogVGhpcyBjaGlwIGV4cGVjdHMgdGhlIGJpdHMgb2YgZWFjaCBieXRlIHRvIGJlIGluIHJldmVyc2Ugb3JkZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQpAQCAtMTY4LDEzICsxNjgsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQogCQlidWZbaV0gPSBiaXRyZXY4KGJ1ZltpXSk7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX1NFQ1NdKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX01JTlNdKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX1NFQ1NdKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX01JTlNdKTsKIAl0bS0+dG1faG91ciA9IHMzNTM5MGFfcmVnMmhyKHMzNTM5MGEsIGJ1ZltTMzUzOTBBX0JZVEVfSE9VUlNdKTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9XREFZXSk7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfREFZXSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9NT05USF0pIC0gMTsKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9ZRUFSXSkgKyAxMDA7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfV0RBWV0pOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX0RBWV0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfTU9OVEhdKSAtIDE7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfWUVBUl0pICsgMTAwOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsIG1kYXk9JWQsICIKIAkJIm1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwgX19mdW5jX18sIHRtLT50bV9zZWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggZTdkMTliNi4uOTEwYmM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtMTM0LDEyICsxMzQsMTIgQEAKIAkJIHJ0Y190bS0+dG1feWVhciwgcnRjX3RtLT50bV9tb24sIHJ0Y190bS0+dG1fbWRheSwKIAkJIHJ0Y190bS0+dG1faG91ciwgcnRjX3RtLT50bV9taW4sIHJ0Y190bS0+dG1fc2VjKTsKIAotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJcnRjX3RtLT50bV95ZWFyICs9IDEwMDsKIAlydGNfdG0tPnRtX21vbiAtPSAxOwpAQCAtMTYzLDEyICsxNjMsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksICBiYXNlICsgUzNDMjQxMF9SVENTRUMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCAgYmFzZSArIFMzQzI0MTBfUlRDTUlOKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGJhc2UgKyBTM0MyNDEwX1JUQ0hPVVIpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgYmFzZSArIFMzQzI0MTBfUlRDREFURSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBiYXNlICsgUzNDMjQxMF9SVENNT04pOwotCXdyaXRlYihCSU4yQkNEKHllYXIpLCBiYXNlICsgUzNDMjQxMF9SVENZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSwgIGJhc2UgKyBTM0MyNDEwX1JUQ1NFQyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksICBiYXNlICsgUzNDMjQxMF9SVENNSU4pOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgYmFzZSArIFMzQzI0MTBfUlRDSE9VUik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBiYXNlICsgUzNDMjQxMF9SVENEQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGJhc2UgKyBTM0MyNDEwX1JUQ01PTik7CisJd3JpdGViKGJpbjJiY2QoeWVhciksIGJhc2UgKyBTM0MyNDEwX1JUQ1lFQVIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTksMzQgKzE5OSwzNCBAQAogCS8qIGRlY29kZSB0aGUgYWxhcm0gZW5hYmxlIGZpZWxkICovCiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fU0VDRU4pCi0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9zZWMpOworCQlhbG1fdG0tPnRtX3NlYyA9IGJjZDJiaW4oYWxtX3RtLT50bV9zZWMpOwogCWVsc2UKIAkJYWxtX3RtLT50bV9zZWMgPSAweGZmOwogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX01JTkVOKQotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWluKTsKKwkJYWxtX3RtLT50bV9taW4gPSBiY2QyYmluKGFsbV90bS0+dG1fbWluKTsKIAllbHNlCiAJCWFsbV90bS0+dG1fbWluID0gMHhmZjsKIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9IT1VSRU4pCi0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9ob3VyKTsKKwkJYWxtX3RtLT50bV9ob3VyID0gYmNkMmJpbihhbG1fdG0tPnRtX2hvdXIpOwogCWVsc2UKIAkJYWxtX3RtLT50bV9ob3VyID0gMHhmZjsKIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9EQVlFTikKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX21kYXkpOworCQlhbG1fdG0tPnRtX21kYXkgPSBiY2QyYmluKGFsbV90bS0+dG1fbWRheSk7CiAJZWxzZQogCQlhbG1fdG0tPnRtX21kYXkgPSAweGZmOwogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX01PTkVOKSB7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9tb24pOworCQlhbG1fdG0tPnRtX21vbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9tb24pOwogCQlhbG1fdG0tPnRtX21vbiAtPSAxOwogCX0gZWxzZSB7CiAJCWFsbV90bS0+dG1fbW9uID0gMHhmZjsKIAl9CiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fWUVBUkVOKQotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1feWVhcik7CisJCWFsbV90bS0+dG1feWVhciA9IGJjZDJiaW4oYWxtX3RtLT50bV95ZWFyKTsKIAllbHNlCiAJCWFsbV90bS0+dG1feWVhciA9IDB4ZmZmZjsKIApAQCAtMjUwLDE3ICsyNTAsMTcgQEAKIAogCWlmICh0bS0+dG1fc2VjIDwgNjAgJiYgdG0tPnRtX3NlYyA+PSAwKSB7CiAJCWFscm1fZW4gfD0gUzNDMjQxMF9SVENBTE1fU0VDRU47Ci0JCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCBiYXNlICsgUzNDMjQxMF9BTE1TRUMpOworCQl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSwgYmFzZSArIFMzQzI0MTBfQUxNU0VDKTsKIAl9CiAKIAlpZiAodG0tPnRtX21pbiA8IDYwICYmIHRtLT50bV9taW4gPj0gMCkgewogCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX01JTkVOOwotCQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgYmFzZSArIFMzQzI0MTBfQUxNTUlOKTsKKwkJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGJhc2UgKyBTM0MyNDEwX0FMTU1JTik7CiAJfQogCiAJaWYgKHRtLT50bV9ob3VyIDwgMjQgJiYgdG0tPnRtX2hvdXIgPj0gMCkgewogCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX0hPVVJFTjsKLQkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBiYXNlICsgUzNDMjQxMF9BTE1IT1VSKTsKKwkJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBiYXNlICsgUzNDMjQxMF9BTE1IT1VSKTsKIAl9CiAKIAlwcl9kZWJ1Zygic2V0dGluZyBTM0MyNDEwX1JUQ0FMTSB0byAlMDh4XG4iLCBhbHJtX2VuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKaW5kZXggZmNlYWQ0Yy4uYWFmOWQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNoLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKQEAgLTMyNCwyMyArMzI0LDIzIEBACiAKIAkJc2VjMTI4ID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUjY0Q05UKTsKIAotCQl0bS0+dG1fc2VjCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSU0VDQ05UKSk7Ci0JCXRtLT50bV9taW4JPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJNSU5DTlQpKTsKLQkJdG0tPnRtX2hvdXIJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJIUkNOVCkpOwotCQl0bS0+dG1fd2RheQk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUldLQ05UKSk7Ci0JCXRtLT50bV9tZGF5CT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSREFZQ05UKSk7Ci0JCXRtLT50bV9tb24JPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpKSAtIDE7CisJCXRtLT50bV9zZWMJPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpKTsKKwkJdG0tPnRtX21pbgk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1JTkNOVCkpOworCQl0bS0+dG1faG91cgk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkhSQ05UKSk7CisJCXRtLT50bV93ZGF5CT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpKTsKKwkJdG0tPnRtX21kYXkJPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpKTsKKwkJdG0tPnRtX21vbgk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1PTkNOVCkpIC0gMTsKIAogCQlpZiAocnRjLT5jYXBhYmlsaXRpZXMgJiBSVENfQ0FQXzRfRElHSVRfWUVBUikgewogCQkJeXIgID0gcmVhZHcocnRjLT5yZWdiYXNlICsgUllSQ05UKTsKLQkJCXlyMTAwID0gQkNEMkJJTih5ciA+PiA4KTsKKwkJCXlyMTAwID0gYmNkMmJpbih5ciA+PiA4KTsKIAkJCXlyICY9IDB4ZmY7CiAJCX0gZWxzZSB7CiAJCQl5ciAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOwotCQkJeXIxMDAgPSBCQ0QyQklOKCh5ciA9PSAweDk5KSA/IDB4MTkgOiAweDIwKTsKKwkJCXlyMTAwID0gYmNkMmJpbigoeXIgPT0gMHg5OSkgPyAweDE5IDogMHgyMCk7CiAJCX0KIAotCQl0bS0+dG1feWVhciA9ICh5cjEwMCAqIDEwMCArIEJDRDJCSU4oeXIpKSAtIDE5MDA7CisJCXRtLT50bV95ZWFyID0gKHlyMTAwICogMTAwICsgYmNkMmJpbih5cikpIC0gMTkwMDsKIAogCQlzZWMyID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUjY0Q05UKTsKIAkJY2ZfYml0ID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSkgJiBSQ1IxX0NGOwpAQCAtMzgyLDIwICszODIsMjAgQEAKIAl0bXAgJj0gflJDUjJfU1RBUlQ7CiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMik7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSwgIHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCAgcnRjLT5yZWdiYXNlICsgUk1JTkNOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV93ZGF5KSwgcnRjLT5yZWdiYXNlICsgUldLQ05UKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgcnRjLT5yZWdiYXNlICsgUk1PTkNOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYyksICBydGMtPnJlZ2Jhc2UgKyBSU0VDQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgIHJ0Yy0+cmVnYmFzZSArIFJNSU5DTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgcnRjLT5yZWdiYXNlICsgUkhSQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fd2RheSksIHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBydGMtPnJlZ2Jhc2UgKyBSREFZQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpOwogCiAJaWYgKHJ0Yy0+Y2FwYWJpbGl0aWVzICYgUlRDX0NBUF80X0RJR0lUX1lFQVIpIHsKLQkJeWVhciA9IChCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSA8PCA4KSB8Ci0JCQlCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwkJeWVhciA9IChiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSA8PCA4KSB8CisJCQliaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAkJd3JpdGV3KHllYXIsIHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7CiAJfSBlbHNlIHsKIAkJeWVhciA9IHRtLT50bV95ZWFyICUgMTAwOwotCQl3cml0ZWIoQklOMkJDRCh5ZWFyKSwgcnRjLT5yZWdiYXNlICsgUllSQ05UKTsKKwkJd3JpdGViKGJpbjJiY2QoeWVhciksIHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7CiAJfQogCiAJLyogU3RhcnQgUlRDICovCkBAIC00MTcsNyArNDE3LDcgQEAKIAlieXRlID0gcmVhZGIocnRjLT5yZWdiYXNlICsgcmVnX29mZik7CiAJaWYgKGJ5dGUgJiBBUl9FTkIpIHsKIAkJYnl0ZSAmPSB+QVJfRU5COwkvKiBzdHJpcCB0aGUgZW5hYmxlIGJpdCAqLwotCQl2YWx1ZSA9IEJDRDJCSU4oYnl0ZSk7CisJCXZhbHVlID0gYmNkMmJpbihieXRlKTsKIAl9CiAKIAlyZXR1cm4gdmFsdWU7CkBAIC00NTUsNyArNDU1LDcgQEAKIAlpZiAodmFsdWUgPCAwKQogCQl3cml0ZWIoMCwgcnRjLT5yZWdiYXNlICsgcmVnX29mZik7CiAJZWxzZQotCQl3cml0ZWIoQklOMkJDRCh2YWx1ZSkgfCBBUl9FTkIsICBydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKKwkJd3JpdGViKGJpbjJiY2QodmFsdWUpIHwgQVJfRU5CLCAgcnRjLT5yZWdiYXNlICsgcmVnX29mZik7CiB9CiAKIHN0YXRpYyBpbnQgc2hfcnRjX2NoZWNrX2FsYXJtKHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC01NjgsNyArNTY4LDcgQEAKIAlzdHJ1Y3Qgc2hfcnRjICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdW5zaWduZWQgaW50IHRtcDsKLQlpbnQgcmV0ID0gLUVOT0VOVDsKKwlpbnQgcmV0OwogCiAJcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX3J0YyksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghcnRjKSkKQEAgLTU3NywyNiArNTc3LDMzIEBACiAJc3Bpbl9sb2NrX2luaXQoJnJ0Yy0+bG9jayk7CiAKIAkvKiBnZXQgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLwotCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAodW5saWtlbHkocnRjLT5wZXJpb2RpY19pcnEgPCAwKSkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgcGVyaW9kXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KKwlydGMtPnBlcmlvZGljX2lycSA9IHJldDsKIAotCXJ0Yy0+Y2FycnlfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAodW5saWtlbHkocnRjLT5jYXJyeV9pcnEgPCAwKSkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgY2FycnlcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQorCXJ0Yy0+Y2FycnlfaXJxID0gcmV0OwogCi0JcnRjLT5hbGFybV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOwotCWlmICh1bmxpa2VseShydGMtPmFsYXJtX2lycSA8IDApKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBhbGFybVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CisJcnRjLT5hbGFybV9pcnEgPSByZXQ7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CiAJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkgeworCQlyZXQgPSAtRU5PRU5UOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJTyByZXNvdXJjZVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc3RrMTd0YTguYyBiL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCmluZGV4IDlhN2U5MjAuLmY0Y2Q0NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCkBAIC04MiwxNCArODIsMTQgQEAKIAlmbGFncyA9IHJlYWRiKHBkYXRhLT5pb2FkZHIgKyBSVENfRkxBR1MpOwogCXdyaXRlYihmbGFncyB8IFJUQ19XUklURSwgcGRhdGEtPmlvYWRkciArIFJUQ19GTEFHUyk7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKLQl3cml0ZWIoQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKKwl3cml0ZWIoYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKIAogCXdyaXRlYihmbGFncyAmIH5SVENfV1JJVEUsIHBkYXRhLT5pb2FkZHIgKyBSVENfRkxBR1MpOwogCXJldHVybiAwOwpAQCAtMTIwLDE0ICsxMjAsMTQgQEAKIAl5ZWFyID0gcmVhZGIoaW9hZGRyICsgUlRDX1lFQVIpOwogCWNlbnR1cnkgPSByZWFkYihpb2FkZHIgKyBSVENfQ0VOVFVSWSk7CiAJd3JpdGViKGZsYWdzICYgflJUQ19SRUFELCBpb2FkZHIgKyBSVENfRkxBR1MpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHNlY29uZCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4obWludXRlKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oaG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRheSk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHdlZWspOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKG1vbnRoKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oc2Vjb25kKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihtaW51dGUpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF5KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4od2Vlayk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4obW9udGgpIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih5ZWFyKSArIEJDRDJCSU4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIGJjZDJiaW4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKQEAgLTE0OCwxNiArMTQ4LDE2IEBACiAJd3JpdGViKGZsYWdzIHwgUlRDX1dSSVRFLCBpb2FkZHIgKyBSVENfRkxBR1MpOwogCiAJd3JpdGViKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpLAogCSAgICAgICBpb2FkZHIgKyBSVENfREFURV9BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX2hvdXIgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1faG91ciksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpLAogCSAgICAgICBpb2FkZHIgKyBSVENfSE9VUlNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWluKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX01JTlVURVNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9zZWMgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fc2VjKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fc2VjKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX1NFQ09ORFNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+aXJxZW4gPyBSVENfSU5UU19BSUUgOiAwLCBpb2FkZHIgKyBSVENfSU5URVJSVVBUUyk7CiAJcmVhZGIoaW9hZGRyICsgUlRDX0ZMQUdTKTsJLyogY2xlYXIgaW50ZXJydXB0cyAqLwpAQCAtMjgwLDcgKzI4MCw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm52cmFtIiwKIAkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IFJUQ19PRkZTRVQsCiAJLnJlYWQgPSBzdGsxN3RhOF9udnJhbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYyBiL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlODdhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKQEAgLTAsMCArMSw1NjQgQEAKKy8qCisgKiBydGMtdHdsNDAzMC5jIC0tIFRXTDQwMzAgUmVhbCBUaW1lIENsb2NrIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMKKyAqIEF1dGhvcjogQWxleGFuZHJlIFJ1c2V2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBvcmlnaW5hbCBUSSBkcml2ZXIgdHdsNDAzMC1ydGMuYworICogICBDb3B5cmlnaHQgKEMpIDIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBydGMtb21hcC5jCisgKiAgIENvcHlyaWdodCAoQykgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgIEF1dGhvcjogR2VvcmdlIEcuIERhdmlzIDxnZGF2aXNAbXZpc3RhLmNvbT4gb3IgPHNvdXJjZUBtdmlzdGEuY29tPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisKKworLyoKKyAqIFJUQyBibG9jayByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMX01PRFVMRV9SVEMpCisgKi8KKyNkZWZpbmUgUkVHX1NFQ09ORFNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFJFR19NSU5VVEVTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSRUdfSE9VUlNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUkVHX0RBWVNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFJFR19NT05USFNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBSRUdfWUVBUlNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgUkVHX1dFRUtTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2CisKKyNkZWZpbmUgUkVHX0FMQVJNX1NFQ09ORFNfUkVHICAgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFJFR19BTEFSTV9NSU5VVEVTX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBSRUdfQUxBUk1fSE9VUlNfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgUkVHX0FMQVJNX0RBWVNfUkVHICAgICAgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIFJFR19BTEFSTV9NT05USFNfUkVHICAgICAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBSRUdfQUxBUk1fWUVBUlNfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MEMKKworI2RlZmluZSBSRUdfUlRDX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgUkVHX1JUQ19TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAgICAgICAweDBFCisjZGVmaW5lIFJFR19SVENfSU5URVJSVVBUU19SRUcgICAgICAgICAgICAgICAgICAgMHgwRgorCisjZGVmaW5lIFJFR19SVENfQ09NUF9MU0JfUkVHICAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBSRUdfUlRDX0NPTVBfTVNCX1JFRyAgICAgICAgICAgICAgICAgICAgIDB4MTEKKworLyogUlRDX0NUUkxfUkVHIGJpdGZpZWxkcyAqLworI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX00gICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQklUX1JUQ19DVFJMX1JFR19ST1VORF8zMFNfTSAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEJJVF9SVENfQ1RSTF9SRUdfQVVUT19DT01QX00gICAgICAgICAgICAgMHgwNAorI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX01PREVfMTJfMjRfTSAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQklUX1JUQ19DVFJMX1JFR19URVNUX01PREVfTSAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEJJVF9SVENfQ1RSTF9SRUdfU0VUXzMyX0NPVU5URVJfTSAgICAgICAgMHgyMAorI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX0dFVF9USU1FX00gICAgICAgICAgICAgIDB4NDAKKworLyogUlRDX1NUQVRVU19SRUcgYml0ZmllbGRzICovCisjZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR19SVU5fTSAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBCSVRfUlRDX1NUQVRVU19SRUdfMVNfRVZFTlRfTSAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQklUX1JUQ19TVEFUVVNfUkVHXzFNX0VWRU5UX00gICAgICAgICAgICAweDA4CisjZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR18xSF9FVkVOVF9NICAgICAgICAgICAgMHgxMAorI2RlZmluZSBCSVRfUlRDX1NUQVRVU19SRUdfMURfRVZFTlRfTSAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQklUX1JUQ19TVEFUVVNfUkVHX0FMQVJNX00gICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR19QT1dFUl9VUF9NICAgICAgICAgICAgMHg4MAorCisvKiBSVENfSU5URVJSVVBUU19SRUcgYml0ZmllbGRzICovCisjZGVmaW5lIEJJVF9SVENfSU5URVJSVVBUU19SRUdfRVZFUllfTSAgICAgICAgICAgMHgwMworI2RlZmluZSBCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX1RJTUVSX00gICAgICAgIDB4MDQKKyNkZWZpbmUgQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9BTEFSTV9NICAgICAgICAweDA4CisKKworLyogUkVHX1NFQ09ORFNfUkVHIHRocm91Z2ggUkVHX1lFQVJTX1JFRyBpcyBob3cgbWFueSByZWdpc3RlcnM/ICovCisjZGVmaW5lIEFMTF9USU1FX1JFR1MJCTYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFN1cHBvcnRzIDEgYnl0ZSByZWFkIGZyb20gVFdMNDAzMCBSVEMgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9ydGNfcmVhZF91OCh1OCAqZGF0YSwgdTggcmVnKQoreworCWludCByZXQ7CisKKwlyZXQgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1JUQywgZGF0YSwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJfZXJyKCJ0d2w0MDMwX3J0YzogQ291bGQgbm90IHJlYWQgVFdMNDAzMCIKKwkJICAgICAgICJyZWdpc3RlciAlWCAtIGVycm9yICVkXG4iLCByZWcsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN1cHBvcnRzIDEgYnl0ZSB3cml0ZSB0byBUV0w0MDMwIFJUQyByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9ydGNfd3JpdGVfdTgodTggZGF0YSwgdTggcmVnKQoreworCWludCByZXQ7CisKKwlyZXQgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9SVEMsIGRhdGEsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXByX2VycigidHdsNDAzMF9ydGM6IENvdWxkIG5vdCB3cml0ZSBUV0w0MDMwIgorCQkgICAgICAgInJlZ2lzdGVyICVYIC0gZXJyb3IgJWRcbiIsIHJlZywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FjaGUgdGhlIHZhbHVlIGZvciB0aW1lci9hbGFybSBpbnRlcnJ1cHRzIHJlZ2lzdGVyOyB0aGlzIGlzCisgKiBvbmx5IGNoYW5nZWQgYnkgY2FsbGVycyBob2xkaW5nIHJ0YyBvcHMgbG9jayAob3IgcmVzdW1lKS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgcnRjX2lycV9iaXRzOworCisvKgorICogRW5hYmxlIHRpbWVyIGFuZC9vciBhbGFybSBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwlpbnQgcmV0OworCisJdmFsID0gcnRjX2lycV9iaXRzIHwgYml0OworCXJldCA9IHR3bDQwMzBfcnRjX3dyaXRlX3U4KHZhbCwgUkVHX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJaWYgKHJldCA9PSAwKQorCQlydGNfaXJxX2JpdHMgPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGlzYWJsZSB0aW1lciBhbmQvb3IgYWxhcm0gaW50ZXJydXB0cy4KKyAqLworc3RhdGljIGludCBtYXNrX3J0Y19pcnFfYml0KHVuc2lnbmVkIGNoYXIgYml0KQoreworCXVuc2lnbmVkIGNoYXIgdmFsOworCWludCByZXQ7CisKKwl2YWwgPSBydGNfaXJxX2JpdHMgJiB+Yml0OworCXJldCA9IHR3bDQwMzBfcnRjX3dyaXRlX3U4KHZhbCwgUkVHX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJaWYgKHJldCA9PSAwKQorCQlydGNfaXJxX2JpdHMgPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB0d2w0MDMwX3J0Y19hbGFybV9pcnFfc2V0X3N0YXRlKGludCBlbmFibGVkKQoreworCWludCByZXQ7CisKKwlpZiAoZW5hYmxlZCkKKwkJcmV0ID0gc2V0X3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfQUxBUk1fTSk7CisJZWxzZQorCQlyZXQgPSBtYXNrX3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfQUxBUk1fTSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB0d2w0MDMwX3J0Y19pcnFfc2V0X3N0YXRlKGludCBlbmFibGVkKQoreworCWludCByZXQ7CisKKwlpZiAoZW5hYmxlZCkKKwkJcmV0ID0gc2V0X3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfVElNRVJfTSk7CisJZWxzZQorCQlyZXQgPSBtYXNrX3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfVElNRVJfTSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2V0cyBjdXJyZW50IFRXTDQwMzAgUlRDIHRpbWUgYW5kIGRhdGUgcGFyYW1ldGVycy4KKyAqCisgKiBUaGUgUlRDJ3MgdGltZS9hbGFybSByZXByZXNlbnRhdGlvbiBpcyBub3Qgd2hhdCBnbXRpbWUoMykgcmVxdWlyZXMKKyAqIExpbnV4IHRvIHVzZToKKyAqCisgKiAgLSBNb250aHMgYXJlIDEuLjEyIHZzIExpbnV4IDAtMTEKKyAqICAtIFllYXJzIGFyZSAwLi45OSB2cyBMaW51eCAxOTAwLi5OICh3ZSBhc3N1bWUgMjFzdCBjZW50dXJ5KQorICovCitzdGF0aWMgaW50IHR3bDQwMzBfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdW5zaWduZWQgY2hhciBydGNfZGF0YVtBTExfVElNRV9SRUdTICsgMV07CisJaW50IHJldDsKKwl1OCBzYXZlX2NvbnRyb2w7CisKKwlyZXQgPSB0d2w0MDMwX3J0Y19yZWFkX3U4KCZzYXZlX2NvbnRyb2wsIFJFR19SVENfQ1RSTF9SRUcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc2F2ZV9jb250cm9sIHw9IEJJVF9SVENfQ1RSTF9SRUdfR0VUX1RJTUVfTTsKKworCXJldCA9IHR3bDQwMzBfcnRjX3dyaXRlX3U4KHNhdmVfY29udHJvbCwgUkVHX1JUQ19DVFJMX1JFRyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB0d2w0MDMwX2kyY19yZWFkKFRXTDQwMzBfTU9EVUxFX1JUQywgcnRjX2RhdGEsCisJCQkgICAgICAgUkVHX1NFQ09ORFNfUkVHLCBBTExfVElNRV9SRUdTKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicnRjX3JlYWRfdGltZSBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihydGNfZGF0YVswXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX2RhdGFbMV0pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihydGNfZGF0YVsyXSk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y19kYXRhWzNdKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihydGNfZGF0YVs0XSkgLSAxOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihydGNfZGF0YVs1XSkgKyAxMDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3bDQwMzBfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbDsKKwl1bnNpZ25lZCBjaGFyIHJ0Y19kYXRhW0FMTF9USU1FX1JFR1MgKyAxXTsKKwlpbnQgcmV0OworCisJcnRjX2RhdGFbMV0gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXJ0Y19kYXRhWzJdID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlydGNfZGF0YVszXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCXJ0Y19kYXRhWzRdID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJcnRjX2RhdGFbNV0gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlydGNfZGF0YVs2XSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOworCisJLyogU3RvcCBSVEMgd2hpbGUgdXBkYXRpbmcgdGhlIFRDIHJlZ2lzdGVycyAqLworCXJldCA9IHR3bDQwMzBfcnRjX3JlYWRfdTgoJnNhdmVfY29udHJvbCwgUkVHX1JUQ19DVFJMX1JFRyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc2F2ZV9jb250cm9sICY9IH5CSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX007CisJdHdsNDAzMF9ydGNfd3JpdGVfdTgoc2F2ZV9jb250cm9sLCBSRUdfUlRDX0NUUkxfUkVHKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiB1cGRhdGUgYWxsIHRoZSB0aW1lIHJlZ2lzdGVycyBpbiBvbmUgc2hvdCAqLworCXJldCA9IHR3bDQwMzBfaTJjX3dyaXRlKFRXTDQwMzBfTU9EVUxFX1JUQywgcnRjX2RhdGEsCisJCQlSRUdfU0VDT05EU19SRUcsIEFMTF9USU1FX1JFR1MpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicnRjX3NldF90aW1lIGVycm9yICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTdGFydCBiYWNrIFJUQyAqLworCXNhdmVfY29udHJvbCB8PSBCSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX007CisJcmV0ID0gdHdsNDAzMF9ydGNfd3JpdGVfdTgoc2F2ZV9jb250cm9sLCBSRUdfUlRDX0NUUkxfUkVHKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHZXRzIGN1cnJlbnQgVFdMNDAzMCBSVEMgYWxhcm0gdGltZS4KKyAqLworc3RhdGljIGludCB0d2w0MDMwX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwl1bnNpZ25lZCBjaGFyIHJ0Y19kYXRhW0FMTF9USU1FX1JFR1MgKyAxXTsKKwlpbnQgcmV0OworCisJcmV0ID0gdHdsNDAzMF9pMmNfcmVhZChUV0w0MDMwX01PRFVMRV9SVEMsIHJ0Y19kYXRhLAorCQkJICAgICAgIFJFR19BTEFSTV9TRUNPTkRTX1JFRywgQUxMX1RJTUVfUkVHUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJydGNfcmVhZF9hbGFybSBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBzb21lIG9mIHRoZXNlIGZpZWxkcyBtYXkgYmUgd2lsZGNhcmQvIm1hdGNoIGFsbCIgKi8KKwlhbG0tPnRpbWUudG1fc2VjID0gYmNkMmJpbihydGNfZGF0YVswXSk7CisJYWxtLT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocnRjX2RhdGFbMV0pOworCWFsbS0+dGltZS50bV9ob3VyID0gYmNkMmJpbihydGNfZGF0YVsyXSk7CisJYWxtLT50aW1lLnRtX21kYXkgPSBiY2QyYmluKHJ0Y19kYXRhWzNdKTsKKwlhbG0tPnRpbWUudG1fbW9uID0gYmNkMmJpbihydGNfZGF0YVs0XSkgLSAxOworCWFsbS0+dGltZS50bV95ZWFyID0gYmNkMmJpbihydGNfZGF0YVs1XSkgKyAxMDA7CisKKwkvKiByZXBvcnQgY2FjaGVkIGFsYXJtIGVuYWJsZSBzdGF0ZSAqLworCWlmIChydGNfaXJxX2JpdHMgJiBCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pCisJCWFsbS0+ZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3bDQwMzBfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbG0pCit7CisJdW5zaWduZWQgY2hhciBhbGFybV9kYXRhW0FMTF9USU1FX1JFR1MgKyAxXTsKKwlpbnQgcmV0OworCisJcmV0ID0gdHdsNDAzMF9ydGNfYWxhcm1faXJxX3NldF9zdGF0ZSgwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWFsYXJtX2RhdGFbMV0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9zZWMpOworCWFsYXJtX2RhdGFbMl0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9taW4pOworCWFsYXJtX2RhdGFbM10gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9ob3VyKTsKKwlhbGFybV9kYXRhWzRdID0gYmluMmJjZChhbG0tPnRpbWUudG1fbWRheSk7CisJYWxhcm1fZGF0YVs1XSA9IGJpbjJiY2QoYWxtLT50aW1lLnRtX21vbiArIDEpOworCWFsYXJtX2RhdGFbNl0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV95ZWFyIC0gMTAwKTsKKworCS8qIHVwZGF0ZSBhbGwgdGhlIGFsYXJtIHJlZ2lzdGVycyBpbiBvbmUgc2hvdCAqLworCXJldCA9IHR3bDQwMzBfaTJjX3dyaXRlKFRXTDQwMzBfTU9EVUxFX1JUQywgYWxhcm1fZGF0YSwKKwkJCVJFR19BTEFSTV9TRUNPTkRTX1JFRywgQUxMX1RJTUVfUkVHUyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgInJ0Y19zZXRfYWxhcm0gZXJyb3IgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhbG0tPmVuYWJsZWQpCisJCXJldCA9IHR3bDQwMzBfcnRjX2FsYXJtX2lycV9zZXRfc3RhdGUoMSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmCUNPTkZJR19SVENfSU5URl9ERVYKKworc3RhdGljIGludCB0d2w0MDMwX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09GRjoKKwkJcmV0dXJuIHR3bDQwMzBfcnRjX2FsYXJtX2lycV9zZXRfc3RhdGUoMCk7CisJY2FzZSBSVENfQUlFX09OOgorCQlyZXR1cm4gdHdsNDAzMF9ydGNfYWxhcm1faXJxX3NldF9zdGF0ZSgxKTsKKwljYXNlIFJUQ19VSUVfT0ZGOgorCQlyZXR1cm4gdHdsNDAzMF9ydGNfaXJxX3NldF9zdGF0ZSgwKTsKKwljYXNlIFJUQ19VSUVfT046CisJCXJldHVybiB0d2w0MDMwX3J0Y19pcnFfc2V0X3N0YXRlKDEpOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisKKyNlbHNlCisjZGVmaW5lCW9tYXBfcnRjX2lvY3RsCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgaXJxcmV0dXJuX3QgdHdsNDAzMF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnJ0YykKK3sKKwl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDA7CisJaW50IHJldCA9IElSUV9OT05FOworCWludCByZXM7CisJdTggcmRfcmVnOworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwkvKiBXT1JLQVJPVU5EIGZvciBsb2NrZGVwIGZvcmNpbmcgSVJRRl9ESVNBQkxFRCBvbiB1cywgd2hpY2gKKwkgKiB3ZSBkb24ndCB3YW50IGFuZCBjYW4ndCB0b2xlcmF0ZS4gIEFsdGhvdWdoIGl0IG1pZ2h0IGJlCisJICogZnJpZW5kbGllciBub3QgdG8gYm9ycm93IHRoaXMgdGhyZWFkIGNvbnRleHQuLi4KKwkgKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisjZW5kaWYKKworCXJlcyA9IHR3bDQwMzBfcnRjX3JlYWRfdTgoJnJkX3JlZywgUkVHX1JUQ19TVEFUVVNfUkVHKTsKKwlpZiAocmVzKQorCQlnb3RvIG91dDsKKwkvKgorCSAqIEZpZ3VyZSBvdXQgc291cmNlIG9mIGludGVycnVwdDogQUxBUk0gb3IgVElNRVIgaW4gUlRDX1NUQVRVU19SRUcuCisJICogb25seSBvbmUgKEFMQVJNIG9yIFJUQykgaW50ZXJydXB0IHNvdXJjZSBtYXkgYmUgZW5hYmxlZAorCSAqIGF0IHRpbWUsIHdlIGFsc28gY291bGQgY2hlY2sgb3VyIHJlc3VsdHMKKwkgKiBieSByZWFkaW5nIFJUU19JTlRFUlJVUFRTX1JFR0lTVEVSW0lUX1RJTUVSLElUX0FMQVJNXQorCSAqLworCWlmIChyZF9yZWcgJiBCSVRfUlRDX1NUQVRVU19SRUdfQUxBUk1fTSkKKwkJZXZlbnRzIHw9IFJUQ19JUlFGIHwgUlRDX0FGOworCWVsc2UKKwkJZXZlbnRzIHw9IFJUQ19JUlFGIHwgUlRDX1VGOworCisJcmVzID0gdHdsNDAzMF9ydGNfd3JpdGVfdTgocmRfcmVnIHwgQklUX1JUQ19TVEFUVVNfUkVHX0FMQVJNX00sCisJCQkJICAgUkVHX1JUQ19TVEFUVVNfUkVHKTsKKwlpZiAocmVzKQorCQlnb3RvIG91dDsKKworCS8qIENsZWFyIG9uIFJlYWQgZW5hYmxlZC4gUlRDX0lUIGJpdCBvZiBUV0w0MDMwX0lOVF9QV1JfSVNSMQorCSAqIG5lZWRzIDIgcmVhZHMgdG8gY2xlYXIgdGhlIGludGVycnVwdC4gT25lIHJlYWQgaXMgZG9uZSBpbgorCSAqIGRvX3R3bDQwMzBfcHdyaXJxKCkuIERvaW5nIHRoZSBzZWNvbmQgcmVhZCwgdG8gY2xlYXIKKwkgKiB0aGUgYml0LgorCSAqCisJICogRklYTUUgdGhlIHJlYXNvbiBQV1JfSVNSMSBuZWVkcyBhbiBleHRyYSByZWFkIGlzIHRoYXQKKwkgKiBSVENfSUYgcmV0cmlnZ2VyZWQgdW50aWwgd2UgY2xlYXJlZCBSRUdfQUxBUk1fTSBhYm92ZS4KKwkgKiBCdXQgcmUtcmVhZGluZyBsaWtlIHRoaXMgaXMgYSBiYWQgaGFjazsgYnkgZG9pbmcgc28gd2UKKwkgKiByaXNrIHdyb25nbHkgY2xlYXJpbmcgc3RhdHVzIGZvciBzb21lIG90aGVyIElSUSAobG9zaW5nCisJICogdGhlIGludGVycnVwdCkuICBCZSBzbWFydGVyIGFib3V0IGhhbmRsaW5nIFJUQ19VRiAuLi4KKwkgKi8KKwlyZXMgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0lOVCwKKwkJCSZyZF9yZWcsIFRXTDQwMzBfSU5UX1BXUl9JU1IxKTsKKwlpZiAocmVzKQorCQlnb3RvIG91dDsKKworCS8qIE5vdGlmeSBSVEMgY29yZSBvbiBldmVudCAqLworCXJ0Y191cGRhdGVfaXJxKHJ0YywgMSwgZXZlbnRzKTsKKworCXJldCA9IElSUV9IQU5ETEVEOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyB0d2w0MDMwX3J0Y19vcHMgPSB7CisJLmlvY3RsCQk9IHR3bDQwMzBfcnRjX2lvY3RsLAorCS5yZWFkX3RpbWUJPSB0d2w0MDMwX3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lCT0gdHdsNDAzMF9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSB0d2w0MDMwX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSB0d2w0MDMwX3J0Y19zZXRfYWxhcm0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2w0MDMwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJaW50IHJldCA9IDA7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJdTggcmRfcmVnOworCisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsCisJCQkJICAmcGRldi0+ZGV2LCAmdHdsNDAzMF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIFJUQyBkZXZpY2UsIGVyciAlbGRcbiIsCisJCQlQVFJfRVJSKHJ0YykpOworCQlnb3RvIG91dDA7CisKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOworCisJcmV0ID0gdHdsNDAzMF9ydGNfcmVhZF91OCgmcmRfcmVnLCBSRUdfUlRDX1NUQVRVU19SRUcpOworCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0MTsKKworCWlmIChyZF9yZWcgJiBCSVRfUlRDX1NUQVRVU19SRUdfUE9XRVJfVVBfTSkKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlBvd2VyIHVwIHJlc2V0IGRldGVjdGVkLlxuIik7CisKKwlpZiAocmRfcmVnICYgQklUX1JUQ19TVEFUVVNfUkVHX0FMQVJNX00pCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJQZW5kaW5nIEFsYXJtIGludGVycnVwdCBkZXRlY3RlZC5cbiIpOworCisJLyogQ2xlYXIgUlRDIFBvd2VyIHVwIHJlc2V0IGFuZCBwZW5kaW5nIGFsYXJtIGludGVycnVwdHMgKi8KKwlyZXQgPSB0d2w0MDMwX3J0Y193cml0ZV91OChyZF9yZWcsIFJFR19SVENfU1RBVFVTX1JFRyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0MTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgdHdsNDAzMF9ydGNfaW50ZXJydXB0LAorCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSBpcyBub3QgZnJlZS5cbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJLyogQ2hlY2sgUlRDIG1vZHVsZSBzdGF0dXMsIEVuYWJsZSBpZiBpdCBpcyBvZmYgKi8KKwlyZXQgPSB0d2w0MDMwX3J0Y19yZWFkX3U4KCZyZF9yZWcsIFJFR19SVENfQ1RSTF9SRUcpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDI7CisKKwlpZiAoIShyZF9yZWcgJiBCSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX00pKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJFbmFibGluZyBUV0w0MDMwLVJUQy5cbiIpOworCQlyZF9yZWcgPSBCSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX007CisJCXJldCA9IHR3bDQwMzBfcnRjX3dyaXRlX3U4KHJkX3JlZywgUkVHX1JUQ19DVFJMX1JFRyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQyOworCX0KKworCS8qIGluaXQgY2FjaGVkIElSUSBlbmFibGUgYml0cyAqLworCXJldCA9IHR3bDQwMzBfcnRjX3JlYWRfdTgoJnJ0Y19pcnFfYml0cywgUkVHX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0MjsKKworCXJldHVybiByZXQ7CisKKworb3V0MjoKKwlmcmVlX2lycShpcnEsIHJ0Yyk7CitvdXQxOgorCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworb3V0MDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGlzYWJsZSBhbGwgVFdMNDAzMCBSVEMgbW9kdWxlIGludGVycnVwdHMuCisgKiBTZXRzIHN0YXR1cyBmbGFnIHRvIGZyZWUuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZleGl0IHR3bDQwMzBfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCS8qIGxlYXZlIHJ0YyBydW5uaW5nLCBidXQgZGlzYWJsZSBpcnFzICovCisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJbWFza19ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pOworCW1hc2tfcnRjX2lycV9iaXQoQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9USU1FUl9NKTsKKworCWZyZWVfaXJxKGlycSwgcnRjKTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0d2w0MDMwX3J0Y19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW1hc2tfcnRjX2lycV9iaXQoQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9USU1FUl9NIHwKKwkJCSBCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlycXN0YXQ7CisKK3N0YXRpYyBpbnQgdHdsNDAzMF9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaXJxc3RhdCA9IHJ0Y19pcnFfYml0czsKKworCS8qIFJFVklTSVQgYWxhcm0gbWF5IG5lZWQgdG8gd2FrZSB1cyBmcm9tIHNsZWVwICovCisJbWFza19ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX1RJTUVSX00gfAorCQkJIEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfQUxBUk1fTSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMF9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc2V0X3J0Y19pcnFfYml0KGlycXN0YXQpOworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSB0d2w0MDMwX3J0Y19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgdHdsNDAzMF9ydGNfcmVzdW1lICBOVUxMCisjZW5kaWYKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0d2w0MDMwX3J0YyIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0d2w0MDMwcnRjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdHdsNDAzMF9ydGNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0d2w0MDMwX3J0Y19yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHR3bDQwMzBfcnRjX3NodXRkb3duLAorCS5zdXNwZW5kCT0gdHdsNDAzMF9ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHR3bDQwMzBfcnRjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInR3bDQwMzBfcnRjIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnR3bDQwMzBydGNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHR3bDQwMzBfcnRjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdsNDAzMF9ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0d2w0MDMwcnRjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0d2w0MDMwX3J0Y19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMsIE1vbnRhVmlzdGEgU29mdHdhcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKaW5kZXggMTAwMjVkOC4uMTRkNGYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKQEAgLTkyLDE5ICs5MiwxOSBAQAogCiAJLyogLi4uYW5kIHRoZW4gcmVhZCBjb25zdGFudCB2YWx1ZXMuICovCiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9TRUNPTkRTKTsKLQlkdC0+dG1fc2VjCT0gQkNEMkJJTih0bXApOworCWR0LT50bV9zZWMJPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9NSU5VVEVTKTsKLQlkdC0+dG1fbWluCT0gQkNEMkJJTih0bXApOworCWR0LT50bV9taW4JPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9IT1VSUyk7Ci0JZHQtPnRtX2hvdXIJPSBCQ0QyQklOKHRtcCk7CisJZHQtPnRtX2hvdXIJPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USF9EQVkpOwotCWR0LT50bV9tZGF5CT0gQkNEMkJJTih0bXApOworCWR0LT50bV9tZGF5CT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEgpOwotCWR0LT50bV9tb24gICAgPSBCQ0QyQklOKHRtcCkgLSAxOworCWR0LT50bV9tb24gICAgPSBiY2QyYmluKHRtcCkgLSAxOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfV0VFS19EQVkpOwotCWR0LT50bV93ZGF5CT0gQkNEMkJJTih0bXApOworCWR0LT50bV93ZGF5CT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfWUVBUik7Ci0JZHQtPnRtX3llYXIgPSBCQ0QyQklOKHRtcCkrMTAwOworCWR0LT50bV95ZWFyID0gYmNkMmJpbih0bXApKzEwMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJcbiVzIDogUmVhZCBSVEMgdmFsdWVzXG4iLF9fZnVuY19fKTsKQEAgLTEzNiwxMyArMTM2LDEzIEBACiAjZW5kaWYKIAogCS8qIFdyaXRlIGFsbCB0aGUgdmFsdWVzIHRvIHJhbS4uLiAqLwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUywgCUJJTjJCQ0QoZHQtPnRtX3NlYykpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTUlOVVRFUywgCUJJTjJCQ0QoZHQtPnRtX21pbikpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfSE9VUlMsIAlCSU4yQkNEKGR0LT50bV9ob3VyKSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USF9EQVksCUJJTjJCQ0QoZHQtPnRtX21kYXkpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRILCAgICAgQklOMkJDRChkdC0+dG1fbW9uICsgMSkpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfV0VFS19EQVksIAlCSU4yQkNEKGR0LT50bV93ZGF5KSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9ZRUFSLCAJQklOMkJDRChkdC0+dG1feWVhciAlIDEwMCkpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUywgCWJpbjJiY2QoZHQtPnRtX3NlYykpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTUlOVVRFUywgCWJpbjJiY2QoZHQtPnRtX21pbikpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfSE9VUlMsIAliaW4yYmNkKGR0LT50bV9ob3VyKSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USF9EQVksCWJpbjJiY2QoZHQtPnRtX21kYXkpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRILCAgICAgYmluMmJjZChkdC0+dG1fbW9uICsgMSkpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfV0VFS19EQVksIAliaW4yYmNkKGR0LT50bV93ZGF5KSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9ZRUFSLCAJYmluMmJjZChkdC0+dG1feWVhciAlIDEwMCkpOwogCiAJLyogLi4uYW5kIHNldCB0aGUgY2xvY2suICovCiAJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9DTURfUkFNMkNMT0NLLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCA4ODRiNjM1Li44MzRkY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAogCWFpZV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChhaWVfaXJxIDwgMCB8fCBhaWVfaXJxID49IE5SX0lSUVMpIHsKKwlpZiAoYWllX2lycSA8IDAgfHwgYWllX2lycSA+PSBucl9pcnFzKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBlcnJfZGV2aWNlX3VucmVnaXN0ZXI7CiAJfQpAQCAtMzcxLDcgKzM3MSw3IEBACiAJCWdvdG8gZXJyX2RldmljZV91bnJlZ2lzdGVyOwogCiAJcGllX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7Ci0JaWYgKHBpZV9pcnEgPCAwIHx8IHBpZV9pcnEgPj0gTlJfSVJRUykKKwlpZiAocGllX2lycSA8IDAgfHwgcGllX2lycSA+PSBucl9pcnFzKQogCQlnb3RvIGVycl9mcmVlX2lycTsKIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBpZV9pcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKaW5kZXggN2RjZmJhMS4uMzEwYzEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKQEAgLTExOCwxMyArMTE4LDEzIEBACiAJCWZvciAoaSA9IDA7IGkgPD0gNDsgaSsrKQogCQkJYnVmW2ldICY9IDB4N0Y7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbQ0NSX1NFQ10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltDQ1JfTUlOXSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZltDQ1JfSE9VUl0gJiAweDNGKTsgLyogaHIgaXMgMC0yMyAqLwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbQ0NSX01EQVldKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihidWZbQ0NSX01PTlRIXSkgLSAxOyAvKiBtb24gaXMgMC0xMSAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbQ0NSX1lFQVJdKQotCQkJKyAoQkNEMkJJTihidWZbQ0NSX1kyS10pICogMTAwKSAtIDE5MDA7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW0NDUl9TRUNdKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihidWZbQ0NSX01JTl0pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihidWZbQ0NSX0hPVVJdICYgMHgzRik7IC8qIGhyIGlzIDAtMjMgKi8KKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW0NDUl9NREFZXSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oYnVmW0NDUl9NT05USF0pIC0gMTsgLyogbW9uIGlzIDAtMTEgKi8KKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW0NDUl9ZRUFSXSkKKwkJCSsgKGJjZDJiaW4oYnVmW0NDUl9ZMktdKSAqIDEwMCkgLSAxOTAwOwogCXRtLT50bV93ZGF5ID0gYnVmW0NDUl9XREFZXTsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCkBAIC0xNzQsMTEgKzE3NCwxMSBAQAogCQlfX2Z1bmNfXywKIAkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIpOwogCi0JYnVmW0NDUl9TRUNdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlidWZbQ0NSX01JTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOworCWJ1ZltDQ1JfU0VDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmW0NDUl9NSU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKIAogCS8qIHNldCBob3VyIGFuZCAyNGhyIGJpdCAqLwotCWJ1ZltDQ1JfSE9VUl0gPSBCSU4yQkNEKHRtLT50bV9ob3VyKSB8IFgxMjA1X0hSX01JTDsKKwlidWZbQ0NSX0hPVVJdID0gYmluMmJjZCh0bS0+dG1faG91cikgfCBYMTIwNV9IUl9NSUw7CiAKIAkvKiBzaG91bGQgd2UgYWxzbyBzZXQgdGhlIGRhdGU/ICovCiAJaWYgKGRhdGV0b28pIHsKQEAgLTE4NywxNSArMTg3LDE1IEBACiAJCQlfX2Z1bmNfXywKIAkJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCi0JCWJ1ZltDQ1JfTURBWV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwkJYnVmW0NDUl9NREFZXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOwogCiAJCS8qIG1vbnRoLCAxIC0gMTIgKi8KLQkJYnVmW0NDUl9NT05USF0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwkJYnVmW0NDUl9NT05USF0gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAogCQkvKiB5ZWFyLCBzaW5jZSB0aGUgcnRjIGVwb2NoKi8KLQkJYnVmW0NDUl9ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCQlidWZbQ0NSX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAJCWJ1ZltDQ1JfV0RBWV0gPSB0bS0+dG1fd2RheSAmIDB4MDc7Ci0JCWJ1ZltDQ1JfWTJLXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLyAxMDApOworCQlidWZbQ0NSX1kyS10gPSBiaW4yYmNkKHRtLT50bV95ZWFyIC8gMTAwKTsKIAl9CiAKIAkvKiBJZiB3cml0aW5nIGFsYXJtIHJlZ2lzdGVycywgc2V0IGNvbXBhcmUgYml0cyBvbiByZWdpc3RlcnMgMC00ICovCkBAIC00MzcsNyArNDM3LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJdmFsdWUgPSBCQ0QyQklOKHJlZyAmIHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1hc2spOworCQl2YWx1ZSA9IGJjZDJiaW4ocmVnICYgcHJvYmVfbGltaXRzX3BhdHRlcm5baV0ubWFzayk7CiAKIAkJaWYgKHZhbHVlID4gcHJvYmVfbGltaXRzX3BhdHRlcm5baV0ubWF4IHx8CiAJCQl2YWx1ZSA8IHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1pbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMGEyMjVjYy4uNGI3NmZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0yMDExLDEwICsyMDExLDkgQEAKIAlzcGluX3VubG9ja19pcnEoJmJsb2NrLT5yZXF1ZXN0X3F1ZXVlX2xvY2spOwogfQogCi1zdGF0aWMgaW50IGRhc2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlucCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGRhc2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbnAtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZSA9IGJsb2NrLT5iYXNlOwogCWludCByYzsKIApAQCAtMjA1Miw5ICsyMDUxLDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZGFzZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5wLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZGFzZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbnAtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAKIAlhdG9taWNfZGVjKCZibG9jay0+b3Blbl9jb3VudCk7CkBAIC0yMDg5LDggKzIwODcsNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBkYXNkX29wZW4sCiAJLnJlbGVhc2UJPSBkYXNkX3JlbGVhc2UsCi0JLmlvY3RsCQk9IGRhc2RfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bAk9IGRhc2RfY29tcGF0X2lvY3RsLAorCS5sb2NrZWRfaW9jdGwJPSBkYXNkX2lvY3RsLAogCS5nZXRnZW8JCT0gZGFzZF9nZXRnZW8sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggODVmY2I0My4uNzg0NDQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJfQogCWNxci0+cmV0cmllcyA9IERJQUdfTUFYX1JFVFJJRVM7CiAJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwotCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CiAJY3FyLT5zdGFydGRldiA9IG1lbWRldjsKIAljcXItPm1lbWRldiA9IG1lbWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCA0OWY5ZDIyLi4yZTYwZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0xNzAwLDcgKzE3MDAsNyBAQAogCQkJcmVjaWQrKzsKIAkJfQogCX0KLQlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisJaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSkKIAkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOwogCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKIAljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCA5M2Q5YjY0Li43ZDQ0MmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJCQlyZWNpZCsrOwogCQl9CiAJfQotCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CiAJY3FyLT5zdGFydGRldiA9IG1lbWRldjsKIAljcXItPm1lbWRldiA9IG1lbWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCmluZGV4IGFlZTY1NjUuLmU5OWQ1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwpAQCAtOTksNyArOTksNyBAQAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAKIAliZGV2ID0gYmRnZXRfZGlzayhibG9jay0+Z2RwLCAwKTsKLQlpZiAoIWJkZXYgfHwgYmxrZGV2X2dldChiZGV2LCBGTU9ERV9SRUFELCAxKSA8IDApCisJaWYgKCFiZGV2IHx8IGJsa2Rldl9nZXQoYmRldiwgRk1PREVfUkVBRCkgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAkvKgogCSAqIFNlZSBmcy9wYXJ0aXRpb24vY2hlY2suYzpyZWdpc3Rlcl9kaXNrLHJlc2Nhbl9wYXJ0aXRpb25zCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogCWludmFsaWRhdGVfcGFydGl0aW9uKGJsb2NrLT5nZHAsIDApOwogCS8qIE1hdGNoaW5nIGJsa2Rldl9wdXQgdG8gdGhlIGJsa2Rldl9nZXQgaW4gZGFzZF9zY2FuX3BhcnRpdGlvbnMuICovCi0JYmxrZGV2X3B1dChiZGV2KTsKKwlibGtkZXZfcHV0KGJkZXYsIEZNT0RFX1JFQUQpOwogCXNldF9jYXBhY2l0eShibG9jay0+Z2RwLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCA0ODlkNWZlLi4wNWExNDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtNjEwLDggKzYxMCw3IEBACiB2b2lkIGRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKHN0cnVjdCBkYXNkX2Jsb2NrICopOwogCiAvKiBleHRlcm5hbHMgaW4gZGFzZF9pb2N0bC5jICovCi1pbnQgIGRhc2RfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci1sb25nIGRhc2RfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitpbnQgIGRhc2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBleHRlcm5hbHMgaW4gZGFzZF9wcm9jLmMgKi8KIGludCBkYXNkX3Byb2NfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IDkxYTY0NjMuLmI4MmQ4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtMzY2LDEwICszNjYsOSBAQAogfQogCiBpbnQKLWRhc2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitkYXNkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKQEAgLTQyMSwxNSArNDIwLDMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQotCi1sb25nCi1kYXNkX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJ2YWw7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCXJ2YWwgPSBkYXNkX2lvY3RsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gKHJ2YWwgPT0gLUVJTlZBTCkgPyAtRU5PSU9DVExDTUQgOiBydmFsOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKaW5kZXggYTdmZjE2Ny4uNjNmMjZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCkBAIC0zMSw4ICszMSw4IEBACiAjZGVmaW5lIFBSSU5UX1dBUk4oeC4uLikgIHByaW50ayhLRVJOX1dBUk5JTkcgRENTU0JMS19OQU1FICIgd2FybmluZzogIiB4KQogI2RlZmluZSBQUklOVF9FUlIoeC4uLikJICBwcmludGsoS0VSTl9FUlIgRENTU0JMS19OQU1FICIgZXJyb3I6ICIgeCkKIAotc3RhdGljIGludCBkY3NzYmxrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIGludCBkY3NzYmxrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBkY3NzYmxrX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKTsKK3N0YXRpYyBpbnQgZGNzc2Jsa19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpOwogc3RhdGljIGludCBkY3NzYmxrX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKTsKIHN0YXRpYyBpbnQgZGNzc2Jsa19kaXJlY3RfYWNjZXNzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY251bSwKIAkJCQkgdm9pZCAqKmthZGRyLCB1bnNpZ25lZCBsb25nICpwZm4pOwpAQCAtNzc2LDMyICs3NzYsMzEgQEAKIH0KIAogc3RhdGljIGludAotZGNzc2Jsa19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorZGNzc2Jsa19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgZGNzc2Jsa19kZXZfaW5mbyAqZGV2X2luZm87CiAJaW50IHJjOwogCi0JZGV2X2luZm8gPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJZGV2X2luZm8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaWYgKE5VTEwgPT0gZGV2X2luZm8pIHsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAJYXRvbWljX2luYygmZGV2X2luZm8tPnVzZV9jb3VudCk7Ci0JaW5vZGUtPmlfYmRldi0+YmRfYmxvY2tfc2l6ZSA9IDQwOTY7CisJYmRldi0+YmRfYmxvY2tfc2l6ZSA9IDQwOTY7CiAJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludAotZGNzc2Jsa19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorZGNzc2Jsa19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRjc3NibGtfZGV2X2luZm8gKmRldl9pbmZvOworCXN0cnVjdCBkY3NzYmxrX2Rldl9pbmZvICpkZXZfaW5mbyA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc2VnbWVudF9pbmZvICplbnRyeTsKIAlpbnQgcmM7CiAKLQlkZXZfaW5mbyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoTlVMTCA9PSBkZXZfaW5mbykgeworCWlmICghZGV2X2luZm8pIHsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggYTI1YjhiZi4uMDIzODAzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtNDMsOSArNDMsOSBAQAogLyoKICAqIGZpbGUgb3BlcmF0aW9uIHN0cnVjdHVyZSBmb3IgdGFwZSBibG9jayBmcm9udGVuZAogICovCi1zdGF0aWMgaW50IHRhcGVibG9ja19vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBpbnQgdGFwZWJsb2NrX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwotc3RhdGljIGludCB0YXBlYmxvY2tfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKK3N0YXRpYyBpbnQgdGFwZWJsb2NrX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90KTsKK3N0YXRpYyBpbnQgdGFwZWJsb2NrX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKiwgZm1vZGVfdCk7CitzdGF0aWMgaW50IHRhcGVibG9ja19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGZtb2RlX3QsIHVuc2lnbmVkIGludCwKIAkJCQl1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQgdGFwZWJsb2NrX21lZGl1bV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICopOwogc3RhdGljIGludCB0YXBlYmxvY2tfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICopOwpAQCAtNTQsNyArNTQsNyBAQAogCS5vd25lcgkJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCSA9IHRhcGVibG9ja19vcGVuLAogCS5yZWxlYXNlCSA9IHRhcGVibG9ja19yZWxlYXNlLAotCS5pb2N0bCAgICAgICAgICAgPSB0YXBlYmxvY2tfaW9jdGwsCisJLmxvY2tlZF9pb2N0bCAgICAgICAgICAgPSB0YXBlYmxvY2tfaW9jdGwsCiAJLm1lZGlhX2NoYW5nZWQgICA9IHRhcGVibG9ja19tZWRpdW1fY2hhbmdlZCwKIAkucmV2YWxpZGF0ZV9kaXNrID0gdGFwZWJsb2NrX3JldmFsaWRhdGVfZGlzaywKIH07CkBAIC0zNjQsMTMgKzM2NCwxMiBAQAogICogQmxvY2sgZnJvbnRlbmQgdGFwZSBkZXZpY2Ugb3BlbiBmdW5jdGlvbi4KICAqLwogc3RhdGljIGludAotdGFwZWJsb2NrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit0YXBlYmxvY2tfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKglkaXNrOworCXN0cnVjdCBnZW5kaXNrICoJZGlzayA9IGJkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IHRhcGVfZGV2aWNlICoJZGV2aWNlOwogCWludAkJCXJjOwogCi0JZGlzayAgID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlkZXZpY2UgPSB0YXBlX2dldF9kZXZpY2VfcmVmZXJlbmNlKGRpc2stPnByaXZhdGVfZGF0YSk7CiAKIAlpZiAoZGV2aWNlLT5yZXF1aXJlZF90YXBlbWFya3MpIHsKQEAgLTQxMCw5ICs0MDksOCBAQAogICogICAgICAgd2UganVzdCBnZXQgdGhlIHBvaW50ZXIgaGVyZSBhbmQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlLgogICovCiBzdGF0aWMgaW50Ci10YXBlYmxvY2tfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3RhcGVibG9ja19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwogCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJdGFwZV9zdGF0ZV9zZXQoZGV2aWNlLCBUU19JTl9VU0UpOwpAQCAtNDI3LDIyICs0MjUsMjEgQEAKICAqLwogc3RhdGljIGludAogdGFwZWJsb2NrX2lvY3RsKAotCXN0cnVjdCBpbm9kZSAqCQlpbm9kZSwKLQlzdHJ1Y3QgZmlsZSAqCQlmaWxlLAorCXN0cnVjdCBibG9ja19kZXZpY2UgKgliZGV2LAorCWZtb2RlX3QJCQltb2RlLAogCXVuc2lnbmVkIGludAkJY29tbWFuZCwKIAl1bnNpZ25lZCBsb25nCQlhcmcKICkgewogCWludCByYzsKIAlpbnQgbWlub3I7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2s7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlOwogCiAJcmMgICAgID0gMDsKLQlkaXNrICAgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwogCUJVR19PTighZGlzayk7CiAJZGV2aWNlID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCUJVR19PTighZGV2aWNlKTsKLQltaW5vciAgPSBpbWlub3IoaW5vZGUpOworCW1pbm9yICA9IE1JTk9SKGJkZXYtPmJkX2Rldik7CiAKIAlEQkZfTEgoNiwgInRhcGVibG9ja19pb2N0bCgweCUweClcbiIsIGNvbW1hbmQpOwogCURCRl9MSCg2LCAiZGV2aWNlID0gJWQ6JWRcbiIsIHRhcGVibG9ja19tYWpvciwgbWlub3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKaW5kZXggMzI2ZGIxZS4uZTNmZTY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCkBAIC02NTksOSArNjU5LDkgQEAKIAlocl90aW1lID0ga3RpbWVfc2V0KDAsIHBvbGxfdGltZW91dCk7CiAKIAlpZiAoIWhydGltZXJfaXNfcXVldWVkKCZhcF9wb2xsX3RpbWVyKSB8fAotCSAgICAhaHJ0aW1lcl9mb3J3YXJkKCZhcF9wb2xsX3RpbWVyLCBhcF9wb2xsX3RpbWVyLmV4cGlyZXMsIGhyX3RpbWUpKSB7Ci0JCWFwX3BvbGxfdGltZXIuZXhwaXJlcyA9IGhyX3RpbWU7Ci0JCWhydGltZXJfc3RhcnQoJmFwX3BvbGxfdGltZXIsIGhyX3RpbWUsIEhSVElNRVJfTU9ERV9BQlMpOworCSAgICAhaHJ0aW1lcl9mb3J3YXJkKCZhcF9wb2xsX3RpbWVyLCBocnRpbWVyX2dldF9leHBpcmVzKCZhcF9wb2xsX3RpbWVyKSwgaHJfdGltZSkpIHsKKwkJaHJ0aW1lcl9zZXRfZXhwaXJlcygmYXBfcG9sbF90aW1lciwgaHJfdGltZSk7CisJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmYXBfcG9sbF90aW1lciwgSFJUSU1FUl9NT0RFX0FCUyk7CiAJfQogCXJldHVybiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDhhMTMwNzEuLjljZTRjNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtNTgzLDYgKzU4Myw4IEBACiAJdW5zaWduZWQgbG9uZyBsb25nICAgICBpc3N1ZWQ7ICAgICAgICAgLyogcmVxdWVzdCBzZW50IHRpbWUgKFNUQ0spICovCiAJc3RydWN0IHpmY3BfdW5pdCAgICAgICAqdW5pdDsKIAl2b2lkCQkJKCpoYW5kbGVyKShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworCXUxNgkJCXFkaW9fb3V0Yl91c2FnZTsvKiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZSAqLworCXUxNgkJCXFkaW9faW5iX3VzYWdlOwkvKiB1c2FnZSBvZiBpbmJvdW5kIHF1ZXVlICovCiB9OwogCiAvKiBkcml2ZXIgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggNzM5MzU2YS4uNWFlMWQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTc3Nyw2ICs3NzgsNyBAQAogCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKIAorCXJlcS0+cWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnJlcV9xLT5jb3VudCk7CiAJcmVxLT5pc3N1ZWQgPSBnZXRfY2xvY2soKTsKIAlpZiAoemZjcF9xZGlvX3NlbmQocmVxKSkgewogCQkvKiBRdWV1ZXMgYXJlIGRvd24uLi4uLiAqLwpAQCAtMjA4Miw2ICsyMDg0LDM2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW5pdC0+bGF0ZW5jaWVzLmxvY2ssIGZsYWdzKTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFCitzdGF0aWMgdm9pZCB6ZmNwX2ZzZl90cmFjZV9sYXRlbmN5KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IGZzZl9xdWFsX2xhdGVuY3lfaW5mbyAqbGF0X2luZjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWZzZl9yZXEtPmRhdGE7CisJc3RydWN0IHJlcXVlc3QgKnJlcSA9IHNjc2lfY21uZC0+cmVxdWVzdDsKKwlzdHJ1Y3QgemZjcF9ibGtfZHJ2X2RhdGEgdHJhY2U7CisJaW50IHRpY2tzID0gZnNmX3JlcS0+YWRhcHRlci0+dGltZXJfdGlja3M7CisKKwl0cmFjZS5mbGFncyA9IDA7CisJdHJhY2UubWFnaWMgPSBaRkNQX0JMS19EUlZfREFUQV9NQUdJQzsKKwlpZiAoZnNmX3JlcS0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpIHsKKwkJdHJhY2UuZmxhZ3MgfD0gWkZDUF9CTEtfTEFUX1ZBTElEOworCQlsYXRfaW5mID0gJmZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLmxhdGVuY3lfaW5mbzsKKwkJdHJhY2UuY2hhbm5lbF9sYXQgPSBsYXRfaW5mLT5jaGFubmVsX2xhdCAqIHRpY2tzOworCQl0cmFjZS5mYWJyaWNfbGF0ID0gbGF0X2luZi0+ZmFicmljX2xhdCAqIHRpY2tzOworCX0KKwlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQorCQl0cmFjZS5mbGFncyB8PSBaRkNQX0JMS19SRVFfRVJST1I7CisJdHJhY2UuaW5iX3VzYWdlID0gZnNmX3JlcS0+cWRpb19pbmJfdXNhZ2U7CisJdHJhY2Uub3V0Yl91c2FnZSA9IGZzZl9yZXEtPnFkaW9fb3V0Yl91c2FnZTsKKworCWJsa19hZGRfZHJpdmVyX2RhdGEocmVxLT5xLCByZXEsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHpmY3BfZnNmX3RyYWNlX2xhdGVuY3koc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfaGFuZGxlcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NwbnQgPSByZXEtPmRhdGE7CkBAIC0yMTE0LDYgKzIxNDYsOCBAQAogCWlmIChyZXEtPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9NRUFTVVJFTUVOVF9EQVRBKQogCQl6ZmNwX2ZzZl9yZXFfbGF0ZW5jeShyZXEpOwogCisJemZjcF9mc2ZfdHJhY2VfbGF0ZW5jeShyZXEpOworCiAJaWYgKHVubGlrZWx5KGZjcF9yc3BfaXUtPnZhbGlkaXR5LmJpdHMuZmNwX3JzcF9sZW5fdmFsaWQpKSB7CiAJCWlmIChmY3BfcnNwX2luZm9bM10gPT0gUlNQX0NPREVfR09PRCkKIAkJCXNldF9ob3N0X2J5dGUoc2NwbnQsIERJRF9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAppbmRleCBmZDNhODg3Li5mYTJhMzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKQEAgLTQzOSw0ICs0MzksMTYgQEAKIAl1OCBsb2dbRlNGX1FUQ0JfTE9HX1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB6ZmNwX2Jsa19kcnZfZGF0YSB7CisjZGVmaW5lIFpGQ1BfQkxLX0RSVl9EQVRBX01BR0lDCQkJMHgxCisJdTMyIG1hZ2ljOworI2RlZmluZSBaRkNQX0JMS19MQVRfVkFMSUQJCQkweDEKKyNkZWZpbmUgWkZDUF9CTEtfUkVRX0VSUk9SCQkJMHgyCisJdTE2IGZsYWdzOworCXU4IGluYl91c2FnZTsKKwl1OCBvdXRiX3VzYWdlOworCXU2NCBjaGFubmVsX2xhdDsKKwl1NjQgZmFicmljX2xhdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZW5kaWYJCQkJLyogRlNGX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggM2UwNTA4MC4uNjY0NzUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAogCWZzZl9yZXEtPnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKKwlmc2ZfcmVxLT5xZGlvX2luYl91c2FnZSA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXNwX3EuY291bnQpOwogCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKaW5kZXggYjkyYzE5Yi4uNTMxMTMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCkBAIC0xOTI0LDEyICsxOTI0LDkgQEAKIAkgICAgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFIHx8CiAJICAgICBjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMKSkgewogCQlpZiAoc2NzaV9zZ19jb3VudChjbWQpID09IDEpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCQl2b2lkICpidWYgPSB0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3ZpcnRbcmVxdWVzdF9pZF07CiAKLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJCXNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihjbWQsIGJ1ZiwgVFdfU0VDVE9SX1NJWkUpOwotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl9CiAJfQogfSAvKiBFbmQgdHdhX3Njc2lvcF9leGVjdXRlX3Njc2lfY29tcGxldGUoKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKaW5kZXggYTA1MzdmMC4uYzAzZjFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCkBAIC0xNDY2LDEyICsxNDY2LDcgQEAKIHN0YXRpYyB2b2lkIHR3X3RyYW5zZmVyX2ludGVybmFsKFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiwgaW50IHJlcXVlc3RfaWQsCiAJCQkJIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IHNjc2lfY21uZCAqY21kID0gdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoY21kLCBkYXRhLCBsZW4pOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0sIGRhdGEsIGxlbik7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBpc3IgdG8gY29tcGxldGUgYW4gaW5xdWlyeSBjb21tYW5kICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwppbmRleCBiNWE4NjhkLi4xZTU0NzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogI2Vsc2UKICNkZWZpbmUgSVJRX01JTiA5CiAjaWYgZGVmaW5lZChfX1BQQykKLSNkZWZpbmUgSVJRX01BWCAoTlJfSVJRUy0xKQorI2RlZmluZSBJUlFfTUFYIChucl9pcnFzLTEpCiAjZWxzZQogI2RlZmluZSBJUlFfTUFYIDEyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHgucmVnIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKaW5kZXggY2NhMTZmYy4uMDY2NmMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKQEAgLTgwLDYgKzgwLDE3IEBACiAJfQogCiAvKgorICogUmVnaXN0ZXJzIG1hcmtlZCAiZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlIiBhcmUgbm90ICh5ZXQpIHJlZmVyZW5jZWQKKyAqIGZyb20gdGhlIGRyaXZlciBjb2RlLCBhbmQgdGhpcyBrZXl3b3JkIGluaGliaXQgZ2VuZXJhdGlvbgorICogb2YgZGVidWcgY29kZSBmb3IgdGhlbS4KKyAqCisgKiBSRUdfUFJFVFRZX1BSSU5UIGNvbmZpZyB3aWxsIGNvbXBsYWluIGlmIGRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQorICogaXMgYWRkZWQgdG8gdGhlIHJlZ2lzdGVyIHdoaWNoIGlzIHJlZmVyZW5jZWQgaW4gdGhlIGRyaXZlci4KKyAqIFVucmVmZXJlbmNlZCByZWdpc3RlciB3aXRoIG5vIGRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZSB3aWxsIHJlc3VsdAorICogaW4gZGVhZCBjb2RlLiBObyB3YXJuaW5nIGlzIGlzc3VlZC4KKyAqLworCisvKgogICogTW9kZSBQb2ludGVyCiAgKiBDb250cm9scyB3aGljaCBvZiB0aGUgNSwgNTEyYnl0ZSwgYWRkcmVzcyBzcGFjZXMgc2hvdWxkIGJlIHVzZWQKICAqIGFzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG9mIGFueSByZWdpc3RlciBhY2Nlc3NlcyBpbiBvdXIKQEAgLTkxLDYgKzEwMiw3IEBACiAJZmllbGQJRFNUX01PREUJMHg3MAogCWZpZWxkCVNSQ19NT0RFCTB4MDcKIAltb2RlX3BvaW50ZXIKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogY29uc3QgU1JDX01PREVfU0hJRlQJMApAQCAtMTkwLDYgKzIwMiw3IEBACiAJCVNBV19IV0VSUiwKIAkJQkFEX1NDQl9TVEFUVVMKIAl9CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yMDcsNiArMjIwLDcgQEAKIAlmaWVsZAlDTFJTRVFJTlQJMHgwNAogCWZpZWxkCUNMUkNNRElOVAkweDAyCiAJZmllbGQJQ0xSU1BMVElOVAkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yMjIsNiArMjM2LDcgQEAKIAlmaWVsZAlTUVBBUkVSUgkweDA4CiAJZmllbGQJSUxMT1BDT0RFCTB4MDQKIAlmaWVsZAlEU0NUTU9VVAkweDAyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNTUsNiArMjcwLDcgQEAKIAlmaWVsZAlJTlRFTgkJMHgwMgogCWZpZWxkCUNISVBSU1QJCTB4MDEKIAlmaWVsZAlDSElQUlNUQUNLCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI2NSw2ICsyODEsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMgogCWNvdW50CQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNzQsNiArMjkxLDcgQEAKIAlhZGRyZXNzCQkJMHgwMDgKIAlhY2Nlc3NfbW9kZQlSVwogCWNvdW50CQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zMTEsNiArMzI5LDcgQEAKIAlmaWVsZAlDTFJTRVFfU0NTSUlOVAkweDA0CiAJZmllbGQJQ0xSU0VRX1BDSUlOVAkweDAyCiAJZmllbGQJQ0xSU0VRX1NQTFRJTlQJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzIwLDYgKzMzOSw3IEBACiAJYWRkcmVzcwkJCTB4MDBFCiAJYWNjZXNzX21vZGUJUlcKIAlzaXplCQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zMzAsNiArMzUwLDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTIKIAltb2RlcwkJTV9DQ0hBTgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzQwLDYgKzM2MSw3IEBACiAJY291bnQJCTIKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NDSEFOCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zNTAsNiArMzcyLDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NDSEFOCiAJc2l6ZQkJMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzc4LDYgKzQwMSw3IEBACiAJCVNDQl9RU0laRV84MTkyLAogCQlTQ0JfUVNJWkVfMTYzODQKIAl9CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC00MzEsNiArNDU1LDcgQEAKIAlmaWVsZAlFWFRSRVFMQ0sJMHgxMAkvKiBFeHRlcm5hbCBSZXF1ZXN0IExvY2sgKi8KIAlmaWVsZAlESVNBQkxFX1RXQVRFCTB4MDIJLyogUmV2IEIgb3IgZ3JlYXRlciAqLwogCWZpZWxkCUNJT1BBUkNLRU4JMHgwMQkvKiBJbnRlcm5hbCBidXMgcGFyaXR5IGVycm9yIGVuYWJsZSAqLworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtNDU5LDYgKzQ4NCw3IEBACiAJZmllbGQJU0dfQUREUl9NQVNLCTB4ZjgKIAlmaWVsZAlPRERfU0VHCQkweDA0CiAJZmllbGQJTEFTVF9TRUcJMHgwMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBTR19DQUNIRV9TSEFET1cgewpAQCAtNDkxLDYgKzUxNyw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAlzaXplCQk4CiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC01MjIsNiArNTQ5LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTMKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTU1MSw2ICs1NzksNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJOAogCW1vZGVzCQlNX0RGRjAsIE1fREZGMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtNTYxLDYgKzU5MCw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAlzaXplCQk4CiAJbW9kZXMJCU1fQ0NIQU4KKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTU3MCw2ICs2MDAsNyBAQAogCWFkZHJlc3MJCQkweDA4NAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC01NzksNiArNjEwLDcgQEAKIAlhZGRyZXNzCQkJMHgwODQKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NDSEFOCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC02MDksNiArNjQxLDcgQEAKIAkJUkRfREZUSFJTSF85MCwKIAkJUkRfREZUSFJTSF9NQVgKIAl9CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC04MTcsNiArODUwLDcgQEAKIAlmaWVsZAlTUlNQRFBFRU4JMHgwNAogCWZpZWxkCVRTQ1NFUlJFTgkweDAyCiAJZmllbGQJQ01QQUJDRElTCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTg2Myw2ICs4OTcsNyBAQAogCWZpZWxkCVJYT1ZSVU4JCTB4MDQKIAlmaWVsZAlSWFNDRU1TRwkweDAyCiAJZmllbGQJUlhTUExUUlNQCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTkwOCw2ICs5NDMsNyBAQAogCW1vZGVzCQlNX0RGRjAsIE1fREZGMQogCWNvdW50CQkyCiAJZmllbGQJUlhEQVRBQlVDS0VUCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTEwNjksNiArMTEwNSw3IEBACiAJZmllbGQJUlhPVlJVTgkJMHgwNAogCWZpZWxkCVJYU0NFTVNHCTB4MDIKIAlmaWVsZAlSWFNQTFRSU1AJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTA4MCw2ICsxMTE3LDcgQEAKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEKIAljb3VudAkJMgogCWZpZWxkCVJYREFUQUJVQ0tFVAkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xMDkxLDYgKzExMjksNyBAQAogCW1vZGVzCQlNX0NGRwogCWZpZWxkCVRFU1RfR1JPVVAJMHhGMAogCWZpZWxkCVRFU1RfTlVNCTB4MEYKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTExMDksNiArMTE0OCw3IEBACiAJZmllbGQJUkRQRVJSCQkweDA0CiAJZmllbGQJVFdBVEVSUgkJMHgwMgogCWZpZWxkCURQUgkJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTIwNCw2ICsxMjQ0LDcgQEAKIAlmaWVsZAlTU0UJCTB4NDAKIAlmaWVsZAlTVEEJCTB4MDgKIAlmaWVsZAlUV0FURVJSCQkweDAyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xMjE2LDYgKzEyNTcsNyBAQAogCXNpemUJCTIwCiAJY291bnQJCTIKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fU0NTSQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTI0Nyw2ICsxMjg5LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRwogCWNvdW50CQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xMjc4LDYgKzEzMjEsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCiAJY291bnQJCTEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTEyOTAsNiArMTMzNCw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKIAljb3VudAkJMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTMwMiw2ICsxMzQ3LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRwogCWNvdW50CQkxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xMzEzLDYgKzEzNTksNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCiAJY291bnQJCTEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTEzMjQsNiArMTM3MSw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKIAljb3VudAkJMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTM0Nyw2ICsxMzk1LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRwogCWNvdW50CQkxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xMzU4LDYgKzE0MDcsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCiAJY291bnQJCTEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTEzOTgsNiArMTQ0OCw3IEBACiAJY291bnQJCTIKIAltYXNrCQlJTFVOTEVOCTB4MEYKIAltYXNrCQlUTFVOTEVOCTB4RjAKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIGNvbnN0IExVTkxFTl9TSU5HTEVfTEVWRUxfTFVOIDB4RgogCkBAIC0xNDEwLDYgKzE0NjEsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCiAJY291bnQJCTEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTE0MjIsNiArMTQ3NCw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKIAljb3VudAkJOQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTQzMiw2ICsxNDg1LDcgQEAKIAlhZGRyZXNzCQkJMHgwMzMKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTQ5MCw2ICsxNTQ0LDcgQEAKIAlmaWVsZAlQQ0kyUENJCQkweDA0CiAJZmllbGQJU0lOR0xFQ01ECTB4MDIKIAlmaWVsZAlBQk9SVFBFTkRJTkcJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTUwOCw2ICsxNTYzLDcgQEAKIAlmaWVsZAlMUU9DT05USU5VRQkweDA0CiAJZmllbGQJTFFPVE9JRExFCTB4MDIKIAlmaWVsZAlMUU9QQVVTRQkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xNTc4LDYgKzE2MzQsNyBAQAogCWZpZWxkCURGUEVYUAkJMHg0MAogCWZpZWxkCUJJT1NDQU5DRUxFTgkweDEwCiAJZmllbGQJU1BJT0VOCQkweDA4CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xNTk0LDYgKzE2NTEsNyBAQAogCWZpZWxkCUVOU1RJTUVSCTB4MDQKIAlmaWVsZAlBQ1RORUdFTgkweDAyCiAJZmllbGQJU1RQV0VOCQkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xNjk2LDYgKzE3NTQsNyBAQAogCQlQX1NUQVRVUwlDRE98SU9PLAogCQlQX01FU0dJTglDRE98SU9PfE1TR08KIAl9CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xNzM4LDYgKzE3OTcsNyBAQAogCW1vZGVzCQlNX0NGRwogCXNpemUJCTIKIAljb3VudAkJMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTc3NCw2ICsxODM0LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMSwgTV9TQ1NJCiAJc2l6ZQkJMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTc5Niw2ICsxODU3LDcgQEAKIAljb3VudAkJMgogCWZpZWxkCUNMS09VVAkJMHg4MAogCWZpZWxkCVRBUkdJRAkJMHgwRgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTgyNSw2ICsxODg3LDcgQEAKIAlmaWVsZAlFTkFCNDAJCTB4MDgJLyogTFZEIHRyYW5zY2VpdmVyIGFjdGl2ZSAqLwogCWZpZWxkCUVOQUIyMAkJMHgwNAkvKiBTRS9IVkQgdHJhbnNjZWl2ZXIgYWN0aXZlICovCiAJZmllbGQJU0VMV0lERQkJMHgwMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTg0Miw2ICsxOTA1LDcgQEAKIAlmaWVsZAlFTkRHRk9STUNISwkJMHgwNAogCWZpZWxkCUFVVE9fTVNHT1VUX0RFCQkweDAyCiAJbWFzawlPUFRJT05NT0RFX0RFRkFVTFRTCUFVVE9fTVNHT1VUX0RFCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xODc2LDYgKzE5NDAsNyBAQAogCWZpZWxkCUNMUk9WRVJSVU4JMHgwNAogCWZpZWxkCUNMUlNQSU9SRFkJMHgwMgogCWZpZWxkCUNMUkFSQkRPCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTE5MjksNiArMTk5NCw3IEBACiAJZmllbGQJQ0xSU0NTSVBFUlIJMHgwNAogCWZpZWxkCUNMUlNUUkIyRkFTVAkweDAyCiAJZmllbGQJQ0xSUkVRSU5JVAkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xOTYyLDYgKzIwMjgsNyBAQAogCWZpZWxkCUNMUldJREVfUkVTCTB4MDQJLyogTW9kZXMgMCBhbmQgMSBvbmx5ICovCiAJZmllbGQJQ0xSU0RPTkUJMHgwMgkvKiBNb2RlcyAwIGFuZCAxIG9ubHkgKi8KIAlmaWVsZAlDTFJETUFET05FCTB4MDEJLyogTW9kZXMgMCBhbmQgMSBvbmx5ICovCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yMDAyLDYgKzIwNjksNyBAQAogCWFjY2Vzc19tb2RlCVJPCiAJbW9kZXMJCU1fQ0ZHCiAJY291bnQJCTYKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTIwMjIsNiArMjA5MCw3IEBACiAJYWNjZXNzX21vZGUJUk8KIAltb2RlcwkJTV9DRkcKIAljb3VudAkJMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjA1NCw2ICsyMTIzLDcgQEAKIAlmaWVsZAlDTFJMUUlCQURMUVQJMHgwNAogCWZpZWxkCUNMUkxRSUFUTkxRCTB4MDIKIAlmaWVsZAlDTFJMUUlBVE5DTUQJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjA3MCw2ICsyMTQwLDcgQEAKIAlmaWVsZAlFTkxRSUJBRExRVAkweDA0CiAJZmllbGQJRU5MUUlBVE5MUQkweDAyCiAJZmllbGQJRU5MUUlBVE5DTUQJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjEwNiw2ICsyMTc3LDcgQEAKIAlmaWVsZAlDTFJMUUlCQURMUUkJMHgwNAogCWZpZWxkCUNMUkxRSU9WRVJJX0xRCTB4MDIKIAlmaWVsZAlDTFJMUUlPVkVSSV9OTFEJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjEyNCw2ICsyMTk2LDcgQEAKIAlmaWVsZAlFTkxRSUJBRExRSQkweDA0CiAJZmllbGQJRU5MUUlPVkVSSV9MUQkweDAyCS8qIExRSU9WRVJJMSAqLwogCWZpZWxkCUVOTFFJT1ZFUklfTkxRCTB4MDEJLyogTFFJT1ZFUkkyICovCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yMTY1LDYgKzIyMzgsNyBAQAogCWNvdW50CQkzCiAJZmllbGQJQ0xSTlRSQU1QRVJSCTB4MDIKIAlmaWVsZAlDTFJPU1JBTVBFUlIJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjE3Nyw2ICsyMjUxLDcgQEAKIAljb3VudAkJNAogCWZpZWxkCUVOTlRSQU1QRVJSCTB4MDIKIAlmaWVsZAlFTk9TUkFNUEVSUgkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yMjA3LDYgKzIyODIsNyBAQAogCWZpZWxkCUNMUkxRT0FUTkxRCQkweDA0CiAJZmllbGQJQ0xSTFFPQVROUEtUCQkweDAyCiAJZmllbGQJQ0xSTFFPVENSQwkJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjIyMiw2ICsyMjk4LDcgQEAKIAlmaWVsZAlFTkxRT0FUTkxRCQkweDA0CiAJZmllbGQJRU5MUU9BVE5QS1QJCTB4MDIKIAlmaWVsZAlFTkxRT1RDUkMJCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTIyNTEsNiArMjMyOCw3IEBACiAJZmllbGQJQ0xSTFFPQkFEUUFTCQkweDA0CiAJZmllbGQJQ0xSTFFPQlVTRlJFRQkJMHgwMgogCWZpZWxkCUNMUkxRT1BIQUNIR0lOUEtUCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTIyNjYsNiArMjM0NCw3IEBACiAJZmllbGQJRU5MUU9CQURRQVMJCTB4MDQKIAlmaWVsZAlFTkxRT0JVU0ZSRUUJCTB4MDIKIAlmaWVsZAlFTkxRT1BIQUNIR0lOUEtUCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTIyODksNiArMjM2OCw3IEBACiAJYWNjZXNzX21vZGUJUk8KIAltb2RlcwkJTV9DRkcKIAljb3VudAkJMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjMxOCw2ICsyMzk4LDcgQEAKIAlhY2Nlc3NfbW9kZQlSTwogCXNpemUJCTIKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fU0NTSQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjM0MSw2ICsyNDIyLDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTIKIAltb2RlcwkJTV9TQ1NJCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yMzU3LDYgKzI0MzksNyBAQAogCWZpZWxkCQlMUU9CVVNFVERMWQkweDQwCiAJZmllbGQJCUxRT05PSE9MRExBQ0sJMHgwMgogCWZpZWxkCQlMUU9OT0NIS09WRVIJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjM4OSw2ICsyNDcyLDcgQEAKIAlmaWVsZAlDTFJDRkc0VFNUQVQJMHgwNAogCWZpZWxkCUNMUkNGRzRJQ01ECTB4MDIKIAlmaWVsZAlDTFJDRkc0VENNRAkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNDE1LDYgKzI0OTksNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMgogCW1vZGVzCQlNX1NDU0kKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI0NzIsNiArMjU1Nyw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAlzaXplCQkyCiAJbW9kZXMJCU1fU0NTSQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjQ5NCw2ICsyNTgwLDcgQEAKIAlhY2Nlc3NfbW9kZQlSTwogCXNpemUJCTgKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI1MTMsNiArMjYwMCw3IEBACiAJYWRkcmVzcwkJCTB4MDYwCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNTIzLDYgKzI2MTEsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fU0NTSQogCWNvdW50CQkxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNTQzLDYgKzI2MzIsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fU0NTSQogCWNvdW50CQkxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNTU3LDYgKzI2NDcsNyBAQAogCWZpZWxkCVBQUk9QVF9RQVMJMHgwNAogCWZpZWxkCVBQUk9QVF9EVAkweDAyCiAJZmllbGQJUFBST1BUX0lVVAkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNTczLDYgKzI2NjQsNyBAQAogCWZpZWxkCUVOQVVUT0FUTkkJMHgwNAogCWZpZWxkCUVOQVVUT0FUTk8JMHgwMgogCWZpZWxkCVdJREVYRkVSCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI1ODMsNiArMjY3NSw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCiAJY291bnQJCTcKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI2MDIsNiArMjY5NSw3IEBACiAJZmllbGQJREZGQUNUQ0xSCTB4MDQKIAlmaWVsZAlTSFZBTElEU1RESVMJMHgwMgogCWZpZWxkCUxTVFNHQ0xSRElTCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogY29uc3QgQUhEX0FOTkVYQ09MX1BFUl9ERVYwCTQKQEAgLTI2MzUsNiArMjcyOSw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCiAJY291bnQJCTMKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI2NDUsNiArMjc0MCw3IEBACiAJYWRkcmVzcwkJCTB4MDY3CiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNjcxLDYgKzI3NjcsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fU0NTSQogCWNvdW50CQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNzAyLDYgKzI3OTksNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjc4OSw2ICsyODg3LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTIKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fQ0NIQU4sIE1fU0NTSQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjgxNiw2ICsyOTE1LDcgQEAKIAlmaWVsZAlBVVNDQlBUUl9FTgkweDgwCiAJZmllbGQJU0NCUFRSX0FERFIJMHgzOAogCWZpZWxkCVNDQlBUUl9PRkYJMHgwNworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjgyNSw2ICsyOTI1LDcgQEAKIAlhZGRyZXNzCQkJMHgwQUMKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjgzNCw2ICsyOTM1LDcgQEAKIAlhZGRyZXNzCQkJMHgwQUMKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NDSEFOCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yODk5LDYgKzMwMDEsNyBAQAogCWFkZHJlc3MJCQkweDBCMAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yOTA4LDYgKzMwMTEsNyBAQAogCWFkZHJlc3MJCQkweDBCMAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0NIQU4KKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI5NTgsNiArMzA2Miw3IEBACiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCiAJY291bnQJCTIKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTI5NzQsNiArMzA3OSw3IEBACiAJZmllbGQJQlJERU4JCTB4MDQKIAlmaWVsZAlCUkRSVwkJMHgwMgogCWZpZWxkCUJSRFNUQgkJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjk4NCw2ICszMDkwLDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX1NDU0kKIAljb3VudAkJNAorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMjk5NSw2ICszMTAyLDcgQEAKIAlzaXplCQkyCiAJbW9kZXMJCU1fU0NTSQogCWNvdW50CQk0CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zMDExLDYgKzMxMTksNyBAQAogCWZpZWxkCVNFRUFSQkFDSwkweDA0CiAJZmllbGQJU0VFQlVTWQkJMHgwMgogCWZpZWxkCVNFRVNUQVJUCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTMwMzYsNiArMzE0NSw3IEBACiAJbWFzawlTRUVPUF9FV0RTCTB4NDAKIAlmaWVsZAlTRUVSU1QJCTB4MDIKIAlmaWVsZAlTRUVTVEFSVAkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIGNvbnN0IFNFRU9QX0VSQUxfQUREUgkweDgwCkBAIC0zMDUwLDYgKzMxNjAsNyBAQAogCWFkZHJlc3MJCQkweDBCRgogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fU0NTSQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzA2MSw2ICszMTcyLDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTIKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTMwODcsNiArMzE5OSw3IEBACiAJZmllbGQJREVTUURJUwkJMHgxMAogCWZpZWxkCVJDVlJPRkZTVERJUwkweDA0CiAJZmllbGQJWE1JVE9GRlNURElTCTB4MDIKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTMxMzIsNiArMzI0NSw3IEBACiAJYWRkcmVzcwkJCTB4MEM0CiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTMxNDQsNiArMzI1OCw3IEBACiAJY291bnQJCTEKIAlmaWVsZAlBVVRPSU5DRU4JMHg4MAogCWZpZWxkCURTUFNFTAkJMHgxRgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiBjb25zdCBOVU1EU1BTIDB4MTQKQEAgLTMxNTgsNiArMzI3Myw3IEBACiAJY291bnQJCTMKIAlmaWVsZAlBVVRPWEJDRElTCTB4ODAKIAlmaWVsZAlYTUlUTUFOVkFMCTB4M0YKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTMzMTYsNiArMzQzMiw3IEBACiAJY291bnQJCTIzCiAJZmllbGQJWkVSTwkJMHgwMgogCWZpZWxkCUNBUlJZCQkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zMzQ0LDYgKzM0NjEsNyBAQAogCWFkZHJlc3MJCQkweDBEQQogCWFjY2Vzc19tb2RlIAlSVwogCWNvdW50CQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zMzU1LDYgKzM0NzMsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMgogCWNvdW50CQk1CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zMzY0LDYgKzM0ODMsNyBAQAogCWFkZHJlc3MJCQkweDBFMAogCWFjY2Vzc19tb2RlIAlSVwogCWFjY3VtdWxhdG9yCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zMzgwLDYgKzM1MDAsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMgogCXNpbmRleAorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzM5MCw2ICszNTExLDcgQEAKIAlhZGRyZXNzCQkJMHgwRTQKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTIKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTM0MTUsNiArMzUzNyw3IEBACiAJYWRkcmVzcwkJCTB4MEU4CiAJYWNjZXNzX21vZGUgUk8KIAlhbGxvbmVzCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zNDI1LDYgKzM1NDgsNyBAQAogCWFkZHJlc3MJCQkweDBFQQogCWFjY2Vzc19tb2RlIFJPCiAJYWxsemVyb3MKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTM0MzUsNiArMzU1OSw3IEBACiAJYWRkcmVzcwkJCTB4MEVBCiAJYWNjZXNzX21vZGUgV08KIAlub25lCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zNDQ1LDYgKzM1NzAsNyBAQAogcmVnaXN0ZXIgU0lORElSCXsKIAlhZGRyZXNzCQkJMHgwRUMKIAlhY2Nlc3NfbW9kZSBSTworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzQ1NSw2ICszNTgxLDcgQEAKIHJlZ2lzdGVyIERJTkRJUgkgewogCWFkZHJlc3MJCQkweDBFRAogCWFjY2Vzc19tb2RlIFdPCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zNDc5LDYgKzM2MDYsNyBAQAogcmVnaXN0ZXIgU1RBQ0sgewogCWFkZHJlc3MJCQkweDBGMgogCWFjY2Vzc19tb2RlIFJXCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zNDkxLDYgKzM2MTksNyBAQAogCXNpemUJCTIKIAltb2RlcwkJTV9DRkcKIAljb3VudAkJMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzUwMyw2ICszNjMyLDcgQEAKIAlzaXplCQkyCiAJbW9kZXMJCU1fU0NTSQogCWNvdW50CQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0zNTE1LDYgKzM2NDUsNyBAQAogCXNpemUJCTIKIAltb2RlcwkJTV9DRkcKIAljb3VudAkJMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzU0MywxMiArMzY3NCwxNCBAQAogCW1vZGVzCTAsIDEsIDIsIDMKIAlSRUcwIHsKIAkJc2l6ZQkJMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJUkVHMSB7CiAJCXNpemUJCTIKIAl9CiAJUkVHX0lTUiB7CiAJCXNpemUJCTIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNHX1NUQVRFIHsKIAkJc2l6ZQkJMQpAQCAtMzU3Miw5ICszNzA1LDExIEBACiAJbW9kZXMJMCwgMSwgMiwgMwogCUxPTkdKTVBfQUREUiB7CiAJCXNpemUJCTIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCUFDQ1VNX1NBVkUgewogCQlzaXplCQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIH0KIApAQCAtMzU5MSwxOCArMzcyNiwyMiBAQAogCSAqLwogCVdBSVRJTkdfU0NCX1RBSUxTIHsKIAkJc2l6ZQkJMzIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVdBSVRJTkdfVElEX0hFQUQgewogCQlzaXplCQkyCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlXQUlUSU5HX1RJRF9UQUlMIHsKIAkJc2l6ZQkJMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBTQ0JJRCBvZiB0aGUgbmV4dCBTQ0IgaW4gdGhlIG5ldyBTQ0IgcXVldWUuCiAJICovCiAJTkVYVF9RVUVVRURfU0NCX0FERFIgewogCQlzaXplCQk0CisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAkvKgogCSAqIGhlYWQgb2YgbGlzdCBvZiBTQ0JzIHRoYXQgaGF2ZQpAQCAtMzYxMSw2ICszNzUwLDcgQEAKIAkgKi8KIAlDT01QTEVURV9TQ0JfSEVBRCB7CiAJCXNpemUJCTIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCS8qCiAJICogVGhlIGxpc3Qgb2YgY29tcGxldGVkIFNDQnMgaW4KQEAgLTM2MTgsNiArMzc1OCw3IEBACiAJICovCiAJQ09NUExFVEVfU0NCX0RNQUlOUFJPR19IRUFEIHsKIAkJc2l6ZQkJMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBoZWFkIG9mIGxpc3Qgb2YgU0NCcyB0aGF0IGhhdmUKQEAgLTM2MjYsNiArMzc2Nyw3IEBACiAJICovCiAJQ09NUExFVEVfRE1BX1NDQl9IRUFEIHsKIAkJc2l6ZQkJMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiB0YWlsIG9mIGxpc3Qgb2YgU0NCcyB0aGF0IGhhdmUKQEAgLTM2MzQsNiArMzc3Niw3IEBACiAJICovCiAJQ09NUExFVEVfRE1BX1NDQl9UQUlMIHsKIAkJc2l6ZQkJMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBoZWFkIG9mIGxpc3Qgb2YgU0NCcyB0aGF0IGhhdmUKQEAgLTM2NDMsNiArMzc4Niw3IEBACiAJICovCiAJQ09NUExFVEVfT05fUUZSRUVaRV9IRUFEIHsKIAkJc2l6ZQkJMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBDb3VudGluZyBzZW1hcGhvcmUgdG8gcHJldmVudCBuZXcgc2VsZWN0LW91dHMKQEAgLTM2NjcsNiArMzgxMSw3IEBACiAJICovCiAJTVNHX09VVCB7CiAJCXNpemUJCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCS8qIFBhcmFtZXRlcnMgZm9yIERNQSBMb2dpYyAqLwogCURNQVBBUkFNUyB7CkBAIC0zNjgyLDYgKzM4MjcsNyBAQAogCQlmaWVsZAlESVJFQ1RJT04JMHgwNAkvKiBTZXQgaW5kaWNhdGVzIFBDSS0+U0NTSSAqLwogCQlmaWVsZAlGSUZPRkxVU0gJMHgwMgogCQlmaWVsZAlGSUZPUkVTRVQJMHgwMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0VRX0ZMQUdTIHsKIAkJc2l6ZQkJMQpAQCAtMzcwMyw5ICszODQ5LDExIEBACiAJICovCiAJU0FWRURfU0NTSUlEIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0FWRURfTFVOIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBUaGUgbGFzdCBidXMgcGhhc2UgYXMgc2VlbiBieSB0aGUgc2VxdWVuY2VyLiAKQEAgLTM3MzMsNiArMzg4MSw3IEBACiAJICovCiAJUU9VVEZJRk9fRU5UUllfVkFMSURfVEFHIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBLZXJuZWwgYW5kIHNlcXVlbmNlciBvZmZzZXRzIGludG8gdGhlIHF1ZXVlIG9mCkBAIC0zNzQyLDEwICszODkxLDEyIEBACiAJS0VSTkVMX1RRSU5QT1MgewogCQlzaXplCQkxCiAJCWNvdW50CQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlUUUlOUE9TIHsKIAkJc2l6ZQkJMQogCQljb3VudAkJOAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBCYXNlIGFkZHJlc3Mgb2Ygb3VyIHNoYXJlZCBkYXRhIHdpdGggdGhlIGtlcm5lbCBkcml2ZXIgaW4gaG9zdApAQCAtMzc1NCw2ICszOTA1LDcgQEAKIAkgKi8KIAlTSEFSRURfREFUQV9BRERSIHsKIAkJc2l6ZQkJNAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBQb2ludGVyIHRvIGxvY2F0aW9uIGluIGhvc3QgbWVtb3J5IGZvciBuZXh0CkBAIC0zNzYxLDYgKzM5MTMsNyBAQAogCSAqLwogCVFPVVRGSUZPX05FWFRfQUREUiB7CiAJCXNpemUJCTQKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCUFSR18xIHsKIAkJc2l6ZQkJMQpAQCAtMzc3MywxMSArMzkyNiwxMyBAQAogCQltYXNrCUNPTlRfTVNHX0xPT1BfUkVBRAkweDAzCiAJCW1hc2sJQ09OVF9NU0dfTE9PUF9UQVJHCTB4MDIKIAkJYWxpYXMJUkVUVVJOXzEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCUFSR18yIHsKIAkJc2l6ZQkJMQogCQljb3VudAkJMQogCQlhbGlhcwlSRVRVUk5fMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAKIAkvKgpAQCAtMzc4NSw2ICszOTQwLDcgQEAKIAkgKi8KIAlMQVNUX01TRyB7CiAJCXNpemUJCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCiAJLyoKQEAgLTM4MDEsNiArMzk1Nyw3IEBACiAJCWZpZWxkCU1BTlVBTFAJCTB4MEMKIAkJZmllbGQJRU5BVVRPQVROUAkweDAyCiAJCWZpZWxkCUFMVFNUSU0JCTB4MDEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCiAJLyoKQEAgLTM4MDksNiArMzk2Niw3IEBACiAJSU5JVElBVE9SX1RBRyB7CiAJCXNpemUJCTEKIAkJY291bnQJCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCiAJU0VRX0ZMQUdTMiB7CkBAIC0zODIwLDYgKzM5NzgsNyBAQAogCiAJQUxMT0NGSUZPX1NDQlBUUiB7CiAJCXNpemUJCTIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCiAJLyoKQEAgLTM4MjksNiArMzk4OCw3IEBACiAJICovCiAJSU5UX0NPQUxFU0NJTkdfVElNRVIgewogCQlzaXplCQkyCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAogCS8qCkBAIC0zODM4LDYgKzM5OTgsNyBAQAogCSAqLwogCUlOVF9DT0FMRVNDSU5HX01BWENNRFMgewogCQlzaXplCQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAogCS8qCkBAIC0zODQ2LDYgKzQwMDcsNyBAQAogCSAqLwogCUlOVF9DT0FMRVNDSU5HX01JTkNNRFMgewogCQlzaXplCQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAogCS8qCkBAIC0zODUzLDYgKzQwMTUsNyBAQAogCSAqLwogCUNNRFNfUEVORElORyB7CiAJCXNpemUJCTIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCiAJLyoKQEAgLTM4NjAsNiArNDAyMyw3IEBACiAJICovCiAJSU5UX0NPQUxFU0NJTkdfQ01EQ09VTlQgewogCQlzaXplCQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAogCS8qCkBAIC0zODY4LDYgKzQwMzIsNyBAQAogCSAqLwogCUxPQ0FMX0hTX01BSUxCT1ggewogCQlzaXplCQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAkvKgogCSAqIFRhcmdldC1tb2RlIENEQiB0eXBlIHRvIENEQiBsZW5ndGggdGFibGUgdXNlZApAQCAtMzg3Niw2ICs0MDQxLDcgQEAKIAlDTURTSVpFX1RBQkxFIHsKIAkJc2l6ZQkJOAogCQljb3VudAkJOAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBXaGVuIGFuIFNDQiB3aXRoIHRoZSBNS19NRVNTQUdFIGZsYWcgaXMKQEAgLTM5MDgsMjUgKzQwNzQsMzEgQEAKIAkJc2l6ZQk0CiAJCWFsaWFzCVNDQl9DREJfU1RPUkUKIAkJYWxpYXMJU0NCX0hPU1RfQ0RCX1BUUgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1JFU0lEVUFMX1NHUFRSIHsKIAkJc2l6ZQk0CiAJCWZpZWxkCVNHX0FERFJfTUFTSwkJMHhmOAkvKiBJbiB0aGUgbGFzdCBieXRlICovCiAJCWZpZWxkCVNHX09WRVJSVU5fUkVTSUQJMHgwMgkvKiBJbiB0aGUgZmlyc3QgYnl0ZSAqLwogCQlmaWVsZAlTR19MSVNUX05VTEwJCTB4MDEJLyogSW4gdGhlIGZpcnN0IGJ5dGUgKi8KKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9TQ1NJX1NUQVRVUyB7CiAJCXNpemUJMQogCQlhbGlhcwlTQ0JfSE9TVF9DREJfTEVOCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlTQ0JfVEFSR0VUX1BIQVNFUyB7CiAJCXNpemUJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1RBUkdFVF9EQVRBX0RJUiB7CiAJCXNpemUJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1RBUkdFVF9JVEFHIHsKIAkJc2l6ZQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlTQ0JfU0VOU0VfQlVTQUREUiB7CiAJCS8qCkBAIC0zOTM2LDEwICs0MTA4LDEyIEBACiAJCSAqLwogCQlzaXplCTQKIAkJYWxpYXMJU0NCX05FWFRfQ09NUExFVEUKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9UQUcgewogCQlhbGlhcwlTQ0JfRklGT19VU0VfQ09VTlQKIAkJc2l6ZQkyCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlTQ0JfQ09OVFJPTCB7CiAJCXNpemUJMQpAQCAtMzk1OSw2ICs0MTMzLDcgQEAKIAlTQ0JfTFVOIHsKIAkJc2l6ZQkxCiAJCWZpZWxkCUxJRAkweGZmCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlTQ0JfVEFTS19BVFRSSUJVVEUgewogCQlzaXplCTEKQEAgLTM5NjcsMTYgKzQxNDIsMjAgQEAKIAkJICogaWdub3JlIHdpZGUgcmVzaWR1ZSBtZXNzYWdlIGhhbmRsaW5nLgogCQkgKi8KIAkJZmllbGQJU0NCX1hGRVJMRU5fT0RECTB4MDEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9DREJfTEVOIHsKIAkJc2l6ZQkxCiAJCWZpZWxkCVNDQl9DREJfTEVOX1BUUgkweDgwCS8qIENEQiBpbiBob3N0IG1lbW9yeSAqLworCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1RBU0tfTUFOQUdFTUVOVCB7CiAJCXNpemUJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX0RBVEFQVFIgewogCQlzaXplCTgKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9EQVRBQ05UIHsKIAkJLyoKQEAgLTM5ODYsMjIgKzQxNjUsMjcgQEAKIAkJc2l6ZQk0CiAJCWZpZWxkCVNHX0xBU1RfU0VHCQkweDgwCS8qIEluIHRoZSBmb3VydGggYnl0ZSAqLwogCQlmaWVsZAlTR19ISUdIX0FERFJfQklUUwkweDdGCS8qIEluIHRoZSBmb3VydGggYnl0ZSAqLworCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1NHUFRSIHsKIAkJc2l6ZQk0CiAJCWZpZWxkCVNHX1NUQVRVU19WQUxJRAkweDA0CS8qIEluIHRoZSBmaXJzdCBieXRlICovCiAJCWZpZWxkCVNHX0ZVTExfUkVTSUQJMHgwMgkvKiBJbiB0aGUgZmlyc3QgYnl0ZSAqLwogCQlmaWVsZAlTR19MSVNUX05VTEwJMHgwMQkvKiBJbiB0aGUgZmlyc3QgYnl0ZSAqLworCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX0JVU0FERFIgewogCQlzaXplCTQKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9ORVhUIHsKIAkJYWxpYXMJU0NCX05FWFRfU0NCX0JVU0FERFIKIAkJc2l6ZQkyCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlTQ0JfTkVYVDIgewogCQlzaXplCTIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9TUEFSRSB7CiAJCXNpemUJOApAQCAtNDAwOSw2ICs0MTkzLDcgQEAKIAl9CiAJU0NCX0RJU0NPTk5FQ1RFRF9MSVNUUyB7CiAJCXNpemUJOAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKaW5kZXggNTU1MDhiMC4uYmRhZDU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKQEAgLTI0NzIsOCArMjQ3Miw2IEBACiAJCWlmICgoYWhkLT5idWdzICYgQUhEX0NMUkxRT19BVVRPQ0xSX0JVRykgIT0gMCkKIAkJCWFoZF9vdXRiKGFoZCwgQ0xSTFFPSU5UMSwgMCk7CiAJfSBlbHNlIGlmICgoc3RhdHVzICYgU0VMVE8pICE9IDApIHsKLQkJdV9pbnQgIHNjYmlkOwotCiAJCS8qIFN0b3AgdGhlIHNlbGVjdGlvbiAqLwogCQlhaGRfb3V0YihhaGQsIFNDU0lTRVEwLCAwKTsKIApAQCAtMjU4Myw5ICsyNTgxLDYgQEAKIAkJY2FzZSBCVVNGUkVFX0RGRjA6CiAJCWNhc2UgQlVTRlJFRV9ERkYxOgogCQl7Ci0JCQl1X2ludAlzY2JpZDsKLQkJCXN0cnVjdAlzY2IgKnNjYjsKLQogCQkJbW9kZSA9IGJ1c2ZyZWV0aW1lID09IEJVU0ZSRUVfREZGMAogCQkJICAgICA/IEFIRF9NT0RFX0RGRjAgOiBBSERfTU9ERV9ERkYxOwogCQkJYWhkX3NldF9tb2RlcyhhaGQsIG1vZGUsIG1vZGUpOwpAQCAtMzY4OSw3ICszNjg0LDcgQEAKICAqIGJ5IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGJ1cyBjb25uZWN0aXZpdHkgb2YgYW5kIHN5bmMgc2V0dGluZ3MgZm9yCiAgKiB0aGUgdGFyZ2V0LgogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX2RldmxpbWl0ZWRfc3luY3JhdGUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJc3RydWN0IGFoZF9pbml0aWF0b3JfdGluZm8gKnRpbmZvLAogCQkJdV9pbnQgKnBlcmlvZCwgdV9pbnQgKnBwcl9vcHRpb25zLCByb2xlX3Qgcm9sZSkKQEAgLTQxMzYsNyArNDEzMSw3IEBACiAKIAkJCS8qCiAJCQkgKiBIYXJwb29uMkEgYXNzdW1lZCB0aGF0IHRoZXJlIHdvdWxkIGJlIGEKLQkJCSAqIGZhbGxiYWNrIHJhdGUgYmV0d2VlbiAxNjBNSHogYW5kIDgwTWh6LAorCQkJICogZmFsbGJhY2sgcmF0ZSBiZXR3ZWVuIDE2ME1IeiBhbmQgODBNSHosCiAJCQkgKiBzbyA3IGlzIHVzZWQgYXMgdGhlIHBlcmlvZCBmYWN0b3IgcmF0aGVyCiAJCQkgKiB0aGFuIDggZm9yIDE2ME1Iei4KIAkJCSAqLwpAQCAtODcwOCw3ICs4NzAzLDcgQEAKIGludAogYWhkX3Jlc2V0X2NoYW5uZWwoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBjaGFyIGNoYW5uZWwsIGludCBpbml0aWF0ZV9yZXNldCkKIHsKLQlzdHJ1Y3QJYWhkX2RldmluZm8gZGV2aW5mbzsKKwlzdHJ1Y3QJYWhkX2RldmluZm8gY2FtaW5mbzsKIAl1X2ludAlpbml0aWF0b3I7CiAJdV9pbnQJdGFyZ2V0OwogCXVfaW50CW1heF9zY3NpaWQ7CkBAIC04NzI5LDcgKzg3MjQsNyBAQAogCiAJYWhkLT5wZW5kaW5nX2RldmljZSA9IE5VTEw7CiAKLQlhaGRfY29tcGlsZV9kZXZpbmZvKCZkZXZpbmZvLAorCWFoZF9jb21waWxlX2RldmluZm8oJmNhbWluZm8sCiAJCQkgICAgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKIAkJCSAgICBDQU1fVEFSR0VUX1dJTERDQVJELAogCQkJICAgIENBTV9MVU5fV0lMRENBUkQsCkBAIC04ODY4LDcgKzg4NjMsNyBAQAogCX0KIAogCS8qIE5vdGlmeSB0aGUgWFBUIHRoYXQgYSBidXMgcmVzZXQgb2NjdXJyZWQgKi8KLQlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKKwlhaGRfc2VuZF9hc3luYyhhaGQsIGNhbWluZm8uY2hhbm5lbCwgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKIAkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX0JVU19SRVNFVCk7CiAKIAlhaGRfcmVzdGFydChhaGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wY2kuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcGNpLmMKaW5kZXggYzI1YjZhZC4uYTczNGQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3BjaS5jCkBAIC0yMjMsMTAgKzIyMywxMCBAQAogCSJQQ0kgYnVzIG1vZGUgdW5rbm93biIsCiAJIlBDSSBidXMgbW9kZSB1bmtub3duIiwKIAkiUENJIGJ1cyBtb2RlIHVua25vd24iLAotCSJQQ0ktWCAxMDEtMTMzTWh6IiwKLQkiUENJLVggNjctMTAwTWh6IiwKLQkiUENJLVggNTAtNjZNaHoiLAotCSJQQ0kgMzMgb3IgNjZNaHoiCisJIlBDSS1YIDEwMS0xMzNNSHoiLAorCSJQQ0ktWCA2Ny0xMDBNSHoiLAorCSJQQ0ktWCA1MC02Nk1IeiIsCisJIlBDSSAzMyBvciA2Nk1IeiIKIH07CiAKICNkZWZpbmUJCVRFU1RNT0RFCTB4MDAwMDA4MDB1bApAQCAtMzM3LDggKzMzNyw2IEBACiAJICogNjRiaXQgYnVzIChQQ0k2NEJJVCBzZXQgaW4gZGV2Y29uZmlnKS4KIAkgKi8KIAlpZiAoKGFoZC0+ZmxhZ3MgJiAoQUhEXzM5QklUX0FERFJFU1NJTkd8QUhEXzY0QklUX0FERFJFU1NJTkcpKSAhPSAwKSB7Ci0JCXVpbnQzMl90IGRldmNvbmZpZzsKLQogCQlpZiAoYm9vdHZlcmJvc2UpCiAJCQlwcmludGYoIiVzOiBFbmFibGluZyAzOUJpdCBBZGRyZXNzaW5nXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwpAQCAtNDgzLDggKzQ4MSw2IEBACiAJCWdvdG8gZmFpbDsKIAogCWlmICgoYWhkX2luYihhaGQsIElOVFNUQVQpICYgUENJSU5UKSAhPSAwKSB7Ci0JCXVfaW50IHRhcmdwY2lzdGF0OwotCiAJCWFoZF9zZXRfbW9kZXMoYWhkLCBBSERfTU9ERV9DRkcsIEFIRF9NT0RFX0NGRyk7CiAJCXRhcmdwY2lzdGF0ID0gYWhkX2luYihhaGQsIFRBUkdQQ0lTVEFUKTsKIAkJaWYgKCh0YXJncGNpc3RhdCAmIFNUQSkgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcmVnLmhfc2hpcHBlZCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcmVnLmhfc2hpcHBlZAppbmRleCBjMjFjZWFiLi5jZGNlYWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3JlZy5oX3NoaXBwZWQKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9yZWcuaF9zaGlwcGVkCkBAIC0zNCwxMyArMzQsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2NscmludF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9jbHJpbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNMUklOVCIsIDB4MDMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2Vycm9yX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2Vycm9yX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC00OCwyMCArNDEsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2hjbnRybF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9oY250cmxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhDTlRSTCIsIDB4MDUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2huc2NiX3FvZmZfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfaG5zY2JfcW9mZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSE5TQ0JfUU9GRiIsIDB4MDYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2hlc2NiX3FvZmZfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfaGVzY2JfcW9mZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtOTcsMTMgKzc2LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbnNjYl9xb2ZmX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3Nuc2NiX3FvZmZfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNOU0NCX1FPRkYiLCAweDEwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zZXNjYl9xb2ZmX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3Nlc2NiX3FvZmZfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTExMSwyMCArODMsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3Nkc2NiX3FvZmZfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2RzY2JfcW9mZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0RTQ0JfUU9GRiIsIDB4MTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3FvZmZfY3Rsc3RhX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3FvZmZfY3Rsc3RhX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJRT0ZGX0NUTFNUQSIsIDB4MTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2ludGN0bF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9pbnRjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTEzOSwxMyArOTcsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2RzY29tbWFuZDBfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZHNjb21tYW5kMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRFNDT01NQU5EMCIsIDB4MTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2Rmc3RhdHVzX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2Rmc3RhdHVzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xNjAsMTMgKzExMSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2dfY2FjaGVfcHJlX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NnX2NhY2hlX3ByZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dfQ0FDSEVfUFJFIiwgMHgxYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfbHFpbl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9scWluX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0yOTMsMTMgKzIzNyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc3hmcmN0bDFfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc3hmcmN0bDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNYRlJDVEwxIiwgMHgzZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfZGZmc3RhdF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9kZmZzdGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0zMTQsMTMgKzI1MSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NzaXNpZ29fcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2NzaXNpZ29fcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lTSUdPIiwgMHg0MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2NzaXNpZ2lfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2NzaXNpZ2lfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTM2MywxMyArMjkzLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9vcHRpb25tb2RlX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX29wdGlvbm1vZGVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk9QVElPTk1PREUiLCAweDRhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zYmxrY3RsX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3NibGtjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTM5MSwxMyArMzE0LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9jbHJzaW50MF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9jbHJzaW50MF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0xSU0lOVDAiLCAweDRiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zc3RhdDFfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc3N0YXQxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC00MDUsMTMgKzMyMSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY2xyc2ludDFfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfY2xyc2ludDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNMUlNJTlQxIiwgMHg0YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc3N0YXQyX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3NzdGF0Ml9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNDYxLDEzICszNzAsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2xxaW1vZGUwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2xxaW1vZGUwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMUUlNT0RFMCIsIDB4NTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2NscmxxaWludDBfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfY2xybHFpaW50MF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNDc1LDYgKzM3NywxMyBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCithaGRfcmVnX3ByaW50X3QgYWhkX2xxaW1vZGUwX3ByaW50OworI2Vsc2UKKyNkZWZpbmUgYWhkX2xxaW1vZGUwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMUUlNT0RFMCIsIDB4NTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQorI2VuZGlmCisKKyNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2xxaW1vZGUxX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2xxaW1vZGUxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC02MjksMTMgKzUzOCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2VxaW1vZGVfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2VxaW1vZGVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFUUlNT0RFIiwgMHg1YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfY3VycnNjYl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9jdXJyc2NiX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC02NDMsNiArNTQ1LDEzIEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKK2FoZF9yZWdfcHJpbnRfdCBhaGRfc2VxaW1vZGVfcHJpbnQ7CisjZWxzZQorI2RlZmluZSBhaGRfc2VxaW1vZGVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKKyAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFUUlNT0RFIiwgMHg1YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCisjZW5kaWYKKworI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfbWRmZnN0YXRfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfbWRmZnN0YXRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTY1NywxMyArNTY2LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zaGFkZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2hhZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTSEFERFIiLCAweDYwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9uZWdvYWRkcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9uZWdvYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNzQ4LDE3ICs2NTAsMTAgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9oYWRkcl9wcmludDsKK2FoZF9yZWdfcHJpbnRfdCBhaGRfc2NiaGFkZHJfcHJpbnQ7CiAjZWxzZQotI2RlZmluZSBhaGRfaGFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhBRERSIiwgMHg3MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfaGNudF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9oY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIQ05UIiwgMHg3OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCisjZGVmaW5lIGFoZF9zY2JoYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAorICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCSEFERFIiLCAweDdjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwpAQCAtNzY5LDIwICs2NjQsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NjYmhhZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NjYmhhZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JIQUREUiIsIDB4N2MsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NnaGNudF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zZ2hjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNHSENOVCIsIDB4ODQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NjYmhjbnRfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2NiaGNudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNzkwLDEwICs2NzEsMTAgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9kZmZfdGhyc2hfcHJpbnQ7CithaGRfcmVnX3ByaW50X3QgYWhkX3NnaGNudF9wcmludDsKICNlbHNlCi0jZGVmaW5lIGFoZF9kZmZfdGhyc2hfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGRl9USFJTSCIsIDB4ODgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQorI2RlZmluZSBhaGRfc2doY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTR0hDTlQiLCAweDg0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwpAQCAtODY3LDEzICs3NDgsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NjYnB0cl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY2JwdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQlBUUiIsIDB4YTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NjYmF1dG9wdHJfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2NiYXV0b3B0cl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtODgxLDEzICs3NTUsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2Njc2dhZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2Njc2dhZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NHQUREUiIsIDB4YWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2Njc2NiYWRkcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9jY3NjYmFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTkwOSwxMyArNzc2LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9jY3NncmFtX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2Njc2dyYW1fcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDU0dSQU0iLCAweGIwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9jY3NjYnJhbV9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9jY3NjYnJhbV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtOTMwLDEzICs3OTAsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2JyZGN0bF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9icmRjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJSRENUTCIsIDB4YjksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NlZWFkcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zZWVhZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTk3MiwxMyArODI1LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9kZmRhdF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9kZmRhdF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZEQVQiLCAweGM0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9kc3BzZWxlY3RfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfZHNwc2VsZWN0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xMDAwLDEzICs4NDYsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2ZsYWdzX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2ZsYWdzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGTEFHUyIsIDB4ZDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NlcWludGN0bF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zZXFpbnRjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTEwMTQsMTMgKzg1Myw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2VxcmFtX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NlcXJhbV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0VRUkFNIiwgMHhkYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfcHJnbWNudF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9wcmdtY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xMDI4LDQxICs4NjAsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2FjY3VtX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2FjY3VtX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBQ0NVTSIsIDB4ZTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NpbmRleF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zaW5kZXhfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNJTkRFWCIsIDB4ZTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2RpbmRleF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9kaW5kZXhfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRJTkRFWCIsIDB4ZTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2FsbG9uZXNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfYWxsb25lc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQUxMT05FUyIsIDB4ZTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2FsbHplcm9zX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2FsbHplcm9zX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTExaRVJPUyIsIDB4ZWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX25vbmVfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfbm9uZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTA3MCwyNyArODY3LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zaW5kaXJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2luZGlyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTSU5ESVIiLCAweGVjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9kaW5kaXJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZGluZGlyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJESU5ESVIiLCAweGVkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zdGFja19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zdGFja19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU1RBQ0siLCAweGYyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9pbnR2ZWMxX2FkZHJfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfaW50dmVjMV9hZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xMTI2LDEzICs5MDIsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NyYW1fYmFzZV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zcmFtX2Jhc2VfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNSQU1fQkFTRSIsIDB4MTAwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF93YWl0aW5nX3NjYl90YWlsc19wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF93YWl0aW5nX3NjYl90YWlsc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTE0MCw2ICs5MDksMTMgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUworYWhkX3JlZ19wcmludF90IGFoZF9zcmFtX2Jhc2VfcHJpbnQ7CisjZWxzZQorI2RlZmluZSBhaGRfc3JhbV9iYXNlX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTUkFNX0JBU0UiLCAweDEwMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCisjZW5kaWYKKworI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfd2FpdGluZ190aWRfaGVhZF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF93YWl0aW5nX3RpZF9oZWFkX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xMjI0LDEzICsxMDAwLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9kbWFwYXJhbXNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZG1hcGFyYW1zX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJETUFQQVJBTVMiLCAweDEzOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2VxX2ZsYWdzX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3NlcV9mbGFnc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTIzOCwyMCArMTAwNyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2F2ZWRfc2NzaWlkX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NhdmVkX3Njc2lpZF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0FWRURfU0NTSUlEIiwgMHgxM2EsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NhdmVkX2x1bl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zYXZlZF9sdW5fcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNBVkVEX0xVTiIsIDB4MTNiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9sYXN0cGhhc2VfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfbGFzdHBoYXNlX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xMjczLDIwICsxMDI4LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF90cWlucG9zX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3RxaW5wb3NfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlRRSU5QT1MiLCAweDEzZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2hhcmVkX2RhdGFfYWRkcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zaGFyZWRfZGF0YV9hZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTSEFSRURfREFUQV9BRERSIiwgMHgxNDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3FvdXRmaWZvX25leHRfYWRkcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9xb3V0Zmlmb19uZXh0X2FkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTEyOTQsMjAgKzEwMzUsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2FyZ18xX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2FyZ18xX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBUkdfMSIsIDB4MTQ4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9hcmdfMl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9hcmdfMl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQVJHXzIiLCAweDE0OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfbGFzdF9tc2dfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfbGFzdF9tc2dfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE0MDYsMTMgKzExMzMsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NjYl9yZXNpZHVhbF9kYXRhY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NjYl9yZXNpZHVhbF9kYXRhY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfUkVTSURVQUxfREFUQUNOVCIsIDB4MTgwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zY2JfYmFzZV9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zY2JfYmFzZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTQyMCwxNyArMTE0MCwxMCBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NjYl9yZXNpZHVhbF9zZ3B0cl9wcmludDsKK2FoZF9yZWdfcHJpbnRfdCBhaGRfc2NiX3Jlc2lkdWFsX2RhdGFjbnRfcHJpbnQ7CiAjZWxzZQotI2RlZmluZSBhaGRfc2NiX3Jlc2lkdWFsX3NncHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfUkVTSURVQUxfU0dQVFIiLCAweDE4NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiX3Njc2lfc3RhdHVzX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NjYl9zY3NpX3N0YXR1c19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1NDU0lfU1RBVFVTIiwgMHgxODgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQorI2RlZmluZSBhaGRfc2NiX3Jlc2lkdWFsX2RhdGFjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKKyAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9SRVNJRFVBTF9EQVRBQ05UIiwgMHgxODAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCkBAIC0xNDc2LDEzICsxMTg5LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zY2JfY2RiX2xlbl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY2JfY2RiX2xlbl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX0NEQl9MRU4iLCAweDE5NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiX3Rhc2tfbWFuYWdlbWVudF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zY2JfdGFza19tYW5hZ2VtZW50X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xNTE4LDEzICsxMjI0LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zY2JfbmV4dF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY2JfbmV4dF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX05FWFQiLCAweDFhYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiX25leHQyX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3NjYl9uZXh0Ml9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTcxNywxMCArMTQxNiwxMCBAQAogCiAjZGVmaW5lCVNHX0NBQ0hFX1BSRSAgICAJCTB4MWIKIAotI2RlZmluZQlUWVBFUFRSICAgICAgICAgCQkweDIwCi0KICNkZWZpbmUJTFFJTiAgICAgICAgICAgIAkJMHgyMAogCisjZGVmaW5lCVRZUEVQVFIgICAgICAgICAJCTB4MjAKKwogI2RlZmluZQlUQUdQVFIgICAgICAgICAgCQkweDIxCiAKICNkZWZpbmUJTFVOUFRSICAgICAgICAgIAkJMHgyMgpAQCAtMTc4MCw2ICsxNDc5LDE0IEBACiAjZGVmaW5lCQlTSU5HTEVDTUQgICAgICAgCTB4MDIKICNkZWZpbmUJCUFCT1JUUEVORElORyAgICAJMHgwMQogCisjZGVmaW5lCVNDU0JJU1QwICAgICAgICAJCTB4MzkKKyNkZWZpbmUJCUdTQklTVEVSUiAgICAgICAJMHg0MAorI2RlZmluZQkJR1NCSVNURE9ORSAgICAgIAkweDIwCisjZGVmaW5lCQlHU0JJU1RSVU4gICAgICAgCTB4MTAKKyNkZWZpbmUJCU9TQklTVEVSUiAgICAgICAJMHgwNAorI2RlZmluZQkJT1NCSVNURE9ORSAgICAgIAkweDAyCisjZGVmaW5lCQlPU0JJU1RSVU4gICAgICAgCTB4MDEKKwogI2RlZmluZQlMUUNUTDIgICAgICAgICAgCQkweDM5CiAjZGVmaW5lCQlMUUlSRVRSWSAgICAgICAgCTB4ODAKICNkZWZpbmUJCUxRSUNPTlRJTlVFICAgICAJMHg0MApAQCAtMTc5MCwxMyArMTQ5NywxMCBAQAogI2RlZmluZQkJTFFPVE9JRExFICAgICAgIAkweDAyCiAjZGVmaW5lCQlMUU9QQVVTRSAgICAgICAgCTB4MDEKIAotI2RlZmluZQlTQ1NCSVNUMCAgICAgICAgCQkweDM5Ci0jZGVmaW5lCQlHU0JJU1RFUlIgICAgICAgCTB4NDAKLSNkZWZpbmUJCUdTQklTVERPTkUgICAgICAJMHgyMAotI2RlZmluZQkJR1NCSVNUUlVOICAgICAgIAkweDEwCi0jZGVmaW5lCQlPU0JJU1RFUlIgICAgICAgCTB4MDQKLSNkZWZpbmUJCU9TQklTVERPTkUgICAgICAJMHgwMgotI2RlZmluZQkJT1NCSVNUUlVOICAgICAgIAkweDAxCisjZGVmaW5lCVNDU0JJU1QxICAgICAgICAJCTB4M2EKKyNkZWZpbmUJCU5UQklTVEVSUiAgICAgICAJMHgwNAorI2RlZmluZQkJTlRCSVNURE9ORSAgICAgIAkweDAyCisjZGVmaW5lCQlOVEJJU1RSVU4gICAgICAgCTB4MDEKIAogI2RlZmluZQlTQ1NJU0VRMCAgICAgICAgCQkweDNhCiAjZGVmaW5lCQlURU1PREVPICAgICAgICAgCTB4ODAKQEAgLTE4MDUsMTUgKzE1MDksOCBAQAogI2RlZmluZQkJRk9SQ0VCVVNGUkVFICAgIAkweDEwCiAjZGVmaW5lCQlTQ1NJUlNUTyAgICAgICAgCTB4MDEKIAotI2RlZmluZQlTQ1NCSVNUMSAgICAgICAgCQkweDNhCi0jZGVmaW5lCQlOVEJJU1RFUlIgICAgICAgCTB4MDQKLSNkZWZpbmUJCU5UQklTVERPTkUgICAgICAJMHgwMgotI2RlZmluZQkJTlRCSVNUUlVOICAgICAgIAkweDAxCi0KICNkZWZpbmUJU0NTSVNFUTEgICAgICAgIAkJMHgzYgogCi0jZGVmaW5lCUJVU0lOSVRJRCAgICAgICAJCTB4M2MKLQogI2RlZmluZQlTWEZSQ1RMMCAgICAgICAgCQkweDNjCiAjZGVmaW5lCQlERk9OICAgICAgICAgICAgCTB4ODAKICNkZWZpbmUJCURGUEVYUCAgICAgICAgICAJMHg0MApAQCAtMTgyMiw2ICsxNTE5LDggQEAKIAogI2RlZmluZQlETENPVU5UICAgICAgICAgCQkweDNjCiAKKyNkZWZpbmUJQlVTSU5JVElEICAgICAgIAkJMHgzYworCiAjZGVmaW5lCVNYRlJDVEwxICAgICAgICAJCTB4M2QKICNkZWZpbmUJCUJJVEJVQ0tFVCAgICAgICAJMHg4MAogI2RlZmluZQkJRU5TQUNISyAgICAgICAgIAkweDQwCkBAIC0xODQ2LDggKzE1NDUsNiBAQAogI2RlZmluZQkJQ1VSUkZJRk9fMSAgICAgIAkweDAxCiAjZGVmaW5lCQlDVVJSRklGT18wICAgICAgCTB4MDAKIAotI2RlZmluZQlNVUxUQVJHSUQgICAgICAgCQkweDQwCi0KICNkZWZpbmUJU0NTSVNJR08gICAgICAgIAkJMHg0MAogI2RlZmluZQkJQ0RPICAgICAgICAgICAgIAkweDgwCiAjZGVmaW5lCQlJT08gICAgICAgICAgICAgCTB4NDAKQEAgLTE4NTgsNiArMTU1NSw4IEBACiAjZGVmaW5lCQlSRVFPICAgICAgICAgICAgCTB4MDIKICNkZWZpbmUJCUFDS08gICAgICAgICAgICAJMHgwMQogCisjZGVmaW5lCU1VTFRBUkdJRCAgICAgICAJCTB4NDAKKwogI2RlZmluZQlTQ1NJU0lHSSAgICAgICAgCQkweDQxCiAjZGVmaW5lCQlBVE5JICAgICAgICAgICAgCTB4MTAKICNkZWZpbmUJCVNFTEkgICAgICAgICAgICAJMHgwOApAQCAtMTkwNCw2ICsxNjAzLDE1IEBACiAjZGVmaW5lCQlFTkFCMjAgICAgICAgICAgCTB4MDQKICNkZWZpbmUJCVNFTFdJREUgICAgICAgICAJMHgwMgogCisjZGVmaW5lCUNMUlNJTlQwICAgICAgICAJCTB4NGIKKyNkZWZpbmUJCUNMUlNFTERPICAgICAgICAJMHg0MAorI2RlZmluZQkJQ0xSU0VMREkgICAgICAgIAkweDIwCisjZGVmaW5lCQlDTFJTRUxJTkdPICAgICAgCTB4MTAKKyNkZWZpbmUJCUNMUklPRVJSICAgICAgICAJMHgwOAorI2RlZmluZQkJQ0xST1ZFUlJVTiAgICAgIAkweDA0CisjZGVmaW5lCQlDTFJTUElPUkRZICAgICAgCTB4MDIKKyNkZWZpbmUJCUNMUkFSQkRPICAgICAgICAJMHgwMQorCiAjZGVmaW5lCVNTVEFUMCAgICAgICAgICAJCTB4NGIKICNkZWZpbmUJCVRBUkdFVCAgICAgICAgICAJMHg4MAogI2RlZmluZQkJU0VMRE8gICAgICAgICAgIAkweDQwCkBAIC0xOTIzLDE0ICsxNjMxLDE0IEBACiAjZGVmaW5lCQlFTlNQSU9SRFkgICAgICAgCTB4MDIKICNkZWZpbmUJCUVOQVJCRE8gICAgICAgICAJMHgwMQogCi0jZGVmaW5lCUNMUlNJTlQwICAgICAgICAJCTB4NGIKLSNkZWZpbmUJCUNMUlNFTERPICAgICAgICAJMHg0MAotI2RlZmluZQkJQ0xSU0VMREkgICAgICAgIAkweDIwCi0jZGVmaW5lCQlDTFJTRUxJTkdPICAgICAgCTB4MTAKLSNkZWZpbmUJCUNMUklPRVJSICAgICAgICAJMHgwOAotI2RlZmluZQkJQ0xST1ZFUlJVTiAgICAgIAkweDA0Ci0jZGVmaW5lCQlDTFJTUElPUkRZICAgICAgCTB4MDIKLSNkZWZpbmUJCUNMUkFSQkRPICAgICAgICAJMHgwMQorI2RlZmluZQlDTFJTSU5UMSAgICAgICAgCQkweDRjCisjZGVmaW5lCQlDTFJTRUxUSU1FTyAgICAgCTB4ODAKKyNkZWZpbmUJCUNMUkFUTk8gICAgICAgICAJMHg0MAorI2RlZmluZQkJQ0xSU0NTSVJTVEkgICAgIAkweDIwCisjZGVmaW5lCQlDTFJCVVNGUkVFICAgICAgCTB4MDgKKyNkZWZpbmUJCUNMUlNDU0lQRVJSICAgICAJMHgwNAorI2RlZmluZQkJQ0xSU1RSQjJGQVNUICAgIAkweDAyCisjZGVmaW5lCQlDTFJSRVFJTklUICAgICAgCTB4MDEKIAogI2RlZmluZQlTU1RBVDEgICAgICAgICAgCQkweDRjCiAjZGVmaW5lCQlTRUxUTyAgICAgICAgICAgCTB4ODAKQEAgLTE5NDIsMTUgKzE2NTAsNiBAQAogI2RlZmluZQkJU1RSQjJGQVNUICAgICAgIAkweDAyCiAjZGVmaW5lCQlSRVFJTklUICAgICAgICAgCTB4MDEKIAotI2RlZmluZQlDTFJTSU5UMSAgICAgICAgCQkweDRjCi0jZGVmaW5lCQlDTFJTRUxUSU1FTyAgICAgCTB4ODAKLSNkZWZpbmUJCUNMUkFUTk8gICAgICAgICAJMHg0MAotI2RlZmluZQkJQ0xSU0NTSVJTVEkgICAgIAkweDIwCi0jZGVmaW5lCQlDTFJCVVNGUkVFICAgICAgCTB4MDgKLSNkZWZpbmUJCUNMUlNDU0lQRVJSICAgICAJMHgwNAotI2RlZmluZQkJQ0xSU1RSQjJGQVNUICAgIAkweDAyCi0jZGVmaW5lCQlDTFJSRVFJTklUICAgICAgCTB4MDEKLQogI2RlZmluZQlTU1RBVDIgICAgICAgICAgCQkweDRkCiAjZGVmaW5lCQlCVVNGUkVFVElNRSAgICAgCTB4YzAKICNkZWZpbmUJCU5PTlBBQ0tSRVEgICAgICAJMHgyMApAQCAtMTk5OCwxNCArMTY5Nyw2IEBACiAjZGVmaW5lCQlMUUlBVE5MUSAgICAgICAgCTB4MDIKICNkZWZpbmUJCUxRSUFUTkNNRCAgICAgICAJMHgwMQogCi0jZGVmaW5lCUxRSU1PREUwICAgICAgICAJCTB4NTAKLSNkZWZpbmUJCUVOTFFJQVROUUFTSyAgICAJMHgyMAotI2RlZmluZQkJRU5MUUlDUkNUMSAgICAgIAkweDEwCi0jZGVmaW5lCQlFTkxRSUNSQ1QyICAgICAgCTB4MDgKLSNkZWZpbmUJCUVOTFFJQkFETFFUICAgICAJMHgwNAotI2RlZmluZQkJRU5MUUlBVE5MUSAgICAgIAkweDAyCi0jZGVmaW5lCQlFTkxRSUFUTkNNRCAgICAgCTB4MDEKLQogI2RlZmluZQlDTFJMUUlJTlQwICAgICAgCQkweDUwCiAjZGVmaW5lCQlDTFJMUUlBVE5RQVMgICAgCTB4MjAKICNkZWZpbmUJCUNMUkxRSUNSQ1QxICAgICAJMHgxMApAQCAtMjAxNCw2ICsxNzA1LDE0IEBACiAjZGVmaW5lCQlDTFJMUUlBVE5MUSAgICAgCTB4MDIKICNkZWZpbmUJCUNMUkxRSUFUTkNNRCAgICAJMHgwMQogCisjZGVmaW5lCUxRSU1PREUwICAgICAgICAJCTB4NTAKKyNkZWZpbmUJCUVOTFFJQVROUUFTSyAgICAJMHgyMAorI2RlZmluZQkJRU5MUUlDUkNUMSAgICAgIAkweDEwCisjZGVmaW5lCQlFTkxRSUNSQ1QyICAgICAgCTB4MDgKKyNkZWZpbmUJCUVOTFFJQkFETFFUICAgICAJMHgwNAorI2RlZmluZQkJRU5MUUlBVE5MUSAgICAgIAkweDAyCisjZGVmaW5lCQlFTkxRSUFUTkNNRCAgICAgCTB4MDEKKwogI2RlZmluZQlMUUlNT0RFMSAgICAgICAgCQkweDUxCiAjZGVmaW5lCQlFTkxRSVBIQVNFX0xRICAgCTB4ODAKICNkZWZpbmUJCUVOTFFJUEhBU0VfTkxRICAJMHg0MApAQCAtMjE2MCw2ICsxODU5LDggQEAKICNkZWZpbmUJCUNGRzRJQ01EICAgICAgICAJMHgwMgogI2RlZmluZQkJQ0ZHNFRDTUQgICAgICAgIAkweDAxCiAKKyNkZWZpbmUJQ1VSUlNDQiAgICAgICAgIAkJMHg1YworCiAjZGVmaW5lCVNFUUlNT0RFICAgICAgICAJCTB4NWMKICNkZWZpbmUJCUVOQ1RYVERPTkUgICAgICAJMHg0MAogI2RlZmluZQkJRU5TQVZFUFRSUyAgICAgIAkweDIwCkBAIC0yMTY5LDggKzE4NzAsNiBAQAogI2RlZmluZQkJRU5DRkc0SUNNRCAgICAgIAkweDAyCiAjZGVmaW5lCQlFTkNGRzRUQ01EICAgICAgCTB4MDEKIAotI2RlZmluZQlDVVJSU0NCICAgICAgICAgCQkweDVjCi0KICNkZWZpbmUJTURGRlNUQVQgICAgICAgIAkJMHg1ZAogI2RlZmluZQkJU0hDTlRORUdBVElWRSAgIAkweDQwCiAjZGVmaW5lCQlTSENOVE1JTlVTMSAgICAgCTB4MjAKQEAgLTIxODUsMjkgKzE4ODQsMjkgQEAKIAogI2RlZmluZQlERkZUQUcgICAgICAgICAgCQkweDVlCiAKKyNkZWZpbmUJTEFTVFNDQiAgICAgICAgIAkJMHg1ZQorCiAjZGVmaW5lCVNDU0lURVNUICAgICAgICAJCTB4NWUKICNkZWZpbmUJCUNOVFJURVNUICAgICAgICAJMHgwOAogI2RlZmluZQkJU0VMX1RYUExMX0RFQlVHIAkweDA0CiAKLSNkZWZpbmUJTEFTVFNDQiAgICAgICAgIAkJMHg1ZQotCiAjZGVmaW5lCUlPUEROQ1RMICAgICAgICAJCTB4NWYKICNkZWZpbmUJCURJU0FCTEVfT0UgICAgICAJMHg4MAogI2RlZmluZQkJUEROX0lESVNUICAgICAgIAkweDA0CiAjZGVmaW5lCQlQRE5fRElGRlNFTlNFICAgCTB4MDEKIAotI2RlZmluZQlER1JQQ1JDSSAgICAgICAgCQkweDYwCi0KICNkZWZpbmUJU0hBRERSICAgICAgICAgIAkJMHg2MAogCiAjZGVmaW5lCU5FR09BRERSICAgICAgICAJCTB4NjAKIAorI2RlZmluZQlER1JQQ1JDSSAgICAgICAgCQkweDYwCisKICNkZWZpbmUJTkVHUEVSSU9EICAgICAgIAkJMHg2MQogCi0jZGVmaW5lCU5FR09GRlNFVCAgICAgICAJCTB4NjIKLQogI2RlZmluZQlQQUNLQ1JDSSAgICAgICAgCQkweDYyCiAKKyNkZWZpbmUJTkVHT0ZGU0VUICAgICAgIAkJMHg2MgorCiAjZGVmaW5lCU5FR1BQUk9QVFMgICAgICAJCTB4NjMKICNkZWZpbmUJCVBQUk9QVF9QQUNFICAgICAJMHgwOAogI2RlZmluZQkJUFBST1BUX1FBUyAgICAgIAkweDA0CkBAIC0yMjUzLDggKzE5NTIsNiBAQAogCiAjZGVmaW5lCVNFTE9JRCAgICAgICAgICAJCTB4NmIKIAotI2RlZmluZQlGQUlSTkVTUyAgICAgICAgCQkweDZjCi0KICNkZWZpbmUJUExMNDAwQ1RMMCAgICAgIAkJMHg2YwogI2RlZmluZQkJUExMX1ZDT1NFTCAgICAgIAkweDgwCiAjZGVmaW5lCQlQTExfUFdETiAgICAgICAgCTB4NDAKQEAgLTIyNjQsNiArMTk2MSw4IEBACiAjZGVmaW5lCQlQTExfRExQRiAgICAgICAgCTB4MDIKICNkZWZpbmUJCVBMTF9FTkZCTSAgICAgICAJMHgwMQogCisjZGVmaW5lCUZBSVJORVNTICAgICAgICAJCTB4NmMKKwogI2RlZmluZQlQTEw0MDBDVEwxICAgICAgCQkweDZkCiAjZGVmaW5lCQlQTExfQ05URU4gICAgICAgCTB4ODAKICNkZWZpbmUJCVBMTF9DTlRDTFIgICAgICAJMHg0MApAQCAtMjI3NSwyNSArMTk3NCwyNSBAQAogCiAjZGVmaW5lCUhBRERSICAgICAgICAgICAJCTB4NzAKIAotI2RlZmluZQlIT0RNQUFEUiAgICAgICAgCQkweDcwCi0KICNkZWZpbmUJUExMREVMQVkgICAgICAgIAkJMHg3MAogI2RlZmluZQkJU1BMSVRfRFJPUF9SRVEgIAkweDgwCiAKLSNkZWZpbmUJSENOVCAgICAgICAgICAgIAkJMHg3OAorI2RlZmluZQlIT0RNQUFEUiAgICAgICAgCQkweDcwCiAKICNkZWZpbmUJSE9ETUFDTlQgICAgICAgIAkJMHg3OAogCi0jZGVmaW5lCUhPRE1BRU4gICAgICAgICAJCTB4N2EKKyNkZWZpbmUJSENOVCAgICAgICAgICAgIAkJMHg3OAogCi0jZGVmaW5lCVNHSEFERFIgICAgICAgICAJCTB4N2MKKyNkZWZpbmUJSE9ETUFFTiAgICAgICAgIAkJMHg3YQogCiAjZGVmaW5lCVNDQkhBRERSICAgICAgICAJCTB4N2MKIAotI2RlZmluZQlTR0hDTlQgICAgICAgICAgCQkweDg0CisjZGVmaW5lCVNHSEFERFIgICAgICAgICAJCTB4N2MKIAogI2RlZmluZQlTQ0JIQ05UICAgICAgICAgCQkweDg0CiAKKyNkZWZpbmUJU0dIQ05UICAgICAgICAgIAkJMHg4NAorCiAjZGVmaW5lCURGRl9USFJTSCAgICAgICAJCTB4ODgKICNkZWZpbmUJCVdSX0RGVEhSU0ggICAgICAJMHg3MAogI2RlZmluZQkJUkRfREZUSFJTSCAgICAgIAkweDA3CkBAIC0yMzI2LDEwICsyMDI1LDYgQEAKIAogI2RlZmluZQlDTUNSWE1TRzAgICAgICAgCQkweDkwCiAKLSNkZWZpbmUJT1ZMWVJYTVNHMCAgICAgIAkJMHg5MAotCi0jZGVmaW5lCURDSFJYTVNHMCAgICAgICAJCTB4OTAKLQogI2RlZmluZQlST0VOQUJMRSAgICAgICAgCQkweDkwCiAjZGVmaW5lCQlNU0lST0VOICAgICAgICAgCTB4MjAKICNkZWZpbmUJCU9WTFlST0VOICAgICAgICAJMHgxMApAQCAtMjMzOCwxMiArMjAzMywxMiBAQAogI2RlZmluZQkJRENIMVJPRU4gICAgICAgIAkweDAyCiAjZGVmaW5lCQlEQ0gwUk9FTiAgICAgICAgCTB4MDEKIAorI2RlZmluZQlPVkxZUlhNU0cwICAgICAgCQkweDkwCisKKyNkZWZpbmUJRENIUlhNU0cwICAgICAgIAkJMHg5MAorCiAjZGVmaW5lCU9WTFlSWE1TRzEgICAgICAJCTB4OTEKIAotI2RlZmluZQlDTUNSWE1TRzEgICAgICAgCQkweDkxCi0KLSNkZWZpbmUJRENIUlhNU0cxICAgICAgIAkJMHg5MQotCiAjZGVmaW5lCU5TRU5BQkxFICAgICAgICAJCTB4OTEKICNkZWZpbmUJCU1TSU5TRU4gICAgICAgICAJMHgyMAogI2RlZmluZQkJT1ZMWU5TRU4gICAgICAgIAkweDEwCkBAIC0yMzUyLDYgKzIwNDcsMTAgQEAKICNkZWZpbmUJCURDSDFOU0VOICAgICAgICAJMHgwMgogI2RlZmluZQkJRENIME5TRU4gICAgICAgIAkweDAxCiAKKyNkZWZpbmUJQ01DUlhNU0cxICAgICAgIAkJMHg5MQorCisjZGVmaW5lCURDSFJYTVNHMSAgICAgICAJCTB4OTEKKwogI2RlZmluZQlEQ0hSWE1TRzIgICAgICAgCQkweDkyCiAKICNkZWZpbmUJQ01DUlhNU0cyICAgICAgIAkJMHg5MgpAQCAtMjM3NSwyNCArMjA3NCwyNCBAQAogI2RlZmluZQkJVFNDU0VSUkVOICAgICAgIAkweDAyCiAjZGVmaW5lCQlDTVBBQkNESVMgICAgICAgCTB4MDEKIAotI2RlZmluZQlDTUNTRVFCQ05UICAgICAgCQkweDk0Ci0KICNkZWZpbmUJT1ZMWVNFUUJDTlQgICAgIAkJMHg5NAogCiAjZGVmaW5lCURDSFNFUUJDTlQgICAgICAJCTB4OTQKIAorI2RlZmluZQlDTUNTRVFCQ05UICAgICAgCQkweDk0CisKKyNkZWZpbmUJQ01DU1BMVFNUQVQwICAgIAkJMHg5NgorCiAjZGVmaW5lCURDSFNQTFRTVEFUMCAgICAJCTB4OTYKIAogI2RlZmluZQlPVkxZU1BMVFNUQVQwICAgCQkweDk2CiAKLSNkZWZpbmUJQ01DU1BMVFNUQVQwICAgIAkJMHg5NgorI2RlZmluZQlDTUNTUExUU1RBVDEgICAgCQkweDk3CiAKICNkZWZpbmUJT1ZMWVNQTFRTVEFUMSAgIAkJMHg5NwogCiAjZGVmaW5lCURDSFNQTFRTVEFUMSAgICAJCTB4OTcKIAotI2RlZmluZQlDTUNTUExUU1RBVDEgICAgCQkweDk3Ci0KICNkZWZpbmUJU0dSWE1TRzAgICAgICAgIAkJMHg5OAogI2RlZmluZQkJQ0ROVU0gICAgICAgICAgIAkweGY4CiAjZGVmaW5lCQlDRk5VTSAgICAgICAgICAgCTB4MDcKQEAgLTI0MjAsMTUgKzIxMTksMTggQEAKICNkZWZpbmUJCVRBR19OVU0gICAgICAgICAJMHgxZgogI2RlZmluZQkJUkxYT1JEICAgICAgICAgIAkweDEwCiAKKyNkZWZpbmUJU0dTRVFCQ05UICAgICAgIAkJMHg5YworCiAjZGVmaW5lCVNMVlNQTFRPVVRBVFRSMCAJCTB4OWMKICNkZWZpbmUJCUxPV0VSX0JDTlQgICAgICAJMHhmZgogCi0jZGVmaW5lCVNHU0VRQkNOVCAgICAgICAJCTB4OWMKLQogI2RlZmluZQlTTFZTUExUT1VUQVRUUjEgCQkweDlkCiAjZGVmaW5lCQlDTVBMVF9ETlVNICAgICAgCTB4ZjgKICNkZWZpbmUJCUNNUExUX0ZOVU0gICAgICAJMHgwNwogCisjZGVmaW5lCVNMVlNQTFRPVVRBVFRSMiAJCTB4OWUKKyNkZWZpbmUJCUNNUExUX0JOVU0gICAgICAJMHhmZgorCiAjZGVmaW5lCVNHU1BMVFNUQVQwICAgICAJCTB4OWUKICNkZWZpbmUJCVNUQUVURVJNICAgICAgICAJMHg4MAogI2RlZmluZQkJU0NCQ0VSUiAgICAgICAgIAkweDQwCkBAIC0yNDM5LDkgKzIxNDEsNiBAQAogI2RlZmluZQkJUlhTQ0VNU0cgICAgICAgIAkweDAyCiAjZGVmaW5lCQlSWFNQTFRSU1AgICAgICAgCTB4MDEKIAotI2RlZmluZQlTTFZTUExUT1VUQVRUUjIgCQkweDllCi0jZGVmaW5lCQlDTVBMVF9CTlVNICAgICAgCTB4ZmYKLQogI2RlZmluZQlTR1NQTFRTVEFUMSAgICAgCQkweDlmCiAjZGVmaW5lCQlSWERBVEFCVUNLRVQgICAgCTB4MDEKIApAQCAtMjQ5NywxMCArMjE5NiwxMCBAQAogCiAjZGVmaW5lCUNDU0dBRERSICAgICAgICAJCTB4YWMKIAotI2RlZmluZQlDQ1NDQkFERFIgICAgICAgCQkweGFjCi0KICNkZWZpbmUJQ0NTQ0JBRFJfQksgICAgIAkJMHhhYwogCisjZGVmaW5lCUNDU0NCQUREUiAgICAgICAJCTB4YWMKKwogI2RlZmluZQlDTUNfUkFNQklTVCAgICAgCQkweGFkCiAjZGVmaW5lCQlTR19FTEVNRU5UX1NJWkUgCTB4ODAKICNkZWZpbmUJCVNDQlJBTUJJU1RfRkFJTCAJMHg0MApAQCAtMjU1NCw5ICsyMjUzLDkgQEAKICNkZWZpbmUJU0VFREFUICAgICAgICAgIAkJMHhiYwogCiAjZGVmaW5lCVNFRUNUTCAgICAgICAgICAJCTB4YmUKLSNkZWZpbmUJCVNFRU9QX0VXRFMgICAgICAJMHg0MAogI2RlZmluZQkJU0VFT1BfV0FMTCAgICAgIAkweDQwCiAjZGVmaW5lCQlTRUVPUF9FV0VOICAgICAgCTB4NDAKKyNkZWZpbmUJCVNFRU9QX0VXRFMgICAgICAJMHg0MAogI2RlZmluZQkJU0VFT1BDT0RFICAgICAgIAkweDcwCiAjZGVmaW5lCQlTRUVSU1QgICAgICAgICAgCTB4MDIKICNkZWZpbmUJCVNFRVNUQVJUICAgICAgICAJMHgwMQpAQCAtMjU3MywyNSArMjI3MiwyNSBAQAogCiAjZGVmaW5lCVNDQkNOVCAgICAgICAgICAJCTB4YmYKIAorI2RlZmluZQlERldBRERSICAgICAgICAgCQkweGMwCisKICNkZWZpbmUJRFNQRkxUUkNUTCAgICAgIAkJMHhjMAogI2RlZmluZQkJRkxUUkRJU0FCTEUgICAgIAkweDIwCiAjZGVmaW5lCQlFREdFU0VOU0UgICAgICAgCTB4MTAKICNkZWZpbmUJCURTUEZDTlRTRUwgICAgICAJMHgwZgogCi0jZGVmaW5lCURGV0FERFIgICAgICAgICAJCTB4YzAKLQogI2RlZmluZQlEU1BEQVRBQ1RMICAgICAgCQkweGMxCiAjZGVmaW5lCQlCWVBBU1NFTkFCICAgICAgCTB4ODAKICNkZWZpbmUJCURFU1FESVMgICAgICAgICAJMHgxMAogI2RlZmluZQkJUkNWUk9GRlNURElTICAgIAkweDA0CiAjZGVmaW5lCQlYTUlUT0ZGU1RESVMgICAgCTB4MDIKIAorI2RlZmluZQlERlJBRERSICAgICAgICAgCQkweGMyCisKICNkZWZpbmUJRFNQUkVRQ1RMICAgICAgIAkJMHhjMgogI2RlZmluZQkJTUFOUkVRQ1RMICAgICAgIAkweGMwCiAjZGVmaW5lCQlNQU5SRVFETFkgICAgICAgCTB4M2YKIAotI2RlZmluZQlERlJBRERSICAgICAgICAgCQkweGMyCi0KICNkZWZpbmUJRFNQQUNLQ1RMICAgICAgIAkJMHhjMwogI2RlZmluZQkJTUFOQUNLQ1RMICAgICAgIAkweGMwCiAjZGVmaW5lCQlNQU5BQ0tETFkgICAgICAgCTB4M2YKQEAgLTI2MTIsMTQgKzIzMTEsMTQgQEAKIAogI2RlZmluZQlXUlRCSUFTQ0FMQyAgICAgCQkweGM3CiAKLSNkZWZpbmUJREZQVFJTICAgICAgICAgIAkJMHhjOAotCiAjZGVmaW5lCVJDVlJCSUFTQ0FMQyAgICAJCTB4YzgKIAotI2RlZmluZQlERkJLUFRSICAgICAgICAgCQkweGM5CisjZGVmaW5lCURGUFRSUyAgICAgICAgICAJCTB4YzgKIAogI2RlZmluZQlTS0VXQ0FMQyAgICAgICAgCQkweGM5CiAKKyNkZWZpbmUJREZCS1BUUiAgICAgICAgIAkJMHhjOQorCiAjZGVmaW5lCURGREJDVEwgICAgICAgICAJCTB4Y2IKICNkZWZpbmUJCURGRl9DSU9fV1JfUkRZICAJMHgyMAogI2RlZmluZQkJREZGX0NJT19SRF9SRFkgIAkweDEwCkBAIC0yNzA0LDEyICsyNDAzLDEyIEBACiAKICNkZWZpbmUJQUNDVU1fU0FWRSAgICAgIAkJMHhmYQogCisjZGVmaW5lCVdBSVRJTkdfU0NCX1RBSUxTCQkweDEwMAorCiAjZGVmaW5lCUFIRF9QQ0lfQ09ORklHX0JBU0UJCTB4MTAwCiAKICNkZWZpbmUJU1JBTV9CQVNFICAgICAgIAkJMHgxMDAKIAotI2RlZmluZQlXQUlUSU5HX1NDQl9UQUlMUwkJMHgxMDAKLQogI2RlZmluZQlXQUlUSU5HX1RJRF9IRUFECQkweDEyMAogCiAjZGVmaW5lCVdBSVRJTkdfVElEX1RBSUwJCTB4MTIyCkBAIC0yNzM4LDggKzI0MzcsOCBAQAogI2RlZmluZQkJUFJFTE9BREVOICAgICAgIAkweDgwCiAjZGVmaW5lCQlXSURFT0REICAgICAgICAgCTB4NDAKICNkZWZpbmUJCVNDU0lFTiAgICAgICAgICAJMHgyMAotI2RlZmluZQkJU0RNQUVOQUNLICAgICAgIAkweDEwCiAjZGVmaW5lCQlTRE1BRU4gICAgICAgICAgCTB4MTAKKyNkZWZpbmUJCVNETUFFTkFDSyAgICAgICAJMHgxMAogI2RlZmluZQkJSERNQUVOICAgICAgICAgIAkweDA4CiAjZGVmaW5lCQlIRE1BRU5BQ0sgICAgICAgCTB4MDgKICNkZWZpbmUJCURJUkVDVElPTiAgICAgICAJMHgwNApAQCAtMjgzNywxMiArMjUzNiwxMiBAQAogCiAjZGVmaW5lCU1LX01FU1NBR0VfU0NTSUlECQkweDE2MgogCisjZGVmaW5lCVNDQl9CQVNFICAgICAgICAJCTB4MTgwCisKICNkZWZpbmUJU0NCX1JFU0lEVUFMX0RBVEFDTlQJCTB4MTgwCiAjZGVmaW5lCVNDQl9DREJfU1RPUkUgICAJCTB4MTgwCiAjZGVmaW5lCVNDQl9IT1NUX0NEQl9QVFIJCTB4MTgwCiAKLSNkZWZpbmUJU0NCX0JBU0UgICAgICAgIAkJMHgxODAKLQogI2RlZmluZQlTQ0JfUkVTSURVQUxfU0dQVFIJCTB4MTg0CiAjZGVmaW5lCQlTR19BRERSX01BU0sgICAgCTB4ZjgKICNkZWZpbmUJCVNHX09WRVJSVU5fUkVTSUQJMHgwMgpAQCAtMjkxMCwxNyArMjYwOSw2IEBACiAjZGVmaW5lCVNDQl9ESVNDT05ORUNURURfTElTVFMJCTB4MWI4CiAKIAotI2RlZmluZQlDTURfR1JPVVBfQ09ERV9TSElGVAkweDA1Ci0jZGVmaW5lCVNUSU1FU0VMX01JTgkweDE4Ci0jZGVmaW5lCVNUSU1FU0VMX1NISUZUCTB4MDMKLSNkZWZpbmUJSU5WQUxJRF9BRERSCTB4ODAKLSNkZWZpbmUJQUhEX1BSRUNPTVBfTUFTSwkweDA3Ci0jZGVmaW5lCVRBUkdFVF9EQVRBX0lOCTB4MDEKLSNkZWZpbmUJQ0NTQ0JBRERSX01BWAkweDgwCi0jZGVmaW5lCU5VTURTUFMgCTB4MTQKLSNkZWZpbmUJU0VFT1BfRVdFTl9BRERSCTB4YzAKLSNkZWZpbmUJQUhEX0FOTkVYQ09MX1BFUl9ERVYwCTB4MDQKLSNkZWZpbmUJRFNUX01PREVfU0hJRlQJMHgwNAogI2RlZmluZQlBSERfVElNRVJfTUFYX1VTCTB4MThmZmU3CiAjZGVmaW5lCUFIRF9USU1FUl9NQVhfVElDS1MJMHhmZmZmCiAjZGVmaW5lCUFIRF9TRU5TRV9CVUZTSVpFCTB4MTAwCkBAIC0yOTU1LDMyICsyNjQzLDQzIEBACiAjZGVmaW5lCUxVTkxFTl9TSU5HTEVfTEVWRUxfTFVOCTB4MGYKICNkZWZpbmUJTlZSQU1fU0NCX09GRlNFVAkweDJjCiAjZGVmaW5lCVNUQVRVU19QS1RfU0VOU0UJMHhmZgorI2RlZmluZQlDTURfR1JPVVBfQ09ERV9TSElGVAkweDA1CiAjZGVmaW5lCU1BWF9PRkZTRVRfUEFDRURfQlVHCTB4N2YKICNkZWZpbmUJU1RJTUVTRUxfQlVHX0FESgkweDA4CisjZGVmaW5lCVNUSU1FU0VMX01JTgkweDE4CisjZGVmaW5lCVNUSU1FU0VMX1NISUZUCTB4MDMKICNkZWZpbmUJQ0NTR1JBTV9NQVhTRUdTCTB4MTAKKyNkZWZpbmUJSU5WQUxJRF9BRERSCTB4ODAKICNkZWZpbmUJU0VFT1BfRVJBTF9BRERSCTB4ODAKICNkZWZpbmUJQUhEX1NMRVdSQVRFX0RFRl9SRVZCCTB4MDgKICNkZWZpbmUJQUhEX1BSRUNPTVBfQ1VUQkFDS18xNwkweDA0CisjZGVmaW5lCUFIRF9QUkVDT01QX01BU0sJMHgwNwogI2RlZmluZQlTUkNfTU9ERV9TSElGVAkweDAwCiAjZGVmaW5lCVBLVF9PVkVSUlVOX0JVRlNJWkUJMHgyMDAKICNkZWZpbmUJU0NCX1RSQU5TRkVSX1NJWkVfMUJZVEVfTFVOCTB4MzAKKyNkZWZpbmUJVEFSR0VUX0RBVEFfSU4JMHgwMQogI2RlZmluZQlIT1NUX01TRwkweGZmCiAjZGVmaW5lCU1BWF9PRkZTRVQJMHhmZQogI2RlZmluZQlCVVNfMTZfQklUCTB4MDEKKyNkZWZpbmUJQ0NTQ0JBRERSX01BWAkweDgwCisjZGVmaW5lCU5VTURTUFMgCTB4MTQKKyNkZWZpbmUJU0VFT1BfRVdFTl9BRERSCTB4YzAKKyNkZWZpbmUJQUhEX0FOTkVYQ09MX1BFUl9ERVYwCTB4MDQKKyNkZWZpbmUJRFNUX01PREVfU0hJRlQJMHgwNAogCiAKIC8qIERvd25sb2FkZWQgQ29uc3RhbnQgRGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUJU0dfU0laRU9GCTB4MDQKLSNkZWZpbmUJU0dfUFJFRkVUQ0hfQUxJR05fTUFTSwkweDAyCi0jZGVmaW5lCVNHX1BSRUZFVENIX0NOVF9MSU1JVAkweDAxCiAjZGVmaW5lCUNBQ0hFTElORV9NQVNLCTB4MDcKICNkZWZpbmUJU0NCX1RSQU5TRkVSX1NJWkUJMHgwNgogI2RlZmluZQlQS1RfT1ZFUlJVTl9CVUZPRkZTRVQJMHgwNQorI2RlZmluZQlTR19TSVpFT0YJMHgwNAogI2RlZmluZQlTR19QUkVGRVRDSF9BRERSX01BU0sJMHgwMworI2RlZmluZQlTR19QUkVGRVRDSF9BTElHTl9NQVNLCTB4MDIKKyNkZWZpbmUJU0dfUFJFRkVUQ0hfQ05UX0xJTUlUCTB4MDEKICNkZWZpbmUJU0dfUFJFRkVUQ0hfQ05UCTB4MDAKICNkZWZpbmUJRE9XTkxPQURfQ09OU1RfQ09VTlQJMHgwOAogCiAKIC8qIEV4cG9ydGVkIExhYmVscyAqLwotI2RlZmluZQlMQUJFTF90aW1lcl9pc3IJMHgyOGIKICNkZWZpbmUJTEFCRUxfc2VxX2lzciAJMHgyOGYKKyNkZWZpbmUJTEFCRUxfdGltZXJfaXNyCTB4MjhiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3JlZ19wcmludC5jX3NoaXBwZWQgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3JlZ19wcmludC5jX3NoaXBwZWQKaW5kZXggYzRjOGE5Ni4uZjVlYTcxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9yZWdfcHJpbnQuY19zaGlwcGVkCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcmVnX3ByaW50LmNfc2hpcHBlZApAQCAtOCwxOCArOCw2IEBACiAKICNpbmNsdWRlICJhaWM3OXh4X29zbS5oIgogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE1PREVfUFRSX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU1JDX01PREUiLAkJMHgwNywgMHgwNyB9LAotCXsgIkRTVF9NT0RFIiwJCTB4NzAsIDB4NzAgfQotfTsKLQotaW50Ci1haGRfbW9kZV9wdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE1PREVfUFRSX3BhcnNlX3RhYmxlLCAyLCAiTU9ERV9QVFIiLAotCSAgICAweDAwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IElOVFNUQVRfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTUExUSU5UIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDTURDTVBMVCIsCQkweDAyLCAweDAyIH0sCkBAIC0zOSwxMTAgKzI3LDYgQEAKIAkgICAgMHgwMSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFJTlRDT0RFX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiTk9fU0VRSU5UIiwJCTB4MDAsIDB4ZmYgfSwKLQl7ICJCQURfUEhBU0UiLAkJMHgwMSwgMHhmZiB9LAotCXsgIlNFTkRfUkVKRUNUIiwJMHgwMiwgMHhmZiB9LAotCXsgIlBST1RPX1ZJT0xBVElPTiIsCTB4MDMsIDB4ZmYgfSwKLQl7ICJOT19NQVRDSCIsCQkweDA0LCAweGZmIH0sCi0JeyAiSUdOX1dJREVfUkVTIiwJMHgwNSwgMHhmZiB9LAotCXsgIlBEQVRBX1JFSU5JVCIsCTB4MDYsIDB4ZmYgfSwKLQl7ICJIT1NUX01TR19MT09QIiwJMHgwNywgMHhmZiB9LAotCXsgIkJBRF9TVEFUVVMiLAkJMHgwOCwgMHhmZiB9LAotCXsgIkRBVEFfT1ZFUlJVTiIsCTB4MDksIDB4ZmYgfSwKLQl7ICJNS01TR19GQUlMRUQiLAkweDBhLCAweGZmIH0sCi0JeyAiTUlTU0VEX0JVU0ZSRUUiLAkweDBiLCAweGZmIH0sCi0JeyAiRFVNUF9DQVJEX1NUQVRFIiwJMHgwYywgMHhmZiB9LAotCXsgIklMTEVHQUxfUEhBU0UiLAkweDBkLCAweGZmIH0sCi0JeyAiSU5WQUxJRF9TRVFJTlQiLAkweDBlLCAweGZmIH0sCi0JeyAiQ0ZHNElTVEFUX0lOVFIiLAkweDBmLCAweGZmIH0sCi0JeyAiU1RBVFVTX09WRVJSVU4iLAkweDEwLCAweGZmIH0sCi0JeyAiQ0ZHNE9WRVJSVU4iLAkweDExLCAweGZmIH0sCi0JeyAiRU5URVJJTkdfTk9OUEFDSyIsCTB4MTIsIDB4ZmYgfSwKLQl7ICJUQVNLTUdNVF9GVU5DX0NPTVBMRVRFIiwweDEzLCAweGZmIH0sCi0JeyAiVEFTS01HTVRfQ01EX0NNUExUX09LQVkiLDB4MTQsIDB4ZmYgfSwKLQl7ICJUUkFDRVBPSU5UMCIsCTB4MTUsIDB4ZmYgfSwKLQl7ICJUUkFDRVBPSU5UMSIsCTB4MTYsIDB4ZmYgfSwKLQl7ICJUUkFDRVBPSU5UMiIsCTB4MTcsIDB4ZmYgfSwKLQl7ICJUUkFDRVBPSU5UMyIsCTB4MTgsIDB4ZmYgfSwKLQl7ICJTQVdfSFdFUlIiLAkJMHgxOSwgMHhmZiB9LAotCXsgIkJBRF9TQ0JfU1RBVFVTIiwJMHgxYSwgMHhmZiB9Ci19OwotCi1pbnQKLWFoZF9zZXFpbnRjb2RlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTRVFJTlRDT0RFX3BhcnNlX3RhYmxlLCAyNywgIlNFUUlOVENPREUiLAotCSAgICAweDAyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUklOVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkNMUlNQTFRJTlQiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkNMUkNNRElOVCIsCQkweDAyLCAweDAyIH0sCi0JeyAiQ0xSU0VRSU5UIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJDTFJTQ1NJSU5UIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJDTFJQQ0lJTlQiLAkJMHgxMCwgMHgxMCB9LAotCXsgIkNMUlNXVE1JTlQiLAkJMHgyMCwgMHgyMCB9LAotCXsgIkNMUkJSS0FEUklOVCIsCTB4NDAsIDB4NDAgfSwKLQl7ICJDTFJIV0VSUklOVCIsCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfY2xyaW50X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJJTlRfcGFyc2VfdGFibGUsIDgsICJDTFJJTlQiLAotCSAgICAweDAzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IEVSUk9SX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiRFNDVE1PVVQiLAkJMHgwMiwgMHgwMiB9LAotCXsgIklMTE9QQ09ERSIsCQkweDA0LCAweDA0IH0sCi0JeyAiU1FQQVJFUlIiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkRQQVJFUlIiLAkJMHgxMCwgMHgxMCB9LAotCXsgIk1QQVJFUlIiLAkJMHgyMCwgMHgyMCB9LAotCXsgIkNJT0FDQ0VTRkFJTCIsCTB4NDAsIDB4NDAgfSwKLQl7ICJDSU9QQVJFUlIiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9lcnJvcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoRVJST1JfcGFyc2VfdGFibGUsIDcsICJFUlJPUiIsCi0JICAgIDB4MDQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgSENOVFJMX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0hJUFJTVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiQ0hJUFJTVEFDSyIsCQkweDAxLCAweDAxIH0sCi0JeyAiSU5URU4iLAkJMHgwMiwgMHgwMiB9LAotCXsgIlBBVVNFIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTV1RJTUVSX1NUQVJUX0IiLAkweDA4LCAweDA4IH0sCi0JeyAiU1dJTlQiLAkJMHgxMCwgMHgxMCB9LAotCXsgIlBPV1JETiIsCQkweDQwLCAweDQwIH0sCi0JeyAiU0VRX1JFU0VUIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfaGNudHJsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihIQ05UUkxfcGFyc2VfdGFibGUsIDgsICJIQ05UUkwiLAotCSAgICAweDA1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9obnNjYl9xb2ZmX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSE5TQ0JfUU9GRiIsCi0JICAgIDB4MDYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2hlc2NiX3FvZmZfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIRVNDQl9RT0ZGIiwKLQkgICAgMHgwOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBIU19NQUlMQk9YX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRU5JTlRfQ09BTEVTQ0UiLAkweDQwLCAweDQwIH0sCiAJeyAiSE9TVF9UUUlOUE9TIiwJMHg4MCwgMHg4MCB9CkBAIC0xNzAsNzcgKzU0LDYgQEAKIAkgICAgMHgwYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDTFJTRVFJTlRTVEFUX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0xSU0VRX1NQTFRJTlQiLAkweDAxLCAweDAxIH0sCi0JeyAiQ0xSU0VRX1BDSUlOVCIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDTFJTRVFfU0NTSUlOVCIsCTB4MDQsIDB4MDQgfSwKLQl7ICJDTFJTRVFfU0VRSU5UIiwJMHgwOCwgMHgwOCB9LAotCXsgIkNMUlNFUV9TV1RNUlRPIiwJMHgxMCwgMHgxMCB9Ci19OwotCi1pbnQKLWFoZF9jbHJzZXFpbnRzdGF0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJTRVFJTlRTVEFUX3BhcnNlX3RhYmxlLCA1LCAiQ0xSU0VRSU5UU1RBVCIsCi0JICAgIDB4MGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3N3dGltZXJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTV1RJTUVSIiwKLQkgICAgMHgwZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc25zY2JfcW9mZl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNOU0NCX1FPRkYiLAotCSAgICAweDEwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zZXNjYl9xb2ZmX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0VTQ0JfUU9GRiIsCi0JICAgIDB4MTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3Nkc2NiX3FvZmZfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTRFNDQl9RT0ZGIiwKLQkgICAgMHgxNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBRT0ZGX0NUTFNUQV9wYXJzZV90YWJsZVtdID0gewotCXsgIlNDQl9RU0laRV80IiwJMHgwMCwgMHgwZiB9LAotCXsgIlNDQl9RU0laRV84IiwJMHgwMSwgMHgwZiB9LAotCXsgIlNDQl9RU0laRV8xNiIsCTB4MDIsIDB4MGYgfSwKLQl7ICJTQ0JfUVNJWkVfMzIiLAkweDAzLCAweDBmIH0sCi0JeyAiU0NCX1FTSVpFXzY0IiwJMHgwNCwgMHgwZiB9LAotCXsgIlNDQl9RU0laRV8xMjgiLAkweDA1LCAweDBmIH0sCi0JeyAiU0NCX1FTSVpFXzI1NiIsCTB4MDYsIDB4MGYgfSwKLQl7ICJTQ0JfUVNJWkVfNTEyIiwJMHgwNywgMHgwZiB9LAotCXsgIlNDQl9RU0laRV8xMDI0IiwJMHgwOCwgMHgwZiB9LAotCXsgIlNDQl9RU0laRV8yMDQ4IiwJMHgwOSwgMHgwZiB9LAotCXsgIlNDQl9RU0laRV80MDk2IiwJMHgwYSwgMHgwZiB9LAotCXsgIlNDQl9RU0laRV84MTkyIiwJMHgwYiwgMHgwZiB9LAotCXsgIlNDQl9RU0laRV8xNjM4NCIsCTB4MGMsIDB4MGYgfSwKLQl7ICJTQ0JfUVNJWkUiLAkJMHgwZiwgMHgwZiB9LAotCXsgIkhTX01BSUxCT1hfQUNUIiwJMHgxMCwgMHgxMCB9LAotCXsgIlNEU0NCX1JPTExPVlIiLAkweDIwLCAweDIwIH0sCi0JeyAiTkVXX1NDQl9BVkFJTCIsCTB4NDAsIDB4NDAgfSwKLQl7ICJFTVBUWV9TQ0JfQVZBSUwiLAkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3FvZmZfY3Rsc3RhX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihRT0ZGX0NUTFNUQV9wYXJzZV90YWJsZSwgMTgsICJRT0ZGX0NUTFNUQSIsCi0JICAgIDB4MTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgSU5UQ1RMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU1BMVElOVEVOIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJTRVFJTlRFTiIsCQkweDAyLCAweDAyIH0sCkBAIC0yODAsMjIgKzkzLDYgQEAKIAkgICAgMHgxOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBEU0NPTU1BTkQwX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0lPUEFSQ0tFTiIsCQkweDAxLCAweDAxIH0sCi0JeyAiRElTQUJMRV9UV0FURSIsCTB4MDIsIDB4MDIgfSwKLQl7ICJFWFRSRVFMQ0siLAkJMHgxMCwgMHgxMCB9LAotCXsgIk1QQVJDS0VOIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJEUEFSQ0tFTiIsCQkweDQwLCAweDQwIH0sCi0JeyAiQ0FDSEVUSEVOIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfZHNjb21tYW5kMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoRFNDT01NQU5EMF9wYXJzZV90YWJsZSwgNiwgIkRTQ09NTUFORDAiLAotCSAgICAweDE5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERGU1RBVFVTX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRklGT0VNUCIsCQkweDAxLCAweDAxIH0sCiAJeyAiRklGT0ZVTEwiLAkJMHgwMiwgMHgwMiB9LApAQCAtMzI3LDE0NiArMTI0LDYgQEAKIAkgICAgMHgxYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR19DQUNIRV9QUkVfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJMQVNUX1NFRyIsCQkweDAyLCAweDAyIH0sCi0JeyAiT0REX1NFRyIsCQkweDA0LCAweDA0IH0sCi0JeyAiU0dfQUREUl9NQVNLIiwJMHhmOCwgMHhmOCB9Ci19OwotCi1pbnQKLWFoZF9zZ19jYWNoZV9wcmVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNHX0NBQ0hFX1BSRV9wYXJzZV90YWJsZSwgMywgIlNHX0NBQ0hFX1BSRSIsCi0JICAgIDB4MWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2xxaW5fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMUUlOIiwKLQkgICAgMHgyMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfbHVucHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTFVOUFRSIiwKLQkgICAgMHgyMiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfY21kbGVucHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01ETEVOUFRSIiwKLQkgICAgMHgyNSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfYXR0cnB0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkFUVFJQVFIiLAotCSAgICAweDI2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9mbGFncHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRkxBR1BUUiIsCi0JICAgIDB4MjcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2NtZHB0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNNRFBUUiIsCi0JICAgIDB4MjgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3FuZXh0cHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUU5FWFRQVFIiLAotCSAgICAweDI5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9hYnJ0Ynl0ZXB0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkFCUlRCWVRFUFRSIiwKLQkgICAgMHgyYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfYWJydGJpdHB0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkFCUlRCSVRQVFIiLAotCSAgICAweDJjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExVTkxFTl9wYXJzZV90YWJsZVtdID0gewotCXsgIklMVU5MRU4iLAkJMHgwZiwgMHgwZiB9LAotCXsgIlRMVU5MRU4iLAkJMHhmMCwgMHhmMCB9Ci19OwotCi1pbnQKLWFoZF9sdW5sZW5fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKExVTkxFTl9wYXJzZV90YWJsZSwgMiwgIkxVTkxFTiIsCi0JICAgIDB4MzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2NkYmxpbWl0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0RCTElNSVQiLAotCSAgICAweDMxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9tYXhjbWRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJNQVhDTUQiLAotCSAgICAweDMyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9tYXhjbWRjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJNQVhDTURDTlQiLAotCSAgICAweDMzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRQ1RMMV9wYXJzZV90YWJsZVtdID0gewotCXsgIkFCT1JUUEVORElORyIsCTB4MDEsIDB4MDEgfSwKLQl7ICJTSU5HTEVDTUQiLAkJMHgwMiwgMHgwMiB9LAotCXsgIlBDSTJQQ0kiLAkJMHgwNCwgMHgwNCB9Ci19OwotCi1pbnQKLWFoZF9scWN0bDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKExRQ1RMMV9wYXJzZV90YWJsZSwgMywgIkxRQ1RMMSIsCi0JICAgIDB4MzgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFDVEwyX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiTFFPUEFVU0UiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkxRT1RPSURMRSIsCQkweDAyLCAweDAyIH0sCi0JeyAiTFFPQ09OVElOVUUiLAkweDA0LCAweDA0IH0sCi0JeyAiTFFPUkVUUlkiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkxRSVBBVVNFIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJMUUlUT0lETEUiLAkJMHgyMCwgMHgyMCB9LAotCXsgIkxRSUNPTlRJTlVFIiwJMHg0MCwgMHg0MCB9LAotCXsgIkxRSVJFVFJZIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfbHFjdGwyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihMUUNUTDJfcGFyc2VfdGFibGUsIDgsICJMUUNUTDIiLAotCSAgICAweDM5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lTRVEwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0NTSVJTVE8iLAkJMHgwMSwgMHgwMSB9LAogCXsgIkZPUkNFQlVTRlJFRSIsCTB4MTAsIDB4MTAgfSwKQEAgLTQ5OCwzNyArMTU1LDYgQEAKIAkgICAgMHgzYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTWEZSQ1RMMF9wYXJzZV90YWJsZVtdID0gewotCXsgIlNQSU9FTiIsCQkweDA4LCAweDA4IH0sCi0JeyAiQklPU0NBTkNFTEVOIiwJMHgxMCwgMHgxMCB9LAotCXsgIkRGUEVYUCIsCQkweDQwLCAweDQwIH0sCi0JeyAiREZPTiIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3N4ZnJjdGwwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTWEZSQ1RMMF9wYXJzZV90YWJsZSwgNCwgIlNYRlJDVEwwIiwKLQkgICAgMHgzYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTWEZSQ1RMMV9wYXJzZV90YWJsZVtdID0gewotCXsgIlNUUFdFTiIsCQkweDAxLCAweDAxIH0sCi0JeyAiQUNUTkVHRU4iLAkJMHgwMiwgMHgwMiB9LAotCXsgIkVOU1RJTUVSIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTVElNRVNFTCIsCQkweDE4LCAweDE4IH0sCi0JeyAiRU5TUENISyIsCQkweDIwLCAweDIwIH0sCi0JeyAiRU5TQUNISyIsCQkweDQwLCAweDQwIH0sCi0JeyAiQklUQlVDS0VUIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfc3hmcmN0bDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNYRlJDVEwxX3BhcnNlX3RhYmxlLCA3LCAiU1hGUkNUTDEiLAotCSAgICAweDNkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERGRlNUQVRfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDVVJSRklGT18wIiwJCTB4MDAsIDB4MDMgfSwKIAl7ICJDVVJSRklGT18xIiwJCTB4MDEsIDB4MDMgfSwKQEAgLTU0NSw0MCArMTcxLDYgQEAKIAkgICAgMHgzZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotaW50Ci1haGRfbXVsdGFyZ2lkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTVVMVEFSR0lEIiwKLQkgICAgMHg0MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0lHT19wYXJzZV90YWJsZVtdID0gewotCXsgIlBfREFUQU9VVCIsCQkweDAwLCAweGUwIH0sCi0JeyAiUF9EQVRBT1VUX0RUIiwJMHgyMCwgMHhlMCB9LAotCXsgIlBfREFUQUlOIiwJCTB4NDAsIDB4ZTAgfSwKLQl7ICJQX0RBVEFJTl9EVCIsCTB4NjAsIDB4ZTAgfSwKLQl7ICJQX0NPTU1BTkQiLAkJMHg4MCwgMHhlMCB9LAotCXsgIlBfTUVTR09VVCIsCQkweGEwLCAweGUwIH0sCi0JeyAiUF9TVEFUVVMiLAkJMHhjMCwgMHhlMCB9LAotCXsgIlBfTUVTR0lOIiwJCTB4ZTAsIDB4ZTAgfSwKLQl7ICJBQ0tPIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJSRVFPIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJCU1lPIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTRUxPIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJBVE5PIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJNU0dPIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJJT08iLAkJMHg0MCwgMHg0MCB9LAotCXsgIkNETyIsCQkweDgwLCAweDgwIH0sCi0JeyAiUEhBU0VfTUFTSyIsCQkweGUwLCAweGUwIH0KLX07Ci0KLWludAotYWhkX3Njc2lzaWdvX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTQ1NJU0lHT19wYXJzZV90YWJsZSwgMTcsICJTQ1NJU0lHTyIsCi0JICAgIDB4NDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNJR0lfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJQX0RBVEFPVVQiLAkJMHgwMCwgMHhlMCB9LAogCXsgIlBfREFUQU9VVF9EVCIsCTB4MjAsIDB4ZTAgfSwKQEAgLTYyNCwzMSArMjE2LDEyIEBACiB9CiAKIGludAotYWhkX3Njc2lkYXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJREFUIiwKLQkgICAgMHg0NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGRfc2NzaWJ1c19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lCVVMiLAogCSAgICAweDQ2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFRBUkdJRElOX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiVEFSR0lEIiwJCTB4MGYsIDB4MGYgfSwKLQl7ICJDTEtPVVQiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF90YXJnaWRpbl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoVEFSR0lESU5fcGFyc2VfdGFibGUsIDIsICJUQVJHSURJTiIsCi0JICAgIDB4NDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VMSURfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJPTkVCSVQiLAkJMHgwOCwgMHgwOCB9LAogCXsgIlNFTElEX01BU0siLAkJMHhmMCwgMHhmMCB9CkBAIC02NjEsMzggKzIzNCw2IEBACiAJICAgIDB4NDksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgT1BUSU9OTU9ERV9wYXJzZV90YWJsZVtdID0gewotCXsgIkFVVE9fTVNHT1VUX0RFIiwJMHgwMiwgMHgwMiB9LAotCXsgIkVOREdGT1JNQ0hLIiwJMHgwNCwgMHgwNCB9LAotCXsgIkJVU0ZSRUVSRVYiLAkJMHgxMCwgMHgxMCB9LAotCXsgIkJJQVNDQU5DVEwiLAkJMHgyMCwgMHgyMCB9LAotCXsgIkFVVE9BQ0tFTiIsCQkweDQwLCAweDQwIH0sCi0JeyAiQklPU0NBTkNUTCIsCQkweDgwLCAweDgwIH0sCi0JeyAiT1BUSU9OTU9ERV9ERUZBVUxUUyIsMHgwMiwgMHgwMiB9Ci19OwotCi1pbnQKLWFoZF9vcHRpb25tb2RlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihPUFRJT05NT0RFX3BhcnNlX3RhYmxlLCA3LCAiT1BUSU9OTU9ERSIsCi0JICAgIDB4NGEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0JMS0NUTF9wYXJzZV90YWJsZVtdID0gewotCXsgIlNFTFdJREUiLAkJMHgwMiwgMHgwMiB9LAotCXsgIkVOQUIyMCIsCQkweDA0LCAweDA0IH0sCi0JeyAiRU5BQjQwIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJESUFHTEVET04iLAkJMHg0MCwgMHg0MCB9LAotCXsgIkRJQUdMRURFTiIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3NibGtjdGxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNCTEtDVExfcGFyc2VfdGFibGUsIDUsICJTQkxLQ1RMIiwKLQkgICAgMHg0YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTU1RBVDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJBUkJETyIsCQkweDAxLCAweDAxIH0sCiAJeyAiU1BJT1JEWSIsCQkweDAyLCAweDAyIH0sCkBAIC03MjgsMjMgKzI2OSw2IEBACiAJICAgIDB4NGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0lOVDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTFJBUkJETyIsCQkweDAxLCAweDAxIH0sCi0JeyAiQ0xSU1BJT1JEWSIsCQkweDAyLCAweDAyIH0sCi0JeyAiQ0xST1ZFUlJVTiIsCQkweDA0LCAweDA0IH0sCi0JeyAiQ0xSSU9FUlIiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkNMUlNFTElOR08iLAkJMHgxMCwgMHgxMCB9LAotCXsgIkNMUlNFTERJIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJDTFJTRUxETyIsCQkweDQwLCAweDQwIH0KLX07Ci0KLWludAotYWhkX2NscnNpbnQwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJTSU5UMF9wYXJzZV90YWJsZSwgNywgIkNMUlNJTlQwIiwKLQkgICAgMHg0YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJSRVFJTklUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJTVFJCMkZBU1QiLAkJMHgwMiwgMHgwMiB9LApAQCAtNzYzLDIzICsyODcsNiBAQAogCSAgICAweDRjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNJTlQxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0xSUkVRSU5JVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiQ0xSU1RSQjJGQVNUIiwJMHgwMiwgMHgwMiB9LAotCXsgIkNMUlNDU0lQRVJSIiwJMHgwNCwgMHgwNCB9LAotCXsgIkNMUkJVU0ZSRUUiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkNMUlNDU0lSU1RJIiwJMHgyMCwgMHgyMCB9LAotCXsgIkNMUkFUTk8iLAkJMHg0MCwgMHg0MCB9LAotCXsgIkNMUlNFTFRJTUVPIiwJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9jbHJzaW50MV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ0xSU0lOVDFfcGFyc2VfdGFibGUsIDcsICJDTFJTSU5UMSIsCi0JICAgIDB4NGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQyX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQlVTRlJFRV9MUU8iLAkweDQwLCAweGMwIH0sCiAJeyAiQlVTRlJFRV9ERkYwIiwJMHg4MCwgMHhjMCB9LApAQCAtODAwLDIwICszMDcsNiBAQAogCSAgICAweDRkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNJTlQyX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0xSRE1BRE9ORSIsCQkweDAxLCAweDAxIH0sCi0JeyAiQ0xSU0RPTkUiLAkJMHgwMiwgMHgwMiB9LAotCXsgIkNMUldJREVfUkVTIiwJMHgwNCwgMHgwNCB9LAotCXsgIkNMUk5PTlBBQ0tSRVEiLAkweDIwLCAweDIwIH0KLX07Ci0KLWludAotYWhkX2NscnNpbnQyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJTSU5UMl9wYXJzZV90YWJsZSwgNCwgIkNMUlNJTlQyIiwKLQkgICAgMHg0ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBQRVJSRElBR19wYXJzZV90YWJsZVtdID0gewogCXsgIkRURVJSIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJER0ZPUk1FUlIiLAkJMHgwMiwgMHgwMiB9LApAQCAtODMzLDI2ICszMjYsMTIgQEAKIH0KIAogaW50Ci1haGRfbHFpc3RhdGVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMUUlTVEFURSIsCi0JICAgIDB4NGUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX3NvZmZjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTT0ZGQ05UIiwKIAkgICAgMHg0ZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotaW50Ci1haGRfbHFvc3RhdGVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMUU9TVEFURSIsCi0JICAgIDB4NGYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFJU1RBVDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMUUlBVE5DTUQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkxRSUFUTkxRIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTg2OSw1NiArMzQ4LDYgQEAKIAkgICAgMHg1MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUUlNT0RFMF9wYXJzZV90YWJsZVtdID0gewotCXsgIkVOTFFJQVROQ01EIiwJMHgwMSwgMHgwMSB9LAotCXsgIkVOTFFJQVROTFEiLAkJMHgwMiwgMHgwMiB9LAotCXsgIkVOTFFJQkFETFFUIiwJMHgwNCwgMHgwNCB9LAotCXsgIkVOTFFJQ1JDVDIiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkVOTFFJQ1JDVDEiLAkJMHgxMCwgMHgxMCB9LAotCXsgIkVOTFFJQVROUUFTSyIsCTB4MjAsIDB4MjAgfQotfTsKLQotaW50Ci1haGRfbHFpbW9kZTBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKExRSU1PREUwX3BhcnNlX3RhYmxlLCA2LCAiTFFJTU9ERTAiLAotCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUkxRSUlOVDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTFJMUUlBVE5DTUQiLAkweDAxLCAweDAxIH0sCi0JeyAiQ0xSTFFJQVROTFEiLAkweDAyLCAweDAyIH0sCi0JeyAiQ0xSTFFJQkFETFFUIiwJMHgwNCwgMHgwNCB9LAotCXsgIkNMUkxRSUNSQ1QyIiwJMHgwOCwgMHgwOCB9LAotCXsgIkNMUkxRSUNSQ1QxIiwJMHgxMCwgMHgxMCB9LAotCXsgIkNMUkxRSUFUTlFBUyIsCTB4MjAsIDB4MjAgfQotfTsKLQotaW50Ci1haGRfY2xybHFpaW50MF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ0xSTFFJSU5UMF9wYXJzZV90YWJsZSwgNiwgIkNMUkxRSUlOVDAiLAotCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRSU1PREUxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiRU5MUUlPVkVSSV9OTFEiLAkweDAxLCAweDAxIH0sCi0JeyAiRU5MUUlPVkVSSV9MUSIsCTB4MDIsIDB4MDIgfSwKLQl7ICJFTkxRSUJBRExRSSIsCTB4MDQsIDB4MDQgfSwKLQl7ICJFTkxRSUNSQ0lfTkxRIiwJMHgwOCwgMHgwOCB9LAotCXsgIkVOTFFJQ1JDSV9MUSIsCTB4MTAsIDB4MTAgfSwKLQl7ICJFTkxJUUFCT1JUIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJFTkxRSVBIQVNFX05MUSIsCTB4NDAsIDB4NDAgfSwKLQl7ICJFTkxRSVBIQVNFX0xRIiwJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9scWltb2RlMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTFFJTU9ERTFfcGFyc2VfdGFibGUsIDgsICJMUUlNT0RFMSIsCi0JICAgIDB4NTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFJU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMUUlPVkVSSV9OTFEiLAkweDAxLCAweDAxIH0sCiAJeyAiTFFJT1ZFUklfTFEiLAkweDAyLCAweDAyIH0sCkBAIC05MzcsMjQgKzM2Niw2IEBACiAJICAgIDB4NTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSTFFJSU5UMV9wYXJzZV90YWJsZVtdID0gewotCXsgIkNMUkxRSU9WRVJJX05MUSIsCTB4MDEsIDB4MDEgfSwKLQl7ICJDTFJMUUlPVkVSSV9MUSIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDTFJMUUlCQURMUUkiLAkweDA0LCAweDA0IH0sCi0JeyAiQ0xSTFFJQ1JDSV9OTFEiLAkweDA4LCAweDA4IH0sCi0JeyAiQ0xSTFFJQ1JDSV9MUSIsCTB4MTAsIDB4MTAgfSwKLQl7ICJDTFJMSVFBQk9SVCIsCTB4MjAsIDB4MjAgfSwKLQl7ICJDTFJMUUlQSEFTRV9OTFEiLAkweDQwLCAweDQwIH0sCi0JeyAiQ0xSTFFJUEhBU0VfTFEiLAkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX2NscmxxaWludDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKENMUkxRSUlOVDFfcGFyc2VfdGFibGUsIDgsICJDTFJMUUlJTlQxIiwKLQkgICAgMHg1MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUUlTVEFUMl9wYXJzZV90YWJsZVtdID0gewogCXsgIkxRSUdTQVZBSUwiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkxRSVNUT1BDTUQiLAkJMHgwMiwgMHgwMiB9LApAQCAtOTg1LDMwICszOTYsNiBAQAogCSAgICAweDUzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNJTU9ERTNfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJFTk9TUkFNUEVSUiIsCTB4MDEsIDB4MDEgfSwKLQl7ICJFTk5UUkFNUEVSUiIsCTB4MDIsIDB4MDIgfQotfTsKLQotaW50Ci1haGRfc2ltb2RlM19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0lNT0RFM19wYXJzZV90YWJsZSwgMiwgIlNJTU9ERTMiLAotCSAgICAweDUzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNJTlQzX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0xST1NSQU1QRVJSIiwJMHgwMSwgMHgwMSB9LAotCXsgIkNMUk5UUkFNUEVSUiIsCTB4MDIsIDB4MDIgfQotfTsKLQotaW50Ci1haGRfY2xyc2ludDNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKENMUlNJTlQzX3BhcnNlX3RhYmxlLCAyLCAiQ0xSU0lOVDMiLAotCSAgICAweDUzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRT1NUQVQwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTFFPVENSQyIsCQkweDAxLCAweDAxIH0sCiAJeyAiTFFPQVROUEtUIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTEwMjQsNTEgKzQxMSw2IEBACiAJICAgIDB4NTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSTFFPSU5UMF9wYXJzZV90YWJsZVtdID0gewotCXsgIkNMUkxRT1RDUkMiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkNMUkxRT0FUTlBLVCIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDTFJMUU9BVE5MUSIsCTB4MDQsIDB4MDQgfSwKLQl7ICJDTFJMUU9TVE9QVDIiLAkweDA4LCAweDA4IH0sCi0JeyAiQ0xSTFFPVEFSR1NDQlBFUlIiLAkweDEwLCAweDEwIH0KLX07Ci0KLWludAotYWhkX2Nscmxxb2ludDBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKENMUkxRT0lOVDBfcGFyc2VfdGFibGUsIDUsICJDTFJMUU9JTlQwIiwKLQkgICAgMHg1NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUU9NT0RFMF9wYXJzZV90YWJsZVtdID0gewotCXsgIkVOTFFPVENSQyIsCQkweDAxLCAweDAxIH0sCi0JeyAiRU5MUU9BVE5QS1QiLAkweDAyLCAweDAyIH0sCi0JeyAiRU5MUU9BVE5MUSIsCQkweDA0LCAweDA0IH0sCi0JeyAiRU5MUU9TVE9QVDIiLAkweDA4LCAweDA4IH0sCi0JeyAiRU5MUU9UQVJHU0NCUEVSUiIsCTB4MTAsIDB4MTAgfQotfTsKLQotaW50Ci1haGRfbHFvbW9kZTBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKExRT01PREUwX3BhcnNlX3RhYmxlLCA1LCAiTFFPTU9ERTAiLAotCSAgICAweDU0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRT01PREUxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiRU5MUU9QSEFDSEdJTlBLVCIsCTB4MDEsIDB4MDEgfSwKLQl7ICJFTkxRT0JVU0ZSRUUiLAkweDAyLCAweDAyIH0sCi0JeyAiRU5MUU9CQURRQVMiLAkweDA0LCAweDA0IH0sCi0JeyAiRU5MUU9TVE9QSTIiLAkweDA4LCAweDA4IH0sCi0JeyAiRU5MUU9JTklUU0NCUEVSUiIsCTB4MTAsIDB4MTAgfQotfTsKLQotaW50Ci1haGRfbHFvbW9kZTFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKExRT01PREUxX3BhcnNlX3RhYmxlLCA1LCAiTFFPTU9ERTEiLAotCSAgICAweDU1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRT1NUQVQxX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTFFPUEhBQ0hHSU5QS1QiLAkweDAxLCAweDAxIH0sCiAJeyAiTFFPQlVTRlJFRSIsCQkweDAyLCAweDAyIH0sCkBAIC0xMDg0LDIxICs0MjYsNiBAQAogCSAgICAweDU1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUkxRT0lOVDFfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTFJMUU9QSEFDSEdJTlBLVCIsCTB4MDEsIDB4MDEgfSwKLQl7ICJDTFJMUU9CVVNGUkVFIiwJMHgwMiwgMHgwMiB9LAotCXsgIkNMUkxRT0JBRFFBUyIsCTB4MDQsIDB4MDQgfSwKLQl7ICJDTFJMUU9TVE9QSTIiLAkweDA4LCAweDA4IH0sCi0JeyAiQ0xSTFFPSU5JVFNDQlBFUlIiLAkweDEwLCAweDEwIH0KLX07Ci0KLWludAotYWhkX2Nscmxxb2ludDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKENMUkxRT0lOVDFfcGFyc2VfdGFibGUsIDUsICJDTFJMUU9JTlQxIiwKLQkgICAgMHg1NSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUU9TVEFUMl9wYXJzZV90YWJsZVtdID0gewogCXsgIkxRT1NUT1AwIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJMUU9QSEFDSEdPVVRQS1QiLAkweDAyLCAweDAyIH0sCkBAIC0xMTEzLDEzICs0NDAsNiBAQAogCSAgICAweDU2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9vc19zcGFjZV9jbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPU19TUEFDRV9DTlQiLAotCSAgICAweDU2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNJTU9ERTFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFTlJFUUlOSVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkVOU1RSQjJGQVNUIiwJMHgwMiwgMHgwMiB9LApAQCAtMTEzOCwxMyArNDU4LDYgQEAKIAkgICAgMHg1NywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotaW50Ci1haGRfZ3NmaWZvX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiR1NGSUZPIiwKLQkgICAgMHg1OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBERkZTWEZSQ1RMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiUlNUQ0hOIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDTFJDSE4iLAkJMHgwMiwgMHgwMiB9LApAQCAtMTE1OSw0NCArNDcyLDYgQEAKIAkgICAgMHg1YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUU9TQ1NDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJMUU9OT0NIS09WRVIiLAkweDAxLCAweDAxIH0sCi0JeyAiTFFPTk9IT0xETEFDSyIsCTB4MDIsIDB4MDIgfSwKLQl7ICJMUU9CVVNFVERMWSIsCTB4NDAsIDB4NDAgfSwKLQl7ICJMUU9IMkFfVkVSU0lPTiIsCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfbHFvc2NzY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihMUU9TQ1NDVExfcGFyc2VfdGFibGUsIDQsICJMUU9TQ1NDVEwiLAotCSAgICAweDVhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9uZXh0c2NiX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTkVYVFNDQiIsCi0JICAgIDB4NWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0VRSU5UU1JDX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0xSQ0ZHNFRDTUQiLAkweDAxLCAweDAxIH0sCi0JeyAiQ0xSQ0ZHNElDTUQiLAkweDAyLCAweDAyIH0sCi0JeyAiQ0xSQ0ZHNFRTVEFUIiwJMHgwNCwgMHgwNCB9LAotCXsgIkNMUkNGRzRJU1RBVCIsCTB4MDgsIDB4MDggfSwKLQl7ICJDTFJDRkc0REFUQSIsCTB4MTAsIDB4MTAgfSwKLQl7ICJDTFJTQVZFUFRSUyIsCTB4MjAsIDB4MjAgfSwKLQl7ICJDTFJDVFhURE9ORSIsCTB4NDAsIDB4NDAgfQotfTsKLQotaW50Ci1haGRfY2xyc2VxaW50c3JjX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJTRVFJTlRTUkNfcGFyc2VfdGFibGUsIDcsICJDTFJTRVFJTlRTUkMiLAotCSAgICAweDViLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUUlOVFNSQ19wYXJzZV90YWJsZVtdID0gewogCXsgIkNGRzRUQ01EIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDRkc0SUNNRCIsCQkweDAyLCAweDAyIH0sCkBAIC0xMjMxLDEzICs1MDYsNiBAQAogCSAgICAweDVjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9jdXJyc2NiX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ1VSUlNDQiIsCi0JICAgIDB4NWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTURGRlNUQVRfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJGSUZPRlJFRSIsCQkweDAxLCAweDAxIH0sCiAJeyAiREFUQUlORklGTyIsCQkweDAyLCAweDAyIH0sCkBAIC0xMjU2LDMwOCArNTI0LDEyIEBACiB9CiAKIGludAotYWhkX2xhc3RzY2JfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMQVNUU0NCIiwKLQkgICAgMHg1ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2hhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0hBRERSIiwKLQkgICAgMHg2MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfbmVnb2FkZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJORUdPQUREUiIsCi0JICAgIDB4NjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX25lZ3BlcmlvZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk5FR1BFUklPRCIsCi0JICAgIDB4NjEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX25lZ29mZnNldF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk5FR09GRlNFVCIsCi0JICAgIDB4NjIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTkVHUFBST1BUU19wYXJzZV90YWJsZVtdID0gewotCXsgIlBQUk9QVF9JVVQiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlBQUk9QVF9EVCIsCQkweDAyLCAweDAyIH0sCi0JeyAiUFBST1BUX1FBUyIsCQkweDA0LCAweDA0IH0sCi0JeyAiUFBST1BUX1BBQ0UiLAkweDA4LCAweDA4IH0KLX07Ci0KLWludAotYWhkX25lZ3Bwcm9wdHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5FR1BQUk9QVFNfcGFyc2VfdGFibGUsIDQsICJORUdQUFJPUFRTIiwKLQkgICAgMHg2MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBORUdDT05PUFRTX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiV0lERVhGRVIiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkVOQVVUT0FUTk8iLAkJMHgwMiwgMHgwMiB9LAotCXsgIkVOQVVUT0FUTkkiLAkJMHgwNCwgMHgwNCB9LAotCXsgIkVOU0xPV0NSQyIsCQkweDA4LCAweDA4IH0sCi0JeyAiUlRJX09WUkRUUk4iLAkweDEwLCAweDEwIH0sCi0JeyAiUlRJX1dSVERJUyIsCQkweDIwLCAweDIwIH0sCi0JeyAiRU5TTkFQU0hPVCIsCQkweDQwLCAweDQwIH0KLX07Ci0KLWludAotYWhkX25lZ2Nvbm9wdHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5FR0NPTk9QVFNfcGFyc2VfdGFibGUsIDcsICJORUdDT05PUFRTIiwKLQkgICAgMHg2NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfYW5uZXhjb2xfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTk5FWENPTCIsCi0JICAgIDB4NjUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2FubmV4ZGF0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQU5ORVhEQVQiLAotCSAgICAweDY2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDU0NIS05fcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJMU1RTR0NMUkRJUyIsCTB4MDEsIDB4MDEgfSwKLQl7ICJTSFZBTElEU1RESVMiLAkweDAyLCAweDAyIH0sCi0JeyAiREZGQUNUQ0xSIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTRE9ORU1TS0RJUyIsCTB4MDgsIDB4MDggfSwKLQl7ICJXSURFUkVTRU4iLAkJMHgxMCwgMHgxMCB9LAotCXsgIkNVUlJGSUZPREVGIiwJMHgyMCwgMHgyMCB9LAotCXsgIlNUU0VMU0tJRERJUyIsCTB4NDAsIDB4NDAgfSwKLQl7ICJCSURJQ0hLRElTIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfc2NzY2hrbl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0NTQ0hLTl9wYXJzZV90YWJsZSwgOCwgIlNDU0NIS04iLAotCSAgICAweDY2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9pb3duaWRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJJT1dOSUQiLAotCSAgICAweDY3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zaGNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNIQ05UIiwKLQkgICAgMHg2OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfdG93bmlkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiVE9XTklEIiwKLQkgICAgMHg2OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGRfc2Vsb2lkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0VMT0lEIiwKIAkgICAgMHg2YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotaW50Ci1haGRfaGFkZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIQUREUiIsCi0JICAgIDB4NzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2hjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIQ05UIiwKLQkgICAgMHg3OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2doYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNHSEFERFIiLAotCSAgICAweDdjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zY2JoYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQkhBRERSIiwKLQkgICAgMHg3YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2doY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dIQ05UIiwKLQkgICAgMHg4NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2NiaGNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQkhDTlQiLAotCSAgICAweDg0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERGRl9USFJTSF9wYXJzZV90YWJsZVtdID0gewotCXsgIldSX0RGVEhSU0hfTUlOIiwJMHgwMCwgMHg3MCB9LAotCXsgIlJEX0RGVEhSU0hfTUlOIiwJMHgwMCwgMHgwNyB9LAotCXsgIlJEX0RGVEhSU0hfMjUiLAkweDAxLCAweDA3IH0sCi0JeyAiUkRfREZUSFJTSF81MCIsCTB4MDIsIDB4MDcgfSwKLQl7ICJSRF9ERlRIUlNIXzYzIiwJMHgwMywgMHgwNyB9LAotCXsgIlJEX0RGVEhSU0hfNzUiLAkweDA0LCAweDA3IH0sCi0JeyAiUkRfREZUSFJTSF84NSIsCTB4MDUsIDB4MDcgfSwKLQl7ICJSRF9ERlRIUlNIXzkwIiwJMHgwNiwgMHgwNyB9LAotCXsgIlJEX0RGVEhSU0hfTUFYIiwJMHgwNywgMHgwNyB9LAotCXsgIldSX0RGVEhSU0hfMjUiLAkweDEwLCAweDcwIH0sCi0JeyAiV1JfREZUSFJTSF81MCIsCTB4MjAsIDB4NzAgfSwKLQl7ICJXUl9ERlRIUlNIXzYzIiwJMHgzMCwgMHg3MCB9LAotCXsgIldSX0RGVEhSU0hfNzUiLAkweDQwLCAweDcwIH0sCi0JeyAiV1JfREZUSFJTSF84NSIsCTB4NTAsIDB4NzAgfSwKLQl7ICJXUl9ERlRIUlNIXzkwIiwJMHg2MCwgMHg3MCB9LAotCXsgIldSX0RGVEhSU0hfTUFYIiwJMHg3MCwgMHg3MCB9LAotCXsgIlJEX0RGVEhSU0giLAkJMHgwNywgMHgwNyB9LAotCXsgIldSX0RGVEhSU0giLAkJMHg3MCwgMHg3MCB9Ci19OwotCi1pbnQKLWFoZF9kZmZfdGhyc2hfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKERGRl9USFJTSF9wYXJzZV90YWJsZSwgMTgsICJERkZfVEhSU0giLAotCSAgICAweDg4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFBDSVhDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTVBBQkNESVMiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlRTQ1NFUlJFTiIsCQkweDAyLCAweDAyIH0sCi0JeyAiU1JTUERQRUVOIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTUExUU1RBRElTIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJTUExUU01BRElTIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJVTkVYUFNDSUVOIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJTRVJSUFVMU0UiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9wY2l4Y3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihQQ0lYQ1RMX3BhcnNlX3RhYmxlLCA3LCAiUENJWENUTCIsCi0JICAgIDB4OTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRENIU1BMVFNUQVQwX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiUlhTUExUUlNQIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJSWFNDRU1TRyIsCQkweDAyLCAweDAyIH0sCi0JeyAiUlhPVlJVTiIsCQkweDA0LCAweDA0IH0sCi0JeyAiQ05UTk9UQ01QTFQiLAkweDA4LCAweDA4IH0sCi0JeyAiU0NEQVRCVUNLRVQiLAkweDEwLCAweDEwIH0sCi0JeyAiU0NBREVSUiIsCQkweDIwLCAweDIwIH0sCi0JeyAiU0NCQ0VSUiIsCQkweDQwLCAweDQwIH0sCi0JeyAiU1RBRVRFUk0iLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9kY2hzcGx0c3RhdDBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKERDSFNQTFRTVEFUMF9wYXJzZV90YWJsZSwgOCwgIkRDSFNQTFRTVEFUMCIsCi0JICAgIDB4OTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRENIU1BMVFNUQVQxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiUlhEQVRBQlVDS0VUIiwJMHgwMSwgMHgwMSB9Ci19OwotCi1pbnQKLWFoZF9kY2hzcGx0c3RhdDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKERDSFNQTFRTVEFUMV9wYXJzZV90YWJsZSwgMSwgIkRDSFNQTFRTVEFUMSIsCi0JICAgIDB4OTcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0dTUExUU1RBVDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJSWFNQTFRSU1AiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlJYU0NFTVNHIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJSWE9WUlVOIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJDTlROT1RDTVBMVCIsCTB4MDgsIDB4MDggfSwKLQl7ICJTQ0RBVEJVQ0tFVCIsCTB4MTAsIDB4MTAgfSwKLQl7ICJTQ0FERVJSIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJTQ0JDRVJSIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJTVEFFVEVSTSIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3Nnc3BsdHN0YXQwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTR1NQTFRTVEFUMF9wYXJzZV90YWJsZSwgOCwgIlNHU1BMVFNUQVQwIiwKLQkgICAgMHg5ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR1NQTFRTVEFUMV9wYXJzZV90YWJsZVtdID0gewotCXsgIlJYREFUQUJVQ0tFVCIsCTB4MDEsIDB4MDEgfQotfTsKLQotaW50Ci1haGRfc2dzcGx0c3RhdDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNHU1BMVFNUQVQxX3BhcnNlX3RhYmxlLCAxLCAiU0dTUExUU1RBVDEiLAotCSAgICAweDlmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERGMFBDSVNUQVRfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJEUFIiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlRXQVRFUlIiLAkJMHgwMiwgMHgwMiB9LAotCXsgIlJEUEVSUiIsCQkweDA0LCAweDA0IH0sCi0JeyAiU0NBQVBFUlIiLAkJMHgwOCwgMHgwOCB9LAotCXsgIlJUQSIsCQkweDEwLCAweDEwIH0sCi0JeyAiUk1BIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJTU0UiLAkJMHg0MCwgMHg0MCB9LAotCXsgIkRQRSIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX2RmMHBjaXN0YXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKERGMFBDSVNUQVRfcGFyc2VfdGFibGUsIDgsICJERjBQQ0lTVEFUIiwKLQkgICAgMHhhMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfcmVnMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlJFRzAiLAotCSAgICAweGEwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9yZWdfaXNyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUkVHX0lTUiIsCi0JICAgIDB4YTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0dfU1RBVEVfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTRUdTX0FWQUlMIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJMT0FESU5HX05FRURFRCIsCTB4MDIsIDB4MDIgfSwKQEAgLTE1NzEsNTQgKzU0Myw2IEBACiAJICAgIDB4YTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgVEFSR1BDSVNUQVRfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJUV0FURVJSIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJTVEEiLAkJMHgwOCwgMHgwOCB9LAotCXsgIlNTRSIsCQkweDQwLCAweDQwIH0sCi0JeyAiRFBFIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfdGFyZ3BjaXN0YXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFRBUkdQQ0lTVEFUX3BhcnNlX3RhYmxlLCA0LCAiVEFSR1BDSVNUQVQiLAotCSAgICAweGE3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zY2JwdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JQVFIiLAotCSAgICAweGE4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQkFVVE9QVFJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTQ0JQVFJfT0ZGIiwJCTB4MDcsIDB4MDcgfSwKLQl7ICJTQ0JQVFJfQUREUiIsCTB4MzgsIDB4MzggfSwKLQl7ICJBVVNDQlBUUl9FTiIsCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfc2NiYXV0b3B0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0NCQVVUT1BUUl9wYXJzZV90YWJsZSwgMywgIlNDQkFVVE9QVFIiLAotCSAgICAweGFiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9jY3NnYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDU0dBRERSIiwKLQkgICAgMHhhYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfY2NzY2JhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTQ0JBRERSIiwKLQkgICAgMHhhYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDQ1NDQkNUTF9wYXJzZV90YWJsZVtdID0gewogCXsgIkNDU0NCUkVTRVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkNDU0NCRElSIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTE2NTEsMTM4ICs1NzUsNiBAQAogCSAgICAweGFkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9jY3NncmFtX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTR1JBTSIsCi0JICAgIDB4YjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2Njc2NicmFtX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTQ0JSQU0iLAotCSAgICAweGIwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9icmRkYXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJCUkREQVQiLAotCSAgICAweGI4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IEJSRENUTF9wYXJzZV90YWJsZVtdID0gewotCXsgIkJSRFNUQiIsCQkweDAxLCAweDAxIH0sCi0JeyAiQlJEUlciLAkJMHgwMiwgMHgwMiB9LAotCXsgIkJSREVOIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJCUkRBRERSIiwJCTB4MzgsIDB4MzggfSwKLQl7ICJGTFhBUkJSRVEiLAkJMHg0MCwgMHg0MCB9LAotCXsgIkZMWEFSQkFDSyIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX2JyZGN0bF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQlJEQ1RMX3BhcnNlX3RhYmxlLCA2LCAiQlJEQ1RMIiwKLQkgICAgMHhiOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2VlYWRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0VFQURSIiwKLQkgICAgMHhiYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2VlZGF0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0VFREFUIiwKLQkgICAgMHhiYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRUVDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTRUVPUF9FUkFMIiwJCTB4NDAsIDB4NzAgfSwKLQl7ICJTRUVPUF9XUklURSIsCTB4NTAsIDB4NzAgfSwKLQl7ICJTRUVPUF9SRUFEIiwJCTB4NjAsIDB4NzAgfSwKLQl7ICJTRUVPUF9FUkFTRSIsCTB4NzAsIDB4NzAgfSwKLQl7ICJTRUVTVEFSVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiU0VFUlNUIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJTRUVPUENPREUiLAkJMHg3MCwgMHg3MCB9LAotCXsgIlNFRU9QX0VXRU4iLAkJMHg0MCwgMHg0MCB9LAotCXsgIlNFRU9QX1dBTEwiLAkJMHg0MCwgMHg0MCB9LAotCXsgIlNFRU9QX0VXRFMiLAkJMHg0MCwgMHg0MCB9Ci19OwotCi1pbnQKLWFoZF9zZWVjdGxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNFRUNUTF9wYXJzZV90YWJsZSwgMTAsICJTRUVDVEwiLAotCSAgICAweGJlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFRVNUQVRfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTRUVTVEFSVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiU0VFQlVTWSIsCQkweDAyLCAweDAyIH0sCi0JeyAiU0VFQVJCQUNLIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJMREFMVElEX0wiLAkJMHgwOCwgMHgwOCB9LAotCXsgIlNFRU9QQ09ERSIsCQkweDcwLCAweDcwIH0sCi0JeyAiSU5JVF9ET05FIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfc2Vlc3RhdF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0VFU1RBVF9wYXJzZV90YWJsZSwgNiwgIlNFRVNUQVQiLAotCSAgICAweGJlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERTUERBVEFDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJYTUlUT0ZGU1RESVMiLAkweDAyLCAweDAyIH0sCi0JeyAiUkNWUk9GRlNURElTIiwJMHgwNCwgMHgwNCB9LAotCXsgIkRFU1FESVMiLAkJMHgxMCwgMHgxMCB9LAotCXsgIkJZUEFTU0VOQUIiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9kc3BkYXRhY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihEU1BEQVRBQ1RMX3BhcnNlX3RhYmxlLCA0LCAiRFNQREFUQUNUTCIsCi0JICAgIDB4YzEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2RmZGF0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZEQVQiLAotCSAgICAweGM0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERTUFNFTEVDVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkRTUFNFTCIsCQkweDFmLCAweDFmIH0sCi0JeyAiQVVUT0lOQ0VOIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfZHNwc2VsZWN0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihEU1BTRUxFQ1RfcGFyc2VfdGFibGUsIDIsICJEU1BTRUxFQ1QiLAotCSAgICAweGM0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFdSVEJJQVNDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJYTUlUTUFOVkFMIiwJCTB4M2YsIDB4M2YgfSwKLQl7ICJBVVRPWEJDRElTIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfd3J0Ymlhc2N0bF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoV1JUQklBU0NUTF9wYXJzZV90YWJsZSwgMiwgIldSVEJJQVNDVEwiLAotCSAgICAweGM1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUUNUTDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMT0FEUkFNIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJTRVFSRVNFVCIsCQkweDAyLCAweDAyIH0sCkBAIC0xODAxLDE4ICs1OTMsNiBAQAogCSAgICAweGQ2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IEZMQUdTX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0FSUlkiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlpFUk8iLAkJMHgwMiwgMHgwMiB9Ci19OwotCi1pbnQKLWFoZF9mbGFnc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoRkxBR1NfcGFyc2VfdGFibGUsIDIsICJGTEFHUyIsCi0JICAgIDB4ZDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VRSU5UQ1RMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiSVJFVCIsCQkweDAxLCAweDAxIH0sCiAJeyAiSU5UTUFTSzEiLAkJMHgwMiwgMHgwMiB9LApAQCAtMTgzMSwxMTggKzYxMSw2IEBACiB9CiAKIGludAotYWhkX3NlcXJhbV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFUVJBTSIsCi0JICAgIDB4ZGEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3ByZ21jbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJQUkdNQ05UIiwKLQkgICAgMHhkZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfYWNjdW1fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBQ0NVTSIsCi0JICAgIDB4ZTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3NpbmRleF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNJTkRFWCIsCi0JICAgIDB4ZTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2RpbmRleF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRJTkRFWCIsCi0JICAgIDB4ZTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2FsbG9uZXNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTExPTkVTIiwKLQkgICAgMHhlOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfYWxsemVyb3NfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTExaRVJPUyIsCi0JICAgIDB4ZWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX25vbmVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJOT05FIiwKLQkgICAgMHhlYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2luZGlyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0lORElSIiwKLQkgICAgMHhlYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfZGluZGlyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRElORElSIiwKLQkgICAgMHhlZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc3RhY2tfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTVEFDSyIsCi0JICAgIDB4ZjIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2ludHZlYzFfYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIklOVFZFQzFfQUREUiIsCi0JICAgIDB4ZjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2N1cmFkZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDVVJBRERSIiwKLQkgICAgMHhmNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfaW50dmVjMl9hZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSU5UVkVDMl9BRERSIiwKLQkgICAgMHhmNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfbG9uZ2ptcF9hZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTE9OR0pNUF9BRERSIiwKLQkgICAgMHhmOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfYWNjdW1fc2F2ZV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkFDQ1VNX1NBVkUiLAotCSAgICAweGZhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoZF9zcmFtX2Jhc2VfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTUkFNX0JBU0UiLApAQCAtMTk1MCw2OSArNjE4LDYgQEAKIH0KIAogaW50Ci1haGRfd2FpdGluZ19zY2JfdGFpbHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJXQUlUSU5HX1NDQl9UQUlMUyIsCi0JICAgIDB4MTAwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF93YWl0aW5nX3RpZF9oZWFkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiV0FJVElOR19USURfSEVBRCIsCi0JICAgIDB4MTIwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF93YWl0aW5nX3RpZF90YWlsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiV0FJVElOR19USURfVEFJTCIsCi0JICAgIDB4MTIyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9uZXh0X3F1ZXVlZF9zY2JfYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk5FWFRfUVVFVUVEX1NDQl9BRERSIiwKLQkgICAgMHgxMjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2NvbXBsZXRlX3NjYl9oZWFkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ09NUExFVEVfU0NCX0hFQUQiLAotCSAgICAweDEyOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfY29tcGxldGVfc2NiX2RtYWlucHJvZ19oZWFkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ09NUExFVEVfU0NCX0RNQUlOUFJPR19IRUFEIiwKLQkgICAgMHgxMmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2NvbXBsZXRlX2RtYV9zY2JfaGVhZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNPTVBMRVRFX0RNQV9TQ0JfSEVBRCIsCi0JICAgIDB4MTJjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9jb21wbGV0ZV9kbWFfc2NiX3RhaWxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDT01QTEVURV9ETUFfU0NCX1RBSUwiLAotCSAgICAweDEyZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfY29tcGxldGVfb25fcWZyZWV6ZV9oZWFkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ09NUExFVEVfT05fUUZSRUVaRV9IRUFEIiwKLQkgICAgMHgxMzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX3FmcmVlemVfY291bnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJRRlJFRVpFX0NPVU5UIiwKQEAgLTIwMzMsMzMgKzYzOCw2IEBACiAJICAgIDB4MTM2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9tc2dfb3V0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTVNHX09VVCIsCi0JICAgIDB4MTM3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERNQVBBUkFNU19wYXJzZV90YWJsZVtdID0gewotCXsgIkZJRk9SRVNFVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiRklGT0ZMVVNIIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJESVJFQ1RJT04iLAkJMHgwNCwgMHgwNCB9LAotCXsgIkhETUFFTiIsCQkweDA4LCAweDA4IH0sCi0JeyAiSERNQUVOQUNLIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJTRE1BRU4iLAkJMHgxMCwgMHgxMCB9LAotCXsgIlNETUFFTkFDSyIsCQkweDEwLCAweDEwIH0sCi0JeyAiU0NTSUVOIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJXSURFT0REIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJQUkVMT0FERU4iLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9kbWFwYXJhbXNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKERNQVBBUkFNU19wYXJzZV90YWJsZSwgMTAsICJETUFQQVJBTVMiLAotCSAgICAweDEzOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFfRkxBR1NfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJOT19ESVNDT05ORUNUIiwJMHgwMSwgMHgwMSB9LAogCXsgIlNQSEFTRV9QRU5ESU5HIiwJMHgwMiwgMHgwMiB9LApAQCAtMjA3OSwyMCArNjU3LDYgQEAKIAkgICAgMHgxMzksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhkX3NhdmVkX3Njc2lpZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNBVkVEX1NDU0lJRCIsCi0JICAgIDB4MTNhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zYXZlZF9sdW5fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQVZFRF9MVU4iLAotCSAgICAweDEzYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMQVNUUEhBU0VfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJQX0RBVEFPVVQiLAkJMHgwMCwgMHhlMCB9LAogCXsgIlBfREFUQU9VVF9EVCIsCTB4MjAsIDB4ZTAgfSwKQEAgLTIxMTYsOTYgKzY4MCw2IEBACiAJICAgIDB4MTNjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9xb3V0Zmlmb19lbnRyeV92YWxpZF90YWdfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJRT1VURklGT19FTlRSWV9WQUxJRF9UQUciLAotCSAgICAweDEzZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfa2VybmVsX3RxaW5wb3NfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJLRVJORUxfVFFJTlBPUyIsCi0JICAgIDB4MTNlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF90cWlucG9zX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiVFFJTlBPUyIsCi0JICAgIDB4MTNmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zaGFyZWRfZGF0YV9hZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0hBUkVEX0RBVEFfQUREUiIsCi0JICAgIDB4MTQwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9xb3V0Zmlmb19uZXh0X2FkZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJRT1VURklGT19ORVhUX0FERFIiLAotCSAgICAweDE0NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBBUkdfMV9wYXJzZV90YWJsZVtdID0gewotCXsgIkNPTlRfTVNHX0xPT1BfVEFSRyIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDT05UX01TR19MT09QX1JFQUQiLAkweDAzLCAweDAzIH0sCi0JeyAiQ09OVF9NU0dfTE9PUF9XUklURSIsMHgwNCwgMHgwNCB9LAotCXsgIkVYSVRfTVNHX0xPT1AiLAkweDA4LCAweDA4IH0sCi0JeyAiTVNHT1VUX1BIQVNFTUlTIiwJMHgxMCwgMHgxMCB9LAotCXsgIlNFTkRfUkVKIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJTRU5EX1NFTlNFIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJTRU5EX01TRyIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX2FyZ18xX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihBUkdfMV9wYXJzZV90YWJsZSwgOCwgIkFSR18xIiwKLQkgICAgMHgxNDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2FyZ18yX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQVJHXzIiLAotCSAgICAweDE0OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfbGFzdF9tc2dfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMQVNUX01TRyIsCi0JICAgIDB4MTRhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lTRVFfVEVNUExBVEVfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJBTFRTVElNIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJFTkFVVE9BVE5QIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJNQU5VQUxQIiwJCTB4MGMsIDB4MGMgfSwKLQl7ICJFTlJTRUxJIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJFTlNFTEkiLAkJMHgyMCwgMHgyMCB9LAotCXsgIk1BTlVBTENUTCIsCQkweDQwLCAweDQwIH0KLX07Ci0KLWludAotYWhkX3Njc2lzZXFfdGVtcGxhdGVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNDU0lTRVFfVEVNUExBVEVfcGFyc2VfdGFibGUsIDYsICJTQ1NJU0VRX1RFTVBMQVRFIiwKLQkgICAgMHgxNGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2luaXRpYXRvcl90YWdfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJJTklUSUFUT1JfVEFHIiwKLQkgICAgMHgxNGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VRX0ZMQUdTMl9wYXJzZV90YWJsZVtdID0gewogCXsgIlBFTkRJTkdfTUtfTUVTU0FHRSIsCTB4MDEsIDB4MDEgfSwKIAl7ICJUQVJHRVRfTVNHX1BFTkRJTkciLAkweDAyLCAweDAyIH0sCkBAIC0yMjIwLDYyICs2OTQsNiBAQAogfQogCiBpbnQKLWFoZF9hbGxvY2ZpZm9fc2NicHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQUxMT0NGSUZPX1NDQlBUUiIsCi0JICAgIDB4MTRlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9pbnRfY29hbGVzY2luZ190aW1lcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIklOVF9DT0FMRVNDSU5HX1RJTUVSIiwKLQkgICAgMHgxNTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2ludF9jb2FsZXNjaW5nX21heGNtZHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJJTlRfQ09BTEVTQ0lOR19NQVhDTURTIiwKLQkgICAgMHgxNTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2ludF9jb2FsZXNjaW5nX21pbmNtZHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJJTlRfQ09BTEVTQ0lOR19NSU5DTURTIiwKLQkgICAgMHgxNTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2NtZHNfcGVuZGluZ19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNNRFNfUEVORElORyIsCi0JICAgIDB4MTU0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9pbnRfY29hbGVzY2luZ19jbWRjb3VudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIklOVF9DT0FMRVNDSU5HX0NNRENPVU5UIiwKLQkgICAgMHgxNTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2xvY2FsX2hzX21haWxib3hfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMT0NBTF9IU19NQUlMQk9YIiwKLQkgICAgMHgxNTcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2NtZHNpemVfdGFibGVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTURTSVpFX1RBQkxFIiwKLQkgICAgMHgxNTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX21rX21lc3NhZ2Vfc2NiX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTUtfTUVTU0FHRV9TQ0IiLApAQCAtMjI5MCw1MyArNzA4LDEyIEBACiB9CiAKIGludAotYWhkX3NjYl9yZXNpZHVhbF9kYXRhY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1JFU0lEVUFMX0RBVEFDTlQiLAotCSAgICAweDE4MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGRfc2NiX2Jhc2VfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfQkFTRSIsCiAJICAgIDB4MTgwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9SRVNJRFVBTF9TR1BUUl9wYXJzZV90YWJsZVtdID0gewotCXsgIlNHX0xJU1RfTlVMTCIsCTB4MDEsIDB4MDEgfSwKLQl7ICJTR19PVkVSUlVOX1JFU0lEIiwJMHgwMiwgMHgwMiB9LAotCXsgIlNHX0FERFJfTUFTSyIsCTB4ZjgsIDB4ZjggfQotfTsKLQotaW50Ci1haGRfc2NiX3Jlc2lkdWFsX3NncHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTQ0JfUkVTSURVQUxfU0dQVFJfcGFyc2VfdGFibGUsIDMsICJTQ0JfUkVTSURVQUxfU0dQVFIiLAotCSAgICAweDE4NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2NiX3Njc2lfc3RhdHVzX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1NDU0lfU1RBVFVTIiwKLQkgICAgMHgxODgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3NjYl9zZW5zZV9idXNhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1NFTlNFX0JVU0FERFIiLAotCSAgICAweDE4YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2NiX3RhZ19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9UQUciLAotCSAgICAweDE5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ0JfQ09OVFJPTF9wYXJzZV90YWJsZVtdID0gewogCXsgIlNDQl9UQUdfVFlQRSIsCTB4MDMsIDB4MDMgfSwKIAl7ICJESVNDT05ORUNURUQiLAkweDA0LCAweDA0IH0sCkBAIC0yMzY2LDEwMyArNzQzLDMgQEAKIAkgICAgMHgxOTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0xVTl9wYXJzZV90YWJsZVtdID0gewotCXsgIkxJRCIsCQkweGZmLCAweGZmIH0KLX07Ci0KLWludAotYWhkX3NjYl9sdW5fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNDQl9MVU5fcGFyc2VfdGFibGUsIDEsICJTQ0JfTFVOIiwKLQkgICAgMHgxOTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX1RBU0tfQVRUUklCVVRFX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU0NCX1hGRVJMRU5fT0REIiwJMHgwMSwgMHgwMSB9Ci19OwotCi1pbnQKLWFoZF9zY2JfdGFza19hdHRyaWJ1dGVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNDQl9UQVNLX0FUVFJJQlVURV9wYXJzZV90YWJsZSwgMSwgIlNDQl9UQVNLX0FUVFJJQlVURSIsCi0JICAgIDB4MTk1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9DREJfTEVOX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU0NCX0NEQl9MRU5fUFRSIiwJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9zY2JfY2RiX2xlbl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0NCX0NEQl9MRU5fcGFyc2VfdGFibGUsIDEsICJTQ0JfQ0RCX0xFTiIsCi0JICAgIDB4MTk2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zY2JfdGFza19tYW5hZ2VtZW50X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1RBU0tfTUFOQUdFTUVOVCIsCi0JICAgIDB4MTk3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zY2JfZGF0YXB0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9EQVRBUFRSIiwKLQkgICAgMHgxOTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0RBVEFDTlRfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTR19ISUdIX0FERFJfQklUUyIsCTB4N2YsIDB4N2YgfSwKLQl7ICJTR19MQVNUX1NFRyIsCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfc2NiX2RhdGFjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNDQl9EQVRBQ05UX3BhcnNlX3RhYmxlLCAyLCAiU0NCX0RBVEFDTlQiLAotCSAgICAweDFhMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ0JfU0dQVFJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTR19MSVNUX05VTEwiLAkweDAxLCAweDAxIH0sCi0JeyAiU0dfRlVMTF9SRVNJRCIsCTB4MDIsIDB4MDIgfSwKLQl7ICJTR19TVEFUVVNfVkFMSUQiLAkweDA0LCAweDA0IH0KLX07Ci0KLWludAotYWhkX3NjYl9zZ3B0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0NCX1NHUFRSX3BhcnNlX3RhYmxlLCAzLCAiU0NCX1NHUFRSIiwKLQkgICAgMHgxYTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3NjYl9idXNhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX0JVU0FERFIiLAotCSAgICAweDFhOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2NiX25leHRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfTkVYVCIsCi0JICAgIDB4MWFjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zY2JfbmV4dDJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfTkVYVDIiLAotCSAgICAweDFhZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2NiX2Rpc2Nvbm5lY3RlZF9saXN0c19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9ESVNDT05ORUNURURfTElTVFMiLAotCSAgICAweDFiOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5yZWcgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZwppbmRleCAwZDJmNzYzLi45YTk2ZTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZwpAQCAtNTEsNiArNTEsMTcgQEAKICAqLwogCiAvKgorICogUmVnaXN0ZXJzIG1hcmtlZCAiZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlIiBhcmUgbm90ICh5ZXQpIHJlZmVyZW5jZWQKKyAqIGZyb20gdGhlIGRyaXZlciBjb2RlLCBhbmQgdGhpcyBrZXl3b3JkIGluaGliaXQgZ2VuZXJhdGlvbgorICogb2YgZGVidWcgY29kZSBmb3IgdGhlbS4KKyAqCisgKiBSRUdfUFJFVFRZX1BSSU5UIGNvbmZpZyB3aWxsIGNvbXBsYWluIGlmIGRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQorICogaXMgYWRkZWQgdG8gdGhlIHJlZ2lzdGVyIHdoaWNoIGlzIHJlZmVyZW5jZWQgaW4gdGhlIGRyaXZlci4KKyAqIFVucmVmZXJlbmNlZCByZWdpc3RlciB3aXRoIG5vIGRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZSB3aWxsIHJlc3VsdAorICogaW4gZGVhZCBjb2RlLiBObyB3YXJuaW5nIGlzIGlzc3VlZC4KKyAqLworCisvKgogICogU0NTSSBTZXF1ZW5jZSBDb250cm9sIChwLiAzLTExKS4KICAqIEVhY2ggYml0LCB3aGVuIHNldCBzdGFydHMgYSBzcGVjaWZpYyBTQ1NJIHNlcXVlbmNlIG9uIHRoZSBidXMKICAqLwpAQCAtOTcsNiArMTA4LDcgQEAKIAlmaWVsZAlFTlNUSU1FUgkweDA0CiAJZmllbGQJQUNUTkVHRU4JMHgwMgogCWZpZWxkCVNUUFdFTgkJMHgwMQkvKiBQb3dlcmVkIFRlcm1pbmF0aW9uICovCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0xNTUsNiArMTY3LDcgQEAKIAltYXNrCVBfTUVTR09VVAlDREl8TVNHSQogCW1hc2sJUF9TVEFUVVMJQ0RJfElPSQogCW1hc2sJUF9NRVNHSU4JQ0RJfElPSXxNU0dJCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qIApAQCAtMTk0LDYgKzIwNyw3IEBACiAJICovCiAJYWxpYXMJU0NTSU9GRlNFVAogCW1hc2sJU09GU19VTFRSQTIJMHg3ZgkJLyogU3luYyBvZmZzZXQgVTIgY2hpcHMgKi8KKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTIwNSw2ICsyMTksNyBAQAogcmVnaXN0ZXIgU0NTSURBVEwgewogCWFkZHJlc3MJCQkweDAwNgogCWFjY2Vzc19tb2RlIFJXCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIHJlZ2lzdGVyIFNDU0lEQVRIIHsKQEAgLTIyMyw2ICsyMzgsNyBAQAogCWFkZHJlc3MJCQkweDAwOAogCXNpemUJMwogCWFjY2Vzc19tb2RlIFJXCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qIEFMVF9NT0RFIHJlZ2lzdGVycyAoVWx0cmEyIGFuZCBVbHRyYTE2MCBjaGlwcykgKi8KQEAgLTI0OCw2ICsyNjQsNyBAQAogCWZpZWxkCUFVVE9fTVNHT1VUX0RFCQkweDAyCiAJZmllbGQJRElTX01TR0lOX0RVQUxFREdFCTB4MDEKIAltYXNrCU9QVElPTk1PREVfREVGQVVMVFMJQVVUT19NU0dPVVRfREV8RElTX01TR0lOX0RVQUxFREdFCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qIEFMVF9NT0RFIHJlZ2lzdGVyIG9uIFVsdHJhMTYwIGNoaXBzICovCkBAIC0yNTYsNiArMjczLDcgQEAKIAlzaXplCTIKIAlhY2Nlc3NfbW9kZSBSVwogCWNvdW50CQkyCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC0yNzEsNiArMjg5LDcgQEAKIAlmaWVsZAlDTFJTV1JBUAkweDA4CiAJZmllbGQJQ0xSSU9FUlIJMHgwOAkvKiBVbHRyYTIgT25seSAqLwogCWZpZWxkCUNMUlNQSU9SRFkJMHgwMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMzA2LDYgKzMyNSw3IEBACiAJZmllbGQJQ0xSU0NTSVBFUlIJMHgwNAogCWZpZWxkCUNMUlBIQVNFQ0hHCTB4MDIKIAlmaWVsZAlDTFJSRVFJTklUCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTM2MCw2ICszODAsNyBAQAogCWFjY2Vzc19tb2RlIFJXCiAJbWFzawlUSUQJCTB4ZjAJCS8qIFRhcmdldCBJRCBtYXNrICovCiAJbWFzawlPSUQJCTB4MGYJCS8qIE91ciBJRCBtYXNrICovCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC00MjUsNiArNDQ2LDcgQEAKIAlhZGRyZXNzCQkJMHgwMTQKIAlzaXplCTQKIAlhY2Nlc3NfbW9kZSBSTworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtNDQxLDYgKzQ2Myw3IEBACiAJZmllbGQJU1RBR0UyCQkweDAyCiAJZmllbGQJU1RBR0UxCQkweDAxCiAJYWxpYXMJVEFSR0lESU4KKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTQ1Myw2ICs0NzYsNyBAQAogCWFjY2Vzc19tb2RlIFJXCiAJbWFzawlTRUxJRF9NQVNLCTB4ZjAKIAlmaWVsZAlPTkVCSVQJCTB4MDgKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgU0NBTUNUTCB7CkBAIC00NzMsNiArNDk3LDcgQEAKIAlzaXplCQkJMgogCWFjY2Vzc19tb2RlIFJXCiAJY291bnQJCTE0CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC00OTUsNiArNTIwLDcgQEAKIAlmaWVsZAlFRVBST00JCTB4MDQJLyogV3JpdGFibGUgZXh0ZXJuYWwgQklPUyBST00gKi8KIAlmaWVsZAlST00JCTB4MDIJLyogTG9naWMgZm9yIGFjY2Vzc2luZyBleHRlcm5hbCBST00gKi8KIAlmaWVsZAlTU1BJT0NQUwkweDAxCS8qIFRlcm1pbmF0aW9uIGFuZCBjYWJsZSBkZXRlY3Rpb24gKi8KKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQlJEQ1RMCXsKQEAgLTUxNCw2ICs1NDAsNyBAQAogCWZpZWxkCUJSRERBVDIJCTB4MDQKIAlmaWVsZAlCUkRSV19VTFRSQTIJMHgwMgogCWZpZWxkCUJSRFNUQl9VTFRSQTIJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtNTUxLDYgKzU3OCw3IEBACiAJZmllbGQJU0VFQ0sJCTB4MDQKIAlmaWVsZAlTRUVETwkJMHgwMgogCWZpZWxkCVNFRURJCQkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAvKgogICogU0NTSSBCbG9jayBDb250cm9sIChwLiAzLTMyKQpAQCAtNjAxLDYgKzYyOSw3IEBACiAJYWRkcmVzcwkJCTB4MDYxCiAJYWNjZXNzX21vZGUgUlcKIAljb3VudAkJMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtNjEwLDYgKzYzOSw3IEBACiByZWdpc3RlciBTRVFBRERSMCB7CiAJYWRkcmVzcwkJCTB4MDYyCiAJYWNjZXNzX21vZGUgUlcKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgU0VRQUREUjEgewpAQCAtNjE3LDYgKzY0Nyw3IEBACiAJYWNjZXNzX21vZGUgUlcKIAljb3VudAkJOAogCW1hc2sJU0VRQUREUjFfTUFTSwkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qCkBAIC02MjcsMzUgKzY1OCw0MSBAQAogCWFkZHJlc3MJCQkweDA2NAogCWFjY2Vzc19tb2RlIFJXCiAJYWNjdW11bGF0b3IKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgU0lOREVYCXsKIAlhZGRyZXNzCQkJMHgwNjUKIAlhY2Nlc3NfbW9kZSBSVwogCXNpbmRleAorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBESU5ERVggewogCWFkZHJlc3MJCQkweDA2NgogCWFjY2Vzc19tb2RlIFJXCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIHJlZ2lzdGVyIEFMTE9ORVMgewogCWFkZHJlc3MJCQkweDA2OQogCWFjY2Vzc19tb2RlIFJPCiAJYWxsb25lcworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBBTExaRVJPUyB7CiAJYWRkcmVzcwkJCTB4MDZhCiAJYWNjZXNzX21vZGUgUk8KIAlhbGx6ZXJvcworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBOT05FIHsKIAlhZGRyZXNzCQkJMHgwNmEKIAlhY2Nlc3NfbW9kZSBXTwogCW5vbmUKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgRkxBR1MgewpAQCAtNjY0LDE2ICs3MDEsMTkgQEAKIAljb3VudAkJMTgKIAlmaWVsZAlaRVJPCQkweDAyCiAJZmllbGQJQ0FSUlkJCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgU0lORElSCXsKIAlhZGRyZXNzCQkJMHgwNmMKIAlhY2Nlc3NfbW9kZSBSTworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBESU5ESVIJIHsKIAlhZGRyZXNzCQkJMHgwNmQKIAlhY2Nlc3NfbW9kZSBXTworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBGVU5DVElPTjEgewpAQCAtNjg1LDYgKzcyNSw3IEBACiAJYWRkcmVzcwkJCTB4MDZmCiAJYWNjZXNzX21vZGUgUk8KIAljb3VudAkJNQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiBjb25zdAlTVEFDS19TSVpFCTQKQEAgLTcxNiw2ICs3NTcsNyBAQAogCWZpZWxkCVJBTVBTCQkweDA0CS8qIEV4dGVybmFsIFNDQiBSQU0gUHJlc2VudCAqLwogCWZpZWxkCVVTQ0JTSVpFMzIJMHgwMgkvKiBVc2UgMzJieXRlIFNDQiBQYWdlIFNpemUgKi8KIAlmaWVsZAlDSU9QQVJDS0VOCTB4MDEJLyogSW50ZXJuYWwgYnVzIHBhcml0eSBlcnJvciBlbmFibGUgKi8KKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgRFNDT01NQU5EMSB7CkBAIC03MjQsNiArNzY2LDcgQEAKIAltYXNrCURTTEFUVAkJMHhmYwkvKiBQQ0kgbGF0ZW5jeSB0aW1lciAobm9uLXVsdHJhMikgKi8KIAlmaWVsZAlIQURETERTRUwxCTB4MDIJLyogSG9zdCBBZGRyZXNzIExvYWQgU2VsZWN0IEJpdHMgKi8KIAlmaWVsZAlIQURETERTRUwwCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTczNSw2ICs3NzgsNyBAQAogCWNvdW50CQkyCiAJbWFzawlCT0ZGCQkweGYwCiAJbWFzawlCT04JCTB4MGYKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTc0OSw2ICs3OTMsNyBAQAogCW1hc2sJU1RCT04JCTB4MDcKIAltYXNrCURGVEhSU0hfMTAwCTB4YzAKIAltYXNrCURGVEhSU0hfNzUJMHg4MAorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKiBhaWM3ODUwLzU1LzYwLzcwLzgwLzk1IG9ubHkgKi8KQEAgLTc1Niw2ICs4MDEsNyBAQAogCWFkZHJlc3MJCQkweDA4NgogCWNvdW50CQk0CiAJbWFzawlERlRIUlNIXzEwMAkweGMwCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qIGFpYzc4OTAvOTEvOTYvOTcgb25seSAqLwpAQCAtNzY0LDYgKzgxMCw3IEBACiAJbWFzawlIT1NUX01BSUxCT1gJMHhGMAogCW1hc2sJU0VRX01BSUxCT1gJMHgwRgogCW1hc2sJSE9TVF9UUUlOUE9TCTB4ODAJLyogQm91bmRhcnkgYXQgZWl0aGVyIDAgb3IgMTI4ICovCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIGNvbnN0CUhPU1RfTUFJTEJPWF9TSElGVAk0CkBAIC03ODQsNiArODMxLDcgQEAKIAlmaWVsZAlJTlRFTgkJMHgwMgogCWZpZWxkCUNISVBSU1QJCTB4MDEKIAlmaWVsZAlDSElQUlNUQUNLCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTc5NSwxMiArODQzLDE0IEBACiAJYWRkcmVzcwkJCTB4MDg4CiAJc2l6ZQk0CiAJYWNjZXNzX21vZGUgUlcKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgSENOVCB7CiAJYWRkcmVzcwkJCTB4MDhjCiAJc2l6ZQkzCiAJYWNjZXNzX21vZGUgUlcKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTgxMCw2ICs4NjAsNyBAQAogcmVnaXN0ZXIgU0NCUFRSIHsKIAlhZGRyZXNzCQkJMHgwOTAKIAlhY2Nlc3NfbW9kZSBSVworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtODc4LDYgKzkyOSw3IEBACiAKIAltYXNrCVNFUUlOVF9NQVNLCTB4ZjB8U0VRSU5UCS8qIFNFUUlOVCBTdGF0dXMgQ29kZXMgKi8KIAltYXNrCUlOVF9QRU5EICAoQlJLQURSSU5UfFNFUUlOVHxTQ1NJSU5UfENNRENNUExUKQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtOTExLDYgKzk2Myw3IEBACiAJZmllbGQJQ0xSU0NTSUlOVCAgICAgIDB4MDQKIAlmaWVsZAlDTFJDTURJTlQgCTB4MDIKIAlmaWVsZAlDTFJTRVFJTlQgCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgREZDTlRSTCB7CkBAIC05NDQsNiArOTk3LDcgQEAKIHJlZ2lzdGVyIERGV0FERFIgewogCWFkZHJlc3MJCQkweDk1CiAJYWNjZXNzX21vZGUgUlcKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgREZSQUREUiB7CkBAIC05NTQsNiArMTAwOCw3IEBACiByZWdpc3RlciBERkRBVCB7CiAJYWRkcmVzcwkJCTB4MDk5CiAJYWNjZXNzX21vZGUgUlcKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTk2Nyw2ICsxMDIyLDcgQEAKIAljb3VudAkJMQogCWZpZWxkCVNDQkFVVE8JCTB4ODAKIAltYXNrCVNDQkNOVF9NQVNLCTB4MWYKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTk3Nyw2ICsxMDMzLDcgQEAKIAlhZGRyZXNzCQkJMHgwOWIKIAlhY2Nlc3NfbW9kZSBSVwogCWNvdW50CQkxMgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtOTk2LDYgKzEwNTMsNyBAQAogCWFkZHJlc3MJCQkweDA5ZAogCWFjY2Vzc19tb2RlIFdPCiAJY291bnQJCTcKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQ1JDQ09OVFJPTDEgewpAQCAtMTAwOCw2ICsxMDY2LDcgQEAKIAlmaWVsZAlDUkNSRVFDSEtFTgkJMHgxMAogCWZpZWxkCVRBUkdDUkNFTkRFTgkJMHgwOAogCWZpZWxkCVRBUkdDUkNDTlRFTgkJMHgwNAorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAKQEAgLTEwNDAsNiArMTA5OSw3IEBACiAJYWNjZXNzX21vZGUgUlcKIAljb3VudAkgICAgNAogCWZpZWxkCUFMVF9NT0RFCTB4ODAKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogLyoKQEAgLTEwNTMsMjQgKzExMTMsMzEgQEAKIAkJc2l6ZQk0CiAJCWFsaWFzCVNDQl9SRVNJRFVBTF9EQVRBQ05UCiAJCWFsaWFzCVNDQl9DREJfU1RPUkUKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9SRVNJRFVBTF9TR1BUUiB7CiAJCXNpemUJNAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1NDU0lfU1RBVFVTIHsKIAkJc2l6ZQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlTQ0JfVEFSR0VUX1BIQVNFUyB7CiAJCXNpemUJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1RBUkdFVF9EQVRBX0RJUiB7CiAJCXNpemUJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1RBUkdFVF9JVEFHIHsKIAkJc2l6ZQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlTQ0JfREFUQVBUUiB7CiAJCXNpemUJNAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX0RBVEFDTlQgewogCQkvKgpAQCAtMTA4MCwxMiArMTE0NywxNCBAQAogCQlzaXplCTQKIAkJZmllbGQJU0dfTEFTVF9TRUcJCTB4ODAJLyogSW4gdGhlIGZvdXJ0aCBieXRlICovCiAJCW1hc2sJU0dfSElHSF9BRERSX0JJVFMJMHg3RgkvKiBJbiB0aGUgZm91cnRoIGJ5dGUgKi8KKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9TR1BUUiB7CiAJCXNpemUJNAogCQlmaWVsZAlTR19SRVNJRF9WQUxJRAkweDA0CS8qIEluIHRoZSBmaXJzdCBieXRlICovCiAJCWZpZWxkCVNHX0ZVTExfUkVTSUQJMHgwMgkvKiBJbiB0aGUgZmlyc3QgYnl0ZSAqLwogCQlmaWVsZAlTR19MSVNUX05VTEwJMHgwMQkvKiBJbiB0aGUgZmlyc3QgYnl0ZSAqLworCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX0NPTlRST0wgewogCQlzaXplCTEKQEAgLTExMTUsMjIgKzExODQsMjcgQEAKIAl9CiAJU0NCX0NEQl9MRU4gewogCQlzaXplCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl9TQ1NJUkFURSB7CiAJCXNpemUJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX1NDU0lPRkZTRVQgewogCQlzaXplCTEKIAkJY291bnQJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0NCX05FWFQgewogCQlzaXplCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCVNDQl82NF9TUEFSRSB7CiAJCXNpemUJMTYKIAl9CiAJU0NCXzY0X0JUVCB7CiAJCXNpemUJMTYKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogfQogCkBAIC0xMTQ5LDYgKzEyMjMsNyBAQAogCWZpZWxkCUNTXzI4NDAJCTB4MDQKIAlmaWVsZAlDS18yODQwCQkweDAyCiAJZmllbGQJRE9fMjg0MAkJMHgwMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBTVEFUVVNfMjg0MCB7CkBAIC0xMTU5LDYgKzEyMzQsNyBAQAogCW1hc2sJQklPU19TRUwJMHg2MAogCW1hc2sJQURTRUwJCTB4MWUKIAlmaWVsZAlESV8yODQwCQkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBSUMtNzg3MC1vbmx5IGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMTY2LDE4ICsxMjQyLDIyIEBACiByZWdpc3RlciBDQ0hBRERSIHsKIAlhZGRyZXNzCQkJMHgwRTAKIAlzaXplIDgKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQ0NIQ05UIHsKIAlhZGRyZXNzCQkJMHgwRTgKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQ0NTR1JBTSB7CiAJYWRkcmVzcwkJCTB4MEU5CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIHJlZ2lzdGVyIENDU0dBRERSIHsKIAlhZGRyZXNzCQkJMHgwRUEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQ0NTR0NUTCB7CkBAIC0xMTg2LDExICsxMjY2LDEzIEBACiAJZmllbGQJQ0NTR0VOCQkweDA4CiAJZmllbGQJU0dfRkVUQ0hfTkVFREVEIDB4MDIJLyogQml0IHVzZWQgZm9yIHNvZnR3YXJlIHN0YXRlICovCiAJZmllbGQJQ0NTR1JFU0VUCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQ0NTQ0JDTlQgewogCWFkZHJlc3MJCQkweEVGCiAJY291bnQJCTEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQ0NTQ0JDVEwgewpAQCAtMTIwMSwxNCArMTI4MywxNyBAQAogCWZpZWxkCUNDU0NCRU4JCTB4MDgKIAlmaWVsZAlDQ1NDQkRJUgkweDA0CiAJZmllbGQJQ0NTQ0JSRVNFVAkweDAxCisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIHJlZ2lzdGVyIENDU0NCQUREUiB7CiAJYWRkcmVzcwkJCTB4MEVECisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIHJlZ2lzdGVyIENDU0NCUkFNIHsKIAlhZGRyZXNzCQkJMHhFQworCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiAvKgpAQCAtMTIxOCwyMyArMTMwMywyOCBAQAogCWFkZHJlc3MJCQkweDBGMAogCWFjY2Vzc19tb2RlIFJXCiAJY291bnQJCTMKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgQ0NTQ0JQVFIgewogCWFkZHJlc3MJCQkweDBGMQorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBITlNDQl9RT0ZGIHsKIAlhZGRyZXNzCQkJMHgwRjQKIAljb3VudAkJNAorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBTTlNDQl9RT0ZGIHsKIAlhZGRyZXNzCQkJMHgwRjYKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgU0RTQ0JfUU9GRiB7CiAJYWRkcmVzcwkJCTB4MEY4CisJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB9CiAKIHJlZ2lzdGVyIFFPRkZfQ1RMU1RBIHsKQEAgLTEyNDQsNiArMTMzNCw3IEBACiAJZmllbGQJU0RTQ0JfUk9MTE9WRVIJMHgxMAogCW1hc2sJU0NCX1FTSVpFCTB4MDcKIAltYXNrCVNDQl9RU0laRV8yNTYJMHgwNgorCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogfQogCiByZWdpc3RlciBERkZfVEhSU0ggewpAQCAtMTI2Nyw2ICsxMzU4LDcgQEAKIAltYXNrCVdSX0RGVEhSU0hfOTAJMHg2MAogCW1hc2sJV1JfREZUSFJTSF9NQVgJMHg3MAogCWNvdW50CTQKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgU0dfQ0FDSEVfUFJFIHsKQEAgLTEyNzUsNiArMTM2Nyw3IEBACiAJbWFzawlTR19BRERSX01BU0sJMHhmOAogCWZpZWxkCUxBU1RfU0VHCTB4MDIKIAlmaWVsZAlMQVNUX1NFR19ET05FCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIAogcmVnaXN0ZXIgU0dfQ0FDSEVfU0hBRE9XIHsKQEAgLTEyODMsNiArMTM3Niw3IEBACiAJbWFzawlTR19BRERSX01BU0sJMHhmOAogCWZpZWxkCUxBU1RfU0VHCTB4MDIKIAlmaWVsZAlMQVNUX1NFR19ET05FCTB4MDEKKwlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIH0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2NyYXRjaCBSQU0gT2Zmc2V0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBUaGVzZSBvZmZzZXRzIGFyZSBlaXRoZXIgdG8gdmFsdWVzIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBib2FyZCdzCkBAIC0xMzA5LDYgKzE0MDMsNyBAQAogCUJVU1lfVEFSR0VUUyB7CiAJCWFsaWFzCQlUQVJHX1NDU0lSQVRFCiAJCXNpemUJCTE2CisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAkvKgogCSAqIEJpdCB2ZWN0b3Igb2YgdGFyZ2V0cyB0aGF0IGhhdmUgVUxUUkEgZW5hYmxlZCBhcyBzZXQgYnkKQEAgLTEzMjEsNiArMTQxNiw3IEBACiAJCWFsaWFzCQlDTURTSVpFX1RBQkxFCiAJCXNpemUJCTIKIAkJY291bnQJCTIKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCS8qCiAJICogQml0IHZlY3RvciBvZiB0YXJnZXRzIHRoYXQgaGF2ZSBkaXNjb25uZWN0aW9uIGRpc2FibGVkIGFzIHNldCBieQpAQCAtMTMzMSw2ICsxNDI3LDcgQEAKIAlESVNDX0RTQiB7CiAJCXNpemUJCTIKIAkJY291bnQJCTYKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCUNNRFNJWkVfVEFCTEVfVEFJTCB7CiAJCXNpemUJCTQKQEAgLTEzNDEsMTIgKzE0MzgsMTQgQEAKIAkgKi8KIAlNV0lfUkVTSURVQUwgewogCQlzaXplCQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAkvKgogCSAqIFNDQklEIG9mIHRoZSBuZXh0IFNDQiB0byBiZSBzdGFydGVkIGJ5IHRoZSBjb250cm9sbGVyLgogCSAqLwogCU5FWFRfUVVFVUVEX1NDQiB7CiAJCXNpemUJCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCS8qCiAJICogU2luZ2xlIGJ5dGUgYnVmZmVyIHVzZWQgdG8gZGVzaWduYXRlIHRoZSB0eXBlIG9yIG1lc3NhZ2UKQEAgLTEzNTQsNiArMTQ1Myw3IEBACiAJICovCiAJTVNHX09VVCB7CiAJCXNpemUJCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCS8qIFBhcmFtZXRlcnMgZm9yIERNQSBMb2dpYyAqLwogCURNQVBBUkFNUyB7CkBAIC0xMzY5LDYgKzE0NjksNyBAQAogCQlmaWVsZAlESVJFQ1RJT04JMHgwNAkvKiBTZXQgaW5kaWNhdGVzIFBDSS0+U0NTSSAqLwogCQlmaWVsZAlGSUZPRkxVU0gJMHgwMgogCQlmaWVsZAlGSUZPUkVTRVQJMHgwMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0VRX0ZMQUdTIHsKIAkJc2l6ZQkJMQpAQCAtMTM5MCw5ICsxNDkxLDExIEBACiAJICovCiAJU0FWRURfU0NTSUlEIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJU0FWRURfTFVOIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBUaGUgbGFzdCBidXMgcGhhc2UgYXMgc2VlbiBieSB0aGUgc2VxdWVuY2VyLiAKQEAgLTE0MTcsNiArMTUyMCw3IEBACiAJICovCiAJV0FJVElOR19TQ0JIIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBoZWFkIG9mIGxpc3Qgb2YgU0NCcyB0aGF0IGFyZQpAQCAtMTQyNSw2ICsxNTI5LDcgQEAKIAkgKi8KIAlESVNDT05ORUNURURfU0NCSCB7CiAJCXNpemUJCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCS8qCiAJICogaGVhZCBvZiBsaXN0IG9mIFNDQnMgdGhhdCBhcmUKQEAgLTE0MzIsNiArMTUzNyw3IEBACiAJICovCiAJRlJFRV9TQ0JIIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBoZWFkIG9mIGxpc3Qgb2YgU0NCcyB0aGF0IGhhdmUKQEAgLTE0NDYsNiArMTU1Miw3IEBACiAJICovCiAJSFNDQl9BRERSIHsKIAkJc2l6ZQkJNAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJLyoKIAkgKiBCYXNlIGFkZHJlc3Mgb2Ygb3VyIHNoYXJlZCBkYXRhIHdpdGggdGhlIGtlcm5lbCBkcml2ZXIgaW4gaG9zdApAQCAtMTQ1NCwxNSArMTU2MSwxOSBAQAogCSAqLwogCVNIQVJFRF9EQVRBX0FERFIgewogCQlzaXplCQk0CisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlLRVJORUxfUUlOUE9TIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJUUlOUE9TIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJUU9VVFBPUyB7CiAJCXNpemUJCTEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCS8qCiAJICogS2VybmVsIGFuZCBzZXF1ZW5jZXIgb2Zmc2V0cyBpbnRvIHRoZSBxdWV1ZSBvZgpAQCAtMTQ3MSw5ICsxNTgyLDExIEBACiAJICovCiAJS0VSTkVMX1RRSU5QT1MgewogCQlzaXplCQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlUUUlOUE9TIHsKIAkJc2l6ZQkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJQVJHXzEgewogCQlzaXplCQkxCkBAIC0xNDg2LDEwICsxNTk5LDEyIEBACiAJCW1hc2sJQ09OVF9NU0dfTE9PUAkJMHgwNAogCQltYXNrCUNPTlRfVEFSR19TRVNTSU9OCTB4MDIKIAkJYWxpYXMJUkVUVVJOXzEKKwkJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiAJfQogCUFSR18yIHsKIAkJc2l6ZQkJMQogCQlhbGlhcwlSRVRVUk5fMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAKIAkvKgpAQCAtMTQ5OCw2ICsxNjEzLDcgQEAKIAlMQVNUX01TRyB7CiAJCXNpemUJCTEKIAkJYWxpYXMJVEFSR19JTU1FRElBVEVfU0NCCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAogCS8qCkBAIC0xNTEzLDYgKzE2MjksNyBAQAogCQlmaWVsZAlFTkFVVE9BVE5PCTB4MDgKIAkJZmllbGQJRU5BVVRPQVROSQkweDA0CiAJCWZpZWxkCUVOQVVUT0FUTlAJMHgwMgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiB9CiAKQEAgLTE1MzMsMTIgKzE2NTAsMTQgQEAKIAkJZmllbGQJSEFfMjc0X0VYVEVOREVEX1RSQU5TCTB4MDEKIAkJYWxpYXMJSU5JVElBVE9SX1RBRwogCQljb3VudAkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAKIAlTRVFfRkxBR1MyIHsKIAkJc2l6ZQkxCiAJCWZpZWxkCVNDQl9ETUEJCQkweDAxCiAJCWZpZWxkCVRBUkdFVF9NU0dfUEVORElORwkweDAyCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIH0KIApAQCAtMTU2Miw2ICsxNjgxLDcgQEAKIAkJZmllbGQJRU5TUENISwkJMHgyMAogCQltYXNrCUhTQ1NJSUQJCTB4MDcJLyogb3VyIFNDU0kgSUQgKi8KIAkJbWFzawlIV1NDU0lJRAkweDBmCS8qIG91ciBTQ1NJIElEIGlmIFdpZGUgQnVzICovCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlJTlRERUYgewogCQlhZGRyZXNzCQkweDA1YwpAQCAtMTU2OSwxMSArMTY4OSwxMyBAQAogCQljb3VudAkJMQogCQlmaWVsZAlFREdFX1RSSUcJMHg4MAogCQltYXNrCVZFQ1RPUgkJMHgwZgorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiAJSE9TVENPTkYgewogCQlhZGRyZXNzCQkweDA1ZAogCQlzaXplCQkxCiAJCWNvdW50CQkxCisJCWRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZQogCX0KIAlIQV8yNzRfQklPU0NUUkwJewogCQlhZGRyZXNzCQkweDA1ZgpAQCAtMTU4Miw2ICsxNzA0LDcgQEAKIAkJbWFzawlCSU9TTU9ERQkJMHgzMAogCQltYXNrCUJJT1NESVNBQkxFRAkJMHgzMAkKIAkJZmllbGQJQ0hBTk5FTF9CX1BSSU1BUlkJMHgwOAorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiB9CiAKQEAgLTE1OTUsNiArMTcxOCw3IEBACiAJVEFSR19PRkZTRVQgewogCQlzaXplCQkxNgogCQljb3VudAkJMQorCQlkb250X2dlbmVyYXRlX2RlYnVnX2NvZGUKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKaW5kZXggMGFlMmI0Ni4uZTZmMmJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKQEAgLTgxNCw2ICs4MTQsNyBAQAogc3RhdGljIHZvaWQKIGFoY19yZXN0YXJ0KHN0cnVjdCBhaGNfc29mdGMgKmFoYykKIHsKKwl1aW50OF90CXNibGtjdGw7CiAKIAlhaGNfcGF1c2UoYWhjKTsKIApAQCAtODY4LDYgKzg2OSwxMiBAQAogCWFoY19vdXRiKGFoYywgU0VRQUREUjAsIDApOwogCWFoY19vdXRiKGFoYywgU0VRQUREUjEsIDApOwogCisJLyoKKwkgKiBUYWtlIHRoZSBMRUQgb3V0IG9mIGRpYWdub3N0aWMgbW9kZSBvbiBQTSByZXN1bWUsIHRvbworCSAqLworCXNibGtjdGwgPSBhaGNfaW5iKGFoYywgU0JMS0NUTCk7CisJYWhjX291dGIoYWhjLCBTQkxLQ1RMLCAoc2Jsa2N0bCAmIH4oRElBR0xFREVOfERJQUdMRURPTikpKTsKKwogCWFoY191bnBhdXNlKGFoYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcmVnLmhfc2hpcHBlZCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcmVnLmhfc2hpcHBlZAppbmRleCAyY2UxZmViLi5lODIxMDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3JlZy5oX3NoaXBwZWQKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9yZWcuaF9zaGlwcGVkCkBAIC0yNywyMCArMjcsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3N4ZnJjdGwxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3N4ZnJjdGwxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTWEZSQ1RMMSIsIDB4MDIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Njc2lzaWdvX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3Njc2lzaWdvX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJU0lHTyIsIDB4MDMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGNfcmVnX3ByaW50X3QgYWhjX3Njc2lzaWdpX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhjX3Njc2lzaWdpX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC01NSw1NSArNDEsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Njc2lpZF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY3NpaWRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lJRCIsIDB4MDUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Njc2lkYXRsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3Njc2lkYXRsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJREFUTCIsIDB4MDYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Njc2lkYXRoX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3Njc2lkYXRoX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJREFUSCIsIDB4MDcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3N0Y250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3N0Y250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTVENOVCIsIDB4MDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX29wdGlvbm1vZGVfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfb3B0aW9ubW9kZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiT1BUSU9OTU9ERSIsIDB4MDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3RhcmdjcmNjbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfdGFyZ2NyY2NudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiVEFSR0NSQ0NOVCIsIDB4MGEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2NscnNpbnQwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2NscnNpbnQwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTFJTSU5UMCIsIDB4MGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGNfcmVnX3ByaW50X3QgYWhjX3NzdGF0MF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoY19zc3RhdDBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTExMSwxMyArNDgsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2NscnNpbnQxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2NscnNpbnQxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTFJTSU5UMSIsIDB4MGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGNfcmVnX3ByaW50X3QgYWhjX3NzdGF0MV9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoY19zc3RhdDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTEzOSwxMyArNjksNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Njc2lpZF91bHRyYTJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2NzaWlkX3VsdHJhMl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NTSUlEX1VMVFJBMiIsIDB4MGYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGNfcmVnX3ByaW50X3QgYWhjX3NpbW9kZTBfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGNfc2ltb2RlMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTY3LDc2ICs5MCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2NzaWJ1c2hfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2NzaWJ1c2hfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lCVVNIIiwgMHgxMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc3hmcmN0bDJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc3hmcmN0bDJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNYRlJDVEwyIiwgMHgxMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2hhZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NoYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0hBRERSIiwgMHgxNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2VsdGltZXJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2VsdGltZXJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFTFRJTUVSIiwgMHgxOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2VsaWRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2VsaWRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFTElEIiwgMHgxOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2NhbWN0bF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2FtY3RsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0FNQ1RMIiwgMHgxYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfdGFyZ2lkX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3RhcmdpZF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiVEFSR0lEIiwgMHgxYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc3Bpb2NhcF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zcGlvY2FwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTUElPQ0FQIiwgMHgxYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfYnJkY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2JyZGN0bF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQlJEQ1RMIiwgMHgxZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2VlY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NlZWN0bF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0VFQ1RMIiwgMHgxZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoY19yZWdfcHJpbnRfdCBhaGNfc2Jsa2N0bF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoY19zYmxrY3RsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0yNDQsNjIgKzk3LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19idXN5X3RhcmdldHNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfYnVzeV90YXJnZXRzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJCVVNZX1RBUkdFVFMiLCAweDIwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY191bHRyYV9lbmJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfdWx0cmFfZW5iX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJVTFRSQV9FTkIiLCAweDMwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19kaXNjX2RzYl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19kaXNjX2RzYl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRElTQ19EU0IiLCAweDMyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19jbWRzaXplX3RhYmxlX3RhaWxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfY21kc2l6ZV90YWJsZV90YWlsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTURTSVpFX1RBQkxFX1RBSUwiLCAweDM0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19td2lfcmVzaWR1YWxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfbXdpX3Jlc2lkdWFsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJNV0lfUkVTSURVQUwiLCAweDM4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19uZXh0X3F1ZXVlZF9zY2JfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfbmV4dF9xdWV1ZWRfc2NiX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJORVhUX1FVRVVFRF9TQ0IiLCAweDM5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19tc2dfb3V0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX21zZ19vdXRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1TR19PVVQiLCAweDNhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19kbWFwYXJhbXNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfZG1hcGFyYW1zX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJETUFQQVJBTVMiLCAweDNiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhjX3JlZ19wcmludF90IGFoY19zZXFfZmxhZ3NfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGNfc2VxX2ZsYWdzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0zMDcsMjAgKzEwNCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2F2ZWRfc2NzaWlkX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NhdmVkX3Njc2lpZF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0FWRURfU0NTSUlEIiwgMHgzZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoY19yZWdfcHJpbnRfdCBhaGNfc2F2ZWRfbHVuX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NhdmVkX2x1bl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0FWRURfTFVOIiwgMHgzZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoY19yZWdfcHJpbnRfdCBhaGNfbGFzdHBoYXNlX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhjX2xhc3RwaGFzZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMzI4LDE1MyArMTExLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY193YWl0aW5nX3NjYmhfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfd2FpdGluZ19zY2JoX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJXQUlUSU5HX1NDQkgiLCAweDQwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19kaXNjb25uZWN0ZWRfc2NiaF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19kaXNjb25uZWN0ZWRfc2NiaF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRElTQ09OTkVDVEVEX1NDQkgiLCAweDQxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19mcmVlX3NjYmhfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfZnJlZV9zY2JoX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGUkVFX1NDQkgiLCAweDQyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19jb21wbGV0ZV9zY2JoX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2NvbXBsZXRlX3NjYmhfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNPTVBMRVRFX1NDQkgiLCAweDQzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19oc2NiX2FkZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfaHNjYl9hZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIU0NCX0FERFIiLCAweDQ0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19zaGFyZWRfZGF0YV9hZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NoYXJlZF9kYXRhX2FkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNIQVJFRF9EQVRBX0FERFIiLCAweDQ4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19rZXJuZWxfcWlucG9zX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2tlcm5lbF9xaW5wb3NfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIktFUk5FTF9RSU5QT1MiLCAweDRjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19xaW5wb3NfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfcWlucG9zX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJRSU5QT1MiLCAweDRkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19xb3V0cG9zX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3FvdXRwb3NfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlFPVVRQT1MiLCAweDRlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19rZXJuZWxfdHFpbnBvc19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19rZXJuZWxfdHFpbnBvc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiS0VSTkVMX1RRSU5QT1MiLCAweDRmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY190cWlucG9zX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3RxaW5wb3NfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlRRSU5QT1MiLCAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19hcmdfMV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19hcmdfMV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQVJHXzEiLCAweDUxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19hcmdfMl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19hcmdfMl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQVJHXzIiLCAweDUyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19sYXN0X21zZ19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19sYXN0X21zZ19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTEFTVF9NU0ciLCAweDUzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19zY3Npc2VxX3RlbXBsYXRlX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3Njc2lzZXFfdGVtcGxhdGVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lTRVFfVEVNUExBVEUiLCAweDU0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19oYV8yNzRfYmlvc2dsb2JhbF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19oYV8yNzRfYmlvc2dsb2JhbF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSEFfMjc0X0JJT1NHTE9CQUwiLCAweDU2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19zZXFfZmxhZ3MyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NlcV9mbGFnczJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFUV9GTEFHUzIiLCAweDU3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19zY3NpY29uZl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY3NpY29uZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NTSUNPTkYiLCAweDVhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19pbnRkZWZfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfaW50ZGVmX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJJTlRERUYiLCAweDVjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19ob3N0Y29uZl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19ob3N0Y29uZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSE9TVENPTkYiLCAweDVkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19oYV8yNzRfYmlvc2N0cmxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfaGFfMjc0X2Jpb3NjdHJsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIQV8yNzRfQklPU0NUUkwiLCAweDVmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhjX3JlZ19wcmludF90IGFoY19zZXFjdGxfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGNfc2VxY3RsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC00ODIsMTExICsxMTgsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NlcXJhbV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zZXFyYW1fcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFUVJBTSIsIDB4NjEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NlcWFkZHIwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NlcWFkZHIwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTRVFBRERSMCIsIDB4NjIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NlcWFkZHIxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NlcWFkZHIxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTRVFBRERSMSIsIDB4NjMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2FjY3VtX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2FjY3VtX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBQ0NVTSIsIDB4NjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NpbmRleF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zaW5kZXhfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNJTkRFWCIsIDB4NjUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2RpbmRleF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19kaW5kZXhfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRJTkRFWCIsIDB4NjYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2FsbG9uZXNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfYWxsb25lc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQUxMT05FUyIsIDB4NjksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2FsbHplcm9zX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2FsbHplcm9zX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTExaRVJPUyIsIDB4NmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX25vbmVfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfbm9uZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTk9ORSIsIDB4NmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2ZsYWdzX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2ZsYWdzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGTEFHUyIsIDB4NmIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NpbmRpcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zaW5kaXJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNJTkRJUiIsIDB4NmMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2RpbmRpcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19kaW5kaXJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRJTkRJUiIsIDB4NmQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Z1bmN0aW9uMV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19mdW5jdGlvbjFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkZVTkNUSU9OMSIsIDB4NmUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3N0YWNrX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3N0YWNrX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTVEFDSyIsIDB4NmYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Rhcmdfb2Zmc2V0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3Rhcmdfb2Zmc2V0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJUQVJHX09GRlNFVCIsIDB4NzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGNfcmVnX3ByaW50X3QgYWhjX3NyYW1fYmFzZV9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoY19zcmFtX2Jhc2VfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTU5NCw5NyArMTI1LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19iY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2JjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJDVEwiLCAweDg0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19kc2NvbW1hbmQwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2RzY29tbWFuZDBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRTQ09NTUFORDAiLCAweDg0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19idXN0aW1lX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2J1c3RpbWVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJVU1RJTUUiLCAweDg1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19kc2NvbW1hbmQxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2RzY29tbWFuZDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRTQ09NTUFORDEiLCAweDg1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19idXNzcGRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfYnVzc3BkX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJCVVNTUEQiLCAweDg2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19oc19tYWlsYm94X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2hzX21haWxib3hfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhTX01BSUxCT1giLCAweDg2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19kc3BjaXN0YXR1c19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19kc3BjaXN0YXR1c19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRFNQQ0lTVEFUVVMiLCAweDg2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19oY250cmxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfaGNudHJsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIQ05UUkwiLCAweDg3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19oYWRkcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19oYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSEFERFIiLCAweDg4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19oY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2hjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhDTlQiLCAweDhjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19zY2JwdHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2NicHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JQVFIiLCAweDkwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19pbnRzdGF0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2ludHN0YXRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIklOVFNUQVQiLCAweDkxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19jbHJpbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfY2xyaW50X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTFJJTlQiLCAweDkyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhjX3JlZ19wcmludF90IGFoY19lcnJvcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoY19lcnJvcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNzA2LDY5ICsxNDYsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Rmd2FkZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfZGZ3YWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZXQUREUiIsIDB4OTUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2RmcmFkZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfZGZyYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZSQUREUiIsIDB4OTcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2RmZGF0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2RmZGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERkRBVCIsIDB4OTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYmNudF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2JjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQkNOVCIsIDB4OWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3FpbmZpZm9fcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfcWluZmlmb19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUUlORklGTyIsIDB4OWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3FpbmNudF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19xaW5jbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlFJTkNOVCIsIDB4OWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3FvdXRmaWZvX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3FvdXRmaWZvX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJRT1VURklGTyIsIDB4OWQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2NyY2NvbnRyb2wxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2NyY2NvbnRyb2wxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDUkNDT05UUk9MMSIsIDB4OWQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3FvdXRjbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfcW91dGNudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUU9VVENOVCIsIDB4OWUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGNfcmVnX3ByaW50X3QgYWhjX3Njc2lwaGFzZV9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoY19zY3NpcGhhc2VfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTc3NiwxMyArMTUzLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhjX3JlZ19wcmludF90IGFoY19zZnVuY3RfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2Z1bmN0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTRlVOQ1QiLCAweDlmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhjX3JlZ19wcmludF90IGFoY19zY2JfYmFzZV9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoY19zY2JfYmFzZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNzkwLDY5ICsxNjAsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9jZGJfcHRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYl9jZGJfcHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfQ0RCX1BUUiIsIDB4YTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9yZXNpZHVhbF9zZ3B0cl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2JfcmVzaWR1YWxfc2dwdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9SRVNJRFVBTF9TR1BUUiIsIDB4YTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9zY3NpX3N0YXR1c19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2Jfc2NzaV9zdGF0dXNfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9TQ1NJX1NUQVRVUyIsIDB4YTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl90YXJnZXRfcGhhc2VzX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYl90YXJnZXRfcGhhc2VzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfVEFSR0VUX1BIQVNFUyIsIDB4YTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl90YXJnZXRfZGF0YV9kaXJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2NiX3RhcmdldF9kYXRhX2Rpcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1RBUkdFVF9EQVRBX0RJUiIsIDB4YWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl90YXJnZXRfaXRhZ19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2JfdGFyZ2V0X2l0YWdfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9UQVJHRVRfSVRBRyIsIDB4YWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9kYXRhcHRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYl9kYXRhcHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfREFUQVBUUiIsIDB4YWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9kYXRhY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYl9kYXRhY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfREFUQUNOVCIsIDB4YjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9zZ3B0cl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2Jfc2dwdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9TR1BUUiIsIDB4YjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGNfcmVnX3ByaW50X3QgYWhjX3NjYl9jb250cm9sX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhjX3NjYl9jb250cm9sX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC04ODAsMTg4ICsxODcsNiBAQAogICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1RBRyIsIDB4YmIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQogI2VuZGlmCiAKLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9jZGJfbGVuX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYl9jZGJfbGVuX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfQ0RCX0xFTiIsIDB4YmMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9zY3NpcmF0ZV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2Jfc2NzaXJhdGVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9TQ1NJUkFURSIsIDB4YmQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9zY3Npb2Zmc2V0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYl9zY3Npb2Zmc2V0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfU0NTSU9GRlNFVCIsIDB4YmUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl9uZXh0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYl9uZXh0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfTkVYVCIsIDB4YmYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl82NF9zcGFyZV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zY2JfNjRfc3BhcmVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl82NF9TUEFSRSIsIDB4YzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NlZWN0bF8yODQwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NlZWN0bF8yODQwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTRUVDVExfMjg0MCIsIDB4YzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3N0YXR1c18yODQwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3N0YXR1c18yODQwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTVEFUVVNfMjg0MCIsIDB4YzEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYl82NF9idHRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2NiXzY0X2J0dF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCXzY0X0JUVCIsIDB4ZDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2NjaGFkZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfY2NoYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NIQUREUiIsIDB4ZTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2NjaGNudF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19jY2hjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDSENOVCIsIDB4ZTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2dyYW1fcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfY2NzZ3JhbV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTR1JBTSIsIDB4ZTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2dhZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2Njc2dhZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NHQUREUiIsIDB4ZWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2djdGxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfY2NzZ2N0bF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTR0NUTCIsIDB4ZWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2NicmFtX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2Njc2NicmFtX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQlJBTSIsIDB4ZWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2NiYWRkcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19jY3NjYmFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDU0NCQUREUiIsIDB4ZWQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2NiY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2Njc2NiY3RsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQkNUTCIsIDB4ZWUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2NiY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2Njc2NiY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQkNOVCIsIDB4ZWYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NjYmJhZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3NjYmJhZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JCQUREUiIsIDB4ZjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2Njc2NicHRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX2Njc2NicHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQlBUUiIsIDB4ZjEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2huc2NiX3FvZmZfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfaG5zY2JfcW9mZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSE5TQ0JfUU9GRiIsIDB4ZjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Nuc2NiX3FvZmZfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc25zY2JfcW9mZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU05TQ0JfUU9GRiIsIDB4ZjYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3Nkc2NiX3FvZmZfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGNfc2RzY2JfcW9mZl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0RTQ0JfUU9GRiIsIDB4ZjgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3FvZmZfY3Rsc3RhX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhjX3FvZmZfY3Rsc3RhX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJRT0ZGX0NUTFNUQSIsIDB4ZmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX2RmZl90aHJzaF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19kZmZfdGhyc2hfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGRl9USFJTSCIsIDB4ZmIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NnX2NhY2hlX3NoYWRvd19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zZ19jYWNoZV9zaGFkb3dfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNHX0NBQ0hFX1NIQURPVyIsIDB4ZmMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGNfcmVnX3ByaW50X3QgYWhjX3NnX2NhY2hlX3ByZV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoY19zZ19jYWNoZV9wcmVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNHX0NBQ0hFX1BSRSIsIDB4ZmMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KIAogI2RlZmluZQlTQ1NJU0VRICAgICAgICAgCQkweDAwCiAjZGVmaW5lCQlURU1PREUgICAgICAgICAgCTB4ODAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcmVnX3ByaW50LmNfc2hpcHBlZCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcmVnX3ByaW50LmNfc2hpcHBlZAppbmRleCAzMDlhNTYyLi45ZjliODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3JlZ19wcmludC5jX3NoaXBwZWQKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9yZWdfcHJpbnQuY19zaGlwcGVkCkBAIC00Myw0OCArNDMsNiBAQAogCSAgICAweDAxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNYRlJDVEwxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU1RQV0VOIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJBQ1RORUdFTiIsCQkweDAyLCAweDAyIH0sCi0JeyAiRU5TVElNRVIiLAkJMHgwNCwgMHgwNCB9LAotCXsgIkVOU1BDSEsiLAkJMHgyMCwgMHgyMCB9LAotCXsgIlNXUkFQRU4iLAkJMHg0MCwgMHg0MCB9LAotCXsgIkJJVEJVQ0tFVCIsCQkweDgwLCAweDgwIH0sCi0JeyAiU1RJTUVTRUwiLAkJMHgxOCwgMHgxOCB9Ci19OwotCi1pbnQKLWFoY19zeGZyY3RsMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoU1hGUkNUTDFfcGFyc2VfdGFibGUsIDcsICJTWEZSQ1RMMSIsCi0JICAgIDB4MDIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNJR09fcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJBQ0tPIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJSRVFPIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJCU1lPIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTRUxPIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJBVE5PIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJNU0dPIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJJT08iLAkJMHg0MCwgMHg0MCB9LAotCXsgIkNETyIsCQkweDgwLCAweDgwIH0sCi0JeyAiUF9EQVRBT1VUIiwJCTB4MDAsIDB4MDAgfSwKLQl7ICJQX0RBVEFJTiIsCQkweDQwLCAweDQwIH0sCi0JeyAiUF9DT01NQU5EIiwJCTB4ODAsIDB4ODAgfSwKLQl7ICJQX01FU0dPVVQiLAkJMHhhMCwgMHhhMCB9LAotCXsgIlBfU1RBVFVTIiwJCTB4YzAsIDB4YzAgfSwKLQl7ICJQSEFTRV9NQVNLIiwJCTB4ZTAsIDB4ZTAgfSwKLQl7ICJQX01FU0dJTiIsCQkweGUwLCAweGUwIH0KLX07Ci0KLWludAotYWhjX3Njc2lzaWdvX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTQ1NJU0lHT19wYXJzZV90YWJsZSwgMTUsICJTQ1NJU0lHTyIsCi0JICAgIDB4MDMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNJR0lfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJBQ0tJIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJSRVFJIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTEyOCw3NyArODYsNiBAQAogCSAgICAweDA0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lJRF9wYXJzZV90YWJsZVtdID0gewotCXsgIlRXSU5fQ0hOTEIiLAkJMHg4MCwgMHg4MCB9LAotCXsgIk9JRCIsCQkweDBmLCAweDBmIH0sCi0JeyAiVFdJTl9USUQiLAkJMHg3MCwgMHg3MCB9LAotCXsgIlNPRlNfVUxUUkEyIiwJMHg3ZiwgMHg3ZiB9LAotCXsgIlRJRCIsCQkweGYwLCAweGYwIH0KLX07Ci0KLWludAotYWhjX3Njc2lpZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoU0NTSUlEX3BhcnNlX3RhYmxlLCA1LCAiU0NTSUlEIiwKLQkgICAgMHgwNSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc2NzaWRhdGxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJREFUTCIsCi0JICAgIDB4MDYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX3N0Y250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU1RDTlQiLAotCSAgICAweDA4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IE9QVElPTk1PREVfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJESVNfTVNHSU5fRFVBTEVER0UiLAkweDAxLCAweDAxIH0sCi0JeyAiQVVUT19NU0dPVVRfREUiLAkweDAyLCAweDAyIH0sCi0JeyAiU0NTSURBVExfSU1HRU4iLAkweDA0LCAweDA0IH0sCi0JeyAiRVhQUEhBU0VESVMiLAkweDA4LCAweDA4IH0sCi0JeyAiQlVTRlJFRVJFViIsCQkweDEwLCAweDEwIH0sCi0JeyAiQVROTUdNTlRFTiIsCQkweDIwLCAweDIwIH0sCi0JeyAiQVVUT0FDS0VOIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJBVVRPUkFURUVOIiwJCTB4ODAsIDB4ODAgfSwKLQl7ICJPUFRJT05NT0RFX0RFRkFVTFRTIiwweDAzLCAweDAzIH0KLX07Ci0KLWludAotYWhjX29wdGlvbm1vZGVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE9QVElPTk1PREVfcGFyc2VfdGFibGUsIDksICJPUFRJT05NT0RFIiwKLQkgICAgMHgwOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfdGFyZ2NyY2NudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlRBUkdDUkNDTlQiLAotCSAgICAweDBhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENMUlNJTlQwX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0xSU1BJT1JEWSIsCQkweDAyLCAweDAyIH0sCi0JeyAiQ0xSU1dSQVAiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkNMUklPRVJSIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJDTFJTRUxJTkdPIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJDTFJTRUxESSIsCQkweDIwLCAweDIwIH0sCi0JeyAiQ0xSU0VMRE8iLAkJMHg0MCwgMHg0MCB9Ci19OwotCi1pbnQKLWFoY19jbHJzaW50MF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoQ0xSU0lOVDBfcGFyc2VfdGFibGUsIDYsICJDTFJTSU5UMCIsCi0JICAgIDB4MGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRE1BRE9ORSIsCQkweDAxLCAweDAxIH0sCiAJeyAiU1BJT1JEWSIsCQkweDAyLCAweDAyIH0sCkBAIC0yMTgsMjMgKzEwNSw2IEBACiAJICAgIDB4MGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0lOVDFfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTFJSRVFJTklUIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJDTFJQSEFTRUNIRyIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDTFJTQ1NJUEVSUiIsCTB4MDQsIDB4MDQgfSwKLQl7ICJDTFJCVVNGUkVFIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJDTFJTQ1NJUlNUSSIsCTB4MjAsIDB4MjAgfSwKLQl7ICJDTFJBVE5PIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJDTFJTRUxUSU1FTyIsCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGNfY2xyc2ludDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKENMUlNJTlQxX3BhcnNlX3RhYmxlLCA3LCAiQ0xSU0lOVDEiLAotCSAgICAweDBjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNTVEFUMV9wYXJzZV90YWJsZVtdID0gewogCXsgIlJFUUlOSVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIlBIQVNFQ0hHIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTI4NCwxOCArMTU0LDYgQEAKIAkgICAgMHgwZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJSURfVUxUUkEyX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiT0lEIiwJCTB4MGYsIDB4MGYgfSwKLQl7ICJUSUQiLAkJMHhmMCwgMHhmMCB9Ci19OwotCi1pbnQKLWFoY19zY3NpaWRfdWx0cmEyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTQ1NJSURfVUxUUkEyX3BhcnNlX3RhYmxlLCAyLCAiU0NTSUlEX1VMVFJBMiIsCi0JICAgIDB4MGYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0lNT0RFMF9wYXJzZV90YWJsZVtdID0gewogCXsgIkVORE1BRE9ORSIsCQkweDAxLCAweDAxIH0sCiAJeyAiRU5TUElPUkRZIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTMzOSwxMDcgKzE5Nyw2IEBACiAJICAgIDB4MTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhjX3NoYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNIQUREUiIsCi0JICAgIDB4MTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0VMVElNRVJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTVEFHRTEiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlNUQUdFMiIsCQkweDAyLCAweDAyIH0sCi0JeyAiU1RBR0UzIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTVEFHRTQiLAkJMHgwOCwgMHgwOCB9LAotCXsgIlNUQUdFNSIsCQkweDEwLCAweDEwIH0sCi0JeyAiU1RBR0U2IiwJCTB4MjAsIDB4MjAgfQotfTsKLQotaW50Ci1haGNfc2VsdGltZXJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNFTFRJTUVSX3BhcnNlX3RhYmxlLCA2LCAiU0VMVElNRVIiLAotCSAgICAweDE4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFTElEX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiT05FQklUIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJTRUxJRF9NQVNLIiwJCTB4ZjAsIDB4ZjAgfQotfTsKLQotaW50Ci1haGNfc2VsaWRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNFTElEX3BhcnNlX3RhYmxlLCAyLCAiU0VMSUQiLAotCSAgICAweDE5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY190YXJnaWRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJUQVJHSUQiLAotCSAgICAweDFiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNQSU9DQVBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTU1BJT0NQUyIsCQkweDAxLCAweDAxIH0sCi0JeyAiUk9NIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJFRVBST00iLAkJMHgwNCwgMHgwNCB9LAotCXsgIlNFRVBST00iLAkJMHgwOCwgMHgwOCB9LAotCXsgIkVYVF9CUkRDVEwiLAkJMHgxMCwgMHgxMCB9LAotCXsgIlNPRlRDTURFTiIsCQkweDIwLCAweDIwIH0sCi0JeyAiU09GVDAiLAkJMHg0MCwgMHg0MCB9LAotCXsgIlNPRlQxIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGNfc3Bpb2NhcF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoU1BJT0NBUF9wYXJzZV90YWJsZSwgOCwgIlNQSU9DQVAiLAotCSAgICAweDFiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEJSRENUTF9wYXJzZV90YWJsZVtdID0gewotCXsgIkJSRENUTDAiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkJSRFNUQl9VTFRSQTIiLAkweDAxLCAweDAxIH0sCi0JeyAiQlJEQ1RMMSIsCQkweDAyLCAweDAyIH0sCi0JeyAiQlJEUldfVUxUUkEyIiwJMHgwMiwgMHgwMiB9LAotCXsgIkJSRFJXIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJCUkREQVQyIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJCUkRDUyIsCQkweDA4LCAweDA4IH0sCi0JeyAiQlJEREFUMyIsCQkweDA4LCAweDA4IH0sCi0JeyAiQlJEU1RCIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJCUkREQVQ0IiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJCUkREQVQ1IiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJCUkREQVQ2IiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJCUkREQVQ3IiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGNfYnJkY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihCUkRDVExfcGFyc2VfdGFibGUsIDEzLCAiQlJEQ1RMIiwKLQkgICAgMHgxZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRUVDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTRUVESSIsCQkweDAxLCAweDAxIH0sCi0JeyAiU0VFRE8iLAkJMHgwMiwgMHgwMiB9LAotCXsgIlNFRUNLIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTRUVDUyIsCQkweDA4LCAweDA4IH0sCi0JeyAiU0VFUkRZIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJTRUVNUyIsCQkweDIwLCAweDIwIH0sCi0JeyAiRVhUQVJCUkVRIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJFWFRBUkJBQ0siLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoY19zZWVjdGxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNFRUNUTF9wYXJzZV90YWJsZSwgOCwgIlNFRUNUTCIsCi0JICAgIDB4MWUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0JMS0NUTF9wYXJzZV90YWJsZVtdID0gewogCXsgIlhDVlIiLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNFTFdJREUiLAkJMHgwMiwgMHgwMiB9LApAQCAtNDU4LDY4ICsyMTUsNiBAQAogCSAgICAweDFmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoY19idXN5X3RhcmdldHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJCVVNZX1RBUkdFVFMiLAotCSAgICAweDIwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY191bHRyYV9lbmJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJVTFRSQV9FTkIiLAotCSAgICAweDMwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19kaXNjX2RzYl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRJU0NfRFNCIiwKLQkgICAgMHgzMiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfbXdpX3Jlc2lkdWFsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTVdJX1JFU0lEVUFMIiwKLQkgICAgMHgzOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfbmV4dF9xdWV1ZWRfc2NiX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTkVYVF9RVUVVRURfU0NCIiwKLQkgICAgMHgzOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfbXNnX291dF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1TR19PVVQiLAotCSAgICAweDNhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERNQVBBUkFNU19wYXJzZV90YWJsZVtdID0gewotCXsgIkZJRk9SRVNFVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiRklGT0ZMVVNIIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJESVJFQ1RJT04iLAkJMHgwNCwgMHgwNCB9LAotCXsgIkhETUFFTiIsCQkweDA4LCAweDA4IH0sCi0JeyAiSERNQUVOQUNLIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJTRE1BRU4iLAkJMHgxMCwgMHgxMCB9LAotCXsgIlNETUFFTkFDSyIsCQkweDEwLCAweDEwIH0sCi0JeyAiU0NTSUVOIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJXSURFT0REIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJQUkVMT0FERU4iLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoY19kbWFwYXJhbXNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKERNQVBBUkFNU19wYXJzZV90YWJsZSwgMTAsICJETUFQQVJBTVMiLAotCSAgICAweDNiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFUV9GTEFHU19wYXJzZV90YWJsZVtdID0gewogCXsgIk5PX0RJU0NPTk5FQ1QiLAkweDAxLCAweDAxIH0sCiAJeyAiU1BIQVNFX1BFTkRJTkciLAkweDAyLCAweDAyIH0sCkBAIC01MzksMjAgKzIzNCw2IEBACiAJICAgIDB4M2MsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhjX3NhdmVkX3Njc2lpZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNBVkVEX1NDU0lJRCIsCi0JICAgIDB4M2QsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX3NhdmVkX2x1bl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNBVkVEX0xVTiIsCi0JICAgIDB4M2UsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgTEFTVFBIQVNFX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTVNHSSIsCQkweDIwLCAweDIwIH0sCiAJeyAiSU9JIiwJCTB4NDAsIDB4NDAgfSwKQEAgLTU3NCwxOTMgKzI1NSw2IEBACiAJICAgIDB4M2YsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhjX3dhaXRpbmdfc2NiaF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIldBSVRJTkdfU0NCSCIsCi0JICAgIDB4NDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2Rpc2Nvbm5lY3RlZF9zY2JoX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRElTQ09OTkVDVEVEX1NDQkgiLAotCSAgICAweDQxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19mcmVlX3NjYmhfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGUkVFX1NDQkgiLAotCSAgICAweDQyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19oc2NiX2FkZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIU0NCX0FERFIiLAotCSAgICAweDQ0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zaGFyZWRfZGF0YV9hZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0hBUkVEX0RBVEFfQUREUiIsCi0JICAgIDB4NDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2tlcm5lbF9xaW5wb3NfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJLRVJORUxfUUlOUE9TIiwKLQkgICAgMHg0YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfcWlucG9zX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUUlOUE9TIiwKLQkgICAgMHg0ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfcW91dHBvc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlFPVVRQT1MiLAotCSAgICAweDRlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19rZXJuZWxfdHFpbnBvc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIktFUk5FTF9UUUlOUE9TIiwKLQkgICAgMHg0ZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfdHFpbnBvc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlRRSU5QT1MiLAotCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEFSR18xX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ09OVF9UQVJHX1NFU1NJT04iLAkweDAyLCAweDAyIH0sCi0JeyAiQ09OVF9NU0dfTE9PUCIsCTB4MDQsIDB4MDQgfSwKLQl7ICJFWElUX01TR19MT09QIiwJMHgwOCwgMHgwOCB9LAotCXsgIk1TR09VVF9QSEFTRU1JUyIsCTB4MTAsIDB4MTAgfSwKLQl7ICJTRU5EX1JFSiIsCQkweDIwLCAweDIwIH0sCi0JeyAiU0VORF9TRU5TRSIsCQkweDQwLCAweDQwIH0sCi0JeyAiU0VORF9NU0ciLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoY19hcmdfMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoQVJHXzFfcGFyc2VfdGFibGUsIDcsICJBUkdfMSIsCi0JICAgIDB4NTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2FyZ18yX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQVJHXzIiLAotCSAgICAweDUyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19sYXN0X21zZ19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkxBU1RfTVNHIiwKLQkgICAgMHg1MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0VRX1RFTVBMQVRFX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiRU5BVVRPQVROUCIsCQkweDAyLCAweDAyIH0sCi0JeyAiRU5BVVRPQVROSSIsCQkweDA0LCAweDA0IH0sCi0JeyAiRU5BVVRPQVROTyIsCQkweDA4LCAweDA4IH0sCi0JeyAiRU5SU0VMSSIsCQkweDEwLCAweDEwIH0sCi0JeyAiRU5TRUxJIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJFTlNFTE8iLAkJMHg0MCwgMHg0MCB9Ci19OwotCi1pbnQKLWFoY19zY3Npc2VxX3RlbXBsYXRlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTQ1NJU0VRX1RFTVBMQVRFX3BhcnNlX3RhYmxlLCA2LCAiU0NTSVNFUV9URU1QTEFURSIsCi0JICAgIDB4NTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgSEFfMjc0X0JJT1NHTE9CQUxfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJIQV8yNzRfRVhURU5ERURfVFJBTlMiLDB4MDEsIDB4MDEgfQotfTsKLQotaW50Ci1haGNfaGFfMjc0X2Jpb3NnbG9iYWxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKEhBXzI3NF9CSU9TR0xPQkFMX3BhcnNlX3RhYmxlLCAxLCAiSEFfMjc0X0JJT1NHTE9CQUwiLAotCSAgICAweDU2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFUV9GTEFHUzJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTQ0JfRE1BIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJUQVJHRVRfTVNHX1BFTkRJTkciLAkweDAyLCAweDAyIH0KLX07Ci0KLWludAotYWhjX3NlcV9mbGFnczJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNFUV9GTEFHUzJfcGFyc2VfdGFibGUsIDIsICJTRVFfRkxBR1MyIiwKLQkgICAgMHg1NywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJQ09ORl9wYXJzZV90YWJsZVtdID0gewotCXsgIkVOU1BDSEsiLAkJMHgyMCwgMHgyMCB9LAotCXsgIlJFU0VUX1NDU0kiLAkJMHg0MCwgMHg0MCB9LAotCXsgIlRFUk1fRU5CIiwJCTB4ODAsIDB4ODAgfSwKLQl7ICJIU0NTSUlEIiwJCTB4MDcsIDB4MDcgfSwKLQl7ICJIV1NDU0lJRCIsCQkweDBmLCAweDBmIH0KLX07Ci0KLWludAotYWhjX3Njc2ljb25mX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTQ1NJQ09ORl9wYXJzZV90YWJsZSwgNSwgIlNDU0lDT05GIiwKLQkgICAgMHg1YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBJTlRERUZfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJFREdFX1RSSUciLAkJMHg4MCwgMHg4MCB9LAotCXsgIlZFQ1RPUiIsCQkweDBmLCAweDBmIH0KLX07Ci0KLWludAotYWhjX2ludGRlZl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoSU5UREVGX3BhcnNlX3RhYmxlLCAyLCAiSU5UREVGIiwKLQkgICAgMHg1YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfaG9zdGNvbmZfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIT1NUQ09ORiIsCi0JICAgIDB4NWQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgSEFfMjc0X0JJT1NDVFJMX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0hBTk5FTF9CX1BSSU1BUlkiLAkweDA4LCAweDA4IH0sCi0JeyAiQklPU01PREUiLAkJMHgzMCwgMHgzMCB9LAotCXsgIkJJT1NESVNBQkxFRCIsCTB4MzAsIDB4MzAgfQotfTsKLQotaW50Ci1haGNfaGFfMjc0X2Jpb3NjdHJsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihIQV8yNzRfQklPU0NUUkxfcGFyc2VfdGFibGUsIDMsICJIQV8yNzRfQklPU0NUUkwiLAotCSAgICAweDVmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFUUNUTF9wYXJzZV90YWJsZVtdID0gewogCXsgIkxPQURSQU0iLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNFUVJFU0VUIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTc4MCwyODUgKzI3NCwxMiBAQAogfQogCiBpbnQKLWFoY19zZXFyYW1fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTRVFSQU0iLAotCSAgICAweDYxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zZXFhZGRyMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFUUFERFIwIiwKLQkgICAgMHg2MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRVFBRERSMV9wYXJzZV90YWJsZVtdID0gewotCXsgIlNFUUFERFIxX01BU0siLAkweDAxLCAweDAxIH0KLX07Ci0KLWludAotYWhjX3NlcWFkZHIxX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTRVFBRERSMV9wYXJzZV90YWJsZSwgMSwgIlNFUUFERFIxIiwKLQkgICAgMHg2MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfYWNjdW1fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBQ0NVTSIsCi0JICAgIDB4NjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX3NpbmRleF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNJTkRFWCIsCi0JICAgIDB4NjUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2RpbmRleF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRJTkRFWCIsCi0JICAgIDB4NjYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2FsbG9uZXNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTExPTkVTIiwKLQkgICAgMHg2OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfYWxsemVyb3NfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTExaRVJPUyIsCi0JICAgIDB4NmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX25vbmVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJOT05FIiwKLQkgICAgMHg2YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBGTEFHU19wYXJzZV90YWJsZVtdID0gewotCXsgIkNBUlJZIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJaRVJPIiwJCTB4MDIsIDB4MDIgfQotfTsKLQotaW50Ci1haGNfZmxhZ3NfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKEZMQUdTX3BhcnNlX3RhYmxlLCAyLCAiRkxBR1MiLAotCSAgICAweDZiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zaW5kaXJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTSU5ESVIiLAotCSAgICAweDZjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19kaW5kaXJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJESU5ESVIiLAotCSAgICAweDZkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zdGFja19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNUQUNLIiwKLQkgICAgMHg2ZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfdGFyZ19vZmZzZXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJUQVJHX09GRlNFVCIsCi0JICAgIDB4NzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhjX3NyYW1fYmFzZV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNSQU1fQkFTRSIsCiAJICAgIDB4NzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgRFNDT01NQU5EMF9wYXJzZV90YWJsZVtdID0gewotCXsgIkNJT1BBUkNLRU4iLAkJMHgwMSwgMHgwMSB9LAotCXsgIlVTQ0JTSVpFMzIiLAkJMHgwMiwgMHgwMiB9LAotCXsgIlJBTVBTIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJJTlRTQ0JSQU1TRUwiLAkweDA4LCAweDA4IH0sCi0JeyAiRVhUUkVRTENLIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJNUEFSQ0tFTiIsCQkweDIwLCAweDIwIH0sCi0JeyAiRFBBUkNLRU4iLAkJMHg0MCwgMHg0MCB9LAotCXsgIkNBQ0hFVEhFTiIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhjX2RzY29tbWFuZDBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKERTQ09NTUFORDBfcGFyc2VfdGFibGUsIDgsICJEU0NPTU1BTkQwIiwKLQkgICAgMHg4NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBCVVNUSU1FX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQk9OIiwJCTB4MGYsIDB4MGYgfSwKLQl7ICJCT0ZGIiwJCTB4ZjAsIDB4ZjAgfQotfTsKLQotaW50Ci1haGNfYnVzdGltZV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoQlVTVElNRV9wYXJzZV90YWJsZSwgMiwgIkJVU1RJTUUiLAotCSAgICAweDg1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERTQ09NTUFORDFfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJIQURETERTRUwwIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJIQURETERTRUwxIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJEU0xBVFQiLAkJMHhmYywgMHhmYyB9Ci19OwotCi1pbnQKLWFoY19kc2NvbW1hbmQxX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihEU0NPTU1BTkQxX3BhcnNlX3RhYmxlLCAzLCAiRFNDT01NQU5EMSIsCi0JICAgIDB4ODUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgQlVTU1BEX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU1RCT04iLAkJMHgwNywgMHgwNyB9LAotCXsgIlNUQk9GRiIsCQkweDM4LCAweDM4IH0sCi0JeyAiREZUSFJTSF83NSIsCQkweDgwLCAweDgwIH0sCi0JeyAiREZUSFJTSCIsCQkweGMwLCAweGMwIH0sCi0JeyAiREZUSFJTSF8xMDAiLAkweGMwLCAweGMwIH0KLX07Ci0KLWludAotYWhjX2J1c3NwZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoQlVTU1BEX3BhcnNlX3RhYmxlLCA1LCAiQlVTU1BEIiwKLQkgICAgMHg4NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBIU19NQUlMQk9YX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU0VRX01BSUxCT1giLAkweDBmLCAweDBmIH0sCi0JeyAiSE9TVF9UUUlOUE9TIiwJMHg4MCwgMHg4MCB9LAotCXsgIkhPU1RfTUFJTEJPWCIsCTB4ZjAsIDB4ZjAgfQotfTsKLQotaW50Ci1haGNfaHNfbWFpbGJveF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoSFNfTUFJTEJPWF9wYXJzZV90YWJsZSwgMywgIkhTX01BSUxCT1giLAotCSAgICAweDg2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERTUENJU1RBVFVTX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiREZUSFJTSF8xMDAiLAkweGMwLCAweGMwIH0KLX07Ci0KLWludAotYWhjX2RzcGNpc3RhdHVzX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihEU1BDSVNUQVRVU19wYXJzZV90YWJsZSwgMSwgIkRTUENJU1RBVFVTIiwKLQkgICAgMHg4NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBIQ05UUkxfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDSElQUlNUIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJDSElQUlNUQUNLIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJJTlRFTiIsCQkweDAyLCAweDAyIH0sCi0JeyAiUEFVU0UiLAkJMHgwNCwgMHgwNCB9LAotCXsgIklSUU1TIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJTV0lOVCIsCQkweDEwLCAweDEwIH0sCi0JeyAiUE9XUkROIiwJCTB4NDAsIDB4NDAgfQotfTsKLQotaW50Ci1haGNfaGNudHJsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihIQ05UUkxfcGFyc2VfdGFibGUsIDcsICJIQ05UUkwiLAotCSAgICAweDg3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19oYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhBRERSIiwKLQkgICAgMHg4OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfaGNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhDTlQiLAotCSAgICAweDhjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zY2JwdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JQVFIiLAotCSAgICAweDkwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IElOVFNUQVRfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTRVFJTlQiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkNNRENNUExUIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJTQ1NJSU5UIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJCUktBRFJJTlQiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkJBRF9QSEFTRSIsCQkweDAxLCAweDAxIH0sCi0JeyAiSU5UX1BFTkQiLAkJMHgwZiwgMHgwZiB9LAotCXsgIlNFTkRfUkVKRUNUIiwJMHgxMSwgMHgxMSB9LAotCXsgIlBST1RPX1ZJT0xBVElPTiIsCTB4MjEsIDB4MjEgfSwKLQl7ICJOT19NQVRDSCIsCQkweDMxLCAweDMxIH0sCi0JeyAiSUdOX1dJREVfUkVTIiwJMHg0MSwgMHg0MSB9LAotCXsgIlBEQVRBX1JFSU5JVCIsCTB4NTEsIDB4NTEgfSwKLQl7ICJIT1NUX01TR19MT09QIiwJMHg2MSwgMHg2MSB9LAotCXsgIkJBRF9TVEFUVVMiLAkJMHg3MSwgMHg3MSB9LAotCXsgIlBFUlJfREVURUNURUQiLAkweDgxLCAweDgxIH0sCi0JeyAiREFUQV9PVkVSUlVOIiwJMHg5MSwgMHg5MSB9LAotCXsgIk1LTVNHX0ZBSUxFRCIsCTB4YTEsIDB4YTEgfSwKLQl7ICJNSVNTRURfQlVTRlJFRSIsCTB4YjEsIDB4YjEgfSwKLQl7ICJTQ0JfTUlTTUFUQ0giLAkweGMxLCAweGMxIH0sCi0JeyAiTk9fRlJFRV9TQ0IiLAkweGQxLCAweGQxIH0sCi0JeyAiT1VUX09GX1JBTkdFIiwJMHhlMSwgMHhlMSB9LAotCXsgIlNFUUlOVF9NQVNLIiwJMHhmMSwgMHhmMSB9Ci19OwotCi1pbnQKLWFoY19pbnRzdGF0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihJTlRTVEFUX3BhcnNlX3RhYmxlLCAyMSwgIklOVFNUQVQiLAotCSAgICAweDkxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENMUklOVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkNMUlNFUUlOVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiQ0xSQ01ESU5UIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJDTFJTQ1NJSU5UIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJDTFJCUktBRFJJTlQiLAkweDA4LCAweDA4IH0sCi0JeyAiQ0xSUEFSRVJSIiwJCTB4MTAsIDB4MTAgfQotfTsKLQotaW50Ci1haGNfY2xyaW50X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihDTFJJTlRfcGFyc2VfdGFibGUsIDUsICJDTFJJTlQiLAotCSAgICAweDkyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEVSUk9SX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiSUxMSEFERFIiLAkJMHgwMSwgMHgwMSB9LAogCXsgIklMTFNBRERSIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTExMTUsNjIgKzMzNiw2IEBACiAJICAgIDB4OTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhjX2Rmd2FkZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERldBRERSIiwKLQkgICAgMHg5NSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfZGZkYXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERkRBVCIsCi0JICAgIDB4OTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCQ05UX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU0NCQVVUTyIsCQkweDgwLCAweDgwIH0sCi0JeyAiU0NCQ05UX01BU0siLAkweDFmLCAweDFmIH0KLX07Ci0KLWludAotYWhjX3NjYmNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoU0NCQ05UX3BhcnNlX3RhYmxlLCAyLCAiU0NCQ05UIiwKLQkgICAgMHg5YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfcWluZmlmb19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlFJTkZJRk8iLAotCSAgICAweDliLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19xb3V0Zmlmb19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlFPVVRGSUZPIiwKLQkgICAgMHg5ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBDUkNDT05UUk9MMV9wYXJzZV90YWJsZVtdID0gewotCXsgIlRBUkdDUkNDTlRFTiIsCTB4MDQsIDB4MDQgfSwKLQl7ICJUQVJHQ1JDRU5ERU4iLAkweDA4LCAweDA4IH0sCi0JeyAiQ1JDUkVRQ0hLRU4iLAkweDEwLCAweDEwIH0sCi0JeyAiQ1JDRU5EQ0hLRU4iLAkweDIwLCAweDIwIH0sCi0JeyAiQ1JDVkFMQ0hLRU4iLAkweDQwLCAweDQwIH0sCi0JeyAiQ1JDT05TRUVOIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGNfY3JjY29udHJvbDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKENSQ0NPTlRST0wxX3BhcnNlX3RhYmxlLCA2LCAiQ1JDQ09OVFJPTDEiLAotCSAgICAweDlkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lQSEFTRV9wYXJzZV90YWJsZVtdID0gewogCXsgIkRBVEFfT1VUX1BIQVNFIiwJMHgwMSwgMHgwMSB9LAogCXsgIkRBVEFfSU5fUEhBU0UiLAkweDAyLCAweDAyIH0sCkBAIC0xMTg4LDE3ICszNTMsNiBAQAogCSAgICAweDllLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNGVU5DVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkFMVF9NT0RFIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGNfc2Z1bmN0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTRlVOQ1RfcGFyc2VfdGFibGUsIDEsICJTRlVOQ1QiLAotCSAgICAweDlmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBpbnQKIGFoY19zY2JfYmFzZV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CkBAIC0xMjA2LDgwICszNjAsNiBAQAogCSAgICAweGEwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoY19zY2JfY2RiX3B0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9DREJfUFRSIiwKLQkgICAgMHhhMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc2NiX3Jlc2lkdWFsX3NncHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1JFU0lEVUFMX1NHUFRSIiwKLQkgICAgMHhhNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc2NiX3Njc2lfc3RhdHVzX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1NDU0lfU1RBVFVTIiwKLQkgICAgMHhhOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc2NiX3RhcmdldF9waGFzZXNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfVEFSR0VUX1BIQVNFUyIsCi0JICAgIDB4YTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX3NjYl90YXJnZXRfZGF0YV9kaXJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfVEFSR0VUX0RBVEFfRElSIiwKLQkgICAgMHhhYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc2NiX3RhcmdldF9pdGFnX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1RBUkdFVF9JVEFHIiwKLQkgICAgMHhhYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc2NiX2RhdGFwdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfREFUQVBUUiIsCi0JICAgIDB4YWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0RBVEFDTlRfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTR19MQVNUX1NFRyIsCTB4ODAsIDB4ODAgfSwKLQl7ICJTR19ISUdIX0FERFJfQklUUyIsCTB4N2YsIDB4N2YgfQotfTsKLQotaW50Ci1haGNfc2NiX2RhdGFjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNDQl9EQVRBQ05UX3BhcnNlX3RhYmxlLCAyLCAiU0NCX0RBVEFDTlQiLAotCSAgICAweGIwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9TR1BUUl9wYXJzZV90YWJsZVtdID0gewotCXsgIlNHX0xJU1RfTlVMTCIsCTB4MDEsIDB4MDEgfSwKLQl7ICJTR19GVUxMX1JFU0lEIiwJMHgwMiwgMHgwMiB9LAotCXsgIlNHX1JFU0lEX1ZBTElEIiwJMHgwNCwgMHgwNCB9Ci19OwotCi1pbnQKLWFoY19zY2Jfc2dwdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNDQl9TR1BUUl9wYXJzZV90YWJsZSwgMywgIlNDQl9TR1BUUiIsCi0JICAgIDB4YjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0NPTlRST0xfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJESVNDT05ORUNURUQiLAkweDA0LCAweDA0IH0sCiAJeyAiVUxUUkFFTkIiLAkJMHgwOCwgMHgwOCB9LApAQCAtMTMzMSwyNDggKzQxMSwzIEBACiAJICAgIDB4YmIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhjX3NjYl9jZGJfbGVuX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX0NEQl9MRU4iLAotCSAgICAweGJjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zY2Jfc2NzaXJhdGVfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfU0NTSVJBVEUiLAotCSAgICAweGJkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zY2Jfc2NzaW9mZnNldF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9TQ1NJT0ZGU0VUIiwKLQkgICAgMHhiZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc2NiX25leHRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfTkVYVCIsCi0JICAgIDB4YmYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0VFQ1RMXzI4NDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJET18yODQwIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJDS18yODQwIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJDU18yODQwIiwJCTB4MDQsIDB4MDQgfQotfTsKLQotaW50Ci1haGNfc2VlY3RsXzI4NDBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNFRUNUTF8yODQwX3BhcnNlX3RhYmxlLCAzLCAiU0VFQ1RMXzI4NDAiLAotCSAgICAweGMwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNUQVRVU18yODQwX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiRElfMjg0MCIsCQkweDAxLCAweDAxIH0sCi0JeyAiRUVQUk9NX1RGIiwJCTB4ODAsIDB4ODAgfSwKLQl7ICJBRFNFTCIsCQkweDFlLCAweDFlIH0sCi0JeyAiQklPU19TRUwiLAkJMHg2MCwgMHg2MCB9Ci19OwotCi1pbnQKLWFoY19zdGF0dXNfMjg0MF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoU1RBVFVTXzI4NDBfcGFyc2VfdGFibGUsIDQsICJTVEFUVVNfMjg0MCIsCi0JICAgIDB4YzEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX3NjYl82NF9idHRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfNjRfQlRUIiwKLQkgICAgMHhkMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfY2NoYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDSEFERFIiLAotCSAgICAweGUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19jY2hjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ0hDTlQiLAotCSAgICAweGU4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19jY3NncmFtX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTR1JBTSIsCi0JICAgIDB4ZTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2Njc2dhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTR0FERFIiLAotCSAgICAweGVhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENDU0dDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDQ1NHUkVTRVQiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlNHX0ZFVENIX05FRURFRCIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDQ1NHRU4iLAkJMHgwOCwgMHgwOCB9LAotCXsgIkNDU0dET05FIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGNfY2NzZ2N0bF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoQ0NTR0NUTF9wYXJzZV90YWJsZSwgNCwgIkNDU0dDVEwiLAotCSAgICAweGViLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19jY3NjYnJhbV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDU0NCUkFNIiwKLQkgICAgMHhlYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfY2NzY2JhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTQ0JBRERSIiwKLQkgICAgMHhlZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBDQ1NDQkNUTF9wYXJzZV90YWJsZVtdID0gewotCXsgIkNDU0NCUkVTRVQiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkNDU0NCRElSIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJDQ1NDQkVOIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJDQ0FSUkVOIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJBUlJET05FIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJDQ1NDQkRPTkUiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoY19jY3NjYmN0bF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoQ0NTQ0JDVExfcGFyc2VfdGFibGUsIDYsICJDQ1NDQkNUTCIsCi0JICAgIDB4ZWUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2Njc2NiY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTQ0JDTlQiLAotCSAgICAweGVmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zY2JiYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQkJBRERSIiwKLQkgICAgMHhmMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfY2NzY2JwdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQlBUUiIsCi0JICAgIDB4ZjEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhjX2huc2NiX3FvZmZfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJITlNDQl9RT0ZGIiwKLQkgICAgMHhmNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGNfc25zY2JfcW9mZl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNOU0NCX1FPRkYiLAotCSAgICAweGY2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoY19zZHNjYl9xb2ZmX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0RTQ0JfUU9GRiIsCi0JICAgIDB4ZjgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgUU9GRl9DVExTVEFfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJTRFNDQl9ST0xMT1ZFUiIsCTB4MTAsIDB4MTAgfSwKLQl7ICJTTlNDQl9ST0xMT1ZFUiIsCTB4MjAsIDB4MjAgfSwKLQl7ICJTQ0JfQVZBSUwiLAkJMHg0MCwgMHg0MCB9LAotCXsgIlNDQl9RU0laRV8yNTYiLAkweDA2LCAweDA2IH0sCi0JeyAiU0NCX1FTSVpFIiwJCTB4MDcsIDB4MDcgfQotfTsKLQotaW50Ci1haGNfcW9mZl9jdGxzdGFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFFPRkZfQ1RMU1RBX3BhcnNlX3RhYmxlLCA1LCAiUU9GRl9DVExTVEEiLAotCSAgICAweGZhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERGRl9USFJTSF9wYXJzZV90YWJsZVtdID0gewotCXsgIlJEX0RGVEhSU0hfTUlOIiwJMHgwMCwgMHgwMCB9LAotCXsgIldSX0RGVEhSU0hfTUlOIiwJMHgwMCwgMHgwMCB9LAotCXsgIlJEX0RGVEhSU0hfMjUiLAkweDAxLCAweDAxIH0sCi0JeyAiUkRfREZUSFJTSF81MCIsCTB4MDIsIDB4MDIgfSwKLQl7ICJSRF9ERlRIUlNIXzYzIiwJMHgwMywgMHgwMyB9LAotCXsgIlJEX0RGVEhSU0hfNzUiLAkweDA0LCAweDA0IH0sCi0JeyAiUkRfREZUSFJTSF84NSIsCTB4MDUsIDB4MDUgfSwKLQl7ICJSRF9ERlRIUlNIXzkwIiwJMHgwNiwgMHgwNiB9LAotCXsgIlJEX0RGVEhSU0giLAkJMHgwNywgMHgwNyB9LAotCXsgIlJEX0RGVEhSU0hfTUFYIiwJMHgwNywgMHgwNyB9LAotCXsgIldSX0RGVEhSU0hfMjUiLAkweDEwLCAweDEwIH0sCi0JeyAiV1JfREZUSFJTSF81MCIsCTB4MjAsIDB4MjAgfSwKLQl7ICJXUl9ERlRIUlNIXzYzIiwJMHgzMCwgMHgzMCB9LAotCXsgIldSX0RGVEhSU0hfNzUiLAkweDQwLCAweDQwIH0sCi0JeyAiV1JfREZUSFJTSF84NSIsCTB4NTAsIDB4NTAgfSwKLQl7ICJXUl9ERlRIUlNIXzkwIiwJMHg2MCwgMHg2MCB9LAotCXsgIldSX0RGVEhSU0giLAkJMHg3MCwgMHg3MCB9LAotCXsgIldSX0RGVEhSU0hfTUFYIiwJMHg3MCwgMHg3MCB9Ci19OwotCi1pbnQKLWFoY19kZmZfdGhyc2hfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKERGRl9USFJTSF9wYXJzZV90YWJsZSwgMTgsICJERkZfVEhSU0giLAotCSAgICAweGZiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNHX0NBQ0hFX1NIQURPV19wYXJzZV90YWJsZVtdID0gewotCXsgIkxBU1RfU0VHX0RPTkUiLAkweDAxLCAweDAxIH0sCi0JeyAiTEFTVF9TRUciLAkJMHgwMiwgMHgwMiB9LAotCXsgIlNHX0FERFJfTUFTSyIsCTB4ZjgsIDB4ZjggfQotfTsKLQotaW50Ci1haGNfc2dfY2FjaGVfc2hhZG93X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTR19DQUNIRV9TSEFET1dfcGFyc2VfdGFibGUsIDMsICJTR19DQUNIRV9TSEFET1ciLAotCSAgICAweGZjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNHX0NBQ0hFX1BSRV9wYXJzZV90YWJsZVtdID0gewotCXsgIkxBU1RfU0VHX0RPTkUiLAkweDAxLCAweDAxIH0sCi0JeyAiTEFTVF9TRUciLAkJMHgwMiwgMHgwMiB9LAotCXsgIlNHX0FERFJfTUFTSyIsCTB4ZjgsIDB4ZjggfQotfTsKLQotaW50Ci1haGNfc2dfY2FjaGVfcHJlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTR19DQUNIRV9QUkVfcGFyc2VfdGFibGUsIDMsICJTR19DQUNIRV9QUkUiLAotCSAgICAweGZjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CmluZGV4IDgxYmU2YTIuLmU0MDY0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CkBAIC0xNDcsNiArMTQ3LDggQEAKIAogJXRva2VuIFRfQUNDRVNTX01PREUKIAorJXRva2VuIFRfRE9OVF9HRU5FUkFURV9ERUJVR19DT0RFCisKICV0b2tlbiBUX01PREVTCiAKICV0b2tlbiBUX0RFRklORQpAQCAtMzU3LDYgKzM1OSw3IEBACiB8CXNpemUKIHwJY291bnQKIHwJYWNjZXNzX21vZGUKK3wJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlCiB8CW1vZGVzCiB8CWZpZWxkX2RlZm4KIHwJZW51bV9kZWZuCkBAIC00MTAsNiArNDEzLDEzIEBACiAJfQogOwogCitkb250X2dlbmVyYXRlX2RlYnVnX2NvZGU6CisJVF9ET05UX0dFTkVSQVRFX0RFQlVHX0NPREUKKwl7CisJCWN1cl9zeW1ib2wtPmRvbnRfZ2VuZXJhdGVfZGVidWdfY29kZSA9IDE7CisJfQorOworCiBtb2RlczoKIAlUX01PREVTIG1vZGVfbGlzdAogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc2Nhbi5sIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zY2FuLmwKaW5kZXggMmM3ZjAyZC4uOTNjODY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zY2FuLmwKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zY2FuLmwKQEAgLTE2NCw2ICsxNjQsNyBAQAogYWRkcmVzcwkJCXsgcmV0dXJuIFRfQUREUkVTUzsgfQogY291bnQJCQl7IHJldHVybiBUX0NPVU5UOyB9CiBhY2Nlc3NfbW9kZQkJeyByZXR1cm4gVF9BQ0NFU1NfTU9ERTsgfQorZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlIHsgcmV0dXJuIFRfRE9OVF9HRU5FUkFURV9ERUJVR19DT0RFOyB9CiBtb2RlcwkJCXsgcmV0dXJuIFRfTU9ERVM7IH0KIFJXfFJPfFdPCQl7CiAJCQkJIGlmIChzdHJjbXAoeXl0ZXh0LCAiUlciKSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc3ltYm9sLmMKaW5kZXggZmNkMzU3OC4uMDc4ZWQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3N5bWJvbC5jCkBAIC01MzksNiArNTM5LDkgQEAKIAlhaWNfcHJpbnRfaW5jbHVkZShkZmlsZSwgc3RvY2tfaW5jbHVkZV9maWxlKTsKIAlTTElTVF9GT1JFQUNIKGN1cm5vZGUsICZyZWdpc3RlcnMsIGxpbmtzKSB7CiAKKwkJaWYgKGN1cm5vZGUtPnN5bWJvbC0+ZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlKQorCQkJY29udGludWU7CisKIAkJc3dpdGNoKGN1cm5vZGUtPnN5bWJvbC0+dHlwZSkgewogCQljYXNlIFJFR0lTVEVSOgogCQljYXNlIFNDQkxPQzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc3ltYm9sLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3N5bWJvbC5oCmluZGV4IDA1MTkwYzEuLjJiYTczYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc3ltYm9sLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuaApAQCAtMTM3LDcgKzEzNyw4IEBACiAJCXN0cnVjdCBsYWJlbF9pbmZvICpsaW5mbzsKIAkJc3RydWN0IGNvbmRfaW5mbyAgKmNvbmRpbmZvOwogCQlzdHJ1Y3QgbWFjcm9faW5mbyAqbWFjcm9pbmZvOwotCX1pbmZvOworCX0gaW5mbzsKKwlpbnQJZG9udF9nZW5lcmF0ZV9kZWJ1Z19jb2RlOwogfSBzeW1ib2xfdDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc3ltYm9sX3JlZiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKaW5kZXggNjlmODM0Ni4uNTg3N2YyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwpAQCAtMTg5LDcgKzE4OSw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm11X3JlYWQiLAogCQkubW9kZSA9IFNfSVJVU1IgLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gMTAzMiwKIAkucmVhZCA9IGFyY21zcl9zeXNmc19pb3BfbWVzc2FnZV9yZWFkLApAQCAtMTk5LDcgKzE5OCw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm11X3dyaXRlIiwKIAkJLm1vZGUgPSBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gMTAzMiwKIAkud3JpdGUgPSBhcmNtc3Jfc3lzZnNfaW9wX21lc3NhZ2Vfd3JpdGUsCkBAIC0yMDksNyArMjA3LDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfY2xlYXIiLAogCQkubW9kZSA9IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxLAogCS53cml0ZSA9IGFyY21zcl9zeXNmc19pb3BfbWVzc2FnZV9jbGVhciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwppbmRleCA5Nzg1ZDczLi40MDAzZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCkBAIC0xMzY0LDcgKzEzNjQsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0Ynl0ZV90YWJsZVtdPXsKICJESURfT0siLCAiRElEX05PX0NPTk5FQ1QiLCAiRElEX0JVU19CVVNZIiwgIkRJRF9USU1FX09VVCIsICJESURfQkFEX1RBUkdFVCIsCiAiRElEX0FCT1JUIiwgIkRJRF9QQVJJVFkiLCAiRElEX0VSUk9SIiwgIkRJRF9SRVNFVCIsICJESURfQkFEX0lOVFIiLAotIkRJRF9QQVNTVEhST1VHSCIsICJESURfU09GVF9FUlJPUiIsICJESURfSU1NX1JFVFJZIiwgIkRJRF9SRVFVRVVFIn07CisiRElEX1BBU1NUSFJPVUdIIiwgIkRJRF9TT0ZUX0VSUk9SIiwgIkRJRF9JTU1fUkVUUlkiLCAiRElEX1JFUVVFVUUiLAorIkRJRF9UUkFOU1BPUlRfRElTUlVQVEVEIiwgIkRJRF9UUkFOU1BPUlRfRkFJTEZBU1QiIH07CiAjZGVmaW5lIE5VTV9IT1NUQllURV9TVFJTIEFSUkFZX1NJWkUoaG9zdGJ5dGVfdGFibGUpCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHJpdmVyYnl0ZV90YWJsZVtdPXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwppbmRleCA3MDhlNDc1Li5lMzU2YjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCkBAIC0xMDksNyArMTA5LDggQEAKIAl9CiAKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVCB8IFJFUV9OT01FUkdFOworCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcnEtPnJldHJpZXMgPSBBTFVBX0ZBSUxPVkVSX1JFVFJJRVM7CiAJcnEtPnRpbWVvdXQgPSBBTFVBX0ZBSUxPVkVSX1RJTUVPVVQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMKaW5kZXggOGY0NTU3MC4uMGU1NzJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMKQEAgLTMwMyw3ICszMDMsOCBAQAogCiAJcnEtPmNtZFs0XSA9IGxlbjsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVDsKKwlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCSBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJxLT50aW1lb3V0ID0gQ0xBUklJT05fVElNRU9VVDsKIAlycS0+cmV0cmllcyA9IENMQVJJSU9OX1JFVFJJRVM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCmluZGV4IDVlOTNjODguLjlhZWM0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYwpAQCAtMTEyLDcgKzExMiw4IEBACiAJCXJldHVybiBTQ1NJX0RIX1JFU19URU1QX1VOQVZBSUw7CiAKIAlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUOworCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCSAgUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAlyZXEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUoVEVTVF9VTklUX1JFQURZKTsKIAlyZXEtPmNtZFswXSA9IFRFU1RfVU5JVF9SRUFEWTsKIAlyZXEtPnRpbWVvdXQgPSBIUF9TV19USU1FT1VUOwpAQCAtMjA0LDcgKzIwNSw4IEBACiAJCXJldHVybiBTQ1NJX0RIX1JFU19URU1QX1VOQVZBSUw7CiAKIAlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUOworCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCSAgUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAlyZXEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUoU1RBUlRfU1RPUCk7CiAJcmVxLT5jbWRbMF0gPSBTVEFSVF9TVE9QOwogCXJlcS0+Y21kWzRdID0gMTsJLyogU3RhcnQgc3BpbiBjeWNsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IDUwYmY5NWYuLjNkNTBjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTIyNiw3ICsyMjYsOCBAQAogCX0KIAogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUIHwgUkVRX05PTUVSR0U7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAlycS0+cmV0cmllcyA9IFJEQUNfUkVUUklFUzsKIAlycS0+dGltZW91dCA9IFJEQUNfVElNRU9VVDsKIApAQCAtNDAwLDYgKzQwMSw5IEBACiAJCX0KIAl9CiAKKwlpZiAoaC0+bHVuX3N0YXRlID09IFJEQUNfTFVOX1VOT1dORUQpCisJCWgtPnN0YXRlID0gUkRBQ19TVEFURV9QQVNTSVZFOworCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDRlMGI3YzguLjc2NTA3MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTIwMzEsOCArMjAzMSw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0gZWxzZQogCQlpYm12ZmNfaXNzdWVfZmNfaG9zdF9saXAoc2hvc3QpOwotCi0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CiAJTEVBVkU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKaW5kZXggNzQwYmFkNC4uMjM3MGZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKQEAgLTM0Myw2ICszNDMsMTEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgaWRlc2NzaV9wcm9jW10gPSB7CisJeyAiY2FwYWNpdHkiLCBTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlX3JlYWRfY2FwYWNpdHksIE5VTEwgfSwKKwl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorfTsKKwogI2RlZmluZSBpZGVfc2NzaV9kZXZzZXRfZ2V0KG5hbWUsIGZpZWxkKSBcCiBzdGF0aWMgaW50IGdldF8jI25hbWUoaWRlX2RyaXZlX3QgKmRyaXZlKSBcCiB7IFwKQEAgLTM3OCw2ICszODMsMTYgQEAKIAlJREVfUFJPQ19ERVZTRVQodHJhbnNmb3JtLCAwLAkgMyksCiAJeyAwIH0sCiB9OworCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCAqaWRlX3Njc2lfcHJvY19lbnRyaWVzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gaWRlc2NzaV9wcm9jOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqaWRlX3Njc2lfcHJvY19kZXZzZXRzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gaWRlc2NzaV9zZXR0aW5nczsKK30KICNlbmRpZgogCiAvKgpAQCAtNDE5LDEzICs0MzQsNiBAQAogCiBzdGF0aWMgaW50IGlkZV9zY3NpX3Byb2JlKGlkZV9kcml2ZV90ICopOwogCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi1zdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBpZGVzY3NpX3Byb2NbXSA9IHsKLQl7ICJjYXBhY2l0eSIsIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAotCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Ci19OwotI2VuZGlmCi0KIHN0YXRpYyBpZGVfZHJpdmVyX3QgaWRlc2NzaV9kcml2ZXIgPSB7CiAJLmdlbl9kcml2ZXIgPSB7CiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTQzOSw0NSArNDQ3LDM5IEBACiAJLmVuZF9yZXF1ZXN0CQk9IGlkZXNjc2lfZW5kX3JlcXVlc3QsCiAJLmVycm9yICAgICAgICAgICAgICAgICAgPSBpZGVzY3NpX2F0YXBpX2Vycm9yLAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVzY3NpX3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZXNjc2lfc2V0dGluZ3MsCisJLnByb2NfZW50cmllcwkJPSBpZGVfc2NzaV9wcm9jX2VudHJpZXMsCisJLnByb2NfZGV2c2V0cwkJPSBpZGVfc2NzaV9wcm9jX2RldnNldHMsCiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgaWRlc2NzaV9pZGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgaWRlc2NzaV9pZGVfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfc2NzaV9vYmogKnNjc2k7CisJc3RydWN0IGlkZV9zY3NpX29iaiAqc2NzaSA9IGlkZV9zY3NpX2dldChiZGV2LT5iZF9kaXNrKTsKIAotCWlmICghKHNjc2kgPSBpZGVfc2NzaV9nZXQoZGlzaykpKQorCWlmICghc2NzaSkKIAkJcmV0dXJuIC1FTlhJTzsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlkZXNjc2lfaWRlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGlkZXNjc2lfaWRlX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGlkZV9zY3NpX29iaiAqc2NzaSA9IGlkZV9zY3NpX2coZGlzayk7Ci0KLQlpZGVfc2NzaV9wdXQoc2NzaSk7Ci0KKwlpZGVfc2NzaV9wdXQoaWRlX3Njc2lfZyhkaXNrKSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWRlc2NzaV9pZGVfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGlkZXNjc2lfaWRlX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwogCXN0cnVjdCBpZGVfc2NzaV9vYmogKnNjc2kgPSBpZGVfc2NzaV9nKGJkZXYtPmJkX2Rpc2spOwotCXJldHVybiBnZW5lcmljX2lkZV9pb2N0bChzY3NpLT5kcml2ZSwgZmlsZSwgYmRldiwgY21kLCBhcmcpOworCXJldHVybiBnZW5lcmljX2lkZV9pb2N0bChzY3NpLT5kcml2ZSwgYmRldiwgY21kLCBhcmcpOwogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZXNjc2lfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBpZGVzY3NpX2lkZV9vcGVuLAogCS5yZWxlYXNlCT0gaWRlc2NzaV9pZGVfcmVsZWFzZSwKLQkuaW9jdGwJCT0gaWRlc2NzaV9pZGVfaW9jdGwsCisJLmxvY2tlZF9pb2N0bAk9IGlkZXNjc2lfaWRlX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBpZGVzY3NpX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggZDMwZWI3Yi4uZGVkODU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtMjQ1NiwyMCArMjQ1NiwxNCBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopc2hvc3QtPmhvc3RkYXRhOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFncyA9IDA7Ci0JaW50IHNpemUgPSBJUFJfVFJBQ0VfU0laRTsKLQljaGFyICpzcmMgPSAoY2hhciAqKWlvYV9jZmctPnRyYWNlOwotCi0JaWYgKG9mZiA+IHNpemUpCi0JCXJldHVybiAwOwotCWlmIChvZmYgKyBjb3VudCA+IHNpemUpIHsKLQkJc2l6ZSAtPSBvZmY7Ci0JCWNvdW50ID0gc2l6ZTsKLQl9CisJc3NpemVfdCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwotCW1lbWNweShidWYsICZzcmNbb2ZmXSwgY291bnQpOworCXJldCA9IG1lbW9yeV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsICZvZmYsIGlvYV9jZmctPnRyYWNlLAorCQkJCUlQUl9UUkFDRV9TSVpFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7Ci0JcmV0dXJuIGNvdW50OworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGlwcl90cmFjZV9hdHRyID0gewpAQCAtNzg1OSw3ICs3ODUzLDYgQEAKIAkucmVtb3ZlID0gaXByX3JlbW92ZSwKIAkuc2h1dGRvd24gPSBpcHJfc2h1dGRvd24sCiAJLmVycl9oYW5kbGVyID0gJmlwcl9lcnJfaGFuZGxlciwKLQkuZHluaWRzLnVzZV9kcml2ZXJfZGF0YSA9IDEKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDJhMmYwMDkuLmVkNmM1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTUyMywyMiArNTIzLDIwIEBACiB9CiAKIC8qKgotICogaXNjc2lfZGF0YV9yc3AgLSBTQ1NJIERhdGEtSW4gUmVzcG9uc2UgcHJvY2Vzc2luZworICogaXNjc2lfZGF0YV9pbiAtIFNDU0kgRGF0YS1JbiBSZXNwb25zZSBwcm9jZXNzaW5nCiAgKiBAY29ubjogaXNjc2kgY29ubmVjdGlvbgogICogQHRhc2s6IHNjc2kgY29tbWFuZCB0YXNrCiAgKiovCiBzdGF0aWMgaW50Ci1pc2NzaV9kYXRhX3JzcChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCitpc2NzaV9kYXRhX2luKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKIHsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2sgKnRjcF90YXNrID0gdGFzay0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfZGF0YV9yc3AgKnJoZHIgPSAoc3RydWN0IGlzY3NpX2RhdGFfcnNwICopdGNwX2Nvbm4tPmluLmhkcjsKLQlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247Ci0Jc3RydWN0IHNjc2lfY21uZCAqc2MgPSB0YXNrLT5zYzsKIAlpbnQgZGF0YXNuID0gYmUzMl90b19jcHUocmhkci0+ZGF0YXNuKTsKLQl1bnNpZ25lZCB0b3RhbF9pbl9sZW5ndGggPSBzY3NpX2luKHNjKS0+bGVuZ3RoOworCXVuc2lnbmVkIHRvdGFsX2luX2xlbmd0aCA9IHNjc2lfaW4odGFzay0+c2MpLT5sZW5ndGg7CiAKLQlpc2NzaV91cGRhdGVfY21kc24oc2Vzc2lvbiwgKHN0cnVjdCBpc2NzaV9ub3Bpbiopcmhkcik7CisJaXNjc2lfdXBkYXRlX2NtZHNuKGNvbm4tPnNlc3Npb24sIChzdHJ1Y3QgaXNjc2lfbm9waW4qKXJoZHIpOwogCWlmICh0Y3BfY29ubi0+aW4uZGF0YWxlbiA9PSAwKQogCQlyZXR1cm4gMDsKIApAQCAtNTU4LDIzICs1NTYsNiBAQAogCQlyZXR1cm4gSVNDU0lfRVJSX0RBVEFfT0ZGU0VUOwogCX0KIAotCWlmIChyaGRyLT5mbGFncyAmIElTQ1NJX0ZMQUdfREFUQV9TVEFUVVMpIHsKLQkJc2MtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgcmhkci0+Y21kX3N0YXR1czsKLQkJY29ubi0+ZXhwX3N0YXRzbiA9IGJlMzJfdG9fY3B1KHJoZHItPnN0YXRzbikgKyAxOwotCQlpZiAocmhkci0+ZmxhZ3MgJiAoSVNDU0lfRkxBR19EQVRBX1VOREVSRkxPVyB8Ci0JCSAgICAgICAgICAgICAgICAgICBJU0NTSV9GTEFHX0RBVEFfT1ZFUkZMT1cpKSB7Ci0JCQlpbnQgcmVzX2NvdW50ID0gYmUzMl90b19jcHUocmhkci0+cmVzaWR1YWxfY291bnQpOwotCi0JCQlpZiAocmVzX2NvdW50ID4gMCAmJgotCQkJICAgIChyaGRyLT5mbGFncyAmIElTQ1NJX0ZMQUdfQ01EX09WRVJGTE9XIHx8Ci0JCQkgICAgIHJlc19jb3VudCA8PSB0b3RhbF9pbl9sZW5ndGgpKQotCQkJCXNjc2lfaW4oc2MpLT5yZXNpZCA9IHJlc19jb3VudDsKLQkJCWVsc2UKLQkJCQlzYy0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KSB8Ci0JCQkJCXJoZHItPmNtZF9zdGF0dXM7Ci0JCX0KLQl9Ci0KIAljb25uLT5kYXRhaW5fcGR1c19jbnQrKzsKIAlyZXR1cm4gMDsKIH0KQEAgLTc3NCw3ICs3NTUsNyBAQAogCQlpZiAoIXRhc2spCiAJCQlyYyA9IElTQ1NJX0VSUl9CQURfSVRUOwogCQllbHNlCi0JCQlyYyA9IGlzY3NpX2RhdGFfcnNwKGNvbm4sIHRhc2spOworCQkJcmMgPSBpc2NzaV9kYXRhX2luKGNvbm4sIHRhc2spOwogCQlpZiAocmMpIHsKIAkJCXNwaW5fdW5sb2NrKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIAkJCWJyZWFrOwpAQCAtOTk4LDcgKzk3OSw3IEBACiAKIGVycm9yOgogCWRlYnVnX3RjcCgiRXJyb3IgcmVjZWl2aW5nIFBEVSwgZXJybm89JWRcbiIsIHJjKTsKLQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgcmMpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTE3LDggKzEwOTgsMTAgQEAKIAogCXdoaWxlICgxKSB7CiAJCXJjID0gaXNjc2lfdGNwX3htaXRfc2VnbWVudCh0Y3BfY29ubiwgc2VnbWVudCk7Ci0JCWlmIChyYyA8IDApCisJCWlmIChyYyA8IDApIHsKKwkJCXJjID0gSVNDU0lfRVJSX1hNSVRfRkFJTEVEOwogCQkJZ290byBlcnJvcjsKKwkJfQogCQlpZiAocmMgPT0gMCkKIAkJCWJyZWFrOwogCkBAIC0xMTI3LDcgKzExMTAsNyBAQAogCQlpZiAoc2VnbWVudC0+dG90YWxfY29waWVkID49IHNlZ21lbnQtPnRvdGFsX3NpemUpIHsKIAkJCWlmIChzZWdtZW50LT5kb25lICE9IE5VTEwpIHsKIAkJCQlyYyA9IHNlZ21lbnQtPmRvbmUodGNwX2Nvbm4sIHNlZ21lbnQpOwotCQkJCWlmIChyYyA8IDApCisJCQkJaWYgKHJjICE9IDApCiAJCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCX0KQEAgLTExNDIsOCArMTEyNSw4IEBACiAJLyogVHJhbnNtaXQgZXJyb3IuIFdlIGNvdWxkIGluaXRpYXRlIGVycm9yIHJlY292ZXJ5CiAJICogaGVyZS4gKi8KIAlkZWJ1Z190Y3AoIkVycm9yIHNlbmRpbmcgUERVLCBlcnJubz0lZFxuIiwgcmMpOwotCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwotCXJldHVybiByYzsKKwlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgcmMpOworCXJldHVybiAtRUlPOwogfQogCiAvKioKQEAgLTE5MDQsNiArMTg4Nyw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKIAogCWlzY3NpX3IydHBvb2xfZnJlZShjbHNfc2Vzc2lvbi0+ZGRfZGF0YSk7CisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CiAKIAlpc2NzaV9ob3N0X3JlbW92ZShzaG9zdCk7CiAJaXNjc2lfaG9zdF9mcmVlKHNob3N0KTsKQEAgLTE5MjcsNyArMTkxMSw3IEBACiAJLmNtZF9wZXJfbHVuCQk9IElTQ1NJX0RFRl9DTURfUEVSX0xVTiwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAotCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBpc2NzaV9laF9ob3N0X3Jlc2V0LAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LAogCS51c2VfY2x1c3RlcmluZyAgICAgICAgID0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5zbGF2ZV9jb25maWd1cmUgICAgICAgID0gaXNjc2lfdGNwX3NsYXZlX2NvbmZpZ3VyZSwKIAkucHJvY19uYW1lCQk9ICJpc2NzaV90Y3AiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCBkYTdiNjdkLi44MDFjN2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtNDA0LDExICs0MDQsNiBAQAogCQljb25uLT5zZXNzaW9uLT5xdWV1ZWRfY21kc24tLTsKIAllbHNlCiAJCWNvbm4tPnNlc3Npb24tPnR0LT5jbGVhbnVwX3Rhc2soY29ubiwgdGFzayk7Ci0JLyoKLQkgKiBDaGVjayBpZiBjbGVhbnVwX3Rhc2sgZHJvcHBlZCB0aGUgbG9jayBhbmQgdGhlIGNvbW1hbmQgY29tcGxldGVkLAotCSAqLwotCWlmICghdGFzay0+c2MpCi0JCXJldHVybjsKIAogCXNjLT5yZXN1bHQgPSBlcnI7CiAJaWYgKCFzY3NpX2JpZGlfY21uZChzYykpCkBAIC02MzMsNiArNjI4LDQwIEBACiAJX19pc2NzaV9wdXRfdGFzayh0YXNrKTsKIH0KIAorLyoqCisgKiBpc2NzaV9kYXRhX2luX3JzcCAtIFNDU0kgRGF0YS1JbiBSZXNwb25zZSBwcm9jZXNzaW5nCisgKiBAY29ubjogaXNjc2kgY29ubmVjdGlvbgorICogQGhkcjogIGlzY3NpIHBkdQorICogQHRhc2s6IHNjc2kgY29tbWFuZCB0YXNrCisgKiovCitzdGF0aWMgdm9pZAoraXNjc2lfZGF0YV9pbl9yc3Aoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV9oZHIgKmhkciwKKwkJICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgaXNjc2lfZGF0YV9yc3AgKnJoZHIgPSAoc3RydWN0IGlzY3NpX2RhdGFfcnNwICopaGRyOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjID0gdGFzay0+c2M7CisKKwlpZiAoIShyaGRyLT5mbGFncyAmIElTQ1NJX0ZMQUdfREFUQV9TVEFUVVMpKQorCQlyZXR1cm47CisKKwlzYy0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCByaGRyLT5jbWRfc3RhdHVzOworCWNvbm4tPmV4cF9zdGF0c24gPSBiZTMyX3RvX2NwdShyaGRyLT5zdGF0c24pICsgMTsKKwlpZiAocmhkci0+ZmxhZ3MgJiAoSVNDU0lfRkxBR19EQVRBX1VOREVSRkxPVyB8CisJICAgICAgICAgICAgICAgICAgIElTQ1NJX0ZMQUdfREFUQV9PVkVSRkxPVykpIHsKKwkJaW50IHJlc19jb3VudCA9IGJlMzJfdG9fY3B1KHJoZHItPnJlc2lkdWFsX2NvdW50KTsKKworCQlpZiAocmVzX2NvdW50ID4gMCAmJgorCQkgICAgKHJoZHItPmZsYWdzICYgSVNDU0lfRkxBR19DTURfT1ZFUkZMT1cgfHwKKwkJICAgICByZXNfY291bnQgPD0gc2NzaV9pbihzYyktPmxlbmd0aCkpCisJCQlzY3NpX2luKHNjKS0+cmVzaWQgPSByZXNfY291bnQ7CisJCWVsc2UKKwkJCXNjLT5yZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpIHwgcmhkci0+Y21kX3N0YXR1czsKKwl9CisKKwljb25uLT5zY3NpcnNwX3BkdXNfY250Kys7CisJX19pc2NzaV9wdXRfdGFzayh0YXNrKTsKK30KKwogc3RhdGljIHZvaWQgaXNjc2lfdG1mX3JzcChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX2hkciAqaGRyKQogewogCXN0cnVjdCBpc2NzaV90bV9yc3AgKnRtZiA9IChzdHJ1Y3QgaXNjc2lfdG1fcnNwICopaGRyOwpAQCAtODE4LDEyICs4NDcsNyBAQAogCQlpc2NzaV9zY3NpX2NtZF9yc3AoY29ubiwgaGRyLCB0YXNrLCBkYXRhLCBkYXRhbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9TQ1NJX0RBVEFfSU46Ci0JCWlmIChoZHItPmZsYWdzICYgSVNDU0lfRkxBR19EQVRBX1NUQVRVUykgewotCQkJY29ubi0+c2NzaXJzcF9wZHVzX2NudCsrOwotCQkJaXNjc2lfdXBkYXRlX2NtZHNuKHNlc3Npb24sCi0JCQkJCSAgIChzdHJ1Y3QgaXNjc2lfbm9waW4qKSBoZHIpOwotCQkJX19pc2NzaV9wdXRfdGFzayh0YXNrKTsKLQkJfQorCQlpc2NzaV9kYXRhX2luX3JzcChjb25uLCBoZHIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX0xPR09VVF9SU1A6CiAJCWlzY3NpX3VwZGF0ZV9jbWRzbihzZXNzaW9uLCAoc3RydWN0IGlzY3NpX25vcGluKiloZHIpOwpAQCAtOTU0LDYgKzk3OCwzOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfaXR0X3RvX2N0YXNrKTsKIAordm9pZCBpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJCSAgIGVudW0gaXNjc2lfZXJyIGVycikKK3sKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKKwljb25uID0gc2Vzc2lvbi0+bGVhZGNvbm47CisJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX1RFUk1JTkFURSB8fCAhY29ubikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlkZXYgPSBnZXRfZGV2aWNlKCZjb25uLT5jbHNfY29ubi0+ZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisJaWYgKCFkZXYpCisJICAgICAgICByZXR1cm47CisJLyoKKwkgKiBpZiB0aGUgaG9zdCBpcyBiZWluZyByZW1vdmVkIGJ5cGFzcyB0aGUgY29ubmVjdGlvbgorCSAqIHJlY292ZXJ5IGluaXRpYWxpemF0aW9uIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIGtpbGwKKwkgKiB0aGUgc2Vzc2lvbi4KKwkgKi8KKwlpZiAoZXJyID09IElTQ1NJX0VSUl9JTlZBTElEX0hPU1QpCisJCWlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoY29ubi0+Y2xzX2Nvbm4sIGVycik7CisJZWxzZQorCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgZXJyKTsKKwlwdXRfZGV2aWNlKGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9zZXNzaW9uX2ZhaWx1cmUpOworCiB2b2lkIGlzY3NpX2Nvbm5fZmFpbHVyZShzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgZW51bSBpc2NzaV9lcnIgZXJyKQogewogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKQEAgLTk2OCw5ICsxMDI0LDEwIEBACiAJaWYgKGNvbm4tPnN0b3Bfc3RhZ2UgPT0gMCkKIAkJc2Vzc2lvbi0+c3RhdGUgPSBJU0NTSV9TVEFURV9GQUlMRUQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOworCiAJc2V0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfdHgpOwogCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3J4KTsKLQlpc2NzaV9jb25uX2Vycm9yKGNvbm4tPmNsc19jb25uLCBlcnIpOworCWlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoY29ubi0+Y2xzX2Nvbm4sIGVycik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb25uX2ZhaWx1cmUpOwogCkBAIC0xMTk0LDE1ICsxMjUxLDEzIEBACiAJCXN3aXRjaCAoc2Vzc2lvbi0+c3RhdGUpIHsKIAkJY2FzZSBJU0NTSV9TVEFURV9JTl9SRUNPVkVSWToKIAkJCXJlYXNvbiA9IEZBSUxVUkVfU0VTU0lPTl9JTl9SRUNPVkVSWTsKLQkJCXNjLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OwotCQkJYnJlYWs7CisJCQlnb3RvIHJlamVjdDsKIAkJY2FzZSBJU0NTSV9TVEFURV9MT0dHSU5HX09VVDoKIAkJCXJlYXNvbiA9IEZBSUxVUkVfU0VTU0lPTl9MT0dHSU5HX09VVDsKLQkJCXNjLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OwotCQkJYnJlYWs7CisJCQlnb3RvIHJlamVjdDsKIAkJY2FzZSBJU0NTSV9TVEFURV9SRUNPVkVSWV9GQUlMRUQ6CiAJCQlyZWFzb24gPSBGQUlMVVJFX1NFU1NJT05fUkVDT1ZFUllfVElNRU9VVDsKLQkJCXNjLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJCXNjLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2OwogCQkJYnJlYWs7CiAJCWNhc2UgSVNDU0lfU1RBVEVfVEVSTUlOQVRFOgogCQkJcmVhc29uID0gRkFJTFVSRV9TRVNTSU9OX1RFUk1JTkFURTsKQEAgLTEyNjcsNyArMTMyMiw3IEBACiAJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwogCWRlYnVnX3Njc2koImNtZCAweCV4IHJlamVjdGVkICglZClcbiIsIHNjLT5jbW5kWzBdLCByZWFzb24pOwogCXNwaW5fbG9jayhob3N0LT5ob3N0X2xvY2spOwotCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCXJldHVybiBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k7CiAKIGZhdWx0OgogCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5sb2NrKTsKQEAgLTEzMDcsNyArMTM2Miw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0KTsKIAotaW50IGlzY3NpX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpCitpbnQgaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKQogewogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb247CkBAIC0xMzIxLDcgKzEzNzYsNyBAQAogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX1RFUk1JTkFURSkgewogZmFpbGVkOgotCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIGhvc3QgcmVzZXQ6IHNlc3Npb24gdGVybWluYXRlZCAiCisJCWRlYnVnX3Njc2koImZhaWxpbmcgdGFyZ2V0IHJlc2V0OiBzZXNzaW9uIHRlcm1pbmF0ZWQgIgogCQkJICAgIltDSUQgJWQgYWdlICVkXVxuIiwgY29ubi0+aWQsIHNlc3Npb24tPmFnZSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5laF9tdXRleCk7CkBAIC0xMzM2LDcgKzEzOTEsNyBAQAogCSAqLwogCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCi0JZGVidWdfc2NzaSgiaXNjc2lfZWhfaG9zdF9yZXNldCB3YWl0IGZvciByZWxvZ2luXG4iKTsKKwlkZWJ1Z19zY3NpKCJpc2NzaV9laF90YXJnZXRfcmVzZXQgd2FpdCBmb3IgcmVsb2dpblxuIik7CiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNvbm4tPmVod2FpdCwKIAkJCQkgc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfVEVSTUlOQVRFIHx8CiAJCQkJIHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX0xPR0dFRF9JTiB8fApAQCAtMTM0OCwxNCArMTQwMywxNCBAQAogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX0xPR0dFRF9JTikKIAkJaXNjc2lfc2Vzc2lvbl9wcmludGsoS0VSTl9JTkZPLCBzZXNzaW9uLAotCQkJCSAgICAgImhvc3QgcmVzZXQgc3VjY2VlZGVkXG4iKTsKKwkJCQkgICAgICJ0YXJnZXQgcmVzZXQgc3VjY2VlZGVkXG4iKTsKIAllbHNlCiAJCWdvdG8gZmFpbGVkOwogCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAltdXRleF91bmxvY2soJnNlc3Npb24tPmVoX211dGV4KTsKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2VoX2hvc3RfcmVzZXQpOworRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0KTsKIAogc3RhdGljIHZvaWQgaXNjc2lfdG1mX3RpbWVkb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTE3NjksMTAgKzE4MjQsMTAgQEAKIAogCWlzY3NpX3N1c3BlbmRfdHgoY29ubik7CiAKLQlzcGluX2xvY2soJnNlc3Npb24tPmxvY2spOworCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJZmFpbF9hbGxfY29tbWFuZHMoY29ubiwgc2MtPmRldmljZS0+bHVuLCBESURfRVJST1IpOwogCWNvbm4tPnRtZl9zdGF0ZSA9IFRNRl9JTklUSUFMOwotCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAKIAlpc2NzaV9zdGFydF90eChjb25uKTsKIAlnb3RvIGRvbmU7CkBAIC0xODc4LDYgKzE5MzMsNyBAQAogCQkJCSAgIGludCBkZF9kYXRhX3NpemUsIHVpbnQxNl90IHFkZXB0aCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3Q7CiAKIAlzaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZihzdHJ1Y3QgaXNjc2lfaG9zdCkgKyBkZF9kYXRhX3NpemUpOwogCWlmICghc2hvc3QpCkBAIC0xODkyLDIyICsxOTQ4LDQzIEBACiAJCXFkZXB0aCA9IElTQ1NJX0RFRl9DTURfUEVSX0xVTjsKIAl9CiAJc2hvc3QtPmNtZF9wZXJfbHVuID0gcWRlcHRoOworCisJaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKKwlzcGluX2xvY2tfaW5pdCgmaWhvc3QtPmxvY2spOworCWlob3N0LT5zdGF0ZSA9IElTQ1NJX0hPU1RfU0VUVVA7CisJaWhvc3QtPm51bV9zZXNzaW9ucyA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaWhvc3QtPnNlc3Npb25fcmVtb3ZhbF93cSk7CiAJcmV0dXJuIHNob3N0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfaG9zdF9hbGxvYyk7CiAKK3N0YXRpYyB2b2lkIGlzY3NpX25vdGlmeV9ob3N0X3JlbW92ZWQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbikKK3sKKwlpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoY2xzX3Nlc3Npb24sIElTQ1NJX0VSUl9JTlZBTElEX0hPU1QpOworfQorCiAvKioKICAqIGlzY3NpX2hvc3RfcmVtb3ZlIC0gcmVtb3ZlIGhvc3QgYW5kIHNlc3Npb25zCiAgKiBAc2hvc3Q6IHNjc2kgaG9zdAogICoKLSAqIFRoaXMgd2lsbCBhbHNvIHJlbW92ZSBhbnkgc2Vzc2lvbnMgYXR0YWNoZWQgdG8gdGhlIGhvc3QsIGJ1dCBpZiB1c2Vyc3BhY2UKLSAqIGlzIG1hbmFnaW5nIHRoZSBzZXNzaW9uIGF0IHRoZSBzYW1lIHRpbWUgdGhpcyB3aWxsIGJyZWFrLiBUT0RPOiBhZGQKLSAqIHJlZmNvdW50aW5nIHRvIHRoZSBuZXRsaW5rIGlzY3NpIGludGVyZmFjZSBzbyBhIHJtbW9kIG9yIGhvc3QgaG90IHVucGx1ZwotICogZG9lcyBub3QgcmVtb3ZlIHRoZSBtZW1vcnkgZnJvbSB1bmRlciB1cy4KKyAqIElmIHRoZXJlIGFyZSBhbnkgc2Vzc2lvbnMgbGVmdCwgdGhpcyB3aWxsIGluaXRpYXRlIHRoZSByZW1vdmFsIGFuZCB3YWl0CisgKiBmb3IgdGhlIGNvbXBsZXRpb24uCiAgKi8KIHZvaWQgaXNjc2lfaG9zdF9yZW1vdmUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0JaXNjc2lfaG9zdF9mb3JfZWFjaF9zZXNzaW9uKHNob3N0LCBpc2NzaV9zZXNzaW9uX3RlYXJkb3duKTsKKwlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlob3N0LT5sb2NrLCBmbGFncyk7CisJaWhvc3QtPnN0YXRlID0gSVNDU0lfSE9TVF9SRU1PVkVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlob3N0LT5sb2NrLCBmbGFncyk7CisKKwlpc2NzaV9ob3N0X2Zvcl9lYWNoX3Nlc3Npb24oc2hvc3QsIGlzY3NpX25vdGlmeV9ob3N0X3JlbW92ZWQpOworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpaG9zdC0+c2Vzc2lvbl9yZW1vdmFsX3dxLAorCQkJCSBpaG9zdC0+bnVtX3Nlc3Npb25zID09IDApOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwogCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfaG9zdF9yZW1vdmUpOwpAQCAtMTkyMyw2ICsyMDAwLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ob3N0X2ZyZWUpOwogCitzdGF0aWMgdm9pZCBpc2NzaV9ob3N0X2RlY19zZXNzaW9uX2NudChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2hvc3QgPSBzY3NpX2hvc3RfZ2V0KHNob3N0KTsKKwlpZiAoIXNob3N0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBzdGF0ZS4gQ2Fubm90IG5vdGlmeSBob3N0IHJlbW92YWwgIgorCQkgICAgICAib2Ygc2Vzc2lvbiB0ZWFyZG93biBldmVudCBiZWNhdXNlIGhvc3QgYWxyZWFkeSAiCisJCSAgICAgICJyZW1vdmVkLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpaG9zdC0+bnVtX3Nlc3Npb25zLS07CisJaWYgKGlob3N0LT5udW1fc2Vzc2lvbnMgPT0gMCkKKwkJd2FrZV91cCgmaWhvc3QtPnNlc3Npb25fcmVtb3ZhbF93cSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKKwlzY3NpX2hvc3RfcHV0KHNob3N0KTsKK30KKwogLyoqCiAgKiBpc2NzaV9zZXNzaW9uX3NldHVwIC0gY3JlYXRlIGlzY3NpIGNscyBzZXNzaW9uIGFuZCBob3N0IGFuZCBzZXNzaW9uCiAgKiBAaXNjc2l0OiBpc2NzaSB0cmFuc3BvcnQgdGVtcGxhdGUKQEAgLTE5NDMsOSArMjA0MSwxOSBAQAogCQkgICAgdWludDE2X3QgY21kc19tYXgsIGludCBjbWRfdGFza19zaXplLAogCQkgICAgdWludDMyX3QgaW5pdGlhbF9jbWRzbiwgdW5zaWduZWQgaW50IGlkKQogeworCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uOwogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CiAJaW50IGNtZF9pLCBzY3NpX2NtZHMsIHRvdGFsX2NtZHMgPSBjbWRzX21heDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlob3N0LT5sb2NrLCBmbGFncyk7CisJaWYgKGlob3N0LT5zdGF0ZSA9PSBJU0NTSV9IT1NUX1JFTU9WRUQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlob3N0LT5udW1fc2Vzc2lvbnMrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCF0b3RhbF9jbWRzKQogCQl0b3RhbF9jbWRzID0gSVNDU0lfREVGX1hNSVRfQ01EU19NQVg7CkBAIC0xOTU4LDcgKzIwNjYsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgImlzY3NpOiBpbnZhbGlkIGNhbl9xdWV1ZSBvZiAlZC4gY2FuX3F1ZXVlICIKIAkJICAgICAgICJtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHRoYXQgaXMgYXQgbGVhc3QgJWQuXG4iLAogCQkgICAgICAgdG90YWxfY21kcywgSVNDU0lfVE9UQUxfQ01EU19NSU4pOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBkZWNfc2Vzc2lvbl9jb3VudDsKIAl9CiAKIAlpZiAodG90YWxfY21kcyA+IElTQ1NJX1RPVEFMX0NNRFNfTUFYKSB7CkBAIC0xOTgyLDcgKzIwOTAsNyBAQAogCWNsc19zZXNzaW9uID0gaXNjc2lfYWxsb2Nfc2Vzc2lvbihzaG9zdCwgaXNjc2l0LAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbikpOwogCWlmICghY2xzX3Nlc3Npb24pCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGRlY19zZXNzaW9uX2NvdW50OwogCXNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKIAlzZXNzaW9uLT5jbHNfc2Vzc2lvbiA9IGNsc19zZXNzaW9uOwogCXNlc3Npb24tPmhvc3QgPSBzaG9zdDsKQEAgLTIwMjEsNiArMjEyOSw3IEBACiAKIAlpZiAoaXNjc2lfYWRkX3Nlc3Npb24oY2xzX3Nlc3Npb24sIGlkKSkKIAkJZ290byBjbHNfc2Vzc2lvbl9mYWlsOworCiAJcmV0dXJuIGNsc19zZXNzaW9uOwogCiBjbHNfc2Vzc2lvbl9mYWlsOgpAQCAtMjAyOSw2ICsyMTM4LDggQEAKIAlpc2NzaV9wb29sX2ZyZWUoJnNlc3Npb24tPmNtZHBvb2wpOwogY21kcG9vbF9hbGxvY19mYWlsOgogCWlzY3NpX2ZyZWVfc2Vzc2lvbihjbHNfc2Vzc2lvbik7CitkZWNfc2Vzc2lvbl9jb3VudDoKKwlpc2NzaV9ob3N0X2RlY19zZXNzaW9uX2NudChzaG9zdCk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9zZXNzaW9uX3NldHVwKTsKQEAgLTIwNDQsNiArMjE1NSw3IEBACiB7CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lciA9IGNsc19zZXNzaW9uLT50cmFuc3BvcnQtPm93bmVyOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Vzc2lvbi0+aG9zdDsKIAogCWlzY3NpX3Bvb2xfZnJlZSgmc2Vzc2lvbi0+Y21kcG9vbCk7CiAKQEAgLTIwNTYsNiArMjE2OCw3IEBACiAJa2ZyZWUoc2Vzc2lvbi0+aWZhY2VuYW1lKTsKIAogCWlzY3NpX2Rlc3Ryb3lfc2Vzc2lvbihjbHNfc2Vzc2lvbik7CisJaXNjc2lfaG9zdF9kZWNfc2Vzc2lvbl9jbnQoc2hvc3QpOwogCW1vZHVsZV9wdXQob3duZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc2Vzc2lvbl90ZWFyZG93bik7CkBAIC0yMzM1LDggKzI0NDgsMTAgQEAKIAkgKiBmbHVzaCBxdWV1ZXMuCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKLQlmYWlsX2FsbF9jb21tYW5kcyhjb25uLCAtMSwKLQkJCVNUT1BfQ09OTl9SRUNPVkVSID8gRElEX0JVU19CVVNZIDogRElEX0VSUk9SKTsKKwlpZiAoZmxhZyA9PSBTVE9QX0NPTk5fUkVDT1ZFUikKKwkJZmFpbF9hbGxfY29tbWFuZHMoY29ubiwgLTEsIERJRF9UUkFOU1BPUlRfRElTUlVQVEVEKTsKKwllbHNlCisJCWZhaWxfYWxsX2NvbW1hbmRzKGNvbm4sIC0xLCBESURfRVJST1IpOwogCWZsdXNoX2NvbnRyb2xfcXVldWVzKHNlc3Npb24sIGNvbm4pOwogCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAltdXRleF91bmxvY2soJnNlc3Npb24tPmVoX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAppbmRleCBlMGUwMThkLi42MGE5ZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCkBAIC0zNCw3ICszNCwxNCBAQAogI2RlZmluZSBMUEZDX0lPQ0JfTElTVF9DTlQJMjI1MAkvKiBsaXN0IG9mIElPQ0JzIGZvciBmYXN0LXBhdGggdXNhZ2UuICovCiAjZGVmaW5lIExQRkNfUV9SQU1QX1VQX0lOVEVSVkFMIDEyMCAgICAgLyogbHVuIHFfZGVwdGggcmFtcCB1cCBpbnRlcnZhbCAqLwogI2RlZmluZSBMUEZDX1ZOQU1FX0xFTgkJMTAwCS8qIHZwb3J0IHN5bWJvbGljIG5hbWUgbGVuZ3RoICovCisjZGVmaW5lIExQRkNfVEdUUV9JTlRFUlZBTAk0MDAwMAkvKiBNaW4gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0Z3QKKwkJCQkJICAgcXVldWUgZGVwdGggY2hhbmdlIGluIG1pbGxpc2VjcyAqLworI2RlZmluZSBMUEZDX1RHVFFfUkFNUFVQX1BDRU5UCTUJLyogVGFyZ2V0IHF1ZXVlIHJhbXB1cCBpbiBwZXJjZW50YWdlICovCisjZGVmaW5lIExQRkNfTUlOX1RHVF9RREVQVEgJMTAwCisjZGVmaW5lIExQRkNfTUFYX1RHVF9RREVQVEgJMHhGRkZGCiAKKyNkZWZpbmUgIExQRkNfTUFYX0JVQ0tFVF9DT1VOVCAyMAkvKiBNYXhpbXVtIG5vLiBvZiBidWNrZXRzIGZvciBzdGF0IGRhdGEKKwkJCQkJICAgY29sbGVjdGlvbi4gKi8KIC8qCiAgKiBGb2xsb3dpbmcgdGltZSBpbnRlcnZhbHMgYXJlIHVzZWQgb2YgYWRqdXN0aW5nIFNDU0kgZGV2aWNlCiAgKiBxdWV1ZSBkZXB0aHMgd2hlbiB0aGVyZSBhcmUgZHJpdmVyIHJlc291cmNlIGVycm9yIG9yIEZpcm13YXJlCkBAIC00OSw2ICs1Niw5IEBACiAjZGVmaW5lIExQRkNfSEJfTUJPWF9JTlRFUlZBTCAgIDUJLyogSGVhcnQgYmVhdCBpbnRlcnZhbCBpbiBzZWNvbmRzLiAqLwogI2RlZmluZSBMUEZDX0hCX01CT1hfVElNRU9VVCAgICAzMAkvKiBIZWFydCBiZWF0IHRpbWVvdXQgIGluIHNlY29uZHMuICovCiAKKy8qIEVycm9yIEF0dGVudGlvbiBldmVudCBwb2xsaW5nIGludGVydmFsICovCisjZGVmaW5lIExQRkNfRVJBVFRfUE9MTF9JTlRFUlZBTAk1IC8qIEVBVFQgcG9sbCBpbnRlcnZhbCBpbiBzZWNvbmRzICovCisKIC8qIERlZmluZSBtYWNyb3MgZm9yIDY0IGJpdCBzdXBwb3J0ICovCiAjZGVmaW5lIHB1dFBhZGRyTG93KGFkZHIpICAgICgodWludDMyX3QpICgweGZmZmZmZmZmICYgKHU2NCkoYWRkcikpKQogI2RlZmluZSBwdXRQYWRkckhpZ2goYWRkcikgICAoKHVpbnQzMl90KSAoMHhmZmZmZmZmZiAmICgoKHU2NCkoYWRkcikpPj4zMikpKQpAQCAtNjAsNiArNzAsOSBAQAogCiAjZGVmaW5lIE1BWF9IQkFFVlQJMzIKIAorLyogTnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgdGhlIGRyaXZlciB1c2VzICovCisjZGVmaW5lIExQRkNfTVNJWF9WRUNUT1JTCTIKKwogLyogbHBmYyB3YWl0IGV2ZW50IGRhdGEgcmVhZHkgZmxhZyAqLwogI2RlZmluZSBMUEZDX0RBVEFfUkVBRFkJCSgxPDwwKQogCkBAIC0zNTcsNiArMzcwLDcgQEAKIAl1aW50MzJfdCBjZmdfbG9nX3ZlcmJvc2U7CiAJdWludDMyX3QgY2ZnX21heF9sdW5zOwogCXVpbnQzMl90IGNmZ19lbmFibGVfZGFfaWQ7CisJdWludDMyX3QgY2ZnX21heF9zY3NpY21wbF90aW1lOwogCiAJdWludDMyX3QgZGV2X2xvc3NfdG1vX2NoYW5nZWQ7CiAKQEAgLTM2OSw2ICszODMsOCBAQAogCXN0cnVjdCBscGZjX2RlYnVnZnNfdHJjICpkaXNjX3RyYzsKIAlhdG9taWNfdCBkaXNjX3RyY19jbnQ7CiAjZW5kaWYKKwl1aW50OF90IHN0YXRfZGF0YV9lbmFibGVkOworCXVpbnQ4X3Qgc3RhdF9kYXRhX2Jsb2NrZWQ7CiB9OwogCiBzdHJ1Y3QgaGJxX3MgewpAQCAtNDA3LDEwICs0MjMsMTEgQEAKIAlzdHJ1Y3QgbHBmY19zbGkgc2xpOwogCXVpbnQzMl90IHNsaV9yZXY7CQkvKiBTTEkyIG9yIFNMSTMgKi8KIAl1aW50MzJfdCBzbGkzX29wdGlvbnM7CQkvKiBNYXNrIG9mIGVuYWJsZWQgU0xJMyBvcHRpb25zICovCi0jZGVmaW5lIExQRkNfU0xJM19FTkFCTEVECSAweDAxCi0jZGVmaW5lIExQRkNfU0xJM19IQlFfRU5BQkxFRAkgMHgwMgotI2RlZmluZSBMUEZDX1NMSTNfTlBJVl9FTkFCTEVECSAweDA0Ci0jZGVmaW5lIExQRkNfU0xJM19WUE9SVF9URUFSRE9XTiAweDA4CisjZGVmaW5lIExQRkNfU0xJM19IQlFfRU5BQkxFRAkJMHgwMQorI2RlZmluZSBMUEZDX1NMSTNfTlBJVl9FTkFCTEVECQkweDAyCisjZGVmaW5lIExQRkNfU0xJM19WUE9SVF9URUFSRE9XTgkweDA0CisjZGVmaW5lIExQRkNfU0xJM19DUlBfRU5BQkxFRAkJMHgwOAorI2RlZmluZSBMUEZDX1NMSTNfSU5CX0VOQUJMRUQJCTB4MTAKIAl1aW50MzJfdCBpb2NiX2NtZF9zaXplOwogCXVpbnQzMl90IGlvY2JfcnNwX3NpemU7CiAKQEAgLTQyMiwxMCArNDM5LDIwIEBACiAjZGVmaW5lIExTX05QSVZfRkFCX1NVUFBPUlRFRCAweDIJLyogRmFicmljIHN1cHBvcnRzIE5QSVYgKi8KICNkZWZpbmUgTFNfSUdOT1JFX0VSQVRUICAgICAgIDB4NAkvKiBpbnRyIGhhbmRsZXIgc2hvdWxkIGlnbm9yZSBFUkFUVCAqLwogCi0Jc3RydWN0IGxwZmNfc2xpMl9zbGltICpzbGltMnA7Ci0Jc3RydWN0IGxwZmNfZG1hYnVmIGhicXNsaW1wOworCXVpbnQzMl90IGhiYV9mbGFnOwkvKiBoYmEgZ2VuZXJpYyBmbGFncyAqLworI2RlZmluZSBIQkFfRVJBVFRfSEFORExFRAkweDEgLyogVGhpcyBmbGFnIGlzIHNldCB3aGVuIGVyYXR0IGhhbmRsZWQgKi8KIAotCWRtYV9hZGRyX3Qgc2xpbTJwX21hcHBpbmc7CisJc3RydWN0IGxwZmNfZG1hYnVmIHNsaW0ycDsKKworCU1BSUxCT1hfdCAqbWJveDsKKwl1aW50MzJfdCAqaW5iX2hhX2NvcHk7CisJdWludDMyX3QgKmluYl9jb3VudGVyOworCXVpbnQzMl90IGluYl9sYXN0X2NvdW50ZXI7CisJdWludDMyX3QgaGFfY29weTsKKwlzdHJ1Y3QgX1BDQiAqcGNiOworCXN0cnVjdCBfSU9DQiAqSU9DQnM7CisKKwlzdHJ1Y3QgbHBmY19kbWFidWYgaGJxc2xpbXA7CiAKIAl1aW50MTZfdCBwY2lfY2ZnX3ZhbHVlOwogCkBAIC00OTIsNyArNTE5LDcgQEAKIAogCXdhaXRfcXVldWVfaGVhZF90ICAgIHdvcmtfd2FpdHE7CiAJc3RydWN0IHRhc2tfc3RydWN0ICAgKndvcmtlcl90aHJlYWQ7Ci0JbG9uZyBkYXRhX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgZGF0YV9mbGFnczsKIAogCXVpbnQzMl90IGhicV9pbl91c2U7CQkvKiBIQlFzIGluIHVzZSBmbGFnICovCiAJc3RydWN0IGxpc3RfaGVhZCBoYnFidWZfaW5fbGlzdDsgIC8qIGluLWZseSBoYnEgYnVmZmVyIGxpc3QgKi8KQEAgLTUxNCw2ICs1NDEsNyBAQAogCXZvaWQgX19pb21lbSAqSENyZWdhZGRyOwkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIGhvc3QgY3RsIHJlZyAqLwogCiAJc3RydWN0IGxwZmNfaGdwIF9faW9tZW0gKmhvc3RfZ3A7IC8qIEhvc3Qgc2lkZSBnZXQvcHV0IHBvaW50ZXJzICovCisJc3RydWN0IGxwZmNfcGdwICAgKnBvcnRfZ3A7CiAJdWludDMyX3QgX19pb21lbSAgKmhicV9wdXQ7ICAgICAvKiBBZGRyZXNzIGluIFNMSU0gdG8gSEJRIHB1dCBwdHJzICovCiAJdWludDMyX3QgICAgICAgICAgKmhicV9nZXQ7ICAgICAvKiBIb3N0IG1lbSBhZGRyZXNzIG9mIEhCUSBnZXQgcHRycyAqLwogCkBAIC01MzYsNiArNTY0LDcgQEAKIAl1aW50OF90IHNvZnRfd3duX2VuYWJsZTsKIAogCXN0cnVjdCB0aW1lcl9saXN0IGZjcF9wb2xsX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IGVyYXR0X3BvbGw7CiAKIAkvKgogCSAqIHN0YXQgIGNvdW50ZXJzCkBAIC01NjUsNyArNTk0LDcgQEAKIAogCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgbGlua19zdGF0czsKIAllbnVtIGludHJfdHlwZV90IGludHJfdHlwZTsKLQlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbMV07CisJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW0xQRkNfTVNJWF9WRUNUT1JTXTsKIAogCXN0cnVjdCBsaXN0X2hlYWQgcG9ydF9saXN0OwogCXN0cnVjdCBscGZjX3Zwb3J0ICpwcG9ydDsJLyogcGh5c2ljYWwgbHBmY192cG9ydCBwb2ludGVyICovCkBAIC02MDUsNiArNjM0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfY29tcGxldGlvbl90aW1lOwogCXN0cnVjdCB0aW1lcl9saXN0IGhiX3Rtb2Z1bmM7CiAJdWludDhfdCBoYl9vdXRzdGFuZGluZzsKKwllbnVtIGhiYV90ZW1wX3N0YXRlIG92ZXJfdGVtcF9zdGF0ZTsKIAkvKiBuZGxwIHJlZmVyZW5jZSBtYW5hZ2VtZW50ICovCiAJc3BpbmxvY2tfdCBuZGxwX2xvY2s7CiAJLyoKQEAgLTYxMyw3ICs2NDMsMTkgQEAKIAkgKi8KICNkZWZpbmUgUVVFX0JVRlRBR19CSVQgICgxPDwzMSkKIAl1aW50MzJfdCBidWZmZXJfdGFnX2NvdW50OwotCWVudW0gaGJhX3RlbXBfc3RhdGUgb3Zlcl90ZW1wX3N0YXRlOworCWludCB3YWl0XzRfbWxvX21haW50X2ZsZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0XzRfbWxvX21fcTsKKwkvKiBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciBsYXRlbmN5IGRhdGEgY29sbGVjdGlvbiAqLworI2RlZmluZSBMUEZDX05PX0JVQ0tFVAkgICAwCisjZGVmaW5lIExQRkNfTElORUFSX0JVQ0tFVCAxCisjZGVmaW5lIExQRkNfUE9XRVIyX0JVQ0tFVCAyCisJdWludDhfdCAgYnVja2V0X3R5cGU7CisJdWludDMyX3QgYnVja2V0X2Jhc2U7CisJdWludDMyX3QgYnVja2V0X3N0ZXA7CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGNhbiBiZSBvdXRzdGFuZGluZyBhdCBhbnkgdGltZSovCisjZGVmaW5lIExQRkNfTUFYX0VWVF9DT1VOVCA1MTIKKwlhdG9taWNfdCBmYXN0X2V2ZW50X2NvdW50OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgU2NzaV9Ib3N0ICoKQEAgLTY1MCwxNSArNjkyLDI1IEBACiAJcmV0dXJuOwogfQogCi0jZGVmaW5lIEZDX1JFR19EVU1QX0VWRU5UCQkweDEwCS8qIFJlZ2lzdGVyIGZvciBEdW1wIGV2ZW50cyAqLwotI2RlZmluZSBGQ19SRUdfVEVNUEVSQVRVUkVfRVZFTlQJMHgyMCAgICAvKiBSZWdpc3RlciBmb3IgdGVtcGVyYXR1cmUKLQkJCQkJCSAgIGV2ZW50ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2xwZmNfc2xpX3JlYWRfaHMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCS8qCisJICogVGhlcmUgd2FzIGEgbGluay9ib2FyZCBlcnJvci4gUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIHJldHJpZXZlCisJICogdGhlIGVycm9yIGV2ZW50IGFuZCBwcm9jZXNzIGl0LgorCSAqLworCXBoYmEtPnNsaS5zbGlzdGF0LmVycl9hdHRuX2V2ZW50Kys7CiAKLXN0cnVjdCB0ZW1wX2V2ZW50IHsKLQl1aW50MzJfdCBldmVudF90eXBlOwotCXVpbnQzMl90IGV2ZW50X2NvZGU7Ci0JdWludDMyX3QgZGF0YTsKLX07Ci0jZGVmaW5lIExQRkNfQ1JJVF9URU1QCQkweDEKLSNkZWZpbmUgTFBGQ19USFJFU0hPTERfVEVNUAkweDIKLSNkZWZpbmUgTFBGQ19OT1JNQUxfVEVNUAkweDMKKwkvKiBTYXZlIHN0YXR1cyBpbmZvICovCisJcGhiYS0+d29ya19ocyA9IHJlYWRsKHBoYmEtPkhTcmVnYWRkcik7CisJcGhiYS0+d29ya19zdGF0dXNbMF0gPSByZWFkbChwaGJhLT5NQnNsaW1hZGRyICsgMHhhOCk7CisJcGhiYS0+d29ya19zdGF0dXNbMV0gPSByZWFkbChwaGJhLT5NQnNsaW1hZGRyICsgMHhhYyk7CisKKwkvKiBDbGVhciBjaGlwIEhvc3QgQXR0ZW50aW9uIGVycm9yIGJpdCAqLworCXdyaXRlbChIQV9FUkFUVCwgcGhiYS0+SEFyZWdhZGRyKTsKKwlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCXBoYmEtPnBwb3J0LT5zdG9wcGVkID0gMTsKKworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCAzN2JmYTBiLi5hYTNkNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTQ5LDYgKzUwLDIxIEBACiAjZGVmaW5lIExQRkNfTElOS19TUEVFRF9CSVRNQVAgMHgwMDAwMDExNwogI2RlZmluZSBMUEZDX0xJTktfU1BFRURfU1RSSU5HICIwLCAxLCAyLCA0LCA4IgogCisvKioKKyAqIGxwZmNfamVkZWNfdG9fYXNjaWk6IEhleCB0byBhc2NpaSBjb252ZXJ0b3IgYWNjb3JkaW5nIHRvIEpFREVDIHJ1bGVzLgorICogQGluY3I6IGludGVnZXIgdG8gY29udmVydC4KKyAqIEBoZHc6IGFzY2lpIHN0cmluZyBob2xkaW5nIGNvbnZlcnRlZCBpbnRlZ2VyIHBsdXMgYSBzdHJpbmcgdGVybWluYXRvci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEpFREVDIEpvaW50IEVsZWN0cm9uIERldmljZSBFbmdpbmVlcmluZyBDb3VuY2lsLgorICogQ29udmVydCBhIDMyIGJpdCBpbnRlZ2VyIGNvbXBvc2VkIG9mIDggbmliYmxlcyBpbnRvIGFuIDggYnl0ZSBhc2NpaQorICogY2hhcmFjdGVyIHN0cmluZy4gVGhlIHN0cmluZyBpcyB0aGVuIHRlcm1pbmF0ZWQgd2l0aCBhIE5VTEwgaW4gYnl0ZSA5LgorICogSGV4IDAtOSBiZWNvbWVzIGFzY2lpICcwJyB0byAnOScuCisgKiBIZXggYS1mIGJlY29tZXMgYXNjaWkgJz0nIHRvICdCJyBjYXBpdGFsIEIuCisgKgorICogTm90ZXM6CisgKiBDb2RlZCBmb3IgMzIgYml0IGludGVnZXJzIG9ubHkuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19qZWRlY190b19hc2NpaShpbnQgaW5jciwgY2hhciBoZHdbXSkKIHsKQEAgLTY1LDYgKzgxLDE0IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZHJ2cl92ZXJzaW9uX3Nob3c6IFJldHVybiB0aGUgRW11bGV4IGRyaXZlciBzdHJpbmcgd2l0aCB2ZXJzaW9uIG51bWJlci4KKyAqIEBkZXY6IGNsYXNzIHVudXNlZCB2YXJpYWJsZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgbW9kdWxlIGRlc2NyaXB0aW9uIHRleHQuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfZHJ2cl92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgIGNoYXIgKmJ1ZikKQEAgLTcyLDYgKzk2LDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCBMUEZDX01PRFVMRV9ERVNDICJcbiIpOwogfQogCisvKioKKyAqIGxwZmNfaW5mb19zaG93OiBSZXR1cm4gc29tZSBwY2kgaW5mbyBhYm91dCB0aGUgaG9zdCBpbiBhc2NpaS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGZvcm1hdHRlZCB0ZXh0IGZyb20gbHBmY19pbmZvKCkuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfaW5mb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJICAgICAgIGNoYXIgKmJ1ZikKQEAgLTgxLDYgKzExMywxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLGxwZmNfaW5mbyhob3N0KSk7CiB9CiAKKy8qKgorICogbHBmY19zZXJpYWxudW1fc2hvdzogUmV0dXJuIHRoZSBoYmEgc2VyaWFsIG51bWJlciBpbiBhc2NpaS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGZvcm1hdHRlZCB0ZXh0IHNlcmlhbCBudW1iZXIuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfc2VyaWFsbnVtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZikKQEAgLTkyLDYgKzEzMiwxOCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPlNlcmlhbE51bWJlcik7CiB9CiAKKy8qKgorICogbHBmY190ZW1wX3NlbnNvcl9zaG93OiBSZXR1cm4gdGhlIHRlbXBlcmF0dXJlIHNlbnNvciBsZXZlbC4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGZvcm1hdHRlZCBzdXBwb3J0IGxldmVsLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3IgbGV2ZWwgY3VycmVudGx5CisgKiBzdXBwb3J0ZWQsIHplcm8gb3Igb25lIGluIGFzY2lpLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3RlbXBfc2Vuc29yX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQpAQCAtMTAyLDYgKzE1NCwxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLHBoYmEtPnRlbXBfc2Vuc29yX3N1cHBvcnQpOwogfQogCisvKioKKyAqIGxwZmNfbW9kZWxkZXNjX3Nob3c6IFJldHVybiB0aGUgbW9kZWwgZGVzY3JpcHRpb24gb2YgdGhlIGhiYS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHNjc2kgdnBkIG1vZGVsIGRlc2NyaXB0aW9uLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX21vZGVsZGVzY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICBjaGFyICpidWYpCkBAIC0xMTMsNiArMTczLDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIscGhiYS0+TW9kZWxEZXNjKTsKIH0KIAorLyoqCisgKiBscGZjX21vZGVsbmFtZV9zaG93OiBSZXR1cm4gdGhlIG1vZGVsIG5hbWUgb2YgdGhlIGhiYS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHNjc2kgdnBkIG1vZGVsIG5hbWUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbW9kZWxuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZikKQEAgLTEyNCw2ICsxOTIsMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixwaGJhLT5Nb2RlbE5hbWUpOwogfQogCisvKioKKyAqIGxwZmNfcHJvZ3JhbXR5cGVfc2hvdzogUmV0dXJuIHRoZSBwcm9ncmFtIHR5cGUgb2YgdGhlIGhiYS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHNjc2kgdnBkIHByb2dyYW0gdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19wcm9ncmFtdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKQEAgLTEzNSw2ICsyMTEsMzMgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixwaGJhLT5Qcm9ncmFtVHlwZSk7CiB9CiAKKy8qKgorICogbHBmY19tbG9tZ210X3Nob3c6IFJldHVybiB0aGUgTWVubG8gTWFpbnRlbmFuY2Ugc2xpIGZsYWcuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBNZW5sbyBNYWludGVuYW5jZSBzbGkgZmxhZy4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19tbG9tZ210X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfTUVOTE9fTUFJTlQpKTsKK30KKworLyoqCisgKiBscGZjX3Zwb3J0bnVtX3Nob3c6IFJldHVybiB0aGUgcG9ydCBudW1iZXIgaW4gYXNjaWkgb2YgdGhlIGhiYS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgc2NzaSB2cGQgcHJvZ3JhbSB0eXBlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3Zwb3J0bnVtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgY2hhciAqYnVmKQpAQCAtMTQ2LDYgKzI0OSwxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPlBvcnQpOwogfQogCisvKioKKyAqIGxwZmNfZndyZXZfc2hvdzogUmV0dXJuIHRoZSBmaXJtd2FyZSByZXYgcnVubmluZyBpbiB0aGUgaGJhLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgc2NzaSB2cGQgcHJvZ3JhbSB0eXBlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2Z3cmV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmKQpAQCAtMTU5LDYgKzI3MCwxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzLCBzbGktJWRcbiIsIGZ3cmV2LCBwaGJhLT5zbGlfcmV2KTsKIH0KIAorLyoqCisgKiBscGZjX2hkd19zaG93OiBSZXR1cm4gdGhlIGplZGVjIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYmEuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBzY3NpIHZwZCBwcm9ncmFtIHR5cGUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfaGR3X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTcxLDYgKzI5MCwxNSBAQAogCWxwZmNfamVkZWNfdG9fYXNjaWkodnAtPnJldi5iaXVSZXYsIGhkdyk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGhkdyk7CiB9CisKKy8qKgorICogbHBmY19vcHRpb25fcm9tX3ZlcnNpb25fc2hvdzogUmV0dXJuIHRoZSBhZGFwdGVyIFJPTSBGQ29kZSB2ZXJzaW9uLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgUk9NIGFuZCBGQ29kZSBhc2NpaSBzdHJpbmdzLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX29wdGlvbl9yb21fdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgIGNoYXIgKmJ1ZikKQEAgLTE4MSw2ICszMDksMTggQEAKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBwaGJhLT5PcHRpb25ST01WZXJzaW9uKTsKIH0KKworLyoqCisgKiBscGZjX3N0YXRlX3Nob3c6IFJldHVybiB0aGUgbGluayBzdGF0ZSBvZiB0aGUgcG9ydC4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGV4dCBkZXNjcmliaW5nIHRoZSBzdGF0ZSBvZiB0aGUgbGluay4KKyAqCisgKiBOb3RlczoKKyAqIFRoZSBzd2l0Y2ggc3RhdGVtZW50IGhhcyBubyBkZWZhdWx0IHNvIHplcm8gd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19saW5rX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICBjaGFyICpidWYpCkBAIC0yMzIsOCArMzcyLDEwIEBACiAJCQkJCSJVbmtub3duXG4iKTsKIAkJCWJyZWFrOwogCQl9Ci0KLQkJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApIHsKKwkJaWYgKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfTUVOTE9fTUFJTlQpCisJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUtbGVuLAorCQkJCQkiICAgTWVubG8gTWFpbnQgTW9kZVxuIik7CisJCWVsc2UgaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApIHsKIAkJCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1BVQkxJQ19MT09QKQogCQkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sCiAJCQkJCQkiICAgUHVibGljIExvb3BcbiIpOwpAQCAtMjUzLDYgKzM5NSwxOCBAQAogCXJldHVybiBsZW47CiB9CiAKKy8qKgorICogbHBmY19udW1fZGlzY292ZXJlZF9wb3J0c19zaG93OiBSZXR1cm4gc3VtIG9mIG1hcHBlZCBhbmQgdW5tYXBwZWQgdnBvcnRzLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHN1bSBvZiBmYyBtYXBwZWQgYW5kIHVubWFwcGVkLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmV0dXJucyB0aGUgYXNjaWkgdGV4dCBudW1iZXIgb2YgdGhlIHN1bSBvZiB0aGUgZmMgbWFwcGVkIGFuZCB1bm1hcHBlZAorICogdnBvcnQgY291bnRzLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0yNjQsNyArNDE4LDIwIEBACiAJCQl2cG9ydC0+ZmNfbWFwX2NudCArIHZwb3J0LT5mY191bm1hcF9jbnQpOwogfQogCi0KKy8qKgorICogbHBmY19pc3N1ZV9saXA6IE1pc25vbWVyLCBuYW1lIGNhcnJpZWQgb3ZlciBmcm9tIGxvbmcgYWdvLgorICogQHNob3N0OiBTY3NpX0hvc3QgcG9pbnRlci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEJyaW5nIHRoZSBsaW5rIGRvd24gZ3JhY2VmdWxseSB0aGVuIHJlLWluaXQgdGhlIGxpbmsuIFRoZSBmaXJtd2FyZSB3aWxsCisgKiByZS1pbml0IHRoZSBmaWJlciBjaGFubmVsIGludGVyZmFjZSBhcyByZXF1aXJlZC4gRG9lcyBub3QgaXNzdWUgYSBMSVAuCisgKgorICogUmV0dXJuczoKKyAqIC1FUEVSTSBwb3J0IG9mZmxpbmUgb3IgbWFuYWdlbWVudCBjb21tYW5kcyBhcmUgYmVpbmcgYmxvY2tlZAorICogLUVOT01FTSBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbWFpbGJveCBjb21tYW5kCisgKiAtRUlPIGVycm9yIHNlbmRpbmcgdGhlIG1haWxib3ggY29tbWFuZAorICogemVybyBmb3Igc3VjY2VzcworICoqLwogc3RhdGljIGludAogbHBmY19pc3N1ZV9saXAoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0zMDYsNiArNDczLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19kb19vZmZsaW5lOiBJc3N1ZXMgYSBtYWlsYm94IGNvbW1hbmQgdG8gYnJpbmcgdGhlIGxpbmsgZG93bi4KKyAqIEBwaGJhOiBscGZjX2hiYSBwb2ludGVyLgorICogQHR5cGU6IExQRkNfRVZUX09GRkxJTkUsIExQRkNfRVZUX1dBUk1fU1RBUlQsIExQRkNfRVZUX0tJTEwuCisgKgorICogTm90ZXM6CisgKiBBc3N1bWVzIGFueSBlcnJvciBmcm9tIGxwZmNfZG9fb2ZmbGluZSgpIHdpbGwgYmUgbmVnYXRpdmUuCisgKiBDYW4gd2FpdCB1cCB0byA1IHNlY29uZHMgZm9yIHRoZSBwb3J0IHJpbmcgYnVmZmVycyBjb3VudAorICogdG8gcmVhY2ggemVybywgcHJpbnRzIGEgd2FybmluZyBpZiBpdCBpcyBub3QgemVybyBhbmQgY29udGludWVzLgorICogbHBmY193b3JrcV9wb3N0X2V2ZW50KCkgcmV0dXJucyBhIG5vbi16ZXJvIHJldHVybiBjb2NlIGlmIGNhbGwgZmFpbHMuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU8gZXJyb3IgcG9zdGluZyB0aGUgZXZlbnQKKyAqIHplcm8gZm9yIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZG9fb2ZmbGluZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHR5cGUpCiB7CkBAIC0zNTMsNiArNTM1LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zZWxlY3RpdmVfcmVzZXQ6IE9mZmxpbmUgdGhlbiBvbmxpbmVzIHRoZSBwb3J0LgorICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIHRvIGFsbG93IGEgcmVzZXQgdGhlbiB0aGUgaGJhIGlzIGJyb3VnaHQKKyAqIG9mZmxpbmUgdGhlbiBvbmxpbmUuCisgKgorICogTm90ZXM6CisgKiBBc3N1bWVzIGFueSBlcnJvciBmcm9tIGxwZmNfZG9fb2ZmbGluZSgpIHdpbGwgYmUgbmVnYXRpdmUuCisgKgorICogUmV0dXJuczoKKyAqIGxwZmNfZG9fb2ZmbGluZSgpIHJldHVybiBjb2RlIGlmIG5vdCB6ZXJvCisgKiAtRUlPIHJlc2V0IG5vdCBjb25maWd1cmVkIG9yIGVycm9yIHBvc3RpbmcgdGhlIGV2ZW50CisgKiB6ZXJvIGZvciBzdWNjZXNzCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NlbGVjdGl2ZV9yZXNldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zNzgsNiArNTc2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9yZXNldDogU2VsZWN0aXZlbHkgcmVzZXRzIGFuIGFkYXB0ZXIuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IGNvbnRhaW5pbmcgdGhlIHN0cmluZyAic2VsZWN0aXZlIi4KKyAqIEBjb3VudDogdW51c2VkIHZhcmlhYmxlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdGhlIGJ1ZiBjb250YWlucyB0aGUgc3RyaW5nICJzZWxlY3RpdmUiIHRoZW4gbHBmY19zZWxlY3RpdmVfcmVzZXQoKQorICogaXMgY2FsbGVkIHRvIHBlcmZvcm0gdGhlIHJlc2V0LgorICoKKyAqIE5vdGVzOgorICogQXNzdW1lcyBhbnkgZXJyb3IgZnJvbSBscGZjX3NlbGVjdGl2ZV9yZXNldCgpIHdpbGwgYmUgbmVnYXRpdmUuCisgKiBJZiBscGZjX3NlbGVjdGl2ZV9yZXNldCgpIHJldHVybnMgemVybyB0aGVuIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogaXMgcmV0dXJuZWQgd2hpY2ggaW5kaWNhdGVzIHN1Y2NjZXNzCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgaWYgdGhlIGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIHRoZSBzdHJpbmcgInNlbGVjdGl2ZSIKKyAqIGxlbmd0aCBvZiBidWYgaWYgbHBmYy1zZWxlY3RpdmVfcmVzZXQoKSBpZiB0aGUgY2FsbCBzdWNjZWVkcworICogcmV0dXJuIHZhbHVlIG9mIGxwZmNfc2VsZWN0aXZlX3Jlc2V0KCkgaWYgdGhlIGNhbGwgZmFpbHMKKyoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfaXNzdWVfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMzk3LDYgKzYxNiwxNCBAQAogCQlyZXR1cm4gc3RhdHVzOwogfQogCisvKioKKyAqIGxwZmNfbnBvcnRfZXZ0X2NudF9zaG93OiBSZXR1cm4gdGhlIG51bWJlciBvZiBucG9ydCBldmVudHMuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgYXNjaWkgbnVtYmVyIG9mIG5wb3J0IGV2ZW50cy4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19ucG9ydF9ldnRfY250X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCWNoYXIgKmJ1ZikKQEAgLTQwOCw2ICs2MzUsMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcGhiYS0+bnBvcnRfZXZlbnRfY250KTsKIH0KIAorLyoqCisgKiBscGZjX2JvYXJkX21vZGVfc2hvdzogUmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgYm9hcmQuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgc3RhdGUgb2YgdGhlIGFkYXB0ZXIuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfYm9hcmRfbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgY2hhciAqYnVmKQpAQCAtNDI5LDYgKzY2NCwxOSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzdGF0ZSk7CiB9CiAKKy8qKgorICogbHBmY19ib2FyZF9tb2RlX3N0b3JlOiBQdXRzIHRoZSBoYmEgaW4gb25saW5lLCBvZmZsaW5lLCB3YXJtIG9yIGVycm9yIHN0YXRlLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBjb250YWluaW5nIG9uZSBvZiB0aGUgc3RyaW5ncyAib25saW5lIiwgIm9mZmxpbmUiLCAid2FybSIgb3IgImVycm9yIi4KKyAqIEBjb3VudDogdW51c2VkIHZhcmlhYmxlLgorICoKKyAqIFJldHVybnM6CisgKiAtRUFDQ0VTIGlmIGVuYWJsZSBoYmEgcmVzZXQgbm90IGVuYWJsZWQKKyAqIC1FSU5WQUwgaWYgdGhlIGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgc3RyaW5nIChzZWUgYWJvdmUpCisgKiAtRUlPIGlmIGxwZmNfd29ya3FfcG9zdF9ldmVudCgpIG9yIGxwZmNfZG9fb2ZmbGluZSgpIGZhaWxzCisgKiBidWYgbGVuZ3RoIGdyZWF0ZXIgdGhhbiB6ZXJvIGluZGljYXRlcyBzdWNjZXNzCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19ib2FyZF9tb2RlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNDYyLDYgKzcxMCwyNCBAQAogCQlyZXR1cm4gLUVJTzsKIH0KIAorLyoqCisgKiBscGZjX2dldF9oYmFfaW5mbzogUmV0dXJuIHZhcmlvdXMgYml0cyBvZiBpbmZvcm1hdG9uIGFib3V0IHRoZSBhZGFwdGVyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICogQG14cmkgbWF4IHhyaSBjb3VudC4KKyAqIEBheHJpIGF2YWlsYWJsZSB4cmkgY291bnQuCisgKiBAbXJwaSBtYXggcnBpIGNvdW50LgorICogQGFycGkgYXZhaWxhYmxlIHJwaSBjb3VudC4KKyAqIEBtdnBpIG1heCB2cGkgY291bnQuCisgKiBAYXZwaSBhdmFpbGFibGUgdnBpIGNvdW50LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgYW4gaW50ZWdlciBwb2ludGVyIGZvciBhbiBjb3VudCBpcyBub3QgbnVsbCB0aGVuIHRoZSB2YWx1ZSBmb3IgdGhlCisgKiBjb3VudCBpcyByZXR1cm5lZC4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBvbiBlcnJvcgorICogb25lIGZvciBzdWNjZXNzCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2dldF9oYmFfaW5mbyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCiAJCSAgdWludDMyX3QgKm14cmksIHVpbnQzMl90ICpheHJpLApAQCAtNTI0LDYgKzc5MCwyMCBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfbWF4X3JwaV9zaG93OiBSZXR1cm4gbWF4aW11bSBycGkuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgbWF4aW11bSBycGkgY291bnQgaW4gZGVjaW1hbCBvciAiVW5rbm93biIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDYWxscyBscGZjX2dldF9oYmFfaW5mbygpIGFza2luZyBmb3IganVzdCB0aGUgbXJwaSBjb3VudC4KKyAqIElmIGxwZmNfZ2V0X2hiYV9pbmZvKCkgcmV0dXJucyB6ZXJvIChmYWlsdXJlKSB0aGUgYnVmZmVyIHRleHQgaXMgc2V0CisgKiB0byAiVW5rbm93biIgYW5kIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHJldHVybmVkLCB0aGVyZWZvcmUgdGhlIGNhbGxlcgorICogbXVzdCBjaGVjayBmb3IgIlVua25vd24iIGluIHRoZSBidWZmZXIgdG8gZGV0ZWN0IGEgZmFpbHVyZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19tYXhfcnBpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICBjaGFyICpidWYpCkBAIC01MzgsNiArODE4LDIwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiVW5rbm93blxuIik7CiB9CiAKKy8qKgorICogbHBmY191c2VkX3JwaV9zaG93OiBSZXR1cm4gbWF4aW11bSBycGkgbWludXMgYXZhaWxhYmxlIHJwaS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1ZjogY29udGFpbmluZyB0aGUgdXNlZCBycGkgY291bnQgaW4gZGVjaW1hbCBvciAiVW5rbm93biIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDYWxscyBscGZjX2dldF9oYmFfaW5mbygpIGFza2luZyBmb3IganVzdCB0aGUgbXJwaSBhbmQgYXJwaSBjb3VudHMuCisgKiBJZiBscGZjX2dldF9oYmFfaW5mbygpIHJldHVybnMgemVybyAoZmFpbHVyZSkgdGhlIGJ1ZmZlciB0ZXh0IGlzIHNldAorICogdG8gIlVua25vd24iIGFuZCB0aGUgYnVmZmVyIGxlbmd0aCBpcyByZXR1cm5lZCwgdGhlcmVmb3JlIHRoZSBjYWxsZXIKKyAqIG11c3QgY2hlY2sgZm9yICJVbmtub3duIiBpbiB0aGUgYnVmZmVyIHRvIGRldGVjdCBhIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfdXNlZF9ycGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICBjaGFyICpidWYpCkBAIC01NTIsNiArODQ2LDIwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiVW5rbm93blxuIik7CiB9CiAKKy8qKgorICogbHBmY19tYXhfeHJpX3Nob3c6IFJldHVybiBtYXhpbXVtIHhyaS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBtYXhpbXVtIHhyaSBjb3VudCBpbiBkZWNpbWFsIG9yICJVbmtub3duIi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENhbGxzIGxwZmNfZ2V0X2hiYV9pbmZvKCkgYXNraW5nIGZvciBqdXN0IHRoZSBtcnBpIGNvdW50LgorICogSWYgbHBmY19nZXRfaGJhX2luZm8oKSByZXR1cm5zIHplcm8gKGZhaWx1cmUpIHRoZSBidWZmZXIgdGV4dCBpcyBzZXQKKyAqIHRvICJVbmtub3duIiBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggaXMgcmV0dXJuZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyCisgKiBtdXN0IGNoZWNrIGZvciAiVW5rbm93biIgaW4gdGhlIGJ1ZmZlciB0byBkZXRlY3QgYSBmYWlsdXJlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX21heF94cmlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgIGNoYXIgKmJ1ZikKQEAgLTU2Niw2ICs4NzQsMjAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJVbmtub3duXG4iKTsKIH0KIAorLyoqCisgKiBscGZjX3VzZWRfeHJpX3Nob3c6IFJldHVybiBtYXhpbXVtIHhwaSBtaW51cyB0aGUgYXZhaWxhYmxlIHhwaS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSB1c2VkIHhyaSBjb3VudCBpbiBkZWNpbWFsIG9yICJVbmtub3duIi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENhbGxzIGxwZmNfZ2V0X2hiYV9pbmZvKCkgYXNraW5nIGZvciBqdXN0IHRoZSBteHJpIGFuZCBheHJpIGNvdW50cy4KKyAqIElmIGxwZmNfZ2V0X2hiYV9pbmZvKCkgcmV0dXJucyB6ZXJvIChmYWlsdXJlKSB0aGUgYnVmZmVyIHRleHQgaXMgc2V0CisgKiB0byAiVW5rbm93biIgYW5kIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHJldHVybmVkLCB0aGVyZWZvcmUgdGhlIGNhbGxlcgorICogbXVzdCBjaGVjayBmb3IgIlVua25vd24iIGluIHRoZSBidWZmZXIgdG8gZGV0ZWN0IGEgZmFpbHVyZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY191c2VkX3hyaV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgIGNoYXIgKmJ1ZikKQEAgLTU4MCw2ICs5MDIsMjAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJVbmtub3duXG4iKTsKIH0KIAorLyoqCisgKiBscGZjX21heF92cGlfc2hvdzogUmV0dXJuIG1heGltdW0gdnBpLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIG1heGltdW0gdnBpIGNvdW50IGluIGRlY2ltYWwgb3IgIlVua25vd24iLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2FsbHMgbHBmY19nZXRfaGJhX2luZm8oKSBhc2tpbmcgZm9yIGp1c3QgdGhlIG12cGkgY291bnQuCisgKiBJZiBscGZjX2dldF9oYmFfaW5mbygpIHJldHVybnMgemVybyAoZmFpbHVyZSkgdGhlIGJ1ZmZlciB0ZXh0IGlzIHNldAorICogdG8gIlVua25vd24iIGFuZCB0aGUgYnVmZmVyIGxlbmd0aCBpcyByZXR1cm5lZCwgdGhlcmVmb3JlIHRoZSBjYWxsZXIKKyAqIG11c3QgY2hlY2sgZm9yICJVbmtub3duIiBpbiB0aGUgYnVmZmVyIHRvIGRldGVjdCBhIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbWF4X3ZwaV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgY2hhciAqYnVmKQpAQCAtNTk0LDYgKzkzMCwyMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlVua25vd25cbiIpOwogfQogCisvKioKKyAqIGxwZmNfdXNlZF92cGlfc2hvdzogUmV0dXJuIG1heGltdW0gdnBpIG1pbnVzIHRoZSBhdmFpbGFibGUgdnBpLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHVzZWQgdnBpIGNvdW50IGluIGRlY2ltYWwgb3IgIlVua25vd24iLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2FsbHMgbHBmY19nZXRfaGJhX2luZm8oKSBhc2tpbmcgZm9yIGp1c3QgdGhlIG12cGkgYW5kIGF2cGkgY291bnRzLgorICogSWYgbHBmY19nZXRfaGJhX2luZm8oKSByZXR1cm5zIHplcm8gKGZhaWx1cmUpIHRoZSBidWZmZXIgdGV4dCBpcyBzZXQKKyAqIHRvICJVbmtub3duIiBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggaXMgcmV0dXJuZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyCisgKiBtdXN0IGNoZWNrIGZvciAiVW5rbm93biIgaW4gdGhlIGJ1ZmZlciB0byBkZXRlY3QgYSBmYWlsdXJlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3VzZWRfdnBpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgY2hhciAqYnVmKQpAQCAtNjA4LDYgKzk1OCwxOSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlVua25vd25cbiIpOwogfQogCisvKioKKyAqIGxwZmNfbnBpdl9pbmZvX3Nob3c6IFJldHVybiB0ZXh0IGFib3V0IE5QSVYgc3VwcG9ydCBmb3IgdGhlIGFkYXB0ZXIuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IHRleHQgdGhhdCBtdXN0IGJlIGludGVycHJldGVkIHRvIGRldGVybWluZSBpZiBucGl2IGlzIHN1cHBvcnRlZC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEJ1ZmZlciB3aWxsIGNvbnRhaW4gdGV4dCBpbmRpY2F0aW5nIG5waXYgaXMgbm90IHN1cHBvZXJ0ZWQgb24gdGhlIHBvcnQsCisgKiB0aGUgcG9ydCBpcyBhbiBOUElWIHBoeXNpY2FsIHBvcnQsIG9yIGl0IGlzIGFuIG5waXYgdmlydHVhbCBwb3J0IHdpdGgKKyAqIHRoZSBpZCBvZiB0aGUgdnBvcnQuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbnBpdl9pbmZvX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZikKQEAgLTYyMyw2ICs5ODYsMTcgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJOUElWIFZpcnR1YWwgKFZQSSAlZClcbiIsIHZwb3J0LT52cGkpOwogfQogCisvKioKKyAqIGxwZmNfcG9sbF9zaG93OiBSZXR1cm4gdGV4dCBhYm91dCBwb2xsIHN1cHBvcnQgZm9yIHRoZSBhZGFwdGVyLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGNmZ19wb2xsIGluIGhleC4KKyAqCisgKiBOb3RlczoKKyAqIGNmZ19wb2xsIHNob3VsZCBiZSBhIGxwZmNfcG9sbGluZ19mbGFncyB0eXBlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3BvbGxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCSAgICAgICBjaGFyICpidWYpCkBAIC02MzQsNiArMTAwOCwyMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIiwgcGhiYS0+Y2ZnX3BvbGwpOwogfQogCisvKioKKyAqIGxwZmNfcG9sbF9zdG9yZTogU2V0IHRoZSB2YWx1ZSBvZiBjZmdfcG9sbCBmb3IgdGhlIGFkYXB0ZXIuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uZSBvciBtb3JlIGxwZmNfcG9sbGluZ19mbGFncyB2YWx1ZXMuCisgKiBAY291bnQ6IG5vdCB1c2VkLgorICoKKyAqIE5vdGVzOgorICogYnVmIGNvbnRlbnRzIGNvbnZlcnRlZCB0byBpbnRlZ2VyIGFuZCBjaGVja2VkIGZvciBhIHZhbGlkIHZhbHVlLgorICoKKyAqIFJldHVybnM6CisgKiAtRUlOVkFMIGlmIHRoZSBidWZmZXIgY29ubm90IGJlIGNvbnZlcnRlZCBvciBpcyBvdXQgb2YgcmFuZ2UKKyAqIGxlbmd0aCBvZiB0aGUgYnVmIG9uIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3BvbGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC02OTIsNiArMTA4MCwyMCBAQAogCXJldHVybiBzdHJsZW4oYnVmKTsKIH0KIAorLyoqCisgKiBscGZjX3BhcmFtX3Nob3c6IFJldHVybiBhIGNmZyBhdHRyaWJ1dGUgdmFsdWUgaW4gZGVjaW1hbC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zaG93LgorICoKKyAqIGxwZmNfIyNhdHRyIyNfc2hvdzogUmV0dXJuIHRoZSBkZWNpbWFsIHZhbHVlIG9mIGFuIGFkYXB0ZXJzIGNmZ194eHggZmllbGQuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGRlY2ltYWwuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogI2RlZmluZSBscGZjX3BhcmFtX3Nob3coYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAogbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTcwNiw2ICsxMTA4LDIwIEBACiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCiB9CiAKKy8qKgorICogbHBmY19wYXJhbV9oZXhfc2hvdzogUmV0dXJuIGEgY2ZnIGF0dHJpYnV0ZSB2YWx1ZSBpbiBoZXguCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfc2hvdworICoKKyAqIGxwZmNfIyNhdHRyIyNfc2hvdzogUmV0dXJuIHRoZSBoZXggdmFsdWUgb2YgYW4gYWRhcHRlcnMgY2ZnX3h4eCBmaWVsZC4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gaGV4aWRlY2ltYWwuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogI2RlZmluZSBscGZjX3BhcmFtX2hleF9zaG93KGF0dHIpCVwKIHN0YXRpYyBzc2l6ZV90IFwKIGxwZmNfIyNhdHRyIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCkBAIC03MjAsNiArMTEzNiwyNSBAQAogCQkJcGhiYS0+Y2ZnXyMjYXR0cik7XAogfQogCisvKioKKyAqIGxwZmNfcGFyYW1faW5pdDogSW50aWFsaXplcyBhIGNmZyBhdHRyaWJ1dGUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfaW5pdC4gVGhlIG1hY3JvIGFsc28KKyAqIHRha2VzIGEgZGVmYXVsdCBhcmd1bWVudCwgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFyZ3VtZW50LgorICoKKyAqIGxwZmNfIyNhdHRyIyNfaW5pdDogSW5pdGlhbGl6ZXMgYW4gYXR0cmlidXRlLgorICogQHBoYmE6IHBvaW50ZXIgdGhlIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEB2YWw6IGludGVnZXIgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIFZhbGlkYXRlcyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIHRoZW4gc2V0cyB0aGUgYWRhcHRlciBjb25maWcgZmllbGQKKyAqIGFjY29yZGluZ2x5LCBvciB1c2VzIHRoZSBkZWZhdWx0IGlmIG91dCBvZiByYW5nZSBhbmQgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gb24gc3VjY2VzcworICogLUVJTlZBTCBpZiBkZWZhdWx0IHVzZWQKKyAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9pbml0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKIGxwZmNfIyNhdHRyIyNfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCB2YWwpIFwKQEAgLTczNSw2ICsxMTcwLDI2IEBACiAJcmV0dXJuIC1FSU5WQUw7XAogfQogCisvKioKKyAqIGxwZmNfcGFyYW1fc2V0OiBTZXQgYSBjZmcgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3NldAorICoKKyAqIGxwZmNfIyNhdHRyIyNfc2V0OiBTZXRzIGFuIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRoZSB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiBAdmFsOiBpbnRlZ2VyIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFZhbGlkYXRlcyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIHRoZW4gc2V0cyB0aGUKKyAqIGFkYXB0ZXIgY29uZmlnIGZpZWxkIGlmIGluIHRoZSB2YWxpZCByYW5nZS4gcHJpbnRzIGVycm9yIG1lc3NhZ2UKKyAqIGFuZCBkb2VzIG5vdCBzZXQgdGhlIHBhcmFtZXRlciBpZiBpbnZhbGlkLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgaWYgdmFsIGlzIGludmFsaWQKKyAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAogbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKSBcCkBAIC03NDksNiArMTIwNCwyNyBAQAogCXJldHVybiAtRUlOVkFMO1wKIH0KIAorLyoqCisgKiBscGZjX3BhcmFtX3N0b3JlOiBTZXQgYSB2cG9ydCBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfc3RvcmUuCisgKgorICogbHBmY18jI2F0dHIjI19zdG9yZTogU2V0IGFuIHN0dHJpYnV0ZSB2YWx1ZS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1ZjogY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBhc2NpaS4KKyAqIEBjb3VudDogbm90IHVzZWQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDb252ZXJ0IHRoZSBhc2NpaSB0ZXh0IG51bWJlciB0byBhbiBpbnRlZ2VyLCB0aGVuCisgKiB1c2UgdGhlIGxwZmNfIyNhdHRyIyNfc2V0IGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgaWYgdmFsIGlzIGludmFsaWQgb3IgbHBmY18jI2F0dHIjI19zZXQoKSBmYWlscworICogbGVuZ3RoIG9mIGJ1ZmZlciB1cG9uIHN1Y2Nlc3MuCisgKiovCiAjZGVmaW5lIGxwZmNfcGFyYW1fc3RvcmUoYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAogbHBmY18jI2F0dHIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCkBAIC03NjgsNiArMTI0NCwyMCBAQAogCQlyZXR1cm4gLUVJTlZBTDtcCiB9CiAKKy8qKgorICogbHBmY192cG9ydF9wYXJhbV9zaG93OiBSZXR1cm4gZGVjaW1hbCBmb3JtYXR0ZWQgY2ZnIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zaG93CisgKgorICogbHBmY18jI2F0dHIjI19zaG93OiBwcmludHMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBkZWNpbWFsLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBkZWNpbWFsLgorICoKKyAqIFJldHVybnM6IGxlbmd0aCBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogI2RlZmluZSBscGZjX3Zwb3J0X3BhcmFtX3Nob3coYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAogbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTc4MCw2ICsxMjcwLDIxIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZwb3J0LT5jZmdfIyNhdHRyKTtcCiB9CiAKKy8qKgorICogbHBmY192cG9ydF9wYXJhbV9oZXhfc2hvdzogUmV0dXJuIGhleCBmb3JtYXR0ZWQgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4KKyAqIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lCisgKiBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zaG93CisgKgorICogbHBmY18jI2F0dHIjI19zaG93OiBwcmludHMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBoZXhpZGVjaW1hbC4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gaGV4aWRlY2ltYWwuCisgKgorICogUmV0dXJuczogbGVuZ3RoIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1faGV4X3Nob3coYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAogbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTc5Miw2ICsxMjk3LDI0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJSN4XG4iLCB2cG9ydC0+Y2ZnXyMjYXR0cik7XAogfQogCisvKioKKyAqIGxwZmNfdnBvcnRfcGFyYW1faW5pdDogSW5pdGlhbGl6ZSBhIHZwb3J0IGNmZyBhdHRyaWJ1dGUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfaW5pdC4gVGhlIG1hY3JvIGFsc28KKyAqIHRha2VzIGEgZGVmYXVsdCBhcmd1bWVudCwgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFyZ3VtZW50LgorICoKKyAqIGxwZmNfIyNhdHRyIyNfaW5pdDogdmFsaWRhdGVzIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgdGhlbiBzZXRzIHRoZQorICogYWRhcHRlciBjb25maWcgZmllbGQgYWNjb3JkaW5nbHksIG9yIHVzZXMgdGhlIGRlZmF1bHQgaWYgb3V0IG9mIHJhbmdlCisgKiBhbmQgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UuCisgKiBAcGhiYTogcG9pbnRlciB0aGUgdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICogQHZhbDogaW50ZWdlciBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gb24gc3VjY2VzcworICogLUVJTlZBTCBpZiBkZWZhdWx0IHVzZWQKKyAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9pbml0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKIGxwZmNfIyNhdHRyIyNfaW5pdChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpIFwKQEAgLTgwMSwxMiArMTMyNCwyOSBAQAogCQlyZXR1cm4gMDtcCiAJfVwKIAlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsIFwKLQkJCSAiMDQ0OSBscGZjXyIjYXR0ciIgYXR0cmlidXRlIGNhbm5vdCBiZSBzZXQgdG8gJWQsICJcCisJCQkgIjA0MjMgbHBmY18iI2F0dHIiIGF0dHJpYnV0ZSBjYW5ub3QgYmUgc2V0IHRvICVkLCAiXAogCQkJICJhbGxvd2VkIHJhbmdlIGlzIFsiI21pbnZhbCIsICIjbWF4dmFsIl1cbiIsIHZhbCk7IFwKIAl2cG9ydC0+Y2ZnXyMjYXR0ciA9IGRlZmF1bHQ7XAogCXJldHVybiAtRUlOVkFMO1wKIH0KIAorLyoqCisgKiBscGZjX3Zwb3J0X3BhcmFtX3NldDogU2V0IGEgdnBvcnQgY2ZnIGF0dHJpYnV0ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zZXQKKyAqCisgKiBscGZjXyMjYXR0ciMjX3NldDogdmFsaWRhdGVzIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgdGhlbiBzZXRzIHRoZQorICogYWRhcHRlciBjb25maWcgZmllbGQgaWYgaW4gdGhlIHZhbGlkIHJhbmdlLiBwcmludHMgZXJyb3IgbWVzc2FnZQorICogYW5kIGRvZXMgbm90IHNldCB0aGUgcGFyYW1ldGVyIGlmIGludmFsaWQuCisgKiBAcGhiYTogcG9pbnRlciB0aGUgdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICogQHZhbDoJaW50ZWdlciBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gb24gc3VjY2VzcworICogLUVJTlZBTCBpZiB2YWwgaXMgaW52YWxpZAorICoqLwogI2RlZmluZSBscGZjX3Zwb3J0X3BhcmFtX3NldChhdHRyLCBkZWZhdWx0LCBtaW52YWwsIG1heHZhbCkJXAogc3RhdGljIGludCBcCiBscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpIFwKQEAgLTgxNiwxMSArMTM1NiwyOCBAQAogCQlyZXR1cm4gMDtcCiAJfVwKIAlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsIFwKLQkJCSAiMDQ1MCBscGZjXyIjYXR0ciIgYXR0cmlidXRlIGNhbm5vdCBiZSBzZXQgdG8gJWQsICJcCisJCQkgIjA0MjQgbHBmY18iI2F0dHIiIGF0dHJpYnV0ZSBjYW5ub3QgYmUgc2V0IHRvICVkLCAiXAogCQkJICJhbGxvd2VkIHJhbmdlIGlzIFsiI21pbnZhbCIsICIjbWF4dmFsIl1cbiIsIHZhbCk7IFwKIAlyZXR1cm4gLUVJTlZBTDtcCiB9CiAKKy8qKgorICogbHBmY192cG9ydF9wYXJhbV9zdG9yZTogU2V0IGEgdnBvcnQgYXR0cmlidXRlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoCisgKiBleHBhbmRzIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3N0b3JlCisgKgorICogbHBmY18jI2F0dHIjI19zdG9yZTogY29udmVydCB0aGUgYXNjaWkgdGV4dCBudW1iZXIgdG8gYW4gaW50ZWdlciwgdGhlbgorICogdXNlIHRoZSBscGZjXyMjYXR0ciMjX3NldCBmdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlLgorICogQGNkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGJ1ZjoJY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBkZWNpbWFsLgorICogQGNvdW50OiBub3QgdXNlZC4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB2YWwgaXMgaW52YWxpZCBvciBscGZjXyMjYXR0ciMjX3NldCgpIGZhaWxzCisgKiBsZW5ndGggb2YgYnVmZmVyIHVwb24gc3VjY2Vzcy4KKyAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9zdG9yZShhdHRyKQlcCiBzdGF0aWMgc3NpemVfdCBcCiBscGZjXyMjYXR0ciMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTk0MSw2ICsxNDk4LDcgQEAKIAkJICAgbHBmY19vcHRpb25fcm9tX3ZlcnNpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobnVtX2Rpc2NvdmVyZWRfcG9ydHMsIFNfSVJVR08sCiAJCSAgIGxwZmNfbnVtX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobWVubG9fbWdtdF9tb2RlLCBTX0lSVUdPLCBscGZjX21sb21nbXRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobnBvcnRfZXZ0X2NudCwgU19JUlVHTywgbHBmY19ucG9ydF9ldnRfY250X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfZHJ2cl92ZXJzaW9uLCBTX0lSVUdPLCBscGZjX2RydnJfdmVyc2lvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihib2FyZF9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTk1OCw2ICsxNTE2LDE3IEBACiAKIHN0YXRpYyBjaGFyICpscGZjX3NvZnRfd3duX2tleSA9ICJDOTlHNzFTTDgwMzJBIjsKIAorLyoqCisgKiBscGZjX3NvZnRfd3duX2VuYWJsZV9zdG9yZTogQWxsb3dzIHNldHRpbmcgb2YgdGhlIHd3biBpZiB0aGUga2V5IGlzIHZhbGlkLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBjb250YWluaW5nIHRoZSBzdHJpbmcgbHBmY19zb2Z0X3d3bl9rZXkuCisgKiBAY291bnQ6IG11c3QgYmUgc2l6ZSBvZiBscGZjX3NvZnRfd3duX2tleS4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB0aGUgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gbHBmY19zb2Z0X3d3bl9rZXkKKyAqIGxlbmd0aCBvZiBidWYgaW5kaWNhdGVzIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3NvZnRfd3duX2VuYWJsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC05OTQsNiArMTU2MywxNCBAQAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfc29mdF93d25fZW5hYmxlLCBTX0lXVVNSLCBOVUxMLAogCQkgICBscGZjX3NvZnRfd3duX2VuYWJsZV9zdG9yZSk7CiAKKy8qKgorICogbHBmY19zb2Z0X3d3cG5fc2hvdzogUmV0dXJuIHRoZSBjZmcgc29mdCB3dyBwb3J0IG5hbWUgb2YgdGhlIGFkYXB0ZXIuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgd3dwbiBpbiBoZXhpZGVjaW1hbC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19zb2Z0X3d3cG5fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgY2hhciAqYnVmKQpAQCAtMTAwNiw3ICsxNTgzLDE5IEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoYmEtPmNmZ19zb2Z0X3d3cG4pOwogfQogCi0KKy8qKgorICogbHBmY19zb2Z0X3d3cG5fc3RvcmU6IFNldCB0aGUgd3cgcG9ydCBuYW1lIG9mIHRoZSBhZGFwdGVyLgorICogQGRldiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IGNvbnRhaW5zIHRoZSB3d3BuIGluIGhleGlkZWNpbWFsLgorICogQGNvdW50OiBudW1iZXIgb2Ygd3dwbiBieXRlcyBpbiBidWYKKyAqCisgKiBSZXR1cm5zOgorICogLUVBQ0NFUyBoYmEgcmVzZXQgbm90IGVuYWJsZWQsIGFkYXB0ZXIgb3ZlciB0ZW1wCisgKiAtRUlOVkFMIHNvZnQgd3duIG5vdCBlbmFibGVkLCBjb3VudCBpcyBpbnZhbGlkLCBpbnZhbGlkIHd3cG4gYnl0ZSBpbnZhbGlkCisgKiAtRUlPIGVycm9yIHRha2luZyBhZGFwdGVyIG9mZmxpbmUgb3Igb25saW5lCisgKiB2YWx1ZSBvZiBjb3VudCBvbiBzdWNjZXNzCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19zb2Z0X3d3cG5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTEwODAsNiArMTY2OSwxNCBAQAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfc29mdF93d3BuLCBTX0lSVUdPIHwgU19JV1VTUixcCiAJCSAgIGxwZmNfc29mdF93d3BuX3Nob3csIGxwZmNfc29mdF93d3BuX3N0b3JlKTsKIAorLyoqCisgKiBscGZjX3NvZnRfd3dubl9zaG93OiBSZXR1cm4gdGhlIGNmZyBzb2Z0IHd3IG5vZGUgbmFtZSBmb3IgdGhlIGFkYXB0ZXIuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgd3dubiBpbiBoZXhpZGVjaW1hbC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19zb2Z0X3d3bm5fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgY2hhciAqYnVmKQpAQCAtMTA5MCw3ICsxNjg3LDE2IEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoYmEtPmNmZ19zb2Z0X3d3bm4pOwogfQogCi0KKy8qKgorICogbHBmY19zb2Z0X3d3bm5fc3RvcmU6IHNldHMgdGhlIHd3IG5vZGUgbmFtZSBvZiB0aGUgYWRhcHRlci4KKyAqIEBjZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBidWY6IGNvbnRhaW5zIHRoZSB3dyBub2RlIG5hbWUgaW4gaGV4aWRlY2ltYWwuCisgKiBAY291bnQ6IG51bWJlciBvZiB3d25uIGJ5dGVzIGluIGJ1Zi4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBzb2Z0IHd3biBub3QgZW5hYmxlZCwgY291bnQgaXMgaW52YWxpZCwgaW52YWxpZCB3d25uIGJ5dGUgaW52YWxpZAorICogdmFsdWUgb2YgY291bnQgb24gc3VjY2VzcworICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfc29mdF93d25uX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xMTc4LDYgKzE3ODQsMTUgQEAKIE1PRFVMRV9QQVJNX0RFU0MobHBmY19ub2Rldl90bW8sCiAJCSAiU2Vjb25kcyBkcml2ZXIgd2lsbCBob2xkIEkvTyB3YWl0aW5nICIKIAkJICJmb3IgYSBkZXZpY2UgdG8gY29tZSBiYWNrIik7CisKKy8qKgorICogbHBmY19ub2Rldl90bW9fc2hvdzogUmV0dXJuIHRoZSBoYmEgZGV2IGxvc3MgdGltZW91dCB2YWx1ZS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGRldiBsb3NzIHRpbWVvdXQgaW4gZGVjaW1hbC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19ub2Rldl90bW9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgY2hhciAqYnVmKQpAQCAtMTE4OSw2ICsxODA0LDIxIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCXZwb3J0LT5jZmdfZGV2bG9zc190bW8pOwogfQogCisvKioKKyAqIGxwZmNfbm9kZXZfdG1vX2luaXQ6IFNldCB0aGUgaGJhIG5vZGV2IHRpbWVvdXQgdmFsdWUuCisgKiBAdnBvcnQ6IGxwZmMgdnBvcnQgc3RydWN0dXJlIHBvaW50ZXIuCisgKiBAdmFsOiBjb250YWlucyB0aGUgbm9kZXYgdGltZW91dCB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHRoZSBkZXZsb3NzIHRtbyBpcyBhbHJlYWR5IHNldCB0aGVuIG5vZGV2IHRtbyBpcyBzZXQgdG8gZGV2bG9zcyB0bW8sCisgKiBhIGtlcm5lbCBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQgYW5kIHplcm8gaXMgcmV0dXJuZWQuCisgKiBFbHNlIGlmIHZhbCBpcyBpbiByYW5nZSB0aGVuIG5vZGV2IHRtbyBhbmQgZGV2bG9zcyB0bW8gYXJlIHNldCB0byB2YWwuCisgKiBPdGhlcndpc2Ugbm9kZXYgdG1vIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiBhbHJlYWR5IHNldCBvciBpZiB2YWwgaXMgaW4gcmFuZ2UKKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY19ub2Rldl90bW9faW5pdChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpCiB7CkBAIC0xMTk2LDcgKzE4MjYsNyBAQAogCQl2cG9ydC0+Y2ZnX25vZGV2X3RtbyA9IHZwb3J0LT5jZmdfZGV2bG9zc190bW87CiAJCWlmICh2YWwgIT0gTFBGQ19ERUZfREVWTE9TU19UTU8pCiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJCSAiMDQwMiBJZ25vcmluZyBub2Rldl90bW8gbW9kdWxlICIKKwkJCQkJICIwNDA3IElnbm9yaW5nIG5vZGV2X3RtbyBtb2R1bGUgIgogCQkJCQkgInBhcmFtZXRlciBiZWNhdXNlIGRldmxvc3NfdG1vIGlzICIKIAkJCQkJICJzZXQuXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC0xMjE1LDYgKzE4NDUsMTMgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorLyoqCisgKiBscGZjX3VwZGF0ZV9ycG9ydF9kZXZsb3NzX3RtbzogVXBkYXRlIGRldiBsb3NzIHRtbyB2YWx1ZS4KKyAqIEB2cG9ydDogbHBmYyB2cG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFVwZGF0ZSBhbGwgdGhlIG5kbHAncyBkZXYgbG9zcyB0bW8gd2l0aCB0aGUgdnBvcnQgZGV2bG9zcyB0bW8gdmFsdWUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY191cGRhdGVfcnBvcnRfZGV2bG9zc190bW8oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMTIyOSw2ICsxODY2LDIxIEBACiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogfQogCisvKioKKyAqIGxwZmNfbm9kZXZfdG1vX3NldDogU2V0IHRoZSB2cG9ydCBub2RldiB0bW8gYW5kIGRldmxvc3MgdG1vIHZhbHVlcy4KKyAqIEB2cG9ydDogbHBmYyB2cG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqIEB2YWw6IGNvbnRhaW5zIHRoZSB0bW8gdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB0aGUgZGV2bG9zcyB0bW8gaXMgYWxyZWFkeSBzZXQgb3IgdGhlIHZwb3J0IGRldiBsb3NzIHRtbyBoYXMgY2hhbmdlZAorICogdGhlbiBhIGtlcm5lbCBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQgYW5kIHplcm8gaXMgcmV0dXJuZWQuCisgKiBFbHNlIGlmIHZhbCBpcyBpbiByYW5nZSB0aGVuIG5vZGV2IHRtbyBhbmQgZGV2bG9zcyB0bW8gYXJlIHNldCB0byB2YWwuCisgKiBPdGhlcndpc2Ugbm9kZXYgdG1vIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiBhbHJlYWR5IHNldCBvciBpZiB2YWwgaXMgaW4gcmFuZ2UKKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY19ub2Rldl90bW9fc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkKIHsKQEAgLTEyNjksNiArMTkyMSwyMSBAQAogbHBmY192cG9ydF9wYXJhbV9pbml0KGRldmxvc3NfdG1vLCBMUEZDX0RFRl9ERVZMT1NTX1RNTywKIAkJICAgICAgTFBGQ19NSU5fREVWTE9TU19UTU8sIExQRkNfTUFYX0RFVkxPU1NfVE1PKQogbHBmY192cG9ydF9wYXJhbV9zaG93KGRldmxvc3NfdG1vKQorCisvKioKKyAqIGxwZmNfZGV2bG9zc190bW9fc2V0OiBTZXRzIHZwb3J0IG5vZGV2IHRtbywgZGV2bG9zcyB0bW8gdmFsdWVzLCBjaGFuZ2VkIGJpdC4KKyAqIEB2cG9ydDogbHBmYyB2cG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqIEB2YWw6IGNvbnRhaW5zIHRoZSB0bW8gdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB2YWwgaXMgaW4gYSB2YWxpZCByYW5nZSB0aGVuIHNldCB0aGUgdnBvcnQgbm9kZXYgdG1vLAorICogZGV2bG9zcyB0bW8sIGFsc28gc2V0IHRoZSB2cG9ydCBkZXYgbG9zcyB0bW8gY2hhbmdlZCBmbGFnLgorICogRWxzZSBhIGtlcm5lbCBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgdmFsIGlzIGluIHJhbmdlCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGV2bG9zc190bW9fc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkKIHsKQEAgLTEzNjYsMTIgKzIwMzMsMjcgQEAKIAkJICJSZXN0cmljdCB2aXJ0dWFsIHBvcnRzIGxvZ2luIHRvIHJlbW90ZSBpbml0aWF0b3JzLiIpOwogbHBmY192cG9ydF9wYXJhbV9zaG93KHJlc3RyaWN0X2xvZ2luKTsKIAorLyoqCisgKiBscGZjX3Jlc3RyaWN0X2xvZ2luX2luaXQ6IFNldCB0aGUgdnBvcnQgcmVzdHJpY3QgbG9naW4gZmxhZy4KKyAqIEB2cG9ydDogbHBmYyB2cG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqIEB2YWw6IGNvbnRhaW5zIHRoZSByZXN0cmljdCBsb2dpbiB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHZhbCBpcyBub3QgaW4gYSB2YWxpZCByYW5nZSB0aGVuIGxvZyBhIGtlcm5lbCBlcnJvciBtZXNzYWdlIGFuZCBzZXQKKyAqIHRoZSB2cG9ydCByZXN0cmljdCBsb2dpbiB0byBvbmUuCisgKiBJZiB0aGUgcG9ydCB0eXBlIGlzIHBoeXNpY2FsIGNsZWFyIHRoZSByZXN0cmljdCBsb2dpbiBmbGFnIGFuZCByZXR1cm4uCisgKiBFbHNlIHNldCB0aGUgcmVzdHJpY3QgbG9naW4gZmxhZyB0byB2YWwuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgdmFsIGlzIGluIHJhbmdlCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfcmVzdHJpY3RfbG9naW5faW5pdChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpCiB7CiAJaWYgKHZhbCA8IDAgfHwgdmFsID4gMSkgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJICIwNDQ5IGxwZmNfcmVzdHJpY3RfbG9naW4gYXR0cmlidXRlIGNhbm5vdCAiCisJCQkJICIwNDIyIGxwZmNfcmVzdHJpY3RfbG9naW4gYXR0cmlidXRlIGNhbm5vdCAiCiAJCQkJICJiZSBzZXQgdG8gJWQsIGFsbG93ZWQgcmFuZ2UgaXMgWzAsIDFdXG4iLAogCQkJCSB2YWwpOwogCQl2cG9ydC0+Y2ZnX3Jlc3RyaWN0X2xvZ2luID0gMTsKQEAgLTEzODUsMTIgKzIwNjcsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3Jlc3RyaWN0X2xvZ2luX3NldDogU2V0IHRoZSB2cG9ydCByZXN0cmljdCBsb2dpbiBmbGFnLgorICogQHZwb3J0OiBscGZjIHZwb3J0IHN0cnVjdHVyZSBwb2ludGVyLgorICogQHZhbDogY29udGFpbnMgdGhlIHJlc3RyaWN0IGxvZ2luIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdmFsIGlzIG5vdCBpbiBhIHZhbGlkIHJhbmdlIHRoZW4gbG9nIGEga2VybmVsIGVycm9yIG1lc3NhZ2UgYW5kIHNldAorICogdGhlIHZwb3J0IHJlc3RyaWN0IGxvZ2luIHRvIG9uZS4KKyAqIElmIHRoZSBwb3J0IHR5cGUgaXMgcGh5c2ljYWwgYW5kIHRoZSB2YWwgaXMgbm90IHplcm8gbG9nIGEga2VybmVsCisgKiBlcnJvciBtZXNzYWdlLCBjbGVhciB0aGUgcmVzdHJpY3QgbG9naW4gZmxhZyBhbmQgcmV0dXJuIHplcm8uCisgKiBFbHNlIHNldCB0aGUgcmVzdHJpY3QgbG9naW4gZmxhZyB0byB2YWwuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgdmFsIGlzIGluIHJhbmdlCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfcmVzdHJpY3RfbG9naW5fc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkKIHsKIAlpZiAodmFsIDwgMCB8fCB2YWwgPiAxKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkgIjA0NTAgbHBmY19yZXN0cmljdF9sb2dpbiBhdHRyaWJ1dGUgY2Fubm90ICIKKwkJCQkgIjA0MjUgbHBmY19yZXN0cmljdF9sb2dpbiBhdHRyaWJ1dGUgY2Fubm90ICIKIAkJCQkgImJlIHNldCB0byAlZCwgYWxsb3dlZCByYW5nZSBpcyBbMCwgMV1cbiIsCiAJCQkJIHZhbCk7CiAJCXZwb3J0LT5jZmdfcmVzdHJpY3RfbG9naW4gPSAxOwpAQCAtMTQ0MSw2ICsyMTM5LDIzIEBACiAjIFNldCBsb29wIG1vZGUgaWYgeW91IHdhbnQgdG8gcnVuIGFzIGFuIE5MX1BvcnQuIFZhbHVlIHJhbmdlIGlzIFswLDB4Nl0uCiAjIERlZmF1bHQgdmFsdWUgaXMgMC4KICovCisKKy8qKgorICogbHBmY190b3BvbG9neV9zZXQ6IFNldCB0aGUgYWRhcHRlcnMgdG9wb2xvZ3kgZmllbGQuCisgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KKyAqIEB2YWw6IHRvcG9sb2d5IHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdmFsIGlzIGluIGEgdmFsaWQgcmFuZ2UgdGhlbiBzZXQgdGhlIGFkYXB0ZXIncyB0b3BvbG9neSBmaWVsZCBhbmQKKyAqIGlzc3VlIGEgbGlwOyBpZiB0aGUgbGlwIGZhaWxzIHJlc2V0IHRoZSB0b3BvbG9neSB0byB0aGUgb2xkIHZhbHVlLgorICoKKyAqIElmIHRoZSB2YWx1ZSBpcyBub3QgaW4gcmFuZ2UgbG9nIGEga2VybmVsIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBhbiBlcnJvci4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiB2YWwgaXMgaW4gcmFuZ2UgYW5kIGxpcCBva2F5CisgKiBub24temVybyByZXR1cm4gdmFsdWUgZnJvbSBscGZjX2lzc3VlX2xpcCgpCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfdG9wb2xvZ3lfc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkKIHsKQEAgLTE0NjksNiArMjE4NCwzMzUgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjX3RvcG9sb2d5LCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJbHBmY190b3BvbG9neV9zaG93LCBscGZjX3RvcG9sb2d5X3N0b3JlKTsKIAorCisvKioKKyAqIGxwZmNfc3RhdF9kYXRhX2N0cmxfc3RvcmU6IHdyaXRlIGNhbGwgYmFjayBmb3IgbHBmY19zdGF0X2RhdGFfY3RybAorICogIHN5c2ZzIGZpbGUuCisgKiBAZGV2OiBQb2ludGVyIHRvIGNsYXNzIGRldmljZS4KKyAqIEBidWY6IERhdGEgYnVmZmVyLgorICogQGNvdW50OiBTaXplIG9mIHRoZSBkYXRhIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldCBjYWxsZWQgd2hlbiBhbiB1c2VyIHdyaXRlIHRvIHRoZSBscGZjX3N0YXRfZGF0YV9jdHJsCisgKiBzeXNmcyBmaWxlLiBUaGlzIGZ1bmN0aW9uIHBhcnNlIHRoZSBjb21tYW5kIHdyaXR0ZW4gdG8gdGhlIHN5c2ZzIGZpbGUKKyAqIGFuZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4gVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgZm9yIGNvbnRyb2xsaW5nCisgKiBkcml2ZXIgc3RhdGlzdGljYWwgZGF0YSBjb2xsZWN0aW9uLgorICogRm9sbG93aW5nIGFyZSB0aGUgY29tbWFuZCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMuCisgKgorICogICAgc2V0YnVja2V0IDxidWNrZXRfdHlwZT4gPGJhc2U+IDxzdGVwPgorICoJCQkgICAgICAgPSBTZXQgdGhlIGxhdGVuY3kgYnVja2V0cy4KKyAqICAgIGRlc3Ryb3lidWNrZXQgICAgICAgICAgICA9IGRlc3Ryb3kgYWxsIHRoZSBidWNrZXRzLgorICogICAgc3RhcnQgICAgICAgICAgICAgICAgICAgID0gc3RhcnQgZGF0YSBjb2xsZWN0aW9uCisgKiAgICBzdG9wICAgICAgICAgICAgICAgICAgICAgPSBzdG9wIGRhdGEgY29sbGVjdGlvbgorICogICAgcmVzZXQgICAgICAgICAgICAgICAgICAgID0gcmVzZXQgdGhlIGNvbGxlY3RlZCBkYXRhCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19zdGF0X2RhdGFfY3RybF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKyNkZWZpbmUgTFBGQ19NQVhfREFUQV9DVFJMX0xFTiAxMDI0CisJc3RhdGljIGNoYXIgYnVja2V0X2RhdGFbTFBGQ19NQVhfREFUQV9DVFJMX0xFTl07CisJdW5zaWduZWQgbG9uZyBpOworCWNoYXIgKnN0cl9wdHIsICp0b2tlbjsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICp2X3Nob3N0OworCWNoYXIgKmJ1Y2tldF90eXBlX3N0ciwgKmJhc2Vfc3RyLCAqc3RlcF9zdHI7CisJdW5zaWduZWQgbG9uZyBiYXNlLCBzdGVwLCBidWNrZXRfdHlwZTsKKworCWlmICghc3RybmNtcChidWYsICJzZXRidWNrZXQiLCBzdHJsZW4oInNldGJ1Y2tldCIpKSkgeworCQlpZiAoc3RybGVuKGJ1ZikgPiBMUEZDX01BWF9EQVRBX0NUUkxfTEVOKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3RyY3B5KGJ1Y2tldF9kYXRhLCBidWYpOworCQlzdHJfcHRyID0gJmJ1Y2tldF9kYXRhWzBdOworCQkvKiBJZ25vcmUgdGhpcyB0b2tlbiAtIHRoaXMgaXMgY29tbWFuZCB0b2tlbiAqLworCQl0b2tlbiA9IHN0cnNlcCgmc3RyX3B0ciwgIlx0ICIpOworCQlpZiAoIXRva2VuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnVja2V0X3R5cGVfc3RyID0gc3Ryc2VwKCZzdHJfcHRyLCAiXHQgIik7CisJCWlmICghYnVja2V0X3R5cGVfc3RyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKCFzdHJuY21wKGJ1Y2tldF90eXBlX3N0ciwgImxpbmVhciIsIHN0cmxlbigibGluZWFyIikpKQorCQkJYnVja2V0X3R5cGUgPSBMUEZDX0xJTkVBUl9CVUNLRVQ7CisJCWVsc2UgaWYgKCFzdHJuY21wKGJ1Y2tldF90eXBlX3N0ciwgInBvd2VyMiIsIHN0cmxlbigicG93ZXIyIikpKQorCQkJYnVja2V0X3R5cGUgPSBMUEZDX1BPV0VSMl9CVUNLRVQ7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWJhc2Vfc3RyID0gc3Ryc2VwKCZzdHJfcHRyLCAiXHQgIik7CisJCWlmICghYmFzZV9zdHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYmFzZSA9IHNpbXBsZV9zdHJ0b3VsKGJhc2Vfc3RyLCBOVUxMLCAwKTsKKworCQlzdGVwX3N0ciA9IHN0cnNlcCgmc3RyX3B0ciwgIlx0ICIpOworCQlpZiAoIXN0ZXBfc3RyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXN0ZXAgPSBzaW1wbGVfc3RydG91bChzdGVwX3N0ciwgTlVMTCwgMCk7CisJCWlmICghc3RlcCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIEJsb2NrIHRoZSBkYXRhIGNvbGxlY3Rpb24gZm9yIGV2ZXJ5IHZwb3J0ICovCisJCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJCWlmICh2cG9ydHMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQl2X3Nob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzcGluX2xvY2tfaXJxKHZfc2hvc3QtPmhvc3RfbG9jayk7CisJCQkvKiBCbG9jayBhbmQgcmVzZXQgZGF0YSBjb2xsZWN0aW9uICovCisJCQl2cG9ydHNbaV0tPnN0YXRfZGF0YV9ibG9ja2VkID0gMTsKKwkJCWlmICh2cG9ydHNbaV0tPnN0YXRfZGF0YV9lbmFibGVkKQorCQkJCWxwZmNfdnBvcnRfcmVzZXRfc3RhdF9kYXRhKHZwb3J0c1tpXSk7CisJCQlzcGluX3VubG9ja19pcnEodl9zaG9zdC0+aG9zdF9sb2NrKTsKKwkJfQorCisJCS8qIFNldCB0aGUgYnVja2V0IGF0dHJpYnV0ZXMgKi8KKwkJcGhiYS0+YnVja2V0X3R5cGUgPSBidWNrZXRfdHlwZTsKKwkJcGhiYS0+YnVja2V0X2Jhc2UgPSBiYXNlOworCQlwaGJhLT5idWNrZXRfc3RlcCA9IHN0ZXA7CisKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXZfc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKworCQkJLyogVW5ibG9jayBkYXRhIGNvbGxlY3Rpb24gKi8KKwkJCXNwaW5fbG9ja19pcnEodl9zaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0c1tpXS0+c3RhdF9kYXRhX2Jsb2NrZWQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxKHZfc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCX0KKworCWlmICghc3RybmNtcChidWYsICJkZXN0cm95YnVja2V0Iiwgc3RybGVuKCJkZXN0cm95YnVja2V0IikpKSB7CisJCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJCWlmICh2cG9ydHMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQl2X3Nob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJdnBvcnRzW2ldLT5zdGF0X2RhdGFfYmxvY2tlZCA9IDE7CisJCQlscGZjX2ZyZWVfYnVja2V0KHZwb3J0KTsKKwkJCXZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCA9IDA7CisJCQl2cG9ydHNbaV0tPnN0YXRfZGF0YV9ibG9ja2VkID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJfQorCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCQlwaGJhLT5idWNrZXRfdHlwZSA9IExQRkNfTk9fQlVDS0VUOworCQlwaGJhLT5idWNrZXRfYmFzZSA9IDA7CisJCXBoYmEtPmJ1Y2tldF9zdGVwID0gMDsKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCX0KKworCWlmICghc3RybmNtcChidWYsICJzdGFydCIsIHN0cmxlbigic3RhcnQiKSkpIHsKKwkJLyogSWYgbm8gYnVja2V0cyBjb25maWd1cmVkIHJldHVybiBlcnJvciAqLworCQlpZiAocGhiYS0+YnVja2V0X3R5cGUgPT0gTFBGQ19OT19CVUNLRVQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJaWYgKHZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJcmV0dXJuIHN0cmxlbihidWYpOworCQl9CisJCWxwZmNfYWxsb2NfYnVja2V0KHZwb3J0KTsKKwkJdnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJfQorCisJaWYgKCFzdHJuY21wKGJ1ZiwgInN0b3AiLCBzdHJsZW4oInN0b3AiKSkpIHsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJaWYgKHZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCA9PSAwKSB7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJCX0KKwkJbHBmY19mcmVlX2J1Y2tldCh2cG9ydCk7CisJCXZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCX0KKworCWlmICghc3RybmNtcChidWYsICJyZXNldCIsIHN0cmxlbigicmVzZXQiKSkpIHsKKwkJaWYgKChwaGJhLT5idWNrZXRfdHlwZSA9PSBMUEZDX05PX0JVQ0tFVCkKKwkJCXx8ICF2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQpCisJCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXZwb3J0LT5zdGF0X2RhdGFfYmxvY2tlZCA9IDE7CisJCWxwZmNfdnBvcnRfcmVzZXRfc3RhdF9kYXRhKHZwb3J0KTsKKwkJdnBvcnQtPnN0YXRfZGF0YV9ibG9ja2VkID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisKKy8qKgorICogbHBmY19zdGF0X2RhdGFfY3RybF9zaG93OiBSZWFkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvcgorICogICBscGZjX3N0YXRfZGF0YV9jdHJsIHN5c2ZzIGZpbGUuCisgKiBAZGV2OiBQb2ludGVyIHRvIGNsYXNzIGRldmljZSBvYmplY3QuCisgKiBAYnVmOiBEYXRhIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZWFkIGNhbGwgYmFjayBmdW5jdGlvbiBmb3IKKyAqIGxwZmNfc3RhdF9kYXRhX2N0cmwgc3lzZnMgZmlsZS4gVGhpcyBmdW5jdGlvbiByZXBvcnQgdGhlCisgKiBjdXJyZW50IHN0YXRpc3RpY2FsIGRhdGEgY29sbGVjdGlvbiBzdGF0ZS4KKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX3N0YXRfZGF0YV9jdHJsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisJaW50IGluZGV4ID0gMDsKKwlpbnQgaTsKKwljaGFyICpidWNrZXRfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGJ1Y2tldF92YWx1ZTsKKworCXN3aXRjaCAocGhiYS0+YnVja2V0X3R5cGUpIHsKKwljYXNlIExQRkNfTElORUFSX0JVQ0tFVDoKKwkJYnVja2V0X3R5cGUgPSAibGluZWFyIjsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX1BPV0VSMl9CVUNLRVQ6CisJCWJ1Y2tldF90eXBlID0gInBvd2VyMiI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJ1Y2tldF90eXBlID0gIk5vIEJ1Y2tldCI7CisJCWJyZWFrOworCX0KKworCXNwcmludGYoJmJ1ZltpbmRleF0sICJTdGF0aXN0aWNhbCBEYXRhIGVuYWJsZWQgOiVkLCAiCisJCSJibG9ja2VkIDolZCwgQnVja2V0IHR5cGUgOiVzLCBCdWNrZXQgYmFzZSA6JWQsIgorCQkiIEJ1Y2tldCBzdGVwIDolZFxuTGF0ZW5jeSBSYW5nZXMgOiIsCisJCXZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCwgdnBvcnQtPnN0YXRfZGF0YV9ibG9ja2VkLAorCQlidWNrZXRfdHlwZSwgcGhiYS0+YnVja2V0X2Jhc2UsIHBoYmEtPmJ1Y2tldF9zdGVwKTsKKwlpbmRleCA9IHN0cmxlbihidWYpOworCWlmIChwaGJhLT5idWNrZXRfdHlwZSAhPSBMUEZDX05PX0JVQ0tFVCkgeworCQlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NQVhfQlVDS0VUX0NPVU5UOyBpKyspIHsKKwkJCWlmIChwaGJhLT5idWNrZXRfdHlwZSA9PSBMUEZDX0xJTkVBUl9CVUNLRVQpCisJCQkJYnVja2V0X3ZhbHVlID0gcGhiYS0+YnVja2V0X2Jhc2UgKworCQkJCQlwaGJhLT5idWNrZXRfc3RlcCAqIGk7CisJCQllbHNlCisJCQkJYnVja2V0X3ZhbHVlID0gcGhiYS0+YnVja2V0X2Jhc2UgKworCQkJCSgxIDw8IGkpICogcGhiYS0+YnVja2V0X3N0ZXA7CisKKwkJCWlmIChpbmRleCArIDEwID4gUEFHRV9TSVpFKQorCQkJCWJyZWFrOworCQkJc3ByaW50ZigmYnVmW2luZGV4XSwgIiUwOGxkICIsIGJ1Y2tldF92YWx1ZSk7CisJCQlpbmRleCA9IHN0cmxlbihidWYpOworCQl9CisJfQorCXNwcmludGYoJmJ1ZltpbmRleF0sICJcbiIpOworCXJldHVybiBzdHJsZW4oYnVmKTsKK30KKworLyoKKyAqIFN5c2ZzIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBzdGF0aXN0aWNhbCBkYXRhIGNvbGxlY3Rpb24uCisgKi8KK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX3N0YXRfZGF0YV9jdHJsLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgbHBmY19zdGF0X2RhdGFfY3RybF9zaG93LCBscGZjX3N0YXRfZGF0YV9jdHJsX3N0b3JlKTsKKworLyoKKyAqIGxwZmNfZHJ2cl9zdGF0X2RhdGE6IHN5c2ZzIGF0dHIgdG8gZ2V0IGRyaXZlciBzdGF0aXN0aWNhbCBkYXRhLgorICovCisKKy8qCisgKiBFYWNoIEJ1Y2tldCB0YWtlcyAxMSBjaGFyYWN0ZXJzIGFuZCAxIG5ldyBsaW5lICsgMTcgYnl0ZXMgV1dOCisgKiBmb3IgZWFjaCB0YXJnZXQuCisgKi8KKyNkZWZpbmUgU1RBVF9EQVRBX1NJWkVfUEVSX1RBUkdFVChOVU1fQlVDS0VUUykgKChOVU1fQlVDS0VUUykgKiAxMSArIDE4KQorI2RlZmluZSBNQVhfU1RBVF9EQVRBX1NJWkVfUEVSX1RBUkdFVCBcCisJU1RBVF9EQVRBX1NJWkVfUEVSX1RBUkdFVChMUEZDX01BWF9CVUNLRVRfQ09VTlQpCisKKworLyoqCisgKiBzeXNmc19kcnZyX3N0YXRfZGF0YV9yZWFkOiBSZWFkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBscGZjX2RydnJfc3RhdF9kYXRhCisgKiAgc3lzZnMgYXR0cmlidXRlLgorICogQGtvYmo6IFBvaW50ZXIgdG8gdGhlIGtlcm5lbCBvYmplY3QKKyAqIEBiaW5fYXR0cjogQXR0cmlidXRlIG9iamVjdAorICogQGJ1ZmY6IEJ1ZmZlciBwb2ludGVyCisgKiBAb2ZmOiBGaWxlIG9mZnNldAorICogQGNvdW50OiBCdWZmZXIgc2l6ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHJlYWQgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvciBscGZjX2RydnJfc3RhdF9kYXRhCisgKiBzeXNmcyBmaWxlLiBUaGlzIGZ1bmN0aW9uIGV4cG9ydCB0aGUgc3RhdGlzdGljYWwgZGF0YSB0byB1c2VyCisgKiBhcHBsaWNhdGlvbnMuCisgKiovCitzdGF0aWMgc3NpemVfdAorc3lzZnNfZHJ2cl9zdGF0X2RhdGFfcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwKKwkJa29iaik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisJaW50IGkgPSAwLCBpbmRleCA9IDA7CisJdW5zaWduZWQgbG9uZyBucG9ydF9pbmRleDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IE5VTEw7CisJbnBvcnRfaW5kZXggPSAodW5zaWduZWQgbG9uZylvZmYgLworCQlNQVhfU1RBVF9EQVRBX1NJWkVfUEVSX1RBUkdFVDsKKworCWlmICghdnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkIHx8IHZwb3J0LT5zdGF0X2RhdGFfYmxvY2tlZAorCQl8fCAocGhiYS0+YnVja2V0X3R5cGUgPT0gTFBGQ19OT19CVUNLRVQpKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApIHx8ICFuZGxwLT5sYXRfZGF0YSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChucG9ydF9pbmRleCA+IDApIHsKKwkJCW5wb3J0X2luZGV4LS07CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoaW5kZXggKyBNQVhfU1RBVF9EQVRBX1NJWkVfUEVSX1RBUkdFVCkKKwkJCT4gY291bnQpCisJCQlicmVhazsKKworCQlpZiAoIW5kbHAtPmxhdF9kYXRhKQorCQkJY29udGludWU7CisKKwkJLyogUHJpbnQgdGhlIFdXTiAqLworCQlzcHJpbnRmKCZidWZbaW5kZXhdLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMng6IiwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3blswXSwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3blsxXSwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3blsyXSwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3blszXSwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3bls0XSwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3bls1XSwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3bls2XSwKKwkJCW5kbHAtPm5scF9wb3J0bmFtZS51Lnd3bls3XSk7CisKKwkJaW5kZXggPSBzdHJsZW4oYnVmKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NQVhfQlVDS0VUX0NPVU5UOyBpKyspIHsKKwkJCXNwcmludGYoJmJ1ZltpbmRleF0sICIlMDEwdSwiLAorCQkJCW5kbHAtPmxhdF9kYXRhW2ldLmNtZF9jb3VudCk7CisJCQlpbmRleCA9IHN0cmxlbihidWYpOworCQl9CisJCXNwcmludGYoJmJ1ZltpbmRleF0sICJcbiIpOworCQlpbmRleCA9IHN0cmxlbihidWYpOworCX0KKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgc3lzZnNfZHJ2cl9zdGF0X2RhdGFfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAibHBmY19kcnZyX3N0YXRfZGF0YSIsCisJCS5tb2RlID0gU19JUlVTUiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkuc2l6ZSA9IExQRkNfTUFYX1RBUkdFVCAqIE1BWF9TVEFUX0RBVEFfU0laRV9QRVJfVEFSR0VULAorCS5yZWFkID0gc3lzZnNfZHJ2cl9zdGF0X2RhdGFfcmVhZCwKKwkud3JpdGUgPSBOVUxMLAorfTsKKwogLyoKICMgbHBmY19saW5rX3NwZWVkOiBMaW5rIHNwZWVkIHNlbGVjdGlvbiBmb3IgaW5pdGlhbGl6aW5nIHRoZSBGaWJyZSBDaGFubmVsCiAjIGNvbm5lY3Rpb24uCkBAIC0xNDc5LDYgKzI1MjMsMjQgQEAKICMgICAgICAgOCAgPSA4IEdpZ2FiYXVkCiAjIFZhbHVlIHJhbmdlIGlzIFswLDhdLiBEZWZhdWx0IHZhbHVlIGlzIDAuCiAqLworCisvKioKKyAqIGxwZmNfbGlua19zcGVlZF9zZXQ6IFNldCB0aGUgYWRhcHRlcnMgbGluayBzcGVlZC4KKyAqIEBwaGJhOiBscGZjX2hiYSBwb2ludGVyLgorICogQHZhbDogbGluayBzcGVlZCB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHZhbCBpcyBpbiBhIHZhbGlkIHJhbmdlIHRoZW4gc2V0IHRoZSBhZGFwdGVyJ3MgbGluayBzcGVlZCBmaWVsZCBhbmQKKyAqIGlzc3VlIGEgbGlwOyBpZiB0aGUgbGlwIGZhaWxzIHJlc2V0IHRoZSBsaW5rIHNwZWVkIHRvIHRoZSBvbGQgdmFsdWUuCisgKgorICogTm90ZXM6CisgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGluIHJhbmdlIGxvZyBhIGtlcm5lbCBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gYW4gZXJyb3IuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgdmFsIGlzIGluIHJhbmdlIGFuZCBsaXAgb2theS4KKyAqIG5vbi16ZXJvIHJldHVybiB2YWx1ZSBmcm9tIGxwZmNfaXNzdWVfbGlwKCkKKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY19saW5rX3NwZWVkX3NldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCB2YWwpCiB7CkBAIC0xNTEzLDYgKzI1NzUsMjMgQEAKIG1vZHVsZV9wYXJhbShscGZjX2xpbmtfc3BlZWQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfbGlua19zcGVlZCwgIlNlbGVjdCBsaW5rIHNwZWVkIik7CiBscGZjX3BhcmFtX3Nob3cobGlua19zcGVlZCkKKworLyoqCisgKiBscGZjX2xpbmtfc3BlZWRfaW5pdDogU2V0IHRoZSBhZGFwdGVycyBsaW5rIHNwZWVkLgorICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIuCisgKiBAdmFsOiBsaW5rIHNwZWVkIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdmFsIGlzIGluIGEgdmFsaWQgcmFuZ2UgdGhlbiBzZXQgdGhlIGFkYXB0ZXIncyBsaW5rIHNwZWVkIGZpZWxkLgorICoKKyAqIE5vdGVzOgorICogSWYgdGhlIHZhbHVlIGlzIG5vdCBpbiByYW5nZSBsb2cgYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSwgY2xlYXIgdGhlIGxpbmsKKyAqIHNwZWVkIGFuZCByZXR1cm4gYW4gZXJyb3IuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgdmFsIHNhdmVkLgorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2xpbmtfc3BlZWRfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCB2YWwpCiB7CkBAIC0xNTIyLDcgKzI2MDEsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCSIwNDU0IGxwZmNfbGlua19zcGVlZCBhdHRyaWJ1dGUgY2Fubm90ICIKKwkJCSIwNDA1IGxwZmNfbGlua19zcGVlZCBhdHRyaWJ1dGUgY2Fubm90ICIKIAkJCSJiZSBzZXQgdG8gJWQsIGFsbG93ZWQgdmFsdWVzIGFyZSAiCiAJCQkiWyJMUEZDX0xJTktfU1BFRURfU1RSSU5HIl1cbiIsIHZhbCk7CiAJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPSAwOwpAQCAtMTU0OCw2ICsyNjI3LDQ4IEBACiAJCSAgICJVc2UgQURJU0Mgb24gcmVkaXNjb3ZlcnkgdG8gYXV0aGVudGljYXRlIEZDUCBkZXZpY2VzIik7CiAKIC8qCisjIGxwZmNfbWF4X3Njc2ljbXBsX3RpbWU6IFVzZSBzY3NpIGNvbW1hbmQgY29tcGxldGlvbiB0aW1lIHRvIGNvbnRyb2wgSS9PIHF1ZXVlCisjIGRlcHRoLiBEZWZhdWx0IHZhbHVlIGlzIDAuIFdoZW4gdGhlIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIHplcm8gdGhlCisjIFNDU0kgY29tbWFuZCBjb21wbGV0aW9uIHRpbWUgaXMgbm90IHVzZWQgZm9yIGNvbnRyb2xsaW5nIEkvTyBxdWV1ZSBkZXB0aC4gV2hlbgorIyB0aGUgcGFyYW1ldGVyIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgSS9PIHF1ZXVlIGRlcHRoIGlzIGNvbnRyb2xsZWQKKyMgdG8gbGltaXQgdGhlIEkvTyBjb21wbGV0aW9uIHRpbWUgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZS4KKyMgVGhlIHZhbHVlIGlzIHNldCBpbiBtaWxsaXNlY29uZHMuCisqLworc3RhdGljIGludCBscGZjX21heF9zY3NpY21wbF90aW1lOworbW9kdWxlX3BhcmFtKGxwZmNfbWF4X3Njc2ljbXBsX3RpbWUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxwZmNfbWF4X3Njc2ljbXBsX3RpbWUsCisJIlVzZSBjb21tYW5kIGNvbXBsZXRpb24gdGltZSB0byBjb250cm9sIHF1ZXVlIGRlcHRoIik7CitscGZjX3Zwb3J0X3BhcmFtX3Nob3cobWF4X3Njc2ljbXBsX3RpbWUpOworbHBmY192cG9ydF9wYXJhbV9pbml0KG1heF9zY3NpY21wbF90aW1lLCAwLCAwLCA2MDAwMCk7CitzdGF0aWMgaW50CitscGZjX21heF9zY3NpY21wbF90aW1lX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCAqbmV4dF9uZGxwOworCisJaWYgKHZhbCA9PSB2cG9ydC0+Y2ZnX21heF9zY3NpY21wbF90aW1lKQorCQlyZXR1cm4gMDsKKwlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiA2MDAwMCkpCisJCXJldHVybiAtRUlOVkFMOworCXZwb3J0LT5jZmdfbWF4X3Njc2ljbXBsX3RpbWUgPSB2YWw7CisKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCisJCQljb250aW51ZTsKKwkJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1VOVVNFRF9OT0RFKQorCQkJY29udGludWU7CisJCW5kbHAtPmNtZF9xZGVwdGggPSBMUEZDX01BWF9UR1RfUURFUFRIOworCX0KKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJcmV0dXJuIDA7Cit9CitscGZjX3Zwb3J0X3BhcmFtX3N0b3JlKG1heF9zY3NpY21wbF90aW1lKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX21heF9zY3NpY21wbF90aW1lLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgbHBmY19tYXhfc2NzaWNtcGxfdGltZV9zaG93LAorCQkgICBscGZjX21heF9zY3NpY21wbF90aW1lX3N0b3JlKTsKKworLyoKICMgbHBmY19hY2swOiBVc2UgQUNLMCwgaW5zdGVhZCBvZiBBQ0sxIGZvciBjbGFzcyAyIGFja25vd2xlZGdlbWVudC4gVmFsdWUKICMgcmFuZ2UgaXMgWzAsMV0uIERlZmF1bHQgdmFsdWUgaXMgMC4KICovCkBAIC0xNjIzLDEyICsyNzQ0LDEyIEBACiAvKgogIyBscGZjX3VzZV9tc2k6IFVzZSBNU0kgKE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cykgaW4gc3lzdGVtcyB0aGF0CiAjCQlzdXBwb3J0IHRoaXMgZmVhdHVyZQotIyAgICAgICAwICA9IE1TSSBkaXNhYmxlZCAoZGVmYXVsdCkKKyMgICAgICAgMCAgPSBNU0kgZGlzYWJsZWQKICMgICAgICAgMSAgPSBNU0kgZW5hYmxlZAotIwkyICA9IE1TSS1YIGVuYWJsZWQKLSMgVmFsdWUgcmFuZ2UgaXMgWzAsMl0uIERlZmF1bHQgdmFsdWUgaXMgMC4KKyMgICAgICAgMiAgPSBNU0ktWCBlbmFibGVkIChkZWZhdWx0KQorIyBWYWx1ZSByYW5nZSBpcyBbMCwyXS4gRGVmYXVsdCB2YWx1ZSBpcyAyLgogKi8KLUxQRkNfQVRUUl9SKHVzZV9tc2ksIDAsIDAsIDIsICJVc2UgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzICgxKSBvciAiCitMUEZDX0FUVFJfUih1c2VfbXNpLCAyLCAwLCAyLCAiVXNlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoMSkgb3IgIgogCSAgICAiTVNJLVggKDIpLCBpZiBwb3NzaWJsZSIpOwogCiAvKgpAQCAtMTY2OCw2ICsyNzg5LDcgQEAKIAkmZGV2X2F0dHJfb3B0aW9uX3JvbV92ZXJzaW9uLAogCSZkZXZfYXR0cl9saW5rX3N0YXRlLAogCSZkZXZfYXR0cl9udW1fZGlzY292ZXJlZF9wb3J0cywKKwkmZGV2X2F0dHJfbWVubG9fbWdtdF9tb2RlLAogCSZkZXZfYXR0cl9scGZjX2RydnJfdmVyc2lvbiwKIAkmZGV2X2F0dHJfbHBmY190ZW1wX3NlbnNvciwKIAkmZGV2X2F0dHJfbHBmY19sb2dfdmVyYm9zZSwKQEAgLTE3MDksNiArMjgzMSw4IEBACiAJJmRldl9hdHRyX2xwZmNfZW5hYmxlX2hiYV9yZXNldCwKIAkmZGV2X2F0dHJfbHBmY19lbmFibGVfaGJhX2hlYXJ0YmVhdCwKIAkmZGV2X2F0dHJfbHBmY19zZ19zZWdfY250LAorCSZkZXZfYXR0cl9scGZjX21heF9zY3NpY21wbF90aW1lLAorCSZkZXZfYXR0cl9scGZjX3N0YXRfZGF0YV9jdHJsLAogCU5VTEwsCiB9OwogCkBAIC0xNzMxLDkgKzI4NTUsMjkgQEAKIAkmZGV2X2F0dHJfbnBvcnRfZXZ0X2NudCwKIAkmZGV2X2F0dHJfbnBpdl9pbmZvLAogCSZkZXZfYXR0cl9scGZjX2VuYWJsZV9kYV9pZCwKKwkmZGV2X2F0dHJfbHBmY19tYXhfc2NzaWNtcGxfdGltZSwKKwkmZGV2X2F0dHJfbHBmY19zdGF0X2RhdGFfY3RybCwKIAlOVUxMLAogfTsKIAorLyoqCisgKiBzeXNmc19jdGxyZWdfd3JpdGU6IFdyaXRlIG1ldGhvZCBmb3Igd3JpdGluZyB0byBjdGxyZWcuCisgKiBAa29iajoga2VybmVsIGtvYmplY3QgdGhhdCBjb250YWlucyB0aGUga2VybmVsIGNsYXNzIGRldmljZS4KKyAqIEBiaW5fYXR0cjoga2VybmVsIGF0dHJpYnV0ZXMgcGFzc2VkIHRvIHVzLgorICogQGJ1ZjogY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgYWRhcHRlciBJT1JFRyBzcGFjZS4KKyAqIEBvZmY6IG9mZnNldCBpbnRvIGJ1ZmZlciB0byBiZWdpbm5pbmcgb2YgZGF0YS4KKyAqIEBjb3VudDogYnl0ZXMgdG8gdHJhbnNmZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBBY2Nlc3NlZCB2aWEgL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdHh4eC9jdGxyZWcuCisgKiBVc2VzIHRoZSBhZGFwdGVyIGlvIGNvbnRyb2wgcmVnaXN0ZXJzIHRvIHNlbmQgYnVmIGNvbnRlbnRzIHRvIHRoZSBhZGFwdGVyLgorICoKKyAqIFJldHVybnM6CisgKiAtRVJBTkdFIG9mZiBhbmQgY291bnQgY29tYm8gb3V0IG9mIHJhbmdlCisgKiAtRUlOVkFMIG9mZiwgY291bnQgb3IgYnVmZiBhZGRyZXNzIGludmFsaWQKKyAqIC1FUEVSTSBhZGFwdGVyIGlzIG9mZmxpbmUKKyAqIHZhbHVlIG9mIGNvdW50LCBidWYgY29udGVudHMgd3JpdHRlbgorICoqLwogc3RhdGljIHNzaXplX3QKIHN5c2ZzX2N0bHJlZ193cml0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQkgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKQEAgLTE3NjYsNiArMjkxMCwyMyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorLyoqCisgKiBzeXNmc19jdGxyZWdfcmVhZDogUmVhZCBtZXRob2QgZm9yIHJlYWRpbmcgZnJvbSBjdGxyZWcuCisgKiBAa29iajoga2VybmVsIGtvYmplY3QgdGhhdCBjb250YWlucyB0aGUga2VybmVsIGNsYXNzIGRldmljZS4KKyAqIEBiaW5fYXR0cjoga2VybmVsIGF0dHJpYnV0ZXMgcGFzc2VkIHRvIHVzLgorICogQGJ1ZjogaWYgc3VjY2VzZnVsIGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhlIGFkYXB0ZXIgSU9SRUcgc3BhY2UuCisgKiBAb2ZmOiBvZmZzZXQgaW50byBidWZmZXIgdG8gYmVnaW5uaW5nIG9mIGRhdGEuCisgKiBAY291bnQ6IGJ5dGVzIHRvIHRyYW5zZmVyLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQWNjZXNzZWQgdmlhIC9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3R4eHgvY3RscmVnLgorICogVXNlcyB0aGUgYWRhcHRlciBpbyBjb250cm9sIHJlZ2lzdGVycyB0byByZWFkIGRhdGEgaW50byBidWYuCisgKgorICogUmV0dXJuczoKKyAqIC1FUkFOR0Ugb2ZmIGFuZCBjb3VudCBjb21ibyBvdXQgb2YgcmFuZ2UKKyAqIC1FSU5WQUwgb2ZmLCBjb3VudCBvciBidWZmIGFkZHJlc3MgaW52YWxpZAorICogdmFsdWUgb2YgY291bnQsIGJ1ZiBjb250ZW50cyByZWFkCisgKiovCiBzdGF0aWMgc3NpemVfdAogc3lzZnNfY3RscmVnX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKQEAgLTE4MTAsNyArMjk3MSwxMCBAQAogCS53cml0ZSA9IHN5c2ZzX2N0bHJlZ193cml0ZSwKIH07CiAKLQorLyoqCisgKiBzeXNmc19tYm94X2lkbGU6IGZyZWVzIHRoZSBzeXNmcyBtYWlsYm94LgorICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIKKyAqKi8KIHN0YXRpYyB2b2lkCiBzeXNmc19tYm94X2lkbGUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTgyNCw2ICsyOTg4LDI3IEBACiAJfQogfQogCisvKioKKyAqIHN5c2ZzX21ib3hfd3JpdGU6IFdyaXRlIG1ldGhvZCBmb3Igd3JpdGluZyBpbmZvcm1hdGlvbiB2aWEgbWJveC4KKyAqIEBrb2JqOiBrZXJuZWwga29iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBrZXJuZWwgY2xhc3MgZGV2aWNlLgorICogQGJpbl9hdHRyOiBrZXJuZWwgYXR0cmlidXRlcyBwYXNzZWQgdG8gdXMuCisgKiBAYnVmOiBjb250YWlucyB0aGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHN5c2ZzIG1ib3guCisgKiBAb2ZmOiBvZmZzZXQgaW50byBidWZmZXIgdG8gYmVnaW5uaW5nIG9mIGRhdGEuCisgKiBAY291bnQ6IGJ5dGVzIHRvIHRyYW5zZmVyLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQWNjZXNzZWQgdmlhIC9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3R4eHgvbWJveC4KKyAqIFVzZXMgdGhlIHN5c2ZzIG1ib3ggdG8gc2VuZCBidWYgY29udGVudHMgdG8gdGhlIGFkYXB0ZXIuCisgKgorICogUmV0dXJuczoKKyAqIC1FUkFOR0Ugb2ZmIGFuZCBjb3VudCBjb21ibyBvdXQgb2YgcmFuZ2UKKyAqIC1FSU5WQUwgb2ZmLCBjb3VudCBvciBidWZmIGFkZHJlc3MgaW52YWxpZAorICogemVybyBpZiBjb3VudCBpcyB6ZXJvCisgKiAtRVBFUk0gYWRhcHRlciBpcyBvZmZsaW5lCisgKiAtRU5PTUVNIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBtYWlsIGJveAorICogLUVBR0FJTiBvZmZzZXQsIHN0YXRlIG9yIG1ib3ggaXMgTlVMTAorICogY291bnQgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkCisgKiovCiBzdGF0aWMgc3NpemVfdAogc3lzZnNfbWJveF93cml0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQkgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCkBAIC0xODc4LDYgKzMwNjMsMjkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKKy8qKgorICogc3lzZnNfbWJveF9yZWFkOiBSZWFkIG1ldGhvZCBmb3IgcmVhZGluZyBpbmZvcm1hdGlvbiB2aWEgbWJveC4KKyAqIEBrb2JqOiBrZXJuZWwga29iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBrZXJuZWwgY2xhc3MgZGV2aWNlLgorICogQGJpbl9hdHRyOiBrZXJuZWwgYXR0cmlidXRlcyBwYXNzZWQgdG8gdXMuCisgKiBAYnVmOiBjb250YWlucyB0aGUgZGF0YSB0byBiZSByZWFkIGZyb20gc3lzZnMgbWJveC4KKyAqIEBvZmY6IG9mZnNldCBpbnRvIGJ1ZmZlciB0byBiZWdpbm5pbmcgb2YgZGF0YS4KKyAqIEBjb3VudDogYnl0ZXMgdG8gdHJhbnNmZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBBY2Nlc3NlZCB2aWEgL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdHh4eC9tYm94LgorICogVXNlcyB0aGUgc3lzZnMgbWJveCB0byByZWNlaXZlIGRhdGEgZnJvbSB0byB0aGUgYWRhcHRlci4KKyAqCisgKiBSZXR1cm5zOgorICogLUVSQU5HRSBvZmYgZ3JlYXRlciB0aGFuIG1haWxib3ggY29tbWFuZCBzaXplCisgKiAtRUlOVkFMIG9mZiwgY291bnQgb3IgYnVmZiBhZGRyZXNzIGludmFsaWQKKyAqIHplcm8gaWYgb2ZmIGFuZCBjb3VudCBhcmUgemVybworICogLUVBQ0NFUyBhZGFwdGVyIG92ZXIgdGVtcAorICogLUVQRVJNIGdhcmJhZ2UgY2FuIHZhbHVlIHRvIGNhdGNoIGEgbXVsdGl0dWRlIG9mIGVycm9ycworICogLUVBR0FJTiBtYW5hZ2VtZW50IElPIG5vdCBwZXJtaXR0ZWQsIHN0YXRlIG9yIG9mZiBlcnJvcgorICogLUVUSU1FIG1haWxib3ggdGltZW91dAorICogLUVOT0RFViBtYWlsYm94IGVycm9yCisgKiBjb3VudCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBzeXNmc19tYm94X3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCkBAIC0xOTU0LDYgKzMxNjIsOCBAQAogCQljYXNlIE1CWF9ERUxfTERfRU5UUlk6CiAJCWNhc2UgTUJYX1NFVF9WQVJJQUJMRToKIAkJY2FzZSBNQlhfV1JJVEVfV1dOOgorCQljYXNlIE1CWF9QT1JUX0NBUEFCSUxJVElFUzoKKwkJY2FzZSBNQlhfUE9SVF9JT1ZfQ09OVFJPTDoKIAkJCWJyZWFrOwogCQljYXNlIE1CWF9SRUFEX1NQQVJNNjQ6CiAJCWNhc2UgTUJYX1JFQURfTEE6CkBAIC0xOTc4LDE3ICszMTg4LDE1IEBACiAJCS8qIElmIEhCQSBlbmNvdW50ZXJlZCBhbiBlcnJvciBhdHRlbnRpb24sIGFsbG93IG9ubHkgRFVNUAogCQkgKiBvciBSRVNUQVJUIG1haWxib3ggY29tbWFuZHMgdW50aWwgdGhlIEhCQSBpcyByZXN0YXJ0ZWQuCiAJCSAqLwotCQlpZiAoKHBoYmEtPnBwb3J0LT5zdG9wcGVkKSAmJgotCQkJKHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPQotCQkJCU1CWF9EVU1QX01FTU9SWSAmJgotCQkJIHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPQotCQkJCU1CWF9SRVNUQVJUICYmCi0JCQkgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kICE9Ci0JCQkJTUJYX1dSSVRFX1ZQQVJNUykpIHsKLQkJCXN5c2ZzX21ib3hfaWRsZShwaGJhKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9CisJCWlmIChwaGJhLT5wcG9ydC0+c3RvcHBlZCAmJgorCQkgICAgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kICE9IE1CWF9EVU1QX01FTU9SWSAmJgorCQkgICAgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kICE9IE1CWF9SRVNUQVJUICYmCisJCSAgICBwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0gTUJYX1dSSVRFX1ZQQVJNUyAmJgorCQkgICAgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kICE9IE1CWF9XUklURV9XV04pCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTUJPWCwKKwkJCQkJIjEyNTkgbWJveDogSXNzdWVkIG1haWxib3ggY21kICIKKwkJCQkJIjB4JXggd2hpbGUgaW4gc3RvcHBlZCBzdGF0ZS5cbiIsCisJCQkJCXBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCk7CiAKIAkJcGhiYS0+c3lzZnNfbWJveC5tYm94LT52cG9ydCA9IHZwb3J0OwogCkBAIC0yMDU5LDYgKzMyNjcsMTQgQEAKIAkud3JpdGUgPSBzeXNmc19tYm94X3dyaXRlLAogfTsKIAorLyoqCisgKiBscGZjX2FsbG9jX3N5c2ZzX2F0dHI6IENyZWF0ZXMgdGhlIGN0bHJlZyBhbmQgbWJveCBlbnRyaWVzLgorICogQHZwb3J0OiBhZGRyZXNzIG9mIGxwZmMgdnBvcnQgc3RydWN0dXJlLgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqIHplcm8gb24gc3VjY2VzcworICogZXJyb3IgcmV0dXJuIGNvZGUgZnJvbSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoKQorICoqLwogaW50CiBscGZjX2FsbG9jX3N5c2ZzX2F0dHIoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMjA3NSwxOCArMzI5MSwzMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfcmVtb3ZlX2N0bHJlZ19hdHRyOwogCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYua29iaiwKKwkJCQkgICAgICAmc3lzZnNfZHJ2cl9zdGF0X2RhdGFfYXR0cik7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yZW1vdmVfbWJveF9hdHRyOworCiAJcmV0dXJuIDA7CitvdXRfcmVtb3ZlX21ib3hfYXR0cjoKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYua29iaiwgJnN5c2ZzX21ib3hfYXR0cik7CiBvdXRfcmVtb3ZlX2N0bHJlZ19hdHRyOgogCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLCAmc3lzZnNfY3RscmVnX2F0dHIpOwogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIAorLyoqCisgKiBscGZjX2ZyZWVfc3lzZnNfYXR0cjogUmVtb3ZlcyB0aGUgY3RscmVnIGFuZCBtYm94IGVudHJpZXMuCisgKiBAdnBvcnQ6IGFkZHJlc3Mgb2YgbHBmYyB2cG9ydCBzdHJ1Y3R1cmUuCisgKiovCiB2b2lkCiBscGZjX2ZyZWVfc3lzZnNfYXR0cihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOwotCisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LmtvYmosCisJCSZzeXNmc19kcnZyX3N0YXRfZGF0YV9hdHRyKTsKIAlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYua29iaiwgJnN5c2ZzX21ib3hfYXR0cik7CiAJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LmtvYmosICZzeXNmc19jdGxyZWdfYXR0cik7CiB9CkBAIC0yMDk2LDYgKzMzMjQsMTAgQEAKICAqIER5bmFtaWMgRkMgSG9zdCBBdHRyaWJ1dGVzIFN1cHBvcnQKICAqLwogCisvKioKKyAqIGxwZmNfZ2V0X2hvc3RfcG9ydF9pZDogQ29weSB0aGUgdnBvcnQgRElEIGludG8gdGhlIHNjc2kgaG9zdCBwb3J0IGlkLgorICogQHNob3N0OiBrZXJuZWwgc2NzaSBob3N0IHBvaW50ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaG9zdF9wb3J0X2lkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMjEwNSw2ICszMzM3LDEwIEBACiAJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9IHZwb3J0LT5mY19teURJRDsKIH0KIAorLyoqCisgKiBscGZjX2dldF9ob3N0X3BvcnRfdHlwZTogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgc2NzaSBob3N0IHBvcnQgdHlwZS4KKyAqIEBzaG9zdDoga2VybmVsIHNjc2kgaG9zdCBwb2ludGVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hvc3RfcG9ydF90eXBlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMjEzMyw2ICszMzY5LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X2hvc3RfcG9ydF9zdGF0ZTogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgc2NzaSBob3N0IHBvcnQgc3RhdGUuCisgKiBAc2hvc3Q6IGtlcm5lbCBzY3NpIGhvc3QgcG9pbnRlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9ob3N0X3BvcnRfc3RhdGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0yMTY3LDYgKzM0MDcsMTAgQEAKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiB9CiAKKy8qKgorICogbHBmY19nZXRfaG9zdF9zcGVlZDogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgc2NzaSBob3N0IHNwZWVkLgorICogQHNob3N0OiBrZXJuZWwgc2NzaSBob3N0IHBvaW50ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaG9zdF9zcGVlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTIxOTksNiArMzQ0MywxMCBAQAogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIH0KIAorLyoqCisgKiBscGZjX2dldF9ob3N0X2ZhYnJpY19uYW1lOiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBzY3NpIGhvc3QgZmFicmljIG5hbWUuCisgKiBAc2hvc3Q6IGtlcm5lbCBzY3NpIGhvc3QgcG9pbnRlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9ob3N0X2ZhYnJpY19uYW1lIChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTIyMjEsNiArMzQ2OSwxOCBAQAogCWZjX2hvc3RfZmFicmljX25hbWUoc2hvc3QpID0gbm9kZV9uYW1lOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X3N0YXRzOiBSZXR1cm4gc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFkYXB0ZXIuCisgKiBAc2hvc3Q6IGtlcm5lbCBzY3NpIGhvc3QgcG9pbnRlci4KKyAqCisgKiBOb3RlczoKKyAqIE5VTEwgb24gZXJyb3IgZm9yIGxpbmsgZG93biwgbm8gbWJveCBwb29sLCBzbGkyIGFjdGl2ZSwKKyAqIG1hbmFnZW1lbnQgbm90IGFsbG93ZWQsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLCBvciBtYm94IGVycm9yLgorICoKKyAqIFJldHVybnM6CisgKiBOVUxMIGZvciBlcnJvcgorICogYWRkcmVzcyBvZiB0aGUgYWRhcHRlciBob3N0IHN0YXRpc3RpY3MKKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICoKIGxwZmNfZ2V0X3N0YXRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMjMzNCw2ICszNTk0LDEwIEBACiAJcmV0dXJuIGhzOwogfQogCisvKioKKyAqIGxwZmNfcmVzZXRfc3RhdHM6IENvcHkgdGhlIGFkYXB0ZXIgbGluayBzdGF0cyBpbmZvcm1hdGlvbi4KKyAqIEBzaG9zdDoga2VybmVsIHNjc2kgaG9zdCBwb2ludGVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfcmVzZXRfc3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0yNDExLDYgKzM2NzUsMTQgQEAKICAqIGFyZSBubyBzeXNmcyBoYW5kbGVycyBmb3IgbGlua19kb3duX3Rtby4KICAqLwogCisvKioKKyAqIGxwZmNfZ2V0X25vZGVfYnlfdGFyZ2V0OiBSZXR1cm4gdGhlIG5vZGVsaXN0IGZvciBhIHRhcmdldC4KKyAqIEBzdGFyZ2V0OiBrZXJuZWwgc2NzaSB0YXJnZXQgcG9pbnRlci4KKyAqCisgKiBSZXR1cm5zOgorICogYWRkcmVzcyBvZiB0aGUgbm9kZSBsaXN0IGlmIGZvdW5kCisgKiBOVUxMIHRhcmdldCBub3QgZm91bmQKKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqCiBscGZjX2dldF9ub2RlX2J5X3RhcmdldChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7CkBAIC0yNDMyLDYgKzM3MDQsMTAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBscGZjX2dldF9zdGFyZ2V0X3BvcnRfaWQ6IFNldCB0aGUgdGFyZ2V0IHBvcnQgaWQgdG8gdGhlIG5kbHAgRElEIG9yIC0xLgorICogQHN0YXJnZXQ6IGtlcm5lbCBzY3NpIHRhcmdldCBwb2ludGVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X3N0YXJnZXRfcG9ydF9pZChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7CkBAIC0yNDQwLDYgKzM3MTYsMTIgQEAKIAlmY19zdGFyZ2V0X3BvcnRfaWQoc3RhcmdldCkgPSBuZGxwID8gbmRscC0+bmxwX0RJRCA6IC0xOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X3N0YXJnZXRfbm9kZV9uYW1lOiBTZXQgdGhlIHRhcmdldCBub2RlIG5hbWUuCisgKiBAc3RhcmdldDoga2VybmVsIHNjc2kgdGFyZ2V0IHBvaW50ZXIuCisgKgorICogRGVzY3JpcHRpb246IFNldCB0aGUgdGFyZ2V0IG5vZGUgbmFtZSB0byB0aGUgbmRscCBub2RlIG5hbWUgd3duIG9yIHplcm8uCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfc3RhcmdldF9ub2RlX25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewpAQCAtMjQ0OSw2ICszNzMxLDEyIEBACiAJCW5kbHAgPyB3d25fdG9fdTY0KG5kbHAtPm5scF9ub2RlbmFtZS51Lnd3bikgOiAwOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X3N0YXJnZXRfcG9ydF9uYW1lOiBTZXQgdGhlIHRhcmdldCBwb3J0IG5hbWUuCisgKiBAc3RhcmdldDoga2VybmVsIHNjc2kgdGFyZ2V0IHBvaW50ZXIuCisgKgorICogRGVzY3JpcHRpb246ICBzZXQgdGhlIHRhcmdldCBwb3J0IG5hbWUgdG8gdGhlIG5kbHAgcG9ydCBuYW1lIHd3biBvciB6ZXJvLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKQEAgLTI0NTgsNiArMzc0NiwxNSBAQAogCQluZGxwID8gd3duX3RvX3U2NChuZGxwLT5ubHBfcG9ydG5hbWUudS53d24pIDogMDsKIH0KIAorLyoqCisgKiBscGZjX3NldF9ycG9ydF9sb3NzX3RtbzogU2V0IHRoZSBycG9ydCBkZXYgbG9zcyB0bW8uCisgKiBAcnBvcnQ6IGZjIHJwb3J0IGFkZHJlc3MuCisgKiBAdGltZW91dDogbmV3IHZhbHVlIGZvciBkZXYgbG9zcyB0bW8uCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB0aW1lb3V0IGlzIG5vbiB6ZXJvIHNldCB0aGUgZGV2X2xvc3NfdG1vIHRvIHRpbWVvdXQsIGVsc2Ugc2V0CisgKiBkZXZfbG9zc190bW8gdG8gb25lLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2V0X3Jwb3J0X2xvc3NfdG1vKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsIHVpbnQzMl90IHRpbWVvdXQpCiB7CkBAIC0yNDY3LDcgKzM3NjQsMTggQEAKIAkJcnBvcnQtPmRldl9sb3NzX3RtbyA9IDE7CiB9CiAKLQorLyoqCisgKiBscGZjX3Jwb3J0X3Nob3dfZnVuY3Rpb246IFJldHVybiBycG9ydCB0YXJnZXQgaW5mb3JtYXRpb24uCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IHVzZXMgZmllbGQgdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfc2hvd19ycG9ydF8KKyAqCisgKiBscGZjX3Nob3dfcnBvcnRfIyNmaWVsZDogcmV0dXJucyB0aGUgYnl0ZXMgZm9ybWF0dGVkIGluIGJ1ZgorICogQGNkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhbiBmY19ycG9ydC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgdGFyZ2V0X2ZpZWxkIG9yIHplcm8uCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogI2RlZmluZSBscGZjX3Jwb3J0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCBjYXN0KQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAogbHBmY19zaG93X3Jwb3J0XyMjZmllbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXApAQCAtMjYwMiw2ICszOTEwLDEwIEBACiAJLnZwb3J0X2Rpc2FibGUgPSBscGZjX3Zwb3J0X2Rpc2FibGUsCiB9OwogCisvKioKKyAqIGxwZmNfZ2V0X2NmZ3BhcmFtOiBVc2VkIGR1cmluZyBwcm9iZV9vbmUgdG8gaW5pdCB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KKyAqKi8KIHZvaWQKIGxwZmNfZ2V0X2NmZ3BhcmFtKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTI2MzcsNiArMzk0OSwxMCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2dldF92cG9ydF9jZmdwYXJhbTogVXNlZCBkdXJpbmcgcG9ydCBjcmVhdGUsIGluaXQgdGhlIHZwb3J0IHN0cnVjdHVyZS4KKyAqIEB2cG9ydDogbHBmY192cG9ydCBwb2ludGVyLgorICoqLwogdm9pZAogbHBmY19nZXRfdnBvcnRfY2ZncGFyYW0oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMjY0OCw2ICszOTY0LDcgQEAKIAlscGZjX3Jlc3RyaWN0X2xvZ2luX2luaXQodnBvcnQsIGxwZmNfcmVzdHJpY3RfbG9naW4pOwogCWxwZmNfZmNwX2NsYXNzX2luaXQodnBvcnQsIGxwZmNfZmNwX2NsYXNzKTsKIAlscGZjX3VzZV9hZGlzY19pbml0KHZwb3J0LCBscGZjX3VzZV9hZGlzYyk7CisJbHBmY19tYXhfc2NzaWNtcGxfdGltZV9pbml0KHZwb3J0LCBscGZjX21heF9zY3NpY21wbF90aW1lKTsKIAlscGZjX2ZkbWlfb25faW5pdCh2cG9ydCwgbHBmY19mZG1pX29uKTsKIAlscGZjX2Rpc2NvdmVyeV90aHJlYWRzX2luaXQodnBvcnQsIGxwZmNfZGlzY292ZXJ5X3RocmVhZHMpOwogCWxwZmNfbWF4X2x1bnNfaW5pdCh2cG9ydCwgbHBmY19tYXhfbHVucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IDFiODI0NTIuLjA0NGVmNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXR5cGVkZWYgaW50ICgqbm9kZV9maWx0ZXIpKHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCB2b2lkICpwYXJhbSk7Cit0eXBlZGVmIGludCAoKm5vZGVfZmlsdGVyKShzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCB2b2lkICopOwogCiBzdHJ1Y3QgZmNfcnBvcnQ7CiB2b2lkIGxwZmNfZHVtcF9tZW0oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MTZfdCk7CkBAIC0yNiwxMSArMjYsMTEgQEAKIHZvaWQgbHBmY19jb25maWdfYXN5bmMoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCk7CiAKIHZvaWQgbHBmY19oZWFydF9iZWF0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Ci1pbnQgbHBmY19yZWFkX2xhKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYiwKLQkJIHN0cnVjdCBscGZjX2RtYWJ1ZiAqbXApOworaW50IGxwZmNfcmVhZF9sYShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHN0cnVjdCBscGZjX2RtYWJ1ZiAqKTsKIHZvaWQgbHBmY19jbGVhcl9sYShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwotdm9pZCBscGZjX2lzc3VlX2NsZWFyX2xhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KTsKK3ZvaWQgbHBmY19pc3N1ZV9jbGVhcl9sYShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfY29uZmlnX2xpbmsoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKK2ludCBscGZjX2NvbmZpZ19tc2koc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIGludCBscGZjX3JlYWRfc3BhcmFtKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgaW50KTsKIHZvaWQgbHBmY19yZWFkX2NvbmZpZyhzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX3JlYWRfbG5rX3N0YXQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKQEAgLTQzLDcgKzQzLDcgQEAKIHZvaWQgbHBmY19pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogCiBzdHJ1Y3QgbHBmY192cG9ydCAqbHBmY19maW5kX3Zwb3J0X2J5X2RpZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QpOwotdm9pZCBscGZjX2NsZWFudXBfcnBpcyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCByZW1vdmUpOwordm9pZCBscGZjX2NsZWFudXBfcnBpcyhzdHJ1Y3QgbHBmY192cG9ydCAqLCBpbnQpOwogaW50IGxwZmNfbGlua2Rvd24oc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3BvcnRfbGlua19mYWlsdXJlKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX21ieF9jbXBsX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogaW50IGxwZmNfbnNfY21kKHN0cnVjdCBscGZjX3Zwb3J0ICosIGludCwgdWludDhfdCwgdWludDMyX3QpOwogaW50IGxwZmNfZmRtaV9jbWQoc3RydWN0IGxwZmNfdnBvcnQgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwgaW50KTsKIHZvaWQgbHBmY19mZG1pX3Rtbyh1bnNpZ25lZCBsb25nKTsKLXZvaWQgbHBmY19mZG1pX3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpOwordm9pZCBscGZjX2ZkbWlfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogCiBpbnQgbHBmY19jb25maWdfcG9ydF9wcmVwKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX2NvbmZpZ19wb3J0X3Bvc3Qoc3RydWN0IGxwZmNfaGJhICopOwpAQCAtMTU1LDYgKzE1NSw4IEBACiB2b2lkIGxwZmNfaGFuZGxlX2VyYXR0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19oYW5kbGVfbGF0dChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpcnFyZXR1cm5fdCBscGZjX2ludHJfaGFuZGxlcihpbnQsIHZvaWQgKik7CitpcnFyZXR1cm5fdCBscGZjX3NwX2ludHJfaGFuZGxlcihpbnQsIHZvaWQgKik7CitpcnFyZXR1cm5fdCBscGZjX2ZwX2ludHJfaGFuZGxlcihpbnQsIHZvaWQgKik7CiAKIHZvaWQgbHBmY19yZWFkX3JldihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX2NvbmZpZ19yaW5nKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQsIExQRkNfTUJPWFFfdCAqKTsKQEAgLTE3NSwxMSArMTc3LDEyIEBACiB2b2lkIGxwZmNfc3RvcF92cG9ydF90aW1lcnMoc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKIHZvaWQgbHBmY19wb2xsX3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpOwotdm9pZCBscGZjX3BvbGxfc3RhcnRfdGltZXIoc3RydWN0IGxwZmNfaGJhICogcGhiYSk7Ci12b2lkIGxwZmNfc2xpX3BvbGxfZmNwX3Jpbmcoc3RydWN0IGxwZmNfaGJhICogaGJhKTsKK3ZvaWQgbHBmY19wb2xsX3N0YXJ0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19wb2xsX2VyYXR0KHVuc2lnbmVkIGxvbmcpOwordm9pZCBscGZjX3NsaV9wb2xsX2ZjcF9yaW5nKHN0cnVjdCBscGZjX2hiYSAqKTsKIHN0cnVjdCBscGZjX2lvY2JxICogbHBmY19zbGlfZ2V0X2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqKTsKLXZvaWQgbHBmY19zbGlfcmVsZWFzZV9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqIGlvY2IpOwotdWludDE2X3QgbHBmY19zbGlfbmV4dF9pb3RhZyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqIGlvY2IpOwordm9pZCBscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19pb2NicSAqKTsKK3VpbnQxNl90IGxwZmNfc2xpX25leHRfaW90YWcoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX2lvY2JxICopOwogCiB2b2lkIGxwZmNfcmVzZXRfYmFycmllcihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKTsKIGludCBscGZjX3NsaV9icmRyZWFkeShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QpOwpAQCAtMTg3LDExICsxOTAsMTMgQEAKIGludCBscGZjX3NsaV9icmRyZXNldChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfYnJkcmVzdGFydChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfaGJhX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqKTsKK2ludCBscGZjX3NsaV9jb25maWdfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgaW50KTsKIGludCBscGZjX3NsaV9ob3N0X2Rvd24oc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgbHBmY19zbGlfaGJhX2Rvd24oc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpX2lzc3VlX21ib3goc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCk7CiBpbnQgbHBmY19zbGlfaGFuZGxlX21iX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9mbHVzaF9tYm94X3F1ZXVlKHN0cnVjdCBscGZjX2hiYSAqKTsKK2ludCBscGZjX3NsaV9jaGVja19lcmF0dChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfaGFuZGxlX3Nsb3dfcmluZ19ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwKIAkJCQkgICAgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwgdWludDMyX3QpOwogdm9pZCBscGZjX3NsaV9kZWZfbWJveF9jbXBsKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CkBAIC0xOTksNiArMjA0LDcgQEAKIAkJCXN0cnVjdCBscGZjX2lvY2JxICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19zbGlfcGNpbWVtX2Jjb3B5KHZvaWQgKiwgdm9pZCAqLCB1aW50MzJfdCk7CiB2b2lkIGxwZmNfc2xpX2Fib3J0X2lvY2JfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKik7Cit2b2lkIGxwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5ncyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLAogCQkJICAgICBzdHJ1Y3QgbHBmY19kbWFidWYgKik7CiBzdHJ1Y3QgbHBmY19kbWFidWYgKmxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldChzdHJ1Y3QgbHBmY19oYmEgKiwKQEAgLTIyNiwxNyArMjMyLDEzIEBACiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19maW5kbm9kZV93d3BuKHN0cnVjdCBscGZjX3Zwb3J0ICosCiAJCQkJCSBzdHJ1Y3QgbHBmY19uYW1lICopOwogCi1pbnQgbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYm94cSwKLQkJCSAgICAgdWludDMyX3QgdGltZW91dCk7CitpbnQgbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QpOwogCi1pbnQgbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCi0JCQkgICAgIHN0cnVjdCBscGZjX3NsaV9yaW5nICogcHJpbmcsCi0JCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICogcGlvY2IsCi0JCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICogcHJzcGlvY2JxLAotCQkJICAgICB1aW50MzJfdCB0aW1lb3V0KTsKLXZvaWQgbHBmY19zbGlfYWJvcnRfZmNwX2NtcGwoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKLQkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLAotCQkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqIHJzcGlvY2IpOworaW50IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKKwkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKiwgc3RydWN0IGxwZmNfaW9jYnEgKiwKKwkJCSAgICAgdWludDMyX3QpOwordm9pZCBscGZjX3NsaV9hYm9ydF9mY3BfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfaW9jYnEgKiwKKwkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKik7CiAKIHZvaWQgbHBmY19zbGlfZnJlZV9oYnEoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBoYnFfZG1hYnVmICopOwogCkBAIC0yNjksNyArMjcxLDcgQEAKIAogc3RydWN0IGxwZmNfdnBvcnQgKmxwZmNfY3JlYXRlX3BvcnQoc3RydWN0IGxwZmNfaGJhICosIGludCwgc3RydWN0IGRldmljZSAqKTsKIGludCAgbHBmY192cG9ydF9kaXNhYmxlKHN0cnVjdCBmY192cG9ydCAqZmNfdnBvcnQsIGJvb2wgZGlzYWJsZSk7Ci12b2lkIGxwZmNfbWJ4X3VucmVnX3ZwaShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKK2ludCBscGZjX21ieF91bnJlZ192cGkoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGRlc3Ryb3lfcG9ydChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX2dldF9pbnN0YW5jZSh2b2lkKTsKIHZvaWQgbHBmY19ob3N0X2F0dHJpYl9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKik7CkBAIC0yOTAsNiArMjkyLDEzIEBACiB2b2lkIGxwZmNfYWRqdXN0X3F1ZXVlX2RlcHRoKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19yYW1wX2Rvd25fcXVldWVfaGFuZGxlcihzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfcmFtcF91cF9xdWV1ZV9oYW5kbGVyKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19zY3NpX2Rldl9ibG9jayhzdHJ1Y3QgbHBmY19oYmEgKik7CisKK3ZvaWQKK2xwZmNfc2VuZF9lbHNfZmFpbHVyZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfaW9jYnEgKiwKKwkJCQlzdHJ1Y3QgbHBmY19pb2NicSAqKTsKK3N0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqbHBmY19hbGxvY19mYXN0X2V2dChzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfZnJlZV9mYXN0X2V2dChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICopOwogCiAjZGVmaW5lIFNjc2lSZXN1bHQoaG9zdF9jb2RlLCBzY3NpX2NvZGUpICgoKGhvc3RfY29kZSkgPDwgMTYpIHwgc2NzaV9jb2RlKQogI2RlZmluZSBIQkFfRVZFTlRfUlNDTiAgICAgICAgICAgICAgICAgICA1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKaW5kZXggN2ZjNzRjZi4uMjZkYWU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTEzNCwyNSArMTM1LDI0IEBACiAJCX0KIAkJbGlzdF9kZWwoJmhlYWQpOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBscGZjX2lvY2JxICAqbmV4dDsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW9jYnEsIG5leHQsICZwaW9jYnEtPmxpc3QsIGxpc3QpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmhlYWQpOworCQlsaXN0X2FkZF90YWlsKCZoZWFkLCAmcGlvY2JxLT5saXN0KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2NicSwgJmhlYWQsIGxpc3QpIHsKIAkJCWljbWQgPSAmaW9jYnEtPmlvY2I7CiAJCQlpZiAoaWNtZC0+dWxwQmRlQ291bnQgPT0gMCkKLQkJCQlscGZjX2N0X3Vuc29sX2J1ZmZlcihwaGJhLCBwaW9jYnEsIE5VTEwsIDApOworCQkJCWxwZmNfY3RfdW5zb2xfYnVmZmVyKHBoYmEsIGlvY2JxLCBOVUxMLCAwKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBpY21kLT51bHBCZGVDb3VudDsgaSsrKSB7CiAJCQkJcGFkZHIgPSBnZXRQYWRkcihpY21kLT51bi5jb250NjRbaV0uYWRkckhpZ2gsCiAJCQkJCQkgaWNtZC0+dW4uY29udDY0W2ldLmFkZHJMb3cpOwogCQkJCW1wID0gbHBmY19zbGlfcmluZ3Bvc3RidWZfZ2V0KHBoYmEsIHByaW5nLAogCQkJCQkJCSAgICAgIHBhZGRyKTsKIAkJCQlzaXplID0gaWNtZC0+dW4uY29udDY0W2ldLnR1cy5mLmJkZVNpemU7Ci0JCQkJbHBmY19jdF91bnNvbF9idWZmZXIocGhiYSwgcGlvY2JxLCBtcCwgc2l6ZSk7CisJCQkJbHBmY19jdF91bnNvbF9idWZmZXIocGhiYSwgaW9jYnEsIG1wLCBzaXplKTsKIAkJCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsIG1wKTsKIAkJCX0KLQkJCWxpc3RfZGVsKCZpb2NicS0+bGlzdCk7Ci0JCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGlvY2JxKTsKIAkJCWxwZmNfcG9zdF9idWZmZXIocGhiYSwgcHJpbmcsIGkpOwogCQl9CisJCWxpc3RfZGVsKCZoZWFkKTsKIAl9CiB9CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQllbHNlCiAJCQlsaXN0X2FkZF90YWlsKCZtcC0+bGlzdCwgJm1saXN0LT5saXN0KTsKIAotCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9VU0VfUkNWOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NEk7CiAJCS8qIGJ1aWxkIGJ1ZmZlciBwdHIgbGlzdCBmb3IgSU9DQiAqLwogCQlicGwtPmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhtcC0+cGh5cykgKTsKIAkJYnBsLT5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChtcC0+cGh5cykgKTsKQEAgLTI4Myw3ICsyODMsNyBAQAogCWljbWQtPnVuLmdlbnJlcTY0LmJkbC51bHBJb1RhZzMyID0gMDsKIAlpY21kLT51bi5nZW5yZXE2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2goYm1wLT5waHlzKTsKIAlpY21kLT51bi5nZW5yZXE2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KGJtcC0+cGh5cyk7Ci0JaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JETDsKKwlpY21kLT51bi5nZW5yZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkxQXzY0OwogCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplID0gKG51bV9lbnRyeSAqIHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCkpOwogCiAJaWYgKHVzcl9mbGcpCkBAIC04NjEsNyArODYxLDcgQEAKIAogCQlyZXRyeSsrOwogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCi0JCQkJICIwMjE2IFJldHJ5aW5nIE5TIGNtZCAleFxuIiwgY21kY29kZSk7CisJCQkJICIwMjUwIFJldHJ5aW5nIE5TIGNtZCAleFxuIiwgY21kY29kZSk7CiAJCXJjID0gbHBmY19uc19jbWQodnBvcnQsIGNtZGNvZGUsIHJldHJ5LCAwKTsKIAkJaWYgKHJjID09IDApCiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKaW5kZXggMDk0YjQ3ZS4uNzcxOTIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC00NiwxMyArNDcsMTQgQEAKICNpbmNsdWRlICJscGZjX2RlYnVnZnMuaCIKIAogI2lmZGVmIENPTkZJR19MUEZDX0RFQlVHX0ZTCi0vKiBkZWJ1Z2ZzIGludGVyZmFjZQorLyoqCisgKiBkZWJ1Z2ZzIGludGVyZmFjZQogICoKICAqIFRvIGFjY2VzcyB0aGlzIGludGVyZmFjZSB0aGUgdXNlciBzaG91bGQ6CiAgKiAjIG1rZGlyIC9kZWJ1ZwogICogIyBtb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL2RlYnVnCiAgKgotICogVGhlIGxwZmMgZGVidWdmcyBkaXJlY3RvcnkgaGllcmFjaHkgaXM6CisgKiBUaGUgbHBmYyBkZWJ1Z2ZzIGRpcmVjdG9yeSBoaWVyYXJjaHkgaXM6CiAgKiBscGZjL2xwZmNYL3Zwb3J0WQogICogd2hlcmUgWCBpcyB0aGUgbHBmYyBoYmEgdW5pcXVlX2lkCiAgKiB3aGVyZSBZIGlzIHRoZSB2cG9ydCBWUEkgb24gdGhhdCBoYmEKQEAgLTYxLDE0ICs2MywyMSBAQAogICogZGlzY292ZXJ5X3RyYWNlCiAgKiBUaGlzIGlzIGFuIEFDU0lJIHJlYWRhYmxlIGZpbGUgdGhhdCBjb250YWlucyBhIHRyYWNlIG9mIHRoZSBsYXN0CiAgKiBscGZjX2RlYnVnZnNfbWF4X2Rpc2NfdHJjIGV2ZW50cyB0aGF0IGhhcHBlbmVkIG9uIGEgc3BlY2lmaWMgdnBvcnQuCi0gKiBTZWUgbHBmY19kZWJ1Z2ZzLmggZm9yIGRpZmZlcmVudCBjYXRlZ29yaWVzIG9mCi0gKiBkaXNjb3ZlcnkgZXZlbnRzLiBUbyBlbmFibGUgdGhlIGRpc2NvdmVyeSB0cmFjZSwgdGhlIGZvbGxvd2luZwotICogbW9kdWxlIHBhcmFtZXRlcnMgbXVzdCBiZSBzZXQ6CisgKiBTZWUgbHBmY19kZWJ1Z2ZzLmggZm9yIGRpZmZlcmVudCBjYXRlZ29yaWVzIG9mICBkaXNjb3ZlcnkgZXZlbnRzLgorICogVG8gZW5hYmxlIHRoZSBkaXNjb3ZlcnkgdHJhY2UsIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHBhcmFtZXRlcnMgbXVzdCBiZSBzZXQ6CiAgKiBscGZjX2RlYnVnZnNfZW5hYmxlPTEgICAgICAgICBUdXJucyBvbiBscGZjIGRlYnVnZnMgZmlsZXN5c3RlbSBzdXBwb3J0CiAgKiBscGZjX2RlYnVnZnNfbWF4X2Rpc2NfdHJjPVggICBXaGVyZSBYIGlzIHRoZSBldmVudCB0cmFjZSBkZXB0aCBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBQ0ggdnBvcnQuIFggTVVTVCBhbHNvIGJlIGEgcG93ZXIgb2YgMi4KICAqIGxwZmNfZGVidWdmc19tYXNrX2Rpc2NfdHJjPVkgIFdoZXJlIFkgaXMgYW4gZXZlbnQgbWFzayBhcyBkZWZpbmVkIGluCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscGZjX2RlYnVnZnMuaCAuCisgKgorICogc2xvd19yaW5nX3RyYWNlCisgKiBUaGlzIGlzIGFuIEFDU0lJIHJlYWRhYmxlIGZpbGUgdGhhdCBjb250YWlucyBhIHRyYWNlIG9mIHRoZSBsYXN0CisgKiBscGZjX2RlYnVnZnNfbWF4X3Nsb3dfcmluZ190cmMgZXZlbnRzIHRoYXQgaGFwcGVuZWQgb24gYSBzcGVjaWZpYyBIQkEuCisgKiBUbyBlbmFibGUgdGhlIHNsb3cgcmluZyB0cmFjZSwgdGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBtdXN0IGJlIHNldDoKKyAqIGxwZmNfZGVidWdmc19lbmFibGU9MSAgICAgICAgIFR1cm5zIG9uIGxwZmMgZGVidWdmcyBmaWxlc3lzdGVtIHN1cHBvcnQKKyAqIGxwZmNfZGVidWdmc19tYXhfc2xvd19yaW5nX3RyYz1YICAgV2hlcmUgWCBpcyB0aGUgZXZlbnQgdHJhY2UgZGVwdGggZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSEJBLiBYIE1VU1QgYWxzbyBiZSBhIHBvd2VyIG9mIDIuCiAgKi8KIHN0YXRpYyBpbnQgbHBmY19kZWJ1Z2ZzX2VuYWJsZSA9IDE7CiBtb2R1bGVfcGFyYW0obHBmY19kZWJ1Z2ZzX2VuYWJsZSwgaW50LCAwKTsKQEAgLTExNyw2ICsxMjYsMjUgQEAKIHN0YXRpYyBhdG9taWNfdCBscGZjX2RlYnVnZnNfc2VxX3RyY19jbnQgPSBBVE9NSUNfSU5JVCgwKTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxwZmNfZGVidWdmc19zdGFydF90aW1lID0gMEw7CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjX2RhdGEgLSBEdW1wIGRpc2NvdmVyeSBsb2dnaW5nIHRvIGEgYnVmZmVyLgorICogQHZwb3J0OiBUaGUgdnBvcnQgdG8gZ2F0aGVyIHRoZSBsb2cgaW5mbyBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBkdW1wIGxvZyBpbnRvLgorICogQHNpemU6IFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIHByb2Nlc3MuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZ2F0aGVycyB0aGUgbHBmYyBkaXNjb3ZlcnkgZGVidWdmcyBkYXRhIGZyb20gdGhlIEB2cG9ydCBhbmQKKyAqIGR1bXBzIGl0IHRvIEBidWYgdXAgdG8gQHNpemUgbnVtYmVyIG9mIGJ5dGVzLiBJdCB3aWxsIHN0YXJ0IGF0IHRoZSBuZXh0IGVudHJ5CisgKiBpbiB0aGUgbG9nIGFuZCBwcm9jZXNzIHRoZSBsb2cgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBUaGVuIGl0IHdpbGwKKyAqIGdhdGhlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvZyBhbmQgcHJvY2VzcyB1bnRpbCB0aGUgY3VycmVudCBlbnRyeS4KKyAqCisgKiBOb3RlczoKKyAqIERpc2NvdmVyeSBsb2dnaW5nIHdpbGwgYmUgZGlzYWJsZWQgd2hpbGUgd2hpbGUgdGhpcyByb3V0aW5lIGR1bXBzIHRoZSBsb2cuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZHVtcGVkIGludG8gQGJ1ZiBhbmQgd2lsbAorICogbm90IGV4Y2VlZCBAc2l6ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19kaXNjX3RyY19kYXRhKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTEyNSw3ICsxNTMsNiBAQAogCXN0cnVjdCBscGZjX2RlYnVnZnNfdHJjICpkdHA7CiAJY2hhciBidWZmZXJbTFBGQ19ERUJVR19UUkNfRU5UUllfU0laRV07CiAKLQogCWVuYWJsZSA9IGxwZmNfZGVidWdmc19lbmFibGU7CiAJbHBmY19kZWJ1Z2ZzX2VuYWJsZSA9IDA7CiAKQEAgLTE1OSw2ICsxODYsMjUgQEAKIAlyZXR1cm4gbGVuOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19zbG93X3JpbmdfdHJjX2RhdGEgLSBEdW1wIHNsb3cgcmluZyBsb2dnaW5nIHRvIGEgYnVmZmVyLgorICogQHBoYmE6IFRoZSBIQkEgdG8gZ2F0aGVyIHRoZSBsb2cgaW5mbyBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBkdW1wIGxvZyBpbnRvLgorICogQHNpemU6IFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIHByb2Nlc3MuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZ2F0aGVycyB0aGUgbHBmYyBzbG93IHJpbmcgZGVidWdmcyBkYXRhIGZyb20gdGhlIEBwaGJhIGFuZAorICogZHVtcHMgaXQgdG8gQGJ1ZiB1cCB0byBAc2l6ZSBudW1iZXIgb2YgYnl0ZXMuIEl0IHdpbGwgc3RhcnQgYXQgdGhlIG5leHQgZW50cnkKKyAqIGluIHRoZSBsb2cgYW5kIHByb2Nlc3MgdGhlIGxvZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFRoZW4gaXQgd2lsbAorICogZ2F0aGVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9nIGFuZCBwcm9jZXNzIHVudGlsIHRoZSBjdXJyZW50IGVudHJ5LgorICoKKyAqIE5vdGVzOgorICogU2xvdyByaW5nIGxvZ2dpbmcgd2lsbCBiZSBkaXNhYmxlZCB3aGlsZSB3aGlsZSB0aGlzIHJvdXRpbmUgZHVtcHMgdGhlIGxvZy4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkdW1wZWQgaW50byBAYnVmIGFuZCB3aWxsCisgKiBub3QgZXhjZWVkIEBzaXplLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX3Nsb3dfcmluZ190cmNfZGF0YShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC0yMDMsNiArMjQ5LDI1IEBACiAKIHN0YXRpYyBpbnQgbHBmY19kZWJ1Z2ZzX2xhc3RfaGJxID0gLTE7CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2hicWluZm9fZGF0YSAtIER1bXAgaG9zdCBidWZmZXIgcXVldWUgaW5mbyB0byBhIGJ1ZmZlci4KKyAqIEBwaGJhOiBUaGUgSEJBIHRvIGdhdGhlciBob3N0IGJ1ZmZlciBpbmZvIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGR1bXAgbG9nIGludG8uCisgKiBAc2l6ZTogVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gcHJvY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBkdW1wcyB0aGUgaG9zdCBidWZmZXIgcXVldWUgaW5mbyBmcm9tIHRoZSBAcGhiYSB0byBAYnVmIHVwIHRvCisgKiBAc2l6ZSBudW1iZXIgb2YgYnl0ZXMuIEEgaGVhZGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBjdXJyZW50IGhicSBzdGF0ZSB3aWxsIGJlCisgKiBkdW1wZWQgdG8gQGJ1ZiBmaXJzdCBhbmQgdGhlbiBpbmZvIG9uIGVhY2ggaGJxIGVudHJ5IHdpbGwgYmUgZHVtcGVkIHRvIEBidWYKKyAqIHVudGlsIEBzaXplIGJ5dGVzIGhhdmUgYmVlbiBkdW1wZWQgb3IgYWxsIHRoZSBoYnEgaW5mbyBoYXMgYmVlbiBkdW1wZWQuCisgKgorICogTm90ZXM6CisgKiBUaGlzIHJvdXRpbmUgd2lsbCByb3RhdGUgdGhyb3VnaCBlYWNoIGNvbmZpZ3VyZWQgSEJRIGVhY2ggdGltZSBjYWxsZWQuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZHVtcGVkIGludG8gQGJ1ZiBhbmQgd2lsbAorICogbm90IGV4Y2VlZCBAc2l6ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19oYnFpbmZvX2RhdGEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBjaGFyICpidWYsIGludCBzaXplKQogewpAQCAtMzAzLDYgKzM2OCwyNCBAQAogCiBzdGF0aWMgaW50IGxwZmNfZGVidWdmc19sYXN0X2hiYV9zbGltX29mZjsKIAorLyoqCisgKiBscGZjX2RlYnVnZnNfZHVtcEhCQVNsaW1fZGF0YSAtIER1bXAgSEJBIFNMSU0gaW5mbyB0byBhIGJ1ZmZlci4KKyAqIEBwaGJhOiBUaGUgSEJBIHRvIGdhdGhlciBTTElNIGluZm8gZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gZHVtcCBsb2cgaW50by4KKyAqIEBzaXplOiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBwcm9jZXNzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGR1bXBzIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIEhCQSBTTElNIGZvciB0aGUgSEJBIGFzc29jaWF0ZWQKKyAqIHdpdGggQHBoYmEgdG8gQGJ1ZiB1cCB0byBAc2l6ZSBieXRlcyBvZiBkYXRhLiBUaGlzIGlzIHRoZSByYXcgSEJBIFNMSU0gZGF0YS4KKyAqCisgKiBOb3RlczoKKyAqIFRoaXMgcm91dGluZSB3aWxsIG9ubHkgZHVtcCB1cCB0byAxMDI0IGJ5dGVzIG9mIGRhdGEgZWFjaCB0aW1lIGNhbGxlZCBhbmQKKyAqIHNob3VsZCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gZHVtcCB0aGUgZW50aXJlIEhCQSBTTElNLgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbnRvIEBidWYgYW5kIHdpbGwKKyAqIG5vdCBleGNlZWQgQHNpemUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfZHVtcEhCQVNsaW1fZGF0YShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC0zNDIsNiArNDI1LDIxIEBACiAJcmV0dXJuIGxlbjsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfZHVtcEhvc3RTbGltX2RhdGEgLSBEdW1wIGhvc3QgU0xJTSBpbmZvIHRvIGEgYnVmZmVyLgorICogQHBoYmE6IFRoZSBIQkEgdG8gZ2F0aGVyIEhvc3QgU0xJTSBpbmZvIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGR1bXAgbG9nIGludG8uCisgKiBAc2l6ZTogVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gcHJvY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBkdW1wcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiBob3N0IFNMSU0gZm9yIHRoZSBob3N0IGFzc29jaWF0ZWQKKyAqIHdpdGggQHBoYmEgdG8gQGJ1ZiB1cCB0byBAc2l6ZSBieXRlcyBvZiBkYXRhLiBUaGUgZHVtcCB3aWxsIGNvbnRhaW4gdGhlCisgKiBNYWlsYm94LCBQQ0IsIFJpbmdzLCBhbmQgUmVnaXN0ZXJzIHRoYXQgYXJlIGxvY2F0ZWQgaW4gaG9zdCBtZW1vcnkuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZHVtcGVkIGludG8gQGJ1ZiBhbmQgd2lsbAorICogbm90IGV4Y2VlZCBAc2l6ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19kdW1wSG9zdFNsaW1fZGF0YShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC0zNTcsNyArNDU1LDcgQEAKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sICJTTElNIE1haWxib3hcbiIpOwotCXB0ciA9ICh1aW50MzJfdCAqKXBoYmEtPnNsaW0ycDsKKwlwdHIgPSAodWludDMyX3QgKilwaGJhLT5zbGltMnAudmlydDsKIAlpID0gc2l6ZW9mKE1BSUxCT1hfdCk7CiAJd2hpbGUgKGkgPiAwKSB7CiAJCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sCkBAIC0zNzAsNyArNDY4LDcgQEAKIAl9CiAKIAlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLCAiU0xJTSBQQ0JcbiIpOwotCXB0ciA9ICh1aW50MzJfdCAqKSZwaGJhLT5zbGltMnAtPnBjYjsKKwlwdHIgPSAodWludDMyX3QgKilwaGJhLT5wY2I7CiAJaSA9IHNpemVvZihQQ0JfdCk7CiAJd2hpbGUgKGkgPiAwKSB7CiAJCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sCkBAIC0zODIsNDQgKzQ4MCwxNiBAQAogCQlvZmYgKz0gKDggKiBzaXplb2YodWludDMyX3QpKTsKIAl9CiAKLQlwZ3BwID0gKHN0cnVjdCBscGZjX3BncCAqKSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AucG9ydDsKLQlwcmluZyA9ICZwc2xpLT5yaW5nWzBdOwotCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sCi0JCSJSaW5nIDA6IENNRCBHZXRJbng6JWQgKE1heDolZCBOZXh0OiVkIExvY2FsOiVkIGZsZzp4JXgpICAiCi0JCSJSU1AgUHV0SW54OiVkIE1heDolZFxuIiwKLQkJcGdwcC0+Y21kR2V0SW54LCBwcmluZy0+bnVtQ2lvY2IsCi0JCXByaW5nLT5uZXh0X2NtZGlkeCwgcHJpbmctPmxvY2FsX2dldGlkeCwgcHJpbmctPmZsYWcsCi0JCXBncHAtPnJzcFB1dElueCwgcHJpbmctPm51bVJpb2NiKTsKLQlwZ3BwKys7Ci0KLQlwcmluZyA9ICZwc2xpLT5yaW5nWzFdOwotCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sCi0JCSJSaW5nIDE6IENNRCBHZXRJbng6JWQgKE1heDolZCBOZXh0OiVkIExvY2FsOiVkIGZsZzp4JXgpICAiCi0JCSJSU1AgUHV0SW54OiVkIE1heDolZFxuIiwKLQkJcGdwcC0+Y21kR2V0SW54LCBwcmluZy0+bnVtQ2lvY2IsCi0JCXByaW5nLT5uZXh0X2NtZGlkeCwgcHJpbmctPmxvY2FsX2dldGlkeCwgcHJpbmctPmZsYWcsCi0JCXBncHAtPnJzcFB1dElueCwgcHJpbmctPm51bVJpb2NiKTsKLQlwZ3BwKys7Ci0KLQlwcmluZyA9ICZwc2xpLT5yaW5nWzJdOwotCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sCi0JCSJSaW5nIDI6IENNRCBHZXRJbng6JWQgKE1heDolZCBOZXh0OiVkIExvY2FsOiVkIGZsZzp4JXgpICAiCi0JCSJSU1AgUHV0SW54OiVkIE1heDolZFxuIiwKLQkJcGdwcC0+Y21kR2V0SW54LCBwcmluZy0+bnVtQ2lvY2IsCi0JCXByaW5nLT5uZXh0X2NtZGlkeCwgcHJpbmctPmxvY2FsX2dldGlkeCwgcHJpbmctPmZsYWcsCi0JCXBncHAtPnJzcFB1dElueCwgcHJpbmctPm51bVJpb2NiKTsKLQlwZ3BwKys7Ci0KLQlwcmluZyA9ICZwc2xpLT5yaW5nWzNdOwotCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sCi0JCSJSaW5nIDM6IENNRCBHZXRJbng6JWQgKE1heDolZCBOZXh0OiVkIExvY2FsOiVkIGZsZzp4JXgpICAiCi0JCSJSU1AgUHV0SW54OiVkIE1heDolZFxuIiwKLQkJcGdwcC0+Y21kR2V0SW54LCBwcmluZy0+bnVtQ2lvY2IsCi0JCXByaW5nLT5uZXh0X2NtZGlkeCwgcHJpbmctPmxvY2FsX2dldGlkeCwgcHJpbmctPmZsYWcsCi0JCXBncHAtPnJzcFB1dElueCwgcHJpbmctPm51bVJpb2NiKTsKLQotCi0JcHRyID0gKHVpbnQzMl90ICopJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5oYnFfZ2V0OworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcGdwcCA9ICZwaGJhLT5wb3J0X2dwW2ldOworCQlwcmluZyA9ICZwc2xpLT5yaW5nW2ldOworCQlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLAorCQkJCSAiUmluZyAlZDogQ01EIEdldElueDolZCAoTWF4OiVkIE5leHQ6JWQgIgorCQkJCSAiTG9jYWw6JWQgZmxnOngleCkgIFJTUCBQdXRJbng6JWQgTWF4OiVkXG4iLAorCQkJCSBpLCBwZ3BwLT5jbWRHZXRJbngsIHByaW5nLT5udW1DaW9jYiwKKwkJCQkgcHJpbmctPm5leHRfY21kaWR4LCBwcmluZy0+bG9jYWxfZ2V0aWR4LAorCQkJCSBwcmluZy0+ZmxhZywgcGdwcC0+cnNwUHV0SW54LCBwcmluZy0+bnVtUmlvY2IpOworCX0KIAl3b3JkMCA9IHJlYWRsKHBoYmEtPkhBcmVnYWRkcik7CiAJd29yZDEgPSByZWFkbChwaGJhLT5DQXJlZ2FkZHIpOwogCXdvcmQyID0gcmVhZGwocGhiYS0+SFNyZWdhZGRyKTsKQEAgLTQzMCw2ICs1MDAsMjEgQEAKIAlyZXR1cm4gbGVuOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19ub2RlbGlzdF9kYXRhIC0gRHVtcCB0YXJnZXQgbm9kZSBsaXN0IHRvIGEgYnVmZmVyLgorICogQHZwb3J0OiBUaGUgdnBvcnQgdG8gZ2F0aGVyIHRhcmdldCBub2RlIGluZm8gZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gZHVtcCBsb2cgaW50by4KKyAqIEBzaXplOiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBwcm9jZXNzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGR1bXBzIHRoZSBjdXJyZW50IHRhcmdldCBub2RlIGxpc3QgYXNzb2NpYXRlZCB3aXRoIEB2cG9ydCB0bworICogQGJ1ZiB1cCB0byBAc2l6ZSBieXRlcyBvZiBkYXRhLiBFYWNoIG5vZGUgZW50cnkgaW4gdGhlIGR1bXAgd2lsbCBjb250YWluIGEKKyAqIG5vZGUgc3RhdGUsIERJRCwgV1dQTiwgV1dOTiwgUlBJLCBmbGFncywgdHlwZSwgYW5kIG90aGVyIHVzZWZ1bCBmaWVsZHMuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZHVtcGVkIGludG8gQGJ1ZiBhbmQgd2lsbAorICogbm90IGV4Y2VlZCBAc2l6ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19ub2RlbGlzdF9kYXRhKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTUxMyw3ICs1OTgsMjIgQEAKIH0KICNlbmRpZgogCi0KKy8qKgorICogbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjIC0gU3RvcmUgZGlzY292ZXJ5IHRyYWNlIGxvZy4KKyAqIEB2cG9ydDogVGhlIHZwb3J0IHRvIGFzc29jaWF0ZSB0aGlzIHRyYWNlIHN0cmluZyB3aXRoIGZvciByZXRyaWV2YWwuCisgKiBAbWFzazogTG9nIGVudHJ5IGNsYXNzaWZpY2F0aW9uLgorICogQGZtdDogRm9ybWF0IHN0cmluZyB0byBiZSBkaXNwbGF5ZWQgd2hlbiBkdW1waW5nIHRoZSBsb2cuCisgKiBAZGF0YTE6IDFzdCBkYXRhIHBhcmFtZXRlciB0byBiZSBhcHBsaWVkIHRvIEBmbXQuCisgKiBAZGF0YTI6IDJuZCBkYXRhIHBhcmFtZXRlciB0byBiZSBhcHBsaWVkIHRvIEBmbXQuCisgKiBAZGF0YTM6IDNyZCBkYXRhIHBhcmFtZXRlciB0byBiZSBhcHBsaWVkIHRvIEBmbXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgZHJpdmVyIGNvZGUgdG8gYWRkIGEgZGVidWdmcyBsb2cgZW50cnkgdG8gdGhlCisgKiBkaXNjb3ZlcnkgdHJhY2UgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBAdnBvcnQuIE9ubHkgZW50cmllcyB3aXRoIGEgQG1hc2sgdGhhdAorICogbWF0Y2ggdGhlIGN1cnJlbnQgZGVidWdmcyBkaXNjb3ZlcnkgbWFzayB3aWxsIGJlIHNhdmVkLiBFbnRyaWVzIHRoYXQgZG8gbm90CisgKiBtYXRjaCB3aWxsIGJlIHRocm93biBhd2F5LiBAZm10LCBAZGF0YTEsIEBkYXRhMiwgYW5kIEBkYXRhMyBhcmUgdXNlZCBsaWtlCisgKiBwcmludGYgd2hlbiBkaXNwbGF5aW5nIHRoZSBsb2cuCisgKiovCiBpbmxpbmUgdm9pZAogbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IG1hc2ssIGNoYXIgKmZtdCwKIAl1aW50MzJfdCBkYXRhMSwgdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKQpAQCAtNTQyLDYgKzY0MiwxOSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfc2xvd19yaW5nX3RyYyAtIFN0b3JlIHNsb3cgcmluZyB0cmFjZSBsb2cuCisgKiBAcGhiYTogVGhlIHBoYmEgdG8gYXNzb2NpYXRlIHRoaXMgdHJhY2Ugc3RyaW5nIHdpdGggZm9yIHJldHJpZXZhbC4KKyAqIEBmbXQ6IEZvcm1hdCBzdHJpbmcgdG8gYmUgZGlzcGxheWVkIHdoZW4gZHVtcGluZyB0aGUgbG9nLgorICogQGRhdGExOiAxc3QgZGF0YSBwYXJhbWV0ZXIgdG8gYmUgYXBwbGllZCB0byBAZm10LgorICogQGRhdGEyOiAybmQgZGF0YSBwYXJhbWV0ZXIgdG8gYmUgYXBwbGllZCB0byBAZm10LgorICogQGRhdGEzOiAzcmQgZGF0YSBwYXJhbWV0ZXIgdG8gYmUgYXBwbGllZCB0byBAZm10LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIGRyaXZlciBjb2RlIHRvIGFkZCBhIGRlYnVnZnMgbG9nIGVudHJ5IHRvIHRoZQorICogZGlzY292ZXJ5IHRyYWNlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggQHZwb3J0LiBAZm10LCBAZGF0YTEsIEBkYXRhMiwgYW5kCisgKiBAZGF0YTMgYXJlIHVzZWQgbGlrZSBwcmludGYgd2hlbiBkaXNwbGF5aW5nIHRoZSBsb2cuCisgKiovCiBpbmxpbmUgdm9pZAogbHBmY19kZWJ1Z2ZzX3Nsb3dfcmluZ190cmMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBjaGFyICpmbXQsCiAJdWludDMyX3QgZGF0YTEsIHVpbnQzMl90IGRhdGEyLCB1aW50MzJfdCBkYXRhMykKQEAgLTU2OCw2ICs2ODEsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19MUEZDX0RFQlVHX0ZTCisvKioKKyAqIGxwZmNfZGVidWdmc19kaXNjX3RyY19vcGVuIC0gT3BlbiB0aGUgZGlzY292ZXJ5IHRyYWNlIGxvZy4KKyAqIEBpbm9kZTogVGhlIGlub2RlIHBvaW50ZXIgdGhhdCBjb250YWlucyBhIHZwb3J0IHBvaW50ZXIuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byBhdHRhY2ggdGhlIGxvZyBvdXRwdXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZGVidWdmcyBvcGVuIGZpbGUgb3BlcmF0aW9uLiBJdCBnZXRzCisgKiB0aGUgdnBvcnQgZnJvbSB0aGUgaV9wcml2YXRlIGZpZWxkIGluIEBpbm9kZSwgYWxsb2NhdGVzIHRoZSBuZWNlc3NhcnkgYnVmZmVyCisgKiBmb3IgdGhlIGxvZywgZmlsbHMgdGhlIGJ1ZmZlciBmcm9tIHRoZSBpbi1tZW1vcnkgbG9nIGZvciB0aGlzIHZwb3J0LCBhbmQgdGhlbgorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBsb2cgaW4gdGhlIHByaXZhdGVfZGF0YSBmaWVsZCBpbiBAZmlsZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bC4gT24gZXJyb3IgaXQgd2lsbCByZXR1cm4gYW4gbmVnYXRpdmUKKyAqIGVycm9yIHZhbHVlLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC01ODUsNyArNzEzLDcgQEAKIAlpZiAoIWRlYnVnKQogCQlnb3RvIG91dDsKIAotCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRyeSAqLworCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KIAlzaXplID0gIChscGZjX2RlYnVnZnNfbWF4X2Rpc2NfdHJjICogTFBGQ19ERUJVR19UUkNfRU5UUllfU0laRSk7CiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAKQEAgLTYwMyw2ICs3MzEsMjEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX3Nsb3dfcmluZ190cmNfb3BlbiAtIE9wZW4gdGhlIFNsb3cgUmluZyB0cmFjZSBsb2cuCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBwb2ludGVyIHRoYXQgY29udGFpbnMgYSB2cG9ydCBwb2ludGVyLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gYXR0YWNoIHRoZSBsb2cgb3V0cHV0LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRlYnVnZnMgb3BlbiBmaWxlIG9wZXJhdGlvbi4gSXQgZ2V0cworICogdGhlIHZwb3J0IGZyb20gdGhlIGlfcHJpdmF0ZSBmaWVsZCBpbiBAaW5vZGUsIGFsbG9jYXRlcyB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcgorICogZm9yIHRoZSBsb2csIGZpbGxzIHRoZSBidWZmZXIgZnJvbSB0aGUgaW4tbWVtb3J5IGxvZyBmb3IgdGhpcyB2cG9ydCwgYW5kIHRoZW4KKyAqIHJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgbG9nIGluIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgaW4gQGZpbGUuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwuIE9uIGVycm9yIGl0IHdpbGwgcmV0dXJuIGFuIG5lZ2F0aXZlCisgKiBlcnJvciB2YWx1ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19zbG93X3JpbmdfdHJjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC02MjAsNyArNzYzLDcgQEAKIAlpZiAoIWRlYnVnKQogCQlnb3RvIG91dDsKIAotCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRyeSAqLworCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KIAlzaXplID0gIChscGZjX2RlYnVnZnNfbWF4X3Nsb3dfcmluZ190cmMgKiBMUEZDX0RFQlVHX1RSQ19FTlRSWV9TSVpFKTsKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIApAQCAtNjM4LDYgKzc4MSwyMSBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfaGJxaW5mb19vcGVuIC0gT3BlbiB0aGUgaGJxaW5mbyBkZWJ1Z2ZzIGJ1ZmZlci4KKyAqIEBpbm9kZTogVGhlIGlub2RlIHBvaW50ZXIgdGhhdCBjb250YWlucyBhIHZwb3J0IHBvaW50ZXIuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byBhdHRhY2ggdGhlIGxvZyBvdXRwdXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZGVidWdmcyBvcGVuIGZpbGUgb3BlcmF0aW9uLiBJdCBnZXRzCisgKiB0aGUgdnBvcnQgZnJvbSB0aGUgaV9wcml2YXRlIGZpZWxkIGluIEBpbm9kZSwgYWxsb2NhdGVzIHRoZSBuZWNlc3NhcnkgYnVmZmVyCisgKiBmb3IgdGhlIGxvZywgZmlsbHMgdGhlIGJ1ZmZlciBmcm9tIHRoZSBpbi1tZW1vcnkgbG9nIGZvciB0aGlzIHZwb3J0LCBhbmQgdGhlbgorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBsb2cgaW4gdGhlIHByaXZhdGVfZGF0YSBmaWVsZCBpbiBAZmlsZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bC4gT24gZXJyb3IgaXQgd2lsbCByZXR1cm4gYW4gbmVnYXRpdmUKKyAqIGVycm9yIHZhbHVlLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2hicWluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTY0OSw3ICs4MDcsNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCWRlYnVnLT5idWZmZXIgPSBrbWFsbG9jKExQRkNfSEJRSU5GT19TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRlYnVnLT5idWZmZXIpIHsKIAkJa2ZyZWUoZGVidWcpOwpAQCAtNjY1LDYgKzgyMywyMSBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfZHVtcEhCQVNsaW1fb3BlbiAtIE9wZW4gdGhlIER1bXAgSEJBIFNMSU0gZGVidWdmcyBidWZmZXIuCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBwb2ludGVyIHRoYXQgY29udGFpbnMgYSB2cG9ydCBwb2ludGVyLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gYXR0YWNoIHRoZSBsb2cgb3V0cHV0LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRlYnVnZnMgb3BlbiBmaWxlIG9wZXJhdGlvbi4gSXQgZ2V0cworICogdGhlIHZwb3J0IGZyb20gdGhlIGlfcHJpdmF0ZSBmaWVsZCBpbiBAaW5vZGUsIGFsbG9jYXRlcyB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcgorICogZm9yIHRoZSBsb2csIGZpbGxzIHRoZSBidWZmZXIgZnJvbSB0aGUgaW4tbWVtb3J5IGxvZyBmb3IgdGhpcyB2cG9ydCwgYW5kIHRoZW4KKyAqIHJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgbG9nIGluIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgaW4gQGZpbGUuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwuIE9uIGVycm9yIGl0IHdpbGwgcmV0dXJuIGFuIG5lZ2F0aXZlCisgKiBlcnJvciB2YWx1ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19kdW1wSEJBU2xpbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtNjc2LDcgKzg0OSw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJZGVidWctPmJ1ZmZlciA9IGttYWxsb2MoTFBGQ19EVU1QSEJBU0xJTV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRlYnVnLT5idWZmZXIpIHsKIAkJa2ZyZWUoZGVidWcpOwpAQCAtNjkyLDYgKzg2NSwyMSBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfZHVtcEhvc3RTbGltX29wZW4gLSBPcGVuIHRoZSBEdW1wIEhvc3QgU0xJTSBkZWJ1Z2ZzIGJ1ZmZlci4KKyAqIEBpbm9kZTogVGhlIGlub2RlIHBvaW50ZXIgdGhhdCBjb250YWlucyBhIHZwb3J0IHBvaW50ZXIuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byBhdHRhY2ggdGhlIGxvZyBvdXRwdXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZGVidWdmcyBvcGVuIGZpbGUgb3BlcmF0aW9uLiBJdCBnZXRzCisgKiB0aGUgdnBvcnQgZnJvbSB0aGUgaV9wcml2YXRlIGZpZWxkIGluIEBpbm9kZSwgYWxsb2NhdGVzIHRoZSBuZWNlc3NhcnkgYnVmZmVyCisgKiBmb3IgdGhlIGxvZywgZmlsbHMgdGhlIGJ1ZmZlciBmcm9tIHRoZSBpbi1tZW1vcnkgbG9nIGZvciB0aGlzIHZwb3J0LCBhbmQgdGhlbgorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBsb2cgaW4gdGhlIHByaXZhdGVfZGF0YSBmaWVsZCBpbiBAZmlsZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bC4gT24gZXJyb3IgaXQgd2lsbCByZXR1cm4gYW4gbmVnYXRpdmUKKyAqIGVycm9yIHZhbHVlLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2R1bXBIb3N0U2xpbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtNzAzLDcgKzg5MSw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJZGVidWctPmJ1ZmZlciA9IGttYWxsb2MoTFBGQ19EVU1QSE9TVFNMSU1fU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZWJ1Zy0+YnVmZmVyKSB7CiAJCWtmcmVlKGRlYnVnKTsKQEAgLTcxOSw2ICs5MDcsMjEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX25vZGVsaXN0X29wZW4gLSBPcGVuIHRoZSBub2RlbGlzdCBkZWJ1Z2ZzIGZpbGUuCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBwb2ludGVyIHRoYXQgY29udGFpbnMgYSB2cG9ydCBwb2ludGVyLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gYXR0YWNoIHRoZSBsb2cgb3V0cHV0LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRlYnVnZnMgb3BlbiBmaWxlIG9wZXJhdGlvbi4gSXQgZ2V0cworICogdGhlIHZwb3J0IGZyb20gdGhlIGlfcHJpdmF0ZSBmaWVsZCBpbiBAaW5vZGUsIGFsbG9jYXRlcyB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcgorICogZm9yIHRoZSBsb2csIGZpbGxzIHRoZSBidWZmZXIgZnJvbSB0aGUgaW4tbWVtb3J5IGxvZyBmb3IgdGhpcyB2cG9ydCwgYW5kIHRoZW4KKyAqIHJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgbG9nIGluIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgaW4gQGZpbGUuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwuIE9uIGVycm9yIGl0IHdpbGwgcmV0dXJuIGFuIG5lZ2F0aXZlCisgKiBlcnJvciB2YWx1ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19ub2RlbGlzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtNzMwLDcgKzkzMyw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJZGVidWctPmJ1ZmZlciA9IGttYWxsb2MoTFBGQ19OT0RFTElTVF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRlYnVnLT5idWZmZXIpIHsKIAkJa2ZyZWUoZGVidWcpOwpAQCAtNzQ2LDYgKzk0OSwyMyBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfbHNlZWsgLSBTZWVrIHRocm91Z2ggYSBkZWJ1Z2ZzIGZpbGUuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byBzZWVrIHRocm91Z2guCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IHRvIHNlZWsgdG8gb3IgdGhlIGFtb3VudCB0byBzZWVrIGJ5LgorICogQHdoZW5jZTogSW5kaWNhdGVzIGhvdyB0byBzZWVrLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRlYnVnZnMgbHNlZWsgZmlsZSBvcGVyYXRpb24uIFRoZQorICogQHdoZW5jZSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoZXRoZXIgQG9mZiBpcyB0aGUgb2Zmc2V0IHRvIGRpcmVjdGx5IHNlZWsgdG8sCisgKiBvciBpZiBpdCBpcyBhIHZhbHVlIHRvIHNlZWsgZm9yd2FyZCBvciByZXZlcnNlIGJ5LiBUaGlzIGZ1bmN0aW9uIGZpZ3VyZXMgb3V0CisgKiB3aGF0IHRoZSBuZXcgb2Zmc2V0IG9mIHRoZSBkZWJ1Z2ZzIGZpbGUgd2lsbCBiZSBhbmQgYXNzaWducyB0aGF0IHZhbHVlIHRvIHRoZQorICogZl9wb3MgZmllbGQgb2YgQGZpbGUuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV3IG9mZnNldCBpZiBzdWNjZXNzZnVsIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUKKyAqIGVycm9yIGlmIHVuYWJsZSB0byBwcm9jZXNzIHRoZSBzZWVrLgorICoqLwogc3RhdGljIGxvZmZfdAogbHBmY19kZWJ1Z2ZzX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQogewpAQCAtNzY3LDYgKzk4NywyMiBAQAogCXJldHVybiAocG9zIDwgMCB8fCBwb3MgPiBkZWJ1Zy0+bGVuKSA/IC1FSU5WQUwgOiAoZmlsZS0+Zl9wb3MgPSBwb3MpOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19yZWFkIC0gUmVhZCBhIGRlYnVnZnMgZmlsZS4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIHJlYWQgZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gY29weSB0aGUgZGF0YSB0by4KKyAqIEBuYnl0ZXM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqIEBwcG9zOiBUaGUgcG9zaXRpb24gaW4gdGhlIGZpbGUgdG8gc3RhcnQgcmVhZGluZyBmcm9tLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIHJlYWRzIGRhdGEgZnJvbSBmcm9tIHRoZSBidWZmZXIgaW5kaWNhdGVkIGluIHRoZSBwcml2YXRlX2RhdGEKKyAqIGZpZWxkIG9mIEBmaWxlLiBJdCB3aWxsIHN0YXJ0IHJlYWRpbmcgYXQgQHBwb3MgYW5kIGNvcHkgdXAgdG8gQG5ieXRlcyBvZgorICogZGF0YSB0byBAYnVmLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHJlYWQgKHRoaXMgY291bGQgYmUgbGVzcworICogdGhhbiBAbmJ5dGVzIGlmIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQpIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19kZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCSAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQpAQCAtNzc2LDYgKzEwMTIsMTggQEAKIAkJCQkgICAgICAgZGVidWctPmxlbik7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX3JlbGVhc2UgLSBSZWxlYXNlIHRoZSBidWZmZXIgdXNlZCB0byBzdG9yZSBkZWJ1Z2ZzIGZpbGUgZGF0YS4KKyAqIEBpbm9kZTogVGhlIGlub2RlIHBvaW50ZXIgdGhhdCBjb250YWlucyBhIHZwb3J0IHBvaW50ZXIuICh1bnVzZWQpCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIHRoZSBidWZmZXIgdG8gcmVsZWFzZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBmcmVlcyB0aGUgYnVmZmVyIHRoYXQgd2FzIGFsbG9jYXRlZCB3aGVuIHRoZSBkZWJ1Z2ZzIGZpbGUgd2FzCisgKiBvcGVuZWQuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC04NDUsNiArMTA5MywxNiBAQAogc3RhdGljIGF0b21pY190IGxwZmNfZGVidWdmc19oYmFfY291bnQ7CiAjZW5kaWYKIAorLyoqCisgKiBscGZjX2RlYnVnZnNfaW5pdGlhbGl6ZSAtIEluaXRpYWxpemUgZGVidWdmcyBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogVGhlIHZwb3J0IHBvaW50ZXIgdG8gaW5pdGlhbGl6ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFdoZW4gRGVidWdmcyBpcyBjb25maWd1cmVkIHRoaXMgcm91dGluZSBzZXRzIHVwIHRoZSBscGZjIGRlYnVnZnMgZmlsZSBzeXN0ZW0uCisgKiBJZiBub3QgYWxyZWFkeSBjcmVhdGVkLCB0aGlzIHJvdXRpbmUgd2lsbCBjcmVhdGUgdGhlIGxwZmMgZGlyZWN0b3J5LCBhbmQKKyAqIGxwZmNYIGRpcmVjdG9yeSAoZm9yIHRoaXMgSEJBKSwgYW5kIHZwb3J0WCBkaXJlY3RvcnkgZm9yIHRoaXMgdnBvcnQuIEl0IHdpbGwKKyAqIGFsc28gY3JlYXRlIGVhY2ggZmlsZSB1c2VkIHRvIGFjY2VzcyBscGZjIHNwZWNpZmljIGRlYnVnZnMgaW5mb3JtYXRpb24uCisgKiovCiBpbmxpbmUgdm9pZAogbHBmY19kZWJ1Z2ZzX2luaXRpYWxpemUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtODYyLDcgKzExMjAsNyBAQAogCQlhdG9taWNfc2V0KCZscGZjX2RlYnVnZnNfaGJhX2NvdW50LCAwKTsKIAkJaWYgKCFscGZjX2RlYnVnZnNfcm9vdCkgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkgIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIHJvb3RcbiIpOworCQkJCQkgIjA0MDggQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIHJvb3RcbiIpOwogCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCX0KIAl9CkBAIC04NzYsNyArMTEzNCw3IEBACiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgbHBmY19kZWJ1Z2ZzX3Jvb3QpOwogCQlpZiAoIXBoYmEtPmhiYV9kZWJ1Z2ZzX3Jvb3QpIHsKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkJICIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyBoYmFcbiIpOworCQkJCQkgIjA0MTIgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGhiYVxuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCQlhdG9taWNfaW5jKCZscGZjX2RlYnVnZnNfaGJhX2NvdW50KTsKQEAgLTg5MCw3ICsxMTQ4LDcgQEAKIAkJCQkgcGhiYSwgJmxwZmNfZGVidWdmc19vcF9oYnFpbmZvKTsKIAkJaWYgKCFwaGJhLT5kZWJ1Z19oYnFpbmZvKSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGhicWluZm9cbiIpOworCQkJCSIwNDExIENhbm5vdCBjcmVhdGUgZGVidWdmcyBoYnFpbmZvXG4iKTsKIAkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQl9CiAKQEAgLTkwMiw3ICsxMTYwLDcgQEAKIAkJCQkgcGhiYSwgJmxwZmNfZGVidWdmc19vcF9kdW1wSEJBU2xpbSk7CiAJCWlmICghcGhiYS0+ZGVidWdfZHVtcEhCQVNsaW0pIHsKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgZHVtcEhCQVNsaW1cbiIpOworCQkJCSIwNDEzIENhbm5vdCBjcmVhdGUgZGVidWdmcyBkdW1wSEJBU2xpbVxuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCkBAIC05MTQsNyArMTE3Miw3IEBACiAJCQkJIHBoYmEsICZscGZjX2RlYnVnZnNfb3BfZHVtcEhvc3RTbGltKTsKIAkJaWYgKCFwaGJhLT5kZWJ1Z19kdW1wSG9zdFNsaW0pIHsKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgZHVtcEhvc3RTbGltXG4iKTsKKwkJCQkiMDQxNCBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgZHVtcEhvc3RTbGltXG4iKTsKIAkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQl9CiAKQEAgLTk0NCw3ICsxMjAyLDcgQEAKIAkJCQkgcGhiYSwgJmxwZmNfZGVidWdmc19vcF9zbG93X3JpbmdfdHJjKTsKIAkJaWYgKCFwaGJhLT5kZWJ1Z19zbG93X3JpbmdfdHJjKSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJCSAiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJCQkgIjA0MTUgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzICIKIAkJCQkJICJzbG93X3JpbmdfdHJhY2VcbiIpOwogCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCX0KQEAgLTk1NSw3ICsxMjEzLDcgQEAKIAkJCQlHRlBfS0VSTkVMKTsKIAkJCWlmICghcGhiYS0+c2xvd19yaW5nX3RyYykgewogCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkJCSAiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJCQkJICIwNDE2IENhbm5vdCBjcmVhdGUgZGVidWdmcyAiCiAJCQkJCQkgInNsb3dfcmluZyBidWZmZXJcbiIpOwogCQkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQkJfQpAQCAtOTcyLDcgKzEyMzAsNyBAQAogCQkJZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHBoYmEtPmhiYV9kZWJ1Z2ZzX3Jvb3QpOwogCQlpZiAoIXZwb3J0LT52cG9ydF9kZWJ1Z2ZzX3Jvb3QpIHsKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkJICIwNDA5IENhbnQgY3JlYXRlIGRlYnVnZnMiKTsKKwkJCQkJICIwNDE3IENhbnQgY3JlYXRlIGRlYnVnZnMiKTsKIAkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQl9CiAJCWF0b21pY19pbmMoJnBoYmEtPmRlYnVnZnNfdnBvcnRfY291bnQpOwpAQCAtMTAwMSw3ICsxMjU5LDcgQEAKIAogCWlmICghdnBvcnQtPmRpc2NfdHJjKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkgIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGRpc2MgdHJhY2UgIgorCQkJCSAiMDQxOCBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgZGlzYyB0cmFjZSAiCiAJCQkJICJidWZmZXJcbiIpOwogCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAl9CkBAIC0xMDE0LDcgKzEyNzIsNyBAQAogCQkJCSB2cG9ydCwgJmxwZmNfZGVidWdmc19vcF9kaXNjX3RyYyk7CiAJaWYgKCF2cG9ydC0+ZGVidWdfZGlzY190cmMpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSAiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJCSAiMDQxOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgIgogCQkJCSAiZGlzY292ZXJ5X3RyYWNlXG4iKTsKIAkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJfQpAQCAtMTAzMyw3ICsxMjkxLDE3IEBACiAjZW5kaWYKIH0KIAotCisvKioKKyAqIGxwZmNfZGVidWdmc190ZXJtaW5hdGUgLSAgVGVhciBkb3duIGRlYnVnZnMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoaXMgdnBvcnQuCisgKiBAdnBvcnQ6IFRoZSB2cG9ydCBwb2ludGVyIHRvIHJlbW92ZSBmcm9tIGRlYnVnZnMuCisgKgorICogRGVzY3JpcHRpb246CisgKiBXaGVuIERlYnVnZnMgaXMgY29uZmlndXJlZCB0aGlzIHJvdXRpbmUgcmVtb3ZlcyBkZWJ1Z2ZzIGZpbGUgc3lzdGVtIGVsZW1lbnRzCisgKiB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGlzIHZwb3J0LiBJdCBhbHNvIGNoZWNrcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueQorICogdXNlcnMgbGVmdCBmb3IgdGhlIGRlYnVnZnMgZGlyZWN0b3JpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBIQkEgYW5kIGRyaXZlci4gSWYKKyAqIHRoaXMgaXMgdGhlIGxhc3QgdXNlciBvZiB0aGUgSEJBIGRpcmVjdG9yeSBvciBkcml2ZXIgZGlyZWN0b3J5IHRoZW4gaXQgd2lsbAorICogcmVtb3ZlIHRob3NlIGZyb20gdGhlIGRlYnVnZnMgaW5mcmFzdHJ1Y3R1cmUgYXMgd2VsbC4KKyAqKi8KIGlubGluZSB2b2lkCiBscGZjX2RlYnVnZnNfdGVybWluYXRlKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTEwOTYsNSArMTM2NCwzIEBACiAjZW5kaWYKIAlyZXR1cm47CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAppbmRleCAyZGIwYjc0Li5mMjllNTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaApAQCAtMzcsNiArMzcsNyBAQAogCUxQRkNfRVZUX0tJTEwsCiAJTFBGQ19FVlRfRUxTX1JFVFJZLAogCUxQRkNfRVZUX0RFVl9MT1NTLAorCUxQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZULAogfTsKIAogLyogc3RydWN0dXJlIHVzZWQgdG8gcXVldWUgZXZlbnQgdG8gdGhlIGRpc2NvdmVyeSB0YXNrbGV0ICovCkBAIC00Nyw2ICs0OCwyNCBAQAogCWVudW0gbHBmY193b3JrX3R5cGUgICBldnQ7CiB9OwogCitzdHJ1Y3QgbHBmY19zY3NpX2NoZWNrX2NvbmRpdGlvbl9ldmVudDsKK3N0cnVjdCBscGZjX3Njc2lfdmFycXVldWVkZXB0aF9ldmVudDsKK3N0cnVjdCBscGZjX3Njc2lfZXZlbnRfaGVhZGVyOworc3RydWN0IGxwZmNfZmFicmljX2V2ZW50X2hlYWRlcjsKK3N0cnVjdCBscGZjX2ZjcHJkY2hrZXJyX2V2ZW50OworCisvKiBzdHJ1Y3R1cmUgdXNlZCBmb3Igc2VuZGluZyBldmVudHMgZnJvbSBmYXN0IHBhdGggKi8KK3N0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCB7CisJc3RydWN0IGxwZmNfd29ya19ldnQgd29ya19ldnQ7CisJc3RydWN0IGxwZmNfdnBvcnQgICAgICp2cG9ydDsKKwl1bmlvbiB7CisJCXN0cnVjdCBscGZjX3Njc2lfY2hlY2tfY29uZGl0aW9uX2V2ZW50IGNoZWNrX2NvbmRfZXZ0OworCQlzdHJ1Y3QgbHBmY19zY3NpX3ZhcnF1ZXVlZGVwdGhfZXZlbnQgcXVldWVfZGVwdGhfZXZ0OworCQlzdHJ1Y3QgbHBmY19zY3NpX2V2ZW50X2hlYWRlciBzY3NpX2V2dDsKKwkJc3RydWN0IGxwZmNfZmFicmljX2V2ZW50X2hlYWRlciBmYWJyaWNfZXZ0OworCQlzdHJ1Y3QgbHBmY19mY3ByZGNoa2Vycl9ldmVudCByZWFkX2NoZWNrX2Vycm9yOworCX0gdW47Cit9OwogCiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBubHBfbGlzdHA7CkBAIC04OCw2ICsxMDcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfcmFtcF91cF90aW1lOyAgICAgICAgLyogamlmZnkgb2YgbGFzdCByYW1wIHVwICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3FfZnVsbF90aW1lOwkJLyogamlmZnkgb2YgbGFzdCBxdWV1ZSBmdWxsICovCiAJc3RydWN0IGtyZWYgICAgIGtyZWY7CisJYXRvbWljX3QgY21kX3BlbmRpbmc7CisJdWludDMyX3QgY21kX3FkZXB0aDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfY2hhbmdlX3RpbWU7CisJc3RydWN0IGxwZmNfc2NzaWNtZF9ia3QgKmxhdF9kYXRhOwkvKiBMYXRlbmN5IGRhdGEgKi8KIH07CiAKIC8qIERlZmluZXMgZm9yIG5scF9mbGFnICh1aW50MzIpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCBmNTRlMGY3Li42MzBiZDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC01Myw2ICs1NCwyOCBAQAogCiBzdGF0aWMgaW50IGxwZmNfbWF4X2Vsc190cmllcyA9IDM7CiAKKy8qKgorICogbHBmY19lbHNfY2hrX2xhdHQ6IENoZWNrIGhvc3QgbGluayBhdHRlbnRpb24gZXZlbnQgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3Mgd2hldGhlciB0aGVyZSBpcyBhbiBvdXRzdGFuZGluZyBob3N0IGxpbmsKKyAqIGF0dGVudGlvbiBldmVudCBkdXJpbmcgdGhlIGRpc2NvdmVyeSBwcm9jZXNzIHdpdGggdGhlIEB2cG9ydC4gSXQgaXMgZG9uZQorICogYnkgcmVhZGluZyB0aGUgSEJBJ3MgSG9zdCBBdHRlbnRpb24gKEhBKSByZWdpc3Rlci4gSWYgdGhlcmUgaXMgYW55IGhvc3QKKyAqIGxpbmsgYXR0ZW50aW9uIGV2ZW50cyBkdXJpbmcgdGhpcyBAdnBvcnQncyBkaXNjb3ZlcnkgcHJvY2VzcywgdGhlIEB2cG9ydAorICogc2hhbGwgYmUgbWFya2VkIGFzIEZDX0FCT1JUX0RJU0NPVkVSWSwgYSBob3N0IGxpbmsgYXR0ZW50aW9uIGNsZWFyIHNoYWxsCisgKiBiZSBpc3N1ZWQgaWYgdGhlIGxpbmsgc3RhdGUgaXMgbm90IGFscmVhZHkgaW4gaG9zdCBsaW5rIGNsZWFyZWQgc3RhdGUsCisgKiBhbmQgYSByZXR1cm4gY29kZSBzaGFsbCBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBob3N0IGxpbmsgYXR0ZW50aW9uIGV2ZW50CisgKiBoYWQgaGFwcGVuZWQuCisgKgorICogTm90ZSB0aGF0LCBpZiBlaXRoZXIgdGhlIGhvc3QgbGluayBpcyBpbiBzdGF0ZSBMUEZDX0xJTktfRE9XTiBvciBAdnBvcnQKKyAqIHN0YXRlIGluIExQRkNfVlBPUlRfUkVBRFksIHRoZSByZXF1ZXN0IGZvciBjaGVja2luZyBob3N0IGxpbmsgYXR0ZW50aW9uCisgKiBldmVudCB3aWxsIGJlIGlnbm9yZWQgYW5kIGEgcmV0dXJuIGNvZGUgc2hhbGwgaW5kaWNhdGUgbm8gaG9zdCBsaW5rCisgKiBhdHRlbnRpb24gZXZlbnQgaGFkIGhhcHBlbmVkLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gbm8gaG9zdCBsaW5rIGF0dGVudGlvbiBldmVudCBoYXBwZW5lZAorICogICAxIC0gaG9zdCBsaW5rIGF0dGVudGlvbiBldmVudCBoYXBwZW5lZAorICoqLwogaW50CiBscGZjX2Vsc19jaGtfbGF0dChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC05Miw2ICsxMTUsMzQgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX3ByZXBfZWxzX2lvY2I6IEFsbG9jYXRlIGFuZCBwcmVwYXJlIGEgbHBmYyBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBleHBlY3RSc3A6IGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHJlc3BvbnNlIGlzIGV4cGVjdGVkLgorICogQGNtZFNpemU6IHNpemUgb2YgdGhlIEVMUyBjb21tYW5kLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCIHdoZW4gaXQgZmFpbHMuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBkaWQ6IGRlc3RpbmF0aW9uIGlkZW50aWZpZXIuCisgKiBAZWxzY21kOiB0aGUgRUxTIGNvbW1hbmQgY29kZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgYWxsb2NhdGluZyBhIGxwZmMtSU9DQiBkYXRhIHN0cnVjdHVyZSBmcm9tCisgKiB0aGUgZHJpdmVyIGxwZmMtSU9DQiBmcmVlLWxpc3QgYW5kIHByZXBhcmUgdGhlIElPQ0Igd2l0aCB0aGUgcGFyYW1ldGVycworICogcGFzc2VkIGludG8gdGhlIHJvdXRpbmUgZm9yIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lIHRvIGlzc3VlIGFuIEV4dGVuZGVkCisgKiBMaW5rIFNlcnZpY2UgKEVMUykgY29tbWFuZHMuIEl0IGlzIGEgZ2VuZXJpYyBscGZjLUlPQ0IgYWxsb2NhdGlvbgorICogYW5kIHByZXBhcmF0aW9uIHJvdXRpbmUgdGhhdCBpcyB1c2VkIGJ5IGFsbCB0aGUgZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmUKKyAqIHJvdXRpbmVzIGFuZCB0aGUgRUxTIGNvbW1hbmQtc3BlY2lmaWMgZmllbGRzIHdpbGwgYmUgbGF0ZXIgc2V0IHVwIGJ5CisgKiB0aGUgaW5kaXZpZHVhbCBkaXNjb3ZlcnkgbWFjaGluZSByb3V0aW5lcyBhZnRlciBjYWxsaW5nIHRoaXMgcm91dGluZQorICogYWxsb2NhdGluZyBhbmQgcHJlcGFyaW5nIGEgZ2VuZXJpYyBJT0NCIGRhdGEgc3RydWN0dXJlLiBJdCBmaWxscyBpbiB0aGUKKyAqIEJ1ZmZlciBEZXNjcmlwdG9yIEVudHJpZXMgKEJERXMpLCBhbGxvY2F0ZXMgYnVmZmVycyBmb3IgYm90aCBjb21tYW5kCisgKiBwYXlsb2FkIGFuZCByZXNwb25zZSBwYXlsb2FkIChpZiBleHBlY3RlZCkuIFRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlCisgKiBuZGxwIGlzIGluY3JlbWVudGVkIGJ5IDEgYW5kIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5kbHAgaXMgcHV0IGludG8KKyAqIGNvbnRleHQxIG9mIHRoZSBJT0NCIGRhdGEgc3RydWN0dXJlIGZvciB0aGlzIElPQ0IgdG8gaG9sZCB0aGUgbmRscAorICogcmVmZXJlbmNlIGZvciB0aGUgY29tbWFuZCdzIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFjY2VzcyBsYXRlci4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICBQb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQvcHJlcGFyZWQgZWxzIGlvY2IgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgTlVMTCAtIHdoZW4gZWxzIGlvY2IgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi9wcmVwYXJhdGlvbiBmYWlsZWQKKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19pb2NicSAqCiBscGZjX3ByZXBfZWxzX2lvY2Ioc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50OF90IGV4cGVjdFJzcCwKIAkJICAgdWludDE2X3QgY21kU2l6ZSwgdWludDhfdCByZXRyeSwKQEAgLTE1MCw3ICsyMDEsNyBAQAogCiAJaWNtZC0+dW4uZWxzcmVxNjQuYmRsLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBidWZsaXN0LT5waHlzKTsKIAlpY21kLT51bi5lbHNyZXE2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KHBidWZsaXN0LT5waHlzKTsKLQlpY21kLT51bi5lbHNyZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRMOworCWljbWQtPnVuLmVsc3JlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CiAJaWNtZC0+dW4uZWxzcmVxNjQucmVtb3RlSUQgPSBkaWQ7CS8qIERJRCAqLwogCWlmIChleHBlY3RSc3ApIHsKIAkJaWNtZC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemUgPSAoMiAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CkBAIC0xODUsNyArMjM2LDcgQEAKIAkJYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocHJzcC0+cGh5cykpOwogCQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHByc3AtPnBoeXMpKTsKIAkJYnBsLT50dXMuZi5iZGVTaXplID0gRkNFTFNTSVpFOwotCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9VU0VfUkNWOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKIAkJYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwogCX0KIApAQCAtMjMzLDYgKzI4NCwyMiBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZmFicmljX3JlZ2xvZ2luOiBJc3N1ZSBmYWJyaWMgcmVnaXN0cmF0aW9uIGxvZ2luIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgZmFicmljIHJlZ2lzdHJhdGlvbiBsb2dpbiBmb3IgYSBAdnBvcnQuIEFuCisgKiBhY3RpdmUgbmRscCBub2RlIHdpdGggRmFicmljX0RJRCBtdXN0IGFscmVhZHkgZXhpc3QgZm9yIHRoaXMgQHZwb3J0LgorICogVGhlIHJvdXRpbmUgaW52b2tlcyB0d28gbWFpbGJveCBjb21tYW5kcyB0byBjYXJyeSBvdXQgZmFicmljIHJlZ2lzdHJhdGlvbgorICogbG9naW4gdGhyb3VnaCB0aGUgSEJBIGZpcm13YXJlOiB0aGUgZmlyc3QgbWFpbGJveCBjb21tYW5kIHJlcXVlc3RzIHRoZQorICogSEJBIHRvIHBlcmZvcm0gbGluayBjb25maWd1cmF0aW9uIGZvciB0aGUgQHZwb3J0OyBhbmQgdGhlIHNlY29uZCBtYWlsYm94CisgKiBjb21tYW5kIHJlcXVlc3RzIHRoZSBIQkEgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGZhYnJpYyByZWdpc3RyYXRpb24gbG9naW4KKyAqIHdpdGggdGhlIEB2cG9ydC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gc3VjY2Vzc2Z1bGx5IGlzc3VlZCBmYWJyaWMgcmVnaXN0cmF0aW9uIGxvZ2luIGZvciBAdnBvcnQKKyAqICAgLUVOWElPIC0tIGZhaWxlZCB0byBpc3N1ZSBmYWJyaWMgcmVnaXN0cmF0aW9uIGxvZ2luIGZvciBAdnBvcnQKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfaXNzdWVfZmFicmljX3JlZ2xvZ2luKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTMxMyw2ICszODAsMjYgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfZmxvZ2lfZmFicmljOiBDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBmbG9naSB0byBhIGZhYnJpYyBwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQHNwOiBwb2ludGVyIHRvIHNlcnZpY2UgcGFyYW1ldGVyIGRhdGEgc3RydWN0dXJlLgorICogQGlyc3A6IHBvaW50ZXIgdG8gdGhlIElPQ0Igd2l0aGluIHRoZSBscGZjIHJlc3BvbnNlIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIGxwZmNfY21wbF9lbHNfZmxvZ2koKSBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNvbXBsZXRpb24gb2YgYSBGYWJyaWMgTG9naW4gKEZMT0dJKSBpbnRvIGEgZmFicmljCisgKiBwb3J0IGluIGEgZmFicmljIHRvcG9sb2d5LiBJdCBwcm9wZXJseSBzZXRzIHVwIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBAbmRscAorICogZnJvbSB0aGUgSU9DQiByZXNwb25zZS4gSXQgYWxzbyBjaGVjayB0aGUgbmV3bHkgYXNzaWduZWQgTl9Qb3J0IElEIHRvIHRoZQorICogQHZwb3J0IGFnYWluc3QgdGhlIHByZXZpb3VzbHkgYXNzaWduZWQgTl9Qb3J0IElELiBJZiBpdCBpcyBkaWZmZXJlbnQgZnJvbQorICogdGhlIHByZXZpb3VzbHkgYXNzaWduZWQgRGVzdGluYXRpb24gSUQgKERJRCksIHRoZSBscGZjX3VucmVnX3JwaSgpIHJvdXRpbmUKKyAqIGlzIGludm9rZWQgb24gYWxsIHRoZSByZW1haW5pbmcgbm9kZXMgd2l0aCB0aGUgQHZwb3J0IHRvIHVucmVnaXN0ZXIgdGhlCisgKiBSZW1vdGUgUG9ydCBJbmRpY2F0b3JzIChSUElzKS4gRmluYWxseSwgdGhlIGxwZmNfaXNzdWVfZmFicmljX3JlZ2xvZ2luKCkKKyAqIGlzIGludm9rZWQgdG8gcmVnaXN0ZXIgbG9naW4gdG8gdGhlIGZhYnJpYy4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2VzcyAoY3VycmVudGx5LCBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2NtcGxfZWxzX2Zsb2dpX2ZhYnJpYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkJICAgc3RydWN0IHNlcnZfcGFybSAqc3AsIElPQ0JfdCAqaXJzcCkKQEAgLTM4Nyw3ICs0NzQsNyBAQAogCQkgKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5wLCBuZXh0X25wLAogCQkJCQkmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKLQkJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSkKKwkJCWlmICghTkxQX0NIS19OT0RFX0FDVChucCkpCiAJCQkJY29udGludWU7CiAJCQlpZiAoKG5wLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9OUFJfTk9ERSkgfHwKIAkJCQkgICAhKG5wLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpKQpAQCAtNDE2LDkgKzUwMywyNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogV2UgRkxPR0llZCBpbnRvIGFuIE5Qb3J0LCBpbml0aWF0ZSBwdDJwdCBwcm90b2NvbAotICovCisvKioKKyAqIGxwZmNfY21wbF9lbHNfZmxvZ2lfbnBvcnQ6IENvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGZsb2dpIHRvIGFuIE5fUG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBzcDogcG9pbnRlciB0byBzZXJ2aWNlIHBhcmFtZXRlciBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBieSB0aGUgbHBmY19jbXBsX2Vsc19mbG9naSgpIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY29tcGxldGlvbiBvZiBhIEZhYnJpYyBMb2dpbiAoRkxPR0kpIGludG8gYW4gTl9Qb3J0CisgKiBpbiBhIHBvaW50LXRvLXBvaW50IHRvcG9sb2d5LiBGaXJzdCwgdGhlIEB2cG9ydCdzIE5fUG9ydCBOYW1lIGlzIGNvbXBhcmVkCisgKiB3aXRoIHRoZSByZWNlaXZlZCBOX1BvcnQgTmFtZTogaWYgdGhlIEB2cG9ydCdzIE5fUG9ydCBOYW1lIGlzIGdyZWF0ZXIgdGhhbgorICogdGhlIHJlY2VpdmVkIE5fUG9ydCBOYW1lIGxleGljb2dyYXBoaWNhbGx5LCB0aGlzIG5vZGUgc2hhbGwgYXNzaWduIGxvY2FsCisgKiBOX1BvcnQgSUQgKFBUMlBUX0xvY2FsSUQ6IDEpIGFuZCByZW1vdGUgTl9Qb3J0IElEIChQVDJQVF9SZW1vdGVJRDogMikgYW5kCisgKiB3aWxsIHNlbmQgb3V0IFBvcnQgTG9naW4gKFBMT0dJKSB3aXRoIHRoZSBOX1BvcnQgSURzIGFzc2lnbmVkLiBPdGhlcndpc2UsCisgKiB0aGlzIG5vZGUgc2hhbGwganVzdCB3YWl0IGZvciB0aGUgcmVtb3RlIG5vZGUgdG8gaXNzdWUgUExPR0kgYW5kIGFzc2lnbgorICogTl9Qb3J0IElEcy4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2VzcworICogICAtRU5YSU8gLSBGYWlsCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2NtcGxfZWxzX2Zsb2dpX25wb3J0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCQkgIHN0cnVjdCBzZXJ2X3Bhcm0gKnNwKQpAQCAtNTE2LDYgKzYyMCwyOSBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19mbG9naTogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZmxvZ2kuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgdG9wLWxldmVsIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGlzc3VpbmcKKyAqIGEgRmFicmljIExvZ2luIChGTE9HSSkgY29tbWFuZC4gSWYgdGhlIHJlc3BvbnNlIElPQ0IgcmVwb3J0ZWQgZXJyb3IsCisgKiB0aGUgbHBmY19lbHNfcmV0cnkoKSByb3V0aW5lIHNoYWxsIGJlIGludm9rZWQgdG8gcmV0cnkgdGhlIEZMT0dJLiBJZgorICogcmV0cnkgaGFzIGJlZW4gbWFkZSAoZWl0aGVyIGltbWVkaWF0ZWx5IG9yIGRlbGF5ZWQgd2l0aCBscGZjX2Vsc19yZXRyeSgpCisgKiByZXR1cm5pbmcgMSksIHRoZSBjb21tYW5kIElPQ0Igd2lsbCBiZSByZWxlYXNlZCBhbmQgZnVuY3Rpb24gcmV0dXJuZWQuCisgKiBJZiB0aGUgcmV0cnkgYXR0ZW1wdCBoYXMgYmVlbiBnaXZlbiB1cCAocG9zc2libHkgcmVhY2ggdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiByZXRyaWVzKSwgb25lIGFkZGl0aW9uYWwgZGVjcmVtZW50IG9mIG5kbHAgcmVmZXJlbmNlIHNoYWxsIGJlCisgKiBpbnZva2VkIGJlZm9yZSBnb2luZyBvdXQgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBjb21tYW5kIElPQ0IuIFRoaXMgd2lsbAorICogYWN0dWFsbHkgcmVsZWFzZSB0aGUgcmVtb3RlIG5vZGUgKE5vdGUsIGxwZmNfZWxzX2ZyZWVfaW9jYigpIHdpbGwgYWxzbworICogaW52b2tlIG9uZSBkZWNyZW1lbnQgb2YgbmRscCByZWZlcmVuY2UgY291bnQpLiBJZiBubyBlcnJvciByZXBvcnRlZCBpbgorICogdGhlIElPQ0Igc3RhdHVzLCB0aGUgY29tbWFuZCBQb3J0IElEIGZpZWxkIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAqIHRoaXMgaXMgYSBwb2ludC10by1wb2ludCB0b3BvbG9neSBvciBhIGZhYnJpYyB0b3BvbG9neTogaWYgdGhlIFBvcnQgSUQKKyAqIGZpZWxkIGlzIGFzc2lnbmVkLCBpdCBpcyBhIGZhYnJpYyB0b3BvbG9neTsgb3RoZXJ3aXNlLCBpdCBpcyBhCisgKiBwb2ludC10by1wb2ludCB0b3BvbG9neS4gVGhlIHJvdXRpbmUgbHBmY19jbXBsX2Vsc19mbG9naV9mYWJyaWMoKSBvcgorICogbHBmY19jbXBsX2Vsc19mbG9naV9ucG9ydCgpIHNoYWxsIGJlIGludm9rZWQgYWNjb3JkaW5nbHkgdG8gaGFuZGxlIHRoZQorICogc3BlY2lmaWMgdG9wb2xvZ3kgY29tcGxldGlvbiBjb25kaXRpb25zLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfZmxvZ2koc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtNjE4LDYgKzc0NSwyOCBAQAogCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBjbWRpb2NiKTsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19mbG9naTogSXNzdWUgYW4gZmxvZ2kgaW9jYiBjb21tYW5kIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBGYWJyaWMgTG9naW4gKEZMT0dJKSBSZXF1ZXN0IEVMUyBjb21tYW5kCisgKiBmb3IgYSBAdnBvcnQuIFRoZSBpbml0aWF0b3Igc2VydmljZSBwYXJhbWV0ZXJzIGFyZSBwdXQgaW50byB0aGUgcGF5bG9hZAorICogb2YgdGhlIEZMT0dJIFJlcXVlc3QgSU9DQiBhbmQgdGhlIHRvcC1sZXZlbCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyCisgKiB0byBscGZjX2NtcGxfZWxzX2Zsb2dpKCkgcm91dGluZSBpcyBwdXQgdG8gdGhlIElPQ0IgY29tcGxldGlvbiBjYWxsYmFjaworICogZnVuY3Rpb24gZmllbGQuIFRoZSBscGZjX2lzc3VlX2ZhYnJpY19pb2NiIHJvdXRpbmUgaXMgaW52b2tlZCB0byBzZW5kCisgKiBvdXQgRkxPR0kgRUxTIGNvbW1hbmQgd2l0aCBvbmUgb3V0c3RhbmRpbmcgZmFicmljIElPQ0IgYXQgYSB0aW1lLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgRkxPR0kgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIHN1Y2Nlc3NmdWxseSBpc3N1ZWQgZmxvZ2kgaW9jYiBmb3IgQHZwb3J0CisgKiAgIDEgLSBmYWlsZWQgdG8gaXNzdWUgZmxvZ2kgaW9jYiBmb3IgQHZwb3J0CisgKiovCiBzdGF0aWMgaW50CiBscGZjX2lzc3VlX2Vsc19mbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkgICAgIHVpbnQ4X3QgcmV0cnkpCkBAIC02OTQsNiArODQzLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfYWJvcnRfZmxvZ2k6IEFib3J0IGFsbCBvdXRzdGFuZGluZyBmbG9naSBpb2Nicy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhYm9ydHMgYWxsIHRoZSBvdXRzdGFuZGluZyBGYWJyaWMgTG9naW4gKEZMT0dJKSBJT0NCcworICogd2l0aCBhIEBwaGJhLiBUaGlzIHJvdXRpbmUgd2Fsa3MgYWxsIHRoZSBvdXRzdGFuZGluZyBJT0NCcyBvbiB0aGUgdHhjbXBscQorICogbGlzdCBhbmQgaXNzdWVzIGFuIGFib3J0IElPQ0IgY29tbW9uZCBvbiBlYWNoIG91dHN0YW5kaW5nIElPQ0IgdGhhdAorICogY29udGFpbnMgYSBhY3RpdmUgRmFicmljX0RJRCBuZGxwLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0byBpc3N1ZQorICogdGhlIGFib3J0IElPQ0IgY29tbWFuZCBvbiBhbGwgdGhlIG91dHN0YW5kaW5nIElPQ0JzLCB0aHVzIHdoZW4gdGhpcworICogZnVuY3Rpb24gcmV0dXJucywgaXQgZG9lcyBub3QgZ3VhcmFudGVlIGFsbCB0aGUgSU9DQnMgYXJlIGFjdHVhbGx5IGFib3J0ZWQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Vzc2Z1bGx5IGlzc3VlZCBhYm9ydCBpb2NiIG9uIGFsbCBvdXRzdGFuZGluZyBmbG9naXMgKEFsd2F5cyAwKQorICoqLwogaW50CiBscGZjX2Vsc19hYm9ydF9mbG9naShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC03MjksNiArODkyLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19pbml0aWFsX2Zsb2dpOiBJc3N1ZSBhbiBpbml0aWFsIGZhYnJpYyBsb2dpbiBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhbiBpbml0aWFsIEZhYnJpYyBMb2dpbiAoRkxPR0kpIGZvciB0aGUgQHZwb3J0CisgKiBzcGVjaWZpZWQuIEl0IGZpcnN0IHNlYXJjaGVzIHRoZSBuZGxwIHdpdGggdGhlIEZhYnJpY19ESUQgKDB4ZmZmZmZlKSBmcm9tCisgKiB0aGUgQHZwb3J0J3MgbmRscCBsaXN0LiBJZiBubyBzdWNoIG5kbHAgZm91bmQsIGl0IHdpbGwgY3JlYXRlIGFuIG5kbHAgYW5kCisgKiBwdXQgaXQgaW50byB0aGUgQHZwb3J0J3MgbmRscCBsaXN0LiBJZiBhbiBpbmFjdGl2ZSBuZGxwIGZvdW5kIG9uIHRoZSBsaXN0LAorICogaXQgd2lsbCBqdXN0IGJlIGVuYWJsZWQgYW5kIG1hZGUgYWN0aXZlLiBUaGUgbHBmY19pc3N1ZV9lbHNfZmxvZ2koKSByb3V0aW5lCisgKiBpcyB0aGVuIGludm9rZWQgd2l0aCB0aGUgQHZwb3J0IGFuZCB0aGUgbmRscCB0byBwZXJmb3JtIHRoZSBGTE9HSSBmb3IgdGhlCisgKiBAdnBvcnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIGZhaWxlZCB0byBpc3N1ZSBpbml0aWFsIGZsb2dpIGZvciBAdnBvcnQKKyAqICAgMSAtIHN1Y2Nlc3NmdWxseSBpc3N1ZWQgaW5pdGlhbCBmbG9naSBmb3IgQHZwb3J0CisgKiovCiBpbnQKIGxwZmNfaW5pdGlhbF9mbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC03NjQsNiArOTQzLDIyIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19pbml0aWFsX2ZkaXNjOiBJc3N1ZSBhbiBpbml0aWFsIGZhYnJpYyBkaXNjb3ZlcnkgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYW4gaW5pdGlhbCBGYWJyaWMgRGlzY292ZXIgKEZESVNDKSBmb3IgdGhlIEB2cG9ydAorICogc3BlY2lmaWVkLiBJdCBmaXJzdCBzZWFyY2hlcyB0aGUgbmRscCB3aXRoIHRoZSBGYWJyaWNfRElEICgweGZmZmZmZSkgZnJvbQorICogdGhlIEB2cG9ydCdzIG5kbHAgbGlzdC4gSWYgbm8gc3VjaCBuZGxwIGZvdW5kLCBpdCB3aWxsIGNyZWF0ZSBhbiBuZGxwIGFuZAorICogcHV0IGl0IGludG8gdGhlIEB2cG9ydCdzIG5kbHAgbGlzdC4gSWYgYW4gaW5hY3RpdmUgbmRscCBmb3VuZCBvbiB0aGUgbGlzdCwKKyAqIGl0IHdpbGwganVzdCBiZSBlbmFibGVkIGFuZCBtYWRlIGFjdGl2ZS4gVGhlIGxwZmNfaXNzdWVfZWxzX2ZkaXNjKCkgcm91dGluZQorICogaXMgdGhlbiBpbnZva2VkIHdpdGggdGhlIEB2cG9ydCBhbmQgdGhlIG5kbHAgdG8gcGVyZm9ybSB0aGUgRkRJU0MgZm9yIHRoZQorICogQHZwb3J0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBmYWlsZWQgdG8gaXNzdWUgaW5pdGlhbCBmZGlzYyBmb3IgQHZwb3J0CisgKiAgIDEgLSBzdWNjZXNzZnVsbHkgaXNzdWVkIGluaXRpYWwgZmRpc2MgZm9yIEB2cG9ydAorICoqLwogaW50CiBscGZjX2luaXRpYWxfZmRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtNzk3LDYgKzk5MiwxNyBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfbW9yZV9wbG9naTogQ2hlY2sgYW5kIGlzc3VlIHJlbWFpbmluZyBwbG9naXMgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3Mgd2hldGhlciB0aGVyZSBhcmUgbW9yZSByZW1haW5pbmcgUG9ydCBMb2dpbnMKKyAqIChQTE9HSSkgdG8gYmUgaXNzdWVkIGZvciB0aGUgQHZwb3J0LiBJZiBzbywgaXQgd2lsbCBpbnZva2UgdGhlIHJvdXRpbmUKKyAqIGxwZmNfZWxzX2Rpc2NfcGxvZ2koKSB0byBnbyB0aHJvdWdoIHRoZSBOb2RlIFBvcnQgUmVjb3ZlcnkgKE5QUikgbm9kZXMKKyAqIHRvIGlzc3VlIEVMUyBQTE9HSXMgdXAgdG8gdGhlIGNvbmZpZ3VyZWQgZGlzY292ZXIgdGhyZWFkcyB3aXRoIHRoZQorICogQHZwb3J0IChAdnBvcnQtPmNmZ19kaXNjb3ZlcnlfdGhyZWFkcykuIFRoZSBmdW5jdGlvbiBhbHNvIGRlY3JlbWVudAorICogdGhlIEB2cG9ydCdzIG51bV9kaXNjX25vZGUgYnkgMSBpZiBpdCBpcyBub3QgYWxyZWFkeSAwLgorICoqLwogdm9pZAogbHBmY19tb3JlX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTgxOSw2ICsxMDI1LDM3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfcGxvZ2lfY29uZmlybV9ucG9ydDogQ29uZmlybSBwb2xvZ2kgd3dwbiBtYXRjaGVzIHN0b3JlZCBuZGxwLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcHJzcDogcG9pbnRlciB0byByZXNwb25zZSBJT0NCIHBheWxvYWQuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIGFuZCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgV1dQTiBvZiBhbiBOX1BvcnQsIHJldHJpZXZlZAorICogZnJvbSBhIFBMT0dJLCBtYXRjaGVzIHRoZSBXV1BOIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBAbmRscCBmb3IgdGhhdCBOX1BPcnQuCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIGFyZSBjb25zaWRlcmVkIE5fUG9ydCBjb25maXJtZWQ6CisgKiAxKSBUaGUgTl9Qb3J0IGlzIGEgRmFicmljIG5kbHA7IDIpIFRoZSBAbmRscCBpcyBvbiB2cG9ydCBsaXN0IGFuZCBtYXRjaGVzCisgKiB0aGUgV1dQTiBvZiB0aGUgTl9Qb3J0IGxvZ2dlZCBpbnRvOyAzKSBUaGUgQG5kbHAgaXMgbm90IG9uIHZwb3J0IGxpc3QgYnV0CisgKiBpdCBkb2VzIG5vdCBoYXZlIFdXUE4gYXNzaWduZWQgZWl0aGVyLiBJZiB0aGUgV1dQTiBpcyBjb25maXJtZWQsIHRoZQorICogcG9pbnRlciB0byB0aGUgQG5kbHAgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhlIFdXUE4gaXMgbm90IGNvbmZpcm1lZDoKKyAqIDEpIGlmIHRoZXJlIGlzIGEgbm9kZSBvbiB2cG9ydCBsaXN0IG90aGVyIHRoYW4gdGhlIEBuZGxwIHdpdGggdGhlIHNhbWUKKyAqIFdXUE4gb2YgdGhlIE5fUG9ydCBQTE9HSSBsb2dnZWQgaW50bywgdGhlIGxwZmNfdW5yZWdfcnBpKCkgd2lsbCBiZSBpbnZva2VkCisgKiBvbiB0aGF0IG5vZGUgdG8gcmVsZWFzZSB0aGUgUlBJIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZTsgMikgaWYgdGhlcmUgaXMKKyAqIG5vIG5vZGUgZm91bmQgb24gdnBvcnQgbGlzdCB3aXRoIHRoZSBzYW1lIFdXUE4gb2YgdGhlIE5fUG9ydCBQTE9HSSBsb2dnZWQKKyAqIGludG8sIGEgbmV3IG5vZGUgc2hhbGwgYmUgYWxsb2NhdGVkIChvciBhY3RpdmF0ZWQpLiBJbiBlaXRoZXIgY2FzZSwgdGhlCisgKiBwYXJhbWV0ZXJzIG9mIHRoZSBAbmRscCBzaGFsbCBiZSBjb3BpZWQgdG8gdGhlIG5ld19uZGxwLCB0aGUgQG5kbHAgc2hhbGwKKyAqIGJlIHJlbGVhc2VkIGFuZCB0aGUgbmV3X25kbHAgc2hhbGwgYmUgcHV0IG9uIHRvIHRoZSB2cG9ydCBub2RlIGxpc3QgYW5kCisgKiBpdHMgcG9pbnRlciByZXR1cm5lZCBhcyB0aGUgY29uZmlybWVkIG5vZGUuCisgKgorICogTm90ZSB0aGF0IGJlZm9yZSB0aGUgQG5kbHAgZ290ICJyZWxlYXNlZCIsIHRoZSBrZWVwRElEIGZyb20gbm90LW1hdGNoaW5nCisgKiBvciBpbmFjdGl2ZSAibmV3X25kbHAiIG9uIHRoZSB2cG9ydCBub2RlIGxpc3QgaXMgYXNzaWduZWQgdG8gdGhlIG5scF9ESUQKKyAqIG9mIHRoZSBAbmRscC4gVGhpcyBpcyBiZWNhdXNlIHRoZSByZWxlYXNlIG9mIEBuZGxwIGlzIGFjdHVhbGx5IHRvIHB1dCBpdAorICogaW50byBhbiBpbmFjdGl2ZSBzdGF0ZSBvbiB0aGUgdnBvcnQgbm9kZSBsaXN0IGFuZCB0aGUgdnBvcnQgbm9kZSBsaXN0CisgKiBtYW5hZ2VtZW50IGFsZ29yaXRobSBkb2VzIG5vdCBhbGxvdyB0d28gbm9kZSB3aXRoIGEgc2FtZSBESUQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgcG9pbnRlciB0byB0aGUgUExPR0kgTl9Qb3J0IEBuZGxwCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfbm9kZWxpc3QgKgogbHBmY19wbG9naV9jb25maXJtX25wb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgKnByc3AsCiAJCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC05MjIsNiArMTE1OSwxNyBAQAogCXJldHVybiBuZXdfbmRscDsKIH0KIAorLyoqCisgKiBscGZjX2VuZF9yc2NuOiBDaGVjayBhbmQgaGFuZGxlIG1vcmUgcnNjbiBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGNoZWNrcyB3aGV0aGVyIG1vcmUgUmVnaXN0cmF0aW9uIFN0YXRlIENoYW5nZQorICogTm90aWZpY2F0aW9ucyAoUlNDTnMpIGNhbWUgaW4gd2hpbGUgdGhlIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lIHdhcyBpbgorICogdGhlIEZDX1JTQ05fTU9ERS4gSWYgc28sIHRoZSBscGZjX2Vsc19oYW5kbGVfcnNjbigpIHJvdXRpbmUgd2lsbCBiZQorICogaW52b2tlZCB0byBoYW5kbGUgdGhlIGFkZGl0aW9uYWwgUlNDTnMgZm9yIHRoZSBAdnBvcnQuIE90aGVyd2lzZSwgdGhlCisgKiBGQ19SU0NOX01PREUgYml0IHdpbGwgYmUgY2xlYXJlZCB3aXRoIHRoZSBAdnBvcnQgdG8gbWFyayBhcyB0aGUgZW5kIG9mCisgKiBoYW5kbGluZyB0aGUgUlNDTnMuCisgKiovCiB2b2lkCiBscGZjX2VuZF9yc2NuKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTk0Myw2ICsxMTkxLDI2IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfcGxvZ2k6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBsb2dpLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGlzc3VpbmcgdGhlIFBvcnQKKyAqIExvZ2luIChQTE9HSSkgY29tbWFuZC4gRm9yIFBMT0dJIGNvbXBsZXRpb24sIHRoZXJlIG11c3QgYmUgYW4gYWN0aXZlCisgKiBuZGxwIG9uIHRoZSB2cG9ydCBub2RlIGxpc3QgdGhhdCBtYXRjaGVzIHRoZSByZW1vdGUgbm9kZSBJRCBmcm9tIHRoZQorICogUExPR0kgcmVwb25zZSBJT0NCLiBJZiBzdWNoIG5kbHAgZG9lcyBub3QgZXhpc3QsIHRoZSBQTE9HSSBpcyBzaW1wbHkKKyAqIGlnbm9yZWQgYW5kIGNvbW1hbmQgSU9DQiByZWxlYXNlZC4gVGhlIFBMT0dJIHJlc3BvbnNlIElPQ0Igc3RhdHVzIGlzCisgKiBjaGVja2VkIGZvciBlcnJvciBjb25kaXRvbnMuIElmIHRoZXJlIGlzIGVycm9yIHN0YXR1cyByZXBvcnRlZCwgUExPR0kKKyAqIHJldHJ5IHNoYWxsIGJlIGF0dGVtcHRlZCBieSBpbnZva2luZyB0aGUgbHBmY19lbHNfcmV0cnkoKSByb3V0aW5lLgorICogT3RoZXJ3aXNlLCB0aGUgbHBmY19wbG9naV9jb25maXJtX25wb3J0KCkgcm91dGluZSBzaGFsbCBiZSBpbnZva2VkIG9uCisgKiB0aGUgbmRscCBhbmQgdGhlIE5MUF9FVlRfQ01QTF9QTE9HSSBzdGF0ZSB0byB0aGUgRGlzY292ZXIgU3RhdGUgTWFjaGluZQorICogKERTTSkgaXMgc2V0IGZvciB0aGlzIFBMT0dJIGNvbXBsZXRpb24uIEZpbmFsbHksIGl0IGNoZWNrcyB3aGV0aGVyCisgKiB0aGVyZSBhcmUgYWRkaXRpb25hbCBOX1BvcnQgbm9kZXMgd2l0aCB0aGUgdnBvcnQgdGhhdCBuZWVkIHRvIHBlcmZvcm0KKyAqIFBMT0dJLiBJZiBzbywgdGhlIGxwZmNfbW9yZV9wbG9naSgpIHJvdXRpbmUgaXMgaW52b2tlZCB0byBpc3N1ZSBhZGRpdGlvbgorICogUExPR0lzLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMTA0OCw2ICsxMzE2LDI3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX3Bsb2dpOiBJc3N1ZSBhbiBwbG9naSBpb2NiIGNvbW1hbmQgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGRpZDogZGVzdGluYXRpb24gcG9ydCBpZGVudGlmaWVyLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBQb3J0IExvZ2luIChQTE9HSSkgY29tbWFuZCB0byBhIHJlbW90ZSBOX1BvcnQKKyAqICh3aXRoIHRoZSBAZGlkKSBmb3IgYSBAdnBvcnQuIEJlZm9yZSBpc3N1aW5nIGEgUExPR0kgdG8gYSByZW1vdGUgTl9Qb3J0LAorICogdGhlIG5kbHAgd2l0aCB0aGUgcmVtb3RlIE5fUG9ydCBESUQgbXVzdCBleGlzdCBvbiB0aGUgQHZwb3J0J3MgbmRscCBsaXN0LgorICogVGhpcyByb3V0aW5lIGNvbnN0cnVjdHMgdGhlIHByb3BlciBmZWlsZHMgb2YgdGhlIFBMT0dJIElPQ0IgYW5kIGludm9rZXMKKyAqIHRoZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0byBzZW5kIG91dCBQTE9HSSBFTFMgY29tbWFuZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIFBMT0dJIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGEgcGxvZ2kgZm9yIEB2cG9ydAorICogICAxIC0gZmFpbGVkIHRvIGlzc3VlIGEgcGxvZ2kgZm9yIEB2cG9ydAorICoqLwogaW50CiBscGZjX2lzc3VlX2Vsc19wbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQzMl90IGRpZCwgdWludDhfdCByZXRyeSkKIHsKQEAgLTExMDYsNiArMTM5NSwxOSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfcHJsaTogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcHJsaS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhIFByb2Nlc3MgTG9naW4KKyAqIChQUkxJKSBFTFMgY29tbWFuZC4gVGhlIFBSTEkgcmVzcG9uc2UgSU9DQiBzdGF0dXMgaXMgY2hlY2tlZCBmb3IgZXJyb3IKKyAqIHN0YXR1cy4gSWYgdGhlcmUgaXMgZXJyb3Igc3RhdHVzIHJlcG9ydGVkLCBQUkxJIHJldHJ5IHNoYWxsIGJlIGF0dGVtcHRlZAorICogYnkgaW52b2tpbmcgdGhlIGxwZmNfZWxzX3JldHJ5KCkgcm91dGluZS4gT3RoZXJ3aXNlLCB0aGUgc3RhdGUKKyAqIE5MUF9FVlRfQ01QTF9QUkxJIGlzIHNlbnQgdG8gdGhlIERpc2NvdmVyIFN0YXRlIE1hY2hpbmUgKERTTSkgZm9yIHRoaXMKKyAqIG5kbHAgdG8gbWFyayB0aGUgUFJMSSBjb21wbGV0aW9uLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfcHJsaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTExNjQsNiArMTQ2NiwyNyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19wcmxpOiBJc3N1ZSBhIHBybGkgaW9jYiBjb21tYW5kIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBQcm9jZXNzIExvZ2luIChQUkxJKSBFTFMgY29tbWFuZCBmb3IgdGhlCisgKiBAdnBvcnQuIFRoZSBQUkxJIHNlcnZpY2UgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGluIHRoZSBwYXlsb2FkIG9mIHRoZQorICogUFJMSSBSZXF1ZXN0IGNvbW1hbmQgYW5kIHRoZSBwb2ludGVyIHRvIGxwZmNfY21wbF9lbHNfcHJsaSgpIHJvdXRpbmUKKyAqIGlzIHB1dCB0byB0aGUgSU9DQiBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmMgZmllbGQgYmVmb3JlIGludm9raW5nIHRoZQorICogcm91dGluZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgdG8gc2VuZCBvdXQgUFJMSSBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgUFJMSSBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gc3VjY2Vzc2Z1bGx5IGlzc3VlZCBwcmxpIGlvY2IgY29tbWFuZCBmb3IgQHZwb3J0CisgKiAgIDEgLSBmYWlsZWQgdG8gaXNzdWUgcHJsaSBpb2NiIGNvbW1hbmQgZm9yIEB2cG9ydAorICoqLwogaW50CiBscGZjX2lzc3VlX2Vsc19wcmxpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCSAgICB1aW50OF90IHJldHJ5KQpAQCAtMTIzMyw2ICsxNTU2LDkyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19yc2NuX2Rpc2M6IFBlcmZvcm0gcnNjbiBkaXNjb3ZlcnkgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwZXJmb3JtcyBSZWdpc3RyYXRpb24gU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbiAoUlNDTikKKyAqIGRpc2NvdmVyeSBmb3IgYSBAdnBvcnQuIElmIHRoZSBAdnBvcnQncyBub2RlIHBvcnQgcmVjb3ZlcnkgY291bnQgaXMgbm90CisgKiB6ZXJvLCBpdCB3aWxsIGludm9rZSB0aGUgbHBmY19lbHNfZGlzY19wbG9naSgpIHRvIHBlcmZvcm0gUExPR0kgZm9yIGFsbAorICogdGhlIG5vZGVzIHRoYXQgbmVlZCByZWNvdmVyeS4gSWYgbm9uZSBvZiB0aGUgUExPR0kgd2VyZSBuZWVkZWQgdGhyb3VnaAorICogdGhlIGxwZmNfZWxzX2Rpc2NfcGxvZ2koKSByb3V0aW5lLCB0aGUgbHBmY19lbmRfcnNjbigpIHJvdXRpbmUgc2hhbGwgYmUKKyAqIGludm9rZWQgdG8gY2hlY2sgYW5kIGhhbmRsZSBwb3NzaWJsZSBtb3JlIFJTQ04gY2FtZSBpbiBkdXJpbmcgdGhlIHBlcmlvZAorICogb2YgcHJvY2Vzc2luZyB0aGUgY3VycmVudCBvbmVzLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfcnNjbl9kaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKKworCS8qIFJTQ04gZGlzY292ZXJ5ICovCisJLyogZ28gdGhydSBOUFIgbm9kZXMgYW5kIGlzc3VlIEVMUyBQTE9HSXMgKi8KKwlpZiAodnBvcnQtPmZjX25wcl9jbnQpCisJCWlmIChscGZjX2Vsc19kaXNjX3Bsb2dpKHZwb3J0KSkKKwkJCXJldHVybjsKKworCWxwZmNfZW5kX3JzY24odnBvcnQpOworfQorCisvKioKKyAqIGxwZmNfYWRpc2NfZG9uZTogQ29tcGxldGUgdGhlIGFkaXNjIHBoYXNlIG9mIGRpc2NvdmVyeS4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBscGZjX3Zwb3J0IGhiYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGZpbmlzaGVkIGFsbCBBRElTQ3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZmluYWwgQURJU0MgaXMgY29tcGxldGVkIGR1cmluZyBkaXNjb3ZlcnkuCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgY2xlYXJpbmcgbGluayBhdHRlbnRpb24gb3IgaXNzdWluZyByZWdfdnBpIGRlcGVuZGluZworICogb24gd2hldGhlciBucGl2IGlzIGVuYWJsZWQuIFRoaXMgZnVuY3Rpb24gYWxzbyBraWNrcyBvZmYgdGhlIFBMT0dJIHBoYXNlIG9mCisgKiBkaXNjb3ZlcnkuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2tzIGhlbGQuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19hZGlzY19kb25lKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworCisJLyoKKwkgKiBGb3IgTlBJViwgY21wbF9yZWdfdnBpIHdpbGwgc2V0IHBvcnRfc3RhdGUgdG8gUkVBRFksCisJICogYW5kIGNvbnRpbnVlIGRpc2NvdmVyeS4KKwkgKi8KKwlpZiAoKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpICYmCisJICAgICEodnBvcnQtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpKSB7CisJCWxwZmNfaXNzdWVfcmVnX3ZwaShwaGJhLCB2cG9ydCk7CisJCXJldHVybjsKKwl9CisJLyoKKwkqIEZvciBTTEkyLCB3ZSBuZWVkIHRvIHNldCBwb3J0X3N0YXRlIHRvIFJFQURZCisJKiBhbmQgY29udGludWUgZGlzY292ZXJ5LgorCSovCisJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19WUE9SVF9SRUFEWSkgeworCQkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlcmUgaXMgbm90aGluZyB0byBBRElTQyAqLworCQlpZiAodnBvcnQtPnBvcnRfdHlwZSA9PSBMUEZDX1BIWVNJQ0FMX1BPUlQpCisJCQlscGZjX2lzc3VlX2NsZWFyX2xhKHBoYmEsIHZwb3J0KTsKKwkJaWYgKCEodnBvcnQtPmZjX2ZsYWcgJiBGQ19BQk9SVF9ESVNDT1ZFUlkpKSB7CisJCQl2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPSAwOworCQkJLyogZ28gdGhydSBOUFIgbGlzdCwgaXNzdWUgRUxTIFBMT0dJcyAqLworCQkJaWYgKHZwb3J0LT5mY19ucHJfY250KQorCQkJCWxwZmNfZWxzX2Rpc2NfcGxvZ2kodnBvcnQpOworCQkJaWYgKCF2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpIHsKKwkJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJCXZwb3J0LT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOworCQkJCWxwZmNfZW5kX3JzY24odnBvcnQpOworCQkJfQorCQl9CisJCXZwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19WUE9SVF9SRUFEWTsKKwl9IGVsc2UKKwkJbHBmY19yc2NuX2Rpc2ModnBvcnQpOworfQorCisvKioKKyAqIGxwZmNfbW9yZV9hZGlzYzogSXNzdWUgbW9yZSBhZGlzYyBhcyBuZWVkZWQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgbmRscHMgb24gYSBAdnBvcnQKKyAqIG5vZGUgbGlzdCBuZWVkIHRvIGhhdmUgQWRkcmVzcyBEaXNjb3ZlciAoQURJU0MpIGlzc3VlZC4gSWYgc28sIGl0IHdpbGwKKyAqIGludm9rZSB0aGUgbHBmY19lbHNfZGlzY19hZGlzYygpIHJvdXRpbmUgdG8gaXNzdWUgQURJU0Mgb24gdGhlIEB2cG9ydCdzCisgKiByZW1haW5pbmcgbm9kZXMgd2hpY2ggbmVlZCB0byBoYXZlIEFESVNDIHNlbnQuCisgKiovCiB2b2lkCiBscGZjX21vcmVfYWRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMTI1MiwyMyArMTY2MSwyNyBAQAogCQkvKiBnbyB0aHJ1IE5QUiBub2RlcyBhbmQgaXNzdWUgYW55IHJlbWFpbmluZyBFTFMgQURJU0NzICovCiAJCXNlbnRhZGlzYyA9IGxwZmNfZWxzX2Rpc2NfYWRpc2ModnBvcnQpOwogCX0KKwlpZiAoIXZwb3J0LT5udW1fZGlzY19ub2RlcykKKwkJbHBmY19hZGlzY19kb25lKHZwb3J0KTsKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkCi1scGZjX3JzY25fZGlzYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCi17Ci0JbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7Ci0KLQkvKiBSU0NOIGRpc2NvdmVyeSAqLwotCS8qIGdvIHRocnUgTlBSIG5vZGVzIGFuZCBpc3N1ZSBFTFMgUExPR0lzICovCi0JaWYgKHZwb3J0LT5mY19ucHJfY250KQotCQlpZiAobHBmY19lbHNfZGlzY19wbG9naSh2cG9ydCkpCi0JCQlyZXR1cm47Ci0KLQlscGZjX2VuZF9yc2NuKHZwb3J0KTsKLX0KLQorLyoqCisgKiBscGZjX2NtcGxfZWxzX2FkaXNjOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhZGlzYy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBpc3N1aW5nIHRoZSBBZGRyZXNzIERpc2NvdmVyCisgKiAoQURJU0MpIGNvbW1hbmQuIEl0IGZpcnN0IGNoZWNrcyB0byBzZWUgd2hldGhlciBsaW5rIHdlbnQgZG93biBkdXJpbmcKKyAqIHRoZSBkaXNjb3ZlcnkgcHJvY2Vzcy4gSWYgc28sIHRoZSBub2RlIHdpbGwgYmUgbWFya2VkIGFzIG5vZGUgcG9ydAorICogcmVjb3ZlcnkgZm9yIGlzc3VpbmcgZGlzY292ZXIgSU9DQiBieSB0aGUgbGluayBhdHRlbnRpb24gaGFuZGxlciBhbmQKKyAqIGV4aXQuIE90aGVyd2lzZSwgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBjaGVja2VkLiBJZiBlcnJvciB3YXMgcmVwb3J0ZWQKKyAqIGluIHRoZSByZXNwb25zZSBzdGF0dXMsIHRoZSBBRElTQyBjb21tYW5kIHNoYWxsIGJlIHJldHJpZWQgYnkgaW52b2tpbmcKKyAqIHRoZSBscGZjX2Vsc19yZXRyeSgpIHJvdXRpbmUuIE90aGVyd2lzZSwgaWYgbm8gZXJyb3Igd2FzIHJlcG9ydGVkIGluCisgKiB0aGUgcmVzcG9uc2Ugc3RhdHVzLCB0aGUgc3RhdGUgbWFjaGluZSBpcyBpbnZva2VkIHRvIHNldCB0cmFuc2l0aW9uCisgKiB3aXRoIHJlc3BlY3QgdG8gTkxQX0VWVF9DTVBMX0FESVNDIGV2ZW50LgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfYWRpc2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMTMzMyw1NyArMTc0NiwzNCBAQAogCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZSh2cG9ydCwgbmRscCwgY21kaW9jYiwKIAkJCQkJTkxQX0VWVF9DTVBMX0FESVNDKTsKIAotCWlmIChkaXNjICYmIHZwb3J0LT5udW1fZGlzY19ub2RlcykgewotCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG1vcmUgQURJU0NzIHRvIGJlIHNlbnQgKi8KKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG1vcmUgQURJU0NzIHRvIGJlIHNlbnQgKi8KKwlpZiAoZGlzYyAmJiB2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpCiAJCWxwZmNfbW9yZV9hZGlzYyh2cG9ydCk7Ci0KLQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBkb25lIHdpdGggQURJU0MgYXV0aGVudGljYXRpb24gKi8KLQkJaWYgKHZwb3J0LT5udW1fZGlzY19ub2RlcyA9PSAwKSB7Ci0JCQkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIEFESVNDICovCi0JCQkvKgotCQkJICogRm9yIE5QSVYsIGNtcGxfcmVnX3ZwaSB3aWxsIHNldCBwb3J0X3N0YXRlIHRvIFJFQURZLAotCQkJICogYW5kIGNvbnRpbnVlIGRpc2NvdmVyeS4KLQkJCSAqLwotCQkJaWYgKChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKSAmJgotCQkJICAgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkpIHsKLQkJCQlscGZjX2lzc3VlX3JlZ192cGkocGhiYSwgdnBvcnQpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJLyoKLQkJCSAqIEZvciBTTEkyLCB3ZSBuZWVkIHRvIHNldCBwb3J0X3N0YXRlIHRvIFJFQURZCi0JCQkgKiBhbmQgY29udGludWUgZGlzY292ZXJ5LgotCQkJICovCi0JCQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX1ZQT1JUX1JFQURZKSB7Ci0JCQkJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGlzIG5vdGhpbmcgdG8gQURJU0MgKi8KLQkJCQlpZiAodnBvcnQtPnBvcnRfdHlwZSA9PSBMUEZDX1BIWVNJQ0FMX1BPUlQpCi0JCQkJCWxwZmNfaXNzdWVfY2xlYXJfbGEocGhiYSwgdnBvcnQpOwotCi0JCQkJaWYgKCEodnBvcnQtPmZjX2ZsYWcgJiBGQ19BQk9SVF9ESVNDT1ZFUlkpKSB7Ci0JCQkJCXZwb3J0LT5udW1fZGlzY19ub2RlcyA9IDA7Ci0JCQkJCS8qIGdvIHRocnUgTlBSIGxpc3QsIGlzc3VlIEVMUyBQTE9HSXMgKi8KLQkJCQkJaWYgKHZwb3J0LT5mY19ucHJfY250KQotCQkJCQkJbHBmY19lbHNfZGlzY19wbG9naSh2cG9ydCk7Ci0KLQkJCQkJaWYgKCF2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpIHsKLQkJCQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJCQl2cG9ydC0+ZmNfZmxhZyAmPQotCQkJCQkJCX5GQ19ORElTQ19BQ1RJVkU7Ci0JCQkJCQlzcGluX3VubG9ja19pcnEoCi0JCQkJCQkJc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKLQkJCQkJfQotCQkJCX0KLQkJCQl2cG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfVlBPUlRfUkVBRFk7Ci0JCQl9IGVsc2UgewotCQkJCWxwZmNfcnNjbl9kaXNjKHZwb3J0KTsKLQkJCX0KLQkJfQotCX0KIG91dDoKIAlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYik7CiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX2FkaXNjOiBJc3N1ZSBhbiBhZGRyZXNzIGRpc2NvdmVyIGlvY2IgdG8gYW4gbm9kZSBvbiBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGFuIEFkZHJlc3MgRGlzY292ZXIgKEFESVNDKSBmb3IgYW4gQG5kbHAgb24gYQorICogQHZwb3J0LiBJdCBwcmVwYXJlcyB0aGUgcGF5bG9hZCBvZiB0aGUgQURJU0MgRUxTIGNvbW1hbmQsIHVwZGF0ZXMgdGhlCisgKiBhbmQgc3RhdGVzIG9mIHRoZSBuZGxwLCBhbmQgaW52b2tlcyB0aGUgbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUKKyAqIHRvIGlzc3VlIHRoZSBBRElTQyBFTFMgY29tbWFuZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFESVNDIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBzdWNjZXNzZnVsbHkgaXNzdWVkIGFkaXNjCisgKiAgIDEgLSBmYWlsZWQgdG8gaXNzdWUgYWRpc2MKKyAqKi8KIGludAogbHBmY19pc3N1ZV9lbHNfYWRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJICAgICB1aW50OF90IHJldHJ5KQpAQCAtMTQzNyw2ICsxODI3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19sb2dvOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsb2dvLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGlzc3VpbmcgdGhlIEVMUyBMb2dvdXQgKExPR08pCisgKiBjb21tYW5kLiBJZiBubyBlcnJvciBzdGF0dXMgd2FzIHJlcG9ydGVkIGZyb20gdGhlIExPR08gcmVzcG9uc2UsIHRoZQorICogc3RhdGUgbWFjaGluZSBvZiB0aGUgYXNzb2NpYXRlZCBuZGxwIHNoYWxsIGJlIGludm9rZWQgZm9yIHRyYW5zaXRpb24gd2l0aAorICogcmVzcGVjdCB0byBOTFBfRVZUX0NNUExfTE9HTyBldmVudC4gT3RoZXJ3aXNlLCBpZiBlcnJvciBzdGF0dXMgd2FzIHJlcG9ydGVkLAorICogdGhlIGxwZmNfZWxzX3JldHJ5KCkgcm91dGluZSB3aWxsIGJlIGludm9rZWQgdG8gcmV0cnkgdGhlIExPR08gY29tbWFuZC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX2xvZ28oc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0xNTAyLDYgKzE5MDQsMjYgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfbG9nbzogSXNzdWUgYSBsb2dvIHRvIGFuIG5vZGUgb24gYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGNvbnN0cnVjdHMgYW5kIGlzc3VlcyBhbiBFTFMgTG9nb3V0IChMT0dPKSBpb2NiIGNvbW1hbmQKKyAqIHRvIGEgcmVtb3RlIG5vZGUsIHJlZmVycmVkIGJ5IGFuIEBuZGxwIG9uIGEgQHZwb3J0LiBJdCBjb25zdHJ1Y3RzIHRoZQorICogcGF5bG9hZCBvZiB0aGUgSU9DQiwgcHJvcGVybHkgc2V0cyB1cCB0aGUgQG5kbHAgc3RhdGUsIGFuZCBpbnZva2VzIHRoZQorICogbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8gc2VuZCBvdXQgdGhlIExPR08gRUxTIGNvbW1hbmQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBMT0dPIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBzdWNjZXNzZnVsbHkgaXNzdWVkIGxvZ28KKyAqICAgMSAtIGZhaWxlZCB0byBpc3N1ZSBsb2dvCisgKiovCiBpbnQKIGxwZmNfaXNzdWVfZWxzX2xvZ28oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJICAgIHVpbnQ4X3QgcmV0cnkpCkBAIC0xNTYzLDYgKzE5ODUsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX2NtZDogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBlbHMgY29tbWFuZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGEgZ2VuZXJpYyBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBFTFMgY29tbWFuZHMuCisgKiBTcGVjaWZpY2FsbHksIGl0IGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBkb2VzIG5vdCBuZWVkIHRvIHBlcmZvcm0KKyAqIGFueSBjb21tYW5kIHNwZWNpZmljIG9wZXJhdGlvbnMuIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBFTFMgY29tbWFuZAorICogaXNzdWluZyByb3V0aW5lcyBmb3IgdGhlIEVMUyBTdGF0ZSBDaGFuZ2UgIFJlcXVlc3QgKFNDUiksCisgKiBscGZjX2lzc3VlX2Vsc19zY3IoKSwgYW5kIHRoZSBFTFMgRmlicmUgQ2hhbm5lbCBBZGRyZXNzIFJlc29sdXRpb24KKyAqIFByb3RvY29sIFJlc3BvbnNlIChGQVJQUikgcm91dGluZSwgbHBmY19pc3N1ZV9lbHNfZmFycHIoKS4gT3RoZXIgdGhhbgorICogY2VydGFpbiBkZWJ1ZyBsb2dnaW5ncywgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiBzaW1wbHkgaW52b2tlcyB0aGUKKyAqIGxwZmNfZWxzX2Noa19sYXR0KCkgcm91dGluZSB0byBjaGVjayB3aGV0aGVyIGxpbmsgd2VudCBkb3duIGR1cmluZyB0aGUKKyAqIGRpc2NvdmVyeSBwcm9jZXNzLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfY21kKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0xNTg3LDYgKzIwMjUsMjggQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfc2NyOiBJc3N1ZSBhIHNjciB0byBhbiBub2RlIG9uIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5wb3J0aWQ6IE5fUG9ydCBpZGVudGlmaWVyIHRvIHRoZSByZW1vdGUgbm9kZS4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgU3RhdGUgQ2hhbmdlIFJlcXVlc3QgKFNDUikgdG8gYSBmYWJyaWMgbm9kZQorICogb24gYSBAdnBvcnQuIFRoZSByZW1vdGUgbm9kZSBAbnBvcnRpZCBpcyBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24uIEl0CisgKiBmaXJzdCBzZWFyY2ggdGhlIEB2cG9ydCBub2RlIGxpc3QgdG8gZmluZCB0aGUgbWF0Y2hpbmcgbmRscC4gSWYgbm8gc3VjaAorICogbmRscCBpcyBmb3VuZCwgYSBuZXcgbmRscCBzaGFsbCBiZSBjcmVhdGVkIGZvciB0aGlzIChTQ1IpIHB1cnBvc2UuIEFuCisgKiBJT0NCIGlzIGFsbG9jYXRlZCwgcGF5bG9hZCBwcmVwYXJlZCwgYW5kIHRoZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkKKyAqIHJvdXRpbmUgaXMgaW52b2tlZCB0byBzZW5kIHRoZSBTQ1IgSU9DQi4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIFNDUiBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBzY3IgY29tbWFuZAorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIHNjciBjb21tYW5kCisgKiovCiBpbnQKIGxwZmNfaXNzdWVfZWxzX3NjcihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQzMl90IG5wb3J0aWQsIHVpbnQ4X3QgcmV0cnkpCiB7CkBAIC0xNjU5LDYgKzIxMTksMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19mYXJwcjogSXNzdWUgYSBmYXJwIHRvIGFuIG5vZGUgb24gYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbnBvcnRpZDogTl9Qb3J0IGlkZW50aWZpZXIgdG8gdGhlIHJlbW90ZSBub2RlLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBGaWJyZSBDaGFubmVsIEFkZHJlc3MgUmVzb2x1dGlvbiBSZXNwb25zZQorICogKEZBUlBSKSB0byBhIG5vZGUgb24gYSB2cG9ydC4gVGhlIHJlbW90ZSBub2RlIE5fUG9ydCBpZGVudGlmaWVyIChAbnBvcnRpZCkKKyAqIGlzIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbi4gSXQgZmlyc3Qgc2VhcmNoIHRoZSBAdnBvcnQgbm9kZSBsaXN0IHRvIGZpbmQKKyAqIHRoZSBtYXRjaGluZyBuZGxwLiBJZiBubyBzdWNoIG5kbHAgaXMgZm91bmQsIGEgbmV3IG5kbHAgc2hhbGwgYmUgY3JlYXRlZAorICogZm9yIHRoaXMgKEZBUlBSKSBwdXJwb3NlLiBBbiBJT0NCIGlzIGFsbG9jYXRlZCwgcGF5bG9hZCBwcmVwYXJlZCwgYW5kIHRoZQorICogbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgaXMgaW52b2tlZCB0byBzZW5kIHRoZSBGQVJQUiBFTFMgY29tbWFuZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIFBBUlBSIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGZhcnByIGNvbW1hbmQKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBmYXJwciBjb21tYW5kCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2lzc3VlX2Vsc19mYXJwcihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQzMl90IG5wb3J0aWQsIHVpbnQ4X3QgcmV0cnkpCiB7CkBAIC0xNzQ4LDYgKzIyMzAsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW86IENhbmNlbCB0aGUgdGltZXIgd2l0aCBkZWxheWVkIGlvY2ItY21kIHJldHJ5LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBubHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGNhbmNlbHMgdGhlIHRpbWVyIHdpdGggYSBkZWxheWVkIElPQ0ItY29tbWFuZCByZXRyeSBmb3IKKyAqIGEgQHZwb3J0J3MgQG5kbHAuIEl0IHN0b3BzIHRoZSB0aW1lciBmb3IgdGhlIGRlbGF5ZWQgZnVuY3Rpb24gcmV0cmlhbCBhbmQKKyAqIHJlbW92ZXMgdGhlIEVMUyByZXRyeSBldmVudCBpZiBpdCBwcmVzZW50cy4gSW4gYWRkaXRpb24sIGlmIHRoZQorICogTkxQX05QUl8yQl9ESVNDIGJpdCBpcyBzZXQgaW4gdGhlIEBubHAncyBubHBfZmxhZyBiaXRtYXAsIEFESVNDIElPQ0IKKyAqIGNvbW1hbmRzIGFyZSBzZW50IGZvciB0aGUgQHZwb3J0J3Mgbm9kZXMgdGhhdCByZXF1aXJlIGlzc3VpbmcgZGlzY292ZXJ5CisgKiBBRElTQy4KKyAqKi8KIHZvaWQKIGxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpubHApCiB7CkBAIC0xNzc1LDI1ICsyMjY5LDM2IEBACiAJCQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX1ZQT1JUX1JFQURZKSB7CiAJCQkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIG1vcmUgQURJU0NzIHRvIGJlIHNlbnQgKi8KIAkJCQlscGZjX21vcmVfYWRpc2ModnBvcnQpOwotCQkJCWlmICgodnBvcnQtPm51bV9kaXNjX25vZGVzID09IDApICYmCi0JCQkJICAgICh2cG9ydC0+ZmNfbnByX2NudCkpCi0JCQkJCWxwZmNfZWxzX2Rpc2NfcGxvZ2kodnBvcnQpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgbW9yZSBQTE9HSXMgdG8gYmUgc2VudCAqLwogCQkJCWxwZmNfbW9yZV9wbG9naSh2cG9ydCk7Ci0JCQl9Ci0JCQlpZiAodnBvcnQtPm51bV9kaXNjX25vZGVzID09IDApIHsKLQkJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCXZwb3J0LT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwotCQkJCWxwZmNfZW5kX3JzY24odnBvcnQpOworCQkJCWlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgeworCQkJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJCQl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfTkRJU0NfQUNUSVZFOworCQkJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOworCQkJCQlscGZjX2VuZF9yc2NuKHZwb3J0KTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JldHJ5X2RlbGF5OiBUaW1lciBmdW5jdGlvbiB3aXRoIGEgbmRscCBkZWxheWVkIGZ1bmN0aW9uIHRpbWVyLgorICogQHB0cjogaG9sZGVyIGZvciB0aGUgcG9pbnRlciB0byB0aGUgdGltZXIgZnVuY3Rpb24gYXNzb2NpYXRlZCBkYXRhIChuZGxwKS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBieSB0aGUgbmRscCBkZWxheWVkLWZ1bmN0aW9uIHRpbWVyIHRvIGNoZWNrCisgKiB3aGV0aGVyIHRoZXJlIGlzIGFueSBwZW5kaW5nIEVMUyByZXRyeSBldmVudChzKSB3aXRoIHRoZSBub2RlLiBJZiBub3QsIGl0CisgKiBzaW1wbHkgcmV0dXJucy4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgRUxTIGRlbGF5ZWQgZXZlbnQsIGl0CisgKiBhZGRzIHRoZSBkZWxheWVkIGV2ZW50cyB0byB0aGUgSEJBIHdvcmsgbGlzdCBhbmQgaW52b2tlcyB0aGUKKyAqIGxwZmNfd29ya2VyX3dha2VfdXAoKSByb3V0aW5lIHRvIHdha2UgdXAgd29ya2VyIHRocmVhZCB0byBwcm9jZXNzIHRoZQorICogZXZlbnQuIE5vdGUgdGhhdCBscGZjX25scF9nZXQoKSBpcyBjYWxsZWQgYmVmb3JlIHBvc3RpbmcgdGhlIGV2ZW50IHRvCisgKiB0aGUgd29yayBsaXN0IHRvIGhvbGQgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAgc28gdGhhdCBpdCBndWFyYW50ZWVzIHRoZQorICogcmVmZXJlbmNlIHRvIG5kbHAgd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUgd2hlbiB0aGUgd29ya2VyIHRocmVhZCBnZXRzCisgKiB0byB0aGUgZXZlbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZGxwLgorICoqLwogdm9pZAogbHBmY19lbHNfcmV0cnlfZGVsYXkodW5zaWduZWQgbG9uZyBwdHIpCiB7CkBAIC0xODIyLDYgKzIzMjcsMTUgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmV0cnlfZGVsYXlfaGFuZGxlcjogV29yayB0aHJlYWQgaGFuZGxlciBmb3IgbmRscCBkZWxheWVkIGZ1bmN0aW9uLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSB3b3JrZXItdGhyZWFkIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgdGhlIEBuZGxwIGRlbGF5ZWQKKyAqIGV2ZW50KHMpLCBwb3N0ZWQgYnkgdGhlIGxwZmNfZWxzX3JldHJ5X2RlbGF5KCkgcm91dGluZS4gSXQgc2ltcGx5IHJldHJpZXZlcworICogdGhlIGxhc3QgRUxTIGNvbW1hbmQgZnJvbSB0aGUgYXNzb2NpYXRlZCBuZGxwIGFuZCBpbnZva2VzIHRoZSBwcm9wZXIgRUxTCisgKiBmdW5jdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGRlbGF5ZWQgRUxTIGNvbW1hbmQgdG8gcmV0cnkgdGhlIGNvbW1hbmQuCisgKiovCiB2b2lkCiBscGZjX2Vsc19yZXRyeV9kZWxheV9oYW5kbGVyKHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewpAQCAtMTg4NCw2ICsyMzk4LDI3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JldHJ5OiBNYWtlIHJldHJ5IGRlY2lzaW9uIG9uIGFuIGVscyBjb21tYW5kIGlvY2IuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBtYWtlcyBhIHJldHJ5IGRlY2lzaW9uIG9uIGFuIEVMUyBjb21tYW5kIElPQ0IsIHdoaWNoIGhhcworICogZmFpbGVkLiBUaGUgZm9sbG93aW5nIEVMUyBJT0NCcyB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcmV0cnlpbmcgdGhlIGNvbW1hbmQKKyAqIHdoZW4gcHJldmlvdXNseSBpc3N1ZWQgY29tbWFuZCByZXNwb25zZWQgd2l0aCBlcnJvciBzdGF0dXM6IEZMT0dJLCBQTE9HSSwKKyAqIFBSTEksIEFESVNDLCBMT0dPLCBhbmQgRkRJU0MuIEJhc2VkIG9uIHRoZSBFTFMgY29tbWFuZCB0eXBlIGFuZCB0aGUKKyAqIHJldHVybmVkIGVycm9yIHN0YXR1cywgaXQgbWFrZXMgdGhlIGRlY2lzaW9uIHdoZXRoZXIgYSByZXRyeSBzaGFsbCBiZQorICogaXNzdWVkIGZvciB0aGUgY29tbWFuZCwgYW5kIHdoZXRoZXIgYSByZXRyeSBzaGFsbCBiZSBtYWRlIGltbWVkaWF0ZWx5IG9yCisgKiBkZWxheWVkLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBjb3JyZXNwb25kaW5nIEVMUyBjb21tYW5kIGlzc3VpbmctZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCB0byByZXRyeSB0aGUgY29tbWFuZC4gSW4gdGhlIGxhdGVyIGNhc2UsIHRoZSBFTFMgY29tbWFuZCBzaGFsbAorICogYmUgcG9zdGVkIHRvIHRoZSBuZGxwIGRlbGF5ZWQgZXZlbnQgYW5kIGRlbGF5ZWQgZnVuY3Rpb24gdGltZXIgc2V0IHRvIHRoZQorICogbmRscCBmb3IgdGhlIGRlbGF5ZWQgY29tbWFuZCBpc3N1c2luZy4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gTm8gcmV0cnkgb2YgZWxzIGNvbW1hbmQgaXMgbWFkZQorICogICAxIC0gSW1tZWRpYXRlIG9yIGRlbGF5ZWQgcmV0cnkgb2YgZWxzIGNvbW1hbmQgaXMgbWFkZQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmV0cnkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkgICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0yMDUxLDcgKzI1ODYsNyBAQAogCQkJICAoc3RhdC51bi5iLmxzUmp0UnNuQ29kZUV4cCA9PSBMU0VYUF9JTlZBTElEX05QT1JUX0lEKSkKIAkJCSAgKSB7CiAJCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19FTFMsCi0JCQkJCQkgIjAxMjMgRkRJU0MgRmFpbGVkICh4JXgpLiAiCisJCQkJCQkgIjAxMjIgRkRJU0MgRmFpbGVkICh4JXgpLiAiCiAJCQkJCQkgIkZhYnJpYyBEZXRlY3RlZCBCYWQgV1dOXG4iLAogCQkJCQkJIHN0YXQudW4ubHNSanRFcnJvcik7CiAJCQkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsCkBAIC0yMTgyLDEyICsyNzE3LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfZnJlZV9kYXRhOiBGcmVlIGxwZmMgZG1hIGJ1ZmZlciBhbmQgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBhbiBpb2NiLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAYnVmX3B0cjE6IHBvaW50ZXIgdG8gdGhlIGxwZmMgRE1BIGJ1ZmZlciBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVsZWFzZXMgdGhlIGxwZmMgRE1BIChEaXJlY3QgTWVtb3J5IEFjY2VzcykgYnVmZmVyKHMpCisgKiBhc3NvY2lhdGVkIHdpdGggYSBjb21tYW5kIElPQ0IgYmFjayB0byB0aGUgbHBmYyBETUEgYnVmZmVyIHBvb2wuIEl0IGZpcnN0CisgKiBjaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlcmUgaXMgYSBscGZjIERNQSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogcmVzcG9uc2Ugb2YgdGhlIGNvbW1hbmQgSU9DQi4gSWYgc28sIGl0IHdpbGwgYmUgcmVsZWFzZWQgYmVmb3JlIHJlbGVhc2luZworICogdGhlIGxwZmMgRE1BIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIElPQ0IgaXRzZWxmLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcmVsZWFzZWQgbHBmYyBETUEgYnVmZmVyIChjdXJyZW50bHksIGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX2ZyZWVfZGF0YShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2RtYWJ1ZiAqYnVmX3B0cjEpCiB7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpidWZfcHRyOwogCi0JLyogRnJlZSB0aGUgcmVzcG9uc2UgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQuICAqLworCS8qIEZyZWUgdGhlIHJlc3BvbnNlIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBjb21tYW5kLiAqLwogCWlmICghbGlzdF9lbXB0eSgmYnVmX3B0cjEtPmxpc3QpKSB7CiAJCWxpc3RfcmVtb3ZlX2hlYWQoJmJ1Zl9wdHIxLT5saXN0LCBidWZfcHRyLAogCQkJCSBzdHJ1Y3QgbHBmY19kbWFidWYsCkBAIC0yMjAwLDYgKzI3NDksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19mcmVlX2JwbDogRnJlZSBscGZjIGRtYSBidWZmZXIgYW5kIGRhdGEgc3RydWN0dXJlIHdpdGggYnBsLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAYnVmX3B0cjogcG9pbnRlciB0byB0aGUgbHBmYyBkbWEgYnVmZmVyIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSByZWxlYXNlcyB0aGUgbHBmYyBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBidWZmZXIKKyAqIGFzc29jaWF0ZWQgd2l0aCBhIEJ1ZmZlciBQb2ludGVyIExpc3QgKEJQTCkgYmFjayB0byB0aGUgbHBmYyBETUEgYnVmZmVyCisgKiBwb29sLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcmVsZWFzZWQgbHBmYyBETUEgYnVmZmVyIChjdXJyZW50bHksIGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX2ZyZWVfYnBsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZG1hYnVmICpidWZfcHRyKQogewpAQCAtMjIwOCw2ICsyNzY5LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfZnJlZV9pb2NiOiBGcmVlIGEgY29tbWFuZCBpb2NiIGFuZCBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBlbHNpb2NiOiBwb2ludGVyIHRvIGxwZmMgZWxzIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZnJlZXMgYSBjb21tYW5kIElPQ0IgYW5kIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcy4gVGhlCisgKiBjb21tYW5kIElPQ0IgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlZmVyZW5jZSB0byB2YXJpb3VzIGFzc29jaWF0ZWQKKyAqIHJlc291cmNlcywgdGhlc2UgZmllbGRzIG11c3QgYmUgc2V0IHRvIE5VTEwgaWYgdGhlIGFzc29jaWF0ZWQgcmVmZXJlbmNlCisgKiBub3QgcHJlc2VudDoKKyAqICAgY29udGV4dDEgLSByZWZlcmVuY2UgdG8gbmRscAorICogICBjb250ZXh0MiAtIHJlZmVyZW5jZSB0byBjbWQKKyAqICAgY29udGV4dDItPm5leHQgLSByZWZlcmVuY2UgdG8gcnNwCisgKiAgIGNvbnRleHQzIC0gcmVmZXJlbmNlIHRvIGJwbAorICoKKyAqIEl0IGZpcnN0IHByb3Blcmx5IGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBoZWxkIG9uIG5kbHAgZm9yIHRoZQorICogSU9DQiBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLiBJZiBMUEZDX0RFTEFZX01FTV9GUkVFIGZsYWcgaXMgbm90CisgKiBzZXQsIGl0IGludm9rZXMgdGhlIGxwZmNfZWxzX2ZyZWVfZGF0YSgpIHJvdXRpbmUgdG8gcmVsZWFzZSB0aGUgRGlyZWN0CisgKiBNZW1vcnkgQWNjZXNzIChETUEpIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBJT0NCLiBPdGhlcndpc2UsIGl0CisgKiBhZGRzIHRoZSBETUEgYnVmZmVyIHRoZSBAcGhiYSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIGRlbGF5ZWQgcmVsZWFzZS4KKyAqIElmIHJlZmVyZW5jZSB0byB0aGUgQnVmZmVyIFBvaW50ZXIgTGlzdCAoQlBMKSBpcyBwcmVzZW50LCB0aGUKKyAqIGxwZmNfZWxzX2ZyZWVfYnBsKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlbGVhc2UgdGhlIERNQSBtZW1vcnkKKyAqIGFzc29jaWF0ZWQgd2l0aCBCUEwuIEZpbmFsbHksIHRoZSBscGZjX3NsaV9yZWxlYXNlX2lvY2JxKCkgcm91dGluZSBpcworICogaW52b2tlZCB0byByZWxlYXNlIHRoZSBJT0NCIGRhdGEgc3RydWN0dXJlIGJhY2sgdG8gQHBoYmEgSU9DQlEgbGlzdC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2VzcyAoY3VycmVudGx5LCBhbHdheXMgcmV0dXJuIDApCisgKiovCiBpbnQKIGxwZmNfZWxzX2ZyZWVfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICplbHNpb2NiKQogewpAQCAtMjI3NCw2ICsyODYyLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19sb2dvX2FjYzogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB0byBsb2dvIGFjYyByZXNwb25zZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBMb2dvdXQgKExPR08pCisgKiBBY2NlcHQgKEFDQykgUmVzcG9uc2UgRUxTIGNvbW1hbmQuIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIGluZGljYXRlCisgKiB0aGUgY29tcGxldGlvbiBvZiB0aGUgTE9HTyBwcm9jZXNzLiBJdCBpbnZva2VzIHRoZSBscGZjX25scF9ub3RfdXNlZCgpIHRvCisgKiByZWxlYXNlIHRoZSBuZGxwIGlmIGl0IGhhcyB0aGUgbGFzdCByZWZlcmVuY2UgcmVtYWluaW5nIChyZWZlcmVuY2UgY291bnQKKyAqIGlzIDEpLiBJZiBzdWNjZWVkZWQgKG1lYW5pbmcgbmRscCByZWxlYXNlZCksIGl0IHNldHMgdGhlIElPQ0IgY29udGV4dDEKKyAqIGZpZWxkIHRvIE5VTEwgdG8gaW5mb3JtIHRoZSBmb2xsb3dpbmcgbHBmY19lbHNfZnJlZV9pb2NiKCkgcm91dGluZSBubworICogbmRscCByZWZlcmVuY2UgY291bnQgbmVlZHMgdG8gYmUgZGVjcmVtZW50ZWQuIE90aGVyd2lzZSwgdGhlIG5kbHAKKyAqIHJlZmVyZW5jZSB1c2UtY291bnQgc2hhbGwgYmUgZGVjcmVtZW50ZWQgYnkgdGhlIGxwZmNfZWxzX2ZyZWVfaW9jYigpCisgKiByb3V0aW5lLiBGaW5hbGx5LCB0aGUgbHBmY19lbHNfZnJlZV9pb2NiKCkgaXMgaW52b2tlZCB0byByZWxlYXNlIHRoZQorICogSU9DQiBkYXRhIHN0cnVjdHVyZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX2xvZ29fYWNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTIzMTEsNiArMjkxNiwxOSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX21ieF9jbXBsX2RmbHRfcnBpOiBDb21wbGV0aW9uIGNhbGxiayBmdW5jIGZvciB1bnJlZyBkZmx0IHJwaSBtYm94IGNtZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHVucmVnaXN0ZXIgZGVmYXVsdAorICogUlBJIChSZW1vdGUgUG9ydCBJbmRleCkgbWFpbGJveCBjb21tYW5kIHRvIHRoZSBAcGhiYS4gSXQgc2ltcGx5IHJlbGVhc2VzCisgKiB0aGUgYXNzb2NpYXRlZCBscGZjIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIGJ1ZmZlciBiYWNrIHRvIHRoZSBwb29sIGFuZAorICogZGVjcmVtZW50cyB0aGUgbmRscCByZWZlcmVuY2UgY291bnQgaGVsZCBmb3IgdGhpcyBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiBmdW5jdGlvbi4gQWZ0ZXIgdGhhdCwgaXQgaW52b2tlcyB0aGUgbHBmY19ubHBfbm90X3VzZWQoKSB0byBjaGVjaworICogd2hldGhlciB0aGVyZSBpcyBvbmx5IG9uZSByZWZlcmVuY2UgbGVmdCBvbiB0aGUgbmRscC4gSWYgc28sIGl0IHdpbGwKKyAqIHBlcmZvcm0gb25lIG1vcmUgZGVjcmVtZW50IGFuZCB0cmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBuZGxwLgorICoqLwogdm9pZAogbHBmY19tYnhfY21wbF9kZmx0X3JwaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQogewpAQCAtMjMzMiw2ICsyOTUwLDIyIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfcnNwOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlbHMgcmVzcG9uc2UgaW9jYiBjbWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgRUxTIFJlc3BvbnNlIElPQ0IKKyAqIGNvbW1hbmQuIEluIG5vcm1hbCBjYXNlLCB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGp1c3QgcHJvcGVybHkgc2V0cyB0aGUKKyAqIG5scF9mbGFnIGJpdG1hcCBpbiB0aGUgbmRscCBkYXRhIHN0cnVjdHVyZSwgaWYgdGhlIG1ib3ggY29tbWFuZCByZWZlcmVuY2UKKyAqIGZpZWxkIGluIHRoZSBjb21tYW5kIElPQ0IgaXMgbm90IE5VTEwsIHRoZSByZWZlcnJlZCBtYWlsYm94IGNvbW1hbmQgd2lsbAorICogYmUgc2VuZCBvdXQsIGFuZCB0aGVuIGludm9rZXMgdGhlIGxwZmNfZWxzX2ZyZWVfaW9jYigpIHJvdXRpbmUgdG8gcmVsZWFzZQorICogdGhlIElPQ0IuIFVuZGVyIGVycm9yIGNvbmRpdGlvbnMsIHN1Y2ggYXMgd2hlbiBhIExTX1JKVCBpcyByZXR1cm5lZCBvciBhCisgKiBsaW5rIGRvd24gZXZlbnQgb2NjdXJyZWQgZHVyaW5nIHRoZSBkaXNjb3ZlcnksIHRoZSBscGZjX25scF9ub3RfdXNlZCgpCisgKiByb3V0aW5lIHNoYWxsIGJlIGludm9rZWQgdHJ5aW5nIHRvIHJlbGVhc2UgdGhlIG5kbHAgaWYgbm8gb3RoZXIgdGhyZWFkcworICogYXJlIGN1cnJlbnRseSByZWZlcnJpbmcgaXQuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19yc3Aoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTI0ODcsNiArMzEyMSwzMSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yc3BfYWNjOiBQcmVwYXJlIGFuZCBpc3N1ZSBhbiBhY2MgcmVzcG9uc2UgaW9jYiBjb21tYW5kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmbGFnOiB0aGUgZWxzIGNvbW1hbmQgY29kZSB0byBiZSBhY2NlcHRlZC4KKyAqIEBvbGRpb2NiOiBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQG1ib3g6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGFuZCBpc3N1ZXMgYW4gQWNjZXB0IChBQ0MpIHJlc3BvbnNlIElPQ0IKKyAqIGNvbW1hbmQuIEl0IHVzZXMgdGhlIEBmbGFnIHRvIHByb3Blcmx5IHNldCB1cCB0aGUgSU9DQiBmaWVsZCBmb3IgdGhlCisgKiBzcGVjaWZpYyBBQ0MgcmVzcG9uc2UgY29tbWFuZCB0byBiZSBpc3N1ZWQgYW5kIGludm9rZXMgdGhlCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0byBzZW5kIG91dCBBQ0MgcmVzcG9uc2UgSU9DQi4gSWYgYQorICogQG1ib3ggcG9pbnRlciBpcyBwYXNzZWQgaW4sIGl0IHdpbGwgYmUgcHV0IGludG8gdGhlIGNvbnRleHRfdW4ubWJveAorICogZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGlzc3VlIHRoZQorICogbWFpbGJveCBjb21tYW5kIHRvIHRoZSBIQkEgbGF0ZXIgd2hlbiBjYWxsYmFjayBpcyBpbnZva2VkLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZSBFTFMgSU9DQiBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGFjYyByZXNwb25zZQorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIGFjYyByZXNwb25zZQorICoqLwogaW50CiBscGZjX2Vsc19yc3BfYWNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDMyX3QgZmxhZywKIAkJIHN0cnVjdCBscGZjX2lvY2JxICpvbGRpb2NiLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKQEAgLTI2MDEsNiArMzI2MCwyOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JzcF9yZWplY3Q6IFByb3BhcmUgYW5kIGlzc3VlIGEgcmp0IHJlc3BvbnNlIGlvY2IgY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQHJlamVjdEVycm9yOgorICogQG9sZGlvY2I6IHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbWJveDogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgYW5kIGlzc3VlIGFuIFJlamVjdCAoUkpUKSByZXNwb25zZSBJT0NCCisgKiBjb21tYW5kLiBJZiBhIEBtYm94IHBvaW50ZXIgaXMgcGFzc2VkIGluLCBpdCB3aWxsIGJlIHB1dCBpbnRvIHRoZQorICogY29udGV4dF91bi5tYm94IGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbgorICogdG8gaXNzdWUgdG8gdGhlIEhCQSBsYXRlci4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIHJlamVjdCByZXNwb25zZSBFTFMgSU9DQiBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIHJlamVjdCByZXNwb25zZQorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIHJlamVjdCByZXNwb25zZQorICoqLwogaW50CiBscGZjX2Vsc19yc3BfcmVqZWN0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDMyX3QgcmVqZWN0RXJyb3IsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqb2xkaW9jYiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCkBAIC0yNjYwLDYgKzMzNDEsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yc3BfYWRpc2NfYWNjOiBQcmVwYXJlIGFuZCBpc3N1ZSBhY2MgcmVzcG9uc2UgdG8gYWRpc2MgaW9jYiBjbWQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBvbGRpb2NiOiBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyBhbmQgaXNzdWVzIGFuIEFjY2VwdCAoQUNDKSByZXNwb25zZSB0byBBZGRyZXNzCisgKiBEaXNjb3ZlciAoQURJU0MpIEVMUyBjb21tYW5kLiBJdCBzaW1wbHkgcHJlcGFyZXMgdGhlIHBheWxvYWQgb2YgdGhlIElPQ0IKKyAqIGFuZCBpbnZva2VzIHRoZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0byBzZW5kIG91dCB0aGUgY29tbWFuZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFESVNDIEFjY2VwdCByZXNwb25zZSBFTFMgSU9DQiBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGFjYyBhZGlzYyByZXNwb25zZQorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIGFkaXNjIGFjYyByZXNwb25zZQorICoqLwogaW50CiBscGZjX2Vsc19yc3BfYWRpc2NfYWNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKm9sZGlvY2IsCiAJCSAgICAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTI3MTYsNiArMzQxNiwyNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JzcF9wcmxpX2FjYzogUHJlcGFyZSBhbmQgaXNzdWUgYWNjIHJlc3BvbnNlIHRvIHBybGkgaW9jYiBjbWQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBvbGRpb2NiOiBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyBhbmQgaXNzdWVzIGFuIEFjY2VwdCAoQUNDKSByZXNwb25zZSB0byBQcm9jZXNzCisgKiBMb2dpbiAoUFJMSSkgRUxTIGNvbW1hbmQuIEl0IHNpbXBseSBwcmVwYXJlcyB0aGUgcGF5bG9hZCBvZiB0aGUgSU9DQgorICogYW5kIGludm9rZXMgdGhlIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvIHNlbmQgb3V0IHRoZSBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgUFJMSSBBY2NlcHQgcmVzcG9uc2UgRUxTIElPQ0IgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBhY2MgcHJsaSByZXNwb25zZQorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIGFjYyBwcmxpIHJlc3BvbnNlCisgKiovCiBpbnQKIGxwZmNfZWxzX3JzcF9wcmxpX2FjYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpvbGRpb2NiLAogCQkgICAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTI3OTUsNiArMzUxNCwzMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JzcF9ybmlkX2FjYzogSXNzdWUgcm5pZCBhY2MgcmVzcG9uc2UgaW9jYiBjb21tYW5kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZm9ybWF0OiBybmlkIGNvbW1hbmQgZm9ybWF0LgorICogQG9sZGlvY2I6IHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIFJlcXVlc3QgTm9kZSBJZGVudGlmaWNhdGlvbiBEYXRhIChSTklEKSBBY2NlcHQKKyAqIChBQ0MpIHJlc3BvbnNlLiBJdCBjb25zdHJ1Y3RzIHRoZSBSTklEIEFDQyByZXNwb25zZSBjb21tYW5kIGFjY29yZGluZyB0bworICogdGhlIHByb3BlciBAZm9ybWF0IGFuZCB0aGVuIGNhbGxzIHRoZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0bworICogaXNzdWUgdGhlIHJlc3BvbnNlLiBOb3RlIHRoYXQgdGhpcyBjb21tYW5kIGRvZXMgbm90IG5lZWQgdG8gaG9sZCB0aGUgbmRscAorICogcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgY2FsbGJhY2suIFNvLCB0aGUgbmRscCByZWZlcmVuY2UgY291bnQgdGFrZW4gYnkKKyAqIHRoZSBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lIGlzIHB1dCBiYWNrIGFuZCB0aGUgY29udGV4dDEgZmllbGQgb2YKKyAqIElPQ0IgaXMgc2V0IHRvIE5VTEwgdG8gaW5kaWNhdGUgdG8gdGhlIGxwZmNfZWxzX2ZyZWVfaW9jYigpIHJvdXRpbmUgdGhhdAorICogdGhlcmUgaXMgbm8gbmRscCByZWZlcmVuY2UgYXZhaWxhYmxlLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbi4gSG93ZXZlciwgZm9yIHRoZSBSTklEIEFjY2VwdCBSZXNwb25zZSBFTFMgY29tbWFuZCwKKyAqIHRoaXMgaXMgdW5kb25lIGxhdGVyIGJ5IHRoaXMgcm91dGluZSBhZnRlciB0aGUgSU9DQiBpcyBhbGxvY2F0ZWQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgYWNjIHJuaWQgcmVzcG9uc2UKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBhY2Mgcm5pZCByZXNwb25zZQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcnNwX3JuaWRfYWNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDhfdCBmb3JtYXQsCiAJCSAgICAgIHN0cnVjdCBscGZjX2lvY2JxICpvbGRpb2NiLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTI4NzUsNiArMzYyMCwyNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2Rpc2NfYWRpc2M6IElzc3VlIHJlbWFpbmluZyBhZGlzYyBpb2NicyB0byBucHIgbm9kZXMgb2YgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBBZGRyZXNzIERpc2NvdmVyIChBRElTQykgRUxTIGNvbW1hbmRzIHRvIHRob3NlCisgKiBOX1BvcnRzIHdoaWNoIGFyZSBpbiBub2RlIHBvcnQgcmVjb3Zlcnkgc3RhdGUgYW5kIEFESVNDIGhhcyBub3QgYmVlbiBpc3N1ZWQKKyAqIGZvciB0aGUgQHZwb3J0LiBFYWNoIHRpbWUgYW4gRUxTIEFESVNDIElPQ0IgaXMgaXNzdWVkIGJ5IGludm9raW5nIHRoZQorICogbHBmY19pc3N1ZV9lbHNfYWRpc2MoKSByb3V0aW5lLCB0aGUgcGVyIEB2cG9ydCBudW1iZXIgb2YgZGlzY292ZXIgY291bnQKKyAqIChudW1fZGlzY19ub2Rlcykgc2hhbGwgYmUgaW5jcmVtZW50ZWQuIElmIHRoZSBudW1fZGlzY19ub2RlcyByZWFjaGVzIGEKKyAqIHByZS1jb25maWd1cmVkIHRocmVzaG9sZCAoY2ZnX2Rpc2NvdmVyeV90aHJlYWRzKSwgdGhlIEB2cG9ydCBmY19mbGFnIHdpbGwKKyAqIGJlIG1hcmtlZCB3aXRoIEZDX05MUF9NT1JFIGJpdCBhbmQgdGhlIHByb2Nlc3Mgb2YgaXNzdWluZyByZW1haW5pbmcgQURJU0MKKyAqIElPQ0JzIHF1aXQgZm9yIGxhdGVyIHBpY2sgdXAuIE9uIHRoZSBvdGhlciBoYW5kLCBhZnRlciB3YWxraW5nIHRocm91Z2gKKyAqIGFsbCB0aGUgbmRscHMgd2l0aCB0aGUgQHZwb3J0IGFuZCB0aGVyZSBpcyBub25lIEFESVNDIElPQ0IgaXNzdWVkLCB0aGUKKyAqIEB2cG9ydCBmY19mbGFnIHNoYWxsIGJlIGNsZWFyZWQgd2l0aCBGQ19OTFBfTU9SRSBiaXQgaW5kaWNhdGluZyB0aGVyZSBpcworICogbm8gbW9yZSBBRElTQyBuZWVkIHRvIGJlIHNlbnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgIFRoZSBudW1iZXIgb2YgTl9Qb3J0cyB3aXRoIGFkaXNjIGlzc3VlZC4KKyAqKi8KIGludAogbHBmY19lbHNfZGlzY19hZGlzYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0yOTE0LDYgKzM2NzgsMjUgQEAKIAlyZXR1cm4gc2VudGFkaXNjOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2Rpc2NfcGxvZ2k6IElzc3VlIHBsb2dpIGZvciBhbGwgbnByIG5vZGVzIG9mIGEgdnBvcnQgYmVmb3JlIGFkaXNjLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIFBvcnQgTG9naW4gKFBMT0dJKSBFTFMgY29tbWFuZHMgdG8gYWxsIHRoZSBOX1BvcnRzCisgKiB3aGljaCBhcmUgaW4gbm9kZSBwb3J0IHJlY292ZXJ5IHN0YXRlLCB3aXRoIGEgQHZwb3J0LiBFYWNoIHRpbWUgYW4gRUxTCisgKiBBRElTQyBQTE9HSSBJT0NCIGlzIGlzc3VlZCBieSBpbnZva2luZyB0aGUgbHBmY19pc3N1ZV9lbHNfcGxvZ2koKSByb3V0aW5lLAorICogdGhlIHBlciBAdnBvcnQgbnVtYmVyIG9mIGRpc2NvdmVyIGNvdW50IChudW1fZGlzY19ub2Rlcykgc2hhbGwgYmUKKyAqIGluY3JlbWVudGVkLiBJZiB0aGUgbnVtX2Rpc2Nfbm9kZXMgcmVhY2hlcyBhIHByZS1jb25maWd1cmVkIHRocmVzaG9sZAorICogKGNmZ19kaXNjb3ZlcnlfdGhyZWFkcyksIHRoZSBAdnBvcnQgZmNfZmxhZyB3aWxsIGJlIG1hcmtlZCB3aXRoIEZDX05MUF9NT1JFCisgKiBiaXQgc2V0IGFuZCBxdWl0IHRoZSBwcm9jZXNzIG9mIGlzc3VpbmcgcmVtYWluaW5nIEFESVNDIFBMT0dJTiBJT0NCcyBmb3IKKyAqIGxhdGVyIHBpY2sgdXAuIE9uIHRoZSBvdGhlciBoYW5kLCBhZnRlciB3YWxraW5nIHRocm91Z2ggYWxsIHRoZSBuZGxwcyB3aXRoCisgKiB0aGUgQHZwb3J0IGFuZCB0aGVyZSBpcyBub25lIEFESVNDIFBMT0dJIElPQ0IgaXNzdWVkLCB0aGUgQHZwb3J0IGZjX2ZsYWcKKyAqIHNoYWxsIGJlIGNsZWFyZWQgd2l0aCB0aGUgRkNfTkxQX01PUkUgYml0IGluZGljYXRpbmcgdGhlcmUgaXMgbm8gbW9yZSBBRElTQworICogUExPR0kgbmVlZCB0byBiZSBzZW50LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIFRoZSBudW1iZXIgb2YgTl9Qb3J0cyB3aXRoIHBsb2dpIGlzc3VlZC4KKyAqKi8KIGludAogbHBmY19lbHNfZGlzY19wbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0yOTU0LDYgKzM3MzcsMTUgQEAKIAlyZXR1cm4gc2VudHBsb2dpOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2ZsdXNoX3JzY246IENsZWFuIHVwIGFueSByc2NuIGFjdGl2aXRpZXMgd2l0aCBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2xlYW5zIHVwIGFueSBSZWdpc3RyYXRpb24gU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbgorICogKFJTQ04pIGFjdGl2aXR5IHdpdGggYSBAdnBvcnQuIE5vdGUgdGhhdCB0aGUgZmNfcnNjbl9mbHVzaCBmbGFnIG9mIHRoZQorICogQHZwb3J0IHRvZ2V0aGVyIHdpdGggdGhlIGhvc3RfbG9jayBpcyB1c2VkIHRvIHByZXZlbnQgbXVsdGlwbGUgdGhyZWFkCisgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBSU0NOIGFycmF5IG9uIGEgc2FtZSBAdnBvcnQgYXQgdGhlIHNhbWUgdGltZS4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX2ZsdXNoX3JzY24oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMjk4NCw2ICszNzc2LDE4IEBACiAJdnBvcnQtPmZjX3JzY25fZmx1c2ggPSAwOwogfQogCisvKioKKyAqIGxwZmNfcnNjbl9wYXlsb2FkX2NoZWNrOiBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgcGVuZGluZyByc2NuIHRvIGEgZGlkLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBkaWQ6IHJlbW90ZSBkZXN0aW5hdGlvbiBwb3J0IGlkZW50aWZpZXIuCisgKgorICogVGhpcyByb3V0aW5lIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGlzIGFueSBwZW5kaW5nIFJlZ2lzdHJhdGlvbiBTdGF0ZQorICogQ29uZmlndXJhdGlvbiBOb3RpZmljYXRpb24gKFJTQ04pIHRvIGEgQGRpZCBvbiBAdnBvcnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgTm9uZSB6ZXJvIC0gVGhlIEBkaWQgbWF0Y2hlZCB3aXRoIGEgcGVuZGluZyByc2NuCisgKiAgIDAgLSBub3QgYWJsZSB0byBtYXRjaCBAZGlkIHdpdGggYSBwZW5kaW5nIHJzY24KKyAqKi8KIGludAogbHBmY19yc2NuX3BheWxvYWRfY2hlY2soc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MzJfdCBkaWQpCiB7CkBAIC0zMDUzLDYgKzM4NTcsMTcgQEAKIAlyZXR1cm4gZGlkOwogfQogCisvKioKKyAqIGxwZmNfcnNjbl9yZWNvdmVyeV9jaGVjazogU2VuZCByZWNvdmVyeSBldmVudCB0byB2cG9ydCBub2RlcyBtYXRjaGluZyByc2NuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzZW5kcyByZWNvdmVyeSAoTkxQX0VWVF9ERVZJQ0VfUkVDT1ZFUlkpIGV2ZW50IHRvIHRoZQorICogc3RhdGUgbWFjaGluZSBmb3IgYSBAdnBvcnQncyBub2RlcyB0aGF0IGFyZSB3aXRoIHBlbmRpbmcgUlNDTiAoUmVnaXN0cmF0aW9uCisgKiBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uKS4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bCAoY3VycmVudGx5IGFsd2F5IHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19yc2NuX3JlY292ZXJ5X2NoZWNrKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTMwNzEsNiArMzg4NiwyOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9yc2NuOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIHJzY24gaW9jYi4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgYW4gdW5zb2xpY2l0ZWQgUlNDTiAoUmVnaXN0cmF0aW9uIFN0YXRlIENoYW5nZQorICogTm90aWZpY2F0aW9uKSBJT0NCLiBGaXJzdCwgdGhlIHBheWxvYWQgb2YgdGhlIHVuc29saWNpdGVkIFJTQ04gaXMgd2Fsa2VkCisgKiB0byBpbnZva2UgZmNfaG9zdF9wb3N0X2V2ZW50KCkgcm91dGluZSB0byB0aGUgRkMgdHJhbnNwb3J0IGxheWVyLiBJZiB0aGUKKyAqIGRpc2NvdmVyIHN0YXRlIG1hY2hpbmUgaXMgYWJvdXQgdG8gYmVnaW4gZGlzY292ZXJ5LCBpdCBqdXN0IGFjY2VwdHMgdGhlCisgKiBSU0NOIGFuZCB0aGUgZGlzY292ZXJ5IHByb2Nlc3Mgd2lsbCBzYXRpc2Z5IHRoZSBSU0NOLiBJZiB0aGlzIFJTQ04gb25seQorICogY29udGFpbnMgTl9Qb3J0IElEcyBmb3Igb3RoZXIgdnBvcnRzIG9uIHRoaXMgSEJBLCBpdCBqdXN0IGFjY2VwdHMgdGhlCisgKiBSU0NOIGFuZCBpZ25vcmUgcHJvY2Vzc2luZyBpdC4gSWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgaW4gdGhlIHJlY292ZXJ5CisgKiBzdGF0ZSwgdGhlIGZjX3JzY25faWRfbGlzdCBvZiB0aGlzIEB2cG9ydCBpcyB3YWxrZWQgYW5kIHRoZQorICogbHBmY19yc2NuX3JlY292ZXJ5X2NoZWNrKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIHNlbmQgcmVjb3ZlcnkgZXZlbnQgZm9yCisgKiBhbGwgbm9kZXMgdGhhdCBtYXRjaCBSU0NOIHBheWxvYWQuIE90aGVyd2lzZSwgdGhlIGxwZmNfZWxzX2hhbmRsZV9yc2NuKCkKKyAqIHJvdXRpbmUgaXMgaW52b2tlZCB0byBoYW5kbGUgdGhlIFJTQ04gZXZlbnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIEp1c3Qgc2VudCB0aGUgYWNjIHJlc3BvbnNlCisgKiAgIDEgLSBTZW50IHRoZSBhY2MgcmVzcG9uc2UgYW5kIHdhaXRlZCBmb3IgbmFtZSBzZXJ2ZXIgY29tcGxldGlvbgorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X3JzY24oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTMxMzAsNyArMzk2Nyw3IEBACiAJCWlmIChyc2NuX2lkID09IGhiYV9pZCkgewogCQkJLyogQUxMIE5Qb3J0SURzIGluIFJTQ04gYXJlIG9uIEhCQSAqLwogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9JTkZPLCBMT0dfRElTQ09WRVJZLAotCQkJCQkgIjAyMTQgSWdub3JlIFJTQ04gIgorCQkJCQkgIjAyMTkgSWdub3JlIFJTQ04gIgogCQkJCQkgIkRhdGE6IHgleCB4JXggeCV4IHgleFxuIiwKIAkJCQkJIHZwb3J0LT5mY19mbGFnLCBwYXlsb2FkX2xlbiwKIAkJCQkJICpscCwgdnBvcnQtPmZjX3JzY25faWRfY250KTsKQEAgLTMyNDEsNiArNDA3OCwyMiBAQAogCXJldHVybiBscGZjX2Vsc19oYW5kbGVfcnNjbih2cG9ydCk7CiB9CiAKKy8qKgorICogbHBmY19lbHNfaGFuZGxlX3JzY246IEhhbmRsZSByc2NuIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyB0aGUgUmVnaXN0cmF0aW9uIFN0YXRlIENvbmZpZ3VyYXRpb24gTm90aWZpY2F0aW9uCisgKiAoUlNDTikgZm9yIGEgQHZwb3J0LiBJZiBsb2dpbiB0byBOYW1lU2VydmVyIGRvZXMgbm90IGV4aXN0LCBhIG5ldyBuZGxwIHNoYWxsCisgKiBiZSBjcmVhdGVkIGFuZCBhIFBvcnQgTG9naW4gKFBMT0dJKSB0byB0aGUgTmFtZVNlcnZlciBpcyBpc3N1ZWQuIE90aGVyd2lzZSwKKyAqIGlmIHRoZSBuZGxwIHRvIE5hbWVTZXJ2ZXIgZXhpc3RzLCBhIENvbW1vbiBUcmFuc3BvcnQgKENUKSBjb21tYW5kIHRvIHRoZQorICogTmFtZVNlcnZlciBzaGFsbCBiZSBpc3N1ZWQuIElmIENUIGNvbW1hbmQgdG8gdGhlIE5hbWVTZXJ2ZXIgZmFpbHMgdG8gYmUKKyAqIGlzc3VlZCwgdGhlIGxwZmNfZWxzX2ZsdXNoX3JzY24oKSByb3V0aW5lIHNoYWxsIGJlIGludm9rZWQgdG8gY2xlYW4gdXAgYW55CisgKiBSU0NOIGFjdGl2aXRpZXMgd2l0aCB0aGUgQHZwb3J0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBDbGVhbmVkIHVwIHJzY24gb24gdGhlIEB2cG9ydAorICogICAxIC0gV2FpdCBmb3IgcGxvZ2kgdG8gbmFtZSBzZXJ2ZXIgYmVmb3JlIHByb2NlZWQKKyAqKi8KIGludAogbHBmY19lbHNfaGFuZGxlX3JzY24oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMzMxMyw2ICs0MTY2LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X2Zsb2dpOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIGZsb2dpIGlvY2IuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIEZhYnJpYyBMb2dpbiAoRkxPR0kpIElPQ0IgcmVjZWl2ZWQgYXMgYW4gRUxTCisgKiB1bnNvbGljaXRlZCBldmVudC4gQW4gdW5zb2xpY2l0ZWQgRkxPR0kgY2FuIGJlIHJlY2VpdmVkIGluIGEgcG9pbnQtdG8tCisgKiBwb2ludCB0b3BvbG9neS4gQXMgYW4gdW5zb2xpY2l0ZWQgRkxPR0kgc2hvdWxkIG5vdCBiZSByZWNlaXZlZCBpbiBhIGxvb3AKKyAqIG1vZGUsIGFueSB1bnNvbGljaXRlZCBGTE9HSSByZWNlaXZlZCBpbiBsb29wIG1vZGUgc2hhbGwgYmUgaWdub3JlZC4gVGhlCisgKiBscGZjX2NoZWNrX3NwYXJtKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIGNoZWNrIHRoZSBwYXJhbWV0ZXJzIGluIHRoZQorICogdW5zb2xpY2l0ZWQgRkxPR0kuIElmIHBhcmFtZXRlcnMgdmFsaWRhdGlvbiBmYWlsZWQsIHRoZSByb3V0aW5lCisgKiBscGZjX2Vsc19yc3BfcmVqZWN0KCkgc2hhbGwgYmUgY2FsbGVkIHdpdGggcmVqZWN0IHJlYXNvbiBjb2RlIHNldCB0bworICogTFNFWFBfU1BBUk1fT1BUSU9OUyB0byByZWplY3QgdGhlIEZMT0dJLiBPdGhlcndpc2UsIHRoZSBQb3J0IFdXTiBpbiB0aGUKKyAqIEZMT0dJIHNoYWxsIGJlIGNvbXBhcmVkIHdpdGggdGhlIFBvcnQgV1dOIG9mIHRoZSBAdnBvcnQgdG8gZGV0ZXJtaW5lIHdobworICogd2lsbCBpbml0aWF0ZSBQTE9HSS4gVGhlIGhpZ2hlciBsZXhpY29ncmFwaGljYWwgdmFsdWUgcGFydHkgc2hhbGwgaGFzCisgKiBoaWdoZXIgcHJpb3JpdHkgKGFzIHRoZSB3aW5uaW5nIHBvcnQpIGFuZCB3aWxsIGluaXRpYXRlIFBMT0dJIGFuZAorICogY29tbXVuaWNhdGUgUG9ydF9JRHMgKEFkZHJlc3NlcykgZm9yIGJvdGggbm9kZXMgaW4gUExPR0kuIFRoZSByZXN1bHQKKyAqIG9mIHRoaXMgd2lsbCBiZSBtYXJrZWQgaW4gdGhlIEB2cG9ydCBmY19mbGFnIGZpZWxkIHdpdGggRkNfUFQyUFRfUExPR0kKKyAqIGFuZCB0aGVuIHRoZSBscGZjX2Vsc19yc3BfYWNjKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIGFjY2VwdCB0aGUgRkxPR0kuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIHVuc29saWNpdGVkIGZsb2dpCisgKiAgIDEgLSBGYWlsZWQgdG8gcHJvY2VzcyB0aGUgdW5zb2xpY2l0ZWQgZmxvZ2kKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9mbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTM0MDIsNiArNDI4MCwyMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9ybmlkOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIHJuaWQgaW9jYi4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgUmVxdWVzdCBOb2RlIElkZW50aWZpY2F0aW9uIERhdGEgKFJOSUQpIElPQ0IKKyAqIHJlY2VpdmVkIGFzIGFuIEVMUyB1bnNvbGljaXRlZCBldmVudC4gT25seSB3aGVuIHRoZSBSTklEIHNwZWNpZmllZCBmb3JtYXQKKyAqIDB4MCBvciAweERGIChUb3BvbG9neSBEaXNjb3ZlcnkgU3BlY2lmaWMgTm9kZSBJZGVudGlmaWNhdGlvbiBEYXRhKQorICogcHJlc2VudCwgdGhpcyByb3V0aW5lIHdpbGwgaW52b2tlIHRoZSBscGZjX2Vsc19yc3Bfcm5pZF9hY2MoKSByb3V0aW5lIHRvCisgKiBBY2NlcHQgKEFDQykgdGhlIFJOSUQgRUxTIGNvbW1hbmQuIEFsbCB0aGUgb3RoZXIgUk5JRCBmb3JtYXRzIGFyZQorICogcmVqZWN0ZWQgYnkgaW52b2tpbmcgdGhlIGxwZmNfZWxzX3JzcF9yZWplY3QoKSByb3V0aW5lLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHJuaWQgaW9jYiAoY3VycmVudGx5IGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9ybmlkKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zNDQxLDYgKzQzMzUsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfbGlycjogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBsaXJyIGlvY2IuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIGEgTGluayBJbmNpZGVudCBSZXBvcnQgUmVnaXN0cmF0aW9uKExJUlIpIElPQ0IKKyAqIHJlY2VpdmVkIGFzIGFuIEVMUyB1bnNvbGljaXRlZCBldmVudC4gQ3VycmVudGx5LCB0aGlzIGZ1bmN0aW9uIGp1c3QgaW52b2tlcworICogdGhlIGxwZmNfZWxzX3JzcF9yZWplY3QoKSByb3V0aW5lIHRvIHJlamVjdCB0aGUgTElSUiBJT0NCIHVuY29uZGl0aW9uYWxseS4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBsaXJyIGlvY2IgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfbGlycihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzQ1Niw2ICs0MzYzLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcnNwX3Jwc19hY2M6IENvbXBsZXRpb24gY2FsbGJrIGZ1bmMgZm9yIE1CWF9SRUFEX0xOS19TVEFUIG1ib3ggY21kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIE1CWF9SRUFEX0xOS19TVEFUCisgKiBtYWlsYm94IGNvbW1hbmQuIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gaXMgdG8gYWN0dWFsbHkgc2VuZCB0aGUgQWNjZXB0CisgKiAoQUNDKSByZXNwb25zZSB0byBhIFJlYWQgUG9ydCBTdGF0dXMgKFJQUykgdW5zb2xpY2l0ZWQgSU9DQiBldmVudC4gSXQKKyAqIGNvbGxlY3RzIHRoZSBsaW5rIHN0YXRpc3RpY3MgZnJvbSB0aGUgY29tcGxldGlvbiBvZiB0aGUgTUJYX1JFQURfTE5LX1NUQVQKKyAqIG1haWxib3ggY29tbWFuZCwgY29uc3RydWN0cyB0aGUgUlBTIHJlc3BvbnNlIHdpdGggdGhlIGxpbmsgc3RhdGlzdGljcworICogY29sbGVjdGVkLCBhbmQgdGhlbiBpbnZva2VzIHRoZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0byBzZW5kIEFDQworICogcmVzcG9uc2UgdG8gdGhlIFJQUy4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIFJQUyBBY2NlcHQgUmVzcG9uc2UgRUxTIElPQ0IgY29tbWFuZC4KKyAqCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19lbHNfcnNwX3Jwc19hY2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKIHsKQEAgLTM1MzEsNiArNDQ1NywyNCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfcnBzOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIHJwcyBpb2NiLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBSZWFkIFBvcnQgU3RhdHVzIChSUFMpIElPQ0IgcmVjZWl2ZWQgYXMgYW4KKyAqIEVMUyB1bnNvbGljaXRlZCBldmVudC4gSXQgZmlyc3QgY2hlY2tzIHRoZSByZW1vdGUgcG9ydCBzdGF0ZS4gSWYgdGhlCisgKiByZW1vdGUgcG9ydCBpcyBub3QgaW4gTkxQX1NURV9VTk1BUFBFRF9OT0RFIHN0YXRlIG9yIE5MUF9TVEVfTUFQUEVEX05PREUKKyAqIHN0YXRlLCBpdCBpbnZva2VzIHRoZSBscGZjX2Vsc19yc3BfcmVqZWN0KCkgcm91dGluZSB0byBzZW5kIHRoZSByZWplY3QKKyAqIHJlc3BvbnNlLiBPdGhlcndpc2UsIGl0IGlzc3VlIHRoZSBNQlhfUkVBRF9MTktfU1RBVCBtYWlsYm94IGNvbW1hbmQKKyAqIGZvciByZWFkaW5nIHRoZSBIQkEgbGluayBzdGF0aXN0aWNzLiBJdCBpcyBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLAorICogbHBmY19lbHNfcnNwX3Jwc19hY2MoKSwgc2V0IHRvIHRoZSBNQlhfUkVBRF9MTktfU1RBVCBtYWlsYm94IGNvbW1hbmQKKyAqIHRvIGFjdHVhbGx5IHNlbmRpbmcgb3V0IFJQUyBBY2NlcHQgKEFDQykgcmVzcG9uc2UuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHJwcyBpb2NiIChjdXJyZW50bHkgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X3JwcyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zNTQ0LDE0ICs0NDg4LDkgQEAKIAlzdHJ1Y3QgbHNfcmp0IHN0YXQ7CiAKIAlpZiAoKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1VOTUFQUEVEX05PREUpICYmCi0JICAgIChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkpIHsKLQkJc3RhdC51bi5iLmxzUmp0UnN2ZDAgPSAwOwotCQlzdGF0LnVuLmIubHNSanRSc25Db2RlID0gTFNSSlRfVU5BQkxFX1RQQzsKLQkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZUV4cCA9IExTRVhQX0NBTlRfR0lWRV9EQVRBOwotCQlzdGF0LnVuLmIudmVuZG9yVW5pcXVlID0gMDsKLQkJbHBmY19lbHNfcnNwX3JlamVjdCh2cG9ydCwgc3RhdC51bi5sc1JqdEVycm9yLCBjbWRpb2NiLCBuZGxwLAotCQkJTlVMTCk7Ci0JfQorCSAgICAobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTUFQUEVEX05PREUpKQorCQkvKiByZWplY3QgdGhlIHVuc29saWNpdGVkIFJQUyByZXF1ZXN0IGFuZCBkb25lIHdpdGggaXQgKi8KKwkJZ290byByZWplY3Rfb3V0OwogCiAJcGNtZCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgY21kaW9jYi0+Y29udGV4dDI7CiAJbHAgPSAodWludDMyX3QgKikgcGNtZC0+dmlydDsKQEAgLTM1ODQsNiArNDUyMyw5IEBACiAJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCX0KIAl9CisKK3JlamVjdF9vdXQ6CisJLyogaXNzdWUgcmVqZWN0aW9uIHJlc3BvbnNlICovCiAJc3RhdC51bi5iLmxzUmp0UnN2ZDAgPSAwOwogCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOwogCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9DQU5UX0dJVkVfREFUQTsKQEAgLTM1OTIsNiArNDUzNCwyNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JzcF9ycGxfYWNjOiBJc3N1ZSBhbiBhY2NlcHQgcnBsIGVscyBjb21tYW5kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRzaXplOiBzaXplIG9mIHRoZSBFTFMgY29tbWFuZC4KKyAqIEBvbGRpb2NiOiBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZWVzIGFuIEFjY2VwdCAoQUNDKSBSZWFkIFBvcnQgTGlzdCAoUlBMKSBFTFMgY29tbWFuZC4KKyAqIEl0IGlzIHRvIGJlIGNhbGxlZCBieSB0aGUgbHBmY19lbHNfcmN2X3JwbCgpIHJvdXRpbmUgdG8gYWNjZXB0IHRoZSBSUEwuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBSUEwgQWNjZXB0IFJlc3BvbnNlIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIEFDQyBSUEwgRUxTIGNvbW1hbmQKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBBQ0MgUlBMIEVMUyBjb21tYW5kCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yc3BfcnBsX2FjYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQxNl90IGNtZHNpemUsCiAJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKm9sZGlvY2IsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzY0NSw2ICs0NjA2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X3JwbDogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBycGwgaW9jYi4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgUmVhZCBQb3J0IExpc3QgKFJQTCkgSU9DQiByZWNlaXZlZCBhcyBhbiBFTFMKKyAqIHVuc29saWNpdGVkIGV2ZW50LiBJdCBmaXJzdCBjaGVja3MgdGhlIHJlbW90ZSBwb3J0IHN0YXRlLiBJZiB0aGUgcmVtb3RlCisgKiBwb3J0IGlzIG5vdCBpbiBOTFBfU1RFX1VOTUFQUEVEX05PREUgYW5kIE5MUF9TVEVfTUFQUEVEX05PREUgc3RhdGVzLCBpdAorICogaW52b2tlcyB0aGUgbHBmY19lbHNfcnNwX3JlamVjdCgpIHJvdXRpbmUgdG8gc2VuZCByZWplY3QgcmVzcG9uc2UuCisgKiBPdGhlcndpc2UsIHRoaXMgcm91dGluZSB0aGVuIGludm9rZXMgdGhlIGxwZmNfZWxzX3JzcF9ycGxfYWNjKCkgcm91dGluZQorICogdG8gYWNjZXB0IHRoZSBSUEwuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgcnBsIGlvY2IgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfcnBsKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTM2NTgsMTIgKzQ2MzUsMTUgQEAKIAogCWlmICgobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfVU5NQVBQRURfTk9ERSkgJiYKIAkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSkgeworCQkvKiBpc3N1ZSByZWplY3Rpb24gcmVzcG9uc2UgKi8KIAkJc3RhdC51bi5iLmxzUmp0UnN2ZDAgPSAwOwogCQlzdGF0LnVuLmIubHNSanRSc25Db2RlID0gTFNSSlRfVU5BQkxFX1RQQzsKIAkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZUV4cCA9IExTRVhQX0NBTlRfR0lWRV9EQVRBOwogCQlzdGF0LnVuLmIudmVuZG9yVW5pcXVlID0gMDsKIAkJbHBmY19lbHNfcnNwX3JlamVjdCh2cG9ydCwgc3RhdC51bi5sc1JqdEVycm9yLCBjbWRpb2NiLCBuZGxwLAogCQkJTlVMTCk7CisJCS8qIHJlamVjdGVkIHRoZSB1bnNvbGljaXRlZCBSUEwgcmVxdWVzdCBhbmQgZG9uZSB3aXRoIGl0ICovCisJCXJldHVybiAwOwogCX0KIAogCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2ItPmNvbnRleHQyOwpAQCAtMzY4NSw2ICs0NjY1LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X2ZhcnA6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgZmFycCByZXF1ZXN0IGVscyBjb21tYW5kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgRmlicmUgQ2hhbm5lbCBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wKKyAqIChGQVJQKSBSZXF1ZXN0IElPQ0IgcmVjZWl2ZWQgYXMgYW4gRUxTIHVuc29saWNpdGVkIGV2ZW50LiBDdXJyZW50bHksCisgKiB0aGUgbHBmYyBkcml2ZXIgb25seSBzdXBwb3J0cyBtYXRjaGluZyBvbiBXV1BOIG9yIFdXTk4gZm9yIEZBUlAuIEFzIHN1Y2gsCisgKiBGQVJQX01BVENIX1BPUlQgZmxhZyBhbmQgRkFSUF9NQVRDSF9OT0RFIGZsYWcgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUKKyAqIE1hdGNoIEZsYWcgaW4gdGhlIEZBUlAgcmVxdWVzdCBJT0NCOiBpZiBGQVJQX01BVENIX1BPUlQgZmxhZyBpcyBzZXQsIHRoZQorICogcmVtb3RlIFBvcnROYW1lIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIEZDIFBvcnROYW1lIHN0b3JlZCBpbiB0aGUgQHZwb3J0CisgKiBkYXRhIHN0cnVjdHVyZTsgaWYgRkFSUF9NQVRDSF9OT0RFIGZsYWcgaXMgc2V0LCB0aGUgcmVtb3RlIE5vZGVOYW1lIGlzCisgKiBjb21wYXJlZCBhZ2FpbnN0IHRoZSBGQyBOb2RlTmFtZSBzdG9yZWQgaW4gdGhlIEB2cG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIElmIGFueSBvZiB0aGVzZSBtYXRjaGVzIGFuZCB0aGUgRkFSUF9SRVFVRVNUX0ZBUlBSIGZsYWcgaXMgc2V0IGluIHRoZQorICogRkFSUCByZXF1ZXN0IElPQ0IgUmVzcG9uc2UgRmxhZywgdGhlIGxwZmNfaXNzdWVfZWxzX2ZhcnByKCkgcm91dGluZSBpcworICogaW52b2tlZCB0byBzZW5kIG91dCBGQVJQIFJlc3BvbnNlIHRvIHRoZSByZW1vdGUgbm9kZS4gQmVmb3JlIHNlbmRpbmcgdGhlCisgKiBGQVJQIFJlc3BvbnNlLCBob3dldmVyLCB0aGUgRkFSUF9SRVFVRVNUX1BMT0dJIGZsYWcgaXMgY2hlY2sgaW4gdGhlIEZBUlAKKyAqIHJlcXVlc3QgSU9DQiBSZXNwb25zZSBGbGFnIGFuZCwgaWYgaXQgaXMgc2V0LCB0aGUgbHBmY19pc3N1ZV9lbHNfcGxvZ2koKQorICogcm91dGluZSBpcyBpbnZva2VkIHRvIGxvZyBpbnRvIHRoZSByZW1vdGUgcG9ydCBmaXJzdC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gRWl0aGVyIHRoZSBGQVJQIE1hdGNoIE1vZGUgbm90IHN1cHBvcnRlZCBvciBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfZmFycChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzc0NCw2ICs0NzQ4LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X2ZhcnByOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIGZhcnAgcmVzcG9uc2UgaW9jYi4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgRmlicmUgQ2hhbm5lbCBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wKKyAqIFJlc3BvbnNlIChGQVJQUikgSU9DQiByZWNlaXZlZCBhcyBhbiBFTFMgdW5zb2xpY2l0ZWQgZXZlbnQuIEl0IHNpbXBseQorICogaW52b2tlcyB0aGUgbHBmY19lbHNfcnNwX2FjYygpIHJvdXRpbmUgdG8gdGhlIHJlbW90ZSBub2RlIHRvIGFjY2VwdAorICogdGhlIEZBUlAgcmVzcG9uc2UgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBGQVJQUiBJT0NCIChjdXJyZW50bHkgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X2ZhcnByKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICAqbmRscCkKQEAgLTM3NjgsNiArNDc4NiwyNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9mYW46IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgZmFuIGlvY2IgY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmYW5fbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIGEgRmFicmljIEFkZHJlc3MgTm90aWZpY2F0aW9uIChGQU4pIElPQ0IKKyAqIGNvbW1hbmQgcmVjZWl2ZWQgYXMgYW4gRUxTIHVuc29saWNpdGVkIGV2ZW50LiBUaGUgRkFOIEVMUyBjb21tYW5kIHdpbGwKKyAqIG9ubHkgYmUgcHJvY2Vzc2VkIG9uIGEgcGh5c2ljYWwgcG9ydCAoaS5lLiwgdGhlIEB2cG9ydCByZXByZXNlbnRzIHRoZQorICogcGh5c2ljYWwgcG9ydCkuIFRoZSBmYWJyaWMgTm9kZU5hbWUgYW5kIFBvcnROYW1lIGZyb20gdGhlIEZBTiBJT0NCIGFyZQorICogY29tcGFyZWQgYWdhaW5zdCB0aG9zZSBpbiB0aGUgcGhiYSBkYXRhIHN0cnVjdHVyZS4gSWYgYW55IG9mIHRob3NlIGlzCisgKiBkaWZmZXJlbnQsIHRoZSBscGZjX2luaXRpYWxfZmxvZ2koKSByb3V0aW5lIGlzIGludm9rZWQgdG8gaW5pdGlhbGl6ZQorICogRmFicmljIExvZ2luIChGTE9HSSkgdG8gdGhlIGZhYnJpYyB0byBzdGFydCB0aGUgZGlzY292ZXIgb3Zlci4gT3RoZXJ3aXNlLAorICogaWYgYm90aCBvZiB0aG9zZSBhcmUgaWRlbnRpY2FsLCB0aGUgbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW4oKSByb3V0aW5lCisgKiBpcyBpbnZva2VkIHRvIHJlZ2lzdGVyIGxvZ2luIHRvIHRoZSBmYWJyaWMuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmFuIGlvY2IgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApLgorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X2ZhbihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKmZhbl9uZGxwKQpAQCAtMzc5Nyw2ICs0ODM0LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfdGltZW91dDogSGFuZGxlciBmdW5jaXRvbiB0byB0aGUgZWxzIHRpbWVyLgorICogQHB0cjogaG9sZGVyIGZvciB0aGUgdGltZXIgZnVuY3Rpb24gYXNzb2NpYXRlZCBkYXRhLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJ5IHRoZSBFTFMgdGltZXIgYWZ0ZXIgdGltZW91dC4gSXQgcG9zdHMgdGhlIEVMUworICogdGltZXIgdGltZW91dCBldmVudCBieSBzZXR0aW5nIHRoZSBXT1JLRVJfRUxTX1RNTyBiaXQgdG8gdGhlIHdvcmsgcG9ydAorICogZXZlbnQgYml0bWFwIGFuZCB0aGVuIGludm9rZXMgdGhlIGxwZmNfd29ya2VyX3dha2VfdXAoKSByb3V0aW5lIHRvIHdha2UKKyAqIHVwIHRoZSB3b3JrZXIgdGhyZWFkLiBJdCBpcyBmb3IgdGhlIHdvcmtlciB0aHJlYWQgdG8gaW52b2tlIHRoZSByb3V0aW5lCisgKiBscGZjX2Vsc190aW1lb3V0X2hhbmRsZXIoKSB0byB3b3JrIG9uIHRoZSBwb3N0ZWQgZXZlbnQgV09SS0VSX0VMU19UTU8uCisgKiovCiB2b2lkCiBscGZjX2Vsc190aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKQogewpAQCAtMzgxNiw2ICs0ODYzLDE1IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3RpbWVvdXRfaGFuZGxlcjogUHJvY2VzcyBhbiBlbHMgdGltZW91dCBldmVudC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgYWN0dWFsIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBwcm9jZXNzZXMgYW4gRUxTIHRpbWVvdXQKKyAqIGV2ZW50LiBJdCB3YWxrcyB0aGUgRUxTIHJpbmcgdG8gZ2V0IGFuZCBhYm9ydCBhbGwgdGhlIElPQ0JzIChleGNlcHQgdGhlCisgKiBBQk9SVC9DTE9TRS9GQVJQL0ZBUlBSL0ZESVNDKSwgd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHZwb3J0IGJ5CisgKiBpbnZva2luZyB0aGUgbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcoKSByb3V0aW5lLgorICoqLwogdm9pZAogbHBmY19lbHNfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTM4ODYsNiArNDk0MiwyNiBAQAogCQltb2RfdGltZXIoJnZwb3J0LT5lbHNfdG1vZnVuYywgamlmZmllcyArIEhaICogdGltZW91dCk7CiB9CiAKKy8qKgorICogbHBmY19lbHNfZmx1c2hfY21kOiBDbGVhbiB1cCB0aGUgb3V0c3RhbmRpbmcgZWxzIGNvbW1hbmRzIHRvIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGNsZWFuIHVwIGFsbCB0aGUgb3V0c3RhbmRpbmcgRUxTIGNvbW1hbmRzIG9uIGEKKyAqIEB2cG9ydC4gSXQgZmlyc3QgYWJvcnRzIHRoZSBAdnBvcnQgYnkgaW52b2tpbmcgbHBmY19mYWJyaWNfYWJvcnRfdnBvcnQoKQorICogcm91dGluZS4gQWZ0ZXIgdGhhdCwgaXQgd2Fsa3MgdGhlIEVMUyB0cmFuc21pdCBxdWV1ZSB0byByZW1vdmUgYWxsIHRoZQorICogSU9DQnMgd2l0aCB0aGUgQHZwb3J0IG90aGVyIHRoYW4gdGhlIFFVRV9SSU5HIGFuZCBBQk9SVC9DTE9TRSBJT0NCcy4gRm9yCisgKiB0aGUgSU9DQnMgd2l0aCBhIG5vbi1OVUxMIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSBjYWxsYmFjaworICogZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHN0YXR1cyBzZXQgdG8gSU9TVEFUX0xPQ0FMX1JFSkVDVCBhbmQKKyAqIHVuLnVscFdvcmRbNF0gc2V0IHRvIElPRVJSX1NMSV9BQk9SVEVELiBGb3IgSU9DQnMgd2l0aCBhIE5VTEwgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSBJT0NCIHdpbGwgc2ltcGx5IGJlIHJlbGVhc2VkLiBGaW5hbGx5LCBpdCB3YWxrcworICogdGhlIEVMUyB0cmFuc21pdCBjb21wbGV0aW9uIHF1ZXVlIHRvIGlzc3VlIGFuIGFib3J0IElPQ0IgdG8gYW55IHRyYW5zbWl0CisgKiBjb21wbGV0aW9uIHF1ZXVlIElPQ0IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIEB2cG9ydCBhbmQgaXMgbm90CisgKiBhbiBJT0NCIGZyb20gbGliZGZjIChpLmUuLCB0aGUgbWFuYWdlbWVudCBwbGFuZSBJT0NCcyB0aGF0IGFyZSBub3QKKyAqIHBhcnQgb2YgdGhlIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lKSBvdXQgdG8gSEJBIGJ5IGludm9raW5nIHRoZQorICogbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcoKSByb3V0aW5lLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpc3N1ZXMgdGhlCisgKiBhYm9ydCBJT0NCIHRvIGFueSB0cmFuc21pdCBjb21wbGV0aW9uIHF1ZXVlZWQgSU9DQiwgaXQgZG9lcyBub3QgZ3VhcmFudGVlCisgKiB0aGUgSU9DQnMgYXJlIGFib3J0ZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKiovCiB2b2lkCiBscGZjX2Vsc19mbHVzaF9jbWQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMzk0OCw2ICs1MDI0LDIzIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2ZsdXNoX2FsbF9jbWQ6IENsZWFuIHVwIGFsbCB0aGUgb3V0c3RhbmRpbmcgZWxzIGNvbW1hbmRzIHRvIGEgSEJBLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gY2xlYW4gdXAgYWxsIHRoZSBvdXRzdGFuZGluZyBFTFMgY29tbWFuZHMgb24gYQorICogQHBoYmEuIEl0IGZpcnN0IGFib3J0cyB0aGUgQHBoYmEgYnkgaW52b2tpbmcgdGhlIGxwZmNfZmFicmljX2Fib3J0X2hiYSgpCisgKiByb3V0aW5lLiBBZnRlciB0aGF0LCBpdCB3YWxrcyB0aGUgRUxTIHRyYW5zbWl0IHF1ZXVlIHRvIHJlbW92ZSBhbGwgdGhlCisgKiBJT0NCcyB0byB0aGUgQHBoYmEgb3RoZXIgdGhhbiB0aGUgUVVFX1JJTkcgYW5kIEFCT1JUL0NMT1NFIElPQ0JzLiBGb3IKKyAqIHRoZSBJT0NCcyB3aXRoIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGFzc29jaWF0ZWQsIHRoZSBjYWxsYmFjaworICogZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHN0YXR1cyBzZXQgdG8gSU9TVEFUX0xPQ0FMX1JFSkVDVCBhbmQKKyAqIHVuLnVscFdvcmRbNF0gc2V0IHRvIElPRVJSX1NMSV9BQk9SVEVELiBGb3IgSU9DQnMgd2l0aG91dCB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gYXNzb2NpYXRlZCwgdGhlIElPQ0Igd2lsbCBzaW1wbHkgYmUgcmVsZWFzZWQuIEZpbmFsbHksCisgKiBpdCB3YWxrcyB0aGUgRUxTIHRyYW5zbWl0IGNvbXBsZXRpb24gcXVldWUgdG8gaXNzdWUgYW4gYWJvcnQgSU9DQiB0byBhbnkKKyAqIHRyYW5zbWl0IGNvbXBsZXRpb24gcXVldWUgSU9DQiB0aGF0IGlzIG5vdCBhbiBJT0NCIGZyb20gbGliZGZjIChpLmUuLCB0aGUKKyAqIG1hbmFnZW1lbnQgcGxhbmUgSU9DQnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lKQorICogb3V0IHRvIEhCQSBieSBpbnZva2luZyB0aGUgbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcoKSByb3V0aW5lLgorICoqLwogdm9pZAogbHBmY19lbHNfZmx1c2hfYWxsX2NtZChzdHJ1Y3QgbHBmY19oYmEgICpwaGJhKQogewpAQCAtMzk5Miw2ICs1MDg1LDEzMCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3NlbmRfZWxzX2ZhaWx1cmVfZXZlbnQ6IFBvc3RzIGFuIEVMUyBjb21tYW5kIGZhaWx1cmUgZXZlbnQuCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKiBAY21kaW9jYnA6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiIHdoaWNoIHJlcG9ydGVkIGVycm9yLgorICogQHJzcGlvY2JwOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2Igd2hpY2ggcmVwb3J0ZWQgZXJyb3IuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBldmVudCB3aGVuIHRoZXJlIGlzIGFuIEVMUyBjb21tYW5kCisgKiBmYWlsdXJlLgorICoqLwordm9pZAorbHBmY19zZW5kX2Vsc19mYWlsdXJlX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicCwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicCkKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBjbWRpb2NicC0+dnBvcnQ7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOworCXN0cnVjdCBscGZjX2xzcmp0X2V2ZW50IGxzcmp0X2V2ZW50OworCXN0cnVjdCBscGZjX2ZhYnJpY19ldmVudF9oZWFkZXIgZmFicmljX2V2ZW50OworCXN0cnVjdCBsc19yanQgc3RhdDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwl1aW50MzJfdCAqcGNtZDsKKworCW5kbHAgPSBjbWRpb2NicC0+Y29udGV4dDE7CisJaWYgKCFuZGxwIHx8ICFOTFBfQ0hLX05PREVfQUNUKG5kbHApKQorCQlyZXR1cm47CisKKwlpZiAocnNwaW9jYnAtPmlvY2IudWxwU3RhdHVzID09IElPU1RBVF9MU19SSlQpIHsKKwkJbHNyanRfZXZlbnQuaGVhZGVyLmV2ZW50X3R5cGUgPSBGQ19SRUdfRUxTX0VWRU5UOworCQlsc3JqdF9ldmVudC5oZWFkZXIuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX0xTUkpUX1JDVjsKKwkJbWVtY3B5KGxzcmp0X2V2ZW50LmhlYWRlci53d3BuLCAmbmRscC0+bmxwX3BvcnRuYW1lLAorCQkJc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJbWVtY3B5KGxzcmp0X2V2ZW50LmhlYWRlci53d25uLCAmbmRscC0+bmxwX25vZGVuYW1lLAorCQkJc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJcGNtZCA9ICh1aW50MzJfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikKKwkJCWNtZGlvY2JwLT5jb250ZXh0MiktPnZpcnQpOworCQlsc3JqdF9ldmVudC5jb21tYW5kID0gKnBjbWQ7CisJCXN0YXQudW4ubHNSanRFcnJvciA9IGJlMzJfdG9fY3B1KHJzcGlvY2JwLT5pb2NiLnVuLnVscFdvcmRbNF0pOworCQlsc3JqdF9ldmVudC5yZWFzb25fY29kZSA9IHN0YXQudW4uYi5sc1JqdFJzbkNvZGU7CisJCWxzcmp0X2V2ZW50LmV4cGxhbmF0aW9uID0gc3RhdC51bi5iLmxzUmp0UnNuQ29kZUV4cDsKKwkJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwKKwkJCWZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJCXNpemVvZihsc3JqdF9ldmVudCksCisJCQkoY2hhciAqKSZsc3JqdF9ldmVudCwKKwkJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOworCQlyZXR1cm47CisJfQorCWlmICgocnNwaW9jYnAtPmlvY2IudWxwU3RhdHVzID09IElPU1RBVF9OUE9SVF9CU1kpIHx8CisJCShyc3Bpb2NicC0+aW9jYi51bHBTdGF0dXMgPT0gSU9TVEFUX0ZBQlJJQ19CU1kpKSB7CisJCWZhYnJpY19ldmVudC5ldmVudF90eXBlID0gRkNfUkVHX0ZBQlJJQ19FVkVOVDsKKwkJaWYgKHJzcGlvY2JwLT5pb2NiLnVscFN0YXR1cyA9PSBJT1NUQVRfTlBPUlRfQlNZKQorCQkJZmFicmljX2V2ZW50LnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9QT1JUX0JVU1k7CisJCWVsc2UKKwkJCWZhYnJpY19ldmVudC5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfRkFCUklDX0JVU1k7CisJCW1lbWNweShmYWJyaWNfZXZlbnQud3dwbiwgJm5kbHAtPm5scF9wb3J0bmFtZSwKKwkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCW1lbWNweShmYWJyaWNfZXZlbnQud3dubiwgJm5kbHAtPm5scF9ub2RlbmFtZSwKKwkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsCisJCQlmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCQlzaXplb2YoZmFicmljX2V2ZW50KSwKKwkJCShjaGFyICopJmZhYnJpY19ldmVudCwKKwkJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOworCQlyZXR1cm47CisJfQorCit9CisKKy8qKgorICogbHBmY19zZW5kX2Vsc19ldmVudDogUG9zdHMgdW5zb2xpY2l0ZWQgZWxzIGV2ZW50LgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZwb3J0IG9iamVjdC4KKyAqIEBuZGxwOiBQb2ludGVyIEZDIG5vZGUgb2JqZWN0LgorICogQGNtZDogRUxTIGNvbW1hbmQgY29kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvc3RzIGFuIGV2ZW50IHdoZW4gdGhlcmUgaXMgYW4gaW5jb21pbmcKKyAqIHVuc29saWNpdGVkIEVMUyBjb21tYW5kLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfc2VuZF9lbHNfZXZlbnQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAorCQkgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCisJCSAgICB1aW50MzJfdCBjbWQpCit7CisJc3RydWN0IGxwZmNfZWxzX2V2ZW50X2hlYWRlciBlbHNfZGF0YTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisKKwllbHNfZGF0YS5ldmVudF90eXBlID0gRkNfUkVHX0VMU19FVkVOVDsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRUxTX0NNRF9QTE9HSToKKwkJZWxzX2RhdGEuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX1BMT0dJX1JDVjsKKwkJYnJlYWs7CisJY2FzZSBFTFNfQ01EX1BSTE86CisJCWVsc19kYXRhLnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9QUkxPX1JDVjsKKwkJYnJlYWs7CisJY2FzZSBFTFNfQ01EX0FESVNDOgorCQllbHNfZGF0YS5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfQURJU0NfUkNWOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCW1lbWNweShlbHNfZGF0YS53d3BuLCAmbmRscC0+bmxwX3BvcnRuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCW1lbWNweShlbHNfZGF0YS53d25uLCAmbmRscC0+bmxwX25vZGVuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsCisJCWZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJc2l6ZW9mKGVsc19kYXRhKSwKKwkJKGNoYXIgKikmZWxzX2RhdGEsCisJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOworCisJcmV0dXJuOworfQorCisKKy8qKgorICogbHBmY19lbHNfdW5zb2xfYnVmZmVyOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIGV2ZW50IGRhdGEgYnVmZmVyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcHJpbmc6IHBvaW50ZXIgdG8gYSBTTEkgcmluZy4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZWxzaW9jYjogcG9pbnRlciB0byBscGZjIGVscyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIHByb2Nlc3NpbmcgdGhlIElPQ0IgYXNzb2NpYXRlZCB3aXRoIGEgdW5zb2xpY2l0ZWQKKyAqIGV2ZW50LiBJdCBmaXJzdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlcmUgaXMgYW4gZXhpc3RpbmcgbmRscCB0aGF0IG1hdGNoZXMKKyAqIHRoZSBESUQgZnJvbSB0aGUgdW5zb2xpY2l0ZWQgSU9DQi4gSWYgbm90LCBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aAorICogdGhlIERJRCBmcm9tIHRoZSB1bnNvbGljaXRlZCBJT0NCLiBUaGUgRUxTIGNvbW1hbmQgZnJvbSB0aGUgdW5zb2xpY2l0ZWQKKyAqIElPQ0IgaXMgdGhlbiB1c2VkIHRvIGludm9rZSB0aGUgcHJvcGVyIHJvdXRpbmUgYW5kIHRvIHNldCB1cCBwcm9wZXIgc3RhdGUKKyAqIG9mIHRoZSBkaXNjb3Zlcnkgc3RhdGUgbWFjaGluZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2Vsc191bnNvbF9idWZmZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgICAgIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmVsc2lvY2IpCkBAIC00MDU5LDggKzUyNzYsNiBAQAogCX0KIAogCXBoYmEtPmZjX3N0YXQuZWxzUmN2RnJhbWUrKzsKLQlpZiAoZWxzaW9jYi0+Y29udGV4dDEpCi0JCWxwZmNfbmxwX3B1dChlbHNpb2NiLT5jb250ZXh0MSk7CiAKIAllbHNpb2NiLT5jb250ZXh0MSA9IGxwZmNfbmxwX2dldChuZGxwKTsKIAllbHNpb2NiLT52cG9ydCA9IHZwb3J0OwpAQCAtNDA4MSw2ICs1Mjk2LDcgQEAKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZQTE9HSSsrOwogCQluZGxwID0gbHBmY19wbG9naV9jb25maXJtX25wb3J0KHBoYmEsIHBheWxvYWQsIG5kbHApOwogCisJCWxwZmNfc2VuZF9lbHNfZXZlbnQodnBvcnQsIG5kbHAsIGNtZCk7CiAJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfRElTQ19BVVRIKSB7CiAJCQlpZiAoIShwaGJhLT5wcG9ydC0+ZmNfZmxhZyAmIEZDX1BUMlBUKSB8fAogCQkJCShwaGJhLT5wcG9ydC0+ZmNfZmxhZyAmIEZDX1BUMlBUX1BMT0dJKSkgewpAQCAtNDEzMCw2ICs1MzQ2LDcgQEAKIAkJCWRpZCwgdnBvcnQtPnBvcnRfc3RhdGUsIG5kbHAtPm5scF9mbGFnKTsKIAogCQlwaGJhLT5mY19zdGF0LmVsc1JjdlBSTE8rKzsKKwkJbHBmY19zZW5kX2Vsc19ldmVudCh2cG9ydCwgbmRscCwgY21kKTsKIAkJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19ESVNDX0FVVEgpIHsKIAkJCXJqdF9lcnIgPSBMU1JKVF9VTkFCTEVfVFBDOwogCQkJYnJlYWs7CkBAIC00MTQ3LDYgKzUzNjQsNyBAQAogCQkJIlJDViBBRElTQzogICAgICAgZGlkOngleC9zdGU6eCV4IGZsZzp4JXgiLAogCQkJZGlkLCB2cG9ydC0+cG9ydF9zdGF0ZSwgbmRscC0+bmxwX2ZsYWcpOwogCisJCWxwZmNfc2VuZF9lbHNfZXZlbnQodnBvcnQsIG5kbHAsIGNtZCk7CiAJCXBoYmEtPmZjX3N0YXQuZWxzUmN2QURJU0MrKzsKIAkJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19ESVNDX0FVVEgpIHsKIAkJCXJqdF9lcnIgPSBMU1JKVF9VTkFCTEVfVFBDOwpAQCAtNDI3MCw2ICs1NDg4LDggQEAKIAkJCU5VTEwpOwogCX0KIAorCWxwZmNfbmxwX3B1dChlbHNpb2NiLT5jb250ZXh0MSk7CisJZWxzaW9jYi0+Y29udGV4dDEgPSBOVUxMOwogCXJldHVybjsKIAogZHJvcGl0OgpAQCAtNDI4Miw2ICs1NTAyLDE5IEBACiAJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZEcm9wKys7CiB9CiAKKy8qKgorICogbHBmY19maW5kX3Zwb3J0X2J5X3ZwaWQ6IEZpbmQgYSB2cG9ydCBvbiBhIEhCQSB0aHJvdWdoIHZwb3J0IGlkZW50aWZpZXIuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cGk6IGhvc3QgdmlydHVhbCBOX1BvcnQgaWRlbnRpZmllci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZmluZHMgYSB2cG9ydCBvbiBhIEhCQSAocmVmZXJyZWQgYnkgQHBoYmEpIHRocm91Z2ggYQorICogQHZwaS4gVGhlIGZ1bmN0aW9uIHdhbGtzIHRoZSBIQkEncyB2cG9ydCBsaXN0IGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzCisgKiBvZiB0aGUgdnBvcnQgd2l0aCB0aGUgbWF0Y2hpbmcgQHZwaS4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAgTlVMTCAtIE5vIHZwb3J0IHdpdGggdGhlIG1hdGNoaW5nIEB2cGkgZm91bmQKKyAqICAgIE90aGVyd2lzZSAtIEFkZHJlc3MgdG8gdGhlIHZwb3J0IHdpdGggdGhlIG1hdGNoaW5nIEB2cGkuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfdnBvcnQgKgogbHBmY19maW5kX3Zwb3J0X2J5X3ZwaWQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCB2cGkpCiB7CkBAIC00Mjk5LDYgKzU1MzIsMTggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc191bnNvbF9ldmVudDogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBldmVudCBmcm9tIGFuIGVscyBzbGkgcmluZy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHByaW5nOiBwb2ludGVyIHRvIGEgU0xJIHJpbmcuCisgKiBAZWxzaW9jYjogcG9pbnRlciB0byBscGZjIGVscyBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgZXZlbnQgcmVjZWl2ZWQgZnJvbSBhIFNMSQorICogKFNlcnZpY2UgTGV2ZWwgSW50ZXJmYWNlKSByaW5nLiBUaGUgYWN0dWFsIHByb2Nlc3Npbmcgb2YgdGhlIGRhdGEgYnVmZmVyCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHVuc29saWNpdGVkIGV2ZW50IGlzIGRvbmUgYnkgaW52b2tpbmcgdGhlIHJvdXRpbmUKKyAqIGxwZmNfZWxzX3Vuc29sX2J1ZmZlcigpIGFmdGVyIHByb3Blcmx5IHNldCB1cCB0aGUgaW9jYiBidWZmZXIgZnJvbSB0aGUKKyAqIFNMSSByaW5nIG9uIHdoaWNoIHRoZSB1bnNvbGljaXRlZCBldmVudCB3YXMgcmVjZWl2ZWQuCisgKiovCiB2b2lkCiBscGZjX2Vsc191bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqZWxzaW9jYikKQEAgLTQzMDksNiArNTU1NCw3IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWYxID0gZWxzaW9jYi0+Y29udGV4dDI7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWYyID0gZWxzaW9jYi0+Y29udGV4dDM7CiAKKwllbHNpb2NiLT5jb250ZXh0MSA9IE5VTEw7CiAJZWxzaW9jYi0+Y29udGV4dDIgPSBOVUxMOwogCWVsc2lvY2ItPmNvbnRleHQzID0gTlVMTDsKIApAQCAtNDM1Niw4ICs1NjAyLDYgQEAKIAkgKiBUaGUgZGlmZmVyZW50IHVuc29saWNpdGVkIGV2ZW50IGhhbmRsZXJzIHdvdWxkIHRlbGwgdXMKIAkgKiBpZiB0aGV5IGFyZSBkb25lIHdpdGggIm1wIiBieSBzZXR0aW5nIGNvbnRleHQyIHRvIE5VTEwuCiAJICovCi0JbHBmY19ubHBfcHV0KGVsc2lvY2ItPmNvbnRleHQxKTsKLQllbHNpb2NiLT5jb250ZXh0MSA9IE5VTEw7CiAJaWYgKGVsc2lvY2ItPmNvbnRleHQyKSB7CiAJCWxwZmNfaW5fYnVmX2ZyZWUocGhiYSwgKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKWVsc2lvY2ItPmNvbnRleHQyKTsKIAkJZWxzaW9jYi0+Y29udGV4dDIgPSBOVUxMOwpAQCAtNDM3Niw2ICs1NjIwLDE5IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfZG9fc2NyX25zX3Bsb2dpOiBJc3N1ZSBhIHBsb2dpIHRvIHRoZSBuYW1lIHNlcnZlciBmb3Igc2NyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgUG9ydCBMb2dpbiAoUExPR0kpIHRvIHRoZSBOYW1lIFNlcnZlciB3aXRoCisgKiBTdGF0ZSBDaGFuZ2UgUmVxdWVzdCAoU0NSKSBmb3IgYSBAdnBvcnQuIFRoaXMgcm91dGluZSB3aWxsIGNyZWF0ZSBhbgorICogbmRscCBmb3IgdGhlIE5hbWUgU2VydmVyIGFzc29jaWF0ZWQgdG8gdGhlIEB2cG9ydCBpZiBzdWNoIG5vZGUgZG9lcworICogbm90IGFscmVhZHkgZXhpc3QuIFRoZSBQTE9HSSB0byBOYW1lIFNlcnZlciBpcyBpc3N1ZWQgYnkgaW52b2tpbmcgdGhlCisgKiBscGZjX2lzc3VlX2Vsc19wbG9naSgpIHJvdXRpbmUuIElmIEZhYnJpYy1EZXZpY2UgTWFuYWdlbWVudCBJbnRlcmZhY2UKKyAqIChGRE1JKSBpcyBjb25maWd1cmVkIHRvIHRoZSBAdnBvcnQsIGEgRkRNSSBub2RlIHdpbGwgYmUgY3JlYXRlZCBhbmQKKyAqIHRoZSBQTE9HSSB0byBGRE1JIGlzIGlzc3VlZCBieSBpbnZva2luZyBscGZjX2lzc3VlX2Vsc19wbG9naSgpIHJvdXRpbmUuCisgKiovCiB2b2lkCiBscGZjX2RvX3Njcl9uc19wbG9naShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTQ0MzQsNiArNTY5MSwxOCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfcmVnX25ld192cG9ydDogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB0byByZWdpc3RlciBuZXcgdnBvcnQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIG5ldyB2cG9ydAorICogbWFpbGJveCBjb21tYW5kLiBJZiB0aGUgbmV3IHZwb3J0IG1haWxib3ggY29tbWFuZCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LAorICogdGhlIGZhYnJpYyByZWdpc3RyYXRpb24gbG9naW4gc2hhbGwgYmUgcGVyZm9ybWVkIG9uIHBoeXNpY2FsIHBvcnQgKHRoZQorICogbmV3IHZwb3J0IGNyZWF0ZWQgaXMgYWN0dWFsbHkgYSBwaHlzaWNhbCBwb3J0LCB3aXRoIFZQSSAwKSBvciB0aGUgcG9ydAorICogbG9naW4gdG8gTmFtZSBTZXJ2ZXIgZm9yIFN0YXRlIENoYW5nZSBSZXF1ZXN0IChTQ1IpIHdpbGwgYmUgcGVyZm9ybWVkCisgKiBvbiB2aXJ0dWFsIHBvcnQgKHJlYWwgdmlydHVhbCBwb3J0LCB3aXRoIFZQSSBncmVhdGVyIHRoYW4gMCkuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX3JlZ19uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKIHsKQEAgLTQ0OTEsNiArNTc2MCwxNSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3JlZ2lzdGVyX25ld192cG9ydDogUmVnaXN0ZXIgYSBuZXcgdnBvcnQgd2l0aCBhIEhCQS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSByZWdpc3RlcnMgdGhlIEB2cG9ydCBhcyBhIG5ldyB2aXJ0dWFsIHBvcnQgd2l0aCBhIEhCQS4KKyAqIEl0IGlzIGRvbmUgdGhyb3VnaCBhIHJlZ2lzdGVyaW5nIHZwaSBtYWlsYm94IGNvbW1hbmQuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCiAJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTQ1MzEsNiArNTgwOSwyNiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX2ZkaXNjOiBDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBmZGlzYyBpb2NiIGNvbW1hbmQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB0byBhIEZhYnJpYyBEaXNjb3ZlcgorICogKEZESVNDKSBFTFMgY29tbWFuZC4gU2luY2UgYWxsIHRoZSBGRElTQyBFTFMgY29tbWFuZHMgYXJlIGlzc3VlZAorICogc2luZ2xlIHRocmVhZGVkLCBlYWNoIEZESVNDIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCByZXNldAorICogdGhlIGRpc2NvdmVyeSB0aW1lciBmb3IgYWxsIHZwb3J0cyBzdWNoIHRoYXQgdGhlIHRpbWVycyB3aWxsIG5vdCBnZXQKKyAqIHVubmVjZXNzYXJ5IHRpbWVvdXQuIFRoZSBmdW5jdGlvbiBjaGVja3MgdGhlIEZESVNDIElPQ0Igc3RhdHVzLiBJZiBlcnJvcgorICogZGV0ZWN0ZWQsIHRoZSB2cG9ydCB3aWxsIGJlIHNldCB0byBGQ19WUE9SVF9GQUlMRUQgc3RhdGUuIE90aGVyd2lzZSx0aGUKKyAqIHZwb3J0IHdpbGwgc2V0IHRvIEZDX1ZQT1JUX0FDVElWRSBzdGF0ZS4gSXQgdGhlbiBjaGVja3Mgd2hldGhlciB0aGUgRElECisgKiBhc3NpZ25lZCB0byB0aGUgdnBvcnQgaGFzIGJlZW4gY2hhbmdlZCB3aXRoIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBGRElTQworICogY29tbWFuZC4gSWYgc28sIGJvdGggUlBJIChSZW1vdGUgUG9ydCBJbmRleCkgYW5kIFZQSSAoVmlydHVhbCBQb3J0IEluZGV4KQorICogYXJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBIQkEsIGFuZCB0aGVuIHRoZSBscGZjX3JlZ2lzdGVyX25ld192cG9ydCgpCisgKiByb3V0aW5lIGlzIGludm9rZWQgdG8gcmVnaXN0ZXIgbmV3IHZwb3J0IHdpdGggdGhlIEhCQS4gT3RoZXJ3aXNlLCB0aGUKKyAqIGxwZmNfZG9fc2NyX25zX3Bsb2dpKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIGlzc3VlIGEgUExPR0kgdG8gdGhlIE5hbWUKKyAqIFNlcnZlciBmb3IgU3RhdGUgQ2hhbmdlIFJlcXVlc3QgKFNDUikuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19mZGlzYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC00NTY1LDU4ICs1ODYzLDgwIEBACiAJCQlnb3RvIG91dDsKIAkJLyogRkRJU0MgZmFpbGVkICovCiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAotCQkJCSAiMDEyNCBGRElTQyBmYWlsZWQuICglZC8lZClcbiIsCisJCQkJICIwMTI2IEZESVNDIGZhaWxlZC4gKCVkLyVkKVxuIiwKIAkJCQkgaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdKTsKKwkJZ290byBmZGlzY19mYWlsZWQ7CisJfQogCQlpZiAodnBvcnQtPmZjX3Zwb3J0LT52cG9ydF9zdGF0ZSA9PSBGQ19WUE9SVF9JTklUSUFMSVpJTkcpCiAJCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfRkFJTEVEKTsKIAkJbHBmY19ubHBfcHV0KG5kbHApOwogCQkvKiBnaXZpbmcgdXAgb24gRkRJU0MuIENhbmNlbCBkaXNjb3ZlcnkgdGltZXIgKi8KIAkJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfRkFCUklDOwotCQlpZiAodnBvcnQtPnBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApCi0JCQl2cG9ydC0+ZmNfZmxhZyB8PSAgRkNfUFVCTElDX0xPT1A7Ci0JCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXZwb3J0LT5mY19mbGFnIHw9IEZDX0ZBQlJJQzsKKwlpZiAodnBvcnQtPnBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApCisJCXZwb3J0LT5mY19mbGFnIHw9ICBGQ19QVUJMSUNfTE9PUDsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKLQkJdnBvcnQtPmZjX215RElEID0gaXJzcC0+dW4udWxwV29yZFs0XSAmIE1hc2tfRElEOwotCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfQUNUSVZFKTsKLQkJaWYgKCh2cG9ydC0+ZmNfcHJldkRJRCAhPSB2cG9ydC0+ZmNfbXlESUQpICYmCi0JCQkhKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkpIHsKLQkJCS8qIElmIG91ciBOcG9ydElEIGNoYW5nZWQsIHdlIG5lZWQgdG8gZW5zdXJlIGFsbAotCQkJICogcmVtYWluaW5nIE5QT1JUcyBnZXQgdW5yZWdfbG9naW4nZWQgc28gd2UgY2FuCi0JCQkgKiBpc3N1ZSB1bnJlZ192cGkuCi0JCQkgKi8KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgbmV4dF9ucCwKLQkJCQkmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKLQkJCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkgfHwKLQkJCQkgICAgKG5wLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9OUFJfTk9ERSkgfHwKLQkJCQkgICAgIShucC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSkKLQkJCQkJY29udGludWU7Ci0JCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQlucC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfQURJU0M7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCWxwZmNfdW5yZWdfcnBpKHZwb3J0LCBucCk7Ci0JCQl9Ci0JCQlscGZjX21ieF91bnJlZ192cGkodnBvcnQpOworCXZwb3J0LT5mY19teURJRCA9IGlyc3AtPnVuLnVscFdvcmRbNF0gJiBNYXNrX0RJRDsKKwlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfQUNUSVZFKTsKKwlpZiAoKHZwb3J0LT5mY19wcmV2RElEICE9IHZwb3J0LT5mY19teURJRCkgJiYKKwkJISh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpKSB7CisJCS8qIElmIG91ciBOcG9ydElEIGNoYW5nZWQsIHdlIG5lZWQgdG8gZW5zdXJlIGFsbAorCQkgKiByZW1haW5pbmcgTlBPUlRzIGdldCB1bnJlZ19sb2dpbidlZCBzbyB3ZSBjYW4KKwkJICogaXNzdWUgdW5yZWdfdnBpLgorCQkgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5wLCBuZXh0X25wLAorCQkJJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkgfHwKKwkJCSAgICAobnAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX05QUl9OT0RFKSB8fAorCQkJICAgICEobnAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykpCisJCQkJY29udGludWU7CiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwkJCW5wLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCWxwZmNfdW5yZWdfcnBpKHZwb3J0LCBucCk7CiAJCX0KLQotCQlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKQotCQkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOwotCQllbHNlCi0JCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7Ci0KLQkJLyogVW5jb25kaXRpb25hbHkga2ljayBvZmYgcmVsZWFzaW5nIGZhYnJpYyBub2RlIGZvciB2cG9ydHMgKi8KLQkJbHBmY19ubHBfcHV0KG5kbHApOworCQlscGZjX21ieF91bnJlZ192cGkodnBvcnQpOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJfQogCisJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkKKwkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOworCWVsc2UKKwkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOworCWdvdG8gb3V0OworZmRpc2NfZmFpbGVkOgorCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9GQUlMRUQpOworCS8qIENhbmNlbCBkaXNjb3ZlcnkgdGltZXIgKi8KKwlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKKwlscGZjX25scF9wdXQobmRscCk7CiBvdXQ6CiAJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGNtZGlvY2IpOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX2ZkaXNjOiBJc3N1ZSBhIGZkaXNjIGlvY2IgY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGFuZCBpc3N1ZXMgYSBGYWJyaWMgRGlzY292ZXIgKEZESVNDKSBJT0NCIHRvCisgKiBhIHJlbW90ZSBub2RlIChAbmRscCkgb2ZmIGEgQHZwb3J0LiBJdCB1c2VzIHRoZSBscGZjX2lzc3VlX2ZhYnJpY19pb2NiKCkKKyAqIHJvdXRpbmUgdG8gaXNzdWUgdGhlIElPQ0IsIHdoaWNoIG1ha2VzIHN1cmUgb25seSBvbmUgb3V0c3RhbmRpbmcgZmFicmljCisgKiBJT0NCIHdpbGwgYmUgc2VudCBvZmYgSEJBIGF0IGFueSBnaXZlbiB0aW1lLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgRkRJU0MgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgZmRpc2MgaW9jYiBjb21tYW5kCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgZmRpc2MgaW9jYiBjb21tYW5kCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2lzc3VlX2Vsc19mZGlzYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkgICAgIHVpbnQ4X3QgcmV0cnkpCkBAIC00NjkxLDYgKzYwMTEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX25waXZfbG9nbzogQ29tcGxldGlvbiBmdW5jdGlvbiB3aXRoIHZwb3J0IGxvZ28uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgaXNzdWluZyBvZiBhIExPR08KKyAqIEVMUyBjb21tYW5kIG9mZiBhIHZwb3J0LiBJdCBmcmVlcyB0aGUgY29tbWFuZCBJT0NCIGFuZCB0aGVuIGRlY3JlbWVudCB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudCBoZWxkIG9uIG5kbHAgZm9yIHRoaXMgY29tcGxldGlvbiBmdW5jdGlvbiwgaW5kaWNhdGluZyB0aGF0CisgKiB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZGxwIGlzIG5vIGxvbmcgbmVlZGVkLiBOb3RlIHRoYXQgdGhlCisgKiBscGZjX2Vsc19mcmVlX2lvY2IoKSByb3V0aW5lIGRlY3JlbWVudHMgdGhlIG5kbHAgcmVmZXJlbmNlIGhlbGQgZm9yIHRoaXMKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBhbiBhZGRpdGlvbmFsIGV4cGxpY2l0IG5kbHAgcmVmZXJlbmNlIGRlY3JlbWVudGF0aW9uCisgKiB3aWxsIHRyaWdnZXIgdGhlIGFjdHVhbCByZWxlYXNlIG9mIHRoZSBuZGxwLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfbnBpdl9sb2dvKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTQ3MTIsNiArNjA0NiwyMiBAQAogCWxwZmNfbmxwX3B1dChuZGxwKTsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19ucGl2X2xvZ286IElzc3VlIGEgbG9nbyBvZmYgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIExPR08gRUxTIGNvbW1hbmQgdG8gYW4gQG5kbHAgb2ZmIGEgQHZwb3J0LgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgTE9HTyBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgbG9nbyBvZmYgdGhlIEB2cG9ydAorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIGxvZ28gb2ZmIHRoZSBAdnBvcnQKKyAqKi8KIGludAogbHBmY19pc3N1ZV9lbHNfbnBpdl9sb2dvKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CkBAIC00NzU3LDYgKzYxMDcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2ZhYnJpY19ibG9ja190aW1lb3V0OiBIYW5kbGVyIGZ1bmN0aW9uIHRvIHRoZSBmYWJyaWMgYmxvY2sgdGltZXIuCisgKiBAcHRyOiBob2xkZXIgZm9yIHRoZSB0aW1lciBmdW5jdGlvbiBhc3NvY2lhdGVkIGRhdGEuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIGZhYnJpYyBpb2NiIGJsb2NrIHRpbWVyIGFmdGVyCisgKiB0aW1lb3V0LiBJdCBwb3N0cyB0aGUgZmFicmljIGlvY2IgYmxvY2sgdGltZW91dCBldmVudCBieSBzZXR0aW5nIHRoZQorICogV09SS0VSX0ZBQlJJQ19CTE9DS19UTU8gYml0IHRvIHdvcmsgcG9ydCBldmVudCBiaXRtYXAgYW5kIHRoZW4gaW52b2tlcworICogbHBmY193b3JrZXJfd2FrZV91cCgpIHJvdXRpbmUgdG8gd2FrZSB1cCB0aGUgd29ya2VyIHRocmVhZC4gSXQgaXMgZm9yCisgKiB0aGUgd29ya2VyIHRocmVhZCB0byBpbnZva2UgdGhlIGxwZmNfdW5ibG9ja19mYWJyaWNfaW9jYnMoKSBvbiB0aGUKKyAqIHBvc3RlZCBldmVudCBXT1JLRVJfRkFCUklDX0JMT0NLX1RNTy4KKyAqKi8KIHZvaWQKIGxwZmNfZmFicmljX2Jsb2NrX3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpCiB7CkBAIC00Nzc1LDYgKzYxMzYsMTYgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19yZXN1bWVfZmFicmljX2lvY2JzOiBJc3N1ZSBhIGZhYnJpYyBpb2NiIGZyb20gZHJpdmVyIGludGVybmFsIGxpc3QuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIG9uZSBmYWJyaWMgaW9jYiBmcm9tIHRoZSBkcml2ZXIgaW50ZXJuYWwgbGlzdCB0bworICogdGhlIEhCQS4gSXQgZmlyc3QgY2hlY2tzIHdoZXRoZXIgaXQncyByZWFkeSB0byBpc3N1ZSBvbmUgZmFicmljIGlvY2IgdG8KKyAqIHRoZSBIQkEgKHdoZXRoZXIgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgZmFicmljIGlvY2IpLiBJZiBzbywgaXQgc2hhbGwKKyAqIHJlbW92ZSBvbmUgcGVuZGluZyBmYWJyaWMgaW9jYiBmcm9tIHRoZSBkcml2ZXIgaW50ZXJuYWwgbGlzdCBhbmQgaW52b2tlcworICogbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8gc2VuZCB0aGUgZmFicmljIGlvY2IgdG8gdGhlIEhCQS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3Jlc3VtZV9mYWJyaWNfaW9jYnMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNDgyNCw2ICs2MTk1LDE1IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfdW5ibG9ja19mYWJyaWNfaW9jYnM6IFVuYmxvY2sgaXNzdWluZyBmYWJyaWMgaW9jYiBjb21tYW5kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHVuYmxvY2tzIHRoZSAgaXNzdWluZyBmYWJyaWMgaW9jYiBjb21tYW5kLiBUaGUgZnVuY3Rpb24KKyAqIHdpbGwgY2xlYXIgdGhlIGZhYnJpYyBpb2NiIGJsb2NrIGJpdCBhbmQgdGhlbiBpbnZva2UgdGhlIHJvdXRpbmUKKyAqIGxwZmNfcmVzdW1lX2ZhYnJpY19pb2NicygpIHRvIGlzc3VlIG9uZSBvZiB0aGUgcGVuZGluZyBmYWJyaWMgaW9jYgorICogZnJvbSB0aGUgZHJpdmVyIGludGVybmFsIGZhYnJpYyBpb2NiIGxpc3QuCisgKiovCiB2b2lkCiBscGZjX3VuYmxvY2tfZmFicmljX2lvY2JzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTQ4MzMsNiArNjIxMywxNSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Jsb2NrX2ZhYnJpY19pb2NiczogQmxvY2sgaXNzdWluZyBmYWJyaWMgaW9jYiBjb21tYW5kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGJsb2NrcyB0aGUgaXNzdWluZyBmYWJyaWMgaW9jYiBmb3IgYSBzcGVjaWZpZWQgYW1vdW50IG9mCisgKiB0aW1lIChjdXJyZW50bHkgMTAwIG1zKS4gVGhpcyBpcyBkb25lIGJ5IHNldCB0aGUgZmFicmljIGlvY2IgYmxvY2sgYml0CisgKiBhbmQgc2V0IHVwIGEgdGltZW91dCB0aW1lciBmb3IgMTAwbXMuIFdoZW4gdGhlIGJsb2NrIGJpdCBpcyBzZXQsIG5vIG1vcmUKKyAqIGZhYnJpYyBpb2NiIHdpbGwgYmUgaXNzdWVkIG91dCBvZiB0aGUgSEJBLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfYmxvY2tfZmFicmljX2lvY2JzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTQ4NDYsNiArNjIzNSwxOSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZmFicmljX2lvY2I6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGZhYnJpYyBpb2NiLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgcHV0IHRvIHRoZSBmYWJyaWMgaW9jYidzCisgKiBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIChpb2NiLT5pb2NiX2NtcGwpLiBUaGUgb3JpZ2luYWwgaW9jYidzIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBwb2ludGVyIGhhcyBiZWVuIHN0b3JlZCBpbiBpb2NiLT5mYWJyaWNfaW9jYl9jbXBsLiBUaGlzIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBmaXJzdCByZXN0b3JlcyBhbmQgaW52b2tlcyB0aGUgb3JpZ2luYWwgaW9jYidzIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBhbmQgdGhlbiBpbnZva2VzIHRoZSBscGZjX3Jlc3VtZV9mYWJyaWNfaW9jYnMoKSByb3V0aW5lIHRvIGlzc3VlIHRoZSBuZXh0CisgKiBmYWJyaWMgYm91bmQgaW9jYiBmcm9tIHRoZSBkcml2ZXIgaW50ZXJuYWwgZmFicmljIGlvY2IgbGlzdCBvbnRvIHRoZSB3aXJlLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9mYWJyaWNfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtNDg5Miw2ICs2Mjk0LDMwIEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZmFicmljX2lvY2I6IElzc3VlIGEgZmFicmljIGlvY2IgY29tbWFuZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYXMgdGhlIHRvcC1sZXZlbCBBUEkgZm9yIGlzc3VpbmcgYSBmYWJyaWMgaW9jYiBjb21tYW5kCisgKiBzdWNoIGFzIEZMT0dJIGFuZCBGRElTQy4gVG8gYWNjb21tb2RhdGUgY2VydGFpbiBzd2l0Y2ggZmFicmljLCB0aGlzIGRyaXZlcgorICogZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IG9ubHkgb25lIGZhYnJpYyBib3VuZCBpb2NiIHdpbGwgYmUgb3V0c3RhbmRpbmcgYXQKKyAqIGFueSBnaXZlbiB0aW1lLiBBcyBzdWNoLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgY2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhlcmUKKyAqIGlzIGFscmVhZHkgYW4gb3V0c3RhbmRpbmcgZmFicmljIGlvY2Igb24gdGhlIHdpcmUuIElmIHNvLCBpdCB3aWxsIHB1dCB0aGUKKyAqIG5ld2x5IGlzc3VlZCBpb2NiIG9udG8gdGhlIGRyaXZlciBpbnRlcm5hbCBmYWJyaWMgaW9jYiBsaXN0LCB3YWl0aW5nIHRvIGJlCisgKiBpc3N1ZWQgbGF0ZXIuIE90aGVyd2lzZSwgaXQgd2lsbCBpc3N1ZSB0aGUgaW9jYiBvbiB0aGUgd2lyZSBhbmQgdXBkYXRlIHRoZQorICogZmFicmljIGlvY2IgY291bnQgaXQgaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBvbmUgZmFicmljIGlvY2Igb24gdGhlIHdpcmUuCisgKgorICogTm90ZSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYXMgYSBwb3RlbnRpYWwgc2VuZGluZyBvdXQgZmFicmljIElPQ0JzIG91dCBvZgorICogb3JkZXIuIFRoZSBwcm9ibGVtIGlzIGNhdXNlZCBieSB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSAicmVhZHkiIGJvb2xlbiBkb2VzCisgKiBub3QgaW5jbHVkZSB0aGUgY29uZGl0aW9uIHRoYXQgdGhlIGludGVybmFsIGZhYnJpYyBJT0NCIGxpc3QgaXMgZW1wdHkuIEFzCisgKiBzdWNoLCBpdCBpcyBwb3NzaWJsZSBhIGZhYnJpYyBJT0NCIGlzc3VlZCBieSB0aGlzIHJvdXRpbmUgbWlnaHQgYmUgImp1bXAiCisgKiBhaGVhZCBvZiB0aGUgZmFicmljIElPQ0JzIGluIHRoZSBpbnRlcm5hbCBsaXN0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIElPQ0JfU1VDQ0VTUyAtIGVpdGhlciBmYWJyaWMgaW9jYiBwdXQgb24gdGhlIGxpc3Qgb3IgaXNzdWVkIHN1Y2Nlc3NmdWxseQorICogICBJT0NCX0VSUk9SIC0gZmFpbGVkIHRvIGlzc3VlIGZhYnJpYyBpb2NiCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2lzc3VlX2ZhYnJpY19pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2IpCiB7CkBAIC00OTM3LDcgKzYzNjMsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KKy8qKgorICogbHBmY19mYWJyaWNfYWJvcnRfdnBvcnQ6IEFib3J0IGEgdnBvcnQncyBpb2NicyBmcm9tIGRyaXZlciBmYWJyaWMgaW9jYiBsaXN0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGFib3J0cyBhbGwgdGhlIElPQ0JzIGFzc29jaWF0ZWQgd2l0aCBhIEB2cG9ydCBmcm9tIHRoZQorICogZHJpdmVyIGludGVybmFsIGZhYnJpYyBJT0NCIGxpc3QuIFRoZSBsaXN0IGNvbnRhaW5zIGZhYnJpYyBJT0NCcyB0byBiZQorICogaXNzdWVkIHRvIHRoZSBFTFMgSU9DQiByaW5nLiBUaGlzIGFib3J0IGZ1bmN0aW9uIHdhbGtzIHRoZSBmYWJyaWMgSU9DQgorICogbGlzdCwgcmVtb3ZlcyBlYWNoIElPQ0IgYXNzb2NpYXRlZCB3aXRoIHRoZSBAdnBvcnQgb2ZmIHRoZSBsaXN0LCBzZXQgdGhlCisgKiBzdGF0dXMgZmVpbGQgdG8gSU9TVEFUX0xPQ0FMX1JFSkVDVCwgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIElPQ0IuCisgKiovCiBzdGF0aWMgdm9pZCBscGZjX2ZhYnJpY19hYm9ydF92cG9ydChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CiAJTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKQEAgLTQ5NjcsNiArNjQwMywxNyBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX2ZhYnJpY19hYm9ydF9ucG9ydDogQWJvcnQgYSBuZGxwJ3MgaW9jYnMgZnJvbSBkcml2ZXIgZmFicmljIGlvY2IgbGlzdC4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhYm9ydHMgYWxsIHRoZSBJT0NCcyBhc3NvY2lhdGVkIHdpdGggYW4gQG5kbHAgZnJvbSB0aGUKKyAqIGRyaXZlciBpbnRlcm5hbCBmYWJyaWMgSU9DQiBsaXN0LiBUaGUgbGlzdCBjb250YWlucyBmYWJyaWMgSU9DQnMgdG8gYmUKKyAqIGlzc3VlZCB0byB0aGUgRUxTIElPQ0IgcmluZy4gVGhpcyBhYm9ydCBmdW5jdGlvbiB3YWxrcyB0aGUgZmFicmljIElPQ0IKKyAqIGxpc3QsIHJlbW92ZXMgZWFjaCBJT0NCIGFzc29jaWF0ZWQgd2l0aCB0aGUgQG5kbHAgb2ZmIHRoZSBsaXN0LCBzZXQgdGhlCisgKiBzdGF0dXMgZmVpbGQgdG8gSU9TVEFUX0xPQ0FMX1JFSkVDVCwgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIElPQ0IuCisgKiovCiB2b2lkIGxwZmNfZmFicmljX2Fib3J0X25wb3J0KHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewogCUxJU1RfSEVBRChjb21wbGV0aW9ucyk7CkBAIC00OTk2LDYgKzY0NDMsMTcgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19mYWJyaWNfYWJvcnRfaGJhOiBBYm9ydCBhbGwgaW9jYnMgb24gZHJpdmVyIGZhYnJpYyBpb2NiIGxpc3QuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWJvcnRzIGFsbCB0aGUgSU9DQnMgY3VycmVudGx5IG9uIHRoZSBkcml2ZXIgaW50ZXJuYWwKKyAqIGZhYnJpYyBJT0NCIGxpc3QuIFRoZSBsaXN0IGNvbnRhaW5zIGZhYnJpYyBJT0NCcyB0byBiZSBpc3N1ZWQgdG8gdGhlIEVMUworICogSU9DQiByaW5nLiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBlbnRpcmUgSU9DQiBsaXN0IG9mZiB0aGUgZmFicmljIElPQ0IKKyAqIGxpc3QsIHJlbW92ZXMgSU9DQnMgb2ZmIHRoZSBsaXN0LCBzZXQgdGhlIHN0YXR1cyBmZWlsZCB0bworICogSU9TVEFUX0xPQ0FMX1JFSkVDVCwgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aAorICogdGhlIElPQ0IuCisgKiovCiB2b2lkIGxwZmNfZmFicmljX2Fib3J0X2hiYShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggYTk4ZDExYi4uYTFhNzBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CiAKICNpbmNsdWRlICJscGZjX2h3LmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCkBAIC04OCwxNCArODksNiBAQAogCQkJJnBoYmEtPnNsaS5yaW5nW3BoYmEtPnNsaS5mY3BfcmluZ10sCiAJCQluZGxwLT5ubHBfc2lkLCAwLCBMUEZDX0NUWF9UR1QpOwogCX0KLQotCS8qCi0JICogQSBkZXZpY2UgaXMgbm9ybWFsbHkgYmxvY2tlZCBmb3IgcmVkaXNjb3ZlcnkgYW5kIHVuYmxvY2tlZCB3aGVuCi0JICogZGV2bG9zcyB0aW1lb3V0IGhhcHBlbnMuICBJbiBjYXNlIGEgdnBvcnQgaXMgcmVtb3ZlZCBvciBkcml2ZXIKLQkgKiB1bmxvYWRlZCBiZWZvcmUgZGV2bG9zcyB0aW1lb3V0IGhhcHBlbnMsIHdlIG5lZWQgdG8gdW5ibG9jayBoZXJlLgotCSAqLwotCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOwotCXJldHVybjsKIH0KIAogLyoKQEAgLTIxNSw4ICsyMDgsMTYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9NQVBQRURfTk9ERSkKKwlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9JTkZPLCBMT0dfRElTQ09WRVJZLAorCQkJCSAiMDI4NCBEZXZsb3NzIHRpbWVvdXQgSWdub3JlZCBvbiAiCisJCQkJICJXV1BOICV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4ICIKKwkJCQkgIk5Qb3J0IHgleFxuIiwKKwkJCQkgKm5hbWUsICoobmFtZSsxKSwgKihuYW1lKzIpLCAqKG5hbWUrMyksCisJCQkJICoobmFtZSs0KSwgKihuYW1lKzUpLCAqKG5hbWUrNiksICoobmFtZSs3KSwKKwkJCQkgbmRscC0+bmxwX0RJRCk7CiAJCXJldHVybjsKKwl9CiAKIAlpZiAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkFCUklDKSB7CiAJCS8qIFdlIHdpbGwgY2xlYW4gdXAgdGhlc2UgTm9kZXMgaW4gbGlua3VwICovCkBAIC0yMzcsOCArMjM4LDYgQEAKIAkJbHBmY19zbGlfYWJvcnRfaW9jYih2cG9ydCwgJnBoYmEtPnNsaS5yaW5nW3BoYmEtPnNsaS5mY3BfcmluZ10sCiAJCQkJICAgIG5kbHAtPm5scF9zaWQsIDAsIExQRkNfQ1RYX1RHVCk7CiAJfQotCWlmICh2cG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKQotCQl3YXJuX29uID0gMDsKIAogCWlmICh3YXJuX29uKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLApAQCAtMjc2LDYgKzI3NSwxMjQgQEAKIAkJbHBmY19kaXNjX3N0YXRlX21hY2hpbmUodnBvcnQsIG5kbHAsIE5VTEwsIE5MUF9FVlRfREVWSUNFX1JNKTsKIH0KIAorLyoqCisgKiBscGZjX2FsbG9jX2Zhc3RfZXZ0OiBBbGxvY2F0ZXMgZGF0YSBzdHJ1Y3R1cmUgZm9yIHBvc3RpbmcgZXZlbnQuCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZnVuY3Rpb25zIHdoaWNoIG5lZWQgdG8gcG9zdAorICogZXZlbnRzIGZyb20gaW50ZXJydXB0IGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGRhdGEKKyAqIHN0cnVjdHVyZSByZXF1aXJlZCBmb3IgcG9zdGluZyBldmVudC4gSXQgYWxzbyBrZWVwcyB0cmFjayBvZgorICogbnVtYmVyIG9mIGV2ZW50cyBwZW5kaW5nIGFuZCBwcmV2ZW50IGV2ZW50IHN0b3JtIHdoZW4gdGhlcmUgYXJlCisgKiB0b28gbWFueSBldmVudHMuCisgKiovCitzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKgorbHBmY19hbGxvY19mYXN0X2V2dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpIHsKKwlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKnJldDsKKworCS8qIElmIHRoZXJlIGFyZSBsb3Qgb2YgZmFzdCBldmVudCBkbyBub3QgZXhoYXVzdCBtZW1vcnkgZHVlIHRvIHRoaXMgKi8KKwlpZiAoYXRvbWljX3JlYWQoJnBoYmEtPmZhc3RfZXZlbnRfY291bnQpID4gTFBGQ19NQVhfRVZUX0NPVU5UKQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCksCisJCQlHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQlhdG9taWNfaW5jKCZwaGJhLT5mYXN0X2V2ZW50X2NvdW50KTsKKwlJTklUX0xJU1RfSEVBRCgmcmV0LT53b3JrX2V2dC5ldnRfbGlzdHApOworCXJldC0+d29ya19ldnQuZXZ0ID0gTFBGQ19FVlRfRkFTVFBBVEhfTUdNVF9FVlQ7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBscGZjX2ZyZWVfZmFzdF9ldnQ6IEZyZWVzIGV2ZW50IGRhdGEgc3RydWN0dXJlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICogQGV2dDogIEV2ZW50IG9iamVjdCB3aGljaCBuZWVkIHRvIGJlIGZyZWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIGRhdGEgc3RydWN0dXJlIHJlcXVpcmVkIGZvciBwb3N0aW5nCisgKiBldmVudHMuCisgKiovCit2b2lkCitscGZjX2ZyZWVfZmFzdF9ldnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmV2dCkgeworCisJYXRvbWljX2RlYygmcGhiYS0+ZmFzdF9ldmVudF9jb3VudCk7CisJa2ZyZWUoZXZ0KTsKK30KKworLyoqCisgKiBscGZjX3NlbmRfZmFzdHBhdGhfZXZ0OiBQb3N0cyBldmVudHMgZ2VuZXJhdGVkIGZyb20gZmFzdCBwYXRoLgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICogQGV2dHA6IEV2ZW50IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZCwgd2hlbiB0aGUgaW50ZXJydXB0CisgKiBjb250ZXh0IG5lZWQgdG8gcG9zdCBhbiBldmVudC4gVGhpcyBmdW5jdGlvbiBwb3N0cyB0aGUgZXZlbnQKKyAqIHRvIGZjIHRyYW5zcG9ydCBuZXRsaW5rIGludGVyZmFjZS4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NlbmRfZmFzdHBhdGhfZXZ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJc3RydWN0IGxwZmNfd29ya19ldnQgKmV2dHApCit7CisJdW5zaWduZWQgbG9uZyBldnRfY2F0ZWdvcnksIGV2dF9zdWJfY2F0ZWdvcnk7CisJc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICpmYXN0X2V2dF9kYXRhOworCWNoYXIgKmV2dF9kYXRhOworCXVpbnQzMl90IGV2dF9kYXRhX3NpemU7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisKKwlmYXN0X2V2dF9kYXRhID0gY29udGFpbmVyX29mKGV2dHAsIHN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCwKKwkJd29ya19ldnQpOworCisJZXZ0X2NhdGVnb3J5ID0gKHVuc2lnbmVkIGxvbmcpIGZhc3RfZXZ0X2RhdGEtPnVuLmZhYnJpY19ldnQuZXZlbnRfdHlwZTsKKwlldnRfc3ViX2NhdGVnb3J5ID0gKHVuc2lnbmVkIGxvbmcpIGZhc3RfZXZ0X2RhdGEtPnVuLgorCQkJZmFicmljX2V2dC5zdWJjYXRlZ29yeTsKKwlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydChmYXN0X2V2dF9kYXRhLT52cG9ydCk7CisJaWYgKGV2dF9jYXRlZ29yeSA9PSBGQ19SRUdfRkFCUklDX0VWRU5UKSB7CisJCWlmIChldnRfc3ViX2NhdGVnb3J5ID09IExQRkNfRVZFTlRfRkNQUkRDSEtFUlIpIHsKKwkJCWV2dF9kYXRhID0gKGNoYXIgKikgJmZhc3RfZXZ0X2RhdGEtPnVuLnJlYWRfY2hlY2tfZXJyb3I7CisJCQlldnRfZGF0YV9zaXplID0gc2l6ZW9mKGZhc3RfZXZ0X2RhdGEtPnVuLgorCQkJCXJlYWRfY2hlY2tfZXJyb3IpOworCQl9IGVsc2UgaWYgKChldnRfc3ViX2NhdGVnb3J5ID09IExQRkNfRVZFTlRfRkFCUklDX0JVU1kpIHx8CisJCQkoZXZ0X3N1Yl9jYXRlZ29yeSA9PSBJT1NUQVRfTlBPUlRfQlNZKSkgeworCQkJZXZ0X2RhdGEgPSAoY2hhciAqKSAmZmFzdF9ldnRfZGF0YS0+dW4uZmFicmljX2V2dDsKKwkJCWV2dF9kYXRhX3NpemUgPSBzaXplb2YoZmFzdF9ldnRfZGF0YS0+dW4uZmFicmljX2V2dCk7CisJCX0gZWxzZSB7CisJCQlscGZjX2ZyZWVfZmFzdF9ldnQocGhiYSwgZmFzdF9ldnRfZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKGV2dF9jYXRlZ29yeSA9PSBGQ19SRUdfU0NTSV9FVkVOVCkgeworCQlzd2l0Y2ggKGV2dF9zdWJfY2F0ZWdvcnkpIHsKKwkJY2FzZSBMUEZDX0VWRU5UX1FGVUxMOgorCQljYXNlIExQRkNfRVZFTlRfREVWQlNZOgorCQkJZXZ0X2RhdGEgPSAoY2hhciAqKSAmZmFzdF9ldnRfZGF0YS0+dW4uc2NzaV9ldnQ7CisJCQlldnRfZGF0YV9zaXplID0gc2l6ZW9mKGZhc3RfZXZ0X2RhdGEtPnVuLnNjc2lfZXZ0KTsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfRVZFTlRfQ0hFQ0tfQ09ORDoKKwkJCWV2dF9kYXRhID0gKGNoYXIgKikgJmZhc3RfZXZ0X2RhdGEtPnVuLmNoZWNrX2NvbmRfZXZ0OworCQkJZXZ0X2RhdGFfc2l6ZSA9ICBzaXplb2YoZmFzdF9ldnRfZGF0YS0+dW4uCisJCQkJY2hlY2tfY29uZF9ldnQpOworCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19FVkVOVF9WQVJRVUVERVBUSDoKKwkJCWV2dF9kYXRhID0gKGNoYXIgKikgJmZhc3RfZXZ0X2RhdGEtPnVuLnF1ZXVlX2RlcHRoX2V2dDsKKwkJCWV2dF9kYXRhX3NpemUgPSBzaXplb2YoZmFzdF9ldnRfZGF0YS0+dW4uCisJCQkJcXVldWVfZGVwdGhfZXZ0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbHBmY19mcmVlX2Zhc3RfZXZ0KHBoYmEsIGZhc3RfZXZ0X2RhdGEpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJbHBmY19mcmVlX2Zhc3RfZXZ0KHBoYmEsIGZhc3RfZXZ0X2RhdGEpOworCQlyZXR1cm47CisJfQorCisJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwKKwkJZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQlldnRfZGF0YV9zaXplLAorCQlldnRfZGF0YSwKKwkJU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CisKKwlscGZjX2ZyZWVfZmFzdF9ldnQocGhiYSwgZmFzdF9ldnRfZGF0YSk7CisJcmV0dXJuOworfQorCiBzdGF0aWMgdm9pZAogbHBmY193b3JrX2xpc3RfZG9uZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zNDcsNiArNDY0LDEwIEBACiAJCQlscGZjX3VuYmxvY2tfbWdtdF9pbyhwaGJhKTsKIAkJCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKShldnRwLT5ldnRfYXJnMikpOwogCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19FVlRfRkFTVFBBVEhfTUdNVF9FVlQ6CisJCQlscGZjX3NlbmRfZmFzdHBhdGhfZXZ0KHBoYmEsIGV2dHApOworCQkJZnJlZV9ldnQgPSAwOworCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGZyZWVfZXZ0KQogCQkJa2ZyZWUoZXZ0cCk7CkBAIC0zNzEsNiArNDkyLDcgQEAKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCiAJaWYgKGhhX2NvcHkgJiBIQV9FUkFUVCkKKwkJLyogSGFuZGxlIHRoZSBlcnJvciBhdHRlbnRpb24gZXZlbnQgKi8KIAkJbHBmY19oYW5kbGVfZXJhdHQocGhiYSk7CiAKIAlpZiAoaGFfY29weSAmIEhBX01CQVRUKQpAQCAtMzc4LDYgKzUwMCw3IEBACiAKIAlpZiAoaGFfY29weSAmIEhBX0xBVFQpCiAJCWxwZmNfaGFuZGxlX2xhdHQocGhiYSk7CisKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwogCWlmICh2cG9ydHMgIT0gTlVMTCkKIAkJZm9yKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGk7IGkrKykgewpAQCAtMTAxMywxNCArMTEzNiwxMCBAQAogfQogCiBzdGF0aWMgdm9pZAotbHBmY19tYnhfaXNzdWVfbGlua19kb3duKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK2xwZmNfZW5hYmxlX2xhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAl1aW50MzJfdCBjb250cm9sOwogCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7Ci0KLQlscGZjX2xpbmtkb3duKHBoYmEpOwotCi0JLyogdHVybiBvbiBMaW5rIEF0dGVudGlvbiBpbnRlcnJ1cHRzIC0gbm8gQ0xFQVJfTEEgbmVlZGVkICovCiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJcHNsaS0+c2xpX2ZsYWcgfD0gTFBGQ19QUk9DRVNTX0xBOwogCWNvbnRyb2wgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOwpAQCAtMTAzMCw2ICsxMTQ5LDE1IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIH0KIAorc3RhdGljIHZvaWQKK2xwZmNfbWJ4X2lzc3VlX2xpbmtfZG93bihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJbHBmY19saW5rZG93bihwaGJhKTsKKwlscGZjX2VuYWJsZV9sYShwaGJhKTsKKwkvKiB0dXJuIG9uIExpbmsgQXR0ZW50aW9uIGludGVycnVwdHMgLSBubyBDTEVBUl9MQSBuZWVkZWQgKi8KK30KKworCiAvKgogICogVGhpcyByb3V0aW5lIGhhbmRsZXMgcHJvY2Vzc2luZyBhIFJFQURfTEEgbWFpbGJveAogICogY29tbWFuZCB1cG9uIGNvbXBsZXRpb24uIEl0IGlzIHNldHVwIGluIHRoZSBMUEZDX01CT1hRCkBAIC0xMDc3LDggKzEyMDUsMTIgQEAKIAl9CiAKIAlwaGJhLT5mY19ldmVudFRhZyA9IGxhLT5ldmVudFRhZzsKKwlpZiAobGEtPm1tKQorCQlwaGJhLT5zbGkuc2xpX2ZsYWcgfD0gTFBGQ19NRU5MT19NQUlOVDsKKwllbHNlCisJCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19NRU5MT19NQUlOVDsKIAotCWlmIChsYS0+YXR0VHlwZSA9PSBBVF9MSU5LX1VQKSB7CisJaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVAgJiYgKCFsYS0+bW0pKSB7CiAJCXBoYmEtPmZjX3N0YXQuTGlua1VwKys7CiAJCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19MT09QQkFDS19NT0RFKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSU5LX0VWRU5ULApAQCAtMTA5MCwxMyArMTIyMiwxNSBAQAogCQl9IGVsc2UgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKIAkJCQkJIjEzMDMgTGluayBVcCBFdmVudCB4JXggcmVjZWl2ZWQgIgotCQkJCQkiRGF0YTogeCV4IHgleCB4JXggeCV4XG4iLAorCQkJCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleCB4JXggJWRcbiIsCiAJCQkJCWxhLT5ldmVudFRhZywgcGhiYS0+ZmNfZXZlbnRUYWcsCiAJCQkJCWxhLT5ncmFudGVkX0FMX1BBLCBsYS0+VWxua1NwZWVkLAotCQkJCQlwaGJhLT5hbHBhX21hcFswXSk7CisJCQkJCXBoYmEtPmFscGFfbWFwWzBdLAorCQkJCQlsYS0+bW0sIGxhLT5mYSwKKwkJCQkJcGhiYS0+d2FpdF80X21sb19tYWludF9mbGcpOwogCQl9CiAJCWxwZmNfbWJ4X3Byb2Nlc3NfbGlua191cChwaGJhLCBsYSk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfRE9XTikgewogCQlwaGJhLT5mY19zdGF0LkxpbmtEb3duKys7CiAJCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19MT09QQkFDS19NT0RFKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSU5LX0VWRU5ULApAQCAtMTEwOSwxMSArMTI0Myw0NiBAQAogCQllbHNlIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCiAJCQkJIjEzMDUgTGluayBEb3duIEV2ZW50IHgleCByZWNlaXZlZCAiCisJCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXhcbiIsCisJCQkJbGEtPmV2ZW50VGFnLCBwaGJhLT5mY19ldmVudFRhZywKKwkJCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSwgdnBvcnQtPmZjX2ZsYWcsCisJCQkJbGEtPm1tLCBsYS0+ZmEpOworCQl9CisJCWxwZmNfbWJ4X2lzc3VlX2xpbmtfZG93bihwaGJhKTsKKwl9CisJaWYgKGxhLT5tbSAmJiBsYS0+YXR0VHlwZSA9PSBBVF9MSU5LX1VQKSB7CisJCWlmIChwaGJhLT5saW5rX3N0YXRlICE9IExQRkNfTElOS19ET1dOKSB7CisJCQlwaGJhLT5mY19zdGF0LkxpbmtEb3duKys7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSU5LX0VWRU5ULAorCQkJCSIxMzEyIExpbmsgRG93biBFdmVudCB4JXggcmVjZWl2ZWQgIgogCQkJCSJEYXRhOiB4JXggeCV4IHgleFxuIiwKIAkJCQlsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAogCQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlLCB2cG9ydC0+ZmNfZmxhZyk7CisJCQlscGZjX21ieF9pc3N1ZV9saW5rX2Rvd24ocGhiYSk7CisJCX0gZWxzZQorCQkJbHBmY19lbmFibGVfbGEocGhiYSk7CisKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKKwkJCQkiMTMxMCBNZW5sbyBNYWludCBNb2RlIExpbmsgdXAgRXZlbnQgeCV4IHJjdmQgIgorCQkJCSJEYXRhOiB4JXggeCV4IHgleFxuIiwKKwkJCQlsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAorCQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlLCB2cG9ydC0+ZmNfZmxhZyk7CisJCS8qCisJCSAqIFRoZSBjbW5kIHRoYXQgdHJpZ2dlcmVkIHRoaXMgd2lsbCBiZSB3YWl0aW5nIGZvciB0aGlzCisJCSAqIHNpZ25hbC4KKwkJICovCisJCS8qIFdBS0VVUCBmb3IgTUVOTE9fU0VUX01PREUgb3IgTUVOTE9fUkVTRVQgY29tbWFuZC4gKi8KKwkJaWYgKHBoYmEtPndhaXRfNF9tbG9fbWFpbnRfZmxnKSB7CisJCQlwaGJhLT53YWl0XzRfbWxvX21haW50X2ZsZyA9IDA7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBoYmEtPndhaXRfNF9tbG9fbV9xKTsKIAkJfQotCQlscGZjX21ieF9pc3N1ZV9saW5rX2Rvd24ocGhiYSk7CisJfQorCisJaWYgKGxhLT5mYSkgeworCQlpZiAobGEtPm1tKQorCQkJbHBmY19pc3N1ZV9jbGVhcl9sYShwaGJhLCB2cG9ydCk7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19MSU5LX0VWRU5ULAorCQkJCSIxMzExIGZhICVkXG4iLCBsYS0+ZmEpOwogCX0KIAogbHBmY19tYnhfY21wbF9yZWFkX2xhX2ZyZWVfbWJ1ZjoKQEAgLTExNzcsNyArMTM0Niw3IEBACiAJCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwogfQogCi12b2lkCitpbnQKIGxwZmNfbWJ4X3VucmVnX3ZwaShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CiAJc3RydWN0IGxwZmNfaGJhICAqcGhiYSA9IHZwb3J0LT5waGJhOwpAQCAtMTE4Niw3ICsxMzU1LDcgQEAKIAogCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCWlmICghbWJveCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAogCWxwZmNfdW5yZWdfdnBpKHBoYmEsIHZwb3J0LT52cGksIG1ib3gpOwogCW1ib3gtPnZwb3J0ID0gdnBvcnQ7CkBAIC0xMTk3LDcgKzEzNjYsOSBAQAogCQkJCSAiMTgwMCBDb3VsZCBub3QgaXNzdWUgdW5yZWdfdnBpXG4iKTsKIAkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCQl2cG9ydC0+dW5yZWdfdnBpX2NtcGwgPSBWUE9SVF9FUlJPUjsKKwkJcmV0dXJuIHJjOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE1NTMsNiArMTcyNCwyMiBAQAogCQkgKi8KIAkJbHBmY19yZWdpc3Rlcl9yZW1vdGVfcG9ydCh2cG9ydCwgbmRscCk7CiAJfQorCWlmICgobmV3X3N0YXRlID09ICBOTFBfU1RFX01BUFBFRF9OT0RFKSAmJgorCQkodnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkKSkgeworCQkvKgorCQkgKiBBIG5ldyB0YXJnZXQgaXMgZGlzY292ZXJlZCwgaWYgdGhlcmUgaXMgbm8gYnVmZmVyIGZvcgorCQkgKiBzdGF0aXN0aWNhbCBkYXRhIGNvbGxlY3Rpb24gYWxsb2NhdGUgYnVmZmVyLgorCQkgKi8KKwkJbmRscC0+bGF0X2RhdGEgPSBrY2FsbG9jKExQRkNfTUFYX0JVQ0tFVF9DT1VOVCwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgbHBmY19zY3NpY21kX2JrdCksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCQlpZiAoIW5kbHAtPmxhdF9kYXRhKQorCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19OT0RFLAorCQkJCSIwMjg2IGxwZmNfbmxwX3N0YXRlX2NsZWFudXAgZmFpbGVkIHRvICIKKwkJCQkiYWxsb2NhdGUgc3RhdGlzdGljYWwgZGF0YSBidWZmZXIgRElEICIKKwkJCQkiMHgleFxuIiwgbmRscC0+bmxwX0RJRCk7CisJfQogCS8qCiAJICogaWYgd2UgYWRkZWQgdG8gTWFwcGVkIGxpc3QsIGJ1dCB0aGUgcmVtb3RlIHBvcnQKIAkgKiByZWdpc3RyYXRpb24gZmFpbGVkIG9yIGFzc2lnbmVkIGEgdGFyZ2V0IGlkIG91dHNpZGUKQEAgLTI3ODYsNyArMjk3Myw3IEBACiAKIAlkZWZhdWx0OgogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKLQkJCQkgIjAyMjkgVW5leHBlY3RlZCBkaXNjb3ZlcnkgdGltZW91dCwgIgorCQkJCSAiMDI3MyBVbmV4cGVjdGVkIGRpc2NvdmVyeSB0aW1lb3V0LCAiCiAJCQkJICJ2cG9ydCBTdGF0ZSB4JXhcbiIsIHZwb3J0LT5wb3J0X3N0YXRlKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjk0MCw2ICszMTI3LDggQEAKIAlJTklUX0xJU1RfSEVBRCgmbmRscC0+bmxwX2xpc3RwKTsKIAlrcmVmX2luaXQoJm5kbHAtPmtyZWYpOwogCU5MUF9JTlRfTk9ERV9BQ1QobmRscCk7CisJYXRvbWljX3NldCgmbmRscC0+Y21kX3BlbmRpbmcsIDApOworCW5kbHAtPmNtZF9xZGVwdGggPSBMUEZDX01BWF9UR1RfUURFUFRIOwogCiAJbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjKHZwb3J0LCBMUEZDX0RJU0NfVFJDX05PREUsCiAJCSJub2RlIGluaXQ6ICAgICAgIGRpZDp4JXgiLApAQCAtMjk3OSw4ICszMTY4LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+bmRscF9sb2NrLCBmbGFncyk7CiAKIAkvKiBmcmVlIG5kbHAgbWVtb3J5IGZvciBmaW5hbCBuZGxwIHJlbGVhc2UgKi8KLQlpZiAoTkxQX0NIS19GUkVFX1JFUShuZGxwKSkKKwlpZiAoTkxQX0NIS19GUkVFX1JFUShuZGxwKSkgeworCQlrZnJlZShuZGxwLT5sYXRfZGF0YSk7CiAJCW1lbXBvb2xfZnJlZShuZGxwLCBuZGxwLT52cG9ydC0+cGhiYS0+bmxwX21lbV9wb29sKTsKKwl9CiB9CiAKIC8qIFRoaXMgcm91dGluZSBidW1wcyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBhIG5kbHAgc3RydWN0dXJlIHRvIGVuc3VyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCmluZGV4IDc3NzNiOTQuLjVkZTVkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKQEAgLTExMDcsNiArMTEwNyw4IEBACiAvKiBTdGFydCBGaXJlRmx5IFJlZ2lzdGVyIGRlZmluaXRpb25zICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRU1VTEVYICAgICAgICAweDEwZGYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9GSVJFRkxZICAgICAgIDB4MWFlNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST1RFVVNfVkYgICAgMHhlMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19QRiAgICAweGUxODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfU01CICAgICAgIDB4ZjAxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVF9NSUQgICAgICAgMHhmMDE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkZMWSAgICAgICAgICAweGYwOTUKQEAgLTExMzMsMTAgKzExMzUsMTIgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MUDExMDAwUyAgICAgIDB4ZmMxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xQRTExMDAwUyAgICAgMHhmYzIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0FUX1MgICAgICAgICAweGZjNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9URVVTX1MgICAgIDB4ZmM1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hFTElPUyAgICAgICAgMHhmZDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSEVMSU9TX1NDU1AgICAweGZkMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IRUxJT1NfRENTUCAgIDB4ZmQxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pFUEhZUiAgICAgICAgMHhmZTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSE9STkVUICAgICAgICAweGZlMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9aRVBIWVJfU0NTUCAgIDB4ZmUxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pFUEhZUl9EQ1NQICAgMHhmZTEyCiAKQEAgLTExNTQsNiArMTE1OCw3IEBACiAjZGVmaW5lIFpFUEhZUl9KRURFQ19JRCAgICAgICAgICAgICAweDA1NzcKICNkZWZpbmUgVklQRVJfSkVERUNfSUQgICAgICAgICAgICAgIDB4NDgzOAogI2RlZmluZSBTQVRVUk5fSkVERUNfSUQgICAgICAgICAgICAgMHgxMDA0CisjZGVmaW5lIEhPUk5FVF9KREVDX0lEICAgICAgICAgICAgICAweDIwNTc3MDZECiAKICNkZWZpbmUgSkVERUNfSURfTUFTSyAgICAgICAgICAgICAgIDB4MEZGRkYwMDAKICNkZWZpbmUgSkVERUNfSURfU0hJRlQgICAgICAgICAgICAgIDEyCkBAIC0xMTk4LDYgKzEyMDMsMTggQEAKICNkZWZpbmUgSEFfUlhBVFQgICAgICAgMHgwMDAwMDAwOAkvKiBCaXQgIDMgKi8KICNkZWZpbmUgSEFfUlhNQVNLICAgICAgMHgwMDAwMDAwZgogCisjZGVmaW5lIEhBX1IwX0NMUl9NU0sJKEhBX1IwUkVfUkVRIHwgSEFfUjBDRV9SU1AgfCBIQV9SMEFUVCkKKyNkZWZpbmUgSEFfUjFfQ0xSX01TSwkoSEFfUjFSRV9SRVEgfCBIQV9SMUNFX1JTUCB8IEhBX1IxQVRUKQorI2RlZmluZSBIQV9SMl9DTFJfTVNLCShIQV9SMlJFX1JFUSB8IEhBX1IyQ0VfUlNQIHwgSEFfUjJBVFQpCisjZGVmaW5lIEhBX1IzX0NMUl9NU0sJKEhBX1IzUkVfUkVRIHwgSEFfUjNDRV9SU1AgfCBIQV9SM0FUVCkKKworI2RlZmluZSBIQV9SMF9QT1MJMworI2RlZmluZSBIQV9SMV9QT1MJNworI2RlZmluZSBIQV9SMl9QT1MJMTEKKyNkZWZpbmUgSEFfUjNfUE9TCTE1CisjZGVmaW5lIEhBX0xFX1BPUwkyOQorI2RlZmluZSBIQV9NQl9QT1MJMzAKKyNkZWZpbmUgSEFfRVJfUE9TCTMxCiAvKiBDaGlwIEF0dGVudGlvbiBSZWdpc3RlciAqLwogCiAjZGVmaW5lIENBX1JFR19PRkZTRVQgIDQJLyogQnl0ZSBvZmZzZXQgZnJvbSByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8KQEAgLTEyMzUsNyArMTI1Miw3IEBACiAKIC8qIEhvc3QgQ29udHJvbCBSZWdpc3RlciAqLwogCi0jZGVmaW5lIEhDX1JFR19PRkZTRVQgIDEyCS8qIFdvcmQgb2Zmc2V0IGZyb20gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEhDX1JFR19PRkZTRVQgIDEyCS8qIEJ5dGUgb2Zmc2V0IGZyb20gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCiAKICNkZWZpbmUgSENfTUJJTlRfRU5BICAgMHgwMDAwMDAwMQkvKiBCaXQgIDAgKi8KICNkZWZpbmUgSENfUjBJTlRfRU5BICAgMHgwMDAwMDAwMgkvKiBCaXQgIDEgKi8KQEAgLTEyNDgsNiArMTI2NSwxOSBAQAogI2RlZmluZSBIQ19MQUlOVF9FTkEgICAweDIwMDAwMDAwCS8qIEJpdCAyOSAqLwogI2RlZmluZSBIQ19FUklOVF9FTkEgICAweDgwMDAwMDAwCS8qIEJpdCAzMSAqLwogCisvKiBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCBlWHRlbnNpb24gKE1TSS1YKSBtZXNzYWdlIGlkZW50aWZpZXJzICovCisjZGVmaW5lIE1TSVhfREZMVF9JRAkwCisjZGVmaW5lIE1TSVhfUk5HMF9JRAkwCisjZGVmaW5lIE1TSVhfUk5HMV9JRAkxCisjZGVmaW5lIE1TSVhfUk5HMl9JRAkyCisjZGVmaW5lIE1TSVhfUk5HM19JRAkzCisKKyNkZWZpbmUgTVNJWF9MSU5LX0lECTQKKyNkZWZpbmUgTVNJWF9NQk9YX0lECTUKKworI2RlZmluZSBNU0lYX1NQQVJFMF9JRAk2CisjZGVmaW5lIE1TSVhfU1BBUkUxX0lECTcKKwogLyogTWFpbGJveCBDb21tYW5kcyAqLwogI2RlZmluZSBNQlhfU0hVVERPV04gICAgICAgIDB4MDAJLyogdGVybWluYXRlIHRlc3RpbmcgKi8KICNkZWZpbmUgTUJYX0xPQURfU00gICAgICAgICAweDAxCkBAIC0xMjg1LDEwICsxMzE1LDE0IEBACiAjZGVmaW5lIE1CWF9LSUxMX0JPQVJEICAgICAgMHgyNAogI2RlZmluZSBNQlhfQ09ORklHX0ZBUlAgICAgIDB4MjUKICNkZWZpbmUgTUJYX0JFQUNPTiAgICAgICAgICAweDJBCisjZGVmaW5lIE1CWF9DT05GSUdfTVNJICAgICAgMHgzMAogI2RlZmluZSBNQlhfSEVBUlRCRUFUICAgICAgIDB4MzEKICNkZWZpbmUgTUJYX1dSSVRFX1ZQQVJNUyAgICAweDMyCiAjZGVmaW5lIE1CWF9BU1lOQ0VWVF9FTkFCTEUgMHgzMwogCisjZGVmaW5lIE1CWF9QT1JUX0NBUEFCSUxJVElFUyAweDNCCisjZGVmaW5lIE1CWF9QT1JUX0lPVl9DT05UUk9MIDB4M0MKKwogI2RlZmluZSBNQlhfQ09ORklHX0hCUQkgICAgMHg3QwogI2RlZmluZSBNQlhfTE9BRF9BUkVBICAgICAgIDB4ODEKICNkZWZpbmUgTUJYX1JVTl9CSVVfRElBRzY0ICAweDg0CkBAIC0xNDc0LDI0ICsxNTA4LDE4IEBACiAJCQl1aW50MzJfdCBiZGVGbGFnczo4OwkvKiBCREUgRmxhZ3MgMCBJUyBBIFNVUFBPUlRFRAogCQkJCQkJICAgVkFMVUUgISEgKi8KICNlbmRpZgotCi0jZGVmaW5lIEJVRkZfVVNFX1JTVkQgICAgICAgMHgwMQkvKiBiZGVGbGFncyAqLwotI2RlZmluZSBCVUZGX1VTRV9JTlRSUFQgICAgIDB4MDIJLyogTm90IEltcGxlbWVudGVkIHdpdGggTFA2MDAwICovCi0jZGVmaW5lIEJVRkZfVVNFX0NNTkQgICAgICAgMHgwNAkvKiBPcHRpb25hbCwgMT1jbWQvcnNwIDA9ZGF0YSBidWZmZXIgKi8KLSNkZWZpbmUgQlVGRl9VU0VfUkNWICAgICAgICAweDA4CS8qICAiIiAiIiwgMT1yY3YgYnVmZmVyLCAwPXhtaXQKLQkJCQkJICAgIGJ1ZmZlciAqLwotI2RlZmluZSBCVUZGX1RZUEVfMzJCSVQgICAgIDB4MTAJLyogICIiICIiLCAxPTMyIGJpdCBhZGRyIDA9NjQgYml0Ci0JCQkJCSAgICBhZGRyICovCi0jZGVmaW5lIEJVRkZfVFlQRV9TUEVDSUFMICAgMHgyMAkvKiBOb3QgSW1wbGVtZW50ZWQgd2l0aCBMUDYwMDAgICovCi0jZGVmaW5lIEJVRkZfVFlQRV9CREwgICAgICAgMHg0MAkvKiBPcHRpb25hbCwgIG1heSBiZSBzZXQgaW4gQkRMICovCi0jZGVmaW5lIEJVRkZfVFlQRV9JTlZBTElEICAgMHg4MAkvKiAgIiIgICIiICovCisjZGVmaW5lIEJVRkZfVFlQRV9CREVfNjQgICAgMHgwMAkvKiBCREUgKEhvc3RfcmVzaWRlbnQpICovCisjZGVmaW5lIEJVRkZfVFlQRV9CREVfSU1NRUQgMHgwMQkvKiBJbW1lZGlhdGUgRGF0YSBCREUgKi8KKyNkZWZpbmUgQlVGRl9UWVBFX0JERV82NFAgICAweDAyCS8qIEJERSAoUG9ydC1yZXNpZGVudCkgKi8KKyNkZWZpbmUgQlVGRl9UWVBFX0JERV82NEkgICAweDA4CS8qIElucHV0IEJERSAoSG9zdC1yZXNpZGVudCkgKi8KKyNkZWZpbmUgQlVGRl9UWVBFX0JERV82NElQICAweDBBCS8qIElucHV0IEJERSAoUG9ydC1yZXNpZGVudCkgKi8KKyNkZWZpbmUgQlVGRl9UWVBFX0JMUF82NCAgICAweDQwCS8qIEJMUCAoSG9zdC1yZXNpZGVudCkgKi8KKyNkZWZpbmUgQlVGRl9UWVBFX0JMUF82NFAgICAweDQyCS8qIEJMUCAoUG9ydC1yZXNpZGVudCkgKi8KIAkJfSBmOwogCX0gdHVzOwogCXVpbnQzMl90IGFkZHJMb3c7CiAJdWludDMyX3QgYWRkckhpZ2g7CiB9OwotI2RlZmluZSBCREU2NF9TSVpFX1dPUkQgMAotI2RlZmluZSBCUEw2NF9TSVpFX1dPUkQgMHg0MAogCiB0eXBlZGVmIHN0cnVjdCBVTFBfQkRMIHsJLyogU0xJLTIgKi8KICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKQEAgLTIyMDEsNyArMjIyOSwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQzMl90IGV2ZW50VGFnOwkvKiBFdmVudCB0YWcgKi8KICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKLQl1aW50MzJfdCByc3ZkMToyMjsKKwl1aW50MzJfdCByc3ZkMToxOTsKKwl1aW50MzJfdCBmYToxOworCXVpbnQzMl90IG1tOjE7CQkvKiBNZW5sbyBNYWludGVuYW5jZSBtb2RlIGVuYWJsZWQgKi8KKwl1aW50MzJfdCByeDoxOwogCXVpbnQzMl90IHBiOjE7CiAJdWludDMyX3QgaWw6MTsKIAl1aW50MzJfdCBhdHRUeXBlOjg7CkBAIC0yMjA5LDcgKzIyNDAsMTAgQEAKIAl1aW50MzJfdCBhdHRUeXBlOjg7CiAJdWludDMyX3QgaWw6MTsKIAl1aW50MzJfdCBwYjoxOwotCXVpbnQzMl90IHJzdmQxOjIyOworCXVpbnQzMl90IHJ4OjE7CisJdWludDMyX3QgbW06MTsKKwl1aW50MzJfdCBmYToxOworCXVpbnQzMl90IHJzdmQxOjE5OwogI2VuZGlmCiAKICNkZWZpbmUgQVRfUkVTRVJWRUQgICAgMHgwMAkvKiBSZXNlcnZlZCAtIGF0dFR5cGUgKi8KQEAgLTIyMzAsNiArMjI2NCw3IEBACiAKICNkZWZpbmUgVE9QT0xPR1lfUFRfUFQgMHgwMQkvKiBUb3BvbG9neSBpcyBwdC1wdCAvIHB0LWZhYnJpYyAqLwogI2RlZmluZSBUT1BPTE9HWV9MT09QICAweDAyCS8qIFRvcG9sb2d5IGlzIEZDLUFMICovCisjZGVmaW5lIFRPUE9MT0dZX0xOS19NRU5MT19NQUlOVEVOQU5DRSAweDA1IC8qIG1haW50IG1vZGUgemVwaHRyIHRvIG1lbmxvICovCiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB1bHBfYmRlIGxpbHBCZGU7IC8qIFRoaXMgQkRFIHBvaW50cyB0byBhIDEyOCBieXRlIGJ1ZmZlcgpAQCAtMjMyNCw2ICsyMzU5LDM2IEBACiAjZGVmaW5lICBETVBfUlNQX09GRlNFVCAgICAgICAgICAweDE0ICAgLyogd29yZCA1IGNvbnRhaW5zIGZpcnN0IHdvcmQgb2YgcnNwICovCiAjZGVmaW5lICBETVBfUlNQX1NJWkUgICAgICAgICAgICAweDZDICAgLyogbWF4aW11bSBvZiAyNyB3b3JkcyBvZiByc3AgZGF0YSAqLwogCisvKiBTdHJ1Y3R1cmUgZm9yIE1CIENvbW1hbmQgVVBEQVRFX0NGRyAoMHgxQikgKi8KKworc3RydWN0IHVwZGF0ZV9jZmdfdmFyIHsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwl1aW50MzJfdCByc3ZkMjoxNjsKKwl1aW50MzJfdCB0eXBlOjg7CisJdWludDMyX3QgcnN2ZDoxOworCXVpbnQzMl90IHJhOjE7CisJdWludDMyX3QgY286MTsKKwl1aW50MzJfdCBjdjoxOworCXVpbnQzMl90IHJlcTo0OworCXVpbnQzMl90IGVudHJ5X2xlbmd0aDoxNjsKKwl1aW50MzJfdCByZWdpb25faWQ6MTY7CisjZWxzZSAgLyogIF9fTElUVExFX0VORElBTl9CSVRGSUVMRCAqLworCXVpbnQzMl90IHJlcTo0OworCXVpbnQzMl90IGN2OjE7CisJdWludDMyX3QgY286MTsKKwl1aW50MzJfdCByYToxOworCXVpbnQzMl90IHJzdmQ6MTsKKwl1aW50MzJfdCB0eXBlOjg7CisJdWludDMyX3QgcnN2ZDI6MTY7CisJdWludDMyX3QgcmVnaW9uX2lkOjE2OworCXVpbnQzMl90IGVudHJ5X2xlbmd0aDoxNjsKKyNlbmRpZgorCisJdWludDMyX3QgcmVzcF9pbmZvOworCXVpbnQzMl90IGJ5dGVfY250OworCXVpbnQzMl90IGRhdGFfb2Zmc2V0OworfTsKKwogc3RydWN0IGhicV9tYXNrIHsKICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKIAl1aW50OF90IHRtYXRjaDsKQEAgLTI1NjAsNiArMjYyNSw0MCBAQAogCiB9IENPTkZJR19QT1JUX1ZBUjsKIAorLyogU3RydWN0dXJlIGZvciBNQiBDb21tYW5kIENPTkZJR19NU0kgKDB4MzApICovCitzdHJ1Y3QgY29uZmlnX21zaV92YXIgeworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXVpbnQzMl90IGRmbHRNc2dOdW06ODsJLyogRGVmYXVsdCBtZXNzYWdlIG51bWJlciAgICAgICAgICAgICovCisJdWludDMyX3QgcnN2ZDE6MTE7CS8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90IE5JRDo1OwkJLyogTnVtYmVyIG9mIHNlY29uZGFyeSBhdHRlbnRpb24gSURzICovCisJdWludDMyX3QgcnN2ZDI6NTsJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDMyX3QgZGZsdFByZXNlbnQ6MTsJLyogRGVmYXVsdCBtZXNzYWdlIG51bWJlciBwcmVzZW50ICAgICovCisJdWludDMyX3QgYWRkRmxhZzoxOwkvKiBBZGQgYXNzb2NpYXRpb24gZmxhZyAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCByZXBvcnRGbGFnOjE7CS8qIFJlcG9ydCBhc3NvY2lhdGlvbiBmbGFnICAgICAgICAgICAqLworI2Vsc2UJLyogIF9fTElUVExFX0VORElBTl9CSVRGSUVMRCAqLworCXVpbnQzMl90IHJlcG9ydEZsYWc6MTsJLyogUmVwb3J0IGFzc29jaWF0aW9uIGZsYWcgICAgICAgICAgICovCisJdWludDMyX3QgYWRkRmxhZzoxOwkvKiBBZGQgYXNzb2NpYXRpb24gZmxhZyAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBkZmx0UHJlc2VudDoxOwkvKiBEZWZhdWx0IG1lc3NhZ2UgbnVtYmVyIHByZXNlbnQgICAgKi8KKwl1aW50MzJfdCByc3ZkMjo1OwkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBOSUQ6NTsJCS8qIE51bWJlciBvZiBzZWNvbmRhcnkgYXR0ZW50aW9uIElEcyAqLworCXVpbnQzMl90IHJzdmQxOjExOwkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBkZmx0TXNnTnVtOjg7CS8qIERlZmF1bHQgbWVzc2FnZSBudW1iZXIgICAgICAgICAgICAqLworI2VuZGlmCisJdWludDMyX3QgYXR0ZW50aW9uQ29uZGl0aW9uc1syXTsKKwl1aW50OF90ICBhdHRlbnRpb25JZFsxNl07CisJdWludDhfdCAgbWVzc2FnZU51bWJlckJ5SEFbNjRdOworCXVpbnQ4X3QgIG1lc3NhZ2VOdW1iZXJCeUlEWzE2XTsKKwl1aW50MzJfdCBhdXRvQ2xlYXJIQVsyXTsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwl1aW50MzJfdCByc3ZkMzoxNjsKKwl1aW50MzJfdCBhdXRvQ2xlYXJJRDoxNjsKKyNlbHNlCS8qICBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQgKi8KKwl1aW50MzJfdCBhdXRvQ2xlYXJJRDoxNjsKKwl1aW50MzJfdCByc3ZkMzoxNjsKKyNlbmRpZgorCXVpbnQzMl90IHJzdmQ0OworfTsKKwogLyogU0xJLTIgUG9ydCBDb250cm9sIEJsb2NrICovCiAKIC8qIFNMSU0gUE9JTlRFUiAqLwpAQCAtMjY3OCwxMCArMjc3NywxMiBAQAogCQkJCQkgKiBORVdfRkVBVFVSRQogCQkJCQkgKi8KIAlzdHJ1Y3QgY29uZmlnX2hicV92YXIgdmFyQ2ZnSGJxOy8qIGNtZCA9IDB4N2MgKENPTkZJR19IQlEpICAqLworCXN0cnVjdCB1cGRhdGVfY2ZnX3ZhciB2YXJVcGRhdGVDZmc7IC8qIGNtZCA9IDB4MUIgKFVQREFURV9DRkcpKi8KIAlDT05GSUdfUE9SVF9WQVIgdmFyQ2ZnUG9ydDsJLyogY21kID0gMHg4OCAoQ09ORklHX1BPUlQpICAqLwogCVJFR19WUElfVkFSIHZhclJlZ1ZwaTsJCS8qIGNtZCA9IDB4OTYgKFJFR19WUEkpICovCiAJVU5SRUdfVlBJX1ZBUiB2YXJVbnJlZ1ZwaTsJLyogY21kID0gMHg5NyAoVU5SRUdfVlBJKSAqLwogCUFTWU5DRVZUX0VOQUJMRV9WQVIgdmFyQ2ZnQXN5bmNFdmVudDsgLypjbWQgPSB4MzMgKENPTkZJR19BU1lOQykgKi8KKwlzdHJ1Y3QgY29uZmlnX21zaV92YXIgdmFyQ2ZnTVNJOy8qIGNtZCA9IHgzMCAoQ09ORklHX01TSSkgICAgICovCiB9IE1BSUxWQVJJQU5UUzsKIAogLyoKQEAgLTI3MTUsMTEgKzI4MTYsMTkgQEAKIAl1aW50MzJfdCBoYnFfZ2V0WzE2XTsKIH07CiAKLXR5cGVkZWYgdW5pb24gewotCXN0cnVjdCBzbGkyX2Rlc2MgczI7Ci0Jc3RydWN0IHNsaTNfZGVzYyBzMzsKLQlzdHJ1Y3Qgc2xpM19wZ3AgIHMzX3BncDsKLX0gU0xJX1ZBUjsKK3N0cnVjdCBzbGkzX2luYl9wZ3AgeworCXVpbnQzMl90IGhhX2NvcHk7CisJdWludDMyX3QgY291bnRlcjsKKwlzdHJ1Y3QgbHBmY19wZ3AgcG9ydFtNQVhfUklOR1NdOworCXVpbnQzMl90IGhicV9nZXRbMTZdOworfTsKKwordW5pb24gc2xpX3ZhciB7CisJc3RydWN0IHNsaTJfZGVzYwlzMjsKKwlzdHJ1Y3Qgc2xpM19kZXNjCXMzOworCXN0cnVjdCBzbGkzX3BncAkJczNfcGdwOworCXN0cnVjdCBzbGkzX2luYl9wZ3AJczNfaW5iX3BncDsKK307CiAKIHR5cGVkZWYgc3RydWN0IHsKICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKQEAgLTI3MzcsNyArMjg0Niw3IEBACiAjZW5kaWYKIAogCU1BSUxWQVJJQU5UUyB1bjsKLQlTTElfVkFSIHVzOworCXVuaW9uIHNsaV92YXIgdXM7CiB9IE1BSUxCT1hfdDsKIAogLyoKQEAgLTMxMDUsNiArMzIxNCwyNyBAQAogCXN0cnVjdCBscGZjX2hicV9lbnRyeQlidWZmWzVdOwogfTsKIAorI2RlZmluZSBMUEZDX0VYVF9EQVRBX0JERV9DT1VOVCAzCitzdHJ1Y3QgZmNwX2lyd19leHQgeworCXVpbnQzMl90CWlvX3RhZzY0X2xvdzsKKwl1aW50MzJfdAlpb190YWc2NF9oaWdoOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXVpbnQ4X3QJCXJlc2VydmVkMTsKKwl1aW50OF90CQlyZXNlcnZlZDI7CisJdWludDhfdAkJcmVzZXJ2ZWQzOworCXVpbnQ4X3QJCWViZGVfY291bnQ7CisjZWxzZSAgLyogX19MSVRUTEVfRU5ESUFOICovCisJdWludDhfdAkJZWJkZV9jb3VudDsKKwl1aW50OF90CQlyZXNlcnZlZDM7CisJdWludDhfdAkJcmVzZXJ2ZWQyOworCXVpbnQ4X3QJCXJlc2VydmVkMTsKKyNlbmRpZgorCXVpbnQzMl90CXJlc2VydmVkNDsKKwlzdHJ1Y3QgdWxwX2JkZTY0IHJiZGU7CQkvKiByZXNwb25zZSBiZGUgKi8KKwlzdHJ1Y3QgdWxwX2JkZTY0IGRiZGVbTFBGQ19FWFRfREFUQV9CREVfQ09VTlRdOwkvKiBkYXRhIEJERSBvciBCUEwgKi8KKwl1aW50OF90IGljZFszMl07CQkvKiBpbW1lZGlhdGUgY29tbWFuZCBkYXRhICgzMiBieXRlcykgKi8KK307CisKIHR5cGVkZWYgc3RydWN0IF9JT0NCIHsJLyogSU9DQiBzdHJ1Y3R1cmUgKi8KIAl1bmlvbiB7CiAJCUdFTkVSSUNfUlNQIGdyc3A7CS8qIEdlbmVyaWMgcmVzcG9uc2UgKi8KQEAgLTMxOTAsNyArMzMyMCw3IEBACiAKIAkJLyogd29yZHMgOC0zMSB1c2VkIGZvciBxdWVfeHJpX2N4IGlvY2IgKi8KIAkJc3RydWN0IHF1ZV94cmk2NGN4X2V4dF9maWVsZHMgcXVlX3hyaTY0Y3hfZXh0X3dvcmRzOwotCisJCXN0cnVjdCBmY3BfaXJ3X2V4dCBmY3BfZXh0OwogCQl1aW50MzJfdCBzbGkzV29yZHNbMjRdOyAvKiA5NiBleHRyYSBieXRlcyBmb3IgU0xJLTMgKi8KIAl9IHVuc2xpMzsKIApAQCAtMzI5MiwzICszNDIyLDEwIEBACiAJCSBpb2NicC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9MSU5LX0RPV04gfHwKIAkJIGlvY2JwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9ET1dOKSk7CiB9CisKKyNkZWZpbmUgTUVOTE9fVFJBTlNQT1JUX1RZUEUgMHhmZQorI2RlZmluZSBNRU5MT19DT05URVhUIDAKKyNkZWZpbmUgTUVOTE9fUFUgMworI2RlZmluZSBNRU5MT19USU1FT1VUIDMwCisjZGVmaW5lIFNFVFZBUl9NTE9NTlQgMHgxMDMxMDcKKyNkZWZpbmUgU0VUVkFSX01MT1JTVCAweDEwMzAwNwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCBkNTFhMmE0Li45MDliZTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTUyLDE3ICs1MywyMCBAQAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbHBmY192cG9ydF90cmFuc3BvcnRfdGVtcGxhdGUgPSBOVUxMOwogc3RhdGljIERFRklORV9JRFIobHBmY19oYmFfaW5kZXgpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGxwZmNfY29uZmlnX3BvcnRfcHJlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgd2lsbCBkbyBMUEZDIGluaXRpYWxpemF0aW9uIHByaW9yIHRvIHRoZSAgICAgICAgICAgICAqLwotLyogICAgQ09ORklHX1BPUlQgbWFpbGJveCBjb21tYW5kLiBUaGlzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgKi8KLS8qICAgIGFzIGEgU0xJIGxheWVyIGNhbGxiYWNrIHJvdXRpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVSRVNUQVJUIGlmIGl0IHdhbnRzICAgICAgICAqLwotLyogICAgdGhlIFNMSSBsYXllciB0byByZXNldCB0aGUgSEJBIGFuZCB0cnkgYWdhaW4uIEFueSAgICAgICAgICAgICAgICAgKi8KLS8qICAgIG90aGVyIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19jb25maWdfcG9ydF9wcmVwOiBQZXJmb3JtIGxwZmMgaW5pdGlhbGl6YXRpb24gcHJpb3IgdG8gY29uZmlnIHBvcnQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBkbyBMUEZDIGluaXRpYWxpemF0aW9uIHByaW9yIHRvIGlzc3VpbmcgdGhlIENPTkZJR19QT1JUCisgKiBtYWlsYm94IGNvbW1hbmQuIEl0IHJldHJpZXZlcyB0aGUgcmV2aXNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgSEJBIGFuZAorICogY29sbGVjdHMgdGhlIFZpdGFsIFByb2R1Y3QgRGF0YSAoVlBEKSBhYm91dCB0aGUgSEJBIGZvciBwcmVwYXJpbmcgdGhlCisgKiBjb25maWd1cmF0aW9uIG9mIHRoZSBIQkEuCisgKgorICogUmV0dXJuIGNvZGVzOgorICogICAwIC0gc3VjY2Vzcy4KKyAqICAgLUVSRVNUQVJUIC0gcmVxdWVzdHMgdGhlIFNMSSBsYXllciB0byByZXNldCB0aGUgSEJBIGFuZCB0cnkgYWdhaW4uCisgKiAgIEFueSBvdGhlciB2YWx1ZSAtIGluZGljYXRlcyBhbiBlcnJvci4KKyAqKi8KIGludAogbHBmY19jb25maWdfcG9ydF9wcmVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTE4MCwxMiArMTg0LDkgQEAKIAkJCQkJCXNpemVvZiAocGhiYS0+UmFuZG9tRGF0YSkpOwogCiAJLyogR2V0IGFkYXB0ZXIgVlBEIGluZm9ybWF0aW9uICovCi0JcG1iLT5jb250ZXh0MiA9IGttYWxsb2MoRE1QX1JTUF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBtYi0+Y29udGV4dDIpCi0JCWdvdG8gb3V0X2ZyZWVfbWJveDsKIAlscGZjX3ZwZF9kYXRhID0ga21hbGxvYyhETVBfVlBEX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghbHBmY192cGRfZGF0YSkKLQkJZ290byBvdXRfZnJlZV9jb250ZXh0MjsKKwkJZ290byBvdXRfZnJlZV9tYm94OwogCiAJZG8gewogCQlscGZjX2R1bXBfbWVtKHBoYmEsIHBtYiwgb2Zmc2V0KTsKQEAgLTIwMCwyMSArMjAxLDI5IEBACiAJCX0KIAkJaWYgKG1iLT51bi52YXJEbXAud29yZF9jbnQgPiBETVBfVlBEX1NJWkUgLSBvZmZzZXQpCiAJCQltYi0+dW4udmFyRG1wLndvcmRfY250ID0gRE1QX1ZQRF9TSVpFIC0gb2Zmc2V0OwotCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkocG1iLT5jb250ZXh0MiwgbHBmY192cGRfZGF0YSArIG9mZnNldCwKKwkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KCgodWludDhfdCAqKW1iKSArIERNUF9SU1BfT0ZGU0VULAorCQkJCSAgICAgIGxwZmNfdnBkX2RhdGEgKyBvZmZzZXQsCiAJCQkJICAgICAgbWItPnVuLnZhckRtcC53b3JkX2NudCk7CiAJCW9mZnNldCArPSBtYi0+dW4udmFyRG1wLndvcmRfY250OwogCX0gd2hpbGUgKG1iLT51bi52YXJEbXAud29yZF9jbnQgJiYgb2Zmc2V0IDwgRE1QX1ZQRF9TSVpFKTsKIAlscGZjX3BhcnNlX3ZwZChwaGJhLCBscGZjX3ZwZF9kYXRhLCBvZmZzZXQpOwogCiAJa2ZyZWUobHBmY192cGRfZGF0YSk7Ci1vdXRfZnJlZV9jb250ZXh0MjoKLQlrZnJlZShwbWItPmNvbnRleHQyKTsKIG91dF9mcmVlX21ib3g6CiAJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIENvbXBsZXRpb24gaGFuZGxlciBmb3IgY29uZmlnIGFzeW5jIGV2ZW50IG1haWxib3ggY29tbWFuZC4gKi8KKy8qKgorICogbHBmY19jb25maWdfYXN5bmNfY21wbDogQ29tcGxldGlvbiBoYW5kbGVyIGZvciBjb25maWcgYXN5bmMgZXZlbnQgbWJveCBjbWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWJveHE6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGZvciBkcml2ZXIncyBjb25maWd1cmluZyBhc3luY2hyb25vdXMgZXZlbnQKKyAqIG1haWxib3ggY29tbWFuZCB0byB0aGUgZGV2aWNlLiBJZiB0aGUgbWFpbGJveCBjb21tYW5kIHJldHVybnMgc3VjY2Vzc2Z1bGx5LAorICogaXQgd2lsbCBzZXQgaW50ZXJuYWwgYXN5bmMgZXZlbnQgc3VwcG9ydCBmbGFnIHRvIDE7IG90aGVyd2lzZSwgaXQgd2lsbAorICogc2V0IGludGVybmFsIGFzeW5jIGV2ZW50IHN1cHBvcnQgZmxhZyB0byAwLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY29uZmlnX2FzeW5jX2NtcGwoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1ib3hxKQogewpAQCAtMjI2LDE2ICsyMzUsMTkgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbHBmY19jb25maWdfcG9ydF9wb3N0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSB3aWxsIGRvIExQRkMgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgdGhlICAgICAgICAgICAgICAgICovCi0vKiAgICBDT05GSUdfUE9SVCBtYWlsYm94IGNvbW1hbmQuIFRoaXMgd2lsbCBiZSBpbml0aWFsaXplZCAgICAgICAgICAgICAqLwotLyogICAgYXMgYSBTTEkgbGF5ZXIgY2FsbGJhY2sgcm91dGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSByZXR1cm5zIDAgb24gc3VjY2Vzcy4gQW55IG90aGVyIHJldHVybiB2YWx1ZSAgICAgICAgICovCi0vKiAgICBpbmRpY2F0ZXMgYW4gZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfY29uZmlnX3BvcnRfcG9zdDogUGVyZm9ybSBscGZjIGluaXRpYWxpemF0aW9uIGFmdGVyIGNvbmZpZyBwb3J0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgZG8gTFBGQyBpbml0aWFsaXphdGlvbiBhZnRlciB0aGUgQ09ORklHX1BPUlQgbWFpbGJveAorICogY29tbWFuZCBjYWxsLiBJdCBwZXJmb3JtcyBhbGwgaW50ZXJuYWwgcmVzb3VyY2UgYW5kIHN0YXRlIHNldHVwcyBvbiB0aGUKKyAqIHBvcnQ6IHBvc3QgSU9DQiBidWZmZXJzLCBlbmFibGUgYXBwcm9wcmlhdGUgaG9zdCBpbnRlcnJ1cHQgYXR0ZW50aW9ucywKKyAqIEVMUyByaW5nIHRpbWVycywgZXRjLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjY2Vzcy4KKyAqICAgQW55IG90aGVyIHZhbHVlIC0gZXJyb3IuCisgKiovCiBpbnQKIGxwZmNfY29uZmlnX3BvcnRfcG9zdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zNzgsNiArMzkwLDI5IEBACiAJaWYgKHBoYmEtPnNsaV9yZXYgIT0gMykKIAkJbHBmY19wb3N0X3Jjdl9idWYocGhiYSk7CiAKKwkvKgorCSAqIENvbmZpZ3VyZSBIQkEgTVNJLVggYXR0ZW50aW9uIGNvbmRpdGlvbnMgdG8gbWVzc2FnZXMgaWYgTVNJLVggbW9kZQorCSAqLworCWlmIChwaGJhLT5pbnRyX3R5cGUgPT0gTVNJWCkgeworCQlyYyA9IGxwZmNfY29uZmlnX21zaShwaGJhLCBwbWIpOworCQlpZiAocmMpIHsKKwkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX1BPTEwpOworCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX01CT1gsCisJCQkJCSIwMzUyIENvbmZpZyBNU0kgbWFpbGJveCBjb21tYW5kICIKKwkJCQkJImZhaWxlZCwgbWJ4Q21kIHgleCwgbWJ4U3RhdHVzIHgleFxuIiwKKwkJCQkJcG1iLT5tYi5tYnhDb21tYW5kLCBwbWItPm1iLm1ieFN0YXR1cyk7CisJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJLyogSW5pdGlhbGl6ZSBFUkFUVCBoYW5kbGluZyBmbGFnICovCisJcGhiYS0+aGJhX2ZsYWcgJj0gfkhCQV9FUkFUVF9IQU5ETEVEOworCiAJLyogRW5hYmxlIGFwcHJvcHJpYXRlIGhvc3QgaW50ZXJydXB0cyAqLwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXN0YXR1cyA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CkBAIC0zOTMsMjYgKzQyOCwyNiBAQAogCiAJaWYgKChwaGJhLT5jZmdfcG9sbCAmIEVOQUJMRV9GQ1BfUklOR19QT0xMSU5HKSAmJgogCSAgICAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkpCi0JCXN0YXR1cyAmPSB+KEhDX1IwSU5UX0VOQSA8PCBMUEZDX0ZDUF9SSU5HKTsKKwkJc3RhdHVzICY9IH4oSENfUjBJTlRfRU5BKTsKIAogCXdyaXRlbChzdGF0dXMsIHBoYmEtPkhDcmVnYWRkcik7CiAJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCi0JLyoKLQkgKiBTZXR1cCB0aGUgcmluZyAwIChlbHMpICB0aW1lb3V0IGhhbmRsZXIKLQkgKi8KLQl0aW1lb3V0ID0gcGhiYS0+ZmNfcmF0b3YgPDwgMTsKKwkvKiBTZXQgdXAgcmluZy0wIChFTFMpIHRpbWVyICovCisJdGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKIAltb2RfdGltZXIoJnZwb3J0LT5lbHNfdG1vZnVuYywgamlmZmllcyArIEhaICogdGltZW91dCk7CisJLyogU2V0IHVwIGhlYXJ0IGJlYXQgKEhCKSB0aW1lciAqLwogCW1vZF90aW1lcigmcGhiYS0+aGJfdG1vZnVuYywgamlmZmllcyArIEhaICogTFBGQ19IQl9NQk9YX0lOVEVSVkFMKTsKIAlwaGJhLT5oYl9vdXRzdGFuZGluZyA9IDA7CiAJcGhiYS0+bGFzdF9jb21wbGV0aW9uX3RpbWUgPSBqaWZmaWVzOworCS8qIFNldCB1cCBlcnJvciBhdHRlbnRpb24gKEVSQVRUKSBwb2xsaW5nIHRpbWVyICovCisJbW9kX3RpbWVyKCZwaGJhLT5lcmF0dF9wb2xsLCBqaWZmaWVzICsgSFogKiBMUEZDX0VSQVRUX1BPTExfSU5URVJWQUwpOwogCiAJbHBmY19pbml0X2xpbmsocGhiYSwgcG1iLCBwaGJhLT5jZmdfdG9wb2xvZ3ksIHBoYmEtPmNmZ19saW5rX3NwZWVkKTsKIAlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7Ci0JcG1iLT52cG9ydCA9IHZwb3J0OwotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOwogCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CiAJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCiAJCQkJIjA0NTQgQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCkBAIC00NDcsMTkgKzQ4MiwyMCBAQAogCQkJCXJjKTsKIAkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbHBmY19oYmFfZG93bl9wcmVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSB3aWxsIGRvIExQRkMgdW5pbml0aWFsaXphdGlvbiBiZWZvcmUgdGhlICAgICAgICAgICAgICovCi0vKiAgICBIQkEgaXMgcmVzZXQgd2hlbiBicmluZ2luZyBkb3duIHRoZSBTTEkgTGF5ZXIuIFRoaXMgd2lsbCBiZSAgICAgICAqLwotLyogICAgaW5pdGlhbGl6ZWQgYXMgYSBTTEkgbGF5ZXIgY2FsbGJhY2sgcm91dGluZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSByZXR1cm5zIDAgb24gc3VjY2Vzcy4gQW55IG90aGVyIHJldHVybiB2YWx1ZSAgICAgICAgICovCi0vKiAgICBpbmRpY2F0ZXMgYW4gZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfaGJhX2Rvd25fcHJlcDogUGVyZm9ybSBscGZjIHVuaW5pdGlhbGl6YXRpb24gcHJpb3IgdG8gSEJBIHJlc2V0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBIQkEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgZG8gTFBGQyB1bmluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGUgSEJBIGlzIHJlc2V0IHdoZW4KKyAqIGJyaW5naW5nIGRvd24gdGhlIFNMSSBMYXllci4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Nlc3MuCisgKiAgIEFueSBvdGhlciB2YWx1ZSAtIGVycm9yLgorICoqLwogaW50CiBscGZjX2hiYV9kb3duX3ByZXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNDgxLDE1ICs1MTcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBscGZjX2hiYV9kb3duX3Bvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHdpbGwgZG8gdW5pbml0aWFsaXphdGlvbiBhZnRlciB0aGUgSEJBIGlzIHJlc2V0ICAgICAgKi8KLS8qICAgIHdoZW4gYnJpbmdpbmcgZG93biB0aGUgU0xJIExheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciByZXR1cm4gdmFsdWUgICAgICAgICAqLwotLyogICAgaW5kaWNhdGVzIGFuIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2hiYV9kb3duX3Bvc3Q6IFBlcmZvcm0gbHBmYyB1bmluaXRpYWxpemF0aW9uIGFmdGVyIEhCQSByZXNldC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgSEJBIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGRvIHVuaW5pdGlhbGl6YXRpb24gYWZ0ZXIgdGhlIEhCQSBpcyByZXNldCB3aGVuIGJyaW5nCisgKiBkb3duIHRoZSBTTEkgTGF5ZXIuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNlc3MuCisgKiAgIEFueSBvdGhlciB2YWx1ZSAtIGVycm9yLgorICoqLwogaW50CiBscGZjX2hiYV9kb3duX3Bvc3Qoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNTQ4LDcgKzU4NiwxOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBIQkEgaGVhcnQgYmVhdCB0aW1lb3V0IGhhbmRsZXIgKi8KKy8qKgorICogbHBmY19oYl90aW1lb3V0OiBUaGUgSEJBLXRpbWVyIHRpbWVvdXQgaGFuZGxlci4KKyAqIEBwdHI6IHVuc2lnbmVkIGxvbmcgaG9sZHMgdGhlIHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBpcyB0aGUgSEJBLXRpbWVyIHRpbWVvdXQgaGFuZGxlciByZWdpc3RlcmVkIHRvIHRoZSBscGZjIGRyaXZlci4gV2hlbgorICogdGhpcyB0aW1lciBmaXJlcywgYSBIQkEgdGltZW91dCBldmVudCBzaGFsbCBiZSBwb3N0ZWQgdG8gdGhlIGxwZmMgZHJpdmVyCisgKiB3b3JrLXBvcnQtZXZlbnRzIGJpdG1hcCBhbmQgdGhlIHdvcmtlciB0aHJlYWQgaXMgbm90aWZpZWQuIFRoaXMgdGltZW91dAorICogZXZlbnQgd2lsbCBiZSB1c2VkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkIHRvIGludm9rZSB0aGUgYWN0dWFsIHRpbWVvdXQKKyAqIGhhbmRsZXIgcm91dGluZSwgbHBmY19oYl90aW1lb3V0X2hhbmRsZXIuIEFueSBwZXJpb2RpY2FsIG9wZXJhdGlvbnMgd2lsbAorICogYmUgcGVyZm9ybWVkIGluIHRoZSB0aW1lb3V0IGhhbmRsZXIgYW5kIHRoZSBIQkEgdGltZW91dCBldmVudCBiaXQgc2hhbGwKKyAqIGJlIGNsZWFyZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQgYWZ0ZXIgaXQgaGFzIHRha2VuIHRoZSBldmVudCBiaXRtYXAgb3V0LgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfaGJfdGltZW91dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKQEAgLTU1NywxNyArNjA2LDM2IEBACiAJdW5zaWduZWQgbG9uZyBpZmxhZzsKIAogCXBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopcHRyOworCisJLyogQ2hlY2sgZm9yIGhlYXJ0IGJlYXQgdGltZW91dCBjb25kaXRpb25zICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPnBwb3J0LT53b3JrX3BvcnRfbG9jaywgaWZsYWcpOwogCXRtb19wb3N0ZWQgPSBwaGJhLT5wcG9ydC0+d29ya19wb3J0X2V2ZW50cyAmIFdPUktFUl9IQl9UTU87CiAJaWYgKCF0bW9fcG9zdGVkKQogCQlwaGJhLT5wcG9ydC0+d29ya19wb3J0X2V2ZW50cyB8PSBXT1JLRVJfSEJfVE1POwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPnBwb3J0LT53b3JrX3BvcnRfbG9jaywgaWZsYWcpOwogCisJLyogVGVsbCB0aGUgd29ya2VyIHRocmVhZCB0aGVyZSBpcyB3b3JrIHRvIGRvICovCiAJaWYgKCF0bW9fcG9zdGVkKQogCQlscGZjX3dvcmtlcl93YWtlX3VwKHBoYmEpOwogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2hiX21ib3hfY21wbDogVGhlIGxwZmMgaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWJveHE6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIGxwZmMgaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQuCisgKiBJZiBjb25maWd1cmVkLCB0aGUgbHBmYyBkcml2ZXIgaXNzdWVzIHRoZSBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZCB0bworICogdGhlIEhCQSBldmVyeSBMUEZDX0hCX01CT1hfSU5URVJWQUwgKGN1cnJlbnQgNSkgc2Vjb25kcy4gQXQgdGhlIHRpbWUgdGhlCisgKiBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQsIHRoZSBkcml2ZXIgc2hhbGwgc2V0IHVwIGhlYXJ0LWJlYXQKKyAqIHRpbWVvdXQgdGltZXIgdG8gTFBGQ19IQl9NQk9YX1RJTUVPVVQgKGN1cnJlbnQgMzApIHNlY29uZHMgYW5kIG1hcmtzCisgKiBoZWFydC1iZWF0IG91dHN0YW5kaW5nIHN0YXRlLiBPbmNlIHRoZSBtYWlsYm94IGNvbW1hbmQgY29tZXMgYmFjayBhbmQKKyAqIG5vIGVycm9yIGNvbmRpdGlvbnMgZGV0ZWN0ZWQsIHRoZSBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZCB0aW1lciBpcworICogcmVzZXQgdG8gTFBGQ19IQl9NQk9YX0lOVEVSVkFMIHNlY29uZHMgYW5kIHRoZSBoZWFydC1iZWF0IG91dHN0YW5kaW5nCisgKiBzdGF0ZSBpcyBjbGVhcmVkIGZvciB0aGUgbmV4dCBoZWFydC1iZWF0LiBJZiB0aGUgdGltZXIgZXhwaXJlZCB3aXRoIHRoZQorICogaGVhcnQtYmVhdCBvdXRzdGFuZGluZyBzdGF0ZSBzZXQsIHRoZSBkcml2ZXIgd2lsbCBwdXQgdGhlIEhCQSBvZmZsaW5lLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfaGJfbWJveF9jbXBsKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYm94cSkKIHsKQEAgLTU3Nyw2ICs2NDUsNyBAQAogCXBoYmEtPmhiX291dHN0YW5kaW5nID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBkcnZyX2ZsYWcpOwogCisJLyogQ2hlY2sgYW5kIHJlc2V0IGhlYXJ0LWJlYXQgdGltZXIgaXMgbmVjZXNzYXJ5ICovCiAJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJaWYgKCEocGhiYS0+cHBvcnQtPmZjX2ZsYWcgJiBGQ19PRkZMSU5FX01PREUpICYmCiAJCSEocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUikgJiYKQEAgLTU4Niw2ICs2NTUsMjIgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19oYl90aW1lb3V0X2hhbmRsZXI6IFRoZSBIQkEtdGltZXIgdGltZW91dCBoYW5kbGVyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIEhCQS10aW1lciB0aW1lb3V0IGhhbmRsZXIgdG8gYmUgaW52b2tlZCBieSB0aGUgd29ya2VyCisgKiB0aHJlYWQgd2hlbmV2ZXIgdGhlIEhCQSB0aW1lciBmaXJlZCBhbmQgSEJBLXRpbWVvdXQgZXZlbnQgcG9zdGVkLiBUaGlzCisgKiBoYW5kbGVyIHBlcmZvcm1zIGFueSBwZXJpb2RpYyBvcGVyYXRpb25zIG5lZWRlZCBmb3IgdGhlIGRldmljZS4gSWYgc3VjaAorICogcGVyaW9kaWMgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBhdHRlbmRlZCB0byBlaXRoZXIgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyCisgKiBvciBieSBwcm9jZXNzaW5nIHNsb3ctcmluZyBvciBmYXN0LXJpbmcgZXZlbnRzIHdpdGhpbiB0aGUgSEJBLXRpbWVyCisgKiB0aW1lb3V0IHdpbmRvdyAoTFBGQ19IQl9NQk9YX0lOVEVSVkFMKSwgdGhpcyBoYW5kbGVyIGp1c3Qgc2ltcGx5IHJlc2V0cworICogdGhlIHRpbWVyIGZvciB0aGUgbmV4dCB0aW1lb3V0IHBlcmlvZC4gSWYgbHBmYyBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZAorICogaXMgY29uZmlndXJlZCBhbmQgdGhlcmUgaXMgbm8gaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQgb3V0c3RhbmRpbmcsIGEKKyAqIGhlYXJ0LWJlYXQgbWFpbGJveCBpcyBpc3N1ZWQgYW5kIHRpbWVyIHNldCBwcm9wZXJseS4gT3RoZXJ3aXNlLCBpZiB0aGVyZQorICogaGFzIGJlZW4gYSBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZCBvdXRzdGFuZGluZywgdGhlIEhCQSBzaGFsbCBiZSBwdXQKKyAqIHRvIG9mZmxpbmUuCisgKiovCiB2b2lkCiBscGZjX2hiX3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC02ODQsNiArNzY5LDEzIEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfb2ZmbGluZV9lcmF0dDogQnJpbmcgbHBmYyBvZmZsaW5lIG9uIGhhcmR3YXJlIGVycm9yIGF0dGVudGlvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gYnJpbmcgdGhlIEhCQSBvZmZsaW5lIHdoZW4gSEJBIGhhcmR3YXJlIGVycm9yCisgKiBvdGhlciB0aGFuIFBvcnQgRXJyb3IgNiBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX29mZmxpbmVfZXJhdHQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNzA0LDE0ICs3OTYsMTYgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbHBmY19oYW5kbGVfZXJhdHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSB3aWxsIGhhbmRsZSBwcm9jZXNzaW5nIGEgSG9zdCBBdHRlbnRpb24gICAgICAgICAgICAgICovCi0vKiAgICBFcnJvciBTdGF0dXMgZXZlbnQuIFRoaXMgd2lsbCBiZSBpbml0aWFsaXplZCAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYXMgYSBTTEkgbGF5ZXIgY2FsbGJhY2sgcm91dGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2hhbmRsZV9lcmF0dDogVGhlIEhCQSBoYXJkd2FyZSBlcnJvciBoYW5kbGVyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gaGFuZGxlIHRoZSBmb2xsb3dpbmcgSEJBIGhhcmR3YXJlIGVycm9yCisgKiBjb25kaXRpb25zOgorICogMSAtIEhCQSBlcnJvciBhdHRlbnRpb24gaW50ZXJydXB0CisgKiAyIC0gRE1BIHJpbmcgaW5kZXggb3V0IG9mIHJhbmdlCisgKiAzIC0gTWFpbGJveCBjb21tYW5kIGNhbWUgYmFjayBhcyB1bmtub3duCisgKiovCiB2b2lkCiBscGZjX2hhbmRsZV9lcmF0dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC03MjIsNiArODE2LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRlbXBlcmF0dXJlOwogCXN0cnVjdCB0ZW1wX2V2ZW50IHRlbXBfZXZlbnRfZGF0YTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CisJc3RydWN0IGxwZmNfYm9hcmRfZXZlbnRfaGVhZGVyIGJvYXJkX2V2ZW50OwogCiAJLyogSWYgdGhlIHBjaSBjaGFubmVsIGlzIG9mZmxpbmUsIGlnbm9yZSBwb3NzaWJsZSBlcnJvcnMsCiAJICogc2luY2Ugd2UgY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIHBjaSBjYXJkIGFueXdheS4gKi8KQEAgLTczMSw2ICs4MjYsMTYgQEAKIAlpZiAoIXBoYmEtPmNmZ19lbmFibGVfaGJhX3Jlc2V0KQogCQlyZXR1cm47CiAKKwkvKiBTZW5kIGFuIGludGVybmFsIGVycm9yIGV2ZW50IHRvIG1nbXQgYXBwbGljYXRpb24gKi8KKwlib2FyZF9ldmVudC5ldmVudF90eXBlID0gRkNfUkVHX0JPQVJEX0VWRU5UOworCWJvYXJkX2V2ZW50LnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9QT1JUSU5URVJSOworCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LCBmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCQkJICBzaXplb2YoYm9hcmRfZXZlbnQpLAorCQkJCSAgKGNoYXIgKikgJmJvYXJkX2V2ZW50LAorCQkJCSAgU0NTSV9OTF9WSURfVFlQRV9QQ0kKKwkJCQkgIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOworCiAJaWYgKHBoYmEtPndvcmtfaHMgJiBIU19GRkVSNikgewogCQkvKiBSZS1lc3RhYmxpc2hpbmcgTGluayAqLwogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfTElOS19FVkVOVCwKQEAgLTc3MSw3ICs4NzYsNyBAQAogCQl0ZW1wX2V2ZW50X2RhdGEuZGF0YSA9ICh1aW50MzJfdCl0ZW1wZXJhdHVyZTsKIAogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIwNDU5IEFkYXB0ZXIgbWF4aW11bSB0ZW1wZXJhdHVyZSBleGNlZWRlZCAiCisJCQkJIjA0MDYgQWRhcHRlciBtYXhpbXVtIHRlbXBlcmF0dXJlIGV4Y2VlZGVkICIKIAkJCQkiKCVsZCksIHRha2luZyB0aGlzIHBvcnQgb2ZmbGluZSAiCiAJCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAogCQkJCXRlbXBlcmF0dXJlLCBwaGJhLT53b3JrX2hzLApAQCAtNzkxLDggKzg5Niw4IEBACiAKIAl9IGVsc2UgewogCQkvKiBUaGUgaWYgY2xhdXNlIGFib3ZlIGZvcmNlcyB0aGlzIGNvZGUgcGF0aCB3aGVuIHRoZSBzdGF0dXMKLQkJICogZmFpbHVyZSBpcyBhIHZhbHVlIG90aGVyIHRoYW4gRkZFUjYuICBEbyBub3QgY2FsbCB0aGUgb2ZmbGluZQotCQkgKiAgdHdpY2UuIFRoaXMgaXMgdGhlIGFkYXB0ZXIgaGFyZHdhcmUgZXJyb3IgcGF0aC4KKwkJICogZmFpbHVyZSBpcyBhIHZhbHVlIG90aGVyIHRoYW4gRkZFUjYuIERvIG5vdCBjYWxsIHRoZSBvZmZsaW5lCisJCSAqIHR3aWNlLiBUaGlzIGlzIHRoZSBhZGFwdGVyIGhhcmR3YXJlIGVycm9yIHBhdGguCiAJCSAqLwogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJCSIwNDU3IEFkYXB0ZXIgSGFyZHdhcmUgRXJyb3IgIgpAQCAtODA4LDE2ICs5MTMsMTYgQEAKIAogCQlscGZjX29mZmxpbmVfZXJhdHQocGhiYSk7CiAJfQorCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBscGZjX2hhbmRsZV9sYXR0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHdpbGwgaGFuZGxlIHByb2Nlc3NpbmcgYSBIb3N0IEF0dGVudGlvbiAgICAgICAgICAgICAgKi8KLS8qICAgIExpbmsgU3RhdHVzIGV2ZW50LiBUaGlzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBhcyBhIFNMSSBsYXllciBjYWxsYmFjayByb3V0aW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfaGFuZGxlX2xhdHQ6IFRoZSBIQkEgbGluayBldmVudCBoYW5kbGVyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZCB0byBoYW5kbGUgYSBIQkEgaG9zdAorICogYXR0ZW50aW9uIGxpbmsgZXZlbnQuCisgKiovCiB2b2lkCiBscGZjX2hhbmRsZV9sYXR0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTg5OCwxMiArMTAwMywyMCBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIGxwZmNfcGFyc2VfdnBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBUaGlzIHJvdXRpbmUgd2lsbCBwYXJzZSB0aGUgVlBEIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3BhcnNlX3ZwZDogUGFyc2UgVlBEIChWaXRhbCBQcm9kdWN0IERhdGEpLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBkOiBwb2ludGVyIHRvIHRoZSB2aXRhbCBwcm9kdWN0IGRhdGEuCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIHZpdGFsIHByb2R1Y3QgZGF0YSBpbiBieXRlcy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGFyc2VzIHRoZSBWaXRhbCBQcm9kdWN0IERhdGEgKFZQRCkuIFRoZSBWUEQgaXMgdHJlYXRlZCBhcworICogYW4gYXJyYXkgb2YgY2hhcmFjdGVycy4gSW4gdGhpcyByb3V0aW5lLCB0aGUgTW9kZWxOYW1lLCBQcm9ncmFtVHlwZSwgYW5kCisgKiBNb2RlbERlc2MsIGV0Yy4gZmllbGRzIG9mIHRoZSBwaGJhIGRhdGEgc3RydWN0dXJlIHdpbGwgYmUgcG9wdWxhdGVkLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gcG9pbnRlciB0byB0aGUgVlBEIHBhc3NlZCBpbiBpcyBOVUxMCisgKiAgIDEgLSBzdWNjZXNzCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3BhcnNlX3ZwZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQ4X3QgKnZwZCwgaW50IGxlbikKIHsKQEAgLTEwNDAsMTIgKzExNTMsMjUgQEAKIAlyZXR1cm4oMSk7CiB9CiAKKy8qKgorICogbHBmY19nZXRfaGJhX21vZGVsX2Rlc2M6IFJldHJpZXZlIEhCQSBkZXZpY2UgbW9kZWwgbmFtZSBhbmQgZGVzY3JpcHRpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtZHA6IHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIGRlcml2ZWQgbW9kZWwgbmFtZS4KKyAqIEBkZXNjcDogcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZGVyaXZlZCBkZXNjcmlwdGlvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEhCQSdzIGRlc2NyaXB0aW9uIGJhc2VkIG9uIGl0cyByZWdpc3RlcmVkIFBDSSBkZXZpY2UKKyAqIElELiBUaGUgQGRlc2NwIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24gcG9pbnRzIHRvIGFuIGFycmF5IG9mIDI1NiBjaGFycy4gSXQKKyAqIHNoYWxsIGJlIHJldHVybmVkIHdpdGggdGhlIG1vZGVsIG5hbWUsIG1heGltdW0gc3BlZWQsIGFuZCB0aGUgaG9zdCBidXMgdHlwZS4KKyAqIFRoZSBAbWRwIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24gcG9pbnRzIHRvIGFuIGFycmF5IG9mIDgwIGNoYXJzLiBXaGVuIHRoZQorICogZnVuY3Rpb24gcmV0dXJucywgdGhlIEBtZHAgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgbW9kZWwgbmFtZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9oYmFfbW9kZWxfZGVzYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQ4X3QgKm1kcCwgdWludDhfdCAqZGVzY3ApCiB7CiAJbHBmY192cGRfdCAqdnA7CiAJdWludDE2X3QgZGV2X2lkID0gcGhiYS0+cGNpZGV2LT5kZXZpY2U7CiAJaW50IG1heF9zcGVlZDsKKwlpbnQgR0UgPSAwOwogCXN0cnVjdCB7CiAJCWNoYXIgKiBuYW1lOwogCQlpbnQgICAgbWF4X3NwZWVkOwpAQCAtMTE3Nyw2ICsxMzAzLDE5IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX1NBVF9TOgogCQltID0gKHR5cGVvZihtKSl7IkxQZTEyMDAwLVMiLCBtYXhfc3BlZWQsICJQQ0llIn07CiAJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9IT1JORVQ6CisJCW0gPSAodHlwZW9mKG0pKXsiTFAyMTAwMCIsIG1heF9zcGVlZCwgIlBDSWUifTsKKwkJR0UgPSAxOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19WRjoKKwkJbSA9ICh0eXBlb2YobSkpIHsiTFBldjEyMDAwIiwgbWF4X3NwZWVkLCAiUENJZSBJT1YifTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1BST1RFVVNfUEY6CisJCW0gPSAodHlwZW9mKG0pKSB7IkxQZXYxMjAwMCIsIG1heF9zcGVlZCwgIlBDSWUgSU9WIn07CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9QUk9URVVTX1M6CisJCW0gPSAodHlwZW9mKG0pKSB7IkxQZW12MTIwMDItUyIsIG1heF9zcGVlZCwgIlBDSWUgSU9WIn07CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW0gPSAodHlwZW9mKG0pKXsgTlVMTCB9OwogCQlicmVhazsKQEAgLTExODYsMTggKzEzMjUsMjUgQEAKIAkJc25wcmludGYobWRwLCA3OSwiJXMiLCBtLm5hbWUpOwogCWlmIChkZXNjcCAmJiBkZXNjcFswXSA9PSAnXDAnKQogCQlzbnByaW50ZihkZXNjcCwgMjU1LAotCQkJICJFbXVsZXggJXMgJWRHYiAlcyBGaWJyZSBDaGFubmVsIEFkYXB0ZXIiLAotCQkJIG0ubmFtZSwgbS5tYXhfc3BlZWQsIG0uYnVzKTsKKwkJCSJFbXVsZXggJXMgJWQlcyAlcyAlcyIsCisJCQltLm5hbWUsIG0ubWF4X3NwZWVkLAorCQkJKEdFKSA/ICJHRSIgOiAiR2IiLAorCQkJbS5idXMsCisJCQkoR0UpID8gIkZDb0UgQWRhcHRlciIgOiAiRmlicmUgQ2hhbm5lbCBBZGFwdGVyIik7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgbHBmY19wb3N0X2J1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgVGhpcyByb3V0aW5lIHdpbGwgcG9zdCBjb3VudCBidWZmZXJzIHRvIHRoZSAgKi8KLS8qICAgcmluZyB3aXRoIHRoZSBRVUVfUklOR19CVUZfQ04gY29tbWFuZC4gVGhpcyAgKi8KLS8qICAgYWxsb3dzIDMgYnVmZmVycyAvIGNvbW1hbmQgdG8gYmUgcG9zdGVkLiAgICAgKi8KLS8qICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgTk9UIHBvc3RlZC4gICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19wb3N0X2J1ZmZlcjogUG9zdCBJT0NCKHMpIHdpdGggRE1BIGJ1ZmZlciBkZXNjcmlwdG9yKHMpIHRvIGEgSU9DQiByaW5nLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcHJpbmc6IHBvaW50ZXIgdG8gYSBJT0NCIHJpbmcuCisgKiBAY250OiB0aGUgbnVtYmVyIG9mIElPQ0JzIHRvIGJlIHBvc3RlZCB0byB0aGUgSU9DQiByaW5nLgorICoKKyAqIFRoaXMgcm91dGluZSBwb3N0cyBhIGdpdmVuIG51bWJlciBvZiBJT0NCcyB3aXRoIHRoZSBhc3NvY2lhdGVkIERNQSBidWZmZXIKKyAqIGRlc2NyaXB0b3JzIHNwZWNpZmllZCBieSB0aGUgY250IGFyZ3VtZW50IHRvIHRoZSBnaXZlbiBJT0NCIHJpbmcuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIFRoZSBudW1iZXIgb2YgSU9DQnMgTk9UIGFibGUgdG8gYmUgcG9zdGVkIHRvIHRoZSBJT0NCIHJpbmcuCisgKiovCiBpbnQKIGxwZmNfcG9zdF9idWZmZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsIGludCBjbnQpCiB7CkBAIC0xMjg3LDEyICsxNDMzLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBscGZjX3Bvc3RfcmN2X2J1ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgVGhpcyByb3V0aW5lIHBvc3QgaW5pdGlhbCByY3YgYnVmZmVycyB0byB0aGUgY29uZmlndXJlZCByaW5ncyAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19wb3N0X3Jjdl9idWY6IFBvc3QgdGhlIGluaXRpYWwgcmVjZWl2ZSBJT0NCIGJ1ZmZlcnMgdG8gRUxTIHJpbmcuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcG9zdHMgaW5pdGlhbCByZWNlaXZlIElPQ0IgYnVmZmVycyB0byB0aGUgRUxTIHJpbmcuIFRoZQorICogY3VycmVudCBudW1iZXIgb2YgaW5pdGlhbCBJT0NCIGJ1ZmZlcnMgc3BlY2lmaWVkIGJ5IExQRkNfQlVGX1JJTkcwIGlzCisgKiBzZXQgdG8gNjQgSU9DQnMuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNjZXNzIChjdXJyZW50bHkgYWx3YXlzIHN1Y2Nlc3MpCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3Bvc3RfcmN2X2J1ZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xMzA3LDExICsxNDU4LDEzIEBACiAKICNkZWZpbmUgUyhOLFYpICgoKFYpPDwoTikpfCgoVik+PigzMi0oTikpKSkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIGxwZmNfc2hhX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfc2hhX2luaXQ6IFNldCB1cCBpbml0aWFsIGFycmF5IG9mIGhhc2ggdGFibGUgZW50cmllcy4KKyAqIEBIYXNoUmVzdWx0UG9pbnRlcjogcG9pbnRlciB0byBhbiBhcnJheSBhcyBoYXNoIHRhYmxlLgorICoKKyAqIFRoaXMgcm91dGluZSBzZXRzIHVwIHRoZSBpbml0aWFsIHZhbHVlcyB0byB0aGUgYXJyYXkgb2YgaGFzaCB0YWJsZSBlbnRyaWVzCisgKiBmb3IgdGhlIExDIEhCQXMuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zaGFfaW5pdCh1aW50MzJfdCAqIEhhc2hSZXN1bHRQb2ludGVyKQogewpAQCAtMTMyMiwxMSArMTQ3NSwxNiBAQAogCUhhc2hSZXN1bHRQb2ludGVyWzRdID0gMHhDM0QyRTFGMDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIGxwZmNfc2hhX2l0ZXJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfc2hhX2l0ZXJhdGU6IEl0ZXJhdGUgaW5pdGlhbCBoYXNoIHRhYmxlIHdpdGggdGhlIHdvcmtpbmcgaGFzaCB0YWJsZS4KKyAqIEBIYXNoUmVzdWx0UG9pbnRlcjogcG9pbnRlciB0byBhbiBpbml0aWFsL3Jlc3VsdCBoYXNoIHRhYmxlLgorICogQEhhc2hXb3JraW5nUG9pbnRlcjogcG9pbnRlciB0byBhbiB3b3JraW5nIGhhc2ggdGFibGUuCisgKgorICogVGhpcyByb3V0aW5lIGl0ZXJhdGVzIGFuIGluaXRpYWwgaGFzaCB0YWJsZSBwb2ludGVkIGJ5IEBIYXNoUmVzdWx0UG9pbnRlcgorICogd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIHdvcmtpbmcgaGFzaCB0YWJsZSBwb2ludGVlZCBieSBASGFzaFdvcmtpbmdQb2ludGVyLgorICogVGhlIHJlc3VsdHMgYXJlIHB1dHRpbmcgYmFjayB0byB0aGUgaW5pdGlhbCBoYXNoIHRhYmxlLCByZXR1cm5lZCB0aHJvdWdoCisgKiB0aGUgQEhhc2hSZXN1bHRQb2ludGVyIGFzIHRoZSByZXN1bHQgaGFzaCB0YWJsZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NoYV9pdGVyYXRlKHVpbnQzMl90ICogSGFzaFJlc3VsdFBvaW50ZXIsIHVpbnQzMl90ICogSGFzaFdvcmtpbmdQb2ludGVyKQogewpAQCAtMTM3NCwyMiArMTUzMiwyOSBAQAogCiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBscGZjX2NoYWxsZW5nZV9rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2NoYWxsZW5nZV9rZXk6IENyZWF0ZSBjaGFsbGVuZ2Uga2V5IGJhc2VkIG9uIFdXUE4gb2YgdGhlIEhCQS4KKyAqIEBSYW5kb21DaGFsbGVuZ2U6IHBvaW50ZXIgdG8gdGhlIGVudHJ5IG9mIGhvc3QgY2hhbGxlbmdlIHJhbmRvbSBudW1iZXIgYXJyYXkuCisgKiBASGFzaFdvcmtpbmc6IHBvaW50ZXIgdG8gdGhlIGVudHJ5IG9mIHRoZSB3b3JraW5nIGhhc2ggYXJyYXkuCisgKgorICogVGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgdGhlIHdvcmtpbmcgaGFzaCBhcnJheSByZWZlcnJlZCBieSBASGFzaFdvcmtpbmcKKyAqIGZyb20gdGhlIGNoYWxsZW5nZSByYW5kb20gbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIGhvc3QsIHJlZmVycmVkIGJ5CisgKiBAUmFuZG9tQ2hhbGxlbmdlLiBUaGUgcmVzdWx0IGlzIHB1dCBpbnRvIHRoZSBlbnRyeSBvZiB0aGUgd29ya2luZyBoYXNoCisgKiBhcnJheSBhbmQgcmV0dXJuZWQgYnkgcmVmZXJlbmNlIHRocm91Z2ggQEhhc2hXb3JraW5nLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY2hhbGxlbmdlX2tleSh1aW50MzJfdCAqIFJhbmRvbUNoYWxsZW5nZSwgdWludDMyX3QgKiBIYXNoV29ya2luZykKIHsKIAkqSGFzaFdvcmtpbmcgPSAoKlJhbmRvbUNoYWxsZW5nZSBeICpIYXNoV29ya2luZyk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBscGZjX2hiYV9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2hiYV9pbml0OiBQZXJmb3JtIHNwZWNpYWwgaGFuZGxpbmcgZm9yIExDIEhCQSBpbml0aWFsaXphdGlvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGhiYWluaXQ6IHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdW5zaWduZWQgMzItYml0IGludGVnZXJzLgorICoKKyAqIFRoaXMgcm91dGluZSBwZXJmb3JtcyB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgTEMgSEJBIGluaXRpYWxpemF0aW9uLgorICoqLwogdm9pZAogbHBmY19oYmFfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90ICpoYmFpbml0KQogewpAQCAtMTQxMiw2ICsxNTc3LDE1IEBACiAJa2ZyZWUoSGFzaFdvcmtpbmcpOwogfQogCisvKioKKyAqIGxwZmNfY2xlYW51cDogUGVyZm9ybXMgdnBvcnQgY2xlYW51cHMgYmVmb3JlIGRlbGV0aW5nIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSBjbGVhbnVwcyBiZWZvcmUgZGVsZXRpbmcgdGhlIEB2cG9ydC4KKyAqIEl0IGludm9rZXMgdGhlIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lIHRvIHBlcmZvcm0gbmVjZXNzYXJ5IHN0YXRlCisgKiB0cmFuc2l0aW9ucyBhbmQgdG8gcmVsZWFzZSB0aGUgbmRscHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBAdnBvcnQuIE5vdGUsCisgKiB0aGUgcGh5c2ljYWwgcG9ydCBpcyB0cmVhdGVkIGFzIEB2cG9ydCAwLgorICoqLwogdm9pZAogbHBmY19jbGVhbnVwKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTE0NTksMTQgKzE2MzMsNiBAQAogCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZSh2cG9ydCwgbmRscCwgTlVMTCwKIAkJCQkJICAgICBOTFBfRVZUX0RFVklDRV9STSk7CiAKLQkJLyogbmxwX3R5cGUgemVybyBpcyBub3QgZGVmaW5lZCwgbmxwX2ZsYWcgemVybyBhbHNvIG5vdCBkZWZpbmVkLAotCQkgKiBubHBfc3RhdGUgaXMgdW51c2VkLCB0aGlzIGhhcHBlbnMgd2hlbgotCQkgKiBhbiBpbml0aWF0b3IgaGFzIGxvZ2dlZAotCQkgKiBpbnRvIHVzIHNvIGNsZWFudXAgdGhpcyBuZGxwLgotCQkgKi8KLQkJaWYgKChuZGxwLT5ubHBfdHlwZSA9PSAwKSAmJiAobmRscC0+bmxwX2ZsYWcgPT0gMCkgJiYKLQkJCShuZGxwLT5ubHBfc3RhdGUgPT0gMCkpCi0JCQlscGZjX25scF9wdXQobmRscCk7CiAJfQogCiAJLyogQXQgdGhpcyBwb2ludCwgQUxMIG5kbHAncyBzaG91bGQgYmUgZ29uZQpAQCAtMTQ4Miw3ICsxNjQ4LDcgQEAKIAkJCQkJCSZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgewogCQkJCWxwZmNfcHJpbnRmX3Zsb2cobmRscC0+dnBvcnQsIEtFUk5fRVJSLAogCQkJCQkJTE9HX05PREUsCi0JCQkJCQkiMDI4MjogZGlkOngleCBuZGxwOnglcCAiCisJCQkJCQkiMDI4MiBkaWQ6eCV4IG5kbHA6eCVwICIKIAkJCQkJCSJ1c2dtYXA6eCV4IHJlZmNudDolZFxuIiwKIAkJCQkJCW5kbHAtPm5scF9ESUQsICh2b2lkICopbmRscCwKIAkJCQkJCW5kbHAtPm5scF91c2dfbWFwLApAQCAtMTQ5OCw2ICsxNjY0LDE0IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc3RvcF92cG9ydF90aW1lcnM6IFN0b3AgYWxsIHRoZSB0aW1lcnMgYXNzb2NpYXRlZCB3aXRoIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RvcHMgYWxsIHRoZSB0aW1lcnMgYXNzb2NpYXRlZCB3aXRoIGEgQHZwb3J0LiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBpbnZva2VkIGJlZm9yZSBkaXNhYmxpbmcgb3IgZGVsZXRpbmcgYSBAdnBvcnQuIE5vdGUgdGhhdCB0aGUgcGh5c2ljYWwKKyAqIHBvcnQgaXMgdHJlYXRlZCBhcyBAdnBvcnQgMC4KKyAqKi8KIHZvaWQKIGxwZmNfc3RvcF92cG9ydF90aW1lcnMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMTUwNyw2ICsxNjgxLDEzIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc3RvcF9waGJhX3RpbWVyczogU3RvcCBhbGwgdGhlIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggYW4gSEJBLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIGFsbCB0aGUgdGltZXJzIGFzc29jaWF0ZWQgd2l0aCBhIEhCQS4gVGhpcyBmdW5jdGlvbiBpcworICogaW52b2tlZCBiZWZvcmUgZWl0aGVyIHB1dHRpbmcgYSBIQkEgb2ZmbGluZSBvciB1bmxvYWRpbmcgdGhlIGRyaXZlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3N0b3BfcGhiYV90aW1lcnMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTUxNiw5ICsxNjk3LDIwIEBACiAJZGVsX3RpbWVyX3N5bmMoJnBoYmEtPmZhYnJpY19ibG9ja190aW1lcik7CiAJcGhiYS0+aGJfb3V0c3RhbmRpbmcgPSAwOwogCWRlbF90aW1lcl9zeW5jKCZwaGJhLT5oYl90bW9mdW5jKTsKKwlkZWxfdGltZXJfc3luYygmcGhiYS0+ZXJhdHRfcG9sbCk7CiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfYmxvY2tfbWdtdF9pbzogTWFyayBhIEhCQSdzIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGFzIGJsb2NrZWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWFya3MgYSBIQkEncyBtYW5hZ2VtZW50IGludGVyZmFjZSBhcyBibG9ja2VkLiBPbmNlIHRoZSBIQkEncworICogbWFuYWdlbWVudCBpbnRlcmZhY2UgaXMgbWFya2VkIGFzIGJsb2NrZWQsIGFsbCB0aGUgdXNlciBzcGFjZSBhY2Nlc3MgdG8KKyAqIHRoZSBIQkEsIHdoZXRoZXIgdGhleSBhcmUgZnJvbSBzeXNmcyBpbnRlcmZhY2Ugb3IgbGliZGZjIGludGVyZmFjZSB3aWxsCisgKiBhbGwgYmUgYmxvY2tlZC4gVGhlIEhCQSBpcyBzZXQgdG8gYmxvY2sgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIHdoZW4gdGhlCisgKiBkcml2ZXIgcHJlcGFyZXMgdGhlIEhCQSBpbnRlcmZhY2UgZm9yIG9ubGluZSBvciBvZmZsaW5lLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfYmxvY2tfbWdtdF9pbyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewpAQCAtMTUyOSw2ICsxNzIxLDE4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWcpOwogfQogCisvKioKKyAqIGxwZmNfb25saW5lOiBJbml0aWFsaXplIGFuZCBicmluZyBhIEhCQSBvbmxpbmUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaW5pdGlhbGl6ZXMgdGhlIEhCQSBhbmQgYnJpbmdzIGEgSEJBIG9ubGluZS4gRHVyaW5nIHRoaXMKKyAqIHByb2Nlc3MsIHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSBpcyBibG9ja2VkIHRvIHByZXZlbnQgdXNlciBzcGFjZSBhY2Nlc3MKKyAqIHRvIHRoZSBIQkEgaW50ZXJmZXJpbmcgd2l0aCB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjY2Vzc2Z1bAorICogICAxIC0gZmFpbGVkCisgKiovCiBpbnQKIGxwZmNfb25saW5lKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTE1NzQsNiArMTc3OCwxNyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfdW5ibG9ja19tZ210X2lvOiBNYXJrIGEgSEJBJ3MgbWFuYWdlbWVudCBpbnRlcmZhY2UgdG8gYmUgbm90IGJsb2NrZWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWFya3MgYSBIQkEncyBtYW5hZ2VtZW50IGludGVyZmFjZSBhcyBub3QgYmxvY2tlZC4gT25jZSB0aGUKKyAqIEhCQSdzIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGlzIG1hcmtlZCBhcyBub3QgYmxvY2tlZCwgYWxsIHRoZSB1c2VyIHNwYWNlCisgKiBhY2Nlc3MgdG8gdGhlIEhCQSwgd2hldGhlciB0aGV5IGFyZSBmcm9tIHN5c2ZzIGludGVyZmFjZSBvciBsaWJkZmMKKyAqIGludGVyZmFjZSB3aWxsIGJlIGFsbG93ZWQuIFRoZSBIQkEgaXMgc2V0IHRvIGJsb2NrIHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZQorICogd2hlbiB0aGUgZHJpdmVyIHByZXBhcmVzIHRoZSBIQkEgaW50ZXJmYWNlIGZvciBvbmxpbmUgb3Igb2ZmbGluZSBhbmQgdGhlbgorICogc2V0IHRvIHVuYmxvY2sgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGFmdGVyd2FyZHMuCisgKiovCiB2b2lkCiBscGZjX3VuYmxvY2tfbWdtdF9pbyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewpAQCAtMTU4NCw2ICsxNzk5LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWcpOwogfQogCisvKioKKyAqIGxwZmNfb2ZmbGluZV9wcmVwOiBQcmVwYXJlIGEgSEJBIHRvIGJlIGJyb3VnaHQgb2ZmbGluZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHByZXBhcmUgYSBIQkEgdG8gYmUgYnJvdWdodCBvZmZsaW5lLiBJdCBwZXJmb3JtcworICogdW5yZWdpc3RyYXRpb24gbG9naW4gdG8gYWxsIHRoZSBub2RlcyBvbiBhbGwgdnBvcnRzIGFuZCBmbHVzaGVzIHRoZSBtYWlsYm94CisgKiBxdWV1ZSB0byBtYWtlIGl0IHJlYWR5IHRvIGJlIGJyb3VnaHQgb2ZmbGluZS4KKyAqKi8KIHZvaWQKIGxwZmNfb2ZmbGluZV9wcmVwKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CkBAIC0xNjMzLDYgKzE4NTYsMTQgQEAKIAlscGZjX3NsaV9mbHVzaF9tYm94X3F1ZXVlKHBoYmEpOwogfQogCisvKioKKyAqIGxwZmNfb2ZmbGluZTogQnJpbmcgYSBIQkEgb2ZmbGluZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhY3R1YWxseSBicmluZ3MgYSBIQkEgb2ZmbGluZS4gSXQgc3RvcHMgYWxsIHRoZSB0aW1lcnMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgSEJBLCBicmluZ3MgZG93biB0aGUgU0xJIGxheWVyLCBhbmQgZXZlbnR1YWxseQorICogbWFya3MgdGhlIEhCQSBhcyBpbiBvZmZsaW5lIHN0YXRlIGZvciB0aGUgdXBwZXIgbGF5ZXIgcHJvdG9jb2wuCisgKiovCiB2b2lkCiBscGZjX29mZmxpbmUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTY3MCwxMiArMTkwMSwxNyBAQAogCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogRnVuY3Rpb24gbmFtZTogbHBmY19zY3NpX2ZyZWUKLSoKLSogRGVzY3JpcHRpb246IENhbGxlZCBmcm9tIGxwZmNfcGNpX3JlbW92ZV9vbmUgZnJlZSBpbnRlcm5hbCBkcml2ZXIgcmVzb3VyY2VzCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfc2NzaV9mcmVlOiBGcmVlIGFsbCB0aGUgU0NTSSBidWZmZXJzIGFuZCBJT0NCcyBmcm9tIGRyaXZlciBsaXN0cy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0byBmcmVlIGFsbCB0aGUgU0NTSSBidWZmZXJzIGFuZCBJT0NCcyBmcm9tIHRoZSBkcml2ZXIKKyAqIGxpc3QgYmFjayB0byBrZXJuZWwuIEl0IGlzIGNhbGxlZCBmcm9tIGxwZmNfcGNpX3JlbW92ZV9vbmUgdG8gZnJlZQorICogdGhlIGludGVybmFsIHJlc291cmNlcyBiZWZvcmUgdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Nlc3NmdWwgKGZvciBub3csIGl0IGFsd2F5cyByZXR1cm5zIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3Njc2lfZnJlZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xNzA0LDYgKzE5NDAsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2NyZWF0ZV9wb3J0OiBDcmVhdGUgYW4gRkMgcG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGluc3RhbmNlOiBhIHVuaXF1ZSBpbnRlZ2VyIElEIHRvIHRoaXMgRkMgcG9ydC4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY3JlYXRlcyBhIEZDIHBvcnQgZm9yIHRoZSB1cHBlciBsYXllciBwcm90b2NvbC4gVGhlIEZDIHBvcnQKKyAqIGNhbiBiZSBjcmVhdGVkIG9uIHRvcCBvZiBlaXRoZXIgYSBwaHlzaWNhbCBwb3J0IG9yIGEgdmlydHVhbCBwb3J0IHByb3ZpZGVkCisgKiBieSB0aGUgSEJBLiBUaGlzIHJvdXRpbmUgYWxzbyBhbGxvY2F0ZXMgYSBTQ1NJIGhvc3QgZGF0YSBzdHJ1Y3R1cmUgKHNob3N0KQorICogYW5kIGFzc29jaWF0ZXMgdGhlIEZDIHBvcnQgY3JlYXRlZCBiZWZvcmUgYWRkaW5nIHRoZSBzaG9zdCBpbnRvIHRoZSBTQ1NJCisgKiBsYXllci4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgQHZwb3J0IC0gcG9pbnRlciB0byB0aGUgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiAgIE5VTEwgLSBwb3J0IGNyZWF0ZSBmYWlsZWQuCisgKiovCiBzdHJ1Y3QgbHBmY192cG9ydCAqCiBscGZjX2NyZWF0ZV9wb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IGluc3RhbmNlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xNzc3LDYgKzIwMjksMTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBkZXN0cm95X3BvcnQ6IERlc3Ryb3kgYW4gRkMgcG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhbiBscGZjIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBkZXN0cm95cyBhIEZDIHBvcnQgZnJvbSB0aGUgdXBwZXIgbGF5ZXIgcHJvdG9jb2wuIEFsbCB0aGUKKyAqIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBvcnQgYXJlIHJlbGVhc2VkLgorICoqLwogdm9pZAogZGVzdHJveV9wb3J0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTE3OTcsNiArMjA1NiwxNiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2dldF9pbnN0YW5jZTogR2V0IGEgdW5pcXVlIGludGVnZXIgSUQuCisgKgorICogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBhIHVuaXF1ZSBpbnRlZ2VyIElEIGZyb20gbHBmY19oYmFfaW5kZXggcG9vbC4gSXQKKyAqIHVzZXMgdGhlIGtlcm5lbCBpZHIgZmFjaWxpdHkgdG8gcGVyZm9ybSB0aGUgdGFzay4KKyAqCisgKiBSZXR1cm4gY29kZXM6CisgKiAgIGluc3RhbmNlIC0gYSB1bmlxdWUgaW50ZWdlciBJRCBhbGxvY2F0ZWQgYXMgdGhlIG5ldyBpbnN0YW5jZS4KKyAqICAgLTEgLSBscGZjIGdldCBpbnN0YW5jZSBmYWlsZWQuCisgKiovCiBpbnQKIGxwZmNfZ2V0X2luc3RhbmNlKHZvaWQpCiB7CkBAIC0xODEwLDExICsyMDc5LDIxIEBACiAJcmV0dXJuIGluc3RhbmNlOwogfQogCi0vKgotICogTm90ZTogdGhlcmUgaXMgbm8gc2Nhbl9zdGFydCBmdW5jdGlvbiBhcyBhZGFwdGVyIGluaXRpYWxpemF0aW9uCi0gKiB3aWxsIGhhdmUgYXN5bmNocm9ub3VzbHkga2lja2VkIG9mZiB0aGUgbGluayBpbml0aWFsaXphdGlvbi4KLSAqLwotCisvKioKKyAqIGxwZmNfc2Nhbl9maW5pc2hlZDogbWV0aG9kIGZvciBTQ1NJIGxheWVyIHRvIGRldGVjdCB3aGV0aGVyIHNjYW4gaXMgZG9uZS4KKyAqIEBzaG9zdDogcG9pbnRlciB0byBTQ1NJIGhvc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdGltZTogZWxhcHNlZCB0aW1lIG9mIHRoZSBzY2FuIGluIGppZmZpZXMuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgU0NTSSBsYXllciB3aXRoIGEgU0NTSSBob3N0IHRvIGRldGVybWluZQorICogd2hldGhlciB0aGUgc2NhbiBob3N0IGlzIGZpbmlzaGVkLgorICoKKyAqIE5vdGU6IHRoZXJlIGlzIG5vIHNjYW5fc3RhcnQgZnVuY3Rpb24gYXMgYWRhcHRlciBpbml0aWFsaXphdGlvbiB3aWxsIGhhdmUKKyAqIGFzeW5jaHJvbm91c2x5IGtpY2tlZCBvZmYgdGhlIGxpbmsgaW5pdGlhbGl6YXRpb24uCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBTQ1NJIGhvc3Qgc2NhbiBpcyBub3Qgb3ZlciB5ZXQuCisgKiAgIDEgLSBTQ1NJIGhvc3Qgc2NhbiBpcyBvdmVyLgorICoqLwogaW50IGxwZmNfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdW5zaWduZWQgbG9uZyB0aW1lKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CkBAIC0xODU4LDYgKzIxMzcsMTMgQEAKIAlyZXR1cm4gc3RhdDsKIH0KIAorLyoqCisgKiBscGZjX2hvc3RfYXR0cmliX2luaXQ6IEluaXRpYWxpemUgU0NTSSBob3N0IGF0dHJpYnV0ZXMgb24gYSBGQyBwb3J0LgorICogQHNob3N0OiBwb2ludGVyIHRvIFNDU0kgaG9zdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaW5pdGlhbGl6ZXMgYSBnaXZlbiBTQ1NJIGhvc3QgYXR0cmlidXRlcyBvbiBhIEZDIHBvcnQuIFRoZQorICogU0NTSSBob3N0IGNhbiBiZSBlaXRoZXIgb24gdG9wIG9mIGEgcGh5c2ljYWwgcG9ydCBvciBhIHZpcnR1YWwgcG9ydC4KKyAqKi8KIHZvaWQgbHBmY19ob3N0X2F0dHJpYl9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CkBAIC0xOTA2LDQyICsyMTkyLDE1NyBAQAogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIH0KIAorLyoqCisgKiBscGZjX2VuYWJsZV9tc2l4OiBFbmFibGUgTVNJLVggaW50ZXJydXB0IG1vZGUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBlbmFibGUgdGhlIE1TSS1YIGludGVycnVwdCB2ZWN0b3JzLiBUaGUga2VybmVsCisgKiBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaXgoKSBpcyBjYWxsZWQgdG8gZW5hYmxlIHRoZSBNU0ktWCB2ZWN0b3JzLiBOb3RlIHRoYXQKKyAqIHBjaV9lbmFibGVfbXNpeCgpLCBvbmNlIGludm9rZWQsIGVuYWJsZXMgZWl0aGVyIGFsbCBvciBub3RoaW5nLCBkZXBlbmRpbmcKKyAqIG9uIHRoZSBjdXJyZW50IGF2YWlsYWJpbGl0eSBvZiBQQ0kgdmVjdG9yIHJlc291cmNlcy4gVGhlIGRldmljZSBkcml2ZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSBpbmRpdmlkdWFsIHJlcXVlc3RfaXJxKCkgdG8gcmVnaXN0ZXIgZWFjaCBNU0ktWAorICogdmVjdG9yIHdpdGggYSBpbnRlcnJ1cHQgaGFuZGxlciwgd2hpY2ggaXMgZG9uZSBpbiB0aGlzIGZ1bmN0aW9uLiBOb3RlIHRoYXQKKyAqIGxhdGVyIHdoZW4gZGV2aWNlIGlzIHVubG9hZGluZywgdGhlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKQorICogb24gYWxsIE1TSS1YIHZlY3RvcnMgaXQgaGFzIGRvbmUgcmVxdWVzdF9pcnEoKSBvbiBiZWZvcmUgY2FsbGluZworICogcGNpX2Rpc2FibGVfbXNpeCgpLiBGYWlsdXJlIHRvIGRvIHNvIHJlc3VsdHMgaW4gYSBCVUdfT04oKSBhbmQgYSBkZXZpY2UKKyAqIHdpbGwgYmUgbGVmdCB3aXRoIE1TSS1YIGVuYWJsZWQgYW5kIGxlYWtzIGl0cyB2ZWN0b3JzLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjZXNzZnVsCisgKiAgIG90aGVyIHZhbHVlcyAtIGVycm9yCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2VuYWJsZV9tc2l4KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlpbnQgZXJyb3I7CisJaW50IHJjLCBpOworCUxQRkNfTUJPWFFfdCAqcG1iOwogCi0JcGhiYS0+bXNpeF9lbnRyaWVzWzBdLmVudHJ5ID0gMDsKLQlwaGJhLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gMDsKKwkvKiBTZXQgdXAgTVNJLVggbXVsdGktbWVzc2FnZSB2ZWN0b3JzICovCisJZm9yIChpID0gMDsgaSA8IExQRkNfTVNJWF9WRUNUT1JTOyBpKyspCisJCXBoYmEtPm1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CiAKLQllcnJvciA9IHBjaV9lbmFibGVfbXNpeChwaGJhLT5wY2lkZXYsIHBoYmEtPm1zaXhfZW50cmllcywKKwkvKiBDb25maWd1cmUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KKwlyYyA9IHBjaV9lbmFibGVfbXNpeChwaGJhLT5wY2lkZXYsIHBoYmEtPm1zaXhfZW50cmllcywKIAkJCQlBUlJBWV9TSVpFKHBoYmEtPm1zaXhfZW50cmllcykpOwotCWlmIChlcnJvcikgeworCWlmIChyYykgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKIAkJCQkiMDQyMCBFbmFibGUgTVNJLVggZmFpbGVkICglZCksIGNvbnRpbnVpbmcgIgotCQkJCSJ3aXRoIE1TSVxuIiwgZXJyb3IpOwotCQlwY2lfZGlzYWJsZV9tc2l4KHBoYmEtPnBjaWRldik7Ci0JCXJldHVybiBlcnJvcjsKKwkJCQkid2l0aCBNU0lcbiIsIHJjKTsKKwkJZ290byBtc2lfZmFpbF9vdXQ7CisJfSBlbHNlCisJCWZvciAoaSA9IDA7IGkgPCBMUEZDX01TSVhfVkVDVE9SUzsgaSsrKQorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJCSIwNDc3IE1TSS1YIGVudHJ5WyVkXTogdmVjdG9yPXgleCAiCisJCQkJCSJtZXNzYWdlPSVkXG4iLCBpLAorCQkJCQlwaGJhLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yLAorCQkJCQlwaGJhLT5tc2l4X2VudHJpZXNbaV0uZW50cnkpOworCS8qCisJICogQXNzaWduIE1TSS1YIHZlY3RvcnMgdG8gaW50ZXJydXB0IGhhbmRsZXJzCisJICovCisKKwkvKiB2ZWN0b3ItMCBpcyBhc3NvY2lhdGVkIHRvIHNsb3ctcGF0aCBoYW5kbGVyICovCisJcmMgPSByZXF1ZXN0X2lycShwaGJhLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yLCAmbHBmY19zcF9pbnRyX2hhbmRsZXIsCisJCQkgSVJRRl9TSEFSRUQsIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRSwgcGhiYSk7CisJaWYgKHJjKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjA0MjEgTVNJLVggc2xvdy1wYXRoIHJlcXVlc3RfaXJxIGZhaWxlZCAiCisJCQkJIiglZCksIGNvbnRpbnVpbmcgd2l0aCBNU0lcbiIsIHJjKTsKKwkJZ290byBtc2lfZmFpbF9vdXQ7CiAJfQogCi0JZXJyb3IgPQlyZXF1ZXN0X2lycShwaGJhLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yLCBscGZjX2ludHJfaGFuZGxlciwgMCwKLQkJCSAgICBMUEZDX0RSSVZFUl9OQU1FLCBwaGJhKTsKLQlpZiAoZXJyb3IpIHsKKwkvKiB2ZWN0b3ItMSBpcyBhc3NvY2lhdGVkIHRvIGZhc3QtcGF0aCBoYW5kbGVyICovCisJcmMgPSByZXF1ZXN0X2lycShwaGJhLT5tc2l4X2VudHJpZXNbMV0udmVjdG9yLCAmbHBmY19mcF9pbnRyX2hhbmRsZXIsCisJCQkgSVJRRl9TSEFSRUQsIExQRkNfRlBfRFJJVkVSX0hBTkRMRVJfTkFNRSwgcGhiYSk7CisKKwlpZiAocmMpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMDQyMSBNU0ktWCByZXF1ZXN0X2lycSBmYWlsZWQgKCVkKSwgIgotCQkJCSJjb250aW51aW5nIHdpdGggTVNJXG4iLCBlcnJvcik7Ci0JCXBjaV9kaXNhYmxlX21zaXgocGhiYS0+cGNpZGV2KTsKKwkJCQkiMDQyOSBNU0ktWCBmYXN0LXBhdGggcmVxdWVzdF9pcnEgZmFpbGVkICIKKwkJCQkiKCVkKSwgY29udGludWluZyB3aXRoIE1TSVxuIiwgcmMpOworCQlnb3RvIGlycV9mYWlsX291dDsKIAl9Ci0JcmV0dXJuIGVycm9yOworCisJLyoKKwkgKiBDb25maWd1cmUgSEJBIE1TSS1YIGF0dGVudGlvbiBjb25kaXRpb25zIHRvIG1lc3NhZ2VzCisJICovCisJcG1iID0gKExQRkNfTUJPWFFfdCAqKSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCisJaWYgKCFwbWIpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCSIwNDc0IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlzc3VpbmcgIgorCQkJCSJNQk9YX0NPTkZJR19NU0kgY29tbWFuZFxuIik7CisJCWdvdG8gbWVtX2ZhaWxfb3V0OworCX0KKwlyYyA9IGxwZmNfY29uZmlnX21zaShwaGJhLCBwbWIpOworCWlmIChyYykKKwkJZ290byBtYnhfZmFpbF9vdXQ7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX1BPTEwpOworCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YLAorCQkJCSIwMzUxIENvbmZpZyBNU0kgbWFpbGJveCBjb21tYW5kIGZhaWxlZCwgIgorCQkJCSJtYnhDbWQgeCV4LCBtYnhTdGF0dXMgeCV4XG4iLAorCQkJCXBtYi0+bWIubWJ4Q29tbWFuZCwgcG1iLT5tYi5tYnhTdGF0dXMpOworCQlnb3RvIG1ieF9mYWlsX291dDsKKwl9CisKKwkvKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIG1haWxib3ggY29tbWFuZCAqLworCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCXJldHVybiByYzsKKworbWJ4X2ZhaWxfb3V0OgorCS8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgbWFpbGJveCBjb21tYW5kICovCisJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisKK21lbV9mYWlsX291dDoKKwkvKiBmcmVlIHRoZSBpcnEgYWxyZWFkeSByZXF1ZXN0ZWQgKi8KKwlmcmVlX2lycShwaGJhLT5tc2l4X2VudHJpZXNbMV0udmVjdG9yLCBwaGJhKTsKKworaXJxX2ZhaWxfb3V0OgorCS8qIGZyZWUgdGhlIGlycSBhbHJlYWR5IHJlcXVlc3RlZCAqLworCWZyZWVfaXJxKHBoYmEtPm1zaXhfZW50cmllc1swXS52ZWN0b3IsIHBoYmEpOworCittc2lfZmFpbF9vdXQ6CisJLyogVW5jb25maWd1cmUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KKwlwY2lfZGlzYWJsZV9tc2l4KHBoYmEtPnBjaWRldik7CisJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZGlzYWJsZV9tc2l4OiBEaXNhYmxlIE1TSS1YIGludGVycnVwdCBtb2RlLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gcmVsZWFzZSB0aGUgTVNJLVggdmVjdG9ycyBhbmQgdGhlbiBkaXNhYmxlIHRoZQorICogTVNJLVggaW50ZXJydXB0IG1vZGUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19kaXNhYmxlX21zaXgoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCWZyZWVfaXJxKHBoYmEtPm1zaXhfZW50cmllc1swXS52ZWN0b3IsIHBoYmEpOworCWludCBpOworCisJLyogRnJlZSB1cCBNU0ktWCBtdWx0aS1tZXNzYWdlIHZlY3RvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NU0lYX1ZFQ1RPUlM7IGkrKykKKwkJZnJlZV9pcnEocGhiYS0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvciwgcGhiYSk7CisJLyogRGlzYWJsZSBNU0ktWCAqLwogCXBjaV9kaXNhYmxlX21zaXgocGhiYS0+cGNpZGV2KTsKIH0KIAorLyoqCisgKiBscGZjX3BjaV9wcm9iZV9vbmU6IGxwZmMgUENJIHByb2JlIGZ1bmMgdG8gcmVnaXN0ZXIgZGV2aWNlIHRvIFBDSSBzdWJzeXN0ZW0uCisgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBAcGlkOiBwb2ludGVyIHRvIFBDSSBkZXZpY2UgaWRlbnRpZmllcgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0byBiZSByZWdpc3RlcmVkIHRvIHRoZSBrZXJuZWwncyBQQ0kgc3Vic3lzdGVtLiBXaGVuIGFuCisgKiBFbXVsZXggSEJBIGlzIHByZXNlbnRlZCBpbiBQQ0kgYnVzLCB0aGUga2VybmVsIFBDSSBzdWJzeXN0ZW0gbG9va3MgYXQKKyAqIFBDSSBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gb2YgdGhlIGRldmljZSBhbmQgZHJpdmVyIHRvIHNlZSBpZiB0aGUKKyAqIGRyaXZlciBzdGF0ZSB0aGF0IGl0IGNhbiBzdXBwb3J0IHRoaXMga2luZCBvZiBkZXZpY2UuIElmIHRoZSBtYXRjaCBpcworICogc3VjY2Vzc2Z1bCwgdGhlIGRyaXZlciBjb3JlIGludm9rZXMgdGhpcyByb3V0aW5lLiBJZiB0aGlzIHJvdXRpbmUKKyAqIGRldGVybWluZXMgaXQgY2FuIGNsYWltIHRoZSBIQkEsIGl0IGRvZXMgYWxsIHRoZSBpbml0aWFsaXphdGlvbiB0aGF0IGl0CisgKiBuZWVkcyB0byBkbyB0byBoYW5kbGUgdGhlIEhCQSBwcm9wZXJseS4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gZHJpdmVyIGNhbiBjbGFpbSB0aGUgZGV2aWNlCisgKiAgIG5lZ2F0aXZlIHZhbHVlIC0gZHJpdmVyIGNhbiBub3QgY2xhaW0gdGhlIGRldmljZQorICoqLwogc3RhdGljIGludCBfX2RldmluaXQKIGxwZmNfcGNpX3Byb2JlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBpZCkKIHsKQEAgLTE5NTYsNiArMjM1Nyw3IEBACiAJaW50ICBpLCBoYnFfY291bnQ7CiAJdWludDE2X3QgaW90YWc7CiAJaW50IGJhcnMgPSBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0pOworCXN0cnVjdCBscGZjX2FkYXB0ZXJfZXZlbnRfaGVhZGVyIGFkYXB0ZXJfZXZlbnQ7CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKQogCQlnb3RvIG91dDsKQEAgLTE5NjYsNiArMjM2OCw3IEBACiAJaWYgKCFwaGJhKQogCQlnb3RvIG91dF9yZWxlYXNlX3JlZ2lvbnM7CiAKKwlhdG9taWNfc2V0KCZwaGJhLT5mYXN0X2V2ZW50X2NvdW50LCAwKTsKIAlzcGluX2xvY2tfaW5pdCgmcGhiYS0+aGJhbG9jayk7CiAKIAkvKiBJbml0aWFsaXplIG5kbHAgbWFuYWdlbWVudCBzcGlubG9jayAqLwpAQCAtMTk3OCw2ICsyMzgxLDcgQEAKIAkJZ290byBvdXRfZnJlZV9waGJhOwogCiAJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPnBvcnRfbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGhiYS0+d2FpdF80X21sb19tX3EpOwogCS8qCiAJICogR2V0IGFsbCB0aGUgbW9kdWxlIHBhcmFtcyBmb3IgY29uZmlndXJpbmcgdGhpcyBob3N0IGFuZCB0aGVuCiAJICogZXN0YWJsaXNoIHRoZSBob3N0LgpAQCAtMjAwMCw2ICsyNDA0LDkgQEAKIAlpbml0X3RpbWVyKCZwaGJhLT5mYWJyaWNfYmxvY2tfdGltZXIpOwogCXBoYmEtPmZhYnJpY19ibG9ja190aW1lci5mdW5jdGlvbiA9IGxwZmNfZmFicmljX2Jsb2NrX3RpbWVvdXQ7CiAJcGhiYS0+ZmFicmljX2Jsb2NrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGhiYTsKKwlpbml0X3RpbWVyKCZwaGJhLT5lcmF0dF9wb2xsKTsKKwlwaGJhLT5lcmF0dF9wb2xsLmZ1bmN0aW9uID0gbHBmY19wb2xsX2VyYXR0OworCXBoYmEtPmVyYXR0X3BvbGwuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwaGJhOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJcGNpX3RyeV9zZXRfbXdpKHBkZXYpOwpAQCAtMjAxOSw3ICsyNDI2LDcgQEAKIAliYXIybWFwX2xlbiAgICAgICAgPSBwY2lfcmVzb3VyY2VfbGVuKHBoYmEtPnBjaWRldiwgMik7CiAKIAkvKiBNYXAgSEJBIFNMSU0gdG8gYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLiAqLwotCXBoYmEtPnNsaW1fbWVtbWFwX3AgICAgICA9IGlvcmVtYXAocGhiYS0+cGNpX2JhcjBfbWFwLCBiYXIwbWFwX2xlbik7CisJcGhiYS0+c2xpbV9tZW1tYXBfcCA9IGlvcmVtYXAocGhiYS0+cGNpX2JhcjBfbWFwLCBiYXIwbWFwX2xlbik7CiAJaWYgKCFwaGJhLT5zbGltX21lbW1hcF9wKSB7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKQEAgLTIwMzcsMTIgKzI0NDQsMTggQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIFNMSS0yIHN0cnVjdHVyZXMgKi8KLQlwaGJhLT5zbGltMnAgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBoYmEtPnBjaWRldi0+ZGV2LCBTTEkyX1NMSU1fU0laRSwKLQkJCQkJICAmcGhiYS0+c2xpbTJwX21hcHBpbmcsIEdGUF9LRVJORUwpOwotCWlmICghcGhiYS0+c2xpbTJwKQorCXBoYmEtPnNsaW0ycC52aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwaGJhLT5wY2lkZXYtPmRldiwKKwkJCQkJICAgICAgIFNMSTJfU0xJTV9TSVpFLAorCQkJCQkgICAgICAgJnBoYmEtPnNsaW0ycC5waHlzLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5zbGltMnAudmlydCkKIAkJZ290byBvdXRfaW91bm1hcDsKIAotCW1lbXNldChwaGJhLT5zbGltMnAsIDAsIFNMSTJfU0xJTV9TSVpFKTsKKwltZW1zZXQocGhiYS0+c2xpbTJwLnZpcnQsIDAsIFNMSTJfU0xJTV9TSVpFKTsKKwlwaGJhLT5tYm94ID0gcGhiYS0+c2xpbTJwLnZpcnQgKyBvZmZzZXRvZihzdHJ1Y3QgbHBmY19zbGkyX3NsaW0sIG1ieCk7CisJcGhiYS0+cGNiID0gKHBoYmEtPnNsaW0ycC52aXJ0ICsgb2Zmc2V0b2Yoc3RydWN0IGxwZmNfc2xpMl9zbGltLCBwY2IpKTsKKwlwaGJhLT5JT0NCcyA9IChwaGJhLT5zbGltMnAudmlydCArCisJCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgbHBmY19zbGkyX3NsaW0sIElPQ0JzKSk7CiAKIAlwaGJhLT5oYnFzbGltcC52aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwaGJhLT5wY2lkZXYtPmRldiwKIAkJCQkJCSBscGZjX3NsaV9oYnFfc2l6ZSgpLApAQCAtMjExMSw3ICsyNTI0LDcgQEAKIAlwaGJhLT5mY19hcmJ0b3YgPSBGRl9ERUZfQVJCVE9WOwogCiAJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPndvcmtfbGlzdCk7Ci0JcGhiYS0+d29ya19oYV9tYXNrID0gKEhBX0VSQVRUfEhBX01CQVRUfEhBX0xBVFQpOworCXBoYmEtPndvcmtfaGFfbWFzayA9IChIQV9FUkFUVCB8IEhBX01CQVRUIHwgSEFfTEFUVCk7CiAJcGhiYS0+d29ya19oYV9tYXNrIHw9IChIQV9SWE1BU0sgPDwgKExQRkNfRUxTX1JJTkcgKiA0KSk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSB3YWl0IHF1ZXVlIGhlYWQgZm9yIHRoZSBrZXJuZWwgdGhyZWFkICovCkBAIC0yMTQ2LDIxICsyNTU5LDQyIEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHNob3N0KTsKIAlwaGJhLT5pbnRyX3R5cGUgPSBOT05FOwogCisJcGhiYS0+TUJzbGltYWRkciA9IHBoYmEtPnNsaW1fbWVtbWFwX3A7CisJcGhiYS0+SEFyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSEFfUkVHX09GRlNFVDsKKwlwaGJhLT5DQXJlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBDQV9SRUdfT0ZGU0VUOworCXBoYmEtPkhTcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhTX1JFR19PRkZTRVQ7CisJcGhiYS0+SENyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSENfUkVHX09GRlNFVDsKKworCS8qIENvbmZpZ3VyZSBhbmQgZW5hYmxlIGludGVycnVwdCAqLwogCWlmIChwaGJhLT5jZmdfdXNlX21zaSA9PSAyKSB7Ci0JCWVycm9yID0gbHBmY19lbmFibGVfbXNpeChwaGJhKTsKLQkJaWYgKCFlcnJvcikKLQkJCXBoYmEtPmludHJfdHlwZSA9IE1TSVg7CisJCS8qIE5lZWQgdG8gaXNzdWUgY29uZl9wb3J0IG1ib3ggY21kIGJlZm9yZSBjb25mX21zaSBtYm94IGNtZCAqLworCQllcnJvciA9IGxwZmNfc2xpX2NvbmZpZ19wb3J0KHBoYmEsIDMpOworCQlpZiAoZXJyb3IpCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkiMDQyNyBGaXJtd2FyZSBub3QgY2FwYWJsZSBvZiBTTEkgMyBtb2RlLlxuIik7CisJCWVsc2UgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJIjA0MjYgRmlybXdhcmUgY2FwYWJsZSBvZiBTTEkgMyBtb2RlLlxuIik7CisJCQkvKiBOb3csIHRyeSB0byBlbmFibGUgTVNJLVggaW50ZXJydXB0IG1vZGUgKi8KKwkJCWVycm9yID0gbHBmY19lbmFibGVfbXNpeChwaGJhKTsKKwkJCWlmICghZXJyb3IpIHsKKwkJCQlwaGJhLT5pbnRyX3R5cGUgPSBNU0lYOworCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCQkJIjA0MzAgZW5hYmxlIE1TSS1YIG1vZGUuXG4iKTsKKwkJCX0KKwkJfQogCX0KIAogCS8qIEZhbGxiYWNrIHRvIE1TSSBpZiBNU0ktWCBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KIAlpZiAocGhiYS0+Y2ZnX3VzZV9tc2kgPj0gMSAmJiBwaGJhLT5pbnRyX3R5cGUgPT0gTk9ORSkgewogCQlyZXR2YWwgPSBwY2lfZW5hYmxlX21zaShwaGJhLT5wY2lkZXYpOwotCQlpZiAoIXJldHZhbCkKKwkJaWYgKCFyZXR2YWwpIHsKIAkJCXBoYmEtPmludHJfdHlwZSA9IE1TSTsKLQkJZWxzZQogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCi0JCQkJCSIwNDUyIEVuYWJsZSBNU0kgZmFpbGVkLCBjb250aW51aW5nICIKLQkJCQkJIndpdGggSVJRXG4iKTsKKwkJCQkJIjA0NzMgZW5hYmxlIE1TSSBtb2RlLlxuIik7CisJCX0gZWxzZQorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJCSIwNDUyIGVuYWJsZSBJUlEgbW9kZS5cbiIpOwogCX0KIAogCS8qIE1TSS1YIGlzIHRoZSBvbmx5IGNhc2UgdGhlIGRvZXNuJ3QgbmVlZCB0byBjYWxsIHJlcXVlc3RfaXJxICovCkBAIC0yMTc2LDE4ICsyNjEwLDE2IEBACiAJCQlwaGJhLT5pbnRyX3R5cGUgPSBJTlR4OwogCX0KIAotCXBoYmEtPk1Cc2xpbWFkZHIgPSBwaGJhLT5zbGltX21lbW1hcF9wOwotCXBoYmEtPkhBcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhBX1JFR19PRkZTRVQ7Ci0JcGhiYS0+Q0FyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgQ0FfUkVHX09GRlNFVDsKLQlwaGJhLT5IU3JlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBIU19SRUdfT0ZGU0VUOwotCXBoYmEtPkhDcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhDX1JFR19PRkZTRVQ7Ci0KIAlpZiAobHBmY19hbGxvY19zeXNmc19hdHRyKHZwb3J0KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCSIxNDc2IEZhaWxlZCB0byBhbGxvY2F0ZSBzeXNmcyBhdHRyXG4iKTsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX2lycTsKIAl9CiAKIAlpZiAobHBmY19zbGlfaGJhX3NldHVwKHBoYmEpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjE0NzcgRmFpbGVkIHRvIHNldCB1cCBoYmFcbiIpOwogCQllcnJvciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3JlbW92ZV9kZXZpY2U7CiAJfQpAQCAtMjIwNiw2ICsyNjM4LDE2IEBACiAJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl9CiAKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCSIwNDI4IFBlcmZvcm0gU0NTSSBzY2FuXG4iKTsKKwkvKiBTZW5kIGJvYXJkIGFycml2YWwgZXZlbnQgdG8gdXBwZXIgbGF5ZXIgKi8KKwlhZGFwdGVyX2V2ZW50LmV2ZW50X3R5cGUgPSBGQ19SRUdfQURBUFRFUl9FVkVOVDsKKwlhZGFwdGVyX2V2ZW50LnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9BUlJJVkFMOworCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsIGZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJc2l6ZW9mKGFkYXB0ZXJfZXZlbnQpLAorCQkoY2hhciAqKSAmYWRhcHRlcl9ldmVudCwKKwkJU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CisKIAlzY3NpX3NjYW5faG9zdChzaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTIyMzgsMTEgKzI2ODAsMTEgQEAKIAl9CiAJbHBmY19tZW1fZnJlZShwaGJhKTsKIG91dF9mcmVlX2hicXNsaW1wOgotCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGxwZmNfc2xpX2hicV9zaXplKCksIHBoYmEtPmhicXNsaW1wLnZpcnQsCi0JCQkgIHBoYmEtPmhicXNsaW1wLnBoeXMpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGxwZmNfc2xpX2hicV9zaXplKCksCisJCQkgIHBoYmEtPmhicXNsaW1wLnZpcnQsIHBoYmEtPmhicXNsaW1wLnBoeXMpOwogb3V0X2ZyZWVfc2xpbToKLQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBTTEkyX1NMSU1fU0laRSwgcGhiYS0+c2xpbTJwLAotCQkJCQkJCXBoYmEtPnNsaW0ycF9tYXBwaW5nKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBTTEkyX1NMSU1fU0laRSwKKwkJCSAgcGhiYS0+c2xpbTJwLnZpcnQsIHBoYmEtPnNsaW0ycC5waHlzKTsKIG91dF9pb3VubWFwOgogCWlvdW5tYXAocGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wKTsKIG91dF9pb3VubWFwX3NsaW06CkBAIC0yMjYyLDYgKzI3MDQsMTQgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qKgorICogbHBmY19wY2lfcmVtb3ZlX29uZTogbHBmYyBQQ0kgZnVuYyB0byB1bnJlZ2lzdGVyIGRldmljZSBmcm9tIFBDSSBzdWJzeXN0ZW0uCisgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRvIGJlIHJlZ2lzdGVyZWQgdG8gdGhlIGtlcm5lbCdzIFBDSSBzdWJzeXN0ZW0uIFdoZW4gYW4KKyAqIEVtdWxleCBIQkEgaXMgcmVtb3ZlZCBmcm9tIFBDSSBidXMuIEl0IHBlcmZvcm0gYWxsIHRoZSBuZWNlc3NhcnkgY2xlYW51cAorICogZm9yIHRoZSBIQkEgZGV2aWNlIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgUENJIHN1YnN5c3RlbSBwcm9wZXJseS4KKyAqKi8KIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdAogbHBmY19wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTIzMTYsMTIgKzI3NjYsMTIgQEAKIAlscGZjX3Njc2lfZnJlZShwaGJhKTsKIAlscGZjX21lbV9mcmVlKHBoYmEpOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgbHBmY19zbGlfaGJxX3NpemUoKSwgcGhiYS0+aGJxc2xpbXAudmlydCwKLQkJCSAgcGhiYS0+aGJxc2xpbXAucGh5cyk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgbHBmY19zbGlfaGJxX3NpemUoKSwKKwkJCSAgcGhiYS0+aGJxc2xpbXAudmlydCwgcGhiYS0+aGJxc2xpbXAucGh5cyk7CiAKIAkvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggU0xJMiBpbnRlcmZhY2UgKi8KIAlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBTTEkyX1NMSU1fU0laRSwKLQkJCSAgcGhiYS0+c2xpbTJwLCBwaGJhLT5zbGltMnBfbWFwcGluZyk7CisJCQkgIHBoYmEtPnNsaW0ycC52aXJ0LCBwaGJhLT5zbGltMnAucGh5cyk7CiAKIAkvKiB1bm1hcCBhZGFwdGVyIFNMSU0gYW5kIENvbnRyb2wgUmVnaXN0ZXJzICovCiAJaW91bm1hcChwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3ApOwpAQCAtMjMzNiwxMyArMjc4NiwyMSBAQAogfQogCiAvKioKLSAqIGxwZmNfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKLSAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKLSAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lZWN0aW9uIHN0YXRlCisgKiBscGZjX2lvX2Vycm9yX2RldGVjdGVkOiBEcml2ZXIgbWV0aG9kIGZvciBoYW5kbGluZyBQQ0kgSS9PIGVycm9yIGRldGVjdGVkLgorICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZS4KKyAqIEBzdGF0ZTogdGhlIGN1cnJlbnQgUENJIGNvbm5lY3Rpb24gc3RhdGUuCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZwotICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuCi0gKi8KKyAqIFRoaXMgcm91dGluZSBpcyByZWdpc3RlcmVkIHRvIHRoZSBQQ0kgc3Vic3lzdGVtIGZvciBlcnJvciBoYW5kbGluZy4gVGhpcworICogZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCwgaXQgd2lsbAorICogbmVlZCB0byBzdG9wIGFsbCB0aGUgSS9PcyBhbmQgaW50ZXJydXB0KHMpIHRvIHRoZSBkZXZpY2UuIE9uY2UgdGhhdCBpcworICogZG9uZSwgaXQgd2lsbCByZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCBmb3IgdGhlIFBDSSBzdWJzeXN0ZW0gdG8KKyAqIHBlcmZvcm0gcHJvcGVyIHJlY292ZXJ5IGFzIGRlc2lyZWQuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQgLSBuZWVkIHRvIHJlc2V0IGJlZm9yZSByZWNvdmVyeQorICogICBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUIC0gZGV2aWNlIGNvdWxkIG5vdCBiZSByZWNvdmVyZWQKKyAqKi8KIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGxwZmNfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKQEAgLTIzNTEsOCArMjgwOSwxNSBAQAogCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgICpwcmluZzsKIAotCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCSIwNDcyIFBDSSBjaGFubmVsIEkvTyBwZXJtYW5lbnQgZmFpbHVyZVxuIik7CisJCS8qIEJsb2NrIGFsbCBTQ1NJIGRldmljZXMnIEkvT3Mgb24gdGhlIGhvc3QgKi8KKwkJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKKwkJLyogQ2xlYW4gdXAgYWxsIGRyaXZlcidzIG91dHN0YW5kaW5nIFNDU0kgSS9PcyAqLworCQlscGZjX3NsaV9mbHVzaF9mY3BfcmluZ3MocGhiYSk7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkvKgpAQCAtMjM3NiwxMCArMjg0MSwyMSBAQAogfQogCiAvKioKLSAqIGxwZmNfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KLSAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIGxwZmNfaW9fc2xvdF9yZXNldDogUmVzdGFydCBhIFBDSSBkZXZpY2UgZnJvbSBzY3JhdGNoLgorICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZS4KICAqCi0gKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KKyAqIFRoaXMgcm91dGluZSBpcyByZWdpc3RlcmVkIHRvIHRoZSBQQ0kgc3Vic3lzdGVtIGZvciBlcnJvciBoYW5kbGluZy4gVGhpcyBpcworICogY2FsbGVkIGFmdGVyIFBDSSBidXMgaGFzIGJlZW4gcmVzZXQgdG8gcmVzdGFydCB0aGUgUENJIGNhcmQgZnJvbSBzY3JhdGNoLAorICogYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4gRHVyaW5nIHRoZSBQQ0kgc3Vic3lzdGVtIGVycm9yIHJlY292ZXJ5LCBhZnRlciB0aGUKKyAqIGRyaXZlciByZXR1cm5zIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQsIHRoZSBQQ0kgc3Vic3lzdGVtIHdpbGwgcGVyZm9ybQorICogcHJvcGVyIGVycm9yIHJlY292ZXJ5IGFuZCB0aGVuIGNhbGwgdGhpcyByb3V0aW5lIGJlZm9yZSBjYWxsaW5nIHRoZSAucmVzdW1lCisgKiBtZXRob2QgdG8gcmVjb3ZlciB0aGUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGUgSEJBIGRldmljZSwKKyAqIGVuYWJsZSB0aGUgaW50ZXJydXB0LCBidXQgaXQgd2lsbCBqdXN0IHB1dCB0aGUgSEJBIHRvIG9mZmxpbmUgc3RhdGUgd2l0aG91dAorICogcGFzc2luZyBhbnkgSS9PIHRyYWZmaWMuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRCAtIHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVjb3ZlcmVkCisgKiAgIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1QgLSBkZXZpY2UgY291bGQgbm90IGJlIHJlY292ZXJlZAogICovCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBscGZjX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0yNDA0LDIwICsyODgwLDM0IEBACiAJLyogRW5hYmxlIGNvbmZpZ3VyZWQgaW50ZXJydXB0IG1ldGhvZCAqLwogCXBoYmEtPmludHJfdHlwZSA9IE5PTkU7CiAJaWYgKHBoYmEtPmNmZ191c2VfbXNpID09IDIpIHsKLQkJZXJyb3IgPSBscGZjX2VuYWJsZV9tc2l4KHBoYmEpOwotCQlpZiAoIWVycm9yKQotCQkJcGhiYS0+aW50cl90eXBlID0gTVNJWDsKKwkJLyogTmVlZCB0byBpc3N1ZSBjb25mX3BvcnQgbWJveCBjbWQgYmVmb3JlIGNvbmZfbXNpIG1ib3ggY21kICovCisJCWVycm9yID0gbHBmY19zbGlfY29uZmlnX3BvcnQocGhiYSwgMyk7CisJCWlmIChlcnJvcikKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCSIwNDc4IEZpcm13YXJlIG5vdCBjYXBhYmxlIG9mIFNMSSAzIG1vZGUuXG4iKTsKKwkJZWxzZSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkiMDQ3OSBGaXJtd2FyZSBjYXBhYmxlIG9mIFNMSSAzIG1vZGUuXG4iKTsKKwkJCS8qIE5vdywgdHJ5IHRvIGVuYWJsZSBNU0ktWCBpbnRlcnJ1cHQgbW9kZSAqLworCQkJZXJyb3IgPSBscGZjX2VuYWJsZV9tc2l4KHBoYmEpOworCQkJaWYgKCFlcnJvcikgeworCQkJCXBoYmEtPmludHJfdHlwZSA9IE1TSVg7CisJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJCQkiMDQ4MCBlbmFibGUgTVNJLVggbW9kZS5cbiIpOworCQkJfQorCQl9CiAJfQogCiAJLyogRmFsbGJhY2sgdG8gTVNJIGlmIE1TSS1YIGluaXRpYWxpemF0aW9uIGZhaWxlZCAqLwogCWlmIChwaGJhLT5jZmdfdXNlX21zaSA+PSAxICYmIHBoYmEtPmludHJfdHlwZSA9PSBOT05FKSB7CiAJCXJldHZhbCA9IHBjaV9lbmFibGVfbXNpKHBoYmEtPnBjaWRldik7Ci0JCWlmICghcmV0dmFsKQorCQlpZiAoIXJldHZhbCkgewogCQkJcGhiYS0+aW50cl90eXBlID0gTVNJOwotCQllbHNlCiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKLQkJCQkJIjA0NzAgRW5hYmxlIE1TSSBmYWlsZWQsIGNvbnRpbnVpbmcgIgotCQkJCQkid2l0aCBJUlFcbiIpOworCQkJCQkiMDQ4MSBlbmFibGUgTVNJIG1vZGUuXG4iKTsKKwkJfSBlbHNlCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkJIjA0NzAgZW5hYmxlIElSUSBtb2RlLlxuIik7CiAJfQogCiAJLyogTVNJLVggaXMgdGhlIG9ubHkgY2FzZSB0aGUgZG9lc24ndCBuZWVkIHRvIGNhbGwgcmVxdWVzdF9pcnEgKi8KQEAgLTI0NDAsMTEgKzI5MzAsMTMgQEAKIH0KIAogLyoqCi0gKiBscGZjX2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uCi0gKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBscGZjX2lvX3Jlc3VtZTogUmVzdW1lIFBDSSBJL08gb3BlcmF0aW9uLgorICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZQogICoKLSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0Ci0gKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uCisgKiBUaGlzIHJvdXRpbmUgaXMgcmVnaXN0ZXJlZCB0byB0aGUgUENJIHN1YnN5c3RlbSBmb3IgZXJyb3IgaGFuZGxpbmcuIEl0IGlzCisgKiBjYWxsZWQgd2hlbiBrZXJuZWwgZXJyb3IgcmVjb3ZlcnkgdGVsbHMgdGhlIGxwZmMgZHJpdmVyIHRoYXQgaXQgaXMgb2sgdG8KKyAqIHJlc3VtZSBub3JtYWwgUENJIG9wZXJhdGlvbiBhZnRlciBQQ0kgYnVzIGVycm9yIHJlY292ZXJ5LiBBZnRlciB0aGlzIGNhbGwsCisgKiB0cmFmZmljIGNhbiBzdGFydCB0byBmbG93IGZyb20gdGhpcyBkZXZpY2UgYWdhaW4uCiAgKi8KIHN0YXRpYyB2b2lkIGxwZmNfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMjQ5MSw2ICsyOTgzLDggQEAKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfWkVQSFlSLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9IT1JORVQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1pFUEhZUl9TQ1NQLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9aRVBIWVJfRENTUCwKQEAgLTI1MjEsNiArMzAxNSwxMiBAQAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9TQVRfUywKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19WRiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19QRiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19TLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMCB9CiB9OwogCkBAIC0yNTQwLDYgKzMwNDAsMTggQEAKIAkuZXJyX2hhbmRsZXIgICAgPSAmbHBmY19lcnJfaGFuZGxlciwKIH07CiAKKy8qKgorICogbHBmY19pbml0OiBscGZjIG1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGxwZmMgbW9kdWxlIGlzIGxvYWRlZCBpbnRvIHRoZQorICoga2VybmVsLiBUaGUgc3BlY2lhbCBrZXJuZWwgbWFjcm8gbW9kdWxlX2luaXQoKSBpcyB1c2VkIHRvIGluZGljYXRlIHRoZQorICogcm9sZSBvZiB0aGlzIHJvdXRpbmUgdG8gdGhlIGtlcm5lbCBhcyBscGZjIG1vZHVsZSBlbnRyeSBwb2ludC4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Nlc3NmdWwKKyAqICAgLUVOT01FTSAtIEZDIGF0dGFjaCB0cmFuc3BvcnQgZmFpbGVkCisgKiAgIGFsbCBvdGhlcnMgLSBmYWlsZWQKKyAqLwogc3RhdGljIGludCBfX2luaXQKIGxwZmNfaW5pdCh2b2lkKQogewpAQCAtMjU2NywxMiArMzA3OSwyMCBAQAogCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbHBmY19kcml2ZXIpOwogCWlmIChlcnJvcikgewogCQlmY19yZWxlYXNlX3RyYW5zcG9ydChscGZjX3RyYW5zcG9ydF90ZW1wbGF0ZSk7Ci0JCWZjX3JlbGVhc2VfdHJhbnNwb3J0KGxwZmNfdnBvcnRfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwkJaWYgKGxwZmNfZW5hYmxlX25waXYpCisJCQlmY19yZWxlYXNlX3RyYW5zcG9ydChscGZjX3Zwb3J0X3RyYW5zcG9ydF90ZW1wbGF0ZSk7CiAJfQogCiAJcmV0dXJuIGVycm9yOwogfQogCisvKioKKyAqIGxwZmNfZXhpdDogbHBmYyBtb2R1bGUgcmVtb3ZhbCByb3V0aW5lLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHdoZW4gdGhlIGxwZmMgbW9kdWxlIGlzIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLgorICogVGhlIHNwZWNpYWwga2VybmVsIG1hY3JvIG1vZHVsZV9leGl0KCkgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgcm9sZSBvZgorICogdGhpcyByb3V0aW5lIHRvIHRoZSBrZXJuZWwgYXMgbHBmYyBtb2R1bGUgZXhpdCBwb2ludC4KKyAqLwogc3RhdGljIHZvaWQgX19leGl0CiBscGZjX2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggN2E5YmU0Yy4uNzQ2NWZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC0zNywxMCArMzgsMjAgQEAKICNpbmNsdWRlICJscGZjX2NydG4uaCIKICNpbmNsdWRlICJscGZjX2NvbXBhdC5oIgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19kdW1wX21lbTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmV0cmlldmluZyBIQkEncyBWUEQgbWVtb3J5LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICogQG9mZnNldDogb2Zmc2V0IGZvciBkdW1waW5nIFZQRCBtZW1vcnkgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBkdW1wIG1haWxib3ggY29tbWFuZCBwcm92aWRlcyBhIG1ldGhvZCBmb3IgdGhlIGRldmljZSBkcml2ZXIgdG8gb2J0YWluCisgKiB2YXJpb3VzIHR5cGVzIG9mIGluZm9ybWF0aW9uIGZyb20gdGhlIEhCQSBkZXZpY2UuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGR1bXBpbmcgSEJBIFZpdGFsIFByb2R1Y3QKKyAqIERhdGEgKFZQRCkgbWVtb3J5LiBUaGlzIG1haWxib3ggY29tbWFuZCBpcyB0byBiZSB1c2VkIGZvciByZXRyaWV2aW5nIGEKKyAqIHBvcnRpb24gKERNUF9SU1BfU0laRSBieXRlcykgb2YgYSBIQkEncyBWUEQgZnJvbSB0aGUgSEJBIGF0IGFuIGFkZHJlc3MKKyAqIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIG9mZnNldCBwYXJhbWV0ZXIuCisgKiovCiB2b2lkCiBscGZjX2R1bXBfbWVtKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYiwgdWludDE2X3Qgb2Zmc2V0KQogewpAQCAtNjUsMTAgKzc2LDE3IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3JlYWRfbnYgIElzc3VlIGEgUkVBRCBOVlBBUkFNICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19yZWFkX252OiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSdzIE5WUkFNIHBhcmFtLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSByZWFkIE5WUkFNIG1haWxib3ggY29tbWFuZCByZXR1cm5zIHRoZSBIQkEncyBub24tdm9sYXRpbGUgcGFyYW1ldGVycworICogdGhhdCBhcmUgdXNlZCBhcyBkZWZhdWx0cyB3aGVuIHRoZSBGaWJyZSBDaGFubmVsIGxpbmsgaXMgYnJvdWdodCBvbi1saW5lLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIGluZm9ybWF0aW9uIHN0b3JlZAorICogaW4gdGhlIEhCQSdzIE5WUkFNLiBTcGVjaWZpY2FsbHksIHRoZSBIQkEncyBXV05OIGFuZCBXV1BOLgorICoqLwogdm9pZAogbHBmY19yZWFkX252KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTgxLDEwICs5OSwxOSBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19jb25maWdfYXN5bmMgIElzc3VlIGEgICAgICAgICAgICAgICAgKi8KLS8qICBNQlhfQVNZTkNfRVZUX0VOQUJMRSBtYWlsYm94IGNvbW1hbmQgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfY29uZmlnX2FzeW5jOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBlbmFibGluZyBIQkEgYXN5bmMgZXZlbnQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiBAcmluZzogcmluZyBudW1iZXIgZm9yIHRoZSBhc3luY2hyb25vdXMgZXZlbnQgdG8gYmUgY29uZmlndXJlZC4KKyAqCisgKiBUaGUgYXN5bmNocm9ub3VzIGV2ZW50IGVuYWJsZSBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBlbmFibGUgdGhlCisgKiBhc3luY2hyb25vdXMgZXZlbnQgcG9zdGluZyB2aWEgdGhlIEFTWU5DX1NUQVRVU19DTiBJT0NCIHJlc3BvbnNlIGFuZAorICogc3BlY2lmaWVzIHRoZSBkZWZhdWx0IHJpbmcgdG8gd2hpY2ggZXZlbnRzIGFyZSBwb3N0ZWQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGVuYWJsaW5nIEhCQSBhc3luY2hyb25vdXMKKyAqIGV2ZW50IHN1cHBvcnQgb24gYSBJT0NCIHJpbmcuCisgKiovCiB2b2lkCiBscGZjX2NvbmZpZ19hc3luYyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIsCiAJCXVpbnQzMl90IHJpbmcpCkBAIC05OSwxMCArMTI2LDE5IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX2hlYXJ0X2JlYXQgIElzc3VlIGEgSEVBUlRfQkVBVCAgICAgICAqLwotLyogICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19oZWFydF9iZWF0OiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBoZWFydCBiZWF0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBoZWFydCBiZWF0IG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGRldGVjdCBhbiB1bnJlc3BvbnNpdmUgSEJBLCB3aGljaAorICogaXMgZGVmaW5lZCBhcyBhbnkgZGV2aWNlIHdoZXJlIG5vIGVycm9yIGF0dGVudGlvbiBpcyBzZW50IGFuZCBib3RoIG1haWxib3gKKyAqIGFuZCByaW5ncyBhcmUgbm90IHByb2Nlc3NlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgaXNzdWluZyBhIGhlYXJ0IGJlYXQgaW4gdGhlCisgKiBmb3JtIG9mIG1haWxib3ggY29tbWFuZCB0byB0aGUgSEJBLiBUaGUgdGltZWx5IGNvbXBsZXRpb24gb2YgdGhlIGhlYXJ0CisgKiBiZWF0IG1haWxib3ggY29tbWFuZCBpbmRpY2F0ZXMgdGhlIGhlYWx0aCBvZiB0aGUgSEJBLgorICoqLwogdm9pZAogbHBmY19oZWFydF9iZWF0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTExNSwxMCArMTUxLDI2IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3JlYWRfbGEgIElzc3VlIGEgUkVBRCBMQSAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19yZWFkX2xhOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSBsaW5rIGF0dGVudGlvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqIEBtcDogRE1BIGJ1ZmZlciBtZW1vcnkgZm9yIHJlYWRpbmcgdGhlIGxpbmsgYXR0ZW50aW9uIGluZm9ybWF0aW9uIGludG8uCisgKgorICogVGhlIHJlYWQgbGluayBhdHRlbnRpb24gbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCB0byByZWFkIHRoZSBMaW5rIEV2ZW50CisgKiBBdHRlbnRpb24gaW5mb3JtYXRpb24gaW5kaWNhdGVkIGJ5IHRoZSBIQkEgcG9ydCB3aGVuIHRoZSBMaW5rIEV2ZW50IGJpdAorICogb2YgdGhlIEhvc3QgQXR0ZW50aW9uIChIU1RBVFQpIHJlZ2lzdGVyIGlzIHNldCB0byAxLiBBIExpbmsgRXZlbnQKKyAqIEF0dGVudGlvbiBvY2N1cnMgYmFzZWQgb24gYW4gZXhjZXB0aW9uIGRldGVjdGVkIGF0IHRoZSBGaWJyZSBDaGFubmVsIGxpbmsKKyAqIGludGVyZmFjZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgbGluayBhdHRlbnRpb24KKyAqIGluZm9ybWF0aW9uLiBBIERNQSBtZW1vcnkgaGFzIGJlZW4gc2V0IGFzaWRlIGFuZCBhZGRyZXNzIHBhc3NlZCB0byB0aGUKKyAqIEhCQSB0aHJvdWdoIEBtcCBmb3IgdGhlIEhCQSB0byBETUEgbGluayBhdHRlbnRpb24gaW5mb3JtYXRpb24gaW50byB0aGUKKyAqIG1lbW9yeSBhcyBwYXJ0IG9mIHRoZSBleGVjdXRpb24gb2YgdGhlIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgIDAgLSBTdWNjZXNzIChjdXJyZW50bHkgYWx3YXlzIHJldHVybiAwKQorICoqLwogaW50CiBscGZjX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iLCBzdHJ1Y3QgbHBmY19kbWFidWYgKm1wKQogewpAQCAtMTQzLDEwICsxOTUsMjEgQEAKIAlyZXR1cm4gKDApOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX2NsZWFyX2xhICBJc3N1ZSBhIENMRUFSIExBICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19jbGVhcl9sYTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgY2xlYXJpbmcgSEJBIGxpbmsgYXR0ZW50aW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBjbGVhciBsaW5rIGF0dGVudGlvbiBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvIGNsZWFyIHRoZSBsaW5rIGV2ZW50CisgKiBhdHRlbnRpb24gY29uZGl0aW9uIGluZGljYXRlZCBieSB0aGUgTGluayBFdmVudCBiaXQgb2YgdGhlIEhvc3QgQXR0ZW50aW9uCisgKiAoSFNUQVRUKSByZWdpc3Rlci4gVGhlIGxpbmsgZXZlbnQgYXR0ZW50aW9uIGNvbmRpdGlvbiBpcyBjbGVhcmVkIG9ubHkgaWYKKyAqIHRoZSBldmVudCB0YWcgc3BlY2lmaWVkIG1hdGNoZXMgdGhhdCBvZiB0aGUgY3VycmVudCBsaW5rIGV2ZW50IGNvdW50ZXIuCisgKiBUaGUgY3VycmVudCBldmVudCB0YWcgaXMgcmVhZCB1c2luZyB0aGUgcmVhZCBsaW5rIGF0dGVudGlvbiBldmVudCBtYWlsYm94CisgKiBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBjbGVhcmluZyBIQkEgbGluayBhdHRlbnRpb24KKyAqIGluZm9ybWF0aW9uLgorICoqLwogdm9pZAogbHBmY19jbGVhcl9sYShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC0xNjEsMTAgKzIyNCwyMCBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfY29uZmlnX2xpbmsgIElzc3VlIGEgQ09ORklHIExJTksgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2NvbmZpZ19saW5rOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBsaW5rIG9uIGEgSEJBLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBjb25maWd1cmUgbGluayBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCBiZWZvcmUgdGhlIGluaXRpYWxpemUgbGluaworICogbWFpbGJveCBjb21tYW5kIHRvIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWUgYW5kIHRvIGNvbmZpZ3VyZSBsaW5rLW9yaWVudGVkCisgKiBwYXJhbWV0ZXJzIHN1Y2ggYXMgRElEIGFkZHJlc3MgYW5kIHZhcmlvdXMgdGltZXJzLiBUeXBpY2FsbHksIHRoaXMKKyAqIGNvbW1hbmQgd291bGQgYmUgdXNlZCBhZnRlciBhbiBGX1BvcnQgbG9naW4gdG8gc2V0IHRoZSByZXR1cm5lZCBESUQgYWRkcmVzcworICogYW5kIHRoZSBmYWJyaWMgdGltZW91dCB2YWx1ZXMuIFRoaXMgY29tbWFuZCBpcyBub3QgdmFsaWQgYmVmb3JlIGEgY29uZmlndXJlCisgKiBwb3J0IGNvbW1hbmQgaGFzIGNvbmZpZ3VyZWQgdGhlIEhCQSBwb3J0LgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBsaW5rIG9uIGEgSEJBLgorICoqLwogdm9pZAogbHBmY19jb25maWdfbGluayhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC0xOTksMTAgKzI3Miw5OCBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19pbml0X2xpbmsgIElzc3VlIGFuIElOSVQgTElOSyAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfY29uZmlnX21zaTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgbXNpLXguCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGNvbmZpZ3VyZSBNU0ktWCBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIEhCQSdzIFNMSS0zCisgKiBNU0ktWCBtdWx0aS1tZXNzYWdlIGludGVycnVwdCB2ZWN0b3IgYXNzb2NpYXRpb24gdG8gaW50ZXJydXB0IGF0dGVudGlvbgorICogY29uZGl0aW9ucy4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgIDAgLSBTdWNjZXNzCisgKiAgICAtRUlOVkFMIC0gRmFpbHVyZQorICoqLworaW50CitscGZjX2NvbmZpZ19tc2koc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKK3sKKwlNQUlMQk9YX3QgKm1iID0gJnBtYi0+bWI7CisJdWludDMyX3QgYXR0ZW50aW9uQ29uZGl0aW9uc1syXTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChwaGJhLT5jZmdfdXNlX21zaSAhPSAyKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjA0NzUgTm90IGNvbmZpZ3VyZWQgZm9yIHN1cHBvcnRpbmcgTVNJLVggIgorCQkJCSJjZmdfdXNlX21zaTogMHgleFxuIiwgcGhiYS0+Y2ZnX3VzZV9tc2kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGhiYS0+c2xpX3JldiA8IDMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMDQ3NiBIQkEgbm90IHN1cHBvcnRpbmcgU0xJLTMgb3IgbGF0ZXIgIgorCQkJCSJTTEkgUmV2aXNpb246IDB4JXhcbiIsIHBoYmEtPnNsaV9yZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDbGVhciBtYWlsYm94IGNvbW1hbmQgZmllbGRzICovCisJbWVtc2V0KHBtYiwgMCwgc2l6ZW9mKExQRkNfTUJPWFFfdCkpOworCisJLyoKKwkgKiBTTEktMywgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgRmVhcnVyZS4KKwkgKi8KKworCS8qIE11bHRpLW1lc3NhZ2UgYXR0ZW50aW9uIGNvbmZpZ3VyYXRpb24gKi8KKwlhdHRlbnRpb25Db25kaXRpb25zWzBdID0gKEhBX1IwQVRUIHwgSEFfUjFBVFQgfCBIQV9SMkFUVCB8IEhBX0VSQVRUIHwKKwkJCQkgIEhBX0xBVFQgfCBIQV9NQkFUVCk7CisJYXR0ZW50aW9uQ29uZGl0aW9uc1sxXSA9IDA7CisKKwltYi0+dW4udmFyQ2ZnTVNJLmF0dGVudGlvbkNvbmRpdGlvbnNbMF0gPSBhdHRlbnRpb25Db25kaXRpb25zWzBdOworCW1iLT51bi52YXJDZmdNU0kuYXR0ZW50aW9uQ29uZGl0aW9uc1sxXSA9IGF0dGVudGlvbkNvbmRpdGlvbnNbMV07CisKKwkvKgorCSAqIFNldCB1cCBtZXNzYWdlIG51bWJlciB0byBIQSBiaXQgYXNzb2NpYXRpb24KKwkgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwkvKiBSQTAgKEZDUCBSaW5nKSAqLworCW1iLT51bi52YXJDZmdNU0kubWVzc2FnZU51bWJlckJ5SEFbSEFfUjBfUE9TXSA9IDE7CisJLyogUkExIChPdGhlciBQcm90b2NvbCBFeHRyYSBSaW5nKSAqLworCW1iLT51bi52YXJDZmdNU0kubWVzc2FnZU51bWJlckJ5SEFbSEFfUjFfUE9TXSA9IDE7CisjZWxzZSAgIC8qICBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQgKi8KKwkvKiBSQTAgKEZDUCBSaW5nKSAqLworCW1iLT51bi52YXJDZmdNU0kubWVzc2FnZU51bWJlckJ5SEFbSEFfUjBfUE9TXjNdID0gMTsKKwkvKiBSQTEgKE90aGVyIFByb3RvY29sIEV4dHJhIFJpbmcpICovCisJbWItPnVuLnZhckNmZ01TSS5tZXNzYWdlTnVtYmVyQnlIQVtIQV9SMV9QT1NeM10gPSAxOworI2VuZGlmCisJLyogTXVsdGktbWVzc2FnZSBpbnRlcnJ1cHQgYXV0b2NsZWFyIGNvbmZpZ3VyYXRpb24qLworCW1iLT51bi52YXJDZmdNU0kuYXV0b0NsZWFySEFbMF0gPSBhdHRlbnRpb25Db25kaXRpb25zWzBdOworCW1iLT51bi52YXJDZmdNU0kuYXV0b0NsZWFySEFbMV0gPSBhdHRlbnRpb25Db25kaXRpb25zWzFdOworCisJLyogRm9yIG5vdywgSEJBIGF1dG9jbGVhciBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5LCBkaXNhYmxlIGl0ICovCisJbWItPnVuLnZhckNmZ01TSS5hdXRvQ2xlYXJIQVswXSA9IDA7CisJbWItPnVuLnZhckNmZ01TSS5hdXRvQ2xlYXJIQVsxXSA9IDA7CisKKwkvKiBTZXQgY29tbWFuZCBhbmQgb3duZXIgYml0ICovCisJbWItPm1ieENvbW1hbmQgPSBNQlhfQ09ORklHX01TSTsKKwltYi0+bWJ4T3duZXIgPSBPV05fSE9TVDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfaW5pdF9saW5rOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBpbml0aWFsaXplIGxpbmsgb24gYSBIQkEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiBAdG9wb2xvZ3k6IHRoZSBsaW5rIHRvcG9sb2d5IGZvciB0aGUgbGluayB0byBiZSBpbml0aWFsaXplZCB0by4KKyAqIEBsaW5rc3BlZWQ6IHRoZSBsaW5rIHNwZWVkIGZvciB0aGUgbGluayB0byBiZSBpbml0aWFsaXplZCB0by4KKyAqCisgKiBUaGUgaW5pdGlhbGl6ZSBsaW5rIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIEZpYnJlCisgKiBDaGFubmVsIGxpbmsuIFRoaXMgY29tbWFuZCBtdXN0IGZvbGxvdyBhIGNvbmZpZ3VyZSBwb3J0IGNvbW1hbmQgdGhhdAorICogZXN0YWJsaXNoZXMgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBpbml0aWFsaXppbmcgbGluayBvbiBhIEhCQQorICogd2l0aCB0aGUgc3BlY2lmaWVkIGxpbmsgdG9wb2xvZ3kgYW5kIHNwZWVkLgorICoqLwogdm9pZAogbHBmY19pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKIAkgICAgICAgTFBGQ19NQk9YUV90ICogcG1iLCB1aW50MzJfdCB0b3BvbG9neSwgdWludDMyX3QgbGlua3NwZWVkKQpAQCAtMjY5LDEwICs0MzAsMjcgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfcmVhZF9zcGFyYW0gIElzc3VlIGEgUkVBRCBTUEFSQU0gICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3JlYWRfc3BhcmFtOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSBwYXJhbWV0ZXJzLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICogQHZwaTogdmlydHVhbCBOX1BvcnQgaWRlbnRpZmllci4KKyAqCisgKiBUaGUgcmVhZCBzZXJ2aWNlIHBhcmFtZXRlciBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIHRoZSBIQkEgcG9ydAorICogc2VydmljZSBwYXJhbWV0ZXJzLiBUaGUgc2VydmljZSBwYXJhbWV0ZXJzIGFyZSByZWFkIGludG8gdGhlIGJ1ZmZlcgorICogc3BlY2lmaWVkIGRpcmVjdGx5IGJ5IGEgQkRFIGluIHRoZSBtYWlsYm94IGNvbW1hbmQuIFRoZXNlIHNlcnZpY2UKKyAqIHBhcmFtZXRlcnMgbWF5IHRoZW4gYmUgdXNlZCB0byBidWlsZCB0aGUgcGF5bG9hZCBvZiBhbiBOX1BvcnQvRl9QT3J0CisgKiBsb2dpbiByZXF1ZXN0IGFuZCByZXBseSAoTE9HSS9BQ0MpLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSBwb3J0IHNlcnZpY2UKKyAqIHBhcmFtZXRlcnMuIFRoZSBETUEgbWVtb3J5IGlzIGFsbG9jYXRlZCBpbiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgYWRkcmVzc2VzCisgKiBhcmUgcG9wdWxhdGVkIGludG8gdGhlIG1haWxib3ggY29tbWFuZCBmb3IgdGhlIEhCQSB0byBETUEgdGhlIHNlcnZpY2UKKyAqIHBhcmFtZXRlcnMgaW50by4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgIDAgLSBTdWNjZXNzCisgKiAgICAxIC0gRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICoqLwogaW50CiBscGZjX3JlYWRfc3BhcmFtKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIsIGludCB2cGkpCiB7CkBAIC0zMTIsMTAgKzQ5MCwyMSBAQAogCXJldHVybiAoMCk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3VucmVnX2RpZCAgSXNzdWUgYSBVTlJFR19ESUQgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY191bnJlZ19kaWQ6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHVucmVnaXN0ZXJpbmcgRElELgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBpOiB2aXJ0dWFsIE5fUG9ydCBpZGVudGlmaWVyLgorICogQGRpZDogcmVtb3RlIHBvcnQgaWRlbnRpZmllci4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHVucmVnaXN0ZXIgRElEIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHVucmVnaXN0ZXIgYW4gTl9Qb3J0L0ZfUG9ydAorICogbG9naW4gZm9yIGFuIHVua25vd24gUlBJIGJ5IHNwZWNpZnlpbmcgdGhlIERJRCBvZiBhIHJlbW90ZSBwb3J0LiBUaGlzCisgKiBjb21tYW5kIGZyZWVzIGFuIFJQSSBjb250ZXh0IGluIHRoZSBIQkEgcG9ydC4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgorICogcGVyZm9ybWluZyBhbiBpbXBsaWNpdCBOX1BvcnQvRl9Qb3J0IGxvZ291dC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgdW5yZWdpc3RlcmluZyBhIHJlbW90ZQorICogTl9Qb3J0L0ZfUG9ydCAoRElEKSBsb2dpbi4KKyAqKi8KIHZvaWQKIGxwZmNfdW5yZWdfZGlkKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQxNl90IHZwaSwgdWludDMyX3QgZGlkLAogCSAgICAgICBMUEZDX01CT1hRX3QgKiBwbWIpCkBAIC0zMzMsMTAgKzUyMiwxOSBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19yZWFkX252ICBJc3N1ZSBhIFJFQUQgQ09ORklHICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcmVhZF9jb25maWc6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIGNvbmZpZ3VyYXRpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHJlYWQgY29uZmlndXJhdGlvbiBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIHRoZSBIQkEgcG9ydAorICogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBUaGlzIG1haWxib3ggY29tbWFuZCBwcm92aWRlcyBhIG1ldGhvZCBmb3IKKyAqIHNlZWluZyBhbnkgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGNoYW5nZWQgdmlhIHZhcmlvdXMgY29uZmlndXJhdGlvbgorICogbWFpbGJveCBjb21tYW5kcy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBvdXQgSEJBIGNvbmZpZ3VyYXRpb24KKyAqIHBhcmFtZXRlcnMuCisgKiovCiB2b2lkCiBscGZjX3JlYWRfY29uZmlnKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTM1MCwxMCArNTQ4LDE4IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3JlYWRfbG5rX3N0YXQgIElzc3VlIGEgUkVBRCBMSU5LIFNUQVRVUyAqLwotLyogICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19yZWFkX2xua19zdGF0OiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSBsaW5rIHN0YXRzLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSByZWFkIGxpbmsgc3RhdHVzIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgdGhlIGxpbmsgc3RhdHVzIGZyb20KKyAqIHRoZSBIQkEuIExpbmsgc3RhdHVzIGluY2x1ZGVzIGFsbCBsaW5rLXJlbGF0ZWQgZXJyb3IgY291bnRlcnMuIFRoZXNlCisgKiBjb3VudGVycyBhcmUgbWFpbnRhaW5lZCBieSB0aGUgSEJBIGFuZCBvcmlnaW5hdGVkIGluIHRoZSBsaW5rIGhhcmR3YXJlCisgKiB1bml0LiBOb3RlIHRoYXQgYWxsIG9mIHRoZXNlIGNvdW50ZXJzIHdyYXAuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgb3V0IEhCQSBsaW5rIHN0YXR1cy4KKyAqKi8KIHZvaWQKIGxwZmNfcmVhZF9sbmtfc3RhdChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC0zNjcsMTAgKzU3MywzMCBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfcmVnX2xvZ2luICBJc3N1ZSBhIFJFR19MT0dJTiAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3JlZ19sb2dpbjogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVnaXN0ZXJpbmcgcmVtb3RlIGxvZ2luLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBpOiB2aXJ0dWFsIE5fUG9ydCBpZGVudGlmaWVyLgorICogQGRpZDogcmVtb3RlIHBvcnQgaWRlbnRpZmllci4KKyAqIEBwYXJhbTogcG9pbnRlciB0byBtZW1vcnkgaG9sZGluZyB0aGUgc2VydmVyIHBhcmFtZXRlcnMuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICogQGZsYWc6IGFjdGlvbiBmbGFnIHRvIGJlIHBhc3NlZCBiYWNrIGZvciB0aGUgY29tcGxldGUgZnVuY3Rpb24uCisgKgorICogVGhlIHJlZ2lzdHJhdGlvbiBsb2dpbiBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byByZWdpc3RlciBhbiBOX1BvcnQgb3IKKyAqIEZfUG9ydCBsb2dpbi4gVGhpcyByZWdpc3RyYXRpb24gYWxsb3dzIHRoZSBIQkEgdG8gY2FjaGUgdGhlIHJlbW90ZSBOX1BvcnQKKyAqIHNlcnZpY2UgcGFyYW1ldGVycyBpbnRlcm5hbGx5IGFuZCB0aGVyZWJ5IG1ha2UgdGhlIGFwcHJvcHJpYXRlIEZDLTIKKyAqIGRlY2lzaW9ucy4gVGhlIHJlbW90ZSBwb3J0IHNlcnZpY2UgcGFyYW1ldGVycyBhcmUgaGFuZGVkIG9mZiBieSB0aGUgZHJpdmVyCisgKiB0byB0aGUgSEJBIHVzaW5nIGEgZGVzY3JpcHRvciBlbnRyeSB0aGF0IGRpcmVjdGx5IGlkZW50aWZpZXMgYSBidWZmZXIgaW4KKyAqIGhvc3QgbWVtb3J5LiBJbiBleGNoYW5nZSwgdGhlIEhCQSByZXR1cm5zIGFuIFJQSSBpZGVudGlmaWVyLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWdpc3RlcmluZyByZW1vdGUgcG9ydCBsb2dpbi4KKyAqIFRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgRE1BIGJ1ZmZlciBmb3IgcGFzc2luZyB0aGUgc2VydmljZSBwYXJhbWV0ZXJzIHRvIHRoZQorICogSEJBIHdpdGggdGhlIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgIDAgLSBTdWNjZXNzCisgKiAgICAxIC0gRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICoqLwogaW50CiBscGZjX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHZwaSwgdWludDMyX3QgZGlkLAogCSAgICAgICB1aW50OF90ICpwYXJhbSwgTFBGQ19NQk9YUV90ICpwbWIsIHVpbnQzMl90IGZsYWcpCkBAIC00MTgsMTAgKzY0NCwyMCBAQAogCXJldHVybiAoMCk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfdW5yZWdfbG9naW4gIElzc3VlIGEgVU5SRUdfTE9HSU4gICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3VucmVnX2xvZ2luOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciB1bnJlZ2lzdGVyaW5nIHJlbW90ZSBsb2dpbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwaTogdmlydHVhbCBOX1BvcnQgaWRlbnRpZmllci4KKyAqIEBycGk6IHJlbW90ZSBwb3J0IGlkZW50aWZpZXIKKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHVucmVnaXN0cmF0aW9uIGxvZ2luIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHVucmVnaXN0ZXIgYW4gTl9Qb3J0CisgKiBvciBGX1BvcnQgbG9naW4uIFRoaXMgY29tbWFuZCBmcmVlcyBhbiBSUEkgY29udGV4dCBpbiB0aGUgSEJBLiBJdCBoYXMgdGhlCisgKiBlZmZlY3Qgb2YgcGVyZm9ybWluZyBhbiBpbXBsaWNpdCBOX1BvcnQvRl9Qb3J0IGxvZ291dC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgdW5yZWdpc3RlcmluZyByZW1vdGUgcG9ydAorICogbG9naW4uCisgKiovCiB2b2lkCiBscGZjX3VucmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgdnBpLCB1aW50MzJfdCBycGksCiAJCSBMUEZDX01CT1hRX3QgKiBwbWIpCkBAIC00NDAsMTAgKzY3NiwyMSBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfcmVnX3ZwaSAgIElzc3VlIGEgUkVHX1ZQSSAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3JlZ192cGk6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlZ2lzdGVyaW5nIHZwb3J0IGlkZW50aWZpZXIuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cGk6IHZpcnR1YWwgTl9Qb3J0IGlkZW50aWZpZXIuCisgKiBAc2lkOiBGaWJyZSBDaGFubmVsIFNfSUQgKE5fUG9ydF9JRCBhc3NpZ25lZCB0byBhIHZpcnR1YWwgTl9Qb3J0KS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHJlZ2lzdHJhdGlvbiB2cG9ydCBpZGVudGlmaWVyIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGFjdGl2YXRlIGEKKyAqIHZpcnR1YWwgTl9Qb3J0IGFmdGVyIGl0IGhhcyBhY3F1aXJlZCBhbiBOX1BvcnRfSUQuIFRoZSBIQkEgdmFsaWRhdGVzIHRoZQorICogTl9Qb3J0X0lEIGFnYWluc3QgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzZWxlY3RlZCB2aXJ0dWFsIE5fUG9ydCBjb250ZXh0CisgKiBibG9jayBhbmQgbWFya3MgaXQgYWN0aXZlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIG9mIElPQ0IgY29tbWFuZHMgYW5kCisgKiByZWNlaXZlZCB1bnNvbGljaXRlZCBleGNoYW5nZXMuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlZ2lzdGVyaW5nIGEgdmlydHVhbCBOX1BvcnQuCisgKiovCiB2b2lkCiBscGZjX3JlZ192cGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCB2cGksIHVpbnQzMl90IHNpZCwKIAkgICAgIExQRkNfTUJPWFFfdCAqcG1iKQpAQCAtNDYxLDEwICs3MDgsMjIgQEAKIAogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY191bnJlZ192cGkgICBJc3N1ZSBhIFVOUkVHX1ZOUEkgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfdW5yZWdfdnBpOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciB1bnJlZ2lzdGVyaW5nIHZwb3J0IGlkLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBpOiB2aXJ0dWFsIE5fUG9ydCBpZGVudGlmaWVyLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgdW5yZWdpc3RyYXRpb24gdnBvcnQgaWRlbnRpZmllciBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBpbmFjdGl2YXRlCisgKiBhIHZpcnR1YWwgTl9Qb3J0LiBUaGUgZHJpdmVyIG11c3QgaGF2ZSBsb2dnZWQgb3V0IGFuZCB1bnJlZ2lzdGVyZWQgYWxsCisgKiByZW1vdGUgTl9Qb3J0cyB0byBhYm9ydCBhbnkgYWN0aXZpdHkgb24gdGhlIHZpcnR1YWwgTl9Qb3J0LiBUaGUgSEJBIHdpbGwKKyAqIHVucmVnaXN0ZXJzIGFueSBkZWZhdWx0IFJQSXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgdnBpLCBhYm9ydGluZworICogYW55IGFjdGl2ZSBleGNoYW5nZXMuIFRoZSBIQkEgd2lsbCBwb3N0IHRoZSBtYWlsYm94IHJlc3BvbnNlIGFmdGVyIG1ha2luZworICogdGhlIHZpcnR1YWwgTl9Qb3J0IGluYWN0aXZlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciB1bnJlZ2lzdGVyaW5nIGEgdmlydHVhbAorICogTl9Qb3J0LgorICoqLwogdm9pZAogbHBmY191bnJlZ192cGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCB2cGksIExQRkNfTUJPWFFfdCAqcG1iKQogewpAQCAtNDc5LDEyICs3MzgsMTkgQEAKIAogfQogCisvKioKKyAqIGxwZmNfY29uZmlnX3BjYl9zZXR1cDogU2V0IHVwIElPQ0IgcmluZ3MgaW4gdGhlIFBvcnQgQ29udHJvbCBCbG9jayAoUENCKQorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHNldHMgdXAgYW5kIGluaXRpYWxpemVzIHRoZSBJT0NCIHJpbmdzIGluIHRoZSBQb3J0IENvbnRyb2wKKyAqIEJsb2NrIChQQ0IpLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY29uZmlnX3BjYl9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewogCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nOwotCVBDQl90ICpwY2JwID0gJnBoYmEtPnNsaW0ycC0+cGNiOworCVBDQl90ICpwY2JwID0gcGhiYS0+cGNiOwogCWRtYV9hZGRyX3QgcGRtYV9hZGRyOwogCXVpbnQzMl90IG9mZnNldDsKIAl1aW50MzJfdCBpb2NiQ250ID0gMDsKQEAgLTUxMywyOSArNzc5LDQzIEBACiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBDb21tYW5kIHJpbmcgc2V0dXAgZm9yIHJpbmcgKi8KLQkJcHJpbmctPmNtZHJpbmdhZGRyID0gKHZvaWQgKikgJnBoYmEtPnNsaW0ycC0+SU9DQnNbaW9jYkNudF07CisJCXByaW5nLT5jbWRyaW5nYWRkciA9ICh2b2lkICopJnBoYmEtPklPQ0JzW2lvY2JDbnRdOwogCQlwY2JwLT5yZHNjW2ldLmNtZEVudHJpZXMgPSBwcmluZy0+bnVtQ2lvY2I7CiAKLQkJb2Zmc2V0ID0gKHVpbnQ4X3QgKikgJnBoYmEtPnNsaW0ycC0+SU9DQnNbaW9jYkNudF0gLQotCQkJICh1aW50OF90ICopIHBoYmEtPnNsaW0ycDsKLQkJcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwX21hcHBpbmcgKyBvZmZzZXQ7CisJCW9mZnNldCA9ICh1aW50OF90ICopICZwaGJhLT5JT0NCc1tpb2NiQ250XSAtCisJCQkgKHVpbnQ4X3QgKikgcGhiYS0+c2xpbTJwLnZpcnQ7CisJCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycC5waHlzICsgb2Zmc2V0OwogCQlwY2JwLT5yZHNjW2ldLmNtZEFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfYWRkcik7CiAJCXBjYnAtPnJkc2NbaV0uY21kQWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfYWRkcik7CiAJCWlvY2JDbnQgKz0gcHJpbmctPm51bUNpb2NiOwogCiAJCS8qIFJlc3BvbnNlIHJpbmcgc2V0dXAgZm9yIHJpbmcgKi8KLQkJcHJpbmctPnJzcHJpbmdhZGRyID0gKHZvaWQgKikgJnBoYmEtPnNsaW0ycC0+SU9DQnNbaW9jYkNudF07CisJCXByaW5nLT5yc3ByaW5nYWRkciA9ICh2b2lkICopICZwaGJhLT5JT0NCc1tpb2NiQ250XTsKIAogCQlwY2JwLT5yZHNjW2ldLnJzcEVudHJpZXMgPSBwcmluZy0+bnVtUmlvY2I7Ci0JCW9mZnNldCA9ICh1aW50OF90ICopJnBoYmEtPnNsaW0ycC0+SU9DQnNbaW9jYkNudF0gLQotCQkJICh1aW50OF90ICopcGhiYS0+c2xpbTJwOwotCQlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnBfbWFwcGluZyArIG9mZnNldDsKKwkJb2Zmc2V0ID0gKHVpbnQ4X3QgKikmcGhiYS0+SU9DQnNbaW9jYkNudF0gLQorCQkJICh1aW50OF90ICopcGhiYS0+c2xpbTJwLnZpcnQ7CisJCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycC5waHlzICsgb2Zmc2V0OwogCQlwY2JwLT5yZHNjW2ldLnJzcEFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfYWRkcik7CiAJCXBjYnAtPnJkc2NbaV0ucnNwQWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfYWRkcik7CiAJCWlvY2JDbnQgKz0gcHJpbmctPm51bVJpb2NiOwogCX0KIH0KIAorLyoqCisgKiBscGZjX3JlYWRfcmV2OiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSByZXZpc2lvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgcmVhZCByZXZpc2lvbiBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIHRoZSByZXZpc2lvbiBsZXZlbHMgb2YKKyAqIHRoZSBIQkEgY29tcG9uZW50cy4gVGhlc2UgY29tcG9uZW50cyBpbmNsdWRlIGhhcmR3YXJlIHVuaXRzLCByZXNpZGVudAorICogZmlybXdhcmUsIGFuZCBhdmFpbGFibGUgZmlybXdhcmUuIEhCQXMgdGhhdCBzdXBwb3J0cyBTTEktMyBtb2RlIG9mCisgKiBvcGVyYXRpb24gcHJvdmlkZSBkaWZmZXJlbnQgcmVzcG9uc2UgaW5mb3JtYXRpb24gZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uCisgKiByZXF1ZXN0ZWQgYnkgdGhlIGRyaXZlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgcmV2aXNpb24KKyAqIGluZm9ybWF0aW9uLgorICoqLwogdm9pZAogbHBmY19yZWFkX3JldihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC01NDgsNiArODI4LDE2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfYnVpbGRfaGJxX3Byb2ZpbGUyOiBTZXQgdXAgdGhlIEhCUSBTZWxlY3Rpb24gUHJvZmlsZSAyLgorICogQGhicW1iOiBwb2ludGVyIHRvIHRoZSBIQlEgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZSBpbiBtYWlsYm94IGNvbW1hbmQuCisgKiBAaGJxX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIEhCUSBzZWxlY3Rpb24gcHJvZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIFRoZSBIb3N0IEJ1ZmZlciBRdWV1ZSAoSEJRKSBTZWxlY3Rpb24gUHJvZmlsZSAyIHNwZWNpZmllcyB0aGF0IHRoZSBIQkEKKyAqIHRlc3RzIHRoZSBpbmNvbWluZyBmcmFtZXMnIFJfQ1RML1RZUEUgZmllbGRzIHdpdGggd29ya3MgMTA6MTUgYW5kIHBlcmZvcm1zCisgKiB0aGUgU2VxdWVuY2UgTGVuZ3RoIFRlc3QgdXNpbmcgdGhlIGZpZWxkcyBpbiB0aGUgU2VsZWN0aW9uIFByb2ZpbGUgMgorICogZXh0ZW5zaW9uIGluIHdvcmRzIDIwOjMxLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfYnVpbGRfaGJxX3Byb2ZpbGUyKHN0cnVjdCBjb25maWdfaGJxX3ZhciAqaGJxbWIsCiAJCQlzdHJ1Y3QgbHBmY19oYnFfaW5pdCAgKmhicV9kZXNjKQpAQCAtNTU3LDYgKzg0NywxNiBAQAogCWhicW1iLT5wcm9maWxlcy5wcm9maWxlMi5zZXFsZW5vZmYgID0gaGJxX2Rlc2MtPnNlcWxlbm9mZjsKIH0KIAorLyoqCisgKiBscGZjX2J1aWxkX2hicV9wcm9maWxlMzogU2V0IHVwIHRoZSBIQlEgU2VsZWN0aW9uIFByb2ZpbGUgMy4KKyAqIEBoYnFtYjogcG9pbnRlciB0byB0aGUgSEJRIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmUgaW4gbWFpbGJveCBjb21tYW5kLgorICogQGhicV9kZXNjOiBwb2ludGVyIHRvIHRoZSBIQlEgc2VsZWN0aW9uIHByb2ZpbGUgZGVzY3JpcHRvci4KKyAqCisgKiBUaGUgSG9zdCBCdWZmZXIgUXVldWUgKEhCUSkgU2VsZWN0aW9uIFByb2ZpbGUgMyBzcGVjaWZpZXMgdGhhdCB0aGUgSEJBCisgKiB0ZXN0cyB0aGUgaW5jb21pbmcgZnJhbWUncyBSX0NUTC9UWVBFIGZpZWxkcyB3aXRoIHdvcmRzIDEwOjE1IGFuZCBwZXJmb3JtcworICogdGhlIFNlcXVlbmNlIExlbmd0aCBUZXN0IGFuZCBCeXRlIEZpZWxkIFRlc3QgdXNpbmcgdGhlIGZpZWxkcyBpbiB0aGUKKyAqIFNlbGVjdGlvbiBQcm9maWxlIDMgZXh0ZW5zaW9uIGluIHdvcmRzIDIwOjMxLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfYnVpbGRfaGJxX3Byb2ZpbGUzKHN0cnVjdCBjb25maWdfaGJxX3ZhciAqaGJxbWIsCiAJCQlzdHJ1Y3QgbHBmY19oYnFfaW5pdCAgKmhicV9kZXNjKQpAQCAtNTY5LDYgKzg2OSwxNyBAQAogCSAgICAgICBzaXplb2YoaGJxbWItPnByb2ZpbGVzLnByb2ZpbGUzLmNtZG1hdGNoKSk7CiB9CiAKKy8qKgorICogbHBmY19idWlsZF9oYnFfcHJvZmlsZTU6IFNldCB1cCB0aGUgSEJRIFNlbGVjdGlvbiBQcm9maWxlIDUuCisgKiBAaGJxbWI6IHBvaW50ZXIgdG8gdGhlIEhCUSBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlIGluIG1haWxib3ggY29tbWFuZC4KKyAqIEBoYnFfZGVzYzogcG9pbnRlciB0byB0aGUgSEJRIHNlbGVjdGlvbiBwcm9maWxlIGRlc2NyaXB0b3IuCisgKgorICogVGhlIEhvc3QgQnVmZmVyIFF1ZXVlIChIQlEpIFNlbGVjdGlvbiBQcm9maWxlIDUgc3BlY2lmaWVzIGEgaGVhZGVyIEhCUS4gVGhlCisgKiBIQkEgdGVzdHMgdGhlIGluaXRpYWwgZnJhbWUgb2YgYW4gaW5jb21pbmcgc2VxdWVuY2UgdXNpbmcgdGhlIGZyYW1lJ3MKKyAqIFJfQ1RML1RZUEUgZmllbGRzIHdpdGggd29yZHMgMTA6MTUgYW5kIHBlcmZvcm1zIHRoZSBTZXF1ZW5jZSBMZW5ndGggVGVzdAorICogYW5kIEJ5dGUgRmllbGQgVGVzdCB1c2luZyB0aGUgZmllbGRzIGluIHRoZSBTZWxlY3Rpb24gUHJvZmlsZSA1IGV4dGVuc2lvbgorICogd29yZHMgMjA6MzEuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19idWlsZF9oYnFfcHJvZmlsZTUoc3RydWN0IGNvbmZpZ19oYnFfdmFyICpoYnFtYiwKIAkJCXN0cnVjdCBscGZjX2hicV9pbml0ICAqaGJxX2Rlc2MpCkBAIC01ODEsNiArODkyLDIwIEBACiAJICAgICAgIHNpemVvZihoYnFtYi0+cHJvZmlsZXMucHJvZmlsZTUuY21kbWF0Y2gpKTsKIH0KIAorLyoqCisgKiBscGZjX2NvbmZpZ19oYnE6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIGFuIEhCUS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGlkOiBIQlEgaWRlbnRpZmllci4KKyAqIEBoYnFfZGVzYzogcG9pbnRlciB0byB0aGUgSEJBIGRlc2NyaXB0b3IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAaGJxX2VudHJ5X2luZGV4OiBpbmRleCBvZiB0aGUgSEJRIGVudHJ5IGRhdGEgc3RydWN0dXJlcy4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGNvbmZpZ3VyZSBIQlEgKEhvc3QgQnVmZmVyIFF1ZXVlKSBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBjb25maWd1cmUKKyAqIGFuIEhCUS4gVGhlIGNvbmZpZ3VyYXRpb24gYmluZHMgZXZlbnRzIHRoYXQgcmVxdWlyZSBidWZmZXJzIHRvIGEgcGFydGljdWxhcgorICogcmluZyBhbmQgSEJRIGJhc2VkIG9uIGEgc2VsZWN0aW9uIHByb2ZpbGUuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIGFuIEhCUS4KKyAqKi8KIHZvaWQKIGxwZmNfY29uZmlnX2hicShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IGlkLAogCQkgc3RydWN0IGxwZmNfaGJxX2luaXQgKmhicV9kZXNjLApAQCAtNjQxLDggKzk2NiwyMyBAQAogCXJldHVybjsKIH0KIAotCi0KKy8qKgorICogbHBmY19jb25maWdfcmluZzogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgYW4gSU9DQiByaW5nLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmluZzoKKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGNvbmZpZ3VyZSByaW5nIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhbiBJT0NCIHJpbmcuIFRoaXMKKyAqIGNvbmZpZ3VyYXRpb24gYmluZHMgZnJvbSBvbmUgdG8gc2l4IG9mIEhCQSBSQ19DVEwvVFlQRSBtYXNrIGVudHJpZXMgdG8gdGhlCisgKiByaW5nLiBUaGlzIGlzIHVzZWQgdG8gbWFwIGluY29taW5nIHNlcXVlbmNlcyB0byBhIHBhcnRpY3VsYXIgcmluZyB3aG9zZQorICogUkNfQ1RML1RZUEUgbWFzayBlbnRyeSBtYXRjaGVzIHRoYXQgb2YgdGhlIHNlcXVlbmNlLiBUaGUgZHJpdmVyIHNob3VsZCBub3QKKyAqIGF0dGVtcHQgdG8gY29uZmlndXJlIGEgcmluZyB3aG9zZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIKKyAqIHNwZWNpZmllZCBpbiB0aGUgUG9ydCBDb250cm9sIEJsb2NrIChQQ0IpLiBJdCBpcyBhbiBlcnJvciB0byBpc3N1ZSB0aGUKKyAqIGNvbmZpZ3VyZSByaW5nIGNvbW1hbmQgbW9yZSB0aGFuIG9uY2Ugd2l0aCB0aGUgc2FtZSByaW5nIG51bWJlci4gVGhlIEhCQQorICogcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZHJpdmVyIGF0dGVtcHRzIHRoaXMuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIElPQ0IgcmluZy4KKyAqKi8KIHZvaWQKIGxwZmNfY29uZmlnX3Jpbmcoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgaW50IHJpbmcsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTY4NCw2ICsxMDI0LDIwIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfY29uZmlnX3BvcnQ6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIHBvcnQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGNvbmZpZ3VyZSBwb3J0IG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBQb3J0IENvbnRyb2wKKyAqIEJsb2NrIChQQ0IpIGluIHRoZSBkcml2ZXIgbWVtb3J5LiBBZnRlciB0aGlzIGNvbW1hbmQgaXMgaXNzdWVkLCB0aGUKKyAqIGRyaXZlciBtdXN0IG5vdCBhY2Nlc3MgdGhlIG1haWxib3ggaW4gdGhlIEhCQSB3aXRob3V0IGZpcnN0IHJlc2V0dGluZworICogdGhlIEhCQS4gVGhlIEhCQSBtYXkgY29weSB0aGUgUENCIGluZm9ybWF0aW9uIHRvIGludGVybmFsIHN0b3JhZ2UgZm9yCisgKiBzdWJzZXF1ZW50IHVzZTsgdGhlIGRyaXZlciBjYW4gbm90IGNoYW5nZSB0aGUgUENCIGluZm9ybWF0aW9uIHVubGVzcyBpdAorICogcmVzZXRzIHRoZSBIQkEuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIHBvcnQuCisgKiovCiB2b2lkCiBscGZjX2NvbmZpZ19wb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7CkBAIC03MDIsOCArMTA1Niw4IEBACiAKIAltYi0+dW4udmFyQ2ZnUG9ydC5wY2JMZW4gPSBzaXplb2YoUENCX3QpOwogCi0Jb2Zmc2V0ID0gKHVpbnQ4X3QgKikmcGhiYS0+c2xpbTJwLT5wY2IgLSAodWludDhfdCAqKXBoYmEtPnNsaW0ycDsKLQlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnBfbWFwcGluZyArIG9mZnNldDsKKwlvZmZzZXQgPSAodWludDhfdCAqKXBoYmEtPnBjYiAtICh1aW50OF90ICopcGhiYS0+c2xpbTJwLnZpcnQ7CisJcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwLnBoeXMgKyBvZmZzZXQ7CiAJbWItPnVuLnZhckNmZ1BvcnQucGNiTG93ID0gcHV0UGFkZHJMb3cocGRtYV9hZGRyKTsKIAltYi0+dW4udmFyQ2ZnUG9ydC5wY2JIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfYWRkcik7CiAKQEAgLTcxMSwxMiArMTA2NSwxMyBAQAogCiAJaWYgKHBoYmEtPnNsaV9yZXYgPT0gMyAmJiBwaGJhLT52cGQuc2xpM0ZlYXQuY2VyYm0pIHsKIAkJbWItPnVuLnZhckNmZ1BvcnQuY2VyYm0gPSAxOyAvKiBSZXF1ZXN0IEhCUXMgKi8KKwkJbWItPnVuLnZhckNmZ1BvcnQuY2NycCA9IDE7IC8qIENvbW1hbmQgUmluZyBQb2xsaW5nICovCisJCW1iLT51bi52YXJDZmdQb3J0LmNpbmIgPSAxOyAvKiBJbnRlcnJ1cHQgTm90aWZpY2F0aW9uIEJsb2NrICovCiAJCW1iLT51bi52YXJDZmdQb3J0Lm1heF9oYnEgPSBscGZjX3NsaV9oYnFfY291bnQoKTsKIAkJaWYgKHBoYmEtPm1heF92cGkgJiYgcGhiYS0+Y2ZnX2VuYWJsZV9ucGl2ICYmCiAJCSAgICBwaGJhLT52cGQuc2xpM0ZlYXQuY212KSB7CiAJCQltYi0+dW4udmFyQ2ZnUG9ydC5tYXhfdnBpID0gcGhiYS0+bWF4X3ZwaTsKIAkJCW1iLT51bi52YXJDZmdQb3J0LmNtdiA9IDE7Ci0JCQlwaGJhLT5zbGkzX29wdGlvbnMgfD0gTFBGQ19TTEkzX05QSVZfRU5BQkxFRDsKIAkJfSBlbHNlCiAJCQltYi0+dW4udmFyQ2ZnUG9ydC5tYXhfdnBpID0gcGhiYS0+bWF4X3ZwaSA9IDA7CiAJfSBlbHNlCkBAIC03MjQsMTYgKzEwNzksMTUgQEAKIAltYi0+dW4udmFyQ2ZnUG9ydC5zbGlfbW9kZSA9IHBoYmEtPnNsaV9yZXY7CiAKIAkvKiBOb3cgc2V0dXAgcGNiICovCi0JcGhiYS0+c2xpbTJwLT5wY2IudHlwZSA9IFRZUEVfTkFUSVZFX1NMSTI7Ci0JcGhiYS0+c2xpbTJwLT5wY2IuZmVhdHVyZSA9IEZFQVRVUkVfSU5JVElBTF9TTEkyOworCXBoYmEtPnBjYi0+dHlwZSA9IFRZUEVfTkFUSVZFX1NMSTI7CisJcGhiYS0+cGNiLT5mZWF0dXJlID0gRkVBVFVSRV9JTklUSUFMX1NMSTI7CiAKIAkvKiBTZXR1cCBNYWlsYm94IHBvaW50ZXJzICovCi0JcGhiYS0+c2xpbTJwLT5wY2IubWFpbEJveFNpemUgPSBvZmZzZXRvZihNQUlMQk9YX3QsIHVzKSArCi0JCXNpemVvZihzdHJ1Y3Qgc2xpMl9kZXNjKTsKLQlvZmZzZXQgPSAodWludDhfdCAqKSZwaGJhLT5zbGltMnAtPm1ieCAtICh1aW50OF90ICopcGhiYS0+c2xpbTJwOwotCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycF9tYXBwaW5nICsgb2Zmc2V0OwotCXBoYmEtPnNsaW0ycC0+cGNiLm1iQWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9hZGRyKTsKLQlwaGJhLT5zbGltMnAtPnBjYi5tYkFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX2FkZHIpOworCXBoYmEtPnBjYi0+bWFpbEJveFNpemUgPSBzaXplb2YoTUFJTEJPWF90KTsKKwlvZmZzZXQgPSAodWludDhfdCAqKXBoYmEtPm1ib3ggLSAodWludDhfdCAqKXBoYmEtPnNsaW0ycC52aXJ0OworCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycC5waHlzICsgb2Zmc2V0OworCXBoYmEtPnBjYi0+bWJBZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX2FkZHIpOworCXBoYmEtPnBjYi0+bWJBZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9hZGRyKTsKIAogCS8qCiAJICogU2V0dXAgSG9zdCBHcm91cCByaW5nIHBvaW50ZXIuCkBAIC03OTQsMTMgKzExNDgsMTMgQEAKIAl9CiAKIAkvKiBtYXNrIG9mZiBCQVIwJ3MgZmxhZyBiaXRzIDAgLSAzICovCi0JcGhiYS0+c2xpbTJwLT5wY2IuaGdwQWRkckxvdyA9IChiYXJfbG93ICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSykgKwotCQkodm9pZCBfX2lvbWVtICopIHBoYmEtPmhvc3RfZ3AgLQorCXBoYmEtPnBjYi0+aGdwQWRkckxvdyA9IChiYXJfbG93ICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSykgKworCQkodm9pZCBfX2lvbWVtICopcGhiYS0+aG9zdF9ncCAtCiAJCSh2b2lkIF9faW9tZW0gKilwaGJhLT5NQnNsaW1hZGRyOwogCWlmIChiYXJfbG93ICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCkKLQkJcGhiYS0+c2xpbTJwLT5wY2IuaGdwQWRkckhpZ2ggPSBiYXJfaGlnaDsKKwkJcGhiYS0+cGNiLT5oZ3BBZGRySGlnaCA9IGJhcl9oaWdoOwogCWVsc2UKLQkJcGhiYS0+c2xpbTJwLT5wY2IuaGdwQWRkckhpZ2ggPSAwOworCQlwaGJhLT5wY2ItPmhncEFkZHJIaWdoID0gMDsKIAkvKiB3cml0ZSBIR1AgZGF0YSB0byBTTElNIGF0IHRoZSByZXF1aXJlZCBsb25nd29yZCBvZmZzZXQgKi8KIAltZW1zZXQoJmhncCwgMCwgc2l6ZW9mKHN0cnVjdCBscGZjX2hncCkpOwogCkBAIC04MTAsMTcgKzExNjQsMTkgQEAKIAl9CiAKIAkvKiBTZXR1cCBQb3J0IEdyb3VwIHJpbmcgcG9pbnRlciAqLwotCWlmIChwaGJhLT5zbGlfcmV2ID09IDMpCi0JCXBncF9vZmZzZXQgPSAodWludDhfdCAqKSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AucG9ydCAtCi0JCQkodWludDhfdCAqKXBoYmEtPnNsaW0ycDsKLQllbHNlCi0JCXBncF9vZmZzZXQgPSAodWludDhfdCAqKSZwaGJhLT5zbGltMnAtPm1ieC51cy5zMi5wb3J0IC0KLQkJCSh1aW50OF90ICopcGhiYS0+c2xpbTJwOwotCi0JcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwX21hcHBpbmcgKyBwZ3Bfb2Zmc2V0OwotCXBoYmEtPnNsaW0ycC0+cGNiLnBncEFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfYWRkcik7Ci0JcGhiYS0+c2xpbTJwLT5wY2IucGdwQWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfYWRkcik7Ci0JcGhiYS0+aGJxX2dldCA9ICZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AuaGJxX2dldFswXTsKKwlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0lOQl9FTkFCTEVEKSB7CisJCXBncF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbHBmY19zbGkyX3NsaW0sCisJCQkJICAgICAgbWJ4LnVzLnMzX2luYl9wZ3AucG9ydCk7CisJCXBoYmEtPmhicV9nZXQgPSBwaGJhLT5tYm94LT51cy5zM19pbmJfcGdwLmhicV9nZXQ7CisJfSBlbHNlIGlmIChwaGJhLT5zbGlfcmV2ID09IDMpIHsKKwkJcGdwX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBscGZjX3NsaTJfc2xpbSwKKwkJCQkgICAgICBtYngudXMuczNfcGdwLnBvcnQpOworCQlwaGJhLT5oYnFfZ2V0ID0gcGhiYS0+bWJveC0+dXMuczNfcGdwLmhicV9nZXQ7CisJfSBlbHNlCisJCXBncF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbHBmY19zbGkyX3NsaW0sIG1ieC51cy5zMi5wb3J0KTsKKwlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnAucGh5cyArIHBncF9vZmZzZXQ7CisJcGhiYS0+cGNiLT5wZ3BBZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX2FkZHIpOworCXBoYmEtPnBjYi0+cGdwQWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfYWRkcik7CiAKIAkvKiBVc2UgY2FsbGJhY2sgcm91dGluZSB0byBzZXRwIHJpbmdzIGluIHRoZSBwY2IgKi8KIAlscGZjX2NvbmZpZ19wY2Jfc2V0dXAocGhiYSk7CkBAIC04MzUsMTAgKzExOTEsMjQgQEAKIAl9CiAKIAkvKiBTd2FwIFBDQiBpZiBuZWVkZWQgKi8KLQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoJnBoYmEtPnNsaW0ycC0+cGNiLCAmcGhiYS0+c2xpbTJwLT5wY2IsCi0JCQkgICAgICBzaXplb2YoUENCX3QpKTsKKwlscGZjX3NsaV9wY2ltZW1fYmNvcHkocGhiYS0+cGNiLCBwaGJhLT5wY2IsIHNpemVvZihQQ0JfdCkpOwogfQogCisvKioKKyAqIGxwZmNfa2lsbF9ib2FyZDogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3Iga2lsbGluZyBib2FyZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUga2lsbCBib2FyZCBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byB0ZWxsIGZpcm13YXJlIHRvIHBlcmZvcm0gYQorICogZ3JhY2VmdWwgc2h1dGRvd24gb2YgYSBjaGFubmVsIG9uIGEgc3BlY2lmaWVkIGJvYXJkIHRvIHByZXBhcmUgZm9yIHJlc2V0LgorICogV2hlbiB0aGUga2lsbCBib2FyZCBtYWlsYm94IGNvbW1hbmQgaXMgcmVjZWl2ZWQsIHRoZSBFUjMgYml0IGlzIHNldCB0byAxCisgKiBpbiB0aGUgSG9zdCBTdGF0dXMgcmVnaXN0ZXIgYW5kIHRoZSBFUiBBdHRlbnRpb24gYml0IGlzIHNldCB0byAxIGluIHRoZQorICogSG9zdCBBdHRlbnRpb24gcmVnaXN0ZXIgb2YgdGhlIEhCQSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVkIHRoZSBraWxsIGJvYXJkCisgKiBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBraWxsaW5nIHRoZSBib2FyZCBpbgorICogcHJlcGFyYXRpb24gZm9yIGEgZ3JhY2VmdWwgc2h1dGRvd24uCisgKiovCiB2b2lkCiBscGZjX2tpbGxfYm9hcmQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtODUwLDYgKzEyMjAsMTYgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19tYm94X3B1dDogUHV0IGEgbWFpbGJveCBjbWQgaW50byB0aGUgdGFpbCBvZiBkcml2ZXIncyBtYWlsYm94IHF1ZXVlLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbWJxOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIERyaXZlciBtYWludGFpbnMgYSBpbnRlcm5hbCBtYWlsYm94IGNvbW1hbmQgcXVldWUgaW1wbGVtZW50ZWQgYXMgYSBsaW5rZWQKKyAqIGxpc3QuIFdoZW4gYSBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkLCBpdCBzaGFsbCBiZSBwdXQgaW50byB0aGUgbWFpbGJveAorICogY29tbWFuZCBxdWV1ZSBzdWNoIHRoYXQgdGhleSBzaGFsbCBiZSBwcm9jZXNzZWQgb3JkZXJseSBhcyBIQkEgY2FuIHByb2Nlc3MKKyAqIG9uZSBtYWlsYm94IGNvbW1hbmQgYXQgYSB0aW1lLgorICoqLwogdm9pZAogbHBmY19tYm94X3B1dChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBtYnEpCiB7CkBAIC04NjQsNiArMTI0NCwyMCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX21ib3hfZ2V0OiBSZW1vdmUgYSBtYWlsYm94IGNtZCBmcm9tIHRoZSBoZWFkIG9mIGRyaXZlcidzIG1haWxib3ggcXVldWUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBEcml2ZXIgbWFpbnRhaW5zIGEgaW50ZXJuYWwgbWFpbGJveCBjb21tYW5kIHF1ZXVlIGltcGxlbWVudGVkIGFzIGEgbGlua2VkCisgKiBsaXN0LiBXaGVuIGEgbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCwgaXQgc2hhbGwgYmUgcHV0IGludG8gdGhlIG1haWxib3gKKyAqIGNvbW1hbmQgcXVldWUgc3VjaCB0aGF0IHRoZXkgc2hhbGwgYmUgcHJvY2Vzc2VkIG9yZGVybHkgYXMgSEJBIGNhbiBwcm9jZXNzCisgKiBvbmUgbWFpbGJveCBjb21tYW5kIGF0IGEgdGltZS4gQWZ0ZXIgSEJBIGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBtYWlsYm94CisgKiBjb21tYW5kLCB0aGUgZHJpdmVyIHdpbGwgcmVtb3ZlIGEgcGVuZGluZyBtYWlsYm94IGNvbW1hbmQgZnJvbSB0aGUgaGVhZCBvZgorICogdGhlIG1haWxib3ggY29tbWFuZCBxdWV1ZSBhbmQgc2VuZCB0byB0aGUgSEJBIGZvciBwcm9jZXNzaW5nLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAgcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqKi8KIExQRkNfTUJPWFFfdCAqCiBscGZjX21ib3hfZ2V0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CkBAIC04NzcsNiArMTI3MSwxNyBAQAogCXJldHVybiBtYnE7CiB9CiAKKy8qKgorICogbHBmY19tYm94X2NtcGxfcHV0OiBQdXQgbWFpbGJveCBjb21tYW5kIGludG8gbWFpbGJveCBjb21tYW5kIGNvbXBsZXRlIGxpc3QuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtYnE6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIHB1dCB0aGUgY29tcGxldGVkIG1haWxib3ggY29tbWFuZCBpbnRvIHRoZSBtYWlsYm94IGNvbW1hbmQKKyAqIGNvbXBsZXRlIGxpc3QuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBkcml2ZXIgaW50ZXJydXB0IGhhbmRsZXIKKyAqIGNvbnRleHQuVGhlIG1haWxib3ggY29tcGxldGUgbGlzdCBpcyB1c2VkIGJ5IHRoZSBkcml2ZXIgd29ya2VyIHRocmVhZAorICogdG8gcHJvY2VzcyBtYWlsYm94IGNvbXBsZXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBkcml2ZXIgaW50ZXJydXB0CisgKiBoYW5kbGVyLgorICoqLwogdm9pZAogbHBmY19tYm94X2NtcGxfcHV0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIG1icSkKIHsKQEAgLTg4Nyw2ICsxMjkyLDE3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfbWJveF90bW9fdmFsOiBSZXRyaWV2ZSBtYWlsYm94IGNvbW1hbmQgdGltZW91dCB2YWx1ZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZDogbWFpbGJveCBjb21tYW5kIGNvZGUuCisgKgorICogVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgcHJvcGVyIHRpbWVvdXQgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBtYWlsYm94CisgKiBjb21tYW5kIGNvZGUuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgICBUaW1lb3V0IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBnaXZlbiBtYWlsYm94IGNvbW1hbmQKKyAqKi8KIGludAogbHBmY19tYm94X3Rtb192YWwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgY21kKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMKaW5kZXggM2MwY2ViYy4uYTRiYmEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IENocmlzdG9waCBIZWxsd2lnICAgICAgICAgICAgICAqCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtMzksNyArNDAsMjEgQEAKICNkZWZpbmUgTFBGQ19NRU1fUE9PTF9TSVpFICAgICAgNjQgICAgICAvKiBtYXggZWxlbSBpbiBub24tRE1BIHNhZmV0eSBwb29sICovCiAKIAotCisvKioKKyAqIGxwZmNfbWVtX2FsbG9jOiBjcmVhdGUgYW5kIGFsbG9jYXRlIGFsbCBQQ0kgYW5kIG1lbW9yeSBwb29scworICogQHBoYmE6IEhCQSB0byBhbGxvY2F0ZSBwb29scyBmb3IKKyAqCisgKiBEZXNjcmlwdGlvbjogQ3JlYXRlcyBhbmQgYWxsb2NhdGVzIFBDSSBwb29scyBscGZjX3Njc2lfZG1hX2J1Zl9wb29sLAorICogbHBmY19tYnVmX3Bvb2wsIGxwZmNfaGJxX3Bvb2wuICBDcmVhdGVzIGFuZCBhbGxvY2F0ZXMga21hbGxvYy1iYWNrZWQgbWVtcG9vbHMKKyAqIGZvciBMUEZDX01CT1hRX3QgYW5kIGxwZmNfbm9kZWxpc3QuICBBbHNvIGFsbG9jYXRlcyB0aGUgVlBJIGJpdG1hc2suCisgKgorICogTm90ZXM6IE5vdCBpbnRlcnJ1cHQtc2FmZS4gIE11c3QgYmUgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZC4gIElmIGFueQorICogYWxsb2NhdGlvbiBmYWlscywgZnJlZXMgYWxsIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgbWVtb3J5IGJlZm9yZSByZXR1cm5pbmcuCisgKgorICogUmV0dXJuczoKKyAqICAgMCBvbiBzdWNjZXNzCisgKiAgIC1FTk9NRU0gb24gZmFpbHVyZSAoaWYgYW55IG1lbW9yeSBhbGxvY2F0aW9ucyBmYWlsKQorICoqLwogaW50CiBscGZjX21lbV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewpAQCAtMTIwLDYgKzEzNSwxNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCisvKioKKyAqIGxwZmNfbWVtX2ZyZWU6IEZyZWVzIGFsbCBQQ0kgYW5kIG1lbW9yeSBhbGxvY2F0ZWQgYnkgbHBmY19tZW1fYWxsb2MKKyAqIEBwaGJhOiBIQkEgdG8gZnJlZSBtZW1vcnkgZm9yCisgKgorICogRGVzY3JpcHRpb246IEZyZWVzIFBDSSBwb29scyBscGZjX3Njc2lfZG1hX2J1Zl9wb29sLCBscGZjX21idWZfcG9vbCwKKyAqIGxwZmNfaGJxX3Bvb2wuICBGcmVlcyBrbWFsbG9jLWJhY2tlZCBtZW1wb29scyBmb3IgTFBGQ19NQk9YUV90IGFuZAorICogbHBmY19ub2RlbGlzdC4gIEFsc28gZnJlZXMgdGhlIFZQSSBiaXRtYXNrLgorICoKKyAqIFJldHVybnM6IE5vbmUKKyAqKi8KIHZvaWQKIGxwZmNfbWVtX2ZyZWUoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKQEAgLTE4MSwxMiArMjA2LDI5IEBACiAJcGhiYS0+bHBmY19zY3NpX2RtYV9idWZfcG9vbCA9IE5VTEw7CiAJcGhiYS0+bHBmY19tYnVmX3Bvb2wgPSBOVUxMOwogCi0JCQkJLyogRnJlZSB0aGUgaW9jYiBsb29rdXAgYXJyYXkgKi8KKwkvKiBGcmVlIHRoZSBpb2NiIGxvb2t1cCBhcnJheSAqLwogCWtmcmVlKHBzbGktPmlvY2JxX2xvb2t1cCk7CiAJcHNsaS0+aW9jYnFfbG9va3VwID0gTlVMTDsKLQogfQogCisvKioKKyAqIGxwZmNfbWJ1Zl9hbGxvYzogQWxsb2NhdGUgYW4gbWJ1ZiBmcm9tIHRoZSBscGZjX21idWZfcG9vbCBQQ0kgcG9vbAorICogQHBoYmE6IEhCQSB3aGljaCBvd25zIHRoZSBwb29sIHRvIGFsbG9jYXRlIGZyb20KKyAqIEBtZW1fZmxhZ3M6IGluZGljYXRlcyBpZiB0aGlzIGlzIGEgcHJpb3JpdHkgKE1FTV9QUkkpIGFsbG9jYXRpb24KKyAqIEBoYW5kbGU6IHVzZWQgdG8gcmV0dXJuIHRoZSBETUEtbWFwcGVkIGFkZHJlc3Mgb2YgdGhlIG1idWYKKyAqCisgKiBEZXNjcmlwdGlvbjogQWxsb2NhdGVzIGEgRE1BLW1hcHBlZCBidWZmZXIgZnJvbSB0aGUgbHBmY19tYnVmX3Bvb2wgUENJIHBvb2wuCisgKiBBbGxvY2F0ZXMgZnJvbSBnZW5lcmljIHBjaV9wb29sX2FsbG9jIGZ1bmN0aW9uIGZpcnN0IGFuZCBpZiB0aGF0IGZhaWxzIGFuZAorICogbWVtX2ZsYWdzIGhhcyBNRU1fUFJJIHNldCAodGhlIG9ubHkgZGVmaW5lZCBmbGFnKSwgcmV0dXJucyBhbiBtYnVmIGZyb20gdGhlCisgKiBIQkEncyBwb29sLgorICoKKyAqIE5vdGVzOiBOb3QgaW50ZXJydXB0LXNhZmUuICBNdXN0IGJlIGNhbGxlZCB3aXRoIG5vIGxvY2tzIGhlbGQuICBUYWtlcworICogcGhiYS0+aGJhbG9jay4KKyAqCisgKiBSZXR1cm5zOgorICogICBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgbWJ1ZiBvbiBzdWNjZXNzCisgKiAgIE5VTEwgb24gZmFpbHVyZQorICoqLwogdm9pZCAqCiBscGZjX21idWZfYWxsb2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgbWVtX2ZsYWdzLCBkbWFfYWRkcl90ICpoYW5kbGUpCiB7CkBAIC0yMDYsNiArMjQ4LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBfX2xwZmNfbWVtX2ZyZWU6IEZyZWUgYW4gbWJ1ZiBmcm9tIHRoZSBscGZjX21idWZfcG9vbCBQQ0kgcG9vbCAobG9ja2VkKQorICogQHBoYmE6IEhCQSB3aGljaCBvd25zIHRoZSBwb29sIHRvIHJldHVybiB0bworICogQHZpcnQ6IG1idWYgdG8gZnJlZQorICogQGRtYTogdGhlIERNQS1tYXBwZWQgYWRkcmVzcyBvZiB0aGUgbHBmY19tYnVmX3Bvb2wgdG8gYmUgZnJlZWQKKyAqCisgKiBEZXNjcmlwdGlvbjogUmV0dXJucyBhbiBtYnVmIGxwZmNfbWJ1Zl9wb29sIHRvIHRoZSBscGZjX21idWZfc2FmZXR5X3Bvb2wgaWYKKyAqIGl0IGlzIGJlbG93IGl0cyBtYXhfY291bnQsIGZyZWVzIHRoZSBtYnVmIG90aGVyd2lzZS4KKyAqCisgKiBOb3RlczogTXVzdCBiZSBjYWxsZWQgd2l0aCBwaGJhLT5oYmFsb2NrIGhlbGQgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvCisgKiBscGZjX21idWZfc2FmZXR5X3Bvb2wuCisgKgorICogUmV0dXJuczogTm9uZQorICoqLwogdm9pZAogX19scGZjX21idWZfZnJlZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB2b2lkICp2aXJ0LCBkbWFfYWRkcl90IGRtYSkKIHsKQEAgLTIyMSw3ICsyNzcsMjEgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19tZW1fZnJlZTogRnJlZSBhbiBtYnVmIGZyb20gdGhlIGxwZmNfbWJ1Zl9wb29sIFBDSSBwb29sICh1bmxvY2tlZCkKKyAqIEBwaGJhOiBIQkEgd2hpY2ggb3ducyB0aGUgcG9vbCB0byByZXR1cm4gdG8KKyAqIEB2aXJ0OiBtYnVmIHRvIGZyZWUKKyAqIEBkbWE6IHRoZSBETUEtbWFwcGVkIGFkZHJlc3Mgb2YgdGhlIGxwZmNfbWJ1Zl9wb29sIHRvIGJlIGZyZWVkCisgKgorICogRGVzY3JpcHRpb246IFJldHVybnMgYW4gbWJ1ZiBscGZjX21idWZfcG9vbCB0byB0aGUgbHBmY19tYnVmX3NhZmV0eV9wb29sIGlmCisgKiBpdCBpcyBiZWxvdyBpdHMgbWF4X2NvdW50LCBmcmVlcyB0aGUgbWJ1ZiBvdGhlcndpc2UuCisgKgorICogTm90ZXM6IFRha2VzIHBoYmEtPmhiYWxvY2suICBDYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBvdGhlciBsb2NrcyBoZWxkLgorICoKKyAqIFJldHVybnM6IE5vbmUKKyAqKi8KIHZvaWQKKwogbHBmY19tYnVmX2ZyZWUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdm9pZCAqdmlydCwgZG1hX2FkZHJfdCBkbWEpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CkBAIC0yMzIsNiArMzAyLDE5IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2hicV9hbGxvYzogQWxsb2NhdGUgYW4gSEJRIGJ1ZmZlcgorICogQHBoYmE6IEhCQSB0byBhbGxvY2F0ZSBIQlEgYnVmZmVyIGZvcgorICoKKyAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZXMgYSBETUEtbWFwcGVkIEhCUSBidWZmZXIgZnJvbSB0aGUgbHBmY19oYnFfcG9vbCBQQ0kKKyAqIHBvb2wgYWxvbmcgYSBub24tRE1BLW1hcHBlZCBjb250YWluZXIgZm9yIGl0LgorICoKKyAqIE5vdGVzOiBOb3QgaW50ZXJydXB0LXNhZmUuICBNdXN0IGJlIGNhbGxlZCB3aXRoIG5vIGxvY2tzIGhlbGQuCisgKgorICogUmV0dXJuczoKKyAqICAgcG9pbnRlciB0byBIQlEgb24gc3VjY2VzcworICogICBOVUxMIG9uIGZhaWx1cmUKKyAqKi8KIHN0cnVjdCBoYnFfZG1hYnVmICoKIGxwZmNfZWxzX2hicV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yNTEsNiArMzM0LDE4IEBACiAJcmV0dXJuIGhicWJwOwogfQogCisvKioKKyAqIGxwZmNfbWVtX2hicV9mcmVlOiBGcmVlcyBhbiBIQlEgYnVmZmVyIGFsbG9jYXRlZCB3aXRoIGxwZmNfZWxzX2hicV9hbGxvYworICogQHBoYmE6IEhCQSBidWZmZXIgd2FzIGFsbG9jYXRlZCBmb3IKKyAqIEBoYnFicDogSEJRIGNvbnRhaW5lciByZXR1cm5lZCBieSBscGZjX2Vsc19oYnFfYWxsb2MKKyAqCisgKiBEZXNjcmlwdGlvbjogRnJlZXMgYm90aCB0aGUgY29udGFpbmVyIGFuZCB0aGUgRE1BLW1hcHBlZCBidWZmZXIgcmV0dXJuZWQgYnkKKyAqIGxwZmNfZWxzX2hicV9hbGxvYy4KKyAqCisgKiBOb3RlczogQ2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgbG9ja3MgaGVsZC4KKyAqCisgKiBSZXR1cm5zOiBOb25lCisgKiovCiB2b2lkCiBscGZjX2Vsc19oYnFfZnJlZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBoYnFfZG1hYnVmICpoYnFicCkKIHsKQEAgLTI1OSw3ICszNTQsMTggQEAKIAlyZXR1cm47CiB9CiAKLS8qIFRoaXMgaXMgT05MWSBjYWxsZWQgZm9yIHRoZSBMUEZDX0VMU19IQlEgKi8KKy8qKgorICogbHBmY19pbl9idWZfZnJlZTogRnJlZSBhIERNQSBidWZmZXIKKyAqIEBwaGJhOiBIQkEgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aAorICogQG1wOiBCdWZmZXIgdG8gZnJlZQorICoKKyAqIERlc2NyaXB0aW9uOiBGcmVlcyB0aGUgZ2l2ZW4gRE1BIGJ1ZmZlciBpbiB0aGUgYXBwcm9wcmlhdGUgd2F5IGdpdmVuIGlmIHRoZQorICogSEJBIGlzIHJ1bm5pbmcgaW4gU0xJMyBtb2RlIHdpdGggSEJRcyBlbmFibGVkLgorICoKKyAqIE5vdGVzOiBUYWtlcyBwaGJhLT5oYmFsb2NrLiAgQ2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgb3RoZXIgbG9ja3MgaGVsZC4KKyAqCisgKiBSZXR1cm5zOiBOb25lCisgKiovCiB2b2lkCiBscGZjX2luX2J1Zl9mcmVlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZG1hYnVmICptcCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNjYjVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCkBAIC0wLDAgKzEsMTYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKKyAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgorICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICoKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCAgICAgICAqCisgKiBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwuICoKKyAqIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCAgICAgICAgICAqCisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCAgKgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSAgICAgICoKKyAqIERJU0NMQUlNRUQsIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFRIQVQgU1VDSCBESVNDTEFJTUVSUyBBUkUgSEVMRCAqCisgKiBUTyBCRSBMRUdBTExZIElOVkFMSUQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciAgKgorICogbW9yZSBkZXRhaWxzLCBhIGNvcHkgb2Ygd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlIENPUFlJTkcgICoKKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRXZlbnQgZGVmaW5pdGlvbnMgZm9yIFJlZ2lzdGVyRm9yRXZlbnQgKi8KKyNkZWZpbmUgRkNfUkVHX0xJTktfRVZFTlQJCTB4MDAwMQkvKiBsaW5rIHVwIC8gZG93biBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX1JTQ05fRVZFTlQJCTB4MDAwMgkvKiBSU0NOIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfQ1RfRVZFTlQJCQkweDAwMDQJLyogQ1QgcmVxdWVzdCBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX0RVTVBfRVZFTlQJCTB4MDAwOAkvKiBEdW1wIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfVEVNUEVSQVRVUkVfRVZFTlQJMHgwMDEwCS8qIHRlbXBlcmF0dXJlIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfRUxTX0VWRU5UCQkweDAwMjAJLyogbHBmYyBlbHMgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19GQUJSSUNfRVZFTlQJCTB4MDA0MAkvKiBscGZjIGZhYnJpYyBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX1NDU0lfRVZFTlQJCTB4MDA4MAkvKiBscGZjIHNjc2kgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19CT0FSRF9FVkVOVAkJMHgwMTAwCS8qIGxwZmMgYm9hcmQgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19BREFQVEVSX0VWRU5UCQkweDAyMDAJLyogbHBmYyBhZGFwdGVyIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfRVZFTlRfTUFTSwkJKEZDX1JFR19MSU5LX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX1JTQ05fRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfQ1RfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfRFVNUF9FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19URU1QRVJBVFVSRV9FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19FTFNfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfRkFCUklDX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX1NDU0lfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfQk9BUkRfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfQURBUFRFUl9FVkVOVCkKKy8qIFRlbXBlcmF0dXJlIGV2ZW50cyAqLworI2RlZmluZSBMUEZDX0NSSVRfVEVNUAkJMHgxCisjZGVmaW5lIExQRkNfVEhSRVNIT0xEX1RFTVAJMHgyCisjZGVmaW5lIExQRkNfTk9STUFMX1RFTVAJMHgzCisvKgorICogQWxsIG5ldCBsaW5rIGV2ZW50IHBheWxvYWRzIHdpbGwgYmVnaW4gd2l0aCBhbmQgZXZlbnQgdHlwZQorICogYW5kIHN1YmNhdGVnb3J5LiBUaGUgZXZlbnQgdHlwZSBtdXN0IGNvbWUgZmlyc3QuCisgKiBUaGUgc3ViY2F0ZWdvcnkgZnVydGhlciBkZWZpbmVzIHRoZSBkYXRhIHRoYXQgZm9sbG93cyBpbiB0aGUgcmVzdAorICogb2YgdGhlIHBheWxvYWQuIEVhY2ggY2F0ZWdvcnkgd2lsbCBoYXZlIGl0cyBvd24gdW5pcXVlIGhlYWRlciBwbHVzCisgKiBhbnkgYWRkdGlvbmFsIGRhdGEgdW5pcXVlIHRvIHRoZSBzdWJjYXRlZ29yeS4KKyAqIFRoZSBwYXlsb2FkIHNlbnQgdmlhIHRoZSBmYyB0cmFuc3BvcnQgaXMgb25lLXdheSBkcml2ZXItPmFwcGxpY2F0aW9uLgorICovCisKKy8qIGVscyBldmVudCBoZWFkZXIgKi8KK3N0cnVjdCBscGZjX2Vsc19ldmVudF9oZWFkZXIgeworCXVpbnQzMl90IGV2ZW50X3R5cGU7CisJdWludDMyX3Qgc3ViY2F0ZWdvcnk7CisJdWludDhfdCB3d3BuWzhdOworCXVpbnQ4X3Qgd3dubls4XTsKK307CisKKy8qIHN1YmNhdGVnb3J5IGNvZGVzIGZvciBGQ19SRUdfRUxTX0VWRU5UICovCisjZGVmaW5lIExQRkNfRVZFTlRfUExPR0lfUkNWCQkweDAxCisjZGVmaW5lIExQRkNfRVZFTlRfUFJMT19SQ1YJCTB4MDIKKyNkZWZpbmUgTFBGQ19FVkVOVF9BRElTQ19SQ1YJCTB4MDQKKyNkZWZpbmUgTFBGQ19FVkVOVF9MU1JKVF9SQ1YJCTB4MDgKKworLyogc3BlY2lhbCBlbHMgbHNyanQgZXZlbnQgKi8KK3N0cnVjdCBscGZjX2xzcmp0X2V2ZW50IHsKKwlzdHJ1Y3QgbHBmY19lbHNfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IHJlYXNvbl9jb2RlOworCXVpbnQzMl90IGV4cGxhbmF0aW9uOworfTsKKworCisvKiBmYWJyaWMgZXZlbnQgaGVhZGVyICovCitzdHJ1Y3QgbHBmY19mYWJyaWNfZXZlbnRfaGVhZGVyIHsKKwl1aW50MzJfdCBldmVudF90eXBlOworCXVpbnQzMl90IHN1YmNhdGVnb3J5OworCXVpbnQ4X3Qgd3dwbls4XTsKKwl1aW50OF90IHd3bm5bOF07Cit9OworCisvKiBzdWJjYXRlZ29yeSBjb2RlcyBmb3IgRkNfUkVHX0ZBQlJJQ19FVkVOVCAqLworI2RlZmluZSBMUEZDX0VWRU5UX0ZBQlJJQ19CVVNZCQkweDAxCisjZGVmaW5lIExQRkNfRVZFTlRfUE9SVF9CVVNZCQkweDAyCisjZGVmaW5lIExQRkNfRVZFTlRfRkNQUkRDSEtFUlIJCTB4MDQKKworLyogc3BlY2lhbCBjYXNlIGZhYnJpYyBmY3ByZGNoa2VyciBldmVudCAqLworc3RydWN0IGxwZmNfZmNwcmRjaGtlcnJfZXZlbnQgeworCXN0cnVjdCBscGZjX2ZhYnJpY19ldmVudF9oZWFkZXIgaGVhZGVyOworCXVpbnQzMl90IGx1bjsKKwl1aW50MzJfdCBvcGNvZGU7CisJdWludDMyX3QgZmNwaXBhcmFtOworfTsKKworCisvKiBzY3NpIGV2ZW50IGhlYWRlciAqLworc3RydWN0IGxwZmNfc2NzaV9ldmVudF9oZWFkZXIgeworCXVpbnQzMl90IGV2ZW50X3R5cGU7CisJdWludDMyX3Qgc3ViY2F0ZWdvcnk7CisJdWludDMyX3QgbHVuOworCXVpbnQ4X3Qgd3dwbls4XTsKKwl1aW50OF90IHd3bm5bOF07Cit9OworCisvKiBzdWJjYXRlZ29yeSBjb2RlcyBmb3IgRkNfUkVHX1NDU0lfRVZFTlQgKi8KKyNkZWZpbmUgTFBGQ19FVkVOVF9RRlVMTAkweDAwMDEKKyNkZWZpbmUgTFBGQ19FVkVOVF9ERVZCU1kJMHgwMDAyCisjZGVmaW5lIExQRkNfRVZFTlRfQ0hFQ0tfQ09ORAkweDAwMDQKKyNkZWZpbmUgTFBGQ19FVkVOVF9MVU5SRVNFVAkweDAwMDgKKyNkZWZpbmUgTFBGQ19FVkVOVF9UR1RSRVNFVAkweDAwMTAKKyNkZWZpbmUgTFBGQ19FVkVOVF9CVVNSRVNFVAkweDAwMjAKKyNkZWZpbmUgTFBGQ19FVkVOVF9WQVJRVUVERVBUSAkweDAwNDAKKworLyogc3BlY2lhbCBjYXNlIHNjc2kgdmFycXVldWVkZXB0aCBldmVudCAqLworc3RydWN0IGxwZmNfc2NzaV92YXJxdWV1ZWRlcHRoX2V2ZW50IHsKKwlzdHJ1Y3QgbHBmY19zY3NpX2V2ZW50X2hlYWRlciBzY3NpX2V2ZW50OworCXVpbnQzMl90IG9sZHZhbDsKKwl1aW50MzJfdCBuZXd2YWw7Cit9OworCisvKiBzcGVjaWFsIGNhc2Ugc2NzaSBjaGVjayBjb25kaXRpb24gZXZlbnQgKi8KK3N0cnVjdCBscGZjX3Njc2lfY2hlY2tfY29uZGl0aW9uX2V2ZW50IHsKKwlzdHJ1Y3QgbHBmY19zY3NpX2V2ZW50X2hlYWRlciBzY3NpX2V2ZW50OworCXVpbnQ4X3Qgc2Vuc2Vfa2V5OworCXVpbnQ4X3QgYXNjOworCXVpbnQ4X3QgYXNjcTsKK307CisKKy8qIGV2ZW50IGNvZGVzIGZvciBGQ19SRUdfQk9BUkRfRVZFTlQgKi8KKyNkZWZpbmUgTFBGQ19FVkVOVF9QT1JUSU5URVJSCQkweDAxCisKKy8qIGJvYXJkIGV2ZW50IGhlYWRlciAqLworc3RydWN0IGxwZmNfYm9hcmRfZXZlbnRfaGVhZGVyIHsKKwl1aW50MzJfdCBldmVudF90eXBlOworCXVpbnQzMl90IHN1YmNhdGVnb3J5OworfTsKKworCisvKiBldmVudCBjb2RlcyBmb3IgRkNfUkVHX0FEQVBURVJfRVZFTlQgKi8KKyNkZWZpbmUgTFBGQ19FVkVOVF9BUlJJVkFMCTB4MDEKKworLyogYWRhcHRlciBldmVudCBoZWFkZXIgKi8KK3N0cnVjdCBscGZjX2FkYXB0ZXJfZXZlbnRfaGVhZGVyIHsKKwl1aW50MzJfdCBldmVudF90eXBlOworCXVpbnQzMl90IHN1YmNhdGVnb3J5OworfTsKKworCisvKiBldmVudCBjb2RlcyBmb3IgdGVtcF9ldmVudCAqLworI2RlZmluZSBMUEZDX0NSSVRfVEVNUAkJMHgxCisjZGVmaW5lIExQRkNfVEhSRVNIT0xEX1RFTVAJMHgyCisjZGVmaW5lIExQRkNfTk9STUFMX1RFTVAJMHgzCisKK3N0cnVjdCB0ZW1wX2V2ZW50IHsKKwl1aW50MzJfdCBldmVudF90eXBlOworCXVpbnQzMl90IGV2ZW50X2NvZGU7CisJdWludDMyX3QgZGF0YTsKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCmluZGV4IDY2ODhhODYuLjBjMjVkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTEwMDMsMjAgKzEwMDQsOCBAQAogCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0KLQkJCWlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpIHsKKwkJCWlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpCiAJCQkJbHBmY19tb3JlX2FkaXNjKHZwb3J0KTsKLQkJCQlpZiAoKHZwb3J0LT5udW1fZGlzY19ub2RlcyA9PSAwKSAmJgotCQkJCSAgICAodnBvcnQtPmZjX25wcl9jbnQpKQotCQkJCQlscGZjX2Vsc19kaXNjX3Bsb2dpKHZwb3J0KTsKLQkJCQlpZiAodnBvcnQtPm51bV9kaXNjX25vZGVzID09IDApIHsKLQkJCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQkJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKLQkJCQkJbHBmY19lbmRfcnNjbih2cG9ydCk7Ci0JCQkJfQotCQkJfQogCQl9CiAJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQpAQCAtMTg2NSw4ICsxODU0LDEzIEBACiBscGZjX2NtcGxfbG9nb19ucHJfbm9kZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkJdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCiB7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOworCWlmIChuZGxwLT5ubHBfRElEID09IEZhYnJpY19ESUQpIHsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJdnBvcnQtPmZjX2ZsYWcgJj0gfihGQ19GQUJSSUMgfCBGQ19QVUJMSUNfTE9PUCk7CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl9CiAJbHBmY191bnJlZ19ycGkodnBvcnQsIG5kbHApOwotCS8qIFRoaXMgcm91dGluZSBkb2VzIG5vdGhpbmcsIGp1c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlICovCiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMjE1NSw3ICsyMTQ5LDcgQEAKIAkJbHBmY19ubHBfcHV0KG5kbHApOwogCX0gZWxzZSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0RJU0NPVkVSWSwKLQkJCSIwMjEyIERTTSBvdXQgc3RhdGUgJWQgb24gTlBvcnQgZnJlZVxuIiwgcmMpOworCQkJIjAyMTMgRFNNIG91dCBzdGF0ZSAlZCBvbiBOUG9ydCBmcmVlXG4iLCByYyk7CiAKIAkJbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjKHZwb3J0LCBMUEZDX0RJU0NfVFJDX0RTTSwKIAkJCSJEU00gb3V0OiAgICAgICAgIHN0ZTolZCBkaWQ6eCV4IGZsZzp4JXgiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCAxYmNlYmJkLi5iZDE4Njc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImxwZmNfdmVyc2lvbi5oIgogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC00Miw2ICs0MywxMTEgQEAKICNkZWZpbmUgTFBGQ19SRVNFVF9XQUlUICAyCiAjZGVmaW5lIExQRkNfQUJPUlRfV0FJVCAgMgogCisvKioKKyAqIGxwZmNfdXBkYXRlX3N0YXRzOiBVcGRhdGUgc3RhdGlzdGljYWwgZGF0YSBmb3IgdGhlIGNvbW1hbmQgY29tcGxldGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBvYmplY3QuCisgKiBAbHBmY19jbWQ6IGxwZmMgc2NzaSBjb21tYW5kIG9iamVjdCBwb2ludGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBjb21tYW5kIGNvbXBsZXRpb24gYW5kIHRoaXMKKyAqIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIHN0YXRpc3RpY2FsIGRhdGEgZm9yIHRoZSBjb21tYW5kIGNvbXBsZXRpb24uCisgKiovCitzdGF0aWMgdm9pZAorbHBmY191cGRhdGVfc3RhdHMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgIGxwZmNfc2NzaV9idWYgKmxwZmNfY21kKQoreworCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gbHBmY19jbWQtPnJkYXRhOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpwbm9kZSA9IHJkYXRhLT5wbm9kZTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBscGZjX2NtZC0+cENtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CisJdW5zaWduZWQgbG9uZyBsYXRlbmN5OworCWludCBpOworCisJaWYgKGNtZC0+cmVzdWx0KQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKCF2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQgfHwKKwkJdnBvcnQtPnN0YXRfZGF0YV9ibG9ja2VkIHx8CisJCSFwbm9kZS0+bGF0X2RhdGEgfHwKKwkJKHBoYmEtPmJ1Y2tldF90eXBlID09IExQRkNfTk9fQlVDS0VUKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlsYXRlbmN5ID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbHBmY19jbWQtPnN0YXJ0X3RpbWUpOworCisJaWYgKHBoYmEtPmJ1Y2tldF90eXBlID09IExQRkNfTElORUFSX0JVQ0tFVCkgeworCQlpID0gKGxhdGVuY3kgKyBwaGJhLT5idWNrZXRfc3RlcCAtIDEgLSBwaGJhLT5idWNrZXRfYmFzZSkvCisJCQlwaGJhLT5idWNrZXRfc3RlcDsKKwkJaWYgKGkgPj0gTFBGQ19NQVhfQlVDS0VUX0NPVU5UKQorCQkJaSA9IExQRkNfTUFYX0JVQ0tFVF9DT1VOVDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NQVhfQlVDS0VUX0NPVU5ULTE7IGkrKykKKwkJCWlmIChsYXRlbmN5IDw9IChwaGJhLT5idWNrZXRfYmFzZSArCisJCQkJKCgxPDxpKSpwaGJhLT5idWNrZXRfc3RlcCkpKQorCQkJCWJyZWFrOworCX0KKworCXBub2RlLT5sYXRfZGF0YVtpXS5jbWRfY291bnQrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKK30KKworCisvKioKKyAqIGxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50OiBQb3N0cyBhIHF1ZXVlZGVwdGggY2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICBldmVudC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCisgKiBAbmRscDogUG9pbnRlciB0byBGQyBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0LgorICogQGx1bjogTHVuIG51bWJlciBvZiB0aGUgc2NzaSBkZXZpY2UuCisgKiBAb2xkX3ZhbDogT2xkIHZhbHVlIG9mIHRoZSBxdWV1ZSBkZXB0aC4KKyAqIEBuZXdfdmFsOiBOZXcgdmFsdWUgb2YgdGhlIHF1ZXVlIGRlcHRoLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnQgdG8gdGhlIG1nbXQgYXBwbGljYXRpb24gaW5kaWNhdGluZworICogdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJc3RydWN0IGxwZmNfdnBvcnQgICp2cG9ydCwKKwkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCisJCXVpbnQzMl90IGx1biwKKwkJdWludDMyX3Qgb2xkX3ZhbCwKKwkJdWludDMyX3QgbmV3X3ZhbCkKK3sKKwlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfcGF0aF9ldnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOworCWlmICghZmFzdF9wYXRoX2V2dCkKKwkJcmV0dXJuOworCisJZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQuZXZlbnRfdHlwZSA9CisJCUZDX1JFR19TQ1NJX0VWRU5UOworCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50LnN1YmNhdGVnb3J5ID0KKwkJTFBGQ19FVkVOVF9WQVJRVUVERVBUSDsKKworCS8qIFJlcG9ydCBhbGwgbHVucyB3aXRoIGNoYW5nZSBpbiBxdWV1ZSBkZXB0aCAqLworCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50Lmx1biA9IGx1bjsKKwlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dwbiwKKwkJCSZuZGxwLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dubiwKKwkJCSZuZGxwLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJfQorCisJZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm9sZHZhbCA9IG9sZF92YWw7CisJZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm5ld3ZhbCA9IG5ld192YWw7CisJZmFzdF9wYXRoX2V2dC0+dnBvcnQgPSB2cG9ydDsKKworCWZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dCA9IExQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZUOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0X2xpc3RwLCAmcGhiYS0+d29ya19saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKKworCXJldHVybjsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkIHdoZW4gdGhlcmUgaXMgYSByZXNvdXJjZQogICogZXJyb3IgaW4gZHJpdmVyIG9yIGluIGZpcm13YXJlLgpAQCAtMTE3LDkgKzIyMywxMCBAQAogCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7Ci0JdW5zaWduZWQgbG9uZyBuZXdfcXVldWVfZGVwdGg7CisJdW5zaWduZWQgbG9uZyBuZXdfcXVldWVfZGVwdGgsIG9sZF9xdWV1ZV9kZXB0aDsKIAl1bnNpZ25lZCBsb25nIG51bV9yc3JjX2VyciwgbnVtX2NtZF9zdWNjZXNzOwogCWludCBpOworCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhOwogCiAJbnVtX3JzcmNfZXJyID0gYXRvbWljX3JlYWQoJnBoYmEtPm51bV9yc3JjX2Vycik7CiAJbnVtX2NtZF9zdWNjZXNzID0gYXRvbWljX3JlYWQoJnBoYmEtPm51bV9jbWRfc3VjY2Vzcyk7CkBAIC0xMzcsNiArMjQ0LDcgQEAKIAkJCQllbHNlCiAJCQkJCW5ld19xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoIC0KIAkJCQkJCQkJbmV3X3F1ZXVlX2RlcHRoOworCQkJCW9sZF9xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoOwogCQkJCWlmIChzZGV2LT5vcmRlcmVkX3RhZ3MpCiAJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsCiAJCQkJCQkJTVNHX09SREVSRURfVEFHLApAQCAtMTQ1LDYgKzI1MywxMyBAQAogCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAogCQkJCQkJCU1TR19TSU1QTEVfVEFHLAogCQkJCQkJCW5ld19xdWV1ZV9kZXB0aCk7CisJCQkJcmRhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKKwkJCQlpZiAocmRhdGEpCisJCQkJCWxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KAorCQkJCQkJcGhiYSwgdnBvcnRzW2ldLAorCQkJCQkJcmRhdGEtPnBub2RlLAorCQkJCQkJc2Rldi0+bHVuLCBvbGRfcXVldWVfZGVwdGgsCisJCQkJCQluZXdfcXVldWVfZGVwdGgpOwogCQkJfQogCQl9CiAJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKQEAgLTE1OSw2ICsyNzQsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJaW50IGk7CisJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGE7CiAKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwogCWlmICh2cG9ydHMgIT0gTlVMTCkKQEAgLTE3Niw2ICsyOTIsMTQgQEAKIAkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwKIAkJCQkJCQlNU0dfU0lNUExFX1RBRywKIAkJCQkJCQlzZGV2LT5xdWV1ZV9kZXB0aCsxKTsKKwkJCQlyZGF0YSA9IHNkZXYtPmhvc3RkYXRhOworCQkJCWlmIChyZGF0YSkKKwkJCQkJbHBmY19zZW5kX3NkZXZfcXVldWVkZXB0aF9jaGFuZ2VfZXZlbnQoCisJCQkJCQlwaGJhLCB2cG9ydHNbaV0sCisJCQkJCQlyZGF0YS0+cG5vZGUsCisJCQkJCQlzZGV2LT5sdW4sCisJCQkJCQlzZGV2LT5xdWV1ZV9kZXB0aCAtIDEsCisJCQkJCQlzZGV2LT5xdWV1ZV9kZXB0aCk7CiAJCQl9CiAJCX0KIAlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwpAQCAtMTgzLDYgKzMwNywzNSBAQAogCWF0b21pY19zZXQoJnBoYmEtPm51bV9jbWRfc3VjY2VzcywgMCk7CiB9CiAKKy8qKgorICogbHBmY19zY3NpX2Rldl9ibG9jazogc2V0IGFsbCBzY3NpIGhvc3RzIHRvIGJsb2NrIHN0YXRlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdnBvcnQgbGlzdCBhbmQgc2V0IGVhY2ggU0NTSSBob3N0IHRvIGJsb2NrIHN0YXRlCisgKiBieSBpbnZva2luZyBmY19yZW1vdGVfcG9ydF9kZWxldGUoKSByb3V0aW5lLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQKKyAqIHdpdGggRUVIIHdoZW4gZGV2aWNlJ3MgUENJIHNsb3QgaGFzIGJlZW4gcGVybWFuZW50bHkgZGlzYWJsZWQuCisgKiovCit2b2lkCitscGZjX3Njc2lfZGV2X2Jsb2NrKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJaW50IGk7CisKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMgIT0gTlVMTCkKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2Rldiwgc2hvc3QpIHsKKwkJCQlycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoc2RldikpOworCQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShycG9ydCk7CisJCQl9CisJCX0KKwlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworfQorCiAvKgogICogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBhIHNjc2kgYnVmZmVyLCB3aGljaCBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeQogICogaW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYXRlIGEgU0NTSSBJL08uICBUaGUgbm9uLURNQWFibGUgYnVmZmVyIHJlZ2lvbgpAQCAtMTk4LDcgKzM1MSw5IEBACiAJc3RydWN0IGxwZmNfc2NzaV9idWYgKnBzYjsKIAlzdHJ1Y3QgdWxwX2JkZTY0ICpicGw7CiAJSU9DQl90ICppb2NiOwotCWRtYV9hZGRyX3QgcGRtYV9waHlzOworCWRtYV9hZGRyX3QgcGRtYV9waHlzX2ZjcF9jbWQ7CisJZG1hX2FkZHJfdCBwZG1hX3BoeXNfZmNwX3JzcDsKKwlkbWFfYWRkcl90IHBkbWFfcGh5c19icGw7CiAJdWludDE2X3QgaW90YWc7CiAKIAlwc2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19zY3NpX2J1ZiksIEdGUF9LRVJORUwpOwpAQCAtMjM4LDQwICszOTMsNjAgQEAKIAogCS8qIEluaXRpYWxpemUgbG9jYWwgc2hvcnQtaGFuZCBwb2ludGVycy4gKi8KIAlicGwgPSBwc2ItPmZjcF9icGw7Ci0JcGRtYV9waHlzID0gcHNiLT5kbWFfaGFuZGxlOworCXBkbWFfcGh5c19mY3BfY21kID0gcHNiLT5kbWFfaGFuZGxlOworCXBkbWFfcGh5c19mY3BfcnNwID0gcHNiLT5kbWFfaGFuZGxlICsgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCk7CisJcGRtYV9waHlzX2JwbCA9IHBzYi0+ZG1hX2hhbmRsZSArIHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpICsKKwkJCXNpemVvZihzdHJ1Y3QgZmNwX3JzcCk7CiAKIAkvKgogCSAqIFRoZSBmaXJzdCB0d28gYmRlcyBhcmUgdGhlIEZDUF9DTUQgYW5kIEZDUF9SU1AuICBUaGUgYmFsYW5jZSBhcmUgc2cKIAkgKiBsaXN0IGJkZXMuICBJbml0aWFsaXplIHRoZSBmaXJzdCB0d28gYW5kIGxlYXZlIHRoZSByZXN0IGZvcgogCSAqIHF1ZXVlY29tbWFuZC4KIAkgKi8KLQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHBkbWFfcGh5cykpOwotCWJwbC0+YWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KHBkbWFfcGh5cykpOwotCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNpemVvZiAoc3RydWN0IGZjcF9jbW5kKTsKLQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9VU0VfQ01ORDsKLQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7Ci0JYnBsKys7CisJYnBsWzBdLmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfY21kKSk7CisJYnBsWzBdLmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhwZG1hX3BoeXNfZmNwX2NtZCkpOworCWJwbFswXS50dXMuZi5iZGVTaXplID0gc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCk7CisJYnBsWzBdLnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwlicGxbMF0udHVzLncgPSBsZTMyX3RvX2NwdShicGwtPnR1cy53KTsKIAogCS8qIFNldHVwIHRoZSBwaHlzaWNhbCByZWdpb24gZm9yIHRoZSBGQ1AgUlNQICovCi0JcGRtYV9waHlzICs9IHNpemVvZiAoc3RydWN0IGZjcF9jbW5kKTsKLQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHBkbWFfcGh5cykpOwotCWJwbC0+YWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KHBkbWFfcGh5cykpOwotCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNpemVvZiAoc3RydWN0IGZjcF9yc3ApOwotCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSAoQlVGRl9VU0VfQ01ORCB8IEJVRkZfVVNFX1JDVik7Ci0JYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCWJwbFsxXS5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChwZG1hX3BoeXNfZmNwX3JzcCkpOworCWJwbFsxXS5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocGRtYV9waHlzX2ZjcF9yc3ApKTsKKwlicGxbMV0udHVzLmYuYmRlU2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmNwX3JzcCk7CisJYnBsWzFdLnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwlicGxbMV0udHVzLncgPSBsZTMyX3RvX2NwdShicGwtPnR1cy53KTsKIAogCS8qCiAJICogU2luY2UgdGhlIElPQ0IgZm9yIHRoZSBGQ1AgSS9PIGlzIGJ1aWx0IGludG8gdGhpcyBscGZjX3Njc2lfYnVmLAogCSAqIGluaXRpYWxpemUgaXQgd2l0aCBhbGwga25vd24gZGF0YSBub3cuCiAJICovCi0JcGRtYV9waHlzICs9IChzaXplb2YgKHN0cnVjdCBmY3BfcnNwKSk7CiAJaW9jYiA9ICZwc2ItPmN1cl9pb2NicS5pb2NiOwogCWlvY2ItPnVuLmZjcGk2NC5iZGwudWxwSW9UYWczMiA9IDA7Ci0JaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX3BoeXMpOwotCWlvY2ItPnVuLmZjcGk2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfcGh5cyk7Ci0JaW9jYi0+dW4uZmNwaTY0LmJkbC5iZGVTaXplID0gKDIgKiBzaXplb2YgKHN0cnVjdCB1bHBfYmRlNjQpKTsKLQlpb2NiLT51bi5mY3BpNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JETDsKLQlpb2NiLT51bHBCZGVDb3VudCA9IDE7CisJaWYgKHBoYmEtPnNsaV9yZXYgPT0gMykgeworCQkvKiBmaWxsIGluIGltbWVkaWF0ZSBmY3AgY29tbWFuZCBCREUgKi8KKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfSU1NRUQ7CisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYmRlU2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpOworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmFkZHJMb3cgPSBvZmZzZXRvZihJT0NCX3QsCisJCQkJCQkgICAgICAgdW5zbGkzLmZjcF9leHQuaWNkKTsKKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRySGlnaCA9IDA7CisJCWlvY2ItPnVscEJkZUNvdW50ID0gMDsKKwkJaW9jYi0+dWxwTGUgPSAwOworCQkvKiBmaWxsIGluIHJlc3BvbmNlIEJERSAqLworCQlpb2NiLT51bnNsaTMuZmNwX2V4dC5yYmRlLnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwkJaW9jYi0+dW5zbGkzLmZjcF9leHQucmJkZS50dXMuZi5iZGVTaXplID0KKwkJCQkJCXNpemVvZihzdHJ1Y3QgZmNwX3JzcCk7CisJCWlvY2ItPnVuc2xpMy5mY3BfZXh0LnJiZGUuYWRkckxvdyA9CisJCQkJCQlwdXRQYWRkckxvdyhwZG1hX3BoeXNfZmNwX3JzcCk7CisJCWlvY2ItPnVuc2xpMy5mY3BfZXh0LnJiZGUuYWRkckhpZ2ggPQorCQkJCQkJcHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfcnNwKTsKKwl9IGVsc2UgeworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5iZGVTaXplID0gKDIgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpOworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX3BoeXNfYnBsKTsKKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX3BoeXNfYnBsKTsKKwkJaW9jYi0+dWxwQmRlQ291bnQgPSAxOworCQlpb2NiLT51bHBMZSA9IDE7CisJfQogCWlvY2ItPnVscENsYXNzID0gQ0xBU1MzOwogCiAJcmV0dXJuIHBzYjsKQEAgLTMxMyw4ICs0ODgsOSBAQAogCXN0cnVjdCBmY3BfY21uZCAqZmNwX2NtbmQgPSBscGZjX2NtZC0+ZmNwX2NtbmQ7CiAJc3RydWN0IHVscF9iZGU2NCAqYnBsID0gbHBmY19jbWQtPmZjcF9icGw7CiAJSU9DQl90ICppb2NiX2NtZCA9ICZscGZjX2NtZC0+Y3VyX2lvY2JxLmlvY2I7CisJc3RydWN0IHVscF9iZGU2NCAqZGF0YV9iZGUgPSBpb2NiX2NtZC0+dW5zbGkzLmZjcF9leHQuZGJkZTsKIAlkbWFfYWRkcl90IHBoeXNhZGRyOwotCXVpbnQzMl90IGksIG51bV9iZGUgPSAwOworCXVpbnQzMl90IG51bV9iZGUgPSAwOwogCWludCBuc2VnLCBkYXRhZGlyID0gc2NzaV9jbW5kLT5zY19kYXRhX2RpcmVjdGlvbjsKIAogCS8qCkBAIC0zNTIsMzcgKzUyOCwxNTkgQEAKIAkJICogZHVyaW5nIHByb2JlIHRoYXQgbGltaXRzIHRoZSBudW1iZXIgb2Ygc2cgZWxlbWVudHMgaW4gYW55CiAJCSAqIHNpbmdsZSBzY3NpIGNvbW1hbmQuICBKdXN0IHJ1biB0aHJvdWdoIHRoZSBzZWdfY250IGFuZCBmb3JtYXQKIAkJICogdGhlIGJkZSdzLgorCQkgKiBXaGVuIHVzaW5nIFNMSS0zIHRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gZml0IGFsbCB0aGUgQkRFcyBpbnRvCisJCSAqIHRoZSBJT0NCLiBJZiBpdCBjYW4ndCB0aGVuIHRoZSBCREVzIGdldCBhZGRlZCB0byBhIEJQTCBhcyBpdAorCQkgKiBkb2VzIGZvciBTTEktMiBtb2RlLgogCQkgKi8KLQkJc2NzaV9mb3JfZWFjaF9zZyhzY3NpX2NtbmQsIHNnZWwsIG5zZWcsIGkpIHsKKwkJc2NzaV9mb3JfZWFjaF9zZyhzY3NpX2NtbmQsIHNnZWwsIG5zZWcsIG51bV9iZGUpIHsKIAkJCXBoeXNhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2dlbCk7Ci0JCQlicGwtPmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhwaHlzYWRkcikpOwotCQkJYnBsLT5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChwaHlzYWRkcikpOwotCQkJYnBsLT50dXMuZi5iZGVTaXplID0gc2dfZG1hX2xlbihzZ2VsKTsKLQkJCWlmIChkYXRhZGlyID09IERNQV9UT19ERVZJQ0UpCi0JCQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IDA7Ci0JCQllbHNlCi0JCQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVVNFX1JDVjsKLQkJCWJwbC0+dHVzLncgPSBsZTMyX3RvX2NwdShicGwtPnR1cy53KTsKLQkJCWJwbCsrOwotCQkJbnVtX2JkZSsrOworCQkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gMyAmJgorCQkJICAgIG5zZWcgPD0gTFBGQ19FWFRfREFUQV9CREVfQ09VTlQpIHsKKwkJCQlkYXRhX2JkZS0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCQkJCWRhdGFfYmRlLT50dXMuZi5iZGVTaXplID0gc2dfZG1hX2xlbihzZ2VsKTsKKwkJCQlkYXRhX2JkZS0+YWRkckxvdyA9IHB1dFBhZGRyTG93KHBoeXNhZGRyKTsKKwkJCQlkYXRhX2JkZS0+YWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGh5c2FkZHIpOworCQkJCWRhdGFfYmRlKys7CisJCQl9IGVsc2UgeworCQkJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCQkJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNnX2RtYV9sZW4oc2dlbCk7CisJCQkJYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCQkJCWJwbC0+YWRkckxvdyA9CisJCQkJCWxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KHBoeXNhZGRyKSk7CisJCQkJYnBsLT5hZGRySGlnaCA9CisJCQkJCWxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChwaHlzYWRkcikpOworCQkJCWJwbCsrOworCQkJfQogCQl9CiAJfQogCiAJLyoKIAkgKiBGaW5pc2ggaW5pdGlhbGl6aW5nIHRob3NlIElPQ0IgZmllbGRzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUKLQkgKiBzY3NpX2NtbmQgcmVxdWVzdF9idWZmZXIuICBOb3RlIHRoYXQgdGhlIGJkZVNpemUgaXMgZXhwbGljaXRseQotCSAqIHJlaW5pdGlhbGl6ZWQgc2luY2UgYWxsIGlvY2IgbWVtb3J5IHJlc291cmNlcyBhcmUgdXNlZCBtYW55IHRpbWVzCi0JICogZm9yIHRyYW5zbWl0LCByZWNlaXZlLCBhbmQgY29udGludWF0aW9uIGJwbCdzLgorCSAqIHNjc2lfY21uZCByZXF1ZXN0X2J1ZmZlci4gIE5vdGUgdGhhdCBmb3IgU0xJLTIgdGhlIGJkZVNpemUgaXMKKwkgKiBleHBsaWNpdGx5IHJlaW5pdGlhbGl6ZWQgYW5kIGZvciBTTEktMyB0aGUgZXh0ZW5kZWQgYmRlIGNvdW50IGlzCisJICogZXhwbGljaXRseSByZWluaXRpYWxpemVkIHNpbmNlIGFsbCBpb2NiIG1lbW9yeSByZXNvdXJjZXMgYXJlIHJldXNlZC4KIAkgKi8KLQlpb2NiX2NtZC0+dW4uZmNwaTY0LmJkbC5iZGVTaXplID0gKDIgKiBzaXplb2YgKHN0cnVjdCB1bHBfYmRlNjQpKTsKLQlpb2NiX2NtZC0+dW4uZmNwaTY0LmJkbC5iZGVTaXplICs9Ci0JCShudW1fYmRlICogc2l6ZW9mIChzdHJ1Y3QgdWxwX2JkZTY0KSk7Ci0JaW9jYl9jbWQtPnVscEJkZUNvdW50ID0gMTsKLQlpb2NiX2NtZC0+dWxwTGUgPSAxOworCWlmIChwaGJhLT5zbGlfcmV2ID09IDMpIHsKKwkJaWYgKG51bV9iZGUgPiBMUEZDX0VYVF9EQVRBX0JERV9DT1VOVCkgeworCQkJLyoKKwkJCSAqIFRoZSBleHRlbmRlZCBJT0NCIGZvcm1hdCBjYW4gb25seSBmaXQgMyBCREUgb3IgYSBCUEwuCisJCQkgKiBUaGlzIEkvTyBoYXMgbW9yZSB0aGFuIDMgQkRFIHNvIHRoZSAxc3QgZGF0YSBiZGUgd2lsbAorCQkJICogYmUgYSBCUEwgdGhhdCBpcyBmaWxsZWQgaW4gaGVyZS4KKwkJCSAqLworCQkJcGh5c2FkZHIgPSBscGZjX2NtZC0+ZG1hX2hhbmRsZTsKKwkJCWRhdGFfYmRlLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CisJCQlkYXRhX2JkZS0+dHVzLmYuYmRlU2l6ZSA9IChudW1fYmRlICoKKwkJCQkJCSAgIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CisJCQlwaHlzYWRkciArPSAoc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSArCisJCQkJICAgICAoMiAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSkpOworCQkJZGF0YV9iZGUtPmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBoeXNhZGRyKTsKKwkJCWRhdGFfYmRlLT5hZGRyTG93ID0gcHV0UGFkZHJMb3cocGh5c2FkZHIpOworCQkJLyogZWJkZSBjb3VudCBpbmNsdWRlcyB0aGUgcmVzcG9uY2UgYmRlIGFuZCBkYXRhIGJwbCAqLworCQkJaW9jYl9jbWQtPnVuc2xpMy5mY3BfZXh0LmViZGVfY291bnQgPSAyOworCQl9IGVsc2UgeworCQkJLyogZWJkZSBjb3VudCBpbmNsdWRlcyB0aGUgcmVzcG9uY2UgYmRlIGFuZCBkYXRhIGJkZXMgKi8KKwkJCWlvY2JfY21kLT51bnNsaTMuZmNwX2V4dC5lYmRlX2NvdW50ID0gKG51bV9iZGUgKyAxKTsKKwkJfQorCX0gZWxzZSB7CisJCWlvY2JfY21kLT51bi5mY3BpNjQuYmRsLmJkZVNpemUgPQorCQkJKChudW1fYmRlICsgMikgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpOworCX0KIAlmY3BfY21uZC0+ZmNwRGwgPSBjcHVfdG9fYmUzMihzY3NpX2J1ZmZsZW4oc2NzaV9jbW5kKSk7CiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zZW5kX3Njc2lfZXJyb3JfZXZlbnQ6IFBvc3RzIGFuIGV2ZW50IHdoZW4gdGhlcmUgaXMgU0NTSSBlcnJvci4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCisgKiBAbHBmY19jbWQ6IFBvaW50ZXIgdG8gbHBmYyBzY3NpIGNvbW1hbmQgd2hpY2ggcmVwb3J0ZWQgdGhlIGVycm9yLgorICogQHJzcF9pb2NiOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2Igb2JqZWN0IHdoaWNoIHJlcG9ydGVkIGVycm9yLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcG9zdHMgYW4gZXZlbnQgd2hlbiB0aGVyZSBpcyBhIFNDU0kgY29tbWFuZCByZXBvcnRpbmcKKyAqIGVycm9yIGZyb20gdGhlIHNjc2kgZGV2aWNlLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfc2VuZF9zY3NpX2Vycm9yX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAorCQlzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqbHBmY19jbWQsIHN0cnVjdCBscGZjX2lvY2JxICpyc3BfaW9jYikgeworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSBscGZjX2NtZC0+cENtZDsKKwlzdHJ1Y3QgZmNwX3JzcCAqZmNwcnNwID0gbHBmY19jbWQtPmZjcF9yc3A7CisJdWludDMyX3QgcmVzcF9pbmZvID0gZmNwcnNwLT5yc3BTdGF0dXMyOworCXVpbnQzMl90IHNjc2lfc3RhdHVzID0gZmNwcnNwLT5yc3BTdGF0dXMzOworCXVpbnQzMl90IGZjcGlfcGFybSA9IHJzcF9pb2NiLT5pb2NiLnVuLmZjcGkuZmNwaV9wYXJtOworCXN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqZmFzdF9wYXRoX2V2dCA9IE5VTEw7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKnBub2RlID0gbHBmY19jbWQtPnJkYXRhLT5wbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSWYgdGhlcmUgaXMgcXVldWVmdWxsIG9yIGJ1c3kgY29uZGl0aW9uIHNlbmQgYSBzY3NpIGV2ZW50ICovCisJaWYgKChjbW5kLT5yZXN1bHQgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkgfHwKKwkJKGNtbmQtPnJlc3VsdCA9PSBTQU1fU1RBVF9CVVNZKSkgeworCQlmYXN0X3BhdGhfZXZ0ID0gbHBmY19hbGxvY19mYXN0X2V2dChwaGJhKTsKKwkJaWYgKCFmYXN0X3BhdGhfZXZ0KQorCQkJcmV0dXJuOworCQlmYXN0X3BhdGhfZXZ0LT51bi5zY3NpX2V2dC5ldmVudF90eXBlID0KKwkJCUZDX1JFR19TQ1NJX0VWRU5UOworCQlmYXN0X3BhdGhfZXZ0LT51bi5zY3NpX2V2dC5zdWJjYXRlZ29yeSA9CisJCShjbW5kLT5yZXN1bHQgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkgPworCQlMUEZDX0VWRU5UX1FGVUxMIDogTFBGQ19FVkVOVF9ERVZCU1k7CisJCWZhc3RfcGF0aF9ldnQtPnVuLnNjc2lfZXZ0Lmx1biA9IGNtbmQtPmRldmljZS0+bHVuOworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLnNjc2lfZXZ0Lnd3cG4sCisJCQkmcG5vZGUtPm5scF9wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5zY3NpX2V2dC53d25uLAorCQkJJnBub2RlLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJfSBlbHNlIGlmICgocmVzcF9pbmZvICYgU05TX0xFTl9WQUxJRCkgJiYgZmNwcnNwLT5yc3BTbnNMZW4gJiYKKwkJKChjbW5kLT5jbW5kWzBdID09IFJFQURfMTApIHx8IChjbW5kLT5jbW5kWzBdID09IFdSSVRFXzEwKSkpIHsKKwkJZmFzdF9wYXRoX2V2dCA9IGxwZmNfYWxsb2NfZmFzdF9ldnQocGhiYSk7CisJCWlmICghZmFzdF9wYXRoX2V2dCkKKwkJCXJldHVybjsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuc2NzaV9ldmVudC5ldmVudF90eXBlID0KKwkJCUZDX1JFR19TQ1NJX0VWRU5UOworCQlmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5zY3NpX2V2ZW50LnN1YmNhdGVnb3J5ID0KKwkJCUxQRkNfRVZFTlRfQ0hFQ0tfQ09ORDsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuc2NzaV9ldmVudC5sdW4gPQorCQkJY21uZC0+ZGV2aWNlLT5sdW47CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuc2NzaV9ldmVudC53d3BuLAorCQkJJnBub2RlLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuc2NzaV9ldmVudC53d25uLAorCQkJJnBub2RlLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCWZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LnNlbnNlX2tleSA9CisJCQljbW5kLT5zZW5zZV9idWZmZXJbMl0gJiAweGY7CisJCWZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LmFzYyA9IGNtbmQtPnNlbnNlX2J1ZmZlclsxMl07CisJCWZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LmFzY3EgPSBjbW5kLT5zZW5zZV9idWZmZXJbMTNdOworCX0gZWxzZSBpZiAoKGNtbmQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgJiYKKwkJICAgICBmY3BpX3Bhcm0gJiYKKwkJICAgICAoKGJlMzJfdG9fY3B1KGZjcHJzcC0+cnNwUmVzSWQpICE9IGZjcGlfcGFybSkgfHwKKwkJCSgoc2NzaV9zdGF0dXMgPT0gU0FNX1NUQVRfR09PRCkgJiYKKwkJCSEocmVzcF9pbmZvICYgKFJFU0lEX1VOREVSIHwgUkVTSURfT1ZFUikpKSkpIHsKKwkJLyoKKwkJICogSWYgc3RhdHVzIGlzIGdvb2Qgb3IgcmVzaWQgZG9lcyBub3QgbWF0Y2ggd2l0aCBmY3BfcGFyYW0gYW5kCisJCSAqIHRoZXJlIGlzIHZhbGlkIGZjcGlfcGFybSwgdGhlbiB0aGVyZSBpcyBhIHJlYWRfY2hlY2sgZXJyb3IKKwkJICovCisJCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOworCQlpZiAoIWZhc3RfcGF0aF9ldnQpCisJCQlyZXR1cm47CisJCWZhc3RfcGF0aF9ldnQtPnVuLnJlYWRfY2hlY2tfZXJyb3IuaGVhZGVyLmV2ZW50X3R5cGUgPQorCQkJRkNfUkVHX0ZBQlJJQ19FVkVOVDsKKwkJZmFzdF9wYXRoX2V2dC0+dW4ucmVhZF9jaGVja19lcnJvci5oZWFkZXIuc3ViY2F0ZWdvcnkgPQorCQkJTFBGQ19FVkVOVF9GQ1BSRENIS0VSUjsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5yZWFkX2NoZWNrX2Vycm9yLmhlYWRlci53d3BuLAorCQkJJnBub2RlLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucmVhZF9jaGVja19lcnJvci5oZWFkZXIud3dubiwKKwkJCSZwbm9kZS0+bmxwX25vZGVuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQlmYXN0X3BhdGhfZXZ0LT51bi5yZWFkX2NoZWNrX2Vycm9yLmx1biA9IGNtbmQtPmRldmljZS0+bHVuOworCQlmYXN0X3BhdGhfZXZ0LT51bi5yZWFkX2NoZWNrX2Vycm9yLm9wY29kZSA9IGNtbmQtPmNtbmRbMF07CisJCWZhc3RfcGF0aF9ldnQtPnVuLnJlYWRfY2hlY2tfZXJyb3IuZmNwaXBhcmFtID0KKwkJCWZjcGlfcGFybTsKKwl9IGVsc2UKKwkJcmV0dXJuOworCisJZmFzdF9wYXRoX2V2dC0+dnBvcnQgPSB2cG9ydDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dF9saXN0cCwgJnBoYmEtPndvcmtfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CisJcmV0dXJuOworfQogc3RhdGljIHZvaWQKIGxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqIHBzYikKIHsKQEAgLTQxMSw2ICs3MDksNyBAQAogCXVpbnQzMl90IHJzcGxlbiA9IDA7CiAJdWludDMyX3QgbG9naXQgPSBMT0dfRkNQIHwgTE9HX0ZDUF9FUlJPUjsKIAorCiAJLyoKIAkgKiAgSWYgdGhpcyBpcyBhIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kLCB0aGVyZSBpcyBubwogCSAqICBzY3NpIHBhY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBscGZjX2NtZC4gIFRoZSBkcml2ZXIKQEAgLTUyNiw2ICs4MjUsNyBAQAogCiAgb3V0OgogCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoaG9zdF9zdGF0dXMsIHNjc2lfc3RhdHVzKTsKKwlscGZjX3NlbmRfc2NzaV9lcnJvcl9ldmVudCh2cG9ydC0+cGhiYSwgdnBvcnQsIGxwZmNfY21kLCByc3BfaW9jYik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01NDIsOSArODQyLDExIEBACiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCAqdG1wX3NkZXY7CiAJaW50IGRlcHRoID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqZmFzdF9wYXRoX2V2dDsKIAogCWxwZmNfY21kLT5yZXN1bHQgPSBwSW9jYk91dC0+aW9jYi51bi51bHBXb3JkWzRdOwogCWxwZmNfY21kLT5zdGF0dXMgPSBwSW9jYk91dC0+aW9jYi51bHBTdGF0dXM7CisJYXRvbWljX2RlYygmcG5vZGUtPmNtZF9wZW5kaW5nKTsKIAogCWlmIChscGZjX2NtZC0+c3RhdHVzKSB7CiAJCWlmIChscGZjX2NtZC0+c3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QgJiYKQEAgLTU3MCwxMiArODcyLDM2IEBACiAJCQlicmVhazsKIAkJY2FzZSBJT1NUQVRfTlBPUlRfQlNZOgogCQljYXNlIElPU1RBVF9GQUJSSUNfQlNZOgotCQkJY21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9CVVNfQlVTWSwgMCk7CisJCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX1RSQU5TUE9SVF9ESVNSVVBURUQsIDApOworCQkJZmFzdF9wYXRoX2V2dCA9IGxwZmNfYWxsb2NfZmFzdF9ldnQocGhiYSk7CisJCQlpZiAoIWZhc3RfcGF0aF9ldnQpCisJCQkJYnJlYWs7CisJCQlmYXN0X3BhdGhfZXZ0LT51bi5mYWJyaWNfZXZ0LmV2ZW50X3R5cGUgPQorCQkJCUZDX1JFR19GQUJSSUNfRVZFTlQ7CisJCQlmYXN0X3BhdGhfZXZ0LT51bi5mYWJyaWNfZXZ0LnN1YmNhdGVnb3J5ID0KKwkJCQkobHBmY19jbWQtPnN0YXR1cyA9PSBJT1NUQVRfTlBPUlRfQlNZKSA/CisJCQkJTFBGQ19FVkVOVF9QT1JUX0JVU1kgOiBMUEZDX0VWRU5UX0ZBQlJJQ19CVVNZOworCQkJaWYgKHBub2RlICYmIE5MUF9DSEtfTk9ERV9BQ1QocG5vZGUpKSB7CisJCQkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5mYWJyaWNfZXZ0Lnd3cG4sCisJCQkJCSZwbm9kZS0+bmxwX3BvcnRuYW1lLAorCQkJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQkJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4uZmFicmljX2V2dC53d25uLAorCQkJCQkmcG5vZGUtPm5scF9ub2RlbmFtZSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJCX0KKwkJCWZhc3RfcGF0aF9ldnQtPnZwb3J0ID0gdnBvcnQ7CisJCQlmYXN0X3BhdGhfZXZ0LT53b3JrX2V2dC5ldnQgPQorCQkJCUxQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZUOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dF9saXN0cCwKKwkJCQkmcGhiYS0+d29ya19saXN0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CiAJCQlicmVhazsKIAkJY2FzZSBJT1NUQVRfTE9DQUxfUkVKRUNUOgotCQkJaWYgKGxwZmNfY21kLT5yZXN1bHQgPT0gUkpUX1VOQVZBSUxfUEVSTSB8fAorCQkJaWYgKGxwZmNfY21kLT5yZXN1bHQgPT0gSU9FUlJfSU5WQUxJRF9SUEkgfHwKIAkJCSAgICBscGZjX2NtZC0+cmVzdWx0ID09IElPRVJSX05PX1JFU09VUkNFUyB8fAotCQkJICAgIGxwZmNfY21kLT5yZXN1bHQgPT0gUkpUX0xPR0lOX1JFUVVJUkVEKSB7CisJCQkgICAgbHBmY19jbWQtPnJlc3VsdCA9PSBJT0VSUl9BQk9SVF9SRVFVRVNURUQpIHsKIAkJCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX1JFUVVFVUUsIDApOwogCQkJCWJyZWFrOwogCQkJfSAvKiBlbHNlOiBmYWxsIHRocm91Z2ggKi8KQEAgLTU4Niw3ICs5MTIsOCBAQAogCiAJCWlmICghcG5vZGUgfHwgIU5MUF9DSEtfTk9ERV9BQ1QocG5vZGUpCiAJCSAgICB8fCAocG5vZGUtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSkKLQkJCWNtZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfQlVTX0JVU1ksIFNBTV9TVEFUX0JVU1kpOworCQkJY21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9UUkFOU1BPUlRfRElTUlVQVEVELAorCQkJCQkJIFNBTV9TVEFUX0JVU1kpOwogCX0gZWxzZSB7CiAJCWNtZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfT0ssIDApOwogCX0KQEAgLTYwMiw4ICs5MjksMzIgQEAKIAkJCQkgc2NzaV9nZXRfcmVzaWQoY21kKSk7CiAJfQogCisJbHBmY191cGRhdGVfc3RhdHMocGhiYSwgbHBmY19jbWQpOwogCXJlc3VsdCA9IGNtZC0+cmVzdWx0OwogCXNkZXYgPSBjbWQtPmRldmljZTsKKwlpZiAodnBvcnQtPmNmZ19tYXhfc2NzaWNtcGxfdGltZSAmJgorCSAgIHRpbWVfYWZ0ZXIoamlmZmllcywgbHBmY19jbWQtPnN0YXJ0X3RpbWUgKworCQltc2Vjc190b19qaWZmaWVzKHZwb3J0LT5jZmdfbWF4X3Njc2ljbXBsX3RpbWUpKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKChwbm9kZS0+Y21kX3FkZXB0aCA+IGF0b21pY19yZWFkKCZwbm9kZS0+Y21kX3BlbmRpbmcpICYmCisJCSAgICAoYXRvbWljX3JlYWQoJnBub2RlLT5jbWRfcGVuZGluZykgPiBMUEZDX01JTl9UR1RfUURFUFRIKSAmJgorCQkgICAgKChjbWQtPmNtbmRbMF0gPT0gUkVBRF8xMCkgfHwgKGNtZC0+Y21uZFswXSA9PSBXUklURV8xMCkpKSkKKwkJCXBub2RlLT5jbWRfcWRlcHRoID0gYXRvbWljX3JlYWQoJnBub2RlLT5jbWRfcGVuZGluZyk7CisKKwkJcG5vZGUtPmxhc3RfY2hhbmdlX3RpbWUgPSBqaWZmaWVzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoKHBub2RlLT5jbWRfcWRlcHRoIDwgTFBGQ19NQVhfVEdUX1FERVBUSCkgJiYKKwkJICAgdGltZV9hZnRlcihqaWZmaWVzLCBwbm9kZS0+bGFzdF9jaGFuZ2VfdGltZSArCisJCQltc2Vjc190b19qaWZmaWVzKExQRkNfVEdUUV9JTlRFUlZBTCkpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlwbm9kZS0+Y21kX3FkZXB0aCArPSBwbm9kZS0+Y21kX3FkZXB0aCAqCisJCQlMUEZDX1RHVFFfUkFNUFVQX1BDRU5UIC8gMTAwOworCQlpZiAocG5vZGUtPmNtZF9xZGVwdGggPiBMUEZDX01BWF9UR1RfUURFUFRIKQorCQkJcG5vZGUtPmNtZF9xZGVwdGggPSBMUEZDX01BWF9UR1RfUURFUFRIOworCQlwbm9kZS0+bGFzdF9jaGFuZ2VfdGltZSA9IGppZmZpZXM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJfQorCiAJbHBmY19zY3NpX3VucHJlcF9kbWFfYnVmKHBoYmEsIGxwZmNfY21kKTsKIAljbWQtPnNjc2lfZG9uZShjbWQpOwogCkBAIC02NDcsNiArOTk4LDkgQEAKIAkJCQlwbm9kZS0+bGFzdF9yYW1wX3VwX3RpbWUgPSBqaWZmaWVzOwogCQkJfQogCQl9CisJCWxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KHBoYmEsIHZwb3J0LCBwbm9kZSwKKwkJCTB4RkZGRkZGRkYsCisJCQlzZGV2LT5xdWV1ZV9kZXB0aCAtIDEsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKIAl9CiAKIAkvKgpAQCAtNjc2LDYgKzEwMzAsOSBAQAogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5HLCBMT0dfRkNQLAogCQkJCQkgIjA3MTEgZGV0ZWN0ZWQgcXVldWUgZnVsbCAtIGx1biBxdWV1ZSAiCiAJCQkJCSAiZGVwdGggYWRqdXN0ZWQgdG8gJWQuXG4iLCBkZXB0aCk7CisJCQlscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudChwaGJhLCB2cG9ydCwKKwkJCQlwbm9kZSwgMHhGRkZGRkZGRiwKKwkJCQlkZXB0aCsxLCBkZXB0aCk7CiAJCX0KIAl9CiAKQEAgLTY5Miw2ICsxMDQ5LDI0IEBACiAJbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKIH0KIAorLyoqCisgKiBscGZjX2ZjcGNtZF90b19pb2NiIC0gY29weSB0aGUgZmNwX2NtZCBkYXRhIGludG8gdGhlIElPQ0IuCisgKiBAZGF0YTogQSBwb2ludGVyIHRvIHRoZSBpbW1lZGlhdGUgY29tbWFuZCBkYXRhIHBvcnRpb24gb2YgdGhlIElPQ0IuCisgKiBAZmNwX2NtbmQ6IFRoZSBGQ1AgQ29tbWFuZCB0aGF0IGlzIHByb3ZpZGVkIGJ5IHRoZSBTQ1NJIGxheWVyLgorICoKKyAqIFRoZSByb3V0aW5lIGNvcGllcyB0aGUgZW50aXJlIEZDUCBjb21tYW5kIGZyb20gQGZjcF9jbW5kIHRvIEBkYXRhIHdoaWxlCisgKiBieXRlIHN3YXBwaW5nIHRoZSBkYXRhIHRvIGJpZyBlbmRpYW4gZm9ybWF0IGZvciB0cmFuc21pc3Npb24gb24gdGhlIHdpcmUuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19mY3BjbWRfdG9faW9jYih1aW50OF90ICpkYXRhLCBzdHJ1Y3QgZmNwX2NtbmQgKmZjcF9jbW5kKQoreworCWludCBpLCBqOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCk7CisJICAgICBpICs9IHNpemVvZih1aW50MzJfdCksIGorKykgeworCQkoKHVpbnQzMl90ICopZGF0YSlbal0gPSBjcHVfdG9fYmUzMigoKHVpbnQzMl90ICopZmNwX2NtbmQpW2pdKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkCiBscGZjX3Njc2lfcHJlcF9jbW5kKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfc2NzaV9idWYgKmxwZmNfY21kLAogCQkgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKnBub2RlKQpAQCAtNzU4LDcgKzExMzMsOCBAQAogCQlmY3BfY21uZC0+ZmNwQ250bDMgPSAwOwogCQlwaGJhLT5mYzRDb250cm9sUmVxdWVzdHMrKzsKIAl9Ci0KKwlpZiAocGhiYS0+c2xpX3JldiA9PSAzKQorCQlscGZjX2ZjcGNtZF90b19pb2NiKGlvY2JfY21kLT51bnNsaTMuZmNwX2V4dC5pY2QsIGZjcF9jbW5kKTsKIAkvKgogCSAqIEZpbmlzaCBpbml0aWFsaXppbmcgdGhvc2UgSU9DQiBmaWVsZHMgdGhhdCBhcmUgaW5kZXBlbmRlbnQKIAkgKiBvZiB0aGUgc2NzaV9jbW5kIHJlcXVlc3RfYnVmZmVyCkBAIC03OTgsMTEgKzExNzQsMTMgQEAKIAlwaW9jYiA9ICZwaW9jYnEtPmlvY2I7CiAKIAlmY3BfY21uZCA9IGxwZmNfY21kLT5mY3BfY21uZDsKLQlpbnRfdG9fc2NzaWx1bihsdW4sICZscGZjX2NtZC0+ZmNwX2NtbmQtPmZjcF9sdW4pOworCS8qIENsZWFyIG91dCBhbnkgb2xkIGRhdGEgaW4gdGhlIEZDUCBjb21tYW5kIGFyZWEgKi8KKwltZW1zZXQoZmNwX2NtbmQsIDAsIHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpKTsKKwlpbnRfdG9fc2NzaWx1bihsdW4sICZmY3BfY21uZC0+ZmNwX2x1bik7CiAJZmNwX2NtbmQtPmZjcENudGwyID0gdGFza19tZ210X2NtZDsKLQorCWlmICh2cG9ydC0+cGhiYS0+c2xpX3JldiA9PSAzKQorCQlscGZjX2ZjcGNtZF90b19pb2NiKHBpb2NiLT51bnNsaTMuZmNwX2V4dC5pY2QsIGZjcF9jbW5kKTsKIAlwaW9jYi0+dWxwQ29tbWFuZCA9IENNRF9GQ1BfSUNNTkQ2NF9DUjsKLQogCXBpb2NiLT51bHBDb250ZXh0ID0gbmRscC0+bmxwX3JwaTsKIAlpZiAobmRscC0+bmxwX2ZjcF9pbmZvICYgTkxQX0ZDUF8yX0RFVklDRSkgewogCQlwaW9jYi0+dWxwRkNQMlJjdnkgPSAxOwpAQCAtOTY3LDkgKzEzNDUsMTIgQEAKIAkgKiB0cmFuc3BvcnQgaXMgc3RpbGwgdHJhbnNpdGlvbmluZy4KIAkgKi8KIAlpZiAoIW5kbHAgfHwgIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpIHsKLQkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfQlVTX0JVU1ksIDApOworCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9UUkFOU1BPUlRfRElTUlVQVEVELCAwKTsKIAkJZ290byBvdXRfZmFpbF9jb21tYW5kOwogCX0KKwlpZiAoYXRvbWljX3JlYWQoJm5kbHAtPmNtZF9wZW5kaW5nKSA+PSBuZGxwLT5jbWRfcWRlcHRoKQorCQlnb3RvIG91dF9ob3N0X2J1c3k7CisKIAlscGZjX2NtZCA9IGxwZmNfZ2V0X3Njc2lfYnVmKHBoYmEpOwogCWlmIChscGZjX2NtZCA9PSBOVUxMKSB7CiAJCWxwZmNfYWRqdXN0X3F1ZXVlX2RlcHRoKHBoYmEpOwpAQCAtOTgwLDYgKzEzNjEsNyBAQAogCQlnb3RvIG91dF9ob3N0X2J1c3k7CiAJfQogCisJbHBmY19jbWQtPnN0YXJ0X3RpbWUgPSBqaWZmaWVzOwogCS8qCiAJICogU3RvcmUgdGhlIG1pZGxheWVyJ3MgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHRoZSBjb21wbGV0aW9uIHBoYXNlCiAJICogYW5kIGNvbXBsZXRlIHRoZSBjb21tYW5kIGluaXRpYWxpemF0aW9uLgpAQCAtOTg3LDYgKzEzNjksNyBAQAogCWxwZmNfY21kLT5wQ21kICA9IGNtbmQ7CiAJbHBmY19jbWQtPnJkYXRhID0gcmRhdGE7CiAJbHBmY19jbWQtPnRpbWVvdXQgPSAwOworCWxwZmNfY21kLT5zdGFydF90aW1lID0gamlmZmllczsKIAljbW5kLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKilscGZjX2NtZDsKIAljbW5kLT5zY3NpX2RvbmUgPSBkb25lOwogCkBAIC05OTYsNiArMTM3OSw3IEBACiAKIAlscGZjX3Njc2lfcHJlcF9jbW5kKHZwb3J0LCBscGZjX2NtZCwgbmRscCk7CiAKKwlhdG9taWNfaW5jKCZuZGxwLT5jbWRfcGVuZGluZyk7CiAJZXJyID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCAmcGhiYS0+c2xpLnJpbmdbcHNsaS0+ZmNwX3JpbmddLAogCQkJCSAgJmxwZmNfY21kLT5jdXJfaW9jYnEsIFNMSV9JT0NCX1JFVF9JT0NCKTsKIAlpZiAoZXJyKQpAQCAtMTAxMCw2ICsxMzk0LDcgQEAKIAlyZXR1cm4gMDsKIAogIG91dF9ob3N0X2J1c3lfZnJlZV9idWY6CisJYXRvbWljX2RlYygmbmRscC0+Y21kX3BlbmRpbmcpOwogCWxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZihwaGJhLCBscGZjX2NtZCk7CiAJbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKICBvdXRfaG9zdF9idXN5OgpAQCAtMTE0NSw2ICsxNTMwLDcgQEAKIAlpbnQgcmV0ID0gU1VDQ0VTUzsKIAlpbnQgc3RhdHVzOwogCWludCBjbnQ7CisJc3RydWN0IGxwZmNfc2NzaV9ldmVudF9oZWFkZXIgc2NzaV9ldmVudDsKIAogCWxwZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihjbW5kKTsKIAkvKgpAQCAtMTE2Myw2ICsxNTQ5LDE5IEBACiAJCQlicmVhazsKIAkJcG5vZGUgPSByZGF0YS0+cG5vZGU7CiAJfQorCisJc2NzaV9ldmVudC5ldmVudF90eXBlID0gRkNfUkVHX1NDU0lfRVZFTlQ7CisJc2NzaV9ldmVudC5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfVEdUUkVTRVQ7CisJc2NzaV9ldmVudC5sdW4gPSAwOworCW1lbWNweShzY3NpX2V2ZW50Lnd3cG4sICZwbm9kZS0+bmxwX3BvcnRuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCW1lbWNweShzY3NpX2V2ZW50Lnd3bm4sICZwbm9kZS0+bmxwX25vZGVuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCisJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwKKwkJZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQlzaXplb2Yoc2NzaV9ldmVudCksCisJCShjaGFyICopJnNjc2lfZXZlbnQsCisJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOworCiAJaWYgKCFyZGF0YSB8fCBwbm9kZS0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTUFQUEVEX05PREUpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19GQ1AsCiAJCQkJICIwNzIxIExVTiBSZXNldCBycG9ydCAiCkBAIC0xMjQyLDEwICsxNjQxLDIzIEBACiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IE5VTEw7CiAJaW50IG1hdGNoOwotCWludCByZXQgPSBTVUNDRVNTLCBzdGF0dXMsIGk7CisJaW50IHJldCA9IFNVQ0NFU1MsIHN0YXR1cyA9IFNVQ0NFU1MsIGk7CiAJaW50IGNudDsKIAlzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqIGxwZmNfY21kOwogCXVuc2lnbmVkIGxvbmcgbGF0ZXI7CisJc3RydWN0IGxwZmNfc2NzaV9ldmVudF9oZWFkZXIgc2NzaV9ldmVudDsKKworCXNjc2lfZXZlbnQuZXZlbnRfdHlwZSA9IEZDX1JFR19TQ1NJX0VWRU5UOworCXNjc2lfZXZlbnQuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX0JVU1JFU0VUOworCXNjc2lfZXZlbnQubHVuID0gMDsKKwltZW1jcHkoc2NzaV9ldmVudC53d3BuLCAmdnBvcnQtPmZjX3BvcnRuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCW1lbWNweShzY3NpX2V2ZW50Lnd3bm4sICZ2cG9ydC0+ZmNfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisKKwlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LAorCQlmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCXNpemVvZihzY3NpX2V2ZW50KSwKKwkJKGNoYXIgKikmc2NzaV9ldmVudCwKKwkJU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CiAKIAlscGZjX2Jsb2NrX2Vycm9yX2hhbmRsZXIoY21uZCk7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKaW5kZXggZGFiYTkyMy4uNDM3ZjE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKQEAgLTEwNyw2ICsxMDcsMTAgQEAKIAogfTsKIAorc3RydWN0IGxwZmNfc2NzaWNtZF9ia3QgeworCXVpbnQzMl90IGNtZF9jb3VudDsKK307CisKIHN0cnVjdCBscGZjX3Njc2lfYnVmIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHNjc2lfY21uZCAqcENtZDsKQEAgLTEzOSw2ICsxNDMsNyBAQAogCSAqLwogCXN0cnVjdCBscGZjX2lvY2JxIGN1cl9pb2NicTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdHE7CisJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwogfTsKIAogI2RlZmluZSBMUEZDX1NDU0lfRE1BX0VYVF9TSVpFIDI2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKaW5kZXggNTBmZTA3Ni4uOGFiNWJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtNjYsMTAgKzY3LDE2IEBACiAJTFBGQ19BQk9SVF9JT0NCCiB9IGxwZmNfaW9jYl90eXBlOwogCi0JCS8qIFNMSS0yL1NMSS0zIHByb3ZpZGUgZGlmZmVyZW50IHNpemVkIGlvY2JzLiAgR2l2ZW4gYSBwb2ludGVyCi0JCSAqIHRvIHRoZSBzdGFydCBvZiB0aGUgcmluZywgYW5kIHRoZSBzbG90IG51bWJlciBvZiB0aGUKLQkJICogZGVzaXJlZCBpb2NiIGVudHJ5LCBjYWxjIGEgcG9pbnRlciB0byB0aGF0IGVudHJ5LgotCQkgKi8KKy8qKgorICogbHBmY19jbWRfaW9jYjogR2V0IG5leHQgY29tbWFuZCBpb2NiIGVudHJ5IGluIHRoZSByaW5nLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBvaW50ZXIgdG8gbmV4dCBjb21tYW5kIGlvY2IgZW50cnkKKyAqIGluIHRoZSBjb21tYW5kIHJpbmcuIFRoZSBjYWxsZXIgbXVzdCBob2xkIGhiYWxvY2sgdG8gcHJldmVudAorICogb3RoZXIgdGhyZWFkcyBjb25zdW1lIHRoZSBuZXh0IGNvbW1hbmQgaW9jYi4KKyAqIFNMSS0yL1NMSS0zIHByb3ZpZGUgZGlmZmVyZW50IHNpemVkIGlvY2JzLgorICoqLwogc3RhdGljIGlubGluZSBJT0NCX3QgKgogbHBmY19jbWRfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKQEAgLTc3LDYgKzg0LDE2IEBACiAJCQkgICBwcmluZy0+Y21kaWR4ICogcGhiYS0+aW9jYl9jbWRfc2l6ZSk7CiB9CiAKKy8qKgorICogbHBmY19yZXNwX2lvY2I6IEdldCBuZXh0IHJlc3BvbnNlIGlvY2IgZW50cnkgaW4gdGhlIHJpbmcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcG9pbnRlciB0byBuZXh0IHJlc3BvbnNlIGlvY2IgZW50cnkKKyAqIGluIHRoZSByZXNwb25zZSByaW5nLiBUaGUgY2FsbGVyIG11c3QgaG9sZCBoYmFsb2NrIHRvIG1ha2Ugc3VyZQorICogdGhhdCBubyBvdGhlciB0aHJlYWQgY29uc3VtZSB0aGUgbmV4dCByZXNwb25zZSBpb2NiLgorICogU0xJLTIvU0xJLTMgcHJvdmlkZSBkaWZmZXJlbnQgc2l6ZWQgaW9jYnMuCisgKiovCiBzdGF0aWMgaW5saW5lIElPQ0JfdCAqCiBscGZjX3Jlc3BfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKQEAgLTg0LDYgKzEwMSwxNSBAQAogCQkJICAgcHJpbmctPnJzcGlkeCAqIHBoYmEtPmlvY2JfcnNwX3NpemUpOwogfQogCisvKioKKyAqIF9fbHBmY19zbGlfZ2V0X2lvY2JxOiBBbGxvY2F0ZXMgYW4gaW9jYiBvYmplY3QgZnJvbSBpb2NiIHBvb2wuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGFsbG9jYXRlcyBhIG5ldyBkcml2ZXIgaW9jYiBvYmplY3QgZnJvbSB0aGUgaW9jYiBwb29sLiBJZiB0aGUKKyAqIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyBwb2ludGVyIHRvIHRoZSBuZXdseQorICogYWxsb2NhdGVkIGlvY2Igb2JqZWN0IGVsc2UgaXQgcmV0dXJucyBOVUxMLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2lvY2JxICoKIF9fbHBmY19zbGlfZ2V0X2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTk0LDYgKzEyMCwxNSBAQAogCXJldHVybiBpb2NicTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9nZXRfaW9jYnE6IEFsbG9jYXRlcyBhbiBpb2NiIG9iamVjdCBmcm9tIGlvY2IgcG9vbC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICogYWxsb2NhdGVzIGEgbmV3IGRyaXZlciBpb2NiIG9iamVjdCBmcm9tIHRoZSBpb2NiIHBvb2wuIElmIHRoZQorICogYWxsb2NhdGlvbiBpcyBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5ld2x5CisgKiBhbGxvY2F0ZWQgaW9jYiBvYmplY3QgZWxzZSBpdCByZXR1cm5zIE5VTEwuCisgKiovCiBzdHJ1Y3QgbHBmY19pb2NicSAqCiBscGZjX3NsaV9nZXRfaW9jYnEoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTA2LDYgKzE0MSwxNiBAQAogCXJldHVybiBpb2NicTsKIH0KIAorLyoqCisgKiBfX2xwZmNfc2xpX3JlbGVhc2VfaW9jYnE6IFJlbGVhc2UgaW9jYiB0byB0aGUgaW9jYiBwb29sLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGlvY2JxOiBQb2ludGVyIHRvIGRyaXZlciBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCB0byByZWxlYXNlIGRyaXZlcgorICogaW9jYiBvYmplY3QgdG8gdGhlIGlvY2IgcG9vbC4gVGhlIGlvdGFnIGluIHRoZSBpb2NiIG9iamVjdAorICogZG9lcyBub3QgY2hhbmdlIGZvciBlYWNoIHVzZSBvZiB0aGUgaW9jYiBvYmplY3QuIFRoaXMgZnVuY3Rpb24KKyAqIGNsZWFycyBhbGwgb3RoZXIgZmllbGRzIG9mIHRoZSBpb2NiIG9iamVjdCB3aGVuIGl0IGlzIGZyZWVkLgorICoqLwogc3RhdGljIHZvaWQKIF9fbHBmY19zbGlfcmVsZWFzZV9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICppb2NicSkKIHsKQEAgLTExOCw2ICsxNjMsMTQgQEAKIAlsaXN0X2FkZF90YWlsKCZpb2NicS0+bGlzdCwgJnBoYmEtPmxwZmNfaW9jYl9saXN0KTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yZWxlYXNlX2lvY2JxOiBSZWxlYXNlIGlvY2IgdG8gdGhlIGlvY2IgcG9vbC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBpb2NicTogUG9pbnRlciB0byBkcml2ZXIgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQgdG8gcmVsZWFzZSB0aGUgaW9jYiB0bworICogaW9jYiBwb29sLgorICoqLwogdm9pZAogbHBmY19zbGlfcmVsZWFzZV9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICppb2NicSkKIHsKQEAgLTEzMSwxMCArMTg0LDIxIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIH0KIAotLyoKLSAqIFRyYW5zbGF0ZSB0aGUgaW9jYiBjb21tYW5kIHRvIGFuIGlvY2IgY29tbWFuZCB0eXBlIHVzZWQgdG8gZGVjaWRlIHRoZSBmaW5hbAotICogZGlzcG9zaXRpb24gb2YgZWFjaCBjb21wbGV0ZWQgSU9DQi4KLSAqLworLyoqCisgKiBscGZjX3NsaV9pb2NiX2NtZF90eXBlOiBHZXQgdGhlIGlvY2IgdHlwZS4KKyAqIEBpb2NiX2NtbmQgOiBpb2NiIGNvbW1hbmQgY29kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpb2NiIHR5cGUuCisgKiBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdGhlIGlvY2IgY29tbWFuZCB0byBhbiBpb2NiIGNvbW1hbmQgdHlwZSB1c2VkIHRvCisgKiBkZWNpZGUgdGhlIGZpbmFsIGRpc3Bvc2l0aW9uIG9mIGVhY2ggY29tcGxldGVkIElPQ0IuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucworICogTFBGQ19VTktOT1dOX0lPQ0IgaWYgaXQgaXMgYW4gdW5zdXBwb3J0ZWQgaW9jYgorICogTFBGQ19TT0xfSU9DQiAgICAgaWYgaXQgaXMgYSBzb2xpY2l0ZWQgaW9jYiBjb21wbGV0aW9uCisgKiBMUEZDX0FCT1JUX0lPQ0IgICBpZiBpdCBpcyBhbiBhYm9ydCBpb2NiCisgKiBMUEZDX1VOU09MX0lPQ0IgICBpZiBpdCBpcyBhbiB1bnNvbGljaXRlZCBpb2NiCisgKgorICogVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9jay4KKyAqKi8KIHN0YXRpYyBscGZjX2lvY2JfdHlwZQogbHBmY19zbGlfaW9jYl9jbWRfdHlwZSh1aW50OF90IGlvY2JfY21uZCkKIHsKQEAgLTIzMCw2ICsyOTQsMTcgQEAKIAlyZXR1cm4gdHlwZTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yaW5nX21hcDogSXNzdWUgY29uZmlnX3JpbmcgbWJveCBmb3IgYWxsIHJpbmdzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gU0xJIGluaXRpYWxpemF0aW9uIGNvZGUKKyAqIHRvIGNvbmZpZ3VyZSBldmVyeSByaW5nIG9mIHRoZSBIQkEncyBTTEkgaW50ZXJmYWNlLiBUaGUKKyAqIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9jay4gVGhpcyBmdW5jdGlvbiBpc3N1ZXMKKyAqIGEgY29uZmlnX3JpbmcgbWFpbGJveCBjb21tYW5kIGZvciBlYWNoIHJpbmcuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsIGVsc2UgcmV0dXJucyBhIG5lZ2F0aXZlCisgKiBlcnJvciBjb2RlLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfcmluZ19tYXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjYyLDYgKzMzNywxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmluZ3R4Y21wbF9wdXQ6IEFkZHMgbmV3IGlvY2IgdG8gdGhlIHR4Y21wbHEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBwaW9jYjogUG9pbnRlciB0byB0aGUgZHJpdmVyIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkLiBUaGUgZnVuY3Rpb24gYWRkcyB0aGUKKyAqIG5ldyBpb2NiIHRvIHR4Y21wbHEgb2YgdGhlIGdpdmVuIHJpbmcuIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMKKyAqIDAuIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBFTFMgcmluZywgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYKKyAqIHRoZXJlIGlzIGEgdnBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBFTFMgY29tbWFuZC4gVGhpcyBmdW5jdGlvbiBhbHNvCisgKiBzdGFydHMgZWxzX3Rtb2Z1bmMgdGltZXIgaWYgdGhpcyBpcyBhbiBFTFMgY29tbWFuZC4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX3Jpbmd0eGNtcGxfcHV0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NiKQpAQCAtMjgyLDYgKzM2OSwxNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3Jpbmd0eF9nZXQ6IEdldCBmaXJzdCBlbGVtZW50IG9mIHRoZSB0eHEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCB0byBnZXQgbmV4dAorICogaW9jYiBpbiB0eHEgb2YgdGhlIGdpdmVuIHJpbmcuIElmIHRoZXJlIGlzIGFueSBpb2NiIGluCisgKiB0aGUgdHhxLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmaXJzdCBpb2NiIGluIHRoZSBsaXN0IGFmdGVyCisgKiByZW1vdmluZyB0aGUgaW9jYiBmcm9tIHRoZSBsaXN0LCBlbHNlIGl0IHJldHVybnMgTlVMTC4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19pb2NicSAqCiBscGZjX3NsaV9yaW5ndHhfZ2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewpAQCAtMjkzLDE0ICszOTAsMjUgQEAKIAlyZXR1cm4gY21kX2lvY2I7CiB9CiAKKy8qKgorICogbHBmY19zbGlfbmV4dF9pb2NiX3Nsb3Q6IEdldCBuZXh0IGlvY2Igc2xvdCBpbiB0aGUgcmluZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIGFuZCB0aGUgY2FsbGVyIG11c3QgcG9zdCB0aGUKKyAqIGlvY2Igd2l0aG91dCByZWxlYXNpbmcgdGhlIGxvY2suIElmIHRoZSBjYWxsZXIgcmVsZWFzZXMgdGhlIGxvY2ssCisgKiBpb2NiIHNsb3QgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGF2YWlsYWJsZS4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5leHQgYXZhaWxhYmxlIGlvY2Igc2xvdCBpZiB0aGVyZQorICogaXMgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIHJpbmcsIGVsc2UgaXQgcmV0dXJucyBOVUxMLgorICogSWYgdGhlIGdldCBpbmRleCBvZiB0aGUgcmluZyBpcyBhaGVhZCBvZiB0aGUgcHV0IGluZGV4LCB0aGUgZnVuY3Rpb24KKyAqIHdpbGwgcG9zdCBhbiBlcnJvciBhdHRlbnRpb24gZXZlbnQgdG8gdGhlIHdvcmtlciB0aHJlYWQgdG8gdGFrZSB0aGUKKyAqIEhCQSB0byBvZmZsaW5lIHN0YXRlLgorICoqLwogc3RhdGljIElPQ0JfdCAqCiBscGZjX3NsaV9uZXh0X2lvY2Jfc2xvdCAoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7Ci0Jc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAocGhiYS0+c2xpX3JldiA9PSAzKSA/Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AucG9ydFtwcmluZy0+cmluZ25vXSA6Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zMi5wb3J0W3ByaW5nLT5yaW5nbm9dOworCXN0cnVjdCBscGZjX3BncCAqcGdwID0gJnBoYmEtPnBvcnRfZ3BbcHJpbmctPnJpbmdub107CiAJdWludDMyX3QgIG1heF9jbWRfaWR4ID0gcHJpbmctPm51bUNpb2NiOwotCiAJaWYgKChwcmluZy0+bmV4dF9jbWRpZHggPT0gcHJpbmctPmNtZGlkeCkgJiYKIAkgICAoKytwcmluZy0+bmV4dF9jbWRpZHggPj0gbWF4X2NtZF9pZHgpKQogCQlwcmluZy0+bmV4dF9jbWRpZHggPSAwOwpAQCAtMzM2LDYgKzQ0NCwxOCBAQAogCXJldHVybiBscGZjX2NtZF9pb2NiKHBoYmEsIHByaW5nKTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9uZXh0X2lvdGFnOiBHZXQgYW4gaW90YWcgZm9yIHRoZSBpb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGlvY2JxOiBQb2ludGVyIHRvIGRyaXZlciBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gaW90YWcgZm9yIHRoZSBpb2NiLiBJZiB0aGVyZSBpcyBubyB1bnVzZWQgaW90YWcgYW5kCisgKiB0aGUgaW9jYnFfbG9va3VwX2xlbiA8IDB4ZmZmZiwgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBiaWdnZXIgaW90YWdfbG9va3VwCisgKiBhcnJheSBhbmQgYXNzaWducyBhIG5ldyBpb3RhZy4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbGxvY2F0ZWQgaW90YWcgaWYgc3VjY2Vzc2Z1bCwgZWxzZSByZXR1cm5zIHplcm8uCisgKiBaZXJvIGlzIG5vdCBhIHZhbGlkIGlvdGFnLgorICogVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9jay4KKyAqKi8KIHVpbnQxNl90CiBscGZjX3NsaV9uZXh0X2lvdGFnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxKQogewpAQCAtMzk5LDYgKzUxOSwyMCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3N1Ym1pdF9pb2NiOiBTdWJtaXQgYW4gaW9jYiB0byB0aGUgZmlybXdhcmUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBpb2NiOiBQb2ludGVyIHRvIGlvY2Igc2xvdCBpbiB0aGUgcmluZy4KKyAqIEBuZXh0aW9jYjogUG9pbnRlciB0byBkcml2ZXIgaW9jYiBvYmplY3Qgd2hpY2ggbmVlZCB0byBiZQorICogICAgICAgICAgICBwb3N0ZWQgdG8gZmlybXdhcmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgdG8gcG9zdCBhIG5ldyBpb2NiIHRvCisgKiB0aGUgZmlybXdhcmUuIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBuZXcgaW9jYiB0byByaW5nIGlvY2Igc2xvdCBhbmQKKyAqIHVwZGF0ZXMgdGhlIHJpbmcgcG9pbnRlcnMuIEl0IGFkZHMgdGhlIG5ldyBpb2NiIHRvIHR4Y21wbHEgaWYgdGhlcmUgaXMKKyAqIGEgY29tcGxldGlvbiBjYWxsIGJhY2sgZm9yIHRoaXMgaW9jYiBlbHNlIHRoZSBmdW5jdGlvbiB3aWxsIGZyZWUgdGhlCisgKiBpb2NiIG9iamVjdC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV9zdWJtaXRfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJSU9DQl90ICppb2NiLCBzdHJ1Y3QgbHBmY19pb2NicSAqbmV4dGlvY2IpCkBAIC00NDEsNiArNTc1LDE4IEBACiAJd3JpdGVsKHByaW5nLT5jbWRpZHgsICZwaGJhLT5ob3N0X2dwW3ByaW5nLT5yaW5nbm9dLmNtZFB1dElueCk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfdXBkYXRlX2Z1bGxfcmluZzogVXBkYXRlIHRoZSBjaGlwIGF0dGVudGlvbiByZWdpc3Rlci4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2sgZm9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgY2hpcCBhdHRlbnRpb24gYml0cyBmb3IgdGhlIHJpbmcgdG8gaW5mb3JtIGZpcm13YXJlCisgKiB0aGF0IHRoZXJlIGFyZSBwZW5kaW5nIHdvcmsgdG8gYmUgZG9uZSBmb3IgdGhpcyByaW5nIGFuZCByZXF1ZXN0cyBhbgorICogaW50ZXJydXB0IHdoZW4gdGhlcmUgaXMgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSByaW5nLiBUaGlzIGZ1bmN0aW9uIGlzCisgKiBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIHVuYWJsZSB0byBwb3N0IG1vcmUgaW9jYnMgdG8gdGhlIHJpbmcgZHVlCisgKiB0byB1bmF2YWlsYWJpbGl0eSBvZiBzcGFjZSBpbiB0aGUgcmluZy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV91cGRhdGVfZnVsbF9yaW5nKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewpAQCAtNDYwLDYgKzYwNiwxNSBAQAogCXByaW5nLT5zdGF0cy5pb2NiX2NtZF9mdWxsKys7CiB9CiAKKy8qKgorICogbHBmY19zbGlfdXBkYXRlX3Jpbmc6IFVwZGF0ZSBjaGlwIGF0dGVudGlvbiByZWdpc3Rlci4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgY2hpcCBhdHRlbnRpb24gcmVnaXN0ZXIgYml0IGZvciB0aGUKKyAqIGdpdmVuIHJpbmcgdG8gaW5mb3JtIEhCQSB0aGF0IHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lCisgKiBpbiB0aGlzIHJpbmcuIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2suCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfdXBkYXRlX3Jpbmcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7CkBAIC00NjgsMTEgKzYyMywyMiBAQAogCS8qCiAJICogVGVsbCB0aGUgSEJBIHRoYXQgdGhlcmUgaXMgd29yayB0byBkbyBpbiB0aGlzIHJpbmcuCiAJICovCi0Jd21iKCk7Ci0Jd3JpdGVsKENBX1IwQVRUIDw8IChyaW5nbm8gKiA0KSwgcGhiYS0+Q0FyZWdhZGRyKTsKLQlyZWFkbChwaGJhLT5DQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCWlmICghKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19DUlBfRU5BQkxFRCkpIHsKKwkJd21iKCk7CisJCXdyaXRlbChDQV9SMEFUVCA8PCAocmluZ25vICogNCksIHBoYmEtPkNBcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkNBcmVnYWRkcik7IC8qIGZsdXNoICovCisJfQogfQogCisvKioKKyAqIGxwZmNfc2xpX3Jlc3VtZV9pb2NiOiBQcm9jZXNzIGlvY2JzIGluIHRoZSB0eHEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCB0byBwb3N0IHBlbmRpbmcgaW9jYnMKKyAqIGluIHRoZSB0eHEgdG8gdGhlIGZpcm13YXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGRyaXZlcgorICogZGV0ZWN0cyBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIHJpbmcuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfcmVzdW1lX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7CkBAIC01MDQsNiArNjcwLDE2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc2xpX25leHRfaGJxX3Nsb3Q6IEdldCBuZXh0IGhicSBlbnRyeSBmb3IgdGhlIEhCUS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBoYnFubzogSEJRIG51bWJlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCB0byBnZXQgdGhlIG5leHQKKyAqIGF2YWlsYWJsZSBzbG90IGZvciB0aGUgZ2l2ZW4gSEJRLiBJZiB0aGVyZSBpcyBmcmVlIHNsb3QKKyAqIGF2YWlsYWJsZSBmb3IgdGhlIEhCUSBpdCB3aWxsIHJldHVybiBwb2ludGVyIHRvIHRoZSBuZXh0IGF2YWlsYWJsZQorICogSEJRIGVudHJ5IGVsc2UgaXQgd2lsbCByZXR1cm4gTlVMTC4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKgogbHBmY19zbGlfbmV4dF9oYnFfc2xvdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IGhicW5vKQogewpAQCAtNTM5LDYgKzcxNSwxNSBAQAogCQkJaGJxcC0+aGJxUHV0SWR4OwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicWJ1Zl9mcmVlX2FsbDogRnJlZSBhbGwgdGhlIGhicSBidWZmZXJzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkIHRvIGZyZWUgYWxsIHRoZQorICogaGJxIGJ1ZmZlcnMgd2hpbGUgdW5pbml0aWFsaXppbmcgdGhlIFNMSSBpbnRlcmZhY2UuIEl0IGFsc28KKyAqIGZyZWVzIHRoZSBIQlEgYnVmZmVycyByZXR1cm5lZCBieSB0aGUgZmlybXdhcmUgYnV0IG5vdCB5ZXQKKyAqIHByb2Nlc3NlZCBieSB0aGUgdXBwZXIgbGF5ZXJzLgorICoqLwogdm9pZAogbHBmY19zbGlfaGJxYnVmX2ZyZWVfYWxsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTU4NCw2ICs3NjksMTggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxX3RvX2Zpcm13YXJlOiBQb3N0IHRoZSBoYnEgYnVmZmVyIHRvIGZpcm13YXJlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGhicW5vOiBIQlEgbnVtYmVyLgorICogQGhicV9idWY6IFBvaW50ZXIgdG8gSEJRIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBoYmFsb2NrIGhlbGQgdG8gcG9zdCBhCisgKiBoYnEgYnVmZmVyIHRvIHRoZSBmaXJtd2FyZS4gSWYgdGhlIGZ1bmN0aW9uIGZpbmRzIGFuIGVtcHR5CisgKiBzbG90IGluIHRoZSBIQlEsIGl0IHdpbGwgcG9zdCB0aGUgYnVmZmVyLiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqIHBvaW50ZXIgdG8gdGhlIGhicSBlbnRyeSBpZiBpdCBzdWNjZXNzZnVsbHkgcG9zdCB0aGUgYnVmZmVyCisgKiBlbHNlIGl0IHdpbGwgcmV0dXJuIE5VTEwuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfaGJxX2VudHJ5ICoKIGxwZmNfc2xpX2hicV90b19maXJtd2FyZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IGhicW5vLAogCQkJIHN0cnVjdCBoYnFfZG1hYnVmICpoYnFfYnVmKQpAQCAtNjEyLDYgKzgwOSw3IEBACiAJcmV0dXJuIGhicWU7CiB9CiAKKy8qIEhCUSBmb3IgRUxTIGFuZCBDVCB0cmFmZmljLiAqLwogc3RhdGljIHN0cnVjdCBscGZjX2hicV9pbml0IGxwZmNfZWxzX2hicSA9IHsKIAkucm4gPSAxLAogCS5lbnRyeV9jb3VudCA9IDIwMCwKQEAgLTYyMyw2ICs4MjEsNyBAQAogCS5hZGRfY291bnQgPSA1LAogfTsKIAorLyogSEJRIGZvciB0aGUgZXh0cmEgcmluZyBpZiBuZWVkZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19oYnFfaW5pdCBscGZjX2V4dHJhX2hicSA9IHsKIAkucm4gPSAxLAogCS5lbnRyeV9jb3VudCA9IDIwMCwKQEAgLTYzNCw1MSArODMzLDgxIEBACiAJLmFkZF9jb3VudCA9IDUsCiB9OwogCisvKiBBcnJheSBvZiBIQlFzICovCiBzdHJ1Y3QgbHBmY19oYnFfaW5pdCAqbHBmY19oYnFfZGVmc1tdID0gewogCSZscGZjX2Vsc19oYnEsCiAJJmxwZmNfZXh0cmFfaGJxLAogfTsKIAorLyoqCisgKiBscGZjX3NsaV9oYnFidWZfZmlsbF9oYnFzOiBQb3N0IG1vcmUgaGJxIGJ1ZmZlcnMgdG8gSEJRLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGhicW5vOiBIQlEgbnVtYmVyLgorICogQGNvdW50OiBOdW1iZXIgb2YgSEJRIGJ1ZmZlcnMgdG8gYmUgcG9zdGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkIHRvIHBvc3QgbW9yZSBoYnEgYnVmZmVycyB0byB0aGUKKyAqIGdpdmVuIEhCUS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBIQlEgYnVmZmVycyBzdWNjZXNzZnVsbHkKKyAqIHBvc3RlZC4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX2hicWJ1Zl9maWxsX2hicXMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBoYnFubywgdWludDMyX3QgY291bnQpCiB7Ci0JdWludDMyX3QgaSwgc3RhcnQsIGVuZDsKKwl1aW50MzJfdCBpLCBwb3N0ZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGhicV9kbWFidWYgKmhicV9idWZmZXI7Ci0KKwlMSVNUX0hFQUQoaGJxX2J1Zl9saXN0KTsKIAlpZiAoIXBoYmEtPmhicXNbaGJxbm9dLmhicV9hbGxvY19idWZmZXIpCiAJCXJldHVybiAwOwogCi0Jc3RhcnQgPSBwaGJhLT5oYnFzW2hicW5vXS5idWZmZXJfY291bnQ7Ci0JZW5kID0gY291bnQgKyBzdGFydDsKLQlpZiAoZW5kID4gbHBmY19oYnFfZGVmc1toYnFub10tPmVudHJ5X2NvdW50KQotCQllbmQgPSBscGZjX2hicV9kZWZzW2hicW5vXS0+ZW50cnlfY291bnQ7Ci0KKwlpZiAoKHBoYmEtPmhicXNbaGJxbm9dLmJ1ZmZlcl9jb3VudCArIGNvdW50KSA+CisJICAgIGxwZmNfaGJxX2RlZnNbaGJxbm9dLT5lbnRyeV9jb3VudCkKKwkJY291bnQgPSBscGZjX2hicV9kZWZzW2hicW5vXS0+ZW50cnlfY291bnQgLQorCQkJCQlwaGJhLT5oYnFzW2hicW5vXS5idWZmZXJfY291bnQ7CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisJLyogQWxsb2NhdGUgSEJRIGVudHJpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQloYnFfYnVmZmVyID0gKHBoYmEtPmhicXNbaGJxbm9dLmhicV9hbGxvY19idWZmZXIpKHBoYmEpOworCQlpZiAoIWhicV9idWZmZXIpCisJCQlicmVhazsKKwkJbGlzdF9hZGRfdGFpbCgmaGJxX2J1ZmZlci0+ZGJ1Zi5saXN0LCAmaGJxX2J1Zl9saXN0KTsKKwl9CiAJLyogQ2hlY2sgd2hldGhlciBIQlEgaXMgc3RpbGwgaW4gdXNlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAlpZiAoIXBoYmEtPmhicV9pbl91c2UpCi0JCWdvdG8gb3V0OwotCi0JLyogUG9wdWxhdGUgSEJRIGVudHJpZXMgKi8KLQlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7Ci0JCWhicV9idWZmZXIgPSAocGhiYS0+aGJxc1toYnFub10uaGJxX2FsbG9jX2J1ZmZlcikocGhiYSk7Ci0JCWlmICghaGJxX2J1ZmZlcikKLQkJCWdvdG8gZXJyOwotCQloYnFfYnVmZmVyLT50YWcgPSAoaSB8IChoYnFubyA8PCAxNikpOwotCQlpZiAobHBmY19zbGlfaGJxX3RvX2Zpcm13YXJlKHBoYmEsIGhicW5vLCBoYnFfYnVmZmVyKSkKKwkJZ290byBlcnI7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZoYnFfYnVmX2xpc3QpKSB7CisJCWxpc3RfcmVtb3ZlX2hlYWQoJmhicV9idWZfbGlzdCwgaGJxX2J1ZmZlciwgc3RydWN0IGhicV9kbWFidWYsCisJCQkJIGRidWYubGlzdCk7CisJCWhicV9idWZmZXItPnRhZyA9IChwaGJhLT5oYnFzW2hicW5vXS5idWZmZXJfY291bnQgfAorCQkJCSAgICAgIChoYnFubyA8PCAxNikpOworCQlpZiAobHBmY19zbGlfaGJxX3RvX2Zpcm13YXJlKHBoYmEsIGhicW5vLCBoYnFfYnVmZmVyKSkgewogCQkJcGhiYS0+aGJxc1toYnFub10uYnVmZmVyX2NvdW50Kys7Ci0JCWVsc2UKKwkJCXBvc3RlZCsrOworCQl9IGVsc2UKIAkJCShwaGJhLT5oYnFzW2hicW5vXS5oYnFfZnJlZV9idWZmZXIpKHBoYmEsIGhicV9idWZmZXIpOwogCX0KLQotIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJcmV0dXJuIHBvc3RlZDsKK2VycjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZoYnFfYnVmX2xpc3QpKSB7CisJCWxpc3RfcmVtb3ZlX2hlYWQoJmhicV9idWZfbGlzdCwgaGJxX2J1ZmZlciwgc3RydWN0IGhicV9kbWFidWYsCisJCQkJIGRidWYubGlzdCk7CisJCShwaGJhLT5oYnFzW2hicW5vXS5oYnFfZnJlZV9idWZmZXIpKHBoYmEsIGhicV9idWZmZXIpOworCX0KIAlyZXR1cm4gMDsKLSBlcnI6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxczogUG9zdCBtb3JlIEhCUSBidWZmZXJzIHRvIGZpcm13YXJlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHFubzogSEJRIG51bWJlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvc3RzIG1vcmUgYnVmZmVycyB0byB0aGUgSEJRLiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgSEJRIGVudHJpZXMKKyAqIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQuCisgKiovCiBpbnQKIGxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHFubykKIHsKQEAgLTY4Niw2ICs5MTUsMTUgQEAKIAkJCQkJIGxwZmNfaGJxX2RlZnNbcW5vXS0+YWRkX2NvdW50KSk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxYnVmX2luaXRfaGJxczogUG9zdCBpbml0aWFsIGJ1ZmZlcnMgdG8gdGhlIEhCUS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBxbm86ICBIQlEgcXVldWUgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gU0xJIGluaXRpYWxpemF0aW9uIGNvZGUgcGF0aCB3aXRoCisgKiBubyBsb2NrIGhlbGQgdG8gcG9zdCBpbml0aWFsIEhCUSBidWZmZXJzIHRvIGZpcm13YXJlLiBUaGUKKyAqIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBIQlEgZW50cmllcyBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfaGJxYnVmX2luaXRfaGJxcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHFubykKIHsKQEAgLTY5Myw2ICs5MzEsMTYgQEAKIAkJCQkJIGxwZmNfaGJxX2RlZnNbcW5vXS0+aW5pdF9jb3VudCkpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicWJ1Zl9maW5kOiBGaW5kIHRoZSBoYnEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBhIHRhZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEB0YWc6IFRhZyBvZiB0aGUgaGJxIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbiBzZWFyY2hlcworICogZm9yIHRoZSBoYnEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBoYnEgYnVmZmVyCisgKiBsaXN0LiBJZiBpdCBmaW5kcyB0aGUgaGJxIGJ1ZmZlciwgaXQgcmV0dXJucyB0aGUgaGJxX2J1ZmZlciBvdGhlciB3aXNlCisgKiBpdCByZXR1cm5zIE5VTEwuCisgKiovCiBzdGF0aWMgc3RydWN0IGhicV9kbWFidWYgKgogbHBmY19zbGlfaGJxYnVmX2ZpbmQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCB0YWcpCiB7CkBAIC03MTYsNiArOTY0LDE1IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogbHBmY19zbGlfZnJlZV9oYnE6IEdpdmUgYmFjayB0aGUgaGJxIGJ1ZmZlciB0byBmaXJtd2FyZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBoYnFfYnVmZmVyOiBQb2ludGVyIHRvIEhCUSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrLiBUaGlzIGZ1bmN0aW9uIGdpdmVzIGJhY2sKKyAqIHRoZSBoYnEgYnVmZmVyIHRvIGZpcm13YXJlLiBJZiB0aGUgSEJRIGRvZXMgbm90IGhhdmUgc3BhY2UgdG8KKyAqIHBvc3QgdGhlIGJ1ZmZlciwgaXQgd2lsbCBmcmVlIHRoZSBidWZmZXIuCisgKiovCiB2b2lkCiBscGZjX3NsaV9mcmVlX2hicShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBoYnFfZG1hYnVmICpoYnFfYnVmZmVyKQogewpAQCAtNzI5LDYgKzk4NiwxNSBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX3NsaV9jaGtfbWJ4X2NvbW1hbmQ6IENoZWNrIGlmIHRoZSBtYWlsYm94IGlzIGEgbGVnaXRpbWF0ZSBtYWlsYm94LgorICogQG1ieENvbW1hbmQ6IG1haWxib3ggY29tbWFuZCBjb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBtYWlsYm94IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gdG8gdmVyaWZ5CisgKiB0aGF0IHRoZSBjb21wbGV0ZWQgbWFpbGJveCBjb21tYW5kIGlzIGEgbGVnaXRpbWF0ZSBtYWlsYm94IGNvbW1hbmQuIElmIHRoZQorICogY29tcGxldGVkIG1haWxib3ggaXMgbm90IGtub3duIHRvIHRoZSBmdW5jdGlvbiwgaXQgd2lsbCByZXR1cm4gTUJYX1NIVVRET1dOCisgKiBhbmQgdGhlIG1haWxib3ggZXZlbnQgaGFuZGxlciB3aWxsIHRha2UgdGhlIEhCQSBvZmZsaW5lLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfY2hrX21ieF9jb21tYW5kKHVpbnQ4X3QgbWJ4Q29tbWFuZCkKIHsKQEAgLTc4NSw2ICsxMDUxLDggQEAKIAljYXNlIE1CWF9SRUdfVlBJOgogCWNhc2UgTUJYX1VOUkVHX1ZQSToKIAljYXNlIE1CWF9IRUFSVEJFQVQ6CisJY2FzZSBNQlhfUE9SVF9DQVBBQklMSVRJRVM6CisJY2FzZSBNQlhfUE9SVF9JT1ZfQ09OVFJPTDoKIAkJcmV0ID0gbWJ4Q29tbWFuZDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTc5Myw2ICsxMDYxLDE5IEBACiAJfQogCXJldHVybiByZXQ7CiB9CisKKy8qKgorICogbHBmY19zbGlfd2FrZV9tYm94X3dhaXQ6IENvbXBsZXRpb24gaGFuZGxlciBmb3IgbWJveCBpc3N1ZWQgZnJvbQorICogICAgICAgICAgbHBmY19zbGlfaXNzdWVfbWJveF93YWl0LgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBtYm94cTogUG9pbnRlciB0byBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyBpcyBjb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gZm9yIG1haWxib3ggY29tbWFuZHMgaXNzdWVkIGZyb20KKyAqIGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiBtYWlsYm94IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aCBubyBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgd2FrZSB1cCB0aHJlYWQgd2FpdGluZyBvbiB0aGUgd2FpdCBxdWV1ZSBwb2ludGVkIGJ5IGNvbnRleHQxCisgKiBvZiB0aGUgbWFpbGJveC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV93YWtlX21ib3hfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1ib3hxKQogewpAQCAtODEyLDYgKzEwOTMsMTcgQEAKIAlyZXR1cm47CiB9CiAKKworLyoqCisgKiBscGZjX3NsaV9kZWZfbWJveF9jbXBsOiBEZWZhdWx0IG1haWxib3ggY29tcGxldGlvbiBoYW5kbGVyLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBtYjogUG9pbnRlciB0byBtYWlsYm94IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBkZWZhdWx0IG1haWxib3ggY29tcGxldGlvbiBoYW5kbGVyLiBJdAorICogZnJlZXMgdGhlIG1lbW9yeSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wbGV0ZWQgbWFpbGJveAorICogY29tbWFuZC4gSWYgdGhlIGNvbXBsZXRlZCBjb21tYW5kIGlzIGEgUkVHX0xPR0lOIG1haWxib3ggY29tbWFuZCwKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCBpc3N1ZSBhIFVSRUdfTE9HSU4gdG8gcmUtY2xhaW0gdGhlIFJQSS4KKyAqKi8KIHZvaWQKIGxwZmNfc2xpX2RlZl9tYm94X2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKIHsKQEAgLTg0Niw2ICsxMTM4LDE5IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hhbmRsZV9tYl9ldmVudDogSGFuZGxlIG1haWxib3ggY29tcGxldGlvbnMgZnJvbSBmaXJtd2FyZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYWxsCisgKiB0aGUgY29tcGxldGVkIG1haWxib3ggY29tbWFuZHMgYW5kIGdpdmVzIGl0IHRvIHVwcGVyIGxheWVycy4gVGhlIGludGVycnVwdAorICogc2VydmljZSByb3V0aW5lIHByb2Nlc3NlcyBtYWlsYm94IGNvbXBsZXRpb24gaW50ZXJydXB0IGFuZCBhZGRzIGNvbXBsZXRlZAorICogbWFpbGJveCBjb21tYW5kcyB0byB0aGUgbWJveHFfY21wbCBxdWV1ZSBhbmQgc2lnbmFscyB0aGUgd29ya2VyIHRocmVhZC4KKyAqIFdvcmtlciB0aHJlYWQgY2FsbCBscGZjX3NsaV9oYW5kbGVfbWJfZXZlbnQsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZQorICogY29tcGxldGVkIG1haWxib3ggY29tbWFuZHMgaW4gbWJveHFfY21wbCBxdWV1ZSB0byB0aGUgdXBwZXIgbGF5ZXJzLiBUaGlzCisgKiBmdW5jdGlvbiByZXR1cm5zIHRoZSBtYWlsYm94IGNvbW1hbmRzIHRvIHRoZSB1cHBlciBsYXllciBieSBjYWxsaW5nIHRoZQorICogY29tcGxldGlvbiBoYW5kbGVyIGZ1bmN0aW9uIG9mIGVhY2ggbWFpbGJveC4KKyAqKi8KIGludAogbHBmY19zbGlfaGFuZGxlX21iX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTk1Myw2ICsxMjU4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmVwbGFjZV9oYnFidWZmOiBSZXBsYWNlIHRoZSBIQlEgYnVmZmVyIHdpdGggYSBuZXcgYnVmZmVyLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHRhZzogVGFnIGZvciB0aGUgSEJRIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHVuc29saWNpdGVkIGV2ZW50IGhhbmRsZXIgY29kZSBwYXRoIHRvIGdldCB0aGUKKyAqIEhCUSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIGFuIHVuc29saWNpdGVkIGlvY2IuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGgKKyAqIG5vIGxvY2sgaGVsZC4gSXQgcmV0dXJucyB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdGFnIGFuZCBwb3N0cworICogYW5vdGhlciBidWZmZXIgdG8gdGhlIGZpcm13YXJlLiBOb3RlIHRoYXQgdGhlIG5ldyBidWZmZXIgbXVzdCBiZSBhbGxvY2F0ZWQKKyAqIGJlZm9yZSB0YWtpbmcgdGhlIGhiYWxvY2sgYW5kIHRoYXQgdGhlIGhiYSBsb2NrIG11c3QgYmUgaGVsZCB1bnRpbCBpdCBpcworICogZmluaXNoZWQgd2l0aCB0aGUgaGJxIGVudHJ5IHN3YXAuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfZG1hYnVmICoKIGxwZmNfc2xpX3JlcGxhY2VfaGJxYnVmZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHRhZykKIHsKQEAgLTk2MiwyMiArMTI3OSwyOCBAQAogCWRtYV9hZGRyX3QgcGh5czsJLyogbWFwcGVkIGFkZHJlc3MgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaGJxbm8gPSB0YWcgPj4gMTY7CisJbmV3X2hicV9lbnRyeSA9IChwaGJhLT5oYnFzW2hicW5vXS5oYnFfYWxsb2NfYnVmZmVyKShwaGJhKTsKIAkvKiBDaGVjayB3aGV0aGVyIEhCUSBpcyBzdGlsbCBpbiB1c2UgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCWlmICghcGhiYS0+aGJxX2luX3VzZSkgeworCQlpZiAobmV3X2hicV9lbnRyeSkKKwkJCShwaGJhLT5oYnFzW2hicW5vXS5oYnFfZnJlZV9idWZmZXIpKHBoYmEsCisJCQkJCQkJICAgIG5ld19oYnFfZW50cnkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWhicV9lbnRyeSA9IGxwZmNfc2xpX2hicWJ1Zl9maW5kKHBoYmEsIHRhZyk7CiAJaWYgKGhicV9lbnRyeSA9PSBOVUxMKSB7CisJCWlmIChuZXdfaGJxX2VudHJ5KQorCQkJKHBoYmEtPmhicXNbaGJxbm9dLmhicV9mcmVlX2J1ZmZlcikocGhiYSwKKwkJCQkJCQkgICAgbmV3X2hicV9lbnRyeSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWxpc3RfZGVsKCZoYnFfZW50cnktPmRidWYubGlzdCk7CiAKLQloYnFubyA9IHRhZyA+PiAxNjsKLQluZXdfaGJxX2VudHJ5ID0gKHBoYmEtPmhicXNbaGJxbm9dLmhicV9hbGxvY19idWZmZXIpKHBoYmEpOwogCWlmIChuZXdfaGJxX2VudHJ5ID09IE5VTEwpIHsKIAkJbGlzdF9hZGRfdGFpbCgmaGJxX2VudHJ5LT5kYnVmLmxpc3QsICZwaGJhLT5oYnFidWZfaW5fbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKQEAgLTk5Nyw2ICsxMzIwLDE4IEBACiAJcmV0dXJuICZuZXdfaGJxX2VudHJ5LT5kYnVmOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2dldF9idWZmOiBHZXQgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlciB0YWcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEB0YWc6IGJ1ZmZlciB0YWcuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuIFdoZW4gUVVFX0JVRlRBR19CSVQgYml0CisgKiBpcyBzZXQgaW4gdGhlIHRhZyB0aGUgYnVmZmVyIGlzIHBvc3RlZCBmb3IgYSBwYXJ0aWN1bGFyIGV4Y2hhbmdlLAorICogdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBidWZmZXIgd2l0aG91dCByZXBsYWNpbmcgdGhlIGJ1ZmZlci4KKyAqIElmIHRoZSBidWZmZXIgaXMgZm9yIHVuc29saWNpdGVkIEVMUyBvciBDVCB0cmFmZmljLCB0aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIHRoZSBidWZmZXIgYW5kIGFsc28gcG9zdHMgYW5vdGhlciBidWZmZXIgdG8gdGhlIGZpcm13YXJlLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2RtYWJ1ZiAqCiBscGZjX3NsaV9nZXRfYnVmZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCiAJCQlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCkBAIC0xMDA4LDYgKzEzNDMsMjEgQEAKIAkJcmV0dXJuIGxwZmNfc2xpX3JlcGxhY2VfaGJxYnVmZihwaGJhLCB0YWcpOwogfQogCisKKy8qKgorICogbHBmY19zbGlfcHJvY2Vzc191bnNvbF9pb2NiOiBVbnNvbGljaXRlZCBpb2NiIGhhbmRsZXIuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBzYXZlcTogUG9pbnRlciB0byB0aGUgdW5zb2xpY2l0ZWQgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZCBieSB0aGUgcmluZyBldmVudCBoYW5kbGVyCisgKiB3aGVuIHRoZXJlIGlzIGFuIHVuc29saWNpdGVkIGlvY2IgcG9zdGVkIHRvIHRoZSByZXNwb25zZSByaW5nIGJ5IHRoZQorICogZmlybXdhcmUuIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW9jYnMKKyAqIGFuZCBjYWxscyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIHJpbmcuIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBib3RoCisgKiBxcmluZyBidWZmZXJzIGFuZCBoYnEgYnVmZmVycy4KKyAqIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgMSB0aGUgY2FsbGVyIGNhbiBmcmVlIHRoZSBpb2NiIG9iamVjdCBvdGhlcndpc2UKKyAqIHVwcGVyIGxheWVyIGZ1bmN0aW9ucyB3aWxsIGZyZWUgdGhlIGlvY2Igb2JqZWN0cy4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX3Byb2Nlc3NfdW5zb2xfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqc2F2ZXEpCkBAIC0xMTkyLDYgKzE1NDIsMTggQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9pb2NicV9sb29rdXA6IEZpbmQgY29tbWFuZCBpb2NiIGZvciB0aGUgZ2l2ZW4gcmVzcG9uc2UgaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHByc3Bpb2NiOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgdXAgdGhlIGlvY2JfbG9va3VwIHRhYmxlIHRvIGdldCB0aGUgY29tbWFuZCBpb2NiCisgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiByZXNwb25zZSBpb2NiIHVzaW5nIHRoZSBpb3RhZyBvZiB0aGUKKyAqIHJlc3BvbnNlIGlvY2IuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGhiYWxvY2sgaGVsZC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29tbWFuZCBpb2NiIG9iamVjdCBpZiBpdCBmaW5kcyB0aGUgY29tbWFuZAorICogaW9jYiBlbHNlIHJldHVybnMgTlVMTC4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19pb2NicSAqCiBscGZjX3NsaV9pb2NicV9sb29rdXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkgICAgICBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCkBAIC0xMjE3LDYgKzE1NzksMjMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9wcm9jZXNzX3NvbF9pb2NiOiBwcm9jZXNzIHNvbGljaXRlZCBpb2NiIGNvbXBsZXRpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBzYXZlcTogUG9pbnRlciB0byB0aGUgcmVzcG9uc2UgaW9jYiB0byBiZSBwcm9jZXNzZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHJpbmcgZXZlbnQgaGFuZGxlciBmb3Igbm9uLWZjcAorICogcmluZ3Mgd2hlbiB0aGVyZSBpcyBhIG5ldyByZXNwb25zZSBpb2NiIGluIHRoZSByZXNwb25zZSByaW5nLgorICogVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9ja3MuIFRoaXMgZnVuY3Rpb24KKyAqIGdldHMgdGhlIGNvbW1hbmQgaW9jYiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3BvbnNlIGlvY2IgYW5kCisgKiBjYWxscyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGZvciB0aGUgY29tbWFuZCBpb2NiLiBJZiB0aGVyZQorICogaXMgbm8gY29tcGxldGlvbiBoYW5kbGVyLCB0aGUgZnVuY3Rpb24gd2lsbCBmcmVlIHRoZSByZXNvdXJjZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCBjb21tYW5kIGlvY2IuIElmIHRoZSByZXNwb25zZSBpb2NiIGlzIGZvcgorICogYW4gYWxyZWFkeSBhYm9ydGVkIGNvbW1hbmQgaW9jYiwgdGhlIHN0YXR1cyBvZiB0aGUgY29tcGxldGlvbgorICogaXMgY2hhbmdlZCB0byBJT1NUQVRfTE9DQUxfUkVKRUNUL0lPRVJSX1NMSV9BQk9SVEVELgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyAxLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfcHJvY2Vzc19zb2xfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJCSAgc3RydWN0IGxwZmNfaW9jYnEgKnNhdmVxKQpAQCAtMTIzMyw2ICsxNjEyLDE3IEBACiAJaWYgKGNtZGlvY2JwKSB7CiAJCWlmIChjbWRpb2NicC0+aW9jYl9jbXBsKSB7CiAJCQkvKgorCQkJICogSWYgYW4gRUxTIGNvbW1hbmQgZmFpbGVkIHNlbmQgYW4gZXZlbnQgdG8gbWdtdAorCQkJICogYXBwbGljYXRpb24uCisJCQkgKi8KKwkJCWlmIChzYXZlcS0+aW9jYi51bHBTdGF0dXMgJiYKKwkJCSAgICAgKHByaW5nLT5yaW5nbm8gPT0gTFBGQ19FTFNfUklORykgJiYKKwkJCSAgICAgKGNtZGlvY2JwLT5pb2NiLnVscENvbW1hbmQgPT0KKwkJCQlDTURfRUxTX1JFUVVFU1Q2NF9DUikpCisJCQkJbHBmY19zZW5kX2Vsc19mYWlsdXJlX2V2ZW50KHBoYmEsCisJCQkJCWNtZGlvY2JwLCBzYXZlcSk7CisKKwkJCS8qCiAJCQkgKiBQb3N0IGFsbCBFTFMgY29tcGxldGlvbnMgdG8gdGhlIHdvcmtlciB0aHJlYWQuCiAJCQkgKiBBbGwgb3RoZXIgYXJlIHBhc3NlZCB0byB0aGUgY29tcGxldGlvbiBjYWxsYmFjay4KIAkJCSAqLwpAQCAtMTI4MiwxMiArMTY3MiwyMCBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yc3BfcG9pbnRlcnNfZXJyb3I6IFJlc3BvbnNlIHJpbmcgcG9pbnRlciBlcnJvciBoYW5kbGVyLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgaW9jYiByaW5nIGV2ZW50IGhhbmRsZXJzIHdoZW4KKyAqIHB1dCBwb2ludGVyIGlzIGFoZWFkIG9mIHRoZSBnZXQgcG9pbnRlciBmb3IgYSByaW5nLiBUaGlzIGZ1bmN0aW9uIHNpZ25hbAorICogYW4gZXJyb3IgYXR0ZW50aW9uIGNvbmRpdGlvbiB0byB0aGUgd29ya2VyIHRocmVhZCBhbmQgdGhlIHdvcmtlcgorICogdGhyZWFkIHdpbGwgdHJhbnNpdGlvbiB0aGUgSEJBIHRvIG9mZmxpbmUgc3RhdGUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfcnNwX3BvaW50ZXJzX2Vycm9yKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewotCXN0cnVjdCBscGZjX3BncCAqcGdwID0gKHBoYmEtPnNsaV9yZXYgPT0gMykgPwotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLnBvcnRbcHJpbmctPnJpbmdub10gOgotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczIucG9ydFtwcmluZy0+cmluZ25vXTsKKwlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9ICZwaGJhLT5wb3J0X2dwW3ByaW5nLT5yaW5nbm9dOwogCS8qCiAJICogUmluZyA8cmluZ25vPiBoYW5kbGVyOiBwb3J0UnNwUHV0IDxwb3J0UnNwUHV0PiBpcyBiaWdnZXIgdGhlbgogCSAqIHJzcCByaW5nIDxwb3J0UnNwTWF4PgpAQCAtMTMxMiw2ICsxNzEwLDUxIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfcG9sbF9lcmF0dDogRXJyb3IgYXR0ZW50aW9uIHBvbGxpbmcgdGltZXIgdGltZW91dCBoYW5kbGVyLgorICogQHB0cjogUG9pbnRlciB0byBhZGRyZXNzIG9mIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgdGhlIEVycm9yIEF0dGVudGlvbiBwb2xsaW5nIHRpbWVyIHdoZW4gdGhlCisgKiB0aW1lciB0aW1lcyBvdXQuIEl0IHdpbGwgY2hlY2sgdGhlIFNMSSBFcnJvciBBdHRlbnRpb24gcmVnaXN0ZXIgZm9yCisgKiBwb3NzaWJsZSBhdHRlbnRpb24gZXZlbnRzLiBJZiBzbywgaXQgd2lsbCBwb3N0IGFuIEVycm9yIEF0dGVudGlvbiBldmVudAorICogYW5kIHdha2UgdXAgd29ya2VyIHRocmVhZCB0byBwcm9jZXNzIGl0LiBPdGhlcndpc2UsIGl0IHdpbGwgc2V0IHVwIHRoZQorICogRXJyb3IgQXR0ZW50aW9uIHBvbGxpbmcgdGltZXIgZm9yIHRoZSBuZXh0IHBvbGwuCisgKiovCit2b2lkIGxwZmNfcG9sbF9lcmF0dCh1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmE7CisJdWludDMyX3QgZXJhdHQgPSAwOworCisJcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilwdHI7CisKKwkvKiBDaGVjayBjaGlwIEhBIHJlZ2lzdGVyIGZvciBlcnJvciBldmVudCAqLworCWVyYXR0ID0gbHBmY19zbGlfY2hlY2tfZXJhdHQocGhiYSk7CisKKwlpZiAoZXJhdHQpCisJCS8qIFRlbGwgdGhlIHdvcmtlciB0aHJlYWQgdGhlcmUgaXMgd29yayB0byBkbyAqLworCQlscGZjX3dvcmtlcl93YWtlX3VwKHBoYmEpOworCWVsc2UKKwkJLyogUmVzdGFydCB0aGUgdGltZXIgZm9yIG5leHQgZXJhdHQgcG9sbCAqLworCQltb2RfdGltZXIoJnBoYmEtPmVyYXR0X3BvbGwsIGppZmZpZXMgKworCQkJCQlIWiAqIExQRkNfRVJBVFRfUE9MTF9JTlRFUlZBTCk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfc2xpX3BvbGxfZmNwX3Jpbmc6IEhhbmRsZSBGQ1AgcmluZyBjb21wbGV0aW9uIGluIHBvbGxpbmcgbW9kZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGxwZmNfcXVldWVjb21tYW5kLCBscGZjX3BvbGxfdGltZW91dCwKKyAqIGxwZmNfYWJvcnRfaGFuZGxlciBhbmQgbHBmY19zbGF2ZV9jb25maWd1cmUgd2hlbiBGQ1BfUklOR19QT0xMSU5HCisgKiBpcyBlbmFibGVkLgorICoKKyAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCBhbnkgbG9jay4KKyAqIFRoZSBmdW5jdGlvbiBwcm9jZXNzZXMgZWFjaCByZXNwb25zZSBpb2NiIGluIHRoZSByZXNwb25zZSByaW5nIHVudGlsIGl0CisgKiBmaW5kcyBhbiBpb2NiIHdpdGggTEUgYml0IHNldCBhbmQgY2hhaW5zIGFsbCB0aGUgaW9jYnMgdXB0byB0aGUgaW9jYiB3aXRoCisgKiBMRSBiaXQgc2V0LiBUaGUgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgb2YgdGhlIGNvbW1hbmQgaW9jYgorICogaWYgdGhlIHJlc3BvbnNlIGlvY2IgaW5kaWNhdGVzIGEgY29tcGxldGlvbiBmb3IgYSBjb21tYW5kIGlvY2Igb3IgaXQgaXMKKyAqIGFuIGFib3J0IGNvbXBsZXRpb24uCisgKiovCiB2b2lkIGxwZmNfc2xpX3BvbGxfZmNwX3Jpbmcoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXN0cnVjdCBscGZjX3NsaSAgICAgICpwc2xpICA9ICZwaGJhLT5zbGk7CkBAIC0xMzIwLDcgKzE3NjMsNyBAQAogCUlPQ0JfdCAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSA9IE5VTEw7CiAJc3RydWN0IGxwZmNfaW9jYnEgcnNwaW9jYnE7Ci0Jc3RydWN0IGxwZmNfcGdwICpwZ3A7CisJc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAmcGhiYS0+cG9ydF9ncFtwcmluZy0+cmluZ25vXTsKIAl1aW50MzJfdCBzdGF0dXM7CiAJdWludDMyX3QgcG9ydFJzcFB1dCwgcG9ydFJzcE1heDsKIAlpbnQgdHlwZTsKQEAgLTEzMzAsMTEgKzE3NzMsNiBAQAogCiAJcHJpbmctPnN0YXRzLmlvY2JfZXZlbnQrKzsKIAotCXBncCA9IChwaGJhLT5zbGlfcmV2ID09IDMpID8KLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5wb3J0W3ByaW5nLT5yaW5nbm9dIDoKLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMyLnBvcnRbcHJpbmctPnJpbmdub107Ci0KLQogCS8qCiAJICogVGhlIG5leHQgYXZhaWxhYmxlIHJlc3BvbnNlIGVudHJ5IHNob3VsZCBuZXZlciBleGNlZWQgdGhlIG1heGltdW0KIAkgKiBlbnRyaWVzLiAgSWYgaXQgZG9lcywgdHJlYXQgaXQgYXMgYW4gYWRhcHRlciBoYXJkd2FyZSBlcnJvci4KQEAgLTEzNzIsOCArMTgxMCw4IEBACiAJCQkJCWlyc3AtPnVuLnVscFdvcmRbM10sCiAJCQkJCWlyc3AtPnVuLnVscFdvcmRbNF0sCiAJCQkJCWlyc3AtPnVuLnVscFdvcmRbNV0sCi0JCQkJCSooKCh1aW50MzJfdCAqKSBpcnNwKSArIDYpLAotCQkJCQkqKCgodWludDMyX3QgKikgaXJzcCkgKyA3KSk7CisJCQkJCSoodWludDMyX3QgKikmaXJzcC0+dW4xLAorCQkJCQkqKCh1aW50MzJfdCAqKSZpcnNwLT51bjEgKyAxKSk7CiAJCX0KIAogCQlzd2l0Y2ggKHR5cGUpIHsKQEAgLTE0NjUsMTcgKzE5MDMsMjggQEAKIAlyZXR1cm47CiB9CiAKLS8qCisvKioKKyAqIGxwZmNfc2xpX2hhbmRsZV9mYXN0X3JpbmdfZXZlbnQ6IEhhbmRsZSByaW5nIGV2ZW50cyBvbiBGQ1AgcmluZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQG1hc2s6IEhvc3QgYXR0ZW50aW9uIHJlZ2lzdGVyIG1hc2sgZm9yIHRoaXMgcmluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgY29udGV4dCB3aGVuIHRoZXJlIGlzIGEgcmluZworICogZXZlbnQgZm9yIHRoZSBmY3AgcmluZy4gVGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIGFueSBsb2NrLgorICogVGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyBlYWNoIHJlc3BvbnNlIGlvY2IgaW4gdGhlIHJlc3BvbnNlIHJpbmcgdW50aWwgaXQKKyAqIGZpbmRzIGFuIGlvY2Igd2l0aCBMRSBiaXQgc2V0IGFuZCBjaGFpbnMgYWxsIHRoZSBpb2NicyB1cHRvIHRoZSBpb2NiIHdpdGgKKyAqIExFIGJpdCBzZXQuIFRoZSBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgY29tbWFuZCBpb2NiCisgKiBpZiB0aGUgcmVzcG9uc2UgaW9jYiBpbmRpY2F0ZXMgYSBjb21wbGV0aW9uIGZvciBhIGNvbW1hbmQgaW9jYiBvciBpdCBpcworICogYW4gYWJvcnQgY29tcGxldGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgY2FsbCBscGZjX3NsaV9wcm9jZXNzX3Vuc29sX2lvY2IKKyAqIGZ1bmN0aW9uIGlmIHRoaXMgaXMgYW4gdW5zb2xpY2l0ZWQgaW9jYi4KICAqIFRoaXMgcm91dGluZSBwcmVzdW1lcyBMUEZDX0ZDUF9SSU5HIGhhbmRsaW5nIGFuZCBkb2Vzbid0IGJvdGhlcgotICogdG8gY2hlY2sgaXQgZXhwbGljaXRseS4KLSAqLworICogdG8gY2hlY2sgaXQgZXhwbGljaXRseS4gVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyAxLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfaGFuZGxlX2Zhc3RfcmluZ19ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCiAJCQkJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLCB1aW50MzJfdCBtYXNrKQogewotCXN0cnVjdCBscGZjX3BncCAqcGdwID0gKHBoYmEtPnNsaV9yZXYgPT0gMykgPwotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLnBvcnRbcHJpbmctPnJpbmdub10gOgotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczIucG9ydFtwcmluZy0+cmluZ25vXTsKKwlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9ICZwaGJhLT5wb3J0X2dwW3ByaW5nLT5yaW5nbm9dOwogCUlPQ0JfdCAqaXJzcCA9IE5VTEw7CiAJSU9DQl90ICplbnRyeSA9IE5VTEw7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxID0gTlVMTDsKQEAgLTE1NDgsOCArMTk5Nyw4IEBACiAJCQkJCWlyc3AtPnVuLnVscFdvcmRbM10sCiAJCQkJCWlyc3AtPnVuLnVscFdvcmRbNF0sCiAJCQkJCWlyc3AtPnVuLnVscFdvcmRbNV0sCi0JCQkJCSooKCh1aW50MzJfdCAqKSBpcnNwKSArIDYpLAotCQkJCQkqKCgodWludDMyX3QgKikgaXJzcCkgKyA3KSk7CisJCQkJCSoodWludDMyX3QgKikmaXJzcC0+dW4xLAorCQkJCQkqKCh1aW50MzJfdCAqKSZpcnNwLT51bjEgKyAxKSk7CiAJCX0KIAogCQlzd2l0Y2ggKHR5cGUpIHsKQEAgLTE2NDYsMTMgKzIwOTUsMjggQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGFuZGxlX3Nsb3dfcmluZ19ldmVudDogSGFuZGxlIHJpbmcgZXZlbnRzIGZvciBub24tRkNQIHJpbmdzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAbWFzazogSG9zdCBhdHRlbnRpb24gcmVnaXN0ZXIgbWFzayBmb3IgdGhpcyByaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWQgd2hlbiB0aGVyZSBpcyBhIHJpbmcKKyAqIGV2ZW50IGZvciBub24tZmNwIHJpbmdzLiBUaGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgYW55IGxvY2sgLgorICogVGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyBlYWNoIHJlc3BvbnNlIGlvY2IgaW4gdGhlIHJlc3BvbnNlIHJpbmcgdW50aWwgaXQKKyAqIGZpbmRzIGFuIGlvY2Igd2l0aCBMRSBiaXQgc2V0IGFuZCBjaGFpbnMgYWxsIHRoZSBpb2NicyB1cHRvIHRoZSBpb2NiIHdpdGgKKyAqIExFIGJpdCBzZXQuIFRoZSBmdW5jdGlvbiB3aWxsIGNhbGwgbHBmY19zbGlfcHJvY2Vzc19zb2xfaW9jYiBmdW5jdGlvbiBpZiB0aGUKKyAqIHJlc3BvbnNlIGlvY2IgaW5kaWNhdGVzIGEgY29tcGxldGlvbiBvZiBhIGNvbW1hbmQgaW9jYi4gVGhlIGZ1bmN0aW9uCisgKiB3aWxsIGNhbGwgbHBmY19zbGlfcHJvY2Vzc191bnNvbF9pb2NiIGZ1bmN0aW9uIGlmIHRoaXMgaXMgYW4gdW5zb2xpY2l0ZWQKKyAqIGlvY2IuIFRoZSBmdW5jdGlvbiBmcmVlcyB0aGUgcmVzb3VyY2VzIG9yIGNhbGxzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgaWYKKyAqIHRoaXMgaW9jYiBpcyBhbiBhYm9ydCBjb21wbGV0aW9uLiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIHdoZW4gdGhlIGFsbG9jYXRlZAorICogaW9jYnMgYXJlIG5vdCBmcmVlZCwgb3RoZXJ3aXNlIHJldHVybnMgMS4KKyAqKi8KIGludAogbHBmY19zbGlfaGFuZGxlX3Nsb3dfcmluZ19ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCiAJCQkJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLCB1aW50MzJfdCBtYXNrKQogewotCXN0cnVjdCBscGZjX3BncCAqcGdwID0gKHBoYmEtPnNsaV9yZXYgPT0gMykgPwotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLnBvcnRbcHJpbmctPnJpbmdub10gOgotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczIucG9ydFtwcmluZy0+cmluZ25vXTsKKwlzdHJ1Y3QgbHBmY19wZ3AgKnBncDsKIAlJT0NCX3QgKmVudHJ5OwogCUlPQ0JfdCAqaXJzcCA9IE5VTEw7CiAJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JwID0gTlVMTDsKQEAgLTE2NjYsNiArMjEzMCw3IEBACiAJaW50IHJjID0gMTsKIAl1bnNpZ25lZCBsb25nIGlmbGFnOwogCisJcGdwID0gJnBoYmEtPnBvcnRfZ3BbcHJpbmctPnJpbmdub107CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKIAlwcmluZy0+c3RhdHMuaW9jYl9ldmVudCsrOwogCkBAIC0xOTA0LDYgKzIzNjksMTYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nOiBBYm9ydCBhbGwgaW9jYnMgaW4gdGhlIHJpbmcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyBhbGwgaW9jYnMgaW4gdGhlIGdpdmVuIHJpbmcgYW5kIGZyZWVzIGFsbCB0aGUgaW9jYgorICogb2JqZWN0cyBpbiB0eHEuIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGFuIGFib3J0IGlvY2IgZm9yIGFsbCB0aGUgaW9jYiBjb21tYW5kcworICogaW4gdHhjbXBscS4gVGhlIGlvY2JzIGluIHRoZSB0eGNtcGxxIGlzIG5vdCBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlZm9yZQorICogdGhlIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2Nrcy4KKyAqKi8KIHZvaWQKIGxwZmNfc2xpX2Fib3J0X2lvY2JfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKQEAgLTE5NDMsNiArMjQxOCw4MyBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX3NsaV9mbHVzaF9mY3BfcmluZ3M6IGZsdXNoIGFsbCBpb2NicyBpbiB0aGUgZmNwIHJpbmcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIGFsbCBpb2NicyBpbiB0aGUgZmNwIHJpbmcgYW5kIGZyZWVzIGFsbCB0aGUgaW9jYgorICogb2JqZWN0cyBpbiB0eHEgYW5kIHR4Y21wbHEuIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgaXNzdWUgYWJvcnQgaW9jYnMKKyAqIGZvciBhbGwgdGhlIGlvY2IgY29tbWFuZHMgaW4gdHhjbXBscSwgdGhleSB3aWxsIGp1c3QgYmUgcmV0dXJuZWQgd2l0aAorICogSU9FUlJfU0xJX0RPV04uIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIEVFSCB3aGVuIGRldmljZSdzIFBDSQorICogc2xvdCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5ncyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTElTVF9IRUFEKHR4cSk7CisJTElTVF9IRUFEKHR4Y21wbHEpOworCXN0cnVjdCBscGZjX2lvY2JxICppb2NiOworCUlPQ0JfdCAqY21kID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICAqcHJpbmc7CisKKwkvKiBDdXJyZW50bHksIG9ubHkgb25lIGZjcCByaW5nICovCisJcHJpbmcgPSAmcHNsaS0+cmluZ1twc2xpLT5mY3BfcmluZ107CisKKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkvKiBSZXRyaWV2ZSBldmVyeXRoaW5nIG9uIHR4cSAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnByaW5nLT50eHEsICZ0eHEpOworCXByaW5nLT50eHFfY250ID0gMDsKKworCS8qIFJldHJpZXZlIGV2ZXJ5dGhpbmcgb24gdGhlIHR4Y21wbHEgKi8KKwlsaXN0X3NwbGljZV9pbml0KCZwcmluZy0+dHhjbXBscSwgJnR4Y21wbHEpOworCXByaW5nLT50eGNtcGxxX2NudCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKworCS8qIEZsdXNoIHRoZSB0eHEgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4cSkpIHsKKwkJaW9jYiA9IGxpc3RfZ2V0X2ZpcnN0KCZ0eHEsIHN0cnVjdCBscGZjX2lvY2JxLCBsaXN0KTsKKwkJY21kID0gJmlvY2ItPmlvY2I7CisJCWxpc3RfZGVsX2luaXQoJmlvY2ItPmxpc3QpOworCisJCWlmICghaW9jYi0+aW9jYl9jbXBsKQorCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NiKTsKKwkJZWxzZSB7CisJCQljbWQtPnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQljbWQtPnVuLnVscFdvcmRbNF0gPSBJT0VSUl9TTElfRE9XTjsKKwkJCShpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBpb2NiLCBpb2NiKTsKKwkJfQorCX0KKworCS8qIEZsdXNoIHRoZSB0eGNtcHEgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4Y21wbHEpKSB7CisJCWlvY2IgPSBsaXN0X2dldF9maXJzdCgmdHhjbXBscSwgc3RydWN0IGxwZmNfaW9jYnEsIGxpc3QpOworCQljbWQgPSAmaW9jYi0+aW9jYjsKKwkJbGlzdF9kZWxfaW5pdCgmaW9jYi0+bGlzdCk7CisKKwkJaWYgKCFpb2NiLT5pb2NiX2NtcGwpCisJCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGlvY2IpOworCQllbHNlIHsKKwkJCWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCWNtZC0+dW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9ET1dOOworCQkJKGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsIGlvY2IsIGlvY2IpOworCQl9CisJfQorfQorCisvKioKKyAqIGxwZmNfc2xpX2JyZHJlYWR5OiBDaGVjayBmb3IgaG9zdCBzdGF0dXMgYml0cy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBtYXNrOiBCaXQgbWFzayB0byBiZSBjaGVja2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGhvc3Qgc3RhdHVzIHJlZ2lzdGVyIGFuZCBjb21wYXJlcworICogd2l0aCB0aGUgcHJvdmlkZWQgYml0IG1hc2sgdG8gY2hlY2sgaWYgSEJBIGNvbXBsZXRlZAorICogdGhlIHJlc3RhcnQuIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IGluIGEgbG9vcCBmb3IgdGhlCisgKiBIQkEgdG8gY29tcGxldGUgcmVzdGFydC4gSWYgdGhlIEhCQSBkb2VzIG5vdCByZXN0YXJ0IHdpdGhpbgorICogMTUgaXRlcmF0aW9ucywgdGhlIGZ1bmN0aW9uIHdpbGwgcmVzZXQgdGhlIEhCQSBhZ2Fpbi4gVGhlCisgKiBmdW5jdGlvbiByZXR1cm5zIDEgd2hlbiBIQkEgZmFpbCB0byByZXN0YXJ0IG90aGVyd2lzZSByZXR1cm5zCisgKiB6ZXJvLgorICoqLwogaW50CiBscGZjX3NsaV9icmRyZWFkeShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IG1hc2spCiB7CkBAIC0xOTkwLDYgKzI1NDIsMTMgQEAKIAogI2RlZmluZSBCQVJSSUVSX1RFU1RfUEFUVEVSTiAoMHhkZWFkYmVlZikKIAorLyoqCisgKiBscGZjX3Jlc2V0X2JhcnJpZXI6IE1ha2UgSEJBIHJlYWR5IGZvciBIQkEgcmVzZXQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHJlc2V0dGluZyBhbiBIQkEuIFRoaXMKKyAqIGZ1bmN0aW9uIHJlcXVlc3RzIEhCQSB0byBxdWllc2NlIERNQXMgYmVmb3JlIGEgcmVzZXQuCisgKiovCiB2b2lkIGxwZmNfcmVzZXRfYmFycmllcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJdWludDMyX3QgX19pb21lbSAqcmVzcF9idWY7CkBAIC0yMDYzLDYgKzI2MjIsMTcgQEAKIAlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLwogfQogCisvKioKKyAqIGxwZmNfc2xpX2JyZGtpbGw6IElzc3VlIGEga2lsbF9ib2FyZCBtYWlsYm94IGNvbW1hbmQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYSBraWxsX2JvYXJkIG1haWxib3ggY29tbWFuZCBhbmQgd2FpdHMgZm9yCisgKiB0aGUgZXJyb3IgYXR0ZW50aW9uIGludGVycnVwdC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHN0b3BwaW5nCisgKiB0aGUgZmlybXdhcmUgcHJvY2Vzc2luZy4gVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkKKyAqIGxvY2tzLiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGxwZmNfaGJhX2Rvd25fcG9zdCBmdW5jdGlvbiB0byBmcmVlCisgKiBhbnkgcGVuZGluZyBjb21tYW5kcyBhZnRlciB0aGUga2lsbC4gVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDEgd2hlbiBpdAorICogZmFpbHMgdG8ga2lsbCB0aGUgYm9hcmQgZWxzZSB3aWxsIHJldHVybiAwLgorICoqLwogaW50CiBscGZjX3NsaV9icmRraWxsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTIxMzksNiArMjcwOSwxNyBAQAogCXJldHVybiBoYV9jb3B5ICYgSEFfRVJBVFQgPyAwIDogMTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9icmRyZXNldDogUmVzZXQgdGhlIEhCQS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgSEJBIGJ5IHdyaXRpbmcgSENfSU5JVEZGIHRvIHRoZSBjb250cm9sCisgKiByZWdpc3Rlci4gQWZ0ZXIgdGhlIEhCQSByZXNldHMsIHRoaXMgZnVuY3Rpb24gcmVzZXRzIGFsbCB0aGUgaW9jYiByaW5nCisgKiBpbmRpY2VzLiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIFBDSSBsYXllciBwYXJpdHkgY2hlY2tpbmcgZHVyaW5nCisgKiB0aGUgcmVzZXQuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBhbHdheXMuCisgKiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2Nrcy4KKyAqKi8KIGludAogbHBmY19zbGlfYnJkcmVzZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjE5MSw2ICsyNzcyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfYnJkcmVzdGFydDogUmVzdGFydCB0aGUgSEJBLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBTTEkgaW5pdGlhbGl6YXRpb24gY29kZSBwYXRoIHRvCisgKiByZXN0YXJ0IHRoZSBIQkEuIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2suCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBNQlhfUkVTVEFSVCBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIFNMSU0gYW5kCisgKiByZXNldHMgdGhlIEhCQS4gQXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIGl0IGNhbGxzIGxwZmNfaGJhX2Rvd25fcG9zdAorICogZnVuY3Rpb24gdG8gZnJlZSBhbnkgcGVuZGluZyBjb21tYW5kcy4gVGhlIGZ1bmN0aW9uIGVuYWJsZXMKKyAqIFBPU1Qgb25seSBkdXJpbmcgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB6ZXJvLgorICogVGhlIGZ1bmN0aW9uIGRvZXMgbm90IGd1YXJhbnRlZSBjb21wbGV0aW9uIG9mIE1CWF9SRVNUQVJUIG1haWxib3gKKyAqIGNvbW1hbmQgYmVmb3JlIHRoZSByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbi4KKyAqKi8KIGludAogbHBmY19zbGlfYnJkcmVzdGFydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yMjUxLDYgKzI4NDUsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9jaGlwc2V0X2luaXQ6IFdhaXQgZm9yIHRoZSByZXN0YXJ0IG9mIHRoZSBIQkEgYWZ0ZXIgYSByZXN0YXJ0LgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgSEJBIHJlc3RhcnQgdG8gd2FpdCBmb3Igc3VjY2Vzc2Z1bAorICogcmVzdGFydCBvZiB0aGUgSEJBLiBTdWNjZXNzZnVsIHJlc3RhcnQgb2YgdGhlIEhCQSBpcyBpbmRpY2F0ZWQgYnkKKyAqIEhTX0ZGUkRZIGFuZCBIU19NQlJEWSBiaXRzLiBJZiB0aGUgSEJBIGZhaWxzIHRvIHJlc3RhcnQgZXZlbiBhZnRlciAxNQorICogaXRlcmF0aW9uLCB0aGUgZnVuY3Rpb24gd2lsbCByZXN0YXJ0IHRoZSBIQkEgYWdhaW4uIFRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiB6ZXJvIGlmIEhCQSBzdWNjZXNzZnVsbHkgcmVzdGFydGVkIGVsc2UgcmV0dXJucyBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfY2hpcHNldF9pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTIzMzYsMTIgKzI5NDAsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFfY291bnQ6IEdldCB0aGUgbnVtYmVyIG9mIEhCUXMgdG8gYmUgY29uZmlndXJlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBIQlFzIHJlcXVpcmVkIHRvIGJlCisgKiBjb25maWd1cmVkLgorICoqLwogaW50CiBscGZjX3NsaV9oYnFfY291bnQodm9pZCkKIHsKIAlyZXR1cm4gQVJSQVlfU0laRShscGZjX2hicV9kZWZzKTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFfZW50cnlfY291bnQ6IENhbGN1bGF0ZSB0b3RhbCBudW1iZXIgb2YgaGJxIGVudHJpZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBudW1iZXIgb2YgaGJxIGVudHJpZXMgaW4gZXZlcnkgSEJRIHRvIGdldAorICogdGhlIHRvdGFsIG51bWJlciBvZiBoYnEgZW50cmllcyByZXF1aXJlZCBmb3IgdGhlIEhCQSBhbmQgcmV0dXJucworICogdGhlIHRvdGFsIGNvdW50LgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfaGJxX2VudHJ5X2NvdW50KHZvaWQpCiB7CkBAIC0yMzU0LDEyICsyOTcxLDI3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicV9zaXplOiBDYWxjdWxhdGUgbWVtb3J5IHJlcXVpcmVkIGZvciBhbGwgaGJxIGVudHJpZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgZm9yIGFsbCBoYnEgZW50cmllcworICogdG8gYmUgY29uZmlndXJlZCBhbmQgcmV0dXJucyB0aGUgdG90YWwgbWVtb3J5IHJlcXVpcmVkLgorICoqLwogaW50CiBscGZjX3NsaV9oYnFfc2l6ZSh2b2lkKQogewogCXJldHVybiBscGZjX3NsaV9oYnFfZW50cnlfY291bnQoKSAqIHNpemVvZihzdHJ1Y3QgbHBmY19oYnFfZW50cnkpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicV9zZXR1cDogY29uZmlndXJlIGFuZCBpbml0aWFsaXplIEhCUXMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBTTEkgaW5pdGlhbGl6YXRpb24gdG8gY29uZmlndXJlCisgKiBhbGwgdGhlIEhCUXMgYW5kIHBvc3QgYnVmZmVycyB0byB0aGUgSEJRLiBUaGUgY2FsbGVyIGlzIG5vdAorICogcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9ja3MuIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gemVybyBpZiBzdWNjZXNzZnVsCisgKiBlbHNlIGl0IHdpbGwgcmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9oYnFfc2V0dXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjQxNSwxNSArMzA0NywyNiBAQAogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCiAJLyogSW5pdGlhbGx5IHBvcHVsYXRlIG9yIHJlcGxlbmlzaCB0aGUgSEJRcyAqLwotCWZvciAoaGJxbm8gPSAwOyBoYnFubyA8IGhicV9jb3VudDsgKytoYnFubykgewotCQlpZiAobHBmY19zbGlfaGJxYnVmX2luaXRfaGJxcyhwaGJhLCBoYnFubykpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJZm9yIChoYnFubyA9IDA7IGhicW5vIDwgaGJxX2NvdW50OyArK2hicW5vKQorCQlscGZjX3NsaV9oYnFidWZfaW5pdF9oYnFzKHBoYmEsIGhicW5vKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotbHBmY19kb19jb25maWdfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCBzbGlfbW9kZSkKKy8qKgorICogbHBmY19zbGlfY29uZmlnX3BvcnQ6IElzc3VlIGNvbmZpZyBwb3J0IG1haWxib3ggY29tbWFuZC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBzbGlfbW9kZTogc2xpIG1vZGUgLSAyLzMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgc2xpIGludGlhbGl6YXRpb24gY29kZSBwYXRoCisgKiB0byBpc3N1ZSBjb25maWdfcG9ydCBtYWlsYm94IGNvbW1hbmQuIFRoaXMgZnVuY3Rpb24gcmVzdGFydHMgdGhlCisgKiBIQkEgZmlybXdhcmUgYW5kIGlzc3VlcyBhIGNvbmZpZ19wb3J0IG1haWxib3ggY29tbWFuZCB0byBjb25maWd1cmUKKyAqIHRoZSBTTEkgaW50ZXJmYWNlIGluIHRoZSBzbGkgbW9kZSBzcGVjaWZpZWQgYnkgc2xpX21vZGUKKyAqIHZhcmlhYmxlLiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2Nrcy4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgZWxzZSByZXR1cm5zIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlLgorICoqLworaW50CitscGZjX3NsaV9jb25maWdfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCBzbGlfbW9kZSkKIHsKIAlMUEZDX01CT1hRX3QgKnBtYjsKIAl1aW50MzJfdCByZXNldGNvdW50ID0gMCwgcmMgPSAwLCBkb25lID0gMDsKQEAgLTI0NjAsMTMgKzMxMDMsMTUgQEAKIAkJaWYgKHJjID09IC1FUkVTVEFSVCkgewogCQkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfTElOS19VTktOT1dOOwogCQkJY29udGludWU7Ci0JCX0gZWxzZSBpZiAocmMpIHsKKwkJfSBlbHNlIGlmIChyYykKIAkJCWJyZWFrOwotCQl9Ci0KIAkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSU5JVF9NQlhfQ01EUzsKIAkJbHBmY19jb25maWdfcG9ydChwaGJhLCBwbWIpOwogCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfUE9MTCk7CisJCXBoYmEtPnNsaTNfb3B0aW9ucyAmPSB+KExQRkNfU0xJM19OUElWX0VOQUJMRUQgfAorCQkJCQlMUEZDX1NMSTNfSEJRX0VOQUJMRUQgfAorCQkJCQlMUEZDX1NMSTNfQ1JQX0VOQUJMRUQgfAorCQkJCQlMUEZDX1NMSTNfSU5CX0VOQUJMRUQpOwogCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCiAJCQkJIjA0NDIgQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCkBAIC0yNDc2LDMwICszMTIxLDY0IEBACiAJCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfU0xJMl9BQ1RJVkU7CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJcmMgPSAtRU5YSU87Ci0JCX0gZWxzZSB7CisJCX0gZWxzZQogCQkJZG9uZSA9IDE7Ci0JCQlwaGJhLT5tYXhfdnBpID0gKHBoYmEtPm1heF92cGkgJiYKLQkJCQkJIHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5nbXYpICE9IDAKLQkJCQk/IHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5tYXhfdnBpCi0JCQkJOiAwOwotCQl9CiAJfQotCiAJaWYgKCFkb25lKSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBkb19wcmVwX2ZhaWxlZDsKIAl9Ci0KLQlpZiAoKHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5zbGlfbW9kZSA9PSAzKSAmJgotCQkoIXBtYi0+bWIudW4udmFyQ2ZnUG9ydC5jTUEpKSB7Ci0JCXJjID0gLUVOWElPOworCWlmIChwbWItPm1iLnVuLnZhckNmZ1BvcnQuc2xpX21vZGUgPT0gMykgeworCQlpZiAoIXBtYi0+bWIudW4udmFyQ2ZnUG9ydC5jTUEpIHsKKwkJCXJjID0gLUVOWElPOworCQkJZ290byBkb19wcmVwX2ZhaWxlZDsKKwkJfQorCQlpZiAocGhiYS0+bWF4X3ZwaSAmJiBwbWItPm1iLnVuLnZhckNmZ1BvcnQuZ212KSB7CisJCQlwaGJhLT5zbGkzX29wdGlvbnMgfD0gTFBGQ19TTEkzX05QSVZfRU5BQkxFRDsKKwkJCXBoYmEtPm1heF92cGkgPSBwbWItPm1iLnVuLnZhckNmZ1BvcnQubWF4X3ZwaTsKKwkJfSBlbHNlCisJCQlwaGJhLT5tYXhfdnBpID0gMDsKKwkJaWYgKHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5nZXJibSkKKwkJCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfSEJRX0VOQUJMRUQ7CisJCWlmIChwbWItPm1iLnVuLnZhckNmZ1BvcnQuZ2NycCkKKwkJCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfQ1JQX0VOQUJMRUQ7CisJCWlmIChwbWItPm1iLnVuLnZhckNmZ1BvcnQuZ2luYikgeworCQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19JTkJfRU5BQkxFRDsKKwkJCXBoYmEtPnBvcnRfZ3AgPSBwaGJhLT5tYm94LT51cy5zM19pbmJfcGdwLnBvcnQ7CisJCQlwaGJhLT5pbmJfaGFfY29weSA9ICZwaGJhLT5tYm94LT51cy5zM19pbmJfcGdwLmhhX2NvcHk7CisJCQlwaGJhLT5pbmJfY291bnRlciA9ICZwaGJhLT5tYm94LT51cy5zM19pbmJfcGdwLmNvdW50ZXI7CisJCQlwaGJhLT5pbmJfbGFzdF9jb3VudGVyID0KKwkJCQkJcGhiYS0+bWJveC0+dXMuczNfaW5iX3BncC5jb3VudGVyOworCQl9IGVsc2UgeworCQkJcGhiYS0+cG9ydF9ncCA9IHBoYmEtPm1ib3gtPnVzLnMzX3BncC5wb3J0OworCQkJcGhiYS0+aW5iX2hhX2NvcHkgPSBOVUxMOworCQkJcGhiYS0+aW5iX2NvdW50ZXIgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJcGhiYS0+cG9ydF9ncCA9IHBoYmEtPm1ib3gtPnVzLnMyLnBvcnQ7CisJCXBoYmEtPmluYl9oYV9jb3B5ID0gTlVMTDsKKwkJcGhiYS0+aW5iX2NvdW50ZXIgPSBOVUxMOworCQlwaGJhLT5tYXhfdnBpID0gMDsKIAl9Ci0KIGRvX3ByZXBfZmFpbGVkOgogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiByYzsKIH0KIAorCisvKioKKyAqIGxwZmNfc2xpX2hiYV9zZXR1cDogU0xJIGludGlhbGl6YXRpb24gZnVuY3Rpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgbWFpbiBTTEkgaW50aWFsaXphdGlvbiBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbgorICogaXMgY2FsbGVkIGJ5IHRoZSBIQkEgaW50aWFsaXphdGlvbiBjb2RlLCBIQkEgcmVzZXQgY29kZSBhbmQgSEJBCisgKiBlcnJvciBhdHRlbnRpb24gaGFuZGxlciBjb2RlLiBDYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55CisgKiBsb2Nrcy4gVGhpcyBmdW5jdGlvbiBpc3N1ZXMgY29uZmlnX3BvcnQgbWFpbGJveCBjb21tYW5kIHRvIGNvbmZpZ3VyZQorICogdGhlIFNMSSwgc2V0dXAgaW9jYiByaW5ncyBhbmQgSEJRIHJpbmdzLiBJbiB0aGUgZW5kIHRoZSBmdW5jdGlvbgorICogY2FsbHMgdGhlIGNvbmZpZ19wb3J0X3Bvc3QgZnVuY3Rpb24gdG8gaXNzdWUgaW5pdF9saW5rIG1haWxib3gKKyAqIGNvbW1hbmQgYW5kIHRvIHN0YXJ0IHRoZSBkaXNjb3ZlcnkuIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB6ZXJvCisgKiBpZiBzdWNjZXNzZnVsLCBlbHNlIGl0IHdpbGwgcmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKiovCiBpbnQKIGxwZmNfc2xpX2hiYV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yNTI4LDIyICszMjA3LDIwIEBACiAJCWJyZWFrOwogCX0KIAotCXJjID0gbHBmY19kb19jb25maWdfcG9ydChwaGJhLCBtb2RlKTsKKwlyYyA9IGxwZmNfc2xpX2NvbmZpZ19wb3J0KHBoYmEsIG1vZGUpOworCiAJaWYgKHJjICYmIGxwZmNfc2xpX21vZGUgPT0gMykKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCB8IExPR19WUE9SVCwKIAkJCQkiMTgyMCBVbmFibGUgdG8gc2VsZWN0IFNMSS0zLiAgIgogCQkJCSJOb3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIuXG4iKTsKIAlpZiAocmMgJiYgbW9kZSAhPSAyKQotCQlyYyA9IGxwZmNfZG9fY29uZmlnX3BvcnQocGhiYSwgMik7CisJCXJjID0gbHBmY19zbGlfY29uZmlnX3BvcnQocGhiYSwgMik7CiAJaWYgKHJjKQogCQlnb3RvIGxwZmNfc2xpX2hiYV9zZXR1cF9lcnJvcjsKIAogCWlmIChwaGJhLT5zbGlfcmV2ID09IDMpIHsKIAkJcGhiYS0+aW9jYl9jbWRfc2l6ZSA9IFNMSTNfSU9DQl9DTURfU0laRTsKIAkJcGhiYS0+aW9jYl9yc3Bfc2l6ZSA9IFNMSTNfSU9DQl9SU1BfU0laRTsKLQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19FTkFCTEVEOwotCQlwaGJhLT5zbGkzX29wdGlvbnMgfD0gTFBGQ19TTEkzX0hCUV9FTkFCTEVEOwotCiAJfSBlbHNlIHsKIAkJcGhiYS0+aW9jYl9jbWRfc2l6ZSA9IFNMSTJfSU9DQl9DTURfU0laRTsKIAkJcGhiYS0+aW9jYl9yc3Bfc2l6ZSA9IFNMSTJfSU9DQl9SU1BfU0laRTsKQEAgLTI1NTgsOCArMzIzNSw3IEBACiAJaWYgKHJjKQogCQlnb3RvIGxwZmNfc2xpX2hiYV9zZXR1cF9lcnJvcjsKIAotCQkJCS8qIEluaXQgSEJRcyAqLwotCisJLyogSW5pdCBIQlFzICovCiAJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkgewogCQlyYyA9IGxwZmNfc2xpX2hicV9zZXR1cChwaGJhKTsKIAkJaWYgKHJjKQpAQCAtMjU4MSwxOSArMzI1NywxOSBAQAogCXJldHVybiByYzsKIH0KIAotLyohIGxwZmNfbWJveF90aW1lb3V0CisKKy8qKgorICogbHBmY19tYm94X3RpbWVvdXQ6IFRpbWVvdXQgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvciBtYm94IHRpbWVyLgorICogQHB0cjogY29udGV4dCBvYmplY3QgLSBwb2ludGVyIHRvIGhiYSBzdHJ1Y3R1cmUuCiAgKgotICogXHByZQotICogXHBvc3QKLSAqIFxwYXJhbSBoYmEgUG9pbnRlciB0byBwZXIgc3RydWN0IGxwZmNfaGJhIHN0cnVjdHVyZQotICogXHBhcmFtIGwxICBQb2ludGVyIHRvIHRoZSBkcml2ZXIncyBtYWlsYm94IHF1ZXVlLgotICogXHJldHVybgotICogICB2b2lkCi0gKgotICogXGIgRGVzY3JpcHRpb246Ci0gKgotICogVGhpcyByb3V0aW5lIGhhbmRsZXMgbWFpbGJveCB0aW1lb3V0IGV2ZW50cyBhdCB0aW1lciBpbnRlcnJ1cHQgY29udGV4dC4KLSAqLworICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG1haWxib3ggdGltZXIuIFRoZSBtYWlsYm94CisgKiB0aW1lciBpcyBhcm1lZCB3aGVuIGEgbmV3IG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQgYW5kIHRoZSB0aW1lcgorICogaXMgZGVsZXRlZCB3aGVuIHRoZSBtYWlsYm94IGNvbXBsZXRlLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5CisgKiB0aGUga2VybmVsIHRpbWVyIGNvZGUgd2hlbiBhIG1haWxib3ggZG9lcyBub3QgY29tcGxldGUgd2l0aGluCisgKiBleHBlY3RlZCB0aW1lLiBUaGlzIGZ1bmN0aW9uIHdha2VzIHVwIHRoZSB3b3JrZXIgdGhyZWFkIHRvCisgKiBwcm9jZXNzIHRoZSBtYWlsYm94IHRpbWVvdXQgYW5kIHJldHVybnMuIEFsbCB0aGUgcHJvY2Vzc2luZyBpcworICogZG9uZSBieSB0aGUgd29ya2VyIHRocmVhZCBmdW5jdGlvbiBscGZjX21ib3hfdGltZW91dF9oYW5kbGVyLgorICoqLwogdm9pZAogbHBmY19tYm94X3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpCiB7CkBAIC0yNjEyLDYgKzMyODgsMTUgQEAKIAlyZXR1cm47CiB9CiAKKworLyoqCisgKiBscGZjX21ib3hfdGltZW91dF9oYW5kbGVyOiBXb3JrZXIgdGhyZWFkIGZ1bmN0aW9uIHRvIGhhbmRsZSBtYWlsYm94IHRpbWVvdXQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB3b3JrZXIgdGhyZWFkIHdoZW4gYSBtYWlsYm94IGNvbW1hbmQgdGltZXMgb3V0LgorICogVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9ja3MuIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNldCB0aGUKKyAqIEhCQSBhbmQgcmVjb3ZlciBhbGwgdGhlIHBlbmRpbmcgY29tbWFuZHMuCisgKiovCiB2b2lkCiBscGZjX21ib3hfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTI2NjYsNiArMzM1MSwzMiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9pc3N1ZV9tYm94OiBJc3N1ZSBhIG1haWxib3ggY29tbWFuZCB0byBmaXJtd2FyZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwbWJveDogUG9pbnRlciB0byBtYWlsYm94IG9iamVjdC4KKyAqIEBmbGFnOiBGbGFnIGluZGljYXRpbmcgaG93IHRoZSBtYWlsYm94IG5lZWQgdG8gYmUgcHJvY2Vzc2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGRpc2NvdmVyeSBjb2RlIGFuZCBIQkEgbWFuYWdlbWVudCBjb2RlCisgKiB0byBzdWJtaXQgYSBtYWlsYm94IGNvbW1hbmQgdG8gZmlybXdhcmUuIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUKKyAqIGhiYWxvY2sgdG8gcHJvdGVjdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgorICogVGhlIG1haWxib3ggY29tbWFuZCBjYW4gYmUgc3VibWl0dGVkIGluIHBvbGxpbmcgbW9kZSwgaW4gd2hpY2ggY2FzZQorICogdGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgaW4gYSBwb2xsaW5nIGxvb3AgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZQorICogbWFpbGJveC4KKyAqIElmIHRoZSBtYWlsYm94IGlzIHN1Ym1pdHRlZCBpbiBub193YWl0IG1vZGUgKG5vdCBwb2xsaW5nKSB0aGUKKyAqIGZ1bmN0aW9uIHdpbGwgc3VibWl0IHRoZSBjb21tYW5kIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZworICogZm9yIHRoZSBtYWlsYm94IGNvbXBsZXRpb24uIFRoZSBub193YWl0IGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4gSEJBCisgKiBpcyBpbiBTTEkyL1NMSTMgbW9kZSAtIGludGVycnVwdHMgYXJlIGVuYWJsZWQuCisgKiBUaGUgU0xJIGludGVyZmFjZSBhbGxvd3Mgb25seSBvbmUgbWFpbGJveCBwZW5kaW5nIGF0IGEgdGltZS4gSWYgdGhlCisgKiBtYWlsYm94IGlzIGlzc3VlZCBpbiBwb2xsaW5nIG1vZGUgYW5kIHRoZXJlIGlzIGFscmVhZHkgYSBtYWlsYm94CisgKiBwZW5kaW5nLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBlcnJvci4gSWYgdGhlIG1haWxib3ggaXMgaXNzdWVkCisgKiBpbiBOT19XQUlUIG1vZGUgYW5kIHRoZXJlIGlzIGEgbWFpbGJveCBwZW5kaW5nIGFscmVhZHksIHRoZSBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gTUJYX0JVU1kgYWZ0ZXIgcXVldWluZyB0aGUgbWFpbGJveCBpbnRvIG1haWxib3ggcXVldWUuCisgKiBUaGUgc2xpIGxheWVyIG93bnMgdGhlIG1haWxib3ggb2JqZWN0IHVudGlsIHRoZSBjb21wbGV0aW9uIG9mIG1haWxib3gKKyAqIGNvbW1hbmQgaWYgdGhpcyBmdW5jdGlvbiByZXR1cm4gTUJYX0JVU1kgb3IgTUJYX1NVQ0NFU1MuIEZvciBhbGwgb3RoZXIKKyAqIHJldHVybiBjb2RlcyB0aGUgY2FsbGVyIG93bnMgdGhlIG1haWxib3ggY29tbWFuZCBhZnRlciB0aGUgcmV0dXJuIG9mCisgKiB0aGUgZnVuY3Rpb24uCisgKiovCiBpbnQKIGxwZmNfc2xpX2lzc3VlX21ib3goc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYm94LCB1aW50MzJfdCBmbGFnKQogewpAQCAtMjY3Niw3ICszMzg3LDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdW5zaWduZWQgbG9uZyBkcnZyX2ZsYWcgPSAwOwotCXZvbGF0aWxlIHVpbnQzMl90IHdvcmQwLCBsZGF0YTsKKwl1aW50MzJfdCB3b3JkMCwgbGRhdGE7CiAJdm9pZCBfX2lvbWVtICp0b19zbGltOwogCWludCBwcm9jZXNzaW5nX3F1ZXVlID0gMDsKIApAQCAtMjgzNiwxMiArMzU0NywxMSBAQAogCiAJaWYgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTEkyX0FDVElWRSkgewogCQkvKiBGaXJzdCBjb3B5IGNvbW1hbmQgZGF0YSB0byBob3N0IFNMSU0gYXJlYSAqLwotCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkobWIsICZwaGJhLT5zbGltMnAtPm1ieCwgTUFJTEJPWF9DTURfU0laRSk7CisJCWxwZmNfc2xpX3BjaW1lbV9iY29weShtYiwgcGhiYS0+bWJveCwgTUFJTEJPWF9DTURfU0laRSk7CiAJfSBlbHNlIHsKIAkJaWYgKG1iLT5tYnhDb21tYW5kID09IE1CWF9DT05GSUdfUE9SVCkgewogCQkJLyogY29weSBjb21tYW5kIGRhdGEgaW50byBob3N0IG1ib3ggZm9yIGNtcGwgKi8KLQkJCWxwZmNfc2xpX3BjaW1lbV9iY29weShtYiwgJnBoYmEtPnNsaW0ycC0+bWJ4LAotCQkJCQkgICAgICBNQUlMQk9YX0NNRF9TSVpFKTsKKwkJCWxwZmNfc2xpX3BjaW1lbV9iY29weShtYiwgcGhiYS0+bWJveCwgTUFJTEJPWF9DTURfU0laRSk7CiAJCX0KIAogCQkvKiBGaXJzdCBjb3B5IG1ib3ggY29tbWFuZCBkYXRhIHRvIEhCQSBTTElNLCBza2lwIHBhc3QgZmlyc3QKQEAgLTI4NTEsNyArMzU2MSw3IEBACiAJCQkgICAgTUFJTEJPWF9DTURfU0laRSAtIHNpemVvZiAodWludDMyX3QpKTsKIAogCQkvKiBOZXh0IGNvcHkgb3ZlciBmaXJzdCB3b3JkLCB3aXRoIG1ieE93bmVyIHNldCAqLwotCQlsZGF0YSA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopbWIpOworCQlsZGF0YSA9ICooKHVpbnQzMl90ICopbWIpOwogCQl0b19zbGltID0gcGhiYS0+TUJzbGltYWRkcjsKIAkJd3JpdGVsKGxkYXRhLCB0b19zbGltKTsKIAkJcmVhZGwodG9fc2xpbSk7IC8qIGZsdXNoICovCkBAIC0yODgzLDcgKzM1OTMsNyBAQAogCiAJCWlmIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpIHsKIAkJCS8qIEZpcnN0IHJlYWQgbWJveCBzdGF0dXMgd29yZCAqLwotCQkJd29yZDAgPSAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSZwaGJhLT5zbGltMnAtPm1ieCk7CisJCQl3b3JkMCA9ICooKHVpbnQzMl90ICopcGhiYS0+bWJveCk7CiAJCQl3b3JkMCA9IGxlMzJfdG9fY3B1KHdvcmQwKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEZpcnN0IHJlYWQgbWJveCBzdGF0dXMgd29yZCAqLwpAQCAtMjkyMiwxMiArMzYzMiwxMSBAQAogCiAJCQlpZiAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSTJfQUNUSVZFKSB7CiAJCQkJLyogRmlyc3QgY29weSBjb21tYW5kIGRhdGEgKi8KLQkJCQl3b3JkMCA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopCi0JCQkJCQkmcGhiYS0+c2xpbTJwLT5tYngpOworCQkJCXdvcmQwID0gKigodWludDMyX3QgKilwaGJhLT5tYm94KTsKIAkJCQl3b3JkMCA9IGxlMzJfdG9fY3B1KHdvcmQwKTsKIAkJCQlpZiAobWItPm1ieENvbW1hbmQgPT0gTUJYX0NPTkZJR19QT1JUKSB7CiAJCQkJCU1BSUxCT1hfdCAqc2xpbW1iOwotCQkJCQl2b2xhdGlsZSB1aW50MzJfdCBzbGltd29yZDA7CisJCQkJCXVpbnQzMl90IHNsaW13b3JkMDsKIAkJCQkJLyogQ2hlY2sgcmVhbCBTTElNIGZvciBhbnkgZXJyb3JzICovCiAJCQkJCXNsaW13b3JkMCA9IHJlYWRsKHBoYmEtPk1Cc2xpbWFkZHIpOwogCQkJCQlzbGltbWIgPSAoTUFJTEJPWF90ICopICYgc2xpbXdvcmQwOwpAQCAtMjk0OCw4ICszNjU3LDcgQEAKIAogCQlpZiAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSTJfQUNUSVZFKSB7CiAJCQkvKiBjb3B5IHJlc3VsdHMgYmFjayB0byB1c2VyICovCi0JCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoJnBoYmEtPnNsaW0ycC0+bWJ4LCBtYiwKLQkJCQkJICAgICAgTUFJTEJPWF9DTURfU0laRSk7CisJCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkocGhiYS0+bWJveCwgbWIsIE1BSUxCT1hfQ01EX1NJWkUpOwogCQl9IGVsc2UgewogCQkJLyogRmlyc3QgY29weSBjb21tYW5kIGRhdGEgKi8KIAkJCWxwZmNfbWVtY3B5X2Zyb21fc2xpbShtYiwgcGhiYS0+TUJzbGltYWRkciwKQEAgLTI5ODAsOSArMzY4OCwxNiBAQAogCXJldHVybiBNQlhfTk9UX0ZJTklTSEVEOwogfQogCi0vKgotICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgbG9jay4KLSAqLworLyoqCisgKiBfX2xwZmNfc2xpX3Jpbmd0eF9wdXQ6IEFkZCBhbiBpb2NiIHRvIHRoZSB0eHEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBwaW9jYjogUG9pbnRlciB0byBhZGRyZXNzIG9mIG5ld2x5IGFkZGVkIGNvbW1hbmQgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCB0byBhZGQgYSBjb21tYW5kCisgKiBpb2NiIHRvIHRoZSB0eHEgd2hlbiBTTEkgbGF5ZXIgY2Fubm90IHN1Ym1pdCB0aGUgY29tbWFuZCBpb2NiCisgKiB0byB0aGUgcmluZy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBfX2xwZmNfc2xpX3Jpbmd0eF9wdXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IpCkBAIC0yOTkyLDYgKzM3MDcsMjMgQEAKIAlwcmluZy0+dHhxX2NudCsrOwogfQogCisvKioKKyAqIGxwZmNfc2xpX25leHRfaW9jYjogR2V0IHRoZSBuZXh0IGlvY2IgaW4gdGhlIHR4cS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHBpb2NiOiBQb2ludGVyIHRvIGFkZHJlc3Mgb2YgbmV3bHkgYWRkZWQgY29tbWFuZCBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIGJlZm9yZSBhIG5ldworICogaW9jYiBpcyBzdWJtaXR0ZWQgdG8gdGhlIGZpcm13YXJlLiBUaGlzIGZ1bmN0aW9uIGNoZWNrcworICogdHhxIHRvIGZsdXNoIHRoZSBpb2NicyBpbiB0eHEgdG8gRmlybXdhcmUgYmVmb3JlCisgKiBzdWJtaXR0aW5nIG5ldyBpb2NicyB0byB0aGUgRmlybXdhcmUuCisgKiBJZiB0aGVyZSBhcmUgaW9jYnMgaW4gdGhlIHR4cSB3aGljaCBuZWVkIHRvIGJlIHN1Ym1pdHRlZAorICogdG8gZmlybXdhcmUsIGxwZmNfc2xpX25leHRfaW9jYiByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50CisgKiBvZiB0aGUgdHhxIGFmdGVyIGRlcXVldWluZyBpdCBmcm9tIHR4cS4KKyAqIElmIHRoZXJlIGlzIG5vIGlvY2IgaW4gdGhlIHR4cSB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybgorICogKnBpb2NiIGFuZCAqcGlvY2IgaXMgc2V0IHRvIE5VTEwuIENhbGxlciBuZWVkcyB0byBjaGVjaworICogKnBpb2NiIHRvIGZpbmQgaWYgdGhlcmUgYXJlIG1vcmUgY29tbWFuZHMgaW4gdGhlIHR4cS4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19pb2NicSAqCiBscGZjX3NsaV9uZXh0X2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgIHN0cnVjdCBscGZjX2lvY2JxICoqcGlvY2IpCkBAIC0zMDA3LDkgKzM3MzksMzAgQEAKIAlyZXR1cm4gbmV4dGlvY2I7CiB9CiAKLS8qCi0gKiBMb2NrbGVzcyB2ZXJzaW9uIG9mIGxwZmNfc2xpX2lzc3VlX2lvY2IuCi0gKi8KKy8qKgorICogX19scGZjX3NsaV9pc3N1ZV9pb2NiOiBMb2NrbGVzcyB2ZXJzaW9uIG9mIGxwZmNfc2xpX2lzc3VlX2lvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBwaW9jYjogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAZmxhZzogRmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgY29tbWFuZCBjYW4gYmUgcHV0IGludG8gdHhxLgorICoKKyAqIF9fbHBmY19zbGlfaXNzdWVfaW9jYiBpcyB1c2VkIGJ5IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyCisgKiB0byBpc3N1ZSBhbiBpb2NiIGNvbW1hbmQgdG8gdGhlIEhCQS4gSWYgdGhlIFBDSSBzbG90IGlzIHJlY292ZXJpbmcKKyAqIGZyb20gZXJyb3Igc3RhdGUgb3IgaWYgSEJBIGlzIHJlc2V0dGluZyBvciBpZiBMUEZDX1NUT1BfSU9DQl9FVkVOVAorICogZmxhZyBpcyB0dXJuZWQgb24sIHRoZSBmdW5jdGlvbiByZXR1cm5zIElPQ0JfRVJST1IuCisgKiBXaGVuIHRoZSBsaW5rIGlzIGRvd24sIHRoaXMgZnVuY3Rpb24gYWxsb3dzIG9ubHkgaW9jYnMgZm9yCisgKiBwb3N0aW5nIGJ1ZmZlcnMuCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIGNvbW1hbmQgcmluZyBhbmQKKyAqIHBvc3RzIHRoZSBjb21tYW5kIHRvIHRoZSBhdmFpbGFibGUgc2xvdCBhbmQgd3JpdGVzIHRoZSBwb3J0CisgKiBhdHRlbnRpb24gcmVnaXN0ZXIgdG8gcmVxdWVzdCBIQkEgc3RhcnQgcHJvY2Vzc2luZyBuZXcgaW9jYi4KKyAqIElmIHRoZXJlIGlzIG5vIHNsb3QgYXZhaWxhYmxlIGluIHRoZSByaW5nIGFuZAorICogZmxhZyAmIFNMSV9JT0NCX1JFVF9JT0NCIGlzIHNldCwgdGhlIG5ldyBpb2NiIGlzIGFkZGVkIHRvIHRoZQorICogdHhxLCBvdGhlcndpc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMgSU9DQl9CVVNZLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkLgorICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHN1Y2Nlc3MgYWZ0ZXIgaXQgc3VjY2Vzc2Z1bGx5IHN1Ym1pdCB0aGUKKyAqIGlvY2IgdG8gZmlybXdhcmUgb3IgYWZ0ZXIgYWRkaW5nIHRvIHRoZSB0eHEuCisgKiovCiBzdGF0aWMgaW50CiBfX2xwZmNfc2xpX2lzc3VlX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IsIHVpbnQzMl90IGZsYWcpCkBAIC0zMDUyLDYgKzM4MDUsMTYgQEAKIAkJICogY2FuIGJlIGlzc3VlZCBpZiB0aGUgbGluayBpcyBub3QgdXAuCiAJCSAqLwogCQlzd2l0Y2ggKHBpb2NiLT5pb2NiLnVscENvbW1hbmQpIHsKKwkJY2FzZSBDTURfR0VOX1JFUVVFU1Q2NF9DUjoKKwkJY2FzZSBDTURfR0VOX1JFUVVFU1Q2NF9DWDoKKwkJCWlmICghKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfTUVOTE9fTUFJTlQpIHx8CisJCQkJKHBpb2NiLT5pb2NiLnVuLmdlbnJlcTY0Lnc1Lmhjc3cuUmN0bCAhPQorCQkJCQlGQ19GQ1BfQ01ORCkgfHwKKwkJCQkocGlvY2ItPmlvY2IudW4uZ2VucmVxNjQudzUuaGNzdy5UeXBlICE9CisJCQkJCU1FTkxPX1RSQU5TUE9SVF9UWVBFKSkKKworCQkJCWdvdG8gaW9jYl9idXN5OworCQkJYnJlYWs7CiAJCWNhc2UgQ01EX1FVRV9SSU5HX0JVRl9DTjoKIAkJY2FzZSBDTURfUVVFX1JJTkdfQlVGNjRfQ046CiAJCQkvKgpAQCAtMzEwNiw2ICszODY5LDE5IEBACiB9CiAKIAorLyoqCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiOiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBfX2xwZmNfc2xpX2lzc3VlX2lvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBwaW9jYjogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAZmxhZzogRmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgY29tbWFuZCBjYW4gYmUgcHV0IGludG8gdHhxLgorICoKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2IgaXMgYSB3cmFwcGVyIGFyb3VuZCBfX2xwZmNfc2xpX2lzc3VlX2lvY2IKKyAqIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGhiYWxvY2sgYW5kIGNhbGxzCisgKiBfX2xwZmNfc2xpX2lzc3VlX2lvY2IgZnVuY3Rpb24gYW5kIHdpbGwgcmV0dXJuIHRoZSBlcnJvciByZXR1cm5lZAorICogYnkgX19scGZjX3NsaV9pc3N1ZV9pb2NiIGZ1bmN0aW9uLiBUaGlzIHdyYXBwZXIgaXMgdXNlZCBieQorICogZnVuY3Rpb25zIHdoaWNoIGRvIG5vdCBob2xkIGhiYWxvY2suCisgKiovCiBpbnQKIGxwZmNfc2xpX2lzc3VlX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IsIHVpbnQzMl90IGZsYWcpCkBAIC0zMTIwLDYgKzM4OTYsMTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19leHRyYV9yaW5nX3NldHVwOiBFeHRyYSByaW5nIHNldHVwIGZ1bmN0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWxlIGRyaXZlciBhdHRhY2hlcyB3aXRoIHRoZQorICogSEJBIHRvIHNldHVwIHRoZSBleHRyYSByaW5nLiBUaGUgZXh0cmEgcmluZyBpcyB1c2VkCisgKiBvbmx5IHdoZW4gZHJpdmVyIG5lZWRzIHRvIHN1cHBvcnQgdGFyZ2V0IG1vZGUgZnVuY3Rpb25hbGl0eQorICogb3IgSVAgb3ZlciBGQyBmdW5jdGlvbmFsaXRpZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2V4dHJhX3Jpbmdfc2V0dXAoIHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTMxNTUsNiArMzk0MiwxOSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2FzeW5jX2V2ZW50X2hhbmRsZXI6IEFTWU5DIGlvY2IgaGFuZGxlciBmdW5jdGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQGlvY2JxOiBQb2ludGVyIHRvIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzbG93IHJpbmcgZXZlbnQgaGFuZGxlcgorICogZnVuY3Rpb24gd2hlbiB0aGVyZSBpcyBhbiBBU1lOQyBldmVudCBpb2NiIGluIHRoZSByaW5nLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuCisgKiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIG9ubHkgdGVtcGVyYXR1cmUgcmVsYXRlZAorICogQVNZTkMgZXZlbnRzLiBUaGUgZnVuY3Rpb24gZGVjb2RlcyB0aGUgdGVtcGVyYXR1cmUgc2Vuc29yCisgKiBldmVudCBtZXNzYWdlIGFuZCBwb3N0cyBldmVudHMgZm9yIHRoZSBtYW5hZ2VtZW50IGFwcGxpY2F0aW9ucy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV9hc3luY19ldmVudF9oYW5kbGVyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgKiBwcmluZywgc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NicSkKQEAgLTMyMTAsNiArNDAxMCwxNyBAQAogfQogCiAKKy8qKgorICogbHBmY19zbGlfc2V0dXA6IFNMSSByaW5nIHNldHVwIGZ1bmN0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIGxwZmNfc2xpX3NldHVwIHNldHMgdXAgcmluZ3Mgb2YgdGhlIFNMSSBpbnRlcmZhY2Ugd2l0aAorICogbnVtYmVyIG9mIGlvY2JzIHBlciByaW5nIGFuZCBpb3RhZ3MuIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGNhbGxlZCB3aGlsZSBkcml2ZXIgYXR0YWNoIHRvIHRoZSBIQkEgYW5kIGJlZm9yZSB0aGUKKyAqIGludGVycnVwdHMgYXJlIGVuYWJsZWQuIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGxvY2tpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyAwLgorICoqLwogaW50CiBscGZjX3NsaV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zMzIxLDYgKzQxMzIsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9xdWV1ZV9zZXR1cDogUXVldWUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogbHBmY19zbGlfcXVldWVfc2V0dXAgc2V0cyB1cCBtYWlsYm94IHF1ZXVlcyBhbmQgaW9jYiBxdWV1ZXMgZm9yIGVhY2gKKyAqIHJpbmcuIFRoaXMgZnVuY3Rpb24gYWxzbyBpbml0aWFsaXplcyByaW5nIGluZGljZXMgb2YgZWFjaCByaW5nLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0xJCisgKiBpbnRlcmZhY2Ugb2YgYW4gSEJBLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQgYW5kIGFsd2F5cyByZXR1cm5zCisgKiAxLgorICoqLwogaW50CiBscGZjX3NsaV9xdWV1ZV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zMzQ5LDYgKzQxNzEsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9ob3N0X2Rvd246IFZwb3J0IGNsZWFudXAgZnVuY3Rpb24uCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdmlydHVhbCBwb3J0IG9iamVjdC4KKyAqCisgKiBscGZjX3NsaV9ob3N0X2Rvd24gaXMgY2FsbGVkIHRvIGNsZWFuIHVwIHRoZSByZXNvdXJjZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCBhIHZwb3J0IGJlZm9yZSBkZXN0cm95aW5nIHZpcnR1YWwKKyAqIHBvcnQgZGF0YSBzdHJ1Y3R1cmVzLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIGZvbGxvd2luZyBvcGVyYXRpb25zOgorICogLSBGcmVlIGRpc2NvdmVyeSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlydHVhbAorICogICBwb3J0LgorICogLSBGcmVlIGlvY2JzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpcnR1YWwgcG9ydCBpbgorICogICB0aGUgdHhxLgorICogLSBTZW5kIGFib3J0IGZvciBhbGwgaW9jYiBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhpcworICogICB2cG9ydCBpbiB0eGNtcGxxLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkIGFuZCBhbHdheXMgcmV0dXJucyAxLgorICoqLwogaW50CiBscGZjX3NsaV9ob3N0X2Rvd24oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMzQxMSw2ICs0MjUwLDIxIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJhX2Rvd246IFJlc291cmNlIGNsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSBIQkEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYWxsIGlvY2IsIGJ1ZmZlcnMsIG1haWxib3ggY29tbWFuZHMKKyAqIHdoaWxlIHNodXR0aW5nIGRvd24gdGhlIEhCQS4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubworICogbG9jayBoZWxkIGFuZCBhbHdheXMgcmV0dXJucyAxLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmcgdG8gY2xlYW51cCBkcml2ZXIgcmVzb3VyY2VzOgorICogLSBGcmVlIGRpc2NvdmVyeSByZXNvdXJjZXMgZm9yIGVhY2ggdmlydHVhbCBwb3J0CisgKiAtIENsZWFudXAgYW55IHBlbmRpbmcgZmFicmljIGlvY2JzCisgKiAtIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaW9jYiB0eHEgYW5kIGZyZWUgZWFjaCBlbnRyeQorICogICBpbiB0aGUgbGlzdC4KKyAqIC0gRnJlZSB1cCBhbnkgYnVmZmVyIHBvc3RlZCB0byB0aGUgSEJBCisgKiAtIEZyZWUgbWFpbGJveCBjb21tYW5kcyBpbiB0aGUgbWFpbGJveCBxdWV1ZS4KKyAqKi8KIGludAogbHBmY19zbGlfaGJhX2Rvd24oc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzUwMSw2ICs0MzU1LDE4IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcGNpbWVtX2Jjb3B5OiBTTEkgbWVtb3J5IGNvcHkgZnVuY3Rpb24uCisgKiBAc3JjcDogU291cmNlIG1lbW9yeSBwb2ludGVyLgorICogQGRlc3RwOiBEZXN0aW5hdGlvbiBtZW1vcnkgcG9pbnRlci4KKyAqIEBjbnQ6IE51bWJlciBvZiB3b3JkcyByZXF1aXJlZCB0byBiZSBjb3BpZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBjb3B5aW5nIGRhdGEgYmV0d2VlbiBkcml2ZXIgbWVtb3J5CisgKiBhbmQgdGhlIFNMSSBtZW1vcnkuIFRoaXMgZnVuY3Rpb24gYWxzbyBjaGFuZ2VzIHRoZSBlbmRpYW5uZXNzCisgKiBvZiBlYWNoIHdvcmQgaWYgbmF0aXZlIGVuZGlhbm5lc3MgaXMgZGlmZmVyZW50IGZyb20gU0xJCisgKiBlbmRpYW5uZXNzLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0CisgKiBsb2NrLgorICoqLwogdm9pZAogbHBmY19zbGlfcGNpbWVtX2Jjb3B5KHZvaWQgKnNyY3AsIHZvaWQgKmRlc3RwLCB1aW50MzJfdCBjbnQpCiB7CkBAIC0zNTE4LDYgKzQzODQsMTcgQEAKIAl9CiB9CiAKKworLyoqCisgKiBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQ6IEZ1bmN0aW9uIHRvIGFkZCBhIGJ1ZmZlciB0byBwb3N0YnVmcS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQG1wOiBQb2ludGVyIHRvIGRyaXZlciBidWZmZXIgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLgorICogSXQgYWx3YXlzIHJldHVybiB6ZXJvIGFmdGVyIGFkZGluZyB0aGUgYnVmZmVyIHRvIHRoZSBwb3N0YnVmcQorICogYnVmZmVyIGxpc3QuCisgKiovCiBpbnQKIGxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJCSBzdHJ1Y3QgbHBmY19kbWFidWYgKm1wKQpAQCAtMzUzMSw2ICs0NDA4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfZ2V0X2J1ZmZlcl90YWc6IFRhZyBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZvciBhIGJ1ZmZlciBwb3N0ZWQKKyAqICAgICAgICAgIHVzaW5nIENNRF9RVUVfWFJJNjRfQ1ggaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBXaGVuIEhCUSBpcyBlbmFibGVkLCBidWZmZXJzIGFyZSBzZWFyY2hlZCBiYXNlZCBvbiB0YWdzLiBUaGlzIGZ1bmN0aW9uCisgKiBhbGxvY2F0ZXMgYSB0YWcgZm9yIGJ1ZmZlciBwb3N0ZWQgdXNpbmcgQ01EX1FVRV9YUkk2NF9DWCBpb2NiLiBUaGUKKyAqIHRhZyBpcyBiaXQgd2lzZSBvci1lZCB3aXRoIFFVRV9CVUZUQUdfQklUIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0YWcKKyAqIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggdGFncyBvZiBidWZmZXIgcG9zdGVkIGZvciB1bnNvbGljaXRlZCBldmVudHMuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWxsb2NhdGVkIHRhZy4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoCisgKiBubyBsb2NrcyBoZWxkLgorICoqLwogdWludDMyX3QKIGxwZmNfc2xpX2dldF9idWZmZXJfdGFnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTM1NDUsNiArNDQzNCwyMiBAQAogCXJldHVybiBwaGJhLT5idWZmZXJfdGFnX2NvdW50OwogfQogCisvKioKKyAqIGxwZmNfc2xpX3JpbmdfdGFnZ2VkYnVmX2dldDogU2VhcmNoIEhCUSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgcG9zdGVkIHVzaW5nIENNRF9RVUVfWFJJNjRfQ1ggaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHRhZzogQnVmZmVyIHRhZy4KKyAqCisgKiBCdWZmZXJzIHBvc3RlZCB1c2luZyBDTURfUVVFX1hSSTY0X0NYIGlvY2IgYXJlIGluIHByaW5nLT5wb3N0YnVmcQorICogbGlzdC4gQWZ0ZXIgSEJBIERNQSBkYXRhIHRvIHRoZXNlIGJ1ZmZlcnMsIENNRF9JT0NCX1JFVF9YUkk2NF9DWAorICogaW9jYiBpcyBwb3N0ZWQgdG8gdGhlIHJlc3BvbnNlIHJpbmcgd2l0aCB0aGUgdGFnIG9mIHRoZSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBwcmluZy0+cG9zdGJ1ZnEgbGlzdCB1c2luZyB0aGUgdGFnCisgKiB0byBmaW5kIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggQ01EX0lPQ0JfUkVUX1hSSTY0X0NYCisgKiBpb2NiLiBJZiB0aGUgYnVmZmVyIGlzIGZvdW5kIHRoZW4gbHBmY19kbWFidWYgb2JqZWN0IG9mIHRoZQorICogYnVmZmVyIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgZWxzZSBOVUxMIGlzIHJldHVybmVkLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuCisgKiovCiBzdHJ1Y3QgbHBmY19kbWFidWYgKgogbHBmY19zbGlfcmluZ190YWdnZWRidWZfZ2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJdWludDMyX3QgdGFnKQpAQCAtMzU2NSw3ICs0NDcwLDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCSIwNDEwIENhbm5vdCBmaW5kIHZpcnR1YWwgYWRkciBmb3IgYnVmZmVyIHRhZyBvbiAiCisJCQkiMDQwMiBDYW5ub3QgZmluZCB2aXJ0dWFsIGFkZHIgZm9yIGJ1ZmZlciB0YWcgb24gIgogCQkJInJpbmcgJWQgRGF0YSB4JWx4IHglcCB4JXAgeCV4XG4iLAogCQkJcHJpbmctPnJpbmdubywgKHVuc2lnbmVkIGxvbmcpIHRhZywKIAkJCXNscC0+bmV4dCwgc2xwLT5wcmV2LCBwcmluZy0+cG9zdGJ1ZnFfY250KTsKQEAgLTM1NzMsNiArNDQ3OCwyMyBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldDogU0xJMiBidWZmZXIgc2VhcmNoIGZ1bmN0aW9uIGZvcgorICogICAgICB1bnNvbGljaXRlZCBjdCBhbmQgZWxzIGV2ZW50cy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHBoeXM6IERNQSBhZGRyZXNzIG9mIHRoZSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgYnVmZmVyIGxpc3QgdXNpbmcgdGhlIGRtYV9hZGRyZXNzCisgKiBvZiB1bnNvbGljaXRlZCBldmVudCB0byBmaW5kIHRoZSBkcml2ZXIncyBscGZjX2RtYWJ1ZiBvYmplY3QKKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRtYV9hZGRyZXNzLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUKKyAqIGxwZmNfZG1hYnVmIG9iamVjdCBpZiBhIGJ1ZmZlciBpcyBmb3VuZCBlbHNlIGl0IHJldHVybnMgTlVMTC4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBjdCBhbmQgZWxzIHVuc29saWNpdGVkIGV2ZW50CisgKiBoYW5kbGVycyB0byBnZXQgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIHVuc29saWNpdGVkCisgKiBldmVudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqKi8KIHN0cnVjdCBscGZjX2RtYWJ1ZiAqCiBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9nZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQkgZG1hX2FkZHJfdCBwaHlzKQpAQCAtMzYwMCw2ICs0NTIyLDE3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogbHBmY19zbGlfYWJvcnRfZWxzX2NtcGw6IENvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIGVscyBhYm9ydCBpb2Nicy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NiOiBQb2ludGVyIHRvIGRyaXZlciBjb21tYW5kIGlvY2Igb2JqZWN0LgorICogQHJzcGlvY2I6IFBvaW50ZXIgdG8gZHJpdmVyIHJlc3BvbnNlIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIGFib3J0IGlvY2JzIGZvcgorICogRUxTIGNvbW1hbmRzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBFTFMgcmluZyBldmVudAorICogaGFuZGxlciB3aXRoIG5vIGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbiBmcmVlcyBtZW1vcnkgcmVzb3VyY2VzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGFib3J0IGlvY2IuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfYWJvcnRfZWxzX2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMzY2NSw2ICs0NTk4LDE3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaWdub3JlX2Vsc19jbXBsOiBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIGFib3J0ZWQgRUxTIGNvbW1hbmQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAY21kaW9jYjogUG9pbnRlciB0byBkcml2ZXIgY29tbWFuZCBpb2NiIG9iamVjdC4KKyAqIEByc3Bpb2NiOiBQb2ludGVyIHRvIGRyaXZlciByZXNwb25zZSBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gU0xJIHJpbmcgZXZlbnQgaGFuZGxlciB3aXRoIG5vCisgKiBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgRUxTIGNvbW1hbmRzCisgKiB3aGljaCBhcmUgYWJvcnRlZC4gVGhlIGZ1bmN0aW9uIGZyZWVzIG1lbW9yeSByZXNvdXJjZXMgdXNlZCBmb3IKKyAqIHRoZSBhYm9ydGVkIEVMUyBjb21tYW5kcy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2lnbm9yZV9lbHNfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMzY3Myw3ICs0NjE3LDcgQEAKIAogCS8qIEVMUyBjbWQgdGFnIDx1bHBJb1RhZz4gY29tcGxldGVzICovCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCSIwMTMzIElnbm9yaW5nIEVMUyBjbWQgdGFnIHgleCBjb21wbGV0aW9uIERhdGE6ICIKKwkJCSIwMTM5IElnbm9yaW5nIEVMUyBjbWQgdGFnIHgleCBjb21wbGV0aW9uIERhdGE6ICIKIAkJCSJ4JXggeCV4IHgleFxuIiwKIAkJCWlyc3AtPnVscElvVGFnLCBpcnNwLT51bHBTdGF0dXMsCiAJCQlpcnNwLT51bi51bHBXb3JkWzRdLCBpcnNwLT51bHBUaW1lb3V0KTsKQEAgLTM2ODQsNiArNDYyOCwxNyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZzogQWJvcnQgZnVuY3Rpb24gZm9yIGEgY29tbWFuZCBpb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAY21kaW9jYjogUG9pbnRlciB0byBkcml2ZXIgY29tbWFuZCBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhbiBhYm9ydCBpb2NiIGZvciB0aGUgcHJvdmlkZWQgY29tbWFuZAorICogaW9jYi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIHdoZW4gaXQgZmFpbHMgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uCisgKiBmYWlsdXJlIG9yIHdoZW4gdGhlIGNvbW1hbmQgaW9jYiBpcyBhbiBhYm9ydCByZXF1ZXN0LgorICoqLwogaW50CiBscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJCSAgIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiKQpAQCAtMzc0OCw2ICs0NzAzLDggQEAKIAkJCSBpYWJ0LT51bi5hY3hyaS5hYm9ydElvVGFnLCBhYnRzaW9jYnAtPmlvdGFnKTsKIAlyZXR2YWwgPSBfX2xwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgcHJpbmcsIGFidHNpb2NicCwgMCk7CiAKKwlpZiAocmV0dmFsKQorCQlfX2xwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgYWJ0c2lvY2JwKTsKIGFib3J0X2lvdGFnX2V4aXQ6CiAJLyoKIAkgKiBDYWxsZXIgdG8gdGhpcyByb3V0aW5lIHNob3VsZCBjaGVjayBmb3IgSU9DQl9FUlJPUgpAQCAtMzc1Nyw2ICs0NzE0LDI5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV92YWxpZGF0ZV9mY3BfaW9jYjogRmlsdGVyaW5nIGZ1bmN0aW9uLCB1c2VkIHRvIGZpbmQgY29tbWFuZHMKKyAqICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSB2cG9ydC9TQ1NJIHRhcmdldC9sdW4uCisgKiBAaW9jYnE6IFBvaW50ZXIgdG8gZHJpdmVyIGlvY2Igb2JqZWN0LgorICogQHZwb3J0OiBQb2ludGVyIHRvIGRyaXZlciB2aXJ0dWFsIHBvcnQgb2JqZWN0LgorICogQHRndF9pZDogU0NTSSBJRCBvZiB0aGUgdGFyZ2V0LgorICogQGx1bl9pZDogTFVOIElEIG9mIHRoZSBzY3NpIGRldmljZS4KKyAqIEBjdHhfY21kOiBMUEZDX0NUWF9MVU4vTFBGQ19DVFhfVEdUL0xQRkNfQ1RYX0hPU1QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFjdHMgYXMgaW9jYiBmaWx0ZXIgZm9yIGZ1bmN0aW9ucyB3aGljaCBhYm9ydCBvciBjb3VudAorICogYWxsIEZDUCBpb2NicyBwZW5kaW5nIG9uIGEgbHVuL1NDU0kgdGFyZ2V0L1NDU0kgaG9zdC4gSXQgd2lsbCByZXR1cm4KKyAqIDAgaWYgdGhlIGZpbHRlcmluZyBjcml0ZXJpYSBpcyBtZXQgZm9yIHRoZSBnaXZlbiBpb2NiIGFuZCB3aWxsIHJldHVybgorICogMSBpZiB0aGUgZmlsdGVyaW5nIGNyaXRlcmlhIGlzIG5vdCBtZXQuCisgKiBJZiBjdHhfY21kID09IExQRkNfQ1RYX0xVTiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbmx5IGlmIHRoZQorICogZ2l2ZW4gaW9jYiBpcyBmb3IgdGhlIFNDU0kgZGV2aWNlIHNwZWNpZmllZCBieSB2cG9ydCwgdGd0X2lkIGFuZAorICogbHVuX2lkIHBhcmFtZXRlci4KKyAqIElmIGN0eF9jbWQgPT0gTFBGQ19DVFhfVEdULCAgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbmx5IGlmIHRoZQorICogZ2l2ZW4gaW9jYiBpcyBmb3IgdGhlIFNDU0kgdGFyZ2V0IHNwZWNpZmllZCBieSB2cG9ydCBhbmQgdGd0X2lkCisgKiBwYXJhbWV0ZXJzLgorICogSWYgY3R4X2NtZCA9PSBMUEZDX0NUWF9IT1NULCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIG9ubHkgaWYgdGhlCisgKiBnaXZlbiBpb2NiIGlzIGZvciB0aGUgU0NTSSBob3N0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdnBvcnQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2tzIGhlbGQuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV92YWxpZGF0ZV9mY3BfaW9jYihzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYnEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKIAkJCSAgIHVpbnQxNl90IHRndF9pZCwgdWludDY0X3QgbHVuX2lkLApAQCAtMzgwMCw2ICs0NzgwLDI1IEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3N1bV9pb2NiOiBGdW5jdGlvbiB0byBjb3VudCB0aGUgbnVtYmVyIG9mIEZDUCBpb2NicyBwZW5kaW5nLgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZpcnR1YWwgcG9ydC4KKyAqIEB0Z3RfaWQ6IFNDU0kgSUQgb2YgdGhlIHRhcmdldC4KKyAqIEBsdW5faWQ6IExVTiBJRCBvZiB0aGUgc2NzaSBkZXZpY2UuCisgKiBAY3R4X2NtZDogTFBGQ19DVFhfTFVOL0xQRkNfQ1RYX1RHVC9MUEZDX0NUWF9IT1NULgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgRkNQIGNvbW1hbmRzIHBlbmRpbmcgZm9yIHRoZSB2cG9ydC4KKyAqIFdoZW4gY3R4X2NtZCA9PSBMUEZDX0NUWF9MVU4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bWJlciBvZiBGQ1AKKyAqIGNvbW1hbmRzIHBlbmRpbmcgb24gdGhlIHZwb3J0IGFzc29jaWF0ZWQgd2l0aCBTQ1NJIGRldmljZSBzcGVjaWZpZWQKKyAqIGJ5IHRndF9pZCBhbmQgbHVuX2lkIHBhcmFtZXRlcnMuCisgKiBXaGVuIGN0eF9jbWQgPT0gTFBGQ19DVFhfVEdULCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgRkNQCisgKiBjb21tYW5kcyBwZW5kaW5nIG9uIHRoZSB2cG9ydCBhc3NvY2lhdGVkIHdpdGggU0NTSSB0YXJnZXQgc3BlY2lmaWVkCisgKiBieSB0Z3RfaWQgcGFyYW1ldGVyLgorICogV2hlbiBjdHhfY21kID09IExQRkNfQ1RYX0hPU1QsIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bWJlciBvZiBGQ1AKKyAqIGNvbW1hbmRzIHBlbmRpbmcgb24gdGhlIHZwb3J0LgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaW9jYnMgd2hpY2ggc2F0aXNmeSB0aGUgZmlsdGVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhbnkgbG9jayBoZWxkLgorICoqLwogaW50CiBscGZjX3NsaV9zdW1faW9jYihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQxNl90IHRndF9pZCwgdWludDY0X3QgbHVuX2lkLAogCQkgIGxwZmNfY3R4X2NtZCBjdHhfY21kKQpAQCAtMzgxOSw2ICs0ODE4LDE3IEBACiAJcmV0dXJuIHN1bTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9hYm9ydF9mY3BfY21wbDogQ29tcGxldGlvbiBoYW5kbGVyIGZ1bmN0aW9uIGZvciBhbiBhYm9ydGVkCisgKiAgICAgICBGQ1AgaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQGNtZGlvY2I6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiIG9iamVjdC4KKyAqIEByc3Bpb2NiOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYWJvcnRlZCBGQ1AgaW9jYiBjb21wbGV0ZXMuIFRoaXMKKyAqIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgcmluZyBldmVudCBoYW5kbGVyIHdpdGggbm8gbG9jayBoZWxkLgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgaW9jYi4KKyAqKi8KIHZvaWQKIGxwZmNfc2xpX2Fib3J0X2ZjcF9jbXBsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTM4MjcsNiArNDgzNywyOCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9hYm9ydF9pb2NiOiBUaGlzIGZ1bmN0aW9uIGlzc3VlIGFib3J0IGZvciBhbGwgU0NTSSBjb21tYW5kcworICogICAgICAgICAgcGVuZGluZyBvbiBhIFNDU0kgaG9zdCh2cG9ydCkvdGFyZ2V0L2x1bi4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2aXJ0dWFsIHBvcnQuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEB0Z3RfaWQ6IFNDU0kgSUQgb2YgdGhlIHRhcmdldC4KKyAqIEBsdW5faWQ6IExVTiBJRCBvZiB0aGUgc2NzaSBkZXZpY2UuCisgKiBAYWJvcnRfY21kOiBMUEZDX0NUWF9MVU4vTFBGQ19DVFhfVEdUL0xQRkNfQ1RYX0hPU1QuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBhYm9ydCBjb21tYW5kIGZvciBldmVyeSBTQ1NJIGNvbW1hbmQKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdmlydHVhbCBwb3J0IHBlbmRpbmcgb24gdGhlIHJpbmcKKyAqIGZpbHRlcmVkIGJ5IGxwZmNfc2xpX3ZhbGlkYXRlX2ZjcF9pb2NiIGZ1bmN0aW9uLgorICogV2hlbiBhYm9ydF9jbWQgPT0gTFBGQ19DVFhfTFVOLCB0aGUgZnVuY3Rpb24gc2VuZHMgYWJvcnQgb25seSB0byB0aGUKKyAqIEZDUCBpb2NicyBhc3NvY2lhdGVkIHdpdGggbHVuIHNwZWNpZmllZCBieSB0Z3RfaWQgYW5kIGx1bl9pZAorICogcGFyYW1ldGVycworICogV2hlbiBhYm9ydF9jbWQgPT0gTFBGQ19DVFhfVEdULCB0aGUgZnVuY3Rpb24gc2VuZHMgYWJvcnQgb25seSB0byB0aGUKKyAqIEZDUCBpb2NicyBhc3NvY2lhdGVkIHdpdGggU0NTSSB0YXJnZXQgc3BlY2lmaWVkIGJ5IHRndF9pZCBwYXJhbWV0ZXIuCisgKiBXaGVuIGFib3J0X2NtZCA9PSBMUEZDX0NUWF9IT1NULCB0aGUgZnVuY3Rpb24gc2VuZHMgYWJvcnQgdG8gYWxsCisgKiBGQ1AgaW9jYnMgYXNzb2NpYXRlZCB3aXRoIHZpcnR1YWwgcG9ydC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgaW9jYnMgaXQgZmFpbGVkIHRvIGFib3J0LgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrcyBoZWxkLgorICoqLwogaW50CiBscGZjX3NsaV9hYm9ydF9pb2NiKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkgICAgdWludDE2X3QgdGd0X2lkLCB1aW50NjRfdCBsdW5faWQsIGxwZmNfY3R4X2NtZCBhYm9ydF9jbWQpCkBAIC0zODc4LDYgKzQ5MTAsMjQgQEAKIAlyZXR1cm4gZXJyY250OwogfQogCisvKioKKyAqIGxwZmNfc2xpX3dha2VfaW9jYl93YWl0OiBpb2NiIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYiBpc3N1ZWQgdXNpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAY21kaW9jYnE6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiLgorICogQHJzcGlvY2JxOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2IuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGZvciBpb2NicyBpc3N1ZWQgdXNpbmcKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB3b3JrZXIgdGhyZWFkIGNvbnRleHQgYW5kIGludGVycnVwdAorICogY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWQgd2hpY2gKKyAqIGNsZWFucyB1cCB0aGUgU0xJIGxheWVyIG9iamVjdHMuCisgKiBUaGlzIGZ1bmN0aW9uIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBpb2NiIHRvIHRoZQorICogcmVzcG9uc2UgaW9jYiBtZW1vcnkgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgb2YKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdCBhbmQgdGhlbiB3YWtlcyB1cCB0aGUgdGhyZWFkIHdoaWNoCisgKiBzbGVlcHMgZm9yIHRoZSBpb2NiIGNvbXBsZXRpb24uCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfd2FrZV9pb2NiX3dhaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLApAQCAtMzg5OSwxMyArNDk0OSwzNiBAQAogCXJldHVybjsKIH0KIAotLyoKLSAqIElzc3VlIHRoZSBjYWxsZXIncyBpb2NiIGFuZCB3YWl0IGZvciBpdHMgY29tcGxldGlvbiwgYnV0IG5vIGxvbmdlciB0aGFuIHRoZQotICogY2FsbGVyJ3MgdGltZW91dC4gIE5vdGUgdGhhdCBpb2NiX2ZsYWdzIGlzIGNsZWFyZWQgYmVmb3JlIHRoZQotICogbHBmY19zbGlfaXNzdWVfY2FsbCBzaW5jZSB0aGUgd2FrZSByb3V0aW5lIHNldHMgYSB1bmlxdWUgdmFsdWUgYW5kIGJ5Ci0gKiBkZWZpbml0aW9uIHRoaXMgaXMgYSB3YWl0IGZ1bmN0aW9uLgotICovCi0KKy8qKgorICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0OiBTeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpc3N1ZSBpb2NiIGNvbW1hbmRzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0Li4KKyAqIEBwcmluZzogUG9pbnRlciB0byBzbGkgcmluZy4KKyAqIEBwaW9jYjogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcHJzcGlvY2JxOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2IuCisgKiBAdGltZW91dDogVGltZW91dCBpbiBudW1iZXIgb2Ygc2Vjb25kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyB0aGUgaW9jYiB0byBmaXJtd2FyZSBhbmQgd2FpdHMgZm9yIHRoZQorICogaW9jYiB0byBjb21wbGV0ZS4gSWYgdGhlIGlvY2IgY29tbWFuZCBpcyBub3QKKyAqIGNvbXBsZXRlZCB3aXRoaW4gdGltZW91dCBzZWNvbmRzLCBpdCByZXR1cm5zIElPQ0JfVElNRURPVVQuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBmcmVlIHRoZSBpb2NiIHJlc291cmNlcyBpZiB0aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIElPQ0JfVElNRURPVVQuCisgKiBUaGUgZnVuY3Rpb24gd2FpdHMgZm9yIHRoZSBpb2NiIGNvbXBsZXRpb24gdXNpbmcgYW4KKyAqIG5vbi1pbnRlcnJ1cHRpYmxlIHdhaXQuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2xlZXAgd2hpbGUgd2FpdGluZyBmb3IgaW9jYiBjb21wbGV0aW9uLgorICogU28sIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dCB3aGljaAorICogZG9lcyBub3QgYWxsb3cgc2xlZXBpbmcuIER1ZSB0byB0aGUgc2FtZSByZWFzb24sIHRoaXMgZnVuY3Rpb24KKyAqIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZGlzYWJsZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgaW9jYiBjb21wbGV0aW9ucyBvY2N1ciB3aGlsZQorICogdGhpcyBmdW5jdGlvbiBzbGVlcC4gU28sIHRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBmcm9tCisgKiB0aGUgdGhyZWFkIHdoaWNoIHByb2Nlc3MgaW9jYiBjb21wbGV0aW9uIGZvciB0aGlzIHJpbmcuCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgaW9jYl9mbGFnIG9mIHRoZSBpb2NiIG9iamVjdCBiZWZvcmUKKyAqIGlzc3VpbmcgdGhlIGlvY2IgYW5kIHRoZSBpb2NiIGNvbXBsZXRpb24gaGFuZGxlciBzZXRzIHRoaXMKKyAqIGZsYWcgYW5kIHdha2VzIHRoaXMgdGhyZWFkIHdoZW4gdGhlIGlvY2IgY29tcGxldGVzLgorICogVGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBpb2NiIHdpbGwgYmUgY29waWVkIHRvIHByc3Bpb2NicQorICogYnkgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aGVuIHRoZSBjb21tYW5kIGNvbXBsZXRlcy4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBJT0NCX1NVQ0NFU1Mgd2hlbiBzdWNjZXNzLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuCisgKiovCiBpbnQKIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCiAJCQkgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLApAQCAtMzk2Myw3ICs1MDM2LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCi0JCQkJIjowMzMyIElPQ0Igd2FpdCBpc3N1ZSBmYWlsZWQsIERhdGEgeCV4XG4iLAorCQkJCSIwMzMyIElPQ0Igd2FpdCBpc3N1ZSBmYWlsZWQsIERhdGEgeCV4XG4iLAogCQkJCXJldHZhbCk7CiAJCXJldHZhbCA9IElPQ0JfRVJST1I7CiAJfQpAQCAtMzk4Myw2ICs1MDU2LDMyIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQ6IFN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGlzc3VlIG1haWxib3guCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcG1ib3hxOiBQb2ludGVyIHRvIGRyaXZlciBtYWlsYm94IG9iamVjdC4KKyAqIEB0aW1lb3V0OiBUaW1lb3V0IGluIG51bWJlciBvZiBzZWNvbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHRoZSBtYWlsYm94IHRvIGZpcm13YXJlIGFuZCB3YWl0cyBmb3IgdGhlCisgKiBtYWlsYm94IGNvbW1hbmQgdG8gY29tcGxldGUuIElmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgbm90CisgKiBjb21wbGV0ZWQgd2l0aGluIHRpbWVvdXQgc2Vjb25kcywgaXQgcmV0dXJucyBNQlhfVElNRU9VVC4KKyAqIFRoZSBmdW5jdGlvbiB3YWl0cyBmb3IgdGhlIG1haWxib3ggY29tcGxldGlvbiB1c2luZyBhbgorICogaW50ZXJydXB0aWJsZSB3YWl0LiBJZiB0aGUgdGhyZWFkIGlzIHdva2VuIHVwIGR1ZSB0byBhCisgKiBzaWduYWwsIE1CWF9USU1FT1VUIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuIENhbGxlcgorICogc2hvdWxkIG5vdCBmcmVlIHRoZSBtYWlsYm94IHJlc291cmNlcywgaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiBNQlhfVElNRU9VVC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzbGVlcCB3aGlsZSB3YWl0aW5nIGZvciBtYWlsYm94IGNvbXBsZXRpb24uCisgKiBTbywgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0IHdoaWNoCisgKiBkb2VzIG5vdCBhbGxvdyBzbGVlcGluZy4gRHVlIHRvIHRoZSBzYW1lIHJlYXNvbiwgdGhpcyBmdW5jdGlvbgorICogY2Fubm90IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZC4KKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBtYWlsYm94IGNvbXBsZXRpb24gb2NjdXJzIHdoaWxlCisgKiB0aGlzIGZ1bmN0aW9uIHNsZWVwLiBTbywgdGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIGZyb20KKyAqIHRoZSB3b3JrZXIgdGhyZWFkIHdoaWNoIHByb2Nlc3NlcyBtYWlsYm94IGNvbXBsZXRpb24uCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBIQkEgbWFuYWdlbWVudAorICogYXBwbGljYXRpb25zLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIE1CWF9TVUNDRVNTIHdoZW4gc3VjY2Vzc2Z1bC4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLgorICoqLwogaW50CiBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYm94cSwKIAkJCSB1aW50MzJfdCB0aW1lb3V0KQpAQCAtNDAyNyw2ICs1MTI2LDE4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9mbHVzaF9tYm94X3F1ZXVlOiBtYWlsYm94IHF1ZXVlIGNsZWFudXAgZnVuY3Rpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBjbGVhbnVwIGFueSBwZW5kaW5nIG1haWxib3gKKyAqIG9iamVjdHMgaW4gdGhlIGRyaXZlciBxdWV1ZSBiZWZvcmUgYnJpbmdpbmcgdGhlIEhCQSBvZmZsaW5lLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUgcmVzZXR0aW5nIHRoZSBIQkEuCisgKiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2sgaGVsZC4gVGhlIGZ1bmN0aW9uCisgKiB0YWtlcyBoYmFsb2NrIHRvIHVwZGF0ZSBTTEkgZGF0YSBzdHJ1Y3R1cmUuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBtYWlsYm94CisgKiBjb21tYW5kIHBlbmRpbmcgZWxzZSByZXR1cm5zIDAuCisgKiovCiBpbnQKIGxwZmNfc2xpX2ZsdXNoX21ib3hfcXVldWUoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKQEAgLTQwNTgsOCArNTE2OSw3NCBAQAogCXJldHVybiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19TTElfTUJPWF9BQ1RJVkUpID8gMSA6IDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfY2hlY2tfZXJhdHQ6IGNoZWNrIGVycm9yIGF0dGVudGlvbiBldmVudHMKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvcm0gdGltZXIgc29mdCBpbnRlcnJ1cHQgY29udGV4dCB0byBjaGVjayBIQkEncworICogZXJyb3IgYXR0ZW50aW9uIHJlZ2lzdGVyIGJpdCBmb3IgZXJyb3IgYXR0ZW50aW9uIGV2ZW50cy4KKyAqCisgKiBUaGlzIGZ1Y250aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIEVycm9yIEF0dGVudGlvbiBpbiB0aGUgSG9zdCBBdHRlbnRpb24KKyAqIFJlZ2lzdGVyIGFuZCByZXR1cm5zIDAgb3RoZXJ3aXNlLgorICoqLworaW50CitscGZjX3NsaV9jaGVja19lcmF0dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJdWludDMyX3QgaGFfY29weTsKKworCS8qIElmIHNvbWVib2R5IGlzIHdhaXRpbmcgdG8gaGFuZGxlIGFuIGVyYXR0LCBkb24ndCBwcm9jZXNzIGl0CisJICogaGVyZS4gVGhlIGJyZGtpbGwgZnVuY3Rpb24gd2lsbCBkbyB0aGlzLgorCSAqLworCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19JR05PUkVfRVJBVFQpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgaWYgaW50ZXJydXB0IGhhbmRsZXIgaGFuZGxlcyB0aGlzIEVSQVRUICovCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJaWYgKHBoYmEtPmhiYV9mbGFnICYgSEJBX0VSQVRUX0hBTkRMRUQpIHsKKwkJLyogSW50ZXJydXB0IGhhbmRsZXIgaGFzIGhhbmRsZWQgRVJBVFQgKi8KKwkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogUmVhZCBjaGlwIEhvc3QgQXR0ZW50aW9uIChIQSkgcmVnaXN0ZXIgKi8KKwloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKKwlpZiAoaGFfY29weSAmIEhBX0VSQVRUKSB7CisJCS8qIFJlYWQgaG9zdCBzdGF0dXMgcmVnaXN0ZXIgdG8gcmV0cmlldmUgZXJyb3IgZXZlbnQgKi8KKwkJbHBmY19zbGlfcmVhZF9ocyhwaGJhKTsKKwkJLyogU2V0IHRoZSBkcml2ZXIgSEEgd29yayBiaXRtYXAgKi8KKwkJcGhiYS0+d29ya19oYSB8PSBIQV9FUkFUVDsKKwkJLyogSW5kaWNhdGUgcG9sbGluZyBoYW5kbGVzIHRoaXMgRVJBVFQgKi8KKwkJcGhiYS0+aGJhX2ZsYWcgfD0gSEJBX0VSQVRUX0hBTkRMRUQ7CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybiAxOworCX0KKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfc3BfaW50cl9oYW5kbGVyOiBUaGUgc2xvdy1wYXRoIGludGVycnVwdCBoYW5kbGVyIG9mIGxwZmMgZHJpdmVyLgorICogQGlycTogSW50ZXJydXB0IG51bWJlci4KKyAqIEBkZXZfaWQ6IFRoZSBkZXZpY2UgY29udGV4dCBwb2ludGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gdGhlIFBDSSBsYXllciBhcyBhbiBpbnRlcnJ1cHQKKyAqIHNlcnZpY2Ugcm91dGluZSB3aGVuIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCB3aXRoIE1TSS1YIG11bHRpLW1lc3NhZ2UKKyAqIGludGVycnVwdCBtb2RlIGFuZCB0aGVyZSBhcmUgc2xvdy1wYXRoIGV2ZW50cyBpbiB0aGUgSEJBLiBIb3dldmVyLAorICogd2hlbiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgd2l0aCBlaXRoZXIgTVNJIG9yIFBpbi1JUlEgaW50ZXJydXB0IG1vZGUsCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBkZXZpY2UtbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIuCisgKiBXaGVuIHRoZSBQQ0kgc2xvdCBpcyBpbiBlcnJvciByZWNvdmVyeSBvciB0aGUgSEJBIGlzIHVuZGVyZ29pbmcKKyAqIGluaXRpYWxpemF0aW9uLCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBub3QgcHJvY2VzcyB0aGUgaW50ZXJydXB0LgorICogVGhlIGxpbmsgYXR0ZW50aW9uIGFuZCBFTFMgcmluZyBhdHRlbnRpb24gZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHRoZQorICogd29ya2VyIHRocmVhZC4gVGhlIGludGVycnVwdCBoYW5kbGVyIHNpZ25hbHMgdGhlIHdvcmtlciB0aHJlYWQgYW5kCisgKiBhbmQgcmV0dXJucyBmb3IgdGhlc2UgZXZlbnRzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IGFueQorICogbG9jayBoZWxkLiBJdCBnZXRzIHRoZSBoYmFsb2NrIHRvIGFjY2VzcyBhbmQgdXBkYXRlIFNMSSBkYXRhCisgKiBzdHJ1Y3R1cmVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBJUlFfSEFORExFRCB3aGVuIGludGVycnVwdCBpcyBoYW5kbGVkIGVsc2UgaXQKKyAqIHJldHVybnMgSVJRX05PTkUuCisgKiovCiBpcnFyZXR1cm5fdAotbHBmY19pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorbHBmY19zcF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBscGZjX2hiYSAgKnBoYmE7CiAJdWludDMyX3QgaGFfY29weTsKQEAgLTQwNzgsNDggKzUyNTUsNTIgQEAKIAkgKiBHZXQgdGhlIGRyaXZlcidzIHBoYmEgc3RydWN0dXJlIGZyb20gdGhlIGRldl9pZCBhbmQKIAkgKiBhc3N1bWUgdGhlIEhCQSBpcyBub3QgaW50ZXJydXB0aW5nLgogCSAqLwotCXBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIGRldl9pZDsKKwlwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWRldl9pZDsKIAogCWlmICh1bmxpa2VseSghcGhiYSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCS8qIElmIHRoZSBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgYWxsIHRoZSBpbnRlcnJ1cHRzLiAqLwotCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHBoYmEtPnBjaWRldikpKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlwaGJhLT5zbGkuc2xpc3RhdC5zbGlfaW50cisrOwotCiAJLyoKLQkgKiBDYWxsIHRoZSBIQkEgdG8gc2VlIGlmIGl0IGlzIGludGVycnVwdGluZy4gIElmIG5vdCwgZG9uJ3QgY2xhaW0KLQkgKiB0aGUgaW50ZXJydXB0CisJICogU3R1ZmYgbmVlZHMgdG8gYmUgYXR0ZW50ZWQgdG8gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYXMgYW4KKwkgKiBpbmRpdmlkdWFsIGludGVycnVwdCBoYW5kbGVyIGluIE1TSS1YIG11bHRpLW1lc3NhZ2UgaW50ZXJydXB0IG1vZGUKIAkgKi8KLQotCS8qIElnbm9yZSBhbGwgaW50ZXJydXB0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCi0JaWYgKHVubGlrZWx5KHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfRE9XTikpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCS8qCi0JICogUmVhZCBob3N0IGF0dGVudGlvbiByZWdpc3RlciB0byBkZXRlcm1pbmUgaW50ZXJydXB0IHNvdXJjZQotCSAqIENsZWFyIEF0dGVudGlvbiBTb3VyY2VzLCBleGNlcHQgRXJyb3IgQXR0ZW50aW9uICh0bwotCSAqIHByZXNlcnZlIHN0YXR1cykgYW5kIExpbmsgQXR0ZW50aW9uCi0JICovCi0Jc3Bpbl9sb2NrKCZwaGJhLT5oYmFsb2NrKTsKLQloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKLQkvKiBJZiBzb21lYm9keSBpcyB3YWl0aW5nIHRvIGhhbmRsZSBhbiBlcmF0dCBkb24ndCBwcm9jZXNzIGl0Ci0JICogaGVyZS4gIFRoZSBicmRraWxsIGZ1bmN0aW9uIHdpbGwgZG8gdGhpcy4KLQkgKi8KLQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfSUdOT1JFX0VSQVRUKQotCQloYV9jb3B5ICY9IH5IQV9FUkFUVDsKLQl3cml0ZWwoKGhhX2NvcHkgJiB+KEhBX0xBVFQgfCBIQV9FUkFUVCkpLCBwaGJhLT5IQXJlZ2FkZHIpOwotCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCi0Jc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOwotCi0JaWYgKHVubGlrZWx5KCFoYV9jb3B5KSkKLQkJcmV0dXJuIElSUV9OT05FOworCWlmIChwaGJhLT5pbnRyX3R5cGUgPT0gTVNJWCkgeworCQkvKiBJZiB0aGUgcGNpIGNoYW5uZWwgaXMgb2ZmbGluZSwgaWdub3JlIGFsbCB0aGUgaW50ZXJydXB0cyAqLworCQlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShwaGJhLT5wY2lkZXYpKSkKKwkJCXJldHVybiBJUlFfTk9ORTsKKwkJLyogVXBkYXRlIGRldmljZS1sZXZlbCBpbnRlcnJ1cHQgc3RhdGlzdGljcyAqLworCQlwaGJhLT5zbGkuc2xpc3RhdC5zbGlfaW50cisrOworCQkvKiBJZ25vcmUgYWxsIGludGVycnVwdHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAqLworCQlpZiAodW5saWtlbHkocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19ET1dOKSkKKwkJCXJldHVybiBJUlFfTk9ORTsKKwkJLyogTmVlZCB0byByZWFkIEhBIFJFRyBmb3Igc2xvdy1wYXRoIGV2ZW50cyAqLworCQlzcGluX2xvY2soJnBoYmEtPmhiYWxvY2spOworCQloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKKwkJLyogSWYgc29tZWJvZHkgaXMgd2FpdGluZyB0byBoYW5kbGUgYW4gZXJhdHQgZG9uJ3QgcHJvY2VzcyBpdAorCQkgKiBoZXJlLiBUaGUgYnJka2lsbCBmdW5jdGlvbiB3aWxsIGRvIHRoaXMuCisJCSAqLworCQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfSUdOT1JFX0VSQVRUKQorCQkJaGFfY29weSAmPSB+SEFfRVJBVFQ7CisJCS8qIENoZWNrIHRoZSBuZWVkIGZvciBoYW5kbGluZyBFUkFUVCBpbiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQlpZiAoaGFfY29weSAmIEhBX0VSQVRUKSB7CisJCQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRVJBVFRfSEFORExFRCkKKwkJCQkvKiBFUkFUVCBwb2xsaW5nIGhhcyBoYW5kbGVkIEVSQVRUICovCisJCQkJaGFfY29weSAmPSB+SEFfRVJBVFQ7CisJCQllbHNlCisJCQkJLyogSW5kaWNhdGUgaW50ZXJydXB0IGhhbmRsZXIgaGFuZGxlcyBFUkFUVCAqLworCQkJCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9FUkFUVF9IQU5ETEVEOworCQl9CisJCS8qIENsZWFyIHVwIG9ubHkgYXR0ZW50aW9uIHNvdXJjZSByZWxhdGVkIHRvIHNsb3ctcGF0aCAqLworCQl3cml0ZWwoKGhhX2NvcHkgJiAoSEFfTUJBVFQgfCBIQV9SMl9DTFJfTVNLKSksCisJCQlwaGJhLT5IQXJlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CisJfSBlbHNlCisJCWhhX2NvcHkgPSBwaGJhLT5oYV9jb3B5OwogCiAJd29ya19oYV9jb3B5ID0gaGFfY29weSAmIHBoYmEtPndvcmtfaGFfbWFzazsKIAotCWlmICh1bmxpa2VseSh3b3JrX2hhX2NvcHkpKSB7CisJaWYgKHdvcmtfaGFfY29weSkgewogCQlpZiAod29ya19oYV9jb3B5ICYgSEFfTEFUVCkgewogCQkJaWYgKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfUFJPQ0VTU19MQSkgewogCQkJCS8qCkBAIC00MTM4LDcgKzUzMTksNyBAQAogCQkJCXdvcmtfaGFfY29weSAmPSB+SEFfTEFUVDsKIAkJfQogCi0JCWlmICh3b3JrX2hhX2NvcHkgJiB+KEhBX0VSQVRUfEhBX01CQVRUfEhBX0xBVFQpKSB7CisJCWlmICh3b3JrX2hhX2NvcHkgJiB+KEhBX0VSQVRUIHwgSEFfTUJBVFQgfCBIQV9MQVRUKSkgewogCQkJLyoKIAkJCSAqIFR1cm4gb2ZmIFNsb3cgUmluZ3MgaW50ZXJydXB0cywgTFBGQ19FTFNfUklORyBpcwogCQkJICogdGhlIG9ubHkgc2xvdyByaW5nLgpAQCAtNDE3OSwzMSArNTM2MCwxMyBAQAogCQkJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKIAkJCX0KIAkJfQotCi0JCWlmICh3b3JrX2hhX2NvcHkgJiBIQV9FUkFUVCkgewotCQkJLyoKLQkJCSAqIFRoZXJlIHdhcyBhIGxpbmsvYm9hcmQgZXJyb3IuICBSZWFkIHRoZQotCQkJICogc3RhdHVzIHJlZ2lzdGVyIHRvIHJldHJpZXZlIHRoZSBlcnJvciBldmVudAotCQkJICogYW5kIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXBoYmEtPnNsaS5zbGlzdGF0LmVycl9hdHRuX2V2ZW50Kys7Ci0JCQkvKiBTYXZlIHN0YXR1cyBpbmZvICovCi0JCQlwaGJhLT53b3JrX2hzID0gcmVhZGwocGhiYS0+SFNyZWdhZGRyKTsKLQkJCXBoYmEtPndvcmtfc3RhdHVzWzBdID0gcmVhZGwocGhiYS0+TUJzbGltYWRkciArIDB4YTgpOwotCQkJcGhiYS0+d29ya19zdGF0dXNbMV0gPSByZWFkbChwaGJhLT5NQnNsaW1hZGRyICsgMHhhYyk7Ci0KLQkJCS8qIENsZWFyIENoaXAgZXJyb3IgYml0ICovCi0JCQl3cml0ZWwoSEFfRVJBVFQsIHBoYmEtPkhBcmVnYWRkcik7Ci0JCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLwotCQkJcGhiYS0+cHBvcnQtPnN0b3BwZWQgPSAxOwotCQl9Ci0KIAkJc3Bpbl9sb2NrKCZwaGJhLT5oYmFsb2NrKTsKLQkJaWYgKCh3b3JrX2hhX2NvcHkgJiBIQV9NQkFUVCkgJiYKLQkJICAgIChwaGJhLT5zbGkubWJveF9hY3RpdmUpKSB7CisJCWlmICh3b3JrX2hhX2NvcHkgJiBIQV9FUkFUVCkKKwkJCWxwZmNfc2xpX3JlYWRfaHMocGhiYSk7CisJCWlmICgod29ya19oYV9jb3B5ICYgSEFfTUJBVFQpICYmIChwaGJhLT5zbGkubWJveF9hY3RpdmUpKSB7CiAJCQlwbWIgPSBwaGJhLT5zbGkubWJveF9hY3RpdmU7CiAJCQlwbWJveCA9ICZwbWItPm1iOwotCQkJbWJveCA9ICZwaGJhLT5zbGltMnAtPm1ieDsKKwkJCW1ib3ggPSBwaGJhLT5tYm94OwogCQkJdnBvcnQgPSBwbWItPnZwb3J0OwogCiAJCQkvKiBGaXJzdCBjaGVjayBvdXQgdGhlIHN0YXR1cyB3b3JkICovCkBAIC00MjcwLDcgKzU0MzMsNyBAQAogCQkJCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAogCQkJCQkJCUtFUk5fRVJSLAogCQkJCQkJCUxPR19NQk9YIHwgTE9HX1NMSSwKLQkJCQkJCQkiMDMwNiByYyBzaG91bGQgaGF2ZSIKKwkJCQkJCQkiMDM1MCByYyBzaG91bGQgaGF2ZSIKIAkJCQkJCQkiYmVlbiBNQlhfQlVTWSIpOwogCQkJCQkJZ290byBzZW5kX2N1cnJlbnRfbWJveDsKIAkJCQkJfQpAQCAtNDI4Myw2ICs1NDQ2LDcgQEAKIAkJCX0KIAkJfSBlbHNlCiAJCQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CisKIAkJaWYgKCh3b3JrX2hhX2NvcHkgJiBIQV9NQkFUVCkgJiYKIAkJICAgIChwaGJhLT5zbGkubWJveF9hY3RpdmUgPT0gTlVMTCkpIHsKIHNlbmRfY3VycmVudF9tYm94OgpAQCAtNDMwMiwxNSArNTQ2Niw3NCBAQAogCQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CiAJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CiAJfQorCXJldHVybiBJUlFfSEFORExFRDsKIAotCWhhX2NvcHkgJj0gfihwaGJhLT53b3JrX2hhX21hc2spOworfSAvKiBscGZjX3NwX2ludHJfaGFuZGxlciAqLworCisvKioKKyAqIGxwZmNfZnBfaW50cl9oYW5kbGVyOiBUaGUgZmFzdC1wYXRoIGludGVycnVwdCBoYW5kbGVyIG9mIGxwZmMgZHJpdmVyLgorICogQGlycTogSW50ZXJydXB0IG51bWJlci4KKyAqIEBkZXZfaWQ6IFRoZSBkZXZpY2UgY29udGV4dCBwb2ludGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gdGhlIFBDSSBsYXllciBhcyBhbiBpbnRlcnJ1cHQKKyAqIHNlcnZpY2Ugcm91dGluZSB3aGVuIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCB3aXRoIE1TSS1YIG11bHRpLW1lc3NhZ2UKKyAqIGludGVycnVwdCBtb2RlIGFuZCB0aGVyZSBpcyBhIGZhc3QtcGF0aCBGQ1AgSU9DQiByaW5nIGV2ZW50IGluIHRoZQorICogSEJBLiBIb3dldmVyLCB3aGVuIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCB3aXRoIGVpdGhlciBNU0kgb3IgUGluLUlSUQorICogaW50ZXJydXB0IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRldmljZS1sZXZlbAorICogaW50ZXJydXB0IGhhbmRsZXIuIFdoZW4gdGhlIFBDSSBzbG90IGlzIGluIGVycm9yIHJlY292ZXJ5IG9yIHRoZSBIQkEKKyAqIGlzIHVuZGVyZ29pbmcgaW5pdGlhbGl6YXRpb24sIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIG5vdCBwcm9jZXNzCisgKiB0aGUgaW50ZXJydXB0LiBUaGUgU0NTSSBGQ1AgZmFzdC1wYXRoIHJpbmcgZXZlbnQgYXJlIGhhbmRsZWQgaW4gdGhlCisgKiBpbnRycnVwdCBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrIGhlbGQuIEl0CisgKiBnZXRzIHRoZSBoYmFsb2NrIHRvIGFjY2VzcyBhbmQgdXBkYXRlIFNMSSBkYXRhIHN0cnVjdHVyZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIElSUV9IQU5ETEVEIHdoZW4gaW50ZXJydXB0IGlzIGhhbmRsZWQgZWxzZSBpdAorICogcmV0dXJucyBJUlFfTk9ORS4KKyAqKi8KK2lycXJldHVybl90CitscGZjX2ZwX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGxwZmNfaGJhICAqcGhiYTsKKwl1aW50MzJfdCBoYV9jb3B5OworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCisJLyogR2V0IHRoZSBkcml2ZXIncyBwaGJhIHN0cnVjdHVyZSBmcm9tIHRoZSBkZXZfaWQgYW5kCisJICogYXNzdW1lIHRoZSBIQkEgaXMgbm90IGludGVycnVwdGluZy4KKwkgKi8KKwlwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBkZXZfaWQ7CisKKwlpZiAodW5saWtlbHkoIXBoYmEpKQorCQlyZXR1cm4gSVJRX05PTkU7CiAKIAkvKgotCSAqIFByb2Nlc3MgYWxsIGV2ZW50cyBvbiBGQ1AgcmluZy4gIFRha2UgdGhlIG9wdGltaXplZCBwYXRoIGZvcgotCSAqIEZDUCBJTy4gIEFueSBvdGhlciBJTyBpcyBzbG93IHBhdGggYW5kIGlzIGhhbmRsZWQgYnkKLQkgKiB0aGUgd29ya2VyIHRocmVhZC4KKwkgKiBTdHVmZiBuZWVkcyB0byBiZSBhdHRlbnRlZCB0byB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBhcyBhbgorCSAqIGluZGl2aWR1YWwgaW50ZXJydXB0IGhhbmRsZXIgaW4gTVNJLVggbXVsdGktbWVzc2FnZSBpbnRlcnJ1cHQgbW9kZQogCSAqLwotCXN0YXR1cyA9IChoYV9jb3B5ICYgKEhBX1JYTUFTSyAgPDwgKDQqTFBGQ19GQ1BfUklORykpKTsKKwlpZiAocGhiYS0+aW50cl90eXBlID09IE1TSVgpIHsKKwkJLyogSWYgcGNpIGNoYW5uZWwgaXMgb2ZmbGluZSwgaWdub3JlIGFsbCB0aGUgaW50ZXJydXB0cyAqLworCQlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShwaGJhLT5wY2lkZXYpKSkKKwkJCXJldHVybiBJUlFfTk9ORTsKKwkJLyogVXBkYXRlIGRldmljZS1sZXZlbCBpbnRlcnJ1cHQgc3RhdGlzdGljcyAqLworCQlwaGJhLT5zbGkuc2xpc3RhdC5zbGlfaW50cisrOworCQkvKiBJZ25vcmUgYWxsIGludGVycnVwdHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAqLworCQlpZiAodW5saWtlbHkocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19ET1dOKSkKKwkJCXJldHVybiBJUlFfTk9ORTsKKwkJLyogTmVlZCB0byByZWFkIEhBIFJFRyBmb3IgRkNQIHJpbmcgYW5kIG90aGVyIHJpbmcgZXZlbnRzICovCisJCWhhX2NvcHkgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOworCQkvKiBDbGVhciB1cCBvbmx5IGF0dGVudGlvbiBzb3VyY2UgcmVsYXRlZCB0byBmYXN0LXBhdGggKi8KKwkJc3Bpbl9sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwkJd3JpdGVsKChoYV9jb3B5ICYgKEhBX1IwX0NMUl9NU0sgfCBIQV9SMV9DTFJfTVNLKSksCisJCQlwaGJhLT5IQXJlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CisJfSBlbHNlCisJCWhhX2NvcHkgPSBwaGJhLT5oYV9jb3B5OworCisJLyoKKwkgKiBQcm9jZXNzIGFsbCBldmVudHMgb24gRkNQIHJpbmcuIFRha2UgdGhlIG9wdGltaXplZCBwYXRoIGZvciBGQ1AgSU8uCisJICovCisJaGFfY29weSAmPSB+KHBoYmEtPndvcmtfaGFfbWFzayk7CisKKwlzdGF0dXMgPSAoaGFfY29weSAmIChIQV9SWE1BU0sgPDwgKDQqTFBGQ19GQ1BfUklORykpKTsKIAlzdGF0dXMgPj49ICg0KkxQRkNfRkNQX1JJTkcpOwogCWlmIChzdGF0dXMgJiBIQV9SWE1BU0spCiAJCWxwZmNfc2xpX2hhbmRsZV9mYXN0X3JpbmdfZXZlbnQocGhiYSwKQEAgLTQzMTksMTEgKzU1NDIsMTAgQEAKIAogCWlmIChwaGJhLT5jZmdfbXVsdGlfcmluZ19zdXBwb3J0ID09IDIpIHsKIAkJLyoKLQkJICogUHJvY2VzcyBhbGwgZXZlbnRzIG9uIGV4dHJhIHJpbmcuICBUYWtlIHRoZSBvcHRpbWl6ZWQgcGF0aAotCQkgKiBmb3IgZXh0cmEgcmluZyBJTy4gIEFueSBvdGhlciBJTyBpcyBzbG93IHBhdGggYW5kIGlzIGhhbmRsZWQKLQkJICogYnkgdGhlIHdvcmtlciB0aHJlYWQuCisJCSAqIFByb2Nlc3MgYWxsIGV2ZW50cyBvbiBleHRyYSByaW5nLiBUYWtlIHRoZSBvcHRpbWl6ZWQgcGF0aAorCQkgKiBmb3IgZXh0cmEgcmluZyBJTy4KIAkJICovCi0JCXN0YXR1cyA9IChoYV9jb3B5ICYgKEhBX1JYTUFTSyAgPDwgKDQqTFBGQ19FWFRSQV9SSU5HKSkpOworCQlzdGF0dXMgPSAoaGFfY29weSAmIChIQV9SWE1BU0sgPDwgKDQqTFBGQ19FWFRSQV9SSU5HKSkpOwogCQlzdGF0dXMgPj49ICg0KkxQRkNfRVhUUkFfUklORyk7CiAJCWlmIChzdGF0dXMgJiBIQV9SWE1BU0spIHsKIAkJCWxwZmNfc2xpX2hhbmRsZV9mYXN0X3JpbmdfZXZlbnQocGhiYSwKQEAgLTQzMzIsNSArNTU1NCwxMDYgQEAKIAkJfQogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9ICAvKiBscGZjX2ZwX2ludHJfaGFuZGxlciAqLwogCi19IC8qIGxwZmNfaW50cl9oYW5kbGVyICovCisvKioKKyAqIGxwZmNfaW50cl9oYW5kbGVyOiBUaGUgZGV2aWNlLWxldmVsIGludGVycnVwdCBoYW5kbGVyIG9mIGxwZmMgZHJpdmVyLgorICogQGlycTogSW50ZXJydXB0IG51bWJlci4KKyAqIEBkZXZfaWQ6IFRoZSBkZXZpY2UgY29udGV4dCBwb2ludGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRldmljZS1sZXZlbCBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgZnJvbSB0aGUgUENJCisgKiBsYXllciB3aGVuIGVpdGhlciBNU0kgb3IgUGluLUlSUSBpbnRlcnJ1cHQgbW9kZSBpcyBlbmFibGVkIGFuZCB0aGVyZSBpcworICogYW4gZXZlbnQgaW4gdGhlIEhCQSB3aGljaCByZXF1aXJlcyBkcml2ZXIgYXR0ZW50aW9uLiBUaGlzIGZ1bmN0aW9uCisgKiBpbnZva2VzIHRoZSBzbG93LXBhdGggaW50ZXJydXB0IGF0dGVudGlvbiBoYW5kbGluZyBmdW5jdGlvbiBhbmQgZmFzdC1wYXRoCisgKiBpbnRlcnJ1cHQgYXR0ZW50aW9uIGhhbmRsaW5nIGZ1bmN0aW9uIGluIHR1cm4gdG8gcHJvY2VzcyB0aGUgcmVsZXZhbnQKKyAqIEhCQSBhdHRlbnRpb24gZXZlbnRzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrIGhlbGQuIEl0CisgKiBnZXRzIHRoZSBoYmFsb2NrIHRvIGFjY2VzcyBhbmQgdXBkYXRlIFNMSSBkYXRhIHN0cnVjdHVyZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIElSUV9IQU5ETEVEIHdoZW4gaW50ZXJydXB0IGlzIGhhbmRsZWQsIGVsc2UgaXQKKyAqIHJldHVybnMgSVJRX05PTkUuCisgKiovCitpcnFyZXR1cm5fdAorbHBmY19pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBscGZjX2hiYSAgKnBoYmE7CisJaXJxcmV0dXJuX3Qgc3BfaXJxX3JjLCBmcF9pcnFfcmM7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMxLCBzdGF0dXMyOworCisJLyoKKwkgKiBHZXQgdGhlIGRyaXZlcidzIHBoYmEgc3RydWN0dXJlIGZyb20gdGhlIGRldl9pZCBhbmQKKwkgKiBhc3N1bWUgdGhlIEhCQSBpcyBub3QgaW50ZXJydXB0aW5nLgorCSAqLworCXBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIGRldl9pZDsKKworCWlmICh1bmxpa2VseSghcGhiYSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIElmIHRoZSBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgYWxsIHRoZSBpbnRlcnJ1cHRzLiAqLworCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHBoYmEtPnBjaWRldikpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBVcGRhdGUgZGV2aWNlIGxldmVsIGludGVycnVwdCBzdGF0aXN0aWNzICovCisJcGhiYS0+c2xpLnNsaXN0YXQuc2xpX2ludHIrKzsKKworCS8qIElnbm9yZSBhbGwgaW50ZXJydXB0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCisJaWYgKHVubGlrZWx5KHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfRE9XTikpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXNwaW5fbG9jaygmcGhiYS0+aGJhbG9jayk7CisJcGhiYS0+aGFfY29weSA9IHJlYWRsKHBoYmEtPkhBcmVnYWRkcik7CisJaWYgKHVubGlrZWx5KCFwaGJhLT5oYV9jb3B5KSkgeworCQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgaWYgKHBoYmEtPmhhX2NvcHkgJiBIQV9FUkFUVCkgeworCQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRVJBVFRfSEFORExFRCkKKwkJCS8qIEVSQVRUIHBvbGxpbmcgaGFzIGhhbmRsZWQgRVJBVFQgKi8KKwkJCXBoYmEtPmhhX2NvcHkgJj0gfkhBX0VSQVRUOworCQllbHNlCisJCQkvKiBJbmRpY2F0ZSBpbnRlcnJ1cHQgaGFuZGxlciBoYW5kbGVzIEVSQVRUICovCisJCQlwaGJhLT5oYmFfZmxhZyB8PSBIQkFfRVJBVFRfSEFORExFRDsKKwl9CisKKwkvKiBDbGVhciBhdHRlbnRpb24gc291cmNlcyBleGNlcHQgbGluayBhbmQgZXJyb3IgYXR0ZW50aW9ucyAqLworCXdyaXRlbCgocGhiYS0+aGFfY29weSAmIH4oSEFfTEFUVCB8IEhBX0VSQVRUKSksIHBoYmEtPkhBcmVnYWRkcik7CisJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CisKKwkvKgorCSAqIEludm9rZXMgc2xvdy1wYXRoIGhvc3QgYXR0ZW50aW9uIGludGVycnVwdCBoYW5kbGluZyBhcyBhcHByb3ByaWF0ZS4KKwkgKi8KKworCS8qIHN0YXR1cyBvZiBldmVudHMgd2l0aCBtYWlsYm94IGFuZCBsaW5rIGF0dGVudGlvbiAqLworCXN0YXR1czEgPSBwaGJhLT5oYV9jb3B5ICYgKEhBX01CQVRUIHwgSEFfTEFUVCB8IEhBX0VSQVRUKTsKKworCS8qIHN0YXR1cyBvZiBldmVudHMgd2l0aCBFTFMgcmluZyAqLworCXN0YXR1czIgPSAocGhiYS0+aGFfY29weSAmIChIQV9SWE1BU0sgIDw8ICg0KkxQRkNfRUxTX1JJTkcpKSk7CisJc3RhdHVzMiA+Pj0gKDQqTFBGQ19FTFNfUklORyk7CisKKwlpZiAoc3RhdHVzMSB8fCAoc3RhdHVzMiAmIEhBX1JYTUFTSykpCisJCXNwX2lycV9yYyA9IGxwZmNfc3BfaW50cl9oYW5kbGVyKGlycSwgZGV2X2lkKTsKKwllbHNlCisJCXNwX2lycV9yYyA9IElSUV9OT05FOworCisJLyoKKwkgKiBJbnZva2UgZmFzdC1wYXRoIGhvc3QgYXR0ZW50aW9uIGludGVycnVwdCBoYW5kbGluZyBhcyBhcHByb3ByaWF0ZS4KKwkgKi8KKworCS8qIHN0YXR1cyBvZiBldmVudHMgd2l0aCBGQ1AgcmluZyAqLworCXN0YXR1czEgPSAocGhiYS0+aGFfY29weSAmIChIQV9SWE1BU0sgPDwgKDQqTFBGQ19GQ1BfUklORykpKTsKKwlzdGF0dXMxID4+PSAoNCpMUEZDX0ZDUF9SSU5HKTsKKworCS8qIHN0YXR1cyBvZiBldmVudHMgd2l0aCBleHRyYSByaW5nICovCisJaWYgKHBoYmEtPmNmZ19tdWx0aV9yaW5nX3N1cHBvcnQgPT0gMikgeworCQlzdGF0dXMyID0gKHBoYmEtPmhhX2NvcHkgJiAoSEFfUlhNQVNLIDw8ICg0KkxQRkNfRVhUUkFfUklORykpKTsKKwkJc3RhdHVzMiA+Pj0gKDQqTFBGQ19FWFRSQV9SSU5HKTsKKwl9IGVsc2UKKwkJc3RhdHVzMiA9IDA7CisKKwlpZiAoKHN0YXR1czEgJiBIQV9SWE1BU0spIHx8IChzdGF0dXMyICYgSEFfUlhNQVNLKSkKKwkJZnBfaXJxX3JjID0gbHBmY19mcF9pbnRyX2hhbmRsZXIoaXJxLCBkZXZfaWQpOworCWVsc2UKKwkJZnBfaXJxX3JjID0gSVJRX05PTkU7CisKKwkvKiBSZXR1cm4gZGV2aWNlLWxldmVsIGludGVycnVwdCBoYW5kbGluZyBzdGF0dXMgKi8KKwlyZXR1cm4gKHNwX2lycV9yYyA9PSBJUlFfSEFORExFRCkgPyBzcF9pcnFfcmMgOiBmcF9pcnFfcmM7Cit9ICAvKiBscGZjX2ludHJfaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKaW5kZXggNzI0OWZkMi4uODgzOTM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCkBAIC0yMzMsNiArMjMzLDcgQEAKICNkZWZpbmUgTFBGQ19TTEkyX0FDVElWRSAgICAgICAgICAweDIwMAkvKiBTTEkyIG92ZXJsYXkgaW4gZmlybXdhcmUgaXMgYWN0aXZlICovCiAjZGVmaW5lIExQRkNfUFJPQ0VTU19MQSAgICAgICAgICAgMHg0MDAJLyogQWJsZSB0byBwcm9jZXNzIGxpbmsgYXR0ZW50aW9uICovCiAjZGVmaW5lIExQRkNfQkxPQ0tfTUdNVF9JTyAgICAgICAgMHg4MDAJLyogRG9uJ3QgYWxsb3cgbWdtdCBtYnggb3IgaW9jYiBjbWRzICovCisjZGVmaW5lIExQRkNfTUVOTE9fTUFJTlQgICAgICAgICAgMHgxMDAwIC8qIG5lZWQgZm9yIG1lbmwgZncgZG93bmxvYWQgKi8KIAogCXN0cnVjdCBscGZjX3NsaV9yaW5nIHJpbmdbTFBGQ19NQVhfUklOR107CiAJaW50IGZjcF9yaW5nOwkJLyogcmluZyB1c2VkIGZvciBGQ1AgaW5pdGlhdG9yIGNvbW1hbmRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IGFkMjRjYWMuLmNjNDNlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xOCw5ICsxOCwxMSBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMi43IgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjIuOCIKIAotI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FICJscGZjIgorI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FCQkibHBmYyIKKyNkZWZpbmUgTFBGQ19TUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOnNwIgorI2RlZmluZSBMUEZDX0ZQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6ZnAiCiAKICNkZWZpbmUgTFBGQ19NT0RVTEVfREVTQyAiRW11bGV4IExpZ2h0UHVsc2UgRmlicmUgQ2hhbm5lbCBTQ1NJIGRyaXZlciAiIFwKIAkJTFBGQ19EUklWRVJfVkVSU0lPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCmluZGV4IDEwOWY4OWQuLmE3ZGUxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTIwNCw2ICsyMDUsNzcgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX2Rpc2NvdmVyeV93YWl0OiBXYWl0IGZvciBkcml2ZXIgZGlzY292ZXJ5IHRvIHF1aWVzY2UuCisgKiBAdnBvcnQ6IFRoZSB2aXJ0dWFsIHBvcnQgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KKyAqCisgKiBUaGlzIGRyaXZlciBjYWxscyB0aGlzIHJvdXRpbmUgc3BlY2lmaWNhbGx5IGZyb20gbHBmY192cG9ydF9kZWxldGUKKyAqIHRvIGVuZm9yY2UgYSBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdnBvcnQKKyAqIGRlbGV0ZSByZWxhdGl2ZSB0byBkaXNjb3ZlcnkgYWN0aXZpdGllcy4gIFRoZQorICogbHBmY192cG9ydF9kZWxldGUgcm91dGluZSBzaG91bGQgbm90IHJldHVybiB1bnRpbCBpdAorICogY2FuIHJlYXNvbmFibHkgZ3VhcmFudGVlIHRoYXQgZGlzY292ZXJ5IGhhcyBxdWllc2NlZC4KKyAqIFBvc3QgRkRJU0MgTE9HTywgdGhlIGRyaXZlciBtdXN0IHdhaXQgdW50aWwgaXRzIFNBTiB0ZWFyZG93biBpcworICogY29tcGxldGUgYW5kIGFsbCByZXNvdXJjZXMgcmVjb3ZlcmVkIGJlZm9yZSBhbGxvd2luZworICogY2xlYW51cC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZG9lcyBub3QgcmVxdWlyZSBhbnkgbG9ja3MgaGVsZC4KKyAqKi8KK3N0YXRpYyB2b2lkIGxwZmNfZGlzY292ZXJ5X3dhaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXVpbnQzMl90IHdhaXRfZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgd2FpdF90aW1lX21heDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisKKwl3YWl0X2ZsYWdzID0gRkNfUlNDTl9NT0RFIHwgRkNfUlNDTl9ESVNDT1ZFUlkgfCBGQ19OTFBfTU9SRSB8CisJCSAgICAgRkNfUlNDTl9ERUZFUlJFRCB8IEZDX05ESVNDX0FDVElWRSB8IEZDX0RJU0NfVE1POworCisJLyoKKwkgKiBUaGUgdGltZSBjb25zdHJhaW50IG9uIHRoaXMgbG9vcCBpcyBhIGJhbGFuY2UgYmV0d2VlbiB0aGUKKwkgKiBmYWJyaWMgUkFfVE9WIHZhbHVlIGFuZCBkZXZfbG9zcyB0bW8uICBUaGUgZHJpdmVyJ3MKKwkgKiBkZXZsb3NzX3RtbyBpcyAxMCBnaXZpbmcgdGhpcyBsb29wIGEgM3ggbXVsdGlwbGllciBtaW5pbWFsbHkuCisJICovCisJd2FpdF90aW1lX21heCA9IG1zZWNzX3RvX2ppZmZpZXMoKChwaGJhLT5mY19yYXRvdiAqIDMpICsgMykgKiAxMDAwKTsKKwl3YWl0X3RpbWVfbWF4ICs9IGppZmZpZXM7CisJc3RhcnRfdGltZSA9IGppZmZpZXM7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHdhaXRfdGltZV9tYXgpKSB7CisJCWlmICgodnBvcnQtPm51bV9kaXNjX25vZGVzID4gMCkgICAgfHwKKwkJICAgICh2cG9ydC0+ZmNfZmxhZyAmIHdhaXRfZmxhZ3MpICB8fAorCQkgICAgKCh2cG9ydC0+cG9ydF9zdGF0ZSA+IExQRkNfVlBPUlRfRkFJTEVEKSAmJgorCQkgICAgICh2cG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfVlBPUlRfUkVBRFkpKSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1ZQT1JULAorCQkJCQkiMTgzMyBWcG9ydCBkaXNjb3ZlcnkgcXVpZXNjZSBXYWl0OiIKKwkJCQkJIiB2cGkgeCV4IHN0YXRlIHgleCBmY19mbGFncyB4JXgiCisJCQkJCSIgbnVtX25vZGVzIHgleCwgd2FpdGluZyAxMDAwIG1zZWNzIgorCQkJCQkiIHRvdGFsIHdhaXQgbXNlY3MgeCV4XG4iLAorCQkJCQl2cG9ydC0+dnBpLCB2cG9ydC0+cG9ydF9zdGF0ZSwKKwkJCQkJdnBvcnQtPmZjX2ZsYWcsIHZwb3J0LT5udW1fZGlzY19ub2RlcywKKwkJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnRfdGltZSkpOworCQkJbXNsZWVwKDEwMDApOworCQl9IGVsc2UgeworCQkJLyogQmFzZSBjYXNlLiAgV2FpdCB2YXJpYW50cyBzYXRpc2ZpZWQuICBCcmVhayBvdXQgKi8KKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19WUE9SVCwKKwkJCQkJICIxODM0IFZwb3J0IGRpc2NvdmVyeSBxdWllc2NlZDoiCisJCQkJCSAiIHZwaSB4JXggc3RhdGUgeCV4IGZjX2ZsYWdzIHgleCIKKwkJCQkJICIgd2FpdCBtc2VjcyB4JXhcbiIsCisJCQkJCSB2cG9ydC0+dnBpLCB2cG9ydC0+cG9ydF9zdGF0ZSwKKwkJCQkJIHZwb3J0LT5mY19mbGFnLAorCQkJCQkgamlmZmllc190b19tc2VjcyhqaWZmaWVzCisJCQkJCQktIHN0YXJ0X3RpbWUpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgd2FpdF90aW1lX21heCkpCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1ZQT1JULAorCQkJCSIxODM1IFZwb3J0IGRpc2NvdmVyeSBxdWllc2NlIGZhaWxlZDoiCisJCQkJIiB2cGkgeCV4IHN0YXRlIHgleCBmY19mbGFncyB4JXgiCisJCQkJIiB3YWl0IG1zZWNzIHgleFxuIiwKKwkJCQl2cG9ydC0+dnBpLCB2cG9ydC0+cG9ydF9zdGF0ZSwKKwkJCQl2cG9ydC0+ZmNfZmxhZywKKwkJCQlqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydF90aW1lKSk7Cit9CisKIGludAogbHBmY192cG9ydF9jcmVhdGUoc3RydWN0IGZjX3Zwb3J0ICpmY192cG9ydCwgYm9vbCBkaXNhYmxlKQogewpAQCAtNTA2LDggKzU3OCwxMiBAQAogCSAqIGluaXRpYXRlZCBhZnRlciB3ZSd2ZSBkaXNwb3NlZCBvZiBhbGwgb3RoZXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQKIAkgKiB3aXRoIHRoZSBwb3J0LgogCSAqLwotCWlmICghc2NzaV9ob3N0X2dldChzaG9zdCkgfHwgIXNjc2lfaG9zdF9nZXQoc2hvc3QpKQorCWlmICghc2NzaV9ob3N0X2dldChzaG9zdCkpCiAJCXJldHVybiBWUE9SVF9JTlZBTDsKKwlpZiAoIXNjc2lfaG9zdF9nZXQoc2hvc3QpKSB7CisJCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworCQlyZXR1cm4gVlBPUlRfSU5WQUw7CisJfQogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXZwb3J0LT5sb2FkX2ZsYWcgfD0gRkNfVU5MT0FESU5HOwogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CkBAIC01OTcsMTEgKzY3MywxNiBAQAogCQl9CiAJCXZwb3J0LT51bnJlZ192cGlfY21wbCA9IFZQT1JUX0lOVkFMOwogCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhwaGJhLT5mY19yYXRvdiAqIDIwMDApOworCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfVU5VU0VEX05PREUpCisJCQlnb3RvIHNraXBfbG9nbzsKIAkJaWYgKCFscGZjX2lzc3VlX2Vsc19ucGl2X2xvZ28odnBvcnQsIG5kbHApKQogCQkJd2hpbGUgKHZwb3J0LT51bnJlZ192cGlfY21wbCA9PSBWUE9SVF9JTlZBTCAmJiB0aW1lb3V0KQogCQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCX0KIAorCWlmICghKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpKQorCQlscGZjX2Rpc2NvdmVyeV93YWl0KHZwb3J0KTsKKwogc2tpcF9sb2dvOgogCWxwZmNfY2xlYW51cCh2cG9ydCk7CiAJbHBmY19zbGlfaG9zdF9kb3duKHZwb3J0KTsKQEAgLTYxNSw4ICs2OTYsMTAgQEAKIAkJICogQ29tcGxldGlvbiBvZiB1bnJlZ192cGkgKGxwZmNfbWJ4X2NtcGxfdW5yZWdfdnBpKQogCQkgKiBkb2VzIHRoZSBzY3NpX2hvc3RfcHV0KCkgdG8gcmVsZWFzZSB0aGUgdnBvcnQuCiAJCSAqLwotCQlscGZjX21ieF91bnJlZ192cGkodnBvcnQpOwotCX0KKwkJaWYgKGxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydCkpCisJCQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKKwl9IGVsc2UKKwkJc2NzaV9ob3N0X3B1dChzaG9zdCk7CiAKIAlscGZjX2ZyZWVfdnBpKHBoYmEsIHZwb3J0LT52cGkpOwogCXZwb3J0LT53b3JrX3BvcnRfZXZlbnRzID0gMDsKQEAgLTY2MywzICs3NDYsODIgQEAKIAkJc2NzaV9ob3N0X3B1dChscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKSk7CiAJa2ZyZWUodnBvcnRzKTsKIH0KKworCisvKioKKyAqIGxwZmNfdnBvcnRfcmVzZXRfc3RhdF9kYXRhOiBSZXNldCB0aGUgc3RhdGlzdGljYWwgZGF0YSBmb3IgdGhlIHZwb3J0LgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZwb3J0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgc3RhdGlzdGljYWwgZGF0YSBmb3IgdGhlIHZwb3J0LiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgd2l0aCB0aGUgaG9zdF9sb2NrIGhlbGQKKyAqKi8KK3ZvaWQKK2xwZmNfdnBvcnRfcmVzZXRfc3RhdF9kYXRhKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IE5VTEwsICpuZXh0X25kbHAgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobmRscC0+bGF0X2RhdGEpCisJCQltZW1zZXQobmRscC0+bGF0X2RhdGEsIDAsIExQRkNfTUFYX0JVQ0tFVF9DT1VOVCAqCisJCQkJc2l6ZW9mKHN0cnVjdCBscGZjX3Njc2ljbWRfYmt0KSk7CisJfQorfQorCisKKy8qKgorICogbHBmY19hbGxvY19idWNrZXQ6IEFsbG9jYXRlIGRhdGEgYnVmZmVyIHJlcXVpcmVkIGZvciBjb2xsZWN0aW5nCisgKiAgc3RhdGlzdGljYWwgZGF0YS4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgZGF0YSBidWZmZXIgcmVxdWlyZWQgZm9yIGFsbCB0aGUgRkMKKyAqIG5vZGVzIG9mIHRoZSB2cG9ydCB0byBjb2xsZWN0IHN0YXRpc3RpY2FsIGRhdGEuCisgKiovCit2b2lkCitscGZjX2FsbG9jX2J1Y2tldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMLCAqbmV4dF9uZGxwID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCisJCQljb250aW51ZTsKKworCQlrZnJlZShuZGxwLT5sYXRfZGF0YSk7CisJCW5kbHAtPmxhdF9kYXRhID0gTlVMTDsKKworCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUpIHsKKwkJCW5kbHAtPmxhdF9kYXRhID0ga2NhbGxvYyhMUEZDX01BWF9CVUNLRVRfQ09VTlQsCisJCQkJCSBzaXplb2Yoc3RydWN0IGxwZmNfc2NzaWNtZF9ia3QpLAorCQkJCQkgR0ZQX0FUT01JQyk7CisKKwkJCWlmICghbmRscC0+bGF0X2RhdGEpCisJCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19OT0RFLAorCQkJCQkiMDI4NyBscGZjX2FsbG9jX2J1Y2tldCBmYWlsZWQgdG8gIgorCQkJCQkiYWxsb2NhdGUgc3RhdGlzdGljYWwgZGF0YSBidWZmZXIgRElEICIKKwkJCQkJIjB4JXhcbiIsIG5kbHAtPm5scF9ESUQpOworCQl9CisJfQorfQorCisvKioKKyAqIGxwZmNfZnJlZV9idWNrZXQ6IEZyZWUgZGF0YSBidWZmZXIgcmVxdWlyZWQgZm9yIGNvbGxlY3RpbmcKKyAqICBzdGF0aXN0aWNhbCBkYXRhLgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZwb3J0IG9iamVjdC4KKyAqCisgKiBUaCBmdW5jdGlvbiBmcmVlcyBzdGF0aXN0aWNhbCBkYXRhIGJ1ZmZlciBvZiBhbGwgdGhlIEZDCisgKiBub2RlcyBvZiB0aGUgdnBvcnQuCisgKiovCit2b2lkCitscGZjX2ZyZWVfYnVja2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IE5VTEwsICpuZXh0X25kbHAgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSkKKwkJCWNvbnRpbnVlOworCisJCWtmcmVlKG5kbHAtPmxhdF9kYXRhKTsKKwkJbmRscC0+bGF0X2RhdGEgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuaAppbmRleCA5NmM0NDUzLi45MDgyODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5oCkBAIC0xMTIsNCArMTEyLDggQEAKIHZvaWQgbHBmY192cG9ydF9zZXRfc3RhdGUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAogCQkJICBlbnVtIGZjX3Zwb3J0X3N0YXRlIG5ld19zdGF0ZSk7CiAKK3ZvaWQgbHBmY192cG9ydF9yZXNldF9zdGF0X2RhdGEoc3RydWN0IGxwZmNfdnBvcnQgKik7Cit2b2lkIGxwZmNfYWxsb2NfYnVja2V0KHN0cnVjdCBscGZjX3Zwb3J0ICopOwordm9pZCBscGZjX2ZyZWVfYnVja2V0KHN0cnVjdCBscGZjX3Zwb3J0ICopOworCiAjZW5kaWYgLyogSF9MUEZDX1ZQT1JUICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCAwZGRmZTcxLi5lZDczMTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTEwMDYsNyArMTAwNiw2IEBACiAJfQogCiAJcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY3BvcnQpOwotCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggODNjODE5Mi4uZjI1ZjQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMjEwOCw3ICsyMTA4LDcgQEAKIAogc3RydWN0IHFsYV9tc2l4X2VudHJ5IHsKIAlpbnQgaGF2ZV9pcnE7Ci0JdWludDE2X3QgbXNpeF92ZWN0b3I7CisJdWludDMyX3QgbXNpeF92ZWN0b3I7CiAJdWludDE2X3QgbXNpeF9lbnRyeTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCBmYzRiZmE3Li5hNzZlZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC0xMTg3LDcgKzExODcsMTIgQEAKIAkJICAgIGNwLT5zZXJpYWxfbnVtYmVyLCBjb21wX3N0YXR1cywKIAkJICAgIGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSkpOwogCi0JCWNwLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCS8qCisJCSAqIFdlIGFyZSBnb2luZyB0byBoYXZlIHRoZSBmYyBjbGFzcyBibG9jayB0aGUgcnBvcnQKKwkJICogd2hpbGUgd2UgdHJ5IHRvIHJlY292ZXIgc28gaW5zdHJ1Y3QgdGhlIG1pZCBsYXllcgorCQkgKiB0byByZXF1ZXVlIHVudGlsIHRoZSBjbGFzcyBkZWNpZGVzIGhvdyB0byBoYW5kbGUgdGhpcy4KKwkJICovCisJCWNwLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfT05MSU5FKQogCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KGZjcG9ydC0+aGEsIGZjcG9ydCwgMSwgMSk7CiAJCWJyZWFrOwpAQCAtMTIxNCw3ICsxMjE5LDEyIEBACiAJCWJyZWFrOwogCiAJY2FzZSBDU19USU1FT1VUOgotCQljcC0+cmVzdWx0ID0gRElEX0JVU19CVVNZIDw8IDE2OworCQkvKgorCQkgKiBXZSBhcmUgZ29pbmcgdG8gaGF2ZSB0aGUgZmMgY2xhc3MgYmxvY2sgdGhlIHJwb3J0CisJCSAqIHdoaWxlIHdlIHRyeSB0byByZWNvdmVyIHNvIGluc3RydWN0IHRoZSBtaWQgbGF5ZXIKKwkJICogdG8gcmVxdWV1ZSB1bnRpbCB0aGUgY2xhc3MgZGVjaWRlcyBob3cgdG8gaGFuZGxlIHRoaXMuCisJCSAqLworCQljcC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAKIAkJaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkpIHsKIAkJCURFQlVHMihwcmludGsoS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDM0MzM0NDEuLjIxZGQxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0zOTQsMTAgKzM5NCw4IEBACiAJfQogCiAJLyogQ2xvc2Ugd2luZG93IG9uIGZjcG9ydC9ycG9ydCBzdGF0ZS10cmFuc2l0aW9uaW5nLiAqLwotCWlmIChmY3BvcnQtPmRycG9ydCkgewotCQljbWQtPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7Ci0JCWdvdG8gcWNfZmFpbF9jb21tYW5kOwotCX0KKwlpZiAoZmNwb3J0LT5kcnBvcnQpCisJCWdvdG8gcWNfdGFyZ2V0X2J1c3k7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19PTkxJTkUpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfREVWSUNFX0RFQUQgfHwKQEAgLTQwNSw3ICs0MDMsNyBAQAogCQkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJCWdvdG8gcWNfZmFpbF9jb21tYW5kOwogCQl9Ci0JCWdvdG8gcWNfaG9zdF9idXN5OworCQlnb3RvIHFjX3RhcmdldF9idXN5OwogCX0KIAogCXNwaW5fdW5sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTQyOCwxMCArNDI2LDExIEBACiAKIHFjX2hvc3RfYnVzeV9sb2NrOgogCXNwaW5fbG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLXFjX2hvc3RfYnVzeToKIAlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAorcWNfdGFyZ2V0X2J1c3k6CisJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKKwogcWNfZmFpbF9jb21tYW5kOgogCWRvbmUoY21kKTsKIApAQCAtNDYxLDEwICs0NjAsOCBAQAogCX0KIAogCS8qIENsb3NlIHdpbmRvdyBvbiBmY3BvcnQvcnBvcnQgc3RhdGUtdHJhbnNpdGlvbmluZy4gKi8KLQlpZiAoZmNwb3J0LT5kcnBvcnQpIHsKLQkJY21kLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OwotCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwotCX0KKwlpZiAoZmNwb3J0LT5kcnBvcnQpCisJCWdvdG8gcWMyNF90YXJnZXRfYnVzeTsKIAogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX09OTElORSkgewogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfREVBRCB8fApAQCAtNDcyLDcgKzQ2OSw3IEBACiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxYzI0X2ZhaWxfY29tbWFuZDsKIAkJfQotCQlnb3RvIHFjMjRfaG9zdF9idXN5OworCQlnb3RvIHFjMjRfdGFyZ2V0X2J1c3k7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtNDk1LDEwICs0OTIsMTEgQEAKIAogcWMyNF9ob3N0X2J1c3lfbG9jazoKIAlzcGluX2xvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwotCi1xYzI0X2hvc3RfYnVzeToKIAlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAorcWMyNF90YXJnZXRfYnVzeToKKwlyZXR1cm4gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOworCiBxYzI0X2ZhaWxfY29tbWFuZDoKIAlkb25lKGNtZCk7CiAKQEAgLTE1NjgsOSArMTU2Niw4IEBACiAJCQlnb3RvIHByb2JlX291dDsKIAl9CiAKLQlpZiAocGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldikpCi0JCWlmIChwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpKQotCQkJZ290byBwcm9iZV9vdXQ7CisJLyogVGhpcyBtYXkgZmFpbCBidXQgdGhhdCdzIG9rICovCisJcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKIAogCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2Moc2h0LCBzaXplb2Yoc2NzaV9xbGFfaG9zdF90KSk7CiAJaWYgKGhvc3QgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCmluZGV4IGE5MWE1N2MuLjc5OTEyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5jaGFubmVsLAogCQkJICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKSk7CiAKLQkJY21kLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCWNtZC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAKIAkJLyoKIAkJICogTWFyayBkZXZpY2UgbWlzc2luZyBzbyB0aGF0IHdlIHdvbid0IGNvbnRpbnVlIHRvIHNlbmQKQEAgLTI0Myw3ICsyNDMsNyBAQAogCQlpZiAoYXRvbWljX3JlYWQoJmRkYl9lbnRyeS0+c3RhdGUpID09IEREQl9TVEFURV9PTkxJTkUpCiAJCQlxbGE0eHh4X21hcmtfZGV2aWNlX21pc3NpbmcoaGEsIGRkYl9lbnRyeSk7CiAKLQkJY21kLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCWNtZC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAJCWJyZWFrOwogCiAJY2FzZSBTQ1NfUVVFVUVfRlVMTDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKaW5kZXggZGU4Mjc5YS4uZGI3ZWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKQEAgLTM1Myw3ICszNTMsNyBAQAogCQkgICAgICBoYS0+aG9zdF9ubywgZGRiX2VudHJ5LT5idXMsIGRkYl9lbnRyeS0+dGFyZ2V0LAogCQkgICAgICBkZGJfZW50cnktPmZ3X2RkYl9pbmRleCkpOwogCWlzY3NpX2Jsb2NrX3Nlc3Npb24oZGRiX2VudHJ5LT5zZXNzKTsKLQlpc2NzaV9jb25uX2Vycm9yKGRkYl9lbnRyeS0+Y29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwlpc2NzaV9jb25uX2Vycm9yX2V2ZW50KGRkYl9lbnRyeS0+Y29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcmIqIHFsYTR4eHhfZ2V0X25ld19zcmIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLApAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxY19mYWlsX2NvbW1hbmQ7CiAJCX0KLQkJZ290byBxY19ob3N0X2J1c3k7CisJCXJldHVybiBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k7CiAJfQogCiAJaWYgKHRlc3RfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCAyYWMzY2IyLi5mOGI3OWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTc1NCw4ICs3NTQsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAocnRuKSB7Ci0JCXNjc2lfcXVldWVfaW5zZXJ0KGNtZCwgKHJ0biA9PSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kpID8KLQkJCQkJCXJ0biA6IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kpOworCQlpZiAocnRuICE9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSAmJgorCQkgICAgcnRuICE9IFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSkKKwkJCXJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwkJc2NzaV9xdWV1ZV9pbnNlcnQoY21kLCBydG4pOworCiAJCVNDU0lfTE9HX01MUVVFVUUoMywKIAkJICAgIHByaW50aygicXVldWVjb21tYW5kIDogcmVxdWVzdCByZWplY3RlZFxuIikpOwogCX0KQEAgLTgwMCw2ICs4MDQsNyBAQAogdm9pZCBzY3NpX2ZpbmlzaF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJc3RydWN0IHNjc2lfZHJpdmVyICpkcnY7CiAJdW5zaWduZWQgaW50IGdvb2RfYnl0ZXM7CkBAIC04MTUsNiArODIwLDcgQEAKIAkgKiBYWFgoaGNoKTogV2hhdCBhYm91dCBsb2NraW5nPwogICAgICAgICAgKi8KICAgICAgICAgc2hvc3QtPmhvc3RfYmxvY2tlZCA9IDA7CisJc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQgPSAwOwogICAgICAgICBzZGV2LT5kZXZpY2VfYmxvY2tlZCA9IDA7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggZmVjZWZhMC4uOTRlZDI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xMDY1LDEwICsxMDY1LDEwIEBACiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsICp0Z3RyX3NjbWQsICpuZXh0OwotCXVuc2lnbmVkIGludCBpZDsKKwl1bnNpZ25lZCBpbnQgaWQgPSAwOwogCWludCBydG47CiAKLQlmb3IgKGlkID0gMDsgaWQgPD0gc2hvc3QtPm1heF9pZDsgaWQrKykgeworCWRvIHsKIAkJdGd0cl9zY21kID0gTlVMTDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShzY21kLCB3b3JrX3EsIGVoX2VudHJ5KSB7CiAJCQlpZiAoaWQgPT0gc2NtZF9pZChzY21kKSkgewpAQCAtMTA3Niw4ICsxMDc2LDE4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJaWYgKCF0Z3RyX3NjbWQpIHsKKwkJCS8qIG5vdCBvbmUgZXhhY3RseSBlcXVhbDsgZmluZCB0aGUgbmV4dCBoaWdoZXN0ICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjbWQsIHdvcmtfcSwgZWhfZW50cnkpIHsKKwkJCQlpZiAoc2NtZF9pZChzY21kKSA+IGlkICYmCisJCQkJICAgICghdGd0cl9zY21kIHx8CisJCQkJICAgICBzY21kX2lkKHRndHJfc2NtZCkgPiBzY21kX2lkKHNjbWQpKSkKKwkJCQkJCXRndHJfc2NtZCA9IHNjbWQ7CisJCQl9CisJCX0KIAkJaWYgKCF0Z3RyX3NjbWQpCi0JCQljb250aW51ZTsKKwkJCS8qIG5vIG1vcmUgY29tbWFuZHMsIHRoYXQncyBpdCAqLworCQkJYnJlYWs7CiAKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgcHJpbnRrKCIlczogU2VuZGluZyB0YXJnZXQgcmVzZXQgIgogCQkJCQkJICAidG8gdGFyZ2V0ICVkXG4iLApAQCAtMTA5Niw3ICsxMTA2LDggQEAKIAkJCQkJCQkgICIgZmFpbGVkIHRhcmdldDogIgogCQkJCQkJCSAgIiVkXG4iLAogCQkJCQkJCSAgY3VycmVudC0+Y29tbSwgaWQpKTsKLQl9CisJCWlkKys7CisJfSB3aGlsZShpZCAhPSAwKTsKIAogCXJldHVybiBsaXN0X2VtcHR5KHdvcmtfcSk7CiB9CkBAIC0xMjE5LDYgKzEyMzAsNDAgQEAKIH0KIAogLyoqCisgKiBzY3NpX25vcmV0cnlfY21kIC0gZGV0ZXJtaW50ZSBpZiBjb21tYW5kIHNob3VsZCBiZSBmYWlsZWQgZmFzdAorICogQHNjbWQ6CVNDU0kgY21kIHRvIGV4YW1pbmUuCisgKi8KK2ludCBzY3NpX25vcmV0cnlfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJc3dpdGNoIChob3N0X2J5dGUoc2NtZC0+cmVzdWx0KSkgeworCWNhc2UgRElEX09LOgorCQlicmVhazsKKwljYXNlIERJRF9CVVNfQlVTWToKKwkJcmV0dXJuIGJsa19mYWlsZmFzdF90cmFuc3BvcnQoc2NtZC0+cmVxdWVzdCk7CisJY2FzZSBESURfUEFSSVRZOgorCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X2RldihzY21kLT5yZXF1ZXN0KTsKKwljYXNlIERJRF9FUlJPUjoKKwkJaWYgKG1zZ19ieXRlKHNjbWQtPnJlc3VsdCkgPT0gQ09NTUFORF9DT01QTEVURSAmJgorCQkgICAgc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBSRVNFUlZBVElPTl9DT05GTElDVCkKKwkJCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIERJRF9TT0ZUX0VSUk9SOgorCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X2RyaXZlcihzY21kLT5yZXF1ZXN0KTsKKwl9CisKKwlzd2l0Y2ggKHN0YXR1c19ieXRlKHNjbWQtPnJlc3VsdCkpIHsKKwljYXNlIENIRUNLX0NPTkRJVElPTjoKKwkJLyoKKwkJICogYXNzdW1lIGNhbGxlciBoYXMgY2hlY2tlZCBzZW5zZSBhbmQgZGV0ZXJtaW50ZWQKKwkJICogdGhlIGNoZWNrIGNvbmRpdGlvbiB3YXMgcmV0cnlhYmxlLgorCQkgKi8KKwkJcmV0dXJuIGJsa19mYWlsZmFzdF9kZXYoc2NtZC0+cmVxdWVzdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogc2NzaV9kZWNpZGVfZGlzcG9zaXRpb24gLSBEaXNwb3NpdGlvbiBhIGNtZCBvbiByZXR1cm4gZnJvbSBMTEQuCiAgKiBAc2NtZDoJU0NTSSBjbWQgdG8gZXhhbWluZS4KICAqCkBAIC0xMjkwLDcgKzEzMzUsMjAgQEAKIAogCWNhc2UgRElEX1JFUVVFVUU6CiAJCXJldHVybiBBRERfVE9fTUxRVUVVRTsKLQorCWNhc2UgRElEX1RSQU5TUE9SVF9ESVNSVVBURUQ6CisJCS8qCisJCSAqIExMRC90cmFuc3BvcnQgd2FzIGRpc3J1cHRlZCBkdXJpbmcgcHJvY2Vzc2luZyBvZiB0aGUgSU8uCisJCSAqIFRoZSB0cmFuc3BvcnQgY2xhc3MgaXMgbm93IGJsb2NrZWQvYmxvY2tpbmcsCisJCSAqIGFuZCB0aGUgdHJhbnNwb3J0IHdpbGwgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgSU8KKwkJICogYmFzZWQgb24gaXRzIHRpbWVycyBhbmQgcmVjb3ZlcnkgY2FwYWJsaWxpdGllcy4KKwkJICovCisJCXJldHVybiBBRERfVE9fTUxRVUVVRTsKKwljYXNlIERJRF9UUkFOU1BPUlRfRkFJTEZBU1Q6CisJCS8qCisJCSAqIFRoZSB0cmFuc3BvcnQgZGVjaWRlZCB0byBmYWlsZmFzdCB0aGUgSU8gKG1vc3QgbGlrZWx5CisJCSAqIHRoZSBmYXN0IGlvIGZhaWwgdG1vIGZpcmVkKSwgc28gc2VuZCBJTyBkaXJlY3RseSB1cHdhcmRzLgorCQkgKi8KKwkJcmV0dXJuIFNVQ0NFU1M7CiAJY2FzZSBESURfRVJST1I6CiAJCWlmIChtc2dfYnl0ZShzY21kLT5yZXN1bHQpID09IENPTU1BTkRfQ09NUExFVEUgJiYKIAkJICAgIHN0YXR1c19ieXRlKHNjbWQtPnJlc3VsdCkgPT0gUkVTRVJWQVRJT05fQ09ORkxJQ1QpCkBAIC0xMzgzLDcgKzE0NDEsNyBAQAogCSAqIGV2ZW4gaWYgdGhlIHJlcXVlc3QgaXMgbWFya2VkIGZhc3QgZmFpbCwgd2Ugc3RpbGwgcmVxdWV1ZQogCSAqIGZvciBxdWV1ZSBjb25nZXN0aW9uIGNvbmRpdGlvbnMgKFFVRVVFX0ZVTEwgb3IgQlVTWSkgKi8KIAlpZiAoKCsrc2NtZC0+cmV0cmllcykgPD0gc2NtZC0+YWxsb3dlZAotCSAgICAmJiAhYmxrX25vcmV0cnlfcmVxdWVzdChzY21kLT5yZXF1ZXN0KSkgeworCSAgICAmJiAhc2NzaV9ub3JldHJ5X2NtZChzY21kKSkgewogCQlyZXR1cm4gTkVFRFNfUkVUUlk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTE1MDgsNyArMTU2Niw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjbWQsIG5leHQsIGRvbmVfcSwgZWhfZW50cnkpIHsKIAkJbGlzdF9kZWxfaW5pdCgmc2NtZC0+ZWhfZW50cnkpOwogCQlpZiAoc2NzaV9kZXZpY2Vfb25saW5lKHNjbWQtPmRldmljZSkgJiYKLQkJICAgICFibGtfbm9yZXRyeV9yZXF1ZXN0KHNjbWQtPnJlcXVlc3QpICYmCisJCSAgICAhc2NzaV9ub3JldHJ5X2NtZChzY21kKSAmJgogCQkgICAgKCsrc2NtZC0+cmV0cmllcyA8PSBzY21kLT5hbGxvd2VkKSkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgcHJpbnRrKCIlczogZmx1c2giCiAJCQkJCQkJICAiIHJldHJ5IGNtZDogJXBcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwppbmRleCAyOGIxOWVmLi5kYzFjZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogCWNhc2UgU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQ6CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJCXJldHVybiAtRUFDQ0VTOwotCQlyZXR1cm4gc2dfc2NzaV9pb2N0bChOVUxMLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBOVUxMLCBhcmcpOworCQlyZXR1cm4gc2dfc2NzaV9pb2N0bChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBOVUxMLCAwLCBhcmcpOwogCWNhc2UgU0NTSV9JT0NUTF9ET09STE9DSzoKIAkJcmV0dXJuIHNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKHNkZXYsIFNDU0lfUkVNT1ZBTF9QUkVWRU5UKTsKIAljYXNlIFNDU0lfSU9DVExfRE9PUlVOTE9DSzoKQEAgLTI3NywxNCArMjc3LDE0IEBACiAgKiBAZmlscDogZWl0aGVyIE5VTEwgb3IgYSAmc3RydWN0IGZpbGUgd2hpY2ggbXVzdCBoYXZlIHRoZSBPX05PTkJMT0NLIGZsYWcuCiAgKi8KIGludCBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBjbWQsCi0JCQkgICAgdm9pZCBfX3VzZXIgKmFyZywgc3RydWN0IGZpbGUgKmZpbHApCisJCQkgICAgdm9pZCBfX3VzZXIgKmFyZywgaW50IG5kZWxheSkKIHsKIAlpbnQgdmFsLCByZXN1bHQ7CiAKIAkvKiBUaGUgZmlyc3Qgc2V0IG9mIGlvY3RzIG1heSBiZSBleGVjdXRlZCBldmVuIGlmIHdlJ3JlIGRvaW5nCiAJICogZXJyb3IgcHJvY2Vzc2luZywgYXMgbG9uZyBhcyB0aGUgZGV2aWNlIHdhcyBvcGVuZWQKIAkgKiBub24tYmxvY2tpbmcgKi8KLQlpZiAoZmlscCAmJiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7CisJaWYgKG5kZWxheSkgewogCQlpZiAoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNkZXYtPmhvc3QpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIGlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA5OGVlNTVjLi5mNWQzYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtMTE0LDYgKzExNCw3IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlID0gY21kLT5kZXZpY2U7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoZGV2aWNlKTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRldmljZS0+cmVxdWVzdF9xdWV1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMzMsMTAgKzEzNCwxNyBAQAogCSAqIGlmIGEgY29tbWFuZCBpcyByZXF1ZXVlZCB3aXRoIG5vIG90aGVyIGNvbW1hbmRzIG91dHN0YW5kaW5nCiAJICogZWl0aGVyIGZvciB0aGUgZGV2aWNlIG9yIGZvciB0aGUgaG9zdC4KIAkgKi8KLQlpZiAocmVhc29uID09IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kpCisJc3dpdGNoIChyZWFzb24pIHsKKwljYXNlIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k6CiAJCWhvc3QtPmhvc3RfYmxvY2tlZCA9IGhvc3QtPm1heF9ob3N0X2Jsb2NrZWQ7Ci0JZWxzZSBpZiAocmVhc29uID09IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSkKKwkJYnJlYWs7CisJY2FzZSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k6CiAJCWRldmljZS0+ZGV2aWNlX2Jsb2NrZWQgPSBkZXZpY2UtPm1heF9kZXZpY2VfYmxvY2tlZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k6CisJCXN0YXJnZXQtPnRhcmdldF9ibG9ja2VkID0gc3RhcmdldC0+bWF4X3RhcmdldF9ibG9ja2VkOworCQlicmVhazsKKwl9CiAKIAkvKgogCSAqIERlY3JlbWVudCB0aGUgY291bnRlcnMsIHNpbmNlIHRoZXNlIGNvbW1hbmRzIGFyZSBubyBsb25nZXIKQEAgLTQ2MCwxMCArNDY4LDEyIEBACiB2b2lkIHNjc2lfZGV2aWNlX3VuYnVzeShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJc2hvc3QtPmhvc3RfYnVzeS0tOworCXN0YXJnZXQtPnRhcmdldF9idXN5LS07CiAJaWYgKHVubGlrZWx5KHNjc2lfaG9zdF9pbl9yZWNvdmVyeShzaG9zdCkgJiYKIAkJICAgICAoc2hvc3QtPmhvc3RfZmFpbGVkIHx8IHNob3N0LT5ob3N0X2VoX3NjaGVkdWxlZCkpKQogCQlzY3NpX2VoX3dha2V1cChzaG9zdCk7CkBAIC01MTksNiArNTI5LDMwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2aWNlX2lzX2J1c3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWlmIChzZGV2LT5kZXZpY2VfYnVzeSA+PSBzZGV2LT5xdWV1ZV9kZXB0aCB8fCBzZGV2LT5kZXZpY2VfYmxvY2tlZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2NzaV90YXJnZXRfaXNfYnVzeShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJcmV0dXJuICgoc3RhcmdldC0+Y2FuX3F1ZXVlID4gMCAmJgorCQkgc3RhcmdldC0+dGFyZ2V0X2J1c3kgPj0gc3RhcmdldC0+Y2FuX3F1ZXVlKSB8fAorCQkgc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzY3NpX2hvc3RfaXNfYnVzeShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlpZiAoKHNob3N0LT5jYW5fcXVldWUgPiAwICYmIHNob3N0LT5ob3N0X2J1c3kgPj0gc2hvc3QtPmNhbl9xdWV1ZSkgfHwKKwkgICAgc2hvc3QtPmhvc3RfYmxvY2tlZCB8fCBzaG9zdC0+aG9zdF9zZWxmX2Jsb2NrZWQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBGdW5jdGlvbjoJc2NzaV9ydW5fcXVldWUoKQogICoKQEAgLTUzMyw3ICs1NjcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzdGFydmVkX2hlYWQgPSBOVUxMLCAqc2RldiA9IHEtPnF1ZXVlZGF0YTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNTQxLDExICs1NzUsNyBAQAogCQlzY3NpX3NpbmdsZV9sdW5fcnVuKHNkZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmc2hvc3QtPnN0YXJ2ZWRfbGlzdCkgJiYKLQkgICAgICAgIXNob3N0LT5ob3N0X2Jsb2NrZWQgJiYgIXNob3N0LT5ob3N0X3NlbGZfYmxvY2tlZCAmJgotCQkhKChzaG9zdC0+Y2FuX3F1ZXVlID4gMCkgJiYKLQkJICAoc2hvc3QtPmhvc3RfYnVzeSA+PSBzaG9zdC0+Y2FuX3F1ZXVlKSkpIHsKLQorCXdoaWxlICghbGlzdF9lbXB0eSgmc2hvc3QtPnN0YXJ2ZWRfbGlzdCkgJiYgIXNjc2lfaG9zdF9pc19idXN5KHNob3N0KSkgewogCQlpbnQgZmxhZ3NldDsKIAogCQkvKgpAQCAtNTYwLDYgKzU5MCwyMSBAQAogCQkgKi8KIAkJc2RldiA9IGxpc3RfZW50cnkoc2hvc3QtPnN0YXJ2ZWRfbGlzdC5uZXh0LAogCQkJCQkgIHN0cnVjdCBzY3NpX2RldmljZSwgc3RhcnZlZF9lbnRyeSk7CisJCS8qCisJCSAqIFRoZSAqcXVldWVfcmVhZHkgZnVuY3Rpb25zIGNhbiBhZGQgYSBkZXZpY2UgYmFjayBvbnRvIHRoZQorCQkgKiBzdGFydmVkIGxpc3QncyB0YWlsLCBzbyB3ZSBtdXN0IGNoZWNrIGZvciBhIGluZmluaXRlIGxvb3AuCisJCSAqLworCQlpZiAoc2RldiA9PSBzdGFydmVkX2hlYWQpCisJCQlicmVhazsKKwkJaWYgKCFzdGFydmVkX2hlYWQpCisJCQlzdGFydmVkX2hlYWQgPSBzZGV2OworCisJCWlmIChzY3NpX3RhcmdldF9pc19idXN5KHNjc2lfdGFyZ2V0KHNkZXYpKSkgeworCQkJbGlzdF9tb3ZlX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgICZzaG9zdC0+c3RhcnZlZF9saXN0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CiAJCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwogCkBAIC01NzUsMTMgKzYyMCw2IEBACiAJCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCiAJCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKLQkJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkpCi0JCQkvKgotCQkJICogc2RldiBsb3N0IGEgcmFjZSwgYW5kIHdhcyBwdXQgYmFjayBvbiB0aGUKLQkJCSAqIHN0YXJ2ZWQgbGlzdC4gVGhpcyBpcyB1bmxpa2VseSBidXQgd2l0aG91dCB0aGlzCi0JCQkgKiBpbiB0aGVvcnkgd2UgY291bGQgbG9vcCBmb3JldmVyLgotCQkJICovCi0JCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKQEAgLTY4MSw3ICs3MTksNyBAQAogCQkJbGVmdG92ZXIgPSByZXEtPmRhdGFfbGVuOwogCiAJCS8qIGtpbGwgcmVtYWluZGVyIGlmIG5vIHJldHJ5cyAqLwotCQlpZiAoZXJyb3IgJiYgYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQorCQlpZiAoZXJyb3IgJiYgc2NzaV9ub3JldHJ5X2NtZChjbWQpKQogCQkJYmxrX2VuZF9yZXF1ZXN0KHJlcSwgZXJyb3IsIGxlZnRvdmVyKTsKIAkJZWxzZSB7CiAJCQlpZiAocmVxdWV1ZSkgewpAQCAtMTMyMyw4ICsxMzYxLDYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2X3F1ZXVlX3JlYWR5KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJCSAgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCWlmIChzZGV2LT5kZXZpY2VfYnVzeSA+PSBzZGV2LT5xdWV1ZV9kZXB0aCkKLQkJcmV0dXJuIDA7CiAJaWYgKHNkZXYtPmRldmljZV9idXN5ID09IDAgJiYgc2Rldi0+ZGV2aWNlX2Jsb2NrZWQpIHsKIAkJLyoKIAkJICogdW5ibG9jayBhZnRlciBkZXZpY2VfYmxvY2tlZCBpdGVyYXRlcyB0byB6ZXJvCkBAIC0xMzM4LDEyICsxMzc0LDU4IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlpZiAoc2Rldi0+ZGV2aWNlX2Jsb2NrZWQpCisJaWYgKHNjc2lfZGV2aWNlX2lzX2J1c3koc2RldikpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CiB9CiAKKworLyoKKyAqIHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5OiBjaGVja3MgaWYgdGhlcmUgd2UgY2FuIHNlbmQgY29tbWFuZHMgdG8gdGFyZ2V0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugb24gc3RhcmdldCB0byBjaGVjay4KKyAqCisgKiBDYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJCQkgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisKKwlpZiAoc3RhcmdldC0+c2luZ2xlX2x1bikgeworCQlpZiAoc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgJiYKKwkJICAgIHN0YXJnZXQtPnN0YXJnZXRfc2Rldl91c2VyICE9IHNkZXYpCisJCQlyZXR1cm4gMDsKKwkJc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgPSBzZGV2OworCX0KKworCWlmIChzdGFyZ2V0LT50YXJnZXRfYnVzeSA9PSAwICYmIHN0YXJnZXQtPnRhcmdldF9ibG9ja2VkKSB7CisJCS8qCisJCSAqIHVuYmxvY2sgYWZ0ZXIgdGFyZ2V0X2Jsb2NrZWQgaXRlcmF0ZXMgdG8gemVybworCQkgKi8KKwkJaWYgKC0tc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQgPT0gMCkgeworCQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkJCSAidW5ibG9ja2luZyB0YXJnZXQgYXQgemVybyBkZXB0aFxuIikpOworCQl9IGVsc2UgeworCQkJYmxrX3BsdWdfZGV2aWNlKHNkZXYtPnJlcXVlc3RfcXVldWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoc2NzaV90YXJnZXRfaXNfYnVzeShzdGFyZ2V0KSkgeworCQlpZiAobGlzdF9lbXB0eSgmc2Rldi0+c3RhcnZlZF9lbnRyeSkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgJnNob3N0LT5zdGFydmVkX2xpc3QpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBXZSdyZSBPSyB0byBwcm9jZXNzIHRoZSBjb21tYW5kLCBzbyB3ZSBjYW4ndCBiZSBzdGFydmVkICovCisJaWYgKCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkKKwkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBzY3NpX2hvc3RfcXVldWVfcmVhZHk6IGlmIHdlIGNhbiBzZW5kIHJlcXVlc3RzIHRvIHNob3N0LCByZXR1cm4gMSBlbHNlCiAgKiByZXR1cm4gMC4gV2UgbXVzdCBlbmQgdXAgcnVubmluZyB0aGUgcXVldWUgYWdhaW4gd2hlbmV2ZXIgMCBpcwpAQCAtMTM2OSw4ICsxNDUxLDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCWlmICgoc2hvc3QtPmNhbl9xdWV1ZSA+IDAgJiYgc2hvc3QtPmhvc3RfYnVzeSA+PSBzaG9zdC0+Y2FuX3F1ZXVlKSB8fAotCSAgICBzaG9zdC0+aG9zdF9ibG9ja2VkIHx8IHNob3N0LT5ob3N0X3NlbGZfYmxvY2tlZCkgeworCWlmIChzY3NpX2hvc3RfaXNfYnVzeShzaG9zdCkpIHsKIAkJaWYgKGxpc3RfZW1wdHkoJnNkZXYtPnN0YXJ2ZWRfZW50cnkpKQogCQkJbGlzdF9hZGRfdGFpbCgmc2Rldi0+c3RhcnZlZF9lbnRyeSwgJnNob3N0LT5zdGFydmVkX2xpc3QpOwogCQlyZXR1cm4gMDsKQEAgLTEzODQsMTIgKzE0NjUsNDQgQEAKIH0KIAogLyoKKyAqIEJ1c3kgc3RhdGUgZXhwb3J0aW5nIGZ1bmN0aW9uIGZvciByZXF1ZXN0IHN0YWNraW5nIGRyaXZlcnMuCisgKgorICogRm9yIGVmZmljaWVuY3ksIG5vIGxvY2sgaXMgdGFrZW4gdG8gY2hlY2sgdGhlIGJ1c3kgc3RhdGUgb2YKKyAqIHNob3N0L3N0YXJnZXQvc2Rldiwgc2luY2UgdGhlIHJldHVybmVkIHZhbHVlIGlzIG5vdCBndWFyYW50ZWVkIGFuZAorICogbWF5IGJlIGNoYW5nZWQgYWZ0ZXIgcmVxdWVzdCBzdGFja2luZyBkcml2ZXJzIGNhbGwgdGhlIGZ1bmN0aW9uLAorICogcmVnYXJkbGVzcyBvZiB0YWtpbmcgbG9jayBvciBub3QuCisgKgorICogV2hlbiBzY3NpIGNhbid0IGRpc3BhdGNoIEkvT3MgYW55bW9yZSBhbmQgbmVlZHMgdG8ga2lsbCBJL09zCisgKiAoZS5nLiAhc2RldiksIHNjc2kgbmVlZHMgdG8gcmV0dXJuICdub3QgYnVzeScuCisgKiBPdGhlcndpc2UsIHJlcXVlc3Qgc3RhY2tpbmcgZHJpdmVycyBtYXkgaG9sZCByZXF1ZXN0cyBmb3JldmVyLgorICovCitzdGF0aWMgaW50IHNjc2lfbGxkX2J1c3koc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gcS0+cXVldWVkYXRhOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKKworCWlmICghc2RldikKKwkJcmV0dXJuIDA7CisKKwlzaG9zdCA9IHNkZXYtPmhvc3Q7CisJc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOworCisJaWYgKHNjc2lfaG9zdF9pbl9yZWNvdmVyeShzaG9zdCkgfHwgc2NzaV9ob3N0X2lzX2J1c3koc2hvc3QpIHx8CisJICAgIHNjc2lfdGFyZ2V0X2lzX2J1c3koc3RhcmdldCkgfHwgc2NzaV9kZXZpY2VfaXNfYnVzeShzZGV2KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIEtpbGwgYSByZXF1ZXN0IGZvciBhIGRlYWQgZGV2aWNlCiAgKi8KIHN0YXRpYyB2b2lkIHNjc2lfa2lsbF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHJlcS0+c3BlY2lhbDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAKIAlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJlcSk7CkBAIC0xNDEzLDYgKzE1MjYsNyBAQAogCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKIAlzaG9zdC0+aG9zdF9idXN5Kys7CisJc3RhcmdldC0+dGFyZ2V0X2J1c3krKzsKIAlzcGluX3VubG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKIAlzcGluX2xvY2soc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CiAKQEAgLTE1NTAsMTQgKzE2NjQsMTMgQEAKIAkJCWdvdG8gbm90X3JlYWR5OwogCQl9CiAKKwkJaWYgKCFzY3NpX3RhcmdldF9xdWV1ZV9yZWFkeShzaG9zdCwgc2RldikpCisJCQlnb3RvIG5vdF9yZWFkeTsKKwogCQlpZiAoIXNjc2lfaG9zdF9xdWV1ZV9yZWFkeShxLCBzaG9zdCwgc2RldikpCiAJCQlnb3RvIG5vdF9yZWFkeTsKLQkJaWYgKHNjc2lfdGFyZ2V0KHNkZXYpLT5zaW5nbGVfbHVuKSB7Ci0JCQlpZiAoc2NzaV90YXJnZXQoc2RldiktPnN0YXJnZXRfc2Rldl91c2VyICYmCi0JCQkgICAgc2NzaV90YXJnZXQoc2RldiktPnN0YXJnZXRfc2Rldl91c2VyICE9IHNkZXYpCi0JCQkJZ290byBub3RfcmVhZHk7Ci0JCQlzY3NpX3RhcmdldChzZGV2KS0+c3RhcmdldF9zZGV2X3VzZXIgPSBzZGV2OwotCQl9CisKKwkJc2NzaV90YXJnZXQoc2RldiktPnRhcmdldF9idXN5Kys7CiAJCXNob3N0LT5ob3N0X2J1c3krKzsKIAogCQkvKgpAQCAtMTY4NSw2ICsxNzk4LDcgQEAKIAlibGtfcXVldWVfcHJlcF9ycShxLCBzY3NpX3ByZXBfZm4pOwogCWJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUocSwgc2NzaV9zb2Z0aXJxX2RvbmUpOwogCWJsa19xdWV1ZV9ycV90aW1lZF9vdXQocSwgc2NzaV90aW1lc19vdXQpOworCWJsa19xdWV1ZV9sbGRfYnVzeShxLCBzY3NpX2xsZF9idXN5KTsKIAlyZXR1cm4gcTsKIH0KIApAQCAtMjAzMywyMiArMjE0NywyMSBAQAogCWRvIHsKIAkJcmVzdWx0ID0gc2NzaV9leGVjdXRlX3JlcShzZGV2LCBjbWQsIERNQV9OT05FLCBOVUxMLCAwLCBzc2hkciwKIAkJCQkJICB0aW1lb3V0LCByZXRyaWVzKTsKLQl9IHdoaWxlICgoZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9TRU5TRSkgJiYKLQkJIHNzaGRyICYmIHNzaGRyLT5zZW5zZV9rZXkgPT0gVU5JVF9BVFRFTlRJT04gJiYKLQkJIC0tcmV0cmllcyk7CisJCWlmIChzZGV2LT5yZW1vdmFibGUgJiYgc2NzaV9zZW5zZV92YWxpZChzc2hkcikgJiYKKwkJICAgIHNzaGRyLT5zZW5zZV9rZXkgPT0gVU5JVF9BVFRFTlRJT04pCisJCQlzZGV2LT5jaGFuZ2VkID0gMTsKKwl9IHdoaWxlIChzY3NpX3NlbnNlX3ZhbGlkKHNzaGRyKSAmJgorCQkgc3NoZHItPnNlbnNlX2tleSA9PSBVTklUX0FUVEVOVElPTiAmJiAtLXJldHJpZXMpOwogCiAJaWYgKCFzc2hkcikKIAkJLyogY291bGQgbm90IGFsbG9jYXRlIHNlbnNlIGJ1ZmZlciwgc28gY2FuJ3QgcHJvY2VzcyBpdCAqLwogCQlyZXR1cm4gcmVzdWx0OwogCi0JaWYgKChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKSAmJiBzZGV2LT5yZW1vdmFibGUpIHsKLQotCQlpZiAoKHNjc2lfc2Vuc2VfdmFsaWQoc3NoZHIpKSAmJgotCQkgICAgKChzc2hkci0+c2Vuc2Vfa2V5ID09IFVOSVRfQVRURU5USU9OKSB8fAotCQkgICAgIChzc2hkci0+c2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkpKSB7Ci0JCQlzZGV2LT5jaGFuZ2VkID0gMTsKLQkJCXJlc3VsdCA9IDA7Ci0JCX0KKwlpZiAoc2Rldi0+cmVtb3ZhYmxlICYmIHNjc2lfc2Vuc2VfdmFsaWQoc3NoZHIpICYmCisJICAgIChzc2hkci0+c2Vuc2Vfa2V5ID09IFVOSVRfQVRURU5USU9OIHx8CisJICAgICBzc2hkci0+c2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkpIHsKKwkJc2Rldi0+Y2hhbmdlZCA9IDE7CisJCXJlc3VsdCA9IDA7CiAJfQogCWlmICghc3NoZHJfZXh0ZXJuYWwpCiAJCWtmcmVlKHNzaGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX25ldGxpbmsuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX25ldGxpbmsuYwppbmRleCBiMzdlMTMzLi43MjNmZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9uZXRsaW5rLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbmV0bGluay5jCkBAIC0yMDUsMTYgKzIwNSwxMyBAQAogfTsKIAogCi0vKioKKy8qCiAgKiBHRU5FUklDIFNDU0kgdHJhbnNwb3J0IHJlY2VpdmUgYW5kIGV2ZW50IGhhbmRsZXJzCi0gKiovCisgKi8KIAogLyoqCi0gKiBzY3NpX2dlbmVyaWNfbXNnX2hhbmRsZXIgLSByZWNlaXZlIG1lc3NhZ2UgaGFuZGxlciBmb3IgR0VORVJJQyB0cmFuc3BvcnQKLSAqIAkJCSBtZXNzYWdlcwotICoKKyAqIHNjc2lfZ2VuZXJpY19tc2dfaGFuZGxlciAtIHJlY2VpdmUgbWVzc2FnZSBoYW5kbGVyIGZvciBHRU5FUklDIHRyYW5zcG9ydCBtZXNzYWdlcwogICogQHNrYjoJCXNvY2tldCByZWNlaXZlIGJ1ZmZlcgotICoKICAqKi8KIHN0YXRpYyBpbnQKIHNjc2lfZ2VuZXJpY19tc2dfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCmluZGV4IDZjZGRkNWQuLmUxODUwOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAorKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKQEAgLTU5LDYgKzU5LDcgQEAKIAkJCXN0cnVjdCBsaXN0X2hlYWQgKmRvbmVfcSk7CiBpbnQgc2NzaV9laF9nZXRfc2Vuc2Uoc3RydWN0IGxpc3RfaGVhZCAqd29ya19xLAogCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpOworaW50IHNjc2lfbm9yZXRyeV9jbWQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCk7CiAKIC8qIHNjc2lfbGliLmMgKi8KIGV4dGVybiBpbnQgc2NzaV9tYXliZV91bmJsb2NrX2hvc3Qoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCAzMzQ4NjJlLi5iMTRkYzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC00MTksNiArNDE5LDcgQEAKIAlkZXYtPnR5cGUgPSAmc2NzaV90YXJnZXRfdHlwZTsKIAlzdGFyZ2V0LT5pZCA9IGlkOwogCXN0YXJnZXQtPmNoYW5uZWwgPSBjaGFubmVsOworCXN0YXJnZXQtPmNhbl9xdWV1ZSA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJnN0YXJnZXQtPnNpYmxpbmdzKTsKIAlJTklUX0xJU1RfSEVBRCgmc3RhcmdldC0+ZGV2aWNlcyk7CiAJc3RhcmdldC0+c3RhdGUgPSBTVEFSR0VUX0NSRUFURUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IGQ1Zjc2NTMuLjFlNzFhYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0yMTMzLDggKzIxMzMsNyBAQAogCVNFVFVQX1BSSVZBVEVfUlBPUlRfQVRUUklCVVRFX1JEKHJvbGVzKTsKIAlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SRChwb3J0X3N0YXRlKTsKIAlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SRChzY3NpX3RhcmdldF9pZCk7Ci0JaWYgKGZ0LT50ZXJtaW5hdGVfcnBvcnRfaW8pCi0JCVNFVFVQX1BSSVZBVEVfUlBPUlRfQVRUUklCVVRFX1JXKGZhc3RfaW9fZmFpbF90bW8pOworCVNFVFVQX1BSSVZBVEVfUlBPUlRfQVRUUklCVVRFX1JXKGZhc3RfaW9fZmFpbF90bW8pOwogCiAJQlVHX09OKGNvdW50ID4gRkNfUlBPUlRfTlVNX0FUVFJTKTsKIApAQCAtMjMyOCw2ICsyMzI3LDIyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGZjX3JlbW92ZV9ob3N0KTsKIAorc3RhdGljIHZvaWQgZmNfdGVybWluYXRlX3Jwb3J0X2lvKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CisJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOworCisJLyogSW52b2x2ZSB0aGUgTExERCBpZiBwb3NzaWJsZSB0byB0ZXJtaW5hdGUgYWxsIGlvIG9uIHRoZSBycG9ydC4gKi8KKwlpZiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKQorCQlpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOworCisJLyoKKwkgKiBtdXN0IHVuYmxvY2sgdG8gZmx1c2ggcXVldWVkIElPLiBUaGUgY2FsbGVyIHdpbGwgaGF2ZSBzZXQKKwkgKiB0aGUgcG9ydF9zdGF0ZSBvciBmbGFncywgc28gdGhhdCBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeSB3aWxsCisJICogZmFpbCBJTy4KKwkgKi8KKwlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKK30KIAogLyoqCiAgKiBmY19zdGFyZ2V0X2RlbGV0ZSAtIGNhbGxlZCB0byBkZWxldGUgdGhlIHNjc2kgZGVjZW5kZW50cyBvZiBhbiBycG9ydApAQCAtMjM0MCwxMyArMjM1NSw4IEBACiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNfcnBvcnQsIHN0Z3RfZGVsZXRlX3dvcmspOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOwotCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAotCS8qIEludm9sdmUgdGhlIExMREQgaWYgcG9zc2libGUgdG8gdGVybWluYXRlIGFsbCBpbyBvbiB0aGUgcnBvcnQuICovCi0JaWYgKGktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbykKLQkJaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKLQorCWZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CiAJc2NzaV9yZW1vdmVfdGFyZ2V0KCZycG9ydC0+ZGV2KTsKIH0KIApAQCAtMjM3MiwxMCArMjM4Miw3IEBACiAJaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX1NDQU5fUEVORElORykKIAkJc2NzaV9mbHVzaF93b3JrKHNob3N0KTsKIAotCS8qIGludm9sdmUgdGhlIExMREQgdG8gdGVybWluYXRlIGFsbCBwZW5kaW5nIGkvbyAqLwotCWlmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pCi0JCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7Ci0KKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogCS8qCiAJICogQ2FuY2VsIGFueSBvdXRzdGFuZGluZyB0aW1lcnMuIFRoZXNlIHNob3VsZCByZWFsbHkgZXhpc3QKIAkgKiBvbmx5IHdoZW4gcm1tb2QnaW5nIHRoZSBMTEREIGFuZCB3ZSdyZSBhc2tpbmcgZm9yCkBAIC0yNjM5LDcgKzI2NDYsOCBAQAogCiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCi0JCQkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CisJCQkJcnBvcnQtPmZsYWdzICY9IH4oRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUIHwKKwkJCQkJCSAgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HKTsKIAogCQkJCS8qIGlmIHRhcmdldCwgaW5pdGlhdGUgYSBzY2FuICovCiAJCQkJaWYgKHJwb3J0LT5zY3NpX3RhcmdldF9pZCAhPSAtMSkgewpAQCAtMjcwMiw2ICsyNzEwLDcgQEAKIAkJCXJwb3J0LT5wb3J0X2lkID0gaWRzLT5wb3J0X2lkOwogCQkJcnBvcnQtPnJvbGVzID0gaWRzLT5yb2xlczsKIAkJCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX09OTElORTsKKwkJCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUOwogCiAJCQlpZiAoZmNpLT5mLT5kZF9mY3Jwb3J0X3NpemUpCiAJCQkJbWVtc2V0KHJwb3J0LT5kZF9kYXRhLCAwLApAQCAtMjc4NCw3ICsyNzkzLDYgQEAKIGZjX3JlbW90ZV9wb3J0X2RlbGV0ZShzdHJ1Y3QgZmNfcnBvcnQgICpycG9ydCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAJaW50IHRpbWVvdXQgPSBycG9ydC0+ZGV2X2xvc3NfdG1vOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI4MzAsNyArMjgzOCw3IEBACiAKIAkvKiBzZWUgaWYgd2UgbmVlZCB0byBraWxsIGlvIGZhc3RlciB0aGFuIHdhaXRpbmcgZm9yIGRldmljZSBsb3NzICovCiAJaWYgKChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyAhPSAtMSkgJiYKLQkgICAgKHJwb3J0LT5mYXN0X2lvX2ZhaWxfdG1vIDwgdGltZW91dCkgJiYgKGktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbykpCisJICAgIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA8IHRpbWVvdXQpKQogCQlmY19xdWV1ZV9kZXZsb3NzX3dvcmsoc2hvc3QsICZycG9ydC0+ZmFpbF9pb193b3JrLAogCQkJCQlycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyAqIEhaKTsKIApAQCAtMjkwNiw3ICsyOTE0LDggQEAKIAkJCWZjX2ZsdXNoX2Rldmxvc3Moc2hvc3QpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CisJCXJwb3J0LT5mbGFncyAmPSB+KEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVCB8CisJCQkJICBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCQkvKiBlbnN1cmUgYW55IHN0Z3QgZGVsZXRlIGZ1bmN0aW9ucyBhcmUgZG9uZSAqLwpAQCAtMzAwMSw2ICszMDEwLDcgQEAKIAlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBGQ19DT1NfVU5TUEVDSUZJRUQ7CiAJcnBvcnQtPnJvbGVzID0gRkNfUE9SVF9ST0xFX1VOS05PV047CiAJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfTk9UUFJFU0VOVDsKKwlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVDsKIAogCS8qIHJlbW92ZSB0aGUgaWRlbnRpZmllcnMgdGhhdCBhcmVuJ3QgdXNlZCBpbiB0aGUgY29uc2lzdGluZyBiaW5kaW5nICovCiAJc3dpdGNoIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUpIHsKQEAgLTMwNDMsMTMgKzMwNTMsMTIgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydCwgZmFpbF9pb193b3JrLndvcmspOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOwotCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAogCWlmIChycG9ydC0+cG9ydF9zdGF0ZSAhPSBGQ19QT1JUU1RBVEVfQkxPQ0tFRCkKIAkJcmV0dXJuOwogCi0JaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKKwlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUOworCWZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwppbmRleCAwY2U1ZjdjLi40YTgwM2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiBzaG93X2VwX2hhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCA9IGlzY3NpX2Rldl90b19lbmRwb2ludChkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBlcC0+aWQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVwLT5pZCk7CiB9CiBzdGF0aWMgSVNDU0lfQVRUUihlcCwgaGFuZGxlLCBTX0lSVUdPLCBzaG93X2VwX2hhbmRsZSwgTlVMTCk7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQAogc3RhdGljIGludCBpc2NzaV9tYXRjaF9lcGlkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwID0gaXNjc2lfZGV2X3RvX2VuZHBvaW50KGRldik7Ci0JdW5zaWduZWQgaW50ICplcGlkID0gKHVuc2lnbmVkIGludCAqKSBkYXRhOworCXVpbnQ2NF90ICplcGlkID0gKHVpbnQ2NF90ICopIGRhdGE7CiAKIAlyZXR1cm4gKmVwaWQgPT0gZXAtPmlkOwogfQpAQCAtMTY2LDcgKzE2Niw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7Ci0JdW5zaWduZWQgaW50IGlkOworCXVpbnQ2NF90IGlkOwogCWludCBlcnI7CiAKIAlmb3IgKGlkID0gMTsgaWQgPCBJU0NTSV9NQVhfRVBJRDsgaWQrKykgewpAQCAtMTg3LDcgKzE4Nyw4IEBACiAKIAllcC0+aWQgPSBpZDsKIAllcC0+ZGV2LmNsYXNzID0gJmlzY3NpX2VuZHBvaW50X2NsYXNzOwotCXNucHJpbnRmKGVwLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImVwLSV1IiwgaWQpOworCXNucHJpbnRmKGVwLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImVwLSVsbHUiLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgaWQpOwogCWVyciA9IGRldmljZV9yZWdpc3RlcigmZXAtPmRldik7CiAgICAgICAgIGlmIChlcnIpCiAgICAgICAgICAgICAgICAgZ290byBmcmVlX2VwOwpAQCAtMzc0LDEwICszNzUsMTAgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9TRVNTSU9OX0ZBSUxFRDoKLQkJZXJyID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKKwkJZXJyID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfU0VTU0lPTl9GUkVFOgotCQllcnIgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJZXJyID0gRElEX1RSQU5TUE9SVF9GQUlMRkFTVCA8PCAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CkBAIC0xMDEwLDcgKzEwMTEsNyBAQAogCiAJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKLQkJaXNjc2lfY29ubl9lcnJvcihjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCQlpc2NzaV9jb25uX2Vycm9yX2V2ZW50KGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCWlzY3NpX2Nsc19jb25uX3ByaW50ayhLRVJOX0VSUiwgY29ubiwgImNhbiBub3QgZGVsaXZlciAiCiAJCQkJICAgICAgImNvbnRyb2wgUERVOiBPT01cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEwMzEsNyArMTAzMiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9yZWN2X3BkdSk7CiAKLXZvaWQgaXNjc2lfY29ubl9lcnJvcihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKQordm9pZCBpc2NzaV9jb25uX2Vycm9yX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgZW51bSBpc2NzaV9lcnIgZXJyb3IpCiB7CiAJc3RydWN0IG5sbXNnaGRyCSpubGg7CiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKQEAgLTEwNjMsNyArMTA2NCw3IEBACiAJaXNjc2lfY2xzX2Nvbm5fcHJpbnRrKEtFUk5fSU5GTywgY29ubiwgImRldGVjdGVkIGNvbm4gZXJyb3IgKCVkKVxuIiwKIAkJCSAgICAgIGVycm9yKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fZXJyb3IpOworRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfY29ubl9lcnJvcl9ldmVudCk7CiAKIHN0YXRpYyBpbnQKIGlzY3NpX2lmX3NlbmRfcmVwbHkoaW50IHBpZCwgaW50IHNlcSwgaW50IHR5cGUsIGludCBkb25lLCBpbnQgbXVsdGksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKaW5kZXggYjI5MzYwZS4uN2MyZDI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwpAQCAtMTA5LDcgKzEwOSw5IEBACiAJZm9yKGkgPSAwOyBpIDwgRFZfUkVUUklFUzsgaSsrKSB7CiAJCXJlc3VsdCA9IHNjc2lfZXhlY3V0ZShzZGV2LCBjbWQsIGRpciwgYnVmZmVyLCBidWZmbGVuLAogCQkJCSAgICAgIHNlbnNlLCBEVl9USU1FT1VULCAvKiByZXRyaWVzICovIDEsCi0JCQkJICAgICAgUkVRX0ZBSUxGQVNUKTsKKwkJCQkgICAgICBSRVFfRkFJTEZBU1RfREVWIHwKKwkJCQkgICAgICBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCQkgICAgICBSRVFfRkFJTEZBU1RfRFJJVkVSKTsKIAkJaWYgKHJlc3VsdCAmIERSSVZFUl9TRU5TRSkgewogCQkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyX3RtcDsKIAkJCWlmICghc3NoZHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IGE3YjUzYmUuLmM5ZTEyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0zODQsNyArMzg0LDcgQEAKIAlzZWN0b3JfdCBibG9jayA9IHJxLT5zZWN0b3I7CiAJc2VjdG9yX3QgdGhyZXNob2xkOwogCXVuc2lnbmVkIGludCB0aGlzX2NvdW50ID0gcnEtPm5yX3NlY3RvcnM7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBob3N0X2RpZjsKIAogCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpIHsKIAkJcmV0ID0gc2NzaV9zZXR1cF9ibGtfcGNfY21uZChzZHAsIHJxKTsKQEAgLTUxNSw3ICs1MTUsOCBAQAogCQkJCQlycS0+bnJfc2VjdG9ycykpOwogCiAJLyogU2V0IFJEUFJPVEVDVC9XUlBST1RFQ1QgaWYgZGlzayBpcyBmb3JtYXR0ZWQgd2l0aCBESUYgKi8KLQlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlKSkKKwlob3N0X2RpZiA9IHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHNka3AtPnByb3RlY3Rpb25fdHlwZSk7CisJaWYgKGhvc3RfZGlmKQogCQlTQ3BudC0+Y21uZFsxXSA9IDEgPDwgNTsKIAllbHNlCiAJCVNDcG50LT5jbW5kWzFdID0gMDsKQEAgLTU3Myw4ICs1NzQsOSBAQAogCVNDcG50LT5zZGIubGVuZ3RoID0gdGhpc19jb3VudCAqIHNkcC0+c2VjdG9yX3NpemU7CiAKIAkvKiBJZiBESUYgb3IgRElYIGlzIGVuYWJsZWQsIHRlbGwgSEJBIGhvdyB0byBoYW5kbGUgcmVxdWVzdCAqLwotCWlmIChzZGtwLT5wcm90ZWN0aW9uX3R5cGUgfHwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkKLQkJc2RfZGlmX29wKFNDcG50LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUsIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpOworCWlmIChob3N0X2RpZiB8fCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKQorCQlzZF9kaWZfb3AoU0NwbnQsIGhvc3RfZGlmLCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpLAorCQkJICBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOwogCiAJLyoKIAkgKiBXZSBzaG91bGRuJ3QgZGlzY29ubmVjdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2VjdG9yLCBzbyB3aXRoIGEgZHVtYgpAQCAtNjA3LDE3ICs2MDksMTUgQEAKICAqCUluIHRoZSBsYXR0ZXIgY2FzZSBAaW5vZGUgYW5kIEBmaWxwIGNhcnJ5IGFuIGFicmlkZ2VkIGFtb3VudAogICoJb2YgaW5mb3JtYXRpb24gYXMgbm90ZWQgYWJvdmUuCiAgKiovCi1zdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwOworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSBzY3NpX2Rpc2tfZ2V0KGJkZXYtPmJkX2Rpc2spOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlpbnQgcmV0dmFsOwogCi0JaWYgKCEoc2RrcCA9IHNjc2lfZGlza19nZXQoZGlzaykpKQorCWlmICghc2RrcCkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCiAJU0NTSV9MT0dfSExRVUVVRSgzLCBzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAic2Rfb3BlblxuIikpOwogCiAJc2RldiA9IHNka3AtPmRldmljZTsKQEAgLTYzMSwxNCArNjMxLDEzIEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJaWYgKHNkZXYtPnJlbW92YWJsZSB8fCBzZGtwLT53cml0ZV9wcm90KQotCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CiAKIAkvKgogCSAqIElmIHRoZSBkcml2ZSBpcyBlbXB0eSwganVzdCBsZXQgdGhlIG9wZW4gZmFpbC4KIAkgKi8KIAlyZXR2YWwgPSAtRU5PTUVESVVNOwotCWlmIChzZGV2LT5yZW1vdmFibGUgJiYgIXNka3AtPm1lZGlhX3ByZXNlbnQgJiYKLQkgICAgIShmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpKQorCWlmIChzZGV2LT5yZW1vdmFibGUgJiYgIXNka3AtPm1lZGlhX3ByZXNlbnQgJiYgIShtb2RlICYgRk1PREVfTkRFTEFZKSkKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAkvKgpAQCAtNjQ2LDcgKzY0NSw3IEBACiAJICogaWYgdGhlIHVzZXIgZXhwZWN0cyB0byBiZSBhYmxlIHRvIHdyaXRlIHRvIHRoZSB0aGluZy4KIAkgKi8KIAlyZXR2YWwgPSAtRVJPRlM7Ci0JaWYgKHNka3AtPndyaXRlX3Byb3QgJiYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKKwlpZiAoc2RrcC0+d3JpdGVfcHJvdCAmJiAobW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAkvKgpAQCAtNjgyLDkgKzY4MSw4IEBACiAgKglOb3RlOiBtYXkgYmxvY2sgKHVuaW50ZXJydXB0aWJsZSkgaWYgZXJyb3IgcmVjb3ZlcnkgaXMgdW5kZXJ3YXkKICAqCW9uIHRoaXMgZGlzay4KICAqKi8KLXN0YXRpYyBpbnQgc2RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgc2RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gc2NzaV9kaXNrKGRpc2spOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNka3AtPmRldmljZTsKIApAQCAtNzQxLDEwICs3MzksOSBAQAogICoJTm90ZTogbW9zdCBpb2N0bHMgYXJlIGZvcndhcmQgb250byB0aGUgYmxvY2sgc3Vic3lzdGVtIG9yIGZ1cnRoZXIKICAqCWRvd24gaW4gdGhlIHNjc2kgc3Vic3lzdGVtLgogICoqLwotc3RhdGljIGludCBzZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLCAKK3N0YXRpYyBpbnQgc2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2NzaV9kaXNrKGRpc2spLT5kZXZpY2U7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC03NTksNyArNzU2LDggQEAKIAkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgogCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCiAJICovCi0JZXJyb3IgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzZHAsIGNtZCwgcCwgZmlscCk7CisJZXJyb3IgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzZHAsIGNtZCwgcCwKKwkJCQkJKG1vZGUgJiBGTU9ERV9OREVMQVlfTk9XKSAhPSAwKTsKIAlpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZHApIHx8ICFlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC03NzMsNyArNzcxLDcgQEAKIAkJY2FzZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSOgogCQkJcmV0dXJuIHNjc2lfaW9jdGwoc2RwLCBjbWQsIHApOwogCQlkZWZhdWx0OgotCQkJZXJyb3IgPSBzY3NpX2NtZF9pb2N0bChmaWxwLCBkaXNrLT5xdWV1ZSwgZGlzaywgY21kLCBwKTsKKwkJCWVycm9yID0gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwgcCk7CiAJCQlpZiAoZXJyb3IgIT0gLUVOT1RUWSkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtOTI2LDExICs5MjQsMTAgQEAKICAqIFRoaXMgZ2V0cyBkaXJlY3RseSBjYWxsZWQgZnJvbSBWRlMuIFdoZW4gdGhlIGlvY3RsIAogICogaXMgbm90IHJlY29nbml6ZWQgd2UgZ28gYmFjayB0byB0aGUgb3RoZXIgdHJhbnNsYXRpb24gcGF0aHMuIAogICovCi1zdGF0aWMgbG9uZyBzZF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBzZF9jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2NzaV9kaXNrKGRpc2spLT5kZXZpY2U7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2NzaV9kaXNrKGJkZXYtPmJkX2Rpc2spLT5kZXZpY2U7CiAKIAkvKgogCSAqIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGVycm9yIHJlY292ZXJ5LCBkb24ndCBsZXQgYW55b25lCkBAIC05NjAsNyArOTU3LDcgQEAKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkJPSBzZF9vcGVuLAogCS5yZWxlYXNlCQk9IHNkX3JlbGVhc2UsCi0JLmlvY3RsCQkJPSBzZF9pb2N0bCwKKwkubG9ja2VkX2lvY3RsCQk9IHNkX2lvY3RsLAogCS5nZXRnZW8JCQk9IHNkX2dldGdlbywKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAkJPSBzZF9jb21wYXRfaW9jdGwsCkBAIC0xMDUyLDcgKzEwNDksNiBAQAogCQlnb29kX2J5dGVzID0gc2RfY29tcGxldGVkX2J5dGVzKFNDcG50KTsKIAkJYnJlYWs7CiAJY2FzZSBSRUNPVkVSRURfRVJST1I6Ci0JY2FzZSBOT19TRU5TRToKIAkJLyogSW5mb3JtIHRoZSB1c2VyLCBidXQgbWFrZSBzdXJlIHRoYXQgaXQncyBub3QgdHJlYXRlZAogCQkgKiBhcyBhIGhhcmQgZXJyb3IuCiAJCSAqLwpAQCAtMTA2MSw2ICsxMDU3LDE1IEBACiAJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQlnb29kX2J5dGVzID0gc2NzaV9idWZmbGVuKFNDcG50KTsKIAkJYnJlYWs7CisJY2FzZSBOT19TRU5TRToKKwkJLyogVGhpcyBpbmRpY2F0ZXMgYSBmYWxzZSBjaGVjayBjb25kaXRpb24sIHNvIGlnbm9yZSBpdC4gIEFuCisJCSAqIHVua25vd24gYW1vdW50IG9mIGRhdGEgd2FzIHRyYW5zZmVycmVkIHNvIHRyZWF0IGl0IGFzIGFuCisJCSAqIGVycm9yLgorCQkgKi8KKwkJc2NzaV9wcmludF9zZW5zZSgic2QiLCBTQ3BudCk7CisJCVNDcG50LT5yZXN1bHQgPSAwOworCQltZW1zZXQoU0NwbnQtPnNlbnNlX2J1ZmZlciwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJYnJlYWs7CiAJY2FzZSBBQk9SVEVEX0NPTU1BTkQ6CiAJCWlmIChzc2hkci5hc2MgPT0gMHgxMCkgeyAvKiBESUY6IERpc2sgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLwogCQkJc2NzaV9wcmludF9yZXN1bHQoU0NwbnQpOwpAQCAtMTA3NCwxNSArMTA3OSw2IEBACiAJCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKIAkJCWdvb2RfYnl0ZXMgPSBzZF9jb21wbGV0ZWRfYnl0ZXMoU0NwbnQpOwogCQl9Ci0JCWlmICghc2NzaV9kZXZpY2VfcHJvdGVjdGlvbihTQ3BudC0+ZGV2aWNlKSAmJgotCQkgICAgU0NwbnQtPmRldmljZS0+dXNlXzEwX2Zvcl9ydyAmJgotCQkgICAgKFNDcG50LT5jbW5kWzBdID09IFJFQURfMTAgfHwKLQkJICAgICBTQ3BudC0+Y21uZFswXSA9PSBXUklURV8xMCkpCi0JCQlTQ3BudC0+ZGV2aWNlLT51c2VfMTBfZm9yX3J3ID0gMDsKLQkJaWYgKFNDcG50LT5kZXZpY2UtPnVzZV8xMF9mb3JfbXMgJiYKLQkJICAgIChTQ3BudC0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwIHx8Ci0JCSAgICAgU0NwbnQtPmNtbmRbMF0gPT0gTU9ERV9TRUxFQ1RfMTApKQotCQkJU0NwbnQtPmRldmljZS0+dXNlXzEwX2Zvcl9tcyA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTI1MiwxNCArMTI0OCwxMiBAQAogCWVsc2UKIAkJdHlwZSA9ICgoYnVmZmVyWzEyXSA+PiAxKSAmIDcpICsgMTsgLyogUF9UWVBFIDAgPSBUeXBlIDEgKi8KIAorCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IHR5cGU7CisKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNEX0RJRl9UWVBFMF9QUk9URUNUSU9OOgotCQlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSAwOwotCQlicmVhazsKLQogCWNhc2UgU0RfRElGX1RZUEUxX1BST1RFQ1RJT046CiAJY2FzZSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTjoKLQkJc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gdHlwZTsKIAkJYnJlYWs7CiAKIAljYXNlIFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OOgpAQCAtMTI3Nyw3ICsxMjcxLDYgQEAKIAlyZXR1cm47CiAKIGRpc2FibGU6Ci0Jc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gMDsKIAlzZGtwLT5jYXBhY2l0eSA9IDA7CiB9CiAKQEAgLTE0MzgsNyArMTQzMSw3IEBACiAKIAl7CiAJCWNoYXIgY2FwX3N0cl8yWzEwXSwgY2FwX3N0cl8xMFsxMF07Ci0JCXU2NCBzeiA9IHNka3AtPmNhcGFjaXR5IDw8IGZmeih+c2VjdG9yX3NpemUpOworCQl1NjQgc3ogPSAodTY0KXNka3AtPmNhcGFjaXR5IDw8IGlsb2cyKHNlY3Rvcl9zaXplKTsKIAogCQlzdHJpbmdfZ2V0X3NpemUoc3osIFNUUklOR19VTklUU18yLCBjYXBfc3RyXzIsCiAJCQkJc2l6ZW9mKGNhcF9zdHJfMikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmggYi9kcml2ZXJzL3Njc2kvc2QuaAppbmRleCA5NWI5ZjA2Li43NTYzOGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtOTcsMTkgKzk3LDI4IEBACiAgICAgICAgX19iZTMyIHJlZl90YWc7CQkvKiBUYXJnZXQgTEJBIG9yIGluZGlyZWN0IExCQSAqLwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOVEVHUklUWQogCi1leHRlcm4gdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICopOwogZXh0ZXJuIGludCBzZF9kaWZfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKLSNkZWZpbmUgc2RfZGlmX29wKGEsIGIsIGMpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBzZF9kaWZfY29uZmlnX2hvc3QoYSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNkX2RpZl9wcmVwYXJlKGEsIGIsIGMpCQkJKDApCi0jZGVmaW5lIHNkX2RpZl9jb21wbGV0ZShhLCBiKQkJCSgwKQorc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKmRpc2spCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBzZF9kaWZfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IHMsIHVuc2lnbmVkIGludCBhKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9jb21wbGV0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGludCBhKQoreworfQogCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYyBiL2RyaXZlcnMvc2NzaS9zZF9kaWYuYwppbmRleCA0ZDE3ZjNkLi4zZWJiMWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCkBAIC0zMTEsMjYgKzMxMSwyNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gc2RrcC0+ZGlzazsKIAl1OCB0eXBlID0gc2RrcC0+cHJvdGVjdGlvbl90eXBlOworCWludCBkaWYsIGRpeDsKIAotCS8qIElmIHRoaXMgSEJBIGRvZXNuJ3Qgc3VwcG9ydCBESVgsIHJlc29ydCB0byBub3JtYWwgSS9PIG9yIERJRiAqLwotCWlmIChzY3NpX2hvc3RfZGl4X2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKSA9PSAwKSB7CisJZGlmID0gc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSk7CisJZGl4ID0gc2NzaV9ob3N0X2RpeF9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSk7CiAKLQkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUwX1BST1RFQ1RJT04pCi0JCQlyZXR1cm47Ci0KLQkJaWYgKHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHR5cGUpID09IDApIHsKLQkJCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICJUeXBlICVkIHByb3RlY3Rpb24gIiBcCi0JCQkJICAidW5zdXBwb3J0ZWQgYnkgSEJBLiBEaXNhYmxpbmcgRElGLlxuIiwgdHlwZSk7Ci0JCQlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIkVuYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsCi0JCQkgIHR5cGUpOwotCi0JCXJldHVybjsKKwlpZiAoIWRpeCAmJiBzY3NpX2hvc3RfZGl4X2NhcGFibGUoc2RwLT5ob3N0LCAwKSkgeworCQlkaWYgPSAwOyBkaXggPSAxOwogCX0KIAorCWlmICh0eXBlKSB7CisJCWlmIChkaWYpCisJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCQkJICAiRW5hYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7CisJCWVsc2UKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkgICJEaXNhYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7CisJfQorCisJaWYgKCFkaXgpCisJCXJldHVybjsKKwogCS8qIEVuYWJsZSBETUEgb2YgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiAqLwogCWlmIChzY3NpX2hvc3RfZ2V0X2d1YXJkKHNka3AtPmRldmljZS0+aG9zdCkgJiBTSE9TVF9ESVhfR1VBUkRfSVApCiAJCWlmICh0eXBlID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKQpAQCAtMzQzLDE3ICszNDQsMTcgQEAKIAkJZWxzZQogCQkJYmxrX2ludGVncml0eV9yZWdpc3RlcihkaXNrLCAmZGlmX3R5cGUxX2ludGVncml0eV9jcmMpOwogCi0Jc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwKLQkJICAiRW5hYmxpbmcgJXMgaW50ZWdyaXR5IHByb3RlY3Rpb25cbiIsIGRpc2stPmludGVncml0eS0+bmFtZSk7CisJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkgICJFbmFibGluZyBESVggJXMgcHJvdGVjdGlvblxuIiwgZGlzay0+aW50ZWdyaXR5LT5uYW1lKTsKIAogCS8qIFNpZ25hbCB0byBibG9jayBsYXllciB0aGF0IHdlIHN1cHBvcnQgc2VjdG9yIHRhZ2dpbmcgKi8KLQlpZiAodHlwZSAmJiBzZGtwLT5BVE8pIHsKKwlpZiAoZGlmICYmIHR5cGUgJiYgc2RrcC0+QVRPKSB7CiAJCWlmICh0eXBlID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKQogCQkJZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSA9IHNpemVvZih1MTYpICsgc2l6ZW9mKHUzMik7CiAJCWVsc2UKIAkJCWRpc2stPmludGVncml0eS0+dGFnX3NpemUgPSBzaXplb2YodTE2KTsKIAotCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiRElGIGFwcGxpY2F0aW9uIHRhZyBzaXplICV1XG4iLAorCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJESUYgYXBwbGljYXRpb24gdGFnIHNpemUgJXVcbiIsCiAJCQkgIGRpc2stPmludGVncml0eS0+dGFnX3NpemUpOwogCX0KIH0KQEAgLTM2MSw3ICszNjIsNyBAQAogLyoKICAqIERJRiBETUEgb3BlcmF0aW9uIG1hZ2ljIGRlY29kZXIgcmluZy4KICAqLwotdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCkKK3ZvaWQgc2RfZGlmX29wKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHVuc2lnbmVkIGludCBkaWYsIHVuc2lnbmVkIGludCBkaXgsIHVuc2lnbmVkIGludCB0eXBlKQogewogCWludCBjc3VtX2NvbnZlcnQsIHByb3Rfb3A7CiAKQEAgLTQwNiw3ICs0MDcsOCBAQAogCX0KIAogCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7Ci0Jc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIGRpZik7CisJaWYgKGRpZikKKwkJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIHR5cGUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA5M2JkNTlhLi45YWRmMzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIAkJCWlmIChzZ19hbGxvd19hY2Nlc3MoZmlscCwgJm9wY29kZSkpCiAJCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlyZXR1cm4gc2dfc2NzaV9pb2N0bChmaWxwLCBzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSwgTlVMTCwgcCk7CisJCXJldHVybiBzZ19zY3NpX2lvY3RsKHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBOVUxMLCBmaWxwLT5mX21vZGUsIHApOwogCWNhc2UgU0dfU0VUX0RFQlVHOgogCQlyZXN1bHQgPSBnZXRfdXNlcih2YWwsIGlwKTsKIAkJaWYgKHJlc3VsdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggMGYxNzAwOS4uNjJiNjYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTQ3MSwzOCArNDcxLDMxIEBACiAJcmV0dXJuIHNjc2lfcHJlcF9yZXR1cm4ocSwgcnEsIHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgc3JfYmxvY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgc3JfYmxvY2tfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBzY3NpX2NkICpjZDsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc2NzaV9jZCAqY2QgPSBzY3NpX2NkX2dldChiZGV2LT5iZF9kaXNrKTsKKwlpbnQgcmV0ID0gLUVOWElPOwogCi0JaWYoIShjZCA9IHNjc2lfY2RfZ2V0KGRpc2spKSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWlmKChyZXQgPSBjZHJvbV9vcGVuKCZjZC0+Y2RpLCBpbm9kZSwgZmlsZSkpICE9IDApCi0JCXNjc2lfY2RfcHV0KGNkKTsKLQorCWlmIChjZCkgeworCQlyZXQgPSBjZHJvbV9vcGVuKCZjZC0+Y2RpLCBiZGV2LCBtb2RlKTsKKwkJaWYgKHJldCkKKwkJCXNjc2lfY2RfcHV0KGNkKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzcl9ibG9ja19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBzcl9ibG9ja19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc2NzaV9jZCAqY2QgPSBzY3NpX2NkKGlub2RlLT5pX2JkZXYtPmJkX2Rpc2spOwotCXJldCA9IGNkcm9tX3JlbGVhc2UoJmNkLT5jZGksIGZpbGUpOwotCWlmKHJldCkKLQkJcmV0dXJuIHJldDsKLQkKKwlzdHJ1Y3Qgc2NzaV9jZCAqY2QgPSBzY3NpX2NkKGRpc2spOworCWNkcm9tX3JlbGVhc2UoJmNkLT5jZGksIG1vZGUpOwogCXNjc2lfY2RfcHV0KGNkKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNyX2Jsb2NrX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsCitzdGF0aWMgaW50IHNyX2Jsb2NrX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwgdW5zaWduZWQgY21kLAogCQkJICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qgc2NzaV9jZCAqY2QgPSBzY3NpX2NkKGlub2RlLT5pX2JkZXYtPmJkX2Rpc2spOworCXN0cnVjdCBzY3NpX2NkICpjZCA9IHNjc2lfY2QoYmRldi0+YmRfZGlzayk7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY2QtPmRldmljZTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmV0OwpAQCAtNTE3LDcgKzUxMCw3IEBACiAJCXJldHVybiBzY3NpX2lvY3RsKHNkZXYsIGNtZCwgYXJncCk7CiAJfQogCi0JcmV0ID0gY2Ryb21faW9jdGwoZmlsZSwgJmNkLT5jZGksIGlub2RlLCBjbWQsIGFyZyk7CisJcmV0ID0gY2Ryb21faW9jdGwoJmNkLT5jZGksIGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIAlpZiAocmV0ICE9IC1FTk9TWVMpCiAJCXJldHVybiByZXQ7CiAKQEAgLTUyNyw3ICs1MjAsOCBAQAogCSAqIGNhc2UgZmFsbCB0aHJvdWdoIHRvIHNjc2lfaW9jdGwsIHdoaWNoIHdpbGwgcmV0dXJuIEVORE9FViBhZ2FpbgogCSAqIGlmIGl0IGRvZXNuJ3QgcmVjb2duaXNlIHRoZSBpb2N0bAogCSAqLwotCXJldCA9IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKHNkZXYsIGNtZCwgYXJncCwgTlVMTCk7CisJcmV0ID0gc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoc2RldiwgY21kLCBhcmdwLAorCQkJCQkobW9kZSAmIEZNT0RFX05ERUxBWV9OT1cpICE9IDApOwogCWlmIChyZXQgIT0gLUVOT0RFVikKIAkJcmV0dXJuIHJldDsKIAlyZXR1cm4gc2NzaV9pb2N0bChzZGV2LCBjbWQsIGFyZ3ApOwpAQCAtNTQ0LDcgKzUzOCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHNyX2Jsb2NrX29wZW4sCiAJLnJlbGVhc2UJPSBzcl9ibG9ja19yZWxlYXNlLAotCS5pb2N0bAkJPSBzcl9ibG9ja19pb2N0bCwKKwkubG9ja2VkX2lvY3RsCT0gc3JfYmxvY2tfaW9jdGwsCiAJLm1lZGlhX2NoYW5nZWQJPSBzcl9ibG9ja19tZWRpYV9jaGFuZ2VkLAogCS8qIAogCSAqIE5vIGNvbXBhdF9pb2N0bCBmb3Igbm93IGJlY2F1c2Ugc3JfYmxvY2tfaW9jdGwgbmV2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYyBiL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYwppbmRleCA0ZWIzZGE5Li40YWQzZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCkBAIC0yMjMsOSArMjIzLDkgQEAKIAkJCQlub19tdWx0aSA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQltaW4gPSBCQ0QyQklOKGJ1ZmZlclsxNV0pOwotCQkJc2VjID0gQkNEMkJJTihidWZmZXJbMTZdKTsKLQkJCWZyYW1lID0gQkNEMkJJTihidWZmZXJbMTddKTsKKwkJCW1pbiA9IGJjZDJiaW4oYnVmZmVyWzE1XSk7CisJCQlzZWMgPSBiY2QyYmluKGJ1ZmZlclsxNl0pOworCQkJZnJhbWUgPSBiY2QyYmluKGJ1ZmZlclsxN10pOwogCQkJc2VjdG9yID0gbWluICogQ0RfU0VDUyAqIENEX0ZSQU1FUyArIHNlYyAqIENEX0ZSQU1FUyArIGZyYW1lOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI1Miw5ICsyNTIsOSBAQAogCQkJfQogCQkJaWYgKHJjICE9IDApCiAJCQkJYnJlYWs7Ci0JCQltaW4gPSBCQ0QyQklOKGJ1ZmZlclsxXSk7Ci0JCQlzZWMgPSBCQ0QyQklOKGJ1ZmZlclsyXSk7Ci0JCQlmcmFtZSA9IEJDRDJCSU4oYnVmZmVyWzNdKTsKKwkJCW1pbiA9IGJjZDJiaW4oYnVmZmVyWzFdKTsKKwkJCXNlYyA9IGJjZDJiaW4oYnVmZmVyWzJdKTsKKwkJCWZyYW1lID0gYmNkMmJpbihidWZmZXJbM10pOwogCQkJc2VjdG9yID0gbWluICogQ0RfU0VDUyAqIENEX0ZSQU1FUyArIHNlYyAqIENEX0ZSQU1FUyArIGZyYW1lOwogCQkJaWYgKHNlY3RvcikKIAkJCQlzZWN0b3IgLT0gQ0RfTVNGX09GRlNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggNWMyOGQwOC4uYzk1OWJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTMyNjMsNyArMzI2Myw4IEBACiAJICogbWF5IHRyeSBhbmQgdGFrZSB0aGUgZGV2aWNlIG9mZmxpbmUsIGluIHdoaWNoIGNhc2UgYWxsIGZ1cnRoZXIKIAkgKiBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBwcm9oaWJpdGVkLgogCSAqLwotCXJldHZhbCA9IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWRfaW4sIHAsIGZpbGUpOworCXJldHZhbCA9IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWRfaW4sIHAsCisJCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CiAJaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UpIHx8IHJldHZhbCAhPSAtRU5PREVWKQogCQlnb3RvIG91dDsKIAlyZXR2YWwgPSAwOwpAQCAtMzU2Nyw4ICszNTY4LDggQEAKIAkJCSAgICAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJCQlpID0gLUVQRVJNOwogCQkJZWxzZQotCQkJCWkgPSBzY3NpX2NtZF9pb2N0bChmaWxlLCBTVHAtPmRpc2stPnF1ZXVlLAotCQkJCQkJICAgU1RwLT5kaXNrLCBjbWRfaW4sIHApOworCQkJCWkgPSBzY3NpX2NtZF9pb2N0bChTVHAtPmRpc2stPnF1ZXVlLCBTVHAtPmRpc2ssCisJCQkJCQkgICBmaWxlLT5mX21vZGUsIGNtZF9pbiwgcCk7CiAJCQlpZiAoaSAhPSAtRU5PVFRZKQogCQkJCXJldHVybiBpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM3hfZXNwLmMgYi9kcml2ZXJzL3Njc2kvc3VuM3hfZXNwLmMKaW5kZXggNzUxNGIzYS4uMzRhOTk2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zeF9lc3AuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJZXNwLT5vcHMgPSAmc3VuM3hfZXNwX29wczsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlcyAmJiAhcmVzLT5zdGFydCkKKwlpZiAoIXJlcyB8fCAhcmVzLT5zdGFydCkKIAkJZ290byBmYWlsX3VubGluazsKIAogCWVzcC0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCAweDIwKTsKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQlnb3RvIGZhaWxfdW5tYXBfcmVnczsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKLQlpZiAoIXJlcyAmJiAhcmVzLT5zdGFydCkKKwlpZiAoIXJlcyB8fCAhcmVzLT5zdGFydCkKIAkJZ290byBmYWlsX3VubWFwX3JlZ3M7CiAKIAllc3AtPmRtYV9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIDB4MTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKaW5kZXggMzgxYjEyYS4uZDkzNWIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCkBAIC02Niw3ICs2Niw2IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBtNjhrX3NlcmlhbCBtNjhrX3NvZnRbTlJfUE9SVFNdOwotc3RydWN0IG02OGtfc2VyaWFsICpJUlFfcG9ydHNbTlJfSVJRU107CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWFydF9pcnFzW05SX1BPUlRTXSA9IFVBUlRfSVJRX0RFRk5TOwogCkBAIC0zNzUsMTUgKzM3NCwxMSBAQAogICovCiBpcnFyZXR1cm5fdCByc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBtNjhrX3NlcmlhbCAqIGluZm87CisJc3RydWN0IG02OGtfc2VyaWFsICppbmZvID0gZGV2X2lkOwogCW02ODMyOF91YXJ0ICp1YXJ0OwogCXVuc2lnbmVkIHNob3J0IHJ4OwogCXVuc2lnbmVkIHNob3J0IHR4OwogCi0JaW5mbyA9IElSUV9wb3J0c1tpcnFdOwotCWlmKCFpbmZvKQotCSAgICByZXR1cm4gSVJRX05PTkU7Ci0KIAl1YXJ0ID0gJnVhcnRfYWRkcltpbmZvLT5saW5lXTsKIAlyeCA9IHVhcnQtPnVyeC53OwogCkBAIC0xMzgzLDggKzEzNzgsNiBAQAogCQkgICBpbmZvLT5wb3J0LCBpbmZvLT5pcnEpOwogCSAgICBwcmludGsoIiBpcyBhIGJ1aWx0aW4gTUM2ODMyOCBVQVJUXG4iKTsKIAkgICAgCi0JICAgIElSUV9wb3J0c1tpbmZvLT5pcnFdID0gaW5mbzsJLyogd2FzdGUgb2Ygc3BhY2UgKi8KLQogI2lmZGVmIENPTkZJR19NNjhWWjMyOAogCQlpZiAoaSA+IDAgKQogCQkJUEpTRUwgJj0gMHhDRjsgIC8qIFBTVyBlbmFibGUgc2Vjb25kIHBvcnQgb3V0cHV0ICovCkBAIC0xMzkzLDcgKzEzODYsNyBAQAogCSAgICBpZiAocmVxdWVzdF9pcnEodWFydF9pcnFzW2ldLAogCQkJICAgIHJzX2ludGVycnVwdCwKIAkJCSAgICBJUlFGX0RJU0FCTEVELAotCQkJICAgICJNNjgzMjhfVUFSVCIsIE5VTEwpKQorCQkJICAgICJNNjgzMjhfVUFSVCIsIGluZm8pKQogICAgICAgICAgICAgICAgIHBhbmljKCJVbmFibGUgdG8gYXR0YWNoIDY4MzI4IHNlcmlhbCBpbnRlcnJ1cHRcbiIpOwogCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggMTUyOGRlMi4uMzAzMjcyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTU2LDExICsxNTYsMTUgQEAKIH07CiAKIHN0cnVjdCBpcnFfaW5mbyB7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QJCQlobGlzdF9ub2RlIG5vZGU7CisJaW50CQkJaXJxOworCXNwaW5sb2NrX3QJCWxvY2s7CS8qIFByb3RlY3RzIGxpc3Qgbm90IHRoZSBoYXNoICovCiAJc3RydWN0IGxpc3RfaGVhZAkqaGVhZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2luZm8gaXJxX2xpc3RzW05SX0lSUVNdOworI2RlZmluZSBOUl9JUlFfSEFTSAkJMzIJLyogQ2FuIGJlIGFkanVzdGVkIGxhdGVyICovCitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgaXJxX2xpc3RzW05SX0lSUV9IQVNIXTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaGFzaF9tdXRleCk7CS8qIFVzZWQgdG8gd2FsayB0aGUgaGFzaCAqLwogCiAvKgogICogSGVyZSB3ZSBkZWZpbmUgdGhlIGRlZmF1bHQgeG1pdCBmaWZvIHNpemUgdXNlZCBmb3IgZWFjaCB0eXBlIG9mIFVBUlQuCkBAIC0xNTQ1LDE1ICsxNTQ5LDQzIEBACiAJCUJVR19PTihpLT5oZWFkICE9ICZ1cC0+bGlzdCk7CiAJCWktPmhlYWQgPSBOVUxMOwogCX0KLQogCXNwaW5fdW5sb2NrX2lycSgmaS0+bG9jayk7CisJLyogTGlzdCBlbXB0eSBzbyB0aHJvdyBhd2F5IHRoZSBoYXNoIG5vZGUgKi8KKwlpZiAoaS0+aGVhZCA9PSBOVUxMKSB7CisJCWhsaXN0X2RlbCgmaS0+bm9kZSk7CisJCWtmcmVlKGkpOworCX0KIH0KIAogc3RhdGljIGludCBzZXJpYWxfbGlua19pcnFfY2hhaW4oc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKIHsKLQlzdHJ1Y3QgaXJxX2luZm8gKmkgPSBpcnFfbGlzdHMgKyB1cC0+cG9ydC5pcnE7CisJc3RydWN0IGhsaXN0X2hlYWQgKmg7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGlycV9pbmZvICppOwogCWludCByZXQsIGlycV9mbGFncyA9IHVwLT5wb3J0LmZsYWdzICYgVVBGX1NIQVJFX0lSUSA/IElSUUZfU0hBUkVEIDogMDsKIAorCW11dGV4X2xvY2soJmhhc2hfbXV0ZXgpOworCisJaCA9ICZpcnFfbGlzdHNbdXAtPnBvcnQuaXJxICUgTlJfSVJRX0hBU0hdOworCisJaGxpc3RfZm9yX2VhY2gobiwgaCkgeworCQlpID0gaGxpc3RfZW50cnkobiwgc3RydWN0IGlycV9pbmZvLCBub2RlKTsKKwkJaWYgKGktPmlycSA9PSB1cC0+cG9ydC5pcnEpCisJCQlicmVhazsKKwl9CisKKwlpZiAobiA9PSBOVUxMKSB7CisJCWkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxX2luZm8pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGkgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZoYXNoX211dGV4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXNwaW5fbG9ja19pbml0KCZpLT5sb2NrKTsKKwkJaS0+aXJxID0gdXAtPnBvcnQuaXJxOworCQlobGlzdF9hZGRfaGVhZCgmaS0+bm9kZSwgaCk7CisJfQorCW11dGV4X3VubG9jaygmaGFzaF9tdXRleCk7CisKIAlzcGluX2xvY2tfaXJxKCZpLT5sb2NrKTsKIAogCWlmIChpLT5oZWFkKSB7CkBAIC0xNTc3LDE0ICsxNjA5LDI4IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF91bmxpbmtfaXJxX2NoYWluKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCiB7Ci0Jc3RydWN0IGlycV9pbmZvICppID0gaXJxX2xpc3RzICsgdXAtPnBvcnQuaXJxOworCXN0cnVjdCBpcnFfaW5mbyAqaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaDsKIAorCW11dGV4X2xvY2soJmhhc2hfbXV0ZXgpOworCisJaCA9ICZpcnFfbGlzdHNbdXAtPnBvcnQuaXJxICUgTlJfSVJRX0hBU0hdOworCisJaGxpc3RfZm9yX2VhY2gobiwgaCkgeworCQlpID0gaGxpc3RfZW50cnkobiwgc3RydWN0IGlycV9pbmZvLCBub2RlKTsKKwkJaWYgKGktPmlycSA9PSB1cC0+cG9ydC5pcnEpCisJCQlicmVhazsKKwl9CisKKwlCVUdfT04obiA9PSBOVUxMKTsKIAlCVUdfT04oaS0+aGVhZCA9PSBOVUxMKTsKIAogCWlmIChsaXN0X2VtcHR5KGktPmhlYWQpKQogCQlmcmVlX2lycSh1cC0+cG9ydC5pcnEsIGkpOwogCiAJc2VyaWFsX2RvX3VubGluayhpLCB1cCk7CisJbXV0ZXhfdW5sb2NrKCZoYXNoX211dGV4KTsKIH0KIAogLyogQmFzZSB0aW1lciBpbnRlcnZhbCBmb3IgcG9sbGluZyAqLwpAQCAtMjQ0Nyw3ICsyNDkzLDcgQEAKIHN0YXRpYyBpbnQKIHNlcmlhbDgyNTBfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKIHsKLQlpZiAoc2VyLT5pcnEgPj0gTlJfSVJRUyB8fCBzZXItPmlycSA8IDAgfHwKKwlpZiAoc2VyLT5pcnEgPj0gbnJfaXJxcyB8fCBzZXItPmlycSA8IDAgfHwKIAkgICAgc2VyLT5iYXVkX2Jhc2UgPCA5NjAwIHx8IHNlci0+dHlwZSA8IFBPUlRfVU5LTk9XTiB8fAogCSAgICBzZXItPnR5cGUgPj0gQVJSQVlfU0laRSh1YXJ0X2NvbmZpZykgfHwgc2VyLT50eXBlID09IFBPUlRfQ0lSUlVTIHx8CiAJICAgIHNlci0+dHlwZSA9PSBQT1JUX1NUQVJURUNIKQpAQCAtMjk2Nyw3ICszMDEzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2VyaWFsODI1MF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OwogCiAJaWYgKG5yX3VhcnRzID4gVUFSVF9OUikKIAkJbnJfdWFydHMgPSBVQVJUX05SOwpAQCAtMjk3Niw5ICszMDIyLDYgQEAKIAkJIiVkIHBvcnRzLCBJUlEgc2hhcmluZyAlc2FibGVkXG4iLCBucl91YXJ0cywKIAkJc2hhcmVfaXJxcyA/ICJlbiIgOiAiZGlzIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmaXJxX2xpc3RzW2ldLmxvY2spOwotCiAjaWZkZWYgQ09ORklHX1NQQVJDCiAJcmV0ID0gc3Vuc2VyaWFsX3JlZ2lzdGVyX21pbm9ycygmc2VyaWFsODI1MF9yZWcsIFVBUlRfTlIpOwogI2Vsc2UKQEAgLTMwMDYsMTUgKzMwNDksMTUgQEAKIAkJZ290byBvdXQ7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKHNlcmlhbDgyNTBfaXNhX2RldnMpOwotIHB1dF9kZXY6CitwdXRfZGV2OgogCXBsYXRmb3JtX2RldmljZV9wdXQoc2VyaWFsODI1MF9pc2FfZGV2cyk7Ci0gdW5yZWdfdWFydF9kcnY6Cit1bnJlZ191YXJ0X2RydjoKICNpZmRlZiBDT05GSUdfU1BBUkMKIAlzdW5zZXJpYWxfdW5yZWdpc3Rlcl9taW5vcnMoJnNlcmlhbDgyNTBfcmVnLCBVQVJUX05SKTsKICNlbHNlCiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsODI1MF9yZWcpOwogI2VuZGlmCi0gb3V0Ogorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2dzYy5jCmluZGV4IDA0MTZhZDMuLjQxOGI0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJLnByb2JlCQk9IHNlcmlhbF9pbml0X2NoaXAsCiB9OwogCi1pbnQgX19pbml0IHByb2JlX3NlcmlhbF9nc2Modm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHByb2JlX3NlcmlhbF9nc2Modm9pZCkKIHsKIAlyZWdpc3Rlcl9wYXJpc2NfZHJpdmVyKCZsYXNpX2RyaXZlcik7CiAJcmVnaXN0ZXJfcGFyaXNjX2RyaXZlcigmc2VyaWFsX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCBjMDE0ZmZiMS4uNTQ1MGEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xMTAwLDYgKzExMDAsOCBAQAogCXBibl9iMF80XzE4NDMyMDBfMjAwLAogCXBibl9iMF84XzE4NDMyMDBfMjAwLAogCisJcGJuX2IwXzFfNDAwMDAwMCwKKwogCXBibl9iMF9idF8xXzExNTIwMCwKIAlwYm5fYjBfYnRfMl8xMTUyMDAsCiAJcGJuX2IwX2J0XzhfMTE1MjAwLApAQCAtMTE2Nyw2ICsxMTY5LDEwIEBACiAJcGJuX2V4c3lzXzQwNTUsCiAJcGJuX3BseF9yb211bHVzLAogCXBibl9veHNlbWksCisJcGJuX294c2VtaV8xXzQwMDAwMDAsCisJcGJuX294c2VtaV8yXzQwMDAwMDAsCisJcGJuX294c2VtaV80XzQwMDAwMDAsCisJcGJuX294c2VtaV84XzQwMDAwMDAsCiAJcGJuX2ludGVsX2k5NjAsCiAJcGJuX3NnaV9pb2MzLAogCXBibl9jb21wdXRvbmVfNCwKQEAgLTEyOTAsNiArMTI5NiwxMiBAQAogCQkuYmFzZV9iYXVkCT0gMTg0MzIwMCwKIAkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCiAJfSwKKwlbcGJuX2IwXzFfNDAwMDAwMF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDEsCisJCS5iYXNlX2JhdWQJPSA0MDAwMDAwLAorCQkudWFydF9vZmZzZXQJPSA4LAorCX0sCiAKIAlbcGJuX2IwX2J0XzFfMTE1MjAwXSA9IHsKIAkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywKQEAgLTE2MjUsNiArMTYzNywzNSBAQAogCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAogCQkudWFydF9vZmZzZXQJPSA4LAogCX0sCisJW3Bibl9veHNlbWlfMV80MDAwMDAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDQwMDAwMDAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9veHNlbWlfMl80MDAwMDAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMiwKKwkJLmJhc2VfYmF1ZAk9IDQwMDAwMDAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9veHNlbWlfNF80MDAwMDAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gNCwKKwkJLmJhc2VfYmF1ZAk9IDQwMDAwMDAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9veHNlbWlfOF80MDAwMDAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gOCwKKwkJLmJhc2VfYmF1ZAk9IDQwMDAwMDAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisKIAogCS8qCiAJICogRUtGIGFkZGl0aW9uIGZvciBpOTYwIEJvYXJkcyBmb3JtIEVLRiB3aXRoIHNlcmlhbCBwb3J0LgpAQCAtMTgxMyw2ICsxODU0LDM5IEBACiAJICAgIGJvYXJkLT5maXJzdF9vZmZzZXQgPT0gZ3Vlc3NlZC0+Zmlyc3Rfb2Zmc2V0OwogfQogCisvKgorICogT3hmb3JkIFNlbWljb25kdWN0b3IgSW5jLgorICogQ2hlY2sgdGhhdCBkZXZpY2UgaXMgcGFydCBvZiB0aGUgVG9ybmFkbyByYW5nZSBvZiBkZXZpY2VzLCB0aGVuIGRldGVybWluZQorICogdGhlIG51bWJlciBvZiBwb3J0cyBhdmFpbGFibGUgb24gdGhlIGRldmljZS4KKyAqLworc3RhdGljIGludCBwY2lfb3hzZW1pX3Rvcm5hZG9faW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpc2VyaWFsX2JvYXJkICpib2FyZCkKK3sKKwl1OCBfX2lvbWVtICpwOworCXVuc2lnbmVkIGxvbmcgZGV2aWNlSUQ7CisJdW5zaWduZWQgaW50ICBudW1iZXJfdWFydHM7CisKKwkvKiBPeFNlbWkgVG9ybmFkbyBkZXZpY2VzIGFyZSBhbGwgMHhDeHh4ICovCisJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfT1hTRU1JICYmCisJICAgIChkZXYtPmRldmljZSAmIDB4RjAwMCkgIT0gMHhDMDAwKQorCQlyZXR1cm4gMDsKKworCXAgPSBwY2lfaW9tYXAoZGV2LCAwLCA1KTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldmljZUlEID0gaW9yZWFkMzIocCk7CisJLyogVG9ybmFkbyBkZXZpY2UgKi8KKwlpZiAoZGV2aWNlSUQgPT0gMHgwNzAwMDIwMCkgeworCQludW1iZXJfdWFydHMgPSBpb3JlYWQ4KHAgKyA0KTsKKwkJYm9hcmQtPm51bV9wb3J0cyA9IG51bWJlcl91YXJ0czsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSIlZCBwb3J0cyBkZXRlY3RlZCBvbiBPeGZvcmQgUENJIEV4cHJlc3MgZGV2aWNlXG4iLAorCQkJCQkJCQludW1iZXJfdWFydHMpOworCX0KKwlwY2lfaW91bm1hcChkZXYsIHApOworCXJldHVybiAwOworfQorCiBzdHJ1Y3Qgc2VyaWFsX3ByaXZhdGUgKgogcGNpc2VyaWFsX2luaXRfcG9ydHMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaXNlcmlhbF9ib2FyZCAqYm9hcmQpCiB7CkBAIC0xODIxLDYgKzE4OTUsMTMgQEAKIAlzdHJ1Y3QgcGNpX3NlcmlhbF9xdWlyayAqcXVpcms7CiAJaW50IHJjLCBucl9wb3J0cywgaTsKIAorCS8qCisJICogRmluZCBudW1iZXIgb2YgcG9ydHMgb24gYm9hcmQKKwkgKi8KKwlpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9PWFNFTUkgfHwKKwkgICAgZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9NQUlOUElORSkKKwkJcGNpX294c2VtaV90b3JuYWRvX2luaXQoZGV2LCBib2FyZCk7CisKIAlucl9wb3J0cyA9IGJvYXJkLT5udW1fcG9ydHM7CiAKIAkvKgpAQCAtMjMwMSw2ICsyMzgyLDE1NiBAQAogCQlwYm5fYjBfYnRfMl85MjE2MDAgfSwKIAogCS8qCisJICogT3hmb3JkIFNlbWljb25kdWN0b3IgSW5jLiBUb3JuYWRvIFBDSSBleHByZXNzIGRldmljZSByYW5nZS4KKwkgKi8KKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGMxMDEsICAgIC8qIE9YUENJZTk1MiAxIExlZ2FjeSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9iMF8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGMxMDUsICAgIC8qIE9YUENJZTk1MiAxIExlZ2FjeSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9iMF8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGMxMWIsICAgIC8qIE9YUENJZTk1MiAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjMTFmLCAgICAvKiBPWFBDSWU5NTIgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzEyMCwgICAgLyogT1hQQ0llOTUyIDEgTGVnYWN5IFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzEyNCwgICAgLyogT1hQQ0llOTUyIDEgTGVnYWN5IFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzEzOCwgICAgLyogT1hQQ0llOTUyIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGMxM2QsICAgIC8qIE9YUENJZTk1MiAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjMTQwLCAgICAvKiBPWFBDSWU5NTIgMSBMZWdhY3kgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fYjBfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjMTQxLCAgICAvKiBPWFBDSWU5NTIgMSBMZWdhY3kgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fYjBfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjMTQ0LCAgICAvKiBPWFBDSWU5NTIgMSBMZWdhY3kgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fYjBfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjMTQ1LCAgICAvKiBPWFBDSWU5NTIgMSBMZWdhY3kgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fYjBfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjMTU4LCAgICAvKiBPWFBDSWU5NTIgMiBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzJfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzE1ZCwgICAgLyogT1hQQ0llOTUyIDIgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8yXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGMyMDgsICAgIC8qIE9YUENJZTk1NCA0IE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfNF80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjMjBkLCAgICAvKiBPWFBDSWU5NTQgNCBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzRfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzMwOCwgICAgLyogT1hQQ0llOTU4IDggTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV84XzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGMzMGQsICAgIC8qIE9YUENJZTk1OCA4IE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfOF80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNDBiLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzQwZiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0MWIsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNDFmLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzQyYiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0MmYsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNDNiLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzQzZiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0NGIsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNDRmLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzQ1YiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0NWYsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNDZiLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzQ2ZiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0N2IsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNDdmLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzQ4YiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0OGYsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNDliLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzQ5ZiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0YWIsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNGFmLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzRiYiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfT1hTRU1JLCAweGM0YmYsICAgIC8qIE9YUENJZTIwMCAxIE5hdGl2ZSBVQVJUICovCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9veHNlbWlfMV80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgMHhjNGNiLCAgICAvKiBPWFBDSWUyMDAgMSBOYXRpdmUgVUFSVCAqLworCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzFfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIDB4YzRjZiwgICAgLyogT1hQQ0llMjAwIDEgTmF0aXZlIFVBUlQgKi8KKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwkvKgorCSAqIE1haW5waW5lIEluYy4gSVEgRXhwcmVzcyAiUmV2MyIgdXRpbGl6aW5nIE94U2VtaSBUb3JuYWRvCisJICovCisJewlQQ0lfVkVORE9SX0lEX01BSU5QSU5FLCAweDQwMDAsCS8qIElRIEV4cHJlc3MgMSBQb3J0IFYuMzQgU3VwZXItRzMgRmF4ICovCisJCVBDSV9WRU5ET1JfSURfTUFJTlBJTkUsIDB4NDAwMSwgMCwgMCwKKwkJcGJuX294c2VtaV8xXzQwMDAwMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfTUFJTlBJTkUsIDB4NDAwMCwJLyogSVEgRXhwcmVzcyAyIFBvcnQgVi4zNCBTdXBlci1HMyBGYXggKi8KKwkJUENJX1ZFTkRPUl9JRF9NQUlOUElORSwgMHg0MDAyLCAwLCAwLAorCQlwYm5fb3hzZW1pXzJfNDAwMDAwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9NQUlOUElORSwgMHg0MDAwLAkvKiBJUSBFeHByZXNzIDQgUG9ydCBWLjM0IFN1cGVyLUczIEZheCAqLworCQlQQ0lfVkVORE9SX0lEX01BSU5QSU5FLCAweDQwMDQsIDAsIDAsCisJCXBibl9veHNlbWlfNF80MDAwMDAwIH0sCisJewlQQ0lfVkVORE9SX0lEX01BSU5QSU5FLCAweDQwMDAsCS8qIElRIEV4cHJlc3MgOCBQb3J0IFYuMzQgU3VwZXItRzMgRmF4ICovCisJCVBDSV9WRU5ET1JfSURfTUFJTlBJTkUsIDB4NDAwOCwgMCwgMCwKKwkJcGJuX294c2VtaV84XzQwMDAwMDAgfSwKKwkvKgogCSAqIFNCUyBUZWNobm9sb2dpZXMsIEluYy4gUC1PY3RhbCBhbmQgUE1DLU9DVFBSTyBjYXJkcywKIAkgKiBmcm9tIHNrb2tvZHluQHlhaG9vLmNvbQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggZGI3ODNiNy4uYzk0ZDNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC00NTcsNyArNDU3LDcgQEAKIAogY29uZmlnIFNFUklBTF9TQU1TVU5HX0RFQlVHCiAJYm9vbCAiU2Ftc3VuZyBTb0Mgc2VyaWFsIGRlYnVnIgotCWRlcGVuZHMgb24gU0VSSUFMX1NBTVNVTkcKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HICYmIERFQlVHX0xMCiAJaGVscAogCSAgQWRkIHN1cHBvcnQgZm9yIGRlYnVnZ2luZyB0aGUgc2VyaWFsIGRyaXZlci4gU2luY2UgdGhpcyBpcwogCSAgZ2VuZXJhbGx5IGJlaW5nIHVzZWQgYXMgYSBjb25zb2xlLCB3ZSB1c2Ugb3VyIG93biBvdXRwdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwppbmRleCA5MGI1NmMyLi43MTU2MjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCkBAIC01MTIsNyArNTEyLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9BTUJBKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IG5yX2lycXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgOTYwMCkKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCA5ZDA4ZjI3Li5iNzE4MDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9BTUJBKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IG5yX2lycXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgOTYwMCkKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBhNmM0ZDc0Li5iZGU0YjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC02MjMsNyArNjIzLDcgQEAKIAogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0NQTSkKIAkJcmV0ID0gLUVJTlZBTDsKLQlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IE5SX0lSUVMpCisJaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBucl9pcnFzKQogCQlyZXQgPSAtRUlOVkFMOwogCWlmIChzZXItPmJhdWRfYmFzZSA8IDk2MDApCiAJCXJldCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwppbmRleCAyM2QwMzA1Li42MTFjOTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogc3RhdGljIGludAogbTMycl9zaW9fdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKIHsKLQlpZiAoc2VyLT5pcnEgPj0gTlJfSVJRUyB8fCBzZXItPmlycSA8IDAgfHwKKwlpZiAoc2VyLT5pcnEgPj0gbnJfaXJxcyB8fCBzZXItPmlycSA8IDAgfHwKIAkgICAgc2VyLT5iYXVkX2Jhc2UgPCA5NjAwIHx8IHNlci0+dHlwZSA8IFBPUlRfVU5LTk9XTiB8fAogCSAgICBzZXItPnR5cGUgPj0gQVJSQVlfU0laRSh1YXJ0X2NvbmZpZykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE2Miw3ICsxMTYyLDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIlNlcmlhbDogTTMyUiBTSU8gZHJpdmVyXG4iKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykKIAkJc3Bpbl9sb2NrX2luaXQoJmlycV9saXN0c1tpXS5sb2NrKTsKIAogCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZtMzJyX3Npb19yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggNmJkZjMzNi4uODc0Nzg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC03NDEsNyArNzQxLDcgQEAKIAlpZiAocG9ydC0+b3BzLT52ZXJpZnlfcG9ydCkKIAkJcmV0dmFsID0gcG9ydC0+b3BzLT52ZXJpZnlfcG9ydChwb3J0LCAmbmV3X3NlcmlhbCk7CiAKLQlpZiAoKG5ld19zZXJpYWwuaXJxID49IE5SX0lSUVMpIHx8IChuZXdfc2VyaWFsLmlycSA8IDApIHx8CisJaWYgKChuZXdfc2VyaWFsLmlycSA+PSBucl9pcnFzKSB8fCAobmV3X3NlcmlhbC5pcnEgPCAwKSB8fAogCSAgICAobmV3X3NlcmlhbC5iYXVkX2Jhc2UgPCA5NjAwKSkKIAkJcmV0dmFsID0gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKaW5kZXggY2I0OWE1YS4uNjFkYzhiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0xIN0E0MFgpCiAJCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0ID0gLUVJTlZBTDsKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKSAvKiAqKiogRklYTUU6IGlzIHRoaXMgdHJ1ZT8gKi8KIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IDhmY2I0YzUuLjczMTNjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAKIAkJcmV0ID0gc2VyaWFsX3R4eDlfcmVnaXN0ZXJfcG9ydCgmcG9ydCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBwb3J0IGF0IGluZGV4ICVkICIKLQkJCQkiKElPJXggTUVNJWxseCBJUlElZCk6ICVkXG4iLCBpLAorCQkJCSIoSU8lbHggTUVNJWxseCBJUlElZCk6ICVkXG4iLCBpLAogCQkJCXAtPmlvYmFzZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5tYXBiYXNlLAogCQkJCXAtPmlycSwgcmV0KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCAzZGYyYWFlLi5mMDY1OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBTdXBlckggb24tY2hpcCBzZXJpYWwgbW9kdWxlIHN1cHBvcnQuICAoU0NJIHdpdGggbm8gRklGTyAvIHdpdGggRklGTykKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNiAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBNb2RpZmllZCB0byBzdXBwb3J0IFNINzcyMCBTQ0lGLiBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcyAoSnVsIDIwMDcpLgogICoKICAqIGJhc2VkIG9mZiBvZiB0aGUgb2xkIGRyaXZlcnMvY2hhci9zaC1zY2kuYyBieToKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2lmZGVmIENPTkZJR19TVVBFUkgKICNpbmNsdWRlIDxhc20vY2xvY2suaD4KQEAgLTc4LDcgKzc5LDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdAlicmVha190aW1lcjsKIAlpbnQJCQlicmVha19mbGFnOwogCi0jaWZkZWYgQ09ORklHX1NVUEVSSAorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCS8qIFBvcnQgY2xvY2sgKi8KIAlzdHJ1Y3QgY2xrCQkqY2xrOwogI2VuZGlmCkBAIC04MzEsNyArODMyLDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkgJiYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCiAvKgogICogSGVyZSB3ZSBkZWZpbmUgYSB0cmFuc2lzdGlvbiBub3RpZmllciBzbyB0aGF0IHdlIGNhbiB1cGRhdGUgYWxsIG9mIG91cgogICogcG9ydHMnIGJhdWQgcmF0ZSB3aGVuIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGNoYW5nZXMuCkBAIC04NjAsNyArODYxLDcgQEAKIAkJCSAqIENsZWFuIHRoaXMgdXAgbGF0ZXIuLgogCQkJICovCiAJCQljbGsgPSBjbGtfZ2V0KE5VTEwsICJtb2R1bGVfY2xrIik7Ci0JCQlwb3J0LT51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsaykgKiAxNjsKKwkJCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAkJCWNsa19wdXQoY2xrKTsKIAkJfQogCkBAIC04NzMsNyArODc0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzY2lfbmIgPSB7ICZzY2lfbm90aWZpZXIsIE5VTEwsIDAgfTsKLSNlbmRpZiAvKiBDT05GSUdfQ1BVX0ZSRVEgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0ZSRVEgJiYgQ09ORklHX0hBVkVfQ0xLICovCiAKIHN0YXRpYyBpbnQgc2NpX3JlcXVlc3RfaXJxKHN0cnVjdCBzY2lfcG9ydCAqcG9ydCkKIHsKQEAgLTEwMDgsNyArMTAwOSw3IEBACiAJaWYgKHMtPmVuYWJsZSkKIAkJcy0+ZW5hYmxlKHBvcnQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJcy0+Y2xrID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOwogI2VuZGlmCiAKQEAgLTEwMzAsNyArMTAzMSw3IEBACiAJaWYgKHMtPmRpc2FibGUpCiAJCXMtPmRpc2FibGUocG9ydCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgpICYmICFkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAljbGtfcHV0KHMtPmNsayk7CiAJcy0+Y2xrID0gTlVMTDsKICNlbmRpZgpAQCAtMTA0MSwyNCArMTA0MiwxMSBAQAogewogCXN0cnVjdCBzY2lfcG9ydCAqcyA9ICZzY2lfcG9ydHNbcG9ydC0+bGluZV07CiAJdW5zaWduZWQgaW50IHN0YXR1cywgYmF1ZCwgc21yX3ZhbDsKLQlpbnQgdDsKKwlpbnQgdCA9IC0xOwogCiAJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOwotCi0Jc3dpdGNoIChiYXVkKSB7Ci0JCWNhc2UgMDoKLQkJCXQgPSAtMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQl7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCi0JCQl0ID0gU0NCUlJfVkFMVUUoYmF1ZCwgY2xrX2dldF9yYXRlKHMtPmNsaykpOwotI2Vsc2UKLQkJCXQgPSBTQ0JSUl9WQUxVRShiYXVkKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCX0KLQl9CisJaWYgKGxpa2VseShiYXVkKSkKKwkJdCA9IFNDQlJSX1ZBTFVFKGJhdWQsIHBvcnQtPnVhcnRjbGspOwogCiAJZG8gewogCQlzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwpAQCAtMTExMyw3ICsxMTAxLDcgQEAKIAkJY2FzZSBQT1JUX0lSREE6IHJldHVybiAiaXJkYSI7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaV9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTExNDUsMTkgKzExMzMsMjMgQEAKIAkJYnJlYWs7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMykKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAwKQorCWlmIChwb3J0LT5mbGFncyAmIFVQRl9JT1JFTUFQICYmICFwb3J0LT5tZW1iYXNlKSB7CisjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCiAJCXBvcnQtPm1hcGJhc2UgPSBvbmNoaXBfcmVtYXAoU0NJRl9BRERSX1NINSwgMTAyNCwgIlNDSUYiKTsKLQotCXBvcnQtPm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcG9ydC0+bWFwYmFzZTsKKwkJcG9ydC0+bWVtYmFzZSA9ICh2b2lkIF9faW9tZW0gKilwb3J0LT5tYXBiYXNlOworI2Vsc2UKKwkJcG9ydC0+bWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwb3J0LT5tYXBiYXNlLCAweDQwKTsKICNlbmRpZgorCisJCXByaW50ayhLRVJOX0VSUiAic2NpOiBjYW4ndCByZW1hcCBwb3J0IyVkXG4iLCBwb3J0LT5saW5lKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2NpX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCiB7CiAJc3RydWN0IHNjaV9wb3J0ICpzID0gJnNjaV9wb3J0c1twb3J0LT5saW5lXTsKIAotCWlmIChzZXItPmlycSAhPSBzLT5pcnFzW1NDSXhfVFhJX0lSUV0gfHwgc2VyLT5pcnEgPiBOUl9JUlFTKQorCWlmIChzZXItPmlycSAhPSBzLT5pcnFzW1NDSXhfVFhJX0lSUV0gfHwgc2VyLT5pcnEgPiBucl9pcnFzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCAyNDAwKQogCQkvKiBObyBwYXBlciB0YXBlIHJlYWRlciBmb3IgTWl0Y2guLiAqLwpAQCAtMTIwNywxNyArMTE5OSwxNyBAQAogCQlzY2lfcG9ydHNbaV0uZGlzYWJsZQk9IGg4MzAwX3NjaV9kaXNhYmxlOwogI2VuZGlmCiAJCXNjaV9wb3J0c1tpXS5wb3J0LnVhcnRjbGsgPSBDT05GSUdfQ1BVX0NMT0NLOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCi0JCXNjaV9wb3J0c1tpXS5wb3J0LnVhcnRjbGsgPSBjdXJyZW50X2NwdV9kYXRhLm1vZHVsZV9jbG9jayAqIDE2OwotI2Vsc2UKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQogCQkvKgogCQkgKiBYWFg6IFdlIHNob3VsZCB1c2UgYSBwcm9wZXIgU0NJL1NDSUYgY2xvY2sKIAkJICovCiAJCXsKIAkJCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKLQkJCXNjaV9wb3J0c1tpXS5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAqIDE2OworCQkJc2NpX3BvcnRzW2ldLnBvcnQudWFydGNsayA9IGNsa19nZXRfcmF0ZShjbGspOwogCQkJY2xrX3B1dChjbGspOwogCQl9CisjZWxzZQorI2Vycm9yICJOZWVkIGEgdmFsaWQgdWFydGNsayIKICNlbmRpZgogCiAJCXNjaV9wb3J0c1tpXS5icmVha190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpJnNjaV9wb3J0c1tpXTsKQEAgLTEyODUsNyArMTI3Nyw3IEBACiAKIAlwb3J0LT50eXBlID0gc2VyaWFsX2NvbnNvbGVfcG9ydC0+dHlwZTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSCkgJiYgIWRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCWlmICghc2VyaWFsX2NvbnNvbGVfcG9ydC0+Y2xrKQogCQlzZXJpYWxfY29uc29sZV9wb3J0LT5jbGsgPSBjbGtfZ2V0KE5VTEwsICJtb2R1bGVfY2xrIik7CiAjZW5kaWYKQEAgLTE0MzYsNyArMTQyOCw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0X3NjaV9wb3J0ICpwID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKIAogCWZvciAoaSA9IDA7IHAgJiYgcC0+ZmxhZ3MgIT0gMDsgcCsrLCBpKyspIHsKIAkJc3RydWN0IHNjaV9wb3J0ICpzY2lwb3J0ID0gJnNjaV9wb3J0c1tpXTsKQEAgLTE0NTMsMTIgKzE0NDUsMjIgQEAKIAogCQlzY2lwb3J0LT5wb3J0Lm1hcGJhc2UJPSBwLT5tYXBiYXNlOwogCi0JCS8qCi0JCSAqIEZvciB0aGUgc2ltcGxlIChhbmQgbWFqb3JpdHkgb2YpIGNhc2VzIHdoZXJlIHdlIGRvbid0IG5lZWQKLQkJICogdG8gZG8gYW55IHJlbWFwcGluZywganVzdCBjYXN0IHRoZSBjb29raWUgZGlyZWN0bHkuCi0JCSAqLwotCQlpZiAocC0+bWFwYmFzZSAmJiAhcC0+bWVtYmFzZSAmJiAhKHAtPmZsYWdzICYgVVBGX0lPUkVNQVApKQotCQkJcC0+bWVtYmFzZSA9ICh2b2lkIF9faW9tZW0gKilwLT5tYXBiYXNlOworCQlpZiAocC0+bWFwYmFzZSAmJiAhcC0+bWVtYmFzZSkgeworCQkJaWYgKHAtPmZsYWdzICYgVVBGX0lPUkVNQVApIHsKKwkJCQlwLT5tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHAtPm1hcGJhc2UsIDB4NDApOworCQkJCWlmIChJU19FUlIocC0+bWVtYmFzZSkpIHsKKwkJCQkJcmV0ID0gUFRSX0VSUihwLT5tZW1iYXNlKTsKKwkJCQkJZ290byBlcnJfdW5yZWc7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIEZvciB0aGUgc2ltcGxlIChhbmQgbWFqb3JpdHkgb2YpIGNhc2VzCisJCQkJICogd2hlcmUgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgcmVtYXBwaW5nLAorCQkJCSAqIGp1c3QgY2FzdCB0aGUgY29va2llIGRpcmVjdGx5LgorCQkJCSAqLworCQkJCXAtPm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcC0+bWFwYmFzZTsKKwkJCX0KKwkJfQogCiAJCXNjaXBvcnQtPnBvcnQubWVtYmFzZQk9IHAtPm1lbWJhc2U7CiAKQEAgLTE0NzksNyArMTQ4MSw3IEBACiAJa2dkYl9wdXRjaGFyCT0ga2dkYl9zY2lfcHV0Y2hhcjsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NQVV9GUkVRCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpICYmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQogCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJnNjaV9uYiwgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJDUFUgZnJlcXVlbmN5IG5vdGlmaWVyIHJlZ2lzdGVyZWRcbiIpOwogI2VuZGlmCkBAIC0xNDg5LDYgKzE0OTEsMTIgQEAKICNlbmRpZgogCiAJcmV0dXJuIDA7CisKK2Vycl91bnJlZzoKKwlmb3IgKGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzY2lfdWFydF9kcml2ZXIsICZzY2lfcG9ydHNbaV0ucG9ydCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBzY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggOGEwNzQ5ZS4uN2NkMjhiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTMyMCwxOCArMzIwLDE2IEBACiAjZGVmaW5lIFNDSV9FVkVOVF9XUklURV9XQUtFVVAJMAogCiAjZGVmaW5lIFNDSV9JTihzaXplLCBvZmZzZXQpCQkJCQlcCi0gIHVuc2lnbmVkIGludCBhZGRyID0gcG9ydC0+bWFwYmFzZSArIChvZmZzZXQpOwkJCVwKICAgaWYgKChzaXplKSA9PSA4KSB7CQkJCQkJXAotICAgIHJldHVybiBjdHJsX2luYihhZGRyKTsJCQkJCVwKKyAgICByZXR1cm4gaW9yZWFkOChwb3J0LT5tZW1iYXNlICsgKG9mZnNldCkpOwkJCVwKICAgfSBlbHNlIHsJCQkJCQkJXAotICAgIHJldHVybiBjdHJsX2ludyhhZGRyKTsJCQkJCVwKKyAgICByZXR1cm4gaW9yZWFkMTYocG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCiAgIH0KICNkZWZpbmUgU0NJX09VVChzaXplLCBvZmZzZXQsIHZhbHVlKQkJCQlcCi0gIHVuc2lnbmVkIGludCBhZGRyID0gcG9ydC0+bWFwYmFzZSArIChvZmZzZXQpOwkJCVwKICAgaWYgKChzaXplKSA9PSA4KSB7CQkJCQkJXAotICAgIGN0cmxfb3V0Yih2YWx1ZSwgYWRkcik7CQkJCQlcCisgICAgaW93cml0ZTgodmFsdWUsIHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0KSk7CQkJXAogICB9IGVsc2UgaWYgKChzaXplKSA9PSAxNikgewkJCQkJXAotICAgIGN0cmxfb3V0dyh2YWx1ZSwgYWRkcik7CQkJCQlcCisgICAgaW93cml0ZTE2KHZhbHVlLCBwb3J0LT5tZW1iYXNlICsgKG9mZnNldCkpOwkJCVwKICAgfQogCiAjZGVmaW5lIENQVV9TQ0l4X0ZOUyhuYW1lLCBzY2lfb2Zmc2V0LCBzY2lfc2l6ZSwgc2NpZl9vZmZzZXQsIHNjaWZfc2l6ZSlcCkBAIC03OTEsMTEgKzc4OSwxNiBAQAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQogI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKCgoY2xrKjIpKzE2KmJwcykvKDMyKmJwcyktMSkKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKLSNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoyKSsxNipicHMpLygxNipicHMpLTEpCitzdGF0aWMgaW5saW5lIGludCBzY2Jycl9jYWxjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicHMsIGludCBjbGspCit7CisJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKQorCQlyZXR1cm4gKGNsaysxNipicHMpLygzMipicHMpLTE7CisJZWxzZQorCQlyZXR1cm4gKChjbGsqMikrMTYqYnBzKS8oMTYqYnBzKS0xOworfQorI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgc2NicnJfY2FsYyhwb3J0LCBicHMsIGNsaykKICNlbGlmIGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKQotI2RlZmluZSBTQ0JSUl9WQUxVRShicHMpICgoKENPTkZJR19DUFVfQ0xPQ0sqMTAwMC8zMikvYnBzKS0xKQotI2VsaWYgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCi0jZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcykgKChjdXJyZW50X2NwdV9kYXRhLm1vZHVsZV9jbG9jaysxNipicHMpLygzMipicHMpLTEpCisjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKChjbGsqMTAwMC8zMikvYnBzKS0xKQogI2Vsc2UgLyogR2VuZXJpYyBTSCAqLwogI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKChjbGsrMTYqYnBzKS8oMzIqYnBzKS0xKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKaW5kZXggYjczZTNjMC4uZDUyNzZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYwpAQCAtNjEsNyArNjEsNyBAQAogI2RlZmluZSBTTl9TQUxfQlVGRkVSX1NJWkUgKDY0ICogKDEgPDwgMTApKQogCiAjZGVmaW5lIFNOX1NBTF9VQVJUX0ZJRk9fREVQVEggMTYKLSNkZWZpbmUgU05fU0FMX1VBUlRfRklGT19TUEVFRF9DUFMgOTYwMC8xMAorI2RlZmluZSBTTl9TQUxfVUFSVF9GSUZPX1NQRUVEX0NQUyAoOTYwMC8xMCkKIAogLyogc25fdHJhbnNtaXRfY2hhcnMoKSBjYWxsaW5nIGFyZ3MgKi8KICNkZWZpbmUgVFJBTlNNSVRfQlVGRkVSRUQJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKaW5kZXggNTM5YzkzMy4uMzE1YTkzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0NQTSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IE5SX0lSUVMpCisJaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBucl9pcnFzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChzZXItPmJhdWRfYmFzZSA8IDk2MDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL01ha2VmaWxlIGIvZHJpdmVycy9zaC9NYWtlZmlsZQppbmRleCBhOTZmNGE4Li42YTAyNWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2gvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgU3VwZXJIIHNwZWNpZmljIGRyaXZlcnMuCiAjCi0KIG9iai0kKENPTkZJR19TVVBFUkhZV0FZKQkrPSBzdXBlcmh5d2F5Lwogb2JqLSQoQ09ORklHX01BUExFKQkJKz0gbWFwbGUvCitvYmoteQkJCQkrPSBpbnRjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvaW50Yy5jIGIvZHJpdmVycy9zaC9pbnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkMjRjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2gvaW50Yy5jCkBAIC0wLDAgKzEsNzEzIEBACisvKgorICogU2hhcmVkIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGZvciBJUFIgYW5kIElOVEMyIHR5cGVzIG9mIElSUXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE1hZ251cyBEYW1tCisgKgorICogQmFzZWQgb24gaW50YzIuYyBhbmQgaXByLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgIE5paWJlIFl1dGFrYSAmIFRha2VzaGkgWWFlZ2FzaGkKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgS2F6dW1vdG8gS29qaW1hCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2hfaW50Yy5oPgorCisjZGVmaW5lIF9JTlRDX01LKGZuLCBtb2RlLCBhZGRyX2UsIGFkZHJfZCwgd2lkdGgsIHNoaWZ0KSBcCisJKChzaGlmdCkgfCAoKHdpZHRoKSA8PCA1KSB8ICgoZm4pIDw8IDkpIHwgKChtb2RlKSA8PCAxMykgfCBcCisJICgoYWRkcl9lKSA8PCAxNikgfCAoKGFkZHJfZCA8PCAyNCkpKQorCisjZGVmaW5lIF9JTlRDX1NISUZUKGgpIChoICYgMHgxZikKKyNkZWZpbmUgX0lOVENfV0lEVEgoaCkgKChoID4+IDUpICYgMHhmKQorI2RlZmluZSBfSU5UQ19GTihoKSAoKGggPj4gOSkgJiAweGYpCisjZGVmaW5lIF9JTlRDX01PREUoaCkgKChoID4+IDEzKSAmIDB4NykKKyNkZWZpbmUgX0lOVENfQUREUl9FKGgpICgoaCA+PiAxNikgJiAweGZmKQorI2RlZmluZSBfSU5UQ19BRERSX0QoaCkgKChoID4+IDI0KSAmIDB4ZmYpCisKK3N0cnVjdCBpbnRjX2hhbmRsZV9pbnQgeworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBoYW5kbGU7Cit9OworCitzdHJ1Y3QgaW50Y19kZXNjX2ludCB7CisJdW5zaWduZWQgbG9uZyAqcmVnOworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBsb25nICpzbXA7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgbnJfcmVnOworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKnByaW87CisJdW5zaWduZWQgaW50IG5yX3ByaW87CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqc2Vuc2U7CisJdW5zaWduZWQgaW50IG5yX3NlbnNlOworCXN0cnVjdCBpcnFfY2hpcCBjaGlwOworfTsKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgSVNfU01QKHgpIHguc21wCisjZGVmaW5lIElOVENfUkVHKGQsIHgsIGMpIChkLT5yZWdbKHgpXSArICgoZC0+c21wWyh4KV0gJiAweGZmKSAqIGMpKQorI2RlZmluZSBTTVBfTlIoZCwgeCkgKChkLT5zbXBbKHgpXSA+PiA4KSA/IChkLT5zbXBbKHgpXSA+PiA4KSA6IDEpCisjZWxzZQorI2RlZmluZSBJU19TTVAoeCkgMAorI2RlZmluZSBJTlRDX1JFRyhkLCB4LCBjKSAoZC0+cmVnWyh4KV0pCisjZGVmaW5lIFNNUF9OUihkLCB4KSAxCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGludCBpbnRjX3ByaW9fbGV2ZWxbTlJfSVJRU107IC8qIGZvciBub3cgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFja19oYW5kbGVbTlJfSVJRU107CisjZW5kaWYKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZ2V0X2ludGNfZGVzYyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcChpcnEpOworCXJldHVybiAodm9pZCAqKSgoY2hhciAqKWNoaXAgLSBvZmZzZXRvZihzdHJ1Y3QgaW50Y19kZXNjX2ludCwgY2hpcCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZXRfZmllbGQodW5zaWduZWQgaW50IHZhbHVlLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGZpZWxkX3ZhbHVlLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBfSU5UQ19XSURUSChoYW5kbGUpOworCXVuc2lnbmVkIGludCBzaGlmdCA9IF9JTlRDX1NISUZUKGhhbmRsZSk7CisKKwl2YWx1ZSAmPSB+KCgoMSA8PCB3aWR0aCkgLSAxKSA8PCBzaGlmdCk7CisJdmFsdWUgfD0gZmllbGRfdmFsdWUgPDwgc2hpZnQ7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV84KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19yYXdfd3JpdGViKHNldF9maWVsZCgwLCBkYXRhLCBoKSwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlXzE2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19yYXdfd3JpdGV3KHNldF9maWVsZCgwLCBkYXRhLCBoKSwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlXzMyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19yYXdfd3JpdGVsKHNldF9maWVsZCgwLCBkYXRhLCBoKSwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV84KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfd3JpdGViKHNldF9maWVsZChfX3Jhd19yZWFkYihhZGRyKSwgZGF0YSwgaCksIGFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbW9kaWZ5XzE2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfd3JpdGV3KHNldF9maWVsZChfX3Jhd19yZWFkdyhhZGRyKSwgZGF0YSwgaCksIGFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbW9kaWZ5XzMyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfd3JpdGVsKHNldF9maWVsZChfX3Jhd19yZWFkbChhZGRyKSwgZGF0YSwgaCksIGFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworZW51bSB7CVJFR19GTl9FUlIgPSAwLCBSRUdfRk5fV1JJVEVfQkFTRSA9IDEsIFJFR19GTl9NT0RJRllfQkFTRSA9IDUgfTsKKworc3RhdGljIHZvaWQgKCppbnRjX3JlZ19mbnNbXSkodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBoLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKSA9IHsKKwlbUkVHX0ZOX1dSSVRFX0JBU0UgKyAwXSA9IHdyaXRlXzgsCisJW1JFR19GTl9XUklURV9CQVNFICsgMV0gPSB3cml0ZV8xNiwKKwlbUkVHX0ZOX1dSSVRFX0JBU0UgKyAzXSA9IHdyaXRlXzMyLAorCVtSRUdfRk5fTU9ESUZZX0JBU0UgKyAwXSA9IG1vZGlmeV84LAorCVtSRUdfRk5fTU9ESUZZX0JBU0UgKyAxXSA9IG1vZGlmeV8xNiwKKwlbUkVHX0ZOX01PRElGWV9CQVNFICsgM10gPSBtb2RpZnlfMzIsCit9OworCitlbnVtIHsJTU9ERV9FTkFCTEVfUkVHID0gMCwgLyogQml0KHMpIHNldCAtPiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCU1PREVfTUFTS19SRUcsICAgICAgIC8qIEJpdChzKSBzZXQgLT4gaW50ZXJydXB0IGRpc2FibGVkICovCisJTU9ERV9EVUFMX1JFRywgICAgICAgLyogVHdvIHJlZ2lzdGVycywgc2V0IGJpdCB0byBlbmFibGUgLyBkaXNhYmxlICovCisJTU9ERV9QUklPX1JFRywgICAgICAgLyogUHJpb3JpdHkgdmFsdWUgd3JpdHRlbiB0byBlbmFibGUgaW50ZXJydXB0ICovCisJTU9ERV9QQ0xSX1JFRywgICAgICAgLyogQWJvdmUgcGx1cyBhbGwgYml0cyBzZXQgdG8gZGlzYWJsZSBpbnRlcnJ1cHQgKi8KK307CisKK3N0YXRpYyB2b2lkIGludGNfbW9kZV9maWVsZCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkgICAgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nKSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWZuKGFkZHIsIGhhbmRsZSwgKCgxIDw8IF9JTlRDX1dJRFRIKGhhbmRsZSkpIC0gMSkpOworfQorCitzdGF0aWMgdm9pZCBpbnRjX21vZGVfemVybyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKKwkJCSAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWZuKGFkZHIsIGhhbmRsZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGNfbW9kZV9wcmlvKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJICAgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nKSwKKwkJCSAgIHVuc2lnbmVkIGludCBpcnEpCit7CisJZm4oYWRkciwgaGFuZGxlLCBpbnRjX3ByaW9fbGV2ZWxbaXJxXSk7Cit9CisKK3N0YXRpYyB2b2lkICgqaW50Y19lbmFibGVfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkJIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nKSwKKwkJCQkgdW5zaWduZWQgaW50IGlycSkgPSB7CisJW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfTUFTS19SRUddID0gaW50Y19tb2RlX3plcm8sCisJW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV9wcmlvLAorCVtNT0RFX1BDTFJfUkVHXSA9IGludGNfbW9kZV9wcmlvLAorfTsKKworc3RhdGljIHZvaWQgKCppbnRjX2Rpc2FibGVfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJCSAgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyksCisJCQkJICB1bnNpZ25lZCBpbnQgaXJxKSA9IHsKKwlbTU9ERV9FTkFCTEVfUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9EVUFMX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfUFJJT19SRUddID0gaW50Y19tb2RlX3plcm8sCisJW01PREVfUENMUl9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9pbnRjX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRShoYW5kbGUpKTsgY3B1KyspIHsKKwkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRShoYW5kbGUpLCBjcHUpOworCQlpbnRjX2VuYWJsZV9mbnNbX0lOVENfTU9ERShoYW5kbGUpXShhZGRyLCBoYW5kbGUsIGludGNfcmVnX2Zuc1wKKwkJCQkJCSAgICBbX0lOVENfRk4oaGFuZGxlKV0sIGlycSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRjX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9pbnRjX2VuYWJsZShpcnEsICh1bnNpZ25lZCBsb25nKWdldF9pcnFfY2hpcF9kYXRhKGlycSkpOworfQorCitzdGF0aWMgdm9pZCBpbnRjX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGhhbmRsZSA9ICh1bnNpZ25lZCBsb25nKSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBTTVBfTlIoZCwgX0lOVENfQUREUl9EKGhhbmRsZSkpOyBjcHUrKykgeworCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIGNwdSk7CisJCWludGNfZGlzYWJsZV9mbnNbX0lOVENfTU9ERShoYW5kbGUpXShhZGRyLCBoYW5kbGUsaW50Y19yZWdfZm5zXAorCQkJCQkJICAgICBbX0lOVENfRk4oaGFuZGxlKV0sIGlycSk7CisJfQorfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCitzdGF0aWMgdm9pZCBpbnRjX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJdW5zaWduZWQgbG9uZyBoYW5kbGUgPSBhY2tfaGFuZGxlW2lycV07CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaW50Y19kaXNhYmxlKGlycSk7CisKKwkvKiByZWFkIHJlZ2lzdGVyIGFuZCB3cml0ZSB6ZXJvIG9ubHkgdG8gdGhlIGFzc29jYWl0ZWQgYml0ICovCisKKwlpZiAoaGFuZGxlKSB7CisJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0QoaGFuZGxlKSwgMCk7CisJCXN3aXRjaCAoX0lOVENfRk4oaGFuZGxlKSkgeworCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDA6CS8qIDhiaXQgKi8KKwkJCV9fcmF3X3JlYWRiKGFkZHIpOworCQkJX19yYXdfd3JpdGViKDB4ZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7CisJCQlicmVhazsKKwkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAxOgkvKiAxNmJpdCAqLworCQkJX19yYXdfcmVhZHcoYWRkcik7CisJCQlfX3Jhd193cml0ZXcoMHhmZmZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMzoJLyogMzJiaXQgKi8KKwkJCV9fcmF3X3JlYWRsKGFkZHIpOworCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmludGNfZmluZF9pcnEoc3RydWN0IGludGNfaGFuZGxlX2ludCAqaHAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG5yX2hwLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGk7CisKKwkvKiB0aGlzIGRvZXNuJ3Qgc2NhbGUgd2VsbCwgYnV0Li4uCisJICoKKwkgKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNlcmFpbiB1bmNvbW1vbgorCSAqIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRjX3NldF9wcmlvcml0eSgpIGFuZCBpbnRjX3NldF9zZW5zZSgpCisJICogYW5kIGluIHRob3NlIHJhcmUgY2FzZXMgcGVyZm9ybWFuY2UgZG9lc24ndCBtYXR0ZXIgdGhhdCBtdWNoLgorCSAqIGtlZXBpbmcgdGhlIG1lbW9yeSBmb290cHJpbnQgbG93IGlzIG1vcmUgaW1wb3J0YW50LgorCSAqCisJICogb25lIHJhdGhlciBzaW1wbGUgd2F5IHRvIHNwZWVkIHRoaXMgdXAgYW5kIHN0aWxsIGtlZXAgdGhlCisJICogbWVtb3J5IGZvb3RwcmludCBkb3duIGlzIHRvIG1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgc29ydGVkCisJICogYW5kIHRoZW4gcGVyZm9ybSBhIGJpc2VjdCB0byBsb29rdXAgdGhlIGlycS4KKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBucl9ocDsgaSsrKSB7CisJCWlmICgoaHAgKyBpKS0+aXJxICE9IGlycSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBocCArIGk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbykKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppaHA7CisKKwlpZiAoIWludGNfcHJpb19sZXZlbFtpcnFdIHx8IHByaW8gPD0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpaHAgPSBpbnRjX2ZpbmRfaXJxKGQtPnByaW8sIGQtPm5yX3ByaW8sIGlycSk7CisJaWYgKGlocCkgeworCQlpZiAocHJpbyA+PSAoMSA8PCBfSU5UQ19XSURUSChpaHAtPmhhbmRsZSkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaW50Y19wcmlvX2xldmVsW2lycV0gPSBwcmlvOworCisJCS8qCisJCSAqIG9ubHkgc2V0IHNlY29uZGFyeSBtYXNraW5nIG1ldGhvZCBkaXJlY3RseQorCQkgKiBwcmltYXJ5IG1hc2tpbmcgbWV0aG9kIGlzIHVzaW5nIGludGNfcHJpb19sZXZlbFtpcnFdCisJCSAqIHByaW9yaXR5IGxldmVsIHdpbGwgYmUgc2V0IGR1cmluZyBuZXh0IGVuYWJsZSgpCisJCSAqLworCisJCWlmIChfSU5UQ19GTihpaHAtPmhhbmRsZSkgIT0gUkVHX0ZOX0VSUikKKwkJCV9pbnRjX2VuYWJsZShpcnEsIGlocC0+aGFuZGxlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgVkFMSUQoeCkgKHggfCAweDgwKQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBpbnRjX2lycV9zZW5zZV90YWJsZVtJUlFfVFlQRV9TRU5TRV9NQVNLICsgMV0gPSB7CisJW0lSUV9UWVBFX0VER0VfRkFMTElOR10gPSBWQUxJRCgwKSwKKwlbSVJRX1RZUEVfRURHRV9SSVNJTkddID0gVkFMSUQoMSksCisJW0lSUV9UWVBFX0xFVkVMX0xPV10gPSBWQUxJRCgyKSwKKwkvKiBTSDc3MDYsIFNINzcwNyBhbmQgU0g3NzA5IGRvIG5vdCBzdXBwb3J0IGhpZ2ggbGV2ZWwgdHJpZ2dlcmVkICovCisjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgJiYgXAorICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQorCVtJUlFfVFlQRV9MRVZFTF9ISUdIXSA9IFZBTElEKDMpLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IGludGNfc2V0X3NlbnNlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOworCXVuc2lnbmVkIGNoYXIgdmFsdWUgPSBpbnRjX2lycV9zZW5zZV90YWJsZVt0eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTS107CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqaWhwOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWlmICghdmFsdWUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWhwID0gaW50Y19maW5kX2lycShkLT5zZW5zZSwgZC0+bnJfc2Vuc2UsIGlycSk7CisJaWYgKGlocCkgeworCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGlocC0+aGFuZGxlKSwgMCk7CisJCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLCB2YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX2dldF9yZWcoc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBkLT5ucl9yZWc7IGsrKykgeworCQlpZiAoZC0+cmVnW2tdID09IGFkZHJlc3MpCisJCQlyZXR1cm4gazsKKwl9CisKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludGNfZW51bSBfX2luaXQgaW50Y19ncnBfaWQoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkgICAgaW50Y19lbnVtIGVudW1faWQpCit7CisJc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ncm91cHM7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBnICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2dyb3VwczsgaSsrKSB7CisJCWcgPSBkZXNjLT5ncm91cHMgKyBpOworCisJCWZvciAoaiA9IDA7IGctPmVudW1faWRzW2pdOyBqKyspIHsKKwkJCWlmIChnLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXR1cm4gZy0+ZW51bV9pZDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3sKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbXIgPSBkZXNjLT5tYXNrX3JlZ3M7CisJdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOworCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOworCisJZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfbWFza19yZWdzOyBpKyspIHsKKwkJbXIgPSBkZXNjLT5tYXNrX3JlZ3MgKyBpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7IGorKykgeworCQkJaWYgKG1yLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobXItPnNldF9yZWcgJiYgbXItPmNscl9yZWcpIHsKKwkJCQlmbiA9IFJFR19GTl9XUklURV9CQVNFOworCQkJCW1vZGUgPSBNT0RFX0RVQUxfUkVHOworCQkJCXJlZ19lID0gbXItPmNscl9yZWc7CisJCQkJcmVnX2QgPSBtci0+c2V0X3JlZzsKKwkJCX0gZWxzZSB7CisJCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7CisJCQkJaWYgKG1yLT5zZXRfcmVnKSB7CisJCQkJCW1vZGUgPSBNT0RFX0VOQUJMRV9SRUc7CisJCQkJCXJlZ19lID0gbXItPnNldF9yZWc7CisJCQkJCXJlZ19kID0gbXItPnNldF9yZWc7CisJCQkJfSBlbHNlIHsKKwkJCQkJbW9kZSA9IE1PREVfTUFTS19SRUc7CisJCQkJCXJlZ19lID0gbXItPmNscl9yZWc7CisJCQkJCXJlZ19kID0gbXItPmNscl9yZWc7CisJCQkJfQorCQkJfQorCisJCQlmbiArPSAobXItPnJlZ193aWR0aCA+PiAzKSAtIDE7CisJCQlyZXR1cm4gX0lOVENfTUsoZm4sIG1vZGUsCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZSksCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZCksCisJCQkJCTEsCisJCQkJCShtci0+cmVnX3dpZHRoIC0gMSkgLSBqKTsKKwkJfQorCX0KKworCWlmIChkb19ncnBzKQorCQlyZXR1cm4gaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgaW50Y19ncnBfaWQoZGVzYywgZW51bV9pZCksIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQoreworCXN0cnVjdCBpbnRjX3ByaW9fcmVnICpwciA9IGRlc2MtPnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGUsIGJpdDsKKwl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKKworCWZvciAoaSA9IDA7IHByICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7CisJCXByID0gZGVzYy0+cHJpb19yZWdzICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwci0+ZW51bV9pZHMpOyBqKyspIHsKKwkJCWlmIChwci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHByLT5zZXRfcmVnICYmIHByLT5jbHJfcmVnKSB7CisJCQkJZm4gPSBSRUdfRk5fV1JJVEVfQkFTRTsKKwkJCQltb2RlID0gTU9ERV9QQ0xSX1JFRzsKKwkJCQlyZWdfZSA9IHByLT5zZXRfcmVnOworCQkJCXJlZ19kID0gcHItPmNscl9yZWc7CisJCQl9IGVsc2UgeworCQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOworCQkJCW1vZGUgPSBNT0RFX1BSSU9fUkVHOworCQkJCWlmICghcHItPnNldF9yZWcpCisJCQkJCUJVRygpOworCQkJCXJlZ19lID0gcHItPnNldF9yZWc7CisJCQkJcmVnX2QgPSBwci0+c2V0X3JlZzsKKwkJCX0KKworCQkJZm4gKz0gKHByLT5yZWdfd2lkdGggPj4gMykgLSAxOworCisJCQlCVUdfT04oKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCA+IHByLT5yZWdfd2lkdGgpOworCisJCQliaXQgPSBwci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGgpOworCisJCQlyZXR1cm4gX0lOVENfTUsoZm4sIG1vZGUsCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZSksCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZCksCisJCQkJCXByLT5maWVsZF93aWR0aCwgYml0KTsKKwkJfQorCX0KKworCWlmIChkb19ncnBzKQorCQlyZXR1cm4gaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgaW50Y19ncnBfaWQoZGVzYywgZW51bV9pZCksIDApOworCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfYWNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICBpbnRjX2VudW0gZW51bV9pZCkKK3sKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbXIgPSBkZXNjLT5hY2tfcmVnczsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGU7CisJdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7CisKKwlmb3IgKGkgPSAwOyBtciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKSB7CisJCW1yID0gZGVzYy0+YWNrX3JlZ3MgKyBpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7IGorKykgeworCQkJaWYgKG1yLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKKwkJCW1vZGUgPSBNT0RFX0VOQUJMRV9SRUc7CisJCQlyZWdfZSA9IG1yLT5zZXRfcmVnOworCQkJcmVnX2QgPSBtci0+c2V0X3JlZzsKKworCQkJZm4gKz0gKG1yLT5yZWdfd2lkdGggPj4gMykgLSAxOworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAorCQkJCQkxLAorCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3NlbnNlX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgIGludGNfZW51bSBlbnVtX2lkKQoreworCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc3IgPSBkZXNjLT5zZW5zZV9yZWdzOworCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgYml0OworCisJZm9yIChpID0gMDsgc3IgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfc2Vuc2VfcmVnczsgaSsrKSB7CisJCXNyID0gZGVzYy0+c2Vuc2VfcmVncyArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc3ItPmVudW1faWRzKTsgaisrKSB7CisJCQlpZiAoc3ItPmVudW1faWRzW2pdICE9IGVudW1faWQpCisJCQkJY29udGludWU7CisKKwkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOworCQkJZm4gKz0gKHNyLT5yZWdfd2lkdGggPj4gMykgLSAxOworCisJCQlCVUdfT04oKGogKyAxKSAqIHNyLT5maWVsZF93aWR0aCA+IHNyLT5yZWdfd2lkdGgpOworCisJCQliaXQgPSBzci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBzci0+ZmllbGRfd2lkdGgpOworCisJCQlyZXR1cm4gX0lOVENfTUsoZm4sIDAsIGludGNfZ2V0X3JlZyhkLCBzci0+cmVnKSwKKwkJCQkJMCwgc3ItPmZpZWxkX3dpZHRoLCBiaXQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbnRjX3JlZ2lzdGVyX2lycShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCSAgICAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJICAgICBpbnRjX2VudW0gZW51bV9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqaHA7CisJdW5zaWduZWQgaW50IGRhdGFbMl0sIHByaW1hcnk7CisKKwkvKiBQcmVmZXIgc2luZ2xlIGludGVycnVwdCBzb3VyY2UgYml0bWFwIG92ZXIgb3RoZXIgY29tYmluYXRpb25zOgorCSAqIDEuIGJpdG1hcCwgc2luZ2xlIGludGVycnVwdCBzb3VyY2UKKwkgKiAyLiBwcmlvcml0eSwgc2luZ2xlIGludGVycnVwdCBzb3VyY2UKKwkgKiAzLiBiaXRtYXAsIG11bHRpcGxlIGludGVycnVwdCBzb3VyY2VzIChncm91cHMpCisJICogNC4gcHJpb3JpdHksIG11bHRpcGxlIGludGVycnVwdCBzb3VyY2VzIChncm91cHMpCisJICovCisKKwlkYXRhWzBdID0gaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMCk7CisJZGF0YVsxXSA9IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDApOworCisJcHJpbWFyeSA9IDA7CisJaWYgKCFkYXRhWzBdICYmIGRhdGFbMV0pCisJCXByaW1hcnkgPSAxOworCisJZGF0YVswXSA9IGRhdGFbMF0gPyBkYXRhWzBdIDogaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CisJZGF0YVsxXSA9IGRhdGFbMV0gPyBkYXRhWzFdIDogaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CisKKwlpZiAoIWRhdGFbcHJpbWFyeV0pCisJCXByaW1hcnkgXj0gMTsKKworCUJVR19PTighZGF0YVtwcmltYXJ5XSk7IC8qIG11c3QgaGF2ZSBwcmltYXJ5IG1hc2tpbmcgbWV0aG9kICovCisKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZkLT5jaGlwLAorCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOworCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgKHZvaWQgKilkYXRhW3ByaW1hcnldKTsKKworCS8qIHNldCBwcmlvcml0eSBsZXZlbAorCSAqIC0gdGhpcyBuZWVkcyB0byBiZSBhdCBsZWFzdCAyIGZvciA1LWJpdCBwcmlvcml0aWVzIG9uIDc3ODAKKwkgKi8KKwlpbnRjX3ByaW9fbGV2ZWxbaXJxXSA9IDI7CisKKwkvKiBlbmFibGUgc2Vjb25kYXJ5IG1hc2tpbmcgbWV0aG9kIGlmIHByZXNlbnQgKi8KKwlpZiAoZGF0YVshcHJpbWFyeV0pCisJCV9pbnRjX2VuYWJsZShpcnEsIGRhdGFbIXByaW1hcnldKTsKKworCS8qIGFkZCBpcnEgdG8gZC0+cHJpbyBsaXN0IGlmIHByaW9yaXR5IGlzIGF2YWlsYWJsZSAqLworCWlmIChkYXRhWzFdKSB7CisJCWhwID0gZC0+cHJpbyArIGQtPm5yX3ByaW87CisJCWhwLT5pcnEgPSBpcnE7CisJCWhwLT5oYW5kbGUgPSBkYXRhWzFdOworCisJCWlmIChwcmltYXJ5KSB7CisJCQkvKgorCQkJICogb25seSBzZWNvbmRhcnkgcHJpb3JpdHkgc2hvdWxkIGFjY2VzcyByZWdpc3RlcnMsIHNvCisJCQkgKiBzZXQgX0lOVENfRk4oaCkgPSBSRUdfRk5fRVJSIGZvciBpbnRjX3NldF9wcmlvcml0eSgpCisJCQkgKi8KKworCQkJaHAtPmhhbmRsZSAmPSB+X0lOVENfTUsoMHgwZiwgMCwgMCwgMCwgMCwgMCk7CisJCQlocC0+aGFuZGxlIHw9IF9JTlRDX01LKFJFR19GTl9FUlIsIDAsIDAsIDAsIDAsIDApOworCQl9CisJCWQtPm5yX3ByaW8rKzsKKwl9CisKKwkvKiBhZGQgaXJxIHRvIGQtPnNlbnNlIGxpc3QgaWYgc2Vuc2UgaXMgYXZhaWxhYmxlICovCisJZGF0YVswXSA9IGludGNfc2Vuc2VfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKKwlpZiAoZGF0YVswXSkgeworCQkoZC0+c2Vuc2UgKyBkLT5ucl9zZW5zZSktPmlycSA9IGlycTsKKwkJKGQtPnNlbnNlICsgZC0+bnJfc2Vuc2UpLT5oYW5kbGUgPSBkYXRhWzBdOworCQlkLT5ucl9zZW5zZSsrOworCX0KKworCS8qIGlycSBzaG91bGQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworCWQtPmNoaXAubWFzayhpcnEpOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisJaWYgKGRlc2MtPmFja19yZWdzKQorCQlhY2tfaGFuZGxlW2lycV0gPSBpbnRjX2Fja19kYXRhKGRlc2MsIGQsIGVudW1faWQpOworI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHNhdmVfcmVnKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY250LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbHVlLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgc21wKQoreworCWlmICh2YWx1ZSkgeworCQlkLT5yZWdbY250XSA9IHZhbHVlOworI2lmZGVmIENPTkZJR19TTVAKKwkJZC0+c21wW2NudF0gPSBzbXA7CisjZW5kaWYKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGksIGssIHNtcDsKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZDsKKworCWQgPSBhbGxvY19ib290bWVtKHNpemVvZigqZCkpOworCisJZC0+bnJfcmVnID0gZGVzYy0+bWFza19yZWdzID8gZGVzYy0+bnJfbWFza19yZWdzICogMiA6IDA7CisJZC0+bnJfcmVnICs9IGRlc2MtPnByaW9fcmVncyA/IGRlc2MtPm5yX3ByaW9fcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBkZXNjLT5zZW5zZV9yZWdzID8gZGVzYy0+bnJfc2Vuc2VfcmVncyA6IDA7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKwlkLT5ucl9yZWcgKz0gZGVzYy0+YWNrX3JlZ3MgPyBkZXNjLT5ucl9hY2tfcmVncyA6IDA7CisjZW5kaWYKKwlkLT5yZWcgPSBhbGxvY19ib290bWVtKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+cmVnKSk7CisjaWZkZWYgQ09ORklHX1NNUAorCWQtPnNtcCA9IGFsbG9jX2Jvb3RtZW0oZC0+bnJfcmVnICogc2l6ZW9mKCpkLT5zbXApKTsKKyNlbmRpZgorCWsgPSAwOworCisJaWYgKGRlc2MtPm1hc2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfbWFza19yZWdzOyBpKyspIHsKKwkJCXNtcCA9IElTX1NNUChkZXNjLT5tYXNrX3JlZ3NbaV0pOworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5tYXNrX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLmNscl9yZWcsIHNtcCk7CisJCX0KKwl9CisKKwlpZiAoZGVzYy0+cHJpb19yZWdzKSB7CisJCWQtPnByaW8gPSBhbGxvY19ib290bWVtKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnByaW8pKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfcHJpb19yZWdzOyBpKyspIHsKKwkJCXNtcCA9IElTX1NNUChkZXNjLT5wcmlvX3JlZ3NbaV0pOworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5wcmlvX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLmNscl9yZWcsIHNtcCk7CisJCX0KKwl9CisKKwlpZiAoZGVzYy0+c2Vuc2VfcmVncykgeworCQlkLT5zZW5zZSA9IGFsbG9jX2Jvb3RtZW0oZGVzYy0+bnJfdmVjdG9ycyAqIHNpemVvZigqZC0+c2Vuc2UpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfc2Vuc2VfcmVnczsgaSsrKSB7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnNlbnNlX3JlZ3NbaV0ucmVnLCAwKTsKKwkJfQorCX0KKworCWQtPmNoaXAubmFtZSA9IGRlc2MtPm5hbWU7CisJZC0+Y2hpcC5tYXNrID0gaW50Y19kaXNhYmxlOworCWQtPmNoaXAudW5tYXNrID0gaW50Y19lbmFibGU7CisJZC0+Y2hpcC5tYXNrX2FjayA9IGludGNfZGlzYWJsZTsKKwlkLT5jaGlwLnNldF90eXBlID0gaW50Y19zZXRfc2Vuc2U7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKwlpZiAoZGVzYy0+YWNrX3JlZ3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX2Fja19yZWdzOyBpKyspCisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPmFja19yZWdzW2ldLnNldF9yZWcsIDApOworCisJCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX21hc2tfYWNrOworCX0KKyNlbmRpZgorCisJQlVHX09OKGsgPiAyNTYpOyAvKiBfSU5UQ19BRERSX0UoKSBhbmQgX0lOVENfQUREUl9EKCkgYXJlIDggYml0cyAqLworCisJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ZlY3RvcnM7IGkrKykgeworCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0ID0gZGVzYy0+dmVjdG9ycyArIGk7CisKKwkJaW50Y19yZWdpc3Rlcl9pcnEoZGVzYywgZCwgdmVjdC0+ZW51bV9pZCwgZXZ0MmlycSh2ZWN0LT52ZWN0KSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY1NGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTAsMCArMSw0OCBAQAorbWVudWNvbmZpZyBTVEFHSU5HCisJYm9vbCAiU3RhZ2luZyBkcml2ZXJzIgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2VsZWN0IGEgbnVtYmVyIG9mIGRyaXZlcnMgdGhhdCBhcmUKKwkgIG5vdCBvZiB0aGUgIm5vcm1hbCIgTGludXgga2VybmVsIHF1YWxpdHkgbGV2ZWwuICBUaGVzZSBkcml2ZXJzCisJICBhcmUgcGxhY2VkIGhlcmUgaW4gb3JkZXIgdG8gZ2V0IGEgd2lkZXIgYXVkaWVuY2UgZm9yIHVzZSBvZgorCSAgdGhlbS4gIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgZHJpdmVycyBhcmUgdW5kZXIgaGVhdnkKKwkgIGRldmVsb3BtZW50LCBtYXkgb3IgbWF5IG5vdCB3b3JrLCBhbmQgbWF5IGNvbnRhaW4gdXNlcnNwYWNlCisJICBpbnRlcmZhY2VzIHRoYXQgbW9zdCBsaWtlbHkgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBuZWFyCisJICBmdXR1cmUuCisKKwkgIFVzaW5nIGFueSBvZiB0aGVzZSBkcml2ZXJzIHdpbGwgdGFpbnQgeW91ciBrZXJuZWwgd2hpY2ggbWlnaHQKKwkgIGFmZmVjdCBzdXBwb3J0IG9wdGlvbnMgZnJvbSBib3RoIHRoZSBjb21tdW5pdHksIGFuZCB2YXJpb3VzCisJICBjb21tZXJjaWFsIHN1cHBvcnQgb3JnaW5pemF0aW9ucy4KKworCSAgSWYgeW91IHdpc2ggdG8gd29yayBvbiB0aGVzZSBkcml2ZXJzLCB0byBoZWxwIGltcHJvdmUgdGhlbSwgb3IKKwkgIHRvIHJlcG9ydCBwcm9ibGVtcyB5b3UgaGF2ZSB3aXRoIHRoZW0sIHBsZWFzZSBzZWUgdGhlCisJICBkcml2ZXJfbmFtZS5SRUFETUUgZmlsZSBpbiB0aGUgZHJpdmVycy9zdGFnaW5nLyBkaXJlY3RvcnkgdG8KKwkgIHNlZSB3aGF0IG5lZWRzIHRvIGJlIHdvcmtlZCBvbiwgYW5kIHdobyB0byBjb250YWN0LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS4KKworaWYgU1RBR0lORworCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ldDEzMXgvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWU0MDAwL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZWNoby9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2NoL0tjb25maWciCisKK2VuZGlmICMgU1RBR0lORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzRkNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSwxNiBAQAorIyBNYWtlZmlsZSBmb3Igc3RhZ2luZyBkaXJlY3RvcnkKKworIyBmaXggZm9yIGJ1aWxkIHN5c3RlbSBidWcuLi4KK29iai0kKENPTkZJR19TVEFHSU5HKQkJKz0gc3RhZ2luZy5vCisKK29iai0kKENPTkZJR19FVDEzMVgpCQkrPSBldDEzMXgvCitvYmotJChDT05GSUdfU0xJQ09TUykJCSs9IHNsaWNvc3MvCitvYmotJChDT05GSUdfU1hHKQkJKz0gc3hnLworb2JqLSQoQ09ORklHX01FNDAwMCkJCSs9IG1lNDAwMC8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDcpCSs9IGdvNzAwNy8KK29iai0kKENPTkZJR19VU0JfSVBfQ09NTU9OKQkrPSB1c2JpcC8KK29iai0kKENPTkZJR19XMzVVTkQpCQkrPSB3aW5ib25kLworb2JqLSQoQ09ORklHX1BSSVNNMl9VU0IpCSs9IHdsYW4tbmcvCitvYmotJChDT05GSUdfRUNITykJCSs9IGVjaG8vCitvYmotJChDT05GSUdfVVNCX0FUTUVMKQkJKz0gYXQ3Nl91c2IvCitvYmotJChDT05GSUdfUE9DSCkJCSs9IHBvY2gvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDZmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK2NvbmZpZyBVU0JfQVRNRUwKKwl0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MDMvYXQ3NmM1MDUvYXQ3NmM1MDVhIFVTQiBjYXJkcyIKKwlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgVVNCCisJZGVmYXVsdCBOCisJc2VsZWN0IEZXX0xPQURFUgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBVU0IgV2lyZWxlc3MgZGV2aWNlcyB1c2luZyBBdG1lbCBhdDc2YzUwMywKKwkgIGF0NzZjNTA1IG9yIGF0NzZjNTA1YSBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ3ZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19VU0JfQVRNRUwpCQkrPSBhdDc2X3VzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTFjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETwpAQCAtMCwwICsxLDIgQEAKK3Jld3JpdGUgdGhlIGRyaXZlciB0byB1c2UgdGhlIHByb3BlciBpbi1rZXJuZWwgd2lyZWxlc3Mgc3RhY2sKK2luc3RlYWQgb2YgdXNpbmcgaXRzIG93bi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0ZTJiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jCkBAIC0wLDAgKzEsNTU2MSBAQAorLyoKKyAqIGF0NzZjNTAzL2F0NzZjNTA1IFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgLSAyMDAzIE9saXZlciBLdXJ0aAorICogQ29weXJpZ2h0IChjKSAyMDA0IEpvZXJnIEFsYmVydCA8am9lcmcuYWxiZXJ0QGdteC5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBOaWNrIEpvbmVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgQmFsaW50IFNlZWJlciA8bjBfNXA0bV9wMTM0NTNAaG90bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgR3VpZG8gR3VlbnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCZXJsaW9zIGRyaXZlciBmb3IgV0xBTiBVU0IgZGV2aWNlcyBiYXNlZCBvbiB0aGUKKyAqIEF0bWVsIEFUNzZDNTAzQS81MDUvNTA1QS4KKyAqCisgKiBTb21lIGl3X2hhbmRsZXIgY29kZSB3YXMgdGFrZW4gZnJvbSBhaXJvLmMsIChDKSAxOTk5IEJlbmphbWluIFJlZWQKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisKKyNpbmNsdWRlICJhdDc2X3VzYi5oIgorCisvKiBWZXJzaW9uIGluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9OQU1FICJhdDc2X3VzYiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMTciCisjZGVmaW5lIERSSVZFUl9ERVNDICJBdG1lbCBhdDc2eCBVU0IgV2lyZWxlc3MgTEFOIERyaXZlciIKKworLyogYXQ3Nl9kZWJ1ZyBiaXRzICovCisjZGVmaW5lIERCR19QUk9HUkVTUwkJMHgwMDAwMDAwMQkvKiBhdXRoZW50aWNhdGlvbi9hY2NvY2lhdGlvbiAqLworI2RlZmluZSBEQkdfQlNTX1RBQkxFCQkweDAwMDAwMDAyCS8qIHNob3cgQlNTIHRhYmxlIGFmdGVyIHNjYW5zICovCisjZGVmaW5lIERCR19JT0NUTAkJMHgwMDAwMDAwNAkvKiBpb2N0bCBjYWxscyAvIHNldHRpbmdzICovCisjZGVmaW5lIERCR19NQUNfU1RBVEUJCTB4MDAwMDAwMDgJLyogTUFDIHN0YXRlIHRyYW5zaXRpb25zICovCisjZGVmaW5lIERCR19UWF9EQVRBCQkweDAwMDAwMDEwCS8qIHR4IGhlYWRlciAqLworI2RlZmluZSBEQkdfVFhfREFUQV9DT05URU5UCTB4MDAwMDAwMjAJLyogdHggY29udGVudCAqLworI2RlZmluZSBEQkdfVFhfTUdNVAkJMHgwMDAwMDA0MAkvKiB0eCBtYW5hZ2VtZW50ICovCisjZGVmaW5lIERCR19SWF9EQVRBCQkweDAwMDAwMDgwCS8qIHJ4IGRhdGEgaGVhZGVyICovCisjZGVmaW5lIERCR19SWF9EQVRBX0NPTlRFTlQJMHgwMDAwMDEwMAkvKiByeCBkYXRhIGNvbnRlbnQgKi8KKyNkZWZpbmUgREJHX1JYX01HTVQJCTB4MDAwMDAyMDAJLyogcnggbWdtdCBmcmFtZSBoZWFkZXJzICovCisjZGVmaW5lIERCR19SWF9CRUFDT04JCTB4MDAwMDA0MDAJLyogcnggYmVhY29uICovCisjZGVmaW5lIERCR19SWF9DVFJMCQkweDAwMDAwODAwCS8qIHJ4IGNvbnRyb2wgKi8KKyNkZWZpbmUgREJHX1JYX01HTVRfQ09OVEVOVAkweDAwMDAxMDAwCS8qIHJ4IG1nbXQgY29udGVudCAqLworI2RlZmluZSBEQkdfUlhfRlJBR1MJCTB4MDAwMDIwMDAJLyogcnggZGF0YSBmcmFnbWVudCBoYW5kbGluZyAqLworI2RlZmluZSBEQkdfREVWU1RBUlQJCTB4MDAwMDQwMDAJLyogZncgZG93bmxvYWQsIGRldmljZSBzdGFydCAqLworI2RlZmluZSBEQkdfVVJCCQkJMHgwMDAwODAwMAkvKiByeCB1cmIgc3RhdHVzLCAuLi4gKi8KKyNkZWZpbmUgREJHX1JYX0FUTUVMX0hEUgkweDAwMDEwMDAwCS8qIEF0bWVsLXNwZWNpZmljIFJ4IGhlYWRlcnMgKi8KKyNkZWZpbmUgREJHX1BST0NfRU5UUlkJCTB4MDAwMjAwMDAJLyogcHJvY2VkdXJlIGVudHJpZXMvZXhpdHMgKi8KKyNkZWZpbmUgREJHX1BNCQkJMHgwMDA0MDAwMAkvKiBwb3dlciBtYW5hZ2VtZW50IHNldHRpbmdzICovCisjZGVmaW5lIERCR19CU1NfTUFUQ0gJCTB4MDAwODAwMDAJLyogQlNTIG1hdGNoIGZhaWx1cmVzICovCisjZGVmaW5lIERCR19QQVJBTVMJCTB4MDAxMDAwMDAJLyogc2hvdyBjb25maWd1cmVkIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgREJHX1dBSVRfQ09NUExFVEUJMHgwMDIwMDAwMAkvKiBjb21tYW5kIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgREJHX1JYX0ZSQUdTX1NLQgkweDAwNDAwMDAwCS8qIHNrYiBoZWFkZXIgb2YgUnggZnJhZ21lbnRzICovCisjZGVmaW5lIERCR19CU1NfVEFCTEVfUk0JMHgwMDgwMDAwMAkvKiBwdXJnaW5nIGJzcyB0YWJsZSBlbnRyaWVzICovCisjZGVmaW5lIERCR19NT05JVE9SX01PREUJMHgwMTAwMDAwMAkvKiBtb25pdG9yIG1vZGUgKi8KKyNkZWZpbmUgREJHX01JQgkJCTB4MDIwMDAwMDAJLyogZHVtcCBhbGwgTUlCcyBvbiBzdGFydHVwICovCisjZGVmaW5lIERCR19NR01UX1RJTUVSCQkweDA0MDAwMDAwCS8qIGR1bXAgbWdtdF90aW1lciBvcHMgKi8KKyNkZWZpbmUgREJHX1dFX0VWRU5UUwkJMHgwODAwMDAwMAkvKiBkdW1wIHdpcmVsZXNzIGV2ZW50cyAqLworI2RlZmluZSBEQkdfRlcJCQkweDEwMDAwMDAwCS8qIGZpcm13YXJlIGRvd25sb2FkICovCisjZGVmaW5lIERCR19ERlUJCQkweDIwMDAwMDAwCS8qIGRldmljZSBmaXJtd2FyZSB1cGdyYWRlICovCisKKyNkZWZpbmUgREJHX0RFRkFVTFRTCQkwCisKKy8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLworI2RlZmluZSBhdDc2X2RiZyhiaXRzLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkgXAorCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgYXQ3Nl9kZWJ1ZyA9IERCR19ERUZBVUxUUzsKKworLyogUHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyAqLworc3RhdGljIHN0cnVjdCBtdXRleCBmd19tdXRleDsKKworc3RhdGljIHN0cnVjdCBmd2VudHJ5IGZpcm13YXJlc1tdID0geworCVswXSA9IHsiIn0sCisJW0JPQVJEXzUwM19JU0wzODYxXSA9IHsiYXRtZWxfYXQ3NmM1MDMtaTM4NjEuYmluIn0sCisJW0JPQVJEXzUwM19JU0wzODYzXSA9IHsiYXRtZWxfYXQ3NmM1MDMtaTM4NjMuYmluIn0sCisJW0JPQVJEXzUwM10gPSB7ImF0bWVsX2F0NzZjNTAzLXJmbWQuYmluIn0sCisJW0JPQVJEXzUwM19BQ0NdID0geyJhdG1lbF9hdDc2YzUwMy1yZm1kLWFjYy5iaW4ifSwKKwlbQk9BUkRfNTA1XSA9IHsiYXRtZWxfYXQ3NmM1MDUtcmZtZC5iaW4ifSwKKwlbQk9BUkRfNTA1XzI5NThdID0geyJhdG1lbF9hdDc2YzUwNS1yZm1kMjk1OC5iaW4ifSwKKwlbQk9BUkRfNTA1QV0gPSB7ImF0bWVsX2F0NzZjNTA1YS1yZm1kMjk1OC5iaW4ifSwKKwlbQk9BUkRfNTA1QU1YXSA9IHsiYXRtZWxfYXQ3NmM1MDVhbXgtcmZtZC5iaW4ifSwKK307CisKKyNkZWZpbmUgVVNCX0RFVklDRV9EQVRBKF9fb3BzKQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpKF9fb3BzKQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2X3RhYmxlW10gPSB7CisJLyoKKwkgKiBhdDc2YzUwMy1pMzg2MQorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvMzg2MSBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYwMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjEvdjIuNiAqLworCXtVU0JfREVWSUNFKDB4MDY2YiwgMHgyMjExKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogTmV0Z2VhciBNQTEwMSByZXYuIEEgKi8KKwl7VVNCX0RFVklDRSgweDA4NjQsIDB4NDEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIFRla3JhbSBVMzAwQyAvIEFsbG5ldCBBTEwwMTkzICovCisJe1VTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MTIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBIUCBITjIxMFcgSjc4MDFBICovCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDAxMWMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBTaXRlY29tL1otQ29tL1p5eGVsIE00WS03NTAgKi8KKwl7VVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIER5bmFsaW5rL0Fza2V5IFdMTDAxMyAoaW50ZXJzaWwpICovCisJe1VTQl9ERVZJQ0UoMHgwNjlhLCAweDAzMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBFWiBjb25uZWN0IDExTXBicyBXaXJlbGVzcyBVU0IgQWRhcHRlciBTTUMyNjYyVyB2MSAqLworCXtVU0JfREVWSUNFKDB4MGQ1YywgMHhhMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogQmVuUSBBV0wzMDAgKi8KKwl7VVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEFkZHRyb24gQVdVLTEyMCwgQ29tcGV4IFdMVTExICovCisJe1VTQl9ERVZJQ0UoMHgwNWRkLCAweGZmMzEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBJbnRlbCBBUDMxMCBBbnlQb2ludCBJSSBVU0IgKi8KKwl7VVNCX0RFVklDRSgweDgwODYsIDB4MDIwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIER5bmFsaW5rIEwxMVUgKi8KKwl7VVNCX0RFVklDRSgweDBkOGUsIDB4NzEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEFyZXNjb20gV0wtMjEwLCBGQ0MgaWQgMDdKLUdMMjQxMVVTQiAqLworCXtVU0JfREVWSUNFKDB4MGQ4ZSwgMHg3MTEwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogSS1PIERBVEEgV04tQjExL1VTQiAqLworCXtVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTE5KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogQlQgVm95YWdlciAxMDEwICovCisJe1VTQl9ERVZJQ0UoMHgwNjlhLCAweDA4MjEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKgorCSAqIGF0NzZjNTAzLWkzODYzCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy8zODYzIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjA0KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYzKX0sCisJLyogU2Ftc3VuZyBTV0wtMjEwMFUgKi8KKwl7VVNCX0RFVklDRSgweDA1NWQsIDB4YTAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2Myl9LAorCS8qCisJICogYXQ3NmM1MDMtcmZtZAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvUkZNRCBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBEeW5hbGluay9Bc2tleSBXTEwwMTMgKHJmbWQpICovCisJe1VTQl9ERVZJQ0UoMHgwNjlhLCAweDAzMjEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuNiAqLworCXtVU0JfREVWSUNFKDB4MDc3YiwgMHgyMjE5KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIE5ldHdvcmsgRXZlcnl3aGVyZSBOV1UxMUIgKi8KKwl7VVNCX0RFVklDRSgweDA3N2IsIDB4MjIyNyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBOZXRnZWFyIE1BMTAxIHJldi4gQiAqLworCXtVU0JfREVWSUNFKDB4MDg2NCwgMHg0MTAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEQtTGluayBEV0wtMTIwIHJldi4gRSAqLworCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzMjAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEFjdGlvbnRlYyA4MDJVQVQxLCBIV1UwMTE1MC0wMVVLICovCisJe1VTQl9ERVZJQ0UoMHgxNjY4LCAweDc2MDUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogQWlyVmFzdCBXLUJ1ZGRpZSBXTjIxMCAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg0MTAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIERpY2sgU21pdGggRWxlY3Ryb25pY3MgWEgxMTUzIDgwMi4xMWIgVVNCIGFkYXB0ZXIgKi8KKwl7VVNCX0RFVklDRSgweDEzNzEsIDB4NTc0MyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBDTmV0IENOVVNCNjExICovCisJe1VTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogRmliZXJMaW5lIEZMLVdMMjAwVSAqLworCXtVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEJlblEgQVdMNDAwIFVTQiBzdGljayAqLworCXtVU0JfREVWSUNFKDB4MDRhNSwgMHg5MDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIDNDb20gM0NSU0hFVzY5NiAqLworCXtVU0JfREVWSUNFKDB4MDUwNiwgMHgwYTAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIFNpZW1lbnMgU2FudGlzIEFEU0wgV0xBTiBVU0IgYWRhcHRlciBXTEwgMDEzICovCisJe1VTQl9ERVZJQ0UoMHgwNjgxLCAweDAwMWIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogQmVsa2luIEY1RDYwNTAsIHZlcnNpb24gMiAqLworCXtVU0JfREVWSUNFKDB4MDUwZCwgMHgwMDUwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIGlCbGl0enosIEJXVTYxMyAobm90ICpCIG9yICpTQikgKi8KKwl7VVNCX0RFVklDRSgweDA3YjgsIDB4YjAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBHaWdhYnl0ZSBHTi1XTEJNMTAxICovCisJe1VTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogUGxhbmV4IEdXLVVTMTFTICovCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweDMyMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogSW50ZXJuYWwgV0xBTiBhZGFwdGVyIGluIGg1WzQsNV14eCBzZXJpZXMgaVBBUXMgKi8KKwl7VVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBDb3JlZ2EgV2lyZWxlc3MgTEFOIFVTQi0xMSBtaW5pICovCisJe1VTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMTEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaTIgKi8KKwl7VVNCX0RFVklDRSgweDA3YWEsIDB4MDAxOCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBVbmlkZW4gUENXMTAwICovCisJe1VTQl9ERVZJQ0UoMHgwNWRkLCAweGZmMzUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyoKKwkgKiBhdDc2YzUwMy1yZm1kLWFjYworCSAqLworCS8qIFNNQzI2NjRXICovCisJe1VTQl9ERVZJQ0UoMHgwODNhLCAweDM1MDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0FDQyl9LAorCS8qIEJlbGtpbiBGNUQ2MDUwLCBTTUMyNjYyVyB2MiwgU01DMjY2MlctQVIgKi8KKwl7VVNCX0RFVklDRSgweDBkNWMsIDB4YTAwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfQUNDKX0sCisJLyoKKwkgKiBhdDc2YzUwNS1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNS9SRk1EICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDYpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1KX0sCisJLyoKKwkgKiBhdDc2YzUwNS1yZm1kMjk1OAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDUvUkZNRCwgT3Zpc0xpbmsgV0wtMTEzMFVTQiAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjEzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KX0sCisJLyogRmliZXJsaW5lIEZMLVdMMjQwVSAqLworCXtVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDE0KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KX0sCisJLyogQ05ldCBDTlVTQi02MTFHICovCisJe1VTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpfSwKKwkvKiBMaW5rc3lzIFdVU0IxMSB2Mi44ICovCisJe1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpfSwKKwkvKiBYdGVyYXN5cyBYTi0yMTIyQiwgSUJsaXR6eiBCV1U2MTNCL0JXVTYxM1NCICovCisJe1VTQl9ERVZJQ0UoMHgxMmZkLCAweDEwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpfSwKKwkvKiBDb3JlZ2EgV0xBTiBVU0IgU3RpY2sgMTEgKi8KKwl7VVNCX0RFVklDRSgweDA3YWEsIDB4NzYxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCl9LAorCS8qIE1pY3Jvc3RhciBNU0kgQm94IE1TNjk3OCAqLworCXtVU0JfREVWSUNFKDB4MGRiMCwgMHgxMDIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KX0sCisJLyoKKwkgKiBhdDc2YzUwNWEtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QSBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBKX0sCisJLyogR2VuZXJpYyBBVDc2QzUwNUFTIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE3KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpfSwKKwkvKiBTaWVtZW5zIEdpZ2FzZXQgVVNCIFdMQU4gQWRhcHRlciAxMSAqLworCXtVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpfSwKKwkvKgorCSAqIGF0NzZjNTA1YW14LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QU1YIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUFNWCl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2X3RhYmxlKTsKKworLyogU3VwcG9ydGVkIHJhdGVzIG9mIHRoaXMgaGFyZHdhcmUsIGJpdCA3IG1hcmtzIGJhc2ljIHJhdGVzICovCitzdGF0aWMgY29uc3QgdTggaHdfcmF0ZXNbXSA9IHsgMHg4MiwgMHg4NCwgMHgwYiwgMHgxNiB9OworCisvKiBGcmVxdWVuY3kgb2YgZWFjaCBjaGFubmVsIGluIE1IeiAqLworc3RhdGljIGNvbnN0IGxvbmcgY2hhbm5lbF9mcmVxdWVuY3lbXSA9IHsKKwkyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAorCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQKK307CisKKyNkZWZpbmUgTlVNX0NIQU5ORUxTIEFSUkFZX1NJWkUoY2hhbm5lbF9mcmVxdWVuY3kpCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBwcmVhbWJsZXNbXSA9IHsgImxvbmciLCAic2hvcnQiLCAiYXV0byIgfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1hY19zdGF0ZXNbXSA9IHsKKwlbTUFDX0lOSVRdID0gIklOSVQiLAorCVtNQUNfU0NBTk5JTkddID0gIlNDQU5OSU5HIiwKKwlbTUFDX0FVVEhdID0gIkFVVEgiLAorCVtNQUNfQVNTT0NdID0gIkFTU09DIiwKKwlbTUFDX0pPSU5JTkddID0gIkpPSU5JTkciLAorCVtNQUNfQ09OTkVDVEVEXSA9ICJDT05ORUNURUQiLAorCVtNQUNfT1dOX0lCU1NdID0gIk9XTl9JQlNTIgorfTsKKworLyogRmlybXdhcmUgZG93bmxvYWQgKi8KKy8qIERGVSBzdGF0ZXMgKi8KKyNkZWZpbmUgU1RBVEVfSURMRQkJCTB4MDAKKyNkZWZpbmUgU1RBVEVfREVUQUNICQkJMHgwMQorI2RlZmluZSBTVEFURV9ERlVfSURMRQkJCTB4MDIKKyNkZWZpbmUgU1RBVEVfREZVX0RPV05MT0FEX1NZTkMJCTB4MDMKKyNkZWZpbmUgU1RBVEVfREZVX0RPV05MT0FEX0JVU1kJCTB4MDQKKyNkZWZpbmUgU1RBVEVfREZVX0RPV05MT0FEX0lETEUJCTB4MDUKKyNkZWZpbmUgU1RBVEVfREZVX01BTklGRVNUX1NZTkMJCTB4MDYKKyNkZWZpbmUgU1RBVEVfREZVX01BTklGRVNUCQkweDA3CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVF9XQUlUX1JFU0VUCTB4MDgKKyNkZWZpbmUgU1RBVEVfREZVX1VQTE9BRF9JRExFCQkweDA5CisjZGVmaW5lIFNUQVRFX0RGVV9FUlJPUgkJCTB4MGEKKworLyogREZVIGNvbW1hbmRzICovCisjZGVmaW5lIERGVV9ERVRBQ0gJCQkwCisjZGVmaW5lIERGVV9ETkxPQUQJCQkxCisjZGVmaW5lIERGVV9VUExPQUQJCQkyCisjZGVmaW5lIERGVV9HRVRTVEFUVVMJCQkzCisjZGVmaW5lIERGVV9DTFJTVEFUVVMJCQk0CisjZGVmaW5lIERGVV9HRVRTVEFURQkJCTUKKyNkZWZpbmUgREZVX0FCT1JUCQkJNgorCisjZGVmaW5lIEZXX0JMT0NLX1NJWkUgMTAyNAorCitzdHJ1Y3QgZGZ1X3N0YXR1cyB7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJdW5zaWduZWQgY2hhciBwb2xsX3RpbWVvdXRbM107CisJdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHN0cmluZzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfaXNfaW50ZXJzaWwoZW51bSBib2FyZF90eXBlIGJvYXJkKQoreworCXJldHVybiAoYm9hcmQgPT0gQk9BUkRfNTAzX0lTTDM4NjEgfHwgYm9hcmQgPT0gQk9BUkRfNTAzX0lTTDM4NjMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzXzUwM3JmbWQoZW51bSBib2FyZF90eXBlIGJvYXJkKQoreworCXJldHVybiAoYm9hcmQgPT0gQk9BUkRfNTAzIHx8IGJvYXJkID09IEJPQVJEXzUwM19BQ0MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzXzUwNWEoZW51bSBib2FyZF90eXBlIGJvYXJkKQoreworCXJldHVybiAoYm9hcmQgPT0gQk9BUkRfNTA1QSB8fCBib2FyZCA9PSBCT0FSRF81MDVBTVgpOworfQorCisvKiBMb2FkIGEgYmxvY2sgb2YgdGhlIGZpcnN0IChpbnRlcm5hbCkgcGFydCBvZiB0aGUgZmlybXdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9sb2FkX2ludF9md19ibG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGJsb2Nrbm8sCisJCQkJICB2b2lkICpibG9jaywgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIERGVV9ETkxPQUQsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgYmxvY2tubywgMCwgYmxvY2ssIHNpemUsCisJCQkgICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW50IGF0NzZfZGZ1X2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkgICAgICAgc3RydWN0IGRmdV9zdGF0dXMgKnN0YXR1cykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0dFVFNUQVRVUywKKwkJCSAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgICAwLCAwLCBzdGF0dXMsIHNpemVvZihzdHJ1Y3QgZGZ1X3N0YXR1cyksCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU4IGF0NzZfZGZ1X2dldF9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggKnN0YXRlKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCBERlVfR0VUU1RBVEUsCisJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAgMCwgMCwgc3RhdGUsIDEsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDb252ZXJ0IHRpbWVvdXQgZnJvbSB0aGUgREZVIHN0YXR1cyB0byBqaWZmaWVzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ3Nl9nZXRfdGltZW91dChzdHJ1Y3QgZGZ1X3N0YXR1cyAqcykKK3sKKwlyZXR1cm4gbXNlY3NfdG9famlmZmllcygocy0+cG9sbF90aW1lb3V0WzJdIDw8IDE2KQorCQkJCXwgKHMtPnBvbGxfdGltZW91dFsxXSA8PCA4KQorCQkJCXwgKHMtPnBvbGxfdGltZW91dFswXSkpOworfQorCisvKiBMb2FkIGludGVybmFsIGZpcm13YXJlIGZyb20gdGhlIGJ1ZmZlci4gIElmIG1hbmlmZXN0X3N5bmNfdGltZW91dCA+IDAsIHVzZQorICogaXRzIHZhbHVlIGluIGppZmZpZXMgaW4gdGhlIE1BTklGRVNUX1NZTkMgc3RhdGUuICAqLworc3RhdGljIGludCBhdDc2X3VzYmRmdV9kb3dubG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggKmJ1ZiwgdTMyIHNpemUsCisJCQkJaW50IG1hbmlmZXN0X3N5bmNfdGltZW91dCkKK3sKKwl1OCAqYmxvY2s7CisJc3RydWN0IGRmdV9zdGF0dXMgZGZ1X3N0YXRfYnVmOworCWludCByZXQgPSAwOworCWludCBuZWVkX2RmdV9zdGF0ZSA9IDE7CisJaW50IGlzX2RvbmUgPSAwOworCXU4IGRmdV9zdGF0ZSA9IDA7CisJdTMyIGRmdV90aW1lb3V0ID0gMDsKKwlpbnQgYnNpemUgPSAwOworCWludCBibG9ja25vID0gMDsKKworCWF0NzZfZGJnKERCR19ERlUsICIlcyggJXAsICV1LCAlZCkiLCBfX2Z1bmNfXywgYnVmLCBzaXplLAorCQkgbWFuaWZlc3Rfc3luY190aW1lb3V0KTsKKworCWlmICghc2l6ZSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LCAiRlcgYnVmZmVyIGxlbmd0aCBpbnZhbGlkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJsb2NrID0ga21hbGxvYyhGV19CTE9DS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRvIHsKKwkJaWYgKG5lZWRfZGZ1X3N0YXRlKSB7CisJCQlyZXQgPSBhdDc2X2RmdV9nZXRfc3RhdGUodWRldiwgJmRmdV9zdGF0ZSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJjYW5ub3QgZ2V0IERGVSBzdGF0ZTogJWRcbiIsIHJldCk7CisJCQkJZ290byBleGl0OworCQkJfQorCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCQl9CisKKwkJc3dpdGNoIChkZnVfc3RhdGUpIHsKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfU1lOQzoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRE9XTkxPQURfU1lOQyIpOworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXR1cyh1ZGV2LCAmZGZ1X3N0YXRfYnVmKTsKKwkJCWlmIChyZXQgPj0gMCkgeworCQkJCWRmdV9zdGF0ZSA9IGRmdV9zdGF0X2J1Zi5zdGF0ZTsKKwkJCQlkZnVfdGltZW91dCA9IGF0NzZfZ2V0X3RpbWVvdXQoJmRmdV9zdGF0X2J1Zik7CisJCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCQkJfSBlbHNlCisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImF0NzZfZGZ1X2dldF9zdGF0dXMgcmV0dXJuZWQgJWRcbiIsCisJCQkJCSAgIHJldCk7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZIik7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDE7CisKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlU6IFJlc2V0dGluZyBkZXZpY2UiKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShkZnVfdGltZW91dCk7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9ET1dOTE9BRF9JRExFOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRPV05MT0FELi4uIik7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBTVEFURV9ERlVfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlUgSURMRSIpOworCisJCQlic2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgRldfQkxPQ0tfU0laRSk7CisJCQltZW1jcHkoYmxvY2ssIGJ1ZiwgYnNpemUpOworCQkJYXQ3Nl9kYmcoREJHX0RGVSwgImludCBmdywgc2l6ZSBsZWZ0ID0gJTVkLCAiCisJCQkJICJic2l6ZSA9ICU0ZCwgYmxvY2tubyA9ICUyZCIsIHNpemUsIGJzaXplLAorCQkJCSBibG9ja25vKTsKKwkJCXJldCA9CisJCQkgICAgYXQ3Nl9sb2FkX2ludF9md19ibG9jayh1ZGV2LCBibG9ja25vLCBibG9jaywgYnNpemUpOworCQkJYnVmICs9IGJzaXplOworCQkJc2l6ZSAtPSBic2l6ZTsKKwkJCWJsb2Nrbm8rKzsKKworCQkJaWYgKHJldCAhPSBic2l6ZSkKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiYXQ3Nl9sb2FkX2ludF9md19ibG9jayAiCisJCQkJCSAgICJyZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJCW5lZWRfZGZ1X3N0YXRlID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUX1NZTkM6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUX1NZTkMiKTsKKworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXR1cyh1ZGV2LCAmZGZ1X3N0YXRfYnVmKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCisJCQlkZnVfc3RhdGUgPSBkZnVfc3RhdF9idWYuc3RhdGU7CisJCQlkZnVfdGltZW91dCA9IGF0NzZfZ2V0X3RpbWVvdXQoJmRmdV9zdGF0X2J1Zik7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDA7CisKKwkJCS8qIG92ZXJyaWRlIHRoZSB0aW1lb3V0IGZyb20gdGhlIHN0YXR1cyByZXNwb25zZSwKKwkJCSAgIG5lZWRlZCBmb3IgQVQ3NkM1MDVBICovCisJCQlpZiAobWFuaWZlc3Rfc3luY190aW1lb3V0ID4gMCkKKwkJCQlkZnVfdGltZW91dCA9IG1hbmlmZXN0X3N5bmNfdGltZW91dDsKKworCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVTogV2FpdGluZyBmb3IgbWFuaWZlc3QgcGhhc2UiKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShkZnVfdGltZW91dCk7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVDoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfTUFOSUZFU1QiKTsKKwkJCWlzX2RvbmUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVDoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVCIpOworCQkJaXNfZG9uZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9VUExPQURfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfVVBMT0FEX0lETEUiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX0VSUk9SOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9FUlJPUiIpOworCQkJcmV0ID0gLUVQSVBFOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlUgVU5LTk9XTiBTVEFURSAoJWQpIiwgZGZ1X3N0YXRlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKCFpc19kb25lICYmIChyZXQgPj0gMCkpOworCitleGl0OgorCWtmcmVlKGJsb2NrKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXBvcnQgdGhhdCB0aGUgc2NhbiByZXN1bHRzIGFyZSByZWFkeSAqLworc3RhdGljIGlubGluZSB2b2lkIGF0NzZfaXdldmVudF9zY2FuX2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCXdycXUuZGF0YS5sZW5ndGggPSAwOworCXdycXUuZGF0YS5mbGFncyA9IDA7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChuZXRkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJYXQ3Nl9kYmcoREJHX1dFX0VWRU5UUywgIiVzOiBTSU9DR0lXU0NBTiBzZW50IiwgbmV0ZGV2LT5uYW1lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0NzZfaXdldmVudF9ic3NfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQkgICAgdTggKmJzc2lkKQoreworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKKwl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCXdpcmVsZXNzX3NlbmRfZXZlbnQobmV0ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKwlhdDc2X2RiZyhEQkdfV0VfRVZFTlRTLCAiJXM6ICVzOiBTSU9DR0lXQVAgc2VudCIsIG5ldGRldi0+bmFtZSwKKwkJIF9fZnVuY19fKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0NzZfaXdldmVudF9ic3NfZGlzY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgRVRIX0FMRU4pOworCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChuZXRkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCWF0NzZfZGJnKERCR19XRV9FVkVOVFMsICIlczogJXM6IFNJT0NHSVdBUCBzZW50IiwgbmV0ZGV2LT5uYW1lLAorCQkgX19mdW5jX18pOworfQorCisjZGVmaW5lIEhFWDJTVFJfQlVGRkVSUyA0CisjZGVmaW5lIEhFWDJTVFJfTUFYX0xFTiA2NAorI2RlZmluZSBCSU4ySEVYKHgpICgoeCkgPCAxMCA/ICcwJyArICh4KSA6ICh4KSArICdBJyAtIDEwKQorCisvKiBDb252ZXJ0IGJpbmFyeSBkYXRhIGludG8gaGV4IHN0cmluZyAqLworc3RhdGljIGNoYXIgKmhleDJzdHIodm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXN0YXRpYyBhdG9taWNfdCBhID0gQVRPTUlDX0lOSVQoMCk7CisJc3RhdGljIGNoYXIgYnVmc1tIRVgyU1RSX0JVRkZFUlNdWzMgKiBIRVgyU1RSX01BWF9MRU4gKyAxXTsKKwljaGFyICpyZXQgPSBidWZzW2F0b21pY19pbmNfcmV0dXJuKCZhKSAmIChIRVgyU1RSX0JVRkZFUlMgLSAxKV07CisJY2hhciAqb2J1ZiA9IHJldDsKKwl1OCAqaWJ1ZiA9IGJ1ZjsKKworCWlmIChsZW4gPiBIRVgyU1RSX01BWF9MRU4pCisJCWxlbiA9IEhFWDJTVFJfTUFYX0xFTjsKKworCWlmIChsZW4gPD0gMCkgeworCQlyZXRbMF0gPSAnXDAnOworCQlyZXR1cm4gcmV0OworCX0KKworCXdoaWxlIChsZW4tLSkgeworCQkqb2J1ZisrID0gQklOMkhFWCgqaWJ1ZiA+PiA0KTsKKwkJKm9idWYrKyA9IEJJTjJIRVgoKmlidWYgJiAweGYpOworCQkqb2J1ZisrID0gJy0nOworCQlpYnVmKys7CisJfQorCSooLS1vYnVmKSA9ICdcMCc7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BQzJTVFJfQlVGRkVSUyA0CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqbWFjMnN0cih1OCAqbWFjKQoreworCXN0YXRpYyBhdG9taWNfdCBhID0gQVRPTUlDX0lOSVQoMCk7CisJc3RhdGljIGNoYXIgYnVmc1tNQUMyU1RSX0JVRkZFUlNdWzYgKiAzXTsKKwljaGFyICpzdHI7CisKKwlzdHIgPSBidWZzW2F0b21pY19pbmNfcmV0dXJuKCZhKSAmIChNQUMyU1RSX0JVRkZFUlMgLSAxKV07CisJc3ByaW50ZihzdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCisJCW1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0pOworCXJldHVybiBzdHI7Cit9CisKKy8qIExFRCB0cmlnZ2VyICovCitzdGF0aWMgaW50IHR4X2FjdGl2aXR5Oworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIERFRklORV9USU1FUihsZWR0cmlnX3R4X3RpbWVyLCBhdDc2X2xlZHRyaWdfdHhfdGltZXJmdW5jLCAwLCAwKTsKK0RFRklORV9MRURfVFJJR0dFUihsZWR0cmlnX3R4KTsKKworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RhdGljIGludCB0eF9sYXN0YWN0aXZpdHk7CisKKwlpZiAodHhfbGFzdGFjdGl2aXR5ICE9IHR4X2FjdGl2aXR5KSB7CisJCXR4X2xhc3RhY3Rpdml0eSA9IHR4X2FjdGl2aXR5OworCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX3R4LCBMRURfRlVMTCk7CisJCW1vZF90aW1lcigmbGVkdHJpZ190eF90aW1lciwgamlmZmllcyArIEhaIC8gNCk7CisJfSBlbHNlCisJCWxlZF90cmlnZ2VyX2V2ZW50KGxlZHRyaWdfdHgsIExFRF9PRkYpOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2xlZHRyaWdfdHhfYWN0aXZpdHkodm9pZCkKK3sKKwl0eF9hY3Rpdml0eSsrOworCWlmICghdGltZXJfcGVuZGluZygmbGVkdHJpZ190eF90aW1lcikpCisJCW1vZF90aW1lcigmbGVkdHJpZ190eF90aW1lciwgamlmZmllcyArIEhaIC8gNCk7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBnaXZlbiBzc2lkIGlzIGhpZGRlbiAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc19oaWRkZW5fc3NpZCh1OCAqc3NpZCwgaW50IGxlbmd0aCkKK3sKKwlzdGF0aWMgY29uc3QgdTggemVyb3NbMzJdOworCisJaWYgKGxlbmd0aCA9PSAwKQorCQlyZXR1cm4gMTsKKworCWlmIChsZW5ndGggPT0gMSAmJiBzc2lkWzBdID09ICcgJykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gKG1lbWNtcChzc2lkLCB6ZXJvcywgbGVuZ3RoKSA9PSAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0NzZfZnJlZV9ic3NfbGlzdChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCisJcHJpdi0+Y3Vycl9ic3MgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHB0ciwgbmV4dCwgJnByaXYtPmJzc19saXN0KSB7CisJCWxpc3RfZGVsKHB0cik7CisJCWtmcmVlKGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgYnNzX2luZm8sIGxpc3QpKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGF0NzZfcmVtYXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBhLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgTlVMTCwgMCwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2dldF9vcF9tb2RlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQ7CisJdTggb3BfbW9kZTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MDEsIDAsICZvcF9tb2RlLCAxLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UgaWYgKHJldCA8IDEpCisJCXJldHVybiAtRUlPOworCWVsc2UKKwkJcmV0dXJuIG9wX21vZGU7Cit9CisKKy8qIExvYWQgYSBibG9jayBvZiB0aGUgc2Vjb25kICgiZXh0ZXJuYWwiKSBwYXJ0IG9mIHRoZSBmaXJtd2FyZSAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9sb2FkX2V4dF9md19ibG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGJsb2Nrbm8sCisJCQkJCSB2b2lkICpibG9jaywgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MGUsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgIDB4MDgwMiwgYmxvY2tubywgYmxvY2ssIHNpemUsCisJCQkgICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9od19jZmcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJICB1bmlvbiBhdDc2X2h3Y2ZnICpidWYsIGludCBidWZfc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDBhMDIsIDAsCisJCQkgICAgICAgYnVmLCBidWZfc2l6ZSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCisvKiBJbnRlcnNpbCBib2FyZHMgdXNlIGEgZGlmZmVyZW50ICJ2YWx1ZSIgZm9yIEdldEhXQ29uZmlnIHJlcXVlc3RzICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9od19jZmdfaW50ZXJzaWwoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCSAgIHVuaW9uIGF0NzZfaHdjZmcgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MDkwMiwgMCwKKwkJCSAgICAgICBidWYsIGJ1Zl9zaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKKy8qIEdldCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFkYXB0ZXIgYW5kIHB1dCBpdCB0byB0aGUgYXBwcm9wcmlhdGUKKyAqIGZpZWxkcyBvZiAncHJpdicgKHRoZSBHZXRIV0NvbmZpZyByZXF1ZXN0IGFuZCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcmVzdWx0CisgKiBkZXBlbmRzIG9uIHRoZSBib2FyZCB0eXBlKSAqLworc3RhdGljIGludCBhdDc2X2dldF9od19jb25maWcoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXVuaW9uIGF0NzZfaHdjZmcgKmh3Y2ZnID0ga21hbGxvYyhzaXplb2YoKmh3Y2ZnKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWh3Y2ZnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhdDc2X2lzX2ludGVyc2lsKHByaXYtPmJvYXJkX3R5cGUpKSB7CisJCXJldCA9IGF0NzZfZ2V0X2h3X2NmZ19pbnRlcnNpbChwcml2LT51ZGV2LCBod2NmZywKKwkJCQkJICAgICAgIHNpemVvZihod2NmZy0+aSkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBod2NmZy0+aS5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5pLnJlZ3VsYXRvcnlfZG9tYWluOworCX0gZWxzZSBpZiAoYXQ3Nl9pc181MDNyZm1kKHByaXYtPmJvYXJkX3R5cGUpKSB7CisJCXJldCA9IGF0NzZfZ2V0X2h3X2NmZyhwcml2LT51ZGV2LCBod2NmZywgc2l6ZW9mKGh3Y2ZnLT5yMykpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBod2NmZy0+cjMubWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJcHJpdi0+cmVndWxhdG9yeV9kb21haW4gPSBod2NmZy0+cjMucmVndWxhdG9yeV9kb21haW47CisJfSBlbHNlIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnKHByaXYtPnVkZXYsIGh3Y2ZnLCBzaXplb2YoaHdjZmctPnI1KSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5yNS5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5yNS5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9CisKK2V4aXQ6CisJa2ZyZWUoaHdjZmcpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgZ2V0IEhXIENvbmZpZyAoZXJyb3IgJWQpXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCByZWdfZG9tYWluIGNvbnN0ICphdDc2X2dldF9yZWdfZG9tYWluKHUxNiBjb2RlKQoreworCWludCBpOworCXN0YXRpYyBzdHJ1Y3QgcmVnX2RvbWFpbiBjb25zdCBmZF90YWJbXSA9IHsKKwkJezB4MTAsICJGQ0MgKFVTQSkiLCAweDdmZn0sCS8qIGNoIDEtMTEgKi8KKwkJezB4MjAsICJJQyAoQ2FuYWRhKSIsIDB4N2ZmfSwJLyogY2ggMS0xMSAqLworCQl7MHgzMCwgIkVUU0kgKG1vc3Qgb2YgRXVyb3BlKSIsIDB4MWZmZn0sCS8qIGNoIDEtMTMgKi8KKwkJezB4MzEsICJTcGFpbiIsIDB4NjAwfSwJLyogY2ggMTAtMTEgKi8KKwkJezB4MzIsICJGcmFuY2UiLCAweDFlMDB9LAkvKiBjaCAxMC0xMyAqLworCQl7MHg0MCwgIk1LSyAoSmFwYW4pIiwgMHgyMDAwfSwJLyogY2ggMTQgKi8KKwkJezB4NDEsICJNS0sxIChKYXBhbikiLCAweDNmZmZ9LAkvKiBjaCAxLTE0ICovCisJCXsweDUwLCAiSXNyYWVsIiwgMHgzZmN9LAkvKiBjaCAzLTkgKi8KKwkJezB4MDAsICI8dW5rbm93bj4iLCAweGZmZmZmZmZmfQkvKiBjaCAxLTMyICovCisJfTsKKworCS8qIExhc3QgZW50cnkgaXMgZmFsbGJhY2sgZm9yIHVua25vd24gZG9tYWluIGNvZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZF90YWIpIC0gMTsgaSsrKQorCQlpZiAoY29kZSA9PSBmZF90YWJbaV0uY29kZSkKKwkJCWJyZWFrOworCisJcmV0dXJuICZmZF90YWJbaV07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X21pYihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTE2IG1pYiwgdm9pZCAqYnVmLAorCQkJICAgICAgIGludCBidWZfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgbWliIDw8IDgsIDAsIGJ1ZiwgYnVmX3NpemUsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA+PSAwICYmIHJldCAhPSBidWZfc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHJldDsKK30KKworLyogUmV0dXJuIHBvc2l0aXZlIG51bWJlciBmb3Igc3RhdHVzLCBuZWdhdGl2ZSBmb3IgYW4gZXJyb3IgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2NtZF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGNtZCkKK3sKKwl1OCBzdGF0X2J1Zls0MF07CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MjIsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIGNtZCwgMCwgc3RhdF9idWYsCisJCQkgICAgICBzaXplb2Yoc3RhdF9idWYpLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RhdF9idWZbNV07Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgY21kLCB2b2lkICpidWYsCisJCQkJIGludCBidWZfc2l6ZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdDc2X2NvbW1hbmQgKmNtZF9idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXQ3Nl9jb21tYW5kKSArCisJCQkJCSAgICAgICBidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWNtZF9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kX2J1Zi0+Y21kID0gY21kOworCWNtZF9idWYtPnJlc2VydmVkID0gMDsKKwljbWRfYnVmLT5zaXplID0gY3B1X3RvX2xlMTYoYnVmX3NpemUpOworCW1lbWNweShjbWRfYnVmLT5kYXRhLCBidWYsIGJ1Zl9zaXplKTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MGUsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAwLCAwLCBjbWRfYnVmLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdDc2X2NvbW1hbmQpICsgYnVmX3NpemUsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJa2ZyZWUoY21kX2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQUtFX0NNRF9TVEFUVVNfQ0FTRShjKQljYXNlIChjKTogcmV0dXJuICNjCitzdGF0aWMgY29uc3QgY2hhciAqYXQ3Nl9nZXRfY21kX3N0YXR1c19zdHJpbmcodTggY21kX3N0YXR1cykKK3sKKwlzd2l0Y2ggKGNtZF9zdGF0dXMpIHsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JRExFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19DT01QTEVURSk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfVU5LTk9XTik7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1RJTUVfT1VUKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JTl9QUk9HUkVTUyk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSE9TVF9GQUlMVVJFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19TQ0FOX0ZBSUxFRCk7CisJfQorCisJcmV0dXJuICJVTktOT1dOIjsKK30KKworLyogV2FpdCB1bnRpbCB0aGUgY29tbWFuZCBpcyBjb21wbGV0ZWQgKi8KK3N0YXRpYyBpbnQgYXQ3Nl93YWl0X2NvbXBsZXRpb24oc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgaW50IGNtZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgQ01EX0NPTVBMRVRJT05fVElNRU9VVDsKKworCWRvIHsKKwkJc3RhdHVzID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBjbWQpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfY21kX3N0YXR1cyBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYXQ3Nl9kYmcoREJHX1dBSVRfQ09NUExFVEUsCisJCQkgIiVzOiBXYWl0aW5nIG9uIGNtZCAlZCwgc3RhdHVzID0gJWQgKCVzKSIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBjbWQsIHN0YXR1cywKKwkJCSBhdDc2X2dldF9jbWRfc3RhdHVzX3N0cmluZyhzdGF0dXMpKTsKKworCQlpZiAoc3RhdHVzICE9IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MKKwkJICAgICYmIHN0YXR1cyAhPSBDTURfU1RBVFVTX0lETEUpCisJCQlicmVhazsKKworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFogLyAxMCk7CS8qIDEwMCBtcyAqLworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBjb21wbGV0aW9uIHRpbWVvdXQgZm9yIGNvbW1hbmQgJWRcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBjbWQpOworCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X21pYihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TRVRfTUlCLCBidWYsCisJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBzZXRfbWliX2J1ZmZlciwKKwkJCQkJICAgICBkYXRhKSArIGJ1Zi0+c2l6ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfU0VUX01JQik7CisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIlczogc2V0X21pYjogYXQ3Nl93YWl0X2NvbXBsZXRpb24gZmFpbGVkICIKKwkJICAgICAgICJ3aXRoICVkXG4iLCBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCXJldCA9IC1FSU87CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogUmV0dXJuIDwgMCBvbiBlcnJvciwgPT0gMCBpZiBubyBjb21tYW5kIHNlbnQsID09IDEgaWYgY21kIHNlbnQgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcmFkaW8oc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCWludCBjbWQ7CisKKwlpZiAocHJpdi0+cmFkaW9fb24gPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCWNtZCA9IGVuYWJsZSA/IENNRF9SQURJT19PTiA6IENNRF9SQURJT19PRkY7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgY21kLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKCVkKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBjbWQsIHJldCk7CisJZWxzZQorCQlyZXQgPSAxOworCisJcHJpdi0+cmFkaW9fb24gPSBlbmFibGU7CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IGN1cnJlbnQgcG93ZXIgc2F2ZSBtb2RlIChBVDc2X1BNX09GRi9BVDc2X1BNX09OL0FUNzZfUE1fU01BUlQpICovCitzdGF0aWMgaW50IGF0NzZfc2V0X3BtX21vZGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUNfTUdNVDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hY19tZ210LCBwb3dlcl9tZ210X21vZGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gcHJpdi0+cG1fbW9kZTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHBtX21vZGUpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXQgdGhlIGFzc29jaWF0aW9uIGlkIGZvciBwb3dlciBzYXZlIG1vZGUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfYXNzb2NpZChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDX01HTVQ7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWNfbWdtdCwgc3RhdGlvbl9pZCk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLndvcmQgPSBjcHVfdG9fbGUxNihpZCk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChhc3NvY2lkKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IHRoZSBsaXN0ZW4gaW50ZXJ2YWwgZm9yIHBvd2VyIHNhdmUgbW9kZSAqLworc3RhdGljIGludCBhdDc2X3NldF9saXN0ZW5faW50ZXJ2YWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTE2IGludGVydmFsKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQzsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAyOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hYywgbGlzdGVuX2ludGVydmFsKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KGludGVydmFsKTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBzZXRfbWliIChsaXN0ZW5faW50ZXJ2YWwpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X3ByZWFtYmxlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHU4IHR5cGUpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTE9DQUw7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9sb2NhbCwgcHJlYW1ibGVfdHlwZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSB0eXBlOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocHJlYW1ibGUpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2ZyYWcoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTE2IHNpemUpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDI7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjLCBmcmFnX3RocmVzaG9sZCk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLndvcmQgPSBjcHVfdG9fbGUxNihzaXplKTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKGZyYWcgdGhyZXNob2xkKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9ydHMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTE2IHNpemUpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDI7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjLCBydHNfdGhyZXNob2xkKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KHNpemUpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocnRzKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9hdXRvcmF0ZV9mYWxsYmFjayhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgb25vZmYpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTE9DQUw7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9sb2NhbCwgdHhhdXRvcmF0ZV9mYWxsYmFjayk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBvbm9mZjsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKGF1dG9yYXRlIGZhbGxiYWNrKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2FkZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB2b2lkICphZGRyKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19BRERSOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IEVUSF9BTEVOOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hY19hZGRyLCBtYWNfYWRkcik7CisJbWVtY3B5KHByaXYtPm1pYl9idWYuZGF0YS5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChNQUNfQUREUiwgbWFjX2FkZHIpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19hZGRyKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19hZGRyICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfYWRkciksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfQUREUiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19hZGRyKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfQUREUikgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19BRERSOiBtYWNfYWRkciAlcyByZXMgMHgleCAweCV4IiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIG1hYzJzdHIobS0+bWFjX2FkZHIpLCBtLT5yZXNbMF0sIG0tPnJlc1sxXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+Z3JvdXBfYWRkcik7IGkrKykKKwkJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX0FERFI6IGdyb3VwIGFkZHIgJWQ6ICVzLCAiCisJCQkgInN0YXR1cyAlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwgaSwKKwkJCSBtYWMyc3RyKG0tPmdyb3VwX2FkZHJbaV0pLCBtLT5ncm91cF9hZGRyX3N0YXR1c1tpXSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY193ZXAoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBrZXlfbGVuOworCXN0cnVjdCBtaWJfbWFjX3dlcCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX3dlcCksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19XRVAsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfd2VwKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfV0VQKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX1dFUDogcHJpdl9pbnZva2VkICV1IGRlZl9rZXlfaWQgJXUgIgorCQkgImtleV9sZW4gJXUgZXhjbF91bmVuY3IgJXUgd2VwX2ljdl9lcnIgJXUgd2VwX2V4Y2x1ZGVkICV1ICIKKwkJICJlbmNyX2xldmVsICV1IGtleSAlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIG0tPnByaXZhY3lfaW52b2tlZCwgbS0+d2VwX2RlZmF1bHRfa2V5X2lkLAorCQkgbS0+d2VwX2tleV9tYXBwaW5nX2xlbiwgbS0+ZXhjbHVkZV91bmVuY3J5cHRlZCwKKwkJIGxlMzJfdG9fY3B1KG0tPndlcF9pY3ZfZXJyb3JfY291bnQpLAorCQkgbGUzMl90b19jcHUobS0+d2VwX2V4Y2x1ZGVkX2NvdW50KSwgbS0+ZW5jcnlwdGlvbl9sZXZlbCwKKwkJIG0tPndlcF9kZWZhdWx0X2tleV9pZCk7CisKKwlrZXlfbGVuID0gKG0tPmVuY3J5cHRpb25fbGV2ZWwgPT0gMSkgPworCSAgICBXRVBfU01BTExfS0VZX0xFTiA6IFdFUF9MQVJHRV9LRVlfTEVOOworCisJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspCisJCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19XRVA6IGtleSAlZDogJXMiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgaSwKKwkJCSBoZXgyc3RyKG0tPndlcF9kZWZhdWx0X2tleXZhbHVlW2ldLCBrZXlfbGVuKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19tZ210KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19tZ210ICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfTUdNVCwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfTUdNVCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19NR01UOiBiZWFjb25fcGVyaW9kICVkIENGUF9tYXhfZHVyYXRpb24gIgorCQkgIiVkIG1lZGl1bV9vY2N1cGFuY3lfbGltaXQgJWQgc3RhdGlvbl9pZCAweCV4IEFUSU1fd2luZG93ICVkICIKKwkJICJDRlBfbW9kZSAlZCBwcml2YWN5X29wdF9pbXBsICVkIERUSU1fcGVyaW9kICVkIENGUF9wZXJpb2QgJWQgIgorCQkgImN1cnJlbnRfYnNzaWQgJXMgY3VycmVudF9lc3NpZCAlcyBjdXJyZW50X2Jzc190eXBlICVkICIKKwkJICJwbV9tb2RlICVkIGlic3NfY2hhbmdlICVkIHJlcyAlZCAiCisJCSAibXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQgJWQgIgorCQkgImludGVybmF0aW9uYWxfcm9hbWluZyAlZCBjb3VudHJ5X3N0cmluZyAlLjNzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbGUxNl90b19jcHUobS0+YmVhY29uX3BlcmlvZCksCisJCSBsZTE2X3RvX2NwdShtLT5DRlBfbWF4X2R1cmF0aW9uKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1lZGl1bV9vY2N1cGFuY3lfbGltaXQpLAorCQkgbGUxNl90b19jcHUobS0+c3RhdGlvbl9pZCksIGxlMTZfdG9fY3B1KG0tPkFUSU1fd2luZG93KSwKKwkJIG0tPkNGUF9tb2RlLCBtLT5wcml2YWN5X29wdGlvbl9pbXBsZW1lbnRlZCwgbS0+RFRJTV9wZXJpb2QsCisJCSBtLT5DRlBfcGVyaW9kLCBtYWMyc3RyKG0tPmN1cnJlbnRfYnNzaWQpLAorCQkgaGV4MnN0cihtLT5jdXJyZW50X2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBtLT5jdXJyZW50X2Jzc190eXBlLCBtLT5wb3dlcl9tZ210X21vZGUsIG0tPmlic3NfY2hhbmdlLAorCQkgbS0+cmVzLCBtLT5tdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZCwKKwkJIG0tPm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQsIG0tPmNvdW50cnlfc3RyaW5nKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hYyAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9tYWMpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQzogbWF4X3R4X21zZHVfbGlmZXRpbWUgJWQgIgorCQkgIm1heF9yeF9saWZldGltZSAlZCBmcmFnX3RocmVzaG9sZCAlZCBydHNfdGhyZXNob2xkICVkICIKKwkJICJjd21pbiAlZCBjd21heCAlZCBzaG9ydF9yZXRyeV90aW1lICVkIGxvbmdfcmV0cnlfdGltZSAlZCAiCisJCSAic2Nhbl90eXBlICVkIHNjYW5fY2hhbm5lbCAlZCBwcm9iZV9kZWxheSAldSAiCisJCSAibWluX2NoYW5uZWxfdGltZSAlZCBtYXhfY2hhbm5lbF90aW1lICVkIGxpc3Rlbl9pbnQgJWQgIgorCQkgImRlc2lyZWRfc3NpZCAlcyBkZXNpcmVkX2Jzc2lkICVzIGRlc2lyZWRfYnNzdHlwZSAlZCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGxlMzJfdG9fY3B1KG0tPm1heF90eF9tc2R1X2xpZmV0aW1lKSwKKwkJIGxlMzJfdG9fY3B1KG0tPm1heF9yeF9saWZldGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5mcmFnX3RocmVzaG9sZCksIGxlMTZfdG9fY3B1KG0tPnJ0c190aHJlc2hvbGQpLAorCQkgbGUxNl90b19jcHUobS0+Y3dtaW4pLCBsZTE2X3RvX2NwdShtLT5jd21heCksCisJCSBtLT5zaG9ydF9yZXRyeV90aW1lLCBtLT5sb25nX3JldHJ5X3RpbWUsIG0tPnNjYW5fdHlwZSwKKwkJIG0tPnNjYW5fY2hhbm5lbCwgbGUxNl90b19jcHUobS0+cHJvYmVfZGVsYXkpLAorCQkgbGUxNl90b19jcHUobS0+bWluX2NoYW5uZWxfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5tYXhfY2hhbm5lbF90aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmxpc3Rlbl9pbnRlcnZhbCksCisJCSBoZXgyc3RyKG0tPmRlc2lyZWRfc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgbWFjMnN0cihtLT5kZXNpcmVkX2Jzc2lkKSwgbS0+ZGVzaXJlZF9ic3N0eXBlKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfcGh5KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX3BoeSAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfUEhZLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9waHkpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKFBIWSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIFBIWTogZWRfdGhyZXNob2xkICVkIHNsb3RfdGltZSAlZCAiCisJCSAic2lmc190aW1lICVkIHByZWFtYmxlX2xlbmd0aCAlZCBwbGNwX2hlYWRlcl9sZW5ndGggJWQgIgorCQkgIm1wZHVfbWF4X2xlbmd0aCAlZCBjY2FfbW9kZV9zdXBwb3J0ZWQgJWQgb3BlcmF0aW9uX3JhdGVfc2V0ICIKKwkJICIweCV4IDB4JXggMHgleCAweCV4IGNoYW5uZWxfaWQgJWQgY3VycmVudF9jY2FfbW9kZSAlZCAiCisJCSAicGh5X3R5cGUgJWQgY3VycmVudF9yZWdfZG9tYWluICVkIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbGUzMl90b19jcHUobS0+ZWRfdGhyZXNob2xkKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnNsb3RfdGltZSksIGxlMTZfdG9fY3B1KG0tPnNpZnNfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5wcmVhbWJsZV9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+cGxjcF9oZWFkZXJfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1wZHVfbWF4X2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5jY2FfbW9kZV9zdXBwb3J0ZWQpLCBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMF0sCisJCSBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMV0sIG0tPm9wZXJhdGlvbl9yYXRlX3NldFsyXSwKKwkJIG0tPm9wZXJhdGlvbl9yYXRlX3NldFszXSwgbS0+Y2hhbm5lbF9pZCwgbS0+Y3VycmVudF9jY2FfbW9kZSwKKwkJIG0tPnBoeV90eXBlLCBtLT5jdXJyZW50X3JlZ19kb21haW4pOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9sb2NhbChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9sb2NhbCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTE9DQUwsIG0sIHNpemVvZihzdHJ1Y3QgbWliX2xvY2FsKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChMT0NBTCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIExPQ0FMOiBiZWFjb25fZW5hYmxlICVkICIKKwkJICJ0eGF1dG9yYXRlX2ZhbGxiYWNrICVkIHNzaWRfc2l6ZSAlZCBwcm9taXNjdW91c19tb2RlICVkICIKKwkJICJwcmVhbWJsZV90eXBlICVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtLT5iZWFjb25fZW5hYmxlLAorCQkgbS0+dHhhdXRvcmF0ZV9mYWxsYmFjaywgbS0+c3NpZF9zaXplLCBtLT5wcm9taXNjdW91c19tb2RlLAorCQkgbS0+cHJlYW1ibGVfdHlwZSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21kb21haW4oc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWRvbWFpbiAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWRvbWFpbiksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01ET01BSU4sIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tZG9tYWluKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNRE9NQUlOKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTURPTUFJTjogY2hhbm5lbF9saXN0ICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIGhleDJzdHIobS0+Y2hhbm5lbF9saXN0LCBzaXplb2YobS0+Y2hhbm5lbF9saXN0KSkpOworCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTURPTUFJTjogdHhfcG93ZXJsZXZlbCAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBoZXgyc3RyKG0tPnR4X3Bvd2VybGV2ZWwsIHNpemVvZihtLT50eF9wb3dlcmxldmVsKSkpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIGludCBhdDc2X2dldF9jdXJyZW50X2Jzc2lkKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG1pYl9tYWNfbWdtdCAqbWFjX21nbXQgPQorCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW1hY19tZ210KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19NR01ULCBtYWNfbWdtdCwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCW1lbWNweShwcml2LT5ic3NpZCwgbWFjX21nbXQtPmN1cnJlbnRfYnNzaWQsIEVUSF9BTEVOKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogdXNpbmcgQlNTSUQgJXNcbiIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkgICAgICAgbWFjMnN0cihwcml2LT5ic3NpZCkpOworZXJyb3I6CisJa2ZyZWUobWFjX21nbXQpOworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfZ2V0X2N1cnJlbnRfY2hhbm5lbChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtaWJfcGh5ICpwaHkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFwaHkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX1BIWSwgcGh5LCBzaXplb2Yoc3RydWN0IG1pYl9waHkpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIoTUlCX1BIWSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJcHJpdi0+Y2hhbm5lbCA9IHBoeS0+Y2hhbm5lbF9pZDsKK2Vycm9yOgorCWtmcmVlKHBoeSk7CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogYXQ3Nl9zdGFydF9zY2FuIC0gc3RhcnQgYSBzY2FuCisgKgorICogQHVzZV9lc3NpZCAtIHVzZSB0aGUgY29uZmlndXJlZCBFU1NJRCBpbiBub24gcGFzc2l2ZSBtb2RlCisgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zdGFydF9zY2FuKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCB1c2VfZXNzaWQpCit7CisJc3RydWN0IGF0NzZfcmVxX3NjYW4gc2NhbjsKKworCW1lbXNldCgmc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9zY2FuKSk7CisJbWVtc2V0KHNjYW4uYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKworCWlmICh1c2VfZXNzaWQpIHsKKwkJbWVtY3B5KHNjYW4uZXNzaWQsIHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7CisJCXNjYW4uZXNzaWRfc2l6ZSA9IHByaXYtPmVzc2lkX3NpemU7CisJfSBlbHNlCisJCXNjYW4uZXNzaWRfc2l6ZSA9IDA7CisKKwkvKiBqYWw6IHdoeSBzaG91bGQgd2Ugc3RhcnQgYXQgYSBjZXJ0YWluIGNoYW5uZWw/IHdlIGRvIHNjYW4gdGhlIHdob2xlCisJICAgcmFuZ2UgYWxsb3dlZCBieSByZWcgZG9tYWluLiAqLworCXNjYW4uY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisKKwkvKiBhdG1lbHdsYW5kcml2ZXIgZGlmZmVycyBiZXR3ZWVuIHNjYW4gdHlwZSAwIGFuZCAxIChhY3RpdmUvcGFzc2l2ZSkKKwkgICBGb3IgYWQtaG9jIG1vZGUsIGl0IHVzZXMgdHlwZSAwIG9ubHkuICovCisJc2Nhbi5zY2FuX3R5cGUgPSBwcml2LT5zY2FuX21vZGU7CisKKwkvKiBJTkZPOiBGb3IgcHJvYmVfZGVsYXksIG5vdCBtdWx0aXBseWluZyBieSAxMDI0IGFzIHRoaXMgd2lsbCBiZQorCSAgIHNsaWdodGx5IGxlc3MgdGhhbiBtaW5fY2hhbm5lbF90aW1lCisJICAgKHBlciBzcGVjOiBwcm9iZSBkZWxheSA8IG1pbi4gY2hhbm5lbCB0aW1lKSAqLworCXNjYW4ubWluX2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTE2KHByaXYtPnNjYW5fbWluX3RpbWUpOworCXNjYW4ubWF4X2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTE2KHByaXYtPnNjYW5fbWF4X3RpbWUpOworCXNjYW4ucHJvYmVfZGVsYXkgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21pbl90aW1lICogMTAwMCk7CisJc2Nhbi5pbnRlcm5hdGlvbmFsX3NjYW4gPSAwOworCisJLyogb3RoZXIgdmFsdWVzIGFyZSBzZXQgdG8gMCBmb3IgdHlwZSAwICovCisKKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICIlczogc3RhcnRfc2NhbiAodXNlX2Vzc2lkID0gJWQsIGludGwgPSAlZCwgIgorCQkgImNoYW5uZWwgPSAlZCwgcHJvYmVfZGVsYXkgPSAlZCwgc2Nhbl9taW5fdGltZSA9ICVkLCAiCisJCSAic2Nhbl9tYXhfdGltZSA9ICVkKSIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHVzZV9lc3NpZCwKKwkJIHNjYW4uaW50ZXJuYXRpb25hbF9zY2FuLCBzY2FuLmNoYW5uZWwsCisJCSBsZTE2X3RvX2NwdShzY2FuLnByb2JlX2RlbGF5KSwKKwkJIGxlMTZfdG9fY3B1KHNjYW4ubWluX2NoYW5uZWxfdGltZSksCisJCSBsZTE2X3RvX2NwdShzY2FuLm1heF9jaGFubmVsX3RpbWUpKTsKKworCXJldHVybiBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NDQU4sICZzY2FuLCBzaXplb2Yoc2NhbikpOworfQorCisvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCitzdGF0aWMgaW50IGF0NzZfc3RhcnRfbW9uaXRvcihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3JlcV9zY2FuIHNjYW47CisJaW50IHJldDsKKworCW1lbXNldCgmc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9zY2FuKSk7CisJbWVtc2V0KHNjYW4uYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKworCXNjYW4uY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJc2Nhbi5zY2FuX3R5cGUgPSBTQ0FOX1RZUEVfUEFTU0lWRTsKKwlzY2FuLmludGVybmF0aW9uYWxfc2NhbiA9IDA7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NDQU4sICZzY2FuLCBzaXplb2Yoc2NhbikpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBDTURfU0NBTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc3RhcnRfaWJzcyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3JlcV9pYnNzIGJzczsKKwlpbnQgcmV0OworCisJV0FSTl9PTihwcml2LT5tYWNfc3RhdGUgIT0gTUFDX09XTl9JQlNTKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19PV05fSUJTUykKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1lbXNldCgmYnNzLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2lic3MpKTsKKwltZW1zZXQoYnNzLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisJbWVtY3B5KGJzcy5lc3NpZCwgcHJpdi0+ZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwlic3MuZXNzaWRfc2l6ZSA9IHByaXYtPmVzc2lkX3NpemU7CisJYnNzLmJzc190eXBlID0gQURIT0NfTU9ERTsKKwlic3MuY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NUQVJUX0lCU1MsICZic3MsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcykpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN0YXJ0X2lic3MgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfU1RBUlRfSUJTUyk7CisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN0YXJ0X2lic3MgZmFpbGVkIHRvIGNvbXBsZXRlLCAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhdDc2X2dldF9jdXJyZW50X2Jzc2lkKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9nZXRfY3VycmVudF9jaGFubmVsKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogbm90IHN1cmUgd2hhdCB0aGlzIGlzIGdvb2QgZm9yID8/PyAqLworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUNfTUdNVDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hY19tZ210LCBpYnNzX2NoYW5nZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSAwOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChpYnNzIGNoYW5nZSBvaykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldGRldik7CisJbmV0aWZfc3RhcnRfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVxdWVzdCBjYXJkIHRvIGpvaW4gQlNTIGluIG1hbmFnZWQgb3IgYWQtaG9jIG1vZGUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9qb2luX2JzcyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKnB0cikKK3sKKwlzdHJ1Y3QgYXQ3Nl9yZXFfam9pbiBqb2luOworCisJQlVHX09OKCFwdHIpOworCisJbWVtc2V0KCZqb2luLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKKwltZW1jcHkoam9pbi5ic3NpZCwgcHRyLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShqb2luLmVzc2lkLCBwdHItPnNzaWQsIHB0ci0+c3NpZF9sZW4pOworCWpvaW4uZXNzaWRfc2l6ZSA9IHB0ci0+c3NpZF9sZW47CisJam9pbi5ic3NfdHlwZSA9IChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MgPyAxIDogMik7CisJam9pbi5jaGFubmVsID0gcHRyLT5jaGFubmVsOworCWpvaW4udGltZW91dCA9IGNwdV90b19sZTE2KDIwMDApOworCisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLAorCQkgIiVzIGpvaW4gYWRkciAlcyBzc2lkICVzIHR5cGUgJWQgY2ggJWQgdGltZW91dCAlZCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIoam9pbi5ic3NpZCksIGpvaW4uZXNzaWQsCisJCSBqb2luLmJzc190eXBlLCBqb2luLmNoYW5uZWwsIGxlMTZfdG9fY3B1KGpvaW4udGltZW91dCkpOworCXJldHVybiBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX0pPSU4sICZqb2luLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9qb2luKSk7Cit9CisKKy8qIENhbGN1bGF0ZSBwYWRkaW5nIGZyb20gdHhidWYtPndsZW5ndGggKHdoaWNoIGV4Y2x1ZGVzIHRoZSBVU0IgVFggaGVhZGVyKSwKKyAgIGxpa2VseSB0byBjb21wZW5zYXRlIGEgZmxhdyBpbiB0aGUgQVQ3NkM1MDNBIFVTQiBwYXJ0IC4uLiAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9jYWxjX3BhZGRpbmcoaW50IHdsZW4pCit7CisJLyogYWRkIHRoZSBVU0IgVFggaGVhZGVyICovCisJd2xlbiArPSBBVDc2X1RYX0hEUkxFTjsKKworCXdsZW4gPSB3bGVuICUgNjQ7CisKKwlpZiAod2xlbiA8IDUwKQorCQlyZXR1cm4gNTAgLSB3bGVuOworCisJaWYgKHdsZW4gPj0gNjEpCisJCXJldHVybiA2NCArIDUwIC0gd2xlbjsKKworCXJldHVybiAwOworfQorCisvKiBXZSBhcmUgZG9pbmcgYSBsb3Qgb2YgdGhpbmdzIGhlcmUgaW4gYW4gaW50ZXJydXB0LiBOZWVkCisgICBhIGJoIGhhbmRsZXIgKFdhdGNoaW5nIFRWIHdpdGggYSBUViBjYXJkIGlzIHByb2JhYmx5CisgICBhIGdvb2QgdGVzdDogaWYgeW91IHNlZSBmbGlja2Vycywgd2UgYXJlIGRvaW5nIHRvbyBtdWNoLgorICAgQ3VycmVudGx5IEkgZG8gc2VlIGZsaWNrZXJzLi4uIGV2ZW4gd2l0aCBvdXIgdGFza2xldCA6LSggKQorICAgTWF5YmUgYmVjYXVzZSB0aGUgYnR0diBkcml2ZXIgYW5kIHVzYi11aGNpIHVzZSB0aGUgc2FtZSBpbnRlcnJ1cHQKKyovCisvKiBPciBtYXliZSBiZWNhdXNlIG91ciBCSCBoYW5kbGVyIGlzIHByZWVtcHRpbmcgYnR0didzIEJIIGhhbmRsZXIuLiBCSHMgZG9uJ3QKKyAqIHNvbHZlIGV2ZXJ5dGhpbmcuLiAoYWxleCkgKi8KK3N0YXRpYyB2b2lkIGF0NzZfcnhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisKKwlwcml2LT5yeF90YXNrbGV0LmRhdGEgPSAodW5zaWduZWQgbG9uZyl1cmI7CisJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cnhfdGFza2xldCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3R4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqbWdtdF9idWY7CisJaW50IHJldDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCXN0YXRzLT50eF9wYWNrZXRzKys7CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCQkvKiB1cmIgaGFzIGJlZW4gdW5saW5rZWQgKi8KKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWF0NzZfZGJnKERCR19VUkIsICIlcyAtIG5vbnplcm8gdHggc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJc3RhdHMtPnR4X2Vycm9ycysrOworCQlicmVhazsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bWdtdF9zcGlubG9jaywgZmxhZ3MpOworCW1nbXRfYnVmID0gcHJpdi0+bmV4dF9tZ210X2J1bGs7CisJcHJpdi0+bmV4dF9tZ210X2J1bGsgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1nbXRfc3BpbmxvY2ssIGZsYWdzKTsKKworCWlmICghbWdtdF9idWYpIHsKKwkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRkZXYpOworCQlyZXR1cm47CisJfQorCisJLyogd2UgZG9uJ3QgY29weSB0aGUgcGFkZGluZyBieXRlcywgYnV0IGFkZCB0aGVtCisJICAgdG8gdGhlIGxlbmd0aCAqLworCW1lbWNweShwcml2LT5idWxrX291dF9idWZmZXIsIG1nbXRfYnVmLAorCSAgICAgICBsZTE2X3RvX2NwdShtZ210X2J1Zi0+d2xlbmd0aCkgKyBBVDc2X1RYX0hEUkxFTik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+dHhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT50eF9waXBlLAorCQkJICBwcml2LT5idWxrX291dF9idWZmZXIsCisJCQkgIGxlMTZfdG9fY3B1KG1nbXRfYnVmLT53bGVuZ3RoKSArIG1nbXRfYnVmLT5wYWRkaW5nICsKKwkJCSAgQVQ3Nl9UWF9IRFJMRU4sIGF0NzZfdHhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gdHggc3VibWl0IHVyYjogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlrZnJlZShtZ210X2J1Zik7Cit9CisKKy8qIFNlbmQgYSBtYW5hZ2VtZW50IGZyYW1lIG9uIGJ1bGstb3V0LiAgdHhidWYtPndsZW5ndGggbXVzdCBiZSBzZXQgKi8KK3N0YXRpYyBpbnQgYXQ3Nl90eF9tZ210KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqdHhidWYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCWludCB1cmJfc3RhdHVzOworCXZvaWQgKm9sZGJ1ZiA9IE5VTEw7CisKKwluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRkZXYpOwkvKiBzdG9wIG5ldGRldiB3YXRjaGRvZyAqLworCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsJLyogc3RvcCB0eCBkYXRhIHBhY2tldHMgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tZ210X3NwaW5sb2NrLCBmbGFncyk7CisKKwl1cmJfc3RhdHVzID0gcHJpdi0+dHhfdXJiLT5zdGF0dXM7CisJaWYgKHVyYl9zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCS8qIGNhbm5vdCB0cmFuc21pdCBub3csIHB1dCBpbiB0aGUgcXVldWUgKi8KKwkJb2xkYnVmID0gcHJpdi0+bmV4dF9tZ210X2J1bGs7CisJCXByaXYtPm5leHRfbWdtdF9idWxrID0gdHhidWY7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1nbXRfc3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChvbGRidWYpIHsKKwkJLyogYSBkYXRhL21nbXQgdHggaXMgYWxyZWFkeSBwZW5kaW5nIGluIHRoZSBVUkIgLQorCQkgICBpZiB0aGlzIGlzIG5vIGVycm9yIGluIHNvbWUgc2l0dWF0aW9ucyB3ZSBtdXN0CisJCSAgIGltcGxlbWVudCBhIHF1ZXVlIG9yIHNpbGVudGx5IG1vZGlmeSB0aGUgb2xkIG1zZyAqLworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZW1vdmVkIHBlbmRpbmcgbWdtdCBidWZmZXIgJXNcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGhleDJzdHIob2xkYnVmLCA2NCkpOworCQlrZnJlZShvbGRidWYpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0eGJ1Zi0+dHhfcmF0ZSA9IFRYX1JBVEVfMU1CSVQ7CisJdHhidWYtPnBhZGRpbmcgPSBhdDc2X2NhbGNfcGFkZGluZyhsZTE2X3RvX2NwdSh0eGJ1Zi0+d2xlbmd0aCkpOworCW1lbXNldCh0eGJ1Zi0+cmVzZXJ2ZWQsIDAsIHNpemVvZih0eGJ1Zi0+cmVzZXJ2ZWQpKTsKKworCWlmIChwcml2LT5uZXh0X21nbXRfYnVsaykKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVVJCIHN0YXR1cyAlZCwgYnV0IG1nbXQgaXMgcGVuZGluZ1xuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgdXJiX3N0YXR1cyk7CisKKwlhdDc2X2RiZyhEQkdfVFhfTUdNVCwKKwkJICIlczogdHggbWdtdDogd2xlbiAlZCB0eF9yYXRlICVkIHBhZCAlZCAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGxlMTZfdG9fY3B1KHR4YnVmLT53bGVuZ3RoKSwKKwkJIHR4YnVmLT50eF9yYXRlLCB0eGJ1Zi0+cGFkZGluZywKKwkJIGhleDJzdHIodHhidWYtPnBhY2tldCwgbGUxNl90b19jcHUodHhidWYtPndsZW5ndGgpKSk7CisKKwkvKiB0eGJ1ZiB3YXMgbm90IGNvbnN1bWVkIGFib3ZlIC0+IHNlbmQgbWdtdCBtc2cgaW1tZWRpYXRlbHkgKi8KKwltZW1jcHkocHJpdi0+YnVsa19vdXRfYnVmZmVyLCB0eGJ1ZiwKKwkgICAgICAgbGUxNl90b19jcHUodHhidWYtPndsZW5ndGgpICsgQVQ3Nl9UWF9IRFJMRU4pOworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnR4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+dHhfcGlwZSwKKwkJCSAgcHJpdi0+YnVsa19vdXRfYnVmZmVyLAorCQkJICBsZTE2X3RvX2NwdSh0eGJ1Zi0+d2xlbmd0aCkgKyB0eGJ1Zi0+cGFkZGluZyArCisJCQkgIEFUNzZfVFhfSERSTEVOLCBhdDc2X3R4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT50eF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIHR4IHN1Ym1pdCB1cmI6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJa2ZyZWUodHhidWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyogR28gdG8gdGhlIG5leHQgaW5mb3JtYXRpb24gZWxlbWVudCAqLworc3RhdGljIGlubGluZSB2b2lkIG5leHRfaWUoc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKippZSkKK3sKKwkqaWUgPSAoc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKikoJigqaWUpLT5kYXRhWygqaWUpLT5sZW5dKTsKK30KKworLyogQ2hhbGxlbmdlIGlzIHRoZSBjaGFsbGVuZ2Ugc3RyaW5nIChpbiBUTFYgZm9ybWF0KQorICAgd2UgZ290IHdpdGggc2VxX25yIDIgZm9yIHNoYXJlZCBzZWNyZXQgYXV0aGVudGljYXRpb24gb25seSBhbmQKKyAgIHNlbmQgaW4gc2VxX25yIDMgV0VQIGVuY3J5cHRlZCB0byBwcm92ZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFdFUCBrZXk7CisgICBvdGhlcndpc2UgaXQgaXMgTlVMTCAqLworc3RhdGljIGludCBhdDc2X2F1dGhfcmVxKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqYnNzLAorCQkJIGludCBzZXFfbnIsIHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICpjaGFsbGVuZ2UpCit7CisJc3RydWN0IGF0NzZfdHhfYnVmZmVyICp0eF9idWZmZXI7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm1nbXQ7CisJc3RydWN0IGllZWU4MDIxMV9hdXRoICpyZXE7CisJaW50IGJ1Zl9sZW4gPSAoc2VxX25yICE9IDMgPyBBVVRIX0ZSQU1FX1NJWkUgOgorCQkgICAgICAgQVVUSF9GUkFNRV9TSVpFICsgMSArIDEgKyBjaGFsbGVuZ2UtPmxlbik7CisKKwlCVUdfT04oIWJzcyk7CisJQlVHX09OKHNlcV9uciA9PSAzICYmICFjaGFsbGVuZ2UpOworCXR4X2J1ZmZlciA9IGttYWxsb2MoYnVmX2xlbiArIE1BWF9QQURESU5HX1NJWkUsIEdGUF9BVE9NSUMpOworCWlmICghdHhfYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcSA9IChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKil0eF9idWZmZXItPnBhY2tldDsKKwltZ210ID0gJnJlcS0+aGVhZGVyOworCisJLyogbWFrZSB3aXJlbGVzcyBoZWFkZXIgKi8KKwkvKiBmaXJzdCBhdXRoIG1zZyBpcyBub3QgZW5jcnlwdGVkLCBvbmx5IHRoZSBzZWNvbmQgKHNlcV9uciA9PSAzKSAqLworCW1nbXQtPmZyYW1lX2N0bCA9CisJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0FVVEggfAorCQkJKHNlcV9uciA9PSAzID8gSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEIDogMCkpOworCisJbWdtdC0+ZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNigweDgwMDApOworCW1lbWNweShtZ210LT5hZGRyMSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5hZGRyMiwgcHJpdi0+bmV0ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5hZGRyMywgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCW1nbXQtPnNlcV9jdGwgPSBjcHVfdG9fbGUxNigwKTsKKworCXJlcS0+YWxnb3JpdGhtID0gY3B1X3RvX2xlMTYocHJpdi0+YXV0aF9tb2RlKTsKKwlyZXEtPnRyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYoc2VxX25yKTsKKwlyZXEtPnN0YXR1cyA9IGNwdV90b19sZTE2KDApOworCisJaWYgKHNlcV9uciA9PSAzKQorCQltZW1jcHkocmVxLT5pbmZvX2VsZW1lbnQsIGNoYWxsZW5nZSwgMSArIDEgKyBjaGFsbGVuZ2UtPmxlbik7CisKKwkvKiBpbml0LiBhdDc2X3ByaXYgdHggaGVhZGVyICovCisJdHhfYnVmZmVyLT53bGVuZ3RoID0gY3B1X3RvX2xlMTYoYnVmX2xlbiAtIEFUNzZfVFhfSERSTEVOKTsKKwlhdDc2X2RiZyhEQkdfVFhfTUdNVCwgIiVzOiBBdXRoUmVxIGJzc2lkICVzIGFsZyAlZCBzZXFfbnIgJWQiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKG1nbXQtPmFkZHIzKSwKKwkJIGxlMTZfdG9fY3B1KHJlcS0+YWxnb3JpdGhtKSwgbGUxNl90b19jcHUocmVxLT50cmFuc2FjdGlvbikpOworCWlmIChzZXFfbnIgPT0gMykKKwkJYXQ3Nl9kYmcoREJHX1RYX01HTVQsICIlczogQXV0aFJlcSBjaGFsbGVuZ2U6ICVzIC4uLiIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBoZXgyc3RyKHJlcS0+aW5mb19lbGVtZW50LCAxOCkpOworCisJLyogZWl0aGVyIHNlbmQgaW1tZWRpYXRlbHkgKGlmIG5vIGRhdGEgdHggaXMgcGVuZGluZworCSAgIG9yIHB1dCBpdCBpbiBwZW5kaW5nIGxpc3QgKi8KKwlyZXR1cm4gYXQ3Nl90eF9tZ210KHByaXYsIHR4X2J1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9hc3NvY19yZXEoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpic3MpCit7CisJc3RydWN0IGF0NzZfdHhfYnVmZmVyICp0eF9idWZmZXI7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm1nbXQ7CisJc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmllOworCWNoYXIgKmVzc2lkOworCWludCBlc3NpZF9sZW47CisJdTE2IGNhcGE7CisKKwlCVUdfT04oIWJzcyk7CisKKwl0eF9idWZmZXIgPSBrbWFsbG9jKEFTU09DUkVRX01BWF9TSVpFICsgTUFYX1BBRERJTkdfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0eF9idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVxID0gKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCAqKXR4X2J1ZmZlci0+cGFja2V0OworCW1nbXQgPSAmcmVxLT5oZWFkZXI7CisJaWUgPSByZXEtPmluZm9fZWxlbWVudDsKKworCS8qIG1ha2Ugd2lyZWxlc3MgaGVhZGVyICovCisJbWdtdC0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCSAgICAgIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOworCisJbWdtdC0+ZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNigweDgwMDApOworCW1lbWNweShtZ210LT5hZGRyMSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5hZGRyMiwgcHJpdi0+bmV0ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5hZGRyMywgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCW1nbXQtPnNlcV9jdGwgPSBjcHVfdG9fbGUxNigwKTsKKworCS8qIHdlIG11c3Qgc2V0IHRoZSBQcml2YWN5IGJpdCBpbiB0aGUgY2FwYWJpbGl0aWVzIHRvIGFzc3VyZSBhbgorCSAgIEFnZXJlLWJhc2VkIEFQIHdpdGggb3B0aW9uYWwgV0VQIHRyYW5zbWl0cyBlbmNyeXB0ZWQgZnJhbWVzCisJICAgdG8gdXMuICBBUCBvbmx5IHNldCB0aGUgUHJpdmFjeSBiaXQgaW4gdGhlaXIgY2FwYWJpbGl0aWVzCisJICAgaWYgV0VQIGlzIG1hbmRhdG9yeSBpbiB0aGUgQlNTISAqLworCWNhcGEgPSBic3MtPmNhcGE7CisJaWYgKHByaXYtPndlcF9lbmFibGVkKQorCQljYXBhIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCWlmIChwcml2LT5wcmVhbWJsZV90eXBlICE9IFBSRUFNQkxFX1RZUEVfTE9ORykKKwkJY2FwYSB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CisJcmVxLT5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYoY2FwYSk7CisKKwlyZXEtPmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KDIgKiBic3MtPmJlYWNvbl9pbnRlcnZhbCk7CisKKwkvKiB3cml0ZSBUTFYgZGF0YSBlbGVtZW50cyAqLworCisJaWUtPmlkID0gTUZJRV9UWVBFX1NTSUQ7CisJaWUtPmxlbiA9IGJzcy0+c3NpZF9sZW47CisJbWVtY3B5KGllLT5kYXRhLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pOworCW5leHRfaWUoJmllKTsKKworCWllLT5pZCA9IE1GSUVfVFlQRV9SQVRFUzsKKwlpZS0+bGVuID0gc2l6ZW9mKGh3X3JhdGVzKTsKKwltZW1jcHkoaWUtPmRhdGEsIGh3X3JhdGVzLCBzaXplb2YoaHdfcmF0ZXMpKTsKKwluZXh0X2llKCZpZSk7CQkvKiBpZSBwb2ludHMgYmVoaW5kIHRoZSBzdXBwX3JhdGVzIGZpZWxkICovCisKKwkvKiBpbml0LiBhdDc2X3ByaXYgdHggaGVhZGVyICovCisJdHhfYnVmZmVyLT53bGVuZ3RoID0gY3B1X3RvX2xlMTYoKHU4ICopaWUgLSAodTggKiltZ210KTsKKworCWllID0gcmVxLT5pbmZvX2VsZW1lbnQ7CisJZXNzaWQgPSBpZS0+ZGF0YTsKKwllc3NpZF9sZW4gPSBtaW5fdChpbnQsIElXX0VTU0lEX01BWF9TSVpFLCBpZS0+bGVuKTsKKworCW5leHRfaWUoJmllKTsJCS8qIHBvaW50cyB0byBJRSBvZiByYXRlcyBub3cgKi8KKwlhdDc2X2RiZyhEQkdfVFhfTUdNVCwKKwkJICIlczogQXNzb2NSZXEgYnNzaWQgJXMgY2FwYSAweCUwNHggc3NpZCAlLipzIHJhdGVzICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihtZ210LT5hZGRyMyksCisJCSBsZTE2X3RvX2NwdShyZXEtPmNhcGFiaWxpdHkpLCBlc3NpZF9sZW4sIGVzc2lkLAorCQkgaGV4MnN0cihpZS0+ZGF0YSwgaWUtPmxlbikpOworCisJLyogZWl0aGVyIHNlbmQgaW1tZWRpYXRlbHkgKGlmIG5vIGRhdGEgdHggaXMgcGVuZGluZworCSAgIG9yIHB1dCBpdCBpbiBwZW5kaW5nIGxpc3QgKi8KKwlyZXR1cm4gYXQ3Nl90eF9tZ210KHByaXYsIHR4X2J1ZmZlcik7Cit9CisKKy8qIFdlIGdvdCB0byBjaGVjayB0aGUgYnNzX2xpc3QgZm9yIG9sZCBlbnRyaWVzICovCitzdGF0aWMgdm9pZCBhdDc2X2Jzc19saXN0X3RpbWVvdXQodW5zaWduZWQgbG9uZyBwYXIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgYXQ3Nl9wcml2ICopcGFyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqbHB0ciwgKm5wdHI7CisJc3RydWN0IGJzc19pbmZvICpwdHI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShscHRyLCBucHRyLCAmcHJpdi0+YnNzX2xpc3QpIHsKKworCQlwdHIgPSBsaXN0X2VudHJ5KGxwdHIsIHN0cnVjdCBic3NfaW5mbywgbGlzdCk7CisKKwkJaWYgKHB0ciAhPSBwcml2LT5jdXJyX2JzcworCQkgICAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBwdHItPmxhc3RfcnggKyBCU1NfTElTVF9USU1FT1VUKSkgeworCQkJYXQ3Nl9kYmcoREJHX0JTU19UQUJMRV9STSwKKwkJCQkgIiVzOiBic3NfbGlzdDogcmVtb3Zpbmcgb2xkIEJTUyAlcyBjaCAlZCIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihwdHItPmJzc2lkKSwKKwkJCQkgcHRyLT5jaGFubmVsKTsKKwkJCWxpc3RfZGVsKCZwdHItPmxpc3QpOworCQkJa2ZyZWUocHRyKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCS8qIHJlc3RhcnQgdGhlIHRpbWVyICovCisJbW9kX3RpbWVyKCZwcml2LT5ic3NfbGlzdF90aW1lciwgamlmZmllcyArIEJTU19MSVNUX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ3Nl9zZXRfbWFjX3N0YXRlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkJICAgICAgZW51bSBtYWNfc3RhdGUgbWFjX3N0YXRlKQoreworCWF0NzZfZGJnKERCR19NQUNfU1RBVEUsICIlcyBzdGF0ZTogJXMiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBtYWNfc3RhdGVzW21hY19zdGF0ZV0pOworCXByaXYtPm1hY19zdGF0ZSA9IG1hY19zdGF0ZTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX2Jzc190YWJsZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBic3NfaW5mbyAqcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqbHB0cjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCisJYXQ3Nl9kYmcoREJHX0JTU19UQUJMRSwgIiVzIEJTUyB0YWJsZSAoY3Vycj0lcCk6IiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgcHJpdi0+Y3Vycl9ic3MpOworCisJbGlzdF9mb3JfZWFjaChscHRyLCAmcHJpdi0+YnNzX2xpc3QpIHsKKwkJcHRyID0gbGlzdF9lbnRyeShscHRyLCBzdHJ1Y3QgYnNzX2luZm8sIGxpc3QpOworCQlhdDc2X2RiZyhEQkdfQlNTX1RBQkxFLCAiMHglcDogYnNzaWQgJXMgY2hhbm5lbCAlZCBzc2lkICUuKnMgIgorCQkJICIoJXMpIGNhcGEgMHglMDR4IHJhdGVzICVzIHJzc2kgJWQgbGluayAlZCBub2lzZSAlZCIsCisJCQkgcHRyLCBtYWMyc3RyKHB0ci0+YnNzaWQpLCBwdHItPmNoYW5uZWwsIHB0ci0+c3NpZF9sZW4sCisJCQkgcHRyLT5zc2lkLCBoZXgyc3RyKHB0ci0+c3NpZCwgcHRyLT5zc2lkX2xlbiksCisJCQkgcHRyLT5jYXBhLCBoZXgyc3RyKHB0ci0+cmF0ZXMsIHB0ci0+cmF0ZXNfbGVuKSwKKwkJCSBwdHItPnJzc2ksIHB0ci0+bGlua19xdWFsLCBwdHItPm5vaXNlX2xldmVsKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKK30KKworLyogQ2FsbGVkIHVwb24gc3VjY2Vzc2Z1bCBhc3NvY2lhdGlvbiB0byBtYXJrIGludGVyZmFjZSBhcyBjb25uZWN0ZWQgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19hc3NvY19kb25lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfYXNzb2NfZG9uZSk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJV0FSTl9PTihwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FTU09DKTsKKwlXQVJOX09OKCFwcml2LT5jdXJyX2Jzcyk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVNTT0MgfHwgIXByaXYtPmN1cnJfYnNzKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKSB7CisJCWlmIChwcml2LT5wbV9tb2RlICE9IEFUNzZfUE1fT0ZGKSB7CisJCQkvKiBjYWxjdWxhdGUgdGhlIGxpc3RlbiBpbnRlcnZhbCBpbiB1bml0cyBvZgorCQkJICAgYmVhY29uIGludGVydmFscyBvZiB0aGUgY3Vycl9ic3MgKi8KKwkJCXUzMiBwbV9wZXJpb2RfYmVhY29uID0gKHByaXYtPnBtX3BlcmlvZCA+PiAxMCkgLworCQkJICAgIHByaXYtPmN1cnJfYnNzLT5iZWFjb25faW50ZXJ2YWw7CisKKwkJCXBtX3BlcmlvZF9iZWFjb24gPSBtYXgocG1fcGVyaW9kX2JlYWNvbiwgMnUpOworCQkJcG1fcGVyaW9kX2JlYWNvbiA9IG1pbihwbV9wZXJpb2RfYmVhY29uLCAweGZmZmZ1KTsKKworCQkJYXQ3Nl9kYmcoREJHX1BNLAorCQkJCSAiJXM6IHBtX21vZGUgJWQgYXNzb2MgaWQgMHgleCBsaXN0ZW4gaW50ICVkIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwcml2LT5wbV9tb2RlLAorCQkJCSBwcml2LT5hc3NvY19pZCwgcG1fcGVyaW9kX2JlYWNvbik7CisKKwkJCWF0NzZfc2V0X2Fzc29jaWQocHJpdiwgcHJpdi0+YXNzb2NfaWQpOworCQkJYXQ3Nl9zZXRfbGlzdGVuX2ludGVydmFsKHByaXYsICh1MTYpcG1fcGVyaW9kX2JlYWNvbik7CisJCX0KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19iZWFjb24sIEJFQUNPTl9USU1FT1VUKTsKKwl9CisJYXQ3Nl9zZXRfcG1fbW9kZShwcml2KTsKKworCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+bmV0ZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldGRldik7CisJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19DT05ORUNURUQpOworCWF0NzZfaXdldmVudF9ic3NfY29ubmVjdChwcml2LT5uZXRkZXYsIHByaXYtPmN1cnJfYnNzLT5ic3NpZCk7CisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAiJXM6IGNvbm5lY3RlZCB0byBCU1NJRCAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIocHJpdi0+Y3Vycl9ic3MtPmJzc2lkKSk7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBXZSBvbmx5IHN0b3JlIHRoZSBuZXcgbWFjIGFkZHJlc3MgaW4gbmV0ZGV2IHN0cnVjdCwKKyAgIGl0IGdldHMgc2V0IHdoZW4gdGhlIG5ldGRldiBpcyBvcGVuZWQuICovCitzdGF0aWMgaW50IGF0NzZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyICptYWMgPSBhZGRyOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBtYWMtPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphdDc2X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiAmcHJpdi0+c3RhdHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqYXQ3Nl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIlJFVFVSTiBxdWFsICVkIGxldmVsICVkIG5vaXNlICVkIHVwZGF0ZWQgJWQiLAorCQkgcHJpdi0+d3N0YXRzLnF1YWwucXVhbCwgcHJpdi0+d3N0YXRzLnF1YWwubGV2ZWwsCisJCSBwcml2LT53c3RhdHMucXVhbC5ub2lzZSwgcHJpdi0+d3N0YXRzLnF1YWwudXBkYXRlZCk7CisKKwlyZXR1cm4gJnByaXYtPndzdGF0czsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHByb21pc2M7CisKKwlwcm9taXNjID0gKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICE9IDApOworCWlmIChwcm9taXNjICE9IHByaXYtPnByb21pc2MpIHsKKwkJLyogVGhpcyBnZXRzIGNhbGxlZCBpbiBpbnRlcnJ1cHQsIG11c3QgcmVzY2hlZHVsZSAqLworCQlwcml2LT5wcm9taXNjID0gcHJvbWlzYzsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19zZXRfcHJvbWlzYyk7CisJfQorfQorCisvKiBTdG9wIGFsbCBuZXR3b3JrIGFjdGl2aXR5LCBmbHVzaCBhbGwgcGVuZGluZyB0YXNrcyAqLworc3RhdGljIHZvaWQgYXQ3Nl9xdWllc2NlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRkZXYpOworCisJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19JTklUKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19iZWFjb24pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19yZXN0YXJ0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tZ210X3NwaW5sb2NrLCBmbGFncyk7CisJa2ZyZWUocHJpdi0+bmV4dF9tZ210X2J1bGspOworCXByaXYtPm5leHRfbWdtdF9idWxrID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5tZ210X3NwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhdDc2X3ByaXYgaW1wbGVtZW50YXRpb25zIG9mIGl3X2hhbmRsZXIgZnVuY3Rpb25zOgorICovCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB2b2lkICpudWxsLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzICVzOiByZXN0YXJ0aW5nIHRoZSBkZXZpY2UiLCBuZXRkZXYtPm5hbWUsCisJCSBfX2Z1bmNfXyk7CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19JTklUKQorCQlhdDc2X3F1aWVzY2UocHJpdik7CisKKwkvKiBXYWl0IGhhbGYgc2Vjb25kIGJlZm9yZSB0aGUgcmVzdGFydCB0byBwcm9jZXNzIHN1YnNlcXVlbnQKKwkgKiByZXF1ZXN0cyBmcm9tIHRoZSBzYW1lIGl3Y29uZmlnIGluIGEgc2luZ2xlIHJlc3RhcnQgKi8KKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX3Jlc3RhcnQsIEhaIC8gMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgY2hhciAqbmFtZSwgY2hhciAqZXh0cmEpCit7CisJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV05BTUUgLSBuYW1lICVzIiwgbmV0ZGV2LT5uYW1lLCBuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBjaGFuID0gLTE7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdGUkVRIC0gZnJlcS5tICVkIGZyZXEuZSAlZCIsCisJCSBuZXRkZXYtPm5hbWUsIGZyZXEtPm0sIGZyZXEtPmUpOworCisJaWYgKChmcmVxLT5lID09IDApICYmIChmcmVxLT5tIDw9IDEwMDApKQorCQkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCisJCWNoYW4gPSBmcmVxLT5tOworCWVsc2UgeworCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSAtIHNlYXJjaCB0aGUgdGFibGUgKi8KKwkJaW50IG11bHQgPSAxOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKDYgLSBmcmVxLT5lKTsgaSsrKQorCQkJbXVsdCAqPSAxMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKKwkJCWlmIChmcmVxLT5tID09IChjaGFubmVsX2ZyZXF1ZW5jeVtpXSAqIG11bHQpKQorCQkJCWNoYW4gPSBpICsgMTsKKwkJfQorCX0KKworCWlmIChjaGFuIDwgMSB8fCAhcHJpdi0+ZG9tYWluKQorCQkvKiBub24tcG9zaXRpdmUgY2hhbm5lbHMgYXJlIGludmFsaWQKKwkJICogd2UgbmVlZCBhIGRvbWFpbiBpbmZvIHRvIHNldCB0aGUgY2hhbm5lbAorCQkgKiBlaXRoZXIgdGhhdCBvciBhbiBpbnZhbGlkIGZyZXF1ZW5jeSB3YXMKKwkJICogcHJvdmlkZWQgYnkgdGhlIHVzZXIgKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwllbHNlIGlmICghKHByaXYtPmRvbWFpbi0+Y2hhbm5lbF9tYXAgJiAoMSA8PCAoY2hhbiAtIDEpKSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNoYW5uZWwgJWQgbm90IGFsbG93ZWQgZm9yIGRvbWFpbiAlc1xuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgY2hhbiwgcHJpdi0+ZG9tYWluLT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlpZiAocmV0ID09IC1FSVdDT01NSVQpIHsKKwkJcHJpdi0+Y2hhbm5lbCA9IGNoYW47CisJCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXRlJFUSAtIGNoICVkIiwgbmV0ZGV2LT5uYW1lLAorCQkJIGNoYW4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWZyZXEtPm0gPSBwcml2LT5jaGFubmVsOworCWZyZXEtPmUgPSAwOworCisJaWYgKHByaXYtPmNoYW5uZWwpCisJCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXRlJFUSAtIGZyZXEgJWxkIHggMTBlJWQiLAorCQkJIG5ldGRldi0+bmFtZSwgY2hhbm5lbF9mcmVxdWVuY3lbcHJpdi0+Y2hhbm5lbCAtIDFdLCA2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXRlJFUSAtIGNoICVkIiwgbmV0ZGV2LT5uYW1lLAorCQkgcHJpdi0+Y2hhbm5lbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdNT0RFIC0gJWQiLCBuZXRkZXYtPm5hbWUsICptb2RlKTsKKworCWlmICgoKm1vZGUgIT0gSVdfTU9ERV9BREhPQykgJiYgKCptb2RlICE9IElXX01PREVfSU5GUkEpICYmCisJICAgICgqbW9kZSAhPSBJV19NT0RFX01PTklUT1IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPml3X21vZGUgPSAqbW9kZTsKKwlpZiAocHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKQorCQlwcml2LT5wbV9tb2RlID0gQVQ3Nl9QTV9PRkY7CisKKwlyZXR1cm4gLUVJV0NPTU1JVDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJKm1vZGUgPSBwcml2LT5pd19tb2RlOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdNT0RFIC0gJWQiLCBuZXRkZXYtPm5hbWUsICptb2RlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfcmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCS8qIGluc3BpcmVkIGJ5IGF0bWVsLmMgKi8KKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOworCWludCBpOworCisJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisKKwkvKiBUT0RPOiByYW5nZS0+dGhyb3VnaHB1dCA9IHh4eHh4eDsgKi8KKworCXJhbmdlLT5taW5fbndpZCA9IDB4MDAwMDsKKwlyYW5nZS0+bWF4X253aWQgPSAweDAwMDA7CisKKwkvKiB0aGlzIGRyaXZlciBkb2Vzbid0IG1haW50YWluIHNlbnNpdGl2aXR5IGluZm9ybWF0aW9uICovCisJcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMDsKKworCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOworCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDEwMDsKKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOworCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCisJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKKwlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSA1MDsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAwOworCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCisJcmFuZ2UtPmJpdHJhdGVbMF0gPSAxMDAwMDAwOworCXJhbmdlLT5iaXRyYXRlWzFdID0gMjAwMDAwMDsKKwlyYW5nZS0+Yml0cmF0ZVsyXSA9IDU1MDAwMDA7CisJcmFuZ2UtPmJpdHJhdGVbM10gPSAxMTAwMDAwMDsKKwlyYW5nZS0+bnVtX2JpdHJhdGVzID0gNDsKKworCXJhbmdlLT5taW5fcnRzID0gMDsKKwlyYW5nZS0+bWF4X3J0cyA9IE1BWF9SVFNfVEhSRVNIT0xEOworCisJcmFuZ2UtPm1pbl9mcmFnID0gTUlOX0ZSQUdfVEhSRVNIT0xEOworCXJhbmdlLT5tYXhfZnJhZyA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKworCXJhbmdlLT5wbXBfZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7CisJcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX09OOworCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfQUxMX1I7CisKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IFdFUF9TTUFMTF9LRVlfTEVOOworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gV0VQX0xBUkdFX0tFWV9MRU47CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBXRVBfS0VZUzsKKworCS8qIGJvdGggV0wtMjQwVSBhbmQgTGlua3N5cyBXVVNCMTEgdjIuNiBzcGVjaWZ5IDE1IGRCbSBhcyBvdXRwdXQgcG93ZXIKKwkgICAtIHRha2UgdGhpcyBmb3IgYWxsIChpZ25vcmUgYW50ZW5uYSBnYWlucykgKi8KKwlyYW5nZS0+dHhwb3dlclswXSA9IDE1OworCXJhbmdlLT5udW1fdHhwb3dlciA9IDE7CisJcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX0RCTTsKKworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKworCS8qIHNhbWUgYXMgdGhlIHZhbHVlcyB1c2VkIGluIGF0bWVsLmMgKi8KKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yX3RpbWVfZmxhZ3MgPSAwOworCXJhbmdlLT5taW5fcmV0cnkgPSAxOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOworCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgeworCQkvKiB0ZXN0IGlmIGNoYW5uZWwgbWFwIGJpdCBpcyByYWlzZWQgKi8KKwkJaWYgKHByaXYtPmRvbWFpbi0+Y2hhbm5lbF9tYXAgJiAoMHgxIDw8IGkpKSB7CisJCQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSArPSAxOworCisJCQlyYW5nZS0+ZnJlcVtpXS5pID0gaSArIDE7CisJCQlyYW5nZS0+ZnJlcVtpXS5tID0gY2hhbm5lbF9mcmVxdWVuY3lbaV0gKiAxMDAwMDA7CisJCQlyYW5nZS0+ZnJlcVtpXS5lID0gMTsJLyogZnJlcSAqIDEwXjEgKi8KKwkJfQorCX0KKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXUkFOR0UiLCBuZXRkZXYtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9zcHkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IDA7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV1NQWSAtIG51bWJlciBvZiBhZGRyZXNzZXMgJWQiLAorCQkgbmV0ZGV2LT5uYW1lLCBkYXRhLT5sZW5ndGgpOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCXJldCA9IGl3X2hhbmRsZXJfc2V0X3NweShwcml2LT5uZXRkZXYsIGluZm8sICh1bmlvbiBpd3JlcV9kYXRhICopZGF0YSwKKwkJCQkgZXh0cmEpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3NweShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCXJldCA9IGl3X2hhbmRsZXJfZ2V0X3NweShwcml2LT5uZXRkZXYsIGluZm8sCisJCQkJICh1bmlvbiBpd3JlcV9kYXRhICopZGF0YSwgZXh0cmEpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdTUFkgLSBudW1iZXIgb2YgYWRkcmVzc2VzICVkIiwKKwkJIG5ldGRldi0+bmFtZSwgZGF0YS0+bGVuZ3RoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF90aHJzcHkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXVEhSU1BZIC0gbnVtYmVyIG9mIGFkZHJlc3NlcyAlZCkiLAorCQkgbmV0ZGV2LT5uYW1lLCBkYXRhLT5sZW5ndGgpOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCXJldCA9IGl3X2hhbmRsZXJfc2V0X3RocnNweShuZXRkZXYsIGluZm8sICh1bmlvbiBpd3JlcV9kYXRhICopZGF0YSwKKwkJCQkgICAgZXh0cmEpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3RocnNweShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCXJldCA9IGl3X2hhbmRsZXJfZ2V0X3RocnNweShuZXRkZXYsIGluZm8sICh1bmlvbiBpd3JlcV9kYXRhICopZGF0YSwKKwkJCQkgICAgZXh0cmEpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdUSFJTUFkgLSBudW1iZXIgb2YgYWRkcmVzc2VzICVkKSIsCisJCSBuZXRkZXYtPm5hbWUsIGRhdGEtPmxlbmd0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdBUCAtIHdhcC9ic3NpZCAlcyIsIG5ldGRldi0+bmFtZSwKKwkJIG1hYzJzdHIoYXBfYWRkci0+c2FfZGF0YSkpOworCisJLyogaWYgdGhlIGluY29taW5nIGFkZHJlc3MgPT0gZmY6ZmY6ZmY6ZmY6ZmY6ZmYsIHRoZSB1c2VyIGhhcworCSAgIGNob3NlbiBhbnkgb3IgYXV0byBBUCBwcmVmZXJlbmNlICovCisJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFwX2FkZHItPnNhX2RhdGEpCisJICAgIHx8IGlzX3plcm9fZXRoZXJfYWRkcihhcF9hZGRyLT5zYV9kYXRhKSkKKwkJcHJpdi0+d2FudGVkX2Jzc2lkX3ZhbGlkID0gMDsKKwllbHNlIHsKKwkJLyogdXNlciB3YW50cyB0byBzZXQgYSBwcmVmZXJyZWQgQVAgYWRkcmVzcyAqLworCQlwcml2LT53YW50ZWRfYnNzaWRfdmFsaWQgPSAxOworCQltZW1jcHkocHJpdi0+d2FudGVkX2Jzc2lkLCBhcF9hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJfQorCisJcmV0dXJuIC1FSVdDT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV0FQIC0gd2FwL2Jzc2lkICVzIiwgbmV0ZGV2LT5uYW1lLAorCQkgbWFjMnN0cihhcF9hZGRyLT5zYV9kYXRhKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IDA7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV1NDQU4iLCBuZXRkZXYtPm5hbWUpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXR4KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXJldCA9IC1FTkVURE9XTjsKKwkJZ290byBleGl0OworCX0KKworCS8qIGphbDogd2UgZG9uJ3QgYWxsb3cgIml3bGlzdCBldGhYIHNjYW4iIHdoaWxlIHdlIGFyZQorCSAgIGluIG1vbml0b3IgbW9kZSAqLworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBEaXNjYXJkIG9sZCBzY2FuIHJlc3VsdHMgKi8KKwlpZiAoKGppZmZpZXMgLSBwcml2LT5sYXN0X3NjYW4pID4gKDIwICogSFopKQorCQlwcml2LT5zY2FuX3N0YXRlID0gU0NBTl9JRExFOworCXByaXYtPmxhc3Rfc2NhbiA9IGppZmZpZXM7CisKKwkvKiBJbml0aWF0ZSBhIHNjYW4gY29tbWFuZCAqLworCWlmIChwcml2LT5zY2FuX3N0YXRlID09IFNDQU5fSU5fUFJPR1JFU1MpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+c2Nhbl9zdGF0ZSA9IFNDQU5fSU5fUFJPR1JFU1M7CisKKwlhdDc2X3F1aWVzY2UocHJpdik7CisKKwkvKiBUcnkgdG8gZG8gcGFzc2l2ZSBvciBhY3RpdmUgc2NhbiBpZiBXRSBhc2tzIGFzLiAqLworCWlmICh3cnF1LT5kYXRhLmxlbmd0aAorCSAgICAmJiB3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSkgeworCQlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKKworCQlpZiAocmVxLT5zY2FuX3R5cGUgPT0gSVdfU0NBTl9UWVBFX1BBU1NJVkUpCisJCQlwcml2LT5zY2FuX21vZGUgPSBTQ0FOX1RZUEVfUEFTU0lWRTsKKwkJZWxzZSBpZiAocmVxLT5zY2FuX3R5cGUgPT0gSVdfU0NBTl9UWVBFX0FDVElWRSkKKwkJCXByaXYtPnNjYW5fbW9kZSA9IFNDQU5fVFlQRV9BQ1RJVkU7CisKKwkJLyogU2FuaXR5IGNoZWNrIHZhbHVlcz8gKi8KKwkJaWYgKHJlcS0+bWluX2NoYW5uZWxfdGltZSA+IDApCisJCQlwcml2LT5zY2FuX21pbl90aW1lID0gcmVxLT5taW5fY2hhbm5lbF90aW1lOworCisJCWlmIChyZXEtPm1heF9jaGFubmVsX3RpbWUgPiAwKQorCQkJcHJpdi0+c2Nhbl9tYXhfdGltZSA9IHJlcS0+bWF4X2NoYW5uZWxfdGltZTsKKwl9CisKKwkvKiBjaGFuZ2UgdG8gc2Nhbm5pbmcgc3RhdGUgKi8KKwlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX1NDQU5OSU5HKTsKKwlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX3N0YXJ0X3NjYW4pOworCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqbHB0ciwgKm5wdHI7CisJc3RydWN0IGJzc19pbmZvICpjdXJyX2JzczsKKwlzdHJ1Y3QgaXdfZXZlbnQgKml3ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpd19ldmVudCksIEdGUF9LRVJORUwpOworCWNoYXIgKmN1cnJfdmFsLCAqY3Vycl9wb3MgPSBleHRyYTsKKwlpbnQgaTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXU0NBTiIsIG5ldGRldi0+bmFtZSk7CisKKwlpZiAoIWl3ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocHJpdi0+c2Nhbl9zdGF0ZSAhPSBTQ0FOX0NPTVBMRVRFRCkgeworCQkvKiBzY2FuIG5vdCB5ZXQgZmluaXNoZWQgKi8KKwkJa2ZyZWUoaXdlKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobHB0ciwgbnB0ciwgJnByaXYtPmJzc19saXN0KSB7CisJCWN1cnJfYnNzID0gbGlzdF9lbnRyeShscHRyLCBzdHJ1Y3QgYnNzX2luZm8sIGxpc3QpOworCisJCWl3ZS0+Y21kID0gU0lPQ0dJV0FQOworCQlpd2UtPnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCW1lbWNweShpd2UtPnUuYXBfYWRkci5zYV9kYXRhLCBjdXJyX2Jzcy0+YnNzaWQsIDYpOworCQljdXJyX3BvcyA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJfcG9zLAorCQkJCQkJZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCBpd2UsCisJCQkJCQlJV19FVl9BRERSX0xFTik7CisKKwkJaXdlLT51LmRhdGEubGVuZ3RoID0gY3Vycl9ic3MtPnNzaWRfbGVuOworCQlpd2UtPmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJaXdlLT51LmRhdGEuZmxhZ3MgPSAxOworCisJCWN1cnJfcG9zID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3Vycl9wb3MsCisJCQkJCQlleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsIGl3ZSwKKwkJCQkJCWN1cnJfYnNzLT5zc2lkKTsKKworCQlpd2UtPmNtZCA9IFNJT0NHSVdNT0RFOworCQlpd2UtPnUubW9kZSA9IChjdXJyX2Jzcy0+Y2FwYSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSA/CisJCSAgICBJV19NT0RFX0FESE9DIDoKKwkJICAgIChjdXJyX2Jzcy0+Y2FwYSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpID8KKwkJICAgIElXX01PREVfTUFTVEVSIDogSVdfTU9ERV9BVVRPOworCQkvKiBJV19NT0RFX0FVVE8gPSAwIHdoaWNoIEkgdGhvdWdodCBpcworCQkgKiB0aGUgbW9zdCBsb2dpY2FsIHZhbHVlIHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKi8KKwkJY3Vycl9wb3MgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyX3BvcywKKwkJCQkJCWV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgaXdlLAorCQkJCQkJSVdfRVZfVUlOVF9MRU4pOworCisJCWl3ZS0+Y21kID0gU0lPQ0dJV0ZSRVE7CisJCWl3ZS0+dS5mcmVxLm0gPSBjdXJyX2Jzcy0+Y2hhbm5lbDsKKwkJaXdlLT51LmZyZXEuZSA9IDA7CisJCWN1cnJfcG9zID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3Vycl9wb3MsCisJCQkJCQlleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsIGl3ZSwKKwkJCQkJCUlXX0VWX0ZSRVFfTEVOKTsKKworCQlpd2UtPmNtZCA9IFNJT0NHSVdFTkNPREU7CisJCWlmIChjdXJyX2Jzcy0+Y2FwYSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQkJaXdlLT51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwkJZWxzZQorCQkJaXdlLT51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisKKwkJaXdlLT51LmRhdGEubGVuZ3RoID0gMDsKKwkJY3Vycl9wb3MgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyX3BvcywKKwkJCQkJCWV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgaXdlLAorCQkJCQkJTlVMTCk7CisKKwkJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLworCQlpd2UtPmNtZCA9IElXRVZRVUFMOworCQlpd2UtPnUucXVhbC5ub2lzZSA9IDA7CisJCWl3ZS0+dS5xdWFsLnVwZGF0ZWQgPQorCQkgICAgSVdfUVVBTF9OT0lTRV9JTlZBTElEIHwgSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQlpd2UtPnUucXVhbC5sZXZlbCA9IChjdXJyX2Jzcy0+cnNzaSAqIDEwMCAvIDQyKTsKKwkJaWYgKGl3ZS0+dS5xdWFsLmxldmVsID4gMTAwKQorCQkJaXdlLT51LnF1YWwubGV2ZWwgPSAxMDA7CisJCWlmIChhdDc2X2lzX2ludGVyc2lsKHByaXYtPmJvYXJkX3R5cGUpKQorCQkJaXdlLT51LnF1YWwucXVhbCA9IGN1cnJfYnNzLT5saW5rX3F1YWw7CisJCWVsc2UgeworCQkJaXdlLT51LnF1YWwucXVhbCA9IDA7CisJCQlpd2UtPnUucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9JTlZBTElEOworCQl9CisJCS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKwkJY3Vycl9wb3MgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyX3BvcywKKwkJCQkJCWV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgaXdlLAorCQkJCQkJSVdfRVZfUVVBTF9MRU4pOworCisJCS8qIFJhdGU6IHN0dWZmaW5nIG11bHRpcGxlIHZhbHVlcyBpbiBhIHNpbmdsZSBldmVudCByZXF1aXJlcworCQkgKiBhIGJpdCBtb3JlIG9mIG1hZ2ljIC0gSmVhbiBJSSAqLworCQljdXJyX3ZhbCA9IGN1cnJfcG9zICsgSVdfRVZfTENQX0xFTjsKKworCQlpd2UtPmNtZCA9IFNJT0NHSVdSQVRFOworCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwkJaXdlLT51LmJpdHJhdGUuZml4ZWQgPSAwOworCQlpd2UtPnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisJCS8qIE1heCA4IHZhbHVlcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgY3Vycl9ic3MtPnJhdGVzX2xlbjsgaSsrKSB7CisJCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLworCQkJaXdlLT51LmJpdHJhdGUudmFsdWUgPQorCQkJICAgICgoY3Vycl9ic3MtPnJhdGVzW2ldICYgMHg3ZikgKiA1MDAwMDApOworCQkJLyogQWRkIG5ldyB2YWx1ZSB0byBldmVudCAqLworCQkJY3Vycl92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyX3BvcywKKwkJCQkJCQljdXJyX3ZhbCwKKwkJCQkJCQlleHRyYSArCisJCQkJCQkJSVdfU0NBTl9NQVhfREFUQSwgaXdlLAorCQkJCQkJCUlXX0VWX1BBUkFNX0xFTik7CisJCX0KKworCQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KKwkJaWYgKChjdXJyX3ZhbCAtIGN1cnJfcG9zKSA+IElXX0VWX0xDUF9MRU4pCisJCQljdXJyX3BvcyA9IGN1cnJfdmFsOworCisJCS8qIG1vcmUgaW5mb3JtYXRpb24gbWF5IGJlIHNlbnQgYmFjayB1c2luZyBJV0VDVVNUT00gKi8KKworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwlkYXRhLT5sZW5ndGggPSAoY3Vycl9wb3MgLSBleHRyYSk7CisJZGF0YS0+ZmxhZ3MgPSAwOworCisJa2ZyZWUoaXdlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXRVNTSUQgLSAlcyIsIG5ldGRldi0+bmFtZSwgZXh0cmEpOworCisJaWYgKGRhdGEtPmZsYWdzKSB7CisJCW1lbWNweShwcml2LT5lc3NpZCwgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CisJCXByaXYtPmVzc2lkX3NpemUgPSBkYXRhLT5sZW5ndGg7CisJfSBlbHNlCisJCXByaXYtPmVzc2lkX3NpemUgPSAwOwkvKiBVc2UgYW55IFNTSUQgKi8KKworCXJldHVybiAtRUlXQ09NTUlUOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHByaXYtPmVzc2lkX3NpemUpIHsKKwkJLyogbm90IHRoZSBBTlkgc3NpZCBpbiBwcml2LT5lc3NpZCAqLworCQlkYXRhLT5mbGFncyA9IDE7CisJCWRhdGEtPmxlbmd0aCA9IHByaXYtPmVzc2lkX3NpemU7CisJCW1lbWNweShleHRyYSwgcHJpdi0+ZXNzaWQsIGRhdGEtPmxlbmd0aCk7CisJfSBlbHNlIHsKKwkJLyogdGhlIEFOWSBzc2lkIHdhcyBzcGVjaWZpZWQgKi8KKwkJaWYgKHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfQ09OTkVDVEVEICYmIHByaXYtPmN1cnJfYnNzKSB7CisJCQkvKiByZXBvcnQgdGhlIFNTSUQgd2UgaGF2ZSBmb3VuZCAqLworCQkJZGF0YS0+ZmxhZ3MgPSAxOworCQkJZGF0YS0+bGVuZ3RoID0gcHJpdi0+Y3Vycl9ic3MtPnNzaWRfbGVuOworCQkJbWVtY3B5KGV4dHJhLCBwcml2LT5jdXJyX2Jzcy0+c3NpZCwgZGF0YS0+bGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJlcG9ydCBBTlkgYmFjayAqLworCQkJZGF0YS0+ZmxhZ3MgPSAwOworCQkJZGF0YS0+bGVuZ3RoID0gMDsKKwkJfQorCX0KKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXRVNTSUQgLSAlLipzIiwgbmV0ZGV2LT5uYW1lLAorCQkgZGF0YS0+bGVuZ3RoLCBleHRyYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BhcmFtICpiaXRyYXRlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXUkFURSAtICVkIiwgbmV0ZGV2LT5uYW1lLAorCQkgYml0cmF0ZS0+dmFsdWUpOworCisJc3dpdGNoIChiaXRyYXRlLT52YWx1ZSkgeworCWNhc2UgLTE6CisJCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfQVVUTzsKKwkJYnJlYWs7CQkvKiBhdXRvIHJhdGUgKi8KKwljYXNlIDEwMDAwMDA6CisJCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfMU1CSVQ7CisJCWJyZWFrOworCWNhc2UgMjAwMDAwMDoKKwkJcHJpdi0+dHhyYXRlID0gVFhfUkFURV8yTUJJVDsKKwkJYnJlYWs7CisJY2FzZSA1NTAwMDAwOgorCQlwcml2LT50eHJhdGUgPSBUWF9SQVRFXzVfNU1CSVQ7CisJCWJyZWFrOworCWNhc2UgMTEwMDAwMDA6CisJCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfMTFNQklUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wYXJhbSAqYml0cmF0ZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHByaXYtPnR4cmF0ZSkgeworCQkvKiByZXR1cm4gbWF4IHJhdGUgaWYgUkFURV9BVVRPICovCisJY2FzZSBUWF9SQVRFX0FVVE86CisJCWJpdHJhdGUtPnZhbHVlID0gMTEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVFhfUkFURV8xTUJJVDoKKwkJYml0cmF0ZS0+dmFsdWUgPSAxMDAwMDAwOworCQlicmVhazsKKwljYXNlIFRYX1JBVEVfMk1CSVQ6CisJCWJpdHJhdGUtPnZhbHVlID0gMjAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBUWF9SQVRFXzVfNU1CSVQ6CisJCWJpdHJhdGUtPnZhbHVlID0gNTUwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBUWF9SQVRFXzExTUJJVDoKKwkJYml0cmF0ZS0+dmFsdWUgPSAxMTAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwliaXRyYXRlLT5maXhlZCA9IChwcml2LT50eHJhdGUgIT0gVFhfUkFURV9BVVRPKTsKKwliaXRyYXRlLT5kaXNhYmxlZCA9IDA7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1JBVEUgLSAlZCIsIG5ldGRldi0+bmFtZSwKKwkJIGJpdHJhdGUtPnZhbHVlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKwlpbnQgcnRociA9IHJ0cy0+dmFsdWU7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV1JUUyAtIHZhbHVlICVkIGRpc2FibGVkICVzIiwKKwkJIG5ldGRldi0+bmFtZSwgcnRzLT52YWx1ZSwgKHJ0cy0+ZGlzYWJsZWQpID8gInRydWUiIDogImZhbHNlIik7CisKKwlpZiAocnRzLT5kaXNhYmxlZCkKKwkJcnRociA9IE1BWF9SVFNfVEhSRVNIT0xEOworCisJaWYgKChydGhyIDwgMCkgfHwgKHJ0aHIgPiBNQVhfUlRTX1RIUkVTSE9MRCkpCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZQorCQlwcml2LT5ydHNfdGhyZXNob2xkID0gcnRocjsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXJ0cy0+dmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkOworCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA+PSBNQVhfUlRTX1RIUkVTSE9MRCk7CisJcnRzLT5maXhlZCA9IDE7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1JUUyAtIHZhbHVlICVkIGRpc2FibGVkICVzIiwKKwkJIG5ldGRldi0+bmFtZSwgcnRzLT52YWx1ZSwgKHJ0cy0+ZGlzYWJsZWQpID8gInRydWUiIDogImZhbHNlIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKwlpbnQgZnRociA9IGZyYWctPnZhbHVlOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdGUkFHIC0gdmFsdWUgJWQsIGRpc2FibGVkICVzIiwKKwkJIG5ldGRldi0+bmFtZSwgZnJhZy0+dmFsdWUsCisJCSAoZnJhZy0+ZGlzYWJsZWQpID8gInRydWUiIDogImZhbHNlIik7CisKKwlpZiAoZnJhZy0+ZGlzYWJsZWQpCisJCWZ0aHIgPSBNQVhfRlJBR19USFJFU0hPTEQ7CisKKwlpZiAoKGZ0aHIgPCBNSU5fRlJBR19USFJFU0hPTEQpIHx8IChmdGhyID4gTUFYX0ZSQUdfVEhSRVNIT0xEKSkKKwkJcmV0ID0gLUVJTlZBTDsKKwllbHNlCisJCXByaXYtPmZyYWdfdGhyZXNob2xkID0gZnRociAmIH4weDE7CS8qIGdldCBhbiBldmVuIHZhbHVlICovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJZnJhZy0+dmFsdWUgPSBwcml2LT5mcmFnX3RocmVzaG9sZDsKKwlmcmFnLT5kaXNhYmxlZCA9IChmcmFnLT52YWx1ZSA+PSBNQVhfRlJBR19USFJFU0hPTEQpOworCWZyYWctPmZpeGVkID0gMTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXRlJBRyAtIHZhbHVlICVkLCBkaXNhYmxlZCAlcyIsCisJCSBuZXRkZXYtPm5hbWUsIGZyYWctPnZhbHVlLAorCQkgKGZyYWctPmRpc2FibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF90eHBvdyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcG93ZXIsIGNoYXIgKmV4dHJhKQoreworCXBvd2VyLT52YWx1ZSA9IDE1OworCXBvd2VyLT5maXhlZCA9IDE7CS8qIE5vIHBvd2VyIGNvbnRyb2wgKi8KKwlwb3dlci0+ZGlzYWJsZWQgPSAwOworCXBvd2VyLT5mbGFncyA9IElXX1RYUE9XX0RCTTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXVFhQT1cgLSB0eHBvdyAlZCBkQm0iLCBuZXRkZXYtPm5hbWUsCisJCSBwb3dlci0+dmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGphbDogc2hvcnQgcmV0cnkgaXMgaGFuZGxlZCBieSB0aGUgZmlybXdhcmUgKGF0IGxlYXN0IDAuOTAueCksCisgICB3aGlsZSBsb25nIHJldHJ5IGlzIG5vdCAoPykgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcmV0cnksIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdSRVRSWSBkaXNhYmxlZCAlZCBmbGFncyAweCV4IHZhbCAlZCIsCisJCSBuZXRkZXYtPm5hbWUsIHJldHJ5LT5kaXNhYmxlZCwgcmV0cnktPmZsYWdzLCByZXRyeS0+dmFsdWUpOworCisJaWYgKCFyZXRyeS0+ZGlzYWJsZWQgJiYgKHJldHJ5LT5mbGFncyAmIElXX1JFVFJZX0xJTUlUKSkgeworCQlpZiAoKHJldHJ5LT5mbGFncyAmIElXX1JFVFJZX01JTikgfHwKKwkJICAgICEocmV0cnktPmZsYWdzICYgSVdfUkVUUllfTUFYKSkKKwkJCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gcmV0cnktPnZhbHVlOworCQllbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJcmV0dXJuIHJldDsKK30KKworLyogQWRhcHRlZCAocmlwcGVkKSBmcm9tIGF0bWVsLmMgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcmV0cnksIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdSRVRSWSIsIG5ldGRldi0+bmFtZSk7CisKKwlyZXRyeS0+ZGlzYWJsZWQgPSAwOwkvKiBDYW4ndCBiZSBkaXNhYmxlZCAqLworCXJldHJ5LT5mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJldHJ5LT52YWx1ZSA9IHByaXYtPnNob3J0X3JldHJ5X2xpbWl0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9lbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBpbmRleCA9IChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwlpbnQgbGVuID0gZW5jb2RpbmctPmxlbmd0aDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXRU5DT0RFIC0gZW5jLmZsYWdzICUwOHggIgorCQkgInBvaW50ZXIgJXAgbGVuICVkIiwgbmV0ZGV2LT5uYW1lLCBlbmNvZGluZy0+ZmxhZ3MsCisJCSBlbmNvZGluZy0+cG9pbnRlciwgZW5jb2RpbmctPmxlbmd0aCk7CisJYXQ3Nl9kYmcoREJHX0lPQ1RMLAorCQkgIiVzOiBTSU9DU0lXRU5DT0RFIC0gb2xkIHdlcHN0YXRlOiBlbmFibGVkICVzIGtleV9pZCAlZCAiCisJCSAiYXV0aF9tb2RlICVzIiwgbmV0ZGV2LT5uYW1lLAorCQkgKHByaXYtPndlcF9lbmFibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIsIHByaXYtPndlcF9rZXlfaWQsCisJCSAocHJpdi0+YXV0aF9tb2RlID09CisJCSAgV0xBTl9BVVRIX1NIQVJFRF9LRVkpID8gInJlc3RyaWN0ZWQiIDogIm9wZW4iKTsKKworCS8qIHRha2UgdGhlIG9sZCBkZWZhdWx0IGtleSBpZiBpbmRleCBpcyBpbnZhbGlkICovCisJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBXRVBfS0VZUykpCisJCWluZGV4ID0gcHJpdi0+d2VwX2tleV9pZDsKKworCWlmIChsZW4gPiAwKSB7CisJCWlmIChsZW4gPiBXRVBfTEFSR0VfS0VZX0xFTikKKwkJCWxlbiA9IFdFUF9MQVJHRV9LRVlfTEVOOworCisJCW1lbXNldChwcml2LT53ZXBfa2V5c1tpbmRleF0sIDAsIFdFUF9LRVlfTEVOKTsKKwkJbWVtY3B5KHByaXYtPndlcF9rZXlzW2luZGV4XSwgZXh0cmEsIGxlbik7CisJCXByaXYtPndlcF9rZXlzX2xlbltpbmRleF0gPSAobGVuIDw9IFdFUF9TTUFMTF9LRVlfTEVOKSA/CisJCSAgICBXRVBfU01BTExfS0VZX0xFTiA6IFdFUF9MQVJHRV9LRVlfTEVOOworCQlwcml2LT53ZXBfZW5hYmxlZCA9IDE7CisJfQorCisJcHJpdi0+d2VwX2tleV9pZCA9IGluZGV4OworCXByaXYtPndlcF9lbmFibGVkID0gKChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpID09IDApOworCisJaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQorCQlwcml2LT5hdXRoX21vZGUgPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKKwlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCisJCXByaXYtPmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9PUEVOOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLAorCQkgIiVzOiBTSU9DU0lXRU5DT0RFIC0gbmV3IHdlcHN0YXRlOiBlbmFibGVkICVzIGtleV9pZCAlZCAiCisJCSAia2V5X2xlbiAlZCBhdXRoX21vZGUgJXMiLCBuZXRkZXYtPm5hbWUsCisJCSAocHJpdi0+d2VwX2VuYWJsZWQpID8gInRydWUiIDogImZhbHNlIiwgcHJpdi0+d2VwX2tleV9pZCArIDEsCisJCSBwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0sCisJCSAocHJpdi0+YXV0aF9tb2RlID09CisJCSAgV0xBTl9BVVRIX1NIQVJFRF9LRVkpID8gInJlc3RyaWN0ZWQiIDogIm9wZW4iKTsKKworCXJldHVybiAtRUlXQ09NTUlUOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaW5kZXggPSAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisKKwlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IFdFUF9LRVlTKSkKKwkJaW5kZXggPSBwcml2LT53ZXBfa2V5X2lkOworCisJZW5jb2RpbmctPmZsYWdzID0KKwkgICAgKHByaXYtPmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkgPworCSAgICBJV19FTkNPREVfUkVTVFJJQ1RFRCA6IElXX0VOQ09ERV9PUEVOOworCisJaWYgKCFwcml2LT53ZXBfZW5hYmxlZCkKKwkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKKworCWlmIChlbmNvZGluZy0+cG9pbnRlcikgeworCQllbmNvZGluZy0+bGVuZ3RoID0gcHJpdi0+d2VwX2tleXNfbGVuW2luZGV4XTsKKworCQltZW1jcHkoZXh0cmEsIHByaXYtPndlcF9rZXlzW2luZGV4XSwgcHJpdi0+d2VwX2tleXNfbGVuW2luZGV4XSk7CisKKwkJZW5jb2RpbmctPmZsYWdzIHw9IChpbmRleCArIDEpOworCX0KKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXRU5DT0RFIC0gZW5jLmZsYWdzICUwOHggIgorCQkgInBvaW50ZXIgJXAgbGVuICVkIiwgbmV0ZGV2LT5uYW1lLCBlbmNvZGluZy0+ZmxhZ3MsCisJCSBlbmNvZGluZy0+cG9pbnRlciwgZW5jb2RpbmctPmxlbmd0aCk7CisJYXQ3Nl9kYmcoREJHX0lPQ1RMLAorCQkgIiVzOiBTSU9DR0lXRU5DT0RFIC0gd2Vwc3RhdGU6IGVuYWJsZWQgJXMga2V5X2lkICVkICIKKwkJICJrZXlfbGVuICVkIGF1dGhfbW9kZSAlcyIsIG5ldGRldi0+bmFtZSwKKwkJIChwcml2LT53ZXBfZW5hYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCBwcml2LT53ZXBfa2V5X2lkICsgMSwKKwkJIHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSwKKwkJIChwcml2LT5hdXRoX21vZGUgPT0KKwkJICBXTEFOX0FVVEhfU0hBUkVEX0tFWSkgPyAicmVzdHJpY3RlZCIgOiAib3BlbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcHJxLCBjaGFyICpleHRyYSkKK3sKKwlpbnQgZXJyID0gLUVJV0NPTU1JVDsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwKKwkJICIlczogU0lPQ1NJV1BPV0VSIC0gZGlzYWJsZWQgJXMgZmxhZ3MgMHgleCB2YWx1ZSAweCV4IiwKKwkJIG5ldGRldi0+bmFtZSwgKHBycS0+ZGlzYWJsZWQpID8gInRydWUiIDogImZhbHNlIiwgcHJxLT5mbGFncywKKwkJIHBycS0+dmFsdWUpOworCisJaWYgKHBycS0+ZGlzYWJsZWQpCisJCXByaXYtPnBtX21vZGUgPSBBVDc2X1BNX09GRjsKKwllbHNlIHsKKwkJc3dpdGNoIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgeworCQljYXNlIElXX1BPV0VSX0FMTF9SOgorCQljYXNlIElXX1BPV0VSX09OOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisJCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfUEVSSU9EKQorCQkJcHJpdi0+cG1fcGVyaW9kID0gcHJxLT52YWx1ZTsKKworCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcHJpdi0+cG1fbW9kZSA9IEFUNzZfUE1fT047CisJfQorZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnBvd2VyLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXBvd2VyLT5kaXNhYmxlZCA9IChwcml2LT5wbV9tb2RlID09IEFUNzZfUE1fT0ZGKTsKKwlpZiAoIXBvd2VyLT5kaXNhYmxlZCkgeworCQlwb3dlci0+ZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0QgfCBJV19QT1dFUl9BTExfUjsKKwkJcG93ZXItPnZhbHVlID0gcHJpdi0+cG1fcGVyaW9kOworCX0KKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXUE9XRVIgLSAlcyBmbGFncyAweCV4IHZhbHVlIDB4JXgiLAorCQkgbmV0ZGV2LT5uYW1lLCBwb3dlci0+ZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiLAorCQkgcG93ZXItPmZsYWdzLCBwb3dlci0+dmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcml2YXRlIElPQ1RMUworICovCitzdGF0aWMgaW50IGF0NzZfaXdfc2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqbmFtZSwKKwkJCQkgICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgdmFsID0gKigoaW50ICopbmFtZSk7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogQVQ3Nl9TRVRfU0hPUlRfUFJFQU1CTEUsICVkIiwKKwkJIG5ldGRldi0+bmFtZSwgdmFsKTsKKworCWlmICh2YWwgPCBQUkVBTUJMRV9UWVBFX0xPTkcgfHwgdmFsID4gUFJFQU1CTEVfVFlQRV9BVVRPKQorCQlyZXQgPSAtRUlOVkFMOworCWVsc2UKKwkJcHJpdi0+cHJlYW1ibGVfdHlwZSA9IHZhbDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19nZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc25wcmludGYod3JxdS0+bmFtZSwgc2l6ZW9mKHdycXUtPm5hbWUpLCAiJXMgKCVkKSIsCisJCSBwcmVhbWJsZXNbcHJpdi0+cHJlYW1ibGVfdHlwZV0sIHByaXYtPnByZWFtYmxlX3R5cGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfc2V0X2RlYnVnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJY2hhciAqcHRyOworCXUzMiB2YWw7CisKKwlpZiAoZGF0YS0+bGVuZ3RoID4gMCkgeworCQl2YWwgPSBzaW1wbGVfc3RydG9sKGV4dHJhLCAmcHRyLCAwKTsKKworCQlpZiAocHRyID09IGV4dHJhKQorCQkJdmFsID0gREJHX0RFRkFVTFRTOworCisJCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBBVDc2X1NFVF9ERUJVRyBpbnB1dCAlZDogJXMgLT4gMHgleCIsCisJCQkgbmV0ZGV2LT5uYW1lLCBkYXRhLT5sZW5ndGgsIGV4dHJhLCB2YWwpOworCX0gZWxzZQorCQl2YWwgPSBEQkdfREVGQVVMVFM7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogQVQ3Nl9TRVRfREVCVUcsIG9sZCAweCV4LCBuZXcgMHgleCIsCisJCSBuZXRkZXYtPm5hbWUsIGF0NzZfZGVidWcsIHZhbCk7CisKKwkvKiBqYWw6IHNvbWUgbW9yZSBvdXRwdXQgdG8gcGluIGRvd24gbG9ja3VwcyAqLworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBuZXRpZiBydW5uaW5nICVkIHF1ZXVlX3N0b3BwZWQgJWQgIgorCQkgImNhcnJpZXJfb2sgJWQiLCBuZXRkZXYtPm5hbWUsIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSwKKwkJIG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSwgbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKTsKKworCWF0NzZfZGVidWcgPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2dldF9kZWJ1ZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzbnByaW50Zih3cnF1LT5uYW1lLCBzaXplb2Yod3JxdS0+bmFtZSksICIweCUwOHgiLCBhdDc2X2RlYnVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X3NldF9wb3dlcnNhdmVfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsCisJCQkJICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHZhbCA9ICooKGludCAqKW5hbWUpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IEFUNzZfU0VUX1BPV0VSU0FWRV9NT0RFLCAlZCAoJXMpIiwKKwkJIG5ldGRldi0+bmFtZSwgdmFsLAorCQkgdmFsID09IEFUNzZfUE1fT0ZGID8gImFjdGl2ZSIgOiB2YWwgPT0gQVQ3Nl9QTV9PTiA/ICJzYXZlIiA6CisJCSB2YWwgPT0gQVQ3Nl9QTV9TTUFSVCA/ICJzbWFydCBzYXZlIiA6ICI8aW52YWxpZD4iKTsKKwlpZiAodmFsIDwgQVQ3Nl9QTV9PRkYgfHwgdmFsID4gQVQ3Nl9QTV9TTUFSVCkKKwkJcmV0ID0gLUVJTlZBTDsKKwllbHNlCisJCXByaXYtPnBtX21vZGUgPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfZ2V0X3Bvd2Vyc2F2ZV9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgKnBhcmFtID0gKGludCAqKWV4dHJhOworCisJcGFyYW1bMF0gPSBwcml2LT5wbV9tb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfc2V0X3NjYW5fdGltZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgbWludCA9ICooKGludCAqKW5hbWUpOworCWludCBtYXh0ID0gKigoaW50ICopbmFtZSArIDEpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IEFUNzZfU0VUX1NDQU5fVElNRVMgLSBtaW4gJWQgbWF4ICVkIiwKKwkJIG5ldGRldi0+bmFtZSwgbWludCwgbWF4dCk7CisJaWYgKG1pbnQgPD0gMCB8fCBtYXh0IDw9IDAgfHwgbWludCA+IG1heHQpCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZSB7CisJCXByaXYtPnNjYW5fbWluX3RpbWUgPSBtaW50OworCQlwcml2LT5zY2FuX21heF90aW1lID0gbWF4dDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfZ2V0X3NjYW5fdGltZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgKnBhcmFtID0gKGludCAqKWV4dHJhOworCisJcGFyYW1bMF0gPSBwcml2LT5zY2FuX21pbl90aW1lOworCXBhcmFtWzFdID0gcHJpdi0+c2Nhbl9tYXhfdGltZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X3NldF9zY2FuX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqbmFtZSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHZhbCA9ICooKGludCAqKW5hbWUpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IEFUNzZfU0VUX1NDQU5fTU9ERSAtIG1vZGUgJXMiLAorCQkgbmV0ZGV2LT5uYW1lLCAodmFsID0gU0NBTl9UWVBFX0FDVElWRSkgPyAiYWN0aXZlIiA6CisJCSAodmFsID0gU0NBTl9UWVBFX1BBU1NJVkUpID8gInBhc3NpdmUiIDogIjxpbnZhbGlkPiIpOworCisJaWYgKHZhbCAhPSBTQ0FOX1RZUEVfQUNUSVZFICYmIHZhbCAhPSBTQ0FOX1RZUEVfUEFTU0lWRSkKKwkJcmV0ID0gLUVJTlZBTDsKKwllbHNlCisJCXByaXYtPnNjYW5fbW9kZSA9IHZhbDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19nZXRfc2Nhbl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCAqcGFyYW0gPSAoaW50ICopZXh0cmE7CisKKwlwYXJhbVswXSA9IHByaXYtPnNjYW5fbW9kZTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBBVDc2X1NFVF9IQU5ETEVSKGgsIGYpIFtoIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGYKKworLyogU3RhbmRhcmQgd2lyZWxlc3MgaGFuZGxlcnMgKi8KK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIGF0NzZfaGFuZGxlcnNbXSA9IHsKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdDT01NSVQsIGF0NzZfaXdfaGFuZGxlcl9jb21taXQpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV05BTUUsIGF0NzZfaXdfaGFuZGxlcl9nZXRfbmFtZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXRlJFUSwgYXQ3Nl9pd19oYW5kbGVyX3NldF9mcmVxKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdGUkVRLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2ZyZXEpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV01PREUsIGF0NzZfaXdfaGFuZGxlcl9zZXRfbW9kZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXTU9ERSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9tb2RlKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdSQU5HRSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9yYW5nZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXU1BZLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3NweSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXU1BZLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3NweSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXVEhSU1BZLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3RocnNweSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXVEhSU1BZLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3RocnNweSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXQVAsIGF0NzZfaXdfaGFuZGxlcl9zZXRfd2FwKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdBUCwgYXQ3Nl9pd19oYW5kbGVyX2dldF93YXApLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV1NDQU4sIGF0NzZfaXdfaGFuZGxlcl9zZXRfc2NhbiksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXU0NBTiwgYXQ3Nl9pd19oYW5kbGVyX2dldF9zY2FuKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdFU1NJRCwgYXQ3Nl9pd19oYW5kbGVyX3NldF9lc3NpZCksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXRVNTSUQsIGF0NzZfaXdfaGFuZGxlcl9nZXRfZXNzaWQpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV1JBVEUsIGF0NzZfaXdfaGFuZGxlcl9zZXRfcmF0ZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXUkFURSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9yYXRlKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdSVFMsIGF0NzZfaXdfaGFuZGxlcl9zZXRfcnRzKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdSVFMsIGF0NzZfaXdfaGFuZGxlcl9nZXRfcnRzKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdGUkFHLCBhdDc2X2l3X2hhbmRsZXJfc2V0X2ZyYWcpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV0ZSQUcsIGF0NzZfaXdfaGFuZGxlcl9nZXRfZnJhZyksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXVFhQT1csIGF0NzZfaXdfaGFuZGxlcl9nZXRfdHhwb3cpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV1JFVFJZLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3JldHJ5KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdSRVRSWSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9yZXRyeSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXRU5DT0RFLCBhdDc2X2l3X2hhbmRsZXJfc2V0X2VuY29kZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXRU5DT0RFLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2VuY29kZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXUE9XRVIsIGF0NzZfaXdfaGFuZGxlcl9zZXRfcG93ZXIpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1BPV0VSLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3Bvd2VyKQorfTsKKworI2RlZmluZSBBVDc2X1NFVF9QUklWKGgsIGYpIFtoIC0gU0lPQ0lXRklSU1RQUklWXSA9IChpd19oYW5kbGVyKSBmCisKKy8qIFByaXZhdGUgd2lyZWxlc3MgaGFuZGxlcnMgKi8KK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIGF0NzZfcHJpdl9oYW5kbGVyc1tdID0geworCUFUNzZfU0VUX1BSSVYoQVQ3Nl9TRVRfU0hPUlRfUFJFQU1CTEUsIGF0NzZfaXdfc2V0X3Nob3J0X3ByZWFtYmxlKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfR0VUX1NIT1JUX1BSRUFNQkxFLCBhdDc2X2l3X2dldF9zaG9ydF9wcmVhbWJsZSksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X1NFVF9ERUJVRywgYXQ3Nl9pd19zZXRfZGVidWcpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9HRVRfREVCVUcsIGF0NzZfaXdfZ2V0X2RlYnVnKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfU0VUX1BPV0VSU0FWRV9NT0RFLCBhdDc2X2l3X3NldF9wb3dlcnNhdmVfbW9kZSksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X0dFVF9QT1dFUlNBVkVfTU9ERSwgYXQ3Nl9pd19nZXRfcG93ZXJzYXZlX21vZGUpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9TRVRfU0NBTl9USU1FUywgYXQ3Nl9pd19zZXRfc2Nhbl90aW1lcyksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X0dFVF9TQ0FOX1RJTUVTLCBhdDc2X2l3X2dldF9zY2FuX3RpbWVzKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfU0VUX1NDQU5fTU9ERSwgYXQ3Nl9pd19zZXRfc2Nhbl9tb2RlKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfR0VUX1NDQU5fTU9ERSwgYXQ3Nl9pd19nZXRfc2Nhbl9tb2RlKSwKK307CisKKy8qIE5hbWVzIGFuZCBhcmd1bWVudHMgb2YgcHJpdmF0ZSB3aXJlbGVzcyBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3MgYXQ3Nl9wcml2X2FyZ3NbXSA9IHsKKwkvKiAwIC0gbG9uZywgMSAtIHNob3J0ICovCisJe0FUNzZfU0VUX1NIT1JUX1BSRUFNQkxFLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9wcmVhbWJsZSJ9LAorCisJe0FUNzZfR0VUX1NIT1JUX1BSRUFNQkxFLAorCSAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEwLCAiZ2V0X3ByZWFtYmxlIn0sCisKKwkvKiB3ZSBtdXN0IHBhc3MgdGhlIG5ldyBkZWJ1ZyBtYXNrIGFzIGEgc3RyaW5nLCBiZWNhdXNlIGl3cHJpdiBjYW5ub3QKKwkgKiBwYXJzZSBoZXggbnVtYmVycyBzdGFydGluZyB3aXRoIDB4IDotKCAgKi8KKwl7QVQ3Nl9TRVRfREVCVUcsCisJIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAsIDAsICJzZXRfZGVidWcifSwKKworCXtBVDc2X0dFVF9ERUJVRywKKwkgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxMCwgImdldF9kZWJ1ZyJ9LAorCisJLyogMSAtIGFjdGl2ZSwgMiAtIHBvd2VyIHNhdmUsIDMgLSBzbWFydCBwb3dlciBzYXZlICovCisJe0FUNzZfU0VUX1BPV0VSU0FWRV9NT0RFLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9wb3dlcnNhdmUifSwKKworCXtBVDc2X0dFVF9QT1dFUlNBVkVfTU9ERSwKKwkgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRfcG93ZXJzYXZlIn0sCisKKwkvKiBtaW5fY2hhbm5lbF90aW1lLCBtYXhfY2hhbm5lbF90aW1lICovCisJe0FUNzZfU0VUX1NDQU5fVElNRVMsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAyLCAwLCAic2V0X3NjYW5fdGltZXMifSwKKworCXtBVDc2X0dFVF9TQ0FOX1RJTUVTLAorCSAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMiwgImdldF9zY2FuX3RpbWVzIn0sCisKKwkvKiAwIC0gYWN0aXZlLCAxIC0gcGFzc2l2ZSBzY2FuICovCisJe0FUNzZfU0VUX1NDQU5fTU9ERSwKKwkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfc2Nhbl9tb2RlIn0sCisKKwl7QVQ3Nl9HRVRfU0NBTl9NT0RFLAorCSAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldF9zY2FuX21vZGUifSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgYXQ3Nl9oYW5kbGVyX2RlZiA9IHsKKwkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShhdDc2X2hhbmRsZXJzKSwKKwkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKGF0NzZfcHJpdl9oYW5kbGVycyksCisJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKGF0NzZfcHJpdl9hcmdzKSwKKwkuc3RhbmRhcmQgPSBhdDc2X2hhbmRsZXJzLAorCS5wcml2YXRlID0gYXQ3Nl9wcml2X2hhbmRsZXJzLAorCS5wcml2YXRlX2FyZ3MgPSBhdDc2X3ByaXZfYXJncywKKwkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gYXQ3Nl9nZXRfd2lyZWxlc3Nfc3RhdHMsCit9OworCitzdGF0aWMgY29uc3QgdTggc25hcHNpZ1tdID0geyAweGFhLCAweGFhLCAweDAzIH07CisKKy8qIFJGQyAxMDQyIGVuY2Fwc3VsYXRlcyBFdGhlcm5ldCBmcmFtZXMgaW4gODAyLjIgU05BUCAoMHhhYSwgMHhhYSwgMHgwMykgd2l0aAorICogYSBTTkFQIE9JRCBvZiAwICgweDAwLCAweDAwLCAweDAwKSAqLworc3RhdGljIGNvbnN0IHU4IHJmYzEwNDJzaWdbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgaW50IGF0NzZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJaW50IHJldCA9IDA7CisJaW50IHdsZW47CisJaW50IHN1Ym1pdF9sZW47CisJc3RydWN0IGF0NzZfdHhfYnVmZmVyICp0eF9idWZmZXIgPSBwcml2LT5idWxrX291dF9idWZmZXI7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmk4MDJfMTFfaGRyID0KKwkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopdHhfYnVmZmVyLT5wYWNrZXQ7CisJdTggKnBheWxvYWQgPSBpODAyXzExX2hkci0+cGF5bG9hZDsKKwlzdHJ1Y3QgZXRoaGRyICplaCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOworCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBjYWxsZWQgd2hpbGUgbmV0ZGV2IGlzIHN0b3BwZWRcbiIsCisJCSAgICAgICBuZXRkZXYtPm5hbWUsIF9fZnVuY19fKTsKKwkJLyogc2tpcCB0aGlzIHBhY2tldCAqLworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKworCWlmIChwcml2LT50eF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgY2FsbGVkIHdoaWxlIHR4IHVyYiBpcyBwZW5kaW5nXG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXyk7CisJCS8qIHNraXAgdGhpcyBwYWNrZXQgKi8KKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogc2tiIHRvbyBzaG9ydCAoJWQpXG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXywgc2tiLT5sZW4pOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKworCWF0NzZfbGVkdHJpZ190eF9hY3Rpdml0eSgpOwkvKiB0ZWxsIGxlZHRyaWdnZXIgd2Ugc2VuZCBhIHBhY2tldCAqLworCisJLyogd2UgY2FuIGdldCByaWQgb2YgbWVtY3B5IGlmIHdlIHNldCBuZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiB0bworCSAgIHJlc2VydmUgZW5vdWdoIHNwYWNlLCBidXQgd2Ugd291bGQgbmVlZCB0byBrZWVwIHRoZSBza2IgYXJvdW5kICovCisKKwlpZiAobnRvaHMoZWgtPmhfcHJvdG8pIDw9IEVUSF9EQVRBX0xFTikgeworCQkvKiB0aGlzIGlzIGEgODAyLjMgcGFja2V0ICovCisJCWlmIChza2ItPmxlbiA+PSBFVEhfSExFTiArIHNpemVvZihyZmMxMDQyc2lnKQorCQkgICAgJiYgc2tiLT5kYXRhW0VUSF9ITEVOXSA9PSByZmMxMDQyc2lnWzBdCisJCSAgICAmJiBza2ItPmRhdGFbRVRIX0hMRU4gKyAxXSA9PSByZmMxMDQyc2lnWzFdKSB7CisJCQkvKiBoaWdoZXIgbGF5ZXIgZGVsaXZlcmVkIFNOQVAgaGVhZGVyIC0ga2VlcCBpdCAqLworCQkJbWVtY3B5KHBheWxvYWQsIHNrYi0+ZGF0YSArIEVUSF9ITEVOLAorCQkJICAgICAgIHNrYi0+bGVuIC0gRVRIX0hMRU4pOworCQkJd2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU4gKyBza2ItPmxlbiAtIEVUSF9ITEVOOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZHJvcHBpbmcgbm9uLVNOQVAgODAyLjIgcGFja2V0ICIKKwkJCSAgICAgICAiKERTQVAgMHglMDJ4IFNTQVAgMHglMDJ4IGNudHJsIDB4JTAyeClcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBza2ItPmRhdGFbRVRIX0hMRU5dLAorCQkJICAgICAgIHNrYi0+ZGF0YVtFVEhfSExFTiArIDFdLAorCQkJICAgICAgIHNrYi0+ZGF0YVtFVEhfSExFTiArIDJdKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJLyogYWRkIFJGQyAxMDQyIGhlYWRlciBpbiBmcm9udCAqLworCQltZW1jcHkocGF5bG9hZCwgcmZjMTA0MnNpZywgc2l6ZW9mKHJmYzEwNDJzaWcpKTsKKwkJbWVtY3B5KHBheWxvYWQgKyBzaXplb2YocmZjMTA0MnNpZyksICZlaC0+aF9wcm90bywKKwkJICAgICAgIHNrYi0+bGVuIC0gb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90bykpOworCQl3bGVuID0gSUVFRTgwMjExXzNBRERSX0xFTiArIHNpemVvZihyZmMxMDQyc2lnKSArIHNrYi0+bGVuIC0KKwkJICAgIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pOworCX0KKworCS8qIG1ha2Ugd2lyZWxlc3MgaGVhZGVyICovCisJaTgwMl8xMV9oZHItPmZyYW1lX2N0bCA9CisJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwkJCShwcml2LT53ZXBfZW5hYmxlZCA/IElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCA6IDApIHwKKwkJCShwcml2LT5pd19tb2RlID09CisJCQkgSVdfTU9ERV9JTkZSQSA/IElFRUU4MDIxMV9GQ1RMX1RPRFMgOiAwKSk7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCW1lbWNweShpODAyXzExX2hkci0+YWRkcjEsIGVoLT5oX2Rlc3QsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGk4MDJfMTFfaGRyLT5hZGRyMiwgZWgtPmhfc291cmNlLCBFVEhfQUxFTik7CisJCW1lbWNweShpODAyXzExX2hkci0+YWRkcjMsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJfSBlbHNlIGlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfSU5GUkEpIHsKKwkJbWVtY3B5KGk4MDJfMTFfaGRyLT5hZGRyMSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGk4MDJfMTFfaGRyLT5hZGRyMiwgZWgtPmhfc291cmNlLCBFVEhfQUxFTik7CisJCW1lbWNweShpODAyXzExX2hkci0+YWRkcjMsIGVoLT5oX2Rlc3QsIEVUSF9BTEVOKTsKKwl9CisKKwlpODAyXzExX2hkci0+ZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNigwKTsKKwlpODAyXzExX2hkci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KDApOworCisJLyogc2V0dXAgJ0F0bWVsJyBoZWFkZXIgKi8KKwl0eF9idWZmZXItPndsZW5ndGggPSBjcHVfdG9fbGUxNih3bGVuKTsKKwl0eF9idWZmZXItPnR4X3JhdGUgPSBwcml2LT50eHJhdGU7CisJLyogZm9yIGJyb2FkY2FzdCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHRoZSBmaXJtd2FyZSAwLjEwMC54CisJICAgc2VlbXMgdG8gY2hvb3NlIHRoZSBoaWdoZXN0IHJhdGUgc2V0IHdpdGggQ01EX1NUQVJUVVAgaW4KKwkgICBiYXNpY19yYXRlX3NldCByZXBsYWNpbmcgdGhpcyB2YWx1ZSAqLworCisJbWVtc2V0KHR4X2J1ZmZlci0+cmVzZXJ2ZWQsIDAsIHNpemVvZih0eF9idWZmZXItPnJlc2VydmVkKSk7CisKKwl0eF9idWZmZXItPnBhZGRpbmcgPSBhdDc2X2NhbGNfcGFkZGluZyh3bGVuKTsKKwlzdWJtaXRfbGVuID0gd2xlbiArIEFUNzZfVFhfSERSTEVOICsgdHhfYnVmZmVyLT5wYWRkaW5nOworCisJYXQ3Nl9kYmcoREJHX1RYX0RBVEFfQ09OVEVOVCwgIiVzIHNrYi0+ZGF0YSAlcyIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIGhleDJzdHIoc2tiLT5kYXRhLCAzMikpOworCWF0NzZfZGJnKERCR19UWF9EQVRBLCAiJXMgdHg6IHdsZW4gMHgleCBwYWQgMHgleCByYXRlICVkIGhkciAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBsZTE2X3RvX2NwdSh0eF9idWZmZXItPndsZW5ndGgpLAorCQkgdHhfYnVmZmVyLT5wYWRkaW5nLCB0eF9idWZmZXItPnR4X3JhdGUsCisJCSBoZXgyc3RyKGk4MDJfMTFfaGRyLCBzaXplb2YoKmk4MDJfMTFfaGRyKSkpOworCWF0NzZfZGJnKERCR19UWF9EQVRBX0NPTlRFTlQsICIlcyBwYXlsb2FkICVzIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgaGV4MnN0cihwYXlsb2FkLCA0OCkpOworCisJLyogc2VuZCBzdHVmZiAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnR4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+dHhfcGlwZSwgdHhfYnVmZmVyLAorCQkJICBzdWJtaXRfbGVuLCBhdDc2X3R4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT50eF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpIHsKKwkJc3RhdHMtPnR4X2Vycm9ycysrOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiB0eCBzdWJtaXQgdXJiOiAlZFxuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSwgcmV0KTsKKwkJaWYgKHJldCA9PSAtRUlOVkFMKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiAtRUlOVkFMOiB0eCB1cmIgJXAgaGNwcml2ICVwIGNvbXBsZXRlICVwXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcHJpdi0+dHhfdXJiLAorCQkJICAgICAgIHByaXYtPnR4X3VyYi0+aGNwcml2LCBwcml2LT50eF91cmItPmNvbXBsZXRlKTsKKwl9IGVsc2UgeworCQlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICghcHJpdikKKwkJcmV0dXJuOworCWRldl93YXJuKCZuZXRkZXYtPmRldiwgInR4IHRpbWVvdXQuIik7CisKKwl1c2JfdW5saW5rX3VyYihwcml2LT50eF91cmIpOworCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworfQorCitzdGF0aWMgaW50IGF0NzZfc3VibWl0X3J4X3VyYihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJaW50IHNpemU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnJ4X3NrYjsKKworCWlmICghcHJpdi0+cnhfdXJiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBwcml2LT5yeF91cmIgaXMgTlVMTFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXNrYikgeworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIpKTsKKwkJaWYgKCFza2IpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSByeCBza2J1ZmZcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcHJpdi0+cnhfc2tiID0gc2tiOworCX0gZWxzZSB7CisJCXNrYl9wdXNoKHNrYiwgc2tiX2hlYWRyb29tKHNrYikpOworCQlza2JfdHJpbShza2IsIDApOworCX0KKworCXNpemUgPSBza2JfdGFpbHJvb20oc2tiKTsKKwl1c2JfZmlsbF9idWxrX3VyYihwcml2LT5yeF91cmIsIHByaXYtPnVkZXYsIHByaXYtPnJ4X3BpcGUsCisJCQkgIHNrYl9wdXQoc2tiLCBzaXplKSwgc2l6ZSwgYXQ3Nl9yeF9jYWxsYmFjaywgcHJpdik7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+cnhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FTk9ERVYpCisJCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsCisJCQkJICJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZCAtRU5PREVWIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJ4LCB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwl9CisKK2V4aXQ6CisJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FTk9ERVYpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzdWJtaXQgcnggdXJiIC0gcGxlYXNlIHVubG9hZCB0aGUgIgorCQkgICAgICAgImRyaXZlciBhbmQvb3IgcG93ZXIgY3ljbGUgdGhlIGRldmljZVxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAwOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlcygpOiBlbnRyeSIsIF9fZnVuY19fKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm10eCkpCisJCXJldHVybiAtRUlOVFI7CisKKwkvKiBpZiBuZXRkZXYtPmRldl9hZGRyICE9IHByaXYtPm1hY19hZGRyIHdlIG11c3QKKwkgICBzZXQgdGhlIG1hYyBhZGRyZXNzIGluIHRoZSBkZXZpY2UgISAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkciwgcHJpdi0+bWFjX2FkZHIpKSB7CisJCWlmIChhdDc2X2FkZF9tYWNfYWRkcmVzcyhwcml2LCBuZXRkZXYtPmRldl9hZGRyKSA+PSAwKQorCQkJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAiJXM6IHNldCBuZXcgTUFDIGFkZHIgJXMiLAorCQkJCSBuZXRkZXYtPm5hbWUsIG1hYzJzdHIobmV0ZGV2LT5kZXZfYWRkcikpOworCX0KKworCXByaXYtPnNjYW5fc3RhdGUgPSBTQ0FOX0lETEU7CisJcHJpdi0+bGFzdF9zY2FuID0gamlmZmllczsKKworCXJldCA9IGF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcGVuOiBzdWJtaXRfcnhfdXJiIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19yZXN0YXJ0LCAwKTsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXMoKTogZW5kIiwgX19mdW5jX18pOworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKK30KKworc3RhdGljIGludCBhdDc2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm10eCkpCisJCXJldHVybiAtRUlOVFI7CisKKwlhdDc2X3F1aWVzY2UocHJpdik7CisKKwlpZiAoIXByaXYtPmRldmljZV91bnBsdWdnZWQpIHsKKwkJLyogV2UgYXJlIGNhbGxlZCBieSAiaWZjb25maWcgZXRoWCBkb3duIiwgbm90IGJlY2F1c2UgdGhlCisJCSAqIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuICovCisJCWF0NzZfc2V0X3JhZGlvKHByaXYsIDApOworCisJCS8qIFdlIHVubGluayByeF91cmIgYmVjYXVzZSBhdDc2X29wZW4oKSByZS1zdWJtaXRzIGl0LgorCQkgKiBJZiB1bnBsdWdnZWQsIGF0NzZfZGVsZXRlX2RldmljZSgpIHRha2VzIGNhcmUgb2YgaXQuICovCisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCX0KKworCS8qIGZyZWUgdGhlIGJzc19saXN0ICovCisJYXQ3Nl9mcmVlX2Jzc19saXN0KHByaXYpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIiVzOiBFWElUIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZXRodG9vbF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7CisKKwl1c2JfbWFrZV9wYXRoKHByaXYtPnVkZXYsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKworCXNucHJpbnRmKGluZm8tPmZ3X3ZlcnNpb24sIHNpemVvZihpbmZvLT5md192ZXJzaW9uKSwgIiVkLiVkLiVkLSVkIiwKKwkJIHByaXYtPmZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtPmZ3X3ZlcnNpb24ubWlub3IsCisJCSBwcml2LT5md192ZXJzaW9uLnBhdGNoLCBwcml2LT5md192ZXJzaW9uLmJ1aWxkKTsKK30KKworc3RhdGljIHUzMiBhdDc2X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gcHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXQ3Nl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBhdDc2X2V0aHRvb2xfZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gYXQ3Nl9ldGh0b29sX2dldF9saW5rLAorfTsKKworLyogRG93bmxvYWQgZXh0ZXJuYWwgZmlybXdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9sb2FkX2V4dGVybmFsX2Z3KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZndlbnRyeSAqZndlKQoreworCWludCByZXQ7CisJaW50IG9wX21vZGU7CisJaW50IGJsb2Nrbm8gPSAwOworCWludCBic2l6ZTsKKwl1OCAqYmxvY2s7CisJdTggKmJ1ZiA9IGZ3ZS0+ZXh0Znc7CisJaW50IHNpemUgPSBmd2UtPmV4dGZ3X3NpemU7CisKKwlpZiAoIWJ1ZiB8fCAhc2l6ZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlvcF9tb2RlID0gYXQ3Nl9nZXRfb3BfbW9kZSh1ZGV2KTsKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJvcG1vZGUgJWQiLCBvcF9tb2RlKTsKKworCWlmIChvcF9tb2RlICE9IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhPVVRfRkxBU0gpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgInVuZXhwZWN0ZWQgb3Btb2RlICVkXG4iLAorCQkJICAgb3BfbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJsb2NrID0ga21hbGxvYyhGV19CTE9DS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImRvd25sb2FkaW5nIGV4dGVybmFsIGZpcm13YXJlIik7CisKKwkvKiBmb3IgZncgPj0gMC4xMDAsIHRoZSBkZXZpY2UgbmVlZHMgYW4gZXh0cmEgZW1wdHkgYmxvY2sgKi8KKwlkbyB7CisJCWJzaXplID0gbWluX3QoaW50LCBzaXplLCBGV19CTE9DS19TSVpFKTsKKwkJbWVtY3B5KGJsb2NrLCBidWYsIGJzaXplKTsKKwkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULAorCQkJICJleHQgZncsIHNpemUgbGVmdCA9ICU1ZCwgYnNpemUgPSAlNGQsIGJsb2Nrbm8gPSAlMmQiLAorCQkJIHNpemUsIGJzaXplLCBibG9ja25vKTsKKwkJcmV0ID0gYXQ3Nl9sb2FkX2V4dF9md19ibG9jayh1ZGV2LCBibG9ja25vLCBibG9jaywgYnNpemUpOworCQlpZiAocmV0ICE9IGJzaXplKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCSAgICJsb2FkaW5nICVkdGggZmlybXdhcmUgYmxvY2sgZmFpbGVkOiAlZFxuIiwKKwkJCQkgICBibG9ja25vLCByZXQpOworCQkJZ290byBleGl0OworCQl9CisJCWJ1ZiArPSBic2l6ZTsKKwkJc2l6ZSAtPSBic2l6ZTsKKwkJYmxvY2tubysrOworCX0gd2hpbGUgKGJzaXplID4gMCk7CisKKwlpZiAoYXQ3Nl9pc181MDVhKGZ3ZS0+Ym9hcmRfdHlwZSkpIHsKKwkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiMjAwIG1zIGRlbGF5IGZvciA1MDVhIik7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDUgKyAxKTsKKwl9CisKK2V4aXQ6CisJa2ZyZWUoYmxvY2spOworCWlmIChyZXQgPCAwKQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGV4dGVybmFsIGZpcm13YXJlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyogRG93bmxvYWQgaW50ZXJuYWwgZmlybXdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9sb2FkX2ludGVybmFsX2Z3KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZndlbnRyeSAqZndlKQoreworCWludCByZXQ7CisJaW50IG5lZWRfcmVtYXAgPSAhYXQ3Nl9pc181MDVhKGZ3ZS0+Ym9hcmRfdHlwZSk7CisKKwlyZXQgPSBhdDc2X3VzYmRmdV9kb3dubG9hZCh1ZGV2LCBmd2UtPmludGZ3LCBmd2UtPmludGZ3X3NpemUsCisJCQkJICAgbmVlZF9yZW1hcCA/IDAgOiAyICogSFopOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBpbnRlcm5hbCBmdyBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInNlbmRpbmcgUkVNQVAiKTsKKworCS8qIG5vIFJFTUFQIGZvciA1MDVBIChzZWUgU0YgZHJpdmVyKSAqLworCWlmIChuZWVkX3JlbWFwKSB7CisJCXJldCA9IGF0NzZfcmVtYXAodWRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCSAgICJzZW5kaW5nIFJFTUFQIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAic2xlZXBpbmcgZm9yIDIgc2Vjb25kcyIpOworCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgyICogSFogKyAxKTsKKwl1c2JfcmVzZXRfZGV2aWNlKHVkZXYpOworCitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9tYXRjaF9lc3NpZChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKnB0cikKK3sKKwkvKiBjb21tb24gY3JpdGVyaWEgZm9yIGJvdGggbW9kaSAqLworCisJaW50IHJldCA9IChwcml2LT5lc3NpZF9zaXplID09IDAgLyogQU5ZIHNzaWQgKi8gIHx8CisJCSAgIChwcml2LT5lc3NpZF9zaXplID09IHB0ci0+c3NpZF9sZW4gJiYKKwkJICAgICFtZW1jbXAocHJpdi0+ZXNzaWQsIHB0ci0+c3NpZCwgcHRyLT5zc2lkX2xlbikpKTsKKwlpZiAoIXJldCkKKwkJYXQ3Nl9kYmcoREJHX0JTU19NQVRDSCwKKwkJCSAiJXMgYnNzIHRhYmxlIGVudHJ5ICVwOiBlc3NpZCBkaWRuJ3QgbWF0Y2giLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgcHRyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X21hdGNoX21vZGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpwdHIpCit7CisJaW50IHJldDsKKworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpCisJCXJldCA9IHB0ci0+Y2FwYSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTOworCWVsc2UKKwkJcmV0ID0gcHRyLT5jYXBhICYgV0xBTl9DQVBBQklMSVRZX0VTUzsKKwlpZiAoIXJldCkKKwkJYXQ3Nl9kYmcoREJHX0JTU19NQVRDSCwKKwkJCSAiJXMgYnNzIHRhYmxlIGVudHJ5ICVwOiBtb2RlIGRpZG4ndCBtYXRjaCIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwdHIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9tYXRjaF9yYXRlcyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKnB0cikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwdHItPnJhdGVzX2xlbjsgaSsrKSB7CisJCXU4IHJhdGUgPSBwdHItPnJhdGVzW2ldOworCisJCWlmICghKHJhdGUgJiAweDgwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHRoaXMgaXMgYSBiYXNpYyByYXRlIHdlIGhhdmUgdG8gc3VwcG9ydAorCQkgICAoc2VlIElFRUU4MDIuMTEsIGNoLiA3LjMuMi4yKSAqLworCQlpZiAocmF0ZSAhPSAoMHg4MCB8IGh3X3JhdGVzWzBdKQorCQkgICAgJiYgcmF0ZSAhPSAoMHg4MCB8IGh3X3JhdGVzWzFdKQorCQkgICAgJiYgcmF0ZSAhPSAoMHg4MCB8IGh3X3JhdGVzWzJdKQorCQkgICAgJiYgcmF0ZSAhPSAoMHg4MCB8IGh3X3JhdGVzWzNdKSkgeworCQkJYXQ3Nl9kYmcoREJHX0JTU19NQVRDSCwKKwkJCQkgIiVzOiBic3MgdGFibGUgZW50cnkgJXA6IGJhc2ljIHJhdGUgJTAyeCBub3QgIgorCQkJCSAic3VwcG9ydGVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwdHIsIHJhdGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBpZiB3ZSB1c2Ugc2hvcnQgcHJlYW1ibGUsIHRoZSBic3MgbXVzdCBzdXBwb3J0IGl0ICovCisJaWYgKHByaXYtPnByZWFtYmxlX3R5cGUgPT0gUFJFQU1CTEVfVFlQRV9TSE9SVCAmJgorCSAgICAhKHB0ci0+Y2FwYSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkpIHsKKwkJYXQ3Nl9kYmcoREJHX0JTU19NQVRDSCwKKwkJCSAiJXM6ICVwIGRvZXMgbm90IHN1cHBvcnQgc2hvcnQgcHJlYW1ibGUiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgcHRyKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X21hdGNoX3dlcChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKnB0cikKK3sKKwlpZiAoIXByaXYtPndlcF9lbmFibGVkICYmIHB0ci0+Y2FwYSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSB7CisJCS8qIHdlIGhhdmUgZGlzYWJsZWQgV0VQLCBidXQgdGhlIEJTUyBzaWduYWxzIHByaXZhY3kgKi8KKwkJYXQ3Nl9kYmcoREJHX0JTU19NQVRDSCwKKwkJCSAiJXM6IGJzcyB0YWJsZSBlbnRyeSAlcDogcmVxdWlyZXMgZW5jcnlwdGlvbiIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwdHIpOworCQlyZXR1cm4gMDsKKwl9CisJLyogb3RoZXJ3aXNlIGlmIHRoZSBCU1MgZG9lcyBub3Qgc2lnbmFsIHByaXZhY3kgaXQgbWF5IHdlbGwKKwkgICBhY2NlcHQgZW5jcnlwdGVkIHBhY2tldHMgZnJvbSB1cyAuLi4gKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9tYXRjaF9ic3NpZChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKnB0cikKK3sKKwlpZiAoIXByaXYtPndhbnRlZF9ic3NpZF92YWxpZCB8fAorCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHB0ci0+YnNzaWQsIHByaXYtPndhbnRlZF9ic3NpZCkpCisJCXJldHVybiAxOworCisJYXQ3Nl9kYmcoREJHX0JTU19NQVRDSCwKKwkJICIlczogcmVxdWVzdGVkIGJzc2lkIC0gJXMgZG9lcyBub3QgbWF0Y2giLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKHByaXYtPndhbnRlZF9ic3NpZCkpOworCWF0NzZfZGJnKERCR19CU1NfTUFUQ0gsCisJCSAiICAgICAgQVAgYnNzaWQgLSAlcyBvZiBic3MgdGFibGUgZW50cnkgJXAiLAorCQkgbWFjMnN0cihwdHItPmJzc2lkKSwgcHRyKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhdDc2X21hdGNoX2JzcyAtIHRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgYnNzIGluIHByaXYtPmJzcworICoKKyAqIGxhc3QgLSBsYXN0IGJzcyB0cmllZAorICoKKyAqIGxhc3QgPT0gTlVMTCBzaWduYWxzIGEgbmV3IHJvdW5kIHN0YXJ0aW5nIHdpdGggcHJpdi0+YnNzX2xpc3QubmV4dAorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgYW4gYWNxdWlyZWQgcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2sKKyAqIG90aGVyd2lzZSB0aGUgdGltZW91dCBvbiBic3MgbWF5IHJlbW92ZSB0aGUgbmV3bHkgY2hvc2VuIGVudHJ5CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYnNzX2luZm8gKmF0NzZfbWF0Y2hfYnNzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBic3NfaW5mbyAqbGFzdCkKK3sKKwlzdHJ1Y3QgYnNzX2luZm8gKnB0ciA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VycjsKKworCWN1cnIgPSBsYXN0ID8gbGFzdC0+bGlzdC5uZXh0IDogcHJpdi0+YnNzX2xpc3QubmV4dDsKKwl3aGlsZSAoY3VyciAhPSAmcHJpdi0+YnNzX2xpc3QpIHsKKwkJcHRyID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgYnNzX2luZm8sIGxpc3QpOworCQlpZiAoYXQ3Nl9tYXRjaF9lc3NpZChwcml2LCBwdHIpICYmIGF0NzZfbWF0Y2hfbW9kZShwcml2LCBwdHIpCisJCSAgICAmJiBhdDc2X21hdGNoX3dlcChwcml2LCBwdHIpICYmIGF0NzZfbWF0Y2hfcmF0ZXMocHJpdiwgcHRyKQorCQkgICAgJiYgYXQ3Nl9tYXRjaF9ic3NpZChwcml2LCBwdHIpKQorCQkJYnJlYWs7CisJCWN1cnIgPSBjdXJyLT5uZXh0OworCX0KKworCWlmIChjdXJyID09ICZwcml2LT5ic3NfbGlzdCkKKwkJcHRyID0gTlVMTDsKKwkvKiBvdGhlcndpc2UgcHRyIHBvaW50cyB0byB0aGUgc3RydWN0IGJzc19pbmZvIHdlIGhhdmUgY2hvc2VuICovCisKKwlhdDc2X2RiZyhEQkdfQlNTX1RBQkxFLCAiJXMgJXM6IHJldHVybmVkICVwIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgX19mdW5jX18sIHB0cik7CisJcmV0dXJuIHB0cjsKK30KKworLyogU3RhcnQgam9pbmluZyBhIG1hdGNoaW5nIEJTUywgb3IgY3JlYXRlIG93biBJQlNTICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfam9pbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX2pvaW4pOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlXQVJOX09OKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfSk9JTklORyk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfSk9JTklORykKKwkJZ290byBleGl0OworCisJLyogc2VjdXJlIHRoZSBhY2Nlc3MgdG8gcHJpdi0+Y3Vycl9ic3MgISAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCXByaXYtPmN1cnJfYnNzID0gYXQ3Nl9tYXRjaF9ic3MocHJpdiwgcHJpdi0+Y3Vycl9ic3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXByaXYtPmN1cnJfYnNzKSB7CisJCS8qIGhlcmUgd2UgaGF2ZW4ndCBmb3VuZCBhIG1hdGNoaW5nIChpKWJzcyAuLi4gKi8KKwkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19PV05fSUJTUyk7CisJCQlhdDc2X3N0YXJ0X2lic3MocHJpdik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJLyogaGF2ZW4ndCBmb3VuZCBhIG1hdGNoaW5nIEJTUyBpbiBpbmZyYSBtb2RlIC0gdHJ5IGFnYWluICovCisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfU0NBTk5JTkcpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX3N0YXJ0X3NjYW4pOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0ID0gYXQ3Nl9qb2luX2Jzcyhwcml2LCBwcml2LT5jdXJyX2Jzcyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogam9pbl9ic3MgZmFpbGVkIHdpdGggJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXQgPSBhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfSk9JTik7CisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCWlmIChyZXQgIT0gQ01EX1NUQVRVU19USU1FX09VVCkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGpvaW5fYnNzIGNvbXBsZXRlZCB3aXRoICVkXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGpvaW5fYnNzIHNzaWQgJXMgdGltZWQgb3V0XG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJCSAgICAgICBtYWMyc3RyKHByaXYtPmN1cnJfYnNzLT5ic3NpZCkpOworCisJCS8qIHJldHJ5IG5leHQgQlNTIGltbWVkaWF0ZWx5ICovCisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBoZXJlIHdlIGhhdmUgam9pbmVkIHRoZSAoSSlCU1MgKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCXN0cnVjdCBic3NfaW5mbyAqYnB0ciA9IHByaXYtPmN1cnJfYnNzOworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0NPTk5FQ1RFRCk7CisJCS8qIGdldCBFU1NJRCwgQlNTSUQgYW5kIGNoYW5uZWwgZm9yIHByaXYtPmN1cnJfYnNzICovCisJCXByaXYtPmVzc2lkX3NpemUgPSBicHRyLT5zc2lkX2xlbjsKKwkJbWVtY3B5KHByaXYtPmVzc2lkLCBicHRyLT5zc2lkLCBicHRyLT5zc2lkX2xlbik7CisJCW1lbWNweShwcml2LT5ic3NpZCwgYnB0ci0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJcHJpdi0+Y2hhbm5lbCA9IGJwdHItPmNoYW5uZWw7CisJCWF0NzZfaXdldmVudF9ic3NfY29ubmVjdChwcml2LT5uZXRkZXYsIGJwdHItPmJzc2lkKTsKKwkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZXRkZXYpOworCQluZXRpZl9zdGFydF9xdWV1ZShwcml2LT5uZXRkZXYpOworCQkvKiBqdXN0IHRvIGJlIHN1cmUgKi8KKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4pOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MpOworCX0gZWxzZSB7CisJCS8qIHNlbmQgYXV0aCByZXEgKi8KKwkJcHJpdi0+cmV0cmllcyA9IEFVVEhfUkVUUklFUzsKKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19BVVRIKTsKKwkJYXQ3Nl9hdXRoX3JlcShwcml2LCBwcml2LT5jdXJyX2JzcywgMSwgTlVMTCk7CisJCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLAorCQkJICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciArIEhaIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoLCBBVVRIX1RJTUVPVVQpOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIFJlYXAgc2NhbiByZXN1bHRzICovCitzdGF0aWMgdm9pZCBhdDc2X2R3b3JrX2dldF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgc3RhdHVzOworCWludCByZXQ7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19nZXRfc2Nhbi53b3JrKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisJV0FSTl9PTihwcml2LT5tYWNfc3RhdGUgIT0gTUFDX1NDQU5OSU5HKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19TQ0FOTklORykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBDTURfU0NBTik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGF0NzZfZ2V0X2NtZF9zdGF0dXMgZmFpbGVkIHdpdGggJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIF9fZnVuY19fLCBzdGF0dXMpOworCQlzdGF0dXMgPSBDTURfU1RBVFVTX0lOX1BST0dSRVNTOworCQkvKiBJTkZPOiBIb3BlIGl0IHdhcyBhIG9uZSBvZmYgZXJyb3IgLSBpZiBub3QsIHNjYW5uaW5nCisJCSAgIGZ1cnRoZXIgZG93biB0aGUgbGluZSBhbmQgc3RvcCB0aGlzIGN5Y2xlICovCisJfQorCWF0NzZfZGJnKERCR19QUk9HUkVTUywKKwkJICIlcyAlczogZ290IGNtZF9zdGF0dXMgJWQgKHN0YXRlICVzLCBuZWVkX2FueSAlZCkiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXywgc3RhdHVzLAorCQkgbWFjX3N0YXRlc1twcml2LT5tYWNfc3RhdGVdLCBwcml2LT5zY2FuX25lZWRfYW55KTsKKworCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlpZiAoKHN0YXR1cyAhPSBDTURfU1RBVFVTX0lOX1BST0dSRVNTKSAmJgorCQkgICAgKHN0YXR1cyAhPSBDTURfU1RBVFVTX0lETEUpKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IEJhZCBzY2FuIHN0YXR1czogJXNcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXywKKwkJCSAgICAgICBhdDc2X2dldF9jbWRfc3RhdHVzX3N0cmluZyhzdGF0dXMpKTsKKworCQkvKiB0aGUgZmlyc3QgY21kIHN0YXR1cyBhZnRlciBzY2FuIHN0YXJ0IGlzIGFsd2F5cyBhIElETEUgLT4KKwkJICAgc3RhcnQgdGhlIHRpbWVyIHRvIHBvbGwgYWdhaW4gdW50aWwgQ09NUExFVEVEICovCisJCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLAorCQkJICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciBmb3IgJWQgdGlja3MiLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2NhbiwKKwkJCQkgICAgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGF0NzZfZGVidWcgJiBEQkdfQlNTX1RBQkxFKQorCQlhdDc2X2R1bXBfYnNzX3RhYmxlKHByaXYpOworCisJaWYgKHByaXYtPnNjYW5fbmVlZF9hbnkpIHsKKwkJcmV0ID0gYXQ3Nl9zdGFydF9zY2FuKHByaXYsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogJXM6IHN0YXJ0X3NjYW4gKEFOWSkgZmFpbGVkIHdpdGggJWRcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXywgcmV0KTsKKwkJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsCisJCQkgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyIGZvciAlZCB0aWNrcyIsIF9fZnVuY19fLAorCQkJIF9fTElORV9fLCBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuLAorCQkJCSAgICAgIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJCXByaXYtPnNjYW5fbmVlZF9hbnkgPSAwOworCX0gZWxzZSB7CisJCXByaXYtPnNjYW5fc3RhdGUgPSBTQ0FOX0NPTVBMRVRFRDsKKwkJLyogcmVwb3J0IHRoZSBlbmQgb2Ygc2NhbiB0byB1c2VyIHNwYWNlICovCisJCWF0NzZfaXdldmVudF9zY2FuX2NvbXBsZXRlKHByaXYtPm5ldGRldik7CisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSk9JTklORyk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogSGFuZGxlIGxvc3Mgb2YgYmVhY29ucyBmcm9tIHRoZSBBUCAqLworc3RhdGljIHZvaWQgYXQ3Nl9kd29ya19iZWFjb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgZHdvcmtfYmVhY29uLndvcmspOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19DT05ORUNURUQgfHwgcHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBXZSBoYXZlbid0IHJlY2VpdmVkIGFueSBiZWFjb25zIGZyb20gb3V0IEFQIGZvciBCRUFDT05fVElNRU9VVCAqLworCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb3N0IGJlYWNvbiBic3NpZCAlc1xuIiwKKwkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKHByaXYtPmN1cnJfYnNzLT5ic3NpZCkpOworCisJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CisJYXQ3Nl9pd2V2ZW50X2Jzc19kaXNjb25uZWN0KHByaXYtPm5ldGRldik7CisJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19TQ0FOTklORyk7CisJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19zdGFydF9zY2FuKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIEhhbmRsZSBhdXRoZW50aWNhdGlvbiByZXNwb25zZSB0aW1lb3V0ICovCitzdGF0aWMgdm9pZCBhdDc2X2R3b3JrX2F1dGgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgZHdvcmtfYXV0aC53b3JrKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisJV0FSTl9PTihwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FVVEgpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FVVEgpCisJCWdvdG8gZXhpdDsKKworCWF0NzZfZGJnKERCR19QUk9HUkVTUywgIiVzOiBhdXRoZW50aWNhdGlvbiByZXNwb25zZSB0aW1lb3V0IiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSk7CisKKwlpZiAocHJpdi0+cmV0cmllcy0tID49IDApIHsKKwkJYXQ3Nl9hdXRoX3JlcShwcml2LCBwcml2LT5jdXJyX2JzcywgMSwgTlVMTCk7CisJCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLCAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgKyBIWiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoLCBBVVRIX1RJTUVPVVQpOworCX0gZWxzZSB7CisJCS8qIHRyeSB0byBnZXQgbmV4dCBtYXRjaGluZyBCU1MgKi8KKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19KT0lOSU5HKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBIYW5kbGUgYXNzb2NpYXRpb24gcmVzcG9uc2UgdGltZW91dCAqLworc3RhdGljIHZvaWQgYXQ3Nl9kd29ya19hc3NvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19hc3NvYy53b3JrKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisJV0FSTl9PTihwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FTU09DKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BU1NPQykKKwkJZ290byBleGl0OworCisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAiJXM6IGFzc29jaWF0aW9uIHJlc3BvbnNlIHRpbWVvdXQiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKworCWlmIChwcml2LT5yZXRyaWVzLS0gPj0gMCkgeworCQlhdDc2X2Fzc29jX3JlcShwcml2LCBwcml2LT5jdXJyX2Jzcyk7CisJCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLCAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgKyBIWiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYywgQVNTT0NfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJLyogdHJ5IHRvIGdldCBuZXh0IG1hdGNoaW5nIEJTUyAqLworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0pPSU5JTkcpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIFJlYWQgbmV3IGJzc2lkIGluIGFkLWhvYyBtb2RlICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfbmV3X2JzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX25ld19ic3MpOworCWludCByZXQ7CisJc3RydWN0IG1pYl9tYWNfbWdtdCBtYWNfbWdtdDsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19NR01ULCAmbWFjX21nbXQsCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAiaWJzc19jaGFuZ2UgPSAweCUyeCIsIG1hY19tZ210Lmlic3NfY2hhbmdlKTsKKwltZW1jcHkocHJpdi0+YnNzaWQsIG1hY19tZ210LmN1cnJlbnRfYnNzaWQsIEVUSF9BTEVOKTsKKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICJ1c2luZyBCU1NJRCAlcyIsIG1hYzJzdHIocHJpdi0+YnNzaWQpKTsKKworCWF0NzZfaXdldmVudF9ic3NfY29ubmVjdChwcml2LT5uZXRkZXYsIHByaXYtPmJzc2lkKTsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUNfTUdNVDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hY19tZ210LCBpYnNzX2NoYW5nZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSAwOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoaWJzcyBjaGFuZ2Ugb2spIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgaW50IGF0NzZfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyAqY2NmZyA9ICZwcml2LT5jYXJkX2NvbmZpZzsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogc3NpZCAlLipzICglcykgbW9kZSAlcyBjaCAlZCB3ZXAgJXMga2V5ICVkICIKKwkJICJrZXlsZW4gJWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsIHByaXYtPmVzc2lkX3NpemUsIHByaXYtPmVzc2lkLAorCQkgaGV4MnN0cihwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgcHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DID8gImFkaG9jIiA6ICJpbmZyYSIsCisJCSBwcml2LT5jaGFubmVsLCBwcml2LT53ZXBfZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCSBwcml2LT53ZXBfa2V5X2lkLCBwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0pOworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHByZWFtYmxlICVzIHJ0cyAlZCByZXRyeSAlZCBmcmFnICVkICIKKwkJICJ0eHJhdGUgJXMgYXV0aF9tb2RlICVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgcHJlYW1ibGVzW3ByaXYtPnByZWFtYmxlX3R5cGVdLCBwcml2LT5ydHNfdGhyZXNob2xkLAorCQkgcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQsIHByaXYtPmZyYWdfdGhyZXNob2xkLAorCQkgcHJpdi0+dHhyYXRlID09IFRYX1JBVEVfMU1CSVQgPyAiMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzJNQklUID8gIjJNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV81XzVNQklUID8gIjUuNU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzExTUJJVCA/ICIxMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFX0FVVE8gPyAiYXV0byIgOiAiPGludmFsaWQ+IiwgcHJpdi0+YXV0aF9tb2RlKTsKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBwbV9tb2RlICVkIHBtX3BlcmlvZCAlZCBhdXRoX21vZGUgJXMgIgorCQkgInNjYW5fdGltZXMgJWQgJWQgc2Nhbl9tb2RlICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgcHJpdi0+cG1fbW9kZSwgcHJpdi0+cG1fcGVyaW9kLAorCQkgcHJpdi0+YXV0aF9tb2RlID09IFdMQU5fQVVUSF9PUEVOID8gIm9wZW4iIDogInNoYXJlZF9zZWNyZXQiLAorCQkgcHJpdi0+c2Nhbl9taW5fdGltZSwgcHJpdi0+c2Nhbl9tYXhfdGltZSwKKwkJIHByaXYtPnNjYW5fbW9kZSA9PSBTQ0FOX1RZUEVfQUNUSVZFID8gImFjdGl2ZSIgOiAicGFzc2l2ZSIpOworCisJbWVtc2V0KGNjZmcsIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWNjZmctPnByb21pc2N1b3VzX21vZGUgPSAwOworCWNjZmctPnNob3J0X3JldHJ5X2xpbWl0ID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CisKKwlpZiAocHJpdi0+d2VwX2VuYWJsZWQpIHsKKwkJaWYgKHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSA+IFdFUF9TTUFMTF9LRVlfTEVOKQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMjsKKwkJZWxzZQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMTsKKworCQkvKiBqYWw6IGFsd2F5cyBleGNsdWRlIHVuZW5jcnlwdGVkIGlmIFdFUCBpcyBhY3RpdmUgKi8KKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7CisJfSBlbHNlIHsKKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CisJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDA7CisJfQorCisJY2NmZy0+cnRzX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHByaXYtPnJ0c190aHJlc2hvbGQpOworCWNjZmctPmZyYWdtZW50YXRpb25fdGhyZXNob2xkID0gY3B1X3RvX2xlMTYocHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCisJbWVtY3B5KGNjZmctPmJhc2ljX3JhdGVfc2V0LCBod19yYXRlcywgNCk7CisJLyogamFsOiByZWFsbHkgbmVlZGVkLCB3ZSBkbyBhIHNldF9taWIgZm9yIGF1dG9yYXRlIGxhdGVyID8/PyAqLworCWNjZmctPmF1dG9fcmF0ZV9mYWxsYmFjayA9IChwcml2LT50eHJhdGUgPT0gVFhfUkFURV9BVVRPID8gMSA6IDApOworCWNjZmctPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCWNjZmctPnByaXZhY3lfaW52b2tlZCA9IHByaXYtPndlcF9lbmFibGVkOworCW1lbWNweShjY2ZnLT5jdXJyZW50X3NzaWQsIHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7CisJY2NmZy0+c3NpZF9sZW4gPSBwcml2LT5lc3NpZF9zaXplOworCisJY2NmZy0+d2VwX2RlZmF1bHRfa2V5X2lkID0gcHJpdi0+d2VwX2tleV9pZDsKKwltZW1jcHkoY2NmZy0+d2VwX2RlZmF1bHRfa2V5X3ZhbHVlLCBwcml2LT53ZXBfa2V5cywgNCAqIFdFUF9LRVlfTEVOKTsKKworCWNjZmctPnNob3J0X3ByZWFtYmxlID0gcHJpdi0+cHJlYW1ibGVfdHlwZTsKKwljY2ZnLT5iZWFjb25fcGVyaW9kID0gY3B1X3RvX2xlMTYocHJpdi0+YmVhY29uX3BlcmlvZCk7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NUQVJUVVAsICZwcml2LT5jYXJkX2NvbmZpZywKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhdDc2X2NhcmRfY29uZmlnKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1NUQVJUVVApOworCisJLyogcmVtb3ZlIEJTU0lEIGZyb20gcHJldmlvdXMgcnVuICovCisJbWVtc2V0KHByaXYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisKKwlpZiAoYXQ3Nl9zZXRfcmFkaW8ocHJpdiwgMSkgPT0gMSkKKwkJYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1JBRElPX09OKTsKKworCXJldCA9IGF0NzZfc2V0X3ByZWFtYmxlKHByaXYsIHByaXYtPnByZWFtYmxlX3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfZnJhZyhwcml2LCBwcml2LT5mcmFnX3RocmVzaG9sZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9ydHMocHJpdiwgcHJpdi0+cnRzX3RocmVzaG9sZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9hdXRvcmF0ZV9mYWxsYmFjayhwcml2LAorCQkJCQkgcHJpdi0+dHhyYXRlID09IFRYX1JBVEVfQVVUTyA/IDEgOiAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X3BtX21vZGUocHJpdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoYXQ3Nl9kZWJ1ZyAmIERCR19NSUIpIHsKKwkJYXQ3Nl9kdW1wX21pYl9tYWMocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWFjX2FkZHIocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWFjX21nbXQocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWFjX3dlcChwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tZG9tYWluKHByaXYpOworCQlhdDc2X2R1bXBfbWliX3BoeShwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9sb2NhbChwcml2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVzdGFydCB0aGUgaW50ZXJmYWNlICovCitzdGF0aWMgdm9pZCBhdDc2X2R3b3JrX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgZHdvcmtfcmVzdGFydC53b3JrKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRkZXYpOwkvKiBzdG9wIG5ldGRldiB3YXRjaGRvZyAqLworCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsJLyogc3RvcCB0eCBkYXRhIHBhY2tldHMgKi8KKworCWF0NzZfc3RhcnR1cF9kZXZpY2UocHJpdik7CisKKwlpZiAocHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX01PTklUT1IpIHsKKwkJcHJpdi0+bmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX1NDQU5OSU5HKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19zdGFydF9zY2FuKTsKKwl9IGVsc2UgeworCQlwcml2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworCQlhdDc2X3N0YXJ0X21vbml0b3IocHJpdik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBJbml0aWF0ZSBzY2FubmluZyAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX3N0YXJ0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19zdGFydF9zY2FuKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCVdBUk5fT04ocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19TQ0FOTklORyk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfU0NBTk5JTkcpCisJCWdvdG8gZXhpdDsKKworCS8qIG9ubHkgY2xlYXIgdGhlIGJzcyBsaXN0IHdoZW4gYSBzY2FuIGlzIGFjdGl2ZWx5IGluaXRpYXRlZCwKKwkgKiBvdGhlcndpc2Ugc2ltcGx5IHJlbHkgb24gYXQ3Nl9ic3NfbGlzdF90aW1lb3V0ICovCisJaWYgKHByaXYtPnNjYW5fc3RhdGUgPT0gU0NBTl9JTl9QUk9HUkVTUykgeworCQlhdDc2X2ZyZWVfYnNzX2xpc3QocHJpdik7CisJCXByaXYtPnNjYW5fbmVlZF9hbnkgPSAxOworCX0gZWxzZQorCQlwcml2LT5zY2FuX25lZWRfYW55ID0gMDsKKworCXJldCA9IGF0NzZfc3RhcnRfc2Nhbihwcml2LCAxKTsKKworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogc3RhcnRfc2NhbiBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgX19mdW5jX18sIHJldCk7CisJZWxzZSB7CisJCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLAorCQkJICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciBmb3IgJWQgdGlja3MiLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2NhbiwKKwkJCQkgICAgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zZXRfcHJvbWlzYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX3NldF9wcm9taXNjKTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTE9DQUw7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9sb2NhbCwgcHJvbWlzY3VvdXNfbW9kZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBwcml2LT5wcm9taXNjID8gMSA6IDA7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwcm9taXNjdW91c19tb2RlKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBTdWJtaXQgUnggdXJiIGJhY2sgdG8gdGhlIGRldmljZSAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX3N1Ym1pdF9yeChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX3N1Ym1pdF9yeCk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCWF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIFdlIGdvdCBhbiBhc3NvY2lhdGlvbiByZXNwb25zZSAqLworc3RhdGljIHZvaWQgYXQ3Nl9yeF9tZ210X2Fzc29jKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSAqcmVzcCA9CisJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICopYnVmLT5wYWNrZXQ7CisJdTE2IGFzc29jX2lkID0gbGUxNl90b19jcHUocmVzcC0+YWlkKTsKKwl1MTYgc3RhdHVzID0gbGUxNl90b19jcHUocmVzcC0+c3RhdHVzKTsKKworCWF0NzZfZGJnKERCR19SWF9NR01ULCAiJXM6IHJ4IEFzc29jUmVzcCBic3NpZCAlcyBjYXBhIDB4JTA0eCBzdGF0dXMgIgorCQkgIjB4JTA0eCBhc3NvY19pZCAweCUwNHggcmF0ZXMgJXMiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBtYWMyc3RyKHJlc3AtPmhlYWRlci5hZGRyMyksIGxlMTZfdG9fY3B1KHJlc3AtPmNhcGFiaWxpdHkpLAorCQkgc3RhdHVzLCBhc3NvY19pZCwgaGV4MnN0cihyZXNwLT5pbmZvX2VsZW1lbnQtPmRhdGEsCisJCQkJCSAgIHJlc3AtPmluZm9fZWxlbWVudC0+bGVuKSk7CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BU1NPQykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogQXNzb2NSZXNwIGluIHN0YXRlICVzIGlnbm9yZWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIG1hY19zdGF0ZXNbcHJpdi0+bWFjX3N0YXRlXSk7CisJCXJldHVybjsKKwl9CisKKwlCVUdfT04oIXByaXYtPmN1cnJfYnNzKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jKTsKKwlpZiAoc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJc3RydWN0IGJzc19pbmZvICpwdHIgPSBwcml2LT5jdXJyX2JzczsKKwkJcHJpdi0+YXNzb2NfaWQgPSBhc3NvY19pZCAmIDB4M2ZmZjsKKwkJLyogdXBkYXRlIGl3Y29uZmlnIHBhcmFtcyAqLworCQltZW1jcHkocHJpdi0+YnNzaWQsIHB0ci0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHByaXYtPmVzc2lkLCBwdHItPnNzaWQsIHB0ci0+c3NpZF9sZW4pOworCQlwcml2LT5lc3NpZF9zaXplID0gcHRyLT5zc2lkX2xlbjsKKwkJcHJpdi0+Y2hhbm5lbCA9IHB0ci0+Y2hhbm5lbDsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19hc3NvY19kb25lKTsKKwl9IGVsc2UgeworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0pPSU5JTkcpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworCX0KK30KKworLyogUHJvY2VzcyBkaXNhc3NvY2lhdGlvbiByZXF1ZXN0IGZyb20gdGhlIEFQICovCitzdGF0aWMgdm9pZCBhdDc2X3J4X21nbXRfZGlzYXNzb2Moc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKnJlc3AgPQorCSAgICAoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqKWJ1Zi0+cGFja2V0OworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICptZ210ID0gJnJlc3AtPmhlYWRlcjsKKworCWF0NzZfZGJnKERCR19SWF9NR01ULAorCQkgIiVzOiByeCBEaXNBc3NvYyBic3NpZCAlcyByZWFzb24gMHglMDR4IGRlc3RpbmF0aW9uICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihtZ210LT5hZGRyMyksCisJCSBsZTE2X3RvX2NwdShyZXNwLT5yZWFzb24pLCBtYWMyc3RyKG1nbXQtPmFkZHIxKSk7CisKKwkvKiBXZSBhcmUgbm90IGNvbm5lY3RlZCwgaWdub3JlICovCisJaWYgKHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfU0NBTk5JTkcgfHwgcHJpdi0+bWFjX3N0YXRlID09IE1BQ19JTklUCisJICAgIHx8ICFwcml2LT5jdXJyX2JzcykKKwkJcmV0dXJuOworCisJLyogTm90IG91ciBCU1NJRCwgaWdub3JlICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5hZGRyMywgcHJpdi0+Y3Vycl9ic3MtPmJzc2lkKSkKKwkJcmV0dXJuOworCisJLyogTm90IGZvciBvdXIgU1RBIGFuZCBub3QgYnJvYWRjYXN0LCBpZ25vcmUgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPm5ldGRldi0+ZGV2X2FkZHIsIG1nbXQtPmFkZHIxKQorCSAgICAmJiAhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIobWdtdC0+YWRkcjEpKQorCQlyZXR1cm47CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BU1NPQyAmJiBwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0NPTk5FQ1RFRAorCSAgICAmJiBwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0pPSU5JTkcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc0Fzc29jIGluIHN0YXRlICVzIGlnbm9yZWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIG1hY19zdGF0ZXNbcHJpdi0+bWFjX3N0YXRlXSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQpIHsKKwkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOworCQlhdDc2X2l3ZXZlbnRfYnNzX2Rpc2Nvbm5lY3QocHJpdi0+bmV0ZGV2KTsKKwl9CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2JlYWNvbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MpOworCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSk9JTklORyk7CisJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9tZ210X2F1dGgoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBpZWVlODAyMTFfYXV0aCAqcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKilidWYtPnBhY2tldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbWdtdCA9ICZyZXNwLT5oZWFkZXI7CisJaW50IHNlcV9uciA9IGxlMTZfdG9fY3B1KHJlc3AtPnRyYW5zYWN0aW9uKTsKKwlpbnQgYWxnID0gbGUxNl90b19jcHUocmVzcC0+YWxnb3JpdGhtKTsKKwlpbnQgc3RhdHVzID0gbGUxNl90b19jcHUocmVzcC0+c3RhdHVzKTsKKworCWF0NzZfZGJnKERCR19SWF9NR01ULAorCQkgIiVzOiByeCBBdXRoRnJhbWUgYnNzaWQgJXMgYWxnICVkIHNlcV9uciAlZCBzdGF0dXMgJWQgIgorCQkgImRlc3RpbmF0aW9uICVzIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKG1nbXQtPmFkZHIzKSwKKwkJIGFsZywgc2VxX25yLCBzdGF0dXMsIG1hYzJzdHIobWdtdC0+YWRkcjEpKTsKKworCWlmIChhbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkgJiYgc2VxX25yID09IDIpCisJCWF0NzZfZGJnKERCR19SWF9NR01ULCAiJXM6IEF1dGhGcmFtZSBjaGFsbGVuZ2UgJXMgLi4uIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGhleDJzdHIocmVzcC0+aW5mb19lbGVtZW50LCAxOCkpOworCisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVVUSCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogaWdub3JlZCBBdXRoRnJhbWUgaW4gc3RhdGUgJXNcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIG1hY19zdGF0ZXNbcHJpdi0+bWFjX3N0YXRlXSk7CisJCXJldHVybjsKKwl9CisJaWYgKHByaXYtPmF1dGhfbW9kZSAhPSBhbGcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlnbm9yZWQgQXV0aEZyYW1lIGZvciBhbGcgJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGFsZyk7CisJCXJldHVybjsKKwl9CisKKwlCVUdfT04oIXByaXYtPmN1cnJfYnNzKTsKKworCS8qIE5vdCBvdXIgQlNTSUQgb3Igbm90IGZvciBvdXIgU1RBLCBpZ25vcmUgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmFkZHIzLCBwcml2LT5jdXJyX2Jzcy0+YnNzaWQpCisJICAgIHx8IGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5uZXRkZXYtPmRldl9hZGRyLCBtZ210LT5hZGRyMSkpCisJCXJldHVybjsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgpOworCWlmIChzdGF0dXMgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQkvKiB0cnkgdG8gam9pbiBuZXh0IGJzcyAqLworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0pPSU5JTkcpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYtPmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfT1BFTiB8fCBzZXFfbnIgPT0gNCkgeworCQlwcml2LT5yZXRyaWVzID0gQVNTT0NfUkVUUklFUzsKKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19BU1NPQyk7CisJCWF0NzZfYXNzb2NfcmVxKHByaXYsIHByaXYtPmN1cnJfYnNzKTsKKwkJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsCisJCQkgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyICsgSFoiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jLCBBU1NPQ19USU1FT1VUKTsKKwkJcmV0dXJuOworCX0KKworCVdBUk5fT04oc2VxX25yICE9IDIpOworCWF0NzZfYXV0aF9yZXEocHJpdiwgcHJpdi0+Y3Vycl9ic3MsIHNlcV9uciArIDEsIHJlc3AtPmluZm9fZWxlbWVudCk7CisJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciArIEhaIiwgX19mdW5jX18sCisJCSBfX0xJTkVfXyk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoLCBBVVRIX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X21nbXRfZGVhdXRoKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqcmVzcCA9CisJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICopYnVmLT5wYWNrZXQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm1nbXQgPSAmcmVzcC0+aGVhZGVyOworCisJYXQ3Nl9kYmcoREJHX1JYX01HTVQgfCBEQkdfUFJPR1JFU1MsCisJCSAiJXM6IHJ4IERlQXV0aCBic3NpZCAlcyByZWFzb24gMHglMDR4IGRlc3RpbmF0aW9uICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihtZ210LT5hZGRyMyksCisJCSBsZTE2X3RvX2NwdShyZXNwLT5yZWFzb24pLCBtYWMyc3RyKG1nbXQtPmFkZHIxKSk7CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BVVRIICYmIHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVNTT0MKKwkgICAgJiYgcHJpdi0+bWFjX3N0YXRlICE9IE1BQ19DT05ORUNURUQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERlQXV0aCBpbiBzdGF0ZSAlcyBpZ25vcmVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWNfc3RhdGVzW3ByaXYtPm1hY19zdGF0ZV0pOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKCFwcml2LT5jdXJyX2Jzcyk7CisKKwkvKiBOb3Qgb3VyIEJTU0lELCBpZ25vcmUgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmFkZHIzLCBwcml2LT5jdXJyX2Jzcy0+YnNzaWQpKQorCQlyZXR1cm47CisKKwkvKiBOb3QgZm9yIG91ciBTVEEgYW5kIG5vdCBicm9hZGNhc3QsIGlnbm9yZSAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+bmV0ZGV2LT5kZXZfYWRkciwgbWdtdC0+YWRkcjEpCisJICAgICYmICFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihtZ210LT5hZGRyMSkpCisJCXJldHVybjsKKworCWlmIChwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRCkKKwkJYXQ3Nl9pd2V2ZW50X2Jzc19kaXNjb25uZWN0KHByaXYtPm5ldGRldik7CisKKwlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0pPSU5JTkcpOworCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2JlYWNvbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MpOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X21nbXRfYmVhY29uKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJaW50IHZhcnBhcl9sZW47CisJLyogYmVhY29uIGNvbnRlbnQgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiAqYmRhdGEgPSAoc3RydWN0IGllZWU4MDIxMV9iZWFjb24gKilidWYtPnBhY2tldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbWdtdCA9ICZiZGF0YS0+aGVhZGVyOworCisJc3RydWN0IGxpc3RfaGVhZCAqbHB0cjsKKwlzdHJ1Y3QgYnNzX2luZm8gKm1hdGNoOwkvKiBlbnRyeSBtYXRjaGluZyBhZGRyMyB3aXRoIGl0cyBic3NpZCAqLworCWludCBuZXdfZW50cnkgPSAwOworCWludCBsZW47CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmllOworCWludCBoYXZlX3NzaWQgPSAwOworCWludCBoYXZlX3JhdGVzID0gMDsKKwlpbnQgaGF2ZV9jaGFubmVsID0gMDsKKwlpbnQga2VlcF9nb2luZyA9IDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRCkgeworCQkvKiBpbiBzdGF0ZSBNQUNfQ09OTkVDVEVEIHdlIHVzZSB0aGUgbWdtdF90aW1lciB0byBjb250cm9sCisJCSAgIHRoZSBiZWFjb24gb2YgdGhlIEJTUyAqLworCQlCVUdfT04oIXByaXYtPmN1cnJfYnNzKTsKKworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5jdXJyX2Jzcy0+YnNzaWQsIG1nbXQtPmFkZHIzKSkgeworCQkJLyogV2UgZ290IG91ciBBUCdzIGJlYWNvbiwgZGVmZXIgdGhlIHRpbWVvdXQgaGFuZGxlci4KKwkJCSAgIEtpbGwgcGVuZGluZyB3b3JrIGZpcnN0LCBhcyBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKQorCQkJICAgd29uJ3QgZG8gaXQuICovCisJCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19iZWFjb24pOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19iZWFjb24sCisJCQkJCSAgICAgIEJFQUNPTl9USU1FT1VUKTsKKwkJCXByaXYtPmN1cnJfYnNzLT5yc3NpID0gYnVmLT5yc3NpOworCQkJcHJpdi0+YmVhY29uc19yZWNlaXZlZCsrOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJLyogbG9vayBpZiB3ZSBoYXZlIHRoaXMgQlNTIGFscmVhZHkgaW4gdGhlIGxpc3QgKi8KKwltYXRjaCA9IE5VTEw7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmJzc19saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoKGxwdHIsICZwcml2LT5ic3NfbGlzdCkgeworCQkJc3RydWN0IGJzc19pbmZvICpic3NfcHRyID0KKwkJCSAgICBsaXN0X2VudHJ5KGxwdHIsIHN0cnVjdCBic3NfaW5mbywgbGlzdCk7CisJCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihic3NfcHRyLT5ic3NpZCwgbWdtdC0+YWRkcjMpKSB7CisJCQkJbWF0Y2ggPSBic3NfcHRyOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFtYXRjaCkgeworCQkvKiBCU1Mgbm90IGluIHRoZSBsaXN0IC0gYXBwZW5kIGl0ICovCisJCW1hdGNoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJzc19pbmZvKSwgR0ZQX0FUT01JQyk7CisJCWlmICghbWF0Y2gpIHsKKwkJCWF0NzZfZGJnKERCR19CU1NfVEFCTEUsCisJCQkJICIlczogY2Fubm90IGttYWxsb2MgbmV3IGJzcyBpbmZvICglemQgYnl0ZSkiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHNpemVvZihzdHJ1Y3QgYnNzX2luZm8pKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQluZXdfZW50cnkgPSAxOworCQlsaXN0X2FkZF90YWlsKCZtYXRjaC0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKKwl9CisKKwltYXRjaC0+Y2FwYSA9IGxlMTZfdG9fY3B1KGJkYXRhLT5jYXBhYmlsaXR5KTsKKwltYXRjaC0+YmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUoYmRhdGEtPmJlYWNvbl9pbnRlcnZhbCk7CisJbWF0Y2gtPnJzc2kgPSBidWYtPnJzc2k7CisJbWF0Y2gtPmxpbmtfcXVhbCA9IGJ1Zi0+bGlua19xdWFsaXR5OworCW1hdGNoLT5ub2lzZV9sZXZlbCA9IGJ1Zi0+bm9pc2VfbGV2ZWw7CisJbWVtY3B5KG1hdGNoLT5ic3NpZCwgbWdtdC0+YWRkcjMsIEVUSF9BTEVOKTsKKwlhdDc2X2RiZyhEQkdfUlhfQkVBQ09OLCAiJXM6IGJzc2lkICVzIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgbWFjMnN0cihtYXRjaC0+YnNzaWQpKTsKKworCWllID0gYmRhdGEtPmluZm9fZWxlbWVudDsKKworCS8qIGxlbmd0aCBvZiB2YXIgbGVuZ3RoIGJlYWNvbiBwYXJhbWV0ZXJzICovCisJdmFycGFyX2xlbiA9IG1pbl90KGludCwgbGUxNl90b19jcHUoYnVmLT53bGVuZ3RoKSAtCisJCQkgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9iZWFjb24pLAorCQkJICAgQkVBQ09OX01BWF9EQVRBX0xFTkdUSCk7CisKKwkvKiBUaGlzIHJvdXRpbmUgc3RlcHMgdGhyb3VnaCB0aGUgYmRhdGEtPmRhdGEgYXJyYXkgdG8gZ2V0CisJICogc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjY2VzcyBwb2ludC4KKwkgKiBDdXJyZW50bHksIHRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgcmVjZWlwdCBvZjogU1NJRCwKKwkgKiBzdXBwb3J0ZWQgdHJhbnNmZXIgcmF0ZXMgYW5kIGNoYW5uZWwsIGluIGFueSBvcmRlciwgd2l0aCBzb21lCisJICogdG9sZXJhbmNlIGZvciBpbnRlcm1pdHRlbnQgdW5rbm93biBjb2RlcyAoYWx0aG91Z2ggdGhpcworCSAqIGZ1bmN0aW9uYWxpdHkgbWF5IG5vdCBiZSBuZWNlc3NhcnkgYXMgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbiB3aWxsCisJICogdXN1YWxseSBhcnJpdmUgaW4gY29uc2VjdXRpdmVseSwgYnV0IHRoZXJlIGhhdmUgYmVlbiBzb21lCisJICogcmVwb3J0cyBvZiBzb21lIG9mIHRoZSB1c2VmdWwgaW5mb3JtYXRpb24gZmllbGRzIGFycml2aW5nIGluIGEKKwkgKiBkaWZmZXJlbnQgb3JkZXIpLgorCSAqIEl0IGRvZXMgbm90IHN1cHBvcnQgYW55IG1vcmUgSUUgdHlwZXMgYWx0aG91Z2ggTUZJRV9UWVBFX1RJTSBtYXkKKwkgKiBiZSBzdXBwb3J0ZWQgKG9uIG15IEFQIGF0IGxlYXN0KS4KKwkgKiBUaGUgYmRhdGEtPmRhdGEgYXJyYXkgaXMgYWJvdXQgMTUwMCBieXRlcyBsb25nIGJ1dCBvbmx5IH4zNiBvZiB0aG9zZQorCSAqIGJ5dGVzIGFyZSB1c2VmdWwsIGhlbmNlIHRoZSBoYXZlX3NzaWQgZXRjIG9wdGltaXphdGlvbnMuICovCisKKwl3aGlsZSAoa2VlcF9nb2luZyAmJgorCSAgICAgICAoKCZpZS0+ZGF0YVtpZS0+bGVuXSAtICh1OCAqKWJkYXRhLT5pbmZvX2VsZW1lbnQpIDw9CisJCXZhcnBhcl9sZW4pKSB7CisKKwkJc3dpdGNoIChpZS0+aWQpIHsKKworCQljYXNlIE1GSUVfVFlQRV9TU0lEOgorCQkJaWYgKGhhdmVfc3NpZCkKKwkJCQlicmVhazsKKworCQkJbGVuID0gbWluX3QoaW50LCBJV19FU1NJRF9NQVhfU0laRSwgaWUtPmxlbik7CisKKwkJCS8qIHdlIGNvcHkgb25seSBpZiB0aGlzIGlzIGEgbmV3IGVudHJ5LAorCQkJICAgb3IgdGhlIGluY29taW5nIFNTSUQgaXMgbm90IGEgaGlkZGVuIFNTSUQuIFRoaXMKKwkJCSAgIHdpbGwgcHJvdGVjdCB1cyBmcm9tIG92ZXJ3cml0aW5nIGEgcmVhbCBTU0lEIHJlYWQKKwkJCSAgIGluIGEgUHJvYmVSZXNwb25zZSB3aXRoIGEgaGlkZGVuIG9uZSBmcm9tIGEKKwkJCSAgIGZvbGxvd2luZyBiZWFjb24uICovCisJCQlpZiAoIW5ld19lbnRyeSAmJiBhdDc2X2lzX2hpZGRlbl9zc2lkKGllLT5kYXRhLCBsZW4pKSB7CisJCQkJaGF2ZV9zc2lkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbWF0Y2gtPnNzaWRfbGVuID0gbGVuOworCQkJbWVtY3B5KG1hdGNoLT5zc2lkLCBpZS0+ZGF0YSwgbGVuKTsKKwkJCWF0NzZfZGJnKERCR19SWF9CRUFDT04sICIlczogU1NJRCAtICUuKnMiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGxlbiwgbWF0Y2gtPnNzaWQpOworCQkJaGF2ZV9zc2lkID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJRV9UWVBFX1JBVEVTOgorCQkJaWYgKGhhdmVfcmF0ZXMpCisJCQkJYnJlYWs7CisKKwkJCW1hdGNoLT5yYXRlc19sZW4gPQorCQkJICAgIG1pbl90KGludCwgc2l6ZW9mKG1hdGNoLT5yYXRlcyksIGllLT5sZW4pOworCQkJbWVtY3B5KG1hdGNoLT5yYXRlcywgaWUtPmRhdGEsIG1hdGNoLT5yYXRlc19sZW4pOworCQkJaGF2ZV9yYXRlcyA9IDE7CisJCQlhdDc2X2RiZyhEQkdfUlhfQkVBQ09OLCAiJXM6IFNVUFBPUlRFRCBSQVRFUyAlcyIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJCQkgaGV4MnN0cihpZS0+ZGF0YSwgaWUtPmxlbikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklFX1RZUEVfRFNfU0VUOgorCQkJaWYgKGhhdmVfY2hhbm5lbCkKKwkJCQlicmVhazsKKworCQkJbWF0Y2gtPmNoYW5uZWwgPSBpZS0+ZGF0YVswXTsKKwkJCWhhdmVfY2hhbm5lbCA9IDE7CisJCQlhdDc2X2RiZyhEQkdfUlhfQkVBQ09OLCAiJXM6IENIQU5ORUwgLSAlZCIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWF0Y2gtPmNoYW5uZWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklFX1RZUEVfQ0ZfU0VUOgorCQljYXNlIE1GSUVfVFlQRV9USU06CisJCWNhc2UgTUZJRV9UWVBFX0lCU1NfU0VUOgorCQlkZWZhdWx0OgorCQkJYXQ3Nl9kYmcoREJHX1JYX0JFQUNPTiwgIiVzOiBiZWFjb24gSUUgaWQgJWQgbGVuICVkICVzIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBpZS0+aWQsIGllLT5sZW4sCisJCQkJIGhleDJzdHIoaWUtPmRhdGEsIGllLT5sZW4pKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogYWR2YW5jZSB0byB0aGUgbmV4dCBpbmZvcm1hdGlvbmFsIGVsZW1lbnQgKi8KKwkJbmV4dF9pZSgmaWUpOworCisJCS8qIE9wdGltaXphdGlvbjogYWZ0ZXIgYWxsLCB0aGUgYmRhdGEtPmRhdGEgYXJyYXkgaXMKKwkJICogdmFycGFyX2xlbiBieXRlcyBsb25nLCB3aGVyZWFzIHdlIGdldCBhbGwgb2YgdGhlIHVzZWZ1bAorCQkgKiBpbmZvcm1hdGlvbiBhZnRlciBvbmx5IH4zNiBieXRlcywgdGhpcyBzYXZlcyB1cyBhIGxvdCBvZgorCQkgKiB0aW1lIChhbmQgdHJvdWJsZSBhcyB0aGUgcmVtYWluaW5nIHBvcnRpb24gb2YgdGhlIGFycmF5CisJCSAqIGNvdWxkIGJlIGZ1bGwgb2YganVuaykKKwkJICogQ29tbWVudCB0aGlzIG91dCBpZiB5b3Ugd2FudCB0byBzZWUgd2hhdCBvdGhlciBpbmZvcm1hdGlvbgorCQkgKiBjb21lcyBmcm9tIHRoZSBBUCAtIGFsdGhvdWdoIGxpdHRsZSBvZiBpdCBtYXkgYmUgdXNlZnVsICovCisJfQorCisJYXQ3Nl9kYmcoREJHX1JYX0JFQUNPTiwgIiVzOiBGaW5pc2hlZCBwcm9jZXNzaW5nIGJlYWNvbiBkYXRhIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSk7CisKKwltYXRjaC0+bGFzdF9yeCA9IGppZmZpZXM7CS8qIHJlY29yZCBsYXN0IHJ4IG9mIGJlYWNvbiAqLworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgbGluayBsZXZlbCBmcm9tIGEgZ2l2ZW4gcnhfYnVmZmVyICovCitzdGF0aWMgdm9pZCBhdDc2X2NhbGNfbGV2ZWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYsCisJCQkgICAgc3RydWN0IGl3X3F1YWxpdHkgKnF1YWwpCit7CisJLyoganVzdCBhIGd1ZXNzIGZvciBub3csIG1pZ2h0IGJlIGRpZmZlcmVudCBmb3Igb3RoZXIgY2hpcHMgKi8KKwlpbnQgbWF4X3Jzc2kgPSA0MjsKKworCXF1YWwtPmxldmVsID0gKGJ1Zi0+cnNzaSAqIDEwMCAvIG1heF9yc3NpKTsKKwlpZiAocXVhbC0+bGV2ZWwgPiAxMDApCisJCXF1YWwtPmxldmVsID0gMTAwOworCXF1YWwtPnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworfQorCisvKiBDYWxjdWxhdGUgdGhlIGxpbmsgcXVhbGl0eSBmcm9tIGEgZ2l2ZW4gcnhfYnVmZmVyICovCitzdGF0aWMgdm9pZCBhdDc2X2NhbGNfcXVhbChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZiwKKwkJCSAgIHN0cnVjdCBpd19xdWFsaXR5ICpxdWFsKQoreworCWlmIChhdDc2X2lzX2ludGVyc2lsKHByaXYtPmJvYXJkX3R5cGUpKQorCQlxdWFsLT5xdWFsID0gYnVmLT5saW5rX3F1YWxpdHk7CisJZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgZWxhcHNlZDsKKworCQkvKiBVcGRhdGUgcXVhbCBhdCBtb3N0IG9uY2UgYSBzZWNvbmQgKi8KKwkJZWxhcHNlZCA9IGppZmZpZXMgLSBwcml2LT5iZWFjb25zX2xhc3RfcXVhbDsKKwkJaWYgKGVsYXBzZWQgPCAxICogSFopCisJCQlyZXR1cm47CisKKwkJcXVhbC0+cXVhbCA9IHF1YWwtPmxldmVsICogcHJpdi0+YmVhY29uc19yZWNlaXZlZCAqCisJCSAgICBtc2Vjc190b19qaWZmaWVzKHByaXYtPmJlYWNvbl9wZXJpb2QpIC8gZWxhcHNlZDsKKworCQlwcml2LT5iZWFjb25zX2xhc3RfcXVhbCA9IGppZmZpZXM7CisJCXByaXYtPmJlYWNvbnNfcmVjZWl2ZWQgPSAwOworCX0KKwlxdWFsLT5xdWFsID0gKHF1YWwtPnF1YWwgPiAxMDApID8gMTAwIDogcXVhbC0+cXVhbDsKKwlxdWFsLT51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOworfQorCisvKiBDYWxjdWxhdGUgdGhlIG5vaXNlIHF1YWxpdHkgZnJvbSBhIGdpdmVuIHJ4X2J1ZmZlciAqLworc3RhdGljIHZvaWQgYXQ3Nl9jYWxjX25vaXNlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmLAorCQkJICAgIHN0cnVjdCBpd19xdWFsaXR5ICpxdWFsKQoreworCXF1YWwtPm5vaXNlID0gMDsKKwlxdWFsLT51cGRhdGVkIHw9IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl91cGRhdGVfd3N0YXRzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGl3X3F1YWxpdHkgKnF1YWwgPSAmcHJpdi0+d3N0YXRzLnF1YWw7CisKKwlpZiAoYnVmLT5yc3NpICYmIHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfQ09OTkVDVEVEKSB7CisJCXF1YWwtPnVwZGF0ZWQgPSAwOworCQlhdDc2X2NhbGNfbGV2ZWwocHJpdiwgYnVmLCBxdWFsKTsKKwkJYXQ3Nl9jYWxjX3F1YWwocHJpdiwgYnVmLCBxdWFsKTsKKwkJYXQ3Nl9jYWxjX25vaXNlKHByaXYsIGJ1ZiwgcXVhbCk7CisJfSBlbHNlIHsKKwkJcXVhbC0+cXVhbCA9IDA7CisJCXF1YWwtPmxldmVsID0gMDsKKwkJcXVhbC0+bm9pc2UgPSAwOworCQlxdWFsLT51cGRhdGVkID0gSVdfUVVBTF9BTExfSU5WQUxJRDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfbWdtdChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbWdtdCA9CisJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWJ1Zi0+cGFja2V0OworCXUxNiBmcmFtZWN0bCA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2N0bCk7CisKKwkvKiB1cGRhdGUgd3N0YXRzICovCisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfSU5JVCAmJiBwcml2LT5tYWNfc3RhdGUgIT0gTUFDX1NDQU5OSU5HKSB7CisJCS8qIGphbDogdGhpcyBpcyBhIGRpcnR5IGhhY2sgbmVlZGVkIGJ5IFRpbSBpbiBhZC1ob2MgbW9kZSAqLworCQkvKiBEYXRhIHBhY2tldHMgYWx3YXlzIHNlZW0gdG8gaGF2ZSBhIDAgbGluayBsZXZlbCwgc28gd2UKKwkJICAgb25seSByZWFkIGxpbmsgcXVhbGl0eSBpbmZvIGZyb20gbWFuYWdlbWVudCBwYWNrZXRzLgorCQkgICBBdG1lbCBkcml2ZXIgYWN0dWFsbHkgYXZlcmFnZXMgdGhlIHByZXNlbnQsIGFuZCBwcmV2aW91cworCQkgICB2YWx1ZXMsIHdlIGp1c3QgcHJlc2VudCB0aGUgcmF3IHZhbHVlIGF0IHRoZSBtb21lbnQgLSBUSlMgKi8KKwkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQworCQkgICAgfHwgKHByaXYtPmN1cnJfYnNzCisJCQkmJiAhY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmFkZHIzLAorCQkJCQkgICAgICAgcHJpdi0+Y3Vycl9ic3MtPmJzc2lkKSkpCisJCQlhdDc2X3VwZGF0ZV93c3RhdHMocHJpdiwgYnVmKTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUlhfTUdNVF9DT05URU5ULCAiJXMgcnggbWdtdCBmcmFtZWN0bCAweCV4ICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgZnJhbWVjdGwsCisJCSBoZXgyc3RyKG1nbXQsIGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCkpKTsKKworCXN3aXRjaCAoZnJhbWVjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCQlhdDc2X3J4X21nbXRfYmVhY29uKHByaXYsIGJ1Zik7CisJCWJyZWFrOworCisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKKwkJYXQ3Nl9yeF9tZ210X2Fzc29jKHByaXYsIGJ1Zik7CisJCWJyZWFrOworCisJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CisJCWF0NzZfcnhfbWdtdF9kaXNhc3NvYyhwcml2LCBidWYpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCWF0NzZfcnhfbWdtdF9hdXRoKHByaXYsIGJ1Zik7CisJCWJyZWFrOworCisJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgorCQlhdDc2X3J4X21nbXRfZGVhdXRoKHByaXYsIGJ1Zik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpZ25vcmluZyBmcmFtZSB3aXRoIGZyYW1lY3RsIDB4JTA0eFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgZnJhbWVjdGwpOworCX0KKworCXJldHVybjsKK30KKworLyogQ29udmVydCB0aGUgODAyLjExIGhlYWRlciBpbnRvIGFuIGV0aGVybmV0LXN0eWxlIGhlYWRlciwgbWFrZSBza2IKKyAqIHJlYWR5IGZvciBjb25zdW1wdGlvbiBieSBuZXRpZl9yeCgpICovCitzdGF0aWMgdm9pZCBhdDc2X2llZWU4MDIxMV90b19ldGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGl3X21vZGUpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmk4MDJfMTFfaGRyOworCXN0cnVjdCBldGhoZHIgKmV0aF9oZHJfcDsKKwl1OCAqc3JjX2FkZHI7CisJdTggKmRlc3RfYWRkcjsKKworCWk4MDJfMTFfaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopc2tiLT5kYXRhOworCisJLyogVGhhdCB3b3VsZCBiZSB0aGUgZXRoZXJuZXQgaGVhZGVyIGlmIHRoZSBoYXJkd2FyZSBjb252ZXJ0ZWQKKwkgKiB0aGUgZnJhbWUgZm9yIHVzLiAgTWFrZSBzdXJlIHRoZSBzb3VyY2UgYW5kIHRoZSBkZXN0aW5hdGlvbgorCSAqIG1hdGNoIHRoZSA4MDIuMTEgaGVhZGVyLiAgV2hpY2ggaGFyZHdhcmUgZG9lcyBpdD8gKi8KKwlldGhfaGRyX3AgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdWxsKHNrYiwgSUVFRTgwMjExXzNBRERSX0xFTik7CisKKwlkZXN0X2FkZHIgPSBpODAyXzExX2hkci0+YWRkcjE7CisJaWYgKGl3X21vZGUgPT0gSVdfTU9ERV9BREhPQykKKwkJc3JjX2FkZHIgPSBpODAyXzExX2hkci0+YWRkcjI7CisJZWxzZQorCQlzcmNfYWRkciA9IGk4MDJfMTFfaGRyLT5hZGRyMzsKKworCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHJfcC0+aF9zb3VyY2UsIHNyY19hZGRyKSAmJgorCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHJfcC0+aF9kZXN0LCBkZXN0X2FkZHIpKQorCQkvKiBZZXMsIHdlIGFscmVhZHkgaGF2ZSBhbiBldGhlcm5ldCBoZWFkZXIgKi8KKwkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwllbHNlIHsKKwkJdTE2IGxlbjsKKworCQkvKiBOZWVkIHRvIGJ1aWxkIGFuIGV0aGVybmV0IGhlYWRlciAqLworCQlpZiAoIW1lbWNtcChza2ItPmRhdGEsIHNuYXBzaWcsIHNpemVvZihzbmFwc2lnKSkpIHsKKwkJCS8qIFNOQVAgZnJhbWUgLSBkZWNhcHN1bGF0ZSwga2VlcCBwcm90byAqLworCQkJc2tiX3B1c2goc2tiLCBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKSAtCisJCQkJIHNpemVvZihyZmMxMDQyc2lnKSk7CisJCQlsZW4gPSAwOworCQl9IGVsc2UgeworCQkJLyogODAyLjMgZnJhbWUsIHByb3RvIGlzIGxlbmd0aCAqLworCQkJbGVuID0gc2tiLT5sZW47CisJCQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKKwkJfQorCisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJCWV0aF9oZHJfcCA9IGV0aF9oZHIoc2tiKTsKKwkJLyogVGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHRoaXMgb3JkZXIgKGV0aF9oZHJfcC0+aF9kZXN0IG1heQorCQkgKiBvdmVybGFwIHNyY19hZGRyKSAqLworCQltZW1jcHkoZXRoX2hkcl9wLT5oX3NvdXJjZSwgc3JjX2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGV0aF9oZHJfcC0+aF9kZXN0LCBkZXN0X2FkZHIsIEVUSF9BTEVOKTsKKwkJaWYgKGxlbikKKwkJCWV0aF9oZHJfcC0+aF9wcm90byA9IGh0b25zKGxlbik7CisJfQorCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOworfQorCisvKiBDaGVjayBmb3IgZnJhZ21lbnRlZCBkYXRhIGluIHByaXYtPnJ4X3NrYi4gSWYgdGhlIHBhY2tldCB3YXMgbm8gZnJhZ21lbnQKKyAgIG9yIGl0IHdhcyB0aGUgbGFzdCBvZiBhIGZyYWdtZW50IHNldCBhIHNrYiBjb250YWluaW5nIHRoZSB3aG9sZSBwYWNrZXQKKyAgIGlzIHJldHVybmVkIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIE90aGVyd2lzZSB3ZSBnZXQgTlVMTCBhbmQgYXJlCisgICBkb25lIGFuZCB0aGUgcGFja2V0IGlzIGVpdGhlciBzdG9yZWQgaW5zaWRlIHRoZSBmcmFnbWVudCBidWZmZXIKKyAgIG9yIHRocm93biBhd2F5LiAgRXZlcnkgcmV0dXJuZWQgc2tiIHN0YXJ0cyB3aXRoIHRoZSBpZWVlODAyXzExIGhlYWRlcgorICAgYW5kIGNvbnRhaW5zIF9ub18gRkNTIGF0IHRoZSBlbmQgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXQ3Nl9jaGVja19mb3JfcnhfZnJhZ3Moc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOworCXN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmID0gKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaTgwMl8xMV9oZHIgPQorCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWYtPnBhY2tldDsKKwkvKiBzZXFfY3RybCwgZnJhZ21lbnRfbnVtYmVyLCBzZXF1ZW5jZSBudW1iZXIgb2YgbmV3IHBhY2tldCAqLworCXUxNiBzY3RsID0gbGUxNl90b19jcHUoaTgwMl8xMV9oZHItPnNlcV9jdGwpOworCXUxNiBmcmFnbnIgPSBzY3RsICYgMHhmOworCXUxNiBzZXFuciA9IHNjdGwgPj4gNDsKKwl1MTYgZnJhbWVfY3RsID0gbGUxNl90b19jcHUoaTgwMl8xMV9oZHItPmZyYW1lX2N0bCk7CisKKwkvKiBMZW5ndGggaW5jbHVkaW5nIHRoZSBJRUVFODAyLjExIGhlYWRlciwgYnV0IHdpdGhvdXQgdGhlIHRyYWlsaW5nCisJICogRkNTIGFuZCB3aXRob3V0IHRoZSBBdG1lbCBSeCBoZWFkZXIgKi8KKwlpbnQgbGVuZ3RoID0gbGUxNl90b19jcHUoYnVmLT53bGVuZ3RoKSAtIElFRUU4MDIxMV9GQ1NfTEVOOworCisJLyogd2hlcmUgZG9lcyB0aGUgZGF0YSBwYXlsb2FkIHN0YXJ0IGluIHNrYi0+ZGF0YSA/ICovCisJdTggKmRhdGEgPSBpODAyXzExX2hkci0+cGF5bG9hZDsKKworCS8qIGxlbmd0aCBvZiBwYXlsb2FkLCBleGNsLiB0aGUgdHJhaWxpbmcgRkNTICovCisJaW50IGRhdGFfbGVuID0gbGVuZ3RoIC0gSUVFRTgwMjExXzNBRERSX0xFTjsKKworCWludCBpOworCXN0cnVjdCByeF9kYXRhX2J1ZiAqYnB0ciwgKm9wdHI7CisJdW5zaWduZWQgbG9uZyBvbGRlc3QgPSB+MFVMOworCisJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLAorCQkgIiVzOiByeCBkYXRhIGZyYW1lX2N0bCAlMDR4IGFkZHIyICVzIHNlcS9mcmFnICVkLyVkICIKKwkJICJsZW5ndGggJWQgZGF0YSAlZDogJXMgLi4uIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCBmcmFtZV9jdGwsCisJCSBtYWMyc3RyKGk4MDJfMTFfaGRyLT5hZGRyMiksIHNlcW5yLCBmcmFnbnIsIGxlbmd0aCwgZGF0YV9sZW4sCisJCSBoZXgyc3RyKGRhdGEsIDMyKSk7CisKKwlhdDc2X2RiZyhEQkdfUlhfRlJBR1NfU0tCLCAiJXM6IGluY29taW5nIHNrYjogaGVhZCAlcCBkYXRhICVwICIKKwkJICJ0YWlsICVwIGVuZCAlcCBsZW4gJWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsIHNrYi0+aGVhZCwKKwkJIHNrYi0+ZGF0YSwgc2tiX3RhaWxfcG9pbnRlcihza2IpLCBza2JfZW5kX3BvaW50ZXIoc2tiKSwKKwkJIHNrYi0+bGVuKTsKKworCWlmIChkYXRhX2xlbiA8IDApIHsKKwkJLyogbWFrZSBzdXJlIGRhdGEgc3RhcnRzIGluIHRoZSBidWZmZXIgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRhdGEgZnJhbWUgdG9vIHNob3J0XG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJV0FSTl9PTihsZW5ndGggPD0gQVQ3Nl9SWF9IRFJMRU4pOworCWlmIChsZW5ndGggPD0gQVQ3Nl9SWF9IRFJMRU4pCisJCXJldHVybiBOVUxMOworCisJLyogcmVtb3ZlIHRoZSBhdDc2X3J4X2J1ZmZlciBoZWFkZXIgLSB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUgKi8KKwkvKiB3ZSBuZWVkIHRoZSBJRUVFODAyLjExIGhlYWRlciAoZm9yIHRoZSBhZGRyZXNzZXMpIGlmIHRoaXMgcGFja2V0CisJICAgaXMgdGhlIGZpcnN0IG9mIGEgY2hhaW4gKi8KKwlza2JfcHVsbChza2IsIEFUNzZfUlhfSERSTEVOKTsKKworCS8qIHJlbW92ZSBGQ1MgYXQgZW5kICovCisJc2tiX3RyaW0oc2tiLCBsZW5ndGgpOworCisJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTX1NLQiwgIiVzOiB0cmltbWVkIHNrYjogaGVhZCAlcCBkYXRhICVwIHRhaWwgJXAgIgorCQkgImVuZCAlcCBsZW4gJWQgZGF0YSAlcCBkYXRhX2xlbiAlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIHNrYi0+aGVhZCwgc2tiLT5kYXRhLCBza2JfdGFpbF9wb2ludGVyKHNrYiksCisJCSBza2JfZW5kX3BvaW50ZXIoc2tiKSwgc2tiLT5sZW4sIGRhdGEsIGRhdGFfbGVuKTsKKworCWlmIChmcmFnbnIgPT0gMCAmJiAhKGZyYW1lX2N0bCAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpIHsKKwkJLyogdW5mcmFnbWVudGVkIHBhY2tldCByZWNlaXZlZCAqLworCQkvKiBVc2UgYSBuZXcgc2tiIGZvciB0aGUgbmV4dCByZWNlaXZlICovCisJCXByaXYtPnJ4X3NrYiA9IE5VTEw7CisJCWF0NzZfZGJnKERCR19SWF9GUkFHUywgIiVzOiB1bmZyYWdtZW50ZWQiLCBwcml2LT5uZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gc2tiOworCX0KKworCS8qIGxvb2sgaWYgd2UndmUgZ290IGEgY2hhaW4gZm9yIHRoZSBzZW5kZXIgYWRkcmVzcy4KKwkgICBhZnRlcndhcmRzIG9wdHIgcG9pbnRzIHRvIGZpcnN0IGZyZWUgb3IgdGhlIG9sZGVzdCBlbnRyeSwKKwkgICBvciwgaWYgaSA8IE5SX1JYX0RBVEFfQlVGLCBicHRyIHBvaW50cyB0byB0aGUgZW50cnkgZm9yIHRoZQorCSAgIHNlbmRlciBhZGRyZXNzICovCisJLyogZGV0ZXJtaW5pbmcgdGhlIG9sZGVzdCBlbnRyeSBkb2Vzbid0IGNvcGUgd2l0aCBqaWZmaWVzIHdyYXBwaW5nCisJICAgYnV0IEkgZG9uJ3QgY2FyZSB0byBkZWxldGUgYSB5b3VuZyBlbnRyeSBhdCB0aGVzZSByYXJlIG1vbWVudHMgLi4uICovCisKKwlicHRyID0gcHJpdi0+cnhfZGF0YTsKKwlvcHRyID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfUlhfREFUQV9CVUY7IGkrKywgYnB0cisrKSB7CisJCWlmICghYnB0ci0+c2tiKSB7CisJCQlvcHRyID0gYnB0cjsKKwkJCW9sZGVzdCA9IDBVTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoaTgwMl8xMV9oZHItPmFkZHIyLCBicHRyLT5zZW5kZXIpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFvcHRyKSB7CisJCQlvcHRyID0gYnB0cjsKKwkJCW9sZGVzdCA9IGJwdHItPmxhc3Rfcng7CisJCX0gZWxzZSBpZiAoYnB0ci0+bGFzdF9yeCA8IG9sZGVzdCkKKwkJCW9wdHIgPSBicHRyOworCX0KKworCWlmIChpIDwgTlJfUlhfREFUQV9CVUYpIHsKKworCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsICIlczogJWQuIGNhY2hlZW50cnkgKHNlcS9mcmFnID0gJWQvJWQpICIKKwkJCSAibWF0Y2hlZCBzZW5kZXIgYWRkciIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBpLCBicHRyLT5zZXFuciwgYnB0ci0+ZnJhZ25yKTsKKworCQkvKiBicHRyIHBvaW50cyB0byBhbiBlbnRyeSBmb3IgdGhlIHNlbmRlciBhZGRyZXNzICovCisJCWlmIChicHRyLT5zZXFuciA9PSBzZXFucikgeworCQkJaW50IGxlZnQ7CisJCQkvKiB0aGUgZnJhZ21lbnQgaGFzIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciAqLworCQkJaWYgKCgoYnB0ci0+ZnJhZ25yICsgMSkgJiAweGYpICE9IGZyYWducikgeworCQkJCS8qIHdyb25nIGZyYWdtZW50IG51bWJlciAtPiBpZ25vcmUgaXQgKi8KKwkJCQkvKiBpcyAmIDB4ZiBuZWNlc3NhcnkgYWJvdmUgPz8/ICovCisJCQkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLAorCQkJCQkgIiVzOiBmcmFnIG5yIG1pc21hdGNoOiAlZCArIDEgIT0gJWQiLAorCQkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBicHRyLT5mcmFnbnIsCisJCQkJCSBmcmFnbnIpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJYnB0ci0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQkvKiB0aGUgbmV4dCBmb2xsb3dpbmcgZnJhZ21lbnQgbnVtYmVyIC0+CisJCQkgICBhZGQgdGhlIGRhdGEgYXQgdGhlIGVuZCAqLworCisJCQkvKiBmb3IgdGVzdCBvbmx5ID8/PyAqLworCQkJbGVmdCA9IHNrYl90YWlscm9vbShicHRyLT5za2IpOworCQkJaWYgKGxlZnQgPCBkYXRhX2xlbikKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICIlczogb25seSAlZCBieXRlIGZyZWUgKG5lZWQgJWQpXG4iLAorCQkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGxlZnQsIGRhdGFfbGVuKTsKKwkJCWVsc2UKKwkJCQltZW1jcHkoc2tiX3B1dChicHRyLT5za2IsIGRhdGFfbGVuKSwgZGF0YSwKKwkJCQkgICAgICAgZGF0YV9sZW4pOworCisJCQlicHRyLT5mcmFnbnIgPSBmcmFnbnI7CisJCQlpZiAoZnJhbWVfY3RsICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKQorCQkJCXJldHVybiBOVUxMOworCisJCQkvKiB0aGlzIHdhcyB0aGUgbGFzdCBmcmFnbWVudCAtIHNlbmQgaXQgKi8KKwkJCXNrYiA9IGJwdHItPnNrYjsKKwkJCWJwdHItPnNrYiA9IE5VTEw7CS8qIGZyZWUgdGhlIGVudHJ5ICovCisJCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsICIlczogbGFzdCBmcmFnIG9mIHNlcSAlZCIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgc2VxbnIpOworCQkJcmV0dXJuIHNrYjsKKwkJfQorCisJCS8qIGdvdCBhbm90aGVyIHNlcXVlbmNlIG51bWJlciAqLworCQlpZiAoZnJhZ25yID09IDApIHsKKwkJCS8qIGl0J3MgdGhlIHN0YXJ0IG9mIGEgbmV3IGNoYWluIC0gcmVwbGFjZSB0aGUKKwkJCSAgIG9sZCBvbmUgYnkgdGhpcyAqLworCQkJLyogYnB0ci0+c2VuZGVyIGhhcyB0aGUgY29ycmVjdCB2YWx1ZSBhbHJlYWR5ICovCisJCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsCisJCQkJICIlczogc3RhcnQgb2YgbmV3IHNlcSAlZCwgcmVtb3Zpbmcgb2xkIHNlcSAlZCIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgc2VxbnIsIGJwdHItPnNlcW5yKTsKKwkJCWJwdHItPnNlcW5yID0gc2VxbnI7CisJCQlicHRyLT5mcmFnbnIgPSAwOworCQkJYnB0ci0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQkvKiBzd2FwIGJwdHItPnNrYiBhbmQgcHJpdi0+cnhfc2tiICovCisJCQlza2IgPSBicHRyLT5za2I7CisJCQlicHRyLT5za2IgPSBwcml2LT5yeF9za2I7CisJCQlwcml2LT5yeF9za2IgPSBza2I7CisJCX0gZWxzZSB7CisJCQkvKiBpdCBmcm9tIHRoZSBtaWRkbGUgb2YgYSBuZXcgY2hhaW4gLT4KKwkJCSAgIGRlbGV0ZSB0aGUgb2xkIGVudHJ5IGFuZCBza2lwIHRoZSBuZXcgb25lICovCisJCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsCisJCQkJICIlczogbWlkZGxlIG9mIG5ldyBzZXEgJWQgKCVkKSAiCisJCQkJICJyZW1vdmluZyBvbGQgc2VxICVkIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBzZXFuciwgZnJhZ25yLAorCQkJCSBicHRyLT5zZXFucik7CisJCQlkZXZfa2ZyZWVfc2tiKGJwdHItPnNrYik7CisJCQlicHRyLT5za2IgPSBOVUxMOworCQl9CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIGlmIHdlIGRpZG4ndCBmaW5kIGEgY2hhaW4gZm9yIHRoZSBzZW5kZXIgYWRkcmVzcywgb3B0cgorCSAgIHBvaW50cyBlaXRoZXIgdG8gdGhlIGZpcnN0IGZyZWUgb3IgdGhlIG9sZGVzdCBlbnRyeSAqLworCisJaWYgKGZyYWduciAhPSAwKSB7CisJCS8qIHRoaXMgaXMgbm90IHRoZSBiZWdpbiBvZiBhIGZyYWdtZW50IGNoYWluIC4uLiAqLworCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsCisJCQkgIiVzOiBubyBjaGFpbiBmb3Igbm9uLWZpcnN0IGZyYWdtZW50ICglZCkiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgZnJhZ25yKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJQlVHX09OKCFvcHRyKTsKKwlpZiAob3B0ci0+c2tiKSB7CisJCS8qIHN3YXAgdGhlIHNrYidzICovCisJCXNrYiA9IG9wdHItPnNrYjsKKwkJb3B0ci0+c2tiID0gcHJpdi0+cnhfc2tiOworCQlwcml2LT5yeF9za2IgPSBza2I7CisKKwkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLAorCQkJICIlczogZnJlZSBvbGQgY29udGVudHM6IHNlbmRlciAlcyBzZXEvZnJhZyAlZC8lZCIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKG9wdHItPnNlbmRlciksCisJCQkgb3B0ci0+c2VxbnIsIG9wdHItPmZyYWducik7CisKKwl9IGVsc2UgeworCQkvKiB0YWtlIHRoZSBza2IgZnJvbSBwcml2LT5yeF9za2IgKi8KKwkJb3B0ci0+c2tiID0gcHJpdi0+cnhfc2tiOworCQkvKiBsZXQgYXQ3Nl9zdWJtaXRfcnhfdXJiKCkgYWxsb2NhdGUgYSBuZXcgc2tiICovCisJCXByaXYtPnJ4X3NrYiA9IE5VTEw7CisKKwkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLCAiJXM6IHVzZSBhIGZyZWUgZW50cnkiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSk7CisJfQorCW1lbWNweShvcHRyLT5zZW5kZXIsIGk4MDJfMTFfaGRyLT5hZGRyMiwgRVRIX0FMRU4pOworCW9wdHItPnNlcW5yID0gc2VxbnI7CisJb3B0ci0+ZnJhZ25yID0gMDsKKwlvcHRyLT5sYXN0X3J4ID0gamlmZmllczsKKworCXJldHVybiBOVUxMOworfQorCisvKiBSeCBpbnRlcnJ1cHQ6IHdlIGV4cGVjdCB0aGUgY29tcGxldGUgZGF0YSBidWZmZXIgaW4gcHJpdi0+cnhfc2tiICovCitzdGF0aWMgdm9pZCBhdDc2X3J4X2RhdGEoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi0+bmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOworCXN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmID0gKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaTgwMl8xMV9oZHI7CisJaW50IGxlbmd0aCA9IGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCk7CisKKwlhdDc2X2RiZyhEQkdfUlhfREFUQSwgIiVzIHJlY2VpdmVkIGRhdGEgcGFja2V0OiAlcyIsIG5ldGRldi0+bmFtZSwKKwkJIGhleDJzdHIoc2tiLT5kYXRhLCBBVDc2X1JYX0hEUkxFTikpOworCisJYXQ3Nl9kYmcoREJHX1JYX0RBVEFfQ09OVEVOVCwgInJ4IHBhY2tldDogJXMiLAorCQkgaGV4MnN0cihza2ItPmRhdGEgKyBBVDc2X1JYX0hEUkxFTiwgbGVuZ3RoKSk7CisKKwlza2IgPSBhdDc2X2NoZWNrX2Zvcl9yeF9mcmFncyhwcml2KTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJLyogQXRtZWwgaGVhZGVyIGFuZCB0aGUgRkNTIGFyZSBhbHJlYWR5IHJlbW92ZWQgKi8KKwlpODAyXzExX2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKKworCXNrYi0+ZGV2ID0gbmV0ZGV2OworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsJLyogVE9ETzogc2hvdWxkIGNoZWNrIENSQyAqLworCisJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGk4MDJfMTFfaGRyLT5hZGRyMSkpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoaTgwMl8xMV9oZHItPmFkZHIxLCBuZXRkZXYtPmJyb2FkY2FzdCkpCisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0JST0FEQ0FTVDsKKwkJZWxzZQorCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9NVUxUSUNBU1Q7CisJfSBlbHNlIGlmIChjb21wYXJlX2V0aGVyX2FkZHIoaTgwMl8xMV9oZHItPmFkZHIxLCBuZXRkZXYtPmRldl9hZGRyKSkKKwkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisKKwlhdDc2X2llZWU4MDIxMV90b19ldGgoc2tiLCBwcml2LT5pd19tb2RlKTsKKworCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJbmV0aWZfcngoc2tiKTsKKwlzdGF0cy0+cnhfcGFja2V0cysrOworCXN0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfbW9uaXRvcl9tb2RlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfcnhfcmFkaW90YXAgKnJ0OworCXU4ICpwYXlsb2FkOworCWludCBza2JsZW47CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtPm5ldGRldjsKKwlzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZiA9CisJICAgIChzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKilwcml2LT5yeF9za2ItPmRhdGE7CisJLyogbGVuZ3RoIGluY2x1ZGluZyB0aGUgSUVFRTgwMi4xMSBoZWFkZXIgYW5kIHRoZSB0cmFpbGluZyBGQ1MsCisJICAgYnV0IG5vdCBhdDc2X3J4X2J1ZmZlciAqLworCWludCBsZW5ndGggPSBsZTE2X3RvX2NwdShidWYtPndsZW5ndGgpOworCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT5yeF9za2I7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCisJaWYgKGxlbmd0aCA8IElFRUU4MDIxMV9GQ1NfTEVOKSB7CisJCS8qIGJ1ZmZlciBjb250YWlucyBubyBkYXRhICovCisJCWF0NzZfZGJnKERCR19NT05JVE9SX01PREUsCisJCQkgIiVzOiBNT05JVE9SIE1PREU6IHJ4IHNrYiB3aXRob3V0IGRhdGEiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlza2JsZW4gPSBzaXplb2Yoc3RydWN0IGF0NzZfcnhfcmFkaW90YXApICsgbGVuZ3RoOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihza2JsZW4pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE1PTklUT1IgTU9ERTogZGV2X2FsbG9jX3NrYiBmb3IgcmFkaW90YXAgIgorCQkgICAgICAgImhlYWRlciByZXR1cm5lZCBOVUxMXG4iLCBwcml2LT5uZXRkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc2tiX3B1dChza2IsIHNrYmxlbik7CisKKwlydCA9IChzdHJ1Y3QgYXQ3Nl9yeF9yYWRpb3RhcCAqKXNrYi0+ZGF0YTsKKwlwYXlsb2FkID0gc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBhdDc2X3J4X3JhZGlvdGFwKTsKKworCXJ0LT5ydF9oZHIuaXRfdmVyc2lvbiA9IDA7CisJcnQtPnJ0X2hkci5pdF9wYWQgPSAwOworCXJ0LT5ydF9oZHIuaXRfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBhdDc2X3J4X3JhZGlvdGFwKSk7CisJcnQtPnJ0X2hkci5pdF9wcmVzZW50ID0gY3B1X3RvX2xlMzIoQVQ3Nl9SWF9SQURJT1RBUF9QUkVTRU5UKTsKKworCXJ0LT5ydF90c2Z0ID0gY3B1X3RvX2xlNjQobGUzMl90b19jcHUoYnVmLT5yeF90aW1lKSk7CisJcnQtPnJ0X3JhdGUgPSBod19yYXRlc1tidWYtPnJ4X3JhdGVdICYgKH4weDgwKTsKKwlydC0+cnRfc2lnbmFsID0gYnVmLT5yc3NpOworCXJ0LT5ydF9ub2lzZSA9IGJ1Zi0+bm9pc2VfbGV2ZWw7CisJcnQtPnJ0X2ZsYWdzID0gSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTOworCWlmIChidWYtPmZyYWdtZW50YXRpb24pCisJCXJ0LT5ydF9mbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9GUkFHOworCisJbWVtY3B5KHBheWxvYWQsIGJ1Zi0+cGFja2V0LCBsZW5ndGgpOworCXNrYi0+ZGV2ID0gbmV0ZGV2OworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CisKKwluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCW5ldGlmX3J4KHNrYik7CisJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOworfQorCisvKiBDaGVjayBpZiB3ZSBzcHkgb24gdGhlIHNlbmRlciBhZGRyZXNzIGluIGJ1ZiBhbmQgdXBkYXRlIHN0YXRzICovCitzdGF0aWMgdm9pZCBhdDc2X2l3c3B5X3VwZGF0ZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmhkciA9CisJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWJ1Zi0+cGFja2V0OworCXN0cnVjdCBpd19xdWFsaXR5IHF1YWw7CisKKwkvKiBXZSBjYW4gb25seSBzZXQgdGhlIGxldmVsIGhlcmUgKi8KKwlxdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfSU5WQUxJRCB8IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKKwlxdWFsLmxldmVsID0gMDsKKwlxdWFsLm5vaXNlID0gMDsKKwlhdDc2X2NhbGNfbGV2ZWwocHJpdiwgYnVmLCAmcXVhbCk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisKKwlpZiAocHJpdi0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApCisJCXdpcmVsZXNzX3NweV91cGRhdGUocHJpdi0+bmV0ZGV2LCBoZHItPmFkZHIyLCAmcXVhbCk7CisKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKilwYXJhbTsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LT5uZXRkZXY7CisJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWY7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmk4MDJfMTFfaGRyOworCXUxNiBmcmFtZV9jdGw7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkgeworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkZXZpY2UgdW5wbHVnZ2VkIik7CisJCWlmICh1cmIpCisJCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJ1cmIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFwcml2LT5yeF9za2IgfHwgIW5ldGRldiB8fCAhcHJpdi0+cnhfc2tiLT5kYXRhKQorCQlyZXR1cm47CisKKwlidWYgPSAoc3RydWN0IGF0NzZfcnhfYnVmZmVyICopcHJpdi0+cnhfc2tiLT5kYXRhOworCisJaTgwMl8xMV9oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWYtPnBhY2tldDsKKworCWZyYW1lX2N0bCA9IGxlMTZfdG9fY3B1KGk4MDJfMTFfaGRyLT5mcmFtZV9jdGwpOworCisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQgJiYgdXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisJCQlhdDc2X2RiZyhEQkdfVVJCLAorCQkJCSAiJXMgJXM6IC0gbm9uemVybyBSeCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJCSBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUlhfQVRNRUxfSERSLAorCQkgIiVzOiByeCBmcmFtZTogcmF0ZSAlZCByc3NpICVkIG5vaXNlICVkIGxpbmsgJWQgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBidWYtPnJ4X3JhdGUsIGJ1Zi0+cnNzaSwgYnVmLT5ub2lzZV9sZXZlbCwKKwkJIGJ1Zi0+bGlua19xdWFsaXR5LCBoZXgyc3RyKGk4MDJfMTFfaGRyLCA0OCkpOworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQlhdDc2X3J4X21vbml0b3JfbW9kZShwcml2KTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHRoZXJlIGlzIGEgbmV3IGJzc2lkIGFyb3VuZCwgYWNjZXB0IGl0OiAqLworCWlmIChidWYtPm5ld2JzcyAmJiBwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKKwkJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAiJXM6IHJ4IG5ld2JzcyIsIG5ldGRldi0+bmFtZSk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfbmV3X2Jzcyk7CisJfQorCisJc3dpdGNoIChmcmFtZV9jdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6CisJCWF0NzZfcnhfZGF0YShwcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgorCQkvKiBqYWw6IFRPRE86IGZpbmQgb3V0IGlmIHdlIGNhbiB1cGRhdGUgaXdzcHkgYWxzbyBvbgorCQkgICBvdGhlciBmcmFtZXMgdGhhbiBtYW5hZ2VtZW50IChtaWdodCBkZXBlbmQgb24gdGhlCisJCSAgIHJhZGlvIGNoaXAgLyBmaXJtd2FyZSB2ZXJzaW9uICEpICovCisKKwkJYXQ3Nl9pd3NweV91cGRhdGUocHJpdiwgYnVmKTsKKworCQlhdDc2X3J4X21nbXQocHJpdiwgYnVmKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6CisJCWF0NzZfZGJnKERCR19SWF9DVFJMLCAiJXM6IGlnbm9yZWQgY3RybCBmcmFtZTogJTA0eCIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBmcmFtZV9jdGwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogaWdub3JpbmcgZnJhbWUgd2l0aCBmcmFtZWN0bCAweCUwNHhcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGZyYW1lX2N0bCk7CisJfQorZXhpdDoKKwlhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7Cit9CisKKy8qIExvYWQgZmlybXdhcmUgaW50byBrZXJuZWwgbWVtb3J5IGFuZCBwYXJzZSBpdCAqLworc3RhdGljIHN0cnVjdCBmd2VudHJ5ICphdDc2X2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCSAgZW51bSBib2FyZF90eXBlIGJvYXJkX3R5cGUpCit7CisJaW50IHJldDsKKwljaGFyICpzdHI7CisJc3RydWN0IGF0NzZfZndfaGVhZGVyICpmd2g7CisJc3RydWN0IGZ3ZW50cnkgKmZ3ZSA9ICZmaXJtd2FyZXNbYm9hcmRfdHlwZV07CisKKwltdXRleF9sb2NrKCZmd19tdXRleCk7CisKKwlpZiAoZndlLT5sb2FkZWQpIHsKKwkJYXQ3Nl9kYmcoREJHX0ZXLCAicmUtdXNpbmcgcHJldmlvdXNseSBsb2FkZWQgZnciKTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19GVywgImRvd25sb2FkaW5nIGZpcm13YXJlICVzIiwgZndlLT5md25hbWUpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3ZS0+ZncsIGZ3ZS0+ZnduYW1lLCAmdWRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LCAiZmlybXdhcmUgJXMgbm90IGZvdW5kIVxuIiwKKwkJCSAgIGZ3ZS0+ZnduYW1lKTsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJ5b3UgbWF5IG5lZWQgdG8gZG93bmxvYWQgdGhlIGZpcm13YXJlIGZyb20gIgorCQkJICAgImh0dHA6Ly9kZXZlbG9wZXIuYmVybGlvcy5kZS9wcm9qZWN0cy9hdDc2YzUwM2EvIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfRlcsICJnb3QgaXQuIik7CisJZndoID0gKHN0cnVjdCBhdDc2X2Z3X2hlYWRlciAqKShmd2UtPmZ3LT5kYXRhKTsKKworCWlmIChmd2UtPmZ3LT5zaXplIDw9IHNpemVvZigqZndoKSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImZpcm13YXJlIGlzIHRvbyBzaG9ydCAoMHglengpXG4iLCBmd2UtPmZ3LT5zaXplKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIENSQyBjdXJyZW50bHkgbm90IGNoZWNrZWQgKi8KKwlmd2UtPmJvYXJkX3R5cGUgPSBsZTMyX3RvX2NwdShmd2gtPmJvYXJkX3R5cGUpOworCWlmIChmd2UtPmJvYXJkX3R5cGUgIT0gYm9hcmRfdHlwZSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImJvYXJkIHR5cGUgbWlzbWF0Y2gsIHJlcXVlc3RlZCAldSwgZ290ICV1XG4iLAorCQkJICAgYm9hcmRfdHlwZSwgZndlLT5ib2FyZF90eXBlKTsKKwkJZ290byBleGl0OworCX0KKworCWZ3ZS0+ZndfdmVyc2lvbi5tYWpvciA9IGZ3aC0+bWFqb3I7CisJZndlLT5md192ZXJzaW9uLm1pbm9yID0gZndoLT5taW5vcjsKKwlmd2UtPmZ3X3ZlcnNpb24ucGF0Y2ggPSBmd2gtPnBhdGNoOworCWZ3ZS0+ZndfdmVyc2lvbi5idWlsZCA9IGZ3aC0+YnVpbGQ7CisKKwlzdHIgPSAoY2hhciAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+c3RyX29mZnNldCk7CisJZndlLT5pbnRmdyA9ICh1OCAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X29mZnNldCk7CisJZndlLT5pbnRmd19zaXplID0gbGUzMl90b19jcHUoZndoLT5pbnRfZndfbGVuKTsKKwlmd2UtPmV4dGZ3ID0gKHU4ICopZndoICsgbGUzMl90b19jcHUoZndoLT5leHRfZndfb2Zmc2V0KTsKKwlmd2UtPmV4dGZ3X3NpemUgPSBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19sZW4pOworCisJZndlLT5sb2FkZWQgPSAxOworCisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmdWRldi0+ZGV2LAorCQkgICAidXNpbmcgZmlybXdhcmUgJXMgKHZlcnNpb24gJWQuJWQuJWQtJWQpXG4iLAorCQkgICBmd2UtPmZ3bmFtZSwgZndoLT5tYWpvciwgZndoLT5taW5vciwgZndoLT5wYXRjaCwgZndoLT5idWlsZCk7CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJib2FyZCAldSwgaW50ICVkOiVkLCBleHQgJWQ6JWQiLCBib2FyZF90eXBlLAorCQkgbGUzMl90b19jcHUoZndoLT5pbnRfZndfb2Zmc2V0KSwgbGUzMl90b19jcHUoZndoLT5pbnRfZndfbGVuKSwKKwkJIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X29mZnNldCksIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X2xlbikpOworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImZpcm13YXJlIGlkICVzIiwgc3RyKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmZ3X211dGV4KTsKKworCWlmIChmd2UtPmxvYWRlZCkKKwkJcmV0dXJuIGZ3ZTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCisvKiBBbGxvY2F0ZSBuZXR3b3JrIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBwcml2YXRlIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ3Nl9wcml2ICphdDc2X2FsbG9jX25ld19kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2OworCWludCBpOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhdDc2X3ByaXYpKTsKKwlpZiAoIW5ldGRldikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcHJpdi0+dWRldiA9IHVkZXY7CisJcHJpdi0+bmV0ZGV2ID0gbmV0ZGV2OworCisJbXV0ZXhfaW5pdCgmcHJpdi0+bXR4KTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfYXNzb2NfZG9uZSwgYXQ3Nl93b3JrX2Fzc29jX2RvbmUpOworCUlOSVRfV09SSygmcHJpdi0+d29ya19qb2luLCBhdDc2X3dvcmtfam9pbik7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX25ld19ic3MsIGF0NzZfd29ya19uZXdfYnNzKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfc3RhcnRfc2NhbiwgYXQ3Nl93b3JrX3N0YXJ0X3NjYW4pOworCUlOSVRfV09SSygmcHJpdi0+d29ya19zZXRfcHJvbWlzYywgYXQ3Nl93b3JrX3NldF9wcm9taXNjKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfc3VibWl0X3J4LCBhdDc2X3dvcmtfc3VibWl0X3J4KTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZHdvcmtfcmVzdGFydCwgYXQ3Nl9kd29ya19yZXN0YXJ0KTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4sIGF0NzZfZHdvcmtfZ2V0X3NjYW4pOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29ya19iZWFjb24sIGF0NzZfZHdvcmtfYmVhY29uKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZHdvcmtfYXV0aCwgYXQ3Nl9kd29ya19hdXRoKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZHdvcmtfYXNzb2MsIGF0NzZfZHdvcmtfYXNzb2MpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPm1nbXRfc3BpbmxvY2spOworCXByaXYtPm5leHRfbWdtdF9idWxrID0gTlVMTDsKKwlwcml2LT5tYWNfc3RhdGUgPSBNQUNfSU5JVDsKKworCS8qIGluaXRpYWxpemUgZW1wdHkgQlNTIGxpc3QgKi8KKwlwcml2LT5jdXJyX2JzcyA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2spOworCisJaW5pdF90aW1lcigmcHJpdi0+YnNzX2xpc3RfdGltZXIpOworCXByaXYtPmJzc19saXN0X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCXByaXYtPmJzc19saXN0X3RpbWVyLmZ1bmN0aW9uID0gYXQ3Nl9ic3NfbGlzdF90aW1lb3V0OworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnNweV9zcGlubG9jayk7CisKKwkvKiBtYXJrIGFsbCByeCBkYXRhIGVudHJpZXMgYXMgdW51c2VkICovCisJZm9yIChpID0gMDsgaSA8IE5SX1JYX0RBVEFfQlVGOyBpKyspCisJCXByaXYtPnJ4X2RhdGFbaV0uc2tiID0gTlVMTDsKKworCXByaXYtPnJ4X3Rhc2tsZXQuZnVuYyA9IGF0NzZfcnhfdGFza2xldDsKKwlwcml2LT5yeF90YXNrbGV0LmRhdGEgPSAwOworCisJcHJpdi0+cG1fbW9kZSA9IEFUNzZfUE1fT0ZGOworCXByaXYtPnBtX3BlcmlvZCA9IDA7CisKKwlyZXR1cm4gcHJpdjsKK30KKworc3RhdGljIGludCBhdDc2X2FsbG9jX3VyYnMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludCwgKmVwX2luLCAqZXBfb3V0OworCWludCBpOworCWludCBidWZmZXJfc2l6ZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRU5URVIiLCBfX2Z1bmNfXyk7CisKKwlhdDc2X2RiZyhEQkdfVVJCLCAiJXM6IE51bUVuZHBvaW50cyAlZCAiLCBfX2Z1bmNfXywKKwkJIGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJOdW1FbmRwb2ludHMpOworCisJZXBfaW4gPSBOVUxMOworCWVwX291dCA9IE5VTEw7CisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJYXQ3Nl9kYmcoREJHX1VSQiwgIiVzOiAlZC4gZW5kcG9pbnQ6IGFkZHIgMHgleCBhdHRyIDB4JXgiLAorCQkJIF9fZnVuY19fLCBpLCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcywKKwkJCSBlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzKTsKKworCQlpZiAoIWVwX2luICYmIHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkKKwkJCWVwX2luID0gZW5kcG9pbnQ7CisKKwkJaWYgKCFlcF9vdXQgJiYgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KGVuZHBvaW50KSkKKwkJCWVwX291dCA9IGVuZHBvaW50OworCX0KKworCWlmICghZXBfaW4gfHwgIWVwX291dCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiYnVsayBlbmRwb2ludHMgbWlzc2luZ1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcHJpdi0+cnhfcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBlcF9pbi0+YkVuZHBvaW50QWRkcmVzcyk7CisJcHJpdi0+dHhfcGlwZSA9IHVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBlcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MpOworCisJcHJpdi0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlwcml2LT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+cnhfdXJiIHx8ICFwcml2LT50eF91cmIpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFVSQlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJ1ZmZlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdDc2X3R4X2J1ZmZlcikgKyBNQVhfUEFERElOR19TSVpFOworCXByaXYtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+YnVsa19vdXRfYnVmZmVyKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJjYW5ub3QgYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVYSVQiLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgYW5kIGluaXRpYWxpemUgdGhlIGhhcmR3YXJlICovCitzdGF0aWMgaW50IGF0NzZfaW5pdF9uZXdfZGV2aWNlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi0+bmV0ZGV2OworCWludCByZXQ7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgKi8KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIlVTQiBpbnRlcmZhY2U6ICVkIGVuZHBvaW50cyIsCisJCSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMpOworCisJcmV0ID0gYXQ3Nl9hbGxvY191cmJzKHByaXYsIGludGVyZmFjZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXhpdDsKKworCS8qIE1BQyBhZGRyZXNzICovCisJcmV0ID0gYXQ3Nl9nZXRfaHdfY29uZmlnKHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJjYW5ub3QgZ2V0IE1BQyBhZGRyZXNzXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCXByaXYtPmRvbWFpbiA9IGF0NzZfZ2V0X3JlZ19kb21haW4ocHJpdi0+cmVndWxhdG9yeV9kb21haW4pOworCS8qIGluaXQuIG5ldGRldi0+ZGV2X2FkZHIgKi8KKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCXByaXYtPmNoYW5uZWwgPSBERUZfQ0hBTk5FTDsKKwlwcml2LT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKKwlwcml2LT5ydHNfdGhyZXNob2xkID0gREVGX1JUU19USFJFU0hPTEQ7CisJcHJpdi0+ZnJhZ190aHJlc2hvbGQgPSBERUZfRlJBR19USFJFU0hPTEQ7CisJcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgPSBERUZfU0hPUlRfUkVUUllfTElNSVQ7CisJcHJpdi0+dHhyYXRlID0gVFhfUkFURV9BVVRPOworCXByaXYtPnByZWFtYmxlX3R5cGUgPSBQUkVBTUJMRV9UWVBFX0xPTkc7CisJcHJpdi0+YmVhY29uX3BlcmlvZCA9IDEwMDsKKwlwcml2LT5iZWFjb25zX2xhc3RfcXVhbCA9IGppZmZpZXM7CisJcHJpdi0+YXV0aF9tb2RlID0gV0xBTl9BVVRIX09QRU47CisJcHJpdi0+c2Nhbl9taW5fdGltZSA9IERFRl9TQ0FOX01JTl9USU1FOworCXByaXYtPnNjYW5fbWF4X3RpbWUgPSBERUZfU0NBTl9NQVhfVElNRTsKKwlwcml2LT5zY2FuX21vZGUgPSBTQ0FOX1RZUEVfQUNUSVZFOworCisJbmV0ZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsJLyogbm90IHlldCBvciBuZXZlciAqLworCW5ldGRldi0+b3BlbiA9IGF0NzZfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSBhdDc2X3N0b3A7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBhdDc2X2dldF9zdGF0czsKKwluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmF0NzZfZXRodG9vbF9vcHM7CisKKwkvKiBBZGQgcG9pbnRlcnMgdG8gZW5hYmxlIGl3c3B5IHN1cHBvcnQuICovCisJcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5zcHlfZGF0YTsKKwluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKKworCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYXQ3Nl90eDsKKwluZXRkZXYtPnR4X3RpbWVvdXQgPSBhdDc2X3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKKwluZXRkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmF0NzZfaGFuZGxlcl9kZWY7CisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhdDc2X3NldF9tdWx0aWNhc3Q7CisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBhdDc2X3NldF9tYWNfYWRkcmVzczsKKwlkZXZfYWxsb2NfbmFtZShuZXRkZXYsICJ3bGFuJWQiKTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihwcml2LT5uZXRkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCByZWdpc3RlciBuZXRkZXZpY2UgKHN0YXR1cyAlZCkhXG4iLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCXByaXYtPm5ldGRldl9yZWdpc3RlcmVkID0gMTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBVU0IgJXMsIE1BQyAlcywgZmlybXdhcmUgJWQuJWQuJWQtJWRcbiIsCisJICAgICAgIG5ldGRldi0+bmFtZSwgaW50ZXJmYWNlLT5kZXYuYnVzX2lkLCBtYWMyc3RyKHByaXYtPm1hY19hZGRyKSwKKwkgICAgICAgcHJpdi0+ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0+ZndfdmVyc2lvbi5taW5vciwKKwkgICAgICAgcHJpdi0+ZndfdmVyc2lvbi5wYXRjaCwgcHJpdi0+ZndfdmVyc2lvbi5idWlsZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ3VsYXRvcnkgZG9tYWluIDB4JTAyeDogJXNcbiIsIG5ldGRldi0+bmFtZSwKKwkgICAgICAgcHJpdi0+cmVndWxhdG9yeV9kb21haW4sIHByaXYtPmRvbWFpbi0+bmFtZSk7CisKKwkvKiB3ZSBsZXQgdGhpcyB0aW1lciBydW4gdGhlIHdob2xlIHRpbWUgdGhpcyBkcml2ZXIgaW5zdGFuY2UgbGl2ZXMgKi8KKwltb2RfdGltZXIoJnByaXYtPmJzc19saXN0X3RpbWVyLCBqaWZmaWVzICsgQlNTX0xJU1RfVElNRU9VVCk7CisKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kZWxldGVfZGV2aWNlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCS8qIFRoZSBkZXZpY2UgaXMgZ29uZSwgZG9uJ3QgYm90aGVyIHR1cm5pbmcgaXQgb2ZmICovCisJcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCA9IDE7CisKKwlpZiAocHJpdi0+bmV0ZGV2X3JlZ2lzdGVyZWQpCisJCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPm5ldGRldik7CisKKwkvKiBhc3N1bWluZyB3ZSB1c2VkIGtldmVudGQsIGl0IG11c3QgcXVpZXNjZSB0b28gKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJa2ZyZWUocHJpdi0+YnVsa19vdXRfYnVmZmVyKTsKKworCWlmIChwcml2LT50eF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHByaXYtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwcml2LT50eF91cmIpOworCX0KKwlpZiAocHJpdi0+cnhfdXJiKSB7CisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIocHJpdi0+cnhfdXJiKTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiB1bmxpbmtlZCB1cmJzIiwgX19mdW5jX18pOworCisJaWYgKHByaXYtPnJ4X3NrYikKKwkJa2ZyZWVfc2tiKHByaXYtPnJ4X3NrYik7CisKKwlhdDc2X2ZyZWVfYnNzX2xpc3QocHJpdik7CisJZGVsX3RpbWVyX3N5bmMoJnByaXYtPmJzc19saXN0X3RpbWVyKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2Nhbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYmVhY29uKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYyk7CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQpCisJCWF0NzZfaXdldmVudF9ic3NfZGlzY29ubmVjdChwcml2LT5uZXRkZXYpOworCisJZm9yIChpID0gMDsgaSA8IE5SX1JYX0RBVEFfQlVGOyBpKyspCisJCWlmIChwcml2LT5yeF9kYXRhW2ldLnNrYikgeworCQkJZGV2X2tmcmVlX3NrYihwcml2LT5yeF9kYXRhW2ldLnNrYik7CisJCQlwcml2LT5yeF9kYXRhW2ldLnNrYiA9IE5VTEw7CisJCX0KKwl1c2JfcHV0X2Rldihwcml2LT51ZGV2KTsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IGJlZm9yZSBmcmVlaW5nIHByaXYvbmV0ZGV2IiwgX19mdW5jX18pOworCWZyZWVfbmV0ZGV2KHByaXYtPm5ldGRldik7CS8qIHByaXYgaXMgaW4gbmV0ZGV2ICovCisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFWElUIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IGF0NzZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgZndlbnRyeSAqZndlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCBvcF9tb2RlOworCWludCBuZWVkX2V4dF9mdyA9IDA7CisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3djsKKwlpbnQgYm9hcmRfdHlwZSA9IChpbnQpaWQtPmRyaXZlcl9pbmZvOworCisJdWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisKKwkvKiBMb2FkIGZpcm13YXJlIGludG8ga2VybmVsIG1lbW9yeSAqLworCWZ3ZSA9IGF0NzZfbG9hZF9maXJtd2FyZSh1ZGV2LCBib2FyZF90eXBlKTsKKwlpZiAoIWZ3ZSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycm9yOworCX0KKworCW9wX21vZGUgPSBhdDc2X2dldF9vcF9tb2RlKHVkZXYpOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAib3Btb2RlICVkIiwgb3BfbW9kZSk7CisKKwkvKiB3ZSBnZXQgT1BNT0RFX05PTkUgd2l0aCAyLjQuMjMsIFNNQzI2NjJXLUFSID8/PworCSAgIHdlIGdldCAyMDQgd2l0aCAyLjQuMjMsIEZpYmVybGluZSBGTC1XTDI0MHUgKDUwNUErUkZNRDI5NTgpID8/PyAqLworCisJaWYgKG9wX21vZGUgPT0gT1BNT0RFX0hXX0NPTkZJR19NT0RFKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJjYW5ub3QgaGFuZGxlIGEgZGV2aWNlIGluIEhXX0NPTkZJR19NT0RFXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChvcF9tb2RlICE9IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gKKwkgICAgJiYgb3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNIKSB7CisJCS8qIGRvd25sb2FkIGludGVybmFsIGZpcm13YXJlIHBhcnQgKi8KKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgaW50ZXJuYWwgZmlybXdhcmVcbiIpOworCQlyZXQgPSBhdDc2X2xvYWRfaW50ZXJuYWxfZncodWRldiwgZndlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCQkgICAiZXJyb3IgJWQgZG93bmxvYWRpbmcgaW50ZXJuYWwgZmlybXdhcmVcbiIsCisJCQkJICAgcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJdXNiX3B1dF9kZXYodWRldik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSW50ZXJuYWwgZmlybXdhcmUgYWxyZWFkeSBpbnNpZGUgdGhlIGRldmljZS4gIEdldCBmaXJtd2FyZQorCSAqIHZlcnNpb24gdG8gdGVzdCBpZiBleHRlcm5hbCBmaXJtd2FyZSBpcyBsb2FkZWQuCisJICogVGhpcyB3b3JrcyBvbmx5IGZvciBuZXdlciBmaXJtd2FyZSwgZS5nLiB0aGUgSW50ZXJzaWwgMC45MC54CisJICogc2F5cyAiY29udHJvbCB0aW1lb3V0IG9uIGVwMGluIiBhbmQgc3Vic2VxdWVudAorCSAqIGF0NzZfZ2V0X29wX21vZGUoKSBmYWlsIHRvbyA6LSggKi8KKworCS8qIGlmIHZlcnNpb24gPj0gMC4xMDAueC55IG9yIGRldmljZSB3aXRoIGJ1aWx0LWluIGZsYXNoIHdlIGNhbgorCSAqIHF1ZXJ5IHRoZSBkZXZpY2UgZm9yIHRoZSBmdyB2ZXJzaW9uICovCisJaWYgKChmd2UtPmZ3X3ZlcnNpb24ubWFqb3IgPiAwIHx8IGZ3ZS0+ZndfdmVyc2lvbi5taW5vciA+PSAxMDApCisJICAgIHx8IChvcF9tb2RlID09IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gpKSB7CisJCXJldCA9IGF0NzZfZ2V0X21pYih1ZGV2LCBNSUJfRldfVkVSU0lPTiwgJmZ3diwgc2l6ZW9mKGZ3dikpOworCQlpZiAocmV0IDwgMCB8fCAoZnd2Lm1ham9yIHwgZnd2Lm1pbm9yKSA9PSAwKQorCQkJbmVlZF9leHRfZncgPSAxOworCX0gZWxzZQorCQkvKiBObyB3YXkgdG8gY2hlY2sgZmlybXdhcmUgdmVyc2lvbiwgcmVsb2FkIHRvIGJlIHN1cmUgKi8KKwkJbmVlZF9leHRfZncgPSAxOworCisJaWYgKG5lZWRfZXh0X2Z3KSB7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGV4dGVybmFsIGZpcm13YXJlXG4iKTsKKworCQlyZXQgPSBhdDc2X2xvYWRfZXh0ZXJuYWxfZncodWRldiwgZndlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogUmUtY2hlY2sgZmlybXdhcmUgdmVyc2lvbiAqLworCQlyZXQgPSBhdDc2X2dldF9taWIodWRldiwgTUlCX0ZXX1ZFUlNJT04sICZmd3YsIHNpemVvZihmd3YpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCQkgICAiZXJyb3IgJWQgZ2V0dGluZyBmaXJtd2FyZSB2ZXJzaW9uXG4iLCByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXByaXYgPSBhdDc2X2FsbG9jX25ld19kZXZpY2UodWRldik7CisJaWYgKCFwcml2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJU0VUX05FVERFVl9ERVYocHJpdi0+bmV0ZGV2LCAmaW50ZXJmYWNlLT5kZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBwcml2KTsKKworCW1lbWNweSgmcHJpdi0+ZndfdmVyc2lvbiwgJmZ3diwgc2l6ZW9mKHN0cnVjdCBtaWJfZndfdmVyc2lvbikpOworCXByaXYtPmJvYXJkX3R5cGUgPSBib2FyZF90eXBlOworCisJcmV0ID0gYXQ3Nl9pbml0X25ld19kZXZpY2UocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJYXQ3Nl9kZWxldGVfZGV2aWNlKHByaXYpOworCisJcmV0dXJuIHJldDsKKworZXJyb3I6CisJdXNiX3B1dF9kZXYodWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJLyogRGlzY29ubmVjdCBhZnRlciBsb2FkaW5nIGludGVybmFsIGZpcm13YXJlICovCisJaWYgKCFwcml2KQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogZGlzY29ubmVjdGluZ1xuIiwgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKwlhdDc2X2RlbGV0ZV9kZXZpY2UocHJpdik7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZpbnRlcmZhY2UtPmRldiwgImRpc2Nvbm5lY3RlZFxuIik7Cit9CisKKy8qIFN0cnVjdHVyZSBmb3IgcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0NzZfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLnByb2JlID0gYXQ3Nl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGF0NzZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkZXZfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDc2X21vZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgbG9hZGluZ1xuIik7CisKKwltdXRleF9pbml0KCZmd19tdXRleCk7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhdDc2X2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkgICAgICAgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCAoc3RhdHVzICVkKVxuIiwgcmVzdWx0KTsKKworCWxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSgiYXQ3Nl91c2ItdHgiLCAmbGVkdHJpZ190eCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0NzZfbW9kX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgdW5sb2FkaW5nXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmYXQ3Nl9kcml2ZXIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZpcm13YXJlcyk7IGkrKykgeworCQlpZiAoZmlybXdhcmVzW2ldLmZ3KQorCQkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZXNbaV0uZncpOworCX0KKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShsZWR0cmlnX3R4KTsKK30KKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdDc2X2RlYnVnLCBpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBsZXZlbCIpOworCittb2R1bGVfaW5pdChhdDc2X21vZF9pbml0KTsKK21vZHVsZV9leGl0KGF0NzZfbW9kX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJPbGl2ZXIgS3VydGggPG9rdUBtYXNxbWFpbC5jeD4iKTsKK01PRFVMRV9BVVRIT1IoIkpvZXJnIEFsYmVydCA8am9lcmcuYWxiZXJ0QGdteC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkFsZXggPGFsZXhAZm9vZ29kLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIk5pY2sgSm9uZXMiKTsKK01PRFVMRV9BVVRIT1IoIkJhbGludCBTZWViZXIgPG4wXzVwNG1fcDEzNDUzQGhvdG1haWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMGJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuaApAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE9saXZlciBLdXJ0aAorICoJICAgICAoYykgMjAwMywyMDA0IEpvZXJnIEFsYmVydCA8am9lcmcuYWxiZXJ0QGdteC5kZT4KKyAqCSAgICAgKGMpIDIwMDcgR3VpZG8gR3VlbnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBTb3VyY2Vmb3JnZSBkcml2ZXIKKyAqIHJlbGVhc2VkIGFuZCBtYWludGFpbmVkIGJ5IEF0bWVsOgorICoKKyAqICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2F0bWVsd2xhbmRyaXZlci8KKyAqCisgKiBBbHRob3VnaCB0aGUgY29kZSB3YXMgY29tcGxldGVseSByZS13cml0dGVuLAorICogaXQgd291bGQgaGF2ZSBiZWVuIGltcG9zc2libGUgd2l0aG91dCBBdG1lbCdzIGRlY2lzaW9uIHRvCisgKiByZWxlYXNlIGFuIE9wZW4gU291cmNlIGRyaXZlciAodW5mb3J0dW5hdGVseSB0aGUgZmlybXdhcmUgd2FzCisgKiBrZXB0IGJpbmFyeSBvbmx5KS4gVGhhbmtzIGZvciB0aGF0IGRlY2lzaW9uIHRvIEF0bWVsIQorICovCisKKyNpZm5kZWYgX0FUNzZfVVNCX0gKKyNkZWZpbmUgX0FUNzZfVVNCX0gKKworLyogQm9hcmQgdHlwZXMgKi8KK2VudW0gYm9hcmRfdHlwZSB7CisJQk9BUkRfNTAzX0lTTDM4NjEgPSAxLAorCUJPQVJEXzUwM19JU0wzODYzID0gMiwKKwlCT0FSRF81MDMgPSAzLAorCUJPQVJEXzUwM19BQ0MgPSA0LAorCUJPQVJEXzUwNSA9IDUsCisJQk9BUkRfNTA1XzI5NTggPSA2LAorCUJPQVJEXzUwNUEgPSA3LAorCUJPQVJEXzUwNUFNWCA9IDgKK307CisKKy8qIG91ciBwcml2YXRlIGlvY3RsJ3MgKi8KKy8qIHByZWFtYmxlIGxlbmd0aCAoMCAtIGxvbmcsIDEgLSBzaG9ydCwgMiAtIGF1dG8pICovCisjZGVmaW5lIEFUNzZfU0VUX1NIT1JUX1BSRUFNQkxFCQkoU0lPQ0lXRklSU1RQUklWICsgMCkKKyNkZWZpbmUgQVQ3Nl9HRVRfU0hPUlRfUFJFQU1CTEUJCShTSU9DSVdGSVJTVFBSSVYgKyAxKQorLyogd2hpY2ggZGVidWcgY2hhbm5lbHMgYXJlIGVuYWJsZWQgKi8KKyNkZWZpbmUgQVQ3Nl9TRVRfREVCVUcJCQkoU0lPQ0lXRklSU1RQUklWICsgMikKKyNkZWZpbmUgQVQ3Nl9HRVRfREVCVUcJCQkoU0lPQ0lXRklSU1RQUklWICsgMykKKy8qIHBvd2VyIHNhdmUgbW9kZSAoaW5jbC4gdGhlIEF0bWVsIHByb3ByaWV0YXJ5IHNtYXJ0IHNhdmUgbW9kZSkgKi8KKyNkZWZpbmUgQVQ3Nl9TRVRfUE9XRVJTQVZFX01PREUJCShTSU9DSVdGSVJTVFBSSVYgKyA0KQorI2RlZmluZSBBVDc2X0dFVF9QT1dFUlNBVkVfTU9ERQkJKFNJT0NJV0ZJUlNUUFJJViArIDUpCisvKiBtaW4gYW5kIG1heCBjaGFubmVsIHRpbWVzIGZvciBzY2FuICovCisjZGVmaW5lIEFUNzZfU0VUX1NDQU5fVElNRVMJCShTSU9DSVdGSVJTVFBSSVYgKyA2KQorI2RlZmluZSBBVDc2X0dFVF9TQ0FOX1RJTUVTCQkoU0lPQ0lXRklSU1RQUklWICsgNykKKy8qIHNjYW4gbW9kZSAoMCAtIGFjdGl2ZSwgMSAtIHBhc3NpdmUpICovCisjZGVmaW5lIEFUNzZfU0VUX1NDQU5fTU9ERQkJKFNJT0NJV0ZJUlNUUFJJViArIDgpCisjZGVmaW5lIEFUNzZfR0VUX1NDQU5fTU9ERQkJKFNJT0NJV0ZJUlNUUFJJViArIDkpCisKKyNkZWZpbmUgQ01EX1NUQVRVU19JRExFCQkJCTB4MDAKKyNkZWZpbmUgQ01EX1NUQVRVU19DT01QTEVURQkJCTB4MDEKKyNkZWZpbmUgQ01EX1NUQVRVU19VTktOT1dOCQkJMHgwMgorI2RlZmluZSBDTURfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSCQkweDAzCisjZGVmaW5lIENNRF9TVEFUVVNfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRAkweDA0CisjZGVmaW5lIENNRF9TVEFUVVNfVElNRV9PVVQJCQkweDA3CisjZGVmaW5lIENNRF9TVEFUVVNfSU5fUFJPR1JFU1MJCQkweDA4CisjZGVmaW5lIENNRF9TVEFUVVNfSE9TVF9GQUlMVVJFCQkJMHhmZgorI2RlZmluZSBDTURfU1RBVFVTX1NDQU5fRkFJTEVECQkJMHhmMAorCisvKiBhbnN3ZXJzIHRvIGdldCBvcCBtb2RlICovCisjZGVmaW5lIE9QTU9ERV9OT05FCQkJCTB4MDAKKyNkZWZpbmUgT1BNT0RFX05PUk1BTF9OSUNfV0lUSF9GTEFTSAkJMHgwMQorI2RlZmluZSBPUE1PREVfSFdfQ09ORklHX01PREUJCQkweDAyCisjZGVmaW5lIE9QTU9ERV9ERlVfTU9ERV9XSVRIX0ZMQVNICQkweDAzCisjZGVmaW5lIE9QTU9ERV9OT1JNQUxfTklDX1dJVEhPVVRfRkxBU0gJCTB4MDQKKworI2RlZmluZSBDTURfU0VUX01JQgkJMHgwMQorI2RlZmluZSBDTURfR0VUX01JQgkJMHgwMgorI2RlZmluZSBDTURfU0NBTgkJMHgwMworI2RlZmluZSBDTURfSk9JTgkJMHgwNAorI2RlZmluZSBDTURfU1RBUlRfSUJTUwkJMHgwNQorI2RlZmluZSBDTURfUkFESU9fT04JCTB4MDYKKyNkZWZpbmUgQ01EX1JBRElPX09GRgkJMHgwNworI2RlZmluZSBDTURfU1RBUlRVUAkJMHgwQgorCisjZGVmaW5lIE1JQl9MT0NBTAkJMHgwMQorI2RlZmluZSBNSUJfTUFDX0FERFIJCTB4MDIKKyNkZWZpbmUgTUlCX01BQwkJCTB4MDMKKyNkZWZpbmUgTUlCX01BQ19NR01UCQkweDA1CisjZGVmaW5lIE1JQl9NQUNfV0VQCQkweDA2CisjZGVmaW5lIE1JQl9QSFkJCQkweDA3CisjZGVmaW5lIE1JQl9GV19WRVJTSU9OCQkweDA4CisjZGVmaW5lIE1JQl9NRE9NQUlOCQkweDA5CisKKyNkZWZpbmUgQURIT0NfTU9ERQkJMQorI2RlZmluZSBJTkZSQVNUUlVDVFVSRV9NT0RFCTIKKworLyogdmFsdWVzIGZvciBzdHJ1Y3QgbWliX2xvY2FsLCBmaWVsZCBwcmVhbWJsZV90eXBlICovCisjZGVmaW5lIFBSRUFNQkxFX1RZUEVfTE9ORwkwCisjZGVmaW5lIFBSRUFNQkxFX1RZUEVfU0hPUlQJMQorI2RlZmluZSBQUkVBTUJMRV9UWVBFX0FVVE8JMgorCisvKiB2YWx1ZXMgZm9yIHR4X3JhdGUgKi8KKyNkZWZpbmUgVFhfUkFURV8xTUJJVAkJMAorI2RlZmluZSBUWF9SQVRFXzJNQklUCQkxCisjZGVmaW5lIFRYX1JBVEVfNV81TUJJVCAJMgorI2RlZmluZSBUWF9SQVRFXzExTUJJVAkJMworI2RlZmluZSBUWF9SQVRFX0FVVE8JCTQKKworLyogcG93ZXIgbWFuYWdlbWVudCBtb2RlcyAqLworI2RlZmluZSBBVDc2X1BNX09GRgkJMQorI2RlZmluZSBBVDc2X1BNX09OCQkyCisjZGVmaW5lIEFUNzZfUE1fU01BUlQJCTMKKworc3RydWN0IGh3Y2ZnX3I1MDUgeworCXU4IGNyMzlfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDFbMTRdOworCXU4IGJiX2NyWzE0XTsKKwl1OCBwaWR2aWRbNF07CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCXU4IHJlc2VydmVkMlsxNF07CisJdTggY3IxNV92YWx1ZXNbMTRdOworCXU4IHJlc2VydmVkM1szXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBod2NmZ19yZm1kIHsKKwl1OCBjcjIwX3ZhbHVlc1sxNF07CisJdTggY3IyMV92YWx1ZXNbMTRdOworCXU4IGJiX2NyWzE0XTsKKwl1OCBwaWR2aWRbNF07CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCXU4IGxvd19wb3dlcl92YWx1ZXNbMTRdOworCXU4IG5vcm1hbF9wb3dlcl92YWx1ZXNbMTRdOworCXU4IHJlc2VydmVkMVszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBod2NmZ19pbnRlcnNpbCB7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGNyMzFfdmFsdWVzWzE0XTsKKwl1OCBjcjU4X3ZhbHVlc1sxNF07CisJdTggcGlkdmlkWzRdOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCXU4IHJlc2VydmVkWzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYXQ3Nl9od2NmZyB7CisJc3RydWN0IGh3Y2ZnX2ludGVyc2lsIGk7CisJc3RydWN0IGh3Y2ZnX3JmbWQgcjM7CisJc3RydWN0IGh3Y2ZnX3I1MDUgcjU7Cit9OworCisjZGVmaW5lIFdFUF9TTUFMTF9LRVlfTEVOCSg0MCAvIDgpCisjZGVmaW5lIFdFUF9MQVJHRV9LRVlfTEVOCSgxMDQgLyA4KQorCitzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyB7CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwl1OCBwcm9taXNjdW91c19tb2RlOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGVuY3J5cHRpb25fdHlwZTsKKwlfX2xlMTYgcnRzX3RocmVzaG9sZDsKKwlfX2xlMTYgZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQ7CS8qIDI1Ni4uMjM0NiAqLworCXU4IGJhc2ljX3JhdGVfc2V0WzRdOworCXU4IGF1dG9fcmF0ZV9mYWxsYmFjazsJLyogMCwxICovCisJdTggY2hhbm5lbDsKKwl1OCBwcml2YWN5X2ludm9rZWQ7CisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOwkvKiAwLi4zICovCisJdTggY3VycmVudF9zc2lkWzMyXTsKKwl1OCB3ZXBfZGVmYXVsdF9rZXlfdmFsdWVbNF1bV0VQX0tFWV9MRU5dOworCXU4IHNzaWRfbGVuOworCXU4IHNob3J0X3ByZWFtYmxlOworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfY29tbWFuZCB7CisJdTggY21kOworCXU4IHJlc2VydmVkOworCV9fbGUxNiBzaXplOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9SWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfcnhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3J4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggcnhfcmF0ZTsKKwl1OCBuZXdic3M7CisJdTggZnJhZ21lbnRhdGlvbjsKKwl1OCByc3NpOworCXU4IGxpbmtfcXVhbGl0eTsKKwl1OCBub2lzZV9sZXZlbDsKKwlfX2xlMzIgcnhfdGltZTsKKwl1OCBwYWNrZXRbSUVFRTgwMjExX0ZSQU1FX0xFTiArIElFRUU4MDIxMV9GQ1NfTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIExlbmd0aCBvZiBBdG1lbC1zcGVjaWZpYyBUeCBoZWFkZXIgYmVmb3JlIDgwMi4xMSBmcmFtZSAqLworI2RlZmluZSBBVDc2X1RYX0hEUkxFTiBvZmZzZXRvZihzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIsIHBhY2tldCkKKworc3RydWN0IGF0NzZfdHhfYnVmZmVyIHsKKwlfX2xlMTYgd2xlbmd0aDsKKwl1OCB0eF9yYXRlOworCXU4IHBhZGRpbmc7CisJdTggcmVzZXJ2ZWRbNF07CisJdTggcGFja2V0W0lFRUU4MDIxMV9GUkFNRV9MRU4gKyBJRUVFODAyMTFfRkNTX0xFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBkZWZpbmVzIGZvciBzY2FuX3R5cGUgYmVsb3cgKi8KKyNkZWZpbmUgU0NBTl9UWVBFX0FDVElWRQkwCisjZGVmaW5lIFNDQU5fVFlQRV9QQVNTSVZFCTEKKworc3RydWN0IGF0NzZfcmVxX3NjYW4geworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFszMl07CisJdTggc2Nhbl90eXBlOworCXU4IGNoYW5uZWw7CisJX19sZTE2IHByb2JlX2RlbGF5OworCV9fbGUxNiBtaW5fY2hhbm5lbF90aW1lOworCV9fbGUxNiBtYXhfY2hhbm5lbF90aW1lOworCXU4IGVzc2lkX3NpemU7CisJdTggaW50ZXJuYXRpb25hbF9zY2FuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfcmVxX2lic3MgeworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFszMl07CisJdTggYnNzX3R5cGU7CisJdTggY2hhbm5lbDsKKwl1OCBlc3NpZF9zaXplOworCXU4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfcmVxX2pvaW4geworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFszMl07CisJdTggYnNzX3R5cGU7CisJdTggY2hhbm5lbDsKKwlfX2xlMTYgdGltZW91dDsKKwl1OCBlc3NpZF9zaXplOworCXU4IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNldF9taWJfYnVmZmVyIHsKKwl1OCB0eXBlOworCXU4IHNpemU7CisJdTggaW5kZXg7CisJdTggcmVzZXJ2ZWQ7CisJdW5pb24geworCQl1OCBieXRlOworCQlfX2xlMTYgd29yZDsKKwkJdTggYWRkcltFVEhfQUxFTl07CisJfSBkYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9sb2NhbCB7CisJdTE2IHJlc2VydmVkMDsKKwl1OCBiZWFjb25fZW5hYmxlOworCXU4IHR4YXV0b3JhdGVfZmFsbGJhY2s7CisJdTggcmVzZXJ2ZWQxOworCXU4IHNzaWRfc2l6ZTsKKwl1OCBwcm9taXNjdW91c19tb2RlOworCXUxNiByZXNlcnZlZDI7CisJdTggcHJlYW1ibGVfdHlwZTsKKwl1MTYgcmVzZXJ2ZWQzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfYWRkciB7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlc1syXTsJCS8qID8/PyAqLworCXU4IGdyb3VwX2FkZHJbNF1bRVRIX0FMRU5dOworCXU4IGdyb3VwX2FkZHJfc3RhdHVzWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWMgeworCV9fbGUzMiBtYXhfdHhfbXNkdV9saWZldGltZTsKKwlfX2xlMzIgbWF4X3J4X2xpZmV0aW1lOworCV9fbGUxNiBmcmFnX3RocmVzaG9sZDsKKwlfX2xlMTYgcnRzX3RocmVzaG9sZDsKKwlfX2xlMTYgY3dtaW47CisJX19sZTE2IGN3bWF4OworCXU4IHNob3J0X3JldHJ5X3RpbWU7CisJdTggbG9uZ19yZXRyeV90aW1lOworCXU4IHNjYW5fdHlwZTsJCS8qIGFjdGl2ZSBvciBwYXNzaXZlICovCisJdTggc2Nhbl9jaGFubmVsOworCV9fbGUxNiBwcm9iZV9kZWxheTsJLyogZGVsYXkgYmVmb3JlIFByb2JlUmVxIGluIGFjdGl2ZSBzY2FuLCBSTyAqLworCV9fbGUxNiBtaW5fY2hhbm5lbF90aW1lOworCV9fbGUxNiBtYXhfY2hhbm5lbF90aW1lOworCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTggZGVzaXJlZF9zc2lkWzMyXTsKKwl1OCBkZXNpcmVkX2Jzc2lkW0VUSF9BTEVOXTsKKwl1OCBkZXNpcmVkX2Jzc3R5cGU7CS8qIGFkLWhvYyBvciBpbmZyYXN0cnVjdHVyZSAqLworCXU4IHJlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjX21nbXQgeworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworCV9fbGUxNiBDRlBfbWF4X2R1cmF0aW9uOworCV9fbGUxNiBtZWRpdW1fb2NjdXBhbmN5X2xpbWl0OworCV9fbGUxNiBzdGF0aW9uX2lkOwkvKiBhc3NvYyBpZCAqLworCV9fbGUxNiBBVElNX3dpbmRvdzsKKwl1OCBDRlBfbW9kZTsKKwl1OCBwcml2YWN5X29wdGlvbl9pbXBsZW1lbnRlZDsKKwl1OCBEVElNX3BlcmlvZDsKKwl1OCBDRlBfcGVyaW9kOworCXU4IGN1cnJlbnRfYnNzaWRbRVRIX0FMRU5dOworCXU4IGN1cnJlbnRfZXNzaWRbMzJdOworCXU4IGN1cnJlbnRfYnNzX3R5cGU7CisJdTggcG93ZXJfbWdtdF9tb2RlOworCS8qIHJmbWQgYW5kIDUwNSAqLworCXU4IGlic3NfY2hhbmdlOworCXU4IHJlczsKKwl1OCBtdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZDsKKwl1OCBtdWx0aV9kb21haW5fY2FwYWJpbGl0eV9lbmFibGVkOworCXU4IGNvdW50cnlfc3RyaW5nWzNdOworCXU4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfd2VwIHsKKwl1OCBwcml2YWN5X2ludm9rZWQ7CS8qIDAgZGlzYWJsZSBlbmNyLiwgMSBlbmFibGUgZW5jciAqLworCXU4IHdlcF9kZWZhdWx0X2tleV9pZDsKKwl1OCB3ZXBfa2V5X21hcHBpbmdfbGVuOworCXU4IGV4Y2x1ZGVfdW5lbmNyeXB0ZWQ7CisJX19sZTMyIHdlcF9pY3ZfZXJyb3JfY291bnQ7CisJX19sZTMyIHdlcF9leGNsdWRlZF9jb3VudDsKKwl1OCB3ZXBfZGVmYXVsdF9rZXl2YWx1ZVtXRVBfS0VZU11bV0VQX0tFWV9MRU5dOworCXU4IGVuY3J5cHRpb25fbGV2ZWw7CS8qIDEgZm9yIDQwYml0LCAyIGZvciAxMDRiaXQgZW5jcnlwdGlvbiAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9waHkgeworCV9fbGUzMiBlZF90aHJlc2hvbGQ7CisKKwlfX2xlMTYgc2xvdF90aW1lOworCV9fbGUxNiBzaWZzX3RpbWU7CisJX19sZTE2IHByZWFtYmxlX2xlbmd0aDsKKwlfX2xlMTYgcGxjcF9oZWFkZXJfbGVuZ3RoOworCV9fbGUxNiBtcGR1X21heF9sZW5ndGg7CisJX19sZTE2IGNjYV9tb2RlX3N1cHBvcnRlZDsKKworCXU4IG9wZXJhdGlvbl9yYXRlX3NldFs0XTsKKwl1OCBjaGFubmVsX2lkOworCXU4IGN1cnJlbnRfY2NhX21vZGU7CisJdTggcGh5X3R5cGU7CisJdTggY3VycmVudF9yZWdfZG9tYWluOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9md192ZXJzaW9uIHsKKwl1OCBtYWpvcjsKKwl1OCBtaW5vcjsKKwl1OCBwYXRjaDsKKwl1OCBidWlsZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWRvbWFpbiB7CisJdTggdHhfcG93ZXJsZXZlbFsxNF07CisJdTggY2hhbm5lbF9saXN0WzE0XTsJLyogMCBmb3IgaW52YWxpZCBjaGFubmVscyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfZndfaGVhZGVyIHsKKwlfX2xlMzIgY3JjOwkJLyogQ1JDMzIgb2YgdGhlIHdob2xlIGltYWdlICovCisJX19sZTMyIGJvYXJkX3R5cGU7CS8qIGZpcm13YXJlIGNvbXBhdGliaWxpdHkgY29kZSAqLworCXU4IGJ1aWxkOwkJLyogZmlybXdhcmUgYnVpbGQgbnVtYmVyICovCisJdTggcGF0Y2g7CQkvKiBmaXJtd2FyZSBwYXRjaCBsZXZlbCAqLworCXU4IG1pbm9yOwkJLyogZmlybXdhcmUgbWlub3IgdmVyc2lvbiAqLworCXU4IG1ham9yOwkJLyogZmlybXdhcmUgbWFqb3IgdmVyc2lvbiAqLworCV9fbGUzMiBzdHJfb2Zmc2V0OwkvKiBvZmZzZXQgb2YgdGhlIGNvcHlyaWdodCBzdHJpbmcgKi8KKwlfX2xlMzIgaW50X2Z3X29mZnNldDsJLyogaW50ZXJuYWwgZmlybXdhcmUgaW1hZ2Ugb2Zmc2V0ICovCisJX19sZTMyIGludF9md19sZW47CS8qIGludGVybmFsIGZpcm13YXJlIGltYWdlIGxlbmd0aCAqLworCV9fbGUzMiBleHRfZndfb2Zmc2V0OwkvKiBleHRlcm5hbCBmaXJtd2FyZSBpbWFnZSBvZmZzZXQgKi8KKwlfX2xlMzIgZXh0X2Z3X2xlbjsJLyogZXh0ZXJuYWwgZmlybXdhcmUgaW1hZ2UgbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIG1hY19zdGF0ZSB7CisJTUFDX0lOSVQsCisJTUFDX1NDQU5OSU5HLAorCU1BQ19BVVRILAorCU1BQ19BU1NPQywKKwlNQUNfSk9JTklORywKKwlNQUNfQ09OTkVDVEVELAorCU1BQ19PV05fSUJTUworfTsKKworLyogYSBkZXNjcmlwdGlvbiBvZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCB0aGUgYWxsb3dlZCBjaGFubmVscyAqLworc3RydWN0IHJlZ19kb21haW4geworCXUxNiBjb2RlOworCWNoYXIgY29uc3QgKm5hbWU7CisJdTMyIGNoYW5uZWxfbWFwOwkvKiBpZiBiaXQgTiBpcyBzZXQsIGNoYW5uZWwgKE4rMSkgaXMgYWxsb3dlZCAqLworfTsKKworLyogaG93IGxvbmcgZG8gd2Uga2VlcCBhIChJKUJTUyBpbiB0aGUgYnNzX2xpc3QgaW4gamlmZmllcworICAgdGhpcyBzaG91bGQgYmUgbG9uZyBlbm91Z2ggZm9yIHRoZSB1c2VyIHRvIHJldHJpZXZlIHRoZSB0YWJsZQorICAgKGJ5IGl3bGlzdCA/KSBhZnRlciB0aGUgZGV2aWNlIHN0YXJ0ZWQsIGJlY2F1c2UgYWxsIGVudHJpZXMgZnJvbQorICAgb3RoZXIgY2hhbm5lbHMgdGhhbiB0aGUgb25lIHRoZSBkZXZpY2UgbG9ja3Mgb24gZ2V0IHJlbW92ZWQsIHRvbyAqLworI2RlZmluZSBCU1NfTElTVF9USU1FT1VUCSgxMjAgKiBIWikKKy8qIHN0cnVjdCB0byBzdG9yZSBCU1MgaW5mbyBmb3VuZCBkdXJpbmcgc2NhbiAqLworI2RlZmluZSBCU1NfTElTVF9NQVhfUkFURV9MRU4JMzIJLyogMzIgcmF0ZXMgc2hvdWxkIGJlIGVub3VnaCAuLi4gKi8KKworc3RydWN0IGJzc19pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwl1OCBic3NpZFtFVEhfQUxFTl07CS8qIGJzc2lkICovCisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CS8qIGVzc2lkICovCisJdTggc3NpZF9sZW47CQkvKiBsZW5ndGggb2Ygc3NpZCBhYm92ZSAqLworCXU4IGNoYW5uZWw7CisJdTE2IGNhcGE7CQkvKiBCU1MgY2FwYWJpbGl0aWVzICovCisJdTE2IGJlYWNvbl9pbnRlcnZhbDsJLyogYmVhY29uIGludGVydmFsLCBLdXMgKDEwMjQgbWljcm9zZWNvbmRzKSAqLworCXU4IHJhdGVzW0JTU19MSVNUX01BWF9SQVRFX0xFTl07CS8qIHN1cHBvcnRlZCByYXRlcyBpbiB1bml0cyBvZgorCQkJCQkJICAgNTAwIGticHMsIE9SZWQgd2l0aCAweDgwIGZvcgorCQkJCQkJICAgYmFzaWMgcmF0ZXMgKi8KKwl1OCByYXRlc19sZW47CisKKwkvKiBxdWFsaXR5IG9mIHJlY2VpdmVkIGJlYWNvbiAqLworCXU4IHJzc2k7CisJdTggbGlua19xdWFsOworCXU4IG5vaXNlX2xldmVsOworCisJdW5zaWduZWQgbG9uZyBsYXN0X3J4OwkvKiB0aW1lIChqaWZmaWVzKSBvZiBsYXN0IGJlYWNvbiByZWNlaXZlZCAqLworfTsKKworLyogYSByeCBkYXRhIGJ1ZmZlciB0byBjb2xsZWN0IHJ4IGZyYWdtZW50cyAqLworc3RydWN0IHJ4X2RhdGFfYnVmIHsKKwl1OCBzZW5kZXJbRVRIX0FMRU5dOwkvKiBzZW5kZXIgYWRkcmVzcyAqLworCXUxNiBzZXFucjsJCS8qIHNlcXVlbmNlIG51bWJlciAqLworCXUxNiBmcmFnbnI7CQkvKiBsYXN0IGZyYWdtZW50IHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3J4OwkvKiBqaWZmaWVzIG9mIGxhc3QgcnggKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwkvKiA9PSBOVUxMIGlmIGVudHJ5IGlzIGZyZWUgKi8KK307CisKKyNkZWZpbmUgTlJfUlhfREFUQV9CVUYJCTgKKworLyogRGF0YSBmb3Igb25lIGxvYWRlZCBmaXJtd2FyZSBmaWxlICovCitzdHJ1Y3QgZndlbnRyeSB7CisJY29uc3QgY2hhciAqY29uc3QgZnduYW1lOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGV4dGZ3X3NpemU7CisJaW50IGludGZ3X3NpemU7CisJLyogcG9pbnRlciB0byBsb2FkZWQgZmlybXdhcmUsIG5vIG5lZWQgdG8gZnJlZSAqLworCXU4ICpleHRmdzsJCS8qIGV4dGVybmFsIGZpcm13YXJlLCBleHRmd19zaXplIGJ5dGVzIGxvbmcgKi8KKwl1OCAqaW50Znc7CQkvKiBpbnRlcm5hbCBmaXJtd2FyZSwgaW50Zndfc2l6ZSBieXRlcyBsb25nICovCisJZW51bSBib2FyZF90eXBlIGJvYXJkX3R5cGU7CS8qIGJvYXJkIHR5cGUgKi8KKwlzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24gZndfdmVyc2lvbjsKKwlpbnQgbG9hZGVkOwkJLyogTG9hZGVkIGFuZCBwYXJzZWQgc3VjY2Vzc2Z1bGx5ICovCit9OworCitzdHJ1Y3QgYXQ3Nl9wcml2IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJLyogVVNCIGRldmljZSBwb2ludGVyICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsJLyogbmV0IGRldmljZSBwb2ludGVyICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CS8qIG5ldCBkZXZpY2Ugc3RhdHMgKi8KKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7CS8qIHdpcmVsZXNzIHN0YXRzICovCisKKwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiOwkvKiBza2J1ZmYgZm9yIHJlY2VpdmluZyBkYXRhICovCisJdm9pZCAqYnVsa19vdXRfYnVmZmVyOwkvKiBidWZmZXIgZm9yIHNlbmRpbmcgZGF0YSAqLworCisJc3RydWN0IHVyYiAqdHhfdXJiOwkvKiBVUkIgZm9yIHNlbmRpbmcgZGF0YSAqLworCXN0cnVjdCB1cmIgKnJ4X3VyYjsJLyogVVJCIGZvciByZWNlaXZpbmcgZGF0YSAqLworCisJdW5zaWduZWQgaW50IHR4X3BpcGU7CS8qIGJ1bGsgb3V0IHBpcGUgKi8KKwl1bnNpZ25lZCBpbnQgcnhfcGlwZTsJLyogYnVsayBpbiBwaXBlICovCisKKwlzdHJ1Y3QgbXV0ZXggbXR4OwkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCisJLyogd29yayBxdWV1ZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19hc3NvY19kb25lOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2pvaW47CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfbmV3X2JzczsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19zdGFydF9zY2FuOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3NldF9wcm9taXNjOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N1Ym1pdF9yeDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX3Jlc3RhcnQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayBkd29ya19nZXRfc2NhbjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2JlYWNvbjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2F1dGg7CisJc3RydWN0IGRlbGF5ZWRfd29yayBkd29ya19hc3NvYzsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF90YXNrbGV0OworCisJLyogdGhlIFdFUCBzdHVmZiAqLworCWludCB3ZXBfZW5hYmxlZDsJLyogMSBpZiBXRVAgaXMgZW5hYmxlZCAqLworCWludCB3ZXBfa2V5X2lkOwkJLyoga2V5IGlkIHRvIGJlIHVzZWQgKi8KKwl1OCB3ZXBfa2V5c1tXRVBfS0VZU11bV0VQX0tFWV9MRU5dOwkvKiB0aGUgZm91ciBXRVAga2V5cywKKwkJCQkJCSAgIDUgb3IgMTMgYnl0ZXMgYXJlIHVzZWQgKi8KKwl1OCB3ZXBfa2V5c19sZW5bV0VQX0tFWVNdOwkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBhYm92ZSBrZXlzICovCisKKwlpbnQgY2hhbm5lbDsKKwlpbnQgaXdfbW9kZTsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCWludCBlc3NpZF9zaXplOworCWludCByYWRpb19vbjsKKwlpbnQgcHJvbWlzYzsKKworCWludCBwcmVhbWJsZV90eXBlOwkvKiAwIC0gbG9uZywgMSAtIHNob3J0LCAyIC0gYXV0byAqLworCWludCBhdXRoX21vZGU7CQkvKiBhdXRoZW50aWNhdGlvbiB0eXBlOiAwIG9wZW4sIDEgc2hhcmVkIGtleSAqLworCWludCB0eHJhdGU7CQkvKiAwLDEsMiwzID0gMSwyLDUuNSwxMSBNYnBzLCA0IGlzIGF1dG8gKi8KKwlpbnQgZnJhZ190aHJlc2hvbGQ7CS8qIHRocmVzaG9sZCBmb3IgZnJhZ21lbnRhdGlvbiBvZiB0eCBwYWNrZXRzICovCisJaW50IHJ0c190aHJlc2hvbGQ7CS8qIHRocmVzaG9sZCBmb3IgUlRTIG1lY2hhbmlzbSAqLworCWludCBzaG9ydF9yZXRyeV9saW1pdDsKKworCWludCBzY2FuX21pbl90aW1lOwkvKiBzY2FuIG1pbiBjaGFubmVsIHRpbWUgKi8KKwlpbnQgc2Nhbl9tYXhfdGltZTsJLyogc2NhbiBtYXggY2hhbm5lbCB0aW1lICovCisJaW50IHNjYW5fbW9kZTsJCS8qIFNDQU5fVFlQRV9BQ1RJVkUsIFNDQU5fVFlQRV9QQVNTSVZFICovCisJaW50IHNjYW5fbmVlZF9hbnk7CS8qIGlmIHNldCwgbmVlZCB0byBzY2FuIGZvciBhbnkgRVNTSUQgKi8KKworCS8qIHRoZSBsaXN0IHdlIGdvdCBmcm9tIHNjYW5uaW5nICovCisJc3BpbmxvY2tfdCBic3NfbGlzdF9zcGlubG9jazsJLyogcHJvdGVjdHMgYnNzX2xpc3Qgb3BlcmF0aW9ucyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYnNzX2xpc3Q7CS8qIGxpc3Qgb2YgQlNTIHdlIGdvdCBiZWFjb25zIGZyb20gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBic3NfbGlzdF90aW1lcjsJLyogdGltZXIgdG8gcHVyZ2Ugb2xkIGVudHJpZXMKKwkJCQkJCSAgIGZyb20gYnNzX2xpc3QgKi8KKwlzdHJ1Y3QgYnNzX2luZm8gKmN1cnJfYnNzOwkvKiBjdXJyZW50IEJTUyAqLworCXUxNiBhc3NvY19pZDsJCS8qIGN1cnJlbnQgYXNzb2NpYXRpb24gSUQsIGlmIGFzc29jaWF0ZWQgKi8KKworCXU4IHdhbnRlZF9ic3NpZFtFVEhfQUxFTl07CisJaW50IHdhbnRlZF9ic3NpZF92YWxpZDsJLyogIT0gMCBpZiB3YW50ZWRfYnNzaWQgaXMgdG8gYmUgdXNlZCAqLworCisJLyogc29tZSBkYXRhIGZvciBpbmZyYXN0cnVjdHVyZSBtb2RlIG9ubHkgKi8KKwlzcGlubG9ja190IG1nbXRfc3BpbmxvY2s7CS8qIHRoaXMgc3BpbmxvY2sgcHJvdGVjdHMgYWNjZXNzIHRvCisJCQkJCSAgIG5leHRfbWdtdF9idWxrICovCisKKwlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKm5leHRfbWdtdF9idWxrOwkvKiBwZW5kaW5nIG1hbmFnZW1lbnQgbXNnIHRvCisJCQkJCQkgICBzZW5kIHZpYSBidWxrIG91dCAqLworCWVudW0gbWFjX3N0YXRlIG1hY19zdGF0ZTsKKwllbnVtIHsKKwkJU0NBTl9JRExFLAorCQlTQ0FOX0lOX1BST0dSRVNTLAorCQlTQ0FOX0NPTVBMRVRFRAorCX0gc2Nhbl9zdGF0ZTsKKwl0aW1lX3QgbGFzdF9zY2FuOworCisJaW50IHJldHJpZXM7CQkvKiByZW1haW5pbmcgcmV0cmllcyBpbiBjYXNlIG9mIHRpbWVvdXQgd2hlbgorCQkJCSAqIHNlbmRpbmcgQXV0aFJlcSBvciBBc3NvY1JlcSAqLworCXU4IHBtX21vZGU7CQkvKiBwb3dlciBtYW5hZ2VtZW50IG1vZGUgKi8KKwl1MzIgcG1fcGVyaW9kOwkJLyogcG93ZXIgbWFuYWdlbWVudCBwZXJpb2QgaW4gbWljcm9zZWNvbmRzICovCisKKwlzdHJ1Y3QgcmVnX2RvbWFpbiBjb25zdCAqZG9tYWluOwkvKiByZWcgZG9tYWluIGRlc2NyaXB0aW9uICovCisKKwkvKiBpd3NweSBzdXBwb3J0ICovCisJc3BpbmxvY2tfdCBzcHlfc3BpbmxvY2s7CisJc3RydWN0IGl3X3NweV9kYXRhIHNweV9kYXRhOworCisJc3RydWN0IGl3X3B1YmxpY19kYXRhIHdpcmVsZXNzX2RhdGE7CisKKwkvKiBUaGVzZSBmaWVsZHMgY29udGFpbiBIVyBjb25maWcgcHJvdmlkZWQgYnkgdGhlIGRldmljZSAobm90IGFsbCBvZgorCSAqIHRoZXNlIGZpZWxkcyBhcmUgdXNlZCBieSBhbGwgYm9hcmQgdHlwZXMpICovCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCisJc3RydWN0IGF0NzZfY2FyZF9jb25maWcgY2FyZF9jb25maWc7CisKKwkvKiBzdG9yZSByeCBmcmFnbWVudHMgdW50aWwgY29tcGxldGUgKi8KKwlzdHJ1Y3QgcnhfZGF0YV9idWYgcnhfZGF0YVtOUl9SWF9EQVRBX0JVRl07CisKKwllbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZTsKKwlzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24gZndfdmVyc2lvbjsKKworCXVuc2lnbmVkIGludCBkZXZpY2VfdW5wbHVnZ2VkOjE7CisJdW5zaWduZWQgaW50IG5ldGRldl9yZWdpc3RlcmVkOjE7CisJc3RydWN0IHNldF9taWJfYnVmZmVyIG1pYl9idWY7CS8qIGdsb2JhbCBidWZmZXIgZm9yIHNldF9taWIgY2FsbHMgKi8KKworCS8qIGJlYWNvbiBjb3VudGluZyAqLworCWludCBiZWFjb25fcGVyaW9kOwkvKiBwZXJpb2Qgb2YgbWdtdCBiZWFjb25zLCBLdXMgKi8KKwlpbnQgYmVhY29uc19yZWNlaXZlZDsKKwl1bnNpZ25lZCBsb25nIGJlYWNvbnNfbGFzdF9xdWFsOwkvKiB0aW1lIHdlIHJlc3RhcnRlZCBjb3VudGluZworCQkJCQkJICAgYmVhY29ucyAqLworfTsKKworc3RydWN0IGF0NzZfcnhfcmFkaW90YXAgeworCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHJ0X2hkcjsKKwlfX2xlNjQgcnRfdHNmdDsKKwl1OCBydF9mbGFnczsKKwl1OCBydF9yYXRlOworCXM4IHJ0X3NpZ25hbDsKKwlzOCBydF9ub2lzZTsKK307CisKKyNkZWZpbmUgQVQ3Nl9SWF9SQURJT1RBUF9QUkVTRU5UCQkgIFwKKwkoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQpCQl8IFwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MpCQl8IFwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkJCXwgXAorCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwpCXwgXAorCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRSkpCisKKyNkZWZpbmUgQkVBQ09OX01BWF9EQVRBX0xFTkdUSAkxNTAwCisKKy8qIHRoZSBtYXhpbXVtIHNpemUgb2YgYW4gQXNzb2NSZXEgcGFja2V0ICovCisjZGVmaW5lIEFTU09DUkVRX01BWF9TSVpFIFwKKyAgKEFUNzZfVFhfSERSTEVOICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCkgKyBcCisgICAxICsgMSArIElXX0VTU0lEX01BWF9TSVpFICsgMSArIDEgKyA0KQorCisvKiBmb3Igc2hhcmVkIHNlY3JldCBhdXRoLCBhZGQgdGhlIGNoYWxsZW5nZSB0ZXh0IHNpemUgKi8KKyNkZWZpbmUgQVVUSF9GUkFNRV9TSVpFIChBVDc2X1RYX0hEUkxFTiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2F1dGgpKQorCisvKiBNYXhpbWFsIG51bWJlciBvZiBBdXRoUmVxIHJldHJpZXMgKi8KKyNkZWZpbmUgQVVUSF9SRVRSSUVTCQkzCisKKy8qIE1heGltYWwgbnVtYmVyIG9mIEFzc29jUmVxIHJldHJpZXMgKi8KKyNkZWZpbmUgQVNTT0NfUkVUUklFUwkJMworCisvKiBCZWFjb24gdGltZW91dCBpbiBtYW5hZ2VkIG1vZGUgd2hlbiB3ZSBhcmUgY29ubmVjdGVkICovCisjZGVmaW5lIEJFQUNPTl9USU1FT1VUCQkoMTAgKiBIWikKKworLyogVGltZW91dCBmb3IgYXV0aGVudGljYXRpb24gcmVzcG9uc2UgKi8KKyNkZWZpbmUgQVVUSF9USU1FT1VUCQkoMSAqIEhaKQorCisvKiBUaW1lb3V0IGZvciBhc3NvY2lhdGlvbiByZXNwb25zZSAqLworI2RlZmluZSBBU1NPQ19USU1FT1VUCQkoMSAqIEhaKQorCisvKiBQb2xsaW5nIGludGVydmFsIHdoZW4gc2NhbiBpcyBydW5uaW5nICovCisjZGVmaW5lIFNDQU5fUE9MTF9JTlRFUlZBTAkoSFogLyA0KQorCisvKiBDb21tYW5kIGNvbXBsZXRpb24gdGltZW91dCAqLworI2RlZmluZSBDTURfQ09NUExFVElPTl9USU1FT1VUCSg1ICogSFopCisKKyNkZWZpbmUgREVGX1JUU19USFJFU0hPTEQJMTUzNgorI2RlZmluZSBERUZfRlJBR19USFJFU0hPTEQJMTUzNgorI2RlZmluZSBERUZfU0hPUlRfUkVUUllfTElNSVQJOAorI2RlZmluZSBERUZfQ0hBTk5FTAkJMTAKKyNkZWZpbmUgREVGX1NDQU5fTUlOX1RJTUUJMTAKKyNkZWZpbmUgREVGX1NDQU5fTUFYX1RJTUUJMTIwCisKKyNkZWZpbmUgTUFYX1JUU19USFJFU0hPTEQJKE1BWF9GUkFHX1RIUkVTSE9MRCArIDEpCisKKy8qIHRoZSBtYXggcGFkZGluZyBzaXplIGZvciB0eCBpbiBieXRlcyAoc2VlIGNhbGNfcGFkZGluZykgKi8KKyNkZWZpbmUgTUFYX1BBRERJTkdfU0laRQk1MworCisjZW5kaWYJCQkJLyogX0FUNzZfVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZDQxZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZpZyBFQ0hPCisJdHJpc3RhdGUgIkxpbmUgRWNobyBDYW5jZWxsZXIgc3VwcG9ydCIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBsaW5lIGVjaG8gY2FuY2VsbGluZyBzdXBwb3J0IGZvciBtSVNETiBhbmQKKwkgIFphcHRlbCBkcml2ZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBlY2hvLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDRjYWFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX0VDSE8pICs9IGVjaG8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhMDlhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL1RPRE8KQEAgLTAsMCArMSwxMCBAQAorVE9ETzoKKwktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKKwktIExpbmRlbnQKKwktIHR5cGVkZWYgcmVtb3ZhbHMKKwktIGhhbmRsZSBiaXRfb3BlcmF0aW9ucy5oIChtZXJnZSBpbiBvciBtYWtlIHBhcnQgb2YgY29tbW9uIGNvZGU/KQorCS0gcmVtb3ZlIHByb2MgaW50ZXJmYWNlLCBvbmx5IHVzZSBlY2hvLmggaW50ZXJmYWNlIChwcm9jIGludGVyZmFjZSBpcworCSAgcmFjeSBhbmQgbm90IGNvcnJlY3QuKQorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZCBDYzogU3RldmUKK1VuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPiBhbmQgRGF2aWQgUm93ZSA8ZGF2aWRAcm93ZXRlbC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9iaXRfb3BlcmF0aW9ucy5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWNkY2YzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIFNwYW5EU1AgLSBhIHNlcmllcyBvZiBEU1AgY29tcG9uZW50cyBmb3IgdGVsZXBob255CisgKgorICogYml0X29wZXJhdGlvbnMuaCAtIFZhcmlvdXMgYml0IGxldmVsIG9wZXJhdGlvbnMsIHN1Y2ggYXMgYml0IHJldmVyc2FsCisgKgorICogV3JpdHRlbiBieSBTdGV2ZSBVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9yZz4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RldmUgVW5kZXJ3b29kCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogJElkOiBiaXRfb3BlcmF0aW9ucy5oLHYgMS4xMSAyMDA2LzExLzI4IDE1OjM3OjAzIHN0ZXZldSBFeHAgJAorICovCisKKy8qISBcZmlsZSAqLworCisjaWYgIWRlZmluZWQoX0JJVF9PUEVSQVRJT05TX0hfKQorI2RlZmluZSBfQklUX09QRVJBVElPTlNfSF8KKworI2lmIGRlZmluZWQoX19pMzg2X18pICB8fCAgZGVmaW5lZChfX3g4Nl82NF9fKQorLyohIFxicmllZiBGaW5kIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGhpZ2hlc3Qgc2V0IGJpdCBpbiBhIHdvcmQKKyAgICBccGFyYW0gYml0cyBUaGUgd29yZCB0byBiZSBzZWFyY2hlZAorICAgIFxyZXR1cm4gVGhlIGJpdCBudW1iZXIgb2YgdGhlIGhpZ2hlc3Qgc2V0IGJpdCwgb3IgLTEgaWYgdGhlIHdvcmQgaXMgemVyby4gKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0b3BfYml0KHVuc2lnbmVkIGludCBiaXRzKQoreworCWludCByZXM7CisKKwlfX2FzbV9fKCIgeG9ybCAlW3Jlc10sJVtyZXNdO1xuIgorCQkiIGRlY2wgJVtyZXNdO1xuIgorCQkiIGJzcmwgJVtiaXRzXSwlW3Jlc11cbiIKKwkJOltyZXNdICI9JnIiIChyZXMpCisJCTpbYml0c10gInJtIihiaXRzKQorCSk7CisJcmV0dXJuIHJlczsKK30KKworLyohIFxicmllZiBGaW5kIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGxvd2VzdCBzZXQgYml0IGluIGEgd29yZAorICAgIFxwYXJhbSBiaXRzIFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkCisgICAgXHJldHVybiBUaGUgYml0IG51bWJlciBvZiB0aGUgbG93ZXN0IHNldCBiaXQsIG9yIC0xIGlmIHRoZSB3b3JkIGlzIHplcm8uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3sKKwlpbnQgcmVzOworCisJX19hc21fXygiIHhvcmwgJVtyZXNdLCVbcmVzXTtcbiIKKwkJIiBkZWNsICVbcmVzXTtcbiIKKwkJIiBic2ZsICVbYml0c10sJVtyZXNdXG4iCisJCTpbcmVzXSAiPSZyIiAocmVzKQorCQk6W2JpdHNdICJybSIoYml0cykKKwkpOworCXJldHVybiByZXM7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCit7CisJaW50IGk7CisKKwlpZiAoYml0cyA9PSAwKQorCQlyZXR1cm4gLTE7CisJaSA9IDA7CisJaWYgKGJpdHMgJiAweEZGRkYwMDAwKSB7CisJCWJpdHMgJj0gMHhGRkZGMDAwMDsKKwkJaSArPSAxNjsKKwl9CisJaWYgKGJpdHMgJiAweEZGMDBGRjAwKSB7CisJCWJpdHMgJj0gMHhGRjAwRkYwMDsKKwkJaSArPSA4OworCX0KKwlpZiAoYml0cyAmIDB4RjBGMEYwRjApIHsKKwkJYml0cyAmPSAweEYwRjBGMEYwOworCQlpICs9IDQ7CisJfQorCWlmIChiaXRzICYgMHhDQ0NDQ0NDQykgeworCQliaXRzICY9IDB4Q0NDQ0NDQ0M7CisJCWkgKz0gMjsKKwl9CisJaWYgKGJpdHMgJiAweEFBQUFBQUFBKSB7CisJCWJpdHMgJj0gMHhBQUFBQUFBQTsKKwkJaSArPSAxOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGJvdHRvbV9iaXQodW5zaWduZWQgaW50IGJpdHMpCit7CisJaW50IGk7CisKKwlpZiAoYml0cyA9PSAwKQorCQlyZXR1cm4gLTE7CisJaSA9IDMyOworCWlmIChiaXRzICYgMHgwMDAwRkZGRikgeworCQliaXRzICY9IDB4MDAwMEZGRkY7CisJCWkgLT0gMTY7CisJfQorCWlmIChiaXRzICYgMHgwMEZGMDBGRikgeworCQliaXRzICY9IDB4MDBGRjAwRkY7CisJCWkgLT0gODsKKwl9CisJaWYgKGJpdHMgJiAweDBGMEYwRjBGKSB7CisJCWJpdHMgJj0gMHgwRjBGMEYwRjsKKwkJaSAtPSA0OworCX0KKwlpZiAoYml0cyAmIDB4MzMzMzMzMzMpIHsKKwkJYml0cyAmPSAweDMzMzMzMzMzOworCQlpIC09IDI7CisJfQorCWlmIChiaXRzICYgMHg1NTU1NTU1NSkgeworCQliaXRzICY9IDB4NTU1NTU1NTU7CisJCWkgLT0gMTsKKwl9CisJcmV0dXJuIGk7Cit9CisjZW5kaWYKKworLyohIFxicmllZiBCaXQgcmV2ZXJzZSBhIGJ5dGUuCisgICAgXHBhcmFtIGRhdGEgVGhlIGJ5dGUgdG8gYmUgcmV2ZXJzZWQuCisgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQ4X3QgYml0X3JldmVyc2U4KHVpbnQ4X3QgeCkKK3sKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAgfHwgIGRlZmluZWQoX194ODZfNjRfXykKKwkvKiBJZiBtdWx0aXBseSBpcyBmYXN0ICovCisJcmV0dXJuICgoeCAqIDB4MDgwMlUgJiAweDIyMTEwVSkgfCAoeCAqIDB4ODAyMFUgJiAweDg4NDQwVSkpICoKKwkgICAgMHgxMDEwMVUgPj4gMTY7CisjZWxzZQorCS8qIElmIG11bHRpcGx5IGlzIHNsb3csIGJ1dCB3ZSBoYXZlIGEgYmFycmVsIHNoaWZ0ZXIgKi8KKwl4ID0gKHggPj4gNCkgfCAoeCA8PCA0KTsKKwl4ID0gKCh4ICYgMHhDQykgPj4gMikgfCAoKHggJiAweDMzKSA8PCAyKTsKKwlyZXR1cm4gKCh4ICYgMHhBQSkgPj4gMSkgfCAoKHggJiAweDU1KSA8PCAxKTsKKyNlbmRpZgorfQorCisvKiEgXGJyaWVmIEJpdCByZXZlcnNlIGEgMTYgYml0IHdvcmQuCisgICAgXHBhcmFtIGRhdGEgVGhlIHdvcmQgdG8gYmUgcmV2ZXJzZWQuCisgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KK3VpbnQxNl90IGJpdF9yZXZlcnNlMTYodWludDE2X3QgZGF0YSk7CisKKy8qISBcYnJpZWYgQml0IHJldmVyc2UgYSAzMiBiaXQgd29yZC4KKyAgICBccGFyYW0gZGF0YSBUaGUgd29yZCB0byBiZSByZXZlcnNlZC4KKyAgICBccmV0dXJuIFRoZSBiaXQgcmV2ZXJzZWQgdmVyc2lvbiBvZiBkYXRhLiAqLwordWludDMyX3QgYml0X3JldmVyc2UzMih1aW50MzJfdCBkYXRhKTsKKworLyohIFxicmllZiBCaXQgcmV2ZXJzZSBlYWNoIG9mIHRoZSBmb3VyIGJ5dGVzIGluIGEgMzIgYml0IHdvcmQuCisgICAgXHBhcmFtIGRhdGEgVGhlIHdvcmQgdG8gYmUgcmV2ZXJzZWQuCisgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KK3VpbnQzMl90IGJpdF9yZXZlcnNlXzRieXRlcyh1aW50MzJfdCBkYXRhKTsKKworLyohIFxicmllZiBGaW5kIHRoZSBudW1iZXIgb2Ygc2V0IGJpdHMgaW4gYSAzMiBiaXQgd29yZC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBzZWFyY2hlZC4KKyAgICBccmV0dXJuIFRoZSBudW1iZXIgb2Ygc2V0IGJpdHMuICovCitpbnQgb25lX2JpdHMzMih1aW50MzJfdCB4KTsKKworLyohIFxicmllZiBDcmVhdGUgYSBtYXNrIGFzIHdpZGUgYXMgdGhlIG51bWJlciBpbiBhIDMyIGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIG1hc2suICovCit1aW50MzJfdCBtYWtlX21hc2szMih1aW50MzJfdCB4KTsKKworLyohIFxicmllZiBDcmVhdGUgYSBtYXNrIGFzIHdpZGUgYXMgdGhlIG51bWJlciBpbiBhIDE2IGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIG1hc2suICovCit1aW50MTZfdCBtYWtlX21hc2sxNih1aW50MTZfdCB4KTsKKworLyohIFxicmllZiBGaW5kIHRoZSBsZWFzdCBzaWduaWZpY2FudCBvbmUgaW4gYSB3b3JkLCBhbmQgcmV0dXJuIGEgd29yZAorICAgICAgICAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIHdvcmQgd2l0aCB0aGUgc2luZ2xlIHNldCBiaXQuICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBsZWFzdF9zaWduaWZpY2FudF9vbmUzMih1aW50MzJfdCB4KQoreworCXJldHVybiAoeCAmICgtKGludDMyX3QpIHgpKTsKK30KKworLyohIFxicmllZiBGaW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IG9uZSBpbiBhIHdvcmQsIGFuZCByZXR1cm4gYSB3b3JkCisgICAgICAgICAgIHdpdGgganVzdCB0aGF0IGJpdCBzZXQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCisgICAgXHJldHVybiBUaGUgd29yZCB3aXRoIHRoZSBzaW5nbGUgc2V0IGJpdC4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IG1vc3Rfc2lnbmlmaWNhbnRfb25lMzIodWludDMyX3QgeCkKK3sKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAgfHwgIGRlZmluZWQoX194ODZfNjRfXykKKwlyZXR1cm4gMSA8PCB0b3BfYml0KHgpOworI2Vsc2UKKwl4ID0gbWFrZV9tYXNrMzIoeCk7CisJcmV0dXJuICh4IF4gKHggPj4gMSkpOworI2VuZGlmCit9CisKKy8qISBcYnJpZWYgRmluZCB0aGUgcGFyaXR5IG9mIGEgYnl0ZS4KKyAgICBccGFyYW0geCBUaGUgYnl0ZSB0byBiZSBjaGVja2VkLgorICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLworc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTgodWludDhfdCB4KQoreworCXggPSAoeCBeICh4ID4+IDQpKSAmIDB4MEY7CisJcmV0dXJuICgweDY5OTYgPj4geCkgJiAxOworfQorCisvKiEgXGJyaWVmIEZpbmQgdGhlIHBhcml0eSBvZiBhIDE2IGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIGNoZWNrZWQuCisgICAgXHJldHVybiAxIGZvciBvZGQsIG9yIDAgZm9yIGV2ZW4uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFyaXR5MTYodWludDE2X3QgeCkKK3sKKwl4IF49ICh4ID4+IDgpOworCXggPSAoeCBeICh4ID4+IDQpKSAmIDB4MEY7CisJcmV0dXJuICgweDY5OTYgPj4geCkgJiAxOworfQorCisvKiEgXGJyaWVmIEZpbmQgdGhlIHBhcml0eSBvZiBhIDMyIGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIGNoZWNrZWQuCisgICAgXHJldHVybiAxIGZvciBvZGQsIG9yIDAgZm9yIGV2ZW4uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFyaXR5MzIodWludDMyX3QgeCkKK3sKKwl4IF49ICh4ID4+IDE2KTsKKwl4IF49ICh4ID4+IDgpOworCXggPSAoeCBeICh4ID4+IDQpKSAmIDB4MEY7CisJcmV0dXJuICgweDY5OTYgPj4geCkgJiAxOworfQorCisjZW5kaWYKKy8qLSBFbmQgb2YgZmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjJjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMKQEAgLTAsMCArMSw2MzkgQEAKKy8qCisgKiBTcGFuRFNQIC0gYSBzZXJpZXMgb2YgRFNQIGNvbXBvbmVudHMgZm9yIHRlbGVwaG9ueQorICoKKyAqIGVjaG8uYyAtIEEgbGluZSBlY2hvIGNhbmNlbGxlci4gIFRoaXMgY29kZSBpcyBiZWluZyBkZXZlbG9wZWQKKyAqICAgICAgICAgIGFnYWluc3QgYW5kIHBhcnRpYWxseSBjb21wbGllcyB3aXRoIEcxNjguCisgKgorICogV3JpdHRlbiBieSBTdGV2ZSBVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9yZz4KKyAqICAgICAgICAgYW5kIERhdmlkIFJvd2UgPGRhdmlkX2F0X3Jvd2V0ZWxfZG90X2NvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgU3RldmUgVW5kZXJ3b29kLCAyMDA3IERhdmlkIFJvd2UKKyAqCisgKiBCYXNlZCBvbiBhIGJpdCBmcm9tIGhlcmUsIGEgYml0IGZyb20gdGhlcmUsIGV5ZSBvZiB0b2FkLCBlYXIgb2YKKyAqIGJhdCwgMTUgeWVhcnMgb2YgZmFpbGVkIGF0dGVtcHRzIGJ5IERhdmlkIGFuZCBhIGZldyBmcmllZCBicmFpbgorICogY2VsbHMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogJElkOiBlY2hvLmMsdiAxLjIwIDIwMDYvMTIvMDEgMTg6MDA6NDggc3RldmV1IEV4cCAkCisgKi8KKworLyohIFxmaWxlICovCisKKy8qIEltcGxlbWVudGF0aW9uIE5vdGVzCisgICBEYXZpZCBSb3dlCisgICBBcHJpbCAyMDA3CisKKyAgIFRoaXMgY29kZSBzdGFydGVkIGxpZmUgYXMgU3RldmUncyBOTE1TIGFsZ29yaXRobSB3aXRoIGEgdGFwCisgICByb3RhdGlvbiBhbGdvcml0aG0gdG8gaGFuZGxlIGRpdmVyZ2VuY2UgZHVyaW5nIGRvdWJsZSB0YWxrLiAgSQorICAgYWRkZWQgYSBHZWlnZWwgRG91YmxlIFRhbGsgRGV0ZWN0b3IgKERURCkgWzJdIGFuZCBwZXJmb3JtZWQgc29tZQorICAgRzE2OCB0ZXN0cy4gIEhvd2V2ZXIgSSBoYWQgdHJvdWJsZSBtZWV0aW5nIHRoZSBHMTY4IHJlcXVpcmVtZW50cywKKyAgIGVzcGVjaWFsbHkgZm9yIGRvdWJsZSB0YWxrIC0gdGhlcmUgd2VyZSBhbHdheXMgY2FzZXMgd2hlcmUgbXkgRFRECisgICBmYWlsZWQsIGZvciBleGFtcGxlIHdoZXJlIG5lYXIgZW5kIHNwZWVjaCB3YXMgdW5kZXIgdGhlIDZkQgorICAgdGhyZXNob2xkIHJlcXVpcmVkIGZvciBkZWNsYXJpbmcgZG91YmxlIHRhbGsuCisKKyAgIFNvIEkgdHJpZWQgYSB0d28gcGF0aCBhbGdvcml0aG0gWzFdLCB3aGljaCBoYXMgc28gZmFyIGdpdmVuIGJldHRlcgorICAgcmVzdWx0cy4gIFRoZSBvcmlnaW5hbCB0YXAgcm90YXRpb24vR2VpZ2VsIGFsZ29yaXRobSBpcyBhdmFpbGFibGUKKyAgIGluIFNWTiBodHRwOi8vc3ZuLnJvd2V0ZWwuY29tL3NvZnR3YXJlL29zbGVjL3RhZ3MvYmVmb3JlXzE2Yml0LgorICAgSXQncyBwcm9iYWJseSBwb3NzaWJsZSB0byBtYWtlIGl0IHdvcmsgaWYgc29tZSBvbmUgd2FudHMgdG8gcHV0IHNvbWUKKyAgIHNlcmlvdXMgd29yayBpbnRvIGl0LgorCisgICBBdCBwcmVzZW50IG5vIHNwZWNpYWwgdHJlYXRtZW50IGlzIHByb3ZpZGVkIGZvciB0b25lcywgd2hpY2gKKyAgIGdlbmVyYWxseSBjYXVzZSBOTE1TIGFsZ29yaXRobXMgdG8gZGl2ZXJnZS4gIEluaXRpYWwgcnVucyBvZiBhCisgICBzdWJzZXQgb2YgdGhlIEcxNjggdGVzdHMgZm9yIHRvbmVzIChlLmcgLi9lY2hvX3Rlc3QgNikgc2hvdyB0aGUKKyAgIGN1cnJlbnQgYWxnb3JpdGhtIGlzIHBhc3NpbmcgT0ssIHdoaWNoIGlzIGtpbmQgb2Ygc3VycHJpc2luZy4gIFRoZQorICAgZnVsbCBzZXQgb2YgdGVzdHMgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIHRvIGNvbmZpcm0gdGhpcyByZXN1bHQuCisKKyAgIE9uZSBvdGhlciBpbnRlcmVzdGluZyBjaGFuZ2UgaXMgdGhhdCBJIGhhdmUgbWFuYWdlZCB0byBnZXQgdGhlIE5MTVMKKyAgIGNvZGUgdG8gd29yayB3aXRoIDE2IGJpdCBjb2VmZmljaWVudHMsIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCAzMgorICAgYml0IGNvZWZmaWNlbnRzLiAgVGhpcyByZWR1Y2VzIHRoZSBNSVBzIGFuZCBzdG9yYWdlIHJlcXVpcmVkLgorICAgSSBldmF1bGF0ZWQgdGhlIDE2IGJpdCBwb3J0IHVzaW5nIGcxNjhfdGVzdHMuc2ggYW5kIGxpc3RlbmluZyB0ZXN0cworICAgb24gNCByZWFsLXdvcmxkIHNhbXBsZXMuCisKKyAgIEkgYWxzbyBhdHRlbXB0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgYmxvY2sgYmFzZWQgTkxNUyB1cGRhdGUKKyAgIFsyXSBidXQgYWx0aG91Z2ggdGhpcyBwYXNzZXMgZzE2OF90ZXN0cy5zaCBpdCBkaWRuJ3QgY29udmVyZ2Ugd2VsbAorICAgb24gdGhlIHJlYWwtd29ybGQgc2FtcGxlcy4gIEkgaGF2ZSBubyBpZGVhIHdoeSwgcGVyaGFwcyBhIHNjYWxpbmcKKyAgIHByb2JsZW0uICBUaGUgYmxvY2sgYmFzZWQgY29kZSBpcyBhbHNvIGF2YWlsYWJsZSBpbiBTVk4KKyAgIGh0dHA6Ly9zdm4ucm93ZXRlbC5jb20vc29mdHdhcmUvb3NsZWMvdGFncy9iZWZvcmVfMTZiaXQuICBJZiB0aGlzCisgICBjb2RlIGNhbiBiZSBkZWJ1Z2dlZCwgaXQgd2lsbCBsZWFkIHRvIGZ1cnRoZXIgcmVkdWN0aW9uIGluIE1JUFMsIGFzCisgICB0aGUgYmxvY2sgdXBkYXRlIGNvZGUgbWFwcyBuaWNlbHkgb250byBEU1AgaW5zdHJ1Y3Rpb24gc2V0cyAoaXQncyBhCisgICBkb3QgcHJvZHVjdCkgY29tcGFyZWQgdG8gdGhlIGN1cnJlbnQgc2FtcGxlLWJ5LXNhbXBsZSB1cGRhdGUuCisKKyAgIFN0ZXZlIGFsc28gaGFzIHNvbWUgbmljZSBub3RlcyBvbiBlY2hvIGNhbmNlbGxlcnMgaW4gZWNoby5oCisKKyAgIFJlZmVyZW5jZXM6CisKKyAgIFsxXSBPY2hpYWksIEFyZXNla2ksIGFuZCBPZ2loYXJhLCAiRWNobyBDYW5jZWxsZXIgd2l0aCBUd28gRWNobworICAgICAgIFBhdGggTW9kZWxzIiwgSUVFRSBUcmFuc2FjdGlvbnMgb24gY29tbXVuaWNhdGlvbnMsIENPTS0yNSwKKyAgICAgICBOby4gNiwgSnVuZQorICAgICAgIDE5NzcuCisgICAgICAgaHR0cDovL3d3dy5yb3dldGVsLmNvbS9pbWFnZXMvZWNoby9kdWFsX3BhdGhfcGFwZXIucGRmCisKKyAgIFsyXSBUaGUgY2xhc3NpYywgdmVyeSB1c2VmdWwgcGFwZXIgdGhhdCB0ZWxscyB5b3UgaG93IHRvCisgICAgICAgYWN0dWFsbHkgYnVpbGQgYSByZWFsIHdvcmxkIGVjaG8gY2FuY2VsbGVyOgorICAgICAgICAgTWVzc2Vyc2NobWl0dCwgSGVkYmVyZywgQ29sZSwgSGFvdWksIFdpbnNoaXAsICJEaWdpdGFsIFZvaWNlCisgICAgICAgICBFY2hvIENhbmNlbGxlciB3aXRoIGEgVE1TMzIwMDIwLAorICAgICAgICAgaHR0cDovL3d3dy5yb3dldGVsLmNvbS9pbWFnZXMvZWNoby9zcHJhMTI5LnBkZgorCisgICBbM10gSSBoYXZlIHdyaXR0ZW4gYSBzZXJpZXMgb2YgYmxvZyBwb3N0cyBvbiB0aGlzIHdvcmssIGhlcmUgaXMKKyAgICAgICBQYXJ0IDE6IGh0dHA6Ly93d3cucm93ZXRlbC5jb20vYmxvZy8/cD0xOAorCisgICBbNF0gVGhlIHNvdXJjZSBjb2RlIGh0dHA6Ly9zdm4ucm93ZXRlbC5jb20vc29mdHdhcmUvb3NsZWMvCisKKyAgIFs1XSBBIG5pY2UgcmVmZXJlbmNlIG9uIExNUyBmaWx0ZXJzOgorICAgICAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZWFzdF9tZWFuX3NxdWFyZXNfZmlsdGVyCisKKyAgIENyZWRpdHM6CisKKyAgIFRoYW5rcyB0byBTdGV2ZSBVbmRlcndvb2QsIEplYW4tTWFyYyBWYWxpbiwgYW5kIFJhbWFrcmlzaG5hbgorICAgTXV0aHVrcmlzaG5hbiBmb3IgdGhlaXIgc3VnZ2VzdGlvbnMgYW5kIGVtYWlsIGRpc2N1c3Npb25zLiAgVGhhbmtzCisgICBhbHNvIHRvIHRob3NlIHBlb3BsZSB3aG8gY29sbGVjdGVkIGVjaG8gc2FtcGxlcyBmb3IgbWUgc3VjaCBhcworICAgTWFyaywgUGF3ZWwsIGFuZCBQYXZlbC4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogV2UncmUgZG9pbmcga2VybmVsIHdvcmsgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJiaXRfb3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgImVjaG8uaCIKKworI2RlZmluZSBNSU5fVFhfUE9XRVJfRk9SX0FEQVBUSU9OICAgNjQKKyNkZWZpbmUgTUlOX1JYX1BPV0VSX0ZPUl9BREFQVElPTiAgIDY0CisjZGVmaW5lIERURF9IQU5HT1ZFUiAgICAgICAgICAgICAgIDYwMAkvKiA2MDAgc2FtcGxlcywgb3IgNzVtcyAgICAgKi8KKyNkZWZpbmUgRENfTE9HMkJFVEEgICAgICAgICAgICAgICAgICAzCS8qIGxvZzIoKSBvZiBEQyBmaWx0ZXIgQmV0YSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DVElPTlMKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBhZGFwdGluZyBjb2VmZnMgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIHN0b2NoYXN0aWMgZGVzY2VudCAoTilMTVMgYWxnb3JpdGhtICovCisKKyNpZmRlZiBfX2JmaW5fXworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBsbXNfYWRhcHRfYmcoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50IGNsZWFuLAorCQkJCSAgICBpbnQgc2hpZnQpCit7CisJaW50IGksIGo7CisJaW50IG9mZnNldDE7CisJaW50IG9mZnNldDI7CisJaW50IGZhY3RvcjsKKwlpbnQgZXhwOworCWludDE2X3QgKnBoaXN0OworCWludCBuOworCisJaWYgKHNoaWZ0ID4gMCkKKwkJZmFjdG9yID0gY2xlYW4gPDwgc2hpZnQ7CisJZWxzZQorCQlmYWN0b3IgPSBjbGVhbiA+PiAtc2hpZnQ7CisKKwkvKiBVcGRhdGUgdGhlIEZJUiB0YXBzICovCisKKwlvZmZzZXQyID0gZWMtPmN1cnJfcG9zOworCW9mZnNldDEgPSBlYy0+dGFwcyAtIG9mZnNldDI7CisJcGhpc3QgPSAmZWMtPmZpcl9zdGF0ZV9iZy5oaXN0b3J5W29mZnNldDJdOworCisJLyogc3Q6IGFuZCBlbjogaGVscCB1cyBsb2NhdGUgdGhlIGFzc2VtYmxlciBpbiBlY2hvLnMgKi8KKworCS8vYXNtKCJzdDoiKTsKKwluID0gZWMtPnRhcHM7CisJZm9yIChpID0gMCwgaiA9IG9mZnNldDI7IGkgPCBuOyBpKyssIGorKykgeworCQlleHAgPSAqcGhpc3QrKyAqIGZhY3RvcjsKKwkJZWMtPmZpcl90YXBzMTZbMV1baV0gKz0gKGludDE2X3QpICgoZXhwICsgKDEgPDwgMTQpKSA+PiAxNSk7CisJfQorCS8vYXNtKCJlbjoiKTsKKworCS8qIE5vdGUgdGhlIGFzbSBmb3IgdGhlIGlubmVyIGxvb3AgYWJvdmUgZ2VuZXJhdGVkIGJ5IEJsYWNrZmluIGdjYworCSAgIDQuMS4xIGlzIHByZXR0eSBnb29kIChub3RlIGV2ZW4gcGFyYWxsZWwgaW5zdHJ1Y3Rpb25zIHVzZWQpOgorCisJICAgUjAgPSBXIFtQMCsrXSAoWCk7CisJICAgUjAgKj0gUjI7CisJICAgUjAgPSBSMCArIFIzIChOUykgfHwKKwkgICBSMSA9IFcgW1AxXSAoWCkgfHwKKwkgICBub3A7CisJICAgUjAgPj4+PSAxNTsKKwkgICBSMCA9IFIwICsgUjE7CisJICAgVyBbUDErK10gPSBSMDsKKworCSAgIEEgYmxvY2sgYmFzZWQgdXBkYXRlIGFsZ29yaXRobSB3b3VsZCBiZSBtdWNoIGZhc3RlciBidXQgdGhlCisJICAgYWJvdmUgY2FuJ3QgYmUgaW1wcm92ZWQgb24gbXVjaC4gIEV2ZXJ5IGluc3RydWN0aW9uIHNhdmVkIGluCisJICAgdGhlIGxvb3AgYWJvdmUgaXMgMiBNSVBzL2NoISAgVGhlIGZvciBsb29wIGFib3ZlIGlzIHdoZXJlIHRoZQorCSAgIEJsYWNrZmluIHNwZW5kcyBtb3N0IG9mIGl0J3MgdGltZSAtIGFib3V0IDE3IE1JUHMvY2ggbWVhc3VyZWQKKwkgICB3aXRoIHNwZWVkdGVzdC5jIHdpdGggMjU2IHRhcHMgKDMybXMpLiAgV3JpdGUtYmFjayBhbmQKKwkgICBXcml0ZS10aHJvdWdoIGNhY2hlIGdhdmUgYWJvdXQgdGhlIHNhbWUgcGVyZm9ybWFuY2UuCisJICovCit9CisKKy8qCisgICBJREVBUyBmb3IgZnVydGhlciBvcHRpbWlzYXRpb24gb2YgbG1zX2FkYXB0X2JnKCk6CisKKyAgIDEvIFRoZSByb3VuZGluZyBpcyBxdWl0ZSBjb3N0bHkuICBDb3VsZCB3ZSBrZWVwIGFzIDMyIGJpdCBjb2VmZnMKKyAgIHRoZW4gbWFrZSBmaWx0ZXIgcGx1Y2sgdGhlIE1TIDE2LWJpdHMgb2YgdGhlIGNvZWZmcyB3aGVuIGZpbHRlcmluZz8KKyAgIEhvd2V2ZXIgdGhpcyB3b3VsZCBsb3dlciBwb3RlbnRpYWwgb3B0aW1pc2F0aW9uIG9mIGZpbHRlciwgYXMgSQorICAgdGhpbmsgdGhlIGR1YWwtTUFDIGFyY2hpdGVjdHVyZSByZXF1aXJlcyBwYWNrZWQgMTYgYml0IGNvZWZmcy4KKworICAgMi8gQmxvY2sgYmFzZWQgdXBkYXRlIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LCBhcyBwZXIgY29tbWVudHMgYWJvdmUsCisgICBjb3VsZCB1c2UgZHVhbCBNQUMgYXJjaGl0ZWN0dXJlLgorCisgICAzLyBMb29rIGZvciBzYW1lIHNhbXBsZSBCbGFja2ZpbiBMTVMgY29kZSwgc2VlIGlmIHdlIGNhbiBnZXQgZHVhbC1NQUMKKyAgIHBhY2tpbmcuCisKKyAgIDQvIEV4ZWN1dGUgdGhlIHdob2xlIGUvYyBpbiBhIGJsb2NrIG9mIHNheSAyMG1zIHJhdGhlciB0aGFuIHNhbXBsZQorICAgYnkgc2FtcGxlLiAgUHJvY2Vzc2luZyBhIGZldyBzYW1wbGVzIGV2ZXJ5IG1zIGlzIGluZWZmaWNpZW50LgorKi8KKworI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbG1zX2FkYXB0X2JnKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBjbGVhbiwKKwkJCQkgICAgaW50IHNoaWZ0KQoreworCWludCBpOworCisJaW50IG9mZnNldDE7CisJaW50IG9mZnNldDI7CisJaW50IGZhY3RvcjsKKwlpbnQgZXhwOworCisJaWYgKHNoaWZ0ID4gMCkKKwkJZmFjdG9yID0gY2xlYW4gPDwgc2hpZnQ7CisJZWxzZQorCQlmYWN0b3IgPSBjbGVhbiA+PiAtc2hpZnQ7CisKKwkvKiBVcGRhdGUgdGhlIEZJUiB0YXBzICovCisKKwlvZmZzZXQyID0gZWMtPmN1cnJfcG9zOworCW9mZnNldDEgPSBlYy0+dGFwcyAtIG9mZnNldDI7CisKKwlmb3IgKGkgPSBlYy0+dGFwcyAtIDE7IGkgPj0gb2Zmc2V0MTsgaS0tKSB7CisJCWV4cCA9IChlYy0+ZmlyX3N0YXRlX2JnLmhpc3RvcnlbaSAtIG9mZnNldDFdICogZmFjdG9yKTsKKwkJZWMtPmZpcl90YXBzMTZbMV1baV0gKz0gKGludDE2X3QpICgoZXhwICsgKDEgPDwgMTQpKSA+PiAxNSk7CisJfQorCWZvciAoOyBpID49IDA7IGktLSkgeworCQlleHAgPSAoZWMtPmZpcl9zdGF0ZV9iZy5oaXN0b3J5W2kgKyBvZmZzZXQyXSAqIGZhY3Rvcik7CisJCWVjLT5maXJfdGFwczE2WzFdW2ldICs9IChpbnQxNl90KSAoKGV4cCArICgxIDw8IDE0KSkgPj4gMTUpOworCX0KK30KKyNlbmRpZgorCitzdHJ1Y3Qgb3NsZWNfc3RhdGUgKm9zbGVjX2NyZWF0ZShpbnQgbGVuLCBpbnQgYWRhcHRpb25fbW9kZSkKK3sKKwlzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjOworCWludCBpOworCisJZWMgPSBremFsbG9jKHNpemVvZigqZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVjKQorCQlyZXR1cm4gTlVMTDsKKworCWVjLT50YXBzID0gbGVuOworCWVjLT5sb2cydGFwcyA9IHRvcF9iaXQobGVuKTsKKwllYy0+Y3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWVjLT5maXJfdGFwczE2W2ldID0KKwkJICAgIGtjYWxsb2MoZWMtPnRhcHMsIHNpemVvZihpbnQxNl90KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZWMtPmZpcl90YXBzMTZbaV0pCisJCQlnb3RvIGVycm9yX29vbTsKKwl9CisKKwlmaXIxNl9jcmVhdGUoJmVjLT5maXJfc3RhdGUsIGVjLT5maXJfdGFwczE2WzBdLCBlYy0+dGFwcyk7CisJZmlyMTZfY3JlYXRlKCZlYy0+ZmlyX3N0YXRlX2JnLCBlYy0+ZmlyX3RhcHMxNlsxXSwgZWMtPnRhcHMpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQllYy0+eHZ0eFtpXSA9IGVjLT55dnR4W2ldID0gZWMtPnh2cnhbaV0gPSBlYy0+eXZyeFtpXSA9IDA7CisJfQorCisJZWMtPmNuZ19sZXZlbCA9IDEwMDA7CisJb3NsZWNfYWRhcHRpb25fbW9kZShlYywgYWRhcHRpb25fbW9kZSk7CisKKwllYy0+c25hcHNob3QgPSBrY2FsbG9jKGVjLT50YXBzLCBzaXplb2YoaW50MTZfdCksIEdGUF9LRVJORUwpOworCWlmICghZWMtPnNuYXBzaG90KQorCQlnb3RvIGVycm9yX29vbTsKKworCWVjLT5jb25kX21ldCA9IDA7CisJZWMtPlBzdGF0ZXMgPSAwOworCWVjLT5MdHhhY2MgPSBlYy0+THJ4YWNjID0gZWMtPkxjbGVhbmFjYyA9IGVjLT5MY2xlYW5fYmdhY2MgPSAwOworCWVjLT5MdHggPSBlYy0+THJ4ID0gZWMtPkxjbGVhbiA9IGVjLT5MY2xlYW5fYmcgPSAwOworCWVjLT50eF8xID0gZWMtPnR4XzIgPSBlYy0+cnhfMSA9IGVjLT5yeF8yID0gMDsKKwllYy0+TGJnbiA9IGVjLT5MYmduX2FjYyA9IDA7CisJZWMtPkxiZ25fdXBwZXIgPSAyMDA7CisJZWMtPkxiZ25fdXBwZXJfYWNjID0gZWMtPkxiZ25fdXBwZXIgPDwgMTM7CisKKwlyZXR1cm4gZWM7CisKKyAgICAgIGVycm9yX29vbToKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlrZnJlZShlYy0+ZmlyX3RhcHMxNltpXSk7CisKKwlrZnJlZShlYyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKG9zbGVjX2NyZWF0ZSk7CisKK3ZvaWQgb3NsZWNfZnJlZShzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjKQoreworCWludCBpOworCisJZmlyMTZfZnJlZSgmZWMtPmZpcl9zdGF0ZSk7CisJZmlyMTZfZnJlZSgmZWMtPmZpcl9zdGF0ZV9iZyk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJa2ZyZWUoZWMtPmZpcl90YXBzMTZbaV0pOworCWtmcmVlKGVjLT5zbmFwc2hvdCk7CisJa2ZyZWUoZWMpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19mcmVlKTsKKwordm9pZCBvc2xlY19hZGFwdGlvbl9tb2RlKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBhZGFwdGlvbl9tb2RlKQoreworCWVjLT5hZGFwdGlvbl9tb2RlID0gYWRhcHRpb25fbW9kZTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfYWRhcHRpb25fbW9kZSk7CisKK3ZvaWQgb3NsZWNfZmx1c2goc3RydWN0IG9zbGVjX3N0YXRlICplYykKK3sKKwlpbnQgaTsKKworCWVjLT5MdHhhY2MgPSBlYy0+THJ4YWNjID0gZWMtPkxjbGVhbmFjYyA9IGVjLT5MY2xlYW5fYmdhY2MgPSAwOworCWVjLT5MdHggPSBlYy0+THJ4ID0gZWMtPkxjbGVhbiA9IGVjLT5MY2xlYW5fYmcgPSAwOworCWVjLT50eF8xID0gZWMtPnR4XzIgPSBlYy0+cnhfMSA9IGVjLT5yeF8yID0gMDsKKworCWVjLT5MYmduID0gZWMtPkxiZ25fYWNjID0gMDsKKwllYy0+TGJnbl91cHBlciA9IDIwMDsKKwllYy0+TGJnbl91cHBlcl9hY2MgPSBlYy0+TGJnbl91cHBlciA8PCAxMzsKKworCWVjLT5ub251cGRhdGVfZHdlbGwgPSAwOworCisJZmlyMTZfZmx1c2goJmVjLT5maXJfc3RhdGUpOworCWZpcjE2X2ZsdXNoKCZlYy0+ZmlyX3N0YXRlX2JnKTsKKwllYy0+ZmlyX3N0YXRlLmN1cnJfcG9zID0gZWMtPnRhcHMgLSAxOworCWVjLT5maXJfc3RhdGVfYmcuY3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJbWVtc2V0KGVjLT5maXJfdGFwczE2W2ldLCAwLCBlYy0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CisKKwllYy0+Y3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CisJZWMtPlBzdGF0ZXMgPSAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19mbHVzaCk7CisKK3ZvaWQgb3NsZWNfc25hcHNob3Qoc3RydWN0IG9zbGVjX3N0YXRlICplYykKK3sKKwltZW1jcHkoZWMtPnNuYXBzaG90LCBlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPnRhcHMgKiBzaXplb2YoaW50MTZfdCkpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19zbmFwc2hvdCk7CisKKy8qIER1YWwgUGF0aCBFY2hvIENhbmNlbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQxNl90IG9zbGVjX3VwZGF0ZShzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQxNl90IHR4LCBpbnQxNl90IHJ4KQoreworCWludDMyX3QgZWNob192YWx1ZTsKKwlpbnQgY2xlYW5fYmc7CisJaW50IHRtcCwgdG1wMTsKKworCS8qIElucHV0IHNjYWxpbmcgd2FzIGZvdW5kIGJlIHJlcXVpcmVkIHRvIHByZXZlbnQgcHJvYmxlbXMgd2hlbiB0eAorCSAgIHN0YXJ0cyBjbGlwcGluZy4gIEFub3RoZXIgcG9zc2libGUgd2F5IHRvIGhhbmRsZSB0aGlzIHdvdWxkIGJlIHRoZQorCSAgIGZpbHRlciBjb2VmZmljZW50IHNjYWxpbmcuICovCisKKwllYy0+dHggPSB0eDsKKwllYy0+cnggPSByeDsKKwl0eCA+Pj0gMTsKKwlyeCA+Pj0gMTsKKworCS8qCisJICAgRmlsdGVyIERDLCAzZEIgcG9pbnQgaXMgMTYwSHogKEkgdGhpbmspLCBub3RlIDMyIGJpdCBwcmVjaXNpb24gcmVxdWlyZWQKKwkgICBvdGhlcndpc2UgdmFsdWVzIGRvIG5vdCB0cmFjayBkb3duIHRvIDAuIFplcm8gYXQgREMsIFBvbGUgYXQgKDEtQmV0YSkKKwkgICBvbmx5IHJlYWwgYXhpcy4gIFNvbWUgY2hpcCBzZXRzIChsaWtlIFNpIGxhYnMpIGRvbid0IG5lZWQKKwkgICB0aGlzLCBidXQgc29tZXRoaW5nIGxpa2UgYSAkMTAgWDEwMFAgY2FyZCBkb2VzLiAgQW55IERDIHJlYWxseSBzbG93cworCSAgIGRvd24gY29udmVyZ2VuY2UuCisKKwkgICBOb3RlOiByZW1vdmVzIHNvbWUgbG93IGZyZXF1ZW5jeSBmcm9tIHRoZSBzaWduYWwsIHRoaXMgcmVkdWNlcworCSAgIHRoZSBzcGVlY2ggcXVhbGl0eSB3aGVuIGxpc3RlbmluZyB0byBzYW1wbGVzIHRocm91Z2ggaGVhZHBob25lcworCSAgIGJ1dCBtYXkgbm90IGJlIG9idmlvdXMgdGhyb3VnaCBhIHRlbGVwaG9uZSBoYW5kc2V0LgorCisJICAgTm90ZSB0aGF0IHRoZSAzZEIgZnJlcXVlbmN5IGluIHJhZGlhbnMgaXMgYXBwcm94IEJldGEsIGUuZy4gZm9yCisJICAgQmV0YSA9IDJeKC0zKSA9IDAuMTI1LCAzZEIgZnJlcSBpcyAwLjEyNSByYWRzID0gMTU5SHouCisJICovCisKKwlpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfUlhfSFBGKSB7CisJCXRtcCA9IHJ4IDw8IDE1OworI2lmIDEKKwkJLyogTWFrZSBzdXJlIHRoZSBnYWluIG9mIHRoZSBIUEYgaXMgMS4wLiBUaGlzIGNhbiBzdGlsbCBzYXR1cmF0ZSBhIGxpdHRsZSB1bmRlcgorCQkgICBpbXB1bHNlIGNvbmRpdGlvbnMsIGFuZCBpdCBtaWdodCByb2xsIHRvIDMyNzY4IGFuZCBuZWVkIGNsaXBwaW5nIG9uIHN1c3RhaW5lZCBwZWFrCisJCSAgIGxldmVsIHNpZ25hbHMuIEhvd2V2ZXIsIHRoZSBzY2FsZSBvZiBzdWNoIGNsaXBwaW5nIGlzIHNtYWxsLCBhbmQgdGhlIGVycm9yIGR1ZSB0bworCQkgICBhbnkgc2F0dXJhdGlvbiBzaG91bGQgbm90IG1hcmtlZGx5IGFmZmVjdCB0aGUgZG93bnN0cmVhbSBwcm9jZXNzaW5nLiAqLworCQl0bXAgLT0gKHRtcCA+PiA0KTsKKyNlbmRpZgorCQllYy0+cnhfMSArPSAtKGVjLT5yeF8xID4+IERDX0xPRzJCRVRBKSArIHRtcCAtIGVjLT5yeF8yOworCisJCS8qIGhhcmQgbGltaXQgZmlsdGVyIHRvIHByZXZlbnQgY2xpcHBpbmcuICBOb3RlIHRoYXQgYXQgdGhpcyBzdGFnZQorCQkgICByeCBzaG91bGQgYmUgbGltaXRlZCB0byArLy0gMTYzODMgZHVlIHRvIHJpZ2h0IHNoaWZ0IGFib3ZlICovCisJCXRtcDEgPSBlYy0+cnhfMSA+PiAxNTsKKwkJaWYgKHRtcDEgPiAxNjM4MykKKwkJCXRtcDEgPSAxNjM4MzsKKwkJaWYgKHRtcDEgPCAtMTYzODMpCisJCQl0bXAxID0gLTE2MzgzOworCQlyeCA9IHRtcDE7CisJCWVjLT5yeF8yID0gdG1wOworCX0KKworCS8qIEJsb2NrIGF2ZXJhZ2Ugb2YgcG93ZXIgaW4gdGhlIGZpbHRlciBzdGF0ZXMuICBVc2VkIGZvcgorCSAgIGFkYXB0aW9uIHBvd2VyIGNhbGN1bGF0aW9uLiAqLworCisJeworCQlpbnQgbmV3LCBvbGQ7CisKKwkJLyogZWZmaWNpZW50ICJvdXQgd2l0aCB0aGUgb2xkIGFuZCBpbiB3aXRoIHRoZSBuZXciIGFsZ29yaXRobSBzbworCQkgICB3ZSBkb24ndCBoYXZlIHRvIHJlY2FsY3VsYXRlIG92ZXIgdGhlIHdob2xlIGJsb2NrIG9mCisJCSAgIHNhbXBsZXMuICovCisJCW5ldyA9IChpbnQpdHggKihpbnQpdHg7CisJCW9sZCA9IChpbnQpZWMtPmZpcl9zdGF0ZS5oaXN0b3J5W2VjLT5maXJfc3RhdGUuY3Vycl9wb3NdICoKKwkJICAgIChpbnQpZWMtPmZpcl9zdGF0ZS5oaXN0b3J5W2VjLT5maXJfc3RhdGUuY3Vycl9wb3NdOworCQllYy0+UHN0YXRlcyArPQorCQkgICAgKChuZXcgLSBvbGQpICsgKDEgPDwgZWMtPmxvZzJ0YXBzKSkgPj4gZWMtPmxvZzJ0YXBzOworCQlpZiAoZWMtPlBzdGF0ZXMgPCAwKQorCQkJZWMtPlBzdGF0ZXMgPSAwOworCX0KKworCS8qIENhbGN1bGF0ZSBzaG9ydCB0ZXJtIGF2ZXJhZ2UgbGV2ZWxzIHVzaW5nIHNpbXBsZSBzaW5nbGUgcG9sZSBJSVJzICovCisKKwllYy0+THR4YWNjICs9IGFicyh0eCkgLSBlYy0+THR4OworCWVjLT5MdHggPSAoZWMtPkx0eGFjYyArICgxIDw8IDQpKSA+PiA1OworCWVjLT5McnhhY2MgKz0gYWJzKHJ4KSAtIGVjLT5Mcng7CisJZWMtPkxyeCA9IChlYy0+THJ4YWNjICsgKDEgPDwgNCkpID4+IDU7CisKKwkvKiBGb3JlZ3JvdW5kIGZpbHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCWVjLT5maXJfc3RhdGUuY29lZmZzID0gZWMtPmZpcl90YXBzMTZbMF07CisJZWNob192YWx1ZSA9IGZpcjE2KCZlYy0+ZmlyX3N0YXRlLCB0eCk7CisJZWMtPmNsZWFuID0gcnggLSBlY2hvX3ZhbHVlOworCWVjLT5MY2xlYW5hY2MgKz0gYWJzKGVjLT5jbGVhbikgLSBlYy0+TGNsZWFuOworCWVjLT5MY2xlYW4gPSAoZWMtPkxjbGVhbmFjYyArICgxIDw8IDQpKSA+PiA1OworCisJLyogQmFja2dyb3VuZCBmaWx0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwllY2hvX3ZhbHVlID0gZmlyMTYoJmVjLT5maXJfc3RhdGVfYmcsIHR4KTsKKwljbGVhbl9iZyA9IHJ4IC0gZWNob192YWx1ZTsKKwllYy0+TGNsZWFuX2JnYWNjICs9IGFicyhjbGVhbl9iZykgLSBlYy0+TGNsZWFuX2JnOworCWVjLT5MY2xlYW5fYmcgPSAoZWMtPkxjbGVhbl9iZ2FjYyArICgxIDw8IDQpKSA+PiA1OworCisJLyogQmFja2dyb3VuZCBGaWx0ZXIgYWRhcHRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIEFsbW9zdCBhbHdheXMgYWRhcCBiZyBmaWx0ZXIsIGp1c3Qgc2ltcGxlIERUIGFuZCBlbmVyZ3kKKwkgICBkZXRlY3Rpb24gdG8gbWluaW1pc2UgYWRhcHRpb24gaW4gY2FzZXMgb2Ygc3Ryb25nIGRvdWJsZSB0YWxrLgorCSAgIEhvd2V2ZXIgdGhpcyBpcyBub3QgY3JpdGljYWwgZm9yIHRoZSBkdWFsIHBhdGggYWxnb3JpdGhtLgorCSAqLworCWVjLT5mYWN0b3IgPSAwOworCWVjLT5zaGlmdCA9IDA7CisJaWYgKChlYy0+bm9udXBkYXRlX2R3ZWxsID09IDApKSB7CisJCWludCBQLCBsb2dQLCBzaGlmdDsKKworCQkvKiBEZXRlcm1pbmU6CisKKwkJICAgZiA9IEJldGEgKiBjbGVhbl9iZ19yeC9QIC0tLS0tLSAoMSkKKworCQkgICB3aGVyZSBQIGlzIHRoZSB0b3RhbCBwb3dlciBpbiB0aGUgZmlsdGVyIHN0YXRlcy4KKworCQkgICBUaGUgQm9mZmlucyBoYXZlIHNob3duIHRoYXQgaWYgd2Ugb2JleSAoMSkgd2UgY29udmVyZ2UKKwkJICAgcXVpY2tseSBhbmQgYXZvaWQgaW5zdGFiaWxpdHkuCisKKwkJICAgVGhlIGNvcnJlY3QgZmFjdG9yIGYgbXVzdCBiZSBpbiBRMzAsIGFzIHRoaXMgaXMgdGhlIGZpeGVkCisJCSAgIHBvaW50IGZvcm1hdCByZXF1aXJlZCBieSB0aGUgbG1zX2FkYXB0X2JnKCkgZnVuY3Rpb24sCisJCSAgIHRoZXJlZm9yZSB0aGUgc2NhbGVkIHZlcnNpb24gb2YgKDEpIGlzOgorCisJCSAgICgyXjMwKSAqIGYgID0gKDJeMzApICogQmV0YSAqIGNsZWFuX2JnX3J4L1AKKwkJICAgZmFjdG9yICA9ICgyXjMwKSAqIEJldGEgKiBjbGVhbl9iZ19yeC9QICAgICAgICAgLS0tLS0gKDIpCisKKwkJICAgV2UgaGF2ZSBjaG9zZW4gQmV0YSA9IDAuMjUgYnkgZXhwZXJpbWVudCwgc286CisKKwkJICAgZmFjdG9yICA9ICgyXjMwKSAqICgyXi0yKSAqIGNsZWFuX2JnX3J4L1AKKworCQkgICAoMzAgLSAyIC0gbG9nMihQKSkKKwkJICAgZmFjdG9yICA9IGNsZWFuX2JnX3J4IDIgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gKDMpCisKKwkJICAgVG8gYXZvaWQgYSBkaXZpZGUgd2UgYXBwcm94aW1hdGUgbG9nMihQKSBhcyB0b3BfYml0KFApLAorCQkgICB3aGljaCByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgaGlnaGVzdCBub24temVybyBiaXQgaW4KKwkJICAgUC4gIFRoaXMgYXBwcm94aW1hdGlvbiBpbnRyb2R1Y2VzIGFuIGVycm9yIGFzIGxhcmdlIGFzIGEKKwkJICAgZmFjdG9yIG9mIDIsIGJ1dCB0aGUgYWxnb3JpdGhtIHNlZW1zIHRvIGhhbmRsZSBpdCBPSy4KKworCQkgICBDb21lIHRvIHRoaW5rIG9mIGl0IGEgZGl2aWRlIG1heSBub3QgYmUgYSBiaWcgZGVhbCBvbiBhCisJCSAgIG1vZGVybiBEU1AsIHNvIGl0cyBwcm9iYWJseSB3b3J0aCBjaGVja2luZyBvdXQgdGhlIGN5Y2xlcworCQkgICBmb3IgYSBkaXZpZGUgdmVyc3VzIGEgdG9wX2JpdCgpIGltcGxlbWVudGF0aW9uLgorCQkgKi8KKworCQlQID0gTUlOX1RYX1BPV0VSX0ZPUl9BREFQVElPTiArIGVjLT5Qc3RhdGVzOworCQlsb2dQID0gdG9wX2JpdChQKSArIGVjLT5sb2cydGFwczsKKwkJc2hpZnQgPSAzMCAtIDIgLSBsb2dQOworCQllYy0+c2hpZnQgPSBzaGlmdDsKKworCQlsbXNfYWRhcHRfYmcoZWMsIGNsZWFuX2JnLCBzaGlmdCk7CisJfQorCisJLyogdmVyeSBzaW1wbGUgRFREIHRvIG1ha2Ugc3VyZSB3ZSBkb250IHRyeSBhbmQgYWRhcHQgd2l0aCBzdHJvbmcKKwkgICBuZWFyIGVuZCBzcGVlY2ggKi8KKworCWVjLT5hZGFwdCA9IDA7CisJaWYgKChlYy0+THJ4ID4gTUlOX1JYX1BPV0VSX0ZPUl9BREFQVElPTikgJiYgKGVjLT5McnggPiBlYy0+THR4KSkKKwkJZWMtPm5vbnVwZGF0ZV9kd2VsbCA9IERURF9IQU5HT1ZFUjsKKwlpZiAoZWMtPm5vbnVwZGF0ZV9kd2VsbCkKKwkJZWMtPm5vbnVwZGF0ZV9kd2VsbC0tOworCisJLyogVHJhbnNmZXIgbG9naWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvKiBUaGVzZSBjb25kaXRpb25zIGFyZSBmcm9tIHRoZSBkdWFsIHBhdGggcGFwZXIgWzFdLCBJIG1lc3NlZCB3aXRoCisJICAgdGhlbSBhIGJpdCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiAqLworCisJaWYgKChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9BREFQVElPTikgJiYKKwkgICAgKGVjLT5ub251cGRhdGVfZHdlbGwgPT0gMCkgJiYKKwkgICAgKDggKiBlYy0+TGNsZWFuX2JnIDwKKwkgICAgIDcgKiBlYy0+TGNsZWFuKSAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuODc1KmVjLT5MY2xlYW4pICovICYmCisJICAgICg4ICogZWMtPkxjbGVhbl9iZyA8CisJICAgICBlYy0+THR4KSAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuMTI1KmVjLT5MdHgpICAgICovICkgeworCQlpZiAoZWMtPmNvbmRfbWV0ID09IDYpIHsKKwkJCS8qIEJHIGZpbHRlciBoYXMgaGFkIGJldHRlciByZXN1bHRzIGZvciA2IGNvbnNlY3V0aXZlIHNhbXBsZXMgKi8KKwkJCWVjLT5hZGFwdCA9IDE7CisJCQltZW1jcHkoZWMtPmZpcl90YXBzMTZbMF0sIGVjLT5maXJfdGFwczE2WzFdLAorCQkJICAgICAgIGVjLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKKwkJfSBlbHNlCisJCQllYy0+Y29uZF9tZXQrKzsKKwl9IGVsc2UKKwkJZWMtPmNvbmRfbWV0ID0gMDsKKworCS8qIE5vbi1MaW5lYXIgUHJvY2Vzc2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCWVjLT5jbGVhbl9ubHAgPSBlYy0+Y2xlYW47CisJaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX05MUCkgeworCQkvKiBOb24tbGluZWFyIHByb2Nlc3NvciAtIGEgZmFuY3kgd2F5IHRvIHNheSAiemFwIHNtYWxsIHNpZ25hbHMsIHRvIGF2b2lkCisJCSAgIHJlc2lkdWFsIGVjaG8gZHVlIHRvICh1TGF3L0FMYXcpIG5vbi1saW5lYXJpdHkgaW4gdGhlIGNoYW5uZWwuIi4gKi8KKworCQlpZiAoKDE2ICogZWMtPkxjbGVhbiA8IGVjLT5MdHgpKSB7CisJCQkvKiBPdXIgZS9jIGhhcyBpbXByb3ZlZCBlY2hvIGJ5IGF0IGxlYXN0IDI0IGRCIChlYWNoIGZhY3RvciBvZiAyIGlzIDZkQiwKKwkJCSAgIHNvIDIqMioyKjI9MTYgaXMgdGhlIHNhbWUgYXMgNis2KzYrNj0yNGRCKSAqLworCQkJaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX0NORykgeworCQkJCWVjLT5jbmdfbGV2ZWwgPSBlYy0+TGJnbjsKKworCQkJCS8qIFZlcnkgZWxlbWVudGFyeSBjb21mb3J0IG5vaXNlIGdlbmVyYXRpb24uICBKdXN0IHJhbmRvbQorCQkJCSAgIG51bWJlcnMgcm9sbGVkIG9mZiB2ZXJ5IHZhZ3VlbHkgSG90aC1saWtlLiAgRFI6IFRoaXMKKwkJCQkgICBub2lzZSBkb2Vzbid0IHNvdW5kIHF1aXRlIHJpZ2h0IHRvIG1lIC0gSSBzdXNwZWN0IHRoZXJlCisJCQkJICAgYXJlIHNvbWUgb3Zlcmxmb3cgaXNzdWVzIGluIHRoZSBmaWx0ZXJpbmcgYXMgaXQncyB0b28KKwkJCQkgICAiY3JhY2tseSIuICBUT0RPOiBkZWJ1ZyB0aGlzLCBtYXliZSBqdXN0IHBsYXkgbm9pc2UgYXQKKwkJCQkgICBoaWdoIGxldmVsIG9yIGxvb2sgYXQgc3BlY3RydW0uCisJCQkJICovCisKKwkJCQllYy0+Y25nX3JuZG51bSA9CisJCQkJICAgIDE2NjQ1MjVVICogZWMtPmNuZ19ybmRudW0gKyAxMDEzOTA0MjIzVTsKKwkJCQllYy0+Y25nX2ZpbHRlciA9CisJCQkJICAgICgoZWMtPmNuZ19ybmRudW0gJiAweEZGRkYpIC0gMzI3NjggKworCQkJCSAgICAgNSAqIGVjLT5jbmdfZmlsdGVyKSA+PiAzOworCQkJCWVjLT5jbGVhbl9ubHAgPQorCQkJCSAgICAoZWMtPmNuZ19maWx0ZXIgKiBlYy0+Y25nX2xldmVsICogOCkgPj4gMTQ7CisKKwkJCX0gZWxzZSBpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfQ0xJUCkgeworCQkJCS8qIFRoaXMgc291bmRzIG11Y2ggYmV0dGVyIHRoYW4gQ05HICovCisJCQkJaWYgKGVjLT5jbGVhbl9ubHAgPiBlYy0+TGJnbikKKwkJCQkJZWMtPmNsZWFuX25scCA9IGVjLT5MYmduOworCQkJCWlmIChlYy0+Y2xlYW5fbmxwIDwgLWVjLT5MYmduKQorCQkJCQllYy0+Y2xlYW5fbmxwID0gLWVjLT5MYmduOworCQkJfSBlbHNlIHsKKwkJCQkvKiBqdXN0IG11dGUgdGhlIHJlc2lkdWFsLCBkb2Vzbid0IHNvdW5kIHZlcnkgZ29vZCwgdXNlZCBtYWlubHkKKwkJCQkgICBpbiBHMTY4IHRlc3RzICovCisJCQkJZWMtPmNsZWFuX25scCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBCYWNrZ3JvdW5kIG5vaXNlIGVzdGltYXRvci4gIEkgdHJpZWQgYSBmZXcgYWxnb3JpdGhtcworCQkJICAgaGVyZSB3aXRob3V0IG11Y2ggbHVjay4gIFRoaXMgdmVyeSBzaW1wbGUgb25lIHNlZW1zIHRvCisJCQkgICB3b3JrIGJlc3QsIHdlIGp1c3QgYXZlcmFnZSB0aGUgbGV2ZWwgdXNpbmcgYSBzbG93ICgxIHNlYworCQkJICAgdGltZSBjb25zdCkgZmlsdGVyIGlmIHRoZSBjdXJyZW50IGxldmVsIGlzIGxlc3MgdGhhbiBhCisJCQkgICAoZXhwZXJpbWVudGFsbHkgZGVyaXZlZCkgY29uc3RhbnQuICBUaGlzIG1lYW5zIHdlIGRvbnQKKwkJCSAgIGluY2x1ZGUgaGlnaCBsZXZlbCBzaWduYWxzIGxpa2UgbmVhciBlbmQgc3BlZWNoLiAgV2hlbgorCQkJICAgY29tYmluZWQgd2l0aCBDTkcgb3IgZXNwZWNpYWxseSBDTElQIHNlZW1zIHRvIHdvcmsgT0suCisJCQkgKi8KKwkJCWlmIChlYy0+TGNsZWFuIDwgNDApIHsKKwkJCQllYy0+TGJnbl9hY2MgKz0gYWJzKGVjLT5jbGVhbikgLSBlYy0+TGJnbjsKKwkJCQllYy0+TGJnbiA9IChlYy0+TGJnbl9hY2MgKyAoMSA8PCAxMSkpID4+IDEyOworCQkJfQorCQl9CisJfQorCisJLyogUm9sbCBhcm91bmQgdGhlIHRhcHMgYnVmZmVyICovCisJaWYgKGVjLT5jdXJyX3BvcyA8PSAwKQorCQllYy0+Y3Vycl9wb3MgPSBlYy0+dGFwczsKKwllYy0+Y3Vycl9wb3MtLTsKKworCWlmIChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX0RJU0FCTEUpCisJCWVjLT5jbGVhbl9ubHAgPSByeDsKKworCS8qIE91dHB1dCBzY2FsZWQgYmFjayB1cCBhZ2FpbiB0byBtYXRjaCBpbnB1dCBzY2FsaW5nICovCisKKwlyZXR1cm4gKGludDE2X3QpIGVjLT5jbGVhbl9ubHAgPDwgMTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfdXBkYXRlKTsKKworLyogVGhpcyBmdW5jdGlvbiBpcyBzZXBlcmF0ZWQgZnJvbSB0aGUgZWNobyBjYW5jZWxsZXIgaXMgaXQgaXMgdXN1YWxseSBjYWxsZWQKKyAgIGFzIHBhcnQgb2YgdGhlIHR4IHByb2Nlc3MuICBTZWUgcnggSFAgKERDIGJsb2NraW5nKSBmaWx0ZXIgYWJvdmUsIGl0J3MKKyAgIHRoZSBzYW1lIGRlc2lnbi4KKworICAgU29tZSBzb2Z0IHBob25lcyBzZW5kIHNwZWVjaCBzaWduYWxzIHdpdGggYSBsb3Qgb2YgbG93IGZyZXF1ZW5jeQorICAgZW5lcmd5LCBlLmcuIGRvd24gdG8gMjBIei4gIFRoaXMgY2FuIG1ha2UgdGhlIGh5YnJpZCBub24tbGluZWFyCisgICB3aGljaCBjYXVzZXMgdGhlIGVjaG8gY2FuY2VsbGVyIHRvIGZhbGwgb3Zlci4gIFRoaXMgZmlsdGVyIGNhbiBoZWxwCisgICBieSByZW1vdmluZyBhbnkgbG93IGZyZXF1ZW5jeSBiZWZvcmUgaXQgZ2V0cyB0byB0aGUgdHggcG9ydCBvZiB0aGUKKyAgIGh5YnJpZC4KKworICAgSXQgY2FuIGFsc28gaGVscCBieSByZW1vdmluZyBhbmQgREMgaW4gdGhlIHR4IHNpZ25hbC4gIERDIGlzIGJhZAorICAgZm9yIExNUyBhbGdvcml0aG1zLgorCisgICBUaGlzIGlzIG9uZSBvZiB0aGUgY2xhc3NpYyBEQyByZW1vdmFsIGZpbHRlcnMsIGFkanVzdGVkIHRvIHByb3ZpZGUgc3VmZmljaWVudAorICAgYmFzcyByb2xsb2ZmIHRvIG1lZXQgdGhlIGFib3ZlIHJlcXVpcmVtZW50IHRvIHByb3RlY3QgaHlicmlkcyBmcm9tIHRoaW5ncyB0aGF0CisgICB1cHNldCB0aGVtLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc2FtcGxlcyBwcm9kdWNlcyBhIGxvdXN5IEhQRiwgYW5kCisgICB0aGVuIGEgc3VpdGFibHkgcGxhY2VkIHBvbGUgZmxhdHRlbnMgdGhpbmdzIG91dC4gVGhlIGZpbmFsIHJlc3VsdCBpcyBhIG5pY2VseQorICAgcm9sbGVkIG9mZiBiYXNzIGVuZC4gVGhlIGZpbHRlcmluZyBpcyBpbXBsZW1lbnRlZCB3aXRoIGV4dGVuZGVkIGZyYWN0aW9uYWwKKyAgIHByZWNpc2lvbiwgd2hpY2ggbm9pc2Ugc2hhcGVzIHRoaW5ncywgZ2l2aW5nIHZlcnkgY2xlYW4gREMgcmVtb3ZhbC4KKyovCisKK2ludDE2X3Qgb3NsZWNfaHBmX3R4KHN0cnVjdCBvc2xlY19zdGF0ZSAqIGVjLCBpbnQxNl90IHR4KQoreworCWludCB0bXAsIHRtcDE7CisKKwlpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfVFhfSFBGKSB7CisJCXRtcCA9IHR4IDw8IDE1OworI2lmIDEKKwkJLyogTWFrZSBzdXJlIHRoZSBnYWluIG9mIHRoZSBIUEYgaXMgMS4wLiBUaGUgZmlyc3QgY2FuIHN0aWxsIHNhdHVyYXRlIGEgbGl0dGxlIHVuZGVyCisJCSAgIGltcHVsc2UgY29uZGl0aW9ucywgYW5kIGl0IG1pZ2h0IHJvbGwgdG8gMzI3NjggYW5kIG5lZWQgY2xpcHBpbmcgb24gc3VzdGFpbmVkIHBlYWsKKwkJICAgbGV2ZWwgc2lnbmFscy4gSG93ZXZlciwgdGhlIHNjYWxlIG9mIHN1Y2ggY2xpcHBpbmcgaXMgc21hbGwsIGFuZCB0aGUgZXJyb3IgZHVlIHRvCisJCSAgIGFueSBzYXR1cmF0aW9uIHNob3VsZCBub3QgbWFya2VkbHkgYWZmZWN0IHRoZSBkb3duc3RyZWFtIHByb2Nlc3NpbmcuICovCisJCXRtcCAtPSAodG1wID4+IDQpOworI2VuZGlmCisJCWVjLT50eF8xICs9IC0oZWMtPnR4XzEgPj4gRENfTE9HMkJFVEEpICsgdG1wIC0gZWMtPnR4XzI7CisJCXRtcDEgPSBlYy0+dHhfMSA+PiAxNTsKKwkJaWYgKHRtcDEgPiAzMjc2NykKKwkJCXRtcDEgPSAzMjc2NzsKKwkJaWYgKHRtcDEgPCAtMzI3NjcpCisJCQl0bXAxID0gLTMyNzY3OworCQl0eCA9IHRtcDE7CisJCWVjLT50eF8yID0gdG1wOworCX0KKworCXJldHVybiB0eDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfaHBmX3R4KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgUm93ZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPcGVuIFNvdXJjZSBMaW5lIEVjaG8gQ2FuY2VsbGVyIik7CitNT0RVTEVfVkVSU0lPTigiMC4zLjAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI5NTQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogU3BhbkRTUCAtIGEgc2VyaWVzIG9mIERTUCBjb21wb25lbnRzIGZvciB0ZWxlcGhvbnkKKyAqCisgKiBlY2hvLmMgLSBBIGxpbmUgZWNobyBjYW5jZWxsZXIuICBUaGlzIGNvZGUgaXMgYmVpbmcgZGV2ZWxvcGVkCisgKiAgICAgICAgICBhZ2FpbnN0IGFuZCBwYXJ0aWFsbHkgY29tcGxpZXMgd2l0aCBHMTY4LgorICoKKyAqIFdyaXR0ZW4gYnkgU3RldmUgVW5kZXJ3b29kIDxzdGV2ZXVAY29wcGljZS5vcmc+CisgKiAgICAgICAgIGFuZCBEYXZpZCBSb3dlIDxkYXZpZF9hdF9yb3dldGVsX2RvdF9jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFN0ZXZlIFVuZGVyd29vZCBhbmQgMjAwNyBEYXZpZCBSb3dlCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogJElkOiBlY2hvLmgsdiAxLjkgMjAwNi8xMC8yNCAxMzo0NToyOCBzdGV2ZXUgRXhwICQKKyAqLworCisjaWZuZGVmIF9fRUNIT19ICisjZGVmaW5lIF9fRUNIT19ICisKKy8qISBccGFnZSBlY2hvX2Nhbl9wYWdlIExpbmUgZWNobyBjYW5jZWxsYXRpb24gZm9yIHZvaWNlCisKK1xzZWN0aW9uIGVjaG9fY2FuX3BhZ2Vfc2VjXzEgV2hhdCBkb2VzIGl0IGRvPworVGhpcyBtb2R1bGUgYWltcyB0byBwcm92aWRlIEcuMTY4LTIwMDIgY29tcGxpYW50IGVjaG8gY2FuY2VsbGF0aW9uLCB0byByZW1vdmUKK2VsZWN0cmljYWwgZWNob2VzIChlLmcuIGZyb20gMi00IHdpcmUgaHlicmlkcykgZnJvbSB2b2ljZSBjYWxscy4KKworXHNlY3Rpb24gZWNob19jYW5fcGFnZV9zZWNfMiBIb3cgZG9lcyBpdCB3b3JrPworVGhlIGhlYXJ0IG9mIHRoZSBlY2hvIGNhbmNlbGxvciBpcyBGSVIgZmlsdGVyLiBUaGlzIGlzIGFkYXB0ZWQgdG8gbWF0Y2ggdGhlCitlY2hvIGltcHVsc2UgcmVzcG9uc2Ugb2YgdGhlIHRlbGVwaG9uZSBsaW5lLiBJdCBtdXN0IGJlIGxvbmcgZW5vdWdoIHRvCithZGVxdWF0ZWx5IGNvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGF0IGltcHVsc2UgcmVzcG9uc2UuIFRoZSBzaWduYWwgdHJhbnNtaXR0ZWQKK3RvIHRoZSB0ZWxlcGhvbmUgbGluZSBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgRklSIGZpbHRlci4gT25jZSB0aGUgRklSIGlzCitwcm9wZXJseSBhZGFwdGVkLCB0aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBhbiBlc3RpbWF0ZSBvZiB0aGUgZWNobyBzaWduYWwKK3JlY2VpdmVkIGZyb20gdGhlIGxpbmUuIFRoaXMgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSByZWNlaXZlZCBzaWduYWwuIFRoZSByZXN1bHQKK2lzIGFuIGVzdGltYXRlIG9mIHRoZSBzaWduYWwgd2hpY2ggb3JpZ2luYXRlZCBhdCB0aGUgZmFyIGVuZCBvZiB0aGUgbGluZSwgZnJlZQorZnJvbSBlY2hvcyBvZiBvdXIgb3duIHRyYW5zbWl0dGVkIHNpZ25hbC4KKworVGhlIGxlYXN0IG1lYW4gc3F1YXJlcyAoTE1TKSBhbGdvcml0aG0gaXMgYXR0cmlidXRlZCB0byBXaWRyb3cgYW5kIEhvZmYsIGFuZAord2FzIGludHJvZHVjZWQgaW4gMTk2MC4gSXQgaXMgdGhlIGNvbW1vbmVzdCBmb3JtIG9mIGZpbHRlciBhZGFwdGlvbiB1c2VkIGluCit0aGluZ3MgbGlrZSBtb2RlbSBsaW5lIGVxdWFsaXNlcnMgYW5kIGxpbmUgZWNobyBjYW5jZWxsZXJzLiBUaGVyZSBpdCB3b3JrcyB2ZXJ5Cit3ZWxsLiAgSG93ZXZlciwgaXQgb25seSB3b3JrcyB3ZWxsIGZvciBzaWduYWxzIG9mIGNvbnN0YW50IGFtcGxpdHVkZS4gSXQgd29ya3MKK3ZlcnkgcG9vcmx5IGZvciB0aGluZ3MgbGlrZSBzcGVlY2ggZWNobyBjYW5jZWxsYXRpb24sIHdoZXJlIHRoZSBzaWduYWwgbGV2ZWwKK3ZhcmllcyB3aWRlbHkuICBUaGlzIGlzIHF1aXRlIGVhc3kgdG8gZml4LiBJZiB0aGUgc2lnbmFsIGxldmVsIGlzIG5vcm1hbGlzZWQgLQorc2ltaWxhciB0byBhcHBseWluZyBBR0MgLSBMTVMgY2FuIHdvcmsgYXMgd2VsbCBmb3IgYSBzaWduYWwgb2YgdmFyeWluZworYW1wbGl0dWRlIGFzIGl0IGRvZXMgZm9yIGEgbW9kZW0gc2lnbmFsLiBUaGlzIG5vcm1hbGlzZWQgbGVhc3QgbWVhbiBzcXVhcmVzCisoTkxNUykgYWxnb3JpdGhtIGlzIHRoZSBjb21tb25lc3Qgb25lIHVzZWQgZm9yIHNwZWVjaCBlY2hvIGNhbmNlbGxhdGlvbi4gTWFueQorb3RoZXIgYWxnb3JpdGhtcyBleGlzdCAtIGUuZy4gUkxTIChlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBLYWxtYW4gZmlsdGVyaW5nKSwKK0ZBUCwgZXRjLiBTb21lIHBlcmZvcm0gc2lnbmlmaWNhbnRseSBiZXR0ZXIgdGhhbiBOTE1TLiAgSG93ZXZlciwgZmFjdG9ycyBzdWNoCithcyBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgYW5kIHBhdGVudHMgZmF2b3VyIHRoZSB1c2Ugb2YgTkxNUy4KKworQSBzaW1wbGUgcmVmaW5lbWVudCB0byBOTE1TIGNhbiBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSB3aXRoIHNwZWVjaC4gTkxNUyB0ZW5kcwordG8gYWRhcHQgYmVzdCB0byB0aGUgc3Ryb25nZXN0IHBhcnRzIG9mIGEgc2lnbmFsLiBJZiB0aGUgc2lnbmFsIGlzIHdoaXRlIG5vaXNlLAordGhlIE5MTVMgYWxnb3JpdGhtIHdvcmtzIHZlcnkgd2VsbC4gSG93ZXZlciwgc3BlZWNoIGhhcyBtb3JlIGxvdyBmcmVxdWVuY3kgdGhhbgoraGlnaCBmcmVxdWVuY3kgY29udGVudC4gUHJlLXdoaXRlbmluZyAoaS5lLiBmaWx0ZXJpbmcgdGhlIHNpZ25hbCB0byBmbGF0dGVuIGl0cworc3BlY3RydW0pIHRoZSBlY2hvIHNpZ25hbCBpbXByb3ZlcyB0aGUgYWRhcHQgcmF0ZSBmb3Igc3BlZWNoLCBhbmQgZW5zdXJlcyB0aGUKK2ZpbmFsIHJlc2lkdWFsIHNpZ25hbCBpcyBub3QgaGVhdmlseSBiaWFzZWQgdG93YXJkcyBoaWdoIGZyZXF1ZW5jaWVzLiBBIHZlcnkKK2xvdyBjb21wbGV4aXR5IGZpbHRlciBpcyBhZGVxdWF0ZSBmb3IgdGhpcywgc28gcHJlLXdoaXRlbmluZyBhZGRzIGxpdHRsZSB0byB0aGUKK2NvbXB1dGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBlY2hvIGNhbmNlbGxlci4KKworQW4gRklSIGZpbHRlciBhZGFwdGVkIHVzaW5nIHByZS13aGl0ZW5lZCBOTE1TIHBlcmZvcm1zIHdlbGwsIHByb3ZpZGVkIGNlcnRhaW4KK2NvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgIC0gVGhlIHRyYW5zbWl0dGVkIHNpZ25hbCBoYXMgcG9vciBzZWxmLWNvcnJlbGF0aW9uLgorICAgIC0gVGhlcmUgaXMgbm8gc2lnbmFsIGJlaW5nIGdlbmVyYXRlZCB3aXRoaW4gdGhlIGVudmlyb25tZW50IGJlaW5nCisgICAgICBjYW5jZWxsZWQuCisKK1RoZSBkaWZmaWN1bHR5IGlzIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBjYW4gYmUgZ3VhcmFudGVlZC4KKworSWYgdGhlIGFkYXB0aW9uIGlzIHBlcmZvcm1lZCB3aGlsZSB0cmFuc21pdHRpbmcgbm9pc2UgKG9yIHNvbWV0aGluZyBmYWlybHkKK25vaXNlIGxpa2UsIHN1Y2ggYXMgdm9pY2UpIHRoZSBhZGFwdGlvbiB3b3JrcyB2ZXJ5IHdlbGwuIElmIHRoZSBhZGFwdGlvbiBpcworcGVyZm9ybWVkIHdoaWxlIHRyYW5zbWl0dGluZyBzb21ldGhpbmcgaGlnaGx5IGNvcnJlbGF0aXZlICh0eXBpY2FsbHkgbmFycm93CitiYW5kIGVuZXJneSBzdWNoIGFzIHNpZ25hbGxpbmcgdG9uZXMgb3IgRFRNRiksIHRoZSBhZGFwdGlvbiBjYW4gZ28gc2VyaW91c2x5Cit3cm9uZy4gVGhlIHJlYXNvbiBpcyB0aGVyZSBpcyBvbmx5IG9uZSBzb2x1dGlvbiBmb3IgdGhlIGFkYXB0aW9uIG9uIGEgbmVhcgorcmFuZG9tIHNpZ25hbCAtIHRoZSBpbXB1bHNlIHJlc3BvbnNlIG9mIHRoZSBsaW5lLiBGb3IgYSByZXBldGl0aXZlIHNpZ25hbCwKK3RoZXJlIGFyZSBhbnkgbnVtYmVyIG9mIHNvbHV0aW9ucyB3aGljaCBjb252ZXJnZSB0aGUgYWRhcHRpb24sIGFuZCBub3RoaW5nCitndWlkZXMgdGhlIGFkYXB0aW9uIHRvIGNob29zZSB0aGUgZ2VuZXJhbGlzZWQgb25lLiBBbGxvd2luZyBhbiB1bnRyYWluZWQKK2NhbmNlbGxlciB0byBjb252ZXJnZSBvbiB0aGlzIGtpbmQgb2YgbmFycm93YmFuZCBlbmVyZ3kgcHJvYmFibHkgYSBnb29kIHRoaW5nLAorc2luY2UgYXQgbGVhc3QgaXQgY2FuY2VscyB0aGUgdG9uZXMuIEFsbG93aW5nIGEgd2VsbCBjb252ZXJnZWQgY2FuY2VsbGVyIHRvCitjb250aW51ZSBjb252ZXJnaW5nIG9uIHN1Y2ggZW5lcmd5IGlzIGp1c3QgYSB3YXkgdG8gcnVpbiBpdHMgZ2VuZXJhbGlzZWQKK2FkYXB0aW9uLiBBIG5hcnJvd2JhbmQgZGV0ZWN0b3IgaXMgbmVlZGVkLCBzbyBhZGFwYXRpb24gY2FuIGJlIHN1c3BlbmRlZCBhdAorYXBwcm9wcmlhdGUgdGltZXMuCisKK1RoZSBhZGFwdGlvbiBwcm9jZXNzIGlzIGJhc2VkIG9uIHRyeWluZyB0byBlbGltaW5hdGUgdGhlIHJlY2VpdmVkIHNpZ25hbC4gV2hlbgordGhlcmUgaXMgYW55IHNpZ25hbCBmcm9tIHdpdGhpbiB0aGUgZW52aXJvbm1lbnQgYmVpbmcgY2FuY2VsbGVkIGl0IG1heSB1cHNldAordGhlIGFkYXB0aW9uIHByb2Nlc3MuIFNpbWlsYXJseSwgaWYgdGhlIHNpZ25hbCB3ZSBhcmUgdHJhbnNtaXR0aW5nIGlzIHNtYWxsLAorbm9pc2UgbWF5IGRvbWluYXRlIGFuZCBkaXN0dXJiIHRoZSBhZGFwdGlvbiBwcm9jZXNzLiBJZiB3ZSBjYW4gZW5zdXJlIHRoYXQgdGhlCithZGFwdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCB3aGVuIHdlIGFyZSB0cmFuc21pdHRpbmcgYSBzaWduaWZpY2FudCBzaWduYWwgbGV2ZWwsCithbmQgdGhlIGVudmlyb25tZW50IGlzIG5vdCwgdGhpbmdzIHdpbGwgYmUgT0suIENsZWFybHksIGl0IGlzIGVhc3kgdG8gdGVsbCB3aGVuCit3ZSBhcmUgc2VuZGluZyBhIHNpZ25pZmljYW50IHNpZ25hbC4gVGVsbGluZywgaWYgdGhlIGVudmlyb25tZW50IGlzIGdlbmVyYXRpbmcKK2Egc2lnbmlmaWNhbnQgc2lnbmFsLCBhbmQgZG9pbmcgaXQgd2l0aCBzdWZmaWNpZW50IHNwZWVkIHRoYXQgdGhlIGFkYXB0aW9uIHdpbGwKK25vdCBoYXZlIGRpdmVyZ2VkIHRvbyBtdWNoIG1vcmUgd2Ugc3RvcCBpdCwgaXMgYSBsaXR0bGUgaGFyZGVyLgorCitUaGUga2V5IHByb2JsZW0gaW4gZGV0ZWN0aW5nIHdoZW4gdGhlIGVudmlyb25tZW50IGlzIHNvdXJjaW5nIHNpZ25pZmljYW50CitlbmVyZ3kgaXMgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgdmVyeSBxdWlja2x5LiBHaXZlbiBhIHJlYXNvbmFibHkgbG9uZyBzYW1wbGUgb2YKK3RoZSByZWNlaXZlZCBzaWduYWwsIHRoZXJlIGFyZSBhIG51bWJlciBvZiBzdHJhdGVnaWVzIHdoaWNoIG1heSBiZSB1c2VkIHRvCithc3Nlc3Mgd2hldGhlciB0aGF0IHNpZ25hbCBjb250YWlucyBhIHN0cm9uZyBmYXIgZW5kIGNvbXBvbmVudC4gSG93ZXZlciwgYnkgdGhlCit0aW1lIHRoYXQgYXNzZXNzbWVudCBpcyBjb21wbGV0ZSB0aGUgZmFyIGVuZCBzaWduYWwgd2lsbCBoYXZlIGFscmVhZHkgY2F1c2VkCittYWpvciBtaXMtY29udmVyZ2VuY2UgaW4gdGhlIGFkYXB0aW9uIHByb2Nlc3MuIEFuIGFzc2Vzc21lbnQgYWxnb3JpdGhtIGlzCituZWVkZWQgd2hpY2ggcHJvZHVjZXMgYSBmYWlybHkgYWNjdXJhdGUgcmVzdWx0IGZyb20gYSB2ZXJ5IHNob3J0IGJ1cnN0IG9mIGZhcgorZW5kIGVuZXJneS4KKworXHNlY3Rpb24gZWNob19jYW5fcGFnZV9zZWNfMyBIb3cgZG8gSSB1c2UgaXQ/CitUaGUgZWNobyBjYW5jZWxsb3IgcHJvY2Vzc2VzIGJvdGggdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHN0cmVhbXMgc2FtcGxlIGJ5CitzYW1wbGUuIFRoZSBwcm9jZXNzaW5nIGZ1bmN0aW9uIGlzIG5vdCBkZWNsYXJlZCBpbmxpbmUuIFVuZm9ydHVuYXRlbHksCitjYW5jZWxsYXRpb24gcmVxdWlyZXMgbWFueSBvcGVyYXRpb25zIHBlciBzYW1wbGUsIHNvIHRoZSBjYWxsIG92ZXJoZWFkIGlzIG9ubHkKK2EgbWlub3IgYnVyZGVuLgorKi8KKworI2luY2x1ZGUgImZpci5oIgorI2luY2x1ZGUgIm9zbGVjLmgiCisKKy8qIQorICAgIEcuMTY4IGVjaG8gY2FuY2VsbGVyIGRlc2NyaXB0b3IuIFRoaXMgZGVmaW5lcyB0aGUgd29ya2luZyBzdGF0ZSBmb3IgYSBsaW5lCisgICAgZWNobyBjYW5jZWxsZXIuCisqLworc3RydWN0IG9zbGVjX3N0YXRlIHsKKwlpbnQxNl90IHR4LCByeDsKKwlpbnQxNl90IGNsZWFuOworCWludDE2X3QgY2xlYW5fbmxwOworCisJaW50IG5vbnVwZGF0ZV9kd2VsbDsKKwlpbnQgY3Vycl9wb3M7CisJaW50IHRhcHM7CisJaW50IGxvZzJ0YXBzOworCWludCBhZGFwdGlvbl9tb2RlOworCisJaW50IGNvbmRfbWV0OworCWludDMyX3QgUHN0YXRlczsKKwlpbnQxNl90IGFkYXB0OworCWludDMyX3QgZmFjdG9yOworCWludDE2X3Qgc2hpZnQ7CisKKwkvKiBBdmVyYWdlIGxldmVscyBhbmQgYXZlcmFnaW5nIGZpbHRlciBzdGF0ZXMgKi8KKwlpbnQgTHR4YWNjLCBMcnhhY2MsIExjbGVhbmFjYywgTGNsZWFuX2JnYWNjOworCWludCBMdHgsIExyeDsKKwlpbnQgTGNsZWFuOworCWludCBMY2xlYW5fYmc7CisJaW50IExiZ24sIExiZ25fYWNjLCBMYmduX3VwcGVyLCBMYmduX3VwcGVyX2FjYzsKKworCS8qIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgZmlsdGVyIHN0YXRlcyAqLworCWZpcjE2X3N0YXRlX3QgZmlyX3N0YXRlOworCWZpcjE2X3N0YXRlX3QgZmlyX3N0YXRlX2JnOworCWludDE2X3QgKmZpcl90YXBzMTZbMl07CisKKwkvKiBEQyBibG9ja2luZyBmaWx0ZXIgc3RhdGVzICovCisJaW50IHR4XzEsIHR4XzIsIHJ4XzEsIHJ4XzI7CisKKwkvKiBvcHRpb25hbCBIaWdoIFBhc3MgRmlsdGVyIHN0YXRlcyAqLworCWludDMyX3QgeHZ0eFs1XSwgeXZ0eFs1XTsKKwlpbnQzMl90IHh2cnhbNV0sIHl2cnhbNV07CisKKwkvKiBQYXJhbWV0ZXJzIGZvciB0aGUgb3B0aW9uYWwgSG90aCBub2lzZSBnZW5lcmF0b3IgKi8KKwlpbnQgY25nX2xldmVsOworCWludCBjbmdfcm5kbnVtOworCWludCBjbmdfZmlsdGVyOworCisJLyogc25hcHNob3Qgc2FtcGxlIG9mIGNvZWZmcyB1c2VkIGZvciBkZXZlbG9wbWVudCAqLworCWludDE2X3QgKnNuYXBzaG90OworfTsKKworI2VuZGlmIC8qIF9fRUNIT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDVjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaApAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIFNwYW5EU1AgLSBhIHNlcmllcyBvZiBEU1AgY29tcG9uZW50cyBmb3IgdGVsZXBob255CisgKgorICogZmlyLmggLSBHZW5lcmFsIHRlbGVwaG9ueSBGSVIgcm91dGluZXMKKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXZlIFVuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBTdGV2ZSBVbmRlcndvb2QKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAkSWQ6IGZpci5oLHYgMS44IDIwMDYvMTAvMjQgMTM6NDU6Mjggc3RldmV1IEV4cCAkCisgKi8KKworLyohIFxwYWdlIGZpcl9wYWdlIEZJUiBmaWx0ZXJpbmcKK1xzZWN0aW9uIGZpcl9wYWdlX3NlY18xIFdoYXQgZG9lcyBpdCBkbz8KKz8/Py4KKworXHNlY3Rpb24gZmlyX3BhZ2Vfc2VjXzIgSG93IGRvZXMgaXQgd29yaz8KKz8/Py4KKyovCisKKyNpZiAhZGVmaW5lZChfRklSX0hfKQorI2RlZmluZSBfRklSX0hfCisKKy8qCisgICBCbGFja2ZpbiBOT1RFUyAmIElERUFTOgorCisgICBBIHNpbXBsZSBkb3QgcHJvZHVjdCBmdW5jdGlvbiBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgZmlsdGVyLiAgVGhpcyBwZXJmb3JtcworICAganVzdCBvbmUgTUFDL2N5Y2xlIHdoaWNoIGlzIGluZWZmaWNpZW50IGJ1dCB3YXMgZWFzeSB0byBpbXBsZW1lbnQgYXMgYSBmaXJzdAorICAgcGFzcy4gIFRoZSBjdXJyZW50IEJsYWNrZmluIGNvZGUgYWxzbyB1c2VzIGFuIHVucm9sbGVkIGZvcm0gb2YgdGhlIGZpbHRlcgorICAgaGlzdG9yeSB0byBhdm9pZCAwIGxlbmd0aCBoYXJkd2FyZSBsb29wIGlzc3Vlcy4gIFRoaXMgaXMgd2FzdGVmdWwgb2YKKyAgIG1lbW9yeS4KKworICAgSWRlYXMgZm9yIGltcHJvdmVtZW50OgorCisgICAxLyBSZXdyaXRlIGZpbHRlciBmb3IgZHVhbCBNQUMgaW5uZXIgbG9vcC4gIFRoZSBpc3N1ZSBoZXJlIGlzIGhhbmRsaW5nCisgICBoaXN0b3J5IHNhbXBsZSBvZmZzZXRzIHRoYXQgYXJlIDE2IGJpdCBhbGlnbmVkIC0gdGhlIGR1YWwgTUFDIG5lZWRzCisgICAzMiBiaXQgYWxpZ21uZW50LiAgVGhlcmUgYXJlIHNvbWUgZ29vZCBleGFtcGxlcyBpbiBsaWJiZmRzcC4KKworICAgMi8gVXNlIHRoZSBoYXJkd2FyZSBjaXJjdWxhciBidWZmZXIgZmFjaWxpdHkgdG9oYWx2ZSBtZW1vcnkgdXNhZ2UuCisKKyAgIDMvIENvbnNpZGVyIHVzaW5nIGludGVybmFsIG1lbW9yeS4KKworICAgVXNpbmcgbGVzcyBtZW1vcnkgbWlnaHQgYWxzbyBpbXByb3ZlIHNwZWVkIGFzIGNhY2hlIG1pc3NlcyB3aWxsIGJlCisgICByZWR1Y2VkLiBBIGRyb3AgaW4gTUlQcyBhbmQgbWVtb3J5IGFwcHJvYWNoaW5nIDUwJSBzaG91bGQgYmUKKyAgIHBvc3NpYmxlLgorCisgICBUaGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBmaWx0ZXJzIGN1cnJlbmx0eSB1c2UgYSB0b3RhbCBvZgorICAgYWJvdXQgMTAgTUlQcy9jaCBhcyBtZWFzdXJlZCB3aXRoIHNwZWVkdGVzdC5jIG9uIGEgMjU2IFRBUCBlY2hvCisgICBjYW4uCisqLworCisjaWYgZGVmaW5lZChVU0VfTU1YKSAgfHwgIGRlZmluZWQoVVNFX1NTRTIpCisjaW5jbHVkZSAibW14LmgiCisjZW5kaWYKKworLyohCisgICAgMTYgYml0IGludGVnZXIgRklSIGRlc2NyaXB0b3IuIFRoaXMgZGVmaW5lcyB0aGUgd29ya2luZyBzdGF0ZSBmb3IgYSBzaW5nbGUKKyAgICBpbnN0YW5jZSBvZiBhbiBGSVIgZmlsdGVyIHVzaW5nIDE2IGJpdCBpbnRlZ2VyIGNvZWZmaWNpZW50cy4KKyovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHRhcHM7CisJaW50IGN1cnJfcG9zOworCWNvbnN0IGludDE2X3QgKmNvZWZmczsKKwlpbnQxNl90ICpoaXN0b3J5OworfSBmaXIxNl9zdGF0ZV90OworCisvKiEKKyAgICAzMiBiaXQgaW50ZWdlciBGSVIgZGVzY3JpcHRvci4gVGhpcyBkZWZpbmVzIHRoZSB3b3JraW5nIHN0YXRlIGZvciBhIHNpbmdsZQorICAgIGluc3RhbmNlIG9mIGFuIEZJUiBmaWx0ZXIgdXNpbmcgMzIgYml0IGludGVnZXIgY29lZmZpY2llbnRzLCBhbmQgZmlsdGVyaW5nCisgICAgMTYgYml0IGludGVnZXIgZGF0YS4KKyovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHRhcHM7CisJaW50IGN1cnJfcG9zOworCWNvbnN0IGludDMyX3QgKmNvZWZmczsKKwlpbnQxNl90ICpoaXN0b3J5OworfSBmaXIzMl9zdGF0ZV90OworCisvKiEKKyAgICBGbG9hdGluZyBwb2ludCBGSVIgZGVzY3JpcHRvci4gVGhpcyBkZWZpbmVzIHRoZSB3b3JraW5nIHN0YXRlIGZvciBhIHNpbmdsZQorICAgIGluc3RhbmNlIG9mIGFuIEZJUiBmaWx0ZXIgdXNpbmcgZmxvYXRpbmcgcG9pbnQgY29lZmZpY2llbnRzIGFuZCBkYXRhLgorKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgdGFwczsKKwlpbnQgY3Vycl9wb3M7CisJY29uc3QgZmxvYXQgKmNvZWZmczsKKwlmbG9hdCAqaGlzdG9yeTsKK30gZmlyX2Zsb2F0X3N0YXRlX3Q7CisKK3N0YXRpYyBfX2lubGluZV9fIGNvbnN0IGludDE2X3QgKmZpcjE2X2NyZWF0ZShmaXIxNl9zdGF0ZV90ICogZmlyLAorCQkJCQkgICAgICBjb25zdCBpbnQxNl90ICogY29lZmZzLCBpbnQgdGFwcykKK3sKKwlmaXItPnRhcHMgPSB0YXBzOworCWZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKKwlmaXItPmNvZWZmcyA9IGNvZWZmczsKKyNpZiBkZWZpbmVkKFVTRV9NTVgpICB8fCAgZGVmaW5lZChVU0VfU1NFMikgfHwgZGVmaW5lZChfX2JmaW5fXykKKwlmaXItPmhpc3RvcnkgPSBrY2FsbG9jKDIgKiB0YXBzLCBzaXplb2YoaW50MTZfdCksIEdGUF9LRVJORUwpOworI2Vsc2UKKwlmaXItPmhpc3RvcnkgPSBrY2FsbG9jKHRhcHMsIHNpemVvZihpbnQxNl90KSwgR0ZQX0tFUk5FTCk7CisjZW5kaWYKKwlyZXR1cm4gZmlyLT5oaXN0b3J5OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcjE2X2ZsdXNoKGZpcjE2X3N0YXRlX3QgKiBmaXIpCit7CisjaWYgZGVmaW5lZChVU0VfTU1YKSAgfHwgIGRlZmluZWQoVVNFX1NTRTIpIHx8IGRlZmluZWQoX19iZmluX18pCisJbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgMiAqIGZpci0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CisjZWxzZQorCW1lbXNldChmaXItPmhpc3RvcnksIDAsIGZpci0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIxNl9mcmVlKGZpcjE2X3N0YXRlX3QgKiBmaXIpCit7CisJa2ZyZWUoZmlyLT5oaXN0b3J5KTsKK30KKworI2lmZGVmIF9fYmZpbl9fCitzdGF0aWMgaW5saW5lIGludDMyX3QgZG90X2FzbShzaG9ydCAqeCwgc2hvcnQgKnksIGludCBsZW4pCit7CisJaW50IGRvdDsKKworCWxlbi0tOworCisJX19hc21fXygiSTAgPSAlMTtcblx0IgorCQkiSTEgPSAlMjtcblx0IgorCQkiQTAgPSAwO1xuXHQiCisJCSJSMC5MID0gV1tJMCsrXSB8fCBSMS5MID0gV1tJMSsrXTtcblx0IgorCQkiTE9PUCBkb3QlPSBMQzAgPSAlMztcblx0IgorCQkiTE9PUF9CRUdJTiBkb3QlPTtcblx0IgorCQkiQTAgKz0gUjAuTCAqIFIxLkwgKElTKSB8fCBSMC5MID0gV1tJMCsrXSB8fCBSMS5MID0gV1tJMSsrXTtcblx0IgorCQkiTE9PUF9FTkQgZG90JT07XG5cdCIKKwkJIkEwICs9IFIwLkwqUjEuTCAoSVMpO1xuXHQiCisJCSJSMCA9IEEwO1xuXHQiCisJCSIlMCA9IFIwO1xuXHQiCisJCToiPSZkIihkb3QpCisJCToiYSIoeCksICJhIih5KSwgImEiKGxlbikKKwkJOiJJMCIsICJJMSIsICJBMSIsICJBMCIsICJSMCIsICJSMSIKKwkpOworCisJcmV0dXJuIGRvdDsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IGZpcjE2KGZpcjE2X3N0YXRlX3QgKiBmaXIsIGludDE2X3Qgc2FtcGxlKQoreworCWludDMyX3QgeTsKKyNpZiBkZWZpbmVkKFVTRV9NTVgpCisJaW50IGk7CisJbW14X3QgKm1teF9jb2VmZnM7CisJbW14X3QgKm1teF9oaXN0OworCisJZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworCWZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zICsgZmlyLT50YXBzXSA9IHNhbXBsZTsKKworCW1teF9jb2VmZnMgPSAobW14X3QgKikgZmlyLT5jb2VmZnM7CisJbW14X2hpc3QgPSAobW14X3QgKikgJiBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc107CisJaSA9IGZpci0+dGFwczsKKwlweG9yX3IycihtbTQsIG1tNCk7CisJLyogOCBzYW1wbGVzIHBlciBpdGVyYXRpb24sIHNvIHRoZSBmaWx0ZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggbG9uZy4gKi8KKwl3aGlsZSAoaSA+IDApIHsKKwkJbW92cV9tMnIobW14X2NvZWZmc1swXSwgbW0wKTsKKwkJbW92cV9tMnIobW14X2NvZWZmc1sxXSwgbW0yKTsKKwkJbW92cV9tMnIobW14X2hpc3RbMF0sIG1tMSk7CisJCW1vdnFfbTJyKG1teF9oaXN0WzFdLCBtbTMpOworCQltbXhfY29lZmZzICs9IDI7CisJCW1teF9oaXN0ICs9IDI7CisJCXBtYWRkd2RfcjJyKG1tMSwgbW0wKTsKKwkJcG1hZGR3ZF9yMnIobW0zLCBtbTIpOworCQlwYWRkZF9yMnIobW0wLCBtbTQpOworCQlwYWRkZF9yMnIobW0yLCBtbTQpOworCQlpIC09IDg7CisJfQorCW1vdnFfcjJyKG1tNCwgbW0wKTsKKwlwc3JscV9pMnIoMzIsIG1tMCk7CisJcGFkZGRfcjJyKG1tMCwgbW00KTsKKwltb3ZkX3IybShtbTQsIHkpOworCWVtbXMoKTsKKyNlbGlmIGRlZmluZWQoVVNFX1NTRTIpCisJaW50IGk7CisJeG1tX3QgKnhtbV9jb2VmZnM7CisJeG1tX3QgKnhtbV9oaXN0OworCisJZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworCWZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zICsgZmlyLT50YXBzXSA9IHNhbXBsZTsKKworCXhtbV9jb2VmZnMgPSAoeG1tX3QgKikgZmlyLT5jb2VmZnM7CisJeG1tX2hpc3QgPSAoeG1tX3QgKikgJiBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc107CisJaSA9IGZpci0+dGFwczsKKwlweG9yX3Iycih4bW00LCB4bW00KTsKKwkvKiAxNiBzYW1wbGVzIHBlciBpdGVyYXRpb24sIHNvIHRoZSBmaWx0ZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2IGxvbmcuICovCisJd2hpbGUgKGkgPiAwKSB7CisJCW1vdmRxdV9tMnIoeG1tX2NvZWZmc1swXSwgeG1tMCk7CisJCW1vdmRxdV9tMnIoeG1tX2NvZWZmc1sxXSwgeG1tMik7CisJCW1vdmRxdV9tMnIoeG1tX2hpc3RbMF0sIHhtbTEpOworCQltb3ZkcXVfbTJyKHhtbV9oaXN0WzFdLCB4bW0zKTsKKwkJeG1tX2NvZWZmcyArPSAyOworCQl4bW1faGlzdCArPSAyOworCQlwbWFkZHdkX3Iycih4bW0xLCB4bW0wKTsKKwkJcG1hZGR3ZF9yMnIoeG1tMywgeG1tMik7CisJCXBhZGRkX3Iycih4bW0wLCB4bW00KTsKKwkJcGFkZGRfcjJyKHhtbTIsIHhtbTQpOworCQlpIC09IDE2OworCX0KKwltb3ZkcWFfcjJyKHhtbTQsIHhtbTApOworCXBzcmxkcV9pMnIoOCwgeG1tMCk7CisJcGFkZGRfcjJyKHhtbTAsIHhtbTQpOworCW1vdmRxYV9yMnIoeG1tNCwgeG1tMCk7CisJcHNybGRxX2kycig0LCB4bW0wKTsKKwlwYWRkZF9yMnIoeG1tMCwgeG1tNCk7CisJbW92ZF9yMm0oeG1tNCwgeSk7CisjZWxpZiBkZWZpbmVkKF9fYmZpbl9fKQorCWZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKwlmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3BvcyArIGZpci0+dGFwc10gPSBzYW1wbGU7CisJeSA9IGRvdF9hc20oKGludDE2X3QgKikgZmlyLT5jb2VmZnMsICZmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10sCisJCSAgICBmaXItPnRhcHMpOworI2Vsc2UKKwlpbnQgaTsKKwlpbnQgb2Zmc2V0MTsKKwlpbnQgb2Zmc2V0MjsKKworCWZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKworCW9mZnNldDIgPSBmaXItPmN1cnJfcG9zOworCW9mZnNldDEgPSBmaXItPnRhcHMgLSBvZmZzZXQyOworCXkgPSAwOworCWZvciAoaSA9IGZpci0+dGFwcyAtIDE7IGkgPj0gb2Zmc2V0MTsgaS0tKQorCQl5ICs9IGZpci0+Y29lZmZzW2ldICogZmlyLT5oaXN0b3J5W2kgLSBvZmZzZXQxXTsKKwlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCXkgKz0gZmlyLT5jb2VmZnNbaV0gKiBmaXItPmhpc3RvcnlbaSArIG9mZnNldDJdOworI2VuZGlmCisJaWYgKGZpci0+Y3Vycl9wb3MgPD0gMCkKKwkJZmlyLT5jdXJyX3BvcyA9IGZpci0+dGFwczsKKwlmaXItPmN1cnJfcG9zLS07CisJcmV0dXJuIChpbnQxNl90KSAoeSA+PiAxNSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGNvbnN0IGludDE2X3QgKmZpcjMyX2NyZWF0ZShmaXIzMl9zdGF0ZV90ICogZmlyLAorCQkJCQkgICAgICBjb25zdCBpbnQzMl90ICogY29lZmZzLCBpbnQgdGFwcykKK3sKKwlmaXItPnRhcHMgPSB0YXBzOworCWZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKKwlmaXItPmNvZWZmcyA9IGNvZWZmczsKKwlmaXItPmhpc3RvcnkgPSBrY2FsbG9jKHRhcHMsIHNpemVvZihpbnQxNl90KSwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuIGZpci0+aGlzdG9yeTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIzMl9mbHVzaChmaXIzMl9zdGF0ZV90ICogZmlyKQoreworCW1lbXNldChmaXItPmhpc3RvcnksIDAsIGZpci0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMzJfZnJlZShmaXIzMl9zdGF0ZV90ICogZmlyKQoreworCWtmcmVlKGZpci0+aGlzdG9yeSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludDE2X3QgZmlyMzIoZmlyMzJfc3RhdGVfdCAqIGZpciwgaW50MTZfdCBzYW1wbGUpCit7CisJaW50IGk7CisJaW50MzJfdCB5OworCWludCBvZmZzZXQxOworCWludCBvZmZzZXQyOworCisJZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworCW9mZnNldDIgPSBmaXItPmN1cnJfcG9zOworCW9mZnNldDEgPSBmaXItPnRhcHMgLSBvZmZzZXQyOworCXkgPSAwOworCWZvciAoaSA9IGZpci0+dGFwcyAtIDE7IGkgPj0gb2Zmc2V0MTsgaS0tKQorCQl5ICs9IGZpci0+Y29lZmZzW2ldICogZmlyLT5oaXN0b3J5W2kgLSBvZmZzZXQxXTsKKwlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCXkgKz0gZmlyLT5jb2VmZnNbaV0gKiBmaXItPmhpc3RvcnlbaSArIG9mZnNldDJdOworCWlmIChmaXItPmN1cnJfcG9zIDw9IDApCisJCWZpci0+Y3Vycl9wb3MgPSBmaXItPnRhcHM7CisJZmlyLT5jdXJyX3Bvcy0tOworCXJldHVybiAoaW50MTZfdCkgKHkgPj4gMTUpOworfQorCisjZW5kaWYKKy8qLSBFbmQgb2YgZmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQxMmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmgKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBtbXguaAorICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEgSC4gRGlldHogYW5kIFIuIEZpc2hlcgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2lmbmRlZiBBVkNPREVDX0kzODZNTVhfSAorI2RlZmluZSBBVkNPREVDX0kzODZNTVhfSAorCisvKgorICogVGhlIHR5cGUgb2YgYW4gdmFsdWUgdGhhdCBmaXRzIGluIGFuIE1NWCByZWdpc3RlciAobm90ZSB0aGF0IGxvbmcKKyAqIGxvbmcgY29uc3RhbnQgdmFsdWVzIE1VU1QgYmUgc3VmZml4ZWQgYnkgTEwgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZworICogdmFsdWVzIGJ5IFVMTCwgbGVzdCB0aGV5IGJlIHRydW5jYXRlZCBieSB0aGUgY29tcGlsZXIpCisgKi8KKwordHlwZWRlZiB1bmlvbiB7CisJbG9uZyBsb25nIHE7CQkvKiBRdWFkd29yZCAoNjQtYml0KSB2YWx1ZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyB1cTsJLyogVW5zaWduZWQgUXVhZHdvcmQgKi8KKwlpbnQgZFsyXTsJCS8qIDIgRG91Ymxld29yZCAoMzItYml0KSB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBpbnQgdWRbMl07CS8qIDIgVW5zaWduZWQgRG91Ymxld29yZCAqLworCXNob3J0IHdbNF07CQkvKiA0IFdvcmQgKDE2LWJpdCkgdmFsdWVzICovCisJdW5zaWduZWQgc2hvcnQgdXdbNF07CS8qIDQgVW5zaWduZWQgV29yZCAqLworCWNoYXIgYls4XTsJCS8qIDggQnl0ZSAoOC1iaXQpIHZhbHVlcyAqLworCXVuc2lnbmVkIGNoYXIgdWJbOF07CS8qIDggVW5zaWduZWQgQnl0ZSAqLworCWZsb2F0IHNbMl07CQkvKiBTaW5nbGUtcHJlY2lzaW9uICgzMi1iaXQpIHZhbHVlICovCit9IG1teF90OwkJCS8qIE9uIGFuIDgtYnl0ZSAoNjQtYml0KSBib3VuZGFyeSAqLworCisvKiBTU0UgcmVnaXN0ZXJzICovCit0eXBlZGVmIHVuaW9uIHsKKwljaGFyIGJbMTZdOworfSB4bW1fdDsKKworI2RlZmluZSAgICAgICAgIG1teF9pMnIob3AsaW1tLHJlZykgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpIiAoaW1tKSApCisKKyNkZWZpbmUgICAgICAgICBtbXhfbTJyKG9wLG1lbSxyZWcpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSkpCisKKyNkZWZpbmUgICAgICAgICBtbXhfcjJtKG9wLHJlZyxtZW0pIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9bSIgKG1lbSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovICkKKworI2RlZmluZSAgICAgICAgIG1teF9yMnIob3AscmVncyxyZWdkKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlIiAjcmVncyAiLCAlIiAjcmVnZCkKKworI2RlZmluZSAgICAgICAgIGVtbXMoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVtbXMiKQorCisjZGVmaW5lICAgICAgICAgbW92ZF9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKG1vdmQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIG1vdmRfcjJtKHJlZyx2YXIpICAgICAgICAgICBtbXhfcjJtIChtb3ZkLCByZWcsIHZhcikKKyNkZWZpbmUgICAgICAgICBtb3ZkX3IycihyZWdzLHJlZ2QpICAgICAgICAgbW14X3IyciAobW92ZCwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIG1vdnFfbTJyKHZhcixyZWcpICAgICAgICAgICBtbXhfbTJyIChtb3ZxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBtb3ZxX3IybShyZWcsdmFyKSAgICAgICAgICAgbW14X3IybSAobW92cSwgcmVnLCB2YXIpCisjZGVmaW5lICAgICAgICAgbW92cV9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKG1vdnEsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWNrc3Nkd19tMnIodmFyLHJlZykgICAgICAgbW14X20yciAocGFja3NzZHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhY2tzc2R3X3IycihyZWdzLHJlZ2QpICAgICBtbXhfcjJyIChwYWNrc3NkdywgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwYWNrc3N3Yl9tMnIodmFyLHJlZykgICAgICAgbW14X20yciAocGFja3Nzd2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhY2tzc3diX3IycihyZWdzLHJlZ2QpICAgICBtbXhfcjJyIChwYWNrc3N3YiwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhY2t1c3diX20ycih2YXIscmVnKSAgICAgICBtbXhfbTJyIChwYWNrdXN3YiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFja3Vzd2JfcjJyKHJlZ3MscmVnZCkgICAgIG1teF9yMnIgKHBhY2t1c3diLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFkZGJfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhZGRiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFkZGIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFkZGRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhZGRkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFkZGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFkZHdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhZGR3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFkZHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWRkc2JfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocGFkZHNiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkc2JfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocGFkZHNiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBhZGRzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwYWRkc3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGRzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwYWRkc3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWRkdXNiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGFkZHVzYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZHVzYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhZGR1c2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFkZHVzd19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBhZGR1c3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGR1c3dfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwYWRkdXN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFuZF9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKHBhbmQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhbmRfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChwYW5kLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFuZG5fbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhbmRuLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYW5kbl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFuZG4sIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwY21wZXFiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGVxYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGVxYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBlcWIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGNtcGVxZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBlcWQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBlcWRfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZXFkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBjbXBlcXdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZXF3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZXF3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGVxdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBjbXBndGJfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZ3RiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZ3RiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGd0YiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwY21wZ3RkX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGd0ZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGd0ZF9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBndGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGNtcGd0d19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBndHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBndHdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZ3R3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG1hZGR3ZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBtYWRkd2QsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtYWRkd2RfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwbWFkZHdkLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG11bGh3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtdWxodywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG11bGh3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtdWxodywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtdWxsd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbXVsbHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtdWxsd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbXVsbHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwb3JfbTJyKHZhcixyZWcpICAgICAgICAgICAgbW14X20yciAocG9yLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwb3JfcjJyKHJlZ3MscmVnZCkgICAgICAgICAgbW14X3IyciAocG9yLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHNsbGRfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzbGxkLCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xsZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNsbGQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGxkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc2xsZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc2xscV9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNsbHEsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGxxX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc2xscSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbHFfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzbGxxLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzbGx3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc2xsdywgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbHdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzbGx3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xsd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNsbHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc3JhZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNyYWQsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmFkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JhZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNyYWRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmFkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzcmF3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JhdywgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNyYXdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmF3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Jhd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNyYXcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc3JsZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNybGQsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmxkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JsZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybGRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmxkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzcmxxX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JscSwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybHFfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmxxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JscV9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNybHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHNybHdfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmx3LCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Jsd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNybHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmx3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JsdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzdWJiX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3ViYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YmJfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzdWJkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3ViZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YmRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzdWJ3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3VidywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YndfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJ3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHN1YnNiX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzdWJzYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YnNiX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzdWJzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3Vic3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocHN1YnN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Vic3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocHN1YnN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHN1YnVzYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBzdWJ1c2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJ1c2JfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwc3VidXNiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzdWJ1c3dfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwc3VidXN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3VidXN3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocHN1YnVzdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHB1bnBja2hid19tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2toYncsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2hid19yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2toYncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHVucGNraGRxX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2hkcSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNraGRxX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2hkcSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNraHdkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNraHdkLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2xidywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2xidywgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNrbGRxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNrbGRxLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tsd2QsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tsd2QsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBweG9yX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAocHhvciwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHhvcl9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKHB4b3IsIHJlZ3MsIHJlZ2QpCisKKy8qIDNETk9XIGV4dGVuc2lvbnMgKi8KKworI2RlZmluZSAgICAgICAgIHBhdmd1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYXZndXNiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYXZndXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGF2Z3VzYiwgcmVncywgcmVnZCkKKworLyogQU1EIE1NWCBleHRlbnNpb25zIC0gYWxzbyBhdmFpbGFibGUgaW4gaW50ZWwgU1NFICovCisKKyNkZWZpbmUgICAgICAgICBtbXhfbTJyaShvcCxtZW0scmVnLGltbSkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTEsICUwLCAlJSIgI3JlZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSksICJpIiAoaW1tKSkKKyNkZWZpbmUgICAgICAgICBtbXhfcjJyaShvcCxyZWdzLHJlZ2QsaW1tKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWdzICIsICUlIiAjcmVnZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaSIgKGltbSkgKQorCisjZGVmaW5lICAgICAgICAgbW14X2ZldGNoKG1lbSxoaW50KSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgicHJlZmV0Y2giICNoaW50ICIgJTAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAobWVtKSkKKworI2RlZmluZSAgICAgICAgIG1hc2ttb3ZxKHJlZ3MsbWFza3JlZykgICAgICBtbXhfcjJyaSAobWFza21vdnEsIHJlZ3MsIG1hc2tyZWcpCisKKyNkZWZpbmUgICAgICAgICBtb3ZudHFfcjJtKG1tcmVnLHZhcikgICAgICAgbW14X3IybSAobW92bnRxLCBtbXJlZywgdmFyKQorCisjZGVmaW5lICAgICAgICAgcGF2Z2JfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhdmdiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYXZnYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGF2Z2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGF2Z3dfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhdmd3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYXZnd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGF2Z3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwZXh0cndfcjJyKG1tcmVnLHJlZyxpbW0pICAgbW14X3IycmkgKHBleHRydywgbW1yZWcsIHJlZywgaW1tKQorCisjZGVmaW5lICAgICAgICAgcGluc3J3X3IycihyZWcsbW1yZWcsaW1tKSAgIG1teF9yMnJpIChwaW5zcncsIHJlZywgbW1yZWcsIGltbSkKKworI2RlZmluZSAgICAgICAgIHBtYXhzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWF4c3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtYXhzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWF4c3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbWF4dWJfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocG1heHViLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbWF4dWJfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocG1heHViLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG1pbnN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtaW5zdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG1pbnN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtaW5zdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtaW51Yl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWludWIsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtaW51Yl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWludWIsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbW92bXNrYihtbXJlZyxyZWcpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Ztc2twcyAlIiAjbW1yZWcgIiwgJSIgI3JlZykKKworI2RlZmluZSAgICAgICAgIHBtdWxodXdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwbXVsaHV3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbXVsaHV3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocG11bGh1dywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHByZWZldGNodDAobWVtKSAgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgdDApCisjZGVmaW5lICAgICAgICAgcHJlZmV0Y2h0MShtZW0pICAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCB0MSkKKyNkZWZpbmUgICAgICAgICBwcmVmZXRjaHQyKG1lbSkgICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIHQyKQorI2RlZmluZSAgICAgICAgIHByZWZldGNobnRhKG1lbSkgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgbnRhKQorCisjZGVmaW5lICAgICAgICAgcHNhZGJ3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzYWRidywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNhZGJ3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzYWRidywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzaHVmd19tMnIodmFyLHJlZyxpbW0pICAgICBtbXhfbTJyaShwc2h1ZncsIHZhciwgcmVnLCBpbW0pCisjZGVmaW5lICAgICAgICAgcHNodWZ3X3IycihyZWdzLHJlZ2QsaW1tKSAgIG1teF9yMnJpKHBzaHVmdywgcmVncywgcmVnZCwgaW1tKQorCisjZGVmaW5lICAgICAgICAgc2ZlbmNlKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzZmVuY2Vcblx0IikKKworLyogU1NFMiAqLworI2RlZmluZSAgICAgICAgIHBzaHVmaHdfbTJyKHZhcixyZWcsaW1tKSAgICBtbXhfbTJyaShwc2h1Zmh3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZSAgICAgICAgIHBzaHVmaHdfcjJyKHJlZ3MscmVnZCxpbW0pICBtbXhfcjJyaShwc2h1Zmh3LCByZWdzLCByZWdkLCBpbW0pCisjZGVmaW5lICAgICAgICAgcHNodWZsd19tMnIodmFyLHJlZyxpbW0pICAgIG1teF9tMnJpKHBzaHVmbHcsIHZhciwgcmVnLCBpbW0pCisjZGVmaW5lICAgICAgICAgcHNodWZsd19yMnIocmVncyxyZWdkLGltbSkgIG1teF9yMnJpKHBzaHVmbHcsIHJlZ3MsIHJlZ2QsIGltbSkKKworI2RlZmluZSAgICAgICAgIHBzaHVmZF9yMnIocmVncyxyZWdkLGltbSkgICBtbXhfcjJyaShwc2h1ZmQsIHJlZ3MsIHJlZ2QsIGltbSkKKworI2RlZmluZSAgICAgICAgIG1vdmRxYV9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChtb3ZkcWEsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChtb3ZkcWEsIHJlZywgdmFyKQorI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChtb3ZkcWEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgbW92ZHF1X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKG1vdmRxdSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgbW92ZHF1X3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKG1vdmRxdSwgcmVnLCB2YXIpCisjZGVmaW5lICAgICAgICAgbW92ZHF1X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKG1vdmRxdSwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtdWxsd19yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChwbXVsbHcsIHJlZywgdmFyKQorCisjZGVmaW5lICAgICAgICAgcHNsbGRxX2kycihpbW0scmVnKSAgICAgICAgIG1teF9pMnIgKHBzbGxkcSwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybGRxX2kycihpbW0scmVnKSAgICAgICAgIG1teF9pMnIgKHBzcmxkcSwgaW1tLCByZWcpCisKKyNkZWZpbmUgICAgICAgICBwdW5wY2tscWRxX3IycihyZWdzLHJlZ2QpICAgbW14X3IyciAocHVucGNrbHFkcSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2tocWRxX3IycihyZWdzLHJlZ2QpICAgbW14X3IyciAocHVucGNraHFkcSwgcmVncywgcmVnZCkKKworI2VuZGlmIC8qIEFWQ09ERUNfSTM4Nk1NWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9vc2xlYy5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vb3NsZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQ4NTIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vb3NsZWMuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogIE9TTEVDIC0gQSBsaW5lIGVjaG8gY2FuY2VsbGVyLiAgVGhpcyBjb2RlIGlzIGJlaW5nIGRldmVsb3BlZAorICogICAgICAgICAgYWdhaW5zdCBhbmQgcGFydGlhbGx5IGNvbXBsaWVzIHdpdGggRzE2OC4gVXNpbmcgY29kZSBmcm9tIFNwYW5EU1AKKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXZlIFVuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPgorICogICAgICAgICBhbmQgRGF2aWQgUm93ZSA8ZGF2aWRfYXRfcm93ZXRlbF9kb3RfY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBTdGV2ZSBVbmRlcndvb2QgYW5kIDIwMDctMjAwOCBEYXZpZCBSb3dlCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX19PU0xFQ19ICisjZGVmaW5lIF9fT1NMRUNfSAorCisvKiBUT0RPOiBkb2N1bWVudCBpbnRlcmZhY2UgKi8KKworLyogTWFzayBiaXRzIGZvciB0aGUgYWRhcHRpb24gbW9kZSAqLworI2RlZmluZSBFQ0hPX0NBTl9VU0VfQURBUFRJT04JMHgwMQorI2RlZmluZSBFQ0hPX0NBTl9VU0VfTkxQCTB4MDIKKyNkZWZpbmUgRUNIT19DQU5fVVNFX0NORwkweDA0CisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9DTElQCTB4MDgKKyNkZWZpbmUgRUNIT19DQU5fVVNFX1RYX0hQRgkweDEwCisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9SWF9IUEYJMHgyMAorI2RlZmluZSBFQ0hPX0NBTl9ESVNBQkxFCTB4NDAKKworLyohCisgICAgRy4xNjggZWNobyBjYW5jZWxsZXIgZGVzY3JpcHRvci4gVGhpcyBkZWZpbmVzIHRoZSB3b3JraW5nIHN0YXRlIGZvciBhIGxpbmUKKyAgICBlY2hvIGNhbmNlbGxlci4KKyovCitzdHJ1Y3Qgb3NsZWNfc3RhdGU7CisKKy8qISBDcmVhdGUgYSB2b2ljZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBsZW4gVGhlIGxlbmd0aCBvZiB0aGUgY2FuY2VsbGVyLCBpbiBzYW1wbGVzLgorICAgIFxyZXR1cm4gVGhlIG5ldyBjYW5jZWxsZXIgY29udGV4dCwgb3IgTlVMTCBpZiB0aGUgY2FuY2VsbGVyIGNvdWxkIG5vdCBiZSBjcmVhdGVkLgorKi8KK3N0cnVjdCBvc2xlY19zdGF0ZSAqb3NsZWNfY3JlYXRlKGludCBsZW4sIGludCBhZGFwdGlvbl9tb2RlKTsKKworLyohIEZyZWUgYSB2b2ljZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyovCit2b2lkIG9zbGVjX2ZyZWUoc3RydWN0IG9zbGVjX3N0YXRlICplYyk7CisKKy8qISBGbHVzaCAocmVpbml0aWFsaXNlKSBhIHZvaWNlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIGVjIFRoZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorKi8KK3ZvaWQgb3NsZWNfZmx1c2goc3RydWN0IG9zbGVjX3N0YXRlICplYyk7CisKKy8qISBTZXQgdGhlIGFkYXB0aW9uIG1vZGUgb2YgYSB2b2ljZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gYWRhcHQgVGhlIG1vZGUuCisqLwordm9pZCBvc2xlY19hZGFwdGlvbl9tb2RlKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBhZGFwdGlvbl9tb2RlKTsKKwordm9pZCBvc2xlY19zbmFwc2hvdChzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjKTsKKworLyohIFByb2Nlc3MgYSBzYW1wbGUgdGhyb3VnaCBhIHZvaWNlIGVjaG8gY2FuY2VsbGVyLgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gdHggVGhlIHRyYW5zbWl0dGVkIGF1ZGlvIHNhbXBsZS4KKyAgICBccGFyYW0gcnggVGhlIHJlY2VpdmVkIGF1ZGlvIHNhbXBsZS4KKyAgICBccmV0dXJuIFRoZSBjbGVhbiAoZWNobyBjYW5jZWxsZWQpIHJlY2VpdmVkIHNhbXBsZS4KKyovCitpbnQxNl90IG9zbGVjX3VwZGF0ZShzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQxNl90IHR4LCBpbnQxNl90IHJ4KTsKKworLyohIFByb2Nlc3MgdG8gaGlnaCBwYXNzIGZpbHRlciB0aGUgdHggc2lnbmFsLgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gdHggVGhlIHRyYW5zbWl0dGVkIGF1aW8gc2FtcGxlLgorICAgIFxyZXR1cm4gVGhlIEhQIGZpbHRlcmVkIHRyYW5zbWl0IHNhbXBsZSwgc2VuZCB0aGlzIHRvIHlvdXIgRC9BLgorKi8KK2ludDE2X3Qgb3NsZWNfaHBmX3R4KHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludDE2X3QgdHgpOworCisjZW5kaWYgLyogX19PU0xFQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExY2YzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvS2NvbmZpZwpAQCAtMCwwICsxLDE4IEBACitjb25maWcgRVQxMzFYCisJdHJpc3RhdGUgIkFnZXJlIEVULTEzMTAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUREVWXzEwMDAgJiYgUENJCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWdlcmUgRVQtMTMxMCBldGhlcm5ldCBhZGFwdGVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZXQxMzF4LgorCitjb25maWcgRVQxMzFYX0RFQlVHCisJYm9vbCAiRW5hYmxlIGV0MTMxeCBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBFVDEzMVgKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBTYXkgWSBmb3IgZGV0YWlsZWQgZGVidWcgaW5mb3JtYXRpb24uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDU3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L01ha2VmaWxlCkBAIC0wLDAgKzEsMTggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBBZ2VyZSBFVC0xMzF4IGV0aGVybmV0IGRyaXZlcgorIworCitvYmotJChDT05GSUdfRVQxMzFYKSArPSBldDEzMXgubworCitldDEzMXgtb2JqcyA6PQlldDEzMTBfZWVwcm9tLm8gXAorCQlldDEzMTBfamFnY29yZS5vIFwKKwkJZXQxMzEwX21hYy5vIFwKKwkJZXQxMzEwX3BoeS5vIFwKKwkJZXQxMzEwX3BtLm8gXAorCQlldDEzMTBfcngubyBcCisJCWV0MTMxMF90eC5vIFwKKwkJZXQxMzF4X2NvbmZpZy5vIFwKKwkJZXQxMzF4X2RlYnVnLm8gXAorCQlldDEzMXhfaW5pdHBjaS5vIFwKKwkJZXQxMzF4X2lzci5vIFwKKwkJZXQxMzF4X25ldGRldi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzUyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L1JFQURNRQpAQCAtMCwwICsxLDI1IEBACitUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRVQxMzEwIG5ldHdvcmsgZGV2aWNlLgorCitCYXNlZCBvbiB0aGUgZHJpdmVyIGZvdW5kIGF0IGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V0MTMxeC8KKworQ2xlYW5lZCB1cCBpbW1lbnNlbHkgYnkgT2xhZiBIYXJ0bWFuIDxvLmhhcnRtYW5uQHRlbG92aXRhbC5jb20+IGFuZCBDaHJpc3RvcGgKK0hlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgorCitOb3RlLCB0aGUgcG93ZXJtYW5hZ2VtZW50IG9wdGlvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIHZlbmRvciBwcm92aWRlZAorZHJpdmVyIGFzIHRoZXkgZGlkIG5vdCBidWlsZCBwcm9wZXJseSBhdCB0aGUgdGltZS4KKworVE9ETzoKKwktIGtlcm5lbCBjb2Rpbmcgc3R5bGUgY2xlYW51cHMKKwktIGZvcndhcmQgcG9ydCBmb3IgbGF0ZXN0IG5ldHdvcmsgZHJpdmVyIGNoYW5nZXMKKwktIGtpbGwgdXNlbGVzcyB0eXBlY2FzdHMgKGUuZy4gaW4gZXQxMzEwX3BoeS5jKQorCS0gYWxsb2NfZXRoZXJkZXYgaXMgaW5pdGlhbGl6aW5nIG1lbW9yeSB3aXRoIHplcm8/IT8KKwktIGFkZF90aW1lciBjYWxsIGluIGV0MTMxeF9uZXRkZXYuYyBpcyBjb3JyZWN0PworCS0gQWRkIHBvd2VyIHNhdmluZyBmdW5jdGlvbmFsaXR5IChzdXNwZW5kLCBzbGVlcCwgcmVzdW1lKQorCS0gSW1wbGVtZW50IGEgZmV3IG1vcmUga2VybmVsIFBhcmFtZXRlciAoc2V0IG1hYyApCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CisJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKworQW5kIENjOiBPbGFmIEhhcnRtYW5uIDxvLmhhcnRtYW5uQHRlbG92aXRhbC5jb20+IGFzIGhlIGhhcyB0aGlzIGRldmljZSBhbmQgY2FuCit0ZXN0IGFueSBjaGFuZ2VzLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg1OTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaApAQCAtMCwwICsxLDIzOTkgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX2FkZHJlc3NfbWFwLmggLSBDb250YWlucyB0aGUgcmVnaXN0ZXIgbWFwcGluZyBmb3IgdGhlIEVUMTMxMAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9FVDEzMTBfQUREUkVTU19NQVBfSF8KKyNkZWZpbmUgX0VUMTMxMF9BRERSRVNTX01BUF9IXworCisKKy8qIFNUQVJUIE9GIEdMT0JBTCBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCit0eXBlZGVmIHVuaW9uIF9RX0FERFJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBhZGRyOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIGFkZHI6MTA7CS8vIGJpdHMgMC05CisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUV9BRERSX3QsICpQUV9BRERSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4IHF1ZXVlIHN0YXJ0IGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwMAorICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eCBxdWV1ZSBlbmQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDA0CisgKiBEZWZpbmVkIGVhcmxpZXIgKFFfQUREUl90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHN0YXJ0IGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwOAorICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSBlbmQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDBDCisgKiBEZWZpbmVkIGVhcmxpZXIgKFFfQUREUl90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCBzdGF0dXMgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAxMAorICovCit0eXBlZGVmIHVuaW9uIF9QTV9DU1JfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQorCQl1MzIgcG1famFnY29yZV9yeF9yZHk6MTsJLy8gYml0IDkKKwkJdTMyIHBtX2phZ2NvcmVfdHhfcmR5OjE7CS8vIGJpdCA4CisJCXUzMiBwbV9waHlfbHBlZF9lbjoxOwkvLyBiaXQgNworCQl1MzIgcG1fcGh5X3N3X2NvbWE6MTsJLy8gYml0IDYKKwkJdTMyIHBtX3J4Y2xrX2dhdGU6MTsJLy8gYml0IDUKKwkJdTMyIHBtX3R4Y2xrX2dhdGU6MTsJLy8gYml0IDQKKwkJdTMyIHBtX3N5c2Nsa19nYXRlOjE7CS8vIGJpdCAzCisJCXUzMiBwbV9qYWdjb3JlX3J4X2VuOjE7CS8vIGJpdCAyCisJCXUzMiBwbV9qYWdjb3JlX3R4X2VuOjE7CS8vIGJpdCAxCisJCXUzMiBwbV9naWdlcGh5X2VuOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcG1fZ2lnZXBoeV9lbjoxOwkvLyBiaXQgMAorCQl1MzIgcG1famFnY29yZV90eF9lbjoxOwkvLyBiaXQgMQorCQl1MzIgcG1famFnY29yZV9yeF9lbjoxOwkvLyBiaXQgMgorCQl1MzIgcG1fc3lzY2xrX2dhdGU6MTsJLy8gYml0IDMKKwkJdTMyIHBtX3R4Y2xrX2dhdGU6MTsJLy8gYml0IDQKKwkJdTMyIHBtX3J4Y2xrX2dhdGU6MTsJLy8gYml0IDUKKwkJdTMyIHBtX3BoeV9zd19jb21hOjE7CS8vIGJpdCA2CisJCXUzMiBwbV9waHlfbHBlZF9lbjoxOwkvLyBiaXQgNworCQl1MzIgcG1famFnY29yZV90eF9yZHk6MTsJLy8gYml0IDgKKwkJdTMyIHBtX2phZ2NvcmVfcnhfcmR5OjE7CS8vIGJpdCA5CisJCXUzMiB1bnVzZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFBNX0NTUl90LCAqUFBNX0NTUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgc3RhdHVzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMTgKKyAqLwordHlwZWRlZiB1bmlvbiBfSU5URVJSVVBUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDU6MTE7CQkJLy8gYml0cyAyMS0zMQorCQl1MzIgc2x2X3RpbWVvdXQ6MTsJCQkvLyBiaXQgMjAKKwkJdTMyIG1hY19zdGF0X2ludGVycnVwdDoxOwkJLy8gYml0IDE5CisJCXUzMiByeG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOAorCQl1MzIgdHhtYWNfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTcKKwkJdTMyIHBoeV9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgd2FrZV9vbl9sYW46MTsJCQkvLyBiaXQgMTUKKwkJdTMyIHdhdGNoZG9nX2ludGVycnVwdDoxOwkJLy8gYml0IDE0CisJCXUzMiB1bnVzZWQ0OjQ7CQkJLy8gYml0cyAxMC0xMworCQl1MzIgcnhkbWFfZXJyOjE7CQkJLy8gYml0IDkKKwkJdTMyIHJ4ZG1hX3BrdF9zdGF0X3JpbmdfbG93OjE7CS8vIGJpdCA4CisJCXUzMiByeGRtYV9mYl9yaW5nMV9sb3c6MTsJCS8vIGJpdCA3CisJCXUzMiByeGRtYV9mYl9yaW5nMF9sb3c6MTsJCS8vIGJpdCA2CisJCXUzMiByeGRtYV94ZnJfZG9uZToxOwkJLy8gYml0IDUKKwkJdTMyIHR4ZG1hX2VycjoxOwkJCS8vIGJpdCA0CisJCXUzMiB0eGRtYV9pc3I6MTsJCQkvLyBiaXQgMworCQl1MzIgdW51c2VkMzoxOwkJCS8vIGJpdCAyCisJCXUzMiB1bnVzZWQyOjE7CQkJLy8gYml0IDEKKwkJdTMyIHVudXNlZDE6MTsJCQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHVudXNlZDE6MTsJCQkvLyBiaXQgMAorCQl1MzIgdW51c2VkMjoxOwkJCS8vIGJpdCAxCisJCXUzMiB1bnVzZWQzOjE7CQkJLy8gYml0IDIKKwkJdTMyIHR4ZG1hX2lzcjoxOwkJCS8vIGJpdCAzCisJCXUzMiB0eGRtYV9lcnI6MTsJCQkvLyBiaXQgNAorCQl1MzIgcnhkbWFfeGZyX2RvbmU6MTsJCS8vIGJpdCA1CisJCXUzMiByeGRtYV9mYl9yaW5nMF9sb3c6MTsJCS8vIGJpdCA2CisJCXUzMiByeGRtYV9mYl9yaW5nMV9sb3c6MTsJCS8vIGJpdCA3CisJCXUzMiByeGRtYV9wa3Rfc3RhdF9yaW5nX2xvdzoxOwkvLyBiaXQgOAorCQl1MzIgcnhkbWFfZXJyOjE7CQkJLy8gYml0IDkKKwkJdTMyIHVudXNlZDQ6NDsJCQkvLyBiaXRzIDEwLTEzCisJCXUzMiB3YXRjaGRvZ19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNAorCQl1MzIgd2FrZV9vbl9sYW46MTsJCQkvLyBiaXQgMTUKKwkJdTMyIHBoeV9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgdHhtYWNfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTcKKwkJdTMyIHJ4bWFjX2ludGVycnVwdDoxOwkJLy8gYml0IDE4CisJCXUzMiBtYWNfc3RhdF9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOQorCQl1MzIgc2x2X3RpbWVvdXQ6MTsJCQkvLyBiaXQgMjAKKwkJdTMyIHVudXNlZDU6MTE7CQkJLy8gYml0cyAyMS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBJTlRFUlJVUFRfdCwgKlBJTlRFUlJVUFRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IG1hc2sgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAxQworICogRGVmaW5lZCBlYXJsaWVyIChJTlRFUlJVUFRfdCksIGJ1dCAnd2F0Y2hkb2dfaW50ZXJydXB0JyBpcyBub3QgdXNlZC4KKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgYWxpYXMgY2xlYXIgbWFzayByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDIwCisgKiBEZWZpbmVkIGVhcmxpZXIgKElOVEVSUlVQVF90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBzdGF0dXMgYWxpYXMgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAyNAorICogRGVmaW5lZCBlYXJsaWVyIChJTlRFUlJVUFRfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBzb2Z0d2FyZSByZXNldCByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDI4CisgKi8KK3R5cGVkZWYgdW5pb24gX1NXX1JFU0VUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHNlbGZjbHJfZGlzYWJsZToxOwkvLyBiaXQgMzEKKwkJdTMyIHVudXNlZDoyNDsJCS8vIGJpdHMgNy0zMAorCQl1MzIgbW1jX3N3X3Jlc2V0OjE7CS8vIGJpdCA2CisJCXUzMiBtYWNfc3RhdF9zd19yZXNldDoxOwkvLyBiaXQgNQorCQl1MzIgbWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCA0CisJCXUzMiByeG1hY19zd19yZXNldDoxOwkvLyBiaXQgMworCQl1MzIgdHhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDIKKwkJdTMyIHJ4ZG1hX3N3X3Jlc2V0OjE7CS8vIGJpdCAxCisJCXUzMiB0eGRtYV9zd19yZXNldDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHR4ZG1hX3N3X3Jlc2V0OjE7CS8vIGJpdCAwCisJCXUzMiByeGRtYV9zd19yZXNldDoxOwkvLyBiaXQgMQorCQl1MzIgdHhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDIKKwkJdTMyIHJ4bWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCAzCisJCXUzMiBtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDQKKwkJdTMyIG1hY19zdGF0X3N3X3Jlc2V0OjE7CS8vIGJpdCA1CisJCXUzMiBtbWNfc3dfcmVzZXQ6MTsJLy8gYml0IDYKKwkJdTMyIHVudXNlZDoyNDsJCS8vIGJpdHMgNy0zMAorCQl1MzIgc2VsZmNscl9kaXNhYmxlOjE7CS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBTV19SRVNFVF90LCAqUFNXX1JFU0VUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFNMViBUaW1lciByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDJDCisgKi8KK3R5cGVkZWYgdW5pb24gX1NMVl9USU1FUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgdGltZXJfaW5pOjI0OwkvLyBiaXRzIDAtMjMKKyNlbHNlCisJCXUzMiB0aW1lcl9pbmk6MjQ7CS8vIGJpdHMgMC0yMworCQl1MzIgdW51c2VkOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gU0xWX1RJTUVSX3QsICpQU0xWX1RJTUVSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1TSSBDb25maWd1cmF0aW9uIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMzAKKyAqLwordHlwZWRlZiB1bmlvbiBfTVNJX0NPTkZJR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQxOjEzOwkvLyBiaXRzIDE5LTMxCisJCXUzMiBtc2lfdGM6MzsJLy8gYml0cyAxNi0xOAorCQl1MzIgdW51c2VkMjoxMTsJLy8gYml0cyA1LTE1CisJCXUzMiBtc2lfdmVjdG9yOjU7CS8vIGJpdHMgMC00CisjZWxzZQorCQl1MzIgbXNpX3ZlY3Rvcjo1OwkvLyBiaXRzIDAtNAorCQl1MzIgdW51c2VkMjoxMTsJLy8gYml0cyA1LTE1CisJCXUzMiBtc2lfdGM6MzsJLy8gYml0cyAxNi0xOAorCQl1MzIgdW51c2VkMToxMzsJLy8gYml0cyAxOS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNU0lfQ09ORklHX3QsICpQTVNJX0NPTkZJR190OworCisvKgorICogc3RydWN0dXJlIGZvciBMb29wYmFjayByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDM0CisgKi8KK3R5cGVkZWYgdW5pb24gX0xPT1BCQUNLX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQorCQl1MzIgZG1hX2xvb3BiYWNrOjE7CS8vIGJpdCAxCisJCXUzMiBtYWNfbG9vcGJhY2s6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBtYWNfbG9vcGJhY2s6MTsJLy8gYml0IDAKKwkJdTMyIGRtYV9sb29wYmFjazoxOwkvLyBiaXQgMQorCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IExPT1BCQUNLX3QsICpQTE9PUEJBQ0tfdDsKKworLyoKKyAqIEdMT0JBTCBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMDAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dMT0JBTF90IHsJCQkvLyBMb2NhdGlvbjoKKwlRX0FERFJfdCB0eHFfc3RhcnRfYWRkcjsJCS8vICAweDAwMDAKKwlRX0FERFJfdCB0eHFfZW5kX2FkZHI7CQkJLy8gIDB4MDAwNAorCVFfQUREUl90IHJ4cV9zdGFydF9hZGRyOwkJLy8gIDB4MDAwOAorCVFfQUREUl90IHJ4cV9lbmRfYWRkcjsJCQkvLyAgMHgwMDBDCisJUE1fQ1NSX3QgcG1fY3NyOwkJCS8vICAweDAwMTAKKwl1MzIgdW51c2VkOwkJCQkvLyAgMHgwMDE0CisJSU5URVJSVVBUX3QgaW50X3N0YXR1czsJCQkvLyAgMHgwMDE4CisJSU5URVJSVVBUX3QgaW50X21hc2s7CQkJLy8gIDB4MDAxQworCUlOVEVSUlVQVF90IGludF9hbGlhc19jbHJfZW47CQkvLyAgMHgwMDIwCisJSU5URVJSVVBUX3QgaW50X3N0YXR1c19hbGlhczsJCS8vICAweDAwMjQKKwlTV19SRVNFVF90IHN3X3Jlc2V0OwkJCS8vICAweDAwMjgKKwlTTFZfVElNRVJfdCBzbHZfdGltZXI7CQkJLy8gIDB4MDAyQworCU1TSV9DT05GSUdfdCBtc2lfY29uZmlnOwkJLy8gIDB4MDAzMAorCUxPT1BCQUNLX3QgbG9vcGJhY2s7CQkJLy8gIDB4MDAzNAorCXUzMiB3YXRjaGRvZ190aW1lcjsJCQkvLyAgMHgwMDM4Cit9IEdMT0JBTF90LCAqUEdMT0JBTF90OworCisvKiBFTkQgT0YgR0xPQkFMIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgY29udHJvbCBzdGF0dXMgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYRE1BX0NTUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjE5OwkJLy8gYml0cyAxMy0zMQorCQl1MzIgdHJhZmZpY19jbGFzczo0OwkvLyBiaXRzIDktMTIKKwkJdTMyIHNuZ2xfZXBrdF9tb2RlOjE7CS8vIGJpdCA4CisJCXUzMiBjYWNoZV90aHJzaGxkOjQ7CS8vIGJpdHMgNC03CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDItMworCQl1MzIgZHJvcF9UTFBfZGlzYWJsZToxOwkvLyBiaXQgMQorCQl1MzIgaGFsdDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBoYWx0OjE7CQkvLyBiaXQgMAorCQl1MzIgZHJvcF9UTFBfZGlzYWJsZToxOwkvLyBiaXQgMQorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyAyLTMKKwkJdTMyIGNhY2hlX3RocnNobGQ6NDsJLy8gYml0cyA0LTcKKwkJdTMyIHNuZ2xfZXBrdF9tb2RlOjE7CS8vIGJpdCA4CisJCXUzMiB0cmFmZmljX2NsYXNzOjQ7CS8vIGJpdHMgOS0xMgorCQl1MzIgdW51c2VkMjoxOTsJCS8vIGJpdHMgMTMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhETUFfQ1NSX3QsICpQVFhETUFfQ1NSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHBhY2tldCByaW5nIGJhc2UgYWRkcmVzcyBoaSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDQKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHBhY2tldCByaW5nIGJhc2UgYWRkcmVzcyBsb3cgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDA4CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBwYWNrZXQgcmluZyBudW1iZXIgb2YgZGVzY3JpcHRvciByZWcgaW4gdHhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwQworICovCit0eXBlZGVmIHVuaW9uIF9UWERNQV9QUl9OVU1fREVTX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQorCQl1MzIgcHJfbmRlczoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBwcl9uZGVzOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYRE1BX1BSX05VTV9ERVNfdCwgKlBUWERNQV9QUl9OVU1fREVTX3Q7CisKKwordHlwZWRlZiB1bmlvbiBfRE1BMTBXX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMTsJLy8gYml0cyAxMS0zMQorCQl1MzIgd3JhcDoxOwkvLyBiaXQgMTAKKwkJdTMyIHZhbDoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiB2YWw6MTA7CS8vIGJpdHMgMC05CisJCXUzMiB3cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgdW51c2VkOjIxOwkvLyBiaXRzIDExLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IERNQTEwV190LCAqUERNQTEwV190OworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSB3cml0ZSBhZGRyZXNzIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAxMAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSB3cml0ZSBhZGRyZXNzIGV4dGVybmFsIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAxNAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSByZWFkIGFkZHJlc3MgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDE4CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHN0YXR1cyB3cml0ZWJhY2sgYWRkcmVzcyBoaSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMUMKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHN0YXR1cyB3cml0ZWJhY2sgYWRkcmVzcyBsbyByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMjAKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHNlcnZpY2UgcmVxdWVzdCByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMjQKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgc2VydmljZSBjb21wbGV0ZSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMjgKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKwordHlwZWRlZiB1bmlvbiBfRE1BNFdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKwkJdTMyIHdyYXA6MTsJLy8gYml0IDQKKwkJdTMyIHZhbDo0OwkJLy8gYml0IDAtMworI2Vsc2UKKwkJdTMyIHZhbDo0OwkJLy8gYml0cyAwLTMKKwkJdTMyIHdyYXA6MTsJLy8gYml0IDQKKwkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IERNQTRXX3QsICpQRE1BNFdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgdHggZGVzY3JpcHRvciBjYWNoZSByZWFkIGluZGV4IHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyQworICogRGVmaW5lZCBlYXJsaWVyIChETUE0V190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHR4IGRlc2NyaXB0b3IgY2FjaGUgd3JpdGUgaW5kZXggcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDMwCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTRXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgZXJyb3IgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDM0CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYRE1BX0VSUk9SX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDM6MjI7CQkvLyBiaXRzIDEwLTMxCisJCXUzMiBXcmJrUmV3aW5kOjE7CS8vIGJpdCA5CisJCXUzMiBXcmJrUmVzZW5kOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQyOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgRGVzY3JSZXdpbmQ6MTsJLy8gYml0IDUKKwkJdTMyIERlc2NyUmVzZW5kOjE7CS8vIGJpdCA0CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDItMworCQl1MzIgUHlsZFJld2luZDoxOwkvLyBiaXQgMQorCQl1MzIgUHlsZFJlc2VuZDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIFB5bGRSZXNlbmQ6MTsJLy8gYml0IDAKKwkJdTMyIFB5bGRSZXdpbmQ6MTsJLy8gYml0IDEKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgMi0zCisJCXUzMiBEZXNjclJlc2VuZDoxOwkvLyBiaXQgNAorCQl1MzIgRGVzY3JSZXdpbmQ6MTsJLy8gYml0IDUKKwkJdTMyIHVudXNlZDI6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBXcmJrUmVzZW5kOjE7CS8vIGJpdCA4CisJCXUzMiBXcmJrUmV3aW5kOjE7CS8vIGJpdCA5CisJCXUzMiB1bnVzZWQzOjIyOwkJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWERNQV9FUlJPUl90LCAqUFRYRE1BX0VSUk9SX3Q7CisKKy8qCisgKiBUeCBETUEgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDAwCisgKi8KK3R5cGVkZWYgc3RydWN0IF9UWERNQV90IHsJCS8vIExvY2F0aW9uOgorCVRYRE1BX0NTUl90IGNzcjsJCS8vICAweDEwMDAKKwl1MzIgcHJfYmFzZV9oaTsJCQkvLyAgMHgxMDA0CisJdTMyIHByX2Jhc2VfbG87CQkJLy8gIDB4MTAwOAorCVRYRE1BX1BSX05VTV9ERVNfdCBwcl9udW1fZGVzOwkvLyAgMHgxMDBDCisJRE1BMTBXX3QgdHhxX3dyX2FkZHI7CQkvLyAgMHgxMDEwCisJRE1BMTBXX3QgdHhxX3dyX2FkZHJfZXh0OwkvLyAgMHgxMDE0CisJRE1BMTBXX3QgdHhxX3JkX2FkZHI7CQkvLyAgMHgxMDE4CisJdTMyIGRtYV93Yl9iYXNlX2hpOwkJLy8gIDB4MTAxQworCXUzMiBkbWFfd2JfYmFzZV9sbzsJCS8vICAweDEwMjAKKwlETUExMFdfdCBzZXJ2aWNlX3JlcXVlc3Q7CS8vICAweDEwMjQKKwlETUExMFdfdCBzZXJ2aWNlX2NvbXBsZXRlOwkvLyAgMHgxMDI4CisJRE1BNFdfdCBjYWNoZV9yZF9pbmRleDsJCS8vICAweDEwMkMKKwlETUE0V190IGNhY2hlX3dyX2luZGV4OwkJLy8gIDB4MTAzMAorCVRYRE1BX0VSUk9SX3QgVHhEbWFFcnJvcjsJLy8gIDB4MTAzNAorCXUzMiBEZXNjQWJvcnRDb3VudDsJCS8vICAweDEwMzgKKwl1MzIgUGF5bG9hZEFib3J0Q250OwkJLy8gIDB4MTAzYworCXUzMiBXcml0ZUJhY2tBYm9ydENudDsJCS8vICAweDEwNDAKKwl1MzIgRGVzY1RpbWVvdXRDbnQ7CQkvLyAgMHgxMDQ0CisJdTMyIFBheWxvYWRUaW1lb3V0Q250OwkJLy8gIDB4MTA0OAorCXUzMiBXcml0ZUJhY2tUaW1lb3V0Q250OwkvLyAgMHgxMDRjCisJdTMyIERlc2NFcnJvckNvdW50OwkJLy8gIDB4MTA1MAorCXUzMiBQYXlsb2FkRXJyb3JDbnQ7CQkvLyAgMHgxMDU0CisJdTMyIFdyaXRlQmFja0Vycm9yQ250OwkJLy8gIDB4MTA1OAorCXUzMiBEcm9wcGVkVExQQ291bnQ7CQkvLyAgMHgxMDVjCisJRE1BMTBXX3QgTmV3U2VydmljZUNvbXBsZXRlOwkvLyAgMHgxMDYwCisJdTMyIEV0aGVybmV0UGFja2V0Q291bnQ7CS8vICAweDEwNjQKK30gVFhETUFfdCwgKlBUWERNQV90OworCisvKiBFTkQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBSWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBjb250cm9sIHN0YXR1cyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfQ1NSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6MTQ7CQkvLyBiaXRzIDE4LTMxCisJCXUzMiBoYWx0X3N0YXR1czoxOwkvLyBiaXQgMTcKKwkJdTMyIHBrdF9kb25lX2ZsdXNoOjE7CS8vIGJpdCAxNgorCQl1MzIgcGt0X2Ryb3BfZGlzYWJsZToxOwkvLyBiaXQgMTUKKwkJdTMyIHVudXNlZDE6MTsJCS8vIGJpdCAxNAorCQl1MzIgZmJyMV9lbmFibGU6MTsJLy8gYml0IDEzCisJCXUzMiBmYnIxX3NpemU6MjsJLy8gYml0cyAxMS0xMgorCQl1MzIgZmJyMF9lbmFibGU6MTsJLy8gYml0IDEwCisJCXUzMiBmYnIwX3NpemU6MjsJLy8gYml0cyA4LTkKKwkJdTMyIGRtYV9iaWdfZW5kaWFuOjE7CS8vIGJpdCA3CisJCXUzMiBwa3RfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNgorCQl1MzIgcHNyX2JpZ19lbmRpYW46MTsJLy8gYml0IDUKKwkJdTMyIGZicl9iaWdfZW5kaWFuOjE7CS8vIGJpdCA0CisJCXUzMiB0YzozOwkJLy8gYml0cyAxLTMKKwkJdTMyIGhhbHQ6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgaGFsdDoxOwkJLy8gYml0IDAKKwkJdTMyIHRjOjM7CQkvLyBiaXRzIDEtMworCQl1MzIgZmJyX2JpZ19lbmRpYW46MTsJLy8gYml0IDQKKwkJdTMyIHBzcl9iaWdfZW5kaWFuOjE7CS8vIGJpdCA1CisJCXUzMiBwa3RfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNgorCQl1MzIgZG1hX2JpZ19lbmRpYW46MTsJLy8gYml0IDcKKwkJdTMyIGZicjBfc2l6ZToyOwkvLyBiaXRzIDgtOQorCQl1MzIgZmJyMF9lbmFibGU6MTsJLy8gYml0IDEwCisJCXUzMiBmYnIxX3NpemU6MjsJLy8gYml0cyAxMS0xMgorCQl1MzIgZmJyMV9lbmFibGU6MTsJLy8gYml0IDEzCisJCXUzMiB1bnVzZWQxOjE7CQkvLyBiaXQgMTQKKwkJdTMyIHBrdF9kcm9wX2Rpc2FibGU6MTsJLy8gYml0IDE1CisJCXUzMiBwa3RfZG9uZV9mbHVzaDoxOwkvLyBiaXQgMTYKKwkJdTMyIGhhbHRfc3RhdHVzOjE7CS8vIGJpdCAxNworCQl1MzIgdW51c2VkMjoxNDsJCS8vIGJpdHMgMTgtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfQ1NSX3QsICpQUlhETUFfQ1NSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGRtYSB3cml0ZWJhY2sgbG8gcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDA0CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBkbWEgd3JpdGViYWNrIGhpIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwOAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgbnVtYmVyIG9mIHBhY2tldHMgZG9uZSByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMEMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfTlVNX1BLVF9ET05FX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyNDsJLy8gYml0cyA4LTMxCisJCXUzMiBudW1fZG9uZTo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIG51bV9kb25lOjg7CS8vIGJpdHMgMC03CisJCXUzMiB1bnVzZWQ6MjQ7CS8vIGJpdHMgOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9OVU1fUEtUX0RPTkVfdCwgKlBSWERNQV9OVU1fUEtUX0RPTkVfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgbWF4IHBhY2tldCB0aW1lIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAxMAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9NQVhfUEtUX1RJTUVfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjE0OwkJLy8gYml0cyAxOC0zMQorCQl1MzIgdGltZV9kb25lOjE4OwkvLyBiaXRzIDAtMTcKKyNlbHNlCisJCXUzMiB0aW1lX2RvbmU6MTg7CS8vIGJpdHMgMC0xNworCQl1MzIgdW51c2VkOjE0OwkJLy8gYml0cyAxOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9NQVhfUEtUX1RJTUVfdCwgKlBSWERNQV9NQVhfUEtUX1RJTUVfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcnggcXVldWUgcmVhZCBhZGRyZXNzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAxNAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSByZWFkIGFkZHJlc3MgZXh0ZXJuYWwgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDE4CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHdyaXRlIGFkZHJlc3MgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDFDCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBiYXNlIGFkZHJlc3MgbG8gcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDIwCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgYmFzZSBhZGRyZXNzIGhpIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyNAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZWcgaW4gcnhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyOAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfTlVNX0RFU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisJCXUzMiBwc3JfbmRlczoxMjsJLy8gYml0IDAtMTEKKyNlbHNlCisJCXUzMiBwc3JfbmRlczoxMjsJLy8gYml0IDAtMTEKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX05VTV9ERVNfdCwgKlBSWERNQV9QU1JfTlVNX0RFU190OworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgYXZhaWxhYmxlIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMkMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX0FWQUlMX09GRlNFVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MTk7CQkvLyBiaXRzIDEzLTMxCisJCXUzMiBwc3JfYXZhaWxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHBzcl9hdmFpbDoxMjsJLy8gYml0IDAtMTEKKyNlbHNlCisJCXUzMiBwc3JfYXZhaWw6MTI7CS8vIGJpdCAwLTExCisJCXUzMiBwc3JfYXZhaWxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHVudXNlZDoxOTsJCS8vIGJpdHMgMTMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX0FWQUlMX09GRlNFVF90LCAqUFJYRE1BX1BTUl9BVkFJTF9PRkZTRVRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIGZ1bGwgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAzMAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfRlVMTF9PRkZTRVRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjE5OwkJLy8gYml0cyAxMy0zMQorCQl1MzIgcHNyX2Z1bGxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHBzcl9mdWxsOjEyOwkvLyBiaXQgMC0xMQorI2Vsc2UKKwkJdTMyIHBzcl9mdWxsOjEyOwkvLyBiaXQgMC0xMQorCQl1MzIgcHNyX2Z1bGxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHVudXNlZDoxOTsJCS8vIGJpdHMgMTMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QsICpQUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBhY2Nlc3MgaW5kZXggcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDM0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKwkJdTMyIHBzcl9haTo1OwkvLyBiaXRzIDAtNAorI2Vsc2UKKwkJdTMyIHBzcl9haTo1OwkvLyBiaXRzIDAtNAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX0FDQ0VTU19JTkRFWF90LCAqUFJYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIG1pbmltdW0gZGVzY3JpcHRvcnMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMzgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX01JTl9ERVNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIwOwkvLyBiaXRzIDEyLTMxCisJCXUzMiBwc3JfbWluOjEyOwkvLyBiaXRzIDAtMTEKKyNlbHNlCisJCXUzMiBwc3JfbWluOjEyOwkvLyBiaXRzIDAtMTEKKwkJdTMyIHVudXNlZDoyMDsJLy8gYml0cyAxMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9QU1JfTUlOX0RFU190LCAqUFJYRE1BX1BTUl9NSU5fREVTX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgYmFzZSBsbyBhZGRyZXNzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAzQworICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyBiYXNlIGhpIGFkZHJlc3MgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDQwCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZWcgaW4gcnhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA0NAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9GQlJfTlVNX0RFU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisJCXUzMiBmYnJfbmRlc2M6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgZmJyX25kZXNjOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9GQlJfTlVNX0RFU190LCAqUFJYRE1BX0ZCUl9OVU1fREVTX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMCBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA0OAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDAgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDRDCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIGNhY2hlIDAgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDUwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX0ZCQ19SRF9JTkRFWF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorCQl1MzIgZmJjX3JkaTo1OwkvLyBiaXQgMC00CisjZWxzZQorCQl1MzIgZmJjX3JkaTo1OwkvLyBiaXQgMC00CisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9GQkNfUkRfSU5ERVhfdCwgKlBSWERNQV9GQkNfUkRfSU5ERVhfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAwIG1pbmltdW0gZGVzY3JpcHRvciByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNTQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfRkJSX01JTl9ERVNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBmYnJfbWluOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIGZicl9taW46MTA7CS8vIGJpdHMgMC05CisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfRkJSX01JTl9ERVNfdCwgKlBSWERNQV9GQlJfTUlOX0RFU190OworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgYmFzZSBhZGRyZXNzIGxvIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA1OCAtIDB4MjA1QworICogRGVmaW5lZCBlYXJsaWVyIChSWERNQV9GQlJfQkFTRV9MT190IGFuZCBSWERNQV9GQlJfQkFTRV9ISV90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNjAKKyAqIERlZmluZWQgZWFybGllciAoUlhETUFfRkJSX05VTV9ERVNfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgYXZhaWxhYmxlIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNjQKKyAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJSX0FWQUlMX09GRlNFVF90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBmdWxsIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNjgKKyAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJSX0ZVTExfT0ZGU0VUX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgY2FjaGUgMSByZWFkIGluZGV4IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA2QworICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQkNfUkRfSU5ERVhfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgbWluaW11bSBkZXNjcmlwdG9yIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA3MAorICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQlJfTUlOX0RFU190KQorICovCisKKy8qCisgKiBSeCBETUEgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDAwCisgKi8KK3R5cGVkZWYgc3RydWN0IF9SWERNQV90IHsJCQkJLy8gTG9jYXRpb246CisJUlhETUFfQ1NSX3QgY3NyOwkJCQkvLyAgMHgyMDAwCisJdTMyIGRtYV93Yl9iYXNlX2xvOwkJCQkvLyAgMHgyMDA0CisJdTMyIGRtYV93Yl9iYXNlX2hpOwkJCQkvLyAgMHgyMDA4CisJUlhETUFfTlVNX1BLVF9ET05FX3QgbnVtX3BrdF9kb25lOwkJLy8gIDB4MjAwQworCVJYRE1BX01BWF9QS1RfVElNRV90IG1heF9wa3RfdGltZTsJCS8vICAweDIwMTAKKwlETUExMFdfdCByeHFfcmRfYWRkcjsJCQkJLy8gIDB4MjAxNAorCURNQTEwV190IHJ4cV9yZF9hZGRyX2V4dDsJCQkvLyAgMHgyMDE4CisJRE1BMTBXX3QgcnhxX3dyX2FkZHI7CQkJCS8vICAweDIwMUMKKwl1MzIgcHNyX2Jhc2VfbG87CQkJCS8vICAweDIwMjAKKwl1MzIgcHNyX2Jhc2VfaGk7CQkJCS8vICAweDIwMjQKKwlSWERNQV9QU1JfTlVNX0RFU190IHBzcl9udW1fZGVzOwkJLy8gIDB4MjAyOAorCVJYRE1BX1BTUl9BVkFJTF9PRkZTRVRfdCBwc3JfYXZhaWxfb2Zmc2V0OwkvLyAgMHgyMDJDCisJUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QgcHNyX2Z1bGxfb2Zmc2V0OwkvLyAgMHgyMDMwCisJUlhETUFfUFNSX0FDQ0VTU19JTkRFWF90IHBzcl9hY2Nlc3NfaW5kZXg7CS8vICAweDIwMzQKKwlSWERNQV9QU1JfTUlOX0RFU190IHBzcl9taW5fZGVzOwkJLy8gIDB4MjAzOAorCXUzMiBmYnIwX2Jhc2VfbG87CQkJCS8vICAweDIwM0MKKwl1MzIgZmJyMF9iYXNlX2hpOwkJCQkvLyAgMHgyMDQwCisJUlhETUFfRkJSX05VTV9ERVNfdCBmYnIwX251bV9kZXM7CQkvLyAgMHgyMDQ0CisJRE1BMTBXX3QgZmJyMF9hdmFpbF9vZmZzZXQ7CQkJLy8gIDB4MjA0OAorCURNQTEwV190IGZicjBfZnVsbF9vZmZzZXQ7CQkJLy8gIDB4MjA0QworCVJYRE1BX0ZCQ19SRF9JTkRFWF90IGZicjBfcmRfaW5kZXg7CQkvLyAgMHgyMDUwCisJUlhETUFfRkJSX01JTl9ERVNfdCBmYnIwX21pbl9kZXM7CQkvLyAgMHgyMDU0CisJdTMyIGZicjFfYmFzZV9sbzsJCQkJLy8gIDB4MjA1OAorCXUzMiBmYnIxX2Jhc2VfaGk7CQkJCS8vICAweDIwNUMKKwlSWERNQV9GQlJfTlVNX0RFU190IGZicjFfbnVtX2RlczsJCS8vICAweDIwNjAKKwlETUExMFdfdCBmYnIxX2F2YWlsX29mZnNldDsJCQkvLyAgMHgyMDY0CisJRE1BMTBXX3QgZmJyMV9mdWxsX29mZnNldDsJCQkvLyAgMHgyMDY4CisJUlhETUFfRkJDX1JEX0lOREVYX3QgZmJyMV9yZF9pbmRleDsJCS8vICAweDIwNkMKKwlSWERNQV9GQlJfTUlOX0RFU190IGZicjFfbWluX2RlczsJCS8vICAweDIwNzAKK30gUlhETUFfdCwgKlBSWERNQV90OworCisvKiBFTkQgT0YgUlhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBjb250cm9sIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwMAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19DVExfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI0OwkJLy8gYml0cyA4LTMxCisJCXUzMiBja2xzZWdfZGlhYmxlOjE7CS8vIGJpdCA3CisJCXUzMiBja2JjbnRfZGlzYWJsZToxOwkvLyBiaXQgNgorCQl1MzIgY2tzZWdudW06MTsJCS8vIGJpdCA1CisJCXUzMiBhc3luY19kaXNhYmxlOjE7CS8vIGJpdCA0CisJCXUzMiBmY19kaXNhYmxlOjE7CS8vIGJpdCAzCisJCXUzMiBtY2lmX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIG1pZl9kaXNhYmxlOjE7CS8vIGJpdCAxCisJCXUzMiB0eG1hY19lbjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiB0eG1hY19lbjoxOwkJLy8gYml0IDAKKwkJdTMyIG1pZl9kaXNhYmxlOjE7CS8vIGJpdCAxIG1hYyBpbnRlcmZhY2UKKwkJdTMyIG1jaWZfZGlzYWJsZToxOwkvLyBiaXQgMiBtZW0uIGNvbnRyLiBpbnRlcmZhY2UKKwkJdTMyIGZjX2Rpc2FibGU6MTsJLy8gYml0IDMKKwkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJLy8gYml0IDQKKwkJdTMyIGNrc2VnbnVtOjE7CQkvLyBiaXQgNQorCQl1MzIgY2tiY250X2Rpc2FibGU6MTsJLy8gYml0IDYKKwkJdTMyIGNrbHNlZ19kaWFibGU6MTsJLy8gYml0IDcKKwkJdTMyIHVudXNlZDoyNDsJCS8vIGJpdHMgOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19DVExfdCwgKlBUWE1BQ19DVExfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3Igc2hhZG93IHBvaW50ZXIgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDA0CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX1NIQURPV19QVFJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjU7CS8vIGJpdHMgMjctMzEKKwkJdTMyIHR4cV9yZF9wdHI6MTE7CS8vIGJpdHMgMTYtMjYKKwkJdTMyIHJlc2VydmVkOjU7CQkvLyBiaXRzIDExLTE1CisJCXUzMiB0eHFfd3JfcHRyOjExOwkvLyBiaXRzIDAtMTAKKyNlbHNlCisJCXUzMiB0eHFfd3JfcHRyOjExOwkvLyBiaXRzIDAtMTAKKwkJdTMyIHJlc2VydmVkOjU7CQkvLyBiaXRzIDExLTE1CisJCXUzMiB0eHFfcmRfcHRyOjExOwkvLyBiaXRzIDE2LTI2CisJCXUzMiByZXNlcnZlZDI6NTsJLy8gYml0cyAyNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19TSEFET1dfUFRSX3QsICpQVFhNQUNfU0hBRE9XX1BUUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBlcnJvciBjb3VudCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMDgKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfRVJSX0NOVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisJCXUzMiByZXNlcnZlZDo0OwkJLy8gYml0cyA4LTExCisJCXUzMiB0eHFfdW5kZXJydW46NDsJLy8gYml0cyA0LTcKKwkJdTMyIGZpZm9fdW5kZXJydW46NDsJLy8gYml0cyAwLTMKKyNlbHNlCisJCXUzMiBmaWZvX3VuZGVycnVuOjQ7CS8vIGJpdHMgMC0zCisJCXUzMiB0eHFfdW5kZXJydW46NDsJLy8gYml0cyA0LTcKKwkJdTMyIHJlc2VydmVkOjQ7CQkvLyBiaXRzIDgtMTEKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfRVJSX0NOVF90LCAqUFRYTUFDX0VSUl9DTlRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgbWF4IGZpbGwgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDBDCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX01BWF9GSUxMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKwkJdTMyIG1heF9maWxsOjEyOwkvLyBiaXRzIDAtMTEKKyNlbHNlCisJCXUzMiBtYXhfZmlsbDoxMjsJLy8gYml0cyAwLTExCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX01BWF9GSUxMX3QsICpQVFhNQUNfTUFYX0ZJTExfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgY2YgcGFyYW1ldGVyIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxMAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19DRl9QQVJBTV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBjZmVwOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBjZnB0OjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBjZnB0OjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIGNmZXA6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfQ0ZfUEFSQU1fdCwgKlBUWE1BQ19DRl9QQVJBTV90OworCisvKgorICogc3RydWN0dXJlIGZvciB0eCB0ZXN0IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxNAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19UWFRFU1RfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMjoxNTsJCS8vIGJpdHMgMTctMzEKKwkJdTMyIHJlc2VydmVkMToxOwkvLyBiaXQgMTYKKwkJdTMyIHR4dGVzdF9lbjoxOwkvLyBiaXQgMTUKKwkJdTMyIHVudXNlZDE6NDsJCS8vIGJpdHMgMTEtMTQKKwkJdTMyIHR4cXRlc3RfcHRyOjExOwkvLyBiaXRzIDAtMTEKKyNlbHNlCisJCXUzMiB0eHF0ZXN0X3B0cjoxMTsJLy8gYml0cyAwLTEwCisJCXUzMiB1bnVzZWQxOjQ7CQkvLyBiaXRzIDExLTE0CisJCXUzMiB0eHRlc3RfZW46MTsJLy8gYml0IDE1CisJCXUzMiByZXNlcnZlZDE6MTsJLy8gYml0IDE2CisJCXUzMiB1bnVzZWQyOjE1OwkJLy8gYml0cyAxNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19UWFRFU1RfdCwgKlBUWE1BQ19UWFRFU1RfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDE4CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX0VSUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCisJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgY3RybDJfZXJyOjE7CS8vIGJpdCA1CisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGJjbnRfZXJyOjE7CQkvLyBiaXQgMworCQl1MzIgbHNlZ19lcnI6MTsJCS8vIGJpdCAyCisJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKwkJdTMyIHNlZ251bV9lcnI6MTsJLy8gYml0IDEKKwkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgorCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGZpZm9fdW5kZXJydW46MTsJLy8gYml0IDgKKwkJdTMyIHVudXNlZDI6MjM7CQkvLyBiaXRzIDktMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfRVJSX3QsICpQVFhNQUNfRVJSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIGludGVycnVwdCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMUMKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfRVJSX0lOVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCisJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgY3RybDJfZXJyOjE7CS8vIGJpdCA1CisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGJjbnRfZXJyOjE7CQkvLyBiaXQgMworCQl1MzIgbHNlZ19lcnI6MTsJCS8vIGJpdCAyCisJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKwkJdTMyIHNlZ251bV9lcnI6MTsJLy8gYml0IDEKKwkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgorCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGZpZm9fdW5kZXJydW46MTsJLy8gYml0IDgKKwkJdTMyIHVudXNlZDI6MjM7CQkvLyBiaXRzIDktMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfRVJSX0lOVF90LCAqUFRYTUFDX0VSUl9JTlRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgaW50ZXJydXB0IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAyMAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19DUF9DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQorCQl1MzIgYnBfcmVxOjE7CQkvLyBiaXQgMQorCQl1MzIgYnBfeG9ueG9mZjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGJwX3hvbnhvZmY6MTsJLy8gYml0IDAKKwkJdTMyIGJwX3JlcToxOwkJLy8gYml0IDEKKwkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19CUF9DVFJMX3QsICpQVFhNQUNfQlBfQ1RSTF90OworCisvKgorICogVHggTUFDIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCit0eXBlZGVmIHN0cnVjdCBfVFhNQUNfdCB7CQkvLyBMb2NhdGlvbjoKKwlUWE1BQ19DVExfdCBjdGw7CQkvLyAgMHgzMDAwCisJVFhNQUNfU0hBRE9XX1BUUl90IHNoYWRvd19wdHI7CS8vICAweDMwMDQKKwlUWE1BQ19FUlJfQ05UX3QgZXJyX2NudDsJLy8gIDB4MzAwOAorCVRYTUFDX01BWF9GSUxMX3QgbWF4X2ZpbGw7CS8vICAweDMwMEMKKwlUWE1BQ19DRl9QQVJBTV90IGNmX3BhcmFtOwkvLyAgMHgzMDEwCisJVFhNQUNfVFhURVNUX3QgdHhfdGVzdDsJCS8vICAweDMwMTQKKwlUWE1BQ19FUlJfdCBlcnI7CQkvLyAgMHgzMDE4CisJVFhNQUNfRVJSX0lOVF90IGVycl9pbnQ7CS8vICAweDMwMUMKKwlUWE1BQ19CUF9DVFJMX3QgYnBfY3RybDsJLy8gIDB4MzAyMAorfSBUWE1BQ190LCAqUFRYTUFDX3Q7CisKKy8qIEVORCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKiBTVEFSVCBPRiBSWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeG1hYyBjb250cm9sIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwMAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA3LTMxCisJCXUzMiByeG1hY19pbnRfZGlzYWJsZToxOwkvLyBiaXQgNgorCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkJLy8gYml0IDUKKwkJdTMyIG1pZl9kaXNhYmxlOjE7CQkvLyBiaXQgNAorCQl1MzIgd29sX2Rpc2FibGU6MTsJCS8vIGJpdCAzCisJCXUzMiBwa3RfZmlsdGVyX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIG1jaWZfZGlzYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIHJ4bWFjX2VuOjE7CQkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiByeG1hY19lbjoxOwkJCS8vIGJpdCAwCisJCXUzMiBtY2lmX2Rpc2FibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBwa3RfZmlsdGVyX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIHdvbF9kaXNhYmxlOjE7CQkvLyBiaXQgMworCQl1MzIgbWlmX2Rpc2FibGU6MTsJCS8vIGJpdCA0CisJCXUzMiBhc3luY19kaXNhYmxlOjE7CQkvLyBiaXQgNQorCQl1MzIgcnhtYWNfaW50X2Rpc2FibGU6MTsJLy8gYml0IDYKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX0NUUkxfdCwgKlBSWE1BQ19DVFJMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIENvbnRyb2wgYW5kIENSQyAwIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwNAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1RMX0NSQzBfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgY3JjMDoxNjsJCS8vIGJpdHMgMTYtMzEKKwkJdTMyIHJlc2VydmU6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTMyIGlnbm9yZV9wcDoxOwkvLyBiaXQgMTEKKwkJdTMyIGlnbm9yZV9tcDoxOwkvLyBiaXQgMTAKKwkJdTMyIGNscl9pbnRyOjE7CQkvLyBiaXQgOQorCQl1MzIgaWdub3JlX2xpbmtfY2hnOjE7CS8vIGJpdCA4CisJCXUzMiBpZ25vcmVfdW5pOjE7CS8vIGJpdCA3CisJCXUzMiBpZ25vcmVfbXVsdGk6MTsJLy8gYml0IDYKKwkJdTMyIGlnbm9yZV9icm9hZDoxOwkvLyBiaXQgNQorCQl1MzIgdmFsaWRfY3JjNDoxOwkvLyBiaXQgNAorCQl1MzIgdmFsaWRfY3JjMzoxOwkvLyBiaXQgMworCQl1MzIgdmFsaWRfY3JjMjoxOwkvLyBiaXQgMgorCQl1MzIgdmFsaWRfY3JjMToxOwkvLyBiaXQgMQorCQl1MzIgdmFsaWRfY3JjMDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHZhbGlkX2NyYzA6MTsJLy8gYml0IDAKKwkJdTMyIHZhbGlkX2NyYzE6MTsJLy8gYml0IDEKKwkJdTMyIHZhbGlkX2NyYzI6MTsJLy8gYml0IDIKKwkJdTMyIHZhbGlkX2NyYzM6MTsJLy8gYml0IDMKKwkJdTMyIHZhbGlkX2NyYzQ6MTsJLy8gYml0IDQKKwkJdTMyIGlnbm9yZV9icm9hZDoxOwkvLyBiaXQgNQorCQl1MzIgaWdub3JlX211bHRpOjE7CS8vIGJpdCA2CisJCXUzMiBpZ25vcmVfdW5pOjE7CS8vIGJpdCA3CisJCXUzMiBpZ25vcmVfbGlua19jaGc6MTsJLy8gYml0IDgKKwkJdTMyIGNscl9pbnRyOjE7CQkvLyBiaXQgOQorCQl1MzIgaWdub3JlX21wOjE7CS8vIGJpdCAxMAorCQl1MzIgaWdub3JlX3BwOjE7CS8vIGJpdCAxMQorCQl1MzIgcmVzZXJ2ZTo0OwkJLy8gYml0cyAxMi0xNQorCQl1MzIgY3JjMDoxNjsJCS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfV09MX0NUTF9DUkMwX3QsICpQUlhNQUNfV09MX0NUTF9DUkMwX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIENSQyAxIGFuZCBDUkMgMiByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMDgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX0NSQzEyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGNyYzI6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIGNyYzE6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIGNyYzE6MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgY3JjMjoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19XT0xfQ1JDMTJfdCwgKlBSWE1BQ19XT0xfQ1JDMTJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgQ1JDIDMgYW5kIENSQyA0IHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwQworICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1JDMzRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgY3JjNDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgY3JjMzoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgY3JjMzoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiBjcmM0OjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1dPTF9DUkMzNF90LCAqUFJYTUFDX1dPTF9DUkMzNF90OworCisvKgorICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBTb3VyY2UgQWRkcmVzcyBMbyByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX1NBX0xPX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHNhMzo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBzYTQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgc2E1Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgc2E2Ojg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgc2E2Ojg7CS8vIGJpdHMgMC03CisJCXUzMiBzYTU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBzYTQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgc2EzOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfV09MX1NBX0xPX3QsICpQUlhNQUNfV09MX1NBX0xPX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIFNvdXJjZSBBZGRyZXNzIEhpIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAxNAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfU0FfSElfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIHNhMTo4OwkJLy8gYml0cyA4LTE1CisJCXUzMiBzYTI6ODsJCS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgc2EyOjg7CQkvLyBiaXRzIDAtNworCQl1MzIgc2ExOjg7CQkvLyBiaXRzIDgtMTUKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1dPTF9TQV9ISV90LCAqUFJYTUFDX1dPTF9TQV9ISV90OworCisvKgorICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBtYXNrIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAxOCAtIDB4NDA2NAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgVW5pY2FzdCBQYWtldCBGaWx0ZXIgQWRkcmVzcyAxIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA2OAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19VTklfUEZfQUREUjFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgYWRkcjFfMzo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBhZGRyMV80Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIGFkZHIxXzU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBhZGRyMV82Ojg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgYWRkcjFfNjo4OwkvLyBiaXRzIDAtNworCQl1MzIgYWRkcjFfNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIxXzQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjFfMzo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1VOSV9QRl9BRERSMV90LCAqUFJYTUFDX1VOSV9QRl9BRERSMV90OworCisvKgorICogc3RydWN0dXJlIGZvciBVbmljYXN0IFBha2V0IEZpbHRlciBBZGRyZXNzIDIgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDZDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1VOSV9QRl9BRERSMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBhZGRyMl8zOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIGFkZHIyXzQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjJfNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIyXzY6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBhZGRyMl82Ojg7CS8vIGJpdHMgMC03CisJCXUzMiBhZGRyMl81Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjJfNDo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMl8zOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfVU5JX1BGX0FERFIyX3QsICpQUlhNQUNfVU5JX1BGX0FERFIyX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFVuaWNhc3QgUGFrZXQgRmlsdGVyIEFkZHJlc3MgMSAmIDIgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDcwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1VOSV9QRl9BRERSM190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBhZGRyMl8xOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIGFkZHIyXzI6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjFfMTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIxXzI6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBhZGRyMV8yOjg7CS8vIGJpdHMgMC03CisJCXUzMiBhZGRyMV8xOjg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjJfMjo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMl8xOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfVU5JX1BGX0FERFIzX3QsICpQUlhNQUNfVU5JX1BGX0FERFIzX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE11bHRpY2FzdCBIYXNoIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA3NCAtIDB4NDA4MAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgUGFja2V0IEZpbHRlciBDb250cm9sIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA4NAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19QRl9DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6OTsJCS8vIGJpdHMgMjMtMzEKKwkJdTMyIG1pbl9wa3Rfc2l6ZTo3OwkvLyBiaXRzIDE2LTIyCisJCXUzMiB1bnVzZWQxOjEyOwkJLy8gYml0cyA0LTE1CisJCXUzMiBmaWx0ZXJfZnJhZ19lbjoxOwkvLyBiaXQgMworCQl1MzIgZmlsdGVyX3VuaV9lbjoxOwkvLyBiaXQgMgorCQl1MzIgZmlsdGVyX211bHRpX2VuOjE7CS8vIGJpdCAxCisJCXUzMiBmaWx0ZXJfYnJvYWRfZW46MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBmaWx0ZXJfYnJvYWRfZW46MTsJLy8gYml0IDAKKwkJdTMyIGZpbHRlcl9tdWx0aV9lbjoxOwkvLyBiaXQgMQorCQl1MzIgZmlsdGVyX3VuaV9lbjoxOwkvLyBiaXQgMgorCQl1MzIgZmlsdGVyX2ZyYWdfZW46MTsJLy8gYml0IDMKKwkJdTMyIHVudXNlZDE6MTI7CQkvLyBiaXRzIDQtMTUKKwkJdTMyIG1pbl9wa3Rfc2l6ZTo3OwkvLyBiaXRzIDE2LTIyCisJCXUzMiB1bnVzZWQyOjk7CQkvLyBiaXRzIDIzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1BGX0NUUkxfdCwgKlBSWE1BQ19QRl9DVFJMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSBDb250cm9sIE1heCBTZWdtZW50IHJlZyBpbiByeG1hYworICogYWRkcmVzcyBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDg4CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBtYXhfc2l6ZTo4OwkvLyBiaXRzIDItOQorCQl1MzIgZmNfZW46MTsJLy8gYml0IDEKKwkJdTMyIHNlZ19lbjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHNlZ19lbjoxOwkvLyBiaXQgMAorCQl1MzIgZmNfZW46MTsJLy8gYml0IDEKKwkJdTMyIG1heF9zaXplOjg7CS8vIGJpdHMgMi05CisJCXUzMiByZXNlcnZlZDoyMjsJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190LCAqUFJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSBXYXRlciBNYXJrIHJlZyBpbiByeG1hYyBhZGRyZXNzCisgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDhDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX01DSUZfV0FURVJfTUFSS190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQorCQl1MzIgbWFya19oaToxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgcmVzZXJ2ZWQxOjY7CS8vIGJpdHMgMTAtMTUKKwkJdTMyIG1hcmtfbG86MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgbWFya19sbzoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CisJCXUzMiBtYXJrX2hpOjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19NQ0lGX1dBVEVSX01BUktfdCwgKlBSWE1BQ19NQ0lGX1dBVEVSX01BUktfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgUnggUXVldWUgRGlhbG9nIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfUlhRX0RJQUdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKKwkJdTMyIHJkX3B0cjoxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgcmVzZXJ2ZWQxOjY7CS8vIGJpdHMgMTAtMTUKKwkJdTMyIHdyX3B0cjoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiB3cl9wdHI6MTA7CS8vIGJpdHMgMC05CisJCXUzMiByZXNlcnZlZDE6NjsJLy8gYml0cyAxMC0xNQorCQl1MzIgcmRfcHRyOjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19SWFFfRElBR190LCAqUFJYTUFDX1JYUV9ESUFHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHNwYWNlIGF2YWlsaWFibGUgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5NAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19TUEFDRV9BVkFJTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6MTU7CQkvLyBiaXRzIDE3LTMxCisJCXUzMiBzcGFjZV9hdmFpbF9lbjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJlc2VydmVkMTo2OwkJLy8gYml0cyAxMC0xNQorCQl1MzIgc3BhY2VfYXZhaWw6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgc3BhY2VfYXZhaWw6MTA7CS8vIGJpdHMgMC05CisJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMTAtMTUKKwkJdTMyIHNwYWNlX2F2YWlsX2VuOjE7CS8vIGJpdCAxNgorCQl1MzIgcmVzZXJ2ZWQyOjE1OwkJLy8gYml0cyAxNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19TUEFDRV9BVkFJTF90LCAqUFJYTUFDX1NQQUNFX0FWQUlMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIG1hbmFnZW1lbnQgaW50ZXJmYWNlIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfTUlGX0NUTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlOjE0OwkJLy8gYml0cyAxOC0zMQorCQl1MzIgZHJvcF9wa3RfZW46MTsJCS8vIGJpdCAxNworCQl1MzIgZHJvcF9wa3RfbWFzazoxNzsJLy8gYml0cyAwLTE2CisjZWxzZQorCQl1MzIgZHJvcF9wa3RfbWFzazoxNzsJLy8gYml0cyAwLTE2CisJCXUzMiBkcm9wX3BrdF9lbjoxOwkJLy8gYml0IDE3CisJCXUzMiByZXNlcnZlOjE0OwkJLy8gYml0cyAxOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19NSUZfQ1RMX3QsICpQUlhNQUNfTUlGX0NUTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBFcnJvciByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDlDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX0VSUk9SX1JFR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlOjI4OwkvLyBiaXRzIDQtMzEKKwkJdTMyIG1pZjoxOwkJLy8gYml0IDMKKwkJdTMyIGFzeW5jOjE7CS8vIGJpdCAyCisJCXUzMiBwa3RfZmlsdGVyOjE7CS8vIGJpdCAxCisJCXUzMiBtY2lmOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgbWNpZjoxOwkvLyBiaXQgMAorCQl1MzIgcGt0X2ZpbHRlcjoxOwkvLyBiaXQgMQorCQl1MzIgYXN5bmM6MTsJLy8gYml0IDIKKwkJdTMyIG1pZjoxOwkJLy8gYml0IDMKKwkJdTMyIHJlc2VydmU6Mjg7CS8vIGJpdHMgNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19FUlJPUl9SRUdfdCwgKlBSWE1BQ19FUlJPUl9SRUdfdDsKKworLyoKKyAqIFJ4IE1BQyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX1JYTUFDX3QgewkJCQkvLyBMb2NhdGlvbjoKKwlSWE1BQ19DVFJMX3QgY3RybDsJCQkJLy8gIDB4NDAwMAorCVJYTUFDX1dPTF9DVExfQ1JDMF90IGNyYzA7CQkJLy8gIDB4NDAwNAorCVJYTUFDX1dPTF9DUkMxMl90IGNyYzEyOwkJCS8vICAweDQwMDgKKwlSWE1BQ19XT0xfQ1JDMzRfdCBjcmMzNDsJCQkvLyAgMHg0MDBDCisJUlhNQUNfV09MX1NBX0xPX3Qgc2FfbG87CQkJLy8gIDB4NDAxMAorCVJYTUFDX1dPTF9TQV9ISV90IHNhX2hpOwkJCS8vICAweDQwMTQKKwl1MzIgbWFzazBfd29yZDA7CQkJCS8vICAweDQwMTgKKwl1MzIgbWFzazBfd29yZDE7CQkJCS8vICAweDQwMUMKKwl1MzIgbWFzazBfd29yZDI7CQkJCS8vICAweDQwMjAKKwl1MzIgbWFzazBfd29yZDM7CQkJCS8vICAweDQwMjQKKwl1MzIgbWFzazFfd29yZDA7CQkJCS8vICAweDQwMjgKKwl1MzIgbWFzazFfd29yZDE7CQkJCS8vICAweDQwMkMKKwl1MzIgbWFzazFfd29yZDI7CQkJCS8vICAweDQwMzAKKwl1MzIgbWFzazFfd29yZDM7CQkJCS8vICAweDQwMzQKKwl1MzIgbWFzazJfd29yZDA7CQkJCS8vICAweDQwMzgKKwl1MzIgbWFzazJfd29yZDE7CQkJCS8vICAweDQwM0MKKwl1MzIgbWFzazJfd29yZDI7CQkJCS8vICAweDQwNDAKKwl1MzIgbWFzazJfd29yZDM7CQkJCS8vICAweDQwNDQKKwl1MzIgbWFzazNfd29yZDA7CQkJCS8vICAweDQwNDgKKwl1MzIgbWFzazNfd29yZDE7CQkJCS8vICAweDQwNEMKKwl1MzIgbWFzazNfd29yZDI7CQkJCS8vICAweDQwNTAKKwl1MzIgbWFzazNfd29yZDM7CQkJCS8vICAweDQwNTQKKwl1MzIgbWFzazRfd29yZDA7CQkJCS8vICAweDQwNTgKKwl1MzIgbWFzazRfd29yZDE7CQkJCS8vICAweDQwNUMKKwl1MzIgbWFzazRfd29yZDI7CQkJCS8vICAweDQwNjAKKwl1MzIgbWFzazRfd29yZDM7CQkJCS8vICAweDQwNjQKKwlSWE1BQ19VTklfUEZfQUREUjFfdCB1bmlfcGZfYWRkcjE7CQkvLyAgMHg0MDY4CisJUlhNQUNfVU5JX1BGX0FERFIyX3QgdW5pX3BmX2FkZHIyOwkJLy8gIDB4NDA2QworCVJYTUFDX1VOSV9QRl9BRERSM190IHVuaV9wZl9hZGRyMzsJCS8vICAweDQwNzAKKwl1MzIgbXVsdGlfaGFzaDE7CQkJCS8vICAweDQwNzQKKwl1MzIgbXVsdGlfaGFzaDI7CQkJCS8vICAweDQwNzgKKwl1MzIgbXVsdGlfaGFzaDM7CQkJCS8vICAweDQwN0MKKwl1MzIgbXVsdGlfaGFzaDQ7CQkJCS8vICAweDQwODAKKwlSWE1BQ19QRl9DVFJMX3QgcGZfY3RybDsJCQkvLyAgMHg0MDg0CisJUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCBtY2lmX2N0cmxfbWF4X3NlZzsJLy8gIDB4NDA4OAorCVJYTUFDX01DSUZfV0FURVJfTUFSS190IG1jaWZfd2F0ZXJfbWFyazsJLy8gIDB4NDA4QworCVJYTUFDX1JYUV9ESUFHX3QgcnhxX2RpYWc7CQkJLy8gIDB4NDA5MAorCVJYTUFDX1NQQUNFX0FWQUlMX3Qgc3BhY2VfYXZhaWw7CQkvLyAgMHg0MDk0CisKKwlSWE1BQ19NSUZfQ1RMX3QgbWlmX2N0cmw7CQkJLy8gIDB4NDA5OAorCVJYTUFDX0VSUk9SX1JFR190IGVycl9yZWc7CQkJLy8gIDB4NDA5QworfSBSWE1BQ190LCAqUFJYTUFDX3Q7CisKKy8qIEVORCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uICMxIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19DRkcxX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHNvZnRfcmVzZXQ6MTsJCS8vIGJpdCAzMQorCQl1MzIgc2ltX3Jlc2V0OjE7CQkvLyBiaXQgMzAKKwkJdTMyIHJlc2VydmVkMzoxMDsJCS8vIGJpdHMgMjAtMjkKKwkJdTMyIHJlc2V0X3J4X21jOjE7CQkvLyBiaXQgMTkKKwkJdTMyIHJlc2V0X3R4X21jOjE7CQkvLyBiaXQgMTgKKwkJdTMyIHJlc2V0X3J4X2Z1bjoxOwkvLyBiaXQgMTcKKwkJdTMyIHJlc2V0X3R4X2Z1bjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJlc2VydmVkMjo3OwkJLy8gYml0cyA5LTE1CisJCXUzMiBsb29wX2JhY2s6MTsJCS8vIGJpdCA4CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiByeF9mbG93OjE7CQkvLyBiaXQgNQorCQl1MzIgdHhfZmxvdzoxOwkJLy8gYml0IDQKKwkJdTMyIHN5bmNkX3J4X2VuOjE7CQkvLyBiaXQgMworCQl1MzIgcnhfZW5hYmxlOjE7CQkvLyBiaXQgMgorCQl1MzIgc3luY2RfdHhfZW46MTsJCS8vIGJpdCAxCisJCXUzMiB0eF9lbmFibGU6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgdHhfZW5hYmxlOjE7CQkvLyBiaXQgMAorCQl1MzIgc3luY2RfdHhfZW46MTsJCS8vIGJpdCAxCisJCXUzMiByeF9lbmFibGU6MTsJCS8vIGJpdCAyCisJCXUzMiBzeW5jZF9yeF9lbjoxOwkJLy8gYml0IDMKKwkJdTMyIHR4X2Zsb3c6MTsJCS8vIGJpdCA0CisJCXUzMiByeF9mbG93OjE7CQkvLyBiaXQgNQorCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgbG9vcF9iYWNrOjE7CQkvLyBiaXQgOAorCQl1MzIgcmVzZXJ2ZWQyOjc7CQkvLyBiaXRzIDktMTUKKwkJdTMyIHJlc2V0X3R4X2Z1bjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJlc2V0X3J4X2Z1bjoxOwkvLyBiaXQgMTcKKwkJdTMyIHJlc2V0X3R4X21jOjE7CQkvLyBiaXQgMTgKKwkJdTMyIHJlc2V0X3J4X21jOjE7CQkvLyBiaXQgMTkKKwkJdTMyIHJlc2VydmVkMzoxMDsJCS8vIGJpdHMgMjAtMjkKKwkJdTMyIHNpbV9yZXNldDoxOwkJLy8gYml0IDMwCisJCXUzMiBzb2Z0X3Jlc2V0OjE7CQkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0NGRzFfdCwgKlBNQUNfQ0ZHMV90OworCisvKgorICogc3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uICMyIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDA0CisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19DRkcyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMzoxNjsJCS8vIGJpdHMgMTYtMzEKKwkJdTMyIHByZWFtYmxlX2xlbjo0OwkvLyBiaXRzIDEyLTE1CisJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTMyIGlmX21vZGU6MjsJCS8vIGJpdHMgOC05CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBodWdlX2ZyYW1lOjE7CQkvLyBiaXQgNQorCQl1MzIgbGVuX2NoZWNrOjE7CQkvLyBiaXQgNAorCQl1MzIgdW5kZWZpbmVkOjE7CQkvLyBiaXQgMworCQl1MzIgcGFkX2NyYzoxOwkJLy8gYml0IDIKKwkJdTMyIGNyY19lbmFibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBmdWxsX2R1cGxleDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBmdWxsX2R1cGxleDoxOwkJLy8gYml0IDAKKwkJdTMyIGNyY19lbmFibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBwYWRfY3JjOjE7CQkvLyBiaXQgMgorCQl1MzIgdW5kZWZpbmVkOjE7CQkvLyBiaXQgMworCQl1MzIgbGVuX2NoZWNrOjE7CQkvLyBiaXQgNAorCQl1MzIgaHVnZV9mcmFtZToxOwkJLy8gYml0IDUKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGlmX21vZGU6MjsJCS8vIGJpdHMgOC05CisJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTMyIHByZWFtYmxlX2xlbjo0OwkvLyBiaXRzIDEyLTE1CisJCXUzMiByZXNlcnZlZDM6MTY7CQkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19DRkcyX3QsICpQTUFDX0NGRzJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgSW50ZXJwYWNrZXQgZ2FwIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDA4CisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19JUEdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTsJCS8vIGJpdCAzMQorCQl1MzIgbm9uX0IyQl9pcGdfMTo3OwkvLyBiaXRzIDI0LTMwCisJCXUzMiB1bmRlZmluZWQyOjE7CQkvLyBiaXQgMjMKKwkJdTMyIG5vbl9CMkJfaXBnXzI6NzsJLy8gYml0cyAxNi0yMgorCQl1MzIgbWluX2lmZ19lbmZvcmNlOjg7CS8vIGJpdHMgOC0xNQorCQl1MzIgdW5kZWZpbmVkMToxOwkJLy8gYml0IDcKKwkJdTMyIEIyQl9pcGc6NzsJCS8vIGJpdHMgMC02CisjZWxzZQorCQl1MzIgQjJCX2lwZzo3OwkJLy8gYml0cyAwLTYKKwkJdTMyIHVuZGVmaW5lZDE6MTsJCS8vIGJpdCA3CisJCXUzMiBtaW5faWZnX2VuZm9yY2U6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBub25fQjJCX2lwZ18yOjc7CS8vIGJpdHMgMTYtMjIKKwkJdTMyIHVuZGVmaW5lZDI6MTsJCS8vIGJpdCAyMworCQl1MzIgbm9uX0IyQl9pcGdfMTo3OwkvLyBiaXRzIDI0LTMwCisJCXUzMiByZXNlcnZlZDoxOwkJLy8gYml0IDMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19JUEdfdCwgKlBNQUNfSVBHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGhhbGYgZHVwbGV4IHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDBDCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19IRkRQX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMjo4OwkJLy8gYml0cyAyNC0zMQorCQl1MzIgYWx0X2JlYl90cnVuYzo0OwkvLyBiaXRzIDIzLTIwCisJCXUzMiBhbHRfYmViX2VuYWJsZToxOwkvLyBiaXQgMTkKKwkJdTMyIGJwX25vX2JhY2tvZmY6MTsJLy8gYml0IDE4CisJCXUzMiBub19iYWNrb2ZmOjE7CQkvLyBiaXQgMTcKKwkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJleG1pdF9tYXg6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyAxMC0xMQorCQl1MzIgY29sbF93aW5kb3c6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgY29sbF93aW5kb3c6MTA7CS8vIGJpdHMgMC05CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTMyIHJleG1pdF9tYXg6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvLyBiaXQgMTYKKwkJdTMyIG5vX2JhY2tvZmY6MTsJCS8vIGJpdCAxNworCQl1MzIgYnBfbm9fYmFja29mZjoxOwkvLyBiaXQgMTgKKwkJdTMyIGFsdF9iZWJfZW5hYmxlOjE7CS8vIGJpdCAxOQorCQl1MzIgYWx0X2JlYl90cnVuYzo0OwkvLyBiaXRzIDIzLTIwCisJCXUzMiByZXNlcnZlZDI6ODsJCS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0hGRFBfdCwgKlBNQUNfSEZEUF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNYXhpbXVtIEZyYW1lIExlbmd0aCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxMAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfTUFYX0ZNX0xFTl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgbWF4X2xlbjoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgbWF4X2xlbjoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfTUFYX0ZNX0xFTl90LCAqUE1BQ19NQVhfRk1fTEVOX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFJlc2VydmUgMSByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxNCAtIDB4NTAxOAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgVGVzdCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxQworICovCit0eXBlZGVmIHVuaW9uIF9NQUNfVEVTVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6Mjk7CS8vIGJpdHMgMy0zMQorCQl1MzIgbWFjX3Rlc3Q6MzsJLy8gYml0cyAwLTIKKyNlbHNlCisJCXUzMiBtYWNfdGVzdDozOwkvLyBiaXRzIDAtMgorCQl1MzIgdW51c2VkOjI5OwkvLyBiaXRzIDMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX1RFU1RfdCwgKlBNQUNfVEVTVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDIwCisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX0NGR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNldF9taWlfbWdtdDoxOwkvLyBiaXQgMzEKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA2LTMwCisJCXUzMiBzY2FuX2F1dG9faW5jcmVtdDoxOwkvLyBiaXQgNQorCQl1MzIgcHJlYW1ibGVfc3VwcHJlc3M6MTsJLy8gYml0IDQKKwkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKKwkJdTMyIG1nbXRfY2xrX3Jlc2V0OjM7CS8vIGJpdHMgMC0yCisjZWxzZQorCQl1MzIgbWdtdF9jbGtfcmVzZXQ6MzsJLy8gYml0cyAwLTIKKwkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKKwkJdTMyIHByZWFtYmxlX3N1cHByZXNzOjE7CS8vIGJpdCA0CisJCXUzMiBzY2FuX2F1dG9faW5jcmVtdDoxOwkvLyBiaXQgNQorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDYtMzAKKwkJdTMyIHJlc2V0X21paV9tZ210OjE7CS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9DRkdfdCwgKlBNSUlfTUdNVF9DRkdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyNAorICovCit0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9DTURfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MzA7CS8vIGJpdHMgMi0zMQorCQl1MzIgc2Nhbl9jeWNsZToxOwkvLyBiaXQgMQorCQl1MzIgcmVhZF9jeWNsZToxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHJlYWRfY3ljbGU6MTsJLy8gYml0IDAKKwkJdTMyIHNjYW5fY3ljbGU6MTsJLy8gYml0IDEKKwkJdTMyIHJlc2VydmVkOjMwOwkvLyBiaXRzIDItMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUlJX01HTVRfQ01EX3QsICpQTUlJX01HTVRfQ01EX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IEFkZHJlc3MgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMjgKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQUREUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6MTk7CS8vIGJpdCAxMy0zMQorCQl1MzIgcGh5X2FkZHI6NTsJLy8gYml0cyA4LTEyCisJCXUzMiByZXNlcnZlZDE6MzsJLy8gYml0cyA1LTcKKwkJdTMyIHJlZ19hZGRyOjU7CS8vIGJpdHMgMC00CisjZWxzZQorCQl1MzIgcmVnX2FkZHI6NTsJLy8gYml0cyAwLTQKKwkJdTMyIHJlc2VydmVkMTozOwkvLyBiaXRzIDUtNworCQl1MzIgcGh5X2FkZHI6NTsJLy8gYml0cyA4LTEyCisJCXUzMiByZXNlcnZlZDI6MTk7CS8vIGJpdCAxMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9BRERSX3QsICpQTUlJX01HTVRfQUREUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBDb250cm9sIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDJDCisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIHBoeV9jdHJsOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBwaHlfY3RybDoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9DVFJMX3QsICpQTUlJX01HTVRfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBTdGF0dXMgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMzAKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfU1RBVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgcGh5X3N0YXQ6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIHBoeV9zdGF0OjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX1NUQVRfdCwgKlBNSUlfTUdNVF9TVEFUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IEluZGljYXRvcnMgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMzQKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfSU5ESUNBVE9SX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjI5OwkvLyBiaXRzIDMtMzEKKwkJdTMyIG5vdF92YWxpZDoxOwkvLyBiaXQgMgorCQl1MzIgc2Nhbm5pbmc6MTsJLy8gYml0IDEKKwkJdTMyIGJ1c3k6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBidXN5OjE7CS8vIGJpdCAwCisJCXUzMiBzY2FubmluZzoxOwkvLyBiaXQgMQorCQl1MzIgbm90X3ZhbGlkOjE7CS8vIGJpdCAyCisJCXUzMiByZXNlcnZlZDoyOTsJLy8gYml0cyAzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX0lORElDQVRPUl90LCAqUE1JSV9NR01UX0lORElDQVRPUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBJbnRlcmZhY2UgQ29udHJvbCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAzOAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfSUZfQ1RSTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNldF9pZl9tb2R1bGU6MTsJLy8gYml0IDMxCisJCXUzMiByZXNlcnZlZDQ6MzsJCS8vIGJpdCAyOC0zMAorCQl1MzIgdGJpX21vZGU6MTsJCS8vIGJpdCAyNworCQl1MzIgZ2hkX21vZGU6MTsJCS8vIGJpdCAyNgorCQl1MzIgbGhkX21vZGU6MTsJCS8vIGJpdCAyNQorCQl1MzIgcGh5X21vZGU6MTsJCS8vIGJpdCAyNAorCQl1MzIgcmVzZXRfcGVyX21paToxOwkvLyBiaXQgMjMKKwkJdTMyIHJlc2VydmVkMzo2OwkJLy8gYml0cyAxNy0yMgorCQl1MzIgc3BlZWQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgcmVzZXRfcGUxMDB4OjE7CS8vIGJpdCAxNQorCQl1MzIgcmVzZXJ2ZWQyOjQ7CQkvLyBiaXRzIDExLTE0CisJCXUzMiBmb3JjZV9xdWlldDoxOwkJLy8gYml0IDEwCisJCXUzMiBub19jaXBoZXI6MTsJCS8vIGJpdCA5CisJCXUzMiBkaXNhYmxlX2xpbmtfZmFpbDoxOwkvLyBiaXQgOAorCQl1MzIgcmVzZXRfZ3BzaToxOwkJLy8gYml0IDcKKwkJdTMyIHJlc2VydmVkMTo2OwkJLy8gYml0cyAxLTYKKwkJdTMyIGVuYWJfamFiX3Byb3RlY3Q6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBlbmFiX2phYl9wcm90ZWN0OjE7CS8vIGJpdCAwCisJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMS02CisJCXUzMiByZXNldF9ncHNpOjE7CQkvLyBiaXQgNworCQl1MzIgZGlzYWJsZV9saW5rX2ZhaWw6MTsJLy8gYml0IDgKKwkJdTMyIG5vX2NpcGhlcjoxOwkJLy8gYml0IDkKKwkJdTMyIGZvcmNlX3F1aWV0OjE7CQkvLyBiaXQgMTAKKwkJdTMyIHJlc2VydmVkMjo0OwkJLy8gYml0cyAxMS0xNAorCQl1MzIgcmVzZXRfcGUxMDB4OjE7CS8vIGJpdCAxNQorCQl1MzIgc3BlZWQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgcmVzZXJ2ZWQzOjY7CQkvLyBiaXRzIDE3LTIyCisJCXUzMiByZXNldF9wZXJfbWlpOjE7CS8vIGJpdCAyMworCQl1MzIgcGh5X21vZGU6MTsJCS8vIGJpdCAyNAorCQl1MzIgbGhkX21vZGU6MTsJCS8vIGJpdCAyNQorCQl1MzIgZ2hkX21vZGU6MTsJCS8vIGJpdCAyNgorCQl1MzIgdGJpX21vZGU6MTsJCS8vIGJpdCAyNworCQl1MzIgcmVzZXJ2ZWQ0OjM7CQkvLyBiaXQgMjgtMzAKKwkJdTMyIHJlc2V0X2lmX21vZHVsZToxOwkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0lGX0NUUkxfdCwgKlBNQUNfSUZfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBJbnRlcmZhY2UgU3RhdHVzIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDNDCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19JRl9TVEFUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjIyOwkJLy8gYml0cyAxMC0zMQorCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8vIGJpdCA5CisJCXUzMiBjbGFzaDoxOwkJLy8gYml0IDgKKwkJdTMyIHBoeV9qYWJiZXI6MTsJCS8vIGJpdCA3CisJCXUzMiBwaHlfbGlua19vazoxOwkJLy8gYml0IDYKKwkJdTMyIHBoeV9mdWxsX2R1cGxleDoxOwkvLyBiaXQgNQorCQl1MzIgcGh5X3NwZWVkOjE7CQkvLyBiaXQgNAorCQl1MzIgcGUxMDB4X2xpbmtfZmFpbDoxOwkvLyBiaXQgMworCQl1MzIgcGUxMHRfbG9zc19jYXJyaWU6MTsJLy8gYml0IDIKKwkJdTMyIHBlMTB0X3NxZV9lcnJvcjoxOwkvLyBiaXQgMQorCQl1MzIgcGUxMHRfamFiYmVyOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcGUxMHRfamFiYmVyOjE7CS8vIGJpdCAwCisJCXUzMiBwZTEwdF9zcWVfZXJyb3I6MTsJLy8gYml0IDEKKwkJdTMyIHBlMTB0X2xvc3NfY2FycmllOjE7CS8vIGJpdCAyCisJCXUzMiBwZTEwMHhfbGlua19mYWlsOjE7CS8vIGJpdCAzCisJCXUzMiBwaHlfc3BlZWQ6MTsJCS8vIGJpdCA0CisJCXUzMiBwaHlfZnVsbF9kdXBsZXg6MTsJLy8gYml0IDUKKwkJdTMyIHBoeV9saW5rX29rOjE7CQkvLyBiaXQgNgorCQl1MzIgcGh5X2phYmJlcjoxOwkJLy8gYml0IDcKKwkJdTMyIGNsYXNoOjE7CQkvLyBiaXQgOAorCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8vIGJpdCA5CisJCXUzMiByZXNlcnZlZDoyMjsJCS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0lGX1NUQVRfdCwgKlBNQUNfSUZfU1RBVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNYWMgU3RhdGlvbiBBZGRyZXNzLCBQYXJ0IDEgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwNDAKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX1NUQVRJT05fQUREUjFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgT2N0ZXQ2Ojg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIE9jdGV0NTo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBPY3RldDQ6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBPY3RldDM6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBPY3RldDM6ODsJLy8gYml0cyAwLTcKKwkJdTMyIE9jdGV0NDo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIE9jdGV0NTo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBPY3RldDY6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfU1RBVElPTl9BRERSMV90LCAqUE1BQ19TVEFUSU9OX0FERFIxX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1hYyBTdGF0aW9uIEFkZHJlc3MsIFBhcnQgMiByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTA0NAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfU1RBVElPTl9BRERSMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBPY3RldDI6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgT2N0ZXQxOjg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0IDAtMTUKKwkJdTMyIE9jdGV0MTo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBPY3RldDI6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfU1RBVElPTl9BRERSMl90LCAqUE1BQ19TVEFUSU9OX0FERFIyX3Q7CisKKy8qCisgKiBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9NQUNfdCB7CQkJCQkvLyBMb2NhdGlvbjoKKwlNQUNfQ0ZHMV90IGNmZzE7CQkJCS8vICAweDUwMDAKKwlNQUNfQ0ZHMl90IGNmZzI7CQkJCS8vICAweDUwMDQKKwlNQUNfSVBHX3QgaXBnOwkJCQkJLy8gIDB4NTAwOAorCU1BQ19IRkRQX3QgaGZkcDsJCQkJLy8gIDB4NTAwQworCU1BQ19NQVhfRk1fTEVOX3QgbWF4X2ZtX2xlbjsJCQkvLyAgMHg1MDEwCisJdTMyIHJzdjE7CQkJCQkvLyAgMHg1MDE0CisJdTMyIHJzdjI7CQkJCQkvLyAgMHg1MDE4CisJTUFDX1RFU1RfdCBtYWNfdGVzdDsJCQkJLy8gIDB4NTAxQworCU1JSV9NR01UX0NGR190IG1paV9tZ210X2NmZzsJCQkvLyAgMHg1MDIwCisJTUlJX01HTVRfQ01EX3QgbWlpX21nbXRfY21kOwkJCS8vICAweDUwMjQKKwlNSUlfTUdNVF9BRERSX3QgbWlpX21nbXRfYWRkcjsJCQkvLyAgMHg1MDI4CisJTUlJX01HTVRfQ1RSTF90IG1paV9tZ210X2N0cmw7CQkJLy8gIDB4NTAyQworCU1JSV9NR01UX1NUQVRfdCBtaWlfbWdtdF9zdGF0OwkJCS8vICAweDUwMzAKKwlNSUlfTUdNVF9JTkRJQ0FUT1JfdCBtaWlfbWdtdF9pbmRpY2F0b3I7CS8vICAweDUwMzQKKwlNQUNfSUZfQ1RSTF90IGlmX2N0cmw7CQkJCS8vICAweDUwMzgKKwlNQUNfSUZfU1RBVF90IGlmX3N0YXQ7CQkJCS8vICAweDUwM0MKKwlNQUNfU1RBVElPTl9BRERSMV90IHN0YXRpb25fYWRkcl8xOwkJLy8gIDB4NTA0MAorCU1BQ19TVEFUSU9OX0FERFIyX3Qgc3RhdGlvbl9hZGRyXzI7CQkvLyAgMHg1MDQ0Cit9IE1BQ190LCAqUE1BQ190OworCisvKiBFTkQgT0YgTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qIFNUQVJUIE9GIE1BQyBTVEFUIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIENhcnJ5IFJlZ2lzdGVyIE9uZSBhbmQgaXQncyBNYXNrIFJlZ2lzdGVyIHJlZyBsb2NhdGVkIGluIG1hYworICogc3RhdCBhZGRyZXNzIG1hcCBhZGRyZXNzIDB4NjEzMCBhbmQgMHg2MTM4LgorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfU1RBVF9SRUdfMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB0cjY0OjE7CS8vIGJpdCAzMQorCQl1MzIgdHIxMjc6MTsJLy8gYml0IDMwCisJCXUzMiB0cjI1NToxOwkvLyBiaXQgMjkKKwkJdTMyIHRyNTExOjE7CS8vIGJpdCAyOAorCQl1MzIgdHIxazoxOwkvLyBiaXQgMjcKKwkJdTMyIHRybWF4OjE7CS8vIGJpdCAyNgorCQl1MzIgdHJtZ3Y6MTsJLy8gYml0IDI1CisJCXUzMiB1bnVzZWQ6ODsJLy8gYml0cyAxNy0yNAorCQl1MzIgcmJ5dDoxOwkvLyBiaXQgMTYKKwkJdTMyIHJwa3Q6MTsJLy8gYml0IDE1CisJCXUzMiByZmNzOjE7CS8vIGJpdCAxNAorCQl1MzIgcm1jYToxOwkvLyBiaXQgMTMKKwkJdTMyIHJiY2E6MTsJLy8gYml0IDEyCisJCXUzMiByeGNmOjE7CS8vIGJpdCAxMQorCQl1MzIgcnhwZjoxOwkvLyBiaXQgMTAKKwkJdTMyIHJ4dW86MTsJLy8gYml0IDkKKwkJdTMyIHJhbG46MTsJLy8gYml0IDgKKwkJdTMyIHJmbHI6MTsJLy8gYml0IDcKKwkJdTMyIHJjZGU6MTsJLy8gYml0IDYKKwkJdTMyIHJjc2U6MTsJLy8gYml0IDUKKwkJdTMyIHJ1bmQ6MTsJLy8gYml0IDQKKwkJdTMyIHJvdnI6MTsJLy8gYml0IDMKKwkJdTMyIHJmcmc6MTsJLy8gYml0IDIKKwkJdTMyIHJqYnI6MTsJLy8gYml0IDEKKwkJdTMyIHJkcnA6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiByZHJwOjE7CS8vIGJpdCAwCisJCXUzMiByamJyOjE7CS8vIGJpdCAxCisJCXUzMiByZnJnOjE7CS8vIGJpdCAyCisJCXUzMiByb3ZyOjE7CS8vIGJpdCAzCisJCXUzMiBydW5kOjE7CS8vIGJpdCA0CisJCXUzMiByY3NlOjE7CS8vIGJpdCA1CisJCXUzMiByY2RlOjE7CS8vIGJpdCA2CisJCXUzMiByZmxyOjE7CS8vIGJpdCA3CisJCXUzMiByYWxuOjE7CS8vIGJpdCA4CisJCXUzMiByeHVvOjE7CS8vIGJpdCA5CisJCXUzMiByeHBmOjE7CS8vIGJpdCAxMAorCQl1MzIgcnhjZjoxOwkvLyBiaXQgMTEKKwkJdTMyIHJiY2E6MTsJLy8gYml0IDEyCisJCXUzMiBybWNhOjE7CS8vIGJpdCAxMworCQl1MzIgcmZjczoxOwkvLyBiaXQgMTQKKwkJdTMyIHJwa3Q6MTsJLy8gYml0IDE1CisJCXUzMiByYnl0OjE7CS8vIGJpdCAxNgorCQl1MzIgdW51c2VkOjg7CS8vIGJpdHMgMTctMjQKKwkJdTMyIHRybWd2OjE7CS8vIGJpdCAyNQorCQl1MzIgdHJtYXg6MTsJLy8gYml0IDI2CisJCXUzMiB0cjFrOjE7CS8vIGJpdCAyNworCQl1MzIgdHI1MTE6MTsJLy8gYml0IDI4CisJCXUzMiB0cjI1NToxOwkvLyBiaXQgMjkKKwkJdTMyIHRyMTI3OjE7CS8vIGJpdCAzMAorCQl1MzIgdHI2NDoxOwkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX1NUQVRfUkVHXzFfdCwgKlBNQUNfU1RBVF9SRUdfMV90OworCisvKgorICogc3RydWN0dXJlIGZvciBDYXJyeSBSZWdpc3RlciBUd28gTWFzayBSZWdpc3RlciByZWcgaW4gbWFjIHN0YXQgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg2MTNDCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19TVEFUX1JFR18yX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoxMjsJLy8gYml0IDIwLTMxCisJCXUzMiB0amJyOjE7CS8vIGJpdCAxOQorCQl1MzIgdGZjczoxOwkvLyBiaXQgMTgKKwkJdTMyIHR4Y2Y6MTsJLy8gYml0IDE3CisJCXUzMiB0b3ZyOjE7CS8vIGJpdCAxNgorCQl1MzIgdHVuZDoxOwkvLyBiaXQgMTUKKwkJdTMyIHRmcmc6MTsJLy8gYml0IDE0CisJCXUzMiB0Ynl0OjE7CS8vIGJpdCAxMworCQl1MzIgdHBrdDoxOwkvLyBiaXQgMTIKKwkJdTMyIHRtY2E6MTsJLy8gYml0IDExCisJCXUzMiB0YmNhOjE7CS8vIGJpdCAxMAorCQl1MzIgdHhwZjoxOwkvLyBiaXQgOQorCQl1MzIgdGRmcjoxOwkvLyBiaXQgOAorCQl1MzIgdGVkZjoxOwkvLyBiaXQgNworCQl1MzIgdHNjbDoxOwkvLyBiaXQgNgorCQl1MzIgdG1jbDoxOwkvLyBiaXQgNQorCQl1MzIgdGxjbDoxOwkvLyBiaXQgNAorCQl1MzIgdHhjbDoxOwkvLyBiaXQgMworCQl1MzIgdG5jbDoxOwkvLyBiaXQgMgorCQl1MzIgdHBmaDoxOwkvLyBiaXQgMQorCQl1MzIgdGRycDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHRkcnA6MTsJLy8gYml0IDAKKwkJdTMyIHRwZmg6MTsJLy8gYml0IDEKKwkJdTMyIHRuY2w6MTsJLy8gYml0IDIKKwkJdTMyIHR4Y2w6MTsJLy8gYml0IDMKKwkJdTMyIHRsY2w6MTsJLy8gYml0IDQKKwkJdTMyIHRtY2w6MTsJLy8gYml0IDUKKwkJdTMyIHRzY2w6MTsJLy8gYml0IDYKKwkJdTMyIHRlZGY6MTsJLy8gYml0IDcKKwkJdTMyIHRkZnI6MTsJLy8gYml0IDgKKwkJdTMyIHR4cGY6MTsJLy8gYml0IDkKKwkJdTMyIHRiY2E6MTsJLy8gYml0IDEwCisJCXUzMiB0bWNhOjE7CS8vIGJpdCAxMQorCQl1MzIgdHBrdDoxOwkvLyBiaXQgMTIKKwkJdTMyIHRieXQ6MTsJLy8gYml0IDEzCisJCXUzMiB0ZnJnOjE7CS8vIGJpdCAxNAorCQl1MzIgdHVuZDoxOwkvLyBiaXQgMTUKKwkJdTMyIHRvdnI6MTsJLy8gYml0IDE2CisJCXUzMiB0eGNmOjE7CS8vIGJpdCAxNworCQl1MzIgdGZjczoxOwkvLyBiaXQgMTgKKwkJdTMyIHRqYnI6MTsJLy8gYml0IDE5CisJCXUzMiB1bnVzZWQ6MTI7CS8vIGJpdCAyMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfU1RBVF9SRUdfMl90LCAqUE1BQ19TVEFUX1JFR18yX3Q7CisKKy8qCisgKiBNQUMgU1RBVFMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9NQUNfU1RBVF90IHsJCS8vIExvY2F0aW9uOgorCXUzMiBwYWRbMzJdOwkJLy8gIDB4NjAwMCAtIDYwN0MKKworCS8vIFR4L1J4IDAtNjQgQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSNjQ7CQkJLy8gIDB4NjA4MAorCisJLy8gVHgvUnggNjUtMTI3IEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjEyNzsJCQkvLyAgMHg2MDg0CisKKwkvLyBUeC9SeCAxMjgtMjU1IEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjI1NTsJCQkvLyAgMHg2MDg4CisKKwkvLyBUeC9SeCAyNTYtNTExIEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjUxMTsJCQkvLyAgMHg2MDhDCisKKwkvLyBUeC9SeCA1MTItMTAyMyBCeXRlIEZyYW1lIENvdW50ZXIKKwl1MzIgVFIxSzsJCQkvLyAgMHg2MDkwCisKKwkvLyBUeC9SeCAxMDI0LTE1MTggQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSTWF4OwkJCS8vICAweDYwOTQKKworCS8vIFR4L1J4IDE1MTktMTUyMiBCeXRlIEdvb2QgVkxBTiBGcmFtZSBDb3VudAorCXUzMiBUUk1ndjsJCQkvLyAgMHg2MDk4CisKKwkvLyBSeCBCeXRlIENvdW50ZXIKKwl1MzIgUkJ5dDsJCQkvLyAgMHg2MDlDCisKKwkvLyBSeCBQYWNrZXQgQ291bnRlcgorCXUzMiBSUGt0OwkJCS8vICAweDYwQTAKKworCS8vIFJ4IEZDUyBFcnJvciBDb3VudGVyCisJdTMyIFJGY3M7CQkJLy8gIDB4NjBBNAorCisJLy8gUnggTXVsdGljYXN0IFBhY2tldCBDb3VudGVyCisJdTMyIFJNY2E7CQkJLy8gIDB4NjBBOAorCisJLy8gUnggQnJvYWRjYXN0IFBhY2tldCBDb3VudGVyCisJdTMyIFJCY2E7CQkJLy8gIDB4NjBBQworCisJLy8gUnggQ29udHJvbCBGcmFtZSBQYWNrZXQgQ291bnRlcgorCXUzMiBSeENmOwkJCS8vICAweDYwQjAKKworCS8vIFJ4IFBhdXNlIEZyYW1lIFBhY2tldCBDb3VudGVyCisJdTMyIFJ4UGY7CQkJLy8gIDB4NjBCNAorCisJLy8gUnggVW5rbm93biBPUCBDb2RlIENvdW50ZXIKKwl1MzIgUnhVbzsJCQkvLyAgMHg2MEI4CisKKwkvLyBSeCBBbGlnbm1lbnQgRXJyb3IgQ291bnRlcgorCXUzMiBSQWxuOwkJCS8vICAweDYwQkMKKworCS8vIFJ4IEZyYW1lIExlbmd0aCBFcnJvciBDb3VudGVyCisJdTMyIFJGbHI7CQkJLy8gIDB4NjBDMAorCisJLy8gUnggQ29kZSBFcnJvciBDb3VudGVyCisJdTMyIFJDZGU7CQkJLy8gIDB4NjBDNAorCisJLy8gUnggQ2FycmllciBTZW5zZSBFcnJvciBDb3VudGVyCisJdTMyIFJDc2U7CQkJLy8gIDB4NjBDOAorCisJLy8gUnggVW5kZXJzaXplIFBhY2tldCBDb3VudGVyCisJdTMyIFJVbmQ7CQkJLy8gIDB4NjBDQworCisJLy8gUnggT3ZlcnNpemUgUGFja2V0IENvdW50ZXIKKwl1MzIgUk92cjsJCQkvLyAgMHg2MEQwCisKKwkvLyBSeCBGcmFnbWVudCBDb3VudGVyCisJdTMyIFJGcmc7CQkJLy8gIDB4NjBENAorCisJLy8gUnggSmFiYmVyIENvdW50ZXIKKwl1MzIgUkpicjsJCQkvLyAgMHg2MEQ4CisKKwkvLyBSeCBEcm9wCisJdTMyIFJEcnA7CQkJLy8gIDB4NjBEQworCisJLy8gVHggQnl0ZSBDb3VudGVyCisJdTMyIFRCeXQ7CQkJLy8gIDB4NjBFMAorCisJLy8gVHggUGFja2V0IENvdW50ZXIKKwl1MzIgVFBrdDsJCQkvLyAgMHg2MEU0CisKKwkvLyBUeCBNdWx0aWNhc3QgUGFja2V0IENvdW50ZXIKKwl1MzIgVE1jYTsJCQkvLyAgMHg2MEU4CisKKwkvLyBUeCBCcm9hZGNhc3QgUGFja2V0IENvdW50ZXIKKwl1MzIgVEJjYTsJCQkvLyAgMHg2MEVDCisKKwkvLyBUeCBQYXVzZSBDb250cm9sIEZyYW1lIENvdW50ZXIKKwl1MzIgVHhQZjsJCQkvLyAgMHg2MEYwCisKKwkvLyBUeCBEZWZlcnJhbCBQYWNrZXQgQ291bnRlcgorCXUzMiBURGZyOwkJCS8vICAweDYwRjQKKworCS8vIFR4IEV4Y2Vzc2l2ZSBEZWZlcnJhbCBQYWNrZXQgQ291bnRlcgorCXUzMiBURWRmOwkJCS8vICAweDYwRjgKKworCS8vIFR4IFNpbmdsZSBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVFNjbDsJCQkvLyAgMHg2MEZDCisKKwkvLyBUeCBNdWx0aXBsZSBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVE1jbDsJCQkvLyAgMHg2MTAwCisKKwkvLyBUeCBMYXRlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgorCXUzMiBUTGNsOwkJCS8vICAweDYxMDQKKworCS8vIFR4IEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVFhjbDsJCQkvLyAgMHg2MTA4CisKKwkvLyBUeCBUb3RhbCBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVE5jbDsJCQkvLyAgMHg2MTBDCisKKwkvLyBUeCBQYXVzZSBGcmFtZSBIb25vcmVkIENvdW50ZXIKKwl1MzIgVFBmaDsJCQkvLyAgMHg2MTEwCisKKwkvLyBUeCBEcm9wIEZyYW1lIENvdW50ZXIKKwl1MzIgVERycDsJCQkvLyAgMHg2MTE0CisKKwkvLyBUeCBKYWJiZXIgRnJhbWUgQ291bnRlcgorCXUzMiBUSmJyOwkJCS8vICAweDYxMTgKKworCS8vIFR4IEZDUyBFcnJvciBDb3VudGVyCisJdTMyIFRGY3M7CQkJLy8gIDB4NjExQworCisJLy8gVHggQ29udHJvbCBGcmFtZSBDb3VudGVyCisJdTMyIFR4Q2Y7CQkJLy8gIDB4NjEyMAorCisJLy8gVHggT3ZlcnNpemUgRnJhbWUgQ291bnRlcgorCXUzMiBUT3ZyOwkJCS8vICAweDYxMjQKKworCS8vIFR4IFVuZGVyc2l6ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRVbmQ7CQkJLy8gIDB4NjEyOAorCisJLy8gVHggRnJhZ21lbnRzIEZyYW1lIENvdW50ZXIKKwl1MzIgVEZyZzsJCQkvLyAgMHg2MTJDCisKKwkvLyBDYXJyeSBSZWdpc3RlciBPbmUgUmVnaXN0ZXIKKwlNQUNfU1RBVF9SRUdfMV90IENhcnJ5MTsJLy8gIDB4NjEzMAorCisJLy8gQ2FycnkgUmVnaXN0ZXIgVHdvIFJlZ2lzdGVyCisJTUFDX1NUQVRfUkVHXzJfdCBDYXJyeTI7CS8vICAweDYxMzQKKworCS8vIENhcnJ5IFJlZ2lzdGVyIE9uZSBNYXNrIFJlZ2lzdGVyCisJTUFDX1NUQVRfUkVHXzFfdCBDYXJyeTFNOwkvLyAgMHg2MTM4CisKKwkvLyBDYXJyeSBSZWdpc3RlciBUd28gTWFzayBSZWdpc3RlcgorCU1BQ19TVEFUX1JFR18yX3QgQ2FycnkyTTsJLy8gIDB4NjEzQworfSBNQUNfU1RBVF90LCAqUE1BQ19TVEFUX3Q7CisKKy8qIEVORCBPRiBNQUMgU1RBVCBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIE1NQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBNYWluIE1lbW9yeSBDb250cm9sbGVyIENvbnRyb2wgcmVnIGluIG1tYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDcwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfTU1DX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKKwkJdTMyIGZvcmNlX2NlOjE7CQkvLyBiaXQgNgorCQl1MzIgcnhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNQorCQl1MzIgdHhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNAorCQl1MzIgdHhtYWNfZGlzYWJsZToxOwkvLyBiaXQgMworCQl1MzIgcnhtYWNfZGlzYWJsZToxOwkvLyBiaXQgMgorCQl1MzIgYXJiX2Rpc2FibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBtbWNfZW5hYmxlOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIG1tY19lbmFibGU6MTsJCS8vIGJpdCAwCisJCXUzMiBhcmJfZGlzYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIHJ4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIHR4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDMKKwkJdTMyIHR4ZG1hX2Rpc2FibGU6MTsJLy8gYml0IDQKKwkJdTMyIHJ4ZG1hX2Rpc2FibGU6MTsJLy8gYml0IDUKKwkJdTMyIGZvcmNlX2NlOjE7CQkvLyBiaXQgNgorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKKyNlbmRpZgorCX0gYml0czsKK30gTU1DX0NUUkxfdCwgKlBNTUNfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNYWluIE1lbW9yeSBDb250cm9sbGVyIEhvc3QgTWVtb3J5IEFjY2VzcyBBZGRyZXNzIHJlZyBpbiBtbWMKKyAqIGFkZHJlc3MgbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4NzAwNAorICovCit0eXBlZGVmIHVuaW9uIF9NTUNfU1JBTV9BQ0NFU1NfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgYnl0ZV9lbmFibGU6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIHJlc2VydmVkMjoyOwkJLy8gYml0cyAxNC0xNQorCQl1MzIgcmVxX2FkZHI6MTA7CQkvLyBiaXRzIDQtMTMKKwkJdTMyIHJlc2VydmVkMToxOwkJLy8gYml0IDMKKwkJdTMyIGlzX2N0cmxfd29yZDoxOwkvLyBiaXQgMgorCQl1MzIgd3JfYWNjZXNzOjE7CQkvLyBiaXQgMQorCQl1MzIgcmVxX2FjY2VzczoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiByZXFfYWNjZXNzOjE7CQkvLyBiaXQgMAorCQl1MzIgd3JfYWNjZXNzOjE7CQkvLyBiaXQgMQorCQl1MzIgaXNfY3RybF93b3JkOjE7CS8vIGJpdCAyCisJCXUzMiByZXNlcnZlZDE6MTsJCS8vIGJpdCAzCisJCXUzMiByZXFfYWRkcjoxMDsJCS8vIGJpdHMgNC0xMworCQl1MzIgcmVzZXJ2ZWQyOjI7CQkvLyBiaXRzIDE0LTE1CisJCXUzMiBieXRlX2VuYWJsZToxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNTUNfU1JBTV9BQ0NFU1NfdCwgKlBNTUNfU1JBTV9BQ0NFU1NfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWFpbiBNZW1vcnkgQ29udHJvbGxlciBIb3N0IE1lbW9yeSBBY2Nlc3MgRGF0YSByZWcgaW4gbW1jCisgKiBhZGRyZXNzIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDcwMDggLSAweDcwMTQKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBNZW1vcnkgQ29udHJvbCBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX01NQ190IHsJCQkvLyBMb2NhdGlvbjoKKwlNTUNfQ1RSTF90IG1tY19jdHJsOwkJLy8gIDB4NzAwMAorCU1NQ19TUkFNX0FDQ0VTU190IHNyYW1fYWNjZXNzOwkvLyAgMHg3MDA0CisJdTMyIHNyYW1fd29yZDE7CQkvLyAgMHg3MDA4CisJdTMyIHNyYW1fd29yZDI7CQkvLyAgMHg3MDBDCisJdTMyIHNyYW1fd29yZDM7CQkvLyAgMHg3MDEwCisJdTMyIHNyYW1fd29yZDQ7CQkvLyAgMHg3MDE0Cit9IE1NQ190LCAqUE1NQ190OworCisvKiBFTkQgT0YgTU1DIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgRVhQIFJPTSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogRXhwYW5zaW9uIFJPTSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLworCisvKiBUYWtlIHRoaXMgb3V0IHVudGlsIGl0IGlzIG5vdCBlbXB0eSAqLworI2lmIDAKK3R5cGVkZWYgc3RydWN0IF9FWFBfUk9NX3QgeworCit9IEVYUF9ST01fdCwgKlBFWFBfUk9NX3Q7CisjZW5kaWYKKworLyogRU5EIE9GIEVYUCBST00gUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKgorICogSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0FERFJFU1NfTUFQX3QgeworCUdMT0JBTF90IGdsb2JhbDsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBnbG9iYWwgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfZ2xvYmFsWzQwOTYgLSBzaXplb2YoR0xPQkFMX3QpXTsKKwlUWERNQV90IHR4ZG1hOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIHR4ZG1hIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX3R4ZG1hWzQwOTYgLSBzaXplb2YoVFhETUFfdCldOworCVJYRE1BX3QgcnhkbWE7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgcnhkbWEgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfcnhkbWFbNDA5NiAtIHNpemVvZihSWERNQV90KV07CisJVFhNQUNfdCB0eG1hYzsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiB0eG1hYyBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF90eG1hY1s0MDk2IC0gc2l6ZW9mKFRYTUFDX3QpXTsKKwlSWE1BQ190IHJ4bWFjOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIHJ4bWFjIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX3J4bWFjWzQwOTYgLSBzaXplb2YoUlhNQUNfdCldOworCU1BQ190IG1hYzsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBtYWMgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfbWFjWzQwOTYgLSBzaXplb2YoTUFDX3QpXTsKKwlNQUNfU1RBVF90IG1hY1N0YXQ7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgbWFjIHN0YXQgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfbWFjX3N0YXRbNDA5NiAtIHNpemVvZihNQUNfU1RBVF90KV07CisJTU1DX3QgbW1jOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIG1tYyBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9tbWNbNDA5NiAtIHNpemVvZihNTUNfdCldOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX1sxMDE1ODA4XTsKKworLyogVGFrZSB0aGlzIG91dCB1bnRpbCBpdCBpcyBub3QgZW1wdHkgKi8KKyNpZiAwCisJRVhQX1JPTV90IGV4cF9yb207CisjZW5kaWYKKworCXU4IHVudXNlZF9leHBfcm9tWzQwOTZdOwkvLyBNR1Mtc2l6ZSBUQkQKKwl1OCB1bnVzZWRfX1s1MjQyODhdOwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBhZGRyZXNzIG1hcAorfSBBRERSRVNTX01BUF90LCAqUEFERFJFU1NfTUFQX3Q7CisKKyNlbmRpZiAvKiBfRVQxMzEwX0FERFJFU1NfTUFQX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjE5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYwpAQCAtMCwwICsxLDQ4MCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfZWVwcm9tLmMgLSBDb2RlIHVzZWQgdG8gYWNjZXNzIHRoZSBkZXZpY2UncyBFRVBST00KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF9lZXByb20uaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKyNpbmNsdWRlICJldDEzMXhfaXNyLmgiCisKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKworCisvKgorICogRUVQUk9NIERlZmluZXMKKyAqLworCisvKiBMQkNJRiBSZWdpc3RlciBHcm91cHMgKGFkZHJlc3NlZCB2aWEgMzItYml0IG9mZnNldHMpICovCisjZGVmaW5lIExCQ0lGX0RXT1JEMF9HUk9VUF9PRkZTRVQgICAgICAgMHhBQworI2RlZmluZSBMQkNJRl9EV09SRDFfR1JPVVBfT0ZGU0VUICAgICAgIDB4QjAKKworLyogTEJDSUYgUmVnaXN0ZXJzIChhZGRyZXNzZWQgdmlhIDgtYml0IG9mZnNldHMpICovCisjZGVmaW5lIExCQ0lGX0FERFJFU1NfUkVHSVNURVJfT0ZGU0VUICAgMHhBQworI2RlZmluZSBMQkNJRl9EQVRBX1JFR0lTVEVSX09GRlNFVCAgICAgIDB4QjAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9SRUdJU1RFUl9PRkZTRVQgICAweEIxCisjZGVmaW5lIExCQ0lGX1NUQVRVU19SRUdJU1RFUl9PRkZTRVQgICAgMHhCMgorCisvKiBMQkNJRiBDb250cm9sIFJlZ2lzdGVyIEJpdHMgKi8KKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9TRVFVRU5USUFMX1JFQUQgICAweDAxCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfUEFHRV9XUklURSAgICAgICAgMHgwMgorI2RlZmluZSBMQkNJRl9DT05UUk9MX1VOVVNFRDEgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9FRVBST01fUkVMT0FEICAgICAweDA4CisjZGVmaW5lIExCQ0lGX0NPTlRST0xfVU5VU0VEMiAgICAgICAgICAgMHgxMAorI2RlZmluZSBMQkNJRl9DT05UUk9MX1RXT19CWVRFX0FERFIgICAgIDB4MjAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9JMkNfV1JJVEUgICAgICAgICAweDQwCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfTEJDSUZfRU5BQkxFICAgICAgMHg4MAorCisvKiBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBMQkNJRl9TVEFUVVNfUEhZX1FVRVVFX0FWQUlMICAgIDB4MDEKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0kyQ19JRExFICAgICAgICAgICAweDAyCisjZGVmaW5lIExCQ0lGX1NUQVRVU19BQ0tfRVJST1IgICAgICAgICAgMHgwNAorI2RlZmluZSBMQkNJRl9TVEFUVVNfR0VORVJBTF9FUlJPUiAgICAgIDB4MDgKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX1VOVVNFRCAgICAgICAgICAgICAweDMwCisjZGVmaW5lIExCQ0lGX1NUQVRVU19DSEVDS1NVTV9FUlJPUiAgICAgMHg0MAorI2RlZmluZSBMQkNJRl9TVEFUVVNfRUVQUk9NX1BSRVNFTlQgICAgIDB4ODAKKworLyogTWlzY2VsbGFuZW91cyBDb25zdHJhaW50cyAqLworI2RlZmluZSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTICAgICAgICAgIDEwMDAKKyNkZWZpbmUgTUFYX05VTV9XUklURV9SRVRSSUVTICAgICAgICAgICAyCisKKy8qCisgKiBEZWZpbmUgbWFjcm9zIHRoYXQgYWxsb3cgaW5kaXZpZHVhbCByZWdpc3RlciB2YWx1ZXMgdG8gYmUgZXh0cmFjdGVkIGZyb20gYQorICogRFdPUkQxIHJlZ2lzdGVyIGdyb3VwaW5nCisgKi8KKyNkZWZpbmUgRVhUUkFDVF9EQVRBX1JFR0lTVEVSKHgpICAgICh1aW50OF90KSh4ICYgMHhGRikKKyNkZWZpbmUgRVhUUkFDVF9TVEFUVVNfUkVHSVNURVIoeCkgICh1aW50OF90KSgoeCA+PiAxNikgJiAweEZGKQorI2RlZmluZSBFWFRSQUNUX0NPTlRST0xfUkVHKHgpICAgICAgKHVpbnQ4X3QpKCh4ID4+IDgpICYgMHhGRikKKworLyoqCisgKiBFZXByb21Xcml0ZUJ5dGUgLSBXcml0ZSBhIGJ5dGUgdG8gdGhlIEVUMTMxMCdzIEVFUFJPTQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAdW5BZGRyZXNzOiB0aGUgYWRkcmVzcyB0byB3cml0ZQorICogQGJEYXRhOiB0aGUgdmFsdWUgdG8gd3JpdGUKKyAqIEB1bkVlcHJvbklkOiB0aGUgSUQgb2YgdGhlIEVFUFJPTQorICogQHVuQWRkcmVzc2luZ01vZGU6IGhvdyB0aGUgRUVQUk9NIGlzIHRvIGJlIGFjY2Vzc2VkCisgKgorICogUmV0dXJucyBTVUNDRVNTIG9yIEZBSUxVUkUKKyAqLworaW50MzJfdCBFZXByb21Xcml0ZUJ5dGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgdWludDMyX3QgdW5BZGRyZXNzLAorCQkJdWludDhfdCBiRGF0YSwgdWludDMyX3QgdW5FZXByb21JZCwKKwkJCXVpbnQzMl90IHVuQWRkcmVzc2luZ01vZGUpCit7CisgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcEFkYXB0ZXItPnBkZXY7CisJaW50MzJfdCBuSW5kZXg7CisJaW50MzJfdCBuUmV0cmllczsKKwlpbnQzMl90IG5FcnJvciA9IGZhbHNlOworCWludDMyX3QgbkkyQ1dyaXRlQWN0aXZlID0gMDsKKwlpbnQzMl90IG5Xcml0ZVN1Y2Nlc3NmdWwgPSAwOworCXVpbnQ4X3QgYkNvbnRyb2w7CisJdWludDhfdCBiU3RhdHVzID0gMDsKKwl1aW50MzJfdCB1bkR3b3JkMSA9IDA7CisJdWludDMyX3QgdW5EYXRhID0gMDsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyBleGNlcnB0IGlzIGZyb20gIlNlcmlhbCBFRVBST00gSFcgRGVzaWduCisJICogU3BlY2lmaWNhdGlvbiIgVmVyc2lvbiAwLjkyICg5LzIwLzIwMDQpOgorCSAqCisJICogU2luZ2xlIEJ5dGUgV3JpdGVzCisJICoKKwkgKiBGb3IgYW4gRUVQUk9NLCBhbiBJMkMgc2luZ2xlIGJ5dGUgd3JpdGUgaXMgZGVmaW5lZCBhcyBhIFNUQVJUCisJICogY29uZGl0aW9uIGZvbGxvd2VkIGJ5IHRoZSBkZXZpY2UgYWRkcmVzcywgRUVQUk9NIGFkZHJlc3MsIG9uZSBieXRlCisJICogb2YgZGF0YSBhbmQgYSBTVE9QIGNvbmRpdGlvbi4gIFRoZSBTVE9QIGNvbmRpdGlvbiB3aWxsIHRyaWdnZXIgdGhlCisJICogRUVQUk9NJ3MgaW50ZXJuYWxseSB0aW1lZCB3cml0ZSBjeWNsZSB0byB0aGUgbm9udm9sYXRpbGUgbWVtb3J5LgorCSAqIEFsbCBpbnB1dHMgYXJlIGRpc2FibGVkIGR1cmluZyB0aGlzIHdyaXRlIGN5Y2xlIGFuZCB0aGUgRUVQUk9NIHdpbGwKKwkgKiBub3QgcmVzcG9uZCB0byBhbnkgYWNjZXNzIHVudGlsIHRoZSBpbnRlcm5hbCB3cml0ZSBpcyBjb21wbGV0ZS4KKwkgKiBUaGUgc3RlcHMgdG8gZXhlY3V0ZSBhIHNpbmdsZSBieXRlIHdyaXRlIGFyZSBhcyBmb2xsb3dzOgorCSAqCisJICogMS4gQ2hlY2sgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyIGZvciBiaXRzIDYgJiAzOjIgYWxsIGVxdWFsIHRvIDAgYW5kCisJICogICAgYml0cyA3LDE6MCBib3RoIGVxdWFsIHRvIDEsIGF0IGxlYXN0IG9uY2UgYWZ0ZXIgcmVzZXQuCisJICogICAgU3Vic2VxdWVudCBvcGVyYXRpb25zIG5lZWQgb25seSB0byBjaGVjayB0aGF0IGJpdHMgMTowIGFyZQorCSAqICAgIGVxdWFsIHRvIDEgcHJpb3IgdG8gc3RhcnRpbmcgYSBzaW5nbGUgYnl0ZSB3cml0ZS4KKwkgKgorCSAqIDIuIFdyaXRlIHRvIHRoZSBMQkNJRiBDb250cm9sIFJlZ2lzdGVyOiAgYml0IDc9MSwgYml0IDY9MSwgYml0IDM9MCwKKwkgKiAgICBhbmQgYml0cyAxOjAgYm90aCA9MC4gIEJpdCA1IHNob3VsZCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZQorCSAqICAgIHR5cGUgb2YgRUVQUk9NIGJlaW5nIGFjY2Vzc2VkICgxPXR3byBieXRlIGFkZHJlc3NpbmcsIDA9b25lCisJICogICAgYnl0ZSBhZGRyZXNzaW5nKS4KKwkgKgorCSAqIDMuIFdyaXRlIHRoZSBhZGRyZXNzIHRvIHRoZSBMQkNJRiBBZGRyZXNzIFJlZ2lzdGVyLgorCSAqCisJICogNC4gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIExCQ0lGIERhdGEgUmVnaXN0ZXIgKHRoZSBJMkMgd3JpdGUgd2lsbAorCSAqICAgIGJlZ2luKS4KKwkgKgorCSAqIDUuIE1vbml0b3IgYml0IDE6MCBvZiB0aGUgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyLiAgV2hlbiBiaXRzIDE6MCBhcmUKKwkgKiAgICBib3RoIGVxdWFsIHRvIDEsIHRoZSBJMkMgd3JpdGUgaGFzIGNvbXBsZXRlZCBhbmQgdGhlIGludGVybmFsCisJICogICAgd3JpdGUgY3ljbGUgb2YgdGhlIEVFUFJPTSBpcyBhYm91dCB0byBzdGFydC4gKGJpdHMgMTowID0gMDEgaXMKKwkgKiAgICBhIGxlZ2FsIHN0YXRlIHdoaWxlIHdhaXRpbmcgZnJvbSBib3RoIGVxdWFsIHRvIDEsIGJ1dCBiaXRzCisJICogICAgMTowID0gMTAgaXMgaW52YWxpZCBhbmQgaW1wbGllcyB0aGF0IHNvbWV0aGluZyBpcyBicm9rZW4pLgorCSAqCisJICogNi4gQ2hlY2sgYml0IDMgb2YgdGhlIExCQ0lGIFN0YXR1cyBSZWdpc3Rlci4gIElmICBlcXVhbCB0byAxLCBhbgorCSAqICAgIGVycm9yIGhhcyBvY2N1cnJlZC4KKwkgKgorCSAqIDcuIENoZWNrIGJpdCAyIG9mIHRoZSBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIuICBJZiBlcXVhbCB0byAxIGFuIEFDSworCSAqICAgIGVycm9yIGhhcyBvY2N1cnJlZCBvbiB0aGUgYWRkcmVzcyBwaGFzZSBvZiB0aGUgd3JpdGUuICBUaGlzCisJICogICAgY291bGQgYmUgZHVlIHRvIGFuIGFjdHVhbCBoYXJkd2FyZSBmYWlsdXJlIG9yIHRoZSBFRVBST00gbWF5CisJICogICAgc3RpbGwgYmUgaW4gaXRzIGludGVybmFsIHdyaXRlIGN5Y2xlIGZyb20gYSBwcmV2aW91cyB3cml0ZS4KKwkgKiAgICBUaGlzIHdyaXRlIG9wZXJhdGlvbiB3YXMgaWdub3JlZCBhbmQgbXVzdCBiZSByZXBlYXRlZCBsYXRlci4KKwkgKgorCSAqIDguIFNldCBiaXQgNiBvZiB0aGUgTEJDSUYgQ29udHJvbCBSZWdpc3RlciA9IDAuIElmIGFub3RoZXIgd3JpdGUgaXMKKwkgKiAgICByZXF1aXJlZCwgZ28gdG8gc3RlcCAxLgorCSAqLworCisJLyogU3RlcCAxOiAqLworCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgTUFYX05VTV9SRUdJU1RFUl9QT0xMUzsgbkluZGV4KyspIHsKKwkJLyogUmVhZCByZWdpc3RlcnMgZ3JvdXBlZCBpbiBEV09SRDEgKi8KKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMQkNJRl9EV09SRDFfR1JPVVBfT0ZGU0VULAorCQkJCQkgICZ1bkR3b3JkMSkpIHsKKwkJCW5FcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWJTdGF0dXMgPSBFWFRSQUNUX1NUQVRVU19SRUdJU1RFUih1bkR3b3JkMSk7CisKKwkJaWYgKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfUEhZX1FVRVVFX0FWQUlMICYmCisJCSAgICBiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0kyQ19JRExFKSB7CisJCSAgICAJLyogYml0cyAxOjAgYXJlIGVxdWFsIHRvIDEgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG5FcnJvciB8fCAobkluZGV4ID49IE1BWF9OVU1fUkVHSVNURVJfUE9MTFMpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCS8qIFN0ZXAgMjogKi8KKwliQ29udHJvbCA9IDA7CisJYkNvbnRyb2wgfD0gTEJDSUZfQ09OVFJPTF9MQkNJRl9FTkFCTEUgfCBMQkNJRl9DT05UUk9MX0kyQ19XUklURTsKKworCWlmICh1bkFkZHJlc3NpbmdNb2RlID09IERVQUxfQllURSkgeworCQliQ29udHJvbCB8PSBMQkNJRl9DT05UUk9MX1RXT19CWVRFX0FERFI7CisJfQorCisJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBMQkNJRl9DT05UUk9MX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkgIGJDb250cm9sKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwluSTJDV3JpdGVBY3RpdmUgPSAxOworCisJLyogUHJlcGFyZSBFRVBST00gYWRkcmVzcyBmb3IgU3RlcCAzICovCisJdW5BZGRyZXNzIHw9ICh1bkFkZHJlc3NpbmdNb2RlID09IERVQUxfQllURSkgPworCSAgICAodW5FZXByb21JZCA8PCAxNikgOiAodW5FZXByb21JZCA8PCA4KTsKKworCWZvciAoblJldHJpZXMgPSAwOyBuUmV0cmllcyA8IE1BWF9OVU1fV1JJVEVfUkVUUklFUzsgblJldHJpZXMrKykgeworCQkvKiBTdGVwIDM6Ki8KKwkJaWYgKHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTEJDSUZfQUREUkVTU19SRUdJU1RFUl9PRkZTRVQsCisJCQkJCSAgIHVuQWRkcmVzcykpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU3RlcCA0OiAqLworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIExCQ0lGX0RBVEFfUkVHSVNURVJfT0ZGU0VULAorCQkJCQkgIGJEYXRhKSkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTdGVwIDU6ICovCisJCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgTUFYX05VTV9SRUdJU1RFUl9QT0xMUzsgbkluZGV4KyspIHsKKwkJCS8qIFJlYWQgcmVnaXN0ZXJzIGdyb3VwZWQgaW4gRFdPUkQxICovCisJCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCQkgIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQsCisJCQkJCQkgICZ1bkR3b3JkMSkpIHsKKwkJCQluRXJyb3IgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQliU3RhdHVzID0gRVhUUkFDVF9TVEFUVVNfUkVHSVNURVIodW5Ed29yZDEpOworCisJCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgJiYKKwkJCSAgICBiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0kyQ19JRExFKSB7CisJCQkgICAgCS8qIEkyQyB3cml0ZSBjb21wbGV0ZSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG5FcnJvciB8fCAobkluZGV4ID49IE1BWF9OVU1fUkVHSVNURVJfUE9MTFMpKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFN0ZXAgNjogRG9uJ3QgYnJlYWsgaGVyZSBpZiB3ZSBhcmUgcmV2aXNpb24gMSwgdGhpcyBpcworCQkgKgkgICBzbyB3ZSBkbyBhIGJsaW5kIHdyaXRlIGZvciBsb2FkIGJ1Zy4KKwkgICAgICAgICAqLworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19HRU5FUkFMX0VSUk9SCisJCSAgICAmJiBwQWRhcHRlci0+UmV2aXNpb25JRCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFN0ZXAgNyAqLworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19BQ0tfRVJST1IpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhbiBhY3R1YWwgaGFyZHdhcmUgZmFpbHVyZQorCQkJICogb3IgdGhlIEVFUFJPTSBtYXkgc3RpbGwgYmUgaW4gaXRzIGludGVybmFsIHdyaXRlCisJCQkgKiBjeWNsZSBmcm9tIGEgcHJldmlvdXMgd3JpdGUuIFRoaXMgd3JpdGUgb3BlcmF0aW9uCisJCQkgKiB3YXMgaWdub3JlZCBhbmQgbXVzdCBiZSByZXBlYXRlZCBsYXRlci4KKwkJCSAqLworCQkJdWRlbGF5KDEwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbldyaXRlU3VjY2Vzc2Z1bCA9IDE7CisJCWJyZWFrOworCX0KKworCS8qIFN0ZXAgODogKi8KKwl1ZGVsYXkoMTApOworCW5JbmRleCA9IDA7CisJd2hpbGUgKG5JMkNXcml0ZUFjdGl2ZSkgeworCQliQ29udHJvbCAmPSB+TEJDSUZfQ09OVFJPTF9JMkNfV1JJVEU7CisKKwkJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBMQkNJRl9DT05UUk9MX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkJICBiQ29udHJvbCkpIHsKKwkJCW5Xcml0ZVN1Y2Nlc3NmdWwgPSAwOworCQl9CisKKwkJLyogRG8gcmVhZCB1bnRpbCBpbnRlcm5hbCBBQ0tfRVJST1IgZ29lcyBhd2F5IG1lYW5pbmcgd3JpdGUKKwkJICogY29tcGxldGVkCisJCSAqLworCQlkbyB7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCSAgICAgICBMQkNJRl9BRERSRVNTX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkJICAgICAgIHVuQWRkcmVzcyk7CisJCQlkbyB7CisJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCUxCQ0lGX0RBVEFfUkVHSVNURVJfT0ZGU0VULCAmdW5EYXRhKTsKKwkJCX0gd2hpbGUgKCh1bkRhdGEgJiAweDAwMDEwMDAwKSA9PSAwKTsKKwkJfSB3aGlsZSAodW5EYXRhICYgMHgwMDA0MDAwMCk7CisKKwkJYkNvbnRyb2wgPSBFWFRSQUNUX0NPTlRST0xfUkVHKHVuRGF0YSk7CisKKwkJaWYgKGJDb250cm9sICE9IDB4QzAgfHwgbkluZGV4ID09IDEwMDAwKSB7CisJCQlicmVhazsKKwkJfQorCisJCW5JbmRleCsrOworCX0KKworCXJldHVybiBuV3JpdGVTdWNjZXNzZnVsID8gU1VDQ0VTUyA6IEZBSUxVUkU7Cit9CisKKy8qKgorICogRWVwcm9tUmVhZEJ5dGUgLSBSZWFkIGEgYnl0ZSBmcm9tIHRoZSBFVDEzMTAncyBFRVBST00KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHVuQWRkcmVzczogdGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byByZWFkCisgKiBAcGJEYXRhOiBhIHBvaW50ZXIgdG8gYSBieXRlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgcmVhZAorICogQHVuRWVwcm9uSWQ6IHRoZSBJRCBvZiB0aGUgRUVQUk9NCisgKiBAdW5BZGRyZXNzaW5nTW9kZTogaG93IHRoZSBFRVBST00gaXMgdG8gYmUgYWNjZXNzZWQKKyAqCisgKiBSZXR1cm5zIFNVQ0NFU1Mgb3IgRkFJTFVSRQorICovCitpbnQzMl90IEVlcHJvbVJlYWRCeXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIHVpbnQzMl90IHVuQWRkcmVzcywKKwkJICAgICAgIHVpbnQ4X3QgKnBiRGF0YSwgdWludDMyX3QgdW5FZXByb21JZCwKKwkJICAgICAgIHVpbnQzMl90IHVuQWRkcmVzc2luZ01vZGUpCit7CisgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcEFkYXB0ZXItPnBkZXY7CisJaW50MzJfdCBuSW5kZXg7CisJaW50MzJfdCBuRXJyb3IgPSAwOworCXVpbnQ4X3QgYkNvbnRyb2w7CisJdWludDhfdCBiU3RhdHVzID0gMDsKKwl1aW50MzJfdCB1bkR3b3JkMSA9IDA7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgZXhjZXJwdCBpcyBmcm9tICJTZXJpYWwgRUVQUk9NIEhXIERlc2lnbgorCSAqIFNwZWNpZmljYXRpb24iIFZlcnNpb24gMC45MiAoOS8yMC8yMDA0KToKKwkgKgorCSAqIFNpbmdsZSBCeXRlIFJlYWRzCisJICoKKwkgKiBBIHNpbmdsZSBieXRlIHJlYWQgaXMgc2ltaWxhciB0byB0aGUgc2luZ2xlIGJ5dGUgd3JpdGUsIHdpdGggdGhlCisJICogZXhjZXB0aW9uIG9mIHRoZSBkYXRhIGZsb3c6CisJICoKKwkgKiAxLiBDaGVjayBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIgZm9yIGJpdHMgNiAmIDM6MiBhbGwgZXF1YWwgdG8gMCBhbmQKKwkgKiAgICBiaXRzIDcsMTowIGJvdGggZXF1YWwgdG8gMSwgYXQgbGVhc3Qgb25jZSBhZnRlciByZXNldC4KKwkgKiAgICBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgbmVlZCBvbmx5IHRvIGNoZWNrIHRoYXQgYml0cyAxOjAgYXJlIGVxdWFsCisJICogICAgdG8gMSBwcmlvciB0byBzdGFydGluZyBhIHNpbmdsZSBieXRlIHJlYWQuCisJICoKKwkgKiAyLiBXcml0ZSB0byB0aGUgTEJDSUYgQ29udHJvbCBSZWdpc3RlcjogIGJpdCA3PTEsIGJpdCA2PTAsIGJpdCAzPTAsCisJICogICAgYW5kIGJpdHMgMTowIGJvdGggPTAuICBCaXQgNSBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgdHlwZQorCSAqICAgIG9mIEVFUFJPTSBiZWluZyBhY2Nlc3NlZCAoMT10d28gYnl0ZSBhZGRyZXNzaW5nLCAwPW9uZSBieXRlCisJICogICAgYWRkcmVzc2luZykuCisJICoKKwkgKiAzLiBXcml0ZSB0aGUgYWRkcmVzcyB0byB0aGUgTEJDSUYgQWRkcmVzcyBSZWdpc3RlciAoSTJDIHJlYWQgd2lsbAorCSAqICAgIGJlZ2luKS4KKwkgKgorCSAqIDQuIE1vbml0b3IgYml0IDAgb2YgdGhlIExCQ0lGIFN0YXR1cyBSZWdpc3Rlci4gIFdoZW4gPTEsIEkyQyByZWFkCisJICogICAgaXMgY29tcGxldGUuIChpZiBiaXQgMSA9MSBhbmQgYml0IDAgc3RheXMgPTAsIGEgaGFyZHdhcmUgZmFpbHVyZQorCSAqICAgIGhhcyBvY2N1cnJlZCkuCisJICoKKwkgKiA1LiBDaGVjayBiaXQgMiBvZiB0aGUgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyLiAgSWYgPTEsIHRoZW4gYW4gZXJyb3IKKwkgKiAgICBoYXMgb2NjdXJyZWQuICBUaGUgZGF0YSB0aGF0IGhhcyBiZWVuIHJldHVybmVkIGZyb20gdGhlIFBIWSBtYXkKKwkgKiAgICBiZSBpbnZhbGlkLgorCSAqCisJICogNi4gUmVnYXJkbGVzcyBvZiBlcnJvciBzdGF0dXMsIHJlYWQgZGF0YSBieXRlIGZyb20gTEJDSUYgRGF0YQorCSAqICAgIFJlZ2lzdGVyLiAgSWYgYW5vdGhlciBieXRlIGlzIHJlcXVpcmVkLCBnbyB0byBzdGVwIDEuCisJICovCisKKwkvKiBTdGVwIDE6ICovCisJZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBNQVhfTlVNX1JFR0lTVEVSX1BPTExTOyBuSW5kZXgrKykgeworCQkvKiBSZWFkIHJlZ2lzdGVycyBncm91cGVkIGluIERXT1JEMSAqLworCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQsCisJCQkJCSAgJnVuRHdvcmQxKSkgeworCQkJbkVycm9yID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJYlN0YXR1cyA9IEVYVFJBQ1RfU1RBVFVTX1JFR0lTVEVSKHVuRHdvcmQxKTsKKworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgJiYKKwkJICAgIGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfSTJDX0lETEUpIHsKKwkJCS8qIGJpdHMgMTowIGFyZSBlcXVhbCB0byAxICovCisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChuRXJyb3IgfHwgKG5JbmRleCA+PSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDI6ICovCisJYkNvbnRyb2wgPSAwOworCWJDb250cm9sIHw9IExCQ0lGX0NPTlRST0xfTEJDSUZfRU5BQkxFOworCisJaWYgKHVuQWRkcmVzc2luZ01vZGUgPT0gRFVBTF9CWVRFKSB7CisJCWJDb250cm9sIHw9IExCQ0lGX0NPTlRST0xfVFdPX0JZVEVfQUREUjsKKwl9CisKKwlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIExCQ0lGX0NPTlRST0xfUkVHSVNURVJfT0ZGU0VULAorCQkJCSAgYkNvbnRyb2wpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCS8qIFN0ZXAgMzogKi8KKwl1bkFkZHJlc3MgfD0gKHVuQWRkcmVzc2luZ01vZGUgPT0gRFVBTF9CWVRFKSA/CisJICAgICh1bkVlcHJvbUlkIDw8IDE2KSA6ICh1bkVlcHJvbUlkIDw8IDgpOworCisJaWYgKHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTEJDSUZfQUREUkVTU19SRUdJU1RFUl9PRkZTRVQsCisJCQkJICAgdW5BZGRyZXNzKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDQ6ICovCisJZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBNQVhfTlVNX1JFR0lTVEVSX1BPTExTOyBuSW5kZXgrKykgeworCQkvKiBSZWFkIHJlZ2lzdGVycyBncm91cGVkIGluIERXT1JEMSAqLworCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQsCisJCQkJCSAgJnVuRHdvcmQxKSkgeworCQkJbkVycm9yID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJYlN0YXR1cyA9IEVYVFJBQ1RfU1RBVFVTX1JFR0lTVEVSKHVuRHdvcmQxKTsKKworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwKKwkJICAgICYmIGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfSTJDX0lETEUpIHsKKwkJCS8qIEkyQyByZWFkIGNvbXBsZXRlICovCisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChuRXJyb3IgfHwgKG5JbmRleCA+PSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDY6ICovCisJKnBiRGF0YSA9IEVYVFJBQ1RfREFUQV9SRUdJU1RFUih1bkR3b3JkMSk7CisKKwlyZXR1cm4gKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfQUNLX0VSUk9SKSA/IEZBSUxVUkUgOiBTVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZmOGFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfZWVwcm9tLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB1c2VkIGZvciBFRVBST00KKyAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyByb3V0aW5lcworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzEwX0VFUFJPTV9IX18KKyNkZWZpbmUgX19FVDEzMTBfRUVQUk9NX0hfXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKyNpZm5kZWYgU1VDQ0VTUworI2RlZmluZSBTVUNDRVNTCQkwCisjZGVmaW5lIEZBSUxVUkUJCTEKKyNlbmRpZgorCisjaWZuZGVmIFJFQUQKKyNkZWZpbmUgUkVBRAkJMAorI2RlZmluZSBXUklURQkJMQorI2VuZGlmCisKKyNpZm5kZWYgU0lOR0xFX0JZVEUKKyNkZWZpbmUgU0lOR0xFX0JZVEUJMAorI2RlZmluZSBEVUFMX0JZVEUJMQorI2VuZGlmCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKworaW50MzJfdCBFZXByb21Xcml0ZUJ5dGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1MzIgdW5BZGRyZXNzLAorCQkJdTggYkRhdGEsIHUzMiB1bkVlcHJvbUlkLAorCQkJdTMyIHVuQWRkcmVzc2luZ01vZGUpOworaW50MzJfdCBFZXByb21SZWFkQnl0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB1bkFkZHJlc3MsCisJCSAgICAgICB1OCAqcGJEYXRhLCB1MzIgdW5FZXByb21JZCwKKwkJICAgICAgIHUzMiB1bkFkZHJlc3NpbmdNb2RlKTsKKworI2VuZGlmIC8qIF9FVDEzMTBfRUVQUk9NX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzYjMwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfamFnY29yZS5jIC0gQWxsIGNvZGUgcGVydGFpbmluZyB0byB0aGUgRVQxMzAxL0VUMTMxeCdzIEpBR2NvcmUKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qKgorICogQ29uZmlnR2xvYmFsUmVncyAtIFVzZWQgdG8gY29uZmlndXJlIHRoZSBnbG9iYWwgcmVnaXN0ZXJzIG9uIHRoZSBKQUdDb3JlCisgKiBAcEFkcGF0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnR2xvYmFsUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfR0xPQkFMX3QgX19pb21lbSAqcEdibCA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmsgPT0gZmFsc2UpIHsKKwkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0IDwgMjA0OCkgeworCQkJLyogVHggLyBSeERNQSBhbmQgVHgvUnggTUFDIGludGVyZmFjZXMgaGF2ZSBhIDFrIHdvcmQKKwkJCSAqIGJsb2NrIG9mIFJBTSB0aGF0IHRoZSBkcml2ZXIgY2FuIHNwbGl0IGJldHdlZW4gVHgKKwkJCSAqIGFuZCBSeCBhcyBpdCBkZXNpcmVzLiAgT3VyIGRlZmF1bHQgaXMgdG8gc3BsaXQgaXQKKwkJCSAqIDUwLzUwOgorCQkJICovCisJCQl3cml0ZWwoMCwgJnBHYmwtPnJ4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlSeE1lbUVuZCwKKwkJCSAgICAgICAmcEdibC0+cnhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlSeE1lbUVuZCArIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9lbmRfYWRkci52YWx1ZSk7CisJCX0gZWxzZSBpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPCA4MTkyKSB7CisJCQkvKiBGb3IganVtYm8gcGFja2V0cyA+IDJrIGJ1dCA8IDhrLCBzcGxpdCA1MC01MC4gKi8KKwkJCXdyaXRlbCgwLCAmcEdibC0+cnhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQkJd3JpdGVsKElOVEVSTkFMX01FTV9SWF9PRkZTRVQsCisJCQkgICAgICAgJnBHYmwtPnJ4cV9lbmRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoSU5URVJOQUxfTUVNX1JYX09GRlNFVCArIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9lbmRfYWRkci52YWx1ZSk7CisJCX0gZWxzZSB7CisJCQkvKiA5MjE2IGlzIHRoZSBvbmx5IHBhY2tldCBzaXplIGdyZWF0ZXIgdGhhbiA4ayB0aGF0CisJCQkgKiBpcyBhdmFpbGFibGUuIFRoZSBUeCBidWZmZXIgaGFzIHRvIGJlIGJpZyBlbm91Z2gKKwkJCSAqIGZvciBvbmUgd2hvbGUgcGFja2V0IG9uIHRoZSBUeCBzaWRlLiBXZSdsbCBtYWtlCisJCQkgKiB0aGUgVHggOTQwOCwgYW5kIGdpdmUgdGhlIHJlc3QgdG8gUngKKwkJCSAqLworCQkJd3JpdGVsKDB4MDAwMCwgJnBHYmwtPnJ4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbCgweDAxYjMsICZwR2JsLT5yeHFfZW5kX2FkZHIudmFsdWUpOworCQkJd3JpdGVsKDB4MDFiNCwgJnBHYmwtPnR4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9lbmRfYWRkci52YWx1ZSk7CisJCX0KKworCQkvKiBJbml0aWFsaXplIHRoZSBsb29wYmFjayByZWdpc3Rlci4gRGlzYWJsZSBhbGwgbG9vcGJhY2tzLiAqLworCQl3cml0ZWwoMCwgJnBHYmwtPmxvb3BiYWNrLnZhbHVlKTsKKwl9IGVsc2UgeworCQkvKiBGb3IgUEhZIExpbmUgbG9vcGJhY2ssIHRoZSBtZW1vcnkgaXMgY29uZmlndXJlZCBhcyBpZiBUeAorCQkgKiBhbmQgUnggYm90aCBoYXZlIGFsbCB0aGUgbWVtb3J5LiAgVGhpcyBpcyBiZWNhdXNlIHRoZQorCQkgKiBSeE1BQyB3aWxsIHdyaXRlIGRhdGEgaW50byB0aGUgc3BhY2UsIGFuZCB0aGUgVHhNQUMgd2lsbAorCQkgKiByZWFkIGl0IG91dC4KKwkJICovCisJCXdyaXRlbCgwLCAmcEdibC0+cnhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQl3cml0ZWwoSU5URVJOQUxfTUVNX1NJWkUgLSAxLCAmcEdibC0+cnhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJd3JpdGVsKDAsICZwR2JsLT50eHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsICZwR2JsLT50eHFfZW5kX2FkZHIudmFsdWUpOworCisJCS8qIEluaXRpYWxpemUgdGhlIGxvb3BiYWNrIHJlZ2lzdGVyIChNQUMgbG9vcGJhY2spLiAqLworCQl3cml0ZWwoMSwgJnBHYmwtPmxvb3BiYWNrLnZhbHVlKTsKKwl9CisKKwkvKiBNU0kgUmVnaXN0ZXIgKi8KKwl3cml0ZWwoMCwgJnBHYmwtPm1zaV9jb25maWcudmFsdWUpOworCisJLyogQnkgZGVmYXVsdCwgZGlzYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIuICBJdCB3aWxsIGJlIGVuYWJsZWQgd2hlbgorCSAqIGEgcGFja2V0IGlzIHF1ZXVlZC4KKwkgKi8KKwl3cml0ZWwoMCwgJnBHYmwtPndhdGNoZG9nX3RpbWVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogQ29uZmlnTU1DUmVncyAtIFVzZWQgdG8gY29uZmlndXJlIHRoZSBtYWluIG1lbW9yeSByZWdpc3RlcnMgaW4gdGhlIEpBR0NvcmUKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdNTUNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJTU1DX0NUUkxfdCBtbWNfY3RybCA9IHsgMCB9OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGluaXRpYWxpemUgdGhlIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyICovCisJbW1jX2N0cmwuYml0cy5mb3JjZV9jZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLnJ4ZG1hX2Rpc2FibGUgPSAweDA7CisJbW1jX2N0cmwuYml0cy50eGRtYV9kaXNhYmxlID0gMHgwOworCW1tY19jdHJsLmJpdHMudHhtYWNfZGlzYWJsZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLnJ4bWFjX2Rpc2FibGUgPSAweDA7CisJbW1jX2N0cmwuYml0cy5hcmJfZGlzYWJsZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLm1tY19lbmFibGUgPSAweDE7CisKKwl3cml0ZWwobW1jX2N0cmwudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bW1jLm1tY19jdHJsLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1aW50MzJfdCBNYXNrVmFsdWU7CisKKwkvKiBFbmFibGUgYWxsIGdsb2JhbCBpbnRlcnJ1cHRzICovCisJaWYgKChhZGFwdGVyLT5GbG93Q29udHJvbCA9PSBUeE9ubHkpIHx8IChhZGFwdGVyLT5GbG93Q29udHJvbCA9PSBCb3RoKSkgeworCQlNYXNrVmFsdWUgPSBJTlRfTUFTS19FTkFCTEU7CisJfSBlbHNlIHsKKwkJTWFza1ZhbHVlID0gSU5UX01BU0tfRU5BQkxFX05PX0ZMT1c7CisJfQorCisJaWYgKGFkYXB0ZXItPkRyaXZlck5vUGh5QWNjZXNzKSB7CisJCU1hc2tWYWx1ZSB8PSAweDEwMDAwOworCX0KKworCWFkYXB0ZXItPkNhY2hlZE1hc2tWYWx1ZS52YWx1ZSA9IE1hc2tWYWx1ZTsKKwl3cml0ZWwoTWFza1ZhbHVlLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLmludF9tYXNrLnZhbHVlKTsKK30KKwordm9pZCBldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqIGFkYXB0ZXIpCit7CisJLyogRGlzYWJsZSBhbGwgZ2xvYmFsIGludGVycnVwdHMgKi8KKwlhZGFwdGVyLT5DYWNoZWRNYXNrVmFsdWUudmFsdWUgPSBJTlRfTUFTS19ESVNBQkxFOworCXdyaXRlbChJTlRfTUFTS19ESVNBQkxFLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLmludF9tYXNrLnZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM4MjkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9qYWdjb3JlLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvCisgKiAgICAgICAgICAgICAgICAgICAgdGhlIEpBR0NvcmUKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxMF9KQUdDT1JFX0hfXworI2RlZmluZSBfX0VUMTMxMF9KQUdDT1JFX0hfXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKworI2RlZmluZSBJTlRFUk5BTF9NRU1fU0laRSAgICAgICAweDQwMAkvLzEwMjQgb2YgaW50ZXJuYWwgbWVtb3J5CisjZGVmaW5lIElOVEVSTkFMX01FTV9SWF9PRkZTRVQgIDB4MUZGCS8vNTAlICAgVHgsIDUwJSAgIFJ4CisKKyNkZWZpbmUgUkVHU19NQVhfQVJSQVkgICAgICAgICAgNDA5NgorCisvKgorICogRm9yIGludGVycnVwdHMsIG5vcm1hbCBydW5uaW5nIGlzOgorICogICAgICAgcnhkbWFfeGZyX2RvbmUsIHBoeV9pbnRlcnJ1cHQsIG1hY19zdGF0X2ludGVycnVwdCwKKyAqICAgICAgIHdhdGNoZG9nX2ludGVycnVwdCAmIHR4ZG1hX3hmZXJfZG9uZQorICoKKyAqIEluIGJvdGggY2FzZXMsIHdoZW4gZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgZm9yIGVpdGhlciBUeCBvciBiaS1kaXJlY3Rpb24sCisgKiB3ZSBhZGRpdGlvbmFsIGVuYWJsZSByeF9mYnIwX2xvdyBhbmQgcnhfZmJyMV9sb3csIHNvIHdlIGtub3cgd2hlbiB0aGUKKyAqIGJ1ZmZlciByaW5ncyBhcmUgcnVubmluZyBsb3cuCisgKi8KKyNkZWZpbmUgSU5UX01BU0tfRElTQUJMRSAgICAgICAgICAgIDB4ZmZmZmZmZmYKKworLy8gTk9URTogTWFza2luZyBvdXQgTUFDX1NUQVQgSW50ZXJydXB0IGZvciBub3cuLi4KKy8vI2RlZmluZSBJTlRfTUFTS19FTkFCTEUgICAgICAgICAgICAgMHhmZmY2YmYxNworLy8jZGVmaW5lIElOVF9NQVNLX0VOQUJMRV9OT19GTE9XICAgICAweGZmZjZiZmQ3CisjZGVmaW5lIElOVF9NQVNLX0VOQUJMRSAgICAgICAgICAgICAweGZmZmViZjE3CisjZGVmaW5lIElOVF9NQVNLX0VOQUJMRV9OT19GTE9XICAgICAweGZmZmViZmQ3CisKKy8qIERBVEEgU1RSVUNUVVJFUyBGT1IgRElSRUNUIFJFR0lTVEVSIEFDQ0VTUyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdTggYlJlYWRXcml0ZTsKKwl1MzIgblJlZ0NvdW50OworCXUzMiBuRGF0YVtSRUdTX01BWF9BUlJBWV07CisJdTMyIG5PZmZzZXRzW1JFR1NfTUFYX0FSUkFZXTsKK30gSkFHQ09SRV9BQ0NFU1NfUkVHUywgKlBKQUdDT1JFX0FDQ0VTU19SRUdTOworCit0eXBlZGVmIHN0cnVjdCB7CisJdTggYlJlYWRXcml0ZTsKKwl1MzIgbkRhdGFXaWR0aDsKKwl1MzIgblJlZ0NvdW50OworCXUzMiBuT2Zmc2V0c1tSRUdTX01BWF9BUlJBWV07CisJdTMyIG5EYXRhW1JFR1NfTUFYX0FSUkFZXTsKK30gUENJX0NGR19TUEFDRV9SRUdTLCAqUFBDSV9DRkdfU1BBQ0VfUkVHUzsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit2b2lkIENvbmZpZ0dsb2JhbFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIENvbmZpZ01NQ1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfX0VUMTMxMF9KQUdDT1JFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI0OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMKQEAgLTAsMCArMSw3OTIgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX21hYy5jIC0gQWxsIGNvZGUgYW5kIHJvdXRpbmVzIHBlcnRhaW5pbmcgdG8gdGhlIE1BQworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyoqCisgKiBDb25maWdNYWNSZWdzMSAtIEluaXRpYWxpemUgdGhlIGZpcnN0IHBhcnQgb2YgTUFDIHJlZ3MKKyAqIEBwQWRwYXRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdNQUNSZWdzMShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqcE1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjOworCU1BQ19TVEFUSU9OX0FERFIxX3Qgc3RhdGlvbjE7CisJTUFDX1NUQVRJT05fQUREUjJfdCBzdGF0aW9uMjsKKwlNQUNfSVBHX3QgaXBnOworCU1BQ19IRkRQX3QgaGZkcDsKKwlNSUlfTUdNVF9DRkdfdCBtaWlfbWdtdF9jZmc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogRmlyc3Qgd2UgbmVlZCB0byByZXNldCBldmVyeXRoaW5nLiAgV3JpdGUgdG8gTUFDIGNvbmZpZ3VyYXRpb24KKwkgKiByZWdpc3RlciAxIHRvIHBlcmZvcm0gcmVzZXQuCisJICovCisJd3JpdGVsKDB4QzAwRjAwMDAsICZwTWFjLT5jZmcxLnZhbHVlKTsKKworCS8qIE5leHQgbGV0cyBjb25maWd1cmUgdGhlIE1BQyBJbnRlci1wYWNrZXQgZ2FwIHJlZ2lzdGVyICovCisJaXBnLmJpdHMubm9uX0IyQl9pcGdfMSA9IDB4Mzg7CQkvLyA1OGQKKwlpcGcuYml0cy5ub25fQjJCX2lwZ18yID0gMHg1ODsJCS8vIDg4ZAorCWlwZy5iaXRzLm1pbl9pZmdfZW5mb3JjZSA9IDB4NTA7CS8vIDgwZAorCWlwZy5iaXRzLkIyQl9pcGcgPSAweDYwOwkJLy8gOTZkCisJd3JpdGVsKGlwZy52YWx1ZSwgJnBNYWMtPmlwZy52YWx1ZSk7CisKKwkvKiBOZXh0IGxldHMgY29uZmlndXJlIHRoZSBNQUMgSGFsZiBEdXBsZXggcmVnaXN0ZXIgKi8KKwloZmRwLmJpdHMuYWx0X2JlYl90cnVuYyA9IDB4QTsKKwloZmRwLmJpdHMuYWx0X2JlYl9lbmFibGUgPSAweDA7CisJaGZkcC5iaXRzLmJwX25vX2JhY2tvZmYgPSAweDA7CisJaGZkcC5iaXRzLm5vX2JhY2tvZmYgPSAweDA7CisJaGZkcC5iaXRzLmV4Y2Vzc19kZWZlciA9IDB4MTsKKwloZmRwLmJpdHMucmV4bWl0X21heCA9IDB4RjsKKwloZmRwLmJpdHMuY29sbF93aW5kb3cgPSAweDM3OwkJLy8gNTVkCisJd3JpdGVsKGhmZHAudmFsdWUsICZwTWFjLT5oZmRwLnZhbHVlKTsKKworCS8qIE5leHQgbGV0cyBjb25maWd1cmUgdGhlIE1BQyBJbnRlcmZhY2UgQ29udHJvbCByZWdpc3RlciAqLworCXdyaXRlbCgwLCAmcE1hYy0+aWZfY3RybC52YWx1ZSk7CisKKwkvKiBMZXQncyBtb3ZlIG9uIHRvIHNldHRpbmcgdXAgdGhlIG1paSBtYW5hZ21lbnQgY29uZmlndXJhdGlvbiAqLworCW1paV9tZ210X2NmZy5iaXRzLnJlc2V0X21paV9tZ210ID0gMDsKKwltaWlfbWdtdF9jZmcuYml0cy5zY2FuX2F1dG9faW5jcmVtdCA9IDA7CisJbWlpX21nbXRfY2ZnLmJpdHMucHJlYW1ibGVfc3VwcHJlc3MgPSAwOworCW1paV9tZ210X2NmZy5iaXRzLm1nbXRfY2xrX3Jlc2V0ID0gMHg3OworCXdyaXRlbChtaWlfbWdtdF9jZmcudmFsdWUsICZwTWFjLT5taWlfbWdtdF9jZmcudmFsdWUpOworCisJLyogTmV4dCBsZXRzIGNvbmZpZ3VyZSB0aGUgTUFDIFN0YXRpb24gQWRkcmVzcyByZWdpc3Rlci4gIFRoZXNlCisJICogdmFsdWVzIGFyZSByZWFkIGZyb20gdGhlIEVFUFJPTSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHN0b3JlZAorCSAqIGluIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4gIFdlIHdyaXRlIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBhZGFwdGVyCisJICogc3RydWN0dXJlIHRvIHRoZSBNQUMgU3RhdGlvbiBBZGRyZXNzIHJlZ2lzdGVycyBoaWdoIGFuZCBsb3cuICBUaGlzCisJICogc3RhdGlvbiBhZGRyZXNzIGlzIHVzZWQgZm9yIGdlbmVyYXRpbmcgYW5kIGNoZWNraW5nIHBhdXNlIGNvbnRyb2wKKwkgKiBwYWNrZXRzLgorCSAqLworCXN0YXRpb24yLmJpdHMuT2N0ZXQxID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXN0YXRpb24yLmJpdHMuT2N0ZXQyID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQzID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzJdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQ0ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzNdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQ1ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQ2ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdOworCXdyaXRlbChzdGF0aW9uMS52YWx1ZSwgJnBNYWMtPnN0YXRpb25fYWRkcl8xLnZhbHVlKTsKKwl3cml0ZWwoc3RhdGlvbjIudmFsdWUsICZwTWFjLT5zdGF0aW9uX2FkZHJfMi52YWx1ZSk7CisKKwkvKiBNYXggZXRoZXJuZXQgcGFja2V0IGluIGJ5dGVzIHRoYXQgd2lsbCBwYXNzZWQgYnkgdGhlIG1hYyB3aXRob3V0CisJICogYmVpbmcgdHJ1bmNhdGVkLiAgQWxsb3cgdGhlIE1BQyB0byBwYXNzIDQgbW9yZSB0aGFuIG91ciBtYXggcGFja2V0CisJICogc2l6ZS4gIFRoaXMgaXMgNCBmb3IgdGhlIEV0aGVybmV0IENSQy4KKwkgKgorCSAqIFBhY2tldHMgbGFyZ2VyIHRoYW4gKFJlZ2lzdHJ5SnVtYm9QYWNrZXQpIHRoYXQgZG8gbm90IGNvbnRhaW4gYQorCSAqIFZMQU4gSUQgd2lsbCBiZSBkcm9wcGVkIGJ5IHRoZSBSeCBmdW5jdGlvbi4KKwkgKi8KKwl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgKyA0LCAmcE1hYy0+bWF4X2ZtX2xlbi52YWx1ZSk7CisKKwkvKiBjbGVhciBvdXQgTUFDIGNvbmZpZyByZXNldCAqLworCXdyaXRlbCgwLCAmcE1hYy0+Y2ZnMS52YWx1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIENvbmZpZ01hY1JlZ3MyIC0gSW5pdGlhbGl6ZSB0aGUgc2Vjb25kIHBhcnQgb2YgTUFDIHJlZ3MKKyAqIEBwQWRwYXRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdNQUNSZWdzMihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCWludDMyX3QgZGVsYXkgPSAwOworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqcE1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjOworCU1BQ19DRkcxX3QgY2ZnMTsKKwlNQUNfQ0ZHMl90IGNmZzI7CisJTUFDX0lGX0NUUkxfdCBpZmN0cmw7CisJVFhNQUNfQ1RMX3QgY3RsOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWN0bC52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhtYWMuY3RsLnZhbHVlKTsKKwljZmcxLnZhbHVlID0gcmVhZGwoJnBNYWMtPmNmZzEudmFsdWUpOworCWNmZzIudmFsdWUgPSByZWFkbCgmcE1hYy0+Y2ZnMi52YWx1ZSk7CisJaWZjdHJsLnZhbHVlID0gcmVhZGwoJnBNYWMtPmlmX2N0cmwudmFsdWUpOworCisJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCWNmZzIuYml0cy5pZl9tb2RlID0gMHgyOworCQlpZmN0cmwuYml0cy5waHlfbW9kZSA9IDB4MDsKKwl9IGVsc2UgeworCQljZmcyLmJpdHMuaWZfbW9kZSA9IDB4MTsKKwkJaWZjdHJsLmJpdHMucGh5X21vZGUgPSAweDE7CisJfQorCisJLyogV2UgbmVlZCB0byBlbmFibGUgUngvVHggKi8KKwljZmcxLmJpdHMucnhfZW5hYmxlID0gMHgxOworCWNmZzEuYml0cy50eF9lbmFibGUgPSAweDE7CisKKwkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJY2ZnMS5iaXRzLnR4X2Zsb3cgPSAweDE7CisKKwlpZiAoKHBBZGFwdGVyLT5GbG93Q29udHJvbCA9PSBSeE9ubHkpIHx8CisJICAgIChwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gQm90aCkpIHsKKwkJY2ZnMS5iaXRzLnJ4X2Zsb3cgPSAweDE7CisJfSBlbHNlIHsKKwkJY2ZnMS5iaXRzLnJ4X2Zsb3cgPSAweDA7CisJfQorCisJLyogSW5pdGlhbGl6ZSBsb29wIGJhY2sgdG8gb2ZmICovCisJY2ZnMS5iaXRzLmxvb3BfYmFjayA9IDA7CisKKwl3cml0ZWwoY2ZnMS52YWx1ZSwgJnBNYWMtPmNmZzEudmFsdWUpOworCisJLyogTm93IHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgTUFDIENvbmZpZ3VyYXRpb24gMiByZWdpc3RlciAqLworCWNmZzIuYml0cy5wcmVhbWJsZV9sZW4gPSAweDc7CisJY2ZnMi5iaXRzLmh1Z2VfZnJhbWUgPSAweDA7CisJLyogTEVOR1RIIEZJRUxEIENIRUNLSU5HIGJpdDQ6IFNldCB0aGlzIGJpdCB0byBjYXVzZSB0aGUgTUFDIHRvIGNoZWNrCisJICogdGhlIGZyYW1lJ3MgbGVuZ3RoIGZpZWxkIHRvIGVuc3VyZSBpdCBtYXRjaGVzIHRoZSBhY3R1YWwgZGF0YQorCSAqIGZpZWxkIGxlbmd0aC4gQ2xlYXIgdGhpcyBiaXQgaWYgbm8gbGVuZ3RoIGZpZWxkIGNoZWNraW5nIGlzCisJICogZGVzaXJlZC4gSXRzIGRlZmF1bHQgaXMgMC4KKwkgKi8KKwljZmcyLmJpdHMubGVuX2NoZWNrID0gMHgxOworCisJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9PSBmYWxzZSkgeworCQljZmcyLmJpdHMucGFkX2NyYyA9IDB4MTsKKwkJY2ZnMi5iaXRzLmNyY19lbmFibGUgPSAweDE7CisJfSBlbHNlIHsKKwkJY2ZnMi5iaXRzLnBhZF9jcmMgPSAwOworCQljZmcyLmJpdHMuY3JjX2VuYWJsZSA9IDA7CisJfQorCisJLyogMSAtIGZ1bGwgZHVwbGV4LCAwIC0gaGFsZi1kdXBsZXggKi8KKwljZmcyLmJpdHMuZnVsbF9kdXBsZXggPSBwQWRhcHRlci0+dWlEdXBsZXhNb2RlOworCWlmY3RybC5iaXRzLmdoZF9tb2RlID0gIXBBZGFwdGVyLT51aUR1cGxleE1vZGU7CisKKwl3cml0ZWwoaWZjdHJsLnZhbHVlLCAmcE1hYy0+aWZfY3RybC52YWx1ZSk7CisJd3JpdGVsKGNmZzIudmFsdWUsICZwTWFjLT5jZmcyLnZhbHVlKTsKKworCWRvIHsKKwkJdWRlbGF5KDEwKTsKKwkJZGVsYXkrKzsKKwkJY2ZnMS52YWx1ZSA9IHJlYWRsKCZwTWFjLT5jZmcxLnZhbHVlKTsKKwl9IHdoaWxlICgoIWNmZzEuYml0cy5zeW5jZF9yeF9lbiB8fAorCQkgICFjZmcxLmJpdHMuc3luY2RfdHhfZW4pICYmCisJCSBkZWxheSA8IDEwMCk7CisKKwlpZiAoZGVsYXkgPT0gMTAwKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIlN5bmNkIGJpdHMgZGlkIG5vdCByZXNwb25kIGNvcnJlY3RseSBjZmcxIHdvcmQgMHglMDh4XG4iLAorCQkJICBjZmcxLnZhbHVlKTsKKwl9CisKKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCSAgIlNwZWVkICVkLCBEdXAgJWQsIENGRzEgMHglMDh4LCBDRkcyIDB4JTA4eCwgaWZfY3RybCAweCUwOHhcbiIsCisJCSAgcEFkYXB0ZXItPnVpTGlua1NwZWVkLCBwQWRhcHRlci0+dWlEdXBsZXhNb2RlLAorCQkgIHJlYWRsKCZwTWFjLT5jZmcxLnZhbHVlKSwgcmVhZGwoJnBNYWMtPmNmZzIudmFsdWUpLAorCQkgIHJlYWRsKCZwTWFjLT5pZl9jdHJsLnZhbHVlKSk7CisKKwkvKiBFbmFibGUgVFhNQUMgKi8KKwljdGwuYml0cy50eG1hY19lbiA9IDB4MTsKKwljdGwuYml0cy5mY19kaXNhYmxlID0gMHgxOworCXdyaXRlbChjdGwudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhtYWMuY3RsLnZhbHVlKTsKKworCS8qIFJlYWR5IHRvIHN0YXJ0IHRoZSBSWERNQS9UWERNQSBlbmdpbmUgKi8KKwlpZiAoIU1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTE9XRVJfUE9XRVIpKSB7CisJCWV0MTMxeF9yeF9kbWFfZW5hYmxlKHBBZGFwdGVyKTsKKwkJZXQxMzF4X3R4X2RtYV9lbmFibGUocEFkYXB0ZXIpOworCX0gZWxzZSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJEaWRuJ3QgZW5hYmxlIFJ4L1R4IGR1ZSB0byBsb3ctcG93ZXIgbW9kZVxuIik7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBDb25maWdSeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYTUFDX3QgX19pb21lbSAqcFJ4TWFjID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYzsKKwlSWE1BQ19XT0xfU0FfTE9fdCBzYV9sbzsKKwlSWE1BQ19XT0xfU0FfSElfdCBzYV9oaTsKKwlSWE1BQ19QRl9DVFJMX3QgcGZfY3RybCA9IHsgMCB9OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIERpc2FibGUgdGhlIE1BQyB3aGlsZSBpdCBpcyBiZWluZyBjb25maWd1cmVkIChhbHNvIGRpc2FibGUgV09MKSAqLworCXdyaXRlbCgweDgsICZwUnhNYWMtPmN0cmwudmFsdWUpOworCisJLyogSW5pdGlhbGl6ZSBXT0wgdG8gZGlzYWJsZWQuICovCisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzAudmFsdWUpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMxMi52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzM0LnZhbHVlKTsKKworCS8qIFdlIG5lZWQgdG8gc2V0IHRoZSBXT0wgbWFzazAgLSBtYXNrNCBuZXh0LiAgV2UgaW5pdGlhbGl6ZSBpdCB0bworCSAqIGl0cyBkZWZhdWx0IFZhbHVlcyBvZiAweDAwMDAwMDAwIGJlY2F1c2UgdGhlcmUgYXJlIG5vdCBXT0wgbWFza3MKKwkgKiBhcyBvZiB0aGlzIHRpbWUuCisJICovCisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2swX3dvcmQwKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazBfd29yZDEpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMF93b3JkMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2swX3dvcmQzKTsKKworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMV93b3JkMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2sxX3dvcmQxKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazFfd29yZDIpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMV93b3JkMyk7CisKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazJfd29yZDApOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMl93b3JkMSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2syX3dvcmQyKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazJfd29yZDMpOworCisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2szX3dvcmQwKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazNfd29yZDEpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrM193b3JkMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2szX3dvcmQzKTsKKworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrNF93b3JkMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2s0X3dvcmQxKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazRfd29yZDIpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrNF93b3JkMyk7CisKKwkvKiBMZXRzIHNldHVwIHRoZSBXT0wgU291cmNlIEFkZHJlc3MgKi8KKwlzYV9sby5iaXRzLnNhMyA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXTsKKwlzYV9sby5iaXRzLnNhNCA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXTsKKwlzYV9sby5iaXRzLnNhNSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XTsKKwlzYV9sby5iaXRzLnNhNiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XTsKKwl3cml0ZWwoc2FfbG8udmFsdWUsICZwUnhNYWMtPnNhX2xvLnZhbHVlKTsKKworCXNhX2hpLmJpdHMuc2ExID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXNhX2hpLmJpdHMuc2EyID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCXdyaXRlbChzYV9oaS52YWx1ZSwgJnBSeE1hYy0+c2FfaGkudmFsdWUpOworCisJLyogRGlzYWJsZSBhbGwgUGFja2V0IEZpbHRlcmluZyAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5wZl9jdHJsLnZhbHVlKTsKKworCS8qIExldCdzIGluaXRpYWxpemUgdGhlIFVuaWNhc3QgUGFja2V0IGZpbHRlcmluZyBhZGRyZXNzICovCisJaWYgKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfRElSRUNURUQpIHsKKwkJU2V0dXBEZXZpY2VGb3JVbmljYXN0KHBBZGFwdGVyKTsKKwkJcGZfY3RybC5iaXRzLmZpbHRlcl91bmlfZW4gPSAxOworCX0gZWxzZSB7CisJCXdyaXRlbCgwLCAmcFJ4TWFjLT51bmlfcGZfYWRkcjEudmFsdWUpOworCQl3cml0ZWwoMCwgJnBSeE1hYy0+dW5pX3BmX2FkZHIyLnZhbHVlKTsKKwkJd3JpdGVsKDAsICZwUnhNYWMtPnVuaV9wZl9hZGRyMy52YWx1ZSk7CisJfQorCisJLyogTGV0J3MgaW5pdGlhbGl6ZSB0aGUgTXVsdGljYXN0IGhhc2ggKi8KKwlpZiAocEFkYXB0ZXItPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUKSB7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAwOworCX0gZWxzZSB7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAxOworCQlTZXR1cERldmljZUZvck11bHRpY2FzdChwQWRhcHRlcik7CisJfQorCisJLyogUnVudCBwYWNrZXQgZmlsdGVyaW5nLiAgRGlkbid0IHdvcmsgaW4gdmVyc2lvbiBBIHNpbGljb24uICovCisJcGZfY3RybC5iaXRzLm1pbl9wa3Rfc2l6ZSA9IE5JQ19NSU5fUEFDS0VUX1NJWkUgKyA0OworCXBmX2N0cmwuYml0cy5maWx0ZXJfZnJhZ19lbiA9IDE7CisKKwlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPiA4MTkyKSB7CisJCVJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgbWNpZl9jdHJsX21heF9zZWc7CisKKwkJLyogSW4gb3JkZXIgdG8gdHJhbnNtaXQganVtYm8gcGFja2V0cyBncmVhdGVyIHRoYW4gOGssIHRoZQorCQkgKiBGSUZPIGJldHdlZW4gUnhNQUMgYW5kIFJ4RE1BIG5lZWRzIHRvIGJlIHJlZHVjZWQgaW4gc2l6ZQorCQkgKiB0byAoMTZrIC0gSnVtYm8gcGFja2V0IHNpemUpLiAgSW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoaXMsCisJCSAqIHdlIG11c3QgdXNlICJjdXQgdGhyb3VnaCIgbW9kZSBpbiB0aGUgUnhNQUMsIHdoaWNoIGNob3BzCisJCSAqIHBhY2tldHMgZG93biBpbnRvIHNlZ21lbnRzIHdoaWNoIGFyZSAobWF4X3NpemUgKiAxNikuICBJbgorCQkgKiB0aGlzIGNhc2Ugd2Ugc2VsZWN0ZWQgMjU2IGJ5dGVzLCBzaW5jZSB0aGlzIGlzIHRoZSBzaXplIG9mCisJCSAqIHRoZSBQQ0ktRXhwcmVzcyBUTFAncyB0aGF0IHRoZSAxMzEwIHVzZXMuCisJCSAqLworCQltY2lmX2N0cmxfbWF4X3NlZy5iaXRzLnNlZ19lbiA9IDB4MTsKKwkJbWNpZl9jdHJsX21heF9zZWcuYml0cy5mY19lbiA9IDB4MDsKKwkJbWNpZl9jdHJsX21heF9zZWcuYml0cy5tYXhfc2l6ZSA9IDB4MTA7CisKKwkJd3JpdGVsKG1jaWZfY3RybF9tYXhfc2VnLnZhbHVlLAorCQkgICAgICAgJnBSeE1hYy0+bWNpZl9jdHJsX21heF9zZWcudmFsdWUpOworCX0gZWxzZSB7CisJCXdyaXRlbCgwLCAmcFJ4TWFjLT5tY2lmX2N0cmxfbWF4X3NlZy52YWx1ZSk7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgTUNJRiB3YXRlciBtYXJrcyAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tY2lmX3dhdGVyX21hcmsudmFsdWUpOworCisJLyogIEluaXRpYWxpemUgdGhlIE1JRiBjb250cm9sICovCisJd3JpdGVsKDAsICZwUnhNYWMtPm1pZl9jdHJsLnZhbHVlKTsKKworCS8qIEluaXRpYWxpemUgdGhlIFNwYWNlIEF2YWlsYWJsZSBSZWdpc3RlciAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5zcGFjZV9hdmFpbC52YWx1ZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSB0aGUgbWlmX2N0cmwgcmVnaXN0ZXIKKwkgKiBiaXQgMzogIFJlY2VpdmUgY29kZSBlcnJvci4gT25lIG9yIG1vcmUgbmliYmxlcyB3ZXJlIHNpZ25hbGVkIGFzCisJICoJICAgZXJyb3JzICBkdXJpbmcgdGhlIHJlY2VwdGlvbiBvZiB0aGUgcGFja2V0LiAgQ2xlYXIgdGhpcworCSAqCSAgIGJpdCBpbiBHaWdhYml0LCBzZXQgaXQgaW4gMTAwTWJpdC4gIFRoaXMgd2FzIGRlcml2ZWQKKwkgKgkgICBleHBlcmltZW50YWxseSBhdCBVTkguCisJICogYml0IDQ6ICBSZWNlaXZlIENSQyBlcnJvci4gVGhlIHBhY2tldCdzIENSQyBkaWQgbm90IG1hdGNoIHRoZQorCSAqCSAgIGludGVybmFsbHkgZ2VuZXJhdGVkIENSQy4KKwkgKiBiaXQgNTogIFJlY2VpdmUgbGVuZ3RoIGNoZWNrIGVycm9yLiBJbmRpY2F0ZXMgdGhhdCBmcmFtZSBsZW5ndGgKKwkgKgkgICBmaWVsZCB2YWx1ZSBpbiB0aGUgcGFja2V0IGRvZXMgbm90IG1hdGNoIHRoZSBhY3R1YWwgZGF0YQorCSAqCSAgIGJ5dGUgbGVuZ3RoIGFuZCBpcyBub3QgYSB0eXBlIGZpZWxkLgorCSAqIGJpdCAxNjogUmVjZWl2ZSBmcmFtZSB0cnVuY2F0ZWQuCisJICogYml0IDE3OiBEcm9wIHBhY2tldCBlbmFibGUKKwkgKi8KKwlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwTUJQUykgeworCQl3cml0ZWwoMHgzMDAzOCwgJnBSeE1hYy0+bWlmX2N0cmwudmFsdWUpOworCX0gZWxzZSB7CisJCXdyaXRlbCgweDMwMDMwLCAmcFJ4TWFjLT5taWZfY3RybC52YWx1ZSk7CisJfQorCisJLyogRmluYWxseSB3ZSBpbml0aWFsaXplIFJ4TWFjIHRvIGJlIGVuYWJsZWQgJiBXT0wgZGlzYWJsZWQuICBQYWNrZXQKKwkgKiBmaWx0ZXIgaXMgYWx3YXlzIGVuYWJsZWQgc2luY2UgaXQgaXMgd2hlcmUgdGhlIHJ1bnQgcGFja2V0cyBhcmUKKwkgKiBzdXBwb3NlZCB0byBiZSBkcm9wcGVkLiAgRm9yIHZlcnNpb24gQSBzaWxpY29uLCBydW50IHBhY2tldAorCSAqIGRyb3BwaW5nIGRvZXNuJ3Qgd29yaywgc28gaXQgaXMgZGlzYWJsZWQgaW4gdGhlIHBmX2N0cmwgcmVnaXN0ZXIsCisJICogYnV0IHdlIHN0aWxsIGxlYXZlIHRoZSBwYWNrZXQgZmlsdGVyIG9uLgorCSAqLworCXdyaXRlbChwZl9jdHJsLnZhbHVlLCAmcFJ4TWFjLT5wZl9jdHJsLnZhbHVlKTsKKwl3cml0ZWwoMHg5LCAmcFJ4TWFjLT5jdHJsLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgQ29uZmlnVHhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9UWE1BQ190IF9faW9tZW0gKnBUeE1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhtYWM7CisJVFhNQUNfQ0ZfUEFSQU1fdCBMb2NhbDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgQ29udHJvbCBGcmFtZSBQYXJhbWV0ZXJzCisJICogY2ZwdCAtIGNvbnRyb2wgZnJhbWUgcGF1c2UgdGltZXIgc2V0IHRvIDY0ICgweDQwKQorCSAqIGNmZXAgLSBjb250cm9sIGZyYW1lIGV4dGVuZGVkIHBhdXNlIHRpbWVyIHNldCB0byAweDAKKwkgKi8KKwlpZiAocEFkYXB0ZXItPkZsb3dDb250cm9sID09IE5vbmUpIHsKKwkJd3JpdGVsKDAsICZwVHhNYWMtPmNmX3BhcmFtLnZhbHVlKTsKKwl9IGVsc2UgeworCQlMb2NhbC5iaXRzLmNmcHQgPSAweDQwOworCQlMb2NhbC5iaXRzLmNmZXAgPSAweDA7CisJCXdyaXRlbChMb2NhbC52YWx1ZSwgJnBUeE1hYy0+Y2ZfcGFyYW0udmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgQ29uZmlnTWFjU3RhdFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX01BQ19TVEFUX3QgX19pb21lbSAqcERldk1hY1N0YXQgPQorCQkmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQ7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTmV4dCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgYWxsIHRoZSBNQUNfU1RBVCByZWdpc3RlcnMgdG8gemVybyBvbgorCSAqIHRoZSBkZXZpY2UuCisJICovCisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkZjcyk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkFsbik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkZscik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkRycCk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkNkZSk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+Uk92cik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkZyZyk7CisKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UU2NsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5URGZyKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UTWNsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UTGNsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UTmNsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UT3ZyKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UVW5kKTsKKworCS8qIFVubWFzayBhbnkgY291bnRlcnMgdGhhdCB3ZSB3YW50IHRvIHRyYWNrIHRoZSBvdmVyZmxvdyBvZi4KKwkgKiBJbml0aWFsbHkgdGhpcyB3aWxsIGJlIGFsbCBjb3VudGVycy4gIEl0IG1heSBiZWNvbWUgY2xlYXIgbGF0ZXIKKwkgKiB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHRyYWNrIGFsbCBjb3VudGVycy4KKwkgKi8KKwl7CisJCU1BQ19TVEFUX1JFR18xX3QgQ2FycnkxTSA9IHsgMHhmZmZmZmZmZiB9OworCisJCUNhcnJ5MU0uYml0cy5yZHJwID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJqYnIgPSAxOworCQlDYXJyeTFNLmJpdHMucmZyZyA9IDA7CisJCUNhcnJ5MU0uYml0cy5yb3ZyID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJ1bmQgPSAxOworCQlDYXJyeTFNLmJpdHMucmNzZSA9IDE7CisJCUNhcnJ5MU0uYml0cy5yY2RlID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJmbHIgPSAwOworCQlDYXJyeTFNLmJpdHMucmFsbiA9IDA7CisJCUNhcnJ5MU0uYml0cy5yeHVvID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJ4cGYgPSAxOworCQlDYXJyeTFNLmJpdHMucnhjZiA9IDE7CisJCUNhcnJ5MU0uYml0cy5yYmNhID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJtY2EgPSAxOworCQlDYXJyeTFNLmJpdHMucmZjcyA9IDA7CisJCUNhcnJ5MU0uYml0cy5ycGt0ID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJieXQgPSAxOworCQlDYXJyeTFNLmJpdHMudHJtZ3YgPSAxOworCQlDYXJyeTFNLmJpdHMudHJtYXggPSAxOworCQlDYXJyeTFNLmJpdHMudHIxayA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjUxMSA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjI1NSA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjEyNyA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjY0ID0gMTsKKworCQl3cml0ZWwoQ2FycnkxTS52YWx1ZSwgJnBEZXZNYWNTdGF0LT5DYXJyeTFNLnZhbHVlKTsKKwl9CisKKwl7CisJCU1BQ19TVEFUX1JFR18yX3QgQ2FycnkyTSA9IHsgMHhmZmZmZmZmZiB9OworCisJCUNhcnJ5Mk0uYml0cy50ZHJwID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRwZmggPSAxOworCQlDYXJyeTJNLmJpdHMudG5jbCA9IDA7CisJCUNhcnJ5Mk0uYml0cy50eGNsID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRsY2wgPSAwOworCQlDYXJyeTJNLmJpdHMudG1jbCA9IDA7CisJCUNhcnJ5Mk0uYml0cy50c2NsID0gMDsKKwkJQ2FycnkyTS5iaXRzLnRlZGYgPSAxOworCQlDYXJyeTJNLmJpdHMudGRmciA9IDA7CisJCUNhcnJ5Mk0uYml0cy50eHBmID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRiY2EgPSAxOworCQlDYXJyeTJNLmJpdHMudG1jYSA9IDE7CisJCUNhcnJ5Mk0uYml0cy50cGt0ID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRieXQgPSAxOworCQlDYXJyeTJNLmJpdHMudGZyZyA9IDE7CisJCUNhcnJ5Mk0uYml0cy50dW5kID0gMDsKKwkJQ2FycnkyTS5iaXRzLnRvdnIgPSAwOworCQlDYXJyeTJNLmJpdHMudHhjZiA9IDE7CisJCUNhcnJ5Mk0uYml0cy50ZmNzID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRqYnIgPSAxOworCisJCXdyaXRlbChDYXJyeTJNLnZhbHVlLCAmcERldk1hY1N0YXQtPkNhcnJ5Mk0udmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgQ29uZmlnRmxvd0NvbnRyb2woc3RydWN0IGV0MTMxeF9hZGFwdGVyICogcEFkYXB0ZXIpCit7CisJaWYgKHBBZGFwdGVyLT51aUR1cGxleE1vZGUgPT0gMCkgeworCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBOb25lOworCX0gZWxzZSB7CisJCWNoYXIgUmVtb3RlUGF1c2UsIFJlbW90ZUFzeW5jUGF1c2U7CisKKwkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KHBBZGFwdGVyLAorCQkJCSAgICAgIFRSVUVQSFlfQklUX1JFQUQsIDUsIDEwLCAmUmVtb3RlUGF1c2UpOworCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQocEFkYXB0ZXIsCisJCQkJICAgICAgVFJVRVBIWV9CSVRfUkVBRCwgNSwgMTEsCisJCQkJICAgICAgJlJlbW90ZUFzeW5jUGF1c2UpOworCisJCWlmICgoUmVtb3RlUGF1c2UgPT0gVFJVRVBIWV9CSVRfU0VUKSAmJgorCQkgICAgKFJlbW90ZUFzeW5jUGF1c2UgPT0gVFJVRVBIWV9CSVRfU0VUKSkgeworCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gcEFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2w7CisJCX0gZWxzZSBpZiAoKFJlbW90ZVBhdXNlID09IFRSVUVQSFlfQklUX1NFVCkgJiYKKwkJCSAgIChSZW1vdGVBc3luY1BhdXNlID09IFRSVUVQSFlfQklUX0NMRUFSKSkgeworCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IEJvdGgpIHsKKwkJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBCb3RoOworCQkJfSBlbHNlIHsKKwkJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBOb25lOworCQkJfQorCQl9IGVsc2UgaWYgKChSZW1vdGVQYXVzZSA9PSBUUlVFUEhZX0JJVF9DTEVBUikgJiYKKwkJCSAgIChSZW1vdGVBc3luY1BhdXNlID09IFRSVUVQSFlfQklUX0NMRUFSKSkgeworCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gTm9uZTsKKwkJfSBlbHNlIHsvKiBpZiAoUmVtb3RlUGF1c2UgPT0gVFJVRVBIWV9DTEVBUl9CSVQgJiYKKwkJCSAgICAgICBSZW1vdGVBc3luY1BhdXNlID09IFRSVUVQSFlfU0VUX0JJVCkgKi8KKwkJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gUnhPbmx5OworCQkJfSBlbHNlIHsKKwkJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBOb25lOworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIFVwZGF0ZU1hY1N0YXRIb3N0Q291bnRlcnMgLSBVcGRhdGUgdGhlIGxvY2FsIGNvcHkgb2YgdGhlIHN0YXRpc3RpY3MKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9jZV9zdGF0c190ICpzdGF0cyA9ICZwQWRhcHRlci0+U3RhdHM7CisJc3RydWN0IF9NQUNfU1RBVF90IF9faW9tZW0gKnBEZXZNYWNTdGF0ID0KKwkJJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWNTdGF0OworCisJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UTmNsKTsKKwlzdGF0cy0+Zmlyc3RfY29sbGlzaW9uICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VFNjbCk7CisJc3RhdHMtPnR4X2RlZmVycmVkICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VERmcik7CisJc3RhdHMtPmV4Y2Vzc2l2ZV9jb2xsaXNpb25zICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VE1jbCk7CisJc3RhdHMtPmxhdGVfY29sbGlzaW9ucyArPSByZWFkbCgmcERldk1hY1N0YXQtPlRMY2wpOworCXN0YXRzLT50eF91ZmxvICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VFVuZCk7CisJc3RhdHMtPm1heF9wa3RfZXJyb3IgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UT3ZyKTsKKworCXN0YXRzLT5hbGlnbm1lbnRfZXJyICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+UkFsbik7CisJc3RhdHMtPmNyY19lcnIgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SQ2RlKTsKKwlzdGF0cy0+bm9yY3ZidWYgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SRHJwKTsKKwlzdGF0cy0+cnhfb3ZfZmxvdyArPSByZWFkbCgmcERldk1hY1N0YXQtPlJPdnIpOworCXN0YXRzLT5jb2RlX3Zpb2xhdGlvbnMgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SRmNzKTsKKwlzdGF0cy0+bGVuZ3RoX2VyciArPSByZWFkbCgmcERldk1hY1N0YXQtPlJGbHIpOworCisJc3RhdHMtPm90aGVyX2Vycm9ycyArPSByZWFkbCgmcERldk1hY1N0YXQtPlJGcmcpOworfQorCisvKioKKyAqIEhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBPbmUgb2YgdGhlIE1BQ1NUQVQgY291bnRlcnMgaGFzIHdyYXBwZWQuICBVcGRhdGUgdGhlIGxvY2FsIGNvcHkgb2YKKyAqIHRoZSBzdGF0aXN0aWNzIGhlbGQgaW4gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLCBjaGVja2luZyB0aGUgIndyYXAiCisgKiBiaXQgZm9yIGVhY2ggY291bnRlci4KKyAqLwordm9pZCBIYW5kbGVNYWNTdGF0SW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJTUFDX1NUQVRfUkVHXzFfdCBDYXJyeTE7CisJTUFDX1NUQVRfUkVHXzJfdCBDYXJyeTI7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUmVhZCB0aGUgaW50ZXJydXB0IGJpdHMgZnJvbSB0aGUgcmVnaXN0ZXIocykuICBUaGVzZSBhcmUgQ2xlYXIgT24KKwkgKiBXcml0ZS4KKwkgKi8KKwlDYXJyeTEudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQuQ2FycnkxLnZhbHVlKTsKKwlDYXJyeTIudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQuQ2FycnkyLnZhbHVlKTsKKworCXdyaXRlbChDYXJyeTEudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdC5DYXJyeTEudmFsdWUpOworCXdyaXRlbChDYXJyeTIudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdC5DYXJyeTIudmFsdWUpOworCisJLyogV2UgbmVlZCB0byBkbyB1cGRhdGUgdGhlIGhvc3QgY29weSBvZiBhbGwgdGhlIE1BQ19TVEFUIGNvdW50ZXJzLgorCSAqIEZvciBlYWNoIGNvdW50ZXIsIGNoZWNrIGl0J3Mgb3ZlcmZsb3cgYml0LiAgSWYgdGhlIG92ZXJmbG93IGJpdCBpcworCSAqIHNldCwgdGhlbiBpbmNyZW1lbnQgdGhlIGhvc3QgdmVyc2lvbiBvZiB0aGUgY291bnQgYnkgb25lIGNvbXBsZXRlCisJICogcmV2b2x1dGlvbiBvZiB0aGUgY291bnRlci4gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgY291bnRlcgorCSAqIGJsb2NrIGluZGljYXRlcyB0aGF0IG9uZSBvZiB0aGUgY291bnRlcnMgaGFzIHdyYXBwZWQuCisJICovCisJaWYgKENhcnJ5MS5iaXRzLnJmY3MpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmNvZGVfdmlvbGF0aW9ucyArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmFsbikgeworCQlwQWRhcHRlci0+U3RhdHMuYWxpZ25tZW50X2VyciArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmZscikgeworCQlwQWRhcHRlci0+U3RhdHMubGVuZ3RoX2VyciArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmZyZykgeworCQlwQWRhcHRlci0+U3RhdHMub3RoZXJfZXJyb3JzICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yY2RlKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5jcmNfZXJyICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yb3ZyKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5yeF9vdl9mbG93ICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yZHJwKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5ub3JjdmJ1ZiArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudG92cikgeworCQlwQWRhcHRlci0+U3RhdHMubWF4X3BrdF9lcnJvciArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudHVuZCkgeworCQlwQWRhcHRlci0+U3RhdHMudHhfdWZsbyArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudHNjbCkgeworCQlwQWRhcHRlci0+U3RhdHMuZmlyc3RfY29sbGlzaW9uICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50ZGZyKSB7CisJCXBBZGFwdGVyLT5TdGF0cy50eF9kZWZlcnJlZCArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudG1jbCkgeworCQlwQWRhcHRlci0+U3RhdHMuZXhjZXNzaXZlX2NvbGxpc2lvbnMgKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnRsY2wpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmxhdGVfY29sbGlzaW9ucyArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudG5jbCkgeworCQlwQWRhcHRlci0+U3RhdHMuY29sbGlzaW9ucyArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYTUFDX3QgX19pb21lbSAqcnhtYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjOworCXVpbnQzMl90IG5JbmRleDsKKwl1aW50MzJfdCByZXN1bHQ7CisJdWludDMyX3QgaGFzaDEgPSAwOworCXVpbnQzMl90IGhhc2gyID0gMDsKKwl1aW50MzJfdCBoYXNoMyA9IDA7CisJdWludDMyX3QgaGFzaDQgPSAwOworCVBNX0NTUl90IHBtX2NzcjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBJZiBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUIGlzIHNwZWNpZmllZCwgdGhlbiB3ZSBwcm92aXNpb24KKwkgKiB0aGUgbXVsdGktY2FzdCBMSVNULiAgSWYgaXQgaXMgTk9UIHNwZWNpZmllZCwgKGFuZCAiQUxMIiBpcyBub3QKKwkgKiBzcGVjaWZpZWQpIHRoZW4gd2Ugc2hvdWxkIHBhc3MgTk8gbXVsdGktY2FzdCBhZGRyZXNzZXMgdG8gdGhlCisJICogZHJpdmVyLgorCSAqLworCWlmIChwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCkgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiTVVMVElDQVNUIGZsYWcgaXMgc2V0LCBNQ0NvdW50OiAlZFxuIiwKKwkJCSAgICBwQWRhcHRlci0+TUNBZGRyZXNzQ291bnQpOworCisJCS8qIExvb3AgdGhyb3VnaCBvdXIgbXVsdGljYXN0IGFycmF5IGFuZCBzZXQgdXAgdGhlIGRldmljZSAqLworCQlmb3IgKG5JbmRleCA9IDA7IG5JbmRleCA8IHBBZGFwdGVyLT5NQ0FkZHJlc3NDb3VudDsgbkluZGV4KyspIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiTUNMaXN0WyVkXTogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJICAgIG5JbmRleCwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzBdLAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMV0sCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVsyXSwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzNdLAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bNF0sCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVs1XSk7CisKKwkJCXJlc3VsdCA9IGV0aGVyX2NyYyg2LCBwQWRhcHRlci0+TUNMaXN0W25JbmRleF0pOworCisJCQlyZXN1bHQgPSAocmVzdWx0ICYgMHgzRjgwMDAwMCkgPj4gMjM7CisKKwkJCWlmIChyZXN1bHQgPCAzMikgeworCQkJCWhhc2gxIHw9ICgxIDw8IHJlc3VsdCk7CisJCQl9IGVsc2UgaWYgKCgzMSA8IHJlc3VsdCkgJiYgKHJlc3VsdCA8IDY0KSkgeworCQkJCXJlc3VsdCAtPSAzMjsKKwkJCQloYXNoMiB8PSAoMSA8PCByZXN1bHQpOworCQkJfSBlbHNlIGlmICgoNjMgPCByZXN1bHQpICYmIChyZXN1bHQgPCA5NikpIHsKKwkJCQlyZXN1bHQgLT0gNjQ7CisJCQkJaGFzaDMgfD0gKDEgPDwgcmVzdWx0KTsKKwkJCX0gZWxzZSB7CisJCQkJcmVzdWx0IC09IDk2OworCQkJCWhhc2g0IHw9ICgxIDw8IHJlc3VsdCk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBXcml0ZSBvdXQgdGhlIG5ldyBoYXNoIHRvIHRoZSBkZXZpY2UgKi8KKwlwbV9jc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCWlmIChwbV9jc3IuYml0cy5wbV9waHlfc3dfY29tYSA9PSAwKSB7CisJCXdyaXRlbChoYXNoMSwgJnJ4bWFjLT5tdWx0aV9oYXNoMSk7CisJCXdyaXRlbChoYXNoMiwgJnJ4bWFjLT5tdWx0aV9oYXNoMik7CisJCXdyaXRlbChoYXNoMywgJnJ4bWFjLT5tdWx0aV9oYXNoMyk7CisJCXdyaXRlbChoYXNoNCwgJnJ4bWFjLT5tdWx0aV9oYXNoNCk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBTZXR1cERldmljZUZvclVuaWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYTUFDX3QgX19pb21lbSAqcnhtYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjOworCVJYTUFDX1VOSV9QRl9BRERSMV90IHVuaV9wZjE7CisJUlhNQUNfVU5JX1BGX0FERFIyX3QgdW5pX3BmMjsKKwlSWE1BQ19VTklfUEZfQUREUjNfdCB1bmlfcGYzOworCVBNX0NTUl90IHBtX2NzcjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXQgdXAgdW5pY2FzdCBwYWNrZXQgZmlsdGVyIHJlZyAzIHRvIGJlIHRoZSBmaXJzdCB0d28gb2N0ZXRzIG9mCisJICogdGhlIE1BQyBhZGRyZXNzIGZvciBib3RoIGFkZHJlc3MKKwkgKgorCSAqIFNldCB1cCB1bmljYXN0IHBhY2tldCBmaWx0ZXIgcmVnIDIgdG8gYmUgdGhlIG9jdGV0cyAyIC0gNSBvZiB0aGUKKwkgKiBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIGFkZHJlc3MKKwkgKgorCSAqIFNldCB1cCB1bmljYXN0IHBhY2tldCBmaWx0ZXIgcmVnIDMgdG8gYmUgdGhlIG9jdGV0cyAyIC0gNSBvZiB0aGUKKwkgKiBNQUMgYWRkcmVzcyBmb3IgZmlyc3QgYWRkcmVzcworCSAqLworCXVuaV9wZjMuYml0cy5hZGRyMV8xID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXVuaV9wZjMuYml0cy5hZGRyMV8yID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCXVuaV9wZjMuYml0cy5hZGRyMl8xID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXVuaV9wZjMuYml0cy5hZGRyMl8yID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCisJdW5pX3BmMi5iaXRzLmFkZHIyXzMgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl07CisJdW5pX3BmMi5iaXRzLmFkZHIyXzQgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbM107CisJdW5pX3BmMi5iaXRzLmFkZHIyXzUgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF07CisJdW5pX3BmMi5iaXRzLmFkZHIyXzYgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV07CisKKwl1bmlfcGYxLmJpdHMuYWRkcjFfMyA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXTsKKwl1bmlfcGYxLmJpdHMuYWRkcjFfNCA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXTsKKwl1bmlfcGYxLmJpdHMuYWRkcjFfNSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XTsKKwl1bmlfcGYxLmJpdHMuYWRkcjFfNiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XTsKKworCXBtX2Nzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisJaWYgKHBtX2Nzci5iaXRzLnBtX3BoeV9zd19jb21hID09IDApIHsKKwkJd3JpdGVsKHVuaV9wZjEudmFsdWUsICZyeG1hYy0+dW5pX3BmX2FkZHIxLnZhbHVlKTsKKwkJd3JpdGVsKHVuaV9wZjIudmFsdWUsICZyeG1hYy0+dW5pX3BmX2FkZHIyLnZhbHVlKTsKKwkJd3JpdGVsKHVuaV9wZjMudmFsdWUsICZyeG1hYy0+dW5pX3BmX2FkZHIzLnZhbHVlKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI2Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfbWFjLmggLSAgRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byB0aGUKKyAqICAgICAgICAgICAgICAgICBNQUMuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0VUMTMxMF9NQUNfSF8KKyNkZWZpbmUgX0VUMTMxMF9NQUNfSF8KKworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKworI2RlZmluZSBDT1VOVEVSX1dSQVBfMjhfQklUIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzIyX0JJVCAweDQwMDAwMAorI2RlZmluZSBDT1VOVEVSX1dSQVBfMTZfQklUIDB4MTAwMDAKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzEyX0JJVCAweDEwMDAKKworI2RlZmluZSBDT1VOVEVSX01BU0tfMjhfQklUIChDT1VOVEVSX1dSQVBfMjhfQklUIC0gMSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLXzIyX0JJVCAoQ09VTlRFUl9XUkFQXzIyX0JJVCAtIDEpCisjZGVmaW5lIENPVU5URVJfTUFTS18xNl9CSVQgKENPVU5URVJfV1JBUF8xNl9CSVQgLSAxKQorI2RlZmluZSBDT1VOVEVSX01BU0tfMTJfQklUIChDT1VOVEVSX1dSQVBfMTJfQklUIC0gMSkKKworI2RlZmluZSBVUERBVEVfQ09VTlRFUihIb3N0Q250LERldkNudCkgXAorICAgIEhvc3RDbnQgPSBIb3N0Q250ICsgRGV2Q250OworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK3ZvaWQgQ29uZmlnTUFDUmVnczEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnTUFDUmVnczIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnUnhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ1R4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdNYWNTdGF0UmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdGbG93Q29udHJvbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIEhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0dXBEZXZpY2VGb3JVbmljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfRVQxMzEwX01BQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGQ2ZGZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMKQEAgLTAsMCArMSwxMjc5IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9waHkuYyAtIFJvdXRpbmVzIGZvciBjb25maWd1cmluZyBhbmQgYWNjZXNzaW5nIHRoZSBQSFkKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfbmV0ZGV2LmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorI2luY2x1ZGUgImV0MTMxMF90eC5oIgorI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKiBQcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgd2l0aCBsb2NhbCBzY29wZSAqLworc3RhdGljIGludCBldDEzMXhfeGN2cl9pbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qKgorICogUGh5TWlSZWFkIC0gUmVhZCBmcm9tIHRoZSBQSFkgdGhyb3VnaCB0aGUgTUlJIEludGVyZmFjZSBvbiB0aGUgTUFDCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHhjdnJBZGRyOiB0aGUgYWRkcmVzcyBvZiB0aGUgdHJhbnNjaWV2ZXIKKyAqIEB4Y3ZyUmVnOiB0aGUgcmVnaXN0ZXIgdG8gcmVhZAorICogQHZhbHVlOiBwb2ludGVyIHRvIGEgMTYtYml0IHZhbHVlIGluIHdoaWNoIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBQaHlNaVJlYWQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1aW50OF90IHhjdnJBZGRyLAorCSAgICAgIHVpbnQ4X3QgeGN2clJlZywgdWludDE2X3QgKnZhbHVlKQoreworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqbWFjID0gJmFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYzsKKwlpbnQgc3RhdHVzID0gMDsKKwl1aW50MzJfdCBkZWxheTsKKwlNSUlfTUdNVF9BRERSX3QgbWlpQWRkcjsKKwlNSUlfTUdNVF9DTURfdCBtaWlDbWQ7CisJTUlJX01HTVRfSU5ESUNBVE9SX3QgbWlpSW5kaWNhdG9yOworCisJLyogU2F2ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIHJlZ2lzdGVycyB3ZSBhcmUgZGVhbGluZyB3aXRoIHNvIHdlIGNhbgorCSAqIHNldCB0aGVtIGJhY2sKKwkgKi8KKwltaWlBZGRyLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJbWlpQ21kLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCS8qIFN0b3AgdGhlIGN1cnJlbnQgb3BlcmF0aW9uICovCisJd3JpdGVsKDAsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwkvKiBTZXQgdXAgdGhlIHJlZ2lzdGVyIHdlIG5lZWQgdG8gcmVhZCBmcm9tIG9uIHRoZSBjb3JyZWN0IFBIWSAqLworCXsKKwkJTUlJX01HTVRfQUREUl90IG1paV9tZ210X2FkZHIgPSB7IDAgfTsKKworCQltaWlfbWdtdF9hZGRyLmJpdHMucGh5X2FkZHIgPSB4Y3ZyQWRkcjsKKwkJbWlpX21nbXRfYWRkci5iaXRzLnJlZ19hZGRyID0geGN2clJlZzsKKwkJd3JpdGVsKG1paV9tZ210X2FkZHIudmFsdWUsICZtYWMtPm1paV9tZ210X2FkZHIudmFsdWUpOworCX0KKworCS8qIEtpY2sgdGhlIHJlYWQgY3ljbGUgb2ZmICovCisJZGVsYXkgPSAwOworCisJd3JpdGVsKDB4MSwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCWRvIHsKKwkJdWRlbGF5KDUwKTsKKwkJZGVsYXkrKzsKKwkJbWlpSW5kaWNhdG9yLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfaW5kaWNhdG9yLnZhbHVlKTsKKwl9IHdoaWxlICgobWlpSW5kaWNhdG9yLmJpdHMubm90X3ZhbGlkIHx8IG1paUluZGljYXRvci5iaXRzLmJ1c3kpICYmCisJCSBkZWxheSA8IDUwKTsKKworCS8qIElmIHdlIGhpdCB0aGUgbWF4IGRlbGF5LCB3ZSBjb3VsZCBub3QgcmVhZCB0aGUgcmVnaXN0ZXIgKi8KKwlpZiAoZGVsYXkgPj0gNTApIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgInhjdnJSZWcgMHglMDh4IGNvdWxkIG5vdCBiZSByZWFkXG4iLCB4Y3ZyUmVnKTsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJzdGF0dXMgaXMgIDB4JTA4eFxuIiwKKwkJCSAgICBtaWlJbmRpY2F0b3IudmFsdWUpOworCisJCXN0YXR1cyA9IC1FSU87CisJfQorCisJLyogSWYgd2UgaGl0IGhlcmUgd2Ugd2VyZSBhYmxlIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIGFuZCB3ZSBuZWVkIHRvCisJICogcmV0dXJuIHRoZSB2YWx1ZSB0byB0aGUgY2FsbGVyCisJICovCisJLyogVE9ETzogbWFrZSB0aGlzIHN0dWZmIGEgc2ltcGxlIHJlYWR3KCk/ISAqLworCXsKKwkJTUlJX01HTVRfU1RBVF90IG1paV9tZ210X3N0YXQ7CisKKwkJbWlpX21nbXRfc3RhdC52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X3N0YXQudmFsdWUpOworCQkqdmFsdWUgPSAodWludDE2X3QpIG1paV9tZ210X3N0YXQuYml0cy5waHlfc3RhdDsKKwl9CisKKwkvKiBTdG9wIHRoZSByZWFkIG9wZXJhdGlvbiAqLworCXdyaXRlbCgwLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICIgIHhjdnJfYWRkciA9IDB4JTAyeCwgIgorCQkgICAgInhjdnJfcmVnICA9IDB4JTAyeCwgIgorCQkgICAgInZhbHVlICAgICA9IDB4JTA0eC5cbiIsIHhjdnJBZGRyLCB4Y3ZyUmVnLCAqdmFsdWUpOworCisJLyogc2V0IHRoZSByZWdpc3RlcnMgd2UgdG91Y2hlZCBiYWNrIHRvIHRoZSBzdGF0ZSBhdCB3aGljaCB3ZSBlbnRlcmVkCisJICogdGhpcyBmdW5jdGlvbgorCSAqLworCXdyaXRlbChtaWlBZGRyLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwl3cml0ZWwobWlpQ21kLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBNaVdyaXRlIC0gV3JpdGUgdG8gYSBQSFkgcmVnaXN0ZXIgdGhyb3VnaCB0aGUgTUlJIGludGVyZmFjZSBvZiB0aGUgTUFDCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHhjdnJSZWc6IHRoZSByZWdpc3RlciB0byByZWFkCisgKiBAdmFsdWU6IDE2LWJpdCB2YWx1ZSB0byB3cml0ZQorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IE1pV3JpdGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1aW50OF90IHhjdnJSZWcsIHVpbnQxNl90IHZhbHVlKQoreworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqbWFjID0gJmFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYzsKKwlpbnQgc3RhdHVzID0gMDsKKwl1aW50OF90IHhjdnJBZGRyID0gYWRhcHRlci0+U3RhdHMueGN2cl9hZGRyOworCXVpbnQzMl90IGRlbGF5OworCU1JSV9NR01UX0FERFJfdCBtaWlBZGRyOworCU1JSV9NR01UX0NNRF90IG1paUNtZDsKKwlNSUlfTUdNVF9JTkRJQ0FUT1JfdCBtaWlJbmRpY2F0b3I7CisKKwkvKiBTYXZlIGEgbG9jYWwgY29weSBvZiB0aGUgcmVnaXN0ZXJzIHdlIGFyZSBkZWFsaW5nIHdpdGggc28gd2UgY2FuCisJICogc2V0IHRoZW0gYmFjaworCSAqLworCW1paUFkZHIudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwltaWlDbWQudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJLyogU3RvcCB0aGUgY3VycmVudCBvcGVyYXRpb24gKi8KKwl3cml0ZWwoMCwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCS8qIFNldCB1cCB0aGUgcmVnaXN0ZXIgd2UgbmVlZCB0byB3cml0ZSB0byBvbiB0aGUgY29ycmVjdCBQSFkgKi8KKwl7CisJCU1JSV9NR01UX0FERFJfdCBtaWlfbWdtdF9hZGRyOworCisJCW1paV9tZ210X2FkZHIuYml0cy5waHlfYWRkciA9IHhjdnJBZGRyOworCQltaWlfbWdtdF9hZGRyLmJpdHMucmVnX2FkZHIgPSB4Y3ZyUmVnOworCQl3cml0ZWwobWlpX21nbXRfYWRkci52YWx1ZSwgJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJfQorCisJLyogQWRkIHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXJzIHRvIHRoZSBtYWMgKi8KKwl3cml0ZWwodmFsdWUsICZtYWMtPm1paV9tZ210X2N0cmwudmFsdWUpOworCWRlbGF5ID0gMDsKKworCWRvIHsKKwkJdWRlbGF5KDUwKTsKKwkJZGVsYXkrKzsKKwkJbWlpSW5kaWNhdG9yLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfaW5kaWNhdG9yLnZhbHVlKTsKKwl9IHdoaWxlIChtaWlJbmRpY2F0b3IuYml0cy5idXN5ICYmIGRlbGF5IDwgMTAwKTsKKworCS8qIElmIHdlIGhpdCB0aGUgbWF4IGRlbGF5LCB3ZSBjb3VsZCBub3Qgd3JpdGUgdGhlIHJlZ2lzdGVyICovCisJaWYgKGRlbGF5ID09IDEwMCkgeworCQl1aW50MTZfdCBUZW1wVmFsdWU7CisKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgInhjdnJSZWcgMHglMDh4IGNvdWxkIG5vdCBiZSB3cml0dGVuIiwgeGN2clJlZyk7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAic3RhdHVzIGlzICAweCUwOHhcbiIsCisJCQkgICAgbWlpSW5kaWNhdG9yLnZhbHVlKTsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJjb21tYW5kIGlzICAweCUwOHhcbiIsCisJCQkgICAgcmVhZGwoJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKSk7CisKKwkJTWlSZWFkKGFkYXB0ZXIsIHhjdnJSZWcsICZUZW1wVmFsdWUpOworCisJCXN0YXR1cyA9IC1FSU87CisJfQorCisJLyogU3RvcCB0aGUgd3JpdGUgb3BlcmF0aW9uICovCisJd3JpdGVsKDAsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwkvKiBzZXQgdGhlIHJlZ2lzdGVycyB3ZSB0b3VjaGVkIGJhY2sgdG8gdGhlIHN0YXRlIGF0IHdoaWNoIHdlIGVudGVyZWQKKyAgICAgICAgICogdGhpcyBmdW5jdGlvbgorICAgICAgICAgKi8KKwl3cml0ZWwobWlpQWRkci52YWx1ZSwgJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJd3JpdGVsKG1paUNtZC52YWx1ZSwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiIHhjdnJfYWRkciA9IDB4JTAyeCwgIgorCQkgICAgInhjdnJfcmVnICA9IDB4JTAyeCwgIgorCQkgICAgInZhbHVlICAgICA9IDB4JTA0eC5cbiIsIHhjdnJBZGRyLCB4Y3ZyUmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF94Y3ZyX2ZpbmQgLSBGaW5kIHRoZSBQSFkgSUQKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF94Y3ZyX2ZpbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAtRU5PREVWOworCXVpbnQ4X3QgeGN2cl9hZGRyOworCU1JX0lEUjFfdCBpZHIxOworCU1JX0lEUjJfdCBpZHIyOworCXVpbnQzMl90IHhjdnJfaWQ7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogV2UgbmVlZCB0byBnZXQgeGN2ciBpZCBhbmQgYWRkcmVzcyB3ZSBqdXN0IGdldCB0aGUgZmlyc3Qgb25lICovCisJZm9yICh4Y3ZyX2FkZHIgPSAwOyB4Y3ZyX2FkZHIgPCAzMjsgeGN2cl9hZGRyKyspIHsKKwkJLyogUmVhZCB0aGUgSUQgZnJvbSB0aGUgUEhZICovCisJCVBoeU1pUmVhZChhZGFwdGVyLCB4Y3ZyX2FkZHIsCisJCQkgICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGlkcjEpLAorCQkJICAmaWRyMS52YWx1ZSk7CisJCVBoeU1pUmVhZChhZGFwdGVyLCB4Y3ZyX2FkZHIsCisJCQkgICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGlkcjIpLAorCQkJICAmaWRyMi52YWx1ZSk7CisKKwkJeGN2cl9pZCA9ICh1aW50MzJfdCkgKChpZHIxLnZhbHVlIDw8IDE2KSB8IGlkcjIudmFsdWUpOworCisJCWlmICgoaWRyMS52YWx1ZSAhPSAwKSAmJiAoaWRyMS52YWx1ZSAhPSAweGZmZmYpKSB7CisJCQlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiWGN2ciBhZGRyOiAweCUwMnhcdFhjdnJfaWQ6IDB4JTA4eFxuIiwKKwkJCQkgIHhjdnJfYWRkciwgeGN2cl9pZCk7CisKKwkJCWFkYXB0ZXItPlN0YXRzLnhjdnJfaWQgPSB4Y3ZyX2lkOworCQkJYWRhcHRlci0+U3RhdHMueGN2cl9hZGRyID0geGN2cl9hZGRyOworCisJCQlzdGF0dXMgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3NldHBoeV9ub3JtYWwgLSBTZXQgUEhZIGZvciBub3JtYWwgb3BlcmF0aW9uLgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBVc2VkIGJ5IFBvd2VyIE1hbmFnZW1lbnQgdG8gZm9yY2UgdGhlIFBIWSBpbnRvIDEwIEJhc2UgVCBoYWxmLWR1cGxleCBtb2RlLAorICogd2hlbiBnb2luZyB0byBEMyBpbiBXT0wgbW9kZS4gQWxzbyB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiB0byBzZXQgdGhlCisgKiBQSFkgZm9yIG5vcm1hbCBvcGVyYXRpb24uCisgKi8KK2ludCBldDEzMXhfc2V0cGh5X25vcm1hbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIFBIWSBpcyBwb3dlcmVkIHVwICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihhZGFwdGVyLCAwKTsKKwlzdGF0dXMgPSBldDEzMXhfeGN2cl9pbml0KGFkYXB0ZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF94Y3ZyX2luaXQgLSBJbml0IHRoZSBwaHkgaWYgd2UgYXJlIHNldHRpbmcgaXQgaW50byBmb3JjZSBtb2RlCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK3N0YXRpYyBpbnQgZXQxMzF4X3hjdnJfaW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJTUlfSU1SX3QgaW1yOworCU1JX0lTUl90IGlzcjsKKwlNSV9MQ1IyX3QgbGNyMjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBaZXJvIG91dCB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUgdmFyaWFibGUgcmVwcmVzZW50aW5nIEJNU1IgKi8KKwlhZGFwdGVyLT5CbXNyLnZhbHVlID0gMDsKKworCU1pUmVhZChhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpc3IpLCAmaXNyLnZhbHVlKTsKKworCU1pUmVhZChhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpbXIpLCAmaW1yLnZhbHVlKTsKKworCS8qIFNldCB0aGUgbGluayBzdGF0dXMgaW50ZXJydXB0IG9ubHkuICBCYWQgYmVoYXZpb3Igd2hlbiBsaW5rIHN0YXR1cworCSAqIGFuZCBhdXRvIG5lZyBhcmUgc2V0LCB3ZSBydW4gaW50byBhIG5lc3RlZCBpbnRlcnJ1cHQgcHJvYmxlbQorCSAqLworCWltci5iaXRzLmludF9lbiA9IDB4MTsKKwlpbXIuYml0cy5saW5rX3N0YXR1cyA9IDB4MTsKKwlpbXIuYml0cy5hdXRvbmVnX3N0YXR1cyA9IDB4MTsKKworCU1pV3JpdGUoYWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgaW1yKSwgaW1yLnZhbHVlKTsKKworCS8qIFNldCB0aGUgTEVEIGJlaGF2aW9yIHN1Y2ggdGhhdCBMRUQgMSBpbmRpY2F0ZXMgc3BlZWQgKG9mZiA9CisJICogMTBNYml0cywgYmxpbmsgPSAxMDBNYml0cywgb24gPSAxMDAwTWJpdHMpIGFuZCBMRUQgMiBpbmRpY2F0ZXMKKwkgKiBsaW5rIGFuZCBhY3Rpdml0eSAob24gZm9yIGxpbmssIGJsaW5rIG9mZiBmb3IgYWN0aXZpdHkpLgorCSAqCisJICogTk9URTogU29tZSBjdXN0b21pemF0aW9ucyBoYXZlIGJlZW4gYWRkZWQgaGVyZSBmb3Igc3BlY2lmaWMKKwkgKiB2ZW5kb3JzOyBUaGUgTEVEIGJlaGF2aW9yIGlzIG5vdyBkZXRlcm1pbmVkIGJ5IHZlbmRvciBkYXRhIGluIHRoZQorCSAqIEVFUFJPTS4gSG93ZXZlciwgdGhlIGFib3ZlIGRlc2NyaXB0aW9uIGlzIHRoZSBkZWZhdWx0LgorCSAqLworCWlmICgoYWRhcHRlci0+ZWVwcm9tRGF0YVsxXSAmIDB4NCkgPT0gMCkgeworCQlNaVJlYWQoYWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgbGNyMiksCisJCSAgICAgICAmbGNyMi52YWx1ZSk7CisJCWlmICgoYWRhcHRlci0+ZWVwcm9tRGF0YVsxXSAmIDB4OCkgPT0gMCkKKwkJCWxjcjIuYml0cy5sZWRfdHhfcnggPSAweDM7CisJCWVsc2UKKwkJCWxjcjIuYml0cy5sZWRfdHhfcnggPSAweDQ7CisJCWxjcjIuYml0cy5sZWRfbGluayA9IDB4YTsKKwkJTWlXcml0ZShhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBsY3IyKSwKKwkJCWxjcjIudmFsdWUpOworCX0KKworCS8qIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIGdvIGludG8gYSBmb3JjZSBtb2RlIGFuZCBzZXQgaXQgKi8KKwlpZiAoYWRhcHRlci0+QWlGb3JjZVNwZWVkID09IDAgJiYgYWRhcHRlci0+QWlGb3JjZURweCA9PSAwKSB7CisJCWlmICgoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBUeE9ubHkpIHx8CisJCSAgICAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSkgeworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX1NFVCwgNCwgMTEsIE5VTEwpOworCQl9IGVsc2UgeworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMSwgTlVMTCk7CisJCX0KKworCQlpZiAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfU0VULCA0LCAxMCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDEwLCBOVUxMKTsKKwkJfQorCisJCS8qIFNldCB0aGUgcGh5IHRvIGF1dG9uZWdvdGlhdGlvbiAqLworCQlFVDEzMTBfUGh5QXV0b05lZyhhZGFwdGVyLCB0cnVlKTsKKworCQkvKiBOT1RFIC0gRG8gd2UgbmVlZCB0aGlzPyAqLworCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwgVFJVRVBIWV9CSVRfU0VULCAwLCA5LCBOVUxMKTsKKworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gc3RhdHVzOworCX0gZWxzZSB7CisJCUVUMTMxMF9QaHlBdXRvTmVnKGFkYXB0ZXIsIGZhbHNlKTsKKworCQkvKiBTZXQgdG8gdGhlIGNvcnJlY3QgZm9yY2UgbW9kZS4gKi8KKwkJaWYgKGFkYXB0ZXItPkFpRm9yY2VEcHggIT0gMSkgeworCQkJaWYgKChhZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IFR4T25seSkgfHwKKwkJCSAgICAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSkgeworCQkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkJICAgICAgVFJVRVBIWV9CSVRfU0VULCA0LCAxMSwKKwkJCQkJCSAgICAgIE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMSwKKwkJCQkJCSAgICAgIE5VTEwpOworCQkJfQorCisJCQlpZiAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCQkgICAgICBUUlVFUEhZX0JJVF9TRVQsIDQsIDEwLAorCQkJCQkJICAgICAgTlVMTCk7CisJCQl9IGVsc2UgeworCQkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDEwLAorCQkJCQkJICAgICAgTlVMTCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDEwLCBOVUxMKTsKKwkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkgICAgICBUUlVFUEhZX0JJVF9DTEVBUiwgNCwgMTEsIE5VTEwpOworCQl9CisKKwkJc3dpdGNoIChhZGFwdGVyLT5BaUZvcmNlU3BlZWQpIHsKKwkJY2FzZSAxMDoKKwkJCWlmIChhZGFwdGVyLT5BaUZvcmNlRHB4ID09IDEpIHsKKwkJCQlUUEFMX1NldFBoeTEwSGFsZkR1cGxleChhZGFwdGVyKTsKKwkJCX0gZWxzZSBpZiAoYWRhcHRlci0+QWlGb3JjZURweCA9PSAyKSB7CisJCQkJVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXgoYWRhcHRlcik7CisJCQl9IGVsc2UgeworCQkJCVRQQUxfU2V0UGh5MTBGb3JjZShhZGFwdGVyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDEwMDoKKwkJCWlmIChhZGFwdGVyLT5BaUZvcmNlRHB4ID09IDEpIHsKKwkJCQlUUEFMX1NldFBoeTEwMEhhbGZEdXBsZXgoYWRhcHRlcik7CisJCQl9IGVsc2UgaWYgKGFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMikgeworCQkJCVRQQUxfU2V0UGh5MTAwRnVsbER1cGxleChhZGFwdGVyKTsKKwkJCX0gZWxzZSB7CisJCQkJVFBBTF9TZXRQaHkxMDBGb3JjZShhZGFwdGVyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDEwMDA6CisJCQlUUEFMX1NldFBoeTEwMDBGdWxsRHVwbGV4KGFkYXB0ZXIpOworCQkJYnJlYWs7CisJCX0KKworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gc3RhdHVzOworCX0KK30KKwordm9pZCBldDEzMXhfTWlpX2NoZWNrKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCSAgICAgIE1JX0JNU1JfdCBibXNyLCBNSV9CTVNSX3QgYm1zcl9pbnRzKQoreworCXVpbnQ4X3QgdWNMaW5rU3RhdHVzOworCXVpbnQzMl90IHVpQXV0b05lZ1N0YXR1czsKKwl1aW50MzJfdCB1aVNwZWVkOworCXVpbnQzMl90IHVpRHVwbGV4OworCXVpbnQzMl90IHVpTWRpTWRpeDsKKwl1aW50MzJfdCB1aU1hc3RlclNsYXZlOworCXVpbnQzMl90IHVpUG9sYXJpdHk7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJaWYgKGJtc3JfaW50cy5iaXRzLmxpbmtfc3RhdHVzKSB7CisJCWlmIChibXNyLmJpdHMubGlua19zdGF0dXMpIHsKKwkJCXBBZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCA9IDIwOworCisJCQkvKiBVcGRhdGUgb3VyIHN0YXRlIHZhcmlhYmxlcyBhbmQgaW5kaWNhdGUgdGhlCisJCQkgKiBjb25uZWN0ZWQgc3RhdGUKKwkJCSAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCisJCQlwQWRhcHRlci0+TWVkaWFTdGF0ZSA9IE5FVElGX1NUQVRVU19NRURJQV9DT05ORUNUOworCQkJTVBfQ0xFQVJfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04pOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKworCQkJLyogRG9uJ3QgaW5kaWNhdGUgc3RhdGUgaWYgd2UncmUgaW4gbG9vcGJhY2sgbW9kZSAqLworCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9PSBmYWxzZSkgeworCQkJCW5ldGlmX2NhcnJpZXJfb24ocEFkYXB0ZXItPm5ldGRldik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkxpbmsgZG93biBjYWJsZSBwcm9ibGVtXG4iKTsKKworCQkJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwTUJQUykgeworCQkJCS8vIE5PVEUgLSBJcyB0aGVyZSBhIHdheSB0byBxdWVyeSB0aGlzIHdpdGhvdXQgVHJ1ZVBIWT8KKwkJCQkvLyAmJiBUUlVfUXVlcnlDb3JlVHlwZShwQWRhcHRlci0+aFRydWVQaHksIDApID09IEVNSV9UUlVFUEhZX0ExM08pIHsKKwkJCQl1aW50MTZfdCBSZWdpc3RlcjE4OworCisJCQkJTWlSZWFkKHBBZGFwdGVyLCAweDEyLCAmUmVnaXN0ZXIxOCk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMiwgUmVnaXN0ZXIxOCB8IDB4NCk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMCwgUmVnaXN0ZXIxOCB8IDB4ODQwMik7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMSwgUmVnaXN0ZXIxOCB8IDUxMSk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMiwgUmVnaXN0ZXIxOCk7CisJCQl9CisKKwkJCS8qIEZvciB0aGUgZmlyc3QgTiBzZWNvbmRzIG9mIGxpZmUsIHdlIGFyZSBpbiAibGluaworCQkJICogZGV0ZWN0aW9uIiBXaGVuIHdlIGFyZSBpbiB0aGlzIHN0YXRlLCB3ZSBzaG91bGQKKwkJCSAqIG9ubHkgcmVwb3J0ICJjb25uZWN0ZWQiLiBXaGVuIHRoZSBMaW5rRGV0ZWN0aW9uCisJCQkgKiBUaW1lciBleHBpcmVzLCB3ZSBjYW4gcmVwb3J0IGRpc2Nvbm5lY3RlZCAoaGFuZGxlZAorCQkJICogaW4gdGhlIExpbmtEZXRlY3Rpb25EUEMpLgorCQkJICovCisJCQlpZiAoKE1QX0lTX0ZMQUdfQ0xFQVIKKwkJCSAgICAgKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTikpCisJCQkgICAgfHwgKHBBZGFwdGVyLT5NZWRpYVN0YXRlID09CisJCQkJTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCQkJCXBBZGFwdGVyLT5NZWRpYVN0YXRlID0KKwkJCQkgICAgTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1Q7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPkxvY2ssCisJCQkJCQkgICAgICAgbG9ja2ZsYWdzKTsKKworCQkJCS8qIE9ubHkgaW5kaWNhdGUgc3RhdGUgaWYgd2UncmUgaW4gbG9vcGJhY2sKKwkJCQkgKiBtb2RlCisJCQkJICovCisJCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9PSBmYWxzZSkgeworCQkJCQluZXRpZl9jYXJyaWVyX29mZihwQWRhcHRlci0+bmV0ZGV2KTsKKwkJCQl9CisJCQl9CisKKwkJCXBBZGFwdGVyLT51aUxpbmtTcGVlZCA9IDA7CisJCQlwQWRhcHRlci0+dWlEdXBsZXhNb2RlID0gMDsKKworCQkJLyogRnJlZSB0aGUgcGFja2V0cyBiZWluZyBhY3RpdmVseSBzZW50ICYgc3RvcHBlZCAqLworCQkJZXQxMzF4X2ZyZWVfYnVzeV9zZW5kX3BhY2tldHMocEFkYXB0ZXIpOworCisJCQkvKiBSZS1pbml0aWFsaXplIHRoZSBzZW5kIHN0cnVjdHVyZXMgKi8KKwkJCWV0MTMxeF9pbml0X3NlbmQocEFkYXB0ZXIpOworCisJCQkvKiBSZXNldCB0aGUgUkZEIGxpc3QgYW5kIHJlLXN0YXJ0IFJVICovCisJCQlldDEzMXhfcmVzZXRfcmVjdihwQWRhcHRlcik7CisKKwkJCS8qCisJCQkgKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdG8gdGhlIHN0YXRlIGl0IHdhcyBkdXJpbmcKKwkJCSAqIGluaXQgcHJpb3IgdG8gYXV0b25lZ290aWF0aW9uIGJlaW5nIGNvbXBsZXRlLiBUaGlzCisJCQkgKiB3YXksIHdoZW4gd2UgZ2V0IHRoZSBhdXRvLW5lZyBjb21wbGV0ZSBpbnRlcnJ1cHQsCisJCQkgKiB3ZSBjYW4gY29tcGxldGUgaW5pdCBieSBjYWxsaW5nIENvbmZpZ01hY1JFR1MyLgorCQkJICovCisJCQlldDEzMXhfc29mdF9yZXNldChwQWRhcHRlcik7CisKKwkJCS8qIFNldHVwIEVUMTMxMCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gKi8KKwkJCWV0MTMxeF9hZGFwdGVyX3NldHVwKHBBZGFwdGVyKTsKKworCQkJLyogU2V0dXAgdGhlIFBIWSBpbnRvIGNvbWEgbW9kZSB1bnRpbCB0aGUgY2FibGUgaXMKKwkJCSAqIHBsdWdnZWQgYmFjayBpbgorCQkJICovCisJCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5Q29tYSA9PSAxKSB7CisJCQkJRW5hYmxlUGh5Q29tYShwQWRhcHRlcik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYm1zcl9pbnRzLmJpdHMuYXV0b19uZWdfY29tcGxldGUgfHwKKwkgICAgKChwQWRhcHRlci0+QWlGb3JjZURweCA9PSAzKSAmJiAoYm1zcl9pbnRzLmJpdHMubGlua19zdGF0dXMpKSkgeworCQlpZiAoYm1zci5iaXRzLmF1dG9fbmVnX2NvbXBsZXRlIHx8IChwQWRhcHRlci0+QWlGb3JjZURweCA9PSAzKSkgeworCQkJRVQxMzEwX1BoeUxpbmtTdGF0dXMocEFkYXB0ZXIsCisJCQkJCSAgICAgJnVjTGlua1N0YXR1cywgJnVpQXV0b05lZ1N0YXR1cywKKwkJCQkJICAgICAmdWlTcGVlZCwgJnVpRHVwbGV4LCAmdWlNZGlNZGl4LAorCQkJCQkgICAgICZ1aU1hc3RlclNsYXZlLCAmdWlQb2xhcml0eSk7CisKKwkJCXBBZGFwdGVyLT51aUxpbmtTcGVlZCA9IHVpU3BlZWQ7CisJCQlwQWRhcHRlci0+dWlEdXBsZXhNb2RlID0gdWlEdXBsZXg7CisKKwkJCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICJwQWRhcHRlci0+dWlMaW5rU3BlZWQgMHglMDR4LCBwQWRhcHRlci0+dWlEdXBsZXggMHglMDh4XG4iLAorCQkJCSAgcEFkYXB0ZXItPnVpTGlua1NwZWVkLAorCQkJCSAgcEFkYXB0ZXItPnVpRHVwbGV4TW9kZSk7CisKKwkJCXBBZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCA9IDIwOworCisJCQlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTBNQlBTKSB7CisJCQkJLy8gTk9URSAtIElzIHRoZXJlIGEgd2F5IHRvIHF1ZXJ5IHRoaXMgd2l0aG91dCBUcnVlUEhZPworCQkJCS8vICYmIFRSVV9RdWVyeUNvcmVUeXBlKHBBZGFwdGVyLT5oVHJ1ZVBoeSwgMCkgPT0gRU1JX1RSVUVQSFlfQTEzTykgeworCQkJCXVpbnQxNl90IFJlZ2lzdGVyMTg7CisKKwkJCQlNaVJlYWQocEFkYXB0ZXIsIDB4MTIsICZSZWdpc3RlcjE4KTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEyLCBSZWdpc3RlcjE4IHwgMHg0KTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEwLCBSZWdpc3RlcjE4IHwgMHg4NDAyKTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDExLCBSZWdpc3RlcjE4IHwgNTExKTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEyLCBSZWdpc3RlcjE4KTsKKwkJCX0KKworCQkJQ29uZmlnRmxvd0NvbnRyb2wocEFkYXB0ZXIpOworCisJCQlpZiAoKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSAmJgorCQkJICAgIChwQWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA+IDIwNDgpKQorCQkJeworCQkJCUVUMTMxMF9QaHlBbmRPclJlZyhwQWRhcHRlciwgMHgxNiwgMHhjZmZmLAorCQkJCQkJICAgMHgyMDAwKTsKKwkJCX0KKworCQkJU2V0UnhEbWFUaW1lcihwQWRhcHRlcik7CisJCQlDb25maWdNQUNSZWdzMihwQWRhcHRlcik7CisJCX0KKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTBIYWxmRHVwbGV4IC0gRm9yY2UgdGhlIHBoeSBpbnRvIDEwIEJhc2UgVCBIYWxmIER1cGxleCBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEFsc28gc2V0cyB0aGUgTUFDIHNvIGl0IGlzIHN5bmNkIHVwIHByb3Blcmx5CisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIEZpcnN0IHdlIG5lZWQgdG8gdHVybiBvZmYgYWxsIG90aGVyIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIFNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRik7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXggLSBGb3JjZSB0aGUgcGh5IGludG8gMTAgQmFzZSBUIEZ1bGwgRHVwbGV4IG1vZGUuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogQWxzbyBzZXRzIHRoZSBNQUMgc28gaXQgaXMgc3luY2QgdXAgcHJvcGVybHkKKyAqLwordm9pZCBUUEFMX1NldFBoeTEwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogRmlyc3Qgd2UgbmVlZCB0byB0dXJuIG9mZiBhbGwgb3RoZXIgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogU2V0IG91ciBhZHZlcnRpc2UgdmFsdWVzIGFjY29yZGluZ2x5ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwRm9yY2UgLSBGb3JjZSBCYXNlLVQgRkQgbW9kZSBXSVRIT1VUIHVzaW5nIGF1dG9uZWdvdGlhdGlvbgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFRQQUxfU2V0UGh5MTBGb3JjZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogRGlzYWJsZSBhdXRvbmVnICovCisJRVQxMzEwX1BoeUF1dG9OZWcocEFkYXB0ZXIsIGZhbHNlKTsKKworCS8qIERpc2FibGUgYWxsIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIEZvcmNlIDEwIE1icHMgKi8KKwlFVDEzMTBfUGh5U3BlZWRTZWxlY3QocEFkYXB0ZXIsIFRSVUVQSFlfU1BFRURfMTBNQlBTKTsKKworCS8qIEZvcmNlIEZ1bGwgZHVwbGV4ICovCisJRVQxMzEwX1BoeUR1cGxleE1vZGUocEFkYXB0ZXIsIFRSVUVQSFlfRFVQTEVYX0ZVTEwpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTAwSGFsZkR1cGxleCAtIEZvcmNlIDEwMCBCYXNlIFQgSGFsZiBEdXBsZXggbW9kZS4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBBbHNvIHNldHMgdGhlIE1BQyBzbyBpdCBpcyBzeW5jZCB1cCBwcm9wZXJseS4KKyAqLwordm9pZCBUUEFMX1NldFBoeTEwMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIGZpcnN0IHdlIG5lZWQgdG8gdHVybiBvZmYgYWxsIG90aGVyIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogU2V0IG91ciBhZHZlcnRpc2UgdmFsdWVzIGFjY29yZGluZ2x5ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRik7CisKKwkvKiBTZXQgc3BlZWQgKi8KKwlFVDEzMTBfUGh5U3BlZWRTZWxlY3QocEFkYXB0ZXIsIFRSVUVQSFlfU1BFRURfMTAwTUJQUyk7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4IC0gRm9yY2UgMTAwIEJhc2UgVCBGdWxsIER1cGxleCBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEFsc28gc2V0cyB0aGUgTUFDIHNvIGl0IGlzIHN5bmNkIHVwIHByb3Blcmx5CisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBGaXJzdCB3ZSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBvdGhlciBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIFNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTAwRm9yY2UgLSBGb3JjZSAxMDAgQmFzZVQgRkQgbW9kZSBXSVRIT1VUIHVzaW5nIGF1dG9uZWdvdGlhdGlvbgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFRQQUxfU2V0UGh5MTAwRm9yY2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIERpc2FibGUgYXV0b25lZyAqLworCUVUMTMxMF9QaHlBdXRvTmVnKHBBZGFwdGVyLCBmYWxzZSk7CisKKwkvKiBEaXNhYmxlIGFsbCBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBGb3JjZSAxMDAgTWJwcyAqLworCUVUMTMxMF9QaHlTcGVlZFNlbGVjdChwQWRhcHRlciwgVFJVRVBIWV9TUEVFRF8xMDBNQlBTKTsKKworCS8qIEZvcmNlIEZ1bGwgZHVwbGV4ICovCisJRVQxMzEwX1BoeUR1cGxleE1vZGUocEFkYXB0ZXIsIFRSVUVQSFlfRFVQTEVYX0ZVTEwpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTAwMEZ1bGxEdXBsZXggLSBGb3JjZSAxMDAwIEJhc2UgVCBGdWxsIER1cGxleCBtb2RlCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogQWxzbyBzZXRzIHRoZSBNQUMgc28gaXQgaXMgc3luY2QgdXAgcHJvcGVybHkuCisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMDAwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogZmlyc3Qgd2UgbmVlZCB0byB0dXJuIG9mZiBhbGwgb3RoZXIgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIHNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMKTsKKworCS8qIHBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeUF1dG9OZWcgLSBTZXQgcGh5IHRvIGF1dG9uZWdvdGlhdGlvbiBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFRQQUxfU2V0UGh5QXV0b05lZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogVHVybiBvbiBhZHZlcnRpc2VtZW50IG9mIGFsbCBjYXBhYmlsaXRpZXMgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0JPVEgpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USCk7CisKKwlpZiAocEFkYXB0ZXItPkRldmljZUlEICE9IEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QpIHsKKwkJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwpOworCX0gZWxzZSB7CisJCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgYXV0by1uZWcgaXMgT04gKGl0IGlzIGRpc2FibGVkIGluIEZPUkNFIG1vZGVzKSAqLworCUVUMTMxMF9QaHlBdXRvTmVnKHBBZGFwdGVyLCB0cnVlKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworCisvKgorICogVGhlIHJvdXRpbmVzIHdoaWNoIGZvbGxvdyBwcm92aWRlIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdGhlIFBIWSwgYW5kIGFyZSB1c2VkCisgKiBwcmltYXJpbHkgYnkgdGhlIHJvdXRpbmVzIGFib3ZlIChhbHRob3VnaCB0aGVyZSBhcmUgYSBmZXcgcGxhY2VzIGVsc2V3aGVyZQorICogaW4gdGhlIGRyaXZlciB3aGVyZSB0aGlzIGxldmVsIG9mIGFjY2VzcyBpcyByZXF1aXJlZCkuCisgKi8KKworc3RhdGljIGNvbnN0IHVpbnQxNl90IENvbmZpZ1BoeVsyNV1bMl0gPSB7CisJLyogUmVnICAgICAgVmFsdWUgICAgICBSZWdpc3RlciAqLworCS8qIEFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7MHg4ODBCLCAweDA5MjZ9LAkvKiBBZmVJZkNyZWc0QjEwMDBNc2JzICovCisJezB4ODgwQywgMHgwOTI2fSwJLyogQWZlSWZDcmVnNEIxMDBNc2JzICovCisJezB4ODgwRCwgMHgwOTI2fSwJLyogQWZlSWZDcmVnNEIxME1zYnMgKi8KKworCXsweDg4MEUsIDB4QjREM30sCS8qIEFmZUlmQ3JlZzRCMTAwMExzYnMgKi8KKwl7MHg4ODBGLCAweEI0RDN9LAkvKiBBZmVJZkNyZWc0QjEwMExzYnMgKi8KKwl7MHg4ODEwLCAweEI0RDN9LAkvKiBBZmVJZkNyZWc0QjEwTHNicyAqLworCisJezB4ODgwNSwgMHhCMDNFfSwJLyogQWZlSWZDcmVnM0IxMDAwTXNicyAqLworCXsweDg4MDYsIDB4QjAzRX0sCS8qIEFmZUlmQ3JlZzNCMTAwTXNicyAqLworCXsweDg4MDcsIDB4RkYwMH0sCS8qIEFmZUlmQ3JlZzNCMTBNc2JzICovCisKKwl7MHg4ODA4LCAweEUwOTB9LAkvKiBBZmVJZkNyZWczQjEwMDBMc2JzICovCisJezB4ODgwOSwgMHhFMTEwfSwJLyogQWZlSWZDcmVnM0IxMDBMc2JzICovCisJezB4ODgwQSwgMHgwMDAwfSwJLyogQWZlSWZDcmVnM0IxMExzYnMgKi8KKworCXsweDMwMEQsIDF9LAkJLyogRGlzYWJsZU5vcm0gKi8KKworCXsweDI4MEMsIDB4MDE4MH0sCS8qIExpbmtIb2xkRW5kICovCisKKwl7MHgxQzIxLCAweDAwMDJ9LAkvKiBBbHBoYU0gKi8KKworCXsweDM4MjEsIDZ9LAkJLyogRmZlTGtnVHgwICovCisJezB4MzgxRCwgMX0sCQkvKiBGZmVMa2cxZzQgKi8KKwl7MHgzODFFLCAxfSwJCS8qIEZmZUxrZzFnNSAqLworCXsweDM4MUYsIDF9LAkJLyogRmZlTGtnMWc2ICovCisJezB4MzgyMCwgMX0sCQkvKiBGZmVMa2cxZzcgKi8KKworCXsweDg0MDIsIDB4MDFGMH0sCS8qIEJ0aW5hY3QgKi8KKwl7MHg4MDBFLCAyMH0sCQkvKiBMZnRyYWluVGltZSAqLworCXsweDgwMEYsIDI0fSwJCS8qIER2Z3VhcmRUaW1lICovCisJezB4ODAxMCwgNDZ9LAkJLyogSWRsZ3VhcmRUaW1lICovCisKKwl7MCwgMH0KKworfTsKKworLyogY29uZGVuc2VkIHZlcnNpb24gb2YgdGhlIHBoeSBpbml0aWFsaXphdGlvbiByb3V0aW5lICovCit2b2lkIEVUMTMxMF9QaHlJbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdWludDE2X3QgdXNEYXRhLCB1c0luZGV4OworCisJaWYgKHBBZGFwdGVyID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCS8vIGdldCB0aGUgaWRlbnRpdHkgKGFnYWluID8pCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfSURfMSwgJnVzRGF0YSk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfSURfMiwgJnVzRGF0YSk7CisKKwkvLyB3aGF0IGRvZXMgdGhpcyBkby9hY2hpZXZlID8KKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAmdXNEYXRhKTsJLy8gc2hvdWxkIHJlYWQgMDAwMgorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLAkweDAwMDYpOworCisJLy8gcmVhZCBtb2RlbSByZWdpc3RlciAwNDAyLCBzaG91bGQgSSBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmV0dXJuIGRhdGEgPworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9JTkRFWF9SRUcsIDB4MDQwMik7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfREFUQV9SRUcsICZ1c0RhdGEpOworCisJLy8gd2hhdCBkb2VzIHRoaXMgZG8vYWNoaWV2ZSA/CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwMik7CisKKwkvLyBnZXQgdGhlIGlkZW50aXR5IChhZ2FpbiA/KQorCU1pUmVhZChwQWRhcHRlciwgUEhZX0lEXzEsICZ1c0RhdGEpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX0lEXzIsICZ1c0RhdGEpOworCisJLy8gd2hhdCBkb2VzIHRoaXMgYWNoaWV2ZSA/CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgJnVzRGF0YSk7CS8vIHNob3VsZCByZWFkIDAwMDIKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgMHgwMDA2KTsKKworCS8vIHJlYWQgbW9kZW0gcmVnaXN0ZXIgMDQwMiwgc2hvdWxkIEkgZG8gc29tZXRoaW5nIHdpdGggdGhlIHJldHVybiBkYXRhPworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9JTkRFWF9SRUcsIDB4MDQwMik7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfREFUQV9SRUcsICZ1c0RhdGEpOworCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwMik7CisKKwkvLyB3aGF0IGRvZXMgdGhpcyBhY2hpZXZlIChzaG91bGQgcmV0dXJuIDB4MTA0MCkKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAmdXNEYXRhKTsJLy8gc2hvdWxkIHJlYWQgMDAwMgorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAweDE4NDApOworCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwNyk7CisKKwkvLyBoZXJlIHRoZSB3cml0aW5nIG9mIHRoZSBhcnJheSBzdGFydHMuLi4uCisJdXNJbmRleCA9IDA7CisJd2hpbGUgKENvbmZpZ1BoeVt1c0luZGV4XVswXSAhPSAweDAwMDApIHsKKwkJLy8gd3JpdGUgdmFsdWUKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0lOREVYX1JFRywgQ29uZmlnUGh5W3VzSW5kZXhdWzBdKTsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0RBVEFfUkVHLCBDb25maWdQaHlbdXNJbmRleF1bMV0pOworCisJCS8vIHJlYWQgaXQgYmFjaworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfSU5ERVhfUkVHLCBDb25maWdQaHlbdXNJbmRleF1bMF0pOworCQlNaVJlYWQocEFkYXB0ZXIsIFBIWV9EQVRBX1JFRywgJnVzRGF0YSk7CisKKwkJLy8gZG8gYSBjaGVjayBvbiB0aGUgdmFsdWUgcmVhZCBiYWNrID8KKwkJdXNJbmRleCsrOworCX0KKwkvLyBoZXJlIHRoZSB3cml0aW5nIG9mIHRoZSBhcnJheSBlbmRzLi4uCisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsJLy8gMHgxODQwCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgJnVzRGF0YSk7CS8vIHNob3VsZCByZWFkIDAwMDcKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgMHgxMDQwKTsKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgMHgwMDAyKTsKK30KKwordm9pZCBFVDEzMTBfUGh5UmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgMHg4MDAwKTsKK30KKwordm9pZCBFVDEzMTBfUGh5UG93ZXJEb3duKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIGJvb2wgZG93bikKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKworCWlmIChkb3duID09IGZhbHNlKSB7CisJCS8vIFBvd2VyIFVQCisJCXVzRGF0YSAmPSB+MHgwODAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9IGVsc2UgeworCQkvLyBQb3dlciBET1dOCisJCXVzRGF0YSB8PSAweDA4MDA7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworCX0KK30KKwordm9pZCBFVDEzMTBfUGh5QXV0b05lZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBib29sIGVuYWJsZSkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKworCWlmIChlbmFibGUgPT0gdHJ1ZSkgeworCQkvLyBBdXRvbmVnb3RpYXRpb24gT04KKwkJdXNEYXRhIHw9IDB4MTAwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfSBlbHNlIHsKKwkJLy8gQXV0b25lZ290aWF0aW9uIE9GRgorCQl1c0RhdGEgJj0gfjB4MTAwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfQorfQorCit2b2lkIEVUMTMxMF9QaHlEdXBsZXhNb2RlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIHVpbnQxNl90IGR1cGxleCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKworCWlmIChkdXBsZXggPT0gVFJVRVBIWV9EVVBMRVhfRlVMTCkgeworCQkvLyBTZXQgRnVsbCBEdXBsZXgKKwkJdXNEYXRhIHw9IDB4MTAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9IGVsc2UgeworCQkvLyBTZXQgSGFsZiBEdXBsZXgKKwkJdXNEYXRhICY9IH4weDEwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfQorfQorCit2b2lkIEVUMTMxMF9QaHlTcGVlZFNlbGVjdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCB1aW50MTZfdCBzcGVlZCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwkvLyBSZWFkIHRoZSBQSFkgY29udHJvbCByZWdpc3RlcgorCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0RhdGEpOworCisJLy8gQ2xlYXIgYWxsIFNwZWVkIHNldHRpbmdzIChCaXRzIDYsIDEzKQorCXVzRGF0YSAmPSB+MHgyMDQwOworCisJLy8gUmVzZXQgdGhlIHNwZWVkIGJpdHMgYmFzZWQgb24gdXNlciBzZWxlY3Rpb24KKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBUUlVFUEhZX1NQRUVEXzEwTUJQUzoKKwkJLy8gQml0cyBhbHJlYWR5IGNsZWFyZWQgYWJvdmUsIGRvIG5vdGhpbmcKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfU1BFRURfMTAwTUJQUzoKKwkJLy8gMTAwTSA9PSBTZXQgYml0IDEzCisJCXVzRGF0YSB8PSAweDIwMDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTOgorCWRlZmF1bHQ6CisJCXVzRGF0YSB8PSAweDAwNDA7CisJCWJyZWFrOworCX0KKworCS8vIFdyaXRlIGJhY2sgdGhlIG5ldyBzcGVlZAorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworfQorCit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCQkgIHVpbnQxNl90IGR1cGxleCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwkvLyBSZWFkIHRoZSBQSFkgMTAwMCBCYXNlLVQgQ29udHJvbCBSZWdpc3RlcgorCU1pUmVhZChwQWRhcHRlciwgUEhZXzEwMDBfQ09OVFJPTCwgJnVzRGF0YSk7CisKKwkvLyBDbGVhciBCaXRzIDgsOQorCXVzRGF0YSAmPSB+MHgwMzAwOworCisJc3dpdGNoIChkdXBsZXgpIHsKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9OT05FOgorCQkvLyBEdXBsZXggYWxyZWFkeSBjbGVhcmVkLCBkbyBub3RoaW5nCisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTDoKKwkJLy8gU2V0IEJpdCA5CisJCXVzRGF0YSB8PSAweDAyMDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRjoKKwkJLy8gU2V0IEJpdCA4CisJCXVzRGF0YSB8PSAweDAxMDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USDoKKwlkZWZhdWx0OgorCQl1c0RhdGEgfD0gMHgwMzAwOworCQlicmVhazsKKwl9CisKKwkvLyBXcml0ZSBiYWNrIGFkdmVydGlzZW1lbnQKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfMTAwMF9DT05UUk9MLCB1c0RhdGEpOworfQorCit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJCSB1aW50MTZfdCBkdXBsZXgpCit7CisJdWludDE2X3QgdXNEYXRhOworCisJLy8gUmVhZCB0aGUgQXV0b25lZ290aWF0aW9uIFJlZ2lzdGVyICgxMC8xMDApCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQVVUT19BRFZFUlRJU0VNRU5ULCAmdXNEYXRhKTsKKworCS8vIENsZWFyIGJpdHMgNyw4CisJdXNEYXRhICY9IH4weDAxODA7CisKKwlzd2l0Y2ggKGR1cGxleCkgeworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkU6CisJCS8vIER1cGxleCBhbHJlYWR5IGNsZWFyZWQsIGRvIG5vdGhpbmcKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMOgorCQkvLyBTZXQgQml0IDgKKwkJdXNEYXRhIHw9IDB4MDEwMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGOgorCQkvLyBTZXQgQml0IDcKKwkJdXNEYXRhIHw9IDB4MDA4MDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIOgorCWRlZmF1bHQ6CisJCS8vIFNldCBCaXRzIDcsOAorCQl1c0RhdGEgfD0gMHgwMTgwOworCQlicmVhazsKKwl9CisKKwkvLyBXcml0ZSBiYWNrIGFkdmVydGlzZW1lbnQKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQVVUT19BRFZFUlRJU0VNRU5ULCB1c0RhdGEpOworfQorCit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCQkJdWludDE2X3QgZHVwbGV4KQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCS8vIFJlYWQgdGhlIEF1dG9uZWdvdGlhdGlvbiBSZWdpc3RlciAoMTAvMTAwKQorCU1pUmVhZChwQWRhcHRlciwgUEhZX0FVVE9fQURWRVJUSVNFTUVOVCwgJnVzRGF0YSk7CisKKwkvLyBDbGVhciBiaXRzIDUsNgorCXVzRGF0YSAmPSB+MHgwMDYwOworCisJc3dpdGNoIChkdXBsZXgpIHsKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9OT05FOgorCQkvLyBEdXBsZXggYWxyZWFkeSBjbGVhcmVkLCBkbyBub3RoaW5nCisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTDoKKwkJLy8gU2V0IEJpdCA2CisJCXVzRGF0YSB8PSAweDAwNDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRjoKKwkJLy8gU2V0IEJpdCA1CisJCXVzRGF0YSB8PSAweDAwMjA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USDoKKwlkZWZhdWx0OgorCQkvLyBTZXQgQml0cyA1LDYKKwkJdXNEYXRhIHw9IDB4MDA2MDsKKwkJYnJlYWs7CisJfQorCisJLy8gV3JpdGUgYmFjayBhZHZlcnRpc2VtZW50CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0FVVE9fQURWRVJUSVNFTUVOVCwgdXNEYXRhKTsKK30KKwordm9pZCBFVDEzMTBfUGh5TGlua1N0YXR1cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJICB1aW50OF90ICp1Y0xpbmtTdGF0dXMsCisJCQkgIHVpbnQzMl90ICp1aUF1dG9OZWcsCisJCQkgIHVpbnQzMl90ICp1aUxpbmtTcGVlZCwKKwkJCSAgdWludDMyX3QgKnVpRHVwbGV4TW9kZSwKKwkJCSAgdWludDMyX3QgKnVpTWRpTWRpeCwKKwkJCSAgdWludDMyX3QgKnVpTWFzdGVyU2xhdmUsIHVpbnQzMl90ICp1aVBvbGFyaXR5KQoreworCXVpbnQxNl90IHVzTWlTdGF0dXMgPSAwOworCXVpbnQxNl90IHVzMTAwMEJhc2VUID0gMDsKKwl1aW50MTZfdCB1c1ZtaVBoeVN0YXR1cyA9IDA7CisJdWludDE2X3QgdXNDb250cm9sID0gMDsKKworCU1pUmVhZChwQWRhcHRlciwgUEhZX1NUQVRVUywgJnVzTWlTdGF0dXMpOworCU1pUmVhZChwQWRhcHRlciwgUEhZXzEwMDBfU1RBVFVTLCAmdXMxMDAwQmFzZVQpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX1BIWV9TVEFUVVMsICZ1c1ZtaVBoeVN0YXR1cyk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzQ29udHJvbCk7CisKKwlpZiAodWNMaW5rU3RhdHVzKSB7CisJCSp1Y0xpbmtTdGF0dXMgPQorCQkgICAgKHVuc2lnbmVkIGNoYXIpKCh1c1ZtaVBoeVN0YXR1cyAmIDB4MDA0MCkgPyAxIDogMCk7CisJfQorCisJaWYgKHVpQXV0b05lZykgeworCQkqdWlBdXRvTmVnID0KKwkJICAgICh1c0NvbnRyb2wgJiAweDEwMDApID8gKCh1c1ZtaVBoeVN0YXR1cyAmIDB4MDAyMCkgPworCQkJCQkgICAgVFJVRVBIWV9BTkVHX0NPTVBMRVRFIDoKKwkJCQkJICAgIFRSVUVQSFlfQU5FR19OT1RfQ09NUExFVEUpIDoKKwkJICAgIFRSVUVQSFlfQU5FR19ESVNBQkxFRDsKKwl9CisKKwlpZiAodWlMaW5rU3BlZWQpIHsKKwkJKnVpTGlua1NwZWVkID0gKHVzVm1pUGh5U3RhdHVzICYgMHgwMzAwKSA+PiA4OworCX0KKworCWlmICh1aUR1cGxleE1vZGUpIHsKKwkJKnVpRHVwbGV4TW9kZSA9ICh1c1ZtaVBoeVN0YXR1cyAmIDB4MDA4MCkgPj4gNzsKKwl9CisKKwlpZiAodWlNZGlNZGl4KSB7CisJCS8qIE5PVEU6IE5lZWQgdG8gY29tcGxldGUgdGhpcyAqLworCQkqdWlNZGlNZGl4ID0gMDsKKwl9CisKKwlpZiAodWlNYXN0ZXJTbGF2ZSkgeworCQkqdWlNYXN0ZXJTbGF2ZSA9CisJCSAgICAodXMxMDAwQmFzZVQgJiAweDQwMDApID8gVFJVRVBIWV9DRkdfTUFTVEVSIDoKKwkJICAgIFRSVUVQSFlfQ0ZHX1NMQVZFOworCX0KKworCWlmICh1aVBvbGFyaXR5KSB7CisJCSp1aVBvbGFyaXR5ID0KKwkJICAgICh1c1ZtaVBoeVN0YXR1cyAmIDB4MDQwMCkgPyBUUlVFUEhZX1BPTEFSSVRZX0lOVkVSVEVEIDoKKwkJICAgIFRSVUVQSFlfUE9MQVJJVFlfTk9STUFMOworCX0KK30KKwordm9pZCBFVDEzMTBfUGh5QW5kT3JSZWcoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCXVpbnQxNl90IHJlZ251bSwgdWludDE2X3QgYW5kTWFzaywgdWludDE2X3Qgb3JNYXNrKQoreworCXVpbnQxNl90IHJlZzsKKworCS8vIFJlYWQgdGhlIHJlcXVlc3RlZCByZWdpc3RlcgorCU1pUmVhZChwQWRhcHRlciwgcmVnbnVtLCAmcmVnKTsKKworCS8vIEFwcGx5IHRoZSBBTkQgbWFzaworCXJlZyAmPSBhbmRNYXNrOworCisJLy8gQXBwbHkgdGhlIE9SIG1hc2sKKwlyZWcgfD0gb3JNYXNrOworCisJLy8gV3JpdGUgdGhlIHZhbHVlIGJhY2sgdG8gdGhlIHJlZ2lzdGVyCisJTWlXcml0ZShwQWRhcHRlciwgcmVnbnVtLCByZWcpOworfQorCit2b2lkIEVUMTMxMF9QaHlBY2Nlc3NNaUJpdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCB1aW50MTZfdCBhY3Rpb24sCisJCQkgICB1aW50MTZfdCByZWdudW0sIHVpbnQxNl90IGJpdG51bSwgdWludDhfdCAqdmFsdWUpCit7CisJdWludDE2X3QgcmVnOworCXVpbnQxNl90IG1hc2sgPSAwOworCisJLy8gQ3JlYXRlIGEgbWFzayB0byBpc29sYXRlIHRoZSByZXF1ZXN0ZWQgYml0CisJbWFzayA9IDB4MDAwMSA8PCBiaXRudW07CisKKwkvLyBSZWFkIHRoZSByZXF1ZXN0ZWQgcmVnaXN0ZXIKKwlNaVJlYWQocEFkYXB0ZXIsIHJlZ251bSwgJnJlZyk7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgVFJVRVBIWV9CSVRfUkVBRDoKKwkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCSp2YWx1ZSA9IChyZWcgJiBtYXNrKSA+PiBiaXRudW07CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQklUX1NFVDoKKwkJcmVnIHw9IG1hc2s7CisJCU1pV3JpdGUocEFkYXB0ZXIsIHJlZ251bSwgcmVnKTsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQklUX0NMRUFSOgorCQlyZWcgJj0gfm1hc2s7CisJCU1pV3JpdGUocEFkYXB0ZXIsIHJlZ251bSwgcmVnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjRjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaApAQCAtMCwwICsxLDkxMCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcGh5LmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHRoZQorICogICAgICAgICAgICAgICAgUEhZLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9FVDEzMTBfUEhZX0hfCisjZGVmaW5lIF9FVDEzMTBfUEhZX0hfCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKworI2RlZmluZSBUUlVFUEhZX1NVQ0NFU1MgMAorI2RlZmluZSBUUlVFUEhZX0ZBSUxVUkUgMQordHlwZWRlZiB2b2lkICpUUlVFUEhZX0hBTkRMRTsKK3R5cGVkZWYgdm9pZCAqVFJVRVBIWV9QTEFURk9STV9IQU5ETEU7Cit0eXBlZGVmIHZvaWQgKlRSVUVQSFlfT1NBTF9IQU5ETEU7CisKKy8qIE1JIFJlZ2lzdGVyIEFkZHJlc3NlcyAqLworI2RlZmluZSBNSV9DT05UUk9MX1JFRyAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JX1NUQVRVU19SRUcgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUlfUEhZX0lERU5USUZJRVJfMV9SRUcgICAgICAgICAgICAgMgorI2RlZmluZSBNSV9QSFlfSURFTlRJRklFUl8yX1JFRyAgICAgICAgICAgICAzCisjZGVmaW5lIE1JX0FVVE9ORUdfQURWRVJUSVNFTUVOVF9SRUcgICAgICAgIDQKKyNkZWZpbmUgTUlfQVVUT05FR19MSU5LX1BBUlRORVJfQUJJTElUWV9SRUcgNQorI2RlZmluZSBNSV9BVVRPTkVHX0VYUEFOU0lPTl9SRUcgICAgICAgICAgICA2CisjZGVmaW5lIE1JX0FVVE9ORUdfTkVYVF9QQUdFX1RSQU5TTUlUX1JFRyAgIDcKKyNkZWZpbmUgTUlfTElOS19QQVJUTkVSX05FWFRfUEFHRV9SRUcgICAgICAgOAorI2RlZmluZSBNSV8xMDAwQkFTRVRfQ09OVFJPTF9SRUcgICAgICAgICAgICA5CisjZGVmaW5lIE1JXzEwMDBCQVNFVF9TVEFUVVNfUkVHICAgICAgICAgICAgIDEwCisjZGVmaW5lIE1JX1JFU0VSVkVEMTFfUkVHICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIE1JX1JFU0VSVkVEMTJfUkVHICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1JX1JFU0VSVkVEMTNfUkVHICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIE1JX1JFU0VSVkVEMTRfUkVHICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIE1JX0VYVEVOREVEX1NUQVRVU19SRUcgICAgICAgICAgICAgIDE1CisKKy8qIFZNSSBSZWdpc3RlciBBZGRyZXNzZXMgKi8KKyNkZWZpbmUgVk1JX1JFU0VSVkVEMTZfUkVHICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMTdfUkVHICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMThfUkVHICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgVk1JX0xPT1BCQUNLX0NPTlRST0xfUkVHICAgICAgICAgICAgMTkKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMjBfUkVHICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgVk1JX01JX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgVk1JX1BIWV9DT05GSUdVUkFUSU9OX1JFRyAgICAgICAgICAgMjIKKyNkZWZpbmUgVk1JX1BIWV9DT05UUk9MX1JFRyAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgVk1JX0lOVEVSUlVQVF9NQVNLX1JFRyAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgVk1JX0lOVEVSUlVQVF9TVEFUVVNfUkVHICAgICAgICAgICAgMjUKKyNkZWZpbmUgVk1JX1BIWV9TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgVk1JX0xFRF9DT05UUk9MXzFfUkVHICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgVk1JX0xFRF9DT05UUk9MXzJfUkVHICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMjlfUkVHICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMzBfUkVHICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMzFfUkVHICAgICAgICAgICAgICAgICAgMzEKKworLyogUEhZIFJlZ2lzdGVyIE1hcHBpbmcoTUkpIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFJlZ3MgKi8KK3R5cGVkZWYgc3RydWN0IF9NSV9SRUdTX3QgeworCXU4IGJtY3I7CQkvLyBCYXNpYyBtb2RlIGNvbnRyb2wgcmVnKFJlZyAweDAwKQorCXU4IGJtc3I7CQkvLyBCYXNpYyBtb2RlIHN0YXR1cyByZWcoUmVnIDB4MDEpCisJdTggaWRyMTsJCS8vIFBoeSBpZGVudGlmaWVyIHJlZyAxKFJlZyAweDAyKQorCXU4IGlkcjI7CQkvLyBQaHkgaWRlbnRpZmllciByZWcgMihSZWcgMHgwMykKKwl1OCBhbmFyOwkJLy8gQXV0by1OZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50KFJlZyAweDA0KQorCXU4IGFubHBhcjsJCS8vIEF1dG8tTmVnb3RpYXRpb24gbGluayBQYXJ0bmVyIEFiaWxpdHkoUmVnIDB4MDUpCisJdTggYW5lcjsJCS8vIEF1dG8tTmVnb3RpYXRpb24gZXhwYW5zaW9uIHJlZyhSZWcgMHgwNikKKwl1OCBhbm5wdHI7CQkvLyBBdXRvLU5lZ290aWF0aW9uIG5leHQgcGFnZSB0cmFuc21pdCByZWcoUmVnIDB4MDcpCisJdTggbHBucHI7CQkvLyBsaW5rIHBhcnRuZXIgbmV4dCBwYWdlIHJlZyhSZWcgMHgwOCkKKwl1OCBnY3I7CQkvLyBHaWdhYml0IGJhc2ljIG1vZGUgY29udHJvbCByZWcoUmVnIDB4MDkpCisJdTggZ3NyOwkJLy8gR2lnYWJpdCBiYXNpYyBtb2RlIHN0YXR1cyByZWcoUmVnIDB4MEEpCisJdTggbWlfcmVzMVs0XTsJLy8gRnV0dXJlIHVzZSBieSBNSSB3b3JraW5nIGdyb3VwKFJlZyAweDBCIC0gMHgwRSkKKwl1OCBlc3I7CQkvLyBFeHRlbmRlZCBzdGF0dXMgcmVnKFJlZyAweDBGKQorCXU4IG1pX3JlczJbM107CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgxMCAtIDB4MTIpCisJdTggbG9vcF9jdGw7CS8vIExvb3BiYWNrIENvbnRyb2wgUmVnKFJlZyAweDEzKQorCXU4IG1pX3JlczM7CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgxNCkKKwl1OCBtY3I7CQkvLyBNSSBDb250cm9sIFJlZyhSZWcgMHgxNSkKKwl1OCBwY3I7CQkvLyBDb25maWd1cmF0aW9uIFJlZyhSZWcgMHgxNikKKwl1OCBwaHlfY3RsOwkvLyBQSFkgQ29udHJvbCBSZWcoUmVnIDB4MTcpCisJdTggaW1yOwkJLy8gSW50ZXJydXB0IE1hc2sgUmVnKFJlZyAweDE4KQorCXU4IGlzcjsJCS8vIEludGVycnVwdCBTdGF0dXMgUmVnKFJlZyAweDE5KQorCXU4IHBzcjsJCS8vIFBIWSBTdGF0dXMgUmVnKFJlZyAweDFBKQorCXU4IGxjcjE7CQkvLyBMRUQgQ29udHJvbCAxIFJlZyhSZWcgMHgxQikKKwl1OCBsY3IyOwkJLy8gTEVEIENvbnRyb2wgMiBSZWcoUmVnIDB4MUMpCisJdTggbWlfcmVzNFszXTsJLy8gRnV0dXJlIHVzZSBieSBNSSB3b3JraW5nIGdyb3VwKFJlZyAweDFEIC0gMHgxRikKK30gTUlfUkVHU190LCAqUE1JX1JFR1NfdDsKKworLyogTUkgUmVnaXN0ZXIgMDogQmFzaWMgbW9kZSBjb250cm9sIHJlZ2lzdGVyICovCit0eXBlZGVmIHVuaW9uIF9NSV9CTUNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlc2V0OjE7CQkvLyBiaXQgMTUKKwkJdTE2IGxvb3BiYWNrOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHNwZWVkX3NlbDoxOwkJLy8gYml0IDEzCisJCXUxNiBlbmFibGVfYXV0b25lZzoxOwkvLyBiaXQgMTIKKwkJdTE2IHBvd2VyX2Rvd246MTsJCS8vIGJpdCAxMQorCQl1MTYgaXNvbGF0ZToxOwkJLy8gYml0IDEwCisJCXUxNiByZXN0YXJ0X2F1dG9uZWc6MTsJLy8gYml0IDkKKwkJdTE2IGR1cGxleF9tb2RlOjE7CQkvLyBiaXQgOAorCQl1MTYgY29sX3Rlc3Q6MTsJCS8vIGJpdCA3CisJCXUxNiBzcGVlZF8xMDAwX3NlbDoxOwkvLyBiaXQgNgorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAwLTUKKyNlbHNlCisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDAtNQorCQl1MTYgc3BlZWRfMTAwMF9zZWw6MTsJLy8gYml0IDYKKwkJdTE2IGNvbF90ZXN0OjE7CQkvLyBiaXQgNworCQl1MTYgZHVwbGV4X21vZGU6MTsJCS8vIGJpdCA4CisJCXUxNiByZXN0YXJ0X2F1dG9uZWc6MTsJLy8gYml0IDkKKwkJdTE2IGlzb2xhdGU6MTsJCS8vIGJpdCAxMAorCQl1MTYgcG93ZXJfZG93bjoxOwkJLy8gYml0IDExCisJCXUxNiBlbmFibGVfYXV0b25lZzoxOwkvLyBiaXQgMTIKKwkJdTE2IHNwZWVkX3NlbDoxOwkJLy8gYml0IDEzCisJCXUxNiBsb29wYmFjazoxOwkJLy8gYml0IDE0CisJCXUxNiByZXNldDoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0JNQ1JfdCwgKlBNSV9CTUNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDE6ICBCYXNpYyBtb2RlIHN0YXR1cyByZWdpc3RlciAqLwordHlwZWRlZiB1bmlvbiBfTUlfQk1TUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBsaW5rXzEwMFQ0OjE7CQkvLyBiaXQgMTUKKwkJdTE2IGxpbmtfMTAwZmR4OjE7CQkvLyBiaXQgMTQKKwkJdTE2IGxpbmtfMTAwaGR4OjE7CQkvLyBiaXQgMTMKKwkJdTE2IGxpbmtfMTBmZHg6MTsJCS8vIGJpdCAxMgorCQl1MTYgbGlua18xMGhkeDoxOwkJLy8gYml0IDExCisJCXUxNiBsaW5rXzEwMFQyZmR4OjE7CS8vIGJpdCAxMAorCQl1MTYgbGlua18xMDBUMmhkeDoxOwkvLyBiaXQgOQorCQl1MTYgZXh0ZW5kX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgcmVzMToxOwkJLy8gYml0IDcKKwkJdTE2IHByZWFtYmxlX3N1cHJlc3M6MTsJLy8gYml0IDYKKwkJdTE2IGF1dG9fbmVnX2NvbXBsZXRlOjE7CS8vIGJpdCA1CisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDQKKwkJdTE2IGF1dG9fbmVnX2FibGU6MTsJLy8gYml0IDMKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgamFiYmVyX2RldGVjdDoxOwkvLyBiaXQgMQorCQl1MTYgZXh0X2NhcDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBleHRfY2FwOjE7CQkvLyBiaXQgMAorCQl1MTYgamFiYmVyX2RldGVjdDoxOwkvLyBiaXQgMQorCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiBhdXRvX25lZ19hYmxlOjE7CS8vIGJpdCAzCisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDQKKwkJdTE2IGF1dG9fbmVnX2NvbXBsZXRlOjE7CS8vIGJpdCA1CisJCXUxNiBwcmVhbWJsZV9zdXByZXNzOjE7CS8vIGJpdCA2CisJCXUxNiByZXMxOjE7CQkvLyBiaXQgNworCQl1MTYgZXh0ZW5kX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgbGlua18xMDBUMmhkeDoxOwkvLyBiaXQgOQorCQl1MTYgbGlua18xMDBUMmZkeDoxOwkvLyBiaXQgMTAKKwkJdTE2IGxpbmtfMTBoZHg6MTsJCS8vIGJpdCAxMQorCQl1MTYgbGlua18xMGZkeDoxOwkJLy8gYml0IDEyCisJCXUxNiBsaW5rXzEwMGhkeDoxOwkJLy8gYml0IDEzCisJCXUxNiBsaW5rXzEwMGZkeDoxOwkJLy8gYml0IDE0CisJCXUxNiBsaW5rXzEwMFQ0OjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQk1TUl90LCAqUE1JX0JNU1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMjogUGh5c2ljYWwgSWRlbnRpZmllciAxICovCit0eXBlZGVmIHVuaW9uIF9NSV9JRFIxX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworCQl1MTYgaWVlZV9hZGRyZXNzOjE2OwkvLyAweDAyODIgZGVmYXVsdChiaXRzIDAtMTUpCisJfSBiaXRzOworfSBNSV9JRFIxX3QsICpQTUlfSURSMV90OworCisvKiBNSSBSZWdpc3RlciAzOiBQaHlzaWNhbCBJZGVudGlmaWVyIDIgKi8KK3R5cGVkZWYgdW5pb24gX01JX0lEUjJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgaWVlZV9hZGRyZXNzOjY7CS8vIDExMTEwMCBkZWZhdWx0KGJpdHMgMTAtMTUpCisJCXUxNiBtb2RlbF9ubzo2OwkJLy8gMDAwMDAxIGRlZmF1bHQoYml0cyA0LTkpCisJCXUxNiByZXZfbm86NDsJCS8vIDAwMTAgICBkZWZhdWx0KGJpdHMgMC0zKQorI2Vsc2UKKwkJdTE2IHJldl9ubzo0OwkJLy8gMDAxMCAgIGRlZmF1bHQoYml0cyAwLTMpCisJCXUxNiBtb2RlbF9ubzo2OwkJLy8gMDAwMDAxIGRlZmF1bHQoYml0cyA0LTkpCisJCXUxNiBpZWVlX2FkZHJlc3M6NjsJLy8gMTExMTAwIGRlZmF1bHQoYml0cyAxMC0xNSkKKyNlbmRpZgorCX0gYml0czsKK30gTUlfSURSMl90LCAqUE1JX0lEUjJfdDsKKworLyogTUkgUmVnaXN0ZXIgNDogQXV0by1uZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50IHJlZ2lzdGVyICovCit0eXBlZGVmIHVuaW9uIF9NSV9BTkFSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG5wX2luZGljYXRpb246MTsJLy8gYml0IDE1CisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxMgorCQl1MTYgY2FwX2FzbXBhdXNlOjE7CS8vIGJpdCAxMQorCQl1MTYgY2FwX3BhdXNlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKKwkJdTE2IGNhcF8xMDBmZHg6MTsJCS8vIGJpdCA4CisJCXUxNiBjYXBfMTAwaGR4OjE7CQkvLyBiaXQgNworCQl1MTYgY2FwXzEwZmR4OjE7CQkvLyBiaXQgNgorCQl1MTYgY2FwXzEwaGR4OjE7CQkvLyBiaXQgNQorCQl1MTYgc2VsZWN0b3I6NTsJCS8vIGJpdHMgMC00CisjZWxzZQorCQl1MTYgc2VsZWN0b3I6NTsJCS8vIGJpdHMgMC00CisJCXUxNiBjYXBfMTBoZHg6MTsJCS8vIGJpdCA1CisJCXUxNiBjYXBfMTBmZHg6MTsJCS8vIGJpdCA2CisJCXUxNiBjYXBfMTAwaGR4OjE7CQkvLyBiaXQgNworCQl1MTYgY2FwXzEwMGZkeDoxOwkJLy8gYml0IDgKKwkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKKwkJdTE2IGNhcF9wYXVzZToxOwkJLy8gYml0IDEwCisJCXUxNiBjYXBfYXNtcGF1c2U6MTsJLy8gYml0IDExCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTIKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAxNAorCQl1MTYgbnBfaW5kaWNhdGlvbjoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQU5BUl90LCAqUE1JX0FOQVJfdDsKKworLyogTUkgUmVnaXN0ZXIgNTogQXV0by1uZWdvdGlhdGlvbiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlbWVudCByZWdpc3RlciAqLwordHlwZWRlZiBzdHJ1Y3QgX01JX0FOTFBBUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBucF9pbmRpY2F0aW9uOjE7CS8vIGJpdCAxNQorCQl1MTYgYWNrbm93bGVkZ2U6MTsJCS8vIGJpdCAxNAorCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMToxOwkJLy8gYml0IDEyCisJCXUxNiBjYXBfYXNtcGF1c2U6MTsJLy8gYml0IDExCisJCXUxNiBjYXBfcGF1c2U6MTsJCS8vIGJpdCAxMAorCQl1MTYgY2FwXzEwMFQ0OjE7CQkvLyBiaXQgOQorCQl1MTYgY2FwXzEwMGZkeDoxOwkJLy8gYml0IDgKKwkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CisJCXUxNiBjYXBfMTBmZHg6MTsJCS8vIGJpdCA2CisJCXUxNiBjYXBfMTBoZHg6MTsJCS8vIGJpdCA1CisJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKKyNlbHNlCisJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKKwkJdTE2IGNhcF8xMGhkeDoxOwkJLy8gYml0IDUKKwkJdTE2IGNhcF8xMGZkeDoxOwkJLy8gYml0IDYKKwkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CisJCXUxNiBjYXBfMTAwZmR4OjE7CQkvLyBiaXQgOAorCQl1MTYgY2FwXzEwMFQ0OjE7CQkvLyBiaXQgOQorCQl1MTYgY2FwX3BhdXNlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IGNhcF9hc21wYXVzZToxOwkvLyBiaXQgMTEKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxMgorCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMworCQl1MTYgYWNrbm93bGVkZ2U6MTsJCS8vIGJpdCAxNAorCQl1MTYgbnBfaW5kaWNhdGlvbjoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQU5MUEFSX3QsICpQTUlfQU5MUEFSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDY6IEF1dG8tbmVnb3RpYXRpb24gZXhwYW5zaW9uIHJlZ2lzdGVyICovCit0eXBlZGVmIHVuaW9uIF9NSV9BTkVSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczoxMTsJLy8gYml0cyA1LTE1CisJCXUxNiBwZGY6MTsJCS8vIGJpdCA0CisJCXUxNiBscF9ucF9hYmxlOjE7CS8vIGJpdCAzCisJCXUxNiBucF9hYmxlOjE7CS8vIGJpdCAyCisJCXUxNiBwYWdlX3J4OjE7CS8vIGJpdCAxCisJCXUxNiBscF9hbl9hYmxlOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MTYgbHBfYW5fYWJsZToxOwkvLyBiaXQgMAorCQl1MTYgcGFnZV9yeDoxOwkvLyBiaXQgMQorCQl1MTYgbnBfYWJsZToxOwkvLyBiaXQgMgorCQl1MTYgbHBfbnBfYWJsZToxOwkvLyBiaXQgMworCQl1MTYgcGRmOjE7CQkvLyBiaXQgNAorCQl1MTYgcmVzOjExOwkvLyBiaXRzIDUtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQU5FUl90LCAqUE1JX0FORVJfdDsKKworLyogTUkgUmVnaXN0ZXIgNzogQXV0by1uZWdvdGlhdGlvbiBuZXh0IHBhZ2UgdHJhbnNtaXQgcmVnKDB4MDcpICovCit0eXBlZGVmIHVuaW9uIF9NSV9BTk5QVFJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbnA6MTsJCS8vIGJpdCAxNQorCQl1MTYgcmVzMToxOwkvLyBiaXQgMTQKKwkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMworCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCisjZWxzZQorCQl1MTYgbXNnOjExOwkvLyBiaXRzIDAtMTAKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IGFjazI6MTsJLy8gYml0IDEyCisJCXUxNiBtc2dfcGFnZToxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczE6MTsJLy8gYml0IDE0CisJCXUxNiBucDoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0FOTlBUUl90LCAqUE1JX0FOTlBUUl90OworCisvKiBNSSBSZWdpc3RlciA4OiBMaW5rIFBhcnRuZXIgTmV4dCBQYWdlIFJlZygweDA4KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTFBOUFJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbnA6MTsJCS8vIGJpdCAxNQorCQl1MTYgYWNrOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMworCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCisjZWxzZQorCQl1MTYgbXNnOjExOwkvLyBiaXRzIDAtMTAKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IGFjazI6MTsJLy8gYml0IDEyCisJCXUxNiBtc2dfcGFnZToxOwkvLyBiaXQgMTMKKwkJdTE2IGFjazoxOwkJLy8gYml0IDE0CisJCXUxNiBucDoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0xQTlBSX3QsICpQTUlfTFBOUFJfdDsKKworLyogTUkgUmVnaXN0ZXIgOTogMTAwMEJhc2VUIENvbnRyb2wgUmVnKDB4MDkpICovCit0eXBlZGVmIHVuaW9uIF9NSV9HQ1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgdGVzdF9tb2RlOjM7CQkvLyBiaXRzIDEzLTE1CisJCXUxNiBtc19jb25maWdfZW46MTsJLy8gYml0IDEyCisJCXUxNiBtc192YWx1ZToxOwkJLy8gYml0IDExCisJCXUxNiBwb3J0X3R5cGU6MTsJCS8vIGJpdCAxMAorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCA5CisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDgKKwkJdTE2IHJlczo4OwkJCS8vIGJpdCAwLTcKKyNlbHNlCisJCXUxNiByZXM6ODsJCQkvLyBiaXQgMC03CisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDgKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgOQorCQl1MTYgcG9ydF90eXBlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IG1zX3ZhbHVlOjE7CQkvLyBiaXQgMTEKKwkJdTE2IG1zX2NvbmZpZ19lbjoxOwkvLyBiaXQgMTIKKwkJdTE2IHRlc3RfbW9kZTozOwkJLy8gYml0cyAxMy0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9HQ1JfdCwgKlBNSV9HQ1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMTA6IDEwMDBCYXNlVCBTdGF0dXMgUmVnKDB4MEEpICovCit0eXBlZGVmIHVuaW9uIF9NSV9HU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbXNfY29uZmlnX2ZhdWx0OjE7CS8vIGJpdCAxNQorCQl1MTYgbXNfcmVzb2x2ZToxOwkJLy8gYml0IDE0CisJCXUxNiBsb2NhbF9yeF9zdGF0dXM6MTsJLy8gYml0IDEzCisJCXUxNiByZW1vdGVfcnhfc3RhdHVzOjE7CS8vIGJpdCAxMgorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCAxMQorCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCAxMAorCQl1MTYgcmVzOjI7CQkJLy8gYml0cyA4LTkKKwkJdTE2IGlkbGVfZXJyX2NudDo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTE2IGlkbGVfZXJyX2NudDo4OwkvLyBiaXRzIDAtNworCQl1MTYgcmVzOjI7CQkJLy8gYml0cyA4LTkKKwkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgMTAKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgMTEKKwkJdTE2IHJlbW90ZV9yeF9zdGF0dXM6MTsJLy8gYml0IDEyCisJCXUxNiBsb2NhbF9yeF9zdGF0dXM6MTsJLy8gYml0IDEzCisJCXUxNiBtc19yZXNvbHZlOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG1zX2NvbmZpZ19mYXVsdDoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfR1NSX3QsICpQTUlfR1NSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDExIC0gMTQ6IFJlc2VydmVkIFJlZ3MoMHgwQiAtIDB4MEUpICovCit0eXBlZGVmIHVuaW9uIF9NSV9SRVNfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMTU6MTsJLy8gYml0IDE1CisJCXUxNiByZXMxNDoxOwkvLyBiaXQgMTQKKwkJdTE2IHJlczEzOjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMTI6MTsJLy8gYml0IDEyCisJCXUxNiByZXMxMToxOwkvLyBiaXQgMTEKKwkJdTE2IHJlczEwOjE7CS8vIGJpdCAxMAorCQl1MTYgcmVzOToxOwkvLyBiaXQgOQorCQl1MTYgcmVzODoxOwkvLyBiaXQgOAorCQl1MTYgcmVzNzoxOwkvLyBiaXQgNworCQl1MTYgcmVzNjoxOwkvLyBiaXQgNgorCQl1MTYgcmVzNToxOwkvLyBiaXQgNQorCQl1MTYgcmVzNDoxOwkvLyBiaXQgNAorCQl1MTYgcmVzMzoxOwkvLyBiaXQgMworCQl1MTYgcmVzMjoxOwkvLyBiaXQgMgorCQl1MTYgcmVzMToxOwkvLyBiaXQgMQorCQl1MTYgcmVzMDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IHJlczA6MTsJLy8gYml0IDAKKwkJdTE2IHJlczE6MTsJLy8gYml0IDEKKwkJdTE2IHJlczI6MTsJLy8gYml0IDIKKwkJdTE2IHJlczM6MTsJLy8gYml0IDMKKwkJdTE2IHJlczQ6MTsJLy8gYml0IDQKKwkJdTE2IHJlczU6MTsJLy8gYml0IDUKKwkJdTE2IHJlczY6MTsJLy8gYml0IDYKKwkJdTE2IHJlczc6MTsJLy8gYml0IDcKKwkJdTE2IHJlczg6MTsJLy8gYml0IDgKKwkJdTE2IHJlczk6MTsJLy8gYml0IDkKKwkJdTE2IHJlczEwOjE7CS8vIGJpdCAxMAorCQl1MTYgcmVzMTE6MTsJLy8gYml0IDExCisJCXUxNiByZXMxMjoxOwkvLyBiaXQgMTIKKwkJdTE2IHJlczEzOjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMTQ6MTsJLy8gYml0IDE0CisJCXUxNiByZXMxNToxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfUkVTX3QsICpQTUlfUkVTX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDE1OiBFeHRlbmRlZCBzdGF0dXMgUmVnKDB4MEYpICovCit0eXBlZGVmIHVuaW9uIF9NSV9FU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbGlua18xMDAwWGZkeDoxOwkvLyBiaXQgMTUKKwkJdTE2IGxpbmtfMTAwMFhoZHg6MTsJLy8gYml0IDE0CisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDEzCisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDEyCisJCXUxNiByZXM6MTI7CQkvLyBiaXQgMC0xMQorI2Vsc2UKKwkJdTE2IHJlczoxMjsJCS8vIGJpdCAwLTExCisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDEyCisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDEzCisJCXUxNiBsaW5rXzEwMDBYaGR4OjE7CS8vIGJpdCAxNAorCQl1MTYgbGlua18xMDAwWGZkeDoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfRVNSX3QsICpQTUlfRVNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDE2IC0gMTg6IFJlc2VydmVkIFJlZygweDEwLTB4MTIpICovCisKKy8qIE1JIFJlZ2lzdGVyIDE5OiBMb29wYmFjayBDb250cm9sIFJlZygweDEzKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTENSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG1paV9lbjoxOwkJLy8gYml0IDE1CisJCXUxNiBwY3NfZW46MTsJCS8vIGJpdCAxNAorCQl1MTYgcG1kX2VuOjE7CQkvLyBiaXQgMTMKKwkJdTE2IGFsbF9kaWdpdGFsX2VuOjE7CS8vIGJpdCAxMgorCQl1MTYgcmVwbGljYV9lbjoxOwkJLy8gYml0IDExCisJCXUxNiBsaW5lX2RyaXZlcl9lbjoxOwkvLyBiaXQgMTAKKwkJdTE2IHJlczoxMDsJCS8vIGJpdCAwLTkKKyNlbHNlCisJCXUxNiByZXM6MTA7CQkvLyBiaXQgMC05CisJCXUxNiBsaW5lX2RyaXZlcl9lbjoxOwkvLyBiaXQgMTAKKwkJdTE2IHJlcGxpY2FfZW46MTsJCS8vIGJpdCAxMQorCQl1MTYgYWxsX2RpZ2l0YWxfZW46MTsJLy8gYml0IDEyCisJCXUxNiBwbWRfZW46MTsJCS8vIGJpdCAxMworCQl1MTYgcGNzX2VuOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG1paV9lbjoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0xDUl90LCAqUE1JX0xDUl90OworCisvKiBNSSBSZWdpc3RlciAyMDogUmVzZXJ2ZWQgUmVnKDB4MTQpICovCisKKy8qIE1JIFJlZ2lzdGVyIDIxOiBNYW5hZ2VtZW50IEludGVyZmFjZSBDb250cm9sIFJlZygweDE1KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTUlDUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjU7CQkvLyBiaXRzIDExLTE1CisJCXUxNiBtaV9lcnJvcl9jb3VudDo3OwkvLyBiaXRzIDQtMTAKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAzCisJCXUxNiBpZ25vcmVfMTBnX2ZyOjE7CS8vIGJpdCAyCisJCXUxNiByZXMzOjE7CQkvLyBiaXQgMQorCQl1MTYgcHJlYW1ibGVfc3VwcmVzc19lbjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IHByZWFtYmxlX3N1cHJlc3NfZW46MTsJLy8gYml0IDAKKwkJdTE2IHJlczM6MTsJCS8vIGJpdCAxCisJCXUxNiBpZ25vcmVfMTBnX2ZyOjE7CS8vIGJpdCAyCisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMworCQl1MTYgbWlfZXJyb3JfY291bnQ6NzsJLy8gYml0cyA0LTEwCisJCXUxNiByZXMxOjU7CQkvLyBiaXRzIDExLTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX01JQ1JfdCwgKlBNSV9NSUNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDIyOiBQSFkgQ29uZmlndXJhdGlvbiBSZWcoMHgxNikgKi8KK3R5cGVkZWYgdW5pb24gX01JX1BIWV9DT05GSUdfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgY3JzX3R4X2VuOjE7CQkvLyBiaXQgMTUKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNAorCQl1MTYgdHhfZmlmb19kZXB0aDoyOwkvLyBiaXRzIDEyLTEzCisJCXUxNiBzcGVlZF9kb3duc2hpZnQ6MjsJLy8gYml0cyAxMC0xMQorCQl1MTYgcGJpX2RldGVjdDoxOwkJLy8gYml0IDkKKwkJdTE2IHRiaV9yYXRlOjE7CQkvLyBiaXQgOAorCQl1MTYgYWx0ZXJuYXRlX25wOjE7CS8vIGJpdCA3CisJCXUxNiBncm91cF9tZGlvX2VuOjE7CS8vIGJpdCA2CisJCXUxNiB0eF9jbG9ja19lbjoxOwkJLy8gYml0IDUKKwkJdTE2IHN5c19jbG9ja19lbjoxOwkvLyBiaXQgNAorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKKwkJdTE2IG1hY19pZl9tb2RlOjM7CQkvLyBiaXRzIDAtMgorI2Vsc2UKKwkJdTE2IG1hY19pZl9tb2RlOjM7CQkvLyBiaXRzIDAtMgorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKKwkJdTE2IHN5c19jbG9ja19lbjoxOwkvLyBiaXQgNAorCQl1MTYgdHhfY2xvY2tfZW46MTsJCS8vIGJpdCA1CisJCXUxNiBncm91cF9tZGlvX2VuOjE7CS8vIGJpdCA2CisJCXUxNiBhbHRlcm5hdGVfbnA6MTsJLy8gYml0IDcKKwkJdTE2IHRiaV9yYXRlOjE7CQkvLyBiaXQgOAorCQl1MTYgcGJpX2RldGVjdDoxOwkJLy8gYml0IDkKKwkJdTE2IHNwZWVkX2Rvd25zaGlmdDoyOwkvLyBiaXRzIDEwLTExCisJCXUxNiB0eF9maWZvX2RlcHRoOjI7CS8vIGJpdHMgMTItMTMKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNAorCQl1MTYgY3JzX3R4X2VuOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfUEhZX0NPTkZJR190LCAqUE1JX1BIWV9DT05GSUdfdDsKKworLyogTUkgUmVnaXN0ZXIgMjM6IFBIWSBDT05UUk9MIFJlZygweDE3KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfUEhZX0NPTlRST0xfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMToxOwkJLy8gYml0IDE1CisJCXUxNiB0ZHJfZW46MTsJCS8vIGJpdCAxNAorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDEzCisJCXUxNiBkb3duc2hpZnRfYXR0ZW1wdHM6MjsJLy8gYml0cyAxMS0xMgorCQl1MTYgcmVzMzo1OwkJLy8gYml0IDYtMTAKKwkJdTE2IGphYmJlcl8xMGJhc2VUOjE7CS8vIGJpdCA1CisJCXUxNiBzcWVfMTBiYXNlVDoxOwkJLy8gYml0IDQKKwkJdTE2IHRwX2xvb3BiYWNrXzEwYmFzZVQ6MTsJLy8gYml0IDMKKwkJdTE2IHByZWFtYmxlX2dlbl9lbjoxOwkvLyBiaXQgMgorCQl1MTYgcmVzNDoxOwkJLy8gYml0IDEKKwkJdTE2IGZvcmNlX2ludDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBmb3JjZV9pbnQ6MTsJCS8vIGJpdCAwCisJCXUxNiByZXM0OjE7CQkvLyBiaXQgMQorCQl1MTYgcHJlYW1ibGVfZ2VuX2VuOjE7CS8vIGJpdCAyCisJCXUxNiB0cF9sb29wYmFja18xMGJhc2VUOjE7CS8vIGJpdCAzCisJCXUxNiBzcWVfMTBiYXNlVDoxOwkJLy8gYml0IDQKKwkJdTE2IGphYmJlcl8xMGJhc2VUOjE7CS8vIGJpdCA1CisJCXUxNiByZXMzOjU7CQkvLyBiaXQgNi0xMAorCQl1MTYgZG93bnNoaWZ0X2F0dGVtcHRzOjI7CS8vIGJpdHMgMTEtMTIKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAxMworCQl1MTYgdGRyX2VuOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9QSFlfQ09OVFJPTF90LCAqUE1JX1BIWV9DT05UUk9MX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI0OiBJbnRlcnJ1cHQgTWFzayBSZWcoMHgxOCkgKi8KK3R5cGVkZWYgdW5pb24gX01JX0lNUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDEwLTE1CisJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQorCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDgKKwkJdTE2IGhpX2JpdF9lcnI6MTsJCS8vIGJpdCA3CisJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKKwkJdTE2IGVycl9jb3VudGVyX2Z1bGw6MTsJLy8gYml0IDUKKwkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCisJCXUxNiBpbnRfZW46MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MTYgaW50X2VuOjE7CQkvLyBiaXQgMAorCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKKwkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKKwkJdTE2IGVycl9jb3VudGVyX2Z1bGw6MTsJLy8gYml0IDUKKwkJdTE2IG5wX3J4OjE7CQkvLyBiaXQgNgorCQl1MTYgaGlfYml0X2VycjoxOwkJLy8gYml0IDcKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9JTVJfdCwgKlBNSV9JTVJfdDsKKworLyogTUkgUmVnaXN0ZXIgMjU6IEludGVycnVwdCBTdGF0dXMgUmVnKDB4MTkpICovCit0eXBlZGVmIHVuaW9uIF9NSV9JU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQorCQl1MTYgbWRpb19zeW5jX2xvc3Q6MTsJLy8gYml0IDkKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiBoaV9iaXRfZXJyOjE7CQkvLyBiaXQgNworCQl1MTYgbnBfcng6MTsJCS8vIGJpdCA2CisJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CisJCXUxNiBmaWZvX292ZXJfdW5kZXJmbG93OjE7CS8vIGJpdCA0CisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCAzCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IGF1dG9tYXRpY19zcGVlZDoxOwkvLyBiaXQgMQorCQl1MTYgaW50X2VuOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IGludF9lbjoxOwkJLy8gYml0IDAKKwkJdTE2IGF1dG9tYXRpY19zcGVlZDoxOwkvLyBiaXQgMQorCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCAzCisJCXUxNiBmaWZvX292ZXJfdW5kZXJmbG93OjE7CS8vIGJpdCA0CisJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CisJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKKwkJdTE2IGhpX2JpdF9lcnI6MTsJCS8vIGJpdCA3CisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgbWRpb19zeW5jX2xvc3Q6MTsJLy8gYml0IDkKKwkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMTAtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfSVNSX3QsICpQTUlfSVNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI2OiBQSFkgU3RhdHVzIFJlZygweDFBKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfUFNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQorCQl1MTYgYXV0b25lZ19mYXVsdDoyOwkvLyBiaXQgMTMtMTQKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCAxMgorCQl1MTYgbWRpX3hfc3RhdHVzOjE7CS8vIGJpdCAxMQorCQl1MTYgcG9sYXJpdHlfc3RhdHVzOjE7CS8vIGJpdCAxMAorCQl1MTYgc3BlZWRfc3RhdHVzOjI7CS8vIGJpdHMgOC05CisJCXUxNiBkdXBsZXhfc3RhdHVzOjE7CS8vIGJpdCA3CisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDYKKwkJdTE2IHR4X3N0YXR1czoxOwkJLy8gYml0IDUKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDQKKwkJdTE2IGNvbGxpc2lvbl9zdGF0dXM6MTsJLy8gYml0IDMKKwkJdTE2IGF1dG9uZWdfZW46MTsJCS8vIGJpdCAyCisJCXUxNiBwYXVzZV9lbjoxOwkJLy8gYml0IDEKKwkJdTE2IGFzeW1tZXRyaWNfZGlyOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MTYgYXN5bW1ldHJpY19kaXI6MTsJLy8gYml0IDAKKwkJdTE2IHBhdXNlX2VuOjE7CQkvLyBiaXQgMQorCQl1MTYgYXV0b25lZ19lbjoxOwkJLy8gYml0IDIKKwkJdTE2IGNvbGxpc2lvbl9zdGF0dXM6MTsJLy8gYml0IDMKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDQKKwkJdTE2IHR4X3N0YXR1czoxOwkJLy8gYml0IDUKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgNgorCQl1MTYgZHVwbGV4X3N0YXR1czoxOwkvLyBiaXQgNworCQl1MTYgc3BlZWRfc3RhdHVzOjI7CS8vIGJpdHMgOC05CisJCXUxNiBwb2xhcml0eV9zdGF0dXM6MTsJLy8gYml0IDEwCisJCXUxNiBtZGlfeF9zdGF0dXM6MTsJLy8gYml0IDExCisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgMTIKKwkJdTE2IGF1dG9uZWdfZmF1bHQ6MjsJLy8gYml0IDEzLTE0CisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfUFNSX3QsICpQTUlfUFNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI3OiBMRUQgQ29udHJvbCBSZWcgMSgweDFCKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTENSMV90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjI7CQkvLyBiaXRzIDE0LTE1CisJCXUxNiBsZWRfZHVwX2luZGljYXRlOjI7CS8vIGJpdHMgMTItMTMKKwkJdTE2IGxlZF8xMGJhc2VUOjI7CQkvLyBiaXRzIDEwLTExCisJCXUxNiBsZWRfY29sbGlzaW9uOjI7CS8vIGJpdHMgOC05CisJCXUxNiByZXMyOjI7CQkvLyBiaXRzIDYtNworCQl1MTYgcmVzMzoyOwkJLy8gYml0cyA0LTUKKwkJdTE2IHB1bHNlX2R1cjoyOwkJLy8gYml0cyAyLTMKKwkJdTE2IHB1bHNlX3N0cmV0Y2gxOjE7CS8vIGJpdCAxCisJCXUxNiBwdWxzZV9zdHJldGNoMDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IHB1bHNlX3N0cmV0Y2gwOjE7CS8vIGJpdCAwCisJCXUxNiBwdWxzZV9zdHJldGNoMToxOwkvLyBiaXQgMQorCQl1MTYgcHVsc2VfZHVyOjI7CQkvLyBiaXRzIDItMworCQl1MTYgcmVzMzoyOwkJLy8gYml0cyA0LTUKKwkJdTE2IHJlczI6MjsJCS8vIGJpdHMgNi03CisJCXUxNiBsZWRfY29sbGlzaW9uOjI7CS8vIGJpdHMgOC05CisJCXUxNiBsZWRfMTBiYXNlVDoyOwkJLy8gYml0cyAxMC0xMQorCQl1MTYgbGVkX2R1cF9pbmRpY2F0ZToyOwkvLyBiaXRzIDEyLTEzCisJCXUxNiByZXMxOjI7CQkvLyBiaXRzIDE0LTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0xDUjFfdCwgKlBNSV9MQ1IxX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI4OiBMRUQgQ29udHJvbCBSZWcgMigweDFDKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTENSMl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBsZWRfbGluazo0OwkJLy8gYml0cyAxMi0xNQorCQl1MTYgbGVkX3R4X3J4OjQ7CQkvLyBiaXRzIDgtMTEKKwkJdTE2IGxlZF8xMDBCYXNlVFg6NDsJLy8gYml0cyA0LTcKKwkJdTE2IGxlZF8xMDAwQmFzZVQ6NDsJLy8gYml0cyAwLTMKKyNlbHNlCisJCXUxNiBsZWRfMTAwMEJhc2VUOjQ7CS8vIGJpdHMgMC0zCisJCXUxNiBsZWRfMTAwQmFzZVRYOjQ7CS8vIGJpdHMgNC03CisJCXUxNiBsZWRfdHhfcng6NDsJCS8vIGJpdHMgOC0xMQorCQl1MTYgbGVkX2xpbms6NDsJCS8vIGJpdHMgMTItMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfTENSMl90LCAqUE1JX0xDUjJfdDsKKworLyogTUkgUmVnaXN0ZXIgMjkgLSAzMTogUmVzZXJ2ZWQgUmVnKDB4MUQgLSAweDFFKSAqLworCisvKiBUcnVlUEhZIGhlYWRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IF9UUlVFUEhZX0FDQ0VTU19NSV9SRUdTXyB7CisJVFJVRVBIWV9IQU5ETEUgaFRydWVQaHk7CisJaW50MzJfdCBuUGh5SWQ7CisJdTggYlJlYWRXcml0ZTsKKwl1OCAqcGJ5UmVnczsKKwl1OCAqcHdEYXRhOworCWludDMyX3QgblJlZ0NvdW50OworfSBUUlVFUEhZX0FDQ0VTU19NSV9SRUdTLCAqUFRSVUVQSFlfQUNDRVNTX01JX1JFR1M7CisKKy8qIFRydWVQSFkgaGVhZGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgX1RBR19UUEFMX0FDQ0VTU19NSV9SRUdTXyB7CisJdTMyIG5QaHlJZDsKKwl1OCBiUmVhZFdyaXRlOworCXUzMiBuUmVnQ291bnQ7CisJdTE2IERhdGFbNDA5Nl07CisJdTggUmVnc1s0MDk2XTsKK30gVFBBTF9BQ0NFU1NfTUlfUkVHUywgKlBUUEFMX0FDQ0VTU19NSV9SRUdTOworCisKK3R5cGVkZWYgVFJVRVBIWV9IQU5ETEUgVFBBTF9IQU5ETEU7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKworLyogT1MgU3BlY2lmaWMgRnVuY3Rpb25zKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMEZvcmNlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeTEwMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTAwRm9yY2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTAwMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHlBdXRvTmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qIFByb3RvdHlwZXMgZm9yIEVUMTMxMF9waHkuYyAqLworaW50IGV0MTMxeF94Y3ZyX2ZpbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBldDEzMXhfc2V0cGh5X25vcm1hbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50MzJfdCBQaHlNaVJlYWQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCSAgICAgICB1OCB4Y3ZyQWRkciwgdTggeGN2clJlZywgdTE2ICp2YWx1ZSk7CisKKy8qIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZG9lcyBub3Qgd29yayBiZWNhdXNlIGV0MTMxeF9hZGFwdGVyIGlzIG5vdCBhbHdheXMKKyAqIGRlZmluZWQKKyAqLworI2RlZmluZSBNaVJlYWQoYWRhcHRlciwgeGN2clJlZywgdmFsdWUpIFwKKwlQaHlNaVJlYWQoKGFkYXB0ZXIpLCAoYWRhcHRlciktPlN0YXRzLnhjdnJfYWRkciwgKHhjdnJSZWcpLCAodmFsdWUpKQorCitpbnQzMl90IE1pV3JpdGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQl1OCB4Y3ZSZWcsIHUxNiB2YWx1ZSk7Cit2b2lkIGV0MTMxeF9NaWlfY2hlY2soc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJICAgICAgTUlfQk1TUl90IGJtc3IsIE1JX0JNU1JfdCBibXNyX2ludHMpOworCisvKiBUaGlzIGxhc3QgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkICh0aGUgZHJpdmVyIGNvdWxkIGNhbGwgdGhlIFRQQUwKKyAqIHZlcnNpb24gaW5zdGVhZCksIGJ1dCB0aGlzIHNldHMgdGhlIGFkYXB0ZXIgdXAgY29ycmVjdGx5LCBhbmQgY2FsbHMgdGhlCisgKiBhY2Nlc3Mgcm91dGluZSBpbmRpcmVjdGx5LiAgVGhpcyBwcm90ZWN0cyB0aGUgZHJpdmVyIGZyb20gY2hhbmdlcyBpbiBUUEFMLgorICovCit2b2lkIFNldFBoeV8xMEJhc2VUSGFsZkR1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKiBEZWZpbmVzIGZvciBQSFkgYWNjZXNzIHJvdXRpbmVzICovCisKKy8vIERlZmluZSBiaXQgb3BlcmF0aW9uIGZsYWdzCisjZGVmaW5lIFRSVUVQSFlfQklUX0NMRUFSICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX0JJVF9TRVQgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJVRVBIWV9CSVRfUkVBRCAgICAgICAgICAgICAgICAyCisKKy8vIERlZmluZSByZWFkL3dyaXRlIG9wZXJhdGlvbiBmbGFncworI2lmbmRlZiBUUlVFUEhZX1JFQUQKKyNkZWZpbmUgVFJVRVBIWV9SRUFEICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfV1JJVEUgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUlVFUEhZX01BU0sgICAgICAgICAgICAgICAgICAgIDIKKyNlbmRpZgorCisvLyBEZWZpbmUgc3BlZWRzCisjZGVmaW5lIFRSVUVQSFlfU1BFRURfMTBNQlBTICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX1NQRUVEXzEwME1CUFMgICAgICAgICAgIDEKKyNkZWZpbmUgVFJVRVBIWV9TUEVFRF8xMDAwTUJQUyAgICAgICAgICAyCisKKy8vIERlZmluZSBkdXBsZXggbW9kZXMKKyNkZWZpbmUgVFJVRVBIWV9EVVBMRVhfSEFMRiAgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfRFVQTEVYX0ZVTEwgICAgICAgICAgICAgMQorCisvLyBEZWZpbmUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisjZGVmaW5lIFRSVUVQSFlfQ0ZHX1NMQVZFICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX0NGR19NQVNURVIgICAgICAgICAgICAgIDEKKworLy8gRGVmaW5lIE1ESS9NREktWCBzZXR0aW5ncworI2RlZmluZSBUUlVFUEhZX01ESSAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9NRElYICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRSVUVQSFlfQVVUT19NRElfTURJWCAgICAgICAgICAgMgorCisvLyBEZWZpbmUgMTBCYXNlLVQgbGluayBwb2xhcml0aWVzCisjZGVmaW5lIFRSVUVQSFlfUE9MQVJJVFlfTk9STUFMICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX1BPTEFSSVRZX0lOVkVSVEVEICAgICAgIDEKKworLy8gRGVmaW5lIGF1dG8tbmVnb3RpYXRpb24gcmVzdWx0cworI2RlZmluZSBUUlVFUEhZX0FORUdfTk9UX0NPTVBMRVRFICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9BTkVHX0NPTVBMRVRFICAgICAgICAgICAxCisjZGVmaW5lIFRSVUVQSFlfQU5FR19ESVNBQkxFRCAgICAgICAgICAgMgorCisvKiBEZWZpbmUgZHVwbGV4IGFkdmVydGlzbWVudCBmbGFncyAqLworI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSAgICAgICAgIDB4MDAKKyNkZWZpbmUgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwgICAgICAgICAweDAxCisjZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGICAgICAgICAgMHgwMgorI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USCAgICAgXAorICAgIChUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCB8IFRSVUVQSFlfQURWX0RVUExFWF9IQUxGKQorCisjZGVmaW5lIFBIWV9DT05UUk9MICAgICAgICAgICAgICAgIDB4MDAJLy8jZGVmaW5lIFRSVV9NSV9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBIWV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDEJLy8jZGVmaW5lIFRSVV9NSV9TVEFUVVNfUkVHSVNURVIgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBIWV9JRF8xICAgICAgICAgICAgICAgICAgIDB4MDIJLy8jZGVmaW5lIFRSVV9NSV9QSFlfSURFTlRJRklFUl8xX1JFR0lTVEVSICAgICAgICAyCisjZGVmaW5lIFBIWV9JRF8yICAgICAgICAgICAgICAgICAgIDB4MDMJLy8jZGVmaW5lIFRSVV9NSV9QSFlfSURFTlRJRklFUl8yX1JFR0lTVEVSICAgICAgICAzCisjZGVmaW5lIFBIWV9BVVRPX0FEVkVSVElTRU1FTlQgICAgIDB4MDQJLy8jZGVmaW5lIFRSVV9NSV9BRFZFUlRJU0VNRU5UX1JFR0lTVEVSICAgICAgICAgICA0CisjZGVmaW5lIFBIWV9BVVRPX0xJTktfUEFSVE5FUiAgICAgIDB4MDUJLy8jZGVmaW5lIFRSVV9NSV9MSU5LX1BBUlRORVJfQUJJTElUWV9SRUdJU1RFUiAgICA1CisjZGVmaW5lIFBIWV9BVVRPX0VYUEFOU0lPTiAgICAgICAgIDB4MDYJLy8jZGVmaW5lIFRSVV9NSV9FWFBBTlNJT05fUkVHSVNURVIgICAgICAgICAgICAgICA2CisjZGVmaW5lIFBIWV9BVVRPX05FWFRfUEFHRV9UWCAgICAgIDB4MDcJLy8jZGVmaW5lIFRSVV9NSV9ORVhUX1BBR0VfVFJBTlNNSVRfUkVHSVNURVIgICAgICA3CisjZGVmaW5lIFBIWV9MSU5LX1BBUlRORVJfTkVYVF9QQUdFIDB4MDgJLy8jZGVmaW5lIFRSVV9NSV9MSU5LX1BBUlRORVJfTkVYVF9QQUdFX1JFR0lTVEVSICA4CisjZGVmaW5lIFBIWV8xMDAwX0NPTlRST0wgICAgICAgICAgIDB4MDkJLy8jZGVmaW5lIFRSVV9NSV8xMDAwQkFTRVRfQ09OVFJPTF9SRUdJU1RFUiAgICAgICA5CisjZGVmaW5lIFBIWV8xMDAwX1NUQVRVUyAgICAgICAgICAgIDB4MEEJLy8jZGVmaW5lIFRSVV9NSV8xMDAwQkFTRVRfU1RBVFVTX1JFR0lTVEVSICAgICAgICAxMAorCisjZGVmaW5lIFBIWV9FWFRFTkRFRF9TVEFUVVMgICAgICAgIDB4MEYJLy8jZGVmaW5lIFRSVV9NSV9FWFRFTkRFRF9TVEFUVVNfUkVHSVNURVIgICAgICAgICAxNQorCisvLyBzb21lIGRlZmluZXMgZm9yIG1vZGVtIHJlZ2lzdGVycyB0aGF0IHNlZW0gdG8gYmUgJ3Jlc2VydmVkJworI2RlZmluZSBQSFlfSU5ERVhfUkVHICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFBIWV9EQVRBX1JFRyAgICAgICAgICAgICAgIDB4MTEKKworI2RlZmluZSBQSFlfTVBIWV9DT05UUk9MX1JFRyAgICAgICAweDEyCS8vI2RlZmluZSBUUlVfVk1JX01QSFlfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgICAgMTgKKworI2RlZmluZSBQSFlfTE9PUEJBQ0tfQ09OVFJPTCAgICAgICAweDEzCS8vI2RlZmluZSBUUlVfVk1JX0xPT1BCQUNLX0NPTlRST0xfMV9SRUdJU1RFUiAgICAgMTkKKwkJCQkJLy8jZGVmaW5lIFRSVV9WTUlfTE9PUEJBQ0tfQ09OVFJPTF8yX1JFR0lTVEVSICAgICAyMAorI2RlZmluZSBQSFlfUkVHSVNURVJfTUdNVF9DT05UUk9MICAweDE1CS8vI2RlZmluZSBUUlVfVk1JX01JX1NFUV9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgMjEKKyNkZWZpbmUgUEhZX0NPTkZJRyAgICAgICAgICAgICAgICAgMHgxNgkvLyNkZWZpbmUgVFJVX1ZNSV9DT05GSUdVUkFUSU9OX1JFR0lTVEVSICAgICAgICAgIDIyCisjZGVmaW5lIFBIWV9QSFlfQ09OVFJPTCAgICAgICAgICAgIDB4MTcJLy8jZGVmaW5lIFRSVV9WTUlfUEhZX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgICAyMworI2RlZmluZSBQSFlfSU5URVJSVVBUX01BU0sgICAgICAgICAweDE4CS8vI2RlZmluZSBUUlVfVk1JX0lOVEVSUlVQVF9NQVNLX1JFR0lTVEVSICAgICAgICAgMjQKKyNkZWZpbmUgUEhZX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgMHgxOQkvLyNkZWZpbmUgVFJVX1ZNSV9JTlRFUlJVUFRfU1RBVFVTX1JFR0lTVEVSICAgICAgIDI1CisjZGVmaW5lIFBIWV9QSFlfU1RBVFVTICAgICAgICAgICAgIDB4MUEJLy8jZGVmaW5lIFRSVV9WTUlfUEhZX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgICAyNgorI2RlZmluZSBQSFlfTEVEXzEgICAgICAgICAgICAgICAgICAweDFCCS8vI2RlZmluZSBUUlVfVk1JX0xFRF9DT05UUk9MXzFfUkVHSVNURVIgICAgICAgICAgMjcKKyNkZWZpbmUgUEhZX0xFRF8yICAgICAgICAgICAgICAgICAgMHgxQwkvLyNkZWZpbmUgVFJVX1ZNSV9MRURfQ09OVFJPTF8yX1JFR0lTVEVSICAgICAgICAgIDI4CisJCQkJCS8vI2RlZmluZSBUUlVfVk1JX0xJTktfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgICAgMjkKKwkJCQkJLy8jZGVmaW5lIFRSVV9WTUlfVElNSU5HX0NPTlRST0xfUkVHSVNURVIKKworLyogUHJvdG90eXBlcyBmb3IgUEhZIGFjY2VzcyByb3V0aW5lcyAqLwordm9pZCBFVDEzMTBfUGh5SW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBFVDEzMTBfUGh5UmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRVQxMzEwX1BoeVBvd2VyRG93bihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZG93bik7Cit2b2lkIEVUMTMxMF9QaHlBdXRvTmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBlbmFibGUpOwordm9pZCBFVDEzMTBfUGh5RHVwbGV4TW9kZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBkdXBsZXgpOwordm9pZCBFVDEzMTBfUGh5U3BlZWRTZWxlY3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BlZWQpOwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHUxNiBkdXBsZXgpOwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSB1MTYgZHVwbGV4KTsKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCXUxNiBkdXBsZXgpOwordm9pZCBFVDEzMTBfUGh5TGlua1N0YXR1cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgIHU4ICp1Y0xpbmtTdGF0dXMsCisJCQkgIHUzMiAqdWlBdXRvTmVnLAorCQkJICB1MzIgKnVpTGlua1NwZWVkLAorCQkJICB1MzIgKnVpRHVwbGV4TW9kZSwKKwkJCSAgdTMyICp1aU1kaU1kaXgsCisJCQkgIHUzMiAqdWlNYXN0ZXJTbGF2ZSwgdTMyICp1aVBvbGFyaXR5KTsKK3ZvaWQgRVQxMzEwX1BoeUFuZE9yUmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCXUxNiByZWdudW0sIHUxNiBhbmRNYXNrLCB1MTYgb3JNYXNrKTsKK3ZvaWQgRVQxMzEwX1BoeUFjY2Vzc01pQml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgIHUxNiBhY3Rpb24sCisJCQkgICB1MTYgcmVnbnVtLCB1MTYgYml0bnVtLCB1OCAqdmFsdWUpOworCisjZW5kaWYgLyogX0VUMTMxMF9QSFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MzliYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9wbS5jIC0gQWxsIHBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCBjb2RlIChub3QgY29tcGxldGVseSBpbXBsZW1lbnRlZCkKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKioKKyAqIEVuYWJsZVBoeUNvbWEgLSBjYWxsZWQgd2hlbiBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIGRyaXZlciByZWNlaXZlIGFuIHBoeSBzdGF0dXMgY2hhbmdlIGludGVycnVwdCB3aGlsZSBpbiBEMCBhbmQgY2hlY2sgdGhhdAorICogcGh5X3N0YXR1cyBpcyBkb3duLgorICoKKyAqICAgICAgICAgIC0tIGdhdGUgb2ZmIEpBR0NvcmU7CisgKiAgICAgICAgICAtLSBzZXQgZ2lnRSBQSFkgaW4gQ29tYSBtb2RlCisgKiAgICAgICAgICAtLSB3YWtlIG9uIHBoeV9pbnRlcnJ1cHQ7IFBlcmZvcm0gc29mdHdhcmUgcmVzZXQgSkFHQ29yZSwKKyAqICAgICAgICAgICAgIHJlLWluaXRpYWxpemUgamFnY29yZSBhbmQgZ2lnRSBQSFkKKyAqCisgKiAgICAgIEFkZCBEMC1BU1BNLVBoeUxpbmtEb3duIFN1cHBvcnQ6CisgKiAgICAgICAgICAtLSB3aGlsZSBpbiBEMCwgd2hlbiB0aGVyZSBpcyBhIHBoeV9pbnRlcnJ1cHQgaW5kaWNhdGluZyBwaHkgbGluaworICogICAgICAgICAgICAgZG93biBzdGF0dXMsIGNhbGwgdGhlIE1QU2V0UGh5Q29tYSByb3V0aW5lIHRvIGVudGVyIHRoaXMgYWN0aXZlCisgKiAgICAgICAgICAgICBzdGF0ZSBwb3dlciBzYXZpbmcgbW9kZQorICogICAgICAgICAgLS0gd2hpbGUgaW4gRDAtQVNQTS1QaHlMaW5rRG93biBtb2RlLCB3aGVuIHRoZXJlIGlzIGEgcGh5X2ludGVycnVwdAorICogICAgICAgaW5kaWNhdGluZyBsaW5rdXAgc3RhdHVzLCBjYWxsIHRoZSBNUERpc2FibGVQaHlDb21hIHJvdXRpbmUgdG8KKyAqICAgICAgICAgICAgIHJlc3RvcmUgSkFHQ29yZSBhbmQgZ2lnRSBQSFkKKyAqLwordm9pZCBFbmFibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJUE1fQ1NSX3QgR2xvYmFsUG1DU1I7CisJaW50MzJfdCBMb29wQ291bnRlciA9IDEwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCUdsb2JhbFBtQ1NSLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCS8qIFNhdmUgdGhlIEdiRSBQSFkgc3BlZWQgYW5kIGR1cGxleCBtb2Rlcy4gTmVlZCB0byByZXN0b3JlIHRoaXMKKwkgKiB3aGVuIGNhYmxlIGlzIHBsdWdnZWQgYmFjayBpbgorCSAqLworCXBBZGFwdGVyLT5Qb01nbXQuUG93ZXJEb3duU3BlZWQgPSBwQWRhcHRlci0+QWlGb3JjZVNwZWVkOworCXBBZGFwdGVyLT5Qb01nbXQuUG93ZXJEb3duRHVwbGV4ID0gcEFkYXB0ZXItPkFpRm9yY2VEcHg7CisKKwkvKiBTdG9wIHNlbmRpbmcgcGFja2V0cy4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFncyk7CisJTVBfU0VUX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xPV0VSX1BPV0VSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzKTsKKworCS8qIFdhaXQgZm9yIG91dHN0YW5kaW5nIFJlY2VpdmUgcGFja2V0cyAqLworCXdoaWxlICgoTVBfR0VUX1JDVl9SRUYocEFkYXB0ZXIpICE9IDApICYmIChMb29wQ291bnRlci0tID4gMCkpIHsKKwkJbWRlbGF5KDIpOworCX0KKworCS8qIEdhdGUgb2ZmIEpBR0NvcmUgMyBjbG9jayBkb21haW5zICovCisJR2xvYmFsUG1DU1IuYml0cy5wbV9zeXNjbGtfZ2F0ZSA9IDA7CisJR2xvYmFsUG1DU1IuYml0cy5wbV90eGNsa19nYXRlID0gMDsKKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3J4Y2xrX2dhdGUgPSAwOworCXdyaXRlbChHbG9iYWxQbUNTUi52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCS8qIFByb2dyYW0gZ2lnRSBQSFkgaW4gdG8gQ29tYSBtb2RlICovCisJR2xvYmFsUG1DU1IuYml0cy5wbV9waHlfc3dfY29tYSA9IDE7CisJd3JpdGVsKEdsb2JhbFBtQ1NSLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBEaXNhYmxlUGh5Q29tYSAtIERpc2FibGUgdGhlIFBoeSBDb21hIE1vZGUKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBEaXNhYmxlUGh5Q29tYShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVBNX0NTUl90IEdsb2JhbFBtQ1NSOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCUdsb2JhbFBtQ1NSLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCS8qIERpc2FibGUgcGh5X3N3X2NvbWEgcmVnaXN0ZXIgYW5kIHJlLWVuYWJsZSBKQUdDb3JlIGNsb2NrcyAqLworCUdsb2JhbFBtQ1NSLmJpdHMucG1fc3lzY2xrX2dhdGUgPSAxOworCUdsb2JhbFBtQ1NSLmJpdHMucG1fdHhjbGtfZ2F0ZSA9IDE7CisJR2xvYmFsUG1DU1IuYml0cy5wbV9yeGNsa19nYXRlID0gMTsKKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3BoeV9zd19jb21hID0gMDsKKwl3cml0ZWwoR2xvYmFsUG1DU1IudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisKKwkvKiBSZXN0b3JlIHRoZSBHYkUgUEhZIHNwZWVkIGFuZCBkdXBsZXggbW9kZXM7CisJICogUmVzZXQgSkFHQ29yZTsgcmUtY29uZmlndXJlIGFuZCBpbml0aWFsaXplIEpBR0NvcmUgYW5kIGdpZ0UgUEhZCisJICovCisJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IHBBZGFwdGVyLT5Qb01nbXQuUG93ZXJEb3duU3BlZWQ7CisJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSBwQWRhcHRlci0+UG9NZ210LlBvd2VyRG93bkR1cGxleDsKKworCS8qIFJlLWluaXRpYWxpemUgdGhlIHNlbmQgc3RydWN0dXJlcyAqLworCWV0MTMxeF9pbml0X3NlbmQocEFkYXB0ZXIpOworCisJLyogUmVzZXQgdGhlIFJGRCBsaXN0IGFuZCByZS1zdGFydCBSVSAgKi8KKwlldDEzMXhfcmVzZXRfcmVjdihwQWRhcHRlcik7CisKKwkvKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdG8gdGhlIHN0YXRlIGl0IHdhcyBkdXJpbmcgaW5pdCBwcmlvciB0bworICAgICAgICAgKiBhdXRvbmVnb3RpYXRpb24gYmVpbmcgY29tcGxldGUuICBUaGlzIHdheSwgd2hlbiB3ZSBnZXQgdGhlIGF1dG8tbmVnCisgICAgICAgICAqIGNvbXBsZXRlIGludGVycnVwdCwgd2UgY2FuIGNvbXBsZXRlIGluaXQgYnkgY2FsbGluZyBDb25maWdNYWNSRUdTMi4KKyAgICAgICAgICovCisJZXQxMzF4X3NvZnRfcmVzZXQocEFkYXB0ZXIpOworCisJLyogc2V0dXAgZXQxMzEwIGFzIHBlciB0aGUgZG9jdW1lbnRhdGlvbiA/PyAqLworCWV0MTMxeF9hZGFwdGVyX3NldHVwKHBBZGFwdGVyKTsKKworCS8qIEFsbG93IFR4IHRvIHJlc3RhcnQgKi8KKwlNUF9DTEVBUl9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MT1dFUl9QT1dFUik7CisKKwkvKiBOZWVkIHRvIHJlLWVuYWJsZSBSeC4gKi8KKwlldDEzMXhfcnhfZG1hX2VuYWJsZShwQWRhcHRlcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODAyMzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcG0uaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gcG93ZXIKKyAqICAgICAgICAgICAgICAgbWFuYWdlbWVudC4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfRVQxMzEwX1BNX0hfCisjZGVmaW5lIF9FVDEzMTBfUE1fSF8KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisjZGVmaW5lIE1BWF9XT0xfUEFDS0VUX1NJWkUgICAgMHg4MAorI2RlZmluZSBNQVhfV09MX01BU0tfU0laRSAgICAgICggTUFYX1dPTF9QQUNLRVRfU0laRSAvIDggKQorI2RlZmluZSBOVU1fV09MX1BBVFRFUk5TICAgICAgIDB4NQorI2RlZmluZSBDUkMxNl9QT0xZICAgICAgICAgICAgIDB4MTAyMQorCisvKiBEZWZpbml0aW9uIG9mIE5ESVNfREVWSUNFX1BPV0VSX1NUQVRFICovCit0eXBlZGVmIGVudW0geworCU5kaXNEZXZpY2VTdGF0ZVVuc3BlY2lmaWVkID0gMCwKKwlOZGlzRGV2aWNlU3RhdGVEMCwKKwlOZGlzRGV2aWNlU3RhdGVEMSwKKwlOZGlzRGV2aWNlU3RhdGVEMiwKKwlOZGlzRGV2aWNlU3RhdGVEMworfSBORElTX0RFVklDRV9QT1dFUl9TVEFURTsKKwordHlwZWRlZiBzdHJ1Y3QgX01QX1BPV0VSX01HTVQgeworCS8qIHZhcmlhYmxlIHB1dHRpbmcgdGhlIHBoeSBpbnRvIGNvbWEgbW9kZSB3aGVuIGJvb3QgdXAgd2l0aCBubyBjYWJsZQorCSAqIHBsdWdnZWQgaW4gYWZ0ZXIgNSBzZWNvbmRzCisJICovCisJdTggVHJhbnNQaHlDb21hTW9kZU9uQm9vdDsKKworCS8qIEFycmF5IGhvbGRpbmcgdGhlIGZpdmUgQ1JDIHZhbHVlcyB0aGF0IHRoZSBkZXZpY2UgaXMgY3VycmVudGx5CisJICogdXNpbmcgZm9yIFdPTC4gIFRoaXMgd2lsbCBiZSBxdWVyaWVkIHdoZW4gYSBwYXR0ZXJuIGlzIHRvIGJlCisJICogcmVtb3ZlZC4KKwkgKi8KKwl1MzIgbG9jYWxXb2xBbmRDcmMwOworCXUxNiBXT0xQYXR0ZXJuTGlzdFtOVU1fV09MX1BBVFRFUk5TXTsKKwl1OCBXT0xNYXNrTGlzdFtOVU1fV09MX1BBVFRFUk5TXVtNQVhfV09MX01BU0tfU0laRV07CisJdTMyIFdPTE1hc2tTaXplW05VTV9XT0xfUEFUVEVSTlNdOworCisJLyogSVAgYWRkcmVzcyAqLworCXVuaW9uIHsKKwkJdTMyIHUzMjsKKwkJdTggdThbNF07CisJfSBJUEFkZHJlc3M7CisKKwkvKiBDdXJyZW50IFBvd2VyIHN0YXRlIG9mIHRoZSBhZGFwdGVyLiAqLworCU5ESVNfREVWSUNFX1BPV0VSX1NUQVRFIFBvd2VyU3RhdGU7CisJYm9vbCBXT0xTdGF0ZTsKKwlib29sIFdPTEVuYWJsZWQ7CisJYm9vbCBGYWlsZWQxMEhhbGY7CisJYm9vbCBiRmFpbGVkU3RhdGVUcmFuc2l0aW9uOworCisJLyogTmV4dCB0d28gdXNlZCB0byBzYXZlIHBvd2VyIGluZm9ybWF0aW9uIGF0IHBvd2VyIGRvd24uIFRoaXMKKwkgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZHVyaW5nIHBvd2VyIHVwIHRvIHNldCB1cCBwYXJ0cyBvZiBQb3dlcgorCSAqIE1hbmFnZW1lbnQgaW4gSkFHQ29yZQorCSAqLworCXUzMiB0eF9lbjsKKwl1MzIgcnhfZW47CisJdTE2IFBvd2VyRG93blNwZWVkOworCXU4IFBvd2VyRG93bkR1cGxleDsKK30gTVBfUE9XRVJfTUdNVCwgKlBNUF9QT1dFUl9NR01UOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAoIElTIFRIRVJFIEEgV0FZIFRPIERPIFRISVMgV0lUSCBBIFRZUEVERUY/Pz8gKQorICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK3UxNiBDYWxjdWxhdGVDQ0lUQ1JDMTYodTggKlBhdHRlcm4sIHU4ICpNYXNrLCB1MzIgTWFza1NpemUpOwordm9pZCBFbmFibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIERpc2FibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfRVQxMzEwX1BNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk4ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtMCwwICsxLDEzOTEgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3J4LmMgLSBSb3V0aW5lcyB1c2VkIHRvIHBlcmZvcm0gZGF0YSByZWNlcHRpb24KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworCit2b2lkIG5pY19yZXR1cm5fcmZkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9SRkQgcE1wUmZkKTsKKworLyoqCisgKiBldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICoKKyAqIEFsbG9jYXRlcyBGcmVlIGJ1ZmZlciByaW5nIDEgZm9yIHN1cmUsIGZyZWUgYnVmZmVyIHJpbmcgMCBpZiByZXF1aXJlZCwKKyAqIGFuZCB0aGUgUGFja2V0IFN0YXR1cyBSaW5nLgorICovCitpbnQgZXQxMzF4X3J4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCXVpbnQzMl90IE91dGVyTG9vcCwgSW5uZXJMb29wOworCXVpbnQzMl90IGJ1ZnNpemU7CisJdWludDMyX3QgcGt0U3RhdFJpbmdTaXplLCBGQlJDaHVua1NpemU7CisJUlhfUklOR190ICpyeF9yaW5nOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KKwlyeF9yaW5nID0gKFJYX1JJTkdfdCAqKSAmIGFkYXB0ZXItPlJ4UmluZzsKKworCS8qIEFsbG9jIG1lbW9yeSBmb3IgdGhlIGxvb2t1cCB0YWJsZSAqLworI2lmZGVmIFVTRV9GQlIwCisJcnhfcmluZy0+RmJyWzBdID0ga21hbGxvYyhzaXplb2YoRkJSTE9PS1VQVEFCTEUpLCBHRlBfS0VSTkVMKTsKKyNlbmRpZgorCisJcnhfcmluZy0+RmJyWzFdID0ga21hbGxvYyhzaXplb2YoRkJSTE9PS1VQVEFCTEUpLCBHRlBfS0VSTkVMKTsKKworCS8qIFRoZSBmaXJzdCB0aGluZyB3ZSB3aWxsIGRvIGlzIGNvbmZpZ3VyZSB0aGUgc2l6ZXMgb2YgdGhlIGJ1ZmZlcgorCSAqIHJpbmdzLiBUaGVzZSB3aWxsIGNoYW5nZSBiYXNlZCBvbiBqdW1ibyBwYWNrZXQgc3VwcG9ydC4gIExhcmdlcgorCSAqIGp1bWJvIHBhY2tldHMgaW5jcmVhc2VzIHRoZSBzaXplIG9mIGVhY2ggZW50cnkgaW4gRkJSMCwgYW5kIHRoZQorCSAqIG51bWJlciBvZiBlbnRyaWVzIGluIEZCUjAsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgZGVjcmVhc2luZyB0aGUKKwkgKiBudW1iZXIgb2YgZW50cmllcyBpbiBGQlIxLgorCSAqCisJICogRkJSMSBob2xkcyAibGFyZ2UiIGZyYW1lcywgRkJSMCBob2xkcyAic21hbGwiIGZyYW1lcy4gIElmIEZCUjEKKwkgKiBlbnRyaWVzIGFyZSBodWdlIGluIG9yZGVyIHRvIGFjY29tb2RhdGUgYSAianVtYm8iIGZyYW1lLCB0aGVuIGl0CisJICogd2lsbCBoYXZlIGxlc3MgZW50cmllcy4gIENvbnZlcnNlbHksIEZCUjEgd2lsbCBub3cgYmUgcmVsaWVkIHVwb24KKwkgKiB0byBjYXJyeSBtb3JlICJub3JtYWwiIGZyYW1lcywgdGh1cyBpdCdzIGVudHJ5IHNpemUgYWxzbyBpbmNyZWFzZXMKKwkgKiBhbmQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGdvZXMgdXAgdG9vIChzaW5jZSBpdCBub3cgY2FycmllcworCSAqICJzbWFsbCIgKyAicmVndWxhciIgcGFja2V0cy4KKwkgKgorCSAqIEluIHRoaXMgc2NoZW1lLCB3ZSB0cnkgdG8gbWFpbnRhaW4gNTEyIGVudHJpZXMgYmV0d2VlbiB0aGUgdHdvCisJICogcmluZ3MuIEFsc28sIEZCUjEgcmVtYWlucyBhIGNvbnN0YW50IHNpemUgLSB3aGVuIGl0J3Mgc2l6ZSBkb3VibGVzCisJICogdGhlIG51bWJlciBvZiBlbnRyaWVzIGhhbHZlcy4gIEZCUjAgaW5jcmVhc2VzIGluIHNpemUsIGhvd2V2ZXIuCisJICovCisKKwlpZiAoYWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA8IDIwNDgpIHsKKyNpZmRlZiBVU0VfRkJSMAorCQlyeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSA9IDI1NjsKKwkJcnhfcmluZy0+RmJyME51bUVudHJpZXMgPSA1MTI7CisjZW5kaWYKKwkJcnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgPSAyMDQ4OworCQlyeF9yaW5nLT5GYnIxTnVtRW50cmllcyA9IDUxMjsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPCA0MDk2KSB7CisjaWZkZWYgVVNFX0ZCUjAKKwkJcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUgPSA1MTI7CisJCXJ4X3JpbmctPkZicjBOdW1FbnRyaWVzID0gMTAyNDsKKyNlbmRpZgorCQlyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSA9IDQwOTY7CisJCXJ4X3JpbmctPkZicjFOdW1FbnRyaWVzID0gNTEyOworCX0gZWxzZSB7CisjaWZkZWYgVVNFX0ZCUjAKKwkJcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUgPSAxMDI0OworCQlyeF9yaW5nLT5GYnIwTnVtRW50cmllcyA9IDc2ODsKKyNlbmRpZgorCQlyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSA9IDE2Mzg0OworCQlyeF9yaW5nLT5GYnIxTnVtRW50cmllcyA9IDEyODsKKwl9CisKKyNpZmRlZiBVU0VfRkJSMAorCWFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzID0gYWRhcHRlci0+UnhSaW5nLkZicjBOdW1FbnRyaWVzICsKKwkgICAgYWRhcHRlci0+UnhSaW5nLkZicjFOdW1FbnRyaWVzOworI2Vsc2UKKwlhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllcyA9IGFkYXB0ZXItPlJ4UmluZy5GYnIxTnVtRW50cmllczsKKyNlbmRpZgorCisJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMSAqLworCWJ1ZnNpemUgPSAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyMU51bUVudHJpZXMpICsgMHhmZmY7CisJcnhfcmluZy0+cEZicjFSaW5nVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgIGJ1ZnNpemUsCisJCQkJCQkgICAgJnJ4X3JpbmctPnBGYnIxUmluZ1BhKTsKKwlpZiAoIXJ4X3JpbmctPnBGYnIxUmluZ1ZhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMVxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNhdmUgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogTk9URTogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlCisJICogYmVmb3JlIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJcnhfcmluZy0+RmJyMVJlYWxwYSA9IHJ4X3JpbmctPnBGYnIxUmluZ1BhOworCisJLyogQWxpZ24gRnJlZSBCdWZmZXIgUmluZyAxIG9uIGEgNEsgYm91bmRhcnkgKi8KKwlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCSAgICAgICZyeF9yaW5nLT5GYnIxUmVhbHBhLAorCQkJCSAgICAgICZyeF9yaW5nLT5GYnIxb2Zmc2V0LCAweDBGRkYpOworCisJcnhfcmluZy0+cEZicjFSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wRmJyMVJpbmdWYSArCisJCQkJCXJ4X3JpbmctPkZicjFvZmZzZXQpOworCisjaWZkZWYgVVNFX0ZCUjAKKwkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3IgRnJlZSBCdWZmZXIgUmluZyAwICovCisJYnVmc2l6ZSA9IChzaXplb2YoRkJSX0RFU0NfdCkgKiByeF9yaW5nLT5GYnIwTnVtRW50cmllcykgKyAweGZmZjsKKwlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgYnVmc2l6ZSwKKwkJCQkJCSAgICAmcnhfcmluZy0+cEZicjBSaW5nUGEpOworCWlmICghcnhfcmluZy0+cEZicjBSaW5nVmEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgRnJlZSBCdWZmZXIgUmluZyAwXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUgYmVmb3JlCisJICogc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwlyeF9yaW5nLT5GYnIwUmVhbHBhID0gcnhfcmluZy0+cEZicjBSaW5nUGE7CisKKwkvKiBBbGlnbiBGcmVlIEJ1ZmZlciBSaW5nIDAgb24gYSA0SyBib3VuZGFyeSAqLworCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJICAgICAgJnJ4X3JpbmctPkZicjBSZWFscGEsCisJCQkJICAgICAgJnJ4X3JpbmctPkZicjBvZmZzZXQsIDB4MEZGRik7CisKKwlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBGYnIwUmluZ1ZhICsKKwkJCQkJcnhfcmluZy0+RmJyMG9mZnNldCk7CisjZW5kaWYKKworCWZvciAoT3V0ZXJMb29wID0gMDsgT3V0ZXJMb29wIDwgKHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzIC8gRkJSX0NIVU5LUyk7CisJICAgICBPdXRlckxvb3ArKykgeworCQl1aW50NjRfdCBGYnIxT2Zmc2V0OworCQl1aW50NjRfdCBGYnIxVGVtcFBhOworCQl1aW50MzJfdCBGYnIxQWxpZ247CisKKwkJLyogVGhpcyBjb2RlIGFsbG9jYXRlcyBhbiBhcmVhIG9mIG1lbW9yeSBiaWcgZW5vdWdoIGZvciBOCisJCSAqIGZyZWUgYnVmZmVycyArIChidWZmZXJfc2l6ZSAtIDEpIHNvIHRoYXQgdGhlIGJ1ZmZlcnMgY2FuCisJCSAqIGJlIGFsaWduZWQgb24gNGsgYm91bmRhcmllcy4gIElmIGVhY2ggYnVmZmVyIHdlcmUgYWxpZ25lZAorCQkgKiB0byBhIGJ1ZmZlcl9zaXplIGJvdW5kYXJ5LCB0aGUgZWZmZWN0IHdvdWxkIGJlIHRvIGRvdWJsZQorCQkgKiB0aGUgc2l6ZSBvZiBGQlIwLiAgQnkgYWxsb2NhdGluZyBOIGJ1ZmZlcnMgYXQgb25jZSwgd2UKKwkJICogcmVkdWNlIHRoaXMgb3ZlcmhlYWQuCisJCSAqLworCQlpZiAocnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgPiA0MDk2KSB7CisJCQlGYnIxQWxpZ24gPSA0MDk2OworCQl9IGVsc2UgeworCQkJRmJyMUFsaWduID0gcnhfcmluZy0+RmJyMUJ1ZmZlclNpemU7CisJCX0KKworCQlGQlJDaHVua1NpemUgPQorCQkgICAgKEZCUl9DSFVOS1MgKiByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSkgKyBGYnIxQWxpZ24gLSAxOworCQlyeF9yaW5nLT5GYnIxTWVtVmFbT3V0ZXJMb29wXSA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBGQlJDaHVua1NpemUsCisJCQkJCSAmcnhfcmluZy0+RmJyMU1lbVBhW091dGVyTG9vcF0pOworCisJCWlmICghcnhfcmluZy0+RmJyMU1lbVZhW091dGVyTG9vcF0pIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCBhbGxvYyBtZW1vcnlcbiIpOworCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogU2VlIE5PVEUgaW4gIlNhdmUgUGh5c2ljYWwgQWRkcmVzcyIgY29tbWVudCBhYm92ZSAqLworCQlGYnIxVGVtcFBhID0gcnhfcmluZy0+RmJyMU1lbVBhW091dGVyTG9vcF07CisKKwkJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgICAgJkZicjFUZW1wUGEsCisJCQkJCSAgICAgICZGYnIxT2Zmc2V0LCAoRmJyMUFsaWduIC0gMSkpOworCisJCWZvciAoSW5uZXJMb29wID0gMDsgSW5uZXJMb29wIDwgRkJSX0NIVU5LUzsgSW5uZXJMb29wKyspIHsKKwkJCXVpbnQzMl90IGluZGV4ID0gKE91dGVyTG9vcCAqIEZCUl9DSFVOS1MpICsgSW5uZXJMb29wOworCisJCQkvKiBTYXZlIHRoZSBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhpcyBpbmRleCBmb3IgcXVpY2sKKwkJCSAqIGFjY2VzcyBsYXRlcgorCQkJICovCisJCQlyeF9yaW5nLT5GYnJbMV0tPlZhW2luZGV4XSA9CisJCQkgICAgKHVpbnQ4X3QgKikgcnhfcmluZy0+RmJyMU1lbVZhW091dGVyTG9vcF0gKworCQkJICAgIChJbm5lckxvb3AgKiByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSkgKyBGYnIxT2Zmc2V0OworCisJCQkvKiBub3cgc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW4gdGhlIGRlc2NyaXB0b3IKKwkJCSAqIHNvIHRoZSBkZXZpY2UgY2FuIGFjY2VzcyBpdAorCQkJICovCisJCQlyeF9yaW5nLT5GYnJbMV0tPlBBSGlnaFtpbmRleF0gPQorCQkJICAgICh1aW50MzJfdCkgKEZicjFUZW1wUGEgPj4gMzIpOworCQkJcnhfcmluZy0+RmJyWzFdLT5QQUxvd1tpbmRleF0gPSAodWludDMyX3QpIEZicjFUZW1wUGE7CisKKwkJCUZicjFUZW1wUGEgKz0gcnhfcmluZy0+RmJyMUJ1ZmZlclNpemU7CisKKwkJCXJ4X3JpbmctPkZiclsxXS0+QnVmZmVyMVtpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPkZiclsxXS0+VmFbaW5kZXhdOworCQkJcnhfcmluZy0+RmJyWzFdLT5CdWZmZXIyW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+RmJyWzFdLT5WYVtpbmRleF0gLSA0OworCQl9CisJfQorCisjaWZkZWYgVVNFX0ZCUjAKKwkvKiBTYW1lIGZvciBGQlIwIChpZiBpbiB1c2UpICovCisJZm9yIChPdXRlckxvb3AgPSAwOyBPdXRlckxvb3AgPCAocnhfcmluZy0+RmJyME51bUVudHJpZXMgLyBGQlJfQ0hVTktTKTsKKwkgICAgIE91dGVyTG9vcCsrKSB7CisJCXVpbnQ2NF90IEZicjBPZmZzZXQ7CisJCXVpbnQ2NF90IEZicjBUZW1wUGE7CisKKwkJRkJSQ2h1bmtTaXplID0gKChGQlJfQ0hVTktTICsgMSkgKiByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSkgLSAxOworCQlyeF9yaW5nLT5GYnIwTWVtVmFbT3V0ZXJMb29wXSA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBGQlJDaHVua1NpemUsCisJCQkJCSAmcnhfcmluZy0+RmJyME1lbVBhW091dGVyTG9vcF0pOworCisJCWlmICghcnhfcmluZy0+RmJyME1lbVZhW091dGVyTG9vcF0pIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCBhbGxvYyBtZW1vcnlcbiIpOworCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogU2VlIE5PVEUgaW4gIlNhdmUgUGh5c2ljYWwgQWRkcmVzcyIgY29tbWVudCBhYm92ZSAqLworCQlGYnIwVGVtcFBhID0gcnhfcmluZy0+RmJyME1lbVBhW091dGVyTG9vcF07CisKKwkJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgICAgJkZicjBUZW1wUGEsCisJCQkJCSAgICAgICZGYnIwT2Zmc2V0LAorCQkJCQkgICAgICByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSAtIDEpOworCisJCWZvciAoSW5uZXJMb29wID0gMDsgSW5uZXJMb29wIDwgRkJSX0NIVU5LUzsgSW5uZXJMb29wKyspIHsKKwkJCXVpbnQzMl90IGluZGV4ID0gKE91dGVyTG9vcCAqIEZCUl9DSFVOS1MpICsgSW5uZXJMb29wOworCisJCQlyeF9yaW5nLT5GYnJbMF0tPlZhW2luZGV4XSA9CisJCQkgICAgKHVpbnQ4X3QgKikgcnhfcmluZy0+RmJyME1lbVZhW091dGVyTG9vcF0gKworCQkJICAgIChJbm5lckxvb3AgKiByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSkgKyBGYnIwT2Zmc2V0OworCisJCQlyeF9yaW5nLT5GYnJbMF0tPlBBSGlnaFtpbmRleF0gPQorCQkJICAgICh1aW50MzJfdCkgKEZicjBUZW1wUGEgPj4gMzIpOworCQkJcnhfcmluZy0+RmJyWzBdLT5QQUxvd1tpbmRleF0gPSAodWludDMyX3QpIEZicjBUZW1wUGE7CisKKwkJCUZicjBUZW1wUGEgKz0gcnhfcmluZy0+RmJyMEJ1ZmZlclNpemU7CisKKwkJCXJ4X3JpbmctPkZiclswXS0+QnVmZmVyMVtpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPkZiclswXS0+VmFbaW5kZXhdOworCQkJcnhfcmluZy0+RmJyWzBdLT5CdWZmZXIyW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+RmJyWzBdLT5WYVtpbmRleF0gLSA0OworCQl9CisJfQorI2VuZGlmCisKKwkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3IgRklGTyBvZiBQYWNrZXQgU3RhdHVzIHJpbmcgZW50cmllcyAqLworCXBrdFN0YXRSaW5nU2l6ZSA9CisJICAgIHNpemVvZihQS1RfU1RBVF9ERVNDX3QpICogYWRhcHRlci0+UnhSaW5nLlBzck51bUVudHJpZXM7CisKKwlyeF9yaW5nLT5wUFNSaW5nVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICBwa3RTdGF0UmluZ1NpemUgKyAweDBmZmYsCisJCQkJCQkgICZyeF9yaW5nLT5wUFNSaW5nUGEpOworCisJaWYgKCFyeF9yaW5nLT5wUFNSaW5nVmEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgUGFja2V0IFN0YXR1cyBSaW5nXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFIDogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlIGJlZm9yZQorCSAqIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJcnhfcmluZy0+cFBTUmluZ1JlYWxQYSA9IHJ4X3JpbmctPnBQU1JpbmdQYTsKKworCS8qIEFsaWduIFBhY2tldCBTdGF0dXMgUmluZyBvbiBhIDRLIGJvdW5kYXJ5ICovCisJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkgICAgICAmcnhfcmluZy0+cFBTUmluZ1JlYWxQYSwKKwkJCQkgICAgICAmcnhfcmluZy0+cFBTUmluZ09mZnNldCwgMHgwRkZGKTsKKworCXJ4X3JpbmctPnBQU1JpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBQU1JpbmdWYSArCisJCQkJICAgICAgcnhfcmluZy0+cFBTUmluZ09mZnNldCk7CisKKwkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3Igd3JpdGViYWNrIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCXJ4X3JpbmctPnBSeFN0YXR1c1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICBzaXplb2YoUlhfU1RBVFVTX0JMT0NLX3QpICsKKwkJCQkJCSAgICAweDcsICZyeF9yaW5nLT5wUnhTdGF0dXNQYSk7CisJaWYgKCFyeF9yaW5nLT5wUnhTdGF0dXNWYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBTdGF0dXMgQmxvY2tcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTYXZlIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlyeF9yaW5nLT5SeFN0YXR1c1JlYWxQQSA9IHJ4X3JpbmctPnBSeFN0YXR1c1BhOworCisJLyogQWxpZ24gd3JpdGUgYmFjayBvbiBhbiA4IGJ5dGUgYm91bmRhcnkgKi8KKwlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCSAgICAgICZyeF9yaW5nLT5SeFN0YXR1c1JlYWxQQSwKKwkJCQkgICAgICAmcnhfcmluZy0+UnhTdGF0dXNPZmZzZXQsIDB4MDcpOworCisJcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wUnhTdGF0dXNWYSArCisJCQkJCXJ4X3JpbmctPlJ4U3RhdHVzT2Zmc2V0KTsKKwlyeF9yaW5nLT5OdW1SZmQgPSBOSUNfREVGQVVMVF9OVU1fUkZEOworCisJLyogUmVjdgorCSAqIHBjaV9wb29sX2NyZWF0ZSBpbml0aWFsaXplcyBhIGxvb2thc2lkZSBsaXN0LiBBZnRlciBzdWNjZXNzZnVsCisJICogY3JlYXRpb24sIG5vbnBhZ2VkIGZpeGVkLXNpemUgYmxvY2tzIGNhbiBiZSBhbGxvY2F0ZWQgZnJvbSBhbmQKKwkgKiBmcmVlZCB0byB0aGUgbG9va2FzaWRlIGxpc3QuCisJICogUkZEcyB3aWxsIGJlIGFsbG9jYXRlZCBmcm9tIHRoaXMgcG9vbC4KKwkgKi8KKwlyeF9yaW5nLT5SZWN2TG9va2FzaWRlID0ga21lbV9jYWNoZV9jcmVhdGUoYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJCQkJICAgc2l6ZW9mKE1QX1JGRCksCisJCQkJCQkgICAwLAorCQkJCQkJICAgU0xBQl9DQUNIRV9ETUEgfAorCQkJCQkJICAgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCQkJICAgTlVMTCk7CisKKwlNUF9TRVRfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9SRUNWX0xPT0tBU0lERSk7CisKKwkvKiBUaGUgUkZEcyBhcmUgZ29pbmcgdG8gYmUgcHV0IG9uIGxpc3RzIGxhdGVyIG9uLCBzbyBpbml0aWFsaXplIHRoZQorCSAqIGxpc3RzIG5vdy4KKwkgKi8KKwlJTklUX0xJU1RfSEVBRCgmcnhfcmluZy0+UmVjdkxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyeF9yaW5nLT5SZWN2UGVuZGluZ0xpc3QpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlIC0gRnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBtb2R1bGUuCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCXVpbnQzMl90IGluZGV4OworCXVpbnQzMl90IGJ1ZnNpemU7CisJdWludDMyX3QgcGt0U3RhdFJpbmdTaXplOworCVBNUF9SRkQgcE1wUmZkOworCVJYX1JJTkdfdCAqcnhfcmluZzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCisJcnhfcmluZyA9IChSWF9SSU5HX3QgKikgJiBhZGFwdGVyLT5SeFJpbmc7CisKKwkvKiBGcmVlIFJGRHMgYW5kIGFzc29jaWF0ZWQgcGFja2V0IGRlc2NyaXB0b3JzICovCisJREJHX0FTU0VSVChyeF9yaW5nLT5uUmVhZHlSZWN2ID09IHJ4X3JpbmctPk51bVJmZCk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJ4X3JpbmctPlJlY3ZMaXN0KSkgeworCQlwTXBSZmQgPSAoTVBfUkZEICopIGxpc3RfZW50cnkocnhfcmluZy0+UmVjdkxpc3QubmV4dCwKKwkJCQkJICAgICAgIE1QX1JGRCwgbGlzdF9ub2RlKTsKKworCQlsaXN0X2RlbCgmcE1wUmZkLT5saXN0X25vZGUpOworCQlldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlKGFkYXB0ZXIsIHBNcFJmZCk7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZyeF9yaW5nLT5SZWN2UGVuZGluZ0xpc3QpKSB7CisJCXBNcFJmZCA9IChNUF9SRkQgKikgbGlzdF9lbnRyeShyeF9yaW5nLT5SZWN2UGVuZGluZ0xpc3QubmV4dCwKKwkJCQkJICAgICAgIE1QX1JGRCwgbGlzdF9ub2RlKTsKKwkJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKKwkJZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZShhZGFwdGVyLCBwTXBSZmQpOworCX0KKworCS8qIEZyZWUgRnJlZSBCdWZmZXIgUmluZyAxICovCisJaWYgKHJ4X3JpbmctPnBGYnIxUmluZ1ZhKSB7CisJCS8qIEZpcnN0IHRoZSBwYWNrZXQgbWVtb3J5ICovCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8CisJCSAgICAgKHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzIC8gRkJSX0NIVU5LUyk7IGluZGV4KyspIHsKKwkJCWlmIChyeF9yaW5nLT5GYnIxTWVtVmFbaW5kZXhdKSB7CisJCQkJdWludDMyX3QgRmJyMUFsaWduOworCisJCQkJaWYgKHJ4X3JpbmctPkZicjFCdWZmZXJTaXplID4gNDA5NikgeworCQkJCQlGYnIxQWxpZ24gPSA0MDk2OworCQkJCX0gZWxzZSB7CisJCQkJCUZicjFBbGlnbiA9IHJ4X3JpbmctPkZicjFCdWZmZXJTaXplOworCQkJCX0KKworCQkJCWJ1ZnNpemUgPQorCQkJCSAgICAocnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgKiBGQlJfQ0hVTktTKSArCisJCQkJICAgIEZicjFBbGlnbiAtIDE7CisKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgYnVmc2l6ZSwKKwkJCQkJCSAgICByeF9yaW5nLT5GYnIxTWVtVmFbaW5kZXhdLAorCQkJCQkJICAgIHJ4X3JpbmctPkZicjFNZW1QYVtpbmRleF0pOworCisJCQkJcnhfcmluZy0+RmJyMU1lbVZhW2luZGV4XSA9IE5VTEw7CisJCQl9CisJCX0KKworCQkvKiBOb3cgdGhlIEZJRk8gaXRzZWxmICovCisJCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjFSaW5nVmEgLQorCQkJCQkJcnhfcmluZy0+RmJyMW9mZnNldCk7CisKKwkJYnVmc2l6ZSA9CisJCSAgICAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyMU51bUVudHJpZXMpICsgMHhmZmY7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBidWZzaXplLAorCQkJCSAgICByeF9yaW5nLT5wRmJyMVJpbmdWYSwgcnhfcmluZy0+cEZicjFSaW5nUGEpOworCisJCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gTlVMTDsKKwl9CisKKyNpZmRlZiBVU0VfRkJSMAorCS8qIE5vdyB0aGUgc2FtZSBmb3IgRnJlZSBCdWZmZXIgUmluZyAwICovCisJaWYgKHJ4X3JpbmctPnBGYnIwUmluZ1ZhKSB7CisJCS8qIEZpcnN0IHRoZSBwYWNrZXQgbWVtb3J5ICovCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8CisJCSAgICAgKHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzIC8gRkJSX0NIVU5LUyk7IGluZGV4KyspIHsKKwkJCWlmIChyeF9yaW5nLT5GYnIwTWVtVmFbaW5kZXhdKSB7CisJCQkJYnVmc2l6ZSA9CisJCQkJICAgIChyeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSAqCisJCQkJICAgICAoRkJSX0NIVU5LUyArIDEpKSAtIDE7CisKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgYnVmc2l6ZSwKKwkJCQkJCSAgICByeF9yaW5nLT5GYnIwTWVtVmFbaW5kZXhdLAorCQkJCQkJICAgIHJ4X3JpbmctPkZicjBNZW1QYVtpbmRleF0pOworCisJCQkJcnhfcmluZy0+RmJyME1lbVZhW2luZGV4XSA9IE5VTEw7CisJCQl9CisJCX0KKworCQkvKiBOb3cgdGhlIEZJRk8gaXRzZWxmICovCisJCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjBSaW5nVmEgLQorCQkJCQkJcnhfcmluZy0+RmJyMG9mZnNldCk7CisKKwkJYnVmc2l6ZSA9CisJCSAgICAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyME51bUVudHJpZXMpICsgMHhmZmY7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBidWZzaXplLAorCQkJCSAgICByeF9yaW5nLT5wRmJyMFJpbmdWYSwgcnhfcmluZy0+cEZicjBSaW5nUGEpOworCisJCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gTlVMTDsKKwl9CisjZW5kaWYKKworCS8qIEZyZWUgUGFja2V0IFN0YXR1cyBSaW5nICovCisJaWYgKHJ4X3JpbmctPnBQU1JpbmdWYSkgeworCQlyeF9yaW5nLT5wUFNSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wUFNSaW5nVmEgLQorCQkJCQkgICAgICByeF9yaW5nLT5wUFNSaW5nT2Zmc2V0KTsKKworCQlwa3RTdGF0UmluZ1NpemUgPQorCQkgICAgc2l6ZW9mKFBLVF9TVEFUX0RFU0NfdCkgKiBhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllczsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIHBrdFN0YXRSaW5nU2l6ZSArIDB4MGZmZiwKKwkJCQkgICAgcnhfcmluZy0+cFBTUmluZ1ZhLCByeF9yaW5nLT5wUFNSaW5nUGEpOworCisJCXJ4X3JpbmctPnBQU1JpbmdWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSBhcmVhIG9mIG1lbW9yeSBmb3IgdGhlIHdyaXRlYmFjayBvZiBzdGF0dXMgaW5mb3JtYXRpb24gKi8KKwlpZiAocnhfcmluZy0+cFJ4U3RhdHVzVmEpIHsKKwkJcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wUnhTdGF0dXNWYSAtCisJCQkJCQlyeF9yaW5nLT5SeFN0YXR1c09mZnNldCk7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBzaXplb2YoUlhfU1RBVFVTX0JMT0NLX3QpICsgMHg3LAorCQkJCSAgICByeF9yaW5nLT5wUnhTdGF0dXNWYSwgcnhfcmluZy0+cFJ4U3RhdHVzUGEpOworCisJCXJ4X3JpbmctPnBSeFN0YXR1c1ZhID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHJlY2VpdmUgYnVmZmVyIHBvb2wgKi8KKworCS8qIEZyZWUgcmVjZWl2ZSBwYWNrZXQgcG9vbCAqLworCisJLyogRGVzdHJveSB0aGUgbG9va2FzaWRlIChSRkQpIHBvb2wgKi8KKwlpZiAoTVBfVEVTVF9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX1JFQ1ZfTE9PS0FTSURFKSkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocnhfcmluZy0+UmVjdkxvb2thc2lkZSk7CisJCU1QX0NMRUFSX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfUkVDVl9MT09LQVNJREUpOworCX0KKworCS8qIEZyZWUgdGhlIEZCUiBMb29rdXAgVGFibGUgKi8KKyNpZmRlZiBVU0VfRkJSMAorCWtmcmVlKHJ4X3JpbmctPkZiclswXSk7CisjZW5kaWYKKworCWtmcmVlKHJ4X3JpbmctPkZiclsxXSk7CisKKwkvKiBSZXNldCBDb3VudGVycyAqLworCXJ4X3JpbmctPm5SZWFkeVJlY3YgPSAwOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfaW5pdF9yZWN2IC0gSW5pdGlhbGl6ZSByZWNlaXZlIGRhdGEgc3RydWN0dXJlcy4KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9pbml0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAtRU5PTUVNOworCVBNUF9SRkQgcE1wUmZkID0gTlVMTDsKKwl1aW50MzJfdCBSZmRDb3VudDsKKwl1aW50MzJfdCBUb3RhbE51bVJmZCA9IDA7CisJUlhfUklOR190ICpyeF9yaW5nID0gTlVMTDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCisJcnhfcmluZyA9IChSWF9SSU5HX3QgKikgJiBhZGFwdGVyLT5SeFJpbmc7CisKKwkvKiBTZXR1cCBlYWNoIFJGRCAqLworCWZvciAoUmZkQ291bnQgPSAwOyBSZmRDb3VudCA8IHJ4X3JpbmctPk51bVJmZDsgUmZkQ291bnQrKykgeworCQlwTXBSZmQgPSAoTVBfUkZEICopIGttZW1fY2FjaGVfYWxsb2MocnhfcmluZy0+UmVjdkxvb2thc2lkZSwKKwkJCQkJCSAgICAgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCisJCWlmICghcE1wUmZkKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGRuJ3QgYWxsb2MgUkZEIG91dCBvZiBrbWVtX2NhY2hlXG4iKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0YXR1cyA9IGV0MTMxeF9yZmRfcmVzb3VyY2VzX2FsbG9jKGFkYXB0ZXIsIHBNcFJmZCk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIkNvdWxkbid0IGFsbG9jIHBhY2tldCBmb3IgUkZEXG4iKTsKKwkJCWttZW1fY2FjaGVfZnJlZShyeF9yaW5nLT5SZWN2TG9va2FzaWRlLCBwTXBSZmQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBBZGQgdGhpcyBSRkQgdG8gdGhlIFJlY3ZMaXN0ICovCisJCWxpc3RfYWRkX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcnhfcmluZy0+UmVjdkxpc3QpOworCisJCS8qIEluY3JlbWVudCBib3RoIHRoZSBhdmFpbGFibGUgUkZEJ3MsIGFuZCB0aGUgdG90YWwgUkZEJ3MuICovCisJCXJ4X3JpbmctPm5SZWFkeVJlY3YrKzsKKwkJVG90YWxOdW1SZmQrKzsKKwl9CisKKwlpZiAoVG90YWxOdW1SZmQgPiBOSUNfTUlOX05VTV9SRkQpIHsKKwkJc3RhdHVzID0gMDsKKwl9CisKKwlyeF9yaW5nLT5OdW1SZmQgPSBUb3RhbE51bVJmZDsKKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlrbWVtX2NhY2hlX2ZyZWUocnhfcmluZy0+UmVjdkxvb2thc2lkZSwgcE1wUmZkKTsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQWxsb2NhdGlvbiBwcm9ibGVtcyBpbiBldDEzMXhfaW5pdF9yZWN2XG4iKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3JmZF9yZXNvdXJjZXNfYWxsb2MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAcE1wUmZkOiBwb2ludGVyIHRvIGEgUkZECisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9yZmRfcmVzb3VyY2VzX2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgTVBfUkZEICpwTXBSZmQpCit7CisJcE1wUmZkLT5QYWNrZXQgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZSAtIEZyZWUgdGhlIHBhY2tldCBhbGxvY2F0ZWQgZm9yIHRoZSBnaXZlbiBSRkQKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAcE1wUmZkOiBwb2ludGVyIHRvIGEgUkZECisgKi8KK3ZvaWQgZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIE1QX1JGRCAqcE1wUmZkKQoreworCXBNcFJmZC0+UGFja2V0ID0gTlVMTDsKKwlrbWVtX2NhY2hlX2ZyZWUoYWRhcHRlci0+UnhSaW5nLlJlY3ZMb29rYXNpZGUsIHBNcFJmZCk7Cit9CisKKy8qKgorICogQ29uZmlnUnhEbWFSZWdzIC0gU3RhcnQgb2YgUnhfRE1BIGluaXQgc2VxdWVuY2UKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdSeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYRE1BX3QgX19pb21lbSAqcFJ4RG1hID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYTsKKwlzdHJ1Y3QgX3J4X3JpbmdfdCAqcFJ4TG9jYWwgPSAmcEFkYXB0ZXItPlJ4UmluZzsKKwlQRkJSX0RFU0NfdCBwRmJyRW50cnk7CisJdWludDMyX3QgaUVudHJ5OworCVJYRE1BX1BTUl9OVU1fREVTX3QgcHNyX251bV9kZXM7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogSGFsdCBSWERNQSB0byBwZXJmb3JtIHRoZSByZWNvbmZpZ3VyZS4gICovCisJZXQxMzF4X3J4X2RtYV9kaXNhYmxlKHBBZGFwdGVyKTsKKworCS8qIExvYWQgdGhlIGNvbXBsZXRpb24gd3JpdGViYWNrIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIE5PVEUgOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUKKwkgKiBiZWZvcmUgc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocFJ4TG9jYWwtPlJ4U3RhdHVzUmVhbFBBID4+IDMyKSwKKwkgICAgICAgJnBSeERtYS0+ZG1hX3diX2Jhc2VfaGkpOworCXdyaXRlbCgodWludDMyX3QpIHBSeExvY2FsLT5SeFN0YXR1c1JlYWxQQSwgJnBSeERtYS0+ZG1hX3diX2Jhc2VfbG8pOworCisJbWVtc2V0KHBSeExvY2FsLT5wUnhTdGF0dXNWYSwgMCwgc2l6ZW9mKFJYX1NUQVRVU19CTE9DS190KSk7CisKKwkvKiBTZXQgdGhlIGFkZHJlc3MgYW5kIHBhcmFtZXRlcnMgb2YgdGhlIHBhY2tldCBzdGF0dXMgcmluZyBpbnRvIHRoZQorCSAqIDEzMTAncyByZWdpc3RlcnMKKwkgKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocFJ4TG9jYWwtPnBQU1JpbmdSZWFsUGEgPj4gMzIpLAorCSAgICAgICAmcFJ4RG1hLT5wc3JfYmFzZV9oaSk7CisJd3JpdGVsKCh1aW50MzJfdCkgcFJ4TG9jYWwtPnBQU1JpbmdSZWFsUGEsICZwUnhEbWEtPnBzcl9iYXNlX2xvKTsKKwl3cml0ZWwocFJ4TG9jYWwtPlBzck51bUVudHJpZXMgLSAxLCAmcFJ4RG1hLT5wc3JfbnVtX2Rlcy52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhEbWEtPnBzcl9mdWxsX29mZnNldC52YWx1ZSk7CisKKwlwc3JfbnVtX2Rlcy52YWx1ZSA9IHJlYWRsKCZwUnhEbWEtPnBzcl9udW1fZGVzLnZhbHVlKTsKKwl3cml0ZWwoKHBzcl9udW1fZGVzLmJpdHMucHNyX25kZXMgKiBMT19NQVJLX1BFUkNFTlRfRk9SX1BTUikgLyAxMDAsCisJICAgICAgICZwUnhEbWEtPnBzcl9taW5fZGVzLnZhbHVlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKworCS8qIFRoZXNlIGxvY2FsIHZhcmlhYmxlcyB0cmFjayB0aGUgUFNSIGluIHRoZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsID0gMDsKKwlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbF93cmFwID0gMDsKKworCS8qIE5vdydzIHRoZSBiZXN0IHRpbWUgdG8gaW5pdGlhbGl6ZSBGQlIxIGNvbnRlbnRzICovCisJcEZickVudHJ5ID0gKFBGQlJfREVTQ190KSBwUnhMb2NhbC0+cEZicjFSaW5nVmE7CisJZm9yIChpRW50cnkgPSAwOyBpRW50cnkgPCBwUnhMb2NhbC0+RmJyMU51bUVudHJpZXM7IGlFbnRyeSsrKSB7CisJCXBGYnJFbnRyeS0+YWRkcl9oaSA9IHBSeExvY2FsLT5GYnJbMV0tPlBBSGlnaFtpRW50cnldOworCQlwRmJyRW50cnktPmFkZHJfbG8gPSBwUnhMb2NhbC0+RmJyWzFdLT5QQUxvd1tpRW50cnldOworCQlwRmJyRW50cnktPndvcmQyLmJpdHMuYmkgPSBpRW50cnk7CisJCXBGYnJFbnRyeSsrOworCX0KKworCS8qIFNldCB0aGUgYWRkcmVzcyBhbmQgcGFyYW1ldGVycyBvZiBGcmVlIGJ1ZmZlciByaW5nIDEgKGFuZCAwIGlmCisJICogcmVxdWlyZWQpIGludG8gdGhlIDEzMTAncyByZWdpc3RlcnMKKwkgKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocFJ4TG9jYWwtPkZicjFSZWFscGEgPj4gMzIpLCAmcFJ4RG1hLT5mYnIxX2Jhc2VfaGkpOworCXdyaXRlbCgodWludDMyX3QpIHBSeExvY2FsLT5GYnIxUmVhbHBhLCAmcFJ4RG1hLT5mYnIxX2Jhc2VfbG8pOworCXdyaXRlbChwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMgLSAxLCAmcFJ4RG1hLT5mYnIxX251bV9kZXMudmFsdWUpOworCisJeworCQlETUExMFdfdCBmYnIxX2Z1bGwgPSB7IDAgfTsKKworCQlmYnIxX2Z1bGwuYml0cy52YWwgPSAwOworCQlmYnIxX2Z1bGwuYml0cy53cmFwID0gMTsKKwkJd3JpdGVsKGZicjFfZnVsbC52YWx1ZSwgJnBSeERtYS0+ZmJyMV9mdWxsX29mZnNldC52YWx1ZSk7CisJfQorCisJLyogVGhpcyB2YXJpYWJsZSB0cmFja3MgdGhlIGZyZWUgYnVmZmVyIHJpbmcgMSBmdWxsIHBvc2l0aW9uLCBzbyBpdAorCSAqIGhhcyB0byBtYXRjaCB0aGUgYWJvdmUuCisJICovCisJcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLnZhbCA9IDA7CisJcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLndyYXAgPSAxOworCXdyaXRlbCgoKHBSeExvY2FsLT5GYnIxTnVtRW50cmllcyAqIExPX01BUktfUEVSQ0VOVF9GT1JfUlgpIC8gMTAwKSAtIDEsCisJICAgICAgICZwUnhEbWEtPmZicjFfbWluX2Rlcy52YWx1ZSk7CisKKyNpZmRlZiBVU0VfRkJSMAorCS8qIE5vdydzIHRoZSBiZXN0IHRpbWUgdG8gaW5pdGlhbGl6ZSBGQlIwIGNvbnRlbnRzICovCisJcEZickVudHJ5ID0gKFBGQlJfREVTQ190KSBwUnhMb2NhbC0+cEZicjBSaW5nVmE7CisJZm9yIChpRW50cnkgPSAwOyBpRW50cnkgPCBwUnhMb2NhbC0+RmJyME51bUVudHJpZXM7IGlFbnRyeSsrKSB7CisJCXBGYnJFbnRyeS0+YWRkcl9oaSA9IHBSeExvY2FsLT5GYnJbMF0tPlBBSGlnaFtpRW50cnldOworCQlwRmJyRW50cnktPmFkZHJfbG8gPSBwUnhMb2NhbC0+RmJyWzBdLT5QQUxvd1tpRW50cnldOworCQlwRmJyRW50cnktPndvcmQyLmJpdHMuYmkgPSBpRW50cnk7CisJCXBGYnJFbnRyeSsrOworCX0KKworCXdyaXRlbCgodWludDMyX3QpIChwUnhMb2NhbC0+RmJyMFJlYWxwYSA+PiAzMiksICZwUnhEbWEtPmZicjBfYmFzZV9oaSk7CisJd3JpdGVsKCh1aW50MzJfdCkgcFJ4TG9jYWwtPkZicjBSZWFscGEsICZwUnhEbWEtPmZicjBfYmFzZV9sbyk7CisJd3JpdGVsKHBSeExvY2FsLT5GYnIwTnVtRW50cmllcyAtIDEsICZwUnhEbWEtPmZicjBfbnVtX2Rlcy52YWx1ZSk7CisKKwl7CisJCURNQTEwV190IGZicjBfZnVsbCA9IHsgMCB9OworCisJCWZicjBfZnVsbC5iaXRzLnZhbCA9IDA7CisJCWZicjBfZnVsbC5iaXRzLndyYXAgPSAxOworCQl3cml0ZWwoZmJyMF9mdWxsLnZhbHVlLCAmcFJ4RG1hLT5mYnIwX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKwl9CisKKwkvKiBUaGlzIHZhcmlhYmxlIHRyYWNrcyB0aGUgZnJlZSBidWZmZXIgcmluZyAwIGZ1bGwgcG9zaXRpb24sIHNvIGl0CisJICogaGFzIHRvIG1hdGNoIHRoZSBhYm92ZS4KKwkgKi8KKwlwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMudmFsID0gMDsKKwlwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMud3JhcCA9IDE7CisJd3JpdGVsKCgocFJ4TG9jYWwtPkZicjBOdW1FbnRyaWVzICogTE9fTUFSS19QRVJDRU5UX0ZPUl9SWCkgLyAxMDApIC0gMSwKKwkgICAgICAgJnBSeERtYS0+ZmJyMF9taW5fZGVzLnZhbHVlKTsKKyNlbmRpZgorCisJLyogUHJvZ3JhbSB0aGUgbnVtYmVyIG9mIHBhY2tldHMgd2Ugd2lsbCByZWNlaXZlIGJlZm9yZSBnZW5lcmF0aW5nIGFuCisJICogaW50ZXJydXB0LgorCSAqIEZvciB2ZXJzaW9uIEIgc2lsaWNvbiwgdGhpcyB2YWx1ZSBnZXRzIHVwZGF0ZWQgb25jZSBhdXRvbmVnIGlzCisJICpjb21wbGV0ZS4KKwkgKi8KKwl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5UnhOdW1CdWZmZXJzLCAmcFJ4RG1hLT5udW1fcGt0X2RvbmUudmFsdWUpOworCisJLyogVGhlICJ0aW1lX2RvbmUiIGlzIG5vdCB3b3JraW5nIGNvcnJlY3RseSB0byBjb2FsZXNjZSBpbnRlcnJ1cHRzCisJICogYWZ0ZXIgYSBnaXZlbiB0aW1lIHBlcmlvZCwgYnV0IHJhdGhlciBpcyBnaXZpbmcgdXMgYW4gaW50ZXJydXB0CisJICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGhhdmUgcmVjZWl2ZWQgcGFja2V0cy4KKwkgKiBUaGlzIHZhbHVlIGdldHMgdXBkYXRlZCBvbmNlIGF1dG9uZWcgaXMgY29tcGxldGUuCisJICovCisJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVJ4VGltZUludGVydmFsLCAmcFJ4RG1hLT5tYXhfcGt0X3RpbWUudmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFNldFJ4RG1hVGltZXIgLSBTZXQgdGhlIGhlYXJ0YmVhdCB0aW1lciBhY2NvcmRpbmcgdG8gbGluZSByYXRlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFNldFJ4RG1hVGltZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwkvKiBGb3IgdmVyc2lvbiBCIHNpbGljb24sIHdlIGRvIG5vdCB1c2UgdGhlIFJ4RE1BIHRpbWVyIGZvciAxMCBhbmQgMTAwCisJICogTWJpdHMvcyBsaW5lIHJhdGVzLiBXZSBkbyBub3QgZW5hYmxlIGFuZCBSeERNQSBpbnRlcnJ1cHQgY29hbGVzY2luZy4KKwkgKi8KKwlpZiAoKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwME1CUFMpIHx8CisJICAgIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xME1CUFMpKSB7CisJCXdyaXRlbCgwLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLm1heF9wa3RfdGltZS52YWx1ZSk7CisJCXdyaXRlbCgxLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLm51bV9wa3RfZG9uZS52YWx1ZSk7CisJfQorfQorCisvKioKKyAqIGV0MTMxeF9yeF9kbWFfZGlzYWJsZSAtIFN0b3Agb2YgUnhfRE1BIG9uIHRoZSBFVDEzMTAKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfcnhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlSWERNQV9DU1JfdCBjc3I7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0dXAgdGhlIHJlY2VpdmUgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwl3cml0ZWwoMHgwMDAwMjAwMSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCWNzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMSkgeworCQl1ZGVsYXkoNSk7CisJCWNzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwkJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDEpIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJSWCBEbWEgZmFpbGVkIHRvIGVudGVyIGhhbHQgc3RhdGUuIENTUiAweCUwOHhcbiIsCisJCQkJICBjc3IudmFsdWUpOworCQl9CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfcnhfZG1hX2VuYWJsZSAtIHJlLXN0YXJ0IG9mIFJ4X0RNQSBvbiB0aGUgRVQxMzEwLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9yeF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX1JYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmspIHsKKwkvKiBSeERNQSBpcyBkaXNhYmxlZCBmb3IgbG9vcGJhY2sgb3BlcmF0aW9uLiAqLworCQl3cml0ZWwoMHgxLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJfSBlbHNlIHsKKwkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciBmb3Igbm9ybWFsIG9wZXJhdGlvbiAqLworCQlSWERNQV9DU1JfdCBjc3IgPSB7IDAgfTsKKworCQljc3IuYml0cy5mYnIxX2VuYWJsZSA9IDE7CisJCWlmIChwQWRhcHRlci0+UnhSaW5nLkZicjFCdWZmZXJTaXplID09IDQwOTYpIHsKKwkJCWNzci5iaXRzLmZicjFfc2l6ZSA9IDE7CisJCX0gZWxzZSBpZiAocEFkYXB0ZXItPlJ4UmluZy5GYnIxQnVmZmVyU2l6ZSA9PSA4MTkyKSB7CisJCQljc3IuYml0cy5mYnIxX3NpemUgPSAyOworCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5SeFJpbmcuRmJyMUJ1ZmZlclNpemUgPT0gMTYzODQpIHsKKwkJCWNzci5iaXRzLmZicjFfc2l6ZSA9IDM7CisJCX0KKyNpZmRlZiBVU0VfRkJSMAorCQljc3IuYml0cy5mYnIwX2VuYWJsZSA9IDE7CisJCWlmIChwQWRhcHRlci0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDI1NikgeworCQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMTsKKwkJfSBlbHNlIGlmIChwQWRhcHRlci0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDUxMikgeworCQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMjsKKwkJfSBlbHNlIGlmIChwQWRhcHRlci0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDEwMjQpIHsKKwkJCWNzci5iaXRzLmZicjBfc2l6ZSA9IDM7CisJCX0KKyNlbmRpZgorCQl3cml0ZWwoY3NyLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisKKwkJY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCQlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMCkgeworCQkJdWRlbGF5KDUpOworCQkJY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCQkJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDApIHsKKwkJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgIlJYIERtYSBmYWlsZWQgdG8gZXhpdCBoYWx0IHN0YXRlLiAgQ1NSIDB4JTA4eFxuIiwKKwkJCQkJICBjc3IudmFsdWUpOworCQkJfQorCQl9CisJfQorCisJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBuaWNfcnhfcGt0cyAtIENoZWNrcyB0aGUgaGFyZHdhcmUgZm9yIGF2YWlsYWJsZSBwYWNrZXRzCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBSZXR1cm5zIHBNcFJmZCwgYSBwb2ludGVyIHRvIG91ciBNUFJGRC4KKyAqCisgKiBDaGVja3MgdGhlIGhhcmR3YXJlIGZvciBhdmFpbGFibGUgcGFja2V0cywgdXNpbmcgY29tcGxldGlvbiByaW5nCisgKiBJZiBwYWNrZXRzIGFyZSBhdmFpbGFibGUsIGl0IGdldHMgYW4gUkZEIGZyb20gdGhlIFJlY3ZMaXN0LCBhdHRhY2hlcworICogdGhlIHBhY2tldCB0byBpdCwgcHV0cyB0aGUgUkZEIGluIHRoZSBSZWN2UGVuZExpc3QsIGFuZCBhbHNvIHJldHVybnMKKyAqIHRoZSBwb2ludGVyIHRvIHRoZSBSRkQuCisgKi8KK1BNUF9SRkQgbmljX3J4X3BrdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX3J4X3JpbmdfdCAqcFJ4TG9jYWwgPSAmcEFkYXB0ZXItPlJ4UmluZzsKKwlQUlhfU1RBVFVTX0JMT0NLX3QgcFJ4U3RhdHVzQmxvY2s7CisJUFBLVF9TVEFUX0RFU0NfdCBwUFNSRW50cnk7CisJUE1QX1JGRCBwTXBSZmQ7CisJdWludDMyX3QgbkluZGV4OworCXVpbnQ4X3QgKnBCdWZWYTsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OworCXVpbnQ4X3QgcmluZ0luZGV4OworCXVpbnQxNl90IGJ1ZmZlckluZGV4OworCXVpbnQzMl90IGxvY2FsTGVuOworCVBLVF9TVEFUX0RFU0NfV09SRDBfdCBXb3JkMDsKKworCisJREJHX1JYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFJYIFN0YXR1cyBibG9jayBpcyB3cml0dGVuIGJ5IHRoZSBETUEgZW5naW5lIHByaW9yIHRvIGV2ZXJ5CisJICogaW50ZXJydXB0LiBJdCBjb250YWlucyB0aGUgbmV4dCB0byBiZSB1c2VkIGVudHJ5IGluIHRoZSBQYWNrZXQKKwkgKiBTdGF0dXMgUmluZywgYW5kIGFsc28gdGhlIHR3byBGcmVlIEJ1ZmZlciByaW5ncy4KKwkgKi8KKwlwUnhTdGF0dXNCbG9jayA9IChQUlhfU1RBVFVTX0JMT0NLX3QpIHBSeExvY2FsLT5wUnhTdGF0dXNWYTsKKworCWlmIChwUnhTdGF0dXNCbG9jay0+V29yZDEuYml0cy5QU1JvZmZzZXQgPT0KKwkJCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsICYmCisJICAgIHBSeFN0YXR1c0Jsb2NrLT5Xb3JkMS5iaXRzLlBTUndyYXAgPT0KKwkgICAgCQlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbF93cmFwKSB7CisJCS8qIExvb2tzIGxpa2UgdGhpcyByaW5nIGlzIG5vdCB1cGRhdGVkIHlldCAqLworCQlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICIoMClcbiIpOworCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBUaGUgcGFja2V0IHN0YXR1cyByaW5nIGluZGljYXRlcyB0aGF0IGRhdGEgaXMgYXZhaWxhYmxlLiAqLworCXBQU1JFbnRyeSA9IChQUEtUX1NUQVRfREVTQ190KSAocFJ4TG9jYWwtPnBQU1JpbmdWYSkgKworCQkJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGw7CisKKwkvKiBHcmFiIGFueSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlcXVpcmVkIG9uY2UgdGhlIFBTUiBpcworCSAqIGFkdmFuY2VkLCBzaW5jZSB3ZSBjYW4gbm8gbG9uZ2VyIHJlbHkgb24gdGhlIG1lbW9yeSBiZWluZworCSAqIGFjY3VyYXRlCisJICovCisJbG9jYWxMZW4gPSBwUFNSRW50cnktPndvcmQxLmJpdHMubGVuZ3RoOworCXJpbmdJbmRleCA9ICh1aW50OF90KSBwUFNSRW50cnktPndvcmQxLmJpdHMucmk7CisJYnVmZmVySW5kZXggPSAodWludDE2X3QpIHBQU1JFbnRyeS0+d29yZDEuYml0cy5iaTsKKwlXb3JkMCA9IHBQU1JFbnRyeS0+d29yZDA7CisKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJSWCBQQUNLRVQgU1RBVFVTXG4iKTsKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJcdGxlbmd0aCAgICAgIDogJWRcbiIsIGxvY2FsTGVuKTsKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJcdHJpbmdJbmRleCAgIDogJWRcbiIsIHJpbmdJbmRleCk7CisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiXHRidWZmZXJJbmRleCA6ICVkXG4iLCBidWZmZXJJbmRleCk7CisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiXHR3b3JkMCAgICAgICA6IDB4JTA4eFxuIiwgV29yZDAudmFsdWUpOworCisjaWYgMAorCS8qIENoZWNrIHRoZSBTdGF0dXMgV29yZCB0aGF0IHRoZSBNQUMgaGFzIGFwcGVuZGVkIHRvIHRoZSBQU1IKKwkgKiBlbnRyeSBpbiBjYXNlIHRoZSBNQUMgaGFzIGRldGVjdGVkIGVycm9ycy4KKwkgKi8KKwlpZiAoV29yZDAudmFsdWUgJiBBTENBVEVMX0JBRF9TVEFUVVMpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTklDUnhQa3RzID4+IEFsY2F0ZWwgU3RhdHVzIFdvcmQgZXJyb3IuIgorCQkJICAiVmFsdWUgMHglMDh4XG4iLCBwUFNSRW50cnktPndvcmQwLnZhbHVlKTsKKwl9CisjZW5kaWYKKworCS8qIEluZGljYXRlIHRoYXQgd2UgaGF2ZSB1c2VkIHRoaXMgUFNSIGVudHJ5LiAqLworCWlmICgrK3BSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsID4KKwkgICAgcFJ4TG9jYWwtPlBzck51bUVudHJpZXMgLSAxKSB7CisJCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsID0gMDsKKwkJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGxfd3JhcCBePSAxOworCX0KKworCXdyaXRlbChwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwudmFsdWUsCisJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEucHNyX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKworI2lmbmRlZiBVU0VfRkJSMAorCWlmIChyaW5nSW5kZXggIT0gMSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJOSUNSeFBrdHMgUFNSIEVudHJ5ICVkIGluZGljYXRlcyAiCisJCQkgICJCdWZmZXIgUmluZyAwIGluIHVzZVxuIiwKKwkJCSAgcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGwpOworCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisjZW5kaWYKKworI2lmZGVmIFVTRV9GQlIwCisJaWYgKHJpbmdJbmRleCA+IDEgfHwKKwkgICAgKHJpbmdJbmRleCA9PSAwICYmCisJICAgICBidWZmZXJJbmRleCA+IHBSeExvY2FsLT5GYnIwTnVtRW50cmllcyAtIDEpIHx8CisJICAgIChyaW5nSW5kZXggPT0gMSAmJgorCSAgICAgYnVmZmVySW5kZXggPiBwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMgLSAxKSkKKyNlbHNlCisJaWYgKHJpbmdJbmRleCAhPSAxIHx8CisJICAgIGJ1ZmZlckluZGV4ID4gcFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzIC0gMSkKKyNlbmRpZgorCXsKKwkJLyogSWxsZWdhbCBidWZmZXIgb3IgcmluZyBpbmRleCBjYW5ub3QgYmUgdXNlZCBieSBTL1cqLworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJOSUNSeFBrdHMgUFNSIEVudHJ5ICVkIGluZGljYXRlcyAiCisJCQkgICJsZW5ndGggb2YgJWQgYW5kL29yIGJhZCBiaSglZClcbiIsCisJCQkgIHBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsLAorCQkJICBsb2NhbExlbiwgYnVmZmVySW5kZXgpOworCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBHZXQgYW5kIGZpbGwgdGhlIFJGRC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBSZmQgPSBOVUxMOworCWVsZW1lbnQgPSBwUnhMb2NhbC0+UmVjdkxpc3QubmV4dDsKKwlwTXBSZmQgPSAoUE1QX1JGRCkgbGlzdF9lbnRyeShlbGVtZW50LCBNUF9SRkQsIGxpc3Rfbm9kZSk7CisKKwlpZiAocE1wUmZkID09IE5VTEwpIHsKKwkJREJHX1JYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIk5VTEwgUkZEIHJldHVybmVkIGZyb20gUmVjdkxpc3QgdmlhIGxpc3RfZW50cnkoKVxuIik7CisJCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsaXN0X2RlbCgmcE1wUmZkLT5saXN0X25vZGUpOworCXBSeExvY2FsLT5uUmVhZHlSZWN2LS07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFJmZC0+aUJ1ZmZlckluZGV4ID0gYnVmZmVySW5kZXg7CisJcE1wUmZkLT5pUmluZ0luZGV4ID0gcmluZ0luZGV4OworCisJLyogSW4gVjEgc2lsaWNvbiwgdGhlcmUgaXMgYSBidWcgd2hpY2ggc2NyZXdzIHVwIGZpbHRlcmluZyBvZgorCSAqIHJ1bnQgcGFja2V0cy4gIFRoZXJlZm9yZSBydW50IHBhY2tldCBmaWx0ZXJpbmcgaXMgZGlzYWJsZWQKKwkgKiBpbiB0aGUgTUFDIGFuZCB0aGUgcGFja2V0cyBhcmUgZHJvcHBlZCBoZXJlLiAgVGhleSBhcmUKKwkgKiBhbHNvIGNvdW50ZWQgaGVyZS4KKwkgKi8KKwlpZiAobG9jYWxMZW4gPCAoTklDX01JTl9QQUNLRVRfU0laRSArIDQpKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5vdGhlcl9lcnJvcnMrKzsKKwkJbG9jYWxMZW4gPSAwOworCX0KKworCWlmIChsb2NhbExlbikgeworCQlpZiAocEFkYXB0ZXItPlJlcGxpY2FQaHlMb29wYmsgPT0gMSkgeworCQkJcEJ1ZlZhID0gcFJ4TG9jYWwtPkZicltyaW5nSW5kZXhdLT5WYVtidWZmZXJJbmRleF07CisKKwkJCWlmIChtZW1jbXAoJnBCdWZWYVs2XSwgJnBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXSwKKwkJCQkgICBFVEhfQUxFTikgPT0gMCkgeworCQkJCWlmIChtZW1jbXAoJnBCdWZWYVs0Ml0sICJSZXBsaWNhIHBhY2tldCIsCisJCQkJCSAgIEVUSF9ITEVOKSkgeworCQkJCQlwQWRhcHRlci0+UmVwbGljYVBoeUxvb3Bia1BGID0gMTsKKwkJCQl9CisJCQl9CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgInBCdWZWYTpcdCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCSAgICBwQnVmVmFbNl0sIHBCdWZWYVs3XSwgcEJ1ZlZhWzhdLAorCQkJCSAgICBwQnVmVmFbOV0sIHBCdWZWYVsxMF0sIHBCdWZWYVsxMV0pOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkN1cnJlbnRBZGRyOlx0JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXSwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl0sCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXSwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV0pOworCQl9CisKKwkJLyogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBtdWx0aWNhc3QgcGFja2V0IGNvbWluZyBpbiAqLworCQlpZiAoKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9NVUxUSUNBU1RfUEtUKSAmJgorCQkgICAgIShXb3JkMC52YWx1ZSAmIEFMQ0FURUxfQlJPQURDQVNUX1BLVCkpIHsKKwkJCS8qIFByb21pc2N1b3VzIG1vZGUgYW5kIE11bHRpY2FzdCBtb2RlIGFyZQorCQkJICogbm90IG11dHVhbGx5IGV4Y2x1c2l2ZSBhcyB3YXMgZmlyc3QKKwkJCSAqIHRob3VnaHQuICBJIGd1ZXNzIFByb21pc2N1b3VzIGlzIGp1c3QKKwkJCSAqIGNvbnNpZGVyZWQgYSBzdXBlci1zZXQgb2YgdGhlIG90aGVyCisJCQkgKiBmaWx0ZXJzLiBHZW5lcmFsbHkgZmlsdGVyIGlzIDB4MmIgd2hlbiBpbgorCQkJICogcHJvbWlzY3VvdXMgbW9kZS4KKwkJCSAqLworCQkJaWYgKChwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCkKKwkJCSAgICAmJiAhKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMpCisJCQkgICAgJiYgIShwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpKSB7CisJCQkJcEJ1ZlZhID0gcFJ4TG9jYWwtPkZicltyaW5nSW5kZXhdLT4KKwkJCQkJCVZhW2J1ZmZlckluZGV4XTsKKworCQkJCS8qIExvb3AgdGhyb3VnaCBvdXIgbGlzdCB0byBzZWUgaWYgdGhlCisJCQkJICogZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGlzIHBhY2tldAorCQkJCSAqIG1hdGNoZXMgb25lIGluIG91ciBsaXN0LgorCQkJCSAqLworCQkJCWZvciAobkluZGV4ID0gMDsKKwkJCQkgICAgIG5JbmRleCA8IHBBZGFwdGVyLT5NQ0FkZHJlc3NDb3VudDsKKwkJCQkgICAgIG5JbmRleCsrKSB7CisJCQkJCWlmIChwQnVmVmFbMF0gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVswXQorCQkJCQkgICAgJiYgcEJ1ZlZhWzFdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMV0KKwkJCQkJICAgICYmIHBCdWZWYVsyXSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzJdCisJCQkJCSAgICAmJiBwQnVmVmFbM10gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVszXQorCQkJCQkgICAgJiYgcEJ1ZlZhWzRdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bNF0KKwkJCQkJICAgICYmIHBCdWZWYVs1XSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzVdKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIElmIG91ciBpbmRleCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyCisJCQkJICogb2YgTXVsdGljYXN0IGFkZHJlc3Mgd2UgaGF2ZSwgdGhlbgorCQkJCSAqIHRoaXMgbWVhbnMgd2UgZGlkIG5vdCBmaW5kIHRoaXMKKwkJCQkgKiBwYWNrZXQncyBtYXRjaGluZyBhZGRyZXNzIGluIG91cgorCQkJCSAqIGxpc3QuICBTZXQgdGhlIFBhY2tldFNpemUgdG8gemVybywKKwkJCQkgKiBzbyB3ZSBmcmVlIG91ciBSRkQgd2hlbiB3ZSByZXR1cm4KKwkJCQkgKiBmcm9tIHRoaXMgZnVuY3Rpb24uCisJCQkJICovCisJCQkJaWYgKG5JbmRleCA9PSBwQWRhcHRlci0+TUNBZGRyZXNzQ291bnQpIHsKKwkJCQkJbG9jYWxMZW4gPSAwOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGxvY2FsTGVuID4gMCkgeworCQkJCXBBZGFwdGVyLT5TdGF0cy5tdWx0aXJjdisrOworCQkJfQorCQl9IGVsc2UgaWYgKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9CUk9BRENBU1RfUEtUKSB7CisJCQlwQWRhcHRlci0+U3RhdHMuYnJkY3N0cmN2Kys7CisJCX0gZWxzZSB7CisJCQkvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgY291bnRlciBtZWFzdXJlcyBpbgorCQkJICogcHJvbWlzY3VvdXMgbW9kZS4gUGVyaGFwcyB3ZSBzaG91bGQgY2hlY2sKKwkJCSAqIHRoZSBNQUMgYWRkcmVzcyB0byBzZWUgaWYgaXQgaXMgZGlyZWN0ZWQKKwkJCSAqIHRvIHVzIGluIHByb21pc2N1b3VzIG1vZGUuCisJCQkgKi8KKwkJCXBBZGFwdGVyLT5TdGF0cy51bmlyY3YrKzsKKwkJfQorCX0KKworCWlmIChsb2NhbExlbiA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisKKwkJLy9wTXBSZmQtPlBhY2tldFNpemUgPSBsb2NhbExlbiAtIDQ7CisJCXBNcFJmZC0+UGFja2V0U2l6ZSA9IGxvY2FsTGVuOworCisJCXNrYiA9IGRldl9hbGxvY19za2IocE1wUmZkLT5QYWNrZXRTaXplICsgMik7CisJCWlmICghc2tiKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGRuJ3QgYWxsb2MgYW4gU0tCIGZvciBSeFxuIik7CisJCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlwQWRhcHRlci0+bmV0X3N0YXRzLnJ4X2J5dGVzICs9IHBNcFJmZC0+UGFja2V0U2l6ZTsKKworCQltZW1jcHkoc2tiX3B1dChza2IsIHBNcFJmZC0+UGFja2V0U2l6ZSksCisJCSAgICAgICBwUnhMb2NhbC0+RmJyW3JpbmdJbmRleF0tPlZhW2J1ZmZlckluZGV4XSwKKwkJICAgICAgIHBNcFJmZC0+UGFja2V0U2l6ZSk7CisKKwkJc2tiLT5kZXYgPSBwQWRhcHRlci0+bmV0ZGV2OworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwQWRhcHRlci0+bmV0ZGV2KTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJCW5ldGlmX3J4KHNrYik7CisJfSBlbHNlIHsKKwkJcE1wUmZkLT5QYWNrZXRTaXplID0gMDsKKwl9CisKKwluaWNfcmV0dXJuX3JmZChwQWRhcHRlciwgcE1wUmZkKTsKKworCURCR19SWChldDEzMXhfZGJnaW5mbywgIigxKVxuIik7CisJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gcE1wUmZkOworfQorCisvKioKKyAqIGV0MTMxeF9yZXNldF9yZWN2IC0gUmVzZXQgdGhlIHJlY2VpdmUgbGlzdAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogQXNzdW1wdGlvbiwgUmN2IHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICovCit2b2lkIGV0MTMxeF9yZXNldF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJUE1QX1JGRCBwTXBSZmQ7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlEQkdfQVNTRVJUKCFsaXN0X2VtcHR5KCZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KSk7CisKKwkvKiBUYWtlIGFsbCB0aGUgUkZEJ3MgZnJvbSB0aGUgcGVuZGluZyBsaXN0LCBhbmQgc3RpY2sgdGhlbSBvbiB0aGUKKwkgKiBSZWN2TGlzdC4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBBZGFwdGVyLT5SeFJpbmcuUmVjdlBlbmRpbmdMaXN0KSkgeworCQllbGVtZW50ID0gcEFkYXB0ZXItPlJ4UmluZy5SZWN2UGVuZGluZ0xpc3QubmV4dDsKKworCQlwTXBSZmQgPSAoUE1QX1JGRCkgbGlzdF9lbnRyeShlbGVtZW50LCBNUF9SRkQsIGxpc3Rfbm9kZSk7CisKKwkJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKKwkJbGlzdF9hZGRfdGFpbCgmcE1wUmZkLT5saXN0X25vZGUsICZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQgLSBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgcmVjZWl2ZSBwcm9jZXNzaW5nCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBBc3N1bXB0aW9uLCBSY3Ygc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCisgKi8KK3ZvaWQgZXQxMzF4X2hhbmRsZV9yZWN2X2ludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVBNUF9SRkQgcE1wUmZkID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0QXJyYXlbTlVNX1BBQ0tFVFNfSEFORExFRF07CisJUE1QX1JGRCBSRkRGcmVlQXJyYXlbTlVNX1BBQ0tFVFNfSEFORExFRF07CisJdWludDMyX3QgUGFja2V0QXJyYXlDb3VudCA9IDA7CisJdWludDMyX3QgUGFja2V0c1RvSGFuZGxlOworCXVpbnQzMl90IFBhY2tldEZyZWVDb3VudCA9IDA7CisJYm9vbCBUZW1wVW5maW5pc2hlZFJlYyA9IGZhbHNlOworCisJREJHX1JYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCVBhY2tldHNUb0hhbmRsZSA9IE5VTV9QQUNLRVRTX0hBTkRMRUQ7CisKKwkvKiBQcm9jZXNzIHVwIHRvIGF2YWlsYWJsZSBSRkQncyAqLworCXdoaWxlIChQYWNrZXRBcnJheUNvdW50IDwgUGFja2V0c1RvSGFuZGxlKSB7CisJCWlmIChsaXN0X2VtcHR5KCZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KSkgeworCQkJREJHX0FTU0VSVChwQWRhcHRlci0+UnhSaW5nLm5SZWFkeVJlY3YgPT0gMCk7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJOTyBSRkQncyAhISEhISEhISEhISEhXG4iKTsKKwkJCVRlbXBVbmZpbmlzaGVkUmVjID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJcE1wUmZkID0gbmljX3J4X3BrdHMocEFkYXB0ZXIpOworCisJCWlmIChwTXBSZmQgPT0gTlVMTCkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKiBEbyBub3QgcmVjZWl2ZSBhbnkgcGFja2V0cyB1bnRpbCBhIGZpbHRlciBoYXMgYmVlbiBzZXQuCisJCSAqIERvIG5vdCByZWNlaXZlIGFueSBwYWNrZXRzIHVudGlsIHdlIGFyZSBhdCBEMC4KKwkJICogRG8gbm90IHJlY2VpdmUgYW55IHBhY2tldHMgdW50aWwgd2UgaGF2ZSBsaW5rLgorCQkgKiBJZiBsZW5ndGggaXMgemVybywgcmV0dXJuIHRoZSBSRkQgaW4gb3JkZXIgdG8gYWR2YW5jZSB0aGUKKwkJICogRnJlZSBidWZmZXIgcmluZy4KKwkJICovCisJCWlmICgoIXBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIpIHx8CisJCSAgICAocEFkYXB0ZXItPlBvTWdtdC5Qb3dlclN0YXRlICE9IE5kaXNEZXZpY2VTdGF0ZUQwKSB8fAorCQkgICAgKCFNUF9MSU5LX0RFVEVDVEVEKHBBZGFwdGVyKSkgfHwKKwkJICAgIChwTXBSZmQtPlBhY2tldFNpemUgPT0gMCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgcGFja2V0cyB3ZSByZWNlaXZlZCAqLworCQlwQWRhcHRlci0+U3RhdHMuaXBhY2tldHMrKzsKKworCQkvKiBTZXQgdGhlIHN0YXR1cyBvbiB0aGUgcGFja2V0LCBlaXRoZXIgcmVzb3VyY2VzIG9yIHN1Y2Nlc3MgKi8KKwkJaWYgKHBBZGFwdGVyLT5SeFJpbmcublJlYWR5UmVjdiA+PSBSRkRfTE9XX1dBVEVSX01BUkspIHsKKwkJCS8qIFB1dCB0aGlzIFJGRCBvbiB0aGUgcGVuZGluZyBsaXN0CisJCQkgKgorCQkJICogTk9URTogbmljX3J4X3BrdHMoKSBhYm92ZSBpcyBhbHJlYWR5IHJldHVybmluZyB0aGUKKwkJCSAqIFJGRCB0byB0aGUgUmVjdkxpc3QsIHNvIGRvbid0IGFkZGl0aW9uYWxseSBkbyB0aGF0CisJCQkgKiBoZXJlLgorCQkJICogQmVzaWRlcywgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgKGF0IHRoaXMgcG9pbnQpIHRoZQorCQkJICogcGVuZGluZyBsaXN0IGFueXdheS4KKwkJCSAqLworCQkJLy9zcGluX2xvY2tfaXJxc2F2ZSggJnBBZGFwdGVyLT5SY3ZQZW5kTG9jaywgbG9ja2ZsYWdzICk7CisJCQkvL2xpc3RfYWRkX3RhaWwoICZwTXBSZmQtPmxpc3Rfbm9kZSwgJnBBZGFwdGVyLT5SeFJpbmcuUmVjdlBlbmRpbmdMaXN0ICk7CisJCQkvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwQWRhcHRlci0+UmN2UGVuZExvY2ssIGxvY2tmbGFncyApOworCisJCQkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZyBSZWN2cyAqLworCQkJLy9NUF9JTkNfUkNWX1JFRiggcEFkYXB0ZXIgKTsKKwkJfSBlbHNlIHsKKwkJCVJGREZyZWVBcnJheVtQYWNrZXRGcmVlQ291bnRdID0gcE1wUmZkOworCQkJUGFja2V0RnJlZUNvdW50Kys7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiUkZEJ3MgYXJlIHJ1bm5pbmcgb3V0ICEhISEhISEhISEhISFcbiIpOworCQl9CisKKwkJUGFja2V0QXJyYXlbUGFja2V0QXJyYXlDb3VudF0gPSBwTXBSZmQtPlBhY2tldDsKKwkJUGFja2V0QXJyYXlDb3VudCsrOworCX0KKworCWlmICgoUGFja2V0QXJyYXlDb3VudCA9PSBOVU1fUEFDS0VUU19IQU5ETEVEKSB8fCBUZW1wVW5maW5pc2hlZFJlYykgeworCQlwQWRhcHRlci0+UnhSaW5nLlVuZmluaXNoZWRSZWNlaXZlcyA9IHRydWU7CisJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlUeFRpbWVJbnRlcnZhbCAqIE5BTk9fSU5fQV9NSUNSTywKKwkJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKKwl9IGVsc2UgeworCQkvKiBXYXRjaGRvZyB0aW1lciB3aWxsIGRpc2FibGUgaXRzZWxmIGlmIGFwcHJvcHJpYXRlLiAqLworCQlwQWRhcHRlci0+UnhSaW5nLlVuZmluaXNoZWRSZWNlaXZlcyA9IGZhbHNlOworCX0KKworCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogTklDUmV0dXJuUkZEIC0gUmVjeWNsZSBhIFJGRCBhbmQgcHV0IGl0IGJhY2sgb250byB0aGUgcmVjZWl2ZSBsaXN0CisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqIEBwTXBSZmQ6IHBvaW50ZXIgdG8gdGhlIFJGRAorICovCit2b2lkIG5pY19yZXR1cm5fcmZkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9SRkQgcE1wUmZkKQoreworCXN0cnVjdCBfcnhfcmluZ190ICpwUnhMb2NhbCA9ICZwQWRhcHRlci0+UnhSaW5nOworCXN0cnVjdCBfUlhETUFfdCBfX2lvbWVtICpwUnhEbWEgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hOworCXVpbnQxNl90IGJpID0gcE1wUmZkLT5pQnVmZmVySW5kZXg7CisJdWludDhfdCByaSA9IHBNcFJmZC0+aVJpbmdJbmRleDsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCURCR19SWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBXZSBkb24ndCB1c2UgYW55IG9mIHRoZSBPT0IgZGF0YSBiZXNpZGVzIHN0YXR1cy4gT3RoZXJ3aXNlLCB3ZQorCSAqIG5lZWQgdG8gY2xlYW4gdXAgT09CIGRhdGEKKwkgKi8KKwlpZiAoCisjaWZkZWYgVVNFX0ZCUjAKKwkgICAgKHJpID09IDAgJiYgYmkgPCBwUnhMb2NhbC0+RmJyME51bUVudHJpZXMpIHx8CisjZW5kaWYKKwkgICAgKHJpID09IDEgJiYgYmkgPCBwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+RmJyTG9jaywgbG9ja2ZsYWdzKTsKKworCQlpZiAocmkgPT0gMSkgeworCQkJUEZCUl9ERVNDX3QgcE5leHREZXNjID0KKwkJCSAgICAoUEZCUl9ERVNDX3QpIChwUnhMb2NhbC0+cEZicjFSaW5nVmEpICsKKwkJCSAgICBwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMudmFsOworCisJCQkvKiBIYW5kbGUgdGhlIEZyZWUgQnVmZmVyIFJpbmcgYWR2YW5jZW1lbnQgaGVyZS4gV3JpdGUKKwkJCSAqIHRoZSBQQSAvIEJ1ZmZlciBJbmRleCBmb3IgdGhlIHJldHVybmVkIGJ1ZmZlciBpbnRvCisJCQkgKiB0aGUgb2xkZXN0IChuZXh0IHRvIGJlIGZyZWVkKUZCUiBlbnRyeQorCQkJICovCisJCQlwTmV4dERlc2MtPmFkZHJfaGkgPSBwUnhMb2NhbC0+RmJyWzFdLT5QQUhpZ2hbYmldOworCQkJcE5leHREZXNjLT5hZGRyX2xvID0gcFJ4TG9jYWwtPkZiclsxXS0+UEFMb3dbYmldOworCQkJcE5leHREZXNjLT53b3JkMi52YWx1ZSA9IGJpOworCisJCQlpZiAoKytwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMudmFsID4KKwkJCSAgICAocFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzIC0gMSkpIHsKKwkJCQlwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMudmFsID0gMDsKKwkJCQlwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMud3JhcCBePSAxOworCQkJfQorCisJCQl3cml0ZWwocFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC52YWx1ZSwKKwkJCSAgICAgICAmcFJ4RG1hLT5mYnIxX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKwkJfQorI2lmZGVmIFVTRV9GQlIwCisJCWVsc2UgeworCQkJUEZCUl9ERVNDX3QgcE5leHREZXNjID0KKwkJCSAgICAoUEZCUl9ERVNDX3QpIHBSeExvY2FsLT5wRmJyMFJpbmdWYSArCisJCQkgICAgcFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC5iaXRzLnZhbDsKKworCQkJLyogSGFuZGxlIHRoZSBGcmVlIEJ1ZmZlciBSaW5nIGFkdmFuY2VtZW50IGhlcmUuIFdyaXRlCisJCQkgKiB0aGUgUEEgLyBCdWZmZXIgSW5kZXggZm9yIHRoZSByZXR1cm5lZCBidWZmZXIgaW50bworCQkJICogdGhlIG9sZGVzdCAobmV4dCB0byBiZSBmcmVlZCkgRkJSIGVudHJ5CisJCQkgKi8KKwkJCXBOZXh0RGVzYy0+YWRkcl9oaSA9IHBSeExvY2FsLT5GYnJbMF0tPlBBSGlnaFtiaV07CisJCQlwTmV4dERlc2MtPmFkZHJfbG8gPSBwUnhMb2NhbC0+RmJyWzBdLT5QQUxvd1tiaV07CisJCQlwTmV4dERlc2MtPndvcmQyLnZhbHVlID0gYmk7CisKKwkJCWlmICgrK3BSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy52YWwgPgorCQkJICAgIChwUnhMb2NhbC0+RmJyME51bUVudHJpZXMgLSAxKSkgeworCQkJCXBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy52YWwgPSAwOworCQkJCXBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy53cmFwIF49IDE7CisJCQl9CisKKwkJCXdyaXRlbChwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLnZhbHVlLAorCQkJICAgICAgICZwUnhEbWEtPmZicjBfZnVsbF9vZmZzZXQudmFsdWUpOworCQl9CisjZW5kaWYKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPkZickxvY2ssIGxvY2tmbGFncyk7CisJfSBlbHNlIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTklDUmV0dXJuUkZEIGlsbGVnYWwgQnVmZmVyIEluZGV4IHJldHVybmVkXG4iKTsKKwl9CisKKwkvKiBUaGUgcHJvY2Vzc2luZyBvbiB0aGlzIFJGRCBpcyBkb25lLCBzbyBwdXQgaXQgYmFjayBvbiB0aGUgdGFpbCBvZgorCSAqIG91ciBsaXN0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcFJ4TG9jYWwtPlJlY3ZMaXN0KTsKKwlwUnhMb2NhbC0+blJlYWR5UmVjdisrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCisJREJHX0FTU0VSVChwUnhMb2NhbC0+blJlYWR5UmVjdiA8PSBwUnhMb2NhbC0+TnVtUmZkKTsKKwlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2NmRiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmgKQEAgLTAsMCArMSwzNzMgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3J4LmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIGRhdGEKKyAqICAgICAgICAgICAgICAgcmVjZXB0aW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzEwX1JYX0hfXworI2RlZmluZSBfX0VUMTMxMF9SWF9IX18KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisjZGVmaW5lIFVTRV9GQlIwIHRydWUKKworI2lmZGVmIFVTRV9GQlIwCisvLyNkZWZpbmUgRkJSMF9CVUZGRVJfU0laRSAyNTYKKyNlbmRpZgorCisvLyNkZWZpbmUgRkJSMV9CVUZGRVJfU0laRSAyMDQ4CisKKyNkZWZpbmUgRkJSX0NIVU5LUyAzMgorCisjZGVmaW5lIE1BWF9ERVNDX1BFUl9SSU5HX1JYICAgICAgICAgMTAyNAorCisvKiBudW1iZXIgb2YgUkZEcyAtIGRlZmF1bHQgYW5kIG1pbiAqLworI2lmZGVmIFVTRV9GQlIwCisjZGVmaW5lIFJGRF9MT1dfV0FURVJfTUFSSwk0MAorI2RlZmluZSBOSUNfTUlOX05VTV9SRkQJCTY0CisjZGVmaW5lIE5JQ19ERUZBVUxUX05VTV9SRkQJMTAyNAorI2Vsc2UKKyNkZWZpbmUgUkZEX0xPV19XQVRFUl9NQVJLCTIwCisjZGVmaW5lIE5JQ19NSU5fTlVNX1JGRAkJNjQKKyNkZWZpbmUgTklDX0RFRkFVTFRfTlVNX1JGRAkyNTYKKyNlbmRpZgorCisjZGVmaW5lIE5VTV9QQUNLRVRTX0hBTkRMRUQJMjU2CisKKyNkZWZpbmUgQUxDQVRFTF9CQURfU1RBVFVTCTB4ZTQ3ZjAwMDAKKyNkZWZpbmUgQUxDQVRFTF9NVUxUSUNBU1RfUEtUCTB4MDEwMDAwMDAKKyNkZWZpbmUgQUxDQVRFTF9CUk9BRENBU1RfUEtUCTB4MDIwMDAwMDAKKworLyogdHlwZWRlZnMgZm9yIEZyZWUgQnVmZmVyIERlc2NyaXB0b3JzICovCit0eXBlZGVmIHVuaW9uIF9GQlJfV09SRDJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKwkJdTMyIGJpOjEwOwkJLy8gYml0cyAwLTkoQnVmZmVyIEluZGV4KQorI2Vsc2UKKwkJdTMyIGJpOjEwOwkJLy8gYml0cyAwLTkoQnVmZmVyIEluZGV4KQorCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8vIGJpdCAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBGQlJfV09SRDJfdCwgKlBGQlJfV09SRDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX0ZCUl9ERVNDX3QgeworCXUzMiBhZGRyX2xvOworCXUzMiBhZGRyX2hpOworCUZCUl9XT1JEMl90IHdvcmQyOworfSBGQlJfREVTQ190LCAqUEZCUl9ERVNDX3Q7CisKKy8qIFR5cGVkZWZzIGZvciBQYWNrZXQgU3RhdHVzIFJpbmcgRGVzY3JpcHRvcnMgKi8KK3R5cGVkZWYgdW5pb24gX1BLVF9TVEFUX0RFU0NfV09SRDBfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQkvLyB0b3AgMTYgYml0cyBhcmUgZnJvbSB0aGUgQWxjYXRlbCBTdGF0dXMgV29yZCBhcyBlbnVtZXJhdGVkIGluCisJCS8vIFBFLU1DWE1BQyBEYXRhIFNoZWV0IElQRCBEUzU0IDAyMTAtMSAoYWxzbyBJUEQtRFM4MCAwMjA1LTIpCisjaWYgMAorCQl1MzIgYXN3X3RydW5jOjE7CQkvLyBiaXQgMzEoUnggZnJhbWUgdHJ1bmNhdGVkKQorI2VuZGlmCisJCXUzMiBhc3dfbG9uZ19ldnQ6MTsJLy8gYml0IDMxKFJ4IGxvbmcgZXZlbnQpCisJCXUzMiBhc3dfVkxBTl90YWc6MTsJLy8gYml0IDMwKFZMQU4gdGFnIGRldGVjdGVkKQorCQl1MzIgYXN3X3Vuc3VwcG9ydGVkX29wOjE7CS8vIGJpdCAyOSh1bnN1cHBvcnRlZCBPUCBjb2RlKQorCQl1MzIgYXN3X3BhdXNlX2ZyYW1lOjE7CS8vIGJpdCAyOChpcyBhIHBhdXNlIGZyYW1lKQorCQl1MzIgYXN3X2NvbnRyb2xfZnJhbWU6MTsJLy8gYml0IDI3KGlzIGEgY29udHJvbCBmcmFtZSkKKwkJdTMyIGFzd19kcmliYmxlX25pYmJsZToxOwkvLyBiaXQgMjYoc3B1cmlvdXMgYml0cyBhZnRlciBFT1ApCisJCXUzMiBhc3dfYnJvYWRjYXN0OjE7CS8vIGJpdCAyNShoYXMgYSBicm9hZGNhc3QgYWRkcmVzcykKKwkJdTMyIGFzd19tdWx0aWNhc3Q6MTsJLy8gYml0IDI0KGhhcyBhIG11bHRpY2FzdCBhZGRyZXNzKQorCQl1MzIgYXN3X09LOjE7CQkvLyBiaXQgMjModmFsaWQgQ1JDICsgbm8gY29kZSBlcnJvcikKKwkJdTMyIGFzd190b29fbG9uZzoxOwkvLyBiaXQgMjIoZnJhbWUgbGVuZ3RoID4gMTUxOCBieXRlcykKKwkJdTMyIGFzd19sZW5fY2hrX2VycjoxOwkvLyBiaXQgMjEoZnJhbWUgbGVuZ3RoIGZpZWxkIGluY29ycmVjdCkKKwkJdTMyIGFzd19DUkNfZXJyOjE7CQkvLyBiaXQgMjAoQ1JDIGVycm9yKQorCQl1MzIgYXN3X2NvZGVfZXJyOjE7CS8vIGJpdCAxOShvbmUgb3IgbW9yZSBuaWJibGVzIHNpZ25hbGxlZCBhcyBlcnJvcnMpCisJCXUzMiBhc3dfZmFsc2VfY2Fycmllcl9ldmVudDoxOwkvLyBiaXQgMTgoYmFkIGNhcnJpZXIgc2luY2UgbGFzdCBnb29kIHBhY2tldCkKKwkJdTMyIGFzd19SWF9EVl9ldmVudDoxOwkvLyBiaXQgMTcoc2hvcnQgcmVjZWl2ZSBldmVudCBkZXRlY3RlZCkKKwkJdTMyIGFzd19wcmV2X3BrdF9kcm9wcGVkOjE7Ly8gYml0IDE2KGUuZy4gSUZHIHRvbyBzbWFsbCBvbiBwcmV2aW91cykKKwkJdTMyIHVudXNlZDo1OwkJLy8gYml0cyAxMS0xNQorCQl1MzIgdnA6MTsJCQkvLyBiaXQgMTAoVkxBTiBQYWNrZXQpCisJCXUzMiBqcDoxOwkJCS8vIGJpdCA5KEp1bWJvIFBhY2tldCkKKwkJdTMyIGZ0OjE7CQkJLy8gYml0IDgoRnJhbWUgVHJ1bmNhdGVkKQorCQl1MzIgZHJvcDoxOwkJLy8gYml0IDcoRHJvcCBwYWNrZXQpCisJCXUzMiByeG1hY19lcnJvcjoxOwkJLy8gYml0IDYoUlhNQUMgRXJyb3IgSW5kaWNhdG9yKQorCQl1MzIgd29sOjE7CQkJLy8gYml0IDUoV09MIEV2ZW50KQorCQl1MzIgdGNwcDoxOwkJLy8gYml0IDQoVENQIGNoZWNrc3VtIHBhc3MpCisJCXUzMiB0Y3BhOjE7CQkvLyBiaXQgMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgaXBwOjE7CQkJLy8gYml0IDIoSVAgY2hlY2tzdW0gcGFzcykKKwkJdTMyIGlwYToxOwkJCS8vIGJpdCAxKElQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIGhwOjE7CQkJLy8gYml0IDAoaGFzaCBwYXNzKQorI2Vsc2UKKwkJdTMyIGhwOjE7CQkJLy8gYml0IDAoaGFzaCBwYXNzKQorCQl1MzIgaXBhOjE7CQkJLy8gYml0IDEoSVAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgaXBwOjE7CQkJLy8gYml0IDIoSVAgY2hlY2tzdW0gcGFzcykKKwkJdTMyIHRjcGE6MTsJCS8vIGJpdCAzKFRDUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB0Y3BwOjE7CQkvLyBiaXQgNChUQ1AgY2hlY2tzdW0gcGFzcykKKwkJdTMyIHdvbDoxOwkJCS8vIGJpdCA1KFdPTCBFdmVudCkKKwkJdTMyIHJ4bWFjX2Vycm9yOjE7CQkvLyBiaXQgNihSWE1BQyBFcnJvciBJbmRpY2F0b3IpCisJCXUzMiBkcm9wOjE7CQkvLyBiaXQgNyhEcm9wIHBhY2tldCkKKwkJdTMyIGZ0OjE7CQkJLy8gYml0IDgoRnJhbWUgVHJ1bmNhdGVkKQorCQl1MzIganA6MTsJCQkvLyBiaXQgOShKdW1ibyBQYWNrZXQpCisJCXUzMiB2cDoxOwkJCS8vIGJpdCAxMChWTEFOIFBhY2tldCkKKwkJdTMyIHVudXNlZDo1OwkJLy8gYml0cyAxMS0xNQorCQl1MzIgYXN3X3ByZXZfcGt0X2Ryb3BwZWQ6MTsvLyBiaXQgMTYoZS5nLiBJRkcgdG9vIHNtYWxsIG9uIHByZXZpb3VzKQorCQl1MzIgYXN3X1JYX0RWX2V2ZW50OjE7CS8vIGJpdCAxNyhzaG9ydCByZWNlaXZlIGV2ZW50IGRldGVjdGVkKQorCQl1MzIgYXN3X2ZhbHNlX2NhcnJpZXJfZXZlbnQ6MTsJLy8gYml0IDE4KGJhZCBjYXJyaWVyIHNpbmNlIGxhc3QgZ29vZCBwYWNrZXQpCisJCXUzMiBhc3dfY29kZV9lcnI6MTsJLy8gYml0IDE5KG9uZSBvciBtb3JlIG5pYmJsZXMgc2lnbmFsbGVkIGFzIGVycm9ycykKKwkJdTMyIGFzd19DUkNfZXJyOjE7CQkvLyBiaXQgMjAoQ1JDIGVycm9yKQorCQl1MzIgYXN3X2xlbl9jaGtfZXJyOjE7CS8vIGJpdCAyMShmcmFtZSBsZW5ndGggZmllbGQgaW5jb3JyZWN0KQorCQl1MzIgYXN3X3Rvb19sb25nOjE7CS8vIGJpdCAyMihmcmFtZSBsZW5ndGggPiAxNTE4IGJ5dGVzKQorCQl1MzIgYXN3X09LOjE7CQkvLyBiaXQgMjModmFsaWQgQ1JDICsgbm8gY29kZSBlcnJvcikKKwkJdTMyIGFzd19tdWx0aWNhc3Q6MTsJLy8gYml0IDI0KGhhcyBhIG11bHRpY2FzdCBhZGRyZXNzKQorCQl1MzIgYXN3X2Jyb2FkY2FzdDoxOwkvLyBiaXQgMjUoaGFzIGEgYnJvYWRjYXN0IGFkZHJlc3MpCisJCXUzMiBhc3dfZHJpYmJsZV9uaWJibGU6MTsJLy8gYml0IDI2KHNwdXJpb3VzIGJpdHMgYWZ0ZXIgRU9QKQorCQl1MzIgYXN3X2NvbnRyb2xfZnJhbWU6MTsJLy8gYml0IDI3KGlzIGEgY29udHJvbCBmcmFtZSkKKwkJdTMyIGFzd19wYXVzZV9mcmFtZToxOwkvLyBiaXQgMjgoaXMgYSBwYXVzZSBmcmFtZSkKKwkJdTMyIGFzd191bnN1cHBvcnRlZF9vcDoxOwkvLyBiaXQgMjkodW5zdXBwb3J0ZWQgT1AgY29kZSkKKwkJdTMyIGFzd19WTEFOX3RhZzoxOwkvLyBiaXQgMzAoVkxBTiB0YWcgZGV0ZWN0ZWQpCisJCXUzMiBhc3dfbG9uZ19ldnQ6MTsJLy8gYml0IDMxKFJ4IGxvbmcgZXZlbnQpCisjaWYgMAorCQl1MzIgYXN3X3RydW5jOjE7CQkvLyBiaXQgMzEoUnggZnJhbWUgdHJ1bmNhdGVkKQorI2VuZGlmCisjZW5kaWYKKwl9IGJpdHM7Cit9IFBLVF9TVEFUX0RFU0NfV09SRDBfdCwgKlBQS1RfU1RBVF9XT1JEMF90OworCit0eXBlZGVmIHVuaW9uIF9QS1RfU1RBVF9ERVNDX1dPUkQxX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDo0OwkvLyBiaXRzIDI4LTMxCisJCXUzMiByaToyOwkJLy8gYml0cyAyNi0yNyhSaW5nIEluZGV4KQorCQl1MzIgYmk6MTA7CQkvLyBiaXRzIDE2LTI1KEJ1ZmZlciBJbmRleCkKKwkJdTMyIGxlbmd0aDoxNjsJLy8gYml0IDAtMTUobGVuZ3RoIGluIGJ5dGVzKQorI2Vsc2UKKwkJdTMyIGxlbmd0aDoxNjsJLy8gYml0IDAtMTUobGVuZ3RoIGluIGJ5dGVzKQorCQl1MzIgYmk6MTA7CQkvLyBiaXRzIDE2LTI1KEJ1ZmZlciBJbmRleCkKKwkJdTMyIHJpOjI7CQkvLyBiaXRzIDI2LTI3KFJpbmcgSW5kZXgpCisJCXUzMiB1bnVzZWQ6NDsJLy8gYml0cyAyOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBQS1RfU1RBVF9ERVNDX1dPUkQxX3QsICpQUEtUX1NUQVRfV09SRDFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1BLVF9TVEFUX0RFU0NfdCB7CisJUEtUX1NUQVRfREVTQ19XT1JEMF90IHdvcmQwOworCVBLVF9TVEFUX0RFU0NfV09SRDFfdCB3b3JkMTsKK30gUEtUX1NUQVRfREVTQ190LCAqUFBLVF9TVEFUX0RFU0NfdDsKKworLyogVHlwZWRlZnMgZm9yIHRoZSBSWCBETUEgc3RhdHVzIHdvcmQgKi8KKworLyoKKyAqIFJYU1RBVF9XT1JEMF90IHN0cnVjdHVyZSBob2xkcyBwYXJ0IG9mIHRoZSBzdGF0dXMgYml0cyBvZiB0aGUgUnggRE1BIGVuZ2luZQorICogdGhhdCBnZXQgY29waWVkIG91dCB0byBtZW1vcnkgYnkgdGhlIEVULTEzMTAuICBXb3JkIDAgaXMgYSAzMiBiaXQgd29yZAorICogd2hpY2hjb250YWlucyBGcmVlIEJ1ZmZlciByaW5nIDAgYW5kIDEgYXZhaWxhYmxlIG9mZnNldC4KKyAqLwordHlwZWRlZiB1bmlvbiBfcnhzdGF0X3dvcmQwX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIEZCUjF1bnVzZWQ6NTsJLy8gYml0cyAyNy0zMQorCQl1MzIgRkJSMXdyYXA6MTsJLy8gYml0IDI2CisJCXUzMiBGQlIxb2Zmc2V0OjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiBGQlIwdW51c2VkOjU7CS8vIGJpdHMgMTEtMTUKKwkJdTMyIEZCUjB3cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgRkJSMG9mZnNldDoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBGQlIwb2Zmc2V0OjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgRkJSMHdyYXA6MTsJLy8gYml0IDEwCisJCXUzMiBGQlIwdW51c2VkOjU7CS8vIGJpdHMgMTEtMTUKKwkJdTMyIEZCUjFvZmZzZXQ6MTA7CS8vIGJpdHMgMTYtMjUKKwkJdTMyIEZCUjF3cmFwOjE7CS8vIGJpdCAyNgorCQl1MzIgRkJSMXVudXNlZDo1OwkvLyBiaXRzIDI3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYU1RBVF9XT1JEMF90LCAqUFJYU1RBVF9XT1JEMF90OworCisvKgorICogUlhTVEFUX1dPUkQxX3Qgc3RydWN0dXJlIGhvbGRzIHBhcnQgb2YgdGhlIHN0YXR1cyBiaXRzIG9mIHRoZSBSeCBETUEgZW5naW5lCisgKiB0aGF0IGdldCBjb3BpZWQgb3V0IHRvIG1lbW9yeSBieSB0aGUgRVQtMTMxMC4gIFdvcmQgMyBpcyBhIDMyIGJpdCB3b3JkCisgKiB3aGljaCBjb250YWlucyB0aGUgUGFja2V0IFN0YXR1cyBSaW5nIGF2YWlsYWJsZSBvZmZzZXQuCisgKi8KK3R5cGVkZWYgdW5pb24gX3J4c3RhdF93b3JkMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBQU1J1bnVzZWQ6MzsJLy8gYml0cyAyOS0zMQorCQl1MzIgUFNSd3JhcDoxOwkvLyBiaXQgMjgKKwkJdTMyIFBTUm9mZnNldDoxMjsJLy8gYml0cyAxNi0yNworCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIFBTUm9mZnNldDoxMjsJLy8gYml0cyAxNi0yNworCQl1MzIgUFNSd3JhcDoxOwkvLyBiaXQgMjgKKwkJdTMyIFBTUnVudXNlZDozOwkvLyBiaXRzIDI5LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYU1RBVF9XT1JEMV90LCAqUFJYU1RBVF9XT1JEMV90OworCisvKgorICogUlhfU1RBVFVTX0JMT0NLX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBzdGF0dXMgb2YgdGhlIFJ4IERNQSBlbmdpbmUKKyAqIGl0IHNpdHMgaW4gZnJlZSBtZW1vcnksIGFuZCBpcyBwb2ludGVkIHRvIGJ5IDB4MTAxYyAvIDB4MTAyMAorICovCit0eXBlZGVmIHN0cnVjdCBfcnhfc3RhdHVzX2Jsb2NrX3QgeworCVJYU1RBVF9XT1JEMF90IFdvcmQwOworCVJYU1RBVF9XT1JEMV90IFdvcmQxOworfSBSWF9TVEFUVVNfQkxPQ0tfdCwgKlBSWF9TVEFUVVNfQkxPQ0tfdDsKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgbG9vay11cCB0YWJsZSBob2xkaW5nIGZyZWUgYnVmZmVyIHJpbmcgcG9pbnRlcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0Zickxvb2t1cFRhYmxlIHsKKwl2b2lkICpWYVtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdm9pZCAqQnVmZmVyMVtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdm9pZCAqQnVmZmVyMltNQVhfREVTQ19QRVJfUklOR19SWF07CisJdTMyIFBBSGlnaFtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdTMyIFBBTG93W01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKK30gRkJSTE9PS1VQVEFCTEUsICpQRkJSTE9PS1VQVEFCTEU7CisKK3R5cGVkZWYgZW51bSB7CisJT05FX1BBQ0tFVF9JTlRFUlJVUFQsCisJRk9VUl9QQUNLRVRfSU5URVJSVVBUCit9IGVSWF9JTlRFUlJVUFRfU1RBVEVfdCwgKlBlUlhfSU5URVJSVVBUX1NUQVRFX3Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgc2tiJ3MgaW4gYSBsaXN0CisgKi8KK3R5cGVkZWYgc3RydWN0IHJ4X3NrYl9saXN0X2VsZW0geworCXN0cnVjdCBsaXN0X2hlYWQgc2tiX2xpc3RfZWxlbTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBza19idWZmICpza2I7Cit9IFJYX1NLQl9MSVNUX0VMRU0sICpQUlhfU0tCX0xJU1RfRUxFTTsKKworLyoKKyAqIFJYX1JJTkdfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGFkYXB0b3IncyBsb2NhbCByZWZlcmVuY2UocykgdG8gdGhlCisgKiByaW5ncworICovCit0eXBlZGVmIHN0cnVjdCBfcnhfcmluZ190IHsKKyNpZmRlZiBVU0VfRkJSMAorCXZvaWQgKnBGYnIwUmluZ1ZhOworCWRtYV9hZGRyX3QgcEZicjBSaW5nUGE7CisJdm9pZCAqRmJyME1lbVZhW01BWF9ERVNDX1BFUl9SSU5HX1JYIC8gRkJSX0NIVU5LU107CisJZG1hX2FkZHJfdCBGYnIwTWVtUGFbTUFYX0RFU0NfUEVSX1JJTkdfUlggLyBGQlJfQ0hVTktTXTsKKwl1aW50NjRfdCBGYnIwUmVhbHBhOworCXVpbnQ2NF90IEZicjBvZmZzZXQ7CisJRE1BMTBXX3QgbG9jYWxfRmJyMF9mdWxsOworCXUzMiBGYnIwTnVtRW50cmllczsKKwl1MzIgRmJyMEJ1ZmZlclNpemU7CisjZW5kaWYKKwl2b2lkICpwRmJyMVJpbmdWYTsKKwlkbWFfYWRkcl90IHBGYnIxUmluZ1BhOworCXZvaWQgKkZicjFNZW1WYVtNQVhfREVTQ19QRVJfUklOR19SWCAvIEZCUl9DSFVOS1NdOworCWRtYV9hZGRyX3QgRmJyMU1lbVBhW01BWF9ERVNDX1BFUl9SSU5HX1JYIC8gRkJSX0NIVU5LU107CisJdWludDY0X3QgRmJyMVJlYWxwYTsKKwl1aW50NjRfdCBGYnIxb2Zmc2V0OworCUZCUkxPT0tVUFRBQkxFICpGYnJbMl07CisJRE1BMTBXX3QgbG9jYWxfRmJyMV9mdWxsOworCXUzMiBGYnIxTnVtRW50cmllczsKKwl1MzIgRmJyMUJ1ZmZlclNpemU7CisKKwl2b2lkICpwUFNSaW5nVmE7CisJZG1hX2FkZHJfdCBwUFNSaW5nUGE7CisJdWludDY0X3QgcFBTUmluZ1JlYWxQYTsKKwl1aW50NjRfdCBwUFNSaW5nT2Zmc2V0OworCVJYRE1BX1BTUl9GVUxMX09GRlNFVF90IGxvY2FsX3Bzcl9mdWxsOworCXUzMiBQc3JOdW1FbnRyaWVzOworCisJdm9pZCAqcFJ4U3RhdHVzVmE7CisJZG1hX2FkZHJfdCBwUnhTdGF0dXNQYTsKKwl1aW50NjRfdCBSeFN0YXR1c1JlYWxQQTsKKwl1aW50NjRfdCBSeFN0YXR1c09mZnNldDsKKworCXN0cnVjdCBsaXN0X2hlYWQgUmVjdkJ1ZmZlclBvb2w7CisKKwkvKiBSRUNWICovCisJc3RydWN0IGxpc3RfaGVhZCBSZWN2TGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIFJlY3ZQZW5kaW5nTGlzdDsKKwl1MzIgblJlYWR5UmVjdjsKKworCXUzMiBOdW1SZmQ7CisKKwlib29sIFVuZmluaXNoZWRSZWNlaXZlczsKKworCXN0cnVjdCBsaXN0X2hlYWQgUmVjdlBhY2tldFBvb2w7CisKKwkvKiBsb29rYXNpZGUgbGlzdHMgKi8KKwlzdHJ1Y3Qga21lbV9jYWNoZSAqUmVjdkxvb2thc2lkZTsKK30gUlhfUklOR190LCAqUFJYX1JJTkdfdDsKKworLyogRm9yd2FyZCByZWZlcmVuY2Ugb2YgUkZEICovCitzdHJ1Y3QgX01QX1JGRDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCisvKiBQUk9UT1RZUEVTIGZvciBJbml0aWFsaXphdGlvbiAqLworaW50IGV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBldDEzMXhfcmZkX3Jlc291cmNlc19hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IF9NUF9SRkQgKnBNcFJmZCk7Cit2b2lkIGV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBfTVBfUkZEICpwTXBSZmQpOworaW50IGV0MTMxeF9pbml0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBDb25maWdSeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0UnhEbWFUaW1lcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfcnhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3J4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBldDEzMXhfcmVzZXRfcmVjdihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkIGV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9fRVQxMzEwX1JYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1YzI2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMKQEAgLTAsMCArMSwxNTI1IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF90eC5jIC0gUm91dGluZXMgdXNlZCB0byBwZXJmb3JtIGRhdGEgdHJhbnNtaXNzaW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisjaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworc3RhdGljIHZvaWQgZXQxMzF4X3VwZGF0ZV90Y2JfbGlzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3N0YXRpYyB2b2lkIGV0MTMxeF9jaGVja19zZW5kX3dhaXRfbGlzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBldDEzMXhfZnJlZV9zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJCQkgICBQTVBfVENCIHBNcFRjYik7CitzdGF0aWMgaW50IGV0MTMxeF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7CitzdGF0aWMgaW50IG5pY19zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfVENCIHBNcFRjYik7CisKKy8qKgorICogZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkuCisgKgorICogQWxsb2NhdGVzIG1lbW9yeSB0aGF0IHdpbGwgYmUgdmlzaWJsZSBib3RoIHRvIHRoZSBkZXZpY2UgYW5kIHRvIHRoZSBDUFUuCisgKiBUaGUgT1Mgd2lsbCBwYXNzIHVzIHBhY2tldHMsIHBvaW50ZXJzIHRvIHdoaWNoIHdlIHdpbGwgaW5zZXJ0IGluIHRoZSBUeAorICogRGVzY3JpcHRvciBxdWV1ZS4gVGhlIGRldmljZSB3aWxsIHJlYWQgdGhpcyBxdWV1ZSB0byBmaW5kIHRoZSBwYWNrZXRzIGluCisgKiBtZW1vcnkuIFRoZSBkZXZpY2Ugd2lsbCB1cGRhdGUgdGhlICJzdGF0dXMiIGluIG1lbW9yeSBlYWNoIHRpbWUgaXQgeG1pdHMgYQorICogcGFja2V0LgorICovCitpbnQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBkZXNjX3NpemUgPSAwOworCVRYX1JJTkdfdCAqdHhfcmluZyA9ICZhZGFwdGVyLT5UeFJpbmc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVENCJ3MgKFRyYW5zbWl0IENvbnRyb2wgQmxvY2spICovCisJYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtID0gKE1QX1RDQiAqKSBrY2FsbG9jKE5VTV9UQ0IsIHNpemVvZihNUF9UQ0IpLAorCQkJCQkJICAgICAgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCWlmICghYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFRDQnNcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgVHggZGVzY3JpcHRvciByaW5nLCBhbmQgYWxsb2NhdGUKKwkgKiBzb21lIGV4dHJhIHNvIHRoYXQgdGhlIHJpbmcgY2FuIGJlIGFsaWduZWQgb24gYSA0ayBib3VuZGFyeS4KKwkgKi8KKwlkZXNjX3NpemUgPSAoc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiBOVU1fREVTQ19QRVJfUklOR19UWCkgKyA0MDk2IC0gMTsKKwl0eF9yaW5nLT5wVHhEZXNjUmluZ1ZhID0KKwkgICAgKFBUWF9ERVNDX0VOVFJZX3QpIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGRlc2Nfc2l6ZSwKKwkJCQkJCSAgICAmdHhfcmluZy0+cFR4RGVzY1JpbmdQYSk7CisJaWYgKCFhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBUeCBSaW5nXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUgYmVmb3JlCisJICogc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwl0eF9yaW5nLT5wVHhEZXNjUmluZ0FkanVzdGVkUGEgPSB0eF9yaW5nLT5wVHhEZXNjUmluZ1BhOworCisJLyogQWxpZ24gVHggRGVzY3JpcHRvciBSaW5nIG9uIGEgNGsgKDB4MTAwMCkgYnl0ZSBib3VuZGFyeSAqLworCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJICAgICAgJnR4X3JpbmctPnBUeERlc2NSaW5nQWRqdXN0ZWRQYSwKKwkJCQkgICAgICAmdHhfcmluZy0+VHhEZXNjT2Zmc2V0LCAweDBGRkYpOworCisJdHhfcmluZy0+cFR4RGVzY1JpbmdWYSArPSB0eF9yaW5nLT5UeERlc2NPZmZzZXQ7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBUeCBzdGF0dXMgYmxvY2sgKi8KKwl0eF9yaW5nLT5wVHhTdGF0dXNWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgc2l6ZW9mKFRYX1NUQVRVU19CTE9DS190KSwKKwkJCQkJCSAgICAmdHhfcmluZy0+cFR4U3RhdHVzUGEpOworCWlmICghYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1BhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFR4IHN0YXR1cyBibG9ja1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYSBkdW1teSBidWZmZXIgKi8KKwl0eF9yaW5nLT5wVHhEdW1teUJsa1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICAgIE5JQ19NSU5fUEFDS0VUX1NJWkUsCisJCQkJCQkgICAgICAmdHhfcmluZy0+cFR4RHVtbXlCbGtQYSk7CisJaWYgKCFhZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtQYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBUeCBkdW1teSBidWZmZXJcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUgLSBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHdpdGhpbiB0aGlzIG1vZHVsZQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKS4KKyAqLwordm9pZCBldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZGVzY19zaXplID0gMDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlpZiAoYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEpIHsKKwkJLyogRnJlZSBtZW1vcnkgcmVsYXRpbmcgdG8gVHggcmluZ3MgaGVyZSAqLworCQlhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSAtPSBhZGFwdGVyLT5UeFJpbmcuVHhEZXNjT2Zmc2V0OworCisJCWRlc2Nfc2l6ZSA9CisJCSAgICAoc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiBOVU1fREVTQ19QRVJfUklOR19UWCkgKyA0MDk2IC0gMTsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIGRlc2Nfc2l6ZSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEsCisJCQkJICAgIGFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1BhKTsKKworCQlhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSBtZW1vcnkgZm9yIHRoZSBUeCBzdGF0dXMgYmxvY2sgKi8KKwlpZiAoYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1ZhKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgc2l6ZW9mKFRYX1NUQVRVU19CTE9DS190KSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1ZhLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzUGEpOworCisJCWFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSBtZW1vcnkgZm9yIHRoZSBkdW1teSBidWZmZXIgKi8KKwlpZiAoYWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrVmEpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBOSUNfTUlOX1BBQ0tFVF9TSVpFLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtWYSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrUGEpOworCisJCWFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1ZhID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHRoZSBtZW1vcnkgZm9yIE1QX1RDQiBzdHJ1Y3R1cmVzICovCisJaWYgKGFkYXB0ZXItPlR4UmluZy5NcFRjYk1lbSkgeworCQlrZnJlZShhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW0pOworCQlhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW0gPSBOVUxMOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogQ29uZmlnVHhEbWFSZWdzIC0gU2V0IHVwIHRoZSB0eCBkbWEgc2VjdGlvbiBvZiB0aGUgSkFHQ29yZS4KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnVHhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9UWERNQV90IF9faW9tZW0gKnBUeERtYSA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWE7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTG9hZCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZy4gKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ0FkanVzdGVkUGEgPj4gMzIpLAorCSAgICAgICAmcFR4RG1hLT5wcl9iYXNlX2hpKTsKKwl3cml0ZWwoKHVpbnQzMl90KSBwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nQWRqdXN0ZWRQYSwKKwkgICAgICAgJnBUeERtYS0+cHJfYmFzZV9sbyk7CisKKwkvKiBJbml0aWFsaXNlIHRoZSB0cmFuc21pdCBETUEgZW5naW5lICovCisJd3JpdGVsKE5VTV9ERVNDX1BFUl9SSU5HX1RYIC0gMSwgJnBUeERtYS0+cHJfbnVtX2Rlcy52YWx1ZSk7CisKKwkvKiBMb2FkIHRoZSBjb21wbGV0aW9uIHdyaXRlYmFjayBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUgYmVmb3JlCisJICogc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwl3cml0ZWwoMCwgJnBUeERtYS0+ZG1hX3diX2Jhc2VfaGkpOworCXdyaXRlbChwQWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1BhLCAmcFR4RG1hLT5kbWFfd2JfYmFzZV9sbyk7CisKKwltZW1zZXQocEFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNWYSwgMCwgc2l6ZW9mKFRYX1NUQVRVU19CTE9DS190KSk7CisKKwl3cml0ZWwoMCwgJnBUeERtYS0+c2VydmljZV9yZXF1ZXN0LnZhbHVlKTsKKwlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUgPSAwOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfdHhfZG1hX2Rpc2FibGUgLSBTdG9wIG9mIFR4X0RNQSBvbiB0aGUgRVQxMzEwCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X3R4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHRoZSB0cmFtc21pdCBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCXdyaXRlbCgweDEwMSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5jc3IudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfdHhfZG1hX2VuYWJsZSAtIHJlLXN0YXJ0IG9mIFR4X0RNQSBvbiB0aGUgRVQxMzEwLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIE1haW5seSB1c2VkIGFmdGVyIGEgcmV0dXJuIHRvIHRoZSBEMCAoZnVsbC1wb3dlcikgc3RhdGUgZnJvbSBhIGxvd2VyIHN0YXRlLgorICovCit2b2lkIGV0MTMxeF90eF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmspIHsKKwkvKiBUeERNQSBpcyBkaXNhYmxlZCBmb3IgbG9vcGJhY2sgb3BlcmF0aW9uLiAqLworCQl3cml0ZWwoMHgxMDEsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuY3NyLnZhbHVlKTsKKwl9IGVsc2UgeworCQlUWERNQV9DU1JfdCBjc3IgPSB7IDAgfTsKKworCQkvKiBTZXR1cCB0aGUgdHJhbnNtaXQgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIG5vcm1hbAorCQkgKiBvcGVyYXRpb24KKwkJICovCisJCWNzci5iaXRzLnNuZ2xfZXBrdF9tb2RlID0gMTsKKwkJY3NyLmJpdHMuaGFsdCA9IDA7CisJCWNzci5iaXRzLmNhY2hlX3RocnNobGQgPSBwQWRhcHRlci0+UmVnaXN0cnlETUFDYWNoZTsKKwkJd3JpdGVsKGNzci52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5jc3IudmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2luaXRfc2VuZCAtIEluaXRpYWxpemUgc2VuZCBkYXRhIHN0cnVjdHVyZXMKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X2luaXRfc2VuZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJUE1QX1RDQiBwTXBUY2I7CisJdWludDMyX3QgVGNiQ291bnQ7CisJVFhfUklOR190ICp0eF9yaW5nOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KKwl0eF9yaW5nID0gJmFkYXB0ZXItPlR4UmluZzsKKwlwTXBUY2IgPSBhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW07CisKKwl0eF9yaW5nLT5UQ0JSZWFkeVF1ZXVlSGVhZCA9IHBNcFRjYjsKKworCS8qIEdvIHRocm91Z2ggYW5kIHNldCB1cCBlYWNoIFRDQiAqLworCWZvciAoVGNiQ291bnQgPSAwOyBUY2JDb3VudCA8IE5VTV9UQ0I7IFRjYkNvdW50KyspIHsKKwkJbWVtc2V0KHBNcFRjYiwgMCwgc2l6ZW9mKE1QX1RDQikpOworCisJCS8qIFNldCB0aGUgbGluayBwb2ludGVyIGluIEhXIFRDQiB0byB0aGUgbmV4dCBUQ0IgaW4gdGhlCisJCSAqIGNoYWluLiAgSWYgdGhpcyBpcyB0aGUgbGFzdCBUQ0IgaW4gdGhlIGNoYWluLCBhbHNvIHNldCB0aGUKKwkJICogdGFpbCBwb2ludGVyLgorCQkgKi8KKwkJaWYgKFRjYkNvdW50IDwgTlVNX1RDQiAtIDEpIHsKKwkJCXBNcFRjYi0+TmV4dCA9IHBNcFRjYiArIDE7CisJCX0gZWxzZSB7CisJCQl0eF9yaW5nLT5UQ0JSZWFkeVF1ZXVlVGFpbCA9IHBNcFRjYjsKKwkJCXBNcFRjYi0+TmV4dCA9IChQTVBfVENCKSBOVUxMOworCQl9CisKKwkJcE1wVGNiKys7CisJfQorCisJLyogQ3VyciBzZW5kIHF1ZXVlIHNob3VsZCBub3cgYmUgZW1wdHkgKi8KKwl0eF9yaW5nLT5DdXJyU2VuZEhlYWQgPSAoUE1QX1RDQikgTlVMTDsKKwl0eF9yaW5nLT5DdXJyU2VuZFRhaWwgPSAoUE1QX1RDQikgTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9zZW5kX3BhY2tldHMgLSBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgT1MgdG8gc2VuZCBwYWNrZXRzCisgKiBAc2tiOiB0aGUgcGFja2V0KHMpIHRvIHNlbmQKKyAqIEBuZXRkZXY6ZGV2aWNlIG9uIHdoaWNoIHRvIFRYIHRoZSBhYm92ZSBwYWNrZXQocykKKyAqCisgKiBSZXR1cm4gMCBpbiBhbG1vc3QgYWxsIGNhc2VzOyBub24temVybyB2YWx1ZSBpbiBleHRyZW1lIGhhcmQgZmFpbHVyZSBvbmx5CisgKi8KK2ludCBldDEzMXhfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7CisKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJcEFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogU2VuZCB0aGVzZSBwYWNrZXRzCisJICoKKwkgKiBOT1RFOiBUaGUgTGludXggVHggZW50cnkgcG9pbnQgaXMgb25seSBnaXZlbiBvbmUgcGFja2V0IGF0IGEgdGltZQorCSAqIHRvIFR4LCBzbyB0aGUgUGFja2V0Q291bnQgYW5kIGl0J3MgYXJyYXkgdXNlZCBtYWtlcyBubyBzZW5zZSBoZXJlCisJICovCisKKwkvKiBRdWV1ZSBpcyBub3QgZW1wdHkgb3IgVENCIGlzIG5vdCBhdmFpbGFibGUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnBBZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZSkgfHwKKwkgICAgTVBfVENCX1JFU09VUkNFU19OT1RfQVZBSUxBQkxFKHBBZGFwdGVyKSkgeworCQkvKiBOT1RFOiBJZiB0aGVyZSdzIGFuIGVycm9yIG9uIHNlbmQsIG5vIG5lZWQgdG8gcXVldWUgdGhlCisJCSAqIHBhY2tldCB1bmRlciBMaW51eDsgaWYgd2UganVzdCBzZW5kIGFuIGVycm9yIHVwIHRvIHRoZQorCQkgKiBuZXRpZiBsYXllciwgaXQgd2lsbCByZXNlbmQgdGhlIHNrYiB0byB1cy4KKwkJICovCisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiVENCIFJlc291cmNlcyBOb3QgQXZhaWxhYmxlXG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9IGVsc2UgeworCQkvKiBXZSBuZWVkIHRvIHNlZSBpZiB0aGUgbGluayBpcyB1cDsgaWYgaXQncyBub3QsIG1ha2UgdGhlCisJCSAqIG5ldGlmIGxheWVyIHRoaW5rIHdlJ3JlIGdvb2QgYW5kIGRyb3AgdGhlIHBhY2tldAorCQkgKi8KKwkJLy9pZiggTVBfU0hPVUxEX0ZBSUxfU0VORCggcEFkYXB0ZXIgKSB8fCBwQWRhcHRlci0+RHJpdmVyTm9QaHlBY2Nlc3MgKQorCQlpZiAoTVBfU0hPVUxEX0ZBSUxfU0VORChwQWRhcHRlcikgfHwgcEFkYXB0ZXItPkRyaXZlck5vUGh5QWNjZXNzCisJCSAgICB8fCAhbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkNhbid0IFR4LCBMaW5rIGlzIERPV047IGRyb3AgdGhlIHBhY2tldFxuIik7CisKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlza2IgPSBOVUxMOworCisJCQlwQWRhcHRlci0+bmV0X3N0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IGV0MTMxeF9zZW5kX3BhY2tldChza2IsIHBBZGFwdGVyKTsKKworCQkJaWYgKHN0YXR1cyA9PSAtRU5PTUVNKSB7CisKKwkJCQkvKiBOT1RFOiBJZiB0aGVyZSdzIGFuIGVycm9yIG9uIHNlbmQsIG5vIG5lZWQKKwkJCQkgKiB0byBxdWV1ZSB0aGUgcGFja2V0IHVuZGVyIExpbnV4OyBpZiB3ZSBqdXN0CisJCQkJICogc2VuZCBhbiBlcnJvciB1cCB0byB0aGUgbmV0aWYgbGF5ZXIsIGl0CisJCQkJICogd2lsbCByZXNlbmQgdGhlIHNrYiB0byB1cy4KKwkJCQkgKi8KKwkJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICJSZXNvdXJjZXMgcHJvYmxlbSwgUXVldWUgdHggcGFja2V0XG4iKTsKKwkJCX0gZWxzZSBpZiAoc3RhdHVzICE9IDApIHsKKwkJCQkvKiBPbiBhbnkgb3RoZXIgZXJyb3IsIG1ha2UgbmV0aWYgdGhpbmsgd2UncmUKKwkJCQkgKiBPSyBhbmQgZHJvcCB0aGUgcGFja2V0CisJCQkJICovCisJCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAiR2VuZXJhbCBlcnJvciwgZHJvcCBwYWNrZXRcbiIpOworCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCisJCQkJcEFkYXB0ZXItPm5ldF9zdGF0cy50eF9kcm9wcGVkKys7CisJCQl9CisJCX0KKwl9CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3NlbmRfcGFja2V0IC0gRG8gdGhlIHdvcmsgdG8gc2VuZCBhIHBhY2tldAorICogQHNrYjogdGhlIHBhY2tldChzKSB0byBzZW5kCisgKiBAcEFkYXB0ZXI6IGEgcG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiAwIGluIGFsbW9zdCBhbGwgY2FzZXM7IG5vbi16ZXJvIHZhbHVlIGluIGV4dHJlbWUgaGFyZCBmYWlsdXJlIG9ubHkuCisgKgorICogQXNzdW1wdGlvbjogU2VuZCBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZAorICovCitzdGF0aWMgaW50IGV0MTMxeF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlQTVBfVENCIHBNcFRjYiA9IE5VTEw7CisJdWludDE2X3QgKnBTaEJ1ZlZhOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJREJHX1RYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIElzIG91ciBidWZmZXIgc2NhdHRlcmVkLCBvciBjb250aW51b3VzPyAqLworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHsKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiU2NhdHRlcmVkIGJ1ZmZlcjogTk9cbiIpOworCX0gZWxzZSB7CisJCURCR19UWChldDEzMXhfZGJnaW5mbywgIlNjYXR0ZXJlZCBidWZmZXI6IFlFUywgTnVtIEZyYWdzOiAlZFxuIiwKKwkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpOworCX0KKworCS8qIEFsbCBwYWNrZXRzIG11c3QgaGF2ZSBhdCBsZWFzdCBhIE1BQyBhZGRyZXNzIGFuZCBhIHByb3RvY29sIHR5cGUgKi8KKwlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJQYWNrZXQgc2l6ZSA8IEVUSF9ITEVOICgxNCBieXRlcylcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBHZXQgYSBUQ0IgZm9yIHRoaXMgcGFja2V0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZDsKKworCWlmIChwTXBUY2IgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgIkNhbid0IG9idGFpbiBhIFRDQlxuIik7CisJCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZUhlYWQgPSBwTXBUY2ItPk5leHQ7CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZCA9PSBOVUxMKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiLT5QYWNrZXRMZW5ndGggPSBza2ItPmxlbjsKKwlwTXBUY2ItPlBhY2tldCA9IHNrYjsKKworCWlmICgoc2tiLT5kYXRhICE9IE5VTEwpICYmICgoc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuKSA+PSA2KSkgeworCQlwU2hCdWZWYSA9ICh1aW50MTZfdCAqKSBza2ItPmRhdGE7CisKKwkJaWYgKChwU2hCdWZWYVswXSA9PSAweGZmZmYpICYmCisJCSAgICAocFNoQnVmVmFbMV0gPT0gMHhmZmZmKSAmJiAocFNoQnVmVmFbMl0gPT0gMHhmZmZmKSkgeworCQkJTVBfU0VUX0ZMQUcocE1wVGNiLCBmTVBfREVTVF9CUk9BRCk7CisJCX0gZWxzZSBpZiAoKHBTaEJ1ZlZhWzBdICYgMHgzKSA9PSAweDAwMDEpIHsKKwkJCU1QX1NFVF9GTEFHKHBNcFRjYiwgZk1QX0RFU1RfTVVMVEkpOworCQl9CisJfQorCisJcE1wVGNiLT5OZXh0ID0gTlVMTDsKKworCS8qIENhbGwgdGhlIE5JQyBzcGVjaWZpYyBzZW5kIGhhbmRsZXIuICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXN0YXR1cyA9IG5pY19zZW5kX3BhY2tldChwQWRhcHRlciwgcE1wVGNiKTsKKwl9CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJCWlmIChwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsLT5OZXh0ID0gcE1wVGNiOworCQl9IGVsc2UgeworCQkJLyogQXBwYXJlbnRseSByZWFkeSBRIGlzIGVtcHR5LiAqLworCQkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZCA9IHBNcFRjYjsKKwkJfQorCisJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwgPSBwTXBUY2I7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwkJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlEQkdfQVNTRVJUKHBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kIDw9IE5VTV9UQ0IpOworCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuaWNfc2VuZF9wYWNrZXQgLSBOSUMgc3BlY2lmaWMgc2VuZCBoYW5kbGVyIGZvciB2ZXJzaW9uIEIgc2lsaWNvbi4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICogQHBNcFRjYjogcG9pbnRlciB0byBNUF9UQ0IKKyAqCisgKiBSZXR1cm5zIDAgb3IgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgbmljX3NlbmRfcGFja2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9UQ0IgcE1wVGNiKQoreworCXVpbnQzMl90IGxvb3BJbmRleDsKKwlUWF9ERVNDX0VOVFJZX3QgQ3VyRGVzY1syNF07CisJdWludDMyX3QgRnJhZ21lbnROdW1iZXIgPSAwOworCXVpbnQzMl90IGlUaGlzQ29weSwgaVJlbWFpbmRlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcFBhY2tldCA9IHBNcFRjYi0+UGFja2V0OworCXVpbnQzMl90IEZyYWdMaXN0Q291bnQgPSBza2Jfc2hpbmZvKHBQYWNrZXQpLT5ucl9mcmFncyArIDE7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqcEZyYWdMaXN0ID0gJnNrYl9zaGluZm8ocFBhY2tldCktPmZyYWdzWzBdOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzMSwgbG9ja2ZsYWdzMjsKKworCURCR19UWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQYXJ0IG9mIHRoZSBvcHRpbWl6YXRpb25zIG9mIHRoaXMgc2VuZCByb3V0aW5lIHJlc3RyaWN0IHVzIHRvCisJICogc2VuZGluZyAyNCBmcmFnbWVudHMgYXQgYSBwYXNzLiAgSW4gcHJhY3RpY2Ugd2Ugc2hvdWxkIG5ldmVyIHNlZQorCSAqIG1vcmUgdGhhbiA1IGZyYWdtZW50cy4KKwkgKgorCSAqIE5PVEU6IFRoZSBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKGJlbG93KSBjYW4gaGFuZGxlIGFueQorCSAqIG51bWJlciBvZiBmcmFnbWVudHMuIElmIG5lZWRlZCwgd2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiwKKwkgKiBhbHRob3VnaCBpdCBpcyBsZXNzIGVmZmljaWVudC4KKwkgKi8KKwlpZiAoRnJhZ0xpc3RDb3VudCA+IDIzKSB7CisJCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCW1lbXNldChDdXJEZXNjLCAwLCBzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIChGcmFnTGlzdENvdW50ICsgMSkpOworCisJZm9yIChsb29wSW5kZXggPSAwOyBsb29wSW5kZXggPCBGcmFnTGlzdENvdW50OyBsb29wSW5kZXgrKykgeworCQkvKiBJZiB0aGVyZSBpcyBzb21ldGhpbmcgaW4gdGhpcyBlbGVtZW50LCBsZXRzIGdldCBhCisJCSAqIGRlc2NyaXB0b3IgZnJvbSB0aGUgcmluZyBhbmQgZ2V0IHRoZSBuZWNlc3NhcnkgZGF0YQorCQkgKi8KKwkJaWYgKGxvb3BJbmRleCA9PSAwKSB7CisJCQkvKiBJZiB0aGUgZnJhZ21lbnRzIGFyZSBzbWFsbGVyIHRoYW4gYSBzdGFuZGFyZCBNVFUsCisJCQkgKiB0aGVuIG1hcCB0aGVtIHRvIGEgc2luZ2xlIGRlc2NyaXB0b3IgaW4gdGhlIFR4CisJCQkgKiBEZXNjIHJpbmcuIEhvd2V2ZXIsIGlmIHRoZXkncmUgbGFyZ2VyLCBhcyBpcworCQkJICogcG9zc2libGUgd2l0aCBzdXBwb3J0IGZvciBqdW1ibyBwYWNrZXRzLCB0aGVuCisJCQkgKiBzcGxpdCB0aGVtIGVhY2ggYWNyb3NzIDIgZGVzY3JpcHRvcnMuCisJCQkgKgorCQkJICogVGhpcyB3aWxsIHdvcmsgdW50aWwgd2UgZGV0ZXJtaW5lIHdoeSB0aGUgaGFyZHdhcmUKKwkJCSAqIGRvZXNuJ3Qgc2VlbSB0byBsaWtlIGxhcmdlIGZyYWdtZW50cy4KKwkJCSAqLworCQkJaWYgKChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbikgPD0gMTUxNCkgeworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIkdvdCBwYWNrZXQgb2YgbGVuZ3RoICVkLCAiCisJCQkJICAgICAgICJmaWxsaW5nIGRlc2MgZW50cnkgJWQsICIKKwkJCQkgICAgICAgIlRDQjogMHglcFxuIiwKKwkJCQkgICAgICAgKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSwKKwkJCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuCisJCQkJICAgICAgIHZhbCwgcE1wVGNiKTsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLkRhdGFCdWZmZXJQdHJIaWdoID0gMDsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLndvcmQyLmJpdHMuCisJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJICAgIHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuOworCisJCQkJLyogTk9URTogSGVyZSwgdGhlIGRtYV9hZGRyX3QgcmV0dXJuZWQgZnJvbQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgaW1wbGljaXRseSBjYXN0IGFzIGEKKwkJCQkgKiB1aW50MzJfdC4gQWx0aG91Z2ggZG1hX2FkZHJfdCBjYW4gYmUKKwkJCQkgKiA2NC1iaXQsIHRoZSBhZGRyZXNzIHJldHVybmVkIGJ5CisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBhbHdheXMgMzItYml0CisJCQkJICogYWRkcmVzc2FibGUgKGFzIGRlZmluZWQgYnkgdGhlIHBjaS9kbWEKKwkJCQkgKiBzdWJzeXN0ZW0pCisJCQkJICovCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcisrXS5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkgICAgcGNpX21hcF9zaW5nbGUocEFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICBwUGFja2V0LT5kYXRhLAorCQkJCQkJICAgcFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgIHBQYWNrZXQtPmRhdGFfbGVuLAorCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl9IGVsc2UgeworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIkdvdCBwYWNrZXQgb2YgbGVuZ3RoICVkLCAiCisJCQkJICAgICAgICJmaWxsaW5nIGRlc2MgZW50cnkgJWQsICIKKwkJCQkgICAgICAgIlRDQjogMHglcFxuIiwKKwkJCQkgICAgICAgKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSwKKwkJCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuCisJCQkJICAgICAgIHZhbCwgcE1wVGNiKTsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLkRhdGFCdWZmZXJQdHJIaWdoID0gMDsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLndvcmQyLmJpdHMuCisJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJICAgICgocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pIC8gMik7CisKKwkJCQkvKiBOT1RFOiBIZXJlLCB0aGUgZG1hX2FkZHJfdCByZXR1cm5lZCBmcm9tCisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBpbXBsaWNpdGx5IGNhc3QgYXMgYQorCQkJCSAqIHVpbnQzMl90LiBBbHRob3VnaCBkbWFfYWRkcl90IGNhbiBiZQorCQkJCSAqIDY0LWJpdCwgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkKKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGFsd2F5cyAzMi1iaXQKKwkJCQkgKiBhZGRyZXNzYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgcGNpL2RtYQorCQkJCSAqIHN1YnN5c3RlbSkKKwkJCQkgKi8KKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyKytdLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCSAgICBwY2lfbWFwX3NpbmdsZShwQWRhcHRlci0+cGRldiwKKwkJCQkJCSAgIHBQYWNrZXQtPmRhdGEsCisJCQkJCQkgICAoKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDIpLAorCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0uRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0ud29yZDIuYml0cy4KKwkJCQkgICAgbGVuZ3RoX2luX2J5dGVzID0KKwkJCQkgICAgKChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbikgLyAyKTsKKworCQkJCS8qIE5PVEU6IEhlcmUsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIGZyb20KKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGltcGxpY2l0bHkgY2FzdCBhcyBhCisJCQkJICogdWludDMyX3QuIEFsdGhvdWdoIGRtYV9hZGRyX3QgY2FuIGJlCisJCQkJICogNjQtYml0LCB0aGUgYWRkcmVzcyByZXR1cm5lZCBieQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgYWx3YXlzIDMyLWJpdAorCQkJCSAqIGFkZHJlc3NhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBwY2kvZG1hCisJCQkJICogc3Vic3lzdGVtKQorCQkJCSAqLworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIrK10uRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgcFBhY2tldC0+ZGF0YSArCisJCQkJCQkgICAoKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDIpLAorCQkJCQkJICAgKChwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICBwUGFja2V0LT5kYXRhX2xlbikgLyAyKSwKKwkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJfQorCQl9IGVsc2UgeworCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICAgICJHb3QgcGFja2V0IG9mIGxlbmd0aCAlZCwiCisJCQkgICAgICAgImZpbGxpbmcgZGVzYyBlbnRyeSAlZFxuIgorCQkJICAgICAgICJUQ0I6IDB4JXBcbiIsCisJCQkgICAgICAgcEZyYWdMaXN0W2xvb3BJbmRleF0uc2l6ZSwKKwkJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwsCisJCQkgICAgICAgcE1wVGNiKTsKKworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0uRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS53b3JkMi5iaXRzLmxlbmd0aF9pbl9ieXRlcyA9CisJCQkgICAgcEZyYWdMaXN0W2xvb3BJbmRleCAtIDFdLnNpemU7CisKKwkJCS8qIE5PVEU6IEhlcmUsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIGZyb20KKwkJCSAqIHBjaV9tYXBfcGFnZSgpIGlzIGltcGxpY2l0bHkgY2FzdCBhcyBhIHVpbnQzMl90LgorCQkJICogQWx0aG91Z2ggZG1hX2FkZHJfdCBjYW4gYmUgNjQtYml0LCB0aGUgYWRkcmVzcworCQkJICogcmV0dXJuZWQgYnkgcGNpX21hcF9wYWdlKCkgaXMgYWx3YXlzIDMyLWJpdAorCQkJICogYWRkcmVzc2FibGUgKGFzIGRlZmluZWQgYnkgdGhlIHBjaS9kbWEgc3Vic3lzdGVtKQorCQkJICovCisJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyKytdLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJICAgIHBjaV9tYXBfcGFnZShwQWRhcHRlci0+cGRldiwKKwkJCQkJIHBGcmFnTGlzdFtsb29wSW5kZXggLSAxXS5wYWdlLAorCQkJCQkgcEZyYWdMaXN0W2xvb3BJbmRleCAtIDFdLnBhZ2Vfb2Zmc2V0LAorCQkJCQkgcEZyYWdMaXN0W2xvb3BJbmRleCAtIDFdLnNpemUsCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfQorCX0KKworCWlmIChGcmFnbWVudE51bWJlciA9PSAwKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiTm8uIGZyYWdzIGlzIDBcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy5UeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQgPT0KKwkJICAgIHBBZGFwdGVyLT5SZWdpc3RyeVR4TnVtQnVmZmVycykgeworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlciAtIDFdLndvcmQzLnZhbHVlID0gMHg1OworCQkJcEFkYXB0ZXItPlR4UmluZy5UeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQgPSAwOworCQl9IGVsc2UgeworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlciAtIDFdLndvcmQzLnZhbHVlID0gMHgxOworCQl9CisJfSBlbHNlIHsKKwkJQ3VyRGVzY1tGcmFnbWVudE51bWJlciAtIDFdLndvcmQzLnZhbHVlID0gMHg1OworCX0KKworCUN1ckRlc2NbMF0ud29yZDMuYml0cy5mID0gMTsKKworCXBNcFRjYi0+V3JJbmRleFN0YXJ0ID0gcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCXBNcFRjYi0+UGFja2V0U3RhbGVDb3VudCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFnczEpOworCisJaVRoaXNDb3B5ID0KKwkgICAgTlVNX0RFU0NfUEVSX1JJTkdfVFggLSBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWw7CisKKwlpZiAoaVRoaXNDb3B5ID49IEZyYWdtZW50TnVtYmVyKSB7CisJCWlSZW1haW5kZXIgPSAwOworCQlpVGhpc0NvcHkgPSBGcmFnbWVudE51bWJlcjsKKwl9IGVsc2UgeworCQlpUmVtYWluZGVyID0gRnJhZ21lbnROdW1iZXIgLSBpVGhpc0NvcHk7CisJfQorCisJbWVtY3B5KHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCwgQ3VyRGVzYywKKwkgICAgICAgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiBpVGhpc0NvcHkpOworCisJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsICs9IGlUaGlzQ29weTsKKworCWlmICgocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsID09IDApIHx8CisJICAgIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwgPT0KKwkgICAgIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSkgeworCQlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMud3JhcCkgeworCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlID0gMDsKKwkJfSBlbHNlIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDB4NDAwOworCQl9CisJfQorCisJaWYgKGlSZW1haW5kZXIpIHsKKwkJbWVtY3B5KHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSwKKwkJICAgICAgIEN1ckRlc2MgKyBpVGhpc0NvcHksCisJCSAgICAgICBzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIGlSZW1haW5kZXIpOworCisJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCArPSBpUmVtYWluZGVyOworCX0KKworCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwgPT0gMCkgeworCQlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlKSB7CisJCQlwTXBUY2ItPldySW5kZXgudmFsdWUgPSBOVU1fREVTQ19QRVJfUklOR19UWCAtIDE7CisJCX0gZWxzZSB7CisJCQlwTXBUY2ItPldySW5kZXgudmFsdWUgPQorCQkJICAgIDB4NDAwIHwgKE5VTV9ERVNDX1BFUl9SSU5HX1RYIC0gMSk7CisJCX0KKwl9IGVsc2UgeworCQlwTXBUY2ItPldySW5kZXgudmFsdWUgPQorCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlIC0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzMik7CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwtPk5leHQgPSBwTXBUY2I7CisJfSBlbHNlIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQgPSBwTXBUY2I7CisJfQorCisJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwgPSBwTXBUY2I7CisKKwlEQkdfQVNTRVJUKHBNcFRjYi0+TmV4dCA9PSBOVUxMKTsKKworCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kKys7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MyKTsKKworCS8qIFdyaXRlIHRoZSBuZXcgd3JpdGUgcG9pbnRlciBiYWNrIHRvIHRoZSBkZXZpY2UuICovCisJd3JpdGVsKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSwKKwkgICAgICAgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5zZXJ2aWNlX3JlcXVlc3QudmFsdWUpOworCisJLyogRm9yIEdpZyBvbmx5LCB3ZSB1c2UgVHggSW50ZXJydXB0IGNvYWxlc2NpbmcuICBFbmFibGUgdGhlIHNvZnR3YXJlCisJICogdGltZXIgdG8gd2FrZSB1cyB1cCBpZiB0aGlzIHBhY2tldCBpc24ndCBmb2xsb3dlZCBieSBOIG1vcmUuCisJICovCisJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlUeFRpbWVJbnRlcnZhbCAqIE5BTk9fSU5fQV9NSUNSTywKKwkJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzMSk7CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKgorICogTk9URTogRm9yIG5vdywga2VlcCB0aGlzIG9sZGVyIHZlcnNpb24gb2YgTklDU2VuZFBhY2tldCBhcm91bmQgZm9yCisgKiByZWZlcmVuY2UsIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IHVzZWQKKyAqLworI2lmIDAKKworLyoqCisgKiBOSUNTZW5kUGFja2V0IC0gTklDIHNwZWNpZmljIHNlbmQgaGFuZGxlci4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICogQHBNcFRjYjogcG9pbnRlciB0byBNUF9UQ0IKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzLCBlcnJubyBvbiBmYWlsdXJlLgorICoKKyAqIFRoaXMgdmVyc2lvbiBvZiB0aGUgc2VuZCByb3V0aW5lIGlzIGRlc2lnbmVkIGZvciB2ZXJzaW9uIEEgc2lsaWNvbi4KKyAqIEFzc3VtcHRpb24gLSBTZW5kIHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICovCitzdGF0aWMgaW50IG5pY19zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfVENCIHBNcFRjYikKK3sKKwl1aW50MzJfdCBsb29wSW5kZXgsIGZyYWdJbmRleCwgbG9vcEVuZDsKKwl1aW50MzJfdCBpU3BsaXRGaXJzdEVsZW1lbnQgPSAwOworCXVpbnQzMl90IFNlZ21lbnRTaXplID0gMDsKKwlUWF9ERVNDX0VOVFJZX3QgQ3VyRGVzYzsKKwlUWF9ERVNDX0VOVFJZX3QgKkN1ckRlc2NQb3N0Q29weSA9IE5VTEw7CisJdWludDMyX3QgU2xvdHNBdmFpbGFibGU7CisJRE1BMTBXX3QgU2VydmljZUNvbXBsZXRlOworCXVuc2lnbmVkIGludCBsb2NrZmxhZ3MxLCBsb2NrZmxhZ3MyOworCXN0cnVjdCBza19idWZmICpwUGFja2V0ID0gcE1wVGNiLT5QYWNrZXQ7CisJdWludDMyX3QgRnJhZ0xpc3RDb3VudCA9IHNrYl9zaGluZm8ocFBhY2tldCktPm5yX2ZyYWdzICsgMTsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpwRnJhZ0xpc3QgPSAmc2tiX3NoaW5mbyhwUGFja2V0KS0+ZnJhZ3NbMF07CisKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJU2VydmljZUNvbXBsZXRlLnZhbHVlID0KKwkJcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5OZXdTZXJ2aWNlQ29tcGxldGUudmFsdWUpOworCisJLyoKKwkgKiBBdHRlbXB0IHRvIGZpeCBUV08gaGFyZHdhcmUgYnVnczoKKwkgKiAxKSAgTkVWRVIgd3JpdGUgYW4gb2RkIG51bWJlciBvZiBkZXNjcmlwdG9ycy4KKwkgKiAyKSAgSWYgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gTklDX01JTl9QQUNLRVRfU0laRSwgdGhlbiBwYWQgdGhlCisJICogICAgIHBhY2tldCB0byBOSUNfTUlOX1BBQ0tFVF9TSVpFIGJ5dGVzIGJ5IGFkZGluZyBhIG5ldyBsYXN0CisJICogICAgIGRlc2NyaXB0b3IgSU4gSEFMRiBEVVBMRVggTU9ERSBPTkxZCisJICogTk9URSB0aGF0ICgyKSBpbnRlcmFjdHMgd2l0aCAoMSkuICBJZiB0aGUgcGFja2V0IGlzIGxlc3MgdGhhbgorCSAqIE5JQ19NSU5fUEFDS0VUX1NJWkUgYnl0ZXMgdGhlbiB3ZSB3aWxsIGFwcGVuZCBhIGRlc2NyaXB0b3IuCisJICogVGhlcmVmb3JlIGlmIGl0IGlzIGV2ZW4gbm93LCBpdCB3aWxsIGV2ZW50dWFsbHkgZW5kIHVwIG9kZCwgYW5kCisJICogc28gd2lsbCBuZWVkIGFkanVzdGluZy4KKwkgKgorCSAqIFZMQU4gdGFncyBnZXQgaW52b2x2ZWQgc2luY2UgVkxBTiB0YWdzIGFkZCBhbm90aGVyIG9uZSBvciB0d28KKwkgKiBzZWdtZW50cy4KKwkgKi8KKwlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJICAgICAgICJwTXBUY2ItPlBhY2tldExlbmd0aDogJWRcbiIsIHBNcFRjYi0+UGFja2V0TGVuZ3RoKTsKKworCWlmICgocEFkYXB0ZXItPnVpRHVwbGV4TW9kZSA9PSAwKQorCSAgICAmJiAocE1wVGNiLT5QYWNrZXRMZW5ndGggPCBOSUNfTUlOX1BBQ0tFVF9TSVpFKSkgeworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiSEFMRiBEVVBMRVggbW9kZSBBTkQgbGVuIDwgTUlOX1BLVF9TSVpFXG4iKTsKKwkJaWYgKChGcmFnTGlzdENvdW50ICYgMHgxKSA9PSAwKSB7CisJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgICAgIkV2ZW4gbnVtYmVyIG9mIGRlc2NzLCBzcGxpdCAxc3QgZWxlbVxuIik7CisJCQlpU3BsaXRGaXJzdEVsZW1lbnQgPSAxOworCQkJLy9TZWdtZW50U2l6ZSA9IHBGcmFnTGlzdFswXS5zaXplIC8gMjsKKwkJCVNlZ21lbnRTaXplID0gKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDI7CisJCX0KKwl9IGVsc2UgaWYgKEZyYWdMaXN0Q291bnQgJiAweDEpIHsKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiT2RkIG51bWJlciBvZiBkZXNjcywgc3BsaXQgMXN0IGVsZW1cbiIpOworCisJCWlTcGxpdEZpcnN0RWxlbWVudCA9IDE7CisJCS8vU2VnbWVudFNpemUgPSBwRnJhZ0xpc3RbMF0uc2l6ZSAvIDI7CisJCVNlZ21lbnRTaXplID0gKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDI7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MxKTsKKworCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcV93cmFwID09CisJICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLnNlcnZfY3BsX3dyYXApIHsKKwkJLyogVGhlIHJpbmcgaGFzbid0IHdyYXBwZWQuICBTbG90cyBhdmFpbGFibGUgc2hvdWxkIGJlCisJCSAqIChSSU5HX1NJWkUpIC0gIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwb2ludGVycy4KKwkJICovCisJCVNsb3RzQXZhaWxhYmxlID0gTlVNX0RFU0NfUEVSX1JJTkdfVFggLQorCQkgICAgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxIC0KKwkJICAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy5zZXJ2X2NwbCk7CisJfSBlbHNlIHsKKwkJLyogVGhlIHJpbmcgaGFzIHdyYXBwZWQuICBTbG90cyBhdmFpbGFibGUgc2hvdWxkIGJlIHRoZQorCQkgKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwb2ludGVycy4KKwkJICovCisJCVNsb3RzQXZhaWxhYmxlID0gU2VydmljZUNvbXBsZXRlLmJpdHMuc2Vydl9jcGwgLQorCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXE7CisJfQorCisJaWYgKChGcmFnTGlzdENvdW50ICsgaVNwbGl0Rmlyc3RFbGVtZW50KSA+IFNsb3RzQXZhaWxhYmxlKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJOb3QgRW5vdWdoIFNwYWNlIGluIFR4IERlc2MgUmluZ1xuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MxKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbG9vcEVuZCA9IChGcmFnTGlzdENvdW50KSArIGlTcGxpdEZpcnN0RWxlbWVudDsKKwlmcmFnSW5kZXggPSAwOworCisJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCSAgICAgICAiVENCICAgICAgICAgICA6IDB4JXBcbiIKKwkgICAgICAgIlBhY2tldCAoU0tCKSAgOiAweCVwXHQgUGFja2V0LT5sZW46ICVkXHQgUGFja2V0LT5kYXRhX2xlbjogJWRcbiIKKwkgICAgICAgIkZyYWdMaXN0Q291bnQgOiAlZFx0IGlTcGxpdEZpcnN0RWxlbWVudDogJWRcdCBsb29wRW5kOiVkXG4iLAorCSAgICAgICBwTXBUY2IsCisJICAgICAgIHBQYWNrZXQsIHBQYWNrZXQtPmxlbiwgcFBhY2tldC0+ZGF0YV9sZW4sCisJICAgICAgIEZyYWdMaXN0Q291bnQsIGlTcGxpdEZpcnN0RWxlbWVudCwgbG9vcEVuZCk7CisKKwlmb3IgKGxvb3BJbmRleCA9IDA7IGxvb3BJbmRleCA8IGxvb3BFbmQ7IGxvb3BJbmRleCsrKSB7CisJCWlmIChsb29wSW5kZXggPiBpU3BsaXRGaXJzdEVsZW1lbnQpIHsKKwkJCWZyYWdJbmRleCsrOworCQl9CisKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIkluIGxvb3AsIGxvb3BJbmRleDogJWRcdCBmcmFnSW5kZXg6ICVkXG4iLCBsb29wSW5kZXgsCisJCSAgICAgICBmcmFnSW5kZXgpOworCisJCS8qIElmIHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGlzIGVsZW1lbnQsIGxldCdzIGdldCBhCisJCSAqIGRlc2NyaXB0b3IgZnJvbSB0aGUgcmluZyBhbmQgZ2V0IHRoZSBuZWNlc3NhcnkgZGF0YQorCQkgKi8KKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIlBhY2tldCBMZW5ndGggJWQsIgorCQkgICAgICAgImZpbGxpbmcgZGVzYyBlbnRyeSAlZFxuIiwKKwkJICAgICAgIHBQYWNrZXQtPmxlbiwKKwkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxKTsKKworCQkvLyBOT1RFIC0gU2hvdWxkIHdlIGRvIGEgcGFyYW5vaWEgY2hlY2sgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGZyYWdtZW50CisJCS8vIGFjdHVhbGx5IGhhcyBhIGxlbmd0aD8gSXQncyBISUdITFkgdW5saWtlbHkgdGhlIGZyYWdtZW50IHdvdWxkCisJCS8vIGNvbnRhaW4gbm8gZGF0YS4uLgorCQlpZiAoMSkgeworCQkJLy8gTk9URSAtIEN1cnJlbnRseSBhbHdheXMgZ2V0dGluZyAzMi1iaXQgYWRkcnMsIGFuZCBkbWFfYWRkcl90IGlzCisJCQkvLyAgICAgICAgb25seSAzMi1iaXQsIHNvIGxlYXZlICJoaWdoIiBwdHIgdmFsdWUgb3V0IGZvciBub3cKKwkJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQlDdXJEZXNjLndvcmQyLnZhbHVlID0gMDsKKwkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAwOworCisJCQlpZiAoZnJhZ0luZGV4ID09IDApIHsKKwkJCQlpZiAoaVNwbGl0Rmlyc3RFbGVtZW50KSB7CisJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICAgICJTcGxpdCBmaXJzdCBlbGVtZW50OiBZRVNcbiIpOworCisJCQkJCWlmIChsb29wSW5kZXggPT0gMCkgeworCQkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkJICAgICAgICJHb3QgZnJhZ21lbnQgb2YgbGVuZ3RoICVkLCBmcmFnSW5kZXg6ICVkXG4iLAorCQkJCQkJICAgICAgIHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgICAgcFBhY2tldC0+ZGF0YV9sZW4sCisJCQkJCQkgICAgICAgZnJhZ0luZGV4KTsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAiU2VnbWVudFNpemU6ICVkXG4iLAorCQkJCQkJICAgICAgIFNlZ21lbnRTaXplKTsKKworCQkJCQkJQ3VyRGVzYy53b3JkMi5iaXRzLgorCQkJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJCQkgICAgU2VnbWVudFNpemU7CisJCQkJCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT4KKwkJCQkJCQkJICAgcGRldiwKKwkJCQkJCQkJICAgcFBhY2tldC0+CisJCQkJCQkJCSAgIGRhdGEsCisJCQkJCQkJCSAgIFNlZ21lbnRTaXplLAorCQkJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAicGNpX21hcF9zaW5nbGUoKSByZXR1cm5zOiAweCUwOHhcbiIsCisJCQkJCQkgICAgICAgQ3VyRGVzYy4KKwkJCQkJCSAgICAgICBEYXRhQnVmZmVyUHRyTG93KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAiR290IGZyYWdtZW50IG9mIGxlbmd0aCAlZCwgZnJhZ0luZGV4OiAlZFxuIiwKKwkJCQkJCSAgICAgICBwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICAgIHBQYWNrZXQtPmRhdGFfbGVuLAorCQkJCQkJICAgICAgIGZyYWdJbmRleCk7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgIkxlZnRvdmVyIFNpemU6ICVkXG4iLAorCQkJCQkJICAgICAgIChwUGFja2V0LT5sZW4gLQorCQkJCQkJCXBQYWNrZXQtPmRhdGFfbGVuIC0KKwkJCQkJCQlTZWdtZW50U2l6ZSkpOworCisJCQkJCQlDdXJEZXNjLndvcmQyLmJpdHMuCisJCQkJCQkgICAgbGVuZ3RoX2luX2J5dGVzID0KKwkJCQkJCSAgICAoKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgICBwUGFja2V0LT5kYXRhX2xlbikgLQorCQkJCQkJICAgICBTZWdtZW50U2l6ZSk7CisJCQkJCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT4KKwkJCQkJCQkJICAgcGRldiwKKwkJCQkJCQkJICAgKHBQYWNrZXQtPgorCQkJCQkJCQkgICAgZGF0YSArCisJCQkJCQkJCSAgICBTZWdtZW50U2l6ZSksCisJCQkJCQkJCSAgIChwUGFja2V0LT4KKwkJCQkJCQkJICAgIGxlbiAtCisJCQkJCQkJCSAgICBwUGFja2V0LT4KKwkJCQkJCQkJICAgIGRhdGFfbGVuIC0KKwkJCQkJCQkJICAgIFNlZ21lbnRTaXplKSwKKwkJCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgInBjaV9tYXBfc2luZ2xlKCkgcmV0dXJuczogMHglMDh4XG4iLAorCQkJCQkJICAgICAgIEN1ckRlc2MuCisJCQkJCQkgICAgICAgRGF0YUJ1ZmZlclB0ckxvdyk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAgICAiU3BsaXQgZmlyc3QgZWxlbWVudDogTk9cbiIpOworCisJCQkJCUN1ckRlc2Mud29yZDIuYml0cy5sZW5ndGhfaW5fYnl0ZXMgPQorCQkJCQkgICAgcFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW47CisKKwkJCQkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkJCSAgIHBQYWNrZXQtPmRhdGEsCisJCQkJCQkJICAgKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkJICAgIHBQYWNrZXQtPmRhdGFfbGVuKSwKKwkJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgICAgInBjaV9tYXBfc2luZ2xlKCkgcmV0dXJuczogMHglMDh4XG4iLAorCQkJCQkgICAgICAgQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCisJCQkJQ3VyRGVzYy53b3JkMi5iaXRzLmxlbmd0aF9pbl9ieXRlcyA9CisJCQkJICAgIHBGcmFnTGlzdFtmcmFnSW5kZXggLSAxXS5zaXplOworCQkJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJICAgIHBjaV9tYXBfcGFnZShwQWRhcHRlci0+cGRldiwKKwkJCQkJCSBwRnJhZ0xpc3RbZnJhZ0luZGV4IC0gMV0ucGFnZSwKKwkJCQkJCSBwRnJhZ0xpc3RbZnJhZ0luZGV4IC0KKwkJCQkJCQkgICAxXS5wYWdlX29mZnNldCwKKwkJCQkJCSBwRnJhZ0xpc3RbZnJhZ0luZGV4IC0gMV0uc2l6ZSwKKwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICAgICJwY2lfbWFwX3BhZ2UoKSByZXR1cm5zOiAweCUwOHhcbiIsCisJCQkJICAgICAgIEN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyk7CisJCQl9CisKKwkJCWlmIChsb29wSW5kZXggPT0gMCkgeworCQkJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGRlc2NyaXB0b3Igb2YgdGhlIHBhY2tldAorCQkJCSAqCisJCQkJICogU2V0IHRoZSAiZiIgYml0IHRvIGluZGljYXRlIHRoaXMgaXMgdGhlCisJCQkJICogZmlyc3QgZGVzY3JpcHRvciBpbiB0aGUgcGFja2V0LgorCQkJCSAqLworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIlRoaXMgaXMgb3VyIEZJUlNUIGRlc2NyaXB0b3JcbiIpOworCQkJCUN1ckRlc2Mud29yZDMuYml0cy5mID0gMTsKKworCQkJCXBNcFRjYi0+V3JJbmRleFN0YXJ0ID0KKwkJCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCQkJfQorCisJCQlpZiAoKGxvb3BJbmRleCA9PSAobG9vcEVuZCAtIDEpKSAmJgorCQkJICAgIChwQWRhcHRlci0+dWlEdXBsZXhNb2RlIHx8CisJCQkgICAgIChwTXBUY2ItPlBhY2tldExlbmd0aCA+PSBOSUNfTUlOX1BBQ0tFVF9TSVpFKSkpIHsKKwkJCQkvKiBUaGlzIGlzIHRoZSBMYXN0IGRlc2NyaXB0b3Igb2YgdGhlIHBhY2tldCAqLworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIlRISVMgaXMgb3VyIExBU1QgZGVzY3JpcHRvclxuIik7CisKKwkJCQlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09CisJCQkJICAgIFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJCQkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy4KKwkJCQkJICAgIFR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdCA+PQorCQkJCQkgICAgcEFkYXB0ZXItPlJlZ2lzdHJ5VHhOdW1CdWZmZXJzKSB7CisJCQkJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHg1OworCQkJCQkJcEFkYXB0ZXItPlR4UmluZy4KKwkJCQkJCSAgICBUeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQKKwkJCQkJCSAgICA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHgxOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4NTsKKwkJCQl9CisKKwkJCQkvKiBGb2xsb3dpbmcgaW5kZXggd2lsbCBiZSB1c2VkIGR1cmluZyBmcmVlaW5nCisJCQkJICogb2YgcGFja2V0CisJCQkJICovCisJCQkJcE1wVGNiLT5XckluZGV4ID0KKwkJCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCQkJCXBNcFRjYi0+UGFja2V0U3RhbGVDb3VudCA9IDA7CisJCQl9CisKKwkJCS8qIENvcHkgdGhlIGRlc2NyaXB0b3IgKGZpbGxlZCBhYm92ZSkgaW50byB0aGUKKwkJCSAqIGRlc2NyaXB0b3IgcmluZyBhdCB0aGUgbmV4dCBmcmVlIGVudHJ5LiAgQWR2YW5jZQorCQkJICogdGhlICJuZXh0IGZyZWUgZW50cnkiIHZhcmlhYmxlCisJCQkgKi8KKwkJCW1lbWNweShwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxLAorCQkJICAgICAgICZDdXJEZXNjLCBzaXplb2YoVFhfREVTQ19FTlRSWV90KSk7CisKKwkJCUN1ckRlc2NQb3N0Q29weSA9CisJCQkgICAgcEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJCSAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcTsKKworCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICAgICJDVVJSRU5UIERFU0NSSVBUT1JcbiIKKwkJCSAgICAgICAiXHRBZGRyZXNzICAgICAgICAgICA6IDB4JXBcbiIKKwkJCSAgICAgICAiXHREYXRhQnVmZmVyUHRySGlnaCA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdERhdGFCdWZmZXJQdHJMb3cgIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0d29yZDIgICAgICAgICAgICAgOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHR3b3JkMyAgICAgICAgICAgICA6IDB4JTA4eFxuIiwKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHksCisJCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT5EYXRhQnVmZmVyUHRySGlnaCwKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPkRhdGFCdWZmZXJQdHJMb3csCisJCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT53b3JkMi52YWx1ZSwKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPndvcmQzLnZhbHVlKTsKKworCQkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEgPj0KKwkJCSAgICBOVU1fREVTQ19QRVJfUklOR19UWCkgeworCQkJCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy4KKwkJCQkgICAgc2Vydl9yZXFfd3JhcCkgeworCQkJCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuCisJCQkJCSAgICB2YWx1ZSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLgorCQkJCQkgICAgdmFsdWUgPSAweDQwMDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAocEFkYXB0ZXItPnVpRHVwbGV4TW9kZSA9PSAwICYmCisJICAgIHBNcFRjYi0+UGFja2V0TGVuZ3RoIDwgTklDX01JTl9QQUNLRVRfU0laRSkgeworCQkvLyBOT1RFIC0gU2FtZSAzMi82NC1iaXQgaXNzdWUgYXMgYWJvdmUuLi4KKwkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRySGlnaCA9IDB4MDsKKwkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93ID0gcEFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1BhOworCQlDdXJEZXNjLndvcmQyLnZhbHVlID0gMDsKKworCQlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJCWlmICgrK3BBZGFwdGVyLT5UeFJpbmcuVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0ID49CisJCQkgICAgcEFkYXB0ZXItPlJlZ2lzdHJ5VHhOdW1CdWZmZXJzKSB7CisJCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4NTsKKwkJCQlwQWRhcHRlci0+VHhSaW5nLlR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdCA9CisJCQkJICAgIDA7CisJCQl9IGVsc2UgeworCQkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAweDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHg1OworCQl9CisKKwkJQ3VyRGVzYy53b3JkMi5iaXRzLmxlbmd0aF9pbl9ieXRlcyA9CisJCSAgICBOSUNfTUlOX1BBQ0tFVF9TSVpFIC0gcE1wVGNiLT5QYWNrZXRMZW5ndGg7CisKKwkJcE1wVGNiLT5XckluZGV4ID0gcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCisJCW1lbWNweShwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEsCisJCSAgICAgICAmQ3VyRGVzYywgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkpOworCisJCUN1ckRlc2NQb3N0Q29weSA9CisJCSAgICBwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXE7CisKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIkNVUlJFTlQgREVTQ1JJUFRPUlxuIgorCQkgICAgICAgIlx0QWRkcmVzcyAgICAgICAgICAgOiAweCVwXG4iCisJCSAgICAgICAiXHREYXRhQnVmZmVyUHRySGlnaCA6IDB4JTA4eFxuIgorCQkgICAgICAgIlx0RGF0YUJ1ZmZlclB0ckxvdyAgOiAweCUwOHhcbiIKKwkJICAgICAgICJcdHdvcmQyICAgICAgICAgICAgIDogMHglMDh4XG4iCisJCSAgICAgICAiXHR3b3JkMyAgICAgICAgICAgICA6IDB4JTA4eFxuIiwKKwkJICAgICAgIEN1ckRlc2NQb3N0Q29weSwKKwkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+RGF0YUJ1ZmZlclB0ckhpZ2gsCisJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPkRhdGFCdWZmZXJQdHJMb3csCisJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPndvcmQyLnZhbHVlLAorCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT53b3JkMy52YWx1ZSk7CisKKwkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEgPj0KKwkJICAgIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSB7CisJCQlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuCisJCQkgICAgc2Vydl9yZXFfd3JhcCkgeworCQkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDB4NDAwOworCQkJfQorCQl9CisKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiUGFkZGluZyBkZXNjcmlwdG9yICVkIGJ5ICVkIGJ5dGVzXG4iLAorCQkgICAgICAgLy9wQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUsCisJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSwKKwkJICAgICAgIE5JQ19NSU5fUEFDS0VUX1NJWkUgLSBwTXBUY2ItPlBhY2tldExlbmd0aCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFnczIpOworCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsLT5OZXh0ID0gcE1wVGNiOworCX0gZWxzZSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkID0gcE1wVGNiOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsID0gcE1wVGNiOworCisJREJHX0FTU0VSVChwTXBUY2ItPk5leHQgPT0gTlVMTCk7CisKKwlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCsrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzMik7CisKKwkvKiBXcml0ZSB0aGUgbmV3IHdyaXRlIHBvaW50ZXIgYmFjayB0byB0aGUgZGV2aWNlLiAqLworCXdyaXRlbChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUsCisJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuc2VydmljZV9yZXF1ZXN0LnZhbHVlKTsKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwlEdW1wRGV2aWNlQmxvY2soREJHX1RYX09OLCBwQWRhcHRlciwgMSk7CisjZW5kaWYKKworCS8qIEZvciBHaWcgb25seSwgd2UgdXNlIFR4IEludGVycnVwdCBjb2FsZXNjaW5nLiAgRW5hYmxlIHRoZSBzb2Z0d2FyZQorCSAqIHRpbWVyIHRvIHdha2UgdXMgdXAgaWYgdGhpcyBwYWNrZXQgaXNuJ3QgZm9sbG93ZWQgYnkgTiBtb3JlLgorCSAqLworCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgeworCQl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5VHhUaW1lSW50ZXJ2YWwgKiBOQU5PX0lOX0FfTUlDUk8sCisJCSAgICAgICAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC53YXRjaGRvZ190aW1lcik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFnczEpOworCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKy8qKgorICogZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQgLSBSZWN5Y2xlIGEgTVBfVENCLCBjb21wbGV0ZSB0aGUgcGFja2V0IGlmIG5lY2Vzc2FyeQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKiBAcE1wVGNiOiBwb2ludGVyIHRvIE1QX1RDQgorICoKKyAqIEFzc3VtcHRpb24gLSBTZW5kIHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkCisgKi8KK19faW5saW5lIHZvaWQgZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgUE1QX1RDQiBwTXBUY2IpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJVFhfREVTQ19FTlRSWV90ICpkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcEFkYXB0ZXItPm5ldF9zdGF0czsKKworCWlmIChNUF9URVNUX0ZMQUcocE1wVGNiLCBmTVBfREVTVF9CUk9BRCkpIHsKKwkJYXRvbWljX2luYygmcEFkYXB0ZXItPlN0YXRzLmJyZGNzdHhtdCk7CisJfSBlbHNlIGlmIChNUF9URVNUX0ZMQUcocE1wVGNiLCBmTVBfREVTVF9NVUxUSSkpIHsKKwkJYXRvbWljX2luYygmcEFkYXB0ZXItPlN0YXRzLm11bHRpeG10KTsKKwl9IGVsc2UgeworCQlhdG9taWNfaW5jKCZwQWRhcHRlci0+U3RhdHMudW5peG10KTsKKwl9CisKKwlpZiAocE1wVGNiLT5QYWNrZXQpIHsKKwkJc3RhdHMtPnR4X2J5dGVzICs9IHBNcFRjYi0+UGFja2V0LT5sZW47CisKKwkJLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBUWCBkZXNjcmlwdG9ycyBvbiB0aGUgcmluZworCQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcGFja2V0IGFuZCB1bWFwIHRoZSBmcmFnbWVudHMKKwkJICogdGhleSBwb2ludCB0bworCQkgKi8KKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIlVubWFwIGRlc2NyaXB0b3JzIEhlcmVcbiIKKwkJICAgICAgICJUQ0IgICAgICAgICAgICAgICAgICA6IDB4JXBcbiIKKwkJICAgICAgICJUQ0IgTmV4dCAgICAgICAgICAgICA6IDB4JXBcbiIKKwkJICAgICAgICJUQ0IgUGFja2V0TGVuZ3RoICAgICA6ICVkXG4iCisJCSAgICAgICAiVENCIFdySW5kZXgudmFsdWUgICAgOiAweCUwOHhcbiIKKwkJICAgICAgICJUQ0IgV3JJbmRleC5iaXRzLnZhbCA6ICVkXG4iCisJCSAgICAgICAiVENCIFdySW5kZXgudmFsdWUgICAgOiAweCUwOHhcbiIKKwkJICAgICAgICJUQ0IgV3JJbmRleC5iaXRzLnZhbCA6ICVkXG4iLAorCQkgICAgICAgcE1wVGNiLAorCQkgICAgICAgcE1wVGNiLT5OZXh0LAorCQkgICAgICAgcE1wVGNiLT5QYWNrZXRMZW5ndGgsCisJCSAgICAgICBwTXBUY2ItPldySW5kZXhTdGFydC52YWx1ZSwKKwkJICAgICAgIHBNcFRjYi0+V3JJbmRleFN0YXJ0LmJpdHMudmFsLAorCQkgICAgICAgcE1wVGNiLT5XckluZGV4LnZhbHVlLAorCQkgICAgICAgcE1wVGNiLT5XckluZGV4LmJpdHMudmFsKTsKKworCQlkbyB7CisJCQlkZXNjID0KKwkJCSAgICAoVFhfREVTQ19FTlRSWV90ICopIChwQWRhcHRlci0+VHhSaW5nLgorCQkJCQkJIHBUeERlc2NSaW5nVmEgKworCQkJCQkJIHBNcFRjYi0+V3JJbmRleFN0YXJ0LmJpdHMudmFsKTsKKworCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICAgICJDVVJSRU5UIERFU0NSSVBUT1JcbiIKKwkJCSAgICAgICAiXHRBZGRyZXNzICAgICAgICAgICA6IDB4JXBcbiIKKwkJCSAgICAgICAiXHREYXRhQnVmZmVyUHRySGlnaCA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdERhdGFCdWZmZXJQdHJMb3cgIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0d29yZDIgICAgICAgICAgICAgOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHR3b3JkMyAgICAgICAgICAgICA6IDB4JTA4eFxuIiwKKwkJCSAgICAgICBkZXNjLAorCQkJICAgICAgIGRlc2MtPkRhdGFCdWZmZXJQdHJIaWdoLAorCQkJICAgICAgIGRlc2MtPkRhdGFCdWZmZXJQdHJMb3csCisJCQkgICAgICAgZGVzYy0+d29yZDIudmFsdWUsCisJCQkgICAgICAgZGVzYy0+d29yZDMudmFsdWUpOworCisJCQlwY2lfdW5tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkgZGVzYy0+RGF0YUJ1ZmZlclB0ckxvdywKKwkJCQkJIGRlc2MtPndvcmQyLnZhbHVlLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQkJaWYgKCsrcE1wVGNiLT5XckluZGV4U3RhcnQuYml0cy52YWwgPj0KKwkJCSAgICBOVU1fREVTQ19QRVJfUklOR19UWCkgeworCQkJCWlmIChwTXBUY2ItPldySW5kZXhTdGFydC5iaXRzLndyYXApIHsKKwkJCQkJcE1wVGNiLT5XckluZGV4U3RhcnQudmFsdWUgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXBNcFRjYi0+V3JJbmRleFN0YXJ0LnZhbHVlID0gMHg0MDA7CisJCQkJfQorCQkJfQorCQl9CisJCXdoaWxlIChkZXNjICE9IChwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkJCXBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCkpOworCisJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJGcmVlIFBhY2tldCAoU0tCKSAgIDogMHglcFxuIiwgcE1wVGNiLT5QYWNrZXQpOworCisJCWRldl9rZnJlZV9za2JfYW55KHBNcFRjYi0+UGFja2V0KTsKKwl9CisKKwltZW1zZXQocE1wVGNiLCAwLCBzaXplb2YoTVBfVENCKSk7CisKKwkvKiBBZGQgdGhlIFRDQiB0byB0aGUgUmVhZHkgUSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBBZGFwdGVyLT5TdGF0cy5vcGFja2V0cysrOworCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbC0+TmV4dCA9IHBNcFRjYjsKKwl9IGVsc2UgeworCQkvKiBBcHBhcmVudGx5IHJlYWR5IFEgaXMgZW1wdHkuICovCisJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZUhlYWQgPSBwTXBUY2I7CisJfQorCisJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbCA9IHBNcFRjYjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJREJHX0FTU0VSVChwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCA+PSAwKTsKK30KKworLyoqCisgKiBldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyAtIEZyZWUgYW5kIGNvbXBsZXRlIHRoZSBzdG9wcGVkIGFjdGl2ZSBzZW5kcworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogQXNzdW1wdGlvbiAtIFNlbmQgc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQKKyAqLwordm9pZCBldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVBNUF9UQ0IgcE1wVGNiOworCXN0cnVjdCBsaXN0X2hlYWQgKnBFbnRyeTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcFBhY2tldCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJdWludDMyX3QgRnJlZUNvdW50ZXIgPSAwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcEFkYXB0ZXItPlR4UmluZy5TZW5kV2FpdFF1ZXVlKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRXYWl0TG9jaywgbG9ja2ZsYWdzKTsKKworCQlwQWRhcHRlci0+VHhSaW5nLm5XYWl0U2VuZC0tOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZFdhaXRMb2NrLCBsb2NrZmxhZ3MpOworCisJCXBFbnRyeSA9IHBBZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZS5uZXh0OworCisJCXBQYWNrZXQgPSBOVUxMOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcubldhaXRTZW5kID0gMDsKKworCS8qIEFueSBwYWNrZXRzIGJlaW5nIHNlbnQ/IENoZWNrIHRoZSBmaXJzdCBUQ0Igb24gdGhlIHNlbmQgbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisKKwl3aGlsZSAoKHBNcFRjYiAhPSBOVUxMKSAmJiAoRnJlZUNvdW50ZXIgPCBOVU1fVENCKSkgeworCQlQTVBfVENCIHBOZXh0ID0gcE1wVGNiLT5OZXh0OworCisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkID0gcE5leHQ7CisKKwkJaWYgKHBOZXh0ID09IE5VTEwpIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsID0gTlVMTDsKKwkJfQorCisJCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kLS07CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgInBNcFRjYiA9IDB4JXBcbiIsIHBNcFRjYik7CisKKwkJRnJlZUNvdW50ZXIrKzsKKwkJTVBfRlJFRV9TRU5EX1BBQ0tFVF9GVU4ocEFkYXB0ZXIsIHBNcFRjYik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwkJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJfQorCisJaWYgKEZyZWVDb3VudGVyID09IE5VTV9UQ0IpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTXBGcmVlQnVzeVNlbmRQYWNrZXRzIGV4aXR0ZWQgbG9vcCBmb3IgYSBiYWQgcmVhc29uXG4iKTsKKwkJQlVHKCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kID0gMDsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdCAtIEludGVycnVwdCBoYW5kbGVyIGZvciBzZW5kaW5nIHByb2Nlc3NpbmcKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIFJlLWNsYWltIHRoZSBzZW5kIHJlc291cmNlcywgY29tcGxldGUgc2VuZHMgYW5kIGdldCBtb3JlIHRvIHNlbmQgZnJvbQorICogdGhlIHNlbmQgd2FpdCBxdWV1ZS4KKyAqCisgKiBBc3N1bXB0aW9uIC0gU2VuZCBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZAorICovCit2b2lkIGV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTWFyayBhcyBjb21wbGV0ZWQgYW55IHBhY2tldHMgd2hpY2ggaGF2ZSBiZWVuIHNlbnQgYnkgdGhlIGRldmljZS4gKi8KKwlldDEzMXhfdXBkYXRlX3RjYl9saXN0KHBBZGFwdGVyKTsKKworCS8qIElmIHdlIHF1ZXVlZCBhbnkgdHJhbnNtaXRzIGJlY2F1c2Ugd2UgZGlkbid0IGhhdmUgYW55IFRDQnMgZWFybGllciwKKwkgKiBkZXF1ZXVlIGFuZCBzZW5kIHRob3NlIHBhY2tldHMgbm93LCBhcyBsb25nIGFzIHdlIGhhdmUgZnJlZSBUQ0JzLgorCSAqLworCWV0MTMxeF9jaGVja19zZW5kX3dhaXRfbGlzdChwQWRhcHRlcik7CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF91cGRhdGVfdGNiX2xpc3QgLSBIZWxwZXIgcm91dGluZSBmb3IgU2VuZCBJbnRlcnJ1cHQgaGFuZGxlcgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogUmUtY2xhaW1zIHRoZSBzZW5kIHJlc291cmNlcyBhbmQgY29tcGxldGVzIHNlbmRzLiAgQ2FuIGFsc28gYmUgY2FsbGVkIGFzCisgKiBwYXJ0IG9mIHRoZSBOSUMgc2VuZCByb3V0aW5lIHdoZW4gdGhlICJTZXJ2aWNlQ29tcGxldGUiIGluZGljYXRpb24gaGFzCisgKiB3cmFwcGVkLgorICovCitzdGF0aWMgdm9pZCBldDEzMXhfdXBkYXRlX3RjYl9saXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJRE1BMTBXX3QgU2VydmljZUNvbXBsZXRlOworCVBNUF9UQ0IgcE1wVGNiOworCisJU2VydmljZUNvbXBsZXRlLnZhbHVlID0KKwkgICAgcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5OZXdTZXJ2aWNlQ29tcGxldGUudmFsdWUpOworCisJLyogSGFzIHRoZSByaW5nIHdyYXBwZWQ/ICBQcm9jZXNzIGFueSBkZXNjcmlwdG9ycyB0aGF0IGRvIG5vdCBoYXZlCisJICogdGhlIHNhbWUgIndyYXAiIGluZGljYXRvciBhcyB0aGUgY3VycmVudCBjb21wbGV0aW9uIGluZGljYXRvcgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJd2hpbGUgKHBNcFRjYiAmJgorCSAgICAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy53cmFwICE9IHBNcFRjYi0+V3JJbmRleC5iaXRzLndyYXAgICYmCisJICAgICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLnZhbCA8IHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCkgeworCQlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZC0tOworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZCA9IHBNcFRjYi0+TmV4dDsKKwkJaWYgKHBNcFRjYi0+TmV4dCA9PSBOVUxMKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCA9IE5VTEw7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCQlNUF9GUkVFX1NFTkRfUEFDS0VUX0ZVTihwQWRhcHRlciwgcE1wVGNiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwkJLyogR290byB0aGUgbmV4dCBwYWNrZXQgKi8KKwkJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJfQorCXdoaWxlIChwTXBUY2IgJiYKKwkgICAgICAgU2VydmljZUNvbXBsZXRlLmJpdHMud3JhcCA9PSBwTXBUY2ItPldySW5kZXguYml0cy53cmFwICYmCisJICAgICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLnZhbCA+IHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCkgeworCQlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZC0tOworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZCA9IHBNcFRjYi0+TmV4dDsKKwkJaWYgKHBNcFRjYi0+TmV4dCA9PSBOVUxMKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCA9IE5VTEw7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCQlNUF9GUkVFX1NFTkRfUEFDS0VUX0ZVTihwQWRhcHRlciwgcE1wVGNiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwkJLyogR290byB0aGUgbmV4dCBwYWNrZXQgKi8KKwkJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJfQorCisJLyogV2FrZSB1cCB0aGUgcXVldWUgd2hlbiB3ZSBoaXQgYSBsb3ctd2F0ZXIgbWFyayAqLworCWlmIChwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCA8PSAoTlVNX1RDQiAvIDMpKSB7CisJCW5ldGlmX3dha2VfcXVldWUocEFkYXB0ZXItPm5ldGRldik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKK30KKworLyoqCisgKiBldDEzMXhfY2hlY2tfc2VuZF93YWl0X2xpc3QgLSBIZWxwZXIgcm91dGluZSBmb3IgdGhlIGludGVycnVwdCBoYW5kbGVyCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBUYWtlcyBwYWNrZXRzIGZyb20gdGhlIHNlbmQgd2FpdCBxdWV1ZSBhbmQgcG9zdHMgdGhlbSB0byB0aGUgZGV2aWNlIChpZgorICogcm9vbSBhdmFpbGFibGUpLgorICovCitzdGF0aWMgdm9pZCBldDEzMXhfY2hlY2tfc2VuZF93YWl0X2xpc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+U2VuZFdhaXRMb2NrLCBsb2NrZmxhZ3MpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwQWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUpICYmCisJICAgICAgIE1QX1RDQl9SRVNPVVJDRVNfQVZBSUxBQkxFKHBBZGFwdGVyKSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpwRW50cnk7CisKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJUeCBwYWNrZXRzIG9uIHRoZSB3YWl0IHF1ZXVlXG4iKTsKKworCQlwRW50cnkgPSBwQWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUubmV4dDsKKworCQlwQWRhcHRlci0+VHhSaW5nLm5XYWl0U2VuZC0tOworCisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJNcEhhbmRsZVNlbmRJbnRlcnJ1cHQgLSBzZW50IGEgcXVldWVkIHBrdC4gV2FpdGluZyAlZFxuIiwKKwkJCSAgICBwQWRhcHRlci0+VHhSaW5nLm5XYWl0U2VuZCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRXYWl0TG9jaywgbG9ja2ZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTljNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5oCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF90eC5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byBkYXRhCisgKiAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxMF9UWF9IX18KKyNkZWZpbmUgX19FVDEzMTBfVFhfSF9fCisKKworLyogVHlwZWRlZnMgZm9yIFR4IERlc2NyaXB0b3IgUmluZyAqLworCisvKgorICogVFhERVNDX1dPUkQyX3Qgc3RydWN0dXJlIGhvbGRzIHBhcnQgb2YgdGhlIGNvbnRyb2wgYml0cyBpbiB0aGUgVHggRGVzY3JpcHRvcgorICogcmluZyBmb3IgdGhlIEVULTEzMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfdHhkZXNjX3dvcmQyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHZsYW5fcHJpbzozOwkJLy8gYml0cyAyOS0zMShWTEFOIHByaW9yaXR5KQorCQl1MzIgdmxhbl9jZmk6MTsJCS8vIGJpdCAyOChjZmkpCisJCXUzMiB2bGFuX3RhZzoxMjsJCS8vIGJpdHMgMTYtMjcoVkxBTiB0YWcpCisJCXUzMiBsZW5ndGhfaW5fYnl0ZXM6MTY7CS8vIGJpdHMgIDAtMTUocGFja2V0IGxlbmd0aCkKKyNlbHNlCisJCXUzMiBsZW5ndGhfaW5fYnl0ZXM6MTY7CS8vIGJpdHMgIDAtMTUocGFja2V0IGxlbmd0aCkKKwkJdTMyIHZsYW5fdGFnOjEyOwkJLy8gYml0cyAxNi0yNyhWTEFOIHRhZykKKwkJdTMyIHZsYW5fY2ZpOjE7CQkvLyBiaXQgMjgoY2ZpKQorCQl1MzIgdmxhbl9wcmlvOjM7CQkvLyBiaXRzIDI5LTMxKFZMQU4gcHJpb3JpdHkpCisjZW5kaWYJLyogX0JJVF9GSUVMRFNfSFRPTCAqLworCX0gYml0czsKK30gVFhERVNDX1dPUkQyX3QsICpQVFhERVNDX1dPUkQyX3Q7CisKKy8qCisgKiBUWERFU0NfV09SRDNfdCBzdHJ1Y3R1cmUgaG9sZHMgcGFydCBvZiB0aGUgY29udHJvbCBiaXRzIGluIHRoZSBUeCBEZXNjcmlwdG9yCisgKiByaW5nIGZvciB0aGUgRVQtMTMxMAorICovCit0eXBlZGVmIHVuaW9uIF90eGRlc2Nfd29yZDNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjE3OwkvLyBiaXRzIDE1LTMxCisJCXUzMiB1ZHBhOjE7CS8vIGJpdCAxNChVRFAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdGNwYToxOwkvLyBiaXQgMTMoVENQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIGlwYToxOwkJLy8gYml0IDEyKElQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHZsYW46MTsJLy8gYml0IDExKGFwcGVuZCBWTEFOIHRhZykKKwkJdTMyIGhwOjE7CQkvLyBiaXQgMTAoUGFja2V0IGlzIGEgSHVnZSBwYWNrZXQpCisJCXUzMiBwcDoxOwkJLy8gYml0ICA5KHBhZCBwYWNrZXQpCisJCXUzMiBtYWM6MTsJCS8vIGJpdCAgOChNQUMgb3ZlcnJpZGUpCisJCXUzMiBjcmM6MTsJCS8vIGJpdCAgNyhhcHBlbmQgQ1JDKQorCQl1MzIgZToxOwkJLy8gYml0ICA2KFR4IGZyYW1lIGhhcyBlcnJvcikKKwkJdTMyIHBmOjE7CQkvLyBiaXQgIDUoc2VuZCBwYXVzZSBmcmFtZSkKKwkJdTMyIGJwOjE7CQkvLyBiaXQgIDQoSXNzdWUgaGFsZi1kdXBsZXggYmFja3ByZXNzdXJlIChYT04vWE9GRikKKwkJdTMyIGN3OjE7CQkvLyBiaXQgIDMoQ29udHJvbCB3b3JkIC0gbm8gcGFja2V0IGRhdGEpCisJCXUzMiBpcjoxOwkJLy8gYml0ICAyKGludGVycnVwdCB0aGUgcHJvY2Vzc29yIHdoZW4gdGhpcyBwa3Qgc2VudCkKKwkJdTMyIGY6MTsJCS8vIGJpdCAgMShmaXJzdCBwYWNrZXQgaW4gdGhlIHNlcXVlbmNlKQorCQl1MzIgbDoxOwkJLy8gYml0ICAwKGxhc3QgcGFja2V0IGluIHRoZSBzZXF1ZW5jZSkKKyNlbHNlCisJCXUzMiBsOjE7CQkvLyBiaXQgIDAobGFzdCBwYWNrZXQgaW4gdGhlIHNlcXVlbmNlKQorCQl1MzIgZjoxOwkJLy8gYml0ICAxKGZpcnN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCisJCXUzMiBpcjoxOwkJLy8gYml0ICAyKGludGVycnVwdCB0aGUgcHJvY2Vzc29yIHdoZW4gdGhpcyBwa3Qgc2VudCkKKwkJdTMyIGN3OjE7CQkvLyBiaXQgIDMoQ29udHJvbCB3b3JkIC0gbm8gcGFja2V0IGRhdGEpCisJCXUzMiBicDoxOwkJLy8gYml0ICA0KElzc3VlIGhhbGYtZHVwbGV4IGJhY2twcmVzc3VyZSAoWE9OL1hPRkYpCisJCXUzMiBwZjoxOwkJLy8gYml0ICA1KHNlbmQgcGF1c2UgZnJhbWUpCisJCXUzMiBlOjE7CQkvLyBiaXQgIDYoVHggZnJhbWUgaGFzIGVycm9yKQorCQl1MzIgY3JjOjE7CQkvLyBiaXQgIDcoYXBwZW5kIENSQykKKwkJdTMyIG1hYzoxOwkJLy8gYml0ICA4KE1BQyBvdmVycmlkZSkKKwkJdTMyIHBwOjE7CQkvLyBiaXQgIDkocGFkIHBhY2tldCkKKwkJdTMyIGhwOjE7CQkvLyBiaXQgMTAoUGFja2V0IGlzIGEgSHVnZSBwYWNrZXQpCisJCXUzMiB2bGFuOjE7CS8vIGJpdCAxMShhcHBlbmQgVkxBTiB0YWcpCisJCXUzMiBpcGE6MTsJCS8vIGJpdCAxMihJUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB0Y3BhOjE7CS8vIGJpdCAxMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdWRwYToxOwkvLyBiaXQgMTQoVURQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHVudXNlZDoxNzsJLy8gYml0cyAxNS0zMQorI2VuZGlmCS8qIF9CSVRfRklFTERTX0hUT0wgKi8KKwl9IGJpdHM7Cit9IFRYREVTQ19XT1JEM190LCAqUFRYREVTQ19XT1JEM190OworCisvKiBUWF9ERVNDX0VOVFJZX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIGVhY2ggZGVzY3JpcHRvciBvbiB0aGUgcmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgX3R4X2Rlc2NfZW50cnlfdCB7CisJdTMyIERhdGFCdWZmZXJQdHJIaWdoOworCXUzMiBEYXRhQnVmZmVyUHRyTG93OworCVRYREVTQ19XT1JEMl90IHdvcmQyOwkvLyBjb250cm9sIHdvcmRzIGhvdyB0byB4bWl0IHRoZQorCVRYREVTQ19XT1JEM190IHdvcmQzOwkvLyBkYXRhIChkZXRhaWxlZCBhYm92ZSkKK30gVFhfREVTQ19FTlRSWV90LCAqUFRYX0RFU0NfRU5UUllfdDsKKworCisvKiBUeXBlZGVmcyBmb3IgVHggRE1BIGVuZ2luZSBzdGF0dXMgd3JpdGViYWNrICovCisKKy8qCisgKiBUWF9TVEFUVVNfQkxPQ0tfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgVHggRE1BIGVuZ2luZQorICogaXQgc2l0cyBpbiBmcmVlIG1lbW9yeSwgYW5kIGlzIHBvaW50ZWQgdG8gYnkgMHgxMDFjIC8gMHgxMDIwCisgKi8KK3R5cGVkZWYgdW5pb24gX3R4X3N0YXR1c19ibG9ja190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjE7CQkvLyBiaXRzIDExLTMxCisJCXUzMiBzZXJ2X2NwbF93cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgc2Vydl9jcGw6MTA7CQkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIHNlcnZfY3BsOjEwOwkJLy8gYml0cyAwLTkKKwkJdTMyIHNlcnZfY3BsX3dyYXA6MTsJLy8gYml0IDEwCisJCXUzMiB1bnVzZWQ6MjE7CQkvLyBiaXRzIDExLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYX1NUQVRVU19CTE9DS190LCAqUFRYX1NUQVRVU19CTE9DS190OworCisvKiBUQ0IgKFRyYW5zbWl0IENvbnRyb2wgQmxvY2spICovCit0eXBlZGVmIHN0cnVjdCBfTVBfVENCIHsKKwlzdHJ1Y3QgX01QX1RDQiAqTmV4dDsKKwl1MzIgRmxhZ3M7CisJdTMyIENvdW50OworCXUzMiBQYWNrZXRTdGFsZUNvdW50OworCXN0cnVjdCBza19idWZmICpQYWNrZXQ7CisJdTMyIFBhY2tldExlbmd0aDsKKwlETUExMFdfdCBXckluZGV4OworCURNQTEwV190IFdySW5kZXhTdGFydDsKK30gTVBfVENCLCAqUE1QX1RDQjsKKworLyogU3RydWN0dXJlIHRvIGhvbGQgdGhlIHNrYidzIGluIGEgbGlzdCAqLwordHlwZWRlZiBzdHJ1Y3QgdHhfc2tiX2xpc3RfZWxlbSB7CisJc3RydWN0IGxpc3RfaGVhZCBza2JfbGlzdF9lbGVtOworCXN0cnVjdCBza19idWZmICpza2I7Cit9IFRYX1NLQl9MSVNUX0VMRU0sICpQVFhfU0tCX0xJU1RfRUxFTTsKKworLyogVFhfUklOR190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyBvdXIgbG9jYWwgcmVmZXJlbmNlKHMpIHRvIHRoZSByaW5nICovCit0eXBlZGVmIHN0cnVjdCBfdHhfcmluZ190IHsKKwkvKiBUQ0IgKFRyYW5zbWl0IENvbnRyb2wgQmxvY2spIG1lbW9yeSBhbmQgbGlzdHMgKi8KKwlQTVBfVENCIE1wVGNiTWVtOworCisJLyogTGlzdCBvZiBUQ0JzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgKi8KKwlQTVBfVENCIFRDQlJlYWR5UXVldWVIZWFkOworCVBNUF9UQ0IgVENCUmVhZHlRdWV1ZVRhaWw7CisKKwkvKiBsaXN0IG9mIFRDQnMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHNlbnQuICBOT1RFIHRoYXQgYWNjZXNzIHRvIGFsbAorCSAqIHRocmVlIG9mIHRoZXNlIChpbmNsdWRpbmcgbkJ1c3lTZW5kKSBhcmUgY29udHJvbGxlZCB2aWEgdGhlCisJICogVENCU2VuZFFMb2NrLiAgVGhpcyBsb2NrIHNob3VsZCBiZSBzZWN1cmVkIHByaW9yIHRvIGluY2VtZW50aW5nIC8KKwkgKiBkZWNyZW1lbnRpbmcgbkJ1c3lTZW5kLCBvciBhbnkgcXVldWUgbWFuaXB1bGF0aW9uIG9uIEN1cnJTZW5kSGVhZCAvCisJICogVGFpbAorCSAqLworCVBNUF9UQ0IgQ3VyclNlbmRIZWFkOworCVBNUF9UQ0IgQ3VyclNlbmRUYWlsOworCWludDMyX3QgbkJ1c3lTZW5kOworCisJLyogTGlzdCBvZiBwYWNrZXRzIChub3QgVENCcykgdGhhdCB3ZXJlIHF1ZXVlZCBmb3IgbGFjayBvZiByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIFNlbmRXYWl0UXVldWU7CisJaW50MzJfdCBuV2FpdFNlbmQ7CisKKwkvKiBUaGUgYWN0dWFsIGRlc2NyaXB0b3IgcmluZyAqLworCVBUWF9ERVNDX0VOVFJZX3QgcFR4RGVzY1JpbmdWYTsKKwlkbWFfYWRkcl90IHBUeERlc2NSaW5nUGE7CisJdWludDY0X3QgcFR4RGVzY1JpbmdBZGp1c3RlZFBhOworCXVpbnQ2NF90IFR4RGVzY09mZnNldDsKKworCS8qIFJlYWR5VG9TZW5kIGluZGljYXRlcyB3aGVyZSB3ZSBsYXN0IHdyb3RlIHRvIGluIHRoZSBkZXNjcmlwdG9yIHJpbmcuICovCisJRE1BMTBXX3QgdHhEbWFSZWFkeVRvU2VuZDsKKworCS8qIFRoZSBsb2NhdGlvbiBvZiB0aGUgd3JpdGUtYmFjayBzdGF0dXMgYmxvY2sgKi8KKwlQVFhfU1RBVFVTX0JMT0NLX3QgcFR4U3RhdHVzVmE7CisJZG1hX2FkZHJfdCBwVHhTdGF0dXNQYTsKKworCS8qIEEgQmxvY2sgb2YgemVyb2VzIHVzZWQgdG8gcGFkIHBhY2tldHMgdGhhdCBhcmUgbGVzcyB0aGFuIDYwIGJ5dGVzICovCisJdm9pZCAqcFR4RHVtbXlCbGtWYTsKKwlkbWFfYWRkcl90IHBUeER1bW15QmxrUGE7CisKKwlUWE1BQ19FUlJfdCBUeE1hY0VycjsKKworCS8qIFZhcmlhYmxlcyB0byB0cmFjayB0aGUgVHggaW50ZXJydXB0IGNvYWxlc2NpbmcgZmVhdHVyZXMgKi8KKwlpbnQzMl90IFR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdDsKK30gVFhfUklOR190LCAqUFRYX1JJTkdfdDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgZnJhZy1saXN0IGZvciB0aGUgZm9sbG93aW5nIHByb3RvdHlwZXMgKi8KK3R5cGVkZWYgc3RydWN0IF9NUF9GUkFHX0xJU1QgTVBfRlJBR19MSVNULCAqUE1QX0ZSQUdfTElTVDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCisvKiBQUk9UT1RZUEVTIGZvciBldDEzMTBfdHguYyAqLworaW50IGV0MTMxeF90eF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnVHhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBldDEzMXhfaW5pdF9zZW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF90eF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3R4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOworaW50IGV0MTMxeF9zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKKyNlbmRpZiAvKiBfX0VUMTMxMF9UWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmU2MWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfYWRhcHRlci5oCkBAIC0wLDAgKzEsMzQ3IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9hZGFwdGVyLmggLSBIZWFkZXIgd2hpY2ggaW5jbHVkZXMgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUsIGFsb25nCisgKiAgICAgICAgICAgICAgICAgICAgd2l0aCByZWxhdGVkIHN1cHBvcnQgc3RydWN0dXJlcywgbWFjcm9zLCBkZWZpbml0aW9ucywgZXRjLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX0FEQVBURVJfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0FEQVBURVJfSF9fCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKworLyoKKyAqIERvIG5vdCBjaGFuZ2UgdGhlc2UgdmFsdWVzOiBpZiBjaGFuZ2VkLCB0aGVuIGNoYW5nZSBhbHNvIGluIHJlc3BlY3RpdmUKKyAqIFRYZG1hIGFuZCBSeGRtYSBlbmdpbmVzCisgKi8KKyNkZWZpbmUgTlVNX0RFU0NfUEVSX1JJTkdfVFggICAgICAgICA1MTIJLy8gVFggRG8gbm90IGNoYW5nZSB0aGVzZSB2YWx1ZXMKKyNkZWZpbmUgTlVNX1RDQiAgICAgICAgICAgICAgICAgICAgICA2NAorCisvKgorICogVGhlc2UgdmFsdWVzIGFyZSBhbGwgc3VwZXJzZWRlZCBieSByZWdpc3RyeSBlbnRyaWVzIHRvIGZhY2lsaXRhdGUgdHVuaW5nLgorICogT25jZSB0aGUgZGVzaXJlZCBwZXJmb3JtYW5jZSBoYXMgYmVlbiBhY2hpZXZlZCwgdGhlIG9wdGltYWwgcmVnaXN0cnkgdmFsdWVzCisgKiBzaG91bGQgYmUgcmUtcG9wdWxhdGVkIHRvIHRoZXNlICNkZWZpbmVzOgorICovCisjZGVmaW5lIE5VTV9UUkFGRklDX0NMQVNTRVMgICAgICAgICAgMQorCisvKgorICogVGhlcmUgYXJlIHRocmVlIHdheXMgb2YgY291bnRpbmcgZXJyb3JzIC0gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBYIGVycm9ycworICogaW4gWSBwYWNrZXRzIChyZXByZXNlbnRlZCBieSB0aGUgIlNBTVBMRSIgbWFjcm9zKSwgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgorICogTiBlcnJvcnMgaW4gYSBTIG1TZWMgdGltZSBwZXJpb2QgKHRoZSAiUEVSSU9EIiBtYWNyb3MpLCBvciBpZiB0aGVyZSBhcmUKKyAqIGNvbnNlY3V0aXZlIHBhY2tldHMgd2l0aCBlcnJvcnMgKENPTlNFQ19FUlJPUkVEX1RIUkVTSCkuICBUaGlzIGxhc3QgY292ZXJzCisgKiBmb3IgIkJ1cnN0eSIgZXJyb3JzLCBhbmQgdGhlIGVycm9yZWQgcGFja2V0cyBtYXkgd2VsbCBub3QgYmUgY29udGlndW91cywKKyAqIGJ1dCBzZXZlcmFsIGVycm9ycyB3aGVyZSB0aGUgcGFja2V0IGNvdW50ZXIgaGFzIGNoYW5nZWQgYnkgbGVzcyB0aGFuIGEKKyAqIHNtYWxsIGFtb3VudCB3aWxsIGNhdXNlIHRoaXMgY291bnQgdG8gaW5jcmVtZW50LgorICovCisjZGVmaW5lIFRYX1BBQ0tFVFNfSU5fU0FNUExFICAgICAgICAxMDAwMAorI2RlZmluZSBUWF9NQVhfRVJST1JTX0lOX1NBTVBMRSAgICAgNTAKKworI2RlZmluZSBUWF9FUlJPUl9QRVJJT0QgICAgICAgICAgICAgMTAwMAorI2RlZmluZSBUWF9NQVhfRVJST1JTX0lOX1BFUklPRCAgICAgMTAKKworI2RlZmluZSBMSU5LX0RFVEVDVElPTl9USU1FUiAgICAgICAgNTAwMAorCisjZGVmaW5lIFRYX0NPTlNFQ19SQU5HRSAgICAgICAgICAgICA1CisjZGVmaW5lIFRYX0NPTlNFQ19FUlJPUkVEX1RIUkVTSCAgICAxMAorCisjZGVmaW5lIExPX01BUktfUEVSQ0VOVF9GT1JfUFNSICAgICAxNQorI2RlZmluZSBMT19NQVJLX1BFUkNFTlRfRk9SX1JYICAgICAgMTUKKworLyogTWFjcm9zIGZvciBmbGFnIGFuZCByZWYgY291bnQgb3BlcmF0aW9ucyAgICAgICAgKi8KKyNkZWZpbmUgTVBfU0VUX0ZMQUcoX00sIF9GKSAgICAgICAgICgoX00pLT5GbGFncyB8PSAoX0YpKQorI2RlZmluZSBNUF9DTEVBUl9GTEFHKF9NLCBfRikgICAgICAgKChfTSktPkZsYWdzICY9IH4oX0YpKQorI2RlZmluZSBNUF9DTEVBUl9GTEFHUyhfTSkgICAgICAgICAgKChfTSktPkZsYWdzID0gMCkKKyNkZWZpbmUgTVBfVEVTVF9GTEFHKF9NLCBfRikgICAgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSAhPSAwKQorI2RlZmluZSBNUF9URVNUX0ZMQUdTKF9NLCBfRikgICAgICAgKCgoX00pLT5GbGFncyAmIChfRikpID09IChfRikpCisjZGVmaW5lIE1QX0lTX0ZMQUdfQ0xFQVIoX00sIF9GKSAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgPT0gMCkKKworI2RlZmluZSBNUF9JTkNfUkNWX1JFRihfQSkgICAgICAgICAgYXRvbWljX2luYygmKF9BKS0+UmN2UmVmQ291bnQpCisjZGVmaW5lIE1QX0RFQ19SQ1ZfUkVGKF9BKSAgICAgICAgICBhdG9taWNfZGVjKCYoX0EpLT5SY3ZSZWZDb3VudCkKKyNkZWZpbmUgTVBfR0VUX1JDVl9SRUYoX0EpICAgICAgICAgIGF0b21pY19yZWFkKCYoX0EpLT5SY3ZSZWZDb3VudCkKKworLyogTWFjcm9zIHNwZWNpZmljIHRvIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCisjZGVmaW5lIE1QX1RDQl9SRVNPVVJDRVNfQVZBSUxBQkxFKF9NKSAoKF9NKS0+VHhSaW5nLm5CdXN5U2VuZCA8IE5VTV9UQ0IpCisjZGVmaW5lIE1QX1RDQl9SRVNPVVJDRVNfTk9UX0FWQUlMQUJMRShfTSkgKChfTSktPlR4UmluZy5uQnVzeVNlbmQgPj0gTlVNX1RDQikKKworI2RlZmluZSBNUF9TSE9VTERfRkFJTF9TRU5EKF9NKSAgICgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX0ZBSUxfU0VORF9NQVNLKQorI2RlZmluZSBNUF9JU19OT1RfUkVBRFkoX00pICAgICAgICgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX05PVF9SRUFEWV9NQVNLKQorI2RlZmluZSBNUF9JU19SRUFEWShfTSkgICAgICAgICAgICEoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9OT1RfUkVBRFlfTUFTSykKKworI2RlZmluZSBNUF9IQVNfQ0FCTEUoX00pICAgICAgICAgICAhKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTk9fQ0FCTEUpCisjZGVmaW5lIE1QX0xJTktfREVURUNURUQoX00pICAgICAgICEoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTikKKworLyogQ291bnRlcnMgZm9yIGVycm9yIHJhdGUgbW9uaXRvcmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgX01QX0VSUl9DT1VOVEVSUyB7CisJdTMyIFBrdENvdW50VHhQYWNrZXRzOworCXUzMiBQa3RDb3VudFR4RXJyb3JzOworCXUzMiBUaW1lckJhc2VkVHhFcnJvcnM7CisJdTMyIFBrdENvdW50TGFzdEVycm9yOworCXUzMiBFcnJlZENvbnNlY1BhY2tldHM7Cit9IE1QX0VSUl9DT1VOVEVSUywgKlBNUF9FUlJfQ09VTlRFUlM7CisKKy8qIFJGRCAoUmVjZWl2ZSBGcmFtZSBEZXNjcmlwdG9yKSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QX1JGRCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJc3RydWN0IHNrX2J1ZmYgKlBhY2tldDsKKwl1MzIgUGFja2V0U2l6ZTsJLy8gdG90YWwgc2l6ZSBvZiByZWNlaXZlIGZyYW1lCisJdTE2IGlCdWZmZXJJbmRleDsKKwl1OCBpUmluZ0luZGV4OworfSBNUF9SRkQsICpQTVBfUkZEOworCisvKiBFbnVtIGZvciBGbG93IENvbnRyb2wgKi8KK3R5cGVkZWYgZW51bSBfZWZsb3dfY29udHJvbF90IHsKKwlCb3RoID0gMCwKKwlUeE9ubHkgPSAxLAorCVJ4T25seSA9IDIsCisJTm9uZSA9IDMKK30gZUZMT1dfQ09OVFJPTF90LCAqUGVGTE9XX0NPTlRST0xfdDsKKworLyogU3RydWN0IHRvIGRlZmluZSBzb21lIGRldmljZSBzdGF0aXN0aWNzICovCit0eXBlZGVmIHN0cnVjdCBfY2Vfc3RhdHNfdCB7CisJLyogTGluayBJbnB1dC9PdXRwdXQgc3RhdHMgKi8KKwl1aW50NjRfdCBpcGFja2V0czsJLy8gIyBvZiBpbiBwYWNrZXRzCisJdWludDY0X3Qgb3BhY2tldHM7CS8vICMgb2Ygb3V0IHBhY2tldHMKKworCS8qIE1JQiBJSSB2YXJpYWJsZXMKKwkgKgorCSAqIE5PVEU6IGF0b21pY190IHR5cGVzIGFyZSBvbmx5IGd1YXJhbnRlZWQgdG8gc3RvcmUgMjQtYml0czsgaWYgd2UKKwkgKiBNVVNUIGhhdmUgMzIsIHRoZW4gd2UnbGwgbmVlZCBhbm90aGVyIHdheSB0byBwZXJmb3JtIGF0b21pYworCSAqIG9wZXJhdGlvbnMKKwkgKi8KKwl1MzIgdW5pcmN2OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCisJYXRvbWljX3QgdW5peG10OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIGZvciBUeAorCXUzMiBtdWx0aXJjdjsJLy8gIyBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZAorCWF0b21pY190IG11bHRpeG10OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIGZvciBUeAorCXUzMiBicmRjc3RyY3Y7CS8vICMgYnJvYWRjYXN0IHBhY2tldHMgcmVjZWl2ZWQKKwlhdG9taWNfdCBicmRjc3R4bXQ7CS8vICMgYnJvYWRjYXN0IHBhY2tldHMgZm9yIFR4CisJdTMyIG5vcmN2YnVmOwkvLyAjIFJ4IHBhY2tldHMgZGlzY2FyZGVkCisJdTMyIG5veG10YnVmOwkvLyAjIFR4IHBhY2tldHMgZGlzY2FyZGVkCisKKwkvKiBUcmFuc2NpZXZlciBzdGF0ZSBpbmZvcm1hdGlvbnMuICovCisJdTggeGN2cl9hZGRyOworCXUzMiB4Y3ZyX2lkOworCisJLyogVHggU3RhdGlzdGljcy4gKi8KKwl1MzIgdHhfdWZsbzsJCS8vIFR4IFVuZGVycnVucworCisJdTMyIGNvbGxpc2lvbnM7CisJdTMyIGV4Y2Vzc2l2ZV9jb2xsaXNpb25zOworCXUzMiBmaXJzdF9jb2xsaXNpb247CisJdTMyIGxhdGVfY29sbGlzaW9uczsKKwl1MzIgbWF4X3BrdF9lcnJvcjsKKwl1MzIgdHhfZGVmZXJyZWQ7CisKKwkvKiBSeCBTdGF0aXN0aWNzLiAqLworCXUzMiByeF9vdl9mbG93OwkvLyBSeCBPdmVyIEZsb3cKKworCXUzMiBsZW5ndGhfZXJyOworCXUzMiBhbGlnbm1lbnRfZXJyOworCXUzMiBjcmNfZXJyOworCXUzMiBjb2RlX3Zpb2xhdGlvbnM7CisJdTMyIG90aGVyX2Vycm9yczsKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwl1MzIgVW5oYW5kbGVkSW50ZXJydXB0c1BlclNlYzsKKwl1MzIgUnhEbWFJbnRlcnJ1cHRzUGVyU2VjOworCXUzMiBUeERtYUludGVycnVwdHNQZXJTZWM7CisJdTMyIFdhdGNoRG9nSW50ZXJydXB0c1BlclNlYzsKKyNlbmRpZgkvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKwl1MzIgU3luY2hyb3Vub3VzSXRlcmF0aW9uczsKKwlJTlRFUlJVUFRfdCBJbnRlcnJ1cHRTdGF0dXM7Cit9IENFX1NUQVRTX3QsICpQQ0VfU1RBVFNfdDsKKworLyogVGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlciB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrOworCisJLyogRmxhZ3MgdGhhdCBpbmRpY2F0ZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhZGFwdGVyICovCisJdTMyIEZsYWdzOworCXUzMiBId0VyckNvdW50OworCisJLyogQ29uZmlndXJhdGlvbiAgKi8KKwl1OCBQZXJtYW5lbnRBZGRyZXNzW0VUSF9BTEVOXTsKKwl1OCBDdXJyZW50QWRkcmVzc1tFVEhfQUxFTl07CisJYm9vbCBiT3ZlcnJpZGVBZGRyZXNzOworCWJvb2wgYkVlcHJvbVByZXNlbnQ7CisJdTggZWVwcm9tRGF0YVsyXTsKKworCS8qIFNwaW5sb2NrcyAqLworCXNwaW5sb2NrX3QgTG9jazsKKworCXNwaW5sb2NrX3QgVENCU2VuZFFMb2NrOworCXNwaW5sb2NrX3QgVENCUmVhZHlRTG9jazsKKwlzcGlubG9ja190IFNlbmRIV0xvY2s7CisJc3BpbmxvY2tfdCBTZW5kV2FpdExvY2s7CisKKwlzcGlubG9ja190IFJjdkxvY2s7CisJc3BpbmxvY2tfdCBSY3ZQZW5kTG9jazsKKwlzcGlubG9ja190IEZickxvY2s7CisKKwlzcGlubG9ja190IFBIWUxvY2s7CisKKwkvKiBQYWNrZXQgRmlsdGVyIGFuZCBsb29rIGFoZWFkIHNpemUgKi8KKwl1MzIgUGFja2V0RmlsdGVyOworCXUzMiB1bExvb2tBaGVhZDsKKwl1MzIgdWlMaW5rU3BlZWQ7CisJdTMyIHVpRHVwbGV4TW9kZTsKKwl1MzIgdWlBdXRvTmVnU3RhdHVzOworCXU4IHVjTGlua1N0YXR1czsKKworCS8qIG11bHRpY2FzdCBsaXN0ICovCisJdTMyIE1DQWRkcmVzc0NvdW50OworCXU4IE1DTGlzdFtOSUNfTUFYX01DQVNUX0xJU1RdW0VUSF9BTEVOXTsKKworCS8qIE1BQyB0ZXN0ICovCisJVFhNQUNfVFhURVNUX3QgVHhNYWNUZXN0OworCisJLyogUG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgUENJIHJlZ2lzdGVyIHNwYWNlICovCisJQUREUkVTU19NQVBfdCBfX2lvbWVtICpDU1JBZGRyZXNzOworCisJLyogUENJIGNvbmZpZyBzcGFjZSBpbmZvLCBmb3IgZGVidWcgcHVycG9zZXMgb25seS4gKi8KKwl1OCBSZXZpc2lvbklEOworCXUxNiBWZW5kb3JJRDsKKwl1MTYgRGV2aWNlSUQ7CisJdTE2IFN1YlZlbmRvcklEOworCXUxNiBTdWJTeXN0ZW1JRDsKKwl1MzIgQ2FjaGVGaWxsU2l6ZTsKKwl1MTYgUGNpWERldkN0bDsKKwl1OCBwY2lfbGF0X3RpbWVyOworCXU4IHBjaV9oZHJfdHlwZTsKKwl1OCBwY2lfYmlzdDsKKwl1MzIgcGNpX2NmZ19zdGF0ZVs2NCAvIHNpemVvZih1MzIpXTsKKworCS8qIFJlZ2lzdHJ5IHBhcmFtZXRlcnMgKi8KKwl1OCBTcGVlZER1cGxleDsJCS8vIHNwZWVkL2R1cGxleAorCWVGTE9XX0NPTlRST0xfdCBSZWdpc3RyeUZsb3dDb250cm9sOwkvLyBmb3IgODAyLjN4IGZsb3cgY29udHJvbAorCXU4IFJlZ2lzdHJ5V09MTWF0Y2g7CS8vIEVuYWJsZSBXT0wgcGF0dGVybi1tYXRjaGluZworCXU4IFJlZ2lzdHJ5V09MTGluazsJLy8gTGluayBzdGF0ZSBjaGFuZ2UgaXMgaW5kZXBlbmRhbnQKKwl1OCBSZWdpc3RyeVBoeUNvbWE7CS8vIFBoeSBDb21hIG1vZGUgZW5hYmxlL2Rpc2FibGUKKworCXUzMiBSZWdpc3RyeVJ4TWVtRW5kOwkvLyBTaXplIG9mIGludGVybmFsIHJ4IG1lbW9yeQorCXU4IFJlZ2lzdHJ5TUFDU3RhdDsJLy8gSWYgc2V0LCByZWFkIE1BQ1NUQVQsIGVsc2UgZG9uJ3QKKwl1MzIgUmVnaXN0cnlWbGFuVGFnOwkvLyA4MDIuMXEgVmxhbiBUQUcKKwl1MzIgUmVnaXN0cnlKdW1ib1BhY2tldDsJLy8gTWF4IHN1cHBvcnRlZCBldGhlcm5ldCBwYWNrZXQgc2l6ZQorCisJdTMyIFJlZ2lzdHJ5VHhOdW1CdWZmZXJzOworCXUzMiBSZWdpc3RyeVR4VGltZUludGVydmFsOworCisJdTMyIFJlZ2lzdHJ5UnhOdW1CdWZmZXJzOworCXUzMiBSZWdpc3RyeVJ4VGltZUludGVydmFsOworCisJLyogVmFsaWRhdGlvbiBoZWxwZXJzICovCisJdTggUmVnaXN0cnlQTVdPTDsKKwl1OCBSZWdpc3RyeU5NSURpc2FibGU7CisJdTMyIFJlZ2lzdHJ5RE1BQ2FjaGU7CisJdTMyIFJlZ2lzdHJ5U0NHYWluOworCXU4IFJlZ2lzdHJ5UGh5TG9vcGJrOwkvLyBFbmFibGUgUGh5IGxvb3BiYWNrCisKKwkvKiBEZXJpdmVkIGZyb20gdGhlIHJlZ2lzdHJ5OiAqLworCXU4IEFpRm9yY2VEcHg7CQkvLyBkdXBsZXggc2V0dGluZworCXUxNiBBaUZvcmNlU3BlZWQ7CQkvLyAnU3BlZWQnLCB1c2VyIG92ZXItcmlkZSBvZiBsaW5lIHNwZWVkCisJZUZMT1dfQ09OVFJPTF90IEZsb3dDb250cm9sOwkvLyBmbG93IGNvbnRyb2wgdmFsaWRhdGVkIGJ5IHRoZSBmYXItZW5kCisJZW51bSB7CisJCU5FVElGX1NUQVRVU19JTlZBTElEID0gMCwKKwkJTkVUSUZfU1RBVFVTX01FRElBX0NPTk5FQ1QsCisJCU5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNULAorCQlORVRJRl9TVEFUVVNfTUFYCisJfSBNZWRpYVN0YXRlOworCXU4IERyaXZlck5vUGh5QWNjZXNzOworCisJLyogTWluaW1pemUgaW5pdC10aW1lICovCisJYm9vbCBiUXVlcnlQZW5kaW5nOworCWJvb2wgYlNldFBlbmRpbmc7CisJYm9vbCBiUmVzZXRQZW5kaW5nOworCXN0cnVjdCB0aW1lcl9saXN0IEVycm9yVGltZXI7CisJYm9vbCBiTGlua1RpbWVyQWN0aXZlOworCU1QX1BPV0VSX01HTVQgUG9NZ210OworCUlOVEVSUlVQVF90IENhY2hlZE1hc2tWYWx1ZTsKKworCWF0b21pY190IFJjdlJlZkNvdW50OwkvLyBOdW0gcGFja2V0cyBub3QgeWV0IHJldHVybmVkCisKKwkvKiBYY3ZyIHN0YXR1cyBhdCBsYXN0IHBvbGwgKi8KKwlNSV9CTVNSX3QgQm1zcjsKKworCS8qIFR4IE1lbW9yeSBWYXJpYWJsZXMgKi8KKwlUWF9SSU5HX3QgVHhSaW5nOworCisJLyogUnggTWVtb3J5IFZhcmlhYmxlcyAqLworCVJYX1JJTkdfdCBSeFJpbmc7CisKKwkvKiBFVDEzMTAgcmVnaXN0ZXIgQWNjZXNzICovCisJSkFHQ09SRV9BQ0NFU1NfUkVHUyBKYWdDb3JlUmVnczsKKwlQQ0lfQ0ZHX1NQQUNFX1JFR1MgUGNpQ2ZnUmVnczsKKworCS8qIExvb3BiYWNrIHNwZWNpZmljcyAqLworCXU4IFJlcGxpY2FQaHlMb29wYms7CS8vIFJlcGxpY2EgRW5hYmxlCisJdTggUmVwbGljYVBoeUxvb3Bia1BGOwkvLyBSZXBsaWNhIEVuYWJsZSBQYXNzL0ZhaWwKKworCS8qIFN0YXRzICovCisJQ0VfU1RBVFNfdCBTdGF0czsKKworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHNfcHJldjsKK307CisKKyNkZWZpbmUgTVBTZW5kUGFja2V0c0hhbmRsZXIgIE1QU2VuZFBhY2tldHMKKyNkZWZpbmUgTVBfRlJFRV9TRU5EX1BBQ0tFVF9GVU4oQWRhcHRlciwgcE1wVGNiKSBcCisJZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQoQWRhcHRlciwgcE1wVGNiKQorI2RlZmluZSBNcFNlbmRQYWNrZXRGdW4oQWRhcHRlciwgUGFja2V0KSBNcFNlbmRQYWNrZXQoQWRhcHRlciwgUGFja2V0KQorCisjZW5kaWYgLyogX19FVDEzMVhfQURBUFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkYmFhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5jCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9jb25maWcuYyAtIEhhbmRsZXMgcGFyc2luZyBvZiBjb25maWd1cmF0aW9uIGRhdGEgZHVyaW5nCisgKiAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorI2luY2x1ZGUgImV0MTMxeF9jb25maWcuaCIKKworI2luY2x1ZGUgImV0MTMxMF90eC5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qIERlZmluZXMgZm9yIFBhcmFtZXRlciBEZWZhdWx0L01pbi9NYXggdmF1bGVzICovCisjZGVmaW5lIFBBUk1fU1BFRURfRFVQTEVYX0RFRiAgIDAKKyNkZWZpbmUgUEFSTV9TUEVFRF9EVVBMRVhfTUlOICAgMAorI2RlZmluZSBQQVJNX1NQRUVEX0RVUExFWF9NQVggICA1CisKKyNkZWZpbmUgUEFSTV9WTEFOX1RBR19ERUYgICAgICAgMAorI2RlZmluZSBQQVJNX1ZMQU5fVEFHX01JTiAgICAgICAwCisjZGVmaW5lIFBBUk1fVkxBTl9UQUdfTUFYICAgICAgIDQwOTUKKworI2RlZmluZSBQQVJNX0ZMT1dfQ1RMX0RFRiAgICAgICAwCisjZGVmaW5lIFBBUk1fRkxPV19DVExfTUlOICAgICAgIDAKKyNkZWZpbmUgUEFSTV9GTE9XX0NUTF9NQVggICAgICAgMworCisjZGVmaW5lIFBBUk1fV09MX0xJTktfREVGICAgICAgIDMKKyNkZWZpbmUgUEFSTV9XT0xfTElOS19NSU4gICAgICAgMAorI2RlZmluZSBQQVJNX1dPTF9MSU5LX01BWCAgICAgICAzCisKKyNkZWZpbmUgUEFSTV9XT0xfTUFUQ0hfREVGICAgICAgNworI2RlZmluZSBQQVJNX1dPTF9NQVRDSF9NSU4gICAgICAwCisjZGVmaW5lIFBBUk1fV09MX01BVENIX01BWCAgICAgIDcKKworI2RlZmluZSBQQVJNX0pVTUJPX1BLVF9ERUYgICAgICAxNTE0CisjZGVmaW5lIFBBUk1fSlVNQk9fUEtUX01JTiAgICAgIDE1MTQKKyNkZWZpbmUgUEFSTV9KVU1CT19QS1RfTUFYICAgICAgOTIxNgorCisjZGVmaW5lIFBBUk1fUEhZX0NPTUFfREVGICAgICAgIDAKKyNkZWZpbmUgUEFSTV9QSFlfQ09NQV9NSU4gICAgICAgMAorI2RlZmluZSBQQVJNX1BIWV9DT01BX01BWCAgICAgICAxCisKKyNkZWZpbmUgUEFSTV9SWF9OVU1fQlVGU19ERUYgICAgNAorI2RlZmluZSBQQVJNX1JYX05VTV9CVUZTX01JTiAgICAxCisjZGVmaW5lIFBBUk1fUlhfTlVNX0JVRlNfTUFYICAgIDY0CisKKyNkZWZpbmUgUEFSTV9SWF9USU1FX0lOVF9ERUYgICAgMTAKKyNkZWZpbmUgUEFSTV9SWF9USU1FX0lOVF9NSU4gICAgMgorI2RlZmluZSBQQVJNX1JYX1RJTUVfSU5UX01BWCAgICAzMjAKKworI2RlZmluZSBQQVJNX1RYX05VTV9CVUZTX0RFRiAgICA0CisjZGVmaW5lIFBBUk1fVFhfTlVNX0JVRlNfTUlOICAgIDEKKyNkZWZpbmUgUEFSTV9UWF9OVU1fQlVGU19NQVggICAgNDAKKworI2RlZmluZSBQQVJNX1RYX1RJTUVfSU5UX0RFRiAgICA0MAorI2RlZmluZSBQQVJNX1RYX1RJTUVfSU5UX01JTiAgICAxCisjZGVmaW5lIFBBUk1fVFhfVElNRV9JTlRfTUFYICAgIDE0MAorCisjZGVmaW5lIFBBUk1fUlhfTUVNX0VORF9ERUYgICAgIDB4MmJjCisjZGVmaW5lIFBBUk1fUlhfTUVNX0VORF9NSU4gICAgIDAKKyNkZWZpbmUgUEFSTV9SWF9NRU1fRU5EX01BWCAgICAgMHgzZmYKKworI2RlZmluZSBQQVJNX01BQ19TVEFUX0RFRiAgICAgICAxCisjZGVmaW5lIFBBUk1fTUFDX1NUQVRfTUlOICAgICAgIDAKKyNkZWZpbmUgUEFSTV9NQUNfU1RBVF9NQVggICAgICAgMQorCisjZGVmaW5lIFBBUk1fU0NfR0FJTl9ERUYgICAgICAgIDcKKyNkZWZpbmUgUEFSTV9TQ19HQUlOX01JTiAgICAgICAgMAorI2RlZmluZSBQQVJNX1NDX0dBSU5fTUFYICAgICAgICA3CisKKyNkZWZpbmUgUEFSTV9QTV9XT0xfREVGICAgICAgICAgMAorI2RlZmluZSBQQVJNX1BNX1dPTF9NSU4gICAgICAgICAwCisjZGVmaW5lIFBBUk1fUE1fV09MX01BWCAgICAgICAgIDEKKworI2RlZmluZSBQQVJNX05NSV9ESVNBQkxFX0RFRiAgICAwCisjZGVmaW5lIFBBUk1fTk1JX0RJU0FCTEVfTUlOICAgIDAKKyNkZWZpbmUgUEFSTV9OTUlfRElTQUJMRV9NQVggICAgMgorCisjZGVmaW5lIFBBUk1fRE1BX0NBQ0hFX0RFRiAgICAgIDAKKyNkZWZpbmUgUEFSTV9ETUFfQ0FDSEVfTUlOICAgICAgMAorI2RlZmluZSBQQVJNX0RNQV9DQUNIRV9NQVggICAgICAxNQorCisjZGVmaW5lIFBBUk1fUEhZX0xPT1BCS19ERUYgICAgIDAKKyNkZWZpbmUgUEFSTV9QSFlfTE9PUEJLX01JTiAgICAgMAorI2RlZmluZSBQQVJNX1BIWV9MT09QQktfTUFYICAgICAxCisKKyNkZWZpbmUgUEFSTV9NQUNfQUREUkVTU19ERUYgICAgeyAweDAwLCAweDA1LCAweDNkLCAweDAwLCAweDAyLCAweDAwIH0KKworLyogTW9kdWxlIHBhcmFtZXRlciBmb3IgZGlzYWJsaW5nIE5NSQorICogZXQxMzF4X3NwZWVkX3NldCA6CisgKiBTZXQgTGluayBzcGVlZCBhbmQgZHVibGV4IG1hbnVhbGx5ICgwLTUpICBbMF0KKyAqICAxIDogMTBNYiAgIEhhbGYtRHVwbGV4CisgKiAgMiA6IDEwTWIgICBGdWxsLUR1cGxleAorICogIDMgOiAxMDBNYiAgSGFsZi1EdXBsZXgKKyAqICA0IDogMTAwTWIgIEZ1bGwtRHVwbGV4CisgKiAgNSA6IDEwMDBNYiBGdWxsLUR1cGxleAorICogIDAgOiBBdXRvIFNwZWVkIEF1dG8gRHVibGV4IC8vIGRlZmF1bHQKKyAqLworc3RhdGljIHUzMiBldDEzMXhfbm1pX2Rpc2FibGUgPSBQQVJNX05NSV9ESVNBQkxFX0RFRjsKK21vZHVsZV9wYXJhbShldDEzMXhfbm1pX2Rpc2FibGUsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhldDEzMXhfbm1pX2Rpc2FibGUsICJEaXNhYmxlIE5NSSAoMC0yKSBbMF0iKTsKKworLyogTW9kdWxlIHBhcmFtZXRlciBmb3IgbWFudWFsIHNwZWVkIHNldHRpbmcKKyAqIGV0MTMxeF9ubWlfZGlzYWJsZSA6CisgKiBEaXNhYmxlIE5NSSAoMC0yKSBbMF0KKyAqICAwIDoKKyAqICAxIDoKKyAqICAyIDoKKyAqLworc3RhdGljIHUzMiBldDEzMXhfc3BlZWRfc2V0ID0gUEFSTV9TUEVFRF9EVVBMRVhfREVGOworbW9kdWxlX3BhcmFtKGV0MTMxeF9zcGVlZF9zZXQsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhldDEzMXhfc3BlZWRfc2V0LAorCQkgIlNldCBMaW5rIHNwZWVkIGFuZCBkdWJsZXggbWFudWFsbHkgKDAtNSkgIFswXSBcbiAgMSA6IDEwTWIgICBIYWxmLUR1cGxleCBcbiAgMiA6IDEwTWIgICBGdWxsLUR1cGxleCBcbiAgMyA6IDEwME1iICBIYWxmLUR1cGxleCBcbiAgNCA6IDEwME1iICBGdWxsLUR1cGxleCBcbiAgNSA6IDEwMDBNYiBGdWxsLUR1cGxleCBcbiAwIDogQXV0byBTcGVlZCBBdXRvIER1YmxleCIpOworCisvKioKKyAqIGV0MTMxeF9jb25maWdfcGFyc2UKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdAorICoKKyAqIFBhcnNlcyBhIGNvbmZpZ3VyYXRpb24gZnJvbSBzb21lIGxvY2F0aW9uIChtb2R1bGUgcGFyYW1ldGVycywgZm9yIGV4YW1wbGUpCisgKiBpbnRvIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0CisgKi8KK3ZvaWQgZXQxMzF4X2NvbmZpZ19wYXJzZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVpbnQ4X3QgbWFjQWRkckRlZltdID0gUEFSTV9NQUNfQUREUkVTU19ERUY7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyoKKwkgKiBUaGUgTkRJUyBkcml2ZXIgdXNlcyB0aGUgcmVnaXN0cnkgdG8gc3RvcmUgcGVyc2lzdGVudCBwZXItZGV2aWNlCisJICogY29uZmlndXJhdGlvbiwgYW5kIHJlYWRzIHRoaXMgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBhcHByb3ByaWF0ZQorCSAqIGVsZW1lbnRzIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlIG9uIGluaXRpYWxpemF0aW9uLgorCSAqIEJlY2F1c2UgTGludXggaGFzIG5vIGFuYWxvZyB0byB0aGUgcmVnaXN0cnksIHVzZSB0aGlzIGZ1bmN0aW9uIHRvCisJICogaW5pdGlhbGl6ZSB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSB3aXRoIGEgZGVmYXVsdAorCSAqIGNvbmZpZ3VyYXRpb24uCisJICoKKwkgKiBPbmUgb3RoZXIgcG9zc2liaWxpdHkgaXMgdG8gdXNlIGEgc2VyaWVzIG9mIG1vZHVsZSBwYXJhbWV0ZXJzIHdoaWNoCisJICogY2FuIGJlIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyIHdoZW4gdGhlIG1vZHVsZSBpcyBpbml0aWFsaXplZC4KKwkgKiBIb3dldmVyLCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGFsbG93IGZvciBzZXBlcmF0ZQorCSAqIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBldmVudCBtdWx0aXBsZSBkZXZpY2VzIGFyZSBwcmVzZW50LCBhbmQgaGVuY2UKKwkgKiB3aWxsIG5vdCBzdWZmaWNlLgorCSAqCisJICogSWYgYW5vdGhlciBtZXRob2QgaXMgZGVyaXZlZCB3aGljaCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLCB0aGlzIGlzCisJICogd2hlcmUgaXQgc2hvdWxkIGJlIGltcGxlbWVudGVkLgorCSAqLworCisJIC8qIFNldCB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUKKwkgICogY29ycmVzcG9uZGluZyBwYXJhbWV0ZXJzCisJICAqLworCWlmIChldDEzMXhfc3BlZWRfc2V0ICE9IFBBUk1fU1BFRURfRFVQTEVYX0RFRikgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlNwZWVkIHNldCBtYW51YWxseSB0byA6ICVkIFxuIiwKKwkJCSAgICBldDEzMXhfc3BlZWRfc2V0KTsKKwkJcEFkYXB0ZXItPlNwZWVkRHVwbGV4ID0gZXQxMzF4X3NwZWVkX3NldDsKKwl9IGVsc2UgeworCQlwQWRhcHRlci0+U3BlZWREdXBsZXggPSBQQVJNX1NQRUVEX0RVUExFWF9ERUY7CisJfQorCisJLy8gIHBBZGFwdGVyLT5TcGVlZER1cGxleCAgICAgICAgICAgID0gUEFSTV9TUEVFRF9EVVBMRVhfREVGOworCisJcEFkYXB0ZXItPlJlZ2lzdHJ5VmxhblRhZyA9IFBBUk1fVkxBTl9UQUdfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID0gUEFSTV9GTE9XX0NUTF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5V09MTGluayA9IFBBUk1fV09MX0xJTktfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVdPTE1hdGNoID0gUEFSTV9XT0xfTUFUQ0hfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0ID0gUEFSTV9KVU1CT19QS1RfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVBoeUNvbWEgPSBQQVJNX1BIWV9DT01BX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlSeE51bUJ1ZmZlcnMgPSBQQVJNX1JYX05VTV9CVUZTX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlSeFRpbWVJbnRlcnZhbCA9IFBBUk1fUlhfVElNRV9JTlRfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVR4TnVtQnVmZmVycyA9IFBBUk1fVFhfTlVNX0JVRlNfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVR4VGltZUludGVydmFsID0gUEFSTV9UWF9USU1FX0lOVF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5UnhNZW1FbmQgPSBQQVJNX1JYX01FTV9FTkRfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeU1BQ1N0YXQgPSBQQVJNX01BQ19TVEFUX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlTQ0dhaW4gPSBQQVJNX1NDX0dBSU5fREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVBNV09MID0gUEFSTV9QTV9XT0xfREVGOworCisJaWYgKGV0MTMxeF9ubWlfZGlzYWJsZSAhPSBQQVJNX05NSV9ESVNBQkxFX0RFRikgeworCQlwQWRhcHRlci0+UmVnaXN0cnlOTUlEaXNhYmxlID0gZXQxMzF4X25taV9kaXNhYmxlOworCX0gZWxzZSB7CisJCXBBZGFwdGVyLT5SZWdpc3RyeU5NSURpc2FibGUgPSBQQVJNX05NSV9ESVNBQkxFX0RFRjsKKwl9CisKKwlwQWRhcHRlci0+UmVnaXN0cnlETUFDYWNoZSA9IFBBUk1fRE1BX0NBQ0hFX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmsgPSBQQVJNX1BIWV9MT09QQktfREVGOworCisJLyogU2V0IHRoZSBNQUMgYWRkcmVzcyB0byBhIGRlZmF1bHQgKi8KKwltZW1jcHkocEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBtYWNBZGRyRGVmLCBFVEhfQUxFTik7CisJcEFkYXB0ZXItPmJPdmVycmlkZUFkZHJlc3MgPSBmYWxzZTsKKworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJICAiRGVmYXVsdCBNQUMgQWRkcmVzcyAgOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF0sIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1sxXSwKKwkJICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl0sIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXSwKKwkJICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF0sIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XSk7CisKKwkvKiBEZWNvZGUgU3BlZWREdXBsZXgKKwkgKgorCSAqIFNldCB1cCBhcyBpZiB3ZSBhcmUgYXV0byBuZWdvdGlhdGluZyBhbHdheXMgYW5kIHRoZW4gY2hhbmdlIGlmIHdlCisJICogZ28gaW50byBmb3JjZSBtb2RlCisJICovCisJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDA7CS8vIEF1dG8gc3BlZWQKKwlwQWRhcHRlci0+QWlGb3JjZURweCA9IDA7CS8vIEF1dG8gRkRYCisKKwkvKiBJZiB3ZSBhcmUgdGhlIDEwLzEwMCBkZXZpY2UsIGFuZCBnaWdhYml0IGlzIHNvbWVob3cgcmVxdWVzdGVkIHRoZW4KKwkgKiBrbm9jayBpdCBkb3duIHRvIDEwMCBmdWxsLgorCSAqLworCWlmICgocEFkYXB0ZXItPkRldmljZUlEID09IEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QpICYmCisJICAgIChwQWRhcHRlci0+U3BlZWREdXBsZXggPT0gNSkpIHsKKwkJcEFkYXB0ZXItPlNwZWVkRHVwbGV4ID0gNDsKKwl9CisKKwlzd2l0Y2ggKHBBZGFwdGVyLT5TcGVlZER1cGxleCkgeworCWNhc2UgMToJCS8vIDEwTWIgICBIYWxmLUR1cGxleAorCQlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMTA7CisJCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CQkvLyAxME1iICAgRnVsbC1EdXBsZXgKKwkJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDEwOworCQlwQWRhcHRlci0+QWlGb3JjZURweCA9IDI7CisJCWJyZWFrOworCisJY2FzZSAzOgkJLy8gMTAwTWIgIEhhbGYtRHVwbGV4CisJCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSAxMDA7CisJCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6CQkvLyAxMDBNYiAgRnVsbC1EdXBsZXgKKwkJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDEwMDsKKwkJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAyOworCQlicmVhazsKKworCWNhc2UgNToJCS8vIDEwMDBNYiBGdWxsLUR1cGxleAorCQlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMTAwMDsKKwkJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAyOworCQlicmVhazsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDJjMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfY29uZmlnLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB0byBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgICBldDEzMXhfY29uZmlnLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9DT05GSUdfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0NPTkZJR19IX18KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit2b2lkIGV0MTMxeF9jb25maWdfcGFyc2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9fRVQxMzFYX0NPTkZJR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZGQ0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5jCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9kZWJ1Zy5jIC0gUm91dGluZXMgdXNlZCBmb3IgZGVidWdnaW5nLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9uZXRkZXYuaCIKKyNpbmNsdWRlICJldDEzMXhfY29uZmlnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworCisvKioKKyAqIER1bXBUeFF1ZXVlQ29udGVudHMgLSBEdW1wIG91dCB0aGUgdHggcXVldWUgYW5kIHRoZSBzaGFkb3cgcG9pbnRlcnMKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBEdW1wVHhRdWV1ZUNvbnRlbnRzKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJTU1DX3QgX19pb21lbSAqbW1jID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tbWM7CisJdWludDMyX3QgVHhRdWV1ZUFkZHI7CisKKwlpZiAoREJHX0ZMQUdTKGV0MTMxeF9kYmdpbmZvKSAmIGRiZ0x2bCkgeworCQlmb3IgKFR4UXVldWVBZGRyID0gMHgyMDA7IFR4UXVldWVBZGRyIDwgMHgzZmY7IFR4UXVldWVBZGRyKyspIHsKKwkJCU1NQ19TUkFNX0FDQ0VTU190IHNyYW1fYWNjZXNzOworCisJCQlzcmFtX2FjY2Vzcy52YWx1ZSA9IHJlYWRsKCZtbWMtPnNyYW1fYWNjZXNzLnZhbHVlKTsKKwkJCXNyYW1fYWNjZXNzLmJpdHMucmVxX2FkZHIgPSBUeFF1ZXVlQWRkcjsKKwkJCXNyYW1fYWNjZXNzLmJpdHMucmVxX2FjY2VzcyA9IDE7CisJCQl3cml0ZWwoc3JhbV9hY2Nlc3MudmFsdWUsICZtbWMtPnNyYW1fYWNjZXNzLnZhbHVlKTsKKworCQkJREJHX1BSSU5UKCJBZGRyIDB4JXgsIEFjY2VzcyAweCUwOHhcdCIKKwkJCQkgICJWYWx1ZSAxIDB4JTA4eCwgVmFsdWUgMiAweCUwOHgsICIKKwkJCQkgICJWYWx1ZSAzIDB4JTA4eCwgVmFsdWUgNCAweCUwOHgsIFxuIiwKKwkJCQkgIFR4UXVldWVBZGRyLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV9hY2Nlc3MudmFsdWUpLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV93b3JkMSksCisJCQkJICByZWFkbCgmbW1jLT5zcmFtX3dvcmQyKSwKKwkJCQkgIHJlYWRsKCZtbWMtPnNyYW1fd29yZDMpLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV93b3JkNCkpOworCQl9CisKKwkJREJHX1BSSU5UKCJTaGFkb3cgUG9pbnRlcnMgMHglMDh4XG4iLAorCQkJICByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4bWFjLnNoYWRvd19wdHIudmFsdWUpKTsKKwl9Cit9CisKKy8qKgorICogRHVtcERldmljZUJsb2NrCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBEdW1wcyB0aGUgZmlyc3QgNjQgcmVncyBvZiBlYWNoIGJsb2NrIG9mIHRoZSBldC0xMzEwIChlYWNoIGJsb2NrIGlzCisgKiBtYXBwZWQgdG8gYSBuZXcgcGFnZSwgZWFjaCBwYWdlIGlzIDQwOTYgYnl0ZXMpLgorICovCisjZGVmaW5lIE5VTV9CTE9DS1MgOAordm9pZCBEdW1wRGV2aWNlQmxvY2soaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJICAgICB1aW50MzJfdCBCbG9jaykKK3sKKwl1aW50MzJfdCBBZGRyZXNzMSwgQWRkcmVzczI7CisJdWludDMyX3QgX19pb21lbSAqQmlnRGV2aWNlUG9pbnRlciA9CisJCSh1aW50MzJfdCBfX2lvbWVtICopIHBBZGFwdGVyLT5DU1JBZGRyZXNzOworCWNvbnN0IGNoYXIgKkJsb2NrTmFtZXNbTlVNX0JMT0NLU10gPSB7CisJCSJHbG9iYWwiLCAiVHggRE1BIiwgIlJ4IERNQSIsICJUeCBNQUMiLAorCQkiUnggTUFDIiwgIk1BQyIsICJNQUMgU3RhdCIsICJNTUMiCisJfTsKKworCS8qIE91dHB1dCB0aGUgZGVidWcgY291bnRlcnMgdG8gdGhlIGRlYnVnIHRlcm1pbmFsICovCisJaWYgKERCR19GTEFHUyhldDEzMXhfZGJnaW5mbykgJiBkYmdMdmwpIHsKKwkJREJHX1BSSU5UKCIlcyBibG9ja1xuIiwgQmxvY2tOYW1lc1tCbG9ja10pOworCQlCaWdEZXZpY2VQb2ludGVyICs9IEJsb2NrICogMTAyNDsKKwkJZm9yIChBZGRyZXNzMSA9IDA7IEFkZHJlc3MxIDwgODsgQWRkcmVzczErKykgeworCQkJZm9yIChBZGRyZXNzMiA9IDA7IEFkZHJlc3MyIDwgODsgQWRkcmVzczIrKykgeworCQkJCWlmIChCbG9jayA9PSAwICYmCisJCQkJICAgIChBZGRyZXNzMSAqIDggKyBBZGRyZXNzMikgPT0gNikgeworCQkJCQlEQkdfUFJJTlQoIiAgSVNSICAgICwgIik7CisJCQkJfSBlbHNlIHsKKwkJCQkJREJHX1BSSU5UKCIweCUwOHgsICIsCisJCQkJCQkgIHJlYWRsKEJpZ0RldmljZVBvaW50ZXIrKykpOworCQkJCX0KKwkJCX0KKwkJCURCR19QUklOVCgiXG4iKTsKKwkJfQorCQlEQkdfUFJJTlQoIlxuIik7CisJfQorfQorCisvKioKKyAqIER1bXBEZXZpY2VSZWcKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIER1bXBzIHRoZSBmaXJzdCA2NCByZWdzIG9mIGVhY2ggYmxvY2sgb2YgdGhlIGV0LTEzMTAgKGVhY2ggYmxvY2sgaXMKKyAqIG1hcHBlZCB0byBhIG5ldyBwYWdlLCBlYWNoIHBhZ2UgaXMgNDA5NiBieXRlcykuCisgKi8KK3ZvaWQgRHVtcERldmljZVJlZyhpbnQgZGJnTHZsLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVpbnQzMl90IEFkZHJlc3MxLCBBZGRyZXNzMjsKKwl1aW50MzJfdCBCbG9jazsKKwl1aW50MzJfdCBfX2lvbWVtICpCaWdEZXZpY2VQb2ludGVyID0KKwkJKHVpbnQzMl90IF9faW9tZW0gKikgcEFkYXB0ZXItPkNTUkFkZHJlc3M7CisJdWludDMyX3QgX19pb21lbSAqUG9pbnRlcjsKKwljb25zdCBjaGFyICpCbG9ja05hbWVzW05VTV9CTE9DS1NdID0geworCQkiR2xvYmFsIiwgIlR4IERNQSIsICJSeCBETUEiLCAiVHggTUFDIiwKKwkJIlJ4IE1BQyIsICJNQUMiLCAiTUFDIFN0YXQiLCAiTU1DIgorCX07CisKKwkvKiBPdXRwdXQgdGhlIGRlYnVnIGNvdW50ZXJzIHRvIHRoZSBkZWJ1ZyB0ZXJtaW5hbCAqLworCWlmIChEQkdfRkxBR1MoZXQxMzF4X2RiZ2luZm8pICYgZGJnTHZsKSB7CisJCWZvciAoQmxvY2sgPSAwOyBCbG9jayA8IE5VTV9CTE9DS1M7IEJsb2NrKyspIHsKKwkJCURCR19QUklOVCgiJXMgYmxvY2tcbiIsIEJsb2NrTmFtZXNbQmxvY2tdKTsKKwkJCVBvaW50ZXIgPSBCaWdEZXZpY2VQb2ludGVyICsgKEJsb2NrICogMTAyNCk7CisKKwkJCWZvciAoQWRkcmVzczEgPSAwOyBBZGRyZXNzMSA8IDg7IEFkZHJlc3MxKyspIHsKKwkJCQlmb3IgKEFkZHJlc3MyID0gMDsgQWRkcmVzczIgPCA4OyBBZGRyZXNzMisrKSB7CisJCQkJCURCR19QUklOVCgiMHglMDh4LCAiLAorCQkJCQkJICByZWFkbChQb2ludGVyKyspKTsKKwkJCQl9CisJCQkJREJHX1BSSU5UKCJcbiIpOworCQkJfQorCQkJREJHX1BSSU5UKCJcbiIpOworCQl9CisJfQorfQorCisjZW5kaWYgLy8gQ09ORklHX0VUMTMxWF9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiNjA4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmgKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2RlYnVnLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB1c2VkIGZvcgorICogICAgICAgICAgICAgICAgICBvdXRwdXR0aW5nIGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBzeXN0ZW0gbG9nZ2luZyBmYWNpbGl0eQorICogICAgICAgICAgICAgICAgICAoa3N5c2xvZ2QpCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfREJHX0hfXworI2RlZmluZSBfX0VUMTMxWF9EQkdfSF9fCisKKy8qIERlZmluZSBNYXNrcyBmb3IgZGVidWdnaW5nIHR5cGVzL2xldmVscyAqLworI2RlZmluZSBEQkdfRVJST1JfT04gICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIERCR19XQVJOSU5HX09OICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgREJHX05PVElDRV9PTiAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBEQkdfVFJBQ0VfT04gICAgICAgIDB4MDAwMDAwMDhMCisjZGVmaW5lIERCR19WRVJCT1NFX09OICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgREJHX1BBUkFNX09OICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBEQkdfQlJFQUtfT04gICAgICAgIDB4MDAwMDAwNDBMCisjZGVmaW5lIERCR19SWF9PTiAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgREJHX1RYX09OICAgICAgICAgICAweDAwMDAwMjAwTAorCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCisvKgorICogU2V0IHRoZSBsZXZlbCBvZiBkZWJ1Z2dpbmcgaWYgbm90IGRvbmUgd2l0aCBhIHByZXByb2Nlc3NvciBkZWZpbmUuIFNlZQorICogZXQxMzF4X21haW4uYywgZnVuY3Rpb24gZXQxMzF4X2luaXRfbW9kdWxlKCkgZm9yIGhvdyB0aGUgZGVidWcgbGV2ZWwKKyAqIHRyYW5zbGF0ZXMgaW50byB0aGUgdHlwZXMgb2YgbWVzc2FnZXMgZGlzcGxheWVkLgorICovCisjaWZuZGVmIERCR19MVkwKKyNkZWZpbmUgREJHX0xWTAkzCisjZW5kaWYgLyogREJHX0xWTCAqLworCisjZGVmaW5lIERCR19ERUZBVUxUUwkJKERCR19FUlJPUl9PTiB8IERCR19XQVJOSU5HX09OIHwgREJHX0JSRUFLX09OICkKKworI2RlZmluZSBEQkdfRkxBR1MoQSkJCShBKS0+ZGJnRmxhZ3MKKyNkZWZpbmUgREJHX05BTUUoQSkJCShBKS0+ZGJnTmFtZQorI2RlZmluZSBEQkdfTEVWRUwoQSkJCShBKS0+ZGJnTGV2ZWwKKworI2lmbmRlZiBEQkdfUFJJTlQKKyNkZWZpbmUgREJHX1BSSU5UKFMuLi4pCQlwcmludGsoS0VSTl9ERUJVRyBTKQorI2VuZGlmIC8qIERCR19QUklOVCAqLworCisjaWZuZGVmIERCR19QUklOVEMKKyNkZWZpbmUgREJHX1BSSU5UQyhTLi4uKQlwcmludGsoUykKKyNlbmRpZiAvKiBEQkdfUFJJTlRDICovCisKKyNpZm5kZWYgREJHX1RSQVAKKyNkZWZpbmUgREJHX1RSQVAJCXt9CS8qIEJVRygpICovCisjZW5kaWYgLyogREJHX1RSQVAgKi8KKworI2RlZmluZSBfRU5URVJfU1RSCSI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IgorI2RlZmluZSBfTEVBVkVfU1RSCSI8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IgorCisjZGVmaW5lIF9EQkdfRU5URVIoQSkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiUuKnM6JXNcbiIsIERCR19OQU1FKEEpLAlcCisJCQkJKytEQkdfTEVWRUwoQSksIF9FTlRFUl9TVFIsIF9fZnVuY19fKQorI2RlZmluZSBfREJHX0xFQVZFKEEpCXByaW50ayhLRVJOX0RFQlVHICIlczolLipzOiVzXG4iLCBEQkdfTkFNRShBKSwJXAorCQkJCURCR19MRVZFTChBKS0tLCBfTEVBVkVfU1RSLCBfX2Z1bmNfXykKKworI2RlZmluZSBEQkdfRU5URVIoQSkgICAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RSQUNFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfRU5URVIoQSk7fQorCisjZGVmaW5lIERCR19MRUFWRShBKSAgICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFJBQ0VfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19MRUFWRShBKTt9CisKKyNkZWZpbmUgREJHX1BBUkFNKEEsTixGLFMuLi4pICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUEFSQU1fT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUklOVCgiICAlcyAtLSAiRiJcbiIsTixTKTt9CisKKyNkZWZpbmUgREJHX0VSUk9SKEEsUy4uLikJXAorCWlmIChEQkdfRkxBR1MoQSkgJiBEQkdfRVJST1JfT04pIHsJCQkJXAorCQlEQkdfUFJJTlQoIiVzOkVSUk9SOiVzICIsREJHX05BTUUoQSksIF9fZnVuY19fKTsJXAorCQlEQkdfUFJJTlRDKFMpOwkJCQkJCVwKKwkJREJHX1RSQVA7CQkJCQkJXAorCX0KKworI2RlZmluZSBEQkdfV0FSTklORyhBLFMuLi4pIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1dBUk5JTkdfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVCgiJXM6V0FSTklORzolcyAiLERCR19OQU1FKEEpLF9fZnVuY19fKTtEQkdfUFJJTlRDKFMpO319CisKKyNkZWZpbmUgREJHX05PVElDRShBLFMuLi4pICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19OT1RJQ0VfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVCgiJXM6Tk9USUNFOiVzICIsREJHX05BTUUoQSksX19mdW5jX18pO0RCR19QUklOVEMoUyk7fX0KKworI2RlZmluZSBEQkdfVFJBQ0UoQSxTLi4uKSAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RSQUNFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIiVzOlRSQUNFOiVzICIsREJHX05BTUUoQSksIF9fZnVuY19fKTtEQkdfUFJJTlRDKFMpO319CisKKyNkZWZpbmUgREJHX1ZFUkJPU0UoQSxTLi4uKSB7aWYgKERCR19GTEFHUyhBKSAmIERCR19WRVJCT1NFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIiVzOlZFUkJPU0U6JXMgIixEQkdfTkFNRShBKSwgX19mdW5jX18pO0RCR19QUklOVEMoUyk7fX0KKworI2RlZmluZSBEQkdfUlgoQSxTLi4uKSAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1JYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoUyk7fX0KKworI2RlZmluZSBEQkdfUlhfRU5URVIoQSkgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1JYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfRU5URVIoQSk7fQorCisjZGVmaW5lIERCR19SWF9MRUFWRShBKSAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUlhfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19MRUFWRShBKTt9CisKKyNkZWZpbmUgREJHX1RYKEEsUy4uLikgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKFMpO319CisKKyNkZWZpbmUgREJHX1RYX0VOVEVSKEEpICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJHX0VOVEVSKEEpO30KKworI2RlZmluZSBEQkdfVFhfTEVBVkUoQSkgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfTEVBVkUoQSk7fQorCisjZGVmaW5lIERCR19BU1NFUlQoQykgICAgICAge2lmICghKEMpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIkFTU0VSVCglcykgLS0gJXMjJWQgKCVzKVxuIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0MsX19GSUxFX18sX19MSU5FX18sX19mdW5jX18pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19UUkFQO319CisjZGVmaW5lIFNUQVRJQworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciAqZGJnTmFtZTsKKwlpbnQgZGJnTGV2ZWw7CisJdW5zaWduZWQgbG9uZyBkYmdGbGFnczsKK30gZGJnX2luZm9fdDsKKworI2Vsc2UgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisjZGVmaW5lIERCR19ERUZOCisjZGVmaW5lIERCR19UUkFQCisjZGVmaW5lIERCR19QUklOVChTLi4uKQorI2RlZmluZSBEQkdfRU5URVIoQSkKKyNkZWZpbmUgREJHX0xFQVZFKEEpCisjZGVmaW5lIERCR19QQVJBTShBLE4sRixTLi4uKQorI2RlZmluZSBEQkdfRVJST1IoQSxTLi4uKQorI2RlZmluZSBEQkdfV0FSTklORyhBLFMuLi4pCisjZGVmaW5lIERCR19OT1RJQ0UoQSxTLi4uKQorI2RlZmluZSBEQkdfVFJBQ0UoQSxTLi4uKQorI2RlZmluZSBEQkdfVkVSQk9TRShBLFMuLi4pCisjZGVmaW5lIERCR19SWChBLFMuLi4pCisjZGVmaW5lIERCR19SWF9FTlRFUihBKQorI2RlZmluZSBEQkdfUlhfTEVBVkUoQSkKKyNkZWZpbmUgREJHX1RYKEEsUy4uLikKKyNkZWZpbmUgREJHX1RYX0VOVEVSKEEpCisjZGVmaW5lIERCR19UWF9MRUFWRShBKQorI2RlZmluZSBEQkdfQVNTRVJUKEMpCisjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit2b2lkIER1bXBUeFF1ZXVlQ29udGVudHMoaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRHVtcERldmljZUJsb2NrKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICB1bnNpZ25lZCBpbnQgQmxvY2spOwordm9pZCBEdW1wRGV2aWNlUmVnKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfX0VUMTMxWF9EQkdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlZnMuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfZGVmcy5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gdG8gYXNzaXN0IHdpdGggT1MKKyAqICAgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfREVGU19IX18KKyNkZWZpbmUgX19FVDEzMVhfREVGU19IX18KKworLyogUGFja2V0IGFuZCBoZWFkZXIgc2l6ZXMgKi8KKyNkZWZpbmUgTklDX01JTl9QQUNLRVRfU0laRQk2MAorI2RlZmluZSBOSUNfSEVBREVSX1NJWkUJCUVUSF9ITEVOCS8qIDE0ICovCisKKy8qIE11bHRpY2FzdCBsaXN0IHNpemUgKi8KKyNkZWZpbmUgTklDX01BWF9NQ0FTVF9MSVNUCTEyOAorCisvKiBTdXBwb3J0ZWQgRmlsdGVycyAqLworI2RlZmluZSBFVDEzMVhfUEFDS0VUX1RZUEVfRElSRUNURUQJCTB4MDAwMQorI2RlZmluZSBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUCQkweDAwMDIKKyNkZWZpbmUgRVQxMzFYX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJMHgwMDA0CisjZGVmaW5lIEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJMHgwMDA4CisjZGVmaW5lIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCTB4MDAxMAorCisvKiBUeCBUaW1lb3V0ICovCisjZGVmaW5lIEVUMTMxWF9UWF9USU1FT1VUCSgxICogSFopCisjZGVmaW5lIE5JQ19TRU5EX0hBTkdfVEhSRVNIT0xECTAKKworLyogTVBfVENCIGZsYWdzICovCisjZGVmaW5lIGZNUF9ERVNUX01VTFRJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBmTVBfREVTVF9CUk9BRAkJCTB4MDAwMDAwMDIKKworLyogTVBfQURBUFRFUiBmbGFncyAqLworI2RlZmluZSBmTVBfQURBUFRFUl9SRUNWX0xPT0tBU0lERQkweDAwMDAwMDA0CisjZGVmaW5lIGZNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UJMHgwMDAwMDAwOAorI2RlZmluZSBmTVBfQURBUFRFUl9TRUNPTkRBUlkJCTB4MDAwMDAwMTAKKworLyogTVBfU0hBUkVEIGZsYWdzICovCisjZGVmaW5lIGZNUF9BREFQVEVSX1NIVVRET1dOCQkweDAwMTAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX0xPV0VSX1BPV0VSCQkweDAwMjAwMDAwCisKKyNkZWZpbmUgZk1QX0FEQVBURVJfTk9OX1JFQ09WRVJfRVJST1IJMHgwMDgwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUwkweDAxMDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX05PX0NBQkxFCQkweDAyMDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX0hBUkRXQVJFX0VSUk9SCTB4MDQwMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTCTB4MDgwMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUwkweDEwMDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OCTB4MjAwMDAwMDAKKworI2RlZmluZSBmTVBfQURBUFRFUl9GQUlMX1NFTkRfTUFTSwkweDNmZjAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX05PVF9SRUFEWV9NQVNLCTB4M2ZmMDAwMDAKKworLyogU29tZSBvZmZzZXRzIGluIFBDSSBjb25maWcgc3BhY2UgdGhhdCBhcmUgYWN0dWFsbHkgdXNlZC4gKi8KKyNkZWZpbmUgRVQxMzEwX1BDSV9QTV9DQVBBQklMSVRZCTB4NDAKKyNkZWZpbmUgRVQxMzEwX1BDSV9QTV9DU1IJCTB4NDQKKyNkZWZpbmUgRVQxMzEwX1BDSV9NQVhfUFlMRAkJMHg0QworI2RlZmluZSBFVDEzMTBfUENJX0RFVl9DVFJMCQkweDUwCisjZGVmaW5lIEVUMTMxMF9QQ0lfREVWX1NUQVQJCTB4NTIKKyNkZWZpbmUgRVQxMzEwX05NSV9ESVNBQkxFCQkweDYxCisjZGVmaW5lIEVUMTMxMF9QQ0lfTUFDX0FERFJFU1MJCTB4QTQKKyNkZWZpbmUgRVQxMzEwX1BDSV9FRVBST01fU1RBVFVTCTB4QjIKKyNkZWZpbmUgRVQxMzEwX1BDSV9QSFlfSU5ERVhfUkVHCTB4QjQKKyNkZWZpbmUgRVQxMzEwX1BDSV9BQ0tfTkFDSwkJMHhDMAorI2RlZmluZSBFVDEzMTBfUENJX1JFUExBWQkJMHhDMgorI2RlZmluZSBFVDEzMTBfUENJX0wwTDFMQVRFTkNZCQkweENGCisjZGVmaW5lIEVUMTMxMF9QQ0lfU0VMX1BIWV9DVFJMCQkweEU0CisjZGVmaW5lIEVUMTMxMF9QQ0lfQURWQU5DRURfRVJSCQkweDEwMAorCisvKiBQQ0kgVmVuZG9yL1Byb2R1Y3QgSURzICovCisjZGVmaW5lIEVUMTMxWF9QQ0lfVkVORE9SX0lECQkweDExQzEJLy8gQWdlcmUgU3lzdGVtcworI2RlZmluZSBFVDEzMVhfUENJX0RFVklDRV9JRF9HSUcJMHhFRDAwCS8vIEVUMTMxMCAxMDAwIEJhc2UtVAorI2RlZmluZSBFVDEzMVhfUENJX0RFVklDRV9JRF9GQVNUCTB4RUQwMQkvLyBFVDEzMTAgMTAwICBCYXNlLVQKKworLyogRGVmaW5lIG9yZGVyIG9mIG1hZ25pdHVkZSBjb252ZXJ0ZXIgKi8KKyNkZWZpbmUgTkFOT19JTl9BX01JQ1JPCTEwMDAKKworI2VuZGlmIC8qIF9fRVQxMzFYX0RFRlNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4YzQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuYwpAQCAtMCwwICsxLDEwNDUgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2luaXRwY2kuYyAtIFJvdXRpbmVzIGFuZCBkYXRhIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGRyaXZlciB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgIFBDSSAoYW5kIFBDSSBFeHByZXNzKSBzdWJzeXN0ZW0sIGFzIHdlbGwgYXMgYmFzaWMgZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgaW5pdCBhbmQgc3RhcnR1cC4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfbmV0ZGV2LmgiCisjaW5jbHVkZSAiZXQxMzF4X2NvbmZpZy5oIgorI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorI2luY2x1ZGUgImV0MTMxMF90eC5oIgorI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKyNpbmNsdWRlICJldDEzMTBfZWVwcm9tLmgiCisKKworaW50IF9fZGV2aW5pdCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwordm9pZCBfX2RldmV4aXQgZXQxMzF4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCisKKy8qIE1vZGluZm8gcGFyYW1ldGVycyAoZmlsbGVkIG91dCB1c2luZyBkZWZpbmVzIGZyb20gZXQxMzF4X3ZlcnNpb24uaCkgKi8KK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0lORk8pOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCisvKiBNb2R1bGUgUGFyYW1ldGVycyBhbmQgcmVsYXRlZCBkYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK3N0YXRpYyB1MzIgZXQxMzF4X2RlYnVnX2xldmVsID0gREJHX0xWTDsKK3N0YXRpYyB1MzIgZXQxMzF4X2RlYnVnX2ZsYWdzID0gREJHX0RFRkFVTFRTOworCisvKgorZXQxMzF4X2RlYnVnX2xldmVsIDoKKyBMZXZlbCBvZiBkZWJ1Z2dpbmcgZGVzaXJlZCAoMC03KQorICAgNyA6IERCR19SWF9PTiB8IERCR19UWF9PTgorICAgNiA6IERCR19QQVJBTV9PTgorICAgNSA6IERCR19WRVJCT1NFX09OCisgICA0IDogREJHX1RSQUNFX09OCisgICAzIDogREJHX05PVElDRV9PTgorICAgMiA6IG5vIGRlYnVnIGluZm8KKyAgIDEgOiBubyBkZWJ1ZyBpbmZvCisgICAwIDogbm8gZGVidWcgaW5mbworKi8KKworbW9kdWxlX3BhcmFtKGV0MTMxeF9kZWJ1Z19sZXZlbCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0oZXQxMzF4X2RlYnVnX2ZsYWdzLCB1aW50LCAwKTsKKworTU9EVUxFX1BBUk1fREVTQyhldDEzMXhfZGVidWdfbGV2ZWwsICJMZXZlbCBvZiBkZWJ1Z2dpbmcgZGVzaXJlZCAoMC03KSIpOworCitzdGF0aWMgZGJnX2luZm9fdCBldDEzMXhfaW5mbyA9IHsgRFJJVkVSX05BTUVfRVhULCAwLCAwIH07CitkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbyA9ICZldDEzMXhfaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBldDEzMXhfcGNpX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7RVQxMzFYX1BDSV9WRU5ET1JfSUQsIEVUMTMxWF9QQ0lfREVWSUNFX0lEX0dJRywgUENJX0FOWV9JRCwKKwkgUENJX0FOWV9JRCwgMCwgMCwgMFVMfSwKKwl7RVQxMzFYX1BDSV9WRU5ET1JfSUQsIEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QsIFBDSV9BTllfSUQsCisJIFBDSV9BTllfSUQsIDAsIDAsIDBVTH0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGV0MTMxeF9wY2lfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZXQxMzF4X2RyaXZlciA9IHsKKyAgICAgIC5uYW1lCT0gRFJJVkVSX05BTUUsCisgICAgICAuaWRfdGFibGUJPSBldDEzMXhfcGNpX3RhYmxlLAorICAgICAgLnByb2JlCT0gZXQxMzF4X3BjaV9zZXR1cCwKKyAgICAgIC5yZW1vdmUJPSBfX2RldmV4aXRfcChldDEzMXhfcGNpX3JlbW92ZSksCisgICAgICAuc3VzcGVuZAk9IE5VTEwsCQkvL2V0MTMxeF9wY2lfc3VzcGVuZCwKKyAgICAgIC5yZXN1bWUJPSBOVUxMLAkJLy9ldDEzMXhfcGNpX3Jlc3VtZSwKK307CisKKworLyoqCisgKiBldDEzMXhfaW5pdF9tb2R1bGUgLSBUaGUgIm1haW4iIGVudHJ5IHBvaW50IGNhbGxlZCBvbiBkcml2ZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwkvKiBTZXQgdGhlIGxldmVsIG9mIGRlYnVnIG1lc3NhZ2VzIGRpc3BsYXllZCB1c2luZyB0aGUgbW9kdWxlCisJICogcGFyYW1ldGVyCisJICovCisJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzID0gZXQxMzF4X2RlYnVnX2ZsYWdzOworCisJc3dpdGNoIChldDEzMXhfZGVidWdfbGV2ZWwpIHsKKwljYXNlIDc6CisJCWV0MTMxeF9kYmdpbmZvLT5kYmdGbGFncyB8PSAoREJHX1JYX09OIHwgREJHX1RYX09OKTsKKworCWNhc2UgNjoKKwkJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzIHw9IERCR19QQVJBTV9PTjsKKworCWNhc2UgNToKKwkJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzIHw9IERCR19WRVJCT1NFX09OOworCisJY2FzZSA0OgorCQlldDEzMXhfZGJnaW5mby0+ZGJnRmxhZ3MgfD0gREJHX1RSQUNFX09OOworCisJY2FzZSAzOgorCQlldDEzMXhfZGJnaW5mby0+ZGJnRmxhZ3MgfD0gREJHX05PVElDRV9PTjsKKworCWNhc2UgMjoKKwljYXNlIDE6CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCURCR19QUklOVCgiJXNcbiIsIERSSVZFUl9JTkZPKTsKKworCXJlc3VsdCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmV0MTMxeF9kcml2ZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGV0MTMxeF9jbGVhbnVwX21vZHVsZSAtIFRoZSBlbnRyeSBwb2ludCBjYWxsZWQgb24gZHJpdmVyIGNsZWFudXAKKyAqLwordm9pZCBldDEzMXhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZldDEzMXhfZHJpdmVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qCisgKiBUaGVzZSBtYWNyb3MgbWFwIHRoZSBkcml2ZXItc3BlY2lmaWMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKQorICogcm91dGluZXMgc28gdGhleSBjYW4gYmUgY2FsbGVkIGJ5IHRoZSBrZXJuZWwuCisgKi8KK21vZHVsZV9pbml0KGV0MTMxeF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChldDEzMXhfY2xlYW51cF9tb2R1bGUpOworCisKKy8qKgorICogZXQxMzF4X2ZpbmRfYWRhcHRlciAtIEZpbmQgdGhlIGFkYXB0ZXIgYW5kIGdldCBhbGwgdGhlIGFzc2lnbmVkIHJlc291cmNlcworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2ZpbmRfYWRhcHRlcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCByZXN1bHQ7CisJdWludDhfdCBlZXByb21TdGF0OworCXVpbnQ4X3QgbWF4UGF5bG9hZCA9IDA7CisJdWludDhfdCByZWFkX3NpemVfcmVnOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEFsbG93IGRpc2FibGluZyBvZiBOb24tTWFza2FibGUgSW50ZXJydXB0cyBpbiBJL08gc3BhY2UsIHRvCisJICogc3VwcG9ydCB2YWxpZGF0aW9uLgorCSAqLworCWlmIChhZGFwdGVyLT5SZWdpc3RyeU5NSURpc2FibGUpIHsKKwkJdWludDhfdCBSZWdpc3RlclZhbDsKKworCQlSZWdpc3RlclZhbCA9IGluYihFVDEzMTBfTk1JX0RJU0FCTEUpOworCQlSZWdpc3RlclZhbCAmPSAweGYzOworCisJCWlmIChhZGFwdGVyLT5SZWdpc3RyeU5NSURpc2FibGUgPT0gMikgeworCQkJUmVnaXN0ZXJWYWwgfD0gMHhjOworCQl9CisKKwkJb3V0YihFVDEzMTBfTk1JX0RJU0FCTEUsIFJlZ2lzdGVyVmFsKTsKKwl9CisKKwkvKiBXZSBmaXJzdCBuZWVkIHRvIGNoZWNrIHRoZSBFRVBST00gU3RhdHVzIGNvZGUgbG9jYXRlZCBhdCBvZmZzZXQKKwkgKiAweEIyIG9mIGNvbmZpZyBzcGFjZQorCSAqLworCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEVUMTMxMF9QQ0lfRUVQUk9NX1NUQVRVUywKKwkJCQkgICAgICAmZWVwcm9tU3RhdCk7CisKKwkvKiBUSElTIElTIEEgV09SS0FST1VORDoKKyAJICogSSBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB0d2ljZSB0byBnZXQgbXkgY2FyZCBpbiBhCisJICogTEcgTTEgRXhwcmVzcyBEdWFsIHJ1bm5pbmcuIEkgdHJpZWQgYWxzbyBhIG1zbGVlcCBiZWZvcmUgdGhpcworCSAqIGZ1bmN0aW9uLCBiZWNhdXNlIEkgdGhvdWd0aCB0aGVyZSBjb3VsZCBiZSBzb21lIHRpbWUgY29uZGlkaW9ucworCSAqIGJ1dCBpdCBkaWRuJ3Qgd29yay4gQ2FsbCB0aGUgd2hvbGUgZnVuY3Rpb24gdHdpY2UgYWxzbyB3b3JrLgorCSAqLworCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEVUMTMxMF9QQ0lfRUVQUk9NX1NUQVRVUywKKwkJCQkgICAgICAmZWVwcm9tU3RhdCk7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ291bGQgbm90IHJlYWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgIgorCQkJICAiRUVQUk9NIFN0YXR1c1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIERldGVybWluZSBpZiB0aGUgZXJyb3Iocykgd2UgY2FyZSBhYm91dCBhcmUgcHJlc2VudC4gIElmIHRoZXkgYXJlCisJICogcHJlc2VudCwgd2UgbmVlZCB0byBmYWlsLgorCSAqLworCWlmIChlZXByb21TdGF0ICYgMHg0QykgeworCQlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsCisJCQkJCSAgICAgICZhZGFwdGVyLT5SZXZpc2lvbklEKTsKKwkJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJDb3VsZCBub3QgcmVhZCBQQ0kgY29uZmlnIHNwYWNlIGZvciAiCisJCQkJICAiUmV2aXNpb24gSURcbiIpOworCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiAtRUlPOworCQl9IGVsc2UgaWYgKGFkYXB0ZXItPlJldmlzaW9uSUQgPT0gMHgwMSkgeworCQkJaW50MzJfdCBuTG9vcDsKKwkJCXVpbnQ4X3QgdWNUZW1wWzRdID0geyAweEZFLCAweDEzLCAweDEwLCAweEZGIH07CisKKwkJCS8qIFJlLXdyaXRlIHRoZSBmaXJzdCA0IGJ5dGVzIGlmIHdlIGhhdmUgYW4gZWVwcm9tCisJCQkgKiBwcmVzZW50IGFuZCB0aGUgcmV2aXNpb24gaWQgaXMgMSwgdGhpcyBmaXhlcyB0aGUKKwkJCSAqIGNvcnJ1cHRpb24gc2VlbiB3aXRoIDEzMTAgQiBTaWxpY29uCisJCQkgKi8KKwkJCWZvciAobkxvb3AgPSAwOyBuTG9vcCA8IDM7IG5Mb29wKyspIHsKKwkJCQlFZXByb21Xcml0ZUJ5dGUoYWRhcHRlciwgbkxvb3AsIHVjVGVtcFtuTG9vcF0sCisJCQkJCQkwLCBTSU5HTEVfQllURSk7CisJCQl9CisJCX0KKworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJGYXRhbCBFRVBST00gU3RhdHVzIEVycm9yIC0gMHglMDR4XG4iLCBlZXByb21TdGF0KTsKKworCQkvKiBUaGlzIGVycm9yIGNvdWxkIG1lYW4gdGhhdCB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUKKwkJICogZWVwcm9tIG9yIHRoYXQgdGhlIGVlcHJvbSBkb2Vzbid0IGV4aXN0LiAgV2Ugd2lsbCB0cmVhdAorCQkgKiBlYWNoIGNhc2UgdGhlIHNhbWUgYW5kIG5vdCB0cnkgdG8gZ2F0aGVyIGFkZGl0aW9uYWwKKwkJICogaW5mb3JtYXRpb24gdGhhdCBub3JtYWxseSB3b3VsZCBjb21lIGZyb20gdGhlIGVlcHJvbSwgbGlrZQorCQkgKiBNQUMgQWRkcmVzcworCQkgKi8KKwkJYWRhcHRlci0+YkVlcHJvbVByZXNlbnQgPSBmYWxzZTsKKworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2UgeworCQlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJFRVBST00gU3RhdHVzIENvZGUgLSAweCUwNHhcbiIsCisJCQkgIGVlcHJvbVN0YXQpOworCQlhZGFwdGVyLT5iRWVwcm9tUHJlc2VudCA9IHRydWU7CisJfQorCisJLyogUmVhZCB0aGUgRUVQUk9NIGZvciBpbmZvcm1hdGlvbiByZWdhcmRpbmcgTEVEIGJlaGF2aW9yLiBSZWZlciB0bworCSAqIEVUMTMxMF9waHkuYywgZXQxMzF4X3hjdnJfaW5pdCgpLCBmb3IgaXRzIHVzZS4KKwkgKi8KKwlFZXByb21SZWFkQnl0ZShhZGFwdGVyLCAweDcwLCAmYWRhcHRlci0+ZWVwcm9tRGF0YVswXSwgMCwgU0lOR0xFX0JZVEUpOworCUVlcHJvbVJlYWRCeXRlKGFkYXB0ZXIsIDB4NzEsICZhZGFwdGVyLT5lZXByb21EYXRhWzFdLCAwLCBTSU5HTEVfQllURSk7CisKKwlpZiAoYWRhcHRlci0+ZWVwcm9tRGF0YVswXSAhPSAweGNkKSB7CisJCWFkYXB0ZXItPmVlcHJvbURhdGFbMV0gPSAweDAwOwkvLyBEaXNhYmxlIGFsbCBvcHRpb25hbCBmZWF0dXJlcworCX0KKworCS8qIExldCdzIHNldCB1cCB0aGUgUE9SVCBMT0dJQyBSZWdpc3Rlci4gIEZpcnN0IHdlIG5lZWQgdG8ga25vdyB3aGF0CisJICogdGhlIG1heF9wYXlsb2FkX3NpemUgaXMKKwkgKi8KKwlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBFVDEzMTBfUENJX01BWF9QWUxELCAmbWF4UGF5bG9hZCk7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ291bGQgbm90IHJlYWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgIgorCQkJICAiTWF4IFBheWxvYWQgU2l6ZVxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFByb2dyYW0gdGhlIEFjay9OYWsgbGF0ZW5jeSBhbmQgcmVwbGF5IHRpbWVycyAqLworCW1heFBheWxvYWQgJj0gMHgwNzsJLy8gT25seSB0aGUgbG93ZXIgMyBiaXRzIGFyZSB2YWxpZAorCisJaWYgKG1heFBheWxvYWQgPCAyKSB7CisJCWNvbnN0IHVpbnQxNl90IEFja05ha1syXSA9IHsgMHg3NiwgMHhEMCB9OworCQljb25zdCB1aW50MTZfdCBSZXBsYXlbMl0gPSB7IDB4MUUwLCAweDJFRCB9OworCisJCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBFVDEzMTBfUENJX0FDS19OQUNLLAorCQkJCQkgICAgICAgQWNrTmFrW21heFBheWxvYWRdKTsKKwkJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJDb3VsZCBub3Qgd3JpdGUgUENJIGNvbmZpZyBzcGFjZSAiCisJCQkJICAiZm9yIEFDSy9OQUtcbiIpOworCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIEVUMTMxMF9QQ0lfUkVQTEFZLAorCQkJCQkgICAgICAgUmVwbGF5W21heFBheWxvYWRdKTsKKwkJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJDb3VsZCBub3Qgd3JpdGUgUENJIGNvbmZpZyBzcGFjZSAiCisJCQkJICAiZm9yIFJlcGxheSBUaW1lclxuIik7CisJCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwkvKiBsMHMgYW5kIGwxIGxhdGVuY3kgdGltZXJzLiAgV2UgYXJlIHVzaW5nIGRlZmF1bHQgdmFsdWVzLgorCSAqIFJlcHJlc2VudGluZyAwMDEgZm9yIEwwcyBhbmQgMDEwIGZvciBMMQorCSAqLworCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBFVDEzMTBfUENJX0wwTDFMQVRFTkNZLCAweDExKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDb3VsZCBub3Qgd3JpdGUgUENJIGNvbmZpZyBzcGFjZSBmb3IgIgorCQkJICAiTGF0ZW5jeSBUaW1lcnNcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBDaGFuZ2UgdGhlIG1heCByZWFkIHNpemUgdG8gMmsgKi8KKwlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDUxLCAmcmVhZF9zaXplX3JlZyk7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ291bGQgbm90IHJlYWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgTWF4IHJlYWQgc2l6ZVxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJlYWRfc2l6ZV9yZWcgJj0gMHg4ZjsKKwlyZWFkX3NpemVfcmVnIHw9IDB4NDA7CisKKwlyZXN1bHQgPSBwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MSwgcmVhZF9zaXplX3JlZyk7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ291bGQgbm90IHdyaXRlIFBDSSBjb25maWcgc3BhY2UgZm9yIE1heCByZWFkIHNpemVcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBQQ0kgRXhwcmVzcyBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyAweDQ4LTB4NUIgKERldmljZSBDb250cm9sKSAqLworCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIEVUMTMxMF9QQ0lfREVWX0NUUkwsCisJCQkJICAgICAgJmFkYXB0ZXItPlBjaVhEZXZDdGwpOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNvdWxkIG5vdCByZWFkIFBDSSBjb25maWcgc3BhY2UgZm9yIFBDSSBFeHByZXNzIERldiBDdGxcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBjb25maWcgc3BhY2UgaWYgYW4gZWVwcm9tIGV4aXN0cywgb3RoZXJ3aXNlCisJICogdGhlIE1BQyBhZGRyZXNzIHRoZXJlIHdpbGwgbm90IGJlIHZhbGlkCisJICovCisJaWYgKGFkYXB0ZXItPmJFZXByb21QcmVzZW50KSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKSB7CisJCQlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZSgKKwkJCQkJcGRldiwgRVQxMzEwX1BDSV9NQUNfQUREUkVTUyArIGksCisJCQkJCWFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3MgKyBpKTsKKwkJCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICJDb3VsZCBub3QgcmVhZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBNQUMgYWRkcmVzc1xuIik7CisJCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZXQxMzF4X2Vycm9yX3RpbWVyX2hhbmRsZXIKKyAqIEBkYXRhOiB0aW1lci1zcGVjaWZpYyB2YXJpYWJsZTsgaGVyZSBhIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogVGhlIHJvdXRpbmUgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHRpbWVyIGV4cGlyZXMsIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YKKyAqIHJlY3VycmluZyBlcnJvcnMuCisgKi8KK3ZvaWQgZXQxMzF4X2Vycm9yX3RpbWVyX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIgPSAoc3RydWN0IGV0MTMxeF9hZGFwdGVyICopIGRhdGE7CisJUE1fQ1NSX3QgcG1fY3NyOworCisJcG1fY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCWlmIChwbV9jc3IuYml0cy5wbV9waHlfc3dfY29tYSA9PSAwKSB7CisJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlNQUNTdGF0KSB7CisJCQlVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHBBZGFwdGVyKTsKKwkJfQorCX0gZWxzZSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJObyBpbnRlcnJ1cHRzLCBpbiBQSFkgY29tYSwgcG1fY3NyID0gMHgleFxuIiwKKwkJCSAgICBwbV9jc3IudmFsdWUpOworCX0KKworCWlmICghcEFkYXB0ZXItPkJtc3IuYml0cy5saW5rX3N0YXR1cyAmJgorCSAgICBwQWRhcHRlci0+UmVnaXN0cnlQaHlDb21hICYmCisJICAgIHBBZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCA8IDExKSB7CisJCXBBZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCsrOworCX0KKworCWlmIChwQWRhcHRlci0+UG9NZ210LlRyYW5zUGh5Q29tYU1vZGVPbkJvb3QgPT0gMTApIHsKKwkJaWYgKCFwQWRhcHRlci0+Qm1zci5iaXRzLmxpbmtfc3RhdHVzCisJCSAgICAmJiBwQWRhcHRlci0+UmVnaXN0cnlQaHlDb21hKSB7CisJCQlpZiAocG1fY3NyLmJpdHMucG1fcGh5X3N3X2NvbWEgPT0gMCkgeworCQkJCS8vIE5PVEUgLSBUaGlzIHdhcyBvcmlnaW5hbGx5IGEgJ3N5bmMgd2l0aCBpbnRlcnJ1cHQnLiBIb3cKKwkJCQkvLyAgICAgICAgdG8gZG8gdGhhdCB1bmRlciBMaW51eD8KKwkJCQlldDEzMXhfZW5hYmxlX2ludGVycnVwdHMocEFkYXB0ZXIpOworCQkJCUVuYWJsZVBoeUNvbWEocEFkYXB0ZXIpOworCQkJfQorCQl9CisJfQorCisJLyogVGhpcyBpcyBhIHBlcmlvZGljIHRpbWVyLCBzbyByZXNjaGVkdWxlICovCisJbW9kX3RpbWVyKCZwQWRhcHRlci0+RXJyb3JUaW1lciwgamlmZmllcyArCisJCSAgVFhfRVJST1JfUEVSSU9EICogSFogLyAxMDAwKTsKK30KKworLyoqCisgKiBldDEzMXhfbGlua19kZXRlY3Rpb25faGFuZGxlcgorICoKKyAqIFRpbWVyIGZ1bmN0aW9uIGZvciBsaW5rIHVwIGF0IGRyaXZlciBsb2FkIHRpbWUKKyAqLwordm9pZCBldDEzMXhfbGlua19kZXRlY3Rpb25faGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciA9IChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKikgZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCS8qIExldCBldmVyeW9uZSBrbm93IHRoYXQgd2UgaGF2ZSBydW4gKi8KKwlwQWRhcHRlci0+YkxpbmtUaW1lckFjdGl2ZSA9IGZhbHNlOworCisJaWYgKHBBZGFwdGVyLT5NZWRpYVN0YXRlID09IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCisJCXBBZGFwdGVyLT5NZWRpYVN0YXRlID0gTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1Q7CisJCU1QX0NMRUFSX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKworCQluZXRpZl9jYXJyaWVyX29mZihwQWRhcHRlci0+bmV0ZGV2KTsKKworCQlwQWRhcHRlci0+YlNldFBlbmRpbmcgPSBmYWxzZTsKKwl9Cit9CisKKy8qKgorICogZXQxMzF4X2FkYXB0ZXJfc2V0dXAgLSBTZXQgdGhlIGFkYXB0ZXIgdXAgYXMgcGVyIGNhc3NpbmkrIGRvY3VtZW50YXRpb24KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9hZGFwdGVyX3NldHVwKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogQ29uZmlndXJlIHRoZSBKQUdDb3JlICovCisJQ29uZmlnR2xvYmFsUmVncyhwQWRhcHRlcik7CisKKwlDb25maWdNQUNSZWdzMShwQWRhcHRlcik7CisJQ29uZmlnTU1DUmVncyhwQWRhcHRlcik7CisKKwlDb25maWdSeE1hY1JlZ3MocEFkYXB0ZXIpOworCUNvbmZpZ1R4TWFjUmVncyhwQWRhcHRlcik7CisKKwlDb25maWdSeERtYVJlZ3MocEFkYXB0ZXIpOworCUNvbmZpZ1R4RG1hUmVncyhwQWRhcHRlcik7CisKKwlDb25maWdNYWNTdGF0UmVncyhwQWRhcHRlcik7CisKKwkvKiBNb3ZlIHRoZSBmb2xsb3dpbmcgY29kZSB0byBUaW1lciBmdW5jdGlvbj8/ICovCisJc3RhdHVzID0gZXQxMzF4X3hjdnJfZmluZChwQWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJDb3VsZCBub3QgZmluZCB0aGUgeGN2clxuIik7CisJfQorCisJLyogUHJlcGFyZSB0aGUgVFJVRVBIWSBsaWJyYXJ5LiAqLworCUVUMTMxMF9QaHlJbml0KHBBZGFwdGVyKTsKKworCS8qIFJlc2V0IHRoZSBwaHkgbm93IHNvIGNoYW5nZXMgdGFrZSBwbGFjZSAqLworCUVUMTMxMF9QaHlSZXNldChwQWRhcHRlcik7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHR1cm4gb2ZmIDEwMDAgYmFzZSBoYWxmIGR1bHBsZXgsIHRoZSBtYWMgZG9lcyBub3QKKwkgKiBzdXBwb3J0IGl0LiBGb3IgdGhlIDEwLzEwMCBwYXJ0LCB0dXJuIG9mZiBhbGwgZ2lnIGFkdmVydGlzZW1lbnQKKwkgKi8KKwlpZiAocEFkYXB0ZXItPkRldmljZUlEICE9IEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QpIHsKKwkJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwpOworCX0gZWxzZSB7CisJCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwl9CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCWV0MTMxeF9zZXRwaHlfbm9ybWFsKHBBZGFwdGVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfc2V0dXBfaGFyZHdhcmVfcHJvcGVydGllcyAtIHNldCB1cCB0aGUgTUFDIEFkZHJlc3Mgb24gdGhlIEVUMTMxMAorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfc2V0dXBfaGFyZHdhcmVfcHJvcGVydGllcyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIElmIGhhdmUgb3VyIGRlZmF1bHQgbWFjIGZyb20gcmVnaXN0cnkgYW5kIG5vIG1hYyBhZGRyZXNzIGZyb20KKwkgKiBFRVBST00gdGhlbiB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBsYXN0IG9jdGV0IGFuZCBzZXQgaXQgb24gdGhlCisJICogZGV2aWNlCisJICovCisJaWYgKCFhZGFwdGVyLT5iT3ZlcnJpZGVBZGRyZXNzKSB7CisJCWlmIChhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzWzBdID09IDB4MDAgJiYKKwkJICAgIGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3NbMV0gPT0gMHgwMCAmJgorCQkgICAgYWRhcHRlci0+UGVybWFuZW50QWRkcmVzc1syXSA9PSAweDAwICYmCisJCSAgICBhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzWzNdID09IDB4MDAgJiYKKwkJICAgIGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3NbNF0gPT0gMHgwMCAmJgorCQkgICAgYWRhcHRlci0+UGVybWFuZW50QWRkcmVzc1s1XSA9PSAweDAwKSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byByYW5kb21seSBnZW5lcmF0ZSB0aGUgbGFzdCBvY3RldCBzbyB3ZQorCQkJICogZGVjcmVhc2Ugb3VyIGNoYW5jZXMgb2Ygc2V0dGluZyB0aGUgbWFjIGFkZHJlc3MgdG8KKwkJCSAqIHNhbWUgYXMgYW5vdGhlciBvbmUgb2Ygb3VyIGNhcmRzIGluIHRoZSBzeXN0ZW0KKwkJCSAqLworCQkJZ2V0X3JhbmRvbV9ieXRlcygmYWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV0sIDEpOworCisJCQkvKgorCQkJICogV2UgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgcmVnaXN0ZXIgd2UgYXJlCisJCQkgKiB3b3JraW5nIHdpdGggc28gd2UgbmVlZCB0byBjb3B5IHRoZSBjdXJyZW50CisJCQkgKiBhZGRyZXNzIGludG8gdGhlIHBlcm1hbmVudCBhZGRyZXNzCisJCQkgKi8KKwkJCW1lbWNweShhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzLAorCQkJICAgICAgIGFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBFVEhfQUxFTik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBkbyBub3QgaGF2ZSBhbiBvdmVycmlkZSBhZGRyZXNzLCBzbyBzZXQgdGhlCisJCQkgKiBjdXJyZW50IGFkZHJlc3MgdG8gdGhlIHBlcm1hbmVudCBhZGRyZXNzIGFuZCBhZGQKKwkJCSAqIGl0IHRvIHRoZSBkZXZpY2UKKwkJCSAqLworCQkJbWVtY3B5KGFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLAorCQkJICAgICAgIGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3MsIEVUSF9BTEVOKTsKKwkJfQorCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3NvZnRfcmVzZXQgLSBJc3N1ZSBhIHNvZnQgcmVzZXQgdG8gdGhlIGhhcmR3YXJlLCBjb21wbGV0ZSBmb3IgRVQxMzEwCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9zb2Z0X3Jlc2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogRGlzYWJsZSBNQUMgQ29yZSAqLworCXdyaXRlbCgweGMwMGYwMDAwLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjLmNmZzEudmFsdWUpOworCisJLyogU2V0IGV2ZXJ5dGhpbmcgdG8gYSByZXNldCB2YWx1ZSAqLworCXdyaXRlbCgweDdGLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnN3X3Jlc2V0LnZhbHVlKTsKKwl3cml0ZWwoMHgwMDBmMDAwMCwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYy5jZmcxLnZhbHVlKTsKKwl3cml0ZWwoMHgwMDAwMDAwMCwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYy5jZmcxLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkgLSBBbGlnbiBhbGxvY2F0ZWQgbWVtb3J5IG9uIGEgZ2l2ZW4gYm91bmRhcnkKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogQHBoeXNfYWRkcjogcG9pbnRlciB0byBQaHlzaWNhbCBhZGRyZXNzCisgKiBAb2Zmc2V0OiBwb2ludGVyIHRvIHRoZSBvZmZzZXQgdmFyaWFibGUKKyAqIEBtYXNrOiBjb3JyZWN0IG1hc2sKKyAqLwordm9pZCBldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgdWludDY0X3QgKnBoeXNfYWRkciwKKwkJCQkgICB1aW50NjRfdCAqb2Zmc2V0LCB1aW50NjRfdCBtYXNrKQoreworCXVpbnQ2NF90IG5ld19hZGRyOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCSpvZmZzZXQgPSAwOworCisJbmV3X2FkZHIgPSAqcGh5c19hZGRyICYgfm1hc2s7CisKKwlpZiAobmV3X2FkZHIgIT0gKnBoeXNfYWRkcikgeworCQkvKiBNb3ZlIHRvIG5leHQgYWxpZ25lZCBibG9jayAqLworCQluZXdfYWRkciArPSBtYXNrICsgMTsKKwkJLyogUmV0dXJuIG9mZnNldCBmb3IgYWRqdXN0aW5nIHZpcnQgYWRkciAqLworCQkqb2Zmc2V0ID0gbmV3X2FkZHIgLSAqcGh5c19hZGRyOworCQkvKiBSZXR1cm4gbmV3IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJKnBoeXNfYWRkciA9IG5ld19hZGRyOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2FsbG9jCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpLgorICoKKyAqIEFsbG9jYXRlIGFsbCB0aGUgbWVtb3J5IGJsb2NrcyBmb3Igc2VuZCwgcmVjZWl2ZSBhbmQgb3RoZXJzLgorICovCitpbnQgZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlkbyB7CisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFR4IFJpbmcgKi8KKwkJc3RhdHVzID0gZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2MoYWRhcHRlcik7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgImV0MTMxeF90eF9kbWFfbWVtb3J5X2FsbG9jIEZBSUxFRFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFJlY2VpdmUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uICovCisJCXN0YXR1cyA9IGV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jKGFkYXB0ZXIpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYyBGQUlMRURcbiIpOworCQkJZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSW5pdCByZWNlaXZlIGRhdGEgc3RydWN0dXJlcyAqLworCQlzdGF0dXMgPSBldDEzMXhfaW5pdF9yZWN2KGFkYXB0ZXIpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgImV0MTMxeF9pbml0X3JlY3YgRkFJTEVEXG4iKTsKKwkJCWV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisJCQlldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZSAtIEZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHVzZSBieSBUeCAmIFJ4CisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogRnJlZSBETUEgbWVtb3J5ICovCisJZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKwlldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfcGNpX3JlbW92ZQorICogQHBkZXY6IGEgcG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgcGNpX2RldiBzdHJ1Y3R1cmUKKyAqCisgKiBSZWdpc3RlcmVkIGluIHRoZSBwY2lfZHJpdmVyIHN0cnVjdHVyZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUKKyAqIFBDSSBzdWJzeXN0ZW0gZGV0ZWN0cyB0aGF0IGEgUENJIGRldmljZSB3aGljaCBtYXRjaGVzIHRoZSBpbmZvcm1hdGlvbgorICogY29udGFpbmVkIGluIHRoZSBwY2lfZGV2aWNlX2lkIHRhYmxlIGhhcyBiZWVuIHJlbW92ZWQuCisgKi8KK3ZvaWQgX19kZXZleGl0IGV0MTMxeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFJldHJpZXZlIHRoZSBuZXRfZGV2aWNlIHBvaW50ZXIgZnJvbSB0aGUgcGNpX2RldiBzdHJ1Y3QsIGFzIHdlbGwKKwkgKiBhcyB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdAorCSAqLworCW5ldGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBQZXJmb3JtIGRldmljZSBjbGVhbnVwICovCisJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKwlpb3VubWFwKGFkYXB0ZXItPkNTUkFkZHJlc3MpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9wY2lfc2V0dXAgLSBQZXJmb3JtIGRldmljZSBpbml0aWFsaXphdGlvbgorICogQHBkZXY6IGEgcG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgcGNpX2RldiBzdHJ1Y3R1cmUKKyAqIEBlbnQ6IHRoaXMgZGV2aWNlJ3MgZW50cnkgaW4gdGhlIHBjaV9kZXZpY2VfaWQgdGFibGUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICoKKyAqIFJlZ2lzdGVyZWQgaW4gdGhlIHBjaV9kcml2ZXIgc3RydWN0dXJlLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZQorICogUENJIHN1YnN5c3RlbSBmaW5kcyBhIG5ldyBQQ0kgZGV2aWNlIHdoaWNoIG1hdGNoZXMgdGhlIGluZm9ybWF0aW9uCisgKiBjb250YWluZWQgaW4gdGhlIHBjaV9kZXZpY2VfaWQgdGFibGUuIFRoaXMgcm91dGluZSBpcyB0aGUgZXF1aXZhbGVudCB0bworICogYSBkZXZpY2UgaW5zZXJ0aW9uIHJvdXRpbmUuCisgKi8KK2ludCBfX2RldmluaXQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCByZXN1bHQgPSAwOworCWludCBwbV9jYXA7CisJYm9vbCBwY2lfdXNpbmdfZGFjOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogRW5hYmxlIHRoZSBkZXZpY2UgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtICovCisJcmVzdWx0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgInBjaV9lbmFibGVfZGV2aWNlKCkgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUGVyZm9ybSBzb21lIGJhc2ljIFBDSSBjaGVja3MgKi8KKwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2FuJ3QgZmluZCBQQ0kgZGV2aWNlJ3MgYmFzZSBhZGRyZXNzXG4iKTsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzdWx0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNhbid0IGdldCBQQ0kgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnJfZGlzYWJsZTsKKwl9CisKKwkvKiBFbmFibGUgUENJIGJ1cyBtYXN0ZXJpbmcgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJTZXR0aW5nIFBDSSBCdXMgTWFzdGVyaW5nLi4uXG4iKTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qIFF1ZXJ5IFBDSSBmb3IgUG93ZXIgTWdtdCBDYXBhYmlsaXRpZXMKKwkgKgorCSAqIE5PVEU6IE5vdyByZWFkaW5nIFBvd2VyTWdtdCBpbiBhbm90aGVyIGxvY2F0aW9uOyBpcyB0aGlzIHN0aWxsCisJICogbmVlZGVkPworCSAqLworCXBtX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QTSk7CisJaWYgKHBtX2NhcCA9PSAwKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBmaW5kIFBvd2VyIE1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzXG4iKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBlcnJfcmVsZWFzZV9yZXM7CisJfQorCisJLyogQ2hlY2sgdGhlIERNQSBhZGRyZXNzaW5nIHN1cHBvcnQgb2YgdGhpcyBkZXZpY2UgKi8KKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkgeworCQlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICI2NC1iaXQgRE1BIGFkZHJlc3Npbmcgc3VwcG9ydGVkXG4iKTsKKwkJcGNpX3VzaW5nX2RhYyA9IHRydWU7CisKKwkJcmVzdWx0ID0KKwkJICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpOworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJVbmFibGUgdG8gb2J0YWluIDY0IGJpdCBETUEgZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIpOworCQkJZ290byBlcnJfcmVsZWFzZV9yZXM7CisJCX0KKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZVTEwpKSB7CisJCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJCSAgIjY0LWJpdCBETUEgYWRkcmVzc2luZyBOT1Qgc3VwcG9ydGVkXG4iKTsKKwkJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiMzItYml0IERNQSBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZFxuIik7CisJCXBjaV91c2luZ19kYWMgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJObyB1c2FibGUgRE1BIGFkZHJlc3NpbmcgbWV0aG9kXG4iKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBlcnJfcmVsZWFzZV9yZXM7CisJfQorCisJLyogQWxsb2NhdGUgbmV0ZGV2IGFuZCBwcml2YXRlIGFkYXB0ZXIgc3RydWN0cyAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJICAiQWxsb2NhdGUgbmV0ZGV2IGFuZCBwcml2YXRlIGFkYXB0ZXIgc3RydWN0cy4uLlxuIik7CisJbmV0ZGV2ID0gZXQxMzF4X2RldmljZV9hbGxvYygpOworCWlmIChuZXRkZXYgPT0gTlVMTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDb3VsZG4ndCBhbGxvYyBuZXRkZXYgc3RydWN0XG4iKTsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZXM7CisJfQorCisJLyogU2V0dXAgdGhlIGZ1bmRhbWVudGFsIG5ldF9kZXZpY2UgYW5kIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgZWxlbWVudHMgICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiU2V0dGluZyBmdW5kYW1lbnRhbCBuZXRfZGV2aWNlIGluZm8uLi5cbiIpOworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBkZXYtPmRldik7CisJaWYgKHBjaV91c2luZ19kYWMpIHsKKwkJLy9uZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwl9CisKKwkvKgorCSAqIE5PVEUgLSBUdXJuIHRoaXMgb24gd2hlbiB3ZSdyZSByZWFkeSB0byBkZWFsIHdpdGggU0ctRE1BCisJICoKKwkgKiBOT1RFOiBBY2NvcmRpbmcgdG8gIkxpbnV4IERldmljZSBEcml2ZXJzIiwgM3JkIGVkLCBSdWJpbmkgZXQgYWwsCisJICogaWYgY2hlY2tzdW1taW5nIGlzIG5vdCBwZXJmb3JtZWQgaW4gSFcsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIG5vdAorCSAqIHVzZSBTRy4KKwkgKiBGcm9tIHBwIDUxMC01MTE6CisJICoKKwkgKiAiTm90ZSB0aGF0IHRoZSBrZXJuZWwgZG9lcyBub3QgcGVyZm9ybSBzY2F0dGVyL2dhdGhlciBJL08gdG8geW91cgorCSAqIGRldmljZSBpZiBpdCBkb2VzIG5vdCBhbHNvIHByb3ZpZGUgc29tZSBmb3JtIG9mIGNoZWNrc3VtbWluZyBhcworCSAqIHdlbGwuIFRoZSByZWFzb24gaXMgdGhhdCwgaWYgdGhlIGtlcm5lbCBoYXMgdG8gbWFrZSBhIHBhc3Mgb3ZlciBhCisJICogZnJhZ21lbnRlZCAoIm5vbmxpbmVhciIpIHBhY2tldCB0byBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtLCBpdAorCSAqIG1pZ2h0IGFzIHdlbGwgY29weSB0aGUgZGF0YSBhbmQgY29hbGVzY2UgdGhlIHBhY2tldCBhdCB0aGUgc2FtZQorCSAqIHRpbWUuIgorCSAqCisJICogVGhpcyBoYXMgYmVlbiB2ZXJpZmllZCBieSBzZXR0aW5nIHRoZSBmbGFncyBiZWxvdyBhbmQgc3RpbGwgbm90CisJICogcmVjZWl2aW5nIGEgc2NhdHRlcmVkIGJ1ZmZlciBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBsZWF2ZSBpdAorCSAqIG9mZiB1bnRpbCBjaGVja3N1bXMgYXJlIGNhbGN1bGF0ZWQgaW4gSFcuCisJICovCisJLy9uZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJLy9uZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTk9fQ1NVTTsKKwkvL25ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworCisJLyogQWxsb2NhdGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdCBhbmQgY29weSBpbiByZWxldmFudCBpbmZvcm1hdGlvbiAqLworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPnBkZXYgPSBwZGV2OworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5WZW5kb3JJRCA9IHBkZXYtPnZlbmRvcjsKKwlhZGFwdGVyLT5EZXZpY2VJRCA9IHBkZXYtPmRldmljZTsKKworCS8qIERvIHRoZSBzYW1lIGZvciB0aGUgbmV0ZGV2IHN0cnVjdCAqLworCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOworCW5ldGRldi0+YmFzZV9hZGRyID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisKKwkvKiBJbml0aWFsaXplIHNwaW5sb2NrcyBoZXJlICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiSW5pdGlhbGl6ZSBzcGlubG9ja3MuLi5cbiIpOworCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5UQ0JTZW5kUUxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5UQ0JSZWFkeVFMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+U2VuZEhXTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlNlbmRXYWl0TG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlJjdkxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5SY3ZQZW5kTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkZickxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5QSFlMb2NrKTsKKworCS8qIFBhcnNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbnRvIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0ICovCisJZXQxMzF4X2NvbmZpZ19wYXJzZShhZGFwdGVyKTsKKworCS8qIEZpbmQgdGhlIHBoeXNpY2FsIGFkYXB0ZXIKKwkgKgorCSAqIE5PVEU6IFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIE1wRmluZEFkYXB0ZXIoKSByb3V0aW5lOyBjYW4gd2UKKwkgKiAgICAgICBsdW1wIGl0J3MgaW5pdCB3aXRoIHRoZSBkZXZpY2Ugc3BlY2lmaWMgaW5pdCBiZWxvdyBpbnRvIGEKKwkgKiAgICAgICBzaW5nbGUgaW5pdCBmdW5jdGlvbj8KKwkgKi8KKwkvL3doaWxlIChldDEzMXhfZmluZF9hZGFwdGVyKGFkYXB0ZXIsIHBkZXYpICE9IDApOworCWV0MTMxeF9maW5kX2FkYXB0ZXIoYWRhcHRlciwgcGRldik7CisKKwkvKiBNYXAgdGhlIGJ1cy1yZWxhdGl2ZSByZWdpc3RlcnMgdG8gc3lzdGVtIHZpcnR1YWwgbWVtb3J5ICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkgICJNYXBwaW5nIGJ1cy1yZWxhdGl2ZSByZWdpc3RlcnMgdG8gdmlydHVhbCBtZW1vcnkuLi5cbiIpOworCisJYWRhcHRlci0+Q1NSQWRkcmVzcyA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCQkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCWlmIChhZGFwdGVyLT5DU1JBZGRyZXNzID09IE5VTEwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzXG4iKTsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9kZXY7CisJfQorCisJLyogUGVyZm9ybSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gaGVyZSAoU2VlIGNvZGUgYmVsb3cpICovCisKKwkvKiBJZiBQaHkgQ09NQSBtb2RlIHdhcyBlbmFibGVkIHdoZW4gd2Ugd2VudCBkb3duLCBkaXNhYmxlIGl0IGhlcmUuICovCisJeworCQlQTV9DU1JfdCBHbG9iYWxQbUNTUiA9IHsgMCB9OworCisJCUdsb2JhbFBtQ1NSLmJpdHMucG1fc3lzY2xrX2dhdGUgPSAxOworCQlHbG9iYWxQbUNTUi5iaXRzLnBtX3R4Y2xrX2dhdGUgPSAxOworCQlHbG9iYWxQbUNTUi5iaXRzLnBtX3J4Y2xrX2dhdGUgPSAxOworCQl3cml0ZWwoR2xvYmFsUG1DU1IudmFsdWUsCisJCSAgICAgICAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisJfQorCisJLyogSXNzdWUgYSBnbG9iYWwgcmVzZXQgdG8gdGhlIGV0MTMxMCAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIklzc3Vpbmcgc29mdCByZXNldC4uLlxuIik7CisJZXQxMzF4X3NvZnRfcmVzZXQoYWRhcHRlcik7CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIChwYXJhbm9pZCkgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJEaXNhYmxlIGRldmljZSBpbnRlcnJ1cHRzLi4uXG4iKTsKKwlldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCisJLyogQWxsb2NhdGUgRE1BIG1lbW9yeSAqLworCXJlc3VsdCA9IGV0MTMxeF9hZGFwdGVyX21lbW9yeV9hbGxvYyhhZGFwdGVyKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ291bGQgbm90IGFsbG9jIGFkYXBhdGVyIG1lbW9yeSAoRE1BKVxuIik7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJLyogSW5pdCBzZW5kIGRhdGEgc3RydWN0dXJlcyAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIkluaXQgc2VuZCBkYXRhIHN0cnVjdHVyZXMuLi5cbiIpOworCWV0MTMxeF9pbml0X3NlbmQoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5Qb01nbXQuUG93ZXJTdGF0ZSA9IE5kaXNEZXZpY2VTdGF0ZUQwOworCisJLyogUmVnaXN0ZXIgdGhlIGludGVycnVwdAorCSAqCisJICogTk9URSAtIFRoaXMgaXMgYmVpbmcgZG9uZSBpbiB0aGUgb3BlbiByb3V0aW5lLCB3aGVyZSBtb3N0IG90aGVyCisJICogICAgICAgICBMaW51eCBkcml2ZXJzIHNldHVwIElSUSBoYW5kbGVycy4gTWFrZSBzdXJlIGRldmljZQorCSAqICAgICAgICAgaW50ZXJydXB0cyBhcmUgbm90IHR1cm5lZCBvbiBiZWZvcmUgdGhlIElSUSBpcyByZWdpc3RlcmVkISEKKwkgKgorCSAqICAgICAgICAgV2hhdCB3ZSB3aWxsIGRvIGhlcmUgaXMgc2V0dXAgdGhlIHRhc2sgc3RydWN0dXJlIGZvciB0aGUKKwkgKiAgICAgICAgIElTUidzIGRlZmVycmVkIGhhbmRsZXIKKwkgKi8KKwlJTklUX1dPUksoJmFkYXB0ZXItPnRhc2ssIGV0MTMxeF9pc3JfaGFuZGxlcik7CisKKwkvKiBEZXRlcm1pbmUgTUFDIEFkZHJlc3MsIGFuZCBjb3B5IGludG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0ICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiUmV0cmlldmUgTUFDIGFkZHJlc3MuLi5cbiIpOworCWV0MTMxeF9zZXR1cF9oYXJkd2FyZV9wcm9wZXJ0aWVzKGFkYXB0ZXIpOworCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBFVEhfQUxFTik7CisKKwkvKiBTZXR1cCBldDEzMTAgYXMgcGVyIHRoZSBkb2N1bWVudGF0aW9uICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiU2V0dXAgdGhlIGFkYXB0ZXIuLi5cbiIpOworCWV0MTMxeF9hZGFwdGVyX3NldHVwKGFkYXB0ZXIpOworCisJLyogQ3JlYXRlIGEgdGltZXIgdG8gY291bnQgZXJyb3JzIHJlY2VpdmVkIGJ5IHRoZSBOSUMgKi8KKwlpbml0X3RpbWVyKCZhZGFwdGVyLT5FcnJvclRpbWVyKTsKKworCWFkYXB0ZXItPkVycm9yVGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBUWF9FUlJPUl9QRVJJT0QgKiBIWiAvIDEwMDA7CisJYWRhcHRlci0+RXJyb3JUaW1lci5mdW5jdGlvbiA9IGV0MTMxeF9lcnJvcl90aW1lcl9oYW5kbGVyOworCWFkYXB0ZXItPkVycm9yVGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CisKKwkvKiBJbml0aWFsaXplIGxpbmsgc3RhdGUgKi8KKwlldDEzMXhfbGlua19kZXRlY3Rpb25faGFuZGxlcigodW5zaWduZWQgbG9uZylhZGFwdGVyKTsKKworCS8qIEludGlhbGl6ZSB2YXJpYWJsZSBmb3IgY291bnRpbmcgaG93IGxvbmcgd2UgZG8gbm90IGhhdmUgbGluayBzdGF0dXMgKi8KKwlhZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCA9IDA7CisKKwkvKiBXZSBjYW4gZW5hYmxlIGludGVycnVwdHMgbm93CisJICoKKwkgKiAgTk9URSAtIEJlY2F1c2UgcmVnaXN0cmF0aW9uIG9mIGludGVycnVwdCBoYW5kbGVyIGlzIGRvbmUgaW4gdGhlCisJICogICAgICAgICBkZXZpY2UncyBvcGVuKCksIGRlZmVyIGVuYWJsaW5nIGRldmljZSBpbnRlcnJ1cHRzIHRvIHRoYXQKKwkgKiAgICAgICAgIHBvaW50CisJICovCisKKwkvKiBSZWdpc3RlciB0aGUgbmV0X2RldmljZSBzdHJ1Y3Qgd2l0aCB0aGUgTGludXggbmV0d29yayBsYXllciAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIlJlZ2lzdGVyaW5nIG5ldF9kZXZpY2UuLi5cbiIpOworCWlmICgocmVzdWx0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpICE9IDApIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAicmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfbWVtX2ZyZWU7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIG5ldF9kZXZpY2Ugc3RydWN0IHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uIFNhdmUgYSBjb3B5CisJICogb2YgdGhlIFBDSSBjb25maWcgc3BhY2UgZm9yIHRoaXMgZGV2aWNlIG5vdyB0aGF0IHRoZSBkZXZpY2UgaGFzCisJICogYmVlbiBpbml0aWFsaXplZCwganVzdCBpbiBjYXNlIGl0IG5lZWRzIHRvIGJlIHF1aWNrbHkgcmVzdG9yZWQuCisJICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CisKKwlwY2lfc2F2ZV9zdGF0ZShhZGFwdGVyLT5wZGV2KTsKKworb3V0OgorCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHJlc3VsdDsKKworZXJyX21lbV9mcmVlOgorCWV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChhZGFwdGVyLT5DU1JBZGRyZXNzKTsKK2Vycl9mcmVlX2RldjoKKwlmcmVlX25ldGRldihuZXRkZXYpOworZXJyX3JlbGVhc2VfcmVzOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJZ290byBvdXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhY2I2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9pbml0cGNpLmggLSBIZWFkZXIgd2hpY2ggaW5jbHVkZXMgY29tbW9uIGRhdGEgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqICAgICAgICAgICAgICAgICAgICByZWxhdGVkIHRvIHRoZSBkcml2ZXIncyBQQ0kgKGFuZCBQQ0kgRXhwcmVzcykgaW5mb3JtYXRpb24uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfSU5JVFBDSV9IX18KKyNkZWZpbmUgX19FVDEzMVhfSU5JVFBDSV9IX18KKworLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwordm9pZCBldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgdTY0ICpwaHlzX2FkZHIsCisJCQkJICAgdTY0ICpvZmZzZXQsIHU2NCBtYXNrKTsKKworaW50IGV0MTMxeF9hZGFwdGVyX3NldHVwKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9zZXR1cF9oYXJkd2FyZV9wcm9wZXJ0aWVzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9zb2Z0X3Jlc2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfX0VUMTMxWF9JTklUUENJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGFmYWQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKQEAgLTAsMCArMSw0ODggQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2lzci5jIC0gRmlsZSB3aGljaCBjb250YWlucyB0aGUgSVNSLCBJU1IgaGFuZGxlciwgYW5kIHJlbGF0ZWQgcm91dGluZXMKKyAqICAgICAgICAgICAgICAgIGZvciBwcm9jZXNzaW5nIGludGVycnVwdHMgZnJvbSB0aGUgZGV2aWNlLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKioKKyAqIGV0MTMxeF9pc3IgLSBUaGUgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSBmb3IgdGhlIGRyaXZlci4KKyAqIEBpcnE6IHRoZSBJUlEgb24gd2hpY2ggdGhlIGludGVycnVwdCB3YXMgcmVjZWl2ZWQuCisgKiBAZGV2X2lkOiBkZXZpY2Utc3BlY2lmaWMgaW5mbyAoaGVyZSBhIHBvaW50ZXIgdG8gYSBuZXRfZGV2aWNlIHN0cnVjdCkKKyAqCisgKiBSZXR1cm5zIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgaW50ZXJydXB0IHdhcyBoYW5kbGVkLgorICovCitpcnFyZXR1cm5fdCBldDEzMXhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlib29sIGhhbmRsZWQgPSB0cnVlOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlJTlRFUlJVUFRfdCBzdGF0dXM7CisKKwlpZiAobmV0ZGV2ID09IE5VTEwgfHwgIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIk5vIG5ldF9kZXZpY2Ugc3RydWN0IG9yIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCWhhbmRsZWQgPSBmYWxzZTsKKwkJZ290byBvdXQ7CisJfQorCisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBJZiB0aGUgYWRhcHRlciBpcyBpbiBsb3cgcG93ZXIgc3RhdGUsIHRoZW4gaXQgc2hvdWxkIG5vdAorCSAqIHJlY29nbml6ZSBhbnkgaW50ZXJydXB0CisJICovCisKKwkvKiBEaXNhYmxlIERldmljZSBJbnRlcnJ1cHRzICovCisJZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKworCS8qIEdldCBhIGNvcHkgb2YgdGhlIHZhbHVlIGluIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCisJICogc28gd2UgY2FuIHByb2Nlc3MgdGhlIGludGVycnVwdGluZyBzZWN0aW9uCisJICovCisJc3RhdHVzLnZhbHVlID0gcmVhZGwoJmFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5pbnRfc3RhdHVzLnZhbHVlKTsKKworCWlmIChhZGFwdGVyLT5GbG93Q29udHJvbCA9PSBUeE9ubHkgfHwKKwkgICAgYWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gQm90aCkgeworCQlzdGF0dXMudmFsdWUgJj0gfklOVF9NQVNLX0VOQUJMRTsKKwl9IGVsc2UgeworCQlzdGF0dXMudmFsdWUgJj0gfklOVF9NQVNLX0VOQUJMRV9OT19GTE9XOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGlzIGlzIG91ciBpbnRlcnJ1cHQgKi8KKwlpZiAoIXN0YXR1cy52YWx1ZSkgeworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwkJYWRhcHRlci0+U3RhdHMuVW5oYW5kbGVkSW50ZXJydXB0c1BlclNlYysrOworI2VuZGlmCisJCWhhbmRsZWQgPSBmYWxzZTsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJOT1QgT1VSIElOVEVSUlVQVFxuIik7CisJCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGhpcyBpcyBvdXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFjY29yZGluZ2x5ICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCWlmIChzdGF0dXMuYml0cy5yeGRtYV94ZnJfZG9uZSkgeworCQlhZGFwdGVyLT5TdGF0cy5SeERtYUludGVycnVwdHNQZXJTZWMrKzsKKwl9CisKKwlpZiAoc3RhdHVzLmJpdHMudHhkbWFfaXNyKSB7CisJCWFkYXB0ZXItPlN0YXRzLlR4RG1hSW50ZXJydXB0c1BlclNlYysrOworCX0KKyNlbmRpZgorCisJaWYgKHN0YXR1cy5iaXRzLndhdGNoZG9nX2ludGVycnVwdCkgeworCQlQTVBfVENCIHBNcFRjYiA9IGFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisKKwkJaWYgKHBNcFRjYikgeworCQkJaWYgKCsrcE1wVGNiLT5QYWNrZXRTdGFsZUNvdW50ID4gMSkgeworCQkJCXN0YXR1cy5iaXRzLnR4ZG1hX2lzciA9IDE7CisJCQl9CisJCX0KKworCQlpZiAoYWRhcHRlci0+UnhSaW5nLlVuZmluaXNoZWRSZWNlaXZlcykgeworCQkJc3RhdHVzLmJpdHMucnhkbWFfeGZyX2RvbmUgPSAxOworCQl9IGVsc2UgaWYgKHBNcFRjYiA9PSBOVUxMKSB7CisJCQl3cml0ZWwoMCwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC53YXRjaGRvZ190aW1lcik7CisJCX0KKworCQlzdGF0dXMuYml0cy53YXRjaGRvZ19pbnRlcnJ1cHQgPSAwOworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwkJYWRhcHRlci0+U3RhdHMuV2F0Y2hEb2dJbnRlcnJ1cHRzUGVyU2VjKys7CisjZW5kaWYKKwl9CisKKwlpZiAoc3RhdHVzLnZhbHVlID09IDApIHsKKwkJLyogVGhpcyBpbnRlcnJ1cHQgaGFzIGluIHNvbWUgd2F5IGJlZW4gImhhbmRsZWQiIGJ5CisJCSAqIHRoZSBJU1IuIEVpdGhlciBpdCB3YXMgYSBzcHVyaW91cyBSeCBpbnRlcnJ1cHQsIG9yCisJCSAqIGl0IHdhcyBhIFR4IGludGVycnVwdCB0aGF0IGhhcyBiZWVuIGZpbHRlcmVkIGJ5CisJCSAqIHRoZSBJU1IuCisJCSAqLworCQlldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFdlIG5lZWQgdG8gc2F2ZSB0aGUgaW50ZXJydXB0IHN0YXR1cyB2YWx1ZSBmb3IgdXNlIGluIG91cgorCSAqIERQQy4gV2Ugd2lsbCBjbGVhciB0aGUgc29mdHdhcmUgY29weSBvZiB0aGF0IGluIHRoYXQKKwkgKiByb3V0aW5lLgorCSAqLworCWFkYXB0ZXItPlN0YXRzLkludGVycnVwdFN0YXR1cyA9IHN0YXR1czsKKworCS8qIFNjaGVkdWxlIHRoZSBJU1IgaGFuZGxlciBhcyBhIGJvdHRvbS1oYWxmIHRhc2sgaW4gdGhlCisJICoga2VybmVsJ3MgdHFfaW1tZWRpYXRlIHF1ZXVlLCBhbmQgbWFyayB0aGUgcXVldWUgZm9yCisJICogZXhlY3V0aW9uCisJICovCisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dGFzayk7CisKK291dDoKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworLyoqCisgKiBldDEzMXhfaXNyX2hhbmRsZXIgLSBUaGUgSVNSIGhhbmRsZXIKKyAqIEBwX2FkYXB0ZXIsIGEgcG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIHNjaGVkdWxlZCB0byBydW4gaW4gYSBkZWZlcnJlZCBjb250ZXh0IGJ5IHRoZSBJU1IuIFRoaXMgaXMgd2hlcmUgdGhlIElTUidzCisgKiB3b3JrIGFjdHVhbGx5IGdldHMgZG9uZS4KKyAqLwordm9pZCBldDEzMXhfaXNyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGV0MTMxeF9hZGFwdGVyLCB0YXNrKTsKKwlJTlRFUlJVUFRfdCBHbG9iU3RhdHVzID0gcEFkYXB0ZXItPlN0YXRzLkludGVycnVwdFN0YXR1czsKKwlBRERSRVNTX01BUF90IF9faW9tZW0gKmlvbWVtID0gcEFkYXB0ZXItPkNTUkFkZHJlc3M7CisKKwkvKgorCSAqIFRoZXNlIGZpcnN0IHR3byBhcmUgYnkgZmFyIHRoZSBtb3N0IGNvbW1vbi4gIE9uY2UgaGFuZGxlZCwgd2UgY2xlYXIKKwkgKiB0aGVpciB0d28gYml0cyBpbiB0aGUgc3RhdHVzIHdvcmQuICBJZiB0aGUgd29yZCBpcyBub3cgemVybywgd2UKKwkgKiBleGl0LgorCSAqLworCS8qIEhhbmRsZSBhbGwgdGhlIGNvbXBsZXRlZCBUcmFuc21pdCBpbnRlcnJ1cHRzICovCisJaWYgKEdsb2JTdGF0dXMuYml0cy50eGRtYV9pc3IpIHsKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiVFhETUFfSVNSIGludGVycnVwdFxuIik7CisJCWV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQocEFkYXB0ZXIpOworCX0KKworCS8qIEhhbmRsZSBhbGwgdGhlIGNvbXBsZXRlZCBSZWNlaXZlcyBpbnRlcnJ1cHRzICovCisJaWYgKEdsb2JTdGF0dXMuYml0cy5yeGRtYV94ZnJfZG9uZSkgeworCQlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJSWERNQV9YRlJfRE9ORSBpbnRlcnJ1cHRcbiIpOworCQlldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0KHBBZGFwdGVyKTsKKwl9CisKKwlHbG9iU3RhdHVzLnZhbHVlICY9IDB4ZmZmZmZmZDc7CisKKwlpZiAoR2xvYlN0YXR1cy52YWx1ZSkgeworCQkvKiBIYW5kbGUgdGhlIFRYRE1BIEVycm9yIGludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnR4ZG1hX2VycikgeworCQkJVFhETUFfRVJST1JfdCBUeERtYUVycjsKKworCQkJLyogRm9sbG93aW5nIHJlYWQgYWxzbyBjbGVhcnMgdGhlIHJlZ2lzdGVyIChDT1IpICovCisJCQlUeERtYUVyci52YWx1ZSA9IHJlYWRsKCZpb21lbS0+dHhkbWEuVHhEbWFFcnJvci52YWx1ZSk7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiVFhETUFfRVJSIGludGVycnVwdCwgZXJyb3IgPSAlZFxuIiwKKwkJCQkgICAgVHhEbWFFcnIudmFsdWUpOworCQl9CisKKwkJLyogSGFuZGxlIEZyZWUgQnVmZmVyIFJpbmcgMCBhbmQgMSBMb3cgaW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMucnhkbWFfZmJfcmluZzBfbG93IHx8CisJCSAgICBHbG9iU3RhdHVzLmJpdHMucnhkbWFfZmJfcmluZzFfbG93KSB7CisJCQkvKgorCQkJICogVGhpcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiB1bnVzZWQgYnVmZmVycyBpbgorCQkJICogUlhETUEgZnJlZSBidWZmZXIgcmluZyAwIGlzIDw9IHRoZSBsaW1pdCB5b3UKKwkJCSAqIHByb2dyYW1tZWQuIEZyZWUgYnVmZmVyIHJlc291cmNlcyBuZWVkIHRvIGJlCisJCQkgKiByZXR1cm5lZC4gIEZyZWUgYnVmZmVycyBhcmUgY29uc3VtZWQgYXMgcGFja2V0cworCQkJICogYXJlIHBhc3NlZCBmcm9tIHRoZSBuZXR3b3JrIHRvIHRoZSBob3N0LiBUaGUgaG9zdAorCQkJICogYmVjb21lcyBhd2FyZSBvZiB0aGUgcGFja2V0cyBmcm9tIHRoZSBjb250ZW50cyBvZgorCQkJICogdGhlIHBhY2tldCBzdGF0dXMgcmluZy4gVGhpcyByaW5nIGlzIHF1ZXJpZWQgd2hlbgorCQkJICogdGhlIHBhY2tldCBkb25lIGludGVycnVwdCBvY2N1cnMuIFBhY2tldHMgYXJlIHRoZW4KKwkJCSAqIHBhc3NlZCB0byB0aGUgT1MuIFdoZW4gdGhlIE9TIGlzIGRvbmUgd2l0aCB0aGUKKwkJCSAqIHBhY2tldHMgdGhlIHJlc291cmNlcyBjYW4gYmUgcmV0dXJuZWQgdG8gdGhlCisJCQkgKiBFVDEzMTAgZm9yIHJlLXVzZS4gVGhpcyBpbnRlcnJ1cHQgaXMgb25lIG1ldGhvZCBvZgorCQkJICogcmV0dXJuaW5nIHJlc291cmNlcy4KKwkJCSAqLworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJSWERNQV9GQl9SSU5HMF9MT1cgb3IgIgorCQkJCSAgICAiUlhETUFfRkJfUklORzFfTE9XIGludGVycnVwdFxuIik7CisKKwkJCS8qIElmIHRoZSB1c2VyIGhhcyBmbG93IGNvbnRyb2wgb24sIHRoZW4gd2Ugd2lsbAorCQkJICogc2VuZCBhIHBhdXNlIHBhY2tldCwgb3RoZXJ3aXNlIGp1c3QgZXhpdAorCQkJICovCisJCQlpZiAocEFkYXB0ZXItPkZsb3dDb250cm9sID09IFR4T25seSB8fAorCQkJICAgIHBBZGFwdGVyLT5GbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQkJUE1fQ1NSX3QgcG1fY3NyOworCisJCQkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHNlbmQgYSBwYXVzZSBwYWNrZXQgdmlhCisJCQkJICogdGhlIGJhY2sgcHJlc3N1cmUgcmVnaXN0ZXIKKwkJCQkgKi8KKwkJCQlwbV9jc3IudmFsdWUgPSByZWFkbCgmaW9tZW0tPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCQkJCWlmIChwbV9jc3IuYml0cy5wbV9waHlfc3dfY29tYSA9PSAwKSB7CisJCQkJCVRYTUFDX0JQX0NUUkxfdCBicF9jdHJsID0geyAwIH07CisKKwkJCQkJYnBfY3RybC5iaXRzLmJwX3JlcSA9IDE7CisJCQkJCWJwX2N0cmwuYml0cy5icF94b254b2ZmID0gMTsKKwkJCQkJd3JpdGVsKGJwX2N0cmwudmFsdWUsCisJCQkJCSAgICAgICAmaW9tZW0tPnR4bWFjLmJwX2N0cmwudmFsdWUpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIEhhbmRsZSBQYWNrZXQgU3RhdHVzIFJpbmcgTG93IEludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnJ4ZG1hX3BrdF9zdGF0X3JpbmdfbG93KSB7CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlJYRE1BX1BLVF9TVEFUX1JJTkdfTE9XIGludGVycnVwdFxuIik7CisKKwkJCS8qCisJCQkgKiBTYW1lIGlkZWEgYXMgd2l0aCB0aGUgdHdvIEZyZWUgQnVmZmVyIFJpbmdzLgorCQkJICogUGFja2V0cyBnb2luZyBmcm9tIHRoZSBuZXR3b3JrIHRvIHRoZSBob3N0IGVhY2gKKwkJCSAqIGNvbnN1bWUgYSBmcmVlIGJ1ZmZlciByZXNvdXJjZSBhbmQgYSBwYWNrZXQgc3RhdHVzCisJCQkgKiByZXNvdXJjZS4gIFRoZXNlIHJlc291cmVzIGFyZSBwYXNzZWQgdG8gdGhlIE9TLgorCQkJICogV2hlbiB0aGUgT1MgaXMgZG9uZSB3aXRoIHRoZSByZXNvdXJjZXMsIHRoZXkgbmVlZAorCQkJICogdG8gYmUgcmV0dXJuZWQgdG8gdGhlIEVUMTMxMC4gVGhpcyBpcyBvbmUgbWV0aG9kCisJCQkgKiBvZiByZXR1cm5pbmcgdGhlIHJlc291cmNlcy4KKwkJCSAqLworCQl9CisKKwkJLyogSGFuZGxlIFJYRE1BIEVycm9yIEludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnJ4ZG1hX2VycikgeworCQkJLyoKKwkJCSAqIFRoZSByeGRtYV9lcnJvciBpbnRlcnJ1cHQgaXMgc2VudCB3aGVuIGEgdGltZS1vdXQKKwkJCSAqIG9uIGEgcmVxdWVzdCBpc3N1ZWQgYnkgdGhlIEpBR0NvcmUgaGFzIG9jY3VycmVkIG9yCisJCQkgKiBhIGNvbXBsZXRpb24gaXMgcmV0dXJuZWQgd2l0aCBhbiB1bi1zdWNjZXNzZnVsCisJCQkgKiBzdGF0dXMuICBJbiBib3RoIGNhc2VzIHRoZSByZXF1ZXN0IGlzIGNvbnNpZGVyZWQKKwkJCSAqIGNvbXBsZXRlLiBUaGUgSkFHQ29yZSB3aWxsIGF1dG9tYXRpY2FsbHkgcmUtdHJ5IHRoZQorCQkJICogcmVxdWVzdCBpbiBxdWVzdGlvbi4gTm9ybWFsbHkgaW5mb3JtYXRpb24gb24gZXZlbnRzCisJCQkgKiBsaWtlIHRoZXNlIGFyZSBzZW50IHRvIHRoZSBob3N0IHVzaW5nIHRoZSAiQWR2YW5jZWQKKwkJCSAqIEVycm9yIFJlcG9ydGluZyIgY2FwYWJpbGl0eS4gVGhpcyBpbnRlcnJ1cHQgaXMKKwkJCSAqIGFub3RoZXIgd2F5IG9mIGdldHRpbmcgc2ltaWxhciBpbmZvcm1hdGlvbi4gVGhlCisJCQkgKiBvbmx5IHRoaW5nIHJlcXVpcmVkIGlzIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgYnkKKwkJCSAqIHJlYWRpbmcgdGhlIElTUiBpbiB0aGUgZ2xvYmFsIHJlc291cmNlcy4gVGhlCisJCQkgKiBKQUdDb3JlIHdpbGwgZG8gYSByZS10cnkgb24gdGhlIHJlcXVlc3QuICBOb3JtYWxseQorCQkJICogeW91IHNob3VsZCBuZXZlciBzZWUgdGhpcyBpbnRlcnJ1cHQuIElmIHlvdSBzdGFydAorCQkJICogdG8gc2VlIHRoaXMgaW50ZXJydXB0IG9jY3VycmluZyBmcmVxdWVudGx5IHRoZW4KKwkJCSAqIHNvbWV0aGluZyBiYWQgaGFzIG9jY3VycmVkLiBBIHJlc2V0IG1pZ2h0IGJlIHRoZQorCQkJICogdGhpbmcgdG8gZG8uCisJCQkgKi8KKwkJCS8vIFRSQVAoKTsKKworCQkJcEFkYXB0ZXItPlR4TWFjVGVzdC52YWx1ZSA9CisJCQkJcmVhZGwoJmlvbWVtLT50eG1hYy50eF90ZXN0LnZhbHVlKTsKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiUnhETUFfRVJSIGludGVycnVwdCwgZXJyb3IgJXhcbiIsCisJCQkJICAgIHBBZGFwdGVyLT5UeE1hY1Rlc3QudmFsdWUpOworCQl9CisKKwkJLyogSGFuZGxlIHRoZSBXYWtlIG9uIExBTiBFdmVudCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLndha2Vfb25fbGFuKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBhIHNlY29uZGFyeSBpbnRlcnJ1cHQgZm9yIHdha2Ugb24gTEFOLgorCQkJICogVGhlIGRyaXZlciBzaG91bGQgbmV2ZXIgc2VlIHRoaXMsIGlmIGl0IGRvZXMsCisJCQkgKiBzb21ldGhpbmcgc2VyaW91cyBpcyB3cm9uZy4gV2Ugd2lsbCBUUkFQIHRoZQorCQkJICogbWVzc2FnZSB3aGVuIHdlIGFyZSBpbiBEQkcgbW9kZSwgb3RoZXJ3aXNlIHdlCisJCQkgKiB3aWxsIGlnbm9yZSBpdC4KKwkJCSAqLworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiV0FLRV9PTl9MQU4gaW50ZXJydXB0XG4iKTsKKwkJfQorCisJCS8qIEhhbmRsZSB0aGUgUEhZIGludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnBoeV9pbnRlcnJ1cHQpIHsKKwkJCVBNX0NTUl90IHBtX2NzcjsKKwkJCU1JX0JNU1JfdCBCbXNySW50cywgQm1zckRhdGE7CisJCQlNSV9JU1JfdCBteUlzcjsKKworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJQSFkgaW50ZXJydXB0XG4iKTsKKworCQkJLyogSWYgd2UgYXJlIGluIGNvbWEgbW9kZSB3aGVuIHdlIGdldCB0aGlzIGludGVycnVwdCwKKwkJCSAqIHdlIG5lZWQgdG8gZGlzYWJsZSBpdC4KKwkJCSAqLworCQkJcG1fY3NyLnZhbHVlID0gcmVhZGwoJmlvbWVtLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKwkJCWlmIChwbV9jc3IuYml0cy5wbV9waHlfc3dfY29tYSA9PSAxKSB7CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIGNvbWEgbW9kZSBhbmQgaWYKKwkJCQkgKiBzbywgZGlzYWJsZSBpdCBiZWNhdXNlIHdlIHdpbGwgbm90IGJlIGFibGUKKwkJCQkgKiB0byByZWFkIFBIWSB2YWx1ZXMgdW50aWwgd2UgYXJlIG91dC4KKwkJCQkgKi8KKwkJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICJEZXZpY2UgaXMgaW4gQ09NQSBtb2RlLCAiCisJCQkJCSAgICAibmVlZCB0byB3YWtlIHVwXG4iKTsKKwkJCQlEaXNhYmxlUGh5Q29tYShwQWRhcHRlcik7CisJCQl9CisKKwkJCS8qIFJlYWQgdGhlIFBIWSBJU1IgdG8gY2xlYXIgdGhlIHJlYXNvbiBmb3IgdGhlCisJCQkgKiBpbnRlcnJ1cHQuCisJCQkgKi8KKwkJCU1pUmVhZChwQWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgaXNyKSwKKwkJCSAgICAgICAmbXlJc3IudmFsdWUpOworCisJCQlpZiAoIXBBZGFwdGVyLT5SZXBsaWNhUGh5TG9vcGJrKSB7CisJCQkJTWlSZWFkKHBBZGFwdGVyLAorCQkJCSAgICAgICAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBibXNyKSwKKwkJCQkgICAgICAgJkJtc3JEYXRhLnZhbHVlKTsKKworCQkJCUJtc3JJbnRzLnZhbHVlID0KKwkJCQkgICAgcEFkYXB0ZXItPkJtc3IudmFsdWUgXiBCbXNyRGF0YS52YWx1ZTsKKwkJCQlwQWRhcHRlci0+Qm1zci52YWx1ZSA9IEJtc3JEYXRhLnZhbHVlOworCisJCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAiQm1zci52YWx1ZSA9IDB4JTA0eCwiCisJCQkJCSAgICAiQm1zcl9pbnRzLnZhbHVlID0gMHglMDR4XG4iLAorCQkJCQkgICAgQm1zckRhdGEudmFsdWUsIEJtc3JJbnRzLnZhbHVlKTsKKworCQkJCS8qIERvIGFsbCB0aGUgY2FibGUgaW4gLyBjYWJsZSBvdXQgc3R1ZmYgKi8KKwkJCQlldDEzMXhfTWlpX2NoZWNrKHBBZGFwdGVyLCBCbXNyRGF0YSwgQm1zckludHMpOworCQkJfQorCQl9CisKKwkJLyogTGV0J3MgbW92ZSBvbiB0byB0aGUgVHhNYWMgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy50eG1hY19pbnRlcnJ1cHQpIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcuVHhNYWNFcnIudmFsdWUgPQorCQkJCXJlYWRsKCZpb21lbS0+dHhtYWMuZXJyLnZhbHVlKTsKKworCQkJLyoKKwkJCSAqIFdoZW4gYW55IG9mIHRoZSBlcnJvcnMgb2NjdXIgYW5kIFRYTUFDIGdlbmVyYXRlcworCQkJICogYW4gaW50ZXJydXB0IHRvIHJlcG9ydCB0aGVzZSBlcnJvcnMsIGl0IHVzdWFsbHkKKwkJCSAqIG1lYW5zIHRoYXQgVFhNQUMgaGFzIGRldGVjdGVkIGFuIGVycm9yIGluIHRoZSBkYXRhCisJCQkgKiBzdHJlYW0gcmV0cmlldmVkIGZyb20gdGhlIG9uLWNoaXAgVHggUS4gQWxsIG9mCisJCQkgKiB0aGVzZSBlcnJvcnMgYXJlIGNhdGFzdHJvcGhpYyBhbmQgVFhNQUMgd29uJ3QgYmUKKwkJCSAqIGFibGUgdG8gcmVjb3ZlciBkYXRhIHdoZW4gdGhlc2UgZXJyb3JzIG9jY3VyLiAgSW4KKwkJCSAqIGEgbnV0c2hlbGwsIHRoZSB3aG9sZSBUeCBwYXRoIHdpbGwgaGF2ZSB0byBiZSByZXNldAorCQkJICogYW5kIHJlLWNvbmZpZ3VyZWQgYWZ0ZXJ3YXJkcy4KKwkJCSAqLworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJUWE1BQyBpbnRlcnJ1cHQsIGVycm9yIDB4JTA4eFxuIiwKKwkJCQkgICAgcEFkYXB0ZXItPlR4UmluZy5UeE1hY0Vyci52YWx1ZSk7CisKKwkJCS8qIElmIHdlIGFyZSBkZWJ1Z2dpbmcsIHdlIHdhbnQgdG8gc2VlIHRoaXMgZXJyb3IsCisJCQkgKiBvdGhlcndpc2Ugd2UganVzdCB3YW50IHRoZSBkZXZpY2UgdG8gYmUgcmVzZXQgYW5kCisJCQkgKiBjb250aW51ZQorCQkJICovCisJCQkvL0RCR19UUkFQKCk7CisJCX0KKworCQkvKiBIYW5kbGUgUlhNQUMgSW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMucnhtYWNfaW50ZXJydXB0KSB7CisJCQkvKgorCQkJICogVGhlc2UgaW50ZXJydXB0cyBhcmUgY2F0YXN0cm9waGljIHRvIHRoZSBkZXZpY2UsCisJCQkgKiB3aGF0IHdlIG5lZWQgdG8gZG8gaXMgZGlzYWJsZSB0aGUgaW50ZXJydXB0cyBhbmQKKwkJCSAqIHNldCB0aGUgZmxhZyB0byBjYXVzZSB1cyB0byByZXNldCBzbyB3ZSBjYW4gc29sdmUKKwkJCSAqIHRoaXMgaXNzdWUuCisJCQkgKi8KKwkJCS8vIE1QX1NFVF9GTEFHKCBwQWRhcHRlciwgZk1QX0FEQVBURVJfSEFSRFdBUkVfRVJST1IgKTsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJSWE1BQyBpbnRlcnJ1cHQsIGVycm9yIDB4JTA4eC4gIFJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgIHJlYWRsKCZpb21lbS0+cnhtYWMuZXJyX3JlZy52YWx1ZSkpOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkVuYWJsZSAweCUwOHgsIERpYWcgMHglMDh4XG4iLAorCQkJCSAgICByZWFkbCgmaW9tZW0tPnJ4bWFjLmN0cmwudmFsdWUpLAorCQkJCSAgICByZWFkbCgmaW9tZW0tPnJ4bWFjLnJ4cV9kaWFnLnZhbHVlKSk7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgZGVidWdnaW5nLCB3ZSB3YW50IHRvIHNlZSB0aGlzIGVycm9yLAorCQkJICogb3RoZXJ3aXNlIHdlIGp1c3Qgd2FudCB0aGUgZGV2aWNlIHRvIGJlIHJlc2V0IGFuZAorCQkJICogY29udGludWUKKwkJCSAqLworCQkJLy8gVFJBUCgpOworCQl9CisKKwkJLyogSGFuZGxlIE1BQ19TVEFUIEludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLm1hY19zdGF0X2ludGVycnVwdCkgeworCQkJLyoKKwkJCSAqIFRoaXMgbWVhbnMgYXQgbGVhc3Qgb25lIG9mIHRoZSB1bi1tYXNrZWQgY291bnRlcnMKKwkJCSAqIGluIHRoZSBNQUNfU1RBVCBibG9jayBoYXMgcm9sbGVkIG92ZXIuICBVc2UgdGhpcworCQkJICogdG8gbWFpbnRhaW4gdGhlIHRvcCwgc29mdHdhcmUgbWFuYWdlZCBiaXRzIG9mIHRoZQorCQkJICogY291bnRlcihzKS4KKwkJCSAqLworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJNQUNfU1RBVCBpbnRlcnJ1cHRcbiIpOworCQkJSGFuZGxlTWFjU3RhdEludGVycnVwdChwQWRhcHRlcik7CisJCX0KKworCQkvKiBIYW5kbGUgU0xWIFRpbWVvdXQgSW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMuc2x2X3RpbWVvdXQpIHsKKwkJCS8qCisJCQkgKiBUaGlzIG1lYW5zIGEgdGltZW91dCBoYXMgb2NjdXJlZCBvbiBhIHJlYWQgb3IKKwkJCSAqIHdyaXRlIHJlcXVlc3QgdG8gb25lIG9mIHRoZSBKQUdDb3JlIHJlZ2lzdGVycy4gVGhlCisJCQkgKiBHbG9iYWwgUmVzb3VyY2VzIGJsb2NrIGhhcyB0ZXJtaW5hdGVkIHRoZSByZXF1ZXN0CisJCQkgKiBhbmQgb24gYSByZWFkIHJlcXVlc3QsIHJldHVybmVkIGEgImZha2UiIHZhbHVlLgorCQkJICogVGhlIG1vc3QgbGlrZWx5IHJlYXNvbnMgYXJlOiBCYWQgQWRkcmVzcyBvciB0aGUKKwkJCSAqIGFkZHJlc3NlZCBtb2R1bGUgaXMgaW4gYSBwb3dlci1kb3duIHN0YXRlIGFuZAorCQkJICogY2FuJ3QgcmVzcG9uZC4KKwkJCSAqLworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJTTFZfVElNRU9VVCBpbnRlcnJ1cHRcbiIpOworCQl9CisJfQorCisJaWYgKHBBZGFwdGVyLT5Qb01nbXQuUG93ZXJTdGF0ZSA9PSBOZGlzRGV2aWNlU3RhdGVEMCkgeworCQlldDEzMXhfZW5hYmxlX2ludGVycnVwdHMocEFkYXB0ZXIpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhNTFkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2lzci5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byB0aGUKKyAqICAgICAgICAgICAgICAgIElTUiBwcm9jZXNzaW5nIGNvZGUuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfSVNSX0hfXworI2RlZmluZSBfX0VUMTMxWF9JU1JfSF9fCisKK2lycXJldHVybl90IGV0MTMxeF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3ZvaWQgZXQxMzF4X2lzcl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKyNlbmRpZiAvKiBfX0VUMTMxWF9JU1JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjU5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuYwpAQCAtMCwwICsxLDg1NiBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfbmV0ZGV2LmMgLSBSb3V0aW5lcyBhbmQgZGF0YSByZXF1aXJlZCBieSBhbGwgTGludXggbmV0d29yayBkZXZpY2VzLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorI2luY2x1ZGUgImV0MTMxMF90eC5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaXNyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXQxMzF4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworaW50IGV0MTMxeF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworaW50IGV0MTMxeF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2ludCBldDEzMXhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpyZXFidWYsIGludCBjbWQpOwordm9pZCBldDEzMXhfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworaW50IGV0MTMxeF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3ZvaWQgZXQxMzF4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgZXQxMzF4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOworaW50IGV0MTMxeF9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqbmV3X21hYyk7Cit2b2lkIGV0MTMxeF92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApOwordm9pZCBldDEzMXhfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCk7Cit2b2lkIGV0MTMxeF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCk7CisKKy8qKgorICogZXQxMzF4X2RldmljZV9hbGxvYworICoKKyAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBuZXRfZGV2aWNlIHN0cnVjdCBmb3IKKyAqIHRoaXMgZGV2aWNlLgorICoKKyAqIENyZWF0ZSBpbnN0YW5jZXMgb2YgbmV0X2RldmljZSBhbmQgd2xfcHJpdmF0ZSBmb3IgdGhlIG5ldyBhZGFwdGVyIGFuZAorICogcmVnaXN0ZXIgdGhlIGRldmljZSdzIGVudHJ5IHBvaW50cyBpbiB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBuZXRfZGV2aWNlICpldDEzMXhfZGV2aWNlX2FsbG9jKHZvaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBBbGxvYyBuZXRfZGV2aWNlIGFuZCBhZGFwdGVyIHN0cnVjdHMgKi8KKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyKSk7CisKKwlpZiAobmV0ZGV2ID09IE5VTEwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQWxsb2Mgb2YgbmV0X2RldmljZSBzdHJ1Y3QgZmFpbGVkXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogU2V0dXAgdGhlIGZ1bmN0aW9uIHJlZ2lzdHJhdGlvbiB0YWJsZSAoYW5kIG90aGVyIGRhdGEpIGZvciBhCisJICogbmV0X2RldmljZQorCSAqLworCS8vbmV0ZGV2LT5pbml0ICAgICAgICAgICAgICAgPSAmZXQxMzF4X2luaXQ7CisJLy9uZXRkZXYtPnNldF9jb25maWcgPSAmZXQxMzF4X2NvbmZpZzsKKwluZXRkZXYtPmdldF9zdGF0cyA9ICZldDEzMXhfc3RhdHM7CisJbmV0ZGV2LT5vcGVuID0gJmV0MTMxeF9vcGVuOworCW5ldGRldi0+c3RvcCA9ICZldDEzMXhfY2xvc2U7CisJbmV0ZGV2LT5kb19pb2N0bCA9ICZldDEzMXhfaW9jdGw7CisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZXQxMzF4X211bHRpY2FzdDsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZldDEzMXhfdHg7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0gJmV0MTMxeF90eF90aW1lb3V0OworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVDEzMVhfVFhfVElNRU9VVDsKKwluZXRkZXYtPmNoYW5nZV9tdHUgPSAmZXQxMzF4X2NoYW5nZV9tdHU7CisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmZXQxMzF4X3NldF9tYWNfYWRkcjsKKworCS8vbmV0ZGV2LT5ldGh0b29sX29wcyAgICAgICAgPSAmZXQxMzF4X2V0aHRvb2xfb3BzOworCisJLy8gUG9sbD8KKwkvL25ldGRldi0+cG9sbCAgICAgICAgICAgICAgID0gJmV0MTMxeF9wb2xsOworCS8vbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgICAgPSAmZXQxMzF4X3BvbGxfY29udHJvbGxlcjsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIG5ldGRldjsKK30KKworLyoqCisgKiBldDEzMXhfc3RhdHMgLSBSZXR1cm4gdGhlIGN1cnJlbnQgZGV2aWNlIHN0YXRpc3RpY3MuCisgKiBAbmV0ZGV2OiBkZXZpY2Ugd2hvc2Ugc3RhdHMgYXJlIGJlaW5nIHF1ZXJpZWQKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXQxMzF4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmYWRhcHRlci0+bmV0X3N0YXRzOworCUNFX1NUQVRTX3QgKmRldnN0YXQgPSAmYWRhcHRlci0+U3RhdHM7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJc3RhdHMtPnJ4X3BhY2tldHMgPSBkZXZzdGF0LT5pcGFja2V0czsKKwlzdGF0cy0+dHhfcGFja2V0cyA9IGRldnN0YXQtPm9wYWNrZXRzOworCXN0YXRzLT5yeF9lcnJvcnMgPSBkZXZzdGF0LT5sZW5ndGhfZXJyICsgZGV2c3RhdC0+YWxpZ25tZW50X2VyciArCisJICAgIGRldnN0YXQtPmNyY19lcnIgKyBkZXZzdGF0LT5jb2RlX3Zpb2xhdGlvbnMgKyBkZXZzdGF0LT5vdGhlcl9lcnJvcnM7CisJc3RhdHMtPnR4X2Vycm9ycyA9IGRldnN0YXQtPm1heF9wa3RfZXJyb3I7CisJc3RhdHMtPm11bHRpY2FzdCA9IGRldnN0YXQtPm11bHRpcmN2OworCXN0YXRzLT5jb2xsaXNpb25zID0gZGV2c3RhdC0+Y29sbGlzaW9uczsKKworCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gZGV2c3RhdC0+bGVuZ3RoX2VycjsKKwlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBkZXZzdGF0LT5yeF9vdl9mbG93OworCXN0YXRzLT5yeF9jcmNfZXJyb3JzID0gZGV2c3RhdC0+Y3JjX2VycjsKKworCS8vIE5PVEU6IFRoZXNlIHN0YXRzIGRvbid0IGhhdmUgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gQ0VfU1RBVFMsIHNvIHdlJ3JlCisJLy8gICAgICAgZ29pbmcgdG8gaGF2ZSB0byB1cGRhdGUgdGhlc2UgZGlyZWN0bHkgZnJvbSB3aXRoaW4gdGhlIFRYL1JYIGNvZGUKKwkvL3N0YXRzLT5yeF9ieXRlcyAgICAgICAgICAgID0gMjA7IC8vZGV2c3RhdC0+OworCS8vc3RhdHMtPnR4X2J5dGVzICAgICAgICAgICAgPSAyMDsgLy9kZXZzdGF0LT47CisJLy9zdGF0cy0+cnhfZHJvcHBlZCAgICAgICAgICA9IGRldnN0YXQtPjsKKwkvL3N0YXRzLT50eF9kcm9wcGVkICAgICAgICAgID0gZGV2c3RhdC0+OworCisJLy8gTk9URTogTm90IHVzZWQsIGNhbid0IGZpbmQgYW5hbG9nb3VzIHN0YXRpc3RpY3MKKwkvL3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgICAgID0gZGV2c3RhdC0+OworCS8vc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzICAgICAgPSBkZXZzdGF0LT47CisJLy9zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyAgICA9IGRldnN0YXQtPjsKKworCS8vc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzICAgPSBkZXZzdGF0LT47CisJLy9zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgICA9IGRldnN0YXQtPjsKKwkvL3N0YXRzLT50eF9maWZvX2Vycm9ycyAgICAgID0gZGV2c3RhdC0+OworCS8vc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSBkZXZzdGF0LT47CisJLy9zdGF0cy0+dHhfd2luZG93X2Vycm9ycyAgICA9IGRldnN0YXQtPjsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXRzOworfQorCisvKioKKyAqIGV0MTMxeF9vcGVuIC0gT3BlbiB0aGUgZGV2aWNlIGZvciB1c2UuCisgKiBAbmV0ZGV2OiBkZXZpY2UgdG8gYmUgb3BlbmVkCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTdGFydCB0aGUgdGltZXIgdG8gdHJhY2sgTklDIGVycm9ycyAqLworCWFkZF90aW1lcigmYWRhcHRlci0+RXJyb3JUaW1lcik7CisKKwkvKiBSZWdpc3RlciBvdXIgSVNSICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiUmVnaXN0ZXJpbmcgSVNSLi4uXG4iKTsKKworCXJlc3VsdCA9CisJICAgIHJlcXVlc3RfaXJxKG5ldGRldi0+aXJxLCBldDEzMXhfaXNyLCBJUlFGX1NIQVJFRCwgbmV0ZGV2LT5uYW1lLAorCQkJbmV0ZGV2KTsKKwlpZiAocmVzdWx0KSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCByZWdpc3RlciBJU1JcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIEVuYWJsZSB0aGUgVHggYW5kIFJ4IERNQSBlbmdpbmVzIChpZiBub3QgYWxyZWFkeSBlbmFibGVkKSAqLworCWV0MTMxeF9yeF9kbWFfZW5hYmxlKGFkYXB0ZXIpOworCWV0MTMxeF90eF9kbWFfZW5hYmxlKGFkYXB0ZXIpOworCisJLyogRW5hYmxlIGRldmljZSBpbnRlcnJ1cHRzICovCisJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCisJTVBfU0VUX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSk7CisKKwkvKiBXZSdyZSByZWFkeSB0byBtb3ZlIHNvbWUgZGF0YSwgc28gc3RhcnQgdGhlIHF1ZXVlICovCisJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBldDEzMXhfY2xvc2UgLSBDbG9zZSB0aGUgZGV2aWNlCisgKiBAbmV0ZGV2OiBkZXZpY2UgdG8gYmUgY2xvc2VkCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogRmlyc3QgdGhpbmcgaXMgdG8gc3RvcCB0aGUgcXVldWUgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBTdG9wIHRoZSBUeCBhbmQgUnggRE1BIGVuZ2luZXMgKi8KKwlldDEzMXhfcnhfZG1hX2Rpc2FibGUoYWRhcHRlcik7CisJZXQxMzF4X3R4X2RtYV9kaXNhYmxlKGFkYXB0ZXIpOworCisJLyogRGlzYWJsZSBkZXZpY2UgaW50ZXJydXB0cyAqLworCWV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisKKwkvKiBEZXJlZ2lzdGVyaW5nIElTUiAqLworCU1QX0NMRUFSX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSk7CisKKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJEZXJlZ2lzdGVyaW5nIElTUi4uLlxuIik7CisJZnJlZV9pcnEobmV0ZGV2LT5pcnEsIG5ldGRldik7CisKKwkvKiBTdG9wIHRoZSBlcnJvciB0aW1lciAqLworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5FcnJvclRpbWVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZXQxMzF4X2lvY3RsX21paSAtIFRoZSBmdW5jdGlvbiB3aGljaCBoYW5kbGVzIE1JSSBJT0NUTHMKKyAqIEBuZXRkZXY6IGRldmljZSBvbiB3aGljaCB0aGUgcXVlcnkgaXMgYmVpbmcgbWFkZQorICogQHJlcWJ1ZjogdGhlIHJlcXVlc3Qtc3BlY2lmaWMgZGF0YSBidWZmZXIKKyAqIEBjbWQ6IHRoZSBjb21tYW5kIHJlcXVlc3QgY29kZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfaW9jdGxfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcmVxYnVmLCBpbnQgY21kKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShyZXFidWYpOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJTSU9DR01JSVBIWVxuIik7CisJCWRhdGEtPnBoeV9pZCA9IHBBZGFwdGVyLT5TdGF0cy54Y3ZyX2FkZHI7CisJCWJyZWFrOworCisJY2FzZSBTSU9DR01JSVJFRzoKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJTSU9DR01JSVJFR1xuIik7CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gTWlSZWFkKHBBZGFwdGVyLAorCQkJCQlkYXRhLT5yZWdfbnVtLCAmZGF0YS0+dmFsX291dCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNJT0NTTUlJUkVHOgorCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlNJT0NTTUlJUkVHXG4iKTsKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSBNaVdyaXRlKHBBZGFwdGVyLCBkYXRhLT5yZWdfbnVtLAorCQkJCQkgZGF0YS0+dmFsX2luKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfaW9jdGwgLSBUaGUgSS9PIENvbnRyb2wgaGFuZGxlciBmb3IgdGhlIGRyaXZlcgorICogQG5ldGRldjogZGV2aWNlIG9uIHdoaWNoIHRoZSBjb250cm9sIHJlcXVlc3QgaXMgYmVpbmcgbWFkZQorICogQHJlcWJ1ZjogYSBwb2ludGVyIHRvIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlcgorICogQGNtZDogdGhlIElPQ1RMIGNvbW1hbmQgY29kZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpyZXFidWYsIGludCBjbWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCWNhc2UgU0lPQ0dNSUlSRUc6CisJY2FzZSBTSU9DU01JSVJFRzoKKwkJc3RhdHVzID0gZXQxMzF4X2lvY3RsX21paShuZXRkZXYsIHJlcWJ1ZiwgY21kKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgIlVuaGFuZGxlZCBJT0NUTCBDb2RlOiAweCUwNHhcbiIsCisJCQkgICAgY21kKTsKKwkJc3RhdHVzID0gLUVPUE5PVFNVUFA7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9zZXRfcGFja2V0X2ZpbHRlciAtIENvbmZpZ3VyZXMgdGhlIFJ4IFBhY2tldCBmaWx0ZXJpbmcgb24gdGhlIGRldmljZQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZQorICovCitpbnQgZXQxMzF4X3NldF9wYWNrZXRfZmlsdGVyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1aW50MzJfdCBmaWx0ZXIgPSBhZGFwdGVyLT5QYWNrZXRGaWx0ZXI7CisJUlhNQUNfQ1RSTF90IGN0cmw7CisJUlhNQUNfUEZfQ1RSTF90IHBmX2N0cmw7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJY3RybC52YWx1ZSA9IHJlYWRsKCZhZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYy5jdHJsLnZhbHVlKTsKKwlwZl9jdHJsLnZhbHVlID0gcmVhZGwoJmFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjLnBmX2N0cmwudmFsdWUpOworCisJLyogRGVmYXVsdCB0byBkaXNhYmxlZCBwYWNrZXQgZmlsdGVyaW5nLiAgRW5hYmxlIGl0IGluIHRoZSBpbmRpdmlkdWFsCisJICogY2FzZSBzdGF0ZW1lbnRzIHRoYXQgcmVxdWlyZSB0aGUgZGV2aWNlIHRvIGZpbHRlciBzb21ldGhpbmcKKwkgKi8KKwljdHJsLmJpdHMucGt0X2ZpbHRlcl9kaXNhYmxlID0gMTsKKworCS8qIFNldCB1cyB0byBiZSBpbiBwcm9taXNjdW91cyBtb2RlIHNvIHdlIHJlY2VpdmUgZXZlcnl0aGluZywgdGhpcworCSAqIGlzIGFsc28gdHJ1ZSB3aGVuIHdlIGdldCBhIHBhY2tldCBmaWx0ZXIgb2YgMAorCSAqLworCWlmICgoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTKSB8fCBmaWx0ZXIgPT0gMCkgeworCQlwZl9jdHJsLmJpdHMuZmlsdGVyX2Jyb2FkX2VuID0gMDsKKwkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDA7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfdW5pX2VuID0gMDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBTZXQgdXMgdXAgd2l0aCBNdWx0aWNhc3QgcGFja2V0IGZpbHRlcmluZy4gIFRocmVlIGNhc2VzIGFyZQorCQkgKiBwb3NzaWJsZSAtICgxKSB3ZSBoYXZlIGEgbXVsdGktY2FzdCBsaXN0LCAoMikgd2UgcmVjZWl2ZSBBTEwKKwkJICogbXVsdGljYXN0IGVudHJpZXMgb3IgKDMpIHdlIHJlY2VpdmUgbm9uZS4KKwkJICovCisJCWlmIChmaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJNdWx0aWNhc3QgZmlsdGVyaW5nIE9GRiAoUnggQUxMIE1VTFRJQ0FTVClcbiIpOworCQkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDA7CisJCX0gZWxzZSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIk11bHRpY2FzdCBmaWx0ZXJpbmcgT05cbiIpOworCQkJU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3QoYWRhcHRlcik7CisJCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMTsKKwkJCWN0cmwuYml0cy5wa3RfZmlsdGVyX2Rpc2FibGUgPSAwOworCQl9CisKKwkJLyogU2V0IHVzIHVwIHdpdGggVW5pY2FzdCBwYWNrZXQgZmlsdGVyaW5nICovCisJCWlmIChmaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfRElSRUNURUQpIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiVW5pY2FzdCBGaWx0ZXJpbmcgT05cbiIpOworCQkJU2V0dXBEZXZpY2VGb3JVbmljYXN0KGFkYXB0ZXIpOworCQkJcGZfY3RybC5iaXRzLmZpbHRlcl91bmlfZW4gPSAxOworCQkJY3RybC5iaXRzLnBrdF9maWx0ZXJfZGlzYWJsZSA9IDA7CisJCX0KKworCQkvKiBTZXQgdXMgdXAgd2l0aCBCcm9hZGNhc3QgcGFja2V0IGZpbHRlcmluZyAqLworCQlpZiAoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCkgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJCcm9hZGNhc3QgRmlsdGVyaW5nIE9OXG4iKTsKKwkJCXBmX2N0cmwuYml0cy5maWx0ZXJfYnJvYWRfZW4gPSAxOworCQkJY3RybC5iaXRzLnBrdF9maWx0ZXJfZGlzYWJsZSA9IDA7CisJCX0gZWxzZSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkJyb2FkY2FzdCBGaWx0ZXJpbmcgT0ZGXG4iKTsKKwkJCXBmX2N0cmwuYml0cy5maWx0ZXJfYnJvYWRfZW4gPSAwOworCQl9CisKKwkJLyogU2V0dXAgdGhlIHJlY2VpdmUgbWFjIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIC0gUGFja2V0CisJCSAqIEZpbHRlciBjb250cm9sICsgdGhlIGVuYWJsZSAvIGRpc2FibGUgZm9yIHBhY2tldCBmaWx0ZXIKKwkJICogaW4gdGhlIGNvbnRyb2wgcmVnLgorCQkgKi8KKwkJd3JpdGVsKHBmX2N0cmwudmFsdWUsCisJCSAgICAgICAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhtYWMucGZfY3RybC52YWx1ZSk7CisJCXdyaXRlbChjdHJsLnZhbHVlLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhtYWMuY3RybC52YWx1ZSk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9tdWx0aWNhc3QgLSBUaGUgaGFuZGxlciB0byBjb25maWd1cmUgbXVsdGljYXN0aW5nIG9uIHRoZSBpbnRlcmZhY2UKKyAqIEBuZXRkZXY6IGEgcG9pbnRlciB0byBhIG5ldF9kZXZpY2Ugc3RydWN0IHJlcHJlc2VudGluZyB0aGUgZGV2aWNlCisgKi8KK3ZvaWQgZXQxMzF4X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdWludDMyX3QgUGFja2V0RmlsdGVyID0gMDsKKwl1aW50MzJfdCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCA9IG5ldGRldi0+bWNfbGlzdDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKworCS8qIEJlZm9yZSB3ZSBtb2RpZnkgdGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGZpbHRlciBmbGFncywgc3RvcmUgdGhlbQorCSAqIGxvY2FsbHkuIFRoaXMgYWxsb3dzIHVzIHRvIGRldGVybWluZSBpZiBhbnl0aGluZydzIGNoYW5nZWQgYW5kIGlmCisJICogd2UgZXZlbiBuZWVkIHRvIGJvdGhlciB0aGUgaGFyZHdhcmUKKwkgKi8KKwlQYWNrZXRGaWx0ZXIgPSBhZGFwdGVyLT5QYWNrZXRGaWx0ZXI7CisKKwkvKiBDbGVhciB0aGUgJ211bHRpY2FzdCcgZmxhZyBsb2NhbGx5OyBiZWN1YXNlIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZQorCSAqIGZsYWcgdG8gY2hlY2sgbXVsdGljYXN0LCBhbmQgbXVsdGlwbGUgbXVsdGljYXN0IGFkZHJlc3NlcyBjYW4gYmUKKwkgKiBzZXQsIHRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIGRldGVybWluZSBpZiBtb3JlIHRoYW4gb25lCisJICogbXVsdGljYXN0IGFkZHJlc3MgaXMgYmVpbmcgc2V0LgorCSAqLworCVBhY2tldEZpbHRlciAmPSB+RVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVDsKKworCS8qIENoZWNrIHRoZSBuZXRfZGV2aWNlIGZsYWdzIGFuZCBzZXQgdGhlIGRldmljZSBpbmRlcGVuZGVudCBmbGFncworCSAqIGFjY29yZGluZ2x5CisJICovCisJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAiTVVMVElDQVNUIEFERFIgQ09VTlQ6ICVkXG4iLCBuZXRkZXYtPm1jX2NvdW50KTsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJSZXF1ZXN0OiBQUk9NSVNDVU9VUyBNT0RFIE9OXG4iKTsKKwkJYWRhcHRlci0+UGFja2V0RmlsdGVyIHw9IEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUzsKKwl9IGVsc2UgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlJlcXVlc3Q6IFBST01JU0NVT1VTIE1PREUgT0ZGXG4iKTsKKwkJYWRhcHRlci0+UGFja2V0RmlsdGVyICY9IH5FVDEzMVhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVM7CisJfQorCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJSZXF1ZXN0OiBBQ0NFUFQgQUxMIE1VTFRJQ0FTVFxuIik7CisJCWFkYXB0ZXItPlBhY2tldEZpbHRlciB8PSBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKKwl9CisKKwlpZiAobmV0ZGV2LT5tY19jb3VudCA+IE5JQ19NQVhfTUNBU1RfTElTVCkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiQUNDRVBUIEFMTCBNVUxUSUNBU1QgZm9yIG5vdywgYXMgdGhlcmUncyBtb3JlIE11bHRpY2FzdCAiCisJCQkgICAgImFkZHJlc3NlcyB0aGFuIHRoZSBIVyBzdXBwb3J0c1xuIik7CisKKwkJYWRhcHRlci0+UGFja2V0RmlsdGVyIHw9IEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOworCX0KKworCWlmIChuZXRkZXYtPm1jX2NvdW50IDwgMSkgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlJlcXVlc3Q6IFJFSkVDVCBBTEwgTVVMVElDQVNUXG4iKTsKKwkJYWRhcHRlci0+UGFja2V0RmlsdGVyICY9IH5FVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKKwkJYWRhcHRlci0+UGFja2V0RmlsdGVyICY9IH5FVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUOworCX0gZWxzZSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJSZXF1ZXN0OiBTRVQgTVVMVElDQVNUIEZJTFRFUihTKVxuIik7CisJCWFkYXB0ZXItPlBhY2tldEZpbHRlciB8PSBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUOworCX0KKworCS8qIFNldCB2YWx1ZXMgaW4gdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3QgKi8KKwlhZGFwdGVyLT5NQ0FkZHJlc3NDb3VudCA9IG5ldGRldi0+bWNfY291bnQ7CisKKwlpZiAobmV0ZGV2LT5tY19jb3VudCkgeworCQlpZiAobWNsaXN0LT5kbWlfYWRkcmxlbiAhPSBFVEhfQUxFTikgeworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJNdWx0aWNhc3QgYWRkcnMgYXJlIG5vdCBFVEhfQUxFTiBpbiBzaXplXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWNvdW50ID0gbmV0ZGV2LT5tY19jb3VudCAtIDE7CisJCQltZW1jcHkoYWRhcHRlci0+TUNMaXN0W2NvdW50XSwgbWNsaXN0LT5kbWlfYWRkciwKKwkJCSAgICAgICBFVEhfQUxFTik7CisJCX0KKwl9CisKKwkvKiBBcmUgdGhlIG5ldyBmbGFncyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgb25lcz8gSWYgbm90LCB0aGVuIG5vCisJICogYWN0aW9uIGlzIHJlcXVpcmVkCisJICoKKwkgKiBOT1RFIC0gVGhpcyBibG9jayB3aWxsIGFsd2F5cyB1cGRhdGUgdGhlIE1DTGlzdCB3aXRoIHRoZSBoYXJkd2FyZSwKKwkgKiAgICAgICAgZXZlbiBpZiB0aGUgYWRkcmVzc2VzIGFyZW4ndCB0aGUgc2FtZS4KKwkgKi8KKwlpZiAoUGFja2V0RmlsdGVyICE9IGFkYXB0ZXItPlBhY2tldEZpbHRlcikgeworCQkvKiBDYWxsIHRoZSBkZXZpY2UncyBmaWx0ZXIgZnVuY3Rpb24gKi8KKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJVUERBVEUgUkVRVUlSRUQsIEZMQUdTIGNoYW5nZWRcbiIpOworCisJCWV0MTMxeF9zZXRfcGFja2V0X2ZpbHRlcihhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiTk8gVVBEQVRFIFJFUVVJUkVELCBGTEFHUyBkaWRuJ3QgY2hhbmdlXG4iKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfdHggLSBUaGUgaGFuZGxlciB0byB0eCBhIHBhY2tldCBvbiB0aGUgZGV2aWNlCisgKiBAc2tiOiBkYXRhIHRvIGJlIFR4J2QKKyAqIEBuZXRkZXY6IGRldmljZSBvbiB3aGljaCBkYXRhIGlzIHRvIGJlIFR4J2QKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2F2ZSB0aGUgdGltZXN0YW1wIGZvciB0aGUgVFggdGltZW91dCB3YXRjaGRvZyAqLworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJLyogQ2FsbCB0aGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgVHggcm91dGluZSAqLworCXN0YXR1cyA9IGV0MTMxeF9zZW5kX3BhY2tldHMoc2tiLCBuZXRkZXYpOworCisJLyogQ2hlY2sgc3RhdHVzIGFuZCBtYW5hZ2UgdGhlIG5ldGlmIHF1ZXVlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChzdGF0dXMgIT0gMCkgeworCQlpZiAoc3RhdHVzID09IC1FTk9NRU0pIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiT1VUIE9GIFRDQnM7IFNUT1AgTkVUSUYgUVVFVUVcbiIpOworCisJCQkvKiBQdXQgdGhlIHF1ZXVlIHRvIHNsZWVwIHVudGlsIHJlc291cmNlcyBhcmUKKwkJCSAqIGF2YWlsYWJsZQorCQkJICovCisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQlzdGF0dXMgPSAxOworCQl9IGVsc2UgeworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJNaXNjIGVycm9yOyBkcm9wIHBhY2tldFxuIik7CisJCQlzdGF0dXMgPSAwOworCQl9CisJfQorCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF90eF90aW1lb3V0IC0gVGltZW91dCBoYW5kbGVyCisgKiBAbmV0ZGV2OiBhIHBvaW50ZXIgdG8gYSBuZXRfZGV2aWNlIHN0cnVjdCByZXByZXNlbnRpbmcgdGhlIGRldmljZQorICoKKyAqIFRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgVHggcmVxdWVzdCB0aW1lcyBvdXQuIFRoZSB0aW1lb3V0IHBlcmlvZCBpcworICogc3BlY2lmaWVkIGJ5IHRoZSAndHhfdGltZW8iIGVsZW1lbnQgaW4gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlIChzZWUKKyAqIGV0MTMxeF9hbGxvY19kZXZpY2UoKSB0byBzZWUgaG93IHRoaXMgdmFsdWUgaXMgc2V0KS4KKyAqLwordm9pZCBldDEzMXhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCVBNUF9UQ0IgcE1wVGNiOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJUWCBUSU1FT1VUXG4iKTsKKworCS8qIEp1c3Qgc2tpcCB0aGlzIHBhcnQgaWYgdGhlIGFkYXB0ZXIgaXMgZG9pbmcgbGluayBkZXRlY3Rpb24gKi8KKwlpZiAoTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTikpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiU3RpbGwgZG9pbmcgbGluayBkZXRlY3Rpb25cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogQW55IG5vbnJlY292ZXJhYmxlIGhhcmR3YXJlIGVycm9yPworCSAqIENoZWNrcyBhZGFwdGVyLT5mbGFncyBmb3IgYW55IGZhaWx1cmUgaW4gcGh5IHJlYWRpbmcKKwkgKi8KKwlpZiAoTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9OT05fUkVDT1ZFUl9FUlJPUikpIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJOb24gcmVjb3ZlcmFibGUgZXJyb3IgLSByZW1vdmVcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogSGFyZHdhcmUgZmFpbHVyZT8gKi8KKwlpZiAoTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9IQVJEV0FSRV9FUlJPUikpIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJoYXJkd2FyZSBlcnJvciAtIHJlc2V0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElzIHNlbmQgc3R1Y2s/ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBUY2IgPSBwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZDsKKworCWlmIChwTXBUY2IgIT0gTlVMTCkgeworCQlwTXBUY2ItPkNvdW50Kys7CisKKwkJaWYgKHBNcFRjYi0+Q291bnQgPiBOSUNfU0VORF9IQU5HX1RIUkVTSE9MRCkgeworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwkJCVRYX1NUQVRVU19CTE9DS190IHR4RG1hQ29tcGxldGUgPQorCQkJICAgICoocEFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNWYSk7CisJCQlQVFhfREVTQ19FTlRSWV90IHBEZXNjID0KKwkJCSAgICBwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkJICAgIHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbDsKKyNlbmRpZgorCQkJVFhfREVTQ19FTlRSWV90IFN0dWNrRGVzY3JpcHRvcnNbMTBdOworCisJCQlpZiAocE1wVGNiLT5XckluZGV4LmJpdHMudmFsID4gNykgeworCQkJCW1lbWNweShTdHVja0Rlc2NyaXB0b3JzLAorCQkJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkJCSAgICAgICBwTXBUY2ItPldySW5kZXguYml0cy52YWwgLSA2LAorCQkJCSAgICAgICBzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIDEwKTsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywKKwkJCQkJICAgICAgIGxvY2tmbGFncyk7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiU2VuZCBzdHVjayAtIHJlc2V0LiAgcE1wVGNiLT5XckluZGV4ICV4LCBGbGFncyAweCUwOHhcbiIsCisJCQkJICAgIHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCwKKwkJCQkgICAgcE1wVGNiLT5GbGFncyk7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAicERlc2MgMHglMDh4LCAweCUwOHgsIDB4JTA4eCwgMHglMDh4XG4iLAorCQkJCSAgICBwRGVzYy0+RGF0YUJ1ZmZlclB0ckhpZ2gsCisJCQkJICAgIHBEZXNjLT5EYXRhQnVmZmVyUHRyTG93LCBwRGVzYy0+d29yZDIudmFsdWUsCisJCQkJICAgIHBEZXNjLT53b3JkMy52YWx1ZSk7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiV2JTdGF0dXMgMHglMDh4XG4iLCB0eERtYUNvbXBsZXRlLnZhbHVlKTsKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwkJCUR1bXBEZXZpY2VCbG9jayhEQkdfV0FSTklOR19PTiwgcEFkYXB0ZXIsIDApOworCQkJRHVtcERldmljZUJsb2NrKERCR19XQVJOSU5HX09OLCBwQWRhcHRlciwgMSk7CisJCQlEdW1wRGV2aWNlQmxvY2soREJHX1dBUk5JTkdfT04sIHBBZGFwdGVyLCAzKTsKKwkJCUR1bXBEZXZpY2VCbG9jayhEQkdfV0FSTklOR19PTiwgcEFkYXB0ZXIsIDUpOworI2VuZGlmCisJCQlldDEzMXhfY2xvc2UobmV0ZGV2KTsKKwkJCWV0MTMxeF9vcGVuKG5ldGRldik7CisKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7Cit9CisKKy8qKgorICogZXQxMzF4X2NoYW5nZV9tdHUgLSBUaGUgaGFuZGxlciBjYWxsZWQgdG8gY2hhbmdlIHRoZSBNVFUgZm9yIHRoZSBkZXZpY2UKKyAqIEBuZXRkZXY6IGRldmljZSB3aG9zZSBNVFUgaXMgdG8gYmUgY2hhbmdlZAorICogQG5ld19tdHU6IHRoZSBkZXNpcmVkIE1UVQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdGVkIE1UVSBpcyB2YWxpZCAqLworCWlmIChuZXdfbXR1ID09IDAgfHwgbmV3X210dSA+IDkyMTYpIHsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU3RvcCB0aGUgbmV0aWYgcXVldWUgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBTdG9wIHRoZSBUeCBhbmQgUnggRE1BIGVuZ2luZXMgKi8KKwlldDEzMXhfcnhfZG1hX2Rpc2FibGUoYWRhcHRlcik7CisJZXQxMzF4X3R4X2RtYV9kaXNhYmxlKGFkYXB0ZXIpOworCisJLyogRGlzYWJsZSBkZXZpY2UgaW50ZXJydXB0cyAqLworCWV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisJZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdChhZGFwdGVyKTsKKwlldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0KGFkYXB0ZXIpOworCisJLyogU2V0IHRoZSBuZXcgTVRVICovCisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJLyogRnJlZSBSeCBETUEgbWVtb3J5ICovCisJZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisKKwkvKiBTZXQgdGhlIGNvbmZpZyBwYXJhbWV0ZXIgZm9yIEp1bWJvIFBhY2tldCBzdXBwb3J0ICovCisJYWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA9IG5ld19tdHUgKyAxNDsKKwlldDEzMXhfc29mdF9yZXNldChhZGFwdGVyKTsKKworCS8qIEFsbG9jIGFuZCBpbml0IFJ4IERNQSBtZW1vcnkgKi8KKwlyZXN1bHQgPSBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2MoYWRhcHRlcik7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJDaGFuZ2UgTVRVIGZhaWxlZDsgY291bGRuJ3QgcmUtYWxsb2MgRE1BIG1lbW9yeVxuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJZXQxMzF4X2luaXRfc2VuZChhZGFwdGVyKTsKKworCWV0MTMxeF9zZXR1cF9oYXJkd2FyZV9wcm9wZXJ0aWVzKGFkYXB0ZXIpOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5DdXJyZW50QWRkcmVzcywgRVRIX0FMRU4pOworCisJLyogSW5pdCB0aGUgZGV2aWNlIHdpdGggdGhlIG5ldyBzZXR0aW5ncyAqLworCWV0MTMxeF9hZGFwdGVyX3NldHVwKGFkYXB0ZXIpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlpZiAoTVBfVEVTVF9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7CisJCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKwl9CisKKwkvKiBSZXN0YXJ0IHRoZSBUeCBhbmQgUnggRE1BIGVuZ2luZXMgKi8KKwlldDEzMXhfcnhfZG1hX2VuYWJsZShhZGFwdGVyKTsKKwlldDEzMXhfdHhfZG1hX2VuYWJsZShhZGFwdGVyKTsKKworCS8qIFJlc3RhcnQgdGhlIG5ldGlmIHF1ZXVlICovCisJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGV0MTMxeF9zZXRfbWFjX2FkZHIgLSBoYW5kbGVyIHRvIGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UKKyAqIEBuZXRkZXY6IGRldmljZSB3aG9zZSBNQUMgaXMgdG8gYmUgY2hhbmdlZAorICogQG5ld19tYWM6IHRoZSBkZXNpcmVkIE1BQyBhZGRyZXNzCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqCisgKiBJTVBMRU1FTlRFRCBCWSA6IGJsdXggaHR0cDovL2Jlcm5kbHV4LmRlIDIyLjAxLjIwMDcgMjE6MTQKKyAqLworaW50IGV0MTMxeF9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqbmV3X21hYykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyA9IG5ld19tYWM7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCS8vIGJlZ2luIGJsdXgKKwkvLyBEQkdfVkVSQk9TRSggZXQxMzF4X2RiZ2luZm8sICJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQhIVxuIiApOworCisJaWYgKGFkYXB0ZXIgPT0gTlVMTCkgeworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIHJlcXVlc3RlZCBNQUMgaXMgdmFsaWQgKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcmVzcy0+c2FfZGF0YSkpIHsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU3RvcCB0aGUgbmV0aWYgcXVldWUgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBTdG9wIHRoZSBUeCBhbmQgUnggRE1BIGVuZ2luZXMgKi8KKwlldDEzMXhfcnhfZG1hX2Rpc2FibGUoYWRhcHRlcik7CisJZXQxMzF4X3R4X2RtYV9kaXNhYmxlKGFkYXB0ZXIpOworCisJLyogRGlzYWJsZSBkZXZpY2UgaW50ZXJydXB0cyAqLworCWV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisJZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdChhZGFwdGVyKTsKKwlldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0KGFkYXB0ZXIpOworCisJLyogU2V0IHRoZSBuZXcgTUFDICovCisJLy8gbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgID0gJm5ld19tYWM7CisJLy8gbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHJlc3MtPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCisJcHJpbnRrKCIlczogU2V0dGluZyBNQUMgYWRkcmVzcyB0byAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkgICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLAorCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzJdLCBuZXRkZXYtPmRldl9hZGRyWzNdLCBuZXRkZXYtPmRldl9hZGRyWzRdLAorCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworCS8qIEZyZWUgUnggRE1BIG1lbW9yeSAqLworCWV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCisJLyogU2V0IHRoZSBjb25maWcgcGFyYW1ldGVyIGZvciBKdW1ibyBQYWNrZXQgc3VwcG9ydCAqLworCS8vIGFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPSBuZXdfbXR1ICsgMTQ7CisJLy8gYmx1eDogbm90IG5lZWRldCBoZXJlLCB3J2xsIGNoYW5nZSB0aGUgTUFDCisKKwlldDEzMXhfc29mdF9yZXNldChhZGFwdGVyKTsKKworCS8qIEFsbG9jIGFuZCBpbml0IFJ4IERNQSBtZW1vcnkgKi8KKwlyZXN1bHQgPSBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2MoYWRhcHRlcik7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJDaGFuZ2UgTUFDIGZhaWxlZDsgY291bGRuJ3QgcmUtYWxsb2MgRE1BIG1lbW9yeVxuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJZXQxMzF4X2luaXRfc2VuZChhZGFwdGVyKTsKKworCWV0MTMxeF9zZXR1cF9oYXJkd2FyZV9wcm9wZXJ0aWVzKGFkYXB0ZXIpOworCS8vIG1lbWNweSggbmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIEVUSF9BTEVOICk7CisJLy8gYmx1eDogbm8sIGRvIG5vdCBvdmVycmlkZSBvdXIgbmljZSBhZGRyZXNzCisKKwkvKiBJbml0IHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV3IHNldHRpbmdzICovCisJZXQxMzF4X2FkYXB0ZXJfc2V0dXAoYWRhcHRlcik7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCWlmIChNUF9URVNUX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpIHsKKwkJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCX0KKworCS8qIFJlc3RhcnQgdGhlIFR4IGFuZCBSeCBETUEgZW5naW5lcyAqLworCWV0MTMxeF9yeF9kbWFfZW5hYmxlKGFkYXB0ZXIpOworCWV0MTMxeF90eF9kbWFfZW5hYmxlKGFkYXB0ZXIpOworCisJLyogUmVzdGFydCB0aGUgbmV0aWYgcXVldWUgKi8KKwluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWNkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9uZXRkZXYuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHJlbGF0ZWQgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgICBkcml2ZXIncyBuZXRfZGV2aWNlIHN1cHBvcnQuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfTkVUREVWX0hfXworI2RlZmluZSBfX0VUMTMxWF9ORVRERVZfSF9fCisKK3N0cnVjdCBuZXRfZGV2aWNlICpldDEzMXhfZGV2aWNlX2FsbG9jKHZvaWQpOworCisjZW5kaWYgLyogX19FVDEzMVhfTkVUREVWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfdmVyc2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTY0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF92ZXJzaW9uLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfdmVyc2lvbi5oIC0gVGhpcyBmaWxlIHByb3ZpZGVzIHN5c3RlbSBhbmQgZGV2aWNlIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfVkVSU0lPTl9IX18KKyNkZWZpbmUgX19FVDEzMVhfVkVSU0lPTl9IX18KKworI2RlZmluZSBEUklWRVJfQVVUSE9SCQkiVmljdG9yIFNvcmlhbm8gKHZqc29yaWFub0BhZ2VyZS5jb20pIgorI2RlZmluZSBEUklWRVJfTElDRU5TRQkJIkR1YWwgQlNEL0dQTCIKKyNkZWZpbmUgRFJJVkVSX0RFVklDRV9TVFJJTkcJIkVUMTMxMCIKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJldDEzMXgiCisjZGVmaW5lIERSSVZFUl9NQUpPUl9WRVJTSU9OCTEKKyNkZWZpbmUgRFJJVkVSX01JTk9SX1ZFUlNJT04JMgorI2RlZmluZSBEUklWRVJfUEFUQ0hfVkVSU0lPTgkzCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX1NUUklORwkiMS4yLjMiCisjZGVmaW5lIERSSVZFUl9WRU5ET1IJCSJBZ2VyZSBTeXN0ZW1zLCBodHRwOi8vd3d3LmFnZXJlLmNvbSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSIxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIgorCisjZGVmaW5lIFNUUlVDVF9NT0RVTEUJCSJuZXQiCS8qIGJsdXg6IG1pc3NlZCBieSB0aGUga2VybmVsICovCisKKyNkZWZpbmUgRFJJVkVSX0lORk8JCURSSVZFUl9ERVNDICIgZm9yIHRoZSAiXAorCQkJCURSSVZFUl9ERVZJQ0VfU1RSSU5HICIsIHYiIFwKKwkJCQlEUklWRVJfVkVSU0lPTl9TVFJJTkcgIiBieSAiIFwKKwkJCQlEUklWRVJfVkVORE9SCisKKyNkZWZpbmUgRFJJVkVSX05BTUVfRVhUCQkiZXQxMzF4LmtvIgorCisjZW5kaWYgLyogX19FVDEzMVhfVkVSU0lPTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNmZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnCkBAIC0wLDAgKzEsMjcgQEAKK2NvbmZpZyBWSURFT19HTzcwMDcKKwl0cmlzdGF0ZSAiR28gNzAwNyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgSU5QVVQKKwlkZXBlbmRzIG9uIFNORAorCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKKwlzZWxlY3QgVklERU9fSVIKKwlzZWxlY3QgVklERU9fVFVORVIKKwlzZWxlY3QgVklERU9fVFZFRVBST00KKwlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBDUkMzMgorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHNvbWUgd2llcmQgZGV2aWNlLi4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdvNzAwNworCitjb25maWcgVklERU9fR083MDA3X1VTQgorCXRyaXN0YXRlICJHbyA3MDA3IFVTQiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fR083MDA3ICYmIFVTQgorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHNvbWUgd2llcmQgZGV2aWNlLi4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdvNzAwNy11c2IKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI5MzEwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvTWFrZWZpbGUKQEAgLTAsMCArMSwxOCBAQAorI29iai1tICs9IGdvNzAwNy5vIGdvNzAwNy11c2IubyBzbmQtZ283MDA3Lm8gd2lzLXNhYTcxMTUubyB3aXMtdHc5OTAzLm8gXAorCQl3aXMtdWRhMTM0Mi5vIHdpcy1zb255LXR1bmVyLm8gd2lzLXNhYTcxMTMubyB3aXMtb3Y3NjQwLm8gXAorCQl3aXMtdHcyODA0Lm8KKworCitvYmotJChDT05GSUdfVklERU9fR083MDA3KSArPSBnbzcwMDcubworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwN19VU0IpICs9IGdvNzAwNy11c2IubworCitnbzcwMDctb2JqcyArPSBnbzcwMDctdjRsMi5vIGdvNzAwNy1kcml2ZXIubyBnbzcwMDctaTJjLm8gZ283MDA3LWZ3Lm8gc25kLWdvNzAwNy5vCisKKworI2lmbmVxICgkKFNBQTcxMzRfQlVJTEQpLCkKKyNvYmotbSArPSBzYWE3MTM0LWdvNzAwNy5vCisjZW5kaWYKKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9zdGFnaW5nL3NhYTcxMzQKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmNDQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvUkVBRE1FCkBAIC0wLDAgKzEsMTEgQEAKK1RvZG86CisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBzcGFyc2UgY2xlYW51cHMKKwktIGxvdHMgb2YgbGl0dGxlIG1vZHVsZXMsIHNob3VsZCBiZSBtZXJnZWQgdG9nZXRoZXIKKwkgIGFuZCBhZGRlZCB0byB0aGUgYnVpbGQuCisJLSB0ZXN0aW5nPworCS0gaGFuZGxlIGNodXJuIGluIHY0bCBsYXllci4KKworUGxlYXNlIHNlbmQgcGF0Y2hzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZCBDYzogUm9zcworQ29oZW4gPHJjb2hlbkBzbnVyZ2xlLm9yZz4gYXMgd2VsbC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGVhZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKQEAgLTAsMCArMSw2ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworLyoKKyAqIFdhaXQgZm9yIGFuIGludGVycnVwdCB0byBiZSBkZWxpdmVyZWQgZnJvbSB0aGUgR083MDA3U0IgYW5kIHJldHVybgorICogdGhlIGFzc29jaWF0ZWQgdmFsdWUgYW5kIGRhdGEuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X3JlYWRfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKnZhbHVlLCB1MTYgKmRhdGEpCit7CisJZ28tPmludGVycnVwdF9hdmFpbGFibGUgPSAwOworCWdvLT5ocGlfb3BzLT5yZWFkX2ludGVycnVwdChnbyk7CisJaWYgKHdhaXRfZXZlbnRfdGltZW91dChnby0+aW50ZXJydXB0X3dhaXRxLAorCQkJCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlLCA1KkhaKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHRpbWVvdXQgd2FpdGluZyBmb3IgcmVhZCBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghZ28tPmludGVycnVwdF9hdmFpbGFibGUpCisJCXJldHVybiAtMTsKKwlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSA9IDA7CisJKnZhbHVlID0gZ28tPmludGVycnVwdF92YWx1ZSAmIDB4ZmZmZTsKKwkqZGF0YSA9IGdvLT5pbnRlcnJ1cHRfZGF0YTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3JlYWRfaW50ZXJydXB0KTsKKworLyoKKyAqIFJlYWQgYSByZWdpc3Rlci9hZGRyZXNzIG9uIHRoZSBHTzcwMDdTQi4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfcmVhZF9hZGRyKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgYWRkciwgdTE2ICpkYXRhKQoreworCWludCBjb3VudCA9IDEwMDsKKwl1MTYgdmFsdWU7CisKKwlpZiAoZ283MDA3X3dyaXRlX2ludGVycnVwdChnbywgMHgwMDEwLCBhZGRyKSA8IDApCisJCXJldHVybiAtRUlPOworCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlpZiAoZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmdmFsdWUsIGRhdGEpID09IDAgJiYKKwkJCQl2YWx1ZSA9PSAweGEwMDApCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19yZWFkX2FkZHIpOworCisvKgorICogU2VuZCB0aGUgYm9vdCBmaXJtd2FyZSB0byB0aGUgZW5jb2Rlciwgd2hpY2gganVzdCB3YWtlcyBpdCB1cCBhbmQgbGV0cworICogdXMgdGFsayB0byB0aGUgR1BJTyBwaW5zIGFuZCBvbi1ib2FyZCBJMkMgYWRhcHRlci4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgZ283MDA3X2xvYWRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCWNoYXIgZndfbmFtZVtdID0gImdvNzAwN2Z3LmJpbiI7CisJdm9pZCAqYm91bmNlOworCWludCBmd19sZW4sIHJ2ID0gMDsKKwl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZndfbmFtZSwgZ28tPmRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3OiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGZpbGUgXCIlc1wiXG4iLAorCQkJZndfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGZ3X2VudHJ5LT5zaXplIDwgMTYgfHwgbWVtY21wKGZ3X2VudHJ5LT5kYXRhLCAiV0lTR083MDA3RlciLCAxMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGZpbGUgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSAiCisJCQkJImdvNzAwNyBmaXJtd2FyZVxuIiwgZndfbmFtZSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQlyZXR1cm4gLTE7CisJfQorCWZ3X2xlbiA9IGZ3X2VudHJ5LT5zaXplIC0gMTY7CisJYm91bmNlID0ga21hbGxvYyhmd19sZW4sIEdGUF9LRVJORUwpOworCWlmIChib3VuY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiCisJCQkJImZpcm13YXJlIHRyYW5zZmVyXG4iLCBmd19sZW4pOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1jcHkoYm91bmNlLCBmd19lbnRyeS0+ZGF0YSArIDE2LCBmd19sZW4pOworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCWlmIChnbzcwMDdfaW50ZXJmYWNlX3Jlc2V0KGdvKSA8IDAgfHwKKwkJCWdvNzAwN19zZW5kX2Zpcm13YXJlKGdvLCBib3VuY2UsIGZ3X2xlbikgPCAwIHx8CisJCQlnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwIHx8CisJCQkoaW50cl92YWwgJiB+MHgxKSAhPSAweDVhNWEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGVycm9yIHRyYW5zZmVycmluZyBmaXJtd2FyZVxuIik7CisJCXJ2ID0gLTE7CisJfQorCWtmcmVlKGJvdW5jZSk7CisJcmV0dXJuIHJ2OworfQorCisvKgorICogQm9vdCB0aGUgZW5jb2RlciBhbmQgcmVnaXN0ZXIgdGhlIEkyQyBhZGFwdGVyIGlmIHJlcXVlc3RlZC4gIERvIHRoZQorICogbWluaW11bSBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnksIHNpbmNlIHRoZSBib2FyZC1zcGVjaWZpYyBjb2RlIG1heQorICogc3RpbGwgbmVlZCB0byBwcm9iZSB0aGUgYm9hcmQgSUQuCisgKgorICogTXVzdCBOT1QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworaW50IGdvNzAwN19ib290X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28sIGludCBpbml0X2kyYykKK3sKKwlpbnQgcmV0OworCisJZG93bigmZ28tPmh3X2xvY2spOworCXJldCA9IGdvNzAwN19sb2FkX2VuY29kZXIoZ28pOworCXVwKCZnby0+aHdfbG9jayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoIWluaXRfaTJjKQorCQlyZXR1cm4gMDsKKwlpZiAoZ283MDA3X2kyY19pbml0KGdvKSA8IDApCisJCXJldHVybiAtMTsKKwlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X2Jvb3RfZW5jb2Rlcik7CisKKy8qCisgKiBDb25maWd1cmUgYW55IGhhcmR3YXJlLXJlbGF0ZWQgcmVnaXN0ZXJzIGluIHRoZSBHTzcwMDcsIHN1Y2ggYXMgR1BJTworICogcGlucyBhbmQgYnVzIHBhcmFtZXRlcnMsIHdoaWNoIGFyZSBib2FyZC1zcGVjaWZpYy4gIFRoaXMgYXNzdW1lcworICogdGhlIGJvb3QgZmlybXdhcmUgaGFzIGFscmVhZHkgYmVlbiBkb3dubG9hZGVkLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworc3RhdGljIGludCBnbzcwMDdfaW5pdF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWlmIChnby0+Ym9hcmRfaW5mby0+YXVkaW9fZmxhZ3MgJiBHTzcwMDdfQVVESU9fSTJTX01BU1RFUikgeworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgxMDAwLCAweDA4MTEpOworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgxMDAwLCAweDBjMTEpOworCX0KKwlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX01BVFJJWF9SRVYpIHsKKwkJLyogU2V0IEdQSU8gcGluIDAgdG8gYmUgYW4gb3V0cHV0IChhdWRpbyBjbG9jayBjb250cm9sKSAqLworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgyLCAweDAwMDEpOworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgwLCAweDAwZmUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNlbmQgdGhlIGJvb3QgZmlybXdhcmUgdG8gdGhlIEdPNzAwNyBhbmQgY29uZmlndXJlIHRoZSByZWdpc3RlcnMuICBUaGlzCisgKiBpcyB0aGUgb25seSB3YXkgdG8gc3RvcCB0aGUgZW5jb2RlciBvbmNlIGl0IGhhcyBzdGFydGVkIHN0cmVhbWluZyB2aWRlby4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfcmVzZXRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpZiAoZ283MDA3X2xvYWRfZW5jb2RlcihnbykgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGdvNzAwN19pbml0X2VuY29kZXIoZ28pOworfQorCisvKgorICogQXR0ZW1wdCB0byBpbnN0YW50aWF0ZSBhbiBJMkMgY2xpZW50IGJ5IElELCBwcm9iYWJseSBsb2FkaW5nIGEgbW9kdWxlLgorICovCitzdGF0aWMgaW50IGluaXRfaTJjX21vZHVsZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZCwgaW50IGFkZHIpCit7CisJY2hhciAqbW9kbmFtZTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfU0FBNzExNToKKwkJbW9kbmFtZSA9ICJ3aXMtc2FhNzExNSI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19TQUE3MTEzOgorCQltb2RuYW1lID0gIndpcy1zYWE3MTEzIjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX1VEQTEzNDI6CisJCW1vZG5hbWUgPSAid2lzLXVkYTEzNDIiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfU09OWV9UVU5FUjoKKwkJbW9kbmFtZSA9ICJ3aXMtc29ueS10dW5lciI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19UVzk5MDM6CisJCW1vZG5hbWUgPSAid2lzLXR3OTkwMyI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19UVzI4MDQ6CisJCW1vZG5hbWUgPSAid2lzLXR3MjgwNCI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19PVjc2NDA6CisJCW1vZG5hbWUgPSAid2lzLW92NzY0MCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1vZG5hbWUgPSBOVUxMOworCQlicmVhazsKKwl9CisJaWYgKG1vZG5hbWUgIT0gTlVMTCkKKwkJcmVxdWVzdF9tb2R1bGUobW9kbmFtZSk7CisJaWYgKHdpc19pMmNfcHJvYmVfZGV2aWNlKGFkYXB0ZXIsIGlkLCBhZGRyKSA9PSAxKQorCQlyZXR1cm4gMDsKKwlpZiAobW9kbmFtZSAhPSBOVUxMKQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkiZ283MDA3OiBwcm9iaW5nIGZvciBtb2R1bGUgJXMgZmFpbGVkIiwgbW9kbmFtZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkiZ283MDA3OiBzZW5zb3IgJXUgc2VlbXMgdG8gYmUgdW5zdXBwb3J0ZWQhXG4iLCBpZCk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogRmluYWxpemUgdGhlIEdPNzAwNyBoYXJkd2FyZSBzZXR1cCwgcmVnaXN0ZXIgdGhlIG9uLWJvYXJkIEkyQyBhZGFwdGVyCisgKiAoaWYgdXNlZCBvbiB0aGlzIGJvYXJkKSwgbG9hZCB0aGUgSTJDIGNsaWVudCBkcml2ZXIgZm9yIHRoZSBzZW5zb3IKKyAqIChTQUE3MTE1IG9yIHdoYXRldmVyKSBhbmQgb3RoZXIgZGV2aWNlcywgYW5kIHJlZ2lzdGVyIHRoZSBBTFNBIGFuZCBWNEwyCisgKiBpbnRlcmZhY2VzLgorICoKKyAqIE11c3QgTk9UIGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfcmVnaXN0ZXJfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpbnQgaSwgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiZ283MDA3OiByZWdpc3RlcmluZyBuZXcgJXNcbiIsIGdvLT5uYW1lKTsKKworCWRvd24oJmdvLT5od19sb2NrKTsKKwlyZXQgPSBnbzcwMDdfaW5pdF9lbmNvZGVyKGdvKTsKKwl1cCgmZ28tPmh3X2xvY2spOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgJiYKKwkJCWdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMpIHsKKwkJaWYgKGdvNzAwN19pMmNfaW5pdChnbykgPCAwKQorCQkJcmV0dXJuIC0xOworCQlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMTsKKwl9CisJaWYgKGdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpIHsKKwkJZm9yIChpID0gMDsgaSA8IGdvLT5ib2FyZF9pbmZvLT5udW1faTJjX2RldnM7ICsraSkKKwkJCWluaXRfaTJjX21vZHVsZSgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQlnby0+Ym9hcmRfaW5mby0+aTJjX2RldnNbaV0uaWQsCisJCQkJCWdvLT5ib2FyZF9pbmZvLT5pMmNfZGV2c1tpXS5hZGRyKTsKKyNpZmRlZiBUVU5FUl9TRVRfVFlQRV9BRERSCisJCWlmIChnby0+dHVuZXJfdHlwZSA+PSAwKSB7CisJCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwID0geworCQkJCS5tb2RlX21hc2sJPSBUX0FOQUxPR19UViwKKwkJCQkuYWRkcgkJPSBBRERSX1VOU0VULAorCQkJCS50eXBlCQk9IGdvLT50dW5lcl90eXBlCisJCQl9OworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCVRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQl9CisjZWxzZQorCQlpZiAoZ28tPnR1bmVyX3R5cGUgPj0gMCkKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQlUVU5FUl9TRVRfVFlQRSwgJmdvLT50dW5lcl90eXBlKTsKKyNlbmRpZgorCQlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNCkKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQlERUNPREVSX1NFVF9DSEFOTkVMLCAmZ28tPmNoYW5uZWxfbnVtYmVyKTsKKwl9CisJaWYgKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfQVVESU8pIHsKKwkJZ28tPmF1ZGlvX2VuYWJsZWQgPSAxOworCQlnbzcwMDdfc25kX2luaXQoZ28pOworCX0KKwlyZXR1cm4gZ283MDA3X3Y0bDJfaW5pdChnbyk7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19yZWdpc3Rlcl9lbmNvZGVyKTsKKworLyoKKyAqIFNlbmQgdGhlIGVuY29kZSBmaXJtd2FyZSB0byB0aGUgZW5jb2Rlciwgd2hpY2ggd2lsbCBjYXVzZSBpdAorICogdG8gaW1tZWRpYXRlbHkgc3RhcnQgZGVsaXZlcmluZyB0aGUgdmlkZW8gYW5kIGF1ZGlvIHN0cmVhbXMuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X3N0YXJ0X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJdTggKmZ3OworCWludCBmd19sZW4sIHJ2ID0gMCwgaTsKKwl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKKworCWdvLT5tb2RldF9lbmFibGUgPSAwOworCWlmICghZ28tPmR2ZF9tb2RlKQorCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCQlpZiAoZ28tPm1vZGV0W2ldLmVuYWJsZSkgeworCQkJCWdvLT5tb2RldF9lbmFibGUgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ28tPm1vZGV0W2ldLnBpeGVsX3RocmVzaG9sZCA9IDMyNzY3OworCQkJZ28tPm1vZGV0W2ldLm1vdGlvbl90aHJlc2hvbGQgPSAzMjc2NzsKKwkJCWdvLT5tb2RldFtpXS5tYl90aHJlc2hvbGQgPSAzMjc2NzsKKwkJfQorCisJaWYgKGdvNzAwN19jb25zdHJ1Y3RfZndfaW1hZ2UoZ28sICZmdywgJmZ3X2xlbikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZ283MDA3X3NlbmRfZmlybXdhcmUoZ28sIGZ3LCBmd19sZW4pIDwgMCB8fAorCQkJZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmaW50cl92YWwsICZpbnRyX2RhdGEpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZXJyb3IgdHJhbnNmZXJyaW5nIGZpcm13YXJlXG4iKTsKKwkJcnYgPSAtMTsKKwkJZ290byBzdGFydF9lcnJvcjsKKwl9CisKKwlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCWdvLT5wYXJzZV9sZW5ndGggPSAwOworCWdvLT5zZWVuX2ZyYW1lID0gMDsKKwlpZiAoZ283MDA3X3N0cmVhbV9zdGFydChnbykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBlcnJvciBzdGFydGluZyBzdHJlYW0gdHJhbnNmZXJcbiIpOworCQlydiA9IC0xOworCQlnb3RvIHN0YXJ0X2Vycm9yOworCX0KKworc3RhcnRfZXJyb3I6CisJa2ZyZWUoZncpOworCXJldHVybiBydjsKK30KKworLyoKKyAqIFN0b3JlIGEgYnl0ZSBpbiB0aGUgY3VycmVudCB2aWRlbyBidWZmZXIsIGlmIHRoZXJlIGlzIG9uZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX2J5dGUoc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmLCB1OCBieXRlKQoreworCWlmIChnb2J1ZiAhPSBOVUxMICYmIGdvYnVmLT5ieXRlc3VzZWQgPCBHTzcwMDdfQlVGX1NJWkUpIHsKKwkJdW5zaWduZWQgaW50IHBnaWR4ID0gZ29idWYtPm9mZnNldCA+PiBQQUdFX1NISUZUOworCQl1bnNpZ25lZCBpbnQgcGdvZmYgPSBnb2J1Zi0+b2Zmc2V0ICYgflBBR0VfTUFTSzsKKworCQkqKCh1OCAqKXBhZ2VfYWRkcmVzcyhnb2J1Zi0+cGFnZXNbcGdpZHhdKSArIHBnb2ZmKSA9IGJ5dGU7CisJCSsrZ29idWYtPm9mZnNldDsKKwkJKytnb2J1Zi0+Ynl0ZXN1c2VkOworCX0KK30KKworLyoKKyAqIERlbGl2ZXIgdGhlIGxhc3QgdmlkZW8gYnVmZmVyIGFuZCBnZXQgYSBuZXcgb25lIHRvIHN0YXJ0IHdyaXRpbmcgdG8uCisgKi8KK3N0YXRpYyB2b2lkIGZyYW1lX2JvdW5kYXJ5KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZjsKKwlpbnQgaTsKKworCWlmIChnby0+YWN0aXZlX2J1ZikgeworCQlpZiAoZ28tPmFjdGl2ZV9idWYtPm1vZGV0X2FjdGl2ZSkgeworCQkJaWYgKGdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgKyAyMTYgPCBHTzcwMDdfQlVGX1NJWkUpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgMjE2OyArK2kpCisJCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsCisJCQkJCQkJZ28tPmFjdGl2ZV9tYXBbaV0pOworCQkJCWdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgLT0gMjE2OworCQkJfSBlbHNlCisJCQkJZ28tPmFjdGl2ZV9idWYtPm1vZGV0X2FjdGl2ZSA9IDA7CisJCX0KKwkJZ28tPmFjdGl2ZV9idWYtPnN0YXRlID0gQlVGX1NUQVRFX0RPTkU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ28tPmZyYW1lX3dhaXRxKTsKKwkJZ28tPmFjdGl2ZV9idWYgPSBOVUxMOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdvYnVmLCAmZ28tPnN0cmVhbSwgc3RyZWFtKQorCQlpZiAoZ29idWYtPnN0YXRlID09IEJVRl9TVEFURV9RVUVVRUQpIHsKKwkJCWdvYnVmLT5zZXEgPSBnby0+bmV4dF9zZXE7CisJCQlkb19nZXR0aW1lb2ZkYXkoJmdvYnVmLT50aW1lc3RhbXApOworCQkJZ28tPmFjdGl2ZV9idWYgPSBnb2J1ZjsKKwkJCWJyZWFrOworCQl9CisJKytnby0+bmV4dF9zZXE7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2JpdG1hcF93b3JkKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWludCB4LCB5LCBpLCBzdHJpZGUgPSAoKGdvLT53aWR0aCA+PiA0KSArIDcpID4+IDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgeworCQl5ID0gKCgoZ28tPnBhcnNlX2xlbmd0aCAtIDEpIDw8IDMpICsgaSkgLyAoZ28tPndpZHRoID4+IDQpOworCQl4ID0gKCgoZ28tPnBhcnNlX2xlbmd0aCAtIDEpIDw8IDMpICsgaSkgJSAoZ28tPndpZHRoID4+IDQpOworCQlnby0+YWN0aXZlX21hcFtzdHJpZGUgKiB5ICsgKHggPj4gMyldIHw9CisJCQkJCShnby0+bW9kZXRfd29yZCAmIDEpIDw8ICh4ICYgMHg3KTsKKwkJZ28tPm1vZGV0X3dvcmQgPj49IDE7CisJfQorfQorCisvKgorICogUGFyc2UgYSBjaHVuayBvZiB0aGUgdmlkZW8gc3RyZWFtIGludG8gZnJhbWVzLiAgVGhlIGZyYW1lcyBhcmUgbm90CisgKiBkZWxpbWl0ZWQgYnkgdGhlIGhhcmR3YXJlLCBzbyB3ZSBoYXZlIHRvIHBhcnNlIHRoZSBmcmFtZSBib3VuZGFyaWVzCisgKiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB2aWRlbyBzdHJlYW0gd2UncmUgcmVjZWl2aW5nLgorICovCit2b2lkIGdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0oc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpidWYsIGludCBsZW5ndGgpCit7CisJaW50IGksIHNlcV9zdGFydF9jb2RlID0gLTEsIGZyYW1lX3N0YXJ0X2NvZGUgPSAtMTsKKworCXNwaW5fbG9jaygmZ28tPnNwaW5sb2NrKTsKKworCXN3aXRjaCAoZ28tPmZvcm1hdCkgeworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJc2VxX3N0YXJ0X2NvZGUgPSAweEIwOworCQlmcmFtZV9zdGFydF9jb2RlID0gMHhCNjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMjoKKwkJc2VxX3N0YXJ0X2NvZGUgPSAweEIzOworCQlmcmFtZV9zdGFydF9jb2RlID0gMHgwMDsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisJCWlmIChnby0+YWN0aXZlX2J1ZiAhPSBOVUxMICYmCisJCQkgICAgZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCA+PSBHTzcwMDdfQlVGX1NJWkUgLSAzKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3OiBkcm9wcGluZyBvdmVyc2l6ZWQgZnJhbWVcbiIpOworCQkJZ28tPmFjdGl2ZV9idWYtPm9mZnNldCAtPSBnby0+YWN0aXZlX2J1Zi0+Ynl0ZXN1c2VkOworCQkJZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCA9IDA7CisJCQlnby0+YWN0aXZlX2J1Zi0+bW9kZXRfYWN0aXZlID0gMDsKKwkJCWdvLT5hY3RpdmVfYnVmID0gTlVMTDsKKwkJfQorCisJCXN3aXRjaCAoZ28tPnN0YXRlKSB7CisJCWNhc2UgU1RBVEVfREFUQToKKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4MDA6CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfRkY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV8wMDoKKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4MDA6CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfMDBfMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfRkY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFXzAwXzAwOgorCQkJc3dpdGNoIChidWZbaV0pIHsKKwkJCWNhc2UgMHgwMDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQkvKiBnby0+c3RhdGUgcmVtYWlucyBTVEFURV8wMF8wMCAqLworCQkJCWJyZWFrOworCQkJY2FzZSAweDAxOgorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFXzAwXzAwXzAxOworCQkJCWJyZWFrOworCQkJY2FzZSAweEZGOgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0ZGOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCBidWZbaV0pOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV8wMF8wMF8wMToKKwkJCS8qIElmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgbmV3IE1QRUcgZnJhbWUsCisJCQkgKiBnZXQgYSBuZXcgYnVmZmVyICovCisJCQlpZiAoKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSB8fAorCQkJCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgfHwKKwkJCQkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0KSAmJgorCQkJCQkoYnVmW2ldID09IHNlcV9zdGFydF9jb2RlIHx8CisJCQkJCQlidWZbaV0gPT0gMHhCOCB8fCAvKiBHT1AgY29kZSAqLworCQkJCQkJYnVmW2ldID09IGZyYW1lX3N0YXJ0X2NvZGUpKSB7CisJCQkJaWYgKGdvLT5hY3RpdmVfYnVmID09IE5VTEwgfHwgZ28tPnNlZW5fZnJhbWUpCisJCQkJCWZyYW1lX2JvdW5kYXJ5KGdvKTsKKwkJCQlpZiAoYnVmW2ldID09IGZyYW1lX3N0YXJ0X2NvZGUpIHsKKwkJCQkJaWYgKGdvLT5hY3RpdmVfYnVmICE9IE5VTEwpCisJCQkJCQlnby0+YWN0aXZlX2J1Zi0+ZnJhbWVfb2Zmc2V0ID0KKwkJCQkJCQlnby0+YWN0aXZlX2J1Zi0+b2Zmc2V0OworCQkJCQlnby0+c2Vlbl9mcmFtZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJZ28tPnNlZW5fZnJhbWUgPSAwOworCQkJCX0KKwkJCX0KKwkJCS8qIEhhbmRsZSBhbnkgc3BlY2lhbCBjaHVuayB0eXBlcywgb3IganVzdCB3cml0ZSB0aGUKKwkJCSAqIHN0YXJ0IGNvZGUgdG8gdGhlIChwb3RlbnRpYWxseSBuZXcpIGJ1ZmZlciAqLworCQkJc3dpdGNoIChidWZbaV0pIHsKKwkJCWNhc2UgMHhGNTogLyogdGltZXN0YW1wICovCisJCQkJZ28tPnBhcnNlX2xlbmd0aCA9IDEyOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX1VOUEFSU0VEOworCQkJCWJyZWFrOworCQkJY2FzZSAweEY2OiAvKiB2YmkgKi8KKwkJCQlnby0+c3RhdGUgPSBTVEFURV9WQklfTEVOX0E7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4Rjg6IC8qIE1EIG1hcCAqLworCQkJCWdvLT5wYXJzZV9sZW5ndGggPSAwOworCQkJCW1lbXNldChnby0+YWN0aXZlX21hcCwgMCwKKwkJCQkJCXNpemVvZihnby0+YWN0aXZlX21hcCkpOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX01PREVUX01BUDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGRjogLyogUG90ZW50aWFsIEpQRUcgc3RhcnQgY29kZSAqLworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDEpOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0ZGOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAxKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCBidWZbaV0pOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9GRjoKKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4MDA6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHhGRik7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHhGRik7CisJCQkJLyogZ28tPnN0YXRlIHJlbWFpbnMgU1RBVEVfRkYgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMHhEODoKKwkJCQlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHKQorCQkJCQlmcmFtZV9ib3VuZGFyeShnbyk7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4RkYpOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1ZCSV9MRU5fQToKKwkJCWdvLT5wYXJzZV9sZW5ndGggPSBidWZbaV0gPDwgODsKKwkJCWdvLT5zdGF0ZSA9IFNUQVRFX1ZCSV9MRU5fQjsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1ZCSV9MRU5fQjoKKwkJCWdvLT5wYXJzZV9sZW5ndGggfD0gYnVmW2ldOworCQkJaWYgKGdvLT5wYXJzZV9sZW5ndGggPiAwKQorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX1VOUEFSU0VEOworCQkJZWxzZQorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9NT0RFVF9NQVA6CisJCQlpZiAoZ28tPnBhcnNlX2xlbmd0aCA8IDIwNCkgeworCQkJCWlmIChnby0+cGFyc2VfbGVuZ3RoICYgMSkgeworCQkJCQlnby0+bW9kZXRfd29yZCB8PSBidWZbaV07CisJCQkJCXdyaXRlX2JpdG1hcF93b3JkKGdvKTsKKwkJCQl9IGVsc2UKKwkJCQkJZ28tPm1vZGV0X3dvcmQgPSBidWZbaV0gPDwgODsKKwkJCX0gZWxzZSBpZiAoZ28tPnBhcnNlX2xlbmd0aCA9PSAyMDcgJiYgZ28tPmFjdGl2ZV9idWYpIHsKKwkJCQlnby0+YWN0aXZlX2J1Zi0+bW9kZXRfYWN0aXZlID0gYnVmW2ldOworCQkJfQorCQkJaWYgKCsrZ28tPnBhcnNlX2xlbmd0aCA9PSAyMDgpCisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1VOUEFSU0VEOgorCQkJaWYgKC0tZ28tPnBhcnNlX2xlbmd0aCA9PSAwKQorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZnby0+c3BpbmxvY2spOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfcGFyc2VfdmlkZW9fc3RyZWFtKTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGdvNzAwNyBzdHJ1Y3QuICBVc2VkIGJ5IHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBwcm9iZS4KKyAqLworc3RydWN0IGdvNzAwNyAqZ283MDA3X2FsbG9jKHN0cnVjdCBnbzcwMDdfYm9hcmRfaW5mbyAqYm9hcmQsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbzsKKwlpbnQgaTsKKworCWdvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdvNzAwNyksIEdGUF9LRVJORUwpOworCWlmIChnbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlnby0+ZGV2ID0gZGV2OworCWdvLT5ib2FyZF9pbmZvID0gYm9hcmQ7CisJZ28tPmJvYXJkX2lkID0gMDsKKwlnby0+dHVuZXJfdHlwZSA9IC0xOworCWdvLT5jaGFubmVsX251bWJlciA9IDA7CisJZ28tPm5hbWVbMF0gPSAwOworCWluaXRfTVVURVgoJmdvLT5od19sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZnby0+ZnJhbWVfd2FpdHEpOworCXNwaW5fbG9ja19pbml0KCZnby0+c3BpbmxvY2spOworCWdvLT52aWRlb19kZXYgPSBOVUxMOworCWdvLT5yZWZfY291bnQgPSAwOworCWdvLT5zdGF0dXMgPSBTVEFUVVNfSU5JVDsKKwltZW1zZXQoJmdvLT5pMmNfYWRhcHRlciwgMCwgc2l6ZW9mKGdvLT5pMmNfYWRhcHRlcikpOworCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgPSAwOworCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZnby0+aW50ZXJydXB0X3dhaXRxKTsKKwlnby0+aW5fdXNlID0gMDsKKwlnby0+aW5wdXQgPSAwOworCWlmIChib2FyZC0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgeworCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX05UU0M7CisJCWdvLT53aWR0aCA9IDcyMDsKKwkJZ28tPmhlaWdodCA9IDQ4MDsKKwkJZ28tPnNlbnNvcl9mcmFtZXJhdGUgPSAzMDAwMDsKKwl9IGVsc2UgeworCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX09USEVSOworCQlnby0+d2lkdGggPSBib2FyZC0+c2Vuc29yX3dpZHRoOworCQlnby0+aGVpZ2h0ID0gYm9hcmQtPnNlbnNvcl9oZWlnaHQ7CisJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gYm9hcmQtPnNlbnNvcl9mcmFtZXJhdGU7CisJfQorCWdvLT5lbmNvZGVyX3Zfb2Zmc2V0ID0gYm9hcmQtPnNlbnNvcl92X29mZnNldDsKKwlnby0+ZW5jb2Rlcl9oX29mZnNldCA9IGJvYXJkLT5zZW5zb3JfaF9vZmZzZXQ7CisJZ28tPmVuY29kZXJfaF9oYWx2ZSA9IDA7CisJZ28tPmVuY29kZXJfdl9oYWx2ZSA9IDA7CisJZ28tPmVuY29kZXJfc3Vic2FtcGxlID0gMDsKKwlnby0+c3RyZWFtaW5nID0gMDsKKwlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NSlBFRzsKKwlnby0+Yml0cmF0ZSA9IDE1MDAwMDA7CisJZ28tPmZwc19zY2FsZSA9IDE7CisJZ28tPnBhbGkgPSAwOworCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMV8xOworCWdvLT5nb3Bfc2l6ZSA9IDA7CisJZ28tPmlwYiA9IDA7CisJZ28tPmNsb3NlZF9nb3AgPSAwOworCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDA7CisJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMDsKKwlnby0+Z29wX2hlYWRlcl9lbmFibGUgPSAwOworCWdvLT5kdmRfbW9kZSA9IDA7CisJZ28tPmludGVybGFjZV9jb2RpbmcgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCWdvLT5tb2RldFtpXS5lbmFibGUgPSAwOzsKKwlmb3IgKGkgPSAwOyBpIDwgMTYyNDsgKytpKQorCQlnby0+bW9kZXRfbWFwW2ldID0gMDsKKwlnby0+YXVkaW9fZGVsaXZlciA9IE5VTEw7CisJZ28tPmF1ZGlvX2VuYWJsZWQgPSAwOworCUlOSVRfTElTVF9IRUFEKCZnby0+c3RyZWFtKTsKKworCXJldHVybiBnbzsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X2FsbG9jKTsKKworLyoKKyAqIERldGFjaCBhbmQgdW5yZWdpc3RlciB0aGUgZW5jb2Rlci4gIFRoZSBnbzcwMDcgc3RydWN0IHdvbid0IGJlIGZyZWVkCisgKiB1bnRpbCB2NGwyIGZpbmlzaGVzIHJlbGVhc2luZyBpdHMgcmVzb3VyY2VzIGFuZCBhbGwgYXNzb2NpYXRlZCBmZHMgYXJlCisgKiBjbG9zZWQgYnkgYXBwbGljYXRpb25zLgorICovCit2b2lkIGdvNzAwN19yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaWYgKGdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpIHsKKwkJaWYgKGkyY19kZWxfYWRhcHRlcigmZ28tPmkyY19hZGFwdGVyKSA9PSAwKQorCQkJZ28tPmkyY19hZGFwdGVyX29ubGluZSA9IDA7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnbzcwMDc6IGVycm9yIHJlbW92aW5nIEkyQyBhZGFwdGVyIVxuIik7CisJfQorCisJaWYgKGdvLT5hdWRpb19lbmFibGVkKQorCQlnbzcwMDdfc25kX3JlbW92ZShnbyk7CisJZ283MDA3X3Y0bDJfcmVtb3ZlKGdvKTsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3JlbW92ZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWZ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZTE3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jCkBAIC0wLDAgKzEsMTYzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIHRvIGdlbmVyYXRlIGEgZmlybXdhcmUgaW1hZ2UgZm9yIHRoZSBHTzcwMDdTQgorICogZW5jb2Rlci4gIE11Y2ggb2YgdGhlIGZpcm13YXJlIGlzIHJlYWQgdmVyYmF0aW0gZnJvbSBhIGZpbGUsIGJ1dCBzb21lIG9mCisgKiBpdCBjb25jZXJuaW5nIGJpdHJhdGUgY29udHJvbCBhbmQgb3RoZXIgdGhpbmdzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQKKyAqIHJ1bi10aW1lIGFyZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkuICBOb3RlIHRoYXQgdGhlIGZvcm1hdCBoZWFkZXJzCisgKiBnZW5lcmF0ZWQgaGVyZSBkbyBub3QgYWZmZWN0IHRoZSBmdW5jdGlvbmluZyBvZiB0aGUgZW5jb2RlcjsgdGhleSBhcmUKKyAqIG1lcmVseSBwYXJyb3RlZCBiYWNrIHRvIHRoZSBob3N0IGF0IHRoZSBzdGFydCBvZiBlYWNoIGZyYW1lLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorCisvKiBDb25zdGFudHMgdXNlZCBpbiB0aGUgc291cmNlIGZpcm13YXJlIGltYWdlIHRvIGRlc2NyaWJlIGNvZGUgc2VnbWVudHMgKi8KKworI2RlZmluZQlGTEFHX01PREVfTUpQRUcJCSgxKQorI2RlZmluZQlGTEFHX01PREVfTVBFRzEJCSgxPDwxKQorI2RlZmluZQlGTEFHX01PREVfTVBFRzIJCSgxPDwyKQorI2RlZmluZQlGTEFHX01PREVfTVBFRzQJCSgxPDwzKQorI2RlZmluZQlGTEFHX01PREVfSDI2MwkJKDE8PDQpCisjZGVmaW5lIEZMQUdfTU9ERV9BTEwJCShGTEFHX01PREVfTUpQRUcgfCBGTEFHX01PREVfTVBFRzEgfCBcCisJCQkJCUZMQUdfTU9ERV9NUEVHMiB8IEZMQUdfTU9ERV9NUEVHNCB8IFwKKwkJCQkJRkxBR19NT0RFX0gyNjMpCisjZGVmaW5lIEZMQUdfU1BFQ0lBTAkJKDE8PDgpCisKKyNkZWZpbmUgU1BFQ0lBTF9GUk1fSEVBRAkwCisjZGVmaW5lIFNQRUNJQUxfQlJDX0NUUkwJMQorI2RlZmluZSBTUEVDSUFMX0NPTkZJRwkJMgorI2RlZmluZSBTUEVDSUFMX1NFUUhFQUQJCTMKKyNkZWZpbmUgU1BFQ0lBTF9BVl9TWU5DCQk0CisjZGVmaW5lIFNQRUNJQUxfRklOQUwJCTUKKyNkZWZpbmUgU1BFQ0lBTF9BVURJTwkJNgorI2RlZmluZSBTUEVDSUFMX01PREVUCQk3CisKKy8qIExpdHRsZSBkYXRhIGNsYXNzIGZvciBjcmVhdGluZyBNUEVHIGhlYWRlcnMgYml0LWJ5LWJpdCAqLworCitzdHJ1Y3QgY29kZV9nZW4geworCXVuc2lnbmVkIGNoYXIgKnA7IC8qIGRlc3RpbmF0aW9uICovCisJdTMyIGE7IC8qIGNvbGxlY3RzIGJpdHMgYXQgdGhlIHRvcCBvZiB0aGUgdmFyaWFibGUgKi8KKwlpbnQgYjsgLyogYml0IHBvc2l0aW9uIG9mIG1vc3QgcmVjZW50bHktd3JpdHRlbiBiaXQgKi8KKwlpbnQgbGVuOyAvKiB3cml0dGVuIG91dCBzbyBmYXIgKi8KK307CisKKyNkZWZpbmUgQ09ERV9HRU4obmFtZSwgZGVzdCkgc3RydWN0IGNvZGVfZ2VuIG5hbWUgPSB7IGRlc3QsIDAsIDMyLCAwIH0KKworI2RlZmluZSBDT0RFX0FERChuYW1lLCB2YWwsIGxlbmd0aCkgZG8geyBcCisJbmFtZS5iIC09IChsZW5ndGgpOyBcCisJbmFtZS5hIHw9ICh2YWwpIDw8IG5hbWUuYjsgXAorCXdoaWxlIChuYW1lLmIgPD0gMjQpIHsgXAorCQkqbmFtZS5wID0gbmFtZS5hID4+IDI0OyBcCisJCSsrbmFtZS5wOyBcCisJCW5hbWUuYSA8PD0gODsgXAorCQluYW1lLmIgKz0gODsgXAorCQluYW1lLmxlbiArPSA4OyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIENPREVfTEVOR1RIKG5hbWUpIChuYW1lLmxlbiArICgzMiAtIG5hbWUuYikpCisKKy8qIFRhYmxlcyBmb3IgY3JlYXRpbmcgdGhlIGJpdHJhdGUgY29udHJvbCBkYXRhICovCisKK3N0YXRpYyBjb25zdCBzMTYgY29udmVyZ2Vfc3BlZWRfaXBbMTAxXSA9IHsKKwkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKwkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLAorCTIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDMsCisJMywgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNCwKKwk1LCA1LCA1LCA2LCA2LCA2LCA3LCA3LCA4LCA4LAorCTksIDEwLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsCisJMTksIDIwLCAyMiwgMjMsIDI1LCAyNywgMzAsIDMyLCAzNSwgMzgsCisJNDEsIDQ1LCA0OSwgNTMsIDU4LCA2MywgNjksIDc2LCA4MywgOTEsCisJMTAwCit9OworCitzdGF0aWMgY29uc3QgczE2IGNvbnZlcmdlX3NwZWVkX2lwYlsxMDFdID0geworCTMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsCisJMywgMywgMywgMywgMywgMywgMywgMywgMywgMywKKwkzLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LAorCTQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDUsIDYsCisJNiwgNiwgNiwgNywgNywgNywgNywgOCwgOCwgOSwKKwk5LCA5LCAxMCwgMTAsIDExLCAxMiwgMTIsIDEzLCAxNCwgMTQsCisJMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjIsIDIzLCAyNSwgMjYsCisJMjgsIDMwLCAzMiwgMzQsIDM3LCA0MCwgNDIsIDQ2LCA0OSwgNTMsCisJNTcsIDYxLCA2NiwgNzEsIDc3LCA4MywgOTAsIDk3LCAxMDYsIDExNSwKKwkxMjUsIDEzNSwgMTQ3LCAxNjEsIDE3NSwgMTkxLCAyMDksIDIyOCwgMjQ5LCAyNzMsCisJMzAwCit9OworCitzdGF0aWMgY29uc3QgczE2IExBTUJEQV90YWJsZVs0XVsxMDFdID0geworCXsJMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsCisJCTE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjIsIDIyLAorCQkyMiwgMjMsIDIzLCAyNCwgMjQsIDI1LCAyNSwgMjUsIDI2LCAyNiwKKwkJMjcsIDI3LCAyOCwgMjgsIDI5LCAyOSwgMzAsIDMxLCAzMSwgMzIsCisJCTMyLCAzMywgMzMsIDM0LCAzNSwgMzUsIDM2LCAzNywgMzcsIDM4LAorCQkzOSwgMzksIDQwLCA0MSwgNDIsIDQyLCA0MywgNDQsIDQ1LCA0NiwKKwkJNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsCisJCTU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LAorCQk2NywgNjgsIDY5LCA3MCwgNzIsIDczLCA3NCwgNzYsIDc3LCA3OCwKKwkJODAsIDgxLCA4MywgODQsIDg2LCA4NywgODksIDkwLCA5MiwgOTQsCisJCTk2CisJfSwKKwl7CisJCTIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIyLCAyMiwgMjMsIDIzLAorCQkyMywgMjQsIDI0LCAyNSwgMjUsIDI2LCAyNiwgMjcsIDI3LCAyOCwKKwkJMjgsIDI5LCAyOSwgMzAsIDMwLCAzMSwgMzEsIDMyLCAzMywgMzMsCisJCTM0LCAzNCwgMzUsIDM2LCAzNiwgMzcsIDM4LCAzOCwgMzksIDQwLAorCQk0MCwgNDEsIDQyLCA0MywgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwKKwkJNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsCisJCTU4LCA1OSwgNjAsIDYxLCA2MiwgNjQsIDY1LCA2NiwgNjcsIDY4LAorCQk3MCwgNzEsIDcyLCA3MywgNzUsIDc2LCA3OCwgNzksIDgwLCA4MiwKKwkJODMsIDg1LCA4NiwgODgsIDkwLCA5MSwgOTMsIDk1LCA5NiwgOTgsCisJCTEwMCwgMTAyLCAxMDMsIDEwNSwgMTA3LCAxMDksIDExMSwgMTEzLCAxMTUsIDExNywKKwkJMTIwCisJfSwKKwl7CisJCTI0LCAyNCwgMjQsIDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsIDI4LAorCQkyOCwgMjksIDI5LCAzMCwgMzAsIDMxLCAzMSwgMzIsIDMzLCAzMywKKwkJMzQsIDM0LCAzNSwgMzYsIDM2LCAzNywgMzgsIDM4LCAzOSwgNDAsCisJCTQxLCA0MSwgNDIsIDQzLCA0NCwgNDQsIDQ1LCA0NiwgNDcsIDQ4LAorCQk0OSwgNTAsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywKKwkJNTgsIDU5LCA2MCwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjksCisJCTcwLCA3MSwgNzIsIDc0LCA3NSwgNzYsIDc4LCA3OSwgODEsIDgyLAorCQk4NCwgODUsIDg3LCA4OCwgOTAsIDkyLCA5MywgOTUsIDk3LCA5OCwKKwkJMTAwLCAxMDIsIDEwNCwgMTA2LCAxMDgsIDExMCwgMTEyLCAxMTQsIDExNiwgMTE4LAorCQkxMjAsIDEyMiwgMTI0LCAxMjcsIDEyOSwgMTMxLCAxMzQsIDEzNiwgMTM4LCAxNDEsCisJCTE0NAorCX0sCisJeworCQkzMiwgMzIsIDMzLCAzMywgMzQsIDM0LCAzNSwgMzYsIDM2LCAzNywKKwkJMzgsIDM4LCAzOSwgNDAsIDQxLCA0MSwgNDIsIDQzLCA0NCwgNDQsCisJCTQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUwLCA1MSwgNTIsIDUzLAorCQk1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjIsIDYzLCA2NCwKKwkJNjUsIDY2LCA2NywgNjksIDcwLCA3MSwgNzIsIDc0LCA3NSwgNzYsCisJCTc4LCA3OSwgODEsIDgyLCA4NCwgODUsIDg3LCA4OCwgOTAsIDkyLAorCQk5MywgOTUsIDk3LCA5OCwgMTAwLCAxMDIsIDEwNCwgMTA2LCAxMDgsIDExMCwKKwkJMTEyLCAxMTQsIDExNiwgMTE4LCAxMjAsIDEyMiwgMTI0LCAxMjcsIDEyOSwgMTMxLAorCQkxMzQsIDEzNiwgMTM5LCAxNDEsIDE0NCwgMTQ2LCAxNDksIDE1MiwgMTU0LCAxNTcsCisJCTE2MCwgMTYzLCAxNjYsIDE2OSwgMTcyLCAxNzUsIDE3OCwgMTgxLCAxODUsIDE4OCwKKwkJMTkyCisJfQorfTsKKworLyogTVBFRyBibGFuayBmcmFtZSBnZW5lcmF0aW9uIHRhYmxlcyAqLworCitlbnVtIG1wZWdfZnJhbWVfdHlwZSB7CisJUEZSQU1FLAorCUJGUkFNRV9QUkUsCisJQkZSQU1FX1BPU1QsCisJQkZSQU1FX0JJRElSLAorCUJGUkFNRV9FTVBUWQorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhZGRyaW5jdGFiWzMzXVsyXSA9IHsKKwl7IDB4MDEsIDEgfSwJeyAweDAzLCAzIH0sCXsgMHgwMiwgMyB9LAl7IDB4MDMsIDQgfSwKKwl7IDB4MDIsIDQgfSwJeyAweDAzLCA1IH0sCXsgMHgwMiwgNSB9LAl7IDB4MDcsIDcgfSwKKwl7IDB4MDYsIDcgfSwJeyAweDBiLCA4IH0sCXsgMHgwYSwgOCB9LAl7IDB4MDksIDggfSwKKwl7IDB4MDgsIDggfSwJeyAweDA3LCA4IH0sCXsgMHgwNiwgOCB9LAl7IDB4MTcsIDEwIH0sCisJeyAweDE2LCAxMCB9LAl7IDB4MTUsIDEwIH0sCXsgMHgxNCwgMTAgfSwJeyAweDEzLCAxMCB9LAorCXsgMHgxMiwgMTAgfSwJeyAweDIzLCAxMSB9LAl7IDB4MjIsIDExIH0sCXsgMHgyMSwgMTEgfSwKKwl7IDB4MjAsIDExIH0sCXsgMHgxZiwgMTEgfSwJeyAweDFlLCAxMSB9LAl7IDB4MWQsIDExIH0sCisJeyAweDFjLCAxMSB9LAl7IDB4MWIsIDExIH0sCXsgMHgxYSwgMTEgfSwJeyAweDE5LCAxMSB9LAorCXsgMHgxOCwgMTEgfQorfTsKKworLyogU3RhbmRhcmQgSlBFRyB0YWJsZXMgKi8KKworc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfaW50cmFfcXVhbnRfdGFibGVbXSA9IHsKKwkgOCwgMTYsIDE5LCAyMiwgMjYsIDI3LCAyOSwgMzQsCisJMTYsIDE2LCAyMiwgMjQsIDI3LCAyOSwgMzQsIDM3LAorCTE5LCAyMiwgMjYsIDI3LCAyOSwgMzQsIDM0LCAzOCwKKwkyMiwgMjIsIDI2LCAyNywgMjksIDM0LCAzNywgNDAsCisJMjIsIDI2LCAyNywgMjksIDMyLCAzNSwgNDAsIDQ4LAorCTI2LCAyNywgMjksIDMyLCAzNSwgNDAsIDQ4LCA1OCwKKwkyNiwgMjcsIDI5LCAzNCwgMzgsIDQ2LCA1NiwgNjksCisJMjcsIDI5LCAzNSwgMzgsIDQ2LCA1NiwgNjksIDgzCit9OworCitzdGF0aWMgY29uc3QgdTggYml0c19kY19sdW1pbmFuY2VbXSA9IHsKKwkwLCAwLCAxLCA1LCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgY29uc3QgdTggdmFsX2RjX2x1bWluYW5jZVtdID0geworCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMQorfTsKKworc3RhdGljIGNvbnN0IHU4IGJpdHNfZGNfY2hyb21pbmFuY2VbXSA9IHsKKwkwLCAwLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgY29uc3QgdTggdmFsX2RjX2Nocm9taW5hbmNlW10gPSB7CisJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCit9OworCitzdGF0aWMgY29uc3QgdTggYml0c19hY19sdW1pbmFuY2VbXSA9IHsKKwkwLCAwLCAyLCAxLCAzLCAzLCAyLCA0LCAzLCA1LCA1LCA0LCA0LCAwLCAwLCAxLCAweDdkCit9OworCitzdGF0aWMgY29uc3QgdTggdmFsX2FjX2x1bWluYW5jZVtdID0geworCTB4MDEsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MTEsIDB4MDUsIDB4MTIsCisJMHgyMSwgMHgzMSwgMHg0MSwgMHgwNiwgMHgxMywgMHg1MSwgMHg2MSwgMHgwNywKKwkweDIyLCAweDcxLCAweDE0LCAweDMyLCAweDgxLCAweDkxLCAweGExLCAweDA4LAorCTB4MjMsIDB4NDIsIDB4YjEsIDB4YzEsIDB4MTUsIDB4NTIsIDB4ZDEsIDB4ZjAsCisJMHgyNCwgMHgzMywgMHg2MiwgMHg3MiwgMHg4MiwgMHgwOSwgMHgwYSwgMHgxNiwKKwkweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDI1LCAweDI2LCAweDI3LCAweDI4LAorCTB4MjksIDB4MmEsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksCisJMHgzYSwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwgMHg0OSwKKwkweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LCAweDU5LAorCTB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksCisJMHg2YSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwKKwkweDdhLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LAorCTB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCisJMHg5OSwgMHg5YSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKKwkweGE4LCAweGE5LCAweGFhLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LAorCTB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsCisJMHhjNiwgMHhjNywgMHhjOCwgMHhjOSwgMHhjYSwgMHhkMiwgMHhkMywgMHhkNCwKKwkweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LCAweGQ5LCAweGRhLCAweGUxLCAweGUyLAorCTB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksIDB4ZWEsCisJMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywgMHhmOCwKKwkweGY5LCAweGZhCit9OworCitzdGF0aWMgY29uc3QgdTggYml0c19hY19jaHJvbWluYW5jZVtdID0geworCTAsIDAsIDIsIDEsIDIsIDQsIDQsIDMsIDQsIDcsIDUsIDQsIDQsIDAsIDEsIDIsIDB4NzcKK307CisKK3N0YXRpYyBjb25zdCB1OCB2YWxfYWNfY2hyb21pbmFuY2VbXSA9IHsKKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDExLCAweDA0LCAweDA1LCAweDIxLAorCTB4MzEsIDB4MDYsIDB4MTIsIDB4NDEsIDB4NTEsIDB4MDcsIDB4NjEsIDB4NzEsCisJMHgxMywgMHgyMiwgMHgzMiwgMHg4MSwgMHgwOCwgMHgxNCwgMHg0MiwgMHg5MSwKKwkweGExLCAweGIxLCAweGMxLCAweDA5LCAweDIzLCAweDMzLCAweDUyLCAweGYwLAorCTB4MTUsIDB4NjIsIDB4NzIsIDB4ZDEsIDB4MGEsIDB4MTYsIDB4MjQsIDB4MzQsCisJMHhlMSwgMHgyNSwgMHhmMSwgMHgxNywgMHgxOCwgMHgxOSwgMHgxYSwgMHgyNiwKKwkweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDM1LCAweDM2LCAweDM3LCAweDM4LAorCTB4MzksIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsCisJMHg0OSwgMHg0YSwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKKwkweDU5LCAweDVhLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LAorCTB4NjksIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCisJMHg3OSwgMHg3YSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKwkweDg4LCAweDg5LCAweDhhLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LAorCTB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsCisJMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwKKwkweGI1LCAweGI2LCAweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLAorCTB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsCisJMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwKKwkweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LCAweGU5LAorCTB4ZWEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCisJMHhmOSwgMHhmYQorfTsKKworLyogWmlnLXphZyBtYXBwaW5nIGZvciBxdWFudCB0YWJsZQorICoKKyAqIE9LLCBsZXQncyBkbyB0aGlzIG1hcHBpbmcgb24gdGhlIGFjdHVhbCB0YWJsZSBhYm92ZSBzbyBpdCBkb2Vzbid0IGhhdmUKKyAqIHRvIGJlIGRvbmUgb24gdGhlIGZseS4KKyAqLworc3RhdGljIGNvbnN0IGludCB6els2NF0gPSB7CisJMCwgICAxLCAgOCwgMTYsICA5LCAgMiwgIDMsIDEwLCAxNywgMjQsIDMyLCAyNSwgMTgsIDExLCAgNCwgIDUsCisJMTIsIDE5LCAyNiwgMzMsIDQwLCA0OCwgNDEsIDM0LCAyNywgMjAsIDEzLCAgNiwgIDcsIDE0LCAyMSwgMjgsCisJMzUsIDQyLCA0OSwgNTYsIDU3LCA1MCwgNDMsIDM2LCAyOSwgMjIsIDE1LCAyMywgMzAsIDM3LCA0NCwgNTEsCisJNTgsIDU5LCA1MiwgNDUsIDM4LCAzMSwgMzksIDQ2LCA1MywgNjAsIDYxLCA1NCwgNDcsIDU1LCA2MiwgNjMKK307CisKK3N0YXRpYyBpbnQgY29weV9wYWNrYWdlcyh1MTYgKmRlc3QsIHUxNiAqc3JjLCBpbnQgcGtnX2NudCwgaW50IHNwYWNlKQoreworCWludCBpLCBjbnQgPSBwa2dfY250ICogMzI7CisKKwlpZiAoc3BhY2UgPCBjbnQpCisJCXJldHVybiAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7ICsraSkKKwkJZGVzdFtpXSA9IF9fY3B1X3RvX2xlMTYoc3JjW2ldKTsKKworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgbWpwZWdfZnJhbWVfaGVhZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBxKQoreworCWludCBpLCBwID0gMDsKKworCWJ1ZltwKytdID0gMHhmZjsKKwlidWZbcCsrXSA9IDB4ZDg7CisJYnVmW3ArK10gPSAweGZmOworCWJ1ZltwKytdID0gMHhkYjsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAyICsgNjU7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gZGVmYXVsdF9pbnRyYV9xdWFudF90YWJsZVswXTsKKwlmb3IgKGkgPSAxOyBpIDwgNjQ7ICsraSkKKwkJLyogYnVmW3ArK10gPSAoZGVmYXVsdF9pbnRyYV9xdWFudF90YWJsZVtpXSAqIHEpID4+IDM7ICovCisJCWJ1ZltwKytdID0gKGRlZmF1bHRfaW50cmFfcXVhbnRfdGFibGVbenpbaV1dICogcSkgPj4gMzsKKwlidWZbcCsrXSA9IDB4ZmY7CisJYnVmW3ArK10gPSAweGMwOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDE3OworCWJ1ZltwKytdID0gODsKKwlidWZbcCsrXSA9IGdvLT5oZWlnaHQgPj4gODsKKwlidWZbcCsrXSA9IGdvLT5oZWlnaHQgJiAweGZmOworCWJ1ZltwKytdID0gZ28tPndpZHRoID4+IDg7CisJYnVmW3ArK10gPSBnby0+d2lkdGggJiAweGZmOworCWJ1ZltwKytdID0gMzsKKwlidWZbcCsrXSA9IDE7CisJYnVmW3ArK10gPSAweDIyOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDI7CisJYnVmW3ArK10gPSAweDExOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDM7CisJYnVmW3ArK10gPSAweDExOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDB4ZmY7CisJYnVmW3ArK10gPSAweGM0OworCWJ1ZltwKytdID0gNDE4ID4+IDg7CisJYnVmW3ArK10gPSA0MTggJiAweGZmOworCWJ1ZltwKytdID0gMHgwMDsKKwltZW1jcHkoYnVmICsgcCwgYml0c19kY19sdW1pbmFuY2UgKyAxLCAxNik7CisJcCArPSAxNjsKKwltZW1jcHkoYnVmICsgcCwgdmFsX2RjX2x1bWluYW5jZSwgc2l6ZW9mKHZhbF9kY19sdW1pbmFuY2UpKTsKKwlwICs9IHNpemVvZih2YWxfZGNfbHVtaW5hbmNlKTsKKwlidWZbcCsrXSA9IDB4MDE7CisJbWVtY3B5KGJ1ZiArIHAsIGJpdHNfZGNfY2hyb21pbmFuY2UgKyAxLCAxNik7CisJcCArPSAxNjsKKwltZW1jcHkoYnVmICsgcCwgdmFsX2RjX2Nocm9taW5hbmNlLCBzaXplb2YodmFsX2RjX2Nocm9taW5hbmNlKSk7CisJcCArPSBzaXplb2YodmFsX2RjX2Nocm9taW5hbmNlKTsKKwlidWZbcCsrXSA9IDB4MTA7CisJbWVtY3B5KGJ1ZiArIHAsIGJpdHNfYWNfbHVtaW5hbmNlICsgMSwgMTYpOworCXAgKz0gMTY7CisJbWVtY3B5KGJ1ZiArIHAsIHZhbF9hY19sdW1pbmFuY2UsIHNpemVvZih2YWxfYWNfbHVtaW5hbmNlKSk7CisJcCArPSBzaXplb2YodmFsX2FjX2x1bWluYW5jZSk7CisJYnVmW3ArK10gPSAweDExOworCW1lbWNweShidWYgKyBwLCBiaXRzX2FjX2Nocm9taW5hbmNlICsgMSwgMTYpOworCXAgKz0gMTY7CisJbWVtY3B5KGJ1ZiArIHAsIHZhbF9hY19jaHJvbWluYW5jZSwgc2l6ZW9mKHZhbF9hY19jaHJvbWluYW5jZSkpOworCXAgKz0gc2l6ZW9mKHZhbF9hY19jaHJvbWluYW5jZSk7CisJYnVmW3ArK10gPSAweGZmOworCWJ1ZltwKytdID0gMHhkYTsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAxMjsKKwlidWZbcCsrXSA9IDM7CisJYnVmW3ArK10gPSAxOworCWJ1ZltwKytdID0gMHgwMDsKKwlidWZbcCsrXSA9IDI7CisJYnVmW3ArK10gPSAweDExOworCWJ1ZltwKytdID0gMzsKKwlidWZbcCsrXSA9IDB4MTE7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gNjM7CisJYnVmW3ArK10gPSAwOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW50IGdlbl9tanBlZ2hkcl90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSkKK3sKKwl1OCAqYnVmOworCXUxNiBtZW0gPSAweDNlMDA7CisJdW5zaWduZWQgaW50IGFkZHIgPSAweDE5OworCWludCBzaXplID0gMCwgaSwgb2ZmID0gMCwgY2h1bms7CisKKwlidWYgPSBrbWFsbG9jKDQwOTYsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlIDQwOTYgYnl0ZXMgZm9yICIKKwkJCQkiZmlybXdhcmUgY29uc3RydWN0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoYnVmLCAwLCA0MDk2KTsKKworCWZvciAoaSA9IDE7IGkgPCAzMjsgKytpKSB7CisJCW1qcGVnX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgc2l6ZSwgaSk7CisJCXNpemUgKz0gODA7CisJfQorCWNodW5rID0gbWpwZWdfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBzaXplLCAxKTsKKwltZW1tb3ZlKGJ1ZiArIHNpemUsIGJ1ZiArIHNpemUgKyA4MCwgY2h1bmsgLSA4MCk7CisJc2l6ZSArPSBjaHVuayAtIDgwOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gY2h1bmsgKiAyKSB7CisJCWlmIChzcGFjZSAtIG9mZiA8IDMyKSB7CisJCQlvZmYgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNvZGVbb2ZmICsgMV0gPSBfX2NwdV90b19sZTE2KDB4ODAwMCB8IG1lbSk7CisKKwkJY2h1bmsgPSAyODsKKwkJaWYgKG1lbSArIGNodW5rID4gMHg0MDAwKQorCQkJY2h1bmsgPSAweDQwMDAgLSBtZW07CisJCWlmIChpICsgMiAqIGNodW5rID4gc2l6ZSkKKwkJCWNodW5rID0gKHNpemUgLSBpKSAvIDI7CisKKwkJaWYgKGNodW5rIDwgMjgpIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHg0MDAwIHwgY2h1bmspOworCQkJY29kZVtvZmYgKyAzMV0gPSBfX2NwdV90b19sZTE2KGFkZHIrKyk7CisJCQltZW0gPSAweDNlMDA7CisJCX0gZWxzZSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4MTAwMCB8IDI4KTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gMDsKKwkJCW1lbSArPSAyODsKKwkJfQorCisJCW1lbWNweSgmY29kZVtvZmYgKyAyXSwgYnVmICsgaSwgY2h1bmsgKiAyKTsKKwkJb2ZmICs9IDMyOworCX0KK2RvbmU6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gb2ZmOworfQorCitzdGF0aWMgaW50IG1wZWcxX2ZyYW1lX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLAorCQlpbnQgbW9kdWxvLCBpbnQgcGljdF9zdHJ1Y3QsIGVudW0gbXBlZ19mcmFtZV90eXBlIGZyYW1lKQoreworCWludCBpLCBqLCBtYl9jb2RlLCBtYl9sZW47CisJaW50IHJvd3MgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IGdvLT5oZWlnaHQgLyAzMiA6IGdvLT5oZWlnaHQgLyAxNjsKKwlDT0RFX0dFTihjLCBidWYgKyA2KTsKKworCXN3aXRjaCAoZnJhbWUpIHsKKwljYXNlIFBGUkFNRToKKwkJbWJfY29kZSA9IDB4MTsKKwkJbWJfbGVuID0gMzsKKwkJYnJlYWs7CisJY2FzZSBCRlJBTUVfUFJFOgorCQltYl9jb2RlID0gMHgyOworCQltYl9sZW4gPSA0OworCQlicmVhazsKKwljYXNlIEJGUkFNRV9QT1NUOgorCQltYl9jb2RlID0gMHgyOworCQltYl9sZW4gPSAzOworCQlicmVhazsKKwljYXNlIEJGUkFNRV9CSURJUjoKKwkJbWJfY29kZSA9IDB4MjsKKwkJbWJfbGVuID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyoga2VlcCB0aGUgY29tcGlsZXIgaGFwcHkgKi8KKwkJbWJfY29kZSA9IG1iX2xlbiA9IDA7CisJCWJyZWFrOworCX0KKworCUNPREVfQUREKGMsIGZyYW1lID09IFBGUkFNRSA/IDB4MiA6IDB4MywgMTMpOworCUNPREVfQUREKGMsIDB4ZmZmZiwgMTYpOworCUNPREVfQUREKGMsIGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDB4NyA6IDB4NCwgNCk7CisJaWYgKGZyYW1lICE9IFBGUkFNRSkKKwkJQ09ERV9BREQoYywgZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMHg3IDogMHg0LCA0KTsKKwllbHNlCisJCUNPREVfQUREKGMsIDAsIDQpOyAvKiBJcyB0aGlzIHN1cHBvc2VkIHRvIGJlIGhlcmU/PyAqLworCUNPREVfQUREKGMsIDAsIDMpOyAvKiBXaGF0IGlzIHRoaXM/PyAqLworCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCWogPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJaWYgKGogIT0gOCkKKwkJQ09ERV9BREQoYywgMCwgaik7CisKKwlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyKSB7CisJCUNPREVfQUREKGMsIDB4MSwgMjQpOworCQlDT0RFX0FERChjLCAweGI1LCA4KTsKKwkJQ09ERV9BREQoYywgMHg4NDQsIDEyKTsKKwkJQ09ERV9BREQoYywgZnJhbWUgPT0gUEZSQU1FID8gMHhmZiA6IDB4NDQsIDgpOworCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpIHsKKwkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0LCA0KTsKKwkJCWlmIChnby0+ZHZkX21vZGUpCisJCQkJQ09ERV9BREQoYywgMHgwMDAsIDExKTsKKwkJCWVsc2UKKwkJCQlDT0RFX0FERChjLCAweDIwMCwgMTEpOworCQl9IGVsc2UgeworCQkJQ09ERV9BREQoYywgMHgzLCA0KTsKKwkJCUNPREVfQUREKGMsIDB4MjBjLCAxMSk7CisJCX0KKwkJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJCWogPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJCWlmIChqICE9IDgpCisJCQlDT0RFX0FERChjLCAwLCBqKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcm93czsgKytpKSB7CisJCUNPREVfQUREKGMsIDEsIDI0KTsKKwkJQ09ERV9BREQoYywgaSArIDEsIDgpOworCQlDT0RFX0FERChjLCAweDIsIDYpOworCQlDT0RFX0FERChjLCAweDEsIDEpOworCQlDT0RFX0FERChjLCBtYl9jb2RlLCBtYl9sZW4pOworCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpIHsKKwkJCUNPREVfQUREKGMsIDB4MSwgMik7CisJCQlDT0RFX0FERChjLCBwaWN0X3N0cnVjdCA9PSAxID8gMHgwIDogMHgxLCAxKTsKKwkJfQorCQlpZiAoZnJhbWUgPT0gQkZSQU1FX0JJRElSKSB7CisJCQlDT0RFX0FERChjLCAweDMsIDIpOworCQkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0ID09IDEgPyAweDAgOiAweDEsIDEpOworCQl9CisJCUNPREVfQUREKGMsIDB4MywgMik7CisJCWZvciAoaiA9IChnby0+d2lkdGggPj4gNCkgLSAyOyBqID49IDMzOyBqIC09IDMzKQorCQkJQ09ERV9BREQoYywgMHg4LCAxMSk7CisJCUNPREVfQUREKGMsIGFkZHJpbmN0YWJbal1bMF0sIGFkZHJpbmN0YWJbal1bMV0pOworCQlDT0RFX0FERChjLCBtYl9jb2RlLCBtYl9sZW4pOworCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpIHsKKwkJCUNPREVfQUREKGMsIDB4MSwgMik7CisJCQlDT0RFX0FERChjLCBwaWN0X3N0cnVjdCA9PSAxID8gMHgwIDogMHgxLCAxKTsKKwkJfQorCQlpZiAoZnJhbWUgPT0gQkZSQU1FX0JJRElSKSB7CisJCQlDT0RFX0FERChjLCAweDMsIDIpOworCQkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0ID09IDEgPyAweDAgOiAweDEsIDEpOworCQl9CisJCUNPREVfQUREKGMsIDB4MywgMik7CisKKwkJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJCWogPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJCWlmIChqICE9IDgpCisJCQlDT0RFX0FERChjLCAwLCBqKTsKKwl9CisKKwlpID0gQ09ERV9MRU5HVEgoYykgKyA0ICogODsKKwlidWZbMl0gPSAweDAwOworCWJ1ZlszXSA9IDB4MDA7CisJYnVmWzRdID0gMHgwMTsKKwlidWZbNV0gPSAweDAwOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG1wZWcxX3NlcXVlbmNlX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZXh0KQoreworCWludCBpLCBhc3BlY3RfcmF0aW8sIHBpY3R1cmVfcmF0ZTsKKwlDT0RFX0dFTihjLCBidWYgKyA2KTsKKworCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEpIHsKKwkJc3dpdGNoIChnby0+YXNwZWN0X3JhdGlvKSB7CisJCWNhc2UgR083MDA3X1JBVElPXzRfMzoKKwkJCWFzcGVjdF9yYXRpbyA9IGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MgPyAzIDogMjsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19SQVRJT18xNl85OgorCQkJYXNwZWN0X3JhdGlvID0gZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQyA/IDUgOiA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhc3BlY3RfcmF0aW8gPSAxOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGdvLT5hc3BlY3RfcmF0aW8pIHsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fNF8zOgorCQkJYXNwZWN0X3JhdGlvID0gMjsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19SQVRJT18xNl85OgorCQkJYXNwZWN0X3JhdGlvID0gMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXNwZWN0X3JhdGlvID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXN3aXRjaCAoZ28tPnNlbnNvcl9mcmFtZXJhdGUpIHsKKwljYXNlIDI0MDAwOgorCQlwaWN0dXJlX3JhdGUgPSAxOworCQlicmVhazsKKwljYXNlIDI0MDI0OgorCQlwaWN0dXJlX3JhdGUgPSAyOworCQlicmVhazsKKwljYXNlIDI1MDI1OgorCQlwaWN0dXJlX3JhdGUgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IDYgOiAzOworCQlicmVhazsKKwljYXNlIDMwMDAwOgorCQlwaWN0dXJlX3JhdGUgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IDcgOiA0OworCQlicmVhazsKKwljYXNlIDMwMDMwOgorCQlwaWN0dXJlX3JhdGUgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IDggOiA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaWN0dXJlX3JhdGUgPSA1OyAvKiAzMCBmcHMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgZGVmYXVsdCAqLworCQlicmVhazsKKwl9CisKKwlDT0RFX0FERChjLCBnby0+d2lkdGgsIDEyKTsKKwlDT0RFX0FERChjLCBnby0+aGVpZ2h0LCAxMik7CisJQ09ERV9BREQoYywgYXNwZWN0X3JhdGlvLCA0KTsKKwlDT0RFX0FERChjLCBwaWN0dXJlX3JhdGUsIDQpOworCUNPREVfQUREKGMsIGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDIwMDAwIDogMHgzZmZmZiwgMTgpOworCUNPREVfQUREKGMsIDEsIDEpOworCUNPREVfQUREKGMsIGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDExMiA6IDIwLCAxMCk7CisJQ09ERV9BREQoYywgMCwgMyk7CisKKwkvKiBCeXRlLWFsaWduIHdpdGggemVyb3MgKi8KKwlpID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCWlmIChpICE9IDgpCisJCUNPREVfQUREKGMsIDAsIGkpOworCisJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMikgeworCQlDT0RFX0FERChjLCAweDEsIDI0KTsKKwkJQ09ERV9BREQoYywgMHhiNSwgOCk7CisJCUNPREVfQUREKGMsIDB4MTQ4LCAxMik7CisJCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJCUNPREVfQUREKGMsIDB4MjAwMDEsIDIwKTsKKwkJZWxzZQorCQkJQ09ERV9BREQoYywgMHhhMDAwMSwgMjApOworCQlDT0RFX0FERChjLCAwLCAxNik7CisKKwkJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJCWkgPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJCWlmIChpICE9IDgpCisJCQlDT0RFX0FERChjLCAwLCBpKTsKKworCQlpZiAoZXh0KSB7CisJCQlDT0RFX0FERChjLCAweDEsIDI0KTsKKwkJCUNPREVfQUREKGMsIDB4YjUyLCAxMik7CisJCQlDT0RFX0FERChjLCBnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDID8gMiA6IDEsIDMpOworCQkJQ09ERV9BREQoYywgMHgxMDUsIDkpOworCQkJQ09ERV9BREQoYywgMHg1MDUsIDE2KTsKKwkJCUNPREVfQUREKGMsIGdvLT53aWR0aCwgMTQpOworCQkJQ09ERV9BREQoYywgMSwgMSk7CisJCQlDT0RFX0FERChjLCBnby0+aGVpZ2h0LCAxNCk7CisKKwkJCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCQkJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwkJCWlmIChpICE9IDgpCisJCQkJQ09ERV9BREQoYywgMCwgaSk7CisJCX0KKwl9CisKKwlpID0gQ09ERV9MRU5HVEgoYykgKyA0ICogODsKKwlidWZbMF0gPSBpICYgMHhmZjsKKwlidWZbMV0gPSBpID4+IDg7CisJYnVmWzJdID0gMHgwMDsKKwlidWZbM10gPSAweDAwOworCWJ1Zls0XSA9IDB4MDE7CisJYnVmWzVdID0gMHhiMzsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBnZW5fbXBlZzFoZHJfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJdTE2ICpjb2RlLCBpbnQgc3BhY2UsIGludCAqZnJhbWVsZW4pCit7CisJdTggKmJ1ZjsKKwl1MTYgbWVtID0gMHgzZTAwOworCXVuc2lnbmVkIGludCBhZGRyID0gMHgxOTsKKwlpbnQgaSwgb2ZmID0gMCwgY2h1bms7CisKKwlidWYgPSBrbWFsbG9jKDUxMjAsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlIDUxMjAgYnl0ZXMgZm9yICIKKwkJCQkiZmlybXdhcmUgY29uc3RydWN0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoYnVmLCAwLCA1MTIwKTsKKwlmcmFtZWxlblswXSA9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmLCAwLCAxLCBQRlJBTUUpOworCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJZnJhbWVsZW5bMF0gKz0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBmcmFtZWxlblswXSAvIDgsCisJCQkJCQkJMCwgMiwgUEZSQU1FKTsKKwlidWZbMF0gPSBmcmFtZWxlblswXSAmIDB4ZmY7CisJYnVmWzFdID0gZnJhbWVsZW5bMF0gPj4gODsKKwlpID0gMzY4OworCWZyYW1lbGVuWzFdID0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCAxLCBCRlJBTUVfUFJFKTsKKwlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCWZyYW1lbGVuWzFdICs9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSArIGZyYW1lbGVuWzFdIC8gOCwKKwkJCQkJCQkwLCAyLCBCRlJBTUVfUFJFKTsKKwlidWZbaV0gPSBmcmFtZWxlblsxXSAmIDB4ZmY7CisJYnVmW2kgKyAxXSA9IGZyYW1lbGVuWzFdID4+IDg7CisJaSArPSAxNjMyOworCWZyYW1lbGVuWzJdID0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCAxLCBCRlJBTUVfUE9TVCk7CisJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQlmcmFtZWxlblsyXSArPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGkgKyBmcmFtZWxlblsyXSAvIDgsCisJCQkJCQkJMCwgMiwgQkZSQU1FX1BPU1QpOworCWJ1ZltpXSA9IGZyYW1lbGVuWzJdICYgMHhmZjsKKwlidWZbaSArIDFdID0gZnJhbWVsZW5bMl0gPj4gODsKKwlpICs9IDE0MzI7CisJZnJhbWVsZW5bM10gPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIDEsIEJGUkFNRV9CSURJUik7CisJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQlmcmFtZWxlblszXSArPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGkgKyBmcmFtZWxlblszXSAvIDgsCisJCQkJCQkJMCwgMiwgQkZSQU1FX0JJRElSKTsKKwlidWZbaV0gPSBmcmFtZWxlblszXSAmIDB4ZmY7CisJYnVmW2kgKyAxXSA9IGZyYW1lbGVuWzNdID4+IDg7CisJaSArPSAxNjMyICsgMTY7CisJbXBlZzFfc2VxdWVuY2VfaGVhZGVyKGdvLCBidWYgKyBpLCAwKTsKKwlpICs9IDQwOworCWZvciAoaSA9IDA7IGkgPCA1MTIwOyBpICs9IGNodW5rICogMikgeworCQlpZiAoc3BhY2UgLSBvZmYgPCAzMikgeworCQkJb2ZmID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQljb2RlW29mZiArIDFdID0gX19jcHVfdG9fbGUxNigweDgwMDAgfCBtZW0pOworCisJCWNodW5rID0gMjg7CisJCWlmIChtZW0gKyBjaHVuayA+IDB4NDAwMCkKKwkJCWNodW5rID0gMHg0MDAwIC0gbWVtOworCQlpZiAoaSArIDIgKiBjaHVuayA+IDUxMjApCisJCQljaHVuayA9ICg1MTIwIC0gaSkgLyAyOworCisJCWlmIChjaHVuayA8IDI4KSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4NDAwMCB8IGNodW5rKTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gX19jcHVfdG9fbGUxNihhZGRyKTsKKwkJCWlmIChtZW0gKyBjaHVuayA9PSAweDQwMDApIHsKKwkJCQltZW0gPSAweDNlMDA7CisJCQkJKythZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDEwMDAgfCAyOCk7CisJCQljb2RlW29mZiArIDMxXSA9IDA7CisJCQltZW0gKz0gMjg7CisJCX0KKworCQltZW1jcHkoJmNvZGVbb2ZmICsgMl0sIGJ1ZiArIGksIGNodW5rICogMik7CisJCW9mZiArPSAzMjsKKwl9Citkb25lOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIG9mZjsKK30KKworc3RhdGljIGludCB2dGlfYml0bGVuKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXVuc2lnbmVkIGludCBpLCBtYXhfdGltZV9pbmNyID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyBnby0+ZnBzX3NjYWxlOworCisJZm9yIChpID0gMzE7IChtYXhfdGltZV9pbmNyICYgKCgxIDw8IGkpIC0gMSkpID09IG1heF90aW1lX2luY3I7IC0taSk7CisJcmV0dXJuIGkgKyAxOworfQorCitzdGF0aWMgaW50IG1wZWc0X2ZyYW1lX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLAorCQlpbnQgbW9kdWxvLCBlbnVtIG1wZWdfZnJhbWVfdHlwZSBmcmFtZSkKK3sKKwlpbnQgaTsKKwlDT0RFX0dFTihjLCBidWYgKyA2KTsKKwlpbnQgbWJfY291bnQgPSAoZ28tPndpZHRoID4+IDQpICogKGdvLT5oZWlnaHQgPj4gNCk7CisKKwlDT0RFX0FERChjLCBmcmFtZSA9PSBQRlJBTUUgPyAweDEgOiAweDIsIDIpOworCWlmIChtb2R1bG8pCisJCUNPREVfQUREKGMsIDB4MSwgMSk7CisJQ09ERV9BREQoYywgMHgxLCAyKTsKKwlDT0RFX0FERChjLCAwLCB2dGlfYml0bGVuKGdvKSk7CisJQ09ERV9BREQoYywgMHgzLCAyKTsKKwlpZiAoZnJhbWUgPT0gUEZSQU1FKQorCQlDT0RFX0FERChjLCAwLCAxKTsKKwlDT0RFX0FERChjLCAweGMsIDExKTsKKwlpZiAoZnJhbWUgIT0gUEZSQU1FKQorCQlDT0RFX0FERChjLCAweDQsIDMpOworCWlmIChmcmFtZSAhPSBCRlJBTUVfRU1QVFkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1iX2NvdW50OyArK2kpIHsKKwkJCXN3aXRjaCAoZnJhbWUpIHsKKwkJCWNhc2UgUEZSQU1FOgorCQkJCUNPREVfQUREKGMsIDB4MSwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGUkFNRV9QUkU6CisJCQkJQ09ERV9BREQoYywgMHg0NywgOCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGUkFNRV9QT1NUOgorCQkJCUNPREVfQUREKGMsIDB4MjcsIDcpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRlJBTUVfQklESVI6CisJCQkJQ09ERV9BREQoYywgMHg1ZiwgOCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGUkFNRV9FTVBUWTogLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogQnl0ZS1hbGlnbiB3aXRoIGEgemVybyBmb2xsb3dlZCBieSBvbmVzICovCisJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwlDT0RFX0FERChjLCAwLCAxKTsKKwlDT0RFX0FERChjLCAoMSA8PCAoaSAtIDEpKSAtIDEsIGkgLSAxKTsKKworCWkgPSBDT0RFX0xFTkdUSChjKSArIDQgKiA4OworCWJ1ZlswXSA9IGkgJiAweGZmOworCWJ1ZlsxXSA9IGkgPj4gODsKKwlidWZbMl0gPSAweDAwOworCWJ1ZlszXSA9IDB4MDA7CisJYnVmWzRdID0gMHgwMTsKKwlidWZbNV0gPSAweGI2OworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG1wZWc0X3NlcXVlbmNlX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZXh0KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgaGVhZFtdID0geyAweDAwLCAweDAwLCAweDAxLCAweGIwLCBnby0+cGFsaSwKKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHhiNSwgMHgwOSwKKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgfTsKKwlpbnQgaSwgYXNwZWN0X3JhdGlvOworCWludCBmcHMgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGU7CisJQ09ERV9HRU4oYywgYnVmICsgMiArIHNpemVvZihoZWFkKSk7CisKKwlzd2l0Y2ggKGdvLT5hc3BlY3RfcmF0aW8pIHsKKwljYXNlIEdPNzAwN19SQVRJT180XzM6CisJCWFzcGVjdF9yYXRpbyA9IGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MgPyAzIDogMjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfUkFUSU9fMTZfOToKKwkJYXNwZWN0X3JhdGlvID0gZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQyA/IDUgOiA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3BlY3RfcmF0aW8gPSAxOworCQlicmVhazsKKwl9CisKKwltZW1jcHkoYnVmICsgMiwgaGVhZCwgc2l6ZW9mKGhlYWQpKTsKKwlDT0RFX0FERChjLCAweDE5MSwgMTcpOworCUNPREVfQUREKGMsIGFzcGVjdF9yYXRpbywgNCk7CisJQ09ERV9BREQoYywgMHgxLCA0KTsKKwlDT0RFX0FERChjLCBmcHMsIDE2KTsKKwlDT0RFX0FERChjLCAweDMsIDIpOworCUNPREVfQUREKGMsIDEwMDEsIHZ0aV9iaXRsZW4oZ28pKTsKKwlDT0RFX0FERChjLCAxLCAxKTsKKwlDT0RFX0FERChjLCBnby0+d2lkdGgsIDEzKTsKKwlDT0RFX0FERChjLCAxLCAxKTsKKwlDT0RFX0FERChjLCBnby0+aGVpZ2h0LCAxMyk7CisJQ09ERV9BREQoYywgMHgyODMwLCAxNCk7CisKKwkvKiBCeXRlLWFsaWduICovCisJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwlDT0RFX0FERChjLCAwLCAxKTsKKwlDT0RFX0FERChjLCAoMSA8PCAoaSAtIDEpKSAtIDEsIGkgLSAxKTsKKworCWkgPSBDT0RFX0xFTkdUSChjKSArIHNpemVvZihoZWFkKSAqIDg7CisJYnVmWzBdID0gaSAmIDB4ZmY7CisJYnVmWzFdID0gaSA+PiA4OworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGdlbl9tcGVnNGhkcl90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLAorCQkJCQl1MTYgKmNvZGUsIGludCBzcGFjZSwgaW50ICpmcmFtZWxlbikKK3sKKwl1OCAqYnVmOworCXUxNiBtZW0gPSAweDNlMDA7CisJdW5zaWduZWQgaW50IGFkZHIgPSAweDE5OworCWludCBpLCBvZmYgPSAwLCBjaHVuazsKKworCWJ1ZiA9IGttYWxsb2MoNTEyMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB1bmFibGUgdG8gYWxsb2NhdGUgNTEyMCBieXRlcyBmb3IgIgorCQkJCSJmaXJtd2FyZSBjb25zdHJ1Y3Rpb25cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChidWYsIDAsIDUxMjApOworCWZyYW1lbGVuWzBdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYsIDAsIFBGUkFNRSk7CisJaSA9IDM2ODsKKwlmcmFtZWxlblsxXSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgQkZSQU1FX1BSRSk7CisJaSArPSAxNjMyOworCWZyYW1lbGVuWzJdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCBCRlJBTUVfUE9TVCk7CisJaSArPSAxNDMyOworCWZyYW1lbGVuWzNdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCBCRlJBTUVfQklESVIpOworCWkgKz0gMTYzMjsKKwltcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIEJGUkFNRV9FTVBUWSk7CisJaSArPSAxNjsKKwltcGVnNF9zZXF1ZW5jZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDApOworCWkgKz0gNDA7CisJZm9yIChpID0gMDsgaSA8IDUxMjA7IGkgKz0gY2h1bmsgKiAyKSB7CisJCWlmIChzcGFjZSAtIG9mZiA8IDMyKSB7CisJCQlvZmYgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNvZGVbb2ZmICsgMV0gPSBfX2NwdV90b19sZTE2KDB4ODAwMCB8IG1lbSk7CisKKwkJY2h1bmsgPSAyODsKKwkJaWYgKG1lbSArIGNodW5rID4gMHg0MDAwKQorCQkJY2h1bmsgPSAweDQwMDAgLSBtZW07CisJCWlmIChpICsgMiAqIGNodW5rID4gNTEyMCkKKwkJCWNodW5rID0gKDUxMjAgLSBpKSAvIDI7CisKKwkJaWYgKGNodW5rIDwgMjgpIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHg0MDAwIHwgY2h1bmspOworCQkJY29kZVtvZmYgKyAzMV0gPSBfX2NwdV90b19sZTE2KGFkZHIpOworCQkJaWYgKG1lbSArIGNodW5rID09IDB4NDAwMCkgeworCQkJCW1lbSA9IDB4M2UwMDsKKwkJCQkrK2FkZHI7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4MTAwMCB8IDI4KTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gMDsKKwkJCW1lbSArPSAyODsKKwkJfQorCisJCW1lbWNweSgmY29kZVtvZmYgKyAyXSwgYnVmICsgaSwgY2h1bmsgKiAyKTsKKwkJb2ZmICs9IDMyOworCX0KKwltZW0gPSAweDNlMDA7CisJYWRkciA9IGdvLT5pcGIgPyAweDE0ZjkgOiAweDBhZjk7CisJbWVtc2V0KGJ1ZiwgMCwgNTEyMCk7CisJZnJhbWVsZW5bNF0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiwgMSwgUEZSQU1FKTsKKwlpID0gMzY4OworCWZyYW1lbGVuWzVdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAxLCBCRlJBTUVfUFJFKTsKKwlpICs9IDE2MzI7CisJZnJhbWVsZW5bNl0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDEsIEJGUkFNRV9QT1NUKTsKKwlpICs9IDE0MzI7CisJZnJhbWVsZW5bN10gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDEsIEJGUkFNRV9CSURJUik7CisJaSArPSAxNjMyOworCW1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMSwgQkZSQU1FX0VNUFRZKTsKKwlpICs9IDE2OworCWZvciAoaSA9IDA7IGkgPCA1MTIwOyBpICs9IGNodW5rICogMikgeworCQlpZiAoc3BhY2UgLSBvZmYgPCAzMikgeworCQkJb2ZmID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQljb2RlW29mZiArIDFdID0gX19jcHVfdG9fbGUxNigweDgwMDAgfCBtZW0pOworCisJCWNodW5rID0gMjg7CisJCWlmIChtZW0gKyBjaHVuayA+IDB4NDAwMCkKKwkJCWNodW5rID0gMHg0MDAwIC0gbWVtOworCQlpZiAoaSArIDIgKiBjaHVuayA+IDUxMjApCisJCQljaHVuayA9ICg1MTIwIC0gaSkgLyAyOworCisJCWlmIChjaHVuayA8IDI4KSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4NDAwMCB8IGNodW5rKTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gX19jcHVfdG9fbGUxNihhZGRyKTsKKwkJCWlmIChtZW0gKyBjaHVuayA9PSAweDQwMDApIHsKKwkJCQltZW0gPSAweDNlMDA7CisJCQkJKythZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDEwMDAgfCAyOCk7CisJCQljb2RlW29mZiArIDMxXSA9IDA7CisJCQltZW0gKz0gMjg7CisJCX0KKworCQltZW1jcHkoJmNvZGVbb2ZmICsgMl0sIGJ1ZiArIGksIGNodW5rICogMik7CisJCW9mZiArPSAzMjsKKwl9Citkb25lOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIG9mZjsKK30KKworc3RhdGljIGludCBicmN0cmxfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJdTE2ICpjb2RlLCBpbnQgc3BhY2UsIGludCAqZnJhbWVsZW4pCit7CisJaW50IGNvbnZlcmdlX3NwZWVkID0gMDsKKwlpbnQgbGFtYmRhID0gKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRyB8fCBnby0+ZHZkX21vZGUpID8KKwkJCQkxMDAgOiAwOworCWludCBwZWFrX3JhdGUgPSA2ICogZ28tPmJpdHJhdGUgLyA1OworCWludCB2YnZfYnVmZmVyID0gZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHID8KKwkJCQlnby0+Yml0cmF0ZSA6CisJCQkJKGdvLT5kdmRfbW9kZSA/IDkwMDAwMCA6IHBlYWtfcmF0ZSk7CisJaW50IGZwcyA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gZ28tPmZwc19zY2FsZTsKKwlpbnQgcSA9IDA7CisJLyogQml6YXJyZSBtYXRoIGJlbG93IGRlcGVuZHMgb24gcm91bmRpbmcgZXJyb3JzIGluIGRpdmlzaW9uICovCisJdTMyIHNnb3BfZXhwdF9hZGRyID0gZ28tPmJpdHJhdGUgLyAzMiAqIChnby0+aXBiID8gMyA6IDEpICogMTAwMSAvIGZwczsKKwl1MzIgc2dvcF9wZWFrX2FkZHIgPSBwZWFrX3JhdGUgLyAzMiAqIDEwMDEgLyBmcHM7CisJdTMyIHRvdGFsX2V4cHRfYWRkciA9IGdvLT5iaXRyYXRlIC8gMzIgKiAxMDAwIC8gZnBzICogKGZwcyAvIDEwMDApOworCXUzMiB2YnZfYWxlcnRfYWRkciA9IHZidl9idWZmZXIgKiAzIC8gKDQgKiAzMik7CisJdTMyIGNwbHhbXSA9IHsKKwkJcSA+IDAgPyBzZ29wX2V4cHRfYWRkciAqIHEgOgorCQkJMiAqIGdvLT53aWR0aCAqIGdvLT5oZWlnaHQgKiAoZ28tPmlwYiA/IDYgOiA0KSAvIDMyLAorCQlxID4gMCA/IHNnb3BfZXhwdF9hZGRyICogcSA6CisJCQkyICogZ28tPndpZHRoICogZ28tPmhlaWdodCAqIChnby0+aXBiID8gNiA6IDQpIC8gMzIsCisJCXEgPiAwID8gc2dvcF9leHB0X2FkZHIgKiBxIDoKKwkJCTIgKiBnby0+d2lkdGggKiBnby0+aGVpZ2h0ICogKGdvLT5pcGIgPyA2IDogNCkgLyAzMiwKKwkJcSA+IDAgPyBzZ29wX2V4cHRfYWRkciAqIHEgOgorCQkJMiAqIGdvLT53aWR0aCAqIGdvLT5oZWlnaHQgKiAoZ28tPmlwYiA/IDYgOiA0KSAvIDMyLAorCX07CisJdTMyIGNhbGNfcSA9IHEgPiAwID8gcSA6IGNwbHhbMF0gLyBzZ29wX2V4cHRfYWRkcjsKKwl1MTYgcGFja1tdID0geworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkYyMCwJCWdvLT5pcGIgPyBjb252ZXJnZV9zcGVlZF9pcGJbY29udmVyZ2Vfc3BlZWRdCisJCQkJCTogY29udmVyZ2Vfc3BlZWRfaXBbY29udmVyZ2Vfc3BlZWRdLAorCQkweEJGMjEsCQlnby0+aXBiID8gMiA6IDAsCisJCTB4QkYyMiwJCWdvLT5pcGIgPyBMQU1CREFfdGFibGVbMF1bbGFtYmRhIC8gMiArIDUwXQorCQkJCQk6IDMyNzY3LAorCQkweEJGMjMsCQlnby0+aXBiID8gTEFNQkRBX3RhYmxlWzFdW2xhbWJkYV0gOiAzMjc2NywKKwkJMHhCRjI0LAkJMzI3NjcsCisJCTB4QkYyNSwJCWxhbWJkYSA+IDk5ID8gMzI3NjcgOiBMQU1CREFfdGFibGVbM11bbGFtYmRhXSwKKwkJMHhCRjI2LAkJc2dvcF9leHB0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGMjcsCQlzZ29wX2V4cHRfYWRkciA+PiAxNiwKKwkJMHhCRjI4LAkJc2dvcF9wZWFrX2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGMjksCQlzZ29wX3BlYWtfYWRkciA+PiAxNiwKKwkJMHhCRjJBLAkJdmJ2X2FsZXJ0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGMkIsCQl2YnZfYWxlcnRfYWRkciA+PiAxNiwKKwkJMHhCRjJDLAkJMCwKKwkJMHhCRjJELAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGMkUsCQl2YnZfYWxlcnRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYyRiwJCXZidl9hbGVydF9hZGRyID4+IDE2LAorCQkweEJGMzAsCQljcGx4WzBdICYgMHgwMDAwRkZGRiwKKwkJMHhCRjMxLAkJY3BseFswXSA+PiAxNiwKKwkJMHhCRjMyLAkJY3BseFsxXSAmIDB4MDAwMEZGRkYsCisJCTB4QkYzMywJCWNwbHhbMV0gPj4gMTYsCisJCTB4QkYzNCwJCWNwbHhbMl0gJiAweDAwMDBGRkZGLAorCQkweEJGMzUsCQljcGx4WzJdID4+IDE2LAorCQkweEJGMzYsCQljcGx4WzNdICYgMHgwMDAwRkZGRiwKKwkJMHhCRjM3LAkJY3BseFszXSA+PiAxNiwKKwkJMHhCRjM4LAkJMCwKKwkJMHhCRjM5LAkJMCwKKwkJMHhCRjNBLAkJdG90YWxfZXhwdF9hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjNCLAkJdG90YWxfZXhwdF9hZGRyID4+IDE2LAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkYzQywJCXRvdGFsX2V4cHRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYzRCwJCXRvdGFsX2V4cHRfYWRkciA+PiAxNiwKKwkJMHhCRjNFLAkJMCwKKwkJMHhCRjNGLAkJMCwKKwkJMHhCRjQ4LAkJMCwKKwkJMHhCRjQ5LAkJMCwKKwkJMHhCRjRBLAkJY2FsY19xIDwgNCA/IDQgOiAoY2FsY19xID4gMTI0ID8gMTI0IDogY2FsY19xKSwKKwkJMHhCRjRCLAkJNCwKKwkJMHhCRjRDLAkJMCwKKwkJMHhCRjRELAkJMCwKKwkJMHhCRjRFLAkJMCwKKwkJMHhCRjRGLAkJMCwKKwkJMHhCRjUwLAkJMCwKKwkJMHhCRjUxLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGNDAsCQlzZ29wX2V4cHRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkY0MSwJCXNnb3BfZXhwdF9hZGRyID4+IDE2LAorCQkweEJGNDIsCQkwLAorCQkweEJGNDMsCQkwLAorCQkweEJGNDQsCQkwLAorCQkweEJGNDUsCQkwLAorCQkweEJGNDYsCQkoZ28tPndpZHRoID4+IDQpICogKGdvLT5oZWlnaHQgPj4gNCksCisJCTB4QkY0NywJCTAsCisJCTB4QkY2NCwJCTAsCisJCTB4QkY2NSwJCTAsCisJCTB4QkYxOCwJCWZyYW1lbGVuWzRdLAorCQkweEJGMTksCQlmcmFtZWxlbls1XSwKKwkJMHhCRjFBLAkJZnJhbWVsZW5bNl0sCisJCTB4QkYxQiwJCWZyYW1lbGVuWzddLAorCQkwLAkJMCwKKworI2lmIDAgLyogUmVtb3ZlIG9uY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBtYXRjaGluZyAqLworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkY1NiwJCTQsCisJCTB4QkY1NywJCTAsCisJCTB4QkY1OCwJCTUsCisJCTB4QkY1OSwJCTAsCisJCTB4QkY1QSwJCTYsCisJCTB4QkY1QiwJCTAsCisJCTB4QkY1QywJCTgsCisJCTB4QkY1RCwJCTAsCisJCTB4QkY1RSwJCTEsCisJCTB4QkY1RiwJCTAsCisJCTB4QkY2MCwJCTEsCisJCTB4QkY2MSwJCTAsCisJCTB4QkY2MiwJCTAsCisJCTB4QkY2MywJCTAsCisJCTAsCQkwLAorI2Vsc2UKKwkJMHgyMDA4LAkJMHgwMDAwLAorCQkweEJGNTYsCQk0LAorCQkweEJGNTcsCQkwLAorCQkweEJGNTgsCQk1LAorCQkweEJGNTksCQkwLAorCQkweEJGNUEsCQk2LAorCQkweEJGNUIsCQkwLAorCQkweEJGNUMsCQk4LAorCQkweEJGNUQsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKyNlbmRpZgorCisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhCRjEwLAkJMCwKKwkJMHhCRjExLAkJMCwKKwkJMHhCRjEyLAkJMCwKKwkJMHhCRjEzLAkJMCwKKwkJMHhCRjE0LAkJMCwKKwkJMHhCRjE1LAkJMCwKKwkJMHhCRjE2LAkJMCwKKwkJMHhCRjE3LAkJMCwKKwkJMHhCRjdFLAkJMCwKKwkJMHhCRjdGLAkJMSwKKwkJMHhCRjUyLAkJZnJhbWVsZW5bMF0sCisJCTB4QkY1MywJCWZyYW1lbGVuWzFdLAorCQkweEJGNTQsCQlmcmFtZWxlblsyXSwKKwkJMHhCRjU1LAkJZnJhbWVsZW5bM10sCisJCTAsCQkwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCA2LCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCBmcHMgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGUgLyAxMDAwOworCWludCByb3dzID0gZ28tPmludGVybGFjZV9jb2RpbmcgPyBnby0+aGVpZ2h0IC8gMzIgOiBnby0+aGVpZ2h0IC8gMTY7CisJaW50IGJyY193aW5kb3dfc2l6ZSA9IGZwczsKKwlpbnQgcV9taW4gPSAyLCBxX21heCA9IDMxOworCWludCBUSEFDQ29lZmZTZXQwID0gMDsKKwl1MTYgcGFja1tdID0geworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4YzAwMiwJCTB4MTRiNCwKKwkJMHhjMDAzLAkJMHgyOGI0LAorCQkweGMwMDQsCQkweDNjNWEsCisJCTB4ZGMwNSwJCTB4MmE3NywKKwkJMHhjNmMzLAkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzID8gMCA6IDEpLAorCQkweGM2ODAsCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAweGYxIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX0gyNjMgPyAweDYxIDoKKwkJCQkJCQkJCTB4ZDMpLAorCQkweGM3ODAsCQkweDAxNDAsCisJCTB4ZTAwOSwJCTB4MDAwMSwKKwkJMHhjNjBmLAkJMHgwMDA4LAorCQkweGQ0ZmYsCQkweDAwMDIsCisJCTB4ZTQwMywJCTIzNDAsCisJCTB4ZTQwNiwJCTc1LAorCQkweGQ0MTEsCQkweDAwMDEsCisJCTB4ZDQxMCwJCTB4YTFkNiwKKwkJMHgwMDAxLAkJMHgyODAxLAorCisJCTB4MjAwZCwJCTB4MDAwMCwKKwkJMHhlNDAyLAkJMHgwMThiLAorCQkweGU0MDEsCQkweDhiMDEsCisJCTB4ZDQ3MiwJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJCQlHTzcwMDdfU0VOU09SX1RWKSAmJgorCQkJCQkJKCFnby0+aW50ZXJsYWNlX2NvZGluZykgPworCQkJCQkweDAxYjAgOiAweDAxNzAsCisJCTB4ZDQ3NSwJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJCQlHTzcwMDdfU0VOU09SX1RWKSAmJgorCQkJCQkJKCFnby0+aW50ZXJsYWNlX2NvZGluZykgPworCQkJCQkweDAwMDggOiAweDAwMDksCisJCTB4YzQwNCwJCWdvLT5pbnRlcmxhY2VfY29kaW5nID8gMHg0NCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDB4MTEgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgPyAweDAyIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMHgwNCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzICA/IDB4MDggOgorCQkJCQkJCQkgICAgIDB4MjApKSkpLAorCQkweGJmMGEsCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gOCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSA/IDEgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAyIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX0gyNjMgPyA0IDogMTYpKSkpIHwKKwkJCQkoKGdvLT5yZXBlYXRfc2VxaGVhZCA/IDEgOiAwKSA8PCA2KSB8CisJCQkJKChnby0+ZHZkX21vZGUgPyAxIDogMCkgPDwgOSkgfAorCQkJCSgoZ28tPmdvcF9oZWFkZXJfZW5hYmxlID8gMSA6IDApIDw8IDEwKSwKKwkJMHhiZjBiLAkJMCwKKwkJMHhkZDVhLAkJZ28tPmlwYiA/IDB4MTQgOiAweDBhLAorCQkweGJmMGMsCQkwLAorCQkweGJmMGQsCQkwLAorCQkweGM2ODMsCQlUSEFDQ29lZmZTZXQwLAorCQkweGM0MGEsCQkoZ28tPndpZHRoIDw8IDQpIHwgcm93cywKKwkJMHhlMDFhLAkJZ28tPmJvYXJkX2luZm8tPmhwaV9idWZmZXJfY2FwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDA4LAkJMCwKKwkJMHhlNDAyLAkJMHg4OCwKKwkJMHhlNDAxLAkJMHg4ZjAxLAorCQkweGJmNmEsCQkwLAorCQkweGJmNmIsCQkwLAorCQkweGJmNmMsCQkwLAorCQkweGJmNmQsCQkwLAorCQkweGJmNmUsCQkwLAorCQkweGJmNmYsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkwLAorCQkweGJmNjYsCQlicmNfd2luZG93X3NpemUsCisJCTB4YmY2NywJCTAsCisJCTB4YmY2OCwJCXFfbWluLAorCQkweGJmNjksCQlxX21heCwKKwkJMHhiZmUwLAkJMCwKKwkJMHhiZmUxLAkJMCwKKwkJMHhiZmUyLAkJMCwKKwkJMHhiZmUzLAkJZ28tPmlwYiA/IDMgOiAxLAorCQkweGMwMzEsCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJR083MDA3X1NFTlNPUl9WQkkgPyAxIDogMCwKKwkJMHhjMDFjLAkJMHgxZiwKKwkJMHhkZDhjLAkJMHgxNSwKKwkJMHhkZDk0LAkJMHgxNSwKKwkJMHhkZDg4LAkJZ28tPmlwYiA/IDB4MTQwMSA6IDB4MGEwMSwKKwkJMHhkZDkwLAkJZ28tPmlwYiA/IDB4MTQwMSA6IDB4MGEwMSwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMCwKKwkJMHhiZmU0LAkJMCwKKwkJMHhiZmU1LAkJMCwKKwkJMHhiZmU2LAkJMCwKKwkJMHhiZmU3LAkJZnBzIDw8IDgsCisJCTB4YmZlOCwJCTB4M2EwMCwKKwkJMHhiZmU5LAkJMCwKKwkJMHhiZmVhLAkJMCwKKwkJMHhiZmViLAkJMCwKKwkJMHhiZmVjLAkJKGdvLT5pbnRlcmxhY2VfY29kaW5nID8gMSA8PCAxNSA6IDApIHwKKwkJCQkJKGdvLT5tb2RldF9lbmFibGUgPyAweGEgOiAwKSB8CisJCQkJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJCUdPNzAwN19TRU5TT1JfVkJJID8gMSA6IDApLAorCQkweGJmZWQsCQkwLAorCQkweGJmZWUsCQkwLAorCQkweGJmZWYsCQkwLAorCQkweGJmZjAsCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJR083MDA3X1NFTlNPUl9UViA/IDB4ZjA2MCA6IDB4YjA2MCwKKwkJMHhiZmYxLAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDUsIHNwYWNlKTsKK30KKworc3RhdGljIGludCBzZXFoZWFkX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlLAorCWludCAoKnNlcXVlbmNlX2hlYWRlcl9mdW5jKShzdHJ1Y3QgZ283MDA3ICpnbywKKwkJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZXh0KSkKK3sKKwlpbnQgdm9wX3RpbWVfaW5jcmVtZW50X2JpdGxlbmd0aCA9IHZ0aV9iaXRsZW4oZ28pOworCWludCBmcHMgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGUgKgorCQkJCQkoZ28tPmludGVybGFjZV9jb2RpbmcgPyAyIDogMSk7CisJdW5zaWduZWQgY2hhciBidWZbNDBdID0geyB9OworCWludCBsZW4gPSBzZXF1ZW5jZV9oZWFkZXJfZnVuYyhnbywgYnVmLCAxKTsKKwl1MTYgcGFja1tdID0geworCQkweDIwMDYsCQkwLAorCQkweGJmMDgsCQlmcHMsCisJCTB4YmYwOSwJCTAsCisJCTB4YmZmMiwJCXZvcF90aW1lX2luY3JlbWVudF9iaXRsZW5ndGgsCisJCTB4YmZmMywJCSgxIDw8IHZvcF90aW1lX2luY3JlbWVudF9iaXRsZW5ndGgpIC0gMSwKKwkJMHhiZmU2LAkJMCwKKwkJMHhiZmU3LAkJKGZwcyAvIDEwMDApIDw8IDgsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDA3LAkJMCwKKwkJMHhjODAwLAkJYnVmWzJdIDw8IDggfCBidWZbM10sCisJCTB4YzgwMSwJCWJ1Zls0XSA8PCA4IHwgYnVmWzVdLAorCQkweGM4MDIsCQlidWZbNl0gPDwgOCB8IGJ1Zls3XSwKKwkJMHhjODAzLAkJYnVmWzhdIDw8IDggfCBidWZbOV0sCisJCTB4YzQwNiwJCTY0LAorCQkweGM0MDcsCQlsZW4gLSA2NCwKKwkJMHhjNjFiLAkJMSwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCisJCTB4MjAwZSwJCTAsCisJCTB4YzgwOCwJCWJ1ZlsxMF0gPDwgOCB8IGJ1ZlsxMV0sCisJCTB4YzgwOSwJCWJ1ZlsxMl0gPDwgOCB8IGJ1ZlsxM10sCisJCTB4YzgwYSwJCWJ1ZlsxNF0gPDwgOCB8IGJ1ZlsxNV0sCisJCTB4YzgwYiwJCWJ1ZlsxNl0gPDwgOCB8IGJ1ZlsxN10sCisJCTB4YzgwYywJCWJ1ZlsxOF0gPDwgOCB8IGJ1ZlsxOV0sCisJCTB4YzgwZCwJCWJ1ZlsyMF0gPDwgOCB8IGJ1ZlsyMV0sCisJCTB4YzgwZSwJCWJ1ZlsyMl0gPDwgOCB8IGJ1ZlsyM10sCisJCTB4YzgwZiwJCWJ1ZlsyNF0gPDwgOCB8IGJ1ZlsyNV0sCisJCTB4YzgxMCwJCWJ1ZlsyNl0gPDwgOCB8IGJ1ZlsyN10sCisJCTB4YzgxMSwJCWJ1ZlsyOF0gPDwgOCB8IGJ1ZlsyOV0sCisJCTB4YzgxMiwJCWJ1ZlszMF0gPDwgOCB8IGJ1ZlszMV0sCisJCTB4YzgxMywJCWJ1ZlszMl0gPDwgOCB8IGJ1ZlszM10sCisJCTB4YzgxNCwJCWJ1ZlszNF0gPDwgOCB8IGJ1ZlszNV0sCisJCTB4YzgxNSwJCWJ1ZlszNl0gPDwgOCB8IGJ1ZlszN10sCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDMsIHNwYWNlKTsKK30KKworc3RhdGljIGludCByZWxhdGl2ZV9wcmltZShpbnQgYmlnLCBpbnQgbGl0dGxlKQoreworCWludCByZW1haW5kZXI7CisKKwl3aGlsZSAobGl0dGxlICE9IDApIHsKKwkJcmVtYWluZGVyID0gYmlnICUgbGl0dGxlOworCQliaWcgPSBsaXR0bGU7CisJCWxpdHRsZSA9IHJlbWFpbmRlcjsKKwl9CisJcmV0dXJuIGJpZzsKK30KKworc3RhdGljIGludCBhdnN5bmNfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJaW50IGFyYXRlID0gZ28tPmJvYXJkX2luZm8tPmF1ZGlvX3JhdGUgKiAxMDAxICogZ28tPmZwc19zY2FsZTsKKwlpbnQgcmF0aW8gPSBhcmF0ZSAvIGdvLT5zZW5zb3JfZnJhbWVyYXRlOworCWludCBhZGpyYXRpbyA9IHJhdGlvICogMjE1IC8gMTAwOworCWludCBycHJpbWUgPSByZWxhdGl2ZV9wcmltZShnby0+c2Vuc29yX2ZyYW1lcmF0ZSwKKwkJCQkJYXJhdGUgJSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSk7CisJaW50IGYxID0gKGFyYXRlICUgZ28tPnNlbnNvcl9mcmFtZXJhdGUpIC8gcnByaW1lOworCWludCBmMiA9IChnby0+c2Vuc29yX2ZyYW1lcmF0ZSAtIGFyYXRlICUgZ28tPnNlbnNvcl9mcmFtZXJhdGUpIC8gcnByaW1lOworCXUxNiBwYWNrW10gPSB7CisJCTB4MjAwZSwJCTAsCisJCTB4YmY5OCwJCSh1MTYpKCgtYWRqcmF0aW8pICYgMHhmZmZmKSwKKwkJMHhiZjk5LAkJKHUxNikoKC1hZGpyYXRpbykgPj4gMTYpLAorCQkweGJmOTIsCQkwLAorCQkweGJmOTMsCQkwLAorCQkweGJmZjQsCQlmMSA+IGYyID8gZjEgOiBmMiwKKwkJMHhiZmY1LAkJZjEgPCBmMiA/IGYxIDogZjIsCisJCTB4YmZmNiwJCWYxIDwgZjIgPyByYXRpbyA6IHJhdGlvICsgMSwKKwkJMHhiZmY3LAkJZjEgPiBmMiA/IHJhdGlvIDogcmF0aW8gKyAxLAorCQkweGJmZjgsCQkwLAorCQkweGJmZjksCQkwLAorCQkweGJmZmEsCQlhZGpyYXRpbyAmIDB4ZmZmZiwKKwkJMHhiZmZiLAkJYWRqcmF0aW8gPj4gMTYsCisJCTB4YmY5NCwJCTAsCisJCTB4YmY5NSwJCTAsCisJCTAsCQkwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCAxLCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgZmluYWxfcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJaW50IHJvd3MgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IGdvLT5oZWlnaHQgLyAzMiA6IGdvLT5oZWlnaHQgLyAxNjsKKwl1MTYgcGFja1tdID0geworCQkweDgwMDAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTIsCisJCSgoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpICYmCisJCQkJCQkoIWdvLT5pbnRlcmxhY2VfY29kaW5nKSA/CisJCQkJCSgxIDw8IDE0KSB8ICgxIDw8IDkpIDogMCkgfAorCQkJKChnby0+ZW5jb2Rlcl9zdWJzYW1wbGUgPyAxIDogMCkgPDwgOCkgfAorCQkJKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJgorCQkJCUdPNzAwN19TRU5TT1JfQ09ORklHX01BU0spLAorCQkoKGdvLT5lbmNvZGVyX3ZfaGFsdmUgPyAxIDogMCkgPDwgMTQpIHwKKwkJCShnby0+ZW5jb2Rlcl92X2hhbHZlID8gcm93cyA8PCA5IDogcm93cyA8PCA4KSB8CisJCQkoZ28tPmVuY29kZXJfaF9oYWx2ZSA/IDEgPDwgNiA6IDApIHwKKwkJCShnby0+ZW5jb2Rlcl9oX2hhbHZlID8gZ28tPndpZHRoID4+IDMgOiBnby0+d2lkdGggPj4gNCksCisJCSgxIDw8IDE1KSB8IChnby0+ZW5jb2Rlcl92X29mZnNldCA8PCA2KSB8CisJCQkoMSA8PCA3KSB8IChnby0+ZW5jb2Rlcl9oX29mZnNldCA+PiAyKSwKKwkJKDEgPDwgNiksCisJCTAsCisJCTAsCisJCSgoZ28tPmZwc19zY2FsZSAtIDEpIDw8IDgpIHwKKwkJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UViA/CisJCQkJCQkoMSA8PCA3KSA6IDApIHwKKwkJCTB4NDEsCisJCWdvLT5pcGIgPyAweGQ0YyA6IDB4MzZiLAorCQkocm93cyA8PCA4KSB8IChnby0+d2lkdGggPj4gNCksCisJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDB4MDQwNCA6IDAsCisJCSgxIDw8IDE1KSB8ICgoZ28tPmludGVybGFjZV9jb2RpbmcgPyAxIDogMCkgPDwgMTMpIHwKKwkJCSgoZ28tPmNsb3NlZF9nb3AgPyAxIDogMCkgPDwgMTIpIHwKKwkJCSgoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMSA6IDApIDw8IDExKSB8CisJCS8qCSgxIDw8IDkpIHwgICAqLworCQkJKChnby0+aXBiID8gMyA6IDApIDw8IDcpIHwKKwkJCSgoZ28tPm1vZGV0X2VuYWJsZSA/IDEgOiAwKSA8PCAyKSB8CisJCQkoKGdvLT5kdmRfbW9kZSA/IDEgOiAwKSA8PCAxKSB8IDEsCisJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgPyAweDg5YTAgOgorCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDB4ODlhMCA6CisJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHID8gMHg4OWEwIDoKKwkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAweDg5MjAgOgorCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzID8gMHg4OTIwIDogMCkpKSkpLAorCQlnby0+aXBiID8gMHgxZjE1IDogMHgxZjBiLAorCQlnby0+aXBiID8gMHgwMDE1IDogMHgwMDBiLAorCQlnby0+aXBiID8gMHhhODAwIDogMHg1ODAwLAorCQkweGZmZmYsCisJCTB4MDAyMCArIDB4MDM0YiAqIDAsCisJCTB4MDAyMCArIDB4MDM0YiAqIDEsCisJCTB4MDAyMCArIDB4MDM0YiAqIDIsCisJCTB4MDAyMCArIDB4MDM0YiAqIDMsCisJCTB4MDAyMCArIDB4MDM0YiAqIDQsCisJCTB4MDAyMCArIDB4MDM0YiAqIDUsCisJCWdvLT5pcGIgPyAoZ28tPmdvcF9zaXplIC8gMykgOiBnby0+Z29wX3NpemUsCisJCShnby0+aGVpZ2h0ID4+IDQpICogKGdvLT53aWR0aCA+PiA0KSAqIDExMCAvIDEwMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgMSwgc3BhY2UpOworfQorCitzdGF0aWMgaW50IGF1ZGlvX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCBjbG9ja19jb25maWcgPSAoKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19mbGFncyAmCisJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgPyAxIDogMCkgPDwgMTEpIHwKKwkJCSgoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2ZsYWdzICYKKwkJCQlHTzcwMDdfQVVESU9fT0tJX01PREUgPyAxIDogMCkgPDwgOCkgfAorCQkJKCgoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2JjbGtfZGl2IC8gNCkgLSAxKSA8PCA0KSB8CisJCQkoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX21haW5fZGl2IC0gMSk7CisJdTE2IHBhY2tbXSA9IHsKKwkJMHgyMDBkLAkJMCwKKwkJMHg5MDAyLAkJMCwKKwkJMHg5MDAyLAkJMCwKKwkJMHg5MDMxLAkJMCwKKwkJMHg5MDMyLAkJMCwKKwkJMHg5MDMzLAkJMCwKKwkJMHg5MDM0LAkJMCwKKwkJMHg5MDM1LAkJMCwKKwkJMHg5MDM2LAkJMCwKKwkJMHg5MDM3LAkJMCwKKwkJMHg5MDQwLAkJMCwKKwkJMHg5MDAwLAkJY2xvY2tfY29uZmlnLAorCQkweDkwMDEsCQkoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2ZsYWdzICYgMHhmZmZmKSB8CisJCQkJCSgxIDw8IDkpLAorCQkweDkwMDAsCQkoKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19mbGFncyAmCisJCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiA/CisJCQkJCQkxIDogMCkgPDwgMTApIHwKKwkJCQkJY2xvY2tfY29uZmlnLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTB4MjAwNSwJCTAsCisJCTB4OTA0MSwJCTAsCisJCTB4OTA0MiwJCTI1NiwKKwkJMHg5MDQzLAkJMCwKKwkJMHg5MDQ0LAkJMTYsCisJCTB4OTA0NSwJCTE2LAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgMiwgc3BhY2UpOworfQorCitzdGF0aWMgaW50IG1vZGV0X3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCByZXQsIG1iLCBpLCBhZGRyLCBjbnQgPSAwOworCXUxNiBwYWNrWzMyXTsKKwl1MTYgdGhyZXNob2xkc1tdID0geworCQkweDIwMGUsCQkwLAorCQkweGJmODIsCQlnby0+bW9kZXRbMF0ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODMsCQlnby0+bW9kZXRbMV0ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODQsCQlnby0+bW9kZXRbMl0ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODUsCQlnby0+bW9kZXRbM10ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODYsCQlnby0+bW9kZXRbMF0ubW90aW9uX3RocmVzaG9sZCwKKwkJMHhiZjg3LAkJZ28tPm1vZGV0WzFdLm1vdGlvbl90aHJlc2hvbGQsCisJCTB4YmY4OCwJCWdvLT5tb2RldFsyXS5tb3Rpb25fdGhyZXNob2xkLAorCQkweGJmODksCQlnby0+bW9kZXRbM10ubW90aW9uX3RocmVzaG9sZCwKKwkJMHhiZjhhLAkJZ28tPm1vZGV0WzBdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhiLAkJZ28tPm1vZGV0WzFdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhjLAkJZ28tPm1vZGV0WzJdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhkLAkJZ28tPm1vZGV0WzNdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhlLAkJMCwKKwkJMHhiZjhmLAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldCA9IGNvcHlfcGFja2FnZXMoY29kZSwgdGhyZXNob2xkcywgMSwgc3BhY2UpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisJY250ICs9IHJldDsKKworCWFkZHIgPSAweGJhYzA7CisJbWVtc2V0KHBhY2ssIDAsIDY0KTsKKwlpID0gMDsKKwlmb3IgKG1iID0gMDsgbWIgPCAxNjI0OyArK21iKSB7CisJCXBhY2tbaSAqIDIgKyAzXSA8PD0gMjsKKwkJcGFja1tpICogMiArIDNdIHw9IGdvLT5tb2RldF9tYXBbbWJdOworCQlpZiAobWIgJSA4ICE9IDcpCisJCQljb250aW51ZTsKKwkJcGFja1tpICogMiArIDJdID0gYWRkcisrOworCQkrK2k7CisJCWlmIChpID09IDEwIHx8IG1iID09IDE2MjMpIHsKKwkJCXBhY2tbMF0gPSAweDIwMDAgfCBpOworCQkJcmV0ID0gY29weV9wYWNrYWdlcyhjb2RlICsgY250LCBwYWNrLCAxLCBzcGFjZSAtIGNudCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQljbnQgKz0gcmV0OworCQkJaSA9IDA7CisJCQltZW1zZXQocGFjaywgMCwgNjQpOworCQl9CisJCXBhY2tbaSAqIDIgKyAzXSA9IDA7CisJfQorCisJbWVtc2V0KHBhY2ssIDAsIDY0KTsKKwlpID0gMDsKKwlmb3IgKGFkZHIgPSAweGJiOTA7IGFkZHIgPCAweGJiZmE7ICsrYWRkcikgeworCQlwYWNrW2kgKiAyICsgMl0gPSBhZGRyOworCQlwYWNrW2kgKiAyICsgM10gPSAwOworCQkrK2k7CisJCWlmIChpID09IDEwIHx8IGFkZHIgPT0gMHhiYmY5KSB7CisJCQlwYWNrWzBdID0gMHgyMDAwIHwgaTsKKwkJCXJldCA9IGNvcHlfcGFja2FnZXMoY29kZSArIGNudCwgcGFjaywgMSwgc3BhY2UgLSBjbnQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJY250ICs9IHJldDsKKwkJCWkgPSAwOworCQkJbWVtc2V0KHBhY2ssIDAsIDY0KTsKKwkJfQorCX0KKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IGRvX3NwZWNpYWwoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiB0eXBlLCB1MTYgKmNvZGUsIGludCBzcGFjZSwKKwkJCWludCAqZnJhbWVsZW4pCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTUEVDSUFMX0ZSTV9IRUFEOgorCQlzd2l0Y2ggKGdvLT5mb3JtYXQpIHsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01KUEVHOgorCQkJcmV0dXJuIGdlbl9tanBlZ2hkcl90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQkJcmV0dXJuIGdlbl9tcGVnMWhkcl90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSwKKwkJCQkJCQkJZnJhbWVsZW4pOworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzQ6CisJCQlyZXR1cm4gZ2VuX21wZWc0aGRyX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlLAorCQkJCQkJCQlmcmFtZWxlbik7CisJCX0KKwljYXNlIFNQRUNJQUxfQlJDX0NUUkw6CisJCXJldHVybiBicmN0cmxfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UsIGZyYW1lbGVuKTsKKwljYXNlIFNQRUNJQUxfQ09ORklHOgorCQlyZXR1cm4gY29uZmlnX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwljYXNlIFNQRUNJQUxfU0VRSEVBRDoKKwkJc3dpdGNoIChnby0+Zm9ybWF0KSB7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQkJcmV0dXJuIHNlcWhlYWRfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UsCisJCQkJCW1wZWcxX3NlcXVlbmNlX2hlYWRlcik7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJCXJldHVybiBzZXFoZWFkX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlLAorCQkJCQltcGVnNF9zZXF1ZW5jZV9oZWFkZXIpOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFNQRUNJQUxfQVZfU1lOQzoKKwkJcmV0dXJuIGF2c3luY190b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJY2FzZSBTUEVDSUFMX0ZJTkFMOgorCQlyZXR1cm4gZmluYWxfcGFja2FnZShnbywgY29kZSwgc3BhY2UpOworCWNhc2UgU1BFQ0lBTF9BVURJTzoKKwkJcmV0dXJuIGF1ZGlvX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwljYXNlIFNQRUNJQUxfTU9ERVQ6CisJCXJldHVybiBtb2RldF90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJfQorCXByaW50ayhLRVJOX0VSUgorCQkiZ283MDA3OiBmaXJtd2FyZSBmaWxlIGNvbnRhaW5zIHVuc3VwcG9ydGVkIGZlYXR1cmUgJTA0eFxuIiwKKwkJdHlwZSk7CisJcmV0dXJuIC0xOworfQorCitpbnQgZ283MDA3X2NvbnN0cnVjdF9md19pbWFnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKipmdywgaW50ICpmd2xlbikKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCXUxNiAqY29kZSwgKnNyYzsKKwlpbnQgZnJhbWVsZW5bOF0gPSB7IH07IC8qIGhvbGRzIHRoZSBsZW5ndGhzIG9mIGVtcHR5IGZyYW1lIHRlbXBsYXRlcyAqLworCWludCBjb2Rlc3BhY2UgPSA2NCAqIDEwMjQsIGkgPSAwLCBzcmNsZW4sIGNodW5rX2xlbiwgY2h1bmtfZmxhZ3M7CisJaW50IG1vZGVfZmxhZzsKKwlpbnQgcmV0OworCisJc3dpdGNoIChnby0+Zm9ybWF0KSB7CisJY2FzZSBHTzcwMDdfRk9STUFUX01KUEVHOgorCQltb2RlX2ZsYWcgPSBGTEFHX01PREVfTUpQRUc7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwkJbW9kZV9mbGFnID0gRkxBR19NT0RFX01QRUcxOworCQlicmVhazsKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCW1vZGVfZmxhZyA9IEZMQUdfTU9ERV9NUEVHMjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQltb2RlX2ZsYWcgPSBGTEFHX01PREVfTVBFRzQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBnby0+Ym9hcmRfaW5mby0+ZmlybXdhcmUsIGdvLT5kZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNzogdW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgZnJvbSBmaWxlIFwiJXNcIlxuIiwKKwkJCWdvLT5ib2FyZF9pbmZvLT5maXJtd2FyZSk7CisJCXJldHVybiAtMTsKKwl9CisJY29kZSA9IGttYWxsb2MoY29kZXNwYWNlICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvZGUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiCisJCQkJImZpcm13YXJlIGNvbnN0cnVjdGlvblxuIiwgY29kZXNwYWNlICogMik7CisJCWdvdG8gZndfZmFpbGVkOworCX0KKwltZW1zZXQoY29kZSwgMCwgY29kZXNwYWNlICogMik7CisJc3JjID0gKHUxNiAqKWZ3X2VudHJ5LT5kYXRhOworCXNyY2xlbiA9IGZ3X2VudHJ5LT5zaXplIC8gMjsKKwl3aGlsZSAoc3JjbGVuID49IDIpIHsKKwkJY2h1bmtfZmxhZ3MgPSBfX2xlMTZfdG9fY3B1KHNyY1swXSk7CisJCWNodW5rX2xlbiA9IF9fbGUxNl90b19jcHUoc3JjWzFdKTsKKwkJaWYgKGNodW5rX2xlbiArIDIgPiBzcmNsZW4pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBmaXJtd2FyZSBmaWxlIFwiJXNcIiAiCisJCQkJCSJhcHBlYXJzIHRvIGJlIGNvcnJ1cHRlZFxuIiwKKwkJCQkJZ28tPmJvYXJkX2luZm8tPmZpcm13YXJlKTsKKwkJCWdvdG8gZndfZmFpbGVkOworCQl9CisJCWlmIChjaHVua19mbGFncyAmIG1vZGVfZmxhZykgeworCQkJaWYgKGNodW5rX2ZsYWdzICYgRkxBR19TUEVDSUFMKSB7CisJCQkJcmV0ID0gZG9fc3BlY2lhbChnbywgX19sZTE2X3RvX2NwdShzcmNbMl0pLAorCQkJCQkmY29kZVtpXSwgY29kZXNwYWNlIC0gaSwgZnJhbWVsZW4pOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBpbnN1ZmZpY2llbnQgIgorCQkJCQkJCSJtZW1vcnkgZm9yIGZpcm13YXJlICIKKwkJCQkJCQkiY29uc3RydWN0aW9uXG4iKTsKKwkJCQkJZ290byBmd19mYWlsZWQ7CisJCQkJfQorCQkJCWkgKz0gcmV0OworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29kZXNwYWNlIC0gaSA8IGNodW5rX2xlbikgeworCQkJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogaW5zdWZmaWNpZW50ICIKKwkJCQkJCQkibWVtb3J5IGZvciBmaXJtd2FyZSAiCisJCQkJCQkJImNvbnN0cnVjdGlvblxuIik7CisJCQkJCWdvdG8gZndfZmFpbGVkOworCQkJCX0KKwkJCQltZW1jcHkoJmNvZGVbaV0sICZzcmNbMl0sIGNodW5rX2xlbiAqIDIpOworCQkJCWkgKz0gY2h1bmtfbGVuOworCQkJfQorCQl9CisJCXNyY2xlbiAtPSBjaHVua19sZW4gKyAyOworCQlzcmMgKz0gY2h1bmtfbGVuICsgMjsKKwl9CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJKmZ3ID0gKHU4ICopY29kZTsKKwkqZndsZW4gPSBpICogMjsKKwlyZXR1cm4gMDsKKworZndfZmFpbGVkOgorCWtmcmVlKGNvZGUpOworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1NWI3NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworLyoqKioqKioqKioqKioqIFJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgZm9yIEkyQyBjbGllbnQgZHJpdmVycyAqKioqKioqKioqKioqKi8KKworLyogU2luY2UgdGhlcmUncyBubyB3YXkgdG8gYXV0by1wcm9iZSB0aGUgSTJDIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBJMkMKKyAqIGJ1cyBvbiB0aGUgZ283MDA3LCB3ZSBoYXZlIHRoaXMgc2lsbHkgbGl0dGxlIHJlZ2lzdHJhdGlvbiBzeXN0ZW0gdGhhdAorICogY2xpZW50IGRyaXZlcnMgY2FuIHVzZSB0byByZWdpc3RlciB0aGVpciBJMkMgZHJpdmVyIElEIGFuZCB0aGVpcgorICogZGV0ZWN0X2NsaWVudCBmdW5jdGlvbiAodGhlIG9uZSB0aGF0J3Mgbm9ybWFsbHkgcGFzc2VkIHRvIGkyY19wcm9iZSkuCisgKgorICogV2hlbiBhIG5ldyBnbzcwMDcgZGV2aWNlIGlzIGNvbm5lY3RlZCwgd2UgY2FuIGxvb2sgdXAgaW4gYSBib2FyZCBpbmZvCisgKiB0YWJsZSBieSB0aGUgVVNCIG9yIFBDSSB2ZW5kb3IvcHJvZHVjdC9yZXZpc2lvbiBJRCB0byBkZXRlcm1pbmUKKyAqIHdoaWNoIEkyQyBjbGllbnQgbW9kdWxlIHRvIGxvYWQuICBUaGUgY2xpZW50IGRyaXZlciBtb2R1bGUgd2lsbCByZWdpc3RlcgorICogaXRzZWxmIGhlcmUsIGFuZCB0aGVuIHdlIGNhbiBjYWxsIHRoZSByZWdpc3RlcmVkIGRldGVjdF9jbGllbnQgZnVuY3Rpb24KKyAqIHRvIGZvcmNlLWxvYWQgYSBuZXcgY2xpZW50IGF0IHRoZSBhZGRyZXNzIGxpc3RlZCBpbiB0aGUgYm9hcmQgaW5mbyB0YWJsZS4KKyAqCisgKiBSZWFsbHkgdGhlIEkyQyBzdWJzeXN0ZW0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gZm9yY2UtbG9hZCBJMkMgY2xpZW50CisgKiBkcml2ZXJzIHdoZW4gd2UgaGF2ZSBhIHByaW9yaSBrbm93bGVkZ2Ugb2Ygd2hhdCdzIG9uIHRoZSBidXMsIGVzcGVjaWFsbHkKKyAqIHNpbmNlIHRoZSBleGlzdGluZyBJMkMgYXV0by1wcm9iZSBtZWNoYW5pc20gaXMgc28gaG9rZXksIGJ1dCB3ZSdsbCB1c2UKKyAqIG91ciBvd24gbWVjaGFuaXNtIGZvciB0aGUgdGltZSBiZWluZy4gKi8KKworc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciB7CisJdW5zaWduZWQgaW50IGlkOworCWZvdW5kX3Byb2MgZm91bmRfcHJvYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGkyY19jbGllbnRfZHJpdmVycyk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCisvKiBDbGllbnQgZHJpdmVycyByZWdpc3RlciBoZXJlIGJ5IHRoZWlyIEkyQyBkcml2ZXIgSUQgKi8KK2ludCB3aXNfaTJjX2FkZF9kcml2ZXIodW5zaWduZWQgaW50IGlkLCBmb3VuZF9wcm9jIGZvdW5kX3Byb2MpCit7CisJc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciAqZHJpdmVyOworCisJZHJpdmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciksIEdGUF9LRVJORUwpOworCWlmIChkcml2ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZHJpdmVyLT5pZCA9IGlkOworCWRyaXZlci0+Zm91bmRfcHJvYyA9IGZvdW5kX3Byb2M7CisKKwlkb3duKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRyaXZlci0+bGlzdCwgJmkyY19jbGllbnRfZHJpdmVycyk7CisJdXAoJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wod2lzX2kyY19hZGRfZHJpdmVyKTsKKwordm9pZCB3aXNfaTJjX2RlbF9kcml2ZXIoZm91bmRfcHJvYyBmb3VuZF9wcm9jKQoreworCXN0cnVjdCB3aXNfaTJjX2NsaWVudF9kcml2ZXIgKmRyaXZlciwgKm5leHQ7CisKKwlkb3duKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcml2ZXIsIG5leHQsICZpMmNfY2xpZW50X2RyaXZlcnMsIGxpc3QpCisJCWlmIChkcml2ZXItPmZvdW5kX3Byb2MgPT0gZm91bmRfcHJvYykgeworCQkJbGlzdF9kZWwoJmRyaXZlci0+bGlzdCk7CisJCQlrZnJlZShkcml2ZXIpOworCQl9CisJdXAoJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHdpc19pMmNfZGVsX2RyaXZlcik7CisKKy8qIFRoZSBtYWluIGdvNzAwNyBkcml2ZXIgY2FsbHMgdGhpcyB0byBpbnN0YW50aWF0ZSBhIGNsaWVudCBieSBkcml2ZXIKKyAqIElEIGFuZCBidXMgYWRkcmVzcywgd2hpY2ggYXJlIGJvdGggc3RvcmVkIGluIHRoZSBib2FyZCBpbmZvIHRhYmxlICovCitpbnQgd2lzX2kyY19wcm9iZV9kZXZpY2Uoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCXVuc2lnbmVkIGludCBpZCwgaW50IGFkZHIpCit7CisJc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciAqZHJpdmVyOworCWludCBmb3VuZCA9IDA7CisKKwlpZiAoYWRkciA8IDAgfHwgYWRkciA+IDB4N2YpCisJCXJldHVybiAtMTsKKwlkb3duKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJpdmVyLCAmaTJjX2NsaWVudF9kcml2ZXJzLCBsaXN0KQorCQlpZiAoZHJpdmVyLT5pZCA9PSBpZCkgeworCQkJaWYgKGRyaXZlci0+Zm91bmRfcHJvYyhhZGFwdGVyLCBhZGRyLCAwKSA9PSAwKQorCQkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJdXAoJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioqKioqKioqKioqKioqKioqKioqIERyaXZlciBmb3Igb24tYm9hcmQgSTJDIGFkYXB0ZXIgKioqKioqKioqKioqKioqKioqKioqLworCisvKiAjZGVmaW5lIEdPNzAwN19JMkNfREVCVUcgKi8KKworI2RlZmluZSBTUElfSTJDX0FERFJfQkFTRQkJMHgxNDAwCisjZGVmaW5lIFNUQVRVU19SRUdfQUREUgkJCShTUElfSTJDX0FERFJfQkFTRSArIDB4MikKKyNkZWZpbmUgSTJDX0NUUkxfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4NikKKyNkZWZpbmUgSTJDX0RFVl9VUF9BRERSX1JFR19BRERSCShTUElfSTJDX0FERFJfQkFTRSArIDB4NykKKyNkZWZpbmUgSTJDX0xPX0FERFJfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4OCkKKyNkZWZpbmUgSTJDX0RBVEFfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4OSkKKyNkZWZpbmUgSTJDX0NMS0ZSRVFfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4YSkKKworI2RlZmluZSBJMkNfU1RBVEVfTUFTSwkJCTB4MDAwNworI2RlZmluZSBJMkNfUkVBRF9SRUFEWV9NQVNLCQkweDAwMDgKKworLyogVGhlcmUgaXMgb25seSBvbmUgSTJDIHBvcnQgb24gdGhlIFRXMjgwNCB0aGF0IGZlZWRzIGFsbCBmb3VyIEdPNzAwNyBWSVBzCisgKiBvbiB0aGUgQWRsaW5rIFBDSS1NUEcyNCwgc28gYWNjZXNzIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBvZiB0aGVtLiAqLworc3RhdGljIERFQ0xBUkVfTVVURVgoYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKKworc3RhdGljIGludCBnbzcwMDdfaTJjX3hmZXIoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiBhZGRyLCBpbnQgcmVhZCwKKwkJdTE2IGNvbW1hbmQsIGludCBmbGFncywgdTggKmRhdGEpCit7CisJaW50IGksIHJldCA9IC0xOworCXUxNiB2YWw7CisKKwlpZiAoZ28tPnN0YXR1cyA9PSBTVEFUVVNfU0hVVERPV04pCisJCXJldHVybiAtMTsKKworI2lmZGVmIEdPNzAwN19JMkNfREVCVUcKKwlpZiAocmVhZCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy1pMmM6IHJlYWRpbmcgMHglMDJ4IG9uIDB4JTAyeFxuIiwKKwkJCWNvbW1hbmQsIGFkZHIpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSJnbzcwMDctaTJjOiB3cml0aW5nIDB4JTAyeCB0byAweCUwMnggb24gMHglMDJ4XG4iLAorCQkJKmRhdGEsIGNvbW1hbmQsIGFkZHIpOworI2VuZGlmCisKKwlkb3duKCZnby0+aHdfbG9jayk7CisKKwlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNCkgeworCQkvKiBCcmlkZ2UgdGhlIEkyQyBwb3J0IG9uIHRoaXMgR083MDA3IHRvIHRoZSBzaGFyZWQgYnVzICovCisJCWRvd24oJmFkbGlua19tcGcyNF9pMmNfbG9jayk7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDNjODIsIDB4MDAyMCk7CisJfQorCisJLyogV2FpdCBmb3IgSTJDIGFkYXB0ZXIgdG8gYmUgcmVhZHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCQlpZiAoZ283MDA3X3JlYWRfYWRkcihnbywgU1RBVFVTX1JFR19BRERSLCAmdmFsKSA8IDApCisJCQlnb3RvIGkyY19kb25lOworCQlpZiAoISh2YWwgJiBJMkNfU1RBVEVfTUFTSykpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwMCk7CisJfQorCWlmIChpID09IDEwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LWkyYzogSTJDIGFkYXB0ZXIgaXMgaHVuZ1xuIik7CisJCWdvdG8gaTJjX2RvbmU7CisJfQorCisJLyogU2V0IHRhcmdldCByZWdpc3RlciAoY29tbWFuZCkgKi8KKwlnbzcwMDdfd3JpdGVfYWRkcihnbywgSTJDX0NUUkxfUkVHX0FERFIsIGZsYWdzKTsKKwlnbzcwMDdfd3JpdGVfYWRkcihnbywgSTJDX0xPX0FERFJfUkVHX0FERFIsIGNvbW1hbmQpOworCisJLyogSWYgd2UncmUgd3JpdGluZywgc2VuZCB0aGUgZGF0YSBhbmQgdGFyZ2V0IGFkZHJlc3MgYW5kIHdlJ3JlIGRvbmUgKi8KKwlpZiAoIXJlYWQpIHsKKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIEkyQ19EQVRBX1JFR19BRERSLCAqZGF0YSk7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCBJMkNfREVWX1VQX0FERFJfUkVHX0FERFIsCisJCQkJCShhZGRyIDw8IDkpIHwgKGNvbW1hbmQgPj4gOCkpOworCQlyZXQgPSAwOworCQlnb3RvIGkyY19kb25lOworCX0KKworCS8qIE90aGVyd2lzZSwgd2UncmUgcmVhZGluZy4gIEZpcnN0IGNsZWFyIGkyY19yeF9kYXRhX3JkeS4gKi8KKwlpZiAoZ283MDA3X3JlYWRfYWRkcihnbywgSTJDX0RBVEFfUkVHX0FERFIsICZ2YWwpIDwgMCkKKwkJZ290byBpMmNfZG9uZTsKKworCS8qIFNlbmQgdGhlIHRhcmdldCBhZGRyZXNzIHBsdXMgcmVhZCBmbGFnICovCisJZ283MDA3X3dyaXRlX2FkZHIoZ28sIEkyQ19ERVZfVVBfQUREUl9SRUdfQUREUiwKKwkJCShhZGRyIDw8IDkpIHwgMHgwMTAwIHwgKGNvbW1hbmQgPj4gOCkpOworCisJLyogV2FpdCBmb3IgaTJjX3J4X2RhdGFfcmR5ICovCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJaWYgKGdvNzAwN19yZWFkX2FkZHIoZ28sIFNUQVRVU19SRUdfQUREUiwgJnZhbCkgPCAwKQorCQkJZ290byBpMmNfZG9uZTsKKwkJaWYgKHZhbCAmIEkyQ19SRUFEX1JFQURZX01BU0spCisJCQlicmVhazsKKwkJbXNsZWVwKDEwMCk7CisJfQorCWlmIChpID09IDEwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LWkyYzogSTJDIGFkYXB0ZXIgaXMgaHVuZ1xuIik7CisJCWdvdG8gaTJjX2RvbmU7CisJfQorCisJLyogUmV0cmlldmUgdGhlIHJlYWQgYnl0ZSAqLworCWlmIChnbzcwMDdfcmVhZF9hZGRyKGdvLCBJMkNfREFUQV9SRUdfQUREUiwgJnZhbCkgPCAwKQorCQlnb3RvIGkyY19kb25lOworCSpkYXRhID0gdmFsOworCXJldCA9IDA7CisKK2kyY19kb25lOgorCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0KSB7CisJCS8qIElzb2xhdGUgdGhlIEkyQyBwb3J0IG9uIHRoaXMgR083MDA3IGZyb20gdGhlIHNoYXJlZCBidXMgKi8KKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDAwKTsKKwkJdXAoJmFkbGlua19tcGcyNF9pMmNfbG9jayk7CisJfQorCXVwKCZnby0+aHdfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLAorCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLAorCQl1OCBjb21tYW5kLCBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCisJaWYgKHNpemUgIT0gSTJDX1NNQlVTX0JZVEVfREFUQSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBnbzcwMDdfaTJjX3hmZXIoZ28sIGFkZHIsIHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQsIGNvbW1hbmQsCisJCQlmbGFncyAmIEkyQ19DTElFTlRfU0NDQiA/IDB4MTAgOiAweDAwLCAmZGF0YS0+Ynl0ZSk7Cit9CisKKy8qIFZFUlkgTElNSVRFRCBJMkMgbWFzdGVyIHhmZXIgZnVuY3Rpb24gLS0gb25seSBuZWVkZWQgYmVjYXVzZSB0aGUKKyAqIFNNQnVzIGZ1bmN0aW9ucyBvbmx5IHN1cHBvcnQgOC1iaXQgY29tbWFuZHMgYW5kIHRoZSBTQUE3MTM1IHVzZXMKKyAqIDE2LWJpdCBjb21tYW5kcy4gIFRoZSBJMkMgaW50ZXJmYWNlIG9uIHRoZSBHTzcwMDcsIGFzIGxpbWl0ZWQgYXMKKyAqIGl0IGlzLCBkb2VzIHN1cHBvcnQgdGhpcyBtb2RlLiAqLworCitzdGF0aWMgaW50IGdvNzAwN19pMmNfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7CisJCS8qIFdlIGNhbiBvbmx5IGRvIHR3byB0aGluZ3MgaGVyZSAtLSB3cml0ZSB0aHJlZSBieXRlcywgb3IKKwkJICogd3JpdGUgdHdvIGJ5dGVzIGFuZCByZWFkIG9uZSBieXRlLiAqLworCQlpZiAobXNnc1tpXS5sZW4gPT0gMikgeworCQkJaWYgKGkgKyAxID09IG51bSB8fCBtc2dzW2ldLmFkZHIgIT0gbXNnc1tpICsgMV0uYWRkciB8fAorCQkJCQkobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB8fAorCQkJCQkhKG1zZ3NbaSArIDFdLmZsYWdzICYgSTJDX01fUkQpIHx8CisJCQkJCW1zZ3NbaSArIDFdLmxlbiAhPSAxKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChnbzcwMDdfaTJjX3hmZXIoZ28sIG1zZ3NbaV0uYWRkciwgMSwKKwkJCQkJKG1zZ3NbaV0uYnVmWzBdIDw8IDgpIHwgbXNnc1tpXS5idWZbMV0sCisJCQkJCTB4MDEsICZtc2dzW2kgKyAxXS5idWZbMF0pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQkrK2k7CisJCX0gZWxzZSBpZiAobXNnc1tpXS5sZW4gPT0gMykgeworCQkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAobXNnc1tpXS5sZW4gIT0gMykKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoZ283MDA3X2kyY194ZmVyKGdvLCBtc2dzW2ldLmFkZHIsIDAsCisJCQkJCShtc2dzW2ldLmJ1ZlswXSA8PCA4KSB8IG1zZ3NbaV0uYnVmWzFdLAorCQkJCQkweDAxLCAmbXNnc1tpXS5idWZbMl0pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0gZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGdvNzAwN19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZ283MDA3X2FsZ28gPSB7CisJLnNtYnVzX3hmZXIJPSBnbzcwMDdfc21idXNfeGZlciwKKwkubWFzdGVyX3hmZXIJPSBnbzcwMDdfaTJjX21hc3Rlcl94ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gZ283MDA3X2Z1bmN0aW9uYWxpdHksCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGdvNzAwN19hZGFwX3RlbXBsID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmNsYXNzCQkJPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAorCS5uYW1lCQkJPSAiV0lTIEdPNzAwN1NCIiwKKwkuaWQJCQk9IEkyQ19BTEdPX0dPNzAwNywKKwkuYWxnbwkJCT0gJmdvNzAwN19hbGdvLAorfTsKKworaW50IGdvNzAwN19pMmNfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwltZW1jcHkoJmdvLT5pMmNfYWRhcHRlciwgJmdvNzAwN19hZGFwX3RlbXBsLAorCQkJc2l6ZW9mKGdvNzAwN19hZGFwX3RlbXBsKSk7CisJZ28tPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSBnby0+ZGV2OworCWkyY19zZXRfYWRhcGRhdGEoJmdvLT5pMmNfYWRhcHRlciwgZ28pOworCWlmIChpMmNfYWRkX2FkYXB0ZXIoJmdvLT5pMmNfYWRhcHRlcikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNy1pMmM6IGVycm9yOiBpMmNfYWRkX2FkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDU1NDJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctcHJpdi5oCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBpbmNsdWRlIGZpbGUgZm9yIHRoZSBnbzcwMDcgZHJpdmVyLiAgSXQgc2hvdWxkIG5vdAorICogYmUgaW5jbHVkZWQgYnkgYW55Ym9keSBidXQgdGhlIGRyaXZlciBpdHNlbGYsIGFuZCBlc3BlY2lhbGx5IG5vdCBieQorICogdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMuCisgKi8KKworc3RydWN0IGdvNzAwNzsKKworLyogSURzIHRvIGFjdGl2YXRlIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQgY29kZSAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfSUkJMAorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVMT0FECTEKKyNkZWZpbmUgR083MDA3X0JPQVJESURfU1RBUl9UUkVLCTIKKyNkZWZpbmUgR083MDA3X0JPQVJESURfUENJX1ZPWUFHRVIJMworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9YTUVOCQk0CisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1hNRU5fSUkJCTUKKyNkZWZpbmUgR083MDA3X0JPQVJESURfWE1FTl9JSUkJCTYKKyNkZWZpbmUgR083MDA3X0JPQVJESURfTUFUUklYX1JFVgk3CisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1BYX000MDJVCQkxNgorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfQU5ZCTE3IC8qIG5lZWQgdG8gY2hlY2sgdHVuZXIgbW9kZWwgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX05BCTE4IC8qIGRldGVjdGVkIE5UU0MgdHVuZXIgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0VVCTE5IC8qIGRldGVjdGVkIFBBTCB0dW5lciAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfSlAJMjAgLyogZGV0ZWN0ZWQgTlRTQy1KIHR1bmVyICovCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX0xJRkVWSUVXX0xSMTkyCTIxIC8qIFRWIFdhbGtlciBVbHRyYSAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9FTkRVUkEJCTIyCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNAkyMworCisvKiBWYXJpb3VzIGNoYXJhY3RlcmlzdGljcyBvZiBlYWNoIGJvYXJkICovCisjZGVmaW5lIEdPNzAwN19CT0FSRF9IQVNfQVVESU8JCSgxPDwwKQorI2RlZmluZSBHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDCSgxPDwxKQorI2RlZmluZSBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSCQkoMTw8MikKKworLyogQ2hhcmFjdGVyaXN0aWNzIG9mIHNlbnNvciBkZXZpY2VzICovCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfVkFMSURfUE9MQVIJKDE8PDApCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfSFJFRl9QT0xBUgkoMTw8MSkKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9WUkVGX1BPTEFSCSgxPDwyKQorI2RlZmluZSBHTzcwMDdfU0VOU09SX0ZJRUxEX0lEX1BPTEFSCSgxPDwzKQorI2RlZmluZSBHTzcwMDdfU0VOU09SX0JJVF9XSURUSAkJKDE8PDQpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFCSgxPDw1KQorI2RlZmluZSBHTzcwMDdfU0VOU09SXzY1NgkJKDE8PDYpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfQ09ORklHX01BU0sJMHg3ZgorI2RlZmluZSBHTzcwMDdfU0VOU09SX1RWCQkoMTw8NykKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9WQkkJCSgxPDw4KQorI2RlZmluZSBHTzcwMDdfU0VOU09SX1NDQUxJTkcJCSgxPDw5KQorCisvKiBDaGFyYWN0ZXJpc3RpY3Mgb2YgYXVkaW8gc2Vuc29yIGRldmljZXMgKi8KKyNkZWZpbmUgR083MDA3X0FVRElPX0kyU19NT0RFXzEJCSgxKQorI2RlZmluZSBHTzcwMDdfQVVESU9fSTJTX01PREVfMgkJKDIpCisjZGVmaW5lIEdPNzAwN19BVURJT19JMlNfTU9ERV8zCQkoMykKKyNkZWZpbmUgR083MDA3X0FVRElPX0JDTEtfUE9MQVIJCSgxPDwyKQorI2RlZmluZSBHTzcwMDdfQVVESU9fV09SRF8xNAkJKDE0PDw0KQorI2RlZmluZSBHTzcwMDdfQVVESU9fV09SRF8xNgkJKDE2PDw0KQorI2RlZmluZSBHTzcwMDdfQVVESU9fT05FX0NIQU5ORUwJKDE8PDExKQorI2RlZmluZSBHTzcwMDdfQVVESU9fSTJTX01BU1RFUgkJKDE8PDE2KQorI2RlZmluZSBHTzcwMDdfQVVESU9fT0tJX01PREUJCSgxPDwxNykKKworc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvIHsKKwljaGFyICpmaXJtd2FyZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJaW50IGhwaV9idWZmZXJfY2FwOworCXVuc2lnbmVkIGludCBzZW5zb3JfZmxhZ3M7CisJaW50IHNlbnNvcl93aWR0aDsKKwlpbnQgc2Vuc29yX2hlaWdodDsKKwlpbnQgc2Vuc29yX2ZyYW1lcmF0ZTsKKwlpbnQgc2Vuc29yX2hfb2Zmc2V0OworCWludCBzZW5zb3Jfdl9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGF1ZGlvX2ZsYWdzOworCWludCBhdWRpb19yYXRlOworCWludCBhdWRpb19iY2xrX2RpdjsKKwlpbnQgYXVkaW9fbWFpbl9kaXY7CisJaW50IG51bV9pMmNfZGV2czsKKwlzdHJ1Y3QgeworCQlpbnQgaWQ7CisJCWludCBhZGRyOworCX0gaTJjX2RldnNbNF07CisJaW50IG51bV9pbnB1dHM7CisJc3RydWN0IHsKKwkJaW50IHZpZGVvX2lucHV0OworCQlpbnQgYXVkaW9faW5wdXQ7CisJCWNoYXIgKm5hbWU7CisJfSBpbnB1dHNbNF07Cit9OworCitzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgeworCWludCAoKmludGVyZmFjZV9yZXNldCkoc3RydWN0IGdvNzAwNyAqZ28pOworCWludCAoKndyaXRlX2ludGVycnVwdCkoc3RydWN0IGdvNzAwNyAqZ28sIGludCBhZGRyLCBpbnQgZGF0YSk7CisJaW50ICgqcmVhZF9pbnRlcnJ1cHQpKHN0cnVjdCBnbzcwMDcgKmdvKTsKKwlpbnQgKCpzdHJlYW1fc3RhcnQpKHN0cnVjdCBnbzcwMDcgKmdvKTsKKwlpbnQgKCpzdHJlYW1fc3RvcCkoc3RydWN0IGdvNzAwNyAqZ28pOworCWludCAoKnNlbmRfZmlybXdhcmUpKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqZGF0YSwgaW50IGxlbik7Cit9OworCisvKiBUaGUgdmlkZW8gYnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIFBBR0VfU0laRSAqLworI2RlZmluZQlHTzcwMDdfQlVGX1BBR0VTCSgxMjggKiAxMDI0IC8gUEFHRV9TSVpFKQorI2RlZmluZQlHTzcwMDdfQlVGX1NJWkUJCShHTzcwMDdfQlVGX1BBR0VTIDw8IFBBR0VfU0hJRlQpCisKK3N0cnVjdCBnbzcwMDdfYnVmZmVyIHsKKwlzdHJ1Y3QgZ283MDA3ICpnbzsgLyogUmV2ZXJzZSByZWZlcmVuY2UgZm9yIFZNQSBvcHMgKi8KKwlpbnQgaW5kZXg7IC8qIFJldmVyc2UgcmVmZXJlbmNlIGZvciBEUUJVRiAqLworCWVudW0geyBCVUZfU1RBVEVfSURMRSwgQlVGX1NUQVRFX1FVRVVFRCwgQlVGX1NUQVRFX0RPTkUgfSBzdGF0ZTsKKwl1MzIgc2VxOworCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbR083MDA3X0JVRl9QQUdFUyArIDFdOyAvKiBleHRyYSBmb3Igc3RyYWRkbGluZyAqLworCXVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyOworCXVuc2lnbmVkIGludCBwYWdlX2NvdW50OworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGJ5dGVzdXNlZDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfb2Zmc2V0OworCXUzMiBtb2RldF9hY3RpdmU7CisJaW50IG1hcHBlZDsKK307CisKK3N0cnVjdCBnbzcwMDdfZmlsZSB7CisJc3RydWN0IGdvNzAwNyAqZ287CisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCWludCBidWZfY291bnQ7CisJc3RydWN0IGdvNzAwN19idWZmZXIgKmJ1ZnM7Cit9OworCisjZGVmaW5lCUdPNzAwN19GT1JNQVRfTUpQRUcJMAorI2RlZmluZSBHTzcwMDdfRk9STUFUX01QRUc0CTEKKyNkZWZpbmUgR083MDA3X0ZPUk1BVF9NUEVHMQkyCisjZGVmaW5lIEdPNzAwN19GT1JNQVRfTVBFRzIJMworI2RlZmluZSBHTzcwMDdfRk9STUFUX0gyNjMJNAorCisjZGVmaW5lIEdPNzAwN19SQVRJT18xXzEJMAorI2RlZmluZSBHTzcwMDdfUkFUSU9fNF8zCTEKKyNkZWZpbmUgR083MDA3X1JBVElPXzE2XzkJMgorCitlbnVtIGdvNzAwN19wYXJzZXJfc3RhdGUgeworCVNUQVRFX0RBVEEsCisJU1RBVEVfMDAsCisJU1RBVEVfMDBfMDAsCisJU1RBVEVfMDBfMDBfMDEsCisJU1RBVEVfRkYsCisJU1RBVEVfVkJJX0xFTl9BLAorCVNUQVRFX1ZCSV9MRU5fQiwKKwlTVEFURV9NT0RFVF9NQVAsCisJU1RBVEVfVU5QQVJTRUQsCit9OworCitzdHJ1Y3QgZ283MDA3IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGludCBib2FyZF9pZDsKKwlpbnQgdHVuZXJfdHlwZTsKKwlpbnQgY2hhbm5lbF9udW1iZXI7IC8qIGZvciBtdWx0aS1jaGFubmVsIGJvYXJkcyBsaWtlIEFkbGluayBQQ0ktTVBHMjQgKi8KKwljaGFyIG5hbWVbNjRdOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldjsKKwlpbnQgcmVmX2NvdW50OworCWVudW0geyBTVEFUVVNfSU5JVCwgU1RBVFVTX09OTElORSwgU1RBVFVTX1NIVVRET1dOIH0gc3RhdHVzOworCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBod19sb2NrOworCWludCBzdHJlYW1pbmc7CisJaW50IGluX3VzZTsKKwlpbnQgYXVkaW9fZW5hYmxlZDsKKworCS8qIFZpZGVvIGlucHV0ICovCisJaW50IGlucHV0OworCWVudW0geyBHTzcwMDdfU1REX05UU0MsIEdPNzAwN19TVERfUEFMLCBHTzcwMDdfU1REX09USEVSIH0gc3RhbmRhcmQ7CisJaW50IHNlbnNvcl9mcmFtZXJhdGU7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7CisJaW50IGVuY29kZXJfaF9vZmZzZXQ7CisJaW50IGVuY29kZXJfdl9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGVuY29kZXJfaF9oYWx2ZToxOworCXVuc2lnbmVkIGludCBlbmNvZGVyX3ZfaGFsdmU6MTsKKwl1bnNpZ25lZCBpbnQgZW5jb2Rlcl9zdWJzYW1wbGU6MTsKKworCS8qIEVuY29kZXIgY29uZmlnICovCisJaW50IGZvcm1hdDsKKwlpbnQgYml0cmF0ZTsKKwlpbnQgZnBzX3NjYWxlOworCWludCBwYWxpOworCWludCBhc3BlY3RfcmF0aW87CisJaW50IGdvcF9zaXplOworCXVuc2lnbmVkIGludCBpcGI6MTsKKwl1bnNpZ25lZCBpbnQgY2xvc2VkX2dvcDoxOworCXVuc2lnbmVkIGludCByZXBlYXRfc2VxaGVhZDoxOworCXVuc2lnbmVkIGludCBzZXFfaGVhZGVyX2VuYWJsZToxOworCXVuc2lnbmVkIGludCBnb3BfaGVhZGVyX2VuYWJsZToxOworCXVuc2lnbmVkIGludCBkdmRfbW9kZToxOworCXVuc2lnbmVkIGludCBpbnRlcmxhY2VfY29kaW5nOjE7CisKKwkvKiBNb3Rpb24gZGV0ZWN0aW9uICovCisJdW5zaWduZWQgaW50IG1vZGV0X2VuYWJsZToxOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBlbmFibGU6MTsKKwkJaW50IHBpeGVsX3RocmVzaG9sZDsKKwkJaW50IG1vdGlvbl90aHJlc2hvbGQ7CisJCWludCBtYl90aHJlc2hvbGQ7CisJfSBtb2RldFs0XTsKKwl1bnNpZ25lZCBjaGFyIG1vZGV0X21hcFsxNjI0XTsKKwl1bnNpZ25lZCBjaGFyIGFjdGl2ZV9tYXBbMjE2XTsKKworCS8qIFZpZGVvIHN0cmVhbWluZyAqLworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICphY3RpdmVfYnVmOworCWVudW0gZ283MDA3X3BhcnNlcl9zdGF0ZSBzdGF0ZTsKKwlpbnQgcGFyc2VfbGVuZ3RoOworCXUxNiBtb2RldF93b3JkOworCWludCBzZWVuX2ZyYW1lOworCXUzMiBuZXh0X3NlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZV93YWl0cTsKKworCS8qIEF1ZGlvIHN0cmVhbWluZyAqLworCXZvaWQgKCphdWRpb19kZWxpdmVyKShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmJ1ZiwgaW50IGxlbmd0aCk7CisJdm9pZCAqc25kX2NvbnRleHQ7CisKKwkvKiBJMkMgKi8KKwlpbnQgaTJjX2FkYXB0ZXJfb25saW5lOworCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcHRlcjsKKworCS8qIEhQSSBkcml2ZXIgKi8KKwlzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgKmhwaV9vcHM7CisJdm9pZCAqaHBpX2NvbnRleHQ7CisJaW50IGludGVycnVwdF9hdmFpbGFibGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgaW50ZXJydXB0X3dhaXRxOworCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF92YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfZGF0YTsKK307CisKKy8qIEFsbCBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBocGlfbG9jayBzZW1hcGhvcmUgaGVsZCEgKi8KKyNkZWZpbmUgZ283MDA3X2ludGVyZmFjZV9yZXNldChnbykgXAorCQkJKChnbyktPmhwaV9vcHMtPmludGVyZmFjZV9yZXNldChnbykpCisjZGVmaW5lCWdvNzAwN193cml0ZV9pbnRlcnJ1cHQoZ28sIHgsIHkpIFwKKwkJCSgoZ28pLT5ocGlfb3BzLT53cml0ZV9pbnRlcnJ1cHQpKChnbyksICh4KSwgKHkpKQorI2RlZmluZSBnbzcwMDdfc3RyZWFtX3N0YXJ0KGdvKSBcCisJCQkoKGdvKS0+aHBpX29wcy0+c3RyZWFtX3N0YXJ0KGdvKSkKKyNkZWZpbmUgZ283MDA3X3N0cmVhbV9zdG9wKGdvKSBcCisJCQkoKGdvKS0+aHBpX29wcy0+c3RyZWFtX3N0b3AoZ28pKQorI2RlZmluZQlnbzcwMDdfc2VuZF9maXJtd2FyZShnbywgeCwgeSkgXAorCQkJKChnbyktPmhwaV9vcHMtPnNlbmRfZmlybXdhcmUpKChnbyksICh4KSwgKHkpKQorI2RlZmluZSBnbzcwMDdfd3JpdGVfYWRkcihnbywgeCwgeSkgXAorCQkJKChnbyktPmhwaV9vcHMtPndyaXRlX2ludGVycnVwdCkoKGdvKSwgKHgpfDB4ODAwMCwgKHkpKQorCisvKiBnbzcwMDctZHJpdmVyLmMgKi8KK2ludCBnbzcwMDdfcmVhZF9hZGRyKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgYWRkciwgdTE2ICpkYXRhKTsKK2ludCBnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqdmFsdWUsIHUxNiAqZGF0YSk7CitpbnQgZ283MDA3X2Jvb3RfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbywgaW50IGluaXRfaTJjKTsKK2ludCBnbzcwMDdfcmVzZXRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbyk7CitpbnQgZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pOworaW50IGdvNzAwN19zdGFydF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKTsKK3ZvaWQgZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmJ1ZiwgaW50IGxlbmd0aCk7CitzdHJ1Y3QgZ283MDA3ICpnbzcwMDdfYWxsb2Moc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvICpib2FyZCwKKwkJCQkJc3RydWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgZ283MDA3X3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbyk7CisKKy8qIGdvNzAwNy1mdy5jICovCitpbnQgZ283MDA3X2NvbnN0cnVjdF9md19pbWFnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKipmdywgaW50ICpmd2xlbik7CisKKy8qIGdvNzAwNy1pMmMuYyAqLworaW50IGdvNzAwN19pMmNfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbyk7CitpbnQgZ283MDA3X2kyY19yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pOworCisvKiBnbzcwMDctdjRsMi5jICovCitpbnQgZ283MDA3X3Y0bDJfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbyk7Cit2b2lkIGdvNzAwN192NGwyX3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbyk7CisKKy8qIHNuZC1nbzcwMDcuYyAqLworaW50IGdvNzAwN19zbmRfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbyk7CitpbnQgZ283MDA3X3NuZF9yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjVlZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMKQEAgLTAsMCArMSwxMjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dmF1ZGlvLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBhc3N1bWVfZW5kdXJhOworbW9kdWxlX3BhcmFtKGFzc3VtZV9lbmR1cmEsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGFzc3VtZV9lbmR1cmEsICJ3aGVuIHByb2JpbmcgZmFpbHMsIGhhcmR3YXJlIGlzIGEgUGVsY28gRW5kdXJhIik7CisKKy8qICNkZWZpbmUgR083MDA3X1VTQl9ERUJVRyAqLworLyogI2RlZmluZSBHTzcwMDdfSTJDX0RFQlVHICovIC8qIGZvciBkZWJ1Z2dpbmcgdGhlIEVaLVVTQiBJMkMgYWRhcHRlciAqLworCisjZGVmaW5lCUhQSV9TVEFUVVNfQUREUgkweEZGRjQKKyNkZWZpbmUJSU5UX1BBUkFNX0FERFIJMHhGRkY2CisjZGVmaW5lCUlOVF9JTkRFWF9BRERSCTB4RkZGOAorCisvKgorICogUGlwZXMgb24gRVotVVNCIGludGVyZmFjZToKKyAqIAkwIHNuZCAtIENvbnRyb2wKKyAqIAkwIHJjdiAtIENvbnRyb2wKKyAqIAkyIHNuZCAtIERvd25sb2FkIGZpcm13YXJlIChjb250cm9sKQorICogCTQgcmN2IC0gUmVhZCBJbnRlcnJ1cHQgKGludGVycnVwdCkKKyAqIAk2IHJjdiAtIFJlYWQgVmlkZW8gKGJ1bGspCisgKiAJOCByY3YgLSBSZWFkIEF1ZGlvIChidWxrKQorICovCisKKyNkZWZpbmUgR083MDA3X1VTQl9FWlVTQgkJKDE8PDApCisjZGVmaW5lIEdPNzAwN19VU0JfRVpVU0JfSTJDCQkoMTw8MSkKKworc3RydWN0IGdvNzAwN191c2JfYm9hcmQgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3QgZ283MDA3X2JvYXJkX2luZm8gbWFpbl9pbmZvOworfTsKKworc3RydWN0IGdvNzAwN191c2IgeworCXN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkICpib2FyZDsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGkyY19sb2NrOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IHVyYiAqdmlkZW9fdXJic1s4XTsKKwlzdHJ1Y3QgdXJiICphdWRpb191cmJzWzhdOworCXN0cnVjdCB1cmIgKmludHJfdXJiOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqIFByb2R1Y3Qgc3BlY2lmaWNhdGlvbiBkYXRhICoqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfbWF0cml4X2lpID0geworCS5mbGFncwkJPSBHTzcwMDdfVVNCX0VaVVNCLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPIHwKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQUxJRF9FTkFCTEUgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQkkgfAorCQkJCQlHTzcwMDdfU0VOU09SX1NDQUxJTkcsCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUsCisJCQkJLmFkZHIJPSAweDIwLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMiwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDAsCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDksCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX21hdHJpeF9yZWxvYWQgPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8gfAorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYsCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTMsCisJCQkJLmFkZHIJPSAweDI1LAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMiwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDAsCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDksCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX3N0YXJfdHJlayA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiB8IEdPNzAwN19VU0JfRVpVU0JfSTJDLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPLCAvKiB8CisJCQkJCUdPNzAwN19CT0FSRF9IQVNfVFVORVIsICovCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSB8CisJCQkJCUdPNzAwN19TRU5TT1JfU0NBTElORywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUsCisJCQkJLmFkZHIJPSAweDIwLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMiwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDEsCisJCQkvKgkuYXVkaW9faW5wdXQJPSBBVURJT19FWFRFUk4sICovCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDgsCisJCQkvKgkuYXVkaW9faW5wdXQJPSBBVURJT19FWFRFUk4sICovCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJLyoJeworCQkgKgkJLnZpZGVvX2lucHV0CT0gMywKKwkJICoJCS5hdWRpb19pbnB1dAk9IEFVRElPX1RVTkVSLAorCQkgKgkJLm5hbWUJCT0gIlR1bmVyIiwKKwkJICoJfSwKKwkJICovCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9weF90djQwMnUgPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IgfCBHTzcwMDdfVVNCX0VaVVNCX0kyQywKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTyB8CisJCQkJCUdPNzAwN19CT0FSRF9IQVNfVFVORVIsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSB8CisJCQkJCUdPNzAwN19TRU5TT1JfU0NBTElORywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5udW1faTJjX2RldnMJID0gMywKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUsCisJCQkJLmFkZHIJPSAweDIwLAorCQkJfSwKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1VEQTEzNDIsCisJCQkJLmFkZHIJPSAweDFhLAorCQkJfSwKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NPTllfVFVORVIsCisJCQkJLmFkZHIJPSAweDYwLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMywKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDEsCisJCS5hdWRpb19pbnB1dAkgPSBUVkFVRElPX0lOUFVUX0VYVEVSTiwKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gOCwKKwkJCQkuYXVkaW9faW5wdXQJPSBUVkFVRElPX0lOUFVUX0VYVEVSTiwKKwkJCQkubmFtZQkJPSAiUy1WaWRlbyIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDMsCisJCQkJLmF1ZGlvX2lucHV0CT0gVFZBVURJT19JTlBVVF9UVU5FUiwKKwkJCQkubmFtZQkJPSAiVHVuZXIiLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX3htZW4gPSB7CisJLmZsYWdzCQk9IDAsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSAgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgID0gR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmhwaV9idWZmZXJfY2FwICAgPSAwLAorCQkuc2Vuc29yX2ZsYWdzCSAgPSBHTzcwMDdfU0VOU09SX1ZSRUZfUE9MQVIsCisJCS5zZW5zb3Jfd2lkdGgJICA9IDMyMCwKKwkJLnNlbnNvcl9oZWlnaHQJICA9IDI0MCwKKwkJLnNlbnNvcl9mcmFtZXJhdGUgPSAzMDAzMCwKKwkJLmF1ZGlvX2ZsYWdzCSAgPSBHTzcwMDdfQVVESU9fT05FX0NIQU5ORUwgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01PREVfMyB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE0IHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgfAorCQkJCQlHTzcwMDdfQVVESU9fQkNMS19QT0xBUiB8CisJCQkJCUdPNzAwN19BVURJT19PS0lfTU9ERSwKKwkJLmF1ZGlvX3JhdGUJICA9IDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgID0gNDgsCisJCS5hdWRpb19tYWluX2RpdgkgID0gMSwKKwkJLm51bV9pMmNfZGV2cwkgID0gMSwKKwkJLmkyY19kZXZzCSAgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19PVjc2NDAsCisJCQkJLmFkZHIJPSAweDIxLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJICA9IDEsCisJCS5pbnB1dHMgCSAgPSB7CisJCQl7CisJCQkJLm5hbWUJCT0gIkNhbWVyYSIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfbWF0cml4X3Jldm9sdXRpb24gPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8gfAorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSwKKwkJLm51bV9pMmNfZGV2cwkgPSAxLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfVFc5OTAzLAorCQkJCS5hZGRyCT0gMHg0NCwKKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDIsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAyLAorCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSA4LAorCQkJCS5uYW1lCQk9ICJTLVZpZGVvIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9saWZldmlld19scjE5MiA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTyB8CisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFIHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkJJIHwKKwkJCQkJR083MDA3X1NFTlNPUl9TQ0FMSU5HLAorCQkubnVtX2kyY19kZXZzCSA9IDAsCisJCS5udW1faW5wdXRzCSA9IDEsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAwLAorCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX2VuZHVyYSA9IHsKKwkuZmxhZ3MJCT0gMCwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gMCwKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX3JhdGUJID0gODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDQ4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gOCwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDAsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWLAorCQkuc2Vuc29yX2hfb2Zmc2V0ID0gOCwKKwkJLm51bV9pMmNfZGV2cwkgPSAwLAorCQkubnVtX2lucHV0cwkgPSAxLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLm5hbWUJCT0gIkNhbWVyYSIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfYWRsaW5rX21wZzI0ID0geworCS5mbGFncwkJPSAwLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gMCwKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSwKKwkJLm51bV9pMmNfZGV2cwkgPSAxLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfVFcyODA0LAorCQkJCS5hZGRyCT0gMHgwMCwgLyogeWVzLCByZWFsbHkgKi8KKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDEsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnbzcwMDdfdXNiX2lkX3RhYmxlW10gPSB7CisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiB8CisJCQkJCVVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjAwLCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBYTWVuICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwMCwKKwkJLmJJbnRlcmZhY2VDbGFzcwk9IDI1NSwKKwkJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDAsCisJCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAyNTUsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9YTUVOLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDIsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIE1hdHJpeCBJSSAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMDIsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9NQVRSSVhfSUksCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwNCwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgTWF0cml4ICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwNCwgICAvKiAgICAgUmVsb2FkZWQgKi8KKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX01BVFJJWF9SRUxPQUQsCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OIHwKKwkJCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDUsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIFhNZW4tSUkgKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjA1LAorCQkuYkludGVyZmFjZUNsYXNzCT0gMjU1LAorCQkuYkludGVyZmFjZVN1YkNsYXNzCT0gMCwKKwkJLmJJbnRlcmZhY2VQcm90b2NvbAk9IDI1NSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1hNRU5fSUksCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwOCwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgU3RhciBUcmVrICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwOCwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1NUQVJfVFJFSywKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04gfAorCQkJCQlVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwOSwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgWE1lbi1JSUkgKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjA5LAorCQkuYkludGVyZmFjZUNsYXNzCT0gMjU1LAorCQkuYkludGVyZmFjZVN1YkNsYXNzCT0gMCwKKwkJLmJJbnRlcmZhY2VQcm90b2NvbAk9IDI1NSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1hNRU5fSUlJLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMTAsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIE1hdHJpeCAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMTAsICAgLyogICAgIFJldm9sdXRpb24gKi8KKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX01BVFJJWF9SRVYsCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDA5M2IsICAvKiBWZW5kb3IgSUQgb2YgUGxleHRvciAqLworCQkuaWRQcm9kdWN0CT0gMHhhMTAyLCAgLyogUHJvZHVjdCBJRCBvZiBNNDAyVSAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgxLAkgICAvKiByZXZpc2lvbiBudW1iZXIgb2YgQmx1ZWJlcnJ5ICovCisJCS5iY2REZXZpY2VfaGkJPSAweDEsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9QWF9NNDAyVSwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MDkzYiwgIC8qIFZlbmRvciBJRCBvZiBQbGV4dG9yICovCisJCS5pZFByb2R1Y3QJPSAweGExMDQsICAvKiBQcm9kdWN0IElEIG9mIFRWNDAyVSAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgxLAorCQkuYmNkRGV2aWNlX2hpCT0gMHgxLAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0FOWSwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MTBmZCwgIC8qIFZlbmRvciBJRCBvZiBBbnViaXMgRWxlY3Ryb25pY3MgKi8KKwkJLmlkUHJvZHVjdAk9IDB4ZGUwMCwgIC8qIFByb2R1Y3QgSUQgb2YgTGlmZXZpZXcgTFIxOTIgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MSwKKwkJLmJjZERldmljZV9oaQk9IDB4MSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX0xJRkVWSUVXX0xSMTkyLAorCX0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdvNzAwN191c2JfaWRfdGFibGUpOworCisvKioqKioqKioqKioqKioqKioqKioqIERyaXZlciBmb3IgRVotVVNCIEhQSSBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3Qoc3RydWN0IGdvNzAwNyAqZ28sIGludCByZXF1ZXN0LAorCQlpbnQgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgbGVuZ3RoLCBpbnQgaW4pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgdGltZW91dCA9IDUwMDA7CisKKwlpZiAoaW4pIHsKKwkJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwKKwkJCQl1c2JfcmN2Y3RybHBpcGUodXNiLT51c2JkZXYsIDApLCByZXF1ZXN0LAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkJCXZhbHVlLCBpbmRleCwgdHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworCX0gZWxzZSB7CisJCXJldHVybiB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwgcmVxdWVzdCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCXZhbHVlLCBpbmRleCwgdHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworCX0KK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX2ludGVyZmFjZV9yZXNldChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCXUxNiBpbnRyX3ZhbCwgaW50cl9kYXRhOworCisJLyogUmVzZXQgZW5jb2RlciAqLworCWlmIChnbzcwMDdfd3JpdGVfaW50ZXJydXB0KGdvLCAweDAwMDEsIDB4MDAwMSkgPCAwKQorCQlyZXR1cm4gLTE7CisJbXNsZWVwKDEwMCk7CisKKwlpZiAodXNiLT5ib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKSB7CisJCS8qIFJlc2V0IGJ1ZmZlciBpbiBFWi1VU0IgKi8KKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiByZXNldHRpbmcgRVotVVNCIGJ1ZmZlcnNcbiIpOworI2VuZGlmCisJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDEwLCAwLCAwLCBOVUxMLCAwLCAwKSA8IDAgfHwKKwkJICAgIGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4MTAsIDAsIDAsIE5VTEwsIDAsIDApIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQkvKiBSZXNldCBlbmNvZGVyIGFnYWluICovCisJCWlmIChnbzcwMDdfd3JpdGVfaW50ZXJydXB0KGdvLCAweDAwMDEsIDB4MDAwMSkgPCAwKQorCQkJcmV0dXJuIC0xOworCQltc2xlZXAoMTAwKTsKKwl9CisKKwkvKiBXYWl0IGZvciBhbiBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCAqLworCWlmIChnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwIHx8CisJCQkoaW50cl92YWwgJiB+MHgxKSAhPSAweDU1YWEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3LXVzYjogdW5hYmxlIHRvIHJlc2V0IHRoZSBVU0IgaW50ZXJmYWNlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX2V6dXNiX3dyaXRlX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJCWludCBhZGRyLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCBpLCByOworCXUxNiBzdGF0dXNfcmVnOworCWludCB0aW1lb3V0ID0gNTAwOworCisjaWZkZWYgR083MDA3X1VTQl9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHCisJCSJnbzcwMDctdXNiOiBXcml0ZUludGVycnVwdDogJTA0eCAlMDR4XG4iLCBhZGRyLCBkYXRhKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7CisJCXIgPSB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsCisJCQkJdXNiX3JjdmN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwgMHgxNCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCQkwLCBIUElfU1RBVFVTX0FERFIsICZzdGF0dXNfcmVnLAorCQkJCXNpemVvZihzdGF0dXNfcmVnKSwgdGltZW91dCk7CisJCWlmIChyIDwgMCkKKwkJCWdvdG8gd3JpdGVfaW50X2Vycm9yOworCQlfX2xlMTZfdG9fY3B1cygmc3RhdHVzX3JlZyk7CisJCWlmICghKHN0YXR1c19yZWcgJiAweDAwMTApKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMCk7CisJfQorCWlmIChpID09IDEwMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnbzcwMDctdXNiOiBkZXZpY2UgaXMgaHVuZywgc3RhdHVzIHJlZyA9IDB4JTA0eFxuIiwKKwkJCXN0YXR1c19yZWcpOworCQlyZXR1cm4gLTE7CisJfQorCXIgPSB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2ItPnVzYmRldiwgMCksIDB4MTIsCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLCBkYXRhLAorCQkJSU5UX1BBUkFNX0FERFIsIE5VTEwsIDAsIHRpbWVvdXQpOworCWlmIChyIDwgMCkKKwkJZ290byB3cml0ZV9pbnRfZXJyb3I7CisJciA9IHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwKKwkJCTB4MTIsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsIGFkZHIsCisJCQlJTlRfSU5ERVhfQUREUiwgTlVMTCwgMCwgdGltZW91dCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIHdyaXRlX2ludF9lcnJvcjsKKwlyZXR1cm4gMDsKKword3JpdGVfaW50X2Vycm9yOgorCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gV3JpdGVJbnRlcnJ1cHQ6ICVkXG4iLCByKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX29uYm9hcmRfd3JpdGVfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvLAorCQkJCQkJaW50IGFkZHIsIGludCBkYXRhKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJdTggKnRidWY7CisJaW50IHI7CisJaW50IHRpbWVvdXQgPSA1MDA7CisKKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJImdvNzAwNy11c2I6IFdyaXRlSW50ZXJydXB0OiAlMDR4ICUwNHhcbiIsIGFkZHIsIGRhdGEpOworI2VuZGlmCisKKwl0YnVmID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAodGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQodGJ1ZiwgMCwgOCk7CisJdGJ1ZlswXSA9IGRhdGEgJiAweGZmOworCXRidWZbMV0gPSBkYXRhID4+IDg7CisJdGJ1ZlsyXSA9IGFkZHIgJiAweGZmOworCXRidWZbM10gPSBhZGRyID4+IDg7CisJciA9IHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYi0+dXNiZGV2LCAyKSwgMHgwMCwKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCwgMHg1NWFhLAorCQkJMHhmMGYwLCB0YnVmLCA4LCB0aW1lb3V0KTsKKwlrZnJlZSh0YnVmKTsKKwlpZiAociA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiBXcml0ZUludGVycnVwdDogJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN191c2JfcmVhZGludGVycnVwdF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoc3RydWN0IGdvNzAwNyAqKXVyYi0+Y29udGV4dDsKKwl1MTYgKnJlZ3MgPSAodTE2ICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTiAmJgorCQkJCWdvLT5zdGF0dXMgIT0gU1RBVFVTX1NIVVRET1dOKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ283MDA3LXVzYjogZXJyb3IgaW4gcmVhZCBpbnRlcnJ1cHQ6ICVkXG4iLAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCXdha2VfdXAoJmdvLT5pbnRlcnJ1cHRfd2FpdHEpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogc2hvcnQgcmVhZCBpbiBpbnRlcnJ1cHQgcGlwZSFcbiIpOworCX0gZWxzZSB7CisJCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlID0gMTsKKwkJZ28tPmludGVycnVwdF9kYXRhID0gX19sZTE2X3RvX2NwdShyZWdzWzBdKTsKKwkJZ28tPmludGVycnVwdF92YWx1ZSA9IF9fbGUxNl90b19jcHUocmVnc1sxXSk7CisjaWZkZWYgR083MDA3X1VTQl9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogUmVhZEludGVycnVwdDogJTA0eCAlMDR4XG4iLAorCQkJCWdvLT5pbnRlcnJ1cHRfdmFsdWUsIGdvLT5pbnRlcnJ1cHRfZGF0YSk7CisjZW5kaWYKKwl9CisKKwl3YWtlX3VwKCZnby0+aW50ZXJydXB0X3dhaXRxKTsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3JlYWRfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IHI7CisKKwlyID0gdXNiX3N1Ym1pdF91cmIodXNiLT5pbnRyX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNy11c2I6IHVuYWJsZSB0byBzdWJtaXQgaW50ZXJydXB0IHVyYjogJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN191c2JfcmVhZF92aWRlb19waXBlX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IChzdHJ1Y3QgZ283MDA3ICopdXJiLT5jb250ZXh0OworCWludCByOworCisJaWYgKCFnby0+c3RyZWFtaW5nKSB7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ28tPmZyYW1lX3dhaXRxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIHZpZGVvIHBpcGU6ICVkXG4iLAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IHNob3J0IHJlYWQgaW4gdmlkZW8gcGlwZSFcbiIpOworCQlyZXR1cm47CisJfQorCWdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0oZ28sIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCXIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiB2aWRlbyBwaXBlOiAlZFxuIiwgcik7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN191c2JfcmVhZF9hdWRpb19waXBlX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IChzdHJ1Y3QgZ283MDA3ICopdXJiLT5jb250ZXh0OworCWludCByOworCisJaWYgKCFnby0+c3RyZWFtaW5nKQorCQlyZXR1cm47CisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiBhdWRpbyBwaXBlOiAlZFxuIiwKKwkJCQl1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBzaG9ydCByZWFkIGluIGF1ZGlvIHBpcGUhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZ28tPmF1ZGlvX2RlbGl2ZXIgIT0gTlVMTCkKKwkJZ28tPmF1ZGlvX2RlbGl2ZXIoZ28sIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCXIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiBhdWRpbyBwaXBlOiAlZFxuIiwgcik7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9zdHJlYW1fc3RhcnQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgaSwgcjsKKworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJciA9IHVzYl9zdWJtaXRfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBzdWJtaXR0aW5nIHZpZGVvICIKKwkJCQkJInVyYiAlZDogJWRcbiIsIGksIHIpOworCQkJZ290byB2aWRlb19zdWJtaXRfZmFpbGVkOworCQl9CisJfQorCWlmICghZ28tPmF1ZGlvX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworCQlyID0gdXNiX3N1Ym1pdF91cmIodXNiLT5hdWRpb191cmJzW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIHN1Ym1pdHRpbmcgYXVkaW8gIgorCQkJCQkidXJiICVkOiAlZFxuIiwgaSwgcik7CisJCQlnb3RvIGF1ZGlvX3N1Ym1pdF9mYWlsZWQ7CisJCX0KKwl9CisJcmV0dXJuIDA7CisKK2F1ZGlvX3N1Ym1pdF9mYWlsZWQ6CisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJdXNiX2tpbGxfdXJiKHVzYi0+YXVkaW9fdXJic1tpXSk7Cit2aWRlb19zdWJtaXRfZmFpbGVkOgorCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCXVzYl9raWxsX3VyYih1c2ItPnZpZGVvX3VyYnNbaV0pOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3N0cmVhbV9zdG9wKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IGk7CisKKwlpZiAoZ28tPnN0YXR1cyA9PSBTVEFUVVNfU0hVVERPV04pCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCXVzYl9raWxsX3VyYih1c2ItPnZpZGVvX3VyYnNbaV0pOworCWlmIChnby0+YXVkaW9fZW5hYmxlZCkKKwkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCXVzYl9raWxsX3VyYih1c2ItPmF1ZGlvX3VyYnNbaV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN191c2Jfc2VuZF9maXJtd2FyZShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgdHJhbnNmZXJyZWQsIHBpcGU7CisJaW50IHRpbWVvdXQgPSA1MDA7CisKKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IERvd25sb2FkQnVmZmVyIHNlbmRpbmcgJWQgYnl0ZXNcbiIsIGxlbik7CisjZW5kaWYKKworCWlmICh1c2ItPmJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpCisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXNiLT51c2JkZXYsIDIpOworCWVsc2UKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1c2ItPnVzYmRldiwgMyk7CisKKwlyZXR1cm4gdXNiX2J1bGtfbXNnKHVzYi0+dXNiZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQkJCSZ0cmFuc2ZlcnJlZCwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgZ283MDA3X3VzYl9lenVzYl9ocGlfb3BzID0geworCS5pbnRlcmZhY2VfcmVzZXQJPSBnbzcwMDdfdXNiX2ludGVyZmFjZV9yZXNldCwKKwkud3JpdGVfaW50ZXJydXB0CT0gZ283MDA3X3VzYl9lenVzYl93cml0ZV9pbnRlcnJ1cHQsCisJLnJlYWRfaW50ZXJydXB0CQk9IGdvNzAwN191c2JfcmVhZF9pbnRlcnJ1cHQsCisJLnN0cmVhbV9zdGFydAkJPSBnbzcwMDdfdXNiX3N0cmVhbV9zdGFydCwKKwkuc3RyZWFtX3N0b3AJCT0gZ283MDA3X3VzYl9zdHJlYW1fc3RvcCwKKwkuc2VuZF9maXJtd2FyZQkJPSBnbzcwMDdfdXNiX3NlbmRfZmlybXdhcmUsCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN19ocGlfb3BzIGdvNzAwN191c2Jfb25ib2FyZF9ocGlfb3BzID0geworCS5pbnRlcmZhY2VfcmVzZXQJPSBnbzcwMDdfdXNiX2ludGVyZmFjZV9yZXNldCwKKwkud3JpdGVfaW50ZXJydXB0CT0gZ283MDA3X3VzYl9vbmJvYXJkX3dyaXRlX2ludGVycnVwdCwKKwkucmVhZF9pbnRlcnJ1cHQJCT0gZ283MDA3X3VzYl9yZWFkX2ludGVycnVwdCwKKwkuc3RyZWFtX3N0YXJ0CQk9IGdvNzAwN191c2Jfc3RyZWFtX3N0YXJ0LAorCS5zdHJlYW1fc3RvcAkJPSBnbzcwMDdfdXNiX3N0cmVhbV9zdG9wLAorCS5zZW5kX2Zpcm13YXJlCQk9IGdvNzAwN191c2Jfc2VuZF9maXJtd2FyZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiogRHJpdmVyIGZvciBFWi1VU0IgSTJDIGFkYXB0ZXIgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdvNzAwN191c2JfaTJjX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCXU4IGJ1ZlsxNl07CisJaW50IGJ1Zl9sZW4sIGk7CisJaW50IHJldCA9IC0xOworCisJaWYgKGdvLT5zdGF0dXMgPT0gU1RBVFVTX1NIVVRET1dOKQorCQlyZXR1cm4gLTE7CisKKwlkb3duKCZ1c2ItPmkyY19sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgeworCQkvKiBUaGUgaGFyZHdhcmUgY29tbWFuZCBpcyAid3JpdGUgc29tZSBieXRlcyB0aGVuIHJlYWQgc29tZQorCQkgKiBieXRlcyIsIHNvIHdlIHRyeSB0byBjb2FsZXNjZSBhIHdyaXRlIGZvbGxvd2VkIGJ5IGEgcmVhZAorCQkgKiBpbnRvIGEgc2luZ2xlIFVTQiB0cmFuc2FjdGlvbiAqLworCQlpZiAoaSArIDEgPCBudW0gJiYgbXNnc1tpXS5hZGRyID09IG1zZ3NbaSArIDFdLmFkZHIgJiYKKwkJCQkhKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgJiYKKwkJCQkobXNnc1tpICsgMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKyNpZmRlZiBHTzcwMDdfSTJDX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogaTJjIHdyaXRlL3JlYWQgJWQvJWQgIgorCQkJCQkiYnl0ZXMgb24gJTAyeFxuIiwgbXNnc1tpXS5sZW4sCisJCQkJCW1zZ3NbaSArIDFdLmxlbiwgbXNnc1tpXS5hZGRyKTsKKyNlbmRpZgorCQkJYnVmWzBdID0gMHgwMTsKKwkJCWJ1ZlsxXSA9IG1zZ3NbaV0ubGVuICsgMTsKKwkJCWJ1ZlsyXSA9IG1zZ3NbaV0uYWRkciA8PCAxOworCQkJbWVtY3B5KCZidWZbM10sIG1zZ3NbaV0uYnVmLCBtc2dzW2ldLmxlbik7CisJCQlidWZfbGVuID0gbXNnc1tpXS5sZW4gKyAzOworCQkJYnVmW2J1Zl9sZW4rK10gPSBtc2dzWysraV0ubGVuOworCQl9IGVsc2UgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworI2lmZGVmIEdPNzAwN19JMkNfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiBpMmMgcmVhZCAlZCAiCisJCQkJCSJieXRlcyBvbiAlMDJ4XG4iLCBtc2dzW2ldLmxlbiwKKwkJCQkJbXNnc1tpXS5hZGRyKTsKKyNlbmRpZgorCQkJYnVmWzBdID0gMHgwMTsKKwkJCWJ1ZlsxXSA9IDE7CisJCQlidWZbMl0gPSBtc2dzW2ldLmFkZHIgPDwgMTsKKwkJCWJ1ZlszXSA9IG1zZ3NbaV0ubGVuOworCQkJYnVmX2xlbiA9IDQ7CisJCX0gZWxzZSB7CisjaWZkZWYgR083MDA3X0kyQ19ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IGkyYyB3cml0ZSAlZCAiCisJCQkJCSJieXRlcyBvbiAlMDJ4XG4iLCBtc2dzW2ldLmxlbiwKKwkJCQkJbXNnc1tpXS5hZGRyKTsKKyNlbmRpZgorCQkJYnVmWzBdID0gMHgwMDsKKwkJCWJ1ZlsxXSA9IG1zZ3NbaV0ubGVuICsgMTsKKwkJCWJ1ZlsyXSA9IG1zZ3NbaV0uYWRkciA8PCAxOworCQkJbWVtY3B5KCZidWZbM10sIG1zZ3NbaV0uYnVmLCBtc2dzW2ldLmxlbik7CisJCQlidWZfbGVuID0gbXNnc1tpXS5sZW4gKyAzOworCQkJYnVmW2J1Zl9sZW4rK10gPSAwOworCQl9CisJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDI0LCAwLCAwLAorCQkJCQkJYnVmLCBidWZfbGVuLCAwKSA8IDApCisJCQlnb3RvIGkyY19kb25lOworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHgyNSwgMCwgMCwgYnVmLAorCQkJCQkJbXNnc1tpXS5sZW4gKyAxLCAxKSA8IDApCisJCQkJZ290byBpMmNfZG9uZTsKKwkJCW1lbWNweShtc2dzW2ldLmJ1ZiwgYnVmICsgMSwgbXNnc1tpXS5sZW4pOworCQl9CisJfQorCXJldCA9IDA7CisKK2kyY19kb25lOgorCXVwKCZ1c2ItPmkyY19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIGdvNzAwN191c2JfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJLyogTm8gZXJyb3JzIGFyZSByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUsIHNvIHdlIGRvbid0IGJvdGhlcgorCSAqIHN1cHBvcnRpbmcgcXVpY2sgd3JpdGVzIHRvIGF2b2lkIGNvbmZ1c2luZyBwcm9iaW5nICovCisJcmV0dXJuIChJMkNfRlVOQ19TTUJVU19FTVVMKSAmIH5JMkNfRlVOQ19TTUJVU19RVUlDSzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGdvNzAwN191c2JfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIJPSBnbzcwMDdfdXNiX2kyY19tYXN0ZXJfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IGdvNzAwN191c2JfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgZ283MDA3X3VzYl9hZGFwX3RlbXBsID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmNsYXNzCQkJPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAorCS5uYW1lCQkJPSAiV0lTIEdPNzAwN1NCIEVaLVVTQiIsCisJLmlkCQkJPSBJMkNfQUxHT19HTzcwMDdfVVNCLAorCS5hbGdvCQkJPSAmZ283MDA3X3VzYl9hbGdvLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKiBVU0IgYWRkL3JlbW92ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdvNzAwN191c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbzsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiOworCXN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkICpib2FyZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwljaGFyICpuYW1lOworCWludCB2aWRlb19waXBlLCBpLCB2X3VyYl9sZW47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogcHJvYmluZyBuZXcgR083MDA3IFVTQiBib2FyZFxuIik7CisKKwlzd2l0Y2ggKGlkLT5kcml2ZXJfaW5mbykgeworCWNhc2UgR083MDA3X0JPQVJESURfTUFUUklYX0lJOgorCQluYW1lID0gIldJUyBNYXRyaXggSUkgb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX21hdHJpeF9paTsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVMT0FEOgorCQluYW1lID0gIldJUyBNYXRyaXggUmVsb2FkZWQgb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX21hdHJpeF9yZWxvYWQ7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfTUFUUklYX1JFVjoKKwkJbmFtZSA9ICJXSVMgTWF0cml4IFJldm9sdXRpb24gb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX21hdHJpeF9yZXZvbHV0aW9uOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1NUQVJfVFJFSzoKKwkJbmFtZSA9ICJXSVMgU3RhciBUcmVrIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF9zdGFyX3RyZWs7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfWE1FTjoKKwkJbmFtZSA9ICJXSVMgWE1lbiBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfeG1lbjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9YTUVOX0lJOgorCQluYW1lID0gIldJUyBYTWVuIElJIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF94bWVuOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1hNRU5fSUlJOgorCQluYW1lID0gIldJUyBYTWVuIElJSSBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfeG1lbjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9QWF9NNDAyVToKKwkJbmFtZSA9ICJQbGV4dG9yIFBYLU00MDJVIjsKKwkJYm9hcmQgPSAmYm9hcmRfbWF0cml4X2lpOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9BTlk6CisJCW5hbWUgPSAiUGxleHRvciBQWC1UVjQwMlUgKHVua25vd24gdHVuZXIpIjsKKwkJYm9hcmQgPSAmYm9hcmRfcHhfdHY0MDJ1OworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX0xJRkVWSUVXX0xSMTkyOgorCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IFRoZSBMaWZldmlldyBUViBXYWxrZXIgVWx0cmEgIgorCQkJCSJpcyBub3Qgc3VwcG9ydGVkLiAgU29ycnkhXG4iKTsKKwkJcmV0dXJuIDA7CisJCW5hbWUgPSAiTGlmZXZpZXcgVFYgV2Fsa2VyIFVsdHJhIjsKKwkJYm9hcmQgPSAmYm9hcmRfbGlmZXZpZXdfbHIxOTI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogdW5rbm93biBib2FyZCBJRCAlZCFcbiIsCisJCQkJKHVuc2lnbmVkIGludClpZC0+ZHJpdmVyX2luZm8pOworCQlyZXR1cm4gMDsKKwl9CisKKwl1c2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ283MDA3X3VzYiksIEdGUF9LRVJORUwpOworCWlmICh1c2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHVzYiwgMCwgc2l6ZW9mKHN0cnVjdCBnbzcwMDdfdXNiKSk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgVVJCIGFuZCBidWZmZXIgZm9yIHJlY2VpdmluZyBpbmNvbWluZyBpbnRlcnJ1cHRzICovCisJdXNiLT5pbnRyX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYi0+aW50cl91cmIgPT0gTlVMTCkKKwkJZ290byBhbGxvY2ZhaWw7CisJdXNiLT5pbnRyX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygyKnNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodXNiLT5pbnRyX3VyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpCisJCWdvdG8gYWxsb2NmYWlsOworCisJZ28gPSBnbzcwMDdfYWxsb2MoJmJvYXJkLT5tYWluX2luZm8sICZpbnRmLT5kZXYpOworCWlmIChnbyA9PSBOVUxMKQorCQlnb3RvIGFsbG9jZmFpbDsKKwl1c2ItPmJvYXJkID0gYm9hcmQ7CisJdXNiLT51c2JkZXYgPSB1c2JkZXY7CisJZ28tPmJvYXJkX2lkID0gaWQtPmRyaXZlcl9pbmZvOworCXN0cm5jcHkoZ28tPm5hbWUsIG5hbWUsIHNpemVvZihnby0+bmFtZSkpOworCWlmIChib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKQorCQlnby0+aHBpX29wcyA9ICZnbzcwMDdfdXNiX2V6dXNiX2hwaV9vcHM7CisJZWxzZQorCQlnby0+aHBpX29wcyA9ICZnbzcwMDdfdXNiX29uYm9hcmRfaHBpX29wczsKKwlnby0+aHBpX2NvbnRleHQgPSB1c2I7CisJdXNiX2ZpbGxfaW50X3VyYih1c2ItPmludHJfdXJiLCB1c2ItPnVzYmRldiwKKwkJCXVzYl9yY3ZpbnRwaXBlKHVzYi0+dXNiZGV2LCA0KSwKKwkJCXVzYi0+aW50cl91cmItPnRyYW5zZmVyX2J1ZmZlciwgMipzaXplb2YodTE2KSwKKwkJCWdvNzAwN191c2JfcmVhZGludGVycnVwdF9jb21wbGV0ZSwgZ28sIDgpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZ28pOworCisJLyogQm9vdCB0aGUgR083MDA3ICovCisJaWYgKGdvNzAwN19ib290X2VuY29kZXIoZ28sIGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmCisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMpIDwgMCkKKwkJZ290byBpbml0ZmFpbDsKKworCS8qIFJlZ2lzdGVyIHRoZSBFWi1VU0IgSTJDIGFkYXB0ZXIsIGlmIHdlJ3JlIHVzaW5nIGl0ICovCisJaWYgKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0JfSTJDKSB7CisJCW1lbWNweSgmZ28tPmkyY19hZGFwdGVyLCAmZ283MDA3X3VzYl9hZGFwX3RlbXBsLAorCQkJCXNpemVvZihnbzcwMDdfdXNiX2FkYXBfdGVtcGwpKTsKKwkJaW5pdF9NVVRFWCgmdXNiLT5pMmNfbG9jayk7CisJCWdvLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gZ28tPmRldjsKKwkJaTJjX3NldF9hZGFwZGF0YSgmZ28tPmkyY19hZGFwdGVyLCBnbyk7CisJCWlmIChpMmNfYWRkX2FkYXB0ZXIoJmdvLT5pMmNfYWRhcHRlcikgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ283MDA3LXVzYjogZXJyb3I6IGkyY19hZGRfYWRhcHRlciBmYWlsZWRcbiIpOworCQkJZ290byBpbml0ZmFpbDsKKwkJfQorCQlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMTsKKwl9CisKKwkvKiBQZWxjbyBhbmQgQWRsaW5rIHJldXNlZCB0aGUgWE1lbiBhbmQgWE1lbi1JSUkgdmVuZG9yIGFuZCBwcm9kdWN0CisJICogSURzIGZvciB0aGVpciBvd24gaW5jb21wYXRpYmxlIGRlc2lnbnMuICBXZSBjYW4gZGV0ZWN0IFhNZW4gYm9hcmRzCisJICogYnkgcHJvYmluZyB0aGUgc2Vuc29yLCBidXQgdGhlcmUgaXMgbm8gd2F5IHRvIHByb2JlIHRoZSBzZW5zb3JzIG9uCisJICogdGhlIFBlbGNvIGFuZCBBZGxpbmsgZGVzaWducyBzbyB3ZSBkZWZhdWx0IHRvIHRoZSBBZGxpbmsuICBJZiBpdAorCSAqIGlzIGFjdHVhbGx5IGEgUGVsY28sIHRoZSB1c2VyIG11c3Qgc2V0IHRoZSBhc3N1bWVfZW5kdXJhIG1vZHVsZQorCSAqIHBhcmFtZXRlci4gKi8KKwlpZiAoKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9YTUVOIHx8CisJCQkJZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX1hNRU5fSUlJKSAmJgorCQkJZ28tPmkyY19hZGFwdGVyX29ubGluZSkgeworCQl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOworCisJCS8qIENoZWNrIHRvIHNlZSBpZiByZWdpc3RlciAweDBBIGlzIDB4NzYgKi8KKwkJaTJjX3NtYnVzX3hmZXIoJmdvLT5pMmNfYWRhcHRlciwgMHgyMSwgSTJDX0NMSUVOVF9TQ0NCLAorCQkJSTJDX1NNQlVTX1JFQUQsIDB4MEEsIEkyQ19TTUJVU19CWVRFX0RBVEEsICZkYXRhKTsKKwkJaWYgKGRhdGEuYnl0ZSAhPSAweDc2KSB7CisJCQlpZiAoYXNzdW1lX2VuZHVyYSkgeworCQkJCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX0VORFVSQTsKKwkJCQl1c2ItPmJvYXJkID0gYm9hcmQgPSAmYm9hcmRfZW5kdXJhOworCQkJCWdvLT5ib2FyZF9pbmZvID0gJmJvYXJkLT5tYWluX2luZm87CisJCQkJc3RybmNweShnby0+bmFtZSwgIlBlbGNvIEVuZHVyYSIsCisJCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKKwkJCX0gZWxzZSB7CisJCQkJdTE2IGNoYW5uZWw7CisKKwkJCQkvKiBzZXQgR1BJTzUgdG8gYmUgYW4gb3V0cHV0LCBjdXJyZW50bHkgbG93ICovCisJCQkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDAwKTsKKwkJCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgwLCAweDAwZGYpOworCQkJCS8qIHJlYWQgY2hhbm5lbCBudW1iZXIgZnJvbSBHUElPWzE6MF0gKi8KKwkJCQlnbzcwMDdfcmVhZF9hZGRyKGdvLCAweDNjODEsICZjaGFubmVsKTsKKwkJCQljaGFubmVsICY9IDB4MzsKKwkJCQlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQ7CisJCQkJdXNiLT5ib2FyZCA9IGJvYXJkID0gJmJvYXJkX2FkbGlua19tcGcyNDsKKwkJCQlnby0+Ym9hcmRfaW5mbyA9ICZib2FyZC0+bWFpbl9pbmZvOworCQkJCWdvLT5jaGFubmVsX251bWJlciA9IGNoYW5uZWw7CisJCQkJc25wcmludGYoZ28tPm5hbWUsIHNpemVvZihnby0+bmFtZSksCisJCQkJCSJBZGxpbmsgUENJLU1QRzI0LCBjaGFubmVsICMlZCIsCisJCQkJCWNoYW5uZWwpOworCQkJfQorCQl9CisJfQorCisJLyogUHJvYmUgdGhlIHR1bmVyIG1vZGVsIG9uIHRoZSBUVjQwMlUgKi8KKwlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9BTlkpIHsKKwkJdTggZGF0YVszXTsKKworCQkvKiBCb2FyZCBzdHJhcHBpbmcgaW5kaWNhdGVzIHR1bmVyIG1vZGVsICovCisJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDQxLCAwLCAwLCBkYXRhLCAzLCAxKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogR1BJTyByZWFkIGZhaWxlZCFcbiIpOworCQkJZ290byBpbml0ZmFpbDsKKwkJfQorCQlzd2l0Y2ggKGRhdGFbMF0gPj4gNikgeworCQljYXNlIDE6CisJCQlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfRVU7CisJCQlnby0+dHVuZXJfdHlwZSA9IFRVTkVSX1NPTllfQlRGX1BHNDcyWjsKKwkJCXN0cm5jcHkoZ28tPm5hbWUsICJQbGV4dG9yIFBYLVRWNDAyVS1FVSIsCisJCQkJCXNpemVvZihnby0+bmFtZSkpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9KUDsKKwkJCWdvLT50dW5lcl90eXBlID0gVFVORVJfU09OWV9CVEZfUEs0NjdaOworCQkJc3RybmNweShnby0+bmFtZSwgIlBsZXh0b3IgUFgtVFY0MDJVLUpQIiwKKwkJCQkJc2l6ZW9mKGdvLT5uYW1lKSk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfUFhfVFY0MDJVX05BOworCQkJZ28tPnR1bmVyX3R5cGUgPSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o7CisJCQlzdHJuY3B5KGdvLT5uYW1lLCAiUGxleHRvciBQWC1UVjQwMlUtTkEiLAorCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IHVuYWJsZSB0byBkZXRlY3QgIgorCQkJCQkJInR1bmVyIHR5cGUhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIENvbmZpZ3VyZSB0dW5lciBtb2RlIHNlbGVjdGlvbiBpbnB1dHMgY29ubmVjdGVkCisJCSAqIHRvIHRoZSBFWi1VU0IgR1BJTyBvdXRwdXQgcGlucyAqLworCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg0MCwgMHg3ZjAyLCAwLAorCQkJCQlOVUxMLCAwLCAwKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnbzcwMDctdXNiOiBHUElPIHdyaXRlIGZhaWxlZCFcbiIpOworCQkJZ290byBpbml0ZmFpbDsKKwkJfQorCX0KKworCS8qIFByaW50IGEgbmFzdHkgbWVzc2FnZSBpZiB0aGUgdXNlciBhdHRlbXB0cyB0byB1c2UgYSBVU0IyLjAgZGV2aWNlIGluCisJICogYSBVU0IxLjEgcG9ydC4gIFRoZXJlIHdpbGwgYmUgc2lsZW50IGNvcnJ1cHRpb24gb2YgdGhlIHN0cmVhbS4gKi8KKwlpZiAoKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpICYmCisJCQl1c2JkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQorCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6ICoqKiBXQVJOSU5HICoqKiAgVGhpcyBkZXZpY2UgIgorCQkJCSJtdXN0IGJlIGNvbm5lY3RlZCB0byBhIFVTQiAyLjAgcG9ydCEgICIKKwkJCQkiQXR0ZW1wdGluZyB0byBjYXB0dXJlIHZpZGVvIHRocm91Z2ggYSBVU0IgMS4xICIKKwkJCQkicG9ydCB3aWxsIHJlc3VsdCBpbiBzdHJlYW0gY29ycnVwdGlvbiwgZXZlbiAiCisJCQkJImF0IGxvdyBiaXRyYXRlcyFcbiIpOworCisJLyogRG8gYW55IGZpbmFsIEdPNzAwNyBpbml0aWFsaXphdGlvbiwgdGhlbiByZWdpc3RlciB0aGUKKwkgKiBWNEwyIGFuZCBBTFNBIGludGVyZmFjZXMgKi8KKwlpZiAoZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIoZ28pIDwgMCkKKwkJZ290byBpbml0ZmFpbDsKKworCS8qIEFsbG9jYXRlIHRoZSBVUkJzIGFuZCBidWZmZXJzIGZvciByZWNlaXZpbmcgdGhlIHZpZGVvIHN0cmVhbSAqLworCWlmIChib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKSB7CisJCXZfdXJiX2xlbiA9IDEwMjQ7CisJCXZpZGVvX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXNiLT51c2JkZXYsIDYpOworCX0gZWxzZSB7CisJCXZfdXJiX2xlbiA9IDUxMjsKKwkJdmlkZW9fcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh1c2ItPnVzYmRldiwgMSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJdXNiLT52aWRlb191cmJzW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVzYi0+dmlkZW9fdXJic1tpXSA9PSBOVUxMKQorCQkJZ290byBpbml0ZmFpbDsKKwkJdXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCQkJa21hbGxvYyh2X3VyYl9sZW4sIEdGUF9LRVJORUwpOworCQlpZiAodXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkKKwkJCWdvdG8gaW5pdGZhaWw7CisJCXVzYl9maWxsX2J1bGtfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSwgdXNiLT51c2JkZXYsIHZpZGVvX3BpcGUsCisJCQkJdXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIsIHZfdXJiX2xlbiwKKwkJCQlnbzcwMDdfdXNiX3JlYWRfdmlkZW9fcGlwZV9jb21wbGV0ZSwgZ28pOworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBVUkJzIGFuZCBidWZmZXJzIGZvciByZWNlaXZpbmcgdGhlIGF1ZGlvIHN0cmVhbSAqLworCWlmICgoYm9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQikgJiYgZ28tPmF1ZGlvX2VuYWJsZWQpCisJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJCXVzYi0+YXVkaW9fdXJic1tpXSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAodXNiLT5hdWRpb191cmJzW2ldID09IE5VTEwpCisJCQkJZ290byBpbml0ZmFpbDsKKwkJCXVzYi0+YXVkaW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyg0MDk2LAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICh1c2ItPmF1ZGlvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKQorCQkJCWdvdG8gaW5pdGZhaWw7CisJCQl1c2JfZmlsbF9idWxrX3VyYih1c2ItPmF1ZGlvX3VyYnNbaV0sIHVzYi0+dXNiZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZSh1c2ItPnVzYmRldiwgOCksCisJCQkJdXNiLT5hdWRpb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIsIDQwOTYsCisJCQkJZ283MDA3X3VzYl9yZWFkX2F1ZGlvX3BpcGVfY29tcGxldGUsIGdvKTsKKwkJfQorCisKKwlnby0+c3RhdHVzID0gU1RBVFVTX09OTElORTsKKwlyZXR1cm4gMDsKKworaW5pdGZhaWw6CisJZ28tPnN0YXR1cyA9IFNUQVRVU19TSFVURE9XTjsKKwlyZXR1cm4gMDsKKworYWxsb2NmYWlsOgorCWlmICh1c2ItPmludHJfdXJiKSB7CisJCWtmcmVlKHVzYi0+aW50cl91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXVzYl9mcmVlX3VyYih1c2ItPmludHJfdXJiKTsKKwl9CisJa2ZyZWUodXNiKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCBpOworCisJZ28tPnN0YXR1cyA9IFNUQVRVU19TSFVURE9XTjsKKwl1c2Jfa2lsbF91cmIodXNiLT5pbnRyX3VyYik7CisKKwkvKiBGcmVlIFVTQi1yZWxhdGVkIHN0cnVjdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCWlmICh1c2ItPnZpZGVvX3VyYnNbaV0gIT0gTlVMTCkgeworCQkJaWYgKHVzYi0+dmlkZW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpCisJCQkJa2ZyZWUodXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSk7CisJCX0KKwkJaWYgKHVzYi0+YXVkaW9fdXJic1tpXSAhPSBOVUxMKSB7CisJCQlpZiAodXNiLT5hdWRpb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkKKwkJCQlrZnJlZSh1c2ItPmF1ZGlvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIodXNiLT5hdWRpb191cmJzW2ldKTsKKwkJfQorCX0KKwlrZnJlZSh1c2ItPmludHJfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXVzYl9mcmVlX3VyYih1c2ItPmludHJfdXJiKTsKKworCWtmcmVlKGdvLT5ocGlfY29udGV4dCk7CisKKwlnbzcwMDdfcmVtb3ZlKGdvKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGdvNzAwN191c2JfZHJpdmVyID0geworCS5uYW1lCQk9ICJnbzcwMDciLAorCS5wcm9iZQkJPSBnbzcwMDdfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gZ283MDA3X3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGdvNzAwN191c2JfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBnbzcwMDdfdXNiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZnbzcwMDdfdXNiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBnbzcwMDdfdXNiX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmZ283MDA3X3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChnbzcwMDdfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoZ283MDA3X3VzYl9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTExNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKQEAgLTAsMCArMSwxNDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJnbzcwMDcuaCIKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RhdGljIHZvaWQgZGVhY3RpdmF0ZV9idWZmZXIoc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmKQoreworCWludCBpOworCisJaWYgKGdvYnVmLT5zdGF0ZSAhPSBCVUZfU1RBVEVfSURMRSkgeworCQlsaXN0X2RlbCgmZ29idWYtPnN0cmVhbSk7CisJCWdvYnVmLT5zdGF0ZSA9IEJVRl9TVEFURV9JRExFOworCX0KKwlpZiAoZ29idWYtPnBhZ2VfY291bnQgPiAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBnb2J1Zi0+cGFnZV9jb3VudDsgKytpKQorCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGdvYnVmLT5wYWdlc1tpXSk7CisJCWdvYnVmLT5wYWdlX2NvdW50ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X3F1ZXVlZChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGdvYnVmLCBuZXh0LCAmZ28tPnN0cmVhbSwgc3RyZWFtKSB7CisJCWRlYWN0aXZhdGVfYnVmZmVyKGdvYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3N0cmVhbW9mZihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZG93bigmZ28tPmh3X2xvY2spOworCWlmIChnby0+c3RyZWFtaW5nKSB7CisJCWdvLT5zdHJlYW1pbmcgPSAwOworCQlnbzcwMDdfc3RyZWFtX3N0b3AoZ28pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWFib3J0X3F1ZXVlZChnbyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlnbzcwMDdfcmVzZXRfZW5jb2Rlcihnbyk7CisJCXJldHZhbCA9IDA7CisJfQorCXVwKCZnby0+aHdfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmg7CisKKwlpZiAoZ28tPnN0YXR1cyAhPSBTVEFUVVNfT05MSU5FKQorCQlyZXR1cm4gLUVCVVNZOworCWdvZmggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ283MDA3X2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ29maCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwkrK2dvLT5yZWZfY291bnQ7CisJZ29maC0+Z28gPSBnbzsKKwlpbml0X01VVEVYKCZnb2ZoLT5sb2NrKTsKKwlnb2ZoLT5idWZfY291bnQgPSAwOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGdvZmg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisKKwlpZiAoZ29maC0+YnVmX2NvdW50ID4gMCkgeworCQlnbzcwMDdfc3RyZWFtb2ZmKGdvKTsKKwkJZ28tPmluX3VzZSA9IDA7CisJCWtmcmVlKGdvZmgtPmJ1ZnMpOworCQlnb2ZoLT5idWZfY291bnQgPSAwOworCX0KKwlrZnJlZShnb2ZoKTsKKwlpZiAoLS1nby0+cmVmX2NvdW50ID09IDApCisJCWtmcmVlKGdvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGdldF9mcmFtZV90eXBlX2ZsYWcoc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmLCBpbnQgZm9ybWF0KQoreworCXU4ICpmID0gcGFnZV9hZGRyZXNzKGdvYnVmLT5wYWdlc1swXSk7CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgR083MDA3X0ZPUk1BVF9NSlBFRzoKKwkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUU7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQlzd2l0Y2ggKChmW2dvYnVmLT5mcmFtZV9vZmZzZXQgKyA0XSA+PiA2KSAmIDB4MykgeworCQljYXNlIDA6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19LRVlGUkFNRTsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfUEZSQU1FOworCQljYXNlIDI6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19CRlJBTUU7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCXN3aXRjaCAoKGZbZ29idWYtPmZyYW1lX29mZnNldCArIDVdID4+IDMpICYgMHg3KSB7CisJCWNhc2UgMToKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FOworCQljYXNlIDI6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19QRlJBTUU7CisJCWNhc2UgMzoKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX0JGUkFNRTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2NhcHR1cmVfc2l6ZShzdHJ1Y3QgZ283MDA3ICpnbywgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsIGludCB0cnkpCit7CisJaW50IHNlbnNvcl9oZWlnaHQgPSAwLCBzZW5zb3Jfd2lkdGggPSAwOworCWludCB3aWR0aCwgaGVpZ2h0LCBpOworCisJaWYgKGZtdCAhPSBOVUxMICYmIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcgJiYKKwkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTVBFRyAmJgorCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NUEVHNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGdvLT5zdGFuZGFyZCkgeworCWNhc2UgR083MDA3X1NURF9OVFNDOgorCQlzZW5zb3Jfd2lkdGggPSA3MjA7CisJCXNlbnNvcl9oZWlnaHQgPSA0ODA7CisJCWJyZWFrOworCWNhc2UgR083MDA3X1NURF9QQUw6CisJCXNlbnNvcl93aWR0aCA9IDcyMDsKKwkJc2Vuc29yX2hlaWdodCA9IDU3NjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfU1REX09USEVSOgorCQlzZW5zb3Jfd2lkdGggPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX3dpZHRoOworCQlzZW5zb3JfaGVpZ2h0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oZWlnaHQ7CisJCWJyZWFrOworCX0KKworCWlmIChmbXQgPT0gTlVMTCkgeworCQl3aWR0aCA9IHNlbnNvcl93aWR0aDsKKwkJaGVpZ2h0ID0gc2Vuc29yX2hlaWdodDsKKwl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1NDQUxJTkcpIHsKKwkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IHNlbnNvcl93aWR0aCkKKwkJCXdpZHRoID0gc2Vuc29yX3dpZHRoOworCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPCAxNDQpCisJCQl3aWR0aCA9IDE0NDsKKwkJZWxzZQorCQkJd2lkdGggPSBmbXQtPmZtdC5waXgud2lkdGggJiB+MHgwZjsKKworCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IHNlbnNvcl9oZWlnaHQpCisJCQloZWlnaHQgPSBzZW5zb3JfaGVpZ2h0OworCQllbHNlIGlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDwgOTYpCisJCQloZWlnaHQgPSA5NjsKKwkJZWxzZQorCQkJaGVpZ2h0ID0gZm10LT5mbXQucGl4LmhlaWdodCAmIH4weDBmOworCX0gZWxzZSB7CisJCWludCByZXF1ZXN0ZWRfc2l6ZSA9IGZtdC0+Zm10LnBpeC53aWR0aCAqIGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisJCWludCBzZW5zb3Jfc2l6ZSA9IHNlbnNvcl93aWR0aCAqIHNlbnNvcl9oZWlnaHQ7CisKKwkJaWYgKDY0ICogcmVxdWVzdGVkX3NpemUgPCA5ICogc2Vuc29yX3NpemUpIHsKKwkJCXdpZHRoID0gc2Vuc29yX3dpZHRoIC8gNDsKKwkJCWhlaWdodCA9IHNlbnNvcl9oZWlnaHQgLyA0OworCQl9IGVsc2UgaWYgKDY0ICogcmVxdWVzdGVkX3NpemUgPCAzNiAqIHNlbnNvcl9zaXplKSB7CisJCQl3aWR0aCA9IHNlbnNvcl93aWR0aCAvIDI7CisJCQloZWlnaHQgPSBzZW5zb3JfaGVpZ2h0IC8gMjsKKwkJfSBlbHNlIHsKKwkJCXdpZHRoID0gc2Vuc29yX3dpZHRoOworCQkJaGVpZ2h0ID0gc2Vuc29yX2hlaWdodDsKKwkJfQorCQl3aWR0aCAmPSB+MHhmOworCQloZWlnaHQgJj0gfjB4ZjsKKwl9CisKKwlpZiAoZm10ICE9IE5VTEwpIHsKKwkJdTMyIHBpeGVsZm9ybWF0ID0gZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0OworCisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZm10LT5mbXQucGl4LndpZHRoID0gd2lkdGg7CisJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7CisJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IHBpeGVsZm9ybWF0OworCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gR083MDA3X0JVRl9TSVpFOworCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07IC8qID8/ICovCisJfQorCisJaWYgKHRyeSkKKwkJcmV0dXJuIDA7CisKKwlnby0+d2lkdGggPSB3aWR0aDsKKwlnby0+aGVpZ2h0ID0gaGVpZ2h0OworCWdvLT5lbmNvZGVyX2hfb2Zmc2V0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oX29mZnNldDsKKwlnby0+ZW5jb2Rlcl92X29mZnNldCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfdl9vZmZzZXQ7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJZ28tPm1vZGV0W2ldLmVuYWJsZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDE2MjQ7ICsraSkKKwkJZ28tPm1vZGV0X21hcFtpXSA9IDA7CisKKwlpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfU0NBTElORykgeworCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uIHJlczsKKworCQlyZXMud2lkdGggPSB3aWR0aDsKKwkJaWYgKGhlaWdodCA+IHNlbnNvcl9oZWlnaHQgLyAyKSB7CisJCQlyZXMuaGVpZ2h0ID0gaGVpZ2h0IC8gMjsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAwOworCQl9IGVsc2UgeworCQkJcmVzLmhlaWdodCA9IGhlaWdodDsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAxOworCQl9CisJCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQlERUNPREVSX1NFVF9SRVNPTFVUSU9OLCAmcmVzKTsKKwl9IGVsc2UgeworCQlpZiAod2lkdGggPD0gc2Vuc29yX3dpZHRoIC8gNCkgeworCQkJZ28tPmVuY29kZXJfaF9oYWx2ZSA9IDE7CisJCQlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMTsKKwkJCWdvLT5lbmNvZGVyX3N1YnNhbXBsZSA9IDE7CisJCX0gZWxzZSBpZiAod2lkdGggPD0gc2Vuc29yX3dpZHRoIC8gMikgeworCQkJZ28tPmVuY29kZXJfaF9oYWx2ZSA9IDE7CisJCQlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMTsKKwkJCWdvLT5lbmNvZGVyX3N1YnNhbXBsZSA9IDA7CisJCX0gZWxzZSB7CisJCQlnby0+ZW5jb2Rlcl9oX2hhbHZlID0gMDsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAwOworCQkJZ28tPmVuY29kZXJfc3Vic2FtcGxlID0gMDsKKwkJfQorCX0KKworCWlmIChmbXQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX01QRUc6CisJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgfHwKKwkJCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgfHwKKwkJCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQpCisJCQlicmVhazsKKwkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzE7CisJCWdvLT5wYWxpID0gMDsKKwkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJCWdvLT5nb3Bfc2l6ZSA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gMTAwMDsKKwkJZ28tPmlwYiA9IDA7CisJCWdvLT5jbG9zZWRfZ29wID0gMTsKKwkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMTsKKwkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMTsKKwkJZ28tPmdvcF9oZWFkZXJfZW5hYmxlID0gMTsKKwkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJYnJlYWs7CisJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seSEgKi8KKwljYXNlIFY0TDJfUElYX0ZNVF9NUEVHNDoKKwkJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCkKKwkJCWJyZWFrOworCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NUEVHNDsKKwkJZ28tPnBhbGkgPSAweGY1OworCQlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzFfMTsKKwkJZ28tPmdvcF9zaXplID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyAxMDAwOworCQlnby0+aXBiID0gMDsKKwkJZ28tPmNsb3NlZF9nb3AgPSAxOworCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAxOworCQlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAxOworCQlnby0+Z29wX2hlYWRlcl9lbmFibGUgPSAxOworCQlnby0+ZHZkX21vZGUgPSAwOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9NSlBFRzoKKwkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTUpQRUc7CisJCWdvLT5wYWxpID0gMDsKKwkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJCWdvLT5nb3Bfc2l6ZSA9IDA7CisJCWdvLT5pcGIgPSAwOworCQlnby0+Y2xvc2VkX2dvcCA9IDA7CisJCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDA7CisJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDA7CisJCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9IDA7CisJCWdvLT5kdmRfbW9kZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGlwX3RvX21vZGV0X21hcChzdHJ1Y3QgZ283MDA3ICpnbywgaW50IHJlZ2lvbiwKKwkJc3RydWN0IHY0bDJfY2xpcCAqY2xpcF9saXN0KQoreworCXN0cnVjdCB2NGwyX2NsaXAgY2xpcCwgKmNsaXBfcHRyOworCWludCB4LCB5LCBtYm51bTsKKworCS8qIENoZWNrIGlmIGNvb3JkaW5hdGVzIGFyZSBPSyBhbmQgaWYgYW55IG1hY3JvYmxvY2tzIGFyZSBhbHJlYWR5CisJICogdXNlZCBieSBvdGhlciByZWdpb25zIChiZXNpZGVzIDApICovCisJY2xpcF9wdHIgPSBjbGlwX2xpc3Q7CisJd2hpbGUgKGNsaXBfcHRyKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2xpcCwgY2xpcF9wdHIsIHNpemVvZihjbGlwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNsaXAuYy5sZWZ0IDwgMCB8fCAoY2xpcC5jLmxlZnQgJiAweEYpIHx8CisJCQkJY2xpcC5jLndpZHRoIDw9IDAgfHwgKGNsaXAuYy53aWR0aCAmIDB4RikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNsaXAuYy5sZWZ0ICsgY2xpcC5jLndpZHRoID4gZ28tPndpZHRoKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjbGlwLmMudG9wIDwgMCB8fCAoY2xpcC5jLnRvcCAmIDB4RikgfHwKKwkJCQljbGlwLmMuaGVpZ2h0IDw9IDAgfHwgKGNsaXAuYy5oZWlnaHQgJiAweEYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjbGlwLmMudG9wICsgY2xpcC5jLmhlaWdodCA+IGdvLT5oZWlnaHQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZm9yICh5ID0gMDsgeSA8IGNsaXAuYy5oZWlnaHQ7IHkgKz0gMTYpCisJCQlmb3IgKHggPSAwOyB4IDwgY2xpcC5jLndpZHRoOyB4ICs9IDE2KSB7CisJCQkJbWJudW0gPSAoZ28tPndpZHRoID4+IDQpICoKKwkJCQkJCSgoY2xpcC5jLnRvcCArIHkpID4+IDQpICsKKwkJCQkJKChjbGlwLmMubGVmdCArIHgpID4+IDQpOworCQkJCWlmIChnby0+bW9kZXRfbWFwW21ibnVtXSAhPSAwICYmCisJCQkJCQlnby0+bW9kZXRfbWFwW21ibnVtXSAhPSByZWdpb24pCisJCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCWNsaXBfcHRyID0gY2xpcC5uZXh0OworCX0KKworCS8qIENsZWFyIG9sZCByZWdpb24gbWFjcm9ibG9ja3MgKi8KKwlmb3IgKG1ibnVtID0gMDsgbWJudW0gPCAxNjI0OyArK21ibnVtKQorCQlpZiAoZ28tPm1vZGV0X21hcFttYm51bV0gPT0gcmVnaW9uKQorCQkJZ28tPm1vZGV0X21hcFttYm51bV0gPSAwOworCisJLyogQ2xhaW0gbWFjcm9ibG9ja3MgaW4gdGhpcyBsaXN0ICovCisJY2xpcF9wdHIgPSBjbGlwX2xpc3Q7CisJd2hpbGUgKGNsaXBfcHRyKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2xpcCwgY2xpcF9wdHIsIHNpemVvZihjbGlwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZm9yICh5ID0gMDsgeSA8IGNsaXAuYy5oZWlnaHQ7IHkgKz0gMTYpCisJCQlmb3IgKHggPSAwOyB4IDwgY2xpcC5jLndpZHRoOyB4ICs9IDE2KSB7CisJCQkJbWJudW0gPSAoZ28tPndpZHRoID4+IDQpICoKKwkJCQkJCSgoY2xpcC5jLnRvcCArIHkpID4+IDQpICsKKwkJCQkJKChjbGlwLmMubGVmdCArIHgpID4+IDQpOworCQkJCWdvLT5tb2RldF9tYXBbbWJudW1dID0gcmVnaW9uOworCQkJfQorCQljbGlwX3B0ciA9IGNsaXAubmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CisKKwkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKKwkJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiZ283MDA3Iik7CisJCXN0cm5jcHkoY2FwLT5jYXJkLCBnby0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCQljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCA5LCA4KTsKKwkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCQlWNEwyX0NBUF9TVFJFQU1JTkc7IC8qIHwgVjRMMl9DQVBfQVVESU87ICovCisJCWlmIChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKQorCQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCA9IGFyZzsKKwkJdW5zaWduZWQgaW50IGluZGV4OworCQljaGFyICpkZXNjOworCQl1MzIgcGl4ZWxmb3JtYXQ7CisKKwkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3dpdGNoIChmbXQtPmluZGV4KSB7CisJCWNhc2UgMDoKKwkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01KUEVHOworCQkJZGVzYyA9ICJNb3Rpb24tSlBFRyI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJCWRlc2MgPSAiTVBFRzEvTVBFRzIvTVBFRzQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpbmRleCA9IGZtdC0+aW5kZXg7CisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+aW5kZXggPSBpbmRleDsKKwkJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmbXQtPmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCQlzdHJuY3B5KGZtdC0+ZGVzY3JpcHRpb24sIGRlc2MsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKSk7CisJCWZtdC0+cGl4ZWxmb3JtYXQgPSBwaXhlbGZvcm1hdDsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBzZXRfY2FwdHVyZV9zaXplKGdvLCBmbXQsIDEpOworCX0KKwljYXNlIFZJRElPQ19HX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZm10LT5mbXQucGl4LndpZHRoID0gZ28tPndpZHRoOworCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gZ28tPmhlaWdodDsKKwkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHID8KKwkJCVY0TDJfUElYX0ZNVF9NSlBFRyA6IFY0TDJfUElYX0ZNVF9NUEVHOworCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gR083MDA3X0JVRl9TSVpFOworCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07IC8qID8/ICovCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnby0+c3RyZWFtaW5nKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIHNldF9jYXB0dXJlX3NpemUoZ28sIGZtdCwgMCk7CisJfQorCWNhc2UgVklESU9DX0dfRkJVRjoKKwljYXNlIFZJRElPQ19TX0ZCVUY6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DX1JFUUJVRlM6CisJeworCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxID0gYXJnOworCQl1bnNpZ25lZCBpbnQgY291bnQsIGk7CisKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAocmVxLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkJCXJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlmb3IgKGkgPSAwOyBpIDwgZ29maC0+YnVmX2NvdW50OyArK2kpCisJCQlpZiAoZ29maC0+YnVmc1tpXS5tYXBwZWQgPiAwKQorCQkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCWRvd24oJmdvLT5od19sb2NrKTsKKwkJaWYgKGdvLT5pbl91c2UgPiAwICYmIGdvZmgtPmJ1Zl9jb3VudCA9PSAwKSB7CisJCQl1cCgmZ28tPmh3X2xvY2spOworCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoZ29maC0+YnVmX2NvdW50ID4gMCkKKwkJCWtmcmVlKGdvZmgtPmJ1ZnMpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQljb3VudCA9IHJlcS0+Y291bnQ7CisJCWlmIChjb3VudCA+IDApIHsKKwkJCWlmIChjb3VudCA8IDIpCisJCQkJY291bnQgPSAyOworCQkJaWYgKGNvdW50ID4gMzIpCisJCQkJY291bnQgPSAzMjsKKwkJCWdvZmgtPmJ1ZnMgPSBrbWFsbG9jKGNvdW50ICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZ283MDA3X2J1ZmZlciksCisJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKGdvZmgtPmJ1ZnMgPT0gTlVMTCkgeworCQkJCXVwKCZnby0+aHdfbG9jayk7CisJCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJCW1lbXNldChnb2ZoLT5idWZzLCAwLAorCQkJCQljb3VudCAqIHNpemVvZihzdHJ1Y3QgZ283MDA3X2J1ZmZlcikpOworCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJCQlnb2ZoLT5idWZzW2ldLmdvID0gZ287CisJCQkJZ29maC0+YnVmc1tpXS5pbmRleCA9IGk7CisJCQkJZ29maC0+YnVmc1tpXS5zdGF0ZSA9IEJVRl9TVEFURV9JRExFOworCQkJCWdvZmgtPmJ1ZnNbaV0ubWFwcGVkID0gMDsKKwkJCX0KKwkJCWdvLT5pbl91c2UgPSAxOworCQl9IGVsc2UgeworCQkJZ28tPmluX3VzZSA9IDA7CisJCX0KKwkJZ29maC0+YnVmX2NvdW50ID0gY291bnQ7CisJCXVwKCZnby0+aHdfbG9jayk7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKwkJcmVxLT5jb3VudCA9IGNvdW50OworCQlyZXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXJlcS0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJCXVuc2lnbmVkIGludCBpbmRleDsKKworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpbmRleCA9IGJ1Zi0+aW5kZXg7CisJCWRvd24oJmdvZmgtPmxvY2spOworCQlpZiAoaW5kZXggPj0gZ29maC0+YnVmX2NvdW50KQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKKwkJYnVmLT5pbmRleCA9IGluZGV4OworCQlidWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXN3aXRjaCAoZ29maC0+YnVmc1tpbmRleF0uc3RhdGUpIHsKKwkJY2FzZSBCVUZfU1RBVEVfUVVFVUVEOgorCQkJYnVmLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCQkJYnJlYWs7CisJCWNhc2UgQlVGX1NUQVRFX0RPTkU6CisJCQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19ET05FOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlidWYtPmZsYWdzID0gMDsKKwkJfQorCQlpZiAoZ29maC0+YnVmc1tpbmRleF0ubWFwcGVkKQorCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKwkJYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCQlidWYtPm0ub2Zmc2V0ID0gaW5kZXggKiBHTzcwMDdfQlVGX1NJWkU7CisJCWJ1Zi0+bGVuZ3RoID0gR083MDA3X0JVRl9TSVpFOworCQl1cCgmZ29maC0+bG9jayk7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKKwkJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmOworCQlpbnQgcmV0OworCisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQkJYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gZ29maC0+YnVmX2NvdW50KQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJZ29idWYgPSAmZ29maC0+YnVmc1tidWYtPmluZGV4XTsKKwkJaWYgKGdvYnVmLT5tYXBwZWQgPT0gMCkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJaWYgKGdvYnVmLT5zdGF0ZSAhPSBCVUZfU1RBVEVfSURMRSkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCS8qIG9mZnNldCB3aWxsIGJlIDAgdW50aWwgd2UgcmVhbGx5IHN1cHBvcnQgVVNFUlBUUiBzdHJlYW1pbmcgKi8KKwkJZ29idWYtPm9mZnNldCA9IGdvYnVmLT51c2VyX2FkZHIgJiB+UEFHRV9NQVNLOworCQlnb2J1Zi0+Ynl0ZXN1c2VkID0gMDsKKwkJZ29idWYtPmZyYW1lX29mZnNldCA9IDA7CisJCWdvYnVmLT5tb2RldF9hY3RpdmUgPSAwOworCQlpZiAoZ29idWYtPm9mZnNldCA+IDApCisJCQlnb2J1Zi0+cGFnZV9jb3VudCA9IEdPNzAwN19CVUZfUEFHRVMgKyAxOworCQllbHNlCisJCQlnb2J1Zi0+cGFnZV9jb3VudCA9IEdPNzAwN19CVUZfUEFHRVM7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sCisJCQkJZ29idWYtPnVzZXJfYWRkciAmIFBBR0VfTUFTSywgZ29idWYtPnBhZ2VfY291bnQsCisJCQkJMSwgMSwgZ29idWYtPnBhZ2VzLCBOVUxMKTsKKwkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJaWYgKHJldCAhPSBnb2J1Zi0+cGFnZV9jb3VudCkgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyArK2kpCisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGdvYnVmLT5wYWdlc1tpXSk7CisJCQlnb2J1Zi0+cGFnZV9jb3VudCA9IDA7CisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWdvYnVmLT5zdGF0ZSA9IEJVRl9TVEFURV9RVUVVRUQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmZ29idWYtPnN0cmVhbSwgJmdvLT5zdHJlYW0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfRFFCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKKwkJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmOworCQl1MzIgZnJhbWVfdHlwZV9mbGFnOworCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJaWYgKGxpc3RfZW1wdHkoJmdvLT5zdHJlYW0pKQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJZ29idWYgPSBsaXN0X2VudHJ5KGdvLT5zdHJlYW0ubmV4dCwKKwkJCQlzdHJ1Y3QgZ283MDA3X2J1ZmZlciwgc3RyZWFtKTsKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwkJaWYgKGdvYnVmLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRE9ORSAmJgorCQkJCSEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7CisJCQlmb3IgKDs7KSB7CisJCQkJcHJlcGFyZV90b193YWl0KCZnby0+ZnJhbWVfd2FpdHEsICZ3YWl0LAorCQkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlpZiAoZ29idWYtPnN0YXRlID09IEJVRl9TVEFURV9ET05FKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2NoZWR1bGUoKTsKKwkJCX0KKwkJCWZpbmlzaF93YWl0KCZnby0+ZnJhbWVfd2FpdHEsICZ3YWl0KTsKKwkJfQorCQlpZiAoZ29idWYtPnN0YXRlICE9IEJVRl9TVEFURV9ET05FKQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlkZWFjdGl2YXRlX2J1ZmZlcihnb2J1Zik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlmcmFtZV90eXBlX2ZsYWcgPSBnZXRfZnJhbWVfdHlwZV9mbGFnKGdvYnVmLCBnby0+Zm9ybWF0KTsKKwkJZ29idWYtPnN0YXRlID0gQlVGX1NUQVRFX0lETEU7CisJCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJCWJ1Zi0+aW5kZXggPSBnb2J1Zi0+aW5kZXg7CisJCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJYnVmLT5ieXRlc3VzZWQgPSBnb2J1Zi0+Ynl0ZXN1c2VkOworCQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBmcmFtZV90eXBlX2ZsYWc7CisJCWJ1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWJ1Zi0+dGltZXN0YW1wID0gZ29idWYtPnRpbWVzdGFtcDsKKwkJYnVmLT5zZXF1ZW5jZSA9IGdvYnVmLT5zZXE7CisJCWJ1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJYnVmLT5tLm9mZnNldCA9IGdvYnVmLT5pbmRleCAqIEdPNzAwN19CVUZfU0laRTsKKwkJYnVmLT5sZW5ndGggPSBHTzcwMDdfQlVGX1NJWkU7CisJCWJ1Zi0+cmVzZXJ2ZWQgPSBnb2J1Zi0+bW9kZXRfYWN0aXZlOworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwl7CisJCXVuc2lnbmVkIGludCAqdHlwZSA9IGFyZzsKKworCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRvd24oJmdvZmgtPmxvY2spOworCQlkb3duKCZnby0+aHdfbG9jayk7CisJCWlmICghZ28tPnN0cmVhbWluZykgeworCQkJZ28tPnN0cmVhbWluZyA9IDE7CisJCQlnby0+bmV4dF9zZXEgPSAwOworCQkJZ28tPmFjdGl2ZV9idWYgPSBOVUxMOworCQkJaWYgKGdvNzAwN19zdGFydF9lbmNvZGVyKGdvKSA8IDApCisJCQkJcmV0dmFsID0gLUVJTzsKKwkJCWVsc2UKKwkJCQlyZXR2YWwgPSAwOworCQl9CisJCXVwKCZnby0+aHdfbG9jayk7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgorCXsKKwkJdW5zaWduZWQgaW50ICp0eXBlID0gYXJnOworCisJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZG93bigmZ29maC0+bG9jayk7CisJCWdvNzAwN19zdHJlYW1vZmYoZ28pOworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisJCXUzMiBpZDsKKworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJaWQgPSBjdHJsLT5pZDsKKwkJbWVtc2V0KGN0cmwsIDAsIHNpemVvZigqY3RybCkpOworCQljdHJsLT5pZCA9IGlkOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19RVUVSWUNUUkwsIGFyZyk7CisJCXJldHVybiBjdHJsLT5uYW1lWzBdID09IDAgPyAtRUlOVkFMIDogMDsKKwl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsIHF1ZXJ5OworCisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2YocXVlcnkpKTsKKwkJcXVlcnkuaWQgPSBjdHJsLT5pZDsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfUVVFUllDVFJMLCAmcXVlcnkpOworCQlpZiAocXVlcnkubmFtZVswXSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX0dfQ1RSTCwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxdWVyeTsKKworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHF1ZXJ5KSk7CisJCXF1ZXJ5LmlkID0gY3RybC0+aWQ7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1FVRVJZQ1RSTCwgJnF1ZXJ5KTsKKwkJaWYgKHF1ZXJ5Lm5hbWVbMF0gPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX0NUUkwsIGFyZyk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX1BBUk06CisJeworCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtID0gYXJnOworCQlzdHJ1Y3QgdjRsMl9mcmFjdCB0aW1lcGVyZnJhbWUgPSB7CisJCQkubnVtZXJhdG9yID0gMTAwMSAqICBnby0+ZnBzX3NjYWxlLAorCQkJLmRlbm9taW5hdG9yID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUsCisJCX07CisKKwkJaWYgKHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChwYXJtLCAwLCBzaXplb2YoKnBhcm0pKTsKKwkJcGFybS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJcGFybS0+cGFybS5jYXB0dXJlLmNhcGFiaWxpdHkgfD0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lID0gdGltZXBlcmZyYW1lOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19QQVJNOgorCXsKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSA9IGFyZzsKKwkJdW5zaWduZWQgaW50IG4sIGQ7CisKKwkJaWYgKHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwYXJtLT5wYXJtLmNhcHR1cmUuY2FwdHVyZW1vZGUgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQluID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgKgorCQkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3I7CisJCWQgPSAxMDAxICogcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvcjsKKwkJaWYgKG4gIT0gMCAmJiBkICE9IDAgJiYgbiA+IGQpCisJCQlnby0+ZnBzX3NjYWxlID0gKG4gKyBkLzIpIC8gZDsKKwkJZWxzZQorCQkJZ28tPmZwc19zY2FsZSA9IDE7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19FTlVNU1REOgorCXsKKwkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnN0ZCA9IGFyZzsKKworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJZ28tPmlucHV0ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkgeworCQkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJCXJldHVybiAtRUlPOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkJVklESU9DX0VOVU1TVEQsIGFyZyk7CisJCQlpZiAoIXN0ZC0+aWQpIC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMIGZyb20gdHVuZXIgKi8KKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIGlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgeworCQkJc3dpdGNoIChzdGQtPmluZGV4KSB7CisJCQljYXNlIDA6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX05UU0MsICJOVFNDIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNLAorCQkJCQkJIlBBTC9TRUNBTSIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChzdGQtPmluZGV4ICE9IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQltZW1zZXQoc3RkLCAwLCBzaXplb2YoKnN0ZCkpOworCQkJc25wcmludGYoc3RkLT5uYW1lLCBzaXplb2Yoc3RkLT5uYW1lKSwgIiVkeCVkLCAlZGZwcyIsCisJCQkJZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aCwKKwkJCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hlaWdodCwKKwkJCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIDEwMDApOworCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxMDAxOworCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9CisJCQkJCWdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZnJhbWVyYXRlOworCQl9CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisKKwkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgorCQkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKKwkJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJCVZJRElPQ19HX1NURCwgYXJnKTsKKwkJfSBlbHNlIGlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgeworCQkJaWYgKGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MpCisJCQkJKnN0ZCA9IFY0TDJfU1REX05UU0M7CisJCQllbHNlCisJCQkJKnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOworCQl9IGVsc2UKKwkJCSpzdGQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCisJCWlmIChnby0+c3RyZWFtaW5nKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpICYmCisJCQkJKnN0ZCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgqc3RkID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgorCQkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKKwkJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJCVZJRElPQ19TX1NURCwgYXJnKTsKKwkJCWlmICghKnN0ZCkgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgZnJvbSB0dW5lciAqLworCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICgqc3RkICYgVjRMMl9TVERfTlRTQykgeworCQkJZ28tPnN0YW5kYXJkID0gR083MDA3X1NURF9OVFNDOworCQkJZ28tPnNlbnNvcl9mcmFtZXJhdGUgPSAzMDAwMDsKKwkJfSBlbHNlIGlmICgqc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX1BBTDsKKwkJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gMjUwMjU7CisJCX0gZWxzZSBpZiAoKnN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX1BBTDsKKwkJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gMjUwMjU7CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkgICAgVklESU9DX1NfU1RELCBzdGQpOworCQlzZXRfY2FwdHVyZV9zaXplKGdvLCBOVUxMLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FVRVJZU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJZ28tPmlucHV0ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkgeworCQkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJCXJldHVybiAtRUlPOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkJVklESU9DX1FVRVJZU1RELCBhcmcpOworCQl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKQorCQkJKnN0ZCA9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTTsKKwkJZWxzZQorCQkJKnN0ZCA9IDA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19FTlVNSU5QVVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wID0gYXJnOworCQlpbnQgaW5kZXg7CisKKwkJaWYgKGlucC0+aW5kZXggPj0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaW5kZXggPSBpbnAtPmluZGV4OworCQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkpOworCQlpbnAtPmluZGV4ID0gaW5kZXg7CisJCXN0cm5jcHkoaW5wLT5uYW1lLCBnby0+Ym9hcmRfaW5mby0+aW5wdXRzW2luZGV4XS5uYW1lLAorCQkJCXNpemVvZihpbnAtPm5hbWUpKTsKKwkJLyogSWYgdGhpcyBib2FyZCBoYXMgYSB0dW5lciwgaXQgd2lsbCBiZSB0aGUgbGFzdCBpbnB1dCAqLworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJaW5kZXggPT0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMgLSAxKQorCQkJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCQllbHNlCisJCQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCQlpbnAtPmF1ZGlvc2V0ID0gMDsKKwkJaW5wLT50dW5lciA9IDA7CisJCWlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikKKwkJCWlucC0+c3RkID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8CisJCQkJCQkJVjRMMl9TVERfU0VDQU07CisJCWVsc2UKKwkJCWlucC0+c3RkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCSppbnB1dCA9IGdvLT5pbnB1dDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCWlmICgqaW5wdXQgPj0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVCVVNZOworCQlnby0+aW5wdXQgPSAqaW5wdXQ7CisJCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKSB7CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX0lOUFVULAorCQkJCSZnby0+Ym9hcmRfaW5mby0+aW5wdXRzWyppbnB1dF0udmlkZW9faW5wdXQpOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfU19BVURJTywKKwkJCQkmZ28tPmJvYXJkX2luZm8tPmlucHV0c1sqaW5wdXRdLmF1ZGlvX2lucHV0KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19UVU5FUjoKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCisJCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh0LT5pbmRleCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19HX1RVTkVSLCBhcmcpOworCQl0LT5pbmRleCA9IDA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHQtPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCXN3aXRjaCAoZ28tPmJvYXJkX2lkKSB7CisJCWNhc2UgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX05BOgorCQljYXNlIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9KUDoKKwkJCS8qIE5vIHNlbGVjdGFibGUgb3B0aW9ucyBjdXJyZW50bHkgKi8KKwkJCWlmICh0LT5hdWRtb2RlICE9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX1RVTkVSLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJeworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwkJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19HX0ZSRVFVRU5DWSwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCXsKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1NfRlJFUVVFTkNZLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfQ1JPUENBUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXAgPSBhcmc7CisKKwkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChjcm9wY2FwLCAwLCBzaXplb2YoKmNyb3BjYXApKTsKKwkJY3JvcGNhcC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJLyogVGhlc2Ugc3BlY2lmeSB0aGUgcmF3IGlucHV0IG9mIHRoZSBzZW5zb3IgKi8KKwkJc3dpdGNoIChnby0+c3RhbmRhcmQpIHsKKwkJY2FzZSBHTzcwMDdfU1REX05UU0M6CisJCQljcm9wY2FwLT5ib3VuZHMudG9wID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSA0ODA7CisJCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LmxlZnQgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gNDgwOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1NURF9QQUw6CisJCQljcm9wY2FwLT5ib3VuZHMudG9wID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSA1NzY7CisJCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LmxlZnQgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gNTc2OworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1NURF9PVEhFUjoKKwkJCWNyb3BjYXAtPmJvdW5kcy50b3AgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hlaWdodDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oZWlnaHQ7CisJCQlicmVhazsKKwkJfQorCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX0NST1A6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOworCisJCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQoY3JvcCwgMCwgc2l6ZW9mKCpjcm9wKSk7CisJCWNyb3AtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCS8qIFRoZXNlIHNwZWNpZnkgdGhlIHJhdyBpbnB1dCBvZiB0aGUgc2Vuc29yICovCisJCXN3aXRjaCAoZ28tPnN0YW5kYXJkKSB7CisJCWNhc2UgR083MDA3X1NURF9OVFNDOgorCQkJY3JvcC0+Yy50b3AgPSAwOworCQkJY3JvcC0+Yy5sZWZ0ID0gMDsKKwkJCWNyb3AtPmMud2lkdGggPSA3MjA7CisJCQljcm9wLT5jLmhlaWdodCA9IDQ4MDsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19TVERfUEFMOgorCQkJY3JvcC0+Yy50b3AgPSAwOworCQkJY3JvcC0+Yy5sZWZ0ID0gMDsKKwkJCWNyb3AtPmMud2lkdGggPSA3MjA7CisJCQljcm9wLT5jLmhlaWdodCA9IDU3NjsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19TVERfT1RIRVI6CisJCQljcm9wLT5jLnRvcCA9IDA7CisJCQljcm9wLT5jLmxlZnQgPSAwOworCQkJY3JvcC0+Yy53aWR0aCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfd2lkdGg7CisJCQljcm9wLT5jLmhlaWdodCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfaGVpZ2h0OworCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19DUk9QOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKKworCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6CisJeworCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKKworCQltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOworCQlwYXJhbXMtPnF1YWxpdHkgPSA1MDsgLyogPz8gKi8KKwkJcGFyYW1zLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVCB8CisJCQkJCVY0TDJfSlBFR19NQVJLRVJfRFFUOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0pQRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7CisKKwkJaWYgKHBhcmFtcy0+cXVhbGl0eSAhPSA1MCB8fAorCQkJCXBhcmFtcy0+anBlZ19tYXJrZXJzICE9IChWNEwyX0pQRUdfTUFSS0VSX0RIVCB8CisJCQkJCQkJVjRMMl9KUEVHX01BUktFUl9EUVQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0KKwkvKiBUZW1wb3JhcnkgaW9jdGxzIGZvciBjb250cm9sbGluZyBjb21wcmVzc2lvbiBjaGFyYWN0ZXJpc3RpY3MgKi8KKwljYXNlIEdPNzAwN0lPQ19TX0JJVFJBVEU6CisJeworCQlpbnQgKmJpdHJhdGUgPSBhcmc7CisKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogVXBwZXIgYm91bmQgaXMga2luZCBvZiBhcmJpdHJhcnkgaGVyZSAqLworCQlpZiAoKmJpdHJhdGUgPCA2NDAwMCB8fCAqYml0cmF0ZSA+IDEwMDAwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvLT5iaXRyYXRlID0gKmJpdHJhdGU7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19HX0JJVFJBVEU6CisJeworCQlpbnQgKmJpdHJhdGUgPSBhcmc7CisKKwkJKmJpdHJhdGUgPSBnby0+Yml0cmF0ZTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgR083MDA3SU9DX1NfQ09NUF9QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zICpjb21wID0gYXJnOworCisJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvbXAtPmdvcF9zaXplID4gMCkKKwkJCWdvLT5nb3Bfc2l6ZSA9IGNvbXAtPmdvcF9zaXplOworCQllbHNlCisJCQlnby0+Z29wX3NpemUgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIDEwMDA7CisJCWlmIChnby0+Z29wX3NpemUgIT0gMTUpCisJCQlnby0+ZHZkX21vZGUgPSAwOworCQkvKmdvLT5pcGIgPSBjb21wLT5tYXhfYl9mcmFtZXMgPiAwOyovIC8qIGNvbXBsZXRlbHkgdW50ZXN0ZWQgKi8KKwkJaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKSB7CisJCQlzd2l0Y2ggKGNvbXAtPmFzcGVjdF9yYXRpbykgeworCQkJY2FzZSBHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19OVFNDOgorCQkJY2FzZSBHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19QQUw6CisJCQkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT180XzM7CisJCQkJYnJlYWs7CisJCQljYXNlIEdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDOgorCQkJY2FzZSBHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfUEFMOgorCQkJCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMTZfOTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGNvbXAtPmZsYWdzICYgR083MDA3X0NPTVBfT01JVF9TRVFfSEVBREVSKSB7CisJCQlnby0+ZHZkX21vZGUgPSAwOworCQkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDE7CisJCX0KKwkJLyogZmFsbC10aHJvdWdoICovCisJfQorCWNhc2UgR083MDA3SU9DX0dfQ09NUF9QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zICpjb21wID0gYXJnOworCisJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KGNvbXAsIDAsIHNpemVvZigqY29tcCkpOworCQljb21wLT5nb3Bfc2l6ZSA9IGdvLT5nb3Bfc2l6ZTsKKwkJY29tcC0+bWF4X2JfZnJhbWVzID0gZ28tPmlwYiA/IDIgOiAwOworCQlzd2l0Y2ggKGdvLT5hc3BlY3RfcmF0aW8pIHsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fNF8zOgorCQkJaWYgKGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MpCisJCQkJY29tcC0+YXNwZWN0X3JhdGlvID0KKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT180XzNfTlRTQzsKKwkJCWVsc2UKKwkJCQljb21wLT5hc3BlY3RfcmF0aW8gPQorCQkJCQlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19QQUw7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fMTZfOToKKwkJCWlmIChnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDKQorCQkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9CisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDOworCQkJZWxzZQorCQkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9CisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9QQUw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19BU1BFQ1RfUkFUSU9fMV8xOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGdvLT5jbG9zZWRfZ29wKQorCQkJY29tcC0+ZmxhZ3MgfD0gR083MDA3X0NPTVBfQ0xPU0VEX0dPUDsKKwkJaWYgKCFnby0+c2VxX2hlYWRlcl9lbmFibGUpCisJCQljb21wLT5mbGFncyB8PSBHTzcwMDdfQ09NUF9PTUlUX1NFUV9IRUFERVI7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19TX01QRUdfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtcyAqbXBlZyA9IGFyZzsKKworCQlpZiAoZ28tPmZvcm1hdCAhPSBHTzcwMDdfRk9STUFUX01QRUcxICYmCisJCQkJZ28tPmZvcm1hdCAhPSBHTzcwMDdfRk9STUFUX01QRUcyICYmCisJCQkJZ28tPmZvcm1hdCAhPSBHTzcwMDdfRk9STUFUX01QRUc0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKG1wZWctPmZsYWdzICYgR083MDA3X01QRUdfRk9SQ0VfRFZEX01PREUpIHsKKwkJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUcyOworCQkJZ28tPmJpdHJhdGUgPSA5ODAwMDAwOworCQkJZ28tPmdvcF9zaXplID0gMTU7CisJCQlnby0+cGFsaSA9IDB4NDg7CisJCQlnby0+Y2xvc2VkX2dvcCA9IDE7CisJCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAwOworCQkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMTsKKwkJCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9IDE7CisJCQlnby0+ZHZkX21vZGUgPSAxOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChtcGVnLT5tcGVnX3ZpZGVvX3N0YW5kYXJkKSB7CisJCQljYXNlIEdPNzAwN19NUEVHX1ZJREVPX01QRUcxOgorCQkJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUcxOworCQkJCWdvLT5wYWxpID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgR083MDA3X01QRUdfVklERU9fTVBFRzI6CisJCQkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzI7CisJCQkJaWYgKG1wZWctPnBhbGkgPj4gMjQgPT0gMikKKwkJCQkJZ28tPnBhbGkgPSBtcGVnLT5wYWxpICYgMHhmZjsKKwkJCQllbHNlCisJCQkJCWdvLT5wYWxpID0gMHg0ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgR083MDA3X01QRUdfVklERU9fTVBFRzQ6CisJCQkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzQ7CisJCQkJaWYgKG1wZWctPnBhbGkgPj4gMjQgPT0gNCkKKwkJCQkJZ28tPnBhbGkgPSBtcGVnLT5wYWxpICYgMHhmZjsKKwkJCQllbHNlCisJCQkJCWdvLT5wYWxpID0gMHhmNTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlnby0+Z29wX2hlYWRlcl9lbmFibGUgPQorCQkJCW1wZWctPmZsYWdzICYgR083MDA3X01QRUdfT01JVF9HT1BfSEVBREVSCisJCQkJPyAwIDogMTsKKwkJCWlmIChtcGVnLT5mbGFncyAmIEdPNzAwN19NUEVHX1JFUEVBVF9TRVFIRUFERVIpCisJCQkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMTsKKwkJCWVsc2UKKwkJCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAwOworCQkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJfQorCQkvKiBmYWxsLXRocm91Z2ggKi8KKwl9CisJY2FzZSBHTzcwMDdJT0NfR19NUEVHX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMgKm1wZWcgPSBhcmc7CisKKwkJbWVtc2V0KG1wZWcsIDAsIHNpemVvZigqbXBlZykpOworCQlzd2l0Y2ggKGdvLT5mb3JtYXQpIHsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCQkJbXBlZy0+bXBlZ192aWRlb19zdGFuZGFyZCA9IEdPNzAwN19NUEVHX1ZJREVPX01QRUcxOworCQkJbXBlZy0+cGFsaSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQkJbXBlZy0+bXBlZ192aWRlb19zdGFuZGFyZCA9IEdPNzAwN19NUEVHX1ZJREVPX01QRUcyOworCQkJbXBlZy0+cGFsaSA9IEdPNzAwN19NUEVHX1BST0ZJTEUoMiwgZ28tPnBhbGkpOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJCW1wZWctPm1wZWdfdmlkZW9fc3RhbmRhcmQgPSBHTzcwMDdfTVBFR19WSURFT19NUEVHNDsKKwkJCW1wZWctPnBhbGkgPSBHTzcwMDdfTVBFR19QUk9GSUxFKDQsIGdvLT5wYWxpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKCFnby0+Z29wX2hlYWRlcl9lbmFibGUpCisJCQltcGVnLT5mbGFncyB8PSBHTzcwMDdfTVBFR19PTUlUX0dPUF9IRUFERVI7CisJCWlmIChnby0+cmVwZWF0X3NlcWhlYWQpCisJCQltcGVnLT5mbGFncyB8PSBHTzcwMDdfTVBFR19SRVBFQVRfU0VRSEVBREVSOworCQlpZiAoZ28tPmR2ZF9tb2RlKQorCQkJbXBlZy0+ZmxhZ3MgfD0gR083MDA3X01QRUdfRk9SQ0VfRFZEX01PREU7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19TX01EX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfbWRfcGFyYW1zICptZHAgPSBhcmc7CisKKwkJaWYgKG1kcC0+cmVnaW9uID4gMykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobWRwLT50cmlnZ2VyID4gMCkgeworCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5waXhlbF90aHJlc2hvbGQgPQorCQkJCQltZHAtPnBpeGVsX3RocmVzaG9sZCA+PiAxOworCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5tb3Rpb25fdGhyZXNob2xkID0KKwkJCQkJbWRwLT5tb3Rpb25fdGhyZXNob2xkID4+IDE7CisJCQlnby0+bW9kZXRbbWRwLT5yZWdpb25dLm1iX3RocmVzaG9sZCA9CisJCQkJCW1kcC0+dHJpZ2dlciA+PiAxOworCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5lbmFibGUgPSAxOworCQl9IGVsc2UKKwkJCWdvLT5tb2RldFttZHAtPnJlZ2lvbl0uZW5hYmxlID0gMDsKKwkJLyogZmFsbC10aHJvdWdoICovCisJfQorCWNhc2UgR083MDA3SU9DX0dfTURfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19tZF9wYXJhbXMgKm1kcCA9IGFyZzsKKwkJaW50IHJlZ2lvbiA9IG1kcC0+cmVnaW9uOworCisJCWlmIChtZHAtPnJlZ2lvbiA+IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KG1kcCwgMCwgc2l6ZW9mKHN0cnVjdCBnbzcwMDdfbWRfcGFyYW1zKSk7CisJCW1kcC0+cmVnaW9uID0gcmVnaW9uOworCQlpZiAoIWdvLT5tb2RldFtyZWdpb25dLmVuYWJsZSkKKwkJCXJldHVybiAwOworCQltZHAtPnBpeGVsX3RocmVzaG9sZCA9CisJCQkoZ28tPm1vZGV0W3JlZ2lvbl0ucGl4ZWxfdGhyZXNob2xkIDw8IDEpICsgMTsKKwkJbWRwLT5tb3Rpb25fdGhyZXNob2xkID0KKwkJCShnby0+bW9kZXRbcmVnaW9uXS5tb3Rpb25fdGhyZXNob2xkIDw8IDEpICsgMTsKKwkJbWRwLT50cmlnZ2VyID0KKwkJCShnby0+bW9kZXRbcmVnaW9uXS5tYl90aHJlc2hvbGQgPDwgMSkgKyAxOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBHTzcwMDdJT0NfU19NRF9SRUdJT046CisJeworCQlzdHJ1Y3QgZ283MDA3X21kX3JlZ2lvbiAqcmVnaW9uID0gYXJnOworCisJCWlmIChyZWdpb24tPnJlZ2lvbiA8IDEgfHwgcmVnaW9uLT5yZWdpb24gPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBjbGlwX3RvX21vZGV0X21hcChnbywgcmVnaW9uLT5yZWdpb24sIHJlZ2lvbi0+Y2xpcHMpOworCX0KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3OiB1bnN1cHBvcnRlZCBpb2N0bCAlZFxuIiwgY21kKTsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9CisJcmV0dXJuIDA7CisKK3VubG9ja19hbmRfcmV0dXJuOgorCXVwKCZnb2ZoLT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGdvNzAwN19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGdvZmgtPmdvLT5zdGF0dXMgIT0gU1RBVFVTX09OTElORSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBnbzcwMDdfZG9faW9jdGwpOworfQorCitzdGF0aWMgc3NpemVfdCBnbzcwMDdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCSsrZ29idWYtPm1hcHBlZDsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoLS1nb2J1Zi0+bWFwcGVkID09IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvYnVmLT5nby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZGVhY3RpdmF0ZV9idWZmZXIoZ29idWYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnb2J1Zi0+Z28tPnNwaW5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKiBDb3BpZWQgZnJvbSB2aWRlb2J1Zi1kbWEtc2cuYyAqLworc3RhdGljIGludCBnbzcwMDdfdm1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX1VTRVIgfCBfX0dGUF9ETUEzMik7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gVk1fRkFVTFRfT09NOworCWNsZWFyX3VzZXJfcGFnZShwYWdlX2FkZHJlc3MocGFnZSksICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzLAorCQkJcGFnZSk7CisJdm1mLT5wYWdlID0gcGFnZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnbzcwMDdfdm1fb3BzID0geworCS5vcGVuCT0gZ283MDA3X3ZtX29wZW4sCisJLmNsb3NlCT0gZ283MDA3X3ZtX2Nsb3NlLAorCS5mYXVsdAk9IGdvNzAwN192bV9mYXVsdCwKK307CisKK3N0YXRpYyBpbnQgZ283MDA3X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwlpZiAoZ29maC0+Z28tPnN0YXR1cyAhPSBTVEFUVVNfT05MSU5FKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIG9ubHkgc3VwcG9ydCBWTV9TSEFSRUQgbWFwcGluZyAqLworCWlmICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgIT0gR083MDA3X0JVRl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogbXVzdCBtYXAgZXhhY3RseSBvbmUgZnVsbCBidWZmZXIgKi8KKwlkb3duKCZnb2ZoLT5sb2NrKTsKKwlpbmRleCA9IHZtYS0+dm1fcGdvZmYgLyBHTzcwMDdfQlVGX1BBR0VTOworCWlmIChpbmRleCA+PSBnb2ZoLT5idWZfY291bnQpIHsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsgLyogdHJ5aW5nIHRvIG1hcCBiZXlvbmQgcmVxdWVzdGVkIGJ1ZmZlcnMgKi8KKwl9CisJaWYgKGluZGV4ICogR083MDA3X0JVRl9QQUdFUyAhPSB2bWEtPnZtX3Bnb2ZmKSB7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIG9mZnNldCBpcyBub3QgYWxpZ25lZCBvbiBidWZmZXIgYm91bmRhcnkgKi8KKwl9CisJaWYgKGdvZmgtPmJ1ZnNbaW5kZXhdLm1hcHBlZCA+IDApIHsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlnb2ZoLT5idWZzW2luZGV4XS5tYXBwZWQgPSAxOworCWdvZmgtPmJ1ZnNbaW5kZXhdLnVzZXJfYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJdm1hLT52bV9vcHMgPSAmZ283MDA3X3ZtX29wczsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fSU87CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAmZ29maC0+YnVmc1tpbmRleF07CisJdXAoJmdvZmgtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdvNzAwN19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWY7CisKKwlpZiAobGlzdF9lbXB0eSgmZ29maC0+Z28tPnN0cmVhbSkpCisJCXJldHVybiBQT0xMRVJSOworCWdvYnVmID0gbGlzdF9lbnRyeShnb2ZoLT5nby0+c3RyZWFtLm5leHQsIHN0cnVjdCBnbzcwMDdfYnVmZmVyLCBzdHJlYW0pOworCXBvbGxfd2FpdChmaWxlLCAmZ29maC0+Z28tPmZyYW1lX3dhaXRxLCB3YWl0KTsKKwlpZiAoZ29idWYtPnN0YXRlID09IEJVRl9TVEFURV9ET05FKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3ZmbF9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZmZCk7CisKKwl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOworCWlmICgtLWdvLT5yZWZfY291bnQgPT0gMCkKKwkJa2ZyZWUoZ28pOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnbzcwMDdfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZ283MDA3X29wZW4sCisJLnJlbGVhc2UJPSBnbzcwMDdfcmVsZWFzZSwKKwkuaW9jdGwJCT0gZ283MDA3X2lvY3RsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5yZWFkCQk9IGdvNzAwN19yZWFkLAorCS5tbWFwCQk9IGdvNzAwN19tbWFwLAorCS5wb2xsCQk9IGdvNzAwN19wb2xsLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZ283MDA3X3RlbXBsYXRlID0geworCS5uYW1lCQk9ICJnbzcwMDciLAorCS52ZmxfdHlwZQk9IFZJRF9UWVBFX0NBUFRVUkUsCisJLmZvcHMJCT0gJmdvNzAwN19mb3BzLAorCS5taW5vcgkJPSAtMSwKKwkucmVsZWFzZQk9IGdvNzAwN192ZmxfcmVsZWFzZSwKK307CisKK2ludCBnbzcwMDdfdjRsMl9pbml0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWludCBydjsKKworCWdvLT52aWRlb19kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoZ28tPnZpZGVvX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoZ28tPnZpZGVvX2RldiwgJmdvNzAwN190ZW1wbGF0ZSwgc2l6ZW9mKGdvNzAwN190ZW1wbGF0ZSkpOworCWdvLT52aWRlb19kZXYtPnBhcmVudCA9IGdvLT5kZXY7CisJcnYgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZ28tPnZpZGVvX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChydiA8IDApIHsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZ28tPnZpZGVvX2Rldik7CisJCWdvLT52aWRlb19kZXYgPSBOVUxMOworCQlyZXR1cm4gcnY7CisJfQorCXZpZGVvX3NldF9kcnZkYXRhKGdvLT52aWRlb19kZXYsIGdvKTsKKwkrK2dvLT5yZWZfY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnbzcwMDdfdjRsMl9yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRvd24oJmdvLT5od19sb2NrKTsKKwlpZiAoZ28tPnN0cmVhbWluZykgeworCQlnby0+c3RyZWFtaW5nID0gMDsKKwkJZ283MDA3X3N0cmVhbV9zdG9wKGdvKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlhYm9ydF9xdWV1ZWQoZ28pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwl9CisJdXAoJmdvLT5od19sb2NrKTsKKwlpZiAoZ28tPnZpZGVvX2RldikKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZ28tPnZpZGVvX2Rldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy5oIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzk5YzkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgdGhlIGFzc29jaWF0ZWQgUkVBRE1FIGRvY3VtZW50YXRpb24gZmlsZSAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyogREVQUkVDQVRFRCAtLSB1c2UgVjRMMl9QSVhfRk1UX01QRUcgYW5kIHRoZW4gY2FsbCBHTzcwMDdJT0NfU19NUEVHX1BBUkFNUworICogdG8gc2VsZWN0IGJldHdlZW4gTVBFRzEsIE1QRUcyLCBhbmQgTVBFRzQgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUc0ICAgICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnNCcpIC8qIE1QRUc0ICovCisKKy8qIFRoZXNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIGJldHRlciBpbnRlcmZhY2UKKyAqIHNvb24sIHNvIGRvbid0IGdldCB0b28gYXR0YWNoZWQgdG8gdGhlbSAqLworI2RlZmluZQlHTzcwMDdJT0NfU19CSVRSQVRFCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMCwgaW50KQorI2RlZmluZQlHTzcwMDdJT0NfR19CSVRSQVRFCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMSwgaW50KQorCitlbnVtIGdvNzAwN19hc3BlY3RfcmF0aW8geworCUdPNzAwN19BU1BFQ1RfUkFUSU9fMV8xID0gMCwKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19OVFNDID0gMSwKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19QQUwgPSAyLAorCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDID0gMywKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfUEFMID0gNCwKK307CisKKy8qIFVzZWQgdG8gc2V0IGdlbmVyaWMgY29tcHJlc3Npb24gcGFyYW1ldGVycyAqLworc3RydWN0IGdvNzAwN19jb21wX3BhcmFtcyB7CisJX191MzIgZ29wX3NpemU7CisJX191MzIgbWF4X2JfZnJhbWVzOworCWVudW0gZ283MDA3X2FzcGVjdF9yYXRpbyBhc3BlY3RfcmF0aW87CisJX191MzIgZmxhZ3M7CisJX191MzIgcmVzZXJ2ZWRbOF07Cit9OworCisjZGVmaW5lIEdPNzAwN19DT01QX0NMT1NFRF9HT1AJCTB4MDAwMDAwMDEKKyNkZWZpbmUgR083MDA3X0NPTVBfT01JVF9TRVFfSEVBREVSCTB4MDAwMDAwMDIKKworZW51bSBnbzcwMDdfbXBlZ192aWRlb19zdGFuZGFyZCB7CisJR083MDA3X01QRUdfVklERU9fTVBFRzEgPSAwLAorCUdPNzAwN19NUEVHX1ZJREVPX01QRUcyID0gMSwKKwlHTzcwMDdfTVBFR19WSURFT19NUEVHNCA9IDIsCit9OworCisvKiBVc2VkIHRvIHNldCBwYXJhbWV0ZXJzIGZvciBWNEwyX1BJWF9GTVRfTVBFRyBmb3JtYXQgKi8KK3N0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMgeworCWVudW0gZ283MDA3X21wZWdfdmlkZW9fc3RhbmRhcmQgbXBlZ192aWRlb19zdGFuZGFyZDsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBwYWxpOworCV9fdTMyIHJlc2VydmVkWzhdOworfTsKKworI2RlZmluZSBHTzcwMDdfTVBFR19GT1JDRV9EVkRfTU9ERQkweDAwMDAwMDAxCisjZGVmaW5lIEdPNzAwN19NUEVHX09NSVRfR09QX0hFQURFUgkweDAwMDAwMDAyCisjZGVmaW5lIEdPNzAwN19NUEVHX1JFUEVBVF9TRVFIRUFERVIJMHgwMDAwMDAwNAorCisjZGVmaW5lIEdPNzAwN19NUEVHX1BST0ZJTEUoZm9ybWF0LCBwYWxpKQkoKChmb3JtYXQpPDwyNCl8KHBhbGkpKQorCisjZGVmaW5lIEdPNzAwN19NUEVHMl9QUk9GSUxFX01BSU5fTUFJTgkJR083MDA3X01QRUdfUFJPRklMRSgyLCAweDQ4KQorCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDAJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHgwOCkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDAxKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wyCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4MDIpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDMJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHgwMykKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDkxKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wyCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4OTIpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDMJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHg5MykKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MNAkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDk0KQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMAkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYwKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYxKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMgkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYyKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMwkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYzKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNAkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGY0KQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGY1KQorCitzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcyB7CisJX191MTYgcmVnaW9uOworCV9fdTE2IHRyaWdnZXI7CisJX191MTYgcGl4ZWxfdGhyZXNob2xkOworCV9fdTE2IG1vdGlvbl90aHJlc2hvbGQ7CisJX191MzIgcmVzZXJ2ZWRbOF07Cit9OworCitzdHJ1Y3QgZ283MDA3X21kX3JlZ2lvbiB7CisJX191MTYgcmVnaW9uOworCV9fdTE2IGZsYWdzOworCXN0cnVjdCB2NGwyX2NsaXAgKmNsaXBzOworCV9fdTMyIHJlc2VydmVkWzhdOworfTsKKworI2RlZmluZQlHTzcwMDdJT0NfU19NUEVHX1BBUkFNUwlfSU9XUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyAyLCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19HX01QRUdfUEFSQU1TCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMywgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfU19DT01QX1BBUkFNUwlfSU9XUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyA0LCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19HX0NPTVBfUEFSQU1TCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgNSwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfU19NRF9QQVJBTVMJX0lPV1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgNiwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX0dfTURfUEFSQU1TCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgNywgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX1NfTURfUkVHSU9OCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgOCwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21kX3JlZ2lvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE2ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zYWE3MTM0LWdvNzAwNy5jCkBAIC0wLDAgKzEsNDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorCisjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKKyNpbmNsdWRlICJzYWE3MTM0LmgiCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKworI2RlZmluZSBHTzcwMDdfSFBJX0RFQlVHCisKK2VudW0gaHBpX2FkZHJlc3MgeworCUhQSV9BRERSX1ZJREVPX0JVRkZFUiA9IDB4ZTQsCisJSFBJX0FERFJfSU5JVF9CVUZGRVIgPSAweGVhLAorCUhQSV9BRERSX0lOVFJfUkVUX1ZBTFVFID0gMHhlZSwKKwlIUElfQUREUl9JTlRSX1JFVF9EQVRBID0gMHhlYywKKwlIUElfQUREUl9JTlRSX1NUQVRVUyA9IDB4ZjQsCisJSFBJX0FERFJfSU5UUl9XUl9QQVJBTSA9IDB4ZjYsCisJSFBJX0FERFJfSU5UUl9XUl9JTkRFWCA9IDB4ZjgsCit9OworCitlbnVtIGdwaW9fY29tbWFuZCB7CisJR1BJT19DT01NQU5EX1JFU0VUID0gMHgwMCwgLyogMDAwYiAqLworCUdQSU9fQ09NTUFORF9SRVExICA9IDB4MDQsIC8qIDAwMWIgKi8KKwlHUElPX0NPTU1BTkRfV1JJVEUgPSAweDIwLCAvKiAwMTBiICovCisJR1BJT19DT01NQU5EX1JFUTIgID0gMHgyNCwgLyogMDExYiAqLworCUdQSU9fQ09NTUFORF9SRUFEICA9IDB4ODAsIC8qIDEwMGIgKi8KKwlHUElPX0NPTU1BTkRfVklERU8gPSAweDg0LCAvKiAxMDFiICovCisJR1BJT19DT01NQU5EX0lETEUgID0gMHhBMCwgLyogMTEwYiAqLworCUdQSU9fQ09NTUFORF9BRERSICA9IDB4QTQsIC8qIDExMWIgKi8KK307CisKK3N0cnVjdCBzYWE3MTM0X2dvNzAwNyB7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CisJdTggKnRvcDsKKwl1OCAqYm90dG9tOworCWRtYV9hZGRyX3QgdG9wX2RtYTsKKwlkbWFfYWRkcl90IGJvdHRvbV9kbWE7Cit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvIGJvYXJkX3ZveWFnZXIgPSB7CisJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCS5mbGFncwkJID0gMCwKKwkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJR083MDA3X1NFTlNPUl9WQkksCisJLmF1ZGlvX2ZsYWdzCT0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCS5udW1faW5wdXRzCSA9IDEsCisJLmlucHV0cyAJID0geworCQl7CisJCQkubmFtZQkJPSAiU0FBNzEzNCIsCisJCX0sCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiogRHJpdmVyIGZvciBHUElPIEhQSSBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdwaW9fd3JpdGUoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHU4IGFkZHIsIHUxNiBkYXRhKQoreworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4ZmYpOworCisJLyogV3JpdGUgSFBJIGFkZHJlc3MgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIGFkZHIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0FERFIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJLyogV3JpdGUgbG93IGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIGRhdGEgJiAweGZmKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9XUklURSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwkvKiBXcml0ZSBoaWdoIGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIGRhdGEgPj4gOCk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfV1JJVEUpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19yZWFkKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCB1OCBhZGRyLCB1MTYgKmRhdGEpCit7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHhmZik7CisKKwkvKiBXcml0ZSBIUEkgYWRkcmVzcyAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgYWRkcik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfQUREUik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweDAwKTsKKworCS8qIFJlYWQgbG93IGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRUFEKTsKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCSpkYXRhID0gc2FhX3JlYWRiKFNBQTcxMzRfR1BJT19HUFNUQVRVUzApOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJLyogUmVhZCBoaWdoIGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRUFEKTsKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCSpkYXRhIHw9IHNhYV9yZWFkYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwKSA8PCA4OworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfaW50ZXJmYWNlX3Jlc2V0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisJdTMyIHN0YXR1czsKKwl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKKwlpbnQgY291bnQgPSAyMDsKKworCXNhYV9jbGVhcmIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg4MCk7IC8qIERpc2FibGUgVFMgaW50ZXJmYWNlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMiwgMHhhNCk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHhmZik7CisKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVExKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVNFVCk7CisJbXNsZWVwKDEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFUTEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFUTIpOworCW1zbGVlcCgxMCk7CisKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCisJc3RhdHVzID0gc2FhX3JlYWRiKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIpOworCS8qcHJpbnRrKEtFUk5fREVCVUcgInN0YXR1cyBpcyAlc1xuIiwgc3RhdHVzICYgMHg0MCA/ICJPSyIgOiAibm90IE9LIik7ICovCisKKwkvKiBlbnRlciBjb21tYW5kIG1vZGUuLi4oPykgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVExKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVEyKTsKKworCWRvIHsKKwkJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJCXN0YXR1cyA9IHNhYV9yZWFkYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyKTsKKwkJLypwcmludGsoS0VSTl9JTkZPICJncGlvIGlzICUwOHhcbiIsIHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpKTsgKi8KKwl9IHdoaWxlICgtLWNvdW50ID4gMCk7CisKKwkvKiBXYWl0IGZvciBhbiBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCAqLworCWlmIChnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwIHx8CisJCQkoaW50cl92YWwgJiB+MHgxKSAhPSAweDU1YWEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2FhNzEzNC1nbzcwMDc6IHVuYWJsZSB0byByZXNldCB0aGUgR083MDA3XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN193cml0ZV9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28sIGludCBhZGRyLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCWludCBpOworCXUxNiBzdGF0dXNfcmVnOworCisjaWZkZWYgR083MDA3X0hQSV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHCisJCSJzYWE3MTM0LWdvNzAwNzogV3JpdGVJbnRlcnJ1cHQ6ICUwNHggJTA0eFxuIiwgYWRkciwgZGF0YSk7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkgeworCQlncGlvX3JlYWQoZGV2LCBIUElfQUREUl9JTlRSX1NUQVRVUywgJnN0YXR1c19yZWcpOworCQlpZiAoIShzdGF0dXNfcmVnICYgMHgwMDEwKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTApOworCX0KKwlpZiAoaSA9PSAxMDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2FhNzEzNC1nbzcwMDc6IGRldmljZSBpcyBodW5nLCBzdGF0dXMgcmVnID0gMHglMDR4XG4iLAorCQkJc3RhdHVzX3JlZyk7CisJCXJldHVybiAtMTsKKwl9CisJZ3Bpb193cml0ZShkZXYsIEhQSV9BRERSX0lOVFJfV1JfUEFSQU0sIGRhdGEpOworCWdwaW9fd3JpdGUoZGV2LCBIUElfQUREUl9JTlRSX1dSX0lOREVYLCBhZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X3JlYWRfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisKKwkvKiBYWFggd2UgbmVlZCB0byB3YWl0IGlmIHRoZXJlIGlzIG5vIGludGVycnVwdCBhdmFpbGFibGUgKi8KKwlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSA9IDE7CisJZ3Bpb19yZWFkKGRldiwgSFBJX0FERFJfSU5UUl9SRVRfVkFMVUUsICZnby0+aW50ZXJydXB0X3ZhbHVlKTsKKwlncGlvX3JlYWQoZGV2LCBIUElfQUREUl9JTlRSX1JFVF9EQVRBLCAmZ28tPmludGVycnVwdF9kYXRhKTsKKyNpZmRlZiBHTzcwMDdfSFBJX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgInNhYTcxMzQtZ283MDA3OiBSZWFkSW50ZXJydXB0OiAlMDR4ICUwNHhcbiIsCisJCQlnby0+aW50ZXJydXB0X3ZhbHVlLCBnby0+aW50ZXJydXB0X2RhdGEpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxMzRfZ283MDA3X2lycV90c19kb25lKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkJdW5zaWduZWQgbG9uZyBzdGF0dXMpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYtPmVtcHJlc3NfZGV2KTsKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKworCWlmICghZ28tPnN0cmVhbWluZykKKwkJcmV0dXJuOworCWlmICgwICE9IChzdGF0dXMgJiAweDAwMGYwMDAwKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNhYTcxMzQtZ283MDA3OiBpcnE6IGxvc3QgJWxkXG4iLAorCQkJCShzdGF0dXMgPj4gMTYpICYgMHgwZik7CisJaWYgKHN0YXR1cyAmIDB4MTAwMDAwKSB7CisJCWRtYV9zeW5jX3NpbmdsZSgmZGV2LT5wY2ktPmRldiwKKwkJCQlzYWEtPmJvdHRvbV9kbWEsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShnbywgc2FhLT5ib3R0b20sIFBBR0VfU0laRSk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTIoNSksIGNwdV90b19sZTMyKHNhYS0+Ym90dG9tX2RtYSkpOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZSgmZGV2LT5wY2ktPmRldiwKKwkJCQlzYWEtPnRvcF9kbWEsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShnbywgc2FhLT50b3AsIFBBR0VfU0laRSk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTEoNSksIGNwdV90b19sZTMyKHNhYS0+dG9wX2RtYSkpOworCX0KK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19zdHJlYW1fc3RhcnQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBzYWEtPmRldjsKKworCXNhYS0+dG9wX2RtYSA9IGRtYV9tYXBfcGFnZSgmZGV2LT5wY2ktPmRldiwgdmlydF90b19wYWdlKHNhYS0+dG9wKSwKKwkJCTAsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoIXNhYS0+dG9wX2RtYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2FhLT5ib3R0b21fZG1hID0gZG1hX21hcF9wYWdlKCZkZXYtPnBjaS0+ZGV2LAorCQkJdmlydF90b19wYWdlKHNhYS0+Ym90dG9tKSwKKwkJCTAsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoIXNhYS0+Ym90dG9tX2RtYSkgeworCQlkbWFfdW5tYXBfcGFnZSgmZGV2LT5wY2ktPmRldiwgc2FhLT50b3BfZG1hLCBQQUdFX1NJWkUsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2FhX3dyaXRlbChTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDAgPj4gMiwgMHhBMzAwQjAwMCk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDQgPj4gMiwgMHg0MDAwMDIwMCk7CisKKwkvKiBTZXQgSFBJIGludGVyZmFjZSBmb3IgdmlkZW8gKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweGZmKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIEhQSV9BRERSX1ZJREVPX0JVRkZFUik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfQUREUik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHgwMCk7CisKKwkvKiBFbmFibGUgVFMgaW50ZXJmYWNlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGU2KTsKKworCS8qIFJlc2V0IFRTIGludGVyZmFjZSAqLworCXNhYV9zZXRiKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMSk7CisJc2FhX2NsZWFyYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDEpOworCisJLyogU2V0IHVwIHRyYW5zZmVyIGJsb2NrIHNpemUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUxfU0VSSUFMLCAxMjggLSAxKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMCwgKFBBR0VfU0laRSA+PiA3KSAtIDEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUExLCAwKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMiwgMCk7CisKKwkvKiBFbmFibGUgdmlkZW8gc3RyZWFtaW5nIG1vZGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9WSURFTyk7CisKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkExKDUpLCBjcHVfdG9fbGUzMihzYWEtPnRvcF9kbWEpKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkEyKDUpLCBjcHVfdG9fbGUzMihzYWEtPmJvdHRvbV9kbWEpKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfUElUQ0goNSksIDEyOCk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0NPTlRST0woNSksIFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF9NQVgpOworCisJLyogRW5hYmxlIFRTIEZJRk8gKi8KKwlzYWFfc2V0bChTQUE3MTM0X01BSU5fQ1RSTCwgU0FBNzEzNF9NQUlOX0NUUkxfVEU1KTsKKworCS8qIEVuYWJsZSBETUEgSVJRICovCisJc2FhX3NldGwoU0FBNzEzNF9JUlExLAorCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEyXzEgfCBTQUE3MTM0X0lSUTFfSU5URV9SQTJfMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19zdHJlYW1fc3RvcChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCisJLyogU2h1dCBkb3duIFRTIEZJRk8gKi8KKwlzYWFfY2xlYXJsKFNBQTcxMzRfTUFJTl9DVFJMLCBTQUE3MTM0X01BSU5fQ1RSTF9URTUpOworCisJLyogRGlzYWJsZSBETUEgSVJRICovCisJc2FhX2NsZWFybChTQUE3MTM0X0lSUTEsCisJCQlTQUE3MTM0X0lSUTFfSU5URV9SQTJfMSB8IFNBQTcxMzRfSVJRMV9JTlRFX1JBMl8wKTsKKworCS8qIERpc2FibGUgVFMgaW50ZXJmYWNlICovCisJc2FhX2NsZWFyYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDgwKTsKKworCWRtYV91bm1hcF9wYWdlKCZkZXYtPnBjaS0+ZGV2LCBzYWEtPnRvcF9kbWEsIFBBR0VfU0laRSwKKwkJCURNQV9GUk9NX0RFVklDRSk7CisJZG1hX3VubWFwX3BhZ2UoJmRldi0+cGNpLT5kZXYsIHNhYS0+Ym90dG9tX2RtYSwgUEFHRV9TSVpFLAorCQkJRE1BX0ZST01fREVWSUNFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X3NlbmRfZmlybXdhcmUoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisJdTE2IHN0YXR1c19yZWc7CisJaW50IGk7CisKKyNpZmRlZiBHTzcwMDdfSFBJX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgInNhYTcxMzQtZ283MDA3OiBEb3dubG9hZEJ1ZmZlciAiCisJCQkic2VuZGluZyAlZCBieXRlc1xuIiwgbGVuKTsKKyNlbmRpZgorCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaSA9IGxlbiA+IDY0ID8gNjQgOiBsZW47CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4ZmYpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIEhQSV9BRERSX0lOSVRfQlVGRkVSKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfQUREUik7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCQl3aGlsZSAoaS0tID4gMCkgeworCQkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCAqZGF0YSk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9XUklURSk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKwkJCSsrZGF0YTsKKwkJCS0tbGVuOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkgeworCQkJZ3Bpb19yZWFkKGRldiwgSFBJX0FERFJfSU5UUl9TVEFUVVMsICZzdGF0dXNfcmVnKTsKKwkJCWlmICghKHN0YXR1c19yZWcgJiAweDAwMDIpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IDEwMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJzYWE3MTM0LWdvNzAwNzogZGV2aWNlIGlzIGh1bmcsICIKKwkJCQkJInN0YXR1cyByZWcgPSAweCUwNHhcbiIsIHN0YXR1c19yZWcpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdvNzAwN19ocGlfb3BzIHNhYTcxMzRfZ283MDA3X2hwaV9vcHMgPSB7CisJLmludGVyZmFjZV9yZXNldAk9IHNhYTcxMzRfZ283MDA3X2ludGVyZmFjZV9yZXNldCwKKwkud3JpdGVfaW50ZXJydXB0CT0gc2FhNzEzNF9nbzcwMDdfd3JpdGVfaW50ZXJydXB0LAorCS5yZWFkX2ludGVycnVwdAkJPSBzYWE3MTM0X2dvNzAwN19yZWFkX2ludGVycnVwdCwKKwkuc3RyZWFtX3N0YXJ0CQk9IHNhYTcxMzRfZ283MDA3X3N0cmVhbV9zdGFydCwKKwkuc3RyZWFtX3N0b3AJCT0gc2FhNzEzNF9nbzcwMDdfc3RyZWFtX3N0b3AsCisJLnNlbmRfZmlybXdhcmUJCT0gc2FhNzEzNF9nbzcwMDdfc2VuZF9maXJtd2FyZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiogQWRkL3JlbW92ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X2luaXQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCit7CisJc3RydWN0IGdvNzAwNyAqZ287CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAic2FhNzEzNC1nbzcwMDc6IHByb2JpbmcgbmV3IFNBQTcxM1ggYm9hcmRcbiIpOworCisJc2FhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMzRfZ283MDA3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNhYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoc2FhLCAwLCBzaXplb2Yoc3RydWN0IHNhYTcxMzRfZ283MDA3KSk7CisKKwkvKiBBbGxvY2F0ZSBhIGNvdXBsZSBwYWdlcyBmb3IgcmVjZWl2aW5nIHRoZSBjb21wcmVzc2VkIHN0cmVhbSAqLworCXNhYS0+dG9wID0gKHU4ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghc2FhLT50b3ApCisJCWdvdG8gYWxsb2NmYWlsOworCXNhYS0+Ym90dG9tID0gKHU4ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghc2FhLT5ib3R0b20pCisJCWdvdG8gYWxsb2NmYWlsOworCisJZ28gPSBnbzcwMDdfYWxsb2MoJmJvYXJkX3ZveWFnZXIsICZkZXYtPnBjaS0+ZGV2KTsKKwlpZiAoZ28gPT0gTlVMTCkKKwkJZ290byBhbGxvY2ZhaWw7CisJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfUENJX1ZPWUFHRVI7CisJc3RybmNweShnby0+bmFtZSwgc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwgc2l6ZW9mKGdvLT5uYW1lKSk7CisJZ28tPmhwaV9vcHMgPSAmc2FhNzEzNF9nbzcwMDdfaHBpX29wczsKKwlnby0+aHBpX2NvbnRleHQgPSBzYWE7CisJc2FhLT5kZXYgPSBkZXY7CisKKwkvKiBCb290IHRoZSBHTzcwMDcgKi8KKwlpZiAoZ283MDA3X2Jvb3RfZW5jb2RlcihnbywgZ28tPmJvYXJkX2luZm8tPmZsYWdzICYKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQykgPCAwKQorCQlnb3RvIGluaXRmYWlsOworCisJLyogRG8gYW55IGZpbmFsIEdPNzAwNyBpbml0aWFsaXphdGlvbiwgdGhlbiByZWdpc3RlciB0aGUKKwkgKiBWNEwyIGFuZCBBTFNBIGludGVyZmFjZXMgKi8KKwlpZiAoZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIoZ28pIDwgMCkKKwkJZ290byBpbml0ZmFpbDsKKwlkZXYtPmVtcHJlc3NfZGV2ID0gZ28tPnZpZGVvX2RldjsKKwl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPmVtcHJlc3NfZGV2LCBnbyk7CisKKwlnby0+c3RhdHVzID0gU1RBVFVTX09OTElORTsKKwlyZXR1cm4gMDsKKworaW5pdGZhaWw6CisJZ28tPnN0YXR1cyA9IFNUQVRVU19TSFVURE9XTjsKKwlyZXR1cm4gMDsKKworYWxsb2NmYWlsOgorCWlmIChzYWEtPnRvcCkKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNhYS0+dG9wKTsKKwlpZiAoc2FhLT5ib3R0b20pCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzYWEtPmJvdHRvbSk7CisJa2ZyZWUoc2FhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19maW5pKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCXN0cnVjdCBnbzcwMDcgKmdvOworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhOworCisJaWYgKE5VTEwgPT0gZGV2LT5lbXByZXNzX2RldikKKwkJcmV0dXJuIDA7CisKKwlnbyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldi0+ZW1wcmVzc19kZXYpOworCXNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlnby0+c3RhdHVzID0gU1RBVFVTX1NIVVRET1dOOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzYWEtPnRvcCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNhYS0+Ym90dG9tKTsKKwlrZnJlZShzYWEpOworCWdvNzAwN19yZW1vdmUoZ28pOworCWRldi0+ZW1wcmVzc19kZXYgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2FhNzEzNF9tcGVnX29wcyBzYWE3MTM0X2dvNzAwN19vcHMgPSB7CisJLnR5cGUgICAgICAgICAgPSBTQUE3MTM0X01QRUdfR083MDA3LAorCS5pbml0ICAgICAgICAgID0gc2FhNzEzNF9nbzcwMDdfaW5pdCwKKwkuZmluaSAgICAgICAgICA9IHNhYTcxMzRfZ283MDA3X2ZpbmksCisJLmlycV90c19kb25lICAgPSBzYWE3MTM0X2dvNzAwN19pcnFfdHNfZG9uZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhYTcxMzRfZ283MDA3X21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNhYTcxMzRfdHNfcmVnaXN0ZXIoJnNhYTcxMzRfZ283MDA3X29wcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYWE3MTM0X2dvNzAwN19tb2RfY2xlYW51cCh2b2lkKQoreworCXNhYTcxMzRfdHNfdW5yZWdpc3Rlcigmc2FhNzEzNF9nbzcwMDdfb3BzKTsKK30KKworbW9kdWxlX2luaXQoc2FhNzEzNF9nbzcwMDdfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2FhNzEzNF9nbzcwMDdfbW9kX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGU0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciB0aGUgZ283MDA3IGF1ZGlvIGRyaXZlciIpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgdGhlIGdvNzAwNyBhdWRpbyBkcml2ZXIiKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIGZvciB0aGUgZ283MDA3IGF1ZGlvIGRyaXZlciIpOworCitzdHJ1Y3QgZ283MDA3X3NuZCB7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfcGNtICpwY207CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3BpbmxvY2tfdCBsb2NrOworCWludCB3X2lkeDsKKwlpbnQgaHdfcHRyOworCWludCBhdmFpbDsKKwlpbnQgY2FwdHVyaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGdvNzAwN19zbmRfY2FwdHVyZV9odyA9IHsKKwkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzCQkJPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4JCT0gNDgwMDAsCisJLnJhdGVfbWF4CQk9IDQ4MDAwLAorCS5jaGFubmVsc19taW4JCT0gMiwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSAoMTI4KjEwMjQpLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNDA5NiwKKwkucGVyaW9kX2J5dGVzX21heAk9ICgxMjgqMTAyNCksCisJLnBlcmlvZHNfbWluCQk9IDEsCisJLnBlcmlvZHNfbWF4CQk9IDMyLAorfTsKKworc3RhdGljIHZvaWQgcGFyc2VfYXVkaW9fc3RyZWFtX2RhdGEoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpidWYsIGludCBsZW5ndGgpCit7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBnb3NuZC0+c3Vic3RyZWFtLT5ydW50aW1lOworCWludCBmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgbGVuZ3RoKTsKKworCXNwaW5fbG9jaygmZ29zbmQtPmxvY2spOworCWdvc25kLT5od19wdHIgKz0gZnJhbWVzOworCWlmIChnb3NuZC0+aHdfcHRyID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlnb3NuZC0+aHdfcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCWdvc25kLT5hdmFpbCArPSBmcmFtZXM7CisJc3Bpbl91bmxvY2soJmdvc25kLT5sb2NrKTsKKwlpZiAoZ29zbmQtPndfaWR4ICsgbGVuZ3RoID4gcnVudGltZS0+ZG1hX2J5dGVzKSB7CisJCWludCBjcHkgPSBydW50aW1lLT5kbWFfYnl0ZXMgLSBnb3NuZC0+d19pZHg7CisKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgZ29zbmQtPndfaWR4LCBidWYsIGNweSk7CisJCWxlbmd0aCAtPSBjcHk7CisJCWJ1ZiArPSBjcHk7CisJCWdvc25kLT53X2lkeCA9IDA7CisJfQorCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIGdvc25kLT53X2lkeCwgYnVmLCBsZW5ndGgpOworCWdvc25kLT53X2lkeCArPSBsZW5ndGg7CisJc3Bpbl9sb2NrKCZnb3NuZC0+bG9jayk7CisJaWYgKGdvc25kLT5hdmFpbCA8IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCXNwaW5fdW5sb2NrKCZnb3NuZC0+bG9jayk7CisJCXJldHVybjsKKwl9CisJZ29zbmQtPmF2YWlsIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCXNwaW5fdW5sb2NrKCZnb3NuZC0+bG9jayk7CisJaWYgKGdvc25kLT5jYXB0dXJpbmcpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoZ29zbmQtPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IGJ5dGVzOworCisJYnl0ZXMgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID4gMCkKKwkJdmZyZWUoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSk7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSAwOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKGJ5dGVzKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA9IGJ5dGVzOworCWdvLT5hdWRpb19kZWxpdmVyID0gcGFyc2VfYXVkaW9fc3RyZWFtX2RhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZ28tPmF1ZGlvX2RlbGl2ZXIgPSBOVUxMOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA+IDApCisJCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnb3NuZC0+bG9jaywgZmxhZ3MpOworCWlmIChnb3NuZC0+c3Vic3RyZWFtID09IE5VTEwpIHsKKwkJZ29zbmQtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5odyA9IGdvNzAwN19zbmRfY2FwdHVyZV9odzsKKwkJciA9IDA7CisJfSBlbHNlCisJCXIgPSAtRUJVU1k7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ29zbmQtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCisJZ29zbmQtPnN1YnN0cmVhbSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZCA9IGdvLT5zbmRfY29udGV4dDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJLyogSnVzdCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHdlIHNob3VsZCBzaWduYWwgQUxTQSB3aGVuCisJCSAqIHNvdW5kIGNvbWVzIGluICovCisJCWdvc25kLT5jYXB0dXJpbmcgPSAxOworCQlyZXR1cm4gMDsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWdvc25kLT5od19wdHIgPSBnb3NuZC0+d19pZHggPSBnb3NuZC0+YXZhaWwgPSAwOworCQlnb3NuZC0+Y2FwdHVyaW5nID0gMDsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgZ283MDA3X3NuZF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisKKwlyZXR1cm4gZ29zbmQtPmh3X3B0cjsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpnbzcwMDdfc25kX3BjbV9wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGdvNzAwN19zbmRfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4JCT0gZ283MDA3X3NuZF9jYXB0dXJlX29wZW4sCisJLmNsb3NlCQk9IGdvNzAwN19zbmRfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGdvNzAwN19zbmRfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gZ283MDA3X3NuZF9od19mcmVlLAorCS5wcmVwYXJlCT0gZ283MDA3X3NuZF9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGdvNzAwN19zbmRfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBnbzcwMDdfc25kX3BjbV9wb2ludGVyLAorCS5wYWdlCQk9IGdvNzAwN19zbmRfcGNtX3BhZ2UsCit9OworCitzdGF0aWMgaW50IGdvNzAwN19zbmRfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKworCWtmcmVlKGdvLT5zbmRfY29udGV4dCk7CisJZ28tPnNuZF9jb250ZXh0ID0gTlVMTDsKKwlpZiAoLS1nby0+cmVmX2NvdW50ID09IDApCisJCWtmcmVlKGdvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBnbzcwMDdfc25kX2RldmljZV9vcHMgPSB7CisJLmRldl9mcmVlCT0gZ283MDA3X3NuZF9mcmVlLAorfTsKKworaW50IGdvNzAwN19zbmRfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdGF0aWMgaW50IGRldjsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWVuYWJsZVtkZXZdKSB7CisJCWRldisrOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJZ29zbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ283MDA3X3NuZCksIEdGUF9LRVJORUwpOworCWlmIChnb3NuZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmZ29zbmQtPmxvY2spOworCWdvc25kLT5od19wdHIgPSBnb3NuZC0+d19pZHggPSBnb3NuZC0+YXZhaWwgPSAwOworCWdvc25kLT5jYXB0dXJpbmcgPSAwOworCWdvc25kLT5jYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKwlpZiAoZ29zbmQtPmNhcmQgPT0gTlVMTCkgeworCQlrZnJlZShnb3NuZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXQgPSBzbmRfZGV2aWNlX25ldyhnb3NuZC0+Y2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBnbywKKwkJCSZnbzcwMDdfc25kX2RldmljZV9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKGdvc25kKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc25kX2NhcmRfc2V0X2Rldihnb3NuZC0+Y2FyZCwgZ28tPmRldik7CisJcmV0ID0gc25kX3BjbV9uZXcoZ29zbmQtPmNhcmQsICJnbzcwMDciLCAwLCAwLCAxLCAmZ29zbmQtPnBjbSk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShnb3NuZC0+Y2FyZCk7CisJCWtmcmVlKGdvc25kKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3RybmNweShnb3NuZC0+Y2FyZC0+ZHJpdmVyLCAiZ283MDA3Iiwgc2l6ZW9mKGdvc25kLT5jYXJkLT5kcml2ZXIpKTsKKwlzdHJuY3B5KGdvc25kLT5jYXJkLT5zaG9ydG5hbWUsIGdvLT5uYW1lLCBzaXplb2YoZ29zbmQtPmNhcmQtPmRyaXZlcikpOworCXN0cm5jcHkoZ29zbmQtPmNhcmQtPmxvbmduYW1lLCBnb3NuZC0+Y2FyZC0+c2hvcnRuYW1lLAorCQkJc2l6ZW9mKGdvc25kLT5jYXJkLT5sb25nbmFtZSkpOworCisJZ29zbmQtPnBjbS0+cHJpdmF0ZV9kYXRhID0gZ287CisJc25kX3BjbV9zZXRfb3BzKGdvc25kLT5wY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCSZnbzcwMDdfc25kX2NhcHR1cmVfb3BzKTsKKworCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGdvc25kLT5jYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGdvc25kLT5jYXJkKTsKKwkJa2ZyZWUoZ29zbmQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdvc25kLT5zdWJzdHJlYW0gPSBOVUxMOworCWdvLT5zbmRfY29udGV4dCA9IGdvc25kOworCSsrZGV2OworCSsrZ28tPnJlZl9jb3VudDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfc25kX2luaXQpOworCitpbnQgZ283MDA3X3NuZF9yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCisJc25kX2NhcmRfZGlzY29ubmVjdChnb3NuZC0+Y2FyZCk7CisJc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChnb3NuZC0+Y2FyZCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19zbmRfcmVtb3ZlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtaTJjLmggYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTNmNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtaTJjLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogVGVtcG9yYXJ5IEkyQyBJRHMgLS0gdGhlc2UgbmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIHJlYWwgcmVnaXN0ZXJlZCBJRHMgKi8KKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19TQUE3MTE1CTB4ZjBmMAorI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1VEQTEzNDIJMHhmMGYxCisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfU09OWV9UVU5FUgkweGYwZjIKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19UVzk5MDMJCTB4ZjBmMworI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTMJMHhmMGY0CisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfT1Y3NjQwCQkweGYwZjUKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19UVzI4MDQJCTB4ZjBmNgorI2RlZmluZQlJMkNfQUxHT19HTzcwMDcJCQkweGYwMDAwMAorI2RlZmluZQlJMkNfQUxHT19HTzcwMDdfVVNCCQkweGYxMDAwMAorCisvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIGNsaWVudCBuZWVkcyB0byBiZSBhY2Nlc3NlZCB3aXRoIFNDQ0Igc2VtYW50aWNzICovCisvKiBXZSByZS11c2UgdGhlIEkyQ19NX1RFTiB2YWx1ZSBzbyB0aGUgZmxhZyBwYXNzZXMgdGhyb3VnaCB0aGUgbWFza3MgaW4gdGhlCisgKiBjb3JlIEkyQyBjb2RlLiAgTWFqb3Iga2x1ZGdlLCBidXQgdGhlIEkyQyBsYXllciBhaW4ndCBleGFjdGx5IGZsZXhpYmxlLiAqLworI2RlZmluZQlJMkNfQ0xJRU5UX1NDQ0IJCQkweDEwCisKK3R5cGVkZWYgaW50ICgqZm91bmRfcHJvYykgKHN0cnVjdCBpMmNfYWRhcHRlciAqLCBpbnQsIGludCk7CitpbnQgd2lzX2kyY19hZGRfZHJpdmVyKHVuc2lnbmVkIGludCBpZCwgZm91bmRfcHJvYyBmb3VuZF9wcm9jKTsKK3ZvaWQgd2lzX2kyY19kZWxfZHJpdmVyKGZvdW5kX3Byb2MgZm91bmRfcHJvYyk7CisKK2ludCB3aXNfaTJjX3Byb2JlX2RldmljZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJdW5zaWduZWQgaW50IGlkLCBpbnQgYWRkcik7CisKKy8qIERlZmluaXRpb25zIGZvciBuZXcgdmlkZW8gZGVjb2RlciBjb21tYW5kcyAqLworCitzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uIHsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKK307CisKKyNkZWZpbmUJREVDT0RFUl9TRVRfUkVTT0xVVElPTglfSU9XKCdkJywgMjAwLCBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uKQorI2RlZmluZQlERUNPREVSX1NFVF9DSEFOTkVMCV9JT1coJ2QnLCAyMDEsIGludCkKKworLyogU29ueSB0dW5lciB0eXBlcyAqLworCisjZGVmaW5lIFRVTkVSX1NPTllfQlRGX1BHNDcyWgkJMjAwCisjZGVmaW5lIFRVTkVSX1NPTllfQlRGX1BLNDY3WgkJMjAxCisjZGVmaW5lIFRVTkVSX1NPTllfQlRGX1BCNDYzWgkJMjAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLW92NzY0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOWVmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RydWN0IHdpc19vdjc2NDAgeworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgc2F0dXJhdGlvbjsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGluaXRpYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MTIsIDB4ODAsCisJMHgxMiwgMHg1NCwKKwkweDE0LCAweDI0LAorCTB4MTUsIDB4MDEsCisJMHgyOCwgMHgyMCwKKwkweDc1LCAweDgyLAorCTB4RkYsIDB4RkYsIC8qIFRlcm1pbmF0b3IgKHJlZyAweEZGIGlzIHVudXNlZCkgKi8KK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHhGRjsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3NbaV0sIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfb3Y3NjQwX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc19vdjc2NDBfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJPVjc2NDAgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc19vdjc2NDBfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfb3Y3NjQwX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX292NzY0MF9jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX292NzY0MF9jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisJY2xpZW50LT5mbGFncyA9IEkyQ19DTElFTlRfU0NDQjsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtb3Y3NjQwOiBpbml0aWFsaXppbmcgT1Y3NjQwIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaWYgKHdyaXRlX3JlZ3MoY2xpZW50LCBpbml0aWFsX3JlZ2lzdGVycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid2lzLW92NzY0MDogZXJyb3IgaW5pdGlhbGl6aW5nIE9WNzY0MFxuIik7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAwOworCX0KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX292NzY0MF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX292NzY0MF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIE9WNzY0MCBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX09WNzY0MCwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc19vdjc2NDBfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX292NzY0MF9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc19vdjc2NDBfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX292NzY0MF9kcml2ZXIuaWQsIHdpc19vdjc2NDBfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc19vdjc2NDBfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfb3Y3NjQwX2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc19vdjc2NDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX292NzY0MF9pbml0KTsKK21vZHVsZV9leGl0KHdpc19vdjc2NDBfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTY4OTcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExMy5jCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0cnVjdCB3aXNfc2FhNzExMyB7CisJaW50IG5vcm07CisJaW50IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBzYXR1cmF0aW9uOworCWludCBodWU7Cit9OworCitzdGF0aWMgdTggaW5pdGlhbF9yZWdpc3RlcnNbXSA9Cit7CisJMHgwMSwgMHgwOCwKKwkweDAyLCAweGMwLAorCTB4MDMsIDB4MzMsCisJMHgwNCwgMHgwMCwKKwkweDA1LCAweDAwLAorCTB4MDYsIDB4ZTksCisJMHgwNywgMHgwZCwKKwkweDA4LCAweGQ4LAorCTB4MDksIDB4NDAsCisJMHgwYSwgMHg4MCwKKwkweDBiLCAweDQ3LAorCTB4MGMsIDB4NDAsCisJMHgwZCwgMHgwMCwKKwkweDBlLCAweDAxLAorCTB4MGYsIDB4MmEsCisJMHgxMCwgMHg0MCwKKwkweDExLCAweDBjLAorCTB4MTIsIDB4ZmUsCisJMHgxMywgMHgwMCwKKwkweDE0LCAweDAwLAorCTB4MTUsIDB4MDQsCisJMHgxNiwgMHgwMCwKKwkweDE3LCAweDAwLAorCTB4MTgsIDB4MDAsCisJMHgxOSwgMHgwMCwKKwkweDFhLCAweDAwLAorCTB4MWIsIDB4MDAsCisJMHgxYywgMHgwMCwKKwkweDFkLCAweDAwLAorCTB4MWUsIDB4MDAsCisJMHgxZiwgMHhjOCwKKwkweDQwLCAweDAwLAorCTB4NDEsIDB4ZmYsCisJMHg0MiwgMHhmZiwKKwkweDQzLCAweGZmLAorCTB4NDQsIDB4ZmYsCisJMHg0NSwgMHhmZiwKKwkweDQ2LCAweGZmLAorCTB4NDcsIDB4ZmYsCisJMHg0OCwgMHhmZiwKKwkweDQ5LCAweGZmLAorCTB4NGEsIDB4ZmYsCisJMHg0YiwgMHhmZiwKKwkweDRjLCAweGZmLAorCTB4NGQsIDB4ZmYsCisJMHg0ZSwgMHhmZiwKKwkweDRmLCAweGZmLAorCTB4NTAsIDB4ZmYsCisJMHg1MSwgMHhmZiwKKwkweDUyLCAweGZmLAorCTB4NTMsIDB4ZmYsCisJMHg1NCwgMHhmZiwKKwkweDU1LCAweGZmLAorCTB4NTYsIDB4ZmYsCisJMHg1NywgMHhmZiwKKwkweDU4LCAweDAwLAorCTB4NTksIDB4NTQsCisJMHg1YSwgMHgwNywKKwkweDViLCAweDgzLAorCTB4NWMsIDB4MDAsCisJMHg1ZCwgMHgwMCwKKwkweDVlLCAweDAwLAorCTB4NWYsIDB4MDAsCisJMHg2MCwgMHgwMCwKKwkweDYxLCAweDAwLAorCTB4MDAsIDB4MDAsIC8qIFRlcm1pbmF0b3IgKHJlZyAweDAwIGlzIHJlYWQtb25seSkgKi8KK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpyZWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgcmVnc1tpXSAhPSAweDAwOyBpICs9IDIpCisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnc1tpXSwgcmVnc1tpICsgMV0pIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfc2FhNzExM19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3aXNfc2FhNzExMyAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDAyLCAweEMwIHwgKmlucHV0KTsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDksCisJCQkJKmlucHV0IDwgNiA/IDB4NDAgOiAweDgwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKmlucHV0ID0gYXJnOworCQlkZWMtPm5vcm0gPSAqaW5wdXQ7CisJCWlmIChkZWMtPm5vcm0gJiBWNEwyX1NURF9OVFNDKSB7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBlLCAweDAxKTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTAsIDB4NDApOworCQl9IGVsc2UgaWYgKGRlYy0+bm9ybSAmIFY0TDJfU1REX1BBTCkgeworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZSwgMHgwMSk7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEwLCAweDQ4KTsKKwkJfSBlbHNlIGlmIChkZWMtPm5vcm0gKiBWNEwyX1NURF9TRUNBTSkgeworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZSwgMHg1MCk7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEwLCAweDQ4KTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSA3MTsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNjQ7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkh1ZSIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gLTEyODsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAwOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBhLCBkZWMtPmJyaWdodG5lc3MpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5jb250cmFzdCA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBiLCBkZWMtPmNvbnRyYXN0KTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBjLCBkZWMtPnNhdHVyYXRpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+aHVlID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAtMTI4KQorCQkJCWRlYy0+aHVlID0gLTEyODsKKwkJCWVsc2UKKwkJCQlkZWMtPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZCwgZGVjLT5odWUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+YnJpZ2h0bmVzczsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmNvbnRyYXN0OworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5zYXR1cmF0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmh1ZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc2FhNzExM19kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfc2FhNzExM19jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlNBQTcxMTMgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc19zYWE3MTEzX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTNfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdpc19zYWE3MTEzICpkZWM7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfc2FhNzExM19jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3NhYTcxMTNfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJZGVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc19zYWE3MTEzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlYyA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWMtPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCWRlYy0+YnJpZ2h0bmVzcyA9IDEyODsKKwlkZWMtPmNvbnRyYXN0ID0gNzE7CisJZGVjLT5zYXR1cmF0aW9uID0gNjQ7CisJZGVjLT5odWUgPSAwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlYyk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLXNhYTcxMTM6IGluaXRpYWxpemluZyBTQUE3MTEzIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaWYgKHdyaXRlX3JlZ3MoY2xpZW50LCBpbml0aWFsX3JlZ2lzdGVycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIndpcy1zYWE3MTEzOiBlcnJvciBpbml0aWFsaXppbmcgU0FBNzExM1xuIik7CisJCWtmcmVlKGNsaWVudCk7CisJCWtmcmVlKGRlYyk7CisJCXJldHVybiAwOworCX0KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc19zYWE3MTEzICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCWtmcmVlKGRlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc2FhNzExM19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFNBQTcxMTMgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19TQUE3MTEzLAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3NhYTcxMTNfZGV0YWNoLAorCS5jb21tYW5kCT0gd2lzX3NhYTcxMTNfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc19zYWE3MTEzX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3NhYTcxMTNfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3NhYTcxMTNfZHJpdmVyLmlkLCB3aXNfc2FhNzExM19kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3NhYTcxMTNfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfc2FhNzExM19kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfc2FhNzExM19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfc2FhNzExM19pbml0KTsKK21vZHVsZV9leGl0KHdpc19zYWE3MTEzX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTE1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0MTdhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTUuYwpAQCAtMCwwICsxLDQ5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdHJ1Y3Qgd2lzX3NhYTcxMTUgeworCWludCBub3JtOworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgc2F0dXJhdGlvbjsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGluaXRpYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MDEsIDB4MDgsCisJMHgwMiwgMHhjMCwKKwkweDAzLCAweDIwLAorCTB4MDQsIDB4ODAsCisJMHgwNSwgMHg4MCwKKwkweDA2LCAweGViLAorCTB4MDcsIDB4ZTAsCisJMHgwOCwgMHhmMCwJLyogYWx3YXlzIHRvZ2dsZSBGSUQgKi8KKwkweDA5LCAweDQwLAorCTB4MGEsIDB4ODAsCisJMHgwYiwgMHg0MCwKKwkweDBjLCAweDQwLAorCTB4MGQsIDB4MDAsCisJMHgwZSwgMHgwMywKKwkweDBmLCAweDJhLAorCTB4MTAsIDB4MGUsCisJMHgxMSwgMHgwMCwKKwkweDEyLCAweDhkLAorCTB4MTMsIDB4MDAsCisJMHgxNCwgMHgwMCwKKwkweDE1LCAweDExLAorCTB4MTYsIDB4MDEsCisJMHgxNywgMHhkYSwKKwkweDE4LCAweDQwLAorCTB4MTksIDB4ODAsCisJMHgxYSwgMHgwMCwKKwkweDFiLCAweDQyLAorCTB4MWMsIDB4YTksCisJMHgzMCwgMHg2NiwKKwkweDMxLCAweDkwLAorCTB4MzIsIDB4MDEsCisJMHgzNCwgMHgwMCwKKwkweDM1LCAweDAwLAorCTB4MzYsIDB4MjAsCisJMHgzOCwgMHgwMywKKwkweDM5LCAweDIwLAorCTB4M2EsIDB4ODgsCisJMHg0MCwgMHgwMCwKKwkweDQxLCAweGZmLAorCTB4NDIsIDB4ZmYsCisJMHg0MywgMHhmZiwKKwkweDQ0LCAweGZmLAorCTB4NDUsIDB4ZmYsCisJMHg0NiwgMHhmZiwKKwkweDQ3LCAweGZmLAorCTB4NDgsIDB4ZmYsCisJMHg0OSwgMHhmZiwKKwkweDRhLCAweGZmLAorCTB4NGIsIDB4ZmYsCisJMHg0YywgMHhmZiwKKwkweDRkLCAweGZmLAorCTB4NGUsIDB4ZmYsCisJMHg0ZiwgMHhmZiwKKwkweDUwLCAweGZmLAorCTB4NTEsIDB4ZmYsCisJMHg1MiwgMHhmZiwKKwkweDUzLCAweGZmLAorCTB4NTQsIDB4ZjQgLyoweGZmKi8sCisJMHg1NSwgMHhmZiwKKwkweDU2LCAweGZmLAorCTB4NTcsIDB4ZmYsCisJMHg1OCwgMHg0MCwKKwkweDU5LCAweDQ3LAorCTB4NWEsIDB4MDYgLyoweDAzKi8sCisJMHg1YiwgMHg4MywKKwkweDVkLCAweDA2LAorCTB4NWUsIDB4MDAsCisJMHg4MCwgMHgzMCwgLyogd2luZG93IGRlZmluZWQgc2NhbGVyIG9wZXJhdGlvbiwgdGFzayBBIGFuZCBCIGVuYWJsZWQgKi8KKwkweDgxLCAweDAzLCAvKiB1c2Ugc2NhbGVyIGRhdGFwYXRoIGdlbmVyYXRlZCBWICovCisJMHg4MywgMHgwMCwKKwkweDg0LCAweDAwLAorCTB4ODUsIDB4MDAsCisJMHg4NiwgMHg0NSwKKwkweDg3LCAweDMxLAorCTB4ODgsIDB4YzAsCisJMHg5MCwgMHgwMiwgLyogdGFzayBBIHByb2Nlc3MgdG9wIGZpZWxkICovCisJMHg5MSwgMHgwOCwKKwkweDkyLCAweDA5LAorCTB4OTMsIDB4ODAsCisJMHg5NCwgMHgwNiwKKwkweDk1LCAweDAwLAorCTB4OTYsIDB4YzAsCisJMHg5NywgMHgwMiwKKwkweDk4LCAweDEyLAorCTB4OTksIDB4MDAsCisJMHg5YSwgMHhmMiwKKwkweDliLCAweDAwLAorCTB4OWMsIDB4ZDAsCisJMHg5ZCwgMHgwMiwKKwkweDllLCAweGYyLAorCTB4OWYsIDB4MDAsCisJMHhhMCwgMHgwMSwKKwkweGExLCAweDAxLAorCTB4YTIsIDB4MDEsCisJMHhhNCwgMHg4MCwKKwkweGE1LCAweDQwLAorCTB4YTYsIDB4NDAsCisJMHhhOCwgMHgwMCwKKwkweGE5LCAweDA0LAorCTB4YWEsIDB4MDAsCisJMHhhYywgMHgwMCwKKwkweGFkLCAweDAyLAorCTB4YWUsIDB4MDAsCisJMHhiMCwgMHgwMCwKKwkweGIxLCAweDA0LAorCTB4YjIsIDB4MDAsCisJMHhiMywgMHgwNCwKKwkweGI0LCAweDAwLAorCTB4YjgsIDB4MDAsCisJMHhiYywgMHgwMCwKKwkweGMwLCAweDAzLAkvKiB0YXNrIEIgcHJvY2VzcyBib3R0b20gZmllbGQgKi8KKwkweGMxLCAweDA4LAorCTB4YzIsIDB4MDksCisJMHhjMywgMHg4MCwKKwkweGM0LCAweDA2LAorCTB4YzUsIDB4MDAsCisJMHhjNiwgMHhjMCwKKwkweGM3LCAweDAyLAorCTB4YzgsIDB4MTIsCisJMHhjOSwgMHgwMCwKKwkweGNhLCAweGYyLAorCTB4Y2IsIDB4MDAsCisJMHhjYywgMHhkMCwKKwkweGNkLCAweDAyLAorCTB4Y2UsIDB4ZjIsCisJMHhjZiwgMHgwMCwKKwkweGQwLCAweDAxLAorCTB4ZDEsIDB4MDEsCisJMHhkMiwgMHgwMSwKKwkweGQ0LCAweDgwLAorCTB4ZDUsIDB4NDAsCisJMHhkNiwgMHg0MCwKKwkweGQ4LCAweDAwLAorCTB4ZDksIDB4MDQsCisJMHhkYSwgMHgwMCwKKwkweGRjLCAweDAwLAorCTB4ZGQsIDB4MDIsCisJMHhkZSwgMHgwMCwKKwkweGUwLCAweDAwLAorCTB4ZTEsIDB4MDQsCisJMHhlMiwgMHgwMCwKKwkweGUzLCAweDA0LAorCTB4ZTQsIDB4MDAsCisJMHhlOCwgMHgwMCwKKwkweDg4LCAweGYwLCAvKiBFbmQgb2Ygb3JpZ2luYWwgc3RhdGljIGxpc3QgKi8KKwkweDAwLCAweDAwLCAvKiBUZXJtaW5hdG9yIChyZWcgMHgwMCBpcyByZWFkLW9ubHkpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHgwMDsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3NbaV0sIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgd2lzX3NhYTcxMTUgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMiwgMHhDMCB8ICppbnB1dCk7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDA5LAorCQkJCSppbnB1dCA8IDYgPyAweDQwIDogMHhDMCk7CisJCWJyZWFrOworCX0KKwljYXNlIERFQ09ERVJfU0VUX1JFU09MVVRJT046CisJeworCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uICpyZXMgPSBhcmc7CisJCS8qIENvdXJzZS1ncmFpbmVkIHNjYWxlciAqLworCQlpbnQgaF9pbnRlZ2VyX3NjYWxlciA9IHJlcy0+d2lkdGggPCA3MDQgPyA3MDQgLyByZXMtPndpZHRoIDogMTsKKwkJLyogRmluZS1ncmFpbmVkIHNjYWxlciB0byB0YWtlIGNhcmUgb2YgcmVtYWluZGVyICovCisJCWludCBoX3NjYWxpbmdfaW5jcmVtZW50ID0gKDcwNCAvIGhfaW50ZWdlcl9zY2FsZXIpICoKKwkJCQkJMTAyNCAvIHJlcy0+d2lkdGg7CisJCS8qIEZpbmUtZ3JhaW5lZCBzY2FsZXIgb25seSAqLworCQlpbnQgdl9zY2FsaW5nX2luY3JlbWVudCA9IChkZWMtPm5vcm0gJiBWNEwyX1NURF9OVFNDID8KKwkJCQkyNDAgOiAyODgpICogMTAyNCAvIHJlcy0+aGVpZ2h0OworCQl1OCByZWdzW10gPSB7CisJCQkweDg4LAkweGMwLAorCQkJMHg5YywJcmVzLT53aWR0aCAmIDB4ZmYsCisJCQkweDlkLAlyZXMtPndpZHRoID4+IDgsCisJCQkweDllLAlyZXMtPmhlaWdodCAmIDB4ZmYsCisJCQkweDlmLAlyZXMtPmhlaWdodCA+PiA4LAorCQkJMHhhMCwJaF9pbnRlZ2VyX3NjYWxlciwKKwkJCTB4YTEsCTEsCisJCQkweGEyLAkxLAorCQkJMHhhOCwJaF9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGE5LAloX3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGFjLAkoaF9zY2FsaW5nX2luY3JlbWVudCAvIDIpICYgMHhmZiwKKwkJCTB4YWQsCShoX3NjYWxpbmdfaW5jcmVtZW50IC8gMikgPj4gOCwKKwkJCTB4YjAsCXZfc2NhbGluZ19pbmNyZW1lbnQgJiAweGZmLAorCQkJMHhiMSwJdl9zY2FsaW5nX2luY3JlbWVudCA+PiA4LAorCQkJMHhiMiwJdl9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGIzLAl2X3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGNjLAlyZXMtPndpZHRoICYgMHhmZiwKKwkJCTB4Y2QsCXJlcy0+d2lkdGggPj4gOCwKKwkJCTB4Y2UsCXJlcy0+aGVpZ2h0ICYgMHhmZiwKKwkJCTB4Y2YsCXJlcy0+aGVpZ2h0ID4+IDgsCisJCQkweGQwLAloX2ludGVnZXJfc2NhbGVyLAorCQkJMHhkMSwJMSwKKwkJCTB4ZDIsCTEsCisJCQkweGQ4LAloX3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4ZDksCWhfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4ZGMsCShoX3NjYWxpbmdfaW5jcmVtZW50IC8gMikgJiAweGZmLAorCQkJMHhkZCwJKGhfc2NhbGluZ19pbmNyZW1lbnQgLyAyKSA+PiA4LAorCQkJMHhlMCwJdl9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGUxLAl2X3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGUyLAl2X3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4ZTMsCXZfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4ODgsCTB4ZjAsCisJCQkwLAkwLAorCQl9OworCQl3cml0ZV9yZWdzKGNsaWVudCwgcmVncyk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppbnB1dCA9IGFyZzsKKwkJdTggcmVnc1tdID0geworCQkJMHg4OCwJMHhjMCwKKwkJCTB4OTgsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDEyIDogMHgxNiwKKwkJCTB4OWEsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYyIDogMHgyMCwKKwkJCTB4OWIsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHgwMSwKKwkJCTB4YzgsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDEyIDogMHgxNiwKKwkJCTB4Y2EsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYyIDogMHgyMCwKKwkJCTB4Y2IsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHgwMSwKKwkJCTB4ODgsCTB4ZjAsCisJCQkweDMwLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHg2NiA6IDB4MDAsCisJCQkweDMxLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHg5MCA6IDB4ZTAsCisJCQkwLAkwLAorCQl9OworCQl3cml0ZV9yZWdzKGNsaWVudCwgcmVncyk7CisJCWRlYy0+bm9ybSA9ICppbnB1dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQnJpZ2h0bmVzcyIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAxMjg7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQ29udHJhc3QiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNjQ7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDY0OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IC0xMjg7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYSwgZGVjLT5icmlnaHRuZXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+Y29udHJhc3QgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5jb250cmFzdCA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYiwgZGVjLT5jb250cmFzdCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAwOworCQkJZWxzZQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYywgZGVjLT5zYXR1cmF0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmh1ZSA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCkKKwkJCQlkZWMtPmh1ZSA9IC0xMjg7CisJCQllbHNlCisJCQkJZGVjLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGQsIGRlYy0+aHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmJyaWdodG5lc3M7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5jb250cmFzdDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+c2F0dXJhdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5odWU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NhYTcxMTVfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3NhYTcxMTVfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJTQUE3MTE1IChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfc2FhNzExNV9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc19zYWE3MTE1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3aXNfc2FhNzExNSAqZGVjOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3NhYTcxMTVfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc19zYWE3MTE1X2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCWRlYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfc2FhNzExNSksIEdGUF9LRVJORUwpOworCWlmIChkZWMgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGVjLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwlkZWMtPmJyaWdodG5lc3MgPSAxMjg7CisJZGVjLT5jb250cmFzdCA9IDY0OworCWRlYy0+c2F0dXJhdGlvbiA9IDY0OworCWRlYy0+aHVlID0gMDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWMpOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIndpcy1zYWE3MTE1OiBpbml0aWFsaXppbmcgU0FBNzExNSBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgaW5pdGlhbF9yZWdpc3RlcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJ3aXMtc2FhNzExNTogZXJyb3IgaW5pdGlhbGl6aW5nIFNBQTcxMTVcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlrZnJlZShkZWMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19zYWE3MTE1X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfc2FhNzExNSAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUoY2xpZW50KTsKKwlrZnJlZShkZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NhYTcxMTVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBTQUE3MTE1IEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfU0FBNzExNSwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc19zYWE3MTE1X2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc19zYWE3MTE1X2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfc2FhNzExNV9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc19zYWE3MTE1X2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc19zYWE3MTE1X2RyaXZlci5pZCwgd2lzX3NhYTcxMTVfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc19zYWE3MTE1X2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3NhYTcxMTVfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3NhYTcxMTVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3NhYTcxMTVfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfc2FhNzExNV9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc29ueS10dW5lci5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc29ueS10dW5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOTFlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zb255LXR1bmVyLmMKQEAgLTAsMCArMSw3NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworLyogI2RlZmluZSBNUFhfREVCVUcgKi8KKworLyogQVMoSUYvTVBYKSBwaW46ICAgICAgTE9XICAgICAgSElHSC9PUEVOCisgKiBJRi9NUFggYWRkcmVzczogICAweDQyLzB4NDAgICAweDQzLzB4NDQKKyAqLworI2RlZmluZSBJRl9JMkNfQUREUgkweDQzCisjZGVmaW5lIE1QWF9JMkNfQUREUgkweDQ0CisKK3N0YXRpYyB2NGwyX3N0ZF9pZCBmb3JjZV9iYW5kOworc3RhdGljIGNoYXIgZm9yY2VfYmFuZF9zdHJbXSA9ICItIjsKK21vZHVsZV9wYXJhbV9zdHJpbmcoZm9yY2VfYmFuZCwgZm9yY2VfYmFuZF9zdHIsIHNpemVvZihmb3JjZV9iYW5kX3N0ciksIDA2NDQpOworc3RhdGljIGludCBmb3JjZV9tcHhfbW9kZSA9IC0xOworbW9kdWxlX3BhcmFtKGZvcmNlX21weF9tb2RlLCBpbnQsIDA2NDQpOworCisvKiBTdG9yZSB0dW5lciBpbmZvIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0dW5lci5jLCBzbyBtYXliZSB3ZSBjYW4gcHV0IHRoZQorICogU29ueSB0dW5lciBzdXBwb3J0IGluIHRoZXJlLiAqLworc3RydWN0IHNvbnlfdHVuZXJ0eXBlIHsKKwljaGFyICpuYW1lOworCXVuc2lnbmVkIGNoYXIgVmVuZG9yOyAvKiB1bnVzZWQgaGVyZSAqLworCXVuc2lnbmVkIGNoYXIgVHlwZTsgLyogdW51c2VkIGhlcmUgKi8KKworCXVuc2lnbmVkIHNob3J0IHRocmVzaDE7IC8qICBiYW5kIHN3aXRjaCBWSEZfTE8gPD0+IFZIRl9ISSAqLworCXVuc2lnbmVkIHNob3J0IHRocmVzaDI7IC8qICBiYW5kIHN3aXRjaCBWSEZfSEkgPD0+IFVIRiAqLworCXVuc2lnbmVkIGNoYXIgVkhGX0w7CisJdW5zaWduZWQgY2hhciBWSEZfSDsKKwl1bnNpZ25lZCBjaGFyIFVIRjsKKwl1bnNpZ25lZCBjaGFyIGNvbmZpZzsKKwl1bnNpZ25lZCBzaG9ydCBJRlBDb2ZmOworfTsKKworLyogVGhpcyBhcnJheSBpcyBpbmRleGVkIGJ5ICh0dW5lcl90eXBlIC0gMjAwKSAqLworc3RhdGljIHN0cnVjdCBzb255X3R1bmVydHlwZSBzb255X3R1bmVyc1tdID0geworCXsgIlNvbnkgUEFMK1NFQ0FNIChCVEYtUEc0NzJaKSIsIDAsIDAsCisJICAxNioxNDQuMjUsIDE2KjQyNy4yNSwgMHgwMSwgMHgwMiwgMHgwNCwgMHhjNiwgNjIzfSwKKwl7ICJTb255IE5UU0NfSlAgKEJURi1QSzQ2N1opIiwgMCwgMCwKKwkgIDE2KjIyMC4yNSwgMTYqNDY3LjI1LCAweDAxLCAweDAyLCAweDA0LCAweGM2LCA5NDB9LAorCXsgIlNvbnkgTlRTQyAoQlRGLVBCNDYzWikiLCAwLCAwLAorCSAgMTYqMTMwLjI1LCAxNiozNjQuMjUsIDB4MDEsIDB4MDIsIDB4MDQsIDB4YzYsIDczMn0sCit9OworCitzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgeworCWludCB0eXBlOworCXY0bDJfc3RkX2lkIHN0ZDsKKwl1bnNpZ25lZCBpbnQgZnJlcTsKKwlpbnQgbXB4bW9kZTsKKwl1MzIgYXVkbW9kZTsKK307CisKKy8qIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBkZWZhdWx0X3NldF90dl9mcmVxKCkgaW4gdHVuZXIuYyAqLworc3RhdGljIGludCBzZXRfZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZnJlcSkKK3sKKwlzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwljaGFyICpiYW5kX25hbWU7CisJaW50IG47CisJaW50IGJhbmRfc2VsZWN0OworCXN0cnVjdCBzb255X3R1bmVydHlwZSAqdHVuOworCXU4IGJ1ZmZlcls0XTsKKworCXR1biA9ICZzb255X3R1bmVyc1t0LT50eXBlIC0gMjAwXTsKKwlpZiAoZnJlcSA8IHR1bi0+dGhyZXNoMSkgeworCQliYW5kX25hbWUgPSAiVkhGX0wiOworCQliYW5kX3NlbGVjdCA9IHR1bi0+VkhGX0w7CisJfSBlbHNlIGlmIChmcmVxIDwgdHVuLT50aHJlc2gyKSB7CisJCWJhbmRfbmFtZSA9ICJWSEZfSCI7CisJCWJhbmRfc2VsZWN0ID0gdHVuLT5WSEZfSDsKKwl9IGVsc2UgeworCQliYW5kX25hbWUgPSAiVUhGIjsKKwkJYmFuZF9zZWxlY3QgPSB0dW4tPlVIRjsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIndpcy1zb255LXR1bmVyOiB0dW5pbmcgdG8gZnJlcXVlbmN5ICVkLiUwNGQgKCVzKVxuIiwKKwkJCWZyZXEgLyAxNiwgKGZyZXEgJSAxNikgKiA2MjUsIGJhbmRfbmFtZSk7CisJbiA9IGZyZXEgKyB0dW4tPklGUENvZmY7CisKKwlidWZmZXJbMF0gPSBuID4+IDg7CisJYnVmZmVyWzFdID0gbiAmIDB4ZmY7CisJYnVmZmVyWzJdID0gdHVuLT5jb25maWc7CisJYnVmZmVyWzNdID0gYmFuZF9zZWxlY3Q7CisJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyLCA0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1weF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZGV2LCBpbnQgYWRkciwgaW50IHZhbCkKK3sKKwl1OCBidWZmZXJbNV07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJYnVmZmVyWzBdID0gZGV2OworCWJ1ZmZlclsxXSA9IGFkZHIgPj4gODsKKwlidWZmZXJbMl0gPSBhZGRyICYgMHhmZjsKKwlidWZmZXJbM10gPSB2YWwgPj4gODsKKwlidWZmZXJbNF0gPSB2YWwgJiAweGZmOworCW1zZy5hZGRyID0gTVBYX0kyQ19BRERSOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IDU7CisJbXNnLmJ1ZiA9IGJ1ZmZlcjsKKwlpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE1QWCByZWdpc3RlciB2YWx1ZXMgZm9yIHRoZSBCVEYtUEc0NzJaOgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1fICAgICBOSUNBTV8gIFNDQVJUXworICogICAgICAgICAgTU9EVVMgIFNPVVJDRSAgICBBQ0IgICBQUkVTQ0FMIFBSRVNDQUwgUFJFU0NBTCBTWVNURU0gIFZPTFVNRQorICogICAgICAgICAxMC8wMDMwIDEyLzAwMDggMTIvMDAxMyAxMi8wMDBFIDEyLzAwMTAgMTIvMDAwMCAxMC8wMDIwIDEyLzAwMDAKKyAqICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBdXRvICAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAzICAgIDUwMDAgICAgWFhYWCAgICAwMDAxICAgIDc1MDAKKyAqCisgKiBCL0cKKyAqICBNb25vICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDMgICAgNTAwMCAgICBYWFhYICAgIDAwMDMgICAgNzUwMAorICogIEEyICAgICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMSAgICA1MDAwICAgIFhYWFggICAgMDAwMyAgICA3NTAwCisgKiAgTklDQU0gICAxMDAzICAgIDAxMjAgICAgMDEwMCAgICAyNjAzICAgIDUwMDAgICAgWFhYWCAgICAwMDA4ICAgIDc1MDAKKyAqCisgKiBJCisgKiAgTW9ubyAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAzICAgIDc5MDAgICAgWFhYWCAgICAwMDBBICAgIDc1MDAKKyAqICBOSUNBTSAgIDEwMDMgICAgMDEyMCAgICAwMTAwICAgIDI2MDMgICAgNzkwMCAgICBYWFhYICAgIDAwMEEgICAgNzUwMAorICoKKyAqIEQvSworICogIE1vbm8gICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMyAgICA1MDAwICAgIFhYWFggICAgMDAwNCAgICA3NTAwCisgKiAgQTItMSAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAxICAgIDUwMDAgICAgWFhYWCAgICAwMDA0ICAgIDc1MDAKKyAqICBBMi0yICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDEgICAgNTAwMCAgICBYWFhYICAgIDAwMDUgICAgNzUwMAorICogIEEyLTMgICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMSAgICA1MDAwICAgIFhYWFggICAgMDAwNyAgICA3NTAwCisgKiAgTklDQU0gICAxMDAzICAgIDAxMjAgICAgMDEwMCAgICAyNjAzICAgIDUwMDAgICAgWFhYWCAgICAwMDBCICAgIDc1MDAKKyAqCisgKiBML0wnCisgKiAgTW9ubyAgICAwMDAzICAgIDAyMDAgICAgMDEwMCAgICA3QzAzICAgIDUwMDAgICAgMjIwMCAgICAwMDA5ICAgIDc1MDAKKyAqICBOSUNBTSAgIDAwMDMgICAgMDEyMCAgICAwMTAwICAgIDdDMDMgICAgNTAwMCAgICBYWFhYICAgIDAwMDkgICAgNzUwMAorICoKKyAqIE0KKyAqICBNb25vICAgIDEwMDMgICAgMDIwMCAgICAwMTAwICAgIDJCMDMgICAgNTAwMCAgICAyQjAwICAgIDAwMDIgICAgNzUwMAorICoKKyAqIEZvciBBc2lhLCByZXBsYWNlIHRoZSAweDI2WFggaW4gRk1fUFJFU0NBTEUgd2l0aCAweDE0WFguCisgKgorICogQmlsaW5ndWFsIHNlbGVjdGlvbiBpbiBBMi9OSUNBTToKKyAqCisgKiAgICAgICAgIEhpZ2ggYnl0ZSBvZiBTT1VSQ0UgICAgIExlZnQgY2hhbiAgIFJpZ2h0IGNoYW4KKyAqICAgICAgICAgICAgICAgICAweDAxICAgICAgICAgICAgICBNQUlOICAgICAgICAgU1VCCisgKiAgICAgICAgICAgICAgICAgMHgwMyAgICAgICAgICAgICAgTUFJTiAgICAgICAgIE1BSU4KKyAqICAgICAgICAgICAgICAgICAweDA0ICAgICAgICAgICAgICBTVUIgICAgICAgICAgU1VCCisgKgorICogRm9yY2UgbW9ubyBpbiBOSUNBTSBieSBzZXR0aW5nIHRoZSBoaWdoIGJ5dGUgb2YgU09VUkNFIHRvIDB4MDIgKEwvTCcpIG9yCisgKiAweDAwIChhbGwgb3RoZXIgYmFuZHMpLiAgRm9yY2UgbW9ubyBpbiBBMiB3aXRoIEZNT05PX0EyOgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgIEZNT05PX0EyCisgKiAgICAgICAgICAgICAgICAgICAgICAxMC8wMDIyCisgKiAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLQorICogICAgIEZvcmNlZCBtb25vIE9OICAgICAwN0YwCisgKiAgICAgRm9yY2VkIG1vbm8gT0ZGICAgIDAxOTAKKyAqLworCitzdGF0aWMgc3RydWN0IHsKKwllbnVtIHsgQVVEX01PTk8sIEFVRF9BMiwgQVVEX05JQ0FNLCBBVURfTklDQU1fTCB9IGF1ZGlvX21vZGU7CisJdTE2IG1vZHVzOworCXUxNiBzb3VyY2U7CisJdTE2IGFjYjsKKwl1MTYgZm1fcHJlc2NhbGU7CisJdTE2IG5pY2FtX3ByZXNjYWxlOworCXUxNiBzY2FydF9wcmVzY2FsZTsKKwl1MTYgc3lzdGVtOworCXUxNiB2b2x1bWU7Cit9IG1weF9hdWRpb19tb2Rlc1tdID0geworCS8qIEF1dG8gKi8JeyBBVURfTU9OTywJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAzLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDAxLCAweDc1MDAgfSwKKwkvKiBCL0cgTW9ubyAqLwl7IEFVRF9NT05PLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDMsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDMsIDB4NzUwMCB9LAorCS8qIEIvRyBBMiAqLwl7IEFVRF9BMiwJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAxLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDAzLCAweDc1MDAgfSwKKwkvKiBCL0cgTklDQU0gKi8geyBBVURfTklDQU0sCTB4MTAwMywgMHgwMTIwLCAweDAxMDAsIDB4MjYwMywKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwOCwgMHg3NTAwIH0sCisJLyogSSBNb25vICovCXsgQVVEX01PTk8sCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMywKKwkJCQkJMHg3OTAwLCAweDAwMDAsIDB4MDAwQSwgMHg3NTAwIH0sCisJLyogSSBOSUNBTSAqLwl7IEFVRF9OSUNBTSwJMHgxMDAzLCAweDAxMjAsIDB4MDEwMCwgMHgyNjAzLAorCQkJCQkweDc5MDAsIDB4MDAwMCwgMHgwMDBBLCAweDc1MDAgfSwKKwkvKiBEL0sgTW9ubyAqLwl7IEFVRF9NT05PLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDMsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDQsIDB4NzUwMCB9LAorCS8qIEQvSyBBMi0xICovCXsgQVVEX0EyLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDEsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDQsIDB4NzUwMCB9LAorCS8qIEQvSyBBMi0yICovCXsgQVVEX0EyLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDEsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDUsIDB4NzUwMCB9LAorCS8qIEQvSyBBMi0zICovCXsgQVVEX0EyLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDEsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDcsIDB4NzUwMCB9LAorCS8qIEQvSyBOSUNBTSAqLwl7IEFVRF9OSUNBTSwJMHgxMDAzLCAweDAxMjAsIDB4MDEwMCwgMHgyNjAzLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDBCLCAweDc1MDAgfSwKKwkvKiBML0wnIE1vbm8gKi8JeyBBVURfTU9OTywJMHgwMDAzLCAweDAyMDAsIDB4MDEwMCwgMHg3QzAzLAorCQkJCQkweDUwMDAsIDB4MjIwMCwgMHgwMDA5LCAweDc1MDAgfSwKKwkvKiBML0wnIE5JQ0FNICoveyBBVURfTklDQU1fTCwJMHgwMDAzLCAweDAxMjAsIDB4MDEwMCwgMHg3QzAzLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDA5LCAweDc1MDAgfSwKK307CisKKyNkZWZpbmUgTVBYX05VTV9NT0RFUwlBUlJBWV9TSVpFKG1weF9hdWRpb19tb2RlcykKKworc3RhdGljIGludCBtcHhfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1MTYgc291cmNlID0gMDsKKwl1OCBidWZmZXJbM107CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJLyogcmVzZXQgTVBYICovCisJYnVmZmVyWzBdID0gMHgwMDsKKwlidWZmZXJbMV0gPSAweDgwOworCWJ1ZmZlclsyXSA9IDB4MDA7CisJbXNnLmFkZHIgPSBNUFhfSTJDX0FERFI7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gMzsKKwltc2cuYnVmID0gYnVmZmVyOworCWkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2csIDEpOworCWJ1ZmZlclsxXSA9IDB4MDA7CisJaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlpZiAobXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLmF1ZGlvX21vZGUgIT0gQVVEX01PTk8pIHsKKwkJc3dpdGNoICh0LT5hdWRtb2RlKSB7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCQlzd2l0Y2ggKG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5hdWRpb19tb2RlKSB7CisJCQljYXNlIEFVRF9BMjoKKwkJCQlzb3VyY2UgPSBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc291cmNlOworCQkJCWJyZWFrOworCQkJY2FzZSBBVURfTklDQU06CisJCQkJc291cmNlID0gMHgwMDAwOworCQkJCWJyZWFrOworCQkJY2FzZSBBVURfTklDQU1fTDoKKwkJCQlzb3VyY2UgPSAweDAyMDA7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJCXNvdXJjZSA9IG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zb3VyY2U7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCQlzb3VyY2UgPSAweDAzMDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCQlzb3VyY2UgPSAweDA0MDA7CisJCQlicmVhazsKKwkJfQorCQlzb3VyY2UgfD0gbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnNvdXJjZSAmIDB4MDBmZjsKKwl9IGVsc2UKKwkJc291cmNlID0gbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnNvdXJjZTsKKworCW1weF93cml0ZShjbGllbnQsIDB4MTAsIDB4MDAzMCwgbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLm1vZHVzKTsKKwltcHhfd3JpdGUoY2xpZW50LCAweDEyLCAweDAwMDgsIHNvdXJjZSk7CisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMiwgMHgwMDEzLCBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uYWNiKTsKKwltcHhfd3JpdGUoY2xpZW50LCAweDEyLCAweDAwMGUsCisJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uZm1fcHJlc2NhbGUpOworCW1weF93cml0ZShjbGllbnQsIDB4MTIsIDB4MDAxMCwKKwkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5uaWNhbV9wcmVzY2FsZSk7CisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMiwgMHgwMDBkLAorCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnNjYXJ0X3ByZXNjYWxlKTsKKwltcHhfd3JpdGUoY2xpZW50LCAweDEwLCAweDAwMjAsIG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zeXN0ZW0pOworCW1weF93cml0ZShjbGllbnQsIDB4MTIsIDB4MDAwMCwgbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnZvbHVtZSk7CisJaWYgKG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5hdWRpb19tb2RlID09IEFVRF9BMikKKwkJbXB4X3dyaXRlKGNsaWVudCwgMHgxMCwgMHgwMDIyLAorCQkJdC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTU9OTyA/ICAweDA3ZjAgOiAweDAxOTApOworCisjaWZkZWYgTVBYX0RFQlVHCisJeworCQl1OCBidWYxWzNdLCBidWYyWzJdOworCQlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOworCisJCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtc29ueS10dW5lcjogTVBYIHJlZ2lzdGVyczogJTA0eCAlMDR4ICIKKwkJCQkiJTA0eCAlMDR4ICUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCisJCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLm1vZHVzLAorCQkJCXNvdXJjZSwKKwkJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uYWNiLAorCQkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5mbV9wcmVzY2FsZSwKKwkJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0ubmljYW1fcHJlc2NhbGUsCisJCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnNjYXJ0X3ByZXNjYWxlLAorCQkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zeXN0ZW0sCisJCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnZvbHVtZSk7CisJCWJ1ZjFbMF0gPSAweDExOworCQlidWYxWzFdID0gMHgwMDsKKwkJYnVmMVsyXSA9IDB4N2U7CisJCW1zZ3NbMF0uYWRkciA9IE1QWF9JMkNfQUREUjsKKwkJbXNnc1swXS5mbGFncyA9IDA7CisJCW1zZ3NbMF0ubGVuID0gMzsKKwkJbXNnc1swXS5idWYgPSBidWYxOworCQltc2dzWzFdLmFkZHIgPSBNUFhfSTJDX0FERFI7CisJCW1zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwkJbXNnc1sxXS5sZW4gPSAyOworCQltc2dzWzFdLmJ1ZiA9IGJ1ZjI7CisJCWkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpOworCQlwcmludGsoS0VSTl9ERUJVRyAid2lzLXNvbnktdHVuZXI6IE1QWCBzeXN0ZW06ICUwMnglMDJ4XG4iLAorCQkJCWJ1ZjJbMF0sIGJ1ZjJbMV0pOworCQlidWYxWzBdID0gMHgxMTsKKwkJYnVmMVsxXSA9IDB4MDI7CisJCWJ1ZjFbMl0gPSAweDAwOworCQlpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAyKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndpcy1zb255LXR1bmVyOiBNUFggc3RhdHVzOiAlMDJ4JTAyeFxuIiwKKwkJCQlidWYyWzBdLCBidWYyWzFdKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElGIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciB0aGUgQlRGLVBHNDcyWjoKKyAqCisgKglCL0c6IDB4OTQgMHg3MCAweDQ5CisgKglJOiAgIDB4MTQgMHg3MCAweDRhCisgKglEL0s6IDB4MTQgMHg3MCAweDRiCisgKglMOiAgIDB4MDQgMHg3MCAweDRiCisgKglMJzogIDB4NDQgMHg3MCAweDUzCisgKglNOiAgIDB4NTAgMHgzMCAweDRjCisgKi8KKworc3RhdGljIGludCBzZXRfaWYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1OCBidWZmZXJbNF07CisJc3RydWN0IGkyY19tc2cgbXNnOworCWludCBkZWZhdWx0X21weF9tb2RlID0gMDsKKworCS8qIGNvbmZpZ3VyZSBJRiAqLworCWJ1ZmZlclswXSA9IDA7CisJaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1BBTF9CRykgeworCQlidWZmZXJbMV0gPSAweDk0OworCQlidWZmZXJbMl0gPSAweDcwOworCQlidWZmZXJbM10gPSAweDQ5OworCQlkZWZhdWx0X21weF9tb2RlID0gMTsKKwl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CisJCWJ1ZmZlclsxXSA9IDB4MTQ7CisJCWJ1ZmZlclsyXSA9IDB4NzA7CisJCWJ1ZmZlclszXSA9IDB4NGE7CisJCWRlZmF1bHRfbXB4X21vZGUgPSA0OworCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0RLKSB7CisJCWJ1ZmZlclsxXSA9IDB4MTQ7CisJCWJ1ZmZlclsyXSA9IDB4NzA7CisJCWJ1ZmZlclszXSA9IDB4NGI7CisJCWRlZmF1bHRfbXB4X21vZGUgPSA2OworCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfU0VDQU1fTCkgeworCQlidWZmZXJbMV0gPSAweDA0OworCQlidWZmZXJbMl0gPSAweDcwOworCQlidWZmZXJbM10gPSAweDRiOworCQlkZWZhdWx0X21weF9tb2RlID0gMTE7CisJfQorCW1zZy5hZGRyID0gSUZfSTJDX0FERFI7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gNDsKKwltc2cuYnVmID0gYnVmZmVyOworCWkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2csIDEpOworCisJLyogU2VsZWN0IE1QWCBtb2RlIGlmIG5vdCBmb3JjZWQgYnkgdGhlIHVzZXIgKi8KKwlpZiAoZm9yY2VfbXB4X21vZGUgPj0gMCB8fCBmb3JjZV9tcHhfbW9kZSA8IE1QWF9OVU1fTU9ERVMpCisJCXQtPm1weG1vZGUgPSBmb3JjZV9tcHhfbW9kZTsKKwllbHNlCisJCXQtPm1weG1vZGUgPSBkZWZhdWx0X21weF9tb2RlOworCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtc29ueS10dW5lcjogc2V0dGluZyBNUFggdG8gbW9kZSAlZFxuIiwKKwkJCXQtPm1weG1vZGUpOworCW1weF9zZXR1cChjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHVuZXJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHdpc19zb255X3R1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGNtZCkgeworI2lmZGVmIFRVTkVSX1NFVF9UWVBFX0FERFIKKwljYXNlIFRVTkVSX1NFVF9UWVBFX0FERFI6CisJeworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgKnR1bl9zZXR1cCA9IGFyZzsKKwkJaW50ICp0eXBlID0gJnR1bl9zZXR1cC0+dHlwZTsKKyNlbHNlCisJY2FzZSBUVU5FUl9TRVRfVFlQRToKKwl7CisJCWludCAqdHlwZSA9IGFyZzsKKyNlbmRpZgorCisJCWlmICh0LT50eXBlID49IDApIHsKKwkJCWlmICh0LT50eXBlICE9ICp0eXBlKQorCQkJCXByaW50ayhLRVJOX0VSUiAid2lzLXNvbnktdHVuZXI6IHR5cGUgYWxyZWFkeSAiCisJCQkJCSJzZXQgdG8gJWQsIGlnbm9yaW5nIHJlcXVlc3QgZm9yICVkXG4iLAorCQkJCQl0LT50eXBlLCAqdHlwZSk7CisJCQlicmVhazsKKwkJfQorCQl0LT50eXBlID0gKnR5cGU7CisJCXN3aXRjaCAodC0+dHlwZSkgeworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BHNDcyWjoKKwkJCXN3aXRjaCAoZm9yY2VfYmFuZF9zdHJbMF0pIHsKKwkJCWNhc2UgJ2InOgorCQkJY2FzZSAnQic6CisJCQljYXNlICdnJzoKKwkJCWNhc2UgJ0cnOgorCQkJCXByaW50ayhLRVJOX0lORk8gIndpcy1zb255LXR1bmVyOiBmb3JjaW5nICIKKwkJCQkJCSJ0dW5lciB0byBQQUwtQi9HIGJhbmRzXG4iKTsKKwkJCQlmb3JjZV9iYW5kID0gVjRMMl9TVERfUEFMX0JHOworCQkJCWJyZWFrOworCQkJY2FzZSAnaSc6CisJCQljYXNlICdJJzoKKwkJCQlwcmludGsoS0VSTl9JTkZPICJ3aXMtc29ueS10dW5lcjogZm9yY2luZyAiCisJCQkJCQkidHVuZXIgdG8gUEFMLUkgYmFuZFxuIik7CisJCQkJZm9yY2VfYmFuZCA9IFY0TDJfU1REX1BBTF9JOworCQkJCWJyZWFrOworCQkJY2FzZSAnZCc6CisJCQljYXNlICdEJzoKKwkJCWNhc2UgJ2snOgorCQkJY2FzZSAnSyc6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAid2lzLXNvbnktdHVuZXI6IGZvcmNpbmcgIgorCQkJCQkJInR1bmVyIHRvIFBBTC1EL0sgYmFuZHNcbiIpOworCQkJCWZvcmNlX2JhbmQgPSBWNEwyX1NURF9QQUxfSTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2wnOgorCQkJY2FzZSAnTCc6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAid2lzLXNvbnktdHVuZXI6IGZvcmNpbmcgIgorCQkJCQkJInR1bmVyIHRvIFNFQ0FNLUwgYmFuZFxuIik7CisJCQkJZm9yY2VfYmFuZCA9IFY0TDJfU1REX1NFQ0FNX0w7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWZvcmNlX2JhbmQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGZvcmNlX2JhbmQpCisJCQkJdC0+c3RkID0gZm9yY2VfYmFuZDsKKwkJCWVsc2UKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfQkc7CisJCQlzZXRfaWYoY2xpZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BLNDY3WjoKKwkJCXQtPnN0ZCA9IFY0TDJfU1REX05UU0NfTV9KUDsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BCNDYzWjoKKwkJCXQtPnN0ZCA9IFY0TDJfU1REX05UU0NfTTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtc29ueS10dW5lcjogdHVuZXIgdHlwZSAlZCBpcyBub3QgIgorCQkJCQkic3VwcG9ydGVkIGJ5IHRoaXMgbW9kdWxlXG4iLCAqdHlwZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAodHlwZSA+PSAwKQorCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSJ3aXMtc29ueS10dW5lcjogdHlwZSBzZXQgdG8gJWQgKCVzKVxuIiwKKwkJCQl0LT50eXBlLCBzb255X3R1bmVyc1t0LT50eXBlIC0gMjAwXS5uYW1lKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgorCXsKKwkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCWYtPmZyZXF1ZW5jeSA9IHQtPmZyZXE7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwl7CisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQl0LT5mcmVxID0gZi0+ZnJlcXVlbmN5OworCQlzZXRfZnJlcShjbGllbnQsIHQtPmZyZXEpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwl7CisJCXN0cnVjdCB2NGwyX3N0YW5kYXJkICpzdGQgPSBhcmc7CisKKwkJc3dpdGNoICh0LT50eXBlKSB7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEc0NzJaOgorCQkJc3dpdGNoIChzdGQtPmluZGV4KSB7CisJCQljYXNlIDA6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX1BBTF9CRywgIlBBTC1CL0ciKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLAorCQkJCQkJVjRMMl9TVERfUEFMX0ksICJQQUwtSSIpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsCisJCQkJCQlWNEwyX1NURF9QQUxfREssICJQQUwtRC9LIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX1NFQ0FNX0wsICJTRUNBTS1MIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0ZC0+aWQgPSAwOyAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEs0NjdaOgorCQkJaWYgKHN0ZC0+aW5kZXggIT0gMCkgeworCQkJCXN0ZC0+aWQgPSAwOyAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJVjRMMl9TVERfTlRTQ19NX0pQLCAiTlRTQy1KIik7CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o6CisJCQlpZiAoc3RkLT5pbmRleCAhPSAwKSB7CisJCQkJc3RkLT5pZCA9IDA7IC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMICovCisJCQkJYnJlYWs7CisJCQl9CisJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLCBWNEwyX1NURF9OVFNDX00sICJOVFNDIik7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCisJCSpzdGQgPSB0LT5zdGQ7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisJCXY0bDJfc3RkX2lkIG9sZCA9IHQtPnN0ZDsKKworCQlzd2l0Y2ggKHQtPnR5cGUpIHsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QRzQ3Mlo6CisJCQlpZiAoZm9yY2VfYmFuZCAmJiAoKnN0ZCAmIGZvcmNlX2JhbmQpICE9ICpzdGQgJiYKKwkJCQkJKnN0ZCAhPSBWNEwyX1NURF9QQUwgJiYKKwkJCQkJKnN0ZCAhPSBWNEwyX1NURF9TRUNBTSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtc29ueS10dW5lcjogaWdub3JpbmcgIgorCQkJCQkJInJlcXVlc3RlZCBUViBzdGFuZGFyZCBpbiAiCisJCQkJCQkiZmF2b3Igb2YgZm9yY2VfYmFuZCB2YWx1ZVxuIik7CisJCQkJdC0+c3RkID0gZm9yY2VfYmFuZDsKKwkJCX0gZWxzZSBpZiAoKnN0ZCAmIFY0TDJfU1REX1BBTF9CRykgeyAvKiBkZWZhdWx0ICovCisJCQkJdC0+c3RkID0gVjRMMl9TVERfUEFMX0JHOworCQkJfSBlbHNlIGlmICgqc3RkICYgVjRMMl9TVERfUEFMX0kpIHsKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfSTsKKwkJCX0gZWxzZSBpZiAoKnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgeworCQkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9ESzsKKwkJCX0gZWxzZSBpZiAoKnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9TRUNBTV9MOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIndpcy1zb255LXR1bmVyOiBUViBzdGFuZGFyZCAiCisJCQkJCQkibm90IHN1cHBvcnRlZFxuIik7CisJCQkJKnN0ZCA9IDA7IC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAob2xkICE9IHQtPnN0ZCkKKwkJCQlzZXRfaWYoY2xpZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BLNDY3WjoKKwkJCWlmICghKCpzdGQgJiBWNEwyX1NURF9OVFNDX01fSlApKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtc29ueS10dW5lcjogVFYgc3RhbmRhcmQgIgorCQkJCQkJIm5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCSpzdGQgPSAwOyAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCAqLworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEI0NjNaOgorCQkJaWYgKCEoKnN0ZCAmIFY0TDJfU1REX05UU0NfTSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIndpcy1zb255LXR1bmVyOiBUViBzdGFuZGFyZCAiCisJCQkJCQkibm90IHN1cHBvcnRlZFxuIik7CisJCQkJKnN0ZCA9IDA7IC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMICovCisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCisJCXN3aXRjaCAodC0+dHlwZSkgeworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BHNDcyWjoKKwkJCWlmIChmb3JjZV9iYW5kKQorCQkJCSpzdGQgPSBmb3JjZV9iYW5kOworCQkJZWxzZQorCQkJCSpzdGQgPSBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9QQUxfSSB8CisJCQkJCVY0TDJfU1REX1BBTF9ESyB8IFY0TDJfU1REX1NFQ0FNX0w7CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o6CisJCQkqc3RkID0gVjRMMl9TVERfTlRTQ19NX0pQOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEI0NjNaOgorCQkJKnN0ZCA9IFY0TDJfU1REX05UU0NfTTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnR1biA9IGFyZzsKKworCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0dW4pKTsKKwkJc3RyY3B5KHR1bi0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwkJdHVuLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCXR1bi0+cmFuZ2Vsb3cgPSAwVUw7IC8qIGRvZXMgYW55dGhpbmcgdXNlIHRoZXNlPyAqLworCQl0dW4tPnJhbmdlaGlnaCA9IDB4ZmZmZmZmZmZVTDsKKwkJc3dpdGNoICh0LT50eXBlKSB7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEc0NzJaOgorCQkJdHVuLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8CisJCQkJVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTEFORzEgfAorCQkJCVY0TDJfVFVORVJfQ0FQX0xBTkcyOworCQkJdHVuLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8CisJCQkJVjRMMl9UVU5FUl9TVUJfU1RFUkVPIHwgVjRMMl9UVU5FUl9TVUJfTEFORzEgfAorCQkJCVY0TDJfVFVORVJfU1VCX0xBTkcyOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEs0NjdaOgorCQljYXNlIFRVTkVSX1NPTllfQlRGX1BCNDYzWjoKKwkJCXR1bi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKKwkJCXR1bi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfAorCQkJCQkJVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCQkJYnJlYWs7CisJCX0KKwkJdHVuLT5hdWRtb2RlID0gdC0+YXVkbW9kZTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfVFVORVI6CisJeworCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuID0gYXJnOworCisJCXN3aXRjaCAodC0+dHlwZSkgeworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BHNDcyWjoKKwkJCWlmICh0dW4tPmF1ZG1vZGUgIT0gdC0+YXVkbW9kZSkgeworCQkJCXQtPmF1ZG1vZGUgPSB0dW4tPmF1ZG1vZGU7CisJCQkJbXB4X3NldHVwKGNsaWVudCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o6CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEI0NjNaOgorCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19zb255X3R1bmVyX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc19zb255X3R1bmVyX2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiU29ueSBUViBUdW5lciAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3NvbnlfdHVuZXJfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfc29ueV90dW5lcl9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQlpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgKnQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfc29ueV90dW5lcl9jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3NvbnlfdHVuZXJfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfc29ueV90dW5lciksIEdGUF9LRVJORUwpOworCWlmICh0ID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXQtPnR5cGUgPSAtMTsKKwl0LT5mcmVxID0gMDsKKwl0LT5tcHhtb2RlID0gMDsKKwl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0KTsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtc29ueS10dW5lcjogaW5pdGlhbGl6aW5nIHR1bmVyIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19zb255X3R1bmVyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfc29ueV90dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKHQpOworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc29ueV90dW5lcl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFNvbnkgVFYgVHVuZXIgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19TT05ZX1RVTkVSLAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3NvbnlfdHVuZXJfZGV0YWNoLAorCS5jb21tYW5kCT0gdHVuZXJfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc19zb255X3R1bmVyX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3NvbnlfdHVuZXJfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3NvbnlfdHVuZXJfZHJpdmVyLmlkLAorCQkJCQl3aXNfc29ueV90dW5lcl9kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3NvbnlfdHVuZXJfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfc29ueV90dW5lcl9kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfc29ueV90dW5lcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfc29ueV90dW5lcl9pbml0KTsKK21vZHVsZV9leGl0KHdpc19zb255X3R1bmVyX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3MjgwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjhmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYwpAQCAtMCwwICsxLDM3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdHJ1Y3Qgd2lzX3R3MjgwNCB7CisJaW50IGNoYW5uZWw7CisJaW50IG5vcm07CisJaW50IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBzYXR1cmF0aW9uOworCWludCBodWU7Cit9OworCitzdGF0aWMgdTggZ2xvYmFsX3JlZ2lzdGVyc1tdID0KK3sKKwkweDM5LCAweDAwLAorCTB4M2EsIDB4ZmYsCisJMHgzYiwgMHg4NCwKKwkweDNjLCAweDgwLAorCTB4M2QsIDB4ODAsCisJMHgzZSwgMHg4MiwKKwkweDNmLCAweDgyLAorCTB4ZmYsIDB4ZmYsIC8qIFRlcm1pbmF0b3IgKHJlZyAweGZmIGRvZXMgbm90IGV4aXN0KSAqLworfTsKKworc3RhdGljIHU4IGNoYW5uZWxfcmVnaXN0ZXJzW10gPQoreworCTB4MDEsIDB4YzQsCisJMHgwMiwgMHhhNSwKKwkweDAzLCAweDIwLAorCTB4MDQsIDB4ZDAsCisJMHgwNSwgMHgyMCwKKwkweDA2LCAweGQwLAorCTB4MDcsIDB4ODgsCisJMHgwOCwgMHgyMCwKKwkweDA5LCAweDA3LAorCTB4MGEsIDB4ZjAsCisJMHgwYiwgMHgwNywKKwkweDBjLCAweGYwLAorCTB4MGQsIDB4NDAsCisJMHgwZSwgMHhkMiwKKwkweDBmLCAweDgwLAorCTB4MTAsIDB4ODAsCisJMHgxMSwgMHg4MCwKKwkweDEyLCAweDgwLAorCTB4MTMsIDB4MWYsCisJMHgxNCwgMHgwMCwKKwkweDE1LCAweDAwLAorCTB4MTYsIDB4MDAsCisJMHgxNywgMHgwMCwKKwkweDE4LCAweGZmLAorCTB4MTksIDB4ZmYsCisJMHgxYSwgMHhmZiwKKwkweDFiLCAweGZmLAorCTB4MWMsIDB4ZmYsCisJMHgxZCwgMHhmZiwKKwkweDFlLCAweGZmLAorCTB4MWYsIDB4ZmYsCisJMHgyMCwgMHgwNywKKwkweDIxLCAweDA3LAorCTB4MjIsIDB4MDAsCisJMHgyMywgMHg5MSwKKwkweDI0LCAweDUxLAorCTB4MjUsIDB4MDMsCisJMHgyNiwgMHgwMCwKKwkweDI3LCAweDAwLAorCTB4MjgsIDB4MDAsCisJMHgyOSwgMHgwMCwKKwkweDJhLCAweDAwLAorCTB4MmIsIDB4MDAsCisJMHgyYywgMHgwMCwKKwkweDJkLCAweDAwLAorCTB4MmUsIDB4MDAsCisJMHgyZiwgMHgwMCwKKwkweDMwLCAweDAwLAorCTB4MzEsIDB4MDAsCisJMHgzMiwgMHgwMCwKKwkweDMzLCAweDAwLAorCTB4MzQsIDB4MDAsCisJMHgzNSwgMHgwMCwKKwkweDM2LCAweDAwLAorCTB4MzcsIDB4MDAsCisJMHhmZiwgMHhmZiwgLyogVGVybWluYXRvciAocmVnIDB4ZmYgZG9lcyBub3QgZXhpc3QpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlLCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZyB8IChjaGFubmVsIDw8IDYpLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncywgaW50IGNoYW5uZWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByZWdzW2ldICE9IDB4ZmY7IGkgKz0gMikKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCXJlZ3NbaV0gfCAoY2hhbm5lbCA8PCA2KSwgcmVnc1tpICsgMV0pIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdHcyODA0X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHdpc190dzI4MDQgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKGNtZCA9PSBERUNPREVSX1NFVF9DSEFOTkVMKSB7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJaWYgKCppbnB1dCA8IDAgfHwgKmlucHV0ID4gMykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtdHcyODA0OiBjaGFubmVsICVkIGlzIG5vdCAiCisJCQkJCSJiZXR3ZWVuIDAgYW5kIDMhXG4iLCAqaW5wdXQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZGVjLT5jaGFubmVsID0gKmlucHV0OworCQlwcmludGsoS0VSTl9ERUJVRyAid2lzLXR3MjgwNDogaW5pdGlhbGl6aW5nIFRXMjgwNCAiCisJCQkJImNoYW5uZWwgJWRcbiIsIGRlYy0+Y2hhbm5lbCk7CisJCWlmIChkZWMtPmNoYW5uZWwgPT0gMCAmJgorCQkJCXdyaXRlX3JlZ3MoY2xpZW50LCBnbG9iYWxfcmVnaXN0ZXJzLCAwKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAid2lzLXR3MjgwNDogZXJyb3IgaW5pdGlhbGl6aW5nICIKKwkJCQkJIlRXMjgwNCBnbG9iYWwgcmVnaXN0ZXJzXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgY2hhbm5lbF9yZWdpc3RlcnMsIGRlYy0+Y2hhbm5lbCkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIndpcy10dzI4MDQ6IGVycm9yIGluaXRpYWxpemluZyAiCisJCQkJCSJUVzI4MDQgY2hhbm5lbCAlZFxuIiwgZGVjLT5jaGFubmVsKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChkZWMtPmNoYW5uZWwgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtdHcyODA0OiBpZ25vcmluZyBjb21tYW5kICUwOHggdW50aWwgIgorCQkJCSJjaGFubmVsIG51bWJlciBpcyBzZXRcbiIsIGNtZCk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaW5wdXQgPSBhcmc7CisJCXU4IHJlZ3NbXSA9IHsKKwkJCTB4MDEsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGM0IDogMHg4NCwKKwkJCTB4MDksICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwNCwKKwkJCTB4MGEsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYwIDogMHgyMCwKKwkJCTB4MGIsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwNCwKKwkJCTB4MGMsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYwIDogMHgyMCwKKwkJCTB4MGQsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDQwIDogMHg0YSwKKwkJCTB4MTYsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHg0MCwKKwkJCTB4MTcsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHg0MCwKKwkJCTB4MjAsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwZiwKKwkJCTB4MjEsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwZiwKKwkJCTB4ZmYsCTB4ZmYsCisJCX07CisJCXdyaXRlX3JlZ3MoY2xpZW50LCByZWdzLCBkZWMtPmNoYW5uZWwpOworCQlkZWMtPm5vcm0gPSAqaW5wdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEyLCBkZWMtPmJyaWdodG5lc3MsIGRlYy0+Y2hhbm5lbCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTEsIGRlYy0+Y29udHJhc3QsIGRlYy0+Y2hhbm5lbCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAwOworCQkJZWxzZQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMCwgZGVjLT5zYXR1cmF0aW9uLCBkZWMtPmNoYW5uZWwpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+aHVlID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+aHVlID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZiwgZGVjLT5odWUsIGRlYy0+Y2hhbm5lbCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5icmlnaHRuZXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+Y29udHJhc3Q7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPnNhdHVyYXRpb247CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+aHVlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc190dzI4MDRfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3R3MjgwNF9jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlRXMjgwNCAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3R3MjgwNF9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc190dzI4MDRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdpc190dzI4MDQgKmRlYzsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc190dzI4MDRfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc190dzI4MDRfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJZGVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc190dzI4MDQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVjID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRlYy0+Y2hhbm5lbCA9IC0xOworCWRlYy0+bm9ybSA9IFY0TDJfU1REX05UU0M7CisJZGVjLT5icmlnaHRuZXNzID0gMTI4OworCWRlYy0+Y29udHJhc3QgPSAxMjg7CisJZGVjLT5zYXR1cmF0aW9uID0gMTI4OworCWRlYy0+aHVlID0gMTI4OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlYyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAid2lzLXR3MjgwNDogY3JlYXRpbmcgVFcyODA0IGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdHcyODA0X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfdHcyODA0ICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCWtmcmVlKGRlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdHcyODA0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgVFcyODA0IEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfVFcyODA0LAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3R3MjgwNF9kZXRhY2gsCisJLmNvbW1hbmQJPSB3aXNfdHcyODA0X2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfdHcyODA0X2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3R3MjgwNF9kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfdHcyODA0X2RyaXZlci5pZCwgd2lzX3R3MjgwNF9kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3R3MjgwNF9jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc190dzI4MDRfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3R3MjgwNF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfdHcyODA0X2luaXQpOworbW9kdWxlX2V4aXQod2lzX3R3MjgwNF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHc5OTAzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDYyN2IyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHc5OTAzLmMKQEAgLTAsMCArMSwzNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RydWN0IHdpc190dzk5MDMgeworCWludCBub3JtOworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGluaXRpYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MDIsIDB4NDQsIC8qIGlucHV0IDEsIGNvbXBvc2l0ZSAqLworCTB4MDMsIDB4OTIsIC8qIGNvcnJlY3QgZGlnaXRhbCBmb3JtYXQgKi8KKwkweDA0LCAweDAwLAorCTB4MDUsIDB4ODAsIC8qIG9yIDB4MDAgZm9yIFBBTCAqLworCTB4MDYsIDB4NDAsIC8qIHNlY29uZCBpbnRlcm5hbCBjdXJyZW50IHJlZmVyZW5jZSAqLworCTB4MDcsIDB4MDIsIC8qIHdpbmRvdyAqLworCTB4MDgsIDB4MTQsIC8qIHdpbmRvdyAqLworCTB4MDksIDB4ZjAsIC8qIHdpbmRvdyAqLworCTB4MGEsIDB4ODEsIC8qIHdpbmRvdyAqLworCTB4MGIsIDB4ZDAsIC8qIHdpbmRvdyAqLworCTB4MGMsIDB4OGMsCisJMHgwZCwgMHgwMCwgLyogc2NhbGluZyAqLworCTB4MGUsIDB4MTEsIC8qIHNjYWxpbmcgKi8KKwkweDBmLCAweDAwLCAvKiBzY2FsaW5nICovCisJMHgxMCwgMHgwMCwgLyogYnJpZ2h0bmVzcyAqLworCTB4MTEsIDB4NjAsIC8qIGNvbnRyYXN0ICovCisJMHgxMiwgMHgwMSwgLyogc2hhcnBuZXNzICovCisJMHgxMywgMHg3ZiwgLyogVSBnYWluICovCisJMHgxNCwgMHg1YSwgLyogViBnYWluICovCisJMHgxNSwgMHgwMCwgLyogaHVlICovCisJMHgxNiwgMHhjMywgLyogc2hhcnBuZXNzICovCisJMHgxOCwgMHgwMCwKKwkweDE5LCAweDU4LCAvKiB2YmkgKi8KKwkweDFhLCAweDgwLAorCTB4MWMsIDB4MGYsIC8qIHZpZGVvIG5vcm0gKi8KKwkweDFkLCAweDdmLCAvKiB2aWRlbyBub3JtICovCisJMHgyMCwgMHhhMCwgLyogY2xhbXBpbmcgZ2FpbiAod29ya2luZyAweDUwKSAqLworCTB4MjEsIDB4MjIsCisJMHgyMiwgMHhmMCwKKwkweDIzLCAweGZlLAorCTB4MjQsIDB4M2MsCisJMHgyNSwgMHgzOCwKKwkweDI2LCAweDQ0LAorCTB4MjcsIDB4MjAsCisJMHgyOCwgMHgwMCwKKwkweDI5LCAweDE1LAorCTB4MmEsIDB4YTAsCisJMHgyYiwgMHg0NCwKKwkweDJjLCAweDM3LAorCTB4MmQsIDB4MDAsCisJMHgyZSwgMHhhNSwgLyogYnVyc3QgUExMIGNvbnRyb2wgKHdvcmtpbmc6IGE5KSAqLworCTB4MmYsIDB4ZTAsIC8qIDB4ZWEgaXMgYmx1ZSB0ZXN0IGZyYW1lIC0tIDB4ZTAgZm9yIG5vcm1hbCAqLworCTB4MzEsIDB4MDAsCisJMHgzMywgMHgyMiwKKwkweDM0LCAweDExLAorCTB4MzUsIDB4MzUsCisJMHgzYiwgMHgwNSwKKwkweDA2LCAweGMwLCAvKiByZXNldCBkZXZpY2UgKi8KKwkweDAwLCAweDAwLCAvKiBUZXJtaW5hdG9yIChyZWcgMHgwMCBpcyByZWFkLW9ubHkpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHgwMDsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3NbaV0sIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3R3OTkwM19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3aXNfdHc5OTAzICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDIsIDB4NDAgfCAoKmlucHV0IDw8IDEpKTsKKwkJYnJlYWs7CisJfQorI2lmIDAgICAvKiBUaGUgc2NhbGVyIG9uIHRoaXMgdGhpbmcgc2VlbXMgdG8gYmUgaG9ycmlibHkgYnJva2VuICovCisJY2FzZSBERUNPREVSX1NFVF9SRVNPTFVUSU9OOgorCXsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfcmVzb2x1dGlvbiAqcmVzID0gYXJnOworCQkvKmludCBoc2NhbGUgPSAyNTYgKiA3MjAgLyByZXMtPndpZHRoOyovCisJCWludCBoc2NhbGUgPSAyNTYgKiA3MjAgLyAocmVzLT53aWR0aCAtIChyZXMtPndpZHRoID4gNzA0ID8gMCA6IDgpKTsKKwkJaW50IHZzY2FsZSA9IDI1NiAqIChkZWMtPm5vcm0gJiBWNEwyX1NURF9OVFNDID8gIDI0MCA6IDI4OCkKKwkJCQkvIHJlcy0+aGVpZ2h0OworCQl1OCByZWdzW10gPSB7CisJCQkweDBkLCB2c2NhbGUgJiAweGZmLAorCQkJMHgwZiwgaHNjYWxlICYgMHhmZiwKKwkJCTB4MGUsICgodnNjYWxlICYgMHhmMDApID4+IDQpIHwgKChoc2NhbGUgJiAweGYwMCkgPj4gOCksCisJCQkweDA2LCAweGMwLCAvKiByZXNldCBkZXZpY2UgKi8KKwkJCTAsCTAsCisJCX07CisJCXByaW50ayhLRVJOX0RFQlVHICJ2c2NhbGUgaXMgJTA0eCwgaHNjYWxlIGlzICUwNHhcbiIsCisJCQkJdnNjYWxlLCBoc2NhbGUpOworCQkvKndyaXRlX3JlZ3MoY2xpZW50LCByZWdzKTsqLworCQlicmVhazsKKwl9CisjZW5kaWYKKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppbnB1dCA9IGFyZzsKKwkJdTggcmVnc1tdID0geworCQkJMHgwNSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ODAgOiAweDAwLAorCQkJMHgwNywgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDIgOiAweDEyLAorCQkJMHgwOCwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MTQgOiAweDE4LAorCQkJMHgwOSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ZjAgOiAweDIwLAorCQkJMCwJMCwKKwkJfTsKKwkJd3JpdGVfcmVncyhjbGllbnQsIHJlZ3MpOworCQlkZWMtPm5vcm0gPSAqaW5wdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IC0xMjg7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMHgwMDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAweDYwOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisjaWYgMAorCQkvKiBJIGRvbid0IHVuZGVyc3RhbmQgaG93IHRoZSBDaHJvbWEgR2FpbiByZWdpc3RlcnMgd29yay4uLiAqLworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNjQ7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAtMTI4OworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDA7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IC0xMjgpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gLTEyODsKKwkJCWVsc2UKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTAsIGRlYy0+YnJpZ2h0bmVzcyk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTEsIGRlYy0+Y29udHJhc3QpOworCQkJYnJlYWs7CisjaWYgMAorCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCQkvKndyaXRlX3JlZyhjbGllbnQsIDB4MGMsIGRlYy0+c2F0dXJhdGlvbik7Ki8KKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+aHVlID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAtMTI4KQorCQkJCWRlYy0+aHVlID0gLTEyODsKKwkJCWVsc2UKKwkJCQlkZWMtPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxNSwgZGVjLT5odWUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+YnJpZ2h0bmVzczsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmNvbnRyYXN0OworCQkJYnJlYWs7CisjaWYgMAorCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+c2F0dXJhdGlvbjsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmh1ZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdHc5OTAzX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc190dzk5MDNfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJUVzk5MDMgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc190dzk5MDNfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfdHc5OTAzX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3aXNfdHc5OTAzICpkZWM7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfdHc5OTAzX2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfdHc5OTAzX2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCWRlYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfdHc5OTAzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlYyA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWMtPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJZGVjLT5jb250cmFzdCA9IDB4NjA7CisJZGVjLT5odWUgPSAwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlYyk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLXR3OTkwMzogaW5pdGlhbGl6aW5nIFRXOTkwMyBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgaW5pdGlhbF9yZWdpc3RlcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndpcy10dzk5MDM6IGVycm9yIGluaXRpYWxpemluZyBUVzk5MDNcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlrZnJlZShkZWMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc190dzk5MDNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc190dzk5MDMgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKGNsaWVudCk7CisJa2ZyZWUoZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc190dzk5MDNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBUVzk5MDMgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19UVzk5MDMsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfdHc5OTAzX2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc190dzk5MDNfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc190dzk5MDNfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfdHc5OTAzX2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc190dzk5MDNfZHJpdmVyLmlkLCB3aXNfdHc5OTAzX2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfdHc5OTAzX2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3R3OTkwM19kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfdHc5OTAzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc190dzk5MDNfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfdHc5OTAzX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1NjQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXVkYTEzNDIuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dmF1ZGlvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RhdGljIGludCB3cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywgaW50IHZhbHVlKQoreworCS8qIFVEQTEzNDIgd2FudHMgTVNCIGZpcnN0LCBidXQgU01CdXMgc2VuZHMgTFNCIGZpcnN0ICovCisJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHJlZywgc3dhYjE2KHZhbHVlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3VkYTEzNDJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1NfQVVESU86CisJeworCQlpbnQgKmlucCA9IGFyZzsKKworCQlzd2l0Y2ggKCppbnApIHsKKwkJY2FzZSBUVkFVRElPX0lOUFVUX1RVTkVSOgorCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwMCwgMHgxNDQxKTsgLyogc2VsZWN0IGlucHV0IDIgKi8KKwkJCWJyZWFrOworCQljYXNlIFRWQVVESU9fSU5QVVRfRVhURVJOOgorCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwMCwgMHgxMjQxKTsgLyogc2VsZWN0IGlucHV0IDEgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtdWRhMTM0MjogaW5wdXQgJWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCQkJKmlucCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3VkYTEzNDJfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3VkYTEzNDJfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJVREExMzQyIChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfdWRhMTM0Ml9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc191ZGExMzQyX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3VkYTEzNDJfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc191ZGExMzQyX2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtdWRhMTM0MjogaW5pdGlhbGl6aW5nIFVEQTEzNDIgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwl3cml0ZV9yZWcoY2xpZW50LCAweDAwLCAweDgwMDApOyAvKiByZXNldCByZWdpc3RlcnMgKi8KKwl3cml0ZV9yZWcoY2xpZW50LCAweDAwLCAweDEyNDEpOyAvKiBzZWxlY3QgaW5wdXQgMSAqLworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdWRhMTM0Ml9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3VkYTEzNDJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBVREExMzQyIEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfVURBMTM0MiwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc191ZGExMzQyX2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc191ZGExMzQyX2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfdWRhMTM0Ml9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc191ZGExMzQyX2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc191ZGExMzQyX2RyaXZlci5pZCwgd2lzX3VkYTEzNDJfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc191ZGExMzQyX2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3VkYTEzNDJfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3VkYTEzNDJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3VkYTEzNDJfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfdWRhMTM0Ml9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmM5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIE1FNDAwMAorCXRyaXN0YXRlICJNZWlsaGF1cyBNRS00MDAwIHN1cHBvcnQiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTWVpbGhhdXMgTUUtNDAwMCBmYW1pbHkgb2YgYm9hcmRzCisJICB0aGF0IGRvIGRhdGEgY29sbGVjdGlvbiBhbmQgbXVsdGlwdXJwb3NlIEkvTy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbWU0MDAwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ODdjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX01FNDAwMCkJCSs9IG1lNDAwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYjgzODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL1JFQURNRQpAQCAtMCwwICsxLDEzIEBACisKK1RPRE86CisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBzcGFyc2UgY2xlYW51cHMKKwktIHBvc3NpYmxlIC9wcm9jIGludGVyYWN0aW9uIGNsZWFudXBzCisJLSBtb3JlIGluZm8gbmVlZGVkIGZvciBLY29uZmlnIGVudHJ5CisJLSByZWFsIGRldmljZSBpZD8KKwktIG1vZHVsZSBwYXJhbWV0ZXIgY2xlYW51cAorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CithbmQgQ2M6IFdvbGZnYW5nIEJlaXRlciA8dy5iZWl0ZXJAYW9uLmF0PiBhbmQKK0d1ZW50ZXIgR2ViaGFyZHQgPGcuZ2ViaGFyZHRAbWVpbGhhdXMuZGU+CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMzM3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jCkBAIC0wLDAgKzEsNjEyMSBAQAorLyogRGV2aWNlIGRyaXZlciBmb3IgTWVpbGhhdXMgTUUtNDAwMCBib2FyZCBmYW1pbHkuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIE1laWxoYXVzIEVsZWN0cm9uaWMgR21iSCAoc3VwcG9ydEBtZWlsaGF1cy5kZSkKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICBBdXRob3I6CUd1ZW50ZXIgR2ViaGFyZHQJPGcuZ2ViaGFyZHRAbWVpbGhhdXMuZGU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiBJbmNsdWRlLUZpbGUgZm9yIHRoZSBNZWlsaGF1cyBNRS00MDAwIEkvTyBib2FyZCAqLworI2luY2x1ZGUgIm1lNDAwMC5oIgorI2luY2x1ZGUgIm1lNDAwMF9maXJtd2FyZS5oIgorI2luY2x1ZGUgIm1lNDYxMF9maXJtd2FyZS5oIgorCisvKiBBZG1pbmlzdHJhdGl2ZSBzdHVmZiBmb3IgbW9kaW5mbyAqLworTU9EVUxFX0FVVEhPUigiR3VlbnRlciBHZWJoYXJkdCA8Zy5nZWJoYXJkdEBtZWlsaGF1cy5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTgorICAgICgiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1laWxoYXVzIE1FLTQwMDAgYm9hcmRzIHZlcnNpb24gMS4wLjUiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS00MDAwIE11bHRpIEkvTyBib2FyZHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogQm9hcmQgc3BlY2lmaWMgZGF0YSBhcmUga2VwdCBpbiBhIGdsb2JhbCBsaXN0ICovCitzdGF0aWMgTElTVF9IRUFEKG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpOworCisvKiBNYWpvciBEZXZpY2UgTnVtYmVycy4gMCBtZWFucyB0byBnZXQgaXQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBTeXN0ZW0gKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubzsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubzsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm87CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm87CisKKy8qIExldCB0aGUgdXNlciBzcGVjaWZ5IGEgY3VzdG9tIG1ham9yIGRyaXZlciBudW1iZXIgKi8KK21vZHVsZV9wYXJhbShtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGFuYWxvZyBvdXRwdXQgKGRlZmF1bHQgMCkiKTsKKworbW9kdWxlX3BhcmFtKG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8sCisJCSAiTWFqb3IgZHJpdmVyIG51bWJlciBmb3IgYW5hbG9nIGlucHV0IChkZWZhdWx0IDApIik7CisKK21vZHVsZV9wYXJhbShtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sCisJCSAiTWFqb3IgZHJpdmVyIG51bWJlciBkaWdpdGFsIEkvTyAoZGVmYXVsdCAwKSIpOworCittb2R1bGVfcGFyYW0obWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGNvdW50ZXIgKGRlZmF1bHQgMCkiKTsKKworbW9kdWxlX3BhcmFtKG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGV4dGVybmFsIGludGVycnVwdCAoZGVmYXVsdCAwKSIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEJvYXJkIGRldGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IG1lNDAwMF94aWxpbnhfZG93bmxvYWQoc3RydWN0IG1lNDAwMF9pbmZvICopOworc3RhdGljIGludCBtZTQwMDBfcmVzZXRfYm9hcmQoc3RydWN0IG1lNDAwMF9pbmZvICopOworCitzdGF0aWMgdm9pZCBjbGVhcl9ib2FyZF9pbmZvX2xpc3Qodm9pZCk7CitzdGF0aWMgdm9pZCByZWxlYXNlX2FvX2NvbnRleHRzKHN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbyk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0dWZmIHVzZWQgYnkgYWxsIGRldmljZSBwYXJ0cworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IG1lNDAwMF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKworc3RhdGljIGludCBtZTQwMDBfZ2V0X3VzZXJfaW5mbyhzdHJ1Y3QgbWU0MDAwX3VzZXJfaW5mbyAqLAorCQkJCXN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbyk7CitzdGF0aWMgaW50IG1lNDAwMF9yZWFkX3Byb2NtZW0oY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBbmFsb2cgb3V0cHV0IHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYW9fd3JpdGVfc2luZyhzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwKKwkJCQkgICAgbG9mZl90ICopOworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX3dyYXAoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisJCQkJICAgIGxvZmZfdCAqKTsKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV9jb250KHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICBsb2ZmX3QgKik7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX3Npbmcoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX3dyYXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX2NvbnQoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBtZTQwMDBfYW9fcG9sbF9jb250KHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19mc3luY19jb250KHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKKworc3RhdGljIGludCBtZTQwMDBfYW9fc3RhcnQodW5zaWduZWQgbG9uZyAqLCBzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zdG9wKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3RpbWVyX3NldF9kaXZpc29yKHUzMiAqLCBzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVsb2FkKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZWxvYWRfdXBkYXRlKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoaW50ICosIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVwYXJlKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9faW5mbyk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19yZXNldChzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2luZm8pOworc3RhdGljIGludCBtZTQwMDBfYW9fZW5hYmxlX2RvKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2Rpc2FibGVfZG8oc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fZnNtX3N0YXRlKGludCAqLCBzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKik7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19leF90cmlnKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfc3coc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKAorCQkJCQlzdHJ1Y3QgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdCAqY2hhbm5lbHMsCisJCQkJCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX2V4X3RyaWcoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX3N3KHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19kaXNhYmxlKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICBzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYW9fZ2V0X2ZyZWVfYnVmZmVyKHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQW5hbG9nIGlucHV0IHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9haV9zaW5nbGUoc3RydWN0IG1lNDAwMF9haV9zaW5nbGUgKiwKKwkJCQlzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zaW5nKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkJdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9haV9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zdyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdW5zaWduZWQgaW50IG1lNDAwMF9haV9wb2xsKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2lvY3RsX2V4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpOworCitzdGF0aWMgaW50IG1lNDAwMF9haV9wcmVwYXJlKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9yZXNldChzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfY29uZmlnKHN0cnVjdCBtZTQwMDBfYWlfY29uZmlnICosCisJCQkJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfc3RhcnQoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfc3RhcnRfZXgodW5zaWduZWQgbG9uZyAqLCBzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9zdG9wKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2ltbWVkaWF0ZV9zdG9wKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfZW5hYmxlKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfZGlzYWJsZShzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX3NldHVwKHN0cnVjdCBtZTQwMDBfYWlfdHJpZ2dlciAqLAorCQkJCSAgIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3NjX3NldHVwKHN0cnVjdCBtZTQwMDBfYWlfc2MgKmFyZywKKwkJCSAgICAgIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9vZmZzZXRfZW5hYmxlKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9vZmZzZXRfZGlzYWJsZShzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfZnVsbHNjYWxlX2VuYWJsZShzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfZnVsbHNjYWxlX2Rpc2FibGUoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2ZzbV9zdGF0ZShpbnQgKmFyZywgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2dldF9jb3VudF9idWZmZXIodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRUVQUk9NIHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9lZXByb21fcmVhZChzdHJ1Y3QgbWU0MDAwX2VlcHJvbSAqYXJnLAorCQkJICAgICAgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2VlcHJvbV93cml0ZShzdHJ1Y3QgbWU0MDAwX2VlcHJvbSAqYXJnLAorCQkJICAgICAgIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGlnaXRhbCBJL08gc3R1ZmYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJICAgIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGludCBtZTQwMDBfZGlvX2NvbmZpZyhzdHJ1Y3QgbWU0MDAwX2Rpb19jb25maWcgKiwKKwkJCQlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfZGlvX2dldF9ieXRlKHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUgKiwKKwkJCQlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfZGlvX3NldF9ieXRlKHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUgKiwKKwkJCQlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfZGlvX3Jlc2V0KHN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgKik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQ291bnRlciBzdHVmZgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfY250X2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICAgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfY29uZmlnKHN0cnVjdCBtZTQwMDBfY250X2NvbmZpZyAqLAorCQkJCXN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfcmVhZChzdHJ1Y3QgbWU0MDAwX2NudCAqLCBzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfY250X3dyaXRlKHN0cnVjdCBtZTQwMDBfY250ICosIHN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgKik7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfcmVzZXQoc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCAqKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFeHRlcm5hbCBpbnRlcnJ1cHQgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZW5hYmxlKHN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9kaXNhYmxlKHN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0ICopOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9jb3VudCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkJc3RydWN0IG1lNDAwMF9leHRfaW50X2NvbnRleHQgKmV4dF9pbnRfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlX3B0ciwgaW50IG1vZGUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9hb19pc3IoaW50LCB2b2lkICopOworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9haV9pc3IoaW50LCB2b2lkICopOworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9leHRfaW50X2lzcihpbnQsIHZvaWQgKik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSW5saW5lIGZ1bmN0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfYnVmX2NvdW50KHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gKChidWYuaGVhZCAtIGJ1Zi50YWlsKSAmIChzaXplIC0gMSkpOworfQorCitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfYnVmX3NwYWNlKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gKChidWYudGFpbCAtIChidWYuaGVhZCArIDEpKSAmIChzaXplIC0gMSkpOworfQorCitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfdmFsdWVzX3RvX2VuZChzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCit7CisJaW50IGVuZDsKKwlpbnQgbjsKKwllbmQgPSBzaXplIC0gYnVmLnRhaWw7CisJbiA9IChidWYuaGVhZCArIGVuZCkgJiAoc2l6ZSAtIDEpOworCXJldHVybiAobiA8IGVuZCkgPyBuIDogZW5kOworfQorCitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfc3BhY2VfdG9fZW5kKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgZW5kOworCWludCBuOworCisJZW5kID0gc2l6ZSAtIDEgLSBidWYuaGVhZDsKKwluID0gKGVuZCArIGJ1Zi50YWlsKSAmIChzaXplIC0gMSk7CisJcmV0dXJuIChuIDw9IGVuZCkgPyBuIDogKGVuZCArIDEpOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgbWU0MDAwX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCVBPUlRfUERFQlVHKCItLT4gMHglMDJYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOworCW91dGIodmFsdWUsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgbWU0MDAwX291dGwodW5zaWduZWQgbG9uZyB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCVBPUlRfUERFQlVHKCItLT4gMHglMDhsWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKKwlvdXRsKHZhbHVlLCBwb3J0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5saW5lIG1lNDAwMF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdmFsdWUgPSBpbmwocG9ydCk7CisJUE9SVF9QREVCVUcoIjwtLSAweCUwOGxYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5saW5lIG1lNDAwMF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJdmFsdWUgPSBpbmIocG9ydCk7CisJUE9SVF9QREVCVUcoIjwtLSAweCUwOFggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWU0MDAwX2RyaXZlciA9IHsKKwkubmFtZSA9IE1FNDAwMF9OQU1FLAorCS5pZF90YWJsZSA9IG1lNDAwMF9wY2lfdGFibGUsCisJLnByb2JlID0gbWU0MDAwX3Byb2JlCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19zaW5nID0geworICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAud3JpdGUgPSBtZTQwMDBfYW9fd3JpdGVfc2luZywKKyAgICAgIC5pb2N0bCA9IG1lNDAwMF9hb19pb2N0bF9zaW5nLAorICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKKyAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc193cmFwID0geworICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAud3JpdGUgPSBtZTQwMDBfYW9fd3JpdGVfd3JhcCwKKyAgICAgIC5pb2N0bCA9IG1lNDAwMF9hb19pb2N0bF93cmFwLAorICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKKyAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19jb250ID0geworICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAud3JpdGUgPSBtZTQwMDBfYW9fd3JpdGVfY29udCwKKyAgICAgIC5wb2xsID0gbWU0MDAwX2FvX3BvbGxfY29udCwKKyAgICAgIC5pb2N0bCA9IG1lNDAwMF9hb19pb2N0bF9jb250LAorICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKKyAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCisgICAgICAuZnN5bmMgPSBtZTQwMDBfYW9fZnN5bmNfY29udCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX3NpbmcgPSB7CisgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKKyAgICAgIC5pb2N0bCA9IG1lNDAwMF9haV9pb2N0bF9zaW5nLAorICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKKyAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X3N3ID0geworICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAucmVhZCA9IG1lNDAwMF9haV9yZWFkLAorICAgICAgLnBvbGwgPSBtZTQwMDBfYWlfcG9sbCwKKyAgICAgIC5pb2N0bCA9IG1lNDAwMF9haV9pb2N0bF9zdywKKyAgICAgIC5vcGVuID0gbWU0MDAwX29wZW4sCisgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAorICAgICAgLmZhc3luYyA9IG1lNDAwMF9haV9mYXN5bmMsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0ID0geworICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAucmVhZCA9IG1lNDAwMF9haV9yZWFkLAorICAgICAgLnBvbGwgPSBtZTQwMDBfYWlfcG9sbCwKKyAgICAgIC5pb2N0bCA9IG1lNDAwMF9haV9pb2N0bF9leHQsCisgICAgICAub3BlbiA9IG1lNDAwMF9vcGVuLAorICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUgPSB7CisgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKKyAgICAgIC5yZWFkID0gbWU0MDAwX2FpX3JlYWQsCisgICAgICAucG9sbCA9IG1lNDAwMF9haV9wb2xsLAorICAgICAgLmlvY3RsID0gbWU0MDAwX2FpX2lvY3RsX2V4dCwKKyAgICAgIC5vcGVuID0gbWU0MDAwX29wZW4sCisgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldF9jaGFubGlzdCA9IHsKKyAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorICAgICAgLnJlYWQgPSBtZTQwMDBfYWlfcmVhZCwKKyAgICAgIC5wb2xsID0gbWU0MDAwX2FpX3BvbGwsCisgICAgICAuaW9jdGwgPSBtZTQwMDBfYWlfaW9jdGxfZXh0LAorICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKKyAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfZGlvX2ZvcHMgPSB7CisgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKKyAgICAgIC5pb2N0bCA9IG1lNDAwMF9kaW9faW9jdGwsCisgICAgICAub3BlbiA9IG1lNDAwMF9vcGVuLAorICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9jbnRfZm9wcyA9IHsKKyAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorICAgICAgLmlvY3RsID0gbWU0MDAwX2NudF9pb2N0bCwKKyAgICAgIC5vcGVuID0gbWU0MDAwX29wZW4sCisgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2V4dF9pbnRfZm9wcyA9IHsKKyAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorICAgICAgLmlvY3RsID0gbWU0MDAwX2V4dF9pbnRfaW9jdGwsCisgICAgICAub3BlbiA9IG1lNDAwMF9vcGVuLAorICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKKyAgICAgIC5mYXN5bmMgPSBtZTQwMDBfZXh0X2ludF9mYXN5bmMsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FvX2ZvcHNfYXJyYXlbXSA9IHsKKwkmbWU0MDAwX2FvX2ZvcHNfc2luZywJLy8gc2luZ2xlIG9wZXJhdGlvbnMKKwkmbWU0MDAwX2FvX2ZvcHNfd3JhcCwJLy8gd3JhcGFyb3VuZCBvcGVyYXRpb25zCisJJm1lNDAwMF9hb19mb3BzX2NvbnQsCS8vIGNvbnRpbm91cyBvcGVyYXRpb25zCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FpX2ZvcHNfYXJyYXlbXSA9IHsKKwkmbWU0MDAwX2FpX2ZvcHNfc2luZywJLy8gc2luZ2xlIG9wZXJhdGlvbnMKKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9zdywJLy8gY29udGludW91cyBvcGVyYXRpb25zIHdpdGggc29mdHdhcmUgc3RhcnQKKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldCwJLy8gY29udGlub3VzIG9wZXJhdGlvbnMgd2l0aCBleHRlcm5hbCB0cmlnZ2VyCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUsCS8vIHNhbXBsZSB2YWx1ZXMgYnkgZXh0ZXJuYWwgdHJpZ2dlcgorCSZtZTQwMDBfYWlfZm9wc19jb250X2V0X2NoYW5saXN0LAkvLyB3b3JrIHRocm91Z2ggb25lIGNoYW5uZWwgbGlzdCBieSBleHRlcm5hbCB0cmlnZ2VyCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtZTQwMDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJQ0FMTF9QREVCVUcoImluaXRfbW9kdWxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogUmVnaXN0ZXIgZHJpdmVyIGNhcGFiaWxpdGllcyAqLworCXJlc3VsdCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1lNDAwMF9kcml2ZXIpOworCVBERUJVRygiaW5pdF9tb2R1bGUoKTolZCBkZXZpY2VzIGRldGVjdGVkXG4iLCByZXN1bHQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgcmVnaXN0ZXIgZHJpdmVyXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzE7CisJfQorCisJLyogQWxsb2NhdGUgbWFqb3IgbnVtYmVyIGZvciBhbmFsb2cgb3V0cHV0ICovCisJcmVzdWx0ID0KKwkgICAgcmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9BT19OQU1FLAorCQkJICAgICZtZTQwMDBfYW9fZm9wc19zaW5nKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGdldCBBTyBtYWpvciBub1xuIik7CisJCWdvdG8gSU5JVF9FUlJPUl8yOworCX0gZWxzZSB7CisJCW1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8gPSByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBBTyA9ICVsZFxuIiwKKwkgICAgICAgbWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubyk7CisKKwkvKiBBbGxvY2F0ZSBtYWpvciBudW1iZXIgZm9yIGFuYWxvZyBpbnB1dCAgKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FJX05BTUUsCisJCQkgICAgJm1lNDAwMF9haV9mb3BzX3NpbmcpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgZ2V0IEFJIG1ham9yIG5vXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzM7CisJfSBlbHNlIHsKKwkJbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X21vZHVsZSgpOk1ham9yIGRyaXZlciBudW1iZXIgZm9yIEFJID0gJWxkXG4iLAorCSAgICAgICBtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vKTsKKworCS8qIEFsbG9jYXRlIG1ham9yIG51bWJlciBmb3IgZGlnaXRhbCBJL08gKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9ESU9fTkFNRSwKKwkJCSAgICAmbWU0MDAwX2Rpb19mb3BzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBnZXQgRElPIG1ham9yIG5vXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzQ7CisJfSBlbHNlIHsKKwkJbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8gPSByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBESU8gPSAlbGRcbiIsCisJICAgICAgIG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vKTsKKworCS8qIEFsbG9jYXRlIG1ham9yIG51bWJlciBmb3IgY291bnRlciAqLworCXJlc3VsdCA9CisJICAgIHJlZ2lzdGVyX2NocmRldihtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0NOVF9OQU1FLAorCQkJICAgICZtZTQwMDBfY250X2ZvcHMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGdldCBDTlQgbWFqb3Igbm9cbiIpOworCQlnb3RvIElOSVRfRVJST1JfNTsKKwl9IGVsc2UgeworCQltZTQwMDBfY250X21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X21vZHVsZSgpOk1ham9yIGRyaXZlciBudW1iZXIgZm9yIENOVCA9ICVsZFxuIiwKKwkgICAgICAgbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8pOworCisJLyogQWxsb2NhdGUgbWFqb3IgbnVtYmVyIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRVhUX0lOVF9OQU1FLAorCQkJICAgICZtZTQwMDBfZXh0X2ludF9mb3BzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBnZXQgbWFqb3Igbm8gZm9yIGV4dGVybmFsIGludGVycnVwdFxuIik7CisJCWdvdG8gSU5JVF9FUlJPUl82OworCX0gZWxzZSB7CisJCW1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHCisJICAgICgiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgPSAlbGRcbiIsCisJICAgICBtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8pOworCisJLyogQ3JlYXRlIHRoZSAvcHJvYy9tZTQwMDAgZW50cnkgKi8KKwlpZiAoIWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkKKwkgICAgKCJtZTQwMDAiLCAwLCBOVUxMLCBtZTQwMDBfcmVhZF9wcm9jbWVtLCBOVUxMKSkgeworCQlyZXN1bHQgPSAtRU5PREVWOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBjcmVhdGUgcHJvYyBlbnRyeVxuIik7CisJCWdvdG8gSU5JVF9FUlJPUl83OworCX0KKworCXJldHVybiAwOworCitJTklUX0VSUk9SXzc6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRVhUX0lOVF9OQU1FKTsKKworSU5JVF9FUlJPUl82OgorCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQ05UX05BTUUpOworCitJTklUX0VSUk9SXzU6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9ESU9fTkFNRSk7CisKK0lOSVRfRVJST1JfNDoKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQUlfTkFNRSk7CisKK0lOSVRfRVJST1JfMzoKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQU9fTkFNRSk7CisKK0lOSVRfRVJST1JfMjoKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lNDAwMF9kcml2ZXIpOworCWNsZWFyX2JvYXJkX2luZm9fbGlzdCgpOworCitJTklUX0VSUk9SXzE6CisJcmV0dXJuIHJlc3VsdDsKK30KKworbW9kdWxlX2luaXQobWU0MDAwX2luaXRfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgY2xlYXJfYm9hcmRfaW5mb19saXN0KHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqYm9hcmRfcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkYWNfcDsKKwlzdHJ1Y3QgbWU0MDAwX2luZm8gKmJvYXJkX2luZm87CisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0OworCisJLyogQ2xlYXIgY29udGV4dCBsaXN0cyAqLworCWZvciAoYm9hcmRfcCA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkgICAgIGJvYXJkX3AgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IGJvYXJkX3AgPSBib2FyZF9wLT5uZXh0KSB7CisJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KGJvYXJkX3AsIHN0cnVjdCBtZTQwMDBfaW5mbywgbGlzdCk7CisJCS8qIENsZWFyIGFuYWxvZyBvdXRwdXQgY29udGV4dCBsaXN0ICovCisJCXdoaWxlICghbGlzdF9lbXB0eSgmYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0KSkgeworCQkJZGFjX3AgPSBib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QubmV4dDsKKwkJCWFvX2NvbnRleHQgPQorCQkJICAgIGxpc3RfZW50cnkoZGFjX3AsIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCwgbGlzdCk7CisJCQltZTQwMDBfYW9fcmVzZXQoYW9fY29udGV4dCk7CisJCQlmcmVlX2lycShhb19jb250ZXh0LT5pcnEsIGFvX2NvbnRleHQpOworCQkJaWYgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikKKwkJCQlrZnJlZShhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQkJbGlzdF9kZWwoZGFjX3ApOworCQkJa2ZyZWUoYW9fY29udGV4dCk7CisJCX0KKworCQkvKiBDbGVhciBhbmFsb2cgaW5wdXQgY29udGV4dCAqLworCQlpZiAoYm9hcmRfaW5mby0+YWlfY29udGV4dC0+Y2lyY19idWYuYnVmKQorCQkJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dCk7CisKKwkJLyogQ2xlYXIgZGlnaXRhbCBJL08gY29udGV4dCAqLworCQlrZnJlZShib2FyZF9pbmZvLT5kaW9fY29udGV4dCk7CisKKwkJLyogQ2xlYXIgY291bnRlciBjb250ZXh0ICovCisJCWtmcmVlKGJvYXJkX2luZm8tPmNudF9jb250ZXh0KTsKKworCQkvKiBDbGVhciBleHRlcm5hbCBpbnRlcnJ1cHQgY29udGV4dCAqLworCQlrZnJlZShib2FyZF9pbmZvLT5leHRfaW50X2NvbnRleHQpOworCX0KKworCS8qIENsZWFyIHRoZSBib2FyZCBpbmZvIGxpc3QgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpKSB7CisJCWJvYXJkX3AgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KGJvYXJkX3AsIHN0cnVjdCBtZTQwMDBfaW5mbywgbGlzdCk7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoYm9hcmRfaW5mby0+cGNpX2Rldl9wKTsKKwkJbGlzdF9kZWwoYm9hcmRfcCk7CisJCWtmcmVlKGJvYXJkX2luZm8pOworCX0KK30KKworc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbykKK3sKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBseCByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDEpOworCWlmIChib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDpnZXRfcmVnaXN0ZXJzKCk6UENJIGJhc2UgYWRkcmVzcyAxIGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAxKTsKKworCVBERUJVRworCSAgICAoImdldF9yZWdpc3RlcnMoKTpQTFggY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bFggWzB4JTRsWF1cbiIsCisJICAgICBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSwgYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2Vfc2l6ZSk7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZTQwMDAgcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAyKTsKKwlpZiAoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6Z2V0X3JlZ2lzdGVycygpOlBDSSBiYXNlIGFkZHJlc3MgMiBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMik7CisKKwlQREVCVUcoImdldF9yZWdpc3RlcnMoKTpNRTQwMDAgcmVnaXN0ZXJzIGF0IGFkZHJlc3MgMHglNGxYIFsweCU0bFhdXG4iLAorCSAgICAgICBib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSwgYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZSk7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aW1lciByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlib2FyZF9pbmZvLT50aW1lcl9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMyk7CisJaWYgKGJvYXJkX2luZm8tPnRpbWVyX3JlZ2Jhc2UgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6Z2V0X3JlZ2lzdGVycygpOlBDSSBiYXNlIGFkZHJlc3MgMyBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJvYXJkX2luZm8tPnRpbWVyX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAzKTsKKworCVBERUJVRygiZ2V0X3JlZ2lzdGVycygpOlRpbWVyIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRsWCBbMHglNGxYXVxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+dGltZXJfcmVnYmFzZSwgYm9hcmRfaW5mby0+dGltZXJfcmVnYmFzZV9zaXplKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByb2dyYW0gcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNSk7CisJaWYgKGJvYXJkX2luZm8tPnByb2dyYW1fcmVnYmFzZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImdldF9yZWdpc3RlcnMoKTpNRTQwMDA6UENJIGJhc2UgYWRkcmVzcyA1IGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgNSk7CisKKwlQREVCVUcoImdldF9yZWdpc3RlcnMoKTpQcm9ncmFtIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRsWCBbMHglNGxYXVxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlLCBib2FyZF9pbmZvLT5wcm9ncmFtX3JlZ2Jhc2Vfc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCwKKwkJCSAgIHN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbykKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBsaXN0X2hlYWQgKmJvYXJkX3A7CisJYm9hcmRfaW5mby0+cGNpX2Rldl9wID0gcGNpX2Rldl9wOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWU0MDAwX2JvYXJkcyk7IGkrKykgeworCQlpZiAobWU0MDAwX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gcGNpX2Rldl9wLT5kZXZpY2UpIHsKKwkJCWJvYXJkX2luZm8tPmJvYXJkX3AgPSAmbWU0MDAwX2JvYXJkc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUobWU0MDAwX2JvYXJkcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfYm9hcmRfaW5mbygpOkRldmljZSBJRCBub3QgdmFsaWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBHZXQgdGhlIGluZGV4IG9mIHRoZSBib2FyZCBpbiB0aGUgZ2xvYmFsIGxpc3QgKi8KKwlmb3IgKGJvYXJkX3AgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQsIGkgPSAwOworCSAgICAgYm9hcmRfcCAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgYm9hcmRfcCA9IGJvYXJkX3AtPm5leHQsIGkrKykgeworCQlpZiAoYm9hcmRfcCA9PSAmYm9hcmRfaW5mby0+bGlzdCkgeworCQkJYm9hcmRfaW5mby0+Ym9hcmRfY291bnQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGJvYXJkX3AgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfYm9hcmRfaW5mbygpOkNhbm5vdCBnZXQgaW5kZXggb2YgYmFvcmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBJbml0IGxpc3QgaGVhZCBmb3IgYW5hbG9nIG91dHB1dCBjb250ZXh0cyAqLworCUlOSVRfTElTVF9IRUFEKCZib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QpOworCisJLyogSW5pdCBzcGluIGxvY2tzICovCisJc3Bpbl9sb2NrX2luaXQoJmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJvYXJkX2luZm8tPmFpX2N0cmxfbG9jayk7CisKKwkvKiBHZXQgdGhlIHNlcmlhbCBudW1iZXIgKi8KKwlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2Rldl9wLCAweDJDLCAmYm9hcmRfaW5mby0+c2VyaWFsX25vKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiTUU0MDAwOmluaXRfYm9hcmRfaW5mbzogQ2FuJ3QgZ2V0IHNlcmlhbF9ub1xuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6c2VyaWFsX25vID0gMHgleFxuIiwgYm9hcmRfaW5mby0+c2VyaWFsX25vKTsKKworCS8qIEdldCB0aGUgaGFyZHdhcmUgcmV2aXNpb24gKi8KKwlyZXN1bHQgPQorCSAgICBwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2X3AsIDB4MDgsICZib2FyZF9pbmZvLT5od19yZXZpc2lvbik7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1FNDAwMDppbml0X2JvYXJkX2luZm8oKTpDYW4ndCBnZXQgaHdfcmV2aXNpb25cbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOmh3X3JldmlzaW9uID0gMHgleFxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+aHdfcmV2aXNpb24pOworCisJLyogR2V0IHRoZSB2ZW5kb3IgaWQgKi8KKwlib2FyZF9pbmZvLT52ZW5kb3JfaWQgPSBwY2lfZGV2X3AtPnZlbmRvcjsKKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOnZlbmRvcl9pZCA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPnZlbmRvcl9pZCk7CisKKwkvKiBHZXQgdGhlIGRldmljZSBpZCAqLworCWJvYXJkX2luZm8tPmRldmljZV9pZCA9IHBjaV9kZXZfcC0+ZGV2aWNlOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6ZGV2aWNlX2lkID0gMHgleFxuIiwgYm9hcmRfaW5mby0+ZGV2aWNlX2lkKTsKKworCS8qIEdldCB0aGUgcGNpIGRldmljZSBudW1iZXIgKi8KKwlib2FyZF9pbmZvLT5wY2lfZGV2X25vID0gUENJX0ZVTkMocGNpX2Rldl9wLT5kZXZmbik7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTpwY2lfZnVuY19ubyA9IDB4JXhcbiIsCisJICAgICAgIGJvYXJkX2luZm8tPnBjaV9mdW5jX25vKTsKKworCS8qIEdldCB0aGUgcGNpIHNsb3QgbnVtYmVyICovCisJYm9hcmRfaW5mby0+cGNpX2Rldl9ubyA9IFBDSV9TTE9UKHBjaV9kZXZfcC0+ZGV2Zm4pOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6cGNpX2Rldl9ubyA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPnBjaV9kZXZfbm8pOworCisJLyogR2V0IHRoZSBwY2kgYnVzIG51bWJlciAqLworCWJvYXJkX2luZm8tPnBjaV9idXNfbm8gPSBwY2lfZGV2X3AtPmJ1cy0+bnVtYmVyOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6cGNpX2J1c19ubyA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPnBjaV9idXNfbm8pOworCisJLyogR2V0IHRoZSBpcnEgYXNzaWduZWQgdG8gdGhlIGJvYXJkICovCisJYm9hcmRfaW5mby0+aXJxID0gcGNpX2Rldl9wLT5pcnE7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTppcnEgPSAlZFxuIiwgYm9hcmRfaW5mby0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2FvX2NvbnRleHRzKHN0cnVjdCBtZTQwMDBfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dDsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ib2FyZF9wLT5hby5jb3VudDsgaSsrKSB7CisJCWFvX2NvbnRleHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFhb19jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiYWxsb2NfYW9fY29udGV4dHMoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBhbyBjb250ZXh0XG4iKTsKKwkJCXJlbGVhc2VfYW9fY29udGV4dHMoaW5mbyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXNwaW5fbG9ja19pbml0KCZhb19jb250ZXh0LT51c2VfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZhb19jb250ZXh0LT5pbnRfbG9jayk7CisJCWFvX2NvbnRleHQtPmlycSA9IGluZm8tPmlycTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYW9fY29udGV4dC0+d2FpdF9xdWV1ZSk7CisJCWFvX2NvbnRleHQtPmJvYXJkX2luZm8gPSBpbmZvOworCisJCWlmIChpbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50KSB7CisJCQkvKiBBbGxvY2F0ZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJCWFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiA9CisJCQkgICAga3phbGxvYyhNRTQwMDBfQU9fQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImFsbG9jX2FvX2NvbnRleHRzKCk6Q2FuJ3QgZ2V0IGNpcmN1bGFyIGJ1ZmZlclxuIik7CisJCQkJcmVsZWFzZV9hb19jb250ZXh0cyhpbmZvKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKworCQkJLyogQ2xlYXIgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJCQlhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKwkJfQorCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlhb19jb250ZXh0LT5jdHJsX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfQ1RSTF9SRUc7CisJCQlhb19jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+Zmlmb19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX0ZJRk9fUkVHOworCQkJYW9fY29udGV4dC0+c2luZ2xlX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfU0lOR0xFX1JFRzsKKwkJCWFvX2NvbnRleHQtPnRpbWVyX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfVElNRVJfUkVHOworCQkJYW9fY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+cHJlbG9hZF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFg7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYW9fY29udGV4dC0+Y3RybF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX0NUUkxfUkVHOworCQkJYW9fY29udGV4dC0+c3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPmZpZm9fcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9GSUZPX1JFRzsKKwkJCWFvX2NvbnRleHQtPnNpbmdsZV9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX1NJTkdMRV9SRUc7CisJCQlhb19jb250ZXh0LT50aW1lcl9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX1RJTUVSX1JFRzsKKwkJCWFvX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9JUlFfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPnByZWxvYWRfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWFvX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9DVFJMX1JFRzsKKwkJCWFvX2NvbnRleHQtPnN0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5maWZvX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfRklGT19SRUc7CisJCQlhb19jb250ZXh0LT5zaW5nbGVfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9TSU5HTEVfUkVHOworCQkJYW9fY29udGV4dC0+dGltZXJfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9USU1FUl9SRUc7CisJCQlhb19jb250ZXh0LT5pcnFfc3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfSVJRX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5wcmVsb2FkX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlhb19jb250ZXh0LT5jdHJsX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfQ1RSTF9SRUc7CisJCQlhb19jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+Zmlmb19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX0ZJRk9fUkVHOworCQkJYW9fY29udGV4dC0+c2luZ2xlX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfU0lOR0xFX1JFRzsKKwkJCWFvX2NvbnRleHQtPnRpbWVyX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfVElNRVJfUkVHOworCQkJYW9fY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+cHJlbG9hZF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGluZm8tPmJvYXJkX3AtPmFvLmZpZm9fY291bnQpIHsKKwkJCS8qIFJlcXVlc3QgdGhlIGludGVycnVwdCBsaW5lICovCisJCQllcnIgPQorCQkJICAgIHJlcXVlc3RfaXJxKGFvX2NvbnRleHQtPmlycSwgbWU0MDAwX2FvX2lzciwKKwkJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAorCQkJCQlNRTQwMDBfTkFNRSwgYW9fY29udGV4dCk7CisJCQlpZiAoZXJyKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczpDYW4ndCBnZXQgaW50ZXJydXB0IGxpbmUiLCBfX2Z1bmNfXyk7CisJCQkJa2ZyZWUoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJCQlrZnJlZShhb19jb250ZXh0KTsKKwkJCQlyZWxlYXNlX2FvX2NvbnRleHRzKGluZm8pOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisKKwkJbGlzdF9hZGRfdGFpbCgmYW9fY29udGV4dC0+bGlzdCwgJmluZm8tPmFvX2NvbnRleHRfbGlzdCk7CisJCWFvX2NvbnRleHQtPmluZGV4ID0gaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9hb19jb250ZXh0cyhzdHJ1Y3QgbWU0MDAwX2luZm8gKmJvYXJkX2luZm8pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZGFjX3A7CisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0OworCisJLyogQ2xlYXIgYW5hbG9nIG91dHB1dCBjb250ZXh0IGxpc3QgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCkpIHsKKwkJZGFjX3AgPSBib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QubmV4dDsKKwkJYW9fY29udGV4dCA9IGxpc3RfZW50cnkoZGFjX3AsIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCwgbGlzdCk7CisJCWZyZWVfaXJxKGFvX2NvbnRleHQtPmlycSwgYW9fY29udGV4dCk7CisJCWtmcmVlKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCWxpc3RfZGVsKGRhY19wKTsKKwkJa2ZyZWUoYW9fY29udGV4dCk7CisJfQorfQorCitzdGF0aWMgaW50IGFsbG9jX2FpX2NvbnRleHQoc3RydWN0IG1lNDAwMF9pbmZvICppbmZvKQoreworCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dDsKKworCWlmIChpbmZvLT5ib2FyZF9wLT5haS5jb3VudCkgeworCQlhaV9jb250ZXh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0KSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghYWlfY29udGV4dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDphbGxvY19haV9jb250ZXh0KCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgYWkgY29udGV4dFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWluZm8tPmFpX2NvbnRleHQgPSBhaV9jb250ZXh0OworCisJCXNwaW5fbG9ja19pbml0KCZhaV9jb250ZXh0LT51c2VfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCWFpX2NvbnRleHQtPm51bWJlciA9IDA7CisJCWFpX2NvbnRleHQtPmlycSA9IGluZm8tPmlycTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYWlfY29udGV4dC0+d2FpdF9xdWV1ZSk7CisJCWFpX2NvbnRleHQtPmJvYXJkX2luZm8gPSBpbmZvOworCisJCWFpX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NUUkxfUkVHOworCQlhaV9jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NUQVRVU19SRUc7CisJCWFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX1JFRzsKKwkJYWlfY29udGV4dC0+ZGF0YV9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfREFUQV9SRUc7CisJCWFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NIQU5fVElNRVJfUkVHOworCQlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ0hBTl9QUkVfVElNRVJfUkVHOworCQlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0NBTl9USU1FUl9MT1dfUkVHOworCQlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NDQU5fVElNRVJfSElHSF9SRUc7CisJCWFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfTE9XX1JFRzsKKwkJYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfSElHSF9SRUc7CisJCWFpX2NvbnRleHQtPnN0YXJ0X3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TVEFSVF9SRUc7CisJCWFpX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQlhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0FNUExFX0NPVU5URVJfUkVHOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2Rpb19jb250ZXh0KHN0cnVjdCBtZTQwMDBfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICpkaW9fY29udGV4dDsKKworCWlmIChpbmZvLT5ib2FyZF9wLT5kaW8uY291bnQpIHsKKwkJZGlvX2NvbnRleHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0KSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghZGlvX2NvbnRleHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6YWxsb2NfZGlvX2NvbnRleHQoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBkaW8gY29udGV4dFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWluZm8tPmRpb19jb250ZXh0ID0gZGlvX2NvbnRleHQ7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmRpb19jb250ZXh0LT51c2VfbG9jayk7CisJCWRpb19jb250ZXh0LT5ib2FyZF9pbmZvID0gaW5mbzsKKworCQlkaW9fY29udGV4dC0+ZGlvX2NvdW50ID0gaW5mby0+Ym9hcmRfcC0+ZGlvLmNvdW50OworCisJCWRpb19jb250ZXh0LT5kaXJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19ESVJfUkVHOworCQlkaW9fY29udGV4dC0+Y3RybF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0NUUkxfUkVHOworCQlkaW9fY29udGV4dC0+cG9ydF8wX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fUE9SVF8wX1JFRzsKKwkJZGlvX2NvbnRleHQtPnBvcnRfMV9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX1BPUlRfMV9SRUc7CisJCWRpb19jb250ZXh0LT5wb3J0XzJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19QT1JUXzJfUkVHOworCQlkaW9fY29udGV4dC0+cG9ydF8zX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fUE9SVF8zX1JFRzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGxvY19jbnRfY29udGV4dChzdHJ1Y3QgbWU0MDAwX2luZm8gKmluZm8pCit7CisJc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCAqY250X2NvbnRleHQ7CisKKwlpZiAoaW5mby0+Ym9hcmRfcC0+Y250LmNvdW50KSB7CisJCWNudF9jb250ZXh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIWNudF9jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOmFsbG9jX2NudF9jb250ZXh0KCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgY250IGNvbnRleHRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlpbmZvLT5jbnRfY29udGV4dCA9IGNudF9jb250ZXh0OworCisJCXNwaW5fbG9ja19pbml0KCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCQljbnRfY29udGV4dC0+Ym9hcmRfaW5mbyA9IGluZm87CisKKwkJY250X2NvbnRleHQtPmN0cmxfcmVnID0KKwkJICAgIGluZm8tPnRpbWVyX3JlZ2Jhc2UgKyBNRTQwMDBfQ05UX0NUUkxfUkVHOworCQljbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyA9CisJCSAgICBpbmZvLT50aW1lcl9yZWdiYXNlICsgTUU0MDAwX0NOVF9DT1VOVEVSXzBfUkVHOworCQljbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyA9CisJCSAgICBpbmZvLT50aW1lcl9yZWdiYXNlICsgTUU0MDAwX0NOVF9DT1VOVEVSXzFfUkVHOworCQljbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyA9CisJCSAgICBpbmZvLT50aW1lcl9yZWdiYXNlICsgTUU0MDAwX0NOVF9DT1VOVEVSXzJfUkVHOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2V4dF9pbnRfY29udGV4dChzdHJ1Y3QgbWU0MDAwX2luZm8gKmluZm8pCit7CisJc3RydWN0IG1lNDAwMF9leHRfaW50X2NvbnRleHQgKmV4dF9pbnRfY29udGV4dDsKKworCWlmIChpbmZvLT5ib2FyZF9wLT5jbnQuY291bnQpIHsKKwkJZXh0X2ludF9jb250ZXh0ID0KKwkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZXh0X2ludF9jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOmFsbG9jX2V4dF9pbnRfY29udGV4dCgpOkNhbid0IGdldCBtZW1vcnkgZm9yIGNudCBjb250ZXh0XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJaW5mby0+ZXh0X2ludF9jb250ZXh0ID0gZXh0X2ludF9jb250ZXh0OworCisJCXNwaW5fbG9ja19pbml0KCZleHRfaW50X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJZXh0X2ludF9jb250ZXh0LT5ib2FyZF9pbmZvID0gaW5mbzsKKworCQlleHRfaW50X2NvbnRleHQtPmZhc3luY19wdHIgPSBOVUxMOworCQlleHRfaW50X2NvbnRleHQtPmlycSA9IGluZm8tPmlycTsKKworCQlleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NUUkxfUkVHOworCQlleHRfaW50X2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IG1lNDAwMF9pbmZvICpib2FyZF9pbmZvOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9wcm9iZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgYm9hcmQgY29udGV4dCAqLworCWJvYXJkX2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWU0MDAwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvYXJkX2luZm8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOkNhbid0IGdldCBtZW1vcnkgZm9yIGJvYXJkIGluZm8gc3RydWN0dXJlXG4iKTsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBQUk9CRV9FUlJPUl8xOworCX0KKworCS8qIEFkZCB0byBnbG9iYWwgbGlua2VkIGxpc3QgKi8KKwlsaXN0X2FkZF90YWlsKCZib2FyZF9pbmZvLT5saXN0LCAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCk7CisKKwkvKiBHZXQgdGhlIFBDSSBiYXNlIHJlZ2lzdGVycyAqLworCXJlc3VsdCA9IGdldF9yZWdpc3RlcnMoZGV2LCBib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6Q2Fubm90IGdldCByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKKwkJZ290byBQUk9CRV9FUlJPUl8yOworCX0KKworCS8qIEVuYWJsZSB0aGUgZGV2aWNlICovCisJcmVzdWx0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOkNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIiwgX19mdW5jX18pOworCQlnb3RvIFBST0JFX0VSUk9SXzI7CisJfQorCisJLyogUmVxdWVzdCB0aGUgUENJIHJlZ2lzdGVyIHJlZ2lvbnMgKi8KKwlyZXN1bHQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgTUU0MDAwX05BTUUpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6Q2Fubm90IHJlcXVlc3QgSS9PIHJlZ2lvbnNcbiIsIF9fZnVuY19fKTsKKwkJZ290byBQUk9CRV9FUlJPUl8yOworCX0KKworCS8qIEluaXRpYWxpemUgYm9hcmQgaW5mbyAqLworCXJlc3VsdCA9IGluaXRfYm9hcmRfaW5mbyhkZXYsIGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczpDYW5ub3QgaW5pdCBiYW9yZCBpbmZvXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gUFJPQkVfRVJST1JfMzsKKwl9CisKKwkvKiBEb3dubG9hZCB0aGUgeGlsaW54IGZpcm13YXJlICovCisJcmVzdWx0ID0gbWU0MDAwX3hpbGlueF9kb3dubG9hZChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6Q2FuJ3QgZG93bmxvYWQgZmlybXdhcmVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBQUk9CRV9FUlJPUl8zOworCX0KKworCS8qIE1ha2UgYSBoYXJkd2FyZSByZXNldCAqLworCXJlc3VsdCA9IG1lNDAwMF9yZXNldF9ib2FyZChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgOkNhbid0IHJlc2V0IGJvYXJkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gUFJPQkVfRVJST1JfMzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmFsb2cgb3V0cHV0IGNvbnRleHQgc3RydWN0dXJlcyAqLworCXJlc3VsdCA9IGFsbG9jX2FvX2NvbnRleHRzKGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczpDYW5ub3QgYWxsb2NhdGUgYW8gY29udGV4dHNcbiIsIF9fZnVuY19fKTsKKwkJZ290byBQUk9CRV9FUlJPUl8zOworCX0KKworCS8qIEFsbG9jYXRlIGFuYWxvZyBpbnB1dCBjb250ZXh0ICovCisJcmVzdWx0ID0gYWxsb2NfYWlfY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6Q2Fubm90IGFsbG9jYXRlIGFpIGNvbnRleHRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBQUk9CRV9FUlJPUl80OworCX0KKworCS8qIEFsbG9jYXRlIGRpZ2l0YWwgSS9PIGNvbnRleHQgKi8KKwlyZXN1bHQgPSBhbGxvY19kaW9fY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6Q2Fubm90IGFsbG9jYXRlIGRpbyBjb250ZXh0XG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gUFJPQkVfRVJST1JfNTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBjb3VudGVyIGNvbnRleHQgKi8KKwlyZXN1bHQgPSBhbGxvY19jbnRfY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6Q2Fubm90IGFsbG9jYXRlIGNudCBjb250ZXh0XG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gUFJPQkVfRVJST1JfNjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBleHRlcm5hbCBpbnRlcnJ1cHQgY29udGV4dCAqLworCXJlc3VsdCA9IGFsbG9jX2V4dF9pbnRfY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOkNhbm5vdCBhbGxvY2F0ZSBleHRfaW50IGNvbnRleHRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBQUk9CRV9FUlJPUl83OworCX0KKworCXJldHVybiAwOworCitQUk9CRV9FUlJPUl83OgorCWtmcmVlKGJvYXJkX2luZm8tPmNudF9jb250ZXh0KTsKKworUFJPQkVfRVJST1JfNjoKKwlrZnJlZShib2FyZF9pbmZvLT5kaW9fY29udGV4dCk7CisKK1BST0JFX0VSUk9SXzU6CisJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dCk7CisKK1BST0JFX0VSUk9SXzQ6CisJcmVsZWFzZV9hb19jb250ZXh0cyhib2FyZF9pbmZvKTsKKworUFJPQkVfRVJST1JfMzoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisKK1BST0JFX0VSUk9SXzI6CisJbGlzdF9kZWwoJmJvYXJkX2luZm8tPmxpc3QpOworCWtmcmVlKGJvYXJkX2luZm8pOworCitQUk9CRV9FUlJPUl8xOgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3hpbGlueF9kb3dubG9hZChzdHJ1Y3QgbWU0MDAwX2luZm8gKmluZm8pCit7CisJaW50IHNpemUgPSAwOworCXUzMiB2YWx1ZSA9IDA7CisJaW50IGlkeCA9IDA7CisJdW5zaWduZWQgY2hhciAqZmlybTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJZmlybSA9IChpbmZvLT5kZXZpY2VfaWQgPT0gMHg0NjEwKSA/IHhpbGlueF9maXJtXzQ2MTAgOiB4aWxpbnhfZmlybTsKKworCS8qCisJICogU2V0IFBMWCBsb2NhbCBpbnRlcnJ1cHQgMiBwb2xhcml0eSB0byBoaWdoLgorCSAqIEludGVycnVwdCBpcyB0aHJvd24gYnkgaW5pdCBwaW4gb2YgeGlsaW54LgorCSAqLworCW91dGwoMHgxMCwgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKTsKKworCS8qIFNldCAvQ1MgYW5kIC9XUklURSBvZiB0aGUgWGlsaW54ICovCisJdmFsdWUgPSBpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSB8PSAweDEwMDsKKwlvdXRsKHZhbHVlLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJLyogSW5pdCBYaWxpbnggd2l0aCBDUzEgKi8KKwlpbmIoaW5mby0+cHJvZ3JhbV9yZWdiYXNlICsgMHhDOCk7CisKKwkvKiBXYWl0IHVudGlsIC9JTklUIHBpbiBpcyBzZXQgKi8KKwl1ZGVsYXkoMjApOworCWlmICghaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lOVENTUikgJiAweDIwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6Q2FuJ3QgaW5pdCBYaWxpbnhcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogUmVzZXQgL0NTIGFuZCAvV1JJVEUgb2YgdGhlIFhpbGlueCAqLworCXZhbHVlID0gaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdmFsdWUgJj0gfjB4MTAwOworCW91dGwodmFsdWUsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBEb3dubG9hZCBYaWxpbnggZmlybXdhcmUgKi8KKwlzaXplID0gKGZpcm1bMF0gPDwgMjQpICsgKGZpcm1bMV0gPDwgMTYpICsgKGZpcm1bMl0gPDwgOCkgKyBmaXJtWzNdOworCXVkZWxheSgxMCk7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHNpemU7IGlkeCsrKSB7CisJCW91dGIoZmlybVsxNiArIGlkeF0sIGluZm8tPnByb2dyYW1fcmVnYmFzZSk7CisKKwkJdWRlbGF5KDEwKTsKKworCQkvKiBDaGVjayBpZiBCVVNZIGZsYWcgaXMgbG93ICovCisJCWlmIChpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKSAmIDB4MjApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczpYaWxpbnggaXMgc3RpbGwgYnVzeSAoaWR4ID0gJWQpXG4iLCBfX2Z1bmNfXywKKwkJCSAgICAgICBpZHgpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlQREVCVUcoIm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTolZCBieXRlcyB3cml0dGVuXG4iLCBpZHgpOworCisJLyogSWYgZG9uZSBmbGFnIGlzIGhpZ2ggZG93bmxvYWQgd2FzIHN1Y2Nlc3NmdWwgKi8KKwlpZiAoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJiAweDQpIHsKKwkJUERFQlVHKCJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6RG9uZSBmbGFnIGlzIHNldFxuIik7CisJCVBERUJVRygibWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOkRvd25sb2FkIHdhcyBzdWNjZXNzZnVsXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6JXM6RE9ORSBmbGFnIGlzIG5vdCBzZXRcbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOiVzOkRvd25sb2FkIG5vdCBzdWNjZXNmdWxcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogU2V0IC9DUyBhbmQgL1dSSVRFICovCisJdmFsdWUgPSBpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSB8PSAweDEwMDsKKwlvdXRsKHZhbHVlLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3Jlc2V0X2JvYXJkKHN0cnVjdCBtZTQwMDBfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGljcjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfcmVzZXRfYm9hcmQoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBNYWtlIGEgaGFyZHdhcmUgcmVzZXQgKi8KKwlpY3IgPSBtZTQwMDBfaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJaWNyIHw9IDB4NDAwMDAwMDA7CisJbWU0MDAwX291dGwoaWNyLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCWljciAmPSB+MHg0MDAwMDAwMDsKKwltZTQwMDBfb3V0bChpY3IsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBTZXQgYm90aCBzdG9wIGJpdHMgaW4gdGhlIGFuYWxvZyBpbnB1dCBjb250cm9sIHJlZ2lzdGVyICovCisJbWU0MDAwX291dGwoTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AsCisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9DVFJMX1JFRyk7CisKKwkvKiBTZXQgYm90aCBzdG9wIGJpdHMgaW4gdGhlIGFuYWxvZyBvdXRwdXQgY29udHJvbCByZWdpc3RlciAqLworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfQ1RSTF9SRUcpOworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfQ1RSTF9SRUcpOworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfQ1RSTF9SRUcpOworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfQ1RSTF9SRUcpOworCisJLyogMHg4MDAwIHRvIHRoZSBEQUNzIG1lYW5zIGFuIG91dHB1dCB2b2x0YWdlIG9mIDBWICovCisJbWU0MDAwX291dGwoMHg4MDAwLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9TSU5HTEVfUkVHKTsKKwltZTQwMDBfb3V0bCgweDgwMDAsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX1NJTkdMRV9SRUcpOworCW1lNDAwMF9vdXRsKDB4ODAwMCwgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfU0lOR0xFX1JFRyk7CisJbWU0MDAwX291dGwoMHg4MDAwLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19TSU5HTEVfUkVHKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBQTFggKi8KKwltZTQwMDBfb3V0bCgweDQzLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JTlRDU1IpOworCisJLyogU2V0IHRoZSBhZHVzdG1lbnQgcmVnaXN0ZXIgZm9yIEFPIGRlbXV4ICovCisJbWU0MDAwX291dGwoTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9WQUxVRSwKKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcpOworCisJLyogU2V0IGRpZ2l0YWwgSS9PIGRpcmVjdGlvbiBmb3IgcG9ydCAwIHRvIG91dHB1dCBvbiBpc29sYXRlZCB2ZXJzaW9ucyAqLworCWlmICghKG1lNDAwMF9pbmwoaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0RJUl9SRUcpICYgMHgxKSkgeworCQltZTQwMDBfb3V0bCgweDEsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19DVFJMX1JFRyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX29wZW4oc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wKQoreworCWludCBib2FyZCwgZGV2LCBtb2RlOworCWludCBlcnIgPSAwOworCWludCBpOworCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKwlzdHJ1Y3QgbWU0MDAwX2luZm8gKmJvYXJkX2luZm8gPSBOVUxMOworCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCA9IE5VTEw7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICpkaW9fY29udGV4dCA9IE5VTEw7CisJc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCAqY250X2NvbnRleHQgPSBOVUxMOworCXN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0ICpleHRfaW50X2NvbnRleHQgPSBOVUxMOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9vcGVuKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQW5hbG9nIG91dHB1dCAqLworCWlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBBT19CT0FSRChpbm9kZV9wLT5pX3JkZXYpOworCQlkZXYgPSBBT19QT1JUKGlub2RlX3AtPmlfcmRldik7CisJCW1vZGUgPSBBT19NT0RFKGlub2RlX3AtPmlfcmRldik7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmJvYXJkID0gJWQgYW8gPSAlZCBtb2RlID0gJWRcbiIsIGJvYXJkLAorCQkgICAgICAgZGV2LCBtb2RlKTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0LCBpID0gMDsKKwkJICAgICBwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IHB0ciA9IHB0ci0+bmV4dCwgaSsrKSB7CisJCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBtZTQwMDBfaW5mbywgbGlzdCk7CisJCQlpZiAoaSA9PSBib2FyZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpCb2FyZCAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgYm9hcmQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBTZWFyY2ggZm9yIHRoZSBkYWMgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IGJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdC5uZXh0LCBpID0gMDsKKwkJICAgICBwdHIgIT0gJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdDsKKwkJICAgICBwdHIgPSBwdHItPm5leHQsIGkrKykgeworCQkJYW9fY29udGV4dCA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQsCisJCQkJCQkJCQlsaXN0KTsKKwkJCWlmIChpID09IGRldikKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkRldmljZSAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgZGV2KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogQ2hlY2sgaWYgbW9kZSBpcyB2YWxpZCAqLworCQlpZiAobW9kZSA+IDIpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpNb2RlIGlzIG5vdCB2YWxpZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIENoZWNrIGlmIG1vZGUgaXMgdmFsaWQgZm9yIHRoaXMgQU8gKi8KKwkJaWYgKChtb2RlICE9IE1FNDAwMF9BT19DT05WX01PREVfU0lOR0xFKQorCQkgICAgJiYgKGRldiA+PSBib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkFPICVkIG9ubHkgaW4gc2luZ2xlIG1vZGUgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGRldik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmYW9fY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoYW9fY29udGV4dC0+ZGFjX2luX3VzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkFPICVkIGFscmVhZHkgaW4gdXNlXG4iLAorCQkJICAgICAgIGRldik7CisJCQlzcGluX3VubG9jaygmYW9fY29udGV4dC0+dXNlX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlhb19jb250ZXh0LT5kYWNfaW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPnVzZV9sb2NrKTsKKworCQlhb19jb250ZXh0LT5tb2RlID0gbW9kZTsKKworCQkvKiBIb2xkIHRoZSBjb250ZXh0IGluIHByaXZhdGUgZGF0YSAqLworCQlmaWxlX3AtPnByaXZhdGVfZGF0YSA9IGFvX2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyICovCisJCWZpbGVfcC0+Zl9vcCA9IG1lNDAwMF9hb19mb3BzX2FycmF5W21vZGVdOworCisJCWVyciA9IG1lNDAwMF9hb19wcmVwYXJlKGFvX2NvbnRleHQpOworCQlpZiAoZXJyKSB7CisJCQlhb19jb250ZXh0LT5kYWNfaW5fdXNlID0gMDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCS8qIEFuYWxvZyBpbnB1dCAqLworCWVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubykgeworCQlib2FyZCA9IEFJX0JPQVJEKGlub2RlX3AtPmlfcmRldik7CisJCW1vZGUgPSBBSV9NT0RFKGlub2RlX3AtPmlfcmRldik7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmFpIGJvYXJkID0gJWQgbW9kZSA9ICVkXG4iLCBib2FyZCwgbW9kZSk7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dCwgaSA9IDA7CisJCSAgICAgcHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBwdHIgPSBwdHItPm5leHQsIGkrKykgeworCQkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgbWU0MDAwX2luZm8sIGxpc3QpOworCQkJaWYgKGkgPT0gYm9hcmQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Qm9hcmQgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGJvYXJkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJYWlfY29udGV4dCA9IGJvYXJkX2luZm8tPmFpX2NvbnRleHQ7CisKKwkJLyogQ2hlY2sgaWYgbW9kZSBpcyB2YWxpZCAqLworCQlpZiAobW9kZSA+IDUpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpNb2RlIGlzIG5vdCB2YWxpZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmYWlfY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoYWlfY29udGV4dC0+aW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6QUkgYWxyZWFkeSBpbiB1c2VcbiIpOworCQkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJYWlfY29udGV4dC0+aW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPnVzZV9sb2NrKTsKKworCQlhaV9jb250ZXh0LT5tb2RlID0gbW9kZTsKKworCQkvKiBIb2xkIHRoZSBjb250ZXh0IGluIHByaXZhdGUgZGF0YSAqLworCQlmaWxlX3AtPnByaXZhdGVfZGF0YSA9IGFpX2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyICovCisJCWZpbGVfcC0+Zl9vcCA9IG1lNDAwMF9haV9mb3BzX2FycmF5W21vZGVdOworCisJCS8qIFByZXBhcmUgYW5hbG9nIGlucHV0ICovCisJCW1lNDAwMF9haV9wcmVwYXJlKGFpX2NvbnRleHQpOworCX0KKwkvKiBEaWdpdGFsIEkvTyAqLworCWVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBESU9fQk9BUkQoaW5vZGVfcC0+aV9yZGV2KTsKKwkJZGV2ID0gMDsKKwkJbW9kZSA9IDA7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmJvYXJkID0gJWRcbiIsIGJvYXJkKTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCQkgICAgIHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgcHRyID0gcHRyLT5uZXh0KSB7CisJCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBtZTQwMDBfaW5mbywgbGlzdCk7CisJCQlpZiAoYm9hcmRfaW5mby0+Ym9hcmRfY291bnQgPT0gYm9hcmQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Qm9hcmQgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGJvYXJkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogU2VhcmNoIGZvciB0aGUgZGlvIGNvbnRleHQgKi8KKwkJZGlvX2NvbnRleHQgPSBib2FyZF9pbmZvLT5kaW9fY29udGV4dDsKKworCQkvKiBDaGVjayBpZiBhbHJlYWR5IG9wZW5lZCAqLworCQlzcGluX2xvY2soJmRpb19jb250ZXh0LT51c2VfbG9jayk7CisJCWlmIChkaW9fY29udGV4dC0+aW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6RElPIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXNwaW5fdW5sb2NrKCZkaW9fY29udGV4dC0+dXNlX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlkaW9fY29udGV4dC0+aW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmRpb19jb250ZXh0LT51c2VfbG9jayk7CisKKwkJLyogSG9sZCB0aGUgY29udGV4dCBpbiBwcml2YXRlIGRhdGEgKi8KKwkJZmlsZV9wLT5wcml2YXRlX2RhdGEgPSBkaW9fY29udGV4dDsKKworCQkvKiBTZXQgZmlsZSBvcGVyYXRpb25zIHBvaW50ZXIgdG8gc2luZ2xlIGZ1bmN0aW9ucyAqLworCQlmaWxlX3AtPmZfb3AgPSAmbWU0MDAwX2Rpb19mb3BzOworCisJCS8vbWU0MDAwX2Rpb19yZXNldChkaW9fY29udGV4dCk7CisJfQorCS8qIENvdW50ZXJzICovCisJZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubykgeworCQlib2FyZCA9IENOVF9CT0FSRChpbm9kZV9wLT5pX3JkZXYpOworCQlkZXYgPSAwOworCQltb2RlID0gMDsKKworCQlQREVCVUcoIm1lNDAwMF9vcGVuKCk6Ym9hcmQgPSAlZFxuIiwgYm9hcmQpOworCisJCS8qIFNlYXJjaCBmb3IgdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJZm9yIChwdHIgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJCSAgICAgcHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBwdHIgPSBwdHItPm5leHQpIHsKKwkJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KHB0ciwgc3RydWN0IG1lNDAwMF9pbmZvLCBsaXN0KTsKKwkJCWlmIChib2FyZF9pbmZvLT5ib2FyZF9jb3VudCA9PSBib2FyZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpCb2FyZCAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgYm9hcmQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBHZXQgdGhlIGNudCBjb250ZXh0ICovCisJCWNudF9jb250ZXh0ID0gYm9hcmRfaW5mby0+Y250X2NvbnRleHQ7CisKKwkJLyogQ2hlY2sgaWYgYWxyZWFkeSBvcGVuZWQgKi8KKwkJc3Bpbl9sb2NrKCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoY250X2NvbnRleHQtPmluX3VzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkNOVCBhbHJlYWR5IGluIHVzZVxuIik7CisJCQlzcGluX3VubG9jaygmY250X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJY250X2NvbnRleHQtPmluX3VzZSA9IDE7CisJCXNwaW5fdW5sb2NrKCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCisJCS8qIEhvbGQgdGhlIGNvbnRleHQgaW4gcHJpdmF0ZSBkYXRhICovCisJCWZpbGVfcC0+cHJpdmF0ZV9kYXRhID0gY250X2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyIHRvIHNpbmdsZSBmdW5jdGlvbnMgKi8KKwkJZmlsZV9wLT5mX29wID0gJm1lNDAwMF9jbnRfZm9wczsKKwl9CisJLyogRXh0ZXJuYWwgSW50ZXJydXB0ICovCisJZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBFWFRfSU5UX0JPQVJEKGlub2RlX3AtPmlfcmRldik7CisJCWRldiA9IDA7CisJCW1vZGUgPSAwOworCisJCVBERUJVRygibWU0MDAwX29wZW4oKTpib2FyZCA9ICVkXG4iLCBib2FyZCk7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkJICAgICBwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IHB0ciA9IHB0ci0+bmV4dCkgeworCQkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgbWU0MDAwX2luZm8sIGxpc3QpOworCQkJaWYgKGJvYXJkX2luZm8tPmJvYXJkX2NvdW50ID09IGJvYXJkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ciA9PSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkJvYXJkICVkIG5vdCBpbiBkZXZpY2UgbGlzdFxuIiwKKwkJCSAgICAgICBib2FyZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIEdldCB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRleHQgKi8KKwkJZXh0X2ludF9jb250ZXh0ID0gYm9hcmRfaW5mby0+ZXh0X2ludF9jb250ZXh0OworCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmY250X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJaWYgKGV4dF9pbnRfY29udGV4dC0+aW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6RXh0ZXJuYWwgaW50ZXJydXB0IGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXNwaW5fdW5sb2NrKCZleHRfaW50X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJZXh0X2ludF9jb250ZXh0LT5pbl91c2UgPSAxOworCQlzcGluX3VubG9jaygmZXh0X2ludF9jb250ZXh0LT51c2VfbG9jayk7CisKKwkJLyogSG9sZCB0aGUgY29udGV4dCBpbiBwcml2YXRlIGRhdGEgKi8KKwkJZmlsZV9wLT5wcml2YXRlX2RhdGEgPSBleHRfaW50X2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyIHRvIHNpbmdsZSBmdW5jdGlvbnMgKi8KKwkJZmlsZV9wLT5mX29wID0gJm1lNDAwMF9leHRfaW50X2ZvcHM7CisKKwkJLyogUmVxdWVzdCB0aGUgaW50ZXJydXB0IGxpbmUgKi8KKwkJZXJyID0KKwkJICAgIHJlcXVlc3RfaXJxKGV4dF9pbnRfY29udGV4dC0+aXJxLCBtZTQwMDBfZXh0X2ludF9pc3IsCisJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBNRTQwMDBfTkFNRSwKKwkJCQlleHRfaW50X2NvbnRleHQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Q2FuJ3QgZ2V0IGludGVycnVwdCBsaW5lIik7CisJCQlleHRfaW50X2NvbnRleHQtPmluX3VzZSA9IDA7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIFJlc2V0IHRoZSBjb3VudGVyICovCisJCW1lNDAwMF9leHRfaW50X2Rpc2FibGUoZXh0X2ludF9jb250ZXh0KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDptZTQwMDBfb3BlbigpOk1ham9yIG51bWJlciB1bmtub3duXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wKQoreworCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dDsKKwlzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQ7CisJc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCAqZGlvX2NvbnRleHQ7CisJc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCAqY250X2NvbnRleHQ7CisJc3RydWN0IG1lNDAwMF9leHRfaW50X2NvbnRleHQgKmV4dF9pbnRfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfcmVsZWFzZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJCS8qIE1hcmsgREFDIGFzIHVudXNlZCAqLworCQlhb19jb250ZXh0LT5kYWNfaW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubykgeworCQlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwkJLyogUmVzZXQgdGhlIGFuYWxvZyBpbnB1dCAqLworCQltZTQwMDBfYWlfcmVzZXQoYWlfY29udGV4dCk7CisKKwkJLyogRnJlZSB0aGUgaW50ZXJydXB0IGFuZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWlmIChhaV9jb250ZXh0LT5tb2RlKSB7CisJCQlmcmVlX2lycShhaV9jb250ZXh0LT5pcnEsIGFpX2NvbnRleHQpOworCQkJa2ZyZWUoYWlfY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiA9IE5VTEw7CisJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCQl9CisKKwkJLyogTWFyayBBSSBhcyB1bnVzZWQgKi8KKwkJYWlfY29udGV4dC0+aW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJZGlvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCQkvKiBNYXJrIGRpZ2l0YWwgSS9PIGFzIHVudXNlZCAqLworCQlkaW9fY29udGV4dC0+aW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJY250X2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCQkvKiBNYXJrIGNvdW50ZXJzIGFzIHVudXNlZCAqLworCQljbnRfY29udGV4dC0+aW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vKSB7CisJCWV4dF9pbnRfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJCS8qIERpc2FibGUgdGhlIGV4dGVybmVsIGludGVycnVwdCAqLworCQltZTQwMDBfZXh0X2ludF9kaXNhYmxlKGV4dF9pbnRfY29udGV4dCk7CisKKwkJZnJlZV9pcnEoZXh0X2ludF9jb250ZXh0LT5pcnEsIGV4dF9pbnRfY29udGV4dCk7CisKKwkJLyogRGVsZXRlIHRoZSBmYXN5bmMgc3RydWN0dXJlIGFuZCBmcmVlIG1lbW9yeSAqLworCQltZTQwMDBfZXh0X2ludF9mYXN5bmMoMCwgZmlsZV9wLCAwKTsKKworCQkvKiBNYXJrIGFzIHVudXNlZCAqLworCQlleHRfaW50X2NvbnRleHQtPmluX3VzZSA9IDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9yZWxlYXNlKCk6TWFqb3IgbnVtYmVyIHVua25vd25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFuYWxvZyBvdXRwdXQgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVwYXJlKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19wcmVwYXJlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGFvX2NvbnRleHQtPm1vZGUgPT0gTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTKSB7CisJCS8qIE9ubHkgZG8gYW55dGhpbmcgaWYgbm90IGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbW9kZSAqLworCQl1bnNpZ25lZCBsb25nIG1vZGUgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJaWYgKChtb2RlICYgTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTKQorCQkgICAgJiYgKG1vZGUgJiBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8pKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIFN0b3AgYW55IGNvbnZlcnNpb24gKi8KKwkJbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB0aGUgY29udHJvbCByZWdpc3RlciB0byBkZWZhdWx0IHN0YXRlICAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8gfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AsCisJCQkgICAgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCS8qIFNldCB0byBmYXN0ZXN0IHNhbXBsZSByYXRlICovCisJCW1lNDAwMF9vdXRsKDY1LCBhb19jb250ZXh0LT50aW1lcl9yZWcpOworCX0gZWxzZSBpZiAoYW9fY29udGV4dC0+bW9kZSA9PSBNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQpIHsKKwkJLyogT25seSBkbyBhbnl0aGluZyBpZiBub3QgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBtb2RlICovCisJCXVuc2lnbmVkIGxvbmcgbW9kZSA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlpZiAoKG1vZGUgJiBNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQpCisJCSAgICAmJiAobW9kZSAmIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTykpIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogU3RvcCBhbnkgY29udmVyc2lvbiAqLworCQltZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisKKwkJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIHRvIGRlZmF1bHQgc3RhdGUgICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCwKKwkJCSAgICBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkJLyogU2V0IHRvIGZhc3Rlc3Qgc2FtcGxlIHJhdGUgKi8KKwkJbWU0MDAwX291dGwoNjUsIGFvX2NvbnRleHQtPnRpbWVyX3JlZyk7CisJfSBlbHNlIGlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfU0lOR0xFKSB7CisJCS8qIE9ubHkgZG8gYW55dGhpbmcgaWYgbm90IGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbW9kZSAqLworCQl1bnNpZ25lZCBsb25nIG1vZGUgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJaWYgKCEKKwkJICAgIChtb2RlICYKKwkJICAgICAoTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5EIHwKKwkJICAgICAgTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTKSkpIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogU3RvcCBhbnkgY29udmVyc2lvbiAqLworCQltZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisKKwkJLyogQ2xlYXIgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCW1lNDAwMF9vdXRsKDB4MCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCS8qIFNldCB2b2x0YWdlIHRvIDBWICovCisJCW1lNDAwMF9vdXRsKDB4ODAwMCwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19wcmVwYXJlKCk6SW52YWxpZCBtb2RlIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19yZXNldChzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19yZXNldCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCWlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORCkgeworCQkvKgorCQkgKiBGaXJzdCBzdG9wIGNvbnZlcnNpb24gb2YgdGhlIERBQyBiZWZvcmUgcmVjb25maWd1cmUuCisJCSAqIFRoaXMgaXMgZXNzYW50aWFsLCBjYXVzZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KKwkJICogSWYgbm90IHN0b3BwZWQgYmVmb3JlIGNvbmZpZ3VyaW5nIG1vZGUsIGl0IGNvdWxkCisJCSAqIHdhbGsgaW4gYSB1bmRlZmluZWQgc3RhdGUuCisJCSAqLworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJd2FpdF9ldmVudF90aW1lb3V0KHF1ZXVlLAorCQkJKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkJTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSA9PSAwLAorCQkJMSk7CisKKwkJLyogU2V0IHRvIHRyYW5zcGFyZW50IG1vZGUgKi8KKwkJbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB0byBzaW5nbGUgbW9kZSBpbiBvcmRlciB0byBzZXQgZGVmYXVsdCB2b2x0YWdlICovCisJCW1lNDAwMF9vdXRsKDB4MCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJCS8qIFNldCB2b2x0YWdlIHRvIDBWICovCisJCW1lNDAwMF9vdXRsKDB4ODAwMCwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisKKwkJLyogU2V0IHRvIGZhc3Rlc3Qgc2FtcGxlIHJhdGUgKi8KKwkJbWU0MDAwX291dGwoNjUsIGFvX2NvbnRleHQtPnRpbWVyX3JlZyk7CisKKwkJLyogU2V0IHRoZSBvcmlnaW5hbCBtb2RlIGFuZCBlbmFibGUgRklGTyAqLworCQltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCwKKwkJCSAgICBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJfSBlbHNlIGlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUykgeworCQkvKgorCQkgKiBGaXJzdCBzdG9wIGNvbnZlcnNpb24gb2YgdGhlIERBQyBiZWZvcmUgcmVjb25maWd1cmUuCisJCSAqIFRoaXMgaXMgZXNzYW50aWFsLCBjYXVzZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KKwkJICogSWYgbm90IHN0b3BwZWQgYmVmb3JlIGNvbmZpZ3VyaW5nIG1vZGUsIGl0IGNvdWxkCisJCSAqIHdhbGsgaW4gYSB1bmRlZmluZWQgc3RhdGUuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUDsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkJd2FpdF9ldmVudF90aW1lb3V0KHF1ZXVlLAorCQkJKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkJTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSA9PSAwLAorCQkJMSk7CisKKwkJLyogQ2xlYXIgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQlhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwkJYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwkJLyogU2V0IHRvIHRyYW5zcGFyZW50IG1vZGUgKi8KKwkJbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB0byBzaW5nbGUgbW9kZSBpbiBvcmRlciB0byBzZXQgZGVmYXVsdCB2b2x0YWdlICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJbWU0MDAwX291dGwoMHgwLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJLyogU2V0IHZvbHRhZ2UgdG8gMFYgKi8KKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKworCQkvKiBTZXQgdG8gZmFzdGVzdCBzYW1wbGUgcmF0ZSAqLworCQltZTQwMDBfb3V0bCg2NSwgYW9fY29udGV4dC0+dGltZXJfcmVnKTsKKworCQkvKiBTZXQgdGhlIG9yaWdpbmFsIG1vZGUgYW5kIGVuYWJsZSBGSUZPICovCisJCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QLAorCQkJICAgIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQkvKiBTZXQgdG8gdHJhbnNwYXJlbnQgbW9kZSAqLworCQltZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisKKwkJLyogU2V0IHZvbHRhZ2UgdG8gMFYgKi8KKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX3Npbmcoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyICpidWZmLAorCQkJCSAgICBzaXplX3QgY250LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0ID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwl1MzIgdmFsdWU7CisJY29uc3QgdTE2ICpidWZmZXIgPSAoY29uc3QgdTE2ICopYnVmZjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfc2luZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChjbnQgIT0gMikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczpXcml0ZSBjb3VudCBpcyBub3QgMlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZ2V0X3VzZXIodmFsdWUsIGJ1ZmZlcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJbWU0MDAwX291dGwodmFsdWUsIGFvX2NvbnRleHQtPnNpbmdsZV9yZWcpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV93cmFwKHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciAqYnVmZiwKKwkJCQkgICAgc2l6ZV90IGNudCwgbG9mZl90ICpvZmZwKQoreworCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJc2l6ZV90IGk7CisJdTMyIHZhbHVlOworCXUzMiB0bXA7CisJY29uc3QgdTE2ICpidWZmZXIgPSAoY29uc3QgdTE2ICopYnVmZjsKKwlzaXplX3QgY291bnQgPSBjbnQgLyAyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb193cml0ZV93cmFwKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgYSBjb252ZXJzaW9uIGlzIGFscmVhZHkgcnVubmluZyAqLworCWlmIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6VGhlcmUgaXMgYWxyZWFkeSBhIGNvbnZlcnNpb24gcnVubmluZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChjb3VudCA+IE1FNDAwMF9BT19GSUZPX0NPVU5UKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOkNhbid0IGxvYWQgbW9yZSB0aGFuICVkIHZhbHVlc1xuIiwgX19mdW5jX18sCisJCSAgICAgICBNRTQwMDBfQU9fRklGT19DT1VOVCk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCS8qIFJlc2V0IHRoZSBGSUZPICovCisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTzsKKwlvdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk87CisJb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChnZXRfdXNlcih2YWx1ZSwgYnVmZmVyICsgaSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczpDYW5ub3QgY29weSBkYXRhIGZyb20gdXNlclxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJaWYgKCgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDFfRklGT19SRUcpCisJCSAgICB8fCAoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAzX0ZJRk9fUkVHKSkKKwkJCXZhbHVlID0gdmFsdWUgPDwgMTY7CisJCW91dGwodmFsdWUsIGFvX2NvbnRleHQtPmZpZm9fcmVnKTsKKwl9CisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb193cml0ZV93cmFwKCkgaXMgbGVhdmVkIHdpdGggJWRcbiIsIGkgKiAyKTsKKworCXJldHVybiBpICogMjsKK30KKworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX2NvbnQoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyICpidWZmLAorCQkJCSAgICBzaXplX3QgY250LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0ID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwljb25zdCB1MTYgKmJ1ZmZlciA9IChjb25zdCB1MTYgKilidWZmOworCXNpemVfdCBjb3VudCA9IGNudCAvIDI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOworCWludCBjID0gMDsKKwlpbnQgayA9IDA7CisJaW50IHJldCA9IDA7CisJdTE2IHN2YWx1ZTsKKwl1MzIgbHZhbHVlOworCWludCBpOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogQ2hlY2sgY291bnQgKi8KKwlpZiAoY291bnQgPD0gMCkgeworCQlQREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCk6Q291bnQgaXMgMFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fQVBQRU5EKSB7CisJCVBERUJVRygibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpBcHBlbmQgZGF0YSB0byBkYXRhIHN0cmVhbVxuIik7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoYW9fY29udGV4dC0+cGlwZV9mbGFnKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fd3JpdGVfY29udCgpOkJyb2tlbiBwaXBlIGluIG5vbmJsb2NraW5nIHdyaXRlXG4iKTsKKwkJCQkJcmV0dXJuIC1FUElQRTsKKwkJCQl9CisJCQkJYyA9IG1lNDAwMF9zcGFjZV90b19lbmQoYW9fY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkJTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CisJCQkJaWYgKCFjKSB7CisJCQkJCVBERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOlJldHVybmluZyBmcm9tIG5vbmJsb2NraW5nIHdyaXRlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYW9fY29udGV4dC0+d2FpdF9xdWV1ZSwKKwkJCQkJCQkgKGMgPQorCQkJCQkJCSAgbWU0MDAwX3NwYWNlX3RvX2VuZAorCQkJCQkJCSAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJCSAgIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKSk7CisJCQkJaWYgKGFvX2NvbnRleHQtPnBpcGVfZmxhZykgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkJyb2tlbiBwaXBlIGluIGJsb2NraW5nIHdyaXRlXG4iKTsKKwkJCQkJcmV0dXJuIC1FUElQRTsKKwkJCQl9CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9jb250KCk6V2FpdCBmb3IgZnJlZSBidWZmZXIgaW50ZXJydXB0ZWQgZnJvbSBzaWduYWxcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCX0KKworCQkJUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOlNwYWNlIHRvIGVuZCA9ICVkXG4iLCBjKTsKKworCQkJLyogT25seSBhYmxlIHRvIHdyaXRlIHNpemUgb2YgZnJlZSBidWZmZXIgb3Igc2l6ZSBvZiBjb3VudCAqLworCQkJaWYgKGNvdW50IDwgYykKKwkJCQljID0gY291bnQ7CisKKwkJCWsgPSAyICogYzsKKwkJCWsgLT0gY29weV9mcm9tX3VzZXIoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQsIGJ1ZmZlciwKKwkJCQkJICAgIGspOworCQkJYyA9IGsgLyAyOworCQkJUERFQlVHCisJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkNvcHkgJWQgdmFsdWVzIGZyb20gdXNlciBzcGFjZVxuIiwKKwkJCSAgICAgYyk7CisKKwkJCWlmICghYykKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJICAgICBjKSAmIChNRTQwMDBfQU9fQlVGRkVSX0NPVU5UIC0gMSk7CisJCQlidWZmZXIgKz0gYzsKKwkJCWNvdW50IC09IGM7CisJCQlyZXQgKz0gYzsKKworCQkJLyogVmFsdWVzIGFyZSBub3cgYXZhaWxhYmxlIHNvIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJCWlmIChtZTQwMDBfYnVmX2NvdW50CisJCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKSkgeworCQkJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCX0KKworCQkvKiBXYWl0IHVudGlsIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgaWYgT19TWU5DIGlzIHNldCAqLworCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX1NZTkMpIHsKKwkJCXdoaWxlIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJICAgICAgIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJCWlmIChhb19jb250ZXh0LT5waXBlX2ZsYWcpIHsKKwkJCQkJUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6QnJva2VuIHBpcGUgZGV0ZWN0ZWQgYWZ0ZXIgc3luY1xuIik7CisJCQkJCXJldHVybiAtRVBJUEU7CisJCQkJfQorCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfY29udCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzeW5jIGludGVycnVwdGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlQREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCk6UHJlbG9hZCBEQUMgRklGT1xuIik7CisJCWlmICgobWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCSAgICAgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9jb250KCk6Q2FuJ3QgUHJlbG9hZCBEQUMgRklGTyB3aGlsZSBjb252ZXJzaW9uIGlzIHJ1bm5pbmdcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCS8qIENsZWFyIHRoZSBGSUZPICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCSAgICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJRKTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk87CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCS8qIENsZWFyIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJCWFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCisJCS8qIFJlc2V0IHRoZSBicm9rZW4gcGlwZSBmbGFnICovCisJCWFvX2NvbnRleHQtPnBpcGVfZmxhZyA9IDA7CisKKwkJLyogT25seSBhYmxlIHRvIHdyaXRlIHNpemUgb2YgZmlmbyBvciBjb3VudCAqLworCQljID0gTUU0MDAwX0FPX0ZJRk9fQ09VTlQ7CisJCWlmIChjb3VudCA8IGMpCisJCQljID0gY291bnQ7CisKKwkJUERFQlVHCisJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6V3JpdGUgJWQgdmFsdWVzIHRvIERBQyBvbiAweCVsWFxuIiwKKwkJICAgICBjLCBhb19jb250ZXh0LT5maWZvX3JlZyk7CisKKwkJLyogV3JpdGUgdmFsdWVzIHRvIHRoZSBmaWZvICovCisJCWZvciAoaSA9IDA7IGkgPCBjOyBpKyspIHsKKwkJCWlmIChnZXRfdXNlcihzdmFsdWUsIGJ1ZmZlcikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmICgoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0KKwkJCSAgICAgTUU0MDAwX0FPXzAxX0ZJRk9fUkVHKQorCQkJICAgIHx8ICgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PQorCQkJCU1FNDAwMF9BT18wM19GSUZPX1JFRykpIHsKKwkJCQlsdmFsdWUgPSAoKHUzMikgc3ZhbHVlKSA8PCAxNjsKKwkJCX0gZWxzZQorCQkJCWx2YWx1ZSA9ICh1MzIpIHN2YWx1ZTsKKworCQkJb3V0bChsdmFsdWUsIGFvX2NvbnRleHQtPmZpZm9fcmVnKTsKKwkJCWJ1ZmZlcisrOworCQl9CisJCWNvdW50IC09IGM7CisJCXJldCArPSBjOworCisJCXdoaWxlICgxKSB7CisJCQkvKiBHZXQgZnJlZSBidWZmZXIgKi8KKwkJCWMgPSBtZTQwMDBfc3BhY2VfdG9fZW5kKGFvX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CisKKwkJCWlmIChjID09IDApCisJCQkJcmV0dXJuICgyICogcmV0KTsKKworCQkJLyogT25seSBhYmxlIHRvIHdyaXRlIHNpemUgb2YgZnJlZSBidWZmZXIgb3Igc2l6ZSBvZiBjb3VudCAqLworCQkJaWYgKGNvdW50IDwgYykKKwkJCQljID0gY291bnQ7CisKKwkJCS8qIElmIGNvdW50ID0gMCByZXR1cm4gdG8gdXNlciAqLworCQkJaWYgKGMgPD0gMCkgeworCQkJCVBERUJVRworCQkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6Q291bnQgcmVhY2hlZCAwXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJayA9IDIgKiBjOworCQkJayAtPSBjb3B5X2Zyb21fdXNlcihhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkgICAgYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCwgYnVmZmVyLAorCQkJCQkgICAgayk7CisJCQljID0gayAvIDI7CisJCQlQREVCVUcKKwkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6V3JvdGUgJWQgdmFsdWVzIHRvIGJ1ZmZlclxuIiwKKwkJCSAgICAgYyk7CisKKwkJCWlmICghYykKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJICAgICBjKSAmIChNRTQwMDBfQU9fQlVGRkVSX0NPVU5UIC0gMSk7CisJCQlidWZmZXIgKz0gYzsKKwkJCWNvdW50IC09IGM7CisJCQlyZXQgKz0gYzsKKworCQkJLyogSWYgdmFsdWVzIGluIHRoZSBidWZmZXIgYXJlIGF2YWlsYWJsZSBzbyBlbmFibGUgaW50ZXJydXB0cyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCQlpZiAobWU0MDAwX2J1Zl9jb3VudAorCQkJICAgIChhb19jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCkpIHsKKwkJCQlQREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkVuYWJsZSBJbnRlcnJ1cHRzXG4iKTsKKwkJCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CisJCQkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl9CisJfQorCisJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlyZXR1cm4gKHJldCA9PSAwKSA/IC1FQUdBSU4gOiAyICogcmV0OworCX0KKworCXJldHVybiAyICogcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1lNDAwMF9hb19wb2xsX2NvbnQoc3RydWN0IGZpbGUgKmZpbGVfcCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcG9sbF9jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJcG9sbF93YWl0KGZpbGVfcCwgJmFvX2NvbnRleHQtPndhaXRfcXVldWUsIHdhaXQpOworCisJLyogR2V0IGZyZWUgYnVmZmVyICovCisJaWYgKG1lNDAwMF9zcGFjZV90b19lbmQoYW9fY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKQorCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19wb2xsX2NvbnQoKTpSZXR1cm4gbWFzayAlbFhcbiIsIG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ZzeW5jX2NvbnQoc3RydWN0IGZpbGUgKmZpbGVfcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5X3AsCisJCQkJaW50IGRhdGFzeW5jKQoreworCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZnN5bmNfY29udCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocXVldWUsCisJCQkhKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSksCisJCQkxKTsKKwkJaWYgKGFvX2NvbnRleHQtPnBpcGVfZmxhZykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOkJyb2tlbiBwaXBlIGRldGVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVQSVBFOworCQl9CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9faW9jdGxfc2luZyhzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkJdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9faW9jdGxfc2luZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXJldHVybiAtRU5PVFRZOworCQlQREVCVUcoIm1lNDAwMF9hb19pb2N0bF9zaW5nKCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKGludCAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19QUkVMT0FEOgorCQlyZXR1cm4gbWU0MDAwX2FvX3ByZWxvYWQoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fUFJFTE9BRF9VUERBVEU6CisJCXJldHVybiBtZTQwMDBfYW9fcHJlbG9hZF91cGRhdGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChzdHJ1Y3QgbWU0MDAwX3VzZXJfaW5mbyAqKWFyZywKKwkJCQkJICAgIGFvX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19FWF9UUklHOgorCQlyZXR1cm4gbWU0MDAwX2FvX3NpbXVsdGFuZW91c19leF90cmlnKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19TVzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfc3coYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX1VQREFURToKKwkJcmV0dXJuCisJCSAgICBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgKKwkJICAgIAkJKHN0cnVjdCBtZTQwMDBfYW9fY2hhbm5lbF9saXN0ICopYXJnLAorCQkJCWFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfVElNRU9VVDoKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKHVuc2lnbmVkIGxvbmcgKilhcmcsCisJCQkJCQkgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRElTQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19kaXNhYmxlX2RvKGFvX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19pb2N0bF9zaW5nKCk6U2VydmljZSBudW1iZXIgaW52YWxpZFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF93cmFwKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19pb2N0bF93cmFwKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcmV0dXJuIC1FTk9UVFk7CisJCVBERUJVRygibWU0MDAwX2FvX2lvY3RsX3dyYXAoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FPX1NUQVJUOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0YXJ0KCh1bnNpZ25lZCBsb25nICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fSU1NRURJQVRFX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fUkVTRVQ6CisJCXJldHVybiBtZTQwMDBfYW9fcmVzZXQoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fVElNRVJfU0VUX0RJVklTT1I6CisJCXJldHVybiBtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IoKHUzMiAqKSBhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgoaW50ICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2VuYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygoc3RydWN0IG1lNDAwMF91c2VyX2luZm8gKilhcmcsCisJCQkJCSAgICBhb19jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BT19GU01fU1RBVEU6CisJCXJldHVybiBtZTQwMDBfYW9fZnNtX3N0YXRlKChpbnQgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VOQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19lbmFibGVfZG8oYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRElTQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19kaXNhYmxlX2RvKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0VYX1RSSUc6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19TVzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19zdyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF9jb250KHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19pb2N0bF9jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcmV0dXJuIC1FTk9UVFk7CisJCVBERUJVRygibWU0MDAwX2FvX2lvY3RsX2NvbnQoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FPX1NUQVJUOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0YXJ0KCh1bnNpZ25lZCBsb25nICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fSU1NRURJQVRFX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fUkVTRVQ6CisJCXJldHVybiBtZTQwMDBfYW9fcmVzZXQoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fVElNRVJfU0VUX0RJVklTT1I6CisJCXJldHVybiBtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IoKHUzMiAqKSBhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgoaW50ICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2VuYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VOQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19lbmFibGVfZG8oYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRElTQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19kaXNhYmxlX2RvKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0ZTTV9TVEFURToKKwkJcmV0dXJuIG1lNDAwMF9hb19mc21fc3RhdGUoKGludCAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChzdHJ1Y3QgbWU0MDAwX3VzZXJfaW5mbyAqKWFyZywKKwkJCQkJICAgIGFvX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0VYX1RSSUc6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19TVzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19zdyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fR0VUX0ZSRUVfQlVGRkVSOgorCQlyZXR1cm4gbWU0MDAwX2FvX2dldF9mcmVlX2J1ZmZlcigodW5zaWduZWQgbG9uZyAqKWFyZywKKwkJCQkJCSBhb19jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N0YXJ0KHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCSAgIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgcmVmOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zdGFydCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcih0aW1lb3V0LCBhcmcpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19zdGFydCgpOkNhbm5vdCBjb3B5IGRhdGEgZnJvbSB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfihNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCWlmICgodG1wICYgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHKSkgeworCQlpZiAodGltZW91dCkgeworCQkJcmVmID0gamlmZmllczsKKwkJCXdoaWxlICghCisJCQkgICAgICAgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkJTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3N0YXJ0KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3N0YXJ0KCk6VGltZW91dCByZWFjaGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3RvcChzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zdG9wKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogU2V0IHRoZSBzdG9wIGJpdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9fc3RvcCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzdG9wIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwkvKiBDbGVhciB0aGUgc3RvcCBiaXQgKi8KKwkvL3RtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX1NUT1A7CisJLy9tZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJLyogQ2xlYXIgdGhlIHN0b3AgYml0cyAqLworCS8vdG1wICY9IH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCS8vbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IodTMyICphcmcsCisJCQkJICAgICAgIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCkKK3sKKwl1MzIgZGl2aXNvcjsKKwl1MzIgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb190aW1lciBzZXRfZGl2aXNvcigpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcihkaXZpc29yLCBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3RpbWVyX3NldF9kaXZpc29yKCk6Q2FuJ3Qgc2V0IHRpbWVyIHdoaWxlIERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlQREVCVUcoIm1lNDAwMF9hb190aW1lciBzZXRfZGl2aXNvcigpOkRpdmlzb3IgZnJvbSB1c2VyID0gJWRcbiIsCisJICAgICAgIGRpdmlzb3IpOworCisJLyogQ2hlY2sgaWYgdGhlIGRpdmlzb3IgaXMgcmlnaHQuIE1FNDAwMF9BT19NSU5fVElDS1MgaXMgdGhlIGxvd2VzdCAqLworCWlmIChkaXZpc29yIDwgTUU0MDAwX0FPX01JTl9USUNLUykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3RpbWVyIHNldF9kaXZpc29yKCk6RGl2aXNvciB0byBsb3dcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaXggYnVnIGluIEZpcm13YXJlICovCisJZGl2aXNvciAtPSAyOworCisJUERFQlVHKCJtZTQwMDBfYW9fdGltZXIgc2V0X2Rpdmlzb3IoKTpEaXZpc29yIHRvIEhXID0gJWRcbiIsIGRpdmlzb3IpOworCisJLyogV3JpdGUgdGhlIGRpdmlzb3IgKi8KKwltZTQwMDBfb3V0bChkaXZpc29yLCBhb19jb250ZXh0LT50aW1lcl9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoaW50ICphcmcsCisJCQkJICAgICAgc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCWludCBtb2RlOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcihtb2RlLCBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKTpDYW4ndCBzZXQgdHJpZ2dlciB3aGlsZSBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKG1vZGUgPT0gTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfUklTSU5HKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0VER0UgfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19CT1RIKTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChtb2RlID09IE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX0ZBTExJTkcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0JPVEg7CisJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19FREdFOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfQk9USCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PQorCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfRURHRSB8CisJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19CT1RIOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgpOkludmFsaWQgdHJpZ2dlciBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUoKTpDYW4ndCBlbmFibGUgdHJpZ2dlciB3aGlsZSBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRVhfVFJJRzsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUoKTpDYW4ndCBkaXNhYmxlIHRyaWdnZXIgd2hpbGUgREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCXUzMiB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCS8qIEJlIGNhcmVmdWwgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20KKwkgICBtZTQwMDBfYW9fc3luY2hyb25vdXMgZGlzYWJsZSAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoKTpDYW4ndCBkaXNhYmxlIHdoaWxlIERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJdG1wICY9IH4oMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRGlzYWJsZSBwcmVsb2FkIGJpdAorCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBEaXNhYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZXhfdHJpZyhzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2V4X3RyaWcoKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJdG1wIHw9ICgweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBFbmFibGUgcHJlbG9hZCBiaXQKKwl0bXAgfD0gKDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBFbmFibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19zdyhzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3N3KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXRtcCB8PSAoMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRW5hYmxlIHByZWxvYWQgYml0CisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZWxvYWQoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcHJlbG9hZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKwlyZXR1cm4gbWU0MDAwX2FvX3NpbXVsdGFuZW91c19zdyhhb19jb250ZXh0KTsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fcHJlbG9hZF91cGRhdGUoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdTMyIGN0cmw7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3ByZWxvYWRfdXBkYXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCWxpc3RfZm9yX2VhY2goZW50cnksICZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QpIHsKKwkJLyogVGhlIGNoYW5uZWxzIHdlIHVwZGF0ZSBtdXN0IGJlIGluIHRoZSBmb2xsb3dpbmcgc3RhdGUgOgorCQkgICAtIE1vZGUgQQorCQkgICAtIEhhcmR3YXJlIHRyaWdnZXIgaXMgZGlzYWJsZWQKKwkJICAgLSBDb3JyZXNwb25kaW5nIHNpbXVsdGFuZW91cyBiaXQgaXMgcmVzZXQKKwkJICovCisJCWN0cmwgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJaWYgKCEKKwkJICAgIChjdHJsICYKKwkJICAgICAoTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMCB8IE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzEgfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUcpKSkgeworCQkJaWYgKCEKKwkJCSAgICAodG1wICYKKwkJCSAgICAgKDB4MSA8PAorCQkJICAgICAgKCgoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICopZW50cnkpLT5pbmRleAorCQkJICAgICAgCQkJCQkgICAgICArIDE2KSkpKSB7CisJCQkJdG1wICY9CisJCQkJICAgIH4oMHgxIDw8CisJCQkJICAgICAgKCgoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICopZW50cnkpLT4KKwkJCQkgICAgICAJCQkJCWluZGV4KSk7CisJCQl9CisJCX0KKwl9CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZShzdHJ1Y3QgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdCAqYXJnLAorCQkJCQkgc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCWludCBlcnI7CisJaW50IGk7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdCBjaGFubmVsczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY2hhbm5lbHMsIGFyZywKKwkJCXNpemVvZihzdHJ1Y3QgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCk6Q2FuJ3QgY29weSBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJY2hhbm5lbHMubGlzdCA9CisJICAgIGt6YWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogY2hhbm5lbHMuY291bnQsIEdGUF9LRVJORUwpOworCWlmICghY2hhbm5lbHMubGlzdCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKTpDYW4ndCBnZXQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQ29weSBjaGFubmVsIGxpc3QgZnJvbSB1c2VyICovCisJZXJyID0KKwkgICAgY29weV9mcm9tX3VzZXIoY2hhbm5lbHMubGlzdCwgYXJnLT5saXN0LAorCQkJICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogY2hhbm5lbHMuY291bnQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCk6Q2FuJ3QgY29weSBsaXN0XG4iKTsKKwkJa2ZyZWUoY2hhbm5lbHMubGlzdCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHMuY291bnQ7IGkrKykgeworCQlpZiAoY2hhbm5lbHMubGlzdFtpXSA+CisJCSAgICBhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5jb3VudCkgeworCQkJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJCQlrZnJlZShjaGFubmVscy5saXN0KTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKTpJbnZhbGlkIGJvYXJkIG51bWJlciBzcGVjaWZpZWRcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJdG1wICY9IH4oMHgxIDw8IGNoYW5uZWxzLmxpc3RbaV0pOwkvLyBDbGVhciB0aGUgcHJlbG9hZCBiaXQKKwkJdG1wICY9IH4oMHgxIDw8IChjaGFubmVscy5saXN0W2ldICsgMTYpKTsJLy8gQ2xlYXIgdGhlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwl9CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJa2ZyZWUoY2hhbm5lbHMubGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZyhzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zeW5jaHJvbm91c19leF90cmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZygpOiBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXRtcCAmPSB+KDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIERpc2FibGUgc3luY2hyb25vdXMgc3cgYml0CisJdG1wIHw9IDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNik7CS8vIEVuYWJsZSBzeW5jaHJvbm91cyBodyBiaXQKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCS8qIE1ha2UgcnVubmFibGUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlpZiAodG1wICYgKE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzAgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8xKSkgeworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19zdyhzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zeW5jaHJvbm91c19zdygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fc3luY2hyb25vdXNfc3coKTogREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwl0bXAgfD0gMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4OwkvLyBFbmFibGUgc3luY2hyb25vdXMgc3cgYml0CisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgc3luY2hyb25vdXMgaHcgYml0CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwkvKiBNYWtlIHJ1bm5hYmxlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJaWYgKHRtcCAmIChNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8wIHwgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMSkpIHsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJICAgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfZGlzYWJsZShzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJcmV0dXJuIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShhb19jb250ZXh0KTsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZ2V0X2ZyZWVfYnVmZmVyKHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqYW9fY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGM7CisJaW50IGVycjsKKworCWMgPSBtZTQwMDBfYnVmX3NwYWNlKGFvX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKTsKKworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZjLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyByZWY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoZ2V0X3VzZXIodGltZW91dCwgYXJnKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJaWYgKCh0bXAgJiBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUcpKSB7CisJCWlmICh0aW1lb3V0KSB7CisJCQlyZWYgPSBqaWZmaWVzOworCQkJd2hpbGUgKChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJCU1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCQlpZiAoKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6VGltZW91dCByZWFjaGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJd2hpbGUgKChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJCU1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6RXh0ZXJuYWwgVHJpZ2dlciBpcyBub3QgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19lbmFibGVfZG8oc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZW5hYmxlX2RvKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogT25seSBhdmFpbGFibGUgZm9yIGFuYWxvZyBvdXRwdXQgMyAqLworCWlmIChhb19jb250ZXh0LT5pbmRleCAhPSAzKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19lbmFibGVfZG8oKTpPbmx5IGF2YWlsYWJsZSBmb3IgYW5hbG9nIG91dHB1dCAzXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9hb19lbmFibGVfZG8oKTogREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFNldCB0aGUgc3RvcCBiaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0RPOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZGlzYWJsZV9kbyhzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKmFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19kaXNhYmxlX2RvKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogT25seSBhdmFpbGFibGUgZm9yIGFuYWxvZyBvdXRwdXQgMyAqLworCWlmIChhb19jb250ZXh0LT5pbmRleCAhPSAzKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19kaXNhYmxlKCk6T25seSBhdmFpbGFibGUgZm9yIGFuYWxvZyBvdXRwdXQgM1xuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fZGlzYWJsZV9kbygpOiBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfihNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0RPKTsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ZzbV9zdGF0ZShpbnQgKmFyZywgc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19mc21fc3RhdGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPQorCSAgICAobWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgPyAxCisJICAgIDogMDsKKworCWlmIChhb19jb250ZXh0LT5waXBlX2ZsYWcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fZnNtX3N0YXRlKCk6QnJva2VuIHBpcGUgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gLUVQSVBFOworCX0KKworCWlmIChwdXRfdXNlcih0bXAsIGFyZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fZnNtX3N0YXRlKCk6Q2Fubm90IGNvcHkgdG8gdXNlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQW5hbG9nIGlucHV0IHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9haV9wcmVwYXJlKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9wcmVwYXJlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogU2V0IHRoZSBuZXcgbW9kZSBhbmQgc3RvcCBiaXRzICovCisJbWU0MDAwX291dGwoYWlfY29udGV4dC0+CisJCSAgICBtb2RlIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AgfAorCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBTZXQgdGhlIHRpbWVyIHJlZ2lzdGVycyAqLworCWFpX2NvbnRleHQtPmNoYW5fdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93ID0gMDsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2ggPSAwOworCisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKworCWFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9jb3VudCA9IDA7CisKKwlpZiAoYWlfY29udGV4dC0+bW9kZSkgeworCQkvKiBSZXF1ZXN0IHRoZSBpbnRlcnJ1cHQgbGluZSAqLworCQllcnIgPQorCQkgICAgcmVxdWVzdF9pcnEoYWlfY29udGV4dC0+aXJxLCBtZTQwMDBfYWlfaXNyLAorCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgTUU0MDAwX05BTUUsCisJCQkJYWlfY29udGV4dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3ByZXBhcmUoKTpDYW4ndCBnZXQgaW50ZXJydXB0IGxpbmUiKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogQWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiA9CisJCSAgICBremFsbG9jKE1FNDAwMF9BSV9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWlfY29udGV4dC0+Y2lyY19idWYuYnVmKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9wcmVwYXJlKCk6Q2FuJ3QgZ2V0IGNpcmN1bGFyIGJ1ZmZlclxuIik7CisJCQlmcmVlX2lycShhaV9jb250ZXh0LT5pcnEsIGFpX2NvbnRleHQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQkvKiBDbGVhciB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfcmVzZXQoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfcmVzZXQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKgorCSAqIEZpcnN0IHN0b3AgY29udmVyc2lvbiBvZiB0aGUgc3RhdGUgbWFjaGluZSBiZWZvcmUgcmVjb25maWd1cmUuCisJICogSWYgbm90IHN0b3BwZWQgYmVmb3JlIGNvbmZpZ3VyaW5nIG1vZGUsIGl0IGNvdWxkCisJICogd2FsayBpbiBhIHVuZGVmaW5lZCBzdGF0ZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYWlfcmVzZXQoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJLyogQ2xlYXIgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHNldCB0aGUgc3RvcCBiaXRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGwoTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AsCisJCSAgICBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCS8qIFJlc2V0IHRpbWVyIHJlZ2lzdGVycyAqLworCWFpX2NvbnRleHQtPmNoYW5fdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93ID0gMDsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2ggPSAwOworCWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyID0gMDsKKwlhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQgPSAwOworCisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWcpOworCisJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X2NvdW50ID0gMDsKKworCS8qIENsZWFyIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9pb2N0bF9zaW5nKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYWlfaW9jdGxfc2luZygpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfaW9jdGxfc2luZygpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BSV9TSU5HTEU6CisJCXJldHVybiBtZTQwMDBfYWlfc2luZ2xlKChzdHJ1Y3QgbWU0MDAwX2FpX3NpbmdsZSAqKWFyZywKKwkJCQkJCQkJYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfZGlzYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKHN0cnVjdCBtZTQwMDBfYWlfdHJpZ2dlciAqKWFyZywKKwkJCQkJICAgICAgIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygoc3RydWN0IG1lNDAwMF91c2VyX2luZm8gKilhcmcsCisJCQkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BSV9PRkZTRVRfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX29mZnNldF9lbmFibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfT0ZGU0VUX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfb2Zmc2V0X2Rpc2FibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRlVMTFNDQUxFX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9mdWxsc2NhbGVfZW5hYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0ZVTExTQ0FMRV9ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2Z1bGxzY2FsZV9kaXNhYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VFUFJPTV9SRUFEOgorCQlyZXR1cm4gbWU0MDAwX2VlcHJvbV9yZWFkKChzdHJ1Y3QgbWU0MDAwX2VlcHJvbSAqKWFyZywKKwkJCQkJCQkJYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRUVQUk9NX1dSSVRFOgorCQlyZXR1cm4gbWU0MDAwX2VlcHJvbV93cml0ZSgoc3RydWN0IG1lNDAwMF9lZXByb20gKilhcmcsCisJCQkJCQkJCWFpX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9pb2N0bF9zaW5nKCk6SW52YWxpZCBzZXJ2aWNlIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfc2luZ2xlKHN0cnVjdCBtZTQwMDBfYWlfc2luZ2xlICphcmcsCisJCQkgICAgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXN0cnVjdCBtZTQwMDBfYWlfc2luZ2xlIGNtZDsKKwlpbnQgZXJyOworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyBqaWZmeTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc2luZ2xlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfYWlfc2luZ2xlKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogQ2hlY2sgcmFuZ2UgcGFyYW1ldGVyICovCisJc3dpdGNoIChjbWQucmFuZ2UpIHsKKwljYXNlIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMTA6CisJY2FzZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzJfNToKKwljYXNlIE1FNDAwMF9BSV9MSVNUX1JBTkdFX1VOSVBPTEFSXzEwOgorCWNhc2UgTUU0MDAwX0FJX0xJU1RfUkFOR0VfVU5JUE9MQVJfMl81OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkludmFsaWQgcmFuZ2Ugc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgbW9kZSBhbmQgY2hhbm5lbCBudW1iZXIgKi8KKwlzd2l0Y2ggKGNtZC5tb2RlKSB7CisJY2FzZSBNRTQwMDBfQUlfTElTVF9JTlBVVF9TSU5HTEVfRU5ERUQ6CisJCWlmIChjbWQuY2hhbm5lbCA+PSBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5jb3VudCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6QW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQUlfTElTVF9JTlBVVF9ESUZGRVJFTlRJQUw6CisJCWlmIChjbWQuY2hhbm5lbCA+PQorCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZGlmZl9jb3VudCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6QW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGUgaW4gZGlmZmVyZW50aWFsIG1vZGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpJbnZhbGlkIG1vZGUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2xlYXIgY2hhbm5lbCBsaXN0LCBkYXRhIGZpZm8gYW5kIGJvdGggc3RvcCBiaXRzICovCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9CisJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTyB8IE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8gfAorCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIEVuYWJsZSBjaGFubmVsIGxpc3QgYW5kIGRhdGEgZmlmbyAqLworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPIHwgTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIEdlbmVyYXRlIGNoYW5uZWwgbGlzdCBlbnRyeSAqLworCW1lNDAwMF9vdXRsKGNtZC5jaGFubmVsIHwgY21kLnJhbmdlIHwgY21kLgorCQkgICAgbW9kZSB8IE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlksCisJCSAgICBhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfcmVnKTsKKworCS8qIFNldCB0aGUgdGltZXIgdG8gbWF4aW11bSAqLworCW1lNDAwMF9vdXRsKDY2LCBhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoNjYsIGFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyX3JlZyk7CisKKwlpZiAodG1wICYgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUcpIHsKKwkJamlmZnkgPSBqaWZmaWVzOworCQl3aGlsZSAoIQorCQkgICAgICAgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KKwkJCWlmICgoKGppZmZpZXMgLSBqaWZmeSkgPiAoY21kLnRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSAmJiBjbWQudGltZW91dCkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6VGltZW91dCByZWFjaGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIFN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJbWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGFydF9yZWcpOworCisJCS8qIFdhaXQgdW50aWwgcmVhZHkgKi8KKwkJdWRlbGF5KDEwKTsKKwkJaWYgKCEKKwkJICAgIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJICAgICBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6VmFsdWUgbm90IGF2YWlsYWJsZSBhZnRlciB3YWl0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJLyogUmVhZCB2YWx1ZSBmcm9tIGRhdGEgZmlmbyAqLworCWNtZC52YWx1ZSA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+ZGF0YV9yZWcpICYgMHhGRkZGOworCisJLyogQ29weSByZXN1bHQgYmFjayB0byB1c2VyICovCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmNtZCwgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfYWlfc2luZ2xlKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkNhbid0IGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zdyhzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9pb2N0bF9zdygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FpX2lvY3RsX3N3KCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCWlmIChfSU9DX05SKHNlcnZpY2UpID4gTUU0MDAwX0lPQ1RMX01BWE5SKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9pb2N0bF9zdygpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BSV9TQ19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9zY19zZXR1cCgoc3RydWN0IG1lNDAwMF9haV9zYyAqKWFyZywKKwkJCQkJCQkJYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfQ09ORklHOgorCQlyZXR1cm4gbWU0MDAwX2FpX2NvbmZpZygoc3RydWN0IG1lNDAwMF9haV9jb25maWcgKilhcmcsCisJCQkJCQkJCWFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX1NUQVJUOgorCQlyZXR1cm4gbWU0MDAwX2FpX3N0YXJ0KGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYWlfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9JTU1FRElBVEVfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9pbW1lZGlhdGVfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9GU01fU1RBVEU6CisJCXJldHVybiBtZTQwMDBfYWlfZnNtX3N0YXRlKChpbnQgKilhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygoc3RydWN0IG1lNDAwMF91c2VyX2luZm8gKilhcmcsCisJCQkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BSV9FRVBST01fUkVBRDoKKwkJcmV0dXJuIG1lNDAwMF9lZXByb21fcmVhZCgoc3RydWN0IG1lNDAwMF9lZXByb20gKilhcmcsCisJCQkJCQkJCWFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VFUFJPTV9XUklURToKKwkJcmV0dXJuIG1lNDAwMF9lZXByb21fd3JpdGUoKHN0cnVjdCBtZTQwMDBfZWVwcm9tICopYXJnLAorCQkJCQkJCQlhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9HRVRfQ09VTlRfQlVGRkVSOgorCQlyZXR1cm4gbWU0MDAwX2FpX2dldF9jb3VudF9idWZmZXIoKHVuc2lnbmVkIGxvbmcgKilhcmcsCisJCQkJCQkgIGFpX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOkludmFsaWQgc2VydmljZSBudW1iZXIgJWRcbiIsIF9fZnVuY19fLCBzZXJ2aWNlKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9leHQoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2lvY3RsX2V4dCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FpX2lvY3RsX2V4dCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfaW9jdGxfZXh0KCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FJX1NDX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FpX3NjX3NldHVwKChzdHJ1Y3QgbWU0MDAwX2FpX3NjICopYXJnLAorCQkJCQkJCQlhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9DT05GSUc6CisJCXJldHVybiBtZTQwMDBfYWlfY29uZmlnKChzdHJ1Y3QgbWU0MDAwX2FpX2NvbmZpZyAqKWFyZywKKwkJCQkJCQkJYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfU1RBUlQ6CisJCXJldHVybiBtZTQwMDBfYWlfc3RhcnRfZXgoKHVuc2lnbmVkIGxvbmcgKilhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYWlfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9JTU1FRElBVEVfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9pbW1lZGlhdGVfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9leF90cmlnX2VuYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19kaXNhYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgoc3RydWN0IG1lNDAwMF9haV90cmlnZ2VyICopYXJnLAorCQkJCQkgICAgICAgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRlNNX1NUQVRFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2ZzbV9zdGF0ZSgoaW50ICopYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9HRVRfVVNFUl9JTkZPOgorCQlyZXR1cm4gbWU0MDAwX2dldF91c2VyX2luZm8oKHN0cnVjdCBtZTQwMDBfdXNlcl9pbmZvICopYXJnLAorCQkJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mbyk7CisJY2FzZSBNRTQwMDBfQUlfR0VUX0NPVU5UX0JVRkZFUjoKKwkJcmV0dXJuIG1lNDAwMF9haV9nZXRfY291bnRfYnVmZmVyKCh1bnNpZ25lZCBsb25nICopYXJnLAorCQkJCQkJICBhaV9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLCBfX2Z1bmNfXyAsIHNlcnZpY2UpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlX3AsIGludCBtb2RlKQoreworCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZmFzeW5jX2NvbnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGVfcCwgbW9kZSwgJmFpX2NvbnRleHQtPmZhc3luY19wKTsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfY29uZmlnKHN0cnVjdCBtZTQwMDBfYWlfY29uZmlnICphcmcsCisJCQkgICAgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXN0cnVjdCBtZTQwMDBfYWlfY29uZmlnIGNtZDsKKwl1MzIgKmxpc3QgPSBOVUxMOworCXUzMiBtb2RlOworCWludCBpOworCWludCBlcnI7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdTY0IHNjYW47CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfY29uZmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBzdG9wcGVkICovCisJaWYgKGlubChhaV9jb250ZXh0LT5jdHJsX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDb252ZXJzaW9uIGlzIG5vdCBzdG9wcGVkXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJfQorCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfYWlfY29uZmlnKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKworCVBERUJVRworCSAgICAoIm1lNDAwMF9haV9jb25maWcoKTpjaGFuID0gJWxkLCBwcmVfY2hhbiA9ICVsZCwgc2Nhbl9sb3cgPSAlbGQsIHNjYW5faGlnaCA9ICVsZCwgY291bnQgPSAlbGRcbiIsCisJICAgICBjbWQudGltZXIuY2hhbiwgY21kLnRpbWVyLnByZV9jaGFuLCBjbWQudGltZXIuc2Nhbl9sb3csCisJICAgICBjbWQudGltZXIuc2Nhbl9oaWdoLCBjbWQuY2hhbm5lbF9saXN0LmNvdW50KTsKKworCS8qIENoZWNrIHdoZXRoZXIgc2FtcGxlIGFuZCBob2xkIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyBib2FyZCAqLworCWlmIChjbWQuc2gpIHsKKwkJaWYgKCFhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5zaF9jb3VudCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6U2FtcGxlIGFuZCBIb2xkIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgYm9hcmRcbiIpOworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoZSBjaGFubmVsIGxpc3Qgc2l6ZSAqLworCWlmIChjbWQuY2hhbm5lbF9saXN0LmNvdW50ID4gTUU0MDAwX0FJX0NIQU5ORUxfTElTVF9DT1VOVCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCBsaXN0IGlzIHRvIGxhcmdlXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKworCS8qIENvcHkgY2hhbm5lbCBsaXN0IGZyb20gdXNlciAqLworCWxpc3QgPSBrbWFsbG9jKHNpemVvZih1MzIpICogY21kLmNoYW5uZWxfbGlzdC5jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsaXN0KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgY2hhbm5lbCBsaXN0XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKwllcnIgPQorCSAgICBjb3B5X2Zyb21fdXNlcihsaXN0LCBjbWQuY2hhbm5lbF9saXN0Lmxpc3QsCisJCQkgICBzaXplb2YodTMyKSAqIGNtZC5jaGFubmVsX2xpc3QuY291bnQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwl9CisKKwkvKiBDaGVjayBpZiBsYXN0IGVudHJ5IGJpdCBpcyBzZXQgKi8KKwlpZiAoIShsaXN0W2NtZC5jaGFubmVsX2xpc3QuY291bnQgLSAxXSAmIE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlkpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJtZTQwMDBfYWlfY29uZmlnKCk6TGFzdCBlbnRyeSBiaXQgaXMgbm90IHNldFxuIik7CisJCWxpc3RbY21kLmNoYW5uZWxfbGlzdC5jb3VudCAtIDFdIHw9IE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlk7CisJfQorCisJLyogQ2hlY2sgd2hldGhlciBtb2RlIGlzIGVxdWFsIGZvciBhbGwgZW50cmllcyAqLworCW1vZGUgPSBsaXN0WzBdICYgMHgyMDsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCWlmICgobGlzdFtpXSAmIDB4MjApICE9IG1vZGUpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOk1vZGUgaXMgbm90IGVxdWFsIGZvciBhbGwgZW50cmllc1xuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBBSV9DT05GSUdfRVJSOworCQl9CisJfQorCisJLyogQ2hlY2sgd2hldGhlciBjaGFubmVscyBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIG1vZGUgKi8KKwlpZiAobW9kZSA9PSBNRTQwMDBfQUlfTElTVF9JTlBVVF9TSU5HTEVfRU5ERUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykgeworCQkJaWYgKChsaXN0W2ldICYgMHgxRikgPj0KKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5jb3VudCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIGlzIG5vdCBhdmFpbGFibGUgZm9yIHNpbmdsZSBlbmRlZFxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKG1vZGUgPT0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfRElGRkVSRU5USUFMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspIHsKKwkJCWlmICgobGlzdFtpXSAmIDB4MUYpID49CisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZGlmZl9jb3VudCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIGlzIG5vdCBhdmFpbGFibGUgZm9yIGRpZmZlcmVudGlhbFxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCQl9CisJCX0KKwl9CisKKwkvKiBDaGVjayBpZiBiaXBvbGFyIGlzIHNldCBmb3IgYWxsIGVudHJpZXMgd2hlbiBpbiBkaWZmZXJlbnRpYWwgbW9kZSAqLworCWlmIChtb2RlID09IE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCQlpZiAoKGxpc3RbaV0gJiAweEMwKSAhPSBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzEwCisJCQkgICAgJiYgKGxpc3RbaV0gJiAweEMwKSAhPQorCQkJICAgIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMl81KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkJpcG9sYXIgaXMgbm90IHNlbGVjdGVkIGluIGRpZmZlcmVudGlhbCBtb2RlXG4iKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChhaV9jb250ZXh0LT5tb2RlICE9IE1FNDAwMF9BSV9BQ1FfTU9ERV9FWFRfU0lOR0xFX1ZBTFVFKSB7CisJCS8qIENoZWNrIGZvciBtaW5pbXVtIGNoYW5uZWwgZGl2aXNvciAqLworCQlpZiAoY21kLnRpbWVyLmNoYW4gPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIHRpbWVyIGRpdmlzb3IgaXMgdG8gbG93XG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCX0KKworCQkvKiBDaGVjayBpZiBtaW5pbXVtIGNoYW5uZWwgZGl2aXNvciBpcyBhZGp1c3RlZCB3aGVuIHNhbXBsZSBhbmQgaG9sZCBpcyBhY3RpdmF0ZWQgKi8KKwkJaWYgKChjbWQuc2gpICYmIChjbWQudGltZXIuY2hhbiAhPSBNRTQwMDBfQUlfTUlOX1RJQ0tTKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCB0aW1lciBkaXZpc29yIG11c3QgYmUgYXQgbWluaW11bSB3aGVuIHNhbXBsZSBhbmQgaG9sZCBpcyBhY3RpdmF0ZWRcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJfQorCisJCS8qIENoZWNrIGZvciBtaW5pbXVtIGNoYW5uZWwgcHJlIGRpdmlzb3IgKi8KKwkJaWYgKGNtZC50aW1lci5wcmVfY2hhbiA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNoYW5uZWwgcHJlIHRpbWVyIGRpdmlzb3IgaXMgdG8gbG93XG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCX0KKworCQkvKiBXcml0ZSB0aGUgY2hhbm5lbCB0aW1lcnMgKi8KKwkJbWU0MDAwX291dGwoY21kLnRpbWVyLmNoYW4gLSAxLCBhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyk7CisJCW1lNDAwMF9vdXRsKGNtZC50aW1lci5wcmVfY2hhbiAtIDEsCisJCQkgICAgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKworCQkvKiBTYXZlIHRoZSB0aW1lciB2YWx1ZXMgaW4gdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJYWlfY29udGV4dC0+Y2hhbl90aW1lciA9IGNtZC50aW1lci5jaGFuOworCQlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lciA9IGNtZC50aW1lci5wcmVfY2hhbjsKKworCQlpZiAoYWlfY29udGV4dC0+bW9kZSAhPSBNRTQwMDBfQUlfQUNRX01PREVfRVhUX1NJTkdMRV9DSEFOTElTVCkgeworCQkJLyogQ2hlY2sgZm9yIHNjYW4gdGltZXIgZGl2aXNvciAqLworCQkJc2NhbiA9CisJCQkgICAgKHU2NCkgY21kLnRpbWVyLnNjYW5fbG93IHwgKCh1NjQpIGNtZC50aW1lci4KKwkJCQkJCQlzY2FuX2hpZ2ggPDwgMzIpOworCQkJaWYgKHNjYW4gIT0gMCkgeworCQkJCWlmIChzY2FuIDwKKwkJCQkgICAgY21kLmNoYW5uZWxfbGlzdC5jb3VudCAqIGNtZC50aW1lci5jaGFuICsKKwkJCQkgICAgMSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOlNjYW4gdGltZXIgZGl2aXNvciBpcyB0byBsb3dcbiIpOworCQkJCQllcnIgPSAtRUlOVkFMOworCQkJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCQkJfQorCQkJfQorCisJCQkvKiBXcml0ZSB0aGUgc2NhbiB0aW1lcnMgKi8KKwkJCWlmIChzY2FuICE9IDApIHsKKwkJCQlzY2FuLS07CisJCQkJdG1wID0gKHUzMikgKHNjYW4gJiAweEZGRkZGRkZGKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCQkJCXRtcCA9ICh1MzIpICgoc2NhbiA+PiAzMikgJiAweEZGRkZGRkZGKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnKTsKKworCQkJCXNjYW4gPQorCQkJCSAgICBzY2FuIC0gKGNtZC50aW1lci5jaGFuIC0gMSkgKworCQkJCSAgICAoY21kLnRpbWVyLnByZV9jaGFuIC0gMSk7CisJCQkJdG1wID0gKHUzMikgKHNjYW4gJiAweEZGRkZGRkZGKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnKTsKKwkJCQl0bXAgPSAodTMyKSAoKHNjYW4gPj4gMzIpICYgMHhGRkZGRkZGRik7CisJCQkJbWU0MDAwX291dGwodG1wLAorCQkJCQkgICAgYWlfY29udGV4dC0+CisJCQkJCSAgICBzY2FuX3ByZV90aW1lcl9oaWdoX3JlZyk7CisJCQl9IGVsc2UgeworCQkJCW1lNDAwMF9vdXRsKDB4MCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyk7CisJCQkJbWU0MDAwX291dGwoMHgwLAorCQkJCQkgICAgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoX3JlZyk7CisKKwkJCQltZTQwMDBfb3V0bCgweDAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnKTsKKwkJCQltZTQwMDBfb3V0bCgweDAsCisJCQkJCSAgICBhaV9jb250ZXh0LT4KKwkJCQkJICAgIHNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKwkJCX0KKworCQkJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3cgPSBjbWQudGltZXIuc2Nhbl9sb3c7CisJCQlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2ggPSBjbWQudGltZXIuc2Nhbl9oaWdoOworCQl9CisJfQorCisJLyogQ2xlYXIgdGhlIGNoYW5uZWwgbGlzdCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIFdyaXRlIHRoZSBjaGFubmVsIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCW1lNDAwMF9vdXRsKGxpc3RbaV0sIGFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9yZWcpOworCX0KKworCS8qIFNldHVwIHNhbXBsZSBhbmQgaG9sZCAqLworCWlmIChjbWQuc2gpIHsKKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9TQU1QTEVfSE9MRDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJfSBlbHNlIHsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfU0FNUExFX0hPTEQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCX0KKworCS8qIFNhdmUgdGhlIGNoYW5uZWwgbGlzdCBzaXplIGluIHRoZSBib2FyZCBjb250ZXh0ICovCisJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X2NvdW50ID0gY21kLmNoYW5uZWxfbGlzdC5jb3VudDsKKworCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIDA7CisKK0FJX0NPTkZJR19FUlI6CisKKwkvKiBSZXNldCB0aGUgdGltZXJzICovCisJYWlfY29udGV4dC0+Y2hhbl90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyID0gNjY7CisJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3cgPSAwOworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaCA9IDA7CisKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDY1LCBhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCisJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X2NvdW50ID0gMDsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPQorCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk8gfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0FNUExFX0hPTEQpOworCisJaWYgKGxpc3QpCisJCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIGVycjsKKworfQorCitzdGF0aWMgaW50IGFpX2NvbW1vbl9zdGFydChzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwlDQUxMX1BERUJVRygiYWlfY29tbW9uX3N0YXJ0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBDaGVjayBpZiBjb252ZXJzaW9uIGlzIHN0b3BwZWQgKi8KKwlpZiAodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDphaV9jb21tb25fc3RhcnQoKTpDb252ZXJzaW9uIGlzIG5vdCBzdG9wcGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBDbGVhciBkYXRhIGZpZm8sIGRpc2FibGUgYWxsIGludGVycnVwdHMsIGNsZWFyIHNhbXBsZSBjb3VudGVyIHJlbG9hZCAqLworCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8gfCBNRTQwMDBfQUlfQ1RSTF9CSVRfTEVfSVJRIHwKKwkJIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkJIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19SRUxPQUQpOworCisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBDbGVhciBjaXJjdWxhciBidWZmZXIgKi8KKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCS8qIEVuYWJsZSBkYXRhIGZpZm8gKi8KKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTzsKKworCS8qIERldGVybWluZSBpbnRlcnJ1cHQgc2V0dXAgKi8KKwlpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgJiYgIWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQkvKiBFbmFibGUgSGFsZiBGdWxsIEludGVycnVwdCBhbmQgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwl9IGVsc2UgaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyCisJCSAgICYmIGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQlpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgPD0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKSB7CisJCQkvKiBFbmFibGUgb25seSBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19SRUxPQUQ7CisJCX0gZWxzZSB7CisJCQkvKiBFbmFibGUgSGFsZiBGdWxsIEludGVycnVwdCBhbmQgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwKKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfUkVMT0FEOworCQl9CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIG9ubHkgSGFsZiBGdWxsIEludGVycnVwdCAqLworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwl9CisKKwkvKiBDbGVhciB0aGUgc3RvcCBiaXRzICovCisJdG1wICY9IH4oTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCisJLyogV3JpdGUgc2V0dXAgdG8gaGFyZHdhcmUgKi8KKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIFdyaXRlIHNhbXBsZSBjb3VudGVyICovCisJbWU0MDAwX291dGwoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIsIGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfc3RhcnQoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCWludCBlcnI7CisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9zdGFydCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIFByZXBhcmUgSGFyZHdhcmUgKi8KKwllcnIgPSBhaV9jb21tb25fc3RhcnQoYWlfY29udGV4dCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFN0YXJ0IGNvbnZlcnNpb24gYnkgZHVtbXkgcmVhZCAqLworCW1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhcnRfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9zdGFydF9leCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkgICAgICBzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpCit7CisJaW50IGVycjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIHJlZjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3N0YXJ0X2V4KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGdldF91c2VyKHRpbWVvdXQsIGFyZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FpX3N0YXJ0X2V4KCk6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBQcmVwYXJlIEhhcmR3YXJlICovCisJZXJyID0gYWlfY29tbW9uX3N0YXJ0KGFpX2NvbnRleHQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAodGltZW91dCkgeworCQlyZWYgPSBqaWZmaWVzOworCQl3aGlsZSAoIQorCQkgICAgICAgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpCisJCXsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0YXJ0X2V4KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdGFydF9leCgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAoIQorCQkgICAgICAgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpCisJCXsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0YXJ0X2V4KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3N0b3Aoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc3RvcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIERpc2FibGUgaXJxcyBhbmQgY2xlYXIgZGF0YSBmaWZvICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9CisJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8pOworCS8qIFN0b3AgY29udmVyc2lvbiBvZiB0aGUgc3RhdGUgbWFjaGluZSAqLworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUDsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJLyogQ2xlYXIgY2lyY3VsYXIgYnVmZmVyICovCisJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwl3aGlsZSAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0b3AoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2ltbWVkaWF0ZV9zdG9wKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3N0b3AoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBEaXNhYmxlIGlycXMgYW5kIGNsZWFyIGRhdGEgZmlmbyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPQorCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPKTsKKwkvKiBTdG9wIGNvbnZlcnNpb24gb2YgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkvKiBDbGVhciBjaXJjdWxhciBidWZmZXIgKi8KKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCXdoaWxlIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RvcCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzdG9wIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUc7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX2Rpc2FibGUoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZXhfdHJpZ19kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJRzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoc3RydWN0IG1lNDAwMF9haV90cmlnZ2VyICphcmcsCisJCQkJICAgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXN0cnVjdCBtZTQwMDBfYWlfdHJpZ2dlciBjbWQ7CisJaW50IGVycjsKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IG1lNDAwMF9haV90cmlnZ2VyKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJaWYgKGNtZC5tb2RlID09IE1FNDAwMF9BSV9UUklHR0VSX0VYVF9ESUdJVEFMKSB7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQU5BTE9HOworCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0FOQUxPRykgeworCQlpZiAoIWFpX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmV4X3RyaWdfYW5hbG9nKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9leF90cmlnX3NldHVwKCk6Tm8gYW5hbG9nIHRyaWdnZXIgYXZhaWxhYmxlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19BTkFMT0c7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9leF90cmlnX3NldHVwKCk6SW52YWxpZCB0cmlnZ2VyIG1vZGUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNtZC5lZGdlID09IE1FNDAwMF9BSV9UUklHR0VSX0VYVF9FREdFX1JJU0lORykgeworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQk9USCB8CisJCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0ZBTExJTkcpOworCX0gZWxzZSBpZiAoY21kLmVkZ2UgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfRkFMTElORykgeworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfRkFMTElORzsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19CT1RIOworCX0gZWxzZSBpZiAoY21kLmVkZ2UgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfQk9USCkgeworCQl0bXAgfD0KKwkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0JPVEggfAorCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfRkFMTElORzsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKTpJbnZhbGlkIHRyaWdnZXIgZWRnZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9zY19zZXR1cChzdHJ1Y3QgbWU0MDAwX2FpX3NjICphcmcsCisJCQkgICAgICBzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpCit7CisJc3RydWN0IG1lNDAwMF9haV9zYyBjbWQ7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc2Nfc2V0dXAoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IG1lNDAwMF9haV9zYykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zY19zZXR1cCgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgPSBjbWQudmFsdWU7CisJYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkID0gY21kLnJlbG9hZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYWlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNoYXIgKmJ1ZmYsIHNpemVfdCBjbnQsCisJCQkgICAgICBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0ID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzMTYgKmJ1ZmZlciA9IChzMTYgKikgYnVmZjsKKwlzaXplX3QgY291bnQgPSBjbnQgLyAyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRtcDsKKwlpbnQgYyA9IDA7CisJaW50IGsgPSAwOworCWludCByZXQgPSAwOworCXdhaXRfcXVldWVfdCB3YWl0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9yZWFkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOworCisJLyogQ2hlY2sgY291bnQgKi8KKwlpZiAoY291bnQgPD0gMCkgeworCQlQREVCVUcoIm1lNDAwMF9haV9yZWFkKCk6Q291bnQgaXMgMFxuIik7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJYyA9IG1lNDAwMF92YWx1ZXNfdG9fZW5kKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCQkJaWYgKCFjKSB7CisJCQkJUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FpX3JlYWQoKTpSZXR1cm5pbmcgZnJvbSBub25ibG9ja2luZyByZWFkXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIENoZWNrIGlmIGNvbnZlcnNpb24gaXMgc3RpbGwgcnVubmluZyAqLworCQkJaWYgKCEKKwkJCSAgICAobWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcmVhZCgpOkNvbnZlcnNpb24gaW50ZXJydXB0ZWRcbiIpOworCQkJCXJldHVybiAtRVBJUEU7CisJCQl9CisKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhaV9jb250ZXh0LT53YWl0X3F1ZXVlLAorCQkJCQkJIChtZTQwMDBfdmFsdWVzX3RvX2VuZAorCQkJCQkJICAoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3JlYWQoKTpXYWl0IG9uIHZhbHVlcyBpbnRlcnJ1cHRlZCBmcm9tIHNpZ25hbFxuIik7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KKwkJfQorCisJCS8qIE9ubHkgcmVhZCBjb3VudCB2YWx1ZXMgb3IgYXMgbXVjaCBhcyBhdmFpbGFibGUgKi8KKwkJYyA9IG1lNDAwMF92YWx1ZXNfdG9fZW5kKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCVBERUJVRygibWU0MDAwX2FpX3JlYWQoKTolZCB2YWx1ZXMgdG8gZW5kXG4iLCBjKTsKKwkJaWYgKGNvdW50IDwgYykKKwkJCWMgPSBjb3VudDsKKworCQlQREVCVUcoIm1lNDAwMF9haV9yZWFkKCk6Q29weSAlZCB2YWx1ZXMgdG8gdXNlciBzcGFjZVxuIiwgYyk7CisJCWsgPSAyICogYzsKKwkJayAtPSBjb3B5X3RvX3VzZXIoYnVmZmVyLAorCQkJCSAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkgIGFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwsIGspOworCQljID0gayAvIDI7CisJCWlmICghYykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcmVhZCgpOkNhbm5vdCBjb3B5IG5ldyB2YWx1ZXMgdG8gdXNlclxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPQorCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgKyBjKSAmIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0KKwkJCQkJCSAgICAgICAxKTsKKwkJYnVmZmVyICs9IGM7CisJCWNvdW50IC09IGM7CisJCXJldCArPSBjOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQlpZiAobWU0MDAwX2J1Zl9zcGFjZQorCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkgeworCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJCS8qIERldGVybWluZSBpbnRlcnJ1cHQgc2V0dXAgKi8KKwkJCWlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcgorCQkJICAgICYmICFhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQpIHsKKwkJCQkvKiBFbmFibGUgSGFsZiBGdWxsIEludGVycnVwdCBhbmQgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCQkJdG1wIHw9CisJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJROworCQkJfSBlbHNlIGlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcgorCQkJCSAgICYmIGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQkJCWlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciA8CisJCQkJICAgIE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMikgeworCQkJCQkvKiBFbmFibGUgb25seSBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJCQkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlE7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogRW5hYmxlIEhhbGYgRnVsbCBJbnRlcnJ1cHQgYW5kIFNhbXBsZSBDb3VudGVyIEludGVycnVwdCAqLworCQkJCQl0bXAgfD0KKwkJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIEVuYWJsZSBvbmx5IEhhbGYgRnVsbCBJbnRlcnJ1cHQgKi8KKwkJCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwkJCX0KKworCQkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBDaGVjayBpZiBjb252ZXJzaW9uIGlzIHN0aWxsIHJ1bm5pbmcgKi8KKwlpZiAoIShtZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3JlYWQoKTpDb252ZXJzaW9uIG5vdCBydW5uaW5nIGFmdGVyIGNvbXBsZXRlIHJlYWRcbiIpOworCQlyZXR1cm4gLUVQSVBFOworCX0KKworCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJcmV0dXJuIChrID09IDApID8gLUVBR0FJTiA6IDIgKiByZXQ7CisJfQorCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9yZWFkKCkgaXMgbGVhdmVkXG4iKTsKKwlyZXR1cm4gcmV0ICogMjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtZTQwMDBfYWlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZV9wLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAwOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9wb2xsKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJLyogUmVnaXN0ZXIgd2FpdCBxdWV1ZSAqLworCXBvbGxfd2FpdChmaWxlX3AsICZhaV9jb250ZXh0LT53YWl0X3F1ZXVlLCB3YWl0KTsKKworCS8qIEdldCBhdmFpbGFibGUgdmFsdWVzICovCisJaWYgKG1lNDAwMF92YWx1ZXNfdG9fZW5kKGFpX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJUERFQlVHKCJtZTQwMDBfYWlfcG9sbCgpOlJldHVybiBtYXNrICVsWFxuIiwgbWFzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfb2Zmc2V0X2VuYWJsZShzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX29mZnNldF9lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX09GRlNFVDsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9vZmZzZXRfZGlzYWJsZShzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX29mZnNldF9kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfT0ZGU0VUOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Z1bGxzY2FsZV9lbmFibGUoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9mdWxsc2NhbGVfZW5hYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9GVUxMU0NBTEU7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZnVsbHNjYWxlX2Rpc2FibGUoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9mdWxsc2NhbGVfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0ZVTExTQ0FMRTsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9mc21fc3RhdGUoaW50ICphcmcsIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZnNtX3N0YXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0KKwkgICAgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pID8gMQorCSAgICA6IDA7CisKKwlpZiAocHV0X3VzZXIodG1wLCBhcmcpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FpX2ZzbV9zdGF0ZSgpOkNhbm5vdCBjb3B5IHRvIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZ2V0X2NvdW50X2J1ZmZlcih1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICAgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgYzsKKwlpbnQgZXJyOworCisJYyA9IG1lNDAwMF9idWZfY291bnQoYWlfY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczpDYW4ndCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRVBST00gc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlZXByb21fd3JpdGVfY21kKHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCwgdW5zaWduZWQgbG9uZyBjbWQsCisJCQkgICAgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJQ0FMTF9QREVCVUcoImVlcHJvbV93cml0ZV9jbWQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlQREVCVUcoImVlcHJvbV93cml0ZV9jbWQoKTpXcml0ZSBjb21tYW5kIDB4JTA4bFggd2l0aCBsZW5ndGggPSAlZFxuIiwKKwkgICAgICAgY21kLCBsZW5ndGgpOworCisJLyogR2V0IHRoZSBJQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSByZWxhdGVkIGJpdHMgKi8KKwl2YWx1ZSA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSAmPSB+KFBMWF9JQ1JfTUFTS19FRVBST00pOworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJLyogUmFpc2UgdGhlIGNoaXAgc2VsZWN0ICovCisJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX0NISVBfU0VMRUNUOworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXVkZWxheShFRVBST01fREVMQVkpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWlmIChjbWQgJiAoKDB4MSA8PCAobGVuZ3RoIC0gMSkpID4+IGkpKSB7CisJCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7CisJCX0gZWxzZSB7CisJCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOworCQl9CisKKwkJLyogV3JpdGUgdG8gRUVQUk9NICovCisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCS8qIFJhaXNpbmcgZWRnZSBvZiB0aGUgY2xvY2sgKi8KKwkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkJLyogRmFsbGluZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisJfQorCisJLyogQ2xlYXIgdGhlIGNoaXAgc2VsZWN0ICovCisJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVDsKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCS8qIFdhaXQgdW50aWwgaGFyZHdhcmUgaXMgcmVhZHkgZm9yIHN1cmUgKi8KKwltZGVsYXkoMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBlZXByb21fcmVhZF9jbWQoc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY21kLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgc2hvcnQgaWQgPSAwOworCisJQ0FMTF9QREVCVUcoImVlcHJvbV9yZWFkX2NtZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCVBERUJVRygiZWVwcm9tX3JlYWRfY21kKCk6UmVhZCBjb21tYW5kIDB4JTA4bFggd2l0aCBsZW5ndGggPSAlZFxuIiwgY21kLAorCSAgICAgICBsZW5ndGgpOworCisJLyogR2V0IHRoZSBJQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSByZWxhdGVkIGJpdHMgKi8KKwl2YWx1ZSA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSAmPSB+KFBMWF9JQ1JfTUFTS19FRVBST00pOworCisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBSYWlzZSB0aGUgY2hpcCBzZWxlY3QgKi8KKwl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fQ0hJUF9TRUxFQ1Q7CisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkvKiBXcml0ZSB0aGUgcmVhZCBjb21tYW5kIHRvIHRoZSBlZXByb20gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaWYgKGNtZCAmICgoMHgxIDw8IChsZW5ndGggLSAxKSkgPj4gaSkpIHsKKwkJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKKwkJfSBlbHNlIHsKKwkJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7CisJCX0KKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkJLyogUmFpc2luZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCQkvKiBGYWxsaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKwl9CisKKwkvKiBSZWFkIHRoZSB2YWx1ZSBmcm9tIHRoZSBlZXByb20gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkvKiBSYWlzaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQ7CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCWlmIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJgorCQkgICAgUExYX0lDUl9CSVRfRUVQUk9NX1JFQUQpIHsKKwkJCWlkIHw9ICgweDgwMDAgPj4gaSk7CisJCQlQREVCVUcoImVlcHJvbV9yZWFkX2NtZCgpOk9SIHdpdGggMHglMDRYXG4iLAorCQkJICAgICAgICgweDgwMDAgPj4gaSkpOworCQl9IGVsc2UgeworCQkJUERFQlVHKCJlZXByb21fcmVhZF9jbWQoKTpEb250J3QgT1JcbiIpOworCQl9CisKKwkJLyogRmFsbGluZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisJfQorCisJLyogQ2xlYXIgdGhlIGNoaXAgc2VsZWN0ICovCisJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVDsKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCXJldHVybiBpZDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZWVwcm9tX3dyaXRlKHN0cnVjdCBtZTQwMDBfZWVwcm9tICphcmcsCisJCQkgICAgICAgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0KQoreworCWludCBlcnI7CisJc3RydWN0IG1lNDAwMF9lZXByb20gc2V0dXA7CisJdW5zaWduZWQgbG9uZyBjbWQ7CisJdW5zaWduZWQgbG9uZyBkYXRlX2hpZ2g7CisJdW5zaWduZWQgbG9uZyBkYXRlX2xvdzsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZWVwcm9tX3dyaXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJZXJyID0gY29weV9mcm9tX3VzZXIoJnNldHVwLCBhcmcsIHNpemVvZihzZXR1cCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9lZXByb21fd3JpdGUoKTpDYW5ub3QgY29weSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEVuYWJsZSB3cml0aW5nICovCisJZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBNRTQwMDBfRUVQUk9NX0NNRF9XUklURV9FTkFCTEUsCisJCQkgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFX0VOQUJMRSk7CisKKwkvKiBDb21tYW5kIGZvciBkYXRlICovCisJZGF0ZV9oaWdoID0gKHNldHVwLmRhdGUgJiAweEZGRkYwMDAwKSA+PiAxNjsKKwlkYXRlX2xvdyA9IChzZXR1cC5kYXRlICYgMHgwMDAwRkZGRik7CisKKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0hJR0ggPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBkYXRlX2hpZ2gpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0xPVyA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIGRhdGVfbG93KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMTBWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9VTklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgdW5pXzEwX29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDEwViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX0ZVTExTQ0FMRSA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIHVuaV8xMF9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAyLDVWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgdW5pXzJfNV9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfRlVMTFNDQUxFIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgdW5pXzJfNV9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDEwViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgYmlfMTBfb2Zmc2V0KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAxMFYgZnVsbHNjYWxlICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0JJX0ZVTExTQ0FMRSA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIGJpXzEwX2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMiw1ViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgYmlfMl81X29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfRlVMTFNDQUxFIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgYmlfMl81X2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAxMFYgb2Zmc2V0ICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgZGlmZl8xMF9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX0ZVTExTQ0FMRQorCQkJCSAgICAgICA8PCBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkJKHVuc2lnbmVkCisJCQkJCQkJCQkgbG9uZykKKwkJCQkJCQkJCXNldHVwLgorCQkJCQkJCQkJZGlmZl8xMF9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMiw1ViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9PRkZTRVQgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICBkaWZmXzJfNV9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9GVUxMU0NBTEUKKwkJCQkgICAgICAgPDwgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJCSh1bnNpZ25lZAorCQkJCQkJCQkJIGxvbmcpCisJCQkJCQkJCQlzZXR1cC4KKwkJCQkJCQkJCWRpZmZfMl81X2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIERpc2FibGUgd3JpdGluZyAqLworCWVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEVfRElTQUJMRSwKKwkJCSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEVfRElTQUJMRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZWVwcm9tX3JlYWQoc3RydWN0IG1lNDAwMF9lZXByb20gKmFyZywKKwkJCSAgICAgIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgY21kOworCXN0cnVjdCBtZTQwMDBfZWVwcm9tIHNldHVwOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9lZXByb21fcmVhZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvbW1hbmQgZm9yIGRhdGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfREFURV9ISUdIOworCXNldHVwLmRhdGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisJc2V0dXAuZGF0ZSA8PD0gMTY7CisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0RBVEVfTE9XOworCXNldHVwLmRhdGUgfD0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMTBWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX09GRlNFVDsKKwlzZXR1cC51bmlfMTBfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX0ZVTExTQ0FMRTsKKwlzZXR1cC51bmlfMTBfZnVsbHNjYWxlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMiw1ViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X1VOSV9PRkZTRVQ7CisJc2V0dXAudW5pXzJfNV9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX0ZVTExTQ0FMRTsKKwlzZXR1cC51bmlfMl81X2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMTBWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfT0ZGU0VUOworCXNldHVwLmJpXzEwX29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfRlVMTFNDQUxFOworCXNldHVwLmJpXzEwX2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMiw1ViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX09GRlNFVDsKKwlzZXR1cC5iaV8yXzVfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfRlVMTFNDQUxFOworCXNldHVwLmJpXzJfNV9mdWxsc2NhbGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJudGlhbCAxMFYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX09GRlNFVDsKKwlzZXR1cC5kaWZmXzEwX29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAxMFYgZnVsbHNjYWxlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX0ZVTExTQ0FMRTsKKwlzZXR1cC5kaWZmXzEwX2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcm50aWFsIDIsNVYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9ESUZGX09GRlNFVDsKKwlzZXR1cC5kaWZmXzJfNV9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0RJRkZfRlVMTFNDQUxFOworCXNldHVwLmRpZmZfMl81X2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZzZXR1cCwgc2l6ZW9mKHNldHVwKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2VlcHJvbV9yZWFkKCk6Q2Fubm90IGNvcHkgdG8gdXNlclxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERJTyBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfZGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCAqZGlvX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19pb2N0bCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWRpb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9kaW9faW9jdGwoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfZGlvX2lvY3RsKCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0RJT19DT05GSUc6CisJCXJldHVybiBtZTQwMDBfZGlvX2NvbmZpZygoc3RydWN0IG1lNDAwMF9kaW9fY29uZmlnICopYXJnLAorCQkJCQkgZGlvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0RJT19TRVRfQllURToKKwkJcmV0dXJuIG1lNDAwMF9kaW9fc2V0X2J5dGUoKHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUgKilhcmcsCisJCQkJCSAgIGRpb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9ESU9fR0VUX0JZVEU6CisJCXJldHVybiBtZTQwMDBfZGlvX2dldF9ieXRlKChzdHJ1Y3QgbWU0MDAwX2Rpb19ieXRlICopYXJnLAorCQkJCQkgICBkaW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfRElPX1JFU0VUOgorCQlyZXR1cm4gbWU0MDAwX2Rpb19yZXNldChkaW9fY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9faW9jdGwoKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgc2VydmljZSk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZGlvX2NvbmZpZyhzdHJ1Y3QgbWU0MDAwX2Rpb19jb25maWcgKmFyZywKKwkJCSAgICAgc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCAqZGlvX2NvbnRleHQpCit7CisJc3RydWN0IG1lNDAwMF9kaW9fY29uZmlnIGNtZDsKKwl1MzIgdG1wOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19jb25maWcoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IG1lNDAwMF9kaW9fY29uZmlnKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIENoZWNrIHBvcnQgcGFyYW1ldGVyICovCisJaWYgKGNtZC5wb3J0ID49IGRpb19jb250ZXh0LT5kaW9fY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlQREVCVUcoIm1lNDAwMF9kaW9fY29uZmlnKCk6IHBvcnQgJWQsIG1vZGUgJWQsIGZ1bmN0aW9uICVkXG4iLCBjbWQucG9ydCwKKwkgICAgICAgY21kLm1vZGUsIGNtZC5mdW5jdGlvbik7CisKKwlpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0EpIHsKKwkJaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9JTlBVVCkgeworCQkJLyogQ2hlY2sgaWYgb3B0byBpc29sYXRlZCB2ZXJzaW9uICovCisJCQlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkNhbm5vdCBzZXQgdG8gaW5wdXQgb24gb3B0byBpc29sYXRlZCB2ZXJzaW9uc1xuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEpOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9PVVRQVVQpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEpOworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19MT1cpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMCk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMCB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzE7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0hJR0gpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wIHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMSB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMDsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpNb2RlICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCQkgICAgICAgY21kLm1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9CKSB7CisJCWlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfSU5QVVQpIHsKKwkJCS8qIE9ubHkgZG8gYW55dGhpbmcgd2hlbiBUVEwgdmVyc2lvbiBpcyBpbnN0YWxsZWQgKi8KKwkJCWlmICgobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJCXRtcCAmPQorCQkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yIHwKKwkJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMyk7CisJCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJfQorCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9PVVRQVVQpIHsKKwkJCS8qIENoZWNrIGlmIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbiAqLworCQkJaWYgKCEobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpDYW5ub3Qgc2V0IHRvIG91dHB1dCBvbiBvcHRvIGlzb2xhdGVkIHZlcnNpb25zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMiB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMyk7CisJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzI7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0xPVykgeworCQkJLyogQ2hlY2sgaWYgb3B0byBpc29sYXRlZCB2ZXJzaW9uICovCisJCQlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkNhbm5vdCBzZXQgdG8gRklGTyBsb3cgb3V0cHV0IG9uIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbnNcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzEpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzIgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKSB7CisJCQkvKiBDaGVjayBpZiBvcHRvIGlzb2xhdGVkIHZlcnNpb24gKi8KKwkJCWlmICghKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmRpcl9yZWcpICYgMHgxKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6Q2Fubm90IHNldCB0byBGSUZPIGhpZ2ggb3V0cHV0IG9uIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbnNcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMiB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzMgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzE7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGNtZC5tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQykgeworCQlpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX0lOUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81KTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81KTsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNDsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fTE9XKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzIpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81OworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNCB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzUgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzI7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGNtZC5tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfRCkgeworCQlpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX0lOUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83KTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83KTsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNjsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fTE9XKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzMpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzYgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83OworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNiB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzcgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzM7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGNtZC5tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlQREVCVUcoIm1lNDAwMF9kaW9fY29uZmlnKCk6IHBvcnQgJWQsIG1vZGUgJWQsIGZ1bmN0aW9uICVkXG4iLCBjbWQucG9ydCwKKwkgICAgICAgY21kLm1vZGUsIGNtZC5mdW5jdGlvbik7CisKKwlpZiAoKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKQorCSAgICB8fCAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0xPVykpIHsKKwkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8wIHwKKwkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8xKTsKKwkJaWYgKGNtZC5mdW5jdGlvbiA9PSBNRTQwMDBfRElPX0ZVTkNUSU9OX1BBVFRFUk4pIHsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQuZnVuY3Rpb24gPT0gTUU0MDAwX0RJT19GVU5DVElPTl9ERU1VWCkgeworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMDsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQuZnVuY3Rpb24gPT0gTUU0MDAwX0RJT19GVU5DVElPTl9NVVgpIHsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX0ZVTkNUSU9OXzE7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6SW52YWxpZCBwb3J0IGZ1bmN0aW9uIHNwZWNpZmllZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9kaW9fc2V0X2J5dGUoc3RydWN0IG1lNDAwMF9kaW9fYnl0ZSAqYXJnLAorCQkJICAgICAgIHN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgKmRpb19jb250ZXh0KQoreworCXN0cnVjdCBtZTQwMDBfZGlvX2J5dGUgY21kOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19zZXRfYnl0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgbWU0MDAwX2Rpb19ieXRlKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogQ2hlY2sgcG9ydCBwYXJhbWV0ZXIgKi8KKwlpZiAoY21kLnBvcnQgPj0gZGlvX2NvbnRleHQtPmRpb19jb3VudCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9BKSB7CisJCWlmICgobWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpICYgMHgzKSAhPSAweDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGluIG91dHB1dCBtb2RlXG4iLAorCQkJICAgICAgIGNtZC5wb3J0KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCW1lNDAwMF9vdXRsKGNtZC5ieXRlLCBkaW9fY29udGV4dC0+cG9ydF8wX3JlZyk7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQikgeworCQlpZiAoKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKSAmIDB4QykgIT0gMHg0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBpbiBvdXRwdXQgbW9kZVxuIiwKKwkJCSAgICAgICBjbWQucG9ydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZTQwMDBfb3V0bChjbWQuYnl0ZSwgZGlvX2NvbnRleHQtPnBvcnRfMV9yZWcpOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0MpIHsKKwkJaWYgKChtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZykgJiAweDMwKSAhPSAweDEwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBpbiBvdXRwdXQgbW9kZVxuIiwKKwkJCSAgICAgICBjbWQucG9ydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZTQwMDBfb3V0bChjbWQuYnl0ZSwgZGlvX2NvbnRleHQtPnBvcnRfMl9yZWcpOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0QpIHsKKwkJaWYgKChtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZykgJiAweEMwKSAhPSAweDQwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBpbiBvdXRwdXQgbW9kZVxuIiwKKwkJCSAgICAgICBjbWQucG9ydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZTQwMDBfb3V0bChjbWQuYnl0ZSwgZGlvX2NvbnRleHQtPnBvcnRfM19yZWcpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZGlvX2dldF9ieXRlKHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUgKmFyZywKKwkJCSAgICAgICBzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICpkaW9fY29udGV4dCkKK3sKKwlzdHJ1Y3QgbWU0MDAwX2Rpb19ieXRlIGNtZDsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9kaW9fZ2V0X2J5dGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IG1lNDAwMF9kaW9fYnl0ZSkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fZ2V0X2J5dGUoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIENoZWNrIHBvcnQgcGFyYW1ldGVyICovCisJaWYgKGNtZC5wb3J0ID49IGRpb19jb250ZXh0LT5kaW9fY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fZ2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQucG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQSkgeworCQljbWQuYnl0ZSA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPnBvcnRfMF9yZWcpICYgMHhGRjsKKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9CKSB7CisJCWNtZC5ieXRlID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+cG9ydF8xX3JlZykgJiAweEZGOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0MpIHsKKwkJY21kLmJ5dGUgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5wb3J0XzJfcmVnKSAmIDB4RkY7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfRCkgeworCQljbWQuYnl0ZSA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPnBvcnRfM19yZWcpICYgMHhGRjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19nZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29weSByZXN1bHQgYmFjayB0byB1c2VyICovCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmNtZCwgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2dldF9ieXRlKCk6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19yZXNldChzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICpkaW9fY29udGV4dCkKK3sKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19yZXNldCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENsZWFyIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCisJbWU0MDAwX291dGwoMCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIENoZWNrIGZvciBvcHRvIGlzb2xhdGVkIHZlcnNpb24gKi8KKwlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJbWU0MDAwX291dGwoMHgxLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQltZTQwMDBfb3V0bCgweDAsIGRpb19jb250ZXh0LT5wb3J0XzBfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ09VTlRFUiBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0ICpjbnRfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfY250X2lvY3RsKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJY250X2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2Rpb19pb2N0bCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9kaW9faW9jdGwoKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQ05UX1JFQUQ6CisJCXJldHVybiBtZTQwMDBfY250X3JlYWQoKHN0cnVjdCBtZTQwMDBfY250ICopYXJnLCBjbnRfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQ05UX1dSSVRFOgorCQlyZXR1cm4gbWU0MDAwX2NudF93cml0ZSgoc3RydWN0IG1lNDAwMF9jbnQgKilhcmcsIGNudF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9DTlRfQ09ORklHOgorCQlyZXR1cm4gbWU0MDAwX2NudF9jb25maWcoKHN0cnVjdCBtZTQwMDBfY250X2NvbmZpZyAqKWFyZywKKwkJCQkJIGNudF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9DTlRfUkVTRVQ6CisJCXJldHVybiBtZTQwMDBfY250X3Jlc2V0KGNudF9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19pb2N0bCgpOkludmFsaWQgc2VydmljZSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBzZXJ2aWNlKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfY29uZmlnKHN0cnVjdCBtZTQwMDBfY250X2NvbmZpZyAqYXJnLAorCQkJICAgICBzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0ICpjbnRfY29udGV4dCkKK3sKKwlzdHJ1Y3QgbWU0MDAwX2NudF9jb25maWcgY21kOworCXU4IGNvdW50ZXI7CisJdTggbW9kZTsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9jbnRfY29uZmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfY250X2NvbmZpZykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfY29uZmlnKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBDaGVjayBjb3VudGVyIHBhcmFtZXRlciAqLworCXN3aXRjaCAoY21kLmNvdW50ZXIpIHsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8wOgorCQljb3VudGVyID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9DT1VOVEVSXzA7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzE6CisJCWNvdW50ZXIgPSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMTsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMjoKKwkJY291bnRlciA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfQ09VTlRFUl8yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9jb25maWcoKTpDb3VudGVyICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQuY291bnRlcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIG1vZGUgcGFyYW1ldGVyICovCisJc3dpdGNoIChjbWQubW9kZSkgeworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzA6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMDsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfMToKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8xOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV8yOgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzI7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzM6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMzsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfNDoKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV80OworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV81OgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X2NvbmZpZygpOk1vZGUgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5tb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV3JpdGUgdGhlIGNvbnRyb2wgd29yZCAqLworCW1lNDAwMF9vdXRiKChjb3VudGVyIHwgbW9kZSB8IDB4MzApLCBjbnRfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9yZWFkKHN0cnVjdCBtZTQwMDBfY250ICphcmcsCisJCQkgICBzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0ICpjbnRfY29udGV4dCkKK3sKKwlzdHJ1Y3QgbWU0MDAwX2NudCBjbWQ7CisJdTggdG1wOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2NudF9yZWFkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfY250KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9yZWFkKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBSZWFkIGNvdW50ZXIgKi8KKwlzd2l0Y2ggKGNtZC5jb3VudGVyKSB7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMDoKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisJCWNtZC52YWx1ZSA9IHRtcDsKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisJCWNtZC52YWx1ZSB8PSAoKHUxNikgdG1wKSA8PCA4OworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8xOgorCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwkJY21kLnZhbHVlID0gdG1wOworCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwkJY21kLnZhbHVlIHw9ICgodTE2KSB0bXApIDw8IDg7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzI6CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCQljbWQudmFsdWUgPSB0bXA7CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCQljbWQudmFsdWUgfD0gKCh1MTYpIHRtcCkgPDwgODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfcmVhZCgpOkNvdW50ZXIgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5jb3VudGVyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29weSByZXN1bHQgYmFjayB0byB1c2VyICovCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmNtZCwgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfY250KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9yZWFkKCk6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF93cml0ZShzdHJ1Y3QgbWU0MDAwX2NudCAqYXJnLAorCQkJICAgIHN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgKmNudF9jb250ZXh0KQoreworCXN0cnVjdCBtZTQwMDBfY250IGNtZDsKKwl1OCB0bXA7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfY250X3dyaXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfY250KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF93cml0ZSgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogV3JpdGUgY291bnRlciAqLworCXN3aXRjaCAoY21kLmNvdW50ZXIpIHsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8wOgorCQl0bXAgPSBjbWQudmFsdWUgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKwkJdG1wID0gKGNtZC52YWx1ZSA+PiA4KSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8xOgorCQl0bXAgPSBjbWQudmFsdWUgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwkJdG1wID0gKGNtZC52YWx1ZSA+PiA4KSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8yOgorCQl0bXAgPSBjbWQudmFsdWUgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKwkJdG1wID0gKGNtZC52YWx1ZSA+PiA4KSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF93cml0ZSgpOkNvdW50ZXIgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5jb3VudGVyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9yZXNldChzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0ICpjbnRfY29udGV4dCkKK3sKKwlDQUxMX1BERUJVRygibWU0MDAwX2NudF9yZXNldCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIFNldCB0aGUgbW9kZSBhbmQgdmFsdWUgZm9yIGNvdW50ZXIgMCAqLworCW1lNDAwMF9vdXRiKDB4MzAsIGNudF9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKworCS8qIFNldCB0aGUgbW9kZSBhbmQgdmFsdWUgZm9yIGNvdW50ZXIgMSAqLworCW1lNDAwMF9vdXRiKDB4NzAsIGNudF9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKworCS8qIFNldCB0aGUgbW9kZSBhbmQgdmFsdWUgZm9yIGNvdW50ZXIgMiAqLworCW1lNDAwMF9vdXRiKDB4QjAsIGNudF9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFeHRlcm5hbCBJbnRlcnJ1cHQgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkJdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0ICpleHRfaW50X2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfaW9jdGwoKSBpcyBleGVjdXRlZFxuIik7CisKKwlleHRfaW50X2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2V4dF9pbnRfaW9jdGwoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2V4dF9pbnRfaW9jdGwoKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfRVhUX0lOVF9FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfZXh0X2ludF9lbmFibGUoZXh0X2ludF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9FWFRfSU5UX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfZXh0X2ludF9kaXNhYmxlKGV4dF9pbnRfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfRVhUX0lOVF9DT1VOVDoKKwkJcmV0dXJuIG1lNDAwMF9leHRfaW50X2NvdW50KCh1bnNpZ25lZCBsb25nICopYXJnLAorCQkJCQkgICAgZXh0X2ludF9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2V4dF9pbnRfaW9jdGwoKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgc2VydmljZSk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9lbmFibGUoc3RydWN0IG1lNDAwMF9leHRfaW50X2NvbnRleHQgKmV4dF9pbnRfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJROworCW1lNDAwMF9vdXRsKHRtcCwgZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9kaXNhYmxlKHN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0ICpleHRfaW50X2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJROworCW1lNDAwMF9vdXRsKHRtcCwgZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9jb3VudCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkJc3RydWN0IG1lNDAwMF9leHRfaW50X2NvbnRleHQgKmV4dF9pbnRfY29udGV4dCkKK3sKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9jb3VudCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXB1dF91c2VyKGV4dF9pbnRfY29udGV4dC0+aW50X2NvdW50LCBhcmcpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5lcmFsIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2dldF91c2VyX2luZm8oc3RydWN0IG1lNDAwMF91c2VyX2luZm8gKmFyZywKKwkJCQlzdHJ1Y3QgbWU0MDAwX2luZm8gKmJvYXJkX2luZm8pCit7CisJc3RydWN0IG1lNDAwMF91c2VyX2luZm8gdXNlcl9pbmZvOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9nZXRfdXNlcl9pbmZvKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdXNlcl9pbmZvLmJvYXJkX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfY291bnQ7CisJdXNlcl9pbmZvLnBseF9yZWdiYXNlID0gYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2U7CisJdXNlcl9pbmZvLnBseF9yZWdiYXNlX3NpemUgPSBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZV9zaXplOworCXVzZXJfaW5mby5tZTQwMDBfcmVnYmFzZSA9IGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlOworCXVzZXJfaW5mby5tZTQwMDBfcmVnYmFzZV9zaXplID0gYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZTsKKwl1c2VyX2luZm8uc2VyaWFsX25vID0gYm9hcmRfaW5mby0+c2VyaWFsX25vOworCXVzZXJfaW5mby5od19yZXZpc2lvbiA9IGJvYXJkX2luZm8tPmh3X3JldmlzaW9uOworCXVzZXJfaW5mby52ZW5kb3JfaWQgPSBib2FyZF9pbmZvLT52ZW5kb3JfaWQ7CisJdXNlcl9pbmZvLmRldmljZV9pZCA9IGJvYXJkX2luZm8tPmRldmljZV9pZDsKKwl1c2VyX2luZm8ucGNpX2J1c19ubyA9IGJvYXJkX2luZm8tPnBjaV9idXNfbm87CisJdXNlcl9pbmZvLnBjaV9kZXZfbm8gPSBib2FyZF9pbmZvLT5wY2lfZGV2X25vOworCXVzZXJfaW5mby5wY2lfZnVuY19ubyA9IGJvYXJkX2luZm8tPnBjaV9mdW5jX25vOworCXVzZXJfaW5mby5pcnEgPSBib2FyZF9pbmZvLT5pcnE7CisJdXNlcl9pbmZvLmlycV9jb3VudCA9IGJvYXJkX2luZm8tPmlycV9jb3VudDsKKwl1c2VyX2luZm8uZHJpdmVyX3ZlcnNpb24gPSBNRTQwMDBfRFJJVkVSX1ZFUlNJT047CisJdXNlcl9pbmZvLmFvX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uY291bnQ7CisJdXNlcl9pbmZvLmFvX2ZpZm9fY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50OworCisJdXNlcl9pbmZvLmFpX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuY291bnQ7CisJdXNlcl9pbmZvLmFpX3NoX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuc2hfY291bnQ7CisJdXNlcl9pbmZvLmFpX2V4X3RyaWdfYW5hbG9nID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZXhfdHJpZ19hbmFsb2c7CisKKwl1c2VyX2luZm8uZGlvX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+ZGlvLmNvdW50OworCisJdXNlcl9pbmZvLmNudF9jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmNudC5jb3VudDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdXNlcl9pbmZvLCBzaXplb2Yoc3RydWN0IG1lNDAwMF91c2VyX2luZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSVNSIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVfcHRyLCBpbnQgbW9kZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgbWU0MDAwX2V4dF9pbnRfY29udGV4dCAqZXh0X2ludF9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9leHRfaW50X2Zhc3luYygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWV4dF9pbnRfY29udGV4dCA9IGZpbGVfcHRyLT5wcml2YXRlX2RhdGE7CisKKwlyZXN1bHQgPQorCSAgICBmYXN5bmNfaGVscGVyKGZkLCBmaWxlX3B0ciwgbW9kZSwgJmV4dF9pbnRfY29udGV4dC0+ZmFzeW5jX3B0cik7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfZmFzeW5jKCkgaXMgbGVhdmVkXG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIHRtcDsKKwl1MzIgdmFsdWU7CisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICphb19jb250ZXh0OworCWludCBpOworCWludCBjID0gMDsKKwlpbnQgYzEgPSAwOworCS8vdW5zaWduZWQgbG9uZyBiZWZvcmU7CisJLy91bnNpZ25lZCBsb25nIGFmdGVyOworCisJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBkZXZfaWQ7CisKKwkvKiBDaGVjayBpZiBpcnEgbnVtYmVyIGlzIHJpZ2h0ICovCisJaWYgKGlycSAhPSBhb19jb250ZXh0LT5pcnEpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOmluY29ycmVjdCBpbnRlcnJ1cHQgbnVtOiAlZFxuIiwKKwkJCSAgIGlycSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGlzIERBQyByaXNlZCBhbiBpbnRlcnJ1cHQgKi8KKwlpZiAoIQorCSAgICAoKDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAzKSkgJgorCSAgICAgbWU0MDAwX2lubChhb19jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykpKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpOb3QgdGhpcyBEQUNcbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisKKwlpZiAoISh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9FRikgJiYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0hGKQorCSAgICAmJiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfSEYpKSB7CisJCWMgPSBNRTQwMDBfQU9fRklGT19DT1VOVDsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOkZpZm8gZW1wdHlcbiIpOworCX0gZWxzZSBpZiAoKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0VGKQorCQkgICAmJiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfSEYpCisJCSAgICYmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9IRikpIHsKKwkJYyA9IE1FNDAwMF9BT19GSUZPX0NPVU5UIC8gMjsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOkZpZm8gdW5kZXIgaGFsZiBmdWxsXG4iKTsKKwl9IGVsc2UgeworCQljID0gMDsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOkZpZm8gZnVsbFxuIik7CisJfQorCisJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOlRyeSB0byB3cml0ZSAweCUwNFggdmFsdWVzXG4iLCBjKTsKKworCXdoaWxlICgxKSB7CisJCWMxID0gbWU0MDAwX3ZhbHVlc190b19lbmQoYW9fY29udGV4dC0+Y2lyY19idWYsCisJCQkJCSAgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpWYWx1ZXMgdG8gZW5kID0gJWRcbiIsIGMxKTsKKwkJaWYgKGMxID4gYykKKwkJCWMxID0gYzsKKworCQlpZiAoYzEgPD0gMCkgeworCQkJSVNSX1BERUJVRworCQkJICAgICgibWU0MDAwX2FvX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZW1wdHlcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJLy9yZHRzY2woYmVmb3JlKTsKKwkJaWYgKCgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDFfRklGT19SRUcpIHx8CisJCSAgICAoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAzX0ZJRk9fUkVHKSkgeworCQkJZm9yIChpID0gMDsgaSA8IGMxOyBpKyspIHsKKwkJCQl2YWx1ZSA9CisJCQkJICAgICgodTMyKQorCQkJCSAgICAgKCoKKwkJCQkgICAgICAoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkgICAgICAgYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCArIGkpKSkgPDwgMTY7CisJCQkJb3V0bCh2YWx1ZSwgYW9fY29udGV4dC0+Zmlmb19yZWcpOworCQkJfQorCQl9IGVsc2UKKwkJCW91dHN3KGFvX2NvbnRleHQtPmZpZm9fcmVnLAorCQkJICAgICAgYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCSAgICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwsIGMxKTsKKworCQkvL3JkdHNjbChhZnRlcik7CisJCS8vcHJpbnRrKEtFUk5fRVJSIk1FNDAwMDptZTQwMDBfYW9faXNyKCk6VGltZSBsYXBzZSA9ICVsdVxuIiwgYWZ0ZXIgLSBiZWZvcmUpOworCisJCWFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPQorCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgKyBjMSkgJiAoTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCAtCisJCQkJCQkJMSk7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTolZCB2YWx1ZXMgd3JvdGUgdG8gcG9ydCAweCUwNFhcbiIsCisJCQkgICBjMSwgYW9fY29udGV4dC0+Zmlmb19yZWcpOworCQljIC09IGMxOworCX0KKworCS8qIElmIHRoZXJlIGFyZSBubyB2YWx1ZXMgbGVmdCBpbiB0aGUgYnVmZmVyLCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmludF9sb2NrKTsKKwlpZiAoIW1lNDAwMF9idWZfY291bnQoYW9fY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKSB7CisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FvX2lzcigpOkRpc2FibGUgSW50ZXJydXB0IGJlY2F1c2Ugbm8gdmFsdWVzIGxlZnQgaW4gYnVmZmVyXG4iKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCX0KKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOworCisJLyogUmVzZXQgdGhlIGludGVycnVwdCAqLworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfUkVTRVRfSVJROworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX1JFU0VUX0lSUTsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIElmIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCwgZmxvdyB3YXMgaW50ZXJydXB0ZWQgKi8KKwlpZiAoIShtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDptZTQwMDBfYW9faXNyKCk6QnJva2VuIHBpcGVcbiIpOworCQlhb19jb250ZXh0LT5waXBlX2ZsYWcgPSAxOwkvLyBTZXQgZmxhZyBpbiBvcmRlciB0byBpbmZvcm0gd3JpdGUgcm91dGluZQorCQl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJROwkvLyBEaXNhYmxlIGludGVycnVwdAorCX0KKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOworCisJLyogV2FrZSB1cCB3YWl0aW5nIHByb2Nlc3MgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJihhb19jb250ZXh0LT53YWl0X3F1ZXVlKSk7CisKKwkvKiBDb3VudCB0aGUgaW50ZXJydXB0ICovCisJYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+aXJxX2NvdW50Kys7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfYWlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgdG1wOworCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dDsKKwlpbnQgaTsKKwlpbnQgYyA9IDA7CisJaW50IGMxID0gMDsKKyNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCisJdW5zaWduZWQgbG9uZyBiZWZvcmU7CisJdW5zaWduZWQgbG9uZyBhZnRlcjsKKyNlbmRpZgorCisJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpIGlzIGV4ZWN1dGVkXG4iKTsKKworI2lmZGVmIE1FNDAwMF9JU1JfREVCVUcKKwlyZHRzY2woYmVmb3JlKTsKKyNlbmRpZgorCisJYWlfY29udGV4dCA9IGRldl9pZDsKKworCS8qIENoZWNrIGlmIGlycSBudW1iZXIgaXMgcmlnaHQgKi8KKwlpZiAoaXJxICE9IGFpX2NvbnRleHQtPmlycSkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6aW5jb3JyZWN0IGludGVycnVwdCBudW06ICVkXG4iLAorCQkJICAgaXJxKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnKSAmCisJICAgIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BSV9IRikgeworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGhhbGYgZnVsbCBpbnRlcnJ1cHQgb2NjdXJlZFxuIik7CisKKwkJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLworCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQlpZiAoISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKSAmJgorCQkgICAgISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkgICAgJiYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBmdWxsXG4iKTsKKwkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVDsKKworCQkJLyogRklGTyBvdmVyZmxvdywgc28gc3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8CisJCQkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRKTsKKwkJCW91dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQl9IGVsc2UgaWYgKCh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKSAmJgorCQkJICAgISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJICAgJiYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBoYWxmIGZ1bGxcbiIpOworCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMjsKKwkJfSBlbHNlIHsKKwkJCWMgPSAwOworCQkJSVNSX1BERUJVRworCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkNhbid0IGRldGVybWluZSBzdGF0ZSBvZiBmaWZvXG4iKTsKKwkJfQorCisJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTpUcnkgdG8gcmVhZCAlZCB2YWx1ZXNcbiIsIGMpOworCisJCXdoaWxlICgxKSB7CisJCQljMSA9IG1lNDAwMF9zcGFjZV90b19lbmQoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6U3BhY2UgdG8gZW5kID0gJWRcbiIsIGMxKTsKKwkJCWlmIChjMSA+IGMpCisJCQkJYzEgPSBjOworCisJCQlpZiAoYzEgPD0gMCkgeworCQkJCUlTUl9QREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6V29yayBkb25lIG9yIGJ1ZmZlciBmdWxsXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaW5zdyhhaV9jb250ZXh0LT5kYXRhX3JlZywKKwkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCwgYzEpOworCQkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJICAgICBjMSkgJiAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCAtIDEpOworCQkJYyAtPSBjMTsKKwkJfQorCisJCS8qIFdvcmsgaXMgZG9uZSwgc28gcmVzZXQgdGhlIGludGVycnVwdCAqLworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpyZXNldCBpbnRlcnJ1cHQgZmlmbyBoYWxmIGZ1bGwgaW50ZXJydXB0XG4iKTsKKwkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJfQorCisJaWYgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+aXJxX3N0YXR1c19yZWcpICYgTUU0MDAwX0lSUV9TVEFUVVNfQklUX1NDKSB7CisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOlNhbXBsZSBjb3VudGVyIGludGVycnVwdCBvY2N1cmVkXG4iKTsKKworCQlpZiAoIWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQkJSVNSX1BERUJVRworCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlNpbmdsZSBkYXRhIGJsb2NrIGF2YWlsYWJsZVxuIik7CisKKwkJCS8qIFBvbGwgZGF0YSB1bnRpbCBmaWZvIGVtcHR5ICovCisJCQlmb3IgKGkgPSAwOworCQkJICAgICAoaSA8IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMikKKwkJCSAgICAgJiYgKGlubChhaV9jb250ZXh0LT5jdHJsX3JlZykgJgorCQkJCSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKTsgaSsrKSB7CisJCQkJaWYgKG1lNDAwMF9zcGFjZV90b19lbmQKKwkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCSAgICAgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpIHsKKwkJCQkJKihhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQpID0KKwkJIGludyhhaV9jb250ZXh0LT5kYXRhX3JlZyk7CisJCQkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJCQkgICAgIDEpICYgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLSAxKTsKKwkJCQl9IGVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6JWQgdmFsdWVzIHJlYWRcbiIsIGkpOworCQl9IGVsc2UgeworCQkJaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyIDw9CisJCQkgICAgTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKSB7CisJCQkJSVNSX1BERUJVRworCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpJbnRlcnJ1cHQgZnJvbSBhZGp1c3RhYmxlIGhhbGYgZnVsbCB0aHJlc2hvbGRcbiIpOworCisJCQkJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLworCQkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJCQkJaWYgKCEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkgJiYKKwkJCQkgICAgISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJCSAgICAmJiAodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBmdWxsXG4iKTsKKwkJCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UOworCisJCQkJCS8qIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbiAqLworCQkJCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJCXRtcCB8PQorCQkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCQkJCQlvdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQkJCX0gZWxzZSBpZiAoKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpCisJCQkJCSAgICYmICEodG1wICYKKwkJCQkJCU1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEpCisJCQkJCSAgICYmICh0bXAgJgorCQkJCQkgICAgICAgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBoYWxmIGZ1bGxcbiIpOworCQkJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyOworCQkJCX0gZWxzZSB7CisJCQkJCWMgPSBhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcjsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6U2FtcGxlIGNvdW50IHZhbHVlc1xuIik7CisJCQkJfQorCisJCQkJSVNSX1BERUJVRworCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpUcnkgdG8gcmVhZCAlZCB2YWx1ZXNcbiIsCisJCQkJICAgICBjKTsKKworCQkJCXdoaWxlICgxKSB7CisJCQkJCWMxID0gbWU0MDAwX3NwYWNlX3RvX2VuZChhaV9jb250ZXh0LT4KKwkJCQkJCQkJIGNpcmNfYnVmLAorCQkJCQkJCQkgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlNwYWNlIHRvIGVuZCA9ICVkXG4iLAorCQkJCQkgICAgIGMxKTsKKwkJCQkJaWYgKGMxID4gYykKKwkJCQkJCWMxID0gYzsKKworCQkJCQlpZiAoYzEgPD0gMCkgeworCQkJCQkJSVNSX1BERUJVRworCQkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZnVsbFxuIik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCWluc3coYWlfY29udGV4dC0+ZGF0YV9yZWcsCisJCQkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLCBjMSk7CisJCQkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJCQkgICAgIGMxKSAmIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0gMSk7CisJCQkJCWMgLT0gYzE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlJU1JfUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOk11bHRpcGxlIGRhdGEgYmxvY2sgYXZhaWxhYmxlXG4iKTsKKworCQkJCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgKi8KKwkJCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQkJCWlmICghKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpICYmCisJCQkJICAgICEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKKwkJCQkgICAgJiYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkZpZm8gZnVsbFxuIik7CisJCQkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVDsKKworCQkJCQkvKiBGSUZPIG92ZXJmbG93LCBzbyBzdG9wIGNvbnZlcnNpb24gKi8KKwkJCQkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCQkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJCQl0bXAgfD0KKwkJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwkJCQkJb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKworCQkJCQl3aGlsZSAoMSkgeworCQkJCQkJYzEgPSBtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJICAgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJCQkJCUlTUl9QREVCVUcKKwkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTcGFjZSB0byBlbmQgPSAlZFxuIiwKKwkJCQkJCSAgICAgYzEpOworCQkJCQkJaWYgKGMxID4gYykKKwkJCQkJCQljMSA9IGM7CisKKwkJCQkJCWlmIChjMSA8PSAwKSB7CisJCQkJCQkJSVNSX1BERUJVRworCQkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGZ1bGxcbiIpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpbnN3KGFpX2NvbnRleHQtPmRhdGFfcmVnLAorCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLAorCQkJCQkJICAgICBjMSk7CisJCQkJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkJCQkgICAgIGMxKSAmCisJCQkJCQkgICAgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLQorCQkJCQkJICAgICAxKTsKKwkJCQkJCWMgLT0gYzE7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKCh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKQorCQkJCQkgICAmJiAhKHRtcCAmCisJCQkJCQlNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJCQkgICAmJiAodG1wICYKKwkJCQkJICAgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkZpZm8gaGFsZiBmdWxsXG4iKTsKKwkJCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMjsKKworCQkJCQl3aGlsZSAoMSkgeworCQkJCQkJYzEgPSBtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJICAgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJCQkJCUlTUl9QREVCVUcKKwkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTcGFjZSB0byBlbmQgPSAlZFxuIiwKKwkJCQkJCSAgICAgYzEpOworCQkJCQkJaWYgKGMxID4gYykKKwkJCQkJCQljMSA9IGM7CisKKwkJCQkJCWlmIChjMSA8PSAwKSB7CisJCQkJCQkJSVNSX1BERUJVRworCQkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGZ1bGxcbiIpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpbnN3KGFpX2NvbnRleHQtPmRhdGFfcmVnLAorCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLAorCQkJCQkJICAgICBjMSk7CisJCQkJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkJCQkgICAgIGMxKSAmCisJCQkJCQkgICAgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLQorCQkJCQkJICAgICAxKTsKKwkJCQkJCWMgLT0gYzE7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvKiBQb2xsIGRhdGEgdW50aWwgZmlmbyBlbXB0eSAqLworCQkJCQlmb3IgKGkgPSAwOworCQkJCQkgICAgIChpIDwgTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKQorCQkJCQkgICAgICYmIChpbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpICYKKwkJCQkJCSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKTsKKwkJCQkJICAgICBpKyspIHsKKwkJCQkJCWlmIChtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJICAgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkgeworCQkJCQkJCSooYWlfY29udGV4dC0+Y2lyY19idWYuCisJCQkJCQkJICBidWYgKworCQkJCQkJCSAgYWlfY29udGV4dC0+Y2lyY19idWYuCisJCQkJCQkJICBoZWFkKSA9CisJCQkJICAgICAgIGludyhhaV9jb250ZXh0LT5kYXRhX3JlZyk7CisJCQkJCQkJYWlfY29udGV4dC0+Y2lyY19idWYuCisJCQkJCQkJICAgIGhlYWQgPQorCQkJCQkJCSAgICAoYWlfY29udGV4dC0+CisJCQkJCQkJICAgICBjaXJjX2J1Zi5oZWFkICsKKwkJCQkJCQkgICAgIDEpICYKKwkJCQkJCQkgICAgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQKKwkJCQkJCQkgICAgIC0gMSk7CisJCQkJCQl9IGVsc2UKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTolZCB2YWx1ZXMgcmVhZFxuIiwKKwkJCQkJICAgICBpKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBXb3JrIGlzIGRvbmUsIHNvIHJlc2V0IHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6cmVzZXQgaW50ZXJydXB0IGZyb20gc2FtcGxlIGNvdW50ZXJcbiIpOworCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwl9CisKKwkvKiBWYWx1ZXMgYXJlIG5vdyBhdmFpbGFibGUsIHNvIHdha2UgdXAgd2FpdGluZyBwcm9jZXNzICovCisJaWYgKG1lNDAwMF9idWZfY291bnQoYWlfY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTpXYWtlIHVwIHdhaXRpbmcgcHJvY2Vzc1xuIik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmKGFpX2NvbnRleHQtPndhaXRfcXVldWUpKTsKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyBubyBzcGFjZSBsZWZ0IGluIHRoZSBidWZmZXIsIGRpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCWlmICghbWU0MDAwX2J1Zl9zcGFjZShhaV9jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpIHsKKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RGlzYWJsZSBJbnRlcnJ1cHQgYmVjYXVzZSBubyBzcGFjZSBsZWZ0IGluIGJ1ZmZlclxuIik7CisJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAorCQkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfTEVfSVJRKTsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJfQorCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisKKyNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCisJcmR0c2NsKGFmdGVyKTsKKwlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDptZTQwMDBfYWlfaXNyKCk6VGltZSBsYXBzZSA9ICVsdVxuIiwKKwkgICAgICAgYWZ0ZXIgLSBiZWZvcmUpOworI2VuZGlmCisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfZXh0X2ludF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0ICpleHRfaW50X2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlJU1JfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9pc3IoKSBpcyBleGVjdXRlZFxuIik7CisKKwlleHRfaW50X2NvbnRleHQgPSBkZXZfaWQ7CisKKwkvKiBDaGVjayBpZiBpcnEgbnVtYmVyIGlzIHJpZ2h0ICovCisJaWYgKGlycSAhPSBleHRfaW50X2NvbnRleHQtPmlycSkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9pc3IoKTppbmNvcnJlY3QgaW50ZXJydXB0IG51bTogJWRcbiIsCisJCQkgICBpcnEpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKG1lNDAwMF9pbmwoZXh0X2ludF9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykgJgorCSAgICBNRTQwMDBfSVJRX1NUQVRVU19CSVRfRVgpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2V4dF9pbnRfaXNyKCk6RXh0ZXJuYWwgaW50ZXJydXB0IG9jY3VyZWRcbiIpOworCQl0bXAgPSBtZTQwMDBfaW5sKGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCisJCWV4dF9pbnRfY29udGV4dC0+aW50X2NvdW50Kys7CisKKwkJaWYgKGV4dF9pbnRfY29udGV4dC0+ZmFzeW5jX3B0cikgeworCQkJSVNSX1BERUJVRworCQkJICAgICgibWUyNjAwX2V4dF9pbnRfaXNyKCk6U2VuZCBzaWduYWwgdG8gcHJvY2Vzc1xuIik7CisJCQlraWxsX2Zhc3luYygmZXh0X2ludF9jb250ZXh0LT5mYXN5bmNfcHRyLCBTSUdJTywKKwkJCQkgICAgUE9MTF9JTik7CisJCX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtZTQwMDBfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpib2FyZF9wOworCXN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbzsKKworCUNBTExfUERFQlVHKCJjbGVhbnVwX21vZHVsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0VYVF9JTlRfTkFNRSk7CisKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0NOVF9OQU1FKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRElPX05BTUUpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FJX05BTUUpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FPX05BTUUpOworCisJcmVtb3ZlX3Byb2NfZW50cnkoIm1lNDAwMCIsIE5VTEwpOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtZTQwMDBfZHJpdmVyKTsKKworCS8qIFJlc2V0IHRoZSBib2FyZHMgKi8KKwlmb3IgKGJvYXJkX3AgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJICAgICBib2FyZF9wICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBib2FyZF9wID0gYm9hcmRfcC0+bmV4dCkgeworCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShib2FyZF9wLCBzdHJ1Y3QgbWU0MDAwX2luZm8sIGxpc3QpOworCQltZTQwMDBfcmVzZXRfYm9hcmQoYm9hcmRfaW5mbyk7CisJfQorCisJY2xlYXJfYm9hcmRfaW5mb19saXN0KCk7Cit9CisKK21vZHVsZV9leGl0KG1lNDAwMF9tb2R1bGVfZXhpdCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX3JlYWRfcHJvY21lbShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsCisJCQkgICAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisJaW50IGxpbWl0ID0gY291bnQgLSAxMDAwOworCXN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CisKKwlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbk1FNDAwMCBEUklWRVIgVkVSU0lPTiAlWC4lWC4lWFxuXG4iLAorCQkgICAgICAgKE1FNDAwMF9EUklWRVJfVkVSU0lPTiAmIDB4RkYwMDAwKSA+PiAxNiwKKwkJICAgICAgIChNRTQwMDBfRFJJVkVSX1ZFUlNJT04gJiAweEZGMDApID4+IDgsCisJCSAgICAgICAoTUU0MDAwX0RSSVZFUl9WRVJTSU9OICYgMHhGRikpOworCisJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCSAgICAgKHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgJiYgKGxlbiA8IGxpbWl0KTsKKwkgICAgIHB0ciA9IHB0ci0+bmV4dCkgeworCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBtZTQwMDBfaW5mbywgbGlzdCk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkJvYXJkIG51bWJlciAlZDpcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfY291bnQpOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICItLS0tLS0tLS0tLS0tLS1cbiIpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiUExYIGJhc2UgcmVnaXN0ZXIgPSAweCVsWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJQTFggYmFzZSByZWdpc3RlciBzaXplID0gMHglWFxuIiwKKwkJCSAgICAodW5zaWduZWQgaW50KWJvYXJkX2luZm8tPnBseF9yZWdiYXNlX3NpemUpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiTUU0MDAwIGJhc2UgcmVnaXN0ZXIgPSAweCVYXG4iLAorCQkJICAgICh1bnNpZ25lZCBpbnQpYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiTUU0MDAwIGJhc2UgcmVnaXN0ZXIgc2l6ZSA9IDB4JVhcbiIsCisJCQkgICAgKHVuc2lnbmVkIGludClib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZV9zaXplKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlNlcmlhbCBudW1iZXIgPSAweCVYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnNlcmlhbF9ubyk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJIYXJkd2FyZSByZXZpc2lvbiA9IDB4JVhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+aHdfcmV2aXNpb24pOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiVmVuZG9yIGlkID0gMHglWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT52ZW5kb3JfaWQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiRGV2aWNlIGlkID0gMHglWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5kZXZpY2VfaWQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiUENJIGJ1cyBudW1iZXIgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5wY2lfYnVzX25vKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlBDSSBkZXZpY2UgbnVtYmVyID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+cGNpX2Rldl9ubyk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJQQ0kgZnVuY3Rpb24gbnVtYmVyID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+cGNpX2Z1bmNfbm8pOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJJUlEgPSAldVxuIiwgYm9hcmRfaW5mby0+aXJxKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwKKwkJCSAgICAiQ291bnQgb2YgaW50ZXJydXB0cyBzaW5jZSBtb2R1bGUgd2FzIGxvYWRlZCA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmlycV9jb3VudCk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50IG9mIGFuYWxvZyBvdXRwdXRzID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uY291bnQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQ291bnQgb2YgYW5hbG9nIG91dHB1dCBmaWZvcyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmFvLmZpZm9fY291bnQpOworCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJDb3VudCBvZiBhbmFsb2cgaW5wdXRzID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuY291bnQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkJICAgICJDb3VudCBvZiBzYW1wbGUgYW5kIGhvbGQgZGV2aWNlcyBmb3IgYW5hbG9nIGlucHV0ID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuc2hfY291bnQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkJICAgICJBbmFsb2cgZXh0ZXJuYWwgdHJpZ2dlciBhdmFpbGFibGUgZm9yIGFuYWxvZyBpbnB1dCA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmV4X3RyaWdfYW5hbG9nKTsKKworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQ291bnQgb2YgZGlnaXRhbCBwb3J0cyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmRpby5jb3VudCk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50IG9mIGNvdW50ZXIgZGV2aWNlcyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmNudC5jb3VudCk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBSSBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FJX0NUUkxfUkVHKSk7CisKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiQU8gMCBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJICAgTUU0MDAwX0FPXzAwX0NUUkxfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAwIHN0YXR1cyByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wMF9TVEFUVVNfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAxIGNvbnRyb2wgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDFfQ1RSTF9SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDEgc3RhdHVzIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAxX1NUQVRVU19SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDIgY29udHJvbCByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wMl9DVFJMX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMiBzdGF0dXMgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDJfU1RBVFVTX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMyBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAzX0NUUkxfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAzIHN0YXR1cyByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wM19TVEFUVVNfUkVHKSk7CisJfQorCisJKmVvZiA9IDE7CisJcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmggYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzZmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5oCkBAIC0wLDAgKzEsOTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1laWxoYXVzIEVsZWN0cm9uaWMgR21iSCAoc3VwcG9ydEBtZWlsaGF1cy5kZSkKKyAqCisgKiBTb3VyY2UgRmlsZSA6IG1lNDAwMC5oCisgKiBBdXRob3IgICAgICA6IEdHIChHdWVudGVyIEdlYmhhcmR0KSAgPGcuZ2ViaGFyZHRAbWVpbGhhdXMuZGU+CisgKi8KKworI2lmbmRlZiBfTUU0MDAwX0hfCisjZGVmaW5lIF9NRTQwMDBfSF8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBUaGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHJlbGVhc2UKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfRFJJVkVSX1ZFUlNJT04gIDB4MTAwMDkJLy8gVmVyc2lvbiAxLjAwLjA5CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRGVidWcgc2VjdGlvbgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjdW5kZWYgTUU0MDAwX0NBTExfREVCVUcJLy8gRGVidWcgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQKKyN1bmRlZiBNRTQwMDBfSVNSX0RFQlVHCQkvLyBEZWJ1ZyB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQorI3VuZGVmIE1FNDAwMF9QT1JUX0RFQlVHCS8vIERlYnVnIHBvcnQgYWNjZXNzCisjdW5kZWYgTUU0MDAwX0RFQlVHCQkvLyBHZW5lcmFsIHB1cnBvc2UgZGVidWcgbWFzc2VnZXMKKworI2lmZGVmIE1FNDAwMF9DQUxMX0RFQlVHCisjdW5kZWYgQ0FMTF9QREVCVUcKKyNkZWZpbmUgQ0FMTF9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJNRTQwMDA6IiBmbXQsICMjYXJncykKKyNlbHNlCisjIGRlZmluZSBDQUxMX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworI2VuZGlmCisKKyNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCisjdW5kZWYgSVNSX1BERUJVRworI2RlZmluZSBJU1JfUERFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUciTUU0MDAwOiIgZm10LCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBJU1JfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZW5kaWYKKworI2lmZGVmIE1FNDAwMF9QT1JUX0RFQlVHCisjdW5kZWYgUE9SVF9QREVCVUcKKyNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJNRTQwMDA6IiBmbXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIFBPUlRfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZW5kaWYKKworI2lmZGVmIE1FNDAwMF9ERUJVRworI3VuZGVmIFBERUJVRworI2RlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJNRTQwMDA6IiBmbXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUVJTEhBVVMgMHgxNDAyCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NTAJMHg0NjUwCS8vIExvdyBDb3N0IHZlcnNpb24KKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MAkweDQ2NjAJLy8gU3RhbmRhcmQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MEkJMHg0NjYxCS8vIElzb2xhdGVkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBTCTB4NDY2MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSVMJMHg0NjYzCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MAkweDQ2NzAJLy8gU3RhbmRhcmQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MEkJMHg0NjcxCS8vIElzb2xhdGVkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBTCTB4NDY3MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwSVMJMHg0NjczCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MAkweDQ2ODAJLy8gU3RhbmRhcmQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MEkJMHg0NjgxCS8vIElzb2xhdGVkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBTCTB4NDY4MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwSVMJMHg0NjgzCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBEZXZpY2UgbmFtZXMsIGZvciBlbnRyaWVzIGluIC9wcm9jLy4uCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX05BTUUJCSJtZTQwMDAiCisjZGVmaW5lIE1FNDAwMF9BT19OQU1FCQkibWU0MDAwX2FvIgorI2RlZmluZSBNRTQwMDBfQUlfTkFNRQkJIm1lNDAwMF9haSIKKyNkZWZpbmUgTUU0MDAwX0RJT19OQU1FCQkibWU0MDAwX2RpbyIKKyNkZWZpbmUgTUU0MDAwX0NOVF9OQU1FCQkibWU0MDAwX2NudCIKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfTkFNRQkibWU0MDAwX2V4dF9pbnQiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgTUUtNDAwMCBiYXNlIHJlZ2lzdGVyIG9mZnNldHMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQU9fMDBfQ1RSTF9SRUcJCQkweDAwCS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDBfU1RBVFVTX1JFRwkJCTB4MDQJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BT18wMF9GSUZPX1JFRwkJCTB4MDgJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wMF9TSU5HTEVfUkVHCQkJMHgwQwkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAwX1RJTUVSX1JFRwkJCTB4MTAJLy8gXy9XCisKKyNkZWZpbmUgTUU0MDAwX0FPXzAxX0NUUkxfUkVHCQkJMHgxOAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1NUQVRVU19SRUcJCQkweDFDCS8vIFIvXworI2RlZmluZSBNRTQwMDBfQU9fMDFfRklGT19SRUcJCQkweDIwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDFfU0lOR0xFX1JFRwkJCTB4MjQJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMV9USU1FUl9SRUcJCQkweDI4CS8vIF8vVworCisjZGVmaW5lIE1FNDAwMF9BT18wMl9DVFJMX1JFRwkJCTB4MzAJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMl9TVEFUVVNfUkVHCQkJMHgzNAkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FPXzAyX0ZJRk9fUkVHCQkJMHgzOAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAyX1NJTkdMRV9SRUcJCQkweDNDCS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDJfVElNRVJfUkVHCQkJMHg0MAkvLyBfL1cKKworI2RlZmluZSBNRTQwMDBfQU9fMDNfQ1RSTF9SRUcJCQkweDQ4CS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDNfU1RBVFVTX1JFRwkJCTB4NEMJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BT18wM19GSUZPX1JFRwkJCTB4NTAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wM19TSU5HTEVfUkVHCQkJMHg1NAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAzX1RJTUVSX1JFRwkJCTB4NTgJLy8gXy9XCisKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfUkVHCQkJMHg3NAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19SRUcJCQkweDc0CS8vIFIvXworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX1JFRwkJMHg3OAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX0RBVEFfUkVHCQkJMHg3QwkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5fVElNRVJfUkVHCQkweDgwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9QUkVfVElNRVJfUkVHCQkweDg0CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9USU1FUl9MT1dfUkVHCQkweDg4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9USU1FUl9ISUdIX1JFRwkJMHg4QwkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0xPV19SRUcJMHg5MAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0hJR0hfUkVHCTB4OTQJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFSVF9SRUcJCQkweDk4CS8vIFIvXworCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX1JFRwkJCTB4OUMJLy8gUi9fCisKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzBfUkVHCQkJMHhBMAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzFfUkVHCQkJMHhBNAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzJfUkVHCQkJMHhBOAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzNfUkVHCQkJMHhBQwkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19ESVJfUkVHCQkJMHhCMAkvLyBSL1cKKworI2RlZmluZSBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWAkJCTB4QjQJLy8gUi9XCisKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX1JFRwkJCTB4QjgJLy8gUi9XCisKKyNkZWZpbmUgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcJCTB4QkMJLy8gLS9XCisKKyNkZWZpbmUgTUU0MDAwX0FJX1NBTVBMRV9DT1VOVEVSX1JFRwkJMHhDMAkvLyBfL1cKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBWYWx1ZSB0byBhZGp1c3QgRGVtdXgKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQU9fREVNVVhfQURKVVNUX1ZBTFVFICAgICAgICAgICAgMHg0QworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENvdW50ZXIgYmFzZSByZWdpc3RlciBvZmZzZXRzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT1VOVEVSXzBfUkVHCQkweDAwCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8xX1JFRwkJMHgwMQorI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMl9SRUcJCTB4MDIKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX1JFRwkJCTB4MDMKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBQTFggYmFzZSByZWdpc3RlciBvZmZzZXRzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgUExYX0lOVENTUgkweDRDCS8vIEludGVycnVwdCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKKyNkZWZpbmUgUExYX0lDUgkJMHg1MAkvLyBJbml0aWFsaXphdGlvbiBjb250cm9sIHJlZ2lzdGVyCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIFBMWF9JQ1NSIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQxX0VOICAgICAgICAgICAgIDB4MDEJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBpcyBlbmFibGVkIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9QT0wgICAgICAgICAgICAweDAyCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgcG9sYXJpdHkgaXMgYWN0aXZlIGhpZ2ggKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQxX1NUQVRFICAgICAgICAgIDB4MDQJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBpcyBhY3RpdmUgKHIvXykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQyX0VOICAgICAgICAgICAgIDB4MDgJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBpcyBlbmFibGVkIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9QT0wgICAgICAgICAgICAweDEwCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgcG9sYXJpdHkgaXMgYWN0aXZlIGhpZ2ggKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQyX1NUQVRFICAgICAgICAgIDB4MjAJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBpcyBhY3RpdmUgIChyL18pCisjZGVmaW5lIFBMWF9JTlRDU1JfUENJX0lOVF9FTiAgICAgICAgICAgICAgICAweDQwCS8vIElmIHNldCwgUENJIGludGVycnVwdCBpcyBlbmFibGVkIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfU09GVF9JTlQgICAgICAgICAgICAgICAgICAweDgwCS8vIElmIHNldCwgYSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIChyL3cpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIFBMWF9JQ1IgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBQTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUCQkweDAxMDAwMDAwCisjZGVmaW5lIFBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVAkJMHgwMjAwMDAwMAorI2RlZmluZSBQTFhfSUNSX0JJVF9FRVBST01fV1JJVEUJCTB4MDQwMDAwMDAKKyNkZWZpbmUgUExYX0lDUl9CSVRfRUVQUk9NX1JFQUQJCQkweDA4MDAwMDAwCisjZGVmaW5lIFBMWF9JQ1JfQklUX0VFUFJPTV9WQUxJRAkJMHgxMDAwMDAwMAorCisjZGVmaW5lIFBMWF9JQ1JfTUFTS19FRVBST00JCQkweDFGMDAwMDAwCisKKyNkZWZpbmUgRUVQUk9NX0RFTEFZCQkJCTEKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0FPX0NUUkxfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMAkJMHgwMDEKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMQkJMHgwMDIKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfTUFTS19NT0RFCQkweDAwMworI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUAkJCTB4MDA0CisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTwkJMHgwMDgKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHCTB4MDEwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0VER0UJCTB4MDIwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUAkweDA4MAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0RPCQkweDEwMAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUQkJMHgyMDAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX1JFU0VUX0lSUQkJMHg0MDAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfQk9USAkJMHg4MDAKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0FPX1NUQVRVU19SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00JCTB4MDEKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVRVU19CSVRfRkYJCQkweDAyCisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfQklUX0hGCQkJMHgwNAorI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JJVF9FRgkJCTB4MDgKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0FJX0NUUkxfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX01PREVfMAkJMHgwMDAwMDAwMQorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfTU9ERV8xCQkweDAwMDAwMDAyCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9NT0RFXzIJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX1NBTVBMRV9IT0xECQkweDAwMDAwMDA4CisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUAkweDAwMDAwMDEwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QCQkJMHgwMDAwMDAyMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPCQkweDAwMDAwMDQwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8JCTB4MDAwMDAwODAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0ZVTExTQ0FMRQkJMHgwMDAwMDEwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfT0ZGU0VUCQkweDAwMDAwMjAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0FOQUxPRwkweDAwMDAwNDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHCQkweDAwMDAwODAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0ZBTExJTkcJMHgwMDAwMTAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJRCQkweDAwMDAyMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9JUlFfUkVTRVQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0xFX0lSUQkJMHgwMDAwODAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfTEVfSVJRX1JFU0VUCQkweDAwMDEwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEJCTB4MDAwMjAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUV9SRVNFVAkJMHgwMDA0MDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRCQkweDAwMDgwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlFfUkVTRVQJCTB4MDAxMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX1NDX1JFTE9BRAkJMHgwMDIwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19CT1RICQkweDgwMDAwMDAwCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9BSV9TVEFUVVNfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfQ0hBTk5FTAkJMHgwMDQwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9DSEFOTkVMCQkweDAwODAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0NIQU5ORUwJCTB4MDEwMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQQkJMHgwMjAwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBCQkweDA0MDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEJCTB4MDgwMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfTEUJCQkweDEwMDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTQkJMHgyMDAwMDAwMAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfSVJRX1NUQVRVU19SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfRVgJCTB4MDEKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0xFCQkweDAyCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BSV9IRgkJMHgwNAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fMF9IRgkJMHgwOAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fMV9IRgkJMHgxMAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fMl9IRgkJMHgyMAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fM19IRgkJMHg0MAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfU0MJCTB4ODAKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0RJT19DVFJMX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wCQkwWDAwMDEKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEJCTBYMDAwMgorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMgkJMFgwMDA0CisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zCQkwWDAwMDgKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQJCTBYMDAxMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNQkJMFgwMDIwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82CQkwWDAwNDAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzcJCTBYMDA4MAorCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMAkJMFgwMTAwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMQkJMFgwMjAwCisKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMAkJMFgwNDAwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzEJCTBYMDgwMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8yCQkwWDEwMDAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMwkJMFgyMDAwCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9DTlRfQ1RSTF9SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMCAgMHgwMAorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMSAgMHg0MAorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMiAgMHg4MAorCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8wICAgICAweDAwCS8vIENoYW5nZSBzdGF0ZSBpZiB6ZXJvIGNyb3NzaW5nCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8xICAgICAweDAyCS8vIFJldHJpZ2dlcmFibGUgT25lLVNob3QKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzIgICAgIDB4MDQJLy8gQXN5bW1ldHJpY2FsIGRpdmlkZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzMgICAgIDB4MDYJLy8gU3ltbWV0cmljYWwgZGl2aWRlcgorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfNCAgICAgMHgwOAkvLyBDb3VudGVyIHN0YXJ0IGJ5IHNvZnR3YXJlIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzUgICAgIDB4MEEJLy8gQ291bnRlciBzdGFydCBieSBoYXJkd2FyZSB0cmlnZ2VyCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIG1pbm9yIGRldmljZSBudW1iZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBBT19CT0FSRChkZXYpICgoTUlOT1IoZGV2KSA+PiA2KSAmIDB4MykKKyNkZWZpbmUgQU9fUE9SVChkZXYpICAoKE1JTk9SKGRldikgPj4gMikgJiAweEYpCisjZGVmaW5lIEFPX01PREUoZGV2KSAgKE1JTk9SKGRldikgJiAweDMpCisKKyNkZWZpbmUgQUlfQk9BUkQoZGV2KSAoKE1JTk9SKGRldikgPj4gMykgJiAweDFGKQorI2RlZmluZSBBSV9NT0RFKGRldikgIChNSU5PUihkZXYpICYgMHg3KQorCisjZGVmaW5lIERJT19CT0FSRChkZXYpIChNSU5PUihkZXYpKQorCisjZGVmaW5lIENOVF9CT0FSRChkZXYpIChNSU5PUihkZXYpKQorCisjZGVmaW5lIEVYVF9JTlRfQk9BUkQoZGV2KSAoTUlOT1IoZGV2KSkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDaXJjdWxhciBidWZmZXIgdXNlZCBmb3IgYW5hbG9nIGlucHV0L291dHB1dCByZWFkcy93cml0ZXMuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0cnVjdCBtZTQwMDBfY2lyY19idWYgeworCXMxNiAqYnVmOworCWludCB2b2xhdGlsZSBoZWFkOworCWludCB2b2xhdGlsZSB0YWlsOworfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0cnVjdCBtZTQwMDBfYW9faW5mbyB7CisJaW50IGNvdW50OworCWludCBmaWZvX2NvdW50OworfTsKKworc3RydWN0IG1lNDAwMF9haV9pbmZvIHsKKwlpbnQgY291bnQ7CisJaW50IHNoX2NvdW50OworCWludCBkaWZmX2NvdW50OworCWludCBleF90cmlnX2FuYWxvZzsKK307CisKK3N0cnVjdCBtZTQwMDBfZGlvX2luZm8geworCWludCBjb3VudDsKK307CisKK3N0cnVjdCBtZTQwMDBfY250X2luZm8geworCWludCBjb3VudDsKK307CisKK3N0cnVjdCBtZTQwMDBfYm9hcmQgeworCXUxNiB2ZW5kb3JfaWQ7CisJdTE2IGRldmljZV9pZDsKKwlzdHJ1Y3QgbWU0MDAwX2FvX2luZm8gYW87CisJc3RydWN0IG1lNDAwMF9haV9pbmZvIGFpOworCXN0cnVjdCBtZTQwMDBfZGlvX2luZm8gZGlvOworCXN0cnVjdCBtZTQwMDBfY250X2luZm8gY250OworfTsKKworc3RhdGljIHN0cnVjdCBtZTQwMDBfYm9hcmQgbWU0MDAwX2JvYXJkc1tdID0geworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2MTAsIHswLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7M319LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY1MCwgezAsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHswfX0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYwLCB7MiwgMH0sIHsxNiwgMCwgMCwgMH0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYxLCB7MiwgMH0sIHsxNiwgMCwgMCwgMH0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYyLCB7MiwgMH0sIHsxNiwgOCwgMCwgMH0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYzLCB7MiwgMH0sIHsxNiwgOCwgMCwgMH0sIHs0fSwgezN9fSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzAsIHs0LCAwfSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcxLCB7NCwgMH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MiwgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzMsIHs0LCAwfSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODAsIHs0LCA0fSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgxLCB7NCwgNH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MiwgezQsIDR9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODMsIHs0LCA0fSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKworCXswfSwKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgUENJIGRldmljZSB0YWJsZS4KKyAgVGhpcyBpcyB1c2VkIGJ5IG1vZHByb2JlIHRvIHRyYW5zbGF0ZSBQQ0kgSURzIHRvIGRyaXZlcnMuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtZTQwMDBfcGNpX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjczLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWU0MDAwX3BjaV90YWJsZSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgR2xvYmFsIGJvYXJkIGFuZCBzdWJkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0dXJlcworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdHJ1Y3QgbWU0MDAwX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gTGlzdCBvZiBhbGwgZGV0ZWN0ZWQgYm9hcmRzCisJaW50IGJvYXJkX2NvdW50OwkvLyBJbmRleCBvZiB0aGUgYm9hcmQgYWZ0ZXIgZGV0ZWN0aW9uCisKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlOwkvLyBQTFggY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MKKwlyZXNvdXJjZV9zaXplX3QgbWU0MDAwX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwCisJcmVzb3VyY2Vfc2l6ZV90IHRpbWVyX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgY2lyY3VpdAorCXJlc291cmNlX3NpemVfdCBwcm9ncmFtX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyB0byBzZXQgdGhlIHByb2dyYW0gcGluIGZvciB0aGUgeGlsaW54CisKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemU7CS8vIFBMWCByZWdpc3RlciBzZXQgc3BhY2UKKwlyZXNvdXJjZV9zaXplX3QgbWU0MDAwX3JlZ2Jhc2Vfc2l6ZTsJLy8gTUU0MDAwIHJlZ2lzdGVyIHNldCBzcGFjZQorCXJlc291cmNlX3NpemVfdCB0aW1lcl9yZWdiYXNlX3NpemU7CS8vIFRpbWVyIGNpcmN1aXQgcmVnaXN0ZXIgc2V0IHNwYWNlCisJcmVzb3VyY2Vfc2l6ZV90IHByb2dyYW1fcmVnYmFzZV9zaXplOwkvLyBTaXplIG9mIHByb2dyYW0gYmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAKKworCXVuc2lnbmVkIGludCBzZXJpYWxfbm87CS8vIFNlcmlhbCBudW1iZXIgb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgY2hhciBod19yZXZpc2lvbjsJLy8gSGFyZHdhcmUgcmV2aXNpb24gb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkOwkvLyBNZWlsaGF1cyB2ZW5kb3IgaWQgKDB4MTQwMikKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CS8vIERldmljZSBJRAorCisJaW50IHBjaV9idXNfbm87CQkvLyBQQ0kgYnVzIG51bWJlcgorCWludCBwY2lfZGV2X25vOwkJLy8gUENJIGRldmljZSBudW1iZXIKKwlpbnQgcGNpX2Z1bmNfbm87CS8vIFBDSSBmdW5jdGlvbiBudW1iZXIKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wOwkvLyBHZW5lcmFsIFBDSSBpbmZvcm1hdGlvbgorCisJc3RydWN0IG1lNDAwMF9ib2FyZCAqYm9hcmRfcDsJLy8gSG9sZHMgdGhlIGJvYXJkIGNhcGFiaWxpdGllcworCisJdW5zaWduZWQgaW50IGlycTsJLy8gSVJRIGFzc2lnbmVkIGZyb20gdGhlIFBDSSBCSU9TCisJdW5zaWduZWQgaW50IGlycV9jb3VudDsJLy8gQ291bnQgb2YgZXh0ZXJuYWwgaW50ZXJydXB0cworCisJc3BpbmxvY2tfdCBwcmVsb2FkX2xvY2s7CS8vIEd1YXJkcyB0aGUgYW5hbG9nIG91dHB1dCBwcmVsb2FkIHJlZ2lzdGVyCisJc3BpbmxvY2tfdCBhaV9jdHJsX2xvY2s7CS8vIEd1YXJkcyB0aGUgYW5hbG9nIGlucHV0IGNvbnRyb2wgcmVnaXN0ZXIKKworCXN0cnVjdCBsaXN0X2hlYWQgYW9fY29udGV4dF9saXN0OwkvLyBMaXN0IHdpdGggYW5hbG9nIG91dHB1dCBzcGVjaWZpYyBjb250ZXh0CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0OwkvLyBBbmFsb2cgaW5wdXQgIHNwZWNpZmljIGNvbnRleHQKKwlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICpkaW9fY29udGV4dDsJLy8gRGlnaXRhbCBJL08gc3BlY2lmaWMgY29udGV4dAorCXN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgKmNudF9jb250ZXh0OwkvLyBDb3VudGVyIHNwZWNpZmljIGNvbnRleHQKKwlzdHJ1Y3QgbWU0MDAwX2V4dF9pbnRfY29udGV4dCAqZXh0X2ludF9jb250ZXh0OwkvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgc3BlY2lmaWMgY29udGV4dAorfTsKKworc3RydWN0IG1lNDAwMF9hb19jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9hb19jb250ZXh0X3QKKwlpbnQgaW5kZXg7CQkvLyBJbmRleCBpbiB0aGUgbGlzdAorCWludCBtb2RlOwkJLy8gSW5kaWNhdGVzIG1vZGUgKDAgPSBzaW5nbGUsIDEgPSB3cmFwYXJvdW5kLCAyID0gY29udGlub3VzKQorCWludCBkYWNfaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJc3BpbmxvY2tfdCBpbnRfbG9jazsJLy8gVXNlZCB3aGVuIGxvY2tpbmcgb3V0IGludGVycnVwdHMKKwlzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGNpcmNfYnVmOwkvLyBDaXJjdWxhciBidWZmZXIKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwkvLyBXYWl0IHF1ZXVlIHRvIHNsZWVwIHdoaWxlIGJsb2NraW5nIHdyaXRlCisJc3RydWN0IG1lNDAwMF9pbmZvICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGludCBpcnE7CS8vIFRoZSBpcnEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQURDCisJaW50IHZvbGF0aWxlIHBpcGVfZmxhZzsJLy8gSW5kaWNhdGVzIGJyb2tlbiBwaXBlIHNldCBmcm9tIG1lNDAwMF9hb19pc3IoKQorCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CisJdW5zaWduZWQgbG9uZyBzdGF0dXNfcmVnOworCXVuc2lnbmVkIGxvbmcgZmlmb19yZWc7CisJdW5zaWduZWQgbG9uZyBzaW5nbGVfcmVnOworCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnOworCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CisJdW5zaWduZWQgbG9uZyBwcmVsb2FkX3JlZzsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3A7CS8vIFF1ZXVlIGZvciBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uCit9OworCitzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gbGlua2VkIGxpc3Qgb2YgbWU0MDAwX2FpX2luZm9fdAorCWludCBtb2RlOwkJLy8gSW5kaWNhdGVzIG1vZGUKKwlpbnQgaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJc3BpbmxvY2tfdCBpbnRfbG9jazsJLy8gVXNlZCB3aGVuIGxvY2tpbmcgb3V0IGludGVycnVwdHMKKwlpbnQgbnVtYmVyOwkJLy8gTnVtYmVyIG9mIHRoZSBEQUMKKwl1bnNpZ25lZCBpbnQgaXJxOwkvLyBUaGUgaXJxIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFEQworCXN0cnVjdCBtZTQwMDBfY2lyY19idWYgY2lyY19idWY7CS8vIENpcmN1bGFyIGJ1ZmZlcgorCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CS8vIFdhaXQgcXVldWUgdG8gc2xlZXAgd2hpbGUgYmxvY2tpbmcgcmVhZAorCXN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbzsKKworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcDsJLy8gUXVldWUgZm9yIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24KKworCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CisJdW5zaWduZWQgbG9uZyBzdGF0dXNfcmVnOworCXVuc2lnbmVkIGxvbmcgY2hhbm5lbF9saXN0X3JlZzsKKwl1bnNpZ25lZCBsb25nIGRhdGFfcmVnOworCXVuc2lnbmVkIGxvbmcgY2hhbl90aW1lcl9yZWc7CisJdW5zaWduZWQgbG9uZyBjaGFuX3ByZV90aW1lcl9yZWc7CisJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVyX2xvd19yZWc7CisJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVyX2hpZ2hfcmVnOworCXVuc2lnbmVkIGxvbmcgc2Nhbl9wcmVfdGltZXJfbG93X3JlZzsKKwl1bnNpZ25lZCBsb25nIHNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcmVnOworCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CisJdW5zaWduZWQgbG9uZyBzYW1wbGVfY291bnRlcl9yZWc7CisKKwl1bnNpZ25lZCBsb25nIGNoYW5fdGltZXI7CisJdW5zaWduZWQgbG9uZyBjaGFuX3ByZV90aW1lcjsKKwl1bnNpZ25lZCBsb25nIHNjYW5fdGltZXJfbG93OworCXVuc2lnbmVkIGxvbmcgc2Nhbl90aW1lcl9oaWdoOworCXVuc2lnbmVkIGxvbmcgY2hhbm5lbF9saXN0X2NvdW50OworCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2NvdW50ZXI7CisJaW50IHNhbXBsZV9jb3VudGVyX3JlbG9hZDsKK307CisKK3N0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gbGlua2VkIGxpc3Qgb2YgbWU0MDAwX2Rpb19jb250ZXh0X3QKKwlpbnQgaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJaW50IG51bWJlcjsKKwlpbnQgZGlvX2NvdW50OworCXN0cnVjdCBtZTQwMDBfaW5mbyAqYm9hcmRfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGRpcl9yZWc7CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIHBvcnRfMF9yZWc7CisJdW5zaWduZWQgbG9uZyBwb3J0XzFfcmVnOworCXVuc2lnbmVkIGxvbmcgcG9ydF8yX3JlZzsKKwl1bnNpZ25lZCBsb25nIHBvcnRfM19yZWc7Cit9OworCitzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9kaW9fY29udGV4dF90CisJaW50IGluX3VzZTsJCS8vIEluZGljYXRlcyBpZiBhbHJlYWR5IG9wZW5kCisJc3BpbmxvY2tfdCB1c2VfbG9jazsJLy8gR3VhcmRzIGluX3VzZQorCWludCBudW1iZXI7CisJaW50IGNudF9jb3VudDsKKwlzdHJ1Y3QgbWU0MDAwX2luZm8gKmJvYXJkX2luZm87CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIGNvdW50ZXJfMF9yZWc7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyXzFfcmVnOworCXVuc2lnbmVkIGxvbmcgY291bnRlcl8yX3JlZzsKK307CisKK3N0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9kaW9fY29udGV4dF90CisJaW50IGluX3VzZTsJCS8vIEluZGljYXRlcyBpZiBhbHJlYWR5IG9wZW5kCisJc3BpbmxvY2tfdCB1c2VfbG9jazsJLy8gR3VhcmRzIGluX3VzZQorCWludCBudW1iZXI7CisJc3RydWN0IG1lNDAwMF9pbmZvICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpbnRfY291bnQ7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19wdHI7CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXNfcmVnOworfTsKKworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQXBwbGljYXRpb24gaW5jbHVkZSBzZWN0aW9uIHN0YXJ0cyBoZXJlCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lcyBmb3IgYW5hbG9nIGlucHV0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHZW5lcmFsIHN0dWZmICovCisjZGVmaW5lIE1FNDAwMF9BSV9GSUZPX0NPVU5UCQkyMDQ4CisKKyNkZWZpbmUgTUU0MDAwX0FJX01JTl9USUNLUwkJNjYKKyNkZWZpbmUgTUU0MDAwX0FJX01BWF9TQ0FOX1RJQ0tTCTB4RkZGRkZGRkZGRkxMCisKKyNkZWZpbmUgTUU0MDAwX0FJX0JVRkZFUl9TSVpFIAkJKDMyICogMTAyNCkJLy8gU2l6ZSBpbiBieXRlcworCisjZGVmaW5lIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQJCSgoTUU0MDAwX0FJX0JVRkZFUl9TSVpFKSAvIDIpCS8vIFNpemUgaW4gdmFsdWVzCisKKy8qIENoYW5uZWwgbGlzdCBkZWZpbmVzIGFuZCBtYXNrcyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX0NPVU5UCQkxMDI0CisKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfSU5QVVRfU0lOR0xFX0VOREVECTB4MDAwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTAkweDAyMAorCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMTAJCTB4MDAwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMl81CTB4MDQwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX1VOSVBPTEFSXzEwCTB4MDgwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX1VOSVBPTEFSXzJfNQkweDBDMAorCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlkJCTB4MTAwCisKKy8qIEV4dGVybmFsIHRyaWdnZXIgZGVmaW5lcyAqLworI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9TT0ZUV0FSRQkJMHgwCS8vIFVzZSBvbmx5IHdpdGggQVBJCisjZGVmaW5lIE1FNDAwMF9BSV9UUklHR0VSX0VYVF9ESUdJVEFMCQkweDEKKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0FOQUxPRwkJMHgyCisKKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfUklTSU5HCTB4MAorI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9GQUxMSU5HCTB4MQorI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9CT1RICQkweDIKKworLyogU2FtcGxlIGFuZCBIb2xkICovCisjZGVmaW5lIE1FNDAwMF9BSV9TSU1VTFRBTkVPVVNfRElTQUJMRQkJMHgwCisjZGVmaW5lIE1FNDAwMF9BSV9TSU1VTFRBTkVPVVNfRU5BQkxFCQkweDEKKworLyogRGVmaW5lcyBmb3IgdGhlIFNhbXBsZSBDb3VudGVyICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ19SRUxPQUQJCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NDX09OQ0UJCQkweDEKKworLyogTW9kZXMgZm9yIGFuYWxvZyBpbnB1dCAqLworI2RlZmluZSBNRTQwMDBfQUlfQUNRX01PREVfU0lOR0xFCQkweDAwCS8vIENhdGNoIG9uZSBzaW5nbGUgdmFsdWUKKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX1NPRlRXQVJFCQkweDAxCS8vIENvbnRpbm91cyBzYW1wbGluZyB3aXRoIHNvZnR3YXJlIHN0YXJ0CisjZGVmaW5lIE1FNDAwMF9BSV9BQ1FfTU9ERV9FWFQJCQkweDAyCS8vIENvbnRpbm91cyBzYW1wbGluZyB3aXRoIGV4dGVybmFsIHRyaWdnZXIgc3RhcnQKKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX0VYVF9TSU5HTEVfVkFMVUUJMHgwMwkvLyBTYW1wbGUgb25lIHZhbHVlIGJ5IGV4dGVybmFsIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX0VYVF9TSU5HTEVfQ0hBTkxJU1QJMHgwNAkvLyBTYW1wbGUgb25lIGNoYW5uZWwgbGlzdCBieSBleHRlcm5hbCB0cmlnZ2VyCisKKy8qIFN0YXVzIG9mIEFJIEZTTSAqLworI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0lETEUJCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CVVNZCQkJMHgxCisKKy8qIFZvbHRhZ2VzIGZvciBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX1VOSV9PRkZTRVQJCTEwLjBFLTMKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9VTklfRlVMTFNDQUxFCQk5OTUwLjBFLTMKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9CSV9PRkZTRVQJCTAuMAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX0JJX0ZVTExTQ0FMRQkJOTk1MC4wRS0zCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfVU5JX09GRlNFVAkJMTAuMEUtMworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X1VOSV9GVUxMU0NBTEUJCTI0NTAuMEUtMworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X0JJX09GRlNFVAkJMC4wCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfQklfRlVMTFNDQUxFCQkyNDUwLjBFLTMKKworLyogSWRlYWwgZGlnaXRzIGZvciBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX1VOSV9PRkZTRVRfRElHSVRTCSgtMzI3MDIpCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfVU5JX0ZVTExTQ0FMRV9ESUdJVFMJMzI0NDAKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9CSV9PRkZTRVRfRElHSVRTCTAKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9CSV9GVUxMU0NBTEVfRElHSVRTCTMyNjA0CisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfVU5JX09GRlNFVF9ESUdJVFMJKC0zMjUwNSkKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9VTklfRlVMTFNDQUxFX0RJR0lUUwkzMTQ1NworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X0JJX09GRlNFVF9ESUdJVFMJMAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X0JJX0ZVTExTQ0FMRV9ESUdJVFMJMzIxMTMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBhbmFsb2cgb3V0cHV0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHZW5lcmFsIHN0dWZmICovCisjZGVmaW5lIE1FNDAwMF9BT19GSUZPX0NPVU5UCQkJKDQgKiAxMDI0KQorCisjZGVmaW5lIE1FNDAwMF9BT19NSU5fVElDS1MJCQk2NgorCisjZGVmaW5lIE1FNDAwMF9BT19CVUZGRVJfU0laRSAJCQkoMzIgKiAxMDI0KQkvLyBTaXplIGluIGJ5dGVzCisKKyNkZWZpbmUgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCAJCQkoKE1FNDAwMF9BT19CVUZGRVJfU0laRSkgLyAyKQkvLyBTaXplIGluIHZhbHVlcworCisvKiBDb252ZXJzaW9uIG1vZGVzIGZvciBhbmFsb2cgb3V0cHV0ICovCisjZGVmaW5lIE1FNDAwMF9BT19DT05WX01PREVfU0lOR0xFCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5ECQkweDEKKyNkZWZpbmUgTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTCQkweDIKKworLyogVHJpZ2dlciBzZXR1cCAqLworI2RlZmluZSBNRTQwMDBfQU9fVFJJR0dFUl9FWFRfRURHRV9SSVNJTkcJMHgwCisjZGVmaW5lIE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX0ZBTExJTkcJMHgxCisjZGVmaW5lIE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX0JPVEgJCTB4MgorCisvKiBTdGF0dXMgb2YgQU8gRlNNICovCisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfSURMRQkJCTB4MAorI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JVU1kJCQkweDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBlZXByb20KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfUkVBRAkJCTB4MTgwCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFX0VOQUJMRQkJMHgxMzAKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEVfRElTQUJMRQkJMHgxMDAKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUJCQkweDE0MDAwMDAKKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRAkJOQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEVfRU5BQkxFCTkKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFX0RJU0FCTEUJOQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUJCTI1CisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfREFURV9ISUdICQkweDMyCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0RBVEVfTE9XCQkweDMzCisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX1VOSV9PRkZTRVQJMHgzNAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX0ZVTExTQ0FMRQkweDM1CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9CSV9PRkZTRVQJMHgzNgorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfRlVMTFNDQUxFCTB4MzcKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfT0ZGU0VUCTB4MzgKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfRlVMTFNDQUxFCTB4MzkKKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX09GRlNFVAkweDNBCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfRlVMTFNDQUxFCTB4M0IKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX09GRlNFVAkweDNDCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9CSV9GVUxMU0NBTEUJMHgzRAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9PRkZTRVQJMHgzRQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9GVUxMU0NBTEUJMHgzRgorCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0xFTkdUSAkJNgorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RICQkxNgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZXMgZm9yIGRpZ2l0YWwgSS9PCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9BCQkweDAKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUX0IJCTB4MQorI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfQwkJMHgyCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9ECQkweDMKKworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfSU5QVVQJCTB4MAorI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUCQkweDEKKyNkZWZpbmUgTUU0MDAwX0RJT19GSUZPX0xPVwkJMHgyCisjZGVmaW5lIE1FNDAwMF9ESU9fRklGT19ISUdICQkweDMKKworI2RlZmluZSBNRTQwMDBfRElPX0ZVTkNUSU9OX1BBVFRFUk4JMHgwCisjZGVmaW5lIE1FNDAwMF9ESU9fRlVOQ1RJT05fREVNVVgJMHgxCisjZGVmaW5lIE1FNDAwMF9ESU9fRlVOQ1RJT05fTVVYCQkweDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBjb3VudGVycworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMCAgMAorI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMSAgMQorI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMiAgMgorCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8wICAgICAwCS8vIENoYW5nZSBzdGF0ZSBpZiB6ZXJvIGNyb3NzaW5nCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8xICAgICAxCS8vIFJldHJpZ2dlcmFibGUgT25lLVNob3QKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzIgICAgIDIJLy8gQXN5bW1ldHJpY2FsIGRpdmlkZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzMgICAgIDMJLy8gU3ltbWV0cmljYWwgZGl2aWRlcgorI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNCAgICAgNAkvLyBDb3VudGVyIHN0YXJ0IGJ5IHNvZnR3YXJlIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzUgICAgIDUJLy8gQ291bnRlciBzdGFydCBieSBoYXJkd2FyZSB0cmlnZ2VyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgR2VuZXJhbCB0eXBlIGRlZmluaXRpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgbWU0MDAwX3VzZXJfaW5mbyB7CisJaW50IGJvYXJkX2NvdW50OwkvLyBJbmRleCBvZiB0aGUgYm9hcmQgYWZ0ZXIgZGV0ZWN0aW9uCisJdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZTsJLy8gUExYIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmFzZSBhZGRyZXNzCisJcmVzb3VyY2Vfc2l6ZV90IG1lNDAwMF9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIE1FNDAwMAorCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2Vfc2l6ZTsJLy8gUExYIHJlZ2lzdGVyIHNldCBzcGFjZQorCXJlc291cmNlX3NpemVfdCBtZTQwMDBfcmVnYmFzZV9zaXplOwkvLyBNRTQwMDAgcmVnaXN0ZXIgc2V0IHNwYWNlCisJdW5zaWduZWQgbG9uZyBzZXJpYWxfbm87CS8vIFNlcmlhbCBudW1iZXIgb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgY2hhciBod19yZXZpc2lvbjsJLy8gSGFyZHdhcmUgcmV2aXNpb24gb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkOwkvLyBNZWlsaGF1cyB2ZW5kb3IgaWQgKDB4MTQwMikKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CS8vIERldmljZSBJRAorCWludCBwY2lfYnVzX25vOwkJLy8gUENJIGJ1cyBudW1iZXIKKwlpbnQgcGNpX2Rldl9ubzsJCS8vIFBDSSBkZXZpY2UgbnVtYmVyCisJaW50IHBjaV9mdW5jX25vOwkvLyBQQ0kgZnVuY3Rpb24gbnVtYmVyCisJY2hhciBpcnE7CQkvLyBJUlEgYXNzaWduZWQgZnJvbSB0aGUgUENJIEJJT1MKKwlpbnQgaXJxX2NvdW50OwkJLy8gQ291bnQgb2YgZXh0ZXJuYWwgaW50ZXJydXB0cworCisJaW50IGRyaXZlcl92ZXJzaW9uOwkvLyBWZXJzaW9uIG9mIHRoZSBkcml2ZXIgcmVsZWFzZQorCisJaW50IGFvX2NvdW50OwkJLy8gQ291bnQgb2YgYW5hbG9nIG91dHB1dCBjaGFubmVscworCWludCBhb19maWZvX2NvdW50OwkvLyBDb3VudCBmbyBhbmFsb2cgb3V0cHV0IGZpZm9zCisKKwlpbnQgYWlfY291bnQ7CQkvLyBDb3VudCBvZiBhbmFsb2cgaW5wdXQgY2hhbm5lbHMKKwlpbnQgYWlfc2hfY291bnQ7CS8vIENvdW50IG9mIHNhbXBsZSBhbmQgaG9sZCBkZXZpY2VzCisJaW50IGFpX2V4X3RyaWdfYW5hbG9nOwkvLyBGbGFnIHRvIGluZGljYXRlIGlmIGFuYWxvZ291cyBleHRlcm5hbCB0cmlnZ2VyIGlzIGF2YWlsYWJsZQorCisJaW50IGRpb19jb3VudDsJCS8vIENvdW50IG9mIGRpZ2l0YWwgSS9PIHBvcnRzCisKKwlpbnQgY250X2NvdW50OwkJLy8gQ291bnQgb2YgY291bnRlcnMKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgYW5hbG9nIG91dHB1dAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IG1lNDAwMF9hb19jaGFubmVsX2xpc3QgeworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyAqbGlzdDsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgYW5hbG9nIGlucHV0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgbWU0MDAwX2FpX2NoYW5uZWxfbGlzdCB7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1bnNpZ25lZCBsb25nICpsaXN0OworfTsKKworc3RydWN0IG1lNDAwMF9haV90aW1lciB7CisJdW5zaWduZWQgbG9uZyBwcmVfY2hhbjsKKwl1bnNpZ25lZCBsb25nIGNoYW47CisJdW5zaWduZWQgbG9uZyBzY2FuX2xvdzsKKwl1bnNpZ25lZCBsb25nIHNjYW5faGlnaDsKK307CisKK3N0cnVjdCBtZTQwMDBfYWlfY29uZmlnIHsKKwlzdHJ1Y3QgbWU0MDAwX2FpX3RpbWVyIHRpbWVyOworCXN0cnVjdCBtZTQwMDBfYWlfY2hhbm5lbF9saXN0IGNoYW5uZWxfbGlzdDsKKwlpbnQgc2g7Cit9OworCitzdHJ1Y3QgbWU0MDAwX2FpX3NpbmdsZSB7CisJaW50IGNoYW5uZWw7CisJaW50IHJhbmdlOworCWludCBtb2RlOworCXNob3J0IHZhbHVlOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKK307CisKK3N0cnVjdCBtZTQwMDBfYWlfdHJpZ2dlciB7CisJaW50IG1vZGU7CisJaW50IGVkZ2U7Cit9OworCitzdHJ1Y3QgbWU0MDAwX2FpX3NjIHsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCByZWxvYWQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGVlcHJvbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IG1lNDAwMF9lZXByb20geworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKKwlzaG9ydCB1bmlfMTBfb2Zmc2V0OworCXNob3J0IHVuaV8xMF9mdWxsc2NhbGU7CisJc2hvcnQgdW5pXzJfNV9vZmZzZXQ7CisJc2hvcnQgdW5pXzJfNV9mdWxsc2NhbGU7CisJc2hvcnQgYmlfMTBfb2Zmc2V0OworCXNob3J0IGJpXzEwX2Z1bGxzY2FsZTsKKwlzaG9ydCBiaV8yXzVfb2Zmc2V0OworCXNob3J0IGJpXzJfNV9mdWxsc2NhbGU7CisJc2hvcnQgZGlmZl8xMF9vZmZzZXQ7CisJc2hvcnQgZGlmZl8xMF9mdWxsc2NhbGU7CisJc2hvcnQgZGlmZl8yXzVfb2Zmc2V0OworCXNob3J0IGRpZmZfMl81X2Z1bGxzY2FsZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgZGlnaXRhbCBJL08KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBtZTQwMDBfZGlvX2NvbmZpZyB7CisJaW50IHBvcnQ7CisJaW50IG1vZGU7CisJaW50IGZ1bmN0aW9uOworfTsKKworc3RydWN0IG1lNDAwMF9kaW9fYnl0ZSB7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgY2hhciBieXRlOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUeXBlIGRlZmluaXRpb25zIGZvciBjb3VudGVycworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IG1lNDAwMF9jbnQgeworCWludCBjb3VudGVyOworCXVuc2lnbmVkIHNob3J0IHZhbHVlOworfTsKKworc3RydWN0IG1lNDAwMF9jbnRfY29uZmlnIHsKKwlpbnQgY291bnRlcjsKKwlpbnQgbW9kZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgbWU0MDAwX2ludCB7CisJaW50IGludDFfY291bnQ7CisJaW50IGludDJfY291bnQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoZSBpb2N0bHMgb2YgdGhlIGJvYXJkCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE1FNDAwMF9JT0NUTF9NQVhOUiA1MAorI2RlZmluZSBNRTQwMDBfTUFHSUMgJ3knCisjZGVmaW5lIE1FNDAwMF9HRVRfVVNFUl9JTkZPICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMCwgXAorCQkJCQkgICAgc3RydWN0IG1lNDAwMF91c2VyX2luZm8pCisKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVJUICAgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAxLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNRTQwMDBfQU9fU1RPUCAgICAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDIpCisjZGVmaW5lIE1FNDAwMF9BT19JTU1FRElBVEVfU1RPUCAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMykKKyNkZWZpbmUgTUU0MDAwX0FPX1JFU0VUICAgICAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA0KQorI2RlZmluZSBNRTQwMDBfQU9fUFJFTE9BRCAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDUpCisjZGVmaW5lIE1FNDAwMF9BT19QUkVMT0FEX1VQREFURSAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgNikKKyNkZWZpbmUgTUU0MDAwX0FPX0VYX1RSSUdfRU5BQkxFICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA3KQorI2RlZmluZSBNRTQwMDBfQU9fRVhfVFJJR19ESVNBQkxFICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDgpCisjZGVmaW5lIE1FNDAwMF9BT19FWF9UUklHX1NFVFVQICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgOSwgaW50KQorI2RlZmluZSBNRTQwMDBfQU9fVElNRVJfU0VUX0RJVklTT1IgICBfSU9XIChNRTQwMDBfTUFHSUMsIDEwLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNRTQwMDBfQU9fRU5BQkxFX0RPICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDExKQorI2RlZmluZSBNRTQwMDBfQU9fRElTQUJMRV9ETyAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDEyKQorI2RlZmluZSBNRTQwMDBfQU9fRlNNX1NUQVRFICAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDEzLCBpbnQpCisKKyNkZWZpbmUgTUU0MDAwX0FJX1NJTkdMRSAgICAgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAxNCwgXAorCQkJCQkgICAgc3RydWN0IG1lNDAwMF9haV9zaW5nbGUpCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFSVCAgICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMTUsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1FNDAwMF9BSV9TVE9QICAgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTYpCisjZGVmaW5lIE1FNDAwMF9BSV9JTU1FRElBVEVfU1RPUCAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTcpCisjZGVmaW5lIE1FNDAwMF9BSV9FWF9UUklHX0VOQUJMRSAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTgpCisjZGVmaW5lIE1FNDAwMF9BSV9FWF9UUklHX0RJU0FCTEUgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTkpCisjZGVmaW5lIE1FNDAwMF9BSV9FWF9UUklHX1NFVFVQICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjAsIFwKKwkJCQkJICAgIHN0cnVjdCBtZTQwMDBfYWlfdHJpZ2dlcikKKyNkZWZpbmUgTUU0MDAwX0FJX0NPTkZJRyAgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAyMSwgXAorCQkJCQkgICAgc3RydWN0IG1lNDAwMF9haV9jb25maWcpCisjZGVmaW5lIE1FNDAwMF9BSV9TQ19TRVRVUCAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjIsIFwKKwkJCQkJICAgIHN0cnVjdCBtZTQwMDBfYWlfc2MpCisjZGVmaW5lIE1FNDAwMF9BSV9GU01fU1RBVEUgICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMjMsIGludCkKKworI2RlZmluZSBNRTQwMDBfRElPX0NPTkZJRyAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDI0LCBcCisJCQkJCSAgICBzdHJ1Y3QgbWU0MDAwX2Rpb19jb25maWcpCisjZGVmaW5lIE1FNDAwMF9ESU9fR0VUX0JZVEUgICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMjUsIFwKKwkJCQkJICAgIHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUpCisjZGVmaW5lIE1FNDAwMF9ESU9fU0VUX0JZVEUgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjYsIFwKKwkJCQkJICAgIHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUpCisjZGVmaW5lIE1FNDAwMF9ESU9fUkVTRVQgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMjcpCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9SRUFEICAgICAgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAyOCwgXAorCQkJCQkgICAgc3RydWN0IG1lNDAwMF9jbnQpCisjZGVmaW5lIE1FNDAwMF9DTlRfV1JJVEUgICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjksIFwKKwkJCQkJICAgIHN0cnVjdCBtZTQwMDBfY250KQorI2RlZmluZSBNRTQwMDBfQ05UX0NPTkZJRyAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDMwLCBcCisJCQkJCSAgICBzdHJ1Y3QgbWU0MDAwX2NudF9jb25maWcpCisjZGVmaW5lIE1FNDAwMF9DTlRfUkVTRVQgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzEpCisKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfRElTQUJMRSAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzMikKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfRU5BQkxFICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzMykKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfQ09VTlQgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAzNCwgaW50KQorCisjZGVmaW5lIE1FNDAwMF9BSV9PRkZTRVRfRU5BQkxFICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzUpCisjZGVmaW5lIE1FNDAwMF9BSV9PRkZTRVRfRElTQUJMRSAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzYpCisjZGVmaW5lIE1FNDAwMF9BSV9GVUxMU0NBTEVfRU5BQkxFICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzcpCisjZGVmaW5lIE1FNDAwMF9BSV9GVUxMU0NBTEVfRElTQUJMRSAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzgpCisKKyNkZWZpbmUgTUU0MDAwX0FJX0VFUFJPTV9SRUFEICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAzOSwgXAorCQkJCQkgICAgc3RydWN0IG1lNDAwMF9lZXByb20pCisjZGVmaW5lIE1FNDAwMF9BSV9FRVBST01fV1JJVEUgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgNDAsIFwKKwkJCQkJICAgIHN0cnVjdCBtZTQwMDBfZWVwcm9tKQorCisjZGVmaW5lIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfRVhfVFJJRyBfSU8gIChNRTQwMDBfTUFHSUMsIDQxKQorI2RlZmluZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX1NXICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA0MikKKyNkZWZpbmUgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19ESVNBQkxFIF9JTyAgKE1FNDAwMF9NQUdJQywgNDMpCisjZGVmaW5lIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfVVBEQVRFICBfSU9XIChNRTQwMDBfTUFHSUMsIDQ0LCBcCisJCQkJCSAgICAgc3RydWN0IG1lNDAwMF9hb19jaGFubmVsX2xpc3QpCisKKyNkZWZpbmUgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0VYX1RSSUcgIF9JTyAgKE1FNDAwMF9NQUdJQywgNDUpCisjZGVmaW5lIE1FNDAwMF9BT19TWU5DSFJPTk9VU19TVyAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDQ2KQorI2RlZmluZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfRElTQUJMRSAgX0lPICAoTUU0MDAwX01BR0lDLCA0NykKKworI2RlZmluZSBNRTQwMDBfQU9fRVhfVFJJR19USU1FT1VUICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCA0OCwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUU0MDAwX0FPX0dFVF9GUkVFX0JVRkZFUiAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgNDksIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgTUU0MDAwX0FJX0dFVF9DT1VOVF9CVUZGRVIgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgNTAsIHVuc2lnbmVkIGxvbmcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDBfZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwX2Zpcm13YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjMjNmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwX2Zpcm13YXJlLmgKQEAgLTAsMCArMSwxMDAzMyBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBjb3B5cmlnaHQgYnkgTWVpbGhhdXMgRWxlY3Ryb25pYyBHbWJIIDIwMDMuCisgICBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUsIHNlbGwsIG1vZGlmeSwgcmV2ZXJzZSBlbmdpbmVlciBvciB1c2UgdGhpcworICAgY29kZSAob3IgcGFydHMgb2YgaXQpIGZvciBhbnkgb3RoZXIgcHVycG9zZSBvciB1bmRlciBhbnkgb3RoZXIgY29uZGl0aW9ucworICAgdGhhbiBzdGF0ZWQgYmVsb3cuCisKKyAgIDEpIFlvdSBhcmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGZpbGUgdG9nZXRoZXIKKyAgIHdpdGggZGV2aWNlIGRyaXZlcnMgZm9yIHRoZSBNZWlsaGF1cyBNRS00MDAwLCBib2FyZCBmYW1pbHkuCisKKyAgIDIpIERlcml2ZWQgd29yayAoZGV2aWNlIGRyaXZlcnMgdXNpbmcgdGhpcyBmaWxlKSBjYW4gYmUgcHVibGlzaGVkIHVuZGVyCisgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIEFueSBvdGhlciBsaWNlbnNlIHRlcm1zIGhhdmUKKyAgIHRvIGJlIGFncmVlZCBieSBNZWlsaGF1cyBHbWJIIGluIHdyaXR0ZW4uCisKKyAgIDIpIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsKKyAgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBNZWlsaGF1cyBpcyB1bmRlcgorICAgbm8gbWVhbnMgbGlhYmxlIGZvciBwcm9kdWN0cyB1c2luZyB0aGlzIGZpbGUgb3IgcGFydHMgb2YgaXQuCisKKyAgIDMpIFRoZSBjb3B5cmlnaHQgb2YgdGhpcyBmaWxlIGhhcyB0byBiZSBtZW50aW9uZWQgaW4gZGVyaXZlZCB3b3JrLgorCisgICA0KSBJZiB0aGlzIGxpY2Vuc2UgdGVybXMgYXJlIG5vdCB2YWxpZCBkdWUgdG8gYW55IG90aGVyIGxhdworICAgb3IgcmVzdHJpY3Rpb25zIGltcG9zZWQgb24geW91LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZQorICAgdGhpcyBmaWxlIGluIGFueSB3YXkgYXQgYWxsLgorICovCisKKy8qIFZlcnNpb24gMTggb2Ygc3RhbmRhcmQgZmlybXdhcmUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHhpbGlueF9maXJtW10gPSB7CisweDAwLCAweDAxLCAweGZiLCAweGRjLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDA5LCAweDA0LCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg1NSwgMHg5OSwgMHhBQSwgMHg2NiwgMHgwQywgMHgwMCwKKzB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEYwLCAweDBDLCAweDgwLCAweDA0LCAweDgwLCAweDAwLCAweDAxLCAweEZDLCAweEI0LCAweDBDLCAweDAwLCAweDAzLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwQywKKzB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDBDLCAweDAwLCAweDAyLCAweDAwLCAweDBBLCAweDAwLCAweDZFLCAweDBELCAweDAxLCAweDQ5LCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDksIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkUsIDB4NEIsIDB4MDIsIDB4M0UsIDB4MDAsIDB4RUEsIDB4MDAsIDB4QTgsIDB4MDAsIDB4QTAsCisweDBBLCAweDgwLCAweDJBLCAweDAwLCAweEFFLCAweDAwLCAweEI4LCAweDAyLCAweEEwLCAweDAyLCAweDgwLCAweDI4LCAweDAwLAorMHhBQSwgMHgwMCwgMHhCOCwgMHgwMiwgMHg2MCwgMHgwMiwgMHg4MCwgMHgwQiwgMHgwMCwgMHgyNiwgMHgwMCwgMHhCOCwgMHgwMCwKKzB4RTAsIDB4MDIsIDB4ODAsIDB4MEIsIDB4MDAsIDB4MkUsIDB4MDAsIDB4QjgsIDB4MDAsIDB4RTAsIDB4MDIsIDB4ODAsIDB4MEIsCisweDAwLCAweEFFLCAweDAwLCAweEI4LCAweDAyLCAweDgwLCAweDBBLCAweEZDLCAweDIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1QiwgMHgwMCwgMHhGMywgMHgwNCwgMHhDQywgMHgwMSwgMHhGMiwgMHg5NiwgMHhDMiwKKzB4REYsIDB4MzAsIDB4QkIsIDB4NDMsIDB4RDAsIDB4NzMsIDB4QjAsIDB4OEYsIDB4QzAsIDB4M0QsIDB4MDIsIDB4RkIsIDB4NDgsCisweEZDLCAweDEzLCAweDMwLCAweDEzLCAweEMwLCAweDRGLCAweDAyLCAweDNGLCAweDAxLCAweERDLCAweDEzLCAweEIwLCAweDRGLAorMHhDMCwgMHg0RiwgMHgwMCwgMHgzQiwgMHhDOSwgMHhDQywgMHgwNCwgMHhGMiwgMHgxMywgMHhDMCwgMHhGQywgMHgwMCwgMHhGQiwKKzB4QzksIDB4OEMsIDB4MjcsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDA4LCAweDU3LCAweDQwLCAweEUxLCAweDA4LCAweDQ0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDEzLAorMHgwMSwgMHhEMSwgMHgwNCwgMHhDNCwgMHgxQiwgMHgxMCwgMHg2RCwgMHg0MCwgMHgzQywgMHgwMiwgMHhERCwgMHgwNiwgMHhGNCwKKzB4MEYsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MjcsIDB4MTEsIDB4NTcsIDB4ODEsIDB4QzQsIDB4MEYsIDB4RDAsIDB4QkYsIDB4NDAsCisweDY0LCAweDAwLCAweDUxLCAweDA0LCAweDQ0LCAweDA0LCAweEQwLCAweDExLCAweDUwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLAorMHg1NCwgMHgxMSwgMHgxNCwgMHgxOSwgMHg0MCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDgsIDB4NDgsIDB4NDQsIDB4MjEsIDB4MDAsCisweEM5LCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweENDLCAweDY0LCAweDMzLCAweDExLCAweENELCAweDA2LCAweDM0LCAweDIzLAorMHg1MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHg4RCwgMHgwMCwgMHgwNCwgMHgyMywgMHhEMCwgMHgwQywgMHg0MiwgMHgwMSwKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDQsIDB4MzAsIDB4MDksIDB4Q0QsIDB4NDQsIDB4NDQsCisweDEyLCAweDEwLCAweDAwLCAweDQ0LCAweDQ3LCAweDg4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBOCwgMHhCNSwgMHgwMSwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwQSwgMHhEOCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhEMSwKKzB4NDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NjAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsCisweDAxLCAweDQwLCAweDI3LCAweDEwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAzLCAweENBLCAweDBELCAweDQwLCAweDY1LCAweDAwLAorMHhDMSwgMHgwMCwgMHg0NCwgMHhDNiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgzMCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg1NCwgMHgwOSwKKzB4MTQsIDB4MTEsIDB4NDAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsCisweEUzLCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweDBBLCAweEYwLCAweDBELCAweEM0LCAweEY3LCAweDAwLCAweDlCLCAweDQwLAorMHg1QywgMHgwMywgMHhGMiwgMHgwRCwgMHhDNiwgMHgzNywgMHgxMCwgMHhEQiwgMHgwMCwgMHg3NCwgMHgwMywgMHg3MCwgMHhBMSwKKzB4ODEsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDMsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QzcsIDB4MDEsIDB4OTMsCisweDAwLCAweDVELCAweDBDLCAweEYwLCAweDMxLCAweEMwLCAweDM0LCAweDAwLCAweDVGLCAweEMwLCAweDBDLCAweDA3LCAweDMwLAorMHg3MSwgMHg4MCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwKKzB4MDgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4RkYsIDB4MTgsIDB4RkYsIDB4MDQsIDB4QUMsCisweDAzLCAweEIxLCAweDBELCAweEM4LCAweDNELCAweDAwLCAweEZGLCAweDgwLCAweDdDLCAweDAzLCAweEI0LCAweDEzLCAweENBLAorMHhGRiwgMHgwMCwgMHhGNywgMHgwMywgMHhFNCwgMHg0MywgMHhGMCwgMHgwRSwgMHhDMSwgMHgwRSwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4NDAsIDB4RjAsIDB4MEIsIDB4RTIsIDB4M0YsIDB4MDAsIDB4RkYsIDB4ODMsIDB4RkQsIDB4MjUsIDB4RjAsIDB4MEIsCisweEMwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDAwLAorMHhEMywgMHgwMCwgMHg0QywgMHgwQSwgMHgzMCwgMHgwRCwgMHhDMCwgMHhBNCwgMHgwMCwgMHhENywgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4NDEsIDB4QzQsIDB4MzUsCisweDAwLCAweEQzLCAweDAyLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA1LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwRSwgMHgzMCwgMHgwMSwgMHhDMSwgMHgzNywgMHgxMCwgMHhENywgMHgwNCwgMHg0QywgMHgwQiwgMHgzMCwgMHgyMSwgMHhDMCwKKzB4MEIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4RjQsIDB4MDEsIDB4RjUsCisweDAwLCAweDQ0LCAweDJFLCAweDEwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweEQxLCAweDAwLCAweEM0LCAweDAzLCAweDEwLAorMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGMSwgMHgwMCwgMHhFQywgMHgwMywgMHgxMCwgMHgxMSwgMHhDMCwgMHgzNSwgMHgwMCwKKzB4RDEsIDB4MDEsIDB4REMsIDB4MDcsIDB4NzAsIDB4MkYsIDB4QzMsIDB4MjMsIDB4MDYsIDB4REQsIDB4MjAsIDB4NjQsIDB4MDIsCisweEIwLCAweDM4LCAweDQxLCAweDM3LCAweDAwLCAweEQxLCAweDAzLCAweDZDLCAweDI5LCAweDUwLCAweEE5LCAweDQwLCAweDRFLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgwMSwgMHhEMSwgMHgwMCwKKzB4MDQsIDB4MjksIDB4OTAsIDB4MDQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MEQsCisweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAzLCAweDVELCAweDAwLCAweDQwLCAweDEyLCAweDIwLCAweDAxLAorMHgwNCwgMHgxMCwgMHgwQiwgMHhEMCwgMHgxQywgMHg0MiwgMHgyMSwgMHg4MCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwOCwgMHg5MCwKKzB4MzAsIDB4NDAsIDB4MzEsIDB4MTAsIDB4RDUsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MTgsIDB4MTgsIDB4NDQsIDB4MUYsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDY4LCAweDAwLCAweEU1LCAweDAxLCAweDg0LAorMHgwNywgMHg5OCwgMHgxQiwgMHg0MCwgMHg2OSwgMHg4MCwgMHhFMSwgMHg4MSwgMHgyNCwgMHgwNywgMHgxMCwgMHg5RSwgMHg0MCwKKzB4NzgsIDB4ODAsIDB4RUQsIDB4MDEsIDB4QTQsIDB4MDcsIDB4NTAsIDB4NTIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MjEsIDB4MTksCisweDkwLCAweDA3LCAweDUxLCAweDFDLCAweDQwLCAweDZBLCAweDAwLCAweDZELCAweDQxLCAweEE0LCAweDA2LCAweEQyLCAweDEyLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhGMSwgMHgwOSwgMHhFNCwgMHg0NSwgMHg1NCwgMHgxQSwgMHg0MCwgMHgxMiwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MjAsIDB4MDIsIDB4QzMsIDB4ODgsIDB4NDQsIDB4MDIsCisweEIwLCAweDg4LCAweDQwLCAweDIwLCAweDAwLCAweEQ3LCAweDA4LCAweDM0LCAweDAzLCAweDcwLCAweDBDLCAweDQwLCAweDM3LAorMHgwMiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMywgMHg3MSwgMHgxMCwgMHhDMCwgMHgxNiwgMHgwMiwgMHgwMSwgMHg4MCwgMHgxQywKKzB4QzMsIDB4RjAsIDB4MEMsIDB4NDAsIDB4MjEsIDB4MDAsIDB4Q0YsIDB4MDksIDB4M0MsIDB4OTEsIDB4QjAsIDB4ODgsIDB4QzAsCisweDM3LCAweDAwLCAweEM3LCAweDEwLCAweDBDLCAweDExLCAweDM4LCAweDg0LCAweEMxLCAweDRCLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCMCwgMHgyRCwgMHgwMCwgMHhGRiwgMHgwMiwgMHhGQywgMHgwMiwgMHg2MCwKKzB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4NDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDQsCisweEYzLCAweDAwLCAweEZDLCAweDBCLCAweEIwLCAweDAyLCAweEMwLCAweDNGLCAweDQ4LCAweEZGLCAweDAwLCAweDdDLCAweDJCLAorMHhGMCwgMHg4RiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHgzQywgMHgwMywgMHg5MCwgMHgwOSwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RUUsIDB4MjAsIDB4N0MsIDB4MDEsIDB4RDQsIDB4MDEsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDI3LCAweDAwLCAweERGLCAweDBFLCAweDdDLCAweDAwLCAweEMwLCAweDBELAorMHhDMCwgMHg3NSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHg1MywgMHg3MCwgMHg4RCwgMHhDNiwgMHhCNCwgMHgwNCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MTMsIDB4QjAsIDB4MDAsIDB4QzAsIDB4MzQsIDB4MTAsIDB4MDcsIDB4ODAsIDB4NUMsIDB4MTMsIDB4MzAsCisweDVDLCAweEMxLCAweDA0LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLAorMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MjksIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsCisweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDEzLCAweEQwLCAweDRGLCAweDQwLCAweDNBLCAweDExLCAweEVELCAweDAwLAorMHhCNCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgzOSwgMHgwMCwgMHhBRCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgyRSwKKzB4NDAsIDB4MDgsIDB4MDgsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsCisweDIwLCAweEM0LCAweDAxLCAweDEwLCAweDBBLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHg2OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHg5MCwgMHgzRSwgMHg0QywgMHg2RiwKKzB4MTAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MTcsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MEQsIDB4OTQsCisweDI3LCAweEQwLCAweDEzLCAweDQxLCAweDdBLCAweDgwLCAweDZELCAweDAxLCAweDk0LCAweDM3LCAweDUxLCAweDVFLCAweDQwLAorMHg2QSwgMHgwNCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMSwgMHgxQSwgMHg0OCwgMHg3QiwgMHg4MCwgMHhBRCwgMHgwMSwKKzB4ODQsIDB4MDUsIDB4MTQsIDB4MUUsIDB4NDIsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDI4LCAweDIzLCAweDg0LCAweENELCAweDAwLCAweDM0LCAweDJFLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDQ5LAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNiwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MTEsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NzAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDZGLCAweEQyLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDQ0LCAweDA1LAorMHgyMSwgMHgxNCwgMHgxQywgMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKzB4QTgsIDB4RDksIDB4MDAsIDB4NUYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4QjAsIDB4MDcsIDB4QzQsIDB4REYsIDB4MDEsIDB4NTMsCisweDAwLCAweDdDLCAweDAxLCAweDc4LCAweDA1LCAweEMwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEIwLAorMHgxNywgMHhDMCwgMHg5RSwgMHgwMSwgMHg3RiwgMHgwRSwgMHg1QywgMHgwMSwgMHg3NCwgMHgwNSwgMHhDOCwgMHgxRSwgMHgwMCwKKzB4N0YsIDB4MDIsIDB4RkMsIDB4MEQsIDB4RTAsIDB4MDcsIDB4QzAsIDB4MTcsIDB4MjAsIDB4N0YsIDB4MDcsIDB4Q0MsIDB4MDUsCisweDEwLCAweDA3LCAweEMxLCAweDVGLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLAorMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHgzQywgMHg0MCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHg2MCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMxLCAweDA1LCAweDEwLCAweDFGLCAweDAwLCAweDdDLCAweDgwLCAweDkxLCAweDAxLCAweEQwLCAweDg3LCAweDAxLCAweDFGLAorMHgzMCwgMHg3MCwgMHgwOCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgxOCwgMHgxRiwgMHg0MCwgMHg3RCwgMHgwMCwgMHhGMCwKKzB4MTEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsCisweDAxLCAweDlCLCAweDAwLCAweDRELCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDc0LAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMywgMHg0MCwgMHg5MywgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzQsIDB4NjcsIDB4MDIsIDB4OUQsIDB4MDAsCisweDRDLCAweDE2LCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDgwLCAweDlGLCAweDAzLCAweDRDLCAweDIyLCAweDM0LCAweDA4LAorMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwMCwKKzB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweEYwLCAweEI4LCAweDQwLCAweDI0LAorMHgwMCwgMHg4RCwgMHgwOCwgMHgwMSwgMHgwNiwgMHgzMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgyMSwgMHg4RCwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OEQsIDB4MDMsIDB4NkMsIDB4MUUsIDB4NTQsIDB4MjksIDB4NDAsCisweDA1LCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDgxLAorMHgwMCwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTksIDB4MDAsIDB4NzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NjAsIDB4MjQsIDB4ODAsCisweERELCAweDgwLCAweDU0LCAweDEyLCAweDAwLCAweEE5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHg0RCwgMHg0MywgMHgyNywgMHgwMCwgMHg5OCwgMHgxMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHhBOSwgMHg0MCwgMHg2MCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4ODUsIDB4MDQsCisweDA0LCAweDFBLCAweDE0LCAweDA4LCAweDQwLCAweDIwLCAweDIwLCAweDhELCAweDA4LCAweDM0LCAweDEyLCAweEQwLCAweDg4LAorMHg2NCwgMHgyMywgMHgwMSwgMHg4OSwgMHgwOCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMiwgMHhERCwKKzB4MDAsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDQsIDB4MjMsIDB4MDAsIDB4OUQsIDB4MDgsIDB4MDQsIDB4MDIsIDB4RDgsCisweDA4LCAweDQyLCAweDIzLCAweDAyLCAweDlELCAweDA4LCAweDI0LCAweDIyLCAweDEwLCAweDQ4LCAweDQwLCAweDQxLCAweDg4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwQSwgMHg0QywKKzB4MDksIDB4MzAsIDB4QTEsIDB4QzAsIDB4ODUsIDB4MDIsIDB4MUQsIDB4MDIsIDB4N0MsIDB4MjgsIDB4RjAsIDB4NjEsIDB4QzEsCisweDg3LCAweDAyLCAweDE5LCAweDE2LCAweDc0LCAweDAwLCAweEYwLCAweDA1LCAweEMwLCAweDg0LCAweDAwLCAweDFGLCAweDAwLAorMHg1QywgMHg1MSwgMHg3MCwgMHg0MSwgMHg0NSwgMHgwNywgMHgxMCwgMHgxRiwgMHgwMiwgMHg0RCwgMHgwMSwgMHhGMCwgMHgwMSwKKzB4QzQsIDB4ODcsIDB4MDAsIDB4MEQsIDB4MDIsIDB4NEMsIDB4ODgsIDB4MzAsIDB4MDEsIDB4QzQsIDB4NzQsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDJGLCAweDAwLCAweDlGLCAweDA4LCAweEZDLCAweDBBLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCRiwgMHgwNCwgMHg3QywgMHgyMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywKKzB4MDIsIDB4OTMsIDB4MDQsIDB4N0MsIDB4MjIsIDB4NzAsIDB4MEIsIDB4RDAsIDB4MkYsIDB4MDEsIDB4QkYsIDB4MDAsIDB4NkMsCisweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDJELCAweDEwLCAweEJGLCAweDA0LCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLAorMHgyNywgMHgwMSwgMHhCRiwgMHg4NCwgMHhGQywgMHgxMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4OTMsIDB4OEMsIDB4RTgsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDkzLCAweDYwLCAweDdDLCAweDUyLCAweDMwLCAweEM5LCAweEMwLCAweDI1LCAweDAwLAorMHg5QiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwKKzB4QjAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MjgsIDB4OUYsIDB4NDAsIDB4QkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MjQsCisweDIwLCAweEJGLCAweDQwLCAweENDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwQywgMHg0NCwgMHg0OSwgMHhEMCwgMHgwMSwKKzB4NDEsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MTQsIDB4NzQsIDB4MTAsIDB4MTAsIDB4QzEsIDB4NDgsIDB4ODQsIDB4MDQsIDB4MTEsCisweDEwLCAweDQ0LCAweDIwLCAweEQyLCAweDAxLCAweDQwLCAweDA3LCAweDAxLCAweDFELCAweDAwLCAweDUwLCAweDA4LCAweDE0LAorMHgwMSwgMHg0MCwgMHgxNywgMHgwMCwgMHgxRCwgMHgxNCwgMHg2NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwQywKKzB4NUQsIDB4OTAsIDB4NTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NTAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDI3LCAweDQwLCAweDgxLCAweDA0LCAweDM0LCAweDMyLCAweEQwLCAweDA4LCAweDQwLAorMHgyNywgMHg0MCwgMHg4NSwgMHgwNCwgMHgzNCwgMHg1MiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMSwgMHgwMywgMHg4OSwgMHgwOCwKKzB4MTQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDUsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MjIsIDB4MTIsIDB4OEMsCisweDQyLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDIzLCAweDAxLCAweDhELAorMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDQsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4NjksIDB4NjAsIDB4MjcsCisweDAwLCAweDk1LCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweDA5LCAweDYwLCAweDIxLCAweDAwLCAweDkxLCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNywgMHg4MCwgMHg5QywgMHgwMiwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MEEsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjcsIDB4ODAsIDB4OEQsIDB4MDgsCisweDU0LCAweDEyLCAweDEyLCAweDE5LCAweDQwLCAweDYwLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwRSwgMHhGMCwgMHgzOSwgMHhFMCwgMHgyNywgMHgyMSwKKzB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzIsIDB4MjUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NUMsIDB4MDIsCisweEYwLCAweDI5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAzLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDY3LAorMHgwMCwgMHg5RiwgMHgyNCwgMHg3QywgMHgwMiwgMHhGOCwgMHg4OCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4MzAsIDB4NTksIDB4QzAsIDB4MTQsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDU2LCAweEYwLCAweDE5LCAweEMwLCAweDY3LCAweDAxLCAweDlCLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGNCwgMHgwOCwgMHhDQywgMHgyNiwgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MzksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDEsCisweDlGLCAweDA1LCAweDdDLCAweDIyLCAweEYwLCAweDE5LCAweEMyLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOCwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MDUsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NUMsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEUwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDIxLAorMHhDMSwgMHgwNywgMHgwMCwgMHgxQiwgMHgwNiwgMHg0QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNCwgMHgwMSwgMHgxMywKKzB4MDIsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MjAsIDB4MzEsCisweDIxLCAweDgwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDE4LAorMHgwMCwgMHg1RCwgMHgwMCwgMHhDMCwgMHgwNSwgMHg3MCwgMHgwNSwgMHg0MCwgMHgxMCwgMHgwMCwgMHg1QywgMHgwMCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4QzAsIDB4MTUsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4NDUsIDB4RDAsIDB4MDcsIDB4QzAsCisweDE1LCAweDAwLCAweDYxLCAweDAwLCAweERDLCAweDRELCAweDcwLCAweDA3LCAweDQwLCAweERELCAweDQwLCAweDUxLCAweDAwLAorMHhGNCwgMHgzRCwgMHgxMCwgMHg3NywgMHg0MCwgMHgxNywgMHg0MCwgMHg3MSwgMHgwMCwgMHg4NCwgMHgwRCwgMHhGMCwgMHhBNywKKzB4QzAsIDB4NTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MjIsIDB4MjAsCisweENELCAweDgwLCAweDEwLCAweDBGLCAweDUwLCAweDBDLCAweDQwLCAweDMzLCAweDgwLCAweENDLCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgwQywgMHgwMCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHhCQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4QzksIDB4MDEsIDB4MjQsIDB4MDcsIDB4NTAsIDB4MEMsIDB4NDAsIDB4RjAsIDB4MDAsIDB4QzEsIDB4MjAsIDB4MzQsCisweDA3LCAweDEwLCAweDRDLCAweDYwLCAweDMzLCAweDkwLCAweEM5LCAweDAwLCAweDA0LCAweDRGLCAweDEwLCAweDJDLCAweDQyLAorMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhDRCwKKzB4MDQsIDB4ODQsIDB4MEIsIDB4NTAsIDB4MUUsIDB4NDAsIDB4M0EsIDB4MDMsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsCisweDhFLCAweDQwLCAweDM5LCAweEExLCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDdELCAweDAwLAorMHhGRCwgMHg0MiwgMHg5MCwgMHgwMywgMHg1MCwgMHgxOCwgMHg0MCwgMHhGRCwgMHgxMCwgMHhFMSwgMHgwNCwgMHhGNCwgMHgwNiwKKzB4MTAsIDB4MEUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTksIDB4MDAsIDB4QzUsIDB4MDEsIDB4OTAsIDB4MEMsIDB4NjAsIDB4MTIsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDY4LCAweDAwLCAweEVGLCAweDA3LAorMHg5NCwgMHgwNywgMHg3MCwgMHgxRiwgMHhDOCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwNSwgMHhCNCwgMHgwRiwgMHhGMCwgMHgxRSwKKzB4NDAsIDB4N0IsIDB4MDQsIDB4RUQsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjIsIDB4MUEsIDB4QzgsIDB4N0IsIDB4MjQsIDB4RkIsCisweDAxLCAweEFDLCAweDg0LCAweDcwLCAweDFBLCAweEMwLCAweDc4LCAweDAwLCAweEUxLCAweDA5LCAweEI0LCAweDA2LCAweDM0LAorMHgxRSwgMHhDNCwgMHg3RiwgMHgwOCwgMHg3OSwgMHgwMSwgMHhDQywgMHgwNiwgMHgzMiwgMHgxNiwgMHhDMCwgMHg1MCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MjUsIDB4MTAsIDB4REYsIDB4MDIsIDB4N0MsCisweDAzLCAweDcwLCAweEVELCAweEM4LCAweEI1LCAweDIxLCAweERGLCAweDAwLCAweDdDLCAweDQzLCAweEYwLCAweDBELCAweEM4LAorMHgzNywgMHgwMiwgMHhERiwgMHg4OCwgMHg3QywgMHgwMywgMHhEMCwgMHgwOSwgMHhDMCwgMHgzMywgMHgwMSwgMHg5MywgMHg4MCwKKzB4N0MsIDB4MDEsIDB4NjAsIDB4MDEsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsIDB4MkEsIDB4N0MsIDB4MDAsIDB4NjAsIDB4MDksCisweEMwLCAweEI3LCAweDA2LCAweDk3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMyLCAweDQzLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg2RiwgMHgwMCwgMHhGRiwgMHgwMywgMHhDOCwgMHgyMSwKKzB4RTAsIDB4M0UsIDB4QzIsIDB4RkMsIDB4MTIsIDB4RkYsIDB4MDksIDB4RUMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsCisweDAyLCAweEZCLCAweDAxLCAweERDLCAweDI3LCAweEYwLCAweDlGLCAweEMwLCAweDdELCAweDA0LCAweEIzLCAweDQxLCAweEJDLAorMHgyNywgMHhCMCwgMHgxMywgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgyMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4QkMsIDB4ODcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDEwLCAweEZELCAweDA0LCAweDg0LCAweDAxLCAweEYwLAorMHgwRSwgMHhDMSwgMHgzQSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhFQywgMHgwMywgMHgxNSwgMHg4RSwgMHg0OCwgMHgzQiwgMHg0MCwKKzB4RjEsIDB4MDAsIDB4ODQsIDB4MjMsIDB4RDAsIDB4QTgsIDB4NDAsIDB4M0IsIDB4MjAsIDB4MjEsIDB4MDAsIDB4QjQsIDB4MjksCisweDEwLCAweDYyLCAweDQwLCAweDNCLCAweDAwLCAweERGLCAweDAwLCAweDg0LCAweDAyLCAweEYwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMiwgMHhFRCwgMHgwOCwgMHhCQywgMHgwMSwgMHhCMCwgMHgwRSwgMHg0MSwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODYsIDB4NjMsIDB4RDgsIDB4MEYsCisweDQwLCAweDM4LCAweDgwLCAweEZELCAweDQwLCAweDg0LCAweDIzLCAweDkwLCAweDBFLCAweDQwLCAweDMzLCAweDEwLCAweEUxLAorMHgwMCwgMHhCNCwgMHgyMywgMHhEMiwgMHgyMiwgMHg2MCwgMHgzOSwgMHgwMCwgMHhBNSwgMHgwMCwgMHhCNCwgMHgwMCwgMHgxMiwKKzB4MDIsIDB4NDAsIDB4MkEsIDB4MDAsIDB4RUQsIDB4MTAsIDB4OTQsIDB4MDIsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDAsCisweDZELCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDA2LCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNiwgMHg1OCwgMHgzQywgMHg0MCwKKzB4MzIsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4MjQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDIsIDB4MzMsIDB4MjAsIDB4QzEsIDB4MDAsCisweDE2LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweEIzLCAweDAwLCAweDA1LCAweDBCLCAweDM2LCAweDAxLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMywgMHgxMCwgMHhDRCwgMHg0MCwgMHgwNCwgMHgxMCwgMHg1MSwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5RCwKKzB4MTIsIDB4MTQsIDB4QUYsIDB4OTAsIDB4NTAsIDB4MDAsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEE4LCAweDI1LCAweDAxLCAweEZGLCAweDAwLCAweDRELCAweDIyLCAweEQwLCAweDNGLCAweEMwLCAweDNDLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGMywgMHgwMCwgMHgxQywKKzB4MDIsIDB4RjAsIDB4MjUsIDB4QzAsIDB4QkQsIDB4MDIsIDB4NTcsIDB4MEIsIDB4N0MsIDB4MDMsIDB4MTEsIDB4MDksIDB4QzAsCisweEY3LCAweDAyLCAweEVGLCAweDAwLCAweDVDLCAweDBBLCAweEQwLCAweDlELCAweDQwLCAweDNGLCAweDAwLCAweDlGLCAweDAyLAorMHg3MCwgMHgwMywgMHgxMCwgMHgyMSwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4NEQsIDB4QzQsIDB4MzcsIDB4MTAsCisweERGLCAweDgwLCAweDdDLCAweDgzLCAweDcwLCAweDBELCAweEM4LCAweDM3LCAweDAwLCAweEQ3LCAweDgwLCAweDY0LCAweDAyLAorMHhGMCwgMHgzRCwgMHhDMCwgMHgzNywgMHg0OCwgMHg1QSwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgyOSwgMHhDMCwgMHg2NywKKzB4MDAsIDB4RDcsIDB4MDAsIDB4NUMsIDB4MEEsIDB4RjAsIDB4MTUsIDB4QzQsIDB4MzcsIDB4MjAsIDB4NUYsIDB4MDIsIDB4N0MsCisweDA5LCAweEYwLCAweDI5LCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4RkUsIDB4MDMsIDB4RjIsIDB4MEYsIDB4QzIsIDB4M0YsIDB4ODAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4QjEsCisweDE3LCAweEMyLCAweDNGLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDBCLCAweEMwLCAweDdGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhEMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzMSwgMHgwMCwgMHhDQywgMHg2MiwKKzB4MzAsIDB4MDMsIDB4QzAsIDB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsCisweDU2LCAweDAwLCAweERELCAweDAwLCAweDM0LCAweDBFLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDgwLCAweERELCAweDAwLAorMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHhBMCwgMHhERiwgMHgyMCwgMHg3NCwgMHgwMywgMHgzMSwgMHg5RCwKKzB4QzAsIDB4MzEsIDB4MDAsIDB4OTEsIDB4MEEsIDB4NzQsIDB4MEYsIDB4NzgsIDB4MTEsIDB4NDAsIDB4ODcsIDB4MDEsIDB4REQsCisweDAwLCAweDZDLCAweDQ0LCAweDcwLCAweDAxLCAweDQxLCAweDM3LCAweDAwLCAweDEzLCAweDBGLCAweDE0LCAweDQ0LCAweDEwLAorMHgzOSwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhBNiwKKzB4MDIsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4ODAsIDB4NzQsCisweDAzLCAweEQyLCAweDBELCAweDQ4LCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDA1LCAweDQwLAorMHgzNywgMHgwMCwgMHg1NSwgMHg4MiwgMHg3NCwgMHgxMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgxNywgMHgwMiwgMHhEOSwgMHgwMCwKKzB4NDQsIDB4MDQsIDB4RDAsIDB4MDksIDB4NDIsIDB4MzMsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MTksCisweDQxLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDMwLCAweDAwLAorMHhDRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNiwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MjAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4ODgsIDB4NDgsIDB4MzUsCisweDAwLCAweDQ1LCAweDAwLCAweDM0LCAweDAwLCAweDU4LCAweDA4LCAweDYwLCAweDAzLCAweDAwLCAweERELCAweDAwLCAweDI1LAorMHgwMCwgMHg1MCwgMHgwMCwgMHg0OCwgMHgzMywgMHg0MCwgMHg0NSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwOCwgMHg0MCwKKzB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjYsIDB4MDAsIDB4RkYsCisweDAwLCAweDdDLCAweDAwLCAweDEwLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweERELCAweDAwLCAweEY0LCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3RSwgMHgwMywgMHhCMCwgMHgwNSwgMHg0OCwgMHgzQiwgMHgwMCwKKzB4RDUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDAsIDB4RkYsIDB4MDgsIDB4NEMsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDNGLCAweDAwLCAweDE3LCAweDAwLCAweDRELCAweDAwLCAweDMwLCAweDA5LCAweEMwLCAweDAzLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4NzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4ODAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDcxLCAweDQzLCAweEMwLCAweDNELCAweDAwLCAweDNCLAorMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMCwgMHg3OCwKKzB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RjAsIDB4MEIsIDB4QzIsIDB4MTcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDBGLCAweDA0LCAweDMzLCAweDAxLCAweEM0LAorMHgwMiwgMHhCOCwgMHgwQiwgMHhDMCwgMHhCRiwgMHgwMSwgMHhGQiwgMHgyQywgMHhFQywgMHg4RSwgMHg3MCwgMHgyRiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4RjcsIDB4MTgsIDB4OEMsIDB4MjQsIDB4RjAsIDB4NEYsIDB4QzEsIDB4NEYsIDB4MDIsIDB4RkYsIDB4NDQsCisweERDLCAweDI3LCAweDMwLCAweDhGLCAweEMwLCAweDNGLCAweDAwLCAweEU3LCAweDAwLCAweEVDLCAweDA0LCAweEYwLCAweDBGLAorMHhDMCwgMHg2QywgMHgwMCwgMHhGQiwgMHgxMCwgMHg5QywgMHg1MiwgMHhGMCwgMHgxMywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4ODcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NkMsIDB4MDIsCisweEYwLCAweDA5LCAweDQwLCAweEJGLCAweDAwLCAweEYxLCAweDAyLCAweDRDLCAweDEzLCAweDEwLCAweDhGLCAweDQwLCAweDY3LAorMHgwOCwgMHhGMSwgMHgwMiwgMHg0NCwgMHgxMCwgMHhEMiwgMHgzRiwgMHhDMiwgMHgyMywgMHgwOCwgMHhGMSwgMHgwMywgMHg0NCwKKzB4MTMsIDB4MDQsIDB4NkYsIDB4NDAsIDB4RkMsIDB4MjAsIDB4RjEsIDB4MEIsIDB4NDQsIDB4MDQsIDB4RDEsIDB4M0YsIDB4QzAsCisweDQ0LCAweDAwLCAweEQ1LCAweDQzLCAweDc0LCAweDA0LCAweEQwLCAweDE1LCAweEMwLCAweDA2LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNSwgMHgwMCwgMHg5MiwKKzB4MDgsIDB4NDIsIDB4MzMsIDB4MDMsIDB4QzksIDB4MEMsIDB4MzQsIDB4MDMsIDB4NTAsIDB4NEMsIDB4NDQsIDB4MDcsIDB4ODAsCisweEM1LCAweDIwLCAweDA0LCAweDEyLCAweEQwLCAweDBDLCAweDQyLCAweDEzLCAweDEwLCAweEM5LCAweDAyLCAweDE0LCAweDAzLAorMHgxMCwgMHgyQywgMHg0MCwgMHhCMSwgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNywgMHgwMCwgMHg1MCwgMHgyQywgMHg0MCwgMHgyNiwKKzB4MDAsIDB4QzEsIDB4MjAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDQxLCAweDA0LCAweDAxLCAweDAxLCAweDU0LCAweDBFLCAweDUwLCAweDE5LAorMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHg0NywgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjUsIDB4MDQsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTgsCisweDBELCAweDA4LCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDY0LCAweDA0LCAweEQwLCAweDBELCAweDQwLCAweDY0LCAweDAwLAorMHhENSwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgzNSwgMHg0MCwgMHgwRSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4QzcsIDB4MDAsIDB4MTMsIDB4MDMsIDB4NTQsIDB4MEMsIDB4OTAsIDB4NTEsIDB4QzAsCisweDM3LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEM0LCAweDQzLCAweDAwLCAweEQ3LCAweDAwLAorMHg0QywgMHgwRSwgMHhGMCwgMHgwRCwgMHg0OCwgMHg5NywgMHgwMiwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHgzMiwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MTAsIDB4RDcsIDB4MDAsIDB4NkUsIDB4NDQsIDB4RjAsIDB4MEQsIDB4RDAsIDB4NjIsIDB4MDAsIDB4REIsCisweDAwLCAweDVDLCAweDE2LCAweEYyLCAweDFELCAweEUwLCAweDA4LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4MCwgMHgwNSwgMHgwMCwgMHgzRiwgMHgwMCwgMHg2RCwgMHg4MCwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RUYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjgsIDB4MEQsIDB4QzAsIDB4MkYsIDB4ODAsIDB4RUIsIDB4NDAsIDB4RkMsCisweDAwLCAweEYyLCAweDBGLCAweEMwLCAweDRGLCAweDAwLCAweEVCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLAorMHgzQiwgMHgwNCwgMHhGRCwgMHg4MCwgMHhEQywgMHg0MCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDg1LCAweDAwLCAweDFCLCAweDAwLCAweDRELCAweDA4LCAweDMwLCAweDA5LCAweEMzLCAweDMzLCAweDAwLAorMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHg4NSwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwQSwKKzB4MzAsIDB4MEQsIDB4QzYsIDB4MTYsIDB4MDAsIDB4RDMsIDB4MTAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzYsCisweDAwLCAweERGLCAweDIwLCAweDRDLCAweDA4LCAweDcwLCAweDBDLCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdFLAorMHg0MiwgMHg3MCwgMHgyRCwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4NEUsIDB4MDAsIDB4NjksIDB4NDAsIDB4M0YsIDB4MTAsIDB4RkQsCisweDAwLCAweDRDLCAweDAzLCAweDEwLCAweDBGLCAweDQwLCAweEE0LCAweDAzLCAweEZELCAweDAwLCAweDQ0LCAweDAwLCAweDEyLAorMHgwRiwgMHg0MCwgMHgyNCwgMHgwMCwgMHhGMCwgMHgwMywgMHg1NCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MCwgMHg3QywgMHgwNCwKKzB4RUQsIDB4MDAsIDB4NDUsIDB4MDQsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NDcsIDB4MDAsIDB4RkQsIDB4MDAsIDB4NzQsIDB4MEUsCisweDEwLCAweDBELCAweDQzLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLAorMHg0MiwgMHgwMCwgMHgwOSwgMHgyNCwgMHgwMCwgMHg0NiwgMHg5MCwgMHgwMCwgMHg0MCwgMHgzMywgMHgyMCwgMHhDOSwgMHgwMCwKKzB4NTIsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDgsIDB4QTEsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MEMsCisweDQ4LCAweDI3LCAweDYwLCAweEMxLCAweDAxLCAweDQ0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwNCwgMHgyNCwgMHgwNCwgMHhEMCwgMHg4QywgMHg0OSwgMHgyMywgMHgxMiwgMHhDRCwgMHgwMCwgMHgxNiwgMHgwNCwgMHg1MSwKKzB4MEQsIDB4NDEsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NDgsCisweDI0LCAweDIxLCAweDAxLCAweDg0LCAweDA3LCAweDE4LCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweENELCAweDAxLCAweDk0LAorMHgwNywgMHg5MCwgMHg5RSwgMHg0MCwgMHg3OCwgMHhBMCwgMHhFRCwgMHgwMSwgMHhENCwgMHgwNCwgMHgxNCwgMHgxRSwgMHg0MCwKKzB4NjksIDB4MDAsIDB4RTEsIDB4MTEsIDB4OTQsIDB4MDcsIDB4QzAsIDB4MUMsIDB4NDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4OTUsCisweDg0LCAweDA1LCAweEQyLCAweDFFLCAweDQwLCAweDRCLCAweDAwLCAweEVELCAweDA5LCAweEI2LCAweDQ0LCAweDEwLCAweDFGLAorMHg0MCwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgwMCwgMHgwMCwKKzB4MUIsIDB4MTAsIDB4MEQsIDB4MjEsIDB4QjAsIDB4MDQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NUMsIDB4MDMsCisweEYwLCAweDBDLCAweEM4LCAweDgxLCAweDAwLCAweERFLCAweDAwLCAweDFDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDMzLAorMHgwMywgMHhDMywgMHg4MCwgMHgxQywgMHg4MywgMHhGMCwgMHg0QywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgwQywKKzB4NDAsIDB4NzAsIDB4MEMsIDB4RTQsIDB4MjMsIDB4MjIsIDB4Q0YsIDB4MDAsIDB4MUUsIDB4MTQsIDB4NzAsIDB4MEMsIDB4QzAsCisweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDJELCAweDEyLCAweDdGLAorMHgwOCwgMHhGQywgMHgwMywgMHg1NCwgMHgwRiwgMHhDMCwgMHgzRiwgMHg4MCwgMHhGRiwgMHgwMiwgMHhFQywgMHgwMywgMHg3MCwKKzB4MEYsIDB4QzMsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MkUsIDB4QzQsIDB4M0UsIDB4MDIsCisweEVGLCAweDEwLCAweEY4LCAweDIzLCAweEYwLCAweDBGLCAweEMxLCAweDNFLCAweDAwLCAweEZGLCAweDA2LCAweERDLCAweDAxLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwOCwgMHhGRiwgMHgyMCwgMHhGRSwgMHgyMCwgMHhGMiwgMHgwQywgMHhDMCwgMHgwQiwKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsCisweDRDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweEI3LCAweDAxLCAweERCLCAweDBFLCAweDdDLCAweDAzLCAweEYwLCAweDVELAorMHhDMSwgMHgyNCwgMHgwMCwgMHhERiwgMHg4NiwgMHg3QywgMHg4NiwgMHg3MCwgMHgzRCwgMHhDMCwgMHgxNiwgMHgwMCwgMHhERiwKKzB4MTAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NEQsIDB4QzEsIDB4MzYsIDB4MDEsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDAsIDB4RjAsCisweEFDLCAweEMwLCAweDI0LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDA2LCAweDMwLCAweDBELCAweEMwLCAweDU0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgwOSwgMHgwOCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4QkIsIDB4MEQsIDB4RTEsIDB4MDAsIDB4OUMsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NTAsCisweDM4LCAweDgwLCAweEVELCAweDEyLCAweEI0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDE4LCAweDAwLCAweEVELCAweDA0LAorMHhCMCwgMHg4MywgMHhEMCwgMHg0RSwgMHg0MiwgMHhCOCwgMHg4MiwgMHhDRCwgMHgwNCwgMHhBNSwgMHgwMSwgMHhEMCwgMHg0RSwKKzB4NDksIDB4MjksIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MTEsIDB4MEUsIDB4QzAsIDB4NEEsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQ5LCAweDA0LCAweDIxLCAweDAxLCAweDg0LCAweDBELAorMHhEMCwgMHgxNiwgMHg0MSwgMHg3MywgMHgwMSwgMHhFOSwgMHgwNSwgMHg5NCwgMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg2OCwKKzB4MDAsIDB4RUQsIDB4MDUsIDB4QjQsIDB4MDcsIDB4NTAsIDB4OUMsIDB4NTAsIDB4NzksIDB4ODAsIDB4RUQsIDB4MDEsIDB4QjQsCisweDg3LCAweDU4LCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDA4LCAweEE0LCAweDA0LCAweDUwLCAweDFFLCAweDQwLAorMHg3OCwgMHgwMCwgMHhDRCwgMHgwMSwgMHgwNCwgMHgwNiwgMHgxMCwgMHgxRiwgMHg0MCwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4NzcsIDB4MjAsIDB4RDEsIDB4MDQsIDB4MDQsIDB4MDcsIDB4RDAsCisweDNDLCAweDQxLCAweDMzLCAweDAwLCAweEMxLCAweDQwLCAweDE0LCAweEE3LCAweEQ4LCAweDBDLCAweDQwLCAweEIwLCAweDAwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwQiwgMHgxMCwgMHgwQywgMHg0MCwgMHg3MSwgMHg4MywgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDksIDB4MEQsIDB4NTAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4NEIsIDB4RDEsIDB4MEMsIDB4NDgsIDB4MTEsCisweDE0LCAweENELCAweDAwLCAweDE2LCAweDI3LCAweDEwLCAweDBDLCAweDQwLCAweDRBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg1RCwgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwRCwgMHhGMCwgMHgwNywKKzB4QzAsIDB4MTcsIDB4MDAsIDB4NUIsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTgsIDB4MDIsIDB4NUYsCisweDAwLCAweEZDLCAweDAxLCAweDcwLCAweDA1LCAweEMwLCAweDVELCAweDE4LCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLAorMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHg4MCwgMHhDNSwgMHgwMSwgMHhGOCwgMHgwNSwgMHhDMCwgMHg1QywgMHgwMCwKKzB4NUYsIDB4MDAsIDB4Q0MsIDB4MDEsIDB4MzAsIDB4NjcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MUYsIDB4ODIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDAxLCAweDAwLCAweDFGLCAweDAyLCAweDVDLCAweDgwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLAorMHgwMCwgMHg3QywgMHg4QywgMHhGMCwgMHgwMSwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4NjcsIDB4MDIsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MEUsIDB4RjAsIDB4MzksIDB4QzAsIDB4MjcsCisweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDkzLCAweDAwLCAweDdDLAorMHg0MiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHhCMiwgMHgwOSwgMHhDMiwKKzB4RTUsIDB4MDAsIDB4OTcsIDB4MDUsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDgsIDB4RDAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsCisweDVFLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgyMCwgMHhFNiwgMHg2MCwgMHg5MSwgMHgwMywgMHg0NCwgMHgwNiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDYsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAzLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQ4LCAweEU0LAorMHgwNCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgyNiwgMHhEMSwgMHg0OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4NEUsIDB4RDIsIDB4MTgsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDI0LCAweDA0LCAweEQxLCAweDA4LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDk1LAorMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwNCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MzQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NjAsIDB4MjUsIDB4MDAsCisweDk1LCAweDQwLCAweDQ2LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAxLCAweDlELCAweDAwLCAweDU0LCAweDIyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjAsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MTMsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjMsIDB4MTEsIDB4ODEsIDB4MEMsCisweDE0LCAweDIyLCAweEQwLCAweDQ4LCAweDQwLCAweDIzLCAweDAwLCAweDg1LCAweDA0LCAweDM0LCAweDIyLCAweEQwLCAweDQ4LAorMHg2MCwgMHgyMywgMHgwMiwgMHg4RCwgMHgwMCwgMHgzNCwgMHgyMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwOCwgMHg5MSwKKzB4MDAsIDB4MDQsIDB4MDYsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsCisweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDgyLAorMHgwMiwgMHg1MywgMHgwQSwgMHg0RCwgMHgzMCwgMHhGMCwgMHg0NSwgMHhDMSwgMHg4NywgMHgwMiwgMHgxNywgMHgwMiwgMHg3QywKKzB4MDgsIDB4RjAsIDB4QTAsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MTMsIDB4MEEsIDB4M0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsCisweDg3LCAweDAwLCAweDE3LCAweDE0LCAweDdDLCAweDA4LCAweEIwLCAweDYwLCAweEMxLCAweDA1LCAweDg1LCAweDU2LCAweDE0LAorMHg0NCwgMHgwMCwgMHhGMCwgMHg0MSwgMHhEMSwgMHgwNCwgMHgwMCwgMHgxRiwgMHgxNCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4RDAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTAsIDB4MkYsIDB4MjIsCisweEJGLCAweDAwLCAweEZDLCAweDMzLCAweEYwLCAweDRCLCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDBDLCAweERDLCAweDEyLAorMHhGMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgzMCwgMHg5RiwgMHgwOCwgMHhGQywgMHgxMiwgMHhGMCwgMHg4OSwgMHhDOCwgMHgyRiwKKzB4MDEsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NDksIDB4QzIsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4RkMsCisweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDJGLCAweDA4LCAweDlGLCAweDAwLCAweEZDLCAweDIyLCAweEYwLCAweDBBLCAweEMwLAorMHg2NSwgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMSwgMHhCRiwKKzB4MDAsIDB4Q0MsIDB4MzIsIDB4RTAsIDB4MEIsIDB4QzgsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDgsIDB4NkMsIDB4MDIsIDB4RTAsCisweDQ5LCAweEMxLCAweDJFLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDBCLCAweEQ4LCAweDI0LCAweDIwLAorMHhCRiwgMHgzNCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhFMCwgMHgyRCwgMHgwMCwgMHhCMywgMHgwMCwgMHhFQywgMHgwMiwKKzB4RjAsIDB4NEIsIDB4QzEsIDB4MkMsIDB4MjAsIDB4OUYsIDB4NTUsIDB4RjgsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4NjAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDA1LCAweDFELCAweDA0LAorMHg0NCwgMHhCMCwgMHhEMCwgMHgyNSwgMHg0MSwgMHgwNCwgMHgwNCwgMHgxRCwgMHgwOCwgMHg0NCwgMHg1MCwgMHhEMiwgMHg0MSwKKzB4NDQsIDB4MDQsIDB4MDAsIDB4MTcsIDB4MTIsIDB4NzQsIDB4NDAsIDB4MTQsIDB4ODEsIDB4NjgsIDB4MDQsIDB4MDUsIDB4MUQsCisweDAwLCAweDc0LCAweDEwLCAweDcxLCAweDIxLCAweDQxLCAweDA0LCAweDAwLCAweDE1LCAweDA4LCAweDQ0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNSwgMHgyMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHg3MiwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDMsIDB4OEQsIDB4MTUsIDB4MDQsCisweDkyLCAweEQwLCAweEM4LCAweDQwLCAweDIwLCAweDAyLCAweDhELCAweDAwLCAweDI0LCAweDEyLCAweEQwLCAweDQ4LCAweDQxLAorMHgyMiwgMHgyMCwgMHg4RCwgMHgwQywgMHgzNiwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgyMSwgMHg4RCwgMHgwMCwKKzB4MzAsIDB4MTIsIDB4RDEsIDB4QzgsIDB4NDAsIDB4MzEsIDB4MDIsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MDgsCisweDQwLCAweDIyLCAweDAwLCAweDhELCAweDgwLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDQwLCAweDg4LCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHg2NSwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsCisweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDQyLCAweDEwLCAweDA5LCAweDQwLCAweDI2LCAweDA2LCAweDlELCAweDAwLCAweDc0LAorMHgwMiwgMHg1MCwgMHgwOCwgMHg0OCwgMHgzNCwgMHgwOCwgMHg5NSwgMHgyMCwgMHg0NiwgMHg0MywgMHhEMCwgMHgwOSwgMHg0MCwKKzB4NjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzYsIDB4MEUsIDB4RDAsIDB4NDksIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDg4LCAweEU3LCAweDA0LCAweDlGLCAweDAxLCAweDRELCAweDAyLCAweEYwLAorMHgzOSwgMHhFMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwNCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4MzAsIDB4MDksIDB4NDAsIDB4NjYsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDVELCAweDhBLCAweEYwLCAweDA5LCAweEMwLCAweEU2LAorMHgwNCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwRSwgMHhGMCwgMHgwOCwgMHg0MCwgMHgxNCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4NjYsIDB4RjMsIDB4ODgsCisweEQxLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEM4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzEsIDB4MjUsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMxLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4NSwgMHgwMiwgMHgxRiwgMHgwMCwgMHg0RCwgMHgwOCwgMHhGOCwgMHgyMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDAsIDB4QzQsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDA4LCAweEYwLCAweDAwLCAweEMwLCAweDg0LCAweDAwLCAweDFGLCAweDAxLCAweDRDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwMiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4NDAsIDB4MzIsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweEEwLCAweDFDLCAweDAyLCAweDdELCAweDAyLCAweEM0LCAweDAxLCAweEQwLCAweDM3LCAweEMwLCAweDE1LAorMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0OCwgMHg1RiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4MTUsIDB4MDEsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDUsIDB4NDUsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDFELCAweDAwLCAweDdGLCAweDIwLCAweEY0LCAweDRELCAweEQwLCAweDA3LCAweDQwLCAweDU0LCAweDIwLCAweDVELCAweDAwLAorMHhGNCwgMHgwMSwgMHgzNCwgMHgwNywgMHhEMCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4QTAsIDB4NzIsIDB4ODAsIDB4OEQsIDB4MTAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4QkMsIDB4NDAsIDB4MzEsIDB4MDAsCisweERELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDA2LCAweENELCAweDAwLCAweDc0LCAweDAzLAorMHhEMCwgMHgxOCwgMHg2MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHhCMCwKKzB4MDEsIDB4QzEsIDB4MTIsIDB4MzQsIDB4MEIsIDB4RDAsIDB4MzQsIDB4NTAsIDB4NzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHg4MCwgMHgyOCwgMHgwMSwgMHg3RCwgMHgwOCwgMHg4NCwgMHg0MywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFRCwKKzB4MEMsIDB4QjQsIDB4MTMsIDB4REEsIDB4Q0UsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MTMsIDB4RDEsCisweDBCLCAweDQwLCAweDM4LCAweDIxLCAweDBELCAweDAxLCAweDg2LCAweDIzLCAweEQyLCAweDRDLCAweDQwLCAweDIxLCAweDAwLAorMHg2NSwgMHgxMCwgMHhCMCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MSwgMHgzOCwgMHgwNCwgMHhFRCwgMHgwMCwgMHhGNCwgMHg0NywKKzB4MTAsIDB4MEYsIDB4NDAsIDB4MTYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsCisweEY4LCAweDAwLCAweEFGLCAweDA1LCAweDhDLCAweDA3LCAweEQwLCAweDE2LCAweEMwLCAweDc5LCAweDAwLCAweEVGLCAweDA1LAorMHhCQywgMHgwRiwgMHhGMCwgMHgxRSwgMHhDNCwgMHg3QiwgMHgyMCwgMHhFRCwgMHgxMSwgMHhCNCwgMHg4NywgMHhEMCwgMHgwRiwKKzB4QzAsIDB4NzgsIDB4MDEsIDB4MkYsIDB4MjEsIDB4OEMsIDB4NTcsIDB4RjAsIDB4QkUsIDB4QzQsIDB4NjgsIDB4MDAsIDB4RTEsCisweDAxLCAweEIwLCAweDA1LCAweEYwLCAweDFDLCAweEM0LCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEY4LCAweDA1LCAweEIwLAorMHgxRSwgMHhEMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwKKzB4MDAsIDB4OEYsIDB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4QjUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYxLCAweDRELCAweEMxLCAweDM3LCAweDAwLCAweEQ2LCAweDQ0LCAweDdDLCAweEFCLCAweEYwLCAweDBELCAweENDLAorMHhCNywgMHgwNiwgMHgxRiwgMHgwMCwgMHg2QywgMHgwMywgMHg2MCwgMHg2RCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg1RiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDQxLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDRGLCAweDAwLAorMHgyMywgMHg0MSwgMHhERCwgMHgyNywgMHhGOCwgMHg4RiwgMHhDMCwgMHhGRiwgMHgwNCwgMHhGQiwgMHgwMSwgMHhEQywgMHgwNywKKzB4RjAsIDB4OUYsIDB4QzAsIDB4NkMsIDB4MDIsIDB4RkYsIDB4MDEsIDB4RUMsIDB4MkYsIDB4RjIsIDB4OUIsIDB4QzIsIDB4N0YsCisweDQyLCAweDMzLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDQ4LCAweDAwLCAweEIzLCAweDg5LCAweEFFLAorMHgyNSwgMHgzMCwgMHgxRiwgMHhDMiwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRSwgMHhDMCwKKzB4MDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MDksIDB4MDAsIDB4NjEsCisweDA4LCAweDg1LCAweDAxLCAweEQ4LCAweDBFLCAweDQxLCAweDNGLCAweDAwLCAweEYxLCAweDAwLCAweDg0LCAweDAzLCAweEQyLAorMHgwRiwgMHg1NCwgMHg4OCwgMHgyMCwgMHhFNywgMHgwMCwgMHg4NSwgMHgyMywgMHhEMCwgMHhDQSwgMHg0MCwgMHgzQiwgMHgwMiwKKzB4MjEsIDB4MDgsIDB4QUMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4NDgsIDB4MjgsIDB4MDAsIDB4RUIsIDB4MDAsIDB4OEMsIDB4MDEsCisweEIwLCAweDRBLCAweDQwLCAweDNCLCAweDAyLCAweEVELCAweDAwLCAweDM0LCAweDFCLCAweEQwLCAweDBFLCAweDUwLCAweDU0LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwNCwgMHgyMSwgMHgwMiwKKzB4OTQsIDB4QzMsIDB4RDAsIDB4ODYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTksIDB4MDAsIDB4OTQsIDB4MjMsIDB4RDAsIDB4MEUsCisweDQyLCAweDM4LCAweDkwLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweEQyLCAweDBBLCAweDAwLCAweDNGLCAweDA0LCAweDAxLAorMHgwMCwgMHg4NCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwOSwgMHgwMCwgMHhBMSwgMHg0MCwgMHg5NywgMHgwMSwgMHgxMiwKKzB4MEUsIDB4NDgsIDB4MkIsIDB4MTAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweEE3LCAweDAxLCAweDAxLCAweDgxLCAweDQ0LAorMHgwRSwgMHhEMCwgMHgzMSwgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEOCwgMHgwQywgMHg0MCwKKzB4QjAsIDB4MDgsIDB4QzUsIDB4MDAsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MDgsIDB4NjAsIDB4MzMsIDB4MDAsIDB4MDEsIDB4MDAsCisweDI0LCAweDAzLCAweDU4LCAweDBDLCAweDUwLCAweDIxLCAweDAwLCAweEM5LCAweDAwLCAweDA0LCAweDQwLCAweDEyLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMSwgMHhDRCwgMHgwMCwgMHg3NCwgMHg5RSwgMHhEMSwgMHg4QywgMHg0MCwgMHgxMCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4RkQsIDB4NDAsIDB4MzMsIDB4MDEsIDB4NUMsIDB4MDQsCisweEQwLCAweDE5LCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEQ0LCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDc0LAorMHgwMCwgMHhGRSwgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHhCQiwgMHg4MCwgMHgxMywgMHgwMCwgMHhDQywKKzB4MDMsIDB4RjAsIDB4MEYsIDB4NDAsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDUsIDB4MTAsIDB4MDUsIDB4QzgsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDRCLCAweEYwLCAweDBELCAweEMwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwOCwgMHg1RiwgMHgwQSwgMHg3QywgMHg0MCwgMHhGMCwKKzB4MjksIDB4QzEsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MjMsIDB4RjMsIDB4MEQsIDB4QzQsIDB4QzcsIDB4MDAsCisweEM0LCAweDgwLCAweDVDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAxLCAweDFGLCAweDAwLCAweDdDLCAweDAzLAorMHg3MCwgMHgwQywgMHhDMCwgMHgyNiwgMHgwMCwgMHg1RiwgMHgwMiwgMHg1MCwgMHgwNSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywKKzB4MDAsIDB4REUsIDB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MkQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAyLCAweDMzLCAweDIwLCAweENDLCAweDAwLCAweDMwLCAweDBCLAorMHhDMCwgMHgzQywgMHgwMCwgMHhGRSwgMHgwMCwgMHhGRSwgMHgwMywgMHhCMiwgMHgwRiwgMHhDMiwgMHg3RiwgMHgwNSwgMHhGRiwKKzB4MDAsIDB4Q0QsIDB4ODMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMyLCAweDBFLCAweDAwLCAweDBGLCAweDAxLCAweENELCAweDAxLCAweDMwLCAweDRGLCAweEMwLCAweDdDLCAweDAxLAorMHhFRiwgMHgwMCwgMHhDQywgMHgwNywgMHgzMCwgMHgxQiwgMHhDMCwgMHgwMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NzYsIDB4MjAsIDB4MDUsIDB4MDQsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MzksIDB4NDEsCisweDM0LCAweDAwLCAweERELCAweDAwLCAweDM0LCAweDAzLCAweDcwLCAweDBELCAweDQwLCAweEE3LCAweDgwLCAweERELCAweDAwLAorMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHgxMSwgMHgwMywgMHg3NCwgMHgwMywgMHg3MiwgMHgwRCwKKzB4NDgsIDB4NDUsIDB4MDAsIDB4MUQsIDB4MDUsIDB4MDQsIDB4MDgsIDB4NTIsIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDAsIDB4REQsCisweDAwLCAweDQ0LCAweDA5LCAweDEwLCAweDlDLCAweDQwLCAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHgxNCwgMHg1MCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxMSwgMHg2MCwgMHgzNiwKKzB4MTAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NEEsIDB4MDcsIDB4ODAsIDB4REQsIDB4MDAsIDB4NDQsCisweDAzLCAweEQwLCAweDA5LCAweDY4LCAweDM3LCAweDAwLCAweDExLCAweDAzLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLAorMHg0NCwgMHgwMCwgMHg5RCwgMHgwOCwgMHg0NCwgMHgyMCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwKKzB4NTQsIDB4MTMsIDB4NTAsIDB4MDUsIDB4NDEsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIyLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDA1LCAweDA0LCAweDE0LCAweDA4LCAweDUwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhDRCwgMHg4MCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MzQsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NTIsIDB4MEMsIDB4NDAsIDB4MjEsCisweDEwLCAweENELCAweDAwLCAweDQ0LCAweDAwLCAweDUwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDQ1LAorMHgwQiwgMHgxNCwgMHgwRCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QjAsIDB4MzIsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzAsIDB4MDEsIDB4QzIsIDB4M0UsIDB4MTAsIDB4REYsCisweDAwLCAweDc0LCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDE3LCAweDEwLCAweEVELCAweDAwLCAweENDLCAweDAzLCAweEYwLAorMHgwOSwgMHg4OCwgMHgzRiwgMHg0MCwgMHgxMywgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhFMCwgMHgwNCwgMHgyMCwKKzB4MUYsIDB4MDAsIDB4NEUsIDB4MDAsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MEIsCisweDMwLCAweDAxLCAweEMwLCAweDAwLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LAorMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwQiwgMHhDQSwgMHgzRCwgMHgwMCwgMHhGRiwgMHgyMCwKKzB4RkMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsCisweEMwLCAweDM5LCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDQwLCAweDBGLCAweEMwLCAweDBELCAweDAwLCAweDNGLAorMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgxMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4M0YsCisweDAwLCAweEZCLCAweDFDLCAweEVDLCAweDA1LCAweDMwLCAweDBCLCAweEMwLCAweDVGLCAweDAwLCAweEJGLCAweDAwLCAweEVDLAorMHgwMywgMHhCMCwgMHgwRiwgMHhDMSwgMHgzRiwgMHgwMCwgMHgzQiwgMHg4MSwgMHhFQywgMHgzMywgMHg3MCwgMHgwRiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4MkYsIDB4MDEsIDB4RkMsIDB4ODQsIDB4RjAsIDB4NEYsIDB4ODAsIDB4N0MsIDB4MDAsIDB4N0IsIDB4MDEsCisweEJDLCAweDA0LCAweEYwLCAweDEzLCAweEMyLCAweDRFLCAweDAwLCAweEZGLCAweDAxLCAweEZFLCAweDAwLCAweEYwLCAweDAzLAorMHg0NCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHhGRiwgMHgwMiwKKzB4RjEsIDB4MDIsIDB4NDQsIDB4MDYsIDB4MTQsIDB4MTksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OEQsIDB4NzAsIDB4NzQsIDB4QUYsCisweDEwLCAweDFGLCAweDQwLCAweEZGLCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDNCLCAweDEwLCAweEJGLCAweDQwLCAweDc3LAorMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHhCRiwgMHg0MCwgMHgzOCwgMHgwNSwgMHg5MSwgMHgwMSwgMHg3NCwKKzB4MDQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzYsIDB4ODYsIDB4RDIsIDB4MTksIDB4NDAsCisweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDIwLCAweEM4LAorMHgwNCwgMHg2NCwgMHgwMSwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNiwgMHgwMywgMHg5MCwKKzB4MEMsIDB4NDIsIDB4QjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4NTAsIDB4MEMsIDB4NjAsIDB4MzMsIDB4MjAsCisweENELCAweDgwLCAweDM0LCAweDAyLCAweDUyLCAweDBDLCAweDYwLCAweDMwLCAweDQwLCAweDg1LCAweDQwLCAweDE2LCAweDAwLAorMHhEMCwgMHgwMCwgMHg0MiwgMHgwMywgMHgwMCwgMHhDNSwgMHg4MCwgMHgzNCwgMHgwMCwgMHhEMiwgMHgwMCwgMHg0MiwgMHg0NywKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsCisweDQ0LCAweDAyLCAweDUwLCAweDE5LCAweDQwLCAweDI2LCAweDAwLCAweDlELCAweDIzLCAweDc0LCAweDAzLCAweDUwLCAweDBELAorMHg0MCwgMHgzNywgMHgwMCwgMHg5QywgMHgwMSwgMHgzNCwgMHgwMywgMHgxMCwgMHgwRCwgMHgwMCwgMHgzNywgMHgwMCwgMHhERCwKKzB4MDYsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MTAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsCisweDExLCAweDQwLCAweDY3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDA2LCAweEMwLCAweDE5LCAweDQwLCAweDBGLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhEQiwgMHg4MCwgMHgyQywKKzB4MTIsIDB4NzEsIDB4MTEsIDB4QzEsIDB4MTcsIDB4MDEsIDB4MUYsIDB4MDMsIDB4NEMsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweDEzLCAweDAzLCAweDZDLCAweDAzLCAweDcyLCAweDBELCAweEM4LCAweDA3LCAweDAxLCAweDFFLCAweDAwLAorMHg3QywgMHgwMSwgMHhGMCwgMHgwQywgMHhDMCwgMHgzNCwgMHgwMCwgMHg1NSwgMHgwNSwgMHg3QywgMHgwNCwgMHhEMCwgMHgzMSwKKzB4QzAsIDB4NDcsIDB4MDEsIDB4REYsIDB4QTAsIDB4NzQsIDB4MDQsIDB4RjAsIDB4MTksIDB4QzEsIDB4MDMsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDM5LCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAyLAorMHhCMCwgMHgwMywgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHg4MCwgMHhCQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDEsIDB4RkYsIDB4NDEsIDB4RkMsCisweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDNGLCAweDAwLCAweEIzLCAweDA5LCAweEY4LCAweDAyLCAweEYwLCAweDAzLCAweEMwLAorMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGOCwgMHg0MCwgMHhGMCwgMHgwOSwgMHhDMSwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDI5LCAweEMwLCAweDM3LCAweDAwLCAweDFGLCAweDIyLCAweDZDLCAweDAzLCAweDMwLCAweDhELCAweEMwLCAweDM3LCAweDAwLAorMHgxMywgMHg0NiwgMHg3QywgMHgwMywgMHhCMiwgMHgwRCwgMHhDNCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMiwgMHg0QywgMHgxNywKKzB4QjAsIDB4OEQsIDB4QzIsIDB4MzcsIDB4MTAsIDB4OUYsIDB4ODAsIDB4N0UsIDB4MDgsIDB4QjQsIDB4ODEsIDB4QzgsIDB4MjcsCisweDExLCAweERGLCAweDAwLCAweDVFLCAweDAwLCAweEYwLCAweDI5LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzQywgMHgwMCwgMHhGMSwgMHgwMCwgMHg0NCwgMHgxMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MjIsIDB4OUQsIDB4QTAsIDB4QzQsIDB4NEIsIDB4NTAsIDB4MUYsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MUEsCisweDAzLCAweEY0LCAweDAzLCAweDEwLCAweDBGLCAweDQwLCAweDc0LCAweDAxLCAweERELCAweDAwLCAweDQ0LCAweDBCLCAweDEwLAorMHgyRiwgMHg0MiwgMHgzNywgMHgwMCwgMHg5MSwgMHgwQiwgMHg3NCwgMHgwMiwgMHgyMSwgMHgwMSwgMHg0MCwgMHhBNywgMHgwMSwKKzB4REQsIDB4MDAsIDB4NDYsIDB4MUEsIDB4OTAsIDB4MjksIDB4QzAsIDB4NEUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDEzLCAweEQwLCAweDAwLCAweDQwLAorMHgzMiwgMHgwMiwgMHgwRCwgMHgwMCwgMHgyNCwgMHgxRiwgMHgxMCwgMHgwQywgMHg0OCwgMHgzMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDEsIDB4MEQsIDB4QTAsIDB4MjYsIDB4ODgsIDB4MTAsIDB4MkMsCisweDQ4LCAweDMzLCAweDAwLCAweEM0LCAweDA4LCAweDM0LCAweDAwLCAweDEwLCAweDUwLCAweDQ4LCAweDQyLCAweDIwLCAweEM5LAorMHg4MCwgMHgyNCwgMHgwMiwgMHhEMiwgMHgyMCwgMHg0MCwgMHgxRSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4NzAsIDB4MDAsIDB4QzEsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NkIsCisweDAwLCAweDZELCAweDAxLCAweDg0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAyLCAweEFELCAweDI5LCAweEI0LAorMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg0QiwgMHgwMCwgMHgyRCwgMHg0MSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg2MCwKKzB4N0IsIDB4MjIsIDB4RTEsIDB4NDEsIDB4RjQsIDB4MDQsIDB4OTAsIDB4OTIsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsCisweDg0LCAweDA2LCAweDkwLCAweDEyLCAweDQwLCAweDFBLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwOCwgMHgxQywgMHgwMywgMHhEMCwgMHgwNCwgMHhDMCwgMHgyMywgMHgwMCwKKzB4Q0YsIDB4MDAsIDB4MkUsIDB4MDMsIDB4MzAsIDB4MEMsIDB4RTgsIDB4MzMsIDB4MDIsIDB4ODcsIDB4MTIsIDB4M0MsIDB4MDMsCisweEIwLCAweDBDLCAweEMxLCAweDAzLCAweDIwLCAweDBELCAweDAxLCAweDJELCAweDE2LCAweDMwLCAweDhDLCAweEMwLCAweDMzLAorMHgwMCwgMHg4NywgMHgwOCwgMHgzNCwgMHgwNiwgMHgzMCwgMHg1MCwgMHhDMiwgMHgxMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywKKzB4MDMsIDB4RjAsIDB4ODQsIDB4QzAsIDB4NEEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEI4LCAweDNELCAweDAwLCAweEZDLCAweDIyLCAweERDLCAweDAyLCAweEYwLCAweDBGLCAweDgwLCAweDJGLCAweDAyLCAweEZGLAorMHgwMCwgMHg5QywgMHg2MywgMHhGMCwgMHhBRiwgMHhDMCwgMHgzMywgMHg0QSwgMHg5MywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEUsIDB4QzEsIDB4MEMsIDB4OTIsIDB4MUYsIDB4ODAsIDB4MEMsIDB4MjMsIDB4NzQsIDB4MEYsIDB4QzAsIDB4NzcsIDB4MDAsCisweEI3LCAweDA4LCAweDdDLCAweDAyLCAweDcwLCAweDg3LCAweEUwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLCAweEZELCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMiwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwKKzB4QjcsIDB4MDMsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4N0YsIDB4MDEsCisweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDg2LCAweDEzLCAweDAxLCAweDVDLCAweDAzLCAweDcxLCAweDVELAorMHhDMCwgMHg0MCwgMHg5MCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMSwgMHgzOCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhEMywKKzB4ODAsIDB4N0MsIDB4MDIsIDB4RDAsIDB4MTEsIDB4QzAsIDB4MjQsIDB4ODAsIDB4Q0YsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjEsCisweDAxLCAweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LAorMHgwMywgMHhFRCwgMHgwMiwgMHhCNCwgMHgwMiwgMHgxMCwgMHgwNiwgMHg0MCwgMHgyQiwgMHgwMCwgMHhGRCwgMHgwMCwgMHg4NCwKKzB4OTMsIDB4RDAsIDB4MkUsIDB4NDIsIDB4MzMsIDB4MjEsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MTMsIDB4RDAsIDB4Q0UsIDB4NjgsCisweDM5LCAweDMwLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweENFLCAweDQwLCAweDNGLCAweDE5LCAweEUxLCAweDIwLAorMHhCNCwgMHgwMiwgMHhEMiwgMHgwMiwgMHg0NCwgMHgzOCwgMHgxMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwMiwKKzB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsCisweEVELCAweDAxLCAweDk0LCAweDA3LCAweDEwLCAweDFFLCAweDQxLCAweDdCLCAweDA4LCAweDZELCAweDAwLCAweEI0LCAweDA3LAorMHhEMCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgwMSwgMHhCMSwgMHgyMSwgMHhCNCwgMHgyNywgMHg1MCwgMHgxQywgMHg1MCwgMHgzQSwKKzB4MDAsIDB4RTEsIDB4MDEsIDB4OTQsIDB4MDcsIDB4OTEsIDB4OUUsIDB4NDQsIDB4M0IsIDB4MDMsIDB4QTEsIDB4MDEsIDB4QjQsCisweDQ2LCAweEQ4LCAweDEzLCAweDQ0LCAweDc4LCAweDAwLCAweEU1LCAweDgxLCAweDg0LCAweEM3LCAweEQwLCAweDFBLCAweDQwLAorMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwOCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MkUsIDB4MTUsIDB4MkMsIDB4NDEsIDB4MjMsIDB4MjAsIDB4Q0QsIDB4MTMsIDB4MDQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDExLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQ0LCAweDM3LCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHg4NywgMHg5MCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHg0NywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4ODcsIDB4RDAsIDB4RUMsIDB4NDAsIDB4NEIsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLAorMHhCQywgMHgwRCwgMHgzMCwgMHgwNywgMHhDMCwgMHg1RiwgMHgwMSwgMHg3RiwgMHg0MCwgMHg3QywgMHgwMSwgMHhEMCwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MTAsIDB4NzMsIDB4MDMsIDB4N0MsIDB4MDEsIDB4NzEsIDB4MDUsIDB4QzAsIDB4OUUsIDB4QzAsIDB4NzMsCisweDA5LCAweDlDLCAweDA1LCAweDkxLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDYxLCAweDAwLCAweEY0LCAweDAxLCAweEYwLAorMHgyNywgMHg0MCwgMHgxQywgMHg4MCwgMHg0RiwgMHgwMCwgMHhDNCwgMHg4RCwgMHhGMCwgMHgzNywgMHg0MCwgMHg1RiwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDQ4LCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDIwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEUwLAorMHgwNywgMHg0MCwgMHgxRiwgMHgwOCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NCwgMHgyNiwgMHgxRiwgMHg4QSwKKzB4N0MsIDB4MjAsIDB4NzAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDgsIDB4RjIsIDB4MDEsCisweEMwLCAweDg3LCAweDM5LCAweDFGLCAweDAwLCAweDdELCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwNiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4ODMsIDB4MDAsIDB4MEMsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzgsIDB4MjcsCisweDAyLCAweDlCLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDIwLCAweDkxLCAweDAwLCAweDdDLAorMHgyMiwgMHhCNCwgMHg5OCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5MywgMHg0MCwgMHg0QywgMHgyNiwgMHgzMCwgMHgwOSwgMHhDMSwKKzB4NjcsIDB4MDIsIDB4OUIsIDB4MDAsIDB4MEMsIDB4MDIsIDB4MzAsIDB4MzksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDE0LAorMHgwOSwgMHhDMCwgMHgyMSwgMHgwMiwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyMywgMHgwMCwKKzB4OTAsIDB4MDEsIDB4NzQsIDB4MDIsIDB4RDAsIDB4OTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDQsIDB4N0MsIDB4MEUsCisweDEwLCAweDA5LCAweDQwLCAweDJDLCAweDAwLCAweDlCLCAweDEyLCAweDJDLCAweDBFLCAweDE0LCAweDk5LCAweDQwLCAweEUzLAorMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwQSwgMHg1MCwgMHgzOSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4ODAsIDB4OEQsIDB4MDAsIDB4NTQsIDB4MjIsIDB4MTAsIDB4MDksCisweDYwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LCAweDQ0LCAweDI3LCAweDAwLCAweDk5LAorMHgwMCwgMHg3MCwgMHgwMiwgMHhEOCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5NSwgMHgyMCwgMHg3NiwgMHgwQSwgMHgxOCwKKzB4MDksIDB4NDEsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NDAsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDQsCisweDkxLCAweDAxLCAweDQ0LCAweDQ3LCAweDExLCAweDI5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhBMCwgMHgwMSwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwKKzB4QTUsIDB4QTAsIDB4ODUsIDB4MTQsIDB4MDQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4QzksIDB4MDAsCisweDM0LCAweDIyLCAweEQyLCAweDA4LCAweDQwLCAweDI3LCAweDAwLCAweDg1LCAweDAwLCAweDc0LCAweDAyLCAweDFBLCAweDA4LAorMHg0MCwgMHgyMCwgMHgwMiwgMHg5OSwgMHgyMCwgMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwKKzB4MDEsIDB4MDQsIDB4MTIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFELCAweDhBLCAweDU0LCAweDAxLCAweDMxLCAweDAxLCAweEMxLCAweDk3LAorMHgwMCwgMHgxMywgMHgwQSwgMHg0QywgMHg1MCwgMHhCMCwgMHg0MSwgMHg0MSwgMHgwNywgMHgwNSwgMHgxQiwgMHgwMCwgMHg3QywKKzB4NTgsIDB4RDAsIDB4NDEsIDB4NDEsIDB4MTcsIDB4MDAsIDB4MTcsIDB4MjAsIDB4N0UsIDB4MDAsIDB4QjAsIDB4NDEsIDB4QzEsCisweEM1LCAweDAwLCAweDEzLCAweDAwLCAweDRELCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDBBLAorMHg0QywgMHgwMCwgMHgzMywgMHgwMSwgMHhDMiwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4QjgsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4QkMsIDB4MDIsIDB4RDAsIDB4MEIsIDB4QzgsIDB4MkQsIDB4MDEsCisweEJGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweEE2LCAweDAwLCAweDdDLCAweDEyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCQiwgMHgwMCwgMHg5QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywKKzB4MDksIDB4QkYsIDB4NjAsIDB4REMsIDB4ODIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDgsIDB4OTcsIDB4MDAsIDB4RkQsCisweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDY3LCAweDQ4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNywgMHgwNSwgMHg5RiwgMHgwQywgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyRiwgMHgwMiwgMHg5RiwKKzB4ODQsIDB4RjQsIDB4RDIsIDB4NzAsIDB4NEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4NzAsCisweDRCLCAweEMwLCAweDJDLCAweDAwLCAweEI3LCAweDIwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMyLCAweDY0LCAweDAzLAorMHhBNSwgMHg4MCwgMHhDQywgMHgwMiwgMHg3MSwgMHgwQiwgMHg0MCwgMHgyRCwgMHgwMCwgMHhCQiwgMHgyMCwgMHhDQywgMHgwMiwKKzB4RjAsIDB4MEIsIDB4ODIsIDB4NjQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsCisweDQ3LCAweDA1LCAweDFELCAweDRDLCAweDc0LCAweDAwLCAweEMwLCAweDAxLCAweDQ0LCAweDA3LCAweDIwLCAweDFELCAweEI0LAorMHg3NCwgMHgwMCwgMHg3MCwgMHg4MSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxOSwgMHg4MCwgMHg3NCwgMHhBMCwgMHhEMCwgMHgwMSwKKzB4NDQsIDB4MDYsIDB4MDAsIDB4MTMsIDB4ODAsIDB4NUMsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4ODQsIDB4MTAsIDB4NTcsCisweDAwLCAweDRDLCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDE1LCAweDIwLCAweDE5LCAweDUwLCAweDZDLCAweDAwLCAweEQwLAorMHgwMSwgMHg1MCwgMHg3MCwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywKKzB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MEMsIDB4MzQsCisweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIwLCAweDAyLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDg4LCAweDQ4LAorMHgyNiwgMHg4MCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHhBMCwgMHgyMCwgMHg4NSwgMHgwMCwKKzB4MTcsIDB4ODIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDgsCisweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgxMywgMHhEMCwgMHgwOSwgMHg0MCwgMHhBNywgMHgwMCwgMHg5RCwgMHgxMCwgMHg3NCwgMHgwMiwKKzB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjYsCisweDAwLCAweDkxLCAweDA2LCAweDU2LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDEwLCAweDk1LCAweDA4LCAweDQ0LAorMHgwNiwgMHhEOCwgMHgxOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5OSwgMHgwMCwgMHg2NCwgMHgwNiwgMHhEMCwgMHgxOSwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MkQsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDU5LCAweEMwLCAweEE3LCAweDAyLCAweDlGLCAweDAzLCAweDdDLCAweDAyLCAweDcwLAorMHgwOSwgMHhDNCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg2MCwgMHgwMSwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4NDYsCisweDcwLCAweDU5LCAweENFLCAweEU1LCAweDAyLCAweDlCLCAweDAwLCAweDZDLCAweDRFLCAweEYwLCAweDE5LCAweEMxLCAweDE0LAorMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweDUwLCAweDI3LCAweDI0LCAweDlGLCAweDA5LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDY1LCAweDAyLCAweDlGLAorMHg0MSwgMHg3OCwgMHgwMiwgMHhGMSwgMHgwOCwgMHhEMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMSwgMHg3OCwgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjcsIDB4ODAsIDB4OUUsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjEsIDB4MDgsIDB4QzAsIDB4NTMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDVDLAorMHgwMCwgMHhGOCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHg4MCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDMsIDB4N0MsIDB4MDAsIDB4RDIsIDB4MDAsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MTIsCisweDRDLCAweDQwLCAweEIwLCAweDgxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDE4LCAweEYwLCAweDIxLAorMHhDMCwgMHgwNywgMHgwNCwgMHgxMywgMHgwMCwgMHg0QywgMHgxOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4QzQsIDB4MDEsCisweDcwLCAweDA1LCAweDQwLCAweDlGLCAweDA4LCAweDUxLCAweDAwLCAweEY0LCAweDZELCAweEQwLCAweDE1LCAweDQwLCAweDlGLAorMHgwMCwgMHg3RCwgMHgxMCwgMHg3NCwgMHgwMSwgMHhEMSwgMHgxNSwgMHg0MywgMHg5QywgMHgxMCwgMHg3RCwgMHgwMCwgMHhFQywKKzB4MTEsIDB4NzAsIDB4MzcsIDB4QzgsIDB4MTYsIDB4MDAsIDB4NkQsIDB4MTAsIDB4QzUsIDB4MDEsIDB4RDAsIDB4ODcsIDB4NDAsCisweDVGLCAweDA0LCAweDYxLCAweDE4LCAweEM0LCAweDA5LCAweEIwLCAweDA3LCAweDQwLCAweDUzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1MCwKKzB4MEMsIDB4NDgsIDB4QjMsIDB4MDQsIDB4QzEsIDB4MDAsIDB4MzYsIDB4MEUsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QjMsIDB4MDAsCisweENELCAweDAxLCAweDM0LCAweDAzLCAweEQ4LCAweDFDLCAweDQ0LCAweEIyLCAweDgxLCAweENELCAweDBCLCAweDI0LCAweDAzLAorMHg1MCwgMHgzQywgMHg0MSwgMHgzMSwgMHgwMCwgMHhDRCwgMHgxMSwgMHgwNCwgMHgwRSwgMHhEMCwgMHgyQywgMHg0MCwgMHg3MywKKzB4MDAsIDB4QzEsIDB4NDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4QUMsIDB4NjEsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAxLCAweEVELCAweDA5LCAweDg0LCAweDAxLCAweDUwLCAweDBFLAorMHg0MCwgMHhGQiwgMHg0MCwgMHhFMSwgMHgwMCwgMHhCNiwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwNCwgMHhFRCwKKzB4MjAsIDB4QjQsIDB4OTMsIDB4RDAsIDB4MUUsIDB4NDAsIDB4QUEsIDB4MDgsIDB4RkQsIDB4MDEsIDB4QTQsIDB4MDAsIDB4NTEsCisweDBFLCAweDQwLCAweDNCLCAweDAyLCAweDJELCAweDAwLCAweDg2LCAweDBBLCAweEQwLCAweDBFLCAweDYwLCAweDdCLCAweDA4LAorMHhFMSwgMHgwMCwgMHgwNSwgMHg4NywgMHg5MCwgMHgwRSwgMHg2MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDEsIDB4RkYsIDB4MDUsIDB4OUMsIDB4MDUsIDB4NzAsIDB4MUUsIDB4QzAsCisweDdGLCAweDAwLCAweEUzLCAweDBGLCAweEJDLCAweDA2LCAweEYwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweDJELCAweDAxLAorMHhCNCwgMHgzRiwgMHhGMCwgMHgwQywgMHhDQywgMHg0QSwgMHg4MCwgMHhFRiwgMHgwMSwgMHhBRSwgMHgwNCwgMHg3MCwgMHgxQywKKzB4QzAsIDB4NzksIDB4MDUsIDB4MkQsIDB4MDEsIDB4OUMsIDB4MDcsIDB4RTksIDB4MUUsIDB4QzAsIDB4N0IsIDB4NDAsIDB4RTEsCisweDIxLCAweDhDLCAweDA1LCAweDMwLCAweDE2LCAweEMwLCAweDUzLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgxMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDgzLCAweEYxLCAweDBELCAweEMyLCAweDI1LCAweDAwLCAweENGLCAweDQwLCAweDdDLCAweDAwLCAweDYwLCAweDBELCAweEMwLAorMHhCNiwgMHgyMCwgMHgxRiwgMHgwMCwgMHg1OCwgMHg4MywgMHhGQSwgMHgwOSwgMHhDMCwgMHgxMywgMHgwOCwgMHhDRiwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RjEsIDB4MDUsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEEyLCAweDdGLCAweDE0LCAweEZGLCAweDAxLCAweEZDLCAweDExLCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAyLAorMHhGRiwgMHgwOSwgMHhGQywgMHgwNiwgMHgzMCwgMHg5RiwgMHhDMCwgMHg3RSwgMHgwMiwgMHhGRiwgMHgwOSwgMHhGQywgMHgwNywKKzB4NzAsIDB4MUYsIDB4QzgsIDB4NkYsIDB4MDIsIDB4RUYsIDB4NDEsIDB4REMsIDB4MjQsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0MsCisweDAwLCAweDMzLCAweDA5LCAweEY4LCAweDA3LCAweEYwLCAweDlGLCAweEMwLCAweDdGLCAweDAyLCAweEZCLCAweDQxLCAweENDLAorMHgwNSwgMHgzMCwgMHg5NywgMHhDNCwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4NDEsIDB4RDEsIDB4MEUsIDB4QzAsIDB4MzksIDB4MjMsIDB4RUQsCisweDA4LCAweEI0LCAweDAyLCAweEIwLCAweDhFLCAweDA4LCAweDM4LCAweDAwLCAweEVELCAweDA4LCAweERDLCAweDIzLCAweDMwLAorMHg0RSwgMHg0NCwgMHg2QiwgMHgyQSwgMHhDOSwgMHhDMCwgMHgxMCwgMHgyMCwgMHhEMCwgMHg4MiwgMHg0MCwgMHgzOSwgMHgwMCwKKzB4MkQsIDB4MEMsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MDQsIDB4MDAsIDB4M0IsIDB4MDcsIDB4RTcsIDB4MDgsIDB4QUMsIDB4MjksCisweDMwLCAweEFFLCAweEMwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg3OSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgyMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgyNCwgMHhFRCwgMHg0MCwKKzB4OTYsIDB4MDIsIDB4OTAsIDB4OEUsIDB4NDgsIDB4MjksIDB4MDgsIDB4MkQsIDB4MDAsIDB4OTAsIDB4MDMsIDB4NTAsIDB4MEEsCisweDQ4LCAweDBCLCAweDA3LCAweDY1LCAweDE4LCAweDk0LCAweDQwLCAweEQwLCAweDBFLCAweDQwLCAweDMxLCAweDAwLCAweDJELAorMHg4MCwgMHhCNCwgMHg0MywgMHhEMCwgMHgwRSwgMHg0OCwgMHgyQiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg4NCwgMHgwMSwgMHg5MCwKKzB4ODIsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDBELCAweEQwLCAweDJDLCAweDQwLCAweEUxLCAweDA0LCAweENELCAweDAyLCAweDM0LAorMHgwMiwgMHg4MCwgMHgwQywgMHg1MCwgMHgyMSwgMHgxMCwgMHhDRCwgMHgxMiwgMHgxNCwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwKKzB4NjMsIDB4MTEsIDB4NDksIDB4MDEsIDB4MDQsIDB4MEMsIDB4QzAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4MDAsIDB4MEQsIDB4MDAsCisweDM0LCAweDRCLCAweEQ4LCAweDkwLCAweDQyLCAweDczLCAweDAxLCAweDQ1LCAweDAwLCAweDI0LCAweDJFLCAweDE0LCAweDE4LAorMHg0MCwgMHgxOSwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4M0MsIDB4MEYsIDB4RjAsIDB4MkQsIDB4QzEsIDB4ODMsIDB4MDAsIDB4RkYsIDB4MDUsIDB4NUUsIDB4MDMsCisweEIwLCAweDA4LCAweEMwLCAweDM1LCAweDAwLCAweENGLCAweDgxLCAweERDLCAweDgzLCAweDcwLCAweDA5LCAweEMyLCAweDIzLAorMHgxMCwgMHhENywgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzRCwgMHgwOCwgMHgxNywgMHgxOCwgMHg3NCwKKzB4MDMsIDB4RjAsIDB4MzksIDB4NjgsIDB4MzcsIDB4MTAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4ODIsIDB4QjgsIDB4NTksIDB4QzAsCisweDc3LCAweDIxLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLAorMHg0MCwgMHg3QywgMHgxMSwgMHhGMCwgMHg0RCwgMHhDMiwgMHg4NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMSwKKzB4MEQsIDB4NDAsIDB4QjQsIDB4MDAsIDB4REYsIDB4MDEsIDB4NUMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4ODIsIDB4QTcsIDB4MDAsCisweERDLCAweDQ0LCAweDdDLCAweDAwLCAweEYyLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweDE2LCAweDIwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwOSwgMHhDNSwgMHgzNiwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOSwgMHgwNywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsCisweEZDLCAweDBCLCAweDMwLCAweDBFLCAweEMwLCAweDJDLCAweDAwLCAweEYzLCAweDEwLCAweEZDLCAweDI3LCAweEYwLCAweDA5LAorMHhDMCwgMHgzOCwgMHg0MCwgMHgzMywgMHgwNSwgMHhDQywgMHgwMywgMHhGMCwgMHgwQSwgMHhDMCwgMHgwQywgMHgwMCwgMHhGMywKKzB4QTAsIDB4RTgsIDB4QzAsIDB4MzAsIDB4MTMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0IsIDB4MDEsIDB4Q0MsIDB4MDUsIDB4RjAsCisweDAzLCAweEMyLCAweDNELCAweDAwLCAweEZCLCAweDAxLCAweDdDLCAweDQyLCAweEYwLCAweDAyLCAweDQwLCAweDA0LCAweDI4LAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4MTQsIDB4MEQsIDB4NjAsIDB4NjQsIDB4ODEsIDB4RDUsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MEQsIDB4NDAsCisweDM1LCAweDgxLCAweEQxLCAweDIzLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweDQwLCAweEU1LCAweDAwLCAweEMxLCAweDAwLAorMHgxMCwgMHgyMCwgMHhCMCwgMHg1MSwgMHg0MCwgMHgzNywgMHgwMCwgMHgwNSwgMHg0MywgMHg0NCwgMHgxNSwgMHhEMCwgMHgxMSwKKzB4NDMsIDB4MTMsIDB4MDAsIDB4RDEsIDB4MDAsIDB4N0MsIDB4MEUsIDB4RDEsIDB4MzEsIDB4NTAsIDB4MDQsIDB4MDYsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDMyLCAweDAwLCAweEQ5LCAweDAwLCAweDc0LCAweDAzLAorMHg5MiwgMHgwRCwgMHg1MCwgMHg0NCwgMHgwOCwgMHhEMSwgMHgwMCwgMHg3NCwgMHhDMywgMHhEQSwgMHgwRCwgMHgwMCwgMHgxNCwKKzB4MjAsIDB4MTEsIDB4NDAsIDB4NjQsIDB4MDMsIDB4RDAsIDB4NDksIDB4NDAsIDB4QzQsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NzQsCisweDQwLCAweDkwLCAweDRELCAweDQwLCAweDM3LCAweDAwLCAweDE1LCAweDE0LCAweDY0LCAweDIzLCAweEQxLCAweDE5LCAweDA0LAorMHgzNywgMHgwMCwgMHg5MSwgMHgwNCwgMHg3NCwgMHgwNCwgMHhEOSwgMHgxOSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4OTAsCisweDBDLCAweDQwLCAweDA0LCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDAxLCAweEQwLCAweDBDLCAweDQwLCAweDExLCAweDEwLAorMHgwMSwgMHgwMCwgMHgyNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0NiwgMHgwNSwgMHhFMSwgMHg5MSwgMHgwMiwgMHg1NCwgMHgyMCwKKzB4OTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MDUsIDB4QjMsIDB4RDgsIDB4MDAsIDB4MDAsIDB4MzMsCisweEMwLCAweDgxLCAweDQwLCAweDI0LCAweDAwLCAweEQwLCAweDA4LCAweDYwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgzRSwgMHgwMCwgMHhGQiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4RjEsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTEsCisweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDA0LCAweDA1LCAweDEzLCAweDAyLCAweDZDLCAweDAwLCAweEIwLAorMHgwMSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgxNywgMHgwMCwgMHg2QywgMHgwMywgMHhGMiwgMHhBMSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4NDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MDUsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDBGLCAweEMwLAorMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RDAsIDB4MDMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MDcsIDB4MTAsIDB4M0YsIDB4ODAsIDB4RUMsIDB4OTAsIDB4RjAsIDB4MDMsCisweEMwLCAweDNGLCAweDAwLCAweDNDLCAweDAwLCAweDdDLCAweDFCLCAweEYwLCAweDQzLCAweEMwLCAweDNGLCAweDAwLCAweDdGLAorMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDOCwgMHgxNywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4ODAsIDB4MEYsIDB4MDYsIDB4QUYsIDB4MDAsIDB4RUMsIDB4MDIsIDB4RTAsIDB4MUUsIDB4QzAsIDB4MEYsCisweDA1LCAweEZCLCAweDBDLCAweEZDLCAweDUwLCAweDMwLCAweDQzLCAweEMwLCAweDJDLCAweDAxLCAweDMzLCAweDAwLCAweENDLAorMHgwMywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwNSwgMHgyMywgMHgwMSwgMHhFQywgMHgwMywgMHhCMCwgMHgxMywgMHhDMCwKKzB4M0YsIDB4MDEsIDB4M0IsIDB4MDEsIDB4QzQsIDB4MDYsIDB4QjYsIDB4ODMsIDB4QzAsIDB4MEQsIDB4MDMsIDB4MzcsIDB4MDAsCisweEFDLCAweDI3LCAweDMwLCAweDFFLCAweEMwLCAweDBFLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgxMCwgMHg4NywgMHgwMSwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwRCwgMHg0MCwgMHg4MywgMHgwMCwKKzB4RjEsIDB4MDgsIDB4NzQsIDB4MTAsIDB4MTAsIDB4MDksIDB4NDAsIDB4QjQsIDB4MDcsIDB4NTUsIDB4MTAsIDB4ODQsIDB4MkIsCisweDEwLCAweDQxLCAweEMzLCAweDQ0LCAweDAwLCAweDExLCAweDAxLCAweEM0LCAweDA3LCAweEIwLCAweDE1LCAweEMwLCAweEJELAorMHgxMiwgMHhEMSwgMHgwMSwgMHg0NCwgMHg0MiwgMHgxMCwgMHhFMSwgMHg0MCwgMHg5MCwgMHgwMywgMHgxMSwgMHgyMywgMHg0NCwKKzB4MTIsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweEEwLCAweDAzLCAweDAwLCAweDhELCAweDgwLCAweDE0LCAweDA2LCAweEMwLCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweEM5LAorMHgwNCwgMHgzNiwgMHg0MCwgMHgxMCwgMHg2NCwgMHg0OSwgMHgyMCwgMHgwOSwgMHgwMSwgMHgwOCwgMHgwNCwgMHhDMywgMHgxMCwKKzB4NDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MEIsIDB4OTgsIDB4MDgsIDB4NDIsIDB4MzMsIDB4OTUsCisweDE1LCAweDAwLCAweDY0LCAweDEzLCAweDEwLCAweDQ4LCAweDQ4LCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDc2LCAweDExLAorMHgxMSwgMHgwQywgMHg1MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4NDUsIDB4MDAsIDB4REQsIDB4MjIsIDB4NTQsIDB4MDQsIDB4RDEsIDB4MEQsIDB4NDAsIDB4NDcsIDB4MTAsIDB4RDEsIDB4MDAsCisweDc0LCAweDA5LCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQ1LCAweDEwLCAweDQ0LCAweDAzLCAweDEwLCAweDIxLAorMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMSwgMHg1NCwgMHgwMywgMHg4MCwgMHgwRCwgMHg0MiwgMHgzNSwgMHgwMCwgMHgxNSwKKzB4MTAsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDQsIDB4MjUsIDB4MDQsIDB4RDUsIDB4MTQsIDB4NTQsIDB4MDMsIDB4MTAsCisweDA5LCAweDAwLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDQ3LAorMHgwMCwgMHg5RiwgMHgwOSwgMHg3RCwgMHgwNCwgMHhGMCwgMHg5RCwgMHhDMCwgMHhDNywgMHgyMCwgMHhEQiwgMHg4MCwgMHg3QywKKzB4MDksIDB4MzEsIDB4NTEsIDB4QzAsIDB4NjQsIDB4MDIsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MkQsIDB4QzAsCisweEM3LCAweDQyLCAweDEzLCAweDAxLCAweDdDLCAweDAzLCAweEIwLCAweDg5LCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAyLAorMHgyRCwgMHgwMiwgMHhCMSwgMHhCNSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgwNSwgMHgwMywgMHg3QywgMHg2RiwgMHgyNCwgMHgxQywKKzB4ODAsIDB4OEEsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsCisweEFGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDEwLCAweEZGLCAweDAwLCAweEJDLCAweDAyLAorMHhGMiwgMHg5MSwgMHhDMCwgMHg3QiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHg1NywgMHhDMCwgMHgyRCwKKzB4MDAsIDB4M0UsIDB4MDAsIDB4QUMsIDB4ODMsIDB4RjAsIDB4MEIsIDB4QzgsIDB4M0IsIDB4MDAsIDB4RkIsIDB4NDksIDB4REMsCisweDAyLCAweEQwLCAweDEyLCAweEMwLCAweDFBLCAweDQwLCAweEZCLCAweDAwLCAweEVDLCAweDAzLCAweEY0LCAweDVGLCAweEMwLAorMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgwNSwgMHg4MCwgMHg5RiwKKzB4MDcsIDB4NkMsIDB4MDIsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MDYsIDB4MDAsIDB4RDMsIDB4MjAsIDB4NUUsIDB4MDksIDB4MzgsCisweDAwLCAweEMwLCAweDI0LCAweDAyLCAweDVGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDkzLCAweDAwLAorMHgxRiwgMHgwNiwgMHg0QywgMHg2MywgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgyMCwgMHgxQiwgMHgyMCwgMHg0RSwgMHgwMywKKzB4RjEsIDB4MEQsIDB4QzAsIDB4OTYsIDB4MEEsIDB4MTcsIDB4MDIsIDB4NkMsIDB4NDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjgsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDQ0LCAweDg2LCAweERELCAweEMyLAorMHg0NCwgMHhFOCwgMHgxMiwgMHgxRCwgMHg0MCwgMHgwNCwgMHgwMCwgMHhGMSwgMHgwMCwgMHg2QywgMHgwMywgMHgzMSwgMHgwMSwKKzB4NDAsIDB4RjQsIDB4MDIsIDB4REQsIDB4MDQsIDB4QzQsIDB4MDMsIDB4MTAsIDB4MDUsIDB4QzYsIDB4RTcsIDB4ODEsIDB4MEYsCisweDQwLCAweEQwLCAweDBCLCAweEIxLCAweDFELCAweDQwLCAweDNELCAweDAwLCAweDQxLCAweDAwLCAweDRDLCAweDAyLCAweDcwLAorMHgwOSwgMHg0NCwgMHgzNCwgMHgxMiwgMHhEQiwgMHgxQiwgMHgwOCwgMHg0MywgMHgxMCwgMHg3RCwgMHg0MCwgMHg0RCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MDIsIDB4MzAsIDB4MEQsIDB4MDAsIDB4MDQsCisweDA2LCAweDEwLCAweDU4LCAweDUwLCAweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAyLCAweDkwLCAweDAwLCAweDQwLAorMHgzMCwgMHgwMCwgMHg4RCwgMHgwMSwgMHgwNCwgMHgyNywgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgyMSwgMHgwOSwgMHg0MiwKKzB4MDQsIDB4MEYsIDB4NTAsIDB4RjQsIDB4NDgsIDB4MzAsIDB4MTAsIDB4NDEsIDB4MDAsIDB4MDYsIDB4MDIsIDB4REEsIDB4MDAsCisweDAwLCAweDYyLCAweDQwLCAweENDLCAweDAzLCAweDAxLCAweDA3LCAweDU4LCAweDdDLCAweDQwLCAweDBDLCAweDIwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0QSwgMHgwMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwNywKKzB4MTIsIDB4MUYsIDB4NDQsIDB4NDgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4MjQsIDB4MDQsIDB4MTAsIDB4OUEsIDB4NDAsIDB4NzgsCisweDgwLCAweDRELCAweDAxLCAweDg0LCAweDI3LCAweDEwLCAweDFBLCAweDQyLCAweDU5LCAweDAwLCAweDM1LCAweDAxLCAweDk0LAorMHgwMywgMHhEQywgMHgxNiwgMHg2MCwgMHg3MSwgMHgwMiwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNiwgMHg1MCwgMHg5NCwgMHg0MCwKKzB4NzgsIDB4ODMsIDB4RTksIDB4MDksIDB4QzQsIDB4MjcsIDB4NTAsIDB4MTYsIDB4NDAsIDB4MzUsIDB4MjAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDgyLCAweDAwLCAweDhELCAweDAwLCAweDRDLCAweDIzLCAweDcwLAorMHg4OCwgMHhDMCwgMHg4MCwgMHg0MiwgMHhEMywgMHgwMCwgMHgzNCwgMHgwMiwgMHg5MCwgMHg4NCwgMHhDNCwgMHgzMCwgMHgwMCwKKzB4OEQsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4NDQsIDB4NDAsIDB4MzMsIDB4MDEsIDB4MEQsIDB4MDgsIDB4MEMsIDB4MTMsCisweDUwLCAweDA0LCAweDQwLCAweDMwLCAweDAwLCAweDAzLCAweDA4LCAweDBDLCAweDgzLCAweEYwLCAweEEwLCAweEQwLCAweDAyLAorMHgwMSwgMHgwNywgMHg4OCwgMHgwQywgMHgyMywgMHg3MCwgMHg0QywgMHhDMCwgMHg0OCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MEQsIDB4MDAsIDB4RkYsIDB4MDgsIDB4REUsIDB4MDMsIDB4RjQsIDB4MEYsCisweEMyLCAweDBELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDhGLCAweEMyLCAweDNGLCAweDAwLCAweEZGLAorMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgzRiwgMHgwOCwgMHhCQywgMHgxQiwgMHgzMCwKKzB4OEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QTcsIDB4QTAsIDB4RkQsIDB4MDIsIDB4RjAsIDB4ODcsIDB4QzAsIDB4MkYsIDB4NDEsCisweEVGLCAweDA4LCAweDdDLCAweDIzLCAweEIwLCAweDBELCAweEM0LCAweDBCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgwRiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMSwgMHhFMSwgMHgwOSwgMHhDMCwKKzB4MDcsIDB4MDgsIDB4REYsIDB4MDYsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDI3LCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLCAweDIzLCAweEY4LCAweDExLAorMHhDMCwgMHgzNiwgMHgwMywgMHhEQiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHgxMywKKzB4MjAsIDB4NEQsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDk4LCAweDI5LCAweDAwLCAweDZELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDBCLAorMHgwMCwgMHhGRCwgMHgxMiwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwRiwgMHg0OCwgMHgzOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwNCwKKzB4MzMsIDB4MTQsIDB4MEEsIDB4NDAsIDB4M0IsIDB4NDAsIDB4MjIsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MEEsIDB4NDAsCisweDNDLCAweDAyLCAweEUxLCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDUyLCAweDNELCAweDAwLCAweEM1LCAweDAwLAorMHg4NCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHg0RiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4RjksIDB4MDAsIDB4OEQsIDB4MDEsIDB4OTQsIDB4MEYsIDB4RDAsIDB4MUEsIDB4NDAsIDB4NUIsIDB4MDgsCisweEVELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDNFLCAweDQwLCAweDc4LCAweDQwLCAweEMxLCAweDExLCAweEE1LCAweDA3LAorMHgxOCwgMHgxRSwgMHg0MCwgMHg3MywgMHgwMCwgMHgyMSwgMHgwMSwgMHhCNCwgMHgwNywgMHg1MCwgMHgxNywgMHg0NiwgMHg3OSwKKzB4MDEsIDB4RTksIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDIsIDB4MUMsIDB4NzAsIDB4NTgsIDB4MDAsIDB4MjEsIDB4MDEsIDB4ODYsCisweDQ3LCAweDEwLCAweDFFLCAweDQxLCAweDEzLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyMCwgMHhCMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHhCNywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDQsIDB4MTcsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsCisweDJDLCAweDQwLCAweEIzLCAweDAxLCAweEMxLCAweDA3LCAweDM0LCAweDAzLCAweEQ4LCAweDJDLCAweDQwLCAweDMxLCAweDAwLAorMHhDMSwgMHg0OCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgyQywgMHg2NCwgMHg3MSwgMHg4MCwgMHhDNSwgMHgwQiwgMHgwNCwgMHg5QiwKKzB4MTIsIDB4M0MsIDB4NjAsIDB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsCisweDFGLCAweDAwLCAweDZGLCAweDAwLCAweERELCAweDBELCAweEYwLCAweDA1LCAweEMwLCAweDFGLCAweDAwLCAweDVGLCAweDAwLAorMHhEQywgMHg0OSwgMHhGMCwgMHgwNywgMHhEMCwgMHgxNCwgMHgwMCwgMHg3MywgMHgwMSwgMHg2QywgMHgwMSwgMHgzMCwgMHhENywKKzB4QzAsIDB4OUIsIDB4NDAsIDB4NzMsIDB4MTEsIDB4N0MsIDB4MDEsIDB4RjAsIDB4QjcsIDB4NTQsIDB4MTcsIDB4MDAsIDB4N0IsCisweDAyLCAweDdDLCAweDAxLCAweEYwLCAweDQ3LCAweEMwLCAweDVDLCAweDA5LCAweDczLCAweDgwLCAweDhDLCAweDA1LCAweDM1LAorMHgwNiwgMHhDMCwgMHg1RiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4OTgsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MEYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYwLCAweDQxLCAweEMwLCAweDA3LCAweDA4LCAweDBGLCAweDAyLCAweDVDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHg4MiwgMHg3QywgMHg4MCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwNCwKKzB4N0MsIDB4MDAsIDB4QjgsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MEYsIDB4MTIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsCisweEM1LCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDYxLCAweDA0LAorMHg5MywgMHgwMCwgMHgwRCwgMHgwRSwgMHgzMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHgxQywgMHgwMiwKKzB4QjQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjcsCisweDAyLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYyLCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDOCwgMHgyMywgMHgyMCwgMHg5QiwgMHgwMSwgMHg0RCwgMHgyMiwgMHg3MCwgMHgxOSwgMHhDMiwKKzB4NDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDIsIDB4OTUsCisweDAyLCAweDQ0LCAweDBFLCAweDE0LCAweDA5LCAweDQyLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLAorMHgwOSwgMHg0OCwgMHgyNywgMHgwOCwgMHg5MSwgMHgxMiwgMHg0NCwgMHg0MiwgMHhEMCwgMHgwOSwgMHg0NCwgMHg2NywgMHgxMCwKKzB4OTEsIDB4MDAsIDB4NzQsIDB4NDYsIDB4RDAsIDB4MzksIDB4RTAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDIsCisweDUwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAzLCAweDRDLCAweDAyLCAweDEwLCAweEE5LCAweDQwLCAweDA0LAorMHgwOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMiwKKzB4NDQsIDB4MDIsIDB4OTAsIDB4ODksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDIwLCAweEQ1LAorMHgwMCwgMHg3NCwgMHgxMiwgMHhEOCwgMHgwRCwgMHg0NSwgMHgyMywgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTksIDB4ODgsIDB4NDQsIDB4NDIsIDB4NTAsIDB4MDksIDB4NDIsIDB4NzEsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI4LCAweDIwLCAweDAxLCAweDg1LCAweDA0LCAweDA0LAorMHgxQiwgMHg5MCwgMHgyOCwgMHg0MCwgMHgyMywgMHg0MSwgMHg4MSwgMHgwQywgMHgwNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwKKzB4MjMsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MDYsIDB4MTIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4QzEsIDB4MDAsCisweDM2LCAweDAyLCAweEQwLCAweDA4LCAweDQ0LCAweDIzLCAweDAzLCAweDgxLCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LAorMHg0NCwgMHgyMywgMHgwMiwgMHhDOSwgMHgwMCwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwRCwgMHg2MCwgMHg1MCwgMHhBOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDIsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDgsCisweEIwLCAweDI1LCAweEMwLCAweDg3LCAweDAyLCAweDEzLCAweDAyLCAweDVDLCAweDI4LCAweDMwLCAweEExLCAweEMwLCAweDgzLAorMHg0MiwgMHgxRiwgMHgwQSwgMHg0NCwgMHgyOCwgMHhEMCwgMHgyMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywKKzB4NTAsIDB4RjAsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MjgsIDB4MzAsIDB4RTEsIDB4QzEsCisweDg3LCAweDQ1LCAweDFCLCAweDE0LCAweDBDLCAweDA4LCAweDcwLCAweDAxLCAweEMwLCAweDc1LCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBOCwgMHgyRiwgMHgxMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgwQSwgMHg3MCwKKzB4MEIsIDB4QzIsIDB4MkYsIDB4MDIsIDB4OUYsIDB4MEMsIDB4RkMsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MDIsCisweEIzLCAweDA4LCAweDdDLCAweDIyLCAweEYyLCAweDRGLCAweEMwLCAweDJGLCAweDIyLCAweEJGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwQSwgMHhDMCwgMHgyNSwgMHgwMywgMHhCNiwgMHgwMCwgMHhEOCwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4NDEsIDB4QjcsIDB4MDAsIDB4REMsIDB4MTIsIDB4RjQsIDB4MEYsIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDA1LCAweEJGLCAweDA0LCAweENDLCAweDAyLCAweEYwLCAweDBCLAorMHhDMCwgMHgzMywgMHgwMiwgMHg5MywgMHgwNCwgMHg3QywgMHhEMiwgMHhCMCwgMHhDOSwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywKKzB4MDAsIDB4Q0MsIDB4MjIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjgsIDB4MDUsIDB4QkIsIDB4MDAsIDB4REMsIDB4MDIsIDB4QjAsCisweDBCLCAweEMwLCAweDI3LCAweDAyLCAweEIzLCAweDIwLCAweDVDLCAweDhBLCAweEYyLCAweDQ5LCAweEMyLCAweDJELCAweDQwLAorMHhCRSwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwQSwgMHhEMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MTUsIDB4MDEsIDB4MUQsIDB4MDgsIDB4NDUsIDB4QzgsIDB4RDAsIDB4MDEsIDB4NDksCisweDA3LCAweDAyLCAweDExLCAweDE0LCAweDMwLCAweDEwLCAweDAwLCAweEMxLCAweDQyLCAweDg0LCAweDA0LCAweDAxLCAweDEwLAorMHg0NCwgMHgyMCwgMHgxMSwgMHg0MSwgMHg4MywgMHgwNSwgMHgyMCwgMHg1NywgMHg0MCwgMHg1QywgMHgwOCwgMHgwMSwgMHgwMSwKKzB4NDAsIDB4MDMsIDB4MDIsIDB4MTEsIDB4MDAsIDB4NjQsIDB4MTQsIDB4RDAsIDB4RDEsIDB4NDEsIDB4ODEsIDB4NDQsIDB4NTUsCisweDAwLCAweDA0LCAweDAxLCAweDUwLCAweDAxLCAweDQwLCAweDcwLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgyMCwgMHgzMSwgMHgwNSwgMHg4RCwgMHgwMCwgMHgzNCwgMHhCMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODEsIDB4MkMsIDB4MzQsIDB4NTIsIDB4OTgsIDB4NDgsIDB4NDgsIDB4MjAsIDB4MDMsIDB4ODEsIDB4QzgsIDB4MDQsCisweDAyLCAweDEwLCAweDQ5LCAweDA0LCAweDIwLCAweDEwLCAweDgxLCAweDAwLCAweDE0LCAweDIyLCAweEQxLCAweDA4LCAweDQwLAorMHgyMywgMHgyMCwgMHg4MSwgMHgwMCwgMHgxNiwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHg0QiwgMHg4RCwgMHhDMCwKKzB4NDUsIDB4MDIsIDB4MTIsIDB4MDksIDB4NDAsIDB4NDgsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDAwLCAweDI1LCAweDAxLCAweDlELCAweDAzLCAweDc0LCAweDBBLCAweEQyLCAweDA5LCAweDQwLCAweEEzLCAweDQwLAorMHg5MSwgMHg0MCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg5MSwgMHgwMywgMHgwNCwgMHgwMiwKKzB4MTAsIDB4NDksIDB4NTAsIDB4MjYsIDB4MTIsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDMsIDB4NTAsIDB4QTksIDB4NDAsIDB4MjcsCisweDAwLCAweDkxLCAweDAwLCAweDY0LCAweDEyLCAweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDQwLCAweDk1LCAweDA4LCAweDQ0LAorMHgxMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QTgsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OTMsCisweDYwLCAweDdDLCAweDAyLCAweEIwLCAweDE5LCAweEQwLCAweDI0LCAweDQwLCAweDkzLCAweDAyLCAweDQ0LCAweDAyLCAweDMwLAorMHgwOCwgMHhDMiwgMHgyNCwgMHgwOCwgMHg5MywgMHgwMiwgMHg1QywgMHg4MiwgMHhGMCwgMHgxOSwgMHhDOCwgMHgyNywgMHg0MCwKKzB4OTEsIDB4MTgsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MjksIDB4QzEsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NDQsIDB4MDIsCisweDIwLCAweDI4LCAweEMwLCAweDE0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLAorMHg2NSwgMHgwMCwgMHg4RiwgMHgwMCwgMHg0QywgMHg0RSwgMHhGMCwgMHgwOSwgMHhDMSwgMHhFNywgMHgzMCwgMHg5RiwgMHg0MCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDY1LCAweDAwLCAweDlGLCAweDE5LCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLAorMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHhFNywgMHg0MCwgMHg4QiwgMHgxMCwgMHg3QywgMHg4MiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsCisweDgwLCAweDFGLCAweDA2LCAweDRFLCAweDA4LCAweEYwLCAweDAxLCAweEM0LCAweDA0LCAweDgwLCAweDEzLCAweDAwLCAweDdFLAorMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwNiwgMHgxRiwgMHgxMiwgMHg1QywgMHgyMCwgMHhGOCwgMHgyMSwgMHhDMCwKKzB4MDcsIDB4OTQsIDB4MTMsIDB4MDIsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MEEsCisweDdDLCAweDAwLCAweEUxLCAweDIwLCAweEMwLCAweDgwLCAweDA0LCAweDE3LCAweDIwLCAweDRDLCAweDAwLCAweDMwLCAweDgxLAorMHhDMiwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxQywgMHgwMCwKKzB4N0QsIDB4MDAsIDB4QzQsIDB4MDEsIDB4NzAsIDB4NTcsIDB4NDAsIDB4MTUsIDB4ODAsIDB4NUIsIDB4NDAsIDB4NjQsIDB4MDEsCisweEIyLCAweDA1LCAweEMyLCAweDFGLCAweDIwLCAweDdELCAweDExLCAweEM0LCAweDI1LCAweDc4LCAweDA1LCAweEUwLCAweERCLAorMHgwMCwgMHg3QiwgMHgwNCwgMHhGQywgMHgyRCwgMHg3MCwgMHgzNywgMHg0NCwgMHgxNywgMHgyMCwgMHg1MywgMHg0MCwgMHg1OCwKKzB4MDEsIDB4NzAsIDB4MDUsIDB4RDAsIDB4MUMsIDB4MDAsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MDUsIDB4MTQsIDB4MTcsIDB4NDAsCisweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELAorMHgyMCwgMHgwNiwgMHgwMywgMHg1MCwgMHgzQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwKKzB4MEMsIDB4NjAsIDB4RjMsIDB4MDgsIDB4REQsIDB4MDIsIDB4MTQsIDB4MEYsIDB4RDEsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MDIsCisweEMxLCAweDAzLCAweDM0LCAweDBGLCAweDQxLCAweDRDLCAweDYwLCAweDM3LCAweDgwLCAweDgxLCAweDAxLCAweDM0LCAweDAzLAorMHg5MCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDNSwgMHgwMywgMHg0NCwgMHgxRiwgMHg1MCwgMHg0QywgMHg0MCwgMHg1MCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODgsIDB4MjgsIDB4MDAsIDB4QUQsIDB4MDAsCisweDg2LCAweDQxLCAweDU4LCAweDFFLCAweDYwLCAweDNELCAweDEwLCAweEU5LCAweDQwLCAweEI0LCAweDMzLCAweDEwLCAweDRFLAorMHg0MCwgMHgzOSwgMHgwOCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHg1MCwgMHg0RSwgMHg0MCwgMHgxOSwgMHgwOCwgMHhFOSwKKzB4MDAsIDB4OTQsIDB4MDksIDB4NTAsIDB4MjYsIDB4NDAsIDB4M0IsIDB4MDMsIDB4QTEsIDB4NDAsIDB4QjYsIDB4MTMsIDB4NTAsCisweDhFLCAweDQwLCAweDA4LCAweDA0LCAweEMxLCAweDAyLCAweDg0LCAweDQwLCAweDUwLCAweDBFLCAweDQwLCAweDA1LCAweDIwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg2OCwgMHgwMCwgMHhDRCwgMHgwMSwgMHg4NSwKKzB4MDcsIDB4NzAsIDB4MTcsIDB4QzAsIDB4NzgsIDB4MDEsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4NUUsIDB4NDAsCisweDdCLCAweDAwLCAweEVELCAweDAxLCAweDlDLCAweDg1LCAweEQwLCAweDFFLCAweDYwLCAweDdCLCAweDAwLCAweEUxLCAweDAxLAorMHhCNCwgMHgwNiwgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHg0MCwgMHhBMywgMHgwMSwgMHhCQywgMHgxRiwgMHhGMSwgMHg1RiwKKzB4QzAsIDB4N0EsIDB4MDAsIDB4RTcsIDB4MDEsIDB4OEQsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NDQsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDJELCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAxLAorMHg3MCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHg0MywgMHhGMSwgMHgyRCwgMHhDMSwgMHgzNywKKzB4MzAsIDB4REMsIDB4MDAsIDB4N0MsIDB4ODEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAyLCAweDcwLCAweDBELCAweEMwLCAweEI3LCAweDA0LCAweDlCLCAweDAwLCAweDU4LCAweDgzLCAweEZBLCAweDBELCAweENDLAorMHgwNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHhCMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NkYsIDB4MDAsIDB4RjMsIDB4NDEsIDB4Q0MsIDB4MTMsIDB4RjAsCisweDFGLCAweEMwLCAweEZGLCAweDA0LCAweEZCLCAweDkxLCAweEVDLCAweDA3LCAweDgwLCAweDlGLCAweEMxLCAweDVDLCAweDA4LAorMHg3QiwgMHg4OSwgMHhDQywgMHgwNiwgMHgzMCwgMHgxRiwgMHhDMSwgMHg1RiwgMHgwMCwgMHhCMywgMHgwMSwgMHhGOCwgMHhBNywKKzB4QjAsIDB4MUYsIDB4RDAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MjEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0QsCisweDAyLCAweDc3LCAweDAxLCAweENDLCAweDA3LCAweEIwLCAweDFGLCAweEMwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhBRCwgMHg0MCwgMHhBMSwgMHgzMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDUsIDB4M0YsIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4NjMsIDB4MTAsIDB4MEUsIDB4NDgsIDB4MEMsIDB4MDIsIDB4MzEsCisweDBDLCAweEM1LCAweDIyLCAweDEwLCAweDBFLCAweDQzLCAweDlCLCAweDAyLCAweEExLCAweDAyLCAweEI0LCAweDAxLCAweDUwLAorMHhBMiwgMHg0MCwgMHgzOCwgMHg4MCwgMHhFRCwgMHgxMCwgMHhCNCwgMHgwMywgMHg3MCwgMHg0RSwgMHg1MCwgMHgxOCwgMHg0NywKKzB4RkIsIDB4MDAsIDB4QzQsIDB4MDgsIDB4MTQsIDB4MEEsIDB4NDgsIDB4NTcsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDI4LCAweDAwLCAweDYxLCAweDA4LCAweDg0LCAweDYzLCAweEQwLCAweDg2LCAweDQwLAorMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxNCwgMHgwQywgMHg1MCwgMHgxOCwgMHg0NCwgMHg2MSwgMHgwMCwKKzB4QTQsIDB4MDAsIDB4MTQsIDB4MEUsIDB4NDAsIDB4MzMsIDB4NDQsIDB4MjEsIDB4MTAsIDB4QjQsIDB4MDMsIDB4MTEsIDB4MEUsCisweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDQzLCAweEQwLCAweDBFLCAweDQ0LCAweDM5LCAweDgwLCAweEY1LAorMHgwMCwgMHg4NCwgMHg0MywgMHg5MCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4MjAsIDB4MjMsIDB4MTQsIDB4MDEsIDB4MjAsIDB4MDQsIDB4MEUsIDB4RDAsIDB4MTgsIDB4NDAsIDB4QjMsCisweDA0LCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDJDLCAweDQxLCAweDQwLCAweDAwLCAweDAxLCAweDAzLCAweDY0LAorMHgwMCwgMHgxMSwgMHgyQywgMHg0MCwgMHhGMywgMHgwMCwgMHgwMSwgMHgxMiwgMHgzNCwgMHgwMywgMHg1MCwgMHgzOCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4NzYsIDB4MDcsIDB4NTAsIDB4MEQsIDB4NDAsIDB4NTQsIDB4MDAsIDB4NDksIDB4MEMsCisweDA1LCAweDBFLCAweDEwLCAweDlDLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMSwgMHg0NSwgMHgwQSwgMHhGOCwgMHgwOSwgMHhDMCwgMHhCRiwgMHg0MCwKKzB4RjMsIDB4MDAsIDB4RUMsIDB4MEYsIDB4MzAsIDB4MkYsIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MTIsIDB4NkMsIDB4MDMsCisweDMwLCAweDBFLCAweEMwLCAweDE3LCAweDEwLCAweDEzLCAweDAzLCAweDdDLCAweDgzLCAweEIwLCAweDE4LCAweEMwLCAweDNDLAorMHgyMCwgMHg5RiwgMHgwMCwgMHhGNCwgMHgwNywgMHhGMCwgMHg1RiwgMHhDMCwgMHg3NSwgMHgwMCwgMHg5NywgMHgyMiwgMHgwNCwKKzB4MkYsIDB4QjAsIDB4QkMsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDg3LCAweDAwLCAweDBGLCAweDgwLCAweDdFLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LAorMHg4MCwgMHg3QywgMHgxMywgMHg3MCwgMHgwRCwgMHhDMCwgMHg4NywgMHgwMCwgMHg5NywgMHgwMiwgMHg1QywgMHgwQSwgMHhGMCwKKzB4MEQsIDB4RTAsIDB4MTcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4M0MsIDB4MDgsIDB4RjAsIDB4QzEsIDB4QzgsIDB4MzcsIDB4MDAsCisweDlGLCAweDA0LCAweDdDLCAweDAzLCAweEYxLCAweDBELCAweEMwLCAweEE3LCAweDQ0LCAweERGLCAweDAyLCAweDdDLCAweDg4LAorMHhGMiwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwKKzB4MkQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RUMsIDB4NDIsIDB4RTAsIDB4MDMsIDB4RTAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsCisweEZDLCAweDAzLCAweEY4LCAweDBFLCAweEQwLCAweDJDLCAweDAyLCAweDNGLCAweDEwLCAweENELCAweDA3LCAweDM0LCAweDBGLAorMHhDMSwgMHgzQywgMHgwNCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhCMSwgMHg4RiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NzQsIDB4NDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MTcsIDB4MzAsCisweDBGLCAweDAwLCAweDEwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweEM2LAorMHgwOCwgMHgxRCwgMHg4MSwgMHg0NCwgMHg0NCwgMHhEMCwgMHgxMSwgMHg0MSwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QzQsIDB4MDgsIDB4MTksIDB4MDIsIDB4NEMsIDB4MEEsIDB4MTAsIDB4MEQsIDB4NDAsCisweDg0LCAweDAwLCAweDk3LCAweDAzLCAweDc0LCAweDA2LCAweEI4LCAweDFELCAweDAwLCAweDM0LCAweDAwLCAweDhELCAweDAxLAorMHg1NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNCwgMHg0MiwgMHhEMywgMHgwOSwgMHg3NCwgMHgwNSwgMHgxMCwgMHgwNSwKKzB4NDgsIDB4MTQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NjQsIDB4MDAsCisweDlELCAweDAxLCAweDY0LCAweDA0LCAweEQwLCAweDE5LCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDU0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMywgMHg0NCwgMHgxOSwgMHgxMCwgMHgwRCwgMHg1MCwgMHgxNCwKKzB4MDAsIDB4MTgsIDB4MDEsIDB4NzQsIDB4MjEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDQsIDB4NDQsCisweDAzLCAweDEwLCAweDBELCAweDQwLCAweDg0LCAweDQwLCAweERELCAweDAyLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLAorMHgwNCwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwRCwKKzB4MDEsIDB4MDUsIDB4MDAsIDB4RDEsIDB4MDgsIDB4NDgsIDB4MzMsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDAwLCAweDAwLCAweDhELCAweDAwLCAweDA2LCAweDAwLCAweDEwLCAweDBELCAweDYwLCAweDEwLCAweDEwLAorMHg4NSwgMHgwMCwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0MCwgMHgzMCwgMHgwMCwgMHg5RCwgMHg4MCwgMHgxNiwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MTgsIDB4NTAsIDB4NDEsCisweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDI2LCAweDAwLCAweDFGLCAweDAwLAorMHg2QywgMHgwMiwgMHhGMSwgMHgwMSwgMHg0MCwgMHgzRiwgMHgwMCwgMHhERiwgMHgwMCwgMHhEQywgMHgwMywgMHhEMCwgMHgwRiwKKzB4QzAsIDB4MzQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAxLCAweDExLCAweDA1LCAweEMwLCAweDNFLCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMCwgMHgzMSwgMHgwRCwgMHhDMCwgMHgwMCwgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkUsCisweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgwRiwgMHgwMCwgMHgzQiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRiwgMHgwOCwgMHgzNywgMHgwMCwKKzB4QkMsIDB4MDAsIDB4RjIsIDB4MDIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEMwLCAweDBGLCAweDAwLCAweEY3LCAweDQwLCAweEZDLCAweDAwLCAweEIwLCAweDBGLCAweEMwLCAweDE2LCAweDIxLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1RiwgMHgwMCwgMHg3MywgMHgwMSwgMHhDQywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4M0MsIDB4MDEsIDB4QjMsIDB4MDEsIDB4QUMsIDB4MDUsIDB4RjAsIDB4NEYsIDB4QzAsIDB4NEQsCisweDA4LCAweDNGLCAweDAzLCAweDRDLCAweDA0LCAweEYwLCAweDBGLCAweEMwLCAweDRGLCAweDQwLCAweDMzLCAweDAxLCAweEZDLAorMHgwQywgMHg3MSwgMHg5MCwgMHhDMCwgMHg0QywgMHgwMCwgMHhBMywgMHgwMSwgMHhFRCwgMHgwNCwgMHhGMCwgMHgxMiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4M0YsIDB4MDIsIDB4Q0UsIDB4MjYsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDE4LCAweDUzLCAweDAwLCAweDUxLCAweDAxLCAweEVDLCAweDA3LCAweEQwLAorMHgxRiwgMHg0MCwgMHg3NCwgMHgwMCwgMHg5NSwgMHgwMSwgMHg1MSwgMHgwNiwgMHhEMCwgMHg5RiwgMHg0MiwgMHg0NCwgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NEMsIDB4MDQsIDB4RDAsIDB4M0YsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MDAsCisweDEwLCAweDQ1LCAweDQ0LCAweDQ1LCAweDAwLCAweDExLCAweDQxLCAweDQ0LCAweDAwLCAweEQwLCAweDExLCAweDQwLCAweDQ3LAorMHgwMCwgMHg5NywgMHg4MiwgMHg2QywgMHgxMCwgMHgxMCwgMHgxMSwgMHg0OCwgMHgwRiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MjUsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NTEsIDB4MEMsCisweDQwLCAweEIwLCAweDAwLCAweDQ1LCAweDAwLCAweDA0LCAweDAxLCAweDUwLCAweDBDLCAweDQwLCAweDIxLCAweDAwLCAweDA1LAorMHgwNCwgMHgyNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MCwgMHgwNywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgxMCwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MzUsIDB4MDAsIDB4OTUsIDB4ODAsIDB4MTQsIDB4NTAsIDB4RDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDgsCisweDRELCAweDA2LCAweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgyNywgMHgwMCwgMHhDMSwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzQsIDB4MDAsIDB4NTUsIDB4MDYsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MEQsIDB4ODEsCisweDQ0LCAweDIzLCAweEQwLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDExLCAweDA0LCAweDc0LCAweDQ2LCAweDEwLCAweDBELAorMHg0MCwgMHgzNSwgMHg0MCwgMHgxNSwgMHgwMiwgMHg1MCwgMHgwNiwgMHhEMCwgMHgxMSwgMHg2MCwgMHgwNywgMHgwMCwgMHg5NSwKKzB4MDgsIDB4NDUsIDB4MDYsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEE4LCAweDczLCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDAzLCAweEYwLCAweDBDLCAweEQwLCAweDM0LAorMHg4MCwgMHhDNywgMHgwMywgMHg2QywgMHgxQiwgMHhGMCwgMHgwQywgMHhDMCwgMHg2NSwgMHgwMSwgMHg5RiwgMHgwMSwgMHg2QywKKzB4NEUsIDB4RjAsIDB4MEQsIDB4QzAsIDB4ODMsIDB4MDEsIDB4MTMsIDB4MDAsIDB4M0MsIDB4MDQsIDB4NzAsIDB4M0QsIDB4QzAsCisweEY1LCAweDA4LCAweDg3LCAweDAzLCAweDU0LCAweDQ0LCAweEYwLCAweDMxLCAweEMxLCAweDA3LCAweDExLCAweDFGLCAweDA1LAorMHg0NCwgMHgwNiwgMHgzMCwgMHgzMSwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4ODAsIDB4RkQsIDB4NDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjIsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MjAsCisweEZGLCAweDAwLCAweEU4LCAweDk2LCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDIwLCAweDNGLCAweDAwLCAweEZDLCAweDA2LAorMHhFMCwgMHgwRCwgMHhDNCwgMHg0RSwgMHgwMiwgMHgzRiwgMHg0MSwgMHhGNCwgMHgwMiwgMHhGMCwgMHgyRiwgMHhDMCwgMHhCRiwKKzB4MDAsIDB4QkIsIDB4MDIsIDB4QzQsIDB4MDIsIDB4RDAsIDB4MDMsIDB4NDEsIDB4MEYsIDB4MDAsIDB4MUYsIDB4MDEsIDB4RkMsCisweDAwLCAweEYwLCAweDAzLCAweEM0LCAweDNGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHhBNSwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4NkUsIDB4MEIsIDB4MzAsIDB4MEQsIDB4QzAsIDB4QTQsIDB4ODAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsCisweDhELCAweEMyLCAweDA3LCAweDAyLCAweDFFLCAweDAwLCAweDdDLCAweDE4LCAweEYwLCAweDBELCAweEMwLCAweDM2LCAweDAxLAorMHg5RiwgMHgwNiwgMHg2QywgMHgwOCwgMHhGMiwgMHg4MSwgMHhDOCwgMHgxNiwgMHg0NCwgMHg4MywgMHgwMiwgMHg0RCwgMHg4QSwKKzB4MzAsIDB4MjksIDB4QzQsIDB4MDgsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDNGLCAweDAwLCAweERELCAweDA3LAorMHg3NiwgMHgxRSwgMHhGMCwgMHhBRiwgMHg0MCwgMHg0NCwgMHgwMCwgMHg5RiwgMHg4MCwgMHg3NCwgMHg0RiwgMHhEMCwgMHgxRiwKKzB4QzAsIDB4QzQsIDB4MDAsIDB4MUYsIDB4MEMsIDB4NzAsIDB4MDIsIDB4RjAsIDB4MEMsIDB4NDAsIDB4RjAsIDB4MDgsIDB4OUQsCisweDAyLCAweDUwLCAweDAyLCAweEQyLCAweDExLCAweDUwLCAweDU0LCAweDA0LCAweDkxLCAweDA5LCAweDY0LCAweDAyLCAweDM0LAorMHgzOSwgMHhDMCwgMHg2QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgyMiwKKzB4MDAsIDB4QzEsIDB4NDAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4NEMsIDB4NjAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MDQsIDB4MzQsCisweDFFLCAweDEwLCAweDFDLCAweDQwLCAweDQwLCAweDAwLCAweDg5LCAweDAwLCAweDM2LCAweDExLCAweEQwLCAweDRDLCAweDYwLAorMHgwMiwgMHgwNCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwQywgMHhEQSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMiwgMHgwOCwgMHgwMCwKKzB4MTQsIDB4MDAsIDB4RDAsIDB4MjAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDksIDB4ODMsIDB4NjQsIDB4MzIsIDB4OTAsIDB4QzgsCisweDQwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA4LCAweDdBLCAweDQwLAorMHhFMSwgMHgwMSwgMHgzNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHg2RCwgMHg4MSwgMHhGNiwgMHgyNiwKKzB4RDAsIDB4MUMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MjUsIDB4NDksIDB4QjYsIDB4MjUsIDB4RDAsIDB4OUUsIDB4NDAsIDB4NDgsCisweDAwLCAweDJELCAweDAxLCAweEI0LCAweDA1LCAweEQxLCAweDUzLCAweDQwLCAweDRBLCAweDAxLCAweDdELCAweDgxLCAweDk0LAorMHgyNCwgMHhEOCwgMHgxMiwgMHg2MCwgMHg0QywgMHg4MCwgMHg2OSwgMHgyMSwgMHhBNCwgMHgyNCwgMHgxMCwgMHgxMywgMHg0MCwKKzB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4QTIsIDB4MDAsIDB4ODEsCisweDAwLCAweDJDLCAweDIzLCAweDEwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweDRGLCAweDAwLCAweDM0LCAweDIyLCAweDEwLAorMHgwQywgMHhDMSwgMHg2MCwgMHgwNSwgMHg4OSwgMHgwNywgMHgzQywgMHgxNSwgMHhGMCwgMHg4QywgMHhDMCwgMHgwMywgMHgwMiwKKzB4MEYsIDB4MDEsIDB4MzgsIDB4NDYsIDB4RjAsIDB4NTAsIDB4RTgsIDB4NDIsIDB4MTAsIDB4Q0QsIDB4MTQsIDB4MTQsIDB4MjMsCisweEYwLCAweDgwLCAweEMwLCAweDAwLCAweDAwLCAweENCLCAweDEwLCAweDRDLCAweDIzLCAweEIyLCAweDJELCAweEUwLCAweDRBLAorMHg2OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgyRCwgMHgwMCwgMHhGRiwgMHg4MCwKKzB4RkMsIDB4MDcsIDB4NzAsIDB4MUYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDgsIDB4RkMsIDB4MjIsIDB4NzAsIDB4MEQsCisweEQwLCAweDI3LCAweDAyLCAweEJFLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDhGLCAweEMwLCAweDBGLCAweDAyLCAweDM1LAorMHg0MCwgMHhGQywgMHgwMywgMHg3MCwgMHgwRiwgMHhFOCwgMHgzRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhEQywgMHgyMywgMHhGMCwKKzB4MDMsIDB4QzgsIDB4MDksIDB4MDIsIDB4RjcsIDB4MDAsIDB4REMsIDB4MjMsIDB4RDAsIDB4ODMsIDB4RDAsIDB4MEIsIDB4NjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHgyMywgMHhGMCwgMHgxRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHhEQywgMHhDMCwKKzB4NjUsIDB4MjAsIDB4OUIsIDB4MjAsIDB4NkMsIDB4MDQsIDB4QjAsIDB4OUQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4ODAsCisweDdDLCAweDA3LCAweEJDLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDVGLCAweDAxLCAweDZFLCAweDA3LCAweDM5LCAweDAxLAorMHhDMCwgMHgwNywgMHg4MCwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMywgMHgwOSwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4QUIsIDB4MDAsIDB4QjQsIDB4MTMsCisweEQwLCAweDJDLCAweDQwLCAweDM4LCAweDExLCAweDYxLCAweDAwLCAweDhDLCAweDAyLCAweDE4LCAweDRFLCAweDQxLCAweDI4LAorMHgzMCwgMHgzMSwgMHgwMCwgMHg4NCwgMHgwMywgMHgxMSwgMHhDQywgMHg0MCwgMHgwOCwgMHg4OCwgMHgyRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4MTAsIDB4MEEsIDB4NDIsIDB4M0IsIDB4ODAsIDB4NkQsIDB4MDAsIDB4OTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NDAsCisweDBCLCAweDAwLCAweDdELCAweEMwLCAweEM0LCAweDAxLCAweEIwLCAweDBBLCAweDQwLCAweDRELCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OSwgMHgwMCwgMHhBMSwgMHgwMywgMHg5NCwgMHgwNywgMHg1MiwKKzB4NUUsIDB4NjAsIDB4NzAsIDB4MDMsIDB4NjUsIDB4NDMsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NkQsIDB4MDAsCisweEE1LCAweDAxLCAweDg0LCAweDA0LCAweDEwLCAweDFFLCAweDQwLCAweEM5LCAweDAwLCAweDI1LCAweDAxLCAweEI0LCAweDA3LAorMHgxMCwgMHgxNiwgMHg0NCwgMHg0QiwgMHgxMCwgMHhGRCwgMHgwMSwgMHg5NCwgMHg4NywgMHgxMCwgMHgxNiwgMHg0NCwgMHg1QiwKKzB4MjAsIDB4RUQsIDB4MDEsIDB4QTQsIDB4MDUsIDB4MTAsIDB4MUMsIDB4NjQsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDIzLCAweDA0LCAweDg5LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHgzMCwgMHgyRSwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDNSwKKzB4MjAsIDB4MDQsIDB4MUYsIDB4MTAsIDB4MEMsIDB4NTAsIDB4RjEsIDB4MDEsIDB4Q0QsIDB4NDgsIDB4MzQsIDB4MEYsIDB4MTIsCisweDNDLCAweDQxLCAweEYzLCAweDAwLCAweENELCAweDIyLCAweDE0LCAweDEzLCAweDEwLCAweDFDLCAweDQwLCAweEYzLCAweDBDLAorMHhDRCwgMHgwNywgMHgyNCwgMHg0RiwgMHgxMCwgMHg0QywgMHg0OCwgMHg1OSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4OUYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE0LCAweDAwLCAweDc3LCAweDAwLCAweEI0LCAweDAxLCAweEI1LCAweDA1LCAweEMwLCAweERELCAweDAxLCAweDc3LCAweDA4LAorMHhFQywgMHgwRCwgMHhCMCwgMHgwNSwgMHhFMCwgMHhERCwgMHgwMCwgMHg3RiwgMHgwQiwgMHhGQywgMHgxNSwgMHhCMSwgMHgzNywKKzB4QzEsIDB4REIsIDB4MTYsIDB4N0YsIDB4MDIsIDB4REQsIDB4MDksIDB4MzAsIDB4MjcsIDB4QzEsIDB4NUYsIDB4MTQsIDB4N0YsCisweDA0LCAweEU0LCAweDFELCAweDEwLCAweDE3LCAweDQ1LCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgyNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4ODAsIDB4NEMsIDB4MTAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MTIsIDB4MDAsIDB4N0QsCisweDIwLCAweEYwLCAweDAxLCAweDAwLCAweDg2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDQ4LCAweEYyLCAweDAxLCAweEMwLAorMHg4NywgMHgwMCwgMHgxRiwgMHgwQSwgMHg2NCwgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMSwgMHg4NywgMHgwMCwgMHgxRiwgMHg0MCwKKzB4NUQsIDB4MDAsIDB4RjQsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LCAweDAwLAorMHg5MywgMHg4MCwgMHg3QywgMHgwQSwgMHgzMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwMiwKKzB4RjAsIDB4MTksIDB4QzgsIDB4MjYsIDB4MDAsIDB4OTMsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDkzLCAweDEwLCAweDVDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAyLCAweDZDLAorMHgwQSwgMHgzMCwgMHg1OCwgMHhDNCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OEQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4RDgsIDB4MUIsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsCisweDAxLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQ0LCAweDI3LCAweDAwLCAweDg3LCAweDAwLCAweDQ0LCAweDA2LCAweEQwLAorMHgyOSwgMHg0NCwgMHhFMywgMHgxQywgMHg5MSwgMHgwMSwgMHg3NCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0QSwgMHg2NywgMHgwMCwKKzB4OTUsIDB4MjIsIDB4NzQsIDB4ODIsIDB4RDAsIDB4MTgsIDB4NDAsIDB4MjQsIDB4MDgsIDB4OUMsIDB4MDMsIDB4MDQsIDB4NDIsCisweDE0LCAweDE5LCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLAorMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwNCwKKzB4NTQsIDB4MDIsIDB4MTAsIDB4NjksIDB4NDQsIDB4MjcsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4ODksCisweDQxLCAweDI3LCAweDQxLCAweEQxLCAweDBBLCAweDc0LCAweDAyLCAweEQyLCAweDBELCAweDQ4LCAweDM3LCAweDAyLCAweDkxLAorMHg4MiwgMHg3NCwgMHgwMiwgMHg1MiwgMHg4OSwgMHgwMCwgMHgyNCwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0MiwgMHgwMywgMHgxMCwKKzB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjgsIDB4QTAsCisweDAwLCAweDlELCAweDAyLCAweDA0LCAweDBBLCAweEQwLCAweDA4LCAweDQwLCAweEEzLCAweDAwLCAweDg1LCAweDIwLCAweDc0LAorMHgwMywgMHg1MCwgMHgwOCwgMHg0OCwgMHgyMywgMHgwMCwgMHg5NSwgMHgwOCwgMHgwNCwgMHg4MywgMHhEMiwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MjIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODUsIDB4ODAsCisweDM0LCAweDIyLCAweEQwLCAweDA5LCAweDUwLCAweDMwLCAweDkwLCAweENELCAweDY4LCAweDQ1LCAweEEyLCAweDEwLCAweDQ4LAorMHg1MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwMiwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NEQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4QzAsIDB4MDcsIDB4MDUsIDB4MTMsIDB4ODAsIDB4NUMsIDB4ODAsCisweDMwLCAweDQxLCAweEMxLCAweDA3LCAweDIwLCAweDFGLCAweDAyLCAweDRELCAweDAwLCAweEYwLCAweDQxLCAweEMxLCAweDA3LAorMHgwMCwgMHgxMywgMHg4MCwgMHgzOCwgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgxNywgMHgyMCwgMHgxMywgMHgwMCwgMHgzRSwKKzB4MDgsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDgsIDB4MUYsIDB4MTYsIDB4NEMsIDB4MDgsIDB4MzAsIDB4MDUsIDB4QzAsCisweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEE4LCAweDdGLCAweDAwLCAweEJGLAorMHgwMSwgMHg3QywgMHgwRSwgMHhEMCwgMHgyOSwgMHhDMCwgMHg2NywgMHgxMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MkIsIDB4MDAsIDB4QjcsIDB4MDQsIDB4OUMsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4M0YsIDB4MjAsCisweEZGLCAweDQwLCAweEZDLCAweDEyLCAweEQwLCAweDRCLCAweEMwLCAweDJGLCAweDEwLCAweEFGLCAweDgwLCAweEZFLCAweDEyLAorMHhGMCwgMHgwQiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhCRSwgMHg0NCwgMHhEQywgMHgxMywgMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NDIsCisweDdDLCAweDM2LCAweEYwLCAweDFCLCAweEMxLCAweDI3LCAweDAyLCAweEJGLCAweDAwLCAweERDLCAweDAyLCAweEYyLCAweDRCLAorMHhDMSwgMHgyRiwgMHgwMCwgMHhEQiwgMHg4MCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4QzQsIDB4MjIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MjgsIDB4MDAsIDB4QkUsIDB4MDAsIDB4NEMsIDB4ODIsIDB4MzAsCisweDBCLCAweEMwLCAweDJCLCAweDA4LCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxMCwgMHg0NywgMHgwNSwgMHgxRCwgMHhDMSwgMHgzNCwKKzB4MEMsIDB4RDAsIDB4MjEsIDB4NDAsIDB4NDMsIDB4MjAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsCisweDA3LCAweDAwLCAweDFELCAweDcwLCAweDQ0LCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLAorMHg0NCwgMHgxMSwgMHg3MiwgMHgwMSwgMHg0MSwgMHgwNCwgMHgzMCwgMHgxRCwgMHgyMCwgMHg1NCwgMHg1MCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MTcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDQsIDB4NjEsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDMyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMywgMHg4RCwgMHgwMCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODksIDB4MDQsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MDgsIDB4MDgsIDB4MzMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MDUsCisweDEyLCAweEQ4LCAweDQ4LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDkyLCAweDEwLCAweDA4LCAweDYwLAorMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHg4MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg0QSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI3LCAweDA4LCAweERELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDY3LCAweDIwLAorMHg4RCwgMHgxOCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0NCwgMHg2NiwgMHgxMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4NTAsIDB4MjgsIDB4NTQsIDB4QjQsIDB4MDIsIDB4OUQsIDB4MTAsIDB4NTUsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDEsIDB4MjcsCisweDAwLCAweERELCAweDAwLCAweDA0LCAweDAyLCAweDkwLCAweDE5LCAweDYwLCAweDYzLCAweDI4LCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHhFRiwgMHgwMCwgMHhCRiwgMHgwRCwgMHhGQywgMHg4MiwgMHhGMiwgMHgwOSwKKzB4QzAsIDB4MkYsIDB4MDAsIDB4OUYsIDB4MTMsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4RTcsIDB4MjQsIDB4OUIsCisweDgxLCAweDQ0LCAweDQ2LCAweEYyLCAweDA5LCAweEM4LCAweDY3LCAweDIwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHhFNCwgMHgwMCwgMHg5RiwgMHgyMCwgMHg1NCwgMHgxQSwgMHgzMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MTIsIDB4NEMsIDB4MEUsIDB4MzQsIDB4NTksIDB4QzAsIDB4MTYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDgwLCAweEU1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwNSwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwKKzB4N0MsIDB4NjIsIDB4RTAsIDB4MDksIDB4MDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4NzIsIDB4NDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAzLCAweDdDLCAweDIyLCAweEQ0LCAweDk5LCAweEMwLCAweDI3LCAweDAxLCAweDlELAorMHgxMywgMHg3RiwgMHhEMiwgMHg3MCwgMHgwOSwgMHhDMSwgMHg1OSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4ODUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MDEsIDB4RDAsIDB4MDYsCisweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDgwLCAweDFGLCAweDAyLCAweDVDLAorMHg4OCwgMHgzMCwgMHgwMSwgMHhDNSwgMHg4NSwgMHg0MCwgMHgxMywgMHgzMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwKKzB4MDcsIDB4MDEsIDB4MTMsIDB4MjMsIDB4NUMsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDUsIDB4MTQsIDB4MDMsIDB4MDAsCisweDRDLCAweDAwLCAweDIxLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHg1OCwgMHg3NywgMHg0MCwgMHgxNCwgMHgwMCwKKzB4NjUsIDB4MDIsIDB4RDgsIDB4MDEsIDB4RDAsIDB4MTcsIDB4NDAsIDB4MTcsIDB4ODAsIDB4NUMsIDB4MDAsIDB4RDQsIDB4MDEsCisweDExLCAweDA3LCAweDAxLCAweDlELCAweDAwLCAweDYxLCAweDAyLCAweEM0LCAweDg1LCAweDMyLCAweDA1LCAweEMwLCAweDlELAorMHg0MCwgMHg2MSwgMHgxMCwgMHg0OCwgMHgwMSwgMHhEMSwgMHgwNywgMHg0MCwgMHg1RiwgMHgwNCwgMHg3MSwgMHgwMCwgMHhENCwKKzB4ODEsIDB4NTAsIDB4MDcsIDB4NDgsIDB4NDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDc4LCAweDQwLCAweDMwLCAweDAwLCAweDQxLAorMHgwNCwgMHgyNCwgMHgwMiwgMHhEMCwgMHhEQywgMHg0MCwgMHgzMywgMHgyMCwgMHhDRCwgMHg0MCwgMHgxNCwgMHgwMywgMHgxMCwKKzB4MEMsIDB4MEEsIDB4QjAsIDB4MEMsIDB4QzEsIDB4MDgsIDB4MDUsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzEsIDB4MDAsCisweEMxLCAweDgwLCAweDUwLCAweDgzLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAzLCAweDA0LCAweDJCLAorMHgxQywgMHgyRCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwKKzB4MzgsIDB4MDEsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MjcsIDB4NTgsIDB4MUEsIDB4NDAsIDB4NzgsIDB4MDEsIDB4RjUsIDB4MDAsCisweDk0LCAweDAyLCAweEQ4LCAweDBBLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDBDLCAweDk0LCAweDBDLCAweDEwLCAweDFBLAorMHg0QSwgMHg3RCwgMHgwMCwgMHhFMSwgMHgyMCwgMHg4NCwgMHg0MywgMHgwMCwgMHg0RSwgMHg0MCwgMHg0RCwgMHgyNCwgMHhGMSwKKzB4NDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0YsIDB4MDgsIDB4RTEsIDB4ODIsIDB4ODQsIDB4MDEsIDB4MTAsCisweDA2LCAweDQ0LCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweEY4LAorMHgwMCwgMHhFRiwgMHgwMywgMHhCQywgMHgwNywgMHgzMCwgMHgxQSwgMHhDMiwgMHg3OCwgMHgwMSwgMHg2MywgMHgwMSwgMHhBQywKKzB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RkQsIDB4MzEsIDB4OTYsIDB4MDQsIDB4MzAsIDB4MUEsIDB4NDAsCisweDc5LCAweDAwLCAweDYzLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDFFLCAweEMxLCAweDQ5LCAweDIwLCAweEUzLCAweDAxLAorMHg5RSwgMHgxNywgMHhGMiwgMHgxRSwgMHhDOCwgMHg3OSwgMHg0MCwgMHhGMywgMHgwMSwgMHg4RCwgMHgwNiwgMHgzMCwgMHgxRSwKKzB4QzAsIDB4NTMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA4LCAweEMwLCAweDM3LCAweDEwLCAweENGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMSwgMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMiwgMHgyQywgMHgwMCwgMHhGMCwgMHgwOCwgMHhFMCwgMHgzMywKKzB4MDAsIDB4NEYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QTIsIDB4NEQsIDB4QzAsIDB4MDUsIDB4MjAsIDB4Q0YsIDB4MjAsIDB4NUMsCisweDFCLCAweEYyLCAweDA5LCAweEUwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLAorMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHg3OSwgMHgwMCwgMHhFMywKKzB4MDEsIDB4Q0MsIDB4MTMsIDB4RjgsIDB4OEYsIDB4QzAsIDB4N0QsIDB4MDQsIDB4N0YsIDB4MDksIDB4Q0MsIDB4MDYsIDB4RjAsCisweDlGLCAweEMwLCAweDdGLCAweDAyLCAweEY3LCAweDAxLCAweDNDLCAweDI0LCAweDcwLCAweDlCLCAweEMwLCAweDQ3LCAweDIyLAorMHhCRiwgMHgwRCwgMHhDQywgMHgwNiwgMHhCMCwgMHg5RCwgMHg0MSwgMHg0RiwgMHgwMiwgMHhCRiwgMHgwMSwgMHhDRCwgMHg0RiwKKzB4MzAsIDB4OUUsIDB4QzgsIDB4N0MsIDB4MTIsIDB4M0IsIDB4MDksIDB4Q0MsIDB4MDcsIDB4MzQsIDB4OTcsIDB4RDgsIDB4MTgsCisweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM4LCAweDAwLCAweEUxLCAweDE4LAorMHg4NCwgMHgwMywgMHhEOCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgyMCwgMHhFRCwgMHgwQywgMHhBQywgMHgwMiwgMHhEMCwgMHgwQSwKKzB4NDQsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4QjQsIDB4MjQsIDB4MTAsIDB4Q0EsIDB4MDgsIDB4N0IsIDB4MDEsIDB4NEQsCisweDk4LCAweDQ0LCAweDQzLCAweDEwLCAweDVFLCAweDQwLCAweDAzLCAweDAzLCAweEFELCAweDA0LCAweDk0LCAweDIzLCAweDEwLAorMHgwRSwgMHg0MiwgMHgyOSwgMHgwMywgMHgyRCwgMHgwQywgMHhGQywgMHgxMSwgMHgxMCwgMHg4NiwgMHg0MCwgMHg1NCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4N0QsIDB4MDAsIDB4RjEsIDB4MDEsIDB4ODQsCisweDI3LCAweEQwLCAweEM4LCAweDQwLCAweDc5LCAweDAyLCAweDdELCAweDAwLCAweEE2LCAweDAyLCAweDUwLCAweDBBLCAweDQ4LAorMHgzQiwgMHg4MCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMCwgMHhEMCwgMHgwMiwgMHgwQSwgMHgwOSwgMHgwOCwgMHgzRCwgMHgwNiwKKzB4QTYsIDB4MjIsIDB4MTAsIDB4MEUsIDB4NDQsIDB4MEIsIDB4MTQsIDB4QkQsIDB4MDAsIDB4QzYsIDB4MDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDE5LCAweDEwLCAweDJELCAweDQwLCAweEM0LCAweDAyLCAweDEyLCAweDA2LCAweDQyLCAweDYwLCAweDAyLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDgsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MjIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzMsCisweDAwLCAweENELCAweDIwLCAweDM0LCAweDRDLCAweDkwLCAweDAwLCAweDQwLCAweEIyLCAweDAxLCAweDRELCAweDAxLCAweDI0LAorMHg4NSwgMHg5QSwgMHgyRCwgMHg0OCwgMHhDMywgMHgwMCwgMHg4RCwgMHgxMCwgMHgxNCwgMHg5QiwgMHgxMCwgMHgyOCwgMHg0MSwKKzB4ODEsIDB4MDAsIDB4OEQsIDB4MDgsIDB4MDUsIDB4MDgsIDB4MTAsIDB4QjgsIDB4NDAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDM1LCAweDQxLCAweEQzLCAweDAxLCAweDRELCAweDAzLCAweEQwLAorMHgwOSwgMHhDMCwgMHgzNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHgyQywgMHgwMywgMHg3MCwgMHgwNSwgMHhDMCwgMHg3NywgMHgwNCwKKzB4RkYsIDB4MTEsIDB4N0MsIDB4MUMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4MDgsIDB4REYsIDB4MDIsIDB4NkQsIDB4MDksCisweDM0LCAweDBGLCAweEMwLCAweEM3LCAweDIwLCAweENELCAweDgxLCAweEM0LCAweDAzLCAweDMwLCAweDJELCAweEMwLCAweDIxLAorMHgwMCwgMHhEQiwgMHgyQiwgMHg0NCwgMHgwQiwgMHgzMCwgMHhCOSwgMHhDMCwgMHg3NCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MjksCisweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDQyLCAweDdDLCAweDRBLCAweEYwLCAweDA1LCAweEMwLCAweDI3LCAweDkxLCAweERGLAorMHgyNCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwQSwgMHhERiwgMHgwMiwgMHg1QywgMHg0MiwgMHg3MCwKKzB4Q0QsIDB4QzAsIDB4MDcsIDB4MDQsIDB4OUYsIDB4MDEsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MjUsIDB4NDAsIDB4MDcsIDB4MDEsCisweERGLCAweDAyLCAweDdDLCAweDA5LCAweEYwLCAweDI5LCAweEM4LCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDOCwgMHgwMywgMHgzMCwgMHgxQiwgMHhDMCwKKzB4M0YsIDB4MjAsIDB4N0YsIDB4NDEsIDB4RkMsIDB4MjcsIDB4MzAsIDB4NDYsIDB4QzAsIDB4N0UsIDB4MDEsIDB4RkYsIDB4MjAsCisweENDLCAweDBDLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEJGLCAweDA4LCAweEY4LCAweDA1LCAweEI0LCAweDBGLAorMHhDMCwgMHgwRCwgMHgwOCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgxMCwgMHhFNywKKzB4MDEsIDB4Q0MsIDB4NDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDU0LCAweDAzLCAweDUwLCAweDE5LCAweDQwLCAweDM3LAorMHgwMCwgMHgxRCwgMHgwMiwgMHg3NCwgMHgwRCwgMHgxMCwgMHgxNSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwKKzB4MEMsIDB4RDEsIDB4MTksIDB4QzAsIDB4MDcsIDB4MDEsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDgsIDB4OTAsIDB4MEQsIDB4NDAsCisweEM0LCAweDAwLCAweDlELCAweDAzLCAweDZDLCAweDAzLCAweEQyLCAweEY1LCAweDQwLCAweDQ3LCAweDAwLCAweDExLCAweDAxLAorMHg0NCwgMHgwMiwgMHhEMCwgMHgzOSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NTQsIDB4MDMsIDB4OTAsIDB4OEQsIDB4NDEsIDB4MzcsIDB4MDAsCisweDVELCAweDA4LCAweDc0LCAweDQzLCAweDUwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweEM5LCAweDAwLCAweDQ0LCAweEMwLAorMHhEOCwgMHgxMSwgMHgwMCwgMHgwNywgMHgwMiwgMHg5RCwgMHgwMiwgMHgzNiwgMHgxOCwgMHgxMiwgMHgwRCwgMHg0MCwgMHg0NiwKKzB4MDAsIDB4OUQsIDB4MDMsIDB4NjAsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4RTcsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NDQsCisweDlCLCAweEQwLCAweDExLCAweDRELCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyOCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgwNCwgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4NTYsIDB4MEMsIDB4NDIsIDB4MjAsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MTAsIDB4RDAsCisweDE4LCAweDQwLCAweDMxLCAweDA5LCAweDRELCAweDIwLCAweDM0LCAweDIyLCAweDExLCAweDZDLCAweDUwLCAweDAyLCAweDAyLAorMHg4RCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0MiwgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NEEsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsCisweDNFLCAweDA4LCAweEZGLCAweDAwLCAweERDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDNGLCAweDAwLCAweDVGLCAweDAwLAorMHg3NCwgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNiwgMHgxMCwgMHhGQiwgMHgwMCwgMHg0QywgMHg1MCwgMHg3MSwgMHgwMSwKKzB4NjQsIDB4MDcsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4QjAsIDB4NkYsIDB4QzAsIDB4MDcsIDB4QTAsIDB4OUYsCisweDgwLCAweERDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDQwLCAweDQ3LCAweDgwLCAweDRFLCAweDAxLCAweEYyLAorMHgwMSwgMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsCisweDAxLCAweEIwLCAweDAzLCAweEMwLCAweDJGLCAweDA0LCAweEZDLCAweDEwLCAweEZDLCAweDQwLCAweEYwLCAweDAzLCAweEMwLAorMHg4RiwgMHgwOCwgMHgyRiwgMHgwMCwgMHhGQywgMHgxMCwgMHhEMiwgMHg4RiwgMHhDMCwgMHgwRCwgMHgwMSwgMHgyRSwgMHgwMCwKKzB4QkMsIDB4MDMsIDB4RTAsIDB4MEYsIDB4QzIsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MEIsCisweEMyLCAweDE3LCAweDY0LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDNGLCAweDAwLAorMHhBMywgMHg0MCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgxMSwgMHhCMywgMHgyMCwgMHhGQywgMHgyNiwKKzB4QjAsIDB4OUYsIDB4RDIsIDB4MkMsIDB4MDAsIDB4RkYsIDB4MjEsIDB4RUMsIDB4MTAsIDB4QjIsIDB4OEYsIDB4QzgsIDB4M0MsCisweDEyLCAweEZGLCAweDA0LCAweEVDLCAweDIwLCAweDcyLCAweDBGLCAweEMwLCAweDdGLCAweDAyLCAweEYzLCAweDAzLCAweEVELAorMHgxQiwgMHhCMCwgMHg5QiwgMHhDMCwgMHg3QywgMHgwQSwgMHhERiwgMHgwMSwgMHhGQywgMHgxQSwgMHgzNCwgMHg0OSwgMHhDMCwKKzB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QjEsCisweDAxLCAweDQ0LCAweDgyLCAweDcwLCAweDAxLCAweDAyLCAweDNGLCAweDIyLCAweDkxLCAweDAwLCAweDM0LCAweDEzLCAweDEwLAorMHg0QywgMHg0OCwgMHhCNCwgMHgwMSwgMHhEMSwgMHgwMSwgMHg1NCwgMHgyNCwgMHhEMCwgMHg2RiwgMHg2MCwgMHhCQywgMHgwMSwKKzB4RkQsIDB4MDksIDB4NDQsIDB4MTgsIDB4MTAsIDB4OUYsIDB4NDAsIDB4MzMsIDB4MDEsIDB4RDEsIDB4MDAsIDB4ODQsIDB4MUIsCisweDE0LCAweDQ4LCAweDUwLCAweDM0LCAweDIxLCAweERELCAweDA0LCAweDc0LCAweDEyLCAweDExLCAweDE5LCAweDQwLCAweDBELAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMSwgMHgwMCwgMHg4MSwgMHgwMCwKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MjAsIDB4QzUsIDB4MjAsIDB4MTQsIDB4MDcsIDB4NTAsIDB4MEMsCisweDQwLCAweDgxLCAweDA0LCAweEM1LCAweDAwLCAweDA0LCAweDAwLCAweEQwLCAweDZDLCAweDQ4LCAweEIwLCAweDAxLCAweENELAorMHgwMCwgMHgyNCwgMHgxQywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwNCwgMHgwNCwgMHgwQiwgMHg1MCwKKzB4MEQsIDB4NDAsIDB4MzAsIDB4MDEsIDB4Q0QsIDB4MTQsIDB4MzQsIDB4MTgsIDB4MTAsIDB4ODEsIDB4NDAsIDB4NUMsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM3LCAweDAwLCAweDkxLCAweDQxLCAweDQ0LAorMHgwRSwgMHg1MiwgMHgxMSwgMHg0NSwgMHgzNywgMHgxMCwgMHhENSwgMHg0MywgMHg3NCwgMHgwNywgMHg1MCwgMHgwRCwgMHg0NCwKKzB4NTUsIDB4MDAsIDB4RDUsIDB4MDQsIDB4NTYsIDB4ODgsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsCisweDI0LCAweDAyLCAweDEzLCAweDBELCAweDQwLCAweDM3LCAweDgwLCAweEMxLCAweDAxLCAweDQ0LCAweDAzLCAweDUwLCAweDBELAorMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHg4MCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgxMSwgMHg0MCwgMHgxRCwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDEsIDB4NEQsIDB4MDQsCisweEYwLCAweDExLCAweEM0LCAweDM3LCAweEMwLCAweEQ3LCAweDAzLCAweDdDLCAweDA3LCAweEYwLCAweDhELCAweEMwLCAweEM1LAorMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwQywgMHhCMiwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywKKzB4MDEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4NzcsIDB4MEEsIDB4RDMsIDB4ODAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzQsCisweDM0LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBFLCAweDMwLCAweDM5LCAweEMwLCAweDgyLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgzRCwgMHgxMCwgMHhFRiwgMHgwMCwgMHhGQywgMHg4MCwgMHg3MCwKKzB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4ODAsIDB4RjgsIDB4MDMsIDB4QjQsIDB4MEYsIDB4QzAsIDB4MUEsIDB4MDAsCisweEZCLCAweDAwLCAweDVDLCAweDIyLCAweEYwLCAweDBGLCAweEMyLCAweDM3LCAweDMwLCAweEVGLCAweDAwLCAweDVDLCAweDBELAorMHhGMywgMHgwRiwgMHhDMCwgMHg3RiwgMHg0MCwgMHhGRiwgMHg4MCwgMHhEQywgMHgwMywgMHhCMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MjAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDBBLCAweDkzLCAweDAwLCAweDRDLCAweDBBLCAweEYyLCAweDY5LAorMHhDMCwgMHgzMywgMHgyMCwgMHhERiwgMHgwMiwgMHg1RCwgMHg4MywgMHhGMCwgMHhDRCwgMHhDMCwgMHg4NCwgMHgwMCwgMHhEMywKKzB4MDEsIDB4N0MsIDB4MDksIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4NDAsIDB4RDMsIDB4ODQsIDB4N0MsIDB4ODEsIDB4MzAsCisweDhELCAweEMwLCAweDM1LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDM0LCAweDAwLAorMHhEQiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4RjgsIDB4MDIsIDB4NTEsIDB4MjAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDUsCisweDNGLCAweDAwLCAweERELCAweDAxLCAweDdDLCAweDgzLCAweDEwLCAweDNELCAweDQwLCAweDE0LCAweDA4LCAweEMwLCAweDIwLAorMHg3NCwgMHgwMywgMHgxMiwgMHhCRiwgMHg0MCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwMCwgMHg3NCwgMHg4MywgMHgxMCwgMHgxRiwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzQsIDB4ODAsIDB4RDEsCisweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgxMiwgMHgwNCwgMHg0QywgMHhEOSwgMHgzOCwgMHg0MCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDksIDB4NTQsIDB4MDMsIDB4MTAsIDB4MkQsIDB4NDAsIDB4MjAsIDB4MDgsIDB4QzEsIDB4MDAsIDB4MzQsCisweDA3LCAweDExLCAweEFDLCAweDQ4LCAweEIxLCAweDAwLCAweEMxLCAweDAxLCAweDM0LCAweDgyLCAweDEwLCAweDFDLCAweDQxLAorMHgzNiwgMHgwMCwgMHhDOSwgMHgyMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NjAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDcwLCAweDAwLCAweEExLCAweDg5LCAweDg0LCAweDA3LCAweEQ4LCAweDFFLCAweDQwLCAweDdCLCAweDAyLAorMHhGRCwgMHgwOSwgMHhCNCwgMHgwNywgMHgxMiwgMHgxRSwgMHg0MCwgMHg2OCwgMHgwMCwgMHhFMSwgMHg4MSwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MUUsIDB4NDAsIDB4NzksIDB4MDUsIDB4RTEsIDB4MTEsIDB4QjQsIDB4MjcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4RkEsCisweDAwLCAweEU5LCAweDgxLCAweEI0LCAweDA3LCAweDEwLCAweDFBLCAweDQwLCAweDc4LCAweDAwLCAweEU4LCAweDBCLCAweEI0LAorMHg4NCwgMHhEMCwgMHgxQSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MTgsIDB4MzAsIDB4MDAsIDB4ODMsIDB4MjAsIDB4MEMsIDB4NDEsIDB4RjAsIDB4OEMsIDB4QzQsIDB4MzMsIDB4MjAsIDB4NEYsCisweDAwLCAweDFELCAweDIzLCAweDcwLCAweDhDLCAweEMwLCAweDg0LCAweDQwLCAweEMzLCAweDAwLCAweDNDLCAweDQzLCAweDc0LAorMHgwRCwgMHhDMCwgMHgzMSwgMHgwMCwgMHhDMywgMHgwMCwgMHgzQywgMHgwMCwgMHgzMCwgMHgwQywgMHhEMCwgMHgzMywgMHgwMCwKKzB4Q0EsIDB4MDgsIDB4M0MsIDB4MDMsIDB4NzQsIDB4MEMsIDB4RDAsIDB4MzQsIDB4MDAsIDB4QzMsIDB4MUQsIDB4M0MsIDB4MDgsCisweEYwLCAweDcwLCAweEM4LCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LAorMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwNCwgMHg2RiwgMHgwMCwKKzB4RkMsIDB4QTMsIDB4NzAsIDB4MEYsIDB4RTAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkYsCisweEMxLCAweDNFLCAweDBELCAweEZGLCAweDAwLCAweEZFLCAweDAzLCAweEYyLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweEY3LAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGNSwgMHgyOCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4ODMsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAxLCAweEIzLCAweDAyLCAweDRELCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweEI3LCAweDAwLCAweEQzLCAweDgwLCAweDZDLAorMHgwMywgMHhGMiwgMHgwRCwgMHhDMiwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgyRCwgMHhDMCwKKzB4QjQsIDB4MDQsIDB4RDMsIDB4MDQsIDB4N0MsIDB4ODYsIDB4MzAsIDB4NkQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4RDMsIDB4NDAsCisweDdDLCAweDUzLCAweEIwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDQ0LCAweDgyLCAweEYwLCAweDExLAorMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzRCwgMHgwNSwKKzB4RTEsIDB4MTAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0YsIDB4MDQsIDB4RTUsIDB4MDAsIDB4ODQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDIwLCAweEVELCAweEEwLCAweDlDLCAweDAyLCAweDEwLCAweDRGLCAweDQyLCAweDNDLAorMHgyMSwgMHhFMSwgMHgwQSwgMHg5QywgMHgwMywgMHgxOCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4MEIsIDB4MTAsIDB4MEEsIDB4NDgsIDB4M0IsIDB4MDAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsCisweDRDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDQyLCAweDgxLAorMHgwMSwgMHg4NCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHg0OSwgMHgwMSwgMHhBNCwgMHg0NywgMHg1MCwKKzB4MUUsIDB4NDAsIDB4NUIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4MTQsIDB4MDUsIDB4MTQsIDB4MUUsIDB4NTAsIDB4N0EsIDB4NDAsCisweEUxLCAweDIxLCAweDM0LCAweDA0LCAweEQwLCAweDlFLCAweDYwLCAweDdCLCAweDQwLCAweEUxLCAweDAxLCAweDM0LCAweDE3LAorMHg5MCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMCwgMHg0MCwgMHgwMiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4NDEsIDB4MEEsCisweDA0LCAweEMzLCAweEMxLCAweEJDLCAweDQ0LCAweDMzLCAweDAwLCAweDVELCAweDAxLCAweDA0LCAweDA1LCAweEQwLCAweDA4LAorMHg0MCwgMHg3MywgMHgwQSwgMHg4RCwgMHgyMCwgMHgxNCwgMHgwRiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMiwgMHg4MCwgMHhDMSwKKzB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4NDAsIDB4MzQsIDB4MDMsIDB4MTIsCisweDg5LCAweDQyLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDgzLCAweEQ4LCAweDFDLCAweDQwLCAweDVBLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxNSwgMHgwMCwgMHg3MywgMHgwMywgMHhDQywKKzB4MEQsIDB4RTAsIDB4MDcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4N0IsIDB4MDAsIDB4RUMsIDB4MDUsIDB4RjAsIDB4MTUsIDB4QzIsCisweDFGLCAweDAwLCAweDVGLCAweDA1LCAweERDLCAweDYxLCAweDMwLCAweDA1LCAweEMwLCAweDE2LCAweDYwLCAweDUzLCAweDgwLAorMHhGNCwgMHgwMSwgMHhGMSwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHhCMCwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MTAsIDB4NUYsIDB4MDAsIDB4Q0MsIDB4MzksIDB4RjAsIDB4MzcsIDB4QzAsIDB4NUUsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDgxLCAweDAwLCAweDBGLCAweDA0LCAweDdDLCAweDI4LAorMHhGMSwgMHgwMSwgMHhDMywgMHgwNywgMHgxMCwgMHgxNywgMHgwOCwgMHg3QywgMHgwNCwgMHhGMCwgMHhBMSwgMHhDMCwgMHgwNywKKzB4MDEsIDB4MUYsIDB4MDAsIDB4MUMsIDB4MDAsIDB4RjAsIDB4MjAsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsCisweDgwLCAweDM0LCAweDIxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAwLCAweDNDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHg4MCwgMHgxRSwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHg4MSwgMHhDMSwgMHg0OSwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsIDB4OTMsIDB4MDgsIDB4NkMsIDB4MDYsIDB4RjAsCisweDg5LCAweEMwLCAweDYzLCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDAyLCAweDMxLCAweDA5LCAweEQwLCAweDI0LCAweDAwLAorMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhEMCwgMHg2NCwgMHhDMCwgMHg5MywgMHgwOCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjQsCisweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHg2RSwgMHhEMiwgMHgyOSwKKzB4NDAsIDB4MjcsIDB4MDIsIDB4OTEsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MzksIDB4NDEsIDB4MjQsIDB4MDgsIDB4OTEsCisweDIwLCAweDdDLCAweDI2LCAweDExLCAweDI5LCAweDQwLCAweDI0LCAweDAyLCAweDkxLCAweDAyLCAweDc0LCAweDAyLCAweEQwLAorMHg3OSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OUQsIDB4MDQsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLCAweDkxLCAweDAwLCAweDY0LCAweDAyLCAweEQwLCAweDI5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5MSwgMHgxMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHg4OCwgMHg0OCwgMHgyMCwgMHgwMCwgMHg5OSwgMHgwNCwKKzB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4NDksCisweDQwLCAweDY3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDY0LCAweDAwLCAweDk1LAorMHgwMSwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4NDEsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MUEsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweEMxLCAweDgxLCAweDA0LCAweDQ1LCAweDAyLCAweDE4LCAweDA4LCAweDQwLCAweDIwLCAweDAxLCAweDg5LCAweDAwLCAweDM0LAorMHgxMiwgMHgxMCwgMHg0QywgMHg0MCwgMHgyMCwgMHgwMSwgMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjIsIDB4OTAsIDB4MDgsIDB4NTQsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsCisweDM0LCAweDEyLCAweEQwLCAweDQ4LCAweDYwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCOCwgMHg5NiwgMHgwMiwgMHgxMywgMHgwMCwgMHg2QywgMHgwOCwgMHhGMCwgMHg4MSwgMHg0NCwgMHg4NywgMHgwMiwKKzB4MTMsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsCisweDMwLCAweEExLCAweDQyLCAweDg0LCAweDAyLCAweDExLCAweDAwLCAweDdDLCAweEE4LCAweEYwLCAweDAxLCAweEMwLCAweDgzLAorMHgxMiwgMHgxRiwgMHgwQSwgMHg3QywgMHg1OCwgMHg3MCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxNywgMHgwQSwgMHg3QywKKzB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEIwLCAweDI3LCAweDAyLCAweEJGLCAweDA4LCAweEY0LCAweDBBLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDAyLCAweEZGLAorMHgwOCwgMHhGQywgMHgwMiwgMHhGNCwgMHgwQiwgMHhDMiwgMHgyRiwgMHgwMiwgMHhCNywgMHgwMCwgMHhEQywgMHgyMiwgMHhGMCwKKzB4ODksIDB4QzgsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDgsCisweEJGLCAweDAwLCAweDVDLCAweDkyLCAweDcwLCAweDBCLCAweEMyLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweEZDLCAweDIyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwKKzB4MkYsIDB4MDUsIDB4QjMsIDB4ODQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QjMsIDB4MDQsCisweDVDLCAweDAyLCAweDMwLCAweDhCLCAweEUwLCAweDI1LCAweDAwLCAweEI3LCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDRCLAorMHhDMCwgMHgyRiwgMHgwNSwgMHhCRiwgMHgwNCwgMHg0QywgMHgwMywgMHhGNCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhERiwKKzB4MDAsIDB4NEMsIDB4NTIsIDB4QjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RTIsCisweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LAorMHgwMSwgMHgxMSwgMHg4OCwgMHg3NCwgMHg0OSwgMHhEMCwgMHgwNSwgMHg0MSwgMHgwNywgMHgwMiwgMHgxNSwgMHgxNCwgMHg0NCwKKzB4OTAsIDB4MTEsIDB4NDEsIDB4NDIsIDB4ODcsIDB4NDQsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MjAsIDB4NzIsIDB4NDEsIDB4QzEsCisweDA1LCAweDAxLCAweDFDLCAweDA4LCAweDU0LCAweDQ5LCAweDEwLCAweDAxLCAweDQ0LCAweDA3LCAweDAwLCAweDFELCAweDE0LAorMHg1NCwgMHgxMCwgMHg3MCwgMHg0MSwgMHg0MCwgMHgwNywgMHgyNCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwKKzB4NDIsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjAsIDB4MDUsCisweDgxLCAweDAwLCAweDM0LCAweDMyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDIwLCAweDgxLCAweDJDLCAweDQ0LCAweDU2LAorMHgwNCwgMHg0OCwgMHg0MCwgMHgyNSwgMHg0MywgMHg4NSwgMHg0MCwgMHgxNCwgMHgwMiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMywKKzB4MjUsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MzIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OUQsIDB4MDQsIDB4MDQsCisweDUyLCAweDkwLCAweDQ4LCAweDQ0LCAweDIzLCAweDAxLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHg0QiwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5MSwKKzB4MDEsIDB4NzQsIDB4ODMsIDB4RDAsIDB4ODksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDE5LCAweDQwLCAweEE3LCAweEMwLCAweDkxLCAweDAxLCAweDc0LCAweDA2LCAweDUwLCAweDA5LCAweDAwLCAweDI3LCAweDA4LAorMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg1MCwgMHgwMiwKKzB4NTgsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDgsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDMsIDB4NjMsCisweDI4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDI0LCAweDQwLCAweDkzLCAweDA1LAorMHg3QywgMHgwRSwgMHhGMCwgMHgzOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMywgMHgxRCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4QzgsIDB4MjUsIDB4NDAsIDB4OTcsIDB4MjAsIDB4NUMsIDB4MDIsIDB4RjMsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsCisweDAwLCAweDZDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDY3LCAweDIwLCAweDhGLCAweDAxLCAweDQ5LCAweDAyLCAweEIwLAorMHgxOSwgMHhDOCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxNiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgxNywgMHgwOCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjEsIDB4MTAsIDB4OUYsIDB4MjAsIDB4N0MsCisweDEyLCAweEYwLCAweDA5LCAweEMxLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDI2LCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhFMCwgMHgyNSwgMHgwNCwgMHg5RiwgMHgwMCwKKzB4NUMsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDEsIDB4OUYsIDB4ODQsIDB4NkMsIDB4MDIsIDB4QjAsIDB4NTksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDU5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwNCwgMHg3RSwgMHg2OCwKKzB4QjQsIDB4MjEsIDB4RDAsIDB4MDQsIDB4MDgsIDB4MUQsIDB4MDIsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzgsIDB4MDcsCisweDAwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDgxLCAweEMwLCAweDA3LCAweDQwLCAweDEzLCAweDAwLCAweDVDLAorMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MEMsIDB4N0MsIDB4MDgsIDB4MzAsIDB4MjEsIDB4QzIsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDFDLCAweDQwLCAweDcxLCAweDAxLCAweEU0LCAweDBELCAweDMwLAorMHgwNywgMHg0MSwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwRCwgMHg0NCwgMHgwMSwgMHg3MCwgMHgwNywgMHhDMCwgMHgxMSwgMHgwMCwKKzB4NUQsIDB4MDAsIDB4NzYsIDB4MDUsIDB4OTAsIDB4MDcsIDB4NDAsIDB4OUYsIDB4MDgsIDB4NjEsIDB4MDIsIDB4NDQsIDB4MDEsCisweDcwLCAweDE3LCAweEM4LCAweDlFLCAweDAyLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDUyLCAweDA1LCAweDQwLCAweDE3LAorMHgwMSwgMHg3RCwgMHgwMywgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwgMHg0NCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4NzIsIDB4MDAsIDB4ODEsIDB4MDksIDB4MjQsIDB4MEIsIDB4NTAsIDB4MkMsCisweDQyLCAweDMwLCAweDAwLCAweERELCAweDAzLCAweDI0LCAweDAzLCAweEQwLCAweDlDLCAweDQwLCAweDMzLCAweDAwLCAweDhELAorMHgwMSwgMHgzNCwgMHgyMiwgMHhEMCwgMHgxQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMCwgMHg1NCwgMHg4MywgMHg1MCwKKzB4QjQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4NDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NzIsIDB4MDAsCisweENELCAweDgxLCAweDM2LCAweDgzLCAweDEwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgyMCwgMHgwNSwgMHhBMSwgMHgwMCwgMHhBNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg2MCwKKzB4MzgsIDB4MDAsIDB4QUQsIDB4MDQsIDB4ODQsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDgsIDB4M0IsIDB4MDAsIDB4RUQsIDB4ODAsCisweEI0LCAweDAzLCAweDkwLCAweDBFLCAweDQ0LCAweDZCLCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDIzLCAweDQwLCAweDFFLAorMHg0MCwgMHgzQSwgMHgwMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgxMywgMHg1MCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgxMCwgMHhBQywKKzB4MDAsIDB4MzQsIDB4MjcsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDE4LCAweEU4LCAweDAwLCAweEExLCAweDAxLCAweEY0LCAweDA3LCAweDcwLCAweDE3LCAweEMwLCAweDc4LAorMHgwMCwgMHhFRiwgMHgwMywgMHhBQywgMHgyNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgyMiwgMHhFRCwgMHgwMSwgMHhCNiwKKzB4MDcsIDB4RjAsIDB4MTYsIDB4ODIsIDB4NzMsIDB4MDAsIDB4MDMsIDB4MDEsIDB4OUMsIDB4MTcsIDB4NjAsIDB4MUUsIDB4QzAsCisweDc4LCAweDA4LCAweEVGLCAweDg5LCAweDNDLCAweDE3LCAweDM4LCAweERFLCAweEM4LCAweDdCLCAweDAwLCAweEFGLCAweDAxLAorMHhCQywgMHgyNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QjgsIDB4MDUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDgsCisweDhGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDAxLCAweEMwLCAweDM1LCAweDAzLCAweERGLCAweDAwLCAweDdDLCAweDgzLAorMHhCMSwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg5QiwgMHg1MSwgMHgwQywgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDIsIDB4N0MsIDB4NEIsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYyLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyMCwgMHg2RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgxMSwgMHhCMCwgMHgxRiwgMHhDMCwgMHhGRiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4Q0MsIDB4NDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsCisweDlGLCAweEUwLCAweDVDLCAweDAwLCAweDNGLCAweDAxLCAweEY4LCAweDJGLCAweDM4LCAweDFGLCAweEM4LCAweDZFLCAweDI4LAorMHhGMywgMHg4MSwgMHhGQywgMHg0NywgMHhGQSwgMHg5RiwgMHhDOCwgMHg2RiwgMHgwMCwgMHgzMywgMHgyMSwgMHg3QywgMHgyNywKKzB4MzAsIDB4OUYsIDB4QzQsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsCisweDI5LCAweDIwLCAweEUxLCAweDA4LCAweDg0LCAweDIxLCAweDMxLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLAorMHg4NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgxNCwgMHhFRCwgMHg4MCwgMHg5QywgMHgyMywgMHg3MCwgMHg4QSwKKzB4QzAsIDB4MjgsIDB4MDEsIDB4MkQsIDB4MjAsIDB4OUMsIDB4MDMsIDB4MzAsIDB4NEUsIDB4NDAsIDB4MEMsIDB4MTIsIDB4RTEsCisweDE4LCAweEI0LCAweDAzLCAweDcwLCAweDBFLCAweDQwLCAweDJGLCAweDMwLCAweDAxLCAweDAwLCAweEI0LCAweDA3LCAweEIwLAorMHgwQywgMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwKKzB4MDAsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MDEsIDB4MTAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4NkQsIDB4MDAsIDB4ODQsCisweDBCLCAweDUwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDA2LCAweDcwLAorMHgxOCwgMHgxMCwgMHgyRCwgMHgwMCwgMHgxNCwgMHg0MywgMHgxRCwgMHgwRSwgMHg0MCwgMHgyOCwgMHg0NCwgMHhFNSwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDQsIDB4MkIsIDB4MDIsIDB4QTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDIzLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDAxLCAweDAwLAorMHg4MSwgMHgwNiwgMHgwNSwgMHg4MCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzNywgMHgwMCwgMHg0RCwgMHgwMCwgMHgwNCwgMHg4NywKKzB4RDAsIDB4MDAsIDB4NDYsIDB4NzMsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4OTMsIDB4NTEsIDB4MDgsIDB4NDAsIDB4MjAsCisweDA4LCAweDBELCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDQwLCAweDEwLCAweEQ1LCAweDgwLCAweDM0LAorMHgwMywgMHg1MCwgMHgwQywgMHg2MCwgMHgyMywgMHgwMCwgMHg4OSwgMHgyMCwgMHg3NiwgMHgxMywgMHgxQywgMHhFRCwgMHg0OCwKKzB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MkQsIDB4NDAsIDB4OTMsCisweDAwLCAweDQ0LCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDAwLCAweENELCAweDA3LCAweEYwLAorMHgwNSwgMHhDMCwgMHhGRiwgMHgwMiwgMHhERiwgMHgwMCwgMHg3QywgMHgwQiwgMHgzMCwgMHgwOSwgMHhDNCwgMHgzNCwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4REMsIDB4MDcsIDB4MzAsIDB4MEQsIDB4RDAsIDB4NTQsIDB4MDAsIDB4RjcsIDB4MDEsIDB4RkMsIDB4MDMsCisweEYwLCAweDBGLCAweEMwLCAweDM3LCAweDQwLCAweDFCLCAweDAwLCAweEZDLCAweDAzLCAweDEwLCAweDNELCAweEM0LCAweDc3LAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNywgMHgwMCwgMHgwRiwgMHgwMSwKKzB4N0MsIDB4NjgsIDB4NzAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RjAsIDB4MUQsCisweEM4LCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDFDLCAweDAzLCAweDcyLCAweDI1LCAweEMwLCAweDk1LCAweDAwLCAweDFGLAorMHg4MiwgMHgxQywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4ODcsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MTcsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJGLCAweDAwLCAweDkzLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMCwgMHgwMiwgMHhDMSwgMHgzQywgMHgwMCwgMHhGMywgMHgwMiwgMHhDQywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwKKzB4M0MsIDB4MDAsIDB4RkYsIDB4MDMsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4ODIsIDB4QzAsIDB4NkMsIDB4NDAsIDB4MzMsIDB4MDAsCisweEZDLCAweDQzLCAweDMwLCAweDBELCAweEMwLCAweDRGLCAweDAwLCAweEYzLCAweDAwLCAweDhELCAweDAzLCAweDMwLCAweDBGLAorMHhDMCwgMHg2RiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgwRiwgMHhEMCwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NDYsIDB4MDIsIDB4MTEsIDB4MDIsIDB4NTQsIDB4MDYsCisweDkwLCAweDcxLCAweDQwLCAweDM0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDIwLCAweDQwLCAweDM0LAorMHgwMCwgMHhDRCwgMHgwMCwgMHg2QywgMHgwMywgMHgxMCwgMHgyNSwgMHg0MSwgMHg4NCwgMHgwNiwgMHgxMSwgMHgwMSwgMHg3NCwKKzB4MDMsIDB4MTAsIDB4MUQsIDB4QzAsIDB4NDEsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsCisweDY3LCAweDAwLCAweDlELCAweDA1LCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweEMyLCAweDA2LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyMiwgMHgwMCwgMHhEMSwgMHgwMiwgMHg0NCwgMHgwNiwgMHhEMCwKKzB4MTEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDgsIDB4MjEsIDB4NDAsIDB4MzQsIDB4MDAsCisweERELCAweDAwLCAweDQ0LCAweDA3LCAweDEwLCAweDA5LCAweDQwLCAweDEwLCAweDgwLCAweDExLCAweDAzLCAweDc0LCAweDAzLAorMHg5MCwgMHgxRCwgMHg0MSwgMHgzNywgMHgwMSwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywKKzB4MDEsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MEQsIDB4NDQsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDE0LCAweDAwLCAweDk4LCAweDA4LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwNSwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4MjQsIDB4MDMsIDB4MTQsIDB4MDAsIDB4NTAsIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsCisweDBDLCAweDQwLCAweDU3LCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDMzLCAweDgwLAorMHgwRCwgMHgwMiwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0QywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MjIsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjEsIDB4MDEsIDB4NTAsCisweDNDLCAweDAwLCAweDQzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDA1LCAweEQwLCAweDNDLCAweDAwLCAweERGLCAweDAwLAorMHg0NCwgMHgwMywgMHgzMCwgMHgwMCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHhGQywgMHgwMywgMHhCMCwgMHgwRCwKKzB4QzAsIDB4MjcsIDB4NDAsIDB4RjMsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUYsCisweDAyLCAweEJDLCAweDEzLCAweDMwLCAweEFELCAweEMyLCAweDA0LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhCMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGOCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4NDAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDc0LCAweDBCLCAweEUwLAorMHgwRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDOCwgMHgyRiwgMHgzMCwgMHhCRiwgMHgwNCwKKzB4N0MsIDB4MEIsIDB4RjAsIDB4NEYsIDB4QzAsIDB4MTcsIDB4NjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDdGLCAweDAwLCAweDdFLCAweDAxLCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweDQ0LCAweDNDLCAweDA1LAorMHhGNywgMHgwMCwgMHhFQywgMHgyMywgMHhCMCwgMHg0RiwgMHhDMCwgMHg0OSwgMHgwMCwgMHgzNywgMHgwMywgMHhGQywgMHgwMywKKzB4MzIsIDB4MkYsIDB4NDAsIDB4M0QsIDB4MDIsIDB4MjMsIDB4MDMsIDB4REMsIDB4MjQsIDB4NzgsIDB4OTMsIDB4QzAsIDB4NDgsCisweDAwLCAweDIzLCAweDAxLCAweEU0LCAweDAzLCAweEIwLCAweDE3LCAweEMwLCAweDRDLCAweDAwLCAweEZGLCAweDIxLCAweENDLAorMHgwNiwgMHhFMCwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MDgsIDB4N0YsIDB4MDAsIDB4REQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4RjQsIDB4MDAsIDB4RjEsCisweDAzLCAweDg0LCAweDNCLCAweDEwLCAweDlELCAweEMwLCAweDY0LCAweDAwLCAweDFELCAweDAwLCAweEY0LCAweDJGLCAweDE0LAorMHg2RiwgMHg0NCwgMHhCQywgMHgwMywgMHgxMSwgMHg4NCwgMHg0QywgMHgwMCwgMHhEMCwgMHg0MSwgMHhDMCwgMHg1NCwgMHg0OCwKKzB4NTEsIDB4MDEsIDB4NDQsIDB4MkYsIDB4MTAsIDB4MTEsIDB4NTAsIDB4NDQsIDB4MDAsIDB4RkQsIDB4QTEsIDB4NDQsIDB4MDQsCisweEQxLCAweDA5LCAweDQwLCAweDBDLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHgzMywgMHgwMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMywgMHg5MSwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDNSwgMHgyMiwKKzB4MjQsIDB4MTMsIDB4OTEsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDgsIDB4MEQsIDB4ODQsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MkMsCisweDQwLCAweDMxLCAweDIxLCAweDAxLCAweEMwLCAweDE0LCAweDE0LCAweDUwLCAweDAxLCAweDQwLCAweDMyLCAweDIwLCAweDkxLAorMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwKKzB4MDEsIDB4NDIsIDB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDYwLCAweDQ0LAorMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgyNCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwMywgMHg5MiwgMHgwRCwgMHg0MCwKKzB4MzIsIDB4ODgsIDB4MDEsIDB4MDEsIDB4NTQsIDB4MDQsIDB4QzAsIDB4MTksIDB4NTAsIDB4OTQsIDB4MDEsIDB4OTAsIDB4MDgsCisweDQ0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDQ2LCAweDA0LCAweERELCAweDAwLCAweDQ0LCAweDQ2LCAweEQxLCAweDMxLAorMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwKKzB4OUYsIDB4MDQsIDB4M0MsIDB4MDMsIDB4OTQsIDB4MEMsIDB4RDAsIDB4MzQsIDB4MTAsIDB4RDcsIDB4MDAsIDB4NkMsIDB4MDMsCisweEIwLCAweDBELCAweEM4LCAweDQ1LCAweDEwLCAweDlGLCAweDAzLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM1LAorMHgwMCwgMHgxMywgMHgxMSwgMHg1QywgMHgwNCwgMHg3MSwgMHgzMCwgMHhDMCwgMHgyNiwgMHgwMCwgMHgxMywgMHg4MywgMHg2QywKKzB4MDMsIDB4QjAsIDB4NDgsIDB4QzAsIDB4QzYsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NEQsIDB4MEUsIDB4RjAsIDB4MzEsIDB4RDAsCisweDIzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDgwLCAweDNELCAweDAwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHhFRCwgMHg0MCwgMHhGQywgMHg4MywgMHhGMCwKKzB4MEUsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MEUsIDB4QzQsIDB4M0QsIDB4MDAsCisweEJGLCAweDAwLCAweEVDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDdGLCAweDAwLCAweDNDLCAweDAzLAorMHgxMCwgMHg0QiwgMHhDMCwgMHgwRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxRSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MzUsIDB4MjAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDgzLCAweDcwLCAweDBELAorMHhDMCwgMHgwNywgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5RiwKKzB4MDIsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzIsIDB4QTcsIDB4MDEsIDB4OTMsIDB4MDYsIDB4N0MsIDB4NDcsIDB4MzAsCisweDQ5LCAweEMwLCAweDg3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDAxLCAweEM0LCAweDA4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgyMCwgMHg5RCwgMHg4MCwgMHg3NCwKKzB4MDMsIDB4RDAsIDB4NEQsIDB4NjAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDAsIDB4QzQsIDB4ODMsIDB4MTAsIDB4MEYsIDB4NDQsCisweEE3LCAweDFBLCAweDkxLCAweDAwLCAweEJDLCAweDEzLCAweEQwLCAweDBGLCAweDQwLCAweDNDLCAweDAwLCAweDlELCAweDAwLAorMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHg4MywgMHgwMSwgMHhDMSwgMHg1MSwgMHhDNCwgMHgwQiwgMHg1MCwgMHgwOSwKKzB4NDAsIDB4ODcsIDB4MDAsIDB4REMsIDB4MDAsIDB4NzQsIDB4MEEsIDB4RDAsIDB4OTksIDB4NDAsIDB4NkQsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDEzLAorMHhEMCwgMHgyQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHg1NCwgMHgwMywgMHg1OCwgMHgwQywgMHg0MSwgMHgyMywKKzB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4OTAsIDB4MEMsIDB4NDQsIDB4MzAsIDB4MDAsIDB4MEQsIDB4ODAsIDB4MTQsCisweDAwLCAweEQxLCAweDAwLCAweDQwLCAweDgyLCAweDA4LCAweEM1LCAweDYzLCAweDE0LCAweDAzLCAweDEwLCAweDNDLCAweDQwLAorMHhDMywgMHgwMywgMHhDRCwgMHgwMCwgMHgzNCwgMHgxNiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4ODAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4ODEsIDB4QjQsIDB4MjcsIDB4RDAsCisweDFFLCAweDQwLCAweDdCLCAweDAwLCAweENELCAweDg5LCAweDg0LCAweDA3LCAweDE4LCAweDFFLCAweDQwLCAweDZGLCAweDAxLAorMHgyMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhDMCwgMHgxQywgMHg0OCwgMHg3OCwgMHgwMCwgMHhCRCwgMHg0MSwgMHg4NCwgMHgwNywKKzB4RDAsIDB4MUEsIDB4NDEsIDB4NUYsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4NEIsCisweDAxLCAweEVELCAweDIxLCAweEI0LCAweDA0LCAweEQwLCAweDVBLCAweDQwLCAweDNELCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHg4RiwgMHgwOCwgMHgzQywgMHgwMywgMHhGMCwgMHg4QywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MUMsIDB4MjMsIDB4NzAsIDB4MUMsIDB4QzAsIDB4NjMsIDB4MjEsIDB4ODMsCisweDAyLCAweDNFLCAweDAzLCAweEIwLCAweDhDLCAweEMwLCAweDMwLCAweDAwLCAweENGLCAweDA4LCAweDFDLCAweDAyLCAweEYwLAorMHgwNCwgMHhDMCwgMHgzMywgMHgwMSwgMHg4NywgMHgwNCwgMHgxQywgMHgyMywgMHgzOCwgMHgwQywgMHhDMSwgMHgwMywgMHgwMiwKKzB4Q0YsIDB4MDAsIDB4M0MsIDB4RTMsIDB4RjAsIDB4MDAsIDB4QzEsIDB4NDgsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDdELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDg3LCAweEYwLCAweDlGLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGRiwgMHg1MCwgMHhGQywgMHgwMywgMHhGMiwgMHg4RiwgMHhDMCwgMHgyRiwgMHg0MiwgMHhCRiwgMHgwOCwKKzB4REMsIDB4MDMsIDB4RjgsIDB4MEYsIDB4QzIsIDB4M0YsIDB4OTQsIDB4RkYsIDB4NDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEQsCisweDQwLCAweDNGLCAweDQwLCAweEJCLCAweDAwLCAweDVDLCAweDYzLCAweEYwLCAweDBGLCAweEM4LCAweDBGLCAweDAzLCAweEZGLAorMHgwMSwgMHhGQywgMHgwMywgMHhGMCwgMHg0MywgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4ODAsIDB4OUUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAyLCAweERGLCAweDExLCAweDRDLCAweDUzLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDlGLCAweDIwLCAweDRDLAorMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHhGNywgMHgwMSwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MiwgMHgxRCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NDQsIDB4QzAsIDB4REIsIDB4MDEsCisweDRDLCAweDAxLCAweEQwLCAweDFELCAweDQwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHg4OCwgMHgzOSwgMHgwMSwgMHhBRCwgMHgwMCwgMHgzNCwgMHg4QiwgMHgxMCwgMHgyRSwgMHg0OCwgMHgzQiwgMHgzMSwKKzB4RUQsIDB4MDQsIDB4QUMsIDB4MDMsIDB4RDAsIDB4MkUsIDB4NDAsIDB4MEIsIDB4MjgsIDB4M0QsIDB4MDAsIDB4ODQsIDB4M0IsCisweEQwLCAweEFFLCAweEMwLCAweDM5LCAweDBBLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDAwLCAweDM4LAorMHgwMCwgMHhFRCwgMHg4MCwgMHg4NCwgMHgxMywgMHhEMiwgMHgwQSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhDNSwgMHgwMiwgMHg5NCwKKzB4MDEsIDB4RDAsIDB4MEYsIDB4NDAsIDB4NEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDc5LCAweDAyLCAweEE1LCAweDQzLCAweEI0LCAweDE3LCAweDEwLCAweDVFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHg4NCwgMHgyNywgMHg1OCwgMHg1RSwgMHg0NCwgMHg2QiwgMHgxMCwgMHhBRCwgMHgxMSwgMHg4NSwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDYsIDB4NzMsIDB4MDEsIDB4RTksIDB4OTEsIDB4QjQsIDB4ODcsIDB4NDIsIDB4MUUsIDB4NDAsIDB4N0EsIDB4MDAsCisweEZELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDBBLCAweDQxLCAweEM4LCAweDQwLCAweEVELCAweDA1LCAweDg0LCAweDA1LAorMHhEMCwgMHgxQSwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDczLCAweDAyLCAweENELCAweDAzLCAweDQ0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMSwgMHgwMCwgMHhDOSwgMHgwMSwgMHgzNCwgMHgxNywgMHhEMCwgMHg1QywgMHg0MiwgMHhGMiwgMHgwMCwgMHhDRCwKKzB4ODAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MzgsIDB4NDAsIDB4NzAsIDB4NDEsIDB4Q0QsIDB4NDAsIDB4MTQsIDB4NjMsIDB4RDAsCisweDNDLCAweDQ5LCAweDU4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LAorMHgwMCwgMHg3RiwgMHgwMCwgMHgzQywgMHgwMSwgMHhCMCwgMHgwNCwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywKKzB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4OUYsIDB4MDAsIDB4N0YsIDB4MDEsIDB4NDQsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzQsCisweDE3LCAweDAwLCAweDdCLCAweDAyLCAweEY0LCAweDE1LCAweDcwLCAweDE3LCAweEQwLCAweDlBLCAweDEwLCAweDdGLCAweDEwLAorMHg1QywgMHgwMSwgMHhGMCwgMHgwNywgMHhDMCwgMHgxQywgMHgwMCwgMHg1RiwgMHgwMCwgMHhDQywgMHgwNSwgMHhGMCwgMHg1NywKKzB4RDAsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsCisweDFGLCAweDA0LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDNDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDNCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3QywgMHg4OCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwKKzB4MDAsIDB4MTcsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDUsIDB4MDIsIDB4MUYsIDB4MDAsIDB4NzUsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDE3LCAweDgwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLAorMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NEMsIDB4MTIsIDB4MzAsIDB4MjksIDB4QzIsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsCisweDQ5LCAweEMwLCAweDI0LCAweDA2LCAweDlGLCAweDEwLCAweDRDLCAweDIyLCAweDMwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLAorMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMiwgMHg1OSwgMHhDMCwgMHgyNywgMHgyNiwgMHg5MywgMHg4MCwgMHg3RCwgMHgwQSwKKzB4RjAsIDB4MTksIDB4QzEsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NTksIDB4QzAsIDB4NDMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDJFLCAweDAwLCAweDhELCAweDAwLAorMHhDNCwgMHgxRSwgMHgxMCwgMHgyQiwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHg3OSwKKzB4NDAsIDB4NjUsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NjgsIDB4MDYsIDB4NTAsIDB4MDksIDB4NjAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAwLCAweDVDLCAweDAyLCAweEIxLCAweDM5LCAweEMyLCAweEU3LCAweDAwLCAweDgxLCAweDgyLCAweDZDLCAweDFBLCAweEQwLAorMHg4OSwgMHhDMCwgMHgyNSwgMHgwMCwgMHhCRCwgMHgwMywgMHgzNCwgMHgxQSwgMHgxMiwgMHg0OSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MjAsIDB4OUQsIDB4NDAsIDB4NDQsCisweDAyLCAweDEwLCAweDI5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDE4LCAweDA5LCAweDQyLAorMHgyNCwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxMiwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwgMHg2MCwKKzB4MzQsIDB4MDIsIDB4NTgsIDB4MkQsIDB4NDAsIDB4QTcsIDB4ODAsIDB4RDEsIDB4OTgsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQwLCAweDc0LCAweDIyLCAweDE0LCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg5RCwgMHgwMiwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4QTAsIDB4MDAsIDB4OEQsIDB4MDYsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjEsCisweDAwLCAweDhELCAweDA4LCAweDQ1LCAweDgzLCAweDVBLCAweDg4LCAweDYwLCAweDIzLCAweDgyLCAweDhELCAweDA4LCAweDM0LAorMHgyMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MzEsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDQ2LCAweDAwLCAweDFGLCAweDAwLCAweDRELCAweDA0LCAweDM0LAorMHgxMSwgMHg1MCwgMHgwNCwgMHgwNSwgMHgwRiwgMHgwMCwgMHg3QywgMHg3OCwgMHgzMCwgMHg0MSwgMHg0MSwgMHgwNCwgMHgwMCwKKzB4MUQsIDB4MDIsIDB4NDQsIDB4NTAsIDB4MzEsIDB4NjEsIDB4NDEsIDB4ODcsIDB4MDUsIDB4MTcsIDB4NDIsIDB4NzQsIDB4MDgsCisweDc0LCAweDIwLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDQwLCAweDZDLCAweDUwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHg4MSwgMHg3QywgMHgwMCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4QTcsIDB4MDAsIDB4QkYsIDB4MDEsIDB4N0MsIDB4MEEsIDB4RjEsIDB4MjksCisweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDA5LCAweDdDLCAweDgyLCAweEY0LCAweDA5LCAweEMwLCAweDJGLCAweDIwLCAweEJGLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMSwgMHhGRiwgMHgyNCwgMHhEQywgMHgxMiwgMHgwMCwKKzB4NEIsIDB4QzAsIDB4MkQsIDB4NDAsIDB4QUYsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzgsIDB4MzksIDB4MDAsCisweDlGLCAweDIyLCAweEZDLCAweDAzLCAweEYwLCAweDhCLCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHg2NywgMHgwMSwgMHg5MywgMHgwMiwgMHhDQywgMHgwNiwgMHhGMCwgMHgxQiwgMHhDMCwKKzB4MjUsIDB4MDIsIDB4OUIsIDB4RTAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NEIsIDB4QzUsIDB4MkYsIDB4MDAsIDB4OTMsIDB4MDAsCisweERDLCAweDAyLCAweDM4LCAweDg5LCAweEMwLCAweDI3LCAweDQ5LCAweDkzLCAweDAwLCAweDVFLCAweDIyLCAweDMwLCAweDBCLAorMHg0MCwgMHgyQywgMHgwMCwgMHhBMywgMHgwMCwgMHhDQywgMHgxMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCQiwKKzB4MTEsIDB4RkMsIDB4ODIsIDB4RTAsIDB4MEIsIDB4RDAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDA4LCAweDBCLCAweDAxLCAweDQ1LCAweDAwLCAweEQwLCAweDAxLCAweDQ2LCAweDQ3LAorMHgwMSwgMHgxRCwgMHg5RCwgMHg3NCwgMHg1MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgxMCwgMHg1QywKKzB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4MDcsIDB4MjUsIDB4MTEsIDB4MDQsIDB4NUMsIDB4MTAsIDB4MTAsIDB4MDEsIDB4NTEsCisweDA0LCAweDIwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQyLCAweDA1LCAweDQ4LCAweDA3LCAweDEwLCAweDEzLCAweDQyLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgwNSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4QTAsIDB4QTMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MjgsIDB4NDAsIDB4MjMsIDB4MDIsCisweDhELCAweDAwLCAweDM0LCAweDMyLCAweEQwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDgxLCAweDA0LCAweDE0LCAweDIyLAorMHg5MCwgMHgwOCwgMHg0NCwgMHgyMywgMHgwMywgMHg4OSwgMHgxNCwgMHg1NCwgMHgxMiwgMHgxOCwgMHg0OCwgMHg0MCwgMHgyMiwKKzB4NDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MjIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODksIDB4MDAsIDB4MzQsCisweDAyLCAweEQxLCAweDA4LCAweDQwLCAweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHg4OCwgMHgyNSwgMHgwMCwgMHg4OSwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4ODAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4MDAsIDB4QTcsIDB4NDIsIDB4OTEsIDB4MDIsIDB4NTQsIDB4MDIsIDB4OTgsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDI2LCAweDIwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4NjAsIDB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsCisweDI1LCAweDAwLCAweEIzLCAweDgxLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDJGLCAweDA4LCAweEJCLCAweDgwLAorMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHg4MCwgMHg2NSwgMHgwMCwgMHg5MywgMHgwMCwgMHgxQywgMHgwMiwgMHg5MCwgMHgwOSwKKzB4NDgsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDMsIDB4MUMsIDB4MUEsIDB4MzAsIDB4NTksIDB4QzAsIDB4MjIsIDB4MDEsIDB4ODMsCisweEE3LCAweDRDLCAweDAyLCAweEQwLCAweDI5LCAweEM0LCAweDY3LCAweDAwLCAweDlCLCAweDgwLCAweDdDLCAweDJBLCAweEYwLAorMHgyOSwgMHhDMCwgMHgxNCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4MDEsIDB4NzAsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4ODAsIDB4OUMsIDB4QTAsIDB4N0MsCisweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDAzLCAweDdFLCAweDAyLCAweDUwLCAweDA5LCAweEM0LAorMHgyNywgMHgwMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHhGNCwgMHg0OSwgMHhFMCwgMHg2NSwgMHgwMSwgMHg5QywgMHg0NCwKKzB4NUMsIDB4NDIsIDB4RjAsIDB4MDksIDB4MDAsIDB4NjcsIDB4MDQsIDB4OUYsIDB4MjAsIDB4N0UsIDB4MDYsIDB4RDAsIDB4NTgsCisweEMxLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDAxLCAweDAwLAorMHgxRiwgMHgwMCwgMHg1QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhFMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4MzEsIDB4MDEsIDB4RTAsIDB4MDYsIDB4MTEsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4OTAsIDB4MDEsIDB4QzgsIDB4MDMsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDgwLCAweEY4LCAweDAxLCAweEMwLCAweDg2LCAweDAwLCAweDFGLCAweDgwLCAweDVDLAorMHgwMCwgMHg2MCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgxRiwgMHgwNCwgMHg0RCwgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwKKzB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4NUQsCisweDAwLCAweEQ0LCAweDBELCAweEQ4LCAweDA3LCAweDYwLCAweDE3LCAweDEwLCAweDVFLCAweDAwLCAweDc0LCAweDAxLCAweDEwLAorMHg1NywgMHhFMCwgMHg5QiwgMHg4MCwgMHg1RCwgMHgyMCwgMHhGNCwgMHgwMSwgMHhCMiwgMHgwNSwgMHhDMCwgMHgxNywgMHg4MCwKKzB4NUQsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MTcsIDB4QzAsIDB4MUMsIDB4MDAsIDB4N0QsIDB4MDIsIDB4QzQsIDB4MDEsCisweEIwLCAweDE3LCAweDQwLCAweDk4LCAweDAwLCAweDdGLCAweDAzLCAweEM0LCAweDQ1LCAweEQyLCAweDA3LCAweDQ4LCAweDQxLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MDQsIDB4MkUsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MzEsIDB4ODAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTMsIDB4MTgsCisweDYwLCAweDMyLCAweDgwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweDE4LCAweDBDLCAweDQwLCAweDMzLCAweDEwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHg3QywgMHg1MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgxQSwgMHgxNiwgMHgwQiwgMHgxMCwKKzB4MDQsIDB4MDAsIDB4RjEsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MUUsIDB4RDAsIDB4OEMsIDB4NDAsIDB4NDAsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDA0LCAweDk0LAorMHgwMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhFRCwgMHgwNCwgMHgzNCwgMHgwNywgMHgxOCwgMHgwQSwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4RUQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4OTIsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDEsIDB4RUQsIDB4MDAsCisweEI0LCAweDAzLCAweDUwLCAweDBFLCAweDQxLCAweDI4LCAweDEwLCAweEFELCAweDQwLCAweDg0LCAweDA0LCAweDkwLCAweDNFLAorMHg0MCwgMHgzOCwgMHgwMCwgMHhBRCwgMHg4MywgMHg4NiwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgxMSwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDMsIDB4OTQsIDB4MDcsCisweDcwLCAweDFBLCAweEMwLCAweDc5LCAweDAxLCAweEVELCAweDA1LCAweEI0LCAweDM3LCAweDMxLCAweDFFLCAweDQwLCAweDdBLAorMHgwOCwgMHhFRCwgMHgwQiwgMHhCNCwgMHgwNiwgMHgzNCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMiwgMHhFRCwgMHg4NSwgMHhCQywKKzB4MjcsIDB4RDgsIDB4MTcsIDB4RTAsIDB4NjgsIDB4MDAsIDB4QUYsIDB4ODEsIDB4OUMsIDB4MDQsIDB4NzgsIDB4MTYsIDB4QzAsCisweDc5LCAweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDFCLCAweEMwLCAweDUwLCAweDYwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgxMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MkIsIDB4RjQsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDBELCAweEMwLCAweDM1LCAweDgyLCAweERGLCAweDNFLCAweDVDLCAweDNCLAorMHg3MCwgMHgwMSwgMHhFMCwgMHgyNSwgMHgyMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMCwgMHg3MCwgMHgwRCwgMHhDMiwgMHgyNywKKzB4MDAsIDB4QzcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdGLCAweDAwLCAweEVGLCAweDA5LCAweENDLCAweDMyLCAweEY4LCAweDhCLAorMHhDMCwgMHg3QywgMHgwNCwgMHhGRiwgMHgxMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxQiwgMHhDOCwgMHg3RiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4REUsIDB4MDYsIDB4RjAsIDB4QkQsIDB4QzEsIDB4NzQsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsCisweDFCLCAweEMwLCAweDZDLCAweDAwLCAweDlCLCAweDg5LCAweEZDLCAweDI1LCAweEYwLCAweDE3LCAweEMwLCAweDdDLCAweDAwLAorMHhCQiwgMHgwMSwgMHhCQywgMHgwNywgMHgzOCwgMHg5RiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MUMsIDB4ODQsIDB4MjIsIDB4RDgsIDB4MEEsIDB4QzAsCisweDNBLCAweEEwLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDEzLCAweDAwLCAweEVELCAweDAwLAorMHg4QywgMHgxMiwgMHhEMCwgMHg1RSwgMHg0MCwgMHg3OCwgMHgwMiwgMHhFRCwgMHgwMCwgMHg5QywgMHg0MywgMHhEMCwgMHgwQiwKKzB4NjAsIDB4MjgsIDB4MDYsIDB4QUQsIDB4MDUsIDB4QjQsIDB4MjQsIDB4RDIsIDB4MEUsIDB4QzAsIDB4M0EsIDB4ODAsIDB4QTUsCisweDAwLCAweEI0LCAweDA5LCAweEYyLCAweEMyLCAweDQwLCAweDU3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwOCwgMHgzOSwgMHgwMCwgMHhGRCwgMHg4MSwgMHhBNCwgMHgwMywgMHhEOCwgMHg4OCwgMHg0MCwgMHg3OCwKKzB4MDIsIDB4RTUsIDB4MDEsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDIsIDB4RkQsIDB4MTgsIDB4OTQsCisweDAyLCAweEQxLCAweDRFLCAweDU0LCAweDNBLCAweDEwLCAweEVELCAweDAwLCAweEI0LCAweDIzLCAweEQwLCAweDBFLCAweDQwLAorMHgyOCwgMHgwMCwgMHhBOSwgMHgxNCwgMHhCNCwgMHg4MCwgMHhEOCwgMHg4NiwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAxLCAweEQwLCAweDA4LCAweDY0LCAweDMyLCAweDAwLAorMHhDRCwgMHg4MCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg2MCwgMHgxMywgMHgwMCwgMHhDRCwgMHg4MSwgMHgwNCwgMHgwMiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4NDAsIDB4NTQsIDB4MEYsIDB4RDEsIDB4MjgsIDB4NDQsIDB4RTAsCisweDEwLCAweDhELCAweDQwLCAweDM0LCAweDAwLCAweEQwLCAweDg4LCAweDQwLCAweDYzLCAweDAwLCAweEM1LCAweDAwLCAweDM0LAorMHgwOSwgMHg1MiwgMHgzMCwgMHg0MCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4NDEsIDB4NkQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDA5LCAweEM4LCAweEY3LCAweDA4LCAweEZGLCAweDAzLCAweDU0LCAweDgzLCAweEQyLAorMHgwRiwgMHg0OCwgMHgzRSwgMHgwMCwgMHhGRiwgMHgwOCwgMHhGNCwgMHgwQiwgMHhEMCwgMHgyRCwgMHhEMCwgMHgzNCwgMHgwMiwKKzB4OEIsIDB4MDEsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MEMsIDB4QzAsIDB4QjUsIDB4MDYsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MEEsCisweDEwLCAweDIxLCAweEMwLCAweDU3LCAweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgzMywgMHgwMCwgMHhERiwgMHgxMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MjksIDB4QzQsIDB4NzcsIDB4MDQsIDB4REYsIDB4MDQsIDB4MUMsIDB4MEEsIDB4RjAsIDB4MEQsCisweEMwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweEE3LCAweDA4LCAweDlGLAorMHg2MCwgMHg3QywgMHg4OCwgMHhGMSwgMHgyRCwgMHg0MCwgMHhCNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4QTEsIDB4QzgsIDB4MzcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsCisweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDEyLCAweDMwLCAweDJGLCAweEMwLCAweDNGLCAweDIwLCAweEYzLCAweDQwLCAweEZDLAorMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwgMHgyQywgMHgwMiwgMHhGRiwgMHg4MCwgMHhGQywgMHg4NywgMHgzMCwgMHgwRiwgMHhEMCwKKzB4M0MsIDB4MDAsIDB4RjUsIDB4MDAsIDB4Q0QsIDB4NDMsIDB4QjAsIDB4MDcsIDB4QzAsIDB4N0YsIDB4MDAsIDB4QkYsIDB4MDAsCisweENDLCAweDgwLCAweEYwLCAweDBGLCAweDgwLCAweDNDLCAweDAwLCAweEIzLCAweDA0LCAweEZDLCAweDQwLCAweEYwLCAweDBBLAorMHhDMSwgMHgwNCwgMHgyNiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgyMCwKKzB4RDEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4OTQsIDB4MDUsIDB4QzAsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsCisweEQwLCAweDg0LCAweDQxLCAweDI1LCAweDAwLCAweERELCAweDIwLCAweDc0LCAweDAxLCAweDEwLCAweDBELCAweDQwLCAweDM0LAorMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhCMCwgMHgyMSwgMHg0MCwgMHgxNywgMHgwMCwgMHg5RCwgMHgyMywgMHg0NCwKKzB4NEMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4NjAsIDB4ODQsIDB4OTUsIDB4MDcsIDB4NzQsIDB4MEMsIDB4RDAsIDB4MzksIDB4NTAsCisweDA0LCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweEMwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwMiwgMHg5MCwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwKKzB4MDksIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NjQsIDB4MUIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsCisweEQ1LCAweDAwLCAweDY0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweEI3LCAweDAxLCAweDlELCAweDExLCAweDQ0LCAweDA0LAorMHhEMCwgMHgwRCwgMHg0MSwgMHg0NSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwNiwgMHg1MCwgMHgxMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsCisweDM0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LAorMHg0MCwgMHgxMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxNCwgMHg0QywgMHg0MCwgMHgzMCwgMHgwNCwgMHhDNSwKKzB4MjAsIDB4MDQsIDB4MDMsIDB4RDQsIDB4MDAsIDB4NDQsIDB4MjMsIDB4ODAsIDB4OEQsIDB4MzAsIDB4MDUsIDB4NDAsIDB4RDAsCisweDBELCAweDQwLCAweDI1LCAweDAwLCAweDg1LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhGMywgMHg0MCwgMHg3QywKKzB4MDMsIDB4MzAsIDB4MEQsIDB4QzQsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkQsIDB4QzIsCisweEE0LCAweDAyLCAweEZELCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBFLCAweEMwLCAweDNDLCAweDAxLCAweEY3LCAweDAwLAorMHhDQywgMHgwMywgMHgzMiwgMHgwNSwgMHhDMiwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgxMCwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MjUsIDB4MDAsIDB4NTEsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDksIDB4QzAsIDB4MDQsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI1LCAweEE4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLAorMHg3OCwgMHgwNywgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg0NywgMHhDMSwgMHgwRiwKKzB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MkYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsCisweDAzLCAweDMwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDNGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBBLCAweDQwLAorMHgyQSwgMHgwOCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4M0YsIDB4MDgsIDB4QTMsIDB4MDAsIDB4RkMsIDB4MzMsIDB4MzAsCisweDlCLCAweEMwLCAweEVGLCAweDAwLCAweEZGLCAweDAzLCAweDlELCAweDI3LCAweEIwLCAweDFGLCAweEMwLCAweDdDLCAweDAyLAorMHhGQiwgMHgwOSwgMHhDRCwgMHgwNywgMHg3MCwgMHgxRiwgMHhDOCwgMHg3QSwgMHgwOCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzEsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksIDB4RkUsIDB4MjcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0EsCisweDQwLCAweEIzLCAweDAxLCAweEZDLCAweDAwLCAweDMwLCAweDI2LCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzQiwgMHgzOCwgMHhEMSwgMHg0MywgMHhGNCwgMHgxMywgMHgxMiwgMHg0QywKKzB4NDQsIDB4MjcsIDB4MTEsIDB4MUMsIDB4ODQsIDB4NDQsIDB4MTAsIDB4MTAsIDB4MTEsIDB4NTAsIDB4MDQsIDB4MDEsIDB4MTEsCisweDA0LCAweDQ0LCAweEQwLCAweDUwLCAweDExLCAweDQwLCAweDA3LCAweDA1LCAweDBELCAweDEwLCAweDM0LCAweDQwLCAweDEwLAorMHg0MSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHg0NCwgMHg1QywgMHgxMCwgMHgxMCwgMHgxMSwgMHg0MCwgMHg0NCwgMHgwMCwKKzB4OTEsIDB4MDEsIDB4NUMsIDB4MEMsIDB4MTQsIDB4NDUsIDB4NDAsIDB4MEYsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweEEwLCAweDIzLCAweDA1LCAweDgxLCAweDIyLCAweDE0LCAweDMzLCAweDEwLCAweDBDLCAweDQ4LAorMHgyMSwgMHgwMSwgMHhDRCwgMHgwMCwgMHg0NCwgMHgxMywgMHg1NCwgMHgwRCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHg4MCwKKzB4MDQsIDB4MDMsIDB4NTYsIDB4MEMsIDB4NDQsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4MzQsIDB4MTMsIDB4OTAsIDB4NEMsCisweDQwLCAweDMzLCAweDA1LCAweENELCAweDIwLCAweDM0LCAweDEzLCAweDEwLCAweDBELCAweDQwLCAweDMwLCAweDAwLCAweDAxLAorMHgwMSwgMHgzNCwgMHgwQSwgMHhEMCwgMHg0MCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODgsIDB4MzUsIDB4NDAsIDB4RDEsIDB4ODQsIDB4NzQsIDB4MDMsIDB4MTQsIDB4M0QsIDB4NDAsIDB4MjcsCisweDIwLCAweDBELCAweDAwLCAweDU0LCAweDAwLCAweDkwLCAweDAxLCAweDQyLCAweDA1LCAweDAwLCAweDAxLCAweDAwLCAweDQ0LAorMHgwMCwgMHg1NCwgMHgwMSwgMHg2MCwgMHgwNywgMHgwMCwgMHgxRCwgMHg4MCwgMHg3MCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MUQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4MTgsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4NTEsIDB4MDEsCisweDc0LCAweDAwLCAweEQxLCAweDAxLCAweDQwLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwMSwgMHg1QywgMHgwMywgMHgzMCwgMHgzRCwgMHhDMCwgMHg2NSwgMHgwQSwKKzB4REYsIDB4MDAsIDB4NEMsIDB4ODMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzUsIDB4NDAsIDB4REIsIDB4ODAsIDB4MDgsIDB4MDMsCisweDc0LCAweDBELCAweEM0LCAweDM2LCAweDEwLCAweERGLCAweDAwLCAweDc4LCAweDAzLCAweEEwLCAweDBELCAweEMwLCAweDM3LAorMHg4MCwgMHhERiwgMHgwMCwgMHg3NCwgMHgwMywgMHgzNCwgMHgwQywgMHhDMiwgMHgzNiwgMHgwMCwgMHg5MSwgMHgwMSwgMHgzQywKKzB4MTUsIDB4RjAsIDB4MTUsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDg4LCAweDNELCAweDAwLCAweEZGLCAweDIxLCAweEY0LCAweDAzLCAweEQwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweDNGLAorMHg0MCwgMHhFNCwgMHgwMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHg0MCwgMHhGMCwKKzB4MDMsIDB4MDAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MzAsIDB4RkMsIDB4ODAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4QTAsCisweDNGLCAweDQwLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDE0LCAweEZGLCAweDAwLCAweERDLCAweDI0LAorMHgzMCwgMHg0NywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwKKzB4NjEsIDB4MTAsIDB4OUIsIDB4MDEsIDB4NkMsIDB4MDMsIDB4MzQsIDB4M0QsIDB4QzAsIDB4MjQsIDB4MDAsIDB4RDMsIDB4NTAsCisweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDc3LCAweDAwLCAweEQzLCAweDA4LCAweDRDLCAweDA3LCAweEIwLCAweDRELAorMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMSwgMHg0QywgMHg4MywgMHgzMCwgMHgxRCwgMHhDMSwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDEsIDB4N0MsIDB4OTcsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MTAsIDB4N0MsIDB4MjAsIDB4MzAsCisweDI1LCAweEQwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEI0LAorMHgwMiwgMHhEMSwgMHgyMCwgMHhENCwgMHgyQiwgMHgxMCwgMHgyRCwgMHg0MCwgMHg2NCwgMHgwMSwgMHgxQSwgMHgwMywgMHgzQywKKzB4MDAsIDB4MTQsIDB4NDAsIDB4NDIsIDB4ODcsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NTEsIDB4QzAsCisweDA1LCAweDQwLCAweDE1LCAweDAxLCAweDQ0LCAweDA0LCAweDEwLCAweDExLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDIxLAorMHg3NCwgMHgwQywgMHhEMCwgMHgwMSwgMHg0NCwgMHhDMCwgMHgwNCwgMHg1OSwgMHgwMywgMHg3NCwgMHgyMCwgMHgwMCwgMHhCNSwKKzB4NDAsIDB4MEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MjAsIDB4MzAsIDB4MDAsCisweDg5LCAweDQwLCAweDQ0LCAweDAzLCAweDkwLCAweDJDLCAweDQxLCAweDYwLCAweDAwLCAweEM5LCAweDAyLCAweDM0LCAweDAzLAorMHgxMCwgMHgxQywgMHg0MCwgMHhCNywgMHgwNCwgMHhDMSwgMHgwMSwgMHgxNCwgMHgwMywgMHg5MCwgMHgyQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4QzksIDB4MDIsIDB4NTQsIDB4MjcsIDB4OTEsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDBCLCAweEQwLCAweDBDLCAweDQwLCAweEYwLCAweDQwLCAweDg5LCAweDAzLCAweDE0LCAweDBDLCAweDEwLCAweDlDLCAweDQwLAorMHg0QywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHg3OCwgMHgwMCwgMHhGMSwKKzB4MDEsIDB4MTQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NjgsIDB4MDAsIDB4MjksIDB4MTEsIDB4QzQsIDB4MDQsIDB4MTAsCisweDkyLCAweDQ4LCAweDRCLCAweDAwLCAweDIxLCAweDAzLCAweDk0LCAweDA0LCAweDEyLCAweDEyLCAweDQwLCAweDRELCAweDIwLAorMHgyOSwgMHgwOSwgMHg5NSwgMHgwQywgMHg1MCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgyMCwgMHgyQywgMHg0MSwgMHhCMCwgMHgwNCwKKzB4RDAsIDB4MTMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4QTksIDB4MjksIDB4QjQsIDB4MTcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4M0MsCisweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDE4LCAweDIwLCAweDAwLCAweDhCLCAweDAwLAorMHgwQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgyNCwgMHgwMCwgMHhDQiwgMHg4OCwgMHgzNCwgMHgyMywgMHgzMSwgMHgwQywKKzB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4ODAsIDB4NUMsIDB4MjMsIDB4QjAsIDB4OEMsIDB4QzAsIDB4MzMsIDB4MDIsIDB4Q0YsCisweDAwLCAweDFDLCAweDIzLCAweDMwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDNDLCAweDAzLCAweEYyLAorMHgwQywgMHhDNCwgMHgzMCwgMHgwMCwgMHg0MywgMHgzMCwgMHgxQywgMHgwMywgMHgzMCwgMHg3QywgMHhDMCwgMHg0OCwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsCisweDRCLCAweDUwLCAweDBGLCAweEMwLCAweDJGLCAweDAyLCAweDNGLCAweDI4LCAweEZFLCAweDAwLCAweEYyLCAweDAzLCAweDQ4LAorMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHg4MCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzNywgMHgwMCwKKzB4RUMsIDB4MDAsIDB4QjAsIDB4ODMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDIsCisweEMwLCAweDRGLCAweDQwLCAweDc3LCAweDAwLCAweDNDLCAweDEzLCAweEYyLCAweDhELCAweEMwLCAweDBCLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgxMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUMsIDB4QzAsIDB4MzAsCisweDQwLCAweEQzLCAweDAwLCAweDZGLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDRELAorMHgwMywgMHhGMCwgMHgxRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgyMSwgMHg0RCwgMHgwNywgMHgyNCwgMHgwRCwgMHhDMCwKKzB4MzMsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NEMsIDB4MDcsIDB4MzIsIDB4MTUsIDB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDIyLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLAorMHgwRiwgMHg1MCwgMHgyOCwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCQywgMHgwMCwgMHhEMCwgMHgwMiwgMHg0OCwgMHgwOSwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDIsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4M0QsIDB4MDAsIDB4ODQsIDB4MDAsCisweEQwLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDNELCAweDAwLCAweEM0LCAweDAwLCAweDEwLCAweDAyLCAweDQ0LCAweDBCLAorMHgwMCwgMHhFMSwgMHgyMCwgMHhBQywgMHgwMywgMHhCMCwgMHgwNywgMHhDMCwgMHg0RSwgMHg2OCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NjksIDB4MTAsIDB4RUQsIDB4MDMsIDB4OTQsIDB4MTcsIDB4RDAsIDB4MUUsCisweDQwLCAweDY4LCAweDA0LCAweEVELCAweDQxLCAweEI0LCAweDA3LCAweDUwLCAweDFFLCAweDQ0LCAweDdDLCAweDIwLCAweEY5LAorMHg4MSwgMHg4NCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFNSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4ODcsIDB4MTgsIDB4MUUsIDB4NDAsIDB4N0IsIDB4NDAsCisweDcxLCAweDAxLCAweDA0LCAweDA3LCAweDEwLCAweDE2LCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgyNCwgMHg0QywKKzB4MzAsIDB4MTAsIDB4MEQsIDB4MDAsIDB4MTIsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTAsIDB4MDksIDB4QzAsCisweDA0LCAweDgwLCAweEQwLCAweDAwLCAweDQyLCAweDAzLCAweDA4LCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAwLAorMHg0MCwgMHgwMSwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHg1MSwKKzB4MDMsIDB4MjQsIDB4Q0YsIDB4MTIsIDB4MzQsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEEwLCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEQwLCAweDI3LCAweEMwLCAweDU0LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3MCwgMHgwNSwgMHhDNCwgMHgxNCwgMHgwMCwgMHg0QiwgMHgwMCwgMHg2QywKKzB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDQ0LCAweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDEzLCAweDAwLCAweDcxLCAweDA3LAorMHhDQywgMHgxMSwgMHgxNCwgMHgxNywgMHg0MCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzEsIDB4MDcsIDB4MDAsCisweDNELCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDM3LCAweDAyLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRSwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4NDAsIDB4MUYsIDB4MDYsIDB4N0MsCisweDAwLCAweEYwLCAweEExLCAweEM5LCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyMSwgMHgwMCwgMHg5MywgMHgwMCwgMHgzQywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgxMCwgMHg5RiwKKzB4MDEsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4RTcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NkMsIDB4MDYsIDB4RjAsCisweDk5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDM0LCAweDU5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5QiwgMHgwMCwgMHg2QywgMHgwMiwKKzB4RjAsIDB4NDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsCisweDI2LCAweDQwLCAweDkxLCAweDgwLCAweDc0LCAweDQyLCAweDEwLCAweEE5LCAweDQxLCAweDI0LCAweDAwLCAweDhELCAweDA5LAorMHg1RSwgMHgyQSwgMHhEMCwgMHgxOSwgMHg0MCwgMHg2MywgMHg0MCwgMHg5MSwgMHgwMiwgMHg0NSwgMHgxQSwgMHhEMCwgMHg2OSwKKzB4QzIsIDB4MjYsIDB4MDgsIDB4OUQsIDB4MDIsIDB4NDQsIDB4NDIsIDB4MTAsIDB4MzksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAyLCAweDc0LCAweDBBLCAweEQwLCAweDA5LCAweDQ4LCAweDY3LCAweDA0LCAweDkxLCAweDgyLCAweDQ0LCAweDg2LCAweEQwLAorMHg2OSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHg2NCwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4QzQsCisweDQyLCAweEQwLCAweDRCLCAweDQwLCAweDJGLCAweDAwLCAweEI5LCAweDAzLCAweEM0LCAweDEyLCAweEQwLCAweDBCLCAweDQwLAorMHgyQywgMHgwMCwgMHhCRCwgMHgwMCwgMHhDNCwgMHgwNiwgMHg5MiwgMHgwQiwgMHg0NCwgMHgyRiwgMHgwMCwgMHhCRCwgMHhDMCwKKzB4RjQsIDB4MDIsIDB4RDAsIDB4MUIsIDB4NDAsIDB4MkYsIDB4NDEsIDB4OTEsIDB4MDgsIDB4NjQsIDB4MjIsIDB4RDAsIDB4MDksCisweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDJBLCAweDIwLCAweDAxLAorMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHgxOCwgMHgwOCwgMHg1MCwgMHgyMCwgMHgwMCwgMHhCQywgMHgwMCwgMHg4NCwgMHgwMiwKKzB4RDAsIDB4MEEsIDB4NDAsIDB4NkYsIDB4MDAsIDB4QjksIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkEsCisweDAwLCAweEFELCAweDAxLCAweDg0LCAweDAyLCAweDkwLCAweDFBLCAweDQwLCAweDJCLCAweDAwLCAweEFELCAweDQxLCAweEI0LAorMHgwNiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHg5MSwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4ODYsIDB4MDIsIDB4MTMsCisweDAwLCAweDdDLCAweDI4LCAweDM0LCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDFGLCAweDBBLCAweDQ0LCAweDI4LCAweEYwLAorMHgwMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxQiwgMHgwQSwgMHg0QywgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwMiwKKzB4MUYsIDB4MEEsIDB4NEMsIDB4MjgsIDB4QjMsIDB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUYsIDB4MEEsIDB4N0MsIDB4MjgsCisweEYwLCAweDAxLCAweEMwLCAweDBGLCAweDEwLCAweDUzLCAweDAwLCAweDZDLCAweDUxLCAweEZBLCAweEExLCAweEMwLCAweDc3LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHg4OCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwOCwKKzB4N0MsIDB4MjIsIDB4NzgsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MjAsIDB4OUUsIDB4MDAsIDB4NUQsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDg3LCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3RCwgMHgwMiwgMHg3MSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgyMCwgMHg3QywgMHg4MiwgMHhGMCwKKzB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4QTcsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NjcsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDAxLCAweEIzLCAweDE0LCAweENDLAorMHhCMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwOCwgMHhDQywgMHgwMiwgMHgxMCwgMHgwQiwgMHhDMCwKKzB4MkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEIzLCAweDA4LCAweERDLCAweDAyLCAweDMwLCAweDBCLAorMHhDMCwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHg4MiwgMHgzMCwgMHgwQiwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MEQsIDB4MTEsIDB4MDAsIDB4NDUsIDB4MzAsCisweDEwLCAweDAxLCAweDQzLCAweDA0LCAweDA0LCAweDFELCAweDAwLCAweDA0LCAweDUwLCAweDEwLCAweDAxLCAweDQwLCAweDAzLAorMHgwMSwgMHgxRCwgMHgxMCwgMHg0QywgMHg0MCwgMHgxNCwgMHgwMSwgMHg1MCwgMHgwNCwgMHgwNSwgMHgwMSwgMHgwNCwgMHg3NCwKKzB4MTAsIDB4RDAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MjQsIDB4MDEsIDB4NDAsIDB4NUMsIDB4NTAsIDB4MTAsIDB4MDEsIDB4NDAsCisweDA3LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDgxLCAweDQwLCAweDczLCAweDYwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwMywgMHg5MSwgMHgyMCwgMHgwNCwgMHgxMiwgMHg5MCwKKzB4NDksIDB4NDAsIDB4MjEsIDB4ODAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDEsCisweDhELCAweDA0LCAweDY1LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDQxLCAweDgxLCAweDE0LCAweDM0LCAweDEyLAorMHhEOCwgMHg0OCwgMHg1MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDgsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDQxLCAweDkxLCAweDAwLCAweDQ0LCAweDAzLCAweDkwLCAweDI5LAorMHg0MCwgMHgyNCwgMHgwMiwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDM3LCAweDIwLAorMHg5OSwgMHgwMCwgMHg3NCwgMHgwQSwgMHgxMiwgMHg4OSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MjUsIDB4MDAsIDB4ODMsIDB4ODksIDB4MEMsIDB4MDIsIDB4QjQsIDB4MTgsIDB4QzAsCisweDY1LCAweDIwLCAweDlGLCAweDAwLCAweDRELCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI3LCAweDgwLCAweDlGLCAweDAwLAorMHg2QywgMHgwMiwgMHgzMCwgMHgwOCwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTksCisweDEyLCAweDdDLCAweDAyLCAweDM0LCAweDE5LCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg0MSwgMHg3QywgMHgwMiwgMHg3NCwgMHgyOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4NTAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5NywgMHgxNSwKKzB4N0UsIDB4NTIsIDB4RjAsIDB4MDksIDB4RTAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDQxLCAweDQwLCAweDEzLCAweDAwLCAweDdDLCAweDEwLCAweEYwLCAweDQxLCAweEMwLCAweDA3LCAweDAwLAorMHgxRiwgMHgwOCwgMHg0QywgMHgwMCwgMHgzNCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MTEsIDB4RjAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MjAsIDB4NEMsIDB4MDQsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MDYsCisweDQwLCAweDEzLCAweDQwLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAyLCAweDBDLAorMHgwOCwgMHgxNCwgMHgwMSwgMHhDNCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTAsIDB4NUMsIDB4MDAsIDB4NTEsIDB4MDAsIDB4RjQsIDB4MDksIDB4RDAsIDB4MjcsIDB4QzAsIDB4MTUsIDB4MDAsIDB4N0QsCisweDAwLCAweEM2LCAweDA1LCAweDUwLCAweDA1LCAweDQwLCAweDVGLCAweDA0LCAweDczLCAweDAyLCAweEI0LCAweDI5LCAweEQxLAorMHgwNywgMHhDMiwgMHgxMiwgMHgwMCwgMHg3RCwgMHg0NSwgMHhDNCwgMHgxNSwgMHhEMCwgMHgwNywgMHhDMCwgMHgxNCwgMHgwMCwKKzB4NzEsIDB4MDIsIDB4Q0MsIDB4MDEsIDB4RDAsIDB4MTUsIDB4NDAsIDB4OUIsIDB4MDgsIDB4NzEsIDB4MDIsIDB4RDQsIDB4MEQsCisweDUwLCAweEY3LCAweDQwLCAweDUwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHgzMiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgyMCwgMHhDRCwgMHgwMCwKKzB4NjQsIDB4MEYsIDB4NTAsIDB4MDgsIDB4NDQsIDB4NzMsIDB4MDAsIDB4QzEsIDB4MDQsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDQsCisweDQwLCAweDMyLCAweDEwLCAweENELCAweDAxLCAweDA1LCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEMxLAorMHgwNiwgMHg2NSwgMHgwNywgMHhEMCwgMHg5OCwgMHg0MCwgMHg2MywgMHgwMywgMHg0MSwgMHgwOCwgMHgwNCwgMHgyMywgMHgxMCwKKzB4MEMsIDB4NDAsIDB4NTIsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDgsCisweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDQzLCAweDkwLCAweDBFLCAweDQwLCAweDM5LCAweDAwLCAweDdELCAweDAwLCAweEE1LAorMHgwQiwgMHg1MCwgMHgwRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MSwKKzB4MzgsIDB4MDEsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MEEsIDB4RTEsIDB4ODMsCisweEE0LCAweDQzLCAweEQwLCAweDBFLCAweDQwLCAweDFGLCAweDAwLCAweDcxLCAweDAxLCAweDE0LCAweDAzLCAweDEwLCAweDEyLAorMHg1OCwgMHgwNiwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg2MCwgMHgwMCwKKzB4RTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RDAsIDB4MUUsIDB4QzAsIDB4NzksIDB4MDAsIDB4RUYsIDB4MDEsIDB4QTQsIDB4MDYsCisweDcwLCAweDFFLCAweEMwLCAweDZCLCAweDQwLCAweEUzLCAweDAxLCAweEIwLCAweDA1LCAweEYwLCAweDFFLCAweDQwLCAweDdBLAorMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwgMHg3OCwgMHgwNSwgMHhFMywgMHgwMSwgMHhBQywKKzB4MDcsIDB4RjEsIDB4MUUsIDB4QzAsIDB4NkIsIDB4MDAsIDB4NjMsIDB4ODEsIDB4ODQsIDB4MDcsIDB4MzAsIDB4MTgsIDB4QzAsCisweDQ2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDA1LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNSwgMHgxMCwgMHgwRiwgMHgwMCwgMHg1QywgMHgwMiwgMHhCMCwKKzB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzcsIDB4MDQsCisweDVGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweEI1LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAxLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgyMCwgMHg0RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4NEQsIDB4MDAsIDB4RTcsIDB4MjEsCisweENDLCAweDA3LCAweEY4LCAweDg3LCAweEMwLCAweDdDLCAweDAyLCAweEJGLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLAorMHhDMCwgMHg3QywgMHgwMCwgMHg3MywgMHgwMSwgMHhFQywgMHgwNSwgMHgzMiwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDQsIDB4QjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MTAsIDB4QjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDFFLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDA1LCAweENDLCAweDA2LCAweEYwLCAweDEzLCAweDg0LCAweDBCLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHg4RCwgMHgxMCwgMHhFMSwgMHgwOCwgMHg4NCwKKzB4MjEsIDB4NzgsIDB4MEUsIDB4NDQsIDB4MzgsIDB4MDAsIDB4N0QsIDB4MDYsIDB4QzUsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsCisweDI4LCAweDAwLCAweDcxLCAweDQwLCAweDg0LCAweEUwLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEExLCAweDEwLAorMHhCNCwgMHgwMSwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMiwgMHhCQiwgMHgxOCwgMHg4QywgMHgwQSwgMHhEMCwgMHg4RSwKKzB4NDAsIDB4MTksIDB4MDIsIDB4QTEsIDB4MDYsIDB4QUMsIDB4MDMsIDB4RDAsIDB4MjAsIDB4NDAsIDB4NTcsIDB4NjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweEU1LCAweDAwLCAweDg1LCAweDAxLAorMHg1MCwgMHg4NywgMHg0MCwgMHgzOCwgMHg4QywgMHhBRCwgMHgwMCwgMHg4NiwgMHgwMSwgMHg5MCwgMHgwRiwgMHg0MCwgMHgzQSwKKzB4NDAsIDB4RTEsIDB4MDAsIDB4QzQsIDB4MDEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4RjQsCisweDBBLCAweDEwLCAweDBFLCAweDQwLCAweDNGLCAweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHgyOSwgMHg0MiwgMHg2MSwgMHgwQywgMHg5NCwgMHg0MywgMHhEMCwgMHgwMiwgMHg0MCwgMHgyMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MDEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NTAsCisweDMxLCAweDQwLCAweDcwLCAweDAwLCAweDFELCAweDQxLCAweDAyLCAweDQ1LCAweDkwLCAweDNDLCAweDUwLCAweDgyLCAweDA0LAorMHgwMSwgMHgxMCwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyQywgMHg0MiwgMHg3NywgMHgwMSwgMHgwMSwgMHgwNSwgMHgzMCwgMHgwNCwKKzB4MTAsIDB4RDAsIDB4NDAsIDB4QjMsIDB4MDQsIDB4MDksIDB4MDUsIDB4MDYsIDB4MzQsIDB4RDAsIDB4MUMsIDB4NDAsIDB4OTEsCisweDAwLCAweDgxLCAweDEzLCAweDM0LCAweDBFLCAweEQwLCAweDAwLCAweDQwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4MCwgMHgwNSwgMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgwMywgMHg3MCwgMHhFOSwKKzB4QzAsIDB4NzQsIDB4MDAsIDB4REYsIDB4MDUsIDB4NEMsIDB4MDksIDB4QjAsIDB4MEQsIDB4QzAsIDB4MTYsIDB4MDAsIDB4OTMsCisweDAxLCAweDRDLCAweDA3LCAweDM0LCAweDdDLCAweDQwLCAweEJGLCAweDAwLCAweDEzLCAweDAzLCAweDNDLCAweDAzLCAweDEwLAorMHgyMSwgMHhDMCwgMHgzQiwgMHgwMCwgMHg1MywgMHgwMywgMHg0QywgMHgwOCwgMHhGMCwgMHgzRCwgMHhDMCwgMHhCNSwgMHgwMiwKKzB4NDMsIDB4MTEsIDB4NTAsIDB4MEQsIDB4RjAsIDB4MDksIDB4NDAsIDB4NzcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDQ3LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDgzLCAweDcwLCAweDA5LCAweEQyLAorMHgyNywgMHgwMCwgMHhERiwgMHgwNCwgMHg3QywgMHgyMSwgMHg3MCwgMHg4RCwgMHhDMCwgMHhCNSwgMHgwMiwgMHhERiwgMHgwOCwKKzB4N0MsIDB4OEIsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MzcsIDB4NDIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4NzAsIDB4MjksCisweEMwLCAweDc3LCAweDAwLCAweDU3LCAweDAyLCAweDVDLCAweDAyLCAweEYwLCAweENELCAweEMwLCAweEY3LCAweDQwLCAweDVGLAorMHg0MCwgMHgyQywgMHgwQiwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDAsIDB4MEIsIDB4NDAsIDB4RTMsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4OEYsIDB4QzAsIDB4M0MsCisweDAwLCAweEZCLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDBGLCAweEMxLCAweDBGLCAweDAwLCAweEJGLCAweDA5LCAweEZDLAorMHg0MCwgMHhGMCwgMHgwRiwgMHhDMSwgMHgzQywgMHgwMCwgMHgzMywgMHgwNSwgMHhGQywgMHgwMywgMHhCMCwgMHg0NywgMHhDMCwKKzB4M0QsIDB4MDAsIDB4NzMsIDB4MDAsIDB4Q0MsIDB4MjAsIDB4MzAsIDB4OUYsIDB4QzAsIDB4RkYsIDB4MDAsIDB4QjMsIDB4MDAsCisweENDLCAweDQzLCAweDMyLCAweDBCLCAweEM0LCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MSwgMHgyMCwgMHhDNiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwRiwgMHhGMCwgMHgxMSwgMHg2MCwgMHg2MSwgMHgwMiwKKzB4OTEsIDB4MDIsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4ODcsIDB4MDQsIDB4MUQsIDB4MDAsIDB4NUMsIDB4MUUsCisweEQxLCAweDFELCAweDQwLCAweDM0LCAweDA4LCAweDExLCAweDEyLCAweDc0LCAweDAwLCAweDEwLCAweDcxLCAweDQwLCAweDM0LAorMHgwMCwgMHgxMSwgMHgwMiwgMHg0QywgMHgwQywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwKKzB4MkYsIDB4MTUsIDB4MTksIDB4NDAsIDB4MzcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDQ2LCAweDAwLCAweEQxLCAweDA0LCAweDY0LCAweDA0LCAweEQwLCAweDAxLCAweDQwLCAweDM3LCAweDIwLCAweDE5LAorMHgwMCwgMHgwNCwgMHgxMCwgMHgxMCwgMHgxRCwgMHg0OCwgMHgxNywgMHgxMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwNSwgMHg1MCwKKzB4MUQsIDB4NDQsIDB4MzQsIDB4NDAsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4MDAsCisweDgxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQ5LCAweDAxLCAweDY0LCAweEMzLAorMHgxMCwgMHgxOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MDAsIDB4MTgsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDgsIDB4MDgsIDB4NDAsIDB4MjYsIDB4ODAsIDB4NDEsIDB4MDAsCisweDA1LCAweDA0LCAweDE4LCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweDRELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDFELAorMHg0MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxOCwgMHgwOCwgMHg1MCwgMHgzNiwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODksIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsCisweDAwLCAweDQ0LCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDA2LAorMHgwMCwgMHhEMywgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwNSwgMHg1MCwgMHgzNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg0QywKKzB4MDAsIDB4MjAsIDB4MEQsIDB4QzAsIDB4MTMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4NTAsCisweDM4LCAweDAwLCAweDUzLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA1LCAweEMwLCAweDNGLCAweDAwLCAweDUzLCAweDAwLAorMHg0QywgMHgwMSwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg5QiwgMHgyMCwgMHg2QywgMHg4MSwgMHgzMCwgMHhBOSwKKzB4QzAsIDB4MDcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MEYsIDB4MDAsCisweEJGLCAweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDAyLCAweEMwLCAweDJELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwRSwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwgMHg5QywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4MDAsIDB4NzgsIDB4MDMsIDB4QzAsIDB4MzksIDB4MDAsIDB4M0UsIDB4MDAsIDB4REMsCisweDgwLCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweEE3LCAweDAwLCAweEZFLCAweDAzLCAweEYwLCAweDRCLCAweEUwLAorMHgxNywgMHgyMiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHhERiwgMHgwMCwgMHhCMywKKzB4MDgsIDB4RkMsIDB4MDYsIDB4NzAsIDB4OUYsIDB4QzgsIDB4N0UsIDB4MTIsIDB4RjMsIDB4MDksIDB4RUMsIDB4MjcsIDB4MTEsCisweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEUzLCAweDA5LCAweERDLCAweDI3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDQwLAorMHhGMywgMHgwOSwgMHhCQywgMHgwRiwgMHhGOCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwgMHg5QywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4NUMsIDB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MUIsIDB4QzgsIDB4MEQsCisweDA4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDE4LCAweDI3LCAweDAxLCAweDkxLCAweDIwLAorMHg0NCwgMHg1MywgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNiwgMHgwMCwgMHgxNSwgMHgwMCwgMHg1MCwgMHgwMCwgMHg1MCwgMHgxMSwKKzB4NDAsIDB4NDQsIDB4MDgsIDB4MTUsIDB4MDAsIDB4MDQsIDB4MTAsIDB4RDIsIDB4MDEsIDB4NDEsIDB4NDUsIDB4MDAsIDB4MTEsCisweDgwLCAweDc0LCAweDAwLCAweEQwLCAweDExLCAweDQyLCAweDAzLCAweDI1LCAweDExLCAweDA0LCAweDY0LCAweDA0LCAweEQxLAorMHgxRiwgMHg0OCwgMHg3NCwgMHg0MCwgMHgxNSwgMHg4MSwgMHg1NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0MiwgMHgwRiwgMHg2MCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzcsIDB4MDAsIDB4QzEsIDB4NDQsIDB4MTQsCisweDEzLCAweDUwLCAweDRELCAweDQ4LCAweDM3LCAweDExLCAweEQxLCAweDg0LCAweDQ2LCAweDEzLCAweDEwLCAweDBDLCAweDYyLAorMHgzMCwgMHgyMCwgMHhDNSwgMHgwNCwgMHgxNCwgMHgwMywgMHhEMCwgMHg0RCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDOSwgMHg0NCwKKzB4MTQsIDB4MTMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzYsIDB4MTAsIDB4RDUsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTgsIDB4MEMsCisweDQwLCAweDIxLCAweDAwLCAweDE1LCAweDIwLCAweDE0LCAweDAwLCAweEQ4LCAweDAwLCAweDQwLCAweDRGLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgyNSwgMHgxMCwgMHhEMSwgMHgyMSwgMHg2NCwgMHgwNywKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NTQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NzAsIDB4MDQsCisweDAwLCAweDE1LCAweDAwLCAweDU0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA1LCAweDAwLCAweDE5LCAweDAwLCAweDc0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MiwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHhEMCwgMHgwRCwgMHgwMCwKKzB4MjUsIDB4MDAsIDB4MTUsIDB4MDEsIDB4NTQsIDB4NDQsIDB4RDAsIDB4MTEsIDB4NDEsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDEzLCAweDAzLCAweEQzLCAweDMxLCAweDdDLCAweDE3LCAweDcwLAorMHgwQywgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgzMCwKKzB4RDMsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4MDIsIDB4MzQsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDMsCisweEQwLCAweDBELCAweDQwLCAweDM3LCAweDIwLCAweEM3LCAweDQwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEQwLCAweDE1LAorMHgwMCwgMHgwNiwgMHgwMSwgMHg1QywgMHgwRSwgMHhGMCwgMHgzOSwgMHhDMCwgMHgwOSwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MkQsIDB4NDAsIDB4REYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MDMsCisweEMwLCAweDBDLCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDQwLCAweDNCLAorMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHgwOCwgMHgwRiwgMHgwMCwgMHgzNywgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4RDAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4ODEsCisweEJCLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHhCNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg0RCwgMHgwMywgMHg3MCwgMHg4RCwgMHhDMCwKKzB4MzcsIDB4MDEsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MDEsIDB4RDcsIDB4MDAsCisweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAxLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELAorMHhDMiwgMHgzNCwgMHgwMCwgMHhENywgMHgwMCwgMHg2QywgMHgxMywgMHhCMCwgMHgwQywgMHhDMCwgMHgyNCwgMHgwMSwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4NDgsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDExLCAweDQwLCAweDAwLAorMHgwNCwgMHgwQiwgMHgwMCwgMHg1QywgMHgwMCwgMHhCMCwgMHgwMCwgMHg0MCwgMHg4MywgMHgwMCwgMHgxQiwgMHgwMCwgMHg2RSwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4QzMsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4RTgsCisweDAzLCAweDAwLCAweDExLCAweDgwLCAweDQ0LCAweDQwLCAweDEwLCAweDBELCAweEMwLCAweDIwLCAweDAxLCAweDlELCAweDAwLAorMHg1QywgMHgwMCwgMHhEMCwgMHgxMSwgMHg0MSwgMHg0RiwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4MjAsIDB4MjIsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4QjEsIDB4MDAsCisweEM1LCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDFDLCAweDQwLCAweDMzLCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDAzLAorMHgxMCwgMHgwQywgMHg0OCwgMHg3MywgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHg4MywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MDAsIDB4QzUsIDB4MDAsIDB4MjQsIDB4MDcsIDB4ODAsIDB4MEMsIDB4NDAsIDB4RTMsIDB4MDAsIDB4NEQsIDB4MDUsIDB4MzYsCisweDEyLCAweEQwLCAweDQ4LCAweDQwLCAweDRGLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgwOCwgMHg2QSwgMHgwMCwgMHhFRCwgMHgwOSwgMHg4NiwgMHgwNywgMHgxMCwgMHgxMywgMHg2MCwgMHg0QywgMHgwMCwgMHgyRCwKKzB4MDEsIDB4RDQsIDB4MDQsIDB4OTAsIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MzgsIDB4MDEsIDB4QTQsIDB4MDQsIDB4MUMsCisweDEyLCAweDQwLCAweDRCLCAweDA0LCAweDJELCAweDAxLCAweEQ0LCAweDA0LCAweDAwLCAweDEzLCAweDQwLCAweDQ5LCAweDAwLAorMHgyMSwgMHgwMSwgMHhDNCwgMHgwNCwgMHg1MCwgMHgxQywgMHg0MCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgxMSwgMHg5NCwgMHgwNywKKzB4RDAsIDB4OUEsIDB4NDAsIDB4MzcsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsCisweDMyLCAweDAyLCAweDBELCAweDA4LCAweDRDLCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDMxLCAweDEyLCAweEQ3LCAweDAwLAorMHgxQywgMHgwMywgMHgzMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDNywgMHgwMCwgMHgwNCwgMHgwMywgMHgzMCwgMHgwQywKKzB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDgsIDB4MzQsIDB4MTMsIDB4QjAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDIsIDB4RDcsCisweDAwLCAweDJDLCAweDAzLCAweEIwLCAweDBDLCAweEQwLCAweDIzLCAweDAyLCAweENGLCAweDIwLCAweDNDLCAweDQyLCAweEYwLAorMHg4QywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgyRCwKKzB4MDAsIDB4N0YsIDB4MDgsIDB4RjgsIDB4MDMsIDB4RTAsIDB4MDIsIDB4ODAsIDB4MDksIDB4MDAsIDB4M0IsIDB4MDAsIDB4QTgsCisweDIwLCAweEYyLCAweDgxLCAweEMwLCAweDBCLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEM4LAorMHgwNywgMHgwMCwgMHgzRiwgMHgyOCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwKKzB4NTQsIDB4MjQsIDB4MjAsIDB4OUQsIDB4QzAsIDB4MkMsIDB4MDgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEYsCisweEMyLCAweDBCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhERSwgMHgwMCwgMHg3QywgMHgwNywKKzB4MzAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4MUQsIDB4QzAsIDB4MzQsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDNDLAorMHgwMywgMHhCMCwgMHgwRCwgMHhDNCwgMHgyNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHg4MywgMHgzMCwgMHgwRCwgMHhDMiwKKzB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MjksIDB4MDAsIDB4RkQsCisweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweDUwLAorMHgwMiwgMHgwMCwgMHgwOCwgMHg4OCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHg1MCwgMHgwMiwgMHg0MCwgMHgwOSwgMHgwMCwKKzB4MkYsIDB4MDAsIDB4QTQsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDgsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MjAsIDB4QjYsIDB4MDAsCisweDE4LCAweDRFLCAweDQwLCAweDM4LCAweDIwLCAweEVELCAweDAwLCAweEY0LCAweDAxLCAweDEwLCAweDA3LCAweDQwLCAweDRDLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHg2RCwgMHgwMCwKKzB4ODQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4ODEsIDB4RjQsIDB4MDcsIDB4MTgsIDB4MUYsCisweDQ4LCAweDc4LCAweDgwLCAweEVELCAweDAxLCAweEY2LCAweDA3LCAweDEzLCAweDFGLCAweDQ0LCAweDdCLCAweDgwLCAweEVELAorMHgwMSwgMHhCNCwgMHg4NywgMHg1OCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhGNCwgMHgwNywgMHhEOCwKKzB4REUsIDB4NDAsIDB4NkEsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MTAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDIzLCAweDAwLCAweDRDLCAweDAwLCAweDA0LAorMHgwNSwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4QTAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MTAsIDB4MDUsIDB4MDAsCisweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDIwLCAweDM0LCAweDAwLCAweDUxLCAweDBDLAorMHg1MCwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwRiwgMHg3NCwgMHgwRiwgMHgxQSwgMHg2RCwgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MTAsIDB4Q0MsIDB4MEQsCisweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LCAweEQwLCAweDE0LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3QywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4M0MsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsCisweDFBLCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDBELCAweDM0LCAweDA3LCAweEQwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgyMCwgMHg3QywgMHg0MCwgMHhGMiwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4OEYsIDB4MDAsCisweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBELCAweDAwLCAweDNELCAweDAwLCAweEU0LCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgyMCwgMHhGQywgMHgwOCwgMHg5MCwgMHgwMSwgMHhDMCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4RjAsIDB4ODEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDY1LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYwLCAweDE5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4RTcsIDB4ODAsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzQsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDA2LCAweDcyLCAweDA5LCAweEMwLCAweDI0LCAweDAwLAorMHg5MywgMHgwNSwgMHg3QywgMHg0MiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjgsIDB4NjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsCisweDI3LCAweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDAyLCAweEQ4LCAweDE5LCAweDQwLCAweEU3LCAweDIwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwNCwgMHg5NywgMHgyMCwgMHg0NCwgMHgwMiwgMHgzMCwgMHgwOSwKKzB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MjAsIDB4NzAsIDB4MTYsIDB4MzAsIDB4MEIsIDB4RDAsIDB4MjQsIDB4MDAsIDB4OTEsCisweDAwLCAweDc0LCAweDk2LCAweDUwLCAweDM5LCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMiwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg4OSwgMHg0MCwgMHg2RiwKKzB4MDAsIDB4QkQsIDB4MDAsIDB4RDQsIDB4MDIsIDB4RDAsIDB4QUIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsCisweDAyLCAweDEwLCAweDBCLCAweDYwLCAweDJGLCAweDAwLCAweEFELCAweDAwLCAweDg0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLAorMHgyRiwgMHg4MCwgMHhCOSwgMHgwMCwgMHhGNCwgMHgxMiwgMHgxMCwgMHg2OSwgMHg2MCwgMHgzNiwgMHgwMCwgMHhEOSwgMHgwMiwKKzB4NzQsIDB4MDYsIDB4MTAsIDB4MTksIDB4NDEsIDB4NzAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDI4LCAweEEwLCAweDAwLCAweDhELCAweDFDLCAweDM0LCAweDIyLCAweEQwLCAweDJBLCAweDQwLCAweEVCLCAweDAwLAorMHhCRCwgMHgwOCwgMHg4NCwgMHgyMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCMCwgMHgyMiwKKzB4MTAsIDB4OEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QTUsIDB4ODgsIDB4ODQsIDB4MjIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MkYsCisweDAyLCAweEExLCAweDA4LCAweEI0LCAweDAyLCAweDE0LCAweDA4LCAweDY0LCAweDI0LCAweDA4LCAweDg5LCAweDAwLCAweDM0LAorMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg1MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDYsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAyLCAweDVDLCAweDA4LCAweEQwLCAweDAxLCAweEMwLCAweDE3LCAweDAwLCAweDFELCAweDhBLCAweDdDLCAweDA4LCAweDM0LAorMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMiwgMHg0NCwgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwKKzB4MUIsIDB4MDIsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MTEsIDB4QzAsIDB4MDYsIDB4NDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MjgsCisweDMyLCAweEExLCAweEQwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLAorMHg2RiwgMHgwMCwgMHhCRiwgMHgwNCwgMHhGQywgMHgxMiwgMHhGMCwgMHgxOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5RiwgMHg0NCwKKzB4M0MsIDB4MTIsIDB4RjIsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NDgsCisweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDg0LCAweDdDLCAweDEyLCAweDcwLCAweDA5LCAweEMyLCAweDI3LCAweDAxLCAweDlGLAorMHg4NCwgMHg3QywgMHgwMiwgMHg3MCwgMHgyOCwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCNywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsCisweDAwLCAweDkzLCAweDJDLCAweDdDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweEFCLCAweDAwLCAweDk3LCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyOCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDOCwKKzB4MkQsIDB4MDAsIDB4OTMsIDB4MDgsIDB4NUMsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDAsCisweERDLCAweDAyLCAweEIwLCAweDFCLCAweEMzLCAweDJCLCAweDAwLCAweEJGLCAweDYwLCAweEZDLCAweDgyLCAweDMwLCAweDBCLAorMHhDMCwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHg1NCwgMHg0NSwKKzB4NTEsIDB4NEMsIDB4NzQsIDB4NDAsIDB4RDAsIDB4NTEsIDB4NDEsIDB4NDcsIDB4MDEsIDB4MTEsIDB4MTQsIDB4NzQsIDB4MTAsCisweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDA4LCAweDFELCAweDA1LCAweDc0LCAweDgwLCAweEQyLCAweDQxLCAweDQxLCAweDA0LAorMHgwMCwgMHgxMSwgMHgwNCwgMHg0QywgMHg0MCwgMHgxMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgxNCwgMHg3NCwKKzB4MDAsIDB4MTAsIDB4MjEsIDB4NDIsIDB4MDcsIDB4MDgsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MDUsIDB4NDAsCisweDczLCAweDQwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDIxLCAweDAwLCAweDgxLAorMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4NSwgMHgwNCwgMHgzNCwgMHg1MiwgMHhEMCwKKzB4MDksIDB4NjIsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MTAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjUsIDB4MDAsCisweDkxLCAweDA0LCAweDU0LCAweDEyLCAweDUwLCAweDA4LCAweDQ4LCAweDIzLCAweDgwLCAweDhELCAweDA0LCAweDE0LCAweDAyLAorMHhEMiwgMHgwOCwgMHg0OCwgMHgyMywgMHgyMCwgMHg4RCwgMHgyMCwgMHg3NCwgMHgwMiwgMHgxOCwgMHgwOCwgMHg0MCwgMHg0QiwKKzB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDAsCisweDc0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHgwMCwgMHgyNSwgMHg4MCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwKKzB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsCisweDBELCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc2LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHg2RiwgMHgwMCwgMHg5MywgMHgwMiwgMHg3OCwKKzB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsCisweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDQ4LCAweDIxLCAweDQwLCAweDgxLCAweDAwLAorMHg1NCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHgxQywgMHgwMiwgMHhCMCwgMHgwOSwKKzB4QzAsIDB4RTcsIDB4ODEsIDB4OUYsIDB4MDIsIDB4NzgsIDB4NDIsIDB4MzIsIDB4MjksIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweEE1LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDI2LAorMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwgMHgyNiwKKzB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4NEMsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDAyLCAweEJDLCAweDA5LCAweEMwLAorMHg2NywgMHgwMSwgMHg5RiwgMHgwOSwgMHg3QywgMHgwMiwgMHhGMSwgMHg0OSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NEQsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDdFLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLAorMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhFMiwgMHgwNywgMHgwOCwgMHgxQiwgMHgwMCwgMHg0QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4NDEsIDB4QzgsIDB4ODcsCisweDQwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweDM0LCAweDAxLCAweDg3LCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHg1NCwgMHg4MCwgMHg1RCwgMHgwMCwgMHg0NCwgMHgwMSwgMHg3MCwgMHg0NSwKKzB4NDAsIDB4MUMsIDB4MDAsIDB4NUIsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NzAsIDB4MDcsIDB4NjAsIDB4OUMsIDB4MDAsIDB4NTEsCisweDAwLCAweDc0LCAweDAxLCAweEQ4LCAweDA1LCAweEMwLCAweDFGLCAweDAwLCAweDU1LCAweDAwLCAweDFFLCAweDAxLCAweDcyLAorMHgwNSwgMHg0MCwgMHgxNywgMHgwOCwgMHg1MywgMHgwMCwgMHhDQywgMHgwRCwgMHhDMCwgMHgwNywgMHhDMCwgMHhERCwgMHgwMSwKKzB4NzAsIDB4MEEsIDB4RjAsIDB4MzUsIDB4MTAsIDB4MTcsIDB4NTAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDM2LCAweDEwLCAweENELCAweDAwLCAweDE2LCAweDAzLCAweDUwLCAweDBDLCAweDQwLAorMHg2MiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg1OCwgMHg5OCwgMHg0OCwgMHhGMywgMHgwNiwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDIsIDB4MEQsIDB4NDAsIDB4QjMsIDB4MDEsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NTAsIDB4MEMsCisweDQwLCAweDMzLCAweDgwLCAweEM5LCAweDAwLCAweDE0LCAweDBBLCAweDkwLCAweDM0LCAweDQwLCAweEUzLCAweDAxLCAweDgxLAorMHgwMiwgMHg3NCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4ODgsIDB4QjgsIDB4MTEsIDB4RUQsIDB4QTUsIDB4OTYsIDB4MTMsIDB4NTAsIDB4NUUsIDB4NDAsIDB4OUMsCisweDAxLCAweEU5LCAweDA4LCAweEI0LCAweDAzLCAweDUwLCAweDBCLCAweDQwLCAweDVGLCAweDAwLCAweEU5LCAweDA0LCAweEI0LAorMHgxMywgMHhEOCwgMHgwRSwgMHg0MCwgMHgzRCwgMHgwMCwgMHhGNSwgMHgwMCwgMHg5NiwgMHgxMywgMHg1MCwgMHgwRSwgMHg0MCwKKzB4N0YsIDB4MDMsIDB4RTEsIDB4MDUsIDB4OTAsIDB4MEIsIDB4RDAsIDB4MjYsIDB4NjAsIDB4NkQsIDB4MDAsIDB4RTEsIDB4ODIsCisweEI0LCAweDAyLCAweDkwLCAweDFFLCAweDQxLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMSwgMHgxMCwgMHhGOCwgMHgwMCwgMHhGRCwgMHgwNywgMHg5QywgMHgxNywgMHg3MCwgMHgxRiwgMHhDMCwgMHhGQSwgMHgwMSwKKzB4RTMsIDB4MDEsIDB4QjQsIDB4MTcsIDB4NzAsIDB4MUUsIDB4NTAsIDB4NkIsIDB4MDAsIDB4RUQsIDB4MDUsIDB4QkMsIDB4NDcsCisweEQwLCAweDlFLCAweDY4LCAweDdCLCAweDA4LCAweEVCLCAweDAxLCAweDg0LCAweDE3LCAweDcwLCAweDFFLCAweEMwLCAweDdCLAorMHgwMCwgMHhGQiwgMHgwOSwgMHg5QywgMHgwNywgMHhGMCwgMHgxRSwgMHg4MCwgMHg2QiwgMHgwMCwgMHhFNiwgMHgyMSwgMHhGQywKKzB4MDYsIDB4QjAsIDB4MUIsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDAzLCAweDcwLCAweDg5LCAweEMwLCAweDE3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgyNCwgMHgxOCwgMHhENywgMHgwMCwgMHg3QywgMHhCMywgMHhGMCwKKzB4NEQsIDB4QzIsIDB4MjMsIDB4MDAsIDB4QzcsIDB4OTIsIDB4N0MsIDB4NEIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4QjMsIDB4MDQsCisweERCLCAweDA4LCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweDgwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLAorMHg3MCwgMHgwMSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKzB4NzksIDB4MDAsIDB4RTMsIDB4MDQsIDB4Q0QsIDB4NTMsIDB4NzAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4NDAsIDB4RjIsIDB4MDEsCisweERDLCAweDY3LCAweEYwLCAweDFCLCAweEMwLCAweDZGLCAweDAwLCAweEVGLCAweDE5LCAweENDLCAweDA3LCAweDMwLCAweDFGLAorMHg4NSwgMHg3RiwgMHgwMCwgMHhGMywgMHgxMSwgMHhGQywgMHg2NywgMHg3MCwgMHgxRiwgMHhDMCwgMHg3RCwgMHgwMCwgMHhGNywKKzB4MDEsIDB4Q0QsIDB4MDcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4QzEsIDB4RjQsIDB4MDcsIDB4RjIsCisweDFCLCAweEM0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM5LAorMHgwMCwgMHhFMSwgMHgwMCwgMHhBQywgMHgwMywgMHgxMCwgMHgwQSwgMHg0MCwgMHgxQiwgMHgwMCwgMHhFMSwgMHgwOCwgMHhEQywKKzB4QzMsIDB4MTEsIDB4MEEsIDB4QzAsIDB4MDksIDB4MDksIDB4RUQsIDB4MDAsIDB4OTQsIDB4MjMsIDB4NTAsIDB4MEUsIDB4NDIsCisweDFCLCAweDAwLCAweEUxLCAweDA0LCAweERDLCAweDAzLCAweDEwLCAweDhFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLAorMHg4NCwgMHgyQiwgMHhEMCwgMHg4NiwgMHg0MCwgMHgyQiwgMHgwNiwgMHg2RCwgMHgwOCwgMHhCNCwgMHgxMSwgMHhEMCwgMHg0RiwKKzB4QzAsIDB4NTYsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MkQsIDB4MDAsCisweEYxLCAweDAwLCAweEM0LCAweDIzLCAweDUwLCAweDhFLCAweDQxLCAweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAzLAorMHg1OSwgMHg4QSwgMHg0MSwgMHgyQSwgMHgzMCwgMHhGRCwgMHgxMCwgMHhFNiwgMHgwMywgMHg5MCwgMHgwRSwgMHg0MCwgMHgzRiwKKzB4MDYsIDB4RTEsIDB4MjAsIDB4QTYsIDB4MDMsIDB4NTEsIDB4MEYsIDB4NDAsIDB4MzksIDB4MDIsIDB4RUQsIDB4MDAsIDB4QTQsCisweDQzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweEQyLCAweDBBLCAweDQwLAorMHgwMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHgyNSwgMHgwMiwgMHhDMSwKKzB4MDksIDB4MjQsIDB4MDcsIDB4MTAsIDB4MDgsIDB4NjAsIDB4NTMsIDB4MEUsIDB4QzEsIDB4MEEsIDB4MzQsIDB4MDcsIDB4MTIsCisweDA4LCAweDQxLCAweEEzLCAweDIwLCAweENELCAweDAyLCAweDM0LCAweDFGLCAweDUwLCAweDNDLCAweDQwLCAweDQzLCAweDAwLAorMHhEMSwgMHgwQiwgMHgxNCwgMHgzNywgMHgxMCwgMHgzQywgMHg0MCwgMHg3NCwgMHgwMCwgMHhDRCwgMHgwNSwgMHgyNCwgMHgxNywKKzB4RDEsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4NEQsIDB4MjYsIDB4MzQsIDB4MTgsIDB4RDAsIDB4MDAsIDB4NDIsIDB4MTIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDI1LCAweDQwLCAweEYzLCAweDAwLAorMHhDRCwgMHgxQiwgMHg3MCwgMHgyRCwgMHhDMCwgMHhCMywgMHgwMCwgMHhGMywgMHg4QSwgMHhGQywgMHgwQiwgMHg3MCwgMHgxOCwKKzB4QzAsIDB4MjYsIDB4MDQsIDB4RkUsIDB4MDEsIDB4RUMsIDB4NEYsIDB4QjAsIDB4NUYsIDB4QzAsIDB4MjcsIDB4NDAsIDB4RjMsCisweDAwLCAweEZDLCAweDBCLCAweDcwLCAweDlDLCAweEMwLCAweEJELCAweDAyLCAweEU3LCAweDA2LCAweDZDLCAweDBGLCAweEQwLAorMHgwNSwgMHhDMCwgMHhFNywgMHgwMCwgMHg4RCwgMHgwNiwgMHg3RSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHg1NiwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDQsIDB4REYsIDB4MDAsIDB4N0MsCisweDQzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweDcwLCAweDI5LCAweEMwLAorMHgwNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNywgMHg4OCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4NzIsIDB4OEQsIDB4QzAsIDB4MzcsIDB4ODIsIDB4REYsIDB4MDAsIDB4NUMsIDB4MEIsIDB4QjAsIDB4MjUsCisweDg4LCAweEE3LCAweDA5LCAweDlGLCAweDAyLCAweDdDLCAweDBDLCAweEYwLCAweDAxLCAweEMxLCAweDA1LCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywKKzB4RjAsIDB4MEYsIDB4QzEsIDB4NUYsIDB4MDgsIDB4RjMsIDB4MDAsIDB4RkMsIDB4NDMsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MkMsCisweDBDLCAweEZGLCAweDEwLCAweEY4LCAweDgzLCAweEYwLCAweDBGLCAweEMxLCAweDBELCAweDA0LCAweEZCLCAweDkwLCAweENDLAorMHgwMywgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGNywgMHg0MCwgMHhFOCwgMHgwMywgMHhEMCwgMHgyNywgMHhDMCwKKzB4NkYsIDB4MDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTMsIDB4MjIsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDA4LCAweEQxLCAweDAwLCAweDc0LCAweDgzLCAweEQwLAorMHgwOSwgMHg2MCwgMHgxNiwgMHgwQSwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMiwgMHgxNSwgMHg0MCwgMHg2NCwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QzQsIDB4MDQsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsCisweEQ4LCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDA3LCAweEMwLCAweDI1LCAweDQyLCAweEUzLAorMHhDMCwgMHgxMywgMHgwNSwgMHg0NCwgMHg0RSwgMHhEMCwgMHgzMSwgMHg0MCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTIsIDB4NjQsIDB4MjAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDksCisweDQ4LCAweDM3LCAweDA0LCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDE5LCAweDQxLCAweDQ1LCAweDIwLCAweERELAorMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHg2NywgMHgwMCwgMHhERCwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwKKzB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NzYsIDB4MDcsIDB4RDAsIDB4MDUsIDB4NDAsIDB4QjcsIDB4MDEsCisweDkxLCAweDAxLCAweDQ0LCAweDA0LCAweEQyLCAweDM5LCAweDQyLCAweDA1LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MzMsIDB4MDgsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4NDAsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAwLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBELAorMHg0MCwgMHgzMCwgMHgwMCwgMHhEMSwgMHgwMCwgMHgxNiwgMHg4MywgMHhEMCwgMHgwNCwgMHg0MCwgMHgxMywgMHgxMCwgMHgwMSwKKzB4MDAsIDB4MDUsIDB4MDAsIDB4RDAsIDB4MDgsIDB4NjAsIDB4NDMsIDB4QTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEIwLCAweDI2LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweDQ4LCAweDEzLAorMHg0MCwgMHhEMywgMHg4MCwgMHg3QywgMHgwMywgMHhGMSwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHhERSwgMHgwMCwgMHhGQywKKzB4MDMsIDB4NzIsIDB4MEYsIDB4QzQsIDB4MDUsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsCisweDNFLCAweDAwLCAweEU3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEM0LCAweDM3LCAweDg4LCAweDExLCAweDAwLAorMHg0QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwMSwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QTgsIDB4MkYsIDB4MTAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MUUsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDBFLCAweDAwLCAweEZGLCAweDAwLCAweDlDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhDOCwgMHgwQiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRSwgMHg0MCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDEsIDB4RjAsIDB4MEIsIDB4QzIsIDB4MUYsIDB4MDgsIDB4MzcsIDB4MDAsIDB4RkMsCisweDAwLCAweEUxLCAweDAzLCAweEMwLCAweDE3LCAweDIyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHgyRiwgMHgwMCwgMHgzQiwgMHgxNCwgMHhCQywgMHgwRiwgMHgzNCwgMHgxRiwgMHhDMCwgMHg3RSwgMHgwMiwgMHhGRiwKKzB4MDksIDB4RkMsIDB4MDcsIDB4QjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDksIDB4OEMsIDB4MjcsIDB4NzIsCisweDFGLCAweEM0LCAweDdFLCAweDAyLCAweEZCLCAweDI5LCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDIwLAorMHhGMywgMHgwOSwgMHhDQywgMHgyNywgMHgzMCwgMHg4MywgMHhDMiwgMHg3QywgMHgwMiwgMHhGMywgMHgyNCwgMHhFRSwgMHgxQSwKKzB4MzAsIDB4NEIsIDB4QzQsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsCisweDI3LCAweDIwLCAweDAxLCAweDAyLCAweDc0LCAweDEzLCAweDE4LCAweDExLCAweDQwLCAweDAwLCAweDAwLCAweDFELCAweDgwLAorMHg3NCwgMHgwNCwgMHg0MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgxMCwgMHgxMCwgMHg0MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4NDEsIDB4NDQsIDB4MDAsIDB4MTMsCisweDQ0LCAweDQ0LCAweDEwLCAweDMwLCAweDY1LCAweDQwLCAweDM0LCAweDAwLCAweEY1LCAweDBCLCAweDZFLCAweDEwLCAweDEwLAorMHgxMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMiwKKzB4NDAsIDB4MDEsIDB4NDAsIDB4MzYsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NTAsIDB4MzAsIDB4MDEsIDB4Q0QsIDB4ODQsIDB4MzQsCisweDAzLCAweDgxLCAweDBELCAweDUwLCAweDMwLCAweDAxLCAweEMxLCAweDAwLCAweDI0LCAweDEzLCAweEQwLCAweDBDLCAweDQxLAorMHgzMCwgMHgwMSwgMHhDMSwgMHgwNCwgMHgyNCwgMHgwMywgMHhEMCwgMHg0RCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDOSwgMHgwNCwKKzB4MjQsIDB4MDMsIDB4MTAsIDB4MjgsIDB4NDAsIDB4MzEsIDB4ODEsIDB4Q0QsIDB4MjAsIDB4MDQsIDB4MUEsIDB4MTEsIDB4ODgsCisweDQwLCAweDQ1LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDE1LCAweDAwLAorMHgxMSwgMHgyMiwgMHgzNCwgMHgwMywgMHg1MCwgMHgwMSwgMHg0NCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHg4MCwKKzB4OTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweDAxLCAweDAwLCAweDY3LCAweDAwLCAweEQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAxLCAweDAwLCAweDY0LAorMHgwMCwgMHgxMCwgMHg0RCwgMHg0MiwgMHgzNiwgMHgwOCwgMHhERCwgMHgwMCwgMHg0NywgMHgwNCwgMHgxMCwgMHgxOSwgMHg0MSwKKzB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4NjcsIDB4NDAsIDB4MUIsCisweDAxLCAweDdDLCAweDI3LCAweDUwLCAweDBDLCAweEM4LCAweDM0LCAweDIwLCAweERGLCAweDgwLCAweDNDLCAweDAzLCAweEI0LAorMHgwQywgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4RDMsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjIsIDB4MEMsIDB4ODAsIDB4MzAsIDB4MDAsIDB4REIsIDB4MDAsIDB4NkQsIDB4MDMsCisweDM0LCAweDAxLCAweEQxLCAweDM1LCAweDAwLCAweERGLCAweDQwLCAweDQ0LCAweDA0LCAweDIyLCAweDMxLCAweEMwLCAweDAxLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg2OSwgMHgwMSwgMHgzRiwgMHgwMywKKzB4RjgsIDB4MDMsIDB4QjAsIDB4MDMsIDB4ODAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweERELCAweDAwLCAweDcwLCAweDAzLCAweEQwLCAweDBELCAweDAwLCAweDM3LAorMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwKKzB4MDcsIDB4QzAsIDB4M0QsIDB4MjAsIDB4RjcsIDB4MDAsIDB4RjQsIDB4MDAsIDB4RjUsIDB4MDMsIDB4QzMsIDB4MUUsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDgxLCAweDM3LCAweDBBLCAweDRELAorMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg3NywgMHg0MSwgMHhEMywgMHgwNSwgMHg1QywgMHgwMywgMHgzMCwgMHg4RCwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDEsCisweDRDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM0LCAweDAyLCAweEQ3LCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDA5LAorMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgxMCwgMHg3NCwgMHg4QSwgMHgzMywgMHgyMSwgMHhDNCwgMHgwQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4QjQsIDB4MDAsIDB4MTEsIDB4ODEsIDB4NDQsIDB4MDMsCisweDEwLCAweDQxLCAweDQ0LCAweDQ3LCAweDAwLCAweDExLCAweDAzLCAweDc0LCAweDAwLCAweEIwLCAweDExLCAweDQwLCAweDA0LAorMHgwMCwgMHgxMSwgMHgyMCwgMHg3NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0OCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0NCwKKzB4NDQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDgsIDB4MTEsIDB4MDEsIDB4NjQsIDB4MDAsIDB4RDAsIDB4MEQsIDB4QzAsCisweDM3LCAweDEwLCAweEUwLCAweDEzLCAweDM0LCAweDA0LCAweDEwLCAweDMwLCAweDAwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgwMCwgMHg0MSwgMHgwMCwgMHgyNSwgMHgwMywgMHg1MCwKKzB4MUMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4QzksIDB4MDIsIDB4MzQsIDB4NDMsIDB4OTAsIDB4MEMsIDB4NDEsIDB4MzUsIDB4ODAsCisweEMxLCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDA3LAorMHg1MCwgMHg4QywgMHg0MCwgMHg3MSwgMHg4MCwgMHhDOSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwMSwgMHg0MCwgMHgzNiwKKzB4MDgsIDB4QzQsIDB4MDIsIDB4MzQsIDB4MDIsIDB4NTQsIDB4MjgsIDB4MDIsIDB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDc4LCAweDQwLCAweDYxLCAweDA5LCAweEU0LCAweDA3LCAweDEwLCAweDEyLAorMHg0MCwgMHg0QiwgMHgwMCwgMHgyOSwgMHgwOSwgMHhCNCwgMHgyNCwgMHg5MCwgMHg5MiwgMHg0MCwgMHg0OCwgMHgwMCwgMHgyMSwKKzB4MDEsIDB4RjYsIDB4MjQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEEsIDB4MDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDAsCisweDEzLCAweDQwLCAweDRELCAweDA4LCAweDI5LCAweDA5LCAweEE2LCAweDA0LCAweEMwLCAweDEyLCAweDQwLCAweDdCLCAweDMwLAorMHhFOSwgMHgwMSwgMHhCNCwgMHg2NiwgMHg1MCwgMHgxMiwgMHg0MSwgMHgxQiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MDQsIDB4NDAsIDB4NDUsIDB4MDAsIDB4MkMsIDB4MDMsIDB4NzAsIDB4OEMsIDB4QzAsCisweDMzLCAweDAwLCAweENCLCAweDAwLCAweDFDLCAweDIzLCAweDMwLCAweDBDLCAweEMwLCAweDMxLCAweDkwLCAweEMzLCAweDAwLAorMHgzQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMiwgMHgwMCwgMHhEMywgMHgwMCwgMHgzNCwgMHgwMywgMHg3MCwgMHgwQywKKzB4QzAsIDB4MzEsIDB4MDAsIDB4Q0UsIDB4ODAsIDB4M0UsIDB4MDMsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MzcsIDB4MDAsIDB4QzcsCisweDA4LCAweDNDLCAweDIyLCAweDcwLCAweDA4LCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhCMCwgMHgxRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhERSwgMHgwMywgMHhGMCwgMHgwMywgMHg2MCwgMHgwRiwKKzB4MDAsIDB4MzcsIDB4MDAsIDB4QkMsIDB4MjAsIDB4RjAsIDB4MDIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RjQsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweENELCAweDAwLCAweEYwLCAweDAyLCAweEMwLAorMHgwQSwgMHgwMCwgMHgzNywgMHg4MCwgMHhFRSwgMHgwNCwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRCwgMHg4MiwgMHhGNywgMHgzOCwKKzB4QkMsIDB4MjIsIDB4QjAsIDB4ODksIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDM3LCAweDQwLCAweDEzLCAweDAwLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDQwLAorMHhEMywgMHgwMSwgMHgwRCwgMHgwMywgMHhCMCwgMHgxQywgMHhEMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwNywKKzB4QjQsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4MEQsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDAxLCAweDZELCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDgwLCAweERGLCAweDA0LCAweDNDLAorMHgwMCwgMHgzMCwgMHgxOSwgMHhDMCwgMHg1NCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4ODgsIDB4MzksIDB4MDAsIDB4MzEsIDB4MDAsIDB4ODUsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MzEsCisweDAwLCAweDg0LCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweDEwLAorMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgzRCwgMHgwMCwgMHhBNCwgMHgwMCwgMHg3MCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwKKzB4MzcsIDB4MDAsIDB4OEMsIDB4ODAsIDB4RDAsIDB4MEUsIDB4QzAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MTQsIDB4OUMsIDB4MDAsCisweDE0LCAweDAzLCAweEMwLCAweDRBLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLAorMHg3OSwgMHgwMCwgMHgyOSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMSwKKzB4OTQsIDB4MDcsIDB4OTAsIDB4MUYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEE0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHg4NCwgMHg4NywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHg4NSwgMHg5NCwgMHgwNiwgMHg1NSwKKzB4MUIsIDB4NDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4NzcsCisweDAyLCAweDkxLCAweDEwLCAweDA0LCAweDA2LCAweEQwLCAweDAwLCAweDQwLCAweDA3LCAweDAwLCAweDAxLCAweDAwLCAweDE0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MjQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDAsIDB4MDMsIDB4MTAsIDB4MDUsIDB4NDAsCisweDA0LCAweDAwLCAweEQwLCAweEVDLCAweDQwLCAweDMxLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDBCLCAweDUwLCAweDhDLAorMHg0MCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg5RCwgMHgwMCwKKzB4N0IsIDB4ODcsIDB4NkMsIDB4NDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NUMsIDB4MDEsCisweEI0LCAweDA1LCAweEM4LCAweDE0LCAweDEwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LCAweEM0LCAweDE3LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg0NCwgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywKKzB4MDEsIDB4NzAsIDB4MzcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4OUUsIDB4MjEsIDB4NTAsIDB4QjcsIDB4NDAsCisweDVELCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDA0LCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwgMHhFOCwgMHgwMCwgMHg3MCwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweERDLCAweDAwLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDM3LCAweDIwLCAweERDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhFMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1RSwgMHg4MCwgMHg5MCwgMHgwMSwgMHg4MCwgMHg0QSwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjYsIDB4MDIsIDB4OTMsIDB4MDAsCisweDVDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDE2LCAweDMwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywKKzB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsCisweDA5LCAweEMwLCAweDI0LCAweDEwLCAweDlGLCAweDgwLCAweDdFLCAweDI2LCAweDMwLCAweDg5LCAweEMyLCAweDQzLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwMCwgMHg5MSwgMHgyMCwgMHg0NCwKKzB4MDIsIDB4OTAsIDB4MTksIDB4NDQsIDB4QTcsIDB4MDAsIDB4OTEsIDB4MDIsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA4LCAweDUwLCAweDIwLCAweDQwLCAweDkxLCAweDAyLAorMHg3NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMiwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDYsIDB4MTQsIDB4MzksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwgMHgyRiwKKzB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4ODIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkMsIDB4MDAsIDB4QjEsIDB4MDAsIDB4RjQsCisweDIyLCAweEQwLCAweDRCLCAweDQwLCAweDJFLCAweDAxLCAweEJELCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwQSwgMHg1NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4NDEsIDB4ODEsIDB4MDQsIDB4MDUsIDB4MDIsIDB4OTAsCisweDBBLCAweDQwLCAweDZCLCAweDAwLCAweEExLCAweDAxLCAweEY0LCAweDAyLCAweDE1LCAweDBFLCAweDQyLCAweDJCLCAweDAwLAorMHhBRCwgMHgwMCwgMHhCNCwgMHg4MiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyQywgMHgwMCwgMHhBMSwgMHgwMSwgMHhCNiwgMHgwMiwKKzB4RDAsIDB4MEEsIDB4NDAsIDB4MjgsIDB4MDAsIDB4QUQsIDB4MDEsIDB4RjQsIDB4MDIsIDB4MTQsIDB4NDgsIDB4NDAsIDB4MjAsCisweDAyLCAweDhELCAweDA0LCAweDM0LCAweDEyLCAweDEwLCAweDRDLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4MiwgMHgwMiwgMHgxMywgMHgwQSwgMHg1QywgMHgyOCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4ODcsIDB4NDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUYsCisweDBBLCAweDdDLCAweDI4LCAweEQwLCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDAwLCAweEYwLAorMHhBMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwQSwgMHhGQywgMHgyOCwgMHgzMCwgMHhBMSwgMHhEMCwgMHg4NCwgMHgxMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDNGLCAweDAyLCAweEJGLCAweDA4LCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDIxLCAweDlGLAorMHgwOCwgMHhGQywgMHgyMywgMHhGOCwgMHg4QiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QTAsIDB4MkYsIDB4MDUsIDB4QTMsIDB4OEMsIDB4NUMsIDB4MDIsIDB4MzUsIDB4MEIsIDB4QzAsIDB4MkYsCisweDAyLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDBCLCAweEUwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRELAorMHgyMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCRiwgMHgwOCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MkUsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4QzksIDB4RTIsIDB4MjQsIDB4ODAsIDB4QkYsIDB4QTAsCisweEM4LCAweDgzLCAweDMwLCAweDBCLCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHgwOCwgMHgwMywgMHgwMSwgMHgxMSwgMHgwQywgMHg0NSwgMHg0MCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMywgMHgwMCwKKzB4MUQsIDB4MTQsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDQsIDB4MUQsIDB4MTAsIDB4NDQsIDB4MDAsCisweEQwLCAweDQxLCAweDQxLCAweDA0LCAweDAxLCAweDBELCAweDA0LCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQxLCAweDA0LAorMHgxMCwgMHgwRCwgMHg1NCwgMHg3NCwgMHgxMCwgMHg1MCwgMHhDMSwgMHg1MCwgMHgwNCwgMHgyNCwgMHgxRCwgMHgwMCwgMHg0NSwKKzB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweDIzLCAweDA1LCAweDgxLCAweDA0LCAweDA0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELAorMHgwNCwgMHgzNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwKKzB4NDksIDB4NTAsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjIsIDB4MDAsCisweDhELCAweDA0LCAweDM0LCAweDUyLCAweDUwLCAweDU4LCAweDQwLCAweDIxLCAweDAxLCAweDhELCAweEE4LCAweDA0LCAweDgyLAorMHgxMCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjUsIDB4NDAsIDB4OTEsIDB4MDIsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDU2LCAweDAyLCAweEMwLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4MDYsIDB4MDIsIDB4MTQsCisweDQ5LCAweDQwLCAweDYzLCAweDI4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweEEzLAorMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4NTAsIDB4MDgsIDB4NTAsIDB4MjUsIDB4MDgsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzgsCisweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlELCAweDAwLAorMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHg4MCwgMHg0QywgMHgwQSwgMHgyMCwgMHgwOSwKKzB4QzEsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4NjUsIDB4MDIsCisweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MTAsIDB4NjQsCisweDAyLCAweEIwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDhGLCAweDEwLCAweDdDLCAweDBBLCAweEYwLCAweDA5LCAweEMyLAorMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4NSwgMHgyMCwgMHgxMywKKzB4NDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4OTAsIDB4RTIsCisweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFGLCAweDAwLCAweDZDLCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxRiwgMHgwOCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDgsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NTAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDFDLCAweDAyLCAweDUxLCAweDgxLAorMHg0NSwgMHgwMSwgMHg3MCwgMHgxNSwgMHg0MCwgMHg1RiwgMHgwMSwgMHg3MSwgMHgwMCwgMHg4NCwgMHgwRCwgMHgxMCwgMHg5NywKKzB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzAsIDB4MDEsIDB4OTgsIDB4MDQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0QsCisweDAwLCAweDQ0LCAweDAxLCAweDcwLCAweDA1LCAweDQwLCAweDU3LCAweDAwLCAweDdCLCAweDAzLCAweDQ0LCAweDAxLCAweEMwLAorMHgwNSwgMHg0MCwgMHgxNywgMHgxMCwgMHg3QywgMHgwMiwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNywgMHgwMCwgMHg1MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4NzIsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsCisweDAzLCAweDUwLCAweDg4LCAweDQwLCAweDczLCAweDQwLCAweEM1LCAweDA4LCAweDA0LCAweDBCLCAweDUwLCAweDJDLCAweDQwLAorMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0NCwgMHgzMywgMHgwMCwgMHhDRCwgMHgxMCwKKzB4MjUsIDB4MDIsIDB4NTAsIDB4MUQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4QzEsIDB4MEEsIDB4MjUsIDB4MDMsIDB4RDAsIDB4MEMsCisweDYwLCAweDMzLCAweDAwLCAweDRELCAweDBCLCAweDM0LCAweDAyLCAweDUwLCAweDBDLCAweDAwLCAweDUwLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwNCwgMHhCMSwgMHgwMiwgMHg4NCwgMHgzMywKKzB4NTAsIDB4MEUsIDB4NDAsIDB4NUIsIDB4MDAsIDB4NjUsIDB4MDEsIDB4ODQsIDB4NDMsIDB4MTAsIDB4MEEsIDB4NDEsIDB4M0IsCisweDAxLCAweEVELCAweDA0LCAweEI0LCAweDIzLCAweDkwLCAweDBFLCAweDQwLCAweDNCLCAweDEwLCAweEVELCAweDAxLCAweEE0LAorMHgwMywgMHg1MCwgMHgyRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFOSwgMHgyMSwgMHhBNiwgMHgwMywgMHhEMCwgMHg0RSwgMHg0MCwKKzB4M0IsIDB4MDEsIDB4NjksIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTgsIDB4MUMsIDB4NDQsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDc4LCAweDAyLCAweEUzLCAweDAxLCAweDlDLCAweDI3LCAweDcxLAorMHgxRSwgMHhDMCwgMHg3QiwgMHgyMCwgMHhGNywgMHgwMSwgMHg4RCwgMHgwNiwgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwKKzB4RUQsIDB4MDUsIDB4QUMsIDB4ODcsIDB4RDAsIDB4M0UsIDB4QzAsIDB4N0IsIDB4MDIsIDB4RUYsIDB4MDEsIDB4QUMsIDB4MDcsCisweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEUzLCAweDAxLCAweEFDLCAweDk3LCAweEYwLCAweDlFLCAweEUwLCAweDdCLAorMHgyMCwgMHg2RCwgMHgyMSwgMHhCQywgMHgwNywgMHg3NCwgMHgxRSwgMHhDMiwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4QkQsIDB4NDAsIDB4OUYsIDB4MDYsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsCisweEMwLCAweDE3LCAweDAwLCAweDVCLCAweDAwLCAweDNDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDM3LCAweDA0LCAweERGLAorMHgwMiwgMHg3QywgMHgwQiwgMHhGMCwgMHgyRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHg2MCwKKzB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MEIsIDB4RjAsIDB4QUQsIDB4QzAsIDB4MzcsIDB4MDAsCisweDFGLCAweDAwLCAweDNDLCAweDVCLCAweEIwLCAweDA5LCAweEMyLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg0RiwgMHg0MCwgMHhCMywgMHgwMywgMHhDQywgMHgxMywgMHhGMCwgMHgxRSwgMHhDMCwKKzB4NkMsIDB4MDAsIDB4QkYsIDB4MDEsIDB4OEMsIDB4MDYsIDB4MzAsIDB4MUIsIDB4QzAsIDB4N0IsIDB4MDQsIDB4RjMsIDB4MTMsCisweENDLCAweDBGLCAweDMwLCAweDNGLCAweEMwLCAweDdGLCAweDA0LCAweEZGLCAweDgxLCAweEZDLCAweDg3LCAweEIwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHg0RiwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwNCwgMHg3RiwKKzB4MDksIDB4Q0MsIDB4MDYsIDB4MzAsIDB4OUQsIDB4QzIsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDg4LCAweDA5LCAweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDA4LAorMHgwNCwgMHgyRCwgMHg0NCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhDNCwKKzB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MTAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsCisweDNCLCAweDAwLCAweEFELCAweDEwLCAweEJDLCAweDIzLCAweEQwLCAweDBFLCAweEMwLCAweDNBLCAweDAwLCAweDZELCAweDA4LAorMHg4NCwgMHgwMywgMHgxMSwgMHgzRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MTEsIDB4MDAsIDB4ODEsIDB4MDAsIDB4ODQsIDB4NjMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MkEsIDB4MDAsCisweEFELCAweDAwLCAweEM2LCAweDAyLCAweDEwLCAweDBBLCAweDQwLCAweEJGLCAweDAwLCAweEYxLCAweDAyLCAweDg0LCAweDIzLAorMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2RCwgMHgwOCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDIsIDB4NkQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzgsIDB4MDIsIDB4Q0QsIDB4NDgsIDB4ODYsCisweDAzLCAweDUwLCAweDhFLCAweDQwLCAweDIzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyOCwgMHgxMywgMHgwMCwgMHg4MSwgMHg0MiwgMHgwNiwgMHgwNywgMHhEMCwgMHg0QywgMHg0MCwgMHg0MiwgMHgwMSwgMHgwRCwKKzB4MEQsIDB4MDQsIDB4MEUsIDB4MTAsIDB4NjgsIDB4NDAsIDB4NzMsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MDQsIDB4NDMsIDB4MTAsCisweDFDLCAweDQxLCAweDMzLCAweDA0LCAweDBELCAweDA1LCAweDM0LCAweDQzLCAweDE4LCAweDM4LCAweDQwLCAweDczLCAweDAwLAorMHgxRCwgMHgwNSwgMHgxNiwgMHgyQiwgMHhEMSwgMHgwQywgMHg1MCwgMHgzMCwgMHgwOCwgMHgwRCwgMHgwMCwgMHg0MCwgMHgwQiwKKzB4NTgsIDB4MjgsIDB4NDEsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsCisweDIxLCAweDExLCAweEQxLCAweDAyLCAweENDLCAweDA3LCAweEYwLCAweDJDLCAweEMwLCAweEY2LCAweDAwLCAweERGLCAweDAyLAorMHg0RCwgMHg0NCwgMHgzNCwgMHgxRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFMywgMHgwNCwgMHhDNCwgMHgwNywgMHgzMCwgMHgwRiwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4MUYsIDB4MDMsIDB4M0MsIDB4MEIsIDB4MzAsIDB4OUQsIDB4NDAsIDB4QjcsIDB4MDQsIDB4NUYsCisweDAzLCAweEI0LCAweDA3LCAweEYwLCAweDBGLCAweDAwLCAweDNDLCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDIyLCAweDcyLAorMHgzRCwgMHhDNCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDhELCAweEMwLCAweDM3LCAweDIyLCAweERGLCAweDAwLCAweDdDLCAweDIzLCAweEYwLCAweDhELCAweEMwLAorMHgzNywgMHgwMiwgMHgxRiwgMHgwMiwgMHg3QywgMHgwNywgMHg3MCwgMHg4RCwgMHhDMCwgMHgzNywgMHgwMSwgMHg1RiwgMHg0MCwKKzB4N0MsIDB4NDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDIsIDB4N0MsIDB4MDcsIDB4OTYsIDB4MUQsCisweDQwLCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDJGLCAweDgwLAorMHhGMywgMHgxMCwgMHhDQywgMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwgMHg5QywgMHgyMCwgMHg3RiwgMHgwMCwgMHhDQywgMHg1MSwKKzB4NzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MjAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzQsIDB4M0YsCisweDgwLCAweDMzLCAweDAwLCAweEZDLCAweDAzLCAweDMxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDAwLCAweENDLAorMHgwMywgMHgzMCwgMHgwRSwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHhBMCwgMHg0QywgMHg4MywgMHgzMCwgMHgxNywgMHhDMiwKKzB4MDcsIDB4MjQsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTEsIDB4MjAsIDB4NDYsIDB4MDEsIDB4QzEsCisweDA5LCAweDQ1LCAweDAzLCAweEQwLCAweDFELCAweDQwLCAweEM0LCAweDEwLCAweDFELCAweDVCLCAweDA0LCAweDFGLCAweDUwLAorMHg3NSwgMHg0MCwgMHgzMywgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MiwgMHgzNywgMHg0MCwKKzB4MTEsIDB4MDIsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MjAsIDB4MUQsIDB4MDIsIDB4NkMsIDB4MDMsCisweEIwLCAweDBELCAweDQwLCAweDM1LCAweDEwLCAweDhELCAweDA3LCAweDU0LCAweDAzLCAweDE0LCAweDNELCAweDQwLCAweDg3LAorMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg0NCwgMHgwMCwgMHg5OSwgMHgwMCwKKzB4NDQsIDB4MDMsIDB4RDAsIDB4OEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MUQsCisweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQxLAorMHgwOCwgMHg3NCwgMHgwNywgMHg5MCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMiwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NjUsIDB4MDIsIDB4MTAsIDB4OEQsIDB4NDAsIDB4MDcsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDA0LCAweDAwLCAweDkxLCAweDgwLCAweDA0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNSwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwKKzB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODEsIDB4MDAsCisweDY0LCAweDAzLCAweDk4LCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDAwLCAweDY1LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHg0QywgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MEUsIDB4MDAsIDB4QkIsIDB4NDAsIDB4Q0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDE0LCAweDAwLCAweDRGLCAweDAwLCAweDRDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDNGLAorMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHg0MCwgMHgzRiwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3QywKKzB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4NUYsIDB4NDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsCisweDM0LCAweDAwLCAweDlGLCAweDIwLCAweENDLCAweDAzLCAweDMwLCAweDA1LCAweEMyLCAweDA3LCAweDQwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEVGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEUwLCAweDNGLCAweDAwLCAweDNGLCAweDgwLCAweEJDLCAweDAzLAorMHg3MCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgxMCwgMHgzRiwgMHg4MCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MjAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdCLCAweDAwLCAweEZGLCAweDAxLCAweENDLCAweDI3LCAweEUwLCAweDFGLAorMHhDMCwgMHg3QywgMHgwMiwgMHhGQiwgMHgwMSwgMHhCRSwgMHgwRiwgMHgxMSwgMHgzRiwgMHhDMCwgMHg3QywgMHg4MiwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4RkYsIDB4MDAsIDB4RkIsIDB4MDEsIDB4REMsIDB4MDcsIDB4MzAsCisweDlGLCAweEMwLCAweDVFLCAweDAyLCAweEIzLCAweDg0LCAweEVDLCAweDMxLCAweEYwLCAweDFGLCAweEU0LCAweDdGLCAweDAwLAorMHhGRiwgMHhDMSwgMHhFQywgMHgyNCwgMHhCMCwgMHgxNywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MTAsIDB4NjksIDB4MDAsIDB4RjEsIDB4MTEsIDB4NDAsCisweDAwLCAweDIwLCAweDExLCAweDAxLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAxLCAweDE3LCAweDAxLAorMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHg4NCwgMHhCMCwgMHgwMSwKKzB4NDAsIDB4MTUsIDB4MDEsIDB4RDUsIDB4MDksIDB4NDQsIDB4QjMsIDB4RDAsIDB4MUYsIDB4NDIsIDB4N0YsIDB4MDAsIDB4RkQsCisweDAxLCAweDA0LCAweDEwLCAweDEwLCAweDE5LCAweDQwLCAweDA1LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHhERCwgMHg4NCwgMHgwMCwgMHgxMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwKKzB4MjEsIDB4QzksIDB4MDAsIDB4MzAsIDB4MTMsIDB4MTAsIDB4NEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsCisweDgzLCAweEMwLCAweDBELCAweDAwLCAweDMwLCAweDAxLCAweENELCAweDYwLCAweDQwLCAweDAzLCAweDkyLCAweDRDLCAweDQwLAorMHgyMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1MCwgMHgwQywgMHg0MCwgMHgzMywgMHg4MCwgMHhDNSwgMHgwMCwKKzB4NDQsIDB4MTAsIDB4OTEsIDB4MEQsIDB4NjQsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDA1LCAweDAwLCAweDFELCAweDAwLCAweDQ2LCAweDgwLCAweDUwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxNSwgMHgwMCwgMHg3NCwgMHgwMCwKKzB4RDAsIDB4MDEsIDB4NTAsIDB4MDQsIDB4MDgsIDB4MUQsIDB4MDAsIDB4NTQsIDB4MDAsIDB4OTgsIDB4MDEsIDB4NDAsIDB4MjEsCisweDAwLCAweDk0LCAweDAwLCAweDY0LCAweDExLCAweEQwLCAweDBELCAweDYwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDQ0LAorMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODgsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDEsIDB4MEMsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REIsCisweDAwLCAweDc0LCAweDAzLCAweDM0LCAweDBDLCAweEQwLCAweDMwLCAweDAwLCAweEQzLCAweDgwLCAweDdDLCAweDAzLCAweEYxLAorMHgwRCwgMHg0MCwgMHgzNiwgMHgwOCwgMHhEQiwgMHgwMCwgMHgxQywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMiwgMHhBNiwgMHgwMCwKKzB4ODcsIDB4MDEsIDB4N0QsIDB4MDEsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MkQsIDB4MDQsCisweEIwLCAweEQ0LCAweDQwLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLAorMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RjQsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBELCAweDAwLCAweDNELCAweDAwLCAweEVELCAweDQwLCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDA4LCAweEZGLAorMHgwNSwgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHg0MCwgMHgzRSwgMHgyMCwgMHhGRiwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGMCwKKzB4MUIsIDB4RDAsIDB4MUUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsCisweDA0LCAweEQzLCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM4LCAweDM0LCAweDEwLCAweEQ3LCAweDA4LCAweDZFLAorMHhBMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhEQiwgMHg4NCwgMHg3QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTYsIDB4MjAsIDB4OTcsIDB4MjQsCisweDZFLCAweDA5LCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDI4LCAweERGLCAweDIwLCAweDdDLCAweDAyLCAweDMwLCAweDJELAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhDNCwgMHgwMSwKKzB4MTEsIDB4MDEsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4RDAsIDB4MDYsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDQsCisweDE0LCAweDUxLCAweDQwLCAweDA3LCAweDMwLCAweDExLCAweDEwLCAweDVDLCAweDAwLCAweEQ5LCAweDAwLCAweEMxLCAweDQ1LAorMHgyNCwgMHgwRCwgMHhBQSwgMHg2NCwgMHgwMCwgMHg3MCwgMHg0MSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5QiwgMHgwNCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDQsIDB4NUMsIDB4NkUsIDB4MTAsIDB4MDksIDB4QzAsCisweDRELCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDgwLCAweEMxLAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHg4QywgMHg0MCwgMHgzNCwgMHgwMCwgMHhDNSwgMHgwMSwgMHg0NCwgMHgwNywgMHg5MiwKKzB4MUMsIDB4MDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NjAsIDB4NzMsIDB4MjAsCisweENELCAweDIzLCAweDM0LCAweDI3LCAweEQwLCAweDFELCAweDQwLCAweEYwLCAweDA0LCAweDgxLCAweDAzLCAweDM0LCAweDAxLAorMHhEMCwgMHgwQywgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwNSwgMHgzNCwgMHgwRCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgxRiwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NEMsIDB4MDAsIDB4MjEsIDB4MDEsCisweEI0LCAweDA0LCAweEQwLCAweDEzLCAweDQwLCAweDQ4LCAweDAwLCAweDIxLCAweDAxLCAweEM0LCAweDA0LCAweDk4LCAweDUyLAorMHg0NCwgMHg0QiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg5NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg2OCwgMHg0QiwgMHgwMCwgMHgyRCwKKzB4MDEsIDB4QjAsIDB4MDQsIDB4NTAsIDB4MTIsIDB4NDAsIDB4NzksIDB4MDAsIDB4RTksIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsCisweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweEExLCAweDk0LCAweDI3LCAweDEwLCAweDlBLCAweDQwLCAweDE5LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDMywgMHgwMCwgMHgzQywKKzB4MDMsIDB4RjAsIDB4OEMsIDB4NDAsIDB4MzAsIDB4MjAsIDB4QzcsIDB4MDAsIDB4MDUsIDB4MjMsIDB4QjAsIDB4NUMsIDB4QzQsCisweDMzLCAweDAwLCAweEMxLCAweDA1LCAweDNDLCAweDAzLCAweEQwLCAweDBDLCAweEMwLCAweDMzLCAweDIwLCAweENGLCAweDg4LAorMHgzQywgMHgwMywgMHhGMiwgMHgwRCwgMHg1MCwgMHhBMCwgMHgwNCwgMHhDMywgMHgwMCwgMHgzNCwgMHgwMywgMHhGMCwgMHg4QywKKzB4QzAsIDB4MzMsIDB4MDYsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDEsIDB4MzAsIDB4ODgsIDB4QzQsIDB4NEIsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDBELCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLAorMHhGMCwgMHg4MiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgyRSwgMHgwOCwgMHhENCwgMHgwMCwgMHg3MSwgMHgwMywgMHhDMCwgMHgwNywKKzB4MDIsIDB4MTcsIDB4MDgsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MEQsIDB4MDAsIDB4MUQsIDB4ODAsIDB4NjQsCisweDAwLCAweEYwLCAweDExLCAweEMwLCAweDIwLCAweDAyLCAweEQ4LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDFGLCAweEMwLAorMHg3RiwgMHgwOCwgMHhGRiwgMHgwMSwgMHhEQywgMHgwMywgMHhGMCwgMHg4QiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDM1LCAweDEwLCAweENFLCAweDAxLCAweDZDLCAweDAzLCAweEQwLCAweDBDLCAweEMwLCAweDM0LCAweDIwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg3MywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MzcsCisweDAyLCAweERGLCAweDAwLCAweDdDLCAweDA3LCAweDMwLCAweDFELCAweEMwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgwOSwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhDMCwgMHgwMiwKKzB4NDAsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MDksIDB4MDAsIDB4MkQsCisweDAwLCAweEI0LCAweDAwLCAweDUwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDIxLCAweDAwLCAweEE0LCAweDAwLCAweEQwLAorMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMiwgMHg5QywgMHgxQiwgMHhGMCwgMHg0RSwgMHg0OCwgMHgzQiwgMHgwMSwKKzB4RTksIDB4MDIsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDAyLCAweDc5LCAweDA4LCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEMwLCAweDFFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgxMCwgMHhFNCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4MDgsIDB4N0YsIDB4MDAsIDB4RTUsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NDAsIDB4MUUsCisweDYwLCAweDZCLCAweDA0LCAweEU1LCAweDA1LCAweDk0LCAweDE3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwNSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0NCwgMHgwRSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MjgsIDB4MDMsIDB4ODAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDQsIDB4MDMsCisweDAwLCAweDBELCAweDAwLCAweDA0LCAweDAwLCAweEQ4LCAweDAxLCAweDQyLCAweDA1LCAweDAwLCAweDA4LCAweDAwLCAweDM0LAorMHg4MCwgMHg1MiwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg0MCwKKzB4RTMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzksIDB4MDAsCisweDM0LCAweDBFLCAweDFDLCAweDA4LCAweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwKKzB4NUYsIDB4MDAsIDB4NDUsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDEsCisweDMwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDFGLAorMHgwMCwgMHg0RiwgMHgwMCwgMHhEQywgMHg4MSwgMHg3OCwgMHgwNSwgMHhDNCwgMHgxNywgMHgwMCwgMHg1RiwgMHg4MCwgMHhGQywKKzB4MjUsIDB4MzAsIDB4NDcsIDB4NDAsIDB4NUUsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDAwLCAweDhGLCAweDIwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEMwLCAweDBGLCAweDA4LCAweDNGLAorMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwgMHgwMywgMHhDMCwgMHgwRiwgMHgyMCwgMHgzRCwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4QzgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4NDAsIDB4ODcsIDB4MDEsCisweDFGLCAweDAwLCAweDVDLCAweDIwLCAweDcwLCAweDAwLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDIwLAorMHhGMCwgMHgwMSwgMHhFMCwgMHg0OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKKzB4NjcsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjgsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDQsCisweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI0LCAweDIwLCAweDk3LCAweDA5LCAweDRDLCAweDAyLCAweEIwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyNCwgMHgwMSwgMHg5RiwKKzB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTYsIDB4RjAsCisweDA5LCAweEM4LCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEE2LAorMHgwNiwgMHg5RCwgMHgyMCwgMHg3NCwgMHgwNiwgMHhEOCwgMHgzOSwgMHg0NCwgMHgyMywgMHgyMCwgMHg5MSwgMHgwMSwgMHg3NCwKKzB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDgsIDB4ODMsIDB4MDEsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDQsCisweDI3LCAweDAwLCAweDlELCAweDEwLCAweDc0LCAweDA2LCAweEQwLCAweDE4LCAweDUwLCAweEU0LCAweDAwLCAweEJELCAweDAwLAorMHhDNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyQywgMHgwMSwgMHhCRCwgMHg0MCwgMHg3NCwgMHgwRSwgMHhEMiwgMHgwOSwKKzB4NDIsIDB4MDcsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDgsCisweEJELCAweDAwLCAweEY0LCAweDA2LCAweEQyLCAweDBCLCAweDQwLCAweDJGLCAweDAwLCAweEIxLCAweDQwLCAweEY0LCAweDEyLAorMHg1MCwgMHg4QiwgMHg0MCwgMHgyQywgMHgyMCwgMHhCRCwgMHgwMCwgMHhFNCwgMHgwMiwgMHg5MCwgMHgwQiwgMHg2MCwgMHgyRSwKKzB4MDAsIDB4QjUsIDB4MDEsIDB4RjQsIDB4MEEsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsCisweDEzLCAweEQyLCAweDA5LCAweDQwLCAweDI0LCAweDgwLCAweDlELCAweDAwLCAweDc0LCAweDQzLCAweEQwLCAweDA5LCAweDYwLAorMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwgMHgyOCwgMHgwMCwgMHhBRCwKKzB4MDIsIDB4QjQsIDB4MEEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjYsIDB4MEEsIDB4RDAsCisweDJBLCAweDUwLCAweDI4LCAweDAyLCAweEJELCAweDAwLCAweEU1LCAweDBBLCAweDEwLCAweDBBLCAweDYwLCAweEFCLCAweDAwLAorMHhBRCwgMHgwMCwgMHhCNiwgMHgwMiwgMHhEMCwgMHgyQiwgMHg2MiwgMHhBMSwgMHgwMCwgMHg4RCwgMHgyMCwgMHgwNCwgMHg4QSwKKzB4RDIsIDB4MjgsIDB4NDAsIDB4MjAsIDB4ODgsIDB4OEQsIDB4ODAsIDB4MzQsIDB4MjIsIDB4RDAsIDB4MjgsIDB4NDAsIDB4NDMsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHg4NywgMHg0MiwgMHgxMywgMHgwMCwgMHg3RSwgMHgwMCwgMHg3MCwgMHgwMSwKKzB4QzAsIDB4ODQsIDB4MDAsIDB4NTcsIDB4MDAsIDB4MkMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEMyLCAweDE1LCAweDAwLCAweDFGLCAweDAxLCAweDRELCAweDA0LCAweEUwLAorMHgxMSwgMHhEMCwgMHg0NCwgMHgwMCwgMHgxRCwgMHgwMSwgMHgzQywgMHgwOCwgMHhGMCwgMHgwMCwgMHhFMiwgMHg3NywgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MEQsIDB4OUYsIDB4MDEsIDB4N0MsCisweDg2LCAweEYyLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlELCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDE5LCAweDQ0LAorMHgyNywgMHgwMSwgMHg5MywgMHgwMCwgMHg1QywgMHgwNiwgMHhFMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzgsIDB4NkUsIDB4MDAsIDB4QkYsIDB4MDIsIDB4RjQsIDB4MEUsIDB4RjAsIDB4MzksCisweEMwLCAweEE3LCAweDA4LCAweDlGLCAweDAyLCAweEZDLCAweDEyLCAweEYwLCAweDFGLCAweEMwLCAweDY3LCAweDYwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMiwgMHhGQywgMHgwMiwKKzB4RDEsIDB4MEEsIDB4QzAsIDB4MjcsIDB4MTAsIDB4QkUsIDB4MDAsIDB4RDgsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjcsCisweDAyLCAweEJGLCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweEFGLCAweDAwLCAweEI3LCAweDAwLCAweERDLAorMHgwMiwgMHhDMCwgMHgyQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMSwgMHhCQywgMHg0NiwgMHgzMCwgMHhEOSwgMHhDMCwKKzB4NkMsIDB4MDEsIDB4QjMsIDB4MTEsIDB4QzgsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDA1LCAweDFCLCAweDA1LCAweDc0LCAweDE0LCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNywgMHgwNCwgMHgxRCwgMHgwMCwgMHg3NCwgMHg1NCwgMHhEMCwgMHgxMSwgMHg0MCwgMHgwNywgMHgwMSwKKzB4MUQsIDB4MDAsIDB4NzQsIDB4NTQsIDB4RDAsIDB4MDEsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsCisweDkwLCAweDUxLCAweDQwLCAweDQ3LCAweDA1LCAweDExLCAweDIwLCAweDc0LCAweDE0LCAweDUwLCAweDMxLCAweDQwLCAweDg1LAorMHgwMCwgMHgxMSwgMHgwMiwgMHg1NCwgMHgwMCwgMHhEMCwgMHg1MCwgMHg0MSwgMHg3MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MzQsIDB4NDIsIDB4RDAsIDB4MDgsCisweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAyLCAweEQwLCAweDQ4LCAweDQxLCAweDIzLCAweDIxLCAweDhDLAorMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNywgMHgyMCwgMHg5NCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg5MCwKKzB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDIsIDB4MzQsIDB4NTIsIDB4NTAsIDB4QzgsIDB4NDAsIDB4MjAsIDB4MDIsCisweDg1LCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5OSwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4ODAsCisweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LAorMHgwMCwgMHhBNywgMHgwMSwgMHg5MSwgMHgwMCwgMHg3MCwgMHg0MiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgzNywgMHgwMCwgMHg5NSwKKzB4MDAsIDB4NTYsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweDA4LCAweDI1LCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4OTAsIDB4MEIsIDB4QzAsCisweDJGLCAweEMwLCAweDkzLCAweDAxLCAweEZDLCAweDJBLCAweDcxLCAweDBCLCAweEM4LCAweDIwLCAweDQwLCAweDk3LCAweDQwLAorMHg0QywgMHg5RSwgMHhGMCwgMHgyQiwgMHg0MCwgMHgxNywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MDAsIDB4MjUsIDB4MDQsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RTEsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDNCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMiwgMHg2NywKKzB4MDAsIDB4OUYsIDB4ODksIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUIsIDB4ODAsIDB4N0MsCisweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzQSwgMHgwMSwgMHhEMCwgMHgwNiwgMHgwMCwgMHgxMywKKzB4MDAsIDB4NkMsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDQsIDB4ODAsIDB4MTMsIDB4MjgsIDB4N0MsIDB4MDAsIDB4QjIsCisweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDEzLCAweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMyLCAweDg3LCAweDAwLAorMHgxRiwgMHgwMCwgMHgwQywgMHgwOCwgMHgzMSwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0RCwgMHg4OCwKKzB4MzAsIDB4MjEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsCisweERDLCAweDAwLCAweDVELCAweDQwLCAweDc0LCAweDExLCAweDE1LCAweDU3LCAweEMwLCAweDE0LCAweDEwLCAweDU1LCAweDQwLAorMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg3QiwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwKKzB4NDAsIDB4NTQsIDB4MDAsIDB4NkIsIDB4MDIsIDB4RjQsIDB4MEQsIDB4MzQsIDB4MDUsIDB4NDAsIDB4OUIsIDB4MDAsIDB4N0QsCisweDAyLCAweDZFLCAweDAxLCAweEIwLCAweDA1LCAweDQwLCAweDlDLCAweDAwLCAweDdCLCAweDFCLCAweEM0LCAweDA1LCAweDEwLAorMHgwNSwgMHhDOCwgMHg1MiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhGNiwKKzB4ODIsIDB4Q0QsIDB4MDksIDB4MzQsIDB4MDMsIDB4MTAsIDB4MzgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsCisweDAzLCAweEMwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweDQ1LCAweDA1LCAweDM0LCAweDAzLCAweDkwLCAweDA4LCAweDQwLAorMHgzMiwgMHgwMiwgMHhDMSwgMHgwNCwgMHgzNCwgMHgwMSwgMHgxOCwgMHgwQywgMHg0MCwgMHhFMywgMHgwMywgMHg4RCwgMHgxMCwKKzB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDQsIDB4QTIsIDB4MDEsIDB4ODksIDB4MDMsIDB4MjQsIDB4MUIsIDB4MUQsIDB4MEMsCisweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDE4LCAweDgwLAorMHhBRCwgMHg0NCwgMHhGNCwgMHgxNywgMHgxMCwgMHgxQSwgMHg0NCwgMHg3QywgMHgwMCwgMHhFNSwgMHgwMCwgMHhCNCwgMHgxMiwKKzB4RDIsIDB4NUEsIDB4NDAsIDB4N0MsIDB4MDEsIDB4RTksIDB4MDAsIDB4RjYsIDB4MTcsIDB4MTAsIDB4MUEsIDB4NDAsIDB4MkEsCisweDAwLCAweEUxLCAweDAwLCAweEY0LCAweDBGLCAweDkwLCAweDBFLCAweDQwLCAweDNCLCAweDAxLCAweDhELCAweDExLCAweEY0LAorMHgwQiwgMHg5MCwgMHg4RSwgMHg0MCwgMHgyOCwgMHgwNCwgMHhBOSwgMHgyMCwgMHhBNCwgMHgwRiwgMHgxMCwgMHg1RSwgMHg0MCwKKzB4MTIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsCisweDIxLCAweEJDLCAweDFFLCAweDEwLCAweDFFLCAweEMwLCAweDc4LCAweDAyLCAweEUzLCAweDAxLCAweEJDLCAweDA3LCAweEQyLAorMHg1RiwgMHhDMCwgMHg3OCwgMHgwNCwgMHhFNSwgMHgwMSwgMHhCQywgMHg5NywgMHhCMCwgMHgxQSwgMHg2MCwgMHg3RSwgMHgwMCwKKzB4RTEsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MTksIDB4M0UsIDB4QzAsIDB4N0IsIDB4MTEsIDB4QUYsIDB4MDEsIDB4QTYsIDB4MEUsCisweDMwLCAweDFDLCAweDg4LCAweDZBLCAweDAwLCAweEFCLCAweDAxLCAweEVDLCAweDA1LCAweDMwLCAweDNFLCAweEMwLCAweDUwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwgMHgwOCwgMHg5RiwgMHgwMCwKKzB4M0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzgsIDB4QjEsIDB4MDEsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4ODksCisweERBLCAweDMzLCAweDAyLCAweERDLCAweDAwLCAweDNDLCAweDIzLCAweEYwLCAweDA4LCAweDgwLCAweDI1LCAweDAwLCAweDlGLAorMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHgwOSwgMHg4MCwgMHgxNywgMHgxMCwgMHg5RCwgMHgwMCwgMHg2QywgMHgwMiwgMHhDMCwKKzB4MEQsIDB4QzAsIDB4MjEsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzgsIDB4NDMsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdCLCAweDAwLCAweEYzLCAweDExLCAweENDLAorMHgwNywgMHhCOCwgMHgwQiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGRiwgMHgwMSwgMHhFRCwgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MjAsIDB4RUYsIDB4MDksIDB4NEMsIDB4MjcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4N0QsIDB4MDQsIDB4RkIsIDB4MDEsCisweDlDLCAweDA3LCAweEIwLCAweDlFLCAweEMyLCAweDVELCAweDA0LCAweEJGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLAorMHhDOCwgMHg2QywgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHgwOCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MTksIDB4MDYsIDB4RjEsIDB4NDAsIDB4QzQsIDB4MTMsCisweDM5LCAweDRBLCAweDQwLCAweDNCLCAweDAxLCAweEVELCAweDAwLCAweEM0LCAweDAyLCAweDEwLCAweDA4LCAweDQ4LCAweDNCLAorMHgwMSwgMHhDNywgMHgwMiwgMHg4NCwgMHg3NywgMHgxMCwgMHgwQSwgMHg0MCwgMHgzQywgMHgwMCwgMHg2MSwgMHgwMCwgMHg4NCwKKzB4MDMsIDB4NDAsIDB4MUUsIDB4NDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4ODQsIDB4QTQsIDB4MTMsIDB4RjAsIDB4MEUsIDB4NDAsCisweDI4LCAweDAwLCAweEU1LCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCQywgMHgwMCwgMHhBMSwgMHgwOCwgMHg4NCwgMHgwMiwgMHgwMSwKKzB4OEEsIDB4NDEsIDB4M0IsIDB4MTAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4NDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MjAsCisweEVELCAweDAyLCAweDgwLCAweDE3LCAweDEwLCAweDBCLCAweDQxLCAweDI5LCAweDAwLCAweEYxLCAweDAwLCAweDk0LCAweDAzLAorMHgxMCwgMHg0RiwgMHg0MCwgMHgxQSwgMHgwMCwgMHhBRCwgMHg4MCwgMHhCNCwgMHg0MiwgMHhEMCwgMHgxRSwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4RTUsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MUYsIDB4NDAsIDB4MjAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDAzLCAweDAwLCAweDkwLCAweDAyLCAweDQ0LCAweDBFLCAweDEwLCAweDNDLAorMHg0MCwgMHhCMywgMHgwMiwgMHhDRCwgMHgwMiwgMHgwNiwgMHgwRSwgMHgwMCwgMHgzOCwgMHg0MCwgMHhGMywgMHgwMSwgMHhDOSwKKzB4MDgsIDB4MDQsIDB4NEYsIDB4MTEsIDB4NjgsIDB4NDIsIDB4QTUsIDB4MDIsIDB4MDEsIDB4MEIsIDB4MDQsIDB4NEIsIDB4NTAsCisweDA4LCAweDQxLCAweDEzLCAweDIyLCAweDhELCAweDgxLCAweDY2LCAweDFBLCAweDUyLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLAorMHhDNSwgMHg4MCwgMHg3NCwgMHgwOCwgMHhEMCwgMHgwQywgMHg0MCwgMHgxOCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4NjUsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NEMsIDB4NEYsIDB4MzQsIDB4MTgsIDB4QzAsCisweDdGLCAweDAwLCAweERGLCAweDAzLCAweDBDLCAweDA3LCAweDMwLCAweDNELCAweEMxLCAweEJGLCAweDA0LCAweENELCAweDAxLAorMHg0RCwgMHgwQiwgMHgzNiwgMHgyRCwgMHhFNCwgMHhCNSwgMHgwMiwgMHg5MywgMHgwMiwgMHg1NCwgMHg0MiwgMHgxMCwgMHgxOSwKKzB4QzAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDUsIDB4NzQsIDB4MEYsIDB4RDAsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4OTcsCisweDIwLCAweDdDLCAweDAyLCAweEYyLCAweEJELCAweEQ1LCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHhBNywgMHgyMCwgMHg5RiwgMHgxOCwgMHg3QywgMHgwMywgMHg3MCwgMHgyOSwgMHhDMCwgMHgzNywKKzB4MDEsIDB4REUsIDB4MDgsIDB4N0MsIDB4MDMsIDB4RjQsIDB4NEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDIsIDB4N0MsCisweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDk3LCAweDgyLCAweDdDLCAweDBCLCAweDcwLCAweDhELCAweEUwLAorMHgzNSwgMHgwMCwgMHhERiwgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMiwKKzB4N0MsIDB4MkEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgwLCAweDBBLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweENDLCAweDQzLCAweDcwLCAweDBGLCAweEMxLCAweDNDLCAweDAwLAorMHhGRiwgMHgxNSwgMHhEQywgMHg2NiwgMHgzMCwgMHgxQiwgMHhDMCwgMHgzRiwgMHgyMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwMywKKzB4RjAsIDB4OUYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MzMsIDB4MTAsIDB4RkMsIDB4MDMsIDB4RTAsIDB4MEIsIDB4QzAsIDB4N0YsCisweDEwLCAweEUzLCAweDQ5LCAweENDLCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweEJGLCAweDAwLCAweEJGLCAweDIyLCAweEZDLAorMHg0MCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwKKzB4MjAsIDB4NjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4ODMsIDB4MTAsIDB4MkQsIDB4NDAsIDB4MzQsIDB4MDgsIDB4REQsCisweDQwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQ0LCAweDM3LCAweDA4LCAweERELCAweDAzLCAweDQ0LCAweDAzLCAweEQwLAorMHgxOSwgMHg2OCwgMHgyNywgMHg4MCwgMHgxNSwgMHgxMywgMHg3NCwgMHg0NywgMHhEMiwgMHg5OSwgMHhDNCwgMHg1MSwgMHgyOCwKKzB4RDEsIDB4MDMsIDB4NkMsIDB4MjcsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDQsIDB4N0MsIDB4MkYsCisweDExLCAweDBELCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLAorMHg0NiwgMHgwNCwgMHhERCwgMHgwMCwgMHg0NCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg0MSwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MDMsIDB4MTIsIDB4OEQsIDB4NDIsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsCisweDQyLCAweDM3LCAweDIwLCAweDkxLCAweDAxLCAweDc0LCAweDA3LCAweEQwLCAweDA5LCAweDQ0LCAweDE3LCAweDAyLCAweDk1LAorMHg1MCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0OCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQSwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCisweDAwLCAweENELCAweDAwLCAweDA1LCAweDAyLCAweDEwLCAweDA4LCAweDUwLCAweDMyLCAweDA4LCAweENELCAweDAwLCAweDc0LAorMHgwMywgMHg1MCwgMHg4QywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMiwgMHgwNCwgMHgxMywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MzYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjEsIDB4MzUsIDB4NDAsIDB4NDUsIDB4ODAsCisweDI0LCAweDAyLCAweDk4LCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDRELCAweDIwLCAweDM0LCAweDAwLCAweDEwLCAweDBDLAorMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyNiwgMHgwMCwKKzB4OUYsIDB4MjAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4MDEsIDB4QzAsIDB4M0UsIDB4MDAsIDB4REYsIDB4MDAsIDB4NTgsIDB4ODIsCisweDMwLCAweDA5LCAweEMwLCAweDNGLCAweDA4LCAweERGLCAweDAyLCAweDg0LCAweDQzLCAweEYwLCAweDBELCAweDQwLCAweDI3LAorMHgwMCwgMHgxMSwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHg0MCwgMHgxNywgMHg4MCwgMHg5NywgMHg4MCwgMHg0QywKKzB4MDIsIDB4MzAsIDB4MEUsIDB4ODAsIDB4MTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MEYsIDB4QzgsCisweDA3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEIwLCAweDJGLCAweDAwLCAweEJGLAorMHg0MCwgMHhGQywgMHgwMiwgMHhCMCwgMHgwNywgMHhDMCwgMHgzRCwgMHgwOCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4NEIsIDB4QzgsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsCisweDJGLCAweDAwLCAweEZDLCAweDAzLCAweEQwLCAweDA5LCAweEMwLCAweDFGLCAweDAwLCAweDdCLCAweDAwLCAweEY4LCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMiwgMHgxRiwgMHgyMCwgMHg3RiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NkYsIDB4MDAsIDB4MkYsIDB4MDQsCisweENDLCAweDA2LCAweDcwLCAweDQzLCAweEMxLCAweDBGLCAweDAxLCAweEUzLCAweDAxLCAweENDLCAweDEwLCAweDc0LCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgzMywgMHgxMCwgMHhDQywgMHg4MCwgMHgzMCwgMHgwMywgMHhEMCwgMHgwQywgMHgwMCwgMHgzMywKKzB4MDQsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4NDMsIDB4QzgsIDB4N0UsIDB4MDIsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NTMsIDB4RjAsCisweDEyLCAweEMwLCAweDZELCAweDAyLCAweEFGLCAweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDRCLCAweEMwLCAweDBGLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2NywgMHgwMCwgMHgxRCwgMHhBQiwgMHg0NCwKKzB4MDcsIDB4MTAsIDB4MzUsIDB4NDgsIDB4RDcsIDB4MDIsIDB4RDEsIDB4QTEsIDB4NDQsIDB4MEQsIDB4MTAsIDB4MzUsIDB4NDAsCisweDU3LCAweDAyLCAweDUxLCAweDQzLCAweDRDLCAweDBELCAweDEwLCAweEI1LCAweDQwLCAweEQ0LCAweDAyLCAweDUxLCAweDAzLAorMHg0NCwgMHgwRCwgMHgxMCwgMHg5NSwgMHg0MCwgMHgzMywgMHgxMSwgMHhEMSwgMHgwMywgMHg3NCwgMHg4RiwgMHhEMCwgMHgxOSwKKzB4NDAsIDB4MjcsIDB4MDEsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDQsIDB4RDIsIDB4MTEsIDB4NDAsIDB4MDcsIDB4NjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEE4LCAweDIzLCAweDAwLCAweDBELCAweDAwLCAweDQ0LCAweDAzLAorMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHg0MCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgwQSwgMHgxOCwgMHg4OCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MEEsIDB4NTAsIDB4MDgsIDB4NDgsIDB4MjAsIDB4MDAsIDB4ODksIDB4MDgsIDB4MDYsCisweDBBLCAweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDAxLCAweDgxLCAweDAyLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLAorMHgwMSwgMHgxMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MjUsIDB4MDIsIDB4MUQsIDB4QzAsIDB4NjQsIDB4QzcsIDB4MTAsCisweDA1LCAweDQ0LCAweDM3LCAweDAyLCAweEQxLCAweDAwLCAweDU2LCAweDA4LCAweDEwLCAweDA1LCAweDQwLCAweEI3LCAweDA5LAorMHg5MSwgMHgwMywgMHg2NCwgMHgwMywgMHg1MCwgMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwRSwKKzB4MTAsIDB4MDksIDB4NDIsIDB4MzcsIDB4MDEsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDAsIDB4NTcsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDA1LCAweEQwLCAweDE5LCAweDQxLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgyNywgMHgwMCwgMHhERiwgMHg1QSwgMHgwQywgMHgwRiwgMHg3MCwgMHg5MSwKKzB4QzAsIDB4QzcsIDB4MDQsIDB4RDMsIDB4MDEsIDB4NUMsIDB4MjQsIDB4MzAsIDB4MTEsIDB4QzIsIDB4QzcsIDB4MDAsIDB4MTMsCisweDAyLCAweDRDLCAweDAwLCAweDcwLCAweDIxLCAweEMxLCAweEM0LCAweDg2LCAweDEzLCAweDFCLCAweDRDLCAweDA4LCAweDMwLAorMHgwMSwgMHhDMCwgMHgzNiwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHg1OSwgMHhDMCwgMHhFNSwgMHgwMCwKKzB4OUYsIDB4MDcsIDB4N0MsIDB4MTYsIDB4RjAsIDB4MzksIDB4QzAsIDB4MEIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDJELCAweDIwLCAweEJGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDE3LCAweEMwLAorMHg0RiwgMHgwMCwgMHhGRCwgMHgwMiwgMHhFQywgMHgwMSwgMHhCMCwgMHgzRiwgMHhDMCwgMHgxQSwgMHg0MCwgMHg2RiwgMHgwMCwKKzB4OUMsIDB4MEQsIDB4QjAsIDB4MDcsIDB4QzAsIDB4NUIsIDB4MjAsIDB4N0YsIDB4MDAsIDB4RkQsIDB4MDEsIDB4RjAsIDB4MDcsCisweEMyLCAweDdGLCAweDQwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweDdGLAorMHgwMCwgMHhGQywgMHgwMSwgMHhGMiwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MTMsIDB4NEMsIDB4MjMsIDB4RjAsIDB4MDksIDB4RDAsIDB4QTAsCisweDAwLCAweERGLCAweDExLCAweDFDLCAweDBBLCAweDcwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLCAweDFGLCAweDAyLCAweDRDLAorMHgyQSwgMHgzMCwgMHgyQywgMHhDMCwgMHhBNywgMHgwMiwgMHg4MywgMHgwMiwgMHgwRCwgMHgwMiwgMHhGMCwgMHgyRCwgMHg0MSwKKzB4NzQsIDB4MDEsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MjksIDB4QzAsIDB4OTQsIDB4MDAsIDB4OUYsIDB4MEUsCisweDRDLCAweDBBLCAweEYwLCAweDI5LCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHhBMCwgMHg2NCwgMHgwMSwgMHg4MSwgMHgyMiwgMHg0NCwgMHgwMywgMHhEMCwgMHhCNSwgMHg0MCwgMHhFNCwgMHgwMiwKKzB4Q0QsIDB4MDIsIDB4NDQsIDB4MjgsIDB4RDAsIDB4QUQsIDB4NDEsIDB4QjcsIDB4MDYsIDB4MUQsIDB4MUEsIDB4NDQsIDB4MDcsCisweDEyLCAweEFELCAweDQyLCAweEI3LCAweDAwLCAweDkxLCAweDBCLCAweDZDLCAweDJBLCAweEQwLCAweDBELCAweDQxLCAweEI1LAorMHgwOCwgMHhEMSwgMHgwMSwgMHhDNCwgMHg4MywgMHhEMCwgMHgwRCwgMHhDMCwgMHgxNCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwKKzB4OTksIDB4RDAsIDB4MTksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDIwLCAweEUyLCAweDAxLCAweDAxLCAweDAwLCAweDE0LCAweDEzLCAweEQwLCAweDAwLCAweDQwLCAweDAwLCAweDI4LCAweENELAorMHgwMCwgMHgyMCwgMHgyNCwgMHg4MCwgMHgxMCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwRCwgMHgwMSwgMHgwNiwgMHg5MCwgMHgxMCwKKzB4OTAsIDB4NDAsIDB4NDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MjQsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MzQsIDB4MDAsCisweDgxLCAweDgwLCAweDI0LCAweDgzLCAweDkwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDQyLAorMHhEMSwgMHgwMCwgMHg0MywgMHgwRiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4NkEsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4OTgsIDB4NDMsIDB4NTgsIDB4MDAsIDB4RUQsIDB4MDEsCisweEI0LCAweDA3LCAweEQwLCAweDEyLCAweDQwLCAweDZCLCAweDAwLCAweDRDLCAweDAxLCAweDA0LCAweDA0LCAweDEwLCAweDFFLAorMHg0MCwgMHg2MywgMHgwMCwgMHhDMSwgMHgxMSwgMHg4NCwgMHgwNSwgMHhEMCwgMHgxNCwgMHg1MCwgMHg3OCwgMHgwMCwgMHhFMSwKKzB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MEIsIDB4NDAsIDB4N0EsIDB4MTIsIDB4QjEsIDB4MDEsIDB4ODUsIDB4MDYsIDB4RDAsCisweDEyLCAweDQ4LCAweDEzLCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIyLAorMHgwMCwgMHgwMywgMHgwOCwgMHgxQywgMHgwMywgMHhGMCwgMHhBOCwgMHhDOCwgMHgwMCwgMHg4NCwgMHhDRiwgMHgwMCwgMHgzQywKKzB4ODMsIDB4NzAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4Q0EsCisweDEzLCAweDEwLCAweDQzLCAweDAwLCAweDI0LCAweDAxLCAweEYwLCAweEUwLCAweEMwLCAweDMwLCAweDQwLCAweDgzLCAweDE4LAorMHgyQywgMHgwMywgMHhGMCwgMHg4OCwgMHhDMCwgMHgyNCwgMHg0MCwgMHg0NywgMHgwOCwgMHgwQywgMHgwMywgMHhGMCwgMHgwMCwKKzB4QzEsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzksIDB4NDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYxLCAweDhCLCAweEMwLCAweDFGLCAweDIwLCAweEZGLCAweDAwLCAweENDLCAweDAzLAorMHhGOCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHg4QiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MDEsIDB4RjAsIDB4ODMsIDB4RTAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4MDAsIDB4REQsCisweDQzLCAweEYwLCAweDRGLCAweEMwLCAweDFELCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDgzLCAweEMwLAorMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHg2NywgMHgwMCwgMHg1MywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzYsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDkzLCAweDgwLCAweDdDLCAweDA3LCAweDMyLCAweDAxLCAweEMyLCAweDQ0LCAweDAwLAorMHgxMywgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MDksIDB4QzAsIDB4NTcsIDB4MDAsIDB4NTMsIDB4ODAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MTksIDB4QzAsIDB4NDAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDk4LCAweDM5LCAweDAwLCAweEUxLCAweDAwLAorMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwOCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwKKzB4NDAsIDB4MjMsIDB4NDAsIDB4RTEsIDB4MDAsIDB4MzYsIDB4MDMsIDB4MDQsIDB4MEMsIDB4NDAsIDB4MjgsIDB4NDAsIDB4RTEsCisweDIwLCAweDA0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEU1LCAweDAwLCAweEI0LCAweDEzLCAweEQwLAorMHgwQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2MSwgMHgwMCwgMHhGNCwgMHgwMSwgMHhCMSwgMHgwMiwgMHg0MCwgMHg0OCwgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDEsIDB4QjQsCisweDA3LCAweEQwLCAweDFDLCAweDQ0LCAweDc4LCAweDAwLCAweEU1LCAweDExLCAweEI2LCAweDA3LCAweDUwLCAweDFFLCAweDQwLAorMHg1QiwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxNiwgMHg0MCwgMHg1MCwgMHgwMCwgMHg0MSwgMHgwMSwKKzB4ODQsIDB4MDcsIDB4MTQsIDB4M0UsIDB4NDAsIDB4N0YsIDB4MDAsIDB4RTEsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MUEsCisweDQwLCAweERGLCAweDAwLCAweDYxLCAweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDE4LCAweDUwLCAweDEwLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMywgMHgzNCwgMHgwMSwKKzB4RDAsIDB4OUMsIDB4NDAsIDB4QjAsIDB4MDQsIDB4OEQsIDB4MDEsIDB4MzYsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweEMxLCAweDAyLCAweDM0LCAweDA3LCAweDEwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LAorMHgwMywgMHgxMCwgMHgyQywgMHg0MCwgMHg2MywgMHgwMiwgMHhDNSwgMHgwOCwgMHgzNCwgMHgwMywgMHhEMCwgMHhBQywgMHg0MSwKKzB4RDMsIDB4MDAsIDB4NDEsIDB4NjIsIDB4MzQsIDB4ODUsIDB4OTAsIDB4MUMsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDU3LCAweDA0LCAweDczLCAweDA3LCAweEJDLCAweDA5LCAweEYwLAorMHgwNywgMHhEMCwgMHg5RSwgMHgwNCwgMHg1NywgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHg4NywgMHhFMCwgMHgxRiwgMHgwMCwKKzB4NzMsIDB4MDIsIDB4RkMsIDB4MUQsIDB4MzAsIDB4MTcsIDB4RDEsIDB4MUMsIDB4MDAsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDEsCisweDMwLCAweDI3LCAweEMwLCAweDE3LCAweDAwLCAweDUzLCAweDAxLCAweDVDLCAweDAxLCAweEYwLCAweDE3LCAweEMwLCAweDFGLAorMHgwMCwgMHg2MywgMHgwNywgMHhCQywgMHgwNSwgMHgzMCwgMHg3NywgMHhDMCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4NDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNCwgMHhGMCwKKzB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDQsCisweDFGLCAweDA2LCAweDdDLCAweDI0LCAweEYwLCAweDQxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOCwgMHhFMCwKKzB4MjAsIDB4MDAsIDB4OTMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MDgsIDB4QzAsIDB4MjAsIDB4MDAsIDB4ODMsIDB4MTAsCisweDRDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI0LCAweDAwLCAweDhGLCAweDAwLCAweDBDLCAweDAyLCAweDcwLCAweDA4LAorMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDgsIDB4NEMsIDB4MjIsIDB4MzAsIDB4NTksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDgwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDEwLCAweDI0LAorMHg0MCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxNCwgMHgwOSwgMHhEMCwgMHgyNCwgMHg1MCwgMHg5MSwgMHg0MCwgMHg0RCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDUsIDB4MDIsIDB4MTQsIDB4MDksIDB4NTAsCisweDY0LCAweDQyLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweDUwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAxLAorMHg1NCwgMHgwNiwgMHg1NCwgMHgyOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDAwLCAweDI2LCAweDAwLCAweDk5LCAweDAwLCAweDQ0LCAweDAzLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsCisweDQyLCAweDExLCAweDI5LCAweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgyOCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNSwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4MSwKKzB4MDAsIDB4MzQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDQsIDB4MjAsIDB4MDEsIDB4ODksIDB4MDQsIDB4MDQsIDB4MTIsIDB4RDAsCisweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDA0LCAweDA0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDYwLCAweDAwLAorMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHg1NCwgMHgwMiwKKzB4NTAsIDB4NDgsIDB4NDAsIDB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsCisweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDQ0LCAweDAwLCAweDM0LCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDEzLCAweDAwLAorMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxQiwgMHgyMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsCisweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAyLCAweDVGLCAweDgwLCAweDRDLCAweDAwLCAweDMyLAorMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBOCwgMHgyQiwKKzB4MDAsIDB4QkYsIDB4MjgsIDB4RkQsIDB4MDIsIDB4RjEsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MEEsIDB4QkYsIDB4MjAsIDB4RkMsCisweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDJGLCAweDAyLCAweEI3LCAweDA4LCAweERDLCAweDIyLCAweEYyLCAweDhCLCAweEMwLAorMHgyRiwgMHgyMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMiwgMHg4QiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCRiwgMHgwOCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4OEIsCisweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI3LCAweDAwLAorMHg5RiwgMHg4NCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHg1MiwKKzB4MzAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NDksIDB4QzAsIDB4MjQsCisweDA1LCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDJDLCAweDAyLCAweEIzLCAweDA0LCAweENDLAorMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMiwgMHgwQiwgMHhDMCwKKzB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsIDB4MDAsIDB4MUQsCisweDI4LCAweDc0LCAweDgwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAyLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLAorMHg4MSwgMHg0MCwgMHg4NywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHhBMCwgMHgxMiwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MUQsIDB4ODgsIDB4NzQsIDB4MDgsIDB4RDAsIDB4MDMsIDB4NDAsIDB4MDQsIDB4NDAsIDB4MTEsIDB4MjAsIDB4NDUsIDB4MDAsCisweEQwLCAweDAxLCAweDQwLCAweDE2LCAweDE0LCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDczLAorMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyOSwgMHgwMCwgMHhBRCwgMHgwMCwKKzB4QjQsIDB4MDIsIDB4RDAsIDB4OUEsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MDYsIDB4MTAsIDB4MUEsCisweDQwLCAweDZCLCAweDAyLCAweEFELCAweDA5LCAweEI0LCAweDA2LCAweDEwLCAweDlBLCAweDQ4LCAweDY4LCAweDIwLCAweEFELAorMHgwMSwgMHhCMCwgMHgyNiwgMHhEMCwgMHg5QSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgwNCwgMHgwQSwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4OEQsIDB4ODAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MTgsIDB4NDAsIDB4NEIsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDY1LCAweDAwLCAweEJELCAweDAwLCAweEY0LAorMHg4QSwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwKKzB4NkYsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsIDB4NkMsIDB4MDAsIDB4QkQsIDB4MDAsCisweEY0LCAweDEyLCAweEQwLCAweDBCLCAweDUwLCAweDI0LCAweDAwLCAweDkxLCAweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNiwgMHgwMiwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwQSwgMHhEMCwgMHgxOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjYsCisweEYwLCAweDI5LCAweEM4LCAweEE3LCAweDQwLCAweDkxLCAweDAwLCAweDdDLCAweDJBLCAweDM0LCAweDM5LCAweEMwLCAweEE3LAorMHgwMCwgMHg5RiwgMHgwQiwgMHg3QywgMHgwQSwgMHgzNCwgMHhBOSwgMHhEMCwgMHhBNCwgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywKKzB4MEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzEsCisweEE3LCAweDAwLCAweDlGLCAweDgyLCAweDdDLCAweDBFLCAweEYwLCAweDI5LCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNSwgMHgwOCwgMHg5RiwgMHgwMCwgMHg3OCwgMHgwNiwgMHhGMCwKKzB4MDksIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAxLCAweDNDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA5LCAweDdDLCAweDA2LAorMHhGMCwgMHg5OCwgMHhDMCwgMHgyNywgMHgwMSwgMHg4RiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MjgsIDB4N0MsIDB4NjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweENDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgwQiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwQywgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RkUsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4QjAsCisweDAzLCAweEMwLCAweDQ0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxRiwgMHgxMiwgMHg3QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MjAsIDB4NDAsIDB4MDEsIDB4NzAsIDB4MDUsIDB4NDAsCisweDE3LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE0LCAweDAwLCAweDVELCAweDIwLAorMHg3NCwgMHgwMSwgMHhEMiwgMHgwNSwgMHg0OCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHgzMCwgMHgwNSwKKzB4QzAsIDB4MUUsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MTAsIDB4N0QsCisweDAzLCAweEY0LCAweDRELCAweDUwLCAweDE3LCAweDUwLCAweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHhBMCwgMHgwMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMywKKzB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzYsCisweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDA5LCAweDAwLCAweDMwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLAorMHgzNCwgMHgwOCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg0RCwgMHgwMCwKKzB4MzQsIDB4MDksIDB4MTAsIDB4OEMsIDB4NDEsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDg4LCAweDM4LCAweDAwLCAweENELCAweDAxLCAweDg0LCAweDAzLCAweDUwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgxRSwgMHg0MCwgMHgzQSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MkEsCisweDAwLCAweEFELCAweDAwLCAweEI0LCAweDQyLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweDZELCAweDQyLCAweEI0LAorMHgwNSwgMHg1MCwgMHgxRSwgMHg0MCwgMHgwNSwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwKKzB4MTAsIDB4NDgsIDB4MDAsIDB4MkYsIDB4MDEsIDB4OEQsIDB4ODQsIDB4NzAsIDB4MTIsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MkYsCisweDAxLCAweEJDLCAweDA0LCAweDcyLCAweDEwLCAweEQwLCAweDRBLCAweDA4LCAweDJELCAweDIxLCAweEI0LCAweDA0LCAweEYwLAorMHgxMiwgMHhDMCwgMHg0QiwgMHgwMCwgMHgyRiwgMHgwMSwgMHhCQywgMHgwNCwgMHgzMCwgMHgxMiwgMHhDMCwgMHg1OCwgMHgwMCwKKzB4QUYsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDMsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDUsCisweDMwLCAweDFFLCAweEMwLCAweDQ0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LAorMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3RSwgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEM4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MEMsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NEQsCisweDAwLCAweDNGLCAweDAxLCAweENDLCAweDIwLCAweEYwLCAweDEzLCAweEMwLCAweDRDLCAweDAwLCAweDNGLCAweDAxLCAweENDLAorMHgwNCwgMHhGMCwgMHgxMywgMHhDMCwgMHg0RSwgMHgwMCwgMHgzMywgMHgwMSwgMHhDQywgMHg4NCwgMHhGMCwgMHgxMywgMHhDMiwKKzB4NEYsIDB4MDIsIDB4M0YsIDB4MDksIDB4RkMsIDB4MDQsIDB4RjAsIDB4MTMsIDB4QzAsIDB4N0MsIDB4MDAsIDB4QkYsIDB4MDEsCisweEZDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDdDLCAweDA0LCAweDczLCAweDAxLCAweDhDLCAweDA3LCAweDMwLCAweDE3LAorMHhDMCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwgMHgwOCwKKzB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RjAsIDB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MzAsIDB4OTQsIDB4MDMsCisweEQwLCAweDBFLCAweDUwLCAweDM4LCAweDQyLCAweEUxLCAweDA4LCAweDg1LCAweDIzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgwMywgMHhGMCwgMHgwRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0IsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QUMsIDB4MTIsIDB4QjAsIDB4NUUsIDB4NDAsCisweDU3LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDJELAorMHgxOCwgMHg4NCwgMHgyMCwgMHhEOCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgzRCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwKKzB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDAsIDB4RDAsIDB4MjIsIDB4NDAsIDB4OEIsIDB4MjAsCisweDJELCAweDA4LCAweEI0LCAweDAwLCAweEQwLCAweDEwLCAweDQwLCAweDE4LCAweDA0LCAweEFELCAweDAwLCAweEI0LCAweDAyLAorMHhEMCwgMHgwRiwgMHg0MCwgMHgzOCwgMHgwMCwgMHg2MSwgMHgxMCwgMHg4NCwgMHg0MywgMHgxOCwgMHg0RSwgMHg0MCwgMHgwMywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MDYsCisweDA2LCAweDBCLCAweDUwLCAweDJDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDBCLCAweEQwLCAweDBDLAorMHg0NCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDIsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NTAsIDB4NTAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsCisweDdDLCAweDQwLCAweEYzLCAweDAwLCAweDgxLCAweDAzLCAweDI0LCAweDE2LCAweDkwLCAweDJELCAweDQwLCAweDEzLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywKKzB4MjgsIDB4RDAsIDB4MTEsIDB4RDAsIDB4NDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDQsIDB4RjAsIDB4MzEsIDB4QzAsCisweDQ0LCAweDAwLCAweDEzLCAweDAxLCAweDVDLCAweDA0LCAweEYwLCAweDExLCAweEMwLCAweDQ3LCAweDAwLCAweDFGLCAweDAxLAorMHg3QywgMHgwNCwgMHhEMCwgMHgwMCwgMHhDMCwgMHg3NCwgMHgwMCwgMHhERiwgMHgwMSwgMHgzQywgMHgwMiwgMHhEMCwgMHgwRCwKKzB4QzEsIDB4QjgsIDB4MDEsIDB4NDMsIDB4MDMsIDB4NEMsIDB4MDUsIDB4MzAsIDB4QkQsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDc3LCAweDAwLCAweERGLCAweDIwLCAweDdELCAweDg3LAorMHhGMCwgMHgxRCwgMHhDMSwgMHg3NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwNywgMHhGMCwgMHgxRCwgMHhDMCwgMHg3NywKKzB4MTAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDcsIDB4RjAsIDB4MUQsIDB4QzAsIDB4NzMsIDB4MDAsIDB4REYsIDB4ODEsIDB4N0MsCisweDA3LCAweEYwLCAweDFELCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgzNSwgMHg0NCwgMHg1RiwgMHgxMCwgMHg3QywgMHgwQiwgMHhGMiwgMHgzRCwgMHhDNCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MEYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4RkMsIDB4ODAsIDB4MzAsCisweDAzLCAweEMwLCAweDBCLCAweDAwLCAweDMzLCAweDAwLCAweEJDLCAweDQwLCAweDMwLCAweDAyLCAweEMxLCAweDBDLCAweDA4LAorMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzMiwgMHgxMCwgMHhGQywgMHg4MCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEMsIDB4MDAsIDB4RUYsIDB4MDksIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweEIzLCAweDAwLCAweENDLCAweDAwLCAweDMwLCAweDVGLCAweEMwLCAweDEwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHgzMiwgMHgwMCwgMHhEMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MiwgMHgwRCwKKzB4NDIsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsCisweDAwLCAweDc2LCAweDAzLCAweEQwLCAweDBELCAweDQyLCAweDM3LCAweDQwLCAweEQxLCAweDAwLCAweDY0LCAweDAzLCAweEQyLAorMHgwRCwgMHhDMCwgMHgyNCwgMHgwOCwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4OTUsIDB4OTMsIDB4MTQsIDB4MEMsIDB4MTAsIDB4NEQsIDB4NDAsIDB4MTUsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDA0LCAweDAwLCAweDExLCAweDQwLCAweDc0LCAweDAwLCAweDkwLCAweDAxLCAweDQwLAorMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NTQsIDB4MDAsIDB4RDAsIDB4MDEsCisweDQwLCAweDc2LCAweDgwLCAweEQ5LCAweDAwLCAweDQ0LCAweDAzLCAweDE4LCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQxLAorMHgyMSwgMHg1NCwgMHgwRCwgMHgxMiwgMHgwRCwgMHg0OCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjgsIDB4MzQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTQsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweDE0LCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0OCwKKzB4MDAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDUsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MjAsIDB4MTUsIDB4MDAsCisweDU0LCAweDAyLCAweDExLCAweDBELCAweDQwLCAweDQxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwKKzB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzIsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NzQsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweDA0LAorMHgxMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzQiwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywKKzB4MDIsIDB4MzIsIDB4NDUsIDB4QzAsIDB4MDAsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEEwLCAweDNGLCAweDQwLCAweEZGLCAweDgwLCAweEZDLCAweDAzLCAweDUxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEVGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEQsIDB4MTAsCisweEJELCAweDIwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDQwLCAweEFGLCAweDgwLCAweEZELCAweDAyLAorMHhGMCwgMHgyOSwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4MkYsIDB4MDEsIDB4NzMsIDB4MDEsIDB4RkMsIDB4MTEsIDB4MzQsIDB4MzMsIDB4QzAsIDB4MUUsIDB4MDEsIDB4QjMsIDB4MTQsCisweENDLCAweDA3LCAweEYwLCAweDBCLCAweEMwLCAweDNDLCAweDAxLCAweEJGLCAweDgwLCAweENDLCAweDI3LCAweEYwLCAweDgzLAorMHhDMCwgMHg3OCwgMHgwMCwgMHgyMywgMHgwMSwgMHhDQywgMHhCMywgMHhGMCwgMHg0QiwgMHhDMCwgMHgxQSwgMHgyMSwgMHg3MywKKzB4MDEsIDB4RUMsIDB4MTAsIDB4RjIsIDB4MTMsIDB4QzAsIDB4M0MsIDB4MDUsIDB4N0YsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsCisweDFGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweEY3LAorMHgwMCwgMHhEMSwgMHg4MSwgMHg3NCwgMHgyNSwgMHgxMiwgMHgwRCwgMHg0MCwgMHhENCwgMHgwMiwgMHg5MSwgMHgwMywgMHg0NCwKKzB4ODcsIDB4RDAsIDB4MzksIDB4ODAsIDB4RkUsIDB4MDIsIDB4OUQsIDB4MDMsIDB4NDQsIDB4MTMsIDB4RDAsIDB4NjEsIDB4NDAsCisweDM0LCAweDQ0LCAweDEzLCAweDgxLCAweEQ0LCAweDIzLCAweEQwLCAweEI5LCAweDQwLCAweEQ0LCAweDAyLCAweDkxLCAweDAxLAorMHg0NCwgMHgzMSwgMHhEMSwgMHgxMSwgMHg0MCwgMHhGQywgMHgwMCwgMHg5RCwgMHg4MSwgMHgzNCwgMHg4NywgMHhEMCwgMHgxRCwKKzB4NDQsIDB4MEYsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4QTMsIDB4MDAsCisweEMxLCAweDAwLCAweDc0LCAweDAxLCAweDUwLCAweDRDLCAweDQwLCAweDE2LCAweDAwLCAweEM1LCAweDAwLCAweDA0LCAweDAzLAorMHhEMCwgMHgyMCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMiwgMHgwNCwgMHgxMywgMHhEMCwgMHgyOCwgMHg0MCwgMHgzMCwKKzB4MDEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MDgsIDB4NjAsIDB4MTMsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MjQsCisweDQyLCAweEQyLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDBDLCAweDQwLAorMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg3NSwgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MUQsIDB4NDAsIDB4MzQsIDB4MDQsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MTMsIDB4RDAsCisweDM5LCAweDYwLCAweDM2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDc0LCAweDAwLAorMHg1OSwgMHgwMCwgMHg1NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgxNSwgMHgwMCwgMHg5MSwgMHgxMCwgMHg0NCwgMHg2MywKKzB4RDAsIDB4MjEsIDB4NDAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDYsIDB4NzQsIDB4OUIsIDB4RDgsIDB4MEQsIDB4NDAsIDB4MEYsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweEE4LCAweDIzLCAweDQwLCAweDkzLCAweDQwLAorMHgzQywgMHgzQiwgMHg3MSwgMHgxRCwgMHhDMCwgMHhEMiwgMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHgwNywgMHhGMCwgMHgxRCwKKzB4QzAsIDB4MzQsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NEQsIDB4MDMsIDB4RjAsIDB4OTEsIDB4RDAsIDB4MzQsIDB4MDAsIDB4MTEsCisweDA3LCAweDRDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDEzLCAweDQ2LCAweDUzLCAweDAwLCAweDZDLCAweDBDLCAweEYwLAorMHg5OCwgMHhFMCwgMHgzNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwNSwgMHhFMCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MjUsIDB4MDAsIDB4QkYsIDB4NDUsIDB4RkMsCisweDA1LCAweEYwLCAweDBGLCAweEMwLCAweDlGLCAweDQwLCAweEVCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLAorMHgzRiwgMHgxMCwgMHhERiwgMHgwNCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzRiwgMHg0MCwgMHhCNywgMHgwNCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzQsIDB4N0UsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4ODQsIDB4RjAsIDB4MDMsCisweDcwLCAweDM1LCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMSwgMHg3QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4RDMsIDB4MTAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzQsCisweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM0LCAweDAwLCAweERCLCAweDEwLCAweDVDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg5NiwgMHg4NCwgMHg5MywgMHgwMiwgMHg3QywgMHgwOCwgMHhCNCwgMHgyRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4RDcsIDB4MDIsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MjksIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweEU0LCAweDAxLCAweDkxLCAweDAwLCAweDc2LCAweDA1LCAweEQwLAorMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzRCwgMHgwMSwKKzB4RDEsIDB4MDAsIDB4NDQsIDB4ODMsIDB4REEsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4Q0IsIDB4ODIsIDB4QzQsIDB4NDMsCisweEQxLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweDhCLCAweDFBLCAweDc2LCAweDAwLCAweDEwLCAweDA1LCAweDQwLCAweDNGLAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMywgMHhCMCwgMHgxRCwgMHhDMCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDUsIDB4RDAsIDB4MEQsCisweDQwLCAweDMzLCAweDAyLCAweDgxLCAweDAyLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQ0LCAweDMwLCAweDAwLCAweEM1LAorMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg0MCwgMHgzNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwNywgMHhDMCwKKzB4MDgsIDB4NDAsIDB4RjAsIDB4MjAsIDB4QzEsIDB4MDMsIDB4MzQsIDB4MDAsIDB4OTAsIDB4MDQsIDB4NDgsIDB4MzMsIDB4MDAsCisweDgwLCAweDAwLCAweDM2LCAweDAyLCAweDUwLCAweDhDLCAweDQwLCAweDRFLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRCwgMHg4MCwgMHg3OCwgMHgyMCwgMHhFMSwgMHg4MSwgMHhCNCwgMHg0NywgMHhEMCwgMHgxRSwgMHg2MCwKKzB4NUIsIDB4MTAsIDB4QTEsIDB4ODEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4OUIsIDB4NDIsIDB4NzksIDB4MDAsIDB4QTEsIDB4MDEsCisweEE0LCAweDA3LCAweEQ4LCAweDEyLCAweDQwLCAweDdDLCAweDAwLCAweEY5LCAweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDFBLAorMHg0MCwgMHg1RSwgMHgwNCwgMHhBOSwgMHgwMSwgMHhCNCwgMHgwNSwgMHg5MCwgMHg1MiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhBMSwKKzB4MDEsIDB4QjQsIDB4MDYsIDB4OTAsIDB4MUUsIDB4NDAsIDB4MzYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDEwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAxLCAweEYyLCAweDBDLCAweEUwLCAweDMzLAorMHg0MCwgMHhDMywgMHgwMCwgMHgzQywgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhDNiwgMHgyMCwgMHgyNCwKKzB4MDMsIDB4RDAsIDB4NEMsIDB4QzAsIDB4MzAsIDB4MzAsIDB4ODMsIDB4NTgsIDB4MUMsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzAsCisweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweEI0LCAweDBDLCAweEMwLCAweDMzLCAweDQwLCAweDg3LCAweDAwLAorMHgzQywgMHgwMiwgMHg3MCwgMHgwQywgMHhDNCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDIsCisweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweEIzLCAweDAwLCAweEJGLCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwMywgMHhEMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgxRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4NzAsIDB4NEIsIDB4Q0EsIDB4QkYsIDB4ODIsIDB4QkYsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDBFLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBOCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMiwgMHg3NywgMHgwMCwgMHg5MywKKzB4ODAsIDB4NUMsIDB4ODMsIDB4NzAsIDB4MDksIDB4ODAsIDB4QjUsIDB4MjIsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsCisweDA1LCAweEMwLCAweDc3LCAweDIwLCAweDUzLCAweDAwLCAweDdDLCAweDMzLCAweEUwLCAweDBELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3OCwgMHgwMywgMHhCMCwgMHgxRCwgMHhDMCwgMHgzNiwgMHg4MSwgMHhERiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsCisweEI5LCAweDEwLCAweEFELCAweDQwLCAweDlDLCAweDBCLCAweEQzLCAweDBFLCAweDQwLCAweDEzLCAweDAxLCAweEUxLCAweDAwLAorMHg4NCwgMHgwMywgMHhEMCwgMHgyQSwgMHg0MCwgMHgzMCwgMHgxMSwgMHhFMSwgMHgyMiwgMHhCNCwgMHg4MywgMHhEMCwgMHgwRSwKKzB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4NTMsIDB4ODAsIDB4MEEsIDB4NDAsIDB4QkIsIDB4MDAsIDB4RUQsCisweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBFLCAweDYwLCAweDM4LCAweDA4LCAweEFELCAweDAwLCAweDk0LCAweDAyLCAweEQwLAorMHgwRSwgMHg0MCwgMHg0RiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3OSwKKzB4MDUsIDB4QUQsIDB4MDMsIDB4QjQsIDB4NTcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDMsIDB4QzEsIDB4MDksIDB4OTYsCisweDQ3LCAweEQwLCAweDdDLCAweDRDLCAweDc5LCAweDYwLCAweEUxLCAweDA1LCAweEI2LCAweDA3LCAweEQwLCAweDFFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhFMSwgMHg4MywgMHhCNCwgMHgwNywgMHhDMCwgMHhERSwgMHgwOCwgMHg3QiwgMHgwMSwgMHhBRCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4N0EsIDB4OTIsIDB4RUQsIDB4NDMsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUUsCisweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDMzLCAweDAwLAorMHg4RCwgMHg0MCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgzRCwgMHg0MSwgMHgyMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwNiwKKzB4RDAsIDB4MUMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4RUMsIDB4NjAsIDB4MjMsCisweDAwLCAweEMxLCAweDA3LCAweDM0LCAweDAzLCAweDkxLCAweDFDLCAweDQwLCAweEEzLCAweDA5LCAweDhELCAweDAwLCAweDM0LAorMHgxRiwgMHgxMCwgMHgzQywgMHg0NCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwKKzB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTEsIDB4MTAsIDB4NkYsCisweDAwLCAweEJDLCAweDIxLCAweEYwLCAweDA3LCAweEMxLCAweDFGLCAweDQwLCAweDUzLCAweDAwLCAweDVDLCAweDAxLCAweDcyLAorMHgxNywgMHhDMiwgMHgxNSwgMHgwMCwgMHg1MiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgzNywgMHhDMCwgMHgxNywgMHgwMCwKKzB4NzMsIDB4MjMsIDB4N0MsIDB4MDEsIDB4RjIsIDB4MTUsIDB4QzMsIDB4OUYsIDB4MDEsIDB4N0YsIDB4MDUsIDB4RkMsIDB4MUQsCisweDM0LCAweDE3LCAweEM1LCAweDE2LCAweDAwLCAweDdGLCAweDQwLCAweENDLCAweDgxLCAweEUwLCAweDA1LCAweEMwLCAweDVGLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NywgMHgyMCwgMHgxRiwgMHgwNCwKKzB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAwLCAweEM4LCAweDA3LCAweDQyLCAweDFGLAorMHgwMiwgMHgzQywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMiwgMHgwMywgMHgwMCwgMHgxRiwgMHgwMCwgMHgzQywgMHgwMCwgMHg3MCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDI3LCAweDAxLCAweDlCLCAweDAxLCAweDRDLAorMHgyMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwKKzB4NjEsIDB4MDAsIDB4OTYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzIsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsCisweDVDLCAweDAyLCAweDc4LCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDQ5LAorMHhDOSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RUUsIDB4MDAsIDB4OTEsIDB4ODksIDB4QzQsIDB4MDYsCisweDEwLCAweDA5LCAweDQwLCAweDZDLCAweDAwLCAweEFELCAweDAzLCAweDQ0LCAweDAyLCAweEQwLCAweDBCLCAweDQyLCAweDY0LAorMHgwMCwgMHhCMSwgMHgwNywgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHg4MiwgMHg4RCwgMHgwMiwgMHg0NCwKKzB4MDIsIDB4MTAsIDB4MEIsIDB4NDgsIDB4MkYsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NzQsIDB4MDIsIDB4QjAsIDB4NzksIDB4NDAsCisweDI3LCAweDAwLCAweDg3LCAweDAwLCAweDJDLCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwNCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxNiwKKzB4MEQsIDB4NjAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MEEsIDB4NDAsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDIsCisweDlELCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweEE0LCAweDIwLCAweDlELCAweDE4LCAweDU0LCAweDAyLAorMHg1MCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTgsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDg4LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwQSwgMHhEMCwgMHgyOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4OSwKKzB4MDAsIDB4MzQsIDB4MjIsIDB4NTAsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4OEQsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MTAsCisweDA4LCAweDQ4LCAweDIzLCAweDQwLCAweDgxLCAweDAwLCAweDM0LCAweDIyLCAweDk4LCAweDA4LCAweDQwLCAweDIzLCAweDIwLAorMHg5NSwgMHhDMiwgMHg2NCwgMHgwQSwgMHgxMCwgMHgwOCwgMHg0MCwgMHg1MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4NDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDQsIDB4MzIsIDB4MjEsIDB4RDAsCisweDQ0LCAweDAwLCAweDFGLCAweDAxLCAweDRELCAweDAwLCAweEYwLCAweDExLCAweEMwLCAweDA1LCAweDE1LCAweDFGLCAweDAxLAorMHg3QywgMHgwOCwgMHg3MCwgMHg2MSwgMHhEMSwgMHg4MCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg1QywgMHg1MCwgMHg1MCwgMHgxMSwKKzB4NDAsIDB4NDcsIDB4MDAsIDB4NTMsIDB4NDAsIDB4NkMsIDB4NTgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDUsIDB4MEYsCisweDAwLCAweDRELCAweDAwLCAweDM0LCAweDAxLCAweEM0LCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOSwgMHhCOCwgMHhBRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhGRCwgMHgwQSwgMHhGMCwgMHg0QiwgMHhDMCwgMHhBRiwKKzB4MDAsIDB4QkYsIDB4MDIsIDB4RkMsIDB4MDYsIDB4RjAsIDB4M0IsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QjMsIDB4MDIsIDB4N0MsCisweDEyLCAweEIxLCAweDRCLCAweDgwLCAweDJGLCAweDAxLCAweEJGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDJCLCAweEMwLAorMHhBRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhGOCwgMHgxMiwgMHhGMiwgMHgwQSwgMHhDNCwgMHgyNywgMHgwMCwgMHhCNywgMHgwMSwKKzB4REMsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEEwLCAweDZGLCAweDAwLCAweEJGLCAweDQwLCAweEM0LCAweDU2LCAweEYwLCAweDA5LCAweEMwLCAweDZGLCAweDAxLAorMHhCRiwgMHg0MSwgMHg3QywgMHgwMiwgMHgzMCwgMHg3OSwgMHhDMCwgMHgyQywgMHgwMCwgMHhGRiwgMHgzMSwgMHg0QywgMHgyMiwKKzB4RjAsIDB4NDksIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4QjAsIDB4NUIsIDB4QzEsIDB4NkQsCisweDE0LCAweEIzLCAweDYwLCAweDRDLCAweDUyLCAweDMyLCAweDBCLCAweEMwLCAweDI3LCAweDI4LCAweDlGLCAweDAyLCAweDdDLAorMHgwQSwgMHhGMCwgMHgwQiwgMHhDNiwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywKKzB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDgsIDB4RDAsIDB4MDEsIDB4NDMsIDB4OTcsIDB4MDAsIDB4MUQsCisweDAyLCAweDM0LCAweDU0LCAweDUyLCAweDc1LCAweDUwLCAweDg0LCAweDAwLCAweDFELCAweDAyLCAweDU0LCAweDAwLCAweDkwLAorMHg0MSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgxMSwgMHgwMCwgMHg3NCwgMHg5QywgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwKKzB4NTEsIDB4MDAsIDB4NTQsIDB4MTEsIDB4NTAsIDB4MDUsIDB4MDAsIDB4ODcsIDB4MTAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDQsCisweEQwLCAweDAxLCAweDQwLCAweDczLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLAorMHhBMywgMHg4MCwgMHhERCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhCMywgMHgzMCwgMHg4QywgMHgwMiwKKzB4MzQsIDB4MDIsIDB4MTAsIDB4QzgsIDB4NDAsIDB4MjIsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTAsIDB4QzgsCisweDQwLCAweDIwLCAweDI1LCAweDgwLCAweDAwLCAweDM0LCAweDYyLCAweDkyLCAweDA4LCAweDYwLCAweDIzLCAweDAwLCAweDk1LAorMHgwMCwgMHgxNCwgMHg1MiwgMHhEMCwgMHgwOCwgMHg0MiwgMHgyMywgMHg4MiwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4NEIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsCisweDAwLCAweDlELCAweDIyLCAweDU0LCAweDAyLCAweEQwLCAweDY5LCAweDQyLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDM0LAorMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNiwgMHg4MCwgMHg5RCwgMHgwMCwgMHg1NCwgMHg4MiwgMHg5MCwgMHgwOCwgMHg0MSwKKzB4MjAsIDB4MDAsIDB4OTEsIDB4MjQsIDB4NzYsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDIsIDB4RDUsIDB4NDgsCisweDE0LCAweDAyLCAweDUwLCAweDA5LCAweDQyLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDFBLCAweEQwLCAweDA5LAorMHg0MCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwKKzB4OEYsIDB4ODIsIDB4NUQsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MDIsCisweDMwLCAweEFCLCAweEMwLCAweDI2LCAweDEwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDI0LAorMHgwMCwgMHg5MywgMHgwNCwgMHhGQywgMHgwMiwgMHhCMCwgMHgxOCwgMHhDOCwgMHgyNywgMHg0MCwgMHg4NywgMHgwMCwgMHg1QywKKzB4MEEsIDB4NjAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MjQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDI1LCAweDAwLCAweDlGLAorMHgwMCwgMHg2QywgMHgwRSwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RSwgMHgwOSwgMHg3QywgMHgwRSwgMHhGMCwKKzB4MDgsIDB4QzAsIDB4MjUsIDB4ODAsIDB4OEYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4QTcsIDB4MTQsCisweDlGLCAweDIwLCAweDNDLCAweDAyLCAweDcwLCAweDU5LCAweENBLCAweDI3LCAweDA4LCAweDlCLCAweDExLCAweDdDLCAweDAyLAorMHhGOCwgMHg0OSwgMHhDMCwgMHgyNywgMHg4MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHg0QiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFCLCAweDEwLCAweDdDLCAweDAwLCAweDMwLCAweDIxLAorMHhEMCwgMHgwNCwgMHgwMiwgMHgxRiwgMHgwOCwgMHg0RCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhFMCwgMHgwNCwgMHgwMCwgMHgxNywKKzB4MTAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDIsIDB4NDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDgsIDB4RjIsCisweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDQzLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgxQywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3MCwKKzB4MDEsIDB4MTgsIDB4MDUsIDB4NDgsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MDUsIDB4NTAsCisweDU0LCAweDAwLCAweDdDLCAweDAzLCAweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDlDLCAweDAxLCAweDdELCAweDQxLAorMHg3QywgMHgxMSwgMHg3MCwgMHgwNywgMHhDMCwgMHhERSwgMHgwMSwgMHg3MCwgMHgwMywgMHg2OCwgMHgwMSwgMHgxMCwgMHgzNywKKzB4MDUsIDB4MTQsIDB4ODAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4QzAsIDB4NDUsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDIyLCAweDIwLCAweDhELCAweDAwLCAweDMwLCAweDA2LAorMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgxMCwgMHg4QywgMHgwOCwgMHgzNiwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MDAsIDB4OEQsIDB4MTMsIDB4MjQsIDB4MDMsIDB4QzAsIDB4MEMsIDB4NDAsIDB4QjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsCisweDAzLCAweDUwLCAweDM4LCAweDQwLCAweDIwLCAweDI5LCAweEMwLCAweDBBLCAweDA0LCAweDAzLCAweDkwLCAweDM4LCAweDAxLAorMHgzMSwgMHgwMCwgMHhDRCwgMHg4MCwgMHgzNiwgMHgwMywgMHhDMCwgMHgwQywgMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4NDAsIDB4QjQsIDB4MEYsIDB4MTAsCisweDBFLCAweDQ4LCAweDNCLCAweDAwLCAweEFELCAweDAwLCAweEI0LCAweDIzLCAweDEwLCAweDRDLCAweDQwLCAweDI4LCAweDAwLAorMHhBRCwgMHgwMCwgMHhBNCwgMHgwMywgMHhEMCwgMHg0RSwgMHg2MCwgMHgzOCwgMHg4MCwgMHhGRCwgMHgwMywgMHhBNCwgMHgyMywKKzB4NTAsIDB4MjgsIDB4NDAsIDB4M0EsIDB4MDAsIDB4RjEsIDB4MDAsIDB4MjYsIDB4MjMsIDB4MTAsIDB4MUIsIDB4NDAsIDB4MzgsCisweDAwLCAweEVELCAweDA0LCAweEI0LCAweDEzLCAweDkwLCAweDBFLCAweDQwLCAweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg2OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHgzQywgMHgwNywgMHgzNCwgMHgzRSwKKzB4QzAsIDB4N0IsIDB4MDAsIDB4QUYsIDB4ODEsIDB4QkMsIDB4MDcsIDB4MzQsIDB4N0UsIDB4NDAsIDB4NzgsIDB4MDAsIDB4QUQsCisweDAxLCAweEE0LCAweDFGLCAweEY5LCAweEJGLCAweDQwLCAweDQ4LCAweDAwLCAweEU3LCAweDAxLCAweEFDLCAweDE3LCAweDcwLAorMHgxNiwgMHhFMCwgMHg2OCwgMHgwMCwgMHhFMywgMHgwMSwgMHg4QywgMHg1NywgMHhCMCwgMHgxRSwgMHhFMCwgMHg3OSwgMHgwMCwKKzB4RUQsIDB4MDMsIDB4QkUsIDB4MEYsIDB4RjAsIDB4MUUsIDB4QzQsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDI1LCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYxLCAweDBELCAweDQ0LAorMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgxMCwgMHg4RiwgMHgwMCwKKzB4NUMsIDB4NEIsIDB4RjAsIDB4NkQsIDB4RDAsIDB4MDcsIDB4MDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4ODMsIDB4NzAsIDB4MDUsCisweEMwLCAweDMzLCAweDA4LCAweENGLCAweDAwLCAweDdDLCAweDBCLCAweDcxLCAweDBDLCAweEMwLCAweDM3LCAweDEwLCAweERGLAorMHgwMCwgMHg3NCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTAsIDB4NkYsIDB4MDAsIDB4RjMsIDB4MDksIDB4RkMsIDB4ODMsIDB4MzAsIDB4OUYsIDB4QzAsIDB4N0YsCisweDAyLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFFLCAweDgwLCAweDdELCAweDAwLCAweEJGLCAweDAxLCAweEZDLAorMHgyNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RSwgMHgyMiwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwKKzB4NkMsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4QjAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RUYsIDB4MDksCisweDhDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDAzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFMSwgMHg4MCwgMHhCMCwgMHg1MywgMHhCNCwgMHgwRSwgMHg0NiwgMHgzQiwgMHgwMiwKKzB4RTEsIDB4ODAsIDB4QjQsIDB4MDMsIDB4NzAsIDB4NEUsIDB4NDgsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDQsIDB4QjQsIDB4MDMsCisweDEwLCAweDBFLCAweDQxLCAweDM4LCAweDAwLCAweEVELCAweDA2LCAweEI0LCAweDAyLCAweDkwLCAweDBFLCAweEM0LCAweDM5LAorMHgwMCwgMHgyRiwgMHgwMCwgMHhGNCwgMHg4MywgMHgxMCwgMHg0QSwgMHgwMCwgMHgzQiwgMHgwOCwgMHhFRCwgMHgyMCwgMHhBQywKKzB4MDMsIDB4RjAsIDB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDI5LCAweDA0LCAweEUxLCAweDAwLCAweDMwLCAweDMzLCAweDE4LCAweDBFLCAweDYwLCAweDMzLCAweEMwLCAweEU5LAorMHgxMCwgMHhCNCwgMHgyNywgMHhEMCwgMHgxRiwgMHg3MiwgMHgzQiwgMHgwMCwgMHhBRCwgMHg4MCwgMHhCNCwgMHgwMywgMHg5OCwKKzB4MEMsIDB4NDAsIDB4MjksIDB4MjAsIDB4RUMsIDB4MTAsIDB4QTQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkEsIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDAzLCAweDUwLCAweDBFLCAweDQ4LCAweDNCLCAweEEwLCAweEZELCAweDExLCAweEM0LCAweDA3LAorMHgxMCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwKKzB4NjMsIDB4MDAsIDB4QzEsIDB4MjAsIDB4MzQsIDB4OEIsIDB4OTAsIDB4MUMsIDB4NDAsIDB4QjMsIDB4MDEsIDB4NDksIDB4MjAsCisweDM0LCAweDA3LCAweDUwLCAweDJDLCAweDQwLCAweDMxLCAweDAwLCAweDhELCAweDAxLCAweDM0LCAweDAzLCAweDk0LCAweDFDLAorMHg2NCwgMHg2MSwgMHgwMCwgMHgwRCwgMHgxMywgMHg3NCwgMHg4MiwgMHg5MCwgMHg5QywgMHg0MCwgMHhGMSwgMHgwMCwgMHgwNSwKKzB4MDMsIDB4MzQsIDB4MDMsIDB4MTEsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MTAsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MEIsIDB4NTgsCisweDBDLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDY1LAorMHgwMCwgMHhDMywgMHgwNCwgMHg3QywgMHgwNywgMHgxMCwgMHgxRiwgMHg0MCwgMHgzNywgMHgwNCwgMHg4QiwgMHgwMSwgMHg3NCwKKzB4MDMsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MTEsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MkYsIDB4QzAsCisweDM1LCAweDExLCAweDVGLCAweDAzLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweEE2LCAweDA4LCAweDlELCAweDA0LAorMHhGQywgMHgxNywgMHg1NCwgMHg2OCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHhDMywgMHg0NSwgMHgxMywgMHgxNSwgMHgwRCwKKzB4QzAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4NDAsCisweERGLCAweDAwLCAweDdDLCAweDEzLCAweDcwLCAweDhELCAweEMwLCAweDM3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDIzLAorMHhGMCwgMHg0RCwgMHhEMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMiwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHgwMCwgMHhCNCwKKzB4MDgsIDB4NUYsIDB4ODAsIDB4N0MsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDYsIDB4OUYsIDB4MDIsIDB4M0MsCisweDAzLCAweDUwLCAweDA5LCAweEMwLCAweDMzLCAweDAwLCAweERFLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLAorMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyNywgMHgwMCwgMHhGRiwKKzB4OTAsIDB4Q0QsIDB4MDMsIDB4RjEsIDB4MEYsIDB4QzEsIDB4M0UsIDB4MDAsIDB4QkYsIDB4MDEsIDB4Q0UsIDB4MDMsIDB4MzIsCisweDBGLCAweEUwLCAweDJDLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDVGLCAweDAwLAorMHg3RiwgMHgwMSwgMHhGQywgMHgyMywgMHgzOCwgMHgwNSwgMHhFMCwgMHgyQywgMHgwMSwgMHgzOCwgMHg5MCwgMHhGQywgMHgwMywKKzB4MzAsIDB4NEIsIDB4REQsIDB4M0QsIDB4MDAsIDB4RjMsIDB4MTAsIDB4Q0MsIDB4NDMsIDB4NzgsIDB4OUYsIDB4QzAsIDB4MTMsCisweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDU2LCAweDAwLCAweERELCAweDQ5LAorMHg0NCwgMHgwMywgMHg3MCwgMHgwQywgMHg0MCwgMHg3NCwgMHgwOCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMywgMHhCMCwgMHgwRCwKKzB4QzAsIDB4NjYsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MTUsIDB4MDMsIDB4MUQsCisweDIzLCAweDVDLCAweDAyLCAweEIwLCAweDA0LCAweDQ0LCAweDI1LCAweDAwLCAweDFELCAweDQxLCAweDc0LCAweDAzLCAweDcwLAorMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhEMCwgMHgxRCwgMHg0MCwgMHgxNywgMHgwMiwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QTQsIDB4MDEsIDB4REQsIDB4MDAsIDB4NDQsCisweDA3LCAweEQwLCAweDBELCAweDYwLCAweDM2LCAweDAyLCAweDlELCAweDA0LCAweDQ0LCAweDAzLCAweDEwLCAweDBDLCAweDQ4LAorMHgzNCwgMHgwMiwgMHhERCwgMHgwNiwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg2MCwgMHgwNywgMHgwMCwgMHg5RCwgMHg0NCwKKzB4NzQsIDB4MDMsIDB4OTMsIDB4MEQsIDB4NDAsIDB4QTQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MjksCisweDQwLCAweDM0LCAweDAwLCAweEMwLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA3LCAweDIwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhERCwgMHgyMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4ODAsIDB4OEQsIDB4MDAsIDB4NDUsIDB4MDMsIDB4OTksIDB4MEMsIDB4NDAsIDB4MzAsCisweDgwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweDhELCAweDAwLCAweDEwLAorMHgwMiwgMHg5MCwgMHgwQywgMHg2MCwgMHgxMSwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg1MCwgMHgwOCwgMHg0MCwKKzB4MzAsIDB4NDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4QTEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDI2LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweEY4LAorMHgwRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhERiwgMHg0MCwgMHhDNiwgMHgwMywgMHgzMiwgMHgwRiwgMHg1MCwgMHgyNCwgMHgyMCwKKzB4NUQsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzgsIDB4MDMsCisweDkwLCAweDBELCAweDQwLCAweDI0LCAweDA4LCAweDFGLCAweDAwLCAweEZDLCAweDAzLCAweDMxLCAweDA1LCAweEMwLCAweDM1LAorMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwMywgMHhDNCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsIDB4MjAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4N0EsIDB4MEYsCisweEMwLCAweDNGLCAweDAwLCAweDdDLCAweDAwLCAweEZDLCAweDAzLCAweEYzLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweDdGLAorMHgwMCwgMHhGQywgMHg4MywgMHhGMSwgMHgwRiwgMHg4MCwgMHgwRCwgMHgwMCwgMHgzRSwgMHgwMCwgMHhEQywgMHg4MiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MDcsIDB4NDAsIDB4M0YsIDB4MDAsCisweEY3LCAweDAwLCAweEZDLCAweDAzLCAweEY4LCAweDBCLCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHg1RiwgMHgwMCwgMHgzMywgMHg4QywgMHhDQywgMHgxMCwgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MUYsIDB4RTAsIDB4N0YsIDB4MDAsIDB4QkIsIDB4MDEsCisweEY0LCAweDA3LCAweDcwLCAweDBCLCAweEMwLCAweDdDLCAweDA1LCAweEZGLCAweDQyLCAweEZDLCAweDMyLCAweEYwLCAweDRGLAorMHhDOCwgMHgzRiwgMHgwMSwgMHhGRiwgMHgwMSwgMHhGQywgMHgwQywgMHgzMCwgMHg0RiwgMHhDMCwgMHg0RSwgMHgwMCwgMHhCMywKKzB4MDAsIDB4N0MsIDB4NzMsIDB4RjAsIDB4NEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLCAweDExLCAweDBFLCAweDZDLCAweDI0LCAweDMwLCAweDFELCAweDQwLCAweDIzLAorMHgwMCwgMHg1MSwgMHgwMywgMHgxNCwgMHgwMiwgMHg1MCwgMHg0RCwgMHg0OSwgMHgzMywgMHgxMCwgMHhDMSwgMHgxMCwgMHg3NCwKKzB4MDQsIDB4MTAsIDB4QjksIDB4RTAsIDB4RkUsIDB4MDAsIDB4RkQsIDB4MEEsIDB4NzQsIDB4MjIsIDB4RDAsIDB4QkYsIDB4NDAsCisweDNGLCAweDBCLCAweENELCAweDAwLCAweDc0LCAweDAwLCAweDUwLCAweDNELCAweDQwLCAweDQ0LCAweDAwLCAweDkxLCAweDBCLAorMHhGNCwgMHgwMywgMHhEMSwgMHgxRiwgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4QTAsIDB4MjcsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsCisweDgxLCAweDAyLCAweDA0LCAweDAzLCAweDEwLCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweEM5LCAweDAwLCAweDc0LCAweDAzLAorMHg1NCwgMHgwNCwgMHg1MCwgMHgzMiwgMHgyMCwgMHhDNSwgMHg4NCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwKKzB4MDQsIDB4Q0QsIDB4MDAsIDB4NTQsIDB4MTEsIDB4MTAsIDB4MkMsIDB4NDgsIDB4NDYsIDB4ODAsIDB4QzEsIDB4MDAsIDB4MTQsCisweDEzLCAweEQwLCAweDJDLCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBOCwgMHgyNSwgMHgwMiwgMHg1MSwgMHgwMCwgMHg0NCwgMHgwOCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMiwgMHg1MSwKKzB4MDAsIDB4NTQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MDAsIDB4RDksIDB4MDMsIDB4NzQsIDB4MTgsIDB4MTQsCisweDE1LCAweDUwLCAweDM2LCAweDAwLCAweEQ5LCAweDAwLCAweDcwLCAweDIyLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDIwLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwOSwgMHg1MCwgMHgwRCwgMHg0MCwgMHg0NiwgMHg0MCwgMHhEMSwgMHgxMSwgMHg3NCwgMHgwMywKKzB4RDEsIDB4MEQsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsCisweDUzLCAweDAxLCAweDEzLCAweDEwLCAweDQ0LCAweDBDLCAweDMwLCAweDBELCAweEMwLCAweDI3LCAweDQwLCAweDEzLCAweDgwLAorMHg0NCwgMHgwNiwgMHgzNCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEQiwgMHgwMSwgMHgzQywgMHgwOSwgMHg3MCwgMHgzMSwKKzB4NDAsIDB4MzYsIDB4MzAsIDB4REYsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDBDLCAweDMwLCAweDBELCAweEMwLCAweDQyLCAweDEwLCAweEQzLCAweDAxLCAweDdDLCAweDAzLCAweEYxLAorMHgwRCwgMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg3RCwKKzB4NTAsIDB4RUYsIDB4MTAsIDB4QkMsIDB4MjIsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MkIsIDB4MDAsIDB4OUYsIDB4MDAsIDB4QjgsCisweDI2LCAweEIwLCAweDBGLCAweDg4LCAweDNGLCAweDAwLCAweEY3LCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhGOCwgMHgwNiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgxMCwKKzB4RkMsIDB4MjQsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MEQsIDB4MjgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDA4LAorMHgxRiwgMHgwMCwgMHg2QywgMHgyOSwgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMSwgMHhDNywgMHg4MCwgMHg0QywgMHgwMywKKzB4MzQsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDIsIDB4NEUsIDB4MDgsIDB4MjIsIDB4MDUsIDB4QzgsIDB4MzQsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDZELAorMHgwOSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgwQSwgMHg3QywgMHgwMywgMHhGMSwgMHgwRCwgMHhDNCwKKzB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4REQsCisweDAwLCAweDQ1LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweEE3LCAweDAwLCAweEQxLCAweDAwLCAweDRELCAweDAzLCAweDEwLAorMHgwRCwgMHhDMCwgMHg3NiwgMHgwMiwgMHhEMSwgMHgwMCwgMHg0NSwgMHgwMSwgMHhCMCwgMHgwNCwgMHhDMSwgMHgzRSwgMHgwMCwKKzB4RkQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QzEsIDB4MUYsIDB4QzEsIDB4M0UsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDEsCisweDEwLCAweDBGLCAweEMwLCAweDQ1LCAweDAwLCAweERELCAweDQxLCAweEY0LCAweDgzLCAweEQwLCAweDVGLCAweDQwLCAweDRGLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwMSwKKzB4MDQsIDB4MDcsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweEY0LCAweDAwLCAweEM1LCAweDAwLCAweDA0LCAweDA2LCAweDE4LCAweDA4LCAweDQwLCAweDcwLCAweDAwLCAweENELAorMHg4MCwgMHgzNCwgMHgwMywgMHhDMCwgMHgxQywgMHg0MCwgMHgzMCwgMHgwOCwgMHhDRCwgMHhDMCwgMHgwNCwgMHgwMSwgMHg1MCwKKzB4MEMsIDB4NDAsIDB4NTMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MUYsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDY4LCAweDAwLCAweDJELCAweDE5LCAweDA0LAorMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg2QiwgMHgwMCwgMHg2MSwgMHgwMSwgMHhBNCwgMHgyNywgMHg5MCwgMHgxRSwgMHg0MCwKKzB4N0EsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QzQsIDB4MDQsIDB4OTksIDB4OUEsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4ODEsCisweDk0LCAweDA3LCAweEQwLCAweDlFLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDgxLCAweDg0LCAweDA3LCAweDEwLCAweDFFLAorMHg0MCwgMHg0OSwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHgyNywgMHhEMCwgMHgxRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MjAsIDB4MDAsIDB4REYsIDB4MDAsIDB4MDQsIDB4MDMsCisweDMwLCAweDBDLCAweEMwLCAweDIyLCAweDAyLCAweDg1LCAweDA4LCAweDA0LCAweDIzLCAweEYwLCAweDBELCAweDQwLCAweDMwLAorMHgwNCwgMHhDNywgMHgwOCwgMHgwNCwgMHg0MiwgMHgzMCwgMHgwMCwgMHhDMCwgMHgzMCwgMHgwNCwgMHhDRiwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4RjAsIDB4OEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4ODAsIDB4NEMsIDB4MDEsIDB4NzAsIDB4MEMsIDB4QzAsCisweDEzLCAweDg0LCAweENGLCAweDAwLCAweDFDLCAweDE3LCAweEYwLCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgyRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhERCwgMHgwMywgMHhEMCwKKzB4MEYsIDB4QzAsIDB4MkYsIDB4ODAsIDB4N0YsIDB4MDAsIDB4REUsIDB4QTMsIDB4NzAsIDB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsCisweEY3LCAweDAwLCAweEJDLCAweDIyLCAweEYwLCAweDBBLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDA4LCAweEZDLCAweDIyLAorMHhGMCwgMHhBRSwgMHhDMiwgMHgzRiwgMHgyMCwgMHhGRiwgMHgwOCwgMHhEQywgMHgyMSwgMHhGMCwgMHgwRiwgMHhDNCwgMHgwRiwKKzB4MTAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAwLCAweDMxLCAweDBELAorMHhDMCwgMHgzRiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDQsIDB4MzAsIDB4MTUsIDB4QzAsIDB4QjUsIDB4MDQsIDB4REYsIDB4MDcsIDB4NkMsIDB4MDMsIDB4RjAsCisweDVELCAweEMwLCAweDM2LCAweDA1LCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDUzLCAweDAwLAorMHhEMSwgMHg0MCwgMHg3OCwgMHgxNywgMHgzNCwgMHgyRCwgMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4OTgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsCisweDNCLCAweDkwLCAweEFDLCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDEwLCAweEVELCAweDIwLAorMHhCNCwgMHgwMCwgMHg1MCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMSwgMHhDRCwgMHgxMiwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDAsIDB4QjgsIDB4MDAsIDB4RTcsIDB4MDAsIDB4OUMsIDB4MDMsIDB4RDAsIDB4NkUsIDB4NDAsIDB4MEIsIDB4MDAsIDB4RTEsCisweDAwLCAweEY0LCAweDJCLCAweDEwLCAweDBFLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHhFOSwgMHgwMCwgMHg4RCwgMHgwMywgMHgyNCwgMHgwNSwgMHg5NCwgMHgxRSwgMHg0MCwgMHg3QiwKKzB4MTAsIDB4RUMsIDB4MDMsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MjAsIDB4RUQsIDB4MDEsIDB4RjYsCisweDA3LCAweDEwLCAweDE0LCAweDQxLCAweDc5LCAweDAyLCAweEVELCAweDA1LCAweDg0LCAweDA3LCAweDUwLCAweERDLCAweDQwLAorMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg5NiwgMHgwNSwgMHhEMCwgMHgxRSwgMHg0MCwgMHg1QiwgMHg4MCwgMHhFMSwgMHg0MSwKKzB4QjQsIDB4MTcsIDB4MTAsIDB4OUUsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDIwLCAweDYzLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDEzLCAweDkwLCAweDBDLCAweDQwLCAweDMzLCAweDAyLAorMHhDOSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MiwgMHgzMywgMHgwMCwgMHg0QywgMHgwOCwgMHgzNCwgMHgwQiwKKzB4NTAsIDB4M0MsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MDQsIDB4MDcsIDB4RDEsIDB4MEMsIDB4NDAsIDB4MzIsCisweDIwLCAweEM1LCAweDAwLCAweDU0LCAweDBCLCAweEQwLCAweDBDLCAweDQ0LCAweDIzLCAweDAwLCAweEMxLCAweDA3LCAweDM0LAorMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKzB4QTgsIDB4MUQsIDB4MDAsIDB4N0YsIDB4MEEsIDB4RUMsIDB4MUQsIDB4QjAsIDB4MDUsIDB4NDAsIDB4NTcsIDB4MDAsIDB4N0YsCisweDBBLCAweDdDLCAweDAxLCAweEI0LCAweDA1LCAweEMwLCAweDE3LCAweDEwLCAweDdELCAweDAyLCAweEZDLCAweDIxLCAweDMwLAorMHgyNywgMHhDMCwgMHgxNSwgMHgxMCwgMHg1RiwgMHgwMCwgMHg0QywgMHgxNSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNiwgMHg4MCwKKzB4NUYsIDB4QzAsIDB4REMsIDB4MDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MUYsIDB4MDIsIDB4NzMsIDB4MDIsIDB4NzQsIDB4MDEsCisweDMwLCAweDA1LCAweEMwLCAweDVGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLAorMHgwNywgMHgwMCwgMHgwRiwgMHgwMiwgMHgzQywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4NDEsCisweEMwLCAweDAzLCAweDgwLCAweDFGLCAweDAwLCAweDVELCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDAxLCAweDgwLCAweDFGLAorMHgwMiwgMHg1QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDIyLCAweDM0LCAweDA5LCAweEMwLCAweDIzLCAweDAwLCAweDgzLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHhBMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NjcsIDB4MDAsIDB4OUIsIDB4ODAsIDB4N0MsIDB4MDIsIDB4RDIsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4ODQsCisweDdDLCAweDAyLCAweEIwLCAweDA4LCAweEMwLCAweDY0LCAweDAwLCAweDhGLCAweDAxLCAweDZDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwKKzB4OUQsIDB4MDMsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NkMsIDB4MjIsCisweEQwLCAweDA5LCAweDQwLCAweEE3LCAweDAwLCAweDhELCAweDAwLCAweDZDLCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMywgMHg3NCwKKzB4MDIsIDB4NTAsIDB4MDksIDB4QzAsIDB4NjYsIDB4MDIsIDB4OUQsIDB4MDksIDB4NkMsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELAorMHgwNCwgMHg0NCwgMHgwMiwgMHgxOSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg1OCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDUsIDB4OUQsIDB4MDAsIDB4NjYsIDB4MDIsIDB4NTIsIDB4OEQsIDB4NDAsIDB4MjcsIDB4MDEsCisweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI2LCAweDAwLCAweDkwLCAweDAyLCAweDc0LCAweDAyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHhDMCwgMHg0NCwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4QTAsIDB4MDAsIDB4OEQsIDB4MDQsCisweDA0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDAxLCAweDg1LCAweDA0LCAweDI0LCAweDEyLCAweEQwLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4MSwKKzB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDgsIDB4MjEsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MjIsIDB4NTAsCisweDA4LCAweDRBLCAweDIyLCAweDAwLCAweDhELCAweDA0LCAweDI2LCAweDEyLCAweEQwLCAweDQ4LCAweDQ4LCAweDQzLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHg1RiwgMHgwQSwgMHg0QywKKzB4MDAsIDB4MzEsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MDIsIDB4MTMsIDB4MDAsIDB4MEMsIDB4MjgsIDB4NzAsIDB4QTEsIDB4QzAsCisweDg3LCAweDAyLCAweDFGLCAweDBBLCAweDY0LCAweDAwLCAweDcwLCAweDAxLCAweEM0LCAweDA3LCAweDAwLCAweDFCLCAweDBBLAorMHg3NCwgMHgyOCwgMHhGMCwgMHg0MSwgMHg0MSwgMHg4NywgMHg0MiwgMHgxMywgMHgwQSwgMHg3QywgMHgwOCwgMHhCMCwgMHg0MSwKKzB4QzEsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDk4LCAweDZGLCAweDAwLCAweEJGLCAweDI4LCAweEY1LCAweDIyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgyOCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4QkUsIDB4NDAsIDB4QkQsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4RkMsCisweDIyLCAweEYwLCAweDA5LCAweEMyLCAweDI3LCAweDAyLCAweDlGLCAweDAwLCAweEZDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLAorMHgyRiwgMHgwMCwgMHhCRiwgMHgwOCwgMHg3QywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MTQsIDB4Q0MsIDB4MTIsIDB4RjAsCisweDA5LCAweEMwLCAweDJGLCAweDAwLCAweDkzLCAweDAwLCAweEZDLCAweDEyLCAweDcwLCAweDBCLCAweEMwLCAweDJGLCAweDAyLAorMHg4RiwgMHgwMCwgMHhCQywgMHgwMiwgMHgzMiwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMSwgMHg5RiwgMHgxNCwgMHg0QywgMHgzMiwKKzB4MzAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4MDgsIDB4NEMsIDB4MDIsIDB4RjIsIDB4NDksIDB4QzEsIDB4MkYsCisweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweDIwLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHg1NywgMHgwNSwgMHgxRCwgMHgwNCwgMHg0NCwgMHgyMCwgMHhEMCwgMHgwMSwKKzB4NDgsIDB4MDcsIDB4MDQsIDB4MUIsIDB4MDgsIDB4NzQsIDB4NTAsIDB4MTAsIDB4NDEsIDB4NDAsIDB4MDcsIDB4ODEsIDB4MUQsCisweDUwLCAweDc0LCAweDAwLCAweDExLCAweDgxLCAweEMwLCAweDA2LCAweDAwLCAweDFELCAweDA0LCAweDQ1LCAweDMwLCAweEIwLAorMHgyMSwgMHhDMCwgMHgwNiwgMHgwQywgMHgxMSwgMHgwMCwgMHg0NCwgMHg1MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MDIsIDB4NzQsIDB4NDAsIDB4MTAsIDB4MDEsIDB4QzAsIDB4NzIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDE0LCAweDA1LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHgyMywgMHgwMiwgMHg4MSwgMHgwMSwgMHgxNCwgMHgzMiwgMHg1MSwgMHg0OCwgMHg0MSwgMHgyMywgMHgwMSwgMHg4RCwgMHgwNSwKKzB4NzQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDIsIDB4ODksIDB4MTQsIDB4MDQsIDB4MTIsIDB4MTAsIDB4ODgsCisweDQwLCAweDIwLCAweDQyLCAweDgxLCAweDAwLCAweDI0LCAweDEyLCAweDkwLCAweDA4LCAweDQwLCAweDIzLCAweDgwLCAweDhELAorMHgwOSwgMHgzNCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDIsIDB4OUQsIDB4MDQsIDB4NDQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAyLCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgyMiwgMHg5NCwgMHgwOSwgMHg0MCwKKzB4MjYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4QTcsIDB4MDAsIDB4OUQsIDB4MDgsCisweDc0LCAweDAyLCAweDExLCAweDA5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHgwOCwgMHgyRCwgMHgxMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwNiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTMsIDB4MDEsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4M0MsIDB4NDYsCisweDM0LCAweDA5LCAweDUwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LAorMHgwMCwgMHg5MywgMHgwMCwgMHg2RCwgMHg2RSwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3OCwKKzB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDAwLCAweDY1LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHg4MywgMHg3RSwgMHgwRSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHg0OSwgMHg3QywgMHgyNiwgMHhGMCwKKzB4NDksIDB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MjAsIDB4M0MsIDB4MDYsIDB4NzEsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsCisweDlGLCAweDAwLCAweDVDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweDNDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4ODUsIDB4MDAsIDB4MEYsIDB4MDEsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MUYsIDB4MDAsCisweDdFLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFCLCAweDAwLCAweDRGLCAweDAwLCAweEIwLCAweDAxLAorMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDE0LAorMHgwMCwgMHg3RCwgMHgwMCwgMHg3NCwgMHg4MSwgMHhEMCwgMHgwNSwgMHhDMCwgMHg5RCwgMHgwNCwgMHg1RCwgMHgwMCwgMHg3RSwKKzB4MDEsIDB4RDAsIDB4MTUsIDB4NDAsIDB4NUYsIDB4MDEsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MTQsIDB4MDQsIDB4RDAsCisweDE2LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDEwLCAweDQ1LCAweEMwLCAweDE0LCAweDAwLCAweDdELCAweDEwLAorMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0NCwgMHgxNywgMHgyMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNCwKKzB4NDAsIDB4NTMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDAyLCAweERBLCAweDBDLCAweDQ4LCAweDM1LCAweDIwLCAweENELCAweDAwLCAweDc0LCAweDAzLAorMHhEMCwgMHg5QywgMHg0MCwgMHgzMywgMHg4MCwgMHhDOSwgMHgyMCwgMHgxMCwgMHgwMiwgMHg5MCwgMHg4QywgMHg0MCwgMHgyMiwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4MDMsIDB4MTgsIDB4MDgsIDB4NDAsIDB4MzEsIDB4MDAsIDB4REQsIDB4MDEsIDB4MjQsCisweDgzLCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDgyLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLAorMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHg4MSwgMHhFRCwKKzB4MDAsIDB4QjQsIDB4NDMsIDB4RDksIDB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4NDMsIDB4RDAsCisweDBFLCAweDQwLCAweDZCLCAweDAxLCAweEYxLCAweDA1LCAweEQ0LCAweDAzLCAweDEwLCAweDBGLCAweDUwLCAweDNBLCAweDAwLAorMHhFRCwgMHgwOCwgMHgzNCwgMHgwMywgMHgxOCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgwOCwgMHhFRCwgMHgwMCwgMHhBNCwgMHgwMywKKzB4QzAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4ODAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTMsCisweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweEY4LCAweDAwLCAweDJGLCAweDAxLAorMHhCQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg1OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCNCwgMHgwNiwgMHhGMCwgMHgxRSwKKzB4RTQsIDB4RkIsIDB4MDAsIDB4RUIsIDB4MTEsIDB4OTQsIDB4MDcsIDB4QjIsIDB4MUUsIDB4RDAsIDB4N0EsIDB4MDAsIDB4RUYsCisweDE1LCAweEJDLCAweDVGLCAweDcwLCAweDFDLCAweEMwLCAweDc5LCAweDAwLCAweEZGLCAweDAxLCAweEFDLCAweDA3LCAweEUwLAorMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCNCwgMHgzNywgMHhGMCwgMHgxQSwgMHhDMCwgMHg1MywgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweEM0LCAweDE1LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEIwLCAweDBELCAweEMwLAorMHgwMywgMHgwMCwgMHhERiwgMHgwOCwgMHg2QywgMHgwMywgMHhGMiwgMHgwQywgMHhEMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwKKzB4N0MsIDB4MDMsIDB4RjQsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDcsIDB4NUYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsCisweEM4LCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDIzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3QiwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNywKKzB4RkEsIDB4OEYsIDB4QzAsIDB4NkYsIDB4MDIsIDB4RjMsIDB4MDksIDB4OEMsIDB4MEYsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsCisweDAwLCAweEYzLCAweDAxLCAweEVDLCAweDA3LCAweDMwLCAweDFFLCAweEMwLCAweDdDLCAweDMwLCAweEY3LCAweDQxLCAweENDLAorMHgwNywgMHg3MCwgMHgxRiwgMHhDNCwgMHg3QywgMHgwMCwgMHhGMywgMHgwMSwgMHhEQywgMHg0NywgMHg3MiwgMHgxRiwgMHhDOCwKKzB4N0IsIDB4MjIsIDB4RjcsIDB4QTEsIDB4RkMsIDB4ODcsIDB4MzIsIDB4MUIsIDB4QzIsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDAwLCAweDYxLCAweDQwLCAweDg0LCAweDAzLCAweDc4LAorMHgwRSwgMHg0NCwgMHgyQiwgMHgxMCwgMHhFMSwgMHgyMCwgMHhBQywgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RjEsIDB4MDAsIDB4ODQsIDB4MTMsIDB4NTAsIDB4NEUsIDB4NDQsIDB4MzksIDB4MDAsIDB4RjEsIDB4MDAsIDB4QzQsIDB4MDMsCisweDEwLCAweDBFLCAweEMwLCAweDNFLCAweDAyLCAweEUxLCAweDAwLCAweDg2LCAweDAzLCAweEYwLCAweDBFLCAweDQwLCAweDNCLAorMHg0MCwgMHhFNSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N0QsIDB4MDAsIDB4MjUsIDB4MDAsIDB4ODQsIDB4MDMsIDB4NTAsIDB4OEUsCisweDQwLCAweDBCLCAweDAwLCAweEMwLCAweDIwLCAweDg0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEUxLAorMHgwMiwgMHhDNCwgMHgwMywgMHgxMiwgMHgwRSwgMHg2MCwgMHgzOCwgMHgwMCwgMHhFNSwgMHgwMCwgMHg4NCwgMHgwMywgMHgxMCwKKzB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsIDB4RDQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0YsIDB4NDAsCisweEVELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywgMHgwMCwgMHg0MSwgMHgwMywgMHgwNSwgMHgxQiwgMHg1MCwgMHgwQywgMHg0MCwKKzB4NDMsIDB4NDAsIDB4QzEsIDB4MDIsIDB4MjQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4QzEsIDB4NDEsCisweDA0LCAweDAzLCAweDUxLCAweDBDLCAweDYwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDA1LCAweDAzLCAweDEwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwQiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMiwgMHg4RCwKKzB4NDIsIDB4MzQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NTAsIDB4MTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEE4LCAweEI1LCAweDQyLCAweEQ3LCAweDA2LCAweDBDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDI3LAorMHgwNCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMiwgMHgzNCwgMHgwRCwgMHhDMCwgMHgzRiwgMHg0MCwgMHhGMSwgMHgwMSwgMHgwQywKKzB4MDcsIDB4MzAsIDB4QUMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4RjcsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsCisweDNELCAweDAwLCAweEQzLCAweDAwLCAweERDLCAweDIzLCAweDcwLCAweDBELCAweDQwLCAweEY3LCAweDQyLCAweERGLCAweDAyLAorMHhGQywgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4MDAsCisweERGLCAweDAxLCAweDVDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDA4LCAweDVDLCAweDYzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNiwKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwOCwgMHgzRiwgMHgwMCwgMHgzMywgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgwMCwgMHhGNywKKzB4MTAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4NUYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzAsCisweDlCLCAweEMwLCAweDM0LCAweDAwLCAweEUzLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDFELCAweEMwLCAweDNGLCAweDAwLAorMHhCMywgMHgwMSwgMHhGRSwgMHgwMywgMHhGMCwgMHgwRiwgMHhDQSwgMHhCRiwgMHgwMCwgMHhGRSwgMHgxMCwgMHhGNCwgMHgwMywKKzB4MzAsIDB4NUEsIDB4ODAsIDB4MDAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsCisweDM2LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweEM3LCAweDA0LCAweEQxLCAweDAwLAorMHg3NCwgMHgyNiwgMHgxMCwgMHgxRCwgMHg0MCwgMHgwNywgMHgwMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgxRCwKKzB4NTAsIDB4MzUsIDB4MDAsIDB4REIsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsCisweDAzLCAweDc2LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDIwLCAweERELCAweDA5LCAweDc0LCAweDAzLCAweDEwLAorMHgwOSwgMHhDMCwgMHgwNSwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzMiwKKzB4MDAsIDB4RDEsIDB4MDEsIDB4NzQsIDB4MjMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MzQsCisweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDM3LCAweDAyLCAweERELCAweDAwLCAweDc2LCAweDA3LCAweDEwLCAweDBELCAweDQwLAorMHg3NCwgMHgyMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHg0RCwgMHg0MCwgMHgzMywgMHgyOCwgMHhEMSwgMHgwNCwKKzB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MDAsIDB4MDksCisweDQwLCAweDA1LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLAorMHgwNSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsCisweDAwLCAweEM5LCAweDAwLCAweDA1LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDQywgMHgwMCwgMHgzNCwgMHgyMywgMHgxMCwgMHgwOCwgMHg0MCwKKzB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4M0UsIDB4MDAsIDB4MDMsCisweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweEQ3LCAweDAwLCAweEZDLCAweDAyLCAweDE0LAorMHgwOSwgMHhDMCwgMHgyMywgMHgxMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QzMsIDB4MjAsIDB4NzQsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweEZDLCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDAxLAorMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsCisweDgwLCAweDBGLCAweDAwLCAweEZBLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHg4MCwgMHgzRiwgMHgwOCwgMHhGRiwgMHgwMCwgMHhCMCwgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MTUsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEJGLCAweDhDLCAweENDLAorMHgxMiwgMHgzMiwgMHhDRiwgMHhDMCwgMHg1RSwgMHgyMiwgMHhCMywgMHgyMSwgMHhGQywgMHgwNiwgMHhGMCwgMHhDRiwgMHhDNCwKKzB4M0QsIDB4MDMsIDB4MjMsIDB4MDEsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MTMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4NEMsCisweENDLCAweDA2LCAweEIwLCAweDE3LCAweEQ4LCAweDVDLCAweDAwLCAweEY3LCAweDA0LCAweEFDLCAweDA0LCAweEIwLCAweDRGLAorMHhDMSwgMHg3QSwgMHgwOCwgMHgzRiwgMHgwMSwgMHhEQywgMHgzMCwgMHhCMCwgMHgxQiwgMHhDNCwgMHgwRiwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4NzcsIDB4MDAsIDB4REQsIDB4MEUsIDB4NDQsIDB4MjYsCisweDEwLCAweEVGLCAweDQwLCAweDI0LCAweDAxLCAweEQxLCAweDA0LCAweDc0LCAweDA1LCAweDcwLCAweDJGLCAweDQwLCAweEJDLAorMHgwMiwgMHg5MSwgMHgwMSwgMHhGNCwgMHgxQiwgMHg5MCwgMHg0MCwgMHg0MCwgMHhGRiwgMHgwMiwgMHhGRCwgMHgwOCwgMHg0NCwKKzB4QzMsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4MDAsIDB4RjEsIDB4MDEsIDB4NDQsIDB4MDUsIDB4MTAsIDB4M0YsIDB4NDAsCisweDc0LCAweDEwLCAweDFELCAweEExLCAweDM0LCAweDM4LCAweEIwLCAweDFDLCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwgMHgxMCwKKzB4NEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MTAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4NkMsIDB4NDgsIDB4MzMsIDB4MTEsCisweDQ1LCAweDAwLCAweDM0LCAweDBCLCAweEQwLCAweDAwLCAweDQxLCAweDMzLCAweDEwLCAweEM1LCAweDQ0LCAweDA0LCAweDEzLAorMHg5MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwNSwgMHhDOSwgMHgwOCwgMHg2NCwgMHgwMSwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MjAsIDB4MDUsIDB4MDAsIDB4MTQsIDB4MDAsIDB4RDAsIDB4MDQsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweERELCAweDIwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELAorMHg0MCwgMHhBNCwgMHgwQSwgMHhEMSwgMHgwNCwgMHg3NCwgMHgwMSwgMHg1MCwgMHgwRCwgMHg0MCwgMHgzNCwgMHg0MCwgMHg5NSwKKzB4MDIsIDB4NzQsIDB4MDMsIDB4RDEsIDB4MTksIDB4NDIsIDB4MzcsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4OTAsCisweDA4LCAweDQwLCAweEI0LCAweDAxLCAweEQ5LCAweDAwLCAweDY0LCAweDA1LCAweEQwLCAweDBELCAweDUwLCAweDM2LCAweDA0LAorMHgxRCwgMHgxOCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDksIDB4MEMsIDB4MDMsIDB4MzQsIDB4MEQsIDB4QzAsCisweEQ2LCAweDA4LCAweDkzLCAweDAxLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweEQ3LCAweDA5LAorMHg3QywgMHgwMywgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHg4MywgMHhCMSwgMHgyNSwKKzB4QzksIDB4MzQsIDB4NDAsIDB4REIsIDB4MDAsIDB4NkMsIDB4MTcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTYsIDB4MDAsIDB4MUYsCisweDAyLCAweDVDLCAweDE2LCAweEYwLCAweDM5LCAweEMwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhFRiwgMHhDMSwgMHg3QywgMHgwMiwgMHhGMiwgMHgwRSwgMHhDMCwgMHg2RiwKKzB4MDAsIDB4RkYsIDB4ODAsIDB4RkMsIDB4OEQsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4QkIsIDB4MDAsIDB4RkMsCisweDAzLCAweEIwLCAweDBGLCAweEM4LCAweDNGLCAweDAwLCAweEZGLCAweDEwLCAweERELCAweDgzLCAweDcwLCAweDBCLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGNywgMHgwMCwgMHhEQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHgzRiwgMHgwMSwKKzB4RkMsIDB4MEUsIDB4QjQsIDB4MkYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDM1LCAweDAxLCAweDkzLCAweDQwLCAweDdDLCAweDAzLCAweDMwLCAweDhELCAweEMwLCAweDM1LCAweDA4LAorMHhERiwgMHgwMCwgMHg0QywgMHgwQiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHg4OCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywKKzB4NzAsIDB4MjUsIDB4QzAsIDB4MzQsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MkQsIDB4RTIsIDB4MjcsCisweDAwLCAweERGLCAweDA0LCAweDdDLCAweDA5LCAweEYwLCAweDBELCAweEMxLCAweDI1LCAweDAwLCAweDU3LCAweDAwLCAweDVDLAorMHgwMiwgMHgzMCwgMHgwNSwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDUsIDB4NzQsIDB4ODMsIDB4MTgsIDB4MUYsIDB4NDAsIDB4MjQsIDB4MDAsIDB4REQsCisweDEwLCAweDQ0LCAweDgxLCAweEQwLCAweDBGLCAweEMwLCAweDNFLCAweDg4LCAweDlGLCAweDAwLCAweEM0LCAweDAzLCAweDEwLAorMHgwRCwgMHg0MiwgMHgzQywgMHgwMCwgMHhGRCwgMHgwMCwgMHg3NCwgMHgwMywgMHhCMCwgMHgwOSwgMHg0MCwgMHg3NywgMHgwMCwKKzB4RUQsIDB4MDAsIDB4MzYsIDB4MDUsIDB4MTAsIDB4NkUsIDB4NDAsIDB4QjQsIDB4MDIsIDB4MUIsIDB4MTEsIDB4NEMsIDB4MDMsCisweDQwLCAweDA1LCAweEMwLCAweDRFLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLAorMHhCMiwgMHgwMiwgMHg4MSwgMHgwMCwgMHgzNCwgMHg4MiwgMHgxMCwgMHgxQywgMHg0MCwgMHg2NSwgMHgwMiwgMHhDRCwgMHgwMSwKKzB4MDQsIDB4ODEsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDgsIDB4MEQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTIsIDB4MDAsCisweDQyLCAweDMyLCAweDIwLCAweENELCAweDQzLCAweDc0LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDY3LCAweDAyLCAweENELAorMHgwMywgMHgyNCwgMHgwMywgMHg1OCwgMHgwQywgMHg0NCwgMHgzMSwgMHgwOCwgMHgwNSwgMHgwMSwgMHg1NCwgMHgxMSwgMHgxMCwKKzB4MDQsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsCisweDAwLCAweEExLCAweDAxLCAweEI0LCAweDA2LCAweDEwLCAweDFDLCAweDQwLCAweDY4LCAweDAwLCAweEVELCAweDAxLCAweDg0LAorMHgwNSwgMHhEMCwgMHgxRSwgMHg0OCwgMHg3QSwgMHgwMCwgMHgzNSwgMHgwMSwgMHg4NCwgMHgyNywgMHgxMCwgMHg5NiwgMHg1MCwKKzB4N0EsIDB4MDAsIDB4RUQsIDB4MTksIDB4QjQsIDB4MDMsIDB4MTAsIDB4MUEsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RUQsIDB4MDEsCisweEY0LCAweDA1LCAweDE5LCAweDFDLCAweDQwLCAweDdDLCAweDAwLCAweDM5LCAweDgxLCAweEE0LCAweDI0LCAweDEwLCAweDFFLAorMHg0MCwgMHgxQSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwKKzB4QzMsIDB4MDQsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDAsIDB4REYsIDB4MDAsIDB4MEQsIDB4MDEsCisweEY4LCAweDBELCAweEMwLCAweDMwLCAweDAyLCAweDRELCAweDAwLCAweDVDLCAweDA3LCAweDcwLCAweDJDLCAweEMwLCAweDMyLAorMHgwMiwgMHhDRiwgMHgwMCwgMHg3QywgMHgyMywgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDRiwgMHgxNCwgMHgzNCwKKzB4NDMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDAsIDB4QzcsIDB4MDAsIDB4MUUsIDB4MDMsIDB4MzQsIDB4MDQsIDB4QzIsCisweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDM5LCAweDQyLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgyRiwgMHhDMSwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwKKzB4MEYsIDB4ODEsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MkIsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDQsCisweEZGLCAweDEwLCAweEY0LCAweDEzLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDEwLCAweDdDLCAweDIxLAorMHg3MCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgxMCwgMHhFRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgwQiwKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDRDLCAweDAzLCAweEYwLCAweDZELCAweEMwLCAweDI3LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELAorMHhDMCwgMHgzNywgMHgwNSwgMHg1NywgMHgwMCwgMHg1QywgMHgzNywgMHgzNCwgMHgwOCwgMHhDMCwgMHgzNiwgMHgwMSwgMHhERiwKKzB4MTIsIDB4NEQsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjIsCisweDRDLCAweEMxLCAweDY2LCAweDAwLCAweDlCLCAweDAxLCAweDRDLCAweDAxLCAweEIwLCAweDA1LCAweEMwLCAweDU3LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhCRCwgMHgwNCwgMHg4NSwKKzB4MEEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4MTAsIDB4OEUsIDB4NDAsCisweDNCLCAweDAxLCAweDZELCAweDAwLCAweDlDLCAweDEzLCAweDEwLCAweDBFLCAweDQwLCAweDM4LCAweDAzLCAweEU3LCAweDA0LAorMHg4NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwOCwgMHhFRCwgMHgxNCwgMHhCNCwgMHgwMywgMHg3MCwgMHg0RSwKKzB4QzIsIDB4M0EsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODUsIDB4MDAsIDB4QjAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDA5LCAweEE0LCAweDE3LAorMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHg5MCwgMHg1RSwgMHg0MCwgMHg3QiwKKzB4MDIsIDB4RUQsIDB4MzEsIDB4MTYsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDIsIDB4N0EsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODQsCisweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDZCLCAweDAwLCAweEVELCAweDA1LCAweEI0LCAweDA3LCAweDUwLCAweERFLCAweDQwLAorMHg2OSwgMHgwMCwgMHhFOSwgMHg4MSwgMHg4NCwgMHg4NywgMHg5MCwgMHgxNiwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDIzLCAweDIwLCAweERELCAweDQwLCAweDM0LCAweDQ1LCAweDEwLCAweDBDLCAweDQwLCAweDM3LCAweDA4LAorMHhDRCwgMHgwNiwgMHgxNCwgMHgwMywgMHgxMCwgMHhCQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhENSwgMHgyMCwgMHgwNCwgMHgwNywKKzB4RDAsIDB4MTgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDEsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NTMsCisweDMwLCAweEMxLCAweDA4LCAweDA0LCAweDBCLCAweDkwLCAweDA0LCAweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4OCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg2QywgMHg0MSwgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4QkMsIDB4NEQsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NkYsCisweDAxLCAweDVDLCAweDAxLCAweDMwLCAweDM3LCAweEMwLCAweDE2LCAweDAwLCAweDU3LCAweDgwLCAweDRDLCAweDkxLCAweEYwLAorMHg0NywgMHhDMCwgMHg5RiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhCQywgMHgxNSwgMHg3MCwgMHgwNCwgMHhDMCwgMHg1RCwgMHgwQywKKzB4N0IsIDB4MDMsIDB4Q0MsIDB4MDksIDB4QTAsIDB4MDcsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDBGLCAweDAyLCAweDdDLCAweDQwLCAweDcwLCAweDIxLCAweDgwLCAweDg2LCAweDAwLCAweDE3LAorMHgxMiwgMHgzQywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDgsIDB4OEYsIDB4NDAsIDB4NEQsIDB4MTYsIDB4RjAsIDB4OTksIDB4QzAsIDB4RTcsCisweDAwLCAweDkzLCAweDA5LCAweDRELCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDVDLAorMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwKKzB4NjQsIDB4MDYsIDB4OTMsIDB4MDMsIDB4NUMsIDB4QTIsIDB4NzEsIDB4OTksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDEsCisweDdDLCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgyMCwgMHhBNiwgMHgwMCwgMHhCRCwgMHg0MCwgMHhDNCwgMHgwNiwgMHg3MCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwKKzB4OTEsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTgsIDB4MDksIDB4NDQsIDB4MjcsIDB4MDAsIDB4OTksIDB4MDAsIDB4NDQsIDB4MDIsCisweEQwLCAweDI4LCAweDQwLCAweDI0LCAweDA4LCAweDkzLCAweDIwLCAweDA0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDYwLAorMHgwMCwgMHg5MSwgMHgwNCwgMHg0NCwgMHg0RSwgMHgxMCwgMHgwOSwgMHg1MCwgMHgyNSwgMHgxMCwgMHg5RCwgMHgwNiwgMHg3NCwKKzB4MDYsIDB4NTAsIDB4MDksIDB4NDIsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDI0LCAweDEwLCAweDlELCAweDAwLCAweDQ0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLAorMHg4MCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwgMHhEMCwKKzB4MjksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDAwLCAweDU0LCAweDAyLCAweDUwLCAweDI5LCAweDQwLCAweDI0LCAweDMwLCAweDlELCAweDA4LCAweDc0LCAweDUyLAorMHgxMCwgMHgwRCwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwKKzB4MzAsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4NTgsIDB4NjgsIDB4NDAsIDB4QTcsIDB4MDAsIDB4ODEsIDB4MDIsCisweDQ0LCAweDBBLCAweDEwLCAweDg4LCAweDQwLCAweDIzLCAweDAyLCAweDk5LCAweDAwLCAweDA0LCAweDIyLCAweEQwLCAweDg5LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4OSwgMHgwOCwgMHg0NCwgMHgyMiwgMHg5MCwgMHgyOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTIsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjIsIDB4NTQsCisweDI4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDMwLCAweDA2LAorMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywgMHgwNCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxMywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MTQsIDB4NjEsIDB4QzEsIDB4ODcsIDB4MEQsIDB4MTcsIDB4MDAsIDB4NUMsIDB4NTgsIDB4RjEsIDB4MjEsIDB4QzAsCisweDA1LCAweDA1LCAweDA3LCAweDE2LCAweDVDLCAweDg4LCAweDMwLCAweDAxLCAweEQwLCAweDA0LCAweDQwLCAweDEzLCAweDU0LAorMHg1QywgMHg4MCwgMHg3OCwgMHg0MSwgMHhDMSwgMHgxNCwgMHgxMCwgMHgxRiwgMHgwMCwgMHgzQywgMHg1OCwgMHgzMCwgMHgwMSwKKzB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MzgsIDB4MjcsIDB4MDgsCisweEJGLCAweDAzLCAweEZDLCAweDBBLCAweEYwLCAweDk5LCAweEMwLCAweDZGLCAweDA4LCAweEJGLCAweDAxLCAweEZDLCAweDA2LAorMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwOSwgMHhCNywgMHgwMCwgMHg3QywgMHgxMiwgMHhGMCwgMHg0QiwgMHhDMiwgMHgyNSwKKzB4MDAsIDB4OTcsIDB4MDQsIDB4RkMsIDB4MTIsIDB4NzAsIDB4MUIsIDB4QzAsIDB4NkYsIDB4MzAsIDB4OUYsIDB4MDAsIDB4RkMsCisweDAyLCAweEY4LCAweDA5LCAweEQyLCAweDJCLCAweDgwLCAweEFGLCAweDAwLCAweEZDLCAweDEyLCAweEYwLCAweDFCLCAweEMwLAorMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyQiwgMHgwMCwgMHhCRiwKKzB4MTMsIDB4RkMsIDB4NDYsIDB4RjAsIDB4MEIsIDB4QzAsIDB4QUMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4MzAsCisweEM5LCAweEMwLCAweDI2LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLCAweDI0LCAweDA1LAorMHhCRiwgMHgwQywgMHg0OSwgMHgwMiwgMHhGMiwgMHgyOSwgMHhDMiwgMHhBRiwgMHgwMCwgMHhBRiwgMHgwNCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4NEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4QjAsIDB4MDksIDB4QzAsIDB4NjcsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDA3LAorMHg3NCwgMHg4OCwgMHhEMCwgMHg1MSwgMHg0MCwgMHg0NCwgMHgyMCwgMHgxRCwgMHgwNSwgMHg3NCwgMHgwNCwgMHgxMCwgMHhDMSwKKzB4NDgsIDB4ODQsIDB4MDQsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MjAsIDB4RDAsIDB4NDUsIDB4NTMsIDB4MDQsIDB4MDAsIDB4MUQsCisweDBDLCAweDQ0LCAweDQwLCAweEQwLCAweDE0LCAweDQwLCAweDQ3LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweDEwLAorMHg4MSwgMHg0MCwgMHgxNCwgMHgyMCwgMHg1RCwgMHgyMCwgMHg3NCwgMHgyMCwgMHgxNCwgMHgxMSwgMHg0MCwgMHg3MywgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsCisweDAyLCAweEQwLCAweDg4LCAweDQxLCAweDIwLCAweDAwLCAweDhELCAweDEwLCAweDM0LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLAorMHgyMiwgMHgwMywgMHg4OSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMSwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwKKzB4MjYsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MTAsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDIsIDB4REMsIDB4MDgsCisweDQwLCAweDIwLCAweDEwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDk0LCAweDQ4LCAweDQxLCAweDQzLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgyMCwgMHg3NCwgMHg4MiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjAsCisweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDY2LAorMHg4MiwgMHhEMCwgMHg4OSwgMHg2NiwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MSwgMHgwOSwgMHg1OCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MkEsIDB4MTAsIDB4NjksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDAwLCAweEJGLCAweDAxLCAweDdDLCAweDA2LCAweEYwLAorMHgwQiwgMHhEMCwgMHgyQywgMHgwMywgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHgxMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwKKzB4OUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NjQsIDB4MjIsCisweEYwLCAweDNCLCAweEMwLCAweDJGLCAweDA4LCAweDlELCAweDAwLCAweDM0LCAweDRBLCAweEYwLCAweDA5LCAweDQwLCAweEE0LAorMHgwMCwgMHg5RiwgMHgwMywgMHg3MCwgMHgwNiwgMHhCMCwgMHgzQiwgMHhDNCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDksCisweEM0LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEY0LCAweDA4LCAweEMwLCAweDI3LCAweDEwLCAweDlGLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg0MCwgMHg1QywgMHgwNiwgMHhGOCwKKzB4MTksIDB4QzIsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4QjAsIDB4MDksIDB4MDUsIDB4MjcsIDB4ODAsCisweDlFLCAweDEwLCAweDZDLCAweDA2LCAweEYwLCAweDE5LCAweEMwLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHg0MCwgMHg3QywgMHgwMCwgMHhCNCwgMHg4MSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDIsCisweDdDLCAweDAwLCAweEYwLCAweEExLCAweEQwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDdDLCAweDAwLCAweEYyLCAweDIxLAorMHhDMCwgMHgwNCwgMHgyMCwgMHgxMywgMHgxMCwgMHg1QywgMHg5OCwgMHhGMCwgMHgwMSwgMHhEMCwgMHg4NCwgMHgwMCwgMHgxRiwKKzB4NDIsIDB4MkMsIDB4MDAsIDB4MzQsIDB4MjEsIDB4RDAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweEEwLCAweDFDLCAweDAxLCAweDUxLCAweDAxLCAweEY0LCAweDFELCAweDEwLCAweDE1LCAweDQwLCAweDE3LAorMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4OTcsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NzEsIDB4MDMsIDB4NDQsIDB4MDEsIDB4NzAsIDB4MDUsIDB4NDAsCisweDE0LCAweDAwLCAweDcxLCAweDAxLCAweEM0LCAweDA1LCAweEQwLCAweDE2LCAweDQyLCAweDFDLCAweDAwLCAweDdELCAweDAwLAorMHhGNCwgMHgwMSwgMHgxNCwgMHgwNSwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4QTAsIDB4NjIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MUUsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzMsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweEMwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgyQywgMHg0MCwgMHgzMiwgMHg0MCwgMHhDMSwgMHgxMSwgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgzMiwKKzB4MDIsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDUsIDB4OTAsIDB4MTgsIDB4NDAsIDB4NjAsIDB4MDEsIDB4QzksIDB4MDIsIDB4MjQsCisweDAzLCAweDE0LCAweDBDLCAweDYwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHg2OCwgMHgwMCwgMHhBMSwgMHgwNiwgMHhCNCwgMHgwNiwgMHgxMCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhBRCwKKzB4MDQsIDB4QjQsIDB4MTMsIDB4RDAsIDB4OEUsIDB4NDAsIDB4MzgsIDB4ODEsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsCisweDBFLCAweDQwLCAweDc4LCAweDAwLCAweEMxLCAweDEwLCAweDg0LCAweDEzLCAweDUwLCAweDVFLCAweDQwLCAweDdBLCAweDExLAorMHhBMSwgMHgxMSwgMHg4NiwgMHgwOSwgMHhEMCwgMHgyQywgMHg0MiwgMHhBOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwQiwKKzB4MTAsIDB4NUYsIDB4NjAsIDB4MTQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsCisweDY4LCAweDAwLCAweEUzLCAweDA3LCAweEJDLCAweDA2LCAweDMwLCAweDVBLCAweEMwLCAweEVCLCAweDAwLCAweEVGLCAweDAzLAorMHhCNCwgMHgwRiwgMHhGMCwgMHgxQywgMHhDMCwgMHhGMSwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCQywgMHgxNywgMHhGMCwgMHgxNywKKzB4QzQsIDB4NzIsIDB4MDAsIDB4RTMsIDB4MDEsIDB4OUMsIDB4MTcsIDB4NzAsIDB4M0UsIDB4QzgsIDB4RkUsIDB4NDAsIDB4RTMsCisweDAxLCAweDlDLCAweDA1LCAweEIwLCAweDFBLCAweEMwLCAweDY4LCAweDA4LCAweEVELCAweDAxLCAweEFDLCAweDA1LCAweDMwLAorMHgzRSwgMHhDMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgyNSwKKzB4NTAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweEMyLCAweEI3LCAweDBELCAweERGLCAweDAwLCAweDdDLCAweDRCLCAweEYwLCAweDA1LCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgyMywgMHg3MiwgMHgwRCwgMHhEMCwgMHgyNSwgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0UsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjQsIDB4MEMsCisweEMwLCAweDQzLCAweDQwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDZGLCAweDAwLAorMHhGRiwgMHgwOSwgMHhDQywgMHgxMywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgyNywKKzB4MzAsIDB4NUYsIDB4ODAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4NDcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4N0MsCisweDAwLCAweEJGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDY4LCAweDBBLCAweEIxLCAweDBDLCAweEZDLAorMHgyNSwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHg0MiwgMHhGMywgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDNCwKKzB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODAsIDB4MjksIDB4MDAsIDB4QkQsCisweDE4LCAweDg0LCAweDQzLCAweDExLCAweDBBLCAweDQ4LCAweDNCLCAweDAwLCAweEExLCAweDEwLCAweDg0LCAweDIzLCAweDEwLAorMHgwRSwgMHg0OCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHg4QiwgMHg0MSwgMHgzOCwgMHgwMCwKKzB4N0QsIDB4MDAsIDB4OTQsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4MzgsIDB4MDMsIDB4QTEsIDB4MDQsIDB4QjQsIDB4MDksCisweEQwLCAweDhFLCAweDQwLCAweDE5LCAweDAyLCAweEUxLCAweDAwLCAweEI0LCAweDBBLCAweEYwLCAweDhFLCAweDQwLCAweDU0LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhFRCwgMHg0MCwKKzB4QTcsIDB4MjIsIDB4MTQsIDB4MEEsIDB4NDAsIDB4MkYsIDB4MDYsIDB4QjEsIDB4MDgsIDB4QzQsIDB4MDcsIDB4MTIsIDB4NEUsCisweDYwLCAweDNCLCAweDAwLCAweEVELCAweDAyLCAweEI0LCAweDAzLCAweDkwLCAweDAyLCAweDUwLCAweDM4LCAweDAyLCAweEFELAorMHgwMCwgMHhBNCwgMHgwMywgMHhEMCwgMHgxRiwgMHg0OSwgMHgyQywgMHgwNCwgMHhFOSwgMHg4OCwgMHhCNCwgMHgwMSwgMHhEMCwKKzB4MEEsIDB4NDAsIDB4MzgsIDB4ODAsIDB4NjEsIDB4MTAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NjAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDI0LAorMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg3NywgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgyMywgMHgxMCwgMHgwQywgMHg2MCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4MzQsIDB4MDMsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MzAsIDB4MDAsIDB4NEQsIDB4MDAsCisweDA2LCAweDAzLCAweEQyLCAweDNDLCAweDQwLCAweDYwLCAweDIwLCAweEM5LCAweDAwLCAweDM0LCAweDA5LCAweEQwLCAweDA4LAorMHg0MCwgMHgzMSwgMHgwMiwgMHgwMSwgMHgwMywgMHgzMCwgMHgwNywgMHg1MCwgMHgwQywgMHg2MCwgMHgxOCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDEsIDB4NkMsIDB4MDIsCisweDMwLCAweDBELCAweDQwLCAweEI3LCAweDQyLCAweEQzLCAweDIxLCAweDRELCAweDAzLCAweDE0LCAweDBGLCAweEMyLCAweDNGLAorMHgwMCwgMHhERiwgMHgwMCwgMHhGNCwgMHgwMywgMHg5MCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHhDRCwKKzB4MTcsIDB4RjAsIDB4M0QsIDB4RDAsIDB4RjQsIDB4NDAsIDB4OUEsIDB4MDAsIDB4N0MsIDB4MDksIDB4RjEsIDB4MEQsIDB4QzIsCisweEYwLCAweDAwLCAweEQxLCAweDIzLCAweDc0LCAweDA3LCAweEQwLCAweDJELCAweDUwLCAweDc0LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhCNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDNDLCAweDAzLCAweDcyLCAweDJELCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMSwgMHg5NywgMHgyMiwgMHg3QywgMHgwRCwgMHhFMCwgMHgwRCwgMHhDMCwgMHhCNywKKzB4MDQsIDB4REYsIDB4MjAsIDB4N0MsIDB4MjEsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDdGLCAweDAyLCAweEZGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDBCLAorMHhEMCwgMHgyQywgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4REMsIDB4MDMsIDB4MzAsIDB4OUIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDEsIDB4RUUsIDB4MDMsIDB4RjAsCisweDBGLCAweEMxLCAweDNGLCAweDAwLCAweEVGLCAweDA1LCAweENDLCAweDQxLCAweEYwLCAweDBCLCAweEMwLCAweDNELCAweDAwLAorMHhGQiwgMHgxMCwgMHg4QywgMHgxMCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RDYsIDB4MDAsIDB4REQsIDB4MDksIDB4NzQsIDB4MEEsIDB4RDAsIDB4MEQsIDB4NDAsCisweDY0LCAweDIyLCAweEQxLCAweDIwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLAorMHg3NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMiwgMHg3RSwgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDcsIDB4NDQsIDB4MDUsIDB4RDAsIDB4MzgsIDB4QzgsIDB4NzYsIDB4MDEsIDB4ODksCisweDAwLCAweDU0LCAweDBDLCAweDUwLCAweDBELCAweDQyLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHgyNCwgMHgwNCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQiwgMHhEMiwgMHgwRCwgMHg0MiwgMHgzNCwKKzB4NDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsCisweDAzLCAweDEwLCAweDA1LCAweDQxLCAweDM3LCAweDgwLCAweDFELCAweDY2LCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NCwgMHgwNywgMHhEMiwgMHgzNSwgMHg0MCwgMHg3NSwgMHgwMCwgMHhEMSwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4MTEsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDMwLCAweDAwLCAweDhELCAweDIwLCAweDM2LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4MTgsIDB4MDQsIDB4NDAsIDB4MzMsIDB4QTAsIDB4MEQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDgsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDVBLCAweDM2LCAweDAwLCAweEQxLCAweDAwLCAweDE0LAorMHgwMCwgMHg1MCwgMHgwQywgMHg0MCwgMHg0MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDksIDB4RTgsIDB4MjQsIDB4MDAsIDB4OTMsCisweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweDQwLCAweDNGLCAweDAwLCAweERGLCAweDAwLCAweEJDLCAweDIzLCAweDM0LAorMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg2NCwgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NkMsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzUsIDB4ODAsIDB4NUIsIDB4ODAsIDB4NEUsIDB4MDAsCisweDMyLCAweDBGLCAweEM4LCAweDA3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LAorMHgxRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBRiwgMHgyMCwKKzB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsCisweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMyLCAweDJGLCAweDAwLCAweDNGLAorMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwQSwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHg4MCwgMHhGOCwKKzB4MEUsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QjAsIDB4N0YsCisweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDA3LCAweDcwLCAweDAzLCAweEMwLCAweDdELCAweDAyLCAweEYzLCAweDA5LCAweEZDLAorMHgxMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzQywgMHgwMSwgMHhCRiwgMHgyMSwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwKKzB4M0YsIDB4MDAsIDB4M0YsIDB4MTgsIDB4Q0QsIDB4MDMsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkIsIDB4MDAsCisweEZDLCAweDAzLCAweEUwLCAweDBGLCAweEMwLCAweDRDLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBGLAorMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHg3NywgMHgwMCwKKzB4NUQsIDB4MDEsIDB4NDQsIDB4MDcsIDB4MTAsIDB4QjEsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDQsIDB4NzQsIDB4MDYsCisweEQwLCAweDI5LCAweDQxLCAweDNELCAweDAwLCAweERELCAweDAxLCAweEY0LCAweDA3LCAweEQwLCAweDBFLCAweDQwLCAweDc3LAorMHgwMCwgMHgxRCwgMHg4MiwgMHg0NCwgMHgwNywgMHgxMCwgMHgyRiwgMHg0MCwgMHg2NywgMHgwMCwgMHg1MSwgMHgwMSwgMHg3NCwKKzB4MDcsIDB4RDAsIDB4MTUsIDB4NDAsIDB4NDQsIDB4MDAsIDB4NUIsIDB4MDEsIDB4NDQsIDB4MDUsIDB4MTAsIDB4MUQsIDB4NDAsCisweDA0LCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLCAweDBELAorMHgwOCwgMHgwNCwgMHgwMywgMHg1MCwgMHgxNCwgMHg2OCwgMHgzMSwgMHgwMSwgMHhDMSwgMHgwMCwgMHgzNCwgMHgyMCwgMHhEMCwKKzB4NkMsIDB4NDAsIDB4QjEsIDB4MDQsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MjMsIDB4RDAsIDB4NEMsIDB4NDEsIDB4MzEsIDB4MDIsCisweDBELCAweDA1LCAweDI0LCAweDAzLCAweDEwLCAweDJDLCAweDQwLCAweDIzLCAweDAwLCAweDg1LCAweDAwLCAweDM0LCAweDAyLAorMHg1MCwgMHgwOCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgyMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0NCwKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsIDB4ODAsIDB4NUQsIDB4MTQsCisweDY1LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDBELAorMHg0MCwgMHgzNSwgMHgyMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwMywgMHhEMSwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHgxRCwKKzB4MDAsIDB4NjQsIDB4NDMsIDB4MTAsIDB4MEQsIDB4NDQsIDB4NjcsIDB4MDAsIDB4RDUsIDB4MDYsIDB4NzQsIDB4MDMsIDB4RDEsCisweDBELCAweDUxLCAweDQ1LCAweDQwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDhELCAweDQwLCAweDBDLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMSwgMHg2QywKKzB4MDcsIDB4NzAsIDB4MDEsIDB4QzAsIDB4NzUsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MTEsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM1LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLAorMHg2QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHhFNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgzRCwKKzB4QzAsIDB4QzEsIDB4ODQsIDB4RDcsIDB4MDAsIDB4NEMsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDgsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweDZGLCAweDAwLCAweERDLCAweDBCLAorMHhGMCwgMHgwRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHgwRiwgMHhGMCwgMHgwRCwgMHhFMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzYsIDB4M0YsIDB4ODAsIDB4OUYsIDB4MjgsIDB4REMsCisweDI3LCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDQwLCAweDdCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDk2LCAweEMwLAorMHgwRSwgMHgwMCwgMHhFMywgMHgwMCwgMHhCQywgMHgwOSwgMHhGMCwgMHgxRSwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NEMsIDB4MDMsIDB4RjAsCisweDA1LCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDVDLCAweDA1LCAweDcwLCAweDBELCAweEM4LCAweDM1LCAweDA4LAorMHhEMywgMHg4MCwgMHg3QywgMHgwNywgMHhGMSwgMHgwRCwgMHhDMiwgMHgzNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHgwQywgMHgyMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4QTMsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MjksIDB4QzAsIDB4MDQsCisweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDJELCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHg1QywgMHgwMCwgMHgzNCwgMHgzRiwgMHhEMCwgMHgwRCwKKzB4QzAsIDB4NzQsIDB4MDEsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4RDAsIDB4OUMsIDB4NDgsIDB4N0MsIDB4MDEsIDB4RDEsCisweDAwLCAweEY0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDNDLCAweDAxLCAweDlELCAweDAwLCAweDZFLCAweDAzLCAweEIwLAorMHg0RiwgMHg0MCwgMHgyNywgMHgwOCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHg0RCwgMHhDMCwgMHgwNCwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NDQsIDB4OTMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMyLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDBGLCAweDkwLCAweDA4LCAweDQwLAorMHgzNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1MCwgMHgwOCwgMHgwMCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDgsIDB4MEMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4OUQsIDB4NDAsIDB4MDQsIDB4MDQsIDB4OTAsIDB4MkMsCisweDQxLCAweDIzLCAweDAwLCAweEM1LCAweDAwLCAweDM2LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDQyLCAweDAyLCAweENELAorMHgwMCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwQywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4N0EsIDB4MDgsIDB4QUQsIDB4MjEsIDB4QjQsIDB4MDcsIDB4RDIsIDB4MTAsIDB4NDAsIDB4RjgsCisweDAyLCAweEUxLCAweDBCLCAweDk0LCAweDI2LCAweEQwLCAweDFBLCAweDQxLCAweEY4LCAweDAwLCAweEUwLCAweDAxLCAweEI0LAorMHgwNywgMHhEOCwgMHgzRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwNiwgMHg5MCwgMHgxRSwgMHg0MCwKKzB4NjMsIDB4ODAsIDB4RTEsIDB4MDEsIDB4MzQsIDB4MjcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4NEQsIDB4MDEsCisweDI0LCAweDA3LCAweDEwLCAweDE0LCAweDQyLCAweDEwLCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwRiwgMHgwMCwgMHgzQywgMHgyMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMiwKKzB4QzMsIDB4MDAsIDB4MUMsIDB4MDMsIDB4NzAsIDB4OEMsIDB4NDAsIDB4MzUsIDB4MDAsIDB4QzEsIDB4MDAsIDB4M0MsIDB4MjMsCisweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLCAweDhGLCAweDAwLCAweDA0LCAweDExLCAweDMwLCAweDhDLCAweEMwLCAweEIzLAorMHg4MiwgMHhDNywgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgwQywgMHhDMCwgMHgwMiwgMHgwMCwgMHg4RiwgMHgwMCwgMHgyQywKKzB4MDIsIDB4MzAsIDB4MkMsIDB4QzAsIDB4NDgsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEE4LCAweDNELCAweDAwLCAweEJGLCAweDAwLCAweEZFLCAweEEzLCAweEYwLCAweDgzLCAweEMwLCAweDNGLCAweDkyLCAweEZGLAorMHgwMCwgMHhFQywgMHg4MywgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwNCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDQsIDB4N0YsIDB4MDgsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDc1LCAweDhGLCAweEQwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhFMCwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MDEsCisweDBDLCAweDA0LCAweDMwLCAweDBELCAweEMwLCAweEI1LCAweDAxLCAweERCLCAweDAwLCAweDdDLCAweDdCLCAweEYwLCAweEVELAorMHhDMSwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMywgMHhCOCwgMHg4RCwgMHhDMSwgMHgyNywgMHgwMCwgMHhERiwKKzB4MDEsIDB4NEMsIDB4MDUsIDB4MTAsIDB4MEQsIDB4QzQsIDB4MDQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsCisweDE5LCAweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDk4LCAweDM5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMiwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NSwKKzB4MDIsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MzMsIDB4MDEsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsCisweDM4LCAweDAxLCAweENELCAweDAwLCAweEE0LCAweDgzLCAweDEwLCAweDRFLCAweEMwLCAweDJCLCAweDAwLCAweEVELCAweDAwLAorMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhFRCwgMHg4MCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwKKzB4NDAsIDB4NDgsIDB4NjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsCisweEVELCAweDAxLCAweEI0LCAweDQ3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEUxLCAweDgxLCAweDg0LCAweDA3LAorMHgwMCwgMHgxRSwgMHg0MSwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMywgMHhCNCwgMHg5NywgMHhEOCwgMHg1RSwgMHg0MCwgMHg3QSwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4MDUsIDB4MDcsIDB4MTQsIDB4NUUsIDB4NDQsIDB4N0IsIDB4MDAsIDB4QzUsIDB4MDEsIDB4MDQsCisweDA3LCAweDkwLCAweDFDLCAweDQwLCAweDRBLCAweDAwLCAweENELCAweDExLCAweDA0LCAweDQ3LCAweDEwLCAweDFDLCAweDQwLAorMHgxMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgzMywgMHhBMCwgMHhDRCwKKzB4MUEsIDB4MzQsIDB4ODYsIDB4RDAsIDB4MEMsIDB4NDEsIDB4MjMsIDB4MDIsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MjcsIDB4NUIsCisweDFELCAweDQyLCAweDMzLCAweDQwLCAweDQxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDUwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwNiwgMHgwNCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHhCMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwNywKKzB4OTQsIDB4MEMsIDB4NTAsIDB4RjIsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NzgsIDB4NUEsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE3LCAweDAwLCAweDdGLCAweDAzLAorMHg3QywgMHgwMSwgMHhGMCwgMHg3NywgMHg0MCwgMHg1NywgMHg0MCwgMHg1MywgMHgwMCwgMHhDQywgMHgwNSwgMHgzMCwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MDAsIDB4NzMsIDB4QzEsIDB4NzQsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzgsIDB4MTYsIDB4MTAsIDB4N0YsCisweDAyLCAweEVDLCAweDExLCAweEIwLCAweDA1LCAweDQwLCAweDFGLCAweDAwLCAweDdGLCAweDAwLCAweENDLCAweDE1LCAweEIwLAorMHgwNywgMHhDMCwgMHhEQSwgMHgwOSwgMHg3RiwgMHgwMywgMHhDQywgMHgwNSwgMHgzMCwgMHgyNywgMHhDMCwgMHg1RSwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NzQsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxNywgMHgwMSwgMHgzQywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHhBMCwgMHgxQiwgMHgwMCwKKzB4M0UsIDB4MDQsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzQsIDB4MDEsCisweEMwLCAweDg1LCAweDAwLCAweDBGLCAweDAwLCAweDNDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDQ5LCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MDgsIDB4RDQsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsCisweDQwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEQwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHg4MiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwgMHgwOCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4OTMsIDB4MTAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzEsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDA2LCAweEQwLAorMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0OCwgMHhBNCwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MjksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsCisweEIwLCAweDA5LCAweEMwLCAweEE2LCAweDAwLCAweDlELCAweDAyLCAweDVDLCAweDBBLCAweEQwLCAweDI5LCAweDQwLCAweDI0LAorMHgwMCwgMHg5MSwgMHgwMiwgMHg0QywgMHgwQSwgMHgxMCwgMHgyOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MDksCisweDQ4LCAweDY0LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweDUwLCAweDg5LCAweDQwLCAweDYyLCAweDg0LCAweDk5LAorMHgwMCwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxOSwgMHg2MywgMHg2NCwgMHg4MCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4NDIsIDB4MjQsIDB4MDQsIDB4OTEsIDB4MTAsIDB4NzQsIDB4NDIsIDB4RDAsIDB4MDksIDB4NTEsIDB4MjQsIDB4MDAsCisweDk5LCAweDMwLCAweDQ0LCAweEMzLCAweDEwLCAweDA5LCAweDQxLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgyOCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4MzQsIDB4NDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MjAsIDB4ODEsIDB4OTksIDB4MDAsCisweDA0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDIxLCAweDhELCAweDA0LCAweDA2LCAweDEyLCAweDkwLCAweDRDLAorMHg0OCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgwNCwgMHgxNCwgMHgxMiwgMHhEOCwgMHg0OCwgMHg2MCwgMHgyMCwgMHgwMCwgMHg4OSwKKzB4QzQsIDB4MDQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NjAsIDB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDAxLCAweEMwLCAweDgwLAorMHgwMiwgMHgxMywgMHgwQSwgMHg3NCwgMHgwMCwgMHg3MCwgMHhBMSwgMHhDMCwgMHg4NiwgMHgyMiwgMHgxOSwgMHgwMCwgMHg0NSwKKzB4MDAsIDB4MzAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NEQsIDB4MDAsIDB4MzAsIDB4QTEsIDB4NDAsCisweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweEM4LCAweDE0LCAweDAwLCAweDEzLCAweDAwLAorMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4QTgsIDB4MjcsIDB4MDAsIDB4QkYsIDB4ODgsIDB4RkQsIDB4MDIsIDB4RjAsIDB4OEIsIDB4ODAsIDB4MkYsIDB4MDAsCisweDlGLCAweDAwLCAweEZDLCAweEEyLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDQyLCAweEI3LCAweDAwLCAweDdDLCAweDIyLAorMHhGNCwgMHg4OSwgMHhDMCwgMHgyNywgMHgyMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHg3NCwgMHg4OSwgMHhEMCwgMHgyRiwKKzB4MDIsIDB4QkYsIDB4MDgsIDB4REMsIDB4MjIsIDB4RjEsIDB4OEIsIDB4QzAsIDB4MkYsIDB4NDAsIDB4QjcsIDB4MjgsIDB4REQsCisweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHhGRSwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwKKzB4MDAsIDB4REMsIDB4NTIsIDB4QjAsIDB4Q0EsIDB4QzgsIDB4MkUsIDB4MDgsIDB4QkYsIDB4QTAsIDB4REMsIDB4ODIsIDB4MzIsCisweDRCLCAweEMyLCAweDZGLCAweDAxLCAweERGLCAweDBDLCAweEZDLCAweDAyLCAweDM0LCAweDBCLCAweEMwLCAweDI2LCAweDAwLAorMHg5MywgMHgwNCwgMHg1QywgMHg1MiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4MzAsIDB4NDksIDB4QzAsIDB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsCisweDA3LCAweDAwLCAweDFELCAweDA4LCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDE0LAorMHg3NCwgMHgwMCwgMHhEMCwgMHhDMSwgMHg0MCwgMHg4NCwgMHgwNCwgMHgxRCwgMHgwMCwgMHg1QywgMHgyMCwgMHgxMCwgMHg0MSwKKzB4NDMsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MEMsIDB4NzQsIDB4MDgsIDB4MTAsIDB4MDEsIDB4NDEsIDB4MDQsIDB4NDIsIDB4MTMsCisweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDdDLCAweDIwLCAweDEwLAorMHgwMywgMHg0MCwgMHg3MywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsCisweDAyLCAweDkwLCAweDQ4LCAweDQwLCAweDIyLCAweDAzLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweEM4LCAweDQwLAorMHgyMywgMHgwMiwgMHg4RCwgMHg0NCwgMHgzNCwgMHgyMiwgMHgxMiwgMHg4OCwgMHg0OCwgMHgyOCwgMHg4MCwgMHhBMSwgMHgwOSwKKzB4QjQsIDB4MDYsIDB4RDAsIDB4MUEsIDB4NDAsIDB4MjgsIDB4MDAsIDB4QUQsIDB4ODksIDB4QjQsIDB4MDYsIDB4MTAsIDB4OUEsCisweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MEQsIDB4NjAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweEE0LCAweDAwLCAweEI5LCAweDAwLCAweEU0LAorMHgwMiwgMHhEMCwgMHg0QiwgMHg0MCwgMHgyQywgMHgwMCwgMHhCQywgMHg0MCwgMHhGNCwgMHgwMiwgMHgxMCwgMHg4QiwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDZBLCAweDkwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4MzAsIDB4MDksIDB4RDAsIDB4NjAsIDB4MDAsIDB4OTMsIDB4MEIsIDB4N0MsIDB4MEEsCisweEYwLCAweDM5LCAweEQwLCAweDY0LCAweDA0LCAweDlGLCAweDAyLCAweDdDLCAweDBBLCAweDM0LCAweDM5LCAweEMwLCAweDE3LAorMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgyMCwKKzB4N0MsIDB4NDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RDAsIDB4OTgsCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA5LCAweDFDLCAweDAyLCAweEY0LCAweDA5LCAweEMwLCAweDI3LCAweDgwLCAweDlGLAorMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMSwgMHg4NywgMHgwMSwgMHg1QywgMHgxNiwgMHhGMCwKKzB4MTksIDB4QzAsIDB4NjcsIDB4MDEsIDB4OUUsIDB4MDUsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4NEIsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDRDLAorMHg4MCwgMHhGMiwgMHgwMSwgMHhDMiwgMHgwNCwgMHgwNCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDQsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRDLCAweDgwLCAweEIwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAwLAorMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHgwQywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MTQsIDB4MjAsIDB4NUQsIDB4MDAsIDB4RDAsIDB4MTEsCisweDcwLCAweDA1LCAweDQwLCAweDlDLCAweDAwLCAweDdELCAweDExLCAweDc0LCAweDAxLCAweDAwLCAweDM3LCAweEMxLCAweDVFLAorMHgwMCwgMHg1MSwgMHgwNSwgMHg0MCwgMHgwNSwgMHhEMCwgMHgxNywgMHg0MCwgMHg1NCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwKKzB4MDEsIDB4MzAsIDB4MDcsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NTAsIDB4MDUsIDB4NTAsCisweDE0LCAweDEwLCAweDVELCAweDIxLCAweDU0LCAweDAxLCAweEQwLCAweDE1LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwRCwgMHg1MCwKKzB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDYsIDB4MTAsIDB4MzQsIDB4NTEsIDB4NzEsIDB4MDAsCisweDgxLCAweDAxLCAweDM0LCAweDI2LCAweEQwLCAweDFDLCAweDQwLCAweDYwLCAweDAyLCAweENELCAweDAwLCAweDA0LCAweDIyLAorMHgxMCwgMHg4NSwgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMiwKKzB4MDAsIDB4QzksIDB4MDEsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NjAsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg4LCAweDM4LCAweDAwLCAweEVELCAweDIxLCAweDg0LCAweDAzLCAweDUwLCAweDFFLAorMHg0MCwgMHgzOCwgMHhBMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwRiwgMHgxMCwgMHgwNiwgMHg0MCwgMHg3QSwgMHg0NCwgMHhBMSwKKzB4MDEsIDB4OTQsIDB4MDMsIDB4RDAsIDB4MUUsIDB4NDEsIDB4MzgsIDB4MDAsIDB4Q0QsIDB4MDksIDB4MDQsIDB4MDIsIDB4MTAsCisweDA2LCAweDQwLCAweDMyLCAweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDA3LCAweDUwLCAweDBBLCAweDQwLCAweDJBLCAweDAwLAorMHhDRCwgMHgxMSwgMHg5NCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MSwgMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NzgsIDB4MDAsIDB4Q0YsIDB4MDEsIDB4ODUsIDB4MDcsIDB4NzAsIDB4MUMsIDB4RDAsCisweDU4LCAweDAwLCAweDJGLCAweDAxLCAweEJDLCAweDA3LCAweDM0LCAweDE2LCAweEMwLCAweDVELCAweDAwLCAweEExLCAweDAxLAorMHhCQywgMHgwNywgMHhGMCwgMHgxNywgMHhDMCwgMHg3OCwgMHgwMCwgMHhFRSwgMHgxMSwgMHg4RCwgMHgwNiwgMHgzOSwgMHgxNCwKKzB4QzAsIDB4NUEsIDB4MDAsIDB4NkYsIDB4MDEsIDB4M0MsIDB4MDUsIDB4NzAsIDB4MTQsIDB4QzAsIDB4NUEsIDB4MDAsIDB4NkQsCisweDAxLCAweDhDLCAweDA1LCAweEYwLCAweDE2LCAweEM0LCAweDQ3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzgsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NkMsCisweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDgyLCAweDdFLCAweDAyLCAweDc0LCAweDA3LCAweEM0LAorMHgxNSwgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMSwgMHhCNCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHg1RiwgMHgyMCwKKzB4NkQsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIwLCAweDdELCAweDAwLCAweEZGLCAweDAxLCAweDhDLCAweDEzLCAweDcwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLAorMHhGMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxNywgMHhDMiwgMHg2RiwgMHgxMCwgMHhGMiwgMHgwMSwgMHhGQywgMHgwNywKKzB4RjAsIDB4MUIsIDB4QzAsIDB4N0MsIDB4MjAsIDB4RjcsIDB4ODEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MTMsIDB4QzIsIDB4NzksCisweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweEM4LCAweDdGLCAweDAwLCAweEJCLCAweDAxLCAweENDLAorMHg4NywgMHgzMCwgMHgxQiwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4MTgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDgsIDB4OEMsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MUYsIDB4MDAsIDB4RTEsCisweDA4LCAweDg0LCAweDAzLCAweDE0LCAweDAyLCAweDQwLCAweDFCLCAweDAxLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweEQwLAorMHgwQSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgxMCwgMHhCNCwgMHgxMywgMHgxMCwgMHg0MiwgMHg0MCwgMHgzOCwgMHgwMSwKKzB4RTEsIDB4MDAsIDB4OUMsIDB4MDMsIDB4MTAsIDB4NEEsIDB4NDAsIDB4MkIsIDB4MjAsIDB4QTEsIDB4MDAsIDB4QUMsIDB4MDIsCisweDEwLCAweDBBLCAweDQwLCAweDU0LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgzOSwgMHgwMCwgMHhFRCwgMHgxMCwgMHhBNCwgMHgyMywgMHg1MCwgMHgwRSwgMHg0MSwgMHgzQiwgMHg0NCwgMHg2MSwgMHgwMCwKKzB4ODQsIDB4MDMsIDB4NTAsIDB4MDYsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MDIsCisweDQwLCAweDM4LCAweDAwLCAweEU1LCAweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDAyLCAweDYwLCAweDE5LCAweDEwLCAweDYxLAorMHgwMCwgMHhCNCwgMHgwMSwgMHg5MCwgMHgwNiwgMHg0NCwgMHgxRiwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MzEsCisweDIwLCAweENELCAweDAzLCAweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweDUxLCAweDAwLCAweDA0LAorMHg0QiwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHhDMSwgMHg0MywgMHgzNiwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4QzEsIDB4MDMsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4OTAsIDB4NDAsIDB4NDEsIDB4NDIsCisweDE0LCAweDAxLCAweDkwLCAweDIwLCAweDQwLCAweDgzLCAweDJFLCAweDAxLCAweDAyLCAweDI0LCAweDA4LCAweDEwLCAweDAwLAorMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwKKzB4REYsIDB4MDMsIDB4NkQsIDB4MDMsIDB4NzAsIDB4M0QsIDB4QzAsIDB4NjcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEQsIDB4MEIsCisweDcwLCAweDBELCAweEMyLCAweDM3LCAweDQwLCAweDkzLCAweDAxLCAweDNDLCAweDAzLCAweEYwLCAweDBELCAweEQwLCAweDMwLAorMHgwMCwgMHhGNywgMHgyMywgMHg3QywgMHgwQSwgMHg3MCwgMHgwNSwgMHhDMCwgMHhBMSwgMHgwMCwgMHg5MywgMHgwMywgMHg3QywKKzB4MDYsIDB4QjAsIDB4M0QsIDB4QzAsIDB4RjcsIDB4MDAsIDB4RDMsIDB4QTMsIDB4NEQsIDB4OEYsIDB4MzQsIDB4MUQsIDB4RDAsCisweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLAorMHgwNCwgMHg1QywgMHgwRiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwOCwgMHg1RiwgMHgwMCwgMHgzQywgMHgwMywgMHhCMCwKKzB4MDksIDB4QzAsIDB4MzcsIDB4MjAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4ODMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsCisweENGLCAweDA0LCAweDdDLCAweDAyLCAweDcwLCAweDIwLCAweEMwLCAweDI3LCAweDA0LCAweDhGLCAweDExLCAweDFDLCAweDQ2LAorMHg3NCwgMHgxOSwgMHhDMSwgMHgyNywgMHgwMCwgMHhENywgMHgwMSwgMHg1QywgMHgwNiwgMHhGMCwgMHgxRCwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMxLCAweDBDLCAweDA4LCAweEJGLCAweDAzLCAweDRDLCAweDAzLCAweDMwLCAweDBFLAorMHhEMCwgMHgxNCwgMHgwMCwgMHhCRiwgMHgxOSwgMHhDQywgMHgxNywgMHgzMCwgMHg4OSwgMHhDMCwgMHgzNCwgMHgwMCwgMHhGNywKKzB4MDAsIDB4Q0MsIDB4NDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4OEUsIDB4MDAsIDB4MzcsIDB4MDgsIDB4NjgsIDB4MjAsIDB4MzAsCisweDA3LCAweEMwLCAweDFGLCAweDAwLCAweDdGLCAweDEwLCAweDdDLCAweDQxLCAweEYwLCAweDA3LCAweEMwLCAweDEzLCAweDIyLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MEYsIDB4RDAsIDB4MEQsIDB4QzAsIDB4NDYsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MjcsIDB4MTAsIDB4MzEsIDB4NDAsCisweDA0LCAweDAwLCAweDhELCAweDAxLCAweDQ0LCAweDA3LCAweDEwLCAweDAxLCAweDQwLCAweDM0LCAweDAwLCAweERCLCAweDAwLAorMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDIsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDBGLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHgxMCwgMHg1NCwgMHgwMywgMHgxNCwgMHgxRCwgMHg0MCwgMHgyNCwKKzB4MjAsIDB4OUQsIDB4MDAsIDB4NDYsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDEsIDB4MzYsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDQsCisweDAyLCAweEQ4LCAweDExLCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHg5OCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDUwLCAweDEyLCAweDAwLCAweDBELCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLCAweDEwLCAweDAwLAorMHg5RCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0OCwgMHgzMCwgMHgwMCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MjMsCisweDgwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NUQsIDB4MDMsIDB4MTQsIDB4MDUsIDB4QzAsIDB4MjQsIDB4MjAsIDB4OUUsCisweDAwLCAweDRELCAweDAzLCAweDM0LCAweDA5LCAweEQwLCAweDM0LCAweDAwLCAweEY3LCAweDAwLCAweDRELCAweDAyLCAweEYwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwNSwgMHhDOCwgMHgxNywgMHgxMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDNGLCAweDIwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLAorMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsCisweEMwLCAweDBFLCAweDAwLCAweDNGLCAweDIwLCAweEVDLCAweDAwLCAweEIwLCAweDAzLCAweEMwLCAweDBCLCAweDAwLCAweDNGLAorMHg0MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4QjAsIDB4MUIsIDB4QzAsIDB4MkYsCisweDIxLCAweEYzLCAweDI0LCAweEVDLCAweDI1LCAweEYwLCAweDFGLCAweEQwLCAweDNDLCAweDAwLCAweEZCLCAweDg4LCAweENDLAorMHg4NCwgMHhCMCwgMHg0RiwgMHhDMCwgMHg3RiwgMHgyMiwgMHgyRiwgMHgwMSwgMHhGNCwgMHgwNSwgMHgzMCwgMHgwQiwgMHhDMSwKKzB4RUYsIDB4MDAsIDB4MkYsIDB4MDEsIDB4RUMsIDB4MDQsIDB4MzAsIDB4MTIsIDB4QzAsIDB4NUUsIDB4MDgsIDB4MkYsIDB4MDEsCisweENFLCAweDBELCAweDMwLCAweDBCLCAweEMwLCAweDBELCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgyNywgMHgxMCwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwRiwgMHgxMCwgMHgxNSwgMHg0MCwgMHg2NywgMHgwMCwKKzB4RDEsIDB4MTQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4NEQsIDB4NDAsIDB4QkMsIDB4MDQsIDB4RjEsIDB4MEUsIDB4NDQsIDB4MDcsCisweDEwLCAweEJGLCAweDQwLCAweDM3LCAweDAwLCAweDE3LCAweDk0LCAweDY0LCAweDA1LCAweDEwLCAweDM5LCAweDQwLCAweDM3LAorMHgxMSwgMHg1RCwgMHgyMSwgMHg0NCwgMHgwNSwgMHg1MSwgMHgxOSwgMHg0MCwgMHg3NSwgMHgzMCwgMHgxRCwgMHgyMSwgMHg0NiwKKzB4MDIsIDB4MTAsIDB4MTEsIDB4QzAsIDB4MEQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweEEwLCAweDIzLCAweDAwLCAweDBELCAweDgwLCAweDA1LCAweDBCLCAweEQ4LCAweDA4LCAweDQwLCAweDIzLCAweDAyLCAweEMxLAorMHgwQywgMHgyNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MSwgMHhCMCwgMHg4MSwgMHhDOSwgMHgwNCwgMHg1NCwgMHgwNywgMHg5MCwKKzB4MEMsIDB4NDAsIDB4MzMsIDB4MTEsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDQsIDB4MzEsIDB4MDEsCisweDQ5LCAweDAwLCAweDI0LCAweDAwLCAweDEyLCAweDBELCAweDQ0LCAweDMxLCAweDAwLCAweDFELCAweDQwLCAweDY0LCAweDEzLAorMHg5MCwgMHgwOCwgMHg0MCwgMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwKKzB4NjUsIDB4MDAsIDB4OUQsIDB4MTEsIDB4NDQsIDB4MDMsIDB4MTgsIDB4NjUsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDEsIDB4MDAsCisweDQyLCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDM0LCAweDA4LCAweEMxLCAweDAwLCAweDU1LCAweDAzLCAweDEwLCAweDBELAorMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgxMSwgMHg2NCwgMHgwMCwgMHgxQywgMHgwRCwgMHg0MCwgMHgzNywgMHgxMCwgMHg1RCwKKzB4MTEsIDB4NDQsIDB4NDUsIDB4NTAsIDB4ODksIDB4MDAsIDB4NzUsIDB4MDAsIDB4MUQsIDB4MTAsIDB4NjQsIDB4NDMsIDB4OTYsCisweDExLCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDQ3LAorMHgwNCwgMHg5RiwgMHgyMSwgMHg0NCwgMHgwMywgMHhGMiwgMHgwNSwgMHhDMCwgMHgzMywgMHg0MCwgMHhEMywgMHgwMCwgMHg2QywKKzB4MDMsIDB4RjEsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REIsIDB4MDAsIDB4NTQsIDB4MDQsIDB4QjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweDFGLCAweDAxLCAweDdDLCAweDE0LCAweDMwLCAweDA5LCAweEMwLCAweDM1LCAweDAwLCAweDVCLCAweDAxLAorMHgyQywgMHgwRCwgMHgzMCwgMHgzMSwgMHg4MiwgMHg3NywgMHgwMSwgMHgxRCwgMHgyMiwgMHg2NCwgMHgwRiwgMHhCMSwgMHgzMSwKKzB4QzEsIDB4ODEsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4MkQsIDB4MDAsCisweEFGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDNGLCAweDAyLCAweEVGLCAweDgwLCAweEZDLCAweDgyLAorMHhGMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHhBMCwgMHhGMCwgMHgwRiwgMHhDMiwgMHgzRiwKKzB4MTAsIDB4MzcsIDB4MDAsIDB4RUMsIDB4QTQsIDB4NzAsIDB4OUIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAxLCAweEYwLCAweDEzLCAweEMwLCAweDJGLCAweDAwLCAweDNGLCAweDA4LCAweERELCAweDI3LCAweDcwLCAweDAzLCAweEMwLAorMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgwNSwgMHgwMiwgMHgxMywKKzB4MTAsIDB4N0UsIDB4MjMsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDMsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjEsCisweDA5LCAweEMwLCAweDM1LCAweDgwLCAweERGLCAweDA4LCAweDRDLCAweDgwLCAweDcwLCAweDBELCAweEMxLCAweDM3LCAweDAwLAorMHg5MywgMHgwMiwgMHg1QywgMHgwOCwgMHhGOCwgMHgwRCwgMHhDMiwgMHgzNywgMHgwMCwgMHg1RiwgMHgwRSwgMHg3OCwgMHgxQiwKKzB4NzAsIDB4MjUsIDB4QzQsIDB4QTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NkMsIDB4NEIsIDB4MzEsIDB4MDksIDB4QzQsIDB4MEIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEU0LCAweDAyLCAweDkxLCAweDAwLAorMHhGNCwgMHgwNywgMHgxMCwgMHgwNSwgMHg0MSwgMHg3NywgMHgwMCwgMHhGRCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwKKzB4QzgsIDB4M0UsIDB4MjAsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MkMsIDB4MTAsIDB4MUYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsCisweDAwLCAweDA0LCAweDAwLCAweEYwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDRDLCAweDAxLCAweDQ0LCAweDA1LCAweEIwLAorMHgwNCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg0QiwgMHgwNCwgMHgyNCwgMHg4MywgMHgxNCwgMHg3MSwgMHg0MCwgMHg2RiwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsCisweDgzLCAweDE0LCAweDNDLCAweDQxLCAweEEzLCAweDEwLCAweENELCAweDAwLCAweDE0LCAweDAxLCAweEQwLCAweDlDLCAweDQwLAorMHgzNSwgMHgwOCwgMHhDRCwgMHgwMSwgMHgwNCwgMHgwOCwgMHg1MCwgMHhCQywgMHg2MCwgMHgzMiwgMHgwMCwgMHgwNSwgMHgwMCwKKzB4MTQsIDB4MDEsIDB4RDAsIDB4NjgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4NDksIDB4MDMsIDB4MTQsIDB4OEMsIDB4RDEsIDB4QjQsCisweDQxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIzLCAweDEwLCAweDQ4LCAweDQwLCAweDBGLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg2MSwgMHgwMSwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MTYsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4OTYsIDB4MDYsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0EsCisweDAwLCAweEM1LCAweDQxLCAweDg0LCAweDQ3LCAweDEwLCAweDFFLCAweDY4LCAweDdCLCAweDAwLCAweEYxLCAweDAwLCAweDg0LAorMHgwNSwgMHg1MCwgMHg5QSwgMHg0MCwgMHg3QiwgMHgwMiwgMHg3RCwgMHgwMSwgMHhDNCwgMHgxNCwgMHg5MCwgMHgxQSwgMHg0OCwKKzB4NzksIDB4MjAsIDB4MzksIDB4MDksIDB4ODUsIDB4MjcsIDB4MTUsIDB4MUEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDM0LCAweDAyLCAweDQzLCAweDA0LCAweDM0LCAweDAzLCAweDEwLAorMHgwQywgMHhDMCwgMHgzMywgMHgxMCwgMHhERiwgMHgwMCwgMHgxQywgMHgwMiwgMHhGMCwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MEMsIDB4MDMsIDB4NzAsIDB4Q0MsIDB4QzAsIDB4MzcsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MUMsIDB4MTEsCisweEQwLCAweDA4LCAweEMwLCAweDMzLCAweDAwLCAweDRCLCAweDAwLCAweDFDLCAweDQwLCAweEYwLCAweDhDLCAweEMwLCAweDMxLAorMHgwMiwgMHhDMywgMHgwMCwgMHg2QywgMHgyMywgMHgzMCwgMHg4OCwgMHhFMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4NDAsIDB4N0YsIDB4MDAsIDB4QkMsIDB4MDMsIDB4NzAsIDB4MDcsCisweEMwLCAweDNGLCAweDAyLCAweEZGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBDLCAweEMwLCAweEJGLCAweDIwLCAweERGLAorMHgwMCwgMHgzQywgMHgwMywgMHhDMCwgMHg4RiwgMHhDOCwgMHgzNywgMHgwOCwgMHhGRiwgMHg4QywgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDksIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4NDgsIDB4MUMsIDB4MTEsIDB4RjAsIDB4ODksIDB4QzAsIDB4M0EsIDB4MDAsCisweEJGLCAweDAwLCAweEZDLCAweDIzLCAweEYyLCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgxNywgMHgwMCwgMHhERiwgMHgwMSwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzQsIDB4NzQsIDB4MDMsIDB4RDEsIDB4MEUsCisweDdDLCAweDgwLCAweDcwLCAweDZELCAweEUwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDFELAorMHhDMCwgMHgzNiwgMHgwMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwNCwgMHhCMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5NywKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzQsIDB4MDEsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDgwLCAweDE5LCAweDAwLCAweEVELCAweDAwLCAweDg0LCAweDBCLCAweEMwLCAweDA2LCAweDQwLCAweEFCLAorMHgyMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzMSwgMHgwMCwgMHhFMSwgMHgxMCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4RUUsIDB4QzAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4NEUsIDB4NDAsCisweDM4LCAweDAwLCAweDYxLCAweDAwLCAweEE0LCAweDAwLCAweDEwLCAweDBFLCAweDYwLCAweDNCLCAweDAwLCAweDJELCAweDAwLAorMHg4RCwgMHgwMywgMHhCMCwgMHgwNiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODUsIDB4MTcsIDB4NTAsIDB4MUUsIDB4NDEsIDB4N0IsIDB4MDEsCisweEVELCAweDA5LCAweEI0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDc4LCAweDQxLCAweEUxLCAweDA1LCAweDk0LCAweDQ3LAorMHg1MCwgMHgxRSwgMHgwMiwgMHg3QiwgMHgxMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMiwgMHhEQywgMHgwMCwgMHg3QSwKKzB4MjQsIDB4NkQsIDB4MDEsIDB4RDYsIDB4MEQsIDB4RDgsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDQsIDB4RTUsIDB4MDEsIDB4RjQsCisweDA3LCAweDEwLCAweDFBLCAweDYwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgxQSwgMHgwNCwgMHgwMywgMHhEMCwgMHgxNCwgMHg0MCwgMHg3MywgMHgwMiwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4RDAsCisweDBDLCAweDQ4LCAweDMwLCAweDAwLCAweERELCAweDAxLCAweDM0LCAweDA2LCAweEQwLCAweDhDLCAweDQwLCAweDMwLCAweDAwLAorMHg0NSwgMHgwOCwgMHgzNCwgMHgwRCwgMHhEMCwgMHg4QywgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMSwgMHgwNCwgMHgwMywKKzB4MTcsIDB4MEMsIDB4NDAsIDB4NUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsCisweDFELCAweDA2LCAweDdELCAweDAzLCAweDZDLCAweDAxLCAweEYwLCAweDE3LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLAorMHhGNCwgMHgyRCwgMHg3MCwgMHgwNCwgMHhDNCwgMHgxNCwgMHgxMCwgMHg1MywgMHg4MCwgMHhGQywgMHgwRCwgMHg3MSwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MDcsIDB4RkMsIDB4MTksIDB4RjAsIDB4MTUsIDB4QzAsIDB4NTYsIDB4MDAsIDB4NkYsCisweDAyLCAweEZDLCAweDA1LCAweEYwLCAweDI3LCAweEM4LCAweDFGLCAweDIwLCAweDY3LCAweDA3LCAweEZDLCAweDAxLCAweDEwLAorMHg5NywgMHhDMiwgMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzEsIDB4ODcsIDB4MDAsIDB4MUYsIDB4ODAsIDB4N0MsCisweDIwLCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMwLAorMHgwNSwgMHgwMCwgMHgxRiwgMHgwNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxOSwgMHg1MCwKKzB4NkMsIDB4MTgsIDB4MTAsIDB4MjEsIDB4QzEsIDB4QzcsIDB4MDgsIDB4MUIsIDB4MzAsIDB4N0UsIDB4MEMsIDB4RjAsIDB4ODEsCisweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLAorMHg5RiwgMHg0NCwgMHg3RSwgMHgwQSwgMHhGMCwgMHgwOSwgMHhEMCwgMHg2NCwgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwKKzB4MzAsIDB4MDksIDB4RDAsIDB4MjQsIDB4ODAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsCisweDAwLCAweDkzLCAweEMwLCAweDRDLCAweDQyLCAweEYwLCAweDI5LCAweEMwLCAweDI2LCAweDAwLCAweDkzLCAweDgwLCAweDVDLAorMHgwQSwgMHhGMCwgMHgxOSwgMHhDMCwgMHg2NSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgyNiwgMHgzMCwgMHgyOSwgMHhDMCwKKzB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDIsIDB4OUQsCisweDQ3LCAweDc0LCAweDA2LCAweEQwLCAweDQ4LCAweDQwLCAweEVDLCAweDEwLCAweDlELCAweDAwLCAweDM0LCAweDI2LCAweDEwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgxMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgxQSwgMHhEMCwgMHgwOSwgMHg0NCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4NDAsIDB4NEMsIDB4MDIsIDB4NzgsIDB4MUIsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NDQsIDB4MEUsCisweEQwLCAweDA4LCAweDQyLCAweDIwLCAweDEwLCAweDlCLCAweDQwLCAweDBDLCAweDFFLCAweDU0LCAweDA5LCAweEMwLCAweDA3LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI0LCAweDAwLCAweDk5LCAweDEwLCAweDc0LCAweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLAorMHgwMCwgMHg2NCwgMHgwMiwgMHhEMSwgMHgyOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMSwgMHg1NCwgMHgwMiwgMHg1MCwKKzB4NEQsIDB4NDAsIDB4MjUsIDB4MDIsIDB4OTQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDA1LCAweDhELCAweDE0LCAweDM0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwOCwgMHg3NCwgMHgwQSwgMHgxMCwgMHgyOCwgMHg0MCwKKzB4MjIsIDB4MDIsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4ODEsIDB4MDgsCisweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI3LCAweDAyLCAweDkxLCAweDQwLCAweDA0LCAweDAyLCAweEQyLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5OSwgMHgwMCwgMHg0NiwgMHgyMiwgMHg1MSwgMHg0OCwgMHg0NCwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDYsIDB4MDEsIDB4MUYsIDB4MDQsIDB4NzQsIDB4RDAsCisweEYwLCAweDAxLCAweEMwLCAweDU0LCAweDEwLCAweDFGLCAweDE2LCAweDdFLCAweDAwLCAweDM0LCAweDAxLCAweDQwLCAweDg0LAorMHgwNSwgMHgxOSwgMHg5NiwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMSwgMHg4NywgMHgwMCwgMHgxMywgMHgwMiwgMHg2RCwKKzB4ODAsIDB4RDAsIDB4MTEsIDB4NDAsIDB4ODMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NTQsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsCisweDE1LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDA4LCAweDMwLCAweDA1LCAweEMwLCAweDc3LCAweEUwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgyRiwgMHgyNSwgMHhBRiwgMHgyMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzgsIDB4QUYsIDB4MDAsIDB4OUQsIDB4MDQsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4MjcsIDB4MDksCisweDlGLCAweDA0LCAweEZDLCAweDAyLCAweEYyLCAweDA5LCAweEMyLCAweDI3LCAweDQxLCAweEJGLCAweDA0LCAweEZDLCAweDAyLAorMHg1MCwgMHgyQiwgMHhDMCwgMHgyRiwgMHgwMSwgMHhCRiwgMHgwMCwgMHhCNCwgMHgwMiwgMHhGMiwgMHgwQiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QTcsIDB4MDAsIDB4QkMsIDB4MTIsIDB4RjQsIDB4OEIsIDB4QzAsIDB4NzUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDA1LCAweEJGLCAweDA0LCAweEZDLCAweDAyLCAweEYwLCAweDBCLAorMHhEMCwgMHg2QywgMHgwNCwgMHg5MSwgMHgyNCwgMHhGQywgMHgwQSwgMHhGMCwgMHgyQiwgMHhEMCwgMHgyNCwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4OUUsIDB4MDIsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4ODIsIDB4MzQsCisweDVCLCAweEQxLCAweDI0LCAweDAyLCAweEJGLCAweDAwLCAweEVDLCAweDAyLCAweEYyLCAweDBCLCAweEMwLCAweDJFLCAweDgwLAorMHhBNywgMHgwMCwgMHhDRSwgMHg4MywgMHgzMCwgMHgwQiwgMHhDMCwgMHg3NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MTEsIDB4MUQsIDB4MDgsIDB4NzQsIDB4MDgsIDB4RDAsIDB4MDEsIDB4NDAsCisweDg0LCAweDAwLCAweDExLCAweDE0LCAweDc0LCAweDA0LCAweEQwLCAweDUxLCAweDQwLCAweDg0LCAweDA0LCAweDBELCAweDEwLAorMHg3NiwgMHgwMCwgMHhEMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxRCwgMHgwNCwgMHg3NCwgMHgwMCwgMHgxOSwgMHgyMSwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4MTksIDB4MDAsIDB4NUMsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MTAsIDB4MUQsCisweDAwLCAweDA1LCAweDAwLCAweEI0LCAweDAxLCAweDQwLCAweDYwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwMCwgMHgzNCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4ODEsIDB4MEMsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4ODMsIDB4OEQsIDB4MDgsIDB4MTQsCisweDAyLCAweEQzLCAweDg4LCAweDAwLCAweDIyLCAweDA1LCAweDhELCAweDA0LCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLAorMHgyMCwgMHgxMCwgMHg4RCwgMHgwMCwgMHgzNiwgMHg4MiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgwMCwgMHg5NSwgMHgwMCwKKzB4NTQsIDB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4NDgsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDJBLCAweDI1LCAweDg2LCAweDlELCAweDIwLCAweDc0LCAweDAyLCAweEQyLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxRCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHg0MCwgMHg3NCwgMHg0MiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDQsIDB4MjQsCisweDAxLCAweDlELCAweDAyLCAweDU1LCAweDBCLCAweEQxLCAweDg5LCAweDQwLCAweEU0LCAweDAwLCAweDlELCAweDAzLCAweDU0LAorMHgyQSwgMHg5MCwgMHgyRCwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4MDIsIDB4MjUsIDB4MTAsIDB4OUYsIDB4MTIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsCisweDAwLCAweEZDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDJBLCAweEYwLAorMHgwOSwgMHhDMiwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHgzRSwgMHgzQSwgMHgxMCwgMHg5OSwgMHhDOCwgMHgyNCwgMHgyMCwKKzB4OEYsIDB4NEIsIDB4N0MsIDB4MjIsIDB4RjAsIDB4NDksIDB4QzAsIDB4QTYsIDB4ODAsIDB4ODcsIDB4MDEsIDB4NTQsIDB4MDIsCisweDMxLCAweDA5LCAweEUwLCAweDE0LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LAorMHgyNSwgMHgwQywgMHg5RiwgMHg4NCwgMHg3QywgMHgwMiwgMHhGOCwgMHgwOSwgMHhFMCwgMHgyMywgMHg0MSwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDA2LCAweEY4LCAweDE5LCAweEM0LCAweDY3LCAweDAwLCAweDlCLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhFOCwgMHgyNywgMHg4OCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwNiwgMHhEMSwKKzB4NDgsIDB4RDgsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsCisweDAwLCAweDFGLCAweDgyLCAweDdDLCAweDgwLCAweEY4LCAweDQxLCAweEQwLCAweDA2LCAweDQwLCAweDEzLCAweDAwLCAweDdDLAorMHgwMCwgMHg3MCwgMHg0MSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHhDOCwgMHg3MSwgMHgwMSwgMHg0MSwKKzB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MzAsCisweDVDLCAweDEwLCAweDcwLCAweEMxLCAweEM4LCAweDg3LCAweDIwLCAweDFGLCAweDEwLCAweDRDLCAweDEwLCAweDMyLCAweDQxLAorMHhDNCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHhEQywgMHgwNCwKKzB4N0QsIDB4MDcsIDB4NzQsIDB4MTUsIDB4NzgsIDB4NzYsIDB4QzAsIDB4MUMsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDEsCisweDEwLCAweDE2LCAweDQ1LCAweDE0LCAweDAwLCAweDcxLCAweDg2LCAweEM0LCAweDA5LCAweDEyLCAweDE2LCAweDQwLCAweDE3LAorMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3MCwgMHgzNiwgMHg0MCwgMHgxNywgMHgxMCwgMHg3RCwgMHgwMCwgMHhGMCwKKzB4MEQsIDB4MTIsIDB4MzYsIDB4NDgsIDB4REYsIDB4MDIsIDB4N0QsIDB4MDQsIDB4ODAsIDB4MTUsIDB4NTAsIDB4MDcsIDB4NTAsCisweDQwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEYyLCAweDAwLCAweDhELAorMHgwNiwgMHgzNCwgMHgwNywgMHg1MCwgMHgxOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNiwgMHgyMywgMHg1MCwKKzB4MDgsIDB4NDAsIDB4MzIsIDB4NDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4MkYsIDB4NTAsIDB4QkMsIDB4NDAsIDB4MzMsIDB4MDAsCisweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDI4LCAweDQwLCAweDMzLCAweDgwLCAweDRELCAweDBBLCAweDM0LCAweDJGLAorMHg1MCwgMHgxQywgMHg0MCwgMHhEMywgMHgwMCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgwQiwgMHgxMSwgMHgwQywgMHg0MCwgMHg0MCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4ODAsIDB4QUQsIDB4MDAsCisweEI0LCAweDAzLCAweDUwLCAweDAyLCAweDQwLCAweDI4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDE3LCAweDE4LCAweDBFLAorMHg0MCwgMHg3MCwgMHgwMiwgMHhFOSwgMHgwMSwgMHhDNCwgMHgwNywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhFRCwKKzB4MDgsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MjIsIDB4NDAsIDB4M0IsIDB4QjAsIDB4NkQsIDB4MDAsIDB4QjYsIDB4MDcsIDB4MTEsCisweDA2LCAweDQwLCAweDFCLCAweDhDLCAweEZELCAweDAwLCAweDg1LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDEwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywKKzB4MDcsIDB4NzAsIDB4MTIsIDB4QzAsIDB4NjgsIDB4MDAsIDB4RTMsIDB4MDEsIDB4RkMsIDB4MEYsIDB4NzAsIDB4MUEsIDB4RDAsCisweDdBLCAweDAxLCAweEU5LCAweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDFFLCAweEU4LCAweDdCLCAweDAzLCAweEVGLCAweDAxLAorMHhCQywgMHgwNywgMHg3MCwgMHgxMiwgMHhDMCwgMHg3QiwgMHgyNSwgMHg2RiwgMHgwMSwgMHg5RSwgMHgwNiwgMHg3MCwgMHgxQSwKKzB4QzAsIDB4NkIsIDB4MDAsIDB4RUYsIDB4MDEsIDB4OEMsIDB4MDYsIDB4MzQsIDB4MUUsIDB4QzAsIDB4NTAsIDB4NjAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLAorMHg3MCwgMHgwMCwgMHhDMCwgMHgyMSwgMHgwMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHhGMiwgMHgwQywgMHhDMCwgMHgzNywKKzB4MjAsIDB4RDcsIDB4ODAsIDB4N0MsIDB4MDEsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDIsIDB4REYsIDB4MTAsIDB4NzgsCisweDAzLCAweDcwLCAweDAxLCAweEMyLCAweDM3LCAweDFBLCAweDFGLCAweDgwLCAweDNDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLAorMHgyNywgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGNiwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4NUQsIDB4MDAsIDB4QTMsIDB4MDEsIDB4Q0MsIDB4MTMsIDB4RjgsCisweDAzLCAweEMwLCAweDZELCAweDAwLCAweEZGLCAweDExLCAweEJDLCAweDA3LCAweDIwLCAweERCLCAweEMwLCAweDdDLCAweDAwLAorMHg3RiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHg5RiwgMHhEMCwgMHg3QywgMHgwMCwgMHhERiwgMHgwOSwgMHhGQywgMHgwNywKKzB4RjAsIDB4MTMsIDB4QzAsIDB4N0YsIDB4MjAsIDB4MkYsIDB4MDksIDB4RUUsIDB4MTcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NUYsCisweDAwLCAweEZGLCAweDAxLCAweDhDLCAweDA1LCAweDMwLCAweERCLCAweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwgMHhBMSwgMHgwMCwgMHg4NCwgMHgwMywgMHg3OCwgMHg0MiwKKzB4NDAsIDB4MjgsIDB4MDIsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MTMsIDB4MTAsIDB4OEEsIDB4NTAsIDB4MzgsIDB4MTEsIDB4MkQsCisweDA0LCAweDhDLCAweDFBLCAweEQwLCAweDhBLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDA1LCAweEI0LCAweDAzLCAweDkwLAorMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg5RSwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg5QiwgMHgyMiwKKzB4QUQsIDB4MDQsIDB4QUMsIDB4MDEsIDB4MTAsIDB4Q0UsIDB4NDgsIDB4NTUsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweEExLCAweDAwLCAweDg1LCAweDIzLCAweDUwLCAweDgyLCAweDQzLAorMHgyOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHg0QiwgMHg0OCwgMHgzOCwgMHg4MCwgMHg2RCwgMHg4MCwKKzB4ODQsIDB4MDMsIDB4RDIsIDB4MDYsIDB4MDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDIsCisweDQwLCAweDNCLCAweDAwLCAweDNELCAweDAwLCAweDg0LCAweDEyLCAweEQwLCAweDBBLCAweDQwLCAweDlCLCAweDAwLCAweEY1LAorMHgxMCwgMHhENCwgMHgyMCwgMHgxMCwgMHhDMiwgMHg0NCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MjgsIDB4QzMsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4NTAsIDB4MzAsIDB4NDAsIDB4MjAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDIyLCAweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDFELCAweDAwLCAweDA0LAorMHg0QywgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwNCwgMHgzNCwgMHg0MywgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NzcsIDB4MDAsIDB4MEQsIDB4MTIsIDB4MTQsIDB4QzYsIDB4RDksIDB4OEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4OEQsIDB4MjMsCisweDA1LCAweDAzLCAweDE0LCAweDI0LCAweDQwLCAweDA5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHhFNSwgMHg0MSwgMHg5MywgMHgwQSwgMHg0QywgMHgwMywgMHg3MCwgMHgzNSwgMHhDMCwgMHgzNSwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MzQsIDB4MDgsIDB4QzAsIDB4M0MsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4NEUsCisweEYwLCAweDA5LCAweEMwLCAweDNDLCAweDAwLCAweEZGLCAweDEzLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDNGLAorMHgwMSwgMHg1RiwgMHgwMSwgMHg0QywgMHgwNywgMHhGMSwgMHhCRCwgMHhDMCwgMHhCNywgMHgwMCwgMHhENywgMHgwMywgMHgxNCwKKzB4NEYsIDB4MzAsIDB4OTQsIDB4QzAsIDB4NTQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDg4LCAweDdDLCAweDAzLCAweDcwLCAweDIxLCAweEMwLCAweEI3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1RCwgMHgwMiwgMHhGMCwKKzB4MDAsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MjUsIDB4RTQsIDB4MzcsIDB4MDAsCisweDVGLCAweDAxLCAweDRELCAweDIzLCAweEYwLCAweDA1LCAweEMwLCAweEY3LCAweDAwLCAweERGLCAweDAyLCAweDdDLCAweDFCLAorMHhGMCwgMHgzRCwgMHhDMCwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwKKzB4MjcsIDB4MDQsIDB4RkYsIDB4MDIsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MTcsIDB4QzEsIDB4NkIsIDB4MDAsIDB4RjcsIDB4MDAsCisweEZDLCAweDA3LCAweEQwLCAweDFCLCAweEMwLCAweDNDLCAweDA4LCAweDFGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgzRCwgMHg4MCwgMHhGRiwgMHg4MCwgMHhDQywgMHgwMywgMHhGOCwgMHgxMywgMHhDMCwgMHgzRCwgMHgwMCwgMHhGMywKKzB4MDAsIDB4RkMsIDB4MjYsIDB4RjAsIDB4MDMsIDB4Q0MsIDB4MkYsIDB4MDAsIDB4RjcsIDB4MTAsIDB4Q0MsIDB4MDIsIDB4MzAsCisweDExLCAweEM4LCAweDA0LCAweDI2LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDY2LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwMSwgMHg0MCwgMHgxNywgMHgwMCwgMHhEMSwgMHg4MCwgMHg3NCwKKzB4MDcsIDB4RDAsIDB4MzksIDB4NTAsIDB4MzQsIDB4MDAsIDB4MUQsIDB4MDksIDB4NDQsIDB4MEMsIDB4RDAsIDB4MTEsIDB4NDAsCisweDM0LCAweDgwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweEQ4LCAweDAwLCAweEMxLCAweDM0LCAweDQwLCAweDExLCAweDAzLAorMHg3MiwgMHgwRSwgMHg3MCwgMHgwNSwgMHg0MSwgMHgyMywgMHgwMCwgMHhDQiwgMHgyMiwgMHg0NCwgMHg2NCwgMHgxNCwgMHgzOSwKKzB4QzAsIDB4MDYsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDYsIDB4MEMsCisweDlELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDQ1LCAweDQxLCAweEI3LCAweDAxLCAweEQ1LCAweDAwLCAweDc0LCAweDEyLAorMHhEMCwgMHg4MSwgMHg0MCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMiwgMHg0NCwgMHgwNCwgMHhEMiwgMHgxOSwgMHg0MSwgMHgzNCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4NDUsIDB4NDAsIDB4MzYsIDB4MjAsIDB4NTEsIDB4MTEsIDB4NjQsCisweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDM3LCAweDAwLCAweDUxLCAweDAyLCAweDQ0LCAweDAxLCAweDEwLCAweDQxLCAweDQwLAorMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4RCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsCisweDAwLCAweDQwLCAweDMyLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDAwLCAweEQyLCAweDAwLCAweDQwLCAweDMwLCAweDAwLAorMHhDRCwgMHgxMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg2MCwgMHgzMCwgMHgwMCwgMHg0MSwgMHgyMCwgMHgzNCwgMHgwMSwKKzB4NTAsIDB4MDgsIDB4NDAsIDB4MzcsIDB4ODAsIDB4MDksIDB4MDAsIDB4NDUsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDQsIDB4NDIsCisweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgyNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwMSwKKzB4RDAsIDB4MzYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NDUsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4M0MsIDB4MjAsIDB4RkQsCisweDAwLCAweDRELCAweDAzLCAweEQwLCAweDA1LCAweEMwLCAweDNGLCAweDEwLCAweDUzLCAweDIwLCAweDc0LCAweDgzLCAweEYwLAorMHgwMSwgMHhDOCwgMHgzNywgMHg4MCwgMHg1NywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMSwgMHgwMSwgMHhDMCwgMHgwNCwgMHg0NCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MkYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDA2LCAweEMwLCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAyLCAweEMwLAorMHgzRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwMywgMHg4MiwgMHgzRiwgMHgxMCwgMHhGRiwgMHg4MCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MDMsCisweEMwLCAweDNGLCAweDAwLCAweDJELCAweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweDgwLCAweDE0LCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwOSwgMHg4QywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MjcsIDB4RjAsIDB4OUYsIDB4QzAsIDB4N0YsCisweDAyLCAweEZGLCAweDA5LCAweEZDLCAweDI3LCAweEYwLCAweDlGLCAweEMwLCAweDdELCAweDAyLCAweEVGLCAweDAxLCAweENDLAorMHgwNywgMHhGMCwgMHgxRSwgMHg0MCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwKKzB4M0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQ3LCAweDQwLCAweDExLCAweDAwLCAweDQ1LCAweDA0LCAweEQwLAorMHgxMSwgMHg1MiwgMHgwNCwgMHgwMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgxMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMSwKKzB4MUQsIDB4MDQsIDB4NzQsIDB4MTAsIDB4RDAsIDB4NDAsIDB4QzAsIDB4MDYsIDB4MDEsIDB4MUQsIDB4ODEsIDB4NDQsIDB4MDQsCisweEQwLCAweDExLCAweDQwLCAweDc0LCAweDA4LCAweDUxLCAweDIxLCAweDQ0LCAweDA3LCAweDEwLCAweDE1LCAweDQyLCAweDc0LAorMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwNywgMHgxMCwgMHgxOSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzcsIDB4MDAsIDB4QzEsIDB4MDQsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEQsCisweDYwLCAweDMwLCAweDA1LCAweENELCAweDE0LCAweDM0LCAweDAzLCAweEQwLCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweEM1LAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsCisweEM1LCAweDAwLCAweDQ0LCAweDAyLCAweDE0LCAweDBDLCAweDQwLCAweDQ1LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgwNSwgMHgwMCwgMHgwMSwgMHg0MCwgMHg1NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg2MCwKKzB4MDQsIDB4MzAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MjAsCisweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDY0LCAweDgwLCAweEMwLCAweDAxLAorMHg0MCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHg0MywgMHhEMCwgMHhBRCwgMHg0MCwgMHgzNiwgMHgwNCwgMHhDNSwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEwLCAweDMzLCAweDAwLCAweEQzLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LAorMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsCisweDg2LCAweDA0LCAweEQzLCAweDA5LCAweDRDLCAweDI1LCAweEYwLCAweDNELCAweEMwLCAweDI2LCAweDAwLCAweEQ3LCAweDA5LAorMHgwRCwgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4ODgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweEY0LCAweDAwLCAweEYxLCAweDAzLCAweEM4LCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhBMCwgMHgwMywgMHhDOCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwgMHgwMywgMHhDOCwgMHgxOSwKKzB4MDAsIDB4Q0YsIDB4MjEsIDB4QkMsIDB4MDEsIDB4MzAsIDB4MTYsIDB4QzIsIDB4MzksIDB4MDIsIDB4RkIsIDB4MDAsIDB4RkMsCisweDEzLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwNSwgMHg3QywgMHgwMywgMHgzMiwgMHgwRCwgMHhDMiwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4NEMsIDB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDcsIDB4RjAsCisweDBELCAweEMwLCAweDc0LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweEI1LCAweDAwLAorMHg5MywgMHgwMCwgMHg0QywgMHgwQSwgMHg3MCwgMHgwRCwgMHhDMiwgMHhBNCwgMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDA0LCAweDEwLCAweDFELCAweDAxLCAweDc0LCAweDAwLCAweDE0LCAweEIwLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLAorMHg0NCwgMHgwNCwgMHhDMSwgMHhBMSwgMHg0MiwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHg4NCwgMHhEMCwgMHhFMSwKKzB4NDAsIDB4NDQsIDB4MDAsIDB4MEQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4QjAsIDB4MDAsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsCisweDgwLCAweDQ0LCAweDEzLCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDEwLCAweERELCAweDBBLCAweDQ0LCAweDQ2LCAweEQwLAorMHgxRCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwKKzB4MDAsIDB4Q0QsIDB4MDIsIDB4MzQsIDB4MDMsIDB4MTAsIDB4M0MsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsCisweDFCLCAweEQwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDEwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDQwLAorMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0NCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4MDQsIDB4ODMsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MTIsIDB4MDAsIDB4QzQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MUMsCisweDQwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ4LCAweDAwLAorMHgyRCwgMHgwOSwgMHhGNCwgMHgyNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg4NCwgMHgyNCwKKzB4RDAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MkQsIDB4NDEsIDB4QjQsIDB4MEMsIDB4RDAsIDB4MTIsIDB4NjAsIDB4QzgsCisweDAwLCAweDJELCAweDAxLCAweEM0LCAweDA0LCAweEQyLCAweDMyLCAweDQwLCAweDcwLCAweDAwLCAweDYxLCAweDAxLCAweDA1LAorMHgwNywgMHgxMCwgMHgxQywgMHg0MCwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMSwgMHgxQSwgMHg2MCwKKzB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsIDB4MDAsIDB4Q0YsCisweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDBDLCAweEMzLCAweDMzLCAweDAyLCAweENGLCAweDA4LCAweDBDLCAweDAzLCAweEYwLAorMHgwQywgMHhDMiwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwKKzB4Q0YsIDB4MDAsIDB4MEMsIDB4MDMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDAsIDB4QzMsIDB4MDQsIDB4MEMsIDB4MDMsCisweDcwLCAweDBDLCAweEMwLCAweDMyLCAweDAwLCAweEQ3LCAweDAwLCAweDBELCAweDAzLCAweEYyLCAweDhDLCAweDUxLCAweDQ4LAorMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MEYsIDB4MDgsIDB4M0YsIDB4MDQsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLAorMHg0MCwgMHhCQywgMHgwMCwgMHhCMCwgMHgxMywgMHhDNCwgMHgzRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGRSwgMHgwMywgMHhGMiwKKzB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzIsIDB4MEIsIDB4RTAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDBELAorMHgwNywgMHgzNCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwNywgMHgzQywgMHgwRCwgMHhDMCwKKzB4NzcsIDB4MDAsIDB4RDcsIDB4MDEsIDB4NEQsIDB4ODcsIDB4MzQsIDB4MUQsIDB4QzAsIDB4NzUsIDB4NDAsIDB4RDMsIDB4MDAsCisweDdFLCAweDAzLCAweEYwLCAweDFELCAweEMwLCAweDI0LCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweDAzLCAweEI4LCAweDA5LAorMHhDMCwgMHg1NCwgMHgwMCwgMHhEQiwgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MSwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTAsIDB4MDgsIDB4MDAsIDB4MkQsIDB4MDAsIDB4ODQsIDB4MDAsCisweDE4LCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDNELCAweDAwLCAweEQ0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDBGLAorMHgwMCwgMHgzMSwgMHgwMCwgMHhDNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwQywgMHgwMCwgMHgyMSwgMHgwMCwgMHg5QywKKzB4ODAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDIsCisweDM4LCAweDAwLCAweEYxLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhDNCwgMHg4NywgMHgxMiwKKzB4MUUsIDB4NjAsIDB4N0IsIDB4ODAsIDB4RTksIDB4MDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDIsIDB4N0IsIDB4MjAsCisweEU1LCAweDAxLCAweEEwLCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEU5LCAweDAxLCAweDk0LCAweDA3LAorMHhEMCwgMHgxRiwgMHg0MCwgMHg3MiwgMHgwOCwgMHhDMSwgMHgwMSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxQywgMHg0MCwgMHg3MCwKKzB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUEsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MjQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MDAsIDB4MTQsIDB4MDAsIDB4RDAsCisweDAwLCAweDQwLCAweDMzLCAweDQwLCAweEMxLCAweDAwLCAweDA1LCAweDAzLCAweDE0LCAweDBDLCAweDUwLCAweDMwLCAweDUyLAorMHg5MSwgMHg0OCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgxQywgMHg0MCwgMHg1QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsCisweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDA0LCAweEMwLCAweDE3LCAweDEwLCAweDU3LCAweDAwLAorMHg2NCwgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1QiwgMHgwMCwgMHg1QywgMHgwMSwgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MUUsIDB4MDAsIDB4NzMsIDB4MDIsIDB4Q0MsIDB4MDksIDB4MzAsIDB4MDcsIDB4QzAsIDB4NUMsIDB4MDAsIDB4NTMsCisweDAxLCAweDRDLCAweDAxLCAweEYyLCAweDA1LCAweEMxLCAweDVGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgyMywgMHhDMCwgMHgwRiwKKzB4MDAsIDB4M0YsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsCisweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDBELCAweDIwLCAweDM3LCAweDAyLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEUyLAorMHg0MSwgMHgwMCwgMHgwRiwgMHgxMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMiwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDA1LCAweDdDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNCwgMHgwMSwgMHg5RiwgMHgwMSwgMHg1QywgMHgwMiwKKzB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDIwLCAweDkzLCAweDIwLCAweDBDLCAweDAyLCAweDM0LCAweDA4LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDA1LCAweDRDLAorMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4OTAsIDB4NDksIDB4NDgsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDBBLCAweEQ5LCAweDM5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDBBLCAweEQwLAorMHhEOSwgMHg0MCwgMHhBNywgMHg4MCwgMHg5RiwgMHgxMiwgMHgzNCwgMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHhBNywgMHgyMCwKKzB4OTEsIDB4ODIsIDB4NDQsIDB4MEEsIDB4MzAsIDB4MjksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MDYsCisweEQwLCAweDA4LCAweEMwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLAorMHgyNCwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCNSwgMHgwMCwKKzB4RjQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NjAsIDB4MkMsIDB4MDAsIDB4QkQsIDB4MDgsIDB4RjYsIDB4MDYsIDB4RDAsIDB4MEIsCisweDQwLCAweDZGLCAweDEwLCAweEJELCAweDAwLCAweEY0LCAweDAyLCAweDUwLCAweDFCLCAweDQyLCAweDI3LCAweDA0LCAweDkxLAorMHgxMCwgMHg2NCwgMHg0MiwgMHgwMCwgMHgwOSwgMHg0MSwgMHgyNCwgMHg4NCwgMHg5RCwgMHgwMCwgMHg2NCwgMHgyMiwgMHhEMCwKKzB4ODksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjgsCisweDAwLCAweEFELCAweDAxLCAweEI0LCAweDAyLCAweDkxLCAweDBBLCAweDQwLCAweDJCLCAweDAwLCAweEFELCAweDAwLCAweEI0LAorMHgwNiwgMHhEMCwgMHgwQiwgMHg0MiwgMHgyOSwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgwQSwgMHg2MCwKKzB4NkIsIDB4MDAsIDB4QTUsIDB4MDAsIDB4RjQsIDB4MDIsIDB4RDIsIDB4MEEsIDB4NjAsIDB4MjMsIDB4NDEsIDB4ODEsIDB4MDQsCisweDI0LCAweDkyLCAweDkwLCAweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDQwLCAweDI0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHg0MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgwNiwgMHgwMCwKKzB4MEYsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MTIsIDB4MTcsIDB4MEEsIDB4N0MsIDB4MjgsCisweEQwLCAweEE1LCAweEQwLCAweDg0LCAweDAyLCAweDFELCAweDBBLCAweDVDLCAweDI4LCAweEYwLCAweEEwLCAweEMwLCAweDg3LAorMHgwMiwgMHgxRCwgMHgwMCwgMHg3QywgMHgwMCwgMHg2MCwgMHgwMywgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg2NSwKKzB4MDAsIDB4MzIsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4NUYsIDB4MEEsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA4LCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDA4LCAweERDLCAweDIyLAorMHg3MCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhERCwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg3NywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjcsIDB4MDAsIDB4QjMsIDB4MDAsCisweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBBLAorMHhDMCwgMHgyRCwgMHgwMiwgMHhCNywgMHgwMCwgMHhGRSwgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkQsIDB4MTIsIDB4MzAsCisweDQ5LCAweEMxLCAweDI0LCAweDAxLCAweEIzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDczLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxMSwgMHgwNCwgMHg0NSwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDUsIDB4NTAsIDB4NzAsIDB4NDEsIDB4NDAsCisweDA0LCAweDAxLCAweDExLCAweDEwLCAweDc0LCAweDQwLCAweEQxLCAweDAxLCAweDQwLCAweDA3LCAweDA1LCAweDFELCAweDAwLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwOCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MEMsIDB4MTIsIDB4MDEsIDB4MTAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDI1LCAweDQwLCAweDgxLCAweDE0LCAweDA0LCAweDAyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MSwgMHgyMSwKKzB4MjEsIDB4ODUsIDB4MDQsIDB4MzAsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4QUQsIDB4MDAsIDB4QjQsCisweDAzLCAweEQwLCAweDBCLCAweDQwLCAweDZBLCAweDAyLCAweEFELCAweDAxLCAweDg0LCAweDI2LCAweDEwLCAweDFBLCAweDQwLAorMHg2OCwgMHgwMCwgMHg5OSwgMHgwNCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI0LCAweDgwLCAweDlELCAweDQwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHg4MCwgMHg3NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHhGNCwgMHg4MiwKKzB4RDAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsIDB4MkMsCisweDEwLCAweDk5LCAweDAxLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg0OCwgMHgwMiwgMHhGMCwgMHgwOCwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MjAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OTUsCisweDAwLCAweDc0LCAweDAyLCAweEUwLCAweDA5LCAweDgwLCAweDI3LCAweDAwLCAweDlGLCAweDQwLCAweDdFLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHhBNiwgMHgwMiwgMHg5RiwgMHgwMywgMHg0QywgMHgyQSwgMHgzNCwgMHhCOSwgMHhDMCwgMHhBNCwgMHgwMCwKKzB4OEIsIDB4QTAsIDB4NEMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI0LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEQwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAzLCAweDVDLCAweDA2LCAweEYwLCAweDE5LCAweEQwLCAweDI3LCAweDQwLCAweDk3LAorMHgyMCwgMHg3QywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDEzLCAweDEwLCAweDdDLCAweDAwLCAweEYyLCAweDgxLCAweEQxLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHg2MCwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRELCAweDA0LCAweEYwLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMCwgMHgxMCwgMHgwMCwgMHg3RCwgMHgwMCwgMHg3NiwgMHg0NSwgMHhEMCwgMHgwNywgMHhDMCwgMHgxNSwgMHgyMCwKKzB4NjUsIDB4MDAsIDB4RjQsIDB4MDksIDB4RDAsIDB4MjcsIDB4RDAsIDB4MTYsIDB4MDAsIDB4NzcsIDB4MDAsIDB4RjQsIDB4MDksCisweEQyLCAweDA3LCAweDQwLCAweDFGLCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDE0LCAweDA0LCAweEMwLCAweDE1LAorMHgwMCwgMHg1MSwgMHgwMSwgMHg3NCwgMHgwMSwgMHhEMCwgMHgxNSwgMHg0MCwgMHg1NywgMHgxMCwgMHg3RCwgMHg0MSwgMHhDNCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweDMyLCAweDAwLCAweERELCAweDQwLCAweDM0LCAweDA3LCAweEQwLCAweDA0LCAweDQwLCAweDMxLCAweDgwLCAweDQ5LAorMHgwMCwgMHgzNCwgMHg0QiwgMHhEMCwgMHgzRCwgMHg0MCwgMHgzNiwgMHgzMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNywgMHhEOCwKKzB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsCisweEMxLCAweDIxLCAweDM0LCAweDAzLCAweEQwLCAweDFDLCAweDQwLCAweDczLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA3LAorMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwKKzB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4NzksIDB4MDIsIDB4NkQsIDB4MTAsCisweEI2LCAweDAzLCAweEQwLCAweDBFLCAweDU4LCAweDJBLCAweDAwLCAweDZELCAweDAwLCAweEI0LCAweDAxLCAweEQ5LCAweDAyLAorMHg0MCwgMHgxQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwNywgMHgxMCwgMHgwNiwgMHg0MCwgMHg3MSwgMHg0MCwgMHhFMSwKKzB4MTAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDQsIDB4RUQsIDB4MDIsIDB4ODQsIDB4NDMsIDB4RDAsCisweDBBLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc4LAorMHgwMCwgMHhBRiwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxNiwgMHhDMCwgMHg3RCwgMHgwMCwgMHg2QiwgMHgwMSwgMHhCQywKKzB4MDYsIDB4RjAsIDB4MTYsIDB4RDAsIDB4N0EsIDB4MDAsIDB4QUYsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsCisweDZCLCAweDAwLCAweDZGLCAweDAxLCAweEI4LCAweDA3LCAweDMwLCAweDFBLCAweEMwLCAweDU5LCAweDAwLCAweDYzLCAweDAxLAorMHhCQywgMHgwNSwgMHhGMCwgMHgxNiwgMHhDMCwgMHg1QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxRSwKKzB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsCisweDFGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDc1LCAweDIwLCAweDU3LCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwNSwgMHhEMCwgMHgyNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsCisweDAwLCAweEY4LCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3RCwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4QkMsIDB4MDcsIDB4RjgsIDB4ODcsIDB4QzAsIDB4N0MsIDB4MDAsIDB4QjMsIDB4ODksIDB4Q0MsIDB4MDUsIDB4QTAsCisweDFCLCAweEMwLCAweDdGLCAweDIwLCAweEYzLCAweDAxLCAweERDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLAorMHhGMywgMHgwMSwgMHhDQywgMHgwNiwgMHhGMiwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhDQywgMHgwNywKKzB4RjAsIDB4MUIsIDB4QzAsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDUsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MUIsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLCAweDZELCAweDAwLAorMHg5QywgMHgwMywgMHgxOCwgMHgwQSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhBMSwgMHgwMCwgMHhDNCwgMHgwMywgMHgxMSwgMHgwQSwKKzB4NDAsIDB4MkIsIDB4MDAsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MDIsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MUMsIDB4MDAsIDB4QTEsCisweDAwLCAweDg0LCAweDBBLCAweEQwLCAweDA2LCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDAwLCAweDg0LCAweDAyLCAweEQwLAorMHgwQSwgMHg0MCwgMHgyOCwgMHgxMiwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMCwgMHhCMCwgMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsCisweDAzLCAweDUwLCAweDg3LCAweDQwLCAweDNDLCAweDAwLCAweEIxLCAweDAwLCAweDg0LCAweDIwLCAweDEwLCAweDAyLCAweDQwLAorMHhCRiwgMHgwMCwgMHhBOSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHgwRiwgMHg0MCwgMHgyQSwgMHgwMCwgMHg3OSwgMHgwMiwKKzB4ODQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MUIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4ODAsCisweDQwLCAweDAwLCAweDAwLCAweEExLCAweDAwLCAweEY0LCAweDQwLCAweDEwLCAweDBFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHhGMSwgMHgwMCwgMHgxRCwgMHgwMiwgMHgzNCwgMHg0MywKKzB4MTAsIDB4MDAsIDB4NDEsIDB4QjAsIDB4MDQsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MzQsIDB4OTEsIDB4MzgsIDB4NDAsIDB4MjMsCisweDAwLCAweDA5LCAweDBELCAweDA0LCAweDM0LCAweDEwLCAweDAwLCAweDQxLCAweDQyLCAweDQzLCAweDA5LCAweDIwLCAweDA0LAorMHgwNiwgMHhEMCwgMHgxMCwgMHg0MCwgMHgxMywgMHgwMCwgMHgwRCwgMHgxMiwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MzQsIDB4ODQsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweEI1LCAweDAwLCAweERGLCAweDA1LCAweDdDLCAweDA3LCAweDUwLAorMHgyNCwgMHhDMCwgMHgzOCwgMHgwMCwgMHg5MywgMHgwMiwgMHg0NCwgMHgwQiwgMHhCMCwgMHgwNSwgMHhDMCwgMHg3MywgMHgwMCwKKzB4RDksIDB4MDIsIDB4NDQsIDB4MEIsIDB4MTAsIDB4MkMsIDB4QzAsIDB4QjYsIDB4MDAsIDB4Q0IsIDB4MDAsIDB4MEMsIDB4NjksCisweEYxLCAweDJELCAweDQxLCAweDY3LCAweDAwLCAweERGLCAweDAzLCAweDRELCAweDA3LCAweEYwLCAweEJELCAweEQwLCAweDc0LAorMHg0MCwgMHhEMywgMHgwMCwgMHgzQywgMHgwNSwgMHgzMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzcsIDB4MDYsIDB4OUYsIDB4MTAsIDB4NUMsIDB4MjMsIDB4NzAsIDB4MUQsCisweEMwLCAweDc3LCAweDAwLCAweDlGLCAweDAzLCAweDdDLCAweDAyLCAweDcxLCAweDg1LCAweEMwLCAweDM3LCAweDIyLCAweDk3LAorMHgwMiwgMHg3QywgMHgwMSwgMHhGMCwgMHgzRCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5NywgMHgwOCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDUsIDB4QzEsIDB4NjMsIDB4MDAsIDB4REYsIDB4ODEsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MUQsIDB4QzIsIDB4NzcsIDB4MTQsCisweERGLCAweDAzLCAweDdDLCAweDAxLCAweEYwLCAweDhELCAweEMyLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhDQywgMHgwRiwgMHhGMCwgMHgwNywgMHhDMCwKKzB4M0UsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MTcsIDB4MzIsIDB4MDMsIDB4QzUsIDB4MkMsIDB4MDAsIDB4NzMsIDB4MDAsCisweENFLCAweDAyLCAweDMwLCAweDEzLCAweEMwLCAweDFDLCAweDAxLCAweDcyLCAweDAwLCAweENDLCAweDAxLCAweDMwLCAweDBCLAorMHhDMCwgMHgwRiwgMHgwMiwgMHg3MywgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwNywgMHhDMCwgMHgxRiwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4Q0MsIDB4MDEsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDA1LCAweDQwLCAweDM0LAorMHgyMCwgMHg5MSwgMHgwOSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgxMCwgMHg0MSwgMHgyNCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwKKzB4MDAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4QzQsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4MTAsIDB4MDEsIDB4QzAsCisweDA1LCAweDAwLCAweDUxLCAweDIwLCAweDc0LCAweDAwLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDEwLCAweERELCAweDAwLAorMHg0NCwgMHgwNSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDgsIDB4ODUsIDB4NDAsIDB4MzYsIDB4MDAsCisweDkxLCAweDAyLCAweDE0LCAweDAxLCAweDE4LCAweDE1LCAweDQwLCAweDM0LCAweDgxLCAweEM5LCAweDA2LCAweDA0LCAweDAzLAorMHgxMCwgMHg2RCwgMHg0MCwgMHgzMiwgMHg4MCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4Q0QsIDB4ODYsIDB4NDQsCisweDA0LCAweDEwLCAweDFELCAweDQwLCAweDA3LCAweDA4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzNiwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4MTQsIDB4MEQsIDB4NTAsIDB4MzQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDUsIDB4MDIsIDB4MTQsCisweDBELCAweDYwLCAweDIyLCAweDQwLCAweDk1LCAweEEwLCAweDA0LCAweDAwLCAweDEwLCAweDA0LCAweDQwLCAweDIzLCAweDQwLAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNCwKKzB4MTQsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweDM2LCAweDAwLCAweDVGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM2LCAweDAwLCAweDkzLCAweDAwLAorMHg3QywgMHgwMSwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyNCwgMHgxMCwgMHg1QiwgMHg4MCwgMHg0NiwgMHg4MSwgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MTYsIDB4MDAsIDB4NTcsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweERGLCAweDAwLCAweDRELCAweDAwLCAweDMwLAorMHgwRCwgMHhDMCwgMHgwMywgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDYsIDB4QzAsIDB4MzksIDB4MDAsIDB4QUYsIDB4ODAsIDB4RkMsCisweDAwLCAweEYwLCAweDBCLCAweEMwLCAweDJCLCAweDgwLCAweDNGLCAweDAwLCAweEZFLCAweDAwLCAweEYwLCAweDAyLCAweEMwLAorMHgwRCwgMHgwMCwgMHgyQiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RjAsIDB4MEYsCisweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDJGLCAweDAwLAorMHhGRiwgMHgwMSwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHg1RCwgMHgwMCwgMHg2RiwgMHgwMSwgMHhDQywgMHgwNiwKKzB4RjEsIDB4MEYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4MzMsIDB4MDMsIDB4RUMsIDB4MjQsIDB4QjIsIDB4Q0YsIDB4QzgsIDB4M0MsCisweDIxLCAweEZCLCAweDg0LCAweERDLCAweDg3LCAweEIwLCAweDBGLCAweDQwLCAweDVDLCAweDAyLCAweDNGLCAweDA4LCAweEFDLAorMHg4NSwgMHhCMCwgMHgwRiwgMHhDMiwgMHg1RiwgMHgwMCwgMHgzNywgMHg4MCwgMHhDRCwgMHgwNiwgMHg5MCwgMHgwQiwgMHg4MCwKKzB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4REQsCisweDAxLCAweDc0LCAweDAwLCAweEQwLCAweDNELCAweDQyLCAweDYwLCAweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDA2LCAweEQyLAorMHgxRCwgMHg0MCwgMHg3QywgMHgwMCwgMHgxMSwgMHgyMCwgMHg0NCwgMHgxMCwgMHgxMCwgMHhBRiwgMHg0MCwgMHg3QywgMHgwMiwKKzB4RjEsIDB4MDIsIDB4NDQsIDB4MDcsIDB4MTQsIDB4NkQsIDB4NDAsIDB4MDQsIDB4MDEsIDB4OUQsIDB4MDQsIDB4NTQsIDB4ODUsCisweDEwLCAweDlGLCAweDAwLCAweDQ3LCAweDQwLCAweDkzLCAweDhCLCAweDQ0LCAweDUyLCAweDEwLCAweDA5LCAweDQwLCAweDBELAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MEMsCisweDYwLCAweDMwLCAweDIwLCAweDEwLCAweDA0LCAweDY0LCAweDEwLCAweDkwLCAweDRDLCAweDQ4LCAweDMwLCAweDEwLCAweEM5LAorMHgwOCwgMHgzNCwgMHgwMywgMHgwMiwgMHgyQywgMHg0NSwgMHgxMiwgMHgwMSwgMHgwRCwgMHgwMCwgMHgyNCwgMHgwMSwgMHhEMCwKKzB4MEMsIDB4NDIsIDB4MzMsIDB4MTAsIDB4MDksIDB4MjAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NEQsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDY0LCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwNCwgMHhDMCwgMHgwRCwgMHg2MCwgMHgyNCwgMHgwMCwgMHgxRCwgMHgwNCwgMHg0NSwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzQsIDB4MDgsIDB4MTEsIDB4MDAsIDB4NjQsIDB4NDQsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzQsIDB4ODAsIDB4RDEsIDB4MDAsCisweDY0LCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDA2LCAweDA0LCAweDhELCAweDExLCAweDc0LCAweDg1LCAweDU0LCAweDBELAorMHg0MiwgMHgwNywgMHgwMCwgMHg1NSwgMHgwOCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgxMSwgMHg0MSwgMHgwRCwgMHgyMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NjYsIDB4MDAsIDB4REYsIDB4MDAsIDB4NzgsIDB4NEUsCisweEUwLCAweDBELCAweEMwLCAweDI1LCAweDEwLCAweDRGLCAweDA3LCAweDRDLCAweDIyLCAweEYwLCAweDlELCAweDQwLCAweDM0LAorMHg0MCwgMHgxMywgMHgwRCwgMHgyQywgMHgwQywgMHhCMiwgMHgwRCwgMHhEMCwgMHgzNCwgMHgxMCwgMHhEQiwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4MzAsIDB4MEQsIDB4NTAsIDB4MDYsIDB4MjgsIDB4OUUsIDB4MDEsIDB4NkMsIDB4MTQsIDB4RjAsIDB4MEQsIDB4QzAsCisweDEzLCAweDAwLCAweDFCLCAweDAzLCAweDRDLCAweDA2LCAweDMwLCAweDE5LCAweEMwLCAweDIxLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgyRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MEUsIDB4QzAsIDB4MkYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDAwLCAweERDLCAweDAyLCAweDcwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLCAweERDLCAweDAzLAorMHhCMCwgMHgwRiwgMHhDMiwgMHgwRCwgMHgxMCwgMHhCRCwgMHgwMCwgMHhEQywgMHgwMSwgMHhCNCwgMHgwRiwgMHhDMCwgMHg4RiwKKzB4NTAsIDB4NkIsIDB4MDAsIDB4RkMsIDB4MjYsIDB4RjQsIDB4MEEsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDg1LCAweDAyLCAweERGLCAweDAwLCAweDdDLCAweDQwLCAweDMwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHg1NywgMHgwMiwgMHg0QywgMHg0MiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMiwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzQsIDB4MEEsIDB4REYsIDB4MDAsIDB4NUMsIDB4MjMsIDB4NzAsCisweDBELCAweEMxLCAweDE1LCAweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDAwLCAweDUwLCAweDBELCAweEM5LCAweDM2LCAweDA4LAorMHgxNywgMHgxMiwgMHg0RCwgMHgwMywgMHhGMCwgMHgwOSwgMHg4MiwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4REQsIDB4NjAsIDB4NzAsIDB4MTgsIDB4MTAsIDB4MEYsIDB4NDAsCisweDI3LCAweDAwLCAweDUxLCAweDA1LCAweDQ0LCAweDRFLCAweEQwLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLAorMHg3NCwgMHgwMiwgMHhEMCwgMHhBRiwgMHg0MCwgMHgzOCwgMHgwMiwgMHhGRCwgMHgwMCwgMHgzNCwgMHgyQiwgMHhCMCwgMHgyRSwKKzB4NDAsIDB4MDQsIDB4NDAsIDB4MTEsIDB4MDgsIDB4MkMsIDB4MDMsIDB4MTAsIDB4MkYsIDB4NDgsIDB4MDQsIDB4MDIsIDB4NTEsCisweDAwLCAweDQ0LCAweDEzLCAweEQwLCAweDA5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgyMCwgMHhDMCwgMHgwNCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwRSwgMHg1MCwgMHgwQywgMHg0MCwgMHgxMywKKzB4MDAsIDB4MDUsIDB4MDYsIDB4MDUsIDB4MEUsIDB4RDAsIDB4MDgsIDB4NDAsIDB4RjMsIDB4MDQsIDB4MEQsIDB4MDAsIDB4MzQsCisweDAwLCAweEQwLCAweDBDLCAweDYwLCAweDcwLCAweDAwLCAweENELCAweDA3LCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQ4LAorMHgxMSwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHgzQywgMHg0MCwgMHg5MCwgMHgwMCwgMHg0OSwgMHgwMiwKKzB4NDQsIDB4MTMsIDB4RDEsIDB4NTAsIDB4NDQsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDU4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDAxLCAweDUwLCAweDFFLCAweDQwLCAweDZCLCAweDAwLAorMHgzMSwgMHgwMSwgMHg4NCwgMHgwNiwgMHhEMCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MUMsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MzEsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NDgsCisweDgwLCAweEU1LCAweDAxLCAweEU0LCAweDA0LCAweDEwLCAweDlDLCAweDQwLCAweDRDLCAweDAxLCAweEM5LCAweDAxLCAweDg0LAorMHgxNiwgMHhEOCwgMHg5QSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MUEsIDB4OTAsIDB4MDIsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MjMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MDcsCisweDA0LCAweDBDLCAweDAyLCAweEYwLCAweDRDLCAweEMwLCAweDMzLCAweDAxLCAweENELCAweDAwLCAweDNDLCAweDAyLCAweEYwLAorMHg4QywgMHg0MCwgMHgzMCwgMHgwMiwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHhERCwgMHhDMCwgMHgxNSwgMHgyQSwKKzB4NTcsIDB4MjQsIDB4MEMsIDB4NjEsIDB4NzAsIDB4OEMsIDB4QzksIDB4MjIsIDB4OTAsIDB4ODksIDB4MTIsIDB4MEMsIDB4MDMsCisweEYwLCAweDAwLCAweEMxLCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LAorMHgzRCwgMHgwOCwgMHhGRiwgMHgwMCwgMHhGQywgMHgxMywgMHhCMCwgMHgwRiwgMHhDMSwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MjIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MkQsCisweDUyLCAweDNGLCAweDIwLCAweERGLCAweDAwLCAweDNDLCAweDAzLCAweEY0LCAweDBELCAweEMwLCAweDA3LCAweDIwLCAweERCLAorMHgwMCwgMHg3QywgMHg4MSwgMHhGMCwgMHg4RiwgMHhDMiwgMHgwQiwgMHg4MSwgMHhGNywgMHgwMCwgMHhGMCwgMHgxMiwgMHhGMCwKKzB4MDMsIDB4QzIsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4QjcsIDB4MDAsIDB4REYsIDB4MDgsIDB4M0MsIDB4MDMsIDB4MzEsIDB4MUQsIDB4QzgsIDB4MDcsIDB4MTAsIDB4OUYsIDB4MDAsCisweDRGLCAweDAwLCAweEYwLCAweDRELCAweEM4LCAweDEwLCAweDA4LCAweDlCLCAweDAwLCAweDRELCAweDgzLCAweDMwLCAweDAxLAorMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzOSwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDMsIDB4NEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4OUMsIDB4MDIsCisweEQwLCAweDBBLCAweDYwLCAweEJCLCAweDEwLCAweEZDLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDRFLCAweDQwLCAweEJCLAorMHgwNCwgMHhFRCwgMHgwQywgMHhCNCwgMHgwMywgMHg0MCwgMHgyRSwgMHg0MCwgMHgwQiwgMHgwMCwgMHhFRCwgMHgyMCwgMHg4NCwKKzB4MDAsIDB4RDAsIDB4QUUsIDB4NDAsIDB4MDgsIDB4MDAsIDB4RTcsIDB4MDAsIDB4QzQsIDB4ODMsIDB4MTIsIDB4MEYsIDB4NDAsCisweDRDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAyLCAweDU5LCAweDE4LCAweEU1LAorMHgwMSwgMHhCNCwgMHgwNywgMHg1MCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgwMCwgMHgyRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHg1MCwKKzB4MUUsIDB4NDAsIDB4N0IsIDB4MDEsIDB4RUQsIDB4MTEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4REUsIDB4NDAsIDB4N0IsIDB4MDEsCisweEVELCAweDgxLCAweEI0LCAweDA3LCAweDAwLCAweDRFLCAweDQwLCAweDVCLCAweDIwLCAweEVELCAweDAxLCAweDk0LCAweDA0LAorMHhEMSwgMHg1QywgMHg1MCwgMHg2OSwgMHgwMCwgMHg4NSwgMHgwMSwgMHg5NCwgMHgwRiwgMHgxMCwgMHgxNiwgMHg0MCwgMHgxMiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4QjMsIDB4ODAsIDB4Q0QsIDB4NDAsCisweDM0LCAweDI3LCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDExLCAweDhELCAweDAzLCAweDE0LCAweDA3LCAweEQwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgwNCwgMHg0NywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4ODMsIDB4MDAsIDB4MEMsIDB4NDQsIDB4QTMsIDB4MDIsIDB4REQsIDB4MDIsIDB4MDQsIDB4MDUsIDB4RDAsCisweDBDLCAweDQ0LCAweDAxLCAweDAwLCAweEM1LCAweDA3LCAweDE0LCAweDg3LCAweDEwLCAweDZDLCAweDQwLCAweDVBLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHgxRCwgMHgwNCwgMHg1RiwgMHgwMCwgMHhGQywKKzB4MDksIDB4RjAsIDB4MDUsIDB4QzAsIDB4REYsIDB4MDEsIDB4N0YsIDB4NDQsIDB4NzQsIDB4NDUsIDB4RjgsIDB4MDUsIDB4QzAsCisweDE3LCAweDAwLCAweDdGLCAweDAyLCAweENELCAweDk1LCAweEYwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDVGLCAweDgwLAorMHgzQywgMHgwMSwgMHgzMSwgMHgwNSwgMHhDMCwgMHg1RiwgMHgwMCwgMHg3RiwgMHgwMiwgMHg4QywgMHhCRCwgMHhGMSwgMHgwNSwKKzB4QzAsIDB4MUQsIDB4MDAsIDB4NjcsIDB4MDcsIDB4NUMsIDB4MDEsIDB4MzYsIDB4MjcsIDB4QzQsIDB4NUUsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDA0LCAweDFGLCAweDAwLCAweDdDLCAweDgwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwOCwgMHgxRiwgMHgxMCwgMHg3MCwgMHgwMCwgMHhGOSwgMHgwMSwgMHhDNCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4NDIsIDB4N0MsCisweDA4LCAweEY0LCAweDAxLCAweEMwLCAweDA3LCAweDAxLCAweDFELCAweDgyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEEwLAorMHg4NiwgMHgwMCwgMHgxNiwgMHgwMCwgMHg2OCwgMHgwOCwgMHhGMiwgMHgwMSwgMHhEMCwgMHg0OSwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDEsIDB4OTcsIDB4MDAsIDB4N0MsIDB4NEUsIDB4RjgsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDgyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDI3LCAweDg5LAorMHg5MywgMHg4MCwgMHg3QywgMHgwMiwgMHgzMCwgMHgxOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxNiwKKzB4MzAsIDB4MDgsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MzksIDB4NEMsIDB4MDIsIDB4MzQsIDB4MjksIDB4RDgsIDB4MjQsCisweDQwLCAweDkxLCAweDA5LCAweDRDLCAweDBFLCAweDM0LCAweDA4LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwMSwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwOSwKKzB4NjAsIDB4MjMsIDB4MjAsIDB4OTEsIDB4MDMsIDB4NzYsIDB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4RUIsIDB4ODEsIDB4OEIsCisweDAwLCAweDZDLCAweDAyLCAweDUwLCAweDE5LCAweEQwLCAweDY0LCAweDEyLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweEIwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHg0MywgMHg0NSwgMHgyRSwgMHgxMCwgMHgzOCwgMHg0OCwgMHhBMCwgMHgxMSwKKzB4OTEsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTIsIDB4MjksIDB4NDAsIDB4MDUsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDE4LCAweDlELCAweDAwLCAweDU0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwRSwgMHhEMSwgMHgwOSwgMHg0OCwgMHgyNSwgMHg4MCwgMHg5MSwgMHgwMCwKKzB4MTQsIDB4MDIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NTQsIDB4MEEsIDB4OTAsIDB4MDksCisweDQ0LCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDk1LAorMHgwMiwgMHgyNSwgMHgwMiwgMHgxMCwgMHg0OSwgMHg2MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjIsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MDAsIDB4MzQsIDB4NTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QTcsCisweDA4LCAweDgxLCAweDAwLCAweDM2LCAweDAyLCAweERBLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDA4LCAweDA0LAorMHgyMiwgMHgxMCwgMHg4QywgMHg2MCwgMHgyMiwgMHg4MCwgMHg4RCwgMHgyNCwgMHgzNCwgMHgwMiwgMHg5NCwgMHg1OCwgMHg0MCwKKzB4MjIsIDB4MDAsIDB4OEQsIDB4MEMsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDAsIDB4ODUsIDB4MDAsCisweDI0LCAweDIyLCAweDEwLCAweDQ4LCAweDQwLCAweDQxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCOCwgMHgwNiwgMHgxMSwgMHgxRiwgMHgwMCwgMHg1QywgMHgxMCwgMHhEMCwgMHg0MSwgMHg0MSwgMHgwNywgMHg0MCwKKzB4MTMsIDB4MDAsIDB4NzYsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDcsIDB4NDAsIDB4MTEsIDB4MDIsIDB4NTQsIDB4MDgsCisweDM0LCAweDYxLCAweEMxLCAweDE0LCAweDE1LCAweDFGLCAweDhBLCAweDdDLCAweDAwLCAweEI0LCAweEExLCAweEM0LCAweDg0LAorMHgwMiwgMHgwRiwgMHgwMiwgMHg0QywgMHgwMCwgMHgzMCwgMHg0MSwgMHhDMSwgMHgwNCwgMHgwMCwgMHgxNSwgMHgxNCwgMHg2QywKKzB4MDksIDB4MzAsIDB4QTUsIDB4QzAsIDB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEI4LCAweDJGLCAweDA1LCAweDlGLCAweDAwLCAweEZDLCAweDUyLCAweEYwLCAweDA5LCAweEMwLCAweDZGLCAweDIwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgyQiwgMHhDMCwgMHhBNywgMHgwMCwgMHhCRiwgMHgwNCwgMHhGQywgMHgxMiwgMHhGMCwKKzB4NDksIDB4NDIsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjQsIDB4ODksIDB4QzAsIDB4MkQsIDB4MDAsCisweEJGLCAweDBDLCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDNGLCAweDAwLCAweEJCLCAweDAwLCAweERDLCAweDEyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBOCwKKzB4MkYsIDB4MDEsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MzIsIDB4QjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MjAsIDB4QkYsIDB4MDAsCisweENELCAweDAyLCAweEYwLCAweDQ5LCAweEM1LCAweDZGLCAweDAwLCAweDlCLCAweDgwLCAweDZFLCAweDAyLCAweDc5LCAweDhCLAorMHhDMCwgMHgyRiwgMHgwMSwgMHhCQiwgMHgxNCwgMHhBQywgMHg4MiwgMHgzMCwgMHgwQiwgMHhDQywgMHgyMSwgMHgwMCwgMHhCRiwKKzB4MjgsIDB4Q0MsIDB4ODIsIDB4MzEsIDB4NEIsIDB4QzEsIDB4MkUsIDB4NjgsIDB4QTMsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjAsCisweDBGLCAweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LAorMHgwNSwgMHgxRCwgMHgwMCwgMHg3MCwgMHgzMSwgMHgxNCwgMHgyMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NUEsIDB4MzAsIDB4NDQsIDB4QzAsIDB4RDgsIDB4ODEsIDB4NDAsCisweDA3LCAweDAwLCAweDExLCAweDA0LCAweDUxLCAweDAwLCAweDEwLCAweDAxLCAweEMwLCAweDA1LCAweDA0LCAweDVELCAweDA4LAorMHg0QywgMHgwMCwgMHgxMSwgMHgwMSwgMHg0MCwgMHgwNywgMHgzMCwgMHgxMSwgMHgwMCwgMHg2NCwgMHg4MCwgMHhEMCwgMHgwMSwKKzB4NDAsIDB4NjMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDMsCisweDhELCAweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDgwLCAweDA0LCAweDgyLAorMHhEMiwgMHgwOCwgMHgwQSwgMHhBMywgMHgwMCwgMHg4OSwgMHgwNCwgMHgwNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDIsIDB4ODksIDB4MTQsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDUsCisweDAyLCAweDE4LCAweDA4LCAweDQ4LCAweDI3LCAweDIwLCAweDg1LCAweDAwLCAweDM2LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHhBNSwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MTAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQ4LCAweDI2LCAweDIwLCAweDg5LCAweDAwLCAweDQ0LCAweDAyLCAweEQ4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg2OCwgMHgyNSwgMHgxMCwgMHg5RCwgMHgwNCwgMHg0NiwgMHgwMiwKKzB4OTksIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NjQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDEsIDB4NjMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDY1LCAweDAwLCAweDlELCAweDAwLAorMHg3QywgMHgwNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwNiwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDIsIDB4NjUsIDB4NDIsIDB4NzIsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUIsCisweDAwLCAweDU0LCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI1LCAweDMzLCAweDlGLCAweDIxLCAweDRDLCAweDQ2LCAweDMwLAorMHgwOSwgMHhDMCwgMHgyMiwgMHgwMCwgMHg5NSwgMHhBNywgMHg3RSwgMHg4MiwgMHhFMCwgMHgzOSwgMHhDMCwgMHgxNywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjUsIDB4MjUsIDB4OUYsIDB4ODAsIDB4M0MsCisweDA2LCAweDcwLCAweDA5LCAweEUyLCAweDI3LCAweDAwLCAweDlGLCAweDEwLCAweDdDLCAweDI2LCAweEYwLCAweDU5LCAweEMwLAorMHgyNywgMHgwQywgMHg5NywgMHgwMiwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg1MCwKKzB4NUMsIDB4MDIsIDB4MzIsIDB4MDksIDB4RTgsIDB4MjcsIDB4MTAsIDB4OEYsIDB4MDEsIDB4NUMsIDB4MEEsIDB4NzQsIDB4MDksCisweEMxLCAweEE2LCAweDAwLCAweDlCLCAweDA1LCAweDdFLCAweDAyLCAweEYwLCAweDU5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHg0MCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4ODAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDMsCisweDAwLCAweDE3LCAweDAyLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMyLCAweDAwLCAweDAxLCAweDFGLCAweDAwLCAweDRDLAorMHgwMCwgMHhCMCwgMHg4MSwgMHhDMSwgMHgwNywgMHg0MCwgMHgxNywgMHgyMiwgMHg1QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4NDAsIDB4MzAsIDB4MDEsIDB4ODIsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDlDLCAweDAwLCAweDVELCAweDQwLCAweEY0LCAweDA1LCAweEQ4LAorMHgwNSwgMHhDMCwgMHgxNSwgMHgyMCwgMHg2QywgMHgwMCwgMHhGNCwgMHg0OSwgMHgxMCwgMHgwNSwgMHg0MCwgMHg5RiwgMHg4MCwKKzB4NUIsIDB4MDAsIDB4NzYsIDB4MDEsIDB4RDAsIDB4ODcsIDB4NDAsIDB4OUMsIDB4MDAsIDB4N0QsIDB4MDIsIDB4ODQsIDB4MDEsCisweEY0LCAweDI3LCAweEMwLCAweDE1LCAweDAwLCAweDcxLCAweDAwLCAweDg0LCAweDg5LCAweDEwLCAweDc3LCAweDQwLCAweERGLAorMHgwMCwgMHg3MCwgMHgwNywgMHhDNCwgMHgwMSwgMHgxNiwgMHg5NywgMHg0MCwgMHg0MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4RjIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MjMsIDB4RDAsIDB4MEMsCisweDQ4LCAweDMxLCAweDAwLCAweDg4LCAweDAyLCAweDM2LCAweDFGLCAweDkwLCAweDBDLCAweDQwLCAweDEzLCAweDEwLCAweEM1LAorMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgzQywgMHg2MCwgMHhCMCwgMHgwMCwgMHhENSwgMHgwQiwgMHgwMCwgMHgwMywgMHg5MSwKKzB4M0MsIDB4NDQsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MzQsIDB4MEEsIDB4NTAsIDB4MTQsIDB4NDAsIDB4RjIsIDB4MDEsCisweEMxLCAweDA3LCAweDI0LCAweDBCLCAweDEyLCAweDhDLCAweDQ0LCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MzksIDB4MDEsIDB4NkQsIDB4MTAsIDB4QjQsIDB4MDQsIDB4MTgsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RTEsIDB4NDQsCisweEI0LCAweDAzLCAweEQwLCAweDM2LCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweDg1LCAweDAzLCAweEQ0LCAweDA2LAorMHg2MCwgMHg3RCwgMHgwMiwgMHhFMSwgMHgwMiwgMHhFNiwgMHgwMiwgMHgxMCwgMHgwNiwgMHg0MCwgMHhCQiwgMHgyMCwgMHhFMSwKKzB4NjEsIDB4RTUsIDB4OEYsIDB4NTAsIDB4MDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA1LCAweEQwLCAweDFFLCAweEMwLCAweEY5LAorMHgwMCwgMHgyQiwgMHgwMSwgMHhCQywgMHgwNCwgMHhCMSwgMHgxRSwgMHhDMCwgMHg3MywgMHgwMCwgMHhFNSwgMHgzNSwgMHhCNCwKKzB4MkYsIDB4QjAsIDB4MUYsIDB4RDAsIDB4NzgsIDB4MDAsIDB4Q0YsIDB4NDEsIDB4OEMsIDB4MDUsIDB4QjQsIDB4MTYsIDB4QzAsCisweDc5LCAweDAzLCAweEYzLCAweDAxLCAweEJELCAweDA0LCAweDcwLCAweDE2LCAweEMwLCAweDdCLCAweDQwLCAweDIzLCAweDAxLAorMHhBQywgMHgwNywgMHgzMSwgMHgxRSwgMHhDNCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsCisweDFFLCAweDAwLCAweDNDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweERGLCAweDRBLCAweDdDLCAweDFCLAorMHhGMCwgMHgwNSwgMHhDOCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGNiwgMHgwNSwgMHhDNiwgMHhCNSwKKzB4MDEsIDB4NUUsIDB4MDAsIDB4MUMsIDB4MDAsIDB4NTAsIDB4MDUsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsCisweDAzLCAweEIwLCAweDA5LCAweEM4LCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyMCwgMHg1RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgyNywgMHhGOCwgMHg4RiwgMHhDMCwgMHg3QiwgMHgwMCwgMHgzQiwKKzB4MDEsIDB4RkMsIDB4MDQsIDB4NzAsIDB4MUYsIDB4QzAsIDB4NUYsIDB4MDAsIDB4RkYsIDB4MDksIDB4RkUsIDB4MjcsIDB4QjAsCisweDFCLCAweEMwLCAweDc2LCAweDAwLCAweEZGLCAweDAxLCAweDhDLCAweDA3LCAweDMwLCAweDkzLCAweEM0LCAweDdGLCAweDAwLAorMHhCMywgMHgwMSwgMHhDQywgMHgxNiwgMHhGOCwgMHg5NywgMHhDMCwgMHg3QiwgMHgwMCwgMHhGQiwgMHg0MSwgMHhGOCwgMHgwNCwKKzB4MzQsIDB4OUIsIDB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsCisweDE5LCAweDIyLCAweEUxLCAweDQwLCAweEI0LCAweDgxLCAweDc4LCAweDBFLCAweDQyLCAweDNCLCAweDAwLCAweDYxLCAweDAwLAorMHhCNCwgMHgwMCwgMHhEMCwgMHgwRSwgMHg0NCwgMHgxQiwgMHgyMSwgMHhFNiwgMHgwOCwgMHhGNCwgMHgyMywgMHgxNCwgMHgwQSwKKzB4NDAsIDB4NzgsIDB4MDAsIDB4QkQsIDB4MDAsIDB4ODQsIDB4MjMsIDB4RjAsIDB4MDAsIDB4NDAsIDB4M0IsIDB4MDEsIDB4QTEsCisweDI0LCAweEFDLCAweDEyLCAweEIwLCAweDA2LCAweEMwLCAweDNCLCAweDA2LCAweEUxLCAweDA4LCAweEI0LCAweDIwLCAweEIwLAorMHgwMywgMHg0OCwgMHg1NSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwKKzB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTgsIDB4OEUsIDB4NDAsIDB4N0YsIDB4MDQsIDB4MjEsIDB4MDAsIDB4QjQsCisweDAwLCAweDUwLCAweDBFLCAweDQwLCAweDE5LCAweDA4LCAweEVDLCAweDQyLCAweEI0LCAweDAzLCAweDEwLCAweDAyLCAweDQwLAorMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhBNCwgMHgwMSwgMHgxMCwgMHgwMiwgMHg2MCwgMHgzOSwgMHgyNCwgMHhFMSwgMHg4MCwKKzB4QjQsIDB4NzIsIDB4MUMsIDB4MDYsIDB4NDYsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4NDAsIDB4NTAsIDB4MEEsCisweDQyLCAweDIwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDI1LCAweDAwLAorMHhDMSwgMHgyMCwgMHgzNCwgMHgwOCwgMHg1OCwgMHgwQywgMHg0MCwgMHhGMywgMHgwMCwgMHg0OSwgMHgxMSwgMHgzNCwgMHgyMCwKKzB4RDgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDIsCisweDgwLCAweDBELCAweDAwLCAweDI0LCAweDAxLCAweDkwLCAweDAwLCAweDQwLCAweEYzLCAweDAwLCAweDQxLCAweDAxLCAweDM0LAorMHgwNiwgMHg5MCwgMHgwNCwgMHg0MCwgMHhGMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNiwgMHgwNCwgMHgxOCwgMHgzOSwgMHg0MCwKKzB4MDksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4QTUsIDB4NDAsIDB4RDMsCisweDAwLCAweDdDLCAweDZFLCAweDcwLCAweDBELCAweDQwLCAweEY3LCAweDQwLCAweDBCLCAweDA3LCAweDdDLCAweDAwLCAweDcwLAorMHgwRCwgMHhDMiwgMHgxNSwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGNCwgMHg0RiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4MjQsIDB4MDIsIDB4MzAsIDB4MDEsIDB4QzAsIDB4RjksIDB4MDAsIDB4NTMsIDB4QTMsIDB4M0MsIDB4MDIsCisweDMwLCAweDA0LCAweDQwLCAweDc3LCAweDA4LCAweERGLCAweDI1LCAweDdDLCAweDA3LCAweDUwLCAweDYxLCAweEMwLCAweDU0LAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNywgMHgxMSwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MEEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NTcsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsCisweEMwLCAweDE3LCAweDAwLCAweEQ3LCAweDA4LCAweDdDLCAweDQzLCAweDcwLCAweDA1LCAweEQ4LCAweDI1LCAweDEwLCAweDlGLAorMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwNCwgMHhERiwgMHgwOCwgMHg2OCwgMHgwQSwgMHhGOSwKKzB4MjUsIDB4ODAsIDB4MzcsIDB4MDEsIDB4MEUsIDB4MTAsIDB4N0MsIDB4MEIsIDB4RjIsIDB4MjEsIDB4QzAsIDB4QjcsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDA3LCAweDAwLCAweEYzLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRSwgMHgwNCwgMHgzMywgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4NzAsIDB4MkIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4M0IsIDB4MjAsCisweEZDLCAweDAwLCAweEIwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweDIzLCAweDExLCAweENDLCAweDQyLCAweDc2LCAweDg3LAorMHhDMCwgMHgzQywgMHgwMCwgMHgzRiwgMHgwMiwgMHhDNCwgMHgwNywgMHhGMCwgMHgwMywgMHhDMSwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NjYsIDB4MDgsIDB4RDEsIDB4NDAsIDB4NzYsIDB4MDQsCisweEQwLCAweDBELCAweDQ4LCAweDM1LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDE0LCAweEQwLCAweDBELCAweEMwLCAweDI3LAorMHg4MCwgMHhERCwgMHg4MCwgMHg3QywgMHgwMywgMHhEMCwgMHgxMSwgMHg0MCwgMHhDNCwgMHg0NCwgMHg5MSwgMHgyMSwgMHg3QywKKzB4MDcsIDB4QjAsIDB4NTEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MEIsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDgsCisweEYwLCAweDAwLCAweDExLCAweDAzLCAweDQ0LCAweDAwLCAweEQyLCAweDMxLCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMiwgMHg0NiwgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwKKzB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MTEsIDB4MzAsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MTcsIDB4MDEsCisweERELCAweDAwLCAweDc0LCAweDAzLCAweEQyLCAweDBELCAweDQwLCAweDQ0LCAweDAwLCAweDkxLCAweDgzLCAweDc2LCAweDQ2LAorMHg5MCwgMHgxMSwgMHg0MCwgMHgzNywgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NiwgMHgwRSwgMHg1MCwgMHgwNSwgMHg0MCwgMHg2NCwKKzB4NDQsIDB4RDEsIDB4MjAsIDB4NTQsIDB4MTgsIDB4RDIsIDB4MzksIDB4NDAsIDB4MDQsIDB4MDgsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMSwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgxMSwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NzAsIDB4MDAsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4OTksCisweDAwLCAweDQwLCAweDM3LCAweDAwLCAweDgxLCAweDIwLCAweDA0LCAweDAyLCAweDEwLCAweDA0LCAweDQwLCAweDI0LCAweDAwLAorMHgwMSwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MEQsIDB4NDAsCisweDNDLCAweDgwLCAweDEzLCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDBELCAweDYwLCAweDE3LCAweDAwLCAweEZELCAweDAwLAorMHhFQywgMHgwMywgMHhGOCwgMHgwMCwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhCMCwgMHg4MSwKKzB4QzAsIDB4M0IsIDB4NDAsIDB4MDMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MjQsIDB4MTAsIDB4RDMsCisweDAwLCAweDFDLCAweDAwLCAweEYwLCAweDA5LCAweEM0LCAweDA0LCAweDY0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMiwgMHgzRCwKKzB4NDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsCisweDAzLCAweEYwLCAweDAzLCAweDAwLCAweDBGLCAweDJBLCAweDNGLCAweDAwLCAweERDLCAweDAzLCAweDcwLCAweDAzLCAweEMwLAorMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwNywgMHg0MCwgMHgwRiwgMHg0MCwgMHgzNywgMHgwMCwKKzB4RUMsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzgsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDdGLCAweDAwLCAweDNFLCAweDAwLCAweEZDLCAweDA0LCAweDMwLCAweDFGLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHgyNCwgMHhDQywgMHgwMywgMHhGMCwgMHg0MywgMHhDMSwgMHgzRCwgMHgyMSwgMHgzRiwgMHhBMCwgMHhEQywgMHgxMywKKzB4MzAsIDB4OUUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4OTgsIDB4MTcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NEMsCisweDAwLCAweEZGLCAweDAzLCAweEZDLCAweDA3LCAweEYwLCAweDRGLCAweEMwLCAweDdFLCAweDAyLCAweEZGLCAweDAwLCAweENDLAorMHgwMywgMHgzMCwgMHg4MywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MTAsIDB4MzYsIDB4MDUsIDB4MUQsIDB4MDIsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MEQsIDB4NTAsIDB4MjQsIDB4MDgsIDB4OUQsCisweDA4LCAweEM0LCAweDJCLCAweDEwLCAweDM5LCAweDQ0LCAweDdDLCAweDAyLCAweDlELCAweDAxLCAweEM0LCAweDIzLCAweDExLAorMHgxRCwgMHg0MCwgMHhGRiwgMHgwMSwgMHg1RCwgMHgwMSwgMHhDNCwgMHgwRiwgMHhEMCwgMHgwRCwgMHg0MCwgMHg0NCwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NUMsIDB4MDcsIDB4RDAsIDB4QkYsIDB4NDAsIDB4MzQsIDB4MDEsIDB4RjcsIDB4MDMsIDB4QzQsIDB4MkYsCisweDEwLCAweDA5LCAweDQwLCAweDBELCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLAorMHgzMywgMHgwMCwgMHgwRCwgMHgwMywgMHg1NCwgMHgwMCwgMHg5MCwgMHgwQywgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwKKzB4MDQsIDB4ODMsIDB4MTAsIDB4MDEsIDB4NjAsIDB4MzAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4NEMsCisweDQwLCAweDMyLCAweDA2LCAweDg5LCAweDAwLCAweDA1LCAweDIzLCAweEQyLCAweDBDLCAweDQ4LCAweDAwLCAweDIwLCAweENELAorMHgwNCwgMHgzNiwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMSwgMHhDRCwgMHgwMiwgMHgwNSwgMHgwMywgMHgxNCwKKzB4NDAsIDB4NDQsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsCisweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDQ2LCAweDk0LCAweDBELCAweDQwLCAweEU1LCAweDAwLCAweDlELCAweDIwLCAweDQ0LAorMHgwMywgMHgxMCwgMHgxOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg2NCwgMHgwMywgMHgxMSwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MjAsIDB4REMsIDB4MTAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4OEMsIDB4NDAsIDB4NDQsIDB4MDAsIDB4REMsIDB4MDAsCisweDU0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDQ5LAorMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwKKzB4MUYsIDB4MDEsIDB4N0MsIDB4MEMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4ODAsIDB4MEMsIDB4MDMsCisweEI0LCAweDM1LCAweEMwLCAweDM1LCAweDAwLCAweDlGLCAweDAxLCAweDZDLCAweDAzLCAweDM0LCAweDBELCAweEMyLCAweDM2LAorMHgyMCwgMHhEQiwgMHg4MCwgMHg1QywgMHgwMywgMHhFMCwgMHgxRCwgMHg4MCwgMHg0NCwgMHgwNCwgMHg5RiwgMHgwOCwgMHg3QywKKzB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MUQsIDB4QzAsCisweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweDJGLAorMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwRiwgMHhDMCwgMHgyRSwgMHgwMCwgMHg5RiwgMHgwMCwgMHhGRCwgMHgwMywgMHhCMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MkYsIDB4QzYsIDB4M0YsIDB4MDAsCisweDY5LCAweDA4LCAweEZDLCAweDAzLCAweEYwLCAweDFGLCAweEQwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDI3LAorMHhGMSwgMHgwRSwgMHhDNCwgMHgzRiwgMHgwMSwgMHhERiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgxNywgMHhDOCwgMHgxRiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDQsIDB4MUYsIDB4MjEsCisweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweEE3LCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweEMzLCAweDMwLCAweDI1LAorMHhDMCwgMHgzNCwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgxMywgMHhGMCwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5RiwKKzB4MjEsIDB4NkMsIDB4NDMsIDB4MzAsIDB4MEQsIDB4RDEsIDB4NDQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMyLCAweDM2LCAweDAwLCAweENGLCAweDA0LCAweDRDLCAweDEzLCAweEYwLCAweDBELCAweEMwLCAweDhCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhCNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHgzNCwKKzB4MTIsIDB4RDAsIDB4QkQsIDB4NDEsIDB4MjcsIDB4MDQsIDB4RDEsIDB4MDAsIDB4RDQsIDB4MTMsIDB4MTAsIDB4MEMsIDB4NDUsCisweDNDLCAweDAwLCAweDFELCAweDAwLCAweEU0LCAweDAzLCAweEQyLCAweDBELCAweDQwLCAweDNDLCAweDAwLCAweERELCAweDAwLAorMHhDNCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNCwgMHgwMCwgMHhEMSwgMHgyMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxRiwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4RkQsIDB4ODIsIDB4QzQsIDB4MEIsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NkYsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMwLCAweDAwLCAweDBELCAweDIwLCAweDM0LCAweDAwLAorMHhEMCwgMHgxRCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5NCwgMHg2MCwgMHgyNCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0MCwgMHgzMiwKKzB4MDAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsCisweDIzLCAweDUwLCAweDJDLCAweDQwLCAweDAzLCAweDg0LCAweEM1LCAweDEyLCAweDM0LCAweDAzLCAweEQwLCAweDlDLCAweDQwLAorMHgzMCwgMHgwMCwgMHhDOSwgMHg0OSwgMHgyNCwgMHgyNywgMHhEMCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MkQsIDB4MjEsIDB4QjQsIDB4MDcsIDB4RDAsCisweDlFLCAweDQwLCAweDZCLCAweDAyLCAweEE0LCAweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDFGLCAweDQwLCAweDdBLCAweDAwLAorMHhFRCwgMHg4MSwgMHhBNCwgMHgwNywgMHhEMCwgMHgxRiwgMHg2MCwgMHg3QSwgMHgwMCwgMHhDOSwgMHgwMywgMHg4NCwgMHgwNywKKzB4NTAsIDB4MUUsIDB4NDAsIDB4NEIsIDB4NTAsIDB4RTUsIDB4ODksIDB4QjQsIDB4MTcsIDB4RDEsIDB4MUMsIDB4NDAsIDB4NzgsCisweDAwLCAweEVELCAweDgxLCAweEE0LCAweDA3LCAweEQwLCAweDlFLCAweDQwLCAweDM3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwRiwgMHgwMCwgMHgzQywgMHgwMCwgMHhGMCwgMHg4QywKKzB4QzAsIDB4MzcsIDB4MDgsIDB4ODcsIDB4MDAsIDB4NkMsIDB4MTMsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzIsIDB4MDAsIDB4NEYsCisweDAyLCAweDNDLCAweDIzLCAweEYwLCAweDBDLCAweEMwLCAweDMyLCAweDAwLCAweENGLCAweDAwLCAweDJDLCAweDAzLCAweDcwLAorMHgwRCwgMHhDMCwgMHgwMywgMHgwMCwgMHhDNywgMHgwOCwgMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwKKzB4Q0IsIDB4MDAsIDB4MkMsIDB4MDMsIDB4RjAsIDB4ODQsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDNELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDhGLCAweEU4LAorMHgzRiwgMHg0MCwgMHhCQiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRCwgMHgwMiwgMHhGRiwgMHgwMCwKKzB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MjQsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4QjIsIDB4MEYsCisweEMwLCAweDA4LCAweDAyLCAweEZCLCAweDI4LCAweEZDLCAweDkzLCAweEYwLCAweDBGLCAweEQwLCAweDNELCAweDAwLCAweEZGLAorMHgwMCwgMHhERCwgMHgwMywgMHhGMiwgMHg4RiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QjAsIDB4MzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MUQsIDB4QzAsIDB4MzQsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAzLCAweDcwLCAweDA1LCAweEM0LCAweDc3LCAweDAxLCAweDlCLCAweDAwLCAweDdDLAorMHg0QiwgMHhFMCwgMHgxRCwgMHhDMiwgMHgzNSwgMHgwNSwgMHhDRCwgMHgwMSwgMHg0QywgMHgxQiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4REYsIDB4MDEsIDB4MUMsIDB4MDcsIDB4NzAsIDB4Q0QsIDB4QzAsIDB4MzcsIDB4MjAsIDB4REYsIDB4MEEsCisweDNDLCAweDRGLCAweDMwLCAweDA5LCAweEMwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHg4MCwgMHgzOSwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMywgMHg3MCwgMHgwRSwgMHg0MCwgMHgxQywgMHgwMCwKKzB4QTEsIDB4MDAsIDB4QUMsIDB4NTMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4QkIsIDB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNDLCAweDAxLCAweEUxLCAweDAwLCAweDg0LCAweDUzLCAweEQwLCAweDBFLCAweDQwLCAweDBCLAorMHgwMCwgMHhGRCwgMHgwMCwgMHg4QywgMHgwMywgMHgxMCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFNywgMHgxMCwgMHhCNCwKKzB4MTMsIDB4QjAsIDB4MDAsIDB4QzAsIDB4NEUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDAwLCAweDc5LCAweDAwLCAweDZELCAweDAxLCAweDk0LCAweDA2LCAweEQwLCAweDFFLCAweDQwLCAweDc4LCAweDBDLCAweEMxLAorMHgwMSwgMHgwNCwgMHgyNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3MywgMHgwMSwgMHhFMSwgMHgwMSwgMHhCNCwgMHgyNywgMHg1MCwKKzB4M0UsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODUsIDB4MjcsIDB4RDAsIDB4MUUsIDB4NDMsIDB4NEIsIDB4MDAsCisweEVELCAweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDVFLCAweDQwLCAweDZCLCAweDAwLCAweEU1LCAweDI1LCAweEI2LCAweDM3LAorMHgxMCwgMHgxQSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4NEIsIDB4NTAsIDB4MEMsIDB4NjAsIDB4NzAsIDB4MDEsIDB4QzEsIDB4MDEsCisweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQxLCAweDMzLCAweDgwLCAweEMxLCAweDEwLCAweDM0LCAweDAzLCAweEQwLCAweDE4LAorMHg0MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHhGMywgMHgwMCwgMHhDRCwKKzB4MDEsIDB4MDQsIDB4MDYsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MTAsIDB4QzUsIDB4ODAsIDB4MzYsIDB4MDMsIDB4OTAsCisweDQxLCAweDQwLCAweDRBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE1LAorMHgwMCwgMHg3RiwgMHgwNSwgMHhGQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhEMCwgMHgxQywgMHgwMCwgMHg1MywgMHg0MSwgMHg0QywKKzB4MDEsIDB4NzAsIDB4MjcsIDB4QzAsIDB4MTcsIDB4NDAsIDB4NzMsIDB4QzIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE3LCAweDEwLCAweDdGLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDE1LCAweEMwLCAweDVGLCAweDAxLCAweDVGLCAweDAxLAorMHg1RCwgMHgxNSwgMHg3MCwgMHgwNCwgMHhDMiwgMHg1NywgMHgwMSwgMHg0NywgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgxNywKKzB4QzEsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4ODUsIDB4MDAsCisweDFGLCAweDAxLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDFGLCAweDA4LCAweDNDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MUYsIDB4MDgsIDB4NUMsCisweDAwLCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEM4LAorMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDUsIDB4NEMsIDB4MDIsIDB4MzYsIDB4MDksIDB4QzAsIDB4QTMsIDB4NDAsIDB4ODMsIDB4MDUsIDB4NEMsIDB4MDYsIDB4QjAsCisweDA4LCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5QiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNCwgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUMsIDB4MDAsIDB4NDgsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4NDAsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDY0LCAweDAwLCAweDlELCAweDAwLAorMHg0NCwgMHgwMiwgMHgxMCwgMHgxOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgwMSwgMHg3QywgMHgyQSwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4RTAsIDB4MjcsIDB4MDAsIDB4OTEsCisweDEwLCAweDc0LCAweDFFLCAweEQxLCAweDk5LCAweDQwLCAweEE0LCAweDAwLCAweDlELCAweDQyLCAweDVDLCAweDAyLCAweEQwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5NSwgMHg4MCwgMHg1NCwgMHgxQSwgMHhEMCwgMHgwOSwgMHhDMCwgMHgwNiwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MDQsCisweDAyLCAweDE4LCAweDQ5LCAweDQwLCAweDI3LCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDFELCAweDQwLAorMHgyNiwgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg2MCwgMHgyMywgMHgwMCwgMHg5OSwgMHgwMSwKKzB4NzQsIDB4MTIsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDQsIDB4NzQsIDB4MDIsIDB4NTAsIDB4ODksCisweDQwLCAweDI0LCAweDAwLCAweDk1LCAweDE4LCAweDU0LCAweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MTQsIDB4MTMsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsCisweDAxLCAweDhELCAweDA0LCAweDM2LCAweDE2LCAweEQxLCAweDA4LCAweDQyLCAweDIxLCAweDAxLCAweDgxLCAweDA0LCAweDM0LAorMHgxMiwgMHhEOCwgMHgwOCwgMHg0MCwgMHg2MSwgMHg4MCwgMHg4RCwgMHgwMSwgMHgxNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4MjIsIDB4MzAsIDB4ODUsIDB4NDQsIDB4MTYsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NDIsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEEwLCAweDk2LCAweDAyLCAweDFGLCAweDBBLCAweDRELCAweDI4LCAweDMwLAorMHhBMCwgMHhDMCwgMHg4NywgMHgwMiwgMHgxMywgMHgwQSwgMHg0NCwgMHgyOCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwKKzB4MTcsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4QTAsIDB4NDAsIDB4ODcsIDB4MDIsIDB4MUIsIDB4MDAsIDB4NzQsIDB4MDAsCisweEYwLCAweEExLCAweEM4LCAweDA1LCAweDAwLCAweDFGLCAweDBBLCAweDc0LCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg0LAorMHgwMCwgMHgxNywgMHgwMCwgMHg1QywgMHgwMCwgMHhGMiwgMHgyMSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4ODgsIDB4MjcsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDQ4LCAweDdDLCAweDIyLCAweEYwLCAweDhCLCAweEM0LCAweDI3LCAweDAyLCAweEJGLAorMHgwMCwgMHg3QywgMHg2MiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMiwgMHhCRiwgMHgwOCwgMHg3QywgMHgyMiwgMHhGMCwKKzB4MEIsIDB4RDgsIDB4MkUsIDB4MDAsIDB4QkYsIDB4NDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzIsIDB4MkYsIDB4MDQsCisweDkzLCAweDA4LCAweDdDLCAweDIyLCAweEYyLCAweDhCLCAweEMxLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwQywgMHhDQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwKKzB4MkMsIDB4MDIsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NTIsIDB4MzQsIDB4NEYsIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweEY4LCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDI1LCAweEJGLCAweDA0LCAweEQ0LCAweDAyLCAweDcwLCAweDBBLAorMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHg0QiwgMHhDMCwgMHgyNywgMHgwMCwgMHhBMywKKzB4ODAsIDB4QkMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NjEsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDBELCAweDJDLCAweDQ0LCAweDQxLCAweDEwLCAweDAxLCAweDQxLCAweDE0LAorMHgwMiwgMHgwMSwgMHgxNCwgMHg3NCwgMHgxMCwgMHgxMywgMHg4MSwgMHg0MCwgMHg4NywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwKKzB4MjAsIDB4RDAsIDB4NDEsIDB4NDEsIDB4MDYsIDB4MDEsIDB4MUQsIDB4MDgsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MDEsIDB4NDEsCisweDA0LCAweDAwLCAweDFELCAweDE0LCAweDc0LCAweDAwLCAweEMwLCAweDgxLCAweDQ0LCAweDQ3LCAweDA1LCAweDFCLCAweDAwLAorMHg3NCwgMHgyMCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg3MSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MjAsIDB4MjEsIDB4MDUsIDB4OEQsIDB4MDQsIDB4MDUsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4NDAsCisweDgxLCAweDA0LCAweDM0LCAweDUyLCAweDEwLCAweDA4LCAweDQ4LCAweDIyLCAweDAyLCAweDg4LCAweDA4LCAweDM0LCAweDAyLAorMHhEMCwgMHg0OCwgMHg0MCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwMSwgMHgxNCwgMHgyMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg2MSwKKzB4MDAsIDB4OEQsIDB4MDQsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDgsIDB4MzQsCisweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDRCLCAweDg4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgyOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg2MCwgMHgyNCwgMHgwMSwgMHhEMSwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MEEsIDB4NzQsIDB4MDIsIDB4RDAsCisweDE5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDA4LCAweDQ0LCAweDAyLCAweDkwLCAweDA4LCAweDUwLCAweDI1LCAweDAxLAorMHg5RCwgMHgwMSwgMHg3NCwgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5OCwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsCisweDI1LCAweDAwLCAweDlGLCAweDAyLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEQwLCAweEU0LCAweDA4LCAweDkzLCAweDAxLAorMHg3QywgMHgwMiwgMHgzNCwgMHg2OSwgMHhDOCwgMHgyNiwgMHgwMCwgMHg5QiwgMHgwMywgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4Q0MsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUUsCisweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkwLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsCisweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDgyLCAweEYwLCAweDA5LCAweEM4LAorMHgyNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHg0MiwgMHg3MCwgMHg0OSwgMHhDMCwgMHgyNiwgMHgwOCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsCisweEMwLCAweDU5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAxLAorMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHg4NCwgMHg0MCwgMHgxMywgMHgxMCwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MDEsIDB4RTAsIDB4MDcsCisweDAwLCAweDFGLCAweDAwLCAweDNDLCAweDAwLCAweEIwLCAweDExLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4NTEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NUMsIDB4MDAsIDB4NUQsCisweDgwLCAweDQ0LCAweDA1LCAweDMwLCAweDA3LCAweDQwLCAweDU0LCAweDQwLCAweDcxLCAweDA1LCAweEM2LCAweDI5LCAweDEwLAorMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHhGNCwgMHgwOSwgMHhEMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwKKzB4N0QsIDB4MEEsIDB4RjQsIDB4MDEsIDB4NzAsIDB4MTcsIDB4NDAsIDB4OUMsIDB4MDAsIDB4N0QsIDB4MTAsIDB4NUMsIDB4MDEsCisweEQwLCAweDE3LCAweDQwLCAweDE3LCAweDAwLCAweDcxLCAweDA3LCAweEM0LCAweDE5LCAweDUwLCAweDA1LCAweDQ4LCAweDUwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHg3MiwgMHgwMiwgMHhERCwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4NTAsIDB4MTUsIDB4NDksIDB4NzYsIDB4MjAsIDB4QzEsIDB4MDIsIDB4MjQsIDB4MEYsIDB4MTAsIDB4MEMsCisweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDM3LCAweEQwLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwQiwgMHgzNCwgMHgwNywgMHg1MCwgMHg5QywgMHg0MiwgMHhBMCwgMHgwNCwgMHhDRCwgMHgwNSwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MUMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NTEsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDE4LCAweDAwLCAweEVELCAweDAwLCAweDg0LAorMHgwQSwgMHgxMCwgMHgyQSwgMHg0MCwgMHgzMiwgMHgyNCwgMHhFMSwgMHgwMSwgMHhBNCwgMHgwQSwgMHgxMCwgMHgyRSwgMHg0OCwKKzB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4ODMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDAsCisweEI0LCAweDA5LCAweDQwLCAweDBGLCAweDQwLCAweDE4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLAorMHg0OSwgMHgzQiwgMHgwMCwgMHgyNSwgMHgwMCwgMHg4NCwgMHgwNCwgMHg1MCwgMHgwRSwgMHg0OCwgMHgxMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NjksIDB4MDAsIDB4RUYsIDB4MDEsIDB4Q0MsIDB4MDcsCisweDcwLCAweDFGLCAweEQwLCAweDdBLCAweDAwLCAweEEzLCAweDAxLCAweEU0LCAweDA3LCAweDM0LCAweDFBLCAweEMwLCAweDdCLAorMHgwMCwgMHhFRCwgMHgwMSwgMHhCQywgMHgwNSwgMHhGMCwgMHg3RSwgMHg0MSwgMHg3QiwgMHgwNSwgMHhBRiwgMHgwMSwgMHhCOCwKKzB4MDUsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NDgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsCisweDdGLCAweDAwLCAweEE1LCAweDAwLCAweDhDLCAweDA2LCAweDMwLCAweDFGLCAweEMwLCAweDUxLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCMCwgMHgwRCwgMHgwMCwgMHg5RiwgMHgwMiwgMHg3RCwgMHgxQSwgMHg3NCwKKzB4NkIsIDB4QzAsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUQsIDB4MUEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDgxLAorMHg3MCwgMHgwRCwgMHhEMCwgMHgxNywgMHgwOCwgMHhERiwgMHgwMCwgMHg1QywgMHg4MiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REEsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDRELCAweDAwLCAweEY3LCAweDAzLCAweENDLCAweDFCLCAweDcwLCAweDNGLAorMHhDMCwgMHg3QywgMHgwMCwgMHg3MywgMHgwMSwgMHhDRCwgMHgwRiwgMHgzMCwgMHgxQiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDQsIDB4QjMsIDB4MDEsIDB4Q0MsIDB4ODUsIDB4RjAsCisweDFGLCAweEMwLCAweDRDLCAweDIwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDE3LCAweEMwLCAweDdGLCAweDAwLAorMHgyMywgMHgwMSwgMHhDQywgMHgwNSwgMHhGMCwgMHgxRiwgMHhDMCwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MEQsIDB4MDAsIDB4RjEsIDB4MDgsIDB4ODQsIDB4QzMsIDB4MTgsIDB4MEIsIDB4NDAsCisweDI4LCAweDAwLCAweDcxLCAweDAwLCAweEM0LCAweDIyLCAweDEwLCAweDBBLCAweDQwLCAweDNCLCAweDAwLCAweEUxLCAweDAwLAorMHhCNCwgMHgyMywgMHgxMCwgMHgwRSwgMHhDMCwgMHgzOSwgMHgwMiwgMHhFMSwgMHgwMiwgMHg4NCwgMHgwMCwgMHg3MCwgMHgwNywKKzB4NDAsIDB4MTgsIDB4MjAsIDB4RUQsIDB4ODAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MjUsCisweDBBLCAweEFDLCAweDI4LCAweEQwLCAweDBFLCAweEMwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhDNCwgMHgyMywgMHg1MCwgMHgwQSwgMHg1MCwgMHgyOCwKKzB4MDAsIDB4MjUsIDB4MDgsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RTEsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDMzLCAweDAwLCAweDQxLCAweDAwLCAweEE0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLAorMHg4OCwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwMiwgMHg0MCwgMHgzRiwgMHgwMCwgMHhBMSwgMHgwMCwKKzB4OTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDI4LCAweDAxLCAweDAwLCAweDg5LCAweDAwLCAweDQ0LCAweDBCLCAweDEwLCAweDA4LCAweDQwLCAweEU0LCAweDAxLAorMHgwNSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgyOCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMSwgMHgzNCwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NjgsIDB4MzEsIDB4MDAsIDB4NDEsIDB4NTIsIDB4MjQsIDB4MDAsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NTAsCisweDAwLCAweERELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDAwLCAweDQwLCAweDczLCAweDAyLCAweDg1LCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgxOSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTAsIDB4MjUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEQsIDB4MEIsIDB4NTAsIDB4MDUsIDB4QzAsIDB4NzQsIDB4NDAsIDB4MTcsCisweDAwLCAweDQ0LCAweDAzLCAweDM0LCAweDBDLCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDA2LCAweDdDLCAweDAyLCAweDMwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhEMywgMHgwMiwgMHg2QywgMHgwMSwgMHhGMCwgMHgxRCwgMHhDMCwgMHg0NCwgMHgwMCwKKzB4REYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NUMsIDB4MDAsCisweEYwLCAweDJGLCAweEMwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LAorMHg4NywgMHgwMCwgMHhENywgMHgxMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMiwgMHgxQSwgMHgwMiwKKzB4N0MsIDB4MDIsIDB4RjEsIDB4MDksIDB4QzEsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MUQsCisweEMwLCAweDM3LCAweDIwLCAweDFGLCAweDAzLCAweDVDLCAweDAxLCAweDcwLCAweDhELCAweEMwLCAweDA3LCAweDI4LCAweERGLAorMHgwMiwgMHg3QywgMHgwNiwgMHhGMCwgMHgwNSwgMHhDQSwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMiwgMHgyQywgMHgwQSwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MEYsCisweDAwLCAweEZGLCAweDAwLCAweENDLCAweDQzLCAweDMwLCAweDBGLCAweEMwLCAweDc0LCAweDAxLCAweDIzLCAweDAxLCAweEM0LAorMHgwMywgMHgzMCwgMHgwQiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMCwgMHgzMCwgMHgwRiwgMHhDMCwKKzB4M0IsIDB4MDAsIDB4QjMsIDB4MDAsIDB4OEUsIDB4MDAsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MEQsIDB4MDAsIDB4N0IsIDB4MDAsCisweENDLCAweDAzLCAweDMwLCAweDA3LCAweEMwLCAweDNGLCAweDEwLCAweDdGLCAweDAwLCAweENDLCAweDBDLCAweDMwLCAweDBGLAorMHhDMSwgMHgwMywgMHgyQSwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhDNiwgMHgyNCwKKzB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MTksIDB4QzAsIDB4MzYsIDB4NDAsIDB4MTEsIDB4MDMsIDB4NTQsIDB4MEUsCisweDUwLCAweDA5LCAweDUwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDRDLCAweDEwLCAweDBELCAweDQwLCAweDM3LAorMHgwMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwQywgMHg1MSwgMHgwOSwgMHg0MCwgMHhDMCwgMHgwMCwgMHhEQiwgMHgwMywgMHgwNCwKKzB4MDcsIDB4MTAsIDB4MTUsIDB4QzAsIDB4MzUsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4NTQsIDB4MDYsIDB4MTAsIDB4MEQsIDB4NDAsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ2LCAweDgwLCAweERELAorMHgwMCwgMHg0NCwgMHgwMywgMHg5MCwgMHgxOCwgMHg0MCwgMHgyNSwgMHgwMCwgMHg1MSwgMHg4OCwgMHg1NCwgMHgwNywgMHgxMCwKKzB4ODksIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsCisweDkxLCAweDAwLCAweDQ2LCAweDQ1LCAweDkwLCAweDFDLCAweDQwLCAweDQ0LCAweDQ0LCAweEQ5LCAweDAzLCAweDQ0LCAweDEyLAorMHgxMCwgMHgxMSwgMHg2MCwgMHgzNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwgMHgwMSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNywKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4REQsIDB4MDAsCisweDA0LCAweDAzLCAweDkwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDQxLCAweDAwLCAweDE0LCAweDAyLCAweDE0LCAweDA4LAorMHg0OCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgyMCwgMHg0MSwKKzB4MDAsIDB4MTYsIDB4MDAsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MDAsIDB4NDAsIDB4QzksIDB4ODAsIDB4NDUsIDB4MDIsIDB4MTQsCisweDEwLCAweDYwLCAweDMxLCAweDAwLCAweDRELCAweDAwLCAweDE0LCAweDAxLCAweDEwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDRCwKKzB4MDMsIDB4MzQsIDB4MEIsIDB4QzAsIDB4MjUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4REMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDM0LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAyLCAweDExLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDUzLCAweDAwLAorMHg0NCwgMHgwMCwgMHhCMCwgMHgwRCwgMHhDOCwgMHgwNSwgMHg0MCwgMHg5QiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDMsIDB4NDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEJDLCAweDAzLAorMHg3MCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAwLCAweDcwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEY0LCAweDAzLCAweEYxLCAweDAzLCAweENBLAorMHgzOSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4NTMsIDB4RjAsCisweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEFGLCAweDAxLCAweEZDLCAweDg3LCAweEYwLCAweDFGLCAweEQwLCAweDBDLCAweDAwLAorMHhGRiwgMHgwMSwgMHhDQywgMHgwMywgMHhGMCwgMHg0RiwgMHhDMCwgMHgwRCwgMHgwMiwgMHhCMywgMHgwMSwgMHhFQywgMHgwNywKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDUsIDB4QjQsIDB4MUEsIDB4QzAsIDB4N0IsCisweDAwLCAweDMzLCAweDA0LCAweEJDLCAweDAyLCAweDIwLCAweDBCLCAweEM4LCAweDBDLCAweDA4LCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHgxRCwgMHgwMCwgMHhGNCwgMHgwQiwgMHhEMCwgMHgxMSwKKzB4NDAsIDB4NDcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjAsIDB4MDEsIDB4Q0MsCisweDEwLCAweEM0LCAweDJCLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDAwLCAweEQxLCAweDAxLCAweDQ0LCAweDAzLCAweEQwLAorMHgxMSwgMHg0MiwgMHgwNywgMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwNywgMHgxMiwgMHgxOSwgMHg0MCwgMHg1NywgMHgyMCwKKzB4MTUsIDB4ODMsIDB4NzQsIDB4MDYsIDB4NTEsIDB4MDEsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweEEwLCAweDAzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLAorMHgwMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMCwgMHgwNCwgMHhDRCwgMHgwNCwKKzB4MDUsIDB4MDMsIDB4RDIsIDB4OEMsIDB4NDIsIDB4MjMsIDB4MDgsIDB4RDEsIDB4ODAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDYzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDgxLCAweDEwLCAweDBDLCAweDQwLCAweDI3LCAweDAwLCAweDgxLAorMHgwOCwgMHgzNCwgMHgwMiwgMHgxOSwgMHgwOCwgMHg0MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTgsIDB4NjUsIDB4MDAsIDB4MUQsIDB4MjEsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NDAsIDB4NDcsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweEU0LCAweDAwLCAweENELCAweDIwLCAweDQ0LAorMHgwMywgMHhEMSwgMHgwRCwgMHg0MCwgMHg2MywgMHgwMCwgMHhEMSwgMHgwMywgMHg1NCwgMHgwMywgMHg5MCwgMHgxOSwgMHg0MCwKKzB4NjcsIDB4MTAsIDB4REQsIDB4MDQsIDB4NzQsIDB4MDYsIDB4MTEsIDB4MUQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTUsIDB4OTAsCisweDc0LCAweDA2LCAweDU4LCAweDE5LCAweDQyLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMCwgMHhFNywgMHgwMCwgMHg5RiwgMHgxMSwgMHg1QywgMHgwMywgMHhGMSwgMHgxOSwgMHhDMCwgMHg2NywgMHgwNCwKKzB4REYsIDB4MDUsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QzQsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDQ1LCAweDQwLCAweEMzLCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDM5LCAweEMxLCAweDY3LAorMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwRCwgMHhCOCwgMHgzOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg1MywgMHgwMiwgMHg3QywKKzB4MDQsIDB4MzAsIDB4MTEsIDB4QzAsIDB4ODAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweDg4LCAweDJELCAweDAwLCAweEJGLCAweDgwLCAweDdDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg4RiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMiwgMHhGQywgMHgwMywgMHhGMiwKKzB4MEYsIDB4RTAsIDB4MjcsIDB4ODAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MEYsIDB4MDAsCisweEZGLCAweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDdGLCAweDAxLCAweDNGLCAweDA0LCAweEJDLCAweDAyLAorMHhGMCwgMHgwMSwgMHhDMSwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwKKzB4MDUsIDB4MDIsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MjksIDB4QzAsIDB4QTcsIDB4MDAsIDB4REYsIDB4MEEsCisweDZDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweEQzLCAweDA0LCAweDRDLCAweDEzLCAweEYyLCAweDhELAorMHhDMiwgMHhBNywgMHgwMCwgMHhENywgMHgwMywgMHg0QywgMHg0NywgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNCwgMHgwNCwgMHhEQiwKKzB4MDQsIDB4NEMsIDB4MTksIDB4NzAsIDB4MkQsIDB4QzUsIDB4MzQsIDB4MDAsIDB4NTcsIDB4MDIsIDB4N0MsIDB4NjAsIDB4NzQsCisweDAxLCAweEMwLCAweDI4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LAorMHgwMCwgMHg5RCwgMHgxOCwgMHhGNCwgMHgyQiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwKKzB4MDMsIDB4RDAsIDB4OEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDEsIDB4MDIsIDB4QzQsIDB4NEIsIDB4RDAsIDB4MkYsIDB4NDAsCisweDI3LCAweDAwLCAweEQxLCAweDgwLCAweDUwLCAweDBCLCAweEYwLCAweDQ5LCAweDAwLCAweDg1LCAweDAwLCAweERELCAweDQxLAorMHg2QywgMHg0RiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMiwgMHg1QiwgMHgwMCwgMHg3MCwgMHgwQSwgMHgxMCwgMHgyMSwKKzB4QzAsIDB4NEUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MDAsIDB4MDQsCisweDBELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDAwLCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAxLCAweDI0LCAweDAzLAorMHg1MCwgMHgzRCwgMHg0MCwgMHgwMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHg0QywgMHg0MCwgMHgwMiwKKzB4MDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4OEIsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4Q0QsIDB4MDIsIDB4MDQsCisweDBCLCAweDUwLCAweDI4LCAweDQwLCAweDMyLCAweDAwLCAweDBELCAweDA3LCAweDM0LCAweDA0LCAweEQ0LCAweDE5LCAweDQwLAorMHgwQywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg2RCwKKzB4MDEsIDB4QjQsIDB4MjcsIDB4MTQsIDB4MTYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RkQsIDB4MDEsIDB4ODQsIDB4ODcsIDB4RDAsCisweDFFLCAweDQwLCAweDdCLCAweDEwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQ4LCAweDZCLCAweDUwLAorMHhGOSwgMHgwMSwgMHg5NCwgMHg4NywgMHg1OCwgMHgxNiwgMHg1MCwgMHg0OCwgMHgwMiwgMHhGRCwgMHgxMSwgMHhFNCwgMHgxNywKKzB4MTAsIDB4MEYsIDB4NDAsIDB4N0UsIDB4OEMsIDB4QTksIDB4MDEsIDB4QjQsIDB4MjQsIDB4OTAsIDB4MTIsIDB4NDgsIDB4M0UsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDFBLCAweDkwLCAweDAwLCAweENGLCAweDAwLAorMHgzQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMywgMHg3MCwgMHgwQywKKzB4QzEsIDB4MDMsIDB4NDAsIDB4QzUsIDB4MDAsIDB4MEMsIDB4MjMsIDB4RjAsIDB4MEMsIDB4NDAsIDB4MTIsIDB4MDIsIDB4RDcsCisweDAwLCAweDBDLCAweDAzLCAweEQwLCAweDgwLCAweEMwLCAweDMwLCAweDAyLCAweENGLCAweDAwLCAweDA0LCAweDAzLCAweDcwLAorMHg4QywgMHhDMCwgMHgzMiwgMHgwMCwgMHhDRiwgMHgxMCwgMHgzQywgMHgyMiwgMHhGNCwgMHg4OCwgMHhDOSwgMHg0OCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MUQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDhGLCAweEMwLCAweDNGLCAweDEwLCAweEZGLCAweDA4LCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgxNywgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg4RiwgMHhDOCwgMHgxRiwgMHgwOCwgMHhGNywgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTMsIDB4RjAsIDB4NEYsCisweEUwLCAweDNELCAweDAwLCAweEZFLCAweDA4LCAweEZDLCAweDIzLCAweDc0LCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwOCwgMHg1RiwgMHgwMSwgMHg0QywgMHgwMywKKzB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MTcsCisweDAwLCAweEQ3LCAweDAwLCAweDVDLCAweDFCLCAweEYwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHg3MCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHhDMywgMHgwMCwgMHgyQywgMHgwMywgMHhCMCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4NEMsIDB4ODAsIDB4MjAsIDB4MDksIDB4QzIsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgyLCAweDM5LCAweDAwLCAweDZELCAweDAwLCAweEM0LCAweDJCLCAweDEwLAorMHgwRSwgMHg0MCwgMHgxQiwgMHgwMCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MzMsIDB4RDAsIDB4MkUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUYsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDIwLCAweEUxLCAweDAwLCAweDg0LCAweDAzLCAweDUwLCAweDBFLCAweDAwLCAweDNCLAorMHgwMCwgMHg4RCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhCMCwgMHgwMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4Q0QsIDB4MDMsIDB4QTUsIDB4MTcsIDB4NTAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweEVELCAweDExLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQxLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHg5NiwgMHgyNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHg4OCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwKKzB4MzYsIDB4NDAsIDB4NzMsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QTQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsCisweEVELCAweDExLCAweDE0LCAweDQ0LCAweDE5LCAweDNFLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMSwgMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4NDksIDB4MDUsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MTgsIDB4NDAsIDB4RjMsIDB4MDAsIDB4OEQsIDB4MDEsCisweDc0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDczLCAweDAyLCAweDQ1LCAweDFBLCAweDM0LCAweDAzLCAweEQwLCAweDVDLAorMHg0MCwgMHg3NywgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwNywgMHg1MCwgMHgyQywgMHg2MCwgMHhCMywgMHgwMCwgMHhDRCwKKzB4NDcsIDB4MTQsIDB4MDcsIDB4OTAsIDB4MUMsIDB4NDAsIDB4NUIsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEEwLCAweDFELCAweDAwLCAweDdGLCAweDAyLCAweDZDLCAweDAxLCAweDcwLCAweDI3LCAweEMwLCAweDlGLAorMHgwMCwgMHg3RiwgMHgwMSwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxRiwgMHgwMCwgMHg1RiwgMHgwMSwgMHg1QywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4REYsIDB4MDAsIDB4N0QsIDB4MDIsIDB4N0MsIDB4ODEsIDB4RjEsIDB4MzcsIDB4QzAsCisweERGLCAweDQwLCAweDQzLCAweDAwLCAweEVDLCAweDAxLCAweEIwLCAweDI3LCAweEMwLCAweDFCLCAweDAxLCAweDdGLCAweDIzLAorMHg5RCwgMHhBNSwgMHgyMCwgMHhCNywgMHhDMCwgMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDgsIDB4NDUsIDB4MDIsIDB4MUYsIDB4MDIsIDB4MUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDFELCAweDIwLCAweDdDLCAweDAwLCAweEYyLCAweDIxLCAweEM4LCAweDA3LCAweDA2LCAweDFGLCAweDBBLCAweDdDLCAweDAwLAorMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxRiwgMHg4MCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywKKzB4MDYsIDB4MUYsIDB4NDIsIDB4N0MsIDB4MjgsIDB4QjAsIDB4NDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4NjQsCisweDg4LCAweEYwLCAweDIxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgxOSwgMHg3QywgMHgwNiwgMHgzMCwgMHgwOCwgMHhDNSwgMHgyNCwgMHgwNCwgMHg5RiwKKzB4MDgsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUIsIDB4MDEsIDB4N0MsIDB4MDIsIDB4MzAsCisweDA5LCAweEMyLCAweDIzLCAweDgwLCAweDkzLCAweDA0LCAweDRDLCAweDAyLCAweEYwLCAweDU5LCAweEMwLCAweDI3LCAweDAwLAorMHg5MywgMHgwMywgMHg1QywgMHgwMiwgMHg3MSwgMHg1OSwgMHhDMCwgMHhBNywgMHg0MCwgMHg4MywgMHgwMCwgMHg0QywgMHgyMiwKKzB4MzAsIDB4MjgsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsCisweDY0LCAweDAwLCAweDlELCAweDEyLCAweDc0LCAweDBBLCAweDE0LCAweDA5LCAweDUwLCAweDI0LCAweDAwLCAweDk3LCAweDAxLAorMHg3NCwgMHgwMiwgMHhEOCwgMHg0OSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgxMSwgMHg3NCwgMHgwQSwgMHg1MCwgMHgyOSwKKzB4NDAsIDB4MjcsIDB4QzAsIDB4OEIsIDB4MDEsIDB4NDQsIDB4NEEsIDB4RDAsIDB4MDksIDB4NDQsIDB4RTcsIDB4NDAsIDB4OTEsCisweDg2LCAweDAwLCAweDEyLCAweDIwLCAweDE5LCAweDQwLCAweEU3LCAweDEwLCAweDkxLCAweDAxLCAweDQ0LCAweDA2LCAweDE0LAorMHgzOSwgMHg0MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MCwgMHgyNCwKKzB4MjUsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NjIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDA4LCAweDc0LCAweDBBLCAweDEwLCAweDA5LCAweDQwLAorMHgzNywgMHgwOCwgMHg5MSwgMHgwMCwgMHg0NCwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMSwgMHg5OSwgMHgwMCwKKzB4NTAsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4OTksIDB4MDQsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsCisweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDIwLCAweDA1LAorMHg4RCwgMHgxNCwgMHgzNiwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDgsIDB4NzQsIDB4MTIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAxLCAweDkxLCAweDAwLCAweDA0LCAweDAyLCAweEQyLCAweDQ4LCAweDQwLCAweDMzLCAweDAxLCAweDg5LCAweDAwLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgwOCwgMHg0NCwgMHgzMywgMHgwMCwgMHg4OSwgMHgwMSwgMHgwNSwgMHg5MywgMHgxMCwgMHg0OCwgMHg1MCwKKzB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDYsIDB4MDEsIDB4MUYsCisweDA0LCAweDdDLCAweDI4LCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEQwLAorMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxMywgMHgwMiwgMHg3QywgMHgyOCwgMHgzMCwgMHhFNSwgMHhDNSwgMHg4NywgMHgwMiwKKzB4MTEsIDB4MDAsIDB4NEMsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MjIsIDB4MUIsIDB4MDAsIDB4NUMsIDB4MDAsCisweDcyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDE0LCAweDRDLCAweDAwLCAweDMwLCAweEExLCAweEMwLCAweDc0LAorMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgyRiwgMHgwNSwgMHhCRiwgMHgxNCwKKzB4NzQsIDB4QTIsIDB4RjIsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MjIsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEIsCisweEMwLCAweDJGLCAweDBBLCAweEI3LCAweDA0LCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLAorMHgwMCwgMHg3RCwgMHgwMiwgMHhGMCwgMHg4RiwgMHgwMCwgMHgyRiwgMHgwMiwgMHhCNywgMHg4MCwgMHhGQywgMHgwMiwgMHg3MCwKKzB4MEIsIDB4QzAsIDB4MkYsIDB4MDgsIDB4RjcsIDB4MDAsIDB4RkQsIDB4MjMsIDB4RjAsIDB4OEIsIDB4QzIsIDB4NzcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDA1LCAweEJGLCAweDBDLCAweEZDLAorMHg4MiwgMHgzMiwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4QSwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4MzAsIDB4NEIsIDB4QzAsIDB4MjYsIDB4MDUsIDB4QkYsIDB4MDAsCisweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEUwLCAweDJGLCAweDAyLCAweEZGLCAweDAwLCAweENELCAweDAyLCAweEIwLCAweDBGLAorMHhDMiwgMHgyRiwgMHg0OCwgMHhCMywgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDNCwgMHg3NCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MUQsIDB4MEMsIDB4NzQsIDB4NDgsCisweDEwLCAweDA1LCAweDQwLCAweDA0LCAweDAyLCAweDUxLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDQxLCAweDQ4LCAweDg0LAorMHgwNCwgMHgxRCwgMHgxMCwgMHg3NCwgMHgyMCwgMHgxNCwgMHg0MSwgMHg0MSwgMHgwNCwgMHgwMSwgMHg1NywgMHg4MCwgMHg3NCwKKzB4NDAsIDB4MTAsIDB4MDEsIDB4NjAsIDB4MDcsIDB4MDIsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsCisweDE3LCAweDUwLCAweDExLCAweDAwLCAweDQ1LCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDYyLCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwNSwgMHgzNiwgMHgzMiwgMHgxNCwKKzB4ODgsIDB4NDAsIDB4NjIsIDB4NjAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NTAsIDB4MjAsIDB4MDMsCisweDhELCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweENDLCAweDQwLCAweDIyLCAweDA1LCAweENELCAweDAwLCAweDM2LCAweDEzLAorMHgxMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5NCwgMHgxOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODUsIDB4NDAsIDB4MTQsIDB4MDIsIDB4RDIsIDB4MDgsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDA0LCAweDlELCAweDgwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg1MCwgMHgyNiwgMHgwMSwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTEsIDB4MDksIDB4NDAsIDB4NjQsIDB4MTAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsCisweDA5LCAweDQwLCAweEU3LCAweDEwLCAweDlELCAweDAwLCAweDY0LCAweDEyLCAweDEyLCAweDA5LCAweDQwLCAweDI3LCAweDA4LAorMHhENSwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHg2MiwgMHgyOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDY2LCAweDAwLCAweDkzLCAweDAzLCAweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweEE0LCAweDAwLCAweDlGLCAweDAxLAorMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHhBNiwgMHgwNCwgMHg5RiwgMHgwMywgMHg3NCwgMHgwMiwgMHgzNCwgMHgyOSwKKzB4NDAsIDB4QTcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4MkMsIDB4ODIsIDB4QjAsIDB4MjksIDB4QzAsIDB4QTMsIDB4MDAsIDB4OTcsCisweDAyLCAweDVDLCAweDA2LCAweEYwLCAweDI5LCAweEMwLCAweDE0LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNiwgMHgwOCwgMHg2NSwgMHgwQSwgMHg5RiwgMHgxNCwgMHg3QywgMHgwMiwgMHhGMiwgMHg0OCwgMHhDMCwgMHgyMSwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsCisweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDgwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDgyLAorMHgyNywgMHgwMCwgMHg5RiwgMHgxOCwgMHg1QywgMHgwMiwgMHhEMCwgMHg5OSwgMHhDMCwgMHhBNywgMHg2NCwgMHg5QiwgMHgwMCwKKzB4N0MsIDB4OEUsIDB4NzgsIDB4MzgsIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDg1LCAweDA0LCAweDFGLCAweDA4LCAweDdDLCAweDQwLCAweEYxLCAweDAxLCAweEMwLCAweDA3LCAweDgwLAorMHgxMywgMHgyMCwgMHg3QywgMHgwMCwgMHhGMiwgMHg0MSwgMHhEMCwgMHg4NCwgMHgwMCwgMHgxRiwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MzAsIDB4MDEsIDB4QzIsIDB4ODcsIDB4MDgsIDB4MUYsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RjIsIDB4MjEsIDB4RjAsIDB4MDQsCisweDBDLCAweDFCLCAweDgwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEM5LCAweDg3LCAweDAwLCAweDA3LCAweDgwLCAweDRELAorMHgwOCwgMHgzMiwgMHgwMSwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4REMsIDB4MjAsIDB4N0QsIDB4MDEsIDB4RjYsIDB4MUQsIDB4NzAsIDB4MDUsIDB4NjAsIDB4MTcsIDB4MDAsIDB4NTEsCisweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA3LCAweEMwLCAweDE2LCAweDAwLCAweDdELCAweDA1LCAweENELCAweDE5LCAweDMwLAorMHgyNywgMHg2MCwgMHgxNywgMHgyMCwgMHg1RCwgMHgwMCwgMHhGQywgMHhBOSwgMHg3MiwgMHg0NSwgMHg2MiwgMHgxQywgMHgxMSwKKzB4NzEsIDB4MjUsIDB4REMsIDB4OEQsIDB4MTQsIDB4MjcsIDB4QzAsIDB4OUQsIDB4MDEsIDB4NzEsIDB4ODksIDB4Q0MsIDB4MDEsCisweDEwLCAweDM3LCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHhGMiwgMHgwMiwgMHhDRCwgMHgwMiwgMHg3NCwgMHgwMywgMHg1MiwgMHgwQywgMHg0NCwgMHgzMywgMHgwMCwgMHg4MSwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MkQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MjQsIDB4MUYsIDB4MTAsIDB4MkMsCisweDQ5LCAweDMzLCAweDEwLCAweDhELCAweDAwLCAweDc0LCAweDAzLCAweDUxLCAweDE4LCAweDQwLCAweDMwLCAweDAwLCAweDQxLAorMHgwMSwgMHgzNCwgMHg0MCwgMHgxMCwgMHgwQywgMHg0MCwgMHhBMywgMHgyMCwgMHhDNSwgMHgwOSwgMHgyMCwgMHgwNywgMHgxMCwKKzB4MkMsIDB4NDEsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweDUwLCAweDBFLCAweDQwLCAweDMzLCAweDQwLCAweEUxLCAweDgwLCAweEI0LAorMHgwMywgMHhEOCwgMHgwRiwgMHg0MSwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0OCwKKzB4M0IsIDB4MDIsIDB4RUQsIDB4NDAsIDB4QjQsIDB4MDEsIDB4NTAsIDB4MUUsIDB4NDgsIDB4NTksIDB4MDAsIDB4NjEsIDB4ODEsCisweEQ0LCAweDQyLCAweDEwLCAweDA2LCAweDQwLCAweDJELCAweDAwLCAweDYxLCAweDAwLCAweDA0LCAweDQ2LCAweDEwLCAweDBFLAorMHg0MSwgMHgxMCwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwgMHgwMCwKKzB4NkYsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NzAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDgsIDB4RTEsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDFFLCAweDQwLCAweDc4LCAweDgxLCAweEJELCAweDAxLCAweEVDLCAweDA1LCAweDM0LCAweDFFLCAweDQwLCAweDdCLAorMHgwMiwgMHhFRiwgMHgwMSwgMHhCNCwgMHgwNywgMHg3MCwgMHgxRSwgMHg0MCwgMHg3QywgMHg0MCwgMHg2QiwgMHgwMCwgMHhCQywKKzB4MDYsIDB4MzAsIDB4MUEsIDB4QzAsIDB4NkIsIDB4MDAsIDB4RTcsIDB4MDEsIDB4QUMsIDB4MDcsIDB4MzQsIDB4MTcsIDB4QzAsCisweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHg4MSwgMHg3MCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4QjcsIDB4MDAsCisweERGLCAweDAwLCAweDVDLCAweDgzLCAweDcyLCAweDBDLCAweEUwLCAweDE2LCAweDA4LCAweERGLCAweDAwLCAweDNDLCAweDAyLAorMHhDNCwgMHgwMSwgMHhDMCwgMHgyMywgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywgMHg4MywgMHhGMCwgMHgwMSwgMHhEMCwgMHg0MywKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MzAsIDB4N0QsIDB4MDAsIDB4RjMsIDB4MDEsCisweENDLCAweDEzLCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAxLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwNCwgMHhGMywgMHgwMSwgMHhDQywgMHgxMywgMHgzMCwgMHgxNywgMHhDMCwgMHg3QywgMHgwMiwgMHhGRiwKKzB4ODksIDB4RkMsIDB4ODcsIDB4MzAsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4NzMsIDB4MDEsIDB4RkMsIDB4MjYsIDB4RjAsCisweDE3LCAweEM4LCAweDZCLCAweDIwLCAweEJCLCAweDAxLCAweEZDLCAweDA3LCAweEQwLCAweDEzLCAweEMwLCAweDFCLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzRCwgMHg1MCwgMHg3MSwgMHgyMCwgMHg4NCwKKzB4ODMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MkEsIDB4NDgsCisweDNGLCAweDAwLCAweDYxLCAweDAwLCAweEQ0LCAweDA4LCAweDExLCAweDBCLCAweEMwLCAweDM4LCAweDAwLCAweEU5LCAweDg4LAorMHhEQywgMHg4MiwgMHgxMCwgMHhDRSwgMHg0MCwgMHgzQiwgMHgwMSwgMHg2MSwgMHgwMCwgMHhCNCwgMHgzMiwgMHhEMCwgMHgwNiwKKzB4NDIsIDB4M0IsIDB4MTIsIDB4MjEsIDB4MzAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4NEEsIDB4NDIsIDB4NTcsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDIwLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwOSwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4NiwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4QjEsIDB4MDAsIDB4QTQsIDB4MjEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MjAsIDB4RUQsIDB4MDgsIDB4QjYsCisweDAzLCAweDEwLCAweDBFLCAweDQ5LCAweDJCLCAweDAwLCAweDYxLCAweDEwLCAweEI0LCAweDAyLCAweEQxLCAweDAyLCAweDQwLAorMHgyRiwgMHgwMCwgMHgyOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0NCwgMHgyMywgMHgwMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4RTEsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDQsIDB4MDAsIDB4RDAsCisweDBDLCAweDQwLCAweDczLCAweDAwLCAweENELCAweDAzLCAweDM0LCAweDAzLCAweEQxLCAweDAwLCAweDQ0LCAweDMzLCAweDAwLAorMHgxMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg1MCwgMHhCNiwgMHgxMCwgMHhDRCwgMHgwMywgMHgzNCwgMHgwMiwKKzB4MTQsIDB4M0MsIDB4NDAsIDB4QTMsIDB4NDAsIDB4NDEsIDB4MDEsIDB4MzQsIDB4NEEsIDB4RDAsIDB4MjAsIDB4NDAsIDB4MjMsCisweDAyLCAweDAxLCAweDAzLCAweDM0LCAweDZGLCAweEQwLCAweDExLCAweDQxLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHhDNSwgMHgwMCwgMHg5MywgMHgwNCwgMHg0NywgMHgwMiwgMHhGMSwgMHgyRCwKKzB4ODAsIDB4RjcsIDB4MDEsIDB4REYsIDB4MDcsIDB4NzQsIDB4MDMsIDB4RjAsIDB4MDEsIDB4NDAsIDB4M0YsIDB4NDIsIDB4RDMsCisweDAwLCAweDZDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDNDLCAweDAwLCAweERGLCAweDA1LCAweDc0LCAweDAyLCAweDMwLAorMHgxRCwgMHhDNCwgMHgyNywgMHgwMCwgMHg1MywgMHgwMSwgMHg3QywgMHgxMiwgMHhGMCwgMHgyNSwgMHhDMCwgMHg3MywgMHgwMCwKKzB4REIsIDB4MDMsIDB4N0MsIDB4MEIsIDB4RjIsIDB4NjksIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDAzLCAweDlGLCAweDAwLCAweDdFLCAweDBBLCAweEYwLCAweDFELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgzOSwgMHhDMCwgMHg3NywgMHgxMCwgMHhERiwgMHgwMywKKzB4NUMsIDB4MEEsIDB4RjAsIDB4MjksIDB4QzAsIDB4MzUsIDB4MDAsIDB4REIsIDB4MTAsIDB4NTQsIDB4ODAsIDB4RjAsIDB4MEQsCisweENELCAweDI3LCAweDAxLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDg1LCAweEMxLCAweEI3LCAweDA0LCAweERGLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDgsIDB4MEIsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4ODIsIDB4RjAsIDB4MEYsIDB4QzEsIDB4M0YsCisweDI0LCAweEZGLCAweDMwLCAweEZDLCAweDAzLCAweEYyLCAweDAzLCAweEM0LCAweDNCLCAweDAwLCAweDczLCAweDA1LCAweDhELAorMHgwMiwgMHgzMCwgMHgwMywgMHhDMiwgMHgzQywgMHgwNCwgMHhGMywgMHgwNCwgMHhGQywgMHgwMCwgMHhGMSwgMHgwRSwgMHhDMCwKKzB4MDYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MjcsIDB4QzAsIDB4M0MsIDB4NDAsIDB4RjMsIDB4MDIsCisweENDLCAweDAxLCAweEYxLCAweDBCLCAweEMwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MSwgMHgyMCwgMHhDNiwgMHgzNCwgMHg5MSwgMHgxMywgMHg1QywgMHgxNiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDksIDB4MzksIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTEsIDB4MDQsIDB4NDQsIDB4MEUsCisweDEwLCAweDcxLCAweDQwLCAweDM0LCAweDAwLCAweEQzLCAweDAxLCAweDc0LCAweDBDLCAweEQwLCAweDBELCAweDQwLCAweDQ0LAorMHgwMCwgMHg1RCwgMHgwMywgMHgzNCwgMHgxNywgMHgxMSwgMHgzNCwgMHg0MCwgMHhGNCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg0NCwKKzB4MDcsIDB4RDAsIDB4NTksIDB4NDgsIDB4ODQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDQ2LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDA2LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELAorMHgwNCwgMHg3NCwgMHg4MywgMHhEMCwgMHgxOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHg0MCwgMHg0NCwgMHgwNiwgMHg5MCwKKzB4MTEsIDB4NDAsIDB4MzQsIDB4MjAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4NDYsIDB4RDAsIDB4MUQsIDB4NDAsIDB4NjYsIDB4MDQsCisweDVELCAweDExLCAweDc0LCAweDA2LCAweDUwLCAweDI1LCAweDQwLCAweDc0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDBFLAorMHhEMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MjAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDMzLCAweDQ4LCAweDgxLCAweDAwLCAweDA2LCAweDAwLCAweDkwLCAweDA4LAorMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MiwgMHgyMCwgMHgwMCwgMHg0OSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTgsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4QzEsIDB4MjAsIDB4MDQsIDB4MDIsIDB4RDAsCisweDA4LCAweDQyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHg0MCwgMHgxMywgMHg0MCwgMHg3RSwgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg3RSwKKzB4MDMsIDB4RDAsIDB4MDEsIDB4QzIsIDB4M0YsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDEsIDB4QzAsCisweDNDLCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDA2LCAweDAwLCAweDVGLCAweDAwLAorMHg3QywgMHgwMiwgMHg3MCwgMHgwNSwgMHhEMCwgMHgzNCwgMHgxMCwgMHg1MywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMiwgMHgwMSwKKzB4RDAsIDB4MDQsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MkYsIDB4MTAsCisweEJGLCAweDAwLCAweERFLCAweDAwLCAweEYwLCAweDBGLCAweEM2LCAweDNGLCAweDAwLCAweEZGLCAweDgwLCAweEZDLCAweDAzLAorMHhEMCwgMHgwMywgMHhFMCwgMHgzRiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhGNCwgMHgwMCwgMHg3MCwgMHgwMywgMHhEMCwgMHgzRiwKKzB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDA3LCAweEM4LCAweDNGLCAweDAwLCAweDNGLCAweEEwLCAweEZELCAweDAyLCAweEYwLCAweDBCLCAweEMwLAorMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzRiwgMHgwMCwgMHhCMywKKzB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsCisweDBBLCAweEMwLCAweDBDLCAweDAxLCAweDMzLCAweDAwLCAweENDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBCLCAweDAwLAorMHhGQiwgMHgwNiwgMHhFQywgMHgwNSwgMHgzMCwgMHg0RiwgMHhDMSwgMHgyRiwgMHgwMCwgMHhGMywgMHgxNCwgMHhGQywgMHgyMywKKzB4RjAsIDB4MEIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RjcsIDB4MDQsIDB4Q0MsIDB4MjIsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MEMsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDA3LCAweDEwLCAweDkxLCAweDgwLAorMHg0NCwgMHgwMCwgMHg3MCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg0MywgMHgxMCwgMHgwOSwKKzB4NDgsIDB4ODQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RjksCisweDBCLCAweDQ0LCAweDU1LCAweDE1LCAweDJGLCAweDQwLCAweDZGLCAweDAwLCAweEQxLCAweDAzLCAweDcwLCAweDNCLCAweEQwLAorMHgzOSwgMHg0MCwgMHg0NywgMHg0MCwgMHhGMSwgMHgwMCwgMHg2QywgMHgwQSwgMHgxMCwgMHgxNSwgMHg0MCwgMHgwRCwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDUsIDB4MDEsIDB4MjAsIDB4MTQsCisweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDIzLCAweDAwLCAweDBELCAweDIwLCAweDE0LCAweDEzLCAweDEwLCAweDAwLCAweDQwLAorMHgwMSwgMHgwMiwgMHgwMSwgMHgyMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MiwgMHgyMywgMHgwMCwgMHhDMSwgMHgwNCwKKzB4MjQsIDB4ODEsIDB4MTAsIDB4MEMsIDB4NEEsIDB4MjcsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDEsIDB4ODgsCisweDQwLCAweDAzLCAweDAwLCAweEM1LCAweDA4LCAweDQ0LCAweEEyLCAweDEzLCAweDA4LCAweDQ2LCAweDRDLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgwNSwgMHgxMSwgMHgxMSwgMHgwNCwgMHg1NCwgMHgwNCwKKzB4RDAsIDB4MTEsIDB4NDEsIDB4NDcsIDB4MDAsIDB4MUQsIDB4MTEsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MTUsIDB4NDAsIDB4NDEsCisweDAwLCAweDExLCAweDAxLCAweDQ0LCAweDA0LCAweEQyLCAweDMxLCAweDRDLCAweEU3LCAweDAwLCAweEQxLCAweDAwLCAweDY0LAorMHgyMSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMSwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0OCwKKzB4ODcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NjQsIDB4NDYsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDVELCAweDQ2LCAweEYwLAorMHgzOSwgMHhDMCwgMHg0NywgMHgwMSwgMHgxRiwgMHgwMywgMHg1QywgMHgwMywgMHgxMCwgMHgyOSwgMHhFMSwgMHg0NSwgMHg0MCwKKzB4OTMsIDB4MDUsIDB4NEMsIDB4MEMsIDB4RDAsIDB4MTksIDB4QzAsIDB4QzcsIDB4MDAsIDB4REIsIDB4MDAsIDB4NkMsIDB4MTcsCisweDMwLCAweDBELCAweDYwLCAweDIzLCAweDQwLCAweERGLCAweDgwLCAweDdDLCAweDAzLCAweEYyLCAweDA5LCAweEMwLCAweEM3LAorMHgwMCwgMHhENywgMHgwMCwgMHgwQywgMHgwRSwgMHgzMCwgMHhCMSwgMHg4MSwgMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4NjksIDB4NDAsIDB4OUYsIDB4MDEsIDB4RUMsIDB4MDAsIDB4NzAsIDB4MEIsCisweEMwLCAweDBGLCAweDAwLCAweEFGLCAweDIwLCAweDhDLCAweDAzLCAweEYwLCAweDBCLCAweEUyLCAweDBFLCAweDAwLCAweEFGLAorMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwNiwgMHhGOCwKKzB4MEYsIDB4QzEsIDB4NkYsIDB4MDAsIDB4RjIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4NDAsIDB4NEYsIDB4MDIsCisweEZGLCAweDAwLCAweERGLCAweDAyLCAweEYwLCAweDA3LCAweEUwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHg4MywgMHgwMCwgMHg0RCwgMHgwQSwgMHhGMCwgMHgyMSwgMHhDMCwKKzB4MjQsIDB4ODEsIDB4MUYsIDB4MDIsIDB4NUMsIDB4MDMsIDB4MzAsIDB4QTUsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MUIsIDB4MDAsCisweDdDLCAweDBBLCAweDMyLCAweDI5LCAweEM5LCAweEE2LCAweDQyLCAweEMzLCAweDAwLCAweDVDLCAweDAxLCAweDM0LCAweDBELAorMHhDMCwgMHgyNywgMHg4MCwgMHhEMywgMHgwOCwgMHg3QywgMHgwMywgMHgzMCwgMHg0OSwgMHhDMCwgMHgwNywgMHgxMCwgMHhERiwKKzB4MDAsIDB4NEMsIDB4MjIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDJDLCAweDE0LCAweDkxLCAweDIwLCAweDQ0LCAweDJBLCAweEQwLCAweDg5LCAweDQxLCAweDg0LAorMHgwMCwgMHgxRCwgMHgwOSwgMHhGMCwgMHgwMywgMHgzMCwgMHg4NSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgxMSwgMHgxQSwgMHg3NCwKKzB4ODIsIDB4MzAsIDB4MDEsIDB4NDAsIDB4QTQsIDB4MDAsIDB4RkIsIDB4NDAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MEYsIDB4NDAsCisweDI3LCAweDAwLCAweEYxLCAweDAxLCAweEY0LCAweDAzLCAweDUwLCAweDc5LCAweDQwLCAweDAzLCAweDAwLCAweEZELCAweDI0LAorMHg1NCwgMHgwMiwgMHhCMCwgMHgxQywgMHg0MCwgMHg2RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4MjAsIDB4MzAsIDB4MDgsIDB4ODEsIDB4MDAsIDB4MjAsIDB4MjYsIDB4RDEsIDB4MzgsIDB4NDAsIDB4NjAsIDB4MjAsCisweDhELCAweDIwLCAweDM0LCAweDAzLCAweDEwLCAweDM5LCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAzLCAweDE2LCAweDAyLAorMHgxMCwgMHgyMCwgMHg0MCwgMHgwNCwgMHgwMSwgMHhDMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgzQywgMHg0MCwgMHgzMSwKKzB4MDAsIDB4QzgsIDB4MDEsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MjgsIDB4NDAsIDB4MTMsIDB4MDAsIDB4RDksIDB4MDAsIDB4MDYsCisweDAzLCAweDEwLCAweDhDLCAweDQwLCAweDVGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgwMiwgMHg1MCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHgxNiwgMHg2MCwgMHg3QSwgMHgyMCwgMHhFRCwKKzB4MDEsIDB4QjQsIDB4MDMsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NDAsIDB4MDAsIDB4RTEsIDB4NDEsIDB4QjYsIDB4MEQsIDB4OTQsCisweDE2LCAweDQyLCAweDRBLCAweDAwLCAweEM5LCAweDAxLCAweDg0LCAweDA1LCAweDEwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLAorMHhFOSwgMHgwMSwgMHhCNCwgMHgyNywgMHhEMCwgMHgxQSwgMHg0MCwgMHg1QiwgMHgwMCwgMHhDRCwgMHgwMSwgMHgxNiwgMHgyNiwKKzB4OTAsIDB4OUEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsCisweDMwLCAweDAyLCAweDAxLCAweDAwLCAweDBELCAweDAxLCAweEYwLCAweDhELCAweEMwLCAweDMwLCAweDA0LCAweENELCAweDMwLAorMHg3QywgMHgyMywgMHgxMCwgMHgwOCwgMHhDMCwgMHgwMCwgMHgwMSwgMHgwQiwgMHgwMCwgMHg3QywgMHgwQiwgMHgzMCwgMHg4OCwKKzB4QzAsIDB4MTIsIDB4MDIsIDB4QzMsIDB4MDAsIDB4NUMsIDB4MjIsIDB4MzIsIDB4MEMsIDB4QzEsIDB4MjMsIDB4MDAsIDB4QzksCisweDA4LCAweDdDLCAweDAzLCAweDMwLCAweDA4LCAweEMwLCAweDIzLCAweDAwLCAweENGLCAweDAwLCAweDBDLCAweDAzLCAweDMwLAorMHgwNCwgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgxRCwKKzB4MTQsIDB4N0YsIDB4MDAsIDB4REQsIDB4MDEsIDB4RjIsIDB4ODcsIDB4RDAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsCisweDEzLCAweDcwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweDcwLCAweDBGLCAweEM4LAorMHgxRCwgMHg0MCwgMHhGRiwgMHgxMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHhBQiwgMHg0MiwgMHhGNywgMHgyMCwKKzB4RkMsIDB4MDMsIDB4NzAsIDB4MEIsIDB4QzgsIDB4MkYsIDB4MTIsIDB4RkMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsCisweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg0RSwgMHgwMywgMHgzMSwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMSwgMHhDQywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MUYsCisweDIwLCAweERGLCAweDA2LCAweDVDLCAweDAwLCAweEYwLCAweDJELCAweEMxLCAweEI2LCAweDAwLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHhBOCwgMHgxRCwgMHhDMCwgMHgxNSwgMHgwMCwgMHhERiwgMHgwNiwgMHg0RCwgMHgwMSwgMHgzMCwgMHgxRCwgMHhDMCwKKzB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjksIDB4MDksIDB4RUQsCisweDIwLCAweEM0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEZELCAweDAwLCAweDg0LCAweDA3LCAweEQwLAorMHgwQywgMHg0MCwgMHgwOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEOCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwOCwKKzB4RkQsIDB4MTAsIDB4QUMsIDB4MDAsIDB4RDAsIDB4MkUsIDB4NDQsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDIsIDB4RjQsIDB4MDMsCisweDEwLCAweDBFLCAweDQwLCAweDE4LCAweDAwLCAweEVELCAweDE2LCAweEM0LCAweDAyLCAweEIwLCAweDBBLCAweEMwLCAweDRFLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhGOSwgMHgwMCwgMHhFRCwgMHg4MSwKKzB4ODQsIDB4MDcsIDB4MTEsIDB4MUUsIDB4NDgsIDB4RkIsIDB4MDgsIDB4RUQsIDB4MTEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsCisweDQwLCAweDQ4LCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQxLCAweEZCLCAweDAwLCAweEVELAorMHgwNSwgMHg5NCwgMHg0NCwgMHhEOSwgMHg1RSwgMHg0MCwgMHg3MywgMHgwMCwgMHhFNSwgMHgwNSwgMHhCNCwgMHgwNywgMHg5MCwKKzB4MUMsIDB4NDQsIDB4NzksIDB4MDAsIDB4RUQsIDB4NDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MTQsIDB4NDAsIDB4MDQsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweEIzLCAweDA0LCAweENELCAweDAyLCAweDA1LAorMHg4MywgMHgxMiwgMHg2QywgMHg2MCwgMHg3MywgMHgxMCwgMHhDRCwgMHgwMywgMHgwNCwgMHgwMywgMHhEMCwgMHgxQywgMHg1MCwKKzB4MzAsIDB4MDIsIDB4QzEsIDB4MDksIDB4MzQsIDB4MEIsIDB4RDAsIDB4M0MsIDB4NDQsIDB4NzMsIDB4MDEsIDB4Q0QsIDB4NDAsCisweDI0LCAweDA0LCAweEQ4LCAweDBDLCAweDQwLCAweDczLCAweDgwLCAweEM1LCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLAorMHg0MiwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5MCwgMHgwMCwgMHg1MCwgMHg0QSwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4NUQsIDB4MDAsIDB4N0YsIDB4MDAsIDB4Q0MsIDB4MDUsCisweDMwLCAweDI3LCAweEMwLCAweDFGLCAweDAwLCAweDdGLCAweDA4LCAweDRELCAweDAxLCAweEYwLCAweDE3LCAweEMxLCAweDVDLAorMHg0MCwgMHg3MywgMHgwMSwgMHhGQywgMHgwMSwgMHhGMCwgMHgyNywgMHg0MCwgMHg1RiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhEQywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NTYsIDB4NDEsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzAsCisweDFELCAweDg5LCAweDVGLCAweDAwLCAweDhDLCAweDAxLCAweDMwLCAweDA3LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHg4MSwgMHgwOCwgMHgxRiwgMHgxMCwgMHg3QywgMHgyNCwgMHhGNCwKKzB4QTEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4NDcsIDB4MDgsCisweDFGLCAweDI2LCAweDdDLCAweDAwLCAweEYwLCAweDQxLCAweEMyLCAweDg3LCAweDAwLCAweDBGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMiwgMHgwMCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwMywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDQsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDgzLCAweDAwLCAweDBDLCAweDAyLCAweDMwLCAweDg5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwgMHg2MCwgMHgwMiwgMHg5MywKKzB4MDEsIDB4N0MsIDB4NDYsIDB4RjAsIDB4NTksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEMsIDB4NDIsIDB4QjAsCisweDA5LCAweEMwLCAweDIyLCAweDAxLCAweDkzLCAweDAwLCAweDNDLCAweDAyLCAweDkwLCAweDQ5LCAweEMwLCAweEE3LCAweDQwLAorMHg5MywgMHgwMCwgMHg0RCwgMHgwMiwgMHgxNCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4RTQsIDB4MjEsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEUsIDB4MTQsIDB4MjksIDB4QzAsCisweDI1LCAweDAyLCAweDlELCAweDFCLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDk1LCAweDEyLAorMHg1QywgMHgyMiwgMHhEMiwgMHgxOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5MSwgMHg4MCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgyOSwKKzB4NDEsIDB4NjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MzksIDB4NDEsIDB4NjcsIDB4MDAsIDB4OTEsCisweDAyLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHg2NCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwOSwgMHg0MSwgMHgyNywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTksIDB4MDgsIDB4NzQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAxLCAweDk5LCAweDAwLCAweDA0LCAweDgyLCAweDk0LCAweDA5LCAweDQwLAorMHgyNiwgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwgMHg4OSwgMHg0MiwKKzB4NDQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDIwLCAweDAxLCAweDgxLCAweDA0LCAweDA0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIxLCAweDgyLAorMHg4RCwgMHgxMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg1OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgxMCwgMHgxNCwgMHg0MiwKKzB4RDAsIDB4NzgsIDB4NDEsIDB4MzMsIDB4MDYsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsCisweDAxLCAweDg1LCAweDA0LCAweDM0LCAweDUyLCAweDU5LCAweDQ4LCAweDQwLCAweDIzLCAweDAxLCAweDg5LCAweDA0LCAweDQ0LAorMHgxMiwgMHg1MCwgMHg0OCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjgsIDB4ODYsIDB4NDIsIDB4MDMsIDB4MEEsIDB4NDUsIDB4MzEsIDB4MzAsIDB4RTEsIDB4NDAsIDB4OTcsIDB4MDQsIDB4MUYsCisweDA4LCAweDdDLCAweDI4LCAweEYwLCAweEExLCAweEMwLCAweDgwLCAweDAyLCAweDFCLCAweDA2LCAweDdDLCAweDE5LCAweEYwLAorMHgyMSwgMHhDMCwgMHg4NywgMHgwMSwgMHgxQiwgMHgxRSwgMHg0QywgMHgyOCwgMHhCMSwgMHhBMSwgMHhDMCwgMHgwNiwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsIDB4ODAsIDB4MDcsIDB4MDAsIDB4MEIsIDB4MEEsIDB4NEMsIDB4MjgsCisweDcwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LAorMHgyRiwgMHgwQSwgMHhCRiwgMHgwOCwgMHhGQywgMHgwQSwgMHhGMiwgMHhDQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzgsIDB4MkQsIDB4MDIsIDB4QjcsIDB4MTQsIDB4REMsIDB4NTIsIDB4RjAsIDB4MEIsCisweEMyLCAweDNGLCAweDAwLCAweDlGLCAweDAwLCAweEZELCAweDgzLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweDlCLAorMHgwOCwgMHg3QywgMHgwMiwgMHg3MCwgMHg4QiwgMHhDOCwgMHgyRSwgMHgwMiwgMHg5NywgMHgwOCwgMHhGQywgMHgyMiwgMHhCMCwKKzB4OEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTgsIDB4MkYsCisweDA1LCAweEQzLCAweDRDLCAweENDLCAweDAyLCAweEYxLCAweDBCLCAweEMwLCAweDJGLCAweDAyLCAweEIzLCAweDA0LCAweEZDLAorMHg1MiwgMHgzMCwgMHhDQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgyMiwgMHhGMCwgMHg0QiwgMHhDMCwKKzB4MkQsIDB4MDUsIDB4OUYsIDB4MEMsIDB4NUMsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDUsCisweDVDLCAweDE2LCAweEIwLCAweDBGLCAweEMwLCAweDJDLCAweDAwLCAweEJGLCAweDgwLCAweENELCAweDAyLCAweDMxLCAweDBCLAorMHhDMCwgMHg2NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwKKzB4MTEsIDB4MEMsIDB4NDUsIDB4NDgsIDB4RDAsIDB4MDEsIDB4NDEsIDB4MDcsIDB4MDIsIDB4MTEsIDB4NTQsIDB4NzQsIDB4MDAsCisweDM4LCAweEMxLCAweEMwLCAweDkwLCAweDA0LCAweDExLCAweDEwLCAweDQ0LCAweDIwLCAweEQyLCAweDQxLCAweDQxLCAweDA3LAorMHgyMSwgMHgxRCwgMHgwQywgMHg0NCwgMHg0MCwgMHg0MCwgMHgwMSwgMHg0MSwgMHgwNCwgMHgwMiwgMHgxQiwgMHgwMCwgMHg3MCwKKzB4NTQsIDB4MTAsIDB4MDEsIDB4QzAsIDB4OTYsIDB4MDAsIDB4MDMsIDB4MTAsIDB4NDUsIDB4MjAsIDB4NTAsIDB4MDEsIDB4NDAsCisweDcxLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDgxLAorMHgwNCwgMHgwNCwgMHgzMiwgMHhEMCwgMHg4OCwgMHg2MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgyQywgMHgzNiwgMHgwMiwgMHgxOCwKKzB4NEMsIDB4NjIsIDB4MjEsIDB4NEIsIDB4ODAsIDB4MDgsIDB4MjQsIDB4MDIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjEsIDB4MkQsCisweDhELCAweDQ0LCAweDc0LCAweDEyLCAweDgwLCAweDg4LCAweDUwLCAweDIwLCAweDAwLCAweDg1LCAweDAyLCAweDE0LCAweDBBLAorMHg1MCwgMHgwQywgMHg0OCwgMHgyMiwgMHgxMiwgMHg4RCwgMHgwOCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0OCwKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4ODIsCisweDQ0LCAweDQyLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDA1LCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDQ5LAorMHg0MCwgMHgyNSwgMHgwMSwgMHhEMSwgMHgwMCwgMHg2NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMiwgMHg4RCwKKzB4MDAsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsCisweDBELCAweDQwLCAweDI2LCAweDAwLCAweDkxLCAweDAwLCAweDY0LCAweDAyLCAweDUwLCAweDI5LCAweDQwLCAweDYxLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHg0MiwgMHg5MywgMHgwMCwgMHg0RCwKKzB4MDIsIDB4RjAsIDB4NzksIDB4QzAsIDB4NjcsIDB4NDAsIDB4OTMsIDB4MTEsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MzksIDB4QzEsCisweDI1LCAweDAwLCAweDkzLCAweDEwLCAweDZELCAweDRFLCAweEYwLCAweDY5LCAweEMwLCAweEU1LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHg4QSwgMHhCMCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHgwMiwgMHg3MCwgMHgwOSwKKzB4QzAsIDB4QTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkQsIDB4MUEsIDB4MzAsIDB4MjksIDB4QzAsIDB4MTQsIDB4QTAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDY1LCAweDAwLCAweDlGLCAweDIwLCAweDdDLCAweDI2LAorMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHgzQywgMHgwMiwgMHhGMCwgMHgxOSwgMHhEMCwgMHgyNCwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4ODQsIDB4OUYsIDB4MDAsIDB4NUMsCisweDIyLCAweDcwLCAweDA5LCAweEMwLCAweDY3LCAweDA4LCAweDlCLCAweDAwLCAweDdDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLAorMHg2NywgMHg4MiwgMHg5RiwgMHgwMCwgMHg1RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NEUsIDB4NDgsIDB4RjIsCisweDQxLCAweEU0LCAweDg3LCAweDAxLCAweDFGLCAweDA4LCAweDdDLCAweDgwLCAweDcwLCAweDAwLCAweEMwLCAweDg0LCAweDAwLAorMHgxMywgMHgwMSwgMHg3QywgMHgwMCwgMHhGOCwgMHgyMSwgMHhDNCwgMHg4NywgMHgwOCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwOCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4ODcsCisweDQwLCAweDEzLCAweDAwLCAweDBDLCAweDAwLCAweEYwLCAweEEwLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxQywgMHgwMCwgMHg1RCwgMHgyMCwgMHhDNiwgMHgxRCwgMHg3MCwgMHgyNywKKzB4NDAsIDB4NUYsIDB4MDQsIDB4N0QsIDB4MDgsIDB4NzQsIDB4MTUsIDB4RDAsIDB4MjcsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NzEsCisweDAwLCAweERDLCAweDA5LCAweEYwLCAweDM3LCAweDYwLCAweDlGLCAweDAwLCAweDVELCAweDAwLCAweDA0LCAweDAxLCAweDMwLAorMHg0NywgMHg0MCwgMHgxNywgMHg0MCwgMHg1MiwgMHgwMCwgMHg1QywgMHgwMSwgMHhEMCwgMHgyNiwgMHg0MCwgMHgxNywgMHgwNCwKKzB4NzQsIDB4ODIsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEYyLCAweDA0LCAweENELCAweDAwLCAweDI0LCAweDBGLCAweDUwLCAweDhDLCAweDQwLAorMHg3NywgMHgwMCwgMHhDRCwgMHgwMywgMHgzNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MSwgMHgzNiwgMHgwMCwgMHhEMSwgMHgyMCwKKzB4MzQsIDB4NDcsIDB4RDIsIDB4MEMsIDB4NDEsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MUMsCisweDQwLCAweDIzLCAweDA4LCAweDg4LCAweDIwLCAweDc0LCAweDAzLCAweEQwLCAweDIwLCAweDYwLCAweDYzLCAweDAwLCAweDkwLAorMHgxMiwgMHgwNSwgMHgwMywgMHhEMCwgMHgxQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4QTgsIDB4MTAsIDB4RUQsIDB4MDAsIDB4QTQsIDB4MDEsIDB4NTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDIwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBCLCAweDYwLCAweDI4LCAweDAwLCAweEUxLCAweDAwLCAweDk0LAorMHgwOSwgMHgxMCwgMHgwRSwgMHg0MSwgMHg5QiwgMHgwOCwgMHhDRCwgMHgwNCwgMHhDNCwgMHgxMywgMHgxMiwgMHgwNiwgMHg0MCwKKzB4MkIsIDB4MDAsIDB4RTksIDB4MDAsIDB4QjYsIDB4MDMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4NjMsIDB4MDAsIDB4RTUsIDB4MDAsCisweDg0LCAweDAyLCAweEQwLCAweDBFLCAweDYwLCAweDE0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgxOCwgMHg0OCwgMHgxMCwgMHhGRiwgMHgwMSwgMHhBNSwgMHgwNywgMHg3MCwgMHgxRSwgMHg0MCwgMHg1QiwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QkMsIDB4ODcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4N0EsIDB4NDIsIDB4RTEsIDB4MDEsIDB4QkMsIDB4MDcsCisweEQwLCAweDE2LCAweDQwLCAweDdCLCAweDAwLCAweEVGLCAweDA5LCAweDlELCAweDVGLCAweDcwLCAweDE2LCAweEU0LCAweDczLAorMHgwMCwgMHhBQiwgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxMiwgMHg4MCwgMHg3QiwgMHgwMCwgMHgyMSwgMHgwMSwgMHg4QywKKzB4MDcsIDB4RjAsIDB4MUUsIDB4RDAsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEI4LCAweDA1LCAweDAwLCAweERGLCAweDE2LCAweDVDLCAweDAxLCAweDcwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhBMSwgMHg0MiwgMHhEMSwgMHgzNywgMHgyMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDgsIDB4M0MsIDB4MUIsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4NDAsCisweEQzLCAweDAwLCAweDVDLCAweDgzLCAweEYwLCAweDBELCAweDgwLCAweDM3LCAweDAwLCAweDVCLCAweDIwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwQywgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwKKzB4NEQsIDB4MDAsIDB4RjcsIDB4MzEsIDB4Q0MsIDB4MTMsIDB4RjAsIDB4OTcsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDEsCisweEZDLCAweDA2LCAweEIwLCAweDlGLCAweEMwLCAweDdDLCAweDAwLCAweDczLCAweDA5LCAweEZDLCAweDI3LCAweEYwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHg4MSwgMHhDQywgMHgwNywgMHg3MCwgMHg5RiwgMHhDMCwgMHg2QywgMHg0MCwgMHhCNywKKzB4NDEsIDB4Q0MsIDB4MDcsIDB4QjAsIDB4MUEsIDB4QzAsIDB4NkMsIDB4MjAsIDB4QkYsIDB4MjEsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDFCLCAweEMwLCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDBELAorMHgwMCwgMHhFQiwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MjIsIDB4RDAsIDB4QzYsIDB4NTAsIDB4MjgsIDB4MzAsIDB4NjAsIDB4MTgsIDB4OUMsIDB4MjMsIDB4RDAsIDB4MEUsIDB4QzAsCisweDM5LCAweDAyLCAweEVELCAweDA0LCAweDg0LCAweDEzLCAweDQwLCAweDAzLCAweEMwLCAweDJBLCAweDAwLCAweEU1LCAweDAwLAorMHhBQywgMHgyMywgMHgxMCwgMHgwRSwgMHhDMiwgMHgyQSwgMHgwMCwgMHhFOSwgMHgwMCwgMHg4NSwgMHg0MiwgMHhEMCwgMHgwRSwKKzB4NDAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsCisweEU1LCAweDEwLCAweDg0LCAweDIzLCAweEQwLCAweDA2LCAweDQyLCAweDE4LCAweDA0LCAweDZELCAweDAwLCAweEI0LCAweDAyLAorMHhEMCwgMHgwNiwgMHg0MiwgMHgzOCwgMHgwMCwgMHg2MSwgMHg4MCwgMHhCNCwgMHgwMiwgMHhEMCwgMHg4QSwgMHg0MCwgMHhCQiwKKzB4MDAsIDB4RUQsIDB4MjAsIDB4QzQsIDB4NEIsIDB4NDIsIDB4MDYsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QTUsIDB4MDAsIDB4QTQsCisweDAzLCAweDkwLCAweDAyLCAweDQwLCAweDI4LCAweDAwLCAweEE1LCAweDA4LCAweEE0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLAorMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgwMSwgMHgwMCwgMHhEMSwKKzB4MDEsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MjgsIDB4NTAsIDB4ODAsIDB4MDQsIDB4OEQsIDB4NDcsIDB4MzQsIDB4MDIsIDB4RDAsCisweDA1LCAweDU4LCAweDM0LCAweDQyLCAweDAxLCAweDkxLCAweDE0LCAweENFLCAweEQwLCAweDM5LCAweDQwLCAweDAxLCAweDIwLAorMHhDRCwgMHgwMCwgMHgwNCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMiwgMHg0MCwgMHhDNSwgMHgwMCwgMHgyNCwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MjIsIDB4MDAsIDB4QzksIDB4MDAsIDB4MjQsIDB4MEUsIDB4RDAsIDB4OEMsIDB4NDAsIDB4MUIsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDA1LCAweDA2LCAweEY1LCAweDIwLAorMHg0QywgMHgwMiwgMHhGMCwgMHhCOSwgMHhDMSwgMHhBNCwgMHgwMCwgMHgxRiwgMHgwNSwgMHg3NCwgMHg4MiwgMHhCMCwgMHgwOSwKKzB4QzAsIDB4NzQsIDB4MDAsIDB4OTMsIDB4MDMsIDB4N0MsIDB4NDIsIDB4RDAsIDB4MzksIDB4QzEsIDB4QjcsIDB4MDAsIDB4RkYsCisweDAwLCAweENDLCAweDA3LCAweDcwLCAweDA1LCAweEMwLCAweDI2LCAweDQwLCAweDg1LCAweDAwLCAweEVDLCAweDAzLCAweEIwLAorMHgwMSwgMHhDOCwgMHgyNCwgMHgwMCwgMHg1NywgMHg4MCwgMHg2QywgMHgwRSwgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MDcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsCisweDI4LCAweEYwLCAweDIxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDE5LCAweEMwLAorMHgyNywgMHgwNCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgxNywgMHgwMCwgMHhDRiwgMHgwMCwKKzB4N0QsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MjMsIDB4NDAsIDB4OUUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsCisweEMwLCAweDI3LCAweDAwLCAweDVDLCAweDAwLCAweDFDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwQiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhDQywgMHg0MiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzQsCisweDAwLCAweEIzLCAweDAwLCAweEI0LCAweDAwLCAweDMwLCAweDAzLCAweEMwLCAweDNDLCAweDAwLCAweERGLCAweDAwLCAweENDLAorMHgwMywgMHhGMCwgMHgwNiwgMHhDMCwgMHhFQywgMHgwMCwgMHg5MywgMHgwOCwgMHgwQywgMHgwMywgMHgzNCwgMHg1MywgMHg0MCwKKzB4MzgsIDB4MDAsIDB4RTMsIDB4QzAsIDB4Q0MsIDB4NTYsIDB4MzEsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEM2LCAweDAxLCAweEQxLCAweDAwLCAweDQ0LCAweDE0LCAweEQwLAorMHgzOSwgMHg0MCwgMHg0NywgMHgwMSwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHhDOCwgMHgxMSwgMHg1MCwgMHgzNCwgMHgwMCwKKzB4MUYsIDB4ODMsIDB4NzQsIDB4MEMsIDB4MTIsIDB4MzEsIDB4NDQsIDB4QzQsIDB4MEMsIDB4REYsIDB4MDAsIDB4NTQsIDB4MDMsCisweEYwLCAweDI1LCAweDQ0LCAweDI0LCAweDAwLCAweDkxLCAweDAxLCAweDQ1LCAweDAzLCAweEIwLCAweDA0LCAweDQwLCAweDM1LAorMHgwMCwgMHhEMywgMHgwMywgMHg1NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDYsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MTEsCisweDQwLCAweDY3LCAweDAwLCAweDExLCAweDExLCAweDc2LCAweDA2LCAweEQxLCAweDE5LCAweDU0LCAweDM0LCAweDAwLCAweDkxLAorMHgwMSwgMHg3NiwgMHg0NiwgMHgxMCwgMHgzOSwgMHg2MCwgMHg2NCwgMHgxMCwgMHhERCwgMHg0MCwgMHg0NCwgMHgwMywgMHhEMCwKKzB4MjUsIDB4NDAsIDB4MjQsIDB4MTgsIDB4OTEsIDB4NDAsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjUsIDB4NDAsCisweEQxLCAweDBBLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MiwKKzB4MjMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsCisweDM0LCAweDAyLCAweDEwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDAwLAorMHg1MCwgMHgyMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0OCwgMHgyMSwgMHgwMCwgMHhDOSwKKzB4ODAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NEMsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweEUzLCAweDAwLCAweDRDLCAweDAyLCAweEQwLCAweDAxLCAweEMyLCAweDI3LAorMHgwMCwgMHgxMywgMHgwMCwgMHg3RSwgMHgwMiwgMHhDMCwgMHgwMywgMHhDMCwgMHgzQywgMHg0MCwgMHg5MSwgMHgwMCwgMHg3QywKKzB4MDAsIDB4MzgsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4RkMsIDB4MDAsIDB4Q0MsIDB4ODMsIDB4RDAsIDB4MDUsIDB4QzAsCisweDI0LCAweDQwLCAweDkzLCAweDQwLCAweDVDLCAweDAzLCAweDEwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweEMzLCAweDgwLAorMHg0QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgwNywgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QjgsIDB4MEQsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4NDAsCisweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCOCwgMHgwMywgMHhGMCwgMHgwMywgMHhDNCwgMHgyRiwKKzB4NDAsIDB4QkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweEUwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHg4MCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgyMCwgMHhDQywgMHgxMywgMHg3MCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGMywKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RkYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4MzAsCisweDFGLCAweEMwLCAweDdELCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLAorMHhGMywgMHgwMywgMHhFQywgMHgwNywgMHhCMCwgMHgxNiwgMHhDMCwgMHg1QywgMHgwMCwgMHgyQiwgMHgwMSwgMHhFQywgMHgwNSwKKzB4MzAsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsCisweDM3LCAweDAwLCAweDlELCAweDAwLCAweEVDLCAweDBCLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAxLCAweDExLCAweDAwLAorMHg0NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsCisweDg0LCAweDRDLCAweDA0LCAweDUyLCAweDFELCAweDQwLCAweDU1LCAweDAwLCAweDExLCAweDAxLCAweDU0LCAweDAzLCAweEI0LAorMHgwMSwgMHg0MCwgMHgwRCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MjMsIDB4RDAsIDB4MEMsIDB4NjAsIDB4MzMsIDB4MDEsIDB4QzEsIDB4MDAsIDB4NDQsCisweDgzLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDBELCAweDQ4LAorMHgzNCwgMHg4MCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzNSwgMHgwMCwgMHhDMSwgMHgwNCwKKzB4NjQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDQsIDB4MTYsIDB4ODAsIDB4NTksIDB4MDAsIDB4NjYsIDB4ODMsIDB4NUMsIDB4MDAsCisweDQ0LCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLAorMHg5RCwgMHgyMSwgMHg0NCwgMHgwMywgMHg5MSwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2MCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDgwLCAweDE5LCAweDIwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA2LCAweDAwLCAweDExLCAweDAwLCAweDQ0LAorMHgwMCwgMHg1MCwgMHgxRCwgMHg0QywgMHgxNywgMHgwNCwgMHg1MSwgMHgxMCwgMHg1NCwgMHgwQiwgMHhEQywgMHgxMSwgMHg0MCwKKzB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4MDAsIDB4MUYsCisweDMzLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweEQzLCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0RCwgMHgwMywgMHgzNCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwKKzB4RDMsIDB4MjAsIDB4MEMsIDB4MDMsIDB4MTAsIDB4MEQsIDB4QzAsIDB4MzEsIDB4MDAsIDB4RDMsIDB4MDAsIDB4MkMsIDB4MDMsCisweEIwLCAweDE4LCAweEMwLCAweDkyLCAweDAwLCAweDlCLCAweDAxLCAweDJDLCAweDBCLCAweDcwLCAweDU5LCAweEMyLCAweDAwLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgxMCwgMHhBRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4NzIsIDB4MDMsIDB4Q0IsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEM4LCAweDBFLCAweDA0LCAweDM3LAorMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwNCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4OEQsIDB4MTAsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjMsIDB4QjAsIDB4MDksIDB4QzAsIDB4M0YsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDA2LCAweDFGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHg0MywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzQsIDB4MUIsIDB4RDMsIDB4MDAsIDB4NEMsIDB4NDcsIDB4MzAsIDB4MUQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4RDcsIDB4MDEsCisweDdDLCAweDQ3LCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAyLCAweERGLCAweDAwLCAweDRELCAweDQzLCAweDMwLCAweDBELAorMHhDMCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwNiwgMHg0QywgMHgwQiwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyOSwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4NzQsIDB4MTAsIDB4OUQsIDB4MDgsIDB4RjQsIDB4MDMsCisweEQxLCAweDIxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAzLCAweDFDLCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweEM0LAorMHgwMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwQywgMHgxMiwgMHgzMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxNSwgMHgwMywgMHg3NCwKKzB4MDQsIDB4RDAsIDB4MjEsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MUQsIDB4MEIsIDB4NDYsIDB4NDAsIDB4QjIsIDB4QUQsIDB4NDgsCisweEM0LCAweDIyLCAweDhCLCAweDA3LCAweDZDLCAweDBCLCAweEEwLCAweDkxLCAweEMwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHhGMiwgMHgwMCwgMHgwRCwgMHgwOSwgMHg3NCwgMHgxNywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4REQsIDB4MDQsIDB4MzQsIDB4MEIsIDB4RDAsIDB4MkMsIDB4NDAsIDB4RjAsIDB4MDAsCisweEMxLCAweDBDLCAweDU0LCAweDAzLCAweDE0LCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweEQ5LCAweDA0LCAweDM0LCAweDBCLAorMHhEMCwgMHg0QywgMHg0MCwgMHhCMCwgMHgyMCwgMHhEOSwgMHgwMCwgMHgwNCwgMHgwQiwgMHgxMCwgMHgyNCwgMHg0MCwgMHg1MywKKzB4MDAsIDB4QzEsIDB4MDEsIDB4MjQsIDB4MjIsIDB4OTAsIDB4OTksIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDAwLCAweDZELCAweDAxLCAweEI0LCAweDQ3LCAweEQ4LCAweDEzLAorMHg0MCwgMHg0QSwgMHgwMCwgMHgyRCwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwgMHg0QywgMHgwMCwgMHgyMSwKKzB4MDEsIDB4QzQsIDB4MDQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MkQsIDB4MDgsIDB4QjQsIDB4MDAsIDB4RDAsCisweDEyLCAweDQwLCAweDQ4LCAweDAwLCAweDJELCAweDMxLCAweDg0LCAweDA0LCAweDkwLCAweDlGLCAweDQ0LCAweDVFLCAweDA4LAorMHg3OSwgMHgyMSwgMHhBNCwgMHgwRiwgMHg5MCwgMHgxMiwgMHg0OCwgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsCisweDMyLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMwLCAweDAwLCAweEQzLCAweDAwLAorMHgxQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzNywgMHg4MCwgMHhDOSwgMHgwMCwgMHgzQywgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MjMsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MTMsIDB4MTQsIDB4QzMsCisweDAwLCAweDRDLCAweDIzLCAweEIwLCAweDg4LCAweEM2LCAweDRCLCAweDY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwMiwgMHhDMCwgMHgwRCwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDIsIDB4M0YsIDB4MDgsIDB4N0MsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDM2LCAweDA4LCAweEZDLCAweDEwLCAweEYwLCAweDAxLCAweDgwLAorMHgwRiwgMHgwMCwgMHgzRSwgMHgwMCwgMHhCQywgMHg4NCwgMHhGOSwgMHgwRiwgMHhDOCwgMHgxOSwgMHgwMCwgMHg3RiwgMHgwMCwKKzB4RkMsIDB4MjMsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDM3LCAweDEwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwNywgMHgzNCwgMHgxRCwgMHhEMCwgMHgzMCwgMHgwMCwgMHhEMywgMHgwMSwgMHg0RCwgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MUQsIDB4RDAsIDB4MzQsCisweDAwLCAweEQ3LCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDFDLCAweEQwLCAweDU0LCAweDAwLCAweEQzLCAweDAwLCAweDRDLAorMHgwMywgMHhEMSwgMHgwOSwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4ODgsIDB4MzksIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MkIsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MkQsCisweDAwLCAweEY0LCAweDAwLCAweDEwLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDMxLCAweDAwLCAweDg0LCAweDAwLCAweEQwLAorMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMywgMHg0MCwgMHgwOCwgMHgxMCwKKzB4MkQsIDB4MDAsIDB4QTQsIDB4MDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTgsIDB4NDAsIDB4RTEsIDB4MDAsIDB4OTQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDRGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLAorMHg3OSwgMHgwMCwgMHhFRCwgMHgwMywgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0MsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEVELAorMHgwMSwgMHhBNSwgMHgwNywgMHhEMCwgMHgxRiwgMHg0OSwgMHg1OCwgMHg4MCwgMHhGNSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDIsIDB4MTMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsCisweDAwLCAweERELCAweDAxLCAweDM0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDM0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0NCwKKzB4MDcsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDAsCisweDI0LCAweDAwLCAweEQwLCAweDVDLCAweDQ0LCAweEQwLCAweDAxLCAweEM1LCAweDEzLCAweDE0LCAweDRGLCAweEQ4LCAweDVELAorMHg0MCwgMHg1QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwKKzB4N0YsIDB4MDIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsCisweDMwLCAweDA1LCAweEMwLCAweDE0LCAweDUwLCAweDUzLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg0NCwKKzB4MDEsIDB4RDAsIDB4MjcsIDB4QzAsIDB4REMsIDB4MDAsIDB4NjcsIDB4MDcsIDB4OEMsIDB4MDEsIDB4RjAsIDB4NTcsIDB4NDQsCisweDVGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDAwLCAweDFGLAorMHgxMiwgMHg3QywgMHgwMCwgMHhGMiwgMHgyMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMiwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4QzgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MjMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAyLCAweEZDLCAweDgwLCAweEYzLCAweDIzLCAweEMwLCAweDhGLCAweDAwLCAweDNGLCAweDIyLCAweERDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxQiwgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg0QiwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDUsCisweDRDLCAweDA2LCAweEYwLCAweDk5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg2NywgMHg0MCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwgMHg2NywgMHg0MCwgMHg5MywKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4NEMsIDB4MjIsIDB4RjAsCisweDQ5LCAweEUwLCAweEE3LCAweDAwLCAweDlGLCAweDAwLCAweDVFLCAweDBBLCAweDMwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhBNiwgMHgwNCwgMHg5RCwgMHgxMiwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MjksIDB4NDEsIDB4MjAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MTksIDB4NDEsCisweDI3LCAweDAwLCAweDkxLCAweDAzLCAweDc0LCAweDAyLCAweEQwLCAweDE5LCAweDQwLCAweDY3LCAweDAwLCAweDkxLCAweDAyLAorMHg3NCwgMHgwMiwgMHhEOCwgMHgzOSwgMHg0MCwgMHgyNywgMHgwMSwgMHg5RCwgMHgwMCwgMHg0NSwgMHg4NiwgMHhEMCwgMHgzOSwKKzB4NDAsIDB4NjcsIDB4MTQsIDB4OTcsIDB4MEEsIDB4NDQsIDB4MEEsIDB4NTYsIDB4NDksIDB4NDAsIDB4MDQsIDB4MDgsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLCAweDlELCAweDAwLCAweDY0LCAweDJBLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyQywgMHgwOCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwRSwgMHhEMCwgMHgxQiwgMHg0MCwgMHhBRiwKKzB4MDIsIDB4QjEsIDB4MDMsIDB4RjQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDIsIDB4QjEsIDB4MDIsIDB4RjQsCisweDBBLCAweEQxLCAweDFCLCAweDQxLCAweDJGLCAweDAxLCAweEE5LCAweDAwLCAweEM2LCAweDAyLCAweDkxLCAweDA5LCAweDQwLAorMHgyNSwgMHgwMCwgMHg5RCwgMHg0MiwgMHg1NCwgMHgwMiwgMHgxNSwgMHg0OSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MTQsIDB4MjUsIDB4MTIsIDB4RDAsCisweDBBLCAweDQwLCAweDJDLCAweDAwLCAweEUxLCAweDgwLCAweEI0LCAweDAyLCAweEQwLCAweDBBLCAweDRBLCAweDJCLCAweDAwLAorMHhBMSwgMHgwMCwgMHhCNCwgMHgwNiwgMHhEMCwgMHgwRSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgwMiwKKzB4RDIsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDgsIDB4ODQsIDB4MDIsIDB4RDIsIDB4MEMsIDB4NEEsIDB4MjMsCisweDAwLCAweDk1LCAweDAwLCAweDY0LCAweDA2LCAweDU4LCAweDQ4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwNCwgMHg2QywgMHgyOCwgMHhGMCwgMHhBMSwKKzB4QzgsIDB4ODQsIDB4NDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MTMsCisweDBBLCAweDdDLCAweDI4LCAweEYwLCAweEExLCAweEMwLCAweDg3LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDI4LCAweEQwLAorMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgwRiwgMHg4MiwgMHhDQywgMHgwMSwgMHhGOCwgMHgwMSwgMHhDQSwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NUMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDA1LCAweEJGLCAweDE0LCAweDVDLCAweDIyLCAweEYwLCAweDA5LCAweEQwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNywgMHgyMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEUwLCAweDBCLCAweEMwLCAweDJCLCAweDAwLCAweEE3LAorMHg0MCwgMHhEQywgMHgwMiwgMHhGMCwgMHg4QiwgMHhENCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4ODAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MTQsIDB4RkMsIDB4MzIsIDB4MzAsIDB4MEEsIDB4QzAsIDB4MjQsCisweDAwLCAweEFGLCAweDA4LCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAyLCAweEIzLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHg4QiwgMHhDOCwgMHgyRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMiwgMHg3MCwgMHgwQiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QjMsIDB4MjgsIDB4Q0UsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkUsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDAyLCAweEMxLCAweDBCLCAweEMyLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHgwMCwgMHgwNywgMHgwNSwgMHgxRCwgMHgwNCwgMHg3NCwgMHgzMCwgMHgxMCwgMHgwMSwgMHg0MSwgMHgwNCwgMHgwNCwKKzB4MUQsIDB4MjAsIDB4NzQsIDB4NTAsIDB4RDAsIDB4NDEsIDB4NEMsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MTAsIDB4NzQsIDB4NDAsCisweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDA1LCAweDFELCAweDA0LCAweDc0LCAweDEwLCAweEQwLCAweDAxLCAweDQxLCAweDA3LAorMHgwNCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHgxNiwgMHgwMCwgMHgxQiwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEyLCAweDIzLCAweDIxLCAweDhELCAweDE0LCAweDM0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDAwLCAweDhELAorMHgwMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MSwgMHgyMywgMHgwMSwgMHg4MSwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MTIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MjcsIDB4MDAsCisweDg1LCAweDAwLCAweDA1LCAweDAyLCAweEQwLCAweDA4LCAweDQ0LCAweDI0LCAweDAwLCAweDg1LCAweDQwLCAweDM0LCAweDgyLAorMHhEMSwgMHgwOCwgMHg0MCwgMHg0OCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjUsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTIsIDB4MDksIDB4NTAsIDB4MjQsIDB4MjAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDQwLCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwgMHg5MSwKKzB4MDAsIDB4NjQsIDB4ODIsIDB4RDEsIDB4MTksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MEEsIDB4RDgsCisweDA5LCAweDQwLCAweDYwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDg4LCAweDI3LAorMHgwMCwgMHg5RCwgMHgwMSwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLAorMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MCwgMHgyMCwgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHg0OSwKKzB4Q0EsIDB4MTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsCisweDlGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzYsIDB4MjcsIDB4NTAsIDB4OUYsIDB4ODAsIDB4NUMsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDIwLCAweDlCLCAweDAwLCAweDdFLCAweDEyLCAweEYwLCAweDQ5LCAweEQxLAorMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwKKzB4MDQsIDB4M0MsIDB4NDAsIDB4MzAsIDB4MDEsIDB4RDAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDExLCAweEMwLCAweDA2LCAweDAwLAorMHgxRiwgMHgwMSwgMHg3QywgMHgyMCwgMHhGMCwgMHg5MSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxMywgMHg4MCwgMHg3QywgMHg0MCwKKzB4RjAsIDB4MTEsIDB4QzQsIDB4ODQsIDB4MDQsIDB4MUYsIDB4MTAsIDB4NUMsIDB4NDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4NTMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDlDLCAweDAwLCAweDdELCAweDEyLAorMHhGNCwgMHgwMSwgMHgxMiwgMHgxNywgMHhDMCwgMHgxNCwgMHgyMCwgMHg3MSwgMHgwQSwgMHhFQywgMHgwMSwgMHhEMCwgMHg4NywKKzB4NDgsIDB4OUYsIDB4ODAsIDB4N0QsIDB4MDAsIDB4RjQsIDB4NkQsIDB4RDAsIDB4MDcsIDB4QzAsIDB4MUUsIDB4MDAsIDB4N0QsCisweDAwLCAweEY0LCAweDI5LCAweDcwLCAweDA3LCAweEMwLCAweDk5LCAweDAwLCAweDcxLCAweDgxLCAweENDLCAweDBELCAweEQxLAorMHgxNiwgMHg0NCwgMHgxQywgMHgyMCwgMHg3RCwgMHgwMiwgMHhDNCwgMHgxNSwgMHhDMCwgMHgyNywgMHg0MCwgMHg0MywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RjIsIDB4MDMsIDB4Q0QsIDB4MDEsIDB4MzQsCisweDAzLCAweDEwLCAweDlELCAweDQxLCAweDMwLCAweDAwLCAweEMxLCAweDAyLCAweDA0LCAweDEzLCAweEQwLCAweDJDLCAweDQ4LAorMHhCNywgMHgwMSwgMHhDRCwgMHgxMCwgMHgzNCwgMHgwQiwgMHhEMCwgMHgwQywgMHg0MiwgMHgzMCwgMHgwMSwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDcsIDB4RDAsIDB4MUMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4RDEsIDB4MDgsIDB4MTQsIDB4MDksIDB4RDgsIDB4OUMsCisweDQwLCAweDMxLCAweDEwLCAweDBELCAweDAxLCAweDE0LCAweDBGLCAweEQwLCAweDhELCAweDQwLCAweDQzLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwMSwKKzB4MTAsIDB4MEYsIDB4NDAsIDB4NzgsIDB4NDEsIDB4RjEsIDB4MDEsIDB4ODQsIDB4NDMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsCisweDEwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDFFLCAweDYwLCAweDM4LCAweDAwLCAweEVELCAweDEwLCAweEI0LAorMHgwMSwgMHg1MCwgMHgwRSwgMHg0MiwgMHgzOSwgMHg0MCwgMHgyMSwgMHgwMCwgMHhBNCwgMHgwOCwgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MjksIDB4MDAsIDB4N0QsIDB4MTEsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDU4LCAweDA4LCAweEVGLCAweDAxLCAweEJDLCAweDA3LCAweDMwLAorMHgxRSwgMHhDMCwgMHg3QywgMHgwNSwgMHhFMywgMHgwMSwgMHg4NCwgMHgwNywgMHhGMCwgMHgxNiwgMHhDMCwgMHg3QiwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RjAsIDB4MUYsIDB4NDAsIDB4NTgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDFFLCAweEMwLCAweDdELCAweDAwLCAweEUzLCAweDAxLCAweDlDLCAweDA1LCAweEYwLCAweDBFLCAweEMwLCAweDY5LAorMHgxMCwgMHgyRiwgMHgwMSwgMHg5QywgMHgwNSwgMHhGMiwgMHgxRSwgMHhDNCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QkEsIDB4MTUsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4RjQsIDB4MEQsCisweEM4LCAweDM1LCAweDIzLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhEOCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzQsIDB4MjUsIDB4ODAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MjYsIDB4MDAsCisweDhGLCAweDIwLCAweDdDLCAweDAwLCAweEYyLCAweDAxLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHg4NywgMHhGOSwgMHgwRiwgMHhDMCwKKzB4N0QsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MjUsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDksCisweERDLCAweDA3LCAweEYwLCAweDE3LCAweEMwLCAweDdGLCAweDBBLCAweDdGLCAweDgxLCAweENDLCAweDg3LCAweEYwLCAweDE3LAorMHhDMCwgMHg1RiwgMHgyMiwgMHhGMywgMHgwMSwgMHhDQywgMHgyNSwgMHgzMCwgMHgxQSwgMHhDMCwgMHg3OCwgMHgwMiwgMHgyMywKKzB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4OUIsIDB4QzAsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDIyLCAweDZELCAweDAwLCAweEI0LCAweDE5LCAweEQ4LCAweDQ2LCAweDQwLCAweDNCLAorMHgwNSwgMHhFRCwgMHgwNCwgMHhCNCwgMHg4MywgMHhEMCwgMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwKKzB4ODgsIDB4RDAsIDB4MkUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MTgsIDB4ODUsIDB4MEEsIDB4RDAsIDB4QUUsIDB4NDAsCisweDFGLCAweDAzLCAweDIxLCAweDg0LCAweEM0LCAweDAxLCAweEIwLCAweDRBLCAweDQwLCAweEE4LCAweDAyLCAweDJGLCAweDAwLAorMHg5NCwgMHgwMiwgMHhEMCwgMHg4QSwgMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4ODEsIDB4RDAsIDB4OEEsIDB4NDEsIDB4MzksIDB4MjAsCisweDZELCAweDkwLCAweEI0LCAweDA4LCAweEQxLCAweDIzLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDIwLCAweDk2LCAweDIzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgxMCwgMHhGRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgyMiwgMHg0MCwgMHgzQiwKKzB4NjAsIDB4QjEsIDB4MDAsIDB4RDYsIDB4MDEsIDB4MTEsIDB4MEUsIDB4NDgsIDB4MjgsIDB4MDAsIDB4MjUsIDB4MEEsIDB4ODQsCisweDQwLCAweEQwLCAweDhBLCAweDQxLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgyOCwgMHgwNSwgMHgwMCwgMHg4RCwgMHgwMywgMHg3NCwgMHgwMCwgMHhEMCwgMHgzMCwgMHg0NCwgMHhGMywgMHgwMCwgMHgxRCwKKzB4MDMsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QzAsIDB4MDAsIDB4MEQsIDB4MDIsIDB4NzQsIDB4MEMsIDB4RDAsCisweDM5LCAweDAwLCAweEU3LCAweDAwLCAweDlELCAweDAyLCAweDQ0LCAweDBFLCAweEQwLCAweDA4LCAweDQwLCAweEUzLCAweDAwLAorMHg4MSwgMHgwMiwgMHgxNCwgMHgwOCwgMHg5MCwgMHgxQywgMHg0NCwgMHgyMCwgMHgwNCwgMHgwRCwgMHgwMCwgMHg1NiwgMHgwQywKKzB4RDAsIDB4MjgsIDB4NDEsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MjgsCisweDI1LCAweDAwLCAweDFGLCAweDA2LCAweDdFLCAweDAyLCAweEQ4LCAweDkxLCAweEM4LCAweEI5LCAweDAwLCAweDFGLCAweDAxLAorMHg3QywgMHgxNiwgMHhGMCwgMHg1OSwgMHhDMCwgMHg4NCwgMHgwNCwgMHgxRCwgMHgwNywgMHg1QywgMHgwNiwgMHhGMCwgMHgxOSwKKzB4QzAsIDB4MjcsIDB4MDQsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDYsIDB4RjAsIDB4NTgsIDB4QzAsIDB4NjcsIDB4MDIsIDB4QzMsCisweDAwLCAweDFDLCAweDRELCAweDEwLCAweDhDLCAweEQwLCAweEUwLCAweDAxLCAweDE3LCAweDAwLCAweDRDLCAweDBFLCAweEYwLAorMHgwMSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsCisweDBBLCAweEYwLCAweDA5LCAweEMwLCAweDA3LCAweDA4LCAweDFGLCAweDAyLCAweDdDLCAweDZBLCAweEYwLCAweDg5LCAweEMxLAorMHhBNywgMHgwNCwgMHg5RiwgMHgxMCwgMHg3QywgMHg2MCwgMHhGMCwgMHgwOSwgMHhDOCwgMHg4NywgMHgwMiwgMHgxRiwgMHgyMywKKzB4NkMsIDB4MDAsIDB4RjAsIDB4OEQsIDB4QzIsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJELCAweDAwLAorMHgzMywgMHgxMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhFMiwgMHgzRiwgMHgwNCwgMHhCMywgMHgwMCwgMHhDQywgMHgwMCwKKzB4MzgsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDQsIDB4QkYsIDB4MTAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MDMsIDB4QzIsIDB4MkMsCisweDgwLCAweDMzLCAweDAwLCAweENDLCAweDAwLCAweDM0LCAweDAzLCAweEMwLCAweDJDLCAweDAwLCAweDdGLCAweDEwLCAweENDLAorMHg0MSwgMHgzMSwgMHgwRiwgMHhDMCwgMHgyRCwgMHgxMCwgMHgzMywgMHgwMCwgMHhGQywgMHg0MiwgMHgzMCwgMHgwQSwgMHhDMCwKKzB4MDQsIDB4MjQsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RTYsIDB4MDAsIDB4OTEsCisweDA1LCAweDc0LCAweDA2LCAweDEyLCAweDM5LCAweDQwLCAweDM3LCAweDAwLCAweDkxLCAweDgxLCAweDQ0LCAweDA0LCAweEI4LAorMHgxOSwgMHg0NCwgMHg0NywgMHgzMCwgMHg5RCwgMHg0MywgMHg1QywgMHgwRSwgMHgxMCwgMHgzMSwgMHg0MCwgMHg2NSwgMHgwMCwKKzB4MUYsIDB4MDEsIDB4NDQsIDB4MEMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDEsIDB4NUQsIDB4MDIsIDB4NEMsIDB4MEMsCisweDcwLCAweDNELCAweDQwLCAweEU0LCAweDAwLCAweDk1LCAweDAxLCAweDc0LCAweDBDLCAweDEyLCAweDcxLCAweDQwLCAweDA0LAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhDNCwgMHg0MCwgMHgxMSwgMHgwMSwKKzB4NzQsIDB4MDYsIDB4MTQsIDB4MzksIDB4NDQsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NDQsIDB4NDYsIDB4MUEsIDB4MTEsCisweDQxLCAweDY3LCAweDAwLCAweDlELCAweDQzLCAweDc0LCAweDA2LCAweDEwLCAweDExLCAweDQwLCAweDQ0LCAweDA0LCAweDExLAorMHgwMSwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxOSwgMHg2NCwgMHg2NiwgMHgwMCwgMHhERCwgMHgwMiwgMHg0NCwgMHg0NSwgMHgxMCwKKzB4QTUsIDB4NDAsIDB4NjYsIDB4MjAsIDB4MTksIDB4ODEsIDB4NzQsIDB4MEUsIDB4MTEsIDB4MTEsIDB4NTQsIDB4MDQsIDB4MDgsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDAxLCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwMCwgMHg2OCwgMHgzNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MDAsCisweDA1LCAweDAyLCAweDFDLCAweDA5LCAweDY0LCAweDAyLCAweDAwLCAweDFELCAweDAwLCAweDQ1LCAweDAwLCAweDk0LCAweDBELAorMHg0MCwgMHgwMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MTEsIDB4MDAsIDB4N0MsIDB4MDAsCisweDMwLCAweDA5LCAweDYwLCAweDNGLCAweDQwLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDE0LCAweDAxLCAweEMwLCAweDI3LAorMHgyMCwgMHg5RiwgMHgwMCwgMHg3RSwgMHg4MiwgMHgzMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0QywKKzB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4RDAsCisweDI3LCAweDA4LCAweDFCLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEQwLCAweDA0LCAweDY0LCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMSwKKzB4MDMsIDB4QzIsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4ODAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDA4LCAweDJGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRCwgMHgwMCwgMHgyRiwgMHg0MCwgMHhDQywgMHgwMCwgMHg1OSwgMHgwRiwgMHhDOCwgMHgyRCwKKzB4MDAsIDB4MzcsIDB4ODAsIDB4RkMsIDB4MDIsIDB4RjQsIDB4MEIsIDB4QzgsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDBGLCAweDAwLCAweDNGLCAweDQxLCAweEVDLCAweDAyLCAweEYwLCAweDBGLAorMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhCRSwgMHgwNywgMHhGMCwgMHgwMywgMHhDMSwgMHgzRSwgMHgwMCwgMHhBMywKKzB4MDEsIDB4REMsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4QUMsIDB4MDEsIDB4REMsIDB4MzMsIDB4MzQsCisweDNGLCAweEMwLCAweDJGLCAweDgwLCAweEEzLCAweDAxLCAweEZDLCAweDUzLCAweEYwLCAweDgzLCAweEMwLCAweDRGLCAweDAwLAorMHgzMywgMHgwMSwgMHhCQywgMHgwQywgMHgzMCwgMHgxMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4MjcsIDB4MTIsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEYsIDB4NDQsCisweDA0LCAweDE0LCAweDFELCAweDAwLCAweDU1LCAweDA3LCAweEQwLCAweDIxLCAweDUwLCAweDNDLCAweDAwLCAweDkxLCAweDQxLAorMHg0NCwgMHgwMiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyNywgMHgyMCwgMHg5RCwgMHgxMSwgMHg1NCwgMHgzQiwgMHgxMCwgMHg0RCwKKzB4NDAsIDB4MjcsIDB4MjAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MEYsIDB4RDIsIDB4MEIsIDB4NDAsIDB4MDcsIDB4MDgsIDB4MTEsCisweDgwLCAweDc0LCAweDAwLCAweDE0LCAweDA1LCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNSwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgyMCwKKzB4MDgsIDB4OEQsIDB4MDAsIDB4MzUsIDB4MDIsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MTQsCisweDAyLCAweDEwLCAweDA4LCAweDQ0LCAweDAzLCAweDAwLCAweDlELCAweDAwLCAweDE0LCAweDAzLCAweDkwLCAweDBDLCAweDYwLAorMHgyMywgMHgwMCwgMHg4MSwgMHgwNCwgMHgzNCwgMHgwMywgMHhEMCwgMHg1OCwgMHg0OCwgMHgyMywgMHgxNSwgMHg4MSwgMHgxNCwKKzB4MzQsIDB4MTAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweDg4LCAweDY1LCAweDEwLCAweDFELCAweDAzLCAweDQ0LCAweDBDLCAweEQwLCAweDBELCAweDQwLCAweDQ0LCAweDAwLAorMHgxRCwgMHgwMSwgMHg1NCwgMHgxMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgzNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwNiwKKzB4MTQsIDB4MTksIDB4NDAsIDB4NDcsIDB4MTQsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MjcsCisweDQyLCAweDkxLCAweDIwLCAweDc0LCAweDAzLCAweEQwLCAweDFELCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDAwLCAweDc0LAorMHgwNCwgMHgxMCwgMHgwNSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODgsIDB4NDcsIDB4MDQsIDB4MUYsIDB4MDEsIDB4NEMsIDB4OEUsIDB4RjEsIDB4MEQsIDB4QzgsIDB4NjQsIDB4MjAsIDB4MEYsCisweDQzLCAweDdELCAweDA3LCAweDcwLCAweDU1LCAweEMwLCAweDM1LCAweDQwLCAweEMzLCAweDAwLCAweDVDLCAweDE0LCAweDMwLAorMHg1OSwgMHhDMCwgMHhFNywgMHgwMCwgMHg4RSwgMHgwMCwgMHg1QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgyMCwKKzB4RDEsIDB4MjAsIDB4N0MsIDB4MDMsIDB4RjIsIDB4MTksIDB4QzIsIDB4NDcsIDB4MDAsIDB4MTMsIDB4ODEsIDB4M0MsIDB4MDIsCisweDM0LCAweDAxLCAweEMwLCAweDBCLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDgwLAorMHgyRCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQywgMHg0MiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4ODcsIDB4QzAsIDB4MzgsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4NDIsIDB4RjAsIDB4MEIsCisweEMxLCAweDJGLCAweDAwLCAweEJGLCAweDA0LCAweEJDLCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDdCLCAweDIwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMywgMHhEMCwgMHgwOSwgMHhDMCwgMHg0RiwgMHgwMiwgMHgzRiwgMHgwOSwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MDcsIDB4QzEsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MDUsCisweDAwLCAweDEzLCAweDAyLCAweDVELCAweDBBLCAweEYwLCAweDBELCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHg4MiwgMHgzMCwgMHgyNywgMHhDMCwgMHgzNCwgMHg0NCwgMHhEMywgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNiwKKzB4ODcsIDB4MDQsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MjAsCisweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAxLCAweDdDLCAweDAyLCAweDMwLCAweDAxLAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MkYsIDB4QzUsIDB4MjYsIDB4MDAsIDB4OUIsIDB4MjAsIDB4NzQsIDB4MDIsCisweEIwLCAweDQ1LCAweDQwLCAweDdDLCAweDQwLCAweEQxLCAweDAxLCAweDZDLCAweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDg3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHhDNCwgMHgwMywgMHgxMiwgMHgwRCwgMHg0MCwgMHhCNywgMHgwNiwgMHg5MSwgMHgwQSwgMHhDNCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4RTQsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NzQsIDB4NDIsIDB4MTAsIDB4MDUsIDB4NDAsCisweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDIyLCAweDgwLCAweDAxLAorMHgxMiwgMHgwNCwgMHgyMCwgMHhEMCwgMHgzQywgMHg0MSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgyNCwgMHgwMywgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MzAsIDB4MjAsIDB4OEQsIDB4MTMsIDB4MjQsIDB4MDgsIDB4OTAsIDB4MjAsIDB4NDAsIDB4ODMsIDB4MDAsCisweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDBDLCAweDAwLCAweDIzLCAweDAwLCAweDgxLCAweDAyLCAweDA0LCAweDAzLAorMHhDMCwgMHgwOCwgMHg0MCwgMHg5MCwgMHgxNCwgMHg0MSwgMHgxMiwgMHgzNCwgMHg4NSwgMHgxMCwgMHgwOCwgMHg0MCwgMHgxRiwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4ODAsIDB4NjgsIDB4NDAsIDB4MjEsIDB4MDEsCisweDg0LCAweDA3LCAweEQwLCAweDFDLCAweDQwLCAweDVBLCAweDAwLCAweEU5LCAweDAxLCAweEY0LCAweDA3LCAweDkwLCAweDEwLAorMHg1NCwgMHg3MCwgMHgyNiwgMHhBRCwgMHg5MSwgMHhBNCwgMHgwNSwgMHhEMCwgMHgxMiwgMHgwOCwgMHg2QiwgMHgwMiwgMHhGRCwKKzB4MDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QjUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsCisweDlBLCAweDQwLCAweDU4LCAweDAyLCAweDYxLCAweDgxLCAweEY0LCAweDBELCAweDEyLCAweDlFLCAweDQwLCAweDEzLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgyNCwgMHgwMiwgMHgxMSwgMHgwMCwgMHgxRCwKKzB4MjEsIDB4RjAsIDB4MEMsIDB4NDAsIDB4QjQsIDB4MDAsIDB4QzMsIDB4MDIsIDB4M0MsIDB4MDMsIDB4MzAsIDB4NDAsIDB4QzAsCisweDMwLCAweDAyLCAweENGLCAweDAwLCAweDJDLCAweDAwLCAweEIzLCAweDg0LCAweEMwLCAweDEzLCAweDhBLCAweENGLCAweDAwLAorMHg1QywgMHgwMywgMHg3MCwgMHgwQywgMHhDMCwgMHgyNywgMHg0MCwgMHg4MywgMHgwOCwgMHgwQywgMHgwMywgMHhGMCwgMHgwQywKKzB4QzAsIDB4MzQsIDB4MDIsIDB4QzMsIDB4MDQsIDB4M0MsIDB4MDEsIDB4MzAsIDB4MDgsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDJELCAweDAwLCAweDdGLCAweDg4LCAweEZDLCAweDAxLAorMHhDMCwgMHgwRiwgMHhDMSwgMHgxRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwMywgMHhDMCwgMHhCRiwKKzB4MDYsIDB4RjMsIDB4MDgsIDB4RkMsIDB4MjEsIDB4RjAsIDB4OEYsIDB4QzgsIDB4M0YsIDB4QTIsIDB4RkYsIDB4MDgsIDB4RkMsCisweDIzLCAweEYwLCAweDBGLCAweEMwLCAweDNFLCAweDAyLCAweEJCLCAweDIwLCAweEZELCAweDQzLCAweEYwLCAweDBGLCAweEMwLAorMHgzRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMiwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MkYsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsCisweDRELCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEY4LCAweDAxLCAweEMwLCAweEI2LCAweDQwLAorMHhEMywgMHgwMSwgMHg3QywgMHg4MSwgMHhGMiwgMHgwNSwgMHhDOCwgMHg3NywgMHgwMCwgMHg5MywgMHgwMCwgMHg2QywgMHgyMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MjksIDB4QzAsIDB4NTQsCisweDAwLCAweDUzLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDU2LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4OCwgMHgyOSwgMHgwMCwgMHgyRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDEsIDB4M0IsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDMsIDB4NTAsIDB4MzgsIDB4MDEsIDB4RTEsCisweDAwLCAweDg0LCAweDAzLCAweEQxLCAweDBFLCAweDQwLCAweDNGLCAweDAwLCAweEExLCAweDAwLCAweDk0LCAweDgzLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNiwgMHgxMywgMHhEMCwgMHg4QSwgMHg0MCwgMHgxOSwgMHgwMCwKKzB4NjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDIsIDB4MEUsIDB4NDAsIDB4NDgsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDY5LCAweDAwLCAweDNELCAweDAxLCAweDg0LCAweDBGLCAweEQxLCAweDVFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhFRCwgMHg4MSwgMHhCNCwgMHgwNywgMHhEMiwgMHgxMiwgMHg0MCwgMHg3MSwgMHgwMCwgMHhFMSwgMHgxMSwKKzB4OTQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4QjksIDB4NDMsIDB4MjQsIDB4MDcsIDB4NTAsIDB4MUUsCisweDQwLCAweDczLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDE3LCAweEQwLCAweDFDLCAweDQxLCAweDc4LCAweDAwLCAweEUxLAorMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwgMHgwRSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MjgsIDB4NzMsIDB4MTAsIDB4Q0QsIDB4NDAsIDB4MDQsIDB4MEYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4QjMsCisweDAwLCAweENELCAweDAyLCAweDM0LCAweDAzLCAweEQwLCAweDY5LCAweDQwLCAweDM3LCAweDAwLCAweEMxLCAweDAwLCAweDA2LAorMHgyNywgMHhEMCwgMHg5RCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5OSwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwKKzB4NzcsIDB4MDIsIDB4ODksIDB4MDgsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NkQsIDB4NDIsIDB4MzEsIDB4MDAsIDB4RDEsIDB4MDAsCisweDQ0LCAweDAzLCAweEQwLCAweDBDLCAweDUwLCAweDQ4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNywgMHhBOCwgMHg1RCwgMHgwMSwgMHg3RiwgMHgwMiwgMHhDRCwgMHgwNSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1RiwgMHgwNCwKKzB4N0QsIDB4MEIsIDB4N0MsIDB4ODEsIDB4RjAsIDB4MzcsIDB4QzAsIDB4MTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4REMsIDB4MDksCisweEYwLCAweEE3LCAweEMwLCAweDFGLCAweDQxLCAweDVCLCAweDAwLCAweDZDLCAweDAxLCAweDM0LCAweDA1LCAweEMwLCAweDE3LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgzNywgMHhFMCwgMHgxNCwgMHg0MCwgMHg1MywgMHgwMCwgMHg0RCwKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NUUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDEyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweENDLCAweDA3LCAweDAwLCAweDFGLAorMHgwQSwgMHg3QywgMHgwMCwgMHhGOCwgMHg4MSwgMHg0MCwgMHgwNCwgMHgxMCwgMHgxRiwgMHgwMiwgMHg1QywgMHg0OCwgMHhGOCwKKzB4MjEsIDB4QzIsIDB4MDcsIDB4MDEsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjEsIDB4MDEsIDB4QzAsIDB4ODcsIDB4NDAsCisweDE3LCAweDAwLCAweDdDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA0LAorMHhGMCwgMHgwMSwgMHhDOCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKKzB4MjMsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEUsIDB4NjIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDQsIDB4ODcsIDB4MDQsCisweDRDLCAweDgyLCAweEYwLCAweDA5LCAweEM0LCAweDI0LCAweDEwLCAweDkzLCAweDQwLCAweDdDLCAweDAyLCAweEYyLCAweDA5LAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5RSwgMHg4MCwgMHgyQywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwOCwgMHg5MywKKzB4MDUsIDB4NzgsIDB4MDYsIDB4RjAsIDB4MDksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4MzAsCisweDM5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LAorMHgwMCwgMHg4MSwgMHgwNCwgMHg0NCwgMHgwQSwgMHhEMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgxMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MjYsIDB4NDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MTYsIDB4RDAsIDB4MTksIDB4NDAsCisweEE0LCAweDAwLCAweDlELCAweDgwLCAweDRDLCAweDgyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDQxLCAweDkxLCAweDAxLAorMHg3NCwgMHgwNiwgMHhEMiwgMHgwOSwgMHg0MCwgMHhBNCwgMHgyMCwgMHg5RCwgMHgwMywgMHg0NCwgMHgwMiwgMHgxMiwgMHgwOCwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDgsCisweDk5LCAweDAwLCAweDQ0LCAweDhBLCAweEQwLCAweDY5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDgyLAorMHg1MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMiwgMHg5OSwgMHgyMSwgMHg1NiwgMHgxMiwgMHg5MCwgMHg2OSwgMHg0MiwgMHgyNCwKKzB4ODYsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NzQsCisweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweEJELCAweDA0LCAweEM0LCAweDAyLCAweDFDLCAweDBGLCAweDQwLAorMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMSwgMHg5MSwKKzB4MDAsIDB4MDQsIDB4ODIsIDB4RDAsIDB4NjgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4RDIsCisweDQ4LCAweDQwLCAweDMwLCAweDAxLCAweEM5LCAweDAwLCAweDM0LCAweDFBLCAweEQ4LCAweDA4LCAweDQxLCAweDIwLCAweDgwLAorMHg4RCwgMHgwMCwgMHgwNCwgMHgyMiwgMHgxMCwgMHgwOCwgMHg1MCwgMHgyMCwgMHgwMSwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMiwKKzB4RDAsIDB4NDgsIDB4NDAsIDB4NjksIDB4MDAsIDB4QUQsIDB4MDEsIDB4ODQsIDB4MDYsIDB4MDAsIDB4MEIsIDB4NDAsIDB4NDAsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDg2LCAweDIyLCAweDFCLCAweDBBLAorMHg0NSwgMHgxOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxRiwgMHgwNiwgMHg0QywgMHgwMCwgMHhGMCwgMHhBMSwKKzB4NTAsIDB4ODQsIDB4MDIsIDB4MUIsIDB4MDAsIDB4NUMsIDB4MDgsIDB4QjAsIDB4NjEsIDB4RDAsIDB4ODQsIDB4MDAsIDB4MUYsCisweDBBLCAweDZDLCAweDU4LCAweDcxLCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDAwLCAweEYwLAorMHhBMSwgMHhDMCwgMHg4MywgMHgwMiwgMHgwRiwgMHg0QSwgMHg0QywgMHgyOCwgMHgzMCwgMHhBMiwgMHhEMCwgMHg3NCwgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MkYsIDB4MTIsIDB4QkYsIDB4MDAsIDB4RkMsCisweDVBLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDQ2LCAweEZELCAweDAyLCAweEYwLCAweDhCLCAweEMwLAorMHgyNywgMHgyMiwgMHhBNywgMHgyMCwgMHhGQywgMHgwQSwgMHhGMCwgMHg0QiwgMHhDMywgMHgyRiwgMHgyNywgMHhBRiwgMHgwMCwKKzB4NUMsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MkYsIDB4MDIsIDB4QkQsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4OEIsCisweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDdELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDYwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyNywgMHgwNSwgMHhCRiwgMHgwOCwgMHhFQywgMHgwMiwKKzB4MzAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QkYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4MzAsIDB4Q0EsIDB4QzAsIDB4MkMsCisweDAwLCAweDgzLCAweDQwLCAweEQwLCAweDIyLCAweEYwLCAweDRCLCAweEMwLCAweDJGLCAweDA1LCAweDhGLCAweDg4LCAweDVDLAorMHg4MiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCMywgMHgwMCwgMHhGQywgMHgxNiwgMHhGMCwgMHg0OSwgMHhEMCwKKzB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MjIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDAzLCAweDAxLCAweDVELCAweDA0LCAweDQ0LCAweDQ4LCAweDE0LAorMHgwMSwgMHg0OSwgMHgwNCwgMHgwMiwgMHgxNywgMHgxNCwgMHg3NCwgMHgwMCwgMHgxNCwgMHhDMSwgMHg0NCwgMHg4MCwgMHgwNCwKKzB4MTEsIDB4MDAsIDB4NDQsIDB4MjAsIDB4RDIsIDB4NDEsIDB4NDksIDB4MDcsIDB4MjEsIDB4MUQsIDB4MDQsIDB4NDQsIDB4NDgsCisweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAyLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQyLCAweDgxLCAweDQwLCAweDE2LAorMHgwNCwgMHg1RCwgMHg5MCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg3MSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4MjMsIDB4MDUsIDB4OEQsIDB4MDQsIDB4MDUsIDB4MzIsIDB4MTAsIDB4ODgsCisweDQwLCAweDIwLCAweDAwLCAweDhELCAweDhELCAweDc0LCAweDAyLCAweDExLCAweDU4LCAweDQwLCAweDIwLCAweDQzLCAweDgxLAorMHg0MCwgMHgxNiwgMHgwMiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMywgMHgwNSwgMHg4RCwgMHgyNCwgMHgxNCwgMHgzMiwgMHg5MCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MEEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDEsCisweDhELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwNCwgMHg0NCwgMHg0MiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4QTQsIDB4MDEsIDB4OTUsIDB4NDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDIsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsCisweDQ2LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4RCwKKzB4MjAsIDB4NDUsIDB4MDIsIDB4MDAsIDB4MDksIDB4NDAsIDB4NjEsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAyLCAweDlGLCAweDAxLCAweDQ0LCAweDAyLCAweDMwLCAweDA5LCAweEQwLCAweDI0LAorMHgwMCwgMHg5RiwgMHgwMSwgMHgzQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhGMCwgMHgyNCwgMHgwMCwgMHg4MywgMHgwMSwgMHg1QywKKzB4MUEsIDB4RDIsIDB4MzksIDB4QzUsIDB4MjcsIDB4MjQsIDB4OUUsIDB4MDAsIDB4NUUsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsCisweDY3LCAweDQwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEE3LCAweDAwLCAweDlGLCAweDAyLAorMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTYsIDB4ODAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4MUMsIDB4MjYsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsCisweDk3LCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDgyLCAweDdDLCAweEMyLAorMHhGMCwgMHg0OSwgMHhDMCwgMHhFNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhFNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsCisweDQyLCAweEY0LCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHg0OCwgMHhGMCwgMHgwMSwgMHhEMywgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDgsIDB4RjMsCisweDIxLCAweEM1LCAweEM3LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxQiwgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NCwgMHg0MSwgMHgxMywgMHgwMiwgMHg0RCwgMHgwMCwKKzB4RjAsIDB4NDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsCisweDE0LCAweDAwLCAweDcxLCAweDA3LCAweEM1LCAweDBELCAweDcwLCAweDE3LCAweDQwLCAweDE0LCAweDAwLCAweDdELCAweDA0LAorMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MiwgMHg1OCwgMHgwMCwgMHg1MSwgMHgwMCwgMHhENCwgMHgwOSwgMHhEMCwgMHgyNywKKzB4NDAsIDB4MUYsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDQsIDB4MDEsIDB4NzgsIDB4MDUsIDB4NDAsIDB4NUYsIDB4MDAsIDB4NzEsCisweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweEMwLCAweDFFLCAweDAwLCAweDcxLCAweDExLCAweDg0LCAweDA1LCAweEQyLAorMHgyNywgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwKKzB4MDAsIDB4OTEsIDB4MDcsIDB4MjQsIDB4MkYsIDB4NTAsIDB4MUMsIDB4NDAsIDB4MzAsIDB4ODAsIDB4NEQsIDB4MTEsIDB4MzQsCisweDAzLCAweEQwLCAweDBELCAweDQwLCAweDMyLCAweDEwLCAweEM5LCAweDA2LCAweDA0LCAweDA3LCAweEQwLCAweDNDLCAweDQwLAorMHgzMywgMHg4MCwgMHhERCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgzNywgMHg4NiwgMHg4RCwgMHgwMCwKKzB4MzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MkYsIDB4RDAsIDB4MDEsCisweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDc4LCAweDAwLAorMHgyMSwgMHgyNCwgMHg4NCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MSwgMHgzOCwgMHgwMiwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEIsIDB4NTAsIDB4MjgsIDB4MDUsIDB4NjksIDB4MTAsIDB4QjQsIDB4MDksIDB4RDAsIDB4MkUsIDB4NDIsIDB4M0IsCisweDA0LCAweEZELCAweDAwLCAweDg0LCAweDAzLCAweDUxLCAweDBFLCAweDQwLCAweDFCLCAweDAwLCAweDI1LCAweDAwLCAweEI0LAorMHgwMiwgMHhEMiwgMHg0RiwgMHg2NCwgMHg3QSwgMHgyMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg2MCwKKzB4MTcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NzgsIDB4MDAsIDB4MjMsCisweDA3LCAweEFELCAweDA1LCAweDcwLCAweDE0LCAweEMwLCAweDc4LCAweDAxLCAweEVGLCAweDAxLCAweEJDLCAweDA3LCAweEYwLAorMHg5RSwgMHhDMCwgMHg2OCwgMHg0MSwgMHhBOSwgMHgwOSwgMHg4QywgMHgwNywgMHhGMywgMHgxRSwgMHhDMCwgMHg3QiwgMHgxMCwKKzB4RUYsIDB4MDEsIDB4OTQsIDB4MTcsIDB4NzAsIDB4M0UsIDB4ODAsIDB4N0YsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDVFLCAweDgwLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDE2LCAweEMwLCAweDU3LAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHhCNSwgMHg0MiwgMHgwRiwgMHgwMCwKKzB4N0MsIDB4MDEsIDB4NzIsIDB4MDUsIDB4QzAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NDksCisweEQwLCAweDA3LCAweDBBLCAweDE3LCAweDAwLCAweDVDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwNiwgMHg3QywgMHgwMywgMHg3MCwgMHgxRCwgMHhDMCwgMHgyNywgMHg0MCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MUMsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweEZGLCAweDAwLCAweEIzLCAweDAxLCAweENDLAorMHgyMywgMHhGMCwgMHg1RiwgMHhDMiwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4NkMsIDB4MDAsIDB4RkIsIDB4NDEsIDB4QzgsIDB4MjcsIDB4MzAsIDB4MTcsIDB4QzAsIDB4NUYsIDB4MjAsIDB4RkYsIDB4MTMsCisweERDLCAweDQ3LCAweEIwLCAweDFGLCAweEM4LCAweDdGLCAweDAwLCAweEJGLCAweDAxLCAweERDLCAweDA2LCAweDMwLCAweDFGLAorMHhEMSwgMHg3QywgMHgwMCwgMHhGRiwgMHg4MSwgMHhGQywgMHg4NywgMHhGMCwgMHgxQiwgMHhDMCwgMHgwMywgMHgwOCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4M0QsIDB4MDAsIDB4QTEsIDB4MEEsIDB4ODQsIDB4MDksCisweDcwLCAweDBFLCAweDQ4LCAweDNCLCAweDA0LCAweEFELCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBGLCAweDQwLCAweDI4LAorMHgxMCwgMHg2MSwgMHgwNCwgMHhDNCwgMHgyMywgMHgxMCwgMHg4NiwgMHg0MCwgMHgzQiwgMHgwQSwgMHhFRCwgMHgwMCwgMHhDNCwKKzB4MDMsIDB4QjIsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4M0QsIDB4MDAsIDB4ODQsIDB4MDIsIDB4QjAsIDB4MEUsIDB4NDAsCisweDM4LCAweDAwLCAweEFELCAweDg4LCAweEI0LCAweDIyLCAweEQwLCAweDAyLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgzOSwgMHgwMCwgMHgzMSwgMHgwMCwgMHg4NCwgMHgyMywgMHhEOCwKKzB4NDYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDIsIDB4RjQsIDB4MDMsIDB4OTAsIDB4MkUsIDB4NDAsIDB4MjAsIDB4MDAsCisweEExLCAweDIwLCAweDg2LCAweDIyLCAweDk4LCAweDJBLCAweDQwLCAweDhCLCAweDAwLCAweEVELCAweDAwLCAweDk0LCAweDAzLAorMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgyMywgMHgxMCwgMHgwQywgMHg0MCwgMHgxOCwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MDMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDMzLCAweDA0LCAweDAxLCAweDAzLCAweDQ1LCAweDAwLCAweDUwLCAweDAxLAorMHg0MCwgMHhGMywgMHgwMCwgMHg5RCwgMHg0MCwgMHgzNiwgMHg4MywgMHg5MCwgMHgwQywgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MDYsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDQsIDB4MjMsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsCisweDBDLCAweDQwLCAweDMzLCAweDAyLCAweDRELCAweDA4LCAweDA0LCAweDAzLCAweDkwLCAweDFDLCAweDQwLCAweDIwLCAweDAwLAorMHhDRCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxNCwgMHg0MCwgMHgxMywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4QkQsIDB4NDAsIDB4NzMsIDB4MTEsIDB4NEMsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzAsCisweDNGLCAweDEwLCAweDVGLCAweDAzLCAweDc0LCAweDgzLCAweEI0LCAweDA5LCAweDQwLCAweDJDLCAweDAwLCAweEQzLCAweDAwLAorMHg0QywgMHgxQSwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMywgMHgzMCwgMHgwRiwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4MUMsIDB4MDIsIDB4MzAsIDB4QkYsIDB4QzEsIDB4MzQsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDE0LCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHg1RiwgMHgwNiwgMHg3QywgMHg2MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywKKzB4MDEsIDB4NUYsIDB4MDEsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4RDcsIDB4MDIsIDB4N0QsCisweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYyLCAweDBELCAweEM0LAorMHgyNywgMHgwMCwgMHg1RiwgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhFMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMiwKKzB4N0MsIDB4MEIsIDB4RjEsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDNGLCAweDAwLCAweDczLCAweDA4LCAweENDLCAweDAwLCAweDMwLCAweDBCLCAweEMyLCAweDM4LCAweDAwLAorMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMSwgMHgxQiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHg0MCwKKzB4RjAsIDB4MEEsIDB4QzQsIDB4MDgsIDB4MDAsIDB4RjMsIDB4MDAsIDB4QkMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MkYsCisweDAwLCAweDdGLCAweDAxLCAweDRDLCAweDA2LCAweDMwLCAweDBFLCAweEM4LCAweDNDLCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMywgMHgzMCwgMHg4MywgMHhDMCwgMHgwMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MzYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NDUsIDB4MEMsIDB4MTEsIDB4MzksIDB4NDEsIDB4MzQsIDB4MDAsIDB4RDEsCisweDAxLCAweDJDLCAweDAzLCAweDUwLCAweDA5LCAweDQwLCAweDQ0LCAweDAwLCAweEMxLCAweDAyLCAweDdDLCAweDBDLCAweEQwLAorMHgzMSwgMHhDMCwgMHg0NiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwRCwgMHhDMCwgMHg2NSwgMHgwMCwKKzB4NUQsIDB4MDIsIDB4NkMsIDB4MDYsIDB4MTQsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDQsIDB4NzAsIDB4MDcsCisweDEwLCAweDA5LCAweDQwLCAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEE4LAorMHgzMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwNiwgMHg5MCwgMHgxMSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMSwKKzB4NDQsIDB4MDMsIDB4MTgsIDB4ODgsIDB4NDAsIDB4MjQsIDB4MDEsIDB4RDEsIDB4MTQsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MTEsCisweDQwLCAweDQ0LCAweDAwLCAweEQxLCAweDAwLCAweDU0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDY3LCAweDA0LCAweDQ5LAorMHgwNiwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgyMiwgMHhERCwgMHg0MCwgMHg3NCwgMHgwRiwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsCisweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDAyLCAweDkwLCAweDA4LCAweDU2LCAweDMwLCAweDQwLCAweEMxLCAweDAwLCAweDQ1LAorMHgwMywgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDAsIDB4MjEsIDB4MDAsIDB4NEQsIDB4MDAsCisweDI0LCAweDAyLCAweDEwLCAweDBDLCAweDAwLCAweDMwLCAweDA4LCAweDhELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDA1LAorMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgzRSwgMHgxMCwKKzB4MTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4QjAsIDB4MDEsIDB4NDIsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MjAsIDB4NDYsIDB4MDMsCisweDMwLCAweDBCLCAweEMwLCAweDI2LCAweDAwLCAweDUzLCAweDAwLCAweDQ0LCAweDAwLCAweEYxLCAweDA5LCAweDQwLCAweDA0LAorMHg0MCwgMHhFMywgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4MzAsIDB4MEQsIDB4OTAsIDB4MTQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MDksIDB4RDAsCisweDAwLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDk4LCAweDNGLCAweDAwLCAweDJGLAorMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwQiwgMHhDNCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwKKzB4MEIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MEYsIDB4MDAsCisweEZGLCAweDIwLCAweEZDLCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDJELCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwOCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4RkYsIDB4MDAsIDB4RkYsIDB4MDksCisweEZDLCAweDMyLCAweEYwLCAweDRGLCAweEUxLCAweDJELCAweDIxLCAweEZGLCAweDA5LCAweEZDLCAweDAwLCAweEYwLCAweDBGLAorMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgxQywgMHhDQywgMHg1MiwgMHhGMCwgMHg0RiwgMHhDMCwgMHg3QywgMHg4MCwgMHhGRiwKKzB4MDAsIDB4Q0MsIDB4MTMsIDB4QjAsIDB4MEYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4ODQsIDB4QkMsIDB4MDUsIDB4MzAsCisweDFGLCAweEMwLCAweDdDLCAweDQwLCAweEZCLCAweDAxLCAweENDLCAweDA0LCAweEIwLCAweDBCLCAweEMwLCAweDBDLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhDRCwgMHgwMCwgMHg3NCwKKzB4M0EsIDB4RDAsIDB4M0YsIDB4NDAsIDB4QTcsIDB4MDMsIDB4REQsIDB4MDQsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MkYsIDB4NDAsCisweEZDLCAweDAwLCAweEZELCAweDA2LCAweDQ0LCAweDFBLCAweEQwLCAweEJGLCAweDQ2LCAweDc0LCAweDAwLCAweEZELCAweDA2LAorMHhDNCwgMHgzQiwgMHgzNCwgMHhBRiwgMHg0MCwgMHg3NCwgMHgwMCwgMHhGQywgMHgwMiwgMHg3NCwgMHgwNSwgMHgxMCwgMHgxRCwKKzB4NDAsIDB4NzQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NTQsIDB4MDMsIDB4NTIsIDB4MDEsIDB4NDAsIDB4MEQsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAxLCAweENELCAweDAwLCAweDM0LCAweDAwLAorMHhEMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwNCwgMHhDRCwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4QywgMHg0MCwgMHgzMiwKKzB4MDIsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4NDAsIDB4RDEsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MTgsIDB4MDQsCisweDQzLCAweDEwLCAweDBDLCAweDQyLCAweDMwLCAweDAwLCAweENELCAweDAyLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLAorMHgzMSwgMHgwMCwgMHg0OSwgMHg4MCwgMHgwNCwgMHgwMSwgMHg4MCwgMHgwOCwgMHg2MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEMsIDB4RDAsCisweDBELCAweDQwLCAweDQ3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDBFLCAweEQwLCAweDBELCAweDQwLCAweDM2LCAweDAwLAorMHhERCwgMHgwMCwgMHg0NSwgMHgwNiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgxMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MTQsIDB4REQsIDB4MDAsIDB4NzQsIDB4MjEsIDB4MTAsIDB4MEQsIDB4NjAsIDB4NzQsCisweDkwLCAweDExLCAweDAwLCAweDU2LCAweDAxLCAweDA5LCAweDMxLCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4NjcsIDB4MDQsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDQsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REYsCisweDIwLCAweDRDLCAweDFFLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg4MSwgMHgzMSwgMHgyQywgMHhDMCwgMHhGMCwgMHgwNCwKKzB4REIsIDB4MDAsIDB4NEMsIDB4MTYsIDB4QTAsIDB4MzEsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBGLCAweEMyLAorMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRiwgMHhEMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4NDMsIDB4RjAsIDB4MEYsCisweEM0LCAweDNGLCAweDAyLCAweEZELCAweDAwLCAweEY4LCAweDAxLCAweEY0LCAweDJGLCAweDQwLCAweDNGLCAweDQwLCAweEZGLAorMHgwMCwgMHhGQywgMHg2NywgMHhGMCwgMHgwMiwgMHhDMiwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4ODAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDgsIDB4MzAsIDB4MEQsIDB4QzAsIDB4QTQsCisweDA4LCAweERGLCAweDAwLCAweDRDLCAweDA4LCAweDMwLCAweDVDLCAweEMwLCAweDM0LCAweDAwLCAweEMzLCAweDQwLCAweDRDLAorMHg0OCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHgzQywgMHg4MywgMHhGMCwgMHgwQywgMHhDMCwKKzB4MzQsIDB4MDQsIDB4RDcsIDB4OTEsIDB4NEMsIDB4MTMsIDB4NzQsIDB4MEQsIDB4QzUsIDB4MzUsIDB4MDAsIDB4REYsIDB4ODQsCisweDRDLCAweDA1LCAweEUwLCAweDI5LCAweDgxLCAweDA5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMCwgMHgwRiwgMHg0MCwgMHhFNCwgMHgwMiwKKzB4REQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4QjAsIDB4MkYsIDB4NDAsIDB4M0QsIDB4MDAsIDB4RjEsIDB4MDEsIDB4NDQsIDB4MTYsCisweEQwLCAweDBGLCAweEMwLCAweDM0LCAweDAwLCAweEY3LCAweDA0LCAweEY0LCAweDRCLCAweEQwLCAweEFGLCAweDQwLCAweEI1LAorMHgwMCwgMHhGMCwgMHgwMiwgMHgwNCwgMHgxNSwgMHgxMCwgMHgzRCwgMHg0NCwgMHgzNCwgMHgxMCwgMHhDOSwgMHg4MCwgMHg0NCwKKzB4ODUsIDB4OTAsIDB4MzEsIDB4NDEsIDB4NkQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweDIwLCAweDMwLCAweDEwLCAweENELCAweDAwLCAweDA0LCAweDRFLCAweDExLCAweDBDLCAweDQ0LCAweDQwLCAweDAwLCAweENELAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgyQywgMHg0MCwgMHgzMCwgMHgwOCwgMHhDMSwgMHgwNCwgMHgyNCwgMHgwNCwgMHhEMCwKKzB4MEMsIDB4NTAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4RDAsIDB4MDAsCisweEM1LCAweDAyLCAweDAwLCAweDA5LCAweDEwLCAweDE0LCAweDQwLCAweDgzLCAweDQxLCAweEMxLCAweDAyLCAweDY0LCAweDAwLAorMHhEMCwgMHgxOCwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODUsIDB4MDcsIDB4MTQsIDB4MUMsIDB4NTAsIDB4NzgsIDB4MDQsIDB4RUQsIDB4MDEsCisweDg1LCAweDA2LCAweDEwLCAweDFFLCAweDQwLCAweDc4LCAweDgwLCAweEUxLCAweDExLCAweEE0LCAweDA1LCAweEQwLCAweDFDLAorMHg0MCwgMHg3QywgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg1OSwgMHgwNiwgMHhFNSwKKzB4MDEsIDB4ODQsIDB4MDUsIDB4MTAsIDB4OUUsIDB4NDAsIDB4N0EsIDB4MDcsIDB4QTEsIDB4MDEsIDB4QTQsIDB4MDYsIDB4OTEsCisweDFBLCAweDQwLCAweDdGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDE4LCAweDMwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgxQywgMHg0MywgMHgzMCwgMHgwQywgMHhDMCwgMHgxMCwgMHgwMCwgMHhERiwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4MTAsIDB4MEQsIDB4QzAsIDB4MzAsIDB4MDAsIDB4QzMsIDB4MDAsIDB4MkMsIDB4MjEsIDB4RjAsIDB4MEMsIDB4QzAsCisweDM2LCAweDAyLCAweEMzLCAweDAwLCAweDNDLCAweDAzLCAweEYyLCAweDBELCAweEUwLCAweDIwLCAweDAwLCAweEQ3LCAweDAwLAorMHgwQywgMHgzMywgMHgzMCwgMHg4QywgMHhDMSwgMHgyMywgMHgwMywgMHg0QiwgMHgyMCwgMHgyQywgMHgyMCwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NEIsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4MTAsCisweEZGLCAweDQ4LCAweEZDLCAweDIzLCAweEY4LCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgxMCwgMHhGRiwgMHgwMiwgMHg1RCwgMHgyMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RjcsIDB4MTAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzEsIDB4MkEsIDB4MDAsIDB4RkIsIDB4MDIsIDB4N0MsCisweDIxLCAweEYyLCAweDg4LCAweDAwLCAweDI4LCAweDAzLCAweDJGLCAweDA4LCAweERDLCAweDIyLCAweEYyLCAweDhCLCAweEM0LAorMHgwOSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHg4MCwgMHhERiwKKzB4MDAsIDB4N0UsIDB4MDEsIDB4MzAsIDB4NEQsIDB4QzEsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweEFELCAweEQwLCAweDM0LCAweDAxLCAweERGLCAweDAyLCAweDVDLCAweDAzLCAweEYwLCAweENELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwNCwgMHg3QywgMHgxQiwgMHhGOCwgMHg2RCwgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwRSwgMHg3QywgMHgwMSwKKzB4RjAsIDB4MUQsIDB4QzAsIDB4MjIsIDB4NDAsIDB4Q0IsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MTEsIDB4NDAsIDB4NDAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDAwLAorMHhGNCwgMHgwMywgMHgxMCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFQywgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4RSwKKzB4NDAsIDB4QjgsIDB4MDUsIDB4RkQsIDB4MDQsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsCisweDBDLCAweEI0LCAweDUzLCAweDcwLCAweENFLCAweDQwLCAweDNCLCAweDAwLCAweEU1LCAweDAwLCAweEI0LCAweDAwLCAweEQwLAorMHgwRSwgMHg0MCwgMHgyOCwgMHgwMCwgMHhFQiwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MCwgMHg0QywgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RTUsIDB4MDEsIDB4QjQsCisweDg3LCAweDkyLCAweERFLCAweDQyLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDVDLCAweDQwLAorMHg3OCwgMHgwMCwgMHhGRCwgMHg0RCwgMHg5NCwgMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwNSwKKzB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDQsIDB4N0YsIDB4MDAsIDB4RTEsIDB4MDUsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsCisweDQxLCAweDZFLCAweDgwLCAweEY5LCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFDLCAweDYwLCAweDEwLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHg0MywKKzB4OTQsIDB4MEMsIDB4NDAsIDB4RjMsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4M0YsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsCisweDEwLCAweERELCAweDAwLCAweDA0LCAweDQ3LCAweDkwLCAweDBDLCAweDQyLCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwMywgMHg1MiwgMHgwQywgMHg0MCwgMHhCMywgMHgwMiwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHg0QywgMHg0NiwKKzB4NjAsIDB4QTIsIDB4QzksIDB4MDksIDB4NDQsIDB4MDMsIDB4QzAsIDB4MUMsIDB4NDAsIDB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE1LCAweDA4LCAweDVGLCAweDAwLCAweEY0LCAweDE1LCAweEIwLAorMHgwNSwgMHhDMCwgMHg5RiwgMHgwMSwgMHg1RiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMiwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwOCwKKzB4NUYsIDB4MDAsIDB4REMsIDB4MTksIDB4RjMsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsCisweEYwLCAweDA1LCAweEMwLCAweDVGLCAweDIwLCAweDUzLCAweDAwLCAweEZDLCAweDE1LCAweEYwLCAweDA3LCAweENDLCAweDlBLAorMHgyMCwgMHg2QiwgMHgwMiwgMHhDRCwgMHgwOSwgMHhGMCwgMHgzNywgMHhEMCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MEEsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFGLAorMHg0MCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwKKzB4MjEsIDB4QzAsIDB4ODcsIDB4MDEsIDB4MUYsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsCisweDFGLCAweDEwLCAweDdDLCAweDQ4LCAweEIwLCAweEUxLCAweEM4LCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg4MCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4QTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4ODAsIDB4OUYsIDB4MDgsCisweDBDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDBFLCAweDMwLCAweDA4LAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHg4NiwgMHg3MiwgMHgyOSwgMHhDQSwgMHhBNywgMHgwOCwgMHg5NywKKzB4MDUsIDB4NUMsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDI0LCAweDA4LCAweDlELCAweDIwLCAweDQ0LCAweDM2LCAweDA0LCAweDA5LCAweDQ0LCAweEU3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNSwgMHg5MCwgMHg5QywgMHgwMSwgMHg0NCwKKzB4MEEsIDB4MTQsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NDUsIDB4MEEsIDB4QTQsIDB4MDksIDB4NTEsCisweEEwLCAweDAwLCAweDkwLCAweDEyLCAweDM0LCAweDI2LCAweDEwLCAweDI5LCAweDQwLCAweDI3LCAweDAwLCAweDk5LCAweDAwLAorMHg2QywgMHg4QSwgMHg1MCwgMHgxOSwgMHg0MSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDUsIDB4MDIsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsCisweDlELCAweDAwLCAweDQwLCAweDAyLCAweEQwLCAweDA5LCAweDAwLCAweDI0LCAweDIwLCAweDlDLCAweDEwLCAweDQ0LCAweDIyLAorMHgxMCwgMHgwOSwgMHg0NCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgxNCwgMHg0NCwgMHg0MiwgMHg5MCwgMHgxOSwgMHg0MCwgMHgyNCwKKzB4MDQsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4NDAsIDB4MEQsIDB4NDEsIDB4MjYsIDB4MDAsIDB4OUQsIDB4NDIsIDB4NTQsCisweDEyLCAweDEwLCAweDQ5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxMSwgMHg0OCwgMHg0MCwgMHgzMywgMHgwMSwgMHg4RCwKKzB4MDAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NEQsIDB4NEMsIDB4MjEsIDB4MTEsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MTMsIDB4MTAsCisweDQ4LCAweDYwLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDA0LCAweDEyLCAweDkwLCAweDQ4LCAweDQ0LCAweDI0LCAweDAwLAorMHg4MSwgMHg4NCwgMHg3NiwgMHgwMiwgMHgxQSwgMHgwOCwgMHg0MCwgMHgyMywgMHg4OCwgMHg4OSwgMHg4MCwgMHgyNCwgMHgwMiwKKzB4NTAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzgsCisweDg2LCAweDBBLCAweDFGLCAweDBBLCAweDRDLCAweDI4LCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAyLCAweDFGLCAweDBBLAorMHg3QywgMHgwMCwgMHhGMCwgMHhBMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwQSwgMHg0RCwgMHgyOCwgMHgzMiwgMHgwMSwKKzB4QzQsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MTcsCisweDRBLCAweDVDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDE3LCAweDAwLCAweDVDLCAweDI5LCAweDMwLAorMHhBMSwgMHhDMCwgMHg3NywgMHg4MCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMiwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4NDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OUYsIDB4MDAsIDB4RkMsCisweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDQ4LCAweEZDLCAweDIyLCAweEYwLCAweDg5LCAweEMyLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwOCwgMHg3QywgMHgyMiwgMHg3MCwgMHg4OSwgMHhDMCwgMHgzQiwgMHgwMCwgMHg5RiwgMHgwOCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QjcsIDB4ODAsIDB4REMsIDB4MDIsIDB4RjEsIDB4OEYsCisweEMwLCAweDc3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDgwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwOCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyQywgMHgwMiwgMHg5MywgMHgwMCwgMHg3QywgMHg1MiwKKzB4RjAsIDB4Q0IsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4QjAsIDB4NDksIDB4QzAsIDB4MjcsCisweDAwLCAweEJGLCAweDBDLCAweEZDLCAweDAyLCAweEUwLCAweDBCLCAweEMwLCAweDJELCAweDAwLCAweEIzLCAweDA0LCAweERDLAorMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyQSwgMHg0MCwgMHhCMywgMHgwMCwgMHhCQywgMHgwMywgMHgzMCwgMHgwQiwgMHhDMCwKKzB4NzcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MUQsCisweDA0LCAweDc0LCAweDQ5LCAweDEwLCAweDAxLCAweDQ0LCAweDE0LCAweDQyLCAweDAxLCAweDE0LCAweDc0LCAweDAwLCAweEQwLAorMHhDMSwgMHg0QywgMHg4NywgMHgxMCwgMHgxRCwgMHg1MCwgMHg3NCwgMHgyMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MEMsIDB4NzQsIDB4NDgsIDB4RDAsIDB4MDEsIDB4NDUsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MTQsIDB4NzQsIDB4MDAsCisweEQwLCAweDA1LCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDYzLAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwNCwKKzB4MzQsIDB4QjIsIDB4MTQsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MzYsIDB4MDIsIDB4RDAsIDB4NDgsCisweDQ4LCAweDIzLCAweDgyLCAweDhELCAweDA4LCAweDM0LCAweDAyLCAweDE0LCAweDg4LCAweDYwLCAweDIzLCAweDAwLCAweDhELAorMHgwNCwgMHgzNCwgMHgzMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwQywgMHgzNiwgMHgwMiwgMHg1MiwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4NEIsIDB4ODAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgxMiwgMHgxMCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDAsCisweDc0LCAweDAyLCAweEQ4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwNCwgMHg5MSwgMHgwMiwgMHg3MCwgMHgxMiwgMHgxOSwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzgsIDB4MDYsCisweDMwLCAweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDRFLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMiwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4NjcsIDB4NDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4NDIsIDB4QjAsIDB4QjksIDB4QzAsCisweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDQ2LCAweDM0LCAweDE5LCAweEMwLCAweDE3LCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwNiwgMHhGMCwKKzB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUMsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMiwgMHg5RiwgMHhCMCwgMHg3QywgMHg0MiwgMHhGMCwgMHgxOSwgMHgwMiwgMHgyNCwKKzB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4OTksIDB4QzEsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLAorMHhDMCwgMHhDNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDEsIDB4N0MsIDB4MzAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NUMsIDB4MDQsIDB4RjAsCisweDAxLCAweEM4LCAweDg2LCAweDA5LCAweDEzLCAweDA4LCAweDZELCAweDA4LCAweEUwLCAweDQxLCAweEMwLCAweDg0LCAweDAwLAorMHgxNywgMHg0MCwgMHg2QywgMHgxMCwgMHgxMCwgMHhBMSwgMHhDMiwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4ODAsIDB4RjQsIDB4MUQsIDB4NzAsIDB4MDUsIDB4NDAsCisweDVGLCAweDIwLCAweDVELCAweDAwLCAweDRDLCAweDAxLCAweDEwLCAweDI3LCAweDQwLCAweDE0LCAweDAwLCAweDdELCAweDAwLAorMHhGNCwgMHgwRCwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3RCwgMHgwMSwgMHhDNCwgMHgwNSwgMHg3MCwgMHgyNywKKzB4NDAsIDB4MTgsIDB4MDAsIDB4NzEsIDB4ODIsIDB4QzQsIDB4MTksIDB4RDAsIDB4MTYsIDB4NDEsIDB4MTgsIDB4MDEsIDB4NzEsCisweDFCLCAweEU0LCAweDQ1LCAweDEwLCAweDA3LCAweDQwLCAweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgxRiwgMHg1OCwgMHgwQywgMHg0MCwgMHg3NywKKzB4MDAsIDB4QzksIDB4MDAsIDB4MjUsIDB4MDMsIDB4MTQsIDB4MkMsIDB4NTAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4NzQsCisweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDFDLCAweDUwLAorMHhCMCwgMHg0MiwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MCwgMHg1MCwgMHg0MCwgMHhDNSwgMHgwMiwKKzB4NjQsIDB4MDcsIDB4OTQsIDB4MUMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDgwLCAweDM4LCAweDAyLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweDU4LCAweDBFLCAweDQwLCAweDNCLCAweDBDLAorMHhFRCwgMHgwNSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MSwgMHgzOCwgMHgwMCwgMHg2RCwgMHgxMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDMsIDB4ODQsIDB4MDksIDB4NTAsIDB4MzYsIDB4NDAsIDB4M0MsCisweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDFDLCAweDAwLCAweEUxLCAweDAwLCAweEU2LAorMHg4MiwgMHg5MCwgMHgxNiwgMHg0MCwgMHgxMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MTgsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MTEsIDB4QkMsIDB4MDUsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsCisweDg3LCAweEFDLCAweDg3LCAweDMwLCAweDFGLCAweEMwLCAweDc4LCAweDAwLCAweEVELCAweDIxLCAweEJDLCAweDA3LCAweEYwLAorMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhDRiwgMHg4MSwgMHg5QywgMHgwNywgMHg3OCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMCwKKzB4QzMsIDB4ODEsIDB4OEMsIDB4MDcsIDB4REEsIDB4MEEsIDB4QzQsIDB4NTgsIDB4MjAsIDB4RTcsIDB4MjEsIDB4QUUsIDB4MDcsCisweEIxLCAweDFCLCAweEM0LCAweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LAorMHgzNSwgMHgwMSwgMHhERiwgMHgwNiwgMHg3RSwgMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgxNiwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweDcwLCAweDA1LCAweEMwLCAweDMxLCAweDAwLCAweDVGLAorMHgwMCwgMHg1QywgMHgwMywgMHhGOCwgMHgwQywgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3MCwgMHgwMiwgMHg3MCwKKzB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4RkQsCisweDAyLCAweEYzLCAweDAxLCAweEZDLCAweDIzLCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEYzLCAweDgxLCAweEZDLAorMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RjcsIDB4MDEsIDB4Q0MsIDB4MjcsIDB4MzgsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4NzMsIDB4MDEsCisweDhDLCAweDg3LCAweEI4LCAweDk3LCAweEMwLCAweDVDLCAweDAwLCAweEVGLCAweDIxLCAweENDLCAweDA1LCAweEYwLCAweDE3LAorMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwKKzB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDgsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDIsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDgyLCAweDQwLCAweDNCLCAweDAwLCAweDdELCAweDA4LCAweEM0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMCwgMHg3RCwgMHgwNCwgMHg4NCwgMHgwMSwgMHgxNCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMSwgMHgzQiwgMHgwMCwgMHg4NSwKKzB4NDMsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4MTgsIDB4MDEsIDB4RUQsIDB4MDgsIDB4OTQsIDB4NjIsIDB4RDAsIDB4NjIsIDB4NDAsCisweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM5LCAweDA4LCAweEUxLAorMHgwMCwgMHhCNCwgMHgyMywgMHhEOCwgMHgwRSwgMHg0MCwgMHg5QiwgMHgwNCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgyMywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4M0IsIDB4ODgsIDB4NkQsIDB4MDAsIDB4ODQsIDB4MDksIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweEU1LCAweDgwLCAweDk0LCAweDAzLCAweDE4LCAweDBBLCAweDRDLCAweDNCLCAweDEwLCAweEUxLCAweDAwLCAweEI0LCAweDAzLAorMHg5MCwgMHgwRiwgMHg0NCwgMHg4OSwgMHgxMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwQSwgMHg2MSwgMHg2MCwKKzB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MzUsIDB4MDAsIDB4QzEsIDB4NDAsCisweDM0LCAweDFBLCAweEQwLCAweDBDLCAweDQwLCAweDY3LCAweEMwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDAwLAorMHg0MCwgMHgzMywgMHg4MCwgMHgwRCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgxMCwgMHg4RCwKKzB4NDAsIDB4NDQsIDB4MDAsIDB4MTgsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsCisweDJDLCAweDQwLCAweDUwLCAweDEwLCAweENELCAweDAxLCAweDE0LCAweDBBLCAweEQ4LCAweDIwLCAweDQyLCAweDA4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzRCwgMHgwMCwgMHhGMywgMHgwMCwgMHg3QywKKzB4MTYsIDB4RDAsIDB4MEQsIDB4QzQsIDB4NDcsIDB4MDAsIDB4RjMsIDB4MDAsIDB4N0MsIDB4MEIsIDB4RDAsIDB4MDEsIDB4QzAsCisweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDA0LCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDE3LCAweDAwLAorMHg1QywgMHgwMiwgMHgzMCwgMHgwOSwgMHgwMCwgMHgzNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg2QywgMHg4QiwgMHhCMCwgMHgyQywKKzB4QzEsIDB4NTAsIDB4MDEsIDB4REYsIDB4MDAsIDB4NDAsIDB4MDgsIDB4RDAsIDB4ODksIDB4QzAsIDB4NzQsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg0MywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzMywKKzB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsCisweDBBLCAweEYwLCAweDA5LCAweEUwLCAweEE3LCAweDA4LCAweDlGLCAweDQyLCAweDVDLCAweDQzLCAweEYyLCAweDBELCAweEQwLAorMHhCNywgMHgwOCwgMHhERiwgMHgyQSwgMHg3QywgMHgwOCwgMHhGMCwgMHgyOSwgMHhEMCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDBGLCAweEMwLCAweDI3LCAweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDQwLAorMHhCMywgMHgwMCwgMHg5QywgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4QjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MjAsIDB4QUYsIDB4MjAsIDB4REMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzEsIDB4MUQsCisweDAwLCAweEI2LCAweDAwLCAweENDLCAweDQyLCAweDgwLCAweDA5LCAweEMwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHg0MCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwRCwKKzB4NjAsIDB4NjcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsCisweDAzLCAweDVDLCAweDA2LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDQ2LCAweDEwLAorMHgxMSwgMHg0MSwgMHg2NywgMHgwMSwgMHgxOSwgMHgwMSwgMHgwNCwgMHgwNiwgMHhCMCwgMHgzRCwgMHg0MCwgMHg3NCwgMHgwMSwKKzB4MDEsIDB4NDUsIDB4NDQsIDB4NEUsIDB4OTAsIDB4MTksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDc2LCAweDA0LCAweEQwLCAweDBELCAweDRBLAorMHg0NywgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgzOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHgxMSwKKzB4NzQsIDB4MDQsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MTksCisweDQwLCAweDc3LCAweDAwLCAweDlELCAweDAzLCAweDQwLCAweDQ3LCAweDEwLCAweDhELCAweDAxLCAweDU1LCAweDAwLCAweEQ1LAorMHg4MSwgMHg0NCwgMHg4NCwgMHg5MCwgMHgxMSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDMsCisweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweDAxLCAweDAwLCAweDE0LAorMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg5MCwgMHgwOCwgMHg2NCwKKzB4MzMsIDB4MDAsIDB4ODksIDB4MDAsIDB4NDcsIDB4MDEsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDgsIDB4RDUsIDB4MDAsCisweDA0LCAweDAwLCAweDkwLCAweDAwLCAweDQ0LCAweDQzLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgzOCwgMHgzQSwgMHgwMCwgMHhGMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwKKzB4RjMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDAsCisweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDFELCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDAxLCAweEMwLCAweDM3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgxNSwgMHgwOCwgMHhENywgMHgwMCwgMHg0RCwKKzB4ODAsIDB4QjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEI4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEM0LCAweDJGLCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMiwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MUIsIDB4ODAsCisweDNGLCAweDAwLCAweEZDLCAweDAxLCAweEQwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEZFLCAweDAyLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgxNywgMHg0MiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4NkYsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4NDAsIDB4RjAsIDB4MDIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4NDAsCisweEVDLCAweDAyLCAweDcwLCAweDFGLCAweEMwLCAweDJGLCAweDAwLCAweEZCLCAweDEwLCAweEZDLCAweDAyLCAweDMwLCAweDAzLAorMHhDMCwgMHg2OCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwNywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwOSwgMHhGRiwKKzB4MDEsIDB4QUMsIDB4MDcsIDB4RjAsIDB4NEYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MzQsCisweDBGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweDIxLAorMHgwMCwgMHhEMSwgMHgxMCwgMHg1QywgMHgwMCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg2QywgMHgwOCwgMHg5MSwgMHgwQiwgMHg1OCwKKzB4MDAsIDB4MTAsIDB4MUQsIDB4QzAsIDB4QTUsIDB4MDYsIDB4QzEsIDB4MTIsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MTEsIDB4QzgsCisweDY1LCAweDAwLCAweENELCAweDAwLCAweDU0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweDc0LCAweDEyLCAweERELCAweDAxLAorMHg1NCwgMHgwNywgMHhEMiwgMHhCRCwgMHg0MCwgMHg3NywgMHg0MCwgMHg5MSwgMHgxMCwgMHg0NCwgMHgwQiwgMHgxMCwgMHgxRCwKKzB4MDAsIDB4MEYsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MjAsIDB4MzMsIDB4MDAsCisweEMxLCAweDAwLCAweDM0LCAweDA0LCAweEQwLCAweDEwLCAweDQwLCAweDIwLCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDAwLAorMHg1MCwgMHgwQywgMHg0MCwgMHgyMywgMHgwOSwgMHhDMSwgMHg4NCwgMHgzNCwgMHgwMiwgMHgxMiwgMHgwMCwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsCisweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDM1LCAweDgwLCAweDk1LCAweDg0LCAweDA0LCAweDcwLCAweDE0LCAweDBDLCAweDQwLAorMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4NDEsIDB4NDAsIDB4NjQsIDB4NDAsIDB4RDEsIDB4MDgsIDB4NzQsIDB4NDQsIDB4MTAsCisweDBELCAweDQwLCAweDI3LCAweDQwLCAweEQxLCAweDAwLCAweDc0LCAweDA2LCAweDEwLCAweDAxLCAweDQwLCAweDI2LCAweDAwLAorMHhERCwgMHgwMCwgMHg1NCwgMHg4MywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg1NCwgMHgxMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4NDAsIDB4RDUsIDB4MTgsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MEYsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg4LCAweDM2LCAweDAwLCAweEQzLCAweDAwLAorMHg3QywgMHgwNCwgMHhGMiwgMHgxNCwgMHhEMCwgMHg2NCwgMHgwMCwgMHg4MywgMHg4MCwgMHg0QywgMHgwRSwgMHg3MCwgMHgwRCwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MUUsIDB4MzAsIDB4MTUsIDB4RDAsIDB4MjQsIDB4MDAsIDB4REYsCisweDAwLCAweDBDLCAweDAzLCAweEIxLCAweDBELCAweEMwLCAweDM2LCAweDAwLCAweENGLCAweDgxLCAweDRDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHg4NywgMHgwMywgMHg0QywgMHgyNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwMywgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsCisweDQwLCAweEYwLCAweDA3LCAweEMwLCAweDNGLCAweDA4LCAweEJGLCAweDAwLCAweDlDLCAweDAyLCAweEQwLCAweDBGLCAweEMwLAorMHgyMSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwgMHg5NiwgMHhDMCwgMHg2RCwgMHgwMSwgMHhFRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDcsIDB4RjAsIDB4MEYsCisweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDFGLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3NCwgMHgwMCwKKzB4MzAsIDB4ODUsIDB4QzAsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDRDLCAweDNBLCAweEQwLCAweDA1LCAweDQwLCAweDI0LCAweDIwLCAweEQzLCAweDA4LCAweDRELAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjgsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweEQ1LCAweDA1LCAweDc0LCAweDE0LCAweDEwLAorMHgwNywgMHhDMCwgMHhCMiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgyOCwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4RjEsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RDEsIDB4MEQsIDB4NDMsIDB4MjUsIDB4MDAsIDB4RjUsIDB4MDAsIDB4NTQsIDB4MkYsCisweEQwLCAweDBGLCAweDQwLCAweDdDLCAweDAwLCAweDUxLCAweDExLCAweDdDLCAweDAyLCAweDEwLCAweDFGLCAweDQwLCAweDM3LAorMHgwMCwgMHhEMSwgMHgwNCwgMHgyQywgMHgyRiwgMHhEMCwgMHgwRiwgMHg1MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjYsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MzQsIDB4MEMsIDB4MTgsIDB4MTAsCisweDQwLCAweDIwLCAweDA0LCAweDgxLCAweDAwLCAweDM0LCAweDA2LCAweEQ4LCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweEM5LAorMHg0MCwgMHgxNCwgMHgwQywgMHhEMCwgMHgwNCwgMHg3MCwgMHgyMCwgMHg0MCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEOCwKKzB4MEMsIDB4NDAsIDB4NzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTgsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MDAsCisweDg4LCAweDgwLCAweDE0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHg2OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgyNCwgMHgxOCwgMHgzQiwgMHg0MCwKKzB4NjIsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QjQsIDB4NDUsIDB4RDgsIDB4MUUsIDB4NDIsIDB4NkIsIDB4NjAsIDB4RTEsIDB4MDMsCisweEE0LCAweDI2LCAweEQwLCAweDE0LCAweDQwLCAweDZELCAweDAwLCAweEU1LCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDFFLAorMHg0MCwgMHg3OSwgMHgwMCwgMHhFMSwgMHgwMSwgMHhGNCwgMHgwNiwgMHgxMCwgMHgxRSwgMHg0MCwgMHg3RiwgMHg0MCwgMHg0OSwKKzB4ODEsIDB4QjQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0MsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDA4LCAweEMzLCAweDA4LCAweDdDLCAweDIwLCAweDMwLCAweDAwLCAweDQwLCAweEExLAorMHg0MCwgMHhDMywgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgyMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgxQywKKzB4MDMsIDB4RjAsIDB4ODQsIDB4NDIsIDB4MjAsIDB4MDIsIDB4QzMsIDB4MDAsIDB4MEMsIDB4NDMsIDB4RjAsIDB4MEQsIDB4NDgsCisweDMxLCAweDQ0LCAweEMzLCAweDg4LCAweDNFLCAweDAyLCAweDcxLCAweDBDLCAweEMxLCAweDMzLCAweDAwLCAweDBCLCAweDAwLAorMHgxQywgMHgwMSwgMHhGMCwgMHg4QywgMHhDMCwgMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjAsIDB4QzQsIDB4OEIsIDB4QzAsIDB4MUYsIDB4MDIsCisweEZGLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEY3LCAweDEwLCAweEZDLCAweDAzLAorMHhBMCwgMHg4NywgMHhDMCwgMHgyRSwgMHgxMCwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQSwKKzB4MDIsIDB4N0YsIDB4MDgsIDB4REMsIDB4MjIsIDB4RjQsIDB4OEYsIDB4QzAsIDB4MkYsIDB4NDIsIDB4RjcsIDB4MDAsIDB4Q0UsCisweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3RSwgMHgwNCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyQywgMHgwMSwgMHg5MywKKzB4MDAsIDB4RUMsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjYsIDB4MDAsIDB4REYsIDB4MDAsIDB4MUMsIDB4MDIsIDB4MzAsCisweDA1LCAweEMwLCAweDI2LCAweDAwLCAweEZGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDhELCAweEUwLCAweDM3LCAweDAwLAorMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHgxMywgMHg4MSwgMHg0QywgMHgwNywKKzB4MzQsIDB4MEYsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODgsCisweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI2LCAweDAwLCAweDEyLCAweDYyLCAweEMwLCAweDM4LCAweDA0LCAweEUxLCAweDAwLAorMHhGNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhGQiwgMHgwMSwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwNiwKKzB4NDAsIDB4M0IsIDB4MDAsIDB4RkQsIDB4MDEsIDB4ODUsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsCisweDQwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDAwLCAweEFELCAweDAzLCAweDEwLAorMHgxRSwgMHg0MCwgMHg0RiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3OSwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4ODYsIDB4MTIsIDB4MTMsIDB4NDAsIDB4NjAsIDB4MDAsIDB4RUQsIDB4MjEsIDB4QjQsCisweDBGLCAweEQwLCAweDFFLCAweDQwLCAweDczLCAweDAwLCAweEU1LCAweDA1LCAweEQ0LCAweDA3LCAweEQ5LCAweDE2LCAweDQxLAorMHg2QiwgMHgwMCwgMHhFRCwgMHgyMSwgMHhBNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3MiwgMHgyMCwgMHhFMSwgMHgwMywKKzB4QjQsIDB4MDYsIDB4RDAsIDB4MUMsIDB4NDAsIDB4N0UsIDB4MDAsIDB4MjUsIDB4MDMsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsCisweDQwLCAweDA3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDczLCAweDAyLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHg0OCwgMHgwNiwgMHg1MiwgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHhDRiwKKzB4OTAsIDB4MEMsIDB4NDAsIDB4NzMsIDB4MDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4MTMsIDB4OTAsIDB4N0MsIDB4NDAsIDB4MjMsCisweDAwLCAweERELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDQ5LCAweDAxLCAweDM0LAorMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhDNSwgMHgwNCwgMHgyNCwgMHg0QiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4NTUsIDB4MDAsIDB4NUYsCisweDAwLCAweEZDLCAweDQ5LCAweDM0LCAweDQ3LCAweEQwLCAweDVDLCAweDQxLCAweDVGLCAweDExLCAweEZDLCAweDAxLCAweEY0LAorMHgwNSwgMHhDMCwgMHg1NywgMHgwMCwgMHg1NywgMHgwMCwgMHhEQywgMHgwMSwgMHhFMCwgMHgyNywgMHhFMCwgMHgxNywgMHgwMCwKKzB4NUYsIDB4MDAsIDB4NkUsIDB4ODEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NjMsIDB4MDEsIDB4M0MsIDB4MTUsCisweEYyLCAweDA1LCAweEYwLCAweDU0LCAweDAxLCAweDc3LCAweDAzLCAweEM0LCAweDFELCAweDMwLCAweDA1LCAweEMwLCAweDVGLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwKKzB4N0MsIDB4QzAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDgsIDB4NzIsIDB4MDEsCisweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweDc0LCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLAorMHg0MCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MjEsIDB4RTAsIDB4MDcsIDB4NDAsIDB4MUEsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzgsIDB4NEIsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDkzLCAweDAyLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyMCwgMHgwMCwgMHg4MywgMHgwMywgMHg2QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjMsIDB4NDAsIDB4OTEsIDB4MDAsIDB4MDQsIDB4MjYsIDB4MzQsIDB4MDksIDB4MDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDY4LCAweDA2LCAweEQwLCAweDA5LCAweEUwLCAweEU3LCAweDA4LCAweDkzLCAweDQ1LCAweDRDLCAweDA2LCAweDMyLCAweDA5LAorMHhDMCwgMHgyNywgMHgwOCwgMHg5MywgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjIsIDB4NDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4ODIsCisweEQwLCAweDA5LCAweDQwLCAweEE0LCAweDA0LCAweDkxLCAweDAxLCAweDQ0LCAweDM2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5NSwgMHgxMiwgMHg2QywgMHgwQSwgMHgxMCwgMHgxOSwgMHg0MiwgMHgyNywgMHgwMCwgMHg5RCwgMHgyMCwgMHg0NCwKKzB4MDYsIDB4RjAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDEsIDB4OUIsIDB4MDEsIDB4NDQsIDB4MDYsIDB4QjAsIDB4MjksIDB4NDQsCisweDIzLCAweDQwLCAweDkzLCAweDBFLCAweDVDLCAweDFFLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgyMCwgMHg5MSwgMHgwMCwgMHg1NCwgMHgwNiwgMHhEMiwKKzB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsCisweDhELCAweDAxLCAweDc0LCAweDAyLCAweDUwLCAweDg5LCAweDY0LCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc1LCAweDEyLAorMHhEMiwgMHgwOSwgMHgwMCwgMHgyNywgMHg4MCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxMiwgMHg1MCwgMHg4OSwgMHg0MSwgMHgyNywKKzB4MDAsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDIsIDB4MDksIDB4NDQsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDI0LCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEyLCAweEQwLCAweDQ4LAorMHg1MCwgMHgyMCwgMHgwMSwgMHg4MSwgMHg4NCwgMHgwNCwgMHgwMiwgMHhEOCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4OSwKKzB4MDQsIDB4MzQsIDB4MTMsIDB4MDAsIDB4NDgsIDB4NjAsIDB4MjMsIDB4MjAsIDB4OEQsIDB4MDQsIDB4MTQsIDB4MDIsIDB4NTAsCisweEM4LCAweDQwLCAweDIzLCAweDAxLCAweDg5LCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI3LCAweDAwLAorMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0OCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDIsIDB4NTMsIDB4MEEsIDB4MUMsIDB4MjgsIDB4RjAsIDB4MDUsIDB4NTAsCisweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDZDLCAweDA4LCAweEYwLCAweDAxLCAweEM0LCAweDg3LCAweDAyLCAweDFELCAweDBBLAorMHg3QywgMHgyOCwgMHg1MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwQSwgMHg3QywgMHg4MCwgMHhDMiwgMHg2MSwKKzB4NDAsIDB4MDcsIDB4MDUsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsCisweDhBLCAweDM4LCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOSwgMHhCOCwgMHgyRiwgMHgwMCwgMHg5RiwgMHgwMCwgMHhGQywgMHgyMiwgMHhGMiwgMHg4QSwgMHhEMCwgMHgyRiwKKzB4MDIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4NjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OTcsIDB4MDgsIDB4RUMsCisweDIyLCAweEYyLCAweDhCLCAweEMwLCAweDJGLCAweDAwLCAweDlCLCAweDA4LCAweDZDLCAweDAyLCAweEYwLCAweDI5LCAweENBLAorMHgyNywgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhCMCwgMHg4OSwgMHhDMiwgMHgyQiwgMHgwMCwgMHhBNywgMHgwOCwKKzB4REMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweEEwLCAweDI3LCAweDAwLCAweEJGLCAweDA4LCAweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHgwNCwgMHhGQywgMHg1MiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyNywgMHg0MCwgMHhCQiwgMHgwMCwgMHhDOCwgMHgyMiwKKzB4MzQsIDB4NEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QkYsIDB4MEMsIDB4REQsIDB4MDIsIDB4QjAsIDB4MTksIDB4QzAsIDB4NkYsCisweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDVCLCAweEMwLCAweDIwLCAweDAwLCAweEIzLCAweDAwLCAweENDLAorMHgyMiwgMHgzMCwgMHg0QiwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywKKzB4MDgsIDB4MDcsIDB4MDEsIDB4MUQsIDB4MDQsIDB4MzYsIDB4QzksIDB4MTAsIDB4MDUsIDB4RTIsIDB4MDQsIDB4MDIsIDB4MUQsCisweDAwLCAweDc0LCAweDEwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDU0LCAweDIwLCAweDE4LAorMHgwMSwgMHhFMCwgMHgwNiwgMHg4MCwgMHgwRCwgMHgwQywgMHg0NCwgMHgwMCwgMHg1MCwgMHgxMSwgMHg0MCwgMHgwNywgMHgwMiwKKzB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NDQsIDB4MjAsCisweDEwLCAweDAxLCAweDQwLCAweDczLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLAorMHgyMywgMHgwNSwgMHg4RCwgMHgwNCwgMHgzNCwgMHhCMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwOCwKKzB4MzQsIDB4NTIsIDB4RDAsIDB4MDgsIDB4NDIsIDB4MjMsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTQsIDB4ODgsCisweDQyLCAweDIyLCAweDAwLCAweDhELCAweDA0LCAweDE0LCAweDAyLCAweDEwLCAweDY4LCAweDQxLCAweDIzLCAweDAwLCAweDgxLAorMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNiwgMHgxMCwgMHg4NSwgMHg0OCwgMHgwNCwgMHgwNywgMHgxNCwKKzB4ODgsIDB4NDAsIDB4NEIsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDA2LCAweDE0LCAweDA5LCAweDQwLCAweDI2LCAweDA0LCAweDlELCAweDAxLCAweDc0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4OSwgMHgwMCwgMHg1NCwgMHg1MiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjYsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NTIsIDB4MDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MDgsCisweDc0LCAweDEyLCAweEQwLCAweDBELCAweDQwLCAweDY2LCAweDQwLCAweDk1LCAweDA0LCAweDA0LCAweDA2LCAweDEwLCAweDA5LAorMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4NzQsIDB4MEUsIDB4MzAsIDB4MjksIDB4NTAsIDB4RTQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4NDYsCisweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDAyLCAweDUwLCAweDA5LCAweDQxLCAweDI2LAorMHg4MCwgMHg5RCwgMHgwMCwgMHg1QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MiwgMHgwMywgMHg3QywKKzB4MDYsIDB4RjIsIDB4MDksIDB4RDAsIDB4MjIsIDB4MDAsIDB4OTcsIDB4MDcsIDB4NEQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDY1LCAweDAyLCAweDlGLAorMHgxMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwNSwgMHg5RiwgMHgwMCwgMHg3QywgMHg0RSwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjcsIDB4MDIsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweDgwLCAweDIzLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LAorMHhGMCwgMHgwOCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHg1QiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDE4LCAweDk0LCAweDMxLCAweDUwLCAweDA2LCAweDQwLCAweDEzLCAweDAwLCAweDdDLCAweDIwLCAweDcwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRCwgMHg0OCwgMHg3OCwgMHg0OCwgMHgzMiwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NEMsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDQxLCAweEMwLCAweDA3LCAweDAwLCAweDAzLCAweDAyLCAweDRDLCAweDA0LCAweDMwLCAweDAxLCAweEMwLCAweDUwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwNCwgMHhGNCwKKzB4MDEsIDB4MzAsIDB4NDYsIDB4NDAsIDB4NUMsIDB4MDAsIDB4NTEsIDB4MTEsIDB4RjQsIDB4MDksIDB4NzAsIDB4NTUsIDB4NDAsCisweDE3LCAweDAwLCAweDdELCAweDAwLCAweEY0LCAweDA5LCAweDEwLCAweDE0LCAweDQwLCAweDE3LCAweDAwLCAweDVELCAweDAwLAorMHg4NCwgMHg0MSwgMHg3MCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgwMSwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgyNywKKzB4NDAsIDB4MTcsIDB4MDAsIDB4NzIsIDB4MDAsIDB4QzQsIDB4MDEsIDB4MTQsIDB4MDUsIDB4QzEsIDB4NTIsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAzLCAweDc0LCAweDAzLAorMHgxMCwgMHgxQywgMHg2MCwgMHhCMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwQiwgMHg1OCwgMHgwQywgMHg0MCwgMHgzNywKKzB4MDAsIDB4OEQsIDB4MDEsIDB4NzQsIDB4MDksIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDEsIDB4MTQsCisweDhGLCAweEQwLCAweDBDLCAweDQwLCAweEYzLCAweDAxLCAweDg5LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDI0LCAweDQwLAorMHgzMywgMHg4MCwgMHg0OSwgMHgwRCwgMHgwNCwgMHgwMiwgMHgxMiwgMHgxOCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4QTksIDB4MDAsIDB4QjQsIDB4MTgsIDB4MTAsCisweDAyLCAweDQwLCAweDcwLCAweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDAxLCAweDUwLCAweDBFLCAweDQwLCAweDNBLCAweDAxLAorMHgyOSwgMHgwMCwgMHhBNCwgMHgwMCwgMHgxNCwgMHgwQSwgMHg0MSwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMiwgMHg4NCwgMHgwMywKKzB4NDAsIDB4NEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDYsIDB4NDEsIDB4M0YsCisweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDAyLCAweDEwLCAweDE4LCAweDQwLCAweDE2LCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg3OCwgMHgwMSwgMHhBRCwgMHgwMSwgMHhCQywgMHgwRSwgMHgzMCwgMHgxNCwKKzB4RDAsIDB4NzgsIDB4MDAsIDB4RTMsIDB4NDEsIDB4QkUsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDEsIDB4NkQsCisweDAxLCAweDNDLCAweDA1LCAweDMwLCAweDFBLCAweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLCAweDlELCAweDA3LCAweEQwLAorMHg1RSwgMHhDMiwgMHg3QiwgMHgwMCwgMHhBQiwgMHgwMSwgMHhCNCwgMHgwNiwgMHhGMCwgMHgxNiwgMHhDMCwgMHg3QiwgMHgwMCwKKzB4RjksIDB4MDEsIDB4OEQsIDB4MDcsIDB4MzAsIDB4MUEsIDB4QzQsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEI4LCAweEI1LCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLAorMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3RSwgMHgwMywgMHhDMCwgMHgwRCwgMHhDMCwgMHg3NywgMHgwMCwgMHg1RiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDksIDB4ODAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDMsIDB4NzAsIDB4OEQsCisweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDQwLCAweERGLAorMHgwMCwgMHgzQywgMHgwMCwgMHhGNCwgMHgwOSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QTAsIDB4RkYsIDB4MDQsIDB4QjMsIDB4MDEsIDB4RkMsIDB4MjMsIDB4MzgsIDB4MDMsIDB4QzAsIDB4NkMsCisweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweDQwLCAweDdGLCAweDA2LCAweEYzLCAweDAxLCAweENDLAorMHg4NSwgMHgzMCwgMHgxQiwgMHhFMCwgMHg3RiwgMHgwMiwgMHhBRiwgMHgwMywgMHhDQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4N0MsIDB4NDAsIDB4RkIsIDB4ODEsCisweEZDLCAweDA2LCAweDMxLCAweDFBLCAweEMwLCAweDA4LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHg4OCwgMHgzRCwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgxMywgMHgxOCwgMHg0MiwgMHgwMCwgMHgyOCwgMHg0MCwKKzB4RTEsIDB4NTAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4NkYsIDB4MDAsIDB4OTQsIDB4MDIsCisweDEwLCAweDBBLCAweEMwLCAweDNCLCAweDAwLCAweEVELCAweDI0LCAweDg0LCAweDAzLCAweEQwLCAweDhFLCAweDQwLCAweDFCLAorMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwNiwgMHhDMCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4NTUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisweDAwLCAweDM5LCAweDAwLCAweDIxLCAweDAwLCAweEI0LCAweDIyLCAweDE4LCAweDgzLCAweDQwLCAweDIwLCAweDAwLCAweEU5LAorMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHg0MCwgMHg2MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg5MCwKKzB4MEEsIDB4NDAsIDB4M0IsIDB4MjAsIDB4QUQsIDB4NDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsCisweEFELCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDA2LCAweDQwLCAweDNELCAweDAwLCAweEUxLCAweDAwLCAweDM0LCAweDBCLAorMHgxMCwgMHgwQSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzksIDB4MDAsCisweDM0LCAweDI2LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDRELCAweDAwLCAweDE0LCAweDAwLCAweDkwLCAweDI4LAorMHg0MCwgMHg3MSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDIsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MTAsIDB4ODEsIDB4MDIsIDB4MzQsIDB4MDMsIDB4MTEsCisweDA4LCAweDQwLCAweDE5LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDNELAorMHg0MCwgMHg5MywgMHgwMCwgMHhGQywgMHgwMywgMHgxNCwgMHgyMSwgMHhDMCwgMHhFNCwgMHgwMiwgMHhEQiwgMHgwMSwgMHg3NCwKKzB4MkEsIDB4RjAsIDB4MEMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDEsIDB4QjQsIDB4MDksIDB4NDAsCisweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDZELCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDM3LCAweDAwLCAweDhGLCAweDEzLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwNCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg1MywgMHgwQiwgMHg3QywgMHg4MiwgMHgzMCwgMHgwRCwKKzB4QzAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDAwLCAweEQwLCAweEU3LCAweDEwLCAweEQ3LCAweDAwLCAweDdDLCAweDgwLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHgxNywgMHgwMCwgMHgzQywgMHg0MCwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywKKzB4MDIsIDB4OUYsIDB4MDAsIDB4NUMsIDB4ODMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDc1LCAweDAwLCAweDQ3LCAweDgxLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgzRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4OEMsIDB4MjMsIDB4QjAsIDB4MDMsIDB4RDEsIDB4MjgsIDB4MDAsIDB4QjMsIDB4MDUsIDB4RkMsIDB4MDAsIDB4RjAsCisweDBGLCAweEMwLCAweDM4LCAweDAwLCAweDZCLCAweDAwLCAweENDLCAweDAwLCAweEIwLCAweDhCLCAweEUxLCAweDNGLCAweDAwLAorMHhCRiwgMHgwMCwgMHhDQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHg0RiwgMHgwMCwgMHhCRiwgMHgxNCwgMHhEQywgMHgwRiwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4OEMsIDB4MjIsIDB4MTAsIDB4OUYsIDB4QzAsIDB4MDcsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDM2LCAweDAwLCAweDlELCAweDAxLAorMHg0NCwgMHgwNCwgMHg5MCwgMHgxMSwgMHg1OCwgMHg0NCwgMHgwNCwgMHg5MSwgMHgwMCwgMHg3NiwgMHgwNCwgMHhEMCwgMHgwRCwKKzB4RTAsIDB4MzYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MDksIDB4QzAsIDB4MzYsIDB4MDAsIDB4OUQsCisweDAwLCAweDZDLCAweDQ3LCAweEQwLCAweDBELCAweDQwLCAweDk3LCAweDAyLCAweERELCAweDAxLCAweDZDLCAweDA3LCAweEQwLAorMHgzRCwgMHhDMCwgMHgzMiwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwgMHgwNCwgMHgxMCwgMHgxRCwgMHhDMiwgMHgyNSwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MTAsIDB4OUQsIDB4MDEsIDB4NDQsCisweDAzLCAweDkwLCAweDExLCAweDQwLCAweDQ2LCAweDQwLCAweEQxLCAweDAwLCAweDc0LCAweDBFLCAweEQxLCAweDE5LCAweDQyLAorMHgzNCwgMHgwMCwgMHhEOSwgMHgwMCwgMHg0NCwgMHgwNSwgMHg5QSwgMHgwOSwgMHg0MCwgMHgzNywgMHgyMCwgMHg4RCwgMHgwOCwKKzB4NDYsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MTcsIDB4MDQsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MUQsCisweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAxLCAweDQwLCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMywKKzB4OTAsIDB4MTAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDIsIDB4MDgsIDB4NDAsIDB4MzIsCisweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDYwLCAweDMxLCAweDAwLCAweDhELCAweDAwLCAweDA1LAorMHgwMywgMHhEOCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0OCwKKzB4MzYsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4NDEsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDNFLCAweDAwLCAweDFGLCAweDAwLCAweDA1LCAweDAzLCAweEIwLAorMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHhEMywgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwKKzB4NEIsIDB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDksIDB4NDQsIDB4MzcsIDB4MDAsIDB4QkYsIDB4MDAsIDB4NDQsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDlGLCAweDAwLCAweDU0LCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LAorMHgwMCwgMHhEMywgMHgwMCwgMHg0RCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgwNywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzgsIDB4MDIsCisweEMwLCAweDBELCAweDAwLCAweEZGLCAweDQwLCAweEY2LCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweDdGLAorMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwQiwgMHhDOCwgMHgzRSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0IsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDE1LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMiwgMHhGMywgMHgwMSwgMHhGQywgMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksCisweENDLCAweDA3LCAweEYwLCAweDNGLCAweEMwLCAweDdDLCAweDAyLCAweEZGLCAweDIxLCAweENDLCAweDA3LCAweDMwLCAweDlGLAorMHhDMCwgMHg3OCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgyMiwgMHhGMCwgMHgzRiwgMHhDMCwgMHg1RSwgMHgxMCwgMHhCQiwKKzB4MDEsIDB4RUMsIDB4ODQsIDB4MzgsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDExLCAweDAxLCAweDc0LCAweDEwLCAweEQxLCAweDAxLCAweDQwLCAweDQ3LAorMHgwMCwgMHgxMSwgMHgwNCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxRCwgMHgwNCwgMHg0NCwKKzB4ODQsIDB4RDAsIDB4MDEsIDB4NDgsIDB4MDQsIDB4MDEsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MTIsIDB4NDEsIDB4NDAsCisweDQ0LCAweDQwLCAweDExLCAweDAxLCAweDc0LCAweDM4LCAweEQwLCAweDBELCAweDQwLCAweDU1LCAweDAwLCAweEQxLCAweDAxLAorMHg1NCwgMHgwMywgMHhCMCwgMHgwMSwgMHg0MCwgMHgwRCwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4QTAsIDB4MzMsIDB4MTEsIDB4QzEsIDB4MDAsIDB4MzQsIDB4ODMsIDB4RDAsIDB4NEMsIDB4NDEsIDB4MzcsIDB4MDAsCisweEMxLCAweDEwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDAzLAorMHhEMCwgMHg0RCwgMHg0MCwgMHgzMCwgMHgwMSwgMHhENSwgMHhBMCwgMHg2NCwgMHg4MywgMHgxMCwgMHg0QywgMHg0MCwgMHgzNSwKKzB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MTAsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MzAsIDB4NjAsIDB4RDksIDB4NDAsIDB4MjQsCisweDAxLCAweDEwLCAweDA4LCAweDQ0LCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBOCwgMHgwNSwgMHg0MCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMiwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsCisweDAxLCAweDQ4LCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDY0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDIwLAorMHgxOSwgMHgwMCwgMHg3NCwgMHgwQywgMHhEMCwgMHgxQywgMHg0MCwgMHg3NSwgMHgwMCwgMHhEMSwgMHgwMSwgMHg1NCwgMHgwQiwKKzB4MTUsIDB4MTksIDB4NDEsIDB4MEQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsCisweDM3LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweEQzLCAweDAwLAorMHg3QywgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4RDAsIDB4MzQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NkMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REIsCisweDAwLCAweDdDLCAweDBFLCAweEUwLCAweDFELCAweEMwLCAweEMwLCAweDA0LCAweENCLCAweDAxLCAweDZDLCAweDA0LCAweDEwLAorMHgxOSwgMHhDMCwgMHgyMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgwRCwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4NDAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEM0LAorMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwgMHgwMywgMHhDOCwgMHgwRiwgMHgwMCwgMHgzNywgMHg0MCwKKzB4N0MsIDB4NDIsIDB4RjAsIDB4MDcsIDB4QzIsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4QTQsIDB4RjAsIDB4MDAsCisweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDc1LCAweDAxLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhEMCwgMHg3NCwgMHgwMCwgMHhEMywgMHgwMCwgMHg0RCwgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzAsIDB4OEQsIDB4QzEsIDB4MzcsCisweDE0LCAweERGLCAweDAxLCAweDRDLCAweDIzLCAweEYwLCAweDBELCAweEMwLCAweDc2LCAweDA0LCAweEQzLCAweDQwLCAweDZDLAorMHgyOCwgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMSwgMHhEMywgMHgwMCwgMHg3QywgMHhDOCwgMHgyMCwgMHgyOSwgMHhDNiwKKzB4MjgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MUQsCisweDBGLCAweDc0LCAweDEwLCAweDEwLCAweDExLCAweDQyLCAweDA0LCAweDAwLCAweDExLCAweDBBLCAweDQ0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgxMywgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHhDNywgMHgxMCwKKzB4MEQsIDB4MDAsIDB4MzQsIDB4MDQsIDB4RDAsIDB4MzEsIDB4NDAsIDB4ODMsIDB4MDAsIDB4MTEsIDB4QTUsIDB4NzQsIDB4MDgsCisweDEwLCAweDA1LCAweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDExLCAweDc0LCAweDBFLCAweEIwLCAweDA5LCAweDQwLCAweDRDLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHhCNCwgMHgwMCwgMHhDRCwgMHgwMywKKzB4MzQsIDB4NDMsIDB4MTAsIDB4NkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDczLCAweDAwLCAweEMxLCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDJDLCAweDQ0LCAweDMzLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHg3RCwgMHg0MCwgMHgzMywgMHg4MCwgMHhDMSwgMHg4MSwgMHgzNCwgMHgwRSwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4QzEsIDB4MTEsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MEMsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ4LCAweDAwLCAweDJELCAweDAxLCAweEY0LAorMHgwNCwgMHgxMCwgMHgxMywgMHg0OCwgMHg0QywgMHgwMCwgMHgyMSwgMHgwMSwgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwKKzB4NEIsIDB4MDQsIDB4MjEsIDB4MDMsIDB4RjQsIDB4MDQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MTQsIDB4MkQsIDB4MDEsCisweEI0LCAweDA0LCAweEQwLCAweDEyLCAweDQwLCAweDRGLCAweDQwLCAweDIxLCAweDAxLCAweEI0LCAweDA1LCAweEQwLCAweDFFLAorMHg0MCwgMHg3RiwgMHgwMCwgMHg2MSwgMHgwMSwgMHhCNCwgMHhBNywgMHg5MCwgMHgxMiwgMHg0MCwgMHgzQywgMHgyMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsIDB4OTIsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsCisweDMwLCAweDBDLCAweEMxLCAweDMwLCAweDAwLCAweEQzLCAweDEwLCAweDBDLCAweDIzLCAweEYwLCAweDBDLCAweEMwLCAweDMzLAorMHgwMCwgMHhDMywgMHgwMCwgMHgxQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgxQywKKzB4MDMsIDB4RjAsIDB4MEMsIDB4QzEsIDB4MzMsIDB4MjAsIDB4QzEsIDB4MDAsIDB4M0UsIDB4MjMsIDB4RjQsIDB4MEMsIDB4QzAsCisweDMzLCAweDgwLCAweEMzLCAweDA4LCAweDdDLCAweDYzLCAweDMwLCAweDgwLCAweEQwLCAweDQ4LCAweDQwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHhGMCwKKzB4MDIsIDB4QzAsIDB4MEIsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4ODMsIDB4QzAsIDB4MDMsIDB4MDAsCisweDFGLCAweDQwLCAweEJDLCAweDIwLCAweEYyLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHg4MSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHg0MSwgMHhGQywgMHhBMywgMHgyMCwgMHg4RiwgMHhDOCwgMHgzQiwKKzB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUQsIDB4RDAsIDB4NzQsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDFELCAweEQwLCAweDMwLCAweDAwLCAweEMzLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDgwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MzIsIDB4ODgsIDB4MDksIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsCisweDBCLCAweDIwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDJELCAweDAwLAorMHhCNCwgMHgwMCwgMHhEMCwgMHgwMywgMHg0MCwgMHgwQywgMHgwMCwgMHgyMSwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMywKKzB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4ODMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MjAsIDB4NkQsCisweDQwLCAweEY0LCAweDAxLCAweDEwLCAweDAyLCAweDQwLCAweDRGLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUYsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsCisweDg3LCAweEQwLCAweDFFLCAweDQwLCAweDdBLCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLAorMHg3OCwgMHgwMCwgMHhGMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgyMCwgMHhFRCwgMHg1MSwKKzB4QjQsIDB4ODcsIDB4MTAsIDB4MUUsIDB4NDEsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDM2LCAweDI4LCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLAorMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgxMCwgMHgxRCwgMHgyMCwgMHgzNCwgMHgwMCwKKzB4RDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDEwLCAweDAxLCAweDAwLCAweDE0LCAweDlCLCAweEQwLCAweDA0LCAweDQyLCAweDMzLCAweDAwLCAweDRELCAweDAxLCAweDM0LAorMHgwMywgMHgxMSwgMHgyQywgMHg0MSwgMHg1QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKzB4QTAsIDB4MTUsIDB4MDAsIDB4NEYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MTMsIDB4MDAsIDB4NUYsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEQwLCAweDE2LCAweDAwLCAweDVGLCAweDAwLCAweDc0LCAweDAxLCAweEYwLAorMHgwNSwgMHhDMiwgMHgxNiwgMHgwMCwgMHg1MSwgMHgwMCwgMHgzQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDNCwgMHgxNCwgMHg0MCwKKzB4NTMsIDB4MDAsIDB4Q0MsIDB4MDksIDB4RDEsIDB4ODcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0QsIDB4MDEsIDB4QkMsIDB4MDUsCisweDE0LCAweDI3LCAweEMwLCAweDVGLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LAorMHgwRCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MjAsIDB4M0YsIDB4ODAsIDB4RkMsIDB4MDAsIDB4QjAsIDB4MDMsCisweEMwLCAweDBELCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEM0LCAweDBGLCAweDAwLCAweDNGLAorMHgwMCwgMHg2NSwgMHgyMCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgzOCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsCisweDAyLCAweDlGLCAweDAwLCAweDZDLCAweDBFLCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDA1LCAweDdDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwOCwgMHg2QywgMHg4MiwgMHhGMCwgMHg0OSwgMHhDMCwKKzB4NjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDUsCisweDBDLCAweDAyLCAweDMyLCAweDA5LCAweEMyLCAweDI3LCAweDAyLCAweDlELCAweDA0LCAweDVDLCAweDAyLCAweDM0LCAweDA5LAorMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFNiwgMHgwMCwKKzB4OUQsIDB4MDIsIDB4NDQsIDB4MEUsIDB4RDgsIDB4MjksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUIsIDB4NDMsIDB4MzQsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDA4LCAweDlGLCAweDAyLCAweDQ0LCAweDAyLCAweEUwLCAweDI5LCAweDQwLCAweEE3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhCMCwgMHgyOSwgMHg0MCwgMHgyMywgMHgxMCwgMHg4QiwgMHgwMSwgMHg0NCwKKzB4MTYsIDB4MTAsIDB4MDksIDB4NDgsIDB4QTcsIDB4MDQsIDB4OEQsIDB4MDAsIDB4NkMsIDB4NEUsIDB4MTAsIDB4MDksIDB4NDgsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDgwLCAweDI0LCAweDAwLCAweEJELAorMHg1MCwgMHhFNiwgMHgwMiwgMHhEMCwgMHg4QiwgMHg0MSwgMHg2RiwgMHgwOCwgMHhCNSwgMHg0MCwgMHhGNCwgMHgwMiwgMHgxMCwKKzB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkQsIDB4MTAsIDB4QzQsIDB4MDYsIDB4QzAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDEsCisweEJELCAweDA4LCAweEY0LCAweDA2LCAweDEwLCAweDhCLCAweDQwLCAweDJGLCAweDAwLCAweEIxLCAweDAwLCAweDQ1LCAweDIyLAorMHgxOCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhEQywgMHgwMCwgMHg2NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg3MywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4NjgsIDB4MDAsIDB4QUQsIDB4MDAsCisweDg2LCAweDg2LCAweEQwLCAweDBBLCAweDQwLCAweDJCLCAweDgwLCAweEExLCAweDAxLCAweEY0LCAweDAyLCAweDEwLCAweDBBLAorMHg0MCwgMHgyQiwgMHgwMCwgMHhBNSwgMHgwMCwgMHg4NCwgMHgwMiwgMHg1MCwgMHgxQSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhBRCwKKzB4MDAsIDB4QjQsIDB4MDIsIDB4OTAsIDB4MUEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QjksIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTQsCisweDA4LCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDY0LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLCAweDUzLCAweEEwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMiwgMHgxRiwgMHgwMCwgMHg2QywKKzB4MjgsIDB4RDAsIDB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTUsIDB4NEEsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFELCAweDBBLCAweDRELCAweDAwLCAweEQwLCAweEExLCAweEMwLCAweDg3LCAweDAyLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHgzMCwgMHhBMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgzMywgMHgwMCwgMHg0QywgMHgyOCwgMHgzMCwgMHhBMSwKKzB4QzAsIDB4MDcsIDB4ODAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4MzksIDB4QTEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDgyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0OCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOCwgMHhDMCwgMHgyNywKKzB4MDgsIDB4OUYsIDB4NDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYyLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweEZDLCAweEEyLCAweEYwLCAweDBCLCAweEMwLAorMHgyRiwgMHgwMCwgMHhCRiwgMHgyMCwgMHhGQywgMHgwMiwgMHhGMCwgMHg4RiwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsCisweDBCLCAweEMyLCAweDJDLCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDI4LAorMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwKKzB4RjAsIDB4MEIsIDB4ODAsIDB4MkYsIDB4MTAsIDB4QkYsIDB4MDAsIDB4REMsIDB4NTIsIDB4MzAsIDB4ODgsIDB4QzIsIDB4MjksCisweDAwLCAweEIzLCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwMCwgMHg3NCwgMHg0MCwgMHgxMiwgMHgwMSwKKzB4NDksIDB4MDQsIDB4MDAsIDB4MUQsIDB4MTQsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDgsIDB4MDcsIDB4MjAsIDB4MTcsCisweDEwLCAweDc0LCAweDAwLCAweDUwLCAweDQxLCAweDQxLCAweDA3LCAweDAxLCAweDFELCAweDgwLCAweDc0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0OSwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgxMCwgMHgxMCwgMHg0MSwgMHg0NCwgMHgwNywgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NUMsIDB4ODEsIDB4RDIsIDB4NDEsIDB4NDUsIDB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDgxLCAweDYwLCAweDE0LCAweDEyLCAweDE0LCAweDA4LCAweDQwLAorMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwKKzB4MTQsIDB4MDMsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MzMsIDB4ODUsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDUyLCAweEQwLCAweDQ4LCAweDQwLCAweDIxLCAweDAwLCAweDg5LAorMHgwMCwgMHgxNCwgMHgwMiwgMHhEOSwgMHg0OCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NTAsIDB4MjQsCisweDEwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDAwLCAweDc0LAorMHgwMiwgMHg1MSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDAsIDB4ODksIDB4NDAsIDB4RTcsIDB4MDAsIDB4OTksIDB4MDEsCisweDUwLCAweDEyLCAweEQwLCAweDA5LCAweDYwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5MywgMHg4MCwgMHg1QywgMHgwMiwgMHgzMSwgMHgwOSwgMHhDMiwgMHgyNCwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RTAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4NUMsIDB4MDIsCisweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHg4MCwgMHg1QywgMHgxMiwgMHhCNCwgMHgwOSwgMHhDMCwgMHhFMSwgMHg0MCwgMHg5QiwgMHgwMSwgMHg1OCwKKzB4MDYsIDB4RjAsIDB4MDksIDB4QzQsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDA4LCAweDI1LCAweDQwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYzLCAweDA5LCAweDQwLCAweDI3LCAweDEwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MCwgMHgyNywgMHgwMCwgMHg5NiwgMHgwMCwgMHg3MCwgMHgwMiwgMHg3MCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDQsCisweDlGLCAweEEwLCAweDdDLCAweDAyLCAweDIwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk2LCAweDAwLCAweDVDLCAweDQyLAorMHhGMSwgMHg0OSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MDUsIDB4MDYsIDB4MUYsIDB4MDEsIDB4NkMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMywgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwOCwgMHgxMywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDgsIDB4MTcsIDB4MDAsIDB4NkMsIDB4MjgsIDB4RjAsCisweDIxLCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDVDLAorMHgwMCwgMHg3RCwgMHgxMSwgMHhDNCwgMHgwRCwgMHg3MiwgMHg1NywgMHg0MCwgMHgxNCwgMHgwNCwgMHg3RiwgMHg0MSwgMHg0NCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0QsIDB4MjAsIDB4MzQsIDB4MDEsIDB4NzIsIDB4MDcsIDB4QzksCisweDFFLCAweDAyLCAweDUxLCAweDAwLCAweDc0LCAweDAxLCAweDcwLCAweEQ3LCAweDAwLCAweDlGLCAweDA0LCAweDUxLCAweDAxLAorMHhDNCwgMHgxNSwgMHgwMCwgMHgwNSwgMHg0MCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwNSwgMHhFNCwgMHgwRCwgMHhEMCwgMHgwNSwKKzB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4RjYsIDB4MDAsCisweDRELCAweDIxLCAweDY0LCAweDJGLCAweDUwLCAweDRELCAweDQwLCAweDIwLCAweDIwLCAweENELCAweDA0LCAweDA0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwRCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHhCMCwKKzB4MDAsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MkMsIDB4NDAsIDB4RjMsIDB4MDAsIDB4ODEsIDB4ODksIDB4NDQsCisweDEzLCAweDkxLCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweDg1LCAweDAxLCAweDI0LCAweDBGLCAweEQwLCAweDBDLCAweDQyLAorMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4ODYsIDB4MDEsIDB4NTAsIDB4MEUsIDB4NTAsIDB4MzgsIDB4MDAsIDB4RjUsIDB4MTEsIDB4ODQsIDB4MDMsIDB4RDAsCisweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDFGLCAweDQwLCAweDVBLCAweDQwLAorMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MCwgMHg2QiwgMHg0MCwgMHhFMSwgMHgwMSwgMHhDNiwgMHgwMywKKzB4MTAsIDB4NUYsIDB4NDAsIDB4MkMsIDB4MDgsIDB4NjEsIDB4MDAsIDB4QTQsIDB4MDMsIDB4RDIsIDB4NEUsIDB4NjAsIDB4MDcsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLCAweEVGLCAweDAxLAorMHhBQywgMHgwNywgMHg3MCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgyMCwgMHhFRCwgMHgwMSwgMHg4NSwgMHgwNywgMHhGMCwgMHgxRSwKKzB4QzYsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RUIsCisweDAxLCAweEJDLCAweDA3LCAweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEUzLCAweDAxLCAweENDLCAweDA1LCAweEIwLAorMHg5RSwgMHhDMCwgMHg3OSwgMHgwMCwgMHg2NSwgMHg0MSwgMHhBQywgMHgwNCwgMHhGMCwgMHg1RSwgMHhDMCwgMHg0NywgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsCisweDAxLCAweDcxLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgxNywgMHgxMCwgMHhENywgMHg4MCwKKzB4N0MsIDB4ODMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4OEQsCisweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDhELCAweEMwLCAweDQzLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg1RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywgMHgxMywKKzB4RjAsIDB4NUYsIDB4QzAsIDB4N0IsIDB4NjIsIDB4NzMsIDB4NDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsCisweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDI3LCAweEYwLCAweDE3LCAweEMwLCAweDc4LCAweDAwLCAweEZCLCAweDA5LCAweEVDLAorMHgyNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg3OCwgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwKKzB4NEMsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MDgsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDE5LCAweDE2LCAweEVELCAweDAwLCAweDg0LCAweDAxLCAweEQwLAorMHgwNiwgMHg0MCwgMHgzQiwgMHgwNiwgMHg2NSwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMiwKKzB4NjEsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDIsIDB4NDcsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDgsIDB4ODQsIDB4MDMsCisweDEwLCAweDBFLCAweDQwLCAweDM4LCAweDA0LCAweEU1LCAweDA4LCAweEI0LCAweDI5LCAweEQwLCAweDBGLCAweDQwLCAweDI5LAorMHgwMiwgMHg2RCwgMHgwMCwgMHhCNCwgMHgyMiwgMHhEMCwgMHgwRSwgMHhDMCwgMHg1NiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4MDAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MjMsIDB4RDAsIDB4NEUsCisweDQ4LCAweDNCLCAweDEyLCAweDYwLCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDJFLCAweDQwLCAweDNGLCAweDAwLCAweEUxLAorMHgwMCwgMHhCNCwgMHgwMywgMHhDMSwgMHgwNiwgMHg2MCwgMHg5QywgMHgwMCwgMHhGMSwgMHg4MCwgMHhDNiwgMHgwMywgMHgxMCwKKzB4ODcsIDB4NDAsIDB4QjgsIDB4MDAsIDB4RTEsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsCisweDZELCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDYwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgwMSwgMHgwMCwgMHhDRCwgMHgxMiwgMHg0NCwgMHgyQywgMHhEMCwgMHhBOCwgMHg0MCwKKzB4QjMsIDB4MDQsIDB4MTEsIDB4MDMsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4QjMsIDB4MDQsIDB4OTEsIDB4MDMsCisweDM0LCAweDBCLCAweDkwLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweEMxLCAweDAyLCAweDA0LCAweDBCLCAweDEwLCAweDA4LAorMHg0MSwgMHgzMCwgMHg0MCwgMHhDNSwgMHgwMSwgMHg3NCwgMHg0MCwgMHhEMCwgMHgxQywgMHg0MCwgMHgzMSwgMHgxMCwgMHg0RCwKKzB4MEEsIDB4MzAsIDB4MDIsIDB4QzEsIDB4MkQsIDB4NDgsIDB4MUEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEEwLCAweDYxLCAweDAwLCAweENGLCAweDAwLCAweDRDLCAweDIyLCAweEYwLCAweDIxLCAweEMwLCAweEY3LAorMHgwMCwgMHg5MywgMHgxMSwgMHg3QywgMHgwQiwgMHgzNCwgMHg1QywgMHhDMCwgMHgzMywgMHgwMCwgMHgxMywgMHgwMSwgMHg3QywKKzB4MjMsIDB4RjAsIDB4NzksIDB4RDAsIDB4NjQsIDB4MDEsIDB4QzMsIDB4MDgsIDB4NEMsIDB4MjMsIDB4MzAsIDB4NTEsIDB4QzAsCisweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDVGLCAweEMwLCAweDEwLCAweDIwLCAweENGLCAweDIzLAorMHg3QywgMHgwOCwgMHhDMCwgMHhCRiwgMHg4MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4MDgsIDB4MjcsIDB4MjAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MjEsIDB4QzgsIDB4MzcsIDB4MDAsCisweDlGLCAweDAyLCAweDdDLCAweDIzLCAweEYxLCAweDBELCAweEMwLCAweDc3LCAweDAwLCAweDFGLCAweDFBLCAweDdDLCAweDA3LAorMHhGMCwgMHgyOSwgMHhDOCwgMHg4NywgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwNywgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NywKKzB4MDAsIDB4REYsIDB4MDgsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDIsIDB4NUYsIDB4MDQsIDB4N0MsCisweDNBLCAweEYxLCAweDhELCAweEMwLCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwOCwgMHgwRiwgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMCwgMHgzMCwgMHgwMywgMHhDMSwgMHg3QywgMHgwOCwgMHgzRiwKKzB4OTAsIDB4Q0MsIDB4NDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4MzAsCisweDAzLCAweEMxLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweENDLCAweDA3LCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHgxMiwgMHhGQywgMHgwMCwgMHgzMCwgMHgwRiwgMHhDMSwgMHg3RiwgMHgwMSwgMHg3MywgMHgwMSwgMHhDQywgMHgwMCwKKzB4RjEsIDB4MEQsIDB4QzAsIDB4MTQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsCisweEU2LCAweDA5LCAweEQwLCAweDAxLCAweDQ0LCAweDA0LCAweDEyLCAweDMwLCAweDQyLCAweDM0LCAweDA4LCAweDlELCAweDAzLAorMHg0QywgMHgwMywgMHhEMCwgMHgwRCwgMHg2MCwgMHgzNCwgMHgwMCwgMHgxMSwgMHgyNSwgMHgwNCwgMHgwNywgMHgxMiwgMHgzOSwKKzB4NDAsIDB4QzcsIDB4MDAsIDB4REQsIDB4ODAsIDB4NkMsIDB4MDMsIDB4RDAsIDB4MTEsIDB4NDAsIDB4ODcsIDB4MDAsIDB4REQsCisweDAxLCAweDcwLCAweDBDLCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDUxLCAweDA4LCAweDdELCAweDRDLCAweEQyLAorMHgwRCwgMHg0QywgMHgxNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg2NiwKKzB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDYsIDB4OTgsIDB4MTksIDB4NDAsIDB4MzYsIDB4MDEsIDB4OUQsIDB4MTEsIDB4NjQsCisweDAzLCAweEQwLCAweDBELCAweDQwLCAweDc0LCAweDAwLCAweDkwLCAweDAxLCAweDQ0LCAweDIzLCAweDEwLCAweDE5LCAweDQxLAorMHg2NywgMHgwNCwgMHhERCwgMHgwNCwgMHg1NCwgMHhBMywgMHhEMSwgMHgxOSwgMHg0MCwgMHgzNywgMHgwNCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MDYsIDB4MTgsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MEQsCisweDU4LCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDI0LCAweDAwLAorMHg5MSwgMHgwMSwgMHgwNCwgMHgwMiwgMHg5NCwgMHgwMSwgMHg1MCwgMHgzMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDA4LCAweDQ4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHg1MSwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5MCwgMHgwQywgMHg0MCwKKzB4NDAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4RDMsCisweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEM0LCAweDM2LCAweDAwLCAweDFGLCAweDAwLCAweDZELCAweDAzLCAweEYwLAorMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwMSwgMHhDNCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjEsIDB4MDEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsCisweDM0LCAweDBGLCAweEMwLCAweDM3LCAweDAwLCAweDUzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDA0LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5OCwgMHgyRiwgMHgwMCwgMHhBRiwgMHgwMCwKKzB4RjQsIDB4MDIsIDB4NzAsIDB4MEIsIDB4QzQsIDB4M0QsIDB4MTAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweDgwLCAweDNCLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEVGLAorMHgwMCwgMHhCOCwgMHgwMywgMHhGMCwgMHgwQiwgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjgsIDB4MEYsIDB4QzAsIDB4MTcsIDB4MjQsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDBCLCAweDgwLCAweDMzLCAweDAwLCAweEZDLAorMHgxMCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgyNywgMHgzMCwgMHgwMywgMHhDOCwKKzB4MkMsIDB4MDUsIDB4QjUsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4ODMsIDB4QzAsIDB4MkYsIDB4MDMsIDB4MzMsIDB4MDEsCisweENDLCAweDAxLCAweEYwLCAweDFCLCAweEMwLCAweDJGLCAweDAxLCAweDNGLCAweDAxLCAweENDLCAweDI2LCAweEIwLCAweDBCLAorMHhDMCwgMHg3QywgMHgwMCwgMHhCRiwgMHgxNCwgMHhGQywgMHgyNywgMHgzMCwgMHg0RiwgMHhDMSwgMHgwQywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MTAsIDB4MTEsIDB4MEEsIDB4NzQsIDB4MjgsCisweDEyLCAweDRGLCAweDQwLCAweDdDLCAweDEwLCAweEQ1LCAweDAxLCAweDA0LCAweDAyLCAweDEwLCAweDAxLCAweDUwLCAweEU0LAorMHgwOCwgMHg5MSwgMHgwOCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwgMHhBRiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwKKzB4MkMsIDB4RDAsIDB4MTksIDB4NDAsIDB4RTcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDAsCisweDc0LCAweDAwLCAweDlELCAweDAzLCAweDc0LCAweDAzLCAweDEwLCAweDNELCAweDQwLCAweDA0LCAweDYwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgyMywgMHgwMCwgMHgwMSwgMHgyMCwgMHgzNCwgMHgwMCwgMHg1MCwKKzB4MEMsIDB4NTEsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4MDAsCisweDg1LCAweDAwLCAweDA0LCAweDAyLCAweDE0LCAweDQ4LCAweDQwLCAweEI3LCAweDIwLCAweDkxLCAweDE0LCAweDE2LCAweDgxLAorMHg5MCwgMHgwQywgMHg0MiwgMHhCMywgMHgwMCwgMHgxRCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwKKzB4MDAsIDB4MDksIDB4MDEsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDI1LCAweDAwLCAweDExLCAweDAxLCAweDc0LCAweDQ0LCAweDEwLCAweDhELAorMHg0MCwgMHgzNCwgMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyNCwgMHgwMSwgMHhEMSwKKzB4MjAsIDB4NTQsIDB4NDYsIDB4MTAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NTQsIDB4NDAsIDB4RDAsCisweDE1LCAweDQwLCAweDc3LCAweDAwLCAweDFELCAweDExLCAweDY0LCAweDEyLCAweDEwLCAweDA5LCAweDQxLCAweDc0LCAweDAwLAorMHhERCwgMHg0NCwgMHg3NCwgMHgyMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgxQywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDcsIDB4NDIsIDB4MTEsIDB4ODEsIDB4N0MsIDB4MEMsIDB4MzQsIDB4MUQsIDB4QzAsCisweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDQ5LCAweDAzLCAweDMwLCAweDE1LCAweEQwLCAweDI0LCAweDAwLCAweDk3LCAweDgwLAorMHg0QywgMHgwNiwgMHgzMCwgMHgzOSwgMHhDMCwgMHg2MywgMHg0MCwgMHg4MywgMHgwMSwgMHg1RCwgMHgwMSwgMHhGMCwgMHgxOSwKKzB4QzAsIDB4NzcsIDB4MDAsIDB4MEYsIDB4MDEsIDB4MkQsIDB4MDcsIDB4QjAsIDB4MjksIDB4RDAsIDB4MzQsIDB4MDAsIDB4OUYsCisweDAxLCAweDdFLCAweDA2LCAweDMwLCAweDBELCAweEMwLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4OCwgMHg2RCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHhFMiwgMHgxRSwgMHhFMSwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RjgsIDB4MDMsIDB4RjAsIDB4NEUsIDB4RTAsIDB4NkIsIDB4MDAsIDB4OEYsIDB4MjAsIDB4N0MsCisweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDY3LCAweDIyLCAweEJGLCAweDEwLCAweEVDLCAweDI1LCAweEYwLCAweDBCLCAweEMwLAorMHgzRiwgMHgwOCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHg0NywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHg4MSwKKzB4RkUsIDB4MDYsIDB4RjQsIDB4MEMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDIxLCAweDAwLCAweDEzLCAweDgwLCAweDZDLCAweDE4LCAweDMyLCAweDBELCAweEMwLCAweDczLCAweDAwLAorMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwNSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgzQSwKKzB4MzQsIDB4MkQsIDB4QzAsIDB4M0MsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NzcsCisweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDIzLCAweDMwLCAweDI0LCAweEQwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMCwgMHgwRCwgMHhFMCwgMHgwQSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4NkMsIDB4MDEsIDB4OTEsIDB4MDEsIDB4NDQsIDB4MEMsIDB4MTAsIDB4MUQsIDB4RTQsIDB4M0YsIDB4MDAsIDB4RTEsCisweDAwLCAweDc0LCAweDA3LCAweDEwLCAweDBELCAweDQ4LCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDZDLCAweDBBLCAweDEyLAorMHgwRCwgMHg0OCwgMHgyNCwgMHgzMCwgMHg5QiwgMHgwMCwgMHg3MCwgMHgxNSwgMHgxMSwgMHgwNSwgMHg0MCwgMHgzNCwgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NzQsIDB4MDcsIDB4MTAsIDB4QTUsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4ODQsIDB4NDQsIDB4MDIsCisweEQwLCAweDBGLCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDIwLAorMHg0MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4NCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMywgMHg0MCwgMHhDMSwgMHg4MCwKKzB4NzQsIDB4MDcsIDB4OTAsIDB4MjAsIDB4NDEsIDB4MjAsIDB4NDAsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4OTEsIDB4MDgsCisweDQwLCAweDIxLCAweDIwLCAweDgxLCAweDAyLCAweDMwLCAweDQxLCAweDE2LCAweDBDLCAweDUyLCAweDMzLCAweDAwLCAweDRELAorMHgwMCwgMHgzNCwgMHgwNiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMSwgMHg0NCwgMHgwMiwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NkMsCisweDAwLCAweDAxLCAweDExLCAweDg0LCAweDY0LCAweDEwLCAweDFFLCAweDQwLCAweDc5LCAweDQwLCAweEUxLCAweDYxLCAweEI0LAorMHg0RSwgMHg5MCwgMHgxMiwgMHg1MCwgMHg3OCwgMHgwMCwgMHhBMSwgMHgxMSwgMHhBNCwgMHgyNiwgMHg5MCwgMHgwQSwgMHg0MCwKKzB4NjksIDB4MDAsIDB4RTksIDB4MDEsIDB4QjQsIDB4MDYsIDB4MTAsIDB4MUYsIDB4NDAsIDB4NUEsIDB4MDAsIDB4NkQsIDB4MDEsCisweEI0LCAweDA2LCAweDEwLCAweDFBLCAweDQwLCAweDc4LCAweDIwLCAweDhELCAweDAxLCAweDg0LCAweDA2LCAweEQwLCAweDFFLAorMHg0MCwgMHgxOSwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgxOCwgMHgyMCwgMHgwMCwKKzB4MDMsIDB4MjAsIDB4NkUsIDB4MjAsIDB4MzQsIDB4MDgsIDB4NDEsIDB4MzMsIDB4MDAsIDB4QzMsIDB4MDAsIDB4M0MsIDB4MDIsCisweDkwLCAweDAxLCAweEMxLCAweDIwLCAweDAwLCAweDgzLCAweDAwLCAweDBDLCAweDIzLCAweEI0LCAweDg5LCAweEMwLCAweDMxLAorMHgwOSwgMHg4MywgMHgwMCwgMHgzQywgMHgwMCwgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4MzQsIDB4MDgsIDB4QzAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDgsIDB4MEQsIDB4MDIsIDB4RjIsIDB4MEMsIDB4RDAsCisweDQ4LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDJELCAweDQwLCAweDNGLAorMHgwMCwgMHhGNiwgMHgyMCwgMHhGNSwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg1MCwKKzB4MDMsIDB4QzAsIDB4M0IsIDB4MDIsIDB4RkYsIDB4MDgsIDB4RkMsIDB4QTEsIDB4NzAsIDB4Q0IsIDB4RTAsIDB4QkUsIDB4MDAsCisweEJGLCAweDAwLCAweEJDLCAweDAyLCAweEYwLCAweDA2LCAweEMwLCAweDNELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsCisweENDLCAweDAwLCAweDMwLCAweDU5LCAweEM4LCAweDMwLCAweDEzLCAweEY3LCAweDAwLCAweDc0LCAweDAzLCAweDcwLCAweDAxLAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5RSwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgyRCwgMHhDMSwgMHhBQywgMHgwMCwgMHg5MywKKzB4MDAsIDB4N0MsIDB4MDEsIDB4QzAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsCisweDA1LCAweEQwLCAweDMwLCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDUzLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhBOSwgMHgwMCwgMHgyMSwgMHhDMCwgMHg4NCwKKzB4MDIsIDB4MTEsIDB4MEUsIDB4QzEsIDB4MzgsIDB4MDQsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsCisweDM4LCAweDAwLCAweEFELCAweDAwLCAweEJDLCAweDAzLCAweDEwLCAweDBFLCAweDQyLCAweDIwLCAweDAwLCAweEUxLCAweEMwLAorMHhCNCwgMHgwMywgMHhDMCwgMHgwRSwgMHhDMCwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMiwgMHg1MCwgMHgwQywKKzB4NDAsIDB4MzgsIDB4MDAsIDB4QTUsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4NjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDY5LCAweDAxLCAweDIxLCAweDAxLCAweDg0LCAweDA3LAorMHgxMCwgMHgxOCwgMHgwMCwgMHg3OCwgMHgwMSwgMHhFNSwgMHgwMSwgMHhCNCwgMHg0NywgMHhEMSwgMHgxMiwgMHg1MCwgMHg2QSwKKzB4MDAsIDB4OEQsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MUMsIDB4NDgsIDB4NzgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QjQsCisweDA1LCAweEQwLCAweDFGLCAweDUwLCAweDc4LCAweDAwLCAweDJELCAweDAxLCAweEI0LCAweDA2LCAweDE4LCAweDFFLCAweDQwLAorMHg2OCwgMHgwMCwgMHhFOSwgMHgwMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4RDEsIDB4NTMsIDB4MDQsIDB4MDMsIDB4MTAsCisweDBDLCAweDUwLCAweDMyLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDBELCAweDQwLCAweDMyLCAweDAwLAorMHhDRCwgMHg0MCwgMHgzNCwgMHgyQiwgMHgxMCwgMHg1QywgMHg2MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MDQsIDB4NDAsIDB4RjIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjYsIDB4NTAsIDB4N0MsIDB4NDIsIDB4MzAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDA3LCAweDE0LCAweDBDLCAweDQwLCAweDVCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxRCwgMHgwMCwgMHg3MywgMHgyNywgMHhDQywgMHgwRCwgMHgzNCwgMHgwNSwKKzB4QzgsIDB4MTAsIDB4MDAsIDB4NTcsIDB4MjAsIDB4N0MsIDB4MDUsIDB4RjAsIDB4MjcsIDB4QzEsIDB4MTYsIDB4MDAsIDB4NUYsCisweDAwLCAweENDLCAweDA1LCAweDM0LCAweDU3LCAweEQwLCAweDE0LCAweDQwLCAweDczLCAweDAwLCAweEZDLCAweDAxLCAweEYwLAorMHgwNywgMHhDMCwgMHgxQywgMHgwMSwgMHg2QiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHg3NywgMHhEMCwgMHgxNCwgMHgwMCwKKzB4NkIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDQwLCAweDFGLCAweDAwLCAweDdELCAweDIwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNSwgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDNSwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4NDAsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MDMsIDB4NDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA1LCAweDMwLCAweDFGLCAweDAxLCAweDdDLCAweDAwLCAweEY0LCAweDIxLCAweEM0LCAweDA3LCAweDAwLCAweDE3LAorMHgwMSwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4NEEsIDB4MzAsIDB4NTksIDB4QzAsIDB4RTcsCisweDAwLCAweDhCLCAweDAxLCAweDZDLCAweDAyLCAweEYwLCAweDE5LCAweDgwLCAweDI0LCAweDEwLCAweDhGLCAweDg5LCAweDRDLAorMHgwMiwgMHgzOCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwNSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjMsIDB4MDQsIDB4OTMsIDB4MDEsIDB4NkQsIDB4MDIsIDB4MzAsIDB4NTksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgyMCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwQSwgMHgxMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4MDMsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NkMsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAzLCAweDc0LCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgyMCwgMHg5QiwgMHgwMCwgMHgyQywgMHgxMiwgMHg1MCwgMHg3OSwgMHg1MCwgMHg2MCwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDIsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDIwLCAweDQwLCAweDk1LCAweDIwLCAweDA0LCAweDBBLCAweDU2LCAweDI5LCAweDQwLCAweDI3LCAweDQwLCAweDk5LAorMHhBOCwgMHg2NCwgMHgwNiwgMHhEOCwgMHg4OSwgMHg2MCwgMHgyNSwgMHhBMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxNCwKKzB4MEQsIDB4NDAsIDB4MjYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDgsIDB4MDksIDB4NDAsIDB4NzcsIDB4MDAsCisweDkxLCAweDA4LCAweDY2LCAweDkyLCAweDEyLCAweDA4LCAweDQyLCAweDI1LCAweEEwLCAweDk5LCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjAsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MTIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDQsCisweDAwLCAweDA2LCAweEQwLCAweDQ4LCAweDUwLCAweDIxLCAweDAxLCAweDhELCAweDA0LCAweDI1LCAweDEzLCAweDEwLCAweDQ4LAorMHg0MCwgMHgyMiwgMHgxMSwgMHhDMSwgMHgwMCwgMHgzNiwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MiwgMHgyMywgMHgyMSwgMHg5OSwKKzB4MDAsIDB4NjQsIDB4MDIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MjUsIDB4MDAsIDB4ODksIDB4MDQsIDB4MDUsIDB4MDIsIDB4RDAsCisweDQ4LCAweDQxLCAweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDgzLAorMHgwMiwgMHgwNywgMHgwQSwgMHgwQywgMHgyOCwgMHg3MiwgMHhBMSwgMHg0MCwgMHgwNywgMHgwMCwgMHg1QiwgMHgwMCwgMHg2QywKKzB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MTAsIDB4QTEsIDB4NTAsCisweDg2LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDAxLCAweEQxLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLAorMHg2RCwgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxQiwgMHgwMCwgMHg0QywgMHgwOCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4M0YsIDB4MDIsCisweEJGLCAweDA4LCAweEZELCAweDIyLCAweEIwLCAweDhCLCAweEMwLCAweDI3LCAweDQyLCAweDlGLCAweDA4LCAweEZDLCAweDAyLAorMHhGMCwgMHg4QiwgMHhDOCwgMHgyRSwgMHgxMiwgMHhCRiwgMHg0OCwgMHhGQywgMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRCwKKzB4NDIsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4QkQsCisweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDJFLCAweDAwLCAweEJGLCAweDA4LCAweEJDLCAweDQyLCAweEYwLCAweDA5LCAweEMwLAorMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgzRiwgMHgwNSwgMHhCMywKKzB4MEMsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QTMsIDB4MDQsIDB4OEMsIDB4MDIsIDB4RjAsCisweENCLCAweEMwLCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDIyLCAweEYwLCAweDRCLCAweEMwLCAweDI0LCAweDA1LAorMHhBRiwgMHgwOCwgMHhGQywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4Q0EsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MTksIDB4QzAsIDB4NjcsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDUxLCAweDBDLAorMHg0QywgMHg0OCwgMHgxNCwgMHgwMSwgMHhDMSwgMHgwNCwgMHgwMiwgMHgxMSwgMHg2MCwgMHg0NCwgMHgxMCwgMHg3MCwgMHhDMCwKKzB4NDAsIDB4MDUsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NDQsIDB4MjAsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MUQsCisweDA0LCAweDc0LCAweDA4LCAweEMwLCAweDAxLCAweDQwLCAweDA3LCAweDAyLCAweDFELCAweDAwLCAweDc0LCAweDEwLCAweEQyLAorMHhDMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg3MywgMHg2MCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4ODEsIDB4MDQsIDB4MjQsCisweDMyLCAweDEwLCAweDg4LCAweDQwLCAweDIxLCAweDAwLCAweDgxLCAweDA4LCAweDA0LCAweDUyLCAweEQyLCAweDQ4LCAweDQwLAorMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwNiwgMHhEMCwgMHg4OCwgMHg0NCwgMHgyMCwgMHgwNSwgMHg4RCwgMHgwNCwKKzB4MzQsIDB4MjIsIDB4RDgsIDB4MTgsIDB4NDAsIDB4NjMsIDB4MDAsIDB4OEQsIDB4MjAsIDB4MzQsIDB4NTIsIDB4RDAsIDB4NDgsCisweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDA4LCAweDM0LCAweDEyLCAweEQwLCAweDI4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHg2NSwgMHg1OCwgMHg4MSwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MTIsIDB4NTAsIDB4MDgsIDB4NTAsIDB4MjUsCisweDAwLCAweDkxLCAweDA0LCAweDQ1LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDIwLCAweDlELCAweDI0LCAweDc0LAorMHg4MywgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwNiwgMHg3NCwgMHgwMiwgMHhEMCwgMHg0OSwgMHg0MSwKKzB4MjQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDI1LCAweDAwLCAweDkzLCAweDgyLCAweDZELCAweDFBLCAweDMyLAorMHgwOSwgMHhDMCwgMHgyNSwgMHg0MCwgMHg5MywgMHgwMCwgMHg0QywgMHgwNiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4OTMsIDB4MDAsIDB4NEMsIDB4MDYsIDB4RjAsIDB4QjksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDYsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweEU3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEQwLCAweDI0LAorMHgwMiwgMHg5MywgMHgwOSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksCisweEMxLCAweDIxLCAweDAwLCAweDhGLCAweDAwLCAweDdDLCAweDQ2LCAweDcwLCAweDA5LCAweDQwLCAweDI2LCAweDQwLCAweDlGLAorMHgwMSwgMHg3QywgMHgwQSwgMHhGMCwgMHgxOCwgMHhEMCwgMHg2NywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgxMiwgMHhGMCwKKzB4MzksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4RDAsIDB4MjcsIDB4ODAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4NSwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwKKzB4MDQsIDB4NDAsIDB4MTMsIDB4MDQsIDB4NEMsIDB4MjAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4ODAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAwLCAweDM0LCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDgyLCAweDRDLCAweDg0LCAweEIwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDAwLCAweDE0LCAweDQ4LCAweDUxLCAweDAwLCAweEQ0LCAweDAxLCAweDM0LCAweDA3LCAweDQwLCAweDE0LAorMHgwMCwgMHg3MSwgMHgwMCwgMHhDNCwgMHgwMSwgMHgxMCwgMHgwNywgMHg1MCwgMHgxMCwgMHgwMCwgMHg1RCwgMHgxMCwgMHhGQywKKzB4MTEsIDB4MTIsIDB4MDUsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NzEsIDB4MDIsIDB4QzAsIDB4MDUsIDB4MzAsIDB4MDUsIDB4NDAsCisweDU3LCAweDA0LCAweDVELCAweDAxLCAweEY0LCAweDQxLCAweEQwLCAweDA3LCAweDQwLCAweDEwLCAweDAwLCAweDVELCAweDAxLAorMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTAsIDB4MzYsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MkQsIDB4NDAsIDB4MzAsIDB4MDAsCisweDgxLCAweDAwLCAweDA0LCAweDBGLCAweEQ0LCAweDFDLCAweDQwLCAweDMwLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDA3LAorMHgxMCwgMHgxQywgMHg0MCwgMHgzMCwgMHgyMCwgMHhDMSwgMHgxMiwgMHgwMCwgMHgwMywgMHgwQywgMHgwQywgMHg0MCwgMHgyMywKKzB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MDEsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHgzMCwgMHgwOCwgMHhDMSwgMHgwMCwgMHg5NCwgMHgwMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhBMSwKKzB4MDIsIDB4QzQsIDB4MDcsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MzgsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4QjQsIDB4MDUsIDB4MTAsCisweDJDLCAweDQwLCAweDdBLCAweDAwLCAweEYxLCAweDAxLCAweDg0LCAweDBGLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHhFRCwgMHgxMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwMywgMHg0MCwgMHgyOCwgMHgwMCwgMHhBRCwgMHgwMiwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MEUsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsCisweDc4LCAweDQwLCAweEUzLCAweDAxLCAweENDLCAweDA0LCAweDMzLCAweDEyLCAweDUwLCAweDYwLCAweDIwLCAweDIzLCAweDAxLAorMHg4RCwgMHgwNywgMHhGMCwgMHgxQSwgMHhDMiwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhDOCwgMHg4NSwgMHgzMCwgMHgxRSwKKzB4RDAsIDB4N0MsIDB4NDEsIDB4RTMsIDB4MDEsIDB4OEQsIDB4MDYsIDB4MzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsCisweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDFFLCAweEQwLCAweDc4LCAweDAwLCAweEFELCAweDAxLCAweEZDLCAweDA3LCAweDM0LAorMHgxRSwgMHhDMCwgMHg0NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHhCNSwKKzB4MDUsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDAsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MUMsIDB4MDAsIDB4N0MsCisweDAzLCAweDMwLCAweDI5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDgxLCAweEYwLCAweDBELCAweEMwLAorMHgzNSwgMHgwMiwgMHhERiwgMHgwMCwgMHgzRCwgMHgwMCwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDdELCAweDAwLAorMHhGMywgMHgwMywgMHhDQywgMHgxMywgMHgzMCwgMHgxNywgMHhDMCwgMHg3QywgMHgxMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywKKzB4RjAsIDB4M0YsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4MzAsIDB4MUEsIDB4QzAsIDB4N0QsCisweDAwLCAweEZGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLAorMHgyNywgMHhGMCwgMHgxQiwgMHhEMCwgMHg2QywgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwKKzB4MEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4NDAsIDB4RjEsCisweDAwLCAweDg2LCAweDAzLCAweDEwLCAweDAyLCAweDQwLCAweDM4LCAweDAyLCAweEUxLCAweDA0LCAweEI0LCAweDAwLCAweEQwLAorMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhCMSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHg4QSwgMHg0MywgMHgzOCwgMHgwOCwKKzB4RUQsIDB4MDIsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MjMsCisweEQwLCAweDgyLCAweDQwLCAweDI4LCAweDAwLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDU3LAorMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMSwgMHgwMiwgMHhFMSwgMHgwMCwKKzB4ODQsIDB4MjAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MjAsIDB4MDAsIDB4QTksIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDM4LCAweDA2LCAweEExLCAweDAwLCAweDg0LCAweDYwLCAweDEwLCAweDBCLCAweDQwLCAweDM4LCAweDA0LCAweEVELAorMHgwMCwgMHgwNCwgMHgwMCwgMHg1MCwgMHgyRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgyMywgMHhEOCwKKzB4MEUsIDB4NDAsIDB4M0EsIDB4MDAsIDB4QTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MjMsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDM1LCAweDAwLCAweEMxLCAweDBBLCAweDQ0LAorMHg0MiwgMHgxMCwgMHgwMCwgMHg0OCwgMHgzMCwgMHgwMCwgMHg4OSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHhCOSwgMHg0MCwKKzB4NzAsIDB4NDgsIDB4OTEsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MjgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MTAsCisweDA0LCAweDI0LCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDkwLCAweENELCAweDAyLCAweDM0LCAweDAyLCAweEQwLCAweDJELAorMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMywgMHgzNCwgMHg4MywgMHhEMiwgMHgwQywgMHg0MCwgMHg1QiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MDMsIDB4NEQsIDB4MEIsCisweDMwLCAweDEwLCAweEMwLCAweDM0LCAweDUwLCAweDlCLCAweDAwLCAweDdDLCAweDQ3LCAweEYwLCAweDJELCAweEQwLCAweDYwLAorMHgwMCwgMHhEMywgMHgwNSwgMHg0RCwgMHgwRSwgMHgzNCwgMHgxOSwgMHhEMCwgMHg3QywgMHgwMCwgMHhERiwgMHgwMSwgMHg0RCwKKzB4MjIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDIsIDB4Q0YsIDB4MEEsIDB4N0MsIDB4MDEsIDB4RjAsIDB4RjUsIDB4RDAsCisweDY2LCAweDAwLCAweDlGLCAweDA5LCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHg3NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MjEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDQwLCAweEYxLCAweDA4LCAweEMxLCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDAyLAorMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNSwKKzB4MDIsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJGLCAweDQwLCAweEYzLCAweDEwLCAweERDLCAweDA0LCAweDMwLCAweDAzLAorMHhDMCwgMHhGOCwgMHgwMCwgMHgzMywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMSwgMHhBQywgMHg0MCwgMHhGMywKKzB4MDAsIDB4NEMsIDB4MDQsIDB4RjAsIDB4MEIsIDB4RTAsIDB4M0MsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4RDAsCisweDBGLCAweEMwLCAweDdGLCAweDAxLCAweEI3LCAweDAxLCAweENDLCAweDAzLCAweEYwLCAweDNGLCAweEMwLCAweEVDLCAweDAwLAorMHhCRiwgMHgwMywgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHg0MCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NzEsIDB4NDAsCisweDc0LCAweDAwLCAweDExLCAweDQwLCAweDc0LCAweDAzLCAweEQwLCAweDMxLCAweDQxLCAweDI0LCAweDUwLCAweEQxLCAweDA4LAorMHg0NCwgMHgwMCwgMHhEMCwgMHg5OSwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5QywgMHgwMywgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwKKzB4NDgsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDksIDB4NDQsIDB4MDcsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OEQsCisweDAwLCAweDQ1LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDE3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHg2NiwgMHgwMCwgMHhEMSwgMHgwOCwgMHg3NCwgMHgyMywgMHg5MCwgMHgxMSwgMHg0MCwgMHgzNCwKKzB4ODAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsCisweDEyLCAweEQwLCAweDA5LCAweDQwLCAweDM2LCAweDAwLCAweDVELCAweDAxLCAweDQ0LCAweDA2LCAweEQxLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNywgMHhEMCwgMHgwNSwgMHg0MSwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwKKzB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweDkwLCAweDAwLCAweDQyLCAweDMwLCAweEMwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg1MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NDgsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDgsIDB4MEMsIDB4NDIsIDB4MzMsCisweDAwLCAweENELCAweDgwLCAweDM1LCAweDAzLCAweEQwLCAweDBDLCAweDcwLCAweDIwLCAweDAwLCAweERELCAweDAwLCAweDA0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MkUsIDB4MDAsIDB4RjMsIDB4MDAsIDB4MUMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4RDAsIDB4MzQsIDB4MDAsIDB4OTMsCisweDAwLCAweDdDLCAweDAzLCAweEYyLCAweDBCLCAweEMwLCAweDM0LCAweDAwLCAweDkzLCAweDgwLCAweDRDLCAweDgwLCAweEYwLAorMHgwOSwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgyMCwKKzB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4RDAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDA3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LAorMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4NDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEIsCisweEMwLCAweDNGLCAweDAwLCAweEFGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDIwLCAweEZGLAorMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzgsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MkYsCisweDAwLCAweEJGLCAweDBDLCAweENDLCAweDEyLCAweEYwLCAweDFGLCAweEMwLCAweEJFLCAweDA5LCAweEJGLCAweEMwLCAweDlELAorMHg0MCwgMHhCMCwgMHg4RiwgMHhDMCwgMHgyRiwgMHgwMSwgMHhCMywgMHgxMCwgMHhEQywgMHhFMiwgMHgzMCwgMHgxRiwgMHhDMCwKKzB4M0YsIDB4MDEsIDB4RjMsIDB4MDIsIDB4Q0MsIDB4MDIsIDB4MzMsIDB4MTYsIDB4QzQsIDB4M0MsIDB4MDAsIDB4RUYsIDB4MDEsCisweENDLCAweDMzLCAweDMwLCAweDFGLCAweEMwLCAweDVBLCAweDAwLCAweEZCLCAweDAxLCAweEFDLCAweDI3LCAweEIwLCAweDBCLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MEUsIDB4NDQsIDB4MTIsIDB4RDAsIDB4NEQsIDB4NDAsIDB4M0MsIDB4MDMsIDB4MUQsIDB4MDMsIDB4NDQsIDB4MEYsCisweDEwLCAweDJGLCAweDQwLCAweDI3LCAweDA1LCAweEQxLCAweDA2LCAweDQ0LCAweDEyLCAweDEwLCAweDFELCAweDQ4LCAweEJGLAorMHgwMCwgMHhGMSwgMHgwNiwgMHg0NCwgMHgyQywgMHgxMCwgMHgwNSwgMHg0MSwgMHhCQywgMHgwMiwgMHhERCwgMHgwMSwgMHhENCwKKzB4MEIsIDB4MTAsIDB4MUQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDAsCisweDBGLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweEEzLCAweDA1LCAweDhELAorMHgwMSwgMHgwNiwgMHg2MiwgMHhEMCwgMHgwOSwgMHg0MSwgMHgzMCwgMHgyMCwgMHg4RCwgMHgwOCwgMHgxNSwgMHgwMywgMHg5MiwKKzB4Q0MsIDB4NDAsIDB4NDMsIDB4MDMsIDB4QzUsIDB4MTAsIDB4MzQsIDB4MTAsIDB4MTIsIDB4MEMsIDB4NDIsIDB4QjIsIDB4MjUsCisweEMxLCAweDhDLCAweDA0LCAweDA0LCAweDUwLCAweDAxLCAweDUwLCAweDMwLCAweDBDLCAweDVELCAweDAwLCAweDI0LCAweDMzLAorMHgxMCwgMHgwQywgMHg0MCwgMHgwNiwgMHgwMCwgMHhEOSwgMHhBMCwgMHg2NCwgMHgxMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHg0RiwKKzB4ODAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NjUsIDB4MDAsIDB4MUQsIDB4MDEsCisweDQ0LCAweDA2LCAweEQwLCAweDE5LCAweDUwLCAweDM0LCAweDAwLCAweDlELCAweDAzLCAweDU1LCAweDBGLCAweDEwLCAweDBELAorMHg0MiwgMHg2NywgMHgwMCwgMHhENSwgMHgwMCwgMHg2NCwgMHgwQywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDQsIDB4NDAsIDB4MDUsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4ODAsIDB4NzQsIDB4MDMsIDB4MTAsCisweDBELCAweDQwLCAweDc0LCAweDAwLCAweDU5LCAweDAxLCAweDQ0LCAweDAzLCAweDE4LCAweDExLCAweDQxLCAweDBGLCAweEEwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHg2NywgMHgwNCwgMHgxRiwgMHgwMSwgMHg0QywKKzB4MTQsIDB4RjAsIDB4NUMsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NUQsIDB4MEYsIDB4QjAsIDB4MEQsIDB4QzAsCisweDQ3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDA2LCAweDMwLCAweDBELCAweEUwLCAweDM3LCAweDAwLCAweEQxLCAweDIwLAorMHg0QywgMHgwNiwgMHg2MCwgMHgwNCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg2RSwgMHgwMywgMHgzMCwgMHgwQywKKzB4QzAsIDB4NzYsIDB4MDAsIDB4REIsIDB4MDUsIDB4MkMsIDB4MDMsIDB4QjAsIDB4MTksIDB4NDQsIDB4MjMsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDA1LCAweDAwLCAweDFGLCAweDEwLCAweEZDLCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwNCwgMHgzRiwgMHg0MCwgMHhBQywgMHgwMywgMHhGMiwgMHgwRiwgMHhDMCwgMHgwNywKKzB4MEMsIDB4RUIsIDB4MDUsIDB4MUMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4M0MsCisweDAwLCAweEIyLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDg5LCAweDlDLCAweDAzLCAweEYwLCAweDVGLCAweEM4LAorMHgzRiwgMHg0MCwgMHhGNywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4QTUsIDB4ODAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsCisweDA5LCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDgwLCAweDZDLCAweDBCLCAweDNDLCAweDBELCAweEMwLCAweDA0LCAweDAwLAorMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzMiwgMHgwMCwgMHhEQiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4MzEsIDB4MEQsIDB4RTAsIDB4MzQsIDB4MTAsIDB4OTMsIDB4MDIsIDB4NEMsIDB4MDMsIDB4MzQsIDB4NEQsIDB4QzAsIDB4NzQsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgxMCwgMHg5QiwgMHgwNiwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4M0YsIDB4MDAsIDB4ODEsIDB4MEIsIDB4NjgsIDB4MDcsIDB4QjAsIDB4MUYsIDB4QzAsIDB4RTQsIDB4MDAsIDB4RDAsCisweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDBELCAweDQ4LCAweDNGLCAweDAwLCAweEZCLCAweDEwLCAweDQ0LCAweDAyLCAweDAwLAorMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHg4MSwgMHg4MSwgMHhDNCwgMHgyQiwgMHgxMCwgMHgyRCwgMHg0MCwgMHg3MCwgMHgwMCwKKzB4MDUsIDB4MDUsIDB4NkMsIDB4MkYsIDB4MTAsIDB4NDksIDB4QzAsIDB4NkUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDAyLCAweDAwLCAweDkxLCAweDAyLCAweDI0LCAweDAwLCAweEQwLCAweDA4LCAweDY0LAorMHhGMywgMHgwMCwgMHgwMSwgMHgwMywgMHgyMCwgMHgwNywgMHgxMCwgMHg1QywgMHg0OCwgMHhFNCwgMHgwMCwgMHhDNSwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4MTEsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDIsIDB4RDUsIDB4MDEsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MTQsCisweDQwLCAweDcwLCAweDAxLCAweEMxLCAweDAwLCAweDI0LCAweDIzLCAweDkwLCAweDJDLCAweDQwLCAweDEwLCAweDAwLCAweEMxLAorMHgwMSwgMHgwNCwgMHgwNywgMHg1MCwgMHg2MCwgMHg0NCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4NTgsIDB4MDAsIDB4RTksIDB4MDEsIDB4QTQsIDB4MDUsIDB4RDAsIDB4MUEsIDB4NjAsIDB4N0IsCisweDA0LCAweDYxLCAweDAxLCAweEU0LCAweDA3LCAweDk0LCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEU1LCAweDAxLCAweEI0LAorMHgwNywgMHgxMCwgMHgxRSwgMHgwMCwgMHhGQiwgMHgwMCwgMHhFRCwgMHgwMywgMHg4NCwgMHgwNywgMHg1OCwgMHgzNywgMHg0MSwKKzB4NzksIDB4MDQsIDB4RjEsIDB4MDAsIDB4QTAsIDB4MDcsIDB4OTEsIDB4MEUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RjUsIDB4MDEsCisweEU0LCAweDI3LCAweDE4LCAweDEyLCAweDQ4LCAweDNFLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgxMCwgMHgxMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMywgMHhGMCwgMHgwOCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4NDMsIDB4MTQsIDB4MkMsIDB4NDMsIDB4MTAsIDB4OEQsIDB4QzEsIDB4MTAsIDB4MDQsIDB4QzcsIDB4MDAsIDB4MzQsIDB4MjEsCisweDMwLCAweDBDLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDg4LCAweDBDLCAweDAxLCAweDcwLCAweDAwLCAweDQwLCAweDM0LAorMHgwMCwgMHhDMywgMHgxOCwgMHg2NCwgMHgxMywgMHhCMCwgMHg4QywgMHg0MCwgMHgxMCwgMHgwMCwgMHhDMywgMHgwMCwgMHgwQywKKzB4NDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NDgsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDk4LCAweDNELCAweDIwLCAweEY3LCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDQwLCAweEVGLAorMHgwMCwgMHhGQywgMHgyMywgMHhGNSwgMHgwRiwgMHhDNCwgMHgzNSwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4QkYsIDB4MDIsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDEsIDB4QjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDBDLCAweERDLCAweDAzLCAweDcwLCAweDRFLCAweEMwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLCAweEZFLCAweDgzLAorMHg3MCwgMHgwNywgMHhDOCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwKKzB4MzcsIDB4ODAsIDB4NUIsIDB4MDAsIDB4NUMsIDB4MDEsIDB4MzQsIDB4MDksIDB4QzAsIDB4QjcsIDB4MDQsIDB4Q0YsIDB4ODAsCisweDVDLCAweDAzLCAweEY4LCAweDRELCAweEM5LCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDAxLCAweEYwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMywgMHhERiwgMHgwMiwgMHg3RSwgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHhCNiwgMHgwMiwgMHhERiwKKzB4MDAsIDB4NUMsIDB4NUIsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4Q0YsIDB4MjAsIDB4NEMsIDB4MDMsIDB4MjIsCisweDAxLCAweEM0LCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDFELAorMHgwOCwgMHg2MywgMHgwMCwgMHhCNCwgMHgwMSwgMHgxMCwgMHgwQSwgMHg0MCwgMHhCQiwgMHgxMSwgMHg2RCwgMHgwMCwgMHg5NCwKKzB4MDMsIDB4MzAsIDB4NkUsIDB4NDgsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDNCLCAweDAxLCAweEVELCAweDQ4LCAweEI0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDM4LCAweDA0LCAweEFELCAweDAwLAorMHhCNCwgMHgwQiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHg4MCwgMHhENCwgMHg4MywgMHgxMCwgMHgwNiwKKzB4QzAsIDB4NEUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsCisweEUxLCAweDAxLCAweEI0LCAweDQ3LCAweDEwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDExLCAweEQ0LCAweDQ3LAorMHg1MCwgMHgxRSwgMHg0OCwgMHg1QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhBNSwgMHgwNSwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwKKzB4MDAsIDB4RUQsIDB4MDksIDB4QjQsIDB4MDcsIDB4RDIsIDB4MUUsIDB4NTUsIDB4NzgsIDB4MDAsIDB4QUQsIDB4MDEsIDB4QjQsCisweDA3LCAweEQwLCAweDFCLCAweDQwLCAweDdBLCAweDAwLCAweEY1LCAweDAxLCAweDg0LCAweDA2LCAweDE0LCAweDE4LCAweDQwLAorMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgxMCwgMHhDMSwKKzB4MEQsIDB4MzQsIDB4MDcsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MTQsIDB4MEIsIDB4OTAsCisweDBDLCAweDQwLCAweEYzLCAweDA0LCAweENELCAweDA4LCAweDA0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDM3LCAweDIwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgyNywgMHhEMCwgMHg0QywgMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MTgsIDB4NDAsIDB4NzAsIDB4MDgsIDB4Q0QsIDB4MDEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4QUQsIDB4NDMsIDB4NUEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDFELCAweDA0LCAweDczLCAweDAyLAorMHhGQywgMHgwMSwgMHgzMCwgMHgyNywgMHhDMCwgMHgxNywgMHgxMCwgMHg3RiwgMHgwMiwgMHhERCwgMHhBOSwgMHg3NCwgMHgwNSwKKzB4QzAsIDB4OUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4RUMsIDB4MTUsIDB4RjAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4ODAsIDB4NUYsCisweDAwLCAweEZDLCAweDA5LCAweEYwLCAweDM2LCAweEMwLCAweDE0LCAweDAwLCAweDdGLCAweDAyLCAweDdDLCAweDAxLCAweEY5LAorMHgxNSwgMHhDMiwgMHgxRSwgMHgwNCwgMHg2NywgMHg4MSwgMHg0NCwgMHgwMSwgMHgxMCwgMHgyNywgMHhDMCwgMHg1QywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NDcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDQwLCAweDcwLCAweDQxLCAweEMwLCAweDgzLCAweDAwLCAweDFGLCAweDEyLCAweDdDLCAweDAwLCAweDc0LCAweDAxLCAweEMwLAorMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHg1QywgMHgwNCwgMHhGMCwgMHgwMSwgMHhDMiwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RjAsIDB4ODEsCisweEMwLCAweDA3LCAweDEwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHg4MCwgMHg5MywgMHgwNSwgMHgzQywgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDIsIDB4ODMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MjgsIDB4QzAsIDB4NjQsCisweDAxLCAweDlFLCAweDAwLCAweDc4LCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweEE3LCAweDQwLCAweDlCLCAweDAxLCAweDdDLAorMHg0MiwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyMCwgMHgwMSwgMHg5MywgMHg0MiwgMHg3QywgMHg4MiwgMHhGMCwgMHgzOSwgMHhDMCwKKzB4MjcsIDB4MDQsIDB4OTcsIDB4MDgsIDB4NkMsIDB4MTYsIDB4MzAsIDB4ODksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweDEwLAorMHgwOSwgMHhDMCwgMHhBNywgMHgwNCwgMHg5MSwgMHg4NiwgMHgwQywgMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHg2NCwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4RTcsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsCisweEQwLCAweDQ5LCAweEMwLCAweEU2LCAweDA0LCAweDkxLCAweDIwLCAweDc0LCAweDBFLCAweEQwLCAweDI5LCAweDQwLCAweDIzLAorMHg0MCwgMHg5QiwgMHg0MSwgMHg0NCwgMHg0NiwgMHgxNCwgMHgzOSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDYwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDY1LCAweDIyLCAweDk0LCAweDA5LCAweDU4LCAweDI2LCAweDAwLCAweDlELAorMHgwMCwgMHgzNiwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwOCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NjAsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsCisweDk1LCAweDAwLCAweDA0LCAweDAyLCAweDEyLCAweDI5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHg4MSwgMHg4MSwgMHgwNSwgMHgzNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MjEsIDB4MDksIDB4ODEsIDB4MDQsIDB4NDQsIDB4MTIsIDB4OTAsIDB4NTgsIDB4NDAsIDB4NjIsIDB4MDEsIDB4OEQsIDB4MDQsCisweDE0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAxLCAweEMxLCAweDA0LCAweDM0LCAweDEyLCAweEQwLCAweDA5LAorMHg2OCwgMHgyMiwgMHgwMSwgMHhDMSwgMHgwMCwgMHgzNiwgMHgxMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwOCwgMHg5OSwKKzB4MDAsIDB4MDUsIDB4MjIsIDB4MTAsIDB4NDgsIDB4NTAsIDB4NDAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEIwLCAweDg2LCAweDAyLCAweDExLCAweDBBLCAweDNDLCAweDI4LCAweDMwLCAweEExLCAweDQwLCAweDg3LAorMHgwMiwgMHgxMywgMHg0MCwgMHg2QywgMHgwMCwgMHhCNCwgMHhBMSwgMHhDOCwgMHg4NiwgMHgwMiwgMHgwRiwgMHgwQSwgMHg3NCwKKzB4MjgsIDB4MzQsIDB4MDEsIDB4ODQsIDB4OTcsIDB4MDIsIDB4MUIsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RDAsIDB4QTEsIDB4QzAsCisweDg0LCAweDQyLCAweDEzLCAweDQwLCAweDdDLCAweDI5LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLAorMHg0QywgMHgwOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4OTgsIDB4MkYsIDB4NEEsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RDQsIDB4MEIsIDB4QzAsIDB4MjcsIDB4NjIsCisweEJGLCAweDg4LCAweEJDLCAweDIyLCAweEY0LCAweDg5LCAweEMwLCAweDJELCAweDAyLCAweEJGLCAweDA4LCAweEZDLCAweDIyLAorMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywKKzB4MDIsIDB4QkYsIDB4NDAsIDB4N0MsIDB4MjIsIDB4RDAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4ODAsIDB4QkYsIDB4MDAsIDB4REUsCisweDkyLCAweEYwLCAweDhCLCAweEMwLCAweDc3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNywgMHgwMSwgMHhCMywgMHgxNCwgMHg3QywgMHgzMiwgMHgzMCwgMHgwOSwgMHhEMCwgMHgyQywgMHg0MCwgMHhBMywKKzB4MDAsIDB4OUMsIDB4MTIsIDB4MzAsIDB4NEIsIDB4QzEsIDB4MkMsIDB4MDMsIDB4OUYsIDB4MjUsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDJELCAweDAxLCAweEJGLCAweDE0LCAweDRDLCAweDEyLCAweDcwLCAweDBCLCAweEMwLCAweDJGLCAweDQwLAorMHhCMywgMHgwMCwgMHhGQywgMHgxMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBQiwgMHgwMCwgMHg4QywgMHgwMiwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4NzYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsCisweDE3LCAweDBELCAweDExLCAweDQ0LCAweDc0LCAweEIwLCAweDEwLCAweDAwLCAweDQxLCAweDA0LCAweDA0LCAweDExLCAweDA4LAorMHg0NCwgMHgwMCwgMHg5MCwgMHg0MSwgMHg0MCwgMHgwNCwgMHgwMywgMHgxRCwgMHgxQSwgMHg3NCwgMHg0MCwgMHhEMCwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDQsIDB4NDQsIDB4MjAsIDB4RDAsIDB4MDEsIDB4NDMsIDB4MDcsIDB4MDQsIDB4MTEsCisweDAwLCAweDc0LCAweDUwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDExLCAweDQwLCAweDQ1LCAweDAwLCAweEQyLAorMHgwNSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywKKzB4MDMsIDB4ODEsIDB4MzQsIDB4MzQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NTQsCisweDI3LCAweDkwLCAweDQ4LCAweDQxLCAweDIwLCAweDAxLCAweDhELCAweDA0LCAweDM0LCAweDIyLCAweEQwLCAweDA4LCAweDQwLAorMHgyMSwgMHgwMywgMHg4RCwgMHhCNCwgMHgwNCwgMHg4MiwgMHg1MCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMiwgMHhDNSwgMHgwMCwKKzB4MzQsIDB4MzIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4ODAsIDB4ODksIDB4MDAsIDB4MjQsIDB4ODIsIDB4RDAsIDB4MEMsCisweDQwLCAweDRBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDQwLAorMHg5MSwgMHgwNiwgMHg3NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwNCwgMHg0NCwgMHgwMiwKKzB4OTAsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MDgsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQ4LCAweDM3LCAweDAwLCAweDk1LCAweDEwLCAweDc0LAorMHg4MiwgMHhEMCwgMHg4RCwgMHg0NCwgMHg2NywgMHg4OCwgMHg5MSwgMHgwOCwgMHg2NCwgMHg4MiwgMHhEMCwgMHgxOSwgMHg0MCwKKzB4NjIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTMsCisweDgyLCAweDdDLCAweDFFLCAweDMxLCAweDA5LCAweEMwLCAweDI0LCAweDEwLCAweDkzLCAweDA2LCAweDVDLCAweDBBLCAweDM0LAorMHgwOSwgMHhDNCwgMHgyNCwgMHgwMSwgMHg5RSwgMHgwMCwgMHg3QywgMHgzMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4NEMsIDB4MUUsIDB4NzAsIDB4RTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NzQsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDIzLCAweDAwLCAweDlCLCAweDA0LCAweDZFLCAweDI2LCAweEQyLCAweDA5LCAweEMwLCAweDE2LAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHhFMSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MTYsIDB4RjYsIDB4OTksIDB4QzAsIDB4MjMsIDB4MjgsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MTIsIDB4NzAsIDB4MDksCisweEM1LCAweDI3LCAweDBDLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEUwLCAweDI3LCAweEEwLCAweDhGLAorMHgwMCwgMHg3RCwgMHgxMiwgMHhGMCwgMHgxOSwgMHhDMywgMHgyNywgMHgwMCwgMHg5QiwgMHgwMiwgMHg3QywgMHg0MiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUUsIDB4MDYsIDB4RjIsIDB4MDgsIDB4QzAsIDB4NTksIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAyLCAweDdDLAorMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMSwgMHgxRiwgMHgwMiwgMHg2QywgMHgwMCwgMHhCMCwgMHgwMCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MTMsIDB4MDAsCisweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMwLCAweDA2LCAweDQxLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDMxLCAweDAxLAorMHhDMSwgMHgwNywgMHgyMCwgMHgxRiwgMHgwMiwgMHg0RCwgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMSwgMHg1MCwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDIsIDB4NzQsIDB4MDEsCisweDEyLCAweDA1LCAweEMwLCAweDlDLCAweDA0LCAweDZELCAweDIxLCAweDA0LCAweDgxLCAweDEwLCAweDU3LCAweDQwLCAweDVGLAorMHgwMSwgMHg1RCwgMHg4MCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MiwgMHgxRiwgMHgyMCwgMHg3MSwgMHgwOCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4NTcsIDB4QzAsIDB4MUMsIDB4MDEsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MDUsIDB4MTAsIDB4MjcsIDB4QzEsCisweDlELCAweDA0LCAweDQxLCAweDA1LCAweEM0LCAweEFELCAweDEwLCAweDA3LCAweDUwLCAweDQwLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgxMywgMHg3NCwgMHgwMywgMHgxMCwKKzB4MEQsIDB4NDIsIDB4MzAsIDB4MTAsIDB4Q0QsIDB4MDQsIDB4MjQsIDB4MDIsIDB4OTAsIDB4M0MsIDB4NDAsIDB4NzMsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweEYzLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgzNCwgMHg4MCwgMHg0OSwgMHg1MCwgMHgwNSwgMHgwNywgMHgxMCwgMHgxOCwgMHg0MCwgMHhEMywKKzB4MDEsIDB4QzUsIDB4MDEsIDB4MDQsIDB4MDcsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg4LCAweDM4LCAweDAyLCAweEVELCAweDAyLCAweDM0LCAweDAzLCAweDE0LCAweDRFLAorMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMiwgMHhDNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MiwgMHgzQiwgMHgwOCwgMHhFRCwKKzB4MEMsIDB4QjYsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4RjMsIDB4MDAsIDB4RTEsIDB4MTAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDFFLCAweDQwLCAweDM4LCAweDgwLCAweDY5LCAweDAxLCAweDg0LCAweDQ1LCAweDEyLCAweDBBLCAweDQwLCAweDE5LCAweDAwLAorMHhCMSwgMHgwMCwgMHhDNCwgMHg0NSwgMHgxMCwgMHgwQSwgMHg0MiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4NDcsIDB4MzAsIDB4NUUsIDB4QzIsCisweDc4LCAweDEwLCAweDZGLCAweDAxLCAweEFDLCAweDA3LCAweEIwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLAorMHhCNCwgMHgxNywgMHhGMCwgMHgxRSwgMHg4MCwgMHg3QiwgMHg0MCwgMHhFMywgMHgwMSwgMHhCNCwgMHgwNywgMHhGMCwgMHgxNywKKzB4RDAsIDB4NzAsIDB4MDAsIDB4RUIsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzQsIDB4MUEsIDB4QzAsIDB4NUIsIDB4MDAsIDB4RTcsCisweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDE3LCAweEMwLCAweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgwNCwgMHhERiwgMHgwMCwgMHg3QywgMHgzMywgMHhGMCwgMHg4RCwgMHhEMCwgMHgxNSwKKzB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MzcsIDB4MTAsIDB4REYsIDB4MDYsIDB4N0MsCisweDUzLCAweEYwLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDgzLCAweEYwLCAweDA1LCAweEMwLAorMHgzNSwgMHgwMCwgMHhDNywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhDNCwgMHgxMywgMHgwMCwgMHg5NywgMHgwMCwKKzB4N0MsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEEwLCAweDdGLCAweDAwLCAweDdGLCAweDIxLCAweENDLCAweDA3LCAweEY4LCAweEFFLCAweEMwLCAweDVGLCAweDA4LAorMHhFRiwgMHgwMSwgMHhDQywgMHgwNywgMHg3MCwgMHg5RiwgMHhDNCwgMHg1QywgMHgwMiwgMHhGMywgMHgwQiwgMHhDQywgMHg0NywKKzB4MzEsIDB4MUYsIDB4NDAsIDB4NUYsIDB4MjAsIDB4N0YsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsCisweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweDMxLCAweDlCLCAweEMwLCAweDdGLCAweDAwLCAweEVGLCAweDAxLCAweENGLAorMHgzNiwgMHgzMCwgMHhERiwgMHhEMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4ODgsIDB4MzksIDB4MDAsIDB4N0QsIDB4MTAsIDB4ODQsIDB4MjMsIDB4RDgsIDB4NEUsIDB4MDQsIDB4QjgsIDB4MDAsIDB4QUQsCisweDA0LCAweDgxLCAweDAzLCAweDEwLCAweEFGLCAweDQwLCAweDFDLCAweDAyLCAweEYxLCAweDIwLCAweEQ1LCAweDAzLCAweDE0LAorMHgwRSwgMHg0MCwgMHgxQSwgMHgwMSwgMHg2RCwgMHgwOCwgMHg4NSwgMHgwMywgMHhEMCwgMHg4RSwgMHgwMCwgMHgzOSwgMHgwMiwKKzB4RUQsIDB4MDAsIDB4QTQsIDB4MTEsIDB4MTAsIDB4OEEsIDB4NDAsIDB4QkIsIDB4MDEsIDB4RUQsIDB4MDQsIDB4REMsIDB4MjAsCisweDEwLCAweENBLCAweDQwLCAweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgzOSwgMHgwMCwgMHg2RCwgMHgwMCwgMHg4NSwgMHgwMywgMHhEMCwgMHg4RiwgMHg0MCwgMHgxOSwgMHgwMCwgMHg2RCwgMHg0MCwKKzB4QzAsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDIsIDB4MTgsIDB4NjQsIDB4RTEsIDB4MDAsIDB4ODAsIDB4NDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDNBLCAweDA4LCAweENELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDA3LCAweDQwLCAweDE4LCAweDAwLCAweEVELAorMHgwMCwgMHgzNCwgMHgwMywgMHgxMiwgMHgwQSwgMHg0OCwgMHgzQiwgMHgyNCwgMHhGRCwgMHgyMCwgMHg4NCwgMHg1MiwgMHgxMiwKKzB4Q0EsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4NzMsCisweDEyLCAweDBELCAweDAyLCAweDA0LCAweDRCLCAweEQwLCAweDJDLCAweDQwLCAweDA0LCAweDAwLCAweDBELCAweDA4LCAweDA0LAorMHg2RiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHgwMCwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwRiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MjIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MEYsIDB4RDIsIDB4MDAsIDB4NDAsIDB4MjEsIDB4MDAsIDB4Q0QsIDB4ODUsCisweDI0LCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDczLCAweDExLCAweENELCAweDAwLCAweDE0LCAweDA0LCAweDEwLCAweDM4LAorMHg0MCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzRCwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4Q0MsIDB4MUYsIDB4RDAsIDB4MkYsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OEYsIDB4MjAsIDB4NEMsIDB4MEYsCisweDc0LCAweDAxLCAweEQyLCAweEU0LCAweDAwLCAweEYzLCAweDAwLCAweEM0LCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDI2LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwQiwgMHhGMCwgMHgzOSwgMHhDMSwgMHgwNCwgMHgwMCwgMHg0RiwgMHg0NywgMHg3NCwKKzB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4RjMsIDB4MDAsIDB4REYsIDB4MDAsIDB4NDQsIDB4MDcsIDB4MzQsIDB4MjEsIDB4ODAsCisweDU0LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDIxLCAweDlGLAorMHgxMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNSwgMHgwMCwgMHg5RiwgMHgxMCwgMHg3RCwgMHgwMywgMHhGMCwKKzB4MDksIDB4QzAsIDB4QTcsIDB4MDQsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4ODYsIDB4MDAsCisweDlGLCAweDAyLCAweDdDLCAweDIzLCAweEYwLCAweDQxLCAweEMwLCAweDg3LCAweDAwLCAweDVGLCAweDQwLCAweDZDLCAweDAyLAorMHhGMCwgMHgyOSwgMHhDMCwgMHhCNywgMHgwMCwgMHg5RiwgMHg5MCwgMHg1QywgMHgwOSwgMHhGMCwgMHhDOSwgMHhDMCwgMHgzNywKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4ODAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDJGLCAweDAwLCAweDMzLCAweDg5LCAweENDLCAweDA3LCAweDEwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGNCwgMHg0MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4NDMsIDB4QzAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEI3LCAweDAwLCAweEZDLCAweDA3LCAweDM0LCAweDAxLCAweEM4LCAweDA3LCAweDI0LAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHg4MCwgMHg5RCwgMHgwNywgMHg3NCwKKzB4ODMsIDB4RDAsIDB4MEQsIDB4NDIsIDB4RTcsIDB4MjAsIDB4MTEsIDB4ODcsIDB4MDQsIDB4MDcsIDB4QjAsIDB4MzEsIDB4NDAsCisweEU3LCAweDAwLCAweERELCAweDIwLCAweDY0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDQ2LCAweDAwLCAweDk5LCAweDAxLAorMHg3NCwgMHg4MywgMHg5MSwgMHgzMCwgMHg0MCwgMHhFNSwgMHgwMCwgMHhERCwgMHgwMSwgMHg0NCwgMHgwNiwgMHhEMCwgMHgzOSwKKzB4NDAsIDB4NzcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MzEsIDB4NDQsIDB4ODcsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweDIwLCAweDlELCAweDAxLCAweDc0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg2NCwgMHg0NywgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgyMywgMHg1MCwgMHgxMSwgMHg0MCwgMHg2NywKKzB4MDQsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QzcsIDB4MDAsIDB4MUQsIDB4MDMsIDB4NzQsCisweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDQ3LCAweDAwLCAweDlELCAweDAxLCAweDU0LCAweEM0LCAweEQwLCAweDFELCAweDQwLAorMHg3NywgMHgwMCwgMHhENSwgMHgwMSwgMHgzNCwgMHgxQSwgMHgxMCwgMHgzMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDYwLCAweDIzLCAweDAwLCAweDgxLCAweDAwLCAweDQ0LCAweDAzLCAweEQ0LCAweDA4LCAweDQwLCAweDIzLCAweDIwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4OTAsIDB4MDksIDB4NDAsIDB4MDMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAxLCAweDEwLCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzRSwgMHgwMCwgMHgxRCwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4QzAsIDB4MDcsIDB4MDgsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4RkYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweEM0LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwOSwgMHhEMCwgMHgwNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwKKzB4OTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMywgMHhBMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRSwgMHgwMCwKKzB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEUsIDB4MDAsIDB4QkEsIDB4MDAsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MEEsCisweEMwLCAweDJELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAzLCAweEMyLCAweDJGLCAweDAwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwQiwgMHhDMCwgMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTAsIDB4MkYsIDB4NDAsIDB4MjMsIDB4MTAsIDB4Q0QsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4NEMsCisweDQwLCAweDMzLCAweDgxLCAweENDLCAweDI0LCAweDMwLCAweDEzLCAweEQwLCAweDJDLCAweDA1LCAweEYzLCAweDA5LCAweERDLAorMHgwMCwgMHgzMCwgMHg0RSwgMHhDMCwgMHgyQywgMHgwMCwgMHgzRiwgMHgwMSwgMHhDRCwgMHgwNCwgMHhGMSwgMHgxMywgMHhDMCwKKzB4NEMsIDB4MDgsIDB4MzMsIDB4MDEsIDB4RkMsIDB4MDQsIDB4QjAsIDB4MTMsIDB4RDQsIDB4NEMsIDB4NDAsIDB4RjMsIDB4MDAsCisweENELCAweDA3LCAweEYwLCAweDRGLCAweEMxLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHg1MSwgMHg5MiwgMHgwNCwgMHgwOCwgMHgxMywgMHgwOSwgMHg0MCwgMHgwNCwgMHgwNSwKKzB4MTEsIDB4MTAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MDEsIDB4NDEsIDB4QTQsIDB4MDUsIDB4QzEsIDB4MDQsIDB4NDQsIDB4MkMsCisweDEwLCAweDNGLCAweEMwLCAweDY0LCAweDAyLCAweDFELCAweDAwLCAweDY0LCAweDA0LCAweEQwLCAweDA1LCAweEMwLCAweDA0LAorMHgyMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwMSwgMHg2MCwgMHgwNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NCwKKzB4MDcsIDB4RDEsIDB4MkQsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweEEwLCAweDI3LCAweDAwLCAweDAxLCAweDA1LCAweDA2LCAweDBDLCAweDEwLCAweDAwLCAweDQwLCAweDIwLCAweDAxLCAweDgxLAorMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0OCwgMHgyMSwgMHgwMCwgMHg4MSwgMHgwNCwgMHgzNCwgMHgwMCwgMHhENCwKKzB4OEMsIDB4NDQsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDEsIDB4RDAsIDB4MDAsIDB4NDIsIDB4NDYsIDB4MjAsCisweDBELCAweDAxLCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweEM5LCAweDAwLCAweDI0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwKKzB4MjUsIDB4MDIsIDB4NTEsIDB4NDQsIDB4MTQsIDB4MDQsIDB4MTQsIDB4MUQsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDU1LCAweDAzLCAweDE0LCAweDA5LCAweDQwLCAweDY0LCAweDAwLCAweDUxLCAweDAwLCAweDY0LCAweDBDLCAweEMwLCAweDFELAorMHg0NCwgMHg3NiwgMHgwNCwgMHg4RCwgMHgwMCwgMHg3NCwgMHg4OSwgMHhEMCwgMHgwNSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgxNSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OTksIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsCisweDFDLCAweDQwLCAweDBDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDQzLAorMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHgwNCwgMHgzMCwgMHgzMSwgMHhDMiwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMSwgMHg1QywKKzB4MDAsIDB4MzAsIDB4MTEsIDB4QzAsIDB4RTQsIDB4MDQsIDB4RDMsIDB4MDQsIDB4N0MsIDB4MEMsIDB4RjAsIDB4MzUsIDB4QzAsCisweEU0LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDEyLCAweDAwLCAweDU3LCAweDAwLAorMHgzQywgMHgwMSwgMHhCMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHhEQiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgxRCwKKzB4QzAsIDB4MDgsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4NEQsIDB4MDAsCisweDdGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDEyLCAweDNGLCAweDA5LCAweEVDLCAweDAxLAorMHhGMCwgMHg5MywgMHg4MCwgMHgyRiwgMHg1MCwgMHhGRiwgMHgwMCwgMHg1QywgMHgwMCwgMHgzMCwgMHgwNiwgMHhDMCwgMHgyNSwKKzB4MDAsIDB4M0YsIDB4MDgsIDB4Q0MsIDB4MDAsIDB4RjIsIDB4MDcsIDB4QzQsIDB4MUYsIDB4MDAsIDB4N0IsIDB4MDAsIDB4RkMsCisweDgxLCAweEYwLCAweDgzLCAweEMwLCAweDBGLCAweDAyLCAweEU3LCAweDA4LCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEQ0LAorMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHg0MCwgMHgzMywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4MzIsIDB4MzEsIDB4QzAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDUzLCAweDA0LCAweDZDLCAweDg4LCAweEIwLCAweDJELCAweEMwLCAweDM0LCAweDExLAorMHg5NywgMHgwNSwgMHg3QywgMHgwMSwgMHgzMCwgMHg0MSwgMHhDMCwgMHgxNywgMHgwMiwgMHg1QiwgMHgxMCwgMHg0QywgMHgwMywKKzB4MzAsIDB4MTksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4MDQsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MTUsIDB4QzAsIDB4MDgsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDIwLCAweDQxLCAweDAxLAorMHg0NCwgMHgxNCwgMHgxMCwgMHhCRCwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5RCwgMHgwQiwgMHg0NCwgMHgyRiwgMHhEMCwgMHhBOCwKKzB4QzIsIDB4MjYsIDB4MDAsIDB4RDEsIDB4ODIsIDB4MDQsIDB4MDAsIDB4MTAsIDB4QUQsIDB4NDAsIDB4QjQsIDB4MDAsIDB4OTEsCisweDAzLCAweDcwLCAweDA5LCAweDExLCAweDM1LCAweDQwLCAweDk3LCAweDAyLCAweDUxLCAweDEzLCAweDQ0LCAweDQzLCAweDEwLAorMHhCOSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NSwgMHgxMywgMHhEMCwgMHgxNSwgMHg0MCwgMHg2QywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MjAsIDB4MDIsIDB4MDEsIDB4MUEsIDB4MjAsCisweDAwLCAweDE0LCAweDIxLCAweDQwLCAweDEwLCAweDAwLCAweDRELCAweDAwLCAweDYwLCAweDJDLCAweEQwLCAweDE0LCAweDQwLAorMHgzNCwgMHg0MCwgMHhEMSwgMHgwMiwgMHgyNCwgMHgwMCwgMHhEMCwgMHgyQywgMHg0MCwgMHgwMCwgMHgyMCwgMHg0NSwgMHgwMiwKKzB4MzAsIDB4NjIsIDB4MTAsIDB4MTksIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODAsIDB4NDEsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MDQsCisweDQwLCAweDEwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA3LCAweEQwLCAweDA4LCAweDQwLCAweDFDLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OCwgMHgwMCwgMHgzMSwgMHgwMSwgMHhBNSwgMHgwNCwKKzB4MTAsIDB4MUIsIDB4NDAsIDB4NTgsIDB4MDAsIDB4NkQsIDB4MDEsIDB4QTQsIDB4MDUsIDB4RDAsIDB4MTYsIDB4NDAsIDB4NkEsCisweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDI0LCAweDUwLCAweDlFLCAweDQwLCAweDU4LCAweDAwLCAweDYxLCAweDAxLCAweEI2LAorMHgwNiwgMHgxMCwgMHgxRSwgMHg0MCwgMHg2RiwgMHgwMCwgMHhCMSwgMHg4MSwgMHhDNCwgMHgwNCwgMHgxMCwgMHgxNiwgMHg0MCwKKzB4NTgsIDB4MDAsIDB4RUQsIDB4MDksIDB4ODQsIDB4MDcsIDB4RDAsIDB4MkYsIDB4NDAsIDB4NzQsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDI0LCAweDAxLCAweDAzLCAweDA4LCAweDI0LCAweDAwLCAweDMwLAorMHg2NCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhERiwgMHgwMCwgMHgyQywgMHgwMiwgMHhGMCwgMHgwQywgMHhDMSwgMHgxNCwgMHgyMCwKKzB4ODMsIDB4MDAsIDB4MkMsIDB4MjAsIDB4RjIsIDB4MDgsIDB4RDAsIDB4MTAsIDB4MDAsIDB4QzcsIDB4MDAsIDB4M0MsIDB4MDMsCisweDMwLCAweDQ4LCAweEMxLCAweDIzLCAweDEwLCAweDgzLCAweDAwLCAweDBDLCAweDAyLCAweDMyLCAweDBELCAweEQwLCAweDMwLAorMHgwMCwgMHg4RiwgMHgwMCwgMHgwRCwgMHgwMywgMHhGMCwgMHg4QywgMHhDOCwgMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4NDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MEUsCisweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDA4LCAweERELCAweDAzLCAweEYyLCAweDhFLCAweEM0LCAweDJGLCAweDIwLCAweEZGLAorMHgwMCwgMHhGQywgMHgyMCwgMHhCMCwgMHgwRiwgMHhDMiwgMHgxRiwgMHgwMiwgMHhGRiwgMHgwOCwgMHhCQywgMHgyMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QTcsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDRFLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzNCwgMHgwNSwgMHhDMCwKKzB4MTQsIDB4MDAsIDB4NUYsIDB4MDEsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzQsIDB4MDAsIDB4Q0YsIDB4MDAsCisweDRDLCAweDA0LCAweDMwLCAweDRDLCAweEMwLCAweDM0LCAweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhEMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4MEQsIDB4MDMsIDB4MzAsIDB4MEMsIDB4RDAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDgwLCAweDBELCAweDEwLCAweDIxLCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDE4LAorMHgzMCwgMHg2RCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgyOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhBQywKKzB4MDAsIDB4OTAsIDB4MEUsIDB4NDMsIDB4MzgsIDB4NDgsIDB4NjEsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDIsCisweDM4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDA2LCAweDQwLCAweDFCLCAweDAwLCAweEZELCAweDAwLAorMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg2MCwgMHg0QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDQsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsCisweEVELCAweDAxLCAweDg0LCAweDA2LCAweEQwLCAweDFFLCAweDYwLCAweDc4LCAweDAwLCAweEZELCAweDAxLCAweDA0LCAweDQwLAorMHhEMCwgMHgxQSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFOSwgMHgyMSwgMHhCNiwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwgMHg3OCwKKzB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsCisweDA3LCAweDEwLCAweDE3LCAweDQwLCAweDA0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyOCwgMHgzMywgMHgwMiwgMHg4MSwgMHgwMCwgMHg3NCwgMHgyNywgMHgxMCwgMHg3QywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjIsIDB4MjAsIDB4MDEsIDB4Q0QsIDB4ODMsIDB4MjQsIDB4MDcsIDB4RDAsCisweDJDLCAweDQwLCAweDcwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDQyLCAweDM0LCAweDAwLAorMHhDMSwgMHg0MCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwOSwgMHgwNCwgMHgwMywKKzB4MTUsIDB4MDQsIDB4NjAsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjAsCisweDE5LCAweDQwLCAweDczLCAweDQyLCAweEZDLCAweDA1LCAweDMwLCAweDU3LCAweEQwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLAorMHg0RCwgMHgwMSwgMHhGMCwgMHgwNSwgMHhEMCwgMHgxQywgMHgyMCwgMHg3RiwgMHgwNSwgMHhDQywgMHgwOSwgMHg3NCwgMHgyNywKKzB4QzAsIDB4REMsIDB4MDMsIDB4NUIsIDB4ODAsIDB4M0MsIDB4MDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NTMsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDBDLCAweDAxLCAweDMwLAorMHgyNywgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHg4NSwKKzB4MTQsIDB4MEYsIDB4MjQsIDB4N0MsIDB4MDQsIDB4RjQsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4ODAsIDB4N0MsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDAzLCAweDAwLCAweDFGLCAweDEwLCAweDdDLCAweDEwLCAweDMwLCAweDYxLCAweEQwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhEMSwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMxLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLAorMHg5MywgMHgwMSwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4MzAsIDB4ODksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MEMsIDB4MEEsIDB4MzAsIDB4MjksIDB4QzAsIDB4MjIsCisweDcwLCAweDkzLCAweDgwLCAweDdDLCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDY0LCAweDAyLCAweDkzLCAweDA1LCAweDdDLAorMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MTAsIDB4OTEsCisweDI4LCAweDQ0LCAweDAyLCAweDEwLCAweDI4LCAweDQwLCAweEE0LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweDEwLAorMHgzOSwgMHg0MCwgMHgyNCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg2QywgMHgwMiwgMHgxMCwgMHgyOCwgMHg0MCwgMHhBNCwgMHgwMCwKKzB4OTEsIDB4MDIsIDB4NUMsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4RTQsIDB4MDgsIDB4OTEsIDB4MjEsIDB4NzQsIDB4ODIsCisweEQwLCAweDI5LCAweDQwLCAweEU3LCAweDAwLCAweDlELCAweDAzLCAweDQ1LCAweDAyLCAweDE0LCAweDA5LCAweDQwLCAweDA0LAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0NiwgMHg5MSwgMHgyMCwKKzB4NDQsIDB4MDIsIDB4MTIsIDB4MjksIDB4NDAsIDB4MjQsIDB4MDEsIDB4QkQsIDB4MDQsIDB4RjQsIDB4MDIsIDB4MTgsIDB4MEEsCisweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDgwLCAweDY0LCAweDAyLCAweDE5LCAweDBELCAweDQwLCAweDI2LCAweDAwLCAweDkxLAorMHgwMCwgMHhGNCwgMHgyMiwgMHgxQywgMHgwRiwgMHg0MCwgMHgyQywgMHgwNCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwNiwgMHhEMCwKKzB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4OEQsIDB4MEEsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MTgsIDB4NDAsIDB4NjIsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDI0LCAweDAxLCAweDgxLCAweDA0LCAweDA0LAorMHgxMiwgMHgxMCwgMHg0OCwgMHg1MCwgMHg2OCwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwMiwgMHgxMCwgMHgxQSwgMHg0MiwKKzB4MjAsIDB4MDEsIDB4OTEsIDB4MDAsIDB4MjQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MzIsIDB4MDEsIDB4QTEsIDB4MDEsCisweEQ0LCAweDAzLCAweDEwLCAweDBBLCAweDQwLCAweDI4LCAweDIwLCAweEExLCAweDAxLCAweEI0LCAweDAyLCAweEQwLCAweDFBLAorMHg0MCwgMHg2QiwgMHgwMCwgMHg4RCwgMHgwNCwgMHgyNSwgMHgwMiwgMHgxMCwgMHg1OCwgMHg1MCwgMHg0MiwgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4ODYsIDB4MDIsIDB4NTMsIDB4MEEsIDB4NEQsIDB4MjgsCisweDM0LCAweEEwLCAweDQwLCAweDg0LCAweDAyLCAweDBGLCAweDBBLCAweDdDLCAweDI5LCAweDMwLCAweEEyLCAweDQwLCAweDg0LAorMHgwMiwgMHgxMywgMHgwQSwgMHg2QywgMHgwMCwgMHgzMCwgMHgwNSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwQSwgMHg3QywKKzB4MDAsIDB4MzAsIDB4QTAsIDB4RDAsIDB4ODAsIDB4MDIsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4QTEsIDB4QzAsCisweDhGLCAweDAyLCAweDFGLCAweDBBLCAweDZDLCAweDAwLCAweDMwLCAweEExLCAweEMwLCAweDc2LCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwKKzB4OEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjQsIDB4MDksIDB4RDAsIDB4MkYsIDB4NDIsCisweEJGLCAweDgwLCAweEZDLCAweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDI5LCAweDgyLCAweDlGLCAweDAwLCAweDVDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4QkYsIDB4MDgsIDB4NUMsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NjUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDAxLCAweEEzLCAweDE0LCAweEZDLCAweDMyLCAweEYwLCAweDBCLAorMHhEMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwOCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyNiwgMHgxOSwgMHhCMywKKzB4MDAsIDB4Q0MsIDB4MDYsIDB4MzAsIDB4MUIsIDB4QzEsIDB4NkUsIDB4MDQsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsCisweDBCLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAzLCAweDMxLCAweDBCLCAweEMwLCAweDJDLCAweDAyLAorMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHg4RiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MTcsIDB4NDUsIDB4MTEsIDB4MDQsIDB4NzQsIDB4MzAsIDB4RDAsIDB4MjAsIDB4NDEsCisweDE0LCAweDQ0LCAweDUxLCAweDAwLCAweDc0LCAweDUwLCAweDEwLCAweDQxLCAweDUwLCAweDA0LCAweDAyLCAweDEzLCAweDAwLAorMHg2QywgMHgyOCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHg1RCwgMHgwNCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDEsIDB4MDQsIDB4MDQsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NDUsIDB4NDAsIDB4MTQsIDB4MDEsIDB4MUQsCisweDEyLCAweDQ1LCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHg0MywgMHg4MSwgMHgxNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHhDOCwgMHg1MCwgMHgyMCwKKzB4MTAsIDB4ODEsIDB4MDAsIDB4NzQsIDB4MTYsIDB4MTQsIDB4NDgsIDB4NDEsIDB4MjQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MjQsCisweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDhELCAweDk0LCAweDc0LCAweDAyLCAweDk4LCAweDQ5LCAweDQwLAorMHgyMiwgMHgwMCwgMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg5MCwgMHg0OCwgMHg0MSwgMHgyMiwgMHgxMSwgMHg4RCwgMHgwQywKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MTgsIDB4NDAsIDB4NDgsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweEQwLCAweDQ5LCAweDQxLCAweDIwLCAweDAwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NCwgMHg2MiwKKzB4OTgsIDB4MTksIDB4NDQsIDB4MjQsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4OUMsIDB4MDksIDB4NTAsIDB4MjIsCisweDAwLCAweDkxLCAweDAwLCAweDU0LCAweDAyLCAweDkwLCAweDA4LCAweDUwLCAweDI2LCAweDAwLCAweDlELCAweDA4LCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4MDAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTQsIDB4MDAsIDB4OTMsCisweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDQwLCAweDkzLCAweDEwLCAweDZELCAweDBBLCAweEIwLAorMHg3OSwgMHhDMCwgMHgyNiwgMHgxMCwgMHg5RiwgMHgwMiwgMHgzQywgMHgwMiwgMHhCMCwgMHgwOCwgMHhDMiwgMHgyNiwgMHg0MCwKKzB4ODMsIDB4MDAsIDB4NUMsIDB4NDIsIDB4QjQsIDB4MjksIDB4QzAsIDB4QTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsCisweEYwLCAweDE5LCAweEMwLCAweDE0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LAorMHhFNSwgMHgwMCwgMHg5RiwgMHgxMCwgMHg3QywgMHhBNiwgMHhGMCwgMHgxOCwgMHhEMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OTcsIDB4MTUsIDB4N0UsIDB4MDYsIDB4NzAsIDB4MDksCisweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDI2LCAweDcyLCAweDA5LCAweEMxLCAweDI1LCAweDAwLCAweDlGLAorMHgwMCwgMHg2RCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwNCwgMHg5RiwgMHgxMCwgMHg3RSwgMHgwMiwgMHhGMCwKKzB4NDksIDB4RDEsIDB4NUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODEsCisweDAxLCAweDEzLCAweDAyLCAweDRDLCAweDIwLCAweDM0LCAweDgxLCAweEMwLCAweDg2LCAweDQ0LCAweDEzLCAweDEyLCAweDZELAorMHgwNCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMiwgMHg0QywgMHg4OCwgMHgzMCwgMHgyMCwgMHhDMCwKKzB4MDQsIDB4MDgsIDB4MUYsIDB4MDIsIDB4NEQsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsCisweDdDLCAweDQwLCAweEYwLCAweDIxLCAweEQwLCAweDg0LCAweDQwLCAweDEzLCAweDA4LCAweDRDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgxQywgMHgwMCwKKzB4NzEsIDB4ODIsIDB4NDQsIDB4MDUsIDB4MTAsIDB4MTcsIDB4QzAsIDB4OUMsIDB4MDAsIDB4NzEsIDB4MDIsIDB4ODQsIDB4MDUsCisweEQwLCAweDE2LCAweDQwLCAweDEwLCAweDAwLCAweDdELCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDM3LCAweDQwLCAweDlDLAorMHgwMCwgMHg3RCwgMHgwMywgMHhDNCwgMHgxMSwgMHhEMCwgMHgxNywgMHhDMCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwMCwgMHhCMCwKKzB4NEQsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MUMsIDB4MDAsIDB4NzEsIDB4MDEsIDB4NDUsIDB4MDEsIDB4RDAsIDB4MTcsIDB4NDEsCisweDUwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDMyLCAweDQwLCAweDgxLAorMHgwMiwgMHgyNCwgMHgwNywgMHgxMCwgMHgwQywgMHg0MCwgMHhCMCwgMHgwMCwgMHhDMSwgMHgwMiwgMHgwNCwgMHgyNywgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4NUQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4QjgsIDB4NTEsIDB4QjAsIDB4MjEsCisweENELCAweDA1LCAweDAwLCAweDA3LCAweEQwLCAweDJDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDEzLCAweDM0LCAweDBCLAorMHhEOCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHg5MSwgMHgwMywgMHgwNCwgMHgwMiwgMHhEMCwgMHgyQywgMHg0MCwgMHg1MCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MjgsIDB4MDAsIDB4MzEsIDB4MDEsCisweEE0LCAweDA2LCAweDEwLCAweDA2LCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDAzLCAweEQwLCAweDBFLAorMHg0MiwgMHgzOCwgMHgyMSwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywgMHg5MCwgMHgwOCwgMHg0MCwgMHgxOCwgMHgwNCwgMHhFRCwKKzB4MDMsIDB4ODQsIDB4MDEsIDB4RDEsIDB4MkYsIDB4NTAsIDB4MzgsIDB4MDAsIDB4MjEsIDB4MTAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDBFLCAweDQwLCAweDc4LCAweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDE0LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg1QywgMHgwMiwgMHg2MywgMHgwMSwgMHhFQywKKzB4MDcsIDB4MzAsIDB4MUUsIDB4RDEsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MUEsIDB4RDAsCisweEY4LCAweDIxLCAweDNGLCAweDAxLCAweDg0LCAweDA3LCAweEIwLCAweDE2LCAweEMwLCAweDc4LCAweDAwLCAweEZGLCAweDIxLAorMHg4QywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QywgMHg0MCwgMHgyMywgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxRiwKKzB4QzAsIDB4N0MsIDB4MDAsIDB4NzMsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RjAsIDB4MUUsIDB4RDAsIDB4NTQsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDlELCAweDAwLCAweDFGLCAweDgwLCAweDVELCAweDEyLAorMHhGMCwgMHgwNywgMHhDMCwgMHgzNSwgMHgwOCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMiwgMHgwMCwgMHhDMCwgMHg3NywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDM1LCAweDA4LCAweDFGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4N0QsIDB4MDAsIDB4MjMsIDB4MDEsIDB4Q0MsIDB4M0YsIDB4RjgsCisweDhCLCAweEMwLCAweDdDLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEIwLCAweDlCLCAweEMwLCAweDdGLCAweDAwLAorMHhFNywgMHgwMSwgMHg4QywgMHg4NywgMHgyNCwgMHgxRSwgMHhDMCwgMHg1RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhENCwgMHgyNSwKKzB4QjAsIDB4MUYsIDB4RDgsIDB4N0MsIDB4MDAsIDB4MzIsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsCisweDAwLCAweDczLCAweDAxLCAweENDLCAweDA2LCAweEYwLCAweDE3LCAweEMwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgyMSwgMHg4MiwgMHg4NCwgMHg2MiwgMHgzMCwgMHg0NywKKzB4NDAsIDB4M0MsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QkMsIDB4MDIsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUIsCisweDAwLCAweEFDLCAweDEzLCAweDMwLCAweDBFLCAweDQwLCAweDk4LCAweDQwLCAweEUxLCAweDA4LCAweDg0LCAweDAxLCAweDE0LAorMHg0QiwgMHhDMSwgMHgzQywgMHgwMCwgMHgyMSwgMHgwOCwgMHhCNCwgMHgwOCwgMHhEMCwgMHgyRSwgMHg0MCwgMHgzQywgMHgwMCwKKzB4RTEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4ODIsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDYxLCAweDAwLCAweDA0LCAweDEzLCAweDUwLCAweDhBLCAweDUwLAorMHgzOCwgMHgwMCwgMHhFOSwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwQSwgMHg2MCwgMHgzMywgMHgwMCwgMHhCNSwgMHgwMCwKKzB4QTQsIDB4ODMsIDB4ODAsIDB4MEYsIDB4NTAsIDB4M0IsIDB4MDAsIDB4NjEsIDB4MDAsIDB4OTQsIDB4MDAsIDB4OTQsIDB4MEUsCisweDYwLCAweDM4LCAweDAwLCAweDI5LCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEUxLAorMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwNiwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MjgsIDB4NTEsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDUsIDB4MEEsIDB4MTIsIDB4QjUsIDB4NDEsIDB4MzAsCisweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweDA0LCAweDYwLCAweEYzLCAweDQwLCAweDg5LCAweDAzLCAweDI0LAorMHgyMywgMHgxMCwgMHgxQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4RDEsIDB4MDAsCisweDA1LCAweDAyLCAweEQwLCAweDE4LCAweDQwLCAweDEzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHg2NSwgMHg0MCwgMHgxMywgMHgwNywgMHg0QywgMHgwRSwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4REIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MDgsIDB4QzIsIDB4M0YsIDB4MjAsIDB4MDcsIDB4MEQsIDB4MEMsIDB4MEEsCisweEIwLCAweDVELCAweEMwLCAweDczLCAweDA0LCAweEQzLCAweDAwLCAweDVDLCAweDAyLCAweEIwLCAweDBELCAweEMwLCAweDM0LAorMHgwMCwgMHgwQiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5MywgMHgwNSwgMHg0QywKKzB4MDMsIDB4RjAsIDB4MEMsIDB4QzEsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDA4LCAweDI3LCAweDAyLCAweDNGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDIxLCAweEMwLCAweDI3LCAweDIwLCAweDk3LAorMHgwMCwgMHg1QywgMHgwNywgMHhGMCwgMHgyOSwgMHhDMCwgMHgzNywgMHgwNiwgMHg5NywgMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzUsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzIsIDB4MjUsIDB4QzAsIDB4QTUsIDB4MDAsCisweDEzLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwKKzB4MEYsIDB4NjAsIDB4NzMsIDB4MDAsIDB4QUMsIDB4NDIsIDB4QjAsIDB4MDMsIDB4QzAsIDB4MUMsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAzLCAweDMwLCAweDRCLCAweEMwLCAweDNFLCAweDAwLCAweDMzLCAweDA1LCAweENDLCAweDA3LCAweDMwLCAweDRGLAorMHg0MCwgMHgzNywgMHgwMCwgMHhGMywgMHgwMCwgMHhFQywgMHgwMiwgMHhFMCwgMHgzRiwgMHhDMCwgMHgxQywgMHgwMCwgMHgzMSwKKzB4MDAsIDB4Q0MsIDB4MDEsIDB4RjAsIDB4MDcsIDB4ODAsIDB4NUMsIDB4MDAsIDB4NTMsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDNGLCAweEUwLCAweDAwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEM2LAorMHgwMCwgMHgxMSwgMHgyMiwgMHg0NCwgMHgwNiwgMHgxMCwgMHgzMSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMSwgMHgzNCwKKzB4MDcsIDB4MTAsIDB4NTksIDB4NDIsIDB4MzAsIDB4NDAsIDB4OTEsIDB4NDAsIDB4NTQsIDB4MDMsIDB4MTAsIDB4N0QsIDB4NDAsCisweEY3LCAweDAwLCAweDlCLCAweDAxLCAweDQ0LCAweDA2LCAweEQwLCAweDA1LCAweDUwLCAweDM0LCAweDAwLCAweDExLCAweDA3LAorMHg0QywgMHgwQywgMHhEMCwgMHgzRCwgMHg0MCwgMHhENCwgMHgwMiwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgzOSwKKzB4NTAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QzIsIDB4MDAsCisweDAxLCAweDAwLCAweDY0LCAweDEzLCAweDkwLCAweDE5LCAweDQxLCAweDc2LCAweDAwLCAweERELCAweDg4LCAweDc0LCAweDA3LAorMHgxNCwgMHgwOSwgMHg0OCwgMHgzNCwgMHgwMCwgMHg5OSwgMHg0MCwgMHg0NiwgMHgxMiwgMHgxMCwgMHgwRCwgMHg0OCwgMHg2NywKKzB4MDAsIDB4RDEsIDB4MDQsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MkMsIDB4NDAsIDB4QjIsIDB4MDEsIDB4MTUsIDB4MDEsIDB4NjQsCisweDA1LCAweEQwLCAweDhELCAweDQwLCAweDMxLCAweDA0LCAweDUxLCAweDAwLCAweDQ0LCAweDEzLCAweEQwLCAweDJELCAweDQwLAorMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4NjIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTQsCisweDA5LCAweDQyLCAweDM0LCAweDAwLCAweDkxLCAweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDBDLCAweDYwLCAweDIzLCAweDQwLAorMHhDOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgyMiwgMHg4MCwgMHgwNSwgMHg4MCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDAsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBFLCAweDAwLCAweDUzLCAweDAwLAorMHhFQywgMHgwMywgMHhCMiwgMHgwMywgMHhEMCwgMHgzNiwgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMywgMHgxNCwgMHgwOSwKKzB4RDAsIDB4MzYsIDB4MDAsIDB4OTIsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzQsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MTAsIDB4NDMsCisweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDBELCAweEQwLCAweDE2LCAweDAwLCAweDE3LCAweDAwLCAweDZDLCAweDAxLCAweEYwLAorMHgwNCwgMHhEMCwgMHgzNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwMCwgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MEIsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsCisweDAyLCAweEYxLCAweDAzLCAweEMwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAxLCAweEY0LCAweDBCLCAweEMwLAorMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4QjQsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4M0IsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsCisweEMwLCAweDNFLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDE3LCAweDYwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwMiwKKzB4RjAsIDB4MUYsIDB4QzgsIDB4M0YsIDB4MDEsIDB4QkYsIDB4MjIsIDB4RkMsIDB4MEEsIDB4MzAsIDB4MEIsIDB4QzAsIDB4QkYsCisweDA1LCAweEVGLCAweDA5LCAweEVDLCAweDEwLCAweEIwLCAweDNGLCAweEMwLCAweEJELCAweDAwLCAweEIzLCAweDA0LCAweENDLAorMHg4MiwgMHgzMiwgMHgyRiwgMHhDNCwgMHgyRiwgMHg0MCwgMHhGMiwgMHgwMSwgMHhDQywgMHgxMywgMHhGMCwgMHgxMiwgMHg0NCwKKzB4N0EsIDB4MjAsIDB4MzMsIDB4Q0MsIDB4RUMsIDB4MDYsIDB4OTAsIDB4MUYsIDB4NDAsIDB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweDc3LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDI2LCAweEQwLAorMHgxRCwgMHg0MCwgMHhCRiwgMHgwNSwgMHgxRCwgMHgwMiwgMHg3NCwgMHgzOCwgMHgxMCwgMHhDMSwgMHg0MCwgMHhCRiwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NjQsIDB4MkMsIDB4MDQsIDB4NEQsIDB4NDAsIDB4QkYsIDB4MDgsIDB4MTEsIDB4MTQsIDB4NzQsIDB4NDAsCisweDEwLCAweDZGLCAweDQwLCAweEU3LCAweDAwLCAweEQ1LCAweDAxLCAweEM0LCAweDBGLCAweEQwLCAweDE5LCAweDQwLCAweDc0LAorMHgwMCwgMHgwMSwgMHgyMiwgMHg0NCwgMHgwNiwgMHgxMiwgMHgxRCwgMHg0MCwgMHgwQywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4ODAsIDB4RDgsIDB4MEMsCisweDQwLCAweEIzLCAweDAwLCAweDhELCAweDI2LCAweDM0LCAweDAyLCAweDEwLCAweDAwLCAweDQxLCAweDMzLCAweDExLCAweENELAorMHg4MCwgMHgyNCwgMHgwMiwgMHgwMCwgMHgwQywgMHg0MCwgMHgzMSwgMHg4MywgMHg4MSwgMHg4QywgMHgwNCwgMHhCMiwgMHgxMiwKKzB4MkMsIDB4NjAsIDB4MDMsIDB4NDIsIDB4RDUsIDB4MDAsIDB4MTQsIDB4MjMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsCisweDQ1LCAweDI2LCAweDY0LCAweDAxLCAweDkwLCAweDBDLCAweDQwLCAweDRFLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgyOCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwRCwgMHg0NCwKKzB4MzcsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDQsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsCisweDY2LCAweDg0LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDA2LCAweDE4LCAweDBELAorMHg0MCwgMHg0NywgMHgwMCwgMHg1NSwgMHgxMSwgMHg1NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MywgMHgzNywgMHg4MCwgMHgxMSwKKzB4MTgsIDB4NDQsIDB4MEUsIDB4MTAsIDB4MEQsIDB4NDIsIDB4MEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDFFLCAweEYwLCAweDBELCAweEMwLCAweDM3LAorMHgwMCwgMHg5RiwgMHg4NywgMHg3QywgMHhDNCwgMHgzMCwgMHgxOSwgMHhDMiwgMHgzNywgMHgxOCwgMHhERiwgMHgwMCwgMHg2QywKKzB4MDQsIDB4MzAsIDB4MEQsIDB4QzQsIDB4MzUsIDB4MDgsIDB4MTMsIDB4MDEsIDB4NEMsIDB4MUUsIDB4MzQsIDB4MEQsIDB4QzIsCisweDY3LCAweDQwLCAweEQ3LCAweDAxLCAweDVDLCAweDAzLCAweEYwLCAweDE5LCAweEMwLCAweDM3LCAweDAwLCAweDk1LCAweDAyLAorMHgyQywgMHgwRSwgMHhCMCwgMHgwRCwgMHhDMCwgMHgyMiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4ODIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4OTAsCisweDNGLCAweDkwLCAweEJDLCAweDAwLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAzLCAweDlDLCAweDQwLAorMHg3MCwgMHgwRiwgMHhDMCwgMHgzNywgMHg0MCwgMHgzRiwgMHg0MCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwRiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0MsIDB4MEMsIDB4MkYsIDB4MDEsIDB4RkMsCisweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywKKzB4MDIsIDB4N0MsIDB4MEEsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MzQsIDB4NDAsIDB4RDMsIDB4MDQsIDB4NEUsIDB4MDIsIDB4RjEsCisweDBELCAweEMwLCAweDMwLCAweDAwLCAweDEzLCAweDA4LCAweDdDLCAweDBBLCAweEYwLCAweDBELCAweEMwLCAweDI0LCAweDAwLAorMHhEMywgMHgyMiwgMHg3QywgMHgwMywgMHgzMCwgMHgyOSwgMHhDMCwgMHgzNCwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwRCwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsCisweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDEyLCAweEQxLCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweDkxLCAweDgwLAorMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgzQywgMHgyNCwgMHhEQiwgMHgwMiwgMHg2NiwgMHg0QSwgMHhEMCwgMHgwRCwKKzB4NDgsIDB4QkMsIDB4NDIsIDB4MUIsIDB4OEIsIDB4NzQsIDB4MDIsIDB4RjAsIDB4M0YsIDB4QzEsIDB4NjIsIDB4MDEsIDB4OEEsCisweDA0LCAweEYwLCAweDAzLCAweEIxLCAweEE4LCAweDQwLCAweDMwLCAweDAwLCAweDFCLCAweDBFLCAweDQ0LCAweDBGLCAweEQwLAorMHgwQywgMHg0MCwgMHg2RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDA4LCAweDQwLCAweEYwLCAweDA5LCAweEQxLCAweDgxLCAweDI0LCAweDBFLCAweEQwLCAweDBDLCAweDQ4LAorMHg3MCwgMHgwMCwgMHg4OSwgMHgwMywgMHg3NCwgMHgwMCwgMHhEMCwgMHg2QywgMHg0MiwgMHgwMiwgMHgwMSwgMHhDNSwgMHgzMCwKKzB4MjAsIDB4MDcsIDB4MDAsIDB4QkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDgwLCAweDc4LCAweDAwLAorMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHg2MSwgMHgxMSwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MTYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QTQsIDB4MjUsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NzgsCisweDAwLCAweDYxLCAweDAxLCAweEI0LCAweDA1LCAweDUwLCAweDFFLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDAxLCAweEI0LAorMHgwNywgMHg5MCwgMHgwRiwgMHg0MCwgMHg3OCwgMHgwNCwgMHhFOSwgMHgwMSwgMHg4NCwgMHgwRSwgMHhEMCwgMHgxRSwgMHg0MCwKKzB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsCisweDAwLCAweDNDLCAweDAxLCAweEQwLCAweDhDLCAweEMwLCAweDM3LCAweDAwLCAweDQzLCAweDAwLCAweDdDLCAweDAzLCAweDEwLAorMHg4RCwgMHhEMCwgMHgzNCwgMHgyMiwgMHhDMSwgMHg5MCwgMHgwNCwgMHgyQiwgMHhEOCwgMHgwRCwgMHhEMCwgMHgzMCwgMHgwNiwKKzB4QzksIDB4MDAsIDB4M0MsIDB4MDEsIDB4RDAsIDB4NEQsIDB4QzAsIDB4MTIsIDB4MDAsIDB4QzMsIDB4MDQsIDB4MkMsIDB4NTMsCisweDMwLCAweDhDLCAweDgwLCAweDMwLCAweDAwLCAweEMzLCAweEU0LCAweDBDLCAweDgzLCAweEYwLCAweDBDLCAweEMwLCAweDRCLAorMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjQsIDB4OEYsCisweEMwLCAweDNGLCAweDAyLCAweEZGLCAweDAwLCAweDVELCAweEExLCAweEY4LCAweDBGLCAweEMwLCAweEJGLCAweDAwLCAweEZGLAorMHg4MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwgMHgxQiwgMHgwMiwgMHhGQiwgMHgwMCwgMHhCMCwgMHg0QiwgMHhGMCwKKzB4Q0YsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDgwLCAweERGLCAweDAwLCAweDdDLAorMHgwMSwgMHg3MCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwNSwgMHgzMCwgMHgwRCwgMHhDMiwKKzB4QjUsIDB4MDIsIDB4Q0YsIDB4MDAsIDB4NUQsIDB4MDMsIDB4MzgsIDB4MUQsIDB4QzAsIDB4MzUsIDB4MDEsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDZELCAweEMwLCAweDEwLCAweDAwLCAweEMzLCAweDAwLCAweDZDLCAweDEzLCAweEYwLCAweDA5LAorMHhDMCwgMHgzNywgMHhBMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHhEMCwgMHgwQywgMHhDMCwgMHg0MiwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDAwLCAweDNCLCAweDEzLCAweDZDLCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLAorMHgwNCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywgMHg0MSwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MDEsIDB4RDAsIDB4OEYsIDB4QzAsIDB4M0EsIDB4MDAsIDB4RTUsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDIsCisweDNCLCAweDgwLCAweENELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDRDLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4OCwgMHhFNSwgMHgyMSwgMHhCNCwgMHg0NywgMHhEMCwKKzB4MUUsIDB4NDQsIDB4N0IsIDB4MTIsIDB4RUMsIDB4MDEsIDB4MzQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDEsCisweEVELCAweDIxLCAweDE0LCAweDA3LCAweDAxLCAweDFFLCAweDRDLCAweDc5LCAweDAyLCAweEVELCAweDAxLCAweEI0LCAweDA3LAorMHhEOCwgMHg1RiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhGNSwgMHgxMSwgMHhCNCwgMHgxNywgMHhEMCwgMHgzQSwgMHg0MCwgMHg3QiwKKzB4MDAsIDB4RUQsIDB4MjEsIDB4ODQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NDgsIDB4MTIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM2LCAweDBGLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgwMywgMHgxMCwgMHg5QywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwKKzB4QTAsIDB4MTUsIDB4MDcsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MTAsIDB4REQsIDB4MDMsIDB4MzQsIDB4MDcsIDB4RDAsCisweDBDLCAweDQwLCAweEYyLCAweDAwLCAweEM1LCAweDAxLCAweDE0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDMzLCAweDgwLAorMHhERCwgMHgwRCwgMHgwNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHg1QSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDgsIDB4NUYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE3LCAweDAwLCAweDdGLCAweDBFLCAweEY0LCAweDAxLCAweEIwLCAweEE3LCAweEMyLCAweDE1LCAweDA4LCAweDRGLCAweDA1LAorMHhEQywgMHgxRCwgMHgzNSwgMHgwNSwgMHhDNCwgMHgxNSwgMHgwMCwgMHg3RiwgMHg4NSwgMHhGQywgMHhFRCwgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MUMsIDB4ODEsIDB4NzcsIDB4MDEsIDB4N0MsIDB4MDEsIDB4RjEsIDB4MDYsIDB4QzAsIDB4MTcsIDB4MDgsIDB4N0QsCisweDAyLCAweENELCAweDA1LCAweEYwLCAweDA0LCAweEMwLCAweDVFLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDIsIDB4NzgsIDB4MDQsIDB4NzQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUUsIDB4MDAsIDB4N0QsCisweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDA2LCAweDdDLCAweDAwLCAweEMwLCAweDAwLCAweEMwLAorMHg4NywgMHg4MSwgMHgxRiwgMHgxMCwgMHg2NCwgMHgwOCwgMHhGMiwgMHgyMSwgMHhDMSwgMHg4NywgMHgyMCwgMHgxRiwgMHgwMiwKKzB4N0QsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLAorMHg4MywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNiwgMHgwMiwgMHg5RiwgMHgwNCwgMHgwQywgMHgwMiwKKzB4MzQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUMsIDB4MDgsIDB4MEMsIDB4MDIsIDB4MzAsIDB4NTksIDB4QzAsIDB4QTAsCisweDIwLCAweDkzLCAweDAwLCAweDVDLCAweDg2LCAweEYwLCAweDE5LCAweEMwLCAweEE0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHgwNiwgMHhGMCwgMHgwOSwgMHhEMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTQsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsCisweDAwLCAweDQ1LCAweDAyLCAweEQwLCAweDA5LCAweEQwLCAweEE0LCAweDAwLCAweDlELCAweDAyLCAweDZDLCAweDQyLCAweDUwLAorMHgwOSwgMHg0MCwgMHgyNywgMHgyMSwgMHg5RCwgMHgwMiwgMHg0NSwgMHgwMiwgMHgxNCwgMHgyOSwgMHg1MCwgMHhFNCwgMHg0MCwKKzB4ODEsIDB4MTMsIDB4NDQsIDB4ODYsIDB4RDAsIDB4ODksIDB4NDAsIDB4NjQsIDB4MDgsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MUEsCisweEQwLCAweDE5LCAweDQwLCAweDA0LCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwOCwKKzB4NDQsIDB4MDIsIDB4RDksIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjUsIDB4MjIsIDB4OTIsIDB4MDksCisweDQ0LCAweDI3LCAweDAwLCAweERELCAweDAyLCAweDU2LCAweDAyLCAweDUwLCAweDA5LCAweDQ4LCAweDM0LCAweDA0LCAweDkxLAorMHhBNCwgMHg1NCwgMHgyQSwgMHhEMSwgMHgyOSwgMHg1MCwgMHhBNiwgMHgwMCwgMHg5RCwgMHgwQSwgMHg2NCwgMHgyMiwgMHhEMCwKKzB4ODksIDB4NjAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsCisweDAwLCAweDhELCAweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDMxLCAweDgxLCAweDA0LCAweDA0LAorMHgxMiwgMHhEOCwgMHg0OCwgMHg0QywgMHgyMCwgMHgwMSwgMHg4RCwgMHgwMSwgMHgyNCwgMHgxMiwgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MjEsIDB4OEQsIDB4MjQsIDB4MTYsIDB4MTIsIDB4NTAsIDB4NEMsIDB4MDQsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MjAsCisweDAwLCAweDEyLCAweEQwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDhELCAweDA4LCAweDI0LCAweDAyLCAweEQwLCAweDA4LAorMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MzAsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MEEsIDB4NTMsIDB4MEEsIDB4NEMsIDB4MjgsCisweEYwLCAweEExLCAweEMyLCAweDk0LCAweDAyLCAweDFGLCAweDBBLCAweDZDLCAweDAwLCAweDMwLCAweEEwLCAweEMwLCAweDg3LAorMHgwMiwgMHgxRiwgMHgwQSwgMHg1QywgMHgyOCwgMHg3MCwgMHhBMSwgMHg4MCwgMHgwNCwgMHgxMCwgMHgxMiwgMHgwMCwgMHg1QywKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUQsIDB4MzYsIDB4NkQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwKKzB4OEIsIDB4NDAsIDB4MjcsIDB4MDIsIDB4QkYsIDB4MjAsIDB4RkQsIDB4MjIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsCisweEJGLCAweDA4LCAweEU4LCAweDIyLCAweEIwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDAwLCAweDdDLCAweDIyLAorMHhGMywgMHgwQiwgMHhDMCwgMHgyNSwgMHgwMCwgMHhCRiwgMHgwNCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg3NywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjAsCisweEZDLCAweDE2LCAweDMwLCAweDA5LCAweEMwLCAweEU3LCAweDIwLCAweEJGLCAweDIxLCAweDZDLCAweDEzLCAweEYwLCAweEQ5LAorMHhDNiwgMHhFRiwgMHgwOCwgMHhCMywgMHgwMiwgMHhDQywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2RiwgMHgwNCwgMHhCMywKKzB4MDcsIDB4NEMsIDB4MUUsIDB4RjAsIDB4NUIsIDB4QzAsIDB4NjgsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MTIsIDB4MzQsCisweDBCLCAweEMyLCAweDJGLCAweDIwLCAweEJGLCAweDAwLCAweEM0LCAweDAyLCAweEI0LCAweDBCLCAweEMwLCAweDc3LCAweDgwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwKKzB4MjgsIDB4MTAsIDB4MDEsIDB4NEMsIDB4NDcsIDB4MDgsIDB4MUMsIDB4MTcsIDB4NDUsIDB4NTEsIDB4RDAsIDB4RjUsIDB4NDAsCisweEM3LCAweDQwLCAweDExLCAweDA1LCAweDU0LCAweDA4LCAweDcwLCAweDUxLCAweDQxLCAweDQ3LCAweDQwLCAweDExLCAweDAzLAorMHg0NSwgMHgwRCwgMHhEMCwgMHg3MSwgMHg1MSwgMHg4NCwgMHg0MCwgMHgxNSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMSwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MjAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NjIsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAzLAorMHgxMCwgMHgwOCwgMHg0MCwgMHhBMywgMHgwMSwgMHg4RCwgMHgwMiwgMHgwNCwgMHhCMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhBMywKKzB4MDEsIDB4ODEsIDB4MDAsIDB4MjUsIDB4MEUsIDB4QzEsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDQsIDB4ODEsIDB4MDcsIDB4MjQsCisweDMyLCAweDUwLCAweDg4LCAweDQwLCAweEEyLCAweDIwLCAweDgxLCAweDQwLCAweDM0LCAweDIyLCAweDUwLCAweDA4LCAweDQwLAorMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NiwgMHgwMywgMHhEMSwgMHgwOCwgMHg0MCwgMHg0QiwgMHg4MCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MjIsIDB4MTAsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDE0LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDM3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHg4MCwgMHg5MSwgMHg0MCwgMHg2NCwgMHgxMiwKKzB4RDgsIDB4MDksIDB4NjAsIDB4MjYsIDB4MDEsIDB4OTUsIDB4MDIsIDB4NjQsIDB4MDIsIDB4NTgsIDB4MEQsIDB4NDAsIDB4MjcsCisweDAwLCAweERELCAweDA0LCAweDQ0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHgzNCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4NDIsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OTEsCisweDA4LCAweDZELCAweDBBLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDIwLCAweDkzLCAweDAwLCAweDZDLCAweDA2LCAweDcwLAorMHgwOSwgMHg0MiwgMHhBNiwgMHhBMSwgMHg5MywgMHgyMiwgMHg3NCwgMHgwMiwgMHg3OCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDYsIDB4NEQsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4MTcsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDI1LCAweDA4LCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgyMiwgMHhGMCwgMHg5OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgxMSwKKzB4NUMsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MTMsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MDksCisweEMwLCAweDY1LCAweDgwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMxLCAweDI3LCAweDAwLCAweDlGLAorMHgwMSwgMHg3RSwgMHgyMiwgMHhCNCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjgsIDB4MDEsIDB4QzAsIDB4MDcsCisweDgwLCAweDEzLCAweDA2LCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDQ3LCAweDgwLCAweDFGLCAweDAwLCAweDRDLAorMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHg0NywgMHgxMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHgzNCwgMHgxMSwgMHhDMCwKKzB4ODcsIDB4MDQsIDB4MTMsIDB4MjYsIDB4MkMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDQsCisweDdDLCAweDQ4LCAweDMwLCAweDgxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgyMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHhDMCwKKzB4NzAsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4MDAsIDB4NUYsIDB4ODAsIDB4NkYsIDB4NDYsIDB4QzUsIDB4MDUsCisweDcwLCAweDA1LCAweDQwLCAweDFGLCAweDAwLCAweDdELCAweDgxLCAweDc0LCAweDAxLCAweDMwLCAweDQ3LCAweDQwLCAweDFCLAorMHgwMCwgMHg3MSwgMHgwMywgMHhDQywgMHgwOSwgMHg2MCwgMHgzNywgMHg0MCwgMHgxQywgMHhBMCwgMHg3RCwgMHgwMiwgMHhCNCwKKzB4MDksIDB4MTAsIDB4MDUsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweDEwLCAweEQxLAorMHgwMywgMHgzNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0OCwgMHg3NywgMHgwQSwgMHhDRCwgMHgwMywgMHgwNCwgMHgwNywgMHhEMywKKzB4MEMsIDB4NDQsIDB4MzcsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4MzYsIDB4MDMsIDB4MTAsIDB4MUQsIDB4NDAsIDB4QjEsIDB4NjAsCisweDAxLCAweDAyLCAweDA0LCAweDIzLCAweEQwLCAweDNDLCAweDQwLCAweDgxLCAweDA0LCAweERELCAweDgwLCAweDM0LCAweDBCLAorMHgwNCwgMHgxQywgMHg2MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwKKzB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTEsIDB4MDIsCisweEI2LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEU1LCAweDgwLCAweDg1LCAweDA4LCAweDUwLCAweDBFLAorMHg2MCwgMHg5QiwgMHgwMCwgMHg2RCwgMHg0MCwgMHgzNiwgMHgwNywgMHgxOCwgMHgwRSwgMHg0MCwgMHgzQiwgMHg0MCwgMHgyMSwKKzB4MTAsIDB4ODYsIDB4MDMsIDB4NTAsIDB4MTcsIDB4NDksIDB4MDgsIDB4MDAsIDB4QUQsIDB4MDIsIDB4QjYsIDB4MDMsIDB4MTAsCisweDBFLCAweDYwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LAorMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNiwgMHhEMCwgMHgxRSwgMHhDMiwgMHg3MSwgMHgwMiwgMHg2MSwgMHgwMSwgMHhCQywKKzB4M0YsIDB4RjAsIDB4RkUsIDB4QzAsIDB4NUIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4OEQsIDB4MDUsIDB4NzgsIDB4M0UsIDB4NDEsCisweDdCLCAweDAwLCAweEVELCAweDAxLCAweEJDLCAweDA3LCAweDMwLCAweDFFLCAweEMyLCAweDY5LCAweDAwLCAweDYzLCAweEEwLAorMHg4QywgMHgwNywgMHhEMSwgMHgxMiwgMHhDMCwgMHg0OSwgMHgwMCwgMHhFRCwgMHg4MSwgMHhCQywgMHgwNiwgMHgzOCwgMHgxRSwKKzB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLAorMHhDMCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMSwgMHgyRCwgMHhDMCwgMHgzNywKKzB4MjAsIDB4NUYsIDB4ODAsIDB4N0MsIDB4QjMsIDB4QzAsIDB4MEQsIDB4QzgsIDB4MjcsIDB4MDAsIDB4NEYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDA0LCAweEMwLCAweDE3LCAweDAwLCAweDlELCAweDAwLCAweDNDLCAweDAwLCAweEYxLCAweDBELCAweEM4LAorMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4RkMsIDB4MTMsIDB4RjgsIDB4OEYsIDB4QzAsIDB4N0YsIDB4MDQsIDB4RjcsIDB4MDksIDB4Q0MsIDB4ODcsIDB4RjAsCisweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEVCLCAweDAxLCAweEVDLCAweDA3LCAweEY5LCAweDlGLCAweEMwLCAweDdGLCAweDAwLAorMHhGRiwgMHgwOSwgMHhDQywgMHgwRiwgMHhCMSwgMHgxRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHgzMywgMHgwMSwgMHhFRSwgMHgyNywKKzB4MzAsIDB4MTcsIDB4QzAsIDB4NEYsIDB4MDAsIDB4N0YsIDB4ODEsIDB4Q0MsIDB4MDUsIDB4QzAsIDB4OUEsIDB4QzAsIDB4MUEsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDA4LAorMHhCNCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0OCwgMHgzQiwgMHgwMSwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMSwgMHgwRSwKKzB4NEUsIDB4MzgsIDB4NDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4NzgsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MDgsIDB4RkQsCisweDAwLCAweDg0LCAweDEzLCAweDEwLCAweDBFLCAweDQyLCAweDNCLCAweDAzLCAweEExLCAweDgwLCAweEJDLCAweDAzLCAweDE0LAorMHgwNiwgMHg0MCwgMHgwQiwgMHgwOCwgMHgyRCwgMHg5OCwgMHg4NCwgMHgyMCwgMHg5MCwgMHgwQSwgMHg0MCwgMHg1NCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsCisweDBCLCAweEQwLCAweDhFLCAweDQwLCAweDNCLCAweDI4LCAweEVELCAweDAwLCAweEE0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHgxQSwgMHgwMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHg0MSwgMHhEMCwgMHgwRSwgMHg0NCwgMHgxQiwgMHgwMCwgMHhFRCwgMHg5MCwKKzB4QTQsIDB4QzMsIDB4MTgsIDB4ODYsIDB4NDAsIDB4QUIsIDB4MEEsIDB4NjEsIDB4MDgsIDB4QTQsIDB4MDEsIDB4NTQsIDB4MDYsCisweDQwLCAweDBCLCAweDAwLCAweDZELCAweDAwLCAweDg0LCAweDQwLCAweEQwLCAweDBFLCAweDQwLCAweDIyLCAweDAxLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4MDAsIDB4MzMsIDB4MTAsIDB4OUQsIDB4MEIsIDB4MjQsIDB4MkYsIDB4RDAsIDB4MUMsIDB4NUEsIDB4MDIsCisweDAwLCAweEMxLCAweDQwLCAweDA1LCAweDAxLCAweDUwLCAweDBDLCAweDQwLCAweDA3LCAweDAwLCAweDhELCAweDAyLCAweDI0LAorMHgwNywgMHgxQSwgMHgwOCwgMHg0MCwgMHg2MywgMHhDMCwgMHg0MSwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1MCwgMHgyNCwgMHg0MCwKKzB4MTMsIDB4MjAsIDB4MEQsIDB4MDMsIDB4MDUsIDB4MEMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MDgsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDQyLCAweEQwLAorMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHg5RiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwgMHgyNiwgMHgwMCwKKzB4QzEsIDB4MDAsIDB4NEMsIDB4MjMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4RUMsIDB4MEYsCisweDE0LCAweDAxLCAweEUyLCAweDc3LCAweDA0LCAweDEzLCAweDAyLCAweDY0LCAweDAzLCAweDUwLCAweEE1LCAweDQwLCAweDA3LAorMHgwMCwgMHhERiwgMHgwMywgMHg0QywgMHgwRiwgMHhEMCwgMHgwRCwgMHhDMiwgMHg1NiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjEsIDB4MEQsCisweDQwLCAweDM3LCAweDIwLCAweDlGLCAweDEwLCAweDVDLCAweDAzLCAweEYwLCAweENELCAweEMwLCAweEExLCAweDEwLCAweDk3LAorMHgwMSwgMHg3RCwgMHgwMCwgMHg3MCwgMHgwRCwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwNCwgMHg1QywgMHg0MywgMHg3MiwKKzB4MjEsIDB4RTAsIDB4QTcsIDB4ODAsIDB4MUYsIDB4MjgsIDB4NzQsIDB4MDMsIDB4QTAsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MDAsCisweDlELCAweDA0LCAweDdDLCAweDBCLCAweEIwLCAweDBELCAweEMwLCAweEI3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhGQywgMHgwMiwgMHhCMCwgMHgwRiwgMHhFMCwKKzB4M0IsIDB4QTAsIDB4MUIsIDB4MDAsIDB4Q0UsIDB4NDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MjQsIDB4MDAsIDB4RkIsIDB4MDAsCisweEFDLCAweDAxLCAweEIwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEEzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBBLAorMHhDMCwgMHgyOCwgMHgxMCwgMHg3MywgMHg1OSwgMHg4QywgMHgwMywgMHgzMiwgMHg0NywgMHhDMCwgMHgwQywgMHgwMCwgMHhFRCwKKzB4MDIsIDB4Q0MsIDB4NDcsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDM3LAorMHg5OCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MiwgMHg2NCwgMHgwOCwgMHhEMSwgMHgwMSwgMHg2QywKKzB4MDQsIDB4QjAsIDB4MEQsIDB4QzIsIDB4RTcsIDB4MDQsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NDQsCisweDY0LCAweDAxLCAweDQxLCAweDAxLCAweDZDLCAweDA3LCAweDEwLCAweDI0LCAweDQwLCAweDg0LCAweDAyLCAweDFELCAweDAwLAorMHgwNSwgMHgwMSwgMHgxMCwgMHgwRCwgMHg0RSwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MjAsCisweDExLCAweDAxLCAweDA0LCAweDAzLCAweDEwLCAweDBELCAweDYwLCAweDQ0LCAweDAwLCAweEQxLCAweDExLCAweDY0LCAweDA3LAorMHg5MiwgMHgwRCwgMHg0MiwgMHg2NywgMHg4MCwgMHgxMSwgMHgwMSwgMHg2NCwgMHg4MywgMHg1MCwgMHgxMSwgMHg0MSwgMHg1NiwKKzB4MDAsIDB4MTksIDB4MDAsIDB4NDYsIDB4MDcsIDB4MTAsIDB4MDUsIDB4NDAsIDB4MDQsIDB4MDQsIDB4NUQsIDB4MDAsIDB4NDQsCisweDFCLCAweDE0LCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4MSwKKzB4MDEsIDB4MDQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NjAsIDB4MjAsIDB4MjAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4OTIsCisweDBDLCAweDYwLCAweDAxLCAweDkwLCAweDAxLCAweDAxLCAweDI0LCAweDAzLCAweEQwLCAweDAwLCAweDQyLCAweDIyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHgxNCwgMHgwNCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweDQwLCAweDNGLCAweDAwLCAweDExLCAweDIwLAorMHhDNCwgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHgyMCwgMHhEQiwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCMSwgMHgwRiwKKzB4NDAsIDB4MjcsIDB4MTgsIDB4OTMsIDB4MDAsIDB4QUMsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4NUIsCisweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDA1LCAweEUwLCAweDA0LCAweDAwLCAweDBGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMiwgMHgwNywgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzgsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MTAsIDB4QjcsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDEwLCAweDdGLCAweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDBGLCAweEMwLAorMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHg3MywgMHgwMCwKKzB4QkMsIDB4MDAsIDB4RjAsIDB4MDcsIDB4MDAsIDB4MEYsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsCisweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdCLCAweDAwLAorMHgzMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBMywgMHgwMCwgMHg4QywgMHgwNiwKKzB4QjAsIDB4MDMsIDB4QzAsIDB4NjgsIDB4MDIsIDB4M0YsIDB4MDEsIDB4OEMsIDB4MDQsIDB4NzAsIDB4MUIsIDB4QzAsIDB4M0YsCisweDAwLCAweDMzLCAweDBDLCAweENDLCAweDA0LCAweEIwLCAweDJCLCAweDEwLCAweDRDLCAweDAwLCAweEYzLCAweDAxLCAweENDLAorMHgwMiwgMHgzMCwgMHgwQiwgMHhEMCwgMHg0QywgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgwNywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MTQsIDB4MTEsCisweDAwLCAweEM0LCAweDAzLCAweDExLCAweDQ5LCAweDQwLCAweDZGLCAweDAwLCAweDkxLCAweDBCLCAweDQ0LCAweDg0LCAweDUwLAorMHgwMSwgMHg0MCwgMHgyNCwgMHgyMSwgMHgxRCwgMHgyMSwgMHg0NCwgMHg4NCwgMHgxMCwgMHgxOSwgMHg0MCwgMHgzRiwgMHgwNCwKKzB4MTEsIDB4MDIsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MkYsIDB4NDIsIDB4MjQsIDB4MTAsIDB4RDEsIDB4MjAsIDB4NDQsIDB4MDIsCisweDEwLCAweDBDLCAweDQxLCAweDQ0LCAweDAwLCAweDhCLCAweDAwLCAweDU0LCAweDA3LCAweEQwLCAweDFELCAweDQwLCAweDBDLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzNywgMHgyMSwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDAsCisweDQwLCAweDIwLCAweDEwLCAweDFELCAweDAwLCAweDA1LCAweDAwLCAweDUyLCAweDA4LCAweDQyLCAweDMzLCAweDgyLCAweDgxLAorMHgwMiwgMHgwNCwgMHgwMCwgMHgxMiwgMHg2OCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhEMSwgMHg0MCwgMHgwNCwgMHgwNiwgMHg1MCwKKzB4NTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NEUsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDA4LCAweDUxLCAweDAxLCAweDQ0LAorMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHg2NywgMHg0MCwgMHhEMSwgMHgwMCwgMHg0NSwgMHgwMCwgMHg1MCwgMHgxMSwgMHg1MCwKKzB4MzQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4NDQsIDB4MTEsIDB4MTksIDB4NDEsIDB4MzcsIDB4MDAsIDB4OTEsIDB4MDAsCisweDQwLCAweDA0LCAweDE4LCAweDBDLCAweDYwLCAweDQwLCAweDQwLCAweEQxLCAweDA0LCAweDQ0LCAweDA2LCAweDUwLCAweDQxLAorMHg0MCwgMHg0NCwgMHgyMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwRSwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NzMsIDB4MDAsIDB4MTMsIDB4MTMsIDB4NEQsIDB4MDMsCisweDM0LCAweDAxLCAweEMwLCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDM5LCAweEM4LCAweDI0LAorMHgxMCwgMHgwRiwgMHgwMywgMHg0QywgMHgwQywgMHg3MCwgMHgxOSwgMHhDOCwgMHgzNywgMHg0MCwgMHgxMywgMHgwNCwgMHg0QywKKzB4MTgsIDB4MzQsIDB4MDksIDB4QzAsIDB4RTQsIDB4MDAsIDB4QzMsIDB4MDAsIDB4NEQsIDB4MDYsIDB4NzAsIDB4MUQsIDB4QzAsCisweEM0LCAweDAwLCAweDkzLCAweDAxLCAweDZDLCAweDAzLCAweEYwLCAweDRELCAweEQwLCAweDAyLCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHhGRCwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMSwKKzB4OTMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4QUYsIDB4MDIsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MkYsIDB4MDAsCisweDNGLCAweDEwLCAweEZDLCAweDgwLCAweEYwLCAweDAzLCAweEM4LCAweDNGLCAweDIwLCAweDNGLCAweDIzLCAweEZDLCAweDAwLAorMHg3MCwgMHg5RCwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhCNCwgMHgxRiwgMHhDMCwgMHgwRiwKKzB4MDAsIDB4QUYsIDB4MDksIDB4REMsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MUQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDAwLCAweDUzLCAweDAwLCAweDZELCAweDAzLCAweDMyLCAweDA5LAorMHhEMCwgMHgyNCwgMHgwMCwgMHhEMywgMHg4MCwgMHg0QywgMHgwMywgMHgzNCwgMHg2RCwgMHhDMCwgMHgyNCwgMHgwMCwgMHgxMywKKzB4NDIsIDB4N0MsIDB4MTAsIDB4MzAsIDB4MjksIDB4RDEsIDB4MzAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NEMsIDB4MTgsIDB4MzAsCisweDA5LCAweEMwLCAweDg0LCAweDAwLCAweEQzLCAweDAwLCAweDNDLCAweDAyLCAweEIwLCAweDExLCAweEMwLCAweDA0LCAweDAwLAorMHhEQiwgMHgwMCwgMHg0RCwgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHhBOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4QzQsIDB4NDMsIDB4MTAsIDB4MDksIDB4NDAsCisweDEwLCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDQ2LCAweDEwLCAweDJELCAweDUwLCAweDM0LCAweDAwLCAweDEzLCAweDgyLAorMHgzNCwgMHgwOCwgMHgxMCwgMHg3OSwgMHg0MCwgMHg3QywgMHgwNCwgMHhCNSwgMHgyMCwgMHgyQywgMHgwQywgMHhCMiwgMHhBRCwKKzB4NDAsIDB4QzQsIDB4MDYsIDB4RDEsIDB4MDEsIDB4NzQsIDB4MkEsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDAsIDB4MDAsIDB4REIsCisweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwgMHg0MCwgMHg4MSwgMHgyMSwgMHgwNCwgMHgwMywgMHgxNCwgMHgwOCwgMHgwOCwgMHgyMCwKKzB4ODksIDB4ODEsIDB4MDAsIDB4MDYsIDB4MDYsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDgsIDB4MDMsIDB4MzQsCisweDBDLCAweDE4LCAweDA4LCAweDQwLCAweDcwLCAweDAwLCAweDA5LCAweDAwLCAweDE0LCAweDJDLCAweDk0LCAweDhDLCAweDQwLAorMHgwMiwgMHgwMCwgMHhDMSwgMHg0MSwgMHgzNCwgMHgwMiwgMHg5MCwgMHgwQywgMHg0MCwgMHg1MiwgMHg0MCwgMHhDOSwgMHgwMCwKKzB4MDUsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDdDLCAweDQwLCAweEYxLCAweDE5LCAweDA0LCAweDA3LCAweDEwLCAweDE4LCAweDQwLCAweDY4LCAweDAwLAorMHhCMSwgMHg4MSwgMHhDNiwgMHgwNCwgMHgxMCwgMHg5NiwgMHg0MCwgMHg2QywgMHg0MCwgMHgyMSwgMHgyMSwgMHhCNCwgMHg0NCwKKzB4MTgsIDB4MTYsIDB4NjIsIDB4NzgsIDB4MTAsIDB4MEQsIDB4MDEsIDB4QjQsIDB4MDQsIDB4OTQsIDB4MUUsIDB4NDAsIDB4NkEsCisweDAwLCAweEUxLCAweDUwLCAweDM2LCAweDA2LCAweDEwLCAweDNFLCAweDUwLCAweDRFLCAweDA0LCAweEU5LCAweDAxLCAweDg2LAorMHgwNywgMHhEMCwgMHgxNiwgMHg2MCwgMHgzQywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MTgsIDB4MzAsIDB4MDAsIDB4ODMsIDB4MDgsIDB4MEQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4QzAsIDB4MjAsIDB4NDAsIDB4QzMsCisweDAwLCAweDBELCAweDIyLCAweDMwLCAweDA0LCAweDQ4LCAweDIwLCAweEIyLCAweDA5LCAweDUyLCAweDNDLCAweDIwLCAweDM0LAorMHg4OCwgMHhDMCwgMHgzMCwgMHgwMCwgMHgwQiwgMHgwMCwgMHgxQywgMHgwMCwgMHg5MCwgMHgwQywgMHhDMCwgMHg4NiwgMHgwMCwKKzB4QzMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4QjAsIDB4MDAsIDB4QzAsIDB4OTIsIDB4MTAsIDB4Q0IsIDB4MDQsIDB4MEMsIDB4MDMsCisweEYwLCAweDBDLCAweEQwLCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LAorMHgzRCwgMHgwMCwgMHhFRiwgMHg2OCwgMHhGRSwgMHgwQiwgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MjAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjAsIDB4RjAsIDB4OEUsCisweEMwLCAweDNCLCAweDAwLCAweEI3LCAweDgwLCAweEFELCAweDIyLCAweEYwLCAweDhGLCAweEMwLCAweDJELCAweDQwLCAweEZGLAorMHgwNCwgMHhGQywgMHgwMiwgMHhFMCwgMHgwQiwgMHhFMCwgMHgwOSwgMHg0MCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MDcsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAwLCAweEQ3LCAweDYwLCAweDRDLCAweDBCLCAweDM0LCAweDAxLCAweEMwLCAweDZGLCAweDAwLCAweDk3LCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwOSwgMHhEMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MzcsIDB4ODEsIDB4MTIsIDB4MDgsIDB4MEMsIDB4MDAsIDB4MzEsIDB4NEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4RDMsIDB4MDAsCisweDRDLCAweDAyLCAweEIwLCAweDFELCAweEQwLCAweDU0LCAweDAwLCAweEQzLCAweEEwLCAweDRDLCAweDgzLCAweEYwLCAweDBELAorMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzRCwgMHgwMCwKKzB4RTEsIDB4MDAsIDB4MDYsIDB4MTMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDIsCisweEQwLCAweDBFLCAweDQyLCAweDI4LCAweDIwLCAweEE4LCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDBFLCAweDQwLCAweDNGLAorMHgwNSwgMHgzMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhENCwgMHgwRiwgMHg1MSwgMHgyQywgMHgwMCwgMHhFMSwgMHgwMCwgMHgwNCwKKzB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MDgsIDB4NDAsIDB4RjEsIDB4MDAsIDB4OTQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDQsCisweDRGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEM1LAorMHgwMSwgMHg4NCwgMHgyNywgMHgwMCwgMHgxRSwgMHg0MCwgMHg2MywgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHg0NywgMHhEMCwKKzB4M0MsIDB4NDAsIDB4NjgsIDB4MDgsIDB4QUMsIDB4MTEsIDB4ODQsIDB4MDUsIDB4RDAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4NDMsCisweDI5LCAweDA1LCAweEE1LCAweDA0LCAweDk4LCAweDFFLCAweDQwLCAweDY4LCAweDgwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LAorMHgxMCwgMHgxMiwgMHg2MCwgMHg1QywgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHgwNywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MTAsIDB4RDEsIDB4MDAsCisweDA0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDUzLCAweDIyLCAweEM5LCAweDAwLCAweDM0LCAweDBBLCAweEQwLCAweDE1LAorMHg0MCwgMHgzMCwgMHgwMCwgMHhDOSwgMHg4MiwgMHgwNCwgMHg2QiwgMHhEMCwgMHgyQywgMHg0MCwgMHgzMywgMHgwMCwgMHhEOSwKKzB4MDEsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NTAsIDB4RjAsIDB4ODEsIDB4OTEsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MTAsCisweDA4LCAweDYwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDk4LCAweDQwLCAweDRCLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHgxNSwgMHgwMCwgMHg3NywgMHg4QSwgMHg0RCwKKzB4ODEsIDB4MzAsIDB4NzYsIDB4QzAsIDB4OUYsIDB4MDAsIDB4NUYsIDB4MDEsIDB4RkMsIDB4MEQsIDB4RjEsIDB4QjcsIDB4QzAsCisweDE0LCAweDIwLCAweDdGLCAweDRCLCAweENDLCAweDBELCAweEYwLCAweDI2LCAweEMwLCAweDE3LCAweDEwLCAweDdCLCAweDAxLAorMHhBQywgMHgwNSwgMHgzNCwgMHgwNSwgMHhDMiwgMHg5QywgMHgwNCwgMHg1MywgMHgwMSwgMHhDQywgMHgwOSwgMHgzMCwgMHgwNywKKzB4QzEsIDB4MUMsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NEQsIDB4MDEsIDB4RjIsIDB4MjcsIDB4QzIsIDB4NUYsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDEwLCAweDFGLCAweDAwLCAweDNDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgxNywgMHgwOCwgMHg3QywgMHgxMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUIsIDB4MDIsIDB4N0QsIDB4MDgsIDB4RjAsIDB4NDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MTcsIDB4MDgsIDB4NUMsCisweDI4LCAweDcwLCAweDIwLCAweEQwLCAweDA3LCAweDQwLCAweDFGLCAweDA4LCAweDdELCAweDYwLCAweDcwLCAweDExLCAweEMwLAorMHg0NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMCwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MjYsIDB4MzAsCisweDA5LCAweEMwLCAweDI0LCAweDA0LCAweDlGLCAweDAwLCAweDdDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLAorMHg5RiwgMHgwNCwgMHg3QywgMHg4MiwgMHhCMCwgMHgwOSwgMHhDNCwgMHgyNiwgMHg0MCwgMHg5MywgMHgwNCwgMHg0QywgMHgxMiwKKzB4MzQsIDB4MTksIDB4QzAsIDB4MjQsIDB4MDEsIDB4OTMsIDB4MDgsIDB4MEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAxLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyMiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMSwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4QTksIDB4NDEsIDB4MjQsIDB4MDAsIDB4OUQsCisweDAwLCAweDM0LCAweDBBLCAweDEwLCAweDY5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAxLCAweDQ0LCAweDE2LCAweDEwLAorMHgxOSwgMHhEMCwgMHgyMiwgMHgwMCwgMHg5MSwgMHgwMiwgMHg0NSwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwKKzB4OUQsIDB4MDksIDB4NkMsIDB4MDIsIDB4RDAsIDB4MDksIDB4NTAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDQwLCAweDkxLCAweDIwLCAweDQ0LCAweDAyLCAweDExLCAweDA5LCAweDQwLAorMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg1MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDYsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MTQsIDB4NDksCisweDQ4LCAweDI0LCAweDAwLCAweDkxLCAweDAyLCAweDY0LCAweDIyLCAweDE4LCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDhELAorMHgwMCwgMHg2NSwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjAsIDB4MjQsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MjQsIDB4MTIsIDB4MTAsIDB4NDksIDB4NDAsIDB4NjEsCisweDkxLCAweDhELCAweDA0LCAweDM0LCAweDAyLCAweEMwLCAweDQ4LCAweDQwLCAweDIxLCAweDAwLCAweDhELCAweDIwLCAweDc0LAorMHgwMiwgMHgwMCwgMHgwOCwgMHg0MiwgMHgyMCwgMHg4OSwgMHg4MSwgMHg0NCwgMHgyNiwgMHgwMiwgMHgxOCwgMHg0OCwgMHg0MCwKKzB4MjYsIDB4NDAsIDB4ODEsIDB4MDAsIDB4MjQsIDB4MTIsIDB4MTQsIDB4NTgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsCisweDI0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCOCwgMHg4NiwgMHgwMiwgMHgxMywgMHgwQSwgMHg0QywgMHgyOCwgMHgzNCwgMHhBMSwgMHhEMCwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4QTEsIDB4QzAsIDB4ODUsIDB4MDIsIDB4NUYsIDB4MDAsIDB4NzQsIDB4MDEsCisweEIxLCAweDAxLCAweEM4LCAweDk2LCAweDQyLCAweDEzLCAweDBBLCAweDZELCAweDAwLCAweDMwLCAweEE1LCAweDQwLCAweDg0LAorMHgwQSwgMHgwMywgMHg0QSwgMHg2QywgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwQSwgMHg2RCwKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEI4LCAweDJGLCAweDEwLCAweEJGLCAweDA4LCAweDVELCAweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDNFLCAweDAyLCAweEJGLAorMHgwOCwgMHhGNCwgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhBRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMiwKKzB4MEIsIDB4MDAsIDB4MjcsIDB4MDIsIDB4QkYsIDB4ODgsIDB4REMsIDB4ODIsIDB4RjIsIDB4OEIsIDB4QzAsIDB4M0YsIDB4MDAsCisweEJGLCAweDAwLCAweERDLCAweDIyLCAweEQwLCAweDhCLCAweEMwLCAweDJCLCAweDAwLCAweEJGLCAweDA4LCAweDdDLCAweDAyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBOCwKKzB4M0IsIDB4MDAsIDB4RjIsIDB4MTQsIDB4Q0MsIDB4MzIsIDB4MzQsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4OTMsIDB4MDAsCisweENDLCAweDAyLCAweEYwLCAweDRCLCAweEMxLCAweDI0LCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDBCLAorMHhDMCwgMHhFRCwgMHgwMCwgMHhCMywgMHgwMywgMHhDQywgMHgwMiwgMHgzMCwgMHgzQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwKKzB4ODgsIDB4RkMsIDB4MTIsIDB4MzAsIDB4NEEsIDB4QzEsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA1LAorMHgwNSwgMHgwMSwgMHgwNCwgMHgwNCwgMHgzMCwgMHgxMSwgMHgyMSwgMHg0MywgMHgwNCwgMHgwOCwgMHgxMSwgMHgwOCwgMHg0NCwKKzB4MDAsIDB4RDAsIDB4NDEsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsCisweEM0LCAweDA4LCAweDQxLCAweDQzLCAweDQ0LCAweDAxLCAweDEwLCAweDMwLCAweDQwLCAweDAwLCAweDA0LCAweDFELCAweDAwLAorMHg1QywgMHg1MSwgMHgxMCwgMHg0MSwgMHg0MiwgMHgwNCwgMHgwOCwgMHgwQiwgMHgxMiwgMHg1NCwgMHgwMCwgMHhEMCwgMHg4MSwKKzB4NDAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MjUsIDB4MDEsCisweDgxLCAweDk0LCAweDA1LCAweDkyLCAweDkwLCAweENDLCAweDQwLCAweDIwLCAweDAyLCAweDkxLCAweDIwLCAweDA0LCAweDAyLAorMHhEMCwgMHg0OCwgMHg0MSwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHhBMSwKKzB4MDksIDB4ODEsIDB4MDYsIDB4MDQsIDB4ODIsIDB4MTAsIDB4NjgsIDB4NDgsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDMyLCAweDEwLCAweDQ4LCAweDUxLCAweDIwLCAweDAwLCAweDg5LCAweDBDLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHg0OCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHg0QSwgMHg5MSwKKzB4MTAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MzksIDB4NDAsIDB4MjQsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDQwLCAweDc0LCAweDEyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHgwMCwgMHg0NSwgMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4MTAsIDB4NjksIDB4NDAsIDB4MjQsIDB4MjAsIDB4ODksIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjAsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDIxLCAweDAwLCAweDkzLCAweDAwLAorMHg0QywgMHgwMiwgMHhCMCwgMHgyOSwgMHhEMCwgMHhBNCwgMHgwMiwgMHg4MywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzksIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDMsIDB4N0MsIDB4NEUsIDB4MzQsIDB4NDgsIDB4QzAsIDB4MjUsIDB4NDAsIDB4OTMsCisweDBCLCAweDRDLCAweDA2LCAweDI0LCAweDA5LCAweEQwLCAweDY0LCAweDAyLCAweDlGLCAweDAwLCAweDdDLCAweDBFLCAweDM0LAorMHgwOSwgMHhDMCwgMHhBNCwgMHgyNCwgMHg5QiwgMHgwMSwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwgMHgxNCwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NjUsIDB4MTAsIDB4OUYsIDB4MDQsIDB4M0MsCisweDQyLCAweDcwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweEYxLCAweDQ4LCAweEMwLAorMHhFNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwNiwgMHhGMSwgMHgwOSwgMHhDOCwgMHgyMywgMHg0MCwgMHg5RiwgMHgwMSwKKzB4N0MsIDB4MDYsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MTksCisweEMxLCAweDI3LCAweDAwLCAweDlGLCAweDA0LCAweDdELCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDVCLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHg4MCwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MDAsIDB4QzAsIDB4ODMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsCisweDAwLCAweDFGLCAweDEwLCAweDdFLCAweDA4LCAweEYyLCAweDAxLCAweEQxLCAweDA2LCAweDAxLCAweDAzLCAweDgyLCAweDRDLAorMHg0MCwgMHgzMSwgMHgwMSwgMHhDMSwgMHhDNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHgwNCwgMHgzMCwgMHgyMCwgMHhDMCwKKzB4ODQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDE0LCAweDA0LCAweDUxLCAweDAxLCAweEM1LCAweDA5LCAweDEwLAorMHgwNSwgMHhDMCwgMHg1RCwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgxNywgMHg2MCwgMHgxNCwgMHgwMCwKKzB4N0QsIDB4MDMsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MjcsIDB4NDQsIDB4NUMsIDB4MDAsIDB4NUIsIDB4MTEsIDB4QUMsIDB4MTUsCisweEIxLCAweDU3LCAweEMwLCAweDFFLCAweDQwLCAweDcwLCAweDAwLCAweEM0LCAweDExLCAweDE0LCAweDM3LCAweDQwLCAweDEwLAorMHgwMCwgMHg1RCwgMHgxMSwgMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg1MCwgMHg1MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzIsIDB4NDAsIDB4RDEsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MTEsIDB4MEMsCisweDQwLCAweDMxLCAweDA0LCAweEMxLCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDFDLCAweDQ4LCAweDM0LCAweDAwLCAweENELAorMHgwMiwgMHgzNCwgMHgwMiwgMHhEOCwgMHgyQywgMHg2MCwgMHgzMiwgMHg5MCwgMHhDOSwgMHgyMSwgMHgwNCwgMHg4NywgMHg1OCwKKzB4MEMsIDB4NDIsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MTAsIDB4M0MsIDB4NDAsIDB4MjAsIDB4MDAsCisweENELCAweDAwLCAweDA0LCAweDgzLCAweEQwLCAweDBDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzQywgMHgyMCwgMHhBMSwgMHgxMCwgMHhBNSwgMHgxQSwgMHgxMCwgMHgwRSwgMHg0MCwKKzB4MzEsIDB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MEEsIDB4RDAsIDB4MDQsIDB4NDEsIDB4MzgsIDB4MDEsIDB4NkQsIDB4MDIsCisweEI2LCAweDQwLCAweEQ4LCAweDAzLCAweDQwLCAweEFBLCAweDgyLCAweEU5LCAweDAwLCAweEE0LCAweDAwLCAweEQwLCAweDBFLAorMHg0MCwgMHg3QSwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRiwgMHg0MSwgMHgyOCwgMHgwMCwgMHhFRCwKKzB4MDAsIDB4ODUsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLCAweEUzLCAweDAxLCAweEFDLCAweDE2LCAweDM0LCAweDFFLCAweEMwLCAweDc5LAorMHgwMCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNiwgMHhEMCwgMHgxNiwgMHg0MCwgMHhGOCwgMHgwMSwgMHgyRCwgMHgwMSwgMHhCNCwKKzB4MDUsIDB4RjAsIDB4MTYsIDB4RDAsIDB4NzIsIDB4MDAsIDB4QUIsIDB4MDEsIDB4OEMsIDB4MDQsIDB4NzQsIDB4OUUsIDB4QzAsCisweDc4LCAweDAwLCAweEYzLCAweDgxLCAweENDLCAweDA3LCAweDM0LCAweDFFLCAweEMwLCAweDY4LCAweDAwLCAweEFGLCAweDAxLAorMHg4NCwgMHgwNywgMHhGMCwgMHgxQywgMHhDMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QjgsIDB4MzUsIDB4NDAsIDB4OUYsIDB4MTQsIDB4NUMsIDB4MjIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEQwLCAweDc3LCAweDAwLCAweDVGLCAweDAwLCAweDZDLCAweDAwLAorMHhGMCwgMHgwMCwgMHhEMCwgMHgyNSwgMHgyMCwgMHg5RiwgMHgwMiwgMHgzQywgMHgwMCwgMHhCMSwgMHgwOSwgMHhEMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0QsIDB4MDMsIDB4RTAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0QsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgyMSwgMHg4QywgMHgwNiwgMHgzOCwgMHg4RiwgMHhDMCwgMHg2RCwgMHgwMCwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUYsIDB4RDAsIDB4N0MsIDB4MDAsIDB4M0YsIDB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsCisweDEzLCAweEMwLCAweDVGLCAweDIwLCAweEY3LCAweDIzLCAweENDLCAweDA0LCAweDMxLCAweDlGLCAweEMwLCAweDdDLCAweDA4LAorMHhGMywgMHgwMSwgMHg4QywgMHgwNywgMHgzMSwgMHgwQiwgMHhDMCwgMHg2RiwgMHgwMCwgMHhFRiwgMHgwMywgMHhDQywgMHgwNywKKzB4RjIsIDB4MUYsIDB4QzIsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsCisweDM5LCAweDAwLCAweEVELCAweDAwLCAweDg0LCAweDAyLCAweDM4LCAweDBGLCAweDQwLCAweDA4LCAweDQwLCAweEUxLCAweDAwLAorMHhCQywgMHgwMiwgMHhEMCwgMHgyNiwgMHg0MCwgMHgzOCwgMHgwMiwgMHg2RCwgMHgxMCwgMHhCNCwgMHhBMCwgMHhEMCwgMHg4MiwKKzB4NDAsIDB4MEYsIDB4MTAsIDB4RTEsIDB4MDQsIDB4OTQsIDB4MTAsIDB4MTAsIDB4RTYsIDB4NDEsIDB4M0MsIDB4MDAsIDB4RjEsCisweDEwLCAweDg0LCAweDgzLCAweDE0LCAweDhBLCAweDQwLCAweDJCLCAweDA0LCAweEVELCAweDA4LCAweDg0LCAweDAzLCAweEQwLAorMHgwRSwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4OTAsIDB4OEUsIDB4NDAsIDB4MjksIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsCisweDQyLCAweEQwLCAweDA2LCAweDQwLCAweDM4LCAweDA0LCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLAorMHgyQiwgMHgwMiwgMHhFRCwgMHg4MCwgMHhDNCwgMHgwMCwgMHgxMCwgMHgwNCwgMHg0MCwgMHgzOCwgMHgwNCwgMHg2MSwgMHgwMCwKKzB4RjQsIDB4MDMsIDB4MTAsIDB4OEEsIDB4NDEsIDB4MkIsIDB4MDIsIDB4QUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MkMsCisweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDMxLCAweDAwLAorMHhDRCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgxQywgMHg0MCwgMHgwMCwgMHgwNCwgMHhDMSwgMHg0OSwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MjUsIDB4NDAsIDB4NzAsIDB4MDAsIDB4NEQsIDB4MDEsIDB4MzQsIDB4MDAsIDB4RDIsIDB4MTAsIDB4NDAsIDB4MjMsCisweDAwLCAweEM5LCAweDBBLCAweDE0LCAweEM4LCAweDE0LCAweDA0LCAweDUwLCAweEYwLCAweDAwLCAweDQxLCAweDAwLCAweDM0LAorMHgwQiwgMHgxMCwgMHgxOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwKKzB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzUsIDB4MDAsIDB4REYsCisweDA3LCAweENDLCAweDAyLCAweEIwLCAweDRELCAweEMwLCAweEU1LCAweDAwLCAweEQzLCAweDAwLCAweDNDLCAweDAyLCAweEYwLAorMHgwNSwgMHhEMCwgMHgzQywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMSwgMHgzRiwgMHgwMCwKKzB4REYsIDB4MjMsIDB4MEQsIDB4MDgsIDB4MzAsIDB4MTEsIDB4QzAsIDB4RjQsIDB4MDgsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MjMsCisweDMwLCAweDBELCAweEMwLCAweEI3LCAweDAwLCAweDlGLCAweDAwLCAweDRELCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDc0LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgzNywgMHgxMCwgMHg5RiwgMHgwMCwKKzB4N0UsIDB4MDIsIDB4NzAsIDB4MEQsIDB4QzIsIDB4NjMsIDB4MTAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4QzUsCisweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDEwLCAweEYwLCAweDQxLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LAorMHgxMCwgMHg3QywgMHgwQywgMHhGMCwgMHgwMCwgMHhDMCwgMHgzNywgMHgwNCwgMHhERiwgMHgwMCwgMHg0NCwgMHgwQiwgMHhGMCwKKzB4MEMsIDB4QzEsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzIsIDB4MDcsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEVGLCAweDEwLCAweENDLAorMHgwNiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHgwMCwgMHhGMywgMHgwMCwgMHhGRSwgMHg1MiwgMHgzMCwgMHgwNSwgMHhDMCwKKzB4M0MsIDB4MDAsIDB4MzcsIDB4MTAsIDB4RkMsIDB4ODAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4N0IsIDB4MDAsIDB4OTMsIDB4MDAsCisweENDLCAweDAwLCAweEIwLCAweDAzLCAweDQwLCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDgzLCAweDMyLCAweDhGLAorMHhDMiwgMHhCQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NDQsIDB4MEEsCisweDEwLCAweDBDLCAweDUwLCAweEM0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDA2LCAweDUwLCAweDE1LCAweDUwLCAweDM1LAorMHgwMCwgMHg1RCwgMHgwNywgMHg3NCwgMHgwQywgMHhEMCwgMHgxMSwgMHhDMCwgMHgzNSwgMHgwMiwgMHg4MSwgMHgwMCwgMHg0NCwKKzB4NEMsIDB4MTEsIDB4MzEsIDB4QzAsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDQsIDB4NDMsIDB4MTAsIDB4MjEsIDB4NDIsCisweDI0LCAweDAwLCAweDlELCAweDA5LCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg2NiwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgyOCwgMHgxMCwKKzB4MTksIDB4NDAsIDB4RTYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MTEsIDB4NDAsIDB4MzYsIDB4MDAsCisweDFELCAweDAxLCAweDc0LCAweDQ0LCAweEQwLCAweDMxLCAweDQwLCAweDE3LCAweDQwLCAweEQxLCAweDAwLCAweDQ0LCAweDg0LAorMHgxMCwgMHgxMSwgMHgwMiwgMHhEMywgMHgwMCwgMHhDMSwgMHgxMSwgMHgwNiwgMHgwNCwgMHgxMCwgMHgyOSwgMHg0MCwgMHgzNiwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDAwLCAweDEwLCAweDA5LAorMHg0MCwgMHgwMiwgMHg0MCwgMHhDMSwgMHgwMCwgMHgzNCwgMHg4MiwgMHg1MCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwOCwgMHg0RCwKKzB4NDAsIDB4MzYsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4ODAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDA2LCAweDAyLCAweDEwLCAweDA4LCAweDUwLCAweDIyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MjYsIDB4MDAsIDB4RUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzQsIDB4MDksIDB4QzAsCisweDA2LCAweDAwLCAweEQzLCAweDAwLCAweDc0LCAweDAyLCAweDcwLCAweDA1LCAweEMwLCAweDM2LCAweDAwLCAweDE3LCAweDAwLAorMHg3NCwgMHgwMCwgMHhGMiwgMHgwMSwgMHhDMiwgMHgyNywgMHgyMCwgMHhGMywgMHgyMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMywKKzB4RDAsIDB4MDcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzYsIDB4MDAsIDB4QkYsCisweDAwLCAweDRELCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA2LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgwRCwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0QsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAwLCAweEQwLCAweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEJELCAweDAwLCAweEY0LCAweDAzLCAweEMyLAorMHgzRSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDI3LCAweDMwLCAweDFGLCAweEM4LCAweDdGLCAweDBBLAorMHhGRiwgMHgwMSwgMHhDQywgMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGMywgMHgwOSwgMHhGQywgMHgyNywKKzB4RjAsIDB4M0YsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MjcsIDB4MzAsIDB4OUYsIDB4QzAsIDB4NzgsCisweDAwLCAweEZGLCAweDA5LCAweENDLCAweDA3LCAweEIwLCAweDEzLCAweEMwLCAweDdFLCAweDAwLCAweEVGLCAweDAxLCAweEZDLAorMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDgsIDB4NzcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MDcsIDB4MDEsIDB4MUQsCisweDAxLCAweDQ0LCAweDAwLCAweDkwLCAweDExLCAweDQwLCAweDA0LCAweDAxLCAweDExLCAweDAwLCAweDc0LCAweDEwLCAweEQwLAorMHgwMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0OCwgMHg0NCwgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NDQsIDB4ODcsIDB4NTEsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MTMsCisweDEwLCAweDFELCAweDQwLCAweDBGLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLAorMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MzQsIDB4MTQsIDB4QzEsIDB4MjAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NEMsCisweDQwLCAweDM3LCAweDAwLCAweEQ5LCAweDAwLCAweDY0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDMxLCAweDAwLCAweENELAorMHgwNCwgMHgyNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0OCwgMHgzMiwgMHg4MCwgMHg4RCwgMHgwMCwgMHgzNCwgMHg0MywgMHgxOSwKKzB4MEMsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LAorMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHg4MCwgMHhEMCwgMHgwMSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDIsIDB4MDUsIDB4MDgsIDB4MUQsIDB4MjAsCisweDY0LCAweDA3LCAweDUwLCAweDExLCAweDQxLCAweDM0LCAweDgwLCAweDFELCAweDAxLCAweDM0LCAweDAzLCAweDE4LCAweDBELAorMHg0MiwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTgsIDB4Q0YsIDB4MDAsIDB4NEMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMzLAorMHgwMCwgMHhDQiwgMHgwMCwgMHg2QywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg2RCwKKzB4MDcsIDB4MzAsIDB4MTAsIDB4QzIsIDB4MzYsIDB4MDAsIDB4OUYsIDB4MTMsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzIsCisweDIzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHg0MCwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwKKzB4MDMsIDB4RDIsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MEYsIDB4MDAsCisweDM3LCAweDAwLCAweERDLCAweDAwLCAweEY2LCAweDAzLCAweEMwLCAweDBFLCAweDIwLCAweDNGLCAweDAwLCAweERDLCAweDAzLAorMHhGMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweDMwLCAweDhELCAweEMwLCAweDM2LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDIzLCAweEYwLCAweDBELAorMHhDMiwgMHgzNCwgMHgwNCwgMHhERiwgMHgwMSwgMHg0QywgMHg0MywgMHhGMCwgMHgwRCwgMHhFMCwgMHgzNywgMHgwMCwgMHhEQiwKKzB4MDEsIDB4NEMsIDB4MTMsIDB4RjAsIDB4OEQsIDB4ODAsIDB4MzQsIDB4MDIsIDB4RDMsIDB4MTgsIDB4NEMsIDB4MEUsIDB4RjAsCisweDAxLCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDQzLCAweEYwLCAweDBELCAweEMwLCAweDJCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4MTEsIDB4MDEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MTAsIDB4NDAsCisweDgwLCAweDAwLCAweDFELCAweDgwLCAweDQ0LCAweDlDLCAweEQwLCAweDUxLCAweDQwLCAweEM3LCAweDBBLCAweDFELCAweDAwLAorMHgwNCwgMHg0OCwgMHhEMCwgMHgyMSwgMHg0MCwgMHg0NCwgMHgyMCwgMHgxMSwgMHhBMCwgMHgyQywgMHgwMiwgMHhEMCwgMHhBNSwKKzB4NDAsIDB4NzcsIDB4MDQsIDB4OTEsIDB4MDAsIDB4NjgsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDc0LCAweDBGLAorMHgxMCwgMHgxQywgMHg0MCwgMHgzMiwgMHgwMiwgMHhDRCwgMHgwMCwgMHgwNCwgMHg0MywgMHhEMCwgMHg4QywgMHg0MCwgMHhGMCwKKzB4MDgsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4NEMsIDB4NDAsIDB4NzMsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MDQsCisweDBGLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEQxLCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDA0LCAweDQ4LAorMHg3MywgMHgwMCwgMHg4OCwgMHgwMCwgMHgwNCwgMHgyNywgMHhEMCwgMHgwQywgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsIDB4NjQsIDB4MTAsCisweDEyLCAweDQwLCAweEM4LCAweDAwLCAweDNELCAweDAxLCAweDg0LCAweDA0LCAweEQwLCAweDEyLCAweDUwLCAweDQ4LCAweDA0LAorMHgyRCwgMHgwMywgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgwMiwgMHgzRCwgMHgwMSwgMHg4NCwgMHgwNCwKKzB4RDAsIDB4MzMsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MzEsIDB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4M0IsCisweDAwLCAweEI5LCAweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHgwQywKKzB4QzAsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDIsIDB4REYsCisweDAwLCAweDBDLCAweDAzLCAweEYwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENGLCAweDA0LCAweDBDLCAweDIzLCAweEYyLAorMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMywgMHgwMCwgMHgyQywgMHgwQiwgMHhGMCwgMHgwMCwgMHhDMCwgMHgzMywgMHgwMiwKKzB4OEIsIDB4ODAsIDB4MEMsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAwLCAweEYwLCAweDgyLCAweDgwLAorMHgwRiwgMHgwMiwgMHgyRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMSwgMHgwMiwgMHhDMCwgMHgwRiwgMHgwOCwgMHgzRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4ODMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4MkYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsCisweEQwLCAweDBGLCAweDAwLCAweDJGLCAweDA5LCAweEZDLCAweDAzLCAweEYwLCAweDgzLCAweEM0LCAweDNCLCAweDAxLCAweEI3LAorMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzQsIDB4MEQsIDB4QzAsIDB4NzcsCisweDQwLCAweEQzLCAweDAwLCAweDdDLCAweDA3LCAweDM0LCAweDBELCAweEMwLCAweDM3LCAweDA4LCAweERGLCAweDAwLCAweDdDLAorMHgwNywgMHgzMCwgMHgxRCwgMHhEMCwgMHg3MCwgMHgwMCwgMHhDMywgMHgwMSwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MjAsIDB4REYsIDB4NDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0OCwgMHgwRiwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4RjQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4RjQsIDB4MDAsCisweDEzLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDI1LCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDBCLAorMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhBOSwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEUxLAorMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHgwMCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHg1NCwKKzB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsCisweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDEyLCAweDQwLCAweDc4LCAweDgwLCAweEFELCAweDExLCAweEI0LCAweDA3LAorMHhEMCwgMHgxRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4ODAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsCisweDM0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweDUwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxNiwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwKKzB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4NkMsIDB4NDAsIDB4MzAsIDB4ODAsIDB4ODksIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDVCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDE1LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywKKzB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsCisweDE0LCAweDAwLCAweDUxLCAweDAwLCAweDRELCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLAorMHhCQywgMHg5NSwgMHhGMCwgMHgyNywgMHhEMCwgMHgxNCwgMHgwMCwgMHg2RiwgMHgwMiwgMHg3QywgMHgwMSwgMHhEMCwgMHgwNSwKKzB4QzAsIDB4NUYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsCisweDFGLCAweDAwLCAweEZDLCAweDAwLCAweDkwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGQywgMHgwMCwgMHg5MCwgMHgwMywgMHhDMCwgMHgwRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4N0MsCisweDQwLCAweEUwLCAweDIxLCAweEMwLCAweDA3LCAweDA4LCAweDFGLCAweDEwLCAweDc0LCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDAxLAorMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwKKzB4NzAsIDB4NDksIDB4QzAsIDB4RTUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwNCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgyRSwgMHhEMCwgMHgwOSwKKzB4NDYsIDB4QTcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NzQsIDB4MkEsIDB4RDAsIDB4MjksIDB4NDAsIDB4NjcsIDB4ODAsIDB4OUQsCisweDAwLCAweDc0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQzLCAweDc0LCAweEEyLCAweDMwLAorMHgzOCwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHg4MCwgMHg2QywgMHgwRSwgMHhEMSwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDEyLCAweEQwLCAweDRCLCAweDQwLCAweDZGLCAweDAwLCAweEJELCAweDAxLCAweEY0LCAweDAyLCAweEQwLCAweDFCLCAweDQwLAorMHg2RiwgMHgwMCwgMHhCRCwgMHgwOCwgMHhGNCwgMHgwMiwgMHhEMCwgMHg4QiwgMHg0MCwgMHgyRiwgMHgxOCwgMHhCRCwgMHgwMSwKKzB4RjQsIDB4MDIsIDB4RDAsIDB4MUIsIDB4NDEsIDB4NkYsIDB4MDAsIDB4QkQsIDB4MDQsIDB4NjQsIDB4MDIsIDB4NTgsIDB4MDksCisweDQwLCAweDI1LCAweDA4LCAweDlELCAweDAwLCAweDQ0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHhCNCwgMHgwNiwKKzB4RDAsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDYsIDB4RDIsIDB4MEEsIDB4NDAsIDB4NkIsCisweDAwLCAweEFELCAweDAxLCAweEI0LCAweDA2LCAweEQwLCAweDFBLCAweDQ4LCAweDZCLCAweDIwLCAweEFELCAweEMwLCAweEI0LAorMHgwNiwgMHhEMCwgMHgwQSwgMHg0OCwgMHgyQiwgMHgwMCwgMHhBRCwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjAsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MjUsIDB4MjIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDI4LCAweEYwLAorMHgwMSwgMHhDMiwgMHg4NywgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgyMiwKKzB4MUYsIDB4MkEsIDB4N0MsIDB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MjgsCisweEYwLCAweEExLCAweDQwLCAweDA3LCAweDAwLCAweDNGLCAweDBBLCAweDZDLCAweDAwLCAweDcyLCAweDA1LCAweEMwLCAweDA1LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDOCwgMHg3NywgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MDksCisweENBLCAweDI3LCAweDA4LCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3NCwgMHg4MiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RjgsIDB4MDIsIDB4NzIsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDAsCisweEJGLCAweDAwLCAweDdDLCAweDEyLCAweEY4LCAweDA5LCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDNiwKKzB4QUMsIDB4MTgsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4QUYsIDB4MjAsIDB4QkYsIDB4MDIsCisweENDLCAweDBBLCAweEYwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweEI3LCAweDAwLCAweEZDLCAweDBBLCAweDMwLCAweDJCLAorMHhDMCwgMHgyQywgMHgyMCwgMHhCRiwgMHg0OCwgMHhCQywgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgyMCwgMHg5RiwKKzB4MDAsIDB4RjQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NzcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweDE0LCAweEQwLCAweDAxLCAweDQwLCAweDQ0LAorMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgxNCwgMHhEMCwgMHgwMSwgMHg0OCwgMHg0NywgMHgwMSwgMHgxRCwgMHg4MSwgMHg0NCwKKzB4OTQsIDB4OTAsIDB4MTEsIDB4NTIsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4NTEsIDB4NDAsCisweDA0LCAweDAwLCAweDFELCAweDA1LCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLAorMHg2NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MjEsIDB4MDEsCisweDhELCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDIzLCAweDAxLCAweEM1LCAweDA0LCAweDE1LCAweDAzLAorMHhEMCwgMHg0RCwgMHg0MSwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMywgMHgxMCwgMHgwOCwgMHgxNCwgMHgzMiwKKzB4MjAsIDB4OEQsIDB4MDAsIDB4NzYsIDB4ODIsIDB4NTAsIDB4MDgsIDB4NDgsIDB4MjMsIDB4MTAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsCisweDBELCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweEMwLCAweDc0LCAweDAyLCAweDEyLCAweDA5LCAweDAwLCAweDI0LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgxMiwgMHg1NCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgyNCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjQsIDB4NDAsIDB4OTUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDRFLCAweDcwLCAweDY5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA1LCAweDdDLCAweDAyLCAweDEwLAorMHgwOSwgMHg0MCwgMHgxNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDQsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLAorMHgyNywgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNSwgMHgyMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDQsIDB4OUYsIDB4MDQsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3RSwgMHgwMCwKKzB4MzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4NDcsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDQxLCAweEMyLCAweDA0LCAweDAwLCAweDEzLCAweDAwLCAweDdDLAorMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MTQsIDB4MDAsIDB4NUQsCisweDAwLCAweEY0LCAweDAxLCAweEQwLCAweDA0LCAweDQwLCAweDlGLCAweDA0LCAweDVELCAweDAxLCAweEY0LCAweDIxLCAweDEwLAorMHgwNSwgMHgwMCwgMHhERiwgMHgwMiwgMHg3MSwgMHg4OCwgMHhGMCwgMHgwMSwgMHhEMCwgMHg4NiwgMHhDMCwgMHgxOSwgMHgwMSwKKzB4NUQsIDB4MTEsIDB4RjQsIDB4MDksIDB4MTAsIDB4MzcsIDB4NDgsIDB4MTQsIDB4MjAsIDB4N0IsIDB4OTEsIDB4NzQsIDB4MDEsCisweDEwLCAweEI3LCAweDQwLCAweDFGLCAweDAwLCAweDVELCAweDAwLCAweEY0LCAweDQ1LCAweEQwLCAweDA1LCAweDQwLCAweDQzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4NDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4RjMsIDB4MDAsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDgsCisweDQwLCAweEYzLCAweDIwLCAweEQwLCAweDAyLCAweDM0LCAweDEzLCAweEQwLCAweDJDLCAweDQwLCAweDUzLCAweDAwLCAweDhELAorMHg0MCwgMHg3NiwgMHg0MywgMHgxNCwgMHgzRCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwNCwgMHg3NCwgMHgwMiwgMHg1MCwKKzB4MzAsIDB4NDgsIDB4NDMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LAorMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwNywgMHgxMCwgMHgwRSwgMHg0MCwKKzB4N0IsIDB4MTQsIDB4RTEsIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsCisweEI0LCAweDAzLCAweDEyLCAweDJFLCAweDUwLCAweDc4LCAweDAwLCAweEU5LCAweDAwLCAweEY0LCAweEMyLCAweDAwLCAweDAyLAorMHg0MSwgMHgwQiwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDFFLCAweEMyLCAweDVCLCAweDAwLCAweEVGLCAweDAxLCAweEY0LCAweDA3LCAweDMwLCAweDFFLCAweEM4LCAweDdGLAorMHgxMCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNywgMHhEMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhGQywKKzB4MDcsIDB4MzAsIDB4MTcsIDB4QzgsIDB4NzgsIDB4MDgsIDB4RTMsIDB4MjEsIDB4QkMsIDB4MDcsIDB4NzAsIDB4MTYsIDB4QzAsCisweDRCLCAweDAwLCAweEVGLCAweDIxLCAweEJDLCAweDA1LCAweEYwLCAweDFFLCAweEMwLCAweDUzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MTcsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsCisweEQ3LCAweDIwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLAorMHhGMywgMHgwNSwgMHhDMCwgMHgzMiwgMHgxMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhFMCwgMHgwNSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjEsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA1LCAweEYwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwKKzB4MjEsIDB4QkMsIDB4ODUsIDB4MzAsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MDIsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsCisweDVGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDA5LCAweEZDLCAweDE2LCAweEYwLCAweDE3LCAweEM0LCAweDZELCAweDAwLAorMHhGRiwgMHgwOSwgMHhGNCwgMHgyNywgMHgzMCwgMHg5RiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDksIDB4RDAsIDB4MEUsIDB4NDAsCisweDNCLCAweDAwLCAweEUxLCAweDI4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDA4LAorMHhCNCwgMHgwMywgMHgxMiwgMHgwRiwgMHg0MCwgMHgzOCwgMHgwNiwgMHhFMSwgMHgxOCwgMHhCNCwgMHg0MywgMHhEMCwgMHgwNiwKKzB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MEEsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MjgsIDB4MDAsIDB4RUQsCisweDA4LCAweEY0LCAweDBCLCAweDE0LCAweDBFLCAweDQwLCAweDU3LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHg4RSwgMHg0MCwgMHgxRiwKKzB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDksIDB4RDAsIDB4OEYsIDB4NDAsIDB4MzksIDB4MDIsIDB4NkQsIDB4MDIsIDB4RjQsCisweDA5LCAweDEwLCAweDI2LCAweDQwLCAweEJDLCAweDA4LCAweEUxLCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDRFLCAweDQwLAorMHgzQiwgMHgwMiwgMHhFRCwgMHg4MCwgMHhCNCwgMHg5MywgMHhEMCwgMHgwNywgMHg0MCwgMHgxOSwgMHgwMCwgMHhFRCwgMHg0MCwKKzB4QjQsIDB4MDEsIDB4MTIsIDB4MEUsIDB4NDAsIDB4MjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDA4LCAweEQwLCAweDBDLCAweDQxLCAweDA3LCAweDAxLAorMHhDMSwgMHgwMSwgMHgzNCwgMHg4MiwgMHhEMCwgMHgyQywgMHg0RCwgMHg2NSwgMHgwMiwgMHg4RCwgMHg4OCwgMHg3NCwgMHgyNCwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MzQsIDB4MEMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NzMsCisweDA0LCAweDlELCAweDBGLCAweDM0LCAweDAyLCAweEQwLCAweDI0LCAweDQwLCAweDAwLCAweDIwLCAweENELCAweDA5LCAweDc0LAorMHgwMCwgMHgxMCwgMHgwQywgMHg2MCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MzYsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4MDAsIDB4QzMsCisweDEyLCAweDNDLCAweDE0LCAweEYwLCAweDJELCAweEMwLCAweDg1LCAweDAwLCAweDBGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLAorMHg1MSwgMHg0MCwgMHg3NCwgMHg4MCwgMHhEMywgMHgwOSwgMHg3NCwgMHgyNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgzMywgMHgwNCwKKzB4MUUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTQsIDB4QzAsIDB4MDUsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDIsCisweDMwLCAweDBELCAweEM4LCAweDc3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxRCwgMHhDOCwgMHhDNywgMHgyMCwgMHhERiwgMHgwNCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MUQsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MUQsIDB4ODAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MDEsCisweEQwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDA5LCAweDQxLCAweDM3LCAweDIwLCAweDlGLAorMHgwMCwgMHg3OCwgMHgwMiwgMHhDMCwgMHgxNSwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDJDLCAweDAwLCAweEYzLCAweDA1LCAweEVDLAorMHgwMCwgMHhCMCwgMHg1RiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzMywgMHgyMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwMywgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4MDQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MjAsIDB4MzMsIDB4MjAsCisweENDLCAweDE3LCAweEYwLCAweDE3LCAweEQxLCAweDBDLCAweDAwLCAweEZGLCAweDEwLCAweEZDLCAweDAwLCAweDEwLCAweDBGLAorMHhDMiwgMHgyNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDEsIDB4MEMsIDB4NDAsIDB4NDQsIDB4MDgsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDQsCisweDEwLCAweDFELCAweDQwLCAweDQ3LCAweDAxLCAweDExLCAweDAxLCAweDQ0LCAweDA2LCAweDEwLCAweDMxLCAweDQwLCAweEY3LAorMHgwNCwgMHhERCwgMHgwMSwgMHg3NCwgMHgxRSwgMHhEMCwgMHg1MSwgMHg0MCwgMHgzNywgMHgyMCwgMHgxMSwgMHgwMywgMHg0NCwKKzB4MDMsIDB4RDAsIDB4QzUsIDB4NDAsIDB4NDQsIDB4MDEsIDB4REQsIDB4MDAsIDB4NzQsIDB4MkMsIDB4MTAsIDB4MEQsIDB4NDYsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweERELAorMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgxRCwgMHg0MCwgMHg2NCwgMHgwNCwgMHhEMSwgMHgwMCwgMHg2NCwgMHgwRSwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4NDcsIDB4ODAsIDB4OTEsIDB4MDMsIDB4NDQsIDB4MEMsIDB4MTAsIDB4MTksIDB4NDIsIDB4NzcsIDB4MDAsCisweERELCAweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDE5LCAweDQwLCAweDM3LCAweDA5LCAweDExLCAweDAxLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwNSwgMHg0MCwgMHg0NCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHg4MiwgMHg0MCwgMHgwRCwgMHg0MCwgMHgwNywKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDIwLCAweDQwLCAweEMxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDBDLAorMHg0MCwgMHgyMywgMHg2MCwgMHg5MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxNiwgMHgwOCwgMHg0MCwgMHgzMywgMHgyMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzcsIDB4MDgsIDB4ODEsIDB4MjAsIDB4MDUsIDB4MDIsIDB4RDAsCisweDA0LCAweDQwLCAweDAwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAwLCAweDUwLCAweDBDLCAweDQwLCAweDQzLCAweDIwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4MEQsIDB4QzIsIDB4MjQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4MzAsIDB4MEQsIDB4QzAsCisweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHgxMywgMHg0MCwgMHg0QywgMHgwMywgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzQsIDB4MEQsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHgwRiwgMHhDOCwgMHgyQiwgMHgwOCwgMHhGRiwgMHgyMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzIsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhCMCwgMHgwRiwgMHhDMCwgMHgxNywgMHgyMiwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NEYsIDB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MjQsIDB4MzAsCisweDEzLCAweEMwLCAweDJDLCAweDAyLCAweEYzLCAweDAwLCAweDhDLCAweDA3LCAweDMwLCAweENGLCAweEMwLCAweDJDLCAweDQwLAorMHgzMywgMHgwOCwgMHhDQywgMHgyMywgMHg3MiwgMHhDNywgMHhDMCwgMHhDRSwgMHgwMCwgMHgzMywgMHgwNCwgMHhEQywgMHgwMCwKKzB4MzAsIDB4MTMsIDB4QzAsIDB4Q0YsIDB4MDAsIDB4M0YsIDB4MDEsIDB4RUQsIDB4MDQsIDB4MzAsIDB4MTMsIDB4QzAsIDB4NEMsCisweDAwLCAweDMzLCAweDAxLCAweENDLCAweDA0LCAweDMwLCAweDEzLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgyMSwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwNCwKKzB4NDAsIDB4MjQsIDB4MDksIDB4RjEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MzAsIDB4MjEsIDB4NDAsIDB4QjAsIDB4MDUsIDB4MDEsCisweDI2LCAweDA1LCAweDNCLCAweDMwLCAweEUxLCAweDQwLCAweDA1LCAweDIxLCAweDUxLCAweDBCLCAweDQ0LCAweDE4LCAweDE1LAorMHg0MSwgMHhDMCwgMHgyMywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxMCwgMHgwMSwgMHg0MiwgMHg0NCwgMHgwMCwKKzB4MTEsIDB4ODAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweEEwLCAweDAzLCAweDA0LCAweDExLCAweDAxLCAweDA0LCAweDEyLCAweDEwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg2NCwgMHg1MywgMHg5MCwgMHgzQywgMHg0OCwgMHgyNCwgMHgwMiwgMHgwMSwgMHgwNiwKKzB4MjUsIDB4ODMsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzQsIDB4NDgsIDB4OTAsIDB4MDAsCisweDQxLCAweDAzLCAweDAxLCAweDg5LCAweDAwLCAweDQ0LCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDQ2LCAweDAwLCAweDg5LAorMHgwMCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0NSwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTgsIDB4MDUsIDB4MDAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDUsIDB4NDAsIDB4MDQsCisweDEyLCAweEMxLCAweDAwLCAweDY0LCAweDAzLCAweDE0LCAweDA5LCAweDQwLCAweDM0LCAweDAyLCAweDExLCAweDAxLCAweDY0LAorMHgwNywgMHgxMCwgMHgwMSwgMHg0MCwgMHg0NSwgMHgwNCwgMHg1OSwgMHgyMCwgMHg2NCwgMHg0NCwgMHg5MiwgMHgxMSwgMHg0MiwKKzB4MjcsIDB4MDAsIDB4OEMsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTgsIDB4MTEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4ODksIDB4MDAsCisweDI0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMCwgMHgzNywgMHg0MCwgMHg0MywgMHgwMCwgMHg0QywgMHgwNCwgMHgzMCwgMHgyMSwgMHhDMSwgMHg2NCwgMHgwMCwKKzB4RDMsIDB4MDAsIDB4MkQsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzQsIDB4QzAsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDcsCisweEYyLCAweDBELCAweEMwLCAweDg0LCAweDQwLCAweDVCLCAweDgxLCAweDdDLCAweDBDLCAweEIxLCAweDUxLCAweEUwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMSwgMHhCMCwgMHgwOCwgMHhDMCwgMHgxMiwgMHgxOCwgMHgxQiwgMHgwMSwgMHg2QywKKzB4MDQsIDB4MzAsIDB4MTEsIDB4QzAsIDB4MDksIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweDg4LCAweDNELCAweDIwLCAweDdGLCAweDAwLCAweEZDLCAweDI0LCAweEYwLCAweDA3LCAweEMwLCAweDczLCAweDAwLCAweEZGLAorMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgyNiwgMHhDMCwgMHgwRiwgMHgzMCwgMHgzRiwgMHgyMCwgMHg5QywgMHgwMywgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MEQsIDB4MDAsIDB4NzcsIDB4MDMsIDB4REMsIDB4MDAsIDB4NzIsIDB4MDMsIDB4QzAsIDB4MkQsIDB4MDIsCisweDNGLCAweDA4LCAweERDLCAweDAzLCAweDc0LCAweDBCLCAweEMwLCAweDFELCAweDE4LCAweDM2LCAweDQ5LCAweERDLCAweDI0LAorMHhGMCwgMHg5MywgMHhDMCwgMHgxRSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwKKzB4NzUsIDB4MDAsIDB4NTMsIDB4MTAsIDB4NEMsIDB4MDYsIDB4MzIsIDB4MDEsIDB4Q0EsIDB4MjQsIDB4MDAsIDB4RDMsIDB4MDAsCisweDRELCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDI0LCAweDAwLCAweDEzLCAweDAyLCAweDZDLCAweDAyLCAweDMwLCAweDBELAorMHhDMSwgMHg4NiwgMHgwMCwgMHg0RiwgMHg1MCwgMHhDQywgMHgxOCwgMHgzMCwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwgMHg5MywKKzB4MDUsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MDQsIDB4OTMsIDB4MTEsIDB4NEMsIDB4NDYsIDB4MzAsCisweDU5LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDc0LAorMHgwMCwgMHg1MSwgMHg4MCwgMHg0NCwgMHgwNiwgMHgxMiwgMHgwNSwgMHg0MCwgMHgzNCwgMHgwOSwgMHhGMSwgMHgwMCwgMHg0NCwKKzB4MEIsIDB4MTAsIDB4QkQsIDB4NDAsIDB4QTQsIDB4MDIsIDB4MzUsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4N0MsIDB4NDAsCisweDA0LCAweDA2LCAweDVELCAweDExLCAweDJDLCAweDA4LCAweDEwLCAweDExLCAweDAwLCAweDY3LCAweDA4LCAweDlCLCAweDIzLAorMHgzNCwgMHgyQiwgMHhEMCwgMHhBOSwgMHg0MCwgMHg5NCwgMHgwNCwgMHg5MSwgMHgwMywgMHg0NCwgMHgwRSwgMHgxMCwgMHgzOSwKKzB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDg5LCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweEMxLCAweDAxLCAweDA0LCAweDRCLAorMHgxNCwgMHgzQywgMHg0MCwgMHhBMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxOCwgMHgyNCwgMHg0MCwgMHgwNiwKKzB4MDgsIDB4OEQsIDB4MDIsIDB4MTQsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NDgsIDB4NTMsIDB4MDIsIDB4NDUsIDB4MDAsIDB4MzQsCisweDAwLCAweEQwLCAweDA0LCAweDQwLCAweDYxLCAweDAwLCAweDQxLCAweDAyLCAweDA0LCAweDA5LCAweDEwLCAweDA0LCAweDAyLAorMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0OCwgMHgwMCwgMHhCOSwKKzB4MDksIDB4ODQsIDB4MEQsIDB4MTAsIDB4MUUsIDB4NDIsIDB4RjgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QzQsIDB4ODcsIDB4MTQsCisweDFDLCAweDQxLCAweDY4LCAweDAyLCAweEE1LCAweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDkyLCAweDUwLCAweDQ4LCAweDIwLAorMHhBRCwgMHgyMSwgMHgzNiwgMHg4NCwgMHgxOCwgMHgxMiwgMHg0MCwgMHg3QiwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHgwNiwKKzB4RDAsIDB4OTcsIDB4NDAsIDB4NkQsIDB4MDAsIDB4NjEsIDB4MDksIDB4ODQsIDB4MjUsIDB4MTAsIDB4MTYsIDB4NDAsIDB4MTAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDAwLCAweDQwLCAweDhCLCAweDA4LAorMHg0QywgMHgxMywgMHgzMCwgMHgwOCwgMHhDMCwgMHgwMCwgMHg0MiwgMHhEMywgMHgxMCwgMHgwQywgMHgwMywgMHgzMCwgMHgwQywKKzB4NDAsIDB4MjAsIDB4MDIsIDB4ODMsIDB4MDAsIDB4MkMsIDB4MDMsIDB4MTIsIDB4MDQsIDB4QzIsIDB4MDIsIDB4MDAsIDB4OEYsCisweDA4LCAweDFDLCAweDEyLCAweDMwLCAweDAwLCAweEU1LCAweDEzLCAweDAwLCAweEM3LCAweDAwLCAweDNDLCAweDIwLCAweEYwLAorMHgwNCwgMHhDMCwgMHgyMSwgMHgwMCwgMHhEMywgMHgwOCwgMHg0QywgMHgyMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg0OCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MEQsIDB4MDAsIDB4QTcsIDB4MDgsIDB4RkMsCisweDAzLCAweEYwLCAweDBGLCAweEM4LCAweDFGLCAweDAwLCAweEZGLCAweDgwLCAweEZELCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgzRiwgMHgwQSwgMHhCRSwgMHg4MCwgMHhGQywgMHgwMywgMHhGNCwgMHgwMywgMHhDMiwgMHgwRiwgMHgwMiwgMHhFRiwgMHgyMCwKKzB4RUMsIDB4MDIsIDB4RjAsIDB4ODMsIDB4QzAsIDB4M0YsIDB4MDIsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MDYsCisweEMwLCAweDJBLCAweDAyLCAweEZGLCAweDA4LCAweEZDLCAweDIzLCAweEYwLCAweDhGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg1QywgMHgwNSwKKzB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MEQsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsCisweDAwLCAweDEzLCAweDAwLCAweENELCAweDAzLCAweDM0LCAweDBELCAweEQ4LCAweDA1LCAweDEwLCAweDEzLCAweDAwLCAweDdDLAorMHgwMiwgMHg3MCwgMHgwMSwgMHhDNCwgMHgxMywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhEMCwKKzB4MzQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEUsIDB4MDEsIDB4MzAsIDB4MTUsIDB4QzAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDgwLCAweDg0LCAweDAxLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhDRCwgMHgxMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgxMCwKKzB4ODEsIDB4MDQsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QjQsIDB4MDIsCisweDExLCAweDA2LCAweDQ4LCAweDNCLCAweDAwLCAweDYxLCAweDAwLCAweEI0LCAweDAzLCAweEQyLCAweDBGLCAweDQwLCAweDM4LAorMHgyMCwgMHg2RCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHgwNiwgMHg0MCwgMHg0OCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4MTAsIDB4MUEsCisweDUwLCAweDY4LCAweDAwLCAweEVELCAweDA1LCAweDg0LCAweDQ3LCAweEQ4LCAweDFFLCAweDQwLCAweDZGLCAweDAwLCAweEExLAorMHgxRCwgMHg4NSwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHhDOSwgMHgxOCwgMHhFMSwgMHgwMSwgMHhGNCwgMHgwRSwgMHg1MCwKKzB4MTIsIDB4NDAsIDB4NUIsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RDAsIDB4MUUsIDB4NDIsIDB4NzgsIDB4MDAsCisweEVELCAweDAxLCAweDg0LCAweDg3LCAweDEwLCAweDFFLCAweDQwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHg3MywgMHgwMiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwKKzB4QjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QTMsIDB4MDEsIDB4QzEsIDB4NDAsCisweDA0LCAweDA5LCAweDEwLCAweDhELCAweDQwLCAweDc2LCAweDAwLCAweEMxLCAweDAzLCAweDM0LCAweDBGLCAweDEwLCAweDg4LAorMHg0MiwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEEwLCAweDk1LCAweDAwLCAweDVGLCAweDAwLCAweDVDLCAweDAxLCAweDM0LCAweDA1LCAweEMwLCAweDFDLAorMHgwMSwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHhGMCwgMHgwNywgMHhDMCwgMHhERiwgMHg0NCwgMHg3MywgMHgwMCwgMHhDQywKKzB4MzEsIDB4MzAsIDB4MTcsIDB4QzIsIDB4OUQsIDB4NDAsIDB4NzMsIDB4MDcsIDB4RkMsIDB4MjksIDB4NzIsIDB4MTYsIDB4QzAsCisweDE3LCAweDUwLCAweDUzLCAweDIwLCAweDdDLCAweDAxLCAweEYxLCAweDA1LCAweEMwLCAweDE0LCAweDEwLCAweDVGLCAweDAwLAorMHg0RCwgMHgwMSwgMHgzNCwgMHgwNSwgMHhEMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDgsIDB4MDUsIDB4MDQsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzgsIDB4MDMsIDB4MDQsCisweDFGLCAweDQwLCAweDdELCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDEwLCAweDFGLCAweDIwLCAweDdDLCAweDAwLAorMHhGMiwgMHgxMSwgMHhEMCwgMHgwNywgMHgwNCwgMHgwRiwgMHgxMiwgMHgzQywgMHgwOCwgMHhGMSwgMHg0MSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MTEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMiwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMiwgMHg5MCwKKzB4MDEsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsCisweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDA1LCAweDRDLCAweDA2LCAweDEwLCAweDA5LCAweEM4LCAweDI0LCAweDAwLAorMHg5MywgMHgwMCwgMHg2NCwgMHgwQSwgMHgzMCwgMHgwOSwgMHhDMCwgMHhFNCwgMHgxMCwgMHg5RiwgMHgwMiwgMHg0RCwgMHgwQSwKKzB4MzAsIDB4NTksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweEE2LCAweDEwLCAweDlELCAweDAwLCAweDQ1LCAweDBBLCAweEQwLCAweDA4LCAweEMwLCAweDY2LCAweDAwLCAweDkxLCAweDAxLAorMHgzNCwgMHgxQSwgMHgxMiwgMHgwOSwgMHg0OCwgMHhBNCwgMHgwMiwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMiwgMHg5OSwKKzB4NTEsIDB4MjQsIDB4MDgsIDB4OTEsIDB4MjUsIDB4NDQsIDB4QTYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OTEsCisweDAyLCAweDA0LCAweDBBLCAweDEwLCAweDI5LCAweDUwLCAweDY0LCAweDA4LCAweDlELCAweDQyLCAweDQ0LCAweDBBLCAweDEwLAorMHgzOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwKKzB4ODAsIDB4QkQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MjQsIDB4NDAsIDB4OTUsIDB4MDgsIDB4NzQsCisweDIyLCAweDE0LCAweDA5LCAweDQ4LCAweEIwLCAweDAwLCAweEQ5LCAweDA0LCAweDI0LCAweDAyLCAweDE0LCAweDA5LCAweDQwLAorMHgyNCwgMHg0MiwgMHhEMSwgMHgwMCwgMHg0NSwgMHg0MiwgMHg1MCwgMHgwOSwgMHg1MiwgMHgyNCwgMHg0MCwgMHhBMSwgMHgwMCwKKzB4RjQsIDB4MDIsIDB4MTAsIDB4MkEsIDB4NDIsIDB4MkMsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QTQsIDB4MDIsIDB4MTAsIDB4MEIsCisweDQyLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDY4LCAweDAwLAorMHhFRCwgMHgwMCwgMHg4NCwgMHgwNiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyMiwgMHgwMSwgMHg4NSwgMHgwNCwgMHg3NCwgMHgwMiwKKzB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MjUsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NjAsCisweDIwLCAweDgxLCAweDg0LCAweDA1LCAweDEyLCAweDE0LCAweDA4LCAweDQwLCAweDJDLCAweDAwLCAweEExLCAweDAxLCAweEQ0LAorMHgwMiwgMHgxMCwgMHgwQSwgMHg0MiwgMHg2OCwgMHg4MCwgMHhBRCwgMHgwMSwgMHhBNCwgMHgwNiwgMHgxMCwgMHgxQSwgMHg0MCwKKzB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4ODYsIDB4MDIsIDB4MUYsCisweDBBLCAweDBELCAweDI4LCAweEYwLCAweEEyLCAweEMwLCAweDk0LCAweDAyLCAweDE3LCAweDBBLCAweDdDLCAweDI4LCAweDMwLAorMHhBNSwgMHhEMCwgMHg4NCwgMHgwMiwgMHgxQiwgMHgwQSwgMHgyQywgMHgyOCwgMHgzMSwgMHhBMSwgMHhEMCwgMHg4MCwgMHgyMiwKKzB4MTMsIDB4MDAsIDB4NEMsIDB4MjgsIDB4NzAsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MjksCisweDMwLCAweEExLCAweEMwLCAweDA0LCAweDAwLCAweDBGLCAweDBBLCAweDJDLCAweDI4LCAweDMyLCAweEEyLCAweEMwLCAweDc3LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OUIsIDB4MDgsIDB4RUMsIDB4MDIsIDB4RjQsIDB4OEIsCisweEM4LCAweDJCLCAweDAyLCAweEI3LCAweDA4LCAweERDLCAweDIzLCAweEYwLCAweDhCLCAweEMyLCAweDJGLCAweDAwLCAweEJGLAorMHg2OCwgMHhCQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMCwgMHg2QywgMHgwMiwgMHhGNCwKKzB4MDksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4NjcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDAwLCAweEYzLCAweDI4LCAweERDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHg0MiwgMHhCMywgMHgwNCwgMHhDQywgMHgwMiwgMHgzMCwgMHhDRiwgMHhDMCwKKzB4MkIsIDB4MDAsIDB4QTMsIDB4MDUsIDB4NEQsIDB4MTYsIDB4MzIsIDB4OUIsIDB4QzAsIDB4QUYsIDB4MTAsIDB4QjMsIDB4MDUsCisweERDLCAweDM2LCAweDMwLCAweDBCLCAweEM0LCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDhCLAorMHhDMCwgMHgzQywgMHgxOCwgMHhCRiwgMHg0MCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg2MywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MDEsIDB4MDQsIDB4NDQsIDB4NDEsCisweEQwLCAweDAxLCAweDQxLCAweDA3LCAweDAyLCAweDExLCAweDE0LCAweDQ0LCAweDEwLCAweDEwLCAweEMwLCAweDQwLCAweDg3LAorMHg0NCwgMHgxMSwgMHgxNywgMHg0NCwgMHg1QywgMHgxNCwgMHgzMSwgMHg0NCwgMHg0NywgMHgwMCwgMHgxMSwgMHgyMiwgMHg0NCwKKzB4MDQsIDB4MTAsIDB4NTUsIDB4NDEsIDB4NDQsIDB4MDUsIDB4NTEsIDB4MTQsIDB4NzQsIDB4MTAsIDB4RDAsIDB4NDEsIDB4NTAsCisweDA0LCAweDAwLCAweDVELCAweDEwLCAweDc0LCAweDAxLCAweEQwLCAweDQ1LCAweDQxLCAweDczLCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHg0NSwgMHg4MSwgMHgwNCwgMHgxNCwgMHgxMiwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MEMsIDB4MjQsIDB4NTIsIDB4MTAsIDB4NDgsIDB4NDQsIDB4MjMsIDB4MDMsCisweDgxLCAweDA4LCAweDA0LCAweDIyLCAweDEwLCAweDY4LCAweDQwLCAweDI3LCAweDAxLCAweDg5LCAweDA4LCAweDM0LCAweDFBLAorMHgxNCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMCwgMHg4OSwgMHgyNCwgMHgzNCwgMHg1MiwgMHhEMSwgMHg0OCwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDIxLCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweEQyLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NSwgMHgwMiwgMHgxNCwgMHgyOSwgMHg0MCwgMHhBNywgMHgwMSwgMHg5MSwKKzB4MTEsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OTksIDB4MDYsIDB4NjQsIDB4MEEsIDB4MTAsCisweDE5LCAweDQwLCAweDI0LCAweDQwLCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzAsCisweEE3LCAweDAxLCAweDkzLCAweDAwLCAweDZELCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAxLAorMHg0QywgMHgwQSwgMHgzMCwgMHg2OSwgMHhDMCwgMHgyMywgMHgyNCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwNiwgMHgzMiwgMHgxOCwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OUEsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4ODAsIDB4OUYsCisweDAyLCAweDdDLCAweDBBLCAweEYwLCAweDI5LCAweEMwLCAweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMywKKzB4MDAsIDB4OEYsIDB4MDAsIDB4NUMsIDB4NEUsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDQsIDB4OEYsIDB4NDAsIDB4N0MsCisweDAyLCAweEYyLCAweDA5LCAweEMyLCAweDI3LCAweDQwLCAweDg3LCAweDAxLCAweDU0LCAweENBLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwQywgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDA1LCAweDA0LCAweDFGLCAweDA0LCAweDRDLCAweDA4LCAweEI0LCAweDAxLCAweEQwLCAweDA0LCAweDAxLAorMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwOCwKKzB4MzAsIDB4MjEsIDB4QzAsIDB4ODQsIDB4MDAsIDB4MTMsIDB4MDEsIDB4MEMsIDB4MDAsIDB4QjQsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDA2LCAweDRELCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAyLCAweDRELAorMHg0OCwgMHgzNCwgMHgyMSwgMHhEMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4REMsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QzQsIDB4MDUsIDB4MzAsIDB4MDUsIDB4NDAsIDB4MUMsIDB4MDAsIDB4NTEsCisweDAwLCAweEM1LCAweDA1LCAweDEwLCAweDA3LCAweDQ4LCAweDFDLCAweDAwLCAweDUxLCAweDIwLCAweDQ0LCAweDAxLCAweDUwLAorMHg2NywgMHg0MCwgMHgxQywgMHg0OCwgMHg3MSwgMHgxMCwgMHhFQywgMHgwOSwgMHgxMCwgMHgxNSwgMHg0MCwgMHgxMywgMHgwMCwKKzB4N0QsIDB4ODMsIDB4QzQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0QsIDB4MDAsIDB4QzQsIDB4MDksCisweDEwLCAweDA3LCAweDQwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHhGMiwgMHgwMiwgMHg4RCwgMHgwMiwgMHgwNCwgMHgwNywgMHg1MCwgMHgwQywgMHg0MCwgMHhCMCwgMHg0MCwgMHhDNSwgMHgwMCwKKzB4NDQsIDB4MEYsIDB4MTAsIDB4OEMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDUsIDB4MDMsIDB4MTgsIDB4NkMsCisweDQ0LCAweDMwLCAweDIwLCAweEMxLCAweDAxLCAweDA0LCAweDA3LCAweDEwLCAweDE4LCAweDQwLCAweDMzLCAweDA4LCAweENELAorMHgwMywgMHgwNCwgMHgwNSwgMHgxMCwgMHg4OSwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwQiwgMHgxMCwKKzB4MEMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsCisweDEwLCAweDJELCAweDA0LCAweDg0LCAweDQ3LCAweDUwLCAweERGLCAweDQyLCAweDA4LCAweDA0LCAweEU1LCAweDAwLCAweDg0LAorMHg0MSwgMHgxMCwgMHgxRSwgMHg0MCwgMHgyQywgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NCwgMHgxMywgMHg1MCwgMHgxRSwgMHg1MCwKKzB4M0MsIDB4MDUsIDB4NDEsIDB4MjAsIDB4QTQsIDB4MEIsIDB4MTAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDMsCisweDg0LCAweDBELCAweDExLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDFFLAorMHg0NCwgMHgxNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OSwgMHgwMCwKKzB4QUYsIDB4MDcsIDB4Q0QsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NDAsIDB4NDAsIDB4ODcsIDB4ODksIDB4OEMsIDB4MDQsCisweDM0LCAweDFFLCAweDEwLCAweDc4LCAweDQwLCAweEUzLCAweDMxLCAweENDLCAweDBGLCAweDM0LCAweDFFLCAweEMwLCAweEU4LAorMHgwMCwgMHg2MywgMHgwMSwgMHgwQywgMHgwNCwgMHgzNCwgMHgxQSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywKKzB4MDYsIDB4MzQsIDB4MTIsIDB4QzAsIDB4NEIsIDB4MDAsIDB4RkQsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsCisweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweDFGLAorMHgyMCwgMHg3QywgMHgwMywgMHgzMCwgMHgyQywgMHhDMCwgMHgwNywgMHgwMCwgMHhEQiwgMHgwNCwgMHgzQywgMHgwMCwgMHhGMiwKKzB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDYsIDB4N0MsIDB4NUIsIDB4QjAsIDB4ODgsIDB4QzAsIDB4MTMsIDB4MDAsCisweDVGLCAweDIwLCAweDdDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweEI3LCAweDBELCAweERGLCAweDAwLCAweEZDLCAweDgwLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgyMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhDMiwgMHg0MywKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4N0QsIDB4MDAsIDB4MkYsIDB4MDEsCisweERDLCAweDEzLCAweEYwLCAweDNGLCAweEMwLCAweDRDLCAweDEwLCAweEY3LCAweDAxLCAweERDLCAweDA0LCAweDMwLCAweDFGLAorMHhDOCwgMHg2QywgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMSwgMHgxQiwgMHhEMCwgMHg2RCwgMHgwMCwgMHg3MywKKzB4MDEsIDB4OUQsIDB4MDQsIDB4QjIsIDB4NEYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4REMsIDB4MDUsIDB4MzAsCisweDFGLCAweEMwLCAweDRDLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDAzLCAweDA4LAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwgMHgyNywgMHgwMCwgMHg4NCwKKzB4MEEsIDB4RDAsIDB4OEYsIDB4NDEsIDB4MEMsIDB4MDAsIDB4RTEsIDB4MDAsIDB4RUMsIDB4MDAsIDB4MTIsIDB4NEEsIDB4NDAsCisweDA4LCAweDAyLCAweEUwLCAweDAwLCAweDg0LCAweDEzLCAweEExLCAweDBCLCAweDQwLCAweDM4LCAweDAwLCAweDYxLCAweDA4LAorMHg4NCwgMHgwMiwgMHg1MCwgMHgwRiwgMHg0MCwgMHgzQywgMHgwMiwgMHhBNywgMHgwMCwgMHhDNCwgMHgyMSwgMHgxMiwgMHgwNywKKzB4NDAsIDB4MDgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MkUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweEFELCAweDAwLCAweDk0LCAweDIzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHg4NSwgMHgwMCwgMHg5NCwgMHg0MCwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQywKKzB4MDAsIDB4RTEsIDB4MDgsIDB4ODQsIDB4MDMsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MjksIDB4MDIsIDB4MjEsIDB4MDAsIDB4RDQsCisweDAwLCAweDE0LCAweDJFLCAweDQwLCAweDM4LCAweDAwLCAweDYxLCAweDAwLCAweDk0LCAweDAyLCAweDEwLCAweDA2LCAweDQwLAorMHgwOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MzUsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsCisweDFDLCAweDQwLCAweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAwLCAweDEyLCAweDMxLCAweDQwLCAweDMwLCAweDAwLAorMHhDMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg5MCwgMHgxMCwgMHg0MCwgMHgxMCwgMHgwNCwgMHg0MSwgMHg2MSwgMHgwNCwgMHgwNCwKKzB4NTQsIDB4OUMsIDB4NDQsIDB4MzAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDEzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNSwgMHgwMCwgMHhGRiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgxRiwKKzB4RDAsIDB4MjQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4MUMsIDB4MDQsIDB4MzAsIDB4OEQsIDB4RDUsIDB4NjAsIDB4MDAsIDB4RDMsCisweDBBLCAweENDLCAweDBCLCAweEIwLCAweDgzLCAweEQxLCAweDM5LCAweDQ4LCAweDEzLCAweDEwLCAweDVELCAweDAyLCAweDMwLAorMHgwRCwgMHhDNCwgMHhBNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg1QywgMHgwOSwgMHgzMCwgMHgwRCwgMHhDMCwgMHgwMCwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHgwNywgMHgwMiwgMHhERiwgMHgyMCwgMHg1QywgMHgwOCwgMHhGNCwgMHgyRCwgMHhDMCwgMHhFNywgMHg0MCwgMHhERiwgMHgwOCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDIsIDB4MUYsIDB4MjAsIDB4N0MsIDB4QTIsIDB4NzQsIDB4MEQsCisweEMwLCAweDM3LCAweDAxLCAweEQ3LCAweDQwLCAweDdDLCAweDExLCAweEYwLCAweDJELCAweEMwLCAweDA3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDgsIDB4MUYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsCisweDAwLCAweEIyLCAweDAwLCAweENDLCAweDAwLCAweDMwLCAweDFGLCAweEMwLCAweDJDLCAweDQwLCAweDk3LCAweDAwLCAweDdDLAorMHg0MywgMHgzMiwgMHg1MywgMHhEMCwgMHgyRSwgMHgwMCwgMHgxMywgMHgwMCwgMHhGQywgMHgyMCwgMHgyMCwgMHgxRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEMsIDB4MTAsIDB4NzIsIDB4MDAsCisweEZDLCAweDI3LCAweEYwLCAweDA3LCAweEMwLCAweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MSwgMHgwMCwgMHgwNiwgMHgwOCwgMHgxMSwgMHgwMCwgMHg0NSwgMHgwQiwgMHhEMCwgMHgwRCwgMHhDOCwgMHg0NSwgMHgwMCwKKzB4RDEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4MTAsIDB4QkQsIDB4NDEsIDB4NjQsIDB4MjAsIDB4OTEsIDB4MDgsIDB4MzQsIDB4MDMsCisweDEyLCAweDA5LCAweDQwLCAweDE1LCAweDAwLCAweDExLCAweDAxLCAweDdDLCAweDAwLCAweDUwLCAweDFELCAweDQwLCAweDc3LAorMHgwMCwgMHhERCwgMHgwOSwgMHg0NCwgMHgwNCwgMHhEMCwgMHgzRCwgMHg0OCwgMHhDNCwgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwKKzB4MDUsIDB4RDAsIDB4QkQsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDc2LCAweDAwLCAweDQxLCAweDA4LCAweDQ0LCAweDIzLCAweEQwLCAweDBELCAweDQwLCAweDQ3LCAweDAwLCAweEM1LAorMHgwMCwgMHg0NCwgMHgwQywgMHgxMCwgMHgwRCwgMHg0MCwgMHhFNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMiwKKzB4MDAsIDB4NDEsIDB4MjYsIDB4MDAsIDB4MTEsIDB4MjMsIDB4MzQsIDB4MDAsIDB4RDgsIDB4NEQsIDB4NDAsIDB4MjcsIDB4MDEsCisweERELCAweDAwLCAweDY0LCAweDQ0LCAweEQwLCAweDZDLCAweDQwLCAweDQ0LCAweDgwLCAweEQ1LCAweDAxLCAweDc0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4NzAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4QzUsIDB4MDAsCisweDA0LCAweDgwLCAweDE0LCAweDBDLCAweDUwLCAweDIxLCAweDAwLCAweEMxLCAweDAwLCAweDc0LCAweDgzLCAweDE4LCAweDA4LAorMHg1MCwgMHgzMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDAsIDB4ODAsIDB4ODUsIDB4MDEsIDB4MzQsIDB4MDIsIDB4RDAsCisweDBDLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDM2LAorMHgwMCwgMHg5MywgMHg4MCwgMHg0QywgMHg4MSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMCwgMHhCNywgMHgwMCwgMHg0RCwKKzB4MDAsIDB4MzAsIDB4MEMsIDB4NDQsIDB4MjUsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzEsIDB4MDEsIDB4QzQsCisweDIyLCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweEMyLCAweDJGLCAweDAwLCAweDRGLCAweDQwLAorMHg2QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwKKzB4QzQsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsCisweDNGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEZCLCAweDQwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgyQSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHg0MCwgMHgxRiwKKzB4NDAsIDB4M0YsIDB4MDAsIDB4RDgsIDB4MDAsIDB4NzIsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDBGLCAweEM4LCAweDBGLCAweDA4LCAweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4RkMsIDB4MTMsIDB4MzIsIDB4OEIsIDB4QzIsIDB4MkMsIDB4MDksIDB4RkYsIDB4MDEsIDB4RkMsIDB4NjMsIDB4MzAsCisweDRCLCAweEMyLCAweDdDLCAweDAwLCAweEJGLCAweDA0LCAweENDLCAweDgyLCAweDMwLCAweDJGLCAweEMxLCAweDdDLCAweDAwLAorMHhGMywgMHgwMSwgMHhGQywgMHg0MywgMHgzMCwgMHg0RiwgMHg1MCwgMHgyOCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGRSwgMHgwNywKKzB4QjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjksIDB4MDEsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MEYsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLCAweERELCAweDAxLAorMHhGNCwgMHg2MywgMHgxMCwgMHg4MSwgMHg0NiwgMHhFNCwgMHgwQSwgMHhERCwgMHg0MSwgMHhGNCwgMHgwQiwgMHg1MCwgMHg5MSwKKzB4NDIsIDB4NzQsIDB4MDAsIDB4OUMsIDB4MjIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MkYsIDB4QzQsIDB4MzQsIDB4MDgsIDB4RDUsCisweDIxLCAweEY0LCAweDBGLCAweDQxLCAweDlGLCAweDQwLCAweEM0LCAweDAyLCAweEQxLCAweDAxLCAweDc0LCAweDA3LCAweDEwLAorMHgxNSwgMHg0MCwgMHg3NCwgMHgwMCwgMHhEOSwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHgxRCwgMHg0MCwgMHgwRiwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MjgsIDB4Q0QsIDB4ODAsIDB4MzQsCisweDEzLCAweDAwLCAweDA4LCAweDQ4LCAweDQwLCAweDIwLCAweENELCAweDgwLCAweDMwLCAweDAzLCAweDEyLCAweDEwLCAweDQwLAorMHgzMCwgMHgxMCwgMHgwRCwgMHgxQywgMHgwNCwgMHg3NiwgMHgxMCwgMHg0QywgMHg0MCwgMHgzMywgMHgwNSwgMHhDMSwgMHg0MCwKKzB4MzQsIDB4ODMsIDB4ODAsIDB4MEMsIDB4NDAsIDB4MjAsIDB4MDgsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEQsCisweDQwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDRGLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywKKzB4MTEsIDB4MTEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4REQsIDB4NDAsIDB4NjQsIDB4MDMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MzQsCisweDIwLCAweDA5LCAweDAzLCAweDA0LCAweDA2LCAweDEwLCAweDBELCAweDQ0LCAweDM1LCAweDAwLCAweEQxLCAweDAwLCAweDc0LAorMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgxOSwgMHg0MCwKKzB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4MDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDc0LCAweDAzLCAweDMwLAorMHgzMSwgMHhDMCwgMHg0NCwgMHgwMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHgzMiwgMHgxOSwgMHhDMCwgMHgzNCwgMHgwOCwKKzB4OUYsIDB4MDEsIDB4NEMsIDB4MDQsIDB4MzAsIDB4MEQsIDB4QzYsIDB4MzcsIDB4MDAsIDB4RDEsIDB4ODAsIDB4N0MsIDB4ODMsCisweEEwLCAweDBELCAweEMwLCAweDY0LCAweDAwLCAweEQzLCAweDAwLCAweDc0LCAweDAzLCAweEIwLCAweDNELCAweEMxLCAweDM2LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHg4MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDIsCisweEMwLCAweDA3LCAweDAwLCAweEZGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDAwLCAweDQwLCAweDNGLCAweDAwLCAweDlGLAorMHgyMCwgMHg3QywgMHg4MCwgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGQywgMHgwMywgMHg3MiwKKzB4MEYsIDB4NDAsIDB4MEIsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MEYsIDB4NDAsIDB4M0QsIDB4MDAsCisweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHhBOSwgMHhDMCwKKzB4MDQsIDB4MDAsIDB4RDMsIDB4NjAsIDB4MkMsIDB4NjMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUIsIDB4MjAsCisweDRDLCAweDAwLCAweDMwLCAweDhDLCAweEMwLCAweDM0LCAweDAwLCAweEQyLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDBDLAorMHhDMCwgMHgyNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgyMywgMHhGMSwgMHgyRCwgMHhDMCwgMHgzNywgMHgxMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDMxLCAweDQwLCAweDI0LAorMHgwMCwgMHhEMSwgMHgwMCwgMHhGNCwgMHgwQiwgMHgxMCwgMHgwOSwgMHg0NCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4MTIsIDB4QUYsIDB4NDAsIDB4NzQsIDB4MjAsIDB4RDEsIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDAsCisweDI3LCAweDAwLCAweEQxLCAweDgwLCAweDM0LCAweDBGLCAweEQwLCAweDBDLCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLAorMHhGNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTQsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDAsCisweEMxLCAweDAwLCAweDM0LCAweDBCLCAweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDBELCAweDAwLCAweDA0LCAweDAyLAorMHgxMCwgMHgyQywgMHg0MCwgMHgzNCwgMHgwMiwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywKKzB4MDAsIDB4QzUsIDB4MjAsIDB4MzQsIDB4NEYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgyNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFMSwKKzB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDUsIDB4MTAsCisweDFFLCAweDQwLCAweEY4LCAweDAwLCAweEUxLCAweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDVCLCAweDAwLAorMHhFMSwgMHgwMSwgMHhCMCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MUUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsCisweDMwLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDJELCAweEMwLCAweDEwLCAweDA4LCAweEMzLCAweDA4LAorMHg3QywgMHgwMywgMHgzMCwgMHg0NCwgMHhDMCwgMHgzMCwgMHgwMiwgMHg0RiwgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwgMHg4RCwKKzB4RTAsIDB4MzQsIDB4MDAsIDB4QzMsIDB4MDgsIDB4N0MsIDB4MjMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MTMsIDB4MDAsIDB4QzcsCisweDAwLCAweDNDLCAweDAzLCAweEYxLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweEYwLAorMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzNSwKKzB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEIsIDB4QzAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NzQsCisweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDIwLCAweERFLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDJELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwOCwgMHg3QywgMHg4MywgMHhCNCwgMHgwRCwgMHhDMSwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHhCMywgMHgzMCwgMHgxNSwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg0QiwKKzB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MjgsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4QUQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDUzLCAweEYwLCAweDFELCAweEM0LCAweDM0LCAweDEwLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsCisweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDEzLCAweEQwLAorMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMywgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MUIsIDB4RDAsIDB4NEUsIDB4NDEsIDB4MTgsIDB4MDgsIDB4RTEsIDB4ODAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDBCLCAweEQwLCAweDBFLCAweDQwLCAweDRGLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4QjAsIDB4MTcsIDB4MTAsIDB4MUMsIDB4NTEsIDB4NTgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MjcsIDB4RDAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweDZELCAweDIxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQywgMHg0MCwgMHg3MCwgMHg0MCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDEsIDB4N0IsIDB4ODAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4MTMsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDc0LAorMHg4MywgMHgxMCwgMHgzQywgMHg0NSwgMHhGMCwgMHgwMiwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEOCwgMHhCQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4REQsIDB4MDEsIDB4MzQsIDB4MkIsIDB4RDEsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEQxLCAweDgwLCAweDM0LCAweDAzLCAweEQwLCAweDdDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg2MCwgMHg1QiwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4QzAsIDB4N0MsIDB4MDEsCisweDMwLCAweDE3LCAweEMwLCAweERDLCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDE3LCAweEMwLCAweDE3LAorMHgwMCwgMHg3RiwgMHgwNSwgMHhGQywgMHgyNSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NTgsIDB4MDEsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MzcsIDB4QzAsCisweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDVGLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGNCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDYsIDB4MTAsCisweDFGLCAweDQxLCAweDdDLCAweDAwLCAweEUwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhEMCwgMHhDNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDU5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4OTksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MTksIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc2LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLAorMHg0NCwgMHgwMiwgMHhEMCwgMHg2OSwgMHhDMCwgMHhBNCwgMHgwMSwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4QTcsIDB4MTIsIDB4OTEsIDB4NDAsIDB4MEMsIDB4OUEsIDB4MTEsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OUQsIDB4NDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NDQsCisweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDBBLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHhBNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDU4LCAweDQwLCAweDIzLCAweDAxLAorMHg4RCwgMHg0MCwgMHgzNCwgMHgxNiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHg0NCwgMHgwNCwgMHgxMiwKKzB4RDAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MTIsIDB4RDgsIDB4NDgsIDB4NDAsIDB4MjMsCisweDAxLCAweDkxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4M0MsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAwLCAweDc0LCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDBBLCAweDRELCAweDI4LCAweEYxLAorMHhBMSwgMHg0MCwgMHg4NCwgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MTcsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGNCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwQSwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4ODksCisweEQwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweDlGLAorMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NzcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDFFLCAweEYwLCAweERCLCAweEMwLCAweDY3LCAweDAxLCAweDlGLCAweDAwLCAweEZDLAorMHgzNiwgMHgzNCwgMHg1OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNywgMHg0QywgMHgxRSwgMHhGMSwgMHg3QiwgMHhEMCwKKzB4QUMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4NTksIDB4QzAsIDB4NkYsIDB4MDEsIDB4OUIsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NzQsIDB4M0MsIDB4RDAsIDB4RjUsIDB4NDIsIDB4ODcsIDB4MDIsIDB4MUQsIDB4MDAsIDB4NzQsIDB4M0MsCisweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDA1LCAweDQ0LCAweDFELCAweEQwLCAweDcxLCAweDQwLCAweDQ0LAorMHgwMSwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwOCwgMHhEMCwgMHgyMSwgMHg0MCwgMHg5NywgMHgwMiwgMHgxMSwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MjAsIDB4RDAsIDB4MDEsIDB4NDAsCisweDYzLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELAorMHgwMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwKKzB4MjgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDYsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MjgsIDB4NDAsIDB4MjAsIDB4MDAsCisweDhELCAweDAwLCAweDM0LCAweDBBLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDg5LCAweDAwLCAweDM0LCAweDAyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0QiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweEQwLCAweDQ5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDY5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4ODAsIDB4NzQsIDB4ODIsIDB4RDAsCisweDg5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MTYsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MzksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDA4LCAweDRDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyMywgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwKKzB4NDEsIDB4MjcsIDB4MjAsIDB4OUQsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4ODAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OEYsIDB4MDAsIDB4N0QsIDB4MTYsIDB4RjEsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweENBLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDIxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEM0LCAweDA3LCAweDAwLAorMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg4MCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDQsIDB4MTcsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjIsIDB4MjEsIDB4QzAsIDB4MDQsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgyNywKKzB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjQsIDB4MTksIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsCisweDAwLCAweDc0LCAweDAxLCAweEQwLCAweEM3LCAweDQwLCAweDlGLCAweDgzLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLAorMHgwNSwgMHg0MCwgMHg1RiwgMHgwMSwgMHg1MSwgMHgwMCwgMHhGNCwgMHgwMSwgMHg3MCwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwKKzB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDJDLCAweDQxLAorMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHg0NywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MkMsIDB4NDAsIDB4RjMsIDB4MDAsIDB4Q0QsIDB4NDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDUzLCAweDA4LCAweEM1LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDA0LCAweEI0LAorMHgxMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MUIsIDB4MDAsIDB4RTEsIDB4NDAsIDB4QjQsIDB4MDksIDB4NTAsIDB4MEYsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsCisweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQyLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgxNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwOCwKKzB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzIsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MEQsIDB4QkMsIDB4MzcsCisweEYwLCAweDE2LCAweEMwLCAweDdCLCAweDAwLCAweEVELCAweDQxLCAweEJDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDVCLAorMHgwMCwgMHhFNywgMHgwMSwgMHhCQywgMHgwNCwgMHhGMCwgMHgwRSwgMHhDNCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCQywKKzB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEI4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDUzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwOCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MDUsIDB4QzQsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MTMsIDB4MTAsCisweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEM4LCAweDM3LCAweDA4LCAweERGLCAweDAwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwKKzB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4NjMsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksCisweEZDLCAweDI3LCAweEYzLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDgxLCAweEY4LCAweDQ3LCAweDMwLCAweDFGLAorMHg0OCwgMHg1RiwgMHgwMiwgMHhGRSwgMHgyMSwgMHhGQywgMHgwNywgMHhEMCwgMHg5RiwgMHg4MCwgMHg1RCwgMHgwMCwgMHhGMywKKzB4MDksIDB4RkMsIDB4MjcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RkYsIDB4MDksIDB4RkMsIDB4MDcsIDB4RjAsCisweDFGLCAweEMwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4NiwgMHg0MSwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MDEsIDB4QzAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4MTQsIDB4OEUsIDB4NDAsCisweDFBLCAweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBGLCAweDQyLCAweDFDLCAweDA1LCAweEU1LCAweDA4LAorMHhCNCwgMHgwOSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4RSwKKzB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDIzLCAweDU4LCAweDA2LCAweDQwLCAweDNCLCAweDA2LCAweEVELCAweDgwLCAweEIwLCAweDAzLAorMHhEMSwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDQsIDB4M0QsIDB4MDAsIDB4RTUsIDB4NDAsIDB4QjQsCisweDgxLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDIwLCAweEVELCAweDQwLCAweEI0LCAweDIzLCAweEQwLCAweDBFLCAweDQwLAorMHgyMywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MDAsIDB4OTAsCisweDFDLCAweDQwLCAweDM3LCAweDEwLCAweENELCAweDAyLCAweDc0LCAweDI3LCAweDEwLCAweDA4LCAweDA4LCAweDAyLCAweDAwLAorMHhDOSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhDNSwgMHg0MCwgMHgzNCwgMHgwMSwKKzB4RDEsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MEIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLAorMHhGQywgMHgwMywgMHg3MCwgMHgxOSwgMHhDMCwgMHg3NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgyRCwKKzB4QzMsIDB4MzcsIDB4MDAsIDB4RkYsIDB4NDQsIDB4RkMsIDB4MDMsIDB4MzEsIDB4MDksIDB4ODAsIDB4MjcsIDB4MTAsIDB4REUsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQ1LCAweDAwLCAweEQ3LCAweDQwLCAweDc4LCAweDAxLCAweEQwLAorMHgwRCwgMHhDMSwgMHgzNywgMHgxMCwgMHhERCwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDQ5LCAweEM0LCAweDM3LCAweDA0LCAweERGLCAweDIwLCAweDdDLCAweDBBLCAweEYwLCAweDBELCAweEM4LAorMHgzNywgMHgxMCwgMHhERiwgMHgxMCwgMHg3QywgMHg0MywgMHhGMCwgMHgyOSwgMHhDNCwgMHgyNiwgMHgyMCwgMHhEQiwgMHg4MCwKKzB4N0MsIDB4MDMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4ODcsIDB4MDQsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDksIDB4RjEsIDB4NEQsCisweEMwLCAweDM3LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywKKzB4RjAsIDB4MDMsIDB4QzAsIDB4M0IsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDAsIDB4MzAsIDB4MEYsIDB4QzEsIDB4M0YsCisweDA4LCAweEYzLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEJDLAorMHgwMywgMHgzNCwgMHgwRiwgMHhDMCwgMHg1RiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHgwNSwgMHhEMCwgMHgwRiwgMHhDNCwKKzB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzQsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQwLAorMHg3OSwgMHg0OCwgMHgzNywgMHgzMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgxQywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MzEsIDB4NDAsIDB4NjcsIDB4MDQsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsCisweDEwLCAweDBELCAweDQwLCAweDE3LCAweDAxLCAweERELCAweDQwLCAweDc0LCAweDhELCAweEQwLCAweDBDLCAweDQ4LCAweDM0LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0OCwgMHg4NywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksCisweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDA2LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDQwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgxMSwgMHg0OCwgMHg0NywgMHgyMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwKKzB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4REMsIDB4MDAsIDB4NzQsIDB4MTEsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MzUsIDB4MDAsCisweERELCAweDQwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMiwgMHgwOCwgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDIsIDB4MTUsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MjAsIDB4QzEsIDB4QzAsCisweDM0LCAweDAzLCAweDE0LCAweDA4LCAweDQ0LCAweDAzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHgxMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMSwgMHhEMCwgMHgwRCwgMHg0NCwgMHgzMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDgsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEIwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDAxLCAweEM0LCAweDM3LAorMHg0MCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywKKzB4MDMsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsCisweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEY4LCAweDBELCAweEMwLCAweDM1LCAweDgwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4NDAsIDB4M0YsIDB4MjAsCisweEZGLCAweEMwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDgzLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGOCwgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgxRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MjAsIDB4RkMsCisweDAzLCAweEYyLCAweDBGLCAweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHg3RiwgMHgwMCwgMHhCMywgMHgwMiwgMHhDRCwgMHgyNywgMHgzMCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwNSwgMHgzRiwKKzB4MDQsIDB4RkMsIDB4MDcsIDB4MzAsIDB4NDcsIDB4QzgsIDB4M0YsIDB4MDUsIDB4RkYsIDB4MDQsIDB4QkMsIDB4RDMsIDB4MzAsCisweDlCLCAweEMwLCAweDJDLCAweDAxLCAweDIzLCAweDg5LCAweENDLCAweDEyLCAweEYwLCAweDAzLCAweEM4LCAweDJDLCAweDAyLAorMHgzMywgMHgwNCwgMHhGQywgMHgwNywgMHhGMCwgMHgwRiwgMHhDMCwgMHg3QywgMHgxOCwgMHhCMywgMHgwMCwgMHhDQywgMHgwNCwKKzB4RjAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsCisweDM3LCAweDExLCAweDkxLCAweDAyLCAweDQ0LCAweDAzLCAweDEwLCAweDFCLCAweDUwLCAweDg0LCAweDEwLCAweDFELCAweDBCLAorMHg3NCwgMHgwNywgMHgxNCwgMHhCRCwgMHg0MCwgMHhGNywgMHgwMCwgMHhGRCwgMHg0OSwgMHhGNCwgMHgwRiwgMHgxMiwgMHg0OCwKKzB4NTAsIDB4RkMsIDB4NDAsIDB4MTEsIDB4ODQsIDB4NDQsIDB4NEEsIDB4RDAsIDB4MzEsIDB4NDQsIDB4QUMsIDB4MjMsIDB4MTMsCisweDBBLCAweDc0LCAweDAzLCAweEQxLCAweDA0LCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAzLCAweDQ1LCAweDA1LCAweEQwLAorMHgxRCwgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywKKzB4MDQsIDB4OTEsIDB4OEMsIDB4MzQsIDB4MTMsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsCisweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLAorMHhBMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwNCwgMHgwQSwgMHhEMiwgMHgyMSwgMHg0MCwgMHgyMCwgMHg0MSwgMHg4MSwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDgsIDB4MDgsIDB4NjAsIDB4MzIsIDB4MTAsIDB4QzEsIDB4ODIsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsCisweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDQwLAorMHg5MSwgMHgwMSwgMHg2NCwgMHgwMywgMHgxMCwgMHg4OSwgMHg0MCwgMHg2NCwgMHgwMCwgMHgxQywgMHgxMSwgMHg3NCwgMHgwMywKKzB4MTAsIDB4MUQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MDksIDB4NDAsIDB4MzQsCisweDAwLCAweDE1LCAweDAxLCAweDQ1LCAweDQyLCAweEQwLCAweDQ5LCAweDQwLCAweDIwLCAweEMyLCAweDkxLCAweDAzLCAweDc0LAorMHgwMywgMHhEMCwgMHgwRCwgMHg1MCwgMHgzNiwgMHg0MCwgMHhEMSwgMHgwMSwgMHg0NiwgMHgwNywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4ODMsCisweDAxLCAweDZDLCAweDAzLCAweDMwLCAweDA4LCAweEMwLCAweDQ0LCAweDIwLCAweDFFLCAweDAxLCAweDdDLCAweDAzLCAweDMwLAorMHgzRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHhDMCwgMHg3QywgMHgwMywgMHgzMCwgMHg5OSwgMHhDMCwgMHgyNCwgMHgwMiwKKzB4MTcsIDB4ODEsIDB4NEMsIDB4MDIsIDB4RjEsIDB4MDAsIDB4RDAsIDB4MjQsIDB4MDAsIDB4MTMsIDB4MDEsIDB4N0MsIDB4MDMsCisweEYwLCAweDBELCAweEUwLCAweDM2LCAweDAwLCAweDkzLCAweDAxLCAweDRDLCAweDA0LCAweEYyLCAweDBELCAweEMyLCAweDBCLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4REMsIDB4MDMsIDB4RjAsIDB4MTksIDB4QzAsIDB4MEYsIDB4MTAsIDB4M0YsIDB4MDAsIDB4RjQsIDB4MDMsIDB4RjEsIDB4MEQsCisweEMwLCAweDdGLCAweDEyLCAweEZGLCAweDEwLCAweEJDLCAweDAzLCAweEMwLCAweDBCLCAweEMwLCAweDdGLCAweDIwLCAweDNCLAorMHgwMCwgMHhGOCwgMHgyNiwgMHhFMSwgMHgwMywgMHhDMCwgMHgyNywgMHgwMCwgMHgxNCwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4NUYsIDB4QzAsIDB4QkQsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4ODEsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweDkzLCAweDA0LCAweDRDLAorMHgxMywgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNCwgMHgwMCwgMHgxMywgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4REYsIDB4NDAsIDB4NEMsIDB4MDMsIDB4QjAsIDB4MDksIDB4QzgsIDB4MjAsIDB4NDAsIDB4MTMsIDB4MDIsCisweDZDLCAweDBFLCAweEIwLCAweDAzLCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDA2LCAweDZDLCAweDAzLCAweEQwLCAweDA4LAorMHhDMCwgMHgzNCwgMHg4MCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEIsCisweEQwLCAweDA5LCAweDUwLCAweDY0LCAweDA4LCAweDkxLCAweDAwLCAweDM0LCAweDJCLCAweEQwLCAweDBELCAweDQwLCAweEI0LAorMHgwMiwgMHhGRCwgMHgwNiwgMHhDNSwgMHg2RiwgMHgxMCwgMHg0OSwgMHg1NCwgMHhCNCwgMHgwMywgMHgxMCwgMHgyNCwgMHg0NCwKKzB4MDYsIDB4MTAsIDB4QjksIDB4NDUsIDB4MzcsIDB4MDAsIDB4OTEsIDB4ODMsIDB4NDQsIDB4MDMsIDB4RDEsIDB4QUQsIDB4NDAsCisweEI0LCAweDAyLCAweERELCAweDAwLCAweDc0LCAweDQ3LCAweDEwLCAweDFELCAweDQzLCAweDRGLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHg3MiwgMHgwMCwgMHhDMSwgMHgwMiwgMHg0NCwgMHg4QiwgMHhEMCwKKzB4NjgsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MTIsIDB4MjAsCisweENELCAweDAyLCAweDA0LCAweDAzLCAweDkwLCAweDA5LCAweDQ4LCAweEYwLCAweDEwLCAweDExLCAweDIwLCAweDA0LCAweDRBLAorMHg5MiwgMHgxMCwgMHg0MCwgMHgyMywgMHgyMCwgMHgwOSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzNiwKKzB4MTAsIDB4QzUsIDB4MDgsIDB4MzQsIDB4MDQsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDQwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDlFLAorMHg0MCwgMHg2OCwgMHgwNCwgMHgyNSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMSwgMHgxQSwgMHg1MCwgMHg1OCwgMHgwMCwgMHhDRCwKKzB4ODksIDB4ODQsIDB4MDcsIDB4MTAsIDB4OUEsIDB4NDAsIDB4NzgsIDB4MDAsIDB4MzEsIDB4MjksIDB4ODUsIDB4MDQsIDB4MTAsCisweDEyLCAweDQwLCAweDZCLCAweDA4LCAweEE5LCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDE2LCAweDUwLCAweDdBLCAweDgwLAorMHhFRCwgMHg0MSwgMHhCNCwgMHgwNSwgMHgxMCwgMHgxRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDQsIDB4NTMsIDB4MDAsIDB4MEUsIDB4MDMsIDB4RjAsIDB4MDgsIDB4RDAsCisweEE0LCAweDQwLCAweDA3LCAweDA4LCAweDNDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAyLCAweENGLCAweDAwLAorMHgwQywgMHgwMywgMHhCMCwgMHgwOCwgMHhDMCwgMHgzMCwgMHgwMCwgMHgwMywgMHg0QSwgMHg2QywgMHgwMiwgMHhCMCwgMHgwMCwKKzB4QzAsIDB4MzMsIDB4NDEsIDB4Q0IsIDB4MTAsIDB4MkMsIDB4MjMsIDB4RjAsIDB4MEMsIDB4RDAsIDB4MzIsIDB4MDIsIDB4Q0YsCisweDAwLCAweDNDLCAweDAwLCAweDM0LCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhCOCwgMHgzOSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGRCwgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwKKzB4MTAsIDB4N0IsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjgsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDBCLCAweEM0LCAweDNCLCAweDAwLCAweDNGLCAweDI4LCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGNywgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwRiwgMHhEMCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwOCwKKzB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDQ5LCAweEQwLCAweDJDLCAweDAwLAorMHgzMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwNCwgMHg1QywgMHg0RiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4QjUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjIsIDB4MDEsIDB4QzAsIDB4QTcsCisweDAxLCAweEQzLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4ODgsIDB4MzksIDB4MDAsIDB4QUQsIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4OEMsIDB4NDQsIDB4MjgsIDB4MDAsIDB4MkIsCisweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweENELCAweDBFLCAweDA0LCAweDAzLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzMCwgMHgwMiwgMHg2MSwgMHgwMCwgMHg4NiwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0NCwgMHgyMywgMHgwNCwKKzB4RjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MTAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsCisweEQwLCAweDBFLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLAorMHg3OSwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwgMHg2MCwgMHgwMCwgMHhBMSwgMHg0MSwKKzB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDUsIDB4OTQsIDB4MzcsIDB4MTAsIDB4M0IsCisweDQwLCAweDc5LCAweDA4LCAweDI5LCAweDExLCAweDg0LCAweDA2LCAweEQwLCAweDEyLCAweDQwLCAweEZCLCAweDAwLCAweEUxLAorMHg4MSwgMHg5NCwgMHg4NywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNSwgMHhEMCwKKzB4MUUsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsCisweDEwLCAweDhELCAweDA5LCAweDM0LCAweDAzLCAweEQwLCAweDlDLCAweDUwLCAweDcwLCAweDAwLCAweEM5LCAweDA2LCAweDM0LAorMHgwMywgMHhEMCwgMHgzQywgMHg0MCwgMHhCMywgMHgwNCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxNCwgMHgxQywgMHg0MCwKKzB4MzAsIDB4QzAsIDB4OTksIDB4MDYsIDB4MDUsIDB4MDEsIDB4RDEsIDB4MEMsIDB4NDQsIDB4NzMsIDB4MjAsIDB4QzEsIDB4MDMsCisweDA0LCAweDAzLCAweEQxLCAweDBELCAweDQxLCAweDYzLCAweDAwLCAweENELCAweDA2LCAweDM0LCAweDA3LCAweEQwLCAweDBDLAorMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwKKzB4N0YsIDB4MDIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4NTgsIDB4MDEsIDB4NzMsIDB4MDIsIDB4N0MsIDB4MDEsCisweEYwLCAweDE2LCAweEMwLCAweDlGLCAweDEwLCAweDVGLCAweDAwLCAweDVDLCAweDAxLCAweDMwLCAweDA0LCAweEM0LCAweDE1LAorMHgwMCwgMHg3QiwgMHgwMCwgMHhDQywgMHg0NSwgMHhGMSwgMHgwNywgMHhDMCwgMHgxNywgMHg0OCwgMHg3MywgMHgwNSwgMHg1QywKKzB4MDEsIDB4RjAsIDB4MjcsIDB4QzAsIDB4NTcsIDB4MDAsIDB4N0YsIDB4MDIsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MDUsIDB4QzAsCisweDVGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHgwNywgMHgxMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDE3LCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDEwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgxMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MTEsCisweDRDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMSwgMHgyMCwgMHgwMCwgMHg4MywgMHgwMCwgMHg2RCwgMHgwRSwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyMCwgMHgwMCwgMHg5MSwKKzB4NDAsIDB4NEMsIDB4MDIsIDB4MTAsIDB4ODksIDB4QzAsIDB4MjQsIDB4MDAsIDB4ODMsIDB4MDgsIDB4NEMsIDB4MDIsIDB4RjAsCisweDE5LCAweEMwLCAweDY0LCAweDAxLCAweDkwLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDE5LCAweEMwLCAweDQzLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhBNiwgMHgwMiwgMHg5MSwgMHgwMSwgMHg0NCwKKzB4MDYsIDB4RDAsIDB4MzksIDB4NDEsIDB4NjQsIDB4MTAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NTAsCisweDI0LCAweDQwLCAweDkxLCAweDQwLCAweDQ0LCAweDAyLCAweEQwLCAweDE5LCAweDQ0LCAweEU0LCAweDQwLCAweDkxLCAweDAxLAorMHgwNCwgMHgwMiwgMHgxNSwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5QiwgMHgwMywgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwKKzB4NDAsIDB4MjAsIDB4MjAsIDB4OTEsIDB4MDksIDB4MzQsIDB4MDIsIDB4MTAsIDB4MTksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDIwLCAweDQ0LCAweEMxLCAweDA0LCAweDQ1LCAweDAyLAorMHhEMCwgMHg0OSwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg1MCwgMHgzNCwKKzB4MTAsIDB4OTksIDB4MDAsIDB4NjUsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDEsIDB4OTUsIDB4MDQsIDB4NDQsCisweDEyLCAweDUxLCAweDI5LCAweDUwLCAweDI0LCAweDIwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDQ5LCAweDUwLAorMHgyNCwgMHg0MCwgMHhERCwgMHg4MCwgMHg3NCwgMHgxMiwgMHgxMCwgMHg4OSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MDIsIDB4RDAsCisweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDgxLCAweDA0LCAweDM0LCAweDAyLCAweEQwLCAweDQ5LCAweDQwLCAweDIwLCAweDAxLAorMHg4OSwgMHgwNCwgMHgwNCwgMHgxMywgMHhEMCwgMHgwOCwgMHg0MCwgMHg2MCwgMHg4MSwgMHg4NSwgMHgyMCwgMHg0NiwgMHgxMiwKKzB4NTAsIDB4NDgsIDB4NDAsIDB4MjQsIDB4MDEsIDB4QzksIDB4MDQsIDB4MDQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjQsCisweDAwLCAweDhELCAweDA0LCAweDc0LCAweDAyLCAweDE0LCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMiwgMHgxMywgMHgwQSwgMHg0QywgMHgyOSwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUIsCisweDAwLCAweDZDLCAweDAwLCAweEQyLCAweEExLCAweEMwLCAweDA0LCAweDIwLCAweDA3LCAweDJBLCAweDRDLCAweDI4LCAweDcwLAorMHgwMSwgMHhEMCwgMHg4NCwgMHg0MiwgMHgxMywgMHgwQSwgMHg0RCwgMHgyOCwgMHhGMCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDAwLCAweEJGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDhCLCAweEQwLAorMHgyRiwgMHg0MiwgMHhCRiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4QiwgMHhEMCwgMHgyRiwgMHgwMiwgMHg5NywgMHgwOCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4MEEsIDB4RDAsIDB4MkYsIDB4MjIsIDB4QkIsIDB4MDAsIDB4RkQsIDB4MjIsIDB4QjAsIDB4OEIsCisweEQwLCAweDJGLCAweDAyLCAweEJGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDJGLCAweDEwLCAweEIzLAorMHgwOCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QjcsIDB4MEMsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkMsCisweDAyLCAweEIzLCAweDA0LCAweDNDLCAweDAyLCAweEYwLCAweDQ5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAxLCAweENDLAorMHgxNiwgMHgzMCwgMHgwQSwgMHhDMCwgMHg2QywgMHgyOCwgMHhCRiwgMHgwMCwgMHhDQywgMHgxRSwgMHgzMCwgMHg1QiwgMHhDMCwKKzB4NkYsIDB4NDEsIDB4QjMsIDB4MDUsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4Q0IsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHgwOCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwQywgMHg2QywgMHg0MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMiwKKzB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4ODEsIDB4NDAsIDB4ODQsIDB4MTAsIDB4M0QsIDB4MDIsIDB4NDUsIDB4MDgsCisweEIwLCAweDUxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDE1LCAweDQ1LCAweDE0LCAweDEwLCAweDAxLCAweDQwLCAweEMzLAorMHgxNSwgMHgxMSwgMHgxNCwgMHg0NCwgMHgxMCwgMHhEMSwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweDIzLCAweDA1LCAweDg1LCAweDA0LCAweDA0LCAweDEyLCAweEQwLCAweDg4LCAweDQwLCAweDcwLCAweDYwLCAweDgxLAorMHgwOCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgxQSwgMHg1MCwgMHg2QSwgMHgwMiwgMHhBRCwgMHgwMiwgMHgwNCwgMHgyMiwgMHgxMCwKKzB4MDgsIDB4NjEsIDB4QTAsIDB4MDAsIDB4OEQsIDB4ODEsIDB4MDQsIDB4MUEsIDB4OTAsIDB4MzgsIDB4NDAsIDB4MjMsIDB4NDIsCisweDgxLCAweDA2LCAweDA0LCAweDUyLCAweEQxLCAweDU4LCAweDQwLCAweDIwLCAweDQxLCAweEMxLCAweDA4LCAweDM0LCAweDA2LAorMHhEMCwgMHgwQywgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjEsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4ODksIDB4MTAsIDB4MjAsIDB4MDEsIDB4OTEsIDB4MDQsCisweDc0LCAweDAyLCAweEQwLCAweDBCLCAweDQwLCAweDJFLCAweDAxLCAweEJELCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LAorMHg2MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHg0MCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwgMHg5MSwKKzB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MzAsIDB4MDAsIDB4OTEsIDB4MTEsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDYwLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LAorMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwNSwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4RDAsCisweDI0LCAweDIwLCAweDlGLCAweDAyLCAweDRDLCAweDA2LCAweEIwLCAweDI5LCAweEUwLCAweDY3LCAweDAyLCAweDkzLCAweDA0LAorMHg0RCwgMHgwMiwgMHhGMCwgMHgxOSwgMHhEMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMywgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwKKzB4RDAsIDB4MTQsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDAxLCAweDdDLCAweDAyLAorMHhGMCwgMHg5OCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4MEUsIDB4NzAsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDM5LCAweEMwLCAweEU3LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLAorMHg1MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgwRiwKKzB4MDMsIDB4NEQsIDB4MDQsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsCisweDExLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDJDLCAweDAwLCAweEY4LCAweDAxLCAweEMxLCAweDA2LCAweDA0LAorMHgxMywgMHgwMCwgMHgwQywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMiwgMHgxMywgMHgwMiwgMHg3QywgMHgwMCwKKzB4RjAsIDB4NDEsIDB4QzAsIDB4NDQsIDB4MDIsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweERDLCAweDAwLCAweDdELCAweDAxLAorMHhDNCwgMHgxNSwgMHg3MCwgMHgxNiwgMHg0MCwgMHg5QywgMHgwMCwgMHg1MSwgMHgwMSwgMHg3NCwgMHgwMSwgMHgxNCwgMHgwNSwKKzB4NDAsIDB4NTcsIDB4MDAsIDB4NDEsIDB4MDAsIDB4QzQsIDB4NDEsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MUMsIDB4MjAsIDB4NTEsCisweDA0LCAweEM0LCAweDA5LCAweEQxLCAweDU3LCAweDQwLCAweDE0LCAweDEwLCAweDdCLCAweDAwLCAweDc0LCAweDAxLCAweEQwLAorMHgzNywgMHg0MCwgMHgxQywgMHgwMCwgMHg1MSwgMHgwMCwgMHg0NSwgMHgwMSwgMHhEMCwgMHgwNCwgMHg0MCwgMHg1MywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RTIsIDB4MDQsIDB4Q0QsIDB4MDEsIDB4MDQsCisweDAzLCAweDUwLCAweDFDLCAweDQwLCAweEIxLCAweDA0LCAweDgxLCAweDAxLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLAorMHg3MywgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgxMywgMHhEMCwgMHgyRCwgMHg0MCwgMHg3MiwgMHgwMCwgMHhEMSwgMHg0MCwKKzB4MDQsIDB4MkEsIDB4NTgsIDB4N0MsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MzQsIDB4MjcsIDB4RDAsIDB4MEQsCisweDQwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDUzLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwNCwgMHhGRCwgMHgxMCwgMHg4NCwgMHgwMywKKzB4NTAsIDB4MDYsIDB4NDEsIDB4MjksIDB4MDEsIDB4QTEsIDB4MTAsIDB4QjQsIDB4MDUsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NTMsCisweDA0LCAweDAxLCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDBCLCAweDQwLCAweDRBLCAweEM0LCAweEExLCAweDAwLCAweDg0LAorMHgwNSwgMHhEMCwgMHgxMiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgyRSwgMHg0MCwKKzB4MzgsIDB4MDAsIDB4QzEsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDY4LCAweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA3LCAweDcwLAorMHgxMCwgMHhDMCwgMHhGRCwgMHg0MCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHg0MCwKKzB4RTMsIDB4MDEsIDB4QUMsIDB4MDQsIDB4RDAsIDB4MUEsIDB4QzAsIDB4NDIsIDB4MDAsIDB4QTMsIDB4MDEsIDB4OEQsIDB4MDIsCisweDc4LCAweDEwLCAweEMwLCAweDc4LCAweDA0LCAweEUzLCAweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLAorMHgwMCwgMHhFMSwgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxQSwgMHhDMCwgMHg1NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MjUsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDEsCisweEQwLCAweDI2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwNSwgMHgwMCwgMHg4RiwgMHgwMiwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4RDAsIDB4QjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MzcsIDB4NTAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg2QiwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgyMywgMHhCNCwgMHgxMywgMHhDMCwKKzB4NkMsIDB4MjAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDEsCisweEJDLCAweDA0LCAweDMwLCAweDFGLCAweEQwLCAweDRELCAweDAwLCAweEYzLCAweDAzLCAweENDLCAweDI0LCAweEYwLCAweDEzLAorMHhDMCwgMHg3RiwgMHgwOCwgMHhGMywgMHgwMSwgMHhEQywgMHgwNiwgMHgzMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgxMCwgMHhGMywKKzB4ODEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDgwLCAweEI5LCAweDAwLCAweDcxLCAweDAyLCAweDg0LCAweDAzLCAweDEwLCAweDAyLCAweDQwLCAweDI4LAorMHgwMCwgMHhFMSwgMHgwMCwgMHhBQywgMHgwMSwgMHhDMCwgMHgwNiwgMHhDMCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDgsIDB4MDAsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDEsIDB4QTUsIDB4MDQsIDB4OTQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4QzAsCisweDM5LCAweDAwLCAweEU1LCAweDAyLCAweEM0LCAweDAyLCAweDUwLCAweDBFLCAweDQwLCAweDFDLCAweDAwLCAweEUxLCAweDE0LAorMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MjIsIDB4MTgsIDB4MDIsIDB4NDEsIDB4MzgsIDB4MDAsCisweEExLCAweDEwLCAweDg0LCAweDAzLCAweEQwLCAweDI2LCAweDQwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDk0LCAweDAwLAorMHgxMCwgMHgwQSwgMHg0NSwgMHgwOSwgMHgyMCwgMHhFMSwgMHg4MCwgMHg4NCwgMHgwOCwgMHhEOCwgMHgwMiwgMHg0MCwgMHgzMywKKzB4MDAsIDB4RTEsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsCisweDBCLCAweEQwLCAweDBFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyOCwgMHgxMywgMHgwMCwgMHg0MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwMCwgMHg0MCwgMHgyMCwgMHgwMiwgMHg4MSwKKzB4MDEsIDB4MjQsIDB4MDEsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTQsCisweDE4LCAweDQwLCAweDQwLCAweDBBLCAweDgxLCAweDUzLCAweDE0LCAweDA0LCAweEQwLCAweDMwLCAweDQwLCAweDMxLCAweDIwLAorMHhDNSwgMHgwMiwgMHgwNCwgMHgwMiwgMHg1MCwgMHgyQywgMHg0MCwgMHg1MCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgyMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsCisweDIxLCAweDAwLCAweEQzLCAweDAyLCAweDRDLCAweDAzLCAweDM0LCAweDAxLCAweEQwLCAweDFDLCAweDUwLCAweDgzLCAweDAzLAorMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg3NCwgMHg0MCwgMHhEMywgMHgwMCwgMHg1QywgMHgwMCwgMHgzMCwgMHgxRCwKKzB4QzgsIDB4NDUsIDB4RTAsIDB4OTMsIDB4MDUsIDB4MEMsIDB4MTIsIDB4RjAsIDB4NjksIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsCisweDAyLCAweDVDLCAweDAyLCAweDMxLCAweDBELCAweEM0LCAweDc0LCAweDI0LCAweEQzLCAweDgwLCAweDdDLCAweDA3LCAweEYwLAorMHgwRCwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhBNywKKzB4NDAsIDB4REYsIDB4NDIsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4OTcsIDB4MDgsIDB4OUYsIDB4MTAsIDB4NUMsCisweDAwLCAweEYwLCAweDA5LCAweEMwLCAweDUxLCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDA4LCAweEYwLCAweDBELCAweEMwLAorMHg4MywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4NzUsIDB4RDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsCisweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDZGLCAweDIxLAorMHhCMywgMHg5MCwgMHhDQywgMHgwMywgMHgzMCwgMHgwMCwgMHhDMCwgMHgxQywgMHgwMCwgMHhERiwgMHgwMCwgMHhDQywgMHgwNiwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4OEMsIDB4MDQsIDB4MzAsIDB4NEIsIDB4QzgsIDB4MDQsCisweDAwLCAweEJELCAweDA1LCAweEZDLCAweDAyLCAweDEwLCAweDAzLCAweEMxLCAweDdCLCAweDAwLCAweDMzLCAweDE5LCAweENDLAorMHgwMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyQywgMHgwMCwgMHhGMSwgMHgxMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RTYsIDB4NDAsIDB4OTEsCisweDAyLCAweDQ0LCAweDA3LCAweDEwLCAweDExLCAweDQwLCAweDk0LCAweDAyLCAweERELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLAorMHgwOCwgMHg0MCwgMHgxNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHg0OSwgMHg0MCwgMHhDNCwgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NjQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MzcsIDB4MTIsIDB4RDUsIDB4MDMsIDB4NDQsIDB4MDYsCisweEQwLCAweDExLCAweDUwLCAweEE0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA3LAorMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyNiwgMHgwMCwgMHhDMSwgMHgwMSwKKzB4NDQsIDB4MDcsIDB4OTIsIDB4MTEsIDB4NDAsIDB4QTQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MjIsIDB4NTAsIDB4MTEsCisweDQwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDIwLCAweDE0LCAweDA0LCAweDQwLCAweDQ0LCAweDA0LCAweDkxLAorMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0NCwgMHgyNywgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgxMiwgMHhEMCwKKzB4NEQsIDB4NTEsIDB4NzAsIDB4MDAsIDB4RDUsIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MUQsIDB4NDgsIDB4MDcsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LAorMHgwNywgMHg5MCwgMHgxMCwgMHg1MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NTAsIDB4MDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsCisweDY0LCAweDAwLCAweEQwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweEM1LCAweDIwLCAweDA0LCAweDAyLCAweEQwLCAweDBDLAorMHg0OCwgMHgzMCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjYsIDB4MDAsIDB4RDMsIDB4NDAsIDB4NEMsIDB4MDMsCisweEI0LCAweDAxLCAweEMwLCAweDMwLCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDcwLCAweDAxLCAweEMwLCAweDI0LAorMHgyMCwgMHhEMywgMHgwMCwgMHg0RCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHhBQiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjQsIDB4MDEsIDB4QzgsIDB4MkYsIDB4NDAsIDB4MDMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM0LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweDgwLCAweDAzLCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMSwgMHg3MCwKKzB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweEZDLCAweDAwLCAweDkxLCAweDAzLCAweEMwLCAweDBGLCAweDEwLCAweEJCLCAweDAwLCAweEVDLCAweDAwLAorMHgzMCwgMHgwMywgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDgwLCAweEMwLCAweDBFLCAweDAyLCAweDNBLCAweDA4LCAweEU4LCAweDI4LAorMHhCOCwgMHhBMywgMHhDMCwgMHg4RSwgMHgwMiwgMHgzQSwgMHgwOCwgMHhFQywgMHgyOCwgMHhBMCwgMHg4MywgMHhFMCwgMHg4RSwKKzB4ODIsIDB4M0IsIDB4MEEsIDB4RUMsIDB4MjgsIDB4QTgsIDB4ODMsIDB4QzAsIDB4OEUsIDB4ODIsIDB4M0IsIDB4MEUsIDB4RTYsCisweDI4LCAweEEwLCAweDgzLCAweEUwLCAweDhFLCAweDgyLCAweDNCLCAweDBBLCAweEVDLCAweDIwLCAweEI4LCAweDgzLCAweEUwLAorMHgwRSwgMHg4MiwgMHgzQSwgMHgwQSwgMHhFRSwgMHgyMCwgMHhCMCwgMHgwMywgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MjIsIDB4MjAsIDB4OEUsIDB4ODAsIDB4M0IsIDB4MDIsIDB4Q0EsIDB4MDgsIDB4QTgsCisweDIzLCAweEEwLCAweDhFLCAweDgwLCAweDNBLCAweDAyLCAweEU4LCAweDA4LCAweEE4LCAweDIzLCAweEUwLCAweDhFLCAweDAwLAorMHgxMywgMHgwMiwgMHhFOCwgMHgwOCwgMHhBOCwgMHgyMywgMHhBMCwgMHg4NCwgMHgwMCwgMHgzQiwgMHgwMiwgMHhFQywgMHgwOCwKKzB4MjgsIDB4MjMsIDB4RTAsIDB4OEEsIDB4MDAsIDB4MzksIDB4MDIsIDB4RTgsIDB4MDgsIDB4QkEsIDB4MjMsIDB4NDAsIDB4ODQsCisweDgwLCAweDNCLCAweDAwLCAweEVFLCAweDA4LCAweEE4LCAweDAzLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHg0MCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0MCwgMHgxMCwgMHgyMCwgMHg0MSwKKzB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4ODQsIDB4MDEsIDB4MTIsCisweDA2LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA2LCAweDQ4LCAweDEwLCAweDAwLAorMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwKKzB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgzLCAweDAwLCAweDgwLCAweDBFLCAweDAwLCAweDFBLCAweDAwLCAweDZBLCAweDA4LCAweEEyLCAweDYxLCAweDgwLAorMHg4NiwgMHhBMCwgMHgxQSwgMHgwMCwgMHgyOCwgMHgwOCwgMHhBOCwgMHgwMSwgMHg4MCwgMHgwNiwgMHgwMCwgMHgxQSwgMHg4MCwKKzB4NjgsIDB4MDgsIDB4QUEsIDB4MDEsIDB4ODAsIDB4ODYsIDB4MDEsIDB4MUEsIDB4MDAsIDB4NjgsIDB4MDgsIDB4QTgsIDB4MDAsCisweDgwLCAweDg2LCAweDAwLCAweDNBLCAweDAyLCAweDY4LCAweDAwLCAweEEwLCAweDAxLCAweDgwLCAweDBFLCAweDAwLCAweDBBLAorMHgwNCwgMHg2MCwgMHgwMCwgMHhBMCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTAsIDB4MTIsIDB4QTAsIDB4NEUsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsIDB4MDQsIDB4QTAsIDB4MTMsIDB4QTAsIDB4NEUsCisweDgxLCAweDNBLCAweDAxLCAweEU4LCAweDA0LCAweEE4LCAweDEzLCAweEEwLCAweENFLCAweDgwLCAweDNBLCAweDAxLCAweEU4LAorMHgzNCwgMHhBOCwgMHgxMywgMHhBMCwgMHhDRSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFQSwgMHgwNCwgMHhBOCwgMHgxMywgMHhBMCwKKzB4NEUsIDB4ODAsIDB4MkEsIDB4MDEsIDB4QTgsIDB4MDQsIDB4QTgsIDB4MTIsIDB4QTAsIDB4NEUsIDB4ODAsIDB4MzIsIDB4MDEsCisweEVBLCAweDA0LCAweEE4LCAweDAzLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLAorMHgwMiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MTgsIDB4MDEsIDB4NjIsIDB4MDAsIDB4ODAsIDB4ODEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTgsIDB4MDAsIDB4NDIsIDB4MDAsCisweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDA4LCAweDYwLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LAorMHgwMywgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwKKzB4MDAsIDB4ODAsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4ODIsCisweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDE0LCAweDAwLCAweDEwLCAweDIwLCAweDg0LCAweDgwLCAweDEwLAorMHgwOCwgMHg0MiwgMHgxMCwgMHgwOCwgMHgxMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwQywgMHg0MiwgMHgwOCwgMHgwOCwKKzB4MTEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MTEsIDB4MjAsIDB4MDQsIDB4ODAsCisweDEwLCAweDA0LCAweDQyLCAweDA0LCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDA0LAorMHgwOCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHhGMiwgMHhBMCwKKzB4MDIsIDB4MDMsIDB4MEEsIDB4MDQsIDB4MjgsIDB4MUMsIDB4QUEsIDB4NTAsIDB4QTAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDYsCisweDJBLCAweDEwLCAweEEwLCAweEQwLCAweDgwLCAweDAyLCAweDAxLCAweDBBLCAweDA0LCAweDBBLCAweDMwLCAweEEwLCAweDUwLAorMHhBMCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwRSwgMHgyOCwgMHgxMCwgMHhBMCwgMHg1MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwKKzB4MDQsIDB4MkEsIDB4MTQsIDB4QTAsIDB4NDAsIDB4ODAsIDB4MDIsIDB4MDEsIDB4MkEsIDB4MDUsIDB4MjgsIDB4M0MsIDB4QTgsCisweDAwLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDMwLCAweDgwLCAweEM4LAorMHgwMCwgMHhBMiwgMHgwMywgMHhBOCwgMHgyRSwgMHhBMCwgMHgzMiwgMHg4MCwgMHhFQSwgMHgwMCwgMHhBQSwgMHgwMywgMHgwOCwKKzB4MEMsIDB4QTAsIDB4M0EsIDB4ODAsIDB4NkEsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MEMsIDB4MjAsIDB4M0EsIDB4ODAsCisweDZBLCAweDAwLCAweDgyLCAweDAzLCAweDA4LCAweDBDLCAweEEwLCAweDNBLCAweDgwLCAweEVBLCAweDAxLCAweEEyLCAweDAzLAorMHgwOCwgMHgwRSwgMHhBMCwgMHgzQSwgMHg4MCwgMHhFMCwgMHgwMCwgMHhBQSwgMHgwMywgMHgwOCwgMHgxQywgMHgyMCwgMHgwMiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODAsCisweDMwLCAweDAxLCAweDIwLCAweDE4LCAweDgwLCAweDAwLCAweDAwLCAweEMyLCAweDAxLCAweDA4LCAweDAyLCAweDAwLCAweDA0LAorMHg4MCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMiwgMHgwMCwgMHg4MiwKKzB4MDAsIDB4MTAsIDB4MDYsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQ0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDgyLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgxNiwgMHg0MCwgMHgxOCwgMHgwMCwgMHg2MSwKKzB4MDAsIDB4MDQsIDB4MjEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDYsIDB4MDEsIDB4MTAsCisweDA0LCAweDQwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA2LCAweDAxLCAweDEwLCAweDA2LCAweDQwLCAweDEwLCAweDgwLAorMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwKKzB4MTAsIDB4MDQsIDB4NjAsIDB4MTQsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4ODIsIDB4OEMsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLCAweEEwLCAweDA2LCAweDgwLCAweDlBLCAweDAwLAorMHg2RCwgMHgwMiwgMHhBMCwgMHgwMSwgMHhBMCwgMHgyNiwgMHg0MCwgMHg5QiwgMHgwMCwgMHg0QSwgMHgwMCwgMHhCMCwgMHgwOSwKKzB4ODgsIDB4MjYsIDB4ODAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDAsIDB4ODAsIDB4MDksIDB4QTAsIDB4MjYsIDB4NDAsIDB4OTIsCisweDAwLCAweDQ4LCAweDAwLCAweEIwLCAweDA5LCAweDgwLCAweDI2LCAweDgwLCAweDlBLCAweDAwLCAweDRBLCAweDAyLCAweEE4LAorMHgwOSwgMHhBMCwgMHgyNCwgMHg4MCwgMHg5QiwgMHgwMCwgMHg0QSwgMHgwMCwgMHhBOCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDIsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUEsIDB4MDEsIDB4NjgsCisweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDQ2LCAweDgwLCAweDFBLCAweDAwLCAweDZFLCAweDA0LCAweEE4LCAweDAxLCAweEMwLAorMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwgMHg2QSwgMHgwMCwgMHhCMCwgMHgwMSwgMHhFMCwgMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwKKzB4NkUsIDB4MDQsIDB4QTgsIDB4MDEsIDB4QzgsIDB4MDYsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QjAsIDB4MDEsCisweEUwLCAweDQ2LCAweDgwLCAweDFBLCAweDAwLCAweDZFLCAweDAwLCAweEIwLCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg0MiwgMHgyMCwgMHgwQywgMHg4MSwgMHgzMSwgMHgwQywgMHg4MiwgMHgxMCwKKzB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsCisweDAxLCAweDMwLCAweDBDLCAweEMyLCAweDMwLCAweDEwLCAweDQzLCAweDIwLCAweDBDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLAorMHgzMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwQywgMHhDMCwgMHgxMCwgMHgwOCwgMHg0MywgMHgwMCwKKzB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4MDMsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLAorMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDAwLCAweDAwLCAweDEzLCAweDA4LCAweDA4LAorMHgwMCwgMHgyMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4NDAsIDB4ODAsIDB4NEMsIDB4MjMsIDB4MzIsIDB4MDQsIDB4Q0EsIDB4MTAsIDB4MjAsIDB4NDMsCisweDgwLCAweDBDLCAweDAzLCAweDMyLCAweDBDLCAweENBLCAweDEwLCAweDIwLCAweDQzLCAweDg4LCAweDRDLCAweDIzLCAweDMyLAorMHgwNSwgMHhDOCwgMHgxNCwgMHgyMCwgMHg0MywgMHg4MCwgMHg0QywgMHg4MSwgMHgzMiwgMHgwNSwgMHhDQSwgMHgxMCwgMHgyMCwKKzB4NDMsIDB4ODAsIDB4NDgsIDB4MDMsIDB4MzIsIDB4MDUsIDB4ODgsIDB4MTAsIDB4MjAsIDB4RDMsIDB4QTAsIDB4MEMsIDB4MDMsCisweDMyLCAweDA0LCAweENBLCAweDEwLCAweDIwLCAweDAzLCAweDg0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMiwgMHg0MiwgMHhBMCwgMHgwNiwgMHg4MywgMHgzQSwgMHgwNCwgMHg2QSwgMHgxMCwgMHhBOCwgMHg0MSwgMHhBMCwKKzB4MDYsIDB4ODMsIDB4MUEsIDB4MEMsIDB4NEEsIDB4MzAsIDB4QTgsIDB4NDEsIDB4QTAsIDB4MDYsIDB4ODEsIDB4MUEsIDB4MEMsCisweDRBLCAweDMwLCAweEE4LCAweDQxLCAweDgwLCAweDBFLCAweDgzLCAweDFBLCAweDBDLCAweDRBLCAweDMwLCAweDg4LCAweDQxLAorMHhBMCwgMHgwNiwgMHgwMSwgMHgwQSwgMHgwQywgMHgwOCwgMHgxMCwgMHhBOCwgMHg0MSwgMHhBMCwgMHgwNiwgMHg4MywgMHgxQSwKKzB4MDQsIDB4NkEsIDB4MTAsIDB4QTgsIDB4MDEsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEEzLCAweDQwLCAweDAwLCAweDA0LCAweDAxLCAweDE4LCAweDA0LCAweEMwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LAorMHgwMSwgMHgyMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwKKzB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MDAsCisweDAwLCAweDgxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LAorMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHg4QywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywKKzB4NEEsIDB4MjAsIDB4MkMsIDB4ODEsIDB4MTAsIDB4MEMsIDB4ODIsIDB4MTIsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MjYsIDB4ODEsCisweEIwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDI2LCAweDgzLCAweDkwLCAweDA0LCAweDAyLCAweDEyLAorMHgwOCwgMHg0MSwgMHgwMCwgMHgyNiwgMHg4MSwgMHg5MCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgyNiwKKzB4ODMsIDB4OTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4ODgsIDB4QzksIDB4MjAsIDB4MEMsIDB4ODEsIDB4QjAsIDB4MDQsIDB4NjIsCisweDEyLCAweDg4LCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDA2LAorMHgyMCwgMHgxQSwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHhBOCwgMHgwNiwgMHhBMCwgMHgxQSwgMHg4MCwgMHg2MiwKKzB4MDAsIDB4ODAsIDB4MDEsIDB4MjgsIDB4MDYsIDB4QTAsIDB4MUEsIDB4ODAsIDB4NDIsIDB4MDAsIDB4MEEsIDB4MDEsIDB4QTAsCisweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDZBLCAweDAwLCAweDg4LCAweDAxLCAweDI4LCAweDA2LCAweEEwLCAweDFBLCAweDgwLAorMHg2QSwgMHg4MCwgMHgwOCwgMHgwMSwgMHhBOCwgMHgwNiwgMHg4MCwgMHgxOCwgMHg4MCwgMHg2MiwgMHgwMCwgMHhBOCwgMHgwMSwKKzB4ODgsIDB4MDIsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODAsCisweDgyLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDYwLCAweDgwLCAweDgyLCAweDAxLCAweDBBLCAweDA2LAorMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwKKzB4QTAsIDB4ODIsIDB4MDEsIDB4MkEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsIDB4ODAsIDB4ODIsIDB4MDEsIDB4MEEsCisweDA2LCAweEFBLCAweDE4LCAweEEwLCAweDYwLCAweDgwLCAweDhBLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0OCwgMHg4MCwgMHgyMCwKKzB4ODEsIDB4MDIsIDB4ODQsIDB4MDgsIDB4MTIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MjAsIDB4ODEsIDB4ODIsIDB4MDQsIDB4MDgsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDIwLCAweDAxLCAweDgyLCAweDA0LCAweDRBLCAweDEyLCAweDIwLCAweDQwLCAweDgwLAorMHgyMCwgMHgwMSwgMHg4MiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgyMCwgMHgwMSwgMHg4MiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDgsIDB4ODAsIDB4MDAsIDB4MDEsIDB4ODIsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjAsIDB4MDAsCisweDBDLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDYyLCAweEMwLCAweDgwLCAweDAxLAorMHgwMywgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBRSwgMHgxOCwKKzB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4ODEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QTAsIDB4NjIsIDB4QzAsIDB4OEEsCisweDgxLCAweDI5LCAweDA2LCAweEFFLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweEE2LAorMHgxOCwgMHhCMCwgMHg2MiwgMHg2MCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHgwMiwgMHg4QywKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NjIsIDB4ODAsIDB4OEUsIDB4MDEsIDB4M0EsCisweDA2LCAweEVFLCAweDE4LCAweEE0LCAweDYzLCAweDgwLCAweDhFLCAweDgxLCAweDNBLCAweDA2LCAweEU4LCAweDE4LCAweEIwLAorMHg2MywgMHg4MCwgMHg4RSwgMHgwMSwgMHgzQSwgMHgwNiwgMHhFQSwgMHgxOCwgMHhBOCwgMHg2MywgMHg4MCwgMHg4RSwgMHg4MSwKKzB4M0EsIDB4MDYsIDB4RTAsIDB4MTgsIDB4QjAsIDB4NjMsIDB4ODAsIDB4OEUsIDB4ODEsIDB4M0IsIDB4MDYsIDB4RTgsIDB4MTgsCisweEE4LCAweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDNCLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDAzLCAweDhDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg2MiwgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQSwgMHgwNiwKKzB4RTgsIDB4MTgsIDB4QjAsIDB4NjMsIDB4QzAsIDB4OEUsIDB4MDEsIDB4M0EsIDB4MDYsIDB4Q0MsIDB4MTgsIDB4QTAsIDB4NjMsCisweEMwLCAweDhFLCAweDAxLCAweDNCLCAweDg2LCAweEVBLCAweDE4LCAweDMwLCAweDYzLCAweEMwLCAweDhFLCAweDAxLCAweDNCLAorMHgwNiwgMHhDQywgMHgxOCwgMHhBMCwgMHg2MywgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQiwgMHgwNiwgMHhFQywgMHgxOCwgMHhCMCwKKzB4NjMsIDB4RTAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDYsIDB4RUUsIDB4MTgsIDB4QjAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDYyLCAweEEwLCAweDhFLCAweDgxLCAweDMxLCAweDA2LCAweEMyLAorMHgxOCwgMHhBOCwgMHg2MywgMHhBMCwgMHg4RSwgMHg4MSwgMHgzMCwgMHgwNiwgMHhDMiwgMHgxOCwgMHgwQSwgMHg2MywgMHhBMCwKKzB4OEUsIDB4MDEsIDB4MTAsIDB4MDYsIDB4QzQsIDB4MTgsIDB4MzAsIDB4NjMsIDB4MDAsIDB4OEMsIDB4MjEsIDB4MTAsIDB4MDYsCisweEMwLCAweDE4LCAweDA4LCAweDYxLCAweEEwLCAweDhFLCAweEExLCAweDM4LCAweDg2LCAweDgwLCAweDE4LCAweEE4LCAweDYzLAorMHgwMCwgMHg4NCwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFRSwgMHgxOCwgMHhBOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MUEsIDB4MDQsIDB4RTgsIDB4MTAsCisweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDNBLCAweDA0LCAweDQ4LCAweDEwLCAweEEwLCAweDQzLCAweDgwLCAweDA0LAorMHgwMSwgMHgxMiwgMHgwNCwgMHg2OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwKKzB4MTAsIDB4MjAsIDB4NDMsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MzIsIDB4MDQsIDB4NjgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsCisweDA0LCAweDAxLCAweDMyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4MCwgMHg4NiwgMHgwMSwgMHgxMiwgMHgwNiwgMHg2QSwgMHgxOCwgMHhBMCwKKzB4NjAsIDB4ODgsIDB4ODYsIDB4ODEsIDB4MUEsIDB4MDYsIDB4NDgsIDB4MTgsIDB4QTgsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsCisweDAyLCAweDg2LCAweDQ4LCAweDE4LCAweEEwLCAweDYxLCAweDgwLCAweDg0LCAweDAxLCAweDFBLCAweDA2LCAweDQ4LCAweDE4LAorMHhBOCwgMHg2MSwgMHg4OCwgMHg4NiwgMHgwMSwgMHgxQSwgMHgwNiwgMHg0OCwgMHgxOCwgMHhBMCwgMHg2MSwgMHg4MCwgMHg4NCwKKzB4MDEsIDB4MTgsIDB4MDYsIDB4NjgsIDB4MTgsIDB4QTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEyLCAweDAyLCAweEEwLCAweDBFLCAweDgwLCAweDNBLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLAorMHhBMCwgMHgwQSwgMHg4MCwgMHgzMiwgMHgwMCwgMHhDOCwgMHgwMCwgMHhBOCwgMHgwMiwgMHhBMCwgMHgwQywgMHgwMCwgMHgzMiwKKzB4MDAsIDB4QzgsIDB4MDAsIDB4QTgsIDB4MDMsIDB4QTAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MDAsIDB4QzgsIDB4MDAsIDB4QTgsCisweDAzLCAweEEwLCAweDBDLCAweDAwLCAweDMyLCAweDAwLCAweEU4LCAweDAwLCAweDI4LCAweDAzLCAweEEwLCAweDBDLCAweDgwLAorMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHhBOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTIsIDB4NDIsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTgsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsCisweDA2LCAweDAxLCAweDEwLCAweDBDLCAweDQyLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA0LCAweDgzLCAweDEwLCAweDBDLAorMHg0MCwgMHgxMCwgMHg4MCwgMHhDMSwgMHgwMCwgMHgwNCwgMHg4MywgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHg4MCwgMHhDMSwKKzB4MDAsIDB4MDQsIDB4ODMsIDB4MTAsIDB4MEMsIDB4NDIsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsCisweDA0LCAweDYwLCAweDEwLCAweDgwLCAweDAxLCAweDg4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMiwgMHg0MiwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNCwKKzB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjAsCisweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNSwKKzB4NDIsIDB4MTAsIDB4MDgsIDB4MDEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsCisweDQyLCAweEEwLCAweDAyLCAweDAxLCAweDBBLCAweDBDLCAweEE4LCAweDMwLCAweEE4LCAweDQyLCAweEEwLCAweDAyLCAweDAzLAorMHgyQSwgMHgwNCwgMHhBQSwgMHgxMCwgMHhBMCwgMHhDMCwgMHhBMCwgMHgwQSwgMHg4MSwgMHgyQSwgMHg4NCwgMHhBMCwgMHgxMCwKKzB4QTAsIDB4NDAsIDB4QTAsIDB4MEEsIDB4ODEsIDB4MkEsIDB4MEMsIDB4QUEsIDB4MTAsIDB4QTAsIDB4NDAsIDB4QTgsIDB4MEEsCisweDgxLCAweDJBLCAweDA0LCAweDJBLCAweDEwLCAweEE4LCAweDQyLCAweEEwLCAweDBBLCAweDgxLCAweDJBLCAweDBDLCAweEE4LAorMHgxMCwgMHhBOCwgMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKzB4ODAsIDB4MEEsIDB4MDEsIDB4MkEsIDB4MEMsIDB4QTgsIDB4MzAsIDB4QTAsIDB4QzIsIDB4ODAsIDB4MEEsIDB4MDMsIDB4MkEsCisweDBDLCAweEE4LCAweDMwLCAweEEwLCAweEMyLCAweDgwLCAweDBBLCAweDAxLCAweDJBLCAweDA0LCAweEE4LCAweDMwLCAweEEwLAorMHhDMiwgMHg4MCwgMHgwQSwgMHgwMSwgMHgyQSwgMHgwQywgMHhBOCwgMHgzMCwgMHhBMCwgMHhDMiwgMHg4MCwgMHgwQSwgMHgwMSwKKzB4MkEsIDB4MDQsIDB4QTgsIDB4MzAsIDB4QTAsIDB4NDIsIDB4ODAsIDB4MEEsIDB4MDMsIDB4MkEsIDB4MDUsIDB4QTgsIDB4MzAsCisweEEwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweDAwLAorMHg0MiwgMHg4MCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgxMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwOCwgMHgwMCwKKzB4MjAsIDB4MDQsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ODAsIDB4MDAsCisweDAwLCAweDAyLCAweDIwLCAweDA4LCAweDAwLCAweDIwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg2MCwgMHgwNCwgMHg4MCwKKzB4MDEsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NDIsIDB4NDAsIDB4MDAsCisweDAxLCAweDAxLCAweDA1LCAweDA0LCAweDE0LCAweDEwLCAweDQwLCAweDQwLCAweDQwLCAweDAxLCAweDAxLCAweDBDLCAweDQ0LAorMHgxMCwgMHgxMCwgMHg1MCwgMHg0MCwgMHgwMCwgMHg4MSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg1MCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDEsIDB4MEMsIDB4MDYsIDB4MTAsIDB4MTAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsCisweDQ2LCAweDE0LCAweDEwLCAweDQwLCAweDYwLCAweDQ0LCAweDAxLCAweDAxLCAweDA0LCAweDA0LCAweDMwLCAweDEwLCAweDAwLAorMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwMCwgMHhBMCwgMHgwNiwgMHg4MCwKKzB4MUEsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QTgsIDB4MDEsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NkEsIDB4MDAsCisweEI4LCAweDAxLCAweEEwLCAweDA2LCAweDgwLCAweDFBLCAweDAwLCAweDZBLCAweDAwLCAweEE4LCAweDAxLCAweEEwLCAweDA2LAorMHg4MCwgMHgxQSwgMHgwMCwgMHg2OCwgMHgwMCwgMHhCMCwgMHgwMSwgMHg4MCwgMHgwNiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2QSwKKzB4MDAsIDB4QTgsIDB4MDEsIDB4QTAsIDB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QTgsIDB4MDEsIDB4ODgsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLCAweEMwLCAweDA2LCAweDAwLCAweDEyLAorMHgwMCwgMHhFOCwgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHg4MCwgMHgzQSwgMHgwMCwgMHg0QywgMHgwMCwgMHhBMCwKKzB4MDMsIDB4QzAsIDB4MDYsIDB4ODAsIDB4MTMsIDB4MDAsIDB4NEUsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsCisweDEzLCAweDAwLCAweDZFLCAweDAwLCAweEEwLCAweDAzLCAweEMwLCAweDA2LCAweDAwLCAweDFCLCAweDAwLCAweDRDLCAweDAwLAorMHhCMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgzQSwgMHgwMCwgMHg2RSwgMHgwMCwgMHhCMCwgMHgwMSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MEMsIDB4ODAsIDB4MTEsIDB4MDAsCisweDYyLCAweDAwLCAweDA4LCAweDAyLCAweDIwLCAweDBDLCAweDgwLCAweDE4LCAweDAwLCAweDQyLCAweDAwLCAweDhBLCAweDAxLAorMHgyMCwgMHgwQywgMHgwMiwgMHgxMCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwQywgMHgwMiwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDgsCisweDgzLCAweDAwLCAweDA0LCAweDgwLCAweDE4LCAweDAwLCAweEMyLCAweDAwLCAweDA4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyQywgMHgwMCwgMHg5MCwgMHgwMCwgMHg0MCwKKzB4MDIsIDB4MDAsIDB4MEIsIDB4MDAsIDB4MkMsIDB4MDAsIDB4OTAsIDB4MTIsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MjEsIDB4MDAsCisweEE4LCAweDAxLCAweDkwLCAweDEyLCAweDQwLCAweDAyLCAweDAwLCAweDIxLCAweDAyLCAweEFDLCAweDA4LCAweDkwLCAweDIyLAorMHg0MCwgMHgwMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhBQywgMHgwNSwgMHg5MCwgMHgyMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyQiwKKzB4MDIsIDB4QTQsIDB4MDAsIDB4OTAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDhDLCAweDAwLCAweDMyLCAweDBBLCAweENBLCAweDI4LAorMHgyMiwgMHhBMywgMHg4MCwgMHg4QywgMHgwMiwgMHgzMiwgMHgwNiwgMHg0OCwgMHgyOCwgMHgyOCwgMHhBMiwgMHg4OCwgMHg4QywKKzB4ODIsIDB4MTIsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MjAsIDB4QTEsIDB4ODAsIDB4OEMsIDB4MDMsIDB4MzIsIDB4MDAsIDB4NDgsCisweDI4LCAweDI4LCAweEEyLCAweDgwLCAweDhDLCAweDAwLCAweDIyLCAweDA2LCAweDA4LCAweDM4LCAweDIwLCAweEEzLCAweDgwLAorMHg4NCwgMHg4MiwgMHgzMiwgMHgwMiwgMHhDQSwgMHgwOCwgMHgyMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4QTAsIDB4MTYsIDB4ODMsIDB4NUEsIDB4MEMsIDB4NEEsIDB4MzEsIDB4QTgsCisweEM1LCAweEEwLCAweDE2LCAweDgzLCAweDVBLCAweDBFLCAweDY4LCAweDMxLCAweEE4LCAweDg1LCAweEEwLCAweDE2LCAweDgzLAorMHg1QSwgMHgwQywgMHg2MCwgMHgzMSwgMHhBOCwgMHg4NSwgMHhBMCwgMHgxNiwgMHgwMywgMHg1QSwgMHgwQywgMHg2QSwgMHgzMSwKKzB4QTgsIDB4QzUsIDB4QTAsIDB4MTYsIDB4MDMsIDB4NTgsIDB4MEUsIDB4MjgsIDB4MzEsIDB4QTgsIDB4RTQsIDB4ODAsIDB4MTIsCisweDgyLCAweDVBLCAweDBDLCAweDZBLCAweDMxLCAweEE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNiwgMHgwMCwgMHgwOSwKKzB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4QTQsIDB4MDAsIDB4OTAsCisweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDkxLCAweDAwLCAweEE0LCAweDgwLCAweDkwLCAweDA4LCAweDQwLCAweDAyLCAweDAwLAorMHgzMSwgMHgwMCwgMHhBNCwgMHg4MCwgMHg4MCwgMHgwMCwgMHg0MiwgMHgwQywgMHgwMCwgMHgwOSwgMHgyMCwgMHg2NCwgMHgwMiwKKzB4OTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDQyLCAweDg4LCAweDE4LCAweDIwLCAweDQyLCAweDgwLCAweDg4LCAweDExLCAweDIyLAorMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwKKzB4NjAsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MjEsCisweDI2LCAweDA2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDgwLCAweDg4LCAweDIxLCAweDIyLCAweDA2LCAweDg4LCAweDE4LAorMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTIsIDB4MEEsIDB4MDgsIDB4MkEsIDB4MjAsIDB4MDgsIDB4MDAsIDB4QTgsIDB4MDIsIDB4QTIsIDB4MEEsCisweDg0LCAweDJBLCAweDIwLCAweEFBLCAweDgwLCAweEEwLCAweDAyLCAweEE2LCAweDBBLCAweDFDLCAweDJBLCAweDI4LCAweEE4LAorMHhDMCwgMHhBMCwgMHgwMiwgMHhBMiwgMHgwQSwgMHg4OCwgMHgyQSwgMHgyMCwgMHhBQSwgMHg4MCwgMHhBMCwgMHgwMiwgMHhBMiwKKzB4MEEsIDB4ODgsIDB4MkEsIDB4QTAsIDB4QUEsIDB4ODAsIDB4QTksIDB4MDIsIDB4QTIsIDB4MEEsIDB4MTgsIDB4MjgsIDB4MjAsCisweEE4LCAweDgwLCAweEE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHg4NCwgMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwgMHhBOCwgMHgwNCwgMHhBMCwgMHgxMiwgMHg4MCwgMHg0MiwgMHgxMCwKKzB4MkEsIDB4NDEsIDB4MjgsIDB4ODQsIDB4QTEsIDB4MTAsIDB4ODQsIDB4NEEsIDB4MTAsIDB4MkEsIDB4NjEsIDB4QTgsIDB4MDQsCisweEExLCAweDEwLCAweDg0LCAweDRBLCAweDE4LCAweDJBLCAweDYxLCAweEE4LCAweDQ0LCAweEExLCAweDEwLCAweDg0LCAweDRBLAorMHgxNCwgMHgyQSwgMHg2MSwgMHhBOCwgMHgwNCwgMHhBMSwgMHgxMiwgMHg4NCwgMHg0QSwgMHgxMCwgMHgyQSwgMHgwMSwgMHhBOCwKKzB4MDQsIDB4ODEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisweDgwLCAweDQwLCAweDgxLCAweDAyLCAweDhELCAweDA4LCAweDE0LCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDgzLCAweDAyLAorMHgwNSwgMHgwOCwgMHgxNCwgMHgyMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwOCwgMHgxNCwgMHgyMCwKKzB4NTAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjgsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsCisweDAyLCAweDg1LCAweDAwLCAweDE0LCAweDIwLCAweDUwLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDE0LAorMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhDMCwKKzB4Q0EsIDB4MDAsIDB4MkIsIDB4MDMsIDB4QTQsIDB4MEMsIDB4MTAsIDB4MzIsIDB4QzAsIDB4Q0EsIDB4MDAsIDB4MDEsIDB4MDMsCisweDBDLCAweDBDLCAweEIwLCAweDMyLCAweDQwLCAweEMwLCAweDgwLCAweDIxLCAweDAzLCAweDg2LCAweDBDLCAweEExLCAweDMyLAorMHgwMCwgMHhDOCwgMHg4MCwgMHgwMSwgMHgwMywgMHg4NiwgMHgwQywgMHhBMCwgMHgzMiwgMHg0MCwgMHhDOCwgMHgwMCwgMHgyMCwKKzB4MDMsIDB4ODYsIDB4MEMsIDB4MTAsIDB4MzAsIDB4NjAsIDB4QzgsIDB4MjAsIDB4MjEsIDB4MDMsIDB4ODQsIDB4MEMsIDB4QjAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEyLCAweDRFLAorMHg4MCwgMHgzQSwgMHgwOSwgMHhFRSwgMHgwNCwgMHhBMCwgMHgxMywgMHg4MCwgMHg0RSwgMHg4MiwgMHgzQSwgMHgxMSwgMHhFQSwKKzB4MDQsIDB4QjgsIDB4MTMsIDB4OTAsIDB4NEUsIDB4OTAsIDB4M0EsIDB4MjEsIDB4NkEsIDB4MDQsIDB4QTgsIDB4MTMsIDB4QTAsCisweDRFLCAweDg4LCAweDNBLCAweDIxLCAweENBLCAweDA0LCAweEE4LCAweDEzLCAweDEwLCAweDRDLCAweDg0LCAweDMyLCAweDAxLAorMHhFOCwgMHgwNCwgMHhBOCwgMHgxMywgMHhBMCwgMHg0RSwgMHg4MCwgMHgzQiwgMHgwMSwgMHhFQSwgMHgwNCwgMHhBOSwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4MTAsIDB4MTIsIDB4MDMsCisweDA4LCAweDhDLCAweDIwLCAweDMyLCAweDgwLCAweEM0LCAweDA4LCAweDAyLCAweDAzLCAweDA4LCAweDBDLCAweDIwLCAweDMxLAorMHg4MiwgMHhDMCwgMHgxOCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMSwgMHg4MCwgMHhDMCwgMHgxOCwgMHgwMiwKKzB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzEsIDB4ODIsIDB4QzAsIDB4MTgsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsCisweDMwLCAweDg2LCAweEMwLCAweDAwLCAweDAyLCAweDIzLCAweDA4LCAweDBDLCAweDIwLCAweDMxLCAweDg0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwKKzB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsCisweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLAorMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwKKzB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjQsIDB4REYsIDB4RDAsIDB4NkMsIDB4NDMsIDB4QjMsIDB4MEQsCisweEVELCAweEJGLCAweDM0LCAweEZCLCAweEQyLCAweEZFLCAweENCLCAweEZGLCAweDBELCAweENELCAweEJFLCAweDdDLCAweERCLAorMHhGMCwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhFRCwgMHhCRiwgMHg3QywgMHhEQiwgMHhGMCwgMHhGRiwgMHhDQiwgMHhGRiwKKzB4MkYsIDB4Q0QsIDB4QkUsIDB4N0MsIDB4REIsIDB4RjAsIDB4RkYsIDB4Q0IsIDB4QjcsIDB4MkYsIDB4REYsIDB4MzYsIDB4N0MsCisweERCLCAweEYwLCAweDZELCAweDQzLCAweEIzLCAweDJGLCAweEVELCAweDM3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDQywgMHgzRiwgMHgzMiwgMHhGMywgMHhDOCwgMHhDQywgMHgyMywgMHhGMywKKzB4QkYsIDB4Q0MsIDB4RkMsIDB4MzIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MjMsIDB4MzMsIDB4QkYsIDB4RkMsIDB4M0MsIDB4RjIsCisweEZGLCAweENCLCAweEZGLCAweDJGLCAweEYzLCAweEJGLCAweEZDLCAweDNDLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLAorMHgzMywgMHhCRiwgMHhGQywgMHgzQywgMHhGMiwgMHhGRiwgMHhDQiwgMHhDRiwgMHgyRiwgMHgzRiwgMHg4RiwgMHhGQywgMHgzQywKKzB4RjIsIDB4RjMsIDB4QzgsIDB4Q0MsIDB4MkYsIDB4RjMsIDB4OEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweERDLCAweDc4LCAweDcyLCAweDYzLCAweDQ4LCAweEVDLCAweDIxLCAweEIxLCAweDlGLAorMHhEQywgMHg3RSwgMHgxMiwgMHg3QiwgMHg0OCwgMHg4QywgMHgyMSwgMHhCNywgMHg4NywgMHhDNCwgMHg3RSwgMHgxMiwgMHg2MywKKzB4NDgsIDB4OEMsIDB4MjEsIDB4MzcsIDB4ODYsIDB4QzQsIDB4N0UsIDB4MTIsIDB4NjMsIDB4NDgsIDB4OEMsIDB4MjEsIDB4QjcsCisweDg3LCAweEM0LCAweDdFLCAweDEyLCAweDYzLCAweDQ4LCAweDhDLCAweDIxLCAweEIxLCAweDlGLCAweEM0LCAweDE4LCAweDEyLAorMHg3QiwgMHg0OCwgMHg4QywgMHgyNywgMHgzNywgMHg5RSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MEUsIDB4MDIsIDB4MzksIDB4MEEsIDB4RTQsIDB4MjAsIDB4OTAsIDB4ODMsCisweDAwLCAweDBFLCAweDAyLCAweDM5LCAweDA4LCAweEUwLCAweDIwLCAweDgwLCAweDgzLCAweDQwLCAweDBFLCAweDAyLCAweDM5LAorMHgwOCwgMHhFNCwgMHgyMCwgMHg5MCwgMHg4MywgMHgwMCwgMHgwRSwgMHgwMiwgMHgzOCwgMHgwQSwgMHhFNCwgMHgyMCwgMHg4MCwKKzB4ODMsIDB4NDAsIDB4MEUsIDB4MDIsIDB4MzgsIDB4MDYsIDB4RTYsIDB4MjAsIDB4OTAsIDB4QTMsIDB4NDAsIDB4MEUsIDB4MDIsCisweDM5LCAweDA4LCAweEU0LCAweDI4LCAweDkwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMCwgMHg2MCwgMHg4RSwgMHgwMCwgMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhBMCwgMHgyMywgMHhBMCwKKzB4OEUsIDB4MDAsIDB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QjgsIDB4MjMsIDB4QTAsIDB4OEUsIDB4MDAsIDB4M0EsIDB4MDIsCisweEU4LCAweDA4LCAweEEwLCAweDIzLCAweEEwLCAweDhFLCAweDgwLCAweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEE4LCAweDIzLAorMHhBMCwgMHg4RSwgMHg4MCwgMHgzQSwgMHgwMiwgMHhFRSwgMHgwOCwgMHhBOCwgMHgyMywgMHhBMCwgMHg4RSwgMHg4MCwgMHgzQSwKKzB4MDIsIDB4RUEsIDB4MDgsIDB4QTgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA2LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LAorMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwKKzB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsCisweDA0LCAweDAxLCAweDEyLCAweDA2LCAweDQ4LCAweDEwLCAweDIwLCAweDYxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LAorMHg0OCwgMHgxOCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjAsIDB4MDYsIDB4MDAsCisweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLAorMHg4MCwgMHgwMSwgMHgyOCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMiwgMHg2MCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNiwKKzB4ODAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsCisweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHg0RSwgMHgwMCwgMHgzOCwgMHgwNSwgMHhFMiwgMHgwNCwgMHg4MCwgMHgxMywgMHgyMCwgMHg0RSwgMHgwMCwgMHgzOCwKKzB4MDksIDB4RTIsIDB4MDQsIDB4ODgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4MDAsIDB4MzgsIDB4MDEsIDB4RTAsIDB4MDQsIDB4ODAsCisweDEzLCAweDIwLCAweDRFLCAweDgyLCAweDM4LCAweDA1LCAweEUyLCAweDA0LCAweDg4LCAweDEyLCAweDIwLCAweDRFLCAweDgwLAorMHgzOCwgMHhBMSwgMHhFMiwgMHgwNCwgMHgyOCwgMHg1MSwgMHgyMCwgMHg0RSwgMHg4MCwgMHgzMCwgMHgwMSwgMHhFMiwgMHgxNCwKKzB4ODgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLAorMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHg4MSwKKzB4MDAsIDB4MDYsIDB4MDIsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsCisweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDA4LCAweDEwLCAweDAwLCAweDYwLCAweDAwLCAweDgwLAorMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyMCwgMHgyNCwKKzB4ODAsIDB4OTAsIDB4MDEsIDB4NDIsIDB4MDIsIDB4MDgsIDB4MjksIDB4MjAsIDB4MjQsIDB4ODAsIDB4OTAsIDB4MDIsIDB4NDIsCisweDAyLCAweDA4LCAweDExLCAweDIwLCAweDI0LCAweDgwLCAweDkwLCAweDAwLCAweDQyLCAweDAyLCAweDA4LCAweDA5LCAweDIwLAorMHhBNCwgMHg4MCwgMHg5MCwgMHgwMSwgMHg0MiwgMHgwMiwgMHgwOCwgMHgxMSwgMHgyMCwgMHhBNCwgMHg4MCwgMHg5MCwgMHgwMSwKKzB4NDIsIDB4MDQsIDB4MDgsIDB4MzksIDB4MjAsIDB4NDQsIDB4ODAsIDB4MTgsIDB4MDEsIDB4NDIsIDB4MDYsIDB4MDgsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweDAwLCAweDEyLCAweDgxLAorMHg0OCwgMHgwNSwgMHgyMiwgMHgxMSwgMHg4OCwgMHg0NCwgMHgwMCwgMHgxMiwgMHg4MSwgMHg0OCwgMHgwNCwgMHgyMCwgMHgzMSwKKzB4ODAsIDB4NTQsIDB4MjAsIDB4MTIsIDB4ODEsIDB4NDgsIDB4MDQsIDB4MjIsIDB4MTEsIDB4ODgsIDB4QzQsIDB4MDAsIDB4MTIsCisweDAzLCAweDQ4LCAweDBELCAweDIyLCAweDExLCAweDgwLCAweDU0LCAweDIwLCAweDEyLCAweDAxLCAweDQ4LCAweDA1LCAweDIwLAorMHgxNSwgMHg4OCwgMHg1NCwgMHgyMCwgMHg1MiwgMHg4MSwgMHg2OCwgMHgwRCwgMHgyMiwgMHgxRCwgMHg4OCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MDAsIDB4QzgsIDB4MDAsIDB4MDAsCisweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweENBLCAweDAwLCAweDIwLCAweDAzLCAweEEwLCAweDBDLCAweDAwLAorMHgzMiwgMHgwMCwgMHhDMCwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDQSwgMHgwMCwKKzB4MjgsIDB4MDMsIDB4ODAsIDB4MEMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsIDB4QTAsIDB4MEMsCisweDgwLCAweDcyLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLCAweDgwLCAweDFDLCAweDgwLCAweDAyLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHgyMCwgMHgyQywgMHgwMCwgMHg5MCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MjYsIDB4MDAsIDB4OTAsIDB4MDMsIDB4NjAsIDB4MDIsIDB4MDgsIDB4MDMsCisweDAwLCAweDIwLCAweDAwLCAweDkwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDE5LCAweDAwLCAweEUyLCAweDAwLCAweDg4LAorMHgwMCwgMHg4MCwgMHgwNiwgMHg4MCwgMHgwMCwgMHgwMCwgMHhFMiwgMHgwMSwgMHg4OCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwKKzB4MjgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MEEsIDB4ODAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDAyLCAweDQwLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDAsIDB4ODIsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDIsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsCisweDA4LCAweDAxLCAweDYwLCAweDA2LCAweDgwLCAweDEwLCAweDAwLCAweDY2LCAweDAwLCAweDg4LCAweDAxLCAweDIwLCAweDA0LAorMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMSwgMHg0MCwgMHgwNiwgMHg4MCwgMHgxOSwgMHgwMCwgMHg2MiwKKzB4MDAsIDB4OTgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTksIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsCisweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg5MCwKKzB4MTEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTksIDB4MDEsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4NDAsIDB4MDYsIDB4MDAsCisweDE5LCAweDAwLCAweDY0LCAweDAwLCAweDkwLCAweDExLCAweDAwLCAweDQ2LCAweDAwLCAweDE4LCAweDAwLCAweDY0LCAweDA0LAorMHg4MCwgMHgwMSwgMHg0MCwgMHg0NiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNiwKKzB4MDAsIDB4MTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDYwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDAwLCAweDQzLAorMHgyMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgxOCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMSwgMHgzMCwKKzB4MDQsIDB4QzAsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsCisweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDBDLCAweDgxLAorMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsCisweDRDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLAorMHhDMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsCisweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHhEMCwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwNCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhDMywgMHgyMCwgMHg0QywKKzB4MDMsIDB4MzAsIDB4MEMsIDB4QzIsIDB4MzQsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsCisweDM0LCAweDAwLCAweEMzLCAweDIwLCAweDBDLCAweDgzLCAweDMwLCAweDA0LCAweEMwLCAweDMwLCAweDA4LCAweDQzLCAweDAwLAorMHgwQywgMHg4MywgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwKKzB4QzAsIDB4MTAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsCisweEMyLCAweDIwLCAweDBFLCAweDAzLCAweDEwLCAweDA0LCAweDYyLCAweDMwLCAweDAwLCAweEMxLCAweDIwLCAweDA2LCAweDAzLAorMHgxMCwgMHgwQywgMHg2MiwgMHgzMCwgMHg4OCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMywgMHgxOCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MDAsIDB4QzEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MzAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDYsCisweDgzLCAweDE4LCAweDA0LCAweDYwLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLAorMHgxMCwgMHg4OCwgMHgwMSwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHg0MiwKKzB4MDAsIDB4MDYsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MDAsIDB4MEMsIDB4ODEsIDB4MTAsCisweDA0LCAweEMwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LAorMHg0MSwgMHgwMCwgMHgwOCwgMHgwMSwgMHgzMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMSwKKzB4MzAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsCisweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDgwLCAweDQyLCAweDIwLAorMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwQywgMHg4MSwgMHgxMCwgMHgwNCwKKzB4QzIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsCisweDIwLCAweDBDLCAweDgzLCAweDMwLCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDA2LCAweDgxLCAweDMwLAorMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4MDIsIDB4MDAsIDB4MDgsCisweDgwLCAweDAwLCAweDAwLCAweEEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4MCwgMHgyMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwOCwgMHgwMiwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4QTIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MEEsIDB4MDAsIDB4MjAsIDB4MDAsCisweEEwLCAweDAwLCAweDg4LCAweDAyLCAweDIwLCAweDBBLCAweDgwLCAweDI4LCAweDAwLCAweEEyLCAweDAwLCAweDg4LCAweDQyLAorMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwKKzB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsCisweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLAorMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwKKzB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MjgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDQwLCAweEEwLCAweDAwLCAweDAxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyOCwKKzB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsCisweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLAorMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NjIsIDB4QzAsIDB4OEEsIDB4ODEsIDB4MkIsIDB4MDYsCisweEFDLCAweDE4LCAweEI4LCAweDYyLCAweEMwLCAweDhBLCAweDgxLCAweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYyLAorMHhDMCwgMHg4QSwgMHg4MSwgMHgyQiwgMHgwNiwgMHhBRSwgMHgxOCwgMHhCOCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwKKzB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsCisweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDI5LCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDAyLCAweDg4LCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFMiwKKzB4MTgsIDB4ODgsIDB4NjMsIDB4NjAsIDB4OEUsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RTYsIDB4MTgsIDB4ODgsIDB4NjMsIDB4MjAsCisweDhFLCAweDgxLCAweDM4LCAweDA2LCAweEUyLCAweDE4LCAweDg4LCAweDYzLCAweDUwLCAweDhFLCAweDgxLCAweDM5LCAweDA2LAorMHhFMiwgMHgxOCwgMHg5OCwgMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOSwgMHgwNCwgMHhFMiwgMHgxOCwgMHg4OCwgMHg2MywKKzB4MjAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDYsIDB4RTIsIDB4MTgsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDYyLCAweDAwLCAweDhFLCAweDAxLCAweDNCLCAweDA2LCAweEU0LCAweDE4LAorMHhCMCwgMHg2MywgMHgwMCwgMHg4RSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFMCwgMHgxOCwgMHg4MCwgMHg2MywgMHg0MCwgMHg4RSwKKzB4MDEsIDB4MzksIDB4MDYsIDB4RUMsIDB4MTgsIDB4QjAsIDB4NjMsIDB4ODAsIDB4OEUsIDB4MDEsIDB4MzgsIDB4MDYsIDB4RTQsCisweDE4LCAweDgwLCAweDYzLCAweDQwLCAweDhFLCAweDAxLCAweDM4LCAweDA2LCAweEU0LCAweDE4LCAweDkwLCAweDYzLCAweDQwLAorMHgwRSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFNCwgMHgxOCwgMHg5MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEEsIDB4QTIsIDB4NjIsIDB4NjAsIDB4OEMsIDB4MDEsIDB4MzAsIDB4MDYsIDB4RUEsIDB4MTgsIDB4ODAsCisweDYzLCAweDIwLCAweDhDLCAweDAxLCAweDMwLCAweDA2LCAweEMyLCAweDE4LCAweDE4LCAweDYzLCAweEEwLCAweDhFLCAweDAxLAorMHgzMCwgMHgwNiwgMHhDMCwgMHgxOCwgMHgwMCwgMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzMCwgMHgwNiwgMHhFQSwgMHgxOCwKKzB4MDgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4ODEsIDB4MzAsIDB4MDYsIDB4RUEsIDB4MTgsIDB4QTgsIDB4NjMsIDB4QTAsIDB4OEUsCisweDgxLCAweDNBLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDQzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyNCwgMHgwMSwgMHg5QSwgMHgwNCwgMHg0OCwgMHgxMiwgMHgyMCwgMHg0OSwKKzB4ODAsIDB4MkUsIDB4MDEsIDB4OTAsIDB4MDQsIDB4RTgsIDB4MTIsIDB4MDAsIDB4NDksIDB4ODAsIDB4MjQsIDB4MDEsIDB4OTAsCisweDA0LCAweDY4LCAweDEyLCAweEEwLCAweDQxLCAweDgwLCAweDJDLCAweDAxLCAweEJBLCAweDA0LCAweDQ4LCAweDEwLCAweEEwLAorMHg0MywgMHg4MCwgMHgyNCwgMHgwMSwgMHhCQSwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0OSwgMHg4MCwgMHgwNCwgMHgwMSwKKzB4OTIsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDYwLCAweDAwLCAweDg0LCAweDAxLCAweDEwLCAweDA2LCAweDYwLCAweDE4LCAweDAwLCAweDYxLCAweDIwLAorMHg4NiwgMHgwMSwgMHgxMCwgMHgwNiwgMHg2MiwgMHgxOCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg4NiwgMHgwMSwgMHgxMCwgMHgwNiwKKzB4NDAsIDB4MTgsIDB4MDAsIDB4NjEsIDB4MjAsIDB4ODYsIDB4ODEsIDB4MTgsIDB4MDYsIDB4NjAsIDB4MTgsIDB4ODgsIDB4NjEsCisweDAwLCAweDg2LCAweDgxLCAweDU4LCAweDA2LCAweDYwLCAweDE4LCAweDgwLCAweDYxLCAweDAwLCAweDg2LCAweDAxLCAweDE4LAorMHgwNiwgMHg2MCwgMHgxOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTIsIDB4MDYsIDB4MjAsIDB4MUUsIDB4MDAsIDB4NzAsIDB4MDAsIDB4QzIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MjAsIDB4MUUsCisweDAwLCAweDcwLCAweDAwLCAweEMyLCAweDAxLCAweDg4LCAweDA3LCAweDIwLCAweDFDLCAweDAwLCAweDcwLCAweDAwLCAweEMwLAorMHgwMSwgMHgwMCwgMHgwNywgMHgyMCwgMHgxQywgMHg4MCwgMHg3MCwgMHgwMCwgMHhFMiwgMHgwMSwgMHg4OCwgMHgwNywgMHgyMCwKKzB4MUUsIDB4ODAsIDB4NzgsIDB4MDAsIDB4QzIsIDB4MDEsIDB4ODgsIDB4MDcsIDB4MjAsIDB4MUUsIDB4ODAsIDB4NzgsIDB4MDAsCisweEUyLCAweDAxLCAweDg4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLAorMHg0QSwgMHgwMCwgMHgyNiwgMHg4MywgMHg5MCwgMHgwNCwgMHg0MCwgMHgxMiwgMHgwOCwgMHg0OSwgMHgwMCwgMHgyNiwgMHg4MSwKKzB4OTAsIDB4MDQsIDB4NDAsIDB4MTIsIDB4ODAsIDB4NDksIDB4MDAsIDB4MjQsIDB4ODEsIDB4OTAsIDB4MDQsIDB4NDIsIDB4MTIsCisweDA4LCAweDQxLCAweDAwLCAweDI0LCAweDAxLCAweDkwLCAweDA0LCAweDYwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDI2LAorMHgwMSwgMHg5OCwgMHgwNCwgMHg0MCwgMHgxMCwgMHg4MCwgMHg0OSwgMHgwMCwgMHgwNiwgMHgwMSwgMHg5OCwgMHgwNCwgMHg2MCwKKzB4MTIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4NDIsCisweDIwLCAweDA0LCAweDgxLCAweDE4LCAweDA1LCAweDYyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLCAweDE4LAorMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg1MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwKKzB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsCisweDEwLCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLAorMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHgwMCwKKzB4MDIsIDB4ODEsIDB4MjgsIDB4MEMsIDB4QTIsIDB4MzAsIDB4ODgsIDB4NDIsIDB4MDAsIDB4MDIsIDB4ODMsIDB4MjgsIDB4MEMsCisweEEwLCAweDEwLCAweDgwLCAweEMwLCAweDIwLCAweDBBLCAweDgzLCAweDI4LCAweDBDLCAweEEyLCAweDMwLCAweDg4LCAweEMyLAorMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwNCwgMHgyMiwgMHgxMCwgMHg4MCwgMHg0MCwgMHgyMCwgMHgwMiwgMHgwMSwgMHgwOCwKKzB4MDQsIDB4QTIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4ODEsIDB4MDgsIDB4MDQsIDB4MjIsIDB4MTAsIDB4ODgsCisweDAwLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDAwLCAweDBBLAorMHgwMSwgMHgyOCwgMHgwNSwgMHhBMCwgMHgxMCwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwQywgMHhBMCwKKzB4MTAsIDB4ODAsIDB4NTIsIDB4MDAsIDB4MEEsIDB4MDEsIDB4MjgsIDB4MDQsIDB4QTAsIDB4MTAsIDB4ODAsIDB4QzIsIDB4MDAsCisweDBBLCAweDAzLCAweDI4LCAweDBDLCAweEEwLCAweDMwLCAweDgwLCAweEMyLCAweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDBDLAorMHg4MCwgMHgzMCwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwNCwgMHhBMCwgMHgzMCwgMHg4MCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MDYsIDB4MDAsCisweDA4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDExLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDA0LAorMHg4OCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsCisweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHg0MCwgMHgwMCwgMHg4MSwgMHgwMSwKKzB4MDQsIDB4MDQsIDB4MTAsIDB4MTgsIDB4NDAsIDB4NDAsIDB4MDAsIDB4ODMsIDB4MDEsIDB4MDUsIDB4MDQsIDB4MTAsIDB4MTAsCisweDQwLCAweDQwLCAweDAwLCAweDgxLCAweDAxLCAweDA0LCAweDA2LCAweDEwLCAweDE4LCAweDUwLCAweDQwLCAweDQwLCAweDAxLAorMHgwMSwgMHgwQywgMHgwNCwgMHgxMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNSwgMHg4NCwgMHgxMCwKKzB4MTAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDAyLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLAorMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHg2MCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg4OCwgMHgwMSwKKzB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NjAsIDB4MDYsIDB4ODAsIDB4MTksCisweDAwLCAweDYyLCAweDAwLCAweDk4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE5LCAweDAwLCAweDYyLCAweDAwLCAweDg4LAorMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MjQsIDB4MDAsIDB4OTksIDB4MDAsIDB4NjQsCisweDAyLCAweDEwLCAweDA5LCAweDAwLCAweDJFLCAweDAwLCAweDkxLCAweDAwLCAweEUwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLAorMHgyNiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHgwMCwgMHgyRSwgMHgwMCwgMHhCOCwgMHgwMCwKKzB4NjQsIDB4MDAsIDB4ODAsIDB4MEIsIDB4NDAsIDB4MjYsIDB4MDAsIDB4QjgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4OTgsIDB4MDksCisweDQwLCAweDI2LCAweDAwLCAweDk5LCAweDAwLCAweDY0LCAweDAwLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHgwNiwgMHg2MCwgMHgxNCwgMHgwMCwgMHg1MCwgMHgwMCwgMHhDMiwgMHgwMSwKKzB4MDAsIDB4MDUsIDB4MjAsIDB4MTYsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4MTgsIDB4MDUsIDB4MjAsIDB4MUMsCisweDAwLCAweDUwLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDIwLCAweDE2LCAweDgwLCAweDU4LCAweDAwLCAweEMyLAorMHgwMSwgMHg4OCwgMHgwNSwgMHgyOCwgMHgxQywgMHg4MCwgMHg1OCwgMHgwMCwgMHhDMiwgMHgwMSwgMHgwOCwgMHgwNywgMHgyMCwKKzB4MUMsIDB4ODAsIDB4NzAsIDB4MDgsIDB4QzIsIDB4MDEsIDB4MDgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBBLCAweDAwLCAweDgwLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweEMwLCAweDIwLCAweDAwLAorMHhBMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwQywgMHgwMiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjAsCisweDAwLCAweEExLCAweDAwLCAweDhDLCAweDAyLCAweDEwLCAweDA4LCAweEMwLCAweDI4LCAweDAwLCAweEUzLCAweDAwLCAweDFDLAorMHgwMiwgMHgzMCwgMHgwQSwgMHhDMCwgMHgyMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4QTQsIDB4MDAsIDB4OTAsIDB4MDIsIDB4QzAsIDB4MEEsIDB4MDAsIDB4QTksCisweDIwLCAweEFDLCAweDAwLCAweEIwLCAweDBBLCAweEMyLCAweDA4LCAweDAwLCAweDI5LCAweDAwLCAweEFDLCAweDAwLCAweEIwLAorMHgwMiwgMHhDMCwgMHgwQSwgMHgwMCwgMHhBQiwgMHgyMCwgMHhBQywgMHg4MiwgMHhCMCwgMHgwNiwgMHhDMCwgMHgyOCwgMHgwOCwKKzB4QUIsIDB4MDAsIDB4QUMsIDB4ODIsIDB4QjAsIDB4MEEsIDB4QzAsIDB4M0EsIDB4MDgsIDB4QUIsIDB4MDAsIDB4QUMsIDB4MDIsCisweEIwLCAweDBFLCAweEMwLCAweDI4LCAweDAwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhBMiwgMHhDMiwgMHgyMCwgMHgwNiwgMHgwMywgMHgxOCwgMHgwQywgMHg2MiwgMHgzMCwgMHg4MCwgMHhFMSwgMHgyMCwKKzB4MDYsIDB4MDMsIDB4MTgsIDB4MEMsIDB4NjIsIDB4MzAsIDB4ODgsIDB4QzEsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MTgsIDB4MEMsCisweDYwLCAweDMwLCAweDgwLCAweEMxLCAweDIwLCAweDA2LCAweDgzLCAweDE4LCAweDBFLCAweDYyLCAweDMwLCAweDg4LCAweEUxLAorMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwgMHgwQywgMHg2MiwgMHgzOCwgMHg4MCwgMHhFMSwgMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwKKzB4MEUsIDB4NjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDgwLCAweDAyLCAweDAwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDA4LCAweDAxLCAweDAwLCAweDA0LAorMHg4MCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwKKzB4MDAsIDB4MDgsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwKKzB4MTIsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODAsIDB4ODgsIDB4MTEsIDB4MjAsIDB4MDYsIDB4ODgsCisweDE4LCAweDIwLCAweDYyLCAweDg0LCAweDg4LCAweDAxLCAweDIyLCAweDA2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDgwLAorMHg4OCwgMHgwMSwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgwMSwgMHg2MiwgMHg4NCwgMHg4OCwgMHgzMSwgMHgyMCwgMHg0NiwKKzB4ODAsIDB4MTgsIDB4MjAsIDB4NjIsIDB4MDQsIDB4ODAsIDB4MTEsIDB4MjAsIDB4NDYsIDB4ODgsIDB4MTgsIDB4MDEsIDB4NjIsCisweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDAyLAorMHgwMiwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHg4MCwgMHg4OCwgMHgyMiwgMHgwMCwgMHgwQSwgMHg4OCwgMHgyOCwKKzB4MDAsIDB4QTAsIDB4ODAsIDB4ODAsIDB4MDIsIDB4MjIsIDB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QTIsIDB4ODAsIDB4ODgsCisweDAyLCAweDAyLCAweDBBLCAweDAwLCAweDI4LCAweDIwLCAweEEyLCAweDgwLCAweDgwLCAweDAyLCAweDIyLCAweDBBLCAweDAyLAorMHgyOCwgMHgyMCwgMHhBMiwgMHg4MCwgMHg4MCwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHgwMCwKKzB4ODgsIDB4MDIsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDQsCisweDQyLCAweDEwLCAweDI4LCAweDAxLCAweEEwLCAweDA0LCAweDgxLCAweDEyLCAweDA0LCAweDQyLCAweDEwLCAweDI4LCAweDQxLAorMHhBMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0QSwgMHgxMCwgMHgyOCwgMHg0MSwgMHhBMCwgMHgwNCwgMHg4MSwgMHgxMiwKKzB4MDQsIDB4NEEsIDB4MTAsIDB4MjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsCisweDAxLCAweEEwLCAweDA0LCAweDgxLCAweDEwLCAweDAwLCAweDQyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA0LCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhBMCwgMHg0MCwKKzB4MDEsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDAsCisweDE0LCAweDI4LCAweDUwLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDE0LCAweDIwLCAweDUwLCAweDAwLAorMHg0MCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwOCwgMHgzNCwgMHgyMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNSwKKzB4MDAsIDB4MTQsIDB4MjAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgyLCAweEIyLCAweEMwLCAweENBLCAweDgyLAorMHgyMSwgMHgwQiwgMHhBNCwgMHgyQywgMHgxOCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyOCwgMHgwQiwgMHg4NCwgMHgyQywKKzB4QjAsIDB4QjIsIDB4NDAsIDB4QzgsIDB4ODIsIDB4MjEsIDB4MEIsIDB4ODYsIDB4MkMsIDB4ODAsIDB4QjIsIDB4NDAsIDB4QzgsCisweDAyLCAweDIxLCAweDBCLCAweEFDLCAweDJDLCAweEIwLCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDJCLCAweDBCLCAweDg0LAorMHgyQywgMHhCMCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyQiwgMHgwQiwgMHhBQywgMHgyQywgMHhCMCwgMHgwMiwgMHg4OCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTIsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsCisweDAxLCAweEVBLCAweDA0LCAweDg4LCAweDEzLCAweDYwLCAweDRFLCAweDgwLCAweDNBLCAweDAxLCAweEU2LCAweDA0LCAweDg4LAorMHgxMywgMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHhBOCwgMHgxMywgMHg2MCwgMHg0RSwgMHgwMCwKKzB4MzksIDB4MDEsIDB4RTIsIDB4MjQsIDB4OTgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4ODIsIDB4MzksIDB4MDEsIDB4RTIsIDB4MDQsCisweDg4LCAweDEzLCAweDIwLCAweDRFLCAweDgyLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDg4LCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHgwMCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywKKzB4MjAsIDB4MzAsIDB4ODAsIDB4QzAsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzEsIDB4ODAsIDB4QzAsCisweDEwLCAweDAyLCAweDAzLCAweDA4LCAweDBDLCAweDIwLCAweDMwLCAweDgwLCAweEMwLCAweDA4LCAweDAyLCAweDAzLCAweDA4LAorMHgwQywgMHgyMCwgMHgzMSwgMHg4MiwgMHhDMCwgMHgxOCwgMHgwMiwgMHg0MywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMCwgMHg4NiwKKzB4QzAsIDB4MDAsIDB4MDIsIDB4NjMsIDB4MDgsIDB4MEMsIDB4MjEsIDB4MzEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLAorMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwKKzB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsCisweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLAorMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHhEQiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgyRiwgMHhDRCwgMHgzNiwKKzB4RkMsIDB4REYsIDB4RDAsIDB4NkMsIDB4NDMsIDB4RkIsIDB4MEQsIDB4Q0QsIDB4MzYsIDB4MzQsIDB4REIsIDB4RDAsIDB4NkMsCisweDQzLCAweEIzLCAweDBELCAweENELCAweDM2LCAweDM0LCAweERCLCAweEQwLCAweDdFLCAweEMzLCAweEI3LCAweDJGLCAweENELAorMHgzNiwgMHg3QywgMHhEQiwgMHhGMCwgMHg3RiwgMHg0MywgMHhCMywgMHgyRiwgMHhERiwgMHgzNiwgMHhGQywgMHhGRiwgMHhEMiwKKzB4NkMsIDB4QzMsIDB4QjcsIDB4MEQsIDB4RUQsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweENDLCAweDNDLCAweDMyLCAweEYzLCAweEM4LCAweENDLCAweDJGLCAweDMzLCAweDhGLCAweEZDLAorMHgzRiwgMHgzMiwgMHhGMywgMHhDOCwgMHhGQywgMHgyMywgMHgzMywgMHg4RiwgMHhDQywgMHgzQywgMHgzMiwgMHhGMywgMHhDOCwKKzB4Q0MsIDB4MjMsIDB4MzMsIDB4OEYsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RkYsIDB4QzgsIDB4Q0YsIDB4MkYsIDB4MzMsIDB4OEYsCisweEZDLCAweDNDLCAweEYyLCAweEZGLCAweEM4LCAweENDLCAweDJGLCAweDNGLCAweDhGLCAweEZDLCAweEZGLCAweDMyLCAweEYzLAorMHhDOCwgMHhDRiwgMHgyMywgMHhGMywgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4REMsIDB4MTgsIDB4MTIsIDB4NjMsIDB4NDgsIDB4OEMsIDB4MjcsIDB4MzEsIDB4ODYsIDB4REMsIDB4MUUsCisweDEyLCAweDYzLCAweDQ4LCAweEVDLCAweDIxLCAweDM3LCAweDg2LCAweEM0LCAweDc4LCAweDEyLCAweDYzLCAweDQ4LCAweDhDLAorMHgyMSwgMHgzMSwgMHg4NiwgMHhDNCwgMHgxRSwgMHgxMiwgMHg3QiwgMHhDOCwgMHg4RCwgMHgyNywgMHhCNywgMHg4NywgMHhEQywKKzB4N0UsIDB4NzIsIDB4N0IsIDB4NDgsIDB4OEMsIDB4MjcsIDB4QjcsIDB4OUYsIDB4REMsIDB4N0UsIDB4MTIsIDB4RkIsIDB4QzksCisweDhELCAweDI3LCAweEI3LCAweDlGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MCwgMHhFMSwgMHgwQywgMHg4NSwgMHgzMywgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwKKzB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsCisweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweENFLCAweDUwLCAweDA4LCAweDQwLCAweDIxLAorMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHhFMSwgMHgwQywgMHg4NSwgMHgwMCwgMHgxNCwKKzB4MDIsIDB4NTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsCisweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LAorMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLAorMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwNCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsCisweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweENFLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwNCwgMHgwOCwgMHgwMCwgMHhFMCwgMHg0QywgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweENDLCAweDQwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgzMywgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDMSwKKzB4MEMsIDB4MDQsIDB4MDAsIDB4MTAsIDB4Q0MsIDB4NDAsIDB4MzAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweEMxLCAweDBDLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LAorMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweENDLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MTMsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwKKzB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsCisweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LAorMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwKKzB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsCisweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLAorMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsCisweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LAorMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywKKzB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MzMsCisweDAwLCAweDAyLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwKKzB4MDAsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4NDMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDMzLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwKKzB4Q0UsIDB4NDAsIDB4MDgsIDB4MDAsIDB4RTEsIDB4MEMsIDB4ODQsIDB4MDAsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4MzgsIDB4MDMsCisweDIxLCAweDAwLCAweDg0LCAweDMzLCAweDEwLCAweENFLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDMzLAorMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAyLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsCisweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDAxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNDLCAweDNDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGMCwKKzB4RjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLAorMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsCisweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLAorMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwKKzB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsCisweDUwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwKKzB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsCisweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLAorMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsCisweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwKKzB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLAorMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4Q0UsIDB4NTQsCisweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDMzLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLAorMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgzOCwgMHg1MywgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwKKzB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsCisweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLAorMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwKKzB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsCisweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LAorMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsCisweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLAorMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywKKzB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MzMsCisweDAwLCAweENFLCAweDAwLCAweDM4LCAweDQzLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsCisweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwKKzB4MDIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQywgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RjAsIDB4RjAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywKKzB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNCwgMHg4MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MjIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNCwgMHg4MCwgMHg0MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDAwLCAweDIyLCAweDI1LCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweEMwLCAweDBDLCAweDAwLAorMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDBDLCAweDAwLCAweDA1LCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4NywgMHhFOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQ2MTBfZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0NjEwX2Zpcm13YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1MGQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0NjEwX2Zpcm13YXJlLmgKQEAgLTAsMCArMSw1NDA5IEBACisvKgorICAgVGhpcyBmaWxlIGlzIGNvcHlyaWdodCBieSBNZWlsaGF1cyBFbGVjdHJvbmljIEdtYkggMjAwMy4KKyAgIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSwgc2VsbCwgbW9kaWZ5LCByZXZlcnNlIGVuZ2luZWVyIG9yIHVzZSB0aGlzCisgICBjb2RlIChvciBwYXJ0cyBvZiBpdCkgZm9yIGFueSBvdGhlciBwdXJwb3NlIG9yIHVuZGVyIGFueSBvdGhlciBjb25kaXRpb25zCisgICB0aGFuIHN0YXRlZCBiZWxvdy4KKworICAgMSkgWW91IGFyZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZmlsZSB0b2dldGhlcgorICAgd2l0aCBkZXZpY2UgZHJpdmVycyBmb3IgdGhlIE1laWxoYXVzIE1FLTQwMDAsIGJvYXJkIGZhbWlseS4KKworICAgMikgRGVyaXZlZCB3b3JrIChkZXZpY2UgZHJpdmVycyB1c2luZyB0aGlzIGZpbGUpIGNhbiBiZSBwdWJsaXNoZWQgdW5kZXIKKyAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gQW55IG90aGVyIGxpY2Vuc2UgdGVybXMgaGF2ZQorICAgdG8gYmUgYWdyZWVkIGJ5IE1laWxoYXVzIEdtYkggaW4gd3JpdHRlbi4KKworICAgMikgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOworICAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIE1laWxoYXVzIGlzIHVuZGVyCisgICBubyBtZWFucyBsaWFibGUgZm9yIHByb2R1Y3RzIHVzaW5nIHRoaXMgZmlsZSBvciBwYXJ0cyBvZiBpdC4KKworICAgMykgVGhlIGNvcHlyaWdodCBvZiB0aGlzIGZpbGUgaGFzIHRvIGJlIG1lbnRpb25lZCBpbiBkZXJpdmVkIHdvcmsuCisKKyAgIDQpIElmIHRoaXMgbGljZW5zZSB0ZXJtcyBhcmUgbm90IHZhbGlkIGR1ZSB0byBhbnkgb3RoZXIgbGF3CisgICBvciByZXN0cmljdGlvbnMgaW1wb3NlZCBvbiB5b3UsIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlCisgICB0aGlzIGZpbGUgaW4gYW55IHdheSBhdCBhbGwuCisgKi8KKworLyogVmVyc2lvbiAwIG9mIE1FLTQ2MTAgZmlybXdhcmUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHhpbGlueF9maXJtXzQ2MTBbXSA9IHsKKzB4MDAsIDB4MDEsIDB4MTEsIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDQsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDU1LCAweDk5LCAweEFBLCAweDY2LCAweDBDLCAweDAwLAorMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgwNiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RDAsIDB4MEMsIDB4ODAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDEsIDB4RkMsIDB4QjQsIDB4MEMsIDB4MDAsIDB4MDMsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDBDLAorMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MEEsIDB4MDAsIDB4N0MsIDB4MjAsIDB4NDAsIDB4NTgsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MDEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCRiwgMHg1OCwgMHg4MCwgMHg1NCwgMHgwMCwKKzB4NDQsIDB4MDEsIDB4MTgsIDB4MDUsIDB4NjAsIDB4MDQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDAsIDB4RDgsIDB4MDAsCisweDYwLCAweDBBLCAweDgwLCAweDJELCAweDAwLCAweEY2LCAweDAwLCAweEQ4LCAweDAzLCAweDYwLCAweDBBLCAweDgwLCAweDY5LAorMHgwMCwgMHhDNiwgMHgwMSwgMHg5OCwgMHgwNSwgMHgyMCwgMHgxNiwgMHhGQywgMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4RkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4MzIsIDB4RjAsCisweDEzLCAweEMwLCAweDRGLCAweDAwLCAweEZCLCAweDI4LCAweEJDLCAweDA0LCAweEIwLCAweDE3LCAweEMwLCAweDRFLCAweDEyLAorMHgxQiwgMHgxMCwgMHhGQywgMHgxMywgMHgzMCwgMHg5MywgMHhDMCwgMHg0QiwgMHgwMCwgMHgxRiwgMHgwMSwgMHhGQywgMHgyNCwKKzB4MzAsIDB4Q0YsIDB4RTIsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDA4LCAweDM3LCAweDAxLCAweDlELCAweDA2LCAweDQ0LCAweDMwLCAweEQxLCAweDExLCAweDQwLCAweDQ3LCAweDAwLAorMHhGRCwgMHgwQSwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgxNywgMHgwOSwgMHgxMSwgMHg0MiwgMHhGNCwgMHgwQiwKKzB4NTAsIDB4NDksIDB4NDAsIDB4MDYsIDB4MEMsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4OEYsIDB4NDAsIDB4MDQsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDMzLCAweDAwLAorMHg4RCwgMHgxOCwgMHgwNSwgMHgxNiwgMHhEQSwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHg0MCwgMHg3NCwgMHgwMywKKzB4OTEsIDB4MEMsIDB4NDAsIDB4MzUsIDB4MDEsIDB4MEQsIDB4MjAsIDB4MzQsIDB4QTMsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MDEsCisweDAxLCAweENELCAweEEwLCAweDc0LCAweDEzLCAweEQyLCAweDRDLCAweDQwLCAweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg0NCwgMHg4NiwKKzB4RDAsIDB4MzksIDB4NDAsIDB4MDcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NjQsIDB4OEEsIDB4MTAsIDB4ODksIDB4MDIsIDB4MzcsCisweDAwLCAweDE1LCAweDEwLCAweDc0LCAweDAzLCAweDUwLCAweDE5LCAweDA3LCAweDQ3LCAweDIwLCAweDVELCAweDA0LCAweDc0LAorMHhBMywgMHhEQSwgMHgwRCwgMHg0OCwgMHgwQywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTgsIDB4NzcsIDB4MDAsIDB4MUYsIDB4OTEsIDB4NEMsIDB4ODYsIDB4RTAsIDB4MTksIDB4QzAsIDB4NTcsCisweDIxLCAweERCLCAweDAwLCAweDdDLCAweDAxLCAweEIwLCAweDA1LCAweDgwLCAweDA2LCAweDkxLCAweDFCLCAweDBCLCAweDdDLAorMHgwMywgMHgzMSwgMHgzMSwgMHhDMCwgMHg0NywgMHgwMSwgMHg5RiwgMHg0NCwgMHg3QywgMHgwMiwgMHhEMCwgMHgwRCwgMHg2MCwKKzB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsCisweDAyLCAweDNFLCAweDQwLCAweEU4LCAweDAwLCAweEYwLCAweDBCLCAweDQwLCAweDhGLCAweDAwLCAweEZFLCAweDAwLCAweEY0LAorMHg0OCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgxRiwgMHg4MCwgMHgxQSwgMHgyMCwgMHhCQywgMHgwMywgMHhFMSwgMHgwQiwgMHhDOCwKKzB4MEUsIDB4MDAsIDB4M0UsIDB4MDEsIDB4RjgsIDB4MDIsIDB4MzAsIDB4MEYsIDB4RDEsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweDlGLCAweDAwLCAweDVDLAorMHg0NiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg3QywgMHgyMSwgMHgzMCwgMHgwRCwgMHhDNCwKKzB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4ODMsIDB4QjAsIDB4MjksIDB4QzAsIDB4ODQsIDB4MDgsIDB4OUYsIDB4NDQsCisweDdDLCAweDQzLCAweEYwLCAweDBDLCAweEM0LCAweDBBLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQSwgMHg5MCwgMHgwOSwgMHg0MCwKKzB4NjcsIDB4MDAsIDB4RjAsIDB4ODAsIDB4MzQsIDB4MDQsIDB4QjAsIDB4QjksIDB4NDAsIDB4MzIsIDB4MDAsIDB4RDEsIDB4NDEsCisweEMwLCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDUxLCAweDAwLCAweDM0LCAweDQzLCAweEQwLCAweDNGLAorMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwKKzB4MzIsIDB4MTAsIDB4MUQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OTAsIDB4MTAsIDB4NDAsIDB4QTMsIDB4ODQsIDB4QzksIDB4MDAsCisweDM0LCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweEMwLCAweDIxLCAweDAwLCAweDAzLCAweDkwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MywgMHgwNCwgMHg4OSwgMHhEOCwgMHgwQywgMHg0MCwgMHgxQywgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODIsIDB4NzgsIDB4MDIsIDB4RUMsIDB4ODEsCisweEI0LCAweDA1LCAweDlBLCAweDkyLCAweDYwLCAweDRCLCAweDkwLCAweEUxLCAweEE5LCAweEI2LCAweDA2LCAweDkwLCAweDFBLAorMHg2MCwgMHg3QSwgMHgwMCwgMHhFMSwgMHgxMywgMHhBNCwgMHgwNywgMHhDMCwgMHgxMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHg2MSwKKzB4MzUsIDB4QjQsIDB4MjUsIDB4QzAsIDB4OUYsIDB4NjEsIDB4MTgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDEwLCAweDRELCAweDAwLCAweDFDLCAweEExLCAweDc4LCAweDgwLAorMHhFMSwgMHgzMywgMHgyNSwgMHhDRiwgMHgyMCwgMHgzQywgMHgyMywgMHgzMCwgMHgyQywgMHhDMSwgMHgzNCwgMHgwOCwgMHgwNywKKzB4MDUsIDB4MEQsIDB4MDMsIDB4QjAsIDB4QzAsIDB4RTgsIDB4MTAsIDB4MjIsIDB4Q0YsIDB4NDEsIDB4M0MsIDB4MTcsIDB4RjIsCisweERELCAweEQwLCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhCMiwgMHgzRCwgMHgwOCwgMHhGRiwgMHgwMCwgMHhGRSwgMHhBMywgMHg4MCwgMHg4RiwgMHhDMiwgMHgxQiwgMHgwMCwgMHhGRiwKKzB4ODAsIDB4RkUsIDB4MDMsIDB4RjAsIDB4MEIsIDB4NDAsIDB4M0YsIDB4MTAsIDB4MzcsIDB4MDgsIDB4REMsIDB4NjMsIDB4RjAsCisweDg3LCAweEM2LCAweDNGLCAweDA4LCAweERGLCAweDAwLCAweDdDLCAweDIzLCAweEZBLCAweDhGLCAweEMyLCAweDA5LCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHg3NywgMHgwMCwgMHg1NywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MTAsIDB4NUMsIDB4MDEsIDB4RjAsCisweDE4LCAweEMwLCAweDY2LCAweDAwLCAweEQzLCAweDAwLCAweDZDLCAweDEzLCAweEYwLCAweDAxLCAweEM4LCAweDE3LCAweDEwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMiwgMHhCRCwgMHhDNSwgMHg1NCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTgsIDB4M0QsIDB4MDAsIDB4NjEsIDB4ODAsIDB4QjYsIDB4MDEsIDB4RDAsCisweDBBLCAweDQ4LCAweDM4LCAweDAwLCAweEZELCAweDA2LCAweDg0LCAweDAzLCAweEQyLCAweDBBLCAweDQwLCAweDM5LCAweDQwLAorMHhGMSwgMHg4MCwgMHg4NiwgMHg0MywgMHhEMCwgMHgwQSwgMHg0OCwgMHgxQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4MTAsIDB4MEYsIDB4NDAsIDB4NDgsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweDAwLCAweDc5LCAweDgwLCAweEU1LCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDE3LCAweDQwLCAweDc5LCAweDA4LAorMHhFQywgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywKKzB4RDAsIDB4MUUsIDB4NjAsIDB4NzksIDB4MDAsIDB4QUQsIDB4MTEsIDB4QTQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4MEMsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDIzLCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MiwgMHgzMSwgMHgwMiwgMHhDRCwgMHgwMCwgMHgxNCwgMHg0QiwKKzB4RDEsIDB4MDgsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MEQsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzMsCisweDAxLCAweENELCAweDgwLCAweDc0LCAweDBCLCAweDUwLCAweDBDLCAweDQwLCAweDQ4LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxNCwgMHgwMSwgMHg3NywgMHgwMywgMHhGQywgMHgyOSwKKzB4RDAsIDB4MTcsIDB4QzEsIDB4NUQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4OUMsIDB4MTksIDB4RDAsIDB4MDcsIDB4QzAsIDB4MUUsCisweDAwLCAweDczLCAweDAyLCAweDRDLCAweDAxLCAweEYwLCAweDQ3LCAweEMwLCAweDFGLCAweDhDLCAweDdGLCAweDAwLCAweEZDLAorMHgwOSwgMHg3MiwgMHgwNSwgMHg0MCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDYsCisweDAwLCAweDBFLCAweDQwLCAweDY4LCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFGLCAweDQyLCAweDVDLAorMHgwMCwgMHhCMiwgMHgxMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgxMCwgMHg3QywgMHgxMCwgMHg4MiwgMHgwMSwgMHhDMCwKKzB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjcsCisweDAwLCAweDhGLCAweDEwLCAweDU0LCAweDBBLCAweEYyLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlCLCAweDAwLCAweDRDLAorMHgwNiwgMHhEMCwgMHg5OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg4RiwgMHgwNCwgMHg1QywgMHg4MiwgMHhFMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4ODksIDB4QzIsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDEwLCAweDlDLCAweDAwLCAweDU0LAorMHgwMiwgMHhEMCwgMHhCOSwgMHg0MCwgMHhFNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg2QSwgMHgxMCwgMHgxOSwgMHgwNCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDUsIDB4MDIsIDB4QzIsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTAsIDB4MTMsCisweDc0LCAweDIyLCAweDEwLCAweDU5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwKKzB4RTcsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NDUsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDEsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDIsCisweDQ0LCAweDgyLCAweDkwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjAsIDB4MDIsIDB4OEQsIDB4MTQsIDB4MTQsIDB4NTYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OEQsIDB4MDAsCisweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAyLCAweDhELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDg4LAorMHgwMCwgMHgyMywgMHgwMiwgMHg4MSwgMHgwMCwgMHgzMCwgMHgwMiwgMHgxNCwgMHg0OCwgMHg0OSwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDAsIDB4MUYsIDB4MjQsCisweDRDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDEwLCAweDFFLCAweDE0LCAweDRDLCAweDAwLCAweEIwLCAweEExLAorMHhDMiwgMHg4MywgMHgwMCwgMHgxRiwgMHgxRSwgMHg0QywgMHg3OCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxNywKKzB4MEEsIDB4M0MsIDB4ODEsIDB4MzAsIDB4NDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEIwLCAweDJGLCAweDAxLCAweEJGLCAweDk0LCAweEZDLCAweDUyLCAweEYyLCAweDBBLAorMHhDOCwgMHgyRiwgMHgwMCwgMHg5QywgMHgxNCwgMHhGQywgMHgwMiwgMHhCMCwgMHgxRiwgMHg4MCwgMHgyRiwgMHgwMSwgMHhCRiwKKzB4ODEsIDB4NzAsIDB4MDYsIDB4RjEsIDB4NEYsIDB4QzAsIDB4MkYsIDB4NDEsIDB4QkYsIDB4MDEsIDB4RkMsIDB4NTMsIDB4RjAsCisweDQ5LCAweDQxLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LAorMHg4MCwgMHgyMywgMHgwMCwgMHg5NywgMHgwOCwgMHhGMCwgMHgzNywgMHgzMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgyMCwgMHg5RiwKKzB4MEMsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4QTIsIDB4MDAsIDB4QkYsIDB4MTAsIDB4NEMsIDB4MDIsIDB4RjAsCisweDI5LCAweEMwLCAweDI1LCAweDAyLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDY0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMSwgMHgwMSwKKzB4MDUsIDB4NzQsIDB4M0QsIDB4QjAsIDB4MDEsIDB4NDAsIDB4MTcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDEsIDB4RDEsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDBELCAweDAyLCAweDUxLCAweDI4LCAweDkxLCAweDAxLCAweDQwLCAweDE0LCAweDExLAorMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0OCwgMHg3MSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDQsIDB4ODUsIDB4NDIsIDB4MzQsIDB4MDIsIDB4NTksCisweDA4LCAweDQwLCAweDIzLCAweDA4LCAweDhELCAweDAyLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQyLCAweDIyLCAweDEwLAorMHg4RCwgMHgwMCwgMHgxNiwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMSwgMHgwMCwgMHhDNSwgMHgyMCwgMHg3NCwgMHgwMiwKKzB4MTEsIDB4MDgsIDB4NTAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEE4LCAweDIxLCAweDAwLCAweDkxLCAweDA0LCAweDc0LCAweDAzLCAweEQwLCAweDM5LCAweDYwLCAweDI3LCAweDA4LAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg4RCwgMHg0MiwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDAsIDB4OTUsIDB4MDQsIDB4NzQsIDB4MDIsIDB4NTIsIDB4MDksIDB4NDAsIDB4NjEsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDA4LAorMHg5NywgMHg5MywgMHg3OCwgMHgwQSwgMHg3NCwgMHgxOSwgMHhDMCwgMHhFNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwKKzB4RjAsIDB4MDgsIDB4QzgsIDB4RTYsIDB4MDEsIDB4OUYsIDB4QjgsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MjgsIDB4QzIsIDB4MjUsCisweDAwLCAweDk3LCAweDA0LCAweDNDLCAweDBFLCAweDIwLCAweDA5LCAweEM0LCAweDE0LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg2NCwgMHgwMiwgMHg5RiwgMHgwMCwgMHgzQywgMHgxNiwKKzB4QjAsIDB4MDksIDB4QzQsIDB4RTcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAxLCAweDlGLCAweDAxLCAweDY4LCAweDAyLCAweEIwLCAweDI5LCAweEM0LCAweDI3LCAweDAxLCAweDlCLCAweDAwLCAweDdDLAorMHgwRSwgMHhCNCwgMHgwOCwgMHg0MCwgMHg1MiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDgsIDB4RjAsIDB4NjEsIDB4QzAsIDB4MDcsCisweDAwLCAweDE3LCAweDAwLCAweDRDLCAweDQwLCAweEYwLCAweDIxLCAweDQwLCAweDA0LCAweDAwLCAweDAzLCAweDQyLCAweDVDLAorMHgwMCwgMHgzMCwgMHgyMSwgMHhDMCwgMHg4NywgMHgxMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhEMSwKKzB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsCisweDAwLCAweDUxLCAweDAwLCAweEM0LCAweDBELCAweEQwLCAweDM3LCAweDQwLCAweDFDLCAweDAyLCAweDUxLCAweDIwLCAweENDLAorMHg0MSwgMHhEMiwgMHgwNywgMHg0OCwgMHgxNCwgMHgwMCwgMHg3MSwgMHg0OSwgMHg0NCwgMHg4MSwgMHg1MCwgMHgwNSwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4N0MsIDB4ODIsIDB4QzQsIDB4NjksIDB4RDAsIDB4MDcsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDYwLCAweEMxLCAweDQwLCAweDE0LAorMHhDRiwgMHhDMCwgMHhCNCwgMHg0MCwgMHg3MiwgMHgwMiwgMHhDNSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHg4QywgMHg0MCwKKzB4MzAsIDB4MTAsIDB4QzEsIDB4MEIsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4QzksIDB4MDQsCisweDA0LCAweDgwLCAweEQwLCAweDMwLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MiwgMHgzQywgMHgyMiwgMHhFMSwgMHgwRCwgMHg5NCwgMHg0MywgMHhEMCwgMHgxMiwgMHg0MCwKKzB4N0UsIDB4MDAsIDB4QzEsIDB4MDEsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0MsIDB4NDMsIDB4NjEsIDB4MDAsCisweEE0LCAweDI3LCAweDUwLCAweDBFLCAweDQwLCAweDNCLCAweDEwLCAweEFELCAweDIxLCAweDg0LCAweDAxLCAweEQwLCAweDIzLAorMHg0NCwgMHgxMCwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwKKzB4NzgsIDB4MDEsIDB4RTMsIDB4OTEsIDB4OUQsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4NEEsIDB4MDAsIDB4RTcsIDB4MDEsCisweEFELCAweDA3LCAweEUxLCAweDEzLCAweEMwLCAweDc4LCAweDAyLCAweEEzLCAweDYxLCAweEZDLCAweDM3LCAweDMwLCAweDVFLAorMHhDMSwgMHg3QiwgMHgwMCwgMHhCQiwgMHgwMSwgMHg4QywgMHgwNiwgMHhGQSwgMHgxQiwgMHhDMCwgMHg1MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4MzUsIDB4MDQsIDB4REYsIDB4NDAsCisweDZDLCAweDAzLCAweEYzLCAweDAxLCAweEMwLCAweDAwLCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEQwLCAweDA1LAorMHg5MCwgMHgzNywgMHgwMSwgMHgxRiwgMHgwMCwgMHg1QywgMHg5MywgMHhGMSwgMHhBRCwgMHg4MCwgMHhCNywgMHgwMywgMHg5QywKKzB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweERDLCAweDI1LCAweDMwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhGNywgMHgxMSwgMHhGQywgMHgyNiwgMHgxMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgxMCwgMHg3RiwKKzB4MDksIDB4Q0MsIDB4ODcsIDB4MzAsIDB4OUYsIDB4QzAsIDB4RkMsIDB4OEEsIDB4QkYsIDB4MEQsIDB4RUMsIDB4MjQsIDB4RjEsCisweDE3LCAweEMwLCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHg4OCwgMHgzOSwgMHgyNCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMywgMHhCMCwgMHg0QSwgMHg0OCwgMHgwQiwgMHgwMCwgMHhFRCwKKzB4MDQsIDB4QjQsIDB4MjEsIDB4MTAsIDB4NEUsIDB4NDIsIDB4N0IsIDB4MDEsIDB4MjksIDB4MDEsIDB4ODQsIDB4MDMsIDB4RjAsCisweDBFLCAweDQ0LCAweDM4LCAweDAwLCAweDhELCAweDQzLCAweDM0LCAweDIxLCAweEQwLCAweDg0LCAweDQwLCAweDU3LCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwKKzB4MTAsIDB4OTQsIDB4MDEsIDB4OTgsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDQsIDB4RUQsIDB4ODAsIDB4RjQsIDB4MDAsIDB4OTAsCisweDAyLCAweDQxLCAweDNCLCAweDAxLCAweDBELCAweDA4LCAweDk0LCAweDAzLCAweDEwLCAweDBFLCAweDQ4LCAweDM4LCAweDIwLAorMHgyNSwgMHgwMiwgMHhCNCwgMHgyMCwgMHhEOCwgMHgwRSwgMHg0MCwgMHgyMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4NzQsIDB4NDIsIDB4OTAsCisweDAwLCAweDQwLCAweDAzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDJELCAweDkwLCAweDEwLCAweDQwLCAweDM3LCAweDAwLAorMHgxOSwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgyRCwgMHg0MCwgMHhCMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDg4LCAweDNELCAweDAwLCAweEZGLCAweDAxLCAweDVDLCAweDAyLCAweEIwLCAweEE1LCAweEMwLCAweDI3LCAweDkwLAorMHhGNywgMHgwMCwgMHg3QywgMHgyNywgMHhCNiwgMHhCOSwgMHhDOCwgMHgzRiwgMHgwMCwgMHg5RiwgMHgyMCwgMHhEQywgMHgwMywKKzB4MzAsIDB4QUYsIDB4QzgsIDB4M0MsIDB4MDgsIDB4OEYsIDB4MDEsIDB4NkMsIDB4ODMsIDB4RDAsIDB4MEQsIDB4QzgsIDB4NTcsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLAorMHhERiwgMHgxMCwgMHg3QywgMHgyOCwgMHhGMCwgMHgxNSwgMHhDMCwgMHhBNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywKKzB4NzAsIDB4MjEsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MUUsIDB4NDIsIDB4MjUsIDB4ODMsIDB4QjAsIDB4OEQsIDB4QzAsIDB4MzcsCisweDAwLCAweDFELCAweDAyLCAweDdDLCAweDAzLCAweEQwLCAweDBELCAweEM0LCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgzRiwgMHgyOCwgMHhGQiwgMHg0MCwgMHhGQywgMHgwMiwKKzB4MzAsIDB4MzcsIDB4QzAsIDB4MkYsIDB4MDQsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTYsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsCisweDAwLCAweDMzLCAweDAwLCAweENDLCAweDAzLCAweDcxLCAweDBGLCAweEUwLCAweDNDLCAweDBDLCAweEJGLCAweDIwLCAweERDLAorMHgwMywgMHhGMiwgMHgwQiwgMHhDMiwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4QjAsIDB4MDUsIDB4QzAsIDB4RTcsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDBBLCAweEQwLCAweDExLCAweDQwLCAweDM2LCAweDAwLCAweDFCLCAweDAwLCAweDZDLAorMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHgxQywgMHgwMywgMHg0MCwgMHgwNCwgMHhEMCwgMHgzNSwgMHg0MCwKKzB4ODQsIDB4MDYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDA0LCAweDE4LCAweDBELCAweDQwLCAweDY3LCAweDA0LCAweERELCAweDAwLCAweDY0LAorMHgwQSwgMHhEMCwgMHgxQiwgMHg0MCwgMHgzNywgMHgwMCwgMHgzMSwgMHgwNiwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRCwgMHg0NCwKKzB4MzYsIDB4MDAsIDB4QkQsIDB4MDEsIDB4NDQsIDB4QTMsIDB4RDAsIDB4NjQsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDgwLCAweENELCAweDAwLCAweDM2LAorMHgwMCwgMHgxOCwgMHgwQywgMHg0MCwgMHgwMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMSwgMHgwMCwgMHg0MiwKKzB4MzYsIDB4MjEsIDB4MTksIDB4MjQsIDB4MjQsIDB4MDMsIDB4MTUsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MUQsIDB4MDQsCisweDA0LCAweEE2LCAweEQwLCAweDI4LCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgzRSwgMHgwOCwgMHhGQiwgMHg4MCwgMHg3QywgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwKKzB4MjcsIDB4MDgsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzIsIDB4M0YsIDB4MDUsIDB4MTMsIDB4MTYsCisweDhDLCAweDAzLCAweDcwLCAweDBFLCAweEQwLCAweDNDLCAweDEwLCAweDFGLCAweDFDLCAweDVDLCAweDAxLCAweEYwLCAweDIxLAorMHhDMCwgMHgwNCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCMCwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4NDAsIDB4RkMsIDB4MDIsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4NDAsCisweEJDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDM2LCAweDAwLCAweDFGLCAweDE0LCAweEZDLCAweDAzLCAweEYwLCAweDBGLAorMHhDNCwgMHgzRiwgMHgwMCwgMHgxRiwgMHgwNCwgMHhGRCwgMHgxMCwgMHhGMiwgMHg0MywgMHgwMCwgMHgxNywgMHg2MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0QsIDB4MDIsIDB4RkEsIDB4MDAsCisweEZDLCAweDIwLCAweEIwLCAweDBGLCAweEMwLCAweDNGLCAweDIwLCAweEY3LCAweEEwLCAweEVDLCAweDAzLCAweDMwLCAweDRGLAorMHhDNCwgMHgwRCwgMHgxMCwgMHgzMywgMHgwMSwgMHhGQywgMHgyNywgMHhGMSwgMHgzMywgMHhDMCwgMHgzRSwgMHgwMCwgMHgyRiwKKzB4MDEsIDB4NkMsIDB4ODAsIDB4RjIsIDB4MDMsIDB4QzQsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDM3LCAweDIwLCAweEYxLCAweDgyLCAweDM0LCAweDNBLCAweDEwLCAweDNGLAorMHg0MCwgMHhCRSwgMHgxNiwgMHhGMSwgMHg4OSwgMHhGNCwgMHgwRiwgMHgxMCwgMHg5RiwgMHhDOCwgMHg0NSwgMHgzMiwgMHg5NSwKKzB4MDAsIDB4NzQsIDB4MTEsIDB4RDEsIDB4NDEsIDB4NDAsIDB4M0YsIDB4MjAsIDB4MUQsIDB4NTQsIDB4NDQsIDB4MDQsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLAorMHgyMCwgMHgzMywgMHgxMSwgMHhDMSwgMHgzNiwgMHg3NCwgMHgwMywgMHgxMSwgMHgyQywgMHg0NCwgMHgzMywgMHgwMSwgMHhDNSwKKzB4ODAsIDB4MzQsIDB4MjMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4OTAsCisweDAwLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDgwLCAweEQ4LCAweDAwLCAweDQwLCAweDQ3LCAweDgwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg3NSwgMHgyMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MjAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4ODMsIDB4MTAsCisweDBELCAweDQwLCAweDk3LCAweDAwLCAweDk0LCAweDA0LCAweDc0LCAweDIxLCAweEQwLCAweDExLCAweDQzLCAweDNGLCAweDAwLAorMHgxRCwgMHgxMCwgMHhDMCwgMHg2MCwgMHhDMCwgMHgzQiwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4NDAsIDB4REIsIDB4MDAsIDB4M0MsIDB4MDYsIDB4QjQsCisweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDZFLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDgzLCAweDAwLAorMHhEMywgMHg4MCwgMHg3QywgMHg5NywgMHhGMCwgMHgxMSwgMHhDOCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMCwKKzB4RjEsIDB4MzEsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLCAweDgwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDIwLAorMHhERiwgMHgwMCwgMHhGQSwgMHg0MywgMHhGMCwgMHgwRCwgMHhDMiwgMHg0RCwgMHgwMSwgMHhGRiwgMHgwMSwgMHhGQywgMHgwMSwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDksIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4NDAsIDB4MUYsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAxLAorMHhERiwgMHgwOCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHhERiwgMHg0MCwgMHgzQywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDgsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MjEsIDB4QzAsIDB4MzcsCisweDA0LCAweERGLCAweDAyLCAweDRDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhGNCwgMHgwOSwgMHhGRCwgMHhDMSwgMHg3NCwgMHg4MywKKzB4NTAsIDB4M0YsIDB4NDQsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MEEsIDB4QzQsIDB4OEYsIDB4RDAsIDB4MEYsIDB4NDEsIDB4MzQsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDgxLCAweDAwLCAweDAxLCAweDAwLCAweEZGLCAweDAwLCAweDFDLCAweDAwLCAweDQ0LAorMHgxMiwgMHhEMCwgMHgzOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4QTAsIDB4NzYsIDB4MDAsIDB4QzksIDB4NDcsIDB4MzQsIDB4MDMsIDB4MTgsIDB4MEMsIDB4NDksIDB4MzMsCisweDAwLCAweENELCAweDAzLCAweDA0LCAweDJGLCAweEQwLCAweDVDLCAweDQwLCAweDMxLCAweDAwLCAweDQ5LCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHhGMywgMHgwMCwgMHgxRCwgMHgwMCwgMHgxNCwgMHgwNCwgMHhEMCwgMHgwMCwgMHgwMSwKKzB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsCisweDAwLCAweEVELCAweDAxLCAweEI0LCAweDI3LCAweDUwLCAweDlFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDM1LCAweDg1LAorMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg2OSwgMHg4MCwgMHhFRCwgMHgwMywgMHhGNCwgMHgwNiwgMHg5MCwgMHg5MiwgMHgwMiwKKzB4N0IsIDB4MDAsIDB4M0QsIDB4MDEsIDB4OTYsIDB4MjQsIDB4RDAsIDB4OUEsIDB4NDgsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAyLCAweENGLCAweDA4LCAweDNDLAorMHgwMywgMHgzQSwgMHgwQywgMHhDMSwgMHgzMywgMHgwMCwgMHhDRiwgMHgwRCwgMHgyQywgMHgwMywgMHhGMCwgMHg1QywgMHhDMCwKKzB4MTEsIDB4MDAsIDB4NEIsIDB4MTAsIDB4M0MsIDB4MDYsIDB4MzAsIDB4MDAsIDB4QzIsIDB4MzMsIDB4MDYsIDB4Q0YsIDB4MDAsCisweDFDLCAweDE0LCAweEYwLCAweDAwLCAweEMxLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGOCwgMHgwMywgMHhGOCwgMHgwRiwgMHhDOSwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4MUMsIDB4MDAsIDB4RkYsIDB4MDgsCisweDNDLCAweDAyLCAweDc1LCAweDA3LCAweEM2LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEVELCAweDIwLCAweEYwLCAweDBCLAorMHhFOCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwKKzB4MzcsIDB4MTAsIDB4REUsIDB4NDQsIDB4N0MsIDB4MDMsIDB4MzAsIDB4NUQsIDB4QzIsIDB4MzQsIDB4MTEsIDB4RDMsIDB4MDQsCisweDdDLCAweDBCLCAweEYzLCAweDNELCAweEQxLCAweDM0LCAweDAwLCAweEQzLCAweDAxLCAweDRDLCAweDAzLCAweEYwLCAweDAxLAorMHhEMCwgMHhCNCwgMHgwNywgMHhDRSwgMHgwMCwgMHg0QywgMHgwNCwgMHgzMiwgMHgxOSwgMHhDMCwgMHg1NCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzgsIDB4MDAsIDB4RUQsIDB4OTYsCisweEY0LCAweDAzLCAweEIwLCAweDBDLCAweDU1LCAweDM4LCAweDE0LCAweEUxLCAweDE2LCAweEI0LCAweDVCLCAweEQwLCAweDRDLAorMHg0MCwgMHgyMCwgMHgxMCwgMHhGMSwgMHg4MCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgzOCwgMHgwMSwgMHhFRCwKKzB4MDAsIDB4ODQsIDB4MDIsIDB4MTEsIDB4MEIsIDB4QzAsIDB4NEEsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLAorMHg0QSwgMHg3MCwgMHgxMywgMHhFMSwgMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg3OCwgMHg0MCwgMHhFMSwKKzB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NDMsIDB4NzgsIDB4ODEsIDB4RkQsIDB4MDEsIDB4MDQsIDB4ODQsIDB4MTgsCisweDFBLCAweDQwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgyOCwgMHgyMywgMHgwMiwgMHhERCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MiwgMHgwQywgMHg0MCwgMHgzMCwgMHg0MCwgMHhDMSwKKzB4MjAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDgsIDB4MzAsIDB4MDQsIDB4QzEsIDB4MDgsIDB4MDQsIDB4MDcsIDB4RDAsCisweDJDLCAweDQxLCAweDMwLCAweDAwLCAweERELCAweDEwLCAweDA0LCAweDBGLCAweDE4LCAweDNDLCAweDQwLCAweDRBLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg1NSwgMHgwMCwgMHg1RiwKKzB4ODAsIDB4RkMsIDB4MjksIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NDMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweDA1LCAweDgyLCAweDFDLCAweDAwLCAweDczLCAweDAzLCAweENELCAweDE1LCAweEYwLCAweDM3LCAweEMwLCAweDE0LCAweDAwLAorMHg3RiwgMHgxMiwgMHhDQywgMHgxNSwgMHgzMCwgMHgxNywgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA3LCAweDA4LCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEM4LCAweDg3LCAweDAwLAorMHgxRiwgMHgxMCwgMHg3QywgMHg4MCwgMHhGMywgMHgwMSwgMHhDMCwgMHgwNywgMHgzMCwgMHgxRiwgMHgwMCwgMHg3RCwgMHgxMCwKKzB4RjEsIDB4ODEsIDB4QzEsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweDcwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLAorMHg5NywgMHgwMSwgMHg1QywgMHgyNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5MCwgMHg4MCwgMHg3QywgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4QTQsIDB4MDAsIDB4OUYsIDB4MDUsIDB4NEMsIDB4MTIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NDMsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEUyLCAweDIyLAorMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMywgMHg0NCwgMHg4QSwKKzB4RDAsIDB4OTksIDB4NDQsIDB4MjcsIDB4MDIsIDB4OTEsIDB4MDIsIDB4NzQsIDB4ODIsIDB4MTIsIDB4MDgsIDB4NDIsIDB4MjQsCisweDAwLCAweDlELCAweDAxLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0NCwgMHg5MSwgMHgyMSwgMHg1NCwgMHgwMywKKzB4NTAsIDB4NDksIDB4NDEsIDB4MjMsIDB4MDAsIDB4OTUsIDB4ODYsIDB4NTQsIDB4MEEsIDB4RDEsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDk1LCAweDAxLCAweDM0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MSwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjAsIDB4MjQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NTQsIDB4NTIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAyLCAweDgxLCAweDgwLCAweDAwLCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDQwLCAweDg1LCAweDAxLCAweDM0LAorMHgyMiwgMHgxMCwgMHg4OSwgMHg0MiwgMHg2MCwgMHgwMSwgMHg4RCwgMHgwOCwgMHgwNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0OCwKKzB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsCisweDAwLCAweDEzLCAweDk0LCAweDVDLCAweDEwLCAweDc0LCAweDQxLCAweEMxLCAweDg3LCAweDA1LCAweDE2LCAweDk0LCAweDVDLAorMHg1MCwgMHhGMSwgMHg0NSwgMHhDMSwgMHgxNywgMHgwNSwgMHgxNywgMHgwQSwgMHg3QywgMHgwOCwgMHgzNCwgMHgyMCwgMHhDMCwKKzB4QzQsIDB4MDIsIDB4MUYsIDB4MDIsIDB4NEQsIDB4MDQsIDB4RjAsIDB4QjEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDJGLCAweDA1LCAweDlGLCAweDM0LCAweEZDLAorMHg1MiwgMHhCMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QkIsIDB4MDEsIDB4RkMsIDB4MTIsIDB4RjAsIDB4NEIsIDB4RDAsIDB4NjcsIDB4MDIsIDB4QkYsIDB4MDQsCisweEZDLCAweDIyLCAweEYwLCAweDlCLCAweEMyLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHg4NiwgMHgwQywgMHgxNiwgMHhCMCwgMHg0QiwgMHhDMCwKKzB4MjcsIDB4MDUsIDB4QkIsIDB4MDAsIDB4REMsIDB4ODIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkQsIDB4MDAsIDB4QkYsIDB4QzAsCisweDdDLCAweDIyLCAweDMwLCAweDI5LCAweEMwLCAweDJGLCAweDAwLCAweEIxLCAweDAyLCAweENDLCAweDAyLCAweEUwLCAweDBCLAorMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwKKzB4NDcsIDB4MDEsIDB4MUQsIDB4MDEsIDB4NDQsIDB4NUMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MDEsIDB4MUQsIDB4MDAsCisweDQ0LCAweDAwLCAweDE0LCAweEExLCAweDQwLCAweDA0LCAweDAwLCAweDBELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLAorMHg0MCwgMHgwNywgMHgwMCwgMHgxNSwgMHgwNCwgMHg0NSwgMHgwMCwgMHhEMiwgMHgwMSwgMHg0OCwgMHg3MCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDYsCisweDA0LCAweDIyLCAweDkyLCAweDI4LCAweDQwLCAweDIzLCAweDA0LCAweDhELCAweDIyLCAweDA0LCAweDhBLCAweDEwLCAweDA4LAorMHg1MCwgMHhBMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg2MCwgMHgyMywgMHgxMCwgMHg4MSwKKzB4MjAsIDB4MDUsIDB4ODMsIDB4RDAsIDB4MDksIDB4NjAsIDB4NDIsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDgwLCAweDlELCAweDAwLCAweDQ1LCAweDAyLCAweDEwLCAweDA5LAorMHg2MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NywgMHgwMiwgMHgxMCwgMHgwOSwgMHgwMCwgMHgyNCwgMHgwMSwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4QTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MTQsIDB4NDUsIDB4MEUsIDB4RDEsCisweDY5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHg4OCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwMCwgMHg0QywgMHgzNiwgMHhCMCwgMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5QiwKKzB4NDAsIDB4NUMsIDB4MDIsIDB4MTIsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDEsIDB4OUUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsCisweDI5LCAweEMwLCAweDI3LCAweDAwLCAweDgzLCAweDAxLCAweDRDLCAweDBFLCAweEYyLCAweDI5LCAweEQwLCAweDE2LCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHg2NSwgMHgxMCwgMHg5RiwKKzB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NTAsIDB4M0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMSwgMHg3RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1MSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NTAsCisweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDAzLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMxLCAweDg3LCAweDAxLAorMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwMSwgMHgwMSwgMHgxMywgMHgwMiwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MjEsIDB4QzEsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweEEwLCAweERDLCAweDAwLCAweDc1LCAweDE5LCAweDQ0LCAweDAxLCAweDUwLCAweDI3LCAweEMwLCAweDE2LCAweDUwLAorMHg3MSwgMHgyMywgMHhGNCwgMHgyMSwgMHhEMCwgMHgwNiwgMHg0MSwgMHgxRiwgMHgyMCwgMHg3NSwgMHgwMSwgMHg0NCwgMHgwMSwKKzB4RDAsIDB4MDUsIDB4NDgsIDB4MUYsIDB4MTgsIDB4NzUsIDB4MEEsIDB4NDQsIDB4MDEsIDB4MTEsIDB4MjcsIDB4QzAsIDB4NTIsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDcyLCAweDgxLAorMHhDOSwgMHgwMywgMHgwNCwgMHgwMywgMHgxMCwgMHg5QywgMHg0MSwgMHgzMywgMHgwMCwgMHg4MSwgMHgwMywgMHgzNCwgMHgyQiwKKzB4RDAsIDB4MkMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzUsIDB4MTEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4RjEsCisweDgwLCAweEM5LCAweDAxLCAweDA0LCAweDAzLCAweDEyLCAweDhELCAweDQwLCAweDUyLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHg3OCwgMHgwNCwgMHhFRCwgMHgyMCwgMHhDNCwgMHgwMywKKzB4NTAsIDB4MUEsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjAsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0IsCisweDQ4LCAweEU1LCAweDExLCAweDg0LCAweDIzLCAweEMwLCAweDhFLCAweDQwLCAweDEzLCAweDA0LCAweEVELCAweDEwLCAweEM0LAorMHgwNywgMHgxQywgMHgwQiwgMHg0MCwgMHgxNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RkIsIDB4ODEsIDB4OEMsIDB4NDcsIDB4NzQsIDB4MUUsIDB4QzAsIDB4NzMsCisweDAxLCAweEEzLCAweDAxLCAweEJDLCAweDA2LCAweEYwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweDY3LCAweDgxLCAweDg0LAorMHhENywgMHhGMCwgMHgxRSwgMHhDMSwgMHg2OSwgMHgyMCwgMHhCQiwgMHgwMSwgMHg4RCwgMHgwNywgMHgzMCwgMHgxQiwgMHhDMCwKKzB4NTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsCisweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDMzLCAweEYwLCAweDAwLCAweEMwLCAweEI1LCAweDIwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMSwgMHgwOSwgMHhDMCwgMHgzMywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3NSwgMHgwMywgMHhGMiwgMHg2RCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjEsIDB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDVGLCAweDAwLCAweDdGLCAweDAxLCAweEZDLAorMHgwNywgMHg3MCwgMHgxRiwgMHhDMCwgMHhGRiwgMHg0NCwgMHhCMywgMHgwOSwgMHg5QywgMHgyNywgMHg3MCwgMHg5RiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4QTMsIDB4NDEsIDB4RUMsIDB4MDcsIDB4MzEsIDB4MUQsIDB4QzAsIDB4NEYsIDB4MDAsIDB4RjMsIDB4MDEsCisweENDLCAweDA3LCAweDMwLCAweDlCLCAweEMwLCAweDAwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHhCOSwgMHgwMCwgMHg2RCwgMHgwMiwgMHhCNCwgMHgwMywgMHhCMCwgMHgwQSwgMHg2MCwKKzB4M0IsIDB4MDAsIDB4QzEsIDB4MDgsIDB4QjQsIDB4ODIsIDB4MTAsIDB4MDQsIDB4NDgsIDB4M0IsIDB4MDAsIDB4MjEsIDB4MDAsCisweDA0LCAweDM3LCAweDEwLCAweDFFLCAweEMwLCAweDBGLCAweDAwLCAweEZCLCAweDE4LCAweEM0LCAweDIzLCAweEIyLCAweENBLAorMHg1MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4MDAsIDB4NkQsIDB4MDgsIDB4RjQsIDB4MDMsIDB4NTAsIDB4MEEsIDB4NDAsIDB4MzksIDB4MDAsIDB4QTksIDB4ODAsCisweDk0LCAweDAyLCAweDUwLCAweDBFLCAweDYwLCAweDFCLCAweDAyLCAweDM5LCAweDAwLCAweEM0LCAweDEzLCAweDEwLCAweDBFLAorMHg0MSwgMHgwQiwgMHgwMCwgMHhCMSwgMHgwMCwgMHhDNCwgMHg0MywgMHg1MCwgMHgwQSwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NDMsIDB4MjAsIDB4MEQsIDB4ODAsCisweDM0LCAweDAzLCAweDkwLCAweDAwLCAweDQwLCAweDM3LCAweDA4LCAweDQ5LCAweDQwLCAweDM0LCAweDAyLCAweDEwLCAweDAwLAorMHg0NCwgMHg1MywgMHg0MiwgMHgwOSwgMHgwMiwgMHgwNCwgMHgwMywgMHg5NCwgMHgxRCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg4OSwKKzB4MTAsIDB4MDQsIDB4MDYsIDB4RDgsIDB4NjAsIDB4NDAsIDB4MTEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDY0LCAweDAxLCAweDlGLCAweDAwLCAweEZDLCAweDAzLCAweDc0LCAweDAxLAorMHhDMCwgMHgzRiwgMHgwMCwgMHg5QiwgMHgwMCwgMHg1QywgMHgwMiwgMHg1MCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwOCwgMHgxMywKKzB4MDIsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4QkYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NEQsIDB4QUIsIDB4NTAsCisweDA5LCAweEMxLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHhBNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg0MywgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywKKzB4MjAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MTcsIDB4ODIsIDB4NUMsIDB4NDMsIDB4NzAsCisweDBELCAweEMwLCAweDg3LCAweDAwLCAweDVGLCAweEMyLCAweDdDLCAweDAzLCAweEIwLCAweDI5LCAweDg4LCAweDA2LCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyRiwgMHgyMCwgMHgyRiwKKzB4ODAsIDB4RDQsIDB4MDMsIDB4M0MsIDB4MDIsIDB4QzgsIDB4MzQsIDB4MDAsIDB4QjMsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsCisweDJCLCAweEUwLCAweDI0LCAweDIwLCAweDMzLCAweDEwLCAweEY0LCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDBDLCAweDAwLAorMHg3RiwgMHgwMCwgMHhDQywgMHgyNywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RTYsIDB4MDAsIDB4OUQsIDB4NDMsIDB4MDYsIDB4MDMsIDB4MTAsCisweDExLCAweDQwLCAweDM0LCAweDAwLCAweDgxLCAweDAwLCAweDQ0LCAweDE0LCAweEQwLCAweDE4LCAweEUwLCAweDI2LCAweDAwLAorMHgxMSwgMHgwNCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHg0NCwgMHgwMSwgMHg0NywgMHg4NSwgMHg3QywgMHgwMiwKKzB4RDAsIDB4NTEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweEEwLCAweDQ0LCAweDAwLCAweDlELCAweDIxLCAweDQwLCAweDAzLCAweDkyLCAweDM5LCAweDQ0LCAweDM0LCAweDAwLAorMHg5MSwgMHgwMCwgMHg1NiwgMHgwNiwgMHhEMiwgMHgyNSwgMHg0OCwgMHg3NCwgMHgwMCwgMHgzMSwgMHg4NCwgMHg3NCwgMHg4MywKKzB4RDgsIDB4MEQsIDB4NDAsIDB4NEMsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NDUsIDB4MDIsIDB4RDAsIDB4MTMsIDB4NDAsIDB4MDcsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLAorMHg4RCwgMHgyMCwgMHg1NCwgMHgwMywgMHgxMiwgMHgwOCwgMHg0MCwgMHgzMCwgMHgyMCwgMHhDMSwgMHg0MCwgMHgxNiwgMHgwMiwKKzB4RDAsIDB4MjQsIDB4NDQsIDB4MzIsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzMsIDB4RDgsIDB4MEMsIDB4NDUsIDB4MDAsCisweDEwLCAweDg1LCAweDAwLCAweDM0LCAweDIyLCAweEQwLCAweDAwLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgwNiwgMHgwOCwgMHgxRiwgMHgwMCwgMHhENCwgMHgwMywKKzB4MzIsIDB4MDksIDB4QzIsIDB4M0MsIDB4MDAsIDB4OTMsIDB4MkEsIDB4NTQsIDB4MDAsIDB4RDksIDB4MEQsIDB4NDAsIDB4MDQsCisweDAwLCAweDEzLCAweDAwLCAweEZDLCAweDlCLCAweEIxLCAweDBGLCAweEMwLCAweDA0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMSwgMHgwMSwgMHhDMCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QjIsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QUQsIDB4MDMsIDB4RjEsIDB4MDMsIDB4QzAsIDB4M0YsCisweDEwLCAweDdGLCAweDA0LCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweEM2LCAweDBGLCAweDQwLCAweDNGLCAweDAwLCAweDNDLAorMHgwQiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRCwgMHgxMCwgMHhCNywgMHgwMCwgMHhGQywgMHgxMiwgMHhGOCwgMHgwMywgMHhDMCwKKzB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MkYsCisweDAxLCAweEJGLCAweDA4LCAweEZDLCAweDQzLCAweDMwLCAweDhGLCAweEMwLCAweDNGLCAweDA1LCAweDNGLCAweDAzLCAweERDLAorMHgyMywgMHhGMCwgMHgzQiwgMHhEMCwgMHgzQywgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgxMywgMHgzMCwgMHgxMywgMHhDMCwKKzB4N0MsIDB4MTAsIDB4M0QsIDB4NjEsIDB4Q0MsIDB4MTgsIDB4MzAsIDB4NDMsIDB4QzEsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDEwLCAweDg3LCAweDFELCAweDlELCAweDAyLCAweERDLAorMHgwRiwgMHgwMCwgMHg2RiwgMHg0MCwgMHhCRiwgMHgwMSwgMHgxRCwgMHgwNCwgMHhDNCwgMHgwQiwgMHg3MCwgMHgwRCwgMHg0MCwKKzB4RkMsIDB4MDAsIDB4RjEsIDB4MDMsIDB4RjQsIDB4QTcsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MUQsIDB4MDAsCisweDA0LCAweEFCLCAweDEwLCAweDI5LCAweDUxLCAweDBDLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyMSwgMHg4MiwgMHgwRCwgMHgwOCwgMHgxNCwgMHgwMywgMHgxMCwgMHg2QywgMHg0OCwKKzB4MzMsIDB4MTQsIDB4OUQsIDB4MDAsIDB4MTQsIDB4MzMsIDB4RDIsIDB4NDgsIDB4NjAsIDB4MzAsIDB4MEEsIDB4QzksIDB4MDgsCisweDM0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDMwLCAweDIwLCAweDFELCAweDAwLCAweDA0LCAweDEwLCAweDEwLCAweDQwLAorMHg0MiwgMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4NDcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NTQsIDB4ODMsIDB4MTQsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDEsCisweDQ0LCAweDAzLCAweDUwLCAweDBDLCAweDYwLCAweDM0LCAweDEwLCAweEQwLCAweDAwLCAweDc0LCAweDAzLCAweDE0LCAweDE1LAorMHgxOCwgMHgyNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHg4MSwgMHgxNiwgMHgwMSwgMHg0MSwgMHgwRCwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4QTgsIDB4QzcsIDB4MDAsIDB4OUYsIDB4MDEsCisweDVDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDBGLCAweDAzLCAweDVDLCAweDgzLCAweEYwLCAweDhELAorMHhDMCwgMHgzMCwgMHgwOCwgMHhEQiwgMHg2MCwgMHgzQywgMHgwMywgMHgzMCwgMHgyMCwgMHhDNCwgMHgzNCwgMHgwMCwgMHgwRiwKKzB4NTMsIDB4NEMsIDB4MjQsIDB4MzAsIDB4MTEsIDB4QzQsIDB4MjksIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBELCAweDAwLCAweEJGLCAweDAwLCAweERDLCAweDAzLCAweEYxLCAweDBELAorMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHhEMCwgMHgxRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwKKzB4NTAsIDB4RjAsIDB4ODMsIDB4RjAsIDB4MDMsIDB4QzgsIDB4OEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4QzcsIDB4RjAsCisweDNELCAweEMwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLAorMHgwOCwgMHhBNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHgwQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDNCwgMHgzNSwgMHgwMCwgMHgxRiwKKzB4MDIsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDA1LCAweEMwLCAweDM0LCAweDEwLCAweDFGLCAweDAwLCAweDRDLCAweDIyLCAweDM0LCAweDJDLCAweEMwLCAweDI4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg2NCwgMHgwNCwgMHg5RCwKKzB4MDAsIDB4QzQsIDB4M0IsIDB4RDAsIDB4MEYsIDB4NDAsIDB4M0MsIDB4MDAsIDB4OUQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsCisweDBELCAweDQ4LCAweDNGLCAweDAwLCAweEYxLCAweDAzLCAweEY0LCAweDJCLCAweEQwLCAweEE1LCAweEMwLCAweDI2LCAweDA4LAorMHgxRCwgMHgwMCwgMHg0NCwgMHgwRiwgMHgxMCwgMHgzRCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4RTIsIDB4MzQsIDB4MEQsIDB4NDAsIDB4MDQsIDB4MDcsIDB4OTAsCisweDBDLCAweDQ0LCAweDMwLCAweDA4LCAweDhDLCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQ4LCAweDMyLCAweDAwLAorMHhDMCwgMHgwMSwgMHgzNCwgMHgyNywgMHhEMCwgMHgyMCwgMHg0MCwgMHgzMCwgMHgwNCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDQsIDB4NDEsIDB4MEMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDBELCAweDAyLCAweDdBLCAweDAyLCAweDZELCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDlFLCAweDQyLCAweDc4LCAweDAwLAorMHhBRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3MywgMHgwMiwgMHhFNSwgMHgwMSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MTcsIDB4NDAsIDB4NUIsIDB4MDQsIDB4M0QsIDB4MDEsIDB4ODQsIDB4MDYsIDB4MTIsIDB4OTIsIDB4NDEsIDB4MzQsCisweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDMyLCAweDAwLAorMHg1RiwgMHgwOCwgMHgwRCwgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMiwgMHg4RiwgMHgwOCwgMHgzNCwgMHgwMywKKzB4RjAsIDB4NEMsIDB4QzAsIDB4MzMsIDB4MEEsIDB4QzcsIDB4MTAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4QTEsIDB4RTAsIDB4MzAsCisweDAwLCAweDVGLCAweDAwLCAweDBDLCAweDgwLCAweDMwLCAweDUwLCAweEQwLCAweDQ4LCAweDQwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCQSwgMHgzRCwgMHgyMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywKKzB4RjAsIDB4MEYsIDB4QzMsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MjgsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MEYsIDB4QzQsIDB4M0YsCisweDAyLCAweERCLCAweDEwLCAweEZDLCAweDIzLCAweEYwLCAweDA3LCAweEUwLCAweDNFLCAweDgwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGOCwgMHg4MSwgMHhDMiwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTAsIDB4NTcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4NkYsIDB4QjAsIDB4NUQsIDB4RTAsIDB4QjcsCisweDE0LCAweDFGLCAweDAwLCAweDdDLCAweDEzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDAzLCAweEQzLCAweDE1LCAweDRDLAorMHg1MywgMHhGMCwgMHgwNSwgMHhFMCwgMHg3NywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwRCwgMHhDMCwKKzB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsIDB4MUQsCisweDAwLCAweEVCLCAweDAwLCAweEI0LCAweDAzLCAweDE4LCAweENGLCAweDYwLCAweEI4LCAweDAxLCAweEVELCAweDAwLCAweEI0LAorMHg0QiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMywgMHhDMSwgMHgwNCwgMHg4NCwgMHgxQiwgMHhEMCwgMHgwNiwgMHg0MCwKKzB4MUIsIDB4MjAsIDB4NjEsIDB4MjAsIDB4RjQsIDB4MDMsIDB4MTQsIDB4MEYsIDB4NDAsIDB4NEMsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAyLCAweDc5LCAweDE0LCAweDYxLCAweDIxLCAweDM2LAorMHgwNywgMHgxOCwgMHg1RSwgMHg0QywgMHg3OSwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg2NCwKKzB4NzEsIDB4MDEsIDB4RTEsIDB4NDEsIDB4OTYsIDB4MTcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4N0YsIDB4MDAsIDB4NjUsIDB4MDEsCisweEI2LCAweDA3LCAweDk0LCAweDFFLCAweDQyLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgzMywgMHgwMCwgMHhDOSwgMHgwQiwgMHgzNCwgMHg4MywgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzAsIDB4MDAsIDB4Q0QsIDB4MDcsIDB4NzQsIDB4MDMsIDB4RDAsIDB4OUMsIDB4NjAsIDB4MzMsIDB4NDAsIDB4QzEsIDB4MDAsCisweDE1LCAweDAzLCAweEQxLCAweDFDLCAweDQyLCAweDMzLCAweDAwLCAweEM0LCAweDA2LCAweDM0LCAweDE3LCAweDkwLCAweDlDLAorMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwKKzB4MUYsIDB4MDAsIDB4NzMsIDB4MDIsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzIsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MTAsCisweDdDLCAweDAxLCAweEYwLCAweDE1LCAweEMwLCAweDEzLCAweDAwLCAweDUxLCAweDAwLCAweDVDLCAweDAxLCAweEYwLCAweDQ2LAorMHhDMCwgMHgxRiwgMHgwMCwgMHg3NywgMHgxMiwgMHhGQSwgMHgxRCwgMHhCMCwgMHhCNywgMHhDNCwgMHg1QywgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDQsCisweDdDLCAweDAwLCAweEY0LCAweDAxLCAweEM4LCAweDA3LCAweDAwLCAweDFDLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg2NCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNywgMHg0MCwgMHgxQiwKKzB4MDAsIDB4N0MsIDB4MDgsIDB4NzAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweEU1LCAweDA0LCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHhBMCwgMHg0QywgMHgwMiwgMHgzMiwgMHgwOSwgMHhDOCwgMHgyNywgMHgwOSwgMHg5MywKKzB4MDAsIDB4M0MsIDB4OTIsIDB4MzAsIDB4MTksIDB4QzEsIDB4MjYsIDB4MDEsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDYsIDB4MzAsCisweDg5LCAweEMwLCAweDQxLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgyNiwgMHgxMCwgMHg5RCwgMHg4MCwgMHg3NCwgMHgzMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDksIDB4OTEsIDB4MjMsIDB4NzQsIDB4NEUsIDB4MTQsCisweDk5LCAweDQyLCAweEE0LCAweDA0LCAweDlELCAweDAwLCAweDc0LCAweDBBLCAweDEwLCAweDI5LCAweDQ0LCAweDA0LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NTQsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NTAsCisweDA5LCAweDQyLCAweDI1LCAweDQwLCAweDkxLCAweDE4LCAweDc0LCAweDAyLCAweDkwLCAweDI5LCAweDQwLCAweDI2LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgyMiwgMHgwOCwgMHgwOCwgMHg0MCwgMHg3MSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjgsIDB4MzAsIDB4MDUsIDB4OEQsIDB4NTQsIDB4MzQsIDB4MDIsIDB4RDAsCisweDg4LCAweDQwLCAweDIzLCAweDAyLCAweDhELCAweDg4LCAweDA1LCAweDIyLCAweDEwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLAorMHg4MSwgMHgwMCwgMHgzMCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MiwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNiwgMHgyMywKKzB4MTAsIDB4MDgsIDB4NDAsIDB4NTAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEIwLCAweDA2LCAweDIxLCAweDFGLCAweDI0LCAweDVDLCAweEQwLCAweEYwLCAweDYxLCAweEM1LCAweDg3LCAweDA1LAorMHgxRiwgMHgwMiwgMHg0QywgMHg1OCwgMHg3MCwgMHgyMSwgMHhDMCwgMHgwNSwgMHgwNSwgMHgxMywgMHgzNCwgMHg3QywgMHg1MCwKKzB4MzAsIDB4MDEsIDB4QzAsIDB4ODYsIDB4MDIsIDB4MUYsIDB4MEEsIDB4N0MsIDB4NTgsIDB4MzQsIDB4NDUsIDB4QzEsIDB4NzUsCisweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweDJGLCAweDA1LAorMHhCRiwgMHgzNCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMSwgMHhCRiwgMHgwNCwgMHg3QywgMHgxMiwKKzB4RjQsIDB4NEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NkIsCisweDAwLCAweEJGLCAweDIxLCAweEZDLCAweDEyLCAweEYwLCAweDRCLCAweEMxLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMCwgMHg5MywgMHgwMiwgMHhEQywgMHgwMiwKKzB4RjAsIDB4ODksIDB4QzAsIDB4QTYsIDB4MTUsIDB4OUIsIDB4MDAsIDB4NUMsIDB4NDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MkUsCisweDA0LCAweEJGLCAweDAwLCAweERDLCAweDAyLCAweEIyLCAweDBCLCAweEMwLCAweDJGLCAweDA4LCAweDlGLCAweDAwLCAweENDLAorMHhDMiwgMHgzMiwgMHgwQiwgMHhEMCwgMHg2MCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsIDB4MDEsIDB4MUIsIDB4NjAsIDB4NzQsIDB4QTgsIDB4RDAsIDB4QTAsIDB4NDIsIDB4ODQsCisweDAwLCAweDExLCAweDIwLCAweDc0LCAweDA4LCAweDEwLCAweDQxLCAweDQwLCAweDg0LCAweDAwLCAweDE3LCAweDRBLCAweDQ0LAorMHgyOCwgMHgxMCwgMHgwMSwgMHg0NCwgMHgwNywgMHgyMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwOCwgMHgxNCwgMHgwMSwgMHg0MCwKKzB4NzAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4QTEsCisweDg0LCAweDgxLCAweDAyLCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDIyLCAweDAxLCAweDg1LCAweDE0LCAweDM0LAorMHg1MiwgMHgxMiwgMHgwOSwgMHg2MSwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MzMsIDB4ODAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NjIsIDB4NEEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDI1LCAweDAwLCAweDk5LCAweDgwLCAweDc0LAorMHgwMiwgMHhDMCwgMHgwOCwgMHg0MCwgMHgyNiwgMHgyMCwgMHg5NSwgMHgwMiwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0QSwKKzB4MjQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QTcsIDB4MDAsIDB4OEQsIDB4MTQsCisweDQ1LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDYyLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMSwgMHg5MywgMHg4NywgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwKKzB4MjYsIDB4MDgsIDB4OTcsIDB4MDAsIDB4NUUsIDB4MDIsIDB4MTAsIDB4MDgsIDB4QzAsIDB4MjYsIDB4MjAsIDB4OUYsIDB4MjAsCisweDVDLCAweDAyLCAweEIwLCAweDU5LCAweEMwLCAweDI3LCAweDIwLCAweDlFLCAweDIzLCAweDRDLCAweDQyLCAweDMwLCAweDQ5LAorMHhDMCwgMHgxNiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwKKzB4NjEsIDB4MDIsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MjEsIDB4NDAsIDB4OUIsIDB4ODQsCisweDdDLCAweDAyLCAweEY0LCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDQyLCAweEQ0LCAweDM5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMSwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OCwgMHhDMCwgMHg0OSwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODQsIDB4MDQsIDB4MUYsIDB4MDIsCisweDZDLCAweDAwLCAweEUwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDgwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLAorMHhDMCwgMHgwNSwgMHgwNCwgMHgxRiwgMHgxMCwgMHg0QywgMHgwMCwgMHg3MCwgMHgxMSwgMHhDMiwgMHgwNywgMHgwMSwgMHgxRiwKKzB4QTIsIDB4M0MsIDB4MjAsIDB4MTAsIDB4NDEsIDB4QzIsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweERDLCAweDAwLCAweDVELCAweDIwLCAweEQ0LCAweDY1LCAweEMwLCAweDA1LAorMHg0MCwgMHgxNCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg3NCwgMHg4MSwgMHgxMCwgMHgwNSwgMHhDMCwgMHgxQywgMHgwMCwgMHg2RCwKKzB4MjAsIDB4ODAsIDB4MEQsIDB4NzAsIDB4MDcsIDB4ODAsIDB4MUQsIDB4MTAsIDB4NUQsIDB4ODAsIDB4RjQsIDB4MDEsIDB4MTAsCisweDM3LCAweDQyLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHhGMiwgMHgwMiwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg1MCwgMHgzMCwgMHg4MCwgMHhDMSwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MEEsIDB4MDAsIDB4MEIsIDB4RDgsCisweDhDLCAweDQ4LCAweEIyLCAweDAwLCAweENDLCAweDAwLCAweDM2LCAweDkzLCAweDkwLCAweDAwLCAweDQ0LCAweDUzLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4OCwgMHgzOCwgMHgwMCwgMHhDRCwKKzB4MDEsIDB4OTQsIDB4MDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4QzIsIDB4RTEsIDB4MDQsIDB4QjQsIDB4MjMsIDB4MTEsCisweDBFLCAweDQwLCAweDM4LCAweDgwLCAweDhELCAweDAwLCAweDg1LCAweDBCLCAweEQ4LCAweDA2LCAweDQwLCAweDA5LCAweDIwLAorMHhFRCwgMHgwNCwgMHgzNCwgMHgwMCwgMHg5NCwgMHgwQSwgMHg0MSwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MEQsIDB4ODQsIDB4MDQsIDB4RjAsCisweDFFLCAweEMxLCAweDcwLCAweDA1LCAweEUxLCAweDBELCAweDM0LCAweDU3LCAweDM0LCAweDNGLCAweEMwLCAweDc5LCAweDAwLAorMHhBRiwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxNiwgMHhDMCwgMHg2QiwgMHgwMCwgMHhFRiwgMHgwQiwgMHhCQywgMHgwNywKKzB4QjAsIDB4MTYsIDB4QzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEyLCAweDE1LCAweDEwLCAweERGLCAweDg0LCAweDVDLCAweDAwLCAweEYwLCAweDRELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwNCwgMHg3QywgMHgxQiwgMHhGMCwgMHg2RCwgMHhDOSwgMHgzNywgMHgyMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4NzgsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzQsIDB4MEQsIDB4QzAsIDB4NDMsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDdELCAweDAwLAorMHhGRiwgMHgxMSwgMHg4QywgMHgyNCwgMHg3MCwgMHgxRiwgMHhDNSwgMHg3QywgMHgwMCwgMHhGMywgMHgxMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4QjcsIDB4MDUsIDB4RkMsIDB4MDcsIDB4RjgsIDB4OTYsIDB4QzAsIDB4NkMsCisweDAyLCAweEYzLCAweDg5LCAweENDLCAweDA3LCAweDI0LCAweDFCLCAweEM0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwOCwgMHgzOSwgMHgyMCwgMHhFRCwgMHgwNCwgMHg4NCwgMHgwMCwKKzB4MTgsIDB4MEUsIDB4NTAsIDB4MzgsIDB4MjIsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MjMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDAwLCAweEE3LCAweDAwLCAweEI0LCAweDIzLCAweEQwLCAweDA2LCAweDQ4LCAweDBELCAweDAyLCAweEZCLCAweDQwLCAweDg1LAorMHgwMCwgMHhGMCwgMHg4OCwgMHhFMSwgMHg1NCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4RUQsIDB4ODAsIDB4QTQsIDB4MDAsIDB4NTgsIDB4MEMsIDB4NDAsIDB4MzksCisweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDFCLCAweDAwLCAweEE1LCAweDA0LCAweEI0LAorMHgwMywgMHhEMCwgMHgwMywgMHg0NiwgMHgwOCwgMHg4MiwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsCisweDAwLCAweENELCAweDQxLCAweDA0LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDQyLCAweDM0LAorMHgwMywgMHgxMiwgMHg4QywgMHg0MCwgMHgxMywgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHhCMCwgMHg0NCwKKzB4MDEsIDB4MDAsIDB4QzksIDB4MDIsIDB4MDQsIDB4NDEsIDB4RDAsIDB4MzQsIDB4NTAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDQ1LCAweDIwLCAweEZGLCAweDlBLCAweDZDLAorMHgwMCwgMHg0MSwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4NDQsIDB4MDAsIDB4MDYsIDB4RjMsIDB4NDIsCisweDRDLCAweDRCLCAweDMwLCAweDI1LCAweEMwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhBNywgMHgwMSwgMHhERiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MjAsIDB4REYsIDB4MDgsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4OUYsIDB4ODAsCisweDNDLCAweDhCLCAweEYwLCAweDAxLCAweEM4LCAweDg3LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDAwLCAweDk2LCAweDY1LAorMHhDMCwgMHgwNSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwKKzB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MTAsCisweDVDLCAweDAzLCAweEUwLCAweDBGLCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDAwLCAweEZDLCAweDgzLCAweDMwLCAweDAzLAorMHhDMSwgMHgwRCwgMHgyMCwgMHhGMywgMHgxMCwgMHg3QywgMHgwNywgMHgzMCwgMHg5NywgMHhDMiwgMHgxMywgMHgyMiwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4QzYsIDB4MDQsIDB4REQsIDB4MDAsCisweDc0LCAweDBDLCAweEQwLCAweDBELCAweDUwLCAweDM0LCAweDIwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELAorMHg0MCwgMHgyNywgMHgwMCwgMHgxOSwgMHgwMSwgMHg3NCwgMHgxOCwgMHgwMCwgMHgzMSwgMHhDMCwgMHg0NywgMHgwMSwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MjAsIDB4MTAsIDB4MjksIDB4NDAsIDB4MTcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDQ0LCAweEQwLCAweDBDLAorMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHg4MCwgMHgxRCwKKzB4MDMsIDB4NzQsIDB4MTAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NEYsIDB4MDAsIDB4RjEsIDB4MDAsIDB4NzQsIDB4NDMsIDB4MTksCisweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyOCwgMHgyMCwgMHgyMCwgMHhDRCwgMHg4MCwgMHgyNCwgMHgwMCwgMHhEMiwgMHgwQywgMHg0MCwgMHgzMCwgMHgyMCwgMHhDMSwKKzB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4ODAsIDB4MDksIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQ0LCAweDA3LCAweDQwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweDEzLCAweDg0LCAweDQwLCAweDQzLCAweEEwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgwNiwgMHgwMCwgMHhFRiwKKzB4ODAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MzgsIDB4MDAsIDB4RjMsIDB4MDAsIDB4QzUsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLAorMHhGMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwOSwgMHhDOCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4QTgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweDgzLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLAorMHgzQiwgMHg0MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhFOCwgMHgwRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4NDMsIDB4QzAsIDB4MTcsIDB4MjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDNGLCAweDA0LCAweEIzLCAweDA4LCAweENDLCAweDkzLCAweEYxLCAweENGLCAweEMwLCAweDNDLCAweDQyLAorMHhGMywgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgxMywgMHhDMCwgMHgzRCwgMHgwNSwgMHhGNywgMHgyQywgMHhGQywgMHgwNCwKKzB4QjAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDYsIDB4M0YsIDB4MDQsIDB4RUMsIDB4MDMsIDB4RjAsIDB4ODMsIDB4QzAsIDB4MEYsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDE4LCAweEJGLCAweDAwLAorMHgxQiwgMHgwNCwgMHhDNCwgMHhBRiwgMHhEMCwgMHg2RiwgMHg0MCwgMHhCQywgMHgwMywgMHhGMSwgMHg4NCwgMHhGNCwgMHgwRiwKKzB4MTAsIDB4MDksIDB4QzQsIDB4N0QsIDB4MDgsIDB4RDUsIDB4MDgsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MkYsIDB4NDIsIDB4M0MsCisweDEwLCAweDFELCAweDEyLCAweEM0LCAweDg3LCAweEQwLCAweDQwLCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwNCwgMHg4MSwgMHgyMiwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MkMsIDB4NDQsIDB4MzEsIDB4MDEsIDB4QzEsIDB4MTgsIDB4MjQsIDB4MEIsIDB4NTAsIDB4MDQsIDB4NDAsIDB4MzEsCisweDAwLCAweEM1LCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDJDLCAweDQ0LCAweDMzLCAweDAxLCAweDhELCAweDA2LCAweDI0LAorMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTAsIDB4MzQsIDB4MzAsIDB4MDksIDB4NDEsIDB4NDYsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzUsCisweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDE0LCAweDBELCAweDQwLCAweDM1LCAweDAwLCAweEQ0LCAweDAwLCAweDc0LAorMHgyMiwgMHg1MCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHhDNCwgMHgwMywgMHhEMCwgMHgzMywgMHg0MCwKKzB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsCisweDAwLCAweDkzLCAweDAzLCAweDRDLCAweDgzLCAweEYwLCAweDBELCAweEMwLCAweDM1LCAweDIwLCAweEQzLCAweDgwLCAweDdDLAorMHgwMywgMHg3MiwgMHg5MSwgMHhDOCwgMHgzNSwgMHgwMCwgMHhENywgMHg4MCwgMHg3QywgMHg0NSwgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MTgsIDB4MUYsIDB4QTIsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEJGLCAweDQwLCAweEZELAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMiwgMHgzNiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMSwKKzB4M0YsIDB4MDAsIDB4RDksIDB4MDAsIDB4RkMsIDB4NDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4M0UsIDB4MDgsIDB4RkMsIDB4MDksCisweEZDLCAweDAzLCAweEYwLCAweDAzLCAweDgwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzMSwgMHgwMSwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzEsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsCisweDRDLCAweDIyLCAweEIwLCAweDBDLCAweEM4LCAweDM0LCAweDA4LCAweDA3LCAweDAwLCAweDVDLCAweDAzLCAweDMwLCAweDIxLAorMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4RkMsIDB4MEMsIDB4OUQsIDB4MDAsIDB4RkMsIDB4MEYsIDB4RDAsIDB4MEYsIDB4NDQsIDB4M0MsIDB4MDAsIDB4RjEsIDB4MDAsCisweEY0LCAweDA3LCAweEQwLCAweDE1LCAweEMyLCAweDM5LCAweDA4LCAweEYwLCAweDAzLCAweDJDLCAweDhCLCAweEQwLCAweDBGLAorMHg0OCwgMHgzQywgMHgwMCwgMHhENSwgMHgxMCwgMHhDNCwgMHgyRiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MEQsIDB4MDAsCisweDM0LCAweDQzLCAweEQwLCAweDBELCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDFCLCAweEQyLCAweDE0LAorMHg0OCwgMHgzMiwgMHgwMCwgMHhDOCwgMHg4NywgMHgwNCwgMHgwRCwgMHhEMCwgMHgwQywgMHgwMCwgMHgzMSwgMHgwMCwgMHg0MSwKKzB4MTAsIDB4MTQsIDB4MjMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDg4LCAweDc4LCAweDAwLCAweDZELCAweDAxLCAweEI0LCAweDY3LCAweEQwLCAweDlFLAorMHg0MCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3MywgMHg0OCwgMHhFRCwKKzB4MDEsIDB4QTQsIDB4MDUsIDB4RDEsIDB4MUUsIDB4NDAsIDB4NzEsIDB4MDAsIDB4RTUsIDB4MDEsIDB4QzQsIDB4MTcsIDB4MTQsCisweDkyLCAweDQwLCAweDE4LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgxMCwgMHgzMCwgMHgwMiwgMHhDRiwgMHgwQywgMHgzNCwgMHgwMywgMHhGMCwgMHgwQywgMHg0OCwgMHgzMSwgMHgwMCwgMHhDMywKKzB4MDAsIDB4M0MsIDB4NDMsIDB4RjAsIDB4MDQsIDB4QzEsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4MTAsIDB4MEMsIDB4MDAsIDB4QjAsCisweDhDLCAweEQwLCAweDMxLCAweEEwLCAweDE3LCAweDIyLCAweDVDLCAweDE3LCAweDMwLCAweDUwLCAweEQwLCAweDQ4LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzRCwgMHgwQywgMHhGRiwKKzB4ODgsIDB4REMsIDB4ODMsIDB4RjAsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsIDB4RjQsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDNELCAweDMwLCAweEYzLCAweDA4LCAweDdDLCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDNFLCAweEEwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg4OSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MjQsIDB4NUYsIDB4NDAsIDB4N0MsIDB4NkYsIDB4MzAsCisweEJELCAweEMwLCAweEY0LCAweDA1LCAweEQzLCAweDY4LCAweDFDLCAweDYzLCAweDcwLCAweDAxLCAweEQwLCAweDM2LCAweDAxLAorMHhERiwgMHg0OSwgMHg0QywgMHgwNSwgMHgzMCwgMHg0RCwgMHhDOSwgMHgzNywgMHgwMywgMHgxRiwgMHgwMCwgMHg0RCwgMHg2MywKKzB4RjAsIDB4MTEsIDB4ODQsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDg4LCAweDM5LCAweDAxLCAweDZELCAweDYwLCAweDM2LCAweDEzLCAweDEwLCAweDRFLCAweDQwLCAweEI4LCAweDAxLAorMHhFMSwgMHgwQywgMHg4NCwgMHgwMywgMHgxMCwgMHgwNywgMHhDMCwgMHhCOCwgMHgwNCwgMHhFRCwgMHg4NCwgMHhBQywgMHgwMSwKKzB4MTAsIDB4NEUsIDB4NDgsIDB4M0IsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4NDgsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAxLAorMHhFRCwgMHgwMywgMHg5NCwgMHgwNywgMHgxOCwgMHgxRSwgMHg1MCwgMHg3QSwgMHgwMCwgMHhDNSwgMHgwMSwgMHg5NCwgMHgxNywKKzB4NTAsIDB4MTIsIDB4NDEsIDB4NzgsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4QzQsIDB4MDQsIDB4OTIsIDB4OUUsIDB4NDIsIDB4N0IsCisweDAxLCAweDJELCAweDIxLCAweDg0LCAweDA3LCAweEQwLCAweDEwLCAweDQwLCAweDBELCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4MTUsIDB4MEMsIDB4NjAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MTQsIDB4NDEsIDB4MzAsCisweDAwLCAweENELCAweDQwLCAweDI0LCAweDIxLCAweDkwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDA0LCAweDA0LAorMHgwMywgMHhEMCwgMHg4QywgMHg0MCwgMHg0OSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4N0YsIDB4MEEsIDB4N0MsIDB4ODEsIDB4MzgsIDB4MDUsIDB4QzAsIDB4MTYsCisweDAwLCAweDUzLCAweDAwLCAweDVDLCAweDAxLCAweDcwLCAweDI3LCAweEMwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLCAweENDLAorMHg4NSwgMHhCMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgxMCwgMHg3RiwgMHgwNCwgMHg0QywgMHgwMSwgMHhGMCwgMHgxNywgMHhDMCwKKzB4NUQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDcsCisweDA4LCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDFGLCAweDAwLCAweDFDLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNSwgMHg4MCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3NCwgMHgwMSwgMHhDMiwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjIsIDB4NDEsIDB4ODAsIDB4NEEsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLCAweDlGLCAweDQwLCAweDdDLAorMHgwNiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOCwgMHg0QywgMHgxNiwgMHgzMCwgMHgzOSwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OTcsIDB4MDgsCisweDVDLCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwRSwgMHg5RCwgMHgyMCwgMHg3NCwgMHgwQSwgMHhEMiwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NDQsIDB4MEUsIDB4MTUsIDB4MDgsIDB4NDAsIDB4NjQsIDB4MjAsIDB4OUQsIDB4MUIsCisweDcwLCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDExLCAweDA0LCAweEFFLCAweDEwLCAweDA5LAorMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4NjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OEQsIDB4MDIsCisweDQ0LCAweDQyLCAweDExLCAweDA5LCAweDQwLCAweDI3LCAweDA5LCAweDlELCAweDAwLCAweDcwLCAweDQyLCAweEQyLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHg1NCwgMHgwQSwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MTQsCisweDM0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDIyLCAweDhELCAweDQ4LCAweDA0LCAweDAyLCAweDExLCAweDA5LAorMHg0MCwgMHgyMSwgMHgxMCwgMHg4RCwgMHgwOCwgMHgzNCwgMHgwMiwgMHhEOCwgMHgwOCwgMHg0MCwgMHgyMywgMHg0MCwgMHg4MSwKKzB4MDgsIDB4MDQsIDB4OTIsIDB4MTAsIDB4NDgsIDB4NDgsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAxLCAweDFGLCAweDA0LCAweDdDLCAweDUwLCAweDcwLCAweDYwLAorMHhDMSwgMHg4MywgMHgwNSwgMHgxRiwgMHg5NiwgMHg0QywgMHg1MCwgMHgzMCwgMHhBMSwgMHhEMCwgMHgwNSwgMHgwNSwgMHgxRiwKKzB4MTYsIDB4N0MsIDB4MjgsIDB4RTAsIDB4RTEsIDB4QzksIDB4MDcsIDB4MTUsIDB4MTcsIDB4MTYsIDB4NUMsIDB4MDQsIDB4MzAsCisweDExLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LAorMHhBOCwgMHgyNywgMHgyNSwgMHhCRiwgMHgzNCwgMHg3RSwgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwKKzB4MDQsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MUIsIDB4QzAsIDB4MjYsIDB4MjAsIDB4OUYsIDB4MDQsIDB4QkMsIDB4MDcsIDB4RjAsCisweDE5LCAweEMwLCAweDI3LCAweDA1LCAweEJGLCAweDA0LCAweDdDLCAweDIyLCAweEY0LCAweENCLCAweEMxLCAweDY3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyRiwgMHgwMywgMHg5MywKKzB4MDMsIDB4Q0MsIDB4MTIsIDB4NzAsIDB4MjksIDB4QzAsIDB4QTUsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4NDIsIDB4MzAsCisweDBCLCAweEMwLCAweDJFLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI0LCAweDBCLAorMHhCMywgMHg0MCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4NDcsIDB4MDEsIDB4MUIsIDB4NDMsIDB4NjgsIDB4MjgsIDB4MTAsCisweDAxLCAweDQwLCAweDg0LCAweDAyLCAweDFELCAweDBFLCAweDQ1LCAweDA4LCAweDEwLCAweDAxLCAweDQwLCAweDg1LCAweDAyLAorMHgxMSwgMHgyMCwgMHg0NCwgMHgwMCwgMHgxMywgMHgyMSwgMHhDMCwgMHg0NiwgMHgwMSwgMHgxQiwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDQsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEyLCAweEEzLCAweDEwLCAweDgxLCAweDA2LCAweDA0LCAweDAyLCAweDUwLCAweDY4LCAweDQwLCAweDIxLCAweDgxLAorMHg4RCwgMHg5MCwgMHgwNiwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMSwgMHg0MCwgMHg4MSwgMHgxNiwgMHg0NCwgMHgwMiwKKzB4OTAsIDB4MjgsIDB4NDAsIDB4QTAsIDB4MDEsIDB4ODEsIDB4NDAsIDB4MDUsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4NDMsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDIwLAorMHg5OSwgMHgwMiwgMHg2NiwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4RCwgMHgyMCwgMHg0NiwgMHgwMiwKKzB4MDQsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTgsIDB4MDksIDB4NDAsIDB4MjcsCisweDIwLCAweDg5LCAweDAwLCAweDQ0LCAweDAyLCAweDg0LCAweDY5LCAweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgyMCwgMHg5MywgMHgyMSwgMHg0QywgMHgwMiwKKzB4NzAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4ODAsIDB4NEMsIDB4MDIsIDB4MzIsIDB4MDksIDB4QzgsIDB4MjcsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEIxLCAweDA5LCAweEM0LCAweDI0LCAweDEwLCAweDkzLCAweDEzLCAweDRDLAorMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDAsIDB4MjEsIDB4MDAsIDB4OEYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDIzLCAweDAwLCAweDlGLCAweDAwLCAweDdELAorMHgyNiwgMHhGMSwgMHgwOSwgMHhDNCwgMHgyNiwgMHhBOCwgMHg5RiwgMHgwMywgMHgzQywgMHg4MiwgMHg3MCwgMHgwOSwgMHhDMCwKKzB4NTMsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsCisweDA0LCAweDFGLCAweDQwLCAweDRDLCAweDEwLCAweEYwLCAweDAwLCAweEMwLCAweDA3LCAweDgwLCAweDEzLCAweDEwLCAweDVDLAorMHg4NCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgyMCwgMHg0QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MjYsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MjEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDVDLCAweDA0LCAweDVELCAweDAwLCAweDg0LAorMHgwMSwgMHhEMCwgMHgwNSwgMHg0NCwgMHgxNywgMHg0MCwgMHg3MSwgMHg4MywgMHhGNCwgMHgwMSwgMHhEMCwgMHgwNywgMHg0MCwKKzB4MTQsIDB4MDAsIDB4N0QsIDB4MDAsIDB4ODQsIDB4QzUsIDB4MzQsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0QsIDB4MDEsCisweEM0LCAweDFELCAweDUwLCAweDA1LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhCMiwgMHgyMCwgMHhDRCwgMHgyMCwgMHgyNCwgMHgyQiwgMHhEMSwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QzksIDB4MDgsIDB4MTQsIDB4MDcsIDB4NTIsIDB4MEQsIDB4MjEsIDB4NzIsIDB4ODAsIDB4Q0QsIDB4MDEsCisweDA0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweENELCAweDAwLCAweDA3LCAweDRGLCAweDUwLCAweDBDLAorMHg0NiwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MiwKKzB4MzgsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4QTQsIDB4MDEsIDB4RDAsIDB4NEUsIDB4NDAsIDB4N0IsIDB4MDIsIDB4RTksIDB4MDAsCisweEI0LCAweDBBLCAweEQwLCAweDI3LCAweDQ4LCAweDM4LCAweDA0LCAweEVELCAweDAyLCAweDg0LCAweDAzLCAweDEwLCAweDBFLAorMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHg4MiwgMHhDNCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MCwgMHgxNywgMHgwOCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDUsCisweEFELCAweDA3LCAweEYwLCAweDVFLCAweEMwLCAweDdGLCAweDAxLCAweDY5LCAweDQxLCAweDlDLCAweDA1LCAweDcwLCAweDFFLAorMHhFMCwgMHg3QSwgMHgwMCwgMHhGRSwgMHgwMSwgMHhDRCwgMHg4NCwgMHgzMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4NzAsIDB4OUUsIDB4QzIsIDB4NTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLCAweERGLCAweDQyLCAweDVDLCAweDAwLCAweEYwLCAweEFELAorMHhDMCwgMHgzNywgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwNCwgMHhDMCwgMHgzNSwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzEsIDB4MzcsIDB4MDIsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDRELCAweEMwLCAweDQzLCAweDQwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBMCwgMHg1RiwgMHgwMCwgMHhGMywgMHg1MywgMHhGQywgMHgyNiwgMHgzMCwgMHgzRiwgMHhDMCwgMHhGRiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4MjIsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDFGLCAweEMxLCAweDdDLCAweDAwLCAweEYzLCAweDAxLCAweEVDLCAweDA3LCAweDMwLCAweDFGLCAweEMxLCAweDA4LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHhCRCwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MEEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MjIsIDB4ODAsIDB4MDIsIDB4RDAsCisweDAyLCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDA4LCAweDg0LCAweDIzLCAweEQyLCAweDBFLCAweDYwLCAweDNELCAweDAwLAorMHhFQiwgMHgwMCwgMHgwNCwgMHgxNSwgMHgxMCwgMHhERCwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTksIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDIsIDB4OTQsCisweDBFLCAweDQwLCAweDNCLCAweDAwLCAweDhELCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDgwLAorMHhFRCwgMHgwMCwgMHg4NCwgMHg0MSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwOCwgMHgyNCwgMHgxMiwKKzB4MTAsIDB4NEUsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDI4LCAweDA3LCAweDEwLCAweEQxLCAweDExLCAweDM2LCAweDAyLCAweDk4LCAweDBDLCAweDQwLCAweDMzLCAweDg4LAorMHg5RCwgMHg0MCwgMHgwNCwgMHgwMiwgMHhEMSwgMHgzMCwgMHg0MCwgMHgzMywgMHgwOCwgMHgxRCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4MDksIDB4MDUsIDB4MDQsIDB4ODAsIDB4MTgsIDB4M0MsIDB4NTAsIDB4NTgsCisweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDI0LCAweDAwLAorMHhGMywgMHgxMywgMHg3QywgMHgwMiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg5RiwgMHg0MCwgMHg0RSwgMHgwMiwKKzB4RjAsIDB4MjksIDB4QzEsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RDEsIDB4MEYsIDB4NDAsIDB4M0MsCisweDAwLCAweDEzLCAweDEzLCAweDJDLCAweDAzLCAweDMwLCAweDBGLCAweEMxLCAweDc0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHhBNywgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMCwKKzB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4NDIsIDB4M0YsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzcsCisweDAwLCAweDVGLCAweDgyLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweEM4LCAweDM3LCAweDEwLCAweDFGLCAweEEyLCAweDdDLAorMHgwMiwgMHhGNSwgMHg0RCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDksIDB4MkYsIDB4MTAsIDB4RjMsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweDNGLCAweDA4LCAweENELCAweDAwLCAweDMwLCAweDBCLCAweEMxLCAweDdGLCAweDAwLCAweEZGLCAweDAwLCAweENDLAorMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHgwMywgMHgwMiwgMHhDQywgMHgyNSwgMHgzMiwgMHgwRiwgMHhDMCwKKzB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NjYsCisweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDBDLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDFELCAweDAyLCAweDQ0LAorMHgwNiwgMHg1MCwgMHgzMSwgMHg0MSwgMHgzNywgMHgwMCwgMHgxRCwgMHgwMiwgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4NDQsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ2LCAweDAwLCAweEQxLCAweDAwLCAweDU0LAorMHgwNiwgMHhEOCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwgMHg0NCwgMHgxMCwgMHgxMywgMHg0MCwKKzB4MzcsIDB4MTIsIDB4MUQsIDB4MDAsIDB4RTQsIDB4MDYsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTEsIDB4NTAsCisweDQ0LCAweDgzLCAweDUwLCAweDBELCAweDQ4LCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEOCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDgsIDB4NEMsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MEQsIDB4MDAsCisweDA0LCAweDAwLCAweEQwLCAweDBDLCAweDQ4LCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDEwLCAweDUxLCAweDRDLAorMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5MCwKKzB4MDYsIDB4MDAsIDB4RjMsIDB4NDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAwLCAweDMyLCAweDAxLCAweEMwLCAweDI3LCAweDAwLCAweENGLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBFLAorMHhDNCwgMHgzNywgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHg2MCwgMHgzMCwgMHhBRiwgMHhDMCwgMHgwNywgMHhDMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MkYsIDB4MjAsIDB4RkYsIDB4MDAsCisweEVDLCAweDAwLCAweEYxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDQwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMiwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhFMCwgMHgzRiwgMHgwMCwgMHgzRiwKKzB4NDAsIDB4N0MsIDB4MTAsIDB4RTAsIDB4NkQsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDNGLCAweDBCLCAweEZGLCAweDJDLCAweEZDLCAweDBBLCAweEQwLCAweDhGLAorMHhDMCwgMHg0QywgMHgwMCwgMHgzRiwgMHg0OSwgMHhFQywgMHg5MywgMHgzMCwgMHg0RiwgMHhDMCwgMHgwRiwgMHgxMCwgMHgzMywKKzB4MDAsIDB4RkMsIDB4MjQsIDB4QjAsIDB4NEYsIDB4QzAsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDAsIDB4OEMsIDB4MDMsIDB4QjEsCisweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHgxMCwgMHhCRiwgMHgwMSwgMHhGRCwgMHgwOCwgMHg3NCwgMHg4QSwgMHhEMCwgMHg2RiwgMHg0NCwgMHg2NCwgMHgwMCwgMHgxOSwKKzB4MDAsIDB4RjQsIDB4MEYsIDB4NTEsIDB4QUYsIDB4NDAsIDB4MjcsIDB4MTIsIDB4MTEsIDB4NDEsIDB4NzQsIDB4MTIsIDB4MTAsCisweDlGLCAweDQwLCAweDc0LCAweDAwLCAweEYxLCAweDQyLCAweDQ0LCAweDg3LCAweDEwLCAweDExLCAweDQwLCAweDBGLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBOCwgMHhCMywgMHgwMSwgMHhDRCwKKzB4MDAsIDB4MzYsIDB4MUEsIDB4RDAsIDB4MkMsIDB4NTAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4NDQsIDB4MjQsIDB4MEIsIDB4MTEsCisweDBDLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDgwLCAweDc0LCAweDkwLCAweDkwLCAweDBDLCAweDQwLCAweDM1LCAweDAwLAorMHhDMSwgMHgwMiwgMHgwNCwgMHgwNywgMHg5MCwgMHgwMCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDAsCisweDBELCAweDQwLCAweEU0LCAweDAwLCAweDE5LCAweDAxLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweDYwLCAweDA3LCAweDAwLAorMHgzMSwgMHgwMSwgMHg3NCwgMHgwRSwgMHgxMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHg4NywKKzB4MDAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDhDLCAweEYwLCAweDBELCAweEMwLCAweEM0LCAweDMwLAorMHg5RiwgMHgwMSwgMHg2QywgMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgwNSwgMHgzQywgMHgwRSwKKzB4QjEsIDB4MEMsIDB4QzAsIDB4NjAsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEMsIDB4ODAsIDB4QjAsIDB4MTksIDB4QzAsIDB4MjMsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMiwgMHgwRSwgMHg0MCwgMHgyRiwgMHgwOCwgMHgzRCwgMHg0MCwgMHhGQywgMHgwMywKKzB4QjAsIDB4MEYsIDB4QzAsIDB4NkIsIDB4RDEsIDB4QkYsIDB4NDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MkYsCisweDAwLCAweEVGLCAweDEwLCAweEZELCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwOCwgMHhERiwgMHgwNSwgMHg3QywgMHgxMCwKKzB4NzAsIDB4MEQsIDB4QzYsIDB4MjUsIDB4MDAsIDB4OUYsIDB4QzAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDA5LCAweDFGLCAweDEwLCAweDdDLCAweDAyLCAweEYwLCAweDRELCAweEMwLCAweDA2LCAweDAxLCAweEQ3LCAweDAwLCAweDBDLAorMHgwMSwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4M0MsIDB4MjAsIDB4RkQsIDB4NDIsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MEYsIDB4NTAsIDB4NjQsCisweDAwLCAweDFELCAweDgwLCAweEYwLCAweDEzLCAweEQwLCAweEFGLCAweDQwLCAweEI3LCAweDAxLCAweDlELCAweDIzLCAweDc0LAorMHgwMiwgMHhEMCwgMHgzRiwgMHg0MCwgMHhBNywgMHg4MCwgMHhGMSwgMHgwMSwgMHg1NCwgMHgwMSwgMHgxNCwgMHgwOSwgMHg0MSwKKzB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MzAsCisweDAwLCAweENELCAweDAyLCAweDM0LCAweDJDLCAweDUwLCAweDBDLCAweDQ4LCAweDAwLCAweDAyLCAweDA5LCAweDQwLCAweDMwLAorMHgwMywgMHhEMCwgMHgxQywgMHg0MCwgMHgxMywgMHgwMCwgMHgwRCwgMHgwQiwgMHgzNCwgMHgwMCwgMHg5MCwgMHgzQywgMHg0QywKKzB4QTIsIDB4MDgsIDB4Q0QsIDB4NDEsIDB4MDQsIDB4MDMsIDB4NTEsIDB4MDgsIDB4NDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFGLCAweDAwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEI0LAorMHgwNSwgMHhEMSwgMHgxQywgMHg0MCwgMHhDOCwgMHgwMCwgMHgyRCwgMHgwMSwgMHhCNiwgMHgwRiwgMHhEMCwgMHgxRSwgMHg0MSwKKzB4N0IsIDB4MDIsIDB4MkQsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0YsIDB4MDAsIDB4RTEsIDB4NDEsCisweEQ0LCAweDJGLCAweDUwLCAweDE2LCAweDYwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMiwgMHgzMCwgMHgwOCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHg4QywgMHhDMCwKKzB4MDEsIDB4MDAsIDB4OEYsIDB4OEEsIDB4M0UsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MTMsIDB4MDAsIDB4NEYsIDB4MDAsCisweDNDLCAweDgwLCAweEYxLCAweDBDLCAweEMxLCAweDMyLCAweDAwLCAweEQ3LCAweDEwLCAweDBDLCAweDIzLCAweDcwLCAweDRDLAorMHhDMCwgMHg0QiwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwKKzB4M0QsIDB4MjQsIDB4RkYsIDB4MDAsIDB4RjgsIDB4MDMsIDB4RjAsIDB4MEYsIDB4ODAsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MjgsCisweEZDLCAweDYzLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDgwLCAweDNGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBGLAorMHhFOSwgMHgzQiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgyMywgMHhCNCwgMHgwRCwgMHhFMCwgMHgwQiwgMHg2MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4RjcsIDB4MDQsIDB4RDcsIDB4MDIsCisweDdDLCAweDA1LCAweDMwLCAweENELCAweEMwLCAweDA3LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDEzLCAweEYxLCAweENELAorMHhEMCwgMHgwNCwgMHg0MCwgMHhEMywgMHgwMSwgMHg0RCwgMHgwMCwgMHhGMCwgMHg2RCwgMHhDMCwgMHgyNywgMHg4MCwgMHhENywKKzB4MDIsIDB4N0MsIDB4MDMsIDB4MzQsIDB4MTgsIDB4QzQsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDMwLCAweDAwLCAweEUxLCAweDU2LCAweEI0LCAweDAzLCAweEIwLCAweDhFLAorMHg0NCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgzMywgMHhEMCwgMHgwRiwgMHg0MSwgMHgyQywgMHgwMCwgMHhFMSwKKzB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4NEUsIDB4NDEsIDB4M0IsIDB4ODAsIDB4RUQsIDB4MEUsIDB4QjQsIDB4MDMsIDB4QjAsCisweDA2LCAweDQwLCAweDRDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgwMCwgMHg3OCwgMHgwMSwgMHhFRCwgMHgwMSwgMHgzNiwgMHgwNSwgMHgxMCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgxOCwgMHhBRCwKKzB4MDEsIDB4QTQsIDB4MTcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4N0EsIDB4MDAsIDB4QzEsIDB4MDEsIDB4QTQsIDB4MDYsIDB4RDAsCisweDFFLCAweDQwLCAweDVCLCAweDA0LCAweEVELCAweDI1LCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDEwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDOSwKKzB4MDAsIDB4MzQsIDB4NDMsIDB4OTgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MjIsIDB4Q0QsIDB4MEEsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweEIyLCAweDAzLCAweEMxLCAweDBBLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDczLCAweDAxLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHg2QywgMHg0MCwgMHg1OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTcsIDB4MTAsIDB4NUYsIDB4MDAsIDB4RkMsIDB4ODEsIDB4MzAsCisweDA1LCAweEUwLCAweDVCLCAweDAwLCAweDdCLCAweDYxLCAweDNDLCAweDAxLCAweEYyLCAweDA1LCAweEMwLCAweERFLCAweDAwLAorMHg3MywgMHgwMSwgMHhFQywgMHgwNSwgMHhGMCwgMHgwNSwgMHhDQSwgMHgxQiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhGQywgMHgwMSwKKzB4MzAsIDB4MDcsIDB4RDQsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDAwLCAweDA1LCAweDA4LCAweDE3LCAweDAwLCAweDc4LCAweDIwLCAweEYwLCAweDAxLCAweEM2LCAweDQ3LCAweDA4LAorMHgxRiwgMHgxMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMCwgMHhDOCwgMHgwMSwgMHgwMCwgMHgxRiwgMHgwNCwgMHg1QywgMHgyNCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDQsIDB4RjEsIDB4MjEsIDB4QzAsIDB4NEIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLAorMHg4RiwgMHgwMSwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5QiwgMHgyMCwgMHg0QywgMHg4MiwKKzB4QjAsIDB4MTksIDB4ODAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4RTUsCisweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweDMyLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMywgMHg0NSwgMHg4RSwKKzB4RDAsIDB4MDksIDB4NDAsIDB4RTcsIDB4MTAsIDB4ODAsIDB4MDAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4NDksIDB4NTAsIDB4MjQsCisweDAyLCAweDkxLCAweDAyLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweEE3LCAweDAwLCAweDkxLCAweDBCLCAweDM0LAorMHgwMiwgMHgxNCwgMHgyOSwgMHg0NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MTgsIDB4NTQsIDB4MkIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDk4LCAweDIwLCAweDQ0LCAweDUyLCAweDkyLCAweDQ5LCAweDQ4LCAweDI1LCAweDA4LCAweDk1LCAweDM4LCAweDM0LAorMHgwMiwgMHgwMCwgMHgwOSwgMHg0MiwgMHgyNywgMHg0MCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxQywgMHgyRCwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsCisweDAwLCAweDg5LCAweDE0LCAweDE0LCAweDUyLCAweEQxLCAweDg4LCAweDQwLCAweDIzLCAweDA4LCAweDkxLCAweDQ4LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwOCwgMHg2MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwNCwgMHgzNiwgMHgyMiwgMHgxNCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4QzEsIDB4MTQsIDB4MzQsIDB4NTYsIDB4MTAsIDB4NDgsIDB4NDEsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDA2LCAweDA1LCAweDFGLCAweDA0LCAweDVDLAorMHgxMCwgMHhGMCwgMHg2MSwgMHhDMSwgMHgxNywgMHgwMCwgMHgxQSwgMHgwMiwgMHg0QywgMHg1MCwgMHhCMCwgMHhFMSwgMHhDMSwKKzB4ODUsIDB4NDcsIDB4MTcsIDB4MDEsIDB4N0MsIDB4MDgsIDB4MjAsIDB4NDEsIDB4QzEsIDB4MTUsIDB4MDAsIDB4MTMsIDB4MEUsCisweDdDLCAweDEwLCAweDMwLCAweDQxLCAweEMwLCAweDc3LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwNSwgMHg5RiwgMHgxNCwgMHhFQywgMHg1MiwgMHhGMCwgMHg0OSwgMHhDMiwKKzB4MkYsIDB4MTAsIDB4QkYsIDB4NDQsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzIsIDB4NkUsIDB4MDAsIDB4QkIsIDB4MDgsCisweEZDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAwLCAweDlGLCAweDgxLCAweEJDLCAweDAyLCAweEYwLCAweDBCLAorMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgwMCwKKzB4QTcsIDB4MTAsIDB4QkYsIDB4MDYsIDB4Q0MsIDB4NDYsIDB4MTAsIDB4MjksIDB4QzAsIDB4MkQsIDB4MDAsIDB4OUYsIDB4ODIsCisweERDLCAweDEyLCAweEYwLCAweDBCLCAweEMwLCAweDJDLCAweDA1LCAweEIzLCAweDAwLCAweDdDLCAweDgyLCAweDMwLCAweDRCLAorMHhDMSwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMCwgMHhCQywgMHg5MywgMHgzMCwgMHgwQiwgMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MTEsIDB4MEEsCisweDQ1LCAweDBDLCAweEIwLCAweEUwLCAweDQwLCAweDA3LCAweDA4LCAweDE3LCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweEExLAorMHg0MCwgMHg4NCwgMHgwOCwgMHgxMSwgMHgwMCwgMHg3NCwgMHg1MCwgMHgxMCwgMHgyMSwgMHg0MCwgMHgxNywgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDQsIDB4NjMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweEExLCAweDAxLCAweDg1LCAweDA0LCAweDA0LCAweDUyLCAweDU4LCAweDQ4LAorMHg0MCwgMHgyMywgMHgwMCwgMHg4OSwgMHgwMCwgMHgxNCwgMHgwQiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4NSwKKzB4ODAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDIsIDB4MjUsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4OEEsIDB4MTAsCisweDA4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgyOCwgMHgyNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwQywgMHg5NSwKKzB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4MTAsIDB4MjQsIDB4MTQsIDB4OTQsIDB4MDQsIDB4NzQsIDB4MEEsIDB4MTQsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDEyLCAweDE4LCAweDQ5LCAweDQwLCAweDYzLCAweDI4LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBMiwgMHgyNywgMHgxMCwgMHg5NywKKzB4MDAsIDB4NDgsIDB4MUEsIDB4NzAsIDB4MDksIDB4RTAsIDB4QTUsIDB4MDAsIDB4OUYsIDB4OTMsIDB4NTQsIDB4MDIsIDB4RjAsCisweDA5LCAweEM0LCAweEU0LCAweDQwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweDMzLCAweDA5LCAweEMwLCAweDY3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg3QywgMHgwNiwgMHgzNCwgMHg0OSwgMHg0MiwgMHgxNywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjAsIDB4MDAsIDB4OUYsIDB4OTAsIDB4N0MsIDB4MTIsIDB4QjAsCisweDA5LCAweEMwLCAweDY3LCAweDA5LCAweDk3LCAweDIxLCAweDdDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDIzLCAweDExLAorMHg5QiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MSwgMHg5RiwgMHgyMCwgMHg3QywgMHgwNiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDA4LCAweEYyLCAweDAxLCAweEMwLCAweDg2LCAweDE0LAorMHgxRiwgMHgwMiwgMHg0QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NiwgMHgwMywgMHgxRiwgMHgyOCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MTEsIDB4QzQsIDB4MDQsIDB4MDEsIDB4MTMsIDB4MTAsIDB4N0MsIDB4NDAsIDB4MzAsIDB4MjEsIDB4QzAsIDB4NTAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDE0LCAweDAwLAorMHg3RCwgMHg4NSwgMHhDNCwgMHg4MSwgMHhEMCwgMHgwNSwgMHg1OCwgMHhEQywgMHgwMCwgMHg1QywgMHgwMCwgMHhFQywgMHgwMSwKKzB4RDAsIDB4MjcsIDB4NDEsIDB4MUYsIDB4MTAsIDB4N0QsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDcsIDB4NDAsIDB4RDgsCisweDQwLCAweDczLCAweDAyLCAweEI0LCAweDA5LCAweDE1LCAweDA3LCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhERCwgMHgwMywgMHg3NCwgMHgzMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NzEsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MEIsIDB4RDAsIDB4MkMsIDB4NDEsIDB4QjIsCisweDAwLCAweENDLCAweDA0LCAweDc0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEMxLCAweDAyLCAweDM0LAorMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDMsIDB4RDEsIDB4OUUsIDB4NDAsIDB4OTksCisweDI4LCAweEZELCAweDA4LCAweEEwLCAweDAzLCAweERBLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI2LAorMHgxMywgMHhEMCwgMHgxRSwgMHg1MCwgMHgzQywgMHgwNCwgMHhBOSwgMHgwMCwgMHhGNCwgMHgwMywgMHg5MCwgMHgxQywgMHg0MSwKKzB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsCisweDEwLCAweEZGLCAweDAxLCAweEJDLCAweDA3LCAweEYxLCAweDVFLCAweEMxLCAweDZCLCAweDAwLCAweEZFLCAweDExLCAweDhDLAorMHgwNiwgMHhDMCwgMHgxMiwgMHhDMCwgMHg2QSwgMHgwMCwgMHhFRiwgMHgyMSwgMHhCQywgMHg0NywgMHhGMCwgMHgxQywgMHhFMiwKKzB4NTgsIDB4MDAsIDB4QTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4QjAsIDB4MUUsIDB4RDAsIDB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEIwLCAweEI1LCAweDA1LCAweDVGLCAweDAwLCAweDZDLAorMHgwMSwgMHhGMSwgMHgyRCwgMHhDMCwgMHgwNiwgMHgwMCwgMHhERiwgMHgwNiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MjcsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MkIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MTMsIDB4MDAsIDB4MTcsIDB4NDAsCisweDdDLCAweDAzLCAweDc0LCAweDBELCAweEQwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3RCwgMHgwNCwgMHg3MywgMHgwMSwgMHhDRCwgMHgyNywgMHgzMCwgMHgxRiwgMHhDMiwKKzB4N0YsIDB4MDIsIDB4RjcsIDB4MDEsIDB4Q0MsIDB4MDUsIDB4QjQsIDB4OUYsIDB4QzgsIDB4NUYsIDB4OTIsIDB4NkYsIDB4MDksCisweERDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDU4LCAweDQwLCAweEIzLCAweDA5LCAweENDLCAweEE1LCAweDMwLCAweDFGLAorMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwOCwKKzB4MzksIDB4QTAsIDB4NjEsIDB4MDAsIDB4QUMsIDB4MDMsIDB4MTAsIDB4NEUsIDB4NDgsIDB4MkIsIDB4ODIsIDB4RTEsIDB4MDAsCisweDg0LCAweDA4LCAweDEwLCAweDA2LCAweDQwLCAweDFCLCAweDAwLCAweEVELCAweDA4LCAweDg0LCAweDAzLCAweEQwLCAweDA2LAorMHg1MCwgMHgxOCwgMHgwMiwgMHhBMSwgMHgwMCwgMHg4NSwgMHgzMywgMHhCMCwgMHgwQSwgMHhDOCwgMHg1NiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MzksIDB4MDAsIDB4QzEsIDB4MDgsCisweDk0LCAweDQzLCAweDE4LCAweDBFLCAweDYwLCAweDJGLCAweDg0LCAweEU1LCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDA2LAorMHgwOCwgMHgxQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg5NCwgMHg0MywgMHhEMCwgMHg4RSwgMHg0MCwgMHgwRSwgMHgwMCwgMHg4MSwKKzB4ODAsIDB4QzQsIDB4MDEsIDB4MTgsIDB4MEUsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDM1LCAweDAwLCAweDAxLCAweDAwLCAweDUwLCAweDAyLCAweDE4LCAweDBELAorMHg0NCwgMHg2MywgMHgwMCwgMHhDNSwgMHgwMiwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0NCwgMHg4MywgMHgwMCwgMHg4RCwKKzB4MDIsIDB4MDQsIDB4NEYsIDB4RDAsIDB4MDQsIDB4NDAsIDB4QzIsIDB4MDIsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4OTAsCisweEE4LCAweDQwLCAweDBBLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBOCwgMHgzRCwgMHgwMCwgMHg5MywgMHgwMCwgMHg1NCwgMHgyOCwgMHgzMCwgMHgwRiwgMHhDMCwgMHg2NywgMHgwMCwgMHhGNywKKzB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDYsIDB4REMsIDB4MEYsIDB4RjAsCisweDBDLCAweDQwLCAweDYyLCAweDA4LCAweDkxLCAweDAwLCAweDRDLCAweDAzLCAweDExLCAweDNELCAweEM4LCAweDU0LCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNywgMHgwMCwgMHg5RiwKKzB4MDIsIDB4NjQsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4ODcsIDB4MjgsIDB4REEsIDB4MTEsIDB4N0MsIDB4MEEsIDB4NzAsCisweDA5LCAweEMwLCAweDg3LCAweDEwLCAweERGLCAweDEwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEM0LCAweDA1LCAweDA0LAorMHg5RiwgMHhDMCwgMHg2QywgMHgwMywgMHhGMCwgMHgyRCwgMHhDMiwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4M0YsIDB4MDAsIDB4QjMsIDB4ODAsIDB4N0MsIDB4MDAsIDB4MzEsCisweDBGLCAweEUwLCAweDBDLCAweDA0LCAweEY3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDAzLCAweDQwLCAweDJGLCAweDA0LAorMHgzNywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwQywgMHg0MCwgMHhCMiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4NzAsIDB4MDUsIDB4QzEsIDB4MDUsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEExLCAweDIwLCAweDM2LCAweDAwLCAweDkxLCAweDAzLCAweDc0LCAweDA0LCAweDEwLCAweDBELCAweDQ4LCAweDQ0LCAweDAxLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NywgMHgwMCwgMHg0RCwgMHgwMCwgMHg2QywgMHgwMywKKzB4RDAsIDB4MDksIDB4NDAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDcsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NDQsIDB4NDIsIDB4ODQsCisweDA0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweDAwLAorMHgxMSwgMHgwMSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgxOCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNiwKKzB4RDAsIDB4MUIsIDB4NjAsIDB4Q0YsIDB4MDAsIDB4MUQsIDB4NTgsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MUQsIDB4NzAsIDB4QzQsCisweDAwLCAweDM1LCAweDgxLCAweDc0LCAweDIxLCAweDUwLCAweDBELCAweDQwLCAweDA1LCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDIsCisweDIwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDA0LCAweDAwLCAweDA1LCAweDAwLCAweDY0LAorMHg4MywgMHgxNCwgMHgwOCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MTAsIDB4M0EsIDB4MDgsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MEYsIDB4NDAsIDB4MDQsCisweDEwLCAweEU3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDYwLCAweENDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHg3MSwgMHgwNSwgMHhDMCwKKzB4MDUsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzgsIDB4M0YsCisweDIwLCAweEJGLCAweDgwLCAweEZFLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwMywgMHhDOCwKKzB4MEYsIDB4MDAsIDB4M0IsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MTcsIDB4NjIsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDdGLCAweDAyLCAweEZCLCAweDA5LCAweEFDLAorMHgwNywgMHhCMCwgMHgxRiwgMHhDMCwgMHg3QSwgMHgwMCwgMHhGRCwgMHgyMSwgMHhFQywgMHgwNywgMHhCMCwgMHgxRiwgMHhDMCwKKzB4N0EsIDB4MDgsIDB4RkIsIDB4ODksIDB4Q0MsIDB4MDcsIDB4RjIsIDB4MUYsIDB4QzAsIDB4N0QsIDB4MTIsIDB4RkIsIDB4MDksCisweEVDLCAweDg3LCAweDMzLCAweDFFLCAweEQyLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwNCwgMHg0NCwgMHgwNCwgMHgzMCwgMHgxMSwgMHg0MCwKKzB4NDQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDcsIDB4NDQsIDB4MDAsIDB4MEQsIDB4MDAsCisweDQ0LCAweDA0LCAweDEwLCAweDExLCAweEMwLCAweDA1LCAweDM5LCAweDExLCAweDI0LCAweDQ0LCAweDEwLCAweEIyLCAweDExLAorMHg0NCwgMHgwQywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4MzUsIDB4MTgsIDB4RDksIDB4NjAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4RDksIDB4QTAsCisweDY0LCAweDUzLCAweDkyLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwNCwgMHgzNCwgMHg0MywgMHgxOSwgMHgwQywgMHg0MCwgMHg0QywgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTgsIDB4MDcsIDB4MDgsIDB4MTEsIDB4MDAsCisweDQ0LCAweDAwLCAweEQxLCAweDAxLCAweDQwLCAweDA0LCAweDA4LCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLAorMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgxOCwgMHgxNSwKKzB4MDAsIDB4MTQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDMyLCAweDIwLCAweENCLCAweDIwLCAweDZDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgzNiwgMHg4MCwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwOCwgMHhEQiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4QjAsIDB4MEMsIDB4ODAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzIsCisweDBDLCAweEM4LCAweDIwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHg4OCwgMHgwRCwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGOCwgMHg0MCwgMHgzMCwgMHgwMywgMHhDMywgMHgwRCwgMHg4MCwgMHgzRSwKKzB4MDAsIDB4RjgsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEUsIDB4MDgsIDB4M0QsIDB4MDAsIDB4RjgsIDB4MDAsIDB4QjAsCisweDAzLCAweDgyLCAweDBGLCAweDAwLCAweDNCLCAweDMwLCAweEU4LCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwMCwgMHhENywKKzB4MDAsIDB4NkMsIDB4MDMsIDB4NzEsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDM2LCAweDA0LCAweERGLCAweDAwLCAweDVDLCAweDkzLCAweDMxLCAweDBELCAweEMxLCAweDM0LCAweDAyLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMSwgMHgwOSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4ODQsIDB4MDYsIDB4MTEsIDB4NDAsIDB4MzQsIDB4NEMsIDB4MTAsCisweDIwLCAweDQxLCAweDgzLCAweDI0LCAweDEwLCAweDAwLCAweDc0LCAweDA0LCAweDEwLCAweEIwLCAweDAwLCAweDA0LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwNCwgMHgwQywgMHgxMCwgMHgzMSwgMHg0MiwgMHgwMywgMHgwMCwgMHgwQywgMHgwMywgMHg3MCwgMHg4MCwKKzB4MTAsIDB4MjEsIDB4NDAsIDB4NkMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweDIwLCAweDcwLCAweDEwLCAweEM1LCAweDgwLCAweDI0LCAweDA3LCAweDQwLCAweDBDLCAweDQwLCAweDMzLCAweDAxLAorMHhDNSwgMHgwMCwgMHgyNCwgMHg0NywgMHg1MCwgMHhBQywgMHg0MCwgMHgzMSwgMHgwOCwgMHhDNCwgMHgwMCwgMHgxNCwgMHgwQiwKKzB4MTQsIDB4M0MsIDB4MDAsIDB4MzAsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTgsIDB4MkMsIDB4NDAsIDB4MEYsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDAyLCAweDRDLCAweDBBLAorMHgyMSwgMHgwOSwgMHhGNCwgMHgwNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgyNSwgMHgzNywgMHhGNiwgMHgwNCwKKzB4MTIsIDB4MTIsIDB4NjAsIDB4NDksIDB4MDIsIDB4MjEsIDB4MDEsIDB4ODQsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDEsIDB4NEIsCisweDAyLCAweDJELCAweDExLCAweEI0LCAweDI0LCAweDgwLCAweDEyLCAweDQyLCAweDNFLCAweDIwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwMCwgMHgyQywgMHgyMywKKzB4NTEsIDB4OEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDgsIDB4M0MsIDB4NDMsIDB4NzAsIDB4MEMsIDB4QzQsIDB4MzEsCisweDA2LCAweEM3LCAweDAwLCAweDFDLCAweDQzLCAweDMwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLCAweENGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwQywgMHhFNCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MzgsIDB4MDksIDB4MjAsIDB4M0YsIDB4MDAsIDB4RjAsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MEYsCisweDAwLCAweDNCLCAweDJDLCAweEJDLCAweDIwLCAweDcwLCAweDAzLCAweEMwLCAweDBDLCAweDAyLCAweDNGLCAweDAwLCAweEJDLAorMHgyMCwgMHhGOCwgMHg4MywgMHhDMCwgMHgwRiwgMHgwMCwgMHgxRiwgMHgwMCwgMHhGQywgMHgwMCwgMHg3MSwgMHgxMSwgMHhDOCwKKzB4MDksIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4NzcsCisweDAwLCAweEMzLCAweDQwLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDczLCAweDAwLCAweEM3LCAweDAxLCAweDZDLAorMHgwNywgMHgzNiwgMHgwRCwgMHhDNCwgMHg3MCwgMHgwMCwgMHhEQiwgMHg0MCwgMHg2QywgMHgwMywgMHhGMCwgMHgwQywgMHhEMCwKKzB4MzQsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDk4LCAweDBELCAweDA4LCAweDJCLCAweDAwLCAweDg0LAorMHgwMCwgMHhEMiwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyMSwgMHg2MCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MiwKKzB4MDgsIDB4MDAsIDB4MzEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4OTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweEI0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDRGLCAweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhGOSwgMHgwMSwgMHhBNiwgMHgwNywgMHhEOSwgMHgxRSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4RjUsIDB4MDEsIDB4QTQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MTAsIDB4RTksIDB4MDEsCisweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDYwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweEQ0LCAweDA3LCAweDkwLCAweDFFLAorMHg2MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwKKzB4MDMsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDYsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDIsIDB4MDMsIDB4MDAsIDB4MDUsIDB4MDAsCisweDA0LCAweDAwLCAweDE4LCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDkwLCAweDAwLAorMHg2MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1QiwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTUsIDB4MDAsIDB4NUIsIDB4ODAsCisweDJDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDU3LCAweDQwLCAweDZDLCAweDAxLCAweDMwLCAweDA1LAorMHhDQSwgMHgxNCwgMHgxMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHgxMCwgMHgwMCwgMHg1MywKKzB4MDAsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDhELCAweDA4LCAweDNGLCAweDAwLCAweEZDLCAweDA4LCAweEUwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgyMCwgMHgzOSwgMHgyMCwgMHhGQywgMHgwOCwgMHhGMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgzRiwKKzB4NDAsIDB4RTQsIDB4ODAsIDB4QzIsIDB4MDMsIDB4QzAsIDB4OEYsIDB4MDAsIDB4M0IsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDAzLCAweEMwLCAweDRCLCAweDA4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgyMiwgMHgzMCwgMHg0OSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4QzAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MDksIDB4ODAsIDB4RTUsIDB4MDgsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4NzAsCisweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDk3LCAweDAxLCAweDdDLCAweDE2LCAweDMwLCAweDA5LCAweDgwLCAweDQxLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhFNCwgMHgyMywgMHg5RCwKKzB4MDAsIDB4NDUsIDB4MEEsIDB4MTAsIDB4MTgsIDB4ODAsIDB4MjYsIDB4MDAsIDB4OUMsIDB4MTEsIDB4NzAsIDB4MDYsIDB4RDAsCisweDI4LCAweDQwLCAweDY0LCAweDA0LCAweDhELCAweDgwLCAweDA0LCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDY0LCAweDAzLAorMHg5MSwgMHgwMiwgMHg3NCwgMHgwRSwgMHgxMCwgMHgxOCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4ODAsIDB4QkQsIDB4ODAsIDB4QzQsIDB4MDIsIDB4NTAsCisweDBCLCAweDQwLCAweDJDLCAweDAxLCAweEJDLCAweDA4LCAweEYwLCAweDIyLCAweEQyLCAweDBCLCAweDQxLCAweDJELCAweDAwLAorMHhCRCwgMHgwMCwgMHhENCwgMHgwMiwgMHg0MiwgMHgwQiwgMHg0MCwgMHgyQywgMHgwMCwgMHhCNSwgMHgwQSwgMHhGNCwgMHhDMiwKKzB4MDAsIDB4NEIsIDB4NDAsIDB4NzEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDI5LCAweDAwLCAweEFELCAweDAwLCAweEQ0LCAweDAzLCAweDU0LCAweDFCLCAweDQwLCAweDZBLCAweDIwLAorMHhBQywgMHhBMCwgMHhCMCwgMHhBMywgMHhEMSwgMHg4QiwgMHg0MCwgMHgyOSwgMHgwMCwgMHhCRCwgMHg2OCwgMHhDNCwgMHgwMiwKKzB4NTEsIDB4MEIsIDB4NDAsIDB4MjgsIDB4MDIsIDB4QTEsIDB4MDgsIDB4QjAsIDB4MjIsIDB4MTEsIDB4MEIsIDB4NDQsIDB4NTEsCisweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA3LCAweDA4LAorMHgxRiwgMHg4MCwgMHg0QywgMHgwMCwgMHg3NCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHgzOCwgMHgwOCwKKzB4RjAsIDB4MjAsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MjIsIDB4NUMsIDB4MDAsIDB4NzIsIDB4MDEsIDB4RDAsIDB4ODAsCisweDAwLCAweDE3LCAweDAyLCAweDc4LCAweDA4LCAweDM0LCAweDAzLCAweEMwLCAweDc1LCAweEMwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwNSwgMHg5RiwgMHgxNCwgMHg2QywgMHgwMiwKKzB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NDksIDB4ODAsIDB4MjYsCisweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDA0LCAweDNDLAorMHgxMiwgMHhGNCwgMHgwOSwgMHhDMCwgMHg2NiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUQsIDB4QTgsIDB4QUYsIDB4MDAsIDB4OUYsIDB4MDIsIDB4RjQsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkIsCisweDAwLCAweEJGLCAweDgwLCAweENDLCAweDgyLCAweEYwLCAweDBCLCAweEQwLCAweDJDLCAweDAwLCAweDhCLCAweDgyLCAweDhDLAorMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhBRiwgMHgwMCwgMHhDRCwgMHgwQSwgMHhCMCwgMHgwQSwgMHhDMCwKKzB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTAsIDB4NDcsCisweDAxLCAweDBELCAweDA1LCAweDc0LCAweDAwLCAweEIwLCAweDAxLCAweDQwLCAweDA3LCAweDA4LCAweDFELCAweDAwLCAweDZDLAorMHgxMCwgMHhEMCwgMHg0MSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MDAsIDB4MDEsIDB4MUQsIDB4MDAsIDB4NDUsIDB4MTAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4NzAsIDB4NjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEyLCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwOCwgMHg5RCwgMHhBMCwgMHgwNCwgMHg0MiwgMHhEMCwgMHgwOCwgMHg0MSwKKzB4MjQsIDB4MDAsIDB4ODksIDB4MDAsIDB4NjQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MDQsIDB4OEQsIDB4MDAsCisweDQ0LCAweDAyLCAweDkwLCAweDA4LCAweDUwLCAweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHgyNSwgMHgxMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsCisweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDhDLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjAsCisweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDIwLCAweDAwLCAweDlCLCAweDAwLCAweDJDLCAweDAyLCAweEIwLCAweDA4LAorMHhDMCwgMHgyNiwgMHgwMCwgMHg5RSwgMHgwMCwgMHg0QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHgyOCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEY4LCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDgyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1OCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzEsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAxLCAweDFGLCAweDAwLCAweDRELCAweDEwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwNCwgMHgxNywgMHg0MCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywKKzB4MDAsIDB4NUMsIDB4NDAsIDB4MzAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NUMsIDB4OTAsIDB4MzQsCisweDAxLCAweEMwLCAweDQxLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBMCwgMHhEQywgMHgwMSwgMHg1RCwgMHgwMCwgMHhDNCwgMHgwNSwgMHhEMCwgMHg4NywgMHg0OCwgMHg1RiwgMHgwNCwgMHg3MSwKKzB4MDcsIDB4RjQsIDB4MDEsIDB4MTAsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDIsIDB4NTEsIDB4MDAsIDB4QzAsIDB4MTEsIDB4MTAsCisweEI3LCAweDQwLCAweDVGLCAweDAwLCAweDcwLCAweDAxLCAweDg0LCAweDAxLCAweDEwLCAweDA2LCAweDQwLCAweDUwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhCMiwgMHgwOCwgMHhDRCwKKzB4MDAsIDB4MTQsIDB4MEEsIDB4RDgsIDB4MkMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4RDQsIDB4MTEsIDB4MzQsIDB4MDcsIDB4MTAsCisweDFELCAweDQwLCAweEEzLCAweDAwLCAweEQ1LCAweDAwLCAweDE0LCAweDBFLCAweDE0LCAweDFDLCAweDQwLCAweDYzLCAweDAwLAorMHhDNCwgMHgwNSwgMHgxNCwgMHgyQiwgMHgxNCwgMHgyNCwgMHg0MCwgMHg1MSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDgsIDB4RDEsCisweDBFLCAweDQwLCAweDdGLCAweDAwLCAweDYxLCAweDgwLCAweEIwLCAweDBGLCAweDEwLCAweDBFLCAweDRELCAweDJGLCAweDAwLAorMHhGMSwgMHgwMCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHg2QiwgMHgwNCwgMHhGNSwgMHgzMCwgMHg4NCwgMHgwMywKKzB4MTQsIDB4MDcsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDE4LCAweDU5LCAweDAwLCAweEVGLCAweDA5LCAweDlDLCAweDA1LCAweEYxLCAweDFBLCAweEMwLCAweDRCLCAweDAwLAorMHhFNywgMHg0MSwgMHhGQywgMHgwNywgMHgzNCwgMHgxNiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFNywgMHg3NywgMHg5QywgMHgwNiwKKzB4MzAsIDB4MUUsIDB4QzIsIDB4N0IsIDB4MDAsIDB4NjcsIDB4RTEsIDB4REMsIDB4MDYsIDB4MzAsIDB4MTYsIDB4ODAsIDB4NDUsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDNCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RTAsIDB4MDUsIDB4QzAsIDB4MzMsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MTcsCisweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEM4LCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg3RiwgMHgyMiwgMHhGRiwgMHgxMSwgMHhGOCwgMHgwNCwKKzB4RjAsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4QUYsIDB4MDEsIDB4REMsIDB4ODYsIDB4MzAsIDB4OUYsIDB4QzgsIDB4NkIsCisweDAwLCAweEZCLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFCLCAweEU0LCAweDZGLCAweDAwLCAweEIzLCAweDA5LCAweEM0LAorMHgwNywgMHgzMCwgMHgxNiwgMHhDOCwgMHgwQSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDQsIDB4QkMsIDB4NDAsIDB4RDgsIDB4OEEsIDB4NDAsIDB4MkIsCisweDAxLCAweDJELCAweDAwLCAweDg0LCAweDIyLCAweDEwLCAweDhBLCAweDQyLCAweDJCLCAweDAwLCAweEUxLCAweDA4LCAweDg0LAorMHg0MiwgMHhEMCwgMHgwMiwgMHg0MCwgMHgyQiwgMHgwMSwgMHhCQiwgMHgwQywgMHhDNCwgMHgxMywgMHhCMCwgMHgwRSwgMHg0MCwKKzB4NTQsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDIsIDB4MTksCisweDMwLCAweEVELCAweDQwLCAweEI0LCAweDAxLCAweEQwLCAweDBBLCAweDQ4LCAweDBCLCAweDgwLCAweEVELCAweDAwLCAweEI0LAorMHgwMywgMHg5NCwgMHg4NiwgMHg0NCwgMHgzRiwgMHgwNCwgMHhFOSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHg4QSwgMHg0MSwKKzB4MkIsIDB4MjQsIDB4MjEsIDB4NDAsIDB4RDUsIDB4MDAsIDB4MTEsIDB4MDcsIDB4NDAsIDB4MjIsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDgzLCAweDAwLCAweENELCAweDA5LCAweDM2LAorMHg4NSwgMHhEMCwgMHhBMCwgMHg0MCwgMHhFMywgMHg4NCwgMHhDRCwgMHgwQywgMHg3NCwgMHgwOCwgMHg5MCwgMHgwMSwgMHg0MCwKKzB4RDMsIDB4MDAsIDB4RDEsIDB4NTIsIDB4MDQsIDB4MDYsIDB4RDAsIDB4MDAsIDB4NDgsIDB4RDMsIDB4ODAsIDB4MDksIDB4MDMsCisweDE0LCAweDI4LCAweDkwLCAweEFDLCAweDQwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHhFNSwgMHgyQywgMHhGRiwgMHgwQiwgMHg3QywgMHgyQywgMHhGMCwgMHgzMCwgMHhDMCwKKzB4NjcsIDB4MDEsIDB4REYsIDB4MDIsIDB4N0MsIDB4MTksIDB4QjAsIDB4RDksIDB4QzAsIDB4QTcsIDB4MDIsIDB4RkIsIDB4ODcsCisweDRGLCAweDAyLCAweEUwLCAweDJDLCAweDAwLCAweDA3LCAweDAyLCAweEQzLCAweDExLCAweDVELCAweDBELCAweDMxLCAweDk1LAorMHhDMCwgMHg1NiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwKKzB4QTcsIDB4MDAsIDB4REUsIDB4NjAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDIsCisweDQwLCAweDAxLCAweDcwLCAweDI1LCAweEMwLCAweDI3LCAweDIwLCAweERGLCAweDgwLCAweDdDLCAweENBLCAweEYwLCAweDA5LAorMHhDOSwgMHgwNywgMHgwMCwgMHhERiwgMHg1MiwgMHg2OCwgMHg0MSwgMHhGMCwgMHgwNSwgMHhDMCwgMHhBNywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MkYsIDB4MTQsIDB4RkYsIDB4MDAsCisweEZDLCAweDAxLCAweEY4LCAweDAzLCAweEMxLCAweDBFLCAweDAwLCAweEZGLCAweDAxLCAweENDLCAweDQzLCAweDMwLCAweDhCLAorMHhDMCwgMHg2QywgMHgyMCwgMHhGRiwgMHgwMCwgMHhDRCwgMHgwNiwgMHhGMCwgMHg4RiwgMHhDOCwgMHgzQywgMHgwMCwgMHg3NywKKzB4MDUsIDB4RkMsIDB4MDcsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MTUsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDIwLCAweDY2LCAweDAxLCAweERELCAweDAwLCAweDc0LCAweDA4LCAweEQ4LCAweDMxLAorMHg0MCwgMHg2NCwgMHgwMCwgMHg4RCwgMHgwNSwgMHg0NCwgMHgwOCwgMHg1MCwgMHgwNSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERSwKKzB4MDAsIDB4NDQsIDB4NjIsIDB4RDAsIDB4MTksIDB4NDQsIDB4OTAsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NzQsIDB4NEIsIDB4MzAsCisweDAwLCAweDQwLCAweDE0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHhBMCwgMHg0NiwgMHgwMCwgMHhERCwgMHg4MCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgxOSwgMHgwMCwgMHg0NiwgMHgwMCwgMHgxRCwKKzB4MDgsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MDksIDB4NDEsIDB4MjUsIDB4MDIsIDB4RDksIDB4MDAsIDB4NjQsIDB4MDMsIDB4RDAsCisweDA5LCAweDQwLCAweDg0LCAweDMwLCAweDk1LCAweDAwLCAweDMwLCAweDIwLCAweDAyLCAweDQ1LCAweDQwLCAweDA1LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDgsIDB4NDQsIDB4NDAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NTAsCisweDAwLCAweDUwLCAweDIwLCAweDEwLCAweEM1LCAweDAwLCAweDA0LCAweDAxLCAweEQwLCAweDAxLCAweDEwLCAweDA0LCAweDg4LAorMHg0MSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMSwgMHgwQywgMHg0MCwgMHg0MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTksIDB4MDYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RDAsCisweDA5LCAweEMwLCAweDA2LCAweDAwLCAweDVGLCAweDAwLCAweDBDLCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDEwLAorMHhFRCwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMCwgMHgyMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwKKzB4MzQsIDB4MDEsIDB4QzAsIDB4MDUsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEI4LCAweDJELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLAorMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwKKzB4RjEsIDB4MDMsIDB4RTAsIDB4MUYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MEIsIDB4RDAsIDB4MTcsCisweDI0LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDJGLCAweDA0LAorMHhGRiwgMHgwMSwgMHhFQywgMHg1MiwgMHhEMCwgMHgxRiwgMHhDMCwgMHgzRSwgMHgyMSwgMHgyRiwgMHgwMSwgMHhGQywgMHgxMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MDAsIDB4OEIsIDB4MjEsIDB4Q0UsIDB4MjMsIDB4QjAsIDB4NkYsIDB4QzAsIDB4QkMsCisweDA5LCAweDNGLCAweDA0LCAweENDLCAweDkzLCAweDMzLCAweDAzLCAweEMyLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHg4NywgMHgxMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwRSwKKzB4RDgsIDB4MUQsIDB4NDAsIDB4N0YsIDB4MEEsIDB4OUQsIDB4MDEsIDB4RjQsIDB4MkYsIDB4MTAsIDB4MkYsIDB4NDQsIDB4NTcsCisweDEwLCAweDkxLCAweDAwLCAweDQ0LCAweDMzLCAweDEwLCAweDJGLCAweDQwLCAweEJDLCAweDAxLCAweDVELCAweDA5LCAweEM0LAorMHhEQiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MDMsIDB4MDUsIDB4Q0QsIDB4NTQsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweENELCAweDAxLCAweDM0LCAweDAzLCAweDE4LCAweDJDLCAweDQwLCAweDE0LCAweDAwLCAweERELCAweDAwLCAweDE1LAorMHgxMywgMHhEMCwgMHg2QywgMHg0MCwgMHhCMSwgMHgwOCwgMHg4RCwgMHgwMCwgMHg1NCwgMHgyMywgMHgxMCwgMHgwMCwgMHg0MCwKKzB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NDUsCisweDAwLCAweERELCAweDA0LCAweDc0LCAweDg0LCAweEQxLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERDLCAweDAwLCAweDc0LAorMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg2NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0QSwKKzB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDY3LCAweDAwLCAweERGLCAweDIwLCAweDZDLAorMHgxNCwgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHg1RiwgMHhFOCwgMHg3QywgMHgwMywgMHgzMSwgMHgwRCwgMHhDMCwKKzB4NDIsIDB4MDAsIDB4OEIsIDB4NDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzUsIDB4MTAsIDB4NEUsIDB4NTIsCisweDFDLCAweDAzLCAweDE0LCAweDE5LCAweEMwLCAweDIzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHgwNSwgMHgwMCwgMHhGRiwgMHg0MSwgMHhGQywgMHgwMiwgMHhGMiwgMHgyRiwgMHhDMSwKKzB4M0YsIDB4MEMsIDB4N0YsIDB4MDEsIDB4QjAsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NEYsIDB4MDIsIDB4QjgsIDB4NDAsCisweEQ4LCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDNFLCAweDAwLCAweEZGLCAweDAzLCAweEVDLCAweDIzLCAweEY0LCAweDAzLAorMHg0MCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwKKzB4NjUsIDB4MDEsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MEMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4NUIsIDB4MDAsCisweDRDLCAweDQzLCAweEYwLCAweDhELCAweEMwLCAweDk3LCAweDAwLCAweERGLCAweDA4LCAweDVDLCAweDAzLCAweEYxLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHg0MywgMHhGMCwgMHg4OSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4RDEsIDB4MEIsCisweDc0LCAweDAwLCAweEQwLCAweDNELCAweDQwLCAweEJGLCAweDI0LCAweDUxLCAweDBBLCAweEM0LCAweDFCLCAweEQwLCAweEJGLAorMHg0MCwgMHgxNywgMHgwNiwgMHg5QywgMHgwMCwgMHhDNCwgMHgwMywgMHhEMCwgMHgwRiwgMHgwNCwgMHgzQywgMHgxMCwgMHhEQywKKzB4MDEsIDB4NDAsIDB4MEIsIDB4MTAsIDB4QjksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweEEwLCAweDAwLCAweEMxLCAweDAxLCAweDI0LCAweDAyLCAweEQwLCAweDFDLAorMHg0MCwgMHgzMywgMHgwMCwgMHgwOSwgMHgwQiwgMHgzNCwgMHgwMywgMHhEMCwgMHgxQywgMHg2MCwgMHg4MywgMHgwOCwgMHg4OCwKKzB4MDEsIDB4NTQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4NEQsIDB4MTMsIDB4MTAsIDB4MkYsIDB4NTAsCisweDA4LCAweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLAorMHgwMCwgMHg3OCwgMHg0MCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0OSwgMHg3QiwgMHgwMCwgMHhCNSwKKzB4MDksIDB4QTQsIDB4ODcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NEIsIDB4MDksIDB4QUQsIDB4MjUsIDB4ODAsIDB4MDcsIDB4RDAsCisweDFDLCAweDQwLCAweDc4LCAweDAwLCAweENELCAweDIxLCAweEMwLCAweDI3LCAweDAwLCAweDEyLCAweDQwLCAweDNGLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgxMCwgMHgwMiwgMHhDMywKKzB4MTgsIDB4M0MsIDB4MjMsIDB4RjgsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDEsIDB4OEIsIDB4MDgsIDB4MkMsIDB4MDMsIDB4RjAsCisweDVDLCAweDgwLCAweDQzLCAweDAxLCAweENGLCAweDA1LCAweDFDLCAweDAzLCAweEYwLCAweDRDLCAweEMwLCAweDMxLCAweDAwLAorMHg0RiwgMHgxMCwgMHg1QywgMHgzNywgMHg3MCwgMHgwQywgMHhDMCwgMHg0QiwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MjMsIDB4RjAsCisweDBGLCAweEM4LCAweDNCLCAweDAwLCAweEZCLCAweDY4LCAweERDLCAweDIzLCAweEYwLCAweDJGLCAweEMxLCAweDBGLCAweDIwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgwOCwgMHg3QywgMHhBQiwKKzB4NTIsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDc4LCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM2LCAweDA0LAorMHgxRiwgMHgwMCwgMHg0QywgMHg2MywgMHhGMCwgMHg0RCwgMHhDOCwgMHgwNiwgMHgwOCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMywKKzB4RjEsIDB4RkQsIDB4QzAsIDB4QjYsIDB4MDEsIDB4NUYsIDB4MDEsIDB4NkMsIDB4MEEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NDAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDkwLCAweDM5LCAweDAwLAorMHhFRCwgMHg4MCwgMHhCNCwgMHgwMywgMHhDMSwgMHgwRSwgMHhDMCwgMHgzOSwgMHgwMSwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywKKzB4RDEsIDB4NEUsIDB4NDIsIDB4MEEsIDB4MDAsIDB4QTUsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDEsIDB4MEUsIDB4NDEsIDB4MzgsCisweDBELCAweEVELCAweDAwLCAweDg0LCAweDAyLCAweDEyLCAweDA2LCAweEMwLCAweDRFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgyOCwgMHhFRCwgMHgyMSwgMHhCMCwgMHgwNywKKzB4RDksIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDMsIDB4QUQsIDB4MDEsIDB4QTQsIDB4MTcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NEEsCisweDA4LCAweEUxLCAweDIxLCAweEI0LCAweDI3LCAweEQwLCAweDFDLCAweDQwLCAweDdBLCAweDAyLCAweDdELCAweDAxLCAweEE0LAorMHgwNiwgMHgxMCwgMHgxQywgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTYsIDB4MDAsIDB4MzcsIDB4MDQsIDB4OUQsIDB4NDEsIDB4MzQsIDB4NDcsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzEsCisweDAwLCAweENELCAweDA4LCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDYyLCAweDgwLCAweDg1LCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMywgMHgwNCwgMHgwMiwgMHgxMCwgMHgyRCwgMHg0MCwKKzB4NUEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4OUYsCisweDAwLCAweDVELCAweDAxLCAweEZFLCAweDFELCAweEYwLCAweDE1LCAweEUxLCAweDE2LCAweDAwLCAweDZGLCAweDAzLCAweDZGLAorMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1QSwgMHgwNCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MTYsIDB4MDAsIDB4N0YsIDB4MTAsIDB4NkMsIDB4NDUsIDB4MzAsIDB4NDcsIDB4QzAsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAyLCAweDA1LCAweDAwLCAweDFGLCAweDA4LCAweDdFLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhBMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwNCwgMHg1RSwgMHgwMCwgMHhGMCwgMHgyMCwgMHgwOCwKKzB4MDcsIDB4MDEsIDB4MUYsIDB4ODAsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MUQsIDB4MjQsCisweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEQ4LCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMCwgMHg5MywgMHhDMSwgMHgyQywgMHg4MiwgMHhFMSwgMHgxOSwgMHhDMCwKKzB4MjUsIDB4MDksIDB4OUYsIDB4MDAsIDB4NEMsIDB4OTIsIDB4RDAsIDB4MTksIDB4QzAsIDB4NjQsIDB4MTAsIDB4OTMsIDB4MDgsCisweDNDLCAweDAyLCAweDQwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDkzLCAweDgwLCAweDdDLCAweDAyLCAweDc1LCAweDA5LAorMHhDMSwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKKzB4NjYsIDB4MDAsIDB4OTEsIDB4ODEsIDB4NEMsIDB4MDIsIDB4MTAsIDB4OTgsIDB4MDAsIDB4QTUsIDB4MDAsIDB4OUQsIDB4MTgsCisweDQ1LCAweDBBLCAweEQwLCAweEE5LCAweDUwLCAweDI0LCAweDAzLCAweDk1LCAweDAwLCAweDc0LCAweDAyLCAweDEzLCAweDA5LAorMHg0NCwgMHgyNywgMHgwMCwgMHg5MSwgMHgxQiwgMHgzNCwgMHgwNiwgMHgxMiwgMHg2OSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MzQsIDB4ODIsIDB4OTksIDB4MDgsCisweDY0LCAweDA2LCAweDEwLCAweDA5LCAweDAwLCAweEE0LCAweDAwLCAweDk5LCAweDAwLCAweDU0LCAweDQyLCAweEQyLCAweDA5LAorMHg0NSwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwKKzB4MDAsIDB4NzQsIDB4MTIsIDB4NTEsIDB4MEQsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDMwLCAweDE1LCAweEMxLCAweDAwLCAweDA0LCAweDUyLCAweDEyLCAweDE5LAorMHg0MiwgMHgyMSwgMHg4MCwgMHg4RCwgMHg0MCwgMHgwNiwgMHg4MiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4NSwKKzB4MDAsIDB4MzQsIDB4MjIsIDB4NTAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NzAsIDB4RDIsIDB4MTAsCisweDQ4LCAweDQxLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHgzOCwgMHgwNywgMHgwMSwgMHgxQiwgMHgwMCwgMHg2QywgMHgxMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwNSwgMHgxQiwKKzB4NDAsIDB4NDgsIDB4RDAsIDB4RjAsIDB4RTEsIDB4QzEsIDB4MDQsIDB4MDAsIDB4NTMsIDB4MEEsIDB4N0MsIDB4NTgsIDB4NzEsCisweDYxLCAweEMxLCAweDg3LCAweDA1LCAweDEzLCAweDE0LCAweDM4LCAweDExLCAweDcwLCAweDQxLCAweEMwLCAweDc0LCAweEUwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgyRCwgMHg0NSwgMHhCRiwKKzB4MTQsIDB4REMsIDB4MDIsIDB4QjQsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QUMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDE5LCAweEMwLCAweDJCLCAweDA4LCAweEJGLCAweDAxLCAweDdDLCAweDEyLCAweEIxLCAweDQ5LCAweEMwLCAweDI3LCAweDExLAorMHhBRiwgMHgwMCwgMHhGQywgMHg1MiwgMHhGMCwgMHg0QiwgMHhDMSwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4QkYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NTIsIDB4RjAsCisweDBCLCAweEMwLCAweDJELCAweDA1LCAweEIzLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHg4MCwgMHg2QywgMHgwMiwgMHgxMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwKKzB4MzIsIDB4MEIsIDB4RDAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDAwLCAweDg3LCAweDAwLCAweDFCLCAweEE0LCAweDc0LCAweDA4LCAweEQwLCAweDAxLCAweDQwLCAweDg0LCAweDQ4LAorMHgxMSwgMHgyMCwgMHg0NCwgMHgwMCwgMHhEMiwgMHhBMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0MCwgMHg5MCwKKzB4MTAsIDB4NDEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NjAsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLCAweEExLCAweDIxLAorMHg4MSwgMHgxMCwgMHgzMCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHhENSwgMHgwMCwgMHgwNCwgMHgwQiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4ODAsIDB4MzAsIDB4NEEsIDB4MTEsIDB4MjgsIDB4NDEsIDB4QTIsCisweDA0LCAweDhELCAweDAwLCAweDA1LCAweDgyLCAweDE0LCAweDA4LCAweDQwLCAweDQ5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5OSwgMHgwNCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4NDksIDB4NDAsIDB4MjYsIDB4MDgsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MjUsCisweDBELCAweDlELCAweDgwLCAweDE0LCAweDAyLCAweDEwLCAweDA4LCAweDQ2LCAweDI2LCAweDAwLCAweDlELCAweDEwLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4MjAsIDB4RTUsIDB4MDYsIDB4OTMsIDB4NDAsIDB4NzgsIDB4MUEsIDB4RDEsIDB4MDksIDB4QzAsIDB4MjUsCisweDAwLCAweDk3LCAweDBGLCAweDQ1LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEE0LCAweDAwLCAweDhGLCAweDgxLCAweDdFLAorMHgwMiwgMHgzNCwgMHgwOSwgMHhEMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHg0OSwgMHhDMCwKKzB4MTUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjQsCisweDAwLCAweDlGLCAweEMwLCAweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEM4LCAweDI1LCAweDAwLCAweDlCLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwNSwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzEsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDEwLCAweDc4LAorMHgwOCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwMSwgMHgwNCwgMHgxRiwgMHgwNCwgMHg3QywgMHg5MCwgMHhCMCwgMHgwMSwgMHhDMCwKKzB4ODQsIDB4MDAsIDB4MUYsIDB4MTAsIDB4NEMsIDB4MDAsIDB4RjEsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MTAsIDB4MDcsIDB4MTAsCisweDNDLCAweDA0LCAweDMwLCAweDIxLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhEQywgMHgwMSwgMHg3RCwgMHgwNywgMHg3NCwgMHgwMSwgMHgxMCwgMHgyNiwgMHg0MCwKKzB4MUYsIDB4MTksIDB4NkQsIDB4MDAsIDB4RjQsIDB4MDksIDB4MTAsIDB4MDcsIDB4NDAsIDB4REMsIDB4MDIsIDB4N0QsIDB4MDMsCisweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDcxLCAweDQ1LCAweEY0LCAweDQxLCAweDExLCAweDI3LAorMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwKKzB4RjYsIDB4MDEsIDB4Q0QsIDB4MDMsIDB4MzQsIDB4MjIsIDB4NTgsIDB4MkMsIDB4NDgsIDB4NzMsIDB4MDAsIDB4Q0MsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDBBLCAweDMyLCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMywgMHg4MCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwNCwgMHg5MCwgMHhBRCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsCisweEI0LCAweDA3LCAweDVBLCAweDJBLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEIwLCAweDA3LCAweDUyLCAweDBBLAorMHg0MCwgMHg5OCwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgxMywgMHhEMCwgMHg0RSwgMHg0MCwgMHg3QiwgMHg4MSwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MDIsIDB4OTAsIDB4MDQsIDB4NDQsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc5LCAweDA4LCAweEVGLCAweDAxLCAweEJDLCAweDg3LCAweDcwLCAweDFFLAorMHhDMCwgMHg1QiwgMHgwMCwgMHhFRSwgMHgwMSwgMHhCQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhCRiwKKzB4MDEsIDB4OUMsIDB4MDcsIDB4RjAsIDB4QkUsIDB4QzQsIDB4N0YsIDB4MjEsIDB4RTcsIDB4MDEsIDB4RkMsIDB4MDQsIDB4QjAsCisweDFFLCAweEQwLCAweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhCMiwgMHgzNSwgMHgwMCwgMHg1RiwgMHg2MCwgMHgzQywgMHgwMywgMHgzOCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4M0MsIDB4MDAsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MkIsIDB4RjAsCisweDZELCAweEM4LCAweEI3LCAweDIwLCAweDlELCAweDAwLCAweDdDLCAweDgyLCAweDcxLCAweDA1LCAweEMwLCAweDQzLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3RCwgMHgwMiwgMHhGRiwKKzB4ODEsIDB4Q0MsIDB4MTcsIDB4NzEsIDB4MTcsIDB4QzAsIDB4NkYsIDB4MDIsIDB4RkYsIDB4ODEsIDB4RkMsIDB4ODUsIDB4RjAsCisweDlGLCAweDQwLCAweDc4LCAweDAyLCAweEIzLCAweDI5LCAweEZFLCAweDJGLCAweEIwLCAweDFGLCAweEUwLCAweEZGLCAweDA0LAorMHg3MywgMHgwOSwgMHhGQywgMHgyNywgMHhGMSwgMHg1RiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MTksIDB4MjYsIDB4NkQsIDB4MDgsIDB4QUMsIDB4ODMsIDB4RDAsCisweDIyLCAweDQwLCAweDhCLCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDA4LCAweEQwLCAweDFBLCAweDQwLCAweDk4LCAweDAwLAorMHhBMSwgMHgwMSwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHhDMCwgMHgzOSwgMHgwMSwgMHhFQiwgMHgwMCwgMHgzNCwgMHgwNywKKzB4RDAsIDB4MEEsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQ4LCAweDA4LCAweDM5LCAweDE4LCAweEZELCAweDAwLCAweEE0LCAweDEzLCAweEQwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLAorMHhFRCwgMHgxMCwgMHhCNCwgMHgyMCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHg0MCwgMHgyMSwgMHgwMCwgMHhCNCwgMHg4MywKKzB4OTEsIDB4MEUsIDB4NDAsIDB4MzksIDB4MTAsIDB4NjEsIDB4MTAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4NEUsIDB4NDAsIDB4MjMsCisweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDIxLCAweDAwLAorMHgxRCwgMHgwMSwgMHgyNiwgMHgwNywgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMywgMHgzNCwgMHg4MCwKKzB4RDAsIDB4MDAsIDB4NDAsIDB4QTMsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDgsIDB4MzEsCisweDgwLCAweDg1LCAweDAwLCAweDM0LCAweDgxLCAweEQwLCAweDI5LCAweDQwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgwNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg2NCwgMHgwQiwKKzB4NzEsIDB4MDksIDB4QzAsIDB4MjcsIDB4OTAsIDB4MUYsIDB4MDMsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MjcsCisweDIwLCAweEQzLCAweDExLCAweEZDLCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweDgxLCAweDAxLCAweDdDLAorMHgwMSwgMHhEMCwgMHgyOSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MEQsIDB4MDAsIDB4ODcsIDB4MDEsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MjMsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsCisweDAwLCAweDFGLCAweDMyLCAweDNFLCAweDBBLCAweEYwLCAweDAxLCAweDQwLCAweDE0LCAweEExLCAweDlGLCAweDAwLCAweDcwLAorMHgwMywgMHhEMCwgMHgwRCwgMHhDOCwgMHgzNSwgMHg0MCwgMHg5QiwgMHgxMCwgMHg3NCwgMHgwMSwgMHhFMCwgMHgyMSwgMHhDMCwKKzB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDgsIDB4MEIsCisweDAwLCAweEJCLCAweDAwLCAweDhDLCAweDQzLCAweEIwLCAweDBCLCAweEM0LCAweDJCLCAweDAwLCAweEYzLCAweDAwLCAweEZDLAorMHgwMiwgMHgzMiwgMHgwMSwgMHhDNCwgMHgyRiwgMHgwMSwgMHhCRiwgMHg0MCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNCwKKzB4M0IsIDB4MDAsIDB4MzcsIDB4MDUsIDB4OTQsIDB4ODEsIDB4MzMsIDB4MDMsIDB4ODEsIDB4MDQsIDB4MjgsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEM2LCAweDIxLCAweDkxLCAweDA3LCAweDQ0LAorMHg4MywgMHhCMCwgMHgzMSwgMHg0MCwgMHhFNywgMHgwMCwgMHhEMSwgMHgwNiwgMHg3NCwgMHgwNCwgMHgxMCwgMHgzMSwgMHg0OCwKKzB4NzcsIDB4MTAsIDB4OUMsIDB4MDEsIDB4NzQsIDB4MDMsIDB4NzEsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MzIsCisweDQ0LCAweDBCLCAweDEwLCAweDMxLCAweDQwLCAweDg1LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg2NCwgMHgwMCwgMHgxOSwgMHgwMSwgMHg1NCwgMHgwNywgMHg5MCwgMHgxOSwgMHgwMCwKKzB4NjYsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MTMsIDB4NDEsIDB4MDcsIDB4MDAsIDB4QjksIDB4MDEsCisweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDU1LCAweDAwLCAweDU0LCAweDQ3LCAweDUwLCAweDE5LAorMHg0MCwgMHgwNSwgMHgwOCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MDgsIDB4NjIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDM0LCAweDAyLCAweDE0LCAweDQwLCAweDQwLCAweDEzLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAzLCAweDUwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwOCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxMCwgMHgwOCwgMHg0MiwgMHg0MSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MjYsIDB4MDgsIDB4OUIsIDB4MDAsCisweDVFLCAweDAzLCAweEIxLCAweDA5LCAweEMwLCAweDI3LCAweDQwLCAweEQxLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDQxLAorMHhDMCwgMHgwNywgMHgxMCwgMHgxRiwgMHgxQywgMHhFQywgMHgwMywgMHhGMSwgMHgwRiwgMHhFNCwgMHgzQiwgMHgwMCwgMHg1NywKKzB4MDAsIDB4NUMsIDB4MTIsIDB4MzQsIDB4MDEsIDB4QzAsIDB4MDUsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweEE4LCAweDJGLCAweDAwLCAweEFGLCAweDAwLCAweEVDLCAweDAzLCAweDcwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHhDMSwgMHhDMSwgMHgwRiwgMHgwNCwgMHgxRiwKKzB4MDQsIDB4RkMsIDB4MDMsIDB4NzIsIDB4MEYsIDB4QzQsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4NkMsIDB4MzAsIDB4RjAsCisweDAzLCAweEM0LCAweDE3LCAweDYyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHgyRCwgMHgxMSwgMHhCRiwgMHgwMCwgMHhGQywgMHgxMywgMHhCMiwgMHg5MywgMHhDOCwgMHgzRCwgMHgxMSwgMHgxMywKKzB4MDgsIDB4REMsIDB4MjIsIDB4MzIsIDB4NEYsIDB4QzgsIDB4MEYsIDB4MjAsIDB4N0IsIDB4NDEsIDB4RUMsIDB4MDMsIDB4RjAsCisweDE3LCAweEMwLCAweDNDLCAweDAwLCAweEJGLCAweDAxLCAweEVDLCAweDAwLCAweDMwLCAweDAzLCAweEM0LCAweDBDLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0NywgMHgwMiwgMHg5QywKKzB4OEMsIDB4RjQsIDB4MjcsIDB4MDQsIDB4MDksIDB4NEMsIDB4N0QsIDB4MjIsIDB4MUQsIDB4MDQsIDB4NzQsIDB4MTIsIDB4NTAsCisweEFGLCAweDQyLCAweDA3LCAweDAwLCAweDk5LCAweDgxLCAweDQ0LCAweDBCLCAweEQwLCAweDA5LCAweDQwLCAweDNDLCAweDEwLAorMHg5RCwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgxMSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MjAsIDB4MjEsIDB4MDgsIDB4MEQsIDB4NTAsIDB4MzQsIDB4MDMsIDB4MTgsCisweDUxLCAweDQ0LCAweDMxLCAweDAwLCAweDBELCAweDIwLCAweDc0LCAweDAyLCAweDEwLCAweDBDLCAweDY0LCAweDAxLCAweDAwLAorMHg4OSwgMHgwMCwgMHgyNCwgMHgwQiwgMHhEMCwgMHgwMSwgMHg1MCwgMHgzMCwgMHgwMCwgMHg5RCwgMHgwMCwgMHgyNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4NEMsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDQ3LCAweDgwLCAweDFELCAweDUxLCAweDc0LCAweDAzLCAweDEwLCAweDExLCAweDQwLCAweDM1LCAweDAwLAorMHgzRCwgMHgwMiwgMHhGNCwgMHgwMiwgMHg1MCwgMHgwRCwgMHgwMCwgMHg0RiwgMHgwOCwgMHg4OSwgMHgwOCwgMHg0NCwgMHgwMywKKzB4RDIsIDB4MTksIDB4MDAsIDB4M0MsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDIsIDB4MEMsCisweEEwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDY3LCAweDAwLAorMHg5RiwgMHgwMywgMHg3QywgMHgwMywgMHgzMCwgMHgxOCwgMHhDQywgMHgzNSwgMHgxOCwgMHgxQiwgMHgwMSwgMHg1RSwgMHgwNiwKKzB4MjAsIDB4MEQsIDB4QzAsIDB4QzcsIDB4MDAsIDB4REIsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MUMsIDB4QzAsIDB4MzQsCisweDIwLCAweENGLCAweDAxLCAweDZDLCAweDg0LCAweDMwLCAweDExLCAweEMwLCAweDAwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgyRCwgMHgwMCwgMHhCRiwgMHg4MCwgMHhCQywgMHgwMywKKzB4RjAsIDB4MEIsIDB4QzAsIDB4M0UsIDB4ODAsIDB4MUQsIDB4MDMsIDB4RkMsIDB4MjYsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDAzLCAweEYyLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGNCwgMHgwOSwgMHhEMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MTgsIDB4OTMsIDB4MDEsIDB4N0MsIDB4QTMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsCisweDAwLCAweDFCLCAweDAyLCAweDRDLCAweDQyLCAweEYwLCAweDBELCAweEMwLCAweDg3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMywgMHgzMCwgMHgwOSwgMHg4MCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMSwKKzB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsIDB4NjQsCisweDA0LCAweDkxLCAweDAyLCAweEY0LCAweDJGLCAweEQwLCAweDAxLCAweDQwLCAweEJGLCAweDAwLCAweDExLCAweDgwLCAweDQ1LAorMHg0NywgMHhEMSwgMHgwRiwgMHg0NCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwKKzB4M0YsIDB4MDAsIDB4NUQsIDB4MDAsIDB4MzQsIDB4NDQsIDB4MTAsIDB4MzgsIDB4NTgsIDB4NkMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDIwLCAweDAwLCAweDYwLCAweDA4LCAweDMwLCAweDM2LAorMHgwRiwgMHhEOCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMSwgMHgwOSwgMHgwMCwgMHg1MCwgMHgwRSwgMHhEMCwgMHg5QywgMHgyMiwKKzB4NDMsIDB4MDIsIDB4NEMsIDB4ODAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDYsCisweDM0LCAweDAwLCAweDE0LCAweEEwLCAweDQwLCAweDRDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRiwgMHgwMCwgMHg1OCwgMHgwMiwgMHhFOSwgMHg4MSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4MjEsIDB4MDksIDB4ODQsIDB4MDYsIDB4RDEsIDB4OUUsIDB4NDAsIDB4NUIsIDB4MDAsIDB4QUQsIDB4MDEsCisweEI0LCAweDA3LCAweDEwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDQxLCAweEI0LCAweDA3LCAweDE4LCAweDlBLAorMHg0MCwgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxQSwKKzB4MzAsIDB4MDAsIDB4NEIsIDB4MDgsIDB4M0MsIDB4MDMsIDB4RjAsIDB4ODAsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MEIsIDB4MDUsCisweDBDLCAweDAyLCAweEYwLCAweDBDLCAweEMwLCAweDQzLCAweDAxLCAweENGLCAweDAwLCAweDdDLCAweDIzLCAweDM0LCAweDAwLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDOCwgMHg0OCwgMHg2OCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzAsIDB4MTksIDB4MDAsIDB4RjAsIDB4NjAsCisweEZDLCAweDYzLCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDAyLCAweEZGLCAweDA4LCAweEYwLCAweDIzLCAweEYwLCAweDBGLAorMHhDNCwgMHgxRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwQiwgMHhDMCwgMHhCRiwgMHgxMCwgMHhGRiwKKzB4MDAsIDB4QkMsIDB4MDMsIDB4RjEsIDB4MEQsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDE3LCAweDEwLCAweDUzLCAweDAwLCAweDc0LCAweDVGLCAweDM0LCAweDA5LAorMHhDMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMSwgMHg5RCwgMHg4MCwgMHg3NCwgMHgwMCwgMHhEMywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4ODIsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDIsIDB4MzAsCisweDE1LCAweEQwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHg4QSwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHgzNCwgMHgxMywgMHgxMCwgMHgwQSwgMHg0MCwgMHhCQiwgMHgwMywgMHg4RCwKKzB4ODAsIDB4ODQsIDB4MDIsIDB4MTIsIDB4OEMsIDB4NDIsIDB4M0MsIDB4MDgsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsCisweDBBLCAweDQwLCAweDNBLCAweDgwLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDRDLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg2OSwKKzB4MDEsIDB4QjQsIDB4MTcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4NkQsIDB4MTEsIDB4OTQsIDB4NDYsIDB4OTAsCisweDVFLCAweDQwLCAweDY4LCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDM3LCAweDkwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLAorMHg3RCwgMHg2MSwgMHhBNCwgMHgwNywgMHgxNCwgMHgxNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4QjMsIDB4MDAsIDB4QzksIDB4MDEsIDB4MzQsIDB4MDMsIDB4NTAsCisweDhDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweEMzLCAweDU0LCAweDA3LCAweDkwLCAweDBDLCAweDUwLCAweDcwLCAweDAxLAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHg0OCwgMHg0MCwgMHgzNiwgMHgwMCwgMHg0RCwgMHgwOSwgMHgwNCwgMHgwMywKKzB4MTAsIDB4MUMsIDB4NDEsIDB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE3LCAweEEwLCAweDFGLCAweDIwLCAweDdCLCAweDg1LCAweDdDLCAweDAxLCAweDc4LCAweDE3LCAweEM2LCAweDE3LCAweDA4LAorMHg3RiwgMHgwMywgMHg1QywgMHgwNSwgMHhCNiwgMHgwNSwgMHhDMCwgMHg1QywgMHgwMSwgMHg3MywgMHgwMiwgMHg3QywgMHgwMSwKKzB4QjAsIDB4MzcsIDB4QzEsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MDksIDB4QUMsIDB4MDEsIDB4MzAsIDB4NzcsIDB4QzAsIDB4NUMsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDA1LCAweDI0LAorMHgxNywgMHg0NiwgMHg3QywgMHgwMCwgMHhBMCwgMHgwMSwgMHhFMCwgMHg4MywgMHgyMCwgMHgxRSwgMHhBMCwgMHg2QywgMHgwMCwKKzB4NzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsCisweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDA0LCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhBMSwgMHgwMCwgMHg5MywgMHgwOCwgMHg3QywgMHg4NiwKKzB4RjAsIDB4MDksIDB4QzEsIDB4MjUsIDB4MDgsIDB4OTMsIDB4MTAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NjcsCisweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDQ4LAorMHgxNiwgMHgzMCwgMHg0OSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4NzQsIDB4NjYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDIwLCAweDkxLCAweDAwLCAweDQ0LCAweDBBLCAweDEwLCAweDM5LCAweDQ0LCAweEE3LCAweDAyLCAweDhELCAweDIwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4NSwgMHg0MCwgMHg0NCwgMHg0MiwgMHgxMCwgMHg0OSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MzQsCisweDAwLCAweDkxLCAweDgyLCAweDc0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDgxLCAweDAwLCAweDU0LAorMHgwQSwgMHgxMCwgMHg0OSwgMHg0OSwgMHhCNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweEE1LCAweDg1LCAweDE0LCAweDM0LAorMHg4MiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgzMywgMHg2MCwgMHg4MSwgMHg0QywgMHgwNCwgMHgzMiwgMHgxOCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDEsIDB4OUQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODUsIDB4MDAsCisweDE0LCAweEQyLCAweDEwLCAweDQ4LCAweDQxLCAweDQzLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNywgMHgwMSwgMHgxMywgMHgyNCwgMHg3QywgMHg1MCwgMHhGMCwgMHgyMSwgMHhDNCwKKzB4MDUsIDB4MDUsIDB4MTMsIDB4MDMsIDB4MDksIDB4MEMsIDB4MzAsIDB4RTEsIDB4QzEsIDB4QzcsIDB4MDIsIDB4MUYsIDB4MDAsCisweDRELCAweDc4LCAweEYwLCAweEExLCAweEM4LCAweEM3LCAweDBBLCAweDUzLCAweDAwLCAweDVDLCAweDEwLCAweDMyLCAweDQxLAorMHhDMCwgMHg3NywgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwKKzB4MkIsIDB4MDAsIDB4QkYsIDB4MTQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MEMsCisweEZDLCAweDMyLCAweEY0LCAweDE5LCAweEMyLCAweDZGLCAweDAyLCAweEJELCAweDAxLCAweDdDLCAweDA2LCAweEYwLCAweDFCLAorMHhDMCwgMHg2NywgMHgwMiwgMHhGRiwgMHgxNCwgMHhFNCwgMHg1MiwgMHhGNCwgMHgwQiwgMHhDMCwgMHg3NywgMHg0MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4N0YsIDB4MDQsIDB4QkYsIDB4MDIsCisweEZDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDJELCAweDIwLCAweDlGLCAweDAwLCAweEZDLCAweDBBLCAweDMwLCAweDRCLAorMHhDMCwgMHgyQywgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywKKzB4MDAsIDB4RkMsIDB4MEEsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDE3LCAweDAwLCAweDFELCAweDAyLCAweDc0LCAweDI4LCAweEQwLCAweDAwLAorMHg0OCwgMHg4NywgMHgwMiwgMHgxRCwgMHgwNCwgMHg1QywgMHgxMCwgMHgxNCwgMHhBMSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgxNSwKKzB4MDEsIDB4NzQsIDB4MjgsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NzQsIDB4MTAsIDB4MTAsCisweDAxLCAweEMwLCAweDYyLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHgyMSwgMHgyMCwgMHg4RCwgMHg4NiwgMHgzNCwgMHgwMiwgMHhDMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwKKzB4MTAsIDB4MzAsIDB4MTIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4ODEsIDB4MDEsIDB4MzQsIDB4MDIsIDB4MTQsCisweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEzLCAweDEwLCAweDA4LCAweDQ0LCAweDQ4LCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHhERCwKKzB4MEEsIDB4NzQsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDIsIDB4MTQsIDB4MjIsIDB4MTAsCisweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDk1LCAweDAxLCAweDM0LCAweDAyLCAweDEwLCAweDQ5LCAweDQ0LCAweDI1LCAweDAwLAorMHg5OSwgMHgwMCwgMHgzNCwgMHgwNiwgMHgxNCwgMHg0OSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MEEsIDB4MjUsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RTAsCisweDI5LCAweEMxLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDA4LCAweEM2LCAweDY0LCAweDAyLAorMHhCMywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwNiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE2LCAweDAwLCAweEE1LCAweDIwLCAweDlGLCAweDIxLCAweDdDLCAweDAyLCAweEYwLCAweDM5LCAweEMwLCAweDI3LCAweDA0LAorMHg5RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjIsIDB4MTksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDgsIDB4QzAsIDB4NUIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLAorMHgxRiwgMHgwNCwgMHg2QywgMHgwMCwgMHg3MCwgMHgyMSwgMHhDMCwgMHgwNCwgMHgwMiwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwKKzB4MzEsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4NDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDA4LCAweDEzLCAweDBBLCAweDdDLCAweDA0LCAweDMwLCAweEMxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhEQywgMHgwRSwgMHg3RCwgMHgwNiwgMHhGNCwgMHg0MSwKKzB4MTAsIDB4MDUsIDB4ODAsIDB4NUUsIDB4MDAsIDB4NUQsIDB4NjAsIDB4RjQsIDB4NkQsIDB4MTAsIDB4MzcsIDB4NDAsIDB4MUMsCisweDAwLCAweDUxLCAweDAwLCAweDZDLCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDc1LCAweDQwLCAweEY0LAorMHgwMSwgMHgxMCwgMHgxNywgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTAsIDB4RTIsIDB4MDAsIDB4Q0QsIDB4NDEsIDB4MjQsIDB4MTcsIDB4ODAsIDB4MEMsIDB4NTgsIDB4RjAsCisweDIwLCAweENELCAweDAwLCAweDM0LCAweDBGLCAweDkwLCAweDJDLCAweDQxLCAweDc0LCAweDA0LCAweEMxLCAweDAwLCAweDA0LAorMHgwMywgMHhEMSwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4MSwgMHgxMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgyQywgMHg0MCwKKzB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MjksCisweDgwLCAweEVELCAweDgwLCAweEI0LCAweDA3LCAweDk0LCAweERFLCAweDQwLCAweDI4LCAweDIwLCAweEVDLCAweDA4LCAweDM0LAorMHgwMywgMHg5MCwgMHgyQywgMHg1MCwgMHgyMCwgMHgwNCwgMHhGMSwgMHg0NSwgMHhBNCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTIsIDB4MEEsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc5LCAweDAwLCAweEVGLCAweDAxLCAweEFDLAorMHgwNSwgMHhCMSwgMHg1RSwgMHg0MSwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwNSwgMHhCQywgMHgwNSwgMHhCMCwgMHgxQSwgMHhDMCwKKzB4NzgsIDB4MDAsIDB4RjMsIDB4NDMsIDB4OEMsIDB4NTcsIDB4RjAsIDB4MUUsIDB4QzMsIDB4NzMsIDB4MDAsIDB4QTMsIDB4MDEsCisweEJDLCAweDA3LCAweDM0LCAweDEyLCAweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgwMCwgMHg1RiwgMHg0MCwgMHgzQywgMHgwMCwgMHgzMSwgMHg0RCwgMHhDOCwKKzB4MjcsIDB4MDgsIDB4REYsIDB4MTAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MDksIDB4QzgsIDB4MzcsIDB4NDAsIDB4REYsIDB4MDAsCisweDdDLCAweDEzLCAweEYwLCAweENELCAweEMwLCAweEI3LCAweDAyLCAweDFGLCAweDAwLCAweDdDLCAweDAzLCAweEI0LCAweDA5LAorMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwKKzB4NkQsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4OUYsIDB4QzAsIDB4NUYsIDB4MDIsIDB4RkYsIDB4MDksCisweENDLCAweDI3LCAweEYwLCAweDFCLCAweEMwLCAweDdELCAweDAwLCAweEVGLCAweDQxLCAweENDLCAweDg3LCAweDcwLCAweDFGLAorMHhDMCwgMHhGQywgMHgwMCwgMHhFMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDOCwgMHgxQiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MjksIDB4MjAsIDB4RkQsIDB4MDAsCisweEFDLCAweDFBLCAweEQyLCAweENFLCAweDQwLCAweDJCLCAweDAwLCAweEZELCAweDAwLCAweDg0LCAweDA0LCAweEQwLCAweDBGLAorMHhDMCwgMHgyMCwgMHgwMSwgMHhFRCwgMHgyNSwgMHhDNCwgMHgwNywgMHg1MCwgMHgwRSwgMHhDMSwgMHgzQSwgMHgyMCwgMHg2QiwKKzB4MDAsIDB4OTQsIDB4MDMsIDB4QjAsIDB4MEEsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweEQyLCAweDBFLAorMHg2MCwgMHgwQiwgMHgyMCwgMHhFRCwgMHgwMCwgMHg5NiwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgxQiwgMHg4MCwgMHhGRCwKKzB4MDUsIDB4QzQsIDB4MDMsIDB4MTEsIDB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RjEsIDB4MDAsIDB4ODQsIDB4NDMsIDB4MTAsCisweDJFLCAweDQwLCAweDIzLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgyOCwgMHhGMSwgMHgwNCwgMHg4RCwgMHgxMywgMHgzNCwgMHgwMiwgMHhEMCwgMHgyRCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDOSwKKzB4MDMsIDB4NTQsIDB4MDQsIDB4RDAsIDB4MDAsIDB4NDAsIDB4QzAsIDB4MTAsIDB4Q0QsIDB4MDQsIDB4MDQsIDB4MDMsIDB4NTgsCisweDNDLCAweDQxLCAweDMyLCAweDAwLCAweDU5LCAweDAwLCAweDE0LCAweDA3LCAweDkxLCAweDBDLCAweDQwLCAweDBCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgyNSwgMHgxMCwgMHgxRiwKKzB4MTIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MkYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RkYsIDB4MDUsIDB4NUMsIDB4NDYsIDB4RjAsCisweDA1LCAweEMwLCAweDA3LCAweDAxLCAweERGLCAweDA3LCAweENELCAweDAzLCAweDMyLCAweDBGLCAweDQwLCAweDNDLCAweDAwLAorMHg1MywgMHgwMCwgMHg0QywgMHgwNywgMHgzMCwgMHgyNSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDgsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4NjQsIDB4MDgsIDB4RjAsCisweENELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDg3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhFMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywKKzB4RjAsIDB4MDEsIDB4QzIsIDB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDg5LCAweDA5LCAweDNGLCAweDEwLCAweDJGLCAweDAwLCAweENDLCAweDgwLCAweEYwLCAweDBGLCAweEMwLCAweDA4LCAweDAwLAorMHhGMywgMHgxMCwgMHhGQywgMHgyMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwNCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMywKKzB4MTAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MTAsIDB4RkYsIDB4MDEsIDB4NEMsIDB4NjUsIDB4RjAsIDB4OTcsIDB4QzAsIDB4MDcsCisweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEI2LCAweDAwLAorMHgxRCwgMHgyMSwgMHg1NCwgMHgwNCwgMHhEMCwgMHgwRCwgMHg0MCwgMHhDNCwgMHgwMCwgMHhEMSwgMHg0MCwgMHg3NCwgMHgwMCwKKzB4MTAsIDB4MjEsIDB4NDAsIDB4QzYsIDB4MDEsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzUsCisweDAwLCAweERELCAweDBCLCAweDU0LCAweDAwLCAweEQwLCAweDJELCAweDQ0LCAweDg3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyNCwgMHgxNCwgMHgxRCwgMHgwMSwgMHg0NiwgMHgwNiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4NDQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MTMsIDB4NDEsIDB4NEYsCisweDgwLCAweERELCAweDAwLCAweEY0LCAweDAzLCAweDUwLCAweDBGLCAweDQwLCAweDNGLCAweDAwLCAweDlELCAweDEwLCAweDQ0LAorMHgwMywgMHg5MCwgMHgyNSwgMHg0MCwgMHgwNywgMHgwOCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjIsIDB4MjAsIDB4MDAsIDB4OEQsIDB4ODAsIDB4MTQsIDB4MDAsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MjAsCisweDAwLCAweEMxLCAweDIyLCAweDM0LCAweDQwLCAweDE0LCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweENELCAweDA0LCAweDM0LAorMHgxMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwNywgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjgsIDB4MDYsCisweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDA0LCAweDAwLCAweEYxLCAweDAyLCAweDc0LAorMHgxMywgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMiwgMHhGRiwgMHgxMCwgMHhGQywgMHg1MywgMHg3MCwgMHgwRSwgMHhDMCwKKzB4M0IsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweEIwLCAweDFGLCAweDAwLCAweEJGLCAweDgwLCAweEY4LAorMHgwMCwgMHhGMCwgMHgwRiwgMHhDMiwgMHgwRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MEUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjEsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDgzLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwgMHhGQywgMHgwMiwgMHgzMCwgMHg0QiwgMHhDMSwKKzB4M0YsIDB4MTMsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MTMsIDB4NzAsIDB4ODMsIDB4QzAsIDB4M0MsIDB4NDAsIDB4RjMsIDB4MDAsCisweEJDLCAweDA2LCAweEIwLCAweDBGLCAweEMwLCAweDJDLCAweDE3LCAweDNCLCAweDBDLCAweENDLCAweDAwLCAweEIwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwKKzB4MzcsIDB4MDEsIDB4Q0QsIDB4MDQsIDB4NzQsIDB4RUEsIDB4MTAsIDB4NjksIDB4QzgsIDB4QkQsIDB4MjIsIDB4RkQsIDB4REUsCisweEQ0LCAweDJGLCAweDEwLCAweDAxLCAweDQwLCAweEZDLCAweDAwLCAweEQxLCAweDAyLCAweDQ0LCAweDg3LCAweDEwLCAweDFGLAorMHg0MCwgMHhBNSwgMHgwMSwgMHgxMSwgMHgwRSwgMHg0NCwgMHgwOCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwRiwgMHg2MCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzMsIDB4MDQsIDB4Q0QsIDB4MDAsCisweDM0LCAweDEwLCAweDUwLCAweDAwLCAweDQxLCAweDMzLCAweDA5LCAweENELCAweDQ0LCAweDE0LCAweDAzLCAweDEwLCAweDUwLAorMHg2MCwgMHhCMSwgMHgwMCwgMHhDNSwgMHgwMiwgMHgxNCwgMHg4MiwgMHg5MCwgMHgwRCwgMHg2MCwgMHgzNCwgMHgwMSwgMHhDOSwKKzB4MDAsIDB4MDQsIDB4MDgsIDB4MTIsIDB4MDAsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDM1LCAweDAwLCAweERELCAweDA0LCAweDM2LCAweDBFLCAweDU0LCAweDE5LAorMHg0MiwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgxMiwgMHg0MCwgMHgzNSwgMHgwMCwgMHhENSwKKzB4MjAsIDB4NTUsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDAsIDB4NTUsIDB4MDAsIDB4QzEsIDB4MTgsIDB4NDUsIDB4NjMsIDB4MTAsCisweDExLCAweDQwLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBOCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3QywgMHgwNiwgMHg3MCwgMHgzMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MTEsIDB4NDAsIDB4MzUsIDB4MDAsIDB4RDYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsCisweDBELCAweEMwLCAweDY0LCAweDgwLCAweDFCLCAweDAzLCAweDRFLCAweDA3LCAweDMwLCAweDE5LCAweEMwLCAweDJCLCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHhGRCwgMHgyMCwgMHhGRiwKKzB4ODEsIDB4N0UsIDB4MDIsIDB4QjAsIDB4MDEsIDB4QzQsIDB4M0QsIDB4MDAsIDB4REYsIDB4MDAsIDB4QkMsIDB4NDMsIDB4QjAsCisweDBCLCAweEMwLCAweDNFLCAweDEwLCAweEZBLCAweDAwLCAweEVDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHg4MCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDgsIDB4MzgsCisweDIxLCAweEMwLCAweDM0LCAweDA4LCAweEQ3LCAweEMwLCAweDRDLCAweDAzLCAweDcwLCAweDAxLCAweEQxLCAweDMwLCAweDAwLAorMHhERiwgMHg4NCwgMHg0RCwgMHg0MiwgMHgzMiwgMHg0RCwgMHhDMCwgMHgyNywgMHgwMCwgMHgxQiwgMHgxMiwgMHgzQywgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFCLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDZDLCAweDgyLCAweDEwLCAweDE5LCAweDQxLCAweDNDLCAweDAwLAorMHhGMSwgMHgwMCwgMHhDNCwgMHg0QiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgzQywgMHgwMSwgMHhFNywgMHgwMSwgMHgwNCwgMHg0NiwKKzB4MTIsIDB4M0YsIDB4QzAsIDB4MTEsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MUIsIDB4MTAsIDB4QjksIDB4NDEsIDB4NEYsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgxMCwgMHg1OCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhENSwgMHgwMCwgMHgwNCwgMHgwQiwKKzB4NTAsIDB4MjAsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzgsIDB4MkIsIDB4MDQsIDB4MEEsIDB4MTIsIDB4MEQsIDB4NDQsIDB4MjMsCisweDEwLCAweDA5LCAweDA4LCAweDM0LCAweDQwLCAweDkwLCAweDE4LCAweDQwLCAweDBFLCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhBNCwgMHgwNSwKKzB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDEsIDB4NzgsCisweDgwLCAweEU1LCAweDAxLCAweEM0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweEI0LAorMHgxNSwgMHg5MCwgMHgxMiwgMHg0MCwgMHgzNywgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MTAsIDB4MzIsIDB4MDAsIDB4Q0UsIDB4NDAsIDB4MkMsIDB4MjEsIDB4MTAsIDB4ODQsIDB4QzAsIDB4MzQsCisweDAyLCAweEM3LCAweDA4LCAweDA2LCAweDAzLCAweDcwLCAweDA1LCAweEMwLCAweDMyLCAweDAwLCAweENGLCAweDQwLCAweDBDLAorMHgwMiwgMHgzMCwgMHgwQywgMHhDMSwgMHgyMywgMHgwMCwgMHgwQiwgMHgwNCwgMHgzQywgMHgwMiwgMHhCMCwgMHgwQywgMHhDMCwKKzB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4M0QsCisweDIwLCAweEZGLCAweDgwLCAweERELCAweDgxLCAweEYwLCAweDhGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDIwLCAweEZFLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRCwgMHgwNCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGNSwgMHgwRiwgMHhDMCwKKzB4MUYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MTMsIDB4NzIsIDB4MEYsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMSwgMHhERiwgMHgwNCwgMHg3QywgMHgxMywgMHhEMSwgMHgxMSwgMHhEMCwKKzB4MzAsIDB4MDEsIDB4RDMsIDB4MDgsIDB4NEMsIDB4MDYsIDB4MzAsIDB4NUQsIDB4QzgsIDB4MjAsIDB4MDAsIDB4MTcsIDB4MDAsCisweDVDLCAweDAwLCAweEI0LCAweDBELCAweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHg4OCwgMHgzOCwgMHgxMCwgMHhFRCwgMHgyMCwgMHhCNiwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4QkIsIDB4MDMsIDB4RUQsIDB4MjgsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDAsCisweEFDLCAweDAyLCAweDUwLCAweEFFLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDQwLCAweEI0LCAweDAxLCAweDEwLCAweDA2LAorMHg0MCwgMHg0QywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4NzksIDB4ODAsIDB4RUQsIDB4ODEsIDB4OTQsIDB4MDcsIDB4RDgsIDB4MTYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDksCisweEI0LCAweDI3LCAweEQwLCAweDE2LCAweDQ5LCAweDc4LCAweDAxLCAweEUxLCAweDA1LCAweDk0LCAweDA2LCAweDkwLCAweDVFLAorMHg1OCwgMHg2QywgMHg0MCwgMHgyMSwgMHgwMywgMHgzNCwgMHgwNiwgMHg1MCwgMHgxQywgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MjMsIDB4ODAsIDB4OEQsIDB4MDAsCisweDM0LCAweDA3LCAweEQ4LCAweEFDLCAweDQwLCAweDMzLCAweDEwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDJDLAorMHg0MCwgMHgzMCwgMHg4MCwgMHhDMSwgMHgwMCwgMHgzNCwgMHg4NiwgMHhEMCwgMHgwQywgMHg0MCwgMHgxMCwgMHgwMCwgMHhDMSwKKzB4MTAsIDB4NzQsIDB4MkYsIDB4NTAsIDB4MkQsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE3LCAweDAxLCAweDVGLCAweDAwLCAweEZDLCAweDBELCAweDcyLCAweDE3LAorMHhDQSwgMHgxNywgMHgwOCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNywgMHg0OCwgMHgxNCwgMHgwMCwgMHg0MywKKzB4MDAsIDB4NTQsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzQsIDB4MUMsIDB4MDEsIDB4NzMsIDB4MDMsIDB4REMsIDB4MkQsIDB4NzAsCisweDQ3LCAweEMwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHgwNSwgMHgyMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg2MCwgMHhGOCwgMHgwMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgwRiwKKzB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4NDEsIDB4QzgsIDB4MDMsIDB4NDAsIDB4MUYsIDB4MDAsIDB4NjQsIDB4MjAsIDB4NzMsCisweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDE5LCAweDAyLCAweDdDLCAweDAwLCAweEIwLCAweDIxLCAweEQwLCAweDRCLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEMsIDB4MDYsIDB4RjAsCisweDA5LCAweEMwLCAweDI1LCAweDAxLCAweDkzLCAweDA5LCAweDVDLCAweDAyLCAweEYwLCAweDk5LCAweEMwLCAweDIzLCAweDAwLAorMHg5NywgMHgyOCwgMHg0NCwgMHg4MiwgMHgzMSwgMHgwOSwgMHhDMSwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDBFLCAweEQwLCAweDI5LCAweDQwLCAweDI3LCAweDAwLAorMHg5MSwgMHgwMywgMHg0NCwgMHgwMiwgMHhEMCwgMHgzOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwNywgMHg0NCwgMHgwQSwKKzB4MTAsIDB4MjksIDB4NTEsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDcwLCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDAwLAorMHg5RCwgMHgwMCwgMHg0NCwgMHgxQSwgMHhEMCwgMHgyOSwgMHgwMCwgMHgyNywgMHg0MCwgMHg5MSwgMHgwMiwgMHg1NCwgMHgwMiwKKzB4RDgsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsIDB4ODUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NzAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDIwLCAweDAwLAorMHg4RCwgMHgwMCwgMHgzNCwgMHg1MiwgMHhEMCwgMHg0QywgMHg0MSwgMHgyMywgMHgwMiwgMHg4RCwgMHgwOCwgMHgwNCwgMHg4MiwKKzB4RDAsIDB4QzgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MTQsIDB4MDQsIDB4MDMsIDB4RDksIDB4NDgsIDB4NDAsIDB4MjMsCisweDAwLCAweDgxLCAweDA4LCAweDE0LCAweDgyLCAweDE0LCAweDQ4LCAweDQxLCAweDUwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywgMHgxMCwKKzB4RjAsIDB4NDEsIDB4QzAsIDB4ODcsIDB4MDUsIDB4MUIsIDB4MTYsIDB4NEMsIDB4NTAsIDB4RjAsIDB4MzEsIDB4QzAsIDB4MDUsCisweDA1LCAweDAzLCAweDBFLCAweDVDLCAweDAwLCAweEYwLCAweDExLCAweEMwLCAweDg3LCAweDA1LCAweDE3LCAweDE2LCAweDVELAorMHg1MSwgMHgzMCwgMHg0MSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QjgsIDB4MkYsIDB4MEQsIDB4QkYsIDB4MzQsIDB4RkMsIDB4NTIsIDB4RjAsIDB4NEIsIDB4QzEsIDB4MjcsCisweDAxLCAweDlGLCAweDA0LCAweDdELCAweDgyLCAweEYwLCAweENCLCAweDgwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweEJDLAorMHgwMiwgMHhGMCwgMHg4OCwgMHhDMCwgMHgyRiwgMHgwNCwgMHhCRiwgMHgwNCwgMHhFQywgMHg1MiwgMHhGOCwgMHg0QiwgMHhDMSwKKzB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4QTcsCisweDAwLCAweERGLCAweDAyLCAweDU0LCAweDFFLCAweEYwLCAweDJCLCAweEMwLCAweDI1LCAweDAxLCAweDlGLCAweDU0LCAweEZDLAorMHgxMiwgMHgzMCwgMHg4QiwgMHhDMCwgMHgyRSwgMHgwNSwgMHhCMywgMHgwMSwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4QTQsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzIsIDB4MEIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDAzLCAweDIwLCAweDFELCAweDAxLCAweDZFLAorMHgwOCwgMHgxMCwgMHg4NSwgMHg0MCwgMHgwMCwgMHgwNSwgMHgwRCwgMHgwNCwgMHg3NCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg1MCwKKzB4ODQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NTQsIDB4MDEsIDB4MUQsIDB4NDAsCisweDQ0LCAweDAwLCAweEJBLCAweDA1LCAweEMwLCAweDcyLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwgMHgyMSwgMHg4MSwgMHg5RCwgMHgwMCwgMHgwNCwgMHhCMiwgMHg1OCwgMHg0OCwgMHg0MCwKKzB4MjEsIDB4MDIsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MEEsIDB4MTIsIDB4NDgsIDB4NDQsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MjIsCisweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDUwLCAweDIxLCAweDAxLCAweDhELCAweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDA4LAorMHg0MCwgMHg0OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwKKzB4MjUsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4NjIsIDB4NTgsIDB4MEQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUMsIDB4MDAsCisweDcwLCAweDAyLCAweDAwLCAweDBDLCAweDYwLCAweDI0LCAweDQwLCAweDkxLCAweDAwLCAweDQ1LCAweDAyLCAweEQwLCAweDBELAorMHg0MCwgMHgyNSwgMHgyMiwgMHg5RCwgMHg4MCwgMHg1NCwgMHgyQSwgMHg5MCwgMHgwOSwgMHg0MCwgMHg2MiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4NjcsIDB4MDAsIDB4OEQsIDB4NDAsCisweDQ0LCAweDA2LCAweDY4LCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDE5LAorMHhDNCwgMHgyNiwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwKKzB4MEYsIDB4NUMsIDB4MDYsIDB4MzAsIDB4MjksIDB4QzAsIDB4MTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDI0LCAweDAxLCAweDlGLCAweDA0LCAweDNDLCAweDAyLCAweEIwLCAweDU5LAorMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMCwgMHg3RSwgMHgwMiwgMHhGNCwgMHg0OSwgMHhDMCwgMHgyMSwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjYsIDB4MDAsIDB4OUYsIDB4MTEsIDB4NkQsIDB4NDIsIDB4RjIsCisweDQ5LCAweEMxLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgwNSwgMHg0OCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwgMHhCOCwgMHgyMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgxNywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NUMsIDB4MjAsIDB4RjAsCisweDExLCAweEMwLCAweDA1LCAweDAwLCAweDA3LCAweDIyLCAweDRDLCAweDA4LCAweEUwLCAweDIxLCAweEQwLCAweDQwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxNCwgMHgwMCwgMHg1MSwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4QjgsIDB4MDcsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NTEsIDB4MDAsIDB4QzQsIDB4MDksIDB4RDAsCisweDE3LCAweEMwLCAweDE0LCAweDAwLCAweDczLCAweDgxLCAweEM0LCAweDI5LCAweEQwLCAweDA3LCAweDQwLCAweDE0LCAweDAwLAorMHg3MSwgMHgwMiwgMHhDMCwgMHg0NSwgMHhEMSwgMHgwNywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDMsIDB4OTMsCisweDhELCAweDQ2LCAweDMzLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDE3LCAweEQwLCAweDBDLCAweDQwLCAweDIyLCAweDMwLAorMHg1OSwgMHg4RiwgMHgxNCwgMHgwMiwgMHhDOCwgMHgxQywgMHg0MCwgMHgzMSwgMHg4MCwgMHhDNSwgMHgwMywgMHg0NSwgMHgwQiwKKzB4RDAsIDB4OEQsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDg4LCAweDc4LCAweDA5LCAweEUxLCAweDAwLCAweEI0LCAweDEzLCAweDEwLCAweDBFLCAweDQwLCAweDdCLCAweDAzLAorMHhFNCwgMHgwRCwgMHg5MSwgMHg0MywgMHhEMCwgMHgyOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhBNCwgMHgwMSwKKzB4RDEsIDB4MEUsIDB4NDEsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDIsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MDQsCisweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEwLCAweDc5LCAweDA0LAorMHhFMywgMHgwRCwgMHhCNCwgMHgwRiwgMHg5MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwNCwgMHhFNywgMHgxNSwgMHg5QywgMHgwNywKKzB4RjAsIDB4MTYsIDB4RTAsIDB4NkEsIDB4MDAsIDB4MkIsIDB4MDEsIDB4OUMsIDB4MDQsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0QsCisweDAwLCAweDc3LCAweDAxLCAweDhELCAweDA3LCAweEYwLCAweDFFLCAweEM0LCAweDQ0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgyMywgMHhENywgMHg4MCwgMHg3QywgMHg0MywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDEsIDB4REIsIDB4MDQsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MjcsCisweDQwLCAweDFGLCAweDIyLCAweDVDLCAweDAxLCAweEYwLCAweDA4LCAweEMwLCAweDM3LCAweDA4LCAweDVGLCAweDAwLCAweDdDLAorMHgwMSwgMHhGMiwgMHgwNSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjAsIDB4N0QsIDB4MDAsIDB4RjMsIDB4MTksIDB4RjgsIDB4MjcsIDB4NzgsIDB4OUYsIDB4QzAsIDB4N0QsCisweDAwLCAweEYzLCAweDAxLCAweEJDLCAweDA2LCAweDMwLCAweDFGLCAweEMwLCAweDZGLCAweDAwLCAweDYzLCAweDgzLCAweENDLAorMHgwNCwgMHhGMCwgMHgxNywgMHhDNCwgMHg3OCwgMHgwMCwgMHhCMywgMHgwMSwgMHhDRSwgMHgyNSwgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzksCisweDFBLCAweEVCLCAweDM4LCAweEI0LCAweDAzLCAweDcwLCAweDBFLCAweDQwLCAweDM4LCAweDAyLCAweEUxLCAweDAwLCAweEI0LAorMHg4MCwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMSwgMHg2NSwgMHgwMCwgMHg4NCwgMHgwOCwgMHhEMCwgMHg1NiwgMHg0MCwKKzB4MzksIDB4MDAsIDB4QTEsIDB4MDIsIDB4ODQsIDB4MjgsIDB4MTAsIDB4NjIsIDB4QzAsIDB4NTYsIDB4NjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNELCAweDA0LCAweEUxLCAweDg4LCAweEI0LAorMHgwMywgMHhEOCwgMHgwNiwgMHg0NSwgMHgzMSwgMHg0MCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgyMywgMHg5MCwgMHgwNiwgMHg0MCwKKzB4MjMsIDB4ODAsIDB4QTksIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4NEMsIDB4NDAsIDB4M0UsIDB4MDAsIDB4MDUsIDB4MDgsCisweDA1LCAweDgxLCAweDEwLCAweDA2LCAweDQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHg3NSwgMHgwMCwgMHhEOCwgMHgwMCwgMHg3NCwgMHgwNywgMHhEQSwgMHgxOSwgMHg0MSwKKzB4MzAsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDEsIDB4OTMsIDB4MjUsIDB4NDAsIDB4MjcsIDB4MDAsIDB4MUQsIDB4MDAsCisweDA0LCAweDIwLCAweEQwLCAweDA4LCAweDQwLCAweDcxLCAweDQwLCAweDQ1LCAweDAxLCAweDQ0LCAweDgwLCAweDE4LCAweDIxLAorMHg0MCwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwKKzB4N0QsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MTMsIDB4RjAsIDB4MDEsIDB4QzQsIDB4M0QsIDB4MDAsIDB4RkIsIDB4ODAsCisweDdFLCAweDAxLCAweEIwLCAweDVELCAweEMwLCAweDI3LCAweDAwLCAweDFCLCAweDAwLCAweDRELCAweDg0LCAweEYwLCAweDA5LAorMHhDMCwgMHg3QywgMHgwNCwgMHhENSwgMHgxMywgMHg0QywgMHgzRSwgMHgzNiwgMHgyOSwgMHhDMCwgMHg1NSwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4NDAsCisweDdDLCAweDQzLCAweDcwLCAweDAxLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDNFLCAweDA4LCAweDcyLCAweDAxLAorMHhDMCwgMHgzNywgMHgwMCwgMHgxNywgMHgwMiwgMHg3QywgMHgwMSwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwQywgMHhEQSwKKzB4MDQsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MjksIDB4ODAsIDB4MDYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDNGLCAweDAwLCAweEYzLCAweDAwLCAweENFLCAweDgzLCAweDMwLCAweDAxLAorMHhDMCwgMHgzOCwgMHgwMCwgMHhGMywgMHgwMCwgMHhGRSwgMHg4MywgMHgzMiwgMHgxRiwgMHhDMSwgMHgyQywgMHgxMCwgMHgzMywKKzB4MDAsIDB4Q0MsIDB4MTQsIDB4RjAsIDB4MEIsIDB4ODAsIDB4M0IsIDB4MDAsIDB4NjMsIDB4MDgsIDB4Q0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEQxLCAweDEwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LAorMHgyMCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgyMCwgMHg0NCwgMHgwMywgMHgxOCwgMHgxMSwgMHg0MCwgMHgzNSwgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MTIsIDB4NTAsIDB4MjEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4MUIsIDB4MjMsIDB4NkMsIDB4MDksIDB4RDAsCisweDIxLCAweDAwLCAweDM3LCAweDAwLCAweDkxLCAweDAyLCAweDQ0LCAweDA0LCAweDEwLCAweDE5LCAweDQwLCAweDE0LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgxMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NTQsIDB4MTAsIDB4NTAsCisweDQ5LCAweDQwLCAweDI0LCAweDAwLCAweDMxLCAweDExLCAweDQ0LCAweDAwLCAweEQwLCAweDE1LCAweDQwLCAweDM3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg0NCwgMHg4NiwgMHg1MCwgMHgxOSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MkEsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4ODMsIDB4MTAsCisweDA4LCAweDQ4LCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDM2LCAweDgwLAorMHgxOSwgMHgwMCwgMHgyMCwgMHgwMSwgMHhEMCwgMHg0NCwgMHg0NCwgMHgzMywgMHgwMCwgMHgwMSwgMHg2MCwgMHgwNCwgMHg4MiwKKzB4MTIsIDB4MDgsIDB4NDAsIDB4NDAsIDB4QTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDMwLCAweDNDLCAweDA4LCAweEYzLCAweDAwLCAweEM0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDNDLCAweDAwLAorMHhGMywgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHgzMywgMHgwMCwgMHg0QywgMHgwMCwKKzB4RjEsIDB4NEQsIDB4QzEsIDB4MzcsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDAsCisweEM0LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweEE4LCAweDNCLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHg0MCwgMHhGNCwgMHgwMCwKKzB4RjEsIDB4MDMsIDB4QzgsIDB4MkYsIDB4MDAsIDB4M0UsIDB4MjAsIDB4RkMsIDB4ODEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4M0YsCisweDIwLCAweDNGLCAweDAwLCAweEZELCAweDAwLCAweEUwLCAweDAzLCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzQiwgMHgwNCwgMHhGRiwgMHhDMCwgMHhGQywgMHg0MywKKzB4QjIsIDB4NEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RUYsIDB4MDQsIDB4RUMsIDB4MjMsIDB4RjEsIDB4MTIsIDB4QzAsIDB4MzUsCisweDAzLCAweDdCLCAweDAxLCAweEZDLCAweDQyLCAweEIwLCAweDEzLCAweEMwLCAweDJFLCAweDAwLCAweEJCLCAweDAxLCAweEVDLAorMHg4NiwgMHgzMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDgsIDB4RkYsIDB4MDAsIDB4RkQsIDB4MEMsIDB4RjQsIDB4OEYsIDB4RDAsIDB4OUYsIDB4NDgsIDB4RkMsCisweDIyLCAweERELCAweDAzLCAweEM0LCAweDNCLCAweEQyLCAweDE5LCAweDQwLCAweEI0LCAweDAxLCAweDkxLCAweEUxLCAweDc0LAorMHgwRSwgMHgxMCwgMHgwNSwgMHg0MywgMHg3NCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0NCwgMHgwMywgMHgxMywgMHgxMSwgMHg0OCwKKzB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsCisweDE4LCAweENELCAweDUwLCAweDM0LCAweDAzLCAweEMwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDQyLCAweDI0LAorMHgxMywgMHhEMiwgMHgwMSwgMHg2MCwgMHhCMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0MSwgMHg0MCwKKzB4MjIsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM0LCAweDA4LCAweERELCAweDAwLCAweDc0LAorMHg4MywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwOCwgMHhERCwgMHgwMCwgMHg0NCwgMHg4MywgMHhEMCwgMHgxMSwgMHg0OCwKKzB4MzQsIDB4MDgsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDcsIDB4NTEsIDB4ODEsIDB4NDEsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MDgsCisweDU2LCAweDkxLCAweDEwLCAweDE5LCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhBMCwgMHgwRCwgMHhDMCwKKzB4MzYsIDB4MjAsIDB4REYsIDB4MjAsIDB4NkMsIDB4MDMsIDB4RjIsIDB4MzgsIDB4QzgsIDB4MzUsIDB4MzAsIDB4REIsIDB4MDgsCisweDdDLCAweDAyLCAweEYwLCAweDM1LCAweDg2LCAweDYyLCAweDAwLCAweENGLCAweDAzLCAweDNDLCAweDA3LCAweDMwLCAweDExLAorMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwKKzB4M0QsIDB4MjQsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAzLCAweEUwLCAweDBCLCAweDgwLCAweDM2LCAweDAwLCAweEI1LCAweDAwLCAweEJDLCAweDQzLCAweEIwLCAweDE3LAorMHhDMCwgMHg3RiwgMHgwQSwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMSwgMHhGMiwgMHgwQiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDQsCisweDdDLCAweDAzLCAweDcxLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDIxLAorMHhDMCwgMHgzNSwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgyMSwgMHhDMCwgMHgyNywgMHgwMCwgMHg1RiwKKzB4MDAsIDB4N0MsIDB4MTEsIDB4MzAsIDB4ODEsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDNDLCAweDAwLCAweEYxLCAweDgyLCAweEY0LCAweDhGLCAweDE4LCAweDVFLAorMHg0NCwgMHhGRiwgMHgyNCwgMHhFRCwgMHgwMiwgMHhDNCwgMHgwMywgMHhEMiwgMHg4MSwgMHg0MSwgMHg3QywgMHgwMCwgMHg5QiwKKzB4MDAsIDB4NzQsIDB4MEYsIDB4QzAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REMsIDB4MDksIDB4NDAsIDB4MDksIDB4MTAsCisweDA5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHhBMCwgMHhGMiwgMHgwMCwgMHhDNSwgMHgwMSwgMHgzNCwgMHgxNywgMHg1MSwgMHgwQywgMHg0MCwgMHhCMiwgMHgwNCwgMHhDRCwKKzB4MTAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MDIsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MEIsIDB4QzAsCisweDAwLCAweDRBLCAweDMzLCAweDEwLCAweDRDLCAweDAxLCAweDE0LCAweDAzLCAweDEwLCAweDAwLCAweDQxLCAweDFGLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg3OCwgMHgwNiwgMHhFMSwKKzB4QjEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MjAsIDB4RUQsIDB4ODksIDB4OTQsIDB4MDcsIDB4RDAsCisweDFFLCAweDQyLCAweDdBLCAweDAxLCAweEE5LCAweDgxLCAweEI0LCAweDg3LCAweEQwLCAweDE2LCAweDQwLCAweDZCLCAweDAwLAorMHg2RCwgMHgzMSwgMHhDMCwgMHgwNywgMHgxMCwgMHgxMiwgMHg0MCwgMHgxQiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDgsIDB4M0MsIDB4NDMsIDB4NTAsCisweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDIwLCAweDFDLCAweDAzLCAweEYwLCAweDQwLCAweEMwLCAweDczLCAweDgxLAorMHhDNywgMHgwMCwgMHgzQywgMHgzMiwgMHhGMCwgMHg0MCwgMHhDMCwgMHgzMywgMHgwMCwgMHg0RiwgMHgyMiwgMHgxQywgMHgxMiwKKzB4MzAsIDB4ODQsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDQwLCAweEJDLCAweDJCLCAweEIxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHg5MCwgMHhFNCwgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhCNywgMHgwMCwgMHhGQywgMHg2MywKKzB4RjAsIDB4MDcsIDB4QzAsIDB4MkYsIDB4MDIsIDB4NkYsIDB4MDAsIDB4MUMsIDB4MDMsIDB4RjAsIDB4OEQsIDB4QzIsIDB4MEIsCisweDQwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDczLCAweDAxLAorMHhEQiwgMHgwQSwgMHg3QywgMHg5NywgMHgzOSwgMHg2RCwgMHhDMSwgMHhCNywgMHgwMSwgMHhERiwgMHgwMCwgMHg1QywgMHg0QiwKKzB4NzEsIDB4MTgsIDB4QzAsIDB4MzYsIDB4MjAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzIsCisweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAzLCAweDM2LCAweDA1LCAweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHhCOSwgMHgwNSwgMHhFMSwgMHg1NCwgMHhCNCwgMHgxMywKKzB4MTgsIDB4MkUsIDB4NjAsIDB4QkIsIDB4MDMsIDB4RUQsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NjAsIDB4MzgsCisweDAxLCAweEE3LCAweDAwLCAweEI0LCAweDEzLCAweEQwLCAweDA3LCAweDQyLCAweDI4LCAweDEwLCAweDYxLCAweDIwLCAweEI0LAorMHgwMSwgMHgxMCwgMHgwRSwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsIDB4RTksIDB4MDUsIDB4MzQsIDB4MjcsIDB4MTIsIDB4NUUsIDB4NDAsIDB4N0IsCisweDAwLCAweENELCAweDA1LCAweDk0LCAweDI3LCAweDUyLCAweDFBLCAweDY0LCAweDdBLCAweDAyLCAweEVELCAweDAxLCAweEI0LAorMHgwRSwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QSwgMHgyMCwgMHg2RCwgMHgyMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxNiwgMHg0MCwKKzB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MzMsCisweDA4LCAweEMxLCAweDAwLCAweDM0LCAweDgzLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDEwLCAweENELCAweDIwLCAweDA0LAorMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgyNSwgMHg0MSwKKzB4MjAsIDB4MDAsIDB4NDUsIDB4MDgsIDB4MzQsIDB4OEYsIDB4MTAsIDB4RUMsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE1LCAweDAwLCAweDVCLCAweDIwLCAweDdDLAorMHgwMSwgMHgzNSwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMSwgMHg3MCwgMHgyNywgMHhDMiwKKzB4MTYsIDB4MDAsIDB4N0YsIDB4MjIsIDB4N0MsIDB4MDEsIDB4RjgsIDB4MjcsIDB4RDMsIDB4MTYsIDB4MjAsIDB4NkYsIDB4MjAsCisweEY0LCAweDBELCAweDMwLCAweDE3LCAweEMyLCAweDVGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDNCwKKzB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MTcsIDB4MDQsCisweDdDLCAweDA4LCAweEYyLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFBLCAweDAyLCAweDc0LCAweDYwLCAweEYwLCAweDAxLAorMHhDMCwgMHg0QiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MjcsIDB4MDIsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDYsIDB4RjAsIDB4MTksIDB4QzAsIDB4NjcsIDB4ODAsIDB4ODMsIDB4MDgsCisweDVDLCAweDAyLCAweDMwLCAweDk5LCAweEMzLCAweDIzLCAweDAwLCAweDkyLCAweDAwLCAweDBDLCAweDg2LCAweDcwLCAweDA5LAorMHhDMCwgMHgyMSwgMHgwMSwgMHg5MywgMHgwNCwgMHg1QywgMHgwNiwgMHgzMiwgMHgwOCwgMHhDMiwgMHg0MCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RTYsIDB4MDAsIDB4OUQsIDB4MDMsCisweDc0LCAweDAyLCAweEQwLCAweEE5LCAweDQxLCAweEUzLCAweDA0LCAweDlCLCAweDAxLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHhDNCwgMHgwQSwgMHhCMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5NSwKKzB4MDAsIDB4MDQsIDB4MEUsIDB4MTAsIDB4MDksIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg4LCAweDI0LCAweDA0LCAweDlELCAweDEwLCAweDc0LCAweDIyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMSwgMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxNCwgMHgwRCwgMHg0MSwgMHgyNywgMHg0MSwgMHg5NSwKKzB4MDAsIDB4NTQsIDB4MTIsIDB4NTAsIDB4MDksIDB4NDAsIDB4QTUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MTIsIDB4MTQsCisweDg5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHgyMCwgMHgwNSwgMHg4RCwgMHgzNCwgMHgzNiwgMHg1MiwgMHhEMiwgMHgwOCwgMHg0MCwgMHgyMywgMHg0MCwgMHg4OSwKKzB4QzAsIDB4MDQsIDB4MjIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4QTMsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MTQsIDB4MDMsIDB4OTAsCisweDg4LCAweDQwLCAweDIwLCAweDA1LCAweDk0LCAweDAwLCAweDQ0LCAweDA2LCAweDEwLCAweDQ4LCAweDQxLCAweDQxLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMSwgMHgxRiwKKzB4MjQsIDB4N0MsIDB4OTEsIDB4RjAsIDB4NDEsIDB4QzEsIDB4MDcsIDB4MDUsIDB4MTEsIDB4NTQsIDB4NUMsIDB4NTgsIDB4MzAsCisweDAxLCAweENBLCAweDA3LCAweDA1LCAweDE3LCAweDAwLCAweDVELCAweDA0LCAweDcwLCAweDIxLCAweEMwLCAweDA1LCAweDAxLAorMHg1MywgMHgwMCwgMHg1QywgMHgwMCwgMHgzMCwgMHg0NSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NTQsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDEyLCAweEYyLCAweDBCLCAweEMwLCAweDY3LCAweDAwLAorMHhCQiwgMHgwMSwgMHhFQywgMHgwQSwgMHg3MCwgMHg0QiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhBRSwgMHg1MiwKKzB4RjQsIDB4MEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweEE4LCAweDZGLCAweDA0LCAweEJGLCAweDM2LCAweEZDLCAweDQyLCAweEYwLCAweDBBLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHg5MCwgMHg3RiwgMHgzMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHhBRiwgMHgwNCwgMHg5RiwgMHgwMiwgMHhDRCwgMHg4NiwKKzB4MzQsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjQsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwMiwgMHg3NCwgMHgwOCwgMHhEMCwgMHhBMSwgMHg1MiwgMHg4NCwgMHgwMiwgMHgxRCwgMHgwMiwgMHg0NCwgMHgwMCwKKzB4NzAsIDB4MDUsIDB4NDAsIDB4QzcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4ODgsIDB4MTAsIDB4MDUsIDB4NDgsIDB4MDQsCisweDAwLCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MUEsIDB4RDAsIDB4MDgsIDB4NjIsIDB4MjMsCisweDAwLCAweDhELCAweDAwLCAweDA0LCAweDBBLCAweDEwLCAweDQ4LCAweDQwLCAweDIyLCAweDAwLCAweDhELCAweDAwLCAweDc0LAorMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4QTAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsCisweDIwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDUwLCAweDA5LCAweDQ4LCAweDI3LCAweDAwLCAweDhELCAweDAwLCAweDQ0LAorMHgwMiwgMHgxMSwgMHg4OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwKKzB4NjAsIDB4MjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsCisweDEwLCAweDlGLCAweDAwLCAweDc4LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDA4LCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCRSwgMHgwNywgMHg0QywgMHgwMiwgMHgzMSwgMHgzOSwgMHhDMiwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MTYsIDB4MjAsIDB4MDksIDB4RDAsIDB4MTQsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDI0LCAweDAwLCAweDlGLCAweDgwLCAweDdDLAorMHg0MiwgMHhGMCwgMHgwOCwgMHhFMCwgMHgyNywgMHgwQywgMHg4RiwgMHgxMCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4NEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjMsCisweDdDLCAweDE2LCAweEY0LCAweDU5LCAweEMwLCAweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMSwgMHgxRiwgMHgwMCwgMHg0QywgMHgyMCwgMHgzMCwgMHg0MSwgMHhDMCwKKzB4MDQsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NUMsIDB4ODAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDIsCisweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDI0LCAweDFGLCAweDIyLCAweDVDLCAweDAwLCAweDMwLCAweDQxLAorMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwKKzB4REMsIDB4MDQsIDB4N0QsIDB4MDAsIDB4QzQsIDB4MDksIDB4RjAsIDB4MTcsIDB4NDQsIDB4REQsIDB4NEMsIDB4NzEsIDB4MDMsCisweDQ0LCAweDAxLCAweDEwLCAweDc3LCAweEMwLCAweDU1LCAweDAwLCAweDVCLCAweDAwLCAweEI0LCAweDExLCAweEQwLCAweDA1LAorMHg0MCwgMHg1RiwgMHgwMCwgMHg3RCwgMHgwMywgMHhDNCwgMHgwMSwgMHg1MCwgMHgzNiwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RTIsIDB4MDAsIDB4Q0QsIDB4NDUsCisweDE0LCAweDBBLCAweDEwLCAweDI0LCAweDQwLCAweDcwLCAweDgwLCAweDgxLCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDQ4LAorMHg0MCwgMHgzMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MiwgMHhBMywgMHgwMCwgMHg4RCwKKzB4MTIsIDB4MTQsIDB4MDMsIDB4MTAsIDB4OEMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAzLCAweDk0LCAweDA1LCAweDUxLCAweDIyLAorMHg0MCwgMHg2MSwgMHgwMCwgMHg4MSwgMHgxMCwgMHg4NCwgMHgxNywgMHgxNCwgMHgwQSwgMHg0MCwgMHhGRCwgMHgwMSwgMHhFRCwKKzB4MDQsIDB4QjQsIDB4MDIsIDB4RDAsIDB4NEUsIDB4MDAsIDB4MkIsIDB4MDQsIDB4QkQsIDB4MTEsIDB4ODQsIDB4MDMsIDB4NTIsCisweDAwLCAweDQwLCAweDEwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgxMCwgMHg2OCwgMHgwMCwgMHhDRiwgMHgwMSwgMHgxNSwgMHgwNCwgMHgxMCwgMHgxNiwgMHhFMCwgMHg3OCwgMHg4OCwgMHhBMywKKzB4MDEsIDB4REMsIDB4NDcsIDB4MzAsIDB4MUUsIDB4RTgsIDB4N0YsIDB4MDEsIDB4RTcsIDB4MDMsIDB4QkMsIDB4MDYsIDB4RjAsCisweDFFLCAweEMwLCAweDZCLCAweDAwLCAweEFGLCAweDQxLCAweERDLCAweDA3LCAweDMyLCAweDFFLCAweEMwLCAweDUwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHg1RiwKKzB4MDAsIDB4NkMsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0UsIDB4MjMsIDB4RjAsCisweDA5LCAweEMwLCAweDM3LCAweDEyLCAweERCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDhELCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhEMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4NkYsIDB4NDAsIDB4NzMsIDB4ODEsIDB4RTQsIDB4MDQsIDB4RjEsCisweDE3LCAweEMwLCAweDc4LCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFCLCAweEMwLCAweDZGLCAweDgwLAorMHhFNywgMHgwOSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMiwgMHg3QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MTcsIDB4QzAsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDg4LCAweDI5LCAweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDEwLCAweDcwLCAweDAyLCAweDQwLCAweDk4LCAweDAyLAorMHhFMSwgMHg4MCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHg4MSwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMiwKKzB4RDAsIDB4OEUsIDB4QzAsIDB4M0EsIDB4MDAsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MjMsIDB4MTgsIDB4MjYsIDB4NDAsIDB4NTQsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHhFMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMSwgMHgwOCwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwOCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDEsIDB4MkIsIDB4MzAsIDB4RjUsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MjgsCisweDA0LCAweEFELCAweDAwLCAweEI0LCAweDAyLCAweDUwLCAweDI2LCAweDQwLCAweDIwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgxMywgMHgwMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMSwKKzB4NTAsIDB4MDgsIDB4NEMsIDB4MTAsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MjQsIDB4NDAsIDB4MjMsCisweDAwLCAweEMxLCAweDA0LCAweDA0LCAweDA1LCAweEQwLCAweDJDLCAweDQwLCAweDIyLCAweDgwLCAweDRELCAweDAwLCAweDM2LAorMHgwQywgMHg1MCwgMHgwQywgMHg1MiwgMHgxOCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MTQsCisweDAwLCAweDkzLCAweDAwLCAweEZDLCAweDAzLCAweEQwLCAweDA5LCAweEM0LCAweDM3LCAweDAwLCAweEQ3LCAweDA0LCAweDRELAorMHgxMiwgMHhGMCwgMHgzRiwgMHhDMSwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwQSwgMHg3QywgMHgwQywgMHg3MCwgMHgyOSwgMHhDMCwKKzB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsCisweDEwLCAweDlGLCAweDgyLCAweDVDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDAzLCAweDAwLCAweDk3LCAweDgwLCAweDdFLAorMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMSwKKzB4QTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NjAsIDB4QjQsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDBBLCAweDJCLCAweDIwLCAweDkzLCAweDgwLCAweENDLAorMHgwMCwgMHgzMCwgMHgwNywgMHhDMCwgMHhBRiwgMHgwMCwgMHhBMywgMHgwOSwgMHg4RCwgMHgwMywgMHgzMiwgMHgwRiwgMHhDMSwKKzB4NzcsIDB4MDAsIDB4RkIsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzQsIDB4MEYsIDB4MDAsIDB4MkUsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDAwLCAweDMwLCAweDA5LCAweEMwLCAweDA3LCAweDJBLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgyMSwgMHgzNiwgMHgwMCwgMHg5MSwgMHgxMSwgMHgxNCwgMHg0MSwgMHg1MSwgMHg5NSwgMHg0MCwKKzB4QTcsIDB4MDAsIDB4OTEsIDB4MDIsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDQsIDB4NjcsIDB4MDIsIDB4REQsIDB4MDAsCisweDA0LCAweDAyLCAweDMwLCAweDBELCAweDQwLCAweDI3LCAweDA0LCAweDlELCAweDAwLCAweDM0LCAweDFDLCAweDEwLCAweEJELAorMHg0NCwgMHg4NywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwKKzB4MjQsIDB4MTAsIDB4MTEsIDB4ODEsIDB4NjQsIDB4ODAsIDB4MTgsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4OTEsIDB4MDIsCisweDQ0LCAweDAzLCAweDE0LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweENELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELAorMHg0MCwgMHgzNiwgMHgwMiwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDE2LCAweDgwLCAweDUwLCAweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDA4LAorMHg0OCwgMHhCMywgMHgyMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDI2LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHhEMSwgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwOCwgMHhGQiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsCisweDAxLCAweEM0LCAweDA3LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBOCwgMHgxRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwQiwgMHhDMCwgMHgwRiwgMHgwMCwgMHg3RiwKKzB4NDAsIDB4RkMsIDB4MDMsIDB4RjEsIDB4MDcsIDB4QzAsIDB4MkYsIDB4MDEsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4NzAsCisweDBFLCAweEMwLCAweDFGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHg3QiwgMHgyMiwgMHhGQiwKKzB4MjksIDB4RUMsIDB4MjcsIDB4RjAsIDB4OUYsIDB4QzQsIDB4N0MsIDB4MDIsIDB4RUYsIDB4MDksIDB4Q0MsIDB4MDcsIDB4MzAsCisweDlGLCAweEMwLCAweDdDLCAweDAwLCAweEUzLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDlGLCAweEMwLCAweDdDLCAweDAwLAorMHhFRiwgMHgwOSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NEMsIDB4MDAsIDB4RDEsCisweDAxLCAweDAwLCAweDA0LCAweDMxLCAweDFELCAweDA0LCAweDQ0LCAweDA0LCAweDUwLCAweDQxLCAweDAwLCAweDA1LCAweDA1LAorMHgxMSwgMHgwMCwgMHg1QywgMHgxMCwgMHhEMCwgMHg0MSwgMHg0MCwgMHgwMCwgMHgyNSwgMHgxRCwgMHgwNCwgMHg0NCwgMHgwMCwKKzB4RDAsIDB4MDEsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDM1LCAweDAwLCAweEQ5LCAweDAwLCAweDI0LCAweDEzLCAweDUyLCAweDRDLCAweDQyLCAweDMxLCAweDAxLAorMHhDRCwgMHgwNCwgMHg0NCwgMHg4MywgMHg1MCwgMHgwRCwgMHgwQSwgMHgzMCwgMHgwMCwgMHhENSwgMHgwMCwgMHgwNCwgMHg0MywKKzB4RDAsIDB4NEMsIDB4NjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NEQsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDA3LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NywgMHgwMCwKKzB4NTAsIDB4MDEsIDB4NDgsIDB4MDEsIDB4NDAsIDB4MTUsIDB4MjAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDgsIDB4MDUsCisweDAwLCAweDBELCAweDAwLCAweDU0LCAweDAwLCAweEMwLCAweDAxLCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNiwgMHgwMCwgMHhEQiwgMHgwMCwgMHg2QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4NDAsIDB4MEMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4NDAsIDB4MzQsCisweDAwLCAweEQ3LCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDRDLAorMHgwMywgMHhFMCwgMHgwRCwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4NDAsIDB4RjMsIDB4MDMsIDB4RDQsIDB4MEUsCisweDEwLCAweDNGLCAweDAwLCAweEY4LCAweDQwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDIwLCAweDNCLCAweDAwLCAweERDLAorMHgwMCwgMHhGMSwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsCisweDAwLCAweEQ3LCAweDA0LCAweDdDLCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDYwLCAweDVDLAorMHgwNywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgxMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzQsIDB4NDAsIDB4RDMsIDB4MDQsIDB4NEMsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QUIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweDAwLCAweDA2LCAweDAxLCAweDEyLCAweDc0LAorMHgxNCwgMHhEMCwgMHg3MSwgMHg2MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2QywgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4QzcsIDB4MDIsIDB4MEQsIDB4MTEsIDB4NkMsIDB4MTgsIDB4RDIsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MTIsCisweDZDLCAweDAwLCAweEQwLCAweEIxLCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHhGMCwgMHgxMCwgMHhDNSwgMHg4MCwgMHgzNCwgMHgwMywgMHhEMSwgMHgwRCwgMHg0MiwKKzB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4MEIsIDB4OTAsIDB4MEMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4QzUsIDB4MDEsCisweDA0LCAweDBGLCAweEQ4LCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweEMxLCAweDAxLCAweDA0LCAweDBCLCAweEQyLCAweDFDLAorMHg0MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRiwgMHgwMiwKKzB4NEMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDksIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDIsIDB4MzksIDB4MDEsCisweEE0LCAweDA0LCAweDEwLCAweDEyLCAweDQwLCAweDRCLCAweDA0LCAweDNELCAweDAxLCAweEE2LCAweDI0LCAweEQwLCAweDEyLAorMHg2OCwgMHg0QSwgMHgwMCwgMHgzMSwgMHgwMSwgMHhBNCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg1MywgMHgzQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDAsCisweDNDLCAweDAzLCAweEYwLCAweDBDLCAweDQ4LCAweDMzLCAweDEwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweEIwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDNywgMHgwMCwgMHgwQywgMHhBMywgMHhGMSwgMHgwRCwgMHhDQywgMHgzMiwgMHg4MCwgMHhDMywKKzB4MDAsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDksIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEY4LCAweDAzLAorMHg4MCwgMHgwQiwgMHgwOCwgMHgzNiwgMHgwMCwgMHhCQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RkMsIDB4MjAsIDB4RDIsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MTAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RkEsCisweDExLCAweEMwLCAweDA5LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBOCwgMHg3NywgMHgyMCwgMHhENywgMHg0MSwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3NCwgMHgwMCwgMHhDMywKKzB4MDEsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4RDMsIDB4MDEsIDB4NEQsIDB4MDMsIDB4NzAsCisweDFELCAweEMwLCAweDMwLCAweDAwLCAweEQzLCAweDAxLCAweDRDLCAweDA3LCAweDMwLCAweDFELCAweEQwLCAweDQwLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwRCwgMHg0OCwgMHgyMSwKKzB4NDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MDksIDB4MDAsIDB4MjUsIDB4MDAsIDB4OTAsIDB4MDAsIDB4RDAsCisweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDM1LCAweDAwLCAweEM0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA5LCAweDAwLAorMHgyQiwgMHg0MCwgMHg4NCwgMHgwMCwgMHhCMCwgMHgwMywgMHhDMCwgMHg0RSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RjksIDB4MDEsIDB4QTQsIDB4MDcsIDB4QzIsCisweDFGLCAweDQwLCAweDdDLCAweDAwLCAweEY1LCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdGLCAweDAwLAorMHhFMSwgMHgwMSwgMHg5NCwgMHgwNywgMHg1MCwgMHgxRiwgMHg0OCwgMHg3QywgMHg4MCwgMHhFMSwgMHgwMSwgMHhDNCwgMHgwNywKKzB4MTgsIDB4MUUsIDB4NDgsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE2LCAweDI4LCAweDAzLCAweDAwLCAweDA5LCAweDAwLCAweDQwLCAweDAwLCAweEQ4LCAweDAwLCAweDQyLCAweDAxLCAweDAwLAorMHgwNSwgMHgyMCwgMHgxNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwNSwgMHgwMCwgMHgxNCwgMHgwMCwKKzB4NTAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDgsIDB4MDksIDB4MDAsIDB4MDQsIDB4MDAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NUEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDE1LCAweDAwLAorMHg1QiwgMHgwMCwgMHg2QywgMHgwMSwgMHhEMCwgMHgwNCwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1NywgMHgwMCwgMHg0QywgMHgwMSwKKzB4RjAsIDB4MDUsIDB4QzQsIDB4MTcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4MUMsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MTQsCisweDA4LCAweDUzLCAweDYwLCAweDRDLCAweDAxLCAweDMwLCAweDA1LCAweDQwLCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNywgMHgwMiwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDgsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MEYsCisweDAwLCAweDNGLCAweDAyLCAweEU0LCAweDA4LCAweEIwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDgwLCAweEZELAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4NDAsIDB4MjQsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHgxNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5MywgMHgwNCwgMHg3OCwgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjQsCisweDAxLCAweDlELCAweDAwLCAweDc0LCAweDQyLCAweDE0LCAweDU5LCAweEMwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5MSwgMHg5QSwgMHg3NCwgMHg4RSwgMHhCMiwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MTAsIDB4OTEsIDB4MDIsIDB4NjQsIDB4MTYsIDB4RDEsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDZDLCAweDgwLCAweEJELCAweDAxLCAweEU0LAorMHgwNiwgMHgxMCwgMHg0QiwgMHg0MCwgMHgyRCwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwRSwgMHhEMCwgMHgwQSwgMHg0MCwKKzB4MkMsIDB4MDQsIDB4QjEsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4MDAsIDB4MkYsIDB4MDAsIDB4QjEsIDB4MTAsCisweEY0LCAweDAyLCAweEQwLCAweDBCLCAweDQxLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyOCwgMHgwMCwgMHhFQywgMHgwMCwgMHhCNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwKKzB4MkIsIDB4MjIsIDB4QUQsIDB4MDgsIDB4QjQsIDB4ODIsIDB4RDAsIDB4OEEsIDB4NjAsIDB4MjgsIDB4NDIsIDB4QTEsIDB4NDAsCisweEY0LCAweDAyLCAweDkwLCAweDhBLCAweDQwLCAweDJCLCAweDBBLCAweEExLCAweDA4LCAweEE0LCAweDAyLCAweEQwLCAweDBBLAorMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwKKzB4MDYsIDB4MDAsIDB4MUYsIDB4NDAsIDB4NkMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MUQsIDB4MDIsCisweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEQwLCAweDg0LCAweDAwLCAweDEzLCAweDBBLCAweDdDLCAweDAxLCAweDMwLCAweDIxLAorMHhDMCwgMHg4NywgMHgwOCwgMHgwMywgMHgyMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhFMCwgMHg3NywgMHhFMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MjcsIDB4MDUsIDB4OEQsIDB4MTQsCisweDdDLCAweDUyLCAweEYwLCAweDQ4LCAweEMxLCAweDIyLCAweDAxLCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDQ5LAorMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHg4MSwgMHg3QywgMHg1MiwgMHhGMCwgMHg0OCwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwKKzB4MjQsIDB4M0MsIDB4NTIsIDB4RjAsIDB4NDksIDB4QzEsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEEwLCAweEFGLCAweDAwLCAweEI3LCAweDAyLCAweERDLCAweDBBLCAweEIwLCAweDJCLAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHhEQywgMHgwMiwgMHgzMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgxMCwgMHhCMywKKzB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4QTcsIDB4MTAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4QjAsCisweDBCLCAweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgwMCwgMHgwNSwgMHgwMSwgMHgxMSwgMHg4MSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg0MSwgMHg0MCwgMHgwNywgMHgwNSwgMHgxRCwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NzQsIDB4NTAsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweDUwLCAweDAxLCAweDQwLCAweDYzLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgyMSwgMHgwMSwgMHg4NSwKKzB4MDAsIDB4NTQsIDB4MTIsIDB4OTAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4ODAsIDB4OEQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4MTAsCisweDQ4LCAweDQwLCAweDIzLCAweDQ0LCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDgwLAorMHg4RCwgMHgwMCwgMHgwNiwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MDgsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDhDLCAweDAwLCAweDQ1LCAweDgyLCAweDUwLCAweDA5LCAweDQyLCAweDIzLCAweDA4LAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDgsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDIwLCAweDI1LCAweDAwLCAweDk3LCAweDAwLCAweDFDLCAweDAyLCAweEIwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzgsIDB4MTcsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDg4LCAweDI1LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGOCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDgwLCAweDdELCAweDQyLCAweDcwLCAweDA5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgxMCwgMHg3QywgMHgxMCwKKzB4RDAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NUMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDQsCisweDAwLCAweDFCLCAweDQ5LCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwMCwgMHhCNCwgMHg0MSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTAsIDB4REMsIDB4MDAsIDB4N0QsIDB4MjMsIDB4RjQsIDB4OUQsIDB4MTAsIDB4OTcsIDB4NDAsIDB4MTcsCisweDAwLCAweDVELCAweDAwLCAweEI0LCAweDIxLCAweEQwLCAweDA1LCAweDQwLCAweDFDLCAweDAwLCAweDdELCAweDAxLCAweEY0LAorMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNSwgMHgyMCwgMHg3RCwgMHgwMiwgMHhGNCwgMHgwOSwgMHgxMCwgMHgwNywgMHg0MCwKKzB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4QjYsCisweDA2LCAweERELCAweDBCLCAweDM0LCAweDAzLCAweDUwLCAweEFDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDgwLCAweDE0LAorMHg4RiwgMHhEMCwgMHgwQywgMHg1MCwgMHg3MCwgMHg4MCwgMHhDOSwgMHgyMSwgMHgzMiwgMHgyNywgMHhEMCwgMHgwQywgMHg0MCwKKzB4MzIsIDB4MDAsIDB4REQsIDB4MTIsIDB4NzQsIDB4MjMsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEY0LAorMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMywgMHhFQywgMHgwNCwgMHhCNCwgMHgwQSwgMHhDMCwgMHg1RSwgMHg0MCwKKzB4MzgsIDB4MDQsIDB4RTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4NUYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MkQsIDB4MTAsCisweEI0LCAweDAzLCAweDEwLCAweDJFLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwKKzB4N0IsIDB4MDUsIDB4RUIsIDB4ODksIDB4OUMsIDB4MDcsIDB4NzAsIDB4QkYsIDB4QzAsIDB4NzgsIDB4MjAsIDB4MkIsIDB4MjEsCisweEJDLCAweDA3LCAweEYwLCAweDNFLCAweEMwLCAweDdBLCAweDA1LCAweEVGLCAweDAxLCAweEZDLCAweDA3LCAweDMxLCAweDFFLAorMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwKKzB4MTUsIDB4MTAsIDB4NUYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4ODAsIDB4QjcsIDB4MDEsIDB4REYsIDB4MEMsCisweDdDLCAweDAwLCAweEYwLCAweDRELCAweEMwLCAweDE3LCAweDAwLCAweDFGLCAweDIwLCAweDdDLCAweDAzLCAweEYwLCAweDBDLAorMHg0MSwgMHgzNSwgMHgwOCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N0QsIDB4MDAsIDB4RkYsIDB4ODksCisweEY4LCAweDA1LCAweDcwLCAweDFGLCAweEMyLCAweDdELCAweDAwLCAweEZCLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLAorMHhDMCwgMHg2RiwgMHgwMCwgMHhGNywgMHgwMSwgMHhDRSwgMHgyNSwgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGMywKKzB4MDEsIDB4OEMsIDB4MjUsIDB4MzAsIDB4MUUsIDB4QzAsIDB4MTgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDA4LCAweDM5LCAweDA0LCAweEVELCAweDA4LCAweEY0LCAweDExLCAweDAwLCAweDBFLAorMHg0MCwgMHgzRiwgMHgwMCwgMHhFMCwgMHgxMCwgMHhCNCwgMHg0MiwgMHhEMCwgMHg4RSwgMHg0MSwgMHgzQiwgMHgwMCwgMHhGNSwKKzB4MDIsIDB4OTQsIDB4MEIsIDB4NTAsIDB4MEUsIDB4QzAsIDB4M0IsIDB4MDAsIDB4M0IsIDB4MDgsIDB4ODUsIDB4MzksIDB4QjAsCisweDBBLCAweDQwLCAweDU1LCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LAorMHgwMCwgMHgzOSwgMHgwMiwgMHhFRCwgMHgwOCwgMHhCMCwgMHgwMSwgMHhEMSwgMHgwNiwgMHg0MCwgMHgzOSwgMHgwNCwgMHhFOSwKKzB4MDgsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkYsIDB4MDAsIDB4NzEsIDB4MDgsIDB4QzQsIDB4MDEsIDB4OTAsCisweDBFLCAweDQwLCAweDNGLCAweDAwLCAweEU5LCAweDAwLCAweEM0LCAweDAwLCAweDE4LCAweDA3LCAweDQwLCAweDIwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyMSwgMHgxMCwgMHg5RCwKKzB4MDMsIDB4MzQsIDB4MDAsIDB4OTAsIDB4ODksIDB4NDAsIDB4RjIsIDB4ODAsIDB4QzEsIDB4MDIsIDB4MzQsIDB4MEMsIDB4RDAsCisweDFDLCAweDYwLCAweDU3LCAweDAwLCAweDA1LCAweDA2LCAweDE0LCAweDBFLCAweEQ4LCAweDJDLCAweDQwLCAweEIxLCAweDAwLAorMHhDRCwgMHgwQSwgMHgwMCwgMHhBQywgMHg5OCwgMHgwMCwgMHg0MiwgMHgwOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4QTAsIDB4QzQsIDB4MjAsIDB4MUYsIDB4NTIsIDB4N0MsIDB4MEEsIDB4RDAsCisweEExLCAweEMwLCAweEZELCAweDgwLCAweEZCLCAweDAxLCAweDdDLCAweDJDLCAweEYwLCAweDBGLCAweEM4LCAweEQ3LCAweDAxLAorMHg5MywgMHgxMSwgMHg0QywgMHgxMiwgMHhCMCwgMHgzRiwgMHg0MSwgMHhCRiwgMHgwMCwgMHhDOSwgMHgwOCwgMHg0OCwgMHgwRSwKKzB4MTAsIDB4OTEsIDB4QzAsIDB4NzQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDBELCAweDA4LCAweDI3LCAweDIwLCAweDlGLCAweDg0LCAweDdFLCAweDYwLCAweDcwLCAweDIxLCAweEM4LCAweDM3LCAweDA5LAorMHhERiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwRCwgMHhDMSwgMHhBNiwgMHgwMCwgMHg5RSwgMHg0MCwgMHg3RSwgMHg0MCwKKzB4NzAsIDB4MEQsIDB4QzEsIDB4MzcsIDB4MjIsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MUEsIDB4RjAsIDB4ODksIDB4QzQsIDB4OTcsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDA4LCAweDBCLCAweDg0LAorMHgzMywgMHg4MCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRSwgMHgwMCwgMHhGNywgMHgxMCwgMHhGOCwgMHgwMCwKKzB4RjIsIDB4MEYsIDB4QzAsIDB4MUMsIDB4MDQsIDB4MzMsIDB4ODAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDA0LCAweEZGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg0NiwgMHgwOCwgMHgxNywgMHgxMSwgMHg0QywgMHgwNiwKKzB4RDAsIDB4MTEsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4ODAsIDB4NzQsIDB4MDQsIDB4RjAsIDB4MEMsIDB4NDAsIDB4ODUsCisweDAyLCAweDExLCAweDAzLCAweDY0LCAweDA2LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDA4LCAweDFELCAweDExLCAweDZDLAorMHgwNCwgMHhEMCwgMHgzOCwgMHhDOCwgMHgwNiwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4QTAsIDB4NDQsIDB4MDQsIDB4MTEsIDB4MjEsIDB4NTQsIDB4MDYsIDB4RDgsIDB4MzksIDB4NjYsIDB4MzIsCisweDAwLCAweEQ1LCAweDAwLCAweDc0LCAweDBFLCAweEQwLCAweDBELCAweDQwLCAweDA0LCAweDA0LCAweDMxLCAweDIxLCAweDc0LAorMHgwNCwgMHhEOCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwOCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgzMSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MEEsIDB4MjQsCisweDAwLCAweDg1LCAweDAwLCAweDA1LCAweDAwLCAweEQyLCAweDA4LCAweDYwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LAorMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyMSwgMHgyMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMiwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDMwLCAweDA2LCAweDAwLCAweDExLCAweDAwLCAweDVDLAorMHg4MiwgMHhGOCwgMHgwMSwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGNiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRiwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4OTAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4NSwgMHhBOCwgMHgyRiwgMHgwMCwgMHhCNiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGOCwgMHgwQiwgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RkUsIDB4ODAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NDAsIDB4M0YsIDB4MDAsCisweEE0LCAweDAyLCAweEYyLCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwKKzB4N0YsIDB4NDAsIDB4RjMsIDB4NDYsIDB4RkMsIDB4MDMsIDB4MzAsIDB4NEYsIDB4QzAsIDB4NEYsIDB4MTIsIDB4M0IsIDB4NEMsCisweENDLCAweDIzLCAweDMwLCAweDRGLCAweEMyLCAweDBDLCAweDgwLCAweDNGLCAweDAxLCAweEZDLCAweDA3LCAweDcxLCAweDhGLAorMHhDMCwgMHgwRiwgMHgwOCwgMHg3MywgMHgwMSwgMHhGQywgMHgwMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTAsIDB4N0QsIDB4MDAsIDB4RTEsIDB4MDgsCisweEY0LCAweEFGLCAweDEwLCAweEJGLCAweDQwLCAweDI3LCAweDAxLCAweDVELCAweDA4LCAweEM0LCAweDNCLCAweDUwLCAweDlGLAorMHg0MCwgMHg0NCwgMHgwMCwgMHg1RCwgMHgwMCwgMHhGNCwgMHgwNywgMHgxMCwgMHgwRiwgMHg0MCwgMHgwNywgMHgwMCwgMHhENSwKKzB4ODEsIDB4NzQsIDB4MDAsIDB4QjEsIDB4MDEsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDIwLCAweDMzLCAweDAwLCAweEM0LCAweDA0LCAweDM0LCAweDAzLCAweDU1LCAweDBDLAorMHg0MCwgMHg0MywgMHgwMSwgMHg4RCwgMHg0NCwgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwRCwKKzB4ODAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MDcsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsCisweDAwLCAweDQwLCAweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHgzNSwgMHgwMCwgMHhENSwgMHgwMCwgMHg3MCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MCwgMHg2NywgMHgwMCwgMHg1RCwKKzB4MTQsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4MDAsIDB4NkMsIDB4MDAsIDB4NUQsIDB4MTAsIDB4NzQsIDB4MDMsIDB4MTAsCisweDBGLCAweDQwLCAweDZGLCAweDAwLCAweEQ1LCAweDA0LCAweDcwLCAweDA2LCAweEQwLCAweDExLCAweDQwLCAweDBGLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNiwgMHgwMCwgMHhENywKKzB4MDAsIDB4N0UsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzQsIDB4NDcsIDB4MDAsIDB4MUIsIDB4MDMsIDB4NUQsIDB4MDMsIDB4NzAsCisweDBELCAweDgwLCAweDQ0LCAweDIwLCAweERELCAweDAwLCAweDNDLCAweDAzLCAweDc0LCAweDBELCAweEM0LCAweDQ3LCAweDAwLAorMHg5MywgMHgwNiwgMHg3OCwgMHgwNCwgMHg3MCwgMHg1MSwgMHhDMCwgMHgwMSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkIsIDB4MDAsIDB4QkMsIDB4MDMsIDB4QjAsCisweDBGLCAweEMwLCAweDBGLCAweDAwLCAweDZBLCAweDIwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLCAweDg0LCAweDBGLCAweDA4LAorMHhGQywgMHgwMCwgMHhGRSwgMHgwMywgMHhFMCwgMHgwRiwgMHg4MCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhCOCwgMHgwMiwKKzB4QjAsIDB4MDksIDB4QzIsIDB4M0UsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDMxLCAweDEwLCAweEQzLCAweDQwLCAweDVDLCAweDAzLCAweEYzLCAweDBELCAweEMwLCAweDA2LCAweDAwLAorMHg5RiwgMHgwMiwgMHgyQywgMHgwMywgMHg3MCwgMHg0QywgMHhDMCwgMHgyNiwgMHgwNCwgMHhENywgMHgyMiwgMHg3QywgMHgxMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjgsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweDM0LCAweDAwLAorMHhGMSwgMHgyMCwgMHhDNCwgMHgxNywgMHhEMCwgMHg0RiwgMHg0MCwgMHgyNCwgMHgwMCwgMHg1RCwgMHg0MCwgMHhDMCwgMHgxNywKKzB4MTAsIDB4N0YsIDB4NDAsIDB4RTcsIDB4MDAsIDB4REQsIDB4MDYsIDB4NzAsIDB4MDMsIDB4MTEsIDB4QUYsIDB4MTAsIDB4MjQsCisweDAwLCAweDlELCAweDQ1LCAweDQ0LCAweDQ2LCAweDExLCAweDE5LCAweDExLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg3MiwgMHg0MCwgMHhDOSwgMHgyMCwgMHgyNCwgMHgwMywKKzB4RDAsIDB4NkMsIDB4NDAsIDB4MjIsIDB4MDAsIDB4MDgsIDB4MjAsIDB4MjAsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NDAsIDB4QzIsCisweDg4LCAweDg0LCAweDIwLCAweDMwLCAweDBCLCAweDEwLCAweDBDLCAweDQwLCAweDA0LCAweDAwLCAweDhELCAweDIxLCAweDI1LAorMHgwNCwgMHgxNCwgMHgxMSwgMHgwMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MEYsIDB4MDAsIDB4NzAsIDB4MDQsIDB4RTksIDB4MDEsIDB4QjQsIDB4MTcsIDB4RDgsIDB4MUUsIDB4NDAsIDB4NkEsCisweDA4LCAweEFELCAweDA1LCAweEE0LCAweDA3LCAweDkwLCAweDFFLCAweDRBLCAweDVCLCAweDBBLCAweEVELCAweDZCLCAweDM0LAorMHgwNywgMHg4MSwgMHg5RSwgMHg0MiwgMHg1OCwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNiwgMHgwNSwgMHgxMCwgMHhCNiwgMHg0MCwKKzB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsCisweDAwLCAweENCLCAweDAwLCAweDJDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDIyLCAweDAxLCAweDlGLCAweDAwLCAweDZDLAorMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgwMiwgMHgwNCwgMHg4NywgMHgwNSwgMHgzQywgMHg0MywgMHgyMCwgMHgwRCwgMHhDMCwKKzB4MTAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NkMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4QzAsIDB4NDgsIDB4NjgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDdELCAweDAwLCAweEY3LCAweDEwLCAweEMxLAorMHg1MywgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRCwgMHgwMCwgMHhCQiwgMHgwNCwgMHhEQywgMHgwQiwgMHg3QSwgMHg4RiwgMHhDMSwKKzB4M0YsIDB4MDgsIDB4RkYsIDB4MjgsIDB4RkMsIDB4MDcsIDB4NzIsIDB4MkYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDAsCisweDRDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMywgMHg1QywgMHg0RiwgMHgzMCwgMHgzRCwgMHhDOSwKKzB4MDQsIDB4MTAsIDB4NUYsIDB4NDAsIDB4NEMsIDB4MzcsIDB4MzAsIDB4MkQsIDB4QzAsIDB4NTYsIDB4NDAsIDB4REIsIDB4MDEsCisweDRDLCAweDAzLCAweEIzLCAweDJELCAweEMyLCAweDE0LCAweDAwLCAweDhGLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBELAorMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwKKzB4MzksIDB4MDEsIDB4Q0QsIDB4MTQsIDB4MDIsIDB4MTMsIDB4QjAsIDB4NEMsIDB4NEEsIDB4MDgsIDB4MDAsIDB4Q0MsIDB4MDAsCisweDg0LCAweDEzLCAweEIwLCAweDRFLCAweDQxLCAweDFCLCAweDAwLCAweEUxLCAweDAwLCAweDg0LCAweDBCLCAweEQwLCAweDBGLAorMHg0MCwgMHgxOCwgMHgwMCwgMHhBRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHhDMCwgMHg0RSwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDIsIDB4RUQsIDB4MDEsCisweDk0LCAweDE3LCAweDEwLCAweDlFLCAweDQwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweDA0LCAweDE3LCAweDEwLCAweDFFLAorMHg0MCwgMHg2MSwgMHg4OCwgMHhFMSwgMHgyMSwgMHg5NiwgMHgxNywgMHhEMCwgMHg5RSwgMHg0NCwgMHg3OCwgMHgwMCwgMHhCRCwKKzB4MDEsIDB4ODUsIDB4MDUsIDB4RDAsIDB4MUMsIDB4NDAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHg3MSwgMHgwMSwgMHhDRCwgMHg4OCwgMHgwNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwKKzB4M0EsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDIsIDB4RjAsIDB4MDQsIDB4OEQsIDB4MDMsIDB4NDQsIDB4MEIsIDB4RDAsCisweDhELCAweDQwLCAweDVCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorMHgyMCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMSwgMHgzMCwgMHgwNSwgMHg0MCwgMHhERCwgMHgwMSwgMHg3RiwKKzB4QzEsIDB4NEQsIDB4MDEsIDB4MzEsIDB4MDUsIDB4QzAsIDB4OUUsIDB4MDQsIDB4NzEsIDB4MDMsIDB4NUMsIDB4MDEsIDB4QjAsCisweDA1LCAweEM0LCAweERDLCAweDAxLCAweDdGLCAweDU5LCAweENDLCAweDA5LCAweEYwLCAweEI3LCAweDQwLCAweDVELCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NjQsIDB4MDAsIDB4RjAsIDB4MjEsIDB4NTAsIDB4MDYsIDB4MjAsIDB4MEIsIDB4ODAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDg2LCAweDA0LCAweDE3LCAweDAwLCAweDY4LCAweDA4LCAweEEyLCAweDAxLCAweEQwLCAweDA3LCAweDA4LAorMHgxRiwgMHgyMiwgMHg3QywgMHg0OCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4ODIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDZDLCAweDIyLCAweEYwLCAweDQ5LCAweEM0LCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHhEMCwgMHgyOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1MCwgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDIwLCAweDJDLCAweDAwLCAweDlELCAweDQwLCAweDc0LCAweDAyLCAweEQwLCAweEE5LCAweDQwLCAweDI3LCAweDEwLAorMHg5NCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHgwNCwgMHhBNywgMHgwMSwgMHg5RCwgMHgxMSwgMHhGNCwgMHg0RSwKKzB4QzIsIDB4MjksIDB4NTAsIDB4MjQsIDB4MDAsIDB4OEQsIDB4MDQsIDB4NDQsIDB4MkEsIDB4NTAsIDB4MDksIDB4NDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MCwgMHg0MCwgMHg2NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4MDEsIDB4MjYsIDB4ODIsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDIsIDB4QzAsIDB4MjgsIDB4NDAsIDB4MjQsCisweDAwLCAweDlDLCAweDgwLCAweDU0LCAweDAyLCAweDEyLCAweDI5LCAweDQ2LCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMSwgMHgwMCwgMHg4RCwgMHg0OCwgMHgzNCwgMHgwMiwKKzB4RDEsIDB4MDgsIDB4NDAsIDB4MjMsIDB4NjIsIDB4ODEsIDB4MDgsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDIxLCAweDhELCAweDIwLCAweDM0LCAweDAyLCAweEQwLCAweEM4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDgwLCAweDEwLAorMHg1MywgMHg1MiwgMHg0OCwgMHg0MSwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUQsIDB4QjgsIDB4NDYsIDB4MDAsIDB4MUYsIDB4MzYsIDB4N0MsIDB4NTAsIDB4RjAsIDB4NDUsIDB4QzEsIDB4ODcsCisweDAwLCAweDEyLCAweDE2LCAweDZDLCAweDUwLCAweEYxLCAweDQxLCAweDgxLCAweDQ2LCAweDAwLCAweDBGLCAweDBBLCAweDdDLAorMHgwNCwgMHhGMCwgMHgzMSwgMHhDNCwgMHhDNCwgMHgwMiwgMHgxRiwgMHgwMCwgMHg1OCwgMHgxMCwgMHgzMCwgMHg0MSwgMHhFMiwKKzB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4QTcsCisweDAwLCAweDlGLCAweDI0LCAweDc4LCAweDgyLCAweEYwLCAweDA5LCAweENBLCAweDJGLCAweDAxLCAweEZDLCAweDA0LCAweDdDLAorMHgwNiwgMHhGMSwgMHgwOSwgMHg4MCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwMSwgMHg3QywgMHgwQSwgMHhCMCwgMHhDOSwgMHhDMCwKKzB4NkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4RUMsIDB4NTIsIDB4RjAsIDB4NEIsIDB4RDEsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDZGLCAweDAwLCAweDlGLCAweDE2LCAweEZDLAorMHgwMiwgMHgzNCwgMHg0QiwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMiwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MkMsIDB4NjAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NDYsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4ODAsCisweENELCAweDgyLCAweEYwLCAweDBCLCAweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4NywgMHgwMCwgMHgxRCwgMHgwMiwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MDQsIDB4MDEsIDB4MEQsIDB4OEEsIDB4NzQsIDB4MDQsIDB4RDAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MTEsIDB4MDAsCisweDc0LCAweDA4LCAweEQwLCAweDQxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweEQxLCAweDAxLAorMHg0MiwgMHg2MywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwKKzB4QTEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MEEsIDB4MTEsIDB4MkMsIDB4NDAsIDB4MjAsIDB4MjQsIDB4ODksIDB4NDAsCisweDM0LCAweDFBLCAweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDEwLCAweDg1LCAweDAwLCAweDM0LCAweDAyLCAweEQ4LCAweDA4LAorMHg2MSwgMHgyMCwgMHg0MCwgMHg5NSwgMHgwMCwgMHgxNCwgMHgwNiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsCisweDcwLCAweDAyLCAweDEyLCAweDA5LCAweDQwLCAweEE0LCAweDBBLCAweDlELCAweDIwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHgxMCwgMHgyNCwgMHgxMCwgMHg5NSwgMHgyMCwgMHg3NCwgMHg4MiwgMHhEMCwgMHgwOCwgMHg0QywgMHgyNCwgMHgwNCwgMHg5NSwKKzB4MDgsIDB4NTQsIDB4QTMsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDJBLCAweDI1LCAweDIwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHhEMCwgMHg2NCwgMHgwMCwgMHg5RiwgMHgwMiwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHhBNCwgMHgwNCwgMHg5NywKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDksIDB4NTAsIDB4NjQsIDB4MDIsIDB4ODcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDE3LCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3RSwgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NywgMHgyMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzMsIDB4MjcsIDB4MDIsIDB4OUIsIDB4MTAsIDB4N0MsIDB4ODIsIDB4RjAsCisweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlBLCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDVCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxNywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NkMsIDB4MjAsIDB4RjAsCisweDgxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDM0LCAweDAxLCAweEMwLCAweDg3LCAweDAwLAorMHgxMywgMHgwNCwgMHg3QywgMHgwNCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MTQsIDB4MDQsIDB4NTEsIDB4MDAsIDB4MkMsIDB4MDEsIDB4RDAsCisweEE3LCAweDQ4LCAweDE3LCAweDA4LCAweDUxLCAweDAwLCAweDQ0LCAweDAxLCAweEQwLCAweDI2LCAweDQwLCAweDVCLCAweDIwLAorMHg3QywgMHg4MywgMHhDNCwgMHgwMSwgMHgxMSwgMHgwNywgMHg0MSwgMHgxNywgMHgwMCwgMHg3MCwgMHgwMCwgMHhGNCwgMHgwMSwKKzB4MTAsIDB4MDcsIDB4NDQsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDgwLCAweDMyLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDI3LCAweDlBLCAweDBDLCAweDQ0LCAweDMzLCAweDAwLAorMHhDMCwgMHgwMCwgMHgyNCwgMHgwNywgMHhEMCwgMHgyQywgMHg0MCwgMHg2MywgMHgyMCwgMHhDRCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4OTAsIDB4NUMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODEsIDB4MDMsIDB4MzAsIDB4MDMsIDB4OTQsIDB4MUMsIDB4NDAsIDB4NDMsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc5LCAweDAwLAorMHhFMSwgMHgwMSwgMHhBNSwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MCwgMHg3QiwgMHgwMiwgMHhFMSwgMHg0OSwgMHg4NCwgMHgwMiwKKzB4RDAsIDB4MDYsIDB4NDAsIDB4QkIsIDB4ODAsIDB4NkQsIDB4MDMsIDB4ODQsIDB4NDYsIDB4OTIsIDB4MDYsIDB4NDAsIDB4MzMsCisweDAwLCAweEUxLCAweDAyLCAweEI0LCAweDA3LCAweDkwLCAweDI2LCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OSwgMHgwMCwgMHhGNywgMHgwOSwgMHg5QywgMHgwNiwKKzB4QjAsIDB4MUUsIDB4QzAsIDB4N0YsIDB4NDUsIDB4RTIsIDB4MTUsIDB4QUMsIDB4MDcsIDB4RjAsIDB4MUEsIDB4QzAsIDB4NkIsCisweDIwLCAweEJGLCAweDAxLCAweDhDLCAweDA2LCAweEEwLCAweDFBLCAweEMwLCAweDdCLCAweDA1LCAweEEzLCAweDAxLCAweEZDLAorMHgwNywgMHhCMCwgMHgxRSwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QjgsIDB4MzEsIDB4MDAsIDB4REYsIDB4MEMsIDB4NUMsIDB4MDIsIDB4RjEsIDB4MDEsIDB4QzAsIDB4QjcsCisweDAxLCAweERGLCAweDg2LCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEUwLCAweDI2LCAweDAwLCAweDFGLCAweDAwLCAweDNDLAorMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMSwgMHhERiwgMHg4MCwgMHg3QywgMHgwMiwgMHg3MiwgMHgwNSwgMHhDMCwKKzB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4N0QsCisweDAwLCAweEZGLCAweDAxLCAweERFLCAweDI3LCAweDcwLCAweDlCLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDIxLCAweERDLAorMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg2RiwgMHgwMCwgMHg3QiwgMHgwOSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4N0MsIDB4MjYsIDB4QkYsIDB4ODEsIDB4RkMsIDB4MjcsIDB4MzEsIDB4OUYsIDB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweDg0LAorMHgwMiwgMHhDMCwgMHgyMiwgMHg0MiwgMHgzQiwgMHgwMCwgMHhFOSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhEMCwgMHgyMiwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4MTksIDB4MDEsIDB4OTQsIDB4MEEsIDB4NTAsIDB4MDYsIDB4NDAsIDB4NzksIDB4MEEsIDB4RUQsIDB4MDAsCisweEI0LCAweDMzLCAweDMwLCAweDIyLCAweDQwLCAweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHg4MiwgMHg1MCwgMHgwMiwgMHgwMCwKKzB4M0IsIDB4MDAsIDB4RUQsIDB4MDgsIDB4OTQsIDB4MDMsIDB4RDEsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4MzksIDB4MTAsCisweDI0LCAweDAzLCAweEQwLCAweDA0LCAweDQwLCAweDM4LCAweDAwLCAweEFELCAweDAwLCAweEI0LCAweDA5LCAweDEyLCAweDBFLAorMHg2MCwgMHg2MSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwKKzB4MjEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4RjMsIDB4MDAsIDB4Q0QsIDB4MDIsCisweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQ4LCAweDczLCAweDg0LCAweDA5LCAweDAxLCAweDM0LCAweDAzLCAweEQwLCAweDA0LAorMHg2NCwgMHgzMSwgMHg4MiwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg0MCwgMHgwOSwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MTAsIDB4RkYsIDB4MDAsCisweDU0LCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDNGLCAweDAzLCAweEZGLCAweDAxLCAweDVDLCAweDAzLCAweEYwLCAweDA5LAorMHhDOCwgMHhBNywgMHgwMSwgMHg5QiwgMHgwMSwgMHg2NCwgMHgwMiwgMHhCMCwgMHgwRCwgMHhDQywgMHhGQywgMHgxMiwgMHg5RCwKKzB4MEEsIDB4N0MsIDB4OTAsIDB4MzMsIDB4MTksIDB4QzIsIDB4NzUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDBELCAweDAwLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDI5LAorMHhDMCwgMHgzNywgMHgwOCwgMHhEQiwgMHgxOCwgMHg3RSwgMHgwMiwgMHhGMiwgMHgwMSwgMHg0MCwgMHgzNywgMHgwMCwgMHgxRSwKKzB4MDAsIDB4NUMsIDB4MEEsIDB4MzgsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4NzQsCisweDgxLCAweDUwLCAweDE2LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLAorMHgwOCwgMHgzRiwgMHgxMCwgMHhERiwgMHgwMCwgMHhGQywgMHgwQiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhERiwKKzB4MDAsIDB4RkMsIDB4MDcsIDB4RjEsIDB4MEEsIDB4QzAsIDB4MkMsIDB4NDAsIDB4MzIsIDB4MDEsIDB4RkMsIDB4MDIsIDB4RjIsCisweDFBLCAweDgwLCAweDNDLCAweDAwLCAweEIzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMxLCAweDA3LCAweDI2LAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NjQsIDB4MDcsIDB4RDAsIDB4MTksIDB4NDIsIDB4MzMsIDB4MDAsIDB4RDEsIDB4ODAsIDB4NzQsIDB4MDcsIDB4RDAsCisweDM5LCAweDQwLCAweDAwLCAweDAwLCAweDExLCAweDA3LCAweDc0LCAweDAwLCAweEQwLCAweDE5LCAweEMwLCAweDM3LCAweDAwLAorMHg5QiwgMHgxOCwgMHg2NCwgMHgwQywgMHhEMCwgMHgzMSwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDgsCisweDE5LCAweDQwLCAweDM3LCAweDAwLCAweEQ5LCAweDAwLCAweDc0LCAweDEzLCAweEQwLCAweDExLCAweDQwLCAweEE2LCAweDAwLAorMHgzNSwgMHgwOCwgMHg3NCwgMHgwMywgMHhDOCwgMHg0OSwgMHg0NiwgMHgzOSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg2MCwgMHgwNCwKKzB4RDAsIDB4MTksIDB4NDAsIDB4MDcsIDB4MDgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDAyLCAweEQ4LCAweDA4LCAweDQwLCAweDM3LCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHg4MiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MDAsIDB4NDAsIDB4MzIsIDB4MDEsIDB4QzksIDB4QTAsIDB4MjQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDk4LCAweDM2LCAweDAwLAorMHhGRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDEsIDB4MDEsIDB4QzAsIDB4MjQsIDB4MDAsIDB4MTcsIDB4MDQsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4M0QsCisweDA1LCAweDEzLCAweDQwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMyLCAweDA3LCAweDY0LCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHgwMiwKKzB4RjAsIDB4MDMsIDB4Q0MsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RjgsIDB4MDIsIDB4RjIsIDB4MDMsIDB4ODgsIDB4MUYsCisweDAwLCAweDFCLCAweDE2LCAweEZDLCAweDAxLCAweEYwLCAweDAzLCAweEMwLCAweDM3LCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QUEsIDB4N0IsIDB4MTIsIDB4RUYsIDB4MDksIDB4RUMsIDB4MDcsIDB4QjAsIDB4OUUsIDB4QzAsIDB4N0EsCisweDAwLCAweEY3LCAweDA5LCAweEVDLCAweDA3LCAweEYwLCAweDNGLCAweEMwLCAweDdCLCAweDAwLCAweEY3LCAweDI5LCAweENDLAorMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHhBNywgMHhCMCwgMHgxRiwgMHhDMCwKKzB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsIDB4MDcsCisweDAwLCAweDFELCAweDQ0LCAweDQ0LCAweDA0LCAweDMyLCAweDAxLCAweDQwLCAweDQ0LCAweDIwLCAweDExLCAweDA0LCAweDRDLAorMHgxMCwgMHgxMCwgMHgwMSwgMHhDMCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgxMCwgMHhEMCwgMHgwMSwgMHg0MCwKKzB4NDQsIDB4MTAsIDB4MTEsIDB4MjAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MTEsIDB4QzAsIDB4MEUsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDMzLCAweDExLCAweERELCAweDAwLCAweDI0LAorMHgwMywgMHg5MSwgMHg0RCwgMHg0MiwgMHgzMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHg0MywgMHhEMCwgMHg0QywgMHg0MCwKKzB4MzIsIDB4MDAsIDB4QzUsIDB4NDQsIDB4MTQsIDB4NDMsIDB4RDAsIDB4MEMsIDB4NjIsIDB4MzIsIDB4MDAsIDB4QzEsIDB4ODAsCisweDM0LCAweDEzLCAweDkwLCAweDBELCAweDQyLCAweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg1NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwKKzB4MDUsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsCisweDU0LCAweDAwLCAweERBLCAweDAxLCAweDQ0LCAweDA0LCAweDQwLCAweDExLCAweDAwLCAweDM0LCAweDAwLCAweDExLCAweDAxLAorMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwKKzB4MzcsIDB4MDgsIDB4REYsIDB4ODAsIDB4NkMsIDB4ODMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweEQ3LCAweDAwLCAweDVDLCAweDAzLCAweEUwLCAweDBELAorMHhDMCwgMHgzMiwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhCMSwgMHgwQywgMHhDMCwgMHgyMSwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsCisweEVDLCAweDAwLCAweDcwLCAweDAzLCAweEM4LCAweDBFLCAweDIwLCAweDNFLCAweDAwLCAweENDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgwQywgMHgwOCwgMHgzQiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RTQsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDAwLCAweDM1LCAweDIwLCAweEQ3LCAweEM4LCAweDVDLCAweDgzLCAweEMwLCAweDBELAorMHhDMCwgMHgzNSwgMHgwMSwgMHhENywgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhENywKKzB4MDAsIDB4N0MsIDB4MTMsIDB4MzAsIDB4NEQsIDB4QzQsIDB4MzYsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEQwLCAweDI4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHhBMCwgMHhDNCwgMHgwMCwgMHgwMSwgMHg4MywgMHgwNCwgMHgwNCwgMHgxMCwgMHhFMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MTEsIDB4MDAsIDB4NzQsIDB4NDgsIDB4QjAsCisweDUwLCAweDQwLCAweEM3LCAweDAwLCAweDExLCAweDAwLCAweDcwLCAweDI0LCAweEQxLCAweDAxLCAweDQwLCAweDRELCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgyMCwgMHhCMCwgMHgwNCwgMHhDNSwKKzB4NTMsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDIsIDB4MzEsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsCisweDBELCAweDAwLCAweDMyLCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDBGLCAweDkyLCAweDNDLCAweDQ0LCAweEIyLCAweDA5LAorMHhDNSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4MDgsIDB4NEMsIDB4MDYsIDB4MzEsIDB4MDEsIDB4QzQsIDB4MDQsIDB4MTEsCisweDEzLCAweDQwLCAweDQ4LCAweDA4LCAweDI1LCAweDAxLCAweDg0LCAweDA0LCAweEQwLCAweDEyLCAweDQwLCAweDRCLCAweDAwLAorMHgyMSwgMHgwMSwgMHhGNCwgMHgwNCwgMHhEMiwgMHg5MiwgMHg0MCwgMHg0QiwgMHgwQywgMHgyMSwgMHgwMSwgMHhCNCwgMHgxNCwKKzB4RDAsIDB4OTIsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDEwLCAweDMwLCAweDAwLCAweEM3LCAweDA4LCAweDFDLCAweDYzLCAweDcyLCAweDBDLCAweEMwLCAweDMxLCAweDAyLAorMHhENSwgMHgwMCwgMHgxQywgMHgxMywgMHhGMCwgMHg0QywgMHhDMCwgMHgzMiwgMHgwMSwgMHhDNywgMHgyOCwgMHgzQywgMHgyMywKKzB4QjAsIDB4OEMsIDB4QzAsIDB4MzIsIDB4MDAsIDB4QzYsIDB4MDAsIDB4M0MsIDB4NjMsIDB4RjIsIDB4OEMsIDB4QzAsIDB4NEEsCisweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDBELCAweDAwLAorMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwQSwgMHgzQiwgMHgwOCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDgsIDB4QkMsIDB4QTAsIDB4QTAsIDB4ODEsIDB4QzAsIDB4MEIsCisweDEwLCAweDFGLCAweDAwLCAweEZDLCAweDMwLCAweEYwLCAweDkwLCAweEMwLCAweDA5LCAweDYwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwMCwgMHg3RSwgMHgwMywKKzB4NzAsIDB4MEQsIDB4ODAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzAsCisweDAwLCAweERBLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4ODAsIDB4MEQsIDB4MDgsIDB4MjAsIDB4MDAsIDB4QjIsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDAsIDB4MEIsCisweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweDUwLCAweDAyLCAweEMwLCAweDA5LCAweDAwLCAweDIxLCAweEEwLCAweEI0LAorMHgwMCwgMHhEMCwgMHgwMiwgMHhDNCwgMHgwQSwgMHgwMCwgMHgyQiwgMHg4MCwgMHhCNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhDMCwKKzB4NEUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NzksCisweDIwLCAweEU5LCAweDAxLCAweDk0LCAweDg3LCAweEQwLCAweDFFLCAweDYwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEY0LAorMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFOSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwKKzB4N0UsIDB4MDAsIDB4RTksIDB4MjEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDAyLCAweDAwLCAweDA5LCAweDAwLCAweDM0LAorMHgwMCwgMHhEMiwgMHgwMSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4MDEsIDB4ODAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4ODAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MDAsCisweDM2LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDVBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxMSwgMHgwMCwgMHg1QiwgMHgwMCwgMHg3OCwgMHgwMSwgMHg3MCwgMHgwNSwgMHhFMCwKKzB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0UsIDB4MDEsIDB4QjEsIDB4MDQsIDB4QzAsIDB4MTYsIDB4MDAsIDB4NUIsIDB4MjAsCisweDVDLCAweDAxLCAweEYwLCAweDA1LCAweEM0LCAweDE0LCAweDAwLCAweDVCLCAweDIwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LAorMHhDMCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwKKzB4OEYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4RTAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZBLCAweDAwLCAweDcwLCAweDIzLCAweEMwLCAweDBGLCAweDAwLCAweDMzLCAweDAwLCAweEY0LCAweDA4LCAweEYwLCAweDIzLAorMHhDMCwgMHg4RiwgMHgwMCwgMHgzRiwgMHg0MCwgMHhGNCwgMHgwOCwgMHhGMCwgMHgwMywgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDEsIDB4OTcsIDB4MDAsCisweDdDLCAweDE2LCAweDUwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweEEwLCAweDdDLCAweDAyLCAweDMzLCAweDA5LAorMHhDMiwgMHgyNSwgMHgyMCwgMHg5MywgMHg0MCwgMHg3NCwgMHgwMiwgMHgwMiwgMHgwOSwgMHg1NCwgMHhBNCwgMHgwMCwgMHg5NywKKzB4MDAsIDB4N0MsIDB4MDYsIDB4MzIsIDB4MjksIDB4QzIsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEU2LCAweDAwLCAweDkxLCAweDA1LCAweDM0LCAweDg2LCAweDEwLCAweDM5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHgxMCwgMHhBMCwgMHgwNCwgMHg5MSwKKzB4MDAsIDB4MzQsIDB4MDYsIDB4QjIsIDB4MjgsIDB4NDAsIDB4RTAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4MzAsIDB4MDYsIDB4NTEsCisweDA4LCAweDQwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNCwgMHgwMCwgMHhCNSwgMHgwNCwgMHhGNCwgMHgwMiwgMHg1MCwgMHg2QiwgMHg0MCwgMHgyRCwgMHgwMCwgMHhCRCwKKzB4ODAsIDB4RDQsIDB4ODIsIDB4MTgsIDB4MEIsIDB4NDEsIDB4MkMsIDB4QzAsIDB4QjEsIDB4MDAsIDB4RDQsIDB4MTIsIDB4MTAsCisweDJCLCAweDQwLCAweDJELCAweDkwLCAweEIwLCAweDgwLCAweEY0LCAweDIyLCAweDEyLCAweDBCLCAweDQyLCAweDYwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzRCwgMHgwMCwgMHhBMSwKKzB4MDAsIDB4RjQsIDB4MDIsIDB4NTAsIDB4MEEsIDB4NDAsIDB4MjgsIDB4MjAsIDB4QUMsIDB4MjgsIDB4QjQsIDB4MjIsIDB4NTAsCisweDBBLCAweDQwLCAweDI4LCAweDAwLCAweEExLCAweEM4LCAweEY0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDJELCAweDAwLAorMHhBNCwgMHgwMCwgMHhGNCwgMHgyMywgMHg1MCwgMHgwRSwgMHg0MCwgMHg0MSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzgsIDB4MDYsIDB4MDAsIDB4MTcsIDB4ODAsIDB4N0MsIDB4MDAsIDB4NzAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFDLCAweDAyLCAweDdDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLAorMHgxMywgMHgwMiwgMHg1QywgMHgwMCwgMHgzMiwgMHhBMSwgMHhDMCwgMHgxNSwgMHgwMCwgMHgxNywgMHgwQSwgMHgzOCwgMHgwOCwKKzB4MzAsIDB4MDMsIDB4QzgsIDB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEIwLCAweDI1LCAweDA1LCAweDlGLCAweDM0LCAweDdDLCAweDAyLCAweEIwLCAweDQ5LCAweEMxLCAweDI3LCAweDAwLAorMHg5RiwgMHgwNCwgMHgyQywgMHgxMiwgMHhGMCwgMHg0OCwgMHhDOSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHg1MiwKKzB4QjAsIDB4MTksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NzcsCisweDQwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDgwLCAweDJGLCAweDAwLAorMHhCRiwgMHgwOCwgMHhEQywgMHgwMiwgMHhGOCwgMHgwQiwgMHhDMiwgMHgyRiwgMHgwMCwgMHg4RiwgMHgwMiwgMHg3QywgMHgwMiwKKzB4MzQsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4OTMsIDB4MDAsIDB4RkMsIDB4MEEsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkMsCisweDQwLCAweDgzLCAweDAwLCAweENDLCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg0NywgMHgwMSwgMHgxRCwgMHgyNSwgMHg0NCwgMHgwMCwKKzB4RDEsIDB4NDEsIDB4NDEsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDQsIDB4NzQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MDUsCisweDA4LCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEIwLCAweDAxLCAweDQyLCAweDA0LCAweDAwLCAweDExLCAweDQwLCAweDQ0LAorMHgwMCwgMHgxMSwgMHgwMSwgMHg0MCwgMHg2MSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MzEsIDB4MTUsIDB4OEQsIDB4NDQsIDB4MTAsIDB4MDIsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MjMsCisweDAwLCAweDhELCAweDA0LCAweDM0LCAweDQyLCAweDEwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDE0LCAweDM0LAorMHgwMiwgMHgxMCwgMHgwOCwgMHg1MCwgMHgyMCwgMHg4MCwgMHg4MSwgMHgyMCwgMHgxNSwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MkEsIDB4MjUsCisweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgwMiwgMHgxMSwgMHgwOSwgMHg0MCwgMHgyNSwgMHgyMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg2MCwKKzB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjEsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIyLCAweDI1LCAweDEwLCAweDlGLCAweDAwLCAweDVDLAorMHgwMiwgMHhEMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4MjAsIDB4MDgsIDB4OTMsIDB4ODAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjAsIDB4MDAsIDB4OTMsIDB4MDAsCisweDVDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDE0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMxLCAweDI3LCAweDA0LCAweDlGLCAweDAwLCAweDZDLCAweDQyLCAweDMwLCAweDA5LAorMHg0MCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MDUsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzQsIDB4MDcsIDB4MDEsIDB4MTcsIDB4MDAsCisweDRDLCAweDAwLCAweDcwLCAweDAxLCAweEMzLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDQwLCAweEIwLCAweDAxLAorMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMSwgMHg1MSwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MUMsIDB4MDIsIDB4N0QsIDB4RDgsCisweDQ0LCAweDAxLCAweDcwLCAweDI3LCAweDQwLCAweDlGLCAweDAwLCAweDUxLCAweDIwLCAweDZDLCAweDAxLCAweEQwLCAweDc2LAorMHg0MiwgMHhERiwgMHgwMCwgMHg1RCwgMHg0MCwgMHhFQywgMHgwRCwgMHgxMSwgMHgyNywgMHg0MCwgMHgxQywgMHgwMCwgMHg1OSwKKzB4MDAsIDB4RDQsIDB4MDEsIDB4MTQsIDB4MDYsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDMyLCAweDAwLCAweEQ1LCAweDQwLCAweDA0LCAweDI2LCAweEQwLCAweDBDLAorMHg0MCwgMHhBMywgMHgwMCwgMHhDNSwgMHgwMCwgMHg0NCwgMHgwMywgMHg1OCwgMHgwQywgMHg0OCwgMHhGMywgMHgwMywgMHhDRCwKKzB4MDAsIDB4NDYsIDB4MDcsIDB4OTAsIDB4MkMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDAsIDB4MEYsIDB4MDAsCisweDNDLCAweDQwLCAweDQwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHgzOCwgMHgyMCwgMHhFRCwgMHg0MCwgMHg4NSwgMHgwMywgMHg1OCwgMHgwRSwgMHg2OCwgMHhFRiwgMHgwMCwgMHhGNSwKKzB4MDksIDB4QTQsIDB4MjMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RkQsIDB4NDUsIDB4QTQsIDB4MEIsIDB4MTAsCisweDAyLCAweDQxLCAweDJBLCAweDA0LCAweEY5LCAweDA0LCAweDk2LCAweDBCLCAweDEyLCAweDBFLCAweDQ1LCAweDEwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg1OSwgMHgwMCwgMHg3NywKKzB4MDEsIDB4OEMsIDB4MDcsIDB4RjEsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RTcsIDB4MTUsIDB4OEMsIDB4MDcsIDB4NzAsCisweDE2LCAweDgwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLCAweERDLCAweDA1LCAweEIwLCAweDFFLCAweEQwLCAweDVBLCAweDA4LAorMHhFRiwgMHgwNywgMHhDQywgMHgwNiwgMHgzMCwgMHgxRSwgMHhDMCwgMHg1MSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4NDAsIDB4N0MsIDB4ODMsIDB4RjAsCisweDBELCAweEMwLCAweDIzLCAweDAwLCAweERCLCAweDA2LCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLAorMHhDRiwgMHgwOCwgMHg3RSwgMHg4MywgMHhGMCwgMHg2MCwgMHhENSwgMHgxNSwgMHgyMCwgMHhEQiwgMHgwNiwgMHg3QywgMHgwMiwKKzB4RDAsIDB4MEMsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDIwLCAweDdELCAweDBBLCAweEZGLCAweDAxLCAweERDLCAweEE3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLAorMHhFNywgMHgwMSwgMHg4QywgMHgwRiwgMHhCMCwgMHgxMywgMHhDOCwgMHg3QiwgMHgwMCwgMHhGMywgMHgwMywgMHhDQywgMHgwNywKKzB4MzAsIDB4MUIsIDB4RDAsIDB4NzgsIDB4QTIsIDB4RkIsIDB4MDMsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUEsIDB4QzAsIDB4MTgsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLAorMHhFQywgMHgxOCwgMHhCNCwgMHg4MywgMHhEMCwgMHgwRSwgMHg0MiwgMHgzQiwgMHgyOCwgMHhFMSwgMHgxMCwgMHg5NCwgMHgwMywKKzB4NTAsIDB4MjIsIDB4NDQsIDB4M0IsIDB4MDYsIDB4RTUsIDB4MDAsIDB4RDQsIDB4MDMsIDB4NTAsIDB4NDMsIDB4NDAsIDB4MjgsCisweDAyLCAweEUxLCAweDA0LCAweDg0LCAweDEzLCAweDcxLCAweDRBLCAweDQ4LCAweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgzOSwgMHgxMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywKKzB4QzAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDQsIDB4RjUsIDB4MDAsIDB4RTQsIDB4NDMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4M0YsCisweDAwLCAweEZELCAweDAwLCAweEQ0LCAweDAxLCAweDUwLCAweDBBLCAweDYxLCAweDE4LCAweDg0LCAweEUxLCAweEIwLCAweDg0LAorMHg0MiwgMHhEMiwgMHgwQSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MjgsIDB4NjUsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzYsIDB4MTMsIDB4RDAsIDB4MzksIDB4NDAsIDB4RjMsCisweDAwLCAweEM1LCAweDAzLCAweDM0LCAweDBCLCAweDUwLCAweEEwLCAweDQwLCAweEYzLCAweDAwLCAweERELCAweDAyLCAweDE0LAorMHgyQSwgMHg1MCwgMHgzOCwgMHg2MiwgMHg0MCwgMHgwNCwgMHhDOSwgMHg1MywgMHgwNSwgMHgwNCwgMHg1MCwgMHgyOCwgMHg0MCwKKzB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4RTUsCisweDEwLCAweDlGLCAweDAxLCAweDVDLCAweDQzLCAweEQwLCAweEExLCAweEM0LCAweDA3LCAweDAyLCAweEY3LCAweDAxLCAweEVDLAorMHgwNywgMHgzMCwgMHhCMSwgMHhDOCwgMHhCNywgMHgwMCwgMHhGRiwgMHgwMSwgMHg1RSwgMHgwRSwgMHgxMCwgMHg5OSwgMHhDNCwKKzB4NDQsIDB4MDAsIDB4RUIsIDB4MDAsIDB4MEMsIDB4ODEsIDB4RjMsIDB4M0QsIDB4QzYsIDB4NTQsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDA2LCAweDlGLCAweDA0LCAweDdDLAorMHgwMywgMHhGMCwgMHg4MSwgMHhDMCwgMHhBNywgMHgxMCwgMHhEQSwgMHgwMCwgMHg1QywgMHg0MywgMHg3OCwgMHgyMSwgMHg4MCwKKzB4MzcsIDB4MEMsIDB4RDcsIDB4QjgsIDB4NzgsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4NDAsIDB4RDcsIDB4MDAsCisweDdDLCAweDgxLCAweDcwLCAweEFELCAweEMxLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgwRiwgMHgwMCwgMHgzQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MEUsIDB4MDAsIDB4RjMsIDB4MTAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MDMsIDB4NDAsIDB4M0UsIDB4MDAsIDB4RjMsIDB4MDAsCisweEZDLCAweDQwLCAweEYwLCAweDBCLCAweEMwLCAweDBDLCAweDAwLCAweEY3LCAweDAwLCAweEQ0LCAweDU0LCAweDMwLCAweDBGLAorMHhDMCwgMHgwNCwgMHgyOCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwKKzB4QzYsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDAsIDB4NjAsIDB4MDEsIDB4REIsIDB4MDAsCisweDU0LCAweDAzLCAweEQwLCAweDExLCAweDQwLCAweEQzLCAweDAwLCAweERCLCAweDAwLCAweDQ0LCAweDBDLCAweEQwLCAweDE4LAorMHhDMCwgMHg4MywgMHgyMCwgMHhEMSwgMHgwMCwgMHg1NCwgMHg4OSwgMHg1MSwgMHg0QywgMHg1MCwgMHg4NCwgMHgwNCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4QzYsIDB4MDAsIDB4MTksIDB4MDMsCisweDc0LCAweDEzLCAweEQ4LCAweDMxLCAweDQwLCAweDY2LCAweDAwLCAweEMxLCAweDgwLCAweDQ0LCAweDAzLCAweEQwLCAweDExLAorMHg0MCwgMHg2NiwgMHgwNCwgMHhEMSwgMHgwMCwgMHg0NCwgMHhDNiwgMHg5MCwgMHgxQiwgMHg0MCwgMHgwNCwgMHgwNiwgMHhGNSwKKzB4MDAsIDB4NDAsIDB4MDksIDB4NTAsIDB4NDUsIDB4NDgsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDgzLCAweEQwLCAweDAwLAorMHg0MCwgMHgyNCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgyNywgMHgwMCwgMHhDOSwKKzB4MDAsIDB4MDQsIDB4ODIsIDB4QzIsIDB4MTksIDB4NDAsIDB4MDIsIDB4QTAsIDB4RDEsIDB4NDAsIDB4NTQsIDB4MDIsIDB4NTAsCisweDA0LCAweDQyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgxOCwgMHgwNiwgMHgxMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMywgMHhEQSwgMHgwMSwgMHhDMCwgMHgyNiwgMHgwMCwgMHhGMywKKzB4MDAsIDB4QzQsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MjYsIDB4MDAsIDB4RjMsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjAsCisweDBCLCAweEMwLCAweDA0LCAweDAwLCAweEU3LCAweDAwLCAweDVDLCAweDAwLCAweDMwLCAweDA5LCAweEQwLCAweDA0LCAweDYwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RTAsCisweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAyLCAweEYxLCAweDBCLCAweEMyLCAweDBGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDNCwgMHgxNywgMHg2MiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NkYsIDB4MDAsIDB4QkYsIDB4MTAsIDB4RkMsIDB4MDUsIDB4MzAsCisweDE2LCAweEM4LCAweDNGLCAweDEwLCAweEZGLCAweDE0LCAweEZDLCAweDAwLCAweDMwLCAweDE3LCAweEMwLCAweDJDLCAweDAwLAorMHg2MywgMHgwMSwgMHhGQywgMHgwRiwgMHgzMCwgMHg0QiwgMHhDMCwgMHg1RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhCQywgMHgwMiwKKzB4QjAsIDB4MUYsIDB4QzgsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDY3LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDA1LCAweDAwLCAweDE5LCAweDQwLCAweEZGLCAweDMwLAorMHhGRCwgMHgwMywgMHg3NCwgMHgwRCwgMHgxMCwgMHgxRCwgMHg0MiwgMHhFNCwgMHgwMCwgMHg5NSwgMHgwMSwgMHhGNCwgMHgxMywKKzB4MTIsIDB4MTksIDB4NDAsIDB4NzcsIDB4MDAsIDB4RjEsIDB4NDEsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MTEsIDB4NDAsIDB4MEYsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLAorMHg4RCwgMHg0MCwgMHg3NCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg0MCwgMHhCMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MTQsIDB4MEQsIDB4NDgsIDB4QjAsIDB4MTAsIDB4ODQsIDB4MDAsIDB4MzQsIDB4MTMsIDB4MTAsIDB4OEMsIDB4NDAsIDB4MjMsCisweDAwLCAweEMxLCAweDAwLCAweDU0LCAweDAyLCAweDkwLCAweDBDLCAweDQwLCAweDRGLCAweDgwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwgMHgzNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgxMCwKKzB4MTgsIDB4MDksIDB4NDAsIDB4MzcsIDB4MjAsIDB4REQsIDB4MDAsIDB4NzYsIDB4MjMsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzAsCisweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDA0LCAweDIzLCAweDAwLCAweEQxLCAweDQwLCAweDc0LAorMHgwNiwgMHg1MCwgMHgwRCwgMHg0MiwgMHgwRiwgMHhBMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTAsIDB4NzcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4M0MsIDB4MDksIDB4MzAsIDB4MEQsIDB4QzIsIDB4MzcsCisweDAwLCAweERGLCAweDYwLCAweDVDLCAweDEzLCAweDMxLCAweDA4LCAweEM4LCAweDY0LCAweDAyLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHhENywgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgxNywgMHhCMiwgMHg2RCwgMHhDMCwKKzB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4M0QsCisweDIxLCAweDlGLCAweDA0LCAweEZDLCAweDQ1LCAweEY0LCAweDBCLCAweEMyLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgyQiwgMHhEMCwgMHgzRiwgMHg0MCwgMHhGRCwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4N0YsIDB4MDEsIDB4RkYsIDB4ODAsIDB4RkMsIDB4MDMsIDB4RjEsIDB4MjMsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAxLCAweDlGLCAweDAwLCAweDVDLAorMHgwOSwgMHhCOCwgMHgwRCwgMHhDMSwgMHgzNCwgMHgwMCwgMHhEQiwgMHg1MCwgMHg3QywgMHgwMSwgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MjcsIDB4ODAsIDB4OUUsIDB4MDQsIDB4MEMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzQsIDB4QjcsIDB4MDgsIDB4REYsIDB4NDAsCisweDdDLCAweDEzLCAweDMyLCAweDBELCAweEMyLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwRCwgMHhGMCwgMHgyOSwgMHg0MCwKKzB4M0MsIDB4MDAsIDB4RkQsIDB4MDEsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4ODAsIDB4OUYsIDB4MTIsCisweDQ0LCAweDJCLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDExLCAweDM0LCAweDAzLCAweEIwLCAweDFELAorMHg0MSwgMHg2RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwKKzB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MEMsIDB4RDAsIDB4QjQsIDB4NTAsIDB4NzAsIDB4MDEsIDB4Q0QsIDB4MDIsCisweDIwLCAweDEwLCAweDkyLCAweDAwLCAweDRDLCAweDIzLCAweDAwLCAweDRELCAweDAxLCAweDI0LCAweDIzLCAweEQwLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgxQywgMHgwQywgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsCisweDg0LCAweDQ0LCAweDUwLCAweDFCLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweDM0LCAweDA2LCAweDEwLCAweDFBLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhCNSwgMHgwOSwgMHhBNiwgMHg5NywgMHhEMCwgMHgxQSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4RjQsIDB4ODYsIDB4OTAsIDB4MTIsIDB4NDAsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDMwLCAweDA0LCAweENGLCAweDA4LCAweDFDLCAweDAwLCAweERBLCAweDA4LAorMHhDOCwgMHgzMCwgMHgxNCwgMHhDQiwgMHgxMCwgMHgyQywgMHgyMCwgMHhCMCwgMHg0OCwgMHhDMCwgMHgyMywgMHgwMiwgMHg4RCwKKzB4MDAsIDB4MkMsIDB4MjMsIDB4RjAsIDB4OEMsIDB4NDAsIDB4QTMsIDB4MDAsIDB4Q0YsIDB4OEMsIDB4M0UsIDB4MDAsIDB4MzAsCisweDBDLCAweEMwLCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgzOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwKKzB4MTIsIDB4RjQsIDB4MjMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REQsIDB4MzcsIDB4RjAsCisweDBGLCAweDAwLCAweDJGLCAweDAwLCAweERGLCAweDI5LCAweDdFLCAweDIyLCAweEY0LCAweDBGLCAweEMwLCAweDBCLCAweDYwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMywgMHgwMCwgMHhEMywKKzB4NDgsIDB4N0MsIDB4MDAsIDB4NjAsIDB4MEMsIDB4QzAsIDB4QjQsIDB4MDQsIDB4REYsIDB4MDQsIDB4NUMsIDB4MDAsIDB4RjAsCisweDA5LCAweEMwLCAweDI0LCAweDAwLCAweEQ3LCAweDAxLCAweDZDLCAweDI3LCAweDMwLCAweDBELCAweEMwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MzksIDB4MDAsIDB4RTEsIDB4QzAsIDB4QjQsIDB4MDAsIDB4RDAsCisweDBBLCAweDQ0LCAweDM4LCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDAyLCAweEQwLCAweDBBLCAweDQwLCAweDM4LCAweDAwLAorMHhFRCwgMHgwMCwgMHgwNCwgMHgxMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMiwKKzB4NTAsIDB4MDIsIDB4NDAsIDB4NEMsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDc5LCAweDEwLCAweEUxLCAweDA1LCAweEI0LCAweDQ0LCAweEQ4LCAweDFGLCAweDUxLCAweDc4LCAweDEzLAorMHhFOSwgMHgwNSwgMHg5NCwgMHgyNSwgMHhEMCwgMHgzQSwgMHg0MCwgMHhFOCwgMHgwMiwgMHhBRCwgMHgwMSwgMHhBNCwgMHgwNywKKzB4OTAsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDQsIDB4RUQsIDB4MDksIDB4RjQsIDB4MEMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MTAsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDAwLAorMHhDMSwgMHgwMSwgMHgzNCwgMHgxNiwgMHhEMCwgMHgzOCwgMHg0MCwgMHgzMCwgMHgxMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNywKKzB4RDAsIDB4MTgsIDB4NDEsIDB4NzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4OUMsIDB4NDAsIDB4NjMsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDA2LCAweDUwLCAweDhDLCAweDQwLCAweDU4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHgxNSwgMHgwMCwgMHg0MywgMHgxMSwgMHhGQywgMHgwNSwKKzB4RjAsIDB4MzYsIDB4QzAsIDB4MTQsIDB4MjAsIDB4NEYsIDB4MDAsIDB4REMsIDB4MTUsIDB4RjEsIDB4MjcsIDB4RDQsIDB4MTQsCisweDAwLCAweDc3LCAweDFCLCAweDZDLCAweDAxLCAweEI1LCAweDE1LCAweEMwLCAweDFGLCAweDAwLCAweDVGLCAweDAwLCAweEJDLAorMHgwMSwgMHgzNCwgMHgzNywgMHhDNCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDgsIDB4MDUsIDB4NDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsCisweDIwLCAweDFGLCAweDAwLCAweDcwLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwOCwgMHg3MSwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgyMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMSwKKzB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsCisweDAwLCAweDkzLCAweDAwLCAweDQ1LCAweDA2LCAweDUwLCAweDE5LCAweEQxLCAweDI0LCAweDQwLCAweDkzLCAweDA4LCAweDVDLAorMHg0MiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyMiwgMHg0MCwgMHg5MywgMHgwMiwgMHg3QywgMHgxNiwgMHhGMCwgMHgyOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OTMsIDB4ODIsIDB4N0MsIDB4MDYsIDB4MzQsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDIwLCAweDAwLCAweEIxLCAweDAzLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyMCwgMHgxMywgMHg5MSwgMHg0MCwgMHhDNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MkMsIDB4MDAsIDB4OTEsIDB4NDAsIDB4RjQsIDB4MEUsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MjAsIDB4QjEsIDB4ODMsCisweDc0LCAweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0MCwgMHg5MSwgMHgwOCwgMHg1NCwgMHgxQiwgMHhEMCwgMHg2OSwgMHg0MCwKKzB4MjQsIDB4MDAsIDB4OTEsIDB4NTAsIDB4NTAsIDB4MUEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsCisweDc0LCAweDBBLCAweEQ4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDQwLCAweDc0LCAweDUyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjEsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDA0LCAweDAyLCAweEQwLCAweDI4LCAweDQwLCAweEEwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDBBLCAweDgwLCAweDA4LAorMHg0MCwgMHhBNiwgMHgwMCwgMHg4MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDcsIDB4MDAsIDB4NTMsIDB4MDEsCisweDVDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA0LCAweDA1LCAweDEyLCAweDE0LCAweDVDLCAweDA0LCAweEYwLCAweDAwLAorMHhDMCwgMHg0NywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwNCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgwNywgMHg0MCwgMHg1MywKKzB4ODEsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4NzcsIDB4RTAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDJGLCAweDAwLCAweEJGLCAweDAyLCAweEZDLCAweDAyLCAweEYwLCAweDBCLAorMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHg0MCwgMHhGQywgMHgwQSwgMHhGMSwgMHgxQiwgMHhDMCwgMHhFRiwgMHgwMCwgMHhFRiwKKzB4MDAsIDB4N0MsIDB4MEUsIDB4RjAsIDB4MkIsIDB4MDAsIDB4NkUsIDB4MjAsIDB4OUYsIDB4ODIsIDB4QkMsIDB4NUEsIDB4RTAsCisweDBCLCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhBMCwgMHgyOSwgMHgwMCwgMHhCRiwgMHgwMSwgMHhDQywgMHgwMiwgMHgzNCwgMHgwQiwgMHhEMCwgMHgyQywgMHg0MCwgMHhBMywKKzB4MDAsIDB4QkMsIDB4NDYsIDB4QjAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4QkIsIDB4MDAsIDB4QzQsIDB4MTYsIDB4MjQsCisweDVCLCAweEMwLCAweEE3LCAweDEwLCAweEIzLCAweDE1LCAweENELCAweDQyLCAweEIwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRCwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDUsIDB4NDAsIDB4ODUsIDB4MDIsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDgsIDB4MzAsCisweDU1LCAweDQxLCAweEMzLCAweDAxLCAweDExLCAweDAwLCAweDU0LCAweDE0LCAweDEwLCAweDAxLCAweDQwLCAweDQ3LCAweDA4LAorMHgxMSwgMHgwMiwgMHg0NCwgMHgwOCwgMHgxMSwgMHgwMSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjIsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MTQsIDB4MDIsIDB4OTAsCisweDA4LCAweDY4LCAweDIwLCAweDAwLCAweDgxLCAweDAyLCAweDM0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweEEzLCAweDA0LAorMHg5OSwgMHgwMCwgMHgwNCwgMHg0QSwgMHgxMCwgMHgyOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgyMCwgMHgwNCwgMHg1MiwKKzB4OTEsIDB4MDksIDB4NDIsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDY0LCAweDI0LCAweDAwLAorMHg5MCwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxMCwgMHg4OSwgMHg0QywgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MTksIDB4NDAsIDB4NjAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDY1LCAweDAyLAorMHg4RiwgMHgwOSwgMHg1QywgMHgxMiwgMHhCMCwgMHgxOCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHg0QSwKKzB4QjAsIDB4M0IsIDB4QzAsIDB4NkYsIDB4MDAsIDB4OUIsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzAsIDB4RUYsCisweDAxLCAweDkzLCAweDgwLCAweDRDLCAweDAyLCAweEIwLCAweDQ5LCAweEQwLCAweDE0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg2RCwgMHgxMiwKKzB4RjAsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjMsCisweDAxLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDY3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHg3MSwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MTAsIDB4MTMsIDB4MDgsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDUsCisweEMxLCAweDEzLCAweDA4LCAweDFDLCAweDEwLCAweDM0LCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLAorMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHgzMSwgMHgwMSwgMHhDMCwKKzB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4REMsCisweDA2LCAweDcxLCAweDAwLCAweEIwLCAweDFELCAweDUwLCAweDA3LCAweDQyLCAweDFCLCAweDgwLCAweDcxLCAweDAxLCAweEM0LAorMHgwRCwgMHgxMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3MSwgMHgwMiwgMHhGNCwgMHg2MSwgMHhCMCwgMHgwNSwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4NkQsIDB4MDAsIDB4RjQsIDB4MDEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEUyLCAweDAwLCAweDgxLCAweDEwLCAweDM0LAorMHgxRSwgMHgxOCwgMHgwNCwgMHg0MCwgMHgyMywgMHgxMCwgMHg4NSwgMHg1MSwgMHgxNCwgMHgwRCwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4RDksIDB4MTMsIDB4MzQsIDB4MDYsIDB4MTQsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MTAsCisweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MiwgMHg3QywgMHgwMCwgMHhBMSwgMHgwMCwgMHhGNCwgMHgwMywgMHg1MCwgMHgwNiwgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QTUsIDB4MDEsIDB4ODQsIDB4MDksIDB4MTEsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDMsIDB4RTEsIDB4MDIsCisweEI0LCAweDMzLCAweDkwLCAweDBFLCAweDYxLCAweDNCLCAweDA5LCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweDEwLCAweDBFLAorMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwKKzB4NjgsIDB4MDAsIDB4QTMsIDB4MDEsIDB4QkMsIDB4MDYsIDB4MzAsIDB4MTYsIDB4QzAsIDB4NkIsIDB4MDAsIDB4RTUsIDB4MDEsCisweDlDLCAweDA1LCAweDMwLCAweDNFLCAweEMwLCAweDdCLCAweDAwLCAweEVCLCAweDAxLCAweEJDLCAweDA3LCAweDMwLCAweDFFLAorMHhDMCwgMHhGQiwgMHgwMCwgMHhBRiwgMHgwMSwgMHgzQywgMHgwMSwgMHgzMCwgMHgxQSwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4NDAsIDB4OUQsIDB4MDAsCisweDNDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDI3LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDZELCAweDAwLCAweEJCLCAweDIxLCAweEZDLCAweDA2LCAweEYwLCAweDE3LAorMHhDMCwgMHg2RiwgMHgwMCwgMHhCMywgMHgwMSwgMHhERSwgMHgwNywgMHgzMSwgMHg5RSwgMHhDOCwgMHg3QywgMHgwMCwgMHhBRSwKKzB4MDEsIDB4RUMsIDB4MDcsIDB4RjgsIDB4OUYsIDB4QzAsIDB4NzgsIDB4MDAsIDB4QjMsIDB4NDEsIDB4Q0MsIDB4MDYsIDB4MzAsCisweDFCLCAweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHgxMCwgMHgyOSwgMHgwMCwgMHhBRCwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwOCwgMHhBMSwKKzB4MDAsIDB4ODQsIDB4MTMsIDB4QjAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDIsIDB4ODQsIDB4MDMsIDB4RDAsCisweDBFLCAweEMwLCAweDNBLCAweDAyLCAweEExLCAweDAwLCAweDk0LCAweDAyLCAweEIwLCAweDBFLCAweDQ0LCAweDU0LCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhBRCwKKzB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MjMsIDB4MDAsIDB4QTEsIDB4MDAsIDB4RDQsIDB4MDEsIDB4MTEsCisweDFGLCAweDAwLCAweDc4LCAweDAwLCAweEVELCAweDAwLCAweEE0LCAweDAzLCAweEQwLCAweDBFLCAweDQ0LCAweDdDLCAweDAwLAorMHg4MSwgMHgwMCwgMHg4NCwgMHgwMSwgMHg1MCwgMHgwQiwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDEsIDB4MzQsIDB4NDEsIDB4RDAsCisweDA0LCAweDQwLCAweDAzLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDMzLCAweDkwLCAweDJDLCAweDQxLCAweDMwLCAweDIwLAorMHhDRCwgMHgwQywgMHgwNCwgMHgwMSwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwNCwgMHhDMSwgMHgwMCwgMHg1NCwgMHgwMywKKzB4RDAsIDB4M0MsIDB4NDAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEE4LCAweDI1LCAweDEwLCAweERGLCAweDExLCAweDdDLCAweDhBLCAweEYwLCAweDhELCAweEMxLCAweDI3LCAweDAwLAorMHg5MywgMHgwMCwgMHg1QywgMHgwNSwgMHgzMSwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMSwgMHg0RiwgMHgwMiwgMHg2QywgMHgwMSwKKzB4RjEsIDB4MEMsIDB4QzAsIDB4QjQsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4QUEsIDB4NzAsIDB4MjksIDB4QzAsIDB4NzQsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgyNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg3RSwgMHgwMSwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDksIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDA4LCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDg5LCAweEMwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHg2RiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhEQywgMHgwMiwKKzB4MzQsIDB4MUYsIDB4MDAsIDB4NkYsIDB4MDAsIDB4REYsIDB4MDAsIDB4RUMsIDB4ODksIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweDdGLCAweDAwLCAweENDLCAweDAxLCAweDcwLCAweDRELCAweEQwLCAweDNDLCAweDAwLCAweEJGLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwQiwgMHhDMSwgMHgwNywgMHgyNiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTEsIDB4MjAsIDB4MzYsIDB4MTAsIDB4OUQsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MTAsIDB4ODksIDB4NDMsIDB4MzcsCisweDAwLCAweERELCAweDAwLCAweDQ0LCAweDA1LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAzLCAweDQ0LAorMHgxOSwgMHgxMCwgMHgwRCwgMHg0MiwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMiwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxOSwgMHg0MCwKKzB4MjcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QTYsCisweDAxLCAweERELCAweDA2LCAweDU0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDI3LCAweDAxLCAweDlELCAweDAwLCAweDYwLAorMHgwMywgMHhEMCwgMHgwRCwgMHg0NCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMSwgMHgwNCwgMHg4NSwgMHg1MCwgMHgwRCwgMHg0MCwKKzB4MzQsIDB4MTAsIDB4OUQsIDB4NTAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4NDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweENELCAweDAwLCAweDA0LAorMHgwMywgMHgxMCwgMHgwNCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4ODAsIDB4REQsIDB4QTAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4QzAsCisweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQ0LCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgxOCwgMHgyNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsCisweDRDLCAweDAxLCAweDcwLCAweDA5LCAweDgwLCAweDNDLCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDA5LAorMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwKKzB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsCisweEJDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZELCAweDAxLCAweEQwLCAweDBCLAorMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwgMHgwQSwgMHhDNCwgMHgxNywgMHg2MiwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4QjMsIDB4MEMsCisweERDLCAweDAwLCAweDMwLCAweDRGLCAweEMwLCAweDNDLCAweDAxLCAweEYzLCAweDE4LCAweEZDLCAweDMyLCAweDcwLCAweDE3LAorMHhDMCwgMHg3RiwgMHgwMCwgMHg1QiwgMHgwMSwgMHg4QywgMHgwNiwgMHgzMiwgMHgxQSwgMHhDMiwgMHg3RSwgMHgwMCwgMHgzQiwKKzB4MDgsIDB4Q0QsIDB4MDAsIDB4QjAsIDB4MDMsIDB4QzIsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE4LCAweDM3LCAweDAxLCAweDkxLCAweDhFLCAweDQ0LCAweDI3LCAweDEwLCAweDNGLAorMHg0MCwgMHhCQywgMHg0MCwgMHhGNSwgMHgyNiwgMHg3NCwgMHgzOCwgMHgxMCwgMHgwNSwgMHg0NCwgMHg3NywgMHgwMCwgMHg1MywKKzB4MDEsIDB4NTQsIDB4MDUsIDB4NTIsIDB4MTksIDB4NDAsIDB4NTUsIDB4MDAsIDB4MTEsIDB4MDYsIDB4NDQsIDB4ODIsIDB4MTAsCisweDAxLCAweEMwLCAweDBFLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHhBMCwgMHgzMywgMHgwNCwgMHg4MSwgMHgwMCwgMHg1NCwgMHgwMywgMHgxMCwgMHgyQywgMHg0NCwgMHhCMiwgMHgwNSwgMHhDMSwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4NDQsIDB4NDEsIDB4MzEsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NTQsIDB4MDMsIDB4MTAsCisweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDg5LCAweDAyLCAweDA0LCAweDIxLCAweEQwLCAweDEwLCAweDQyLCAweDRGLCAweDgwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMSwgMHgwMCwgMHg5MSwKKzB4MDEsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4ODQsIDB4MTAsCisweDA1LCAweDQxLCAweDM3LCAweDAxLCAweDUxLCAweDAxLCAweDU0LCAweDA5LCAweDUwLCAweDFELCAweDAwLCAweDM1LCAweDAwLAorMHgxMSwgMHgwMiwgMHg0NCwgMHg4MywgMHg1MSwgMHgxMSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4MzYsIDB4MDAsIDB4MTMsIDB4MDcsIDB4MTAsIDB4MTcsIDB4MzAsCisweDBELCAweEMwLCAweDM2LCAweDA4LCAweEQzLCAweDQwLCAweDdDLCAweDQ0LCAweDUwLCAweEIxLCAweEUwLCAweDM1LCAweDIwLAorMHg1QiwgMHgwNywgMHg1QywgMHgwQiwgMHgzMCwgMHgxOCwgMHg4MCwgMHgzNiwgMHgwMCwgMHgxQiwgMHgwMiwgMHg0QywgMHgyOCwKKzB4RjQsIDB4MTksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDBGLCAweDgwLCAweDNELCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEY0LCAweDBGLCAweEMwLCAweDM5LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgxMywgMHhDMCwgMHg3RiwgMHgwMCwgMHg3OSwgMHgxMCwgMHhGQywgMHgxMywKKzB4RTAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NUYsIDB4MDIsIDB4QkMsIDB4MDQsIDB4QjAsIDB4MDIsIDB4QzAsIDB4MUUsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLAorMHgxRiwgMHgwNCwgMHg0QywgMHgwMywgMHg3MCwgMHgwQywgMHhFMSwgMHgzNSwgMHgwNCwgMHhENywgMHgwOCwgMHg0QywgMHgwMiwKKzB4NzAsIDB4MjUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NTcsIDB4MDIsIDB4NUMsIDB4MEIsIDB4QjAsIDB4NDksIDB4QzAsIDB4MzQsCisweDAwLCAweDVCLCAweDAwLCAweDRDLCAweDQ5LCAweDM0LCAweDA5LCAweEMwLCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQiwgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4MTEsIDB4MUYsIDB4QzQsIDB4RkMsIDB4MDQsIDB4RjEsIDB4MDAsIDB4NDQsIDB4MTAsIDB4MTAsIDB4MDUsIDB4NDAsIDB4NzAsCisweDAwLCAweDRCLCAweDQxLCAweDY4LCAweDJGLCAweEIwLCAweDJELCAweDQwLCAweEIwLCAweDAxLCAweDUxLCAweDAwLCAweDQ0LAorMHg4OSwgMHgwMCwgMHgxOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MjAsIDB4MzIsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MzQsIDB4ODMsIDB4NTAsIDB4MUMsIDB4NDAsIDB4NzMsCisweDgwLCAweEMxLCAweDI2LCAweDY0LCAweDBFLCAweDEwLCAweDAwLCAweDQ4LCAweDMxLCAweDAwLCAweEM1LCAweDAzLCAweDcwLAorMHgwRiwgMHg5MCwgMHgwMCwgMHg0OCwgMHgzMSwgMHgyMSwgMHg1OSwgMHgwRiwgMHgwNCwgMHgyNCwgMHgxMCwgMHgwOCwgMHg2MCwKKzB4MEYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4N0EsCisweDgwLCAweDZELCAweDUxLCAweDk1LCAweDQ3LCAweDEwLCAweDlFLCAweDQxLCAweDcwLCAweDgwLCAweEUxLCAweDgxLCAweEE2LAorMHgwNywgMHgxNCwgMHgxMiwgMHgwMCwgMHg3OCwgMHgwMCwgMHg2OSwgMHgwNSwgMHhCNCwgMHg0NywgMHg5OSwgMHhEQSwgMHg0MCwKKzB4NUQsIDB4MDAsIDB4QTEsIDB4NDksIDB4MDQsIDB4MjYsIDB4MTAsIDB4MzIsIDB4NDEsIDB4MzcsIDB4MjAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMyLCAweDAwLCAweENGLCAweDIwLCAweDFDLAorMHgwMywgMHg1MCwgMHg4QywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgyQywgMHgxMywgMHgzMCwgMHg0MSwgMHhDMCwKKzB4MzMsIDB4MjQsIDB4NDcsIDB4MTUsIDB4M0MsIDB4MDMsIDB4QjAsIDB4NUMsIDB4QzgsIDB4MjEsIDB4MDgsIDB4OEIsIDB4MDUsCisweDBELCAweDA4LCAweDMwLCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgyMCwgMHhGRiwgMHgwMCwgMHhFOCwgMHgwMywgMHhGMCwgMHhBRSwgMHhDMCwKKzB4M0YsIDB4NDAsIDB4RkIsIDB4MDAsIDB4REQsIDB4MDMsIDB4RjEsIDB4MDMsIDB4QzAsIDB4M0IsIDB4MDAsIDB4NDUsIDB4ODAsCisweEVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDNBLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEY0LCAweDhGLAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwKKzB4NzcsIDB4MjAsIDB4NTMsIDB4MjAsIDB4N0UsIDB4ODMsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4MzQsIDB4MTEsIDB4REYsIDB4NDQsCisweDVDLCAweDAxLCAweEYwLCAweDExLCAweEMwLCAweDMyLCAweDAwLCAweDFCLCAweDAwLCAweDFDLCAweDAzLCAweDcwLCAweDBELAorMHhDMiwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg0RCwgMHgwMywgMHgzMCwgMHgwRCwgMHhDMiwgMHg0MCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsIDB4M0QsIDB4MDAsIDB4NjEsIDB4MDAsCisweEI0LCAweDgzLCAweDE0LCAweDBFLCAweDQwLCAweEI4LCAweDA1LCAweEZELCAweDE2LCAweDg0LCAweDAzLCAweEQwLCAweDAyLAorMHg0MCwgMHgzOCwgMHg4MCwgMHgyNywgMHg0MCwgMHg4NCwgMHgwMywgMHgxMSwgMHgwRSwgMHg0MCwgMHgxOCwgMHgwMCwgMHhFRCwKKzB4MDAsIDB4ODUsIDB4MDMsIDB4MTAsIDB4MDcsIDB4NDAsIDB4NEMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDAwLCAweEUxLCAweDAxLCAweEY2LCAweDg3LCAweEQyLCAweDRFLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgzMywgMHg0MCwgMHg3QiwgMHgwMCwgMHgzMSwKKzB4MDEsIDB4OTQsIDB4MDcsIDB4NTgsIDB4MUYsIDB4NDEsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4MDQsIDB4MDcsIDB4NTQsCisweDFFLCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyMCwgMHgzMywgMHgwMCwgMHhDMSwgMHg0MywgMHgzNiwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NDQsIDB4MUYsIDB4RDAsIDB4NDgsIDB4NjAsIDB4MjEsIDB4MDIsIDB4MDUsIDB4MDEsIDB4MDYsIDB4MEYsIDB4MTAsCisweDNDLCAweDQwLCAweDcyLCAweDAwLCAweENELCAweDE5LCAweDA0LCAweDIzLCAweDUwLCAweDJELCAweDQwLCAweDU4LCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNywgMHgwMCwgMHg3MSwKKzB4MDUsIDB4RkMsIDB4NDksIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4REMsIDB4MEQsIDB4RjAsCisweDE3LCAweEMwLCAweDE3LCAweDAwLCAweDYzLCAweDAyLCAweDlDLCAweDZELCAweDcwLCAweDI3LCAweEUwLCAweDFFLCAweDA5LAorMHg3RiwgMHgwMiwgMHhDQywgMHgyNSwgMHg3MCwgMHg4NywgMHhDMCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4MzAsIDB4N0MsIDB4MTAsIDB4NzQsCisweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdFLCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDA4LAorMHgxNywgMHg1OCwgMHg3QywgMHgwMCwgMHhGMCwgMHg2MSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgxRSwgMHg4MiwgMHgzQywgMHgwMCwKKzB4OTAsIDB4MjEsIDB4RDAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDE5LCAweEMwLCAweDY3LCAweDAxLAorMHg5RiwgMHgwMSwgMHg2OCwgMHgwNiwgMHgzMiwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5MiwgMHgyMCwgMHg1QywgMHgwNiwKKzB4NzAsIDB4MTksIDB4RDAsIDB4MjQsIDB4MDAsIDB4OEEsIDB4MDUsIDB4NDQsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzIsIDB4NDAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLAorMHg5RCwgMHgxMSwgMHgzNCwgMHgwMiwgMHgxMCwgMHg1OSwgMHg0MCwgMHhFNywgMHgwMCwgMHg5RCwgMHg4QiwgMHg0NCwgMHgwNiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NDQsIDB4OEEsIDB4MTAsIDB4ODgsIDB4NDAsIDB4RTQsCisweDIwLCAweDlELCAweDA3LCAweDQ0LCAweDBBLCAweDUwLCAweDI5LCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwOCwgMHg3NCwgMHgxMiwKKzB4NTAsIDB4ODksIDB4NDIsIDB4MjcsIDB4MDQsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NTIsIDB4NTAsIDB4MDksIDB4NDgsIDB4MjcsCisweDQwLCAweDlELCAweDkwLCAweDU0LCAweEEyLCAweDUzLCAweDBELCAweDYxLCAweDY0LCAweDAwLCAweDk4LCAweDAwLCAweDU0LAorMHgyQSwgMHg1MSwgMHgzOSwgMHg0MCwgMHg3MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MjgsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MTQsIDB4NzQsIDB4NTIsIDB4MTUsIDB4NDgsIDB4NDEsIDB4MjMsCisweDI1LCAweENELCAweDE0LCAweDE0LCAweDUyLCAweDUwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDk1LCAweDAwLCAweDA0LAorMHgwMiwgMHgxMSwgMHgwOCwgMHg2MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwOCwgMHgxNCwgMHgwMiwgMHg1MCwgMHg0OCwgMHg1MSwKKzB4NTAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzAsIDB4MDYsCisweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDEwLCAweDcwLCAweDQxLCAweEM4LCAweDA3LCAweDAxLCAweDFGLCAweDA0LCAweDdDLAorMHgxMCwgMHg3MCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwOCwgMHgxNywgMHgwMCwgMHg1OCwgMHgwMSwgMHg3MiwgMHgwMSwgMHhEMCwKKzB4MTQsIDB4MDAsIDB4MEIsIDB4MTYsIDB4NUMsIDB4NTAsIDB4NzAsIDB4NDEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEE4LCAweDI1LCAweDA1LCAweEJGLCAweDM0LCAweEJDLAorMHgwMiwgMHhGNiwgMHgwOCwgMHhDMCwgMHgyNywgMHgwNSwgMHg5RiwgMHgxNCwgMHhFNCwgMHg1MiwgMHhCNCwgMHg0QSwgMHhDMSwKKzB4MkYsIDB4MTAsIDB4QUIsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDQsCisweEVELCAweDUyLCAweEYwLCAweDRCLCAweEMxLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgxMSwgMHhCQywgMHgwMiwgMHhDNCwgMHgwQiwgMHhDMCwKKzB4NkUsIDB4MDEsIDB4QkYsIDB4NTQsIDB4RkMsIDB4MzIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjksIDB4OTAsIDB4QjMsIDB4MDAsCisweEFELCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweEI3LCAweDAwLCAweENDLCAweDEyLCAweDM2LCAweDBGLAorMHhDMCwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwKKzB4NDcsIDB4MDUsIDB4MUQsIDB4ODcsIDB4NzQsIDB4MDAsIDB4MTAsIDB4ODEsIDB4NDAsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDQsCisweDdDLCAweDMwLCAweEQwLCAweDA1LCAweDQwLCAweDA3LCAweDgwLCAweDU1LCAweDQwLCAweDQ0LCAweDAwLCAweDEyLCAweDA1LAorMHg1NCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NSwgMHgyOCwgMHg1NCwgMHgwMSwgMHg0MCwgMHg3MywgMHg2MCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4MjEsIDB4MDAsIDB4Q0QsIDB4MTAsCisweDc0LCAweDI3LCAweEMwLCAweDBDLCAweDQwLCAweEEzLCAweDAwLCAweDhELCAweDE0LCAweDM0LCAweDEzLCAweEQyLCAweDA4LAorMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgyNCwgMHgwMywgMHg5MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4NSwKKzB4ODAsIDB4MDQsIDB4MDIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDI1LCAweDAwLCAweDlELCAweDAyLCAweDc2LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhDMiwgMHgwOSwgMHg0OCwgMHgyNywgMHgwMSwgMHg5NSwKKzB4MDAsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MDksIDB4NDQsIDB4QTQsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MjIsIDB4NTAsCisweDA5LCAweDAwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBOCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMSwgMHgzQywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwOCwgMHg5RiwKKzB4NDAsIDB4N0EsIDB4NDIsIDB4RjAsIDB4QjksIDB4QzAsIDB4MjEsIDB4ODAsIDB4OTEsIDB4MDAsIDB4MkMsIDB4MDIsIDB4QjAsCisweDE5LCAweEMwLCAweDY0LCAweDAwLCAweDk3LCAweDA0LCAweDRDLCAweDAyLCAweDMwLCAweDQ5LCAweEMwLCAweDE3LCAweDI4LAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNSwgMHgyMCwgMHg5RiwKKzB4MDQsIDB4N0MsIDB4MTYsIDB4RjQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MEMsIDB4OUYsIDB4MjAsIDB4NUUsIDB4NTIsIDB4RjAsCisweDE5LCAweEMwLCAweDI3LCAweDIwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDg5LCAweEMxLCAweDI3LCAweDAwLAorMHg5RiwgMHg1MywgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4NDIsIDB4N0MsIDB4MDAsIDB4NzAsCisweDExLCAweENDLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDAwLAorMHgxMiwgMHgzMCwgMHg0QywgMHg0MCwgMHg3MCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwOSwgMHgwRiwgMHg4QSwgMHg1QywgMHgwMCwKKzB4MzQsIDB4MjEsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweEEwLCAweDE0LCAweDAwLCAweDdELCAweDBBLCAweDc0LCAweDAxLCAweDEwLCAweDA3LCAweDQwLCAweDlGLCAweDAwLAorMHg3MSwgMHg4MCwgMHhDNCwgMHgwMSwgMHhEMCwgMHgwNSwgMHhDMCwgMHg5RiwgMHgwMCwgMHg2MSwgMHg0MSwgMHhDNSwgMHgwOSwKKzB4MTAsIDB4MDYsIDB4NDIsIDB4NTgsIDB4MDgsIDB4N0QsIDB4MjEsIDB4QzQsIDB4MDksIDB4MTAsIDB4MDcsIDB4NDAsIDB4NTAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0OCwgMHg3MywgMHg4MCwgMHhDOSwgMHgxMSwgMHgxNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4QjMsIDB4MDYsIDB4QzEsIDB4ODgsIDB4MDQsIDB4MDMsIDB4NTEsIDB4MkMsIDB4NDAsIDB4MzEsCisweDAyLCAweENELCAweDAxLCAweDU0LCAweDQzLCAweDkwLCAweDJDLCAweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4OCwgMHgzOCwgMHgwMSwgMHhFRCwgMHg4MCwgMHhGNCwgMHgwMywKKzB4MTQsIDB4MDIsIDB4NDAsIDB4RkIsIDB4MDAsIDB4RTEsIDB4MDMsIDB4OTQsIDB4MDMsIDB4RDAsIDB4OEUsIDB4NjQsIDB4MkIsCisweDQwLCAweEYxLCAweDAwLCAweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDQ0LCAweDE4LCAweDAwLCAweEFELCAweDAwLCAweEM0LAorMHgwMywgMHg5MSwgMHgxQywgMHg0MCwgMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTEsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4ODEsIDB4QjQsIDB4MDcsIDB4NzAsIDB4MTIsIDB4Q0EsIDB4N0YsCisweDAwLCAweDRCLCAweDAxLCAweDlELCAweDA1LCAweEYyLCAweDFFLCAweEM4LCAweDdCLCAweDgwLCAweDYyLCAweDAxLCAweDhDLAorMHgwNywgMHg3MCwgMHgxRSwgMHhFOCwgMHg2OSwgMHgyMCwgMHhGRiwgMHgwMSwgMHhEQywgMHg4NSwgMHhCMCwgMHgxRSwgMHhEMCwKKzB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4QjUsCisweDBBLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDZDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNSwgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwQywgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDksIDB4QzIsIDB4NDAsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweEZELCAweDAwLCAweEZGLCAweDAxLCAweENDLAorMHg4NywgMHhCMCwgMHgxNywgMHg4MCwgMHg1RiwgMHgwMCwgMHhGRiwgMHg0MSwgMHhGQywgMHgwNywgMHhGOSwgMHg5RSwgMHhDMCwKKzB4NTgsIDB4MDAsIDB4NzMsIDB4ODEsIDB4OEMsIDB4ODYsIDB4QjAsIDB4OUUsIDB4QzAsIDB4N0QsIDB4MDgsIDB4REYsIDB4MDEsCisweEZDLCAweDA3LCAweDM0LCAweDE3LCAweEMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwgMHgwMCwgMHg3RCwgMHgwOCwgMHg4NCwgMHgyMywgMHgxMCwgMHg4MiwgMHg0MCwKKzB4MUIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NjIsIDB4MTgsIDB4MDEsIDB4NkIsIDB4MDQsCisweDg0LCAweDIyLCAweDEwLCAweDFDLCAweEMwLCAweDJBLCAweDA0LCAweDhELCAweDBELCAweEI0LCAweDI5LCAweEI0LCAweDA3LAorMHg0MCwgMHg1NCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QzQsIDB4MDMsIDB4OTAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4NkQsIDB4MDAsCisweEI0LCAweDAxLCAweEQwLCAweDBGLCAweDVBLCAweDE4LCAweDIwLCAweDcxLCAweDAwLCAweEY0LCAweDQzLCAweEQwLCAweDRGLAorMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHg5MCwgMHgwRSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MzEsIDB4ODAsIDB4OEQsIDB4MjIsCisweDA0LCAweDBCLCAweDE5LCAweDA4LCAweDQwLCAweDA3LCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDA4LCAweEQxLCAweDJDLAorMHg0MCwgMHg1MCwgMHgwMCwgMHg0OSwgMHgwMCwgMHgzNCwgMHg0QSwgMHg1MSwgMHgzQywgMHg0MCwgMHhFMywgMHgwNCwgMHgwRCwKKzB4MTAsIDB4MzQsIDB4MDAsIDB4OTAsIDB4MjgsIDB4NTEsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDNELCAweDEwLCAweDFGLCAweDAxLCAweDRDLCAweDBCLCAweEIwLCAweDAxLAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxQSwgMHhGMCwgMHgyRiwgMHhDMCwgMHgzMCwgMHgwNCwgMHhDMSwKKzB4MjAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MEMsIDB4Q0MsIDB4QTMsIDB4MDAsIDB4NUQsIDB4MjAsIDB4N0MsIDB4MEEsIDB4OTAsCisweDI5LCAweDQ4LCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgzNywgMHgyOCwgMHg5RiwgMHgwQywgMHg3RCwgMHgyMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgyNywgMHgwMCwgMHgxRiwKKzB4MDIsIDB4N0MsIDB4NEEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4QzAsIDB4RDcsIDB4NTAsIDB4NDksIDB4MEEsIDB4QTAsCisweENELCAweDAwLCAweEE2LCAweDAwLCAweDBGLCAweDA4LCAweDc4LCAweDEyLCAweDc0LCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgyRiwKKzB4MDAsIDB4RUMsIDB4NDcsIDB4QjAsIDB4MDIsIDB4RDAsIDB4MkMsIDB4MDAsIDB4MzMsIDB4MDAsIDB4QkMsIDB4ODAsIDB4QjAsCisweDBGLCAweEMzLCAweDNGLCAweDAwLCAweDdGLCAweEMwLCAweEVDLCAweDgwLCAweDcxLCAweDBCLCAweEMwLCAweDJFLCAweDA4LAorMHg3MywgMHgwMCwgMHgwRCwgMHgwMiwgMHgxNCwgMHgwQSwgMHhEMCwgMHgxMSwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MjUsIDB4MDQsIDB4MjcsIDB4MTAsCisweDIxLCAweDQwLCAweDY0LCAweDAwLCAweDExLCAweDA1LCAweDc0LCAweDE2LCAweDEyLCAweDBELCAweDQwLCAweDI3LCAweDEwLAorMHhENSwgMHgwMSwgMHgwNCwgMHgyNCwgMHgxMCwgMHgxOSwgMHg0NSwgMHhFNCwgMHgwMSwgMHg1NSwgMHgwQSwgMHg0NCwgMHgwNiwKKzB4NTQsIDB4NzEsIDB4NDIsIDB4MTQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweEEwLCAweDM0LCAweDAwLCAweDFELCAweDgxLCAweDY0LCAweDAzLCAweDkwLCAweDA1LCAweDQ5LCAweEM0LCAweDgwLAorMHg5MSwgMHgwMSwgMHg3NiwgMHgwNiwgMHg5MCwgMHgwRCwgMHg0MCwgMHhCNywgMHgwMCwgMHg1NSwgMHgwMSwgMHg2NiwgMHg4QSwKKzB4NTAsIDB4MUQsIDB4NjAsIDB4NjYsIDB4ODAsIDB4NTUsIDB4MDIsIDB4NDQsIDB4MDYsIDB4NTQsIDB4MTEsIDB4NDAsIDB4MDQsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDMwLCAweDA4LAorMHgwRCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxNCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0OCwgMHg4MSwgMHg0MCwgMHgzNiwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MTEsIDB4MDgsIDB4NDQsIDB4MDIsIDB4MTAsIDB4NEQsIDB4NjAsIDB4MDQsCisweEMwLCAweDA1LCAweDA2LCAweDA0LCAweDAwLCAweDU4LCAweDAwLCAweDQwLCAweDQwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgzRSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHg4MywKKzB4QjAsIDB4MDEsIDB4QzAsIDB4MjQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MEQsIDB4QzgsIDB4MzcsCisweDQwLCAweDFGLCAweDAyLCAweDZDLCAweDAyLCAweDcwLCAweEU5LCAweEMzLCAweDI2LCAweDgwLCAweDkzLCAweDE2LCAweDRDLAorMHgwMiwgMHg3MCwgMHgwOSwgMHhDMiwgMHgwMSwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODUsIDB4QTAsIDB4M0YsIDB4MjAsIDB4QkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDQwLCAweEZDLCAweDAyLCAweEYxLCAweDBGLCAweEMwLCAweDNGLCAweDA4LCAweDJGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHg0MSwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwNCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MTcsIDB4MjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsCisweDAwLCAweDYzLCAweDA0LCAweENDLCAweDMyLCAweDcyLCAweDFGLCAweEM4LCAweDJDLCAweDAzLCAweDcyLCAweDAxLCAweENDLAorMHgwNSwgMHg3MCwgMHgwQiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhCQiwgMHg4MCwgMHhFQywgMHgwNCwgMHhEMCwgMHg5QiwgMHhEMCwKKzB4NUMsIDB4NEEsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MTIsIDB4RjEsIDB4MTcsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDdGLCAweDAwLCAweDUxLCAweDAzLCAweDQ0LAorMHhCMiwgMHgxMiwgMHgxRiwgMHg0MCwgMHgyNCwgMHgxMywgMHhEMSwgMHgwMSwgMHg0NCwgMHgwNywgMHgxMCwgMHgzRCwgMHg0MCwKKzB4RkMsIDB4MDAsIDB4QjEsIDB4MDMsIDB4NDQsIDB4ODAsIDB4RDAsIDB4NDUsIDB4NDAsIDB4MDQsIDB4MDEsIDB4RjEsIDB4MjEsCisweDQ0LCAweDI2LCAweEQwLCAweDFELCAweDQwLCAweDA1LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHg1NSwgMHgwMiwgMHgwNCwgMHgxMiwgMHg1MCwgMHgwQywgMHg0MCwKKzB4MjEsIDB4MDEsIDB4OTEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4NTAsIDB4ODgsIDB4NDAsIDB4MzEsIDB4MDIsIDB4ODksIDB4MDgsCisweDI0LCAweDAwLCAweEQ4LCAweDA4LCAweDQwLCAweDMwLCAweDg4LCAweEMxLCAweDAwLCAweDE0LCAweDgyLCAweEQyLCAweDA4LAorMHg0MCwgMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwKKzB4MzUsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4ODIsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MjUsIDB4MDAsIDB4RDEsIDB4MDAsCisweDEwLCAweDIyLCAweDAwLCAweDA5LCAweDQwLCAweDM1LCAweDgwLCAweDk1LCAweDA0LCAweDQ0LCAweDA2LCAweEMwLCAweDgxLAorMHgwMCwgMHgzNCwgMHgwNCwgMHhEMSwgMHg0MCwgMHg1NCwgMHgxMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzMsIDB4NDAsIDB4QzcsIDB4MDAsCisweDRDLCAweDI2LCAweDcxLCAweDBELCAweEQwLCAweDY0LCAweDAwLCAweDgzLCAweDgwLCAweDVDLCAweDA3LCAweDcwLCAweDA1LAorMHhDMCwgMHgzNSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg2QywgMHg0QywgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNCwgMHgwMCwgMHhEMywKKzB4MDAsIDB4NUMsIDB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDEwLCAweDdCLCAweDA5LCAweEZDLCAweDAzLCAweEIzLCAweDBGLAorMHhDMCwgMHgzRSwgMHg0MSwgMHhCRiwgMHgwMCwgMHhFRCwgMHg4MywgMHhGMCwgMHg5RiwgMHg4MiwgMHgzNiwgMHgyMCwgMHg5QiwKKzB4MDEsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkQsIDB4ODAsIDB4RUMsIDB4MDIsIDB4RjIsCisweDhGLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHgzNSwgMHgxMiwgMHhERiwgMHgwQSwgMHg0RCwgMHgwMywgMHhGMCwgMHg4QywgMHhDNCwgMHgzNCwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDAsIDB4QzAsIDB4NzMsIDB4MDAsIDB4OEIsIDB4MDAsIDB4NUMsIDB4MDgsIDB4RjAsCisweDA5LCAweEMwLCAweEE3LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDQyLCAweEYyLCAweDA5LCAweEMyLCAweDA4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMiwgMHgzNCwgMHgwMCwgMHhERCwKKzB4ODAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsCisweDBCLCAweDAyLCAweDNGLCAweDAwLCAweDkxLCAweDAxLCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDY3LCAweDA0LAorMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMiwgMHgwRCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsIDB4MEMsIDB4NEMsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsCisweDBDLCAweDUxLCAweDM0LCAweDAyLCAweDRELCAweDAwLCAweDMwLCAweDAwLCAweEQwLCAweDA4LCAweDQwLCAweDMyLCAweDAwLAorMHg4MSwgMHgwMCwgMHgxNCwgMHgwMCwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhDRCwgMHgyMCwgMHgzNCwgMHgyRSwKKzB4RDAsIDB4MDAsIDB4NTAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDgwLCAweDc4LCAweDAwLCAweDZELCAweDQxLCAweDg0LCAweDQ2LCAweEQwLCAweDFFLCAweDQ4LCAweDY4LCAweDAwLAorMHhFRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxRSwgMHg0MiwgMHg3QiwgMHg2MCwgMHhBMSwgMHgyMSwgMHg4NCwgMHg4NCwKKzB4RDAsIDB4NUUsIDB4NDEsIDB4NkIsIDB4MDAsIDB4RUMsIDB4ODEsIDB4QjQsIDB4MDcsIDB4RDIsIDB4MUIsIDB4NDAsIDB4MTgsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLAorMHhDRiwgMHgwMCwgMHgwQywgMHgwMiwgMHhGMiwgMHgwQywgMHhDMCwgMHgyMCwgMHgwMCwgMHg4RiwgMHgwMCwgMHgzQywgMHgxMiwKKzB4RjAsIDB4NDgsIDB4QzAsIDB4MzMsIDB4MDAsIDB4ODMsIDB4MTAsIDB4MUMsIDB4ODAsIDB4RjgsIDB4MDgsIDB4RTAsIDB4MzMsCisweDAwLCAweENGLCAweDQ4LCAweDNDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHg0MiwKKzB4RjAsIDB4MUUsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweEI3LCAweDAwLCAweEVDLCAweDIyLCAweEYyLCAweDRCLCAweEMwLCAweDNGLCAweDAwLCAweEZFLCAweDAxLCAweEZDLAorMHg0MywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTEsIDB4QTAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweDlGLCAweDAwLCAweDc4LCAweDAyLCAweEYwLCAweDg1LCAweEMwLCAweEYwLCAweDIyLCAweERCLCAweDE0LCAweDc0LAorMHgwMCwgMHhFMCwgMHgxQywgMHhDMCwgMHgyNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4QjksCisweDAwLCAweDZELCAweDA0LCAweEI0LCAweDEzLCAweEQwLCAweDRFLCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDAwLCAweEI2LAorMHgwMiwgMHhEMCwgMHg0RSwgMHg1MCwgMHgzOCwgMHgwNCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDg5LCAweEVELCAweDA5LCAweEI0LAorMHgwNywgMHhEMCwgMHg5RSwgMHg0MCwgMHg3OSwgMHgwMywgMHhBRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxNCwgMHg2MiwKKzB4NzgsIDB4MDEsIDB4RTksIDB4MTEsIDB4QjQsIDB4MDQsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NjksIDB4ODgsIDB4RUQsIDB4MEQsCisweEI0LCAweDU3LCAweEQwLCAweDFBLCAweDQwLCAweDBGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHg4RCwgMHhBMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwKKzB4NzMsIDB4MTAsIDB4OEQsIDB4MEIsIDB4MzQsIDB4MkEsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDEsCisweDM0LCAweDAzLCAweEQwLCAweERDLCAweDQwLCAweDIxLCAweDIzLCAweENELCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDA4LAorMHg0MSwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwKKzB4MTEsIDB4MDAsIDB4N0YsIDB4MjAsIDB4N0MsIDB4MTEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MjQsIDB4N0YsIDB4MDIsCisweEZDLCAweDBELCAweEYwLCAweDA3LCAweEMwLCAweDE0LCAweDAwLCAweDVCLCAweDAxLCAweEZDLCAweDMxLCAweEYwLCAweDA3LAorMHhEMCwgMHg5RCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgyNywgMHhDMCwgMHg1RiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDEsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDEwLCAweDcwLCAweDQwLCAweEYwLCAweDgwLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMSwgMHgwMSwgMHg4MCwgMHgwNiwgMHgyOCwgMHgxRiwKKzB4ODAsIDB4NzgsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDI2LCAweEYwLCAweDM5LAorMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwMiwgMHgzMiwgMHgwOSwgMHhDMywgMHg2NCwgMHgwMCwgMHg4RiwKKzB4MDEsIDB4NEMsIDB4MDIsIDB4RjEsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDYsIDB4MzAsCisweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgyRSwgMHgwMCwgMHhCMSwgMHgwMywgMHhGNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHg2RiwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDY3LCAweDA4LCAweEJELCAweDAwLCAweDg0LCAweDBFLCAweDEwLCAweDA4LCAweDQwLCAweDA0LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMiwgMHhEMSwKKzB4MDgsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDA5LCAweDUwLCAweDI0LCAweDAxLCAweDlELCAweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQyLCAweDI3LCAweDAwLAorMHg4RCwgMHgwMCwgMHg0NCwgMHgxQSwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MEEsIDB4RDAsCisweDA4LCAweDQyLCAweEEzLCAweDA4LCAweDhELCAweDAyLCAweDQ0LCAweDBBLCAweDEwLCAweDY4LCAweDQxLCAweDIwLCAweDA1LAorMHg4RCwgMHgxNCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgyOCwgMHg0MCwgMHhBMywgMHgwOCwgMHg4RCwgMHgwMiwgMHgwNSwgMHgwMiwKKzB4MTAsIDB4MjksIDB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEIwLCAweDU2LCAweDQwLCAweDUzLCAweDAxLCAweDdDLCAweDA0LCAweEYwLCAweDExLCAweEMwLCAweDQ3LCAweDAwLAorMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzNCwgMHg0MSwgMHhDMCwgMHgwNCwgMHgwMSwgMHgxRiwgMHgwNCwgMHg0QywgMHgyOCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NEMsIDB4MDQsIDB4MzQsIDB4MDEsIDB4RDAsIDB4NzQsCisweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweEE3LCAweDAwLAorMHhCRiwgMHgwMiwgMHhGQywgMHgwRSwgMHhGMCwgMHgyOSwgMHhDMCwgMHhFRiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNiwKKzB4RjAsIDB4MUIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4ODAsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NkYsCisweDA4LCAweDlGLCAweDIzLCAweEZDLCAweDBBLCAweEYwLCAweDFCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHg2RiwgMHgwMCwgMHhGQiwgMHgxMSwgMHhDRCwgMHgxNiwKKzB4RjAsIDB4MUIsIDB4QzAsIDB4NkYsIDB4MDEsIDB4OTMsIDB4MDAsIDB4NkMsIDB4MEEsIDB4MjAsIDB4NTksIDB4ODAsIDB4NkQsCisweDAxLCAweEEzLCAweDA1LCAweDBDLCAweDAyLCAweEYwLCAweDJCLCAweEM4LCAweDJCLCAweDAwLCAweDlELCAweDg1LCAweENDLAorMHgwNiwgMHgzMCwgMHgyOSwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MTEsIDB4NDIsIDB4NDQsIDB4MTQsIDB4RDAsIDB4MjEsIDB4NDAsIDB4QzcsCisweDAzLCAweDUxLCAweDE1LCAweDY0LCAweDA0LCAweDEwLCAweDMwLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDU0LAorMHgwMCwgMHhEMCwgMHg1MSwgMHg0MCwgMHg1NywgMHgwMCwgMHgxRCwgMHgwNywgMHg0NCwgMHgyOCwgMHgxMCwgMHgxMSwgMHg0MCwKKzB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4QTMsCisweDAwLCAweDg5LCAweDAwLCAweDA0LCAweDRBLCAweEQwLCAweDI4LCAweDQyLCAweDIzLCAweDA0LCAweDgxLCAweDIwLCAweDI0LAorMHgwMiwgMHgxMCwgMHhDOCwgMHg2MSwgMHhBMywgMHgwMCwgMHg4MSwgMHgwMiwgMHgwNCwgMHgwMiwgMHg1MCwgMHg0OCwgMHg2MCwKKzB4MzMsIDB4MDUsIDB4OEQsIDB4MTIsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDkxLCAweDQwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MiwgMHgyNywgMHg2MCwgMHg5MSwgMHgwOCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MiwKKzB4MjYsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NTQsIDB4MEEsIDB4RDAsIDB4ODksIDB4NDIsIDB4MjcsIDB4MDEsIDB4OUQsIDB4MDAsCisweDU0LCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5QiwgMHgwRSwgMHhDQywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QjMsIDB4MDMsIDB4RUMsIDB4MTIsIDB4MzAsIDB4MUIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDA2LCAweEUwLCAweDFCLCAweEMwLCAweEVGLCAweDIwLCAweEJGLCAweDAwLCAweDVELCAweDAyLCAweEYwLCAweDZCLAorMHhDMCwgMHgxNywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MDAsIDB4OUYsIDB4MjEsCisweDdDLCAweDEyLCAweEY0LCAweDM4LCAweEQwLCAweDIxLCAweDQwLCAweDlGLCAweDAwLCAweDdDLCAweDBBLCAweEYyLCAweDA5LAorMHhDMCwgMHg2NywgMHgwOCwgMHg5RiwgMHgwMCwgMHgyQywgMHg4MiwgMHgzNCwgMHgzOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDEsIDB4MDEsIDB4MEYsIDB4MDAsCisweDRELCAweDgwLCAweDMwLCAweDgxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNCwgMHgxMCwgMHgxNywgMHgwMCwgMHg0QywgMHgwOCwgMHg3MiwgMHgwMSwgMHhEMCwgMHgwNCwgMHg0MCwgMHgwMywKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweERDLCAweDIwLCAweDdELCAweDAwLCAweDQ0LCAweDA1LCAweDEwLCAweDA3LAorMHg0MCwgMHgxNywgMHgwNCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHhDMCwgMHgxNiwgMHgwMCwgMHg0MSwKKzB4MTEsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MTUsIDB4NDMsIDB4MTQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA1LCAweDQwLCAweDUzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHhFMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwNywgMHgxMCwgMHgwOCwgMHg0MiwgMHgzNywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzAsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4ODUsIDB4MDEsIDB4MDUsIDB4MDMsIDB4NTAsCisweDBDLCAweDQwLCAweDMyLCAweDAwLCAweEMxLCAweDgwLCAweDM0LCAweDAyLCAweEMwLCAweDBDLCAweDQwLCAweDUzLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHhCOCwgMHgwMCwgMHhBRCwKKzB4MDAsIDB4MDQsIDB4NzcsIDB4MTQsIDB4MEUsIDB4NDAsIDB4MkIsIDB4ODIsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MTMsIDB4RDAsCisweDRFLCAweDQwLCAweDJBLCAweDAwLCAweEY1LCAweDAwLCAweEM0LCAweDA3LCAweDUwLCAweERFLCAweDQwLCAweDdFLCAweDAxLAorMHhFMSwgMHgwQywgMHhCNCwgMHgwMywgMHhEMSwgMHg0RSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NjgsIDB4MDAsIDB4QUYsIDB4MDEsIDB4ODQsIDB4MDYsIDB4MzAsCisweDFBLCAweEMwLCAweDdCLCAweDAxLCAweEVGLCAweDAzLCAweEJDLCAweDBGLCAweEYwLCAweDVFLCAweEMwLCAweDZBLCAweDAwLAorMHhFNywgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxRiwgMHg4MCwgMHhGQSwgMHgwMCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNiwKKzB4RjAsIDB4M0UsIDB4QzAsIDB4NTMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEI4LCAweDM1LCAweDAwLCAweDhGLCAweDAwLCAweDdDLCAweDAyLCAweEMwLCAweDBELCAweEMwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhFMCwgMHg4RCwgMHhDNCwgMHgyMywgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHg2MywKKzB4QjgsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDZGLCAweDAwLAorMHhCMywgMHgwMSwgMHhGQywgMHg4NywgMHgzMCwgMHgxQiwgMHg4MCwgMHg3RiwgMHgwMiwgMHhFMywgMHgwMSwgMHg4QywgMHgwNywKKzB4MzAsIDB4MUYsIDB4NDAsIDB4N0MsIDB4MDEsIDB4RkYsIDB4MDEsIDB4RUMsIDB4MDcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4NzgsCisweDI4LCAweEYzLCAweDIxLCAweEZDLCAweDA2LCAweDMwLCAweDFFLCAweEM4LCAweDA4LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgyOSwgMHg0MCwgMHhBMSwgMHgwMCwgMHhGNCwgMHgwMywKKzB4MTQsIDB4MEEsIDB4NDAsIDB4MkIsIDB4NDgsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MjMsIDB4MTAsIDB4OEUsIDB4NDAsIDB4MjksCisweDAwLCAweEVELCAweDAwLCAweEM0LCAweDQzLCAweEIwLCAweDBBLCAweEMwLCAweDNBLCAweDAyLCAweEUxLCAweDAwLCAweEI0LAorMHgwQiwgMHgxMCwgMHg4RSwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QTEsIDB4MTAsIDB4QjQsIDB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4M0IsCisweDgwLCAweEYxLCAweDAxLCAweEM0LCAweDA3LCAweDEwLCAweDFGLCAweDQwLCAweDI4LCAweDAxLCAweENELCAweDAwLCAweEE0LAorMHgwMywgMHgxMCwgMHgwQiwgMHg0MSwgMHgzRCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHg2MiwgMHgxNCwgMHgxRiwgMHg0MCwKKzB4MjAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MTMsCisweDAwLCAweDgxLCAweDAxLCAweDM0LCAweDg2LCAweDEwLCAweDBDLCAweDQwLCAweDYzLCAweDAwLCAweEMxLCAweDA3LCAweDA0LAorMHgwQiwgMHgxOCwgMHgzQywgMHg0MCwgMHgyMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgxNywgMHg5MCwgMHgzQywgMHg0MywKKzB4NjcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4MTgsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDI1LCAweDAwLCAweEQzLCAweDAzLCAweDdDLAorMHgxMywgMHgzMCwgMHgwOSwgMHhDMiwgMHg3NywgMHgwNCwgMHhEMywgMHgwNCwgMHg0NSwgMHgyQiwgMHgzNCwgMHg2RCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4REYsIDB4MTEsIDB4RUMsIDB4MDMsIDB4MzAsIDB4M0MsIDB4QzAsIDB4NjUsIDB4NDQsIDB4RDMsIDB4MjAsCisweDNDLCAweDAyLCAweDMwLCAweDZELCAweEQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgyRCwgMHhDMCwKKzB4MjcsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REQsIDB4NDAsCisweDdDLCAweDgzLCAweEYyLCAweDBELCAweEMwLCAweDI2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDRELAorMHhDMCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwKKzB4MkYsIDB4MDAsIDB4QkYsIDB4MTAsIDB4OEMsIDB4MDYsIDB4MzEsIDB4MEIsIDB4RDAsIDB4QjQsIDB4MDAsIDB4RkYsIDB4MDAsCisweENDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweEVGLCAweDAwLCAweEZGLCAweDg1LCAweENDLCAweDAzLCAweDMwLCAweDRGLAorMHhDMCwgMHhFQywgMHgwMCwgMHhGMywgMHgwMCwgMHg0QywgMHgxNiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDMsCisweDQ0LCAweDAyLCAweDExLCAweDI0LCAweDQwLCAweDc0LCAweDAwLCAweERELCAweDQwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELAorMHg0MiwgMHg2NywgMHgyMCwgMHhDRCwgMHgwMSwgMHg0NCwgMHgwMywgMHgxMCwgMHgxOSwgMHg0OCwgMHg3NCwgMHgyMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDEsIDB4MDAsIDB4MEQsIDB4NDAsIDB4ODQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDI2LCAweDAwLCAweERELCAweDA2LCAweDQ0LCAweEEzLCAweDE0LCAweDA5LAorMHg0MSwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgxMCwgMHhERCwKKzB4MDAsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDBDLCAweDQwLCAweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDUsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4ODAsIDB4REQsIDB4NDAsIDB4MDQsIDB4MDMsIDB4MTQsCisweDA5LCAweDUwLCAweDIwLCAweDAwLCAweEMxLCAweDQwLCAweDA0LCAweDAyLCAweDE2LCAweDBDLCAweDU0LCAweDQwLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyNiwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MDksIDB4Q0EsIDB4MjQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweENELCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLAorMHhGMywgMHgwMCwgMHg0RCwgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RUQsIDB4MDIsIDB4RjAsCisweDA3LCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLCAweDJGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEY3LCAweDBDLCAweENDLCAweDFCLCAweDcwLCAweDNBLCAweEMwLCAweEVDLCAweDAwLAorMHhCQiwgMHgwNCwgMHhGQywgMHgwMywgMHgzMCwgMHgxRSwgMHhDMCwgMHgzRSwgMHgwMCwgMHhBNywgMHgwMSwgMHg4QywgMHgwNiwKKzB4MzAsIDB4MUIsIDB4QzAsIDB4N0UsIDB4MTIsIDB4QkYsIDB4MDQsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MDMsIDB4QzQsIDB4MEUsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLAorMHhGMSwgMHg4RSwgMHhDNCwgMHgzQiwgMHgxMCwgMHg0OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwRSwgMHhGNCwgMHgyRiwKKzB4NTAsIDB4MTksIDB4NDAsIDB4RjQsIDB4MDAsIDB4NUQsIDB4MDEsIDB4NDQsIDB4NTAsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsCisweDAwLCAweEM5LCAweDE0LCAweDQ0LCAweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMiwgMHgzMywgMHgyMCwgMHhDNSwgMHgwNCwgMHgwNCwgMHgxMywKKzB4NTAsIDB4NDksIDB4NDAsIDB4MzAsIDB4MDEsIDB4MDksIDB4MTAsIDB4MTQsIDB4MDMsIDB4MTIsIDB4MDgsIDB4NjAsIDB4MzIsCisweDAyLCAweENELCAweDgwLCAweDQ0LCAweDEwLCAweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDBDLCAweDA0LAorMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDYsIDB4MDMsIDB4MTAsIDB4MTksIDB4NDEsIDB4NzAsCisweDAwLCAweDExLCAweDAxLCAweDc0LCAweDAzLCAweDEwLCAweDE5LCAweDQwLCAweDM0LCAweDAwLCAweERELCAweDg0LCAweDQ2LAorMHg4NCwgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNSwgMHgwMCwgMHg5OSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MSwKKzB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4QTgsIDB4MzYsCisweDA4LCAweEQ3LCAweDAwLCAweDQ4LCAweDAzLCAweDcwLCAweDM5LCAweEMwLCAweDQ0LCAweDAxLCAweDlCLCAweDA1LCAweDVDLAorMHg4MywgMHgzMCwgMHgxOSwgMHhDMCwgMHgzNiwgMHg4MCwgMHhENywgMHgwMCwgMHg0QywgMHg0RSwgMHgzMSwgMHgwOCwgMHhDMCwKKzB4MzcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDcsIDB4RjAsIDB4MzAsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgyLCAweDNELCAweDEwLCAweEVGLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHg4MCwgMHhGQywgMHg0MywgMHhGMCwgMHgwQiwgMHhDMCwKKzB4M0YsIDB4QTQsIDB4RkYsIDB4MDEsIDB4RkQsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzIsIDB4M0UsIDB4MDAsIDB4RUYsIDB4MDIsCisweEZDLCAweDhGLCAweEYwLCAweDAzLCAweEMwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgyMSwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4OTcsIDB4MDgsIDB4MEMsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MzQsIDB4MDIsIDB4RDcsIDB4MTAsCisweDRDLCAweDAwLCAweEIxLCAweDBELCAweEMwLCAweDM3LCAweDA0LCAweEQzLCAweDE4LCAweDQ0LCAweDAzLCAweEYwLCAweDIxLAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4NzAsIDB4MDAsIDB4RkQsIDB4MEYsIDB4RjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjAsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDMsCisweEM0LCAweDRGLCAweDMwLCAweEMwLCAweEMwLCAweDNDLCAweDA4LCAweEMxLCAweDExLCAweDJDLCAweDAwLCAweDEwLCAweDhELAorMHg0MCwgMHhGNCwgMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwQiwgMHhEMCwgMHhCMSwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NzIsIDB4MDAsIDB4Q0QsIDB4MDMsCisweDc0LCAweDA3LCAweDUwLCAweDA4LCAweDQ0LCAweDMxLCAweDAwLCAweDA1LCAweDEyLCAweDE0LCAweDBCLCAweEQwLCAweDE4LAorMHg0MCwgMHhGMCwgMHgyMCwgMHhDNSwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMiwgMHgwMCwgMHgwNiwgMHhGMywgMHgwMCwgMHg4OSwKKzB4MDEsIDB4MDQsIDB4MzcsIDB4RDAsIDB4OTAsIDB4NDAsIDB4MUQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgyLCAweDc4LCAweDA0LCAweEVELCAweDgxLCAweEI0LCAweDRGLCAweEQwLCAweDFCLAorMHg0OCwgMHg3RCwgMHgwOCwgMHhFMSwgMHgwOSwgMHg5NSwgMHgwNywgMHgwMCwgMHg5QiwgMHg0MCwgMHg3OCwgMHgwMCwgMHg2MSwKKzB4MDEsIDB4RTQsIDB4MDQsIDB4MTAsIDB4OUEsIDB4NDAsIDB4NzgsIDB4MDYsIDB4QUQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDksCisweDFBLCAweDQ4LCAweDE4LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgxMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg3MCwgMHgwOCwgMHg0MCwgMHgzMSwgMHgwMCwgMHg1NywKKzB4MDAsIDB4MUMsIDB4MDMsIDB4RjAsIDB4ODgsIDB4QzAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDAsIDB4MkMsIDB4MDAsIDB4QjAsCisweDAwLCAweEMwLCAweDM3LCAweDAwLCAweDhCLCAweDBDLCAweDBDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDQ5LCAweDQ4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCMCwgMHgzRCwgMHgwMCwgMHhGRiwKKzB4MDIsIDB4RkMsIDB4NEIsIDB4RjAsIDB4OEIsIDB4ODAsIDB4M0EsIDB4MDIsIDB4RkYsIDB4MDAsIDB4QUMsIDB4NjMsIDB4RjEsCisweDhCLCAweEQwLCAweDNCLCAweDAwLCAweEZGLCAweDQ4LCAweEZDLCAweDAwLCAweEYwLCAweDBBLCAweEMyLCAweDNGLCAweDAwLAorMHg5NywgMHgyOCwgMHhGRCwgMHgwMywgMHhGMCwgMHg4RSwgMHhDMCwgMHgwOSwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MEMsIDB4N0MsIDB4MEIsIDB4RjAsCisweDA5LCAweEMwLCAweDM0LCAweDAwLCAweDU3LCAweDAxLCAweDRDLCAweDFCLCAweEYxLCAweDA5LCAweEMwLCAweDM0LCAweDEyLAorMHhDRiwgMHgwMCwgMHg0QywgMHgwMywgMHhCMCwgMHgwMSwgMHhDMCwgMHg3NiwgMHg5MCwgMHhEQiwgMHgwMCwgMHg3QywgMHg4MywKKzB4MzAsIDB4MDUsIDB4QzAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDEzLCAweEQwLCAweDBGLCAweDQ0LCAweDM4LCAweDAwLAorMHhFMSwgMHgwMCwgMHg4NCwgMHgzMywgMHhEOCwgMHgwQSwgMHg0MiwgMHgzOCwgMHgwMCwgMHhFRCwgMHhBMCwgMHg4NCwgMHg4MSwKKzB4MTQsIDB4MEUsIDB4NDQsIDB4MzksIDB4MDAsIDB4RTUsIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDAsIDB4NDgsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAyLCAweDc5LCAweDAwLAorMHhFRCwgMHgwNSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQSwgMHg1NCwgMHg3QywgMHgwMCwgMHg0NSwgMHgwMSwgMHg4NCwgMHgxNywKKzB4QzAsIDB4MTMsIDB4NDgsIDB4NzgsIDB4MDEsIDB4RUMsIDB4MDEsIDB4QzUsIDB4MDUsIDB4MTIsIDB4MTYsIDB4NDAsIDB4N0QsCisweDgwLCAweEUxLCAweEExLCAweEY0LCAweDhGLCAweDExLCAweDFDLCAweDYwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDgsIDB4MkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDMsIDB4MDQsIDB4MDMsIDB4RDAsIDB4ODAsIDB4NDAsIDB4MzAsCisweDIwLCAweENELCAweDA1LCAweDA0LCAweDE1LCAweDEwLCAweDBDLCAweDQwLCAweDIxLCAweDAwLCAweEM1LCAweDA4LCAweDc0LAorMHgwNiwgMHg1MCwgMHgyQywgMHg0MSwgMHg0OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RDAsIDB4NDcsIDB4QzAsIDB4OTgsCisweDAwLCAweDc3LCAweDQ5LCAweDRDLCAweDAxLCAweEYwLCAweEE3LCAweEM4LCAweDE0LCAweDAwLCAweDdGLCAweDA3LCAweDhDLAorMHgxNSwgMHgzMCwgMHg0NywgMHhDMCwgMHg1NSwgMHgwMCwgMHg1QiwgMHgyMSwgMHg3QywgMHgwMSwgMHgxMCwgMHgyNywgMHhEMSwKKzB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsCisweDAwLCAweDFGLCAweDgyLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweEMxLCAweDA3LCAweDAxLCAweDFGLCAweEE4LCAweDdELAorMHgwOCwgMHhEMCwgMHgyMSwgMHhENCwgMHg4NywgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywgMHgwMCwgMHg3MCwgMHgyMSwgMHhDMCwKKzB4MDUsIDB4MDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAxLCAweDlGLCAweDAzLCAweDNDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwOCwgMHg5NywgMHgwMSwgMHg3QywgMHgxMiwgMHhGMiwgMHgyOSwgMHhDMCwKKzB4MjYsIDB4MDAsIDB4OUYsIDB4MDgsIDB4NUMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OEYsIDB4MDksCisweDRELCAweDAyLCAweDMwLCAweDQ4LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMywgMHg3NCwgMHgwQSwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MUEsIDB4RDAsIDB4MDgsIDB4NDEsIDB4RTQsIDB4MDEsIDB4OEQsIDB4NjAsCisweDQ0LCAweDAyLCAweDEyLCAweDY4LCAweDQwLCAweDI0LCAweDAzLCAweDlELCAweDAyLCAweDQ0LCAweDAyLCAweDMwLCAweDI5LAorMHg1MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NDYsIDB4NTAsIDB4MDgsIDB4NDIsIDB4MjQsIDB4MDAsIDB4OTUsIDB4MDgsCisweDc0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAyLCAweDlELCAweDAwLCAweDU0LCAweDAyLCAweDUyLCAweDBELAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NCwgMHgwQSwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MTQsCisweDM0LCAweDUyLCAweDU0LCAweDA4LCAweDQwLCAweDI0LCAweDBBLCAweEMxLCAweDk0LCAweDMwLCAweEQyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxOSwgMHgwOSwgMHg3MCwgMHgyMCwgMHgxMCwgMHg4RCwKKzB4MDgsIDB4MDQsIDB4MDIsIDB4MTQsIDB4NEMsIDB4NDEsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA3LCAweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDEwLCAweDcwLCAweDAxLAorMHhEMCwgMHg4NCwgMHgwMCwgMHgxNywgMHgwNCwgMHg3OCwgMHgxMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNywgMHgwNSwgMHgxRCwKKzB4NDAsIDB4NUMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MTYsIDB4NEMsIDB4MDAsIDB4MzAsCisweDQxLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LAorMHhCMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgxNCwgMHg3QywgMHg1MiwgMHhCMSwgMHg0QiwgMHhDMSwgMHgyQiwgMHgwMSwgMHhCRiwKKzB4OTQsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MEEsIDB4QzAsIDB4MjYsIDB4MTAsIDB4RkUsIDB4MDAsIDB4QkMsIDB4NTMsIDB4RjAsCisweDBBLCAweEMwLCAweDJCLCAweDE1LCAweEJGLCAweDA0LCAweEJDLCAweDUyLCAweDcwLCAweDBCLCAweEMwLCAweDY3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDEsIDB4Q0MsIDB4NUUsIDB4RTAsIDB4MjgsIDB4QzAsIDB4QTcsIDB4MDAsIDB4QjcsIDB4MDksIDB4RUMsIDB4MTIsIDB4NzAsCisweDBBLCAweEMwLCAweDJGLCAweDA0LCAweEFELCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDBBLCAweEMwLCAweEFFLCAweDAwLAorMHhCQiwgMHgwMCwgMHhDRCwgMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MEYsIDB4NDQsIDB4MDgsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDAxLCAweDExLCAweDBCLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDg3LCAweDAwLAorMHgxOSwgMHgwMCwgMHg0NCwgMHgxMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMSwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDEwLCAweDA0LCAweDEyLCAweEQwLCAweDQ4LCAweDQwLCAweDY3LCAweDAwLAorMHg4NSwgMHgwNCwgMHgyNCwgMHgwQiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5OSwgMHgwMCwgMHgwNCwgMHg0MiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MDEsIDB4ODksIDB4MDAsIDB4MjQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4NDMsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLAorMHg5RCwgMHg2MCwgMHg0NCwgMHgwMiwgMHhDOCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMiwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDQsIDB4MjcsIDB4MDAsIDB4OTksIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTEsIDB4MDksIDB4MDAsIDB4NjQsCisweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4QzEsIDB4MzksIDB4QzgsIDB4NjcsIDB4MDAsIDB4OTUsIDB4NTEsIDB4NkMsIDB4MDIsIDB4NzAsIDB4NzksIDB4QzAsIDB4MjcsCisweDAwLCAweDlCLCAweDAxLCAweDRDLCAweDBFLCAweDMwLCAweDE5LCAweEMwLCAweDI2LCAweDAwLCAweDlCLCAweDAwLCAweDRDLAorMHgwNiwgMHhCMCwgMHgwOSwgMHhDMSwgMHgxNywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NjcsCisweDAwLCAweDhGLCAweDA1LCAweDFDLCAweDAyLCAweEYwLCAweDk5LCAweEM0LCAweDI3LCAweDI0LCAweDlCLCAweDAzLCAweDdELAorMHgxMiwgMHhGNCwgMHg5OSwgMHhDMywgMHgyNywgMHgwMCwgMHg5RiwgMHgxMywgMHg3QywgMHhENiwgMHhGMCwgMHg0OSwgMHhDMSwKKzB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsCisweDAwLCAweDBGLCAweDA0LCAweDdDLCAweDAwLCAweEY0LCAweDIxLCAweEMyLCAweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDZDLAorMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMiwgMHg1QywgMHgwOCwgMHgzMSwgMHgwMSwgMHhDMCwKKzB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDU0LCAweDA0LCAweDdELCAweDAwLCAweEY0LAorMHg2MSwgMHgxMCwgMHgwNSwgMHhDMCwgMHgxMiwgMHgwMCwgMHg3MSwgMHgwNywgMHhDNCwgMHgwOSwgMHhEMCwgMHgyNywgMHg0MCwKKzB4MUMsIDB4MDAsIDB4NkQsIDB4NjAsIDB4NDQsIDB4MDEsIDB4MTIsIDB4MzYsIDB4NDEsIDB4MUMsIDB4MDEsIDB4N0QsIDB4NDcsCisweEM0LCAweDg1LCAweDUwLCAweDI3LCAweDQwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHg4MCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwRiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzAsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MjQsIDB4MDksIDB4RDEsIDB4QzQsIDB4NDAsIDB4QjMsIDB4MDAsIDB4OEQsIDB4MDAsCisweDE0LCAweDAzLCAweDEwLCAweDAwLCAweDQ4LCAweDM1LCAweDA5LCAweERELCAweDAzLCAweDQ1LCAweEFGLCAweDEwLCAweEFDLAorMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OCwKKzB4MjgsIDB4MDAsIDB4NkQsIDB4ODIsIDB4QjQsIDB4MDcsIDB4MTAsIDB4REYsIDB4NDAsIDB4M0EsIDB4MDMsIDB4RTEsIDB4MDAsCisweDg0LCAweDAzLCAweEQwLCAweDEzLCAweDQ4LCAweDM5LCAweDgwLCAweDdELCAweDgwLCAweEQ0LCAweDEzLCAweDFDLCAweDAyLAorMHg0MCwgMHgzOSwgMHgxMCwgMHhFRCwgMHgyMCwgMHhDNCwgMHgwMywgMHg0MSwgMHgxQywgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NjgsIDB4MDAsIDB4RUYsIDB4MDEsCisweDNDLCAweDA1LCAweDMwLCAweERFLCAweEMwLCAweDdDLCAweDAwLCAweDczLCAweDAxLCAweEFDLCAweDA3LCAweEYwLCAweDFFLAorMHhDMCwgMHg1QiwgMHgwMCwgMHhBRiwgMHgwMSwgMHg5QywgMHgxNywgMHgzMCwgMHgxMiwgMHhEMCwgMHg3OSwgMHg5MCwgMHhCRiwKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4MjAsIDB4MUUsIDB4QzAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDI1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweDMxLCAweDBELAorMHhDOCwgMHhCNywgMHgwNSwgMHg1RiwgMHgyMCwgMHg3MCwgMHgwMywgMHhGMSwgMHgwMSwgMHhDMCwgMHgxNiwgMHgwMCwgMHg1RiwKKzB4ODAsIDB4MkMsIDB4NkIsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MzYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweDBELCAweEQwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBMCwgMHg2RiwgMHgwMiwgMHhGNywgMHgwOSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhGQiwKKzB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0UsIDB4MDAsIDB4QkIsIDB4MDEsIDB4Q0MsIDB4MTcsIDB4QjAsCisweDk3LCAweEMwLCAweDdDLCAweDA4LCAweDdGLCAweDAxLCAweENDLCAweDA1LCAweEYxLCAweDFGLCAweEMwLCAweDBCLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgyOSwgMHgwMCwgMHg2RCwKKzB4NDgsIDB4QjAsIDB4MDMsIDB4RDAsIDB4NEUsIDB4QzAsIDB4M0IsIDB4MDEsIDB4NjEsIDB4MjIsIDB4QjQsIDB4OEIsIDB4RDAsCisweDQ2LCAweDQwLCAweEI4LCAweDA4LCAweDcxLCAweDAwLCAweEZDLCAweDEzLCAweDEwLCAweEM2LCAweDQwLCAweDM4LCAweDAwLAorMHg2RCwgMHg0OCwgMHg4NCwgMHgwMCwgMHhEMCwgMHg0MiwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjksIDB4MjAsIDB4RTUsIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDBGLCAweDQwLCAweDNDLCAweDEwLCAweEU5LCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDA3LCAweDQxLCAweDFCLCAweDAyLAorMHhCOSwgMHgwOCwgMHhBNCwgMHg3MywgMHg5MiwgMHgwNiwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyRCwgMHgwMCwgMHhBNCwgMHg2MSwKKzB4RDAsIDB4MEUsIDB4NjAsIDB4MjMsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDI4LCAweDIzLCAweDAwLCAweDlELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweEVDLCAweDYwLCAweEIyLCAweDA0LAorMHgwOSwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgxMCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgyMywgMHgzNiwgMHgwRiwKKzB4MTIsIDB4MzQsIDB4NDEsIDB4MjAsIDB4MjAsIDB4MEQsIDB4MDksIDB4NjAsIDB4MDQsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MUIsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweEE4LCAweDI1LCAweDAwLAorMHg5NywgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHg5QiwgMHgwMiwgMHg3QywgMHgwMywKKzB4RjAsIDB4MDUsIDB4ODAsIDB4MzcsIDB4MDAsIDB4NEIsIDB4MDUsIDB4RUMsIDB4MDcsIDB4QjAsIDB4MzQsIDB4RDAsIDB4MDQsCisweDgwLCAweERGLCAweDAxLCAweDZELCAweDA2LCAweEQwLCAweDBELCAweDQ4LCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDgsIDB4OTcsIDB4MEUsIDB4NzQsIDB4MEIsIDB4RTAsIDB4MDEsIDB4QTAsIDB4MzYsCisweDEwLCAweDVGLCAweDAyLCAweDVDLCAweDEzLCAweEYwLCAweDA1LCAweEMwLCAweDg3LCAweDBBLCAweERGLCAweDAyLCAweDVDLAorMHgwMiwgMHhGMCwgMHgwRCwgMHhDOCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDgsIDB4QUYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0UsCisweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYxLCAweDA3LCAweEM4LCAweDE3LCAweDIwLCAweDNCLCAweDE4LCAweENDLAorMHgwMywgMHhCMiwgMHgwNywgMHhEMCwgMHgwRSwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwMiwgMHgzMCwgMHgyMywgMHhDMSwKKzB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDEsIDB4MjYsCisweDIwLCAweDFELCAweDAxLCAweDQ0LCAweDA0LCAweEQwLCAweDBDLCAweEMwLCAweDM2LCAweDAwLCAweDFELCAweDAxLCAweDc0LAorMHgwRiwgMHhEMCwgMHgzMSwgMHg0MiwgMHhENywgMHgwMCwgMHg1RCwgMHg1MiwgMHgwNCwgMHgwMywgMHgxMCwgMHgzNSwgMHg0MCwKKzB4NDQsIDB4MDQsIDB4MUQsIDB4MDMsIDB4NzQsIDB4OEMsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODcsIDB4MDIsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDI2LCAweDgwLCAweDlELCAweDMxLCAweDY0LAorMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNywgMHg1MCwgMHgxNSwgMHg0MSwKKzB4NzcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDcsIDB4MDMsIDB4OTAsIDB4MUQsIDB4NDEsIDB4NjQsIDB4MDAsIDB4NUQsIDB4OTQsCisweDc0LCAweDQ2LCAweDEwLCAweDJELCAweDQ4LCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzIsIDB4MDAsIDB4OEQsIDB4MjAsIDB4MzQsIDB4ODMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4MDAsIDB4NEQsIDB4MDAsCisweDQ2LCAweDAzLCAweDEwLCAweDA0LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDI2LCAweDgyLCAweDFDLCAweDAwLAorMHg0MCwgMHg0MywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwKKzB4MjQsIDB4MDAsIDB4OUYsIDB4ODAsIDB4NkMsIDB4MDAsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAzLCAweDcwLCAweDA1LCAweEM0LCAweDE3LCAweDAwLCAweDFCLCAweDAwLCAweENDLCAweDAzLCAweEI0LCAweDA1LAorMHhDMCwgMHgwNCwgMHgwMCwgMHg0RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwMSwgMHhDNCwgMHgwNywgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjAsIDB4MkYsIDB4MDAsIDB4QkUsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAyLAorMHhDMCwgMHgzRiwgMHgyMCwgMHg3RiwgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwNiwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4RTAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEJGLCAweDAxLCAweEVDLCAweDMyLCAweEYyLCAweEM3LAorMHhDOCwgMHg1RiwgMHgwMiwgMHgzMywgMHhBMSwgMHhGQywgMHgwNywgMHgzMCwgMHg2QiwgMHhDOCwgMHgzRiwgMHgwOCwgMHhCMywKKzB4MDAsIDB4RUMsIDB4MDQsIDB4MTAsIDB4MUIsIDB4QzgsIDB4MUYsIDB4MDMsIDB4RkQsIDB4MDksIDB4Q0MsIDB4ODIsIDB4MzIsCisweDFGLCAweEM2LCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwOCwgMHg3RiwgMHgwMCwgMHhERCwgMHg4MSwgMHg3NCwgMHgzMiwgMHhEMiwgMHhDNSwgMHg0MCwgMHgwNywgMHgxMSwgMHhEMSwKKzB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4NjksIDB4NDgsIDB4RkYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4NzQsIDB4MDQsIDB4MTAsCisweDFELCAweDQwLCAweDk3LCAweDAxLCAweEVELCAweDA0LCAweDQ0LCAweDBFLCAweDEwLCAweDFGLCAweDQwLCAweDBGLCAweDYwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4NDQsIDB4NDAsIDB4MzcsIDB4MDEsIDB4QzUsIDB4MDEsIDB4MTQsIDB4ODMsIDB4MTAsCisweDI4LCAweDQwLCAweDMzLCAweDBBLCAweDAxLCAweDA4LCAweDc0LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDkzLCAweDAwLAorMHhDRCwgMHgwMCwgMHgxNCwgMHgyMiwgMHgxQSwgMHgwQywgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4ODIsIDB4RDAsCisweDY1LCAweDQwLCAweDI3LCAweDAwLCAweEQwLCAweDAxLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweDQyLCAweDM3LCAweDA4LAorMHg5NSwgMHgyMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHgxRCwgMHg0MiwgMHgzNywgMHgwOSwgMHhEQywgMHgwMCwgMHg1NCwgMHgxMywKKzB4MTAsIDB4MEQsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDA1LCAweDZDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweEIzLCAweDAxLAorMHhENywgMHgyMSwgMHgzQywgMHgwMywgMHgzNCwgMHgxRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg5MywgMHg4MCwgMHgyOCwgMHgwQywKKzB4MzIsIDB4MUQsIDB4QzEsIDB4NTcsIDB4MDAsIDB4REYsIDB4ODAsIDB4NUMsIDB4ODYsIDB4MzEsIDB4MEQsIDB4QzAsIDB4MEIsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLAorMHhGRSwgMHgwMCwgMHhGQywgMHgyMywgMHhGMSwgMHgwRiwgMHhDMCwgMHhCRiwgMHg0MCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywKKzB4QTAsIDB4M0IsIDB4QzAsIDB4MzcsIDB4MDQsIDB4QkYsIDB4MjMsIDB4RjAsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzEsIDB4MUYsCisweDAwLCAweEZGLCAweDAwLCAweDJDLCAweDAyLCAweEYwLCAweDBGLCAweEM0LCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwNywKKzB4NzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4ODAsIDB4N0MsIDB4NDMsIDB4MzQsIDB4MEQsIDB4QzAsIDB4MzMsCisweDQyLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDA4LCAweEMzLCAweDAwLCAweDRDLAorMHg0MywgMHg3MCwgMHgwRCwgMHhDMSwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QjQsCisweDA4LCAweERBLCAweDAxLCAweDc0LCAweDA3LCAweDAwLCAweDRELCAweDQ2LCAweEJGLCAweDAwLCAweEIxLCAweDAwLCAweDQ0LAorMHg0OCwgMHhEMCwgMHgyRCwgMHg0MCwgMHg3NywgMHgwNCwgMHhEMSwgMHgwMCwgMHg0MCwgMHgwRiwgMHgxMCwgMHgzRCwgMHg0MCwKKzB4NkYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsCisweDAwLCAweEMxLCAweDAwLCAweDIwLCAweDAyLCAweDEwLCAweDlDLCAweDQwLCAweDYwLCAweDI2LCAweEM1LCAweDAxLCAweDI0LAorMHgyNywgMHgxMCwgMHgwOCwgMHgwMCwgMHhGMywgMHgwMCwgMHg4OSwgMHgwMSwgMHgzNSwgMHg0NCwgMHhEMCwgMHgyQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QzUsIDB4MjksIDB4MDQsIDB4MkYsIDB4OTAsIDB4QkMsIDB4NDIsIDB4MEYsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweEI2LAorMHgwNiwgMHgxMCwgMHgxNCwgMHg1OCwgMHg2OCwgMHgxMCwgMHhFRCwgMHg1MSwgMHgzNCwgMHgwNywgMHgxMCwgMHgxQSwgMHg0MiwKKzB4N0IsIDB4MTAsIDB4ODksIDB4MDEsIDB4OTQsIDB4MDQsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NUIsIDB4QzIsIDB4RTUsIDB4MDMsCisweDg0LCAweDA2LCAweDkwLCAweDFFLCAweDQwLCAweDc3LCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwMCwgMHg3RSwgMHgwMiwgMHg3MCwgMHgwNCwgMHhDMCwKKzB4MjAsIDB4ODIsIDB4QzcsIDB4ODAsIDB4MkMsIDB4MTMsIDB4MzgsIDB4MEMsIDB4RTAsIDB4MzMsIDB4MDAsIDB4MEIsIDB4OTAsCisweDFDLCAweDMwLCAweEYwLCAweDBDLCAweEMwLCAweEI3LCAweEEwLCAweEM3LCAweDgwLCAweDBDLCAweDAzLCAweEYwLCAweDBDLAorMHhDMCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwKKzB4NzksIDB4QzAsIDB4RkYsIDB4MDAsIDB4RjQsIDB4MDIsIDB4RjgsIDB4MDcsIDB4QzgsIDB4MkIsIDB4MDgsIDB4RkIsIDB4MDgsCisweEZDLCAweDA3LCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEI3LCAweDEwLCAweEVDLCAweEEwLCAweEYwLCAweDBGLAorMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMSwgMHg3RSwgMHgyMywgMHg3MCwgMHgxRCwgMHhDMSwgMHgwQiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDgzLCAweEYwLCAweDhELCAweDgwLCAweDI3LCAweDAwLCAweERGLCAweDQwLCAweDdFLCAweDgzLCAweEYwLCAweDg5LAorMHg0MCwgMHgzNywgMHgwMywgMHg5RiwgMHgwMCwgMHg2RSwgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxNywgMHgxMCwgMHhEMywKKzB4MDAsIDB4N0UsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDFCLCAweEQwLCAweDBFLAorMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNiwgMHgwQiwgMHhEMCwgMHg0QSwgMHg0NCwgMHgzQiwgMHgwMiwgMHg4RCwKKzB4MDQsIDB4ODQsIDB4ODAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4OTMsIDB4MDEsIDB4RTEsIDB4MDQsIDB4QjQsIDB4ODIsIDB4RDgsCisweDRDLCAweDQwLCAweDRELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHgwMCwgMHg3OSwgMHgwMiwgMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg2MCwgMHg2QiwgMHgyNCwgMHhFRCwKKzB4MDEsIDB4QjQsIDB4OTcsIDB4RDAsIDB4NUUsIDB4NjIsIDB4N0IsIDB4MTgsIDB4MkQsIDB4MDEsIDB4QTQsIDB4QzQsIDB4RDIsCisweDFFLCAweDQxLCAweEZCLCAweDAwLCAweEUxLCAweDBELCAweEI0LCAweDJGLCAweEQxLCAweDFFLCAweDQwLCAweDEwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgxMCwgMHg0RCwKKzB4MDcsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MzgsIDB4NDksIDB4RTMsIDB4MjAsIDB4Q0QsIDB4MDUsIDB4MzQsIDB4MDMsIDB4RDAsCisweDFDLCAweDQwLCAweDMzLCAweDgwLCAweENELCAweDAwLCAweDA0LCAweDBGLCAweEQwLCAweDc0LCAweDQwLCAweDYzLCAweDQwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHg1OSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4N0YsIDB4MTAsIDB4N0MsIDB4NDEsIDB4RjAsCisweDE3LCAweEMwLCAweERGLCAweDAwLCAweDdGLCAweDA0LCAweDNDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLAorMHg3RiwgMHgxMSwgMHhBQywgMHgwNSwgMHhGMCwgMHgyNywgMHhDOCwgMHhERiwgMHgwOCwgMHg1MywgMHg4MCwgMHg3QywgMHgwMSwKKzB4RjEsIDB4MDQsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDAwLCAweDg3LCAweDA4LCAweDFGLCAweDgwLCAweDc4LCAweDAwLCAweEYwLCAweDgxLCAweEM4LCAweDg3LCAweDAwLAorMHgxQywgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHg4MSwgMHg4MiwgMHgwMiwgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywgMHgxMCwKKzB4RjAsIDB4MjEsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NzQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzgsIDB4NEIsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY3LCAweDAyLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHgzMCwgMHg0OSwgMHhDMCwgMHg2NywgMHgwNCwgMHg5RiwgMHhDOCwgMHg3QywgMHgwMiwKKzB4MzEsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4OEEsIDB4MzAsIDB4NDksIDB4QzAsIDB4NjcsCisweDA0LCAweDkzLCAweDA4LCAweDRDLCAweDIyLCAweDMwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFRSwgMHgwMCwgMHg5RCwgMHg0MCwgMHhGMCwgMHgwNiwKKzB4MTAsIDB4MEIsIDB4NDAsIDB4QTcsIDB4MDIsIDB4OUQsIDB4MDEsIDB4RjQsIDB4MEEsIDB4MTAsIDB4OUIsIDB4NDAsIDB4MjcsCisweDAxLCAweDlCLCAweDgwLCAweDQ0LCAweDA2LCAweDEwLCAweDI5LCAweDQ0LCAweDJGLCAweDAwLCAweEIxLCAweDAzLCAweDg0LAorMHgwMiwgMHgxMCwgMHgwQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDQsIDB4OUQsIDB4ODAsIDB4NzAsIDB4MjIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDQyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDA4LCAweDQ0LAorMHg0MywgMHgxNCwgMHgyOSwgMHg0MCwgMHgyNywgMHgwMiwgMHg4MCwgMHgwMCwgMHg0NCwgMHhDMiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4NzAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsCisweDE4LCAweDhELCAweDQyLCAweDM0LCAweDBBLCAweDE0LCAweDI4LCAweDQ0LCAweEIzLCAweDAwLCAweDhELCAweDAwLCAweDM2LAorMHgwMiwgMHgxMSwgMHgyOCwgMHg0MCwgMHgyMywgMHg0NSwgMHg4OSwgMHgxNCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4QTMsIDB4MDAsIDB4ODEsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NTAsIDB4QTAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDQ2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwNCwgMHgxMiwgMHgxMSwgMHhDMiwgMHgwNywgMHgxMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNCwgMHgzNCwgMHgxMSwgMHhDMCwKKzB4MDcsIDB4MDEsIDB4MTMsIDB4MDQsIDB4NEMsIDB4MDAsIDB4MzIsIDB4MDEsIDB4QzAsIDB4NDcsIDB4NDAsIDB4NTMsIDB4MDEsCisweDRDLCAweDA0LCAweDM0LCAweDExLCAweEQwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHhBNywgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHg4RSwgMHhGMCwgMHgzQiwgMHhDMCwKKzB4N0YsIDB4MjAsIDB4QkUsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4M0IsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RjcsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweEVGLCAweDAwLCAweDlDLCAweDIzLCAweEZELCAweDBBLCAweEYwLCAweDI5LAorMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4NkIsIDB4MDAsIDB4OTMsIDB4ODIsIDB4RkMsIDB4MTYsIDB4RjAsIDB4N0IsIDB4QzEsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDA2LCAweEYwLCAweDdCLCAweEMxLCAweDZDLCAweDAxLCAweEJFLCAweDgxLCAweENDLCAweDAyLCAweEYwLCAweDBCLAorMHhEMCwgMHhFQywgMHgwMSwgMHhCRiwgMHgwNywgMHhGQywgMHgxNiwgMHhGMCwgMHgxQiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4ODcsIDB4MDAsIDB4NTEsIDB4MDUsCisweDc0LCAweDU0LCAweEQwLCAweDMxLCAweDQwLCAweDQwLCAweDA1LCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQxLCAweDMxLAorMHg0NCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwQSwgMHg0NCwgMHgwMSwgMHhEMCwgMHgwMSwgMHg0MCwgMHg0NCwgMHgyMCwgMHgxRCwKKzB4MDMsIDB4NzQsIDB4MjgsIDB4RDIsIDB4MDEsIDB4NDgsIDB4NzAsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEEzLCAweDQwLCAweDg1LCAweDQ0LCAweDM2LCAweDBBLCAweEQ4LCAweDQ5LAorMHg0MCwgMHgyMiwgMHgwMCwgMHg4MSwgMHgyMSwgMHgzNCwgMHgwQSwgMHhEMSwgMHg0OCwgMHg0MCwgMHhBMCwgMHgwMCwgMHg4RCwKKzB4QTAsIDB4MDQsIDB4MDIsIDB4RDEsIDB4MDgsIDB4NjAsIDB4QTIsIDB4MTEsIDB4Q0QsIDB4MDYsIDB4MzQsIDB4ODIsIDB4RDAsCisweDI4LCAweDQwLCAweDQ4LCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBOCwgMHgyNSwgMHg4MCwgMHg5NSwgMHgwMSwgMHg3NCwgMHg4MiwgMHhEMCwgMHgxOSwgMHg0MSwgMHgyMiwgMHg0MCwgMHg5MSwKKzB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQxLCAweDI2LCAweDA1LCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHhCNywKKzB4MDAsIDB4RkMsIDB4MDYsIDB4RjIsIDB4MEEsIDB4RDAsIDB4QUUsIDB4MTAsIDB4OTMsIDB4MEIsIDB4N0MsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDI0LCAweDIwLCAweDlGLCAweDAzLCAweDRDLCAweDhFLCAweEYwLCAweDA4LCAweEMwLCAweEVFLCAweDAwLAorMHhCRiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOCwgMHhEMCwgMHgxNCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MEUsIDB4RjAsCisweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDM5LCAweEMwLCAweDI3LCAweDBDLAorMHg4RiwgMHg0OSwgMHg3RCwgMHgxMiwgMHhGMSwgMHg0OSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg1MiwKKzB4RjAsIDB4MDksIDB4ODEsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDAxLCAweDAxLCAweDEzLCAweDAyLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLAorMHgxQiwgMHgwOCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxNywgMHg4OCwgMHg3QywgMHgwMCwKKzB4RjEsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUIsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweERDLCAweDAwLAorMHg1MCwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwgMHg0MiwgMHg1QywgMHgwMiwgMHg1MSwgMHgwMCwgMHhGNCwgMHgwNSwKKzB4RDAsIDB4MTUsIDB4NDEsIDB4MUMsIDB4MDAsIDB4NTEsIDB4ODEsIDB4RjQsIDB4MDUsIDB4RDAsIDB4MDcsIDB4NDEsIDB4MTQsCisweDA0LCAweDcxLCAweDQwLCAweEY0LCAweDBELCAweEQwLCAweDI3LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhFMiwgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwNywKKzB4OTAsIDB4OUMsIDB4NDAsIDB4MjAsIDB4MjIsIDB4ODksIDB4MjAsIDB4MzQsIDB4MDYsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QjAsCisweDBBLCAweDg1LCAweDAxLCAweDM0LCAweDIzLCAweEQwLCAweDA4LCAweDQzLCAweDczLCAweDAwLCAweDg5LCAweDAwLCAweDM0LAorMHgwRSwgMHhEMCwgMHhBOCwgMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4ODAsIDB4QTgsIDB4MDAsIDB4RTksIDB4MDQsIDB4MzQsIDB4MEUsIDB4OTAsIDB4Q0EsIDB4NTAsIDB4MzgsCisweDAxLCAweEUxLCAweDAwLCAweEI0LCAweDBBLCAweEQwLCAweDBFLCAweDcwLCAweDQ4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LAorMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHg3QSwgMHgwMCwgMHg2MSwgMHgwMCwgMHhCNCwgMHg0MiwgMHhEMSwgMHgwQSwgMHg2MCwKKzB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NjgsCisweDAwLCAweEVCLCAweDA3LCAweEJDLCAweDA3LCAweEIwLCAweDFDLCAweEMwLCAweEQ4LCAweDAwLCAweEVCLCAweDAxLCAweEJDLAorMHgwNiwgMHhGMCwgMHg1RiwgMHhDMCwgMHg1OCwgMHgwMCwgMHhFNywgMHgwMSwgMHhCQywgMHgwNCwgMHhGMSwgMHgxNiwgMHhDMiwKKzB4NzMsIDB4MDAsIDB4RUIsIDB4MDcsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUEsIDB4QzAsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDI1LCAweDQwLCAweEQ3LCAweDAwLCAweDdDLAorMHgwMiwgMHg3NCwgMHgwOSwgMHhDMCwgMHgxNywgMHgwMCwgMHhERSwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MDMsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDQsIDB4QzYsIDB4MzUsIDB4MDIsIDB4NUYsIDB4MDAsCisweDdDLCAweDAyLCAweEZBLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhEQywgMHg0NywgMHgzMCwgMHgxRiwgMHhDMiwKKzB4NzgsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUIsIDB4NDEsIDB4NEQsIDB4MDAsIDB4RjEsIDB4MDksCisweENDLCAweDA2LCAweEUwLCAweDE2LCAweEUwLCAweDZDLCAweDAxLCAweEUzLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDlCLAorMHhDMiwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwKKzB4QjksIDB4MTAsIDB4RTEsIDB4MTAsIDB4ODQsIDB4MDIsIDB4MTIsIDB4MEIsIDB4NDEsIDB4MzgsIDB4MjAsIDB4RTEsIDB4MDAsCisweEI0LCAweDAyLCAweDEwLCAweDBBLCAweDQwLCAweDA4LCAweDAxLCAweEUxLCAweDA4LCAweDg0LCAweDAwLCAweEQxLCAweDBFLAorMHhEMCwgMHgyQywgMHg0MSwgMHg2MSwgMHgwMCwgMHhDNCwgMHgwMiwgMHgxMCwgMHg4QSwgMHg0MCwgMHg1NywgMHg2MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4RjksIDB4MDEsCisweDk0LCAweDAzLCAweDE0LCAweDhFLCAweDQwLCAweDFDLCAweDAwLCAweEUxLCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBBLAorMHg0MCwgMHgwOCwgMHgwMCwgMHhGOSwgMHgwMCwgMHhBNCwgMHgwMCwgMHhEMCwgMHg4RSwgMHg0MSwgMHgyOCwgMHgxMywgMHhFMSwKKzB4MDAsIDB4RDQsIDB4MjMsIDB4OTAsIDB4MEEsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDIzLCAweDAwLCAweEM5LCAweDAyLCAweDA2LCAweDA2LCAweDEwLCAweDA5LAorMHg0MiwgMHgxMCwgMHgwMCwgMHhDMSwgMHgwNiwgMHgzNCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDOSwKKzB4MDEsIDB4MjYsIDB4NEMsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MjAsIDB4MDQsIDB4NDEsIDB4MDAsIDB4MTQsIDB4ODEsIDB4OTAsCisweDA4LCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBOCwgMHgyNSwgMHgwMCwgMHhEQiwgMHgwMCwgMHg1QywgMHgwMywgMHgzMCwgMHgxRCwgMHhDMCwgMHg3NCwgMHg0OCwgMHhEMywKKzB4MTMsIDB4N0MsIDB4MDIsIDB4QjQsIDB4MUQsIDB4QzAsIDB4MDUsIDB4MDAsIDB4Q0IsIDB4MDEsIDB4NkMsIDB4NDYsIDB4RjAsCisweDFELCAweEUwLCAweDc0LCAweDAwLCAweEQzLCAweDQwLCAweDFELCAweDA2LCAweEIwLCAweDBELCAweEMwLCAweDU3LCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHg0MCwgMHhENywKKzB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4NDksIDB4RDAsIDB4MzcsIDB4MDIsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4NzAsCisweDhELCAweEQwLCAweDA3LCAweDAwLCAweEQ3LCAweDBDLCAweDVELCAweDAwLCAweEYwLCAweDA1LCAweEM5LCAweDM1LCAweDAyLAorMHg0RiwgMHgwMCwgMHg2NCwgMHgyMiwgMHg3NCwgMHgyOSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MTAsIDB4NEMsIDB4MEIsIDB4RjAsCisweDBGLCAweEMwLCAweDVDLCAweDAwLCAweEZGLCAweDgwLCAweEVDLCAweDBFLCAweEYwLCAweDhDLCAweEMwLCAweDA0LCAweDAwLAorMHhGRiwgMHgwOCwgMHhDQywgMHgwMCwgMHhGMCwgMHg4NywgMHhDMCwgMHg3RSwgMHgyMCwgMHhGMywgMHgwOCwgMHhDQywgMHgwMiwKKzB4MzMsIDB4MkYsIDB4QzYsIDB4MTMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgxLCAweDAwLCAweDI2LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDg3LCAweEQwLCAweDE5LCAweEMwLCAweEY2LCAweDAwLAorMHhDRCwgMHgwOSwgMHg0NCwgMHgwMCwgMHhEMiwgMHgxOSwgMHg0MCwgMHg0NCwgMHgwNCwgMHhEQywgMHgyMCwgMHg2QywgMHgwNCwKKzB4OTAsIDB4MDQsIDB4NDAsIDB4MjEsIDB4MDAsIDB4RDMsIDB4MDIsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MTksIDB4NDAsIDB4MTcsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDgyLAorMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHg0RCwgMHg1MCwgMHhCNCwgMHgwMiwgMHhERCwgMHgwMCwgMHg2NCwgMHgwMywKKzB4RDgsIDB4MDksIDB4NDAsIDB4NDQsIDB4MjAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MDUsIDB4NDQsIDB4MjQsCisweDAxLCAweEQwLCAweDEwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELCAweDQxLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MTIsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MDAsCisweDAwLCAweENELCAweDAwLCAweDI2LCAweDAwLCAweDkwLCAweDBELCAweDQwLCAweDM1LCAweDQwLCAweDQxLCAweDAwLCAweDA1LAorMHgwMiwgMHgxQywgMHgwNCwgMHg0NCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QjAsIDB4MTYsIDB4MDAsIDB4RkYsIDB4NDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MTQsCisweDIwLCAweERGLCAweDAwLCAweDZDLCAweDAzLCAweEQwLCAweDBELCAweEM0LCAweDA0LCAweDA4LCAweERGLCAweDAwLCAweDRDLAorMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNiwgMHgxMCwgMHg1MywgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMiwKKzB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsCisweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDFELCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMSwgMHhGMCwgMHgwQiwgMHhEMCwgMHgwRiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4NzcsIDB4NDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MTcsIDB4MjIsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDdGLCAweDAwLCAweEVGLCAweDA5LCAweERDLAorMHgwNiwgMHhGMiwgMHgxRiwgMHhDMCwgMHg3RCwgMHgwMCwgMHhFMywgMHgwMSwgMHhEQywgMHgxMiwgMHgzMCwgMHgxMywgMHhDMCwKKzB4NEUsIDB4MTAsIDB4QjMsIDB4MDAsIDB4REMsIDB4MzIsIDB4NzAsIDB4MkIsIDB4QzAsIDB4QkMsIDB4MDAsIDB4QjMsIDB4MjAsCisweEZDLCAweDEwLCAweDMwLCAweDAyLCAweDAwLCAweDBFLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwgMHg3NywgMHgwMCwgMHhERCwgMHgwNCwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxRCwgMHg0MCwKKzB4NzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MEUsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDAsIDB4NTEsIDB4NDMsCisweDQ0LCAweEIyLCAweDEwLCAweEExLCAweDQwLCAweEJDLCAweDAzLCAweDExLCAweDMyLCAweDc0LCAweDI2LCAweDUwLCAweDExLAorMHg0MCwgMHgwQywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4MTQsIDB4MDMsIDB4NTgsIDB4MEMsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDUsIDB4MDAsCisweDE3LCAweDA4LCAweDEwLCAweDAxLCAweDYwLCAweDA2LCAweDA4LCAweDgxLCAweDI4LCAweDE2LCAweDEyLCAweEQ4LCAweDQwLAorMHg0MCwgMHgzMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHgzNCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHg0RSwgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDQsCisweDU0LCAweDA3LCAweDEwLCAweDBELCAweDQ2LCAweDI2LCAweDAwLCAweEQ1LCAweDExLCAweDQ0LCAweDBDLCAweDEyLCAweDExLAorMHg0MCwgMHg3NCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0NCwgMHg0NiwgMHgxOCwgMHgxMCwgMHg0MCwgMHgzNiwgMHgwMCwgMHgxNSwKKzB4MDEsIDB4NzQsIDB4NDMsIDB4NTIsIDB4MTksIDB4NDEsIDB4MEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDA4LCAweERGLCAweDAwLCAweDFFLCAweDA2LCAweDcwLCAweEQ1LAorMHhDMCwgMHhEMywgMHgwMCwgMHhDNywgMHgwMywgMHg1QywgMHgwQywgMHgzMCwgMHgzMCwgMHhDNCwgMHg1MiwgMHgwNCwgMHg5MiwKKzB4MDcsIDB4NUQsIDB4MDQsIDB4NzAsIDB4MzksIDB4QzAsIDB4MzQsIDB4MDAsIDB4OTcsIDB4NjEsIDB4N0MsIDB4OEQsIDB4MzAsCisweDM5LCAweEMwLCAweDJBLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHg4MCwgMHgzRCwgMHgzMCwgMHhGRiwgMHgwMSwgMHhFQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHg3RCwgMHgwMiwgMHhGQiwKKzB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NkYsIDB4MjAsIDB4QkMsIDB4MDAsIDB4RjAsCisweDAzLCAweEQwLCAweDNELCAweDAwLCAweDNCLCAweDIwLCAweEZDLCAweDI0LCAweEYxLCAweDBCLCAweEMwLCAweDFGLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwKKzB4MDAsIDB4NUMsIDB4MDMsIDB4QjAsIDB4NDksIDB4QzAsIDB4QTUsIDB4MDAsIDB4REIsIDB4MDIsIDB4NEMsIDB4MDAsIDB4RjAsCisweDIxLCAweEMwLCAweDE3LCAweDAyLCAweEQ3LCAweDA1LCAweDZDLCAweDAyLCAweEYxLCAweDA5LCAweEMwLCAweDM3LCAweDQ0LAorMHg5MywgMHgwMiwgMHg2QywgMHgwQiwgMHhGMCwgMHgyOSwgMHhDNCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4NEQsIDB4NDAsIDB4MEYsIDB4MTUsCisweDM4LCAweDQwLCAweDI0LCAweDEwLCAweDkxLCAweDAwLCAweDJDLCAweDQ0LCAweEQxLCAweEIxLCAweDQ0LCAweDU0LCAweDEwLAorMHhEMSwgMHgwMSwgMHg3NCwgMHhCMiwgMHhEMiwgMHgwMSwgMHg0QSwgMHhGRiwgMHgwMCwgMHg5MCwgMHgzMCwgMHgzNCwgMHg4MywKKzB4RDEsIDB4MDgsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDMyLCAweDAwLCAweERELCAweDAwLCAweDE0LCAweDI2LCAweDEwLCAweDlDLCAweDQ4LCAweDMxLCAweDAwLAorMHhDQywgMHgwOCwgMHgyNSwgMHgwMiwgMHhEMCwgMHgxMCwgMHg0MCwgMHgxMSwgMHgwMCwgMHg4NSwgMHgwMiwgMHgzNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NDIsIDB4MzYsIDB4MDAsIDB4ODUsIDB4MjUsIDB4MjQsIDB4MDAsIDB4RDAsIDB4QjAsIDB4NDEsIDB4MEQsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDA4LCAweDdBLCAweDAwLAorMHhGRCwgMHgwMSwgMHhDNCwgMHgxRSwgMHgxOCwgMHg5RiwgMHg0MCwgMHg3QywgMHgxMCwgMHhGNSwgMHg0MSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MTIsIDB4MDAsIDB4NTgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4MDAsIDB4NzMsCisweDA0LCAweEU1LCAweDAxLCAweEI0LCAweDA0LCAweEQxLCAweDE2LCAweDAwLCAweDM0LCAweDIwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHgxQywgMHgwMiwKKzB4MzAsIDB4OEMsIDB4QzAsIDB4QjEsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDMsIDB4RjAsIDB4RTAsIDB4QzMsIDB4MTEsCisweDAwLCAweDg3LCAweDAwLCAweDI4LCAweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDMyLCAweDMwLCAweDQ3LCAweDAwLCAweDJDLAorMHgwMywgMHhGMCwgMHgwMCwgMHhDMCwgMHg0OSwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QTAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MTIsIDB4NzAsIDB4OEUsIDB4QzAsIDB4M0IsCisweDAyLCAweEZCLCAweDg4LCAweEVDLCAweDIzLCAweEYwLCAweDgyLCAweEMwLCAweDE5LCAweDAwLCAweEJCLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgyMCwgMHg3QiwgMHg0MCwgMHhGQywgMHgyMywgMHhGMCwgMHg4RiwgMHhDMCwKKzB4MDksIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDA2LCAweDcwLCAweDBELCAweEUwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDQ0LAorMHgwMSwgMHhCMiwgMHgwNSwgMHhDMiwgMHgxMywgMHgwMCwgMHhDQiwgMHgwMCwgMHg2QywgMHgwNSwgMHg3MiwgMHgwRCwgMHhDMiwKKzB4QjcsIDB4MDMsIDB4REQsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MTUsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDk4LCAweDM5LCAweDEwLCAweEVDLCAweDAwLCAweEI0LAorMHg4MiwgMHgxMCwgMHgwRSwgMHg1MiwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHg5NCwgMHgwMywgMHg5MCwgMHgwNiwgMHg0MCwKKzB4MUIsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QzUsIDB4MDEsIDB4MTAsIDB4MEUsIDB4NDgsIDB4M0IsIDB4MDUsIDB4RUQsIDB4MDAsCisweDg0LCAweDAwLCAweDkwLCAweDBFLCAweDQwLCAweDRDLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgyMCwgMHhBQywgMHg5MSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxRiwgMHg0OCwKKzB4NzksIDB4MjAsIDB4RkQsIDB4MDEsIDB4QjQsIDB4NDcsIDB4OTAsIDB4MUUsIDB4NjAsIDB4NUIsIDB4MDAsIDB4RTksIDB4MDEsCisweEE0LCAweDA3LCAweDUwLCAweDFFLCAweDQxLCAweDdCLCAweDAwLCAweENELCAweDAzLCAweEI0LCAweDA3LCAweEQ4LCAweDE0LAorMHg2NCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4NDAsIDB4RDAsIDB4NUMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MDUsCisweDM0LCAweDAzLCAweDk4LCAweDI0LCAweDQwLCAweDkzLCAweDA4LCAweEMxLCAweDA4LCAweDA0LCAweDAzLCAweDEwLCAweDJDLAorMHg0MSwgMHgzMywgMHg4OCwgMHhERCwgMHgwMCwgMHgxNCwgMHgxRiwgMHg5MCwgMHgyQywgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDEsCisweEZDLCAweDA5LCAweEYwLCAweDA3LCAweDQwLCAweDFELCAweDAwLCAweDdGLCAweDAxLCAweEZDLCAweDAxLCAweEIwLCAweDc3LAorMHhDMCwgMHg1QiwgMHgwMCwgMHg2QiwgMHgwMSwgMHhFQywgMHgyOSwgMHg3MCwgMHgwNywgMHhDMCwgMHgxNywgMHgwMCwgMHg3RiwKKzB4MDgsIDB4RkMsIDB4MDEsIDB4RjAsIDB4NDcsIDB4NDAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLCAweDFGLCAweEMyLCAweDdDLCAweDAwLCAweDAwLCAweEExLAorMHg4MCwgMHgwNiwgMHgwMSwgMHgxQywgMHgwOCwgMHg1OCwgMHgwMCwgMHhDMywgMHgwMSwgMHg4OCwgMHgwNywgMHgwMiwgMHgxRiwKKzB4NDIsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MjAsIDB4MUYsIDB4NDAsIDB4NjAsIDB4MjAsIDB4QjAsCisweDAxLCAweEQwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywgMHgxMiwgMHhGOSwgMHgwOSwgMHhDOCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDQsIDB4MUMsIDB4NTYsIDB4MzEsIDB4ODksIDB4QzMsIDB4MjcsIDB4MDQsIDB4OTcsIDB4MDUsIDB4NDAsIDB4MDYsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDRDLCAweDgyLCAweEYzLCAweDM5LCAweEMxLCAweDQzLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwKKzB4MDMsIDB4NzQsIDB4MEEsIDB4RDgsIDB4NDgsIDB4NDAsIDB4MjQsIDB4MTAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4MTQsCisweDE5LCAweDQ0LCAweEU3LCAweDgxLCAweDlCLCAweDEyLCAweDQ0LCAweDBFLCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDIwLAorMHg5RCwgMHgwRSwgMHg0NCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEIsIDB4OTgsCisweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDlELCAweDAyLCAweDU2LCAweDAyLCAweDUwLCAweDA5LCAweDQ4LCAweDY3LCAweDAwLAorMHg5NSwgMHgwMCwgMHg1NCwgMHgxQSwgMHhEMCwgMHgwRCwgMHg2MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4NTAsIDB4MjksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDI4LCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLAorMHg4RCwgMHg4MCwgMHgxNCwgMHhEMiwgMHg1MCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgxMCwgMHg1MiwKKzB4RDAsIDB4NDgsIDB4NjEsIDB4MzMsIDB4MEQsIDB4OEQsIDB4MTQsIDB4MTQsIDB4MDIsIDB4NTAsIDB4NDgsIDB4NDEsIDB4NTMsCisweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDMwLCAweDA0LCAweDAwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg5MCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHg4MCwgMHg1QywgMHgxMCwKKzB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MTQsIDB4MTQsIDB4NEQsIDB4MTAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDcsCisweDAxLCAweDFGLCAweDA0LCAweDRELCAweDUwLCAweDcwLCAweDQxLCAweEUyLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyNywgMHgwMCwgMHhCRiwgMHg5NCwgMHhGQywgMHgwMiwKKzB4QzAsIDB4MEUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4ODAsIDB4RUMsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDAwLCAweEVDLCAweDUyLCAweEYwLCAweDRCLCAweDQxLCAweDI3LCAweDA1LCAweEJGLCAweDE0LCAweEVDLAorMHgwMiwgMHg3MCwgMHgwQiwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4NzksIDB4MEEsIDB4QzAsIDB4MjUsCisweDAwLCAweEJGLCAweDAwLCAweENDLCAweDA2LCAweEIxLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweERELAorMHgxMiwgMHhGMCwgMHg5OSwgMHhDMCwgMHg2RCwgMHgwMywgMHhCOSwgMHgwRCwgMHhGOCwgMHgwMiwgMHgzMCwgMHgwQiwgMHhDOCwKKzB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsCisweDAwLCAweDFELCAweDQxLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDQ0LAorMHgyOCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHg0MCwgMHg0NCwgMHgxMCwgMHhEMCwgMHhCMSwgMHg0MCwKKzB4QzQsIDB4MDMsIDB4MTEsIDB4MEYsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NTAsIDB4NzAsIDB4NjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDc0LAorMHgwMiwgMHhENCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgyMCwgMHg5RCwgMHgwMCwgMHgxNywgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MzYsIDB4NjIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODksIDB4MDAsCisweDM0LCAweDAyLCAweDE0LCAweDA4LCAweDQ4LCAweDQ5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNSwgMHgwMCwgMHg5RCwgMHg4MCwgMHg3NCwgMHg0MiwgMHgxMiwgMHgwOSwgMHg0NCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NTIsIDB4NDYsIDB4MDAsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDhFLCAweEQwLCAweDA5LCAweDYxLCAweDI0LCAweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwKKzB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzgsIDB4MEEsIDB4RjIsIDB4MDgsIDB4QzAsIDB4MjUsIDB4ODAsIDB4OUYsIDB4MDQsCisweDVDLCAweDBBLCAweEIyLCAweDA5LCAweEMyLCAweDI3LCAweDA4LCAweDlGLCAweDE5LCAweDdDLCAweDAyLCAweEYwLCAweDM5LAorMHhDMCwgMHgyNSwgMHgyMCwgMHg5QSwgMHgwMywgMHg3RSwgMHgxNiwgMHgyMCwgMHgwOSwgMHhFNSwgMHgxNSwgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDEyLCAweEYwLCAweDI5LCAweEMwLCAweEE2LCAweDAwLCAweDlGLCAweDI4LCAweDJDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg5MCwgMHg0QywgMHgwMiwgMHhGMCwgMHg0OCwgMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4ODksIDB4N0UsIDB4MjIsIDB4RjIsIDB4MDgsIDB4RTAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDE4LCAweEIyLCAweDQxLAorMHhDMCwgMHgwNCwgMHgyMCwgMHgxRiwgMHgwNiwgMHg0QywgMHgyOCwgMHhGMiwgMHg2MSwgMHhDMCwgMHgwNSwgMHgwMiwgMHgxRiwKKzB4MDIsIDB4NkMsIDB4MDgsIDB4QjAsIDB4MjEsIDB4QzIsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTIsIDB4MUMsIDB4MDgsIDB4MzAsCisweDIxLCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgxMSwgMHhCMCwgMHgwRCwgMHgxMCwgMHgxNywgMHg1OCwgMHgxNCwgMHgwMCwgMHg2RCwKKzB4MDMsIDB4NDUsIDB4MDUsIDB4RDAsIDB4MTcsIDB4NDQsIDB4OUYsIDB4MDIsIDB4NkQsIDB4MDAsIDB4QzAsIDB4MDEsIDB4MTAsCisweDA1LCAweDQwLCAweDlGLCAweDAyLCAweDdELCAweDgwLCAweDQ0LCAweDAxLCAweDEwLCAweDI3LCAweDAwLCAweDUwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4OEEsIDB4OTAsIDB4QUMsIDB4MDQsIDB4MzAsIDB4MDAsIDB4NDUsIDB4MDIsIDB4MTIsIDB4MDYsIDB4RDEsCisweDJDLCAweDQwLCAweDkxLCAweDAwLCAweENELCAweDIyLCAweDI0LCAweDE3LCAweDkwLCAweDBDLCAweDQwLCAweDM3LCAweEEyLAorMHhDRCwgMHgwOCwgMHgxNiwgMHhBNywgMHgxMCwgMHg0QywgMHg1MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4RjQsIDB4MEEsIDB4MTAsCisweDBFLCAweDQwLCAweDM4LCAweDAwLCAweDZELCAweDEwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDYxLCAweDFCLCAweDgwLAorMHhGRCwgMHgzMCwgMHhBMCwgMHg0NywgMHg5MCwgMHg0RSwgMHg0MCwgMHgzQiwgMHhBMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwMywKKzB4NTAsIDB4MkMsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA2LCAweEIwLCAweDFFLCAweEMwLCAweDc4LCAweDIwLAorMHg2RiwgMHgwMSwgMHg5QywgMHgwNywgMHhGMCwgMHgxRSwgMHhFMCwgMHg1OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhFOCwgMHgwNywKKzB4QjAsIDB4QkUsIDB4QzAsIDB4N0IsIDB4MjAsIDB4RkYsIDB4MjEsIDB4MUMsIDB4MDcsIDB4MzQsIDB4MUUsIDB4QzAsIDB4NDQsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLAorMHhERiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg0RiwgMHgwMCwgMHg0RCwgMHg4MywKKzB4RjAsIDB4MEQsIDB4RTAsIDB4MTcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NUMsIDB4MDMsIDB4NzAsIDB4NkQsIDB4QzQsIDB4MTcsCisweDA4LCAweDVFLCAweDQwLCAweDdDLCAweDAzLCAweEIwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MTcsIDB4QzAsIDB4N0QsIDB4MDAsIDB4N0YsIDB4MDEsIDB4REMsIDB4MjcsIDB4RjEsIDB4OUYsIDB4QzAsIDB4NUYsCisweDAwLCAweEVGLCAweDAxLCAweEVDLCAweDg1LCAweEIwLCAweDlGLCAweDAwLCAweDVGLCAweDAyLCAweEYzLCAweDRELCAweEM4LAorMHgwNywgMHgyMCwgMHgxRiwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4MTgsIDB4MzksIDB4MDAsIDB4NkQsIDB4NDIsIDB4QjQsIDB4MTIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MzgsCisweDAwLCAweDI5LCAweDQ0LCAweDgwLCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDFCLCAweDAwLCAweDZELCAweDAyLCAweDk0LAorMHgwMSwgMHhEMCwgMHgwRSwgMHg0MywgMHgxQSwgMHgwMCwgMHhFMSwgMHgxOCwgMHg4NCwgMHg1MywgMHgxMCwgMHgwNywgMHg0MSwKKzB4NTUsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksCisweDAwLCAweEVELCAweDAwLCAweEY0LCAweDAyLCAweDE4LCAweDJFLCAweDUwLCAweEI5LCAweDAwLCAweDZELCAweEIyLCAweDgwLAorMHg0MywgMHhEMCwgMHgwRSwgMHg0MiwgMHgxQiwgMHgwNCwgMHhFRCwgMHgxOCwgMHg5NSwgMHgwMSwgMHg5MCwgMHgwRSwgMHg0MiwKKzB4M0EsIDB4MzAsIDB4RTEsIDB4NDQsIDB4QjUsIDB4MDMsIDB4MUMsIDB4MEYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgwQSwgMHgxOCwgMHgwQywgMHg1OCwgMHgzMSwgMHgwOCwgMHg0OSwgMHgwMSwgMHgwNCwgMHgwNywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4RDMsIDB4MDAsIDB4NEQsIDB4MDMsIDB4MDQsIDB4OUMsIDB4RDAsIDB4MUQsIDB4NDgsIDB4MDIsIDB4ODAsIDB4OTEsIDB4MDEsCisweDM0LCAweDEzLCAweDEwLCAweDMwLCAweDAwLCAweDExLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3NCwgMHgwQiwgMHgzMCwgMHgyRCwgMHhDMCwKKzB4MzEsIDB4MDAsIDB4Q0YsIDB4MDIsIDB4NEQsIDB4MjMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4RDcsIDB4MDAsIDB4Q0YsIDB4MDksCisweDVDLCAweDFBLCAweEIwLCAweDNGLCAweDQwLCAweDI2LCAweDIwLCAweDkxLCAweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDJELAorMHhDMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MzcsIDB4MDAsIDB4MUYsIDB4MDEsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REIsIDB4MDIsCisweDdDLCAweDAzLCAweEYwLCAweDZELCAweEM0LCAweDE3LCAweDAxLCAweERGLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDBELAorMHhDMSwgMHgyNiwgMHgwMCwgMHgxRiwgMHgwMiwgMHg0QywgMHgwMiwgMHhGMSwgMHg0RCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4M0YsIDB4MDgsIDB4M0YsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNELCAweDA4LCAweDc3LCAweDAwLCAweENDLCAweDAzLCAweEUwLCAweDlGLAorMHhEMCwgMHgxQywgMHgwMCwgMHhGOSwgMHgwMCwgMHg4RCwgMHgwMiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwKKzB4MTAsIDB4NDgsIDB4ODIsIDB4RDAsIDB4MDcsIDB4QzAsIDB4MTMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDAwLCAweDFELCAweDAzLCAweDc0LCAweDg2LCAweEQyLCAweDNDLAorMHg0MSwgMHgzNCwgMHgwMCwgMHg1MSwgMHgyMSwgMHg0NCwgMHgwMywgMHhEMCwgMHg1QywgMHg0MCwgMHg1NCwgMHgwOCwgMHhERCwKKzB4NDMsIDB4NDQsIDB4NEUsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjQsIDB4MDAsIDB4MUQsIDB4MDcsIDB4NkMsIDB4QTIsIDB4RDIsCisweDAxLCAweDQwLCAweDE3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHgxRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHg1NSwKKzB4MDMsIDB4NDUsIDB4MDcsIDB4RDIsIDB4MEQsIDB4NDIsIDB4NTUsIDB4MDQsIDB4OUQsIDB4ODEsIDB4NTQsIDB4MDYsIDB4OTAsCisweDBELCAweDUwLCAweEM0LCAweDAwLCAweDFELCAweDAxLCAweDU0LCAweDAzLCAweEQwLCAweDg5LCAweDQxLCAweDA3LCAweDA4LAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgzMCwgMHgwMCwgMHgwRCwKKzB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MDksIDB4NDAsIDB4MzQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsCisweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDRELCAweDAwLCAweDA0LCAweDAwLCAweDE4LCAweDBDLCAweDQwLCAweDAwLCAweDAwLAorMHgxRCwgMHgwMCwgMHgzNiwgMHg4MywgMHhEMCwgMHgwMCwgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjEsIDB4MzYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDBELCAweEMwLCAweDM1LCAweDAwLCAweDU3LCAweDAwLCAweDQ4LCAweDAzLCAweEYwLCAweDBELCAweDQwLCAweDM0LCAweDEwLAorMHg1QiwgMHgwMCwgMHg0OCwgMHgwMiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MDEsIDB4QzgsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEEwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEI0LCAweDAwLCAweEYwLCAweDBBLCAweEMwLCAweDNGLCAweDIwLAorMHg2RiwgMHgwMCwgMHhGQywgMHgwMywgMHhFMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg3RSwgMHgwMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTcsCisweDIxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDdGLCAweDAwLAorMHhFRiwgMHgwOSwgMHhDQywgMHgyNywgMHhGMiwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhCQywgMHgyNywKKzB4RjAsIDB4M0YsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RUUsIDB4MDksIDB4Q0MsIDB4MDcsIDB4MzEsIDB4MUUsIDB4QzAsIDB4N0MsCisweDAwLCAweEYzLCAweDA5LCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHg0NywgMHgxMCwgMHgxRCwgMHg0NCwgMHg0NCwgMHgxMCwKKzB4RDAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NDgsIDB4NDcsCisweDAwLCAweDFELCAweDQ0LCAweDQ0LCAweDA0LCAweDUwLCAweDExLCAweDQwLCAweDQ0LCAweDAwLCAweDExLCAweDg0LCAweDc0LAorMHgwNCwgMHgxNCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsCisweDA4LCAweENDLCAweDgwLCAweDM2LCAweDEzLCAweEQwLCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LAorMHgwMywgMHgxMSwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHg4MCwgMHg3NCwgMHgwMywgMHgxOCwgMHgwQywgMHg0MCwKKzB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDUsCisweDAwLCAweDFELCAweDAwLCAweDU0LCAweDgwLCAweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDE4LCAweDFELCAweDAwLCAweDc0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwRCwgMHgwMCwgMHg0NSwgMHgwMCwgMHg1MCwgMHgwMSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MTEsIDB4NjAsIDB4NzYsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDIwLCAweDVDLAorMHgwMywgMHhGMiwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4ODMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4RDMsIDB4MDAsCisweDNDLCAweDgzLCAweDMxLCAweDBELCAweEMwLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4QjAsCisweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEQwLCAweDBGLCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLAorMHhEMSwgMHgxRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MzUsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4ODAsCisweDRDLCAweDIzLCAweDM0LCAweDhELCAweEMwLCAweDc0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELAorMHhDMCwgMHgzNCwgMHgwMSwgMHhEMywgMHgwMCwgMHg0QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MEQsIDB4MDAsCisweDQwLCAweDQwLCAweDEwLCAweDEwLCAweDUwLCAweDA0LCAweDAwLCAweDFBLCAweDA1LCAweDQ0LCAweDAwLCAweDEwLCAweDExLAorMHhDMCwgMHg4NiwgMHgwMCwgMHgxRCwgMHgwMywgMHgwNCwgMHgwNCwgMHgxMCwgMHgxMSwgMHg0MCwgMHg4NSwgMHgwOCwgMHgxMSwKKzB4MTEsIDB4NkUsIDB4MkMsIDB4RDAsIDB4MzAsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEE4LCAweDcyLCAweDAyLCAweENELCAweDAwLCAweDA2LCAweDA3LCAweDAwLCAweDlDLAorMHg0MCwgMHg3MCwgMHg4MCwgMHhDMSwgMHgwMSwgMHgyMCwgMHg4NywgMHgxMCwgMHgwQywgMHg0MiwgMHgzMCwgMHgwNCwgMHhDRCwKKzB4MjAsIDB4MDQsIDB4MjMsIDB4MUEsIDB4MUMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4ODEsIDB4MjQsIDB4MDcsIDB4RDAsCisweDNDLCAweDQwLCAweDFGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHg0OCwgMHgwMiwgMHgzRCwgMHgwMSwgMHg4NCwgMHgwNCwgMHgxMCwgMHg5MiwgMHg0MCwgMHg0OCwgMHgwMCwgMHgzOSwKKzB4MDEsIDB4RTQsIDB4MDQsIDB4MTAsIDB4MzMsIDB4NDAsIDB4NEEsIDB4MjAsIDB4MkQsIDB4OTEsIDB4ODUsIDB4MTQsIDB4MTgsCisweDEzLCAweDQxLCAweDQ5LCAweDAwLCAweDIxLCAweDAxLCAweEE0LCAweDQ0LCAweEQwLCAweDEyLCAweDQxLCAweDFCLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwKKzB4ODAsIDB4NDQsIDB4MjMsIDB4MzQsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MjYsIDB4QzMsIDB4MDAsIDB4MkQsIDB4MjMsIDB4MzAsCisweDBDLCAweDQwLCAweDMwLCAweDIwLCAweENGLCAweDQ0LCAweDBFLCAweDAzLCAweDM0LCAweDBDLCAweEMwLCAweDMwLCAweDQwLAorMHhEMywgMHgwOCwgMHgyNSwgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MEQsIDB4MDgsIDB4M0YsIDB4ODAsIDB4RkQsIDB4MDAsIDB4RjAsCisweDAyLCAweEMwLCAweDBCLCAweDgwLCAweDJGLCAweDAwLCAweERDLCAweDIwLCAweEYwLCAweDgyLCAweEUwLCAweDBGLCAweDAyLAorMHgzRiwgMHgwMCwgMHhCQywgMHgxMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwQiwgMHgwMCwgMHgzRiwgMHgwMCwgMHg1RSwgMHgwMCwKKzB4RjAsIDB4MTMsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDMzLCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDgzLCAweEYwLCAweDFELCAweEMwLCAweDM0LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3MywgMHgwMCwgMHhEMywgMHgwMCwgMHgxQywgMHgwMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0UsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4NTQsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDA5LCAweDIwLAorMHgyMSwgMHgyMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgxMCwgMHgyRCwgMHg0MCwgMHhCNCwgMHgwMCwKKzB4RDAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4NTIsIDB4MDIsIDB4NDAsIDB4MEIsCisweDAwLCAweDIxLCAweDAwLCAweEI2LCAweDAwLCAweEQxLCAweDAyLCAweDQwLCAweDQ4LCAweDYwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwgMHhFNSwgMHhDMSwgMHhCNCwgMHgwNywKKzB4RDgsIDB4MUYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NEEsIDB4N0IsCisweDg4LCAweEUxLCAweDAxLCAweDk0LCAweDA3LCAweDk0LCAweDFFLCAweDQwLCAweDdGLCAweDAwLCAweEU5LCAweDAxLCAweEI0LAorMHg4NywgMHhEMiwgMHgxRSwgMHg1MiwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MjgsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDksIDB4MDAsIDB4NTYsIDB4MDAsCisweDA4LCAweDBELCAweDgwLCAweDc2LCAweDAwLCAweEQwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDAxLCAweDQwLCAweDA0LAorMHgwMCwgMHhEMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwOCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NDgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTEsCisweDAwLCAweDU3LCAweDAwLCAweDNDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDEwLCAweDAwLCAweDVGLCAweDAwLCAweDdDLAorMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHgxNywgMHg0MCwgMHg0MywgMHgwMCwgMHgxQywgMHgwMSwgMHhCNCwgMHgwNSwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGNCwgMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwKKzB4OEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDgsIDB4NzAsIDB4MjMsIDB4QzAsIDB4OEYsIDB4NDAsIDB4MzcsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5MywgMHgwOSwgMHg3QywgMHgyNiwgMHgzMCwgMHgxOSwgMHhDMCwKKzB4NjcsIDB4MDAsIDB4OTMsIDB4MDgsIDB4N0MsIDB4MEEsIDB4MzEsIDB4MTksIDB4QzgsIDB4NjYsIDB4MDIsIDB4OUYsIDB4ODAsCisweDZDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDY3LCAweDQwLCAweDkyLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKKzB4MjYsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4NTEsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDEsCisweDc0LCAweDAyLCAweDEwLCAweDg5LCAweDQwLCAweDY0LCAweDAxLCAweDlELCAweDAwLCAweDQ0LCAweDEyLCAweDEwLCAweDM5LAorMHg0OCwgMHgyMywgMHgwMiwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDEsIDB4QjEsIDB4ODAsCisweEY0LCAweDAyLCAweDEwLCAweDhCLCAweDQwLCAweDJGLCAweDAxLCAweEIxLCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBCLAorMHg0MCwgMHgyRSwgMHgyMCwgMHhCRCwgMHgwMCwgMHhDNCwgMHgwMiwgMHgxMCwgMHg4QiwgMHg0MCwgMHgyRiwgMHg4MCwgMHhCNSwKKzB4MDAsIDB4RjQsIDB4NTIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDJDLCAweDAwLCAweEExLCAweDAyLCAweEY0LCAweDBBLCAweDUwLCAweDBBLAorMHg0MCwgMHgyRiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgwQSwgMHgwNCwgMHgxQSwgMHg0MCwgMHgyQSwgMHgwMCwgMHhCRCwKKzB4MDAsIDB4ODUsIDB4MDIsIDB4MTgsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QTUsIDB4MDIsIDB4QjQsIDB4MDIsIDB4RDAsCisweDBBLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwgMHgxMywKKzB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MEYsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MzIsCisweDAxLCAweEMyLCAweDE3LCAweDQwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDc3LCAweEMwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHg0MCwgMHg5RiwKKzB4MDEsIDB4N0MsIDB4ODYsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjIsCisweDQ5LCAweDQxLCAweDI1LCAweDIwLCAweDlGLCAweDE0LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5QiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDBBLCAweEMwLCAweDJCLCAweDIwLAorMHhBRiwgMHg0MiwgMHg4RCwgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyOCwgMHgwMCwgMHhCMywgMHgwMiwgMHhDQywgMHgwMiwKKzB4RjAsIDB4MEEsIDB4QzAsIDB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDE1LCAweDQ0LCAweDU0LCAweEQwLCAweDAxLCAweDQ4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwMCwgMHg3NCwgMHgxNCwgMHgxMCwgMHg1MSwgMHg0MSwgMHgwNywgMHgwMCwgMHgxRCwgMHg4MSwgMHg0NCwgMHgwMCwKKzB4NTAsIDB4MDEsIDB4NDgsIDB4MDQsIDB4MTAsIDB4MTUsIDB4MDEsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLAorMHg4RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0OCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHg0MiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4QTAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NTIsIDB4MjAsCisweDAwLCAweEQxLCAweDA0LCAweDA0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTQsIDB4MDksIDB4NDQsIDB4MjcsCisweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDgyLCAweDUwLCAweDA5LCAweDQ2LCAweDI0LCAweDAwLCAweDk1LCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0QsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyMCwgMHgwOCwgMHhBMywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MTQsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAyLCAweDFGLCAweDAwLCAweDRDLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhEMCwKKzB4MDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MTAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MTMsIDB4MDAsCisweDdDLCAweDA0LCAweDMwLCAweDAxLCAweEMxLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgyMCwgMHg0NCwgMHgwMSwgMHhEMSwgMHgwNSwgMHg0MCwKKzB4MTcsIDB4MTAsIDB4NUQsIDB4MDEsIDB4NzAsIDB4MDEsIDB4RDAsIDB4MDcsIDB4NDAsIDB4REMsIDB4MDAsIDB4NzEsIDB4ODEsCisweDk0LCAweDAxLCAweDUwLCAweDE2LCAweDQxLCAweDFGLCAweDAwLCAweDUxLCAweDAwLCAweEY0LCAweDA1LCAweDExLCAweDI2LAorMHg1MCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwKKzB4NjIsIDB4MDAsIDB4REQsIDB4MDgsIDB4MDQsIDB4MDcsIDB4RDAsIDB4ODgsIDB4NDgsIDB4MzMsIDB4MDAsIDB4OEQsIDB4ODAsCisweDc0LCAweDAzLCAweDUwLCAweDA0LCAweDQwLCAweEEwLCAweDA2LCAweEM5LCAweDExLCAweDA2LCAweDAxLCAweDEwLCAweDRDLAorMHg0OCwgMHgzMywgMHgwQywgMHhDMSwgMHg4MCwgMHgzNCwgMHgwNSwgMHg5MCwgMHgxOCwgMHg0NCwgMHg1MCwgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDgsCisweDg0LCAweDUzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDEwLCAweEI0LCAweDQzLCAweEQwLCAweDFGLAorMHg0MCwgMHg1QywgMHgyMCwgMHhGOSwgMHg1MCwgMHhENCwgMHg4MCwgMHg1MCwgMHgwQSwgMHg0MCwgMHgxRiwgMHgyMCwgMHhFMSwKKzB4MDgsIDB4RjQsIDB4NDcsIDB4OTEsIDB4MkIsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LCAweDAwLCAweEZGLCAweDA1LCAweDhDLCAweDA3LCAweEYwLCAweDFFLAorMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHg4NywgMHg3MCwgMHgxRSwgMHhDMCwgMHg0OCwgMHgwMCwgMHhFQiwKKzB4MDEsIDB4OEMsIDB4MDcsIDB4MzAsIDB4MTIsIDB4QzAsIDB4N0IsIDB4MDAsIDB4QTMsIDB4ODEsIDB4QkMsIDB4MDcsIDB4QjQsCisweDFBLCAweEMwLCAweDUwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhCOCwgMHgzNSwgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgyMywgMHhGMSwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MDYsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsCisweDAxLCAweEMwLCAweDM3LCAweDAwLCAweDlELCAweDAwLCAweDNDLCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDQzLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHg3RiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDYsIDB4MzAsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RTMsIDB4MDEsIDB4OEMsIDB4NDcsIDB4MzAsCisweDE3LCAweEMwLCAweDRGLCAweDAwLCAweDNGLCAweDAxLCAweDlDLCAweDA0LCAweDcwLCAweDE2LCAweEM0LCAweDVDLCAweDAwLAorMHhFRiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxQiwgMHhDMiwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4MzksIDB4MDQsIDB4QUQsIDB4MEMsIDB4QjQsIDB4MDIsIDB4MTEsCisweDhFLCAweDQwLCAweDNCLCAweDEwLCAweEUxLCAweDAwLCAweDg0LCAweDIzLCAweDEwLCAweDBFLCAweDQwLCAweDBCLCAweDEwLAorMHg2RCwgMHgwQSwgMHg4NSwgMHg2MCwgMHg1NSwgMHg4NiwgMHhDMCwgMHg5QSwgMHgxMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywKKzB4RDAsIDB4MEEsIDB4NDQsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDM5LCAweDAwLCAweEFELCAweDA4LCAweEY0LCAweDAyLCAweDEwLCAweDhFLCAweDQwLCAweDNGLCAweDA0LAorMHhFMSwgMHgxMCwgMHhFNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MSwgMHgwQiwgMHgwMCwgMHgyRCwgMHgxMCwgMHg5NCwgMHgwMCwKKzB4RDAsIDB4MDcsIDB4NDEsIDB4M0EsIDB4MDAsIDB4QkQsIDB4MEEsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDEsIDB4MjMsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDMzLCAweDAwLAorMHg4RCwgMHgwMywgMHg3NCwgMHgwQSwgMHgxMCwgMHg1QywgMHg0MCwgMHhFMywgMHgwMCwgMHhDMSwgMHg0MSwgMHgyNCwgMHgwRSwKKzB4MTAsIDB4MUQsIDB4NDAsIDB4ODMsIDB4MDIsIDB4NUQsIDB4MDMsIDB4MDQsIDB4MDQsIDB4RDAsIDB4MTQsIDB4NDAsIDB4NzIsCisweDEwLCAweDlELCAweDAxLCAweDI0LCAweDBCLCAweEQxLCAweDE4LCAweDQwLCAweDFCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHg4OSwgMHg3QywgMHgwMywKKzB4MzAsIDB4MkQsIDB4QzAsIDB4NzcsIDB4NDAsIDB4RDMsIDB4MDEsIDB4NkMsIDB4NDYsIDB4MzQsIDB4MTksIDB4QzAsIDB4ODMsCisweDAwLCAweDVGLCAweDQxLCAweDFDLCAweDA4LCAweEYwLCAweEIxLCAweEMwLCAweDc2LCAweDA0LCAweERGLCAweDExLCAweDJDLAorMHgwMiwgMHhGMCwgMHgxRCwgMHhDMiwgMHg3NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4NzgsIDB4MTcsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDEwLCAweDVDLCAweDAyLCAweEYwLCAweDBELCAweEMxLCAweDA3LCAweDA0LCAweERGLCAweDAwLCAweDdDLAorMHg0OCwgMHg2MCwgMHgwMSwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwRiwgMHhGMCwgMHgyRCwgMHhDMSwKKzB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsCisweDA2LCAweEYzLCAweDA0LCAweEZDLCAweDBCLCAweDMwLCAweDlGLCAweEM4LCAweDNGLCAweDA0LCAweEZGLCAweDgwLCAweENDLAorMHg1NiwgMHhGMCwgMHgwRiwgMHhEMCwgMHgwQywgMHgwMCwgMHg3MywgMHgxMCwgMHhDQywgMHgwMCwgMHhCMCwgMHgwMywgMHhDMCwKKzB4MkYsIDB4MDQsIDB4QjIsIDB4MDMsIDB4QzgsIDB4NDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjQsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDcyLCAweDQwLCAweDkxLCAweDAxLCAweDc0LAorMHgwNiwgMHgxMCwgMHgxRCwgMHg0NCwgMHgzNywgMHgwOCwgMHhDRCwgMHg0MCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgzRCwgMHg0MCwKKzB4NDQsIDB4MzAsIDB4REYsIDB4QzAsIDB4NDUsIDB4MDQsIDB4MTAsIDB4NzEsIDB4NDQsIDB4NjMsIDB4MTAsIDB4RDEsIDB4MDEsCisweDQ0LCAweDE3LCAweEIwLCAweDBELCAweDQwLCAweDI3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNiwgMHgwMCwgMHg5MSwgMHg4MCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4REQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDEsIDB4NDYsIDB4MDAsIDB4MTEsIDB4MDAsCisweDQ0LCAweDBDLCAweDlBLCAweDE1LCAweDQyLCAweDc3LCAweDAwLCAweEQ1LCAweDAwLCAweDc3LCAweDA3LCAweDAwLCAweDQ5LAorMHg0MSwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsCisweDA2LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDQ0LCAweDI4LCAweDQ1LCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDA0LAorMHg0MCwgMHgzMywgMHg2MCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwNCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzYsIDB4MDAsIDB4RDMsIDB4MDAsCisweDdDLCAweDAzLCAweDEwLCAweDBELCAweEMwLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDRELCAweDAyLCAweEYwLCAweDBELAorMHhDMCwgMHgwNCwgMHgwMCwgMHgwMSwgMHg4MCwgMHg0QywgMHgwMCwgMHhCNCwgMHgwNSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDcsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEJDLCAweDAyLCAweEYxLCAweDBGLAorMHhDMCwgMHgyQiwgMHgxMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHg4MCwgMHgwRiwgMHgyMCwgMHg3RiwKKzB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkIsIDB4NDAsIDB4Q0MsIDB4ODMsIDB4RjAsCisweDA3LCAweEM0LCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHg3RiwgMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxQiwgMHhEMCwgMHgyOCwgMHgwMSwgMHhBNywKKzB4MDEsIDB4RkMsIDB4MzIsIDB4MzAsIDB4MUEsIDB4QzAsIDB4M0MsIDB4MDAsIDB4QjMsIDB4MTQsIDB4RUMsIDB4MTIsIDB4MzAsCisweDhCLCAweEMwLCAweDNELCAweDBDLCAweEJGLCAweDA4LCAweENDLCAweDAyLCAweEYxLCAweDBGLCAweEMwLCAweDBGLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwgMHg3NywgMHgwMCwgMHg5RCwKKzB4MDEsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MTEsIDB4NDIsIDB4NjQsIDB4MDAsIDB4NTEsIDB4MDEsIDB4NDQsIDB4MEEsIDB4MTAsCisweDE5LCAweDQwLCAweEZDLCAweDEyLCAweDkxLCAweDAyLCAweDQ0LCAweDNBLCAweDEwLCAweDQ5LCAweDQwLCAweEJDLCAweDAwLAorMHg5RCwgMHgwMCwgMHg0NCwgMHgyQSwgMHhEMCwgMHgwRCwgMHg0NCwgMHgwRiwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzEsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4ODUsIDB4NTAsCisweDA0LCAweDQ4LCAweDAwLCAweDgyLCAweEQ1LCAweDAwLCAweDE0LCAweDE4LCAweDUwLCAweDA5LCAweDQwLCAweDMyLCAweDAwLAorMHg4NSwgMHgwMCwgMHgzNCwgMHg0MCwgMHg1MCwgMHg4OCwgMHg0MiwgMHgzMSwgMHgyNCwgMHgwOSwgMHgwNiwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDM3LCAweDAwLCAweERELCAweDExLCAweDQ1LCAweDA1LCAweDEwLCAweDExLCAweDQ0LCAweDQ0LCAweDAwLAorMHhEMSwgMHgwMywgMHgwNCwgMHg4QywgMHgxMSwgMHg4OSwgMHg0MCwgMHgzNiwgMHg4MCwgMHg5NCwgMHg0MSwgMHgxNCwgMHgwNCwKKzB4NTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4MDAsIDB4MEQsIDB4MTEsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4MjAsIDB4MEYsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDAwLAorMHhDRiwgMHgwMSwgMHgwQywgMHgwNCwgMHg3MCwgMHgxMCwgMHg0MCwgMHg0NCwgMHgyMCwgMHhDNywgMHgwMywgMHg1QywgMHgwRSwKKzB4NzAsIDB4NDAsIDB4RDAsIDB4MzIsIDB4MDgsIDB4MTcsIDB4QTMsIDB4N0MsIDB4OTYsIDB4NzEsIDB4MTEsIDB4QzAsIDB4MzUsCisweDEwLCAweDFGLCAweDAzLCAweDRFLCAweDBFLCAweEY4LCAweDBELCAweEMwLCAweDBCLCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGRiwgMHg4MCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MkIsIDB4MDAsIDB4N0YsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MEIsIDB4QzAsIDB4M0QsCisweDYwLCAweDlCLCAweDAwLCAweEVDLCAweDAyLCAweEIwLCAweDAwLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweEEwLCAweEZGLAorMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MkEsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDMsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MDcsCisweDI0LCAweEQzLCAweDA0LCAweDVDLCAweDAyLCAweDMwLCAweDIxLCAweEMwLCAweDM2LCAweDAxLCAweDE3LCAweDAwLCAweDVDLAorMHg4MiwgMHhGMCwgMHgyOSwgMHhDMCwgMHg3NiwgMHgwNCwgMHgxMywgMHgwMiwgMHg3QywgMHgwNiwgMHgzMCwgMHgwRCwgMHhDMiwKKzB4QTksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsCisweDA4LCAweERDLCAweDAxLCAweDQ2LCAweDA1LCAweDEwLCAweDQxLCAweDQ4LCAweDI3LCAweDAwLCAweDUxLCAweDgxLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgxOSwgMHhDNCwgMHhCRSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMSwgMHgwOSwgMHg0OCwKKzB4QkMsIDB4MDAsIDB4MTEsIDB4ODAsIDB4NzQsIDB4MjIsIDB4MTAsIDB4MEYsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMyLCAweDA4LCAweENELCAweDAwLCAweDA2LAorMHgzMywgMHgxMCwgMHgwNCwgMHg0MCwgMHgyMywgMHgwMiwgMHg0OSwgMHgwMiwgMHgxNCwgMHgwMCwgMHgxMCwgMHgyQywgMHg1MSwKKzB4MzMsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4QjIsIDB4MDAsIDB4ODEsIDB4ODAsCisweDM0LCAweDAwLCAweDExLCAweDBDLCAweDQ4LCAweDBGLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHg3QSwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NCwgMHgwNywgMHgxMSwgMHgxMiwgMHg0MCwKKzB4N0IsIDB4MTAsIDB4NzksIDB4MTEsIDB4OTQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDEsIDB4N0IsIDB4MDAsIDB4NkMsIDB4MDEsCisweDk0LCAweDA3LCAweEQ4LCAweDFFLCAweDQwLCAweDcwLCAweDQyLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweDVDLCAweDFFLAorMHg0MCwgMHgzNywgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwKKzB4MzIsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MDQsIDB4MjEsIDB4MTIsIDB4ODQsIDB4QzAsIDB4MzMsIDB4MDEsIDB4Q0IsIDB4MDAsCisweDFDLCAweDIxLCAweDMwLCAweDRDLCAweEMwLCAweDMzLCAweDAwLCAweEM3LCAweEU4LCAweDFDLCAweDgxLCAweEYwLCAweDI0LAorMHhDMCwgMHgzMiwgMHgwMiwgMHhDMywgMHgwMCwgMHg3QywgMHgxMSwgMHgzMCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDgxLCAweEYwLCAweDgzLCAweEMwLCAweDNGLCAweDAwLCAweEY3LCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLAorMHhDQywgMHgzQSwgMHgwMCwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwMiwgMHhGRiwKKzB4NDgsIDB4RkMsIDB4MDEsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEyLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA1LAorMHhDMiwgMHgxMywgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHg1RiwKKzB4NDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MTUsIDB4QzAsIDB4MzQsIDB4MDEsIDB4NTMsIDB4MDEsIDB4NEQsIDB4MDEsIDB4MTAsCisweDBELCAweEM0LCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHg5OCwgMHgzOSwgMHgwOCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2MSwKKzB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0EsIDB4MDQsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDA3LCAweDUwLCAweEJDLCAweDAwLCAweEYxLCAweDAwLCAweEM0LCAweDAzLCAweDEwLCAweDRFLCAweDQwLCAweDRGLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhGRCwKKzB4MTEsIDB4QTYsIDB4MDUsIDB4RDAsIDB4MTYsIDB4NDAsIDB4NUIsIDB4MDQsIDB4NjUsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RDAsCisweDBBLCAweDUwLCAweDdBLCAweDkzLCAweDZELCAweDAxLCAweEI0LCAweDA1LCAweDUwLCAweDFFLCAweDQwLCAweDc4LCAweDQxLAorMHhFNSwgMHgwMywgMHg4NCwgMHgwNywgMHgxMCwgMHg5RSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MTIsIDB4MDYsIDB4QkQsIDB4RDAsCisweDIwLCAweDQwLCAweDMzLCAweDAwLCAweDQxLCAweDAxLCAweDc0LCAweDQ3LCAweEQwLCAweEVDLCAweDQwLCAweDMyLCAweDgwLAorMHhDRCwgMHgwQSwgMHgzNCwgMHgyQiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzNCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNCwgMHg4QiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE3LCAweEE4LCAweDE3LCAweDAwLCAweDZGLCAweDAyLCAweEVDLCAweDA5LCAweEYyLCAweDA3LCAweEMwLCAweDFCLCAweDBBLAorMHg3NywgMHgwNywgMHhGQywgMHgxNSwgMHhGMCwgMHgwNiwgMHhDMCwgMHgxNiwgMHgwMCwgMHg3RiwgMHgyMSwgMHhGNCwgMHgyRCwKKzB4NzgsIDB4ODcsIDB4QzEsIDB4MTQsIDB4MDAsIDB4NzcsIDB4MDAsIDB4Q0MsIDB4MzksIDB4MzAsIDB4MDUsIDB4QzAsIDB4NUYsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLAorMHgxRiwgMHg4MiwgMHg3RCwgMHgwMCwgMHhGMywgMHgwMSwgMHgwMSwgMHgwNywgMHgwMCwgMHgxRiwgMHgxMCwgMHg3QywgMHgwMCwKKzB4QzAsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MjAsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDE5LCAweDA0LCAweDdDLCAweDA4LCAweEY0LCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwNCwgMHg1QywgMHgwRSwKKzB4RjAsIDB4NDksIDB4QzQsIDB4MjQsIDB4MDgsIDB4OUIsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzAsIDB4OTksIDB4MDIsIDB4NjcsCisweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDk3LCAweDgwLCAweDNDLAorMHgwRSwgMHg3MCwgMHg0OSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MUEsIDB4RDAsIDB4NzgsIDB4NDQsIDB4MjQsCisweDEwLCAweDgxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDI5LCAweDQ0LCAweEE0LCAweDA4LCAweDlELCAweDAwLCAweDc0LAorMHg4MiwgMHhEMSwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5MSwgMHg4MCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsCisweDAwLCAweDlELCAweDAwLCAweDU0LCAweDAyLCAweEQwLCAweDBELCAweDQ0LCAweDM0LCAweDIwLCAweDk5LCAweDA4LCAweDQ0LAorMHgwMiwgMHgxMCwgMHgwOSwgMHg2MCwgMHgyNywgMHgwNCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDEsIDB4OTUsIDB4MDAsIDB4NzQsIDB4NDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI4LCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDA0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0OCwgMHgyMCwgMHgwNSwgMHg4MSwgMHgwMCwgMHgwNCwgMHg1MiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MjEsIDB4MTUsIDB4OEQsIDB4MTQsIDB4MzQsIDB4NTIsIDB4RDAsIDB4NDgsIDB4NDEsIDB4MzMsIDB4MDUsIDB4ODEsIDB4MTQsCisweDM0LCAweDUyLCAweDEwLCAweDQ4LCAweDQwLCAweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDQsIDB4MDEsIDB4MUIsIDB4MDAsIDB4NEMsIDB4MTAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjEsIDB4MUYsIDB4MDYsCisweDdDLCAweDEwLCAweEYwLCAweDQxLCAweEM4LCAweDA3LCAweDAxLCAweDE3LCAweDA0LCAweDdDLCAweDEwLCAweDcwLCAweDAxLAorMHhDNCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwKKzB4MjcsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjIsIDB4MEIsIDB4RDAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDUyLCAweEYwLCAweDBBLCAweEMwLCAweDI2LCAweDAwLCAweEJGLCAweDEwLCAweEZDLCAweDUyLCAweEYwLCAweDRCLAorMHhDMSwgMHgyNywgMHgwNSwgMHhCRiwgMHgxNCwgMHhGQywgMHg1MiwgMHhGMCwgMHg2OSwgMHhDMywgMHg2NywgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MjUsIDB4MDAsIDB4QkYsIDB4MDAsCisweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDZGLCAweDYwLCAweEIzLCAweDAwLCAweDdDLCAweDI2LCAweEYwLCAweDBBLAorMHhDMCwgMHgyRCwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHg1MiwgMHgzMCwgMHgzOSwgMHhDMSwgMHhBRiwgMHgwMCwgMHg5RiwKKzB4MDksIDB4Q0MsIDB4MDYsIDB4RjAsIDB4NUIsIDB4RTAsIDB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDA3LCAweDAwLCAweDVELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLAorMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgyQywgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwKKzB4MDEsIDB4NzQsIDB4MTgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4NDcsIDB4MDksIDB4MUQsIDB4MEIsIDB4NDQsIDB4MDAsIDB4RDAsCisweDAxLCAweDQwLCAweDczLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgyMCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhBMywgMHgwMCwgMHg4NSwKKzB4MDEsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDAsIDB4QTMsIDB4ODAsIDB4ODEsIDB4MjYsIDB4MzQsIDB4NDIsIDB4MTQsCisweDA4LCAweDQwLCAweEEzLCAweDAwLCAweDhELCAweDA0LCAweDA0LCAweDBBLCAweEQwLCAweDY4LCAweDQxLCAweDRCLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NDYsIDB4MDYsIDB4RDMsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDQsIDB4OTUsIDB4MDQsIDB4NzYsIDB4MTIsIDB4RDIsCisweDQ5LCAweDQwLCAweDI0LCAweEMwLCAweDkxLCAweDAyLCAweDc0LCAweDgyLCAweDAwLCAweDA5LCAweDQxLCAweDI3LCAweDAwLAorMHg5RCwgMHgwMiwgMHg0NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0OCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MDIsIDB4NDQsIDB4MTYsIDB4RjIsCisweDM5LCAweEMxLCAweEE3LCAweDAwLCAweDk3LCAweDAyLCAweDdDLCAweDE2LCAweEYyLCAweDA5LCAweEMwLCAweDI1LCAweDAwLAorMHg5MywgMHhDMiwgMHg3QywgMHgxMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOSwgMHg0RCwgMHg2RSwKKzB4RDgsIDB4MDksIDB4NDgsIDB4MTcsIDB4MjgsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAyLCAweDdELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDYzLCAweDAyLAorMHg5QiwgMHhBMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgxOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgxNiwKKzB4RjAsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MDEsIDB4N0MsIDB4NDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NEIsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLAorMHgxRiwgMHgwNCwgMHg2QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwKKzB4RjAsIDB4MDEsIDB4RDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzIsIDB4MDQsCisweDA0LCAweDFGLCAweDAyLCAweDRDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwMiwgMHhDNCwgMHg0NSwKKzB4QzIsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MjAsIDB4N0QsIDB4MjEsIDB4N0MsIDB4MDEsIDB4RDAsIDB4MTYsIDB4NTgsIDB4MUMsCisweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQxLCAweDA1LCAweEMwLCAweDFFLCAweDA0LCAweDVELCAweDAwLCAweEM0LAorMHg4OSwgMHgxMCwgMHgwNSwgMHg1MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4OEQsIDB4OEIsIDB4MjQsIDB4MDYsIDB4QzgsIDB4Q0MsIDB4MDAsIDB4NTMsCisweDA0LCAweDBDLCAweDA1LCAweDM0LCAweDAzLCAweEQxLCAweEQ0LCAweDQwLCAweDQwLCAweDAwLCAweEM1LCAweDAwLCAweDc0LAorMHgwMywgMHhEMCwgMHgwQywgMHg2MCwgMHg3MiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwQiwgMHgxNSwgMHg4QywgMHg0MCwKKzB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MzgsCisweDAwLCAweEFELCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDBBLCAweDQwLCAweEJCLCAweDgwLCAweDJELCAweDgyLCAweDk0LAorMHgwMywgMHhEMCwgMHgwNywgMHg0MCwgMHg4OCwgMHgwMCwgMHhFRCwgMHgyNCwgMHhCNCwgMHgyMywgMHhEMCwgMHgxRiwgMHg0MCwKKzB4M0EsIDB4MDAsIDB4RkQsIDB4ODAsIDB4MDQsIDB4MDcsIDB4MTIsIDB4MUUsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEwLCAweDc5LCAweDAwLCAweEFGLCAweDAxLCAweEFDLAorMHgwNiwgMHhGMCwgMHgxQSwgMHhDOCwgMHg1QiwgMHgwMCwgMHgyRiwgMHgwMSwgMHhCMCwgMHgwNywgMHhGMCwgMHgxMiwgMHhDQSwKKzB4NzgsIDB4MDAsIDB4RTcsIDB4QTMsIDB4QkMsIDB4ODcsIDB4RjAsIDB4N0YsIDB4QzQsIDB4NUEsIDB4MDAsIDB4RkYsIDB4MEYsCisweDg5LCAweDA3LCAweDMyLCAweDFGLCAweEMwLCAweDQ0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHg4RiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4MUYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MTAsIDB4REYsIDB4MDAsCisweDdDLCAweDBCLCAweEYwLCAweDJELCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweEE0LCAweDdDLCAweDAyLCAweEYwLCAweDBELAorMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKzB4N0QsIDB4MDAsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MjYsIDB4RjAsIDB4OUIsIDB4QzAsIDB4NkYsIDB4MDIsIDB4MzMsIDB4MDksCisweERDLCAweEVGLCAweDczLCAweDE3LCAweEM4LCAweDVDLCAweDIyLCAweEZELCAweDA5LCAweEZDLCAweDBGLCAweEYxLCAweDNGLAorMHhDMCwgMHg3RiwgMHgwMiwgMHhGNywgMHg4MSwgMHhEQywgMHgwNSwgMHgxMCwgMHg5QiwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzksIDB4MDAsIDB4QUQsIDB4NDgsCisweDg1LCAweDIyLCAweEQwLCAweDBBLCAweDAwLCAweDNCLCAweDAwLCAweDIxLCAweEMwLCAweDg0LCAweEUzLCAweDEwLCAweDg2LAorMHg0MSwgMHg5OCwgMHgwMCwgMHhFRCwgMHgxOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4RjQsIDB4MTEsIDB4MTIsIDB4Q0IsIDB4NDAsIDB4NTUsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDJELCAweDEwLCAweDg0LCAweDJBLCAweEQ4LCAweDBBLAorMHg2MSwgMHgyQiwgMHg2MCwgMHgzMSwgMHg1MCwgMHg5NCwgMHgyMywgMHg1MSwgMHgwNiwgMHg1MCwgMHgzQSwgMHg5OCwgMHhFRCwKKzB4MDgsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MUIsIDB4MDAsIDB4RTEsIDB4MDAsIDB4OTQsIDB4NDMsIDB4OTksCisweDBGLCAweDQ0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgyMCwgMHgzMSwgMHgwMCwgMHgwRCwgMHg0NywgMHgwNCwgMHgwMCwgMHhEOCwgMHg1OCwgMHg0MCwgMHhCMywgMHgwMiwgMHgwMSwKKzB4NTMsIDB4MDQsIDB4MDcsIDB4NTgsIDB4MzQsIDB4NDAsIDB4MTIsIDB4ODAsIDB4Q0QsIDB4NDEsIDB4MjQsIDB4MzMsIDB4RDAsCisweDNDLCAweDQwLCAweDIzLCAweDUwLCAweEMxLCAweDQyLCAweDM0LCAweDQ2LCAweDk4LCAweDBDLCAweDQwLCAweDExLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgxMCwgMHg5RCwKKzB4MDAsIDB4NEMsIDB4MDIsIDB4RDAsIDB4MTksIDB4QzAsIDB4OTMsIDB4NDAsIDB4MTMsIDB4MDEsIDB4REMsIDB4MEIsIDB4NzAsCisweDA1LCAweEMwLCAweDA2LCAweDAwLCAweEZGLCAweDAzLCAweEZDLCAweDBCLCAweEY4LCAweDNGLCAweEM0LCAweDI3LCAweDAwLAorMHhGMywgMHgwRiwgMHg1QywgMHgwMiwgMHhCNCwgMHgwRCwgMHg0MCwgMHg1NSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsCisweDA5LCAweEMwLCAweDM3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDEzLCAweDkwLCAweDQ1LCAweEMwLCAweDA1LCAweDAwLAorMHhERiwgMHgxMCwgMHg3NCwgMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHg4NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4NzAsIDB4MEQsIDB4ODgsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDg0LCAweDA4LCAweDNFLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEMwLCAweDAzLCAweEM4LCAweDFGLCAweDAwLAorMHgzQiwgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgxOCwgMHgwMCwgMHhGQSwgMHgwMCwgMHhBQywgMHgwMywKKzB4QjAsIDB4MEYsIDB4QzgsIDB4MDYsIDB4MTAsIDB4RUYsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4ODAsIDB4MTMsCisweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDAwLAorMHg5RCwgMHgwMSwgMHg3NCwgMHgwNSwgMHhEMCwgMHgxMSwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHg4MywgMHg3NCwgMHgwMywKKzB4RDAsIDB4MTQsIDB4NDAsIDB4OTQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QzQsCisweDA0LCAweERELCAweDAwLCAweDQ0LCAweDFDLCAweEQyLCAweDBELCAweDQyLCAweDE3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNiwKKzB4RDAsIDB4NjksIDB4NDAsIDB4MjcsIDB4MDAsIDB4MTksIDB4MTAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzUsIDB4NjAsIDB4MTQsCisweDAwLCAweEQ1LCAweDAwLCAweDY0LCAweDAzLCAweEQwLCAweDBDLCAweDYwLCAweDY1LCAweDAwLCAweERELCAweDIwLCAweDU0LAorMHgwNCwgMHhEOCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsCisweDAwLCAweDAwLCAweDIwLCAweDM0LCAweDgzLCAweEQwLCAweDA1LCAweDQwLCAweDEwLCAweDAwLCAweEM1LCAweDAwLCAweDM0LAorMHgwMywgMHgxMCwgMHgwQywgMHg2MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNiwgMHgwMCwgMHhEOCwgMHgwOCwgMHg0MCwKKzB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MzYsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDFCLCAweDIwLCAweEZDLAorMHgwMywgMHhGMiwgMHgwNSwgMHhEMCwgMHgxNCwgMHgxMCwgMHhENywgMHgwMCwgMHhFQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwKKzB4MDQsIDB4MTAsIDB4RkYsIDB4MjAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweEE4LCAweDNGLCAweDAwLCAweDJGLCAweDAwLCAweEZDLAorMHg4MCwgMHhGMSwgMHgwQiwgMHhDMCwgMHgzQiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwKKzB4MUYsIDB4MjAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MjAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEUwLCAweDE3LCAweDIxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1RiwgMHg0MCwgMHhCMywgMHgwMCwgMHhGQywgMHgxMiwgMHhGMCwgMHgxNywgMHhDMCwKKzB4N0YsIDB4MDAsIDB4NzMsIDB4ODEsIDB4RkMsIDB4MTAsIDB4RjEsIDB4QzMsIDB4QzAsIDB4MkMsIDB4MDIsIDB4MzMsIDB4ODEsCisweENDLCAweDIzLCAweDMwLCAweDBGLCAweEMwLCAweDQ4LCAweDEwLCAweEJGLCAweDIwLCAweEZDLCAweDA1LCAweDMwLCAweDFGLAorMHhDMCwgMHgwQywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwKKzB4NzcsIDB4MDgsIDB4OTEsIDB4NEIsIDB4NzQsIDB4MkUsIDB4RDIsIDB4MTksIDB4MDAsIDB4N0YsIDB4MDAsIDB4NTEsIDB4MDEsCisweDc0LCAweDJDLCAweEQwLCAweEUxLCAweDQwLCAweEE0LCAweDAxLCAweDExLCAweDAxLCAweEM0LCAweDFCLCAweDUxLCAweEJCLAorMHg0OCwgMHg2NCwgMHgwMCwgMHg4RCwgMHg0RSwgMHg3NCwgMHgwNywgMHgxMCwgMHgwRiwgMHg0OCwgMHgwNCwgMHg2MCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4NDAsCisweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDA5LAorMHg0MCwgMHhBMCwgMHg4MCwgMHgxNSwgMHgwMCwgMHgwNCwgMHgxQiwgMHgxMCwgMHgwQywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4RCwKKzB4MTAsIDB4MzQsIDB4ODIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDI1LCAweDIwLCAweEQxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDBELAorMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHg4MiwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwOSwgMHg0OCwgMHgyNSwgMHg4NCwgMHgxMSwKKzB4MDEsIDB4NDUsIDB4MDcsIDB4NTMsIDB4ODksIDB4NDAsIDB4NjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4MzQsIDB4NDMsIDB4MTAsCisweDBELCAweDQwLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHg4OCwgMHgyMywgMHgwMCwgMHhEMywgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHg0NCwgMHgzMywgMHg0MCwgMHhEMywKKzB4MDAsIDB4N0MsIDB4MEMsIDB4RjAsIDB4ODgsIDB4QzAsIDB4NjQsIDB4NDAsIDB4MTMsIDB4ODEsIDB4NEMsIDB4MDUsIDB4MzAsCisweDFELCAweDkwLCAweDQ0LCAweDAwLCAweDlFLCAweDQwLCAweDdDLCAweDJELCAweDM0LCAweDBELCAweEMwLCAweDAwLCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhBRCwgMHgwMCwgMHhCRiwKKzB4ODEsIDB4RkMsIDB4MTMsIDB4RDAsIDB4NEIsIDB4NDgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDksIDB4N0MsIDB4MDAsIDB4RjAsCisweDFCLCAweEMwLCAweDZFLCAweDJBLCAweDNFLCAweDEwLCAweEJDLCAweDgzLCAweEYwLCAweDA5LCAweEM0LCAweDJGLCAweDI4LAorMHhCRiwgMHgwMCwgMHhGNCwgMHgwMywgMHhGMSwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDIsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDM3LCAweDAyLCAweDkzLCAweDAyLCAweDdDLCAweDAwLCAweDM0LCAweDA5LCAweEUwLCAweDI0LCAweDIwLAorMHgxQiwgMHgwMSwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDOCwgMHgwNCwgMHg0NCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzUsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDM1LCAweDAyLAorMHg5NSwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwQiwgMHg0MiwgMHg2NCwgMHgwNCwgMHgwMSwgMHgwMywgMHg1QywgMHhBRiwKKzB4NTEsIDB4MTgsIDB4QzAsIDB4RTYsIDB4MTgsIDB4RDEsIDB4MDEsIDB4NkMsIDB4MDMsIDB4RDAsIDB4NkQsIDB4NDAsIDB4NEMsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDEyLCAweDA0LAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMCwKKzB4MTIsIDB4MDAsIDB4MDEsIDB4NjQsIDB4ODgsIDB4MDksIDB4MDAsIDB4MzQsIDB4MEYsIDB4NTEsIDB4QkMsIDB4NDEsIDB4ODEsCisweDEwLCAweDg1LCAweDExLCAweDA0LCAweDgyLCAweEQyLCAweDJELCAweDQyLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHg4MiwgMHhBMSwgMHgyMSwgMHhCNCwgMHgxNiwKKzB4RDAsIDB4MUEsIDB4NDAsIDB4NzMsIDB4MDgsIDB4QTUsIDB4MDEsIDB4QjQsIDB4MDQsIDB4MTgsIDB4OTIsIDB4NDAsIDB4NjgsCisweDA4LCAweDI5LCAweDAxLCAweDE0LCAweDI3LCAweDUyLCAweDFFLCAweDY0LCAweDZGLCAweDAwLCAweEE1LCAweDI5LCAweEE0LAorMHgwNiwgMHhEMCwgMHgxRSwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MTAsIDB4MjAsIDB4MDAsIDB4QzMsIDB4MDgsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4NDIsIDB4MzMsCisweDAyLCAweDgzLCAweDAwLCAweDM0LCAweDQ4LCAweDMwLCAweDA4LCAweDQwLCAweDIwLCAweDAxLCAweDBCLCAweDAwLCAweDNDLAorMHg0MywgMHg3MCwgMHgwQywgMHhDMCwgMHgwMSwgMHgwNCwgMHg4NywgMHg1MCwgMHgwQSwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MjksCisweDQwLCAweEZGLCAweDA4LCAweEZDLCAweDEyLCAweEYwLCAweDBCLCAweEMwLCAweDdELCAweDA4LCAweEJGLCAweDAwLCAweEZDLAorMHgwMCwgMHhEMCwgMHgwRSwgMHg1MiwgMHgyQiwgMHgwMCwgMHgzNywgMHgwMCwgMHhGQywgMHgwQiwgMHhGMCwgMHgwRiwgMHhFMCwKKzB4M0UsIDB4MTAsIDB4OUIsIDB4MDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDc3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHgyMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHg4MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MDYsIDB4MTAsIDB4OTMsIDB4ODAsIDB4M0MsIDB4MDgsIDB4MzQsIDB4NEQsIDB4RTEsIDB4MDcsIDB4MDgsIDB4OUYsIDB4MDEsCisweDRDLCAweDAyLCAweEYwLCAweDBELCAweEQwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhBMSwgMHgwNCwgMHhCNCwgMHgxMywgMHgxMCwgMHgwQSwgMHg0MCwKKzB4QkIsIDB4MjgsIDB4RUMsIDB4MjAsIDB4QjQsIDB4ODIsIDB4RDAsIDB4NkUsIDB4NDgsIDB4MDgsIDB4MDAsIDB4QTEsIDB4MDAsCisweEI0LCAweDAyLCAweDUwLCAweDBFLCAweDRBLCAweDNCLCAweDAwLCAweEJELCAweDQwLCAweEJDLCAweDAyLCAweEQwLCAweDRFLAorMHg0MCwgMHg0OCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwKKzB4RUQsIDB4MDAsIDB4RTksIDB4MDksIDB4MzQsIDB4MEYsIDB4MTAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4MDEsIDB4QUQsIDB4MDEsCisweEI0LCAweDA0LCAweEQwLCAweDE4LCAweDQwLCAweDQ4LCAweDAwLCAweEExLCAweDAxLCAweEI0LCAweDA3LCAweDkwLCAweDFFLAorMHg0MCwgMHg2QiwgMHgxMCwgMHhFRCwgMHgwMSwgMHhBNCwgMHgwNiwgMHhEMCwgMHg5RSwgMHg1MCwgMHgwQywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4RTMsIDB4MDAsIDB4QzksIDB4ODgsCisweDM0LCAweDA3LCAweDEwLCAweDI4LCAweDQxLCAweDMzLCAweDAwLCAweDhELCAweDIzLCAweDM0LCAweDA3LCAweEQwLCAweDBELAorMHg0MCwgMHgxNCwgMHgwMiwgMHhDMSwgMHgwMSwgMHgzNCwgMHhDQiwgMHhEMCwgMHgwQywgMHg0MCwgMHg3MywgMHgwNCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NTAsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweERELCAweDIwLCAweDVCLCAweDIxLCAweDdDLCAweDA1LCAweDM0LCAweDA3LAorMHhDMCwgMHgxNywgMHgwMCwgMHg3RiwgMHgwMywgMHhGQywgMHgwMSwgMHhGMSwgMHgwNywgMHhDMCwgMHg1QywgMHg0MCwgMHg3MywKKzB4MDUsIDB4QkMsIDB4MUQsIDB4QjAsIDB4MDUsIDB4QzQsIDB4REYsIDB4MjEsIDB4NUYsIDB4MDAsIDB4RUMsIDB4MDEsIDB4RjAsCisweDA1LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHg4NywgMHg0MSwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDgsIDB4NkMsIDB4MzAsIDB4RjAsIDB4MzEsIDB4RDAsIDB4NDUsIDB4MDAsIDB4MUYsIDB4MDEsIDB4N0MsIDB4MDAsIDB4NzAsCisweDIxLCAweEMwLCAweDg3LCAweDEwLCAweDFGLCAweDAwLCAweDdFLCAweDAwLCAweEYwLCAweDIxLCAweEM4LCAweDRCLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg4RiwKKzB4ODAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MTAsIDB4NEMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDY2LCAweDAxLCAweDlCLCAweDAxLCAweDRDLCAweDAyLCAweEIwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwNCwgMHg3QywgMHg4MiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4QkQsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MTAsCisweDA4LCAweEMwLCAweDJDLCAweDAwLCAweDlELCAweDAwLCAweDU0LCAweDBBLCAweEQyLCAweDI5LCAweDQwLCAweEU0LCAweDIwLAorMHg4MSwgMHg0RiwgMHg1NCwgMHgwMiwgMHhCMCwgMHhEOSwgMHg0NiwgMHhBNywgMHgxRSwgMHg5RCwgMHgwMCwgMHgzNCwgMHgwMiwKKzB4MTAsIDB4NkIsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEEwLCAweDI0LCAweDgwLCAweDlELCAweDAwLCAweDQ0LCAweDYyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg4RCwgMHgwMCwgMHg0MCwgMHgyQSwgMHhEMCwgMHgxOSwgMHg2MCwgMHgyNiwgMHgwMCwgMHhEMSwgMHgyMCwgMHg0NCwgMHgyQSwKKzB4ODAsIDB4MDksIDB4MjAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDEwLAorMHg4RCwgMHgwMiwgMHgwNCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMiwgMHgxNCwgMHg1MiwKKzB4RDAsIDB4NDgsIDB4NDEsIDB4MjAsIDB4MEQsIDB4OTEsIDB4MjAsIDB4NTQsIDB4NTIsIDB4OTgsIDB4NDgsIDB4NDksIDB4MjMsCisweDAwLCAweDhELCAweDk1LCAweDc2LCAweDBBLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywgMHg4NCwKKzB4MzAsIDB4MDEsIDB4RDAsIDB4NDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NEMsIDB4MTAsIDB4RjAsIDB4NDUsIDB4RDAsIDB4MTIsCisweDAxLCAweDEzLCAweDAwLCAweDRDLCAweDkwLCAweEIwLCAweDQxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDI0LCAweDdDLAorMHgwMCwgMHgzNCwgMHgxMCwgMHhEMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QjgsIDB4M0IsIDB4MTAsIDB4QkYsIDB4MDMsIDB4RkMsIDB4MEEsIDB4QzAsIDB4MUYsIDB4QzAsIDB4QTUsCisweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDAyLCAweEYwLCAweDRCLCAweEMzLCAweDJGLCAweDQ1LCAweEJGLCAweDAwLCAweEZDLAorMHg1MiwgMHg4MCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgxNCwgMHhGQywgMHgwNiwgMHhGMCwgMHg2OSwgMHhDMSwKKzB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsCisweDAwLCAweDlGLCAweDA3LCAweENDLCAweDg2LCAweDM0LCAweDI5LCAweEMwLCAweDZDLCAweDA0LCAweDhGLCAweDAwLCAweEZDLAorMHgwNiwgMHhGMCwgMHg1RiwgMHhDMCwgMHg2QywgMHgwNSwgMHhCQiwgMHg0MCwgMHhDQywgMHgwNiwgMHgzMCwgMHgxQiwgMHhDMiwKKzB4MkMsIDB4MDgsIDB4RjMsIDB4MDUsIDB4NEMsIDB4MEEsIDB4RjAsIDB4N0IsIDB4QzAsIDB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDAxLCAweDQ0LAorMHg4MCwgMHgxMCwgMHgxMSwgMHg1MCwgMHg4NCwgMHgwMCwgMHgxRCwgMHgyMSwgMHg3NCwgMHgyMCwgMHhEMCwgMHg1MCwgMHhDMSwKKzB4NDIsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NDQsIDB4NkQsIDB4NTAsIDB4MDEsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4NTUsCisweDQ0LCAweDA1LCAweEQwLCAweDYxLCAweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMiwgMHgwNSwgMHgwQSwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MjIsIDB4MDAsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjAsIDB4MDUsIDB4ODUsIDB4MDAsCisweDA1LCAweDkyLCAweDU4LCAweDg4LCAweDQwLCAweDYwLCAweDQwLCAweDgxLCAweDA4LCAweDA0LCAweDgyLCAweEQwLCAweDg4LAorMHg0MCwgMHg0MiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjUsIDB4ODAsIDB4OEQsIDB4MDEsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4ODAsCisweDc0LCAweDIyLCAweEQwLCAweDA5LCAweDUwLCAweDI2LCAweDIwLCAweDk1LCAweDA4LCAweDA0LCAweDAyLCAweDU4LCAweDA5LAorMHg0MCwgMHgzNCwgMHgwMiwgMHg5MSwgMHgwMCwgMHg0NSwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4NjcsIDB4MDAsIDB4QkYsIDB4ODAsCisweDRDLCAweDA2LCAweDMwLCAweDFCLCAweEMwLCAweDI2LCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDQ5LAorMHhDMCwgMHg2NCwgMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHg4NiwgMHg3MiwgMHgwOSwgMHhDQSwgMHg2NCwgMHgyMCwgMHg5MywKKzB4MjEsIDB4Q0MsIDB4MEUsIDB4RjAsIDB4MDksIDB4RDAsIDB4MTYsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAyLCAweDlGLCAweDAwLCAweDdDLCAweDQyLCAweEYwLCAweDQ5LAorMHhDMCwgMHgyNSwgMHgwNCwgMHg5RiwgMHgwMywgMHg3QywgMHgwNiwgMHhGMCwgMHg1OCwgMHhEMCwgMHgyNywgMHgwMiwgMHg5MywKKzB4MjAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsIDB4OEYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RDAsCisweDA5LCAweEMwLCAweDUxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxMywKKzB4MDIsIDB4NEQsIDB4MDAsIDB4MzIsIDB4MjEsIDB4RjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDQsIDB4NEMsIDB4MjAsIDB4MzQsCisweDQxLCAweEMwLCAweDA0LCAweDBBLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDgxLCAweEM2LCAweDUwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHg1QywgMHgwMCwgMHg1MSwKKzB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4ODAsIDB4NTEsIDB4MDAsIDB4QzQsIDB4MDksIDB4NTAsCisweDI3LCAweDUwLCAweDFELCAweDAwLCAweDYxLCAweEQyLCAweEM0LCAweDA1LCAweDIwLCAweDA3LCAweDQwLCAweDE4LCAweDAwLAorMHg3NSwgMHgwOCwgMHg2QywgMHgwMSwgMHhEMCwgMHgxNywgMHhEMCwgMHg1MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4NjIsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsCisweDBDLCAweDQwLCAweDIzLCAweDA4LCAweEMxLCAweDAwLCAweDA0LCAweDRBLCAweDEwLCAweDNDLCAweDQ5LCAweDMwLCAweDAwLAorMHhDMCwgMHgwMSwgMHgwNSwgMHgxNywgMHgxOSwgMHgyOCwgMHg0MCwgMHgzMCwgMHg4NCwgMHhDMSwgMHgwMSwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MTksIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDgwLCAweEZDLCAweDAwLCAweEU5LCAweDA0LCAweEI0LCAweDQyLCAweEQwLCAweDRFLCAweDQwLCAweEZCLCAweDAwLAorMHhGNSwgMHgyNSwgMHg4NCwgMHg0NiwgMHg1MCwgMHg2RSwgMHg2OCwgMHg2OSwgMHgyMSwgMHgyMSwgMHgyMCwgMHg4NCwgMHgwMSwKKzB4MTgsIDB4MDYsIDB4NDEsIDB4MzgsIDB4MDAsIDB4RTUsIDB4MTAsIDB4QTYsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTIsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDY4LCAweDAwLAorMHhFQiwgMHgwNywgMHhCQywgMHgwNiwgMHhGMCwgMHgzRSwgMHhDMCwgMHg2QiwgMHgwMCwgMHhFMSwgMHgwMywgMHg4QywgMHgwNiwKKzB4MzIsIDB4NzIsIDB4NDAsIDB4MjgsIDB4NDEsIDB4MjMsIDB4MDEsIDB4ODQsIDB4MDcsIDB4MzIsIDB4MTAsIDB4QzAsIDB4NzgsCisweDAwLCAweEUzLCAweDAxLCAweDhDLCAweDBGLCAweEYwLCAweDEwLCAweEMwLCAweDUwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzMSwgMHg0MCwgMHhENywgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4REIsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDEsIDB4RDgsIDB4MjcsCisweDAyLCAweDBGLCAweDIwLCAweDNDLCAweDAwLCAweEYwLCAweDAxLCAweEQyLCAweDMzLCAweDEwLCAweDVGLCAweDEyLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTIsIDB4NkYsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NkMsCisweDAwLCAweEVGLCAweDAxLCAweENDLCAweDA3LCAweDMyLCAweDFGLCAweEMwLCAweDc4LCAweDEwLCAweDIzLCAweDAxLCAweDhDLAorMHgwNSwgMHgzMCwgMHgxMywgMHhDMCwgMHg3RiwgMHgwOCwgMHg3RiwgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MjksCisweDAwLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweEQyLCAweDBFLCAweDQwLCAweEE4LCAweDAwLCAweEVELCAweDA4LCAweDg0LAorMHgwMywgMHhCMCwgMHgyRiwgMHg0MCwgMHgyOCwgMHgwMSwgMHgyMSwgMHg4MCwgMHg5NCwgMHgwMCwgMHg1MiwgMHgwMiwgMHg0MCwKKzB4M0IsIDB4MEEsIDB4NkQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweEVELCAweDAxLCAweDg0LAorMHgwMywgMHhEMCwgMHgxRiwgMHg0MCwgMHgyOCwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NCwgMHgyMiwgMHgxMCwgMHg4RSwgMHg0MCwKKzB4MkMsIDB4MTAsIDB4MzksIDB4MDgsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MkQsIDB4MDAsCisweEY0LCAweDA3LCAweDEwLCAweDA2LCAweDQwLCAweDYzLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgyMywgMHgwMSwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MSwKKzB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDYsIDB4NDUsIDB4OTAsIDB4MUMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDksIDB4MDEsCisweDE2LCAweDE5LCAweDUwLCAweDkwLCAweDQwLCAweEIzLCAweDAwLCAweDVELCAweDAwLCAweDM0LCAweDZGLCAweDEwLCAweDBDLAorMHg0MCwgMHgxQiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwKKzB4QTUsIDB4MDAsIDB4REYsIDB4MDQsIDB4NEMsIDB4MTIsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDAsCisweDRELCAweDEyLCAweDMwLCAweDFCLCAweEMwLCAweDNDLCAweDQxLCAweDFCLCAweDA1LCAweDRDLCAweDAxLCAweDM0LCAweDAxLAorMHhDMCwgMHg0NywgMHgxMiwgMHg5RiwgMHgwMCwgMHg3QywgMHgwRiwgMHgzNiwgMHgwMSwgMHhDOCwgMHg1NywgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4QjcsIDB4MDAsIDB4REYsIDB4NDAsCisweDdDLCAweDAyLCAweEYwLCAweDhELCAweEMwLCAweDMzLCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDgwLAorMHhDMCwgMHhBNywgMHgwMCwgMHgxNywgMHg0MCwgMHg3QywgMHgwOCwgMHhGMSwgMHgwMCwgMHhDMCwgMHhENywgMHgwMCwgMHgxRiwKKzB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4Q0MsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDZGLCAweDAwLCAweEVGLCAweDAwLCAweDhDLCAweDBFLCAweDMwLCAweDBGLAorMHhDMCwgMHgyQywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgzMywgMHhDNCwgMHgwQywgMHgwMCwgMHgzMywKKzB4MDAsIDB4QkMsIDB4MDksIDB4MzAsIDB4MDMsIDB4QzAsIDB4MUMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsCisweDBCLCAweEQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLAorMHgyMCwgMHhENiwgMHgxMCwgMHhERCwgMHg0MCwgMHg0NCwgMHg0QSwgMHgxMCwgMHgwRCwgMHg0MCwgMHhGNSwgMHg1MCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MzEsIDB4NDIsIDB4MDEsIDB4MDgsIDB4MTEsIDB4MjMsIDB4NzQsIDB4MEQsIDB4MTAsCisweDUxLCAweEMwLCAweEI2LCAweDAwLCAweDFELCAweDYxLCAweDQ0LCAweDAzLCAweDExLCAweDJELCAweDQwLCAweDA0LCAweDAyLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhBNCwgMHgwMSwgMHhERCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDIsIDB4QzEsIDB4MjAsIDB4NDQsIDB4MDMsIDB4RDAsCisweDBELCAweDQwLCAweEI0LCAweDkwLCAweDE5LCAweDUxLCAweDc0LCAweDA5LCAweDEwLCAweDExLCAweDAwLCAweDE0LCAweDAyLAorMHgxRCwgMHgwMywgMHgwNSwgMHg4MywgMHgxMCwgMHgyNCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTQsCisweDBDLCAweDQwLCAweDExLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDA0LCAweDQwLCAweDI1LCAweDAwLAorMHgwMSwgMHgwMCwgMHgzNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHg2MCwgMHgzMiwgMHgwMCwgMHgxRCwgMHgwMCwgMHgwNCwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEIwLCAweDI2LCAweDAwLCAweEVGLCAweDAwLCAweDRELCAweDAxLCAweDMwLCAweDBGLCAweEMwLCAweDI0LCAweDAwLAorMHhGMywgMHgwMCwgMHg0NSwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMSwKKzB4MzAsIDB4MDEsIDB4QzAsIDB4MTQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzQsIDB4MEQsIDB4QzgsIDB4MDQsCisweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDFGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHg4MSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMSwKKzB4RTIsIDB4MDcsIDB4OTgsIDB4MEYsIDB4NDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsCisweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGQiwgMHgxMCwgMHg5QywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4NEYsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MTcsIDB4QzgsIDB4MkUsCisweDEwLCAweEJGLCAweDA0LCAweEZDLCAweDAzLCAweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDA4LCAweEI2LCAweDAwLCAweEZDLAorMHgyNywgMHg3MCwgMHgwMiwgMHhDMCwgMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDgsIDB4NzcsIDB4MDAsIDB4RkQsIDB4MDMsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MUQsIDB4NDAsIDB4NDcsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDAwLCAweDEwLCAweDFELCAweDQwLCAweEU0LCAweDAyLCAweDFELCAweDA0LCAweEY0LAorMHg1QiwgMHgxMCwgMHgwMSwgMHg0MCwgMHg0NywgMHgwOCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MCwKKzB4MEMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweDhELCAweDQwLCAweDc0LAorMHg1MSwgMHg5MCwgMHgwNSwgMHg0OCwgMHgwMiwgMHgwMCwgMHgwRCwgMHgxMiwgMHgzNCwgMHgxQiwgMHgxMCwgMHg0QywgMHg0OSwKKzB4MzMsIDB4MDAsIDB4MEQsIDB4MDIsIDB4MzQsIDB4MTMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NEUsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweERELCAweDIwLCAweDQwLAorMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NywgMHgwMCwgMHhERCwgMHgyMywgMHg3NCwgMHg4MSwgMHgxNCwgMHgxRCwgMHg0MSwKKzB4NDQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDgsIDB4OUQsIDB4NTEsCisweDc0LCAweDAzLCAweEQwLCAweDE5LCAweDQxLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1NCwgMHgxRiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4NDcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4MTksIDB4RjAsIDB4MTQsIDB4QzAsIDB4QzYsIDB4MDAsIDB4OUYsIDB4MDcsCisweDc0LCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDE3LCAweDAxLCAweDdDLCAweDAzLCAweDc5LCAweDM5LAorMHhDMCwgMHgyMiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwKKzB4M0MsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4NDAsCisweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDI3LCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDAzLAorMHhDNCwgMHgwRiwgMHgzMCwgMHgxRiwgMHgyMCwgMHhGRSwgMHhBNywgMHhGMCwgMHgwQiwgMHg0MCwgMHgxRiwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDVDLCAweDQ5LCAweEIwLCAweDI1LAorMHhDMCwgMHgwNiwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0RSwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHgxNywKKzB4MDIsIDB4NEMsIDB4MTMsIDB4RjIsIDB4MjksIDB4QzUsIDB4MjksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweEZELCAweDAwLCAweDM0LCAweDA3LCAweDEwLCAweDBELAorMHhDMCwgMHgwNywgMHgwMCwgMHhERCwgMHgwNSwgMHgwNCwgMHgxRCwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgwMCwgMHgxMSwKKzB4MDAsIDB4RUMsIDB4NjMsIDB4RDAsIDB4NzEsIDB4NDAsIDB4ODQsIDB4MEIsIDB4MTEsIDB4MDEsIDB4NDQsIDB4NDMsIDB4RDAsCisweDE4LCAweEMwLCAweDRFLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgzQiwgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MTQsIDB4MEIsIDB4OTQsIDB4MDAsIDB4NDIsIDB4NjIsIDB4MDAsIDB4ODksIDB4ODAsIDB4NTQsIDB4MDcsIDB4RDAsCisweDRDLCAweDQwLCAweEYxLCAweDEwLCAweDg1LCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweEIwLCAweDQwLCAweDBELCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHg4MCwgMHhFRCwKKzB4NDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NDksIDB4MzAsIDB4RUQsIDB4QzksIDB4OTQsIDB4MDYsIDB4MTAsCisweDE3LCAweDAwLCAweDc4LCAweDAwLCAweEYwLCAweDQ5LCAweEI0LCAweDA3LCAweEQwLCAweDEzLCAweDQwLCAweDQ4LCAweDAwLAorMHhFMSwgMHgxMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxNiwgMHg0MCwgMHgzRSwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDEsIDB4MzAsCisweDhDLCAweDQwLCAweDAzLCAweDAwLCAweENGLCAweDAwLCAweDVDLCAweDMzLCAweEIwLCAweDAwLCAweEMwLCAweDMyLCAweDA0LAorMHg1QiwgMHg4MCwgMHgxNCwgMHgwMywgMHhGMiwgMHgwQywgMHhEMCwgMHgzMCwgMHgwMywgMHg0NiwgMHgwOCwgMHgwRCwgMHgwMywKKzB4RjAsIDB4MDAsIDB4QzAsIDB4NDksIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEIwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMyLCAweDM3LCAweDAwLAorMHhDRiwgMHgwMCwgMHg2QywgMHhBMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg2QywgMHg0MywKKzB4RjAsIDB4ODAsIDB4QzAsIDB4MDMsIDB4MEEsIDB4REYsIDB4MDgsIDB4N0MsIDB4MjMsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MDksCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLAorMHhERiwgMHgxRSwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDNCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMSwKKzB4RjAsIDB4MTUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4NEYsIDB4NzEsIDB4MEQsIDB4QzgsIDB4MzQsCisweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEM0LCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4MTAsIDB4MEUsIDB4NDgsIDB4MEIsIDB4MTAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsCisweDA4LCAweEZELCAweDgwLCAweDA0LCAweDAzLCAweDEyLCAweDAyLCAweDQwLCAweDA4LCAweDA0LCAweEVELCAweDAwLCAweEI0LAorMHgwMywgMHhEMCwgMHgwNiwgMHg2MCwgMHg0QywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTQsIDB4MUUsIDB4NDAsIDB4NEIsCisweDAwLCAweEVELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDE3LCAweDUwLCAweDU4LCAweDAwLCAweEVELCAweDAxLCAweDg1LAorMHgwNywgMHg1MCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHg4NywgMHhEMCwgMHgxQywgMHg0MCwKKzB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDRGLCAweDkwLCAweDBDLCAweDQ4LCAweEMzLCAweDgzLCAweENELCAweDEyLCAweDA0LAorMHg0QiwgMHhEMCwgMHg3QywgMHg0MCwgMHhCMCwgMHgwQywgMHhDRCwgMHgwMiwgMHgwNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4Q0QsIDB4ODgsIDB4MzAsIDB4MjIsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweEJDLAorMHg0OSwgMHgzMCwgMHgwNSwgMHhDMiwgMHg5RiwgMHgwMCwgMHg2RiwgMHgwMiwgMHg5QywgMHgwOSwgMHhGMCwgMHgyNywgMHhDOCwKKzB4MUMsIDB4MDAsIDB4N0YsIDB4MDAsIDB4NEMsIDB4MDEsIDB4NzAsIDB4MDUsIDB4RDAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MjEsCisweDdDLCAweDA1LCAweEQwLCAweDI3LCAweDQwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTgsCisweDdDLCAweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDhGLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweEExLAorMHhEMSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDgsCisweDZDLCAweDI2LCAweDcxLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlFLCAweDAwLCAweDRDLCAweDE2LCAweEYwLCAweDA5LAorMHhDMCwgMHgyNSwgMHgyMCwgMHg5MywgMHgzOCwgMHg3OCwgMHgwRSwgMHhGMiwgMHgxOCwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweDExLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQwLCAweDQ0LCAweDA2LCAweDExLCAweDA5LAorMHg0NCwgMHgyNywgMHgwMCwgMHg5RCwgMHg4MCwgMHg0NCwgMHg4RSwgMHhEMSwgMHgyOSwgMHg0MCwgMHgyMCwgMHgwNCwgMHg5MSwKKzB4MDEsIDB4NzQsIDB4MDYsIDB4RDAsIDB4ODksIDB4NDEsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDEyLCAweDFDLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NCwgMHg0MiwgMHg0MCwgMHgwOSwgMHg0MiwgMHgzNywgMHg4MCwgMHg4RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDEsIDB4MkQsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NDIsIDB4RDAsCisweDA5LCAweDQwLCAweDcwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgxNCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDUsIDB4OEQsIDB4MzQsIDB4MDQsIDB4NTIsIDB4RDAsCisweDBBLCAweDQwLCAweDJDLCAweDIwLCAweDgxLCAweDE0LCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDUxLCAweDUwLCAweEEwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgzMCwgMHgwNiwgMHgwMCwgMHgxRiwKKzB4MDQsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4MDAsIDB4NzAsCisweDAxLCAweEMwLCAweDA3LCAweDIxLCAweDFGLCAweDA0LCAweDRDLCAweDExLCAweEYwLCAweDAxLCAweEMwLCAweDBELCAweDAwLAorMHgxMywgMHhDNCwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsCisweDA5LCAweEMwLCAweDJGLCAweDAwLCAweEVGLCAweDgwLCAweEZDLCAweDUyLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAwLAorMHhCRiwgMHgxNCwgMHg3RCwgMHg1MiwgMHhGMCwgMHg0OCwgMHhDNSwgMHgyNywgMHgwMCwgMHhCRiwgMHg0MCwgMHhGQywgMHg1MiwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEEwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweEZDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDYwLAorMHhCMywgMHgwMCwgMHg5QywgMHgwQSwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzRCwgMHgwMCwgMHg5MywgMHgwMiwgMHhDQywgMHhDNiwKKzB4RjAsIDB4MkIsIDB4QzIsIDB4MkYsIDB4MDAsIDB4QkYsIDB4ODAsIDB4Q0MsIDB4MEEsIDB4RDAsIDB4MEIsIDB4QzAsIDB4NjcsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwQSwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwNCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MTAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsCisweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDczLCAweDYwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4OTAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4NTIsIDB4MDksIDB4NDAsIDB4QTEsCisweDAwLCAweDgxLCAweDIyLCAweDA0LCAweDQyLCAweEQyLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAyLCAweDA0LAorMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDFBLCAweDEyLCAweDI5LCAweDQyLCAweDI0LCAweDQwLCAweDkxLCAweDgwLCAweDQ1LAorMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwOCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgyOSwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEM0LCAweEUzLCAweDA0LCAweDkzLCAweDAyLCAweDVDLAorMHgwRSwgMHg3MCwgMHgwOCwgMHhDMCwgMHhFNSwgMHgwNCwgMHg5MiwgMHgxQiwgMHg0OCwgMHgwMiwgMHhFMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MTksIDB4NEQsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4MjgsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDEsIDB4OEYsIDB4MjEsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OEYsIDB4MDEsCisweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4MzEsIDB4MjEsIDB4QzgsIDB4ODcsIDB4MDAsIDB4MUUsIDB4MDIsCisweDdDLCAweDAwLCAweDMyLCAweDgxLCAweDgxLCAweDA0LCAweDA0LCAweDFGLCAweDgwLCAweDRDLCAweDAwLCAweDM0LCAweDAxLAorMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwKKzB4MTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MTAsIDB4NkQsIDB4ODAsCisweEI0LCAweDA1LCAweDEwLCAweDA1LCAweDQwLCAweDEzLCAweDAwLCAweDVELCAweDAwLCAweEY0LCAweDAxLCAweDEwLCAweDI3LAorMHg0MCwgMHhEQywgMHgwMCwgMHg1RCwgMHgwNSwgMHhDNCwgMHg2MSwgMHgxMiwgMHgwNywgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDI0LCAweDA1LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDBDLCAweDM0LCAweDBGLCAweDE0LCAweDBDLAorMHg0MCwgMHgzMywgMHgwMiwgMHhDRCwgMHgwMCwgMHgzNCwgMHgxRiwgMHg1MCwgMHgyQywgMHg0NCwgMHhEMCwgMHgyMCwgMHg4RCwKKzB4MDAsIDB4MDQsIDB4MEYsIDB4MTAsIDB4MkMsIDB4NDEsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDBCLCAweEQwLCAweDBFLAorMHg0MCwgMHgzQiwgMHg4MCwgMHhBRCwgMHgwMCwgMHhGNCwgMHg0MywgMHgxMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwKKzB4NDgsIDB4QjQsIDB4NDcsIDB4NTAsIDB4MUUsIDB4NTAsIDB4MzgsIDB4MDQsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDUsIDB4MTAsCisweDJFLCAweDQwLCAweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHgxMCwgMHg3OCwgMHgwMCwgMHhDRiwgMHgwMSwgMHhBQywgMHgwNSwgMHhGMCwgMHgxRSwgMHhDNCwgMHg3QiwgMHgxMCwgMHhBRiwKKzB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4OEQsIDB4RkMsIDB4MDcsIDB4NzAsCisweDE3LCAweEMwLCAweDc4LCAweDA4LCAweEVFLCAweDAxLCAweENELCAweDA3LCAweDMwLCAweDFFLCAweEMwLCAweDQ3LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDQyLCAweDdDLCAweDAzLCAweEI0LCAweDBELCAweEMwLCAweDM3LCAweDAwLAorMHhDRiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDOCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4ODUsIDB4RjAsCisweDFGLCAweEMwLCAweDdGLCAweDAyLCAweDJGLCAweDA5LCAweDhDLCAweDA1LCAweEYwLCAweDlGLCAweEMyLCAweDZELCAweDAyLAorMHhGQiwgMHgwOSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgyMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MUYsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHgyRCwgMHgxMCwgMHg4NCwgMHgwMSwgMHgxMiwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwNCwgMHhFOSwgMHgwMCwgMHg4NCwgMHgxMSwKKzB4MTAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QTQsIDB4MTEsIDB4MTgsIDB4MEEsIDB4NDAsIDB4NTQsCisweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgyMCwgMHgzRCwgMHgwMCwgMHhDNSwgMHgwMSwKKzB4RDAsIDB4MEYsIDB4MDksIDB4MjksIDB4MDAsIDB4RUQsIDB4NDAsIDB4OTYsIDB4ODMsIDB4MTQsIDB4MDYsIDB4NDAsIDB4M0IsCisweDAyLCAweEVELCAweDAwLCAweEY0LCAweDgzLCAweDEwLCAweDBFLCAweDQxLCAweDIyLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHg0MCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NjQsIDB4QjMsIDB4MDQsIDB4MEQsIDB4MDcsIDB4MDQsIDB4MEMsIDB4OTAsIDB4M0MsIDB4NDAsIDB4NzAsCisweDAwLCAweENELCAweDAzLCAweDA0LCAweDAyLCAweDEwLCAweEExLCAweDQ0LCAweDczLCAweDAwLCAweENELCAweDAyLCAweDY0LAorMHgyNCwgMHgxMCwgMHgxMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzcsCisweDE0LCAweDlGLCAweDAzLCAweDBDLCAweDRFLCAweEYwLCAweDlELCAweEMwLCAweEY1LCAweDAwLCAweEZGLCAweDEyLCAweDc4LAorMHgwMCwgMHgzMCwgMHgzOSwgMHg0MCwgMHg3MywgMHgwMSwgMHhERCwgMHgxMCwgMHg3QywgMHgwMiwgMHgxNCwgMHgxRCwgMHhDMCwKKzB4NTYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDA4LCAweDlGLCAweDAyLCAweDdDLAorMHgwOCwgMHg3MCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhEQiwgMHgwNCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDNCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MzAsIDB4NkMsIDB4ODIsIDB4RjAsIDB4NkQsIDB4QzAsIDB4QTcsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEZGLCAweDgwLCAweEZDLAorMHg4MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhEQywgMHg0MiwgMHg3MCwgMHgwRiwgMHhDMCwKKzB4M0QsIDB4MDQsIDB4REYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTAsIDB4MDMsIDB4MDEsIDB4M0MsIDB4MjQsIDB4RjIsIDB4ODAsCisweEZDLCAweDAwLCAweDMwLCAweDA5LCAweEUwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgxRiwgMHhEMCwgMHgwRCwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4OEQsIDB4NDEsIDB4NDYsIDB4MTYsIDB4MTAsIDB4MEMsIDB4NDYsIDB4MjQsIDB4MjAsIDB4REQsIDB4MDAsCisweDc0LCAweDBFLCAweEQwLCAweDE5LCAweEMxLCAweEY2LCAweDAxLCAweEQxLCAweDAwLCAweDc0LCAweDA0LCAweDMwLCAweDQxLAorMHg0MCwgMHgxNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwKKzB4MzQsIDB4ODAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MzUsIDB4MTAsIDB4OUQsIDB4MDMsCisweDU0LCAweDA2LCAweDUwLCAweDBELCAweDQwLCAweDI1LCAweDAwLCAweERELCAweDAwLCAweDU0LCAweDBDLCAweEQwLCAweDE5LAorMHg2MCwgMHg3NSwgMHgxMCwgMHhENSwgMHgwNCwgMHg3NCwgMHgwNiwgMHgxMCwgMHg4NSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4ODAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQyLCAweDMxLCAweDAwLCAweERELCAweDIwLCAweDQ0LCAweDAwLCAweDE4LCAweDBELAorMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwOSwgMHg0OCwgMHgyNywgMHg4MCwgMHhDNSwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4OTMsIDB4MDAsIDB4NDAsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1NCwgMHgwMiwgMHg3MCwgMHgwRCwgMHhDMCwgMHgyNSwgMHgyMCwgMHhGRCwKKzB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4ODAsIDB4RDcsIDB4ODAsIDB4N0MsIDB4MDIsIDB4MjQsCisweDAxLCAweEMwLCAweDA3LCAweEM0LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhCOCwgMHgzRiwgMHgxMCwgMHhGRiwgMHgyMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRCwgMHgwMCwgMHhCRiwKKzB4ODAsIDB4RjQsIDB4MDIsIDB4RjIsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDJFLCAweDQwLCAweEZCLCAweDAwLCAweEJDLCAweDAyLCAweDcwLCAweDAzLCAweEM4LCAweDE3LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1RiwgMHgwMCwgMHg3RiwKKzB4NDEsIDB4RkMsIDB4ODUsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NUMsIDB4MDIsIDB4QUYsIDB4MTQsIDB4Q0MsIDB4MDQsIDB4RjAsCisweEMzLCAweEMwLCAweDBDLCAweDA0LCAweEIzLCAweDEwLCAweENDLCAweDBDLCAweDMwLCAweDhCLCAweEMwLCAweDNGLCAweDAwLAorMHhCMywgMHgxNCwgMHhDQywgMHg1MywgMHgzMCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4NTcsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDUsIDB4RDEsCisweDE1LCAweDQ0LCAweDE0LCAweDIxLCAweEZELCAweDAzLCAweDQ0LCAweDEwLCAweEQwLCAweEUxLCAweDAwLCAweDg0LCAweDAxLAorMHhBQiwgMHgwNiwgMHg0NCwgMHgwMCwgMHgxMCwgMHhFOSwgMHg0MCwgMHg3NywgMHgwMCwgMHhCNSwgMHgwNiwgMHhENCwgMHgwRiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweEEwLCAweDMzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIwLCAweDIwLAorMHhDRCwgMHgwMCwgMHgxNiwgMHg0MCwgMHhEMiwgMHgwMSwgMHg1MCwgMHgwNCwgMHg0NCwgMHg4MSwgMHgxMCwgMHgwNSwgMHgxMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MTAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4NDgsIDB4NDEsIDB4NDQsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAxLAorMHg5RCwgMHgwNCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg4NSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg1NSwgMHgwNCwKKzB4RDAsIDB4MDEsIDB4NDYsIDB4NjQsIDB4MDAsIDB4OTksIDB4NDgsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MzEsIDB4NDgsIDB4MzcsCisweDAwLCAweEM1LCAweDAwLCAweDU0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDBDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHhBNywgMHgwMSwgMHhERiwgMHgwMSwgMHg3QywgMHgyNywKKzB4RjAsIDB4MEQsIDB4RDAsIDB4NzQsIDB4MTIsIDB4OEYsIDB4MDAsIDB4NUMsIDB4NDQsIDB4RjAsIDB4MjAsIDB4QzEsIDB4QzAsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDE0LCAweDM0LCAweDFELCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDgwLCAweDRDLAorMHgwMywgMHhGNCwgMHgzOSwgMHhEMCwgMHgwOCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODAsIDB4NkQsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RjgsIDB4MDcsIDB4RjAsIDB4MEYsIDB4QzgsIDB4M0YsCisweDAwLCAweEY4LCAweDEwLCAweEVDLCAweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLAorMHg0MCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgxMCwgMHg5RiwgMHgwOSwgMHhCOCwgMHg4MywgMHgzMCwgMHgzQiwgMHhDMCwKKzB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsCisweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDgwLCAweDRDLAorMHgwMCwgMHgzMiwgMHgwMSwgMHhEMCwgMHg4QywgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgyNSwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4RDMsIDB4MDQsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MjgsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLCAweDlDLCAweDAwLCAweDcwLAorMHgwMiwgMHhEMCwgMHgwQywgMHg2MCwgMHg2NywgMHgwMCwgMHhERCwgMHgwMywgMHg0MCwgMHgyQywgMHgxMCwgMHgwMywgMHg0MCwKKzB4NjQsIDB4MDAsIDB4OTEsIDB4MEYsIDB4NkQsIDB4MDgsIDB4OTEsIDB4QjUsIDB4NDAsIDB4QkMsIDB4NDAsIDB4RDUsIDB4MTMsCisweEM0LCAweDAzLCAweEMwLCAweDQ5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgyMCwgMHg0RCwgMHg4MCwgMHgzNCwgMHgwMiwgMHhDMCwgMHgwNCwgMHg0OCwKKzB4NjMsIDB4MDAsIDB4OEQsIDB4MDEsIDB4MjQsIDB4MDQsIDB4MTAsIDB4MDgsIDB4NDIsIDB4NDAsIDB4MDAsIDB4OTEsIDB4MDEsCisweDQ0LCAweDA0LCAweEQxLCAweDE4LCAweDQwLCAweEIwLCAweDA0LCAweEMxLCAweDAyLCAweDA0LCAweDAzLCAweEQwLCAweDA4LAorMHg0MCwgMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwKKzB4NjgsIDB4MDAsIDB4RUQsIDB4MjEsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MTYsIDB4NDAsIDB4NkIsIDB4MDYsIDB4RUQsIDB4MTEsCisweEE1LCAweDQ0LCAweDE0LCAweDk4LCAweDUwLCAweDZDLCAweDA0LCAweEUxLCAweDA5LCAweEE0LCAweDA0LCAweDkwLCAweDFFLAorMHg0MCwgMHg3OCwgMHgwMiwgMHhFNSwgMHgyMSwgMHg4NCwgMHgwNywgMHhEMSwgMHgxNiwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4OEYsIDB4MDAsCisweDNDLCAweDAyLCAweEYwLCAweDA0LCAweDQwLCAweDIzLCAweDBBLCAweENGLCAweDAwLCAweDZDLCAweDAwLCAweDMyLCAweDg4LAorMHhDOCwgMHg4MCwgMHg0MCwgMHhDMywgMHgwOCwgMHgwQywgMHg0MCwgMHhGMiwgMHg4RCwgMHhEMSwgMHgzMCwgMHgwMiwgMHhDMywKKzB4MDAsIDB4MEQsIDB4MDMsIDB4RjAsIDB4MDQsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDNELCAweDAwLCAweEJGLCAweDgwLCAweEYwLCAweDAyLCAweEYwLCAweDA3LAorMHhDMCwgMHgyRiwgMHgwQSwgMHhGRiwgMHgwMiwgMHhEQywgMHgwMCwgMHhGMCwgMHg4QiwgMHhEMCwgMHgzQiwgMHg0MiwgMHhGRiwKKzB4MDgsIDB4RjQsIDB4MDAsIDB4QjAsIDB4OEYsIDB4QzAsIDB4M0IsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkMsIDB4NDMsIDB4RjAsCisweDg3LCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBMCwgMHg2NywgMHgwMCwgMHhEMywgMHgyMCwgMHg3QywgMHgwNywgMHgzNCwgMHgwNSwgMHhDMCwgMHg3MCwgMHgwMCwgMHg5MywKKzB4MDYsIDB4NUMsIDB4MDAsIDB4RjAsIDB4ODEsIDB4RDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ODYsIDB4NEQsIDB4MDQsIDB4MzAsCisweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDA0LCAweDBELCAweDEzLCAweDMxLCAweDA1LCAweEMwLCAweDU0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgyOSwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MDYsIDB4QzAsIDB4M0EsIDB4MTAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsCisweDQzLCAweDQwLCAweDI5LCAweDAwLCAweEVCLCAweDA4LCAweDg0LCAweDAxLCAweDUxLCAweDBFLCAweDQwLCAweDNCLCAweDAxLAorMHhGMSwgMHgwOCwgMHg5NCwgMHg0MywgMHgxMCwgMHgwRiwgMHhDMCwgMHg0QSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QTEsIDB4MDEsIDB4RjYsIDB4MDYsIDB4MTAsCisweDE2LCAweDQwLCAweDZDLCAweDEwLCAweEYwLCAweDAxLCAweEI0LCAweDA0LCAweEQwLCAweDNBLCAweDQwLCAweDRDLCAweDAwLAorMHhDMSwgMHgwMSwgMHhDNiwgMHgwNCwgMHgxMCwgMHgzRSwgMHg0MCwgMHg3MywgMHgwMiwgMHhFOSwgMHgwMSwgMHg4NCwgMHgwMywKKzB4MTAsIDB4MUUsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDI4LCAweDYzLCAweDAwLCAweDgxLCAweDA0LCAweDM2LCAweDE2LCAweDEwLCAweDE0LCAweDQ0LCAweDIyLCAweDAyLAorMHhDMSwgMHgwMCwgMHgyNCwgMHgwQiwgMHhEMSwgMHgwRCwgMHg0MSwgMHgzMCwgMHgwOCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgxRiwKKzB4NTAsIDB4MUQsIDB4NDAsIDB4MzMsIDB4MTAsIDB4RDksIDB4MDAsIDB4MTUsIDB4MDMsIDB4MTAsIDB4RUMsIDB4NDAsIDB4NEEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDFELCAweDAxLAorMHg3MywgMHg4MCwgMHhGQywgMHgwNSwgMHgzMywgMHhFNywgMHhDQywgMHhEQywgMHg0MCwgMHg1MywgMHhDMCwgMHhCQywgMHgxNSwKKzB4RjEsIDB4MjcsIDB4RDAsIDB4MUMsIDB4MDgsIDB4NTMsIDB4MDAsIDB4Q0QsIDB4MDUsIDB4MzIsIDB4MTcsIDB4QzAsIDB4MTcsCisweDQwLCAweDVCLCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDM3LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHg1NCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjQsIDB4MUYsIDB4MDIsIDB4NUMsIDB4NDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDMsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDIwLCAweDdDLAorMHg4MCwgMHhGMCwgMHgwMCwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsCisweDAwLCAweDlGLCAweDA1LCAweDRDLCAweDBFLCAweDMwLCAweDA5LCAweEMwLCAweDY0LCAweDIwLCAweDhBLCAweDAxLCAweDZDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHg2MCwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMiwKKzB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsCisweDAwLCAweDlELCAweDAwLCAweDcwLCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDhDLCAweDAwLCAweDQ0LAorMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2NSwgMHgwOCwgMHg5QiwgMHgwMSwgMHg2QywgMHgwMiwgMHhEMCwgMHhBOSwgMHg0MSwKKzB4RTQsIDB4MDEsIDB4OTEsIDB4MDIsIDB4NDUsIDB4MDYsIDB4RDAsIDB4MTksIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDIwLCAweDcwLAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzNCwgMHgwMCwgMHg5QywgMHgxMCwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwOSwgMHg0MCwKKzB4MjQsIDB4MDIsIDB4OUQsIDB4NDgsIDB4NjUsIDB4MTIsIDB4RDIsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDIsIDB4OTEsIDB4MTQsCisweDQ0LCAweDgyLCAweEQwLCAweDBELCAweDQ0LCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhBMCwgMHgxMCwgMHg4RCwgMHgwMiwgMHgzNCwgMHgwQSwgMHhEMCwgMHgyOCwgMHg0MCwKKzB4MjEsIDB4MTAsIDB4OUQsIDB4MTQsIDB4NDYsIDB4MDIsIDB4MTgsIDB4NDgsIDB4NDUsIDB4MjEsIDB4NDUsIDB4Q0QsIDB4MTQsCisweDI0LCAweDAyLCAweEQwLCAweDQ4LCAweDcxLCAweDIwLCAweDg1LCAweDgxLCAweDE0LCAweDA0LCAweDUyLCAweEQwLCAweDQ4LAorMHg0MSwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwKKzB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTAsIDB4MUYsIDB4MDQsCisweDRDLCAweDAwLCAweDMwLCAweDQxLCAweEM0LCAweDE0LCAweDIxLCAweDFGLCAweDQ0LCAweDZDLCAweDAwLCAweEYxLCAweDQxLAorMHhDMCwgMHgwNCwgMHgwMSwgMHgxMywgMHhDNCwgMHg0QywgMHgxMCwgMHhGMCwgMHg0MSwgMHhEMCwgMHg3NCwgMHhDMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4N0IsIDB4MDAsIDB4RkYsIDB4MDEsCisweEJDLCAweDA2LCAweEYwLCAweDFCLCAweEMwLCAweDJGLCAweDA1LCAweEFFLCAweDAwLCAweEZELCAweDUyLCAweEYxLCAweDRGLAorMHhDMSwgMHgyRiwgMHg0NSwgMHhCQiwgMHgxNCwgMHhCQywgMHg1MiwgMHhGMCwgMHg0QiwgMHhDMSwgMHgyNywgMHg0MCwgMHhCRiwKKzB4MTQsIDB4N0MsIDB4MDIsIDB4RjIsIDB4NEIsIDB4QzEsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweEE3LCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDAyLCAweDMwLCAweDI4LAorMHhDMCwgMHhBRiwgMHgwMCwgMHhBRiwgMHgwMSwgMHhEQywgMHgwQSwgMHhGMCwgMHgzOSwgMHhDMCwgMHhFRCwgMHgwNSwgMHhCMywKKzB4MDMsIDB4REMsIDB4MDIsIDB4MzIsIDB4NUIsIDB4QzEsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4MzAsCisweDZBLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLAorMHgwOCwgMHg0NywgMHgwMSwgMHgxQiwgMHgwMSwgMHg2QywgMHgxNCwgMHhCMCwgMHg1MSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxRCwKKzB4MDIsIDB4NDUsIDB4MDQsIDB4RDEsIDB4MTAsIDB4NDAsIDB4QzAsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDUsIDB4MTQsIDB4MTAsCisweDc1LCAweEMwLCAweDA3LCAweDEwLCAweDExLCAweDA1LCAweDU0LCAweDAwLCAweDEwLCAweDYxLCAweDQwLCAweDcwLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4MSwKKzB4MjAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OEQsIDB4MDIsIDB4MTQsIDB4MTIsIDB4RDAsCisweDI4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAyLCAweDE0LCAweDQ2LCAweDEwLCAweDA4LCAweDQ5LCAweDIxLCAweDAwLAorMHg4MSwgMHgxMiwgMHgwNCwgMHgwQSwgMHgxMCwgMHgyOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjEsIDB4MDAsIDB4ODksIDB4MDAsIDB4MjQsIDB4NDIsIDB4OTAsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDA0LCAweDQ0LCAweDEyLCAweEQwLCAweDE5LCAweDQwLCAweEE0LCAweDAwLAorMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MCwgMHgwNCwgMHg1NCwgMHgwMiwKKzB4MTAsIDB4MzksIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEE4LCAweDJGLCAweDAyLCAweEIzLCAweDAwLCAweENDLCAweDBBLCAweDMwLCAweDBCLCAweEMwLCAweEE3LCAweDA0LAorMHg5RiwgMHgwMSwgMHg1QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDOCwgMHgyNSwgMHg0MCwgMHg5NywgMHgwMCwgMHg1QywgMHgwQSwKKzB4MzQsIDB4MDksIDB4QzgsIDB4MjUsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzQsIDB4MjksIDB4RDAsIDB4MTQsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDY1LCAweDAwLAorMHg5RiwgMHgwMywgMHg3QywgMHgwQSwgMHhFMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDgsIDB4QzQsIDB4MjcsIDB4MDEsIDB4OEIsIDB4NDUsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OTgsIDB4RTAsIDB4MjEsCisweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHgwOCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MTAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MDQsCisweDQwLCAweDEzLCAweDAwLCAweDZDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDA0LCAweDAzLCAweDgwLCAweDdDLAorMHgwMCwgMHgzNCwgMHgyMCwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4QTAsIDB4MTQsIDB4MTAsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NTQsCisweDAxLCAweDc1LCAweDAyLCAweEM0LCAweDA1LCAweEQwLCAweDA1LCAweDUwLCAweEQ4LCAweDQwLCAweDc1LCAweDAwLCAweEM0LAorMHgxMSwgMHgxMCwgMHg0NywgMHg1MCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgxNSwgMHg0MCwKKzB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsCisweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDIwLCAweDAwLCAweEMxLCAweDBBLCAweDI0LAorMHgyNiwgMHhEMCwgMHgwQywgMHg0NCwgMHhGMCwgMHg4NiwgMHhDNCwgMHgwOSwgMHg2NSwgMHgwNywgMHg1MCwgMHgwQywgMHgwMCwKKzB4RjAsIDB4MDAsIDB4QzUsIDB4MjAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDNDLCAweDAxLCAweEYxLCAweDA0LCAweDg0LAorMHhBMywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHg0RSwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4NjUsIDB4MDAsIDB4ODUsIDB4MTMsIDB4NTAsIDB4MEEsIDB4NDAsIDB4OTAsIDB4MDAsIDB4QTUsIDB4MDAsCisweEIwLCAweDAyLCAweDEwLCAweDBGLCAweDQxLCAweDE0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFMywgMHgwNywgMHg4QywgMHgxNywgMHhGMCwgMHg3RSwgMHhEMCwKKzB4NkMsIDB4MDAsIDB4QTMsIDB4MDEsIDB4QUMsIDB4MDUsIDB4RjAsIDB4M0UsIDB4QzEsIDB4NjgsIDB4MDAsIDB4NzcsIDB4MDEsCisweEVELCAweDBGLCAweDc0LCAweDEzLCAweDg0LCAweDQ4LCAweDAwLCAweEE3LCAweDAxLCAweDNDLCAweDA2LCAweDMwLCAweDFFLAorMHhDMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwKKzB4MzEsIDB4NDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4OUYsIDB4MDAsCisweEZELCAweDAwLCAweEYwLCAweDJELCAweEMwLCAweDI3LCAweDAyLCAweDVELCAweDAwLCAweDdDLCAweDAzLCAweDkwLCAweDAxLAorMHhDMCwgMHgwNywgMHg0MCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhEMCwgMHg0MywgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4N0YsIDB4MDQsIDB4RjMsIDB4MDEsCisweENDLCAweDI3LCAweDNDLCAweDFGLCAweEMwLCAweDdCLCAweDAwLCAweDM3LCAweDAxLCAweERDLCAweDA2LCAweDcyLCAweDFGLAorMHhDMCwgMHg2RCwgMHgwMCwgMHhGNywgMHg4MSwgMHhDQywgMHgwNiwgMHgzMSwgMHgxQiwgMHhDMCwgMHg0QywgMHgxMCwgMHhFMywKKzB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDAwLCAweEUxLCAweDAwLCAweEFDLCAweDIzLCAweDE4LCAweDRFLAorMHg0MCwgMHgzQiwgMHgwMCwgMHgyMSwgMHgwNCwgMHg4NCwgMHg4MCwgMHhEMCwgMHg0RSwgMHg0MCwgMHgyQywgMHgwMCwgMHg2MSwKKzB4MDIsIDB4OEMsIDB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MDksIDB4MDAsIDB4QUIsIDB4MDAsIDB4OTQsIDB4MDIsIDB4RDAsCisweDBFLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgwMCwgMHg3OSwgMHgwMCwgMHhFMSwgMHgxMSwgMHg4NCwgMHgwNywgMHgxMiwgMHgxRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHgwNSwKKzB4MDAsIDB4OTAsIDB4MDAsIDB4NTAsIDB4MEUsIDB4NDQsIDB4MDksIDB4MDQsIDB4M0QsIDB4MTAsIDB4ODQsIDB4MDMsIDB4MTAsCisweDAyLCAweDQxLCAweDBBLCAweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDJFLCAweDQwLCAweDAzLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywgMHg0MCwgMHhDMSwKKzB4MTAsIDB4MjQsIDB4MDMsIDB4MTEsIDB4OEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MEMsIDB4RDAsCisweDhDLCAweDQwLCAweDgwLCAweDAxLCAweDA5LCAweDQwLCAweDI0LCAweDBGLCAweDExLCAweDExLCAweDQ0LCAweDAzLCAweDAwLAorMHgwOSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgxMywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4MzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsCisweDNELCAweEMwLCAweDM3LCAweDAwLCAweDg3LCAweDAwLCAweDVDLCAweDFFLCAweDcwLCAweDFGLCAweEMwLCAweDRELCAweDAwLAorMHg5RiwgMHgwMCwgMHhDRCwgMHgxMywgMHgzNCwgMHgwOSwgMHhDMCwgMHgwNiwgMHgwOCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMywKKzB4RjMsIDB4MEQsIDB4QzQsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMxLCAweDM3LCAweDAwLAorMHgxRiwgMHgwOCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwRCwgMHhDNCwgMHg4MywgMHgwMCwgMHg0NywgMHgwMCwgMHg1QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MTAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4OEQsIDB4QzQsIDB4MDcsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDNGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCMywgMHg0MCwgMHhFQywgMHgwMCwKKzB4MzAsIDB4MEQsIDB4QzAsIDB4NEQsIDB4MDAsIDB4QjMsIDB4MDIsIDB4Q0MsIDB4NDMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweEJGLCAweDAxLCAweENDLCAweDE2LCAweDMwLCAweDBGLCAweEMwLCAweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4MTQsIDB4MEQsIDB4NDQsIDB4NzMsIDB4MDIsIDB4OTEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MTQsIDB4MEQsIDB4NTAsIDB4MDQsCisweDg2LCAweDUxLCAweDAyLCAweDZDLCAweDNDLCAweDUwLCAweDMxLCAweDQwLCAweEM1LCAweDAxLCAweDFELCAweDAxLCAweDQ0LAorMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsCisweDAwLCAweDExLCAweDAxLCAweDY0LCAweDA2LCAweDEwLCAweDBDLCAweDRBLCAweDA0LCAweDAwLCAweDk1LCAweDAwLCAweDA0LAorMHgwMiwgMHg1MCwgMHgzOSwgMHg0MCwgMHg0NSwgMHgxMCwgMHhERCwgMHgwNCwgMHg0MCwgMHgwMywgMHgxMSwgMHgxRCwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsCisweDAwLCAweERELCAweDAwLCAweDQ1LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDM3LCAweDQwLCAweDAxLCAweDAwLCAweDQ0LAorMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgwMSwgMHg4MCwgMHg0MSwgMHgwMCwgMHgyNCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwKKzB4MDEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDMsIDB4ODAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDNBLCAweDEwLCAweEVGLCAweDAwLCAweDhDLAorMHgwMywgMHgzMCwgMHgwRiwgMHg0MCwgMHgzNywgMHgwMCwgMHgxMywgMHgwMCwgMHg2QywgMHgwMCwgMHgzOCwgMHgwRiwgMHhEMCwKKzB4MDQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MEQsIDB4MDMsIDB4NjEsIDB4MDEsIDB4ODAsIDB4MDUsIDB4MjAsIDB4OUYsIDB4MDAsCisweDRELCAweDAyLCAweDMwLCAweDBELCAweEMwLCAweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4M0YsIDB4MjAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MEUsIDB4MDAsIDB4MkUsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAyLCAweEYxLCAweDBGLAorMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMSwKKzB4ODIsIDB4QzAsIDB4MEUsIDB4MDIsIDB4M0IsIDB4MDgsIDB4RTAsIDB4MjgsIDB4QjAsIDB4ODMsIDB4RTAsIDB4MEUsIDB4ODIsCisweDM4LCAweDA4LCAweEVDLCAweDIwLCAweDkwLCAweDgzLCAweEM4LCAweDBFLCAweDAyLCAweDFCLCAweDA4LCAweEVDLCAweDI4LAorMHhBOCwgMHg4MywgMHhBMCwgMHgwRSwgMHgwMiwgMHgzQSwgMHgwOCwgMHhDQywgMHgyMCwgMHg5OCwgMHgwMywgMHg4QywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MjIsIDB4QTAsIDB4OEUsIDB4QTAsCisweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEEwLCAweDIzLCAweDIwLCAweDhFLCAweEEwLCAweDNCLCAweDAyLCAweEVBLCAweDA4LAorMHhBOCwgMHgyMywgMHhBMCwgMHg4RSwgMHhBMCwgMHgzMiwgMHgwMiwgMHg0QSwgMHgwOCwgMHhBOCwgMHgyMywgMHg4OCwgMHg4RSwKKzB4ODAsIDB4M0EsIDB4MDIsIDB4Q0EsIDB4MDgsIDB4QTgsIDB4MDMsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDE4LAorMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTgsIDB4MjAsIDB4NDEsIDB4QTAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsCisweDEwLCAweDIwLCAweDAxLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgyMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2OCwgMHgwMCwgMHhBMCwgMHgwMSwgMHhBMCwgMHgwRSwKKzB4MjAsIDB4MUEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MjgsCisweDEwLCAweEE4LCAweDAxLCAweDg4LCAweDA2LCAweDgwLCAweDFBLCAweDAwLCAweDY4LCAweDAwLCAweDg4LCAweDAxLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgxMiwgMHhBMCwgMHg0RSwKKzB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsIDB4MTQsIDB4QTAsIDB4MTMsIDB4QTAsIDB4NEEsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsCisweDA0LCAweEE4LCAweDEzLCAweEEwLCAweDRFLCAweDgyLCAweDNBLCAweDAxLCAweEVBLCAweDA0LCAweEEwLCAweDEzLCAweDgwLAorMHg0QSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFQSwgMHgwQywgMHhBOCwgMHgwMywgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsCisweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLAorMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEEzLCAweDIwLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDAwLCAweDA4LCAweDExLCAweDIwLAorMHgwNCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg0MiwgMHgwNCwgMHgwOCwgMHgxMSwgMHgyMCwgMHhDMCwgMHg4MCwgMHgxMCwgMHgwMSwKKzB4NDIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MDQsIDB4MDgsIDB4MDEsCisweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweEQyLCAweEEwLAorMHgwMiwgMHgwMSwgMHgwQSwgMHgwNSwgMHgyQSwgMHgxMCwgMHhBOCwgMHg1MCwgMHg4MCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwNywKKzB4MkEsIDB4MUMsIDB4QTgsIDB4NTAsIDB4QTAsIDB4NDIsIDB4ODMsIDB4MEEsIDB4MDUsIDB4MkEsIDB4MTAsIDB4QTAsIDB4NTAsCisweDg4LCAweDAyLCAweDAxLCAweDBBLCAweDA1LCAweDJBLCAweDNDLCAweEEwLCAweDAwLCAweDhDLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgzMCwgMHg4MCwgMHhDOCwgMHgwMCwgMHhBQSwgMHgwMywKKzB4QTgsIDB4MEUsIDB4MjAsIDB4MzgsIDB4ODAsIDB4RTAsIDB4MDAsIDB4QUEsIDB4MDcsIDB4MDgsIDB4MUUsIDB4QTAsIDB4MzIsCisweDgwLCAweENBLCAweDAwLCAweDIyLCAweDAzLCAweEE4LCAweDBDLCAweEEwLCAweDNBLCAweEEwLCAweENBLCAweDAwLCAweDJBLAorMHgwMywgMHhBOCwgMHgwQywgMHgyMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4NzIsIDB4MDAsIDB4NDgsIDB4MjAsIDB4MTgsIDB4ODAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA4LCAweDQwLCAweDIwLCAweDA4LCAweDAyLCAweDAwLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDIwLAorMHgwMCwgMHgyMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwOCwgMHg0MiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwKKzB4ODIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MTYsCisweDQwLCAweDE4LCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDFBLCAweDA0LCAweDQwLCAweDEwLCAweDIwLCAweDQxLAorMHg4MCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwKKzB4MDQsIDB4MDgsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4ODIsIDB4OEMsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLCAweEEwLCAweDA2LCAweDgwLCAweDlBLAorMHgwMCwgMHg2QSwgMHgwMiwgMHgyOCwgMHgwOSwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0OCwgMHgwMiwgMHhBOCwKKzB4MDEsIDB4QTAsIDB4MDYsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QjgsIDB4MDksIDB4QTAsIDB4MDYsIDB4QTAsCisweDFCLCAweDAwLCAweDZBLCAweDAwLCAweEE4LCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMCwgMHhDMCwgMHg0NiwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2QywgMHgwMCwgMHhCQywKKzB4MDEsIDB4OTAsIDB4NDYsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NkMsIDB4MDAsIDB4QTgsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MjAsCisweDFCLCAweDgwLCAweDZDLCAweDA0LCAweEEwLCAweDAxLCAweEU4LCAweDQ2LCAweDAwLCAweDFBLCAweDAwLCAweDZDLCAweDAwLAorMHgzMiwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwKKzB4NDIsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MDgsIDB4ODEsCisweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDE4LCAweDQzLCAweDI4LCAweDBDLCAweDAxLCAweDMwLCAweDA0LCAweEMyLCAweDMwLAorMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHgwMywgMHg4QywgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MEMsIDB4MDAsCisweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQwLCAweDgwLCAweDBDLCAweDgzLCAweDMyLCAweDA0LCAweEM4LCAweDM0LAorMHgyOCwgMHg0MywgMHg4MCwgMHgwQywgMHg4MywgMHgzMiwgMHgwNCwgMHhDOCwgMHgxMCwgMHgyMCwgMHg0MywgMHg4MCwgMHgwQywKKzB4MDEsIDB4MzIsIDB4MDQsIDB4QzgsIDB4MTAsIDB4MjgsIDB4NDMsIDB4ODAsIDB4MEMsIDB4ODMsIDB4MzIsIDB4MDQsIDB4QzgsCisweDEwLCAweDIwLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMywgMHg0MiwgMHhBMCwgMHgwNiwgMHg4MywgMHgxQSwgMHgwNCwgMHg2QSwgMHgzMCwgMHhBOCwgMHg0MSwgMHhBMCwgMHgwNiwKKzB4ODMsIDB4MUEsIDB4MDQsIDB4NkEsIDB4MTAsIDB4QTgsIDB4NDEsIDB4QTAsIDB4MDYsIDB4ODEsIDB4MUEsIDB4MDQsIDB4NkEsCisweDMwLCAweEE4LCAweDQxLCAweDgwLCAweDBFLCAweDgzLCAweDBBLCAweDA0LCAweDZBLCAweDEwLCAweEE4LCAweDAxLCAweDhDLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg0MiwgMHgwMCwgMHgwNCwKKzB4MDEsIDB4MzAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzAsCisweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQzLCAweDAwLAorMHgwMCwgMHgwMSwgMHgzMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4NEEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MzAsIDB4MDQsIDB4NjIsCisweDEyLCAweDA4LCAweDRCLCAweDIwLCAweDA2LCAweDgxLCAweEIwLCAweDA0LCAweDYyLCAweDEyLCAweDg4LCAweDQxLCAweDIwLAorMHgyNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgwMCwgMHgwNiwgMHg4MSwgMHgzMCwgMHgwNCwKKzB4NjIsIDB4MTIsIDB4ODgsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIzLCAweDA2LCAweEEwLCAweDFBLCAweDAwLCAweDYyLCAweDAwLCAweEFBLCAweDAxLCAweDIwLCAweDA0LCAweEEwLAorMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4QSwgMHgwMSwgMHhBMCwgMHgwNiwgMHhBMCwgMHgxQSwgMHg4MCwgMHg2QSwgMHg4MCwKKzB4QUEsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4QUEsIDB4MDEsIDB4QTgsIDB4MDIsCisweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDYwLCAweDgwLAorMHg4MiwgMHgwMSwgMHgyQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwKKzB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MEEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsCisweEEwLCAweDgyLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0OCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4NDgsIDB4MTIsIDB4MjAsIDB4NDksIDB4QTAsIDB4MDAsIDB4MDEsIDB4OTIsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjgsIDB4NDEsCisweDgwLCAweDIwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDg4LCAweDAwLCAweDAxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgxMiwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTMsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MDEsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjMsCisweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweDhDLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJBLAorMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHg4QywgMHgxOCwgMHhCMCwKKzB4MDIsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4NjIsCisweEEwLCAweDhFLCAweDAxLCAweDNCLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDYzLCAweEEwLCAweDhFLCAweDgxLCAweDNBLAorMHgwNiwgMHg2OCwgMHgxOCwgMHg4OCwgMHg2MywgMHhBMCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwNiwgMHhFQSwgMHgxOCwgMHg5OCwKKzB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4M0IsIDB4MDYsIDB4Q0EsIDB4MTgsIDB4ODgsIDB4MDMsIDB4OEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDYyLCAweDgwLCAweDhFLCAweDAxLCAweDNBLAorMHgwNiwgMHhFQywgMHgxOCwgMHhBMCwgMHg2MSwgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQSwgMHgwNiwgMHhFOCwgMHgxOCwgMHhBMCwKKzB4NjMsIDB4RTAsIDB4OEUsIDB4MDEsIDB4MUIsIDB4MDYsIDB4RTAsIDB4MTgsIDB4QTAsIDB4NjMsIDB4QzAsIDB4OEUsIDB4MDEsCisweDNBLCAweDA2LCAweEVFLCAweDE4LCAweEIwLCAweDAzLCAweDg4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg2MiwgMHhBMCwgMHg4RSwgMHg4MSwgMHgzMiwgMHgwNiwgMHhFQSwgMHgxOCwgMHgwOCwKKzB4NjMsIDB4QTAsIDB4OEUsIDB4QTEsIDB4MzgsIDB4ODYsIDB4RUEsIDB4MTgsIDB4MjgsIDB4NjEsIDB4MjAsIDB4OEUsIDB4ODEsCisweDMyLCAweDg2LCAweEU4LCAweDE4LCAweEE4LCAweDYzLCAweEEwLCAweDhFLCAweEExLCAweDMwLCAweDA2LCAweEVBLCAweDE4LAorMHhBOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MUEsIDB4ODQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsCisweDMyLCAweDA0LCAweDQ4LCAweDEwLCAweDIyLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLAorMHgyMCwgMHg0MSwgMHg4OCwgMHgwNCwgMHgwMSwgMHgzQSwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODAsIDB4ODYsIDB4ODEsCisweDFBLCAweDA2LCAweDY4LCAweDE4LCAweEEwLCAweDYxLCAweDgwLCAweDg2LCAweDgxLCAweDE4LCAweDA2LCAweDY4LCAweDE4LAorMHhBMCwgMHg2MSwgMHg4MCwgMHg4NCwgMHgwMSwgMHgxQSwgMHgwNiwgMHg2OCwgMHgxOCwgMHhBOCwgMHg2MSwgMHg4MCwgMHg4NiwKKzB4ODEsIDB4MUEsIDB4MDYsIDB4NkEsIDB4MTgsIDB4QTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDAyLCAweEEwLCAweDBFLCAweDgwLCAweDNBLCAweDAwLCAweENBLCAweDAwLAorMHgyMiwgMHgwMywgMHhBMCwgMHgwQywgMHg4MCwgMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywgMHg4MCwgMHgwRSwKKzB4ODAsIDB4MkEsIDB4MDAsIDB4RUEsIDB4MDAsIDB4QTgsIDB4MDMsIDB4QTAsIDB4MEUsIDB4ODAsIDB4M0EsIDB4MDAsIDB4RTgsCisweDAwLCAweEE4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMiwgMHg0MiwgMHgwMCwgMHgwNiwgMHgwMSwgMHgwOCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwOCwgMHg0MSwgMHgwMCwgMHgwNCwKKzB4MDEsIDB4MDAsIDB4MEMsIDB4NDAsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTgsIDB4MDQsIDB4NjAsCisweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDE4LCAweDA0LCAweDYwLCAweDEwLCAweDgwLCAweDAxLCAweDg4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg0MiwgMHgyMCwgMHgwNCwKKzB4ODEsIDB4MTAsIDB4MDQsIDB4MjIsIDB4MTAsIDB4ODgsIDB4NTEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDUsIDB4NjIsCisweDEwLCAweDA4LCAweDQxLCAweDAwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDBBLCAweDQxLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwOCwgMHgwMSwgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NDIsIDB4QTAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MEMsIDB4QUEsCisweDMwLCAweEE4LCAweEMyLCAweEEwLCAweDBBLCAweDAzLCAweDJBLCAweDA0LCAweEFBLCAweDMwLCAweEE4LCAweDQyLCAweEEwLAorMHgwMiwgMHg4MSwgMHgwQSwgMHgwNCwgMHgyQSwgMHgxMCwgMHhBMCwgMHhDMCwgMHhBMCwgMHgwMiwgMHgyMSwgMHgwQSwgMHgwNCwKKzB4MjgsIDB4MTAsIDB4QTgsIDB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDBBLCAweDAzLCAweDJBLCAweDBDLCAweEE4LCAweDEwLCAweEEwLCAweDUyLCAweDgwLAorMHgwQSwgMHgwMywgMHgyQSwgMHgwNSwgMHhBOCwgMHgzMCwgMHhBMCwgMHhDMiwgMHg4MCwgMHgwQSwgMHgwMSwgMHgyQSwgMHgwQywKKzB4QTgsIDB4MzAsIDB4QTAsIDB4QzIsIDB4ODAsIDB4MEEsIDB4MDMsIDB4MkEsIDB4MEMsIDB4QTgsIDB4MTAsIDB4QTAsIDB4MDIsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLAorMHg0MiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHg4MCwKKzB4MjAsIDB4MDAsIDB4ODgsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MjAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODIsIDB4MDAsCisweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg0MiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNCwKKzB4MDQsIDB4MTAsIDB4MTAsIDB4NDEsIDB4NDAsIDB4NDQsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MTQsIDB4MTAsIDB4NDAsCisweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDEwLCAweDEwLCAweDUwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLAorMHgwNCwgMHgwNCwgMHgxMCwgMHgxMCwgMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTIsIDB4MDIsIDB4RTAsIDB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsIDB4NjgsIDB4MDAsIDB4QTgsIDB4MDEsCisweEEwLCAweDA2LCAweDgwLCAweDFCLCAweDAwLCAweDZFLCAweDAwLCAweEE4LCAweDAxLCAweDgwLCAweDA2LCAweDgwLCAweDFBLAorMHgwMCwgMHg2RSwgMHgwMCwgMHhCOCwgMHgwMSwgMHhBMCwgMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwgMHg2QSwgMHgwMCwgMHhBOCwKKzB4MDEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDIsCisweEMwLCAweDA2LCAweDAwLCAweDNCLCAweDAwLCAweDZDLCAweDAwLCAweEEwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDNBLAorMHgwMCwgMHg2OCwgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2QywgMHgwMCwgMHhBMCwKKzB4MDMsIDB4QzAsIDB4MDYsIDB4MDAsIDB4M0EsIDB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDBDLCAweDgwLCAweDE4LAorMHgwMCwgMHhDMiwgMHgwMCwgMHgwOCwgMHgwMSwgMHgyOCwgMHgwQywgMHg4MCwgMHgxOCwgMHg4MCwgMHhDMCwgMHgwMCwgMHgwOCwKKzB4MDMsIDB4MjAsIDB4MEMsIDB4ODIsIDB4MzgsIDB4MDAsIDB4QzIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsIDB4MEMsIDB4ODAsCisweDE4LCAweDAwLCAweEMyLCAweDAwLCAweDA4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyQywgMHgwMCwgMHgxMCwgMHgwMCwgMHhDMCwgMHgwMiwgMHgwMCwKKzB4NjMsIDB4MDAsIDB4MkMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsCisweDEwLCAweDAwLCAweEMwLCAweDAyLCAweDAwLCAweDIxLCAweDAwLCAweDJDLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MjAsIDB4ODAsIDB4OEMsIDB4ODIsIDB4MzIsIDB4MEEsIDB4QzgsIDB4MDgsIDB4MjAsIDB4MjEsIDB4ODAsIDB4OEMsIDB4ODIsCisweDMyLCAweDAyLCAweDg4LCAweDI4LCAweDIwLCAweEEzLCAweDgwLCAweDhDLCAweDAyLCAweDIyLCAweDBBLCAweEM4LCAweDI4LAorMHgyOCwgMHhBMywgMHg4MCwgMHg4QywgMHg4MiwgMHgzMiwgMHgwQSwgMHhDOCwgMHgwOCwgMHgyMCwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4QTAsIDB4MTYsIDB4ODMsCisweDVBLCAweDBDLCAweDZBLCAweDMxLCAweEEwLCAweEM0LCAweEEwLCAweDE2LCAweDgzLCAweDVBLCAweDBDLCAweDZBLCAweDMxLAorMHhBOCwgMHhDNSwgMHhBMCwgMHgxNiwgMHg4MywgMHg0QSwgMHgwQywgMHg2QSwgMHgzMSwgMHhBOCwgMHhFNSwgMHhBMCwgMHgxNiwKKzB4ODMsIDB4NUEsIDB4MEMsIDB4NkEsIDB4MzEsIDB4QTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAyLAorMHgwOCwgMHgyMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyMiwgMHg0NiwgMHg4OCwgMHgxOCwgMHgyMSwgMHg2MiwgMHg4MCwgMHg4QSwgMHgwMSwgMHgyNiwgMHgwNiwKKzB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODAsIDB4ODgsIDB4MTEsIDB4MjIsIDB4NDYsIDB4ODgsIDB4MTgsIDB4MjEsIDB4NjIsCisweDg0LCAweDg4LCAweDAxLCAweDIyLCAweDQ2LCAweDg4LCAweDE4LCAweDIxLCAweDYyLCAweDg0LCAweDg4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwQSwKKzB4MDgsIDB4MkEsIDB4MjAsIDB4QUEsIDB4ODAsIDB4ODgsIDB4MDIsIDB4QTIsIDB4MEEsIDB4MDgsIDB4MkEsIDB4MjAsIDB4QUEsCisweDAwLCAweEFBLCAweDAyLCAweEEyLCAweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEFBLCAweDgwLCAweEEwLCAweDAyLCAweEE2LAorMHgwQSwgMHgwOCwgMHgyQSwgMHgyMCwgMHhBQSwgMHg4MCwgMHhBOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODQsIDB4NDIsIDB4MTAsIDB4MEEsIDB4NDEsIDB4MjgsCisweDQ0LCAweEExLCAweDEwLCAweDhDLCAweDRBLCAweDEwLCAweDJBLCAweDQxLCAweDI4LCAweDA0LCAweEExLCAweDEwLCAweDA0LAorMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwgMHgyOCwgMHg4NCwgMHg4MSwgMHgxMCwgMHg4NCwgMHg0QSwgMHgxMCwgMHgwQSwgMHg0MSwKKzB4MjAsIDB4MDQsIDB4QTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDAwLCAweDE0LCAweDAwLCAweDUwLCAweDgwLAorMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwMCwgMHgxNCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwKKzB4MDgsIDB4MTQsIDB4MjAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweEMwLAorMHhDQSwgMHgyMCwgMHgyQiwgMHgwMywgMHg4QywgMHgwQywgMHgzMCwgMHgzMiwgMHg0MCwgMHhDMCwgMHgwMCwgMHgwMSwgMHgwMywKKzB4ODgsIDB4MEMsIDB4MzAsIDB4MzIsIDB4QzAsIDB4Q0EsIDB4MDAsIDB4MkIsIDB4MDMsIDB4QUMsIDB4MEMsIDB4QjAsIDB4MzIsCisweDQwLCAweEMwLCAweDAwLCAweDJCLCAweDAzLCAweEFDLCAweDBDLCAweEIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBNCwgMHg0RSwgMHg4MCwgMHgzQSwgMHgwMSwKKzB4RUEsIDB4MDQsIDB4QjgsIDB4MTMsIDB4QTAsIDB4NEUsIDB4ODAsIDB4M0IsIDB4NDEsIDB4RUEsIDB4MDQsIDB4QTgsIDB4MTMsCisweEEwLCAweDRFLCAweDg0LCAweDNCLCAweDAxLCAweEVBLCAweDA0LCAweEI4LCAweDEzLCAweEEwLCAweDRFLCAweDgwLCAweDNCLAorMHgwMSwgMHhFMiwgMHg0NCwgMHhBOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4MTAsIDB4MTIsIDB4MjMsIDB4MDgsIDB4OEMsIDB4MjEsIDB4MzAsIDB4ODAsIDB4QzAsCisweDEwLCAweDAyLCAweDIzLCAweDA4LCAweDBDLCAweDIxLCAweDMwLCAweDg0LCAweEM0LCAweDE4LCAweDEyLCAweDQzLCAweDQ4LAorMHg4QywgMHgyMSwgMHgzMSwgMHg4MiwgMHhDMCwgMHgxOCwgMHgxMiwgMHhBMywgMHg0OCwgMHg4QywgMHgyMSwgMHgzMSwgMHg4NCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLAorMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwKKzB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCNCwgMHhERiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgwRCwgMHhDRCwgMHhCRSwKKzB4N0MsIDB4REIsIDB4RDAsIDB4NkMsIDB4NDMsIDB4RkIsIDB4MEQsIDB4RUQsIDB4MzcsIDB4MzQsIDB4REIsIDB4RDAsIDB4N0UsCisweDQzLCAweEIzLCAweDBELCAweENELCAweEJFLCAweDdDLCAweERCLCAweEQwLCAweDZDLCAweDQzLCAweEIzLCAweDBELCAweEVELAorMHgzNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4Q0MsIDB4M0YsIDB4MzIsIDB4RjMsIDB4QzgsIDB4Q0MsIDB4MjMsIDB4MzMsIDB4QkYsIDB4RkMsIDB4M0MsIDB4MzIsIDB4RjMsCisweEM4LCAweEZDLCAweDIzLCAweEYzLCAweDhGLCAweENDLCAweDNDLCAweDMyLCAweEZGLCAweEM4LCAweENDLCAweDIzLCAweDMzLAorMHhCRiwgMHhGQywgMHgzQywgMHgzMiwgMHhGMywgMHhDOCwgMHhDQywgMHgyMywgMHhGMywgMHg4RiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4REMsIDB4NzgsIDB4NzIsIDB4N0IsCisweDQ4LCAweEVDLCAweDI3LCAweDMxLCAweDg2LCAweEM0LCAweDc4LCAweDEyLCAweDdCLCAweDQ4LCAweDhDLCAweDI3LCAweEIxLAorMHg5RiwgMHhEQywgMHg3RSwgMHg3MiwgMHhFMywgMHhDOSwgMHhFRCwgMHgyNywgMHhCNywgMHg4NywgMHhDNCwgMHg3RSwgMHg3MiwKKzB4N0IsIDB4QzgsIDB4RUQsIDB4MjcsIDB4MzcsIDB4OUUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDhFLCAweDAyLCAweDM5LCAweDA4LCAweEU0LCAweDIwLAorMHg4MCwgMHg4MywgMHg0MCwgMHgwRSwgMHgwMiwgMHgzOSwgMHgwOCwgMHhFNCwgMHgyMCwgMHg5MCwgMHg4MywgMHg0MCwgMHgwRSwKKzB4MDIsIDB4MzksIDB4MDgsIDB4RTAsIDB4MjAsIDB4OTAsIDB4ODMsIDB4NDAsIDB4OEUsIDB4MDIsIDB4MzksIDB4MEEsIDB4RTAsCisweDI4LCAweDgwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyMCwgMHhBMCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhBOCwgMHgyMywgMHhBMCwgMHg4RSwKKzB4ODAsIDB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QTgsIDB4MjMsIDB4QTAsIDB4OEUsIDB4ODAsIDB4M0EsIDB4MDIsIDB4RUEsCisweDA4LCAweEFBLCAweDIzLCAweEEwLCAweDhFLCAweDgxLCAweDNBLCAweDA2LCAweEVBLCAweDE4LCAweEI4LCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwNCwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsCisweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLAorMHg4NCwgMHgwMSwgMHgxMiwgMHgwNiwgMHg0OCwgMHgxOCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsCisweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDIwLAorMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwKKzB4NjIsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDRFLCAweDgwLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDg4LCAweDkzLCAweDIwLAorMHg0RSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHg4OCwgMHgxMywgMHgyMCwgMHg0QSwgMHg4MCwgMHgzOCwgMHgwMSwKKzB4RTIsIDB4MDQsIDB4ODgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4RTIsIDB4MDQsIDB4ODgsIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsCisweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDA4LCAweDYwLCAweDI4LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg2NCwgMHg4MCwgMHgxMCwgMHgwMSwKKzB4NDIsIDB4MEEsIDB4MDgsIDB4MzEsIDB4MjAsIDB4NDQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MEMsIDB4MDgsIDB4MDksCisweDIwLCAweDQ0LCAweDgwLCAweDkwLCAweDAwLCAweDQyLCAweDA0LCAweDA4LCAweDExLCAweDIwLCAweDY0LCAweDgwLCAweDkwLAorMHgwMCwgMHg0MiwgMHgwMiwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RDQsIDB4MjAsIDB4NTIsIDB4ODEsIDB4NDgsIDB4MDUsIDB4MjIsIDB4MTEsIDB4ODAsIDB4NTQsCisweDIwLCAweDUyLCAweDgxLCAweDQ4LCAweDA1LCAweDIyLCAweDE1LCAweDg4LCAweDQ0LCAweDAwLCAweDUyLCAweDgxLCAweDQ4LAorMHgwNCwgMHgyMCwgMHgxNSwgMHg4OCwgMHg1NCwgMHgyMCwgMHg1MiwgMHg4MSwgMHg0OCwgMHgwQywgMHgyMCwgMHgxMSwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MzAsCisweDAwLCAweEM4LCAweDAwLCAweDI4LCAweDAzLCAweEEwLCAweDNDLCAweDIwLCAweDMwLCAweDAwLCAweENBLCAweDAwLCAweDAwLAorMHgwMywgMHhBMCwgMHgwQywgMHg4MCwgMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywgMHhBMCwgMHgwQywgMHg4MCwKKzB4MzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwRSwgMHg4MCwgMHgyMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHg4MCwKKzB4MTgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsCisweDg4LCAweDAxLCAweDIwLCAweDBBLCAweDA4LCAweDAyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgyMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywKKzB4MDIsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsCisweDEwLCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDY2LCAweDAwLAorMHg4OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MDYsIDB4MDAsCisweDE5LCAweDAwLCAweDY0LCAweDA0LCAweDgwLCAweDAxLCAweDQwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDY0LCAweDAwLAorMHg5MCwgMHgxMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOSwgMHgwMSwgMHg2MCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNiwKKzB4MDAsIDB4MTksIDB4MDEsIDB4NjIsIDB4MDAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLAorMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyOCwgMHgwQywKKzB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsCisweDEwLCAweDE4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsCisweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwQywKKzB4MDEsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzAsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzAsCisweDEwLCAweDAwLCAweEMzLCAweDIwLCAweDBDLCAweDAxLCAweDMwLCAweDBDLCAweEMyLCAweDEwLCAweDAwLCAweDQzLCAweDAwLAorMHgwQywgMHgwMSwgMHgzMCwgMHgwQywgMHhDMiwgMHgzNCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsCisweDMwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDg4LCAweEMxLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxOCwgMHgwQywgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwQywKKzB4NjAsIDB4MTAsIDB4ODgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDgwLCAweDQyLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQzLCAweDAwLAorMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwQywgMHgwMSwgMHgxMCwgMHgwNCwKKzB4QzAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4QzAsIDB4MTAsIDB4ODAsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDgwLCAweDQyLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwKKzB4NjIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MTgsIDB4MDQsIDB4QzIsIDB4MTAsIDB4ODgsIDB4NDEsCisweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweEMwLCAweDMwLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4MCwgMHgyOCwgMHgwMCwKKzB4QTIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MEEsIDB4ODAsIDB4MjgsIDB4MDAsIDB4QTIsIDB4MDAsIDB4ODgsIDB4MDIsCisweDAwLCAweDA4LCAweDgwLCAweDI4LCAweDAwLCAweDgwLCAweDAwLCAweDg4LCAweDAyLCAweDIwLCAweDBBLCAweDgwLCAweDI4LAorMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsCisweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LAorMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDEyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDgxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwKKzB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLAorMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwKKzB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsCisweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDAyLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFMiwgMHgxOCwgMHg5OCwKKzB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RTIsIDB4MTgsIDB4ODgsIDB4NjMsIDB4NDAsIDB4OEUsIDB4ODEsCisweDM4LCAweDA2LCAweEU2LCAweDE4LCAweDg4LCAweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDM4LCAweDg2LCAweEU2LCAweDE4LAorMHg4OCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwKKzB4NjIsIDB4NDAsIDB4OEUsIDB4MDEsIDB4MzksIDB4MDYsIDB4RTAsIDB4MTgsIDB4QTAsIDB4NjMsIDB4NDAsIDB4OEUsIDB4MDEsCisweDM5LCAweDA2LCAweEU0LCAweDE4LCAweDkwLCAweDYzLCAweDAwLCAweDhFLCAweDAxLCAweDM5LCAweDA2LCAweEUwLCAweDE4LAorMHg5MCwgMHg2MywgMHg0MCwgMHg4RSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFMCwgMHgxOCwgMHg4MCwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4QTIsIDB4NjIsIDB4QTAsIDB4OEUsIDB4ODEsCisweDNBLCAweDA2LCAweEU4LCAweDE4LCAweDg4LCAweDYzLCAweEEwLCAweDhFLCAweEExLCAweDNBLCAweDA2LCAweEVBLCAweDE4LAorMHhBOCwgMHg2MywgMHgyMCwgMHg4QywgMHg4MSwgMHgzQSwgMHgwNiwgMHhDMiwgMHgxOCwgMHhBOCwgMHg2MywgMHhBMCwgMHg4RSwKKzB4ODEsIDB4M0EsIDB4MDYsIDB4QzIsIDB4MTgsIDB4MTgsIDB4NDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEyLAorMHgyMCwgMHg0QiwgMHg4MCwgMHgyNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMiwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwRSwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4RTgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4RTgsCisweDEyLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHg2MCwgMHgwMCwgMHg4NiwgMHgwMSwgMHgxOCwgMHgwNiwgMHg2MCwgMHgxOCwgMHg4OCwgMHg2MSwgMHgwMCwgMHg4NiwKKzB4MDEsIDB4MTgsIDB4MDYsIDB4NjAsIDB4MTgsIDB4ODAsIDB4NjEsIDB4MjAsIDB4ODYsIDB4MDEsIDB4MTgsIDB4MDYsIDB4NjIsCisweDE4LCAweDgwLCAweDYxLCAweDAwLCAweDg2LCAweDAxLCAweDE4LCAweDA2LCAweDYyLCAweDE4LCAweDAwLCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwNiwgMHgyMCwgMHgxRSwKKzB4ODAsIDB4NzAsIDB4MDAsIDB4RTIsIDB4MDEsIDB4MDgsIDB4MDcsIDB4MjAsIDB4MUUsIDB4ODAsIDB4NzAsIDB4MDAsIDB4RTIsCisweDAxLCAweDg4LCAweDA3LCAweDIwLCAweDFFLCAweDgwLCAweDc4LCAweDAwLCAweEMyLCAweDAxLCAweDg4LCAweDA3LCAweDIwLAorMHgxRSwgMHg4MCwgMHg3OCwgMHgwMCwgMHhDMiwgMHgwMSwgMHg4OCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4NEEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NjAsCisweDEyLCAweDAwLCAweDQ5LCAweDAwLCAweDI2LCAweDAxLCAweDEwLCAweDA0LCAweDYwLCAweDEyLCAweDgwLCAweDQxLCAweDAwLAorMHgwNiwgMHgwMSwgMHgxOCwgMHgwNCwgMHg0MCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxOCwgMHgwNCwKKzB4NDAsIDB4MTIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDgwLCAweDQyLCAweDIwLCAweDA0LCAweDgxLCAweDE4LCAweDA0LCAweDQyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLAorMHg0NCwgMHg4MSwgMHgxOCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwKKzB4NjIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDIwLAorMHgwMiwgMHg4MywgMHgyOCwgMHgwNCwgMHgyMiwgMHgzMCwgMHg4MCwgMHg0MiwgMHgyMCwgMHgwMiwgMHg4MywgMHgyOCwgMHgwNCwKKzB4MjIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDgsIDB4MEMsIDB4QTAsIDB4MTAsIDB4ODgsIDB4NDAsCisweDIwLCAweDAyLCAweDgxLCAweDA4LCAweDBDLCAweEEwLCAweDEwLCAweDgwLCAweDAwLCAweDg4LCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwQywKKzB4QTAsIDB4MzAsIDB4ODAsIDB4QzIsIDB4MDAsIDB4NEEsIDB4MDEsIDB4MjgsIDB4MEMsIDB4QTAsIDB4MzAsIDB4ODAsIDB4QzIsCisweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDBDLCAweEEwLCAweDMwLCAweDgwLCAweEMyLCAweDAwLCAweDBBLCAweDAzLCAweDI4LAorMHgwQywgMHhBMCwgMHgxMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MTAsCisweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwNCwgMHg4OCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsCisweDQwLCAweDQwLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDE0LCAweDEwLCAweDQwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLAorMHgwNCwgMHgwNCwgMHgxMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNSwgMHgwNCwgMHgxMCwgMHgxMCwKKzB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDAyLCAweDIwLCAweDA2LCAweDgwLCAweDE4LAorMHgwMCwgMHg2NiwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwKKzB4MDEsIDB4NjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjYsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsCisweDE4LCAweDAwLCAweDY2LCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5OSwgMHgwMCwgMHg2NCwgMHgwMiwgMHg4MCwKKzB4MEIsIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MEUsIDB4MDAsCisweDk4LCAweDAwLCAweEUwLCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDA2LCAweDgwLCAweDk5LCAweDAwLCAweEUwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwKKzB4MDYsIDB4MjAsIDB4MUMsIDB4ODAsIDB4NzAsIDB4MDAsIDB4QzIsIDB4MDEsIDB4ODgsIDB4MDUsIDB4MjAsIDB4MUMsIDB4ODIsCisweDcwLCAweDAwLCAweEMyLCAweDAxLCAweDA4LCAweDA3LCAweDIwLCAweDE2LCAweDAwLCAweDcwLCAweDAwLCAweDYyLCAweDAxLAorMHgwOCwgMHgwNywgMHgyOCwgMHgxQywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MiwgMHgwMSwgMHgxOCwgMHgwMSwgMHg4OCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MEMsIDB4MDIsCisweDMwLCAweDBFLCAweEMwLCAweDIwLCAweDAwLCAweEUxLCAweDAwLCAweDBDLCAweDAyLCAweDMwLCAweDBBLCAweEMwLCAweDIwLAorMHgwMCwgMHg4MywgMHgwMCwgMHgwNCwgMHgwMiwgMHgzMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MywgMHgwMCwgMHgwQywKKzB4MDIsIDB4MzAsIDB4MEEsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDIwLCAweDAwLCAweEFDLCAweDAyLCAweEIwLCAweDBBLCAweEMwLCAweDJBLAorMHgwOCwgMHhBQiwgMHgwMCwgMHhBQywgMHgwMiwgMHhCMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgwMCwgMHhBMywgMHgyMCwgMHg4QywKKzB4MDIsIDB4QjAsIDB4MEEsIDB4QzIsIDB4MjgsIDB4MDAsIDB4QTMsIDB4MDAsIDB4OEMsIDB4ODIsIDB4QjAsIDB4MUUsIDB4QzIsCisweDA4LCAweDAwLCAweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBMiwgMHhDMiwgMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwgMHgwRSwgMHg2MiwgMHgzMCwgMHg4OCwgMHhFMSwgMHgyMCwgMHgwNiwKKzB4ODMsIDB4MTgsIDB4MEUsIDB4NjIsIDB4MzAsIDB4ODgsIDB4QzEsIDB4MjAsIDB4MDYsIDB4ODMsIDB4MTgsIDB4MEMsIDB4NjIsCisweDMwLCAweDg4LCAweEMxLCAweDIwLCAweDA2LCAweDAzLCAweDE4LCAweDFFLCAweDYyLCAweDMwLCAweDg4LCAweDAxLCAweDg4LAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMiwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTIsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MDEsIDB4NjIsCisweDgwLCAweDg4LCAweDExLCAweDIwLCAweDA2LCAweDg4LCAweDE4LCAweDAxLCAweDYyLCAweDg0LCAweDg4LCAweDExLCAweDIyLAorMHg0NiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgxMSwgMHgyMiwgMHg0NiwgMHgwOCwgMHgxOCwgMHg0MCwKKzB4NjIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEEyLCAweDAyLCAweDIyLCAweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEEyLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMiwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwKKzB4QTAsIDB4ODAsIDB4ODgsIDB4MDIsIDB4MjIsIDB4MEEsIDB4MDgsIDB4MjgsIDB4MjAsIDB4QTAsIDB4NDAsIDB4ODAsIDB4MDIsCisweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDEwLCAweDA0LAorMHg0MiwgMHgwMCwgMHgyOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMiwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwKKzB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4QTAsIDB4MDQsIDB4ODEsIDB4MTAsCisweDA0LCAweDQyLCAweDAwLCAweDA4LCAweDAwLCAweEEwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwKKzB4MDgsIDB4MTQsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsIDB4NTAsCisweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDAwLCAweDE0LCAweDIwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLAorMHg2RCwgMHgwMCwgMHg5NCwgMHgyOCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QTIsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4MDIsIDB4MjEsIDB4MEIsIDB4QUMsIDB4MkMsIDB4MTAsIDB4QjIsCisweEMwLCAweENBLCAweDAyLCAweDIzLCAweDBCLCAweEFDLCAweDJDLCAweEIwLCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDJBLAorMHgwQiwgMHg4NCwgMHgyQywgMHhCMCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyQSwgMHgyQiwgMHg4NCwgMHg2QywgMHhCMCwKKzB4MDIsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTIsCisweDIwLCAweDRFLCAweDgwLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDk4LCAweDEzLCAweDIwLCAweDRFLCAweDgwLCAweDM4LAorMHgwMSwgMHhFMiwgMHgwNCwgMHg4MCwgMHgxMywgMHg2MCwgMHg0RSwgMHg4MCwgMHgzOSwgMHgwMSwgMHhFNiwgMHgwNCwgMHg4OCwKKzB4MTMsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsIDB4MDksIDB4RTYsIDB4MDAsIDB4ODksIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweDEwLCAweDAyLCAweDIzLCAweDA4LAorMHg4QywgMHgyMSwgMHgzMCwgMHg4MCwgMHhDMCwgMHgxMCwgMHgwMiwgMHg0MywgMHgwOCwgMHg4QywgMHgyMSwgMHgzMSwgMHg4NCwKKzB4QzQsIDB4MDgsIDB4MTIsIDB4NjMsIDB4MDgsIDB4OEMsIDB4MjAsIDB4MzEsIDB4ODYsIDB4QzQsIDB4MTgsIDB4MTIsIDB4MjMsCisweDA4LCAweDhDLCAweDIwLCAweDMxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwKKzB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsCisweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLAorMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4REIsIDB4RDAsIDB4RUMsCisweENCLCAweEI3LCAweDBELCAweEVELCAweDM3LCAweEZDLCAweERGLCAweEQwLCAweDZDLCAweEMzLCAweEI3LCAweDBELCAweEVELAorMHgzNywgMHgzNCwgMHhEQiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgwRCwgMHhDRCwgMHgzNiwgMHgzNCwgMHhEQiwgMHhEMCwKKzB4RUMsIDB4Q0IsIDB4QjcsIDB4MkYsIDB4RUQsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweENDLCAweDNDLCAweDMyLCAweEYzLCAweENCLCAweENGLCAweDIzLCAweEYzLAorMHg4RiwgMHhGQywgMHgzRiwgMHgzMiwgMHhGMywgMHhDOCwgMHhDRiwgMHgyMywgMHhGMywgMHg4RiwgMHhDQywgMHgzQywgMHgzMiwKKzB4RjMsIDB4QzgsIDB4Q0MsIDB4MjMsIDB4MzMsIDB4OEYsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RjMsIDB4Q0IsIDB4Q0YsIDB4MkYsCisweEYzLCAweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhEQywgMHg3OCwgMHgxMiwgMHhGQiwgMHhDOSwgMHhFRCwgMHgyNywgMHhCMSwgMHg4NywgMHhEQywgMHg3RSwgMHgxMiwKKzB4RTMsIDB4QzksIDB4RUQsIDB4MjcsIDB4QjcsIDB4OUYsIDB4REMsIDB4MUUsIDB4NzIsIDB4RkIsIDB4NDksIDB4RUMsIDB4MjEsCisweEI3LCAweDlGLCAweERDLCAweDdFLCAweDcyLCAweEZCLCAweDQ5LCAweEVDLCAweDIxLCAweDM3LCAweDg2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMSwgMHgwMCwKKzB4ODUsIDB4MzMsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4Q0UsCisweDUwLCAweDMwLCAweDQzLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDM4LCAweDQzLCAweEUxLAorMHgwQywgMHg4NSwgMHgwMCwgMHgxNCwgMHhDRSwgMHg1MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLAorMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwOCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDA4LCAweDEwLCAweDIxLAorMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwgMHgwOCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwKKzB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4MTgsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorMHgwMCwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwKKzB4Q0UsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsCisweEUwLCAweDRDLCAweDgwLCAweDAwLCAweDAxLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4Q0MsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MzMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MzAsIDB4MDMsCisweDAxLCAweDAwLCAweDA0LCAweDMzLCAweDEwLCAweENDLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHhDQywgMHg0MCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHhDQywgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwNCwgMHgzMCwKKzB4MTMsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAxLCAweENDLCAweDA0LCAweDMwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgzOCwKKzB4NTMsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsCisweDMzLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAwLCAweDU0LAorMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4NiwgMHgwNCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsCisweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4ODYsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDAwLCAweDAwLCAweENFLCAweDAwLAorMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywKKzB4ODAsIDB4MDAsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsCisweDAwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MzMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MzgsIDB4MDMsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MzMsIDB4MTAsIDB4Q0UsCisweDQwLCAweDM4LCAweDAzLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwKKzB4Q0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQywgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGMCwgMHhGMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsCisweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLAorMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwKKzB4MDIsIDB4NTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLAorMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwKKzB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsCisweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsCisweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsCisweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDMzLCAweDE1LCAweDAyLCAweDU0LAorMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsCisweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHgyMCwgMHgwMCwKKzB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsCisweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDQzLCAweDIwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsCisweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4M0MsIDB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RjAsIDB4RjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDA0LCAweDgwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHhDMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNCwgMHg4MCwgMHg0MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4QTQsIDB4MDcsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEMwLCAweDBDLCAweDAwLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgwQywgMHgwMCwgMHgwNSwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4NUEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYjMzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9LY29uZmlnCkBAIC0wLDAgKzEsNiBAQAorY29uZmlnIFBPQ0gKKwl0cmlzdGF0ZSAiUmVkcmFwaWRzIFBvY2tldCBDaGFuZ2UgQ2FyZEJ1cyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIFVJTworCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBSZWRyYXBpZHMgUG9ja2V0IENoYW5nZSBDYXJkQnVzIGRldmljZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9jaC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9wb2NoL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYjk2ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfUE9DSCkJCSs9IHBvY2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWU5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9SRUFETUUKQEAgLTAsMCArMSw3IEBACitUT0RPOgorCS0gZml4IHRyYW5zbWl0IG92ZXJmbG93cworCS0gYXVkaXQgdXNlcnNwYWNlIGludGVyZmFjZXMKKwktIGdldCByZXNlcnZlZCBtYWpvci9taW5vciBpZiBuZWVkZWQKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKK1ZpamF5IEt1bWFyIDx2aWpheWt1bWFyQGJyYXZlZ251Lm9yZz4gYW5kIEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTExM2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCkBAIC0wLDAgKzEsMTQyNSBAQAorLyoKKyAqIFVzZXItc3BhY2UgRE1BIGFuZCBVSU8gYmFzZWQgUmVkcmFwaWRzIFBvY2tldCBDaGFuZ2UgQ2FyZEJ1cyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBWaWpheSBLdW1hciA8dmlqYXlrdW1hckBicmF2ZWdudS5vcmc+CisgKgorICogTGljZW5zZWQgdW5kZXIgR1BMIHZlcnNpb24gMiBvbmx5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAicG9jaC5oIgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1JSQVBJRFMKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SUkFQSURTIDB4MTdEMgorI2VuZGlmCisKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9SUkFQSURTX1BPQ0tFVF9DSEFOR0UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUkFQSURTX1BPQ0tFVF9DSEFOR0UgMHgwMzUxCisjZW5kaWYKKworI2RlZmluZSBQT0NIX05DSEFOTkVMUyAyCisKKyNkZWZpbmUgTUFYX1BPQ0hfQ0FSRFMgOAorI2RlZmluZSBNQVhfUE9DSF9ERVZJQ0VTIChNQVhfUE9DSF9DQVJEUyAqIFBPQ0hfTkNIQU5ORUxTKQorCisjZGVmaW5lIERSVl9OQU1FICJwb2NoIgorI2RlZmluZSBQRlggICAgICBEUlZfTkFNRSAiOiAiCisKKy8qCisgKiBCQVIwIEJyaWRnZSBSZWdpc3RlciBEZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgQlJJREdFX1JFVl9SRUcJCQkweDAKKyNkZWZpbmUgQlJJREdFX0lOVF9NQVNLX1JFRwkJMHg0CisjZGVmaW5lIEJSSURHRV9JTlRfU1RBVF9SRUcJCTB4OAorCisjZGVmaW5lIEJSSURHRV9JTlRfQUNUSVZFCQkoMHgxIDw8IDMxKQorI2RlZmluZSBCUklER0VfSU5UX0ZQR0EJCSAgICAgICAgKDB4MSA8PCAyKQorI2RlZmluZSBCUklER0VfSU5UX1RFTVBfRkFJTAkJKDB4MSA8PCAxKQorI2RlZmluZQlCUklER0VfSU5UX1RFTVBfV0FSTgkJKDB4MSA8PCAwKQorCisjZGVmaW5lIEJSSURHRV9GUEdBX1JFU0VUX1JFRwkJMHhDCisKKyNkZWZpbmUgQlJJREdFX0NBUkRfUE9XRVJfUkVHCQkweDEwCisjZGVmaW5lIEJSSURHRV9DQVJEX1BPV0VSX0VOICAgICAgICAgICAgKDB4MSA8PCAwKQorI2RlZmluZSBCUklER0VfQ0FSRF9QT1dFUl9QUk9HX0RPTkUgICAgICgweDEgPDwgMzEpCisKKyNkZWZpbmUgQlJJREdFX0pUQUdfUkVHCQkJMHgxNAorI2RlZmluZSBCUklER0VfRE1BX0dPX1JFRwkJMHgxOAorI2RlZmluZSBCUklER0VfU1RBVF8wX1JFRwkJMHgxQworI2RlZmluZSBCUklER0VfU1RBVF8xX1JFRwkJMHgyMAorI2RlZmluZSBCUklER0VfU1RBVF8yX1JFRwkJMHgyNAorI2RlZmluZSBCUklER0VfU1RBVF8zX1JFRwkJMHgyOAorI2RlZmluZSBCUklER0VfVEVNUF9TVEFUX1JFRwkJMHgyQworI2RlZmluZSBCUklER0VfVEVNUF9USFJFU0hfUkVHCQkweDMwCisjZGVmaW5lIEJSSURHRV9FRVBST01fUkVWU0VMX1JFRwkweDM0CisjZGVmaW5lIEJSSURHRV9DSVNfU1RSVUNUX1JFRwkJMHgxMDAKKyNkZWZpbmUgQlJJREdFX0JPQVJEUkVWX1JFRwkJMHgxMjQKKworLyoKKyAqIEJBUjEgRlBHQSBSZWdpc3RlciBEZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgRlBHQV9JRkFDRV9SRVZfUkVHCQkweDAKKyNkZWZpbmUgRlBHQV9SWF9CTE9DS19TSVpFX1JFRwkJMHg4CisjZGVmaW5lIEZQR0FfVFhfQkxPQ0tfU0laRV9SRUcJCTB4QworI2RlZmluZSBGUEdBX1JYX0JMT0NLX0NPVU5UX1JFRwkJMHgxMAorI2RlZmluZSBGUEdBX1RYX0JMT0NLX0NPVU5UX1JFRwkJMHgxNAorI2RlZmluZSBGUEdBX1JYX0NVUlJfRE1BX0JMT0NLX1JFRwkweDE4CisjZGVmaW5lIEZQR0FfVFhfQ1VSUl9ETUFfQkxPQ0tfUkVHCTB4MUMKKyNkZWZpbmUgRlBHQV9SWF9HUk9VUF9DT1VOVF9SRUcJCTB4MjAKKyNkZWZpbmUgRlBHQV9UWF9HUk9VUF9DT1VOVF9SRUcJCTB4MjQKKyNkZWZpbmUgRlBHQV9SWF9DVVJSX0dST1VQX1JFRwkJMHgyOAorI2RlZmluZSBGUEdBX1RYX0NVUlJfR1JPVVBfUkVHCQkweDJDCisjZGVmaW5lIEZQR0FfUlhfQ1VSUl9QQ0lfUkVHCQkweDM4CisjZGVmaW5lIEZQR0FfVFhfQ1VSUl9QQ0lfUkVHCQkweDNDCisjZGVmaW5lIEZQR0FfUlhfR1JPVVAwX1NUQVJUX1JFRwkweDQwCisjZGVmaW5lIEZQR0FfVFhfR1JPVVAwX1NUQVJUX1JFRwkweEMwCisjZGVmaW5lIEZQR0FfRE1BX0RFU0NfMV9SRUcJCTB4MTQwCisjZGVmaW5lIEZQR0FfRE1BX0RFU0NfMl9SRUcJCTB4MTQ0CisjZGVmaW5lIEZQR0FfRE1BX0RFU0NfM19SRUcJCTB4MTQ4CisjZGVmaW5lIEZQR0FfRE1BX0RFU0NfNF9SRUcJCTB4MTRDCisKKyNkZWZpbmUgRlBHQV9ETUFfSU5UX1NUQVRfUkVHCQkweDE1MAorI2RlZmluZSBGUEdBX0RNQV9JTlRfTUFTS19SRUcJCTB4MTU0CisjZGVmaW5lIEZQR0FfRE1BX0lOVF9SWAkJKDEgPDwgMCkKKyNkZWZpbmUgRlBHQV9ETUFfSU5UX1RYCQkoMSA8PCAxKQorCisjZGVmaW5lIEZQR0FfUlhfR1JPVVBTX1BFUl9JTlRfUkVHCTB4MTU4CisjZGVmaW5lIEZQR0FfVFhfR1JPVVBTX1BFUl9JTlRfUkVHCTB4MTVDCisjZGVmaW5lIEZQR0FfRE1BX0FEUl9QQUdFX1JFRwkJMHgxNjAKKyNkZWZpbmUgRlBHQV9GUEdBX1JFVl9SRUcJCTB4MjAwCisKKyNkZWZpbmUgRlBHQV9BRENfQ0xPQ0tfQ1RMX1JFRwkJMHgyMDQKKyNkZWZpbmUgRlBHQV9BRENfQ0xPQ0tfQ1RMX09TQ19FTgkoMHgxIDw8IDMpCisjZGVmaW5lIEZQR0FfQURDX0NMT0NLX0xPQ0FMX0NMSwkoMHgxIHwgRlBHQV9BRENfQ0xPQ0tfQ1RMX09TQ19FTikKKyNkZWZpbmUgRlBHQV9BRENfQ0xPQ0tfRVhUX1NBTVBfQ0xLCTBYMAorCisjZGVmaW5lIEZQR0FfQURDX0RBQ19FTl9SRUcJCTB4MjA4CisjZGVmaW5lIEZQR0FfQURDX0RBQ19FTl9EQUNfT0ZGICAgICAgICAgKDB4MSA8PCAxKQorI2RlZmluZSBGUEdBX0FEQ19EQUNfRU5fQURDX09GRiAgICAgICAgICgweDEgPDwgMCkKKworI2RlZmluZSBGUEdBX0lOVF9TVEFUX1JFRwkJMHgyMEMKKyNkZWZpbmUgRlBHQV9JTlRfTUFTS19SRUcJCTB4MjEwCisjZGVmaW5lIEZQR0FfSU5UX1BMTF9VTkxPQ0tFRAkJKDB4MSA8PCA5KQorI2RlZmluZSBGUEdBX0lOVF9ETUFfQ09SRQkJKDB4MSA8PCA4KQorI2RlZmluZSBGUEdBX0lOVF9UWF9GRl9FTVBUWQkJKDB4MSA8PCA3KQorI2RlZmluZSBGUEdBX0lOVF9SWF9GRl9FTVBUWQkJKDB4MSA8PCA2KQorI2RlZmluZSBGUEdBX0lOVF9UWF9GRl9PVlJGTFcJCSgweDEgPDwgMykKKyNkZWZpbmUgRlBHQV9JTlRfUlhfRkZfT1ZSRkxXCQkoMHgxIDw8IDIpCisjZGVmaW5lIEZQR0FfSU5UX1RYX0FDUV9ET05FCQkoMHgxIDw8IDEpCisjZGVmaW5lIEZQR0FfSU5UX1JYX0FDUV9ET05FCQkoMHgxKQorCisjZGVmaW5lIEZQR0FfUlhfQURDX0NUTF9SRUcJCTB4MjE0CisjZGVmaW5lIEZQR0FfUlhfQURDX0NUTF9DT05UX0NBUAkoMHgwKQorI2RlZmluZSBGUEdBX1JYX0FEQ19DVExfU05BUF9DQVAJKDB4MSkKKworI2RlZmluZSBGUEdBX1JYX0FSTV9SRUcJCQkweDIxQworCisjZGVmaW5lIEZQR0FfRE9NX1JFRwkJCTB4MjI0CisjZGVmaW5lCUZQR0FfRE9NX0RDTV9SRVNFVAkJKDB4MSA8PCA1KQorI2RlZmluZSBGUEdBX0RPTV9TT0ZUX1JFU0VUCQkoMHgxIDw8IDQpCisjZGVmaW5lIEZQR0FfRE9NX0RVQUxfTV9TR19ETUEJCSgweDApCisjZGVmaW5lIEZQR0FfRE9NX1RBUkdFVF9BQ0NFU1MJCSgweDEpCisKKyNkZWZpbmUgRlBHQV9UWF9DVExfUkVHCQkJMHgyMjgKKyNkZWZpbmUgRlBHQV9UWF9DVExfRklGT19GTFVTSCAgICAgICAgICAoMHgxIDw8IDkpCisjZGVmaW5lIEZQR0FfVFhfQ1RMX09VVFBVVF9aRVJPICAgICAgICAgKDB4MCA8PCAyKQorI2RlZmluZSBGUEdBX1RYX0NUTF9PVVRQVVRfQ0FSREJVUyAgICAgICgweDEgPDwgMikKKyNkZWZpbmUgRlBHQV9UWF9DVExfT1VUUFVUX0FEQyAgICAgICAgICAoMHgyIDw8IDIpCisjZGVmaW5lIEZQR0FfVFhfQ1RMX09VVFBVVF9TTkFQU0hPVCAgICAgKDB4MyA8PCAyKQorI2RlZmluZSBGUEdBX1RYX0NUTF9MT09QQkFDSyAgICAgICAgICAgICgweDEgPDwgMCkKKworI2RlZmluZSBGUEdBX0VORElBTl9NT0RFX1JFRwkJMHgyMkMKKyNkZWZpbmUgRlBHQV9SWF9GSUZPX0NPVU5UX1JFRwkJMHgyOEMKKyNkZWZpbmUgRlBHQV9UWF9FTkFCTEVfUkVHCQkweDI5OAorI2RlZmluZSBGUEdBX1RYX1RSSUdHRVJfUkVHCQkweDI5QworI2RlZmluZSBGUEdBX1RYX0RBVEFNRU1fQ09VTlRfUkVHCTB4MkE4CisjZGVmaW5lIEZQR0FfQ0FQX0ZJRk9fUkVHCQkweDMwMAorI2RlZmluZSBGUEdBX1RYX1NOQVBTSE9UX1JFRwkJMHg4MDAwCisKKy8qCisgKiBDaGFubmVsIEluZGV4IERlZmluaXRpb25zCisgKi8KKworZW51bSB7CisJQ0hOT19SWF9DSEFOTkVMLAorCUNITk9fVFhfQ0hBTk5FTCwKK307CisKK3N0cnVjdCBwb2NoX2RldjsKKworZW51bSBjaGFubmVsX2RpciB7CisJQ0hBTk5FTF9ESVJfUlgsCisJQ0hBTk5FTF9ESVJfVFgsCit9OworCitzdHJ1Y3QgcG9jaF9ncm91cF9pbmZvIHsKKwlzdHJ1Y3QgcGFnZSAqcGc7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHVzZXJfb2Zmc2V0OworfTsKKworc3RydWN0IGNoYW5uZWxfaW5mbyB7CisJdW5zaWduZWQgaW50IGNobm87CisKKwlhdG9taWNfdCBzeXNfYmxvY2tfc2l6ZTsKKwlhdG9taWNfdCBzeXNfZ3JvdXBfc2l6ZTsKKwlhdG9taWNfdCBzeXNfZ3JvdXBfY291bnQ7CisKKwllbnVtIGNoYW5uZWxfZGlyIGRpcjsKKworCXVuc2lnbmVkIGxvbmcgYmxvY2tfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX3NpemU7CisJdW5zaWduZWQgbG9uZyBncm91cF9jb3VudDsKKworCS8qIENvbnRhaW5zIHRoZSBETUEgYWRkcmVzcyBhbmQgVk0gb2Zmc2V0IG9mIGVhY2ggZ3JvdXAuICovCisJc3RydWN0IHBvY2hfZ3JvdXBfaW5mbyAqZ3JvdXBzOworCisJLyogQ29udGFpbnMgdGhlIGhlYWRlciBhbmQgY2lyY3VsYXIgYnVmZmVyIGV4cG9ydGVkIHRvIHVzZXJzcGFjZS4gKi8KKwlzcGlubG9ja190IGdyb3VwX29mZnNldHNfbG9jazsKKwlzdHJ1Y3QgcG9jaF9jYnVmX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBwYWdlICpoZWFkZXJfcGc7CisJdW5zaWduZWQgbG9uZyBoZWFkZXJfc2l6ZTsKKworCS8qIExhc3QgZ3JvdXAgaW5kaWNhdGVkIGFzICdjb21wbGV0ZScgdG8gdXNlciBzcGFjZS4gKi8KKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXI7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKworCXVuaW9uIHsKKwkJdW5zaWduZWQgaW50IGRhdGFfYXZhaWxhYmxlOworCQl1bnNpZ25lZCBpbnQgc3BhY2VfYXZhaWxhYmxlOworCX07CisKKwl2b2lkIF9faW9tZW0gKmJyaWRnZV9pb21lbTsKKwl2b2lkIF9faW9tZW0gKmZwZ2FfaW9tZW07CisJc3BpbmxvY2tfdCAqaW9tZW1fbG9jazsKKworCWF0b21pY190IGZyZWU7CisJYXRvbWljX3QgaW5pdGVkOworCisJLyogRXJyb3IgY291bnRlcnMgKi8KKwlzdHJ1Y3QgcG9jaF9jb3VudGVycyBjb3VudGVyczsKKwlzcGlubG9ja190IGNvdW50ZXJzX2xvY2s7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cit9OworCitzdHJ1Y3QgcG9jaF9kZXYgeworCXN0cnVjdCB1aW9faW5mbyB1aW87CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdW5zaWduZWQgaW50IG5jaGFubmVsczsKKwlzdHJ1Y3QgY2hhbm5lbF9pbmZvIGNoYW5uZWxzW1BPQ0hfTkNIQU5ORUxTXTsKKwlzdHJ1Y3QgY2RldiBjZGV2OworCisJLyogQ291bnRzIHRoZSBuby4gb2YgY2hhbm5lbHMgdGhhdCBoYXZlIGJlZW4gb3BlbmVkLiBPbiBmaXJzdAorCSAqIG9wZW4sIHRoZSBjYXJkIGlzIHBvd2VyZWQgb24uIE9uIGxhc3QgY2hhbm5lbCBjbG9zZSwgdGhlCisJICogY2FyZCBpcyBwb3dlcmVkIG9mZi4KKwkgKi8KKwlhdG9taWNfdCB1c2FnZTsKKworCXZvaWQgX19pb21lbSAqYnJpZGdlX2lvbWVtOworCXZvaWQgX19pb21lbSAqZnBnYV9pb21lbTsKKwlzcGlubG9ja190IGlvbWVtX2xvY2s7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cit9OworCitzdGF0aWMgZGV2X3QgcG9jaF9maXJzdF9kZXY7CitzdGF0aWMgc3RydWN0IGNsYXNzICpwb2NoX2NsczsKK3N0YXRpYyBERUZJTkVfSURSKHBvY2hfaWRzKTsKKworc3RhdGljIHNzaXplX3Qgc3RvcmVfYmxvY2tfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGNoYW5uZWxfaW5mbyAqY2hhbm5lbCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgYmxvY2tfc2l6ZTsKKworCXNzY2FuZihidWYsICIlbHUiLCAmYmxvY2tfc2l6ZSk7CisJYXRvbWljX3NldCgmY2hhbm5lbC0+c3lzX2Jsb2NrX3NpemUsIGJsb2NrX3NpemUpOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKGJsb2NrX3NpemUsIFNfSVdVU1J8U19JV0dSUCwgTlVMTCwgc3RvcmVfYmxvY2tfc2l6ZSk7CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2dyb3VwX3NpemUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX3NpemU7CisKKwlzc2NhbmYoYnVmLCAiJWx1IiwgJmdyb3VwX3NpemUpOworCWF0b21pY19zZXQoJmNoYW5uZWwtPnN5c19ncm91cF9zaXplLCBncm91cF9zaXplKTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihncm91cF9zaXplLCBTX0lXVVNSfFNfSVdHUlAsIE5VTEwsIHN0b3JlX2dyb3VwX3NpemUpOworCitzdGF0aWMgc3NpemVfdCBzdG9yZV9ncm91cF9jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX2NvdW50OworCisJc3NjYW5mKGJ1ZiwgIiVsdSIsICZncm91cF9jb3VudCk7CisJYXRvbWljX3NldCgmY2hhbm5lbC0+c3lzX2dyb3VwX2NvdW50LCBncm91cF9jb3VudCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZ3JvdXBfY291bnQsIFNfSVdVU1J8U19JV0dSUCwgTlVMTCwgc3RvcmVfZ3JvdXBfY291bnQpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2RpcmVjdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihidWYsICIlc1xuIiwgKGNoYW5uZWwtPmRpciA/ICJ0eCIgOiAicngiKSk7CisJcmV0dXJuIGxlbjsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkaXIsIFNfSVJVU1J8U19JUkdSUCwgc2hvd19kaXJlY3Rpb24sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X21tYXBfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGxvbmcgbW1hcF9zaXplOworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfcGFnZXM7CisJdW5zaWduZWQgbG9uZyBoZWFkZXJfcGFnZXM7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9ncm91cF9wYWdlczsKKworCS8qIEZJWE1FOiBXZSBkbyBub3QgaGF2ZSB0byBhZGQgMSwgaWYgZ3JvdXBfc2l6ZSBhIG11bHRpcGxlIG9mCisJICAgUEFHRV9TSVpFLiAqLworCWdyb3VwX3BhZ2VzID0gKGNoYW5uZWwtPmdyb3VwX3NpemUgLyBQQUdFX1NJWkUpICsgMTsKKwloZWFkZXJfcGFnZXMgPSAoY2hhbm5lbC0+aGVhZGVyX3NpemUgLyBQQUdFX1NJWkUpICsgMTsKKwl0b3RhbF9ncm91cF9wYWdlcyA9IGdyb3VwX3BhZ2VzICogY2hhbm5lbC0+Z3JvdXBfY291bnQ7CisKKwltbWFwX3NpemUgPSAoaGVhZGVyX3BhZ2VzICsgdG90YWxfZ3JvdXBfcGFnZXMpICogUEFHRV9TSVpFOworCWxlbiA9IHNwcmludGYoYnVmLCAiJWx1XG4iLCBtbWFwX3NpemUpOworCXJldHVybiBsZW47Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobW1hcF9zaXplLCBTX0lSVVNSfFNfSVJHUlAsIHNob3dfbW1hcF9zaXplLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpwb2NoX2NsYXNzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2Jsb2NrX3NpemUsCisJJmRldl9hdHRyX2dyb3VwX3NpemUsCisJJmRldl9hdHRyX2dyb3VwX2NvdW50LAorCSZkZXZfYXR0cl9kaXIsCisJJmRldl9hdHRyX21tYXBfc2l6ZSwKK307CisKK3N0YXRpYyB2b2lkIHBvY2hfY2hhbm5lbF9mcmVlX2dyb3VwcyhzdHJ1Y3QgY2hhbm5lbF9pbmZvICpjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5ncm91cF9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBwb2NoX2dyb3VwX2luZm8gKmdyb3VwOworCQl1bnNpZ25lZCBpbnQgb3JkZXI7CisKKwkJZ3JvdXAgPSAmY2hhbm5lbC0+Z3JvdXBzW2ldOworCQlvcmRlciA9IGdldF9vcmRlcihjaGFubmVsLT5ncm91cF9zaXplKTsKKwkJaWYgKGdyb3VwLT5wZykKKwkJCV9fZnJlZV9wYWdlcyhncm91cC0+cGcsIG9yZGVyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcG9jaF9jaGFubmVsX2FsbG9jX2dyb3VwcyhzdHJ1Y3QgY2hhbm5lbF9pbmZvICpjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgaGVhZGVyX3BhZ2VzOworCisJZ3JvdXBfcGFnZXMgPSAoY2hhbm5lbC0+Z3JvdXBfc2l6ZSAvIFBBR0VfU0laRSkgKyAxOworCWhlYWRlcl9wYWdlcyA9IChjaGFubmVsLT5oZWFkZXJfc2l6ZSAvIFBBR0VfU0laRSkgKyAxOworCisJZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPmdyb3VwX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHBvY2hfZ3JvdXBfaW5mbyAqZ3JvdXA7CisJCXVuc2lnbmVkIGludCBvcmRlcjsKKwkJZ2ZwX3QgZ2ZwX21hc2s7CisKKwkJZ3JvdXAgPSAmY2hhbm5lbC0+Z3JvdXBzW2ldOworCQlvcmRlciA9IGdldF9vcmRlcihjaGFubmVsLT5ncm91cF9zaXplKTsKKworCQkvKgorCQkgKiBfX0dGUF9DT01QIGlzIHJlcXVpcmVkIGhlcmUgc2luY2Ugd2UgYXJlIGdvaW5nIHRvCisJCSAqIHBlcmZvcm0gbm9uLWxpbmVhciBtYXBwaW5nIHRvIHVzZXJzcGFjZS4gRm9yIG1vcmUKKwkJICogaW5mb3JtYXRpb24gcmVhZCB0aGUgdm1faW5zZXJ0X3BhZ2UoKSBmdW5jdGlvbgorCQkgKiBjb21tZW50cy4KKwkJICovCisKKwkJZ2ZwX21hc2sgPSBHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTzsKKwkJZ3JvdXAtPnBnID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTsKKwkJaWYgKCFncm91cC0+cGcpIHsKKwkJCXBvY2hfY2hhbm5lbF9mcmVlX2dyb3VwcyhjaGFubmVsKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogRklYTUU6IFRoaXMgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgbm90IHRoZSBidXMKKwkJICogYWRkcmVzcyEgIFRoaXMgd29uJ3Qgd29yayBpbiBhcmNoaXRlY3R1cmVzIHRoYXQKKwkJICogaGF2ZSBhbiBJT01NVS4gQ2FuIHdlIHVzZSBwY2lfbWFwX3NpbmdsZSgpIGZvcgorCQkgKiB0aGlzPworCQkgKi8KKwkJZ3JvdXAtPmRtYV9hZGRyID0gcGFnZV90b19wZm4oZ3JvdXAtPnBnKSAqIFBBR0VfU0laRTsKKwkJZ3JvdXAtPnVzZXJfb2Zmc2V0ID0KKwkJCShoZWFkZXJfcGFnZXMgKyAoaSAqIGdyb3VwX3BhZ2VzKSkgKiBQQUdFX1NJWkU7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVsZDogdXNlcl9vZmZzZXQ6IDB4JWx4IGRtYTogMHgleFxuIiwgaSwKKwkJICAgICAgIGdyb3VwLT51c2VyX29mZnNldCwgZ3JvdXAtPmRtYV9hZGRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hhbm5lbF9sYXRjaF9hdHRyKHN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwpCit7CisJY2hhbm5lbC0+Z3JvdXBfY291bnQgPSBhdG9taWNfcmVhZCgmY2hhbm5lbC0+c3lzX2dyb3VwX2NvdW50KTsKKwljaGFubmVsLT5ncm91cF9zaXplID0gYXRvbWljX3JlYWQoJmNoYW5uZWwtPnN5c19ncm91cF9zaXplKTsKKwljaGFubmVsLT5ibG9ja19zaXplID0gYXRvbWljX3JlYWQoJmNoYW5uZWwtPnN5c19ibG9ja19zaXplKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZSBETUEgZ3JvdXAgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyB2b2lkIGNoYW5uZWxfZG1hX2luaXQoc3RydWN0IGNoYW5uZWxfaW5mbyAqY2hhbm5lbCkKK3sKKwl2b2lkIF9faW9tZW0gKmZwZ2EgPSBjaGFubmVsLT5mcGdhX2lvbWVtOworCXUzMiBncm91cF9yZWdzX2Jhc2U7CisJdTMyIGdyb3VwX3JlZzsKKwl1bnNpZ25lZCBpbnQgcGFnZTsKKwl1bnNpZ25lZCBpbnQgZ3JvdXBfaW5fcGFnZTsKKwl1bnNpZ25lZCBsb25nIGk7CisJdTMyIGJsb2NrX3NpemVfcmVnOworCXUzMiBibG9ja19jb3VudF9yZWc7CisJdTMyIGdyb3VwX2NvdW50X3JlZzsKKwl1MzIgZ3JvdXBzX3Blcl9pbnRfcmVnOworCXUzMiBjdXJyX3BjaV9yZWc7CisKKwlpZiAoY2hhbm5lbC0+Y2hubyA9PSBDSE5PX1JYX0NIQU5ORUwpIHsKKwkJZ3JvdXBfcmVnc19iYXNlID0gRlBHQV9SWF9HUk9VUDBfU1RBUlRfUkVHOworCQlibG9ja19zaXplX3JlZyA9IEZQR0FfUlhfQkxPQ0tfU0laRV9SRUc7CisJCWJsb2NrX2NvdW50X3JlZyA9IEZQR0FfUlhfQkxPQ0tfQ09VTlRfUkVHOworCQlncm91cF9jb3VudF9yZWcgPSBGUEdBX1JYX0dST1VQX0NPVU5UX1JFRzsKKwkJZ3JvdXBzX3Blcl9pbnRfcmVnID0gRlBHQV9SWF9HUk9VUFNfUEVSX0lOVF9SRUc7CisJCWN1cnJfcGNpX3JlZyA9IEZQR0FfUlhfQ1VSUl9QQ0lfUkVHOworCX0gZWxzZSB7CisJCWdyb3VwX3JlZ3NfYmFzZSA9IEZQR0FfVFhfR1JPVVAwX1NUQVJUX1JFRzsKKwkJYmxvY2tfc2l6ZV9yZWcgPSBGUEdBX1RYX0JMT0NLX1NJWkVfUkVHOworCQlibG9ja19jb3VudF9yZWcgPSBGUEdBX1RYX0JMT0NLX0NPVU5UX1JFRzsKKwkJZ3JvdXBfY291bnRfcmVnID0gRlBHQV9UWF9HUk9VUF9DT1VOVF9SRUc7CisJCWdyb3Vwc19wZXJfaW50X3JlZyA9IEZQR0FfVFhfR1JPVVBTX1BFUl9JTlRfUkVHOworCQljdXJyX3BjaV9yZWcgPSBGUEdBX1RYX0NVUlJfUENJX1JFRzsKKwl9CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJibG9ja19zaXplLCBncm91cF9zaXplLCBncm91cF9jb3VudFxuIik7CisJaW93cml0ZTMyKGNoYW5uZWwtPmJsb2NrX3NpemUsIGZwZ2EgKyBibG9ja19zaXplX3JlZyk7CisJaW93cml0ZTMyKGNoYW5uZWwtPmdyb3VwX3NpemUgLyBjaGFubmVsLT5ibG9ja19zaXplLAorCQkgIGZwZ2EgKyBibG9ja19jb3VudF9yZWcpOworCWlvd3JpdGUzMihjaGFubmVsLT5ncm91cF9jb3VudCwgZnBnYSArIGdyb3VwX2NvdW50X3JlZyk7CisJLyogRklYTUU6IEhhcmRjb2RlZCBncm91cHMgcGVyIGludC4gR2V0IGl0IGZyb20gc3lzZnM/ICovCisJaW93cml0ZTMyKDEsIGZwZ2EgKyBncm91cHNfcGVyX2ludF9yZWcpOworCisJLyogVW5sb2NrIFBDSSBhZGRyZXNzPyBOb3QgZGVmaW5lZCBpbiB0aGUgZGF0YSBzaGVldCwgYnV0IHVzZWQKKwkgKiBpbiB0aGUgcmVmZXJlbmNlIGNvZGUgYnkgUmVkcmFwaWRzLgorCSAqLworCWlvd3JpdGUzMigweDEsIGZwZ2EgKyBjdXJyX3BjaV9yZWcpOworCisJLyogVGhlIERNQSBhZGRyZXNzIHBhZ2UgcmVnaXN0ZXIgaXMgc2hhcmVkIGJldHdlZW4gdGhlIFJYIGFuZAorCSAqIFRYIGNoYW5uZWxzLCBzbyBhY3F1aXJlIGxvY2suCisJICovCisJc3Bpbl9sb2NrKGNoYW5uZWwtPmlvbWVtX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5ncm91cF9jb3VudDsgaSsrKSB7CisJCXBhZ2UgPSBpIC8gMzI7CisJCWdyb3VwX2luX3BhZ2UgPSBpICUgMzI7CisKKwkJZ3JvdXBfcmVnID0gZ3JvdXBfcmVnc19iYXNlICsgKGdyb3VwX2luX3BhZ2UgKiA0KTsKKworCQlpb3dyaXRlMzIocGFnZSwgZnBnYSArIEZQR0FfRE1BX0FEUl9QQUdFX1JFRyk7CisJCWlvd3JpdGUzMihjaGFubmVsLT5ncm91cHNbaV0uZG1hX2FkZHIsIGZwZ2EgKyBncm91cF9yZWcpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+Z3JvdXBfY291bnQ7IGkrKykgeworCQlwYWdlID0gaSAvIDMyOworCQlncm91cF9pbl9wYWdlID0gaSAlIDMyOworCisJCWdyb3VwX3JlZyA9IGdyb3VwX3JlZ3NfYmFzZSArIChncm91cF9pbl9wYWdlICogNCk7CisKKwkJaW93cml0ZTMyKHBhZ2UsIGZwZ2EgKyBGUEdBX0RNQV9BRFJfUEFHRV9SRUcpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJWxkOiByZWFkIGRtYV9hZGRyOiAweCV4XG4iLCBpLAorCQkgICAgICAgaW9yZWFkMzIoZnBnYSArIGdyb3VwX3JlZykpOworCX0KKwlzcGluX3VubG9jayhjaGFubmVsLT5pb21lbV9sb2NrKTsKKworfQorCitzdGF0aWMgaW50IHBvY2hfY2hhbm5lbF9hbGxvY19oZWFkZXIoc3RydWN0IGNoYW5uZWxfaW5mbyAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcG9jaF9jYnVmX2hlYWRlciAqaGVhZGVyID0gY2hhbm5lbC0+aGVhZGVyOworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfb2Zmc2V0X3NpemU7CisJdW5zaWduZWQgbG9uZyB0b3RfZ3JvdXBfb2Zmc2V0c19zaXplOworCisJLyogQWxsb2NhdGUgbWVtb3J5IHRvIGhvbGQgaGVhZGVyIGV4cG9ydGVkIHVzZXJzcGFjZSAqLworCWdyb3VwX29mZnNldF9zaXplID0gc2l6ZW9mKGhlYWRlci0+Z3JvdXBfb2Zmc2V0c1swXSk7CisJdG90X2dyb3VwX29mZnNldHNfc2l6ZSA9IGdyb3VwX29mZnNldF9zaXplICogY2hhbm5lbC0+Z3JvdXBfY291bnQ7CisJY2hhbm5lbC0+aGVhZGVyX3NpemUgPSBzaXplb2YoKmhlYWRlcikgKyB0b3RfZ3JvdXBfb2Zmc2V0c19zaXplOworCWNoYW5uZWwtPmhlYWRlcl9wZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLAorCQkJCQkgZ2V0X29yZGVyKGNoYW5uZWwtPmhlYWRlcl9zaXplKSk7CisJaWYgKCFjaGFubmVsLT5oZWFkZXJfcGcpCisJCXJldHVybiAtRU5PTUVNOworCisJY2hhbm5lbC0+aGVhZGVyID0gcGFnZV9hZGRyZXNzKGNoYW5uZWwtPmhlYWRlcl9wZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9jaF9jaGFubmVsX2ZyZWVfaGVhZGVyKHN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwpCit7CisJdW5zaWduZWQgaW50IG9yZGVyOworCisJb3JkZXIgPSBnZXRfb3JkZXIoY2hhbm5lbC0+aGVhZGVyX3NpemUpOworCV9fZnJlZV9wYWdlcyhjaGFubmVsLT5oZWFkZXJfcGcsIG9yZGVyKTsKK30KKworc3RhdGljIHZvaWQgcG9jaF9jaGFubmVsX2luaXRfaGVhZGVyKHN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwpCit7CisJaW50IGk7CisJc3RydWN0IHBvY2hfZ3JvdXBfaW5mbyAqZ3JvdXBzOworCXMzMiAqZ3JvdXBfb2Zmc2V0czsKKworCWNoYW5uZWwtPmhlYWRlci0+Z3JvdXBfc2l6ZV9ieXRlcyA9IGNoYW5uZWwtPmdyb3VwX3NpemU7CisJY2hhbm5lbC0+aGVhZGVyLT5ncm91cF9jb3VudCA9IGNoYW5uZWwtPmdyb3VwX2NvdW50OworCisJc3Bpbl9sb2NrX2luaXQoJmNoYW5uZWwtPmdyb3VwX29mZnNldHNfbG9jayk7CisKKwlncm91cF9vZmZzZXRzID0gY2hhbm5lbC0+aGVhZGVyLT5ncm91cF9vZmZzZXRzOworCWdyb3VwcyA9IGNoYW5uZWwtPmdyb3VwczsKKworCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5ncm91cF9jb3VudDsgaSsrKSB7CisJCWlmIChjaGFubmVsLT5kaXIgPT0gQ0hBTk5FTF9ESVJfUlgpCisJCQlncm91cF9vZmZzZXRzW2ldID0gLTE7CisJCWVsc2UKKwkJCWdyb3VwX29mZnNldHNbaV0gPSBncm91cHNbaV0udXNlcl9vZmZzZXQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX3BvY2hfY2hhbm5lbF9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgY2hhbm5lbF9pbmZvICpjaGFubmVsKQoreworCWNoYW5uZWwtPmNvdW50ZXJzLnBsbF91bmxvY2sgPSAwOworCWNoYW5uZWwtPmNvdW50ZXJzLmZpZm9fZW1wdHkgPSAwOworCWNoYW5uZWwtPmNvdW50ZXJzLmZpZm9fb3ZlcmZsb3cgPSAwOworfQorCitzdGF0aWMgaW50IHBvY2hfY2hhbm5lbF9pbml0KHN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwsCisJCQkgICAgIHN0cnVjdCBwb2NoX2RldiAqcG9jaF9kZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwb2NoX2Rldi0+cGNpX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZTsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiY2hhbm5lbF9sYXRjaF9hdHRyXG4iKTsKKworCWNoYW5uZWxfbGF0Y2hfYXR0cihjaGFubmVsKTsKKworCWNoYW5uZWwtPnRyYW5zZmVyID0gMDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSB0byBob2xkIGdyb3VwIGluZm9ybWF0aW9uLiAqLworCWFsbG9jX3NpemUgPSBjaGFubmVsLT5ncm91cF9jb3VudCAqIHNpemVvZihzdHJ1Y3QgcG9jaF9ncm91cF9pbmZvKTsKKwljaGFubmVsLT5ncm91cHMgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghY2hhbm5lbC0+Z3JvdXBzKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGdyb3VwIGluZm9cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwb2NoX2NoYW5uZWxfYWxsb2NfZ3JvdXBzXG4iKTsKKworCXJldCA9IHBvY2hfY2hhbm5lbF9hbGxvY19ncm91cHMoY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIGFsbG9jYXRpbmcgZ3JvdXBzIG9mIG9yZGVyICVkXG4iLAorCQkJZ2V0X29yZGVyKGNoYW5uZWwtPmdyb3VwX3NpemUpKTsKKwkJZ290byBvdXRfZnJlZV9ncm91cF9pbmZvOworCX0KKworCXJldCA9IHBvY2hfY2hhbm5lbF9hbGxvY19oZWFkZXIoY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIGFsbG9jYXRpbmcgdXNlciBzcGFjZSBoZWFkZXJcbiIpOworCQlnb3RvIG91dF9mcmVlX2dyb3VwczsKKwl9CisKKwljaGFubmVsLT5mcGdhX2lvbWVtID0gcG9jaF9kZXYtPmZwZ2FfaW9tZW07CisJY2hhbm5lbC0+YnJpZGdlX2lvbWVtID0gcG9jaF9kZXYtPmJyaWRnZV9pb21lbTsKKwljaGFubmVsLT5pb21lbV9sb2NrID0gJnBvY2hfZGV2LT5pb21lbV9sb2NrOworCXNwaW5fbG9ja19pbml0KCZjaGFubmVsLT5jb3VudGVyc19sb2NrKTsKKworCV9fcG9jaF9jaGFubmVsX2NsZWFyX2NvdW50ZXJzKGNoYW5uZWwpOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAicG9jaF9jaGFubmVsX2luaXRfaGVhZGVyXG4iKTsKKworCXBvY2hfY2hhbm5lbF9pbml0X2hlYWRlcihjaGFubmVsKTsKKworCXJldHVybiAwOworCisgb3V0X2ZyZWVfZ3JvdXBzOgorCXBvY2hfY2hhbm5lbF9mcmVlX2dyb3VwcyhjaGFubmVsKTsKKyBvdXRfZnJlZV9ncm91cF9pbmZvOgorCWtmcmVlKGNoYW5uZWwtPmdyb3Vwcyk7Cisgb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9jaF93YWl0X2ZwZ2FfcHJvZyh2b2lkIF9faW9tZW0gKmJyaWRnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3dhaXQ7CisJY29uc3QgdW5zaWduZWQgbG9uZyB3YWl0X3BlcmlvZCA9IDEwMDsKKwkvKiBGSVhNRTogR2V0IHRoZSBhY3R1YWwgdGltZW91dCAqLworCWNvbnN0IHVuc2lnbmVkIGxvbmcgcHJvZ190aW1lbyA9IDEwMDAwOyAvKiAxMCBTZWNvbmRzICovCisJdTMyIGNhcmRfcG93ZXI7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwb2NoX3dhaXRfZnBnX3Byb2dcbiIpOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggInByb2dyYW1taW5nIGZwZ2EgLi4uXG4iKTsKKwl0b3RhbF93YWl0ID0gMDsKKwl3aGlsZSAoMSkgeworCQltc2xlZXAod2FpdF9wZXJpb2QpOworCQl0b3RhbF93YWl0ICs9IHdhaXRfcGVyaW9kOworCisJCWNhcmRfcG93ZXIgPSBpb3JlYWQzMihicmlkZ2UgKyBCUklER0VfQ0FSRF9QT1dFUl9SRUcpOworCQlpZiAoY2FyZF9wb3dlciAmIEJSSURHRV9DQVJEX1BPV0VSX1BST0dfRE9ORSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInByb2dyYW1taW5nIGRvbmVcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHRvdGFsX3dhaXQgPiBwcm9nX3RpbWVvKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAgICAgInRpbWVkIG91dCB3aGlsZSBwcm9ncmFtbWluZyBGUEdBXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwb2NoX2NhcmRfcG93ZXJfb2ZmKHN0cnVjdCBwb2NoX2RldiAqcG9jaF9kZXYpCit7CisJdm9pZCBfX2lvbWVtICpicmlkZ2UgPSBwb2NoX2Rldi0+YnJpZGdlX2lvbWVtOworCXUzMiBjYXJkX3Bvd2VyOworCisJaW93cml0ZTMyKDAsIGJyaWRnZSArIEJSSURHRV9JTlRfTUFTS19SRUcpOworCWlvd3JpdGUzMigwLCBicmlkZ2UgKyBCUklER0VfRE1BX0dPX1JFRyk7CisKKwljYXJkX3Bvd2VyID0gaW9yZWFkMzIoYnJpZGdlICsgQlJJREdFX0NBUkRfUE9XRVJfUkVHKTsKKwlpb3dyaXRlMzIoY2FyZF9wb3dlciAmIH5CUklER0VfQ0FSRF9QT1dFUl9FTiwKKwkJICBicmlkZ2UgKyBCUklER0VfQ0FSRF9QT1dFUl9SRUcpOworfQorCitlbnVtIGNsa19zcmMgeworCUNMS19TUkNfT05fQk9BUkQsCisJQ0xLX1NSQ19FWFRFUk5BTAorfTsKKworc3RhdGljIHZvaWQgcG9jaF9jYXJkX2Nsb2NrX29uKHZvaWQgX19pb21lbSAqZnBnYSkKK3sKKwkvKiBGSVhNRTogR2V0IHRoaXMgZGF0YSB0aHJvdWdoIHN5c2ZzPyAqLworCWVudW0gY2xrX3NyYyBjbGtfc3JjID0gQ0xLX1NSQ19PTl9CT0FSRDsKKworCWlmIChjbGtfc3JjID09IENMS19TUkNfT05fQk9BUkQpIHsKKwkJaW93cml0ZTMyKEZQR0FfQURDX0NMT0NLX0xPQ0FMX0NMSyB8IEZQR0FfQURDX0NMT0NLX0NUTF9PU0NfRU4sCisJCQkgIGZwZ2EgKyBGUEdBX0FEQ19DTE9DS19DVExfUkVHKTsKKwl9IGVsc2UgaWYgKGNsa19zcmMgPT0gQ0xLX1NSQ19FWFRFUk5BTCkgeworCQlpb3dyaXRlMzIoRlBHQV9BRENfQ0xPQ0tfRVhUX1NBTVBfQ0xLLAorCQkJICBmcGdhICsgRlBHQV9BRENfQ0xPQ0tfQ1RMX1JFRyk7CisJfQorfQorCitzdGF0aWMgaW50IHBvY2hfY2FyZF9wb3dlcl9vbihzdHJ1Y3QgcG9jaF9kZXYgKnBvY2hfZGV2KQoreworCXZvaWQgX19pb21lbSAqYnJpZGdlID0gcG9jaF9kZXYtPmJyaWRnZV9pb21lbTsKKwl2b2lkIF9faW9tZW0gKmZwZ2EgPSBwb2NoX2Rldi0+ZnBnYV9pb21lbTsKKworCWlvd3JpdGUzMihCUklER0VfQ0FSRF9QT1dFUl9FTiwgYnJpZGdlICsgQlJJREdFX0NBUkRfUE9XRVJfUkVHKTsKKworCWlmIChwb2NoX3dhaXRfZnBnYV9wcm9nKGJyaWRnZSkgIT0gMCkgeworCQlwb2NoX2NhcmRfcG93ZXJfb2ZmKHBvY2hfZGV2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcG9jaF9jYXJkX2Nsb2NrX29uKGZwZ2EpOworCisJLyogU3luYyB0byBuZXcgY2xvY2ssIHJlc2V0IHN0YXRlIG1hY2hpbmVzLCBzZXQgRE1BIG1vZGUuICovCisJaW93cml0ZTMyKEZQR0FfRE9NX0RDTV9SRVNFVCB8IEZQR0FfRE9NX1NPRlRfUkVTRVQKKwkJICB8IEZQR0FfRE9NX0RVQUxfTV9TR19ETUEsIGZwZ2EgKyBGUEdBX0RPTV9SRUcpOworCisJLyogRklYTUU6IFRoZSB0aW1lIHJlcXVpcmVkIGZvciBzeW5jLiBuZWVkcyB0byBiZSB0dW5lZC4gKi8KKwltc2xlZXAoMTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9jaF9jaGFubmVsX2FuYWxvZ19vbihzdHJ1Y3QgY2hhbm5lbF9pbmZvICpjaGFubmVsKQoreworCXZvaWQgX19pb21lbSAqZnBnYSA9IGNoYW5uZWwtPmZwZ2FfaW9tZW07CisJdTMyIGFkY19kYWNfZW47CisKKwlzcGluX2xvY2soY2hhbm5lbC0+aW9tZW1fbG9jayk7CisJYWRjX2RhY19lbiA9IGlvcmVhZDMyKGZwZ2EgKyBGUEdBX0FEQ19EQUNfRU5fUkVHKTsKKwlzd2l0Y2ggKGNoYW5uZWwtPmNobm8pIHsKKwljYXNlIENITk9fUlhfQ0hBTk5FTDoKKwkJaW93cml0ZTMyKGFkY19kYWNfZW4gJiB+RlBHQV9BRENfREFDX0VOX0FEQ19PRkYsCisJCQkgIGZwZ2EgKyBGUEdBX0FEQ19EQUNfRU5fUkVHKTsKKwkJYnJlYWs7CisJY2FzZSBDSE5PX1RYX0NIQU5ORUw6CisJCWlvd3JpdGUzMihhZGNfZGFjX2VuICYgfkZQR0FfQURDX0RBQ19FTl9EQUNfT0ZGLAorCQkJICBmcGdhICsgRlBHQV9BRENfREFDX0VOX1JFRyk7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jayhjaGFubmVsLT5pb21lbV9sb2NrKTsKK30KKworc3RhdGljIGludCBwb2NoX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHBvY2hfZGV2ICpwb2NoX2RldjsKKwlzdHJ1Y3QgY2hhbm5lbF9pbmZvICpjaGFubmVsOworCXZvaWQgX19pb21lbSAqYnJpZGdlOworCXZvaWQgX19pb21lbSAqZnBnYTsKKwlpbnQgY2hubzsKKwlpbnQgdXNhZ2U7CisJaW50IHJldDsKKworCXBvY2hfZGV2ID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBwb2NoX2RldiwgY2Rldik7CisJYnJpZGdlID0gcG9jaF9kZXYtPmJyaWRnZV9pb21lbTsKKwlmcGdhID0gcG9jaF9kZXYtPmZwZ2FfaW9tZW07CisKKwljaG5vID0gaW1pbm9yKGlub2RlKSAlIHBvY2hfZGV2LT5uY2hhbm5lbHM7CisJY2hhbm5lbCA9ICZwb2NoX2Rldi0+Y2hhbm5lbHNbY2hub107CisKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmNoYW5uZWwtPmZyZWUpKSB7CisJCWF0b21pY19pbmMoJmNoYW5uZWwtPmZyZWUpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXVzYWdlID0gYXRvbWljX2luY19yZXR1cm4oJnBvY2hfZGV2LT51c2FnZSk7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwb2NoX2NhcmRfcG93ZXJfb25cbiIpOworCisJaWYgKHVzYWdlID09IDEpIHsKKwkJcmV0ID0gcG9jaF9jYXJkX3Bvd2VyX29uKHBvY2hfZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2RlY191c2FnZTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJDYXJkQnVzIEJyaWRnZSBSZXZpc2lvbjogJXhcbiIsCisJICAgICAgIGlvcmVhZDMyKGJyaWRnZSArIEJSSURHRV9SRVZfUkVHKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ2FyZEJ1cyBJbnRlcmZhY2UgUmV2aXNpb246ICV4XG4iLAorCSAgICAgICBpb3JlYWQzMihmcGdhICsgRlBHQV9JRkFDRV9SRVZfUkVHKSk7CisKKwljaGFubmVsLT5jaG5vID0gY2hubzsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBjaGFubmVsOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAicG9jaF9jaGFubmVsX2luaXRcbiIpOworCisJcmV0ID0gcG9jaF9jaGFubmVsX2luaXQoY2hhbm5lbCwgcG9jaF9kZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3Bvd2VyX29mZjsKKworCXBvY2hfY2hhbm5lbF9hbmFsb2dfb24oY2hhbm5lbCk7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJjaGFubmVsX2RtYV9pbml0XG4iKTsKKworCWNoYW5uZWxfZG1hX2luaXQoY2hhbm5lbCk7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwb2NoX2NoYW5uZWxfYW5hbG9nX29uXG4iKTsKKworCWlmICh1c2FnZSA9PSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNldHRpbmcgdXAgRE1BXG4iKTsKKworCQkvKiBJbml0aWFsaXplIERNQSBDb250cm9sbGVyLiAqLworCQlpb3dyaXRlMzIoRlBHQV9DQVBfRklGT19SRUcsIGJyaWRnZSArIEJSSURHRV9TVEFUXzJfUkVHKTsKKwkJaW93cml0ZTMyKEZQR0FfRE1BX0RFU0NfMV9SRUcsIGJyaWRnZSArIEJSSURHRV9TVEFUXzNfUkVHKTsKKworCQlpb3JlYWQzMihmcGdhICsgRlBHQV9ETUFfSU5UX1NUQVRfUkVHKTsKKwkJaW9yZWFkMzIoZnBnYSArIEZQR0FfSU5UX1NUQVRfUkVHKTsKKwkJaW9yZWFkMzIoYnJpZGdlICsgQlJJREdFX0lOVF9TVEFUX1JFRyk7CisKKwkJLyogSW5pdGlhbGl6ZSBJbnRlcnJ1cHRzLiBGSVhNRTogRW5hYmxlIHRlbXBlcmF0dXJlCisJCSAqIGhhbmRsaW5nIFdlIGFyZSBlbmFibGluZyBib3RoIFR4IGFuZCBSeCBjaGFubmVsCisJCSAqIGludGVycnVwdHMgaGVyZS4gRG8gd2UgbmVlZCB0byBlbmFibGUgaW50ZXJydXB0cworCQkgKiBvbmx5IGZvciB0aGUgY3VycmVudCBjaGFubmVsPyBBbnl3YXlzIHdlIHdvbid0IGdldAorCQkgKiB0aGUgaW50ZXJydXB0IHVubGVzcyB0aGUgRE1BIGlzIGFjdGl2YXRlZC4KKwkJICovCisJCWlvd3JpdGUzMihCUklER0VfSU5UX0ZQR0EsIGJyaWRnZSArIEJSSURHRV9JTlRfTUFTS19SRUcpOworCQlpb3dyaXRlMzIoRlBHQV9JTlRfRE1BX0NPUkUKKwkJCSAgfCBGUEdBX0lOVF9QTExfVU5MT0NLRUQKKwkJCSAgfCBGUEdBX0lOVF9UWF9GRl9FTVBUWQorCQkJICB8IEZQR0FfSU5UX1JYX0ZGX0VNUFRZCisJCQkgIHwgRlBHQV9JTlRfVFhfRkZfT1ZSRkxXCisJCQkgIHwgRlBHQV9JTlRfUlhfRkZfT1ZSRkxXLAorCQkJICBmcGdhICsgRlBHQV9JTlRfTUFTS19SRUcpOworCQlpb3dyaXRlMzIoRlBHQV9ETUFfSU5UX1JYIHwgRlBHQV9ETUFfSU5UX1RYLAorCQkJICBmcGdhICsgRlBHQV9ETUFfSU5UX01BU0tfUkVHKTsKKwl9CisKKwlpZiAoY2hhbm5lbC0+ZGlyID09IENIQU5ORUxfRElSX1RYKSB7CisJCS8qIEZsdXNoIFRYIEZJRk8gYW5kIG91dHB1dCBkYXRhIGZyb20gY2FyZGJ1cy4gKi8KKwkJaW93cml0ZTMyKEZQR0FfVFhfQ1RMX0ZJRk9fRkxVU0gKKwkJCSAgfCBGUEdBX1RYX0NUTF9PVVRQVVRfQ0FSREJVUywKKwkJCSAgZnBnYSArIEZQR0FfVFhfQ1RMX1JFRyk7CisJfQorCisJYXRvbWljX2luYygmY2hhbm5lbC0+aW5pdGVkKTsKKworCXJldHVybiAwOworCisgb3V0X3Bvd2VyX29mZjoKKwlpZiAodXNhZ2UgPT0gMSkKKwkJcG9jaF9jYXJkX3Bvd2VyX29mZihwb2NoX2Rldik7Cisgb3V0X2RlY191c2FnZToKKwlhdG9taWNfZGVjKCZwb2NoX2Rldi0+dXNhZ2UpOworCWF0b21pY19pbmMoJmNoYW5uZWwtPmZyZWUpOworIG91dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvY2hfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2hhbm5lbF9pbmZvICpjaGFubmVsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwb2NoX2RldiAqcG9jaF9kZXY7CisJaW50IHVzYWdlOworCisJcG9jaF9kZXYgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IHBvY2hfZGV2LCBjZGV2KTsKKworCXVzYWdlID0gYXRvbWljX2RlY19yZXR1cm4oJnBvY2hfZGV2LT51c2FnZSk7CisJaWYgKHVzYWdlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAicG9jaF9jYXJkX3Bvd2VyX29mZlxuIik7CisJCXBvY2hfY2FyZF9wb3dlcl9vZmYocG9jaF9kZXYpOworCX0KKworCWF0b21pY19kZWMoJmNoYW5uZWwtPmluaXRlZCk7CisJcG9jaF9jaGFubmVsX2ZyZWVfaGVhZGVyKGNoYW5uZWwpOworCXBvY2hfY2hhbm5lbF9mcmVlX2dyb3VwcyhjaGFubmVsKTsKKwlrZnJlZShjaGFubmVsLT5ncm91cHMpOworCWF0b21pY19pbmMoJmNoYW5uZWwtPmZyZWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNYXAgdGhlIGhlYWRlciBhbmQgdGhlIGdyb3VwIGJ1ZmZlcnMsIHRvIHVzZXIgc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgcG9jaF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbF9pbmZvICpjaGFubmVsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwl1bnNpZ25lZCBsb25nIGdyb3VwX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgaGVhZGVyX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgdG90YWxfZ3JvdXBfcGFnZXM7CisKKwlpbnQgcGdfbnVtOworCXN0cnVjdCBwYWdlICpwZzsKKworCWludCBpOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwb2NoX21tYXBcbiIpOworCisJaWYgKHZtYS0+dm1fcGdvZmYpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggInBhZ2Ugb2Zmc2V0OiAlbHVcbiIsIHZtYS0+dm1fcGdvZmYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlncm91cF9wYWdlcyA9IChjaGFubmVsLT5ncm91cF9zaXplIC8gUEFHRV9TSVpFKSArIDE7CisJaGVhZGVyX3BhZ2VzID0gKGNoYW5uZWwtPmhlYWRlcl9zaXplIC8gUEFHRV9TSVpFKSArIDE7CisJdG90YWxfZ3JvdXBfcGFnZXMgPSBncm91cF9wYWdlcyAqIGNoYW5uZWwtPmdyb3VwX2NvdW50OworCisJc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlpZiAoc2l6ZSAhPSAoaGVhZGVyX3BhZ2VzICsgdG90YWxfZ3JvdXBfcGFnZXMpICogUEFHRV9TSVpFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJyZXF1aXJlZCAlbHUgYnl0ZXNcbiIsIHNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisKKwkvKiBGSVhNRTogQ2xlYW51cCByZXF1aXJlZCBvbiBmYWlsdXJlPyAqLworCXBnID0gY2hhbm5lbC0+aGVhZGVyX3BnOworCWZvciAocGdfbnVtID0gMDsgcGdfbnVtIDwgaGVhZGVyX3BhZ2VzOyBwZ19udW0rKywgcGcrKykgeworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInBhZ2VfY291bnQ6ICVkXG4iLCBwYWdlX2NvdW50KHBnKSk7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJWQ6IGhlYWRlcjogMHglbHhcbiIsIHBnX251bSwgc3RhcnQpOworCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCBwZyk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2bV9pbnNlcnQgMSBmYWlsZWQgYXQgJWx4XG4iLCBzdGFydCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+Z3JvdXBfY291bnQ7IGkrKykgeworCQlwZyA9IGNoYW5uZWwtPmdyb3Vwc1tpXS5wZzsKKwkJZm9yIChwZ19udW0gPSAwOyBwZ19udW0gPCBncm91cF9wYWdlczsgcGdfbnVtKyssIHBnKyspIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJWQ6IGdyb3VwICVkOiAweCVseFxuIiwKKwkJCSAgICAgICBwZ19udW0sIGksIHN0YXJ0KTsKKwkJCXJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgc3RhcnQsIHBnKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkgICAgICAgInZtX2luc2VydCAyIGZhaWxlZCBhdCAlZFxuIiwgcGdfbnVtKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIHNvbWUgZ3JvdXAgdGhhdCB0aGUgdXNlciBzcGFjZSBoYXMgbm90CisgKiBjb25zdW1lZCB5ZXQuIFdoZW4gdGhlIHVzZXIgc3BhY2UgY29uc3VtZXMgYSBncm91cCwgaXQgc2V0cyBpdCB0bworICogLTEuIENvc3VtaW5nIGNvdWxkIGJlIHJlYWRpbmcgZGF0YSBpbiBjYXNlIG9mIFJYIGFuZCBmaWxsaW5nIGEKKyAqIGJ1ZmZlciBpbiBjYXNlIG9mIFRYLgorICovCitzdGF0aWMgaW50IHBvY2hfY2hhbm5lbF9hdmFpbGFibGUoc3RydWN0IGNoYW5uZWxfaW5mbyAqY2hhbm5lbCkKK3sKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnEoJmNoYW5uZWwtPmdyb3VwX29mZnNldHNfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+Z3JvdXBfY291bnQ7IGkrKykgeworCQlpZiAoY2hhbm5lbC0+ZGlyID09IENIQU5ORUxfRElSX1JYCisJCSAgICAmJiBjaGFubmVsLT5oZWFkZXItPmdyb3VwX29mZnNldHNbaV0gPT0gLTEpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmY2hhbm5lbC0+Z3JvdXBfb2Zmc2V0c19sb2NrKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKGNoYW5uZWwtPmRpciA9PSBDSEFOTkVMX0RJUl9UWAorCQkgICAgJiYgY2hhbm5lbC0+aGVhZGVyLT5ncm91cF9vZmZzZXRzW2ldICE9IC0xKSB7CisJCQlzcGluX3VubG9ja19pcnEoJmNoYW5uZWwtPmdyb3VwX29mZnNldHNfbG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycSgmY2hhbm5lbC0+Z3JvdXBfb2Zmc2V0c19sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBvY2hfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqcHQpCit7CisJc3RydWN0IGNoYW5uZWxfaW5mbyAqY2hhbm5lbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKworCXBvbGxfd2FpdChmaWxwLCAmY2hhbm5lbC0+d3EsIHB0KTsKKworCWlmIChwb2NoX2NoYW5uZWxfYXZhaWxhYmxlKGNoYW5uZWwpKSB7CisJCWlmIChjaGFubmVsLT5kaXIgPT0gQ0hBTk5FTF9ESVJfUlgpCisJCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCQllbHNlCisJCQlyZXQgPSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvY2hfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpmcGdhID0gY2hhbm5lbC0+ZnBnYV9pb21lbTsKKwl2b2lkIF9faW9tZW0gKmJyaWRnZSA9IGNoYW5uZWwtPmJyaWRnZV9pb21lbTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtczsKKwlzdHJ1Y3QgcG9jaF9jb3VudGVycyBjb3VudGVyczsKKwlpbnQgcmV0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBPQ0hfSU9DX1RSQU5TRkVSX1NUQVJUOgorCQlzd2l0Y2ggKGNoYW5uZWwtPmNobm8pIHsKKwkJY2FzZSBDSE5PX1RYX0NIQU5ORUw6CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaW9jdGw6IFR4IHN0YXJ0XG4iKTsKKwkJCWlvd3JpdGUzMigweDEsIGZwZ2EgKyBGUEdBX1RYX1RSSUdHRVJfUkVHKTsKKwkJCWlvd3JpdGUzMigweDEsIGZwZ2EgKyBGUEdBX1RYX0VOQUJMRV9SRUcpOworCisJCQkvKiBGSVhNRTogRG9lcyBpdCBtYWtlIHNlbnNlIHRvIGRvIGEgRE1BIEdPCisJCQkgKiB0d2ljZSwgb25jZSBpbiBUeCBhbmQgb25jZSBpbiBSeC4KKwkJCSAqLworCQkJaW93cml0ZTMyKDB4MSwgYnJpZGdlICsgQlJJREdFX0RNQV9HT19SRUcpOworCQkJYnJlYWs7CisJCWNhc2UgQ0hOT19SWF9DSEFOTkVMOgorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImlvY3RsOiBSeCBzdGFydFxuIik7CisJCQlpb3dyaXRlMzIoMHgxLCBmcGdhICsgRlBHQV9SWF9BUk1fUkVHKTsKKwkJCWlvd3JpdGUzMigweDEsIGJyaWRnZSArIEJSSURHRV9ETUFfR09fUkVHKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUE9DSF9JT0NfVFJBTlNGRVJfU1RPUDoKKwkJc3dpdGNoIChjaGFubmVsLT5jaG5vKSB7CisJCWNhc2UgQ0hOT19UWF9DSEFOTkVMOgorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImlvY3RsOiBUeCBzdG9wXG4iKTsKKwkJCWlvd3JpdGUzMigweDAsIGZwZ2EgKyBGUEdBX1RYX0VOQUJMRV9SRUcpOworCQkJaW93cml0ZTMyKDB4MCwgZnBnYSArIEZQR0FfVFhfVFJJR0dFUl9SRUcpOworCQkJaW93cml0ZTMyKDB4MCwgYnJpZGdlICsgQlJJREdFX0RNQV9HT19SRUcpOworCQkJYnJlYWs7CisJCWNhc2UgQ0hOT19SWF9DSEFOTkVMOgorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImlvY3RsOiBSeCBzdG9wXG4iKTsKKwkJCWlvd3JpdGUzMigweDAsIGZwZ2EgKyBGUEdBX1JYX0FSTV9SRUcpOworCQkJaW93cml0ZTMyKDB4MCwgYnJpZGdlICsgQlJJREdFX0RNQV9HT19SRUcpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQT0NIX0lPQ19HRVRfQ09VTlRFUlM6CisJCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBhcmdwLCBzaXplb2Yoc3RydWN0IHBvY2hfY291bnRlcnMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXNwaW5fbG9ja19pcnEoJmNoYW5uZWwtPmNvdW50ZXJzX2xvY2spOworCQljb3VudGVycyA9IGNoYW5uZWwtPmNvdW50ZXJzOworCQlfX3BvY2hfY2hhbm5lbF9jbGVhcl9jb3VudGVycyhjaGFubmVsKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFubmVsLT5jb3VudGVyc19sb2NrKTsKKworCQlyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgJmNvdW50ZXJzLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcG9jaF9jb3VudGVycykpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlicmVhazsKKwljYXNlIFBPQ0hfSU9DX1NZTkNfR1JPVVBfRk9SX1VTRVI6CisJY2FzZSBQT0NIX0lPQ19TWU5DX0dST1VQX0ZPUl9ERVZJQ0U6CisJCXZtcyA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhcmcpOworCQlpZiAoIXZtcykKKwkJCS8qIEFkZHJlc3Mgbm90IG1hcHBlZC4gKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodm1zLT52bV9maWxlICE9IGZpbHApCisJCQkvKiBBZGRyZXNzIG1hcHBlZCBmcm9tIGRpZmZlcmVudCBkZXZpY2UvZmlsZS4gKi8KKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZsdXNoX2NhY2hlX3JhbmdlKHZtcywgYXJnLCBhcmcgKyBjaGFubmVsLT5ncm91cF9zaXplKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb2NoX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBwb2NoX29wZW4sCisJLnJlbGVhc2UgPSBwb2NoX3JlbGVhc2UsCisJLmlvY3RsID0gcG9jaF9pb2N0bCwKKwkucG9sbCA9IHBvY2hfcG9sbCwKKwkubW1hcCA9IHBvY2hfbW1hcAorfTsKKworc3RhdGljIHZvaWQgcG9jaF9pcnFfZG1hKHN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWwpCit7CisJdTMyIHByZXZfdHJhbnNmZXI7CisJdTMyIGN1cnJfdHJhbnNmZXI7CisJbG9uZyBncm91cHNfZG9uZTsKKwl1bnNpZ25lZCBsb25nIGksIGo7CisJc3RydWN0IHBvY2hfZ3JvdXBfaW5mbyAqZ3JvdXBzOworCXMzMiAqZ3JvdXBfb2Zmc2V0czsKKwl1MzIgY3Vycl9ncm91cF9yZWc7CisKKwlpZiAoIWF0b21pY19yZWFkKCZjaGFubmVsLT5pbml0ZWQpKQorCQlyZXR1cm47CisKKwlwcmV2X3RyYW5zZmVyID0gY2hhbm5lbC0+dHJhbnNmZXI7CisKKwlpZiAoY2hhbm5lbC0+Y2hubyA9PSBDSE5PX1JYX0NIQU5ORUwpCisJCWN1cnJfZ3JvdXBfcmVnID0gRlBHQV9SWF9DVVJSX0dST1VQX1JFRzsKKwllbHNlCisJCWN1cnJfZ3JvdXBfcmVnID0gRlBHQV9UWF9DVVJSX0dST1VQX1JFRzsKKworCWN1cnJfdHJhbnNmZXIgPSBpb3JlYWQzMihjaGFubmVsLT5mcGdhX2lvbWVtICsgY3Vycl9ncm91cF9yZWcpOworCisJZ3JvdXBzX2RvbmUgPSBjdXJyX3RyYW5zZmVyIC0gcHJldl90cmFuc2ZlcjsKKwkvKiBDaGVjayB3cmFwIG92ZXIsIGFuZCBoYW5kbGUgaXQuICovCisJaWYgKGdyb3Vwc19kb25lIDw9IDApCisJCWdyb3Vwc19kb25lICs9IGNoYW5uZWwtPmdyb3VwX2NvdW50OworCisJZ3JvdXBfb2Zmc2V0cyA9IGNoYW5uZWwtPmhlYWRlci0+Z3JvdXBfb2Zmc2V0czsKKwlncm91cHMgPSBjaGFubmVsLT5ncm91cHM7CisKKwlzcGluX2xvY2soJmNoYW5uZWwtPmdyb3VwX29mZnNldHNfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzX2RvbmU7IGkrKykgeworCQlqID0gKHByZXZfdHJhbnNmZXIgKyBpKSAlIGNoYW5uZWwtPmdyb3VwX2NvdW50OworCQlpZiAoY2hhbm5lbC0+ZGlyID09IENIQU5ORUxfRElSX1JYKQorCQkJZ3JvdXBfb2Zmc2V0c1tqXSA9IC0xOworCQllbHNlCisJCQlncm91cF9vZmZzZXRzW2pdID0gZ3JvdXBzW2pdLnVzZXJfb2Zmc2V0OworCX0KKworCXNwaW5fdW5sb2NrKCZjaGFubmVsLT5ncm91cF9vZmZzZXRzX2xvY2spOworCisJY2hhbm5lbC0+dHJhbnNmZXIgPSBjdXJyX3RyYW5zZmVyOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaGFubmVsLT53cSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwb2NoX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnApCit7CisJc3RydWN0IHBvY2hfZGV2ICpwb2NoX2RldiA9IHA7CisJdm9pZCBfX2lvbWVtICpicmlkZ2UgPSBwb2NoX2Rldi0+YnJpZGdlX2lvbWVtOworCXZvaWQgX19pb21lbSAqZnBnYSA9IHBvY2hfZGV2LT5mcGdhX2lvbWVtOworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWxfcnggPSAmcG9jaF9kZXYtPmNoYW5uZWxzW0NITk9fUlhfQ0hBTk5FTF07CisJc3RydWN0IGNoYW5uZWxfaW5mbyAqY2hhbm5lbF90eCA9ICZwb2NoX2Rldi0+Y2hhbm5lbHNbQ0hOT19UWF9DSEFOTkVMXTsKKwl1MzIgYnJpZGdlX3N0YXQ7CisJdTMyIGZwZ2Ffc3RhdDsKKwl1MzIgZG1hX3N0YXQ7CisKKwlicmlkZ2Vfc3RhdCA9IGlvcmVhZDMyKGJyaWRnZSArIEJSSURHRV9JTlRfU1RBVF9SRUcpOworCWZwZ2Ffc3RhdCA9IGlvcmVhZDMyKGZwZ2EgKyBGUEdBX0lOVF9TVEFUX1JFRyk7CisJZG1hX3N0YXQgPSBpb3JlYWQzMihmcGdhICsgRlBHQV9ETUFfSU5UX1NUQVRfUkVHKTsKKworCWlvcmVhZDMyKGZwZ2EgKyBGUEdBX0RNQV9JTlRfU1RBVF9SRUcpOworCWlvcmVhZDMyKGZwZ2EgKyBGUEdBX0lOVF9TVEFUX1JFRyk7CisJaW9yZWFkMzIoYnJpZGdlICsgQlJJREdFX0lOVF9TVEFUX1JFRyk7CisKKwlpZiAoYnJpZGdlX3N0YXQgJiBCUklER0VfSU5UX0ZQR0EpIHsKKwkJaWYgKGZwZ2Ffc3RhdCAmIEZQR0FfSU5UX0RNQV9DT1JFKSB7CisJCQlpZiAoZG1hX3N0YXQgJiBGUEdBX0RNQV9JTlRfUlgpCisJCQkJcG9jaF9pcnFfZG1hKGNoYW5uZWxfcngpOworCQkJaWYgKGRtYV9zdGF0ICYgRlBHQV9ETUFfSU5UX1RYKQorCQkJCXBvY2hfaXJxX2RtYShjaGFubmVsX3R4KTsKKwkJfQorCQlpZiAoZnBnYV9zdGF0ICYgRlBHQV9JTlRfUExMX1VOTE9DS0VEKSB7CisJCQljaGFubmVsX3R4LT5jb3VudGVycy5wbGxfdW5sb2NrKys7CisJCQljaGFubmVsX3J4LT5jb3VudGVycy5wbGxfdW5sb2NrKys7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJQTEwgdW5sb2NrZWRcbiIpOworCQl9CisJCWlmIChmcGdhX3N0YXQgJiBGUEdBX0lOVF9UWF9GRl9FTVBUWSkKKwkJCWNoYW5uZWxfdHgtPmNvdW50ZXJzLmZpZm9fZW1wdHkrKzsKKwkJaWYgKGZwZ2Ffc3RhdCAmIEZQR0FfSU5UX1RYX0ZGX09WUkZMVykKKwkJCWNoYW5uZWxfdHgtPmNvdW50ZXJzLmZpZm9fb3ZlcmZsb3crKzsKKwkJaWYgKGZwZ2Ffc3RhdCAmIEZQR0FfSU5UX1JYX0ZGX0VNUFRZKQorCQkJY2hhbm5lbF9yeC0+Y291bnRlcnMuZmlmb19lbXB0eSsrOworCQlpZiAoZnBnYV9zdGF0ICYgRlBHQV9JTlRfUlhfRkZfT1ZSRkxXKQorCQkJY2hhbm5lbF9yeC0+Y291bnRlcnMuZmlmb19vdmVyZmxvdysrOworCisJCS8qCisJCSAqIEZJWE1FOiBUaGVzZSBlcnJvcnMgc2hvdWxkIGJlIG5vdGlmaWVkIHRocm91Z2ggdGhlCisJCSAqIHBvbGwgaW50ZXJmYWNlIGFzIFBPTExFUlIuCisJCSAqLworCisJCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLworCQlpb3dyaXRlMzIoQlJJREdFX0lOVF9GUEdBLCBicmlkZ2UgKyBCUklER0VfSU5UX01BU0tfUkVHKTsKKworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgdm9pZCBwb2NoX2NsYXNzX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBwb2NoX2RldiAqcG9jaF9kZXYsIGludCBpZCkKK3sKKwlpbnQgaSwgajsKKwlpbnQgbmF0dHJzOworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWw7CisJZGV2X3QgZGV2bm87CisKKwlpZiAocG9jaF9kZXYtPmRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9jaF9kZXYtPm5jaGFubmVsczsgaSsrKSB7CisJCWNoYW5uZWwgPSAmcG9jaF9kZXYtPmNoYW5uZWxzW2ldOworCQlkZXZubyA9IHBvY2hfZmlyc3RfZGV2ICsgKGlkICogcG9jaF9kZXYtPm5jaGFubmVscykgKyBpOworCisJCWlmICghY2hhbm5lbC0+ZGV2KQorCQkJY29udGludWU7CisKKwkJbmF0dHJzID0gc2l6ZW9mKHBvY2hfY2xhc3NfYXR0cnMpL3NpemVvZihwb2NoX2NsYXNzX2F0dHJzWzBdKTsKKwkJZm9yIChqID0gMDsgaiA8IG5hdHRyczsgaisrKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGNoYW5uZWwtPmRldiwgcG9jaF9jbGFzc19hdHRyc1tqXSk7CisKKwkJZGV2aWNlX3VucmVnaXN0ZXIoY2hhbm5lbC0+ZGV2KTsKKwl9CisKKwlkZXZpY2VfdW5yZWdpc3Rlcihwb2NoX2Rldi0+ZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcG9jaF9jbGFzc19kZXZfcmVnaXN0ZXIoc3RydWN0IHBvY2hfZGV2ICpwb2NoX2RldiwKKwkJCQkJICAgICBpbnQgaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvY2hfZGV2LT5wY2lfZGV2LT5kZXY7CisJaW50IGksIGo7CisJaW50IG5hdHRyczsKKwlpbnQgcmV0OworCXN0cnVjdCBjaGFubmVsX2luZm8gKmNoYW5uZWw7CisJZGV2X3QgZGV2bm87CisKKwlwb2NoX2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwb2NoX2NscywgJnBvY2hfZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJICAgICAgTUtERVYoMCwgMCksIE5VTEwsICJwb2NoJWQiLCBpZCk7CisJaWYgKElTX0VSUihwb2NoX2Rldi0+ZGV2KSkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIGNyZWF0aW5nIHBhcmVudCBjbGFzcyBkZXZpY2UiKTsKKwkJcmV0ID0gUFRSX0VSUihwb2NoX2Rldi0+ZGV2KTsKKwkJcG9jaF9kZXYtPmRldiA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBvY2hfZGV2LT5uY2hhbm5lbHM7IGkrKykgeworCQljaGFubmVsID0gJnBvY2hfZGV2LT5jaGFubmVsc1tpXTsKKworCQlkZXZubyA9IHBvY2hfZmlyc3RfZGV2ICsgKGlkICogcG9jaF9kZXYtPm5jaGFubmVscykgKyBpOworCQljaGFubmVsLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBvY2hfY2xzLCBwb2NoX2Rldi0+ZGV2LCBkZXZubywKKwkJCQkJICAgICBOVUxMLCAiY2glZCIsIGkpOworCQlpZiAoSVNfRVJSKGNoYW5uZWwtPmRldikpIHsKKwkJCWRldl9lcnIoZGV2LCAiZXJyb3IgY3JlYXRpbmcgY2hhbm5lbCBjbGFzcyBkZXZpY2UiKTsKKwkJCXJldCA9IFBUUl9FUlIoY2hhbm5lbC0+ZGV2KTsKKwkJCWNoYW5uZWwtPmRldiA9IE5VTEw7CisJCQlwb2NoX2NsYXNzX2Rldl91bnJlZ2lzdGVyKHBvY2hfZGV2LCBpZCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZGV2X3NldF9kcnZkYXRhKGNoYW5uZWwtPmRldiwgY2hhbm5lbCk7CisJCW5hdHRycyA9IHNpemVvZihwb2NoX2NsYXNzX2F0dHJzKS9zaXplb2YocG9jaF9jbGFzc19hdHRyc1swXSk7CisJCWZvciAoaiA9IDA7IGogPCBuYXR0cnM7IGorKykgeworCQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGNoYW5uZWwtPmRldiwKKwkJCQkJCSBwb2NoX2NsYXNzX2F0dHJzW2pdKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGRldiwgImVycm9yIGNyZWF0aW5nIGF0dHJpYnV0ZSBmaWxlIik7CisJCQkJcG9jaF9jbGFzc19kZXZfdW5yZWdpc3Rlcihwb2NoX2RldiwgaWQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcG9jaF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcG9jaF9kZXYgKnBvY2hfZGV2OworCXN0cnVjdCB1aW9faW5mbyAqdWlvOworCWludCByZXQ7CisJaW50IGlkOworCWludCBpOworCisJcG9jaF9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG9jaF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvY2hfZGV2KSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgYWxsb2NhdGluZyBwcml2LiBkYXRhIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvY2hfZGV2LT5wY2lfZGV2ID0gcGRldjsKKwl1aW8gPSAmcG9jaF9kZXYtPnVpbzsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwb2NoX2Rldik7CisKKwlzcGluX2xvY2tfaW5pdCgmcG9jaF9kZXYtPmlvbWVtX2xvY2spOworCisJcG9jaF9kZXYtPm5jaGFubmVscyA9IFBPQ0hfTkNIQU5ORUxTOworCXBvY2hfZGV2LT5jaGFubmVsc1tDSE5PX1JYX0NIQU5ORUxdLmRpciA9IENIQU5ORUxfRElSX1JYOworCXBvY2hfZGV2LT5jaGFubmVsc1tDSE5PX1RYX0NIQU5ORUxdLmRpciA9IENIQU5ORUxfRElSX1RYOworCisJZm9yIChpID0gMDsgaSA8IHBvY2hfZGV2LT5uY2hhbm5lbHM7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2NoX2Rldi0+Y2hhbm5lbHNbaV0ud3EpOworCQlhdG9taWNfc2V0KCZwb2NoX2Rldi0+Y2hhbm5lbHNbaV0uZnJlZSwgMSk7CisJCWF0b21pY19zZXQoJnBvY2hfZGV2LT5jaGFubmVsc1tpXS5pbml0ZWQsIDApOworCX0KKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJlcnJvciBlbmFibGluZyBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgInBvY2giKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgcmVxdWVzdGluZyByZXNvdXJjZXNcbiIpOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKworCXVpby0+bWVtWzBdLmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJaWYgKCF1aW8tPm1lbVswXS5hZGRyKSB7CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBCQVIxXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisKKwl1aW8tPm1lbVswXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKKwl1aW8tPm1lbVswXS5tZW10eXBlID0gVUlPX01FTV9QSFlTOworCisJdWlvLT5uYW1lID0gInBvY2giOworCXVpby0+dmVyc2lvbiA9ICIwLjAuMSI7CisJdWlvLT5pcnEgPSAtMTsKKwlyZXQgPSB1aW9fcmVnaXN0ZXJfZGV2aWNlKGRldiwgdWlvKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgcmVnaXN0ZXIgVUlPIGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCisJcG9jaF9kZXYtPmJyaWRnZV9pb21lbSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCQkJCQkgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKHBvY2hfZGV2LT5icmlkZ2VfaW9tZW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIG1hcHBpbmcgYnJpZGdlIChiYXIwKSByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91aW9fdW5yZWc7CisJfQorCisJcG9jaF9kZXYtPmZwZ2FfaW9tZW0gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSwKKwkJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7CisJaWYgKHBvY2hfZGV2LT5mcGdhX2lvbWVtID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJlcnJvciBtYXBwaW5nIGZwZ2EgKGJhcjEpIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2JhcjBfdW5tYXA7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBwb2NoX2lycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCwKKwkJCSAgZGV2LT5idXNfaWQsIHBvY2hfZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgcmVxdWVzdGluZyBJUlEgJXVcbiIsIHBkZXYtPmlycSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2JhcjFfdW5tYXA7CisJfQorCisJaWYgKCFpZHJfcHJlX2dldCgmcG9jaF9pZHMsIEdGUF9LRVJORUwpKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgaWRzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJaWRyX2dldF9uZXcoJnBvY2hfaWRzLCBwb2NoX2RldiwgJmlkKTsKKwlpZiAoaWQgPj0gTUFYX1BPQ0hfQ0FSRFMpIHsKKwkJZGV2X2VycihkZXYsICJtaW5vcnMgZXhoYXVzdGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9mcmVlX2lycTsKKwl9CisKKwljZGV2X2luaXQoJnBvY2hfZGV2LT5jZGV2LCAmcG9jaF9mb3BzKTsKKwlwb2NoX2Rldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCXJldCA9IGNkZXZfYWRkKCZwb2NoX2Rldi0+Y2RldiwKKwkJICAgICAgIHBvY2hfZmlyc3RfZGV2ICsgKGlkICogcG9jaF9kZXYtPm5jaGFubmVscyksCisJCSAgICAgICBwb2NoX2Rldi0+bmNoYW5uZWxzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgcmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZVxuIik7CisJCWdvdG8gb3V0X2lkcl9yZW1vdmU7CisJfQorCisJcmV0ID0gcG9jaF9jbGFzc19kZXZfcmVnaXN0ZXIocG9jaF9kZXYsIGlkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jZGV2X2RlbDsKKworCXJldHVybiAwOworCisgb3V0X2NkZXZfZGVsOgorCWNkZXZfZGVsKCZwb2NoX2Rldi0+Y2Rldik7Cisgb3V0X2lkcl9yZW1vdmU6CisJaWRyX3JlbW92ZSgmcG9jaF9pZHMsIGlkKTsKKyBvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBwb2NoX2Rldik7Cisgb3V0X2JhcjFfdW5tYXA6CisJaW91bm1hcChwb2NoX2Rldi0+ZnBnYV9pb21lbSk7Cisgb3V0X2JhcjBfdW5tYXA6CisJaW91bm1hcChwb2NoX2Rldi0+YnJpZGdlX2lvbWVtKTsKKyBvdXRfdWlvX3VucmVnOgorCXVpb191bnJlZ2lzdGVyX2RldmljZSh1aW8pOworIG91dF9yZWxlYXNlOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Cisgb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworIG91dF9mcmVlOgorCWtmcmVlKHBvY2hfZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRklYTUU6IFdlIGFyZSB5ZXQgdG8gaGFuZGxlIHRoZSBob3QgdW5wbHVnIGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIHBvY2hfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcG9jaF9kZXYgKnBvY2hfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1aW9faW5mbyAqdWlvID0gJnBvY2hfZGV2LT51aW87CisJdW5zaWduZWQgaW50IG1pbm9yID0gTUlOT1IocG9jaF9kZXYtPmNkZXYuZGV2KTsKKwl1bnNpZ25lZCBpbnQgaWQgPSBtaW5vciAvIHBvY2hfZGV2LT5uY2hhbm5lbHM7CisKKwkvKiBGSVhNRTogdW5tYXAgZnBnYV9pb21lbSBhbmQgYnJpZGdlX2lvbWVtICovCisKKwlwb2NoX2NsYXNzX2Rldl91bnJlZ2lzdGVyKHBvY2hfZGV2LCBpZCk7CisJY2Rldl9kZWwoJnBvY2hfZGV2LT5jZGV2KTsKKwlpZHJfcmVtb3ZlKCZwb2NoX2lkcywgaWQpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcG9jaF9kZXYpOworCXVpb191bnJlZ2lzdGVyX2RldmljZSh1aW8pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKHVpby0+bWVtWzBdLmludGVybmFsX2FkZHIpOworCisJa2ZyZWUocG9jaF9kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcG9jaF9wY2lfaWRzW10gLyogX19kZXZpbml0Y29uc3QgKi8gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUlJBUElEUywKKwkJICAgICBQQ0lfREVWSUNFX0lEX1JSQVBJRFNfUE9DS0VUX0NIQU5HRSkgfSwKKwl7IDAsIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwb2NoX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBwb2NoX3BjaV9pZHMsCisJLnByb2JlID0gcG9jaF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IHBvY2hfcGNpX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBvY2hfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJnBvY2hfZmlyc3RfZGV2LCAwLAorCQkJCSAgTUFYX1BPQ0hfREVWSUNFUywgRFJWX05BTUUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3IgYWxsb2NhdGluZyBkZXZpY2Ugbm8uIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcG9jaF9jbHMgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwb2NrZXRjaGFuZ2UiKTsKKwlpZiAoSVNfRVJSKHBvY2hfY2xzKSkgeworCQlyZXQgPSBQVFJfRVJSKHBvY2hfY2xzKTsKKwkJZ290byBvdXRfdW5yZWdfY2hyZGV2OworCX0KKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBvY2hfcGNpX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJvciByZWdpc3RlciBQQ0kgZGV2aWNlIik7CisJCWdvdG8gb3V0X2NsYXNzX2Rlc3Ryb3k7CisJfQorCisJcmV0dXJuIDA7CisKKyBvdXRfY2xhc3NfZGVzdHJveToKKwljbGFzc19kZXN0cm95KHBvY2hfY2xzKTsKKworIG91dF91bnJlZ19jaHJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKHBvY2hfZmlyc3RfZGV2LCBNQVhfUE9DSF9ERVZJQ0VTKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwb2NoX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwb2NoX3BjaV9kcml2ZXIpOworCWNsYXNzX2Rlc3Ryb3kocG9jaF9jbHMpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihwb2NoX2ZpcnN0X2RldiwgTUFYX1BPQ0hfREVWSUNFUyk7Cit9CisKK21vZHVsZV9pbml0KHBvY2hfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQocG9jaF9leGl0X21vZHVsZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guaCBiL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWEyZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBVc2VyLXNwYWNlIERNQSBhbmQgVUlPIGJhc2VkIFJlZHJhcGlkcyBQb2NrZXQgQ2hhbmdlIENhcmRCdXMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDggVmlqYXkgS3VtYXIgPHZpamF5a3VtYXJAYnJhdmVnbnUub3JnPgorICoKKyAqIFBhcnQgb2YgdXNlcnNwYWNlIEFQSS4gU2hvdWxkIGJlIG1vdmVkIHRvIGEgaGVhZGVyIGZpbGUgaW4KKyAqIGluY2x1ZGUvbGludXggZm9yIGZpbmFsIHZlcnNpb24uCisgKgorICovCitzdHJ1Y3QgcG9jaF9jYnVmX2hlYWRlciB7CisJX19zMzIgZ3JvdXBfc2l6ZV9ieXRlczsKKwlfX3MzMiBncm91cF9jb3VudDsKKwlfX3MzMiBncm91cF9vZmZzZXRzWzBdOworfTsKKworc3RydWN0IHBvY2hfY291bnRlcnMgeworCV9fdTMyIGZpZm9fZW1wdHk7CisJX191MzIgZmlmb19vdmVyZmxvdzsKKwlfX3UzMiBwbGxfdW5sb2NrOworfTsKKworI2RlZmluZSBQT0NIX0lPQ19OVU0JCQknOScKKworI2RlZmluZSBQT0NIX0lPQ19UUkFOU0ZFUl9TVEFSVAkJX0lPKFBPQ0hfSU9DX05VTSwgMCkKKyNkZWZpbmUgUE9DSF9JT0NfVFJBTlNGRVJfU1RPUAkJX0lPKFBPQ0hfSU9DX05VTSwgMSkKKyNkZWZpbmUgUE9DSF9JT0NfR0VUX0NPVU5URVJTCQlfSU9SKFBPQ0hfSU9DX05VTSwgMiwgXAorCQkJCQkgICAgIHN0cnVjdCBwb2NoX2NvdW50ZXJzKQorI2RlZmluZSBQT0NIX0lPQ19TWU5DX0dST1VQX0ZPUl9VU0VSCV9JTyhQT0NIX0lPQ19OVU0sIDMpCisjZGVmaW5lIFBPQ0hfSU9DX1NZTkNfR1JPVVBfRk9SX0RFVklDRQlfSU8oUE9DSF9JT0NfTlVNLCA0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5OTNkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorY29uZmlnIFNMSUNPU1MKKwl0cmlzdGF0ZSAiQWxhY3JpdGVjaCBHaWdhYml0IElTLU5JQyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBORVRERVZfMTAwMAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFsYWNyaXRlY2gncyBJUy1OSUMgZ2lnYWJpdCBldGhlcm5ldCBjYXJkcy4KKworCSAgVGhpcyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGRldmljZXM6CisJICAgIE1vamF2ZSBjYXJkcyAoc2luZ2xlIHBvcnQgUENJIEdpZ2FiaXQpIGJvdGggY29wcGVyIGFuZCBmaWJlcgorCSAgICBPYXNpcyBjYXJkcyAoc2luZ2xlIGFuZCBkdWFsIHBvcnQgUENJLXggR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorCSAgICBLYWxhaGFyaSBjYXJkcyAoZHVhbCBhbmQgcXVhZCBwb3J0IFBDSS1lIEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc2xpY29zcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjOWU5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19TTElDT1NTKSArPSBzbGljb3NzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDViMTEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FCkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHN1cHBvcnQ6CisKKwlNb2phdmUgY2FyZHMgKHNpbmdsZSBwb3J0IFBDSSBHaWdhYml0KSBib3RoIGNvcHBlciBhbmQgZmliZXIKKwlPYXNpcyBjYXJkcyAoc2luZ2xlIGFuZCBkdWFsIHBvcnQgUENJLXggR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorCUthbGFoYXJpIGNhcmRzIChkdWFsIGFuZCBxdWFkIHBvcnQgUENJLWUgR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorCitUaGUgZHJpdmVyIHdhcyBhY3R1YWxseSB0ZXN0ZWQgb24gT2FzaXMgYW5kIEthbGFoYXJpIGNhcmRzLgorCitUT0RPOgorCS0gbW92ZSBmaXJtd2FyZSBsb2FkaW5nIHRvIHJlcXVlc3RfZmlybXdhcmUoKQorCS0gcmVtb3ZlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIG9mIHN0cnVjdHVyZXMKKwktIGFueSByZW1haW5pbmcgc3BhcnNlIGFuZCBjaGVja3BhdGNoLnBsIHdhcm5pbmdzCisJLSBhbnkgbmV0ZGV2IHJlY29tbWVuZGVkIGNoYW5nZXMKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0bzoKKyAgICAgICAgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK2FuZCBDYzogTGlvciBEb3RhbiA8bGlvZG90QGdtYWlsLmNvbT4gYW5kIENocmlzdG9waGVyIEhhcnJlcgorPGNoYXJyZXJAYWxhY3JpdGVjaC5jb20+IGFzIHdlbGwgYXMgdGhleSBhcmUgYWxzbyBhYmxlIHRvIHRlc3Qgb3V0IGFueQorY2hhbmdlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ0MzJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2Jkb3dubG9hZC5oCkBAIC0wLDAgKzEsODIxNSBAQAorI2RlZmluZSBNT0pBVkVfVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKKyNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjIyIgorI2RlZmluZSBNT0pBVkVfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgczMyIE1OdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgTVNlY3Rpb25TaXplW10gPQoreworCTB4MDAwMDgwMDAsIDB4MDAwMTAwMDAsCit9OworCitzdGF0aWMgdTMyIE1TZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBNb2phdmVVQ29kZVsyXVs2NTUzNl0gPQoreworCXsKKwkweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MWYsIDB4ZTksIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTksCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHg0MCwgMHhlOSwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDExLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhiNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGQ5LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjYsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4OTUsIDB4ZTgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjIsIDB4NTAsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGE1LCAweGE1LCAweDAwLCAweGE2LCAweGI0LCAweGE3LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweGEyLCAweDUwLAorCTB4YjUsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDQxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjUsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmEsCisJMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHgwMCwgMHhkYSwgMHhiNSwgMHhhYiwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDAwLCAweGEyLCAweDUwLCAweGI1LCAweDYzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGVkLCAweDhiLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NDYsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGVmLCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZTMsIDB4OGYsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGQ3LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGYxLCAweGRiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTksIDB4OGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhlOSwgMHhlMywgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwKKwkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGMsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlYiwgMHhkYiwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDgxLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCisJMHhiNSwgMHhkYiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGNmLCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGE3LAorCTB4YjQsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGI1LCAweDhiLCAweDAxLCAweDAwLAorCTB4NjIsIDB4MDAsIDB4MjYsIDB4NGMsIDB4YjUsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhiNSwgMHhjZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkZiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDAwLCAweDAwLCAweDUyLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAorCTB4NGIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZGYsIDB4ZjcsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhlZiwgMHhkZiwgMHg4YiwgMHgwMSwgMHgwMCwgMHg2OSwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGRmLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGU1LCAweDAxLCAweDAwLCAweGY4LCAweDAwLCAweDAwLCAweGRhLAorCTB4YjMsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkOSwKKwkweGQ1LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDdiLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NWQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlNywgMHg4YiwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHhlNywgMHg5NywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDVlLAorCTB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTUsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhlNSwgMHhlMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweDhmLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4YjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGU1LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHgyMiwgMHhmNSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLCAweGQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ZWIsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsCisJMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhlYSwgMHhkNCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY3LCAweGUzLCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ZGQsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHhkNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweGU5LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NGEsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCisJMHhkZCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGRmLCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDA0LCAweDAwLCAweDQwLCAweGRkLCAweDk5LCAweDAxLCAweDAwLCAweGI3LCAweDAwLCAweDEzLCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGNhLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YzgsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweGQzLCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDYsIDB4ZmUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhiMywgMHhlMywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYSwgMHhiMywgMHhjMywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAwLCAweDAwLCAweDQyLCAweDhkLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGViLCAweDAxLCAweDAwLCAweGU0LCAweDAwLCAweDg0LCAweDk2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHg4MywgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDJkLCAweDgxLCAweDAxLCAweDAwLAorCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDEsIDB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhiMywgMHhjMywgMHgwMSwgMHgwMCwgMHhkYSwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGI1LCAweGJmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhiOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGI4LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweGI5LCAweGViLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjgsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MDAsIDB4ZGMsCisJMHhiOSwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAxLCAweDAwLCAweDQyLAorCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDJkLCAweDkxLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4MSwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweGEwLCAweGRjLAorCTB4YjksIDB4NmIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHhmOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweGRhLCAweDhiLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTEsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEzLCAweDQ0LCAweDg5LCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDBjLCAweDAxLCAweGEwLCAweGRhLCAweDhiLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4OTAsIDB4NDQsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwKKwkweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLCAweDhiLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ZjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHhjZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAxLCAweDQwLCAweGRhLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGRhLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjksIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgxNiwgMHgwMSwgMHg5ZiwgMHhkYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDEsIDB4OWYsIDB4OTQsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4YjQsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgxZCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDUxLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjksIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDEsIDB4MDAsIDB4NDksCisJMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDAxLCAweGEyLCAweDQxLCAweDkzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweDIyLCAweDRiLAorCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDUxLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NGUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YWYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGYzLCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAorCTB4NWYsIDB4MDEsIDB4MjIsIDB4Y2MsIDB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhiYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LAorCTB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGUxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc3LCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDFhLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NTIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLCAweDU1LCAweDAxLCAweDkxLCAweDgxLAorCTB4ODAsIDB4MzAsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgyMiwgMHg0MCwKKwkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4ZmYsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhYSwgMHgwMSwgMHhhMiwgMHg0YywKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjEsIDB4MDEsIDB4MjIsIDB4NDEsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4ZTAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0NCwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGIzLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLAorCTB4YjEsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OWYsIDB4MDAsIDB4YTAsCisJMHg5ZSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM0LCAweDAxLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHhjMywgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAorCTB4NmYsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NTIsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4YzcsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDAxLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkMSwgMHgwMSwgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDZmLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NTMsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRhLCAweDAxLCAweDIyLCAweGRlLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMSwgMHhhMiwgMHg0NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQzLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhlMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsCisJMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlNywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweGVkLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMSwgMHg4NCwgMHg0MSwKKwkweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGZhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweGRkLAorCTB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLCAweGE3LCAweGNiLCAweDAxLCAweDAwLAorCTB4YzUsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4YmEsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhhOCwgMHhiMSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0ZCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY1LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwMiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDVkLCAweDAyLCAweDAwLCAweGM3LAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg1ZCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVkLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGJhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMiwgMHhiOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDIsIDB4YmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDMxLCAweDAyLCAweGJjLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzMywgMHgwMiwgMHhiZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM1LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDIsIDB4YmYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDAyLCAweGM4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzZCwgMHgwMiwgMHhjYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDIsIDB4Y2IsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MSwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQzLCAweDAyLCAweGNkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwMiwgMHhjZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ3LCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY3LCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjUsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDgxLCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDllLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhOSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI5LCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4Y2MsCisJMHg4NSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDAyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGM2LCAweDAyLCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMiwgMHg4MCwgMHhhNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4ODAsIDB4YTUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDAyLCAweDIwLCAweDRmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDIsIDB4MjAsIDB4NGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwMiwgMHgyMCwgMHg0NywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDEsCisJMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDRjLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMiwgMHhhMiwgMHhhNSwKKwkweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGUzLCAweDAyLCAweDFmLCAweDkxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwMiwgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLAorCTB4ZTgsIDB4MDIsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjgsIDB4MDAsIDB4OTAsCisJMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAyLCAweGEyLCAweGY4LCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIyLCAweGYwLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwYywKKwkweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDRkLCAweDg1LCAweDEwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MjAsIDB4NGYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg0ZiwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDAzLCAweDAwLCAweDBjLCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQzLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDMsIDB4MjIsIDB4ZjAsIDB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsCisJMHgzOSwgMHgwMywgMHgwMCwgMHg0ZCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgyMCwgMHg0MiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAzLCAweDIyLCAweGYwLCAweDllLCAweDZlLCAweDAwLCAweDAwLAorCTB4MzksIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMywgMHhhMiwgMHhmMCwgMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgyMSwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NTgsCisJMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDIwLCAweDRmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDVhLAorCTB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgxNCwgMHgyMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwMywgMHgyMiwgMHhmMCwKKwkweDllLCAweDZlLCAweDAwLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDU4LCAweDg1LCAweDEwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDMsIDB4MjIsIDB4ZjAsCisJMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDE0LCAweDIwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAzLCAweGEyLCAweGYwLAorCTB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg4LCAweGUwLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDMsIDB4YTIsIDB4NDIsIDB4MjEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YTUsIDB4YTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAzLCAweDAwLCAweDQ0LCAweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMywgMHhhMiwgMHhmMCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg5LCAweGUwLCAweDAxLCAweDAwLCAweGUwLCAweDAwLCAweDgwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQxLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjIsCisJMHg4NiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDAzLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDhmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDksIDB4MDMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDVjLAorCTB4OGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMywgMHgyMiwgMHg1ZiwKKwkweDhkLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4NTMsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLAorCTB4ODYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMywgMHgwMCwgMHg0MSwgMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmYsIDB4NDYsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMywgMHhhMCwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDZkLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4NTUsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMywgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHgwMywgMHhhMiwgMHg0MSwKKwkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGEsIDB4MDMsIDB4MjIsIDB4NWEsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDgzLCAweDAzLCAweGEyLCAweDQxLAorCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDBmLCAweDAwLCAweGJjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCisJeworCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAorCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGU2LCAweDg5LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHhkZSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgxOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2IsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDcxLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDk3LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDkzLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YWYsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4MCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDczLCAweDgwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NzQsIDB4ODAsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4OTEsIDB4ODEsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCisJMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4N2MsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDg0LCAweDgwLCAweGEyLCAweDQxLAorCTB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwKKwkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsCisJMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLAorCTB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODAsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKKwkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMiwgMHgwMCwgMHgyMCwKKwkweDQyLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsCisJMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDliLCAweDgwLCAweGE4LCAweGIxLCAweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg4MCwgMHgxNCwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwKKwkweDgzLCAweGY0LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLAorCTB4N2YsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwKKwkweDdmLCAweDgwLCAweDFmLCAweDVjLCAweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDllLCAweDgzLCAweDFkLCAweGM2LAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsIDB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhhOSwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDNkLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweDliLCAweGIzLCAweDAwLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAorCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4NTgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDgzLCAweDAwLCAweGJiLAorCTB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3NywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDE1LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDFjLCAweDgxLCAweDAwLCAweDRlLAorCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDgwLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDhmLCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwKKwkweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDRlLCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4MjIsIDB4NDIsCisJMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4MCwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDgwLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVlLCAweDgwLCAweDFmLCAweGNhLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAorCTB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGFlLCAweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDUsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgxLCAweGEyLCAweDQwLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGQxLCAweDAxLCAweDAwLCAweDBkLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODEsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDIxLCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4NjAsIDB4NDAsIDB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDI3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4NDEsCisJMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDJmLCAweDgxLCAweGEyLCAweDQyLAorCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4Y2EsIDB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLAorCTB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg2ZiwKKwkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzUsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDQyLCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweDIyLCAweDViLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweGY1LCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLCAweDRhLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhjYSwKKwkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDVmLAorCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwKKwkweGM3LCAweGIxLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDVlLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDgxLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDYxLCAweDgxLCAweGEyLCAweDRmLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHg0MSwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4YzQsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MGMsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3YSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2YsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NywgMHg4MSwgMHgyMiwgMHg0MywKKwkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweGExLCAweDgxLCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4YjAsIDB4ODEsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDgxLCAweDIyLCAweDRhLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4ODEsIDB4MjIsIDB4NGQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgyMiwgMHg0ZiwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4ODEsIDB4MjIsIDB4NGUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgyMiwgMHg0MiwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MSwgMHgyMiwgMHg0NSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGFkLCAweDgxLCAweDIyLCAweDQ0LAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MSwgMHgyMiwgMHg0MywgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDIyLCAweDQyLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4ODEsIDB4MjIsIDB4NGIsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YWYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MjIsIDB4NDAsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGFlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIzLCAweDAxLCAweDAwLAorCTB4YzQsIDB4ODEsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MDAsIDB4MGIsCisJMHg3ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg3ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGEyLCAweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODEsIDB4OWYsIDB4ODUsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDgxLCAweDE0LCAweGY3LCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweGQxLCAweDgxLCAweGEyLCAweDQ5LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4MSwgMHgxNSwgMHhmOCwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4MSwgMHhhMiwgMHg0YSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZDYsIDB4ODEsIDB4YTIsIDB4YzgsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGVmLCAweGIzLCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDQyLCAweDQwLAorCTB4ZjEsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwgMHg2YiwgMHhiMywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwKKwkweGIxLCAweGIzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODEsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmOCwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4MSwgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDgxLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHg3NSwgMHg4MCwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ5LCAweDAwLCAweDAwLCAweDQxLAorCTB4YjMsIDB4NzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsIDB4YjUsIDB4ZjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhiMywgMHhmMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwKKwkweGIzLCAweGZiLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGE2LCAweGI4LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDIsCisJMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGViLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4MiwgMHgxMCwgMHhkYSwgMHhiNSwgMHg2YiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHgwMCwgMHg0MSwKKwkweDJkLCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJkLCAweDkxLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQyLAorCTB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDExLCAweDAxLCAweDAwLCAweDE1LCAweDgyLCAweDA0LCAweDQwLCAweDJkLCAweDAxLCAweDAwLCAweDAwLAorCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI1LCAweDAxLCAweDAwLCAweDQyLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NTQsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDMwLCAweDgyLCAweGEyLCAweDA2LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM5LCAweDgyLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwKKwkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLAorCTB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDgsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4NDUsIDB4ODIsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODIsIDB4MjIsIDB4NDUsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MiwgMHgyMiwgMHgyMCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDZmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4MiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODIsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhNywgMHg4MiwgMHgyMiwgMHg0NSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4MiwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4OTgsIDB4ODIsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4MiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE3LCAweDgyLCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YTcsIDB4ODIsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGFhLCAweDgyLCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweGE3LCAweDgyLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGI0LCAweGIzLCAweDAxLCAweDAwLAorCTB4YjgsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MjAsIDB4MjAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGRiLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJkLCAweDgyLCAweDIyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4MSwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgxLCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKKwkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MiwgMHgwMCwgMHg1MCwKKwkweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGI1LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlNywgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZjMsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDgzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MTYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzMsIDB4ODMsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDgzLCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NGMsIDB4ODMsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4MywgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4MywgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODMsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODMsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4MywgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDlkLCAweDgzLCAweGEyLCAweDRiLCAweGI3LCAweDZmLCAweDAwLCAweDAwLAorCTB4OWQsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MmYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweDIyLCAweDQwLAorCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDgwLCAweDgzLCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MywgMHgyMiwgMHg0MiwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ODYsIDB4ODMsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg5YSwgMHg4MywgMHgyMiwgMHg1MSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4MywgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQ4LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODMsIDB4MjIsIDB4NDAsCisJMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGZlLAorCTB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDEsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODMsIDB4MjIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGFhLCAweDgzLCAweDIyLCAweDRjLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDgzLCAweDIyLCAweDUwLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiNywgMHg4MywgMHgyMiwgMHg1OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHg4MywgMHgyMiwgMHg1YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGFlLCAweDgzLCAweGEyLCAweDQyLAorCTB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgyMiwgMHhjYSwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0NSwKKwkweGYzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHhhMiwgMHg0MCwKKwkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4YjksIDB4ODMsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4MywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2EsIDB4ODMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDgzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGNhLCAweDgzLCAweDU2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNmLCAweDgzLCAweGEyLCAweDQxLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkYSwgMHg4MywgMHg5MSwgMHg4MSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODMsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MywgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweGYwLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmOCwgMHgwMCwgMHg0OCwgMHg5MCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDkzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MywgMHgyMiwgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg4MywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNywgMHg4MywgMHhhMiwgMHg0MSwKKwkweDkzLCAweDUwLCAweDAwLCAweDAwLCAweGU1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4NDcsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg4MywgMHgyMCwgMHgxOCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorCTB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDRlLCAweGQzLCAweDAxLCAweDAwLCAweDVlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmMsIDB4MDMsIDB4MDAsIDB4NDIsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NCwgMHgyMiwgMHhhNywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQxLAorCTB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NCwgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NCwgMHhhMiwgMHg0MSwKKwkweDAxLCAweDdkLCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDIyLCAweDU4LCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDMzLCAweGM0LAorCTB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODQsIDB4YTEsIDB4YWQsIDB4OWQsIDB4MjAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0ZSwKKwkweDVhLCAweDgzLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MmMsIDB4ODQsIDB4MjIsIDB4YWIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODQsIDB4YTIsIDB4NDAsCisJMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4NCwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDg0LCAweDIyLCAweDVlLAorCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg4NCwgMHgyMiwgMHg1NCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDg0LCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZmEsIDB4ODUsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NCwgMHhhMiwgMHg1ZiwgMHg1OSwgMHgyNywgMHgwMCwgMHgwMCwKKwkweDM1LCAweDg0LCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDNjLCAweDg0LCAweGEyLCAweDVlLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODQsIDB4MjIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4NCwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDM2LCAweDg0LCAweGE4LCAweGIxLCAweDM2LCAweDMwLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDg2LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQ3LCAweDg0LCAweDM0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg4NCwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg1MiwgMHgyMSwKKwkweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLCAweDJmLCAweGMzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NCwgMHgwMCwgMHgzNCwgMHgxMywgMHg4NCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGU1LCAweDg0LCAweDAwLCAweDQzLAorCTB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg0NywgMHg4NCwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwKKwkweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweGEyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4NGUsIDB4ODQsIDB4MjIsIDB4NTksIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4NCwgMHgyOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDRiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDg0LCAweDIxLCAweGFjLAorCTB4OWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MWYsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMCwgMHg1ZiwgMHg5ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDU4LCAweDkxLCAweDAxLCAweDAwLCAweDU2LCAweDg0LCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDg0LCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDIyLCAweDQ0LAorCTB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODQsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg1YiwgMHg4NCwgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4NCwgMHgxYSwgMHg0MCwKKwkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4OWEsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OWIsIDB4ODksIDB4MjIsIDB4NDQsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHg4OSwgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDg5LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LAorCTB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjYsIDB4ODQsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODQsIDB4MjIsIDB4NDAsCisJMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVmLCAweDg5LCAweDFmLCAweGE1LCAweDgyLCAweDZmLCAweDAwLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NmMsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MzMsIDB4NDAsCisJMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDczLCAweDg0LCAweGEwLCAweGNlLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDg1LCAweDg0LCAweGEwLCAweGNkLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NCwgMHgyMiwgMHhiNSwKKwkweDgxLCAweDE0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NzcsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsCisJMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwgMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4YTgsIDB4YTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDVjLCAweDg0LCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDAwLCAweDZmLAorCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ODUsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg4NCwgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLAorCTB4OTAsIDB4ODQsIDB4YTYsIDB4NDIsIDB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTcsIDB4MDAsIDB4OTUsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NCwgMHg0NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDg0LCAweGE4LCAweGIxLAorCTB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4MWQsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5MSwgMHg4NCwgMHgwMCwgMHg1OCwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5NywgMHgwMCwgMHg5NSwKKwkweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDg0LCAweDIzLCAweDRiLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDg0LCAweDIyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4NCwgMHg4MywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWQsIDB4ODQsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgyMiwgMHg1NSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAorCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhMywgMHg4NCwgMHgwMCwgMHg0YiwgMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NCwgMHhhMiwgMHhmOCwKKwkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg4NCwgMHhhMiwgMHhmOCwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGFjLCAweDg0LCAweGEyLCAweGY4LCAweDEwLCAweDZjLCAweDAwLCAweDAwLCAweGFjLCAweDg0LCAweGEyLCAweGYwLAorCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg0NywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI4LCAweDg0LCAweGEyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDFmLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NCwgMHg0NywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM1LCAweDg0LCAweDFmLCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLAorCTB4YzMsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMzLCAweDg0LCAweDQ3LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ODQsIDB4MWYsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGQzLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2IsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk2LCAweDAwLCAweDVmLCAweDAxLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDg0LCAweDIyLCAweDQwLAorCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODQsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDg0LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGQ4LCAweDg0LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4NCwgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDY2LCAweDhiLCAweDAwLCAweDQ1LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHhmNSwgMHg5NywgMHgwMCwgMHg0YiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0YiwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4NCwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHgwNywgMHgyZSwgMHg0NywgMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4NCwgMHgyMiwgMHgxNywKKwkweDk2LCAweDA0LCAweDAwLCAweDAwLCAweGZkLCAweDg0LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZmQsIDB4ODQsIDB4MjMsIDB4YTIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4ODUsIDB4MDAsIDB4NWMsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDg1LCAweDIyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDA2LCAweDg1LCAweDQ1LCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxZCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODUsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg4NSwgMHgwMCwgMHhmMiwgMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg4NSwgMHhhMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODUsIDB4MjIsIDB4NGEsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxYywgMHg4NSwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBhLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLAorCTB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDFjLCAweDg1LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjcsIDB4ODUsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDFjLCAweDg1LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDcsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4NSwgMHgyMiwgMHhhMSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDg1LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4NWIsIDB4ODUsIDB4YTMsIDB4OTIsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDE1LCAweDhhLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDg1LCAweDIyLCAweDVjLAorCTB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4ODUsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDJkLCAweDg1LCAweGEyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDksIDB4ODUsIDB4MDAsIDB4NWUsCisJMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwKKwkweGY4LCAweDk3LCAweDAwLCAweDRjLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDg1LCAweGE4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDg1LCAweDAwLCAweDVlLAorCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHg4NSwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDhjLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTksIDB4OTgsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NDksIDB4ODUsIDB4MjgsIDB4NTQsIDB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDRiLCAweDg1LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg4NSwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU2LCAweDg1LCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwKKwkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDU5LCAweDg1LCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDVkLCAweDg1LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDg1LCAweDAwLCAweDQxLAorCTB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg4NSwgMHgzNSwgMHgwMSwKKwkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NjYsIDB4ODUsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODUsIDB4MjIsIDB4NGQsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweGYzLCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4NSwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NSwgMHhhMiwgMHg0MCwKKwkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MywgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDg1LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc0LCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2UsIDB4NDMsIDB4MjcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDI3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODUsIDB4YTMsIDB4MGIsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLAorCTB4MzksIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDdmLCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4NSwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweDgyLCAweDQxLCAweDIzLCAweDQwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4NSwgMHgyMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDg1LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyNSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweDRjLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4NSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHhhMywgMHgxMiwKKwkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDg1LCAweDY4LCAweDFiLCAweDI4LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4ODUsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhjYSwgMHg4NSwgMHgyMiwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODUsIDB4YTIsIDB4MTQsCisJMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDg1LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDJiLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODUsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNCwgMHg4NSwgMHgyMiwgMHgxYiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDE1LCAweGUwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4NSwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGMwLCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODUsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDk1LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJlLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4ODUsIDB4MjIsIDB4NTAsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgxNywKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGQ3LCAweDg1LCAweGEyLCAweDQxLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDAwLCAweDIwLCAweDFkLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGRjLCAweDg1LCAweGEzLCAweDQwLAorCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4NjAsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMywKKwkweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4MTUsIDB4OGEsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDg1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NSwgMHgyMiwgMHgxMywgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODUsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDBiLCAweDk2LCAweDAwLCAweDA3LAorCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODYsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDg2LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODYsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDBhLCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDg2LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDg2LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDk3LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDg2LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NGMsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4NiwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI0LCAweDg2LCAweDg1LCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4NiwgMHg0NiwgMHg0NywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODYsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MWUsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU0LCAweDg2LCAweDAxLCAweGZiLAorCTB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODYsIDB4ODcsIDB4ZmIsIDB4MjIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODYsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzZSwgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDQ5LCAweDg2LCAweDIyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg0MiwgMHg4NiwgMHhhNiwgMHg1ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4NiwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTIsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODYsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY2LCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4NTYsIDB4ODYsIDB4MjEsIDB4MDQsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODYsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0YiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc2LCAweDg2LCAweDAwLCAweDQzLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDg2LCAweDAwLCAweGZiLAorCTB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4NiwgMHgwMCwgMHg1YSwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDVmLCAweDg2LCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTYsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY2LCAweDhiLCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY1LCAweDg2LCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODYsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg1MywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg1NCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDg2LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NjgsIDB4ODYsIDB4YTIsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWQsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDZjLCAweDg2LCAweGEwLCAweDkxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcwLCAweDg2LCAweDIwLCAweDkxLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OGIsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweGEwLCAweDBhLAorCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4YTAsIDB4NDIsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTQsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDg2LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweDIyLCAweDU1LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4NiwgMHgyMiwgMHg1MywKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDg2LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODYsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NiwgMHg0MywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk0LCAweDg2LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAorCTB4ODYsIDB4ODYsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCisJMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg5MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDg2LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MGMsCisJMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGEwLCAweDg2LCAweDMwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHg4NiwgMHgyMiwgMHg0MCwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGFmLCAweDg2LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDIsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDg2LCAweDQ3LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDEsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGU0LCAweDg2LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyNCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweGRlLCAweDg2LCAweDIyLCAweDA4LAorCTB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4NiwgMHhhYSwgMHg0MSwKKwkweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODYsIDB4MjYsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGNkLCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODYsIDB4YTIsIDB4NDAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg4NiwgMHgwMCwgMHg0MSwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MiwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDIxLCAweDM4LCAweDk2LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODYsIDB4YTIsIDB4NDQsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDIwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4NiwgMHhhOCwgMHg0MiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDg2LCAweDIyLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NiwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFhLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDg2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4OTIsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NiwgMHgyMiwgMHgwOCwKKwkweDJlLCAweDMwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDAwLCAweDQxLCAweDI3LCAweGIwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHgwYSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODYsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4NywgMHgyYSwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg4NiwgMHhhMywgMHgwNywKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODYsIDB4YTMsIDB4NDAsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg4NiwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODYsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDAxLCAweDJkLCAweDQwLAorCTB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4ODgsIDB4MjIsIDB4MGYsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MGQsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODcsIDB4MjIsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODcsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHgyMCwgMHg5NCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4ODcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg4NywgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweDM3LCAweDg3LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NWYsIDB4ODcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NywgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQzLCAweDg3LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODcsIDB4ODAsIDB4MDgsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDFmLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRhLCAweDg3LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg4NywgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU2LCAweDg3LCAweDIyLCAweDQyLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4NywgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3ZCwgMHg4NywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3YywgMHg4NywgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDg3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDRjLAorCTB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHg4NywgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg3OSwgMHg4NywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHgwMywKKwkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJhLCAweGYyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDIyLCAweDQwLAorCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDg3LCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ODksIDB4ODcsIDB4MjIsIDB4MGIsCisJMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NywgMHgyMiwgMHg0NywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAorCTB4OTEsIDB4ODcsIDB4YTAsIDB4NDYsIDB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLAorCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODcsIDB4YTAsIDB4NDEsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDg3LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDg3LCAweGEwLCAweDQzLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODcsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg4NywgMHhhMCwgMHg0MSwgMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTgsIDB4ODcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ODcsIDB4MjIsIDB4NDgsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ4LCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweGE3LCAweDg3LCAweDkwLCAweDQ4LAorCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4NywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODcsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI2LCAweDg3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiYywgMHg4NywgMHg4NywgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDk1LCAweDAwLCAweDQxLCAweDIzLCAweDQwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODksIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDg3LCAweGEwLCAweDA3LCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ1LCAweDg3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwNSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg4LCAweDIyLCAweDAxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGVhLCAweDg3LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZWIsIDB4ODcsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NywgMHgyMiwgMHg0MCwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY3LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY5LCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDBiLCAweDg4LCAweDIzLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg4OCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDEzLCAweDg4LCAweDIyLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDFhLAorCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDg4LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjEsIDB4ODgsIDB4NjgsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4OCwgMHg4MCwgMHgwOCwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDExLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MWYsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODgsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4OCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDU0LCAweDg4LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODgsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzNywgMHg4OCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODgsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1MywgMHg4OCwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4OCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNkLCAweDg4LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4OCwgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDg3LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLAorCTB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ODgsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4NywgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHgwMCwgMHgwZCwKKwkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDcxLCAweDg4LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MmQsIDB4MWQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHhmMywgMHgzOCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyMCwgMHg1MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweDQwLCAweDNmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDFkLAorCTB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4OCwgMHhhMCwgMHhmYywgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDY0LCAweDg4LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE4LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODgsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg4OCwgMHhhMiwgMHg0MSwKKwkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3NiwgMHg4OCwgMHg0MiwgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODgsIDB4YTAsIDB4NDEsIDB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLCAweDgxLCAweDg0LCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODgsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDE5LAorCTB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4YSwgMHg4OCwgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLCAweDMyLCAweGMwLCAweDAxLCAweDAwLAorCTB4OGYsIDB4ODgsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGUsIDB4ODgsIDB4YTAsIDB4MWMsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDg4LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMywgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIxLCAweDg4LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmIsIDB4OTUsIDB4MDAsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4ODgsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMxLCAweDg4LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg4OCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGM4LCAweDg4LCAweDIyLCAweDlmLAorCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDNmLCAweGMzLCAweDAxLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4OCwgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGNmLCAweDg4LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4MWUsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4OCwgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDg4LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDAwLCAweGE2LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDFmLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4OCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg4OCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGVjLCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODgsIDB4MjIsIDB4MDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg4OCwgMHgyMCwgMHg5NCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweDAwLCAweDk0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODksIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDg5LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDg5LCAweDY4LCAweDA3LAorCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgxZiwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg5LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg5LCAweDIyLCAweDBkLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODksIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4OSwgMHgwMCwgMHgwZCwKKwkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDg5LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDI3LCAweDg5LCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4OSwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDg5LCAweGEyLCAweDBkLAorCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODksIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDMxLCAweDg5LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzgsIDB4ODksIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4NGMsCisJMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDg5LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg5LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDAzLAorCTB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg4OSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4ODksIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRiLCAweDg5LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4ODksIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg5LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAorCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4OSwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4OSwgMHgyMiwgMHg0MiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjUsIDB4ODksIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4OSwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZlLCAweDg5LCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODksIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4YTIsIDB4NWYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODksIDB4MjIsIDB4NDgsCisJMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDdkLCAweDg5LCAweDFmLCAweGYwLAorCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODksIDB4MjMsIDB4NDEsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHg4YSwgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODksIDB4MjIsIDB4MGEsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg5OSwgMHgwMCwgMHg0MCwgMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDhhLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODksIDB4MjIsIDB4ZjAsIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgyLCAweGUwLCAweDAxLCAweDAwLCAweDg4LCAweDg5LCAweGEzLCAweDQxLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweDIwLCAweDRjLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsIDB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg4YSwgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgyMiwgMHgwYSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDksCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk2LCAweDg5LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4OTcsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHg5NywgMHg4OSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4OTksIDB4ODksIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NCwgMHgyMiwgMHg0MCwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLCAweDlkLCAweDg5LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHg0OSwgMHg4NCwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDg5LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4YzksIDB4ODksIDB4MWQsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODksIDB4MjIsIDB4NDAsCisJMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4OSwgMHgyMiwgMHg1YiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVkLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE5LCAweDg5LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWIsIDB4ODksIDB4NDMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODksIDB4MjIsIDB4NTcsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGFkLCAweDg5LCAweGE4LCAweGIxLCAweDk0LCAweDMwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDg5LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAorCTB4YjcsIDB4ODksIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4OSwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweGJhLCAweDg5LCAweDAwLCAweGJlLAorCTB4ODMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDg5LCAweGEyLCAweDQwLCAweDg2LCAweDA0LCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4OWMsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweGMzLCAweDg5LCAweDUyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg0OCwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDA1LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGQwLCAweDg5LCAweDIyLCAweDU0LAorCTB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODksIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwgMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODksIDB4MGYsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDUwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4ODksIDB4OTksIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4OSwgMHg5YiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg5LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODksIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQ4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDU4LAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweDg4LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI2LCAweDA1LCAweDQ3LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0NCwgMHhmMCwgMHg0MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhlOSwgMHg4OSwgMHgyMiwgMHg0MCwgMHhmMiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwMCwgMHg2ZiwKKwkweDk3LCAweDMzLCAweDAxLCAweDAwLCAweGViLCAweDg5LCAweDIyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4OWIsIDB4ODAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4MjIsIDB4NTksCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU2LCAweDg5LCAweDI4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGVjLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4YzAsIDB4OTUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4OSwgMHgyMiwgMHg1ZCwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjIsIDB4ODksIDB4YTgsIDB4YjEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg3ZiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHhjNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODksIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg4OSwgMHg0MywgMHg1ZiwgMHg3ZiwgMHgxMywgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhiZiwKKwkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDdmLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4N2YsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4MDAsIDB4YmYsCisJMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA2LCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDYsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAzLCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OTUsIDB4MjIsIDB4MDIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDYyLCAweDk1LCAweDFhLCAweDAyLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OGEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDk1LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg5NSwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgxYywgMHg4YSwgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MWMsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxZCwgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZkLCAweDhhLCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDUxLCAweDhhLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MzIsIDB4OGEsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4YSwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDUxLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmUsIDB4OGEsIDB4MWMsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1MSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ4LCAweDhhLCAweGEwLCAweDQ4LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4YSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OGEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDZlLCAweDhhLCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLAorCTB4NDMsIDB4OGEsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsCisJMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDFhLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NGMsIDB4OGEsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDVkLCAweDhhLCAweDIyLCAweDQxLAorCTB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg4YSwgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDhhLCAweDgzLCAweDQxLAorCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg4YSwgMHgyMywgMHg0MCwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhhLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4YSwgMHgwMCwgMHhmOCwKKwkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhhLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGEsIDB4YTAsIDB4YWEsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKKwkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDgwLCAweDhhLCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4NzYsIDB4OGEsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3NiwgMHg4YSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc2LCAweDhhLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDcyLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4NzcsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGEsIDB4MjIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LAorCTB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCisJMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDg0LCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHg4YSwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5NywgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAorCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDQwLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg4YSwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhkMSwgMHg4ZCwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZSwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4ZSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDhmLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2ZiwgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDliLCAweDhmLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI5LCAweDhmLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OGYsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGZjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg5MCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5MCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDhmLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBmLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkwLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4ZSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4NmUsIDB4OGIsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTAsIDB4MDAsIDB4NDksCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg5MCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5MSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTEsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg2LCAweDkxLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg5MiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4OTIsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzEsIDB4OTIsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDMxLCAweDkyLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNSwgMHg5MiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY2LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTgsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE5LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxOCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDkyLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDkyLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDkyLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZlLCAweDkxLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmMiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YjgsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTQsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg5NCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDk0LCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg5NCwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4OGEsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGNhLCAweDhkLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YzcsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNiLCAweDhkLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDBhLCAweDhhLCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4MDYsIDB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKKwkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDhkLCAweDIwLCAweDRiLAorCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAzLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OGUsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhMiwgMHg0YywgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDhlLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDBkLCAweDhlLCAweDIwLCAweGYwLAorCTB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEzLCAweDhlLCAweGE4LCAweDQ0LAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDhlLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDhlLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OGUsIDB4MjIsIDB4NDQsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDIwLCAweGEyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyYSwgMHg4ZSwgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhlLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4ZSwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OGUsIDB4YTIsIDB4NDYsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDhlLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGUsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg4ZSwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHg4ZSwgMHgyMiwgMHgwYSwKKwkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4ZSwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDRkLCAweDhlLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLAorCTB4NzAsIDB4OGUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDhlLCAweDIyLCAweDQxLCAweDE1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OGUsIDB4YTAsIDB4NDMsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHg5NywgMHgwMCwgMHg0NywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZSwgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4ZSwgMHgyMiwgMHg0NSwKKwkweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDgyLCAweDhlLCAweDIyLCAweDQ4LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGUsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDk5LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweDk5LCAweDhlLCAweGEyLCAweDQ0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4ZSwgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDk5LCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OGUsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NjksIDB4OTYsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGUsIDB4MjIsIDB4NGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwKKwkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGUsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGNiLCAweDhlLCAweDIwLCAweDk0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTcsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweGU0LCAweDMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OGUsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhkYywgMHg4ZSwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQ2LCAweDhlLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTUsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTEsIDB4OGUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZSwgMHgyMCwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhlLCAweDAwLCAweDAyLAorCTB4ZjAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OGUsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg4ZSwgMHg2OCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU5LCAweDhlLCAweDgwLCAweDA4LCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDFmLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGViLCAweDhlLCAweGE4LCAweDEzLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg4ZiwgMHhhMiwgMHgwMiwKKwkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweGY5LCAweDhlLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY0LCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4ZiwgMHgyMiwgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA2LCAweDhmLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDhmLCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZiwgMHgyMiwgMHgwNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MWIsIDB4OGYsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4OGYsIDB4MGQsCisJMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGUsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZSwgMHgwMCwgMHgwMiwKKwkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDhmLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDQ2LAorCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHg4ZiwgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGYsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJhLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYiwgMHg5NSwgMHgwMCwgMHgxMCwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4ZiwgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDhmLCAweDIyLCAweDQ5LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHgxOCwgMHg4YywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0YywKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDUyLCAweDhmLCAweDAwLCAweDAwLCAweDkyLCAweGIwLCAweDAwLCAweDAwLAorCTB4NDksIDB4OGYsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MWUsCisJMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDhmLCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHg1MiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4ZiwgMHg0MywgMHg0OCwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAwLCAweDFlLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NGUsIDB4OGYsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OGYsIDB4MjIsIDB4NDgsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4ZiwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YTIsIDB4NDEsCisJMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg4ZiwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHgyMiwgMHg1ZiwKKwkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YWEsIDB4OGEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4OGYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDY1LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDY1LCAweDhmLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGYsIDB4ODUsIDB4Y2EsCisJMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDcyLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OGYsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZiwgMHg5MCwgMHg0YywKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2EsIDB4OGYsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg4MSwgMHg4ZiwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDgyLCAweDhmLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDQwLCAweDAwLCAweDA4LCAweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGYsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGYsIDB4NDMsIDB4NDgsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDlhLCAweDhmLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDk1LCAweDhmLCAweDIyLCAweDQ4LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MWIsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgxYiwgMHg0NywKKwkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGYsIDB4YTAsIDB4NDMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4ZiwgMHhhMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NCwKKwkweDgzLCAweDcwLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MWYsIDB4ZjAsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDhhLCAweDIzLCAweDQxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGFhLCAweDhhLCAweDAwLCAweDQ3LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZWUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4ZSwgMHhhMiwgMHg0MCwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGI4LCAweDhmLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4N2UsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjcsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLAorCTB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTQsIDB4MDAsIDB4NGEsCisJMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhmLCAweGEyLCAweDUwLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4ZiwgMHhhMCwgMHg0MywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGRlLCAweDhmLCAweDIyLCAweDQ3LAorCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4ZiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDcsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OGYsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwKKwkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweGRjLCAweDhmLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYSwgMHg4YSwgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OGYsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4ZiwgMHhhMywgMHg0MCwKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OGYsIDB4MjAsIDB4NGMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDAwLCAweDIwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGY1LCAweDk3LCAweDAwLCAweDQ2LCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MTMsIDB4OTAsIDB4OTAsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQxLAorCTB4ZTUsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMywgMHg5MCwgMHg4MCwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwgMHgzMCwgMHg5MCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQyLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHg5MCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKKwkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg5MCwgMHhhMCwgMHgxNCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDUwLCAweDkwLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5MCwgMHhhNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5MCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDViLCAweDkwLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDVhLCAweDkwLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTAsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKKwkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5MCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDkwLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTAsIDB4MjQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDkwLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAorCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDc2LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5MCwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwKKwkweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5MCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDkwLCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgxYiwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDg3LCAweDkwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDIyLCAweDRhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGUsIDB4MjIsIDB4MDYsCisJMHg5MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsIDB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MCwgMHhhMCwgMHg0MywKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTQsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg5MCwgMHg0MiwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDhlLCAweDFhLCAweDVkLAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4MTAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmIsIDB4ZmIsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTAsIDB4YTAsIDB4NDMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNlLCAweDk0LCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4OTAsIDB4NDIsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhhMywgMHg4ZiwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWQsIDB4OGYsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDkwLCAweDQ3LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTAsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2YiwgMHg4NCwgMHgxZiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg5MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5MCwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDQ2LCAweDk3LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTAsIDB4MDAsIDB4NTAsCisJMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRhLCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhlNiwgMHg5MCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGVmLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGY1LCAweDkwLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4OTAsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg5MCwgMHgyMiwgMHhmMywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0MiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDIsCisJMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MCwKKwkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA2LCAweDkxLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDExLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTgsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFkLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTEsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgzZCwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDkxLCAweDAwLCAweDQyLCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODcsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4M2IsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDM4LCAweDkxLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MywgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5MSwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGIsIDB4OTEsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDBiLAorCTB4OTksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4NTAsIDB4OTksIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHg2MiwgMHgwMSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweGYwLCAweDIyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZiwgMHg0MSwgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTEsIDB4MjMsIDB4MGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDZkLCAweDkxLCAweDI2LCAweDExLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDJmLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZjQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlNCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLCAweDc5LCAweDkxLCAweDIyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDdhLCAweDkxLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjMsIDB4MDAsIDB4YTYsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDgyLCAweDkxLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2IsIDB4OTEsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDkxLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiMiwgMHg5MSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc0LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OTEsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5MSwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjEsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YmIsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YzAsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDBhLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MSwgMHgwMywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDkxLCAweDAwLCAweDQxLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGUxLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTEsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGZiLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4OTIsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDkyLCAweDIwLCAweDAxLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTIsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJmLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4OGUsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGRjLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQ4LAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjcsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4OTIsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4ODcsIDB4NDIsCisJMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweGU3LCAweDkxLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgyMiwgMHgwMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM4LCAweDkyLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweGYyLAorCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4OTIsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTIsIDB4YTIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTIsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDRjLCAweDkyLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg5MiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0ZCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTIsIDB4MjIsIDB4NDIsIDB4OTYsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDkyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkyLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg5MiwgMHg0NywgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDZhLCAweDkyLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MWYsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweGUxLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OTIsIDB4NDcsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OTIsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDdjLCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDk2LCAweDkyLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDk2LCAweDAwLCAweDVmLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5MiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTIsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5MiwgMHgzMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDgxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk5LCAweDAwLCAweDVmLCAweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDU1LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHg5MiwgMHg0MywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKKwkweDMxLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHg0MSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTIsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5MiwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGEsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNjLCAweDkyLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5MiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5MiwgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDc0LCAweDk2LCAweDAwLCAweGYyLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg5NywgMHgwMCwgMHg0OCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5NiwgMHgwMCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDkyLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTgsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQ1LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA3LCAweDg0LCAweDk0LCAweDAxLCAweDAwLAorCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQxLCAweGU3LCAweDQxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MGEsCisJMHgyYywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAxLCAweDkzLCAweDI2LCAweDQ3LAorCTB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg5MywgMHgyMywgMHg0YiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwKKwkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDk4LCAweDAwLCAweDRiLCAweDA0LCAweDUwLCAweDAxLCAweDAwLCAweDAyLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5MywgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5MywgMHg4NCwgMHg0OCwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTMsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MTYsIDB4OTMsIDB4MjIsIDB4MDYsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4OTcsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTMsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5MiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxYywgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTMsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgzNCwgMHg5MywgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDkzLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsCisJMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5MywgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5MywgMHgyMCwgMHgxNiwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTMsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDViLCAweDkzLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDVjLCAweDkzLCAweDAwLCAweDBhLAorCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzMsIDB4OTMsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg5MywgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDkzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDk1LCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDkzLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDg1LCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHg5MywgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDkzLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTMsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGE0LCAweDkzLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTMsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTMsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MywgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHg5ZCwgMHg5MywgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MywgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTMsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiMSwgMHg5MywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFjLCAweDkzLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHg5MywgMHgyMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDkxLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTMsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5MywgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTMsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg5MywgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTMsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQzLCAweDkzLCAweDIyLCAweDQwLAorCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg5MywgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHg5MywgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHg5MywgMHgwMCwgMHg1ZSwKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGRlLCAweDkzLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MywgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGVhLCAweDkzLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDkzLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHg5MywgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4OTQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDk0LCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweDBkLCAweDk0LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDEwLCAweDk0LCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmIsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTQsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MjcsIDB4OTQsIDB4MjYsIDB4NDcsCisJMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDk0LCAweDIzLCAweDRiLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDRiLAorCTB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzMsIDB4OTgsIDB4MDAsIDB4NGIsIDB4MDQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDk0LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwKKwkweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzQsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5NCwgMHgyMiwgMHgwNiwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDI0LCAweDk3LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MWIsIDB4OTQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHg5NCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDRiLCAweDk0LCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDU5LCAweDk0LCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUxLCAweDk0LCAweGEyLCAweDE2LAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTUsIDB4OTQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLAorCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5MywgMHhhMiwgMHgxNiwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NSwgMHgwMCwgMHg0YSwgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDkzLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjMsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDE1LCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5NCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQ1LAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3MywgMHg5NCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc3LCAweDk0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg5LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHg5NiwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTQsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5NCwgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NSwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4OWMsIDB4OTQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDk1LCAweDk0LCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTksIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDg3LCAweDkxLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweGIzLCAweDk0LCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk0LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4OTQsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0YywgMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDM0LCAweGMzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDExLAorCTB4MTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5NCwgMHgwMCwgMHg1MCwgMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNhLCAweDk0LCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ZTUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGM2LCAweDk0LCAweDAwLCAweDUwLAorCTB4NDMsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4OTUsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhlMSwgMHg5NCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGUzLCAweDk0LCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDcsCisJMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmOCwgMHg5NCwgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NSwgMHhhMiwgMHg0YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4ZmIsIDB4OTQsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5NCwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGYzLCAweDk0LCAweDIyLCAweGYwLAorCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4OTUsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTQsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDk0LCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MjMsIDB4ZjAsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNSwgMHg5NSwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRhLCAweDk1LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDRhLCAweDk1LCAweGEyLCAweDQxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDRhLCAweDk1LCAweDFmLCAweDEyLCAweDg0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NGEsIDB4OTUsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDk1LCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg5NSwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHg5NSwgMHgwMywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NSwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDE1LCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDk1LCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDFlLCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg5NSwgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NSwgMHhhMiwgMHhmMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJiLCAweDk1LCAweGEwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTUsIDB4YTIsIDB4ZjAsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDk1LCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5NSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5NSwgMHgyMCwgMHg5MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDJiLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDk1LCAweDIyLCAweDBhLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDcsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRkLCAweDk1LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDAwLCAweDQxLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZCwgMHg5NSwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgwMCwgMHg0YywKKwkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTUsIDB4YTIsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwKKwkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4MjIsIDB4NWEsCisJMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDk1LCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg5NSwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDk1LCAweGEyLCAweDRiLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHgwNywKKwkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmIsIDB4OTUsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NSwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc3LCAweDk1LCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDg1LCAweDk1LCAweDEzLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLAorCTB4ODIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHg5NSwgMHg0NCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGMyLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTUsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg5NSwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg5NSwgMHgyMiwgMHgxMiwKKwkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDUxLCAweDk4LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDk1LCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTEsIDB4OTUsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDBiLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTUsIDB4MjIsIDB4NTAsCisJMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDUxLCAweDk3LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweGQxLCAweDk5LCAweDAwLCAweDEyLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLCAweDEwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NSwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDk1LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDkxLCAweDk1LCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTcsIDB4MDAsIDB4ZjIsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIzLCAweDk1LCAweGE4LCAweDA1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4YmMsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTUsIDB4MDAsIDB4NDIsCisJMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDk1LCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAorCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHgyOCwgMHhiMSwKKwkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweGMwLCAweDk1LCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2IsIDB4OTUsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhjNywgMHg5NSwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LCAweDExLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGNkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTUsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkNywgMHg5NSwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDk1LCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLCAweGQ3LCAweDk1LCAweDIyLCAweDRjLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NSwgMHhhOCwgMHhiMSwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkyLCAweDQ5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGU4LCAweDk1LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGYxLCAweDk1LCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGY2LCAweDk1LCAweDgzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxMSwgMHgxMCwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDQzLCAweGMxLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg5NiwgMHgyMiwgMHg0MCwgMHhmNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweGU1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5NiwgMHgyMiwgMHgxMSwgMHgxZSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk2LCAweGEwLCAweGYwLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4YTAsIDB4ZjQsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUyLCAweDQzLCAweGQxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4OTYsIDB4MzAsIDB4NDcsCisJMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTQsIDB4OTYsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5NiwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MzEsIDB4OTYsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTYsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDk2LCAweGEyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDRhLCAweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgzNSwgMHg5NiwgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQxLCAweDk2LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4M2QsIDB4OTYsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5NiwgMHgzMSwgMHg1ZiwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTYsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDk2LCAweGEyLCAweDNiLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NiwgMHgxOCwgMHg0YSwKKwkweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTYsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDUxLCAweDk2LCAweDAwLCAweDA1LAorCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU5LCAweDk2LCAweDIyLCAweDQ1LAorCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHg5OSwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg5NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5NiwgMHhhMiwgMHgzYiwKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTksIDB4MDAsIDB4MTIsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYyLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDUxLCAweDk1LCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MSwgMHg5NiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5NiwgMHgwMCwgMHg1YywKKwkweDAxLCAweDgwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKKwkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDhkLCAweDk2LCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDk2LCAweDI2LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhhYywgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHhhMiwgMHg0MSwKKwkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5NiwgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5YSwgMHg5NiwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDVjLAorCTB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJiLCAweDk2LCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDk2LCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGNlLCAweDk2LCAweGEyLCAweGE1LAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg5NiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDk2LCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4ODAsIDB4MDAsCisJMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGY2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5NiwgMHg5ZiwgMHg0MSwKKwkweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGNjLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4YTAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5NywgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDk3LCAweDAwLCAweDQxLAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDUsIDB4OTcsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTcsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4OTcsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg5NywgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAorCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTcsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NywgMHhhMiwgMHg4YSwKKwkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFlLCAweDk3LCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKKwkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NywgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5NywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NywgMHg0NSwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTcsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDIsIDB4OTcsIDB4NDUsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5NywgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHg0NiwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGUsIDB4OTcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDk3LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDVhLCAweDk3LCAweDIyLCAweGYzLAorCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDZhLCAweDk3LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDk3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg5NywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MywKKwkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmMsIDB4OTcsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTcsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDk3LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NywgMHgyNiwgMHg0NywgMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDc0LCAweDk3LCAweDIzLCAweDRiLCAweDA0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDk3LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDllLCAweDk3LCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTcsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg5NywgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg5NywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODIsIDB4OTcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDk3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHg5NywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgxNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTcsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDhmLCAweDk3LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5NywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDJmLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg1YywgMHg5NywgMHgyMCwgMHgxNSwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlhLCAweDk3LCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4OTcsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg5NywgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NywgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGRhLCAweDk0LCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQxLAorCTB4YTMsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTcsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDk4LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk3LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLAorCTB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NywgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGU0LCAweDk3LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDAsIDB4OTcsIDB4YTIsIDB4MDYsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTcsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOCwgMHg5NywgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg0OCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGQwLCAweDk3LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTcsIDB4YTAsIDB4NDgsCisJMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLAorCTB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NywgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGRmLCAweDk3LCAweDY0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZiwgMHg5NywgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsCisJMHgzMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJkLCAweDQ2LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5OCwgMHgwMCwgMHgzMCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGYyLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YSwgMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweGY2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDk4LCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwKKwkweDgyLCAweGM4LCAweDAxLCAweDAwLCAweDBlLCAweDk4LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsCisJMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDk4LCAweDQyLCAweDMwLCAweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MTgsIDB4OTgsIDB4MjYsIDB4MzAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTgsIDB4OTAsIDB4NGMsCisJMHg5MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDgwLCAweDQ5LCAweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg5OCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDI5LCAweDk4LCAweGEyLCAweDQwLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDk3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjksIDB4OTgsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDk4LCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLAorCTB4MTksIDB4N2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLAorCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDQxLCAweDk4LCAweDIwLCAweDRjLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg5OCwgMHgyMCwgMHhmMiwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsCisJMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5OCwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTgsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZjMsIDB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsCisJMHg4MiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OCwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAorCTB4ODIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg5OCwgMHgwMCwgMHgxMiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4NGIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDUwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg1NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NWIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDYwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg2NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NmIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDcwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg3NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4N2EsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDcyLCAweDk4LCAweDQzLCAweDU3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweGEyLCAweDU3LAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc2LCAweDk4LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAorCTB4N2IsIDB4OTgsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5OCwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJlLAorCTB4ODMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweDIyLCAweDU3LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWIsIDB4MjAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDliLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGE4LCAweDAwLCAweDJkLCAweDFjLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAorCTB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLAorCTB4OTcsIDB4OTgsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5OCwgMHgwMCwgMHgxNCwgMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwKKwkweDljLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDljLCAweDk4LCAweDIyLCAweGYyLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5YywgMHg5OCwgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk4LCAweDIzLCAweGYwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgyMCwgMHg1MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNSwgMHg5OCwgMHhhMywgMHg5MiwKKwkweDg3LCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDk4LCAweDAwLCAweDQ0LCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGEsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDksCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwOCwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDA3LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA3LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDcsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDA1LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA1LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5OCwgMHgwMCwgMHg0NCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBmLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGQsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBjLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBjLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweGNiLCAweDk4LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5OCwgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDljLCAweDAwLCAweDIwLCAweDQyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4OTgsIDB4MjMsIDB4NDEsCisJMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDg5LCAweDBjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwgMHhkZiwgMHg5OCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQyLCAweDM4LCAweGVjLCAweDAwLCAweDAwLAorCTB4ZGYsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OCwgMHhhMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwKKwkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweGU1LCAweDk4LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg5OCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OTgsIDB4MDAsIDB4NDEsIDB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjgsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwgMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweGEwLCAweDFmLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4OTksIDB4YTMsIDB4NWYsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDk5LCAweDIyLCAweGYyLCAweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLAorCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDA5LCAweDk5LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGEsIDB4OTksIDB4YTIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5OSwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsIDB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTksIDB4MWYsIDB4NDQsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5OSwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE4LCAweDk5LCAweDYyLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLAorCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsIDB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5OSwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLCAweDJlLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDk5LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweGYyLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTksIDB4YTAsIDB4ZjIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLCAweDg2LCAweGQwLCAweDAxLCAweDAwLAorCTB4MmUsIDB4OTksIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTksIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDk5LCAweDlmLCAweDQyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5OSwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHg5OSwgMHgwMCwgMHgwYSwKKwkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4OTksIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5OSwgMHgyMiwgMHg0MCwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTksIDB4YTAsIDB4NDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDQ4LCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5OSwgMHgyMiwgMHg0OSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5OSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDA4LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTksIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYSwgMHg5NywgMHgwMCwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDU4LCAweDk5LCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OTksIDB4MjgsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg5OSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGFhLCAweDk3LCAweDFiLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDk5LCAweDIyLCAweDVmLAorCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg1ZSwgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDk5LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAorCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4NjUsIDB4OTksIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmUsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiNiwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTksIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4N2MsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODYsIDB4OTksIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTksIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDM5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDNmLCAweGIzLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKKwkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKKwkweGE3LCAweDk5LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGE3LCAweDk5LCAweGEyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OTksIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKKwkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAorCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmIsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDk5LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5OSwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5OSwgMHg4NSwgMHg0MSwKKwkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisJMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg5YywgMHg0YiwgMHg4MiwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk5LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4YTYsIDB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg5OSwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKKwkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGMyLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NGIsCisJMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDgwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2EsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRmLCAweDk5LCAweDgwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4OTksIDB4MDAsIDB4YTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OSwgMHg4MCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAxLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDRmLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg5OSwgMHgyMCwgMHg0YiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDQ3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHgwMCwgMHg0MSwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg5OSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweGYxLCAweDk5LCAweGEyLCAweGE1LCAweDgwLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5OSwgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTksIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGZhLCAweDk5LCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OTksIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2OCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDIsIDB4YTIsIDB4ZjgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjIsIDB4ZjAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5YSwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDI0LCAweDlhLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OWEsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDlhLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDMzLCAweDlhLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDI5LCAweDlhLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OWEsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyOSwgMHg5YSwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDJkLCAweDlhLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4MjksIDB4OWEsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDlhLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OWYsIDB4NDEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4OWYsIDB4MjIsIDB4NDAsCisJMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgxOSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE5LCAweDQxLCAweDdiLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAorCTB4YzQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHhhMiwgMHhjOCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDlmLCAweDAwLCAweDRkLCAweDlhLCAweGNjLCAweDAxLCAweDAwLAorCTB4YzIsIDB4OWYsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHg5ZiwgMHhhMiwgMHg0MSwgMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDlmLCAweDgwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg5ZiwgMHgwMCwgMHg0MiwgMHhjZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4YzksIDB4OWYsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHg0ZCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLAorCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwKKwkweDQwLCAweGIxLCAweDAxLCAweDAwLCAweGQ5LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OWEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE1YTRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2JyY3Z1Y29kZS5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjE1IgorCitzdGF0aWMgdTMyIEdCUmN2VUNvZGVMZW4gPSA1MTI7CisKK3N0YXRpYyB1OCBHQlJjdlVDb2RlWzI1NjBdID0KK3sKKzB4NDcsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MDQsIDB4YTAsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjcsIDB4NWIsIDB4MDksCisweDMwLCAweDAwLCAweGI2LCAweDVmLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDNiLAorMHg3OCwgMHgzYSwgMHgwMCwgMHgxYywgMHhhMiwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHgwMSwgMHg3MCwKKzB4MTgsIDB4YjMsIDB4N2IsIDB4YTksIDB4YWEsIDB4MWUsIDB4YjQsIDB4N2IsIDB4MDEsIDB4MGMsIDB4MWMsIDB4YjUsIDB4N2IsCisweDFkLCAweDA2LCAweDFjLCAweDAwLCAweDAwLCAweDQwLCAweDY0LCAweDA4LCAweDBjLCAweDMxLCAweDU2LCAweDcwLCAweDA0LAorMHgwYywgMHgzMSwgMHg1NiwgMHg4MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0YSwgMHg5MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0NiwKKzB4YTAsIDB4MDAsIDB4MDksIDB4MjUsIDB4NTEsIDB4YzAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGUsIDB4YjAsIDB4MDAsIDB4ZTksCisweDI0LCAweDUxLCAweGMwLCAweDA0LCAweGNjLCAweGIzLCAweDAwLCAweDFjLCAweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLAorMHgxYywgMHgwNiwgMHg1NiwgMHg0MiwgMHhkNCwgMHgwOCwgMHgwNywgMHg5ZCwgMHgwMCwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywKKzB4MDIsIDB4MDAsIDB4MTAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4MDYsIDB4NTYsIDB4NWEsIDB4YzAsIDB4MDQsCisweGEwLCAweDMwLCAweDZjLCAweDAzLCAweDAwLCAweGFjLCAweDMwLCAweDZkLCAweDAzLCAweDAwLCAweGNkLCAweDAzLCAweDNhLAorMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxYywgMHg2MCwgMHg4ZSwgMHg0MSwgMHg1NCwgMHgwOSwgMHgyOSwKKzB4MjUsIDB4NmQsIDB4MDMsIDB4MDAsIDB4ODAsIDB4OGUsIDB4NDEsIDB4NTQsIDB4MDksIDB4OGMsIDB4MzAsIDB4OGQsIDB4MDAsCisweDA0LCAweDQ3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLAorMHg2MCwgMHgwMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2MSwgMHhjMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2ZCwgMHgwMywgMHgwMCwKKzB4NmMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NGQsIDB4MzQsIDB4MDIsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsCisweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGM4LCAweDgzLCAweDM3LCAweDAwLCAweDFjLCAweDgwLAorMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MCwgMHg1NCwKKzB4MDksIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4N2IsIDB4ZmIsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDBkLCAweDAwLCAweDFjLCAweGI0LCAweDdiLCAweGZkLCAweDAzLCAweDFjLCAweDgwLCAweDBlLCAweDQwLCAweDU0LCAweDA5LAorMHhlMCwgMHhmYiwgMHgwNSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMywgMHgwMCwgMHhiMywgMHgwZiwgMHg0MSwKKzB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4ZTgsIDB4NzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4MDQsIDB4MDAsCisweDAwLCAweGEwLCAweDkzLCAweDAwLCAweDYxLCAweDc2LCAweGExLCAweGMzLCAweDA0LCAweGMwLCAweDhkLCAweDQxLCAweDU0LAorMHgwOSwgMHhlMCwgMHg3YiwgMHgwMCwgMHhjMCwgMHgxZiwgMHhhMCwgMHhmZCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhjYywgMHgzMywKKzB4MDUsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4MDMsIDB4MDAsIDB4M2MsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4MWIsIDB4MDAsIDB4MWMsCisweGMwLCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDc0LCAweDEzLCAweDA0LCAweDhlLCAweDhlLCAweDQyLAorMHg1NCwgMHgwOSwgMHg1YiwgMHg4MCwgMHg3NiwgMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwKKzB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsCisweDA5LCAweGMwLCAweDAzLCAweGZjLCAweDdmLCAweDFjLCAweGEwLCAweDAxLCAweDljLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorMHhhMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhjMCwgMHgwMywgMHhmYywgMHgwMywgMHgxYywKKzB4ZjUsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4ZjYsIDB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsCisweDU0LCAweDA5LCAweGIzLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweGEwLAorMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwNiwgMHgwMiwgMHgwMCwgMHgxYywgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4YWYsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsCisweDQyLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDFjLAorMHhhMCwgMHgzZCwgMHhhNiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxMSwgMHgwNCwgMHhkNCwgMHhkMywgMHg1MiwKKzB4MDAsIDB4MWMsIDB4YjUsIDB4M2UsIDB4YWUsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ZmIsIDB4ZmQsIDB4ZmYsIDB4MWYsIDB4ODAsCisweDJjLCAweDg0LCAweDAzLCAweDAwLCAweGI5LCAweDNhLCAweDlhLCAweDAxLCAweDAwLCAweDc1LCAweDNiLCAweDAyLCAweDAwLAorMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxMCwgMHhkYiwgMHg4MywgMHgxNiwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwKKzB4MWQsIDB4YzEsIDB4MDQsIDB4YjksIDB4M2IsIDB4ODksIDB4YzEsIDB4MDQsIDB4OGIsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsCisweDZiLCAweDJjLCAweDMxLCAweGMxLCAweDA0LCAweDAwLCAweDAwLCAweDc0LCAweDExLCAweDAwLCAweGNiLCAweDJjLCAweDc1LAorMHhjMSwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg1NCwKKzB4ZDAsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NDksIDB4MjUsIDB4YWQsIDB4MDEsIDB4MDAsIDB4YWIsIDB4MmMsIDB4N2QsIDB4YzEsCisweDA0LCAweGE3LCAweDFkLCAweDZkLCAweDAzLCAweDAwLCAweGNjLCAweDMzLCAweDA5LCAweDAwLCAweDFjLCAweGViLCAweDJkLAorMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwKKzB4YWUsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4ZDQsIDB4MDcsIDB4ZmMsCisweDAzLCAweDFjLCAweDk5LCAweDNhLCAweDAyLCAweDAwLCAweDFjLCAweGJiLCAweDM4LCAweDAyLCAweDAwLCAweDFjLCAweDAwLAorMHgzOCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMSwgMHgwNCwgMHhkYiwgMHgzYiwgMHg3ZSwgMHgwMCwKKzB4MWMsIDB4YzcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4MGEsIDB4MDYsIDB4MWMsIDB4MjcsIDB4MWQsCisweDAxLCAweDAwLCAweDFjLCAweGIzLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LAorMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwKKzB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4YTAsCisweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDA2LCAweDAyLCAweDAwLCAweDFjLCAweDUzLCAweDBmLCAweDQyLCAweDU0LAorMHgwOSwgMHhhZiwgMHgwMywgMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwKKzB4NDIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksCisweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLAorMHg1NCwgMHgwOSwgMHgwMCwgMHgzZCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg1NCwgMHgxMiwgMHgwMCwgMHhjYiwKKzB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsCisweDEwLCAweGE2LCAweDdiLCAweGYxLCAweDA1LCAweDFjLCAweDAwLCAweDAwLCAweDg4LCAweGMyLCAweDA0LCAweGE2LCAweDdiLAorMHhmMSwgMHgwNSwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwNCwgMHhjYiwgMHgyZiwgMHgwNSwgMHgwMCwgMHgxYywKKzB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWMsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4NTMsIDB4MGYsIDB4NDIsCisweDU0LCAweDA5LCAweGMwLCAweDgzLCAweGYxLCAweDMyLCAweDFjLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDA0LCAweDQ2LAorMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHhjMCwgMHg4MywgMHhmMSwgMHgzMiwKKzB4MWMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDQsIDB4NDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsCisweGEwLCAweDAyLCAweDA0LCAweDQ2LCAweDdhLCAweGRhLCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LAorMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwKKzB4NTQsIDB4MDksIDB4YjMsIDB4N2IsIDB4MDEsIDB4YzAsIDB4MWYsIDB4NzQsIDB4MGUsIDB4NDAsIDB4NTQsIDB4MDksIDB4YzAsCisweDAzLCAweDljLCAweDAwLCAweDFjLCAweDgwLCAweDAwLCAweGYwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAyLAorMHgwNCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywKKzB4MmIsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4ODAsIDB4NzYsIDB4OTUsIDB4MTMsIDB4MDQsCisweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweGE2LCAweDdiLCAweGE5LCAweDAzLCAweDEwLCAweGM3LCAweDljLCAweDAwLAorMHgwMCwgMHgxYywgMHg4MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4YWIsIDB4MmQsIDB4ZjEsIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4Y2QsIDB4YzIsCisweDA0LCAweDhiLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweDY5LCAweDI1LCAweDAxLCAweDAwLCAweDFjLCAweGE2LCAweDdiLAorMHhhOSwgMHgwMywgMHgxMCwgMHhjYiwgMHgyZiwgMHgwOSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywKKzB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDAsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4NDYsIDB4N2EsIDB4ZGEsCisweDA1LCAweDFjLCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE1LCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHgyOCwgMHgwMywgMHgwNCwgMHg0NiwgMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHhiNSwgMHgwZiwgMHg0MSwgMHg1NCwKKzB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4NzMsIDB4ZWMsIDB4NDIsIDB4MDMsIDB4MDQsIDB4NjAsIDB4MmMsCisweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweGM3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLAorMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHhkNywgMHgyMiwKKzB4MDAsIDB4MWMsIDB4NzUsIDB4NTYsIDB4OTYsIDB4MTMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTcsCisweDFjLCAweDVkLCAweDAzLCAweDA0LCAweGU3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweGE5LCAweDAzLAorMHgxMCwgMHg4MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwKKzB4NmMsIDB4YzMsIDB4MDQsIDB4YjksIDB4N2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsIDB4MDQsCisweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDAxLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLAorMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwKKzB4MmYsIDB4MGQsIDB4MDQsIDB4MWMsIDB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsCisweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDFkLCAweDAwLCAweDAwLAorMHhhMCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywKKzB4YzAsIDB4MWQsIDB4ZjAsIDB4ZDMsIDB4MDgsIDB4MjcsIDB4OWQsIDB4ZjgsIDB4MDMsIDB4MDAsIDB4YTAsIDB4ZWUsIDB4NTYsCisweGQ0LCAweDAwLCAweGZiLCAweDc1LCAweDE5LCAweDE0LCAweDA0LCAweDIwLCAweDdiLCAweDA2LCAweDAwLCAweDFjLCAweGMwLAorMHgxYywgMHgyYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHhkMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhmNCwKKzB4MDAsIDB4YzAsIDB4ZWYsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4MjAsIDB4MjUsIDB4NmMsIDB4MTQsIDB4MDQsIDB4NjAsIDB4YjcsCisweGU2LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDE1LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLAorMHhjYywgMHgzMywgMHgwNSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhjNSwgMHgwNCwgMHg2MCwgMHhiNywgMHgxZSwKKzB4MDUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzQsIDB4MDQsIDB4YzAsCisweDFkLCAweGFjLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGM0LCAweDA0LCAweDA3LCAweDlkLCAweDAwLCAweDAwLAorMHgxYywgMHgxYiwgMHg3NCwgMHgwZCwgMHhmNCwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhlMCwgMHg3YiwKKzB4MDAsIDB4ZmMsIDB4MWYsIDB4MzksIDB4N2YsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4YjEsIDB4YzMsIDB4MDQsCisweGE2LCAweDdiLCAweGMxLCAweDAzLCAweDFjLCAweDAwLCAweDAwLCAweDc4LCAweGM0LCAweDA0LCAweGUwLCAweDFjLCAweDAwLAorMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhiOCwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwKKzB4MmYsIDB4MDEsIDB4MTAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDMsCisweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDE4LCAweDFkLCAweGM3LCAweDlmLAorMHgwMCwgMHgwYiwgMHgxYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywKKzB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsCisweDAyLCAweDFjLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweGEwLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGEwLAorMHhlZSwgMHhiNiwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwOSwgMHgwNCwKKzB4MWMsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4Y2MsIDB4YjMsCisweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGM1LCAweDA0LAorMHgwMCwgMHgwMCwgMHg4OCwgMHgzNCwgMHgwNSwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxNSwKKzB4MDIsIDB4MWMsIDB4NDcsIDB4OWQsIDB4NjQsIDB4YzQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODgsIDB4NDQsIDB4MDAsIDB4ODAsCisweDFkLCAweDhjLCAweDU0LCAweDA0LCAweDg3LCAweDFkLCAweDlkLCAweDA0LCAweDAwLCAweGNlLCAweDc2LCAweDAxLCAweDAwLAorMHgxYywgMHhlZiwgMHg3NiwgMHhhZCwgMHhjNCwgMHgwNCwgMHhhNCwgMHg3NywgMHg5ZCwgMHgyNCwgMHgwOSwgMHhlNCwgMHg3NiwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4YzQsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NTQsIDB4MDQsCisweGQ3LCAweDc2LCAweDAxLCAweDUwLCAweDE4LCAweGY2LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLAorMHgzMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhjYywgMHgzMCwgMHg1MSwgMHhjNSwgMHgwNCwgMHhlYiwKKzB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzAsIDB4NTksIDB4MDEsIDB4MDAsCisweDFjLCAweGY1LCAweDc3LCAweDM5LCAweGM1LCAweDA0LCAweGUwLCAweDMwLCAweGVjLCAweDA0LCAweDAwLCAweDAwLCAweDRjLAorMHhjMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0YywgMHgwNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHgwMCwKKzB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDksIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsCisweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDE5LCAweDAyLCAweDFjLCAweGViLAorMHgyZCwgMHhjNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwZCwgMHgwMiwKKzB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDExLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGM1LCAweGM0LCAweDA0LCAweDAwLCAweDdiLCAweDAwLCAweDgwLCAweDFjLAorMHhhZSwgMHg3NywgMHg1MSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhkMywgMHg4YiwgMHgwMCwKKzB4ZmMsIDB4MWYsIDB4NjAsIDB4N2EsIDB4M2MsIDB4MDAsIDB4MWMsIDB4NjAsIDB4NGMsIDB4ZDAsIDB4MDQsIDB4MDAsIDB4YzAsCisweDJmLCAweDIwLCAweDA1LCAweDFmLCAweGUwLCAweDMwLCAweGMwLCAweDA0LCAweDAwLCAweDgwLCAweDI1LCAweGMwLCAweDA0LAorMHgwMCwgMHhiNSwgMHg1YiwgMHhjMSwgMHgwNCwgMHgwNCwgMHg2OSwgMHgyNiwgMHgwMSwgMHgwMCwgMHgxYywgMHg2YSwgMHgyYiwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTksIDB4MjUsIDB4NTEsIDB4MDUsIDB4MDAsCisweGVlLCAweDMwLCAweDAwLCAweDAwLCAweDFjLCAweGFmLCAweDc3LCAweDExLCAweDA1LCAweDAwLCAweGI0LCAweDVmLCAweDAxLAorMHg0MCwgMHgxOCwgMHgwNywgMHg5ZCwgMHg1NCwgMHg1NSwgMHgwNCwgMHhiNywgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NiwKKzB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4MzMsIDB4MDEsIDB4NjAsCisweDE4LCAweGE0LCAweDJmLCAweDAxLCAweDYwLCAweDE4LCAweDY0LCAweDc3LCAweDAxLCAweDYwLCAweDE4LCAweDI0LCAweDc3LAorMHgwMSwgMHg2MCwgMHgxOCwgMHg0NCwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHg2NCwgMHg4OCwgMHgwMywgMHgwMCwgMHgxYywKKzB4YTQsIDB4M2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTMsIDB4NzcsIDB4MDEsCisweDAwLCAweDFjLCAweGQzLCAweGNmLCAweDNiLCAweDAwLCAweDFjLCAweDUzLCAweDRmLCAweDAyLCAweDAwLCAweDFjLCAweGQzLAorMHhjZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHhkYSwgMHhjZiwgMHgwYiwgMHgwMCwgMHgxYywgMHhkNSwgMHg1NywgMHgwZiwgMHgwMCwKKzB4MWMsIDB4ZDMsIDB4ZDMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4NTMsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZTAsIDB4MjksCisweDAwLCAweDAwLCAweDFjLCAweGY1LCAweGQ1LCAweGMwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDU1LCAweDA0LAorMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4ZjUsIDB4NTUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweGM0LCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLCAweDAwLCAweDFjLCAweDU2LCAweDUzLCAweDAxLCAweDAwLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhjYiwgMHgyZiwKKzB4MDEsIDB4MTgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsCisweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDIwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLAorMHgwMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyOCwgMHgxMCwgMHg4OSwgMHgyNSwgMHg2ZCwgMHhjMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsCisweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMyLCAweDA0LCAweDAwLCAweDAwLAorMHgwNCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwKKzB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4NDAsIDB4MWMsIDB4NjgsIDB4YzAsIDB4MDQsIDB4NDAsIDB4MWMsIDB4OTgsCisweGMwLCAweDA0LCAweGE3LCAweDc3LCAweDZkLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGMwLCAweGMwLCAweDA0LCAweDI3LAorMHgxZCwgMHhlZCwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywKKzB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTllMDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oCkBAIC0wLDAgKzEsNjg1MCBAQAorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMToyMiIKKyNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPQoreworCTB4MDAwMDQwMDAsIDB4MDAwMTAwMDAsCit9OworCitzdGF0aWMgdTMyIE9TZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Cit7CisJeworCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAorCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAorCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCisJMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKKwkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCisJMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKKwkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAorCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCisJMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAorCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKKwkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCisJMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAorCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAorCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAorCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAorCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKKwkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAorCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAorCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAorCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAorCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCisJMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAorCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKKwkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKKwkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAorCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCisJMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKKwkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAorCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCisJMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKKwkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKKwkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCisJMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAorCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAorCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKKwkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCisJMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKKwkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJfSwKKwl7CisJMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCisJMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDA1LCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDk5LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDJmLCAweDgxLCAweDAxLCAweDAwLAorCTB4YTIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKKwkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAorCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg5MSwgMHg2ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MCwgMHhhMiwgMHg0MiwKKwkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAorCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGQzLCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCisJMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4MDAsIDB4MjAsCisJMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAorCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUyLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCisJMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAorCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4MiwgMHgxZSwgMHhjNiwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweDIyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZjIsIDB4ODAsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4MjIsIDB4NDgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGYyLCAweDgwLCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4YzYsIDB4OGYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHgxZSwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywKKwkweDgxLCAweGYwLCAweDAxLCAweDAwLCAweGY2LCAweDgwLCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4NDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MiwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDc1LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDgxLCAweDAwLCAweDRkLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MSwgMHgwMCwgMHg0YywKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDAzLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDliLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4OWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDlmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDlmLCAweDgxLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg4MiwgMHgwMCwgMHhiYiwgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MiwgMHgwMCwgMHhjYSwKKwkweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1ZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAorCTB4NGMsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDRkLCAweGIzLCAweDAwLCAweDAwLCAweDcwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MSwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4MSwgMHgyMiwgMHg0MSwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDJhLCAweDgxLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmMsIDB4ODEsIDB4MWYsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQxLAorCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDJmLCAweDljLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAorCTB4MzksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmYsIDB4OTksIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHgzMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDgwLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4NjMsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYwLCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTIsIDB4NDAsCisJMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4MSwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDIyLCAweDVjLCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDE3LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDYwLCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQxLCAweDc2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgzLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDY1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg2MCwgMHg0MCwgMHg5NSwgMHg4MywgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ODUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHhhMiwgMHg0ZSwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4MSwgMHgzNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg4MSwgMHgyMiwgMHg0MSwgMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwKKwkweDk1LCAweGNiLCAweDAxLCAweDAwLCAweDY4LCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODEsIDB4YTIsIDB4NDIsCisJMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDc3LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwgMHg2OSwgMHg5NywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjAsIDB4NDMsCisJMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg4MCwgMHhjYSwgMHg2NywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDIyLCAweDQwLCAweDY1LCAweDZmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQ4LAorCTB4ZGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAorCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4MSwgMHgyMiwgMHg1YiwKKwkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4MSwgMHg5ZiwgMHg4NSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAorCTB4ZGQsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODEsIDB4YTIsIDB4NGYsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMyLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNkLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDIyLCAweDQzLAorCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhkNSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGVjLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGY2LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4ODIsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4MjIsIDB4NDQsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDRhLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4MiwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODIsIDB4MjIsIDB4NGUsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDgyLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4MiwgMHgyMiwgMHg0MywKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKKwkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDMzLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAorCTB4MzMsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDgyLCAweGEyLCAweDU0LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4MiwgMHhhMiwgMHgwNiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAorCTB4NzgsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MjIsIDB4NDgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MiwgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDg1LCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDg2LCAweDgyLCAweDIyLCAweDU0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwKKwkweDdlLCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMCwgMHg0MywKKwkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDgsCisJMHhkYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDU3LCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHhhMiwgMHg0MCwKKwkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4OGEsIDB4ODIsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4OWIsIDB4ODIsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDgyLCAweDU2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweGEyLCAweDQxLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MiwgMHg5MSwgMHg4MSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YTksIDB4ODIsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhYiwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDgyLCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDgyLCAweGEwLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDgyLCAweDAwLCAweDUwLAorCTB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4MiwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDFlLCAweGE0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLAorCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4Y2YsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMiwgMHg4MiwgMHhhMSwgMHhhZCwgMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweGFiLAorCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4YTIsIDB4NDAsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4MiwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OCwgMHgwMCwgMHg1ZiwKKwkweDFmLCAweGI0LCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweDVlLCAweDU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4N2QsIDB4ODgsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODIsIDB4MjIsIDB4NTQsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5MiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MiwgMHhhMiwgMHg1ZiwKKwkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGU3LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODIsIDB4MjIsIDB4NWMsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGU4LCAweDgyLCAweGE4LCAweGIxLAorCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweDM0LCAweDg1LCAweDE3LCAweDVmLCAweDFmLCAweGI0LCAweDAwLCAweDAwLAorCTB4ZmIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhlZiwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGY3LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAorCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDgzLCAweDAwLCAweDM0LCAweDEzLCAweDg0LCAweDAwLCAweDAwLAorCTB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgxZiwgMHhiNCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZiLCAweDgyLCAweDMzLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGUsIDB4NWEsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4YTIsIDB4NDgsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MywgMHgwMiwgMHhlNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA2LCAweDgzLCAweDgzLCAweGU1LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDhlLCAweDgyLCAweDAwLCAweDQyLAorCTB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4OWUsIDB4ODIsIDB4MDAsIDB4NDIsIDB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg4MywgMHgyMiwgMHg0NiwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MywgMHhhMiwgMHg0MSwKKwkweGYzLCAweDdmLCAweDAwLCAweDAwLCAweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODMsIDB4MjIsIDB4NDQsIDB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODMsIDB4YTIsIDB4NDEsCisJMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGFjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDExLCAweDgzLCAweDIyLCAweDVhLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwZSwgMHg4MywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwKKwkweDExLCAweGM5LCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLAorCTB4MTcsIDB4ODMsIDB4MjIsIDB4NDQsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODMsIDB4NDIsIDB4YTUsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MywgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDM4LCAweDgzLCAweDFhLCAweDQwLCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkZiwgMHg4NywgMHgyMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg4NywgMHgyMiwgMHg0MCwKKwkweDY1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MjIsIDB4NDgsCisJMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLAorCTB4MzMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4YzYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4ODMsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZSwgMHg1YSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsCisJMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MywgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDRkLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZCwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsCisJMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ODMsIDB4YTgsIDB4YTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MywgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDE3LCAweDgzLCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweDAwLCAweDZmLAorCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg4MywgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDVjLCAweDgzLCAweGE2LCAweDQyLAorCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4OTYsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4MDAsIDB4NTgsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgxNywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRhLCAweGMxLCAweDAwLCAweDE3LCAweDk2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MywgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY4LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDZkLCAweDgzLCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODMsIDB4MjIsIDB4NTUsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NzMsIDB4ODMsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKKwkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LAorCTB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3ZiwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg4MywgMHgyMiwgMHg0MSwKKwkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4N2IsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODMsIDB4YTIsIDB4ZjgsCisJMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg4MywgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdjLCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDhkLCAweDgzLCAweDIyLCAweDU4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MywgMHhhMiwgMHhmMywKKwkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLAorCTB4OGQsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4MywgMHg3NywgMHg0MSwKKwkweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDkzLCAweDgzLCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDkzLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQzLCAweDgzLCAweDc3LCAweDQxLAorCTB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MywgMHgyMiwgMHg0MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDliLCAweDgzLCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODMsIDB4MjIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGExLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDgzLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQ1LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4NTUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NiwgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGE5LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTAsCisJMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4Y2UsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsCisJMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDgzLCAweDIzLCAweGEyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDg0LCAweDAwLCAweDVjLAorCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg4MywgMHgyMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDgzLCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHg3MiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAorCTB4ZjUsIDB4ODMsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MDAsIDB4ZjIsCisJMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4MjIsIDB4NGEsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4NCwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLCAweGYxLCAweDg0LCAweGEyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDUsIDB4ODQsIDB4NjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsCisJMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEwLCAweGExLCAweDA5LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDg0LCAweDIyLCAweGExLAorCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4NCwgMHhhMywgMHg5MiwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMywgMHg4OCwgMHgyNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDg0LCAweDIyLCAweDVjLCAweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDAwLAorCTB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhMiwgMHg0MywKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzQsIDB4ODQsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4NCwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDg0LCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzMsIDB4ODQsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM0LCAweDg0LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LAorCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4M2EsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4NCwgMHhhMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDg0LCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NCwgMHgzNSwgMHgwMSwKKwkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTQsIDB4ODQsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4MjIsIDB4NGQsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDg0LCAweGE3LCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlZCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWUsIDB4ODQsIDB4YTcsIDB4NDAsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4NCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDg0LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLCAweDM5LCAweGIwLCAweDAxLCAweDAwLAorCTB4NmQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgxNiwgMHgzMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDcwLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg3YywgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NzksIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NCwgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCisJMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweDAwLCAweDQ1LAorCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDE0LAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGI3LCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAorCTB4YTcsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MCwgMHgyYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGFkLCAweDg0LCAweDIzLCAweDAxLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg4NCwgMHgyMiwgMHgxYiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4MTMsCisJMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM2LCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjMywgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQwLAorCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAorCTB4Y2QsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKKwkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDg0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NCwgMHgyMiwgMHgxMywKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDk1LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg1LCAweDIyLCAweDQxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NSwgMHgyMiwgMHg1ZiwKKwkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg1LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODUsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4NSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDg1LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDg1LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDg1LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRiLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHg4NSwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDJmLCAweDg1LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDQxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NSwgMHg2NCwgMHg0NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDNhLCAweDg1LCAweGE4LCAweDFiLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4NzQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHgwNSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDA5LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODUsIDB4MDEsIDB4ZmIsCisJMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDg1LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODUsIDB4MjIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDUxLCAweDg1LCAweGE2LCAweDVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjksIDB4ODUsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NSwgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg4NSwgMHgyMSwgMHgwNCwKKwkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDZlLCAweDg1LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODUsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGExLCAweDg4LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDRlLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4NSwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg1MywKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwKKwkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjksIDB4ODksIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODUsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg4NSwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDY5LCAweDg5LCAweDAwLCAweDUzLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDU0LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg4NSwgMHhhMiwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4YTAsIDB4OTEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2OSwgMHg4OSwgMHgwMCwgMHg1NCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweGEwLCAweDQyLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMywgMHg0MCwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4ODUsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4NSwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGJiLCAweDg1LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGIzLCAweDg1LCAweDIyLCAweDU1LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MywKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGJiLCAweDg1LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODUsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYywgMHg4NSwgMHg0NiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDg1LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAorCTB4YjEsIDB4ODUsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCisJMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3OSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGUwLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDg1LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweDA5LCAweDdjLCAweDAwLCAweDAwLCAweGUxLCAweDg1LCAweDY2LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4NDEsCisJMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEzLCAweDg2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDI0LCAweGM4LCAweDAxLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTEsIDB4ODYsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGVhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQ5LAorCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHg4NiwgMHgyNiwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDg2LCAweDAwLCAweDQxLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NSwgMHhhMiwgMHg0NCwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDg2LCAweGE4LCAweDQyLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGY2LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDkyLAorCTB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjQsIDB4ODYsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDc4LCAweDk4LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHg5ZiwKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDIzLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJkLCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MmQsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODYsIDB4YTMsIDB4MDcsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDg2LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODcsIDB4MjIsIDB4MGYsCisJMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQzLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODYsIDB4MjIsIDB4MDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMiwKKwkweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NzksIDB4ODYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDY2LCAweDg2LCAweGEzLCAweDA3LAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ODYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDczLCAweDg2LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDczLCAweDg2LCAweDIyLCAweDQyLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk5LCAweDg2LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDg2LCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKKwkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODYsIDB4YTMsIDB4MTIsCisJMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZiwgMHg4NiwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAorCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg5OSwgMHgwMCwgMHgwOCwgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg3LCAweDg2LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODYsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4NiwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDg2LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OTUsIDB4ODYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDg2LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGI4LCAweDg2LCAweGEyLCAweDBkLAorCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGEzLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ODYsIDB4YTIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweDIzLCAweDA3LAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHgwZCwKKwkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhNCwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGExLCAweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKKwkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODYsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGQxLCAweDg2LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKKwkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweGQ4LCAweDg2LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGRiLCAweDg2LCAweGEwLCAweDQxLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMCwgMHg0MywKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGUwLCAweDg2LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4ODYsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDg2LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDIyLCAweDQ4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4NiwgMHg5MCwgMHg0OCwKKwkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLAorCTB4NDIsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg5OSwgMHgwMCwgMHgxNywKKwkweDk4LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE3LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODcsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NywgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4ODcsIDB4YTAsIDB4MDcsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4MGQsIDB4ODcsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDA3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4NywgMHgyMiwgMHg0MCwgMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LAorCTB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUyLAorCTB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDAwLCAweDA4LCAweDk4LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDc5LCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4NGQsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTksIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4NywgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDY1LCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweGEyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NywgMHgyMywgMHgwNywKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc1LCAweDg3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MzksIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDgzLCAweDg3LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4OGMsIDB4ODcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDk4LCAweDAwLCAweDQxLCAweDNmLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDg3LCAweDIyLCAweDUwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGEzLCAweDg3LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4OWUsIDB4ODcsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDBlLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4NywgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4ODcsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0MywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDkxLCAweDZjLCAweDAwLCAweDAwLCAweGMxLCAweDg3LCAweDIyLCAweDQ4LAorCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4NywgMHgxZiwgMHhmMCwKKwkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDg3LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NDgsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDg3LCAweDIyLCAweDBhLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4OCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQyLCAweDg3LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4OCwgMHgyMCwgMHg0YywKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4MGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQ5LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkYSwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweGRiLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODcsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODMsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4NywgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODMsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODcsIDB4MjIsIDB4NDYsCisJMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NywgMHhhMiwgMHg0MSwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYywgMHg4NywgMHgyMiwgMHg0MCwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGUwLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODcsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmMSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDk0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyZSwgMHg5NCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2UsIDB4OTQsIDB4MjIsIDB4MDIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDFhLCAweDAyLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJmLCAweDgzLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBiLCAweDg4LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MGMsIDB4NTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDEyLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQzLCAweDg4LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODgsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4OCwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDQzLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODgsIDB4YTAsIDB4NDgsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDg4LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4OCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4OCwgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg0ZiwgMHg4OCwgMHgyMiwgMHg0MSwgMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLAorCTB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4OCwgMHg4MywgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLAorCTB4NWEsIDB4ODgsIDB4MjMsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4ODgsIDB4YTIsIDB4NDEsCisJMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCisJMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4OCwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDg4LCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGMsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDZjLCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjgsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDJhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBjLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4ODgsIDB4MjIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzksIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCisJMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODEsIDB4ODgsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NCwgMHg4OCwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MywgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAorCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4OCwgMHgyMiwgMHg1MCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCisJMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0OCwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDU3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg4OCwgMHgwMCwgMHg0YiwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGUxLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDhjLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDhjLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4YywgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4YywgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhkLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjEsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MmMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzZSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4ZSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhkLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MywgMHg4ZCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQyLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NGIsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OGUsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNiLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYyLAorCTB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCisJMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0ZSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDJhLCAweDAwLCAweDAwLCAweDQ3LCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODksIDB4MDAsIDB4NGIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2EsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDRkLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgxLCAweDkwLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDgxLCAweDkwLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4OTAsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJiLCAweDkwLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5MSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDU3LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDg3LCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFiLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhlLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDhlLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NWEsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVhLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDk2LCAweDkyLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJmLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTIsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MiwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjcsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OTAsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTMsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5MywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDkzLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NTMsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE2LCAweDkzLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTMsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY3LCAweDkzLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjcsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZlLCAweDkzLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg4YiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODUsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkOSwgMHg4YiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4MWEsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA1LCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LAorCTB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4MDYsCisJMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAorCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OGMsIDB4MjAsIDB4NGIsCisJMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDhjLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4OGMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGExLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4MWIsIDB4OGMsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OGMsIDB4YTIsIDB4NGMsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4YywgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDhjLCAweDIwLCAweGYwLCAweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDMsCisJMHg4MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJiLCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDhjLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg4YywgMHgyMiwgMHg0NCwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4YywgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OGMsIDB4YTIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU5LCAweDhjLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDJmLCAweDQ5LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NTksIDB4OGMsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDVjLCAweDhjLCAweGEyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGMsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDhjLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4YywgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc2LCAweDhjLCAweDIyLCAweDBhLCAweDE2LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4YywgMHhhMCwgMHg0MywKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmIsIDB4OGMsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4MGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwOCwgMHgxMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4NDEsCisJMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDgzLCAweDhjLCAweGEwLCAweDQzLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDYsIDB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4YywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDhjLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDlkLCAweDhjLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHg4YywgMHgyMiwgMHg0NSwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsCisJMHg4YywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweGYzLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4YywgMHgyMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGI5LCAweDhjLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4YywgMHhhMiwgMHg0NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGVhLCAweDhjLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDk1LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhjLCAweDIyLCAweDRhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLCAweDhjLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGRjLCAweDhjLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweGUxLCAweDhjLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlNSwgMHg4YywgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDJkLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NywgMHgwMCwgMHg0MCwgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY2LCAweDhjLCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4ZCwgMHg4MiwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGZlLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MGMsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OGQsIDB4YTMsIDB4MDEsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDIwLCAweDAyLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg4ZCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4ZCwgMHhhMywgMHgwMSwKKwkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDhkLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsCisJMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4ZCwgMHhhOCwgMHgxMywKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDUxLCAweDhkLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OGQsIDB4YTIsIDB4MDIsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4ZCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDhkLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGQsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGQsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJjLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM5LCAweDhkLCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4M2UsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDhkLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OGQsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwKKwkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWMsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGMsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4YywgMHgwMCwgMHgwMiwKKwkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDhkLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDU3LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGQsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OGQsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg4ZCwgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZlLCAweDhkLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4ZCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDcyLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAorCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0OCwKKwkweDNiLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OGQsIDB4YTIsIDB4NDEsCisJMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4ZCwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZCwgMHgyMiwgMHg1ZiwKKwkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDg3LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YTcsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4OGQsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDhiLCAweDhkLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTEsIDB4OGQsIDB4ODUsIDB4Y2EsCisJMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5OCwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGI0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OGQsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZCwgMHg5MCwgMHg0YywKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OGQsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZCwgMHg0NSwgMHg0OCwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OGQsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGQsIDB4MjIsIDB4NDgsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgxZCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDFkLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDg3LCAweDk4LCAweDAwLCAweDQ4LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGE3LCAweDg4LCAweDIzLCAweDQxLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwKKwkweGU2LCAweDZkLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDAwLCAweGJlLCAweDA2LCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE1LCAweDhjLCAweGEyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGRiLCAweDhkLCAweDIyLCAweDQ3LAorCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhNSwgMHg4YywgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NiwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDVkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsCisJMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDkzLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg4ZCwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDksIDB4OGUsIDB4MjIsIDB4NDcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4ZSwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OGUsIDB4NDIsIDB4NDAsCisJMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDIzLCAweDQxLAorCTB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5OCwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhNywgMHg4OCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDhlLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OGUsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4ZSwgMHgyMCwgMHg0YywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLAorCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCisJMHg5NiwgMHhjYywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ2LAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0NywgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDQ2LCAweDhlLCAweDkwLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAorCTB4MDksIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGUsIDB4ODAsIDB4ZjMsCisJMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDhlLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAorCTB4NjYsIDB4OGUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDhlLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2OSwgMHg4ZSwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAorCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4ZSwgMHhhMCwgMHgxNCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDhlLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZSwgMHhhNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OTcsIDB4MDAsIDB4MzAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YywgMHg4ZSwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkzLCAweDhlLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDhlLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTksIDB4OGUsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKKwkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZSwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGEwLCAweDhlLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFmLCAweDhlLCAweGE4LCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4ZSwgMHhhMCwgMHg0MywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsCisJMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5NywgMHg4YywgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZSwgMHg4YywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDIyLCAweDA2LAorCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsCisJMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTMsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg4ZSwgMHg0MiwgMHgwNSwKKwkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4YzgsIDB4OGMsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGU3LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg4YywgMHg5MywgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVhLCAweDhlLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGQsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY3LCAweDhlLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OGUsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyNywgMHg4MywgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg4ZSwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDk2LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhmLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGYsIDB4MDAsIDB4NTAsCisJMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHg4ZiwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI3LCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4MmQsIDB4OGYsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDhmLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweGEyLCAweDE2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OGYsIDB4ODMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OGYsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHg3OSwgMHg5NywgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGYsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYxLCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg2OSwgMHg4ZiwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCisJMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg4ZiwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDg0LCAweDhmLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDhmLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODcsIDB4OGYsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDhmLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg4ZiwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDAwLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4ZiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDBiLAorCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDIyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsCisJMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAorCTB4OTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgxMSwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OGYsIDB4MjMsIDB4MGIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhiZSwgMHg4ZiwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLCAweGU0LCAweGNkLCAweDAxLCAweDAwLAorCTB4YzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLAorCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGYsIDB4MjIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4Y2UsIDB4OGYsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQzLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKKwkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGZhLCAweDhmLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFmLCAweDkwLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFhLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDkwLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFiLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4MjIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2EsIDB4OTAsIDB4MDMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OTAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDQzLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YiwgMHg5MCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTAsIDB4MjIsIDB4NDAsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDkwLCAweGEyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDhiLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCisJMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5MCwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NmQsIDB4OTAsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZTYsIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MCwgMHhhOCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGFiLCAweDkwLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5MCwgMHgyMiwgMHgwMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweGYyLAorCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5MCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjIsIDB4OTAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGIyLCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTEsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGJhLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDUxLCAweDkxLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjMSwgMHg5MCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MCwgMHhhMiwgMHgxNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkMiwgMHg5MCwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQzLCAweDkwLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg5MCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGRjLCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MjcsIDB4ODMsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDc1LCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5MCwgMHhhOCwgMHg0MCwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OTAsIDB4NjUsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGQsIDB4OTEsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4MDAsIDB4NWYsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTAsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHgzMSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGQsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTksIDB4OTEsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTEsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTEsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgzMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAorCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5MSwgMHgzNywgMHg1YywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzcsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDRlLCAweDkxLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDksIDB4OTEsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDkxLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5NywgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDksIDB4OTcsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywKKwkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAorCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwKKwkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDhhLCAweDkxLCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ODgsIDB4OTEsIDB4ODQsIDB4NDgsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDAxLAorCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MSwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDgzLCAweDkxLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MSwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDllLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGE4LCAweDkxLCAweDIyLCAweDQ0LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MSwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjcsIDB4OTEsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5MSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTEsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YmQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHgwNywKKwkweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MjAsIDB4MTYsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQ5LCAweDkxLCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4ODQsIDB4NDUsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmMCwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDkyLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDUsIDB4OTIsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTIsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHgxYiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDk4LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGUxLCAweDk0LCAweDAwLCAweDQwLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHg5MiwgMHgyMywgMHgwZCwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDEzLCAweDkyLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDkyLCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDkyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5MiwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTIsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg5MiwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5MiwgMHhhMiwgMHgxNiwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDkyLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDJkLCAweDkyLCAweGEyLCAweGYzLAorCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDMxLCAweDkyLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MTEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwKKwkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDNiLCAweDkyLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDkyLCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5MiwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgyZCwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4NDAsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MiwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OTIsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDkyLCAweDIyLCAweDQwLCAweDFiLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTIsIDB4YTgsIDB4MTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDhhLCAweDkyLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDdlLCAweDkyLCAweDIzLCAweDBkLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MiwgMHgyMiwgMHg0MCwKKwkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4OGEsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDkyLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MiwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGU2LCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MGMsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTQsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDkyLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTIsIDB4MjcsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MiwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg5MiwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsIDB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY5LCAweDk0LCAweDAwLCAweDAwLCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQzLCAweDkyLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGM1LCAweDkyLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YzUsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTIsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDkyLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDkyLCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjEsIDB4OTIsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LAorCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGI4LCAweDkxLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLCAweDJiLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5MywgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBiLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDkzLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4OTMsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg5MywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDFmLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4OTMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDNkLCAweDkzLCAweGEyLCAweDE2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzksIDB4OTMsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCisJMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk0LCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MywgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDUyLCAweDkzLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDRhLCAweDkzLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGYsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDg0LCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcyLCAweDkzLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg3NywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAorCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MywgMHg4NSwgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLAorCTB4ODgsIDB4OTMsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsCisJMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4YTUsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweGYwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGEzLCAweDkzLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5MywgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweGNlLCAweDk3LCAweDAwLCAweDQ3LAorCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5OCwgMHgwMCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OTMsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTQsIDB4YTIsIDB4NGMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYSwgMHg5MywgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDkzLCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTMsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MywgMHgyMiwgMHhmMCwKKwkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDk0LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDk0LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI5LCAweDkzLCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MywgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDkzLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDIzLCAweGYwLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5MywgMHhhMiwgMHhmMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBlLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MGUsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTMsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDk0LCAweDFmLCAweDEyLAorCTB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTQsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY3LCAweDkzLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTMsIDB4MjIsIDB4ZjAsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MywgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGU2LCAweDkzLCAweDAzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDkzLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MywgMHgyMiwgMHgwYSwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDkzLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZDksIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGRjLCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweGUzLCAweDkzLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGU1LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTMsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MywgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGVmLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMSwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OTMsIDB4YTAsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OTMsIDB4MjIsIDB4NDMsCisJMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHhhMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZkLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGVkLCAweDkzLCAweDIwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDksIDB4OTQsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTMsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTQsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDk0LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTEsIDB4OTQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTQsIDB4MDAsIDB4NDIsCisJMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5NCwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDExLCAweDk0LCAweDAwLCAweDRjLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDMwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NGEsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NCwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDFjLCAweDk0LCAweGEyLCAweGYzLAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTQsIDB4MjIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMywgMHg5NCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAorCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsCisJMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzYiwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LAorCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzOSwgMHg5NCwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsCisJMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LAorCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzZCwgMHg5NSwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDk0LCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4OTQsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTQsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwgMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODUsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDE1LCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTQsIDB4NjAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhjMiwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk0LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAorCTB4NzAsIDB4OTQsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTQsIDB4MjIsIDB4MTIsCisJMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg1ZiwKKwkweDhiLCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NzksIDB4OTQsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE3LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MTIsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OSwgMHg5NCwgMHgwYiwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLAorCTB4ODYsIDB4OTQsIDB4MjIsIDB4NTAsIDB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDkzLCAweDA0LCAweDAwLCAweDEyLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDEwLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NCwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDk0LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDk0LCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsCisJMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDk0LCAweGE4LCAweDA1LAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFiLCAweDk0LCAweDAwLCAweDQyLCAweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0MiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKKwkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDk0LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTQsIDB4MjgsIDB4YjEsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk1LCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg5NCwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NCwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YywKKwkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDExLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsCisJMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAwLAorCTB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHg0OSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5NCwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDIyLCAweDRjLCAweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLAorCTB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5NCwgMHhhOCwgMHhiMSwgMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDQ5LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwKKwkweGVhLCAweDk0LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDAwLAorCTB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5NCwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwMCwKKwkweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NCwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDJkLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwKKwkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDk5LCAweDAwLCAweDBkLCAweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTUsIDB4MzAsIDB4NDcsIDB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MWUsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDFmLCAweDk1LCAweDQwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOSwgMHg5NSwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCisJMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweDAwLCAweDNiLAorCTB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzMywgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDJmLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwKKwkweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgyMiwgMHg0NSwKKwkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTUsIDB4MzEsIDB4NWYsCisJMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4YTIsIDB4M2IsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDQ0LCAweDdmLCAweDAwLCAweDAwLAorCTB4NWMsIDB4OTUsIDB4MTgsIDB4NGEsIDB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDRiLAorCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwKKwkweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDJmLCAweDdlLCAweGQ5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDZhLCAweDk1LCAweDAwLCAweDA1LAorCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA4LCAweDRlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDcsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5NSwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDk1LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsCisJMHg0NCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKKwkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4YWEsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHg5NSwgMHhhMiwgMHgzYiwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0YSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg5NSwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLCAweGU2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5NSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDk1LCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5NSwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDNhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NSwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDgsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgyNiwgMHg0NiwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLCAweDEyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGMsCisJMHg0MiwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDQxLAorCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk1LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGRlLCAweDk1LCAweDIyLCAweDQxLAorCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4OTUsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MjIsIDB4NDAsCisJMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQxLAorCTB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKKwkweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsIDB4OGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTUsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NiwgMHhhMiwgMHhhNSwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAorCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDk2LCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLAorCTB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODIsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTYsIDB4OWYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsCisJMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweGE1LCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLAorCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDk5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDk5LCAweDgwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIxLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5NiwgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NiwgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5NiwgMHg5YywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDYwLCAweDk2LCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NiwgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDVmLCAweDk2LCAweGEyLCAweDhhLAorCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKKwkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OTYsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAorCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywKKwkweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NiwgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDk1LAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5NiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4OTUsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk2LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwKKwkweDBkLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDk2LCAweDYzLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDk3LCAweGYwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjcsIDB4OTYsIDB4MjIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLAorCTB4YzcsIDB4OTYsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OTYsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMyLCAweDk2LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDk0LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTYsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjYSwgMHg5NiwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk2LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTcsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDk2LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweGY3LCAweDk2LCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4OTYsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg5NiwgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NiwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZGEsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDk2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3MywgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgxNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjYsIDB4OTYsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTYsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGU3LCAweDk2LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDJmLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgxYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NiwgMHgyMCwgMHgxNSwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhiOSwgMHg5NiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5NiwgMHgwMCwgMHgwMiwKKwkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NywgMHgwMCwgMHg0MSwKKwkweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDM2LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxNCwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4MDYsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhjNCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDI4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjEsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDk3LCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTcsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHg5NywgMHhhMiwgMHgwNiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5NywgMHgyMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI2LCAweDk3LCAweGEwLCAweDQxLCAweDE3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweDQ4LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDJmLCAweDk3LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDk3LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzksIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NywgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDk3LCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5NywgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwKKwkweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1MiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLAorCTB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDVkLCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsCisJMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDk3LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NywgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDc4LCAweDk3LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLAorCTB4NzgsIDB4OTcsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLAorCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4N2QsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MjAsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDhmLCAweDk3LCAweDIyLCAweDVmLCAweDgxLCAweDdjLCAweDAwLCAweDAwLCAweDhjLCAweDk3LCAweGEyLCAweDQwLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDk3LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTcsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHg5MiwgMHg5NywgMHhhMiwgMHg1ZiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4OTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDk3LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDAyLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGE1LCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTcsIDB4MjAsIDB4NGMsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDk3LCAweDIwLCAweGYyLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGI2LCAweDk3LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MzAsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDk3LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKKwkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAorCTB4YzAsIDB4OTcsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwNSwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDhhLCAweGQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGQ5LCAweDk3LCAweDljLCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5OCwgMHgwMCwgMHgxNCwKKwkweDgyLCAweDUwLCAweDAxLCAweDAwLCAweGRlLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGUsIDB4OTcsIDB4MjIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NywgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGJlLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4OTcsIDB4MjMsIDB4ZjAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTcsIDB4MjMsIDB4OTIsCisJMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5NywgMHg2OCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGJkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NywgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGY3LCAweDk3LCAweDIzLCAweDQwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHg5NywgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4ZjcsIDB4OTcsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZiLCAweDk3LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5OCwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQxLCAweDI0LCAweGVjLCAweDAwLCAweDAwLAorCTB4MGQsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsCisJMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwgMHgwZCwgMHg5OCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDBmLCAweDk4LCAweGEzLCAweGYwLAorCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEzLCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCisJMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MiwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDk4LCAweDlmLCAweDQxLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0MSwgMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MmMsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwKKwkweDNlLCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDEyLCAweGUwLCAweGVkLCAweDAwLCAweDAwLAorCTB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDM4LCAweDk4LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0YywgMHg5OCwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5OCwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDk4LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTgsIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDk4LCAweDFmLCAweDQ0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0ZiwgMHg5OCwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTgsIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLAorCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDY0LCAweDk4LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTgsIDB4YTAsIDB4ZjIsCisJMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLAorCTB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OTgsIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAorCTB4NmIsIDB4OTgsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5OCwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDZlLCAweDk4LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTgsIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5OCwgMHgyMiwgMHg0MCwKKwkweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4YTAsIDB4NDEsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsCisJMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4M2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5OCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDk4LCAweDI4LCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTgsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgxZCwgMHg0NiwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDk4LCAweDk4LCAweDIyLCAweDVmLCAweDExLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVmLCAweDk4LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAorCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4YTIsIDB4OTgsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDJlLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg5OCwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKKwkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKKwkweGU0LCAweDk4LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDk4LCAweGEyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKKwkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAorCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwKKwkweDU3LCAweGI1LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsCisJMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LAorCTB4MjEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5OCwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5OCwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5OSwgMHg2YSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5OSwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDk5LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweDExLCAweDk5LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5OSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDk5LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKKwkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCisJMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAorCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzhjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2Rvd25sb2FkLmgKQEAgLTAsMCArMSw2ODQ4IEBACisjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjM3IgorI2RlZmluZSBPQVNJU19VQ09ERV9IT1NUSUZfSUQgIAkzCisKK3N0YXRpYyBzMzIgT051bVNlY3Rpb25zID0gMHgyOworc3RhdGljIHUzMiBPU2VjdGlvblNpemVbXSA9IHsKKwkweDAwMDA0MDAwLCAweDAwMDEwMDAwLAorfTsKKworc3RhdGljIHUzMiBPU2VjdGlvblN0YXJ0W10gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Cit7CisJeworCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAorCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAorCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCisJMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKKwkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCisJMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKKwkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAorCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCisJMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAorCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKKwkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCisJMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAorCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAorCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAorCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAorCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKKwkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAorCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAorCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAorCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAorCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCisJMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAorCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKKwkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKKwkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAorCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCisJMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKKwkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAorCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCisJMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKKwkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKKwkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCisJMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAorCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAorCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKKwkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCisJMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKKwkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJfSwKKwl7CisJMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCisJMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDA1LCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDJmLCAweDgxLCAweDAxLCAweDAwLCAweDhkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKKwkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDUyLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAorCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhhMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA0LCAweDgwLCAweDk0LCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTUsIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4OTksIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDAyLCAweDAwLCAweDIwLCAweDQyLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsCisJMHhkYiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDgwLCAweGE4LCAweGIxLAorCTB4OGMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMywgMHgwMCwgMHgwMCwgMHhlNiwgMHg4MCwgMHgxNCwgMHhjNiwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGM2LCAweDgzLCAweGY0LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MjIsIDB4NGYsIDB4ODMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzIsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDk3LCAweGEzLCAweDAxLCAweDAwLCAweGMyLCAweDgwLCAweDFmLCAweDVjLAorCTB4OTcsIDB4NTMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODIsIDB4MWUsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywgMHg4MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHg2MywgMHhiMywgMHgwMCwgMHgwMCwgMHg2MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ4LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweDAwLCAweDRlLAorCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0OCwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUzLCAweDgxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4NzEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAorCTB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg3ZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4ODgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDgxLCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMywgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweDc3LCAweGIzLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweDAwLCAweDRkLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgwMCwgMHg0YywKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODEsIDB4MjIsIDB4NDIsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg4MSwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgxZSwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgxLCAweDFmLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDIsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJmLCAweDliLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsCisJMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwKKwkweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDgxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODEsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0MiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDYwLCAweDQwLAorCTB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1NiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDViLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDEsIDB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MSwKKwkweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDYzLCAweDgxLCAweGEyLCAweDQyLCAweDY3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODEsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGNhLAorCTB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgxYSwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDAsCisJMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg2ZiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDg1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM1LCAweDgwLCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDc3LCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDdhLCAweDgxLCAweDIyLCAweDViLAorCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmZCwgMHgwMCwgMHhjYSwKKwkweDk1LCAweDliLCAweDAxLCAweDAwLCAweDBkLCAweDAxLCAweDAwLCAweGNhLCAweGM1LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHhjNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg2ZiwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YzcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHhjYiwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQyLAorCTB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA5LCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4OGYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweGE2LCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDgxLCAweDlmLCAweDg1LAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODMsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg4MSwgMHgyMiwgMHgzMCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MiwgMHg4MSwgMHhhMiwgMHg0ZiwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4YTgsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGE1LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4YWQsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQxLAorCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGJiLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODEsIDB4MjIsIDB4NDMsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGMwLCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKKwkweDgzLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGMyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg4MywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGU0LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMywgMHg4MSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MiwgMHgyMiwgMHg0NCwKKwkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NGEsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDgxLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODEsIDB4MjIsIDB4NGYsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg4MSwgMHgyMiwgMHg0ZSwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZmQsIDB4ODEsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAxLCAweDgyLCAweDIyLCAweDQzLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MiwgMHgyMiwgMHg0MiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDgyLCAweDIyLCAweDRiLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MiwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTYsIDB4ODIsIDB4OWYsIDB4ODUsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MiwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDgyLCAweGEyLCAweDQ5LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODIsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg4MiwgMHhhMiwgMHg0YSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDIwLCAweDgyLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgyLCAweDQyLCAweDQwLCAweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDQwLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhiYiwgMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDJiLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODIsIDB4YTIsIDB4NTQsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDNjLCAweDgyLCAweGEyLCAweDA2LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4NDIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NTcsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4MiwgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDZlLCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ODIsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3NiwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDY4LCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDczLCAweDgyLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzksIDB4ODIsIDB4YTIsIDB4NDEsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDkxLCAweDgyLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4MiwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDgyLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLAorCTB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg5LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4MiwgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4OTIsIDB4ODIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDliLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDlmLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4MiwgMHhhMCwgMHg0MiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDgyLCAweDAwLCAweDUwLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4ODIsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODIsIDB4MjIsIDB4NTgsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHhiNSwgMHg4MiwgMHgzMywgMHhjNCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MiwgMHhhMSwgMHhhZCwKKwkweDlkLCAweDIwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg4MiwgMHgyMiwgMHhhYiwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGJlLCAweDgyLCAweGEyLCAweDQwLCAweDAxLCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDgyLCAweDIyLCAweDVmLAorCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjMCwgMHg4MiwgMHgyMiwgMHg1ZSwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDgyLCAweDIyLCAweDU0LCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODIsIDB4YTgsIDB4YjEsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4NCwgMHhhMiwgMHg1ZiwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNhLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM3LCAweDgyLCAweGEyLCAweDVmLAorCTB4NTksIDB4MjcsIDB4MDAsIDB4MDAsIDB4YzksIDB4ODIsIDB4YTIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHg4MiwgMHhhMiwgMHg1ZSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MiwgMHgyMiwgMHg1YywKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGRiLCAweDgyLCAweDM3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2EsIDB4ODIsIDB4YTgsIDB4YjEsCisJMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg4MiwgMHgzNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGQxLCAweDgyLCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4ODIsIDB4NTIsIDB4MjEsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDEsCisJMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDExLCAweDgzLCAweDAwLCAweDM0LAorCTB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRiLCAweDgyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YTIsIDB4NDgsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDgyLCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODIsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHhhMiwgMHg0MCwKKwkweDkzLCAweDdmLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweDIyLCAweDQ0LCAweDkzLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZTUsIDB4ODIsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ODIsIDB4YTIsIDB4NDAsCisJMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgxYSwgMHg0MCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDgwLCAweGEyLCAweDQwLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODcsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NywgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhhMiwgMHg1YiwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LCAweDMzLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjMsIDB4ODIsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksCisJMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgzMywgMHg0MCwgMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGZkLCAweDgyLCAweGEwLCAweGNlLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODMsIDB4YTAsIDB4Y2QsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDgzLCAweDIyLCAweGI1LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTUsIDB4MmYsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODMsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhiNCwgMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE1LCAweDJlLCAweDQwLCAweDY5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LAorCTB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MywgMHhhOCwgMHhhMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDgyLCAweDAwLCAweDg4LCAweDllLCAweGIzLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweGEyLCAweDQxLAorCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHg4MywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHgxYSwgMHg0MCwKKwkweDkzLCAweDgzLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDAwLCAweDA5LCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4ODMsIDB4YTYsIDB4NDIsCisJMHgxMywgMHg2MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NCwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDgzLCAweDYxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTYsIDB4ODMsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHg5NCwgMHg3MSwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MywgMHgwMCwgMHg1OCwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA1LCAweDk0LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIzLCAweDRiLAorCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDI1LCAweDgzLCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4ODUsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDgzLCAweDIyLCAweDU1LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NDMsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4MywgMHgwMCwgMHg0YiwKKwkweDQ0LCAweGMxLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDI4LCAweGYwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgyOCwgMHgzYywgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDM5LCAweDgzLCAweGEyLCAweGY4LCAweDBlLCAweDMwLCAweDAwLCAweDAwLAorCTB4NDksIDB4ODMsIDB4MjIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDgzLCAweGEyLCAweGY4LCAweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDgzLCAweGEyLCAweGY4LAorCTB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODMsIDB4YTIsIDB4ZjAsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4MywgMHgyMiwgMHg1OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDIsIDB4ODMsIDB4YTIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhlNiwgMHg5NSwgMHgwMSwgMHgwMCwgMHg0NywgMHg4MywgMHg3NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDc1LCAweGYzLAorCTB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ3LCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NGYsIDB4ODMsIDB4NzcsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4MjIsIDB4NTgsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDgzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NjcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg4MywgMHg3NywgMHg0MSwgMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLAorCTB4NWQsIDB4ODMsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ODMsIDB4MjIsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDgzLCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDAwLCAweDVmLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4MywgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDY1LCAweDgzLCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjIsIDB4ODMsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MywgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQ1LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRiLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4OTMsIDB4MDAsIDB4MDMsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDUwLAorCTB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDc3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NzksIDB4ODMsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDJlLCAweDQ3LAorCTB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MywgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4MywgMHgyMywgMHhhMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MDAsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHg4MywgMHgwMCwgMHg1YywKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODMsIDB4MjIsIDB4NWYsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4MywgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDk3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4NzIsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDllLCAweDgzLCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDAwLCAweGYyLAorCTB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODQsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDgzLCAweDIyLCAweDRhLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YWMsIDB4ODMsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQzLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhYywgMHg4MywgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4NCwgMHhhMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODMsIDB4NjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc5LCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLCAweGIyLCAweDgzLCAweDIyLCAweGExLAorCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MywgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg4MywgMHhhMywgMHg5MiwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MywgMHgyMiwgMHg1YywgMHgxNywgMHg3YywgMHgwMCwgMHgwMCwKKwkweGI5LCAweDgzLCAweDAwLCAweDAwLCAweDJhLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg4MywgMHhhMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ5LCAweDgzLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4NGMsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODMsIDB4YTgsIDB4NTQsCisJMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweGQ4LCAweDgzLCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4MywgMHgyOCwgMHg1NCwKKwkweDE3LCAweDEwLCAweDAwLCAweDAwLCAweGQ1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODMsIDB4MjIsIDB4NTAsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGRlLCAweDgzLCAweGEyLCAweDQxLAorCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRmLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE2LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHhlOSwgMHg4MywgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MCwgMHg5MSwgMHgwMCwgMHgwMSwKKwkweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODMsIDB4YTIsIDB4NGIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODMsIDB4MzUsIDB4MDEsIDB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MywgMHgyOCwgMHhiMSwKKwkweDMwLCAweDMwLCAweDAwLCAweDAwLCAweGYwLCAweDgzLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHg4MywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGY2LCAweDgzLCAweGE4LCAweGIxLAorCTB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODMsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDJjLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4YWEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHg4MywgMHhhMywgMHgwYiwKKwkweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDg0LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDIzLCAweDAxLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4NCwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDkyLCAweDAwLCAweDQzLAorCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MmUsIDB4ODQsIDB4MjIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCisJMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDQ1LAorCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDVhLCAweDg0LCAweDIyLCAweDE0LAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDg0LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MjIsIDB4MWIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUwLCAweDg0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHhhMiwgMHg0MCwKKwkweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM5LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg0LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDg0LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg2NywgMHg4NCwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjAsIDB4MWQsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4NCwgMHhhMywgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDZlLCAweDg0LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHhhMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTEsIDB4MDAsIDB4MDEsCisJMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3NiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4ODQsIDB4MjIsIDB4MTMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdhLCAweDg0LCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweGY0LCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk1LCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDkzLCAweDg0LCAweDIyLCAweDQyLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDg0LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NTMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODQsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YSwgMHg4NCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDMzLCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODQsIDB4MjIsIDB4M2EsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhNywgMHg4NCwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTQsIDB4MDAsIDB4OTUsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAorCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHg4NCwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRjLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjIsIDB4ODQsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LAorCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5MSwgMHgwMCwgMHg0MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmUsIDB4ODQsIDB4NjQsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NCwgMHhhOCwgMHgxYiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDc0LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NCwgMHgwMSwgMHhmYiwgMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDg1LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGRhLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweGQyLCAweDg0LCAweGE2LCAweDVmLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4NCwgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGRmLCAweDg0LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4NCwgMHgyMSwgMHgwNCwKKwkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweGU3LCAweDg0LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YmQsIDB4ODcsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODUsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDg3LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRlLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZiwgMHg4NCwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1MywKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4YTAsIDB4MGEsCisJMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDg0LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDUzLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg4NCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NCwgMHhhMiwgMHgwYSwKKwkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDVkLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4NCwgMHhhMCwgMHg5MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdiLCAweDg4LCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NSwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1NCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHhhMCwgMHg0MiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU0LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDEzLCAweDg1LCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4ODUsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YTIsIDB4NTQsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4NSwgMHgyMiwgMHg1NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODUsIDB4MjIsIDB4NTMsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDg1LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDk2LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODUsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNCwgMHg4NSwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4NSwgMHgxZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLCAweDMxLCAweGMzLCAweDAxLCAweDAwLAorCTB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODUsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLCAweGUwLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLCAweDNkLCAweDg1LCAweDIyLCAweDQwLAorCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg4NSwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDQxLCAweDg1LCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODUsIDB4NjYsIDB4MWIsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc2LCAweDQxLCAweDQxLCAweGMzLCAweDAxLCAweDAwLCAweDcwLCAweDg1LCAweDIzLCAweDkyLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODUsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg4NSwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4NSwgMHgyMiwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDEyLAorCTB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODUsIDB4YWEsIDB4NDEsIDB4MjcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NSwgMHgyNiwgMHg0MCwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg1LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDYzLCAweDg1LCAweDAwLCAweDQxLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDVjLCAweDg1LCAweGEyLCAweDQ0LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4ODUsIDB4YTgsIDB4NDIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4NTUsIDB4ODUsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY3LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4N2QsIDB4ODUsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NCwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDk0LCAweDkyLCAweDAwLCAweDkyLCAweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4ODUsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg3ZCwgMHg4NSwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTUsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDg1LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAorCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4OTEsIDB4ODUsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDg1LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDg1LCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODUsIDB4YTMsIDB4MDcsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OSwgMHg4NSwgMHhhMywgMHg0MCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAorCTB4OGIsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZSwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDViLCAweDg2LCAweDIyLCAweDBmLCAweDQyLCAweDA1LCAweDAwLCAweDAwLCAweGEyLCAweDg1LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGEyLCAweDg1LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweGMwLCAweDA2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTQsCisJMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhkNiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweGZlLCAweDdmLCAweDAwLCAweDA1LAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg4NSwgMHgyMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKKwkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODUsIDB4YTMsIDB4MDcsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiOSwgMHg4NSwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODUsIDB4MjIsIDB4NDAsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODUsIDB4MjIsIDB4NDIsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjMiwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LAorCTB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHhhMywgMHgxMiwKKwkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweGQxLCAweDg1LCAweDYwLCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGQsCisJMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4ODUsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4MjIsIDB4MGQsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZSwgMHg4NSwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweGUyLCAweDg1LCAweDAwLCAweDBkLAorCTB4MjQsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTQsIDB4ODUsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGU1LCAweDg1LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NiwgMHgyMiwgMHgwZCwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDA2LCAweDg2LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODUsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDg1LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDg1LCAweDFmLCAweGYwLAorCTB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ODUsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4NSwgMHgyMywgMHgwNywKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4NiwgMHhhOCwgMHg0NiwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGIyLCAweDg1LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjIsIDB4ODUsIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsCisJMHgwYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweGZlLCAweDdmLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MTEsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg2LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4NDMsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODYsIDB4YTAsIDB4NDYsCisJMHgwZiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDg2LCAweDIyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGYsIDB4YTIsIDB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4NiwgMHhhMCwgMHg0MSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDJhLCAweDg2LCAweDIyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODYsIDB4YTAsIDB4NDMsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg4NiwgMHgyMCwgMHg0NSwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYSwgMHg4NiwgMHhhMCwgMHg0MSwKKwkweDBlLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODYsIDB4YTIsIDB4NDEsCisJMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQ4LCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ4LAorCTB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzEsIDB4ODYsIDB4OTAsIDB4NDgsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDkzLCAweGE0LCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGNkLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ0LCAweDg2LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDg2LCAweGEwLCAweDA3LAorCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDg2LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NTYsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGMwLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDYzLCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NiwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY4LCAweDg2LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmQsIDB4ODYsIDB4MjIsIDB4NDAsCisJMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODYsIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDg2LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDgxLCAweDg2LCAweDY4LCAweDA3LAorCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDg2LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGI1LCAweDg2LCAweDIyLCAweDBkLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4ODYsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NiwgMHgwMCwgMHgwZCwKKwkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDkyLCAweDg2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDg2LCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MywgMHg4NiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGQsCisJMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NiwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDg2LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OWUsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4NiwgMHgxZiwgMHhmMCwKKwkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg2LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODYsIDB4MjMsIDB4MDcsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4YTgsIDB4NDYsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDdiLCAweDg2LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiYiwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGM1LCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5NSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyYSwgMHg4NywgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDBlLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4NiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGQyLCAweDg2LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ODYsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4NiwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGMsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODYsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4YTIsIDB4NWYsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLAorCTB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHg4NiwgMHgyMiwgMHg0OCwgMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4ZWIsIDB4ODYsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODYsIDB4MjMsIDB4NDEsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDg3LCAweDAwLCAweDQ4LCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHg4NiwgMHgyMiwgMHgwYSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODYsIDB4MjIsIDB4ZjAsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJkLCAweGYzLCAweDgyLCAweGUwLCAweDAxLCAweDAwLCAweGY2LCAweDg2LCAweGEzLCAweDQxLAorCTB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAorCTB4YmQsIDB4ODcsIDB4MjAsIDB4NGMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsCisJMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiZCwgMHg4NywgMHgwMCwgMHg0OSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDg3LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MTMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDA1LCAweDg3LCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODcsIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlYywgMHg4MiwgMHgyMiwgMHg0MCwKKwkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MGIsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MiwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDExLCAweDg3LCAweDIyLCAweDQwLAorCTB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NmYsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NywgMHgyMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg4MCwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDBlLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MiwgMHgyMiwgMHgwMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFjLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OTIsIDB4MWEsIDB4MDIsCisJMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyNiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzksIDB4OTIsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODcsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDM5LCAweDkyLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDMxLCAweDg3LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzMSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MmUsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDU2LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDJmLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ODIsIDB4ODcsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjksIDB4NDEsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsIDB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4NywgMHg2MCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDRlLCAweDg3LCAweDA1LCAweGMyLCAweDI0LCAweDMwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHg3MCwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDY2LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODcsIDB4YTAsIDB4NDgsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg4NywgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwKKwkweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MWEsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg4NywgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODcsIDB4MjIsIDB4NDEsCisJMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDg3LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDE3LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODcsIDB4ODMsIDB4NDEsCisJMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLCAweDdkLCAweDg3LCAweDIzLCAweDQwLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzcsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDAwLCAweGY4LAorCTB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODcsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NywgMHhhMCwgMHhhYSwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjYsIDB4NTQsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHg4NywgMHg4NywgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDhiLCAweDg3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4ODcsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHg4NywgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBkLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCisJMHg4YywgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsCisJMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5NCwgMHgyZiwgMHg1NSwKKwkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4YTIsIDB4NDEsIDB4ZTUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NywgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDg3LCAweGEyLCAweDkzLCAweDU3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NTcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWIsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY5LCAweDgyLCAweGEyLCAweDQxLCAweDFkLCAweDUzLCAweDAwLCAweDAwLAorCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGFjLCAweDg3LCAweDIyLCAweDQwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHhiNSwgMHg1MywgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNiwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgyLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAorCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDg3LCAweDAwLCAweDRiLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGU2LCAweDhhLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhiLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDRjLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI0LCAweDhiLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhiLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGMsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjEsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OGMsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4YywgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhjLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg4YywgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY1LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDhkLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OGMsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDcsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OGQsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk0LCAweDhkLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDdmLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDhiLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg4OCwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZCwgMHgwMCwgMHg0OSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDhkLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWIsIDB4OGQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDhlLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4ZSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDhkLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhlLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4ZSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFkLCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OGUsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDksIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNiLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5ZCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMxLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YWUsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ4LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZhLCAweDkwLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGYsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDhlLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTEsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY3LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NywgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg1LCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmUsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4NywgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhhLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgxZiwgMHgwMCwgMHgwZiwKKwkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGVlLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGYsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGRmLCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkYywgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDg0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKKwkweGEzLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHgwNiwgMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAorCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4OGIsIDB4MjAsIDB4NGIsCisJMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDhiLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE0LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4YiwgMHg0NCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIwLCAweDhiLCAweGEyLCAweDRjLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MjEsIDB4OGIsIDB4MDAsIDB4NGMsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGIsIDB4MjAsIDB4ZjAsCisJMHg1NiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg1NiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OGIsIDB4YTgsIDB4NDQsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4OGIsIDB4YTgsIDB4NDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGIsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4YiwgMHgyMiwgMHg0NCwKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDhiLCAweDIzLCAweDBiLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NGYsIDB4OGIsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1MywgMHg4YiwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDg2LCAweDAwLCAweDJmLCAweDQ5LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDUzLCAweDhiLCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4YiwgMHhhMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NWEsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MmYsIDB4NDYsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4YiwgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDg1LCAweDhiLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDhiLCAweDIyLCAweDBhLAorCTB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDhiLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGIsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHg4YiwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKKwkweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OGIsIDB4MjIsIDB4NDEsIDB4MTUsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4YiwgMHhhMCwgMHg0MywKKwkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYywgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ODEsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4YiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDUxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDhkLCAweDhiLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDkyLCAweDhiLCAweDIyLCAweDQ1LAorCTB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGIsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDBhLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJhLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4YiwgMHgyMywgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4YWEsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OGIsIDB4YTIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhYywgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDU3LCAweDkzLCAweDAwLCAweDQwLCAweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhiLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4YiwgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4YiwgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDYwLCAweDAwLAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4ODUsIDB4MTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4YiwgMHgwMCwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGM5LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDU3LCAweDkzLCAweDAwLCAweDQwLAorCTB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDAwLCAweDJkLCAweGYwLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2OCwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNiwgMHhkMCwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHg0MCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDhiLCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlYywgMHg4YiwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGU5LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGY0LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4OGIsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OGIsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDhiLCAweDIwLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OGIsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg4YiwgMHhhMywgMHgwMSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNywgMHg4YiwgMHgwMCwgMHgwNiwKKwkweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4YiwgMHhhOCwgMHgxMywgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMywgMHg4YywgMHgyMiwgMHgwMiwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDAwLCAweDJkLCAweDAyLCAweDBjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MjMsIDB4OGMsIDB4YTIsIDB4MDIsIDB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDAwLCAweDJmLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDI0LCAweDhjLCAweDIyLCAweDAxLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OGMsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE2LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg4YywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4YywgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweGMwLCAweDAxLCAweDAwLAorCTB4MmUsIDB4OGMsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg4YywgMHhhMiwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDhmLCAweDBkLCAweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4YiwgMHgwMCwgMHhhMSwKKwkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZTIsIDB4OGIsIDB4MDAsIDB4MDIsIDB4MzYsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDAwLCAweDIwLCAweDAxLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGMsIDB4MDAsIDB4NWYsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDM3LCAweDhjLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNlLCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGMsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQyLCAweDhjLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NGEsIDB4OGMsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4YywgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDRlLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NTUsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4YywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDUyLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAorCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHhmOCwKKwkweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDhjLCAweGEyLCAweDQxLCAweDNiLCAweDUwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OGMsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MWUsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVmLCAweDhjLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGMsIDB4MjIsIDB4NWYsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgwMCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDhjLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjksIDB4OGMsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY2LCAweDhjLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2OSwgMHg4YywgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDZmLCAweDhjLCAweDg1LCAweGNhLCAweDk0LCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTUsIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhlMCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDhjLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGMsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4YywgMHgyMiwgMHg0MywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4YywgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDhkLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MWQsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGMsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YTIsIDB4OGMsIDB4YTIsIDB4NDEsCisJMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAorCTB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgyMywgMHg0MSwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJmLCAweDg3LCAweDAwLCAweDQ3LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhlLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4YiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGIwLCAweDhjLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDkzLCAweDhiLCAweDAwLCAweDQ4LAorCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTEsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4YywgMHhhMiwgMHg1MCwKKwkweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4YywgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGQ2LCAweDhjLCAweDIyLCAweDQ3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGMsIDB4MWYsIDB4ZjAsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNmLCAweDhjLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4YywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGMsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhjLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4NywgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OGMsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4YywgMHhhMywgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhjLCAweDIwLCAweDRjLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLAorCTB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0NiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDRhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDcsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDkwLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4OGQsIDB4ODAsIDB4ZjMsCisJMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4OGQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHg4ZCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4OGQsIDB4MzcsIDB4NWMsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDhkLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4ZCwgMHhhMCwgMHgxNCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDQ4LCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDZlLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4ZCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDhkLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwKKwkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTksIDB4OGQsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLAorCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHg4ZCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDYwLCAweDhkLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAorCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg4ZCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZmLCAweDhkLCAweGE4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDhkLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg4YiwgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLCAweGI0LCAweDhiLCAweDIyLCAweDA2LAorCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLCAweGU3LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGQsIDB4YTAsIDB4NDMsCisJMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDkxLCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4OGQsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhiNCwgMHg4YiwgMHgxYSwgMHg1ZCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDZiLCAweGZiLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDljLCAweDhkLCAweGEwLCAweDQzLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDlmLCAweDhkLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MSwgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEyLCAweDhkLCAweDQyLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAorCTB4OWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDhjLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg4ZCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGIyLCAweDhkLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODIsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGQsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHg5NCwgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweGJiLCAweDhkLCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4OGQsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGQsIDB4NjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4ZCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGRiLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZCwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGUzLCAweDhkLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg5NCwgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTksIDB4OGQsIDB4MjIsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDIsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQyLAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDhlLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQzLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg5NCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBlLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDhlLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDhlLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg4ZSwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4MTUsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDhlLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGUsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDhlLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwKKwkweDk5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywKKwkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDRhLCAweDhlLCAweDIzLCAweDBiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAyLCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDAwLAorCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YiwgMHg4ZSwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5NCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHg2NywgMHg4ZSwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4ZSwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwKKwkweGE3LCAweDkxLCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4ZSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDczLCAweDhlLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKKwkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDhlLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4ZSwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhiLCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4YTAsIDB4OGUsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGFkLCAweDhlLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDljLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OGUsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDlmLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTMsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE5LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYywgMHg4ZSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGI2LCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OGUsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGJjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OGUsIDB4MDMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYiwgMHg4ZSwgMHgwMCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhlLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGUsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4YTIsIDB4NDAsCisJMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZhLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg4ZSwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDhlLCAweGE4LCAweDAwLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGUsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDJjLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0OCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDhmLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDg3LCAweDQyLAorCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OGYsIDB4MjIsIDB4MDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg4ZiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwKKwkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDhmLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDMxLCAweDhmLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDhmLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYywgMHg4ZiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OGYsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDhmLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4OGYsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4ZiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTIsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3NSwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDY0LCAweDhmLCAweDY1LCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDZjLCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4ZiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDZlLCAweDhmLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OGYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDhmLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGUsIDB4OGYsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk4LCAweDhmLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4OTYsIDB4OGYsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCisJMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTIsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDhmLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OGYsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE2LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDk0LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OGYsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGYsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzksIDB4OTQsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDYxLCAweDk1LCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQzLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDQ3LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAorCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg4ZiwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlOCwgMHg4ZiwgMHg4NCwgMHg0OCwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OGYsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjgsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4ZiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI3LCAweDkzLCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDkwLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgxNiwgMHg5MCwgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDkwLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsCisJMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MCwgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4OTAsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MCwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MCwgMHgyMCwgMHgxNiwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDkwLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDNlLCAweDkwLCAweDAwLCAweDBhLAorCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ2LCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTAsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1NiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRkLCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTAsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5MCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NjIsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDkwLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDY3LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2ZCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDcxLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzEsIDB4OTAsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDg2LCAweDkwLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTAsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3YiwgMHg5MCwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHg3ZiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4OSwgMHg5MCwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTYsIDB4OTAsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MywgMHg5MCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDhlLCAweDkwLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5MCwgMHgyMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDhlLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5MCwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDkwLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTAsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI1LCAweDkwLCAweDIyLCAweDQwLAorCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg5MCwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MCwgMHgwMCwgMHg1ZSwKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGMwLCAweDkwLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGNjLCAweDkwLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGNhLCAweDkwLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg5MCwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNywgMHg5MCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGU5LCAweDkwLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweGVmLCAweDkwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTAsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDdkLCAweDk1LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGYyLCAweDkwLCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhjMSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTEsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5MywgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5MCwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4OTEsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MSwKKwkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTksIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDkxLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg5MSwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTEsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg5MSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzEsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDNhLCAweDkxLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5MywgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4M2YsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDQ1LAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTEsIDB4OTEsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDkxLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg5MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGUsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQ3LAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0NywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDYzLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDE1LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MywgMHg5MSwgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDkxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNywgMHg5MywgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODIsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDJkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzNywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMzLCAweGMzLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAxLAorCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg5MSwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0OCwKKwkweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDk4LCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsCisJMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhNCwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTEsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg5NSwgMHgwMCwgMHg0NywKKwkweDE5LCAweDEwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDJkLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTUsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDkxLCAweGEyLCAweDRiLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE4LCAweDkyLCAweGEyLCAweDRjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4OTEsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhjOCwgMHg5MSwgMHhhMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTEsIDB4MjIsIDB4ZjAsCisJMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgxZiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRmLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxNiwgMHg5MiwgMHgyMCwgMHg0MiwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjNCwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDViLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5MSwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MSwgMHgyMywgMHhmMCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGQyLCAweDkxLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTcsIDB4OTIsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTIsIDB4YTIsIDB4NDEsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhkMSwgMHg5MSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDUxLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUyLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTIsIDB4MWYsIDB4MTIsIDB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg5MiwgMHhhMCwgMHgwMSwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjNSwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTIsIDB4YTIsIDB4NDYsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MSwgMHgyMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGRlLCAweDkxLCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkxLCAweDAzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDkxLCAweDIyLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGU1LCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgyLCAweGQwLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4OTEsIDB4MjAsIDB4OTEsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweGVlLCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY4LCAweDkxLCAweGEyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDkxLCAweGEyLCAweGYyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4YTAsIDB4OTEsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MSwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDkxLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5MiwgMHhhMiwgMHhmMCwKKwkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDYsIDB4OTIsIDB4YTIsIDB4ZjIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY2LCAweDkxLCAweDIwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHg5MiwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHg5MiwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTIsIDB4MjIsIDB4MGEsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDExLCAweDkyLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWEsIDB4OTIsIDB4MDAsIDB4NDMsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTIsIDB4MDAsIDB4NDEsCisJMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MiwgMHgwMCwgMHg0MiwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFhLCAweDkyLCAweDAwLCAweDQ0LCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDkyLCAweDAwLCAweDRjLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJhLCAweDQxLAorCTB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2QsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg5MiwgMHgyMiwgMHg1YSwKKwkweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MjksIDB4OTIsIDB4MDAsIDB4NWEsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEwLCAweGE1LCAweDg1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkyLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTIsIDB4YTIsIDB4NGIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MiwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDA3LAorCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg5MiwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTIsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTIsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDBmLAorCTB4NWUsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDQ4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDRhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg0ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg1ZCwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDUzLCAweDkyLCAweDYwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4YzIsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg5MiwgMHhhMiwgMHg0NSwgMHgyNSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDU3LCAweDkyLCAweDMxLCAweDIwLCAweDg1LCAweDMwLCAweDAwLCAweDAwLCAweDVlLCAweDkyLCAweDIyLCAweDEyLAorCTB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDQsIDB4MTEsIDB4MTIsIDB4NDgsIDB4MDMsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NWQsIDB4OTIsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5MiwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OTIsIDB4MGIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHgyMiwgMHg1MCwKKwkweDg1LCAweDcwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MmEsIDB4OTQsIDB4MDAsIDB4ZjIsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAorCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MTAsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNywgMHgzZiwgMHg0MywgMHgxMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDhhLCAweDg4LCAweDAxLCAweDAwLCAweDZlLCAweDkyLCAweDMwLCAweGExLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OTIsIDB4MjIsIDB4NDUsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTIsIDB4MTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0NSwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYSwgMHg5NCwgMHgwMCwgMHhmMiwKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MiwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTIsIDB4YTgsIDB4MDUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLAorCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHg5MiwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MiwgMHgwMCwgMHg0MiwKKwkweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDZhLCAweGIxLCAweDAxLCAweDAwLAorCTB4OGEsIDB4OTIsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4NDIsCisJMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg5MiwgMHgzNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweDI4LCAweGIxLAorCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4OTIsIDB4MjIsIDB4NGQsIDB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweGE4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MiwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDk0LCAweDkyLCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsIDB4MTEsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OWEsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5MiwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDkyLCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAorCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg5MiwgMHg0OCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OTIsIDB4MjgsIDB4YjEsIDB4OTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4OTIsIDB4MjIsIDB4NGMsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGE4LCAweDkyLCAweGE4LCAweGIxLAorCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4NDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAorCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjIsIDB4MWEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGIxLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAorCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTIsIDB4MjIsIDB4MGQsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxYSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGJhLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTIsIDB4ODMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDJkLCAweDAxLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2UsIDB4NDMsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwYiwgMHhlOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgzZiwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDE3LCAweDNkLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4YTEsIDB4MTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5MiwgMHgzMCwgMHg0NywKKwkweDE3LCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4NDIsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhlMSwgMHg5MiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGViLCAweDkyLCAweGEyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDEsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg5MiwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg5MiwgMHgzMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY1LCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTIsIDB4YTIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk4LCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIxLCAweGEyLCAweDk1LCAweDIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NGEsIDB4NDQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2UsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDkyLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDkzLCAweDQwLCAweDA4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDlkLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTMsIDB4MjIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwYSwgMHg5MywgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDkzLCAweDMxLCAweDVmLCAweDk3LCAweDA0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4NGIsIDB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg5MywgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTMsIDB4YTIsIDB4M2IsCisJMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDkzLCAweDE4LCAweDRhLAorCTB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5MywgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDBmLCAweDk4LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTMsIDB4MDAsIDB4MDUsCisJMHg0YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHhhNywgMHg1ZSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDRiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDkzLCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4MjIsIDB4NDUsCisJMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDliLCAweDA0LCAweDAwLCAweDRhLCAweDQ0LCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNmLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI3LCAweDkzLCAweGEyLCAweDNiLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHgxMiwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDVhLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhlNiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHhhMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDRjLCAweDAyLCAweGQwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDVjLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTMsIDB4YWEsIDB4NDEsIDB4M2IsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDFkLCAweDA0LCAweGNjLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTMsIDB4MjYsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMSwgMHgyMCwgMHhmMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDdhLCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDc5LCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweGEyLCAweDQxLAorCTB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDcyLCAweDkzLCAweGE4LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDY3LCAweDkzLCAweDAwLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHgxYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdiLCAweDkzLCAweDIyLCAweDQwLCAweDNiLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NWMsCisJMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgwMCwgMHg0MSwgMHgzYiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDhkLCAweDQ3LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDVmLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4ODgsIDB4OTMsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTUsIDB4OTMsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMCwgMHgyZCwgMHg0MiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTMsIDB4YTIsIDB4YTUsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDllLCAweDkzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAorCTB4YTMsIDB4OTMsIDB4YTAsIDB4YTUsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDkzLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorCTB4OTgsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHg4MCwgMHgwMCwKKwkweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLCAweGNiLCAweDkzLCAweDlmLCAweDQxLAorCTB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHhhMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkzLCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTMsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkMiwgMHg5MywgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5MywgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5MywgMHg5YywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDkzLCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MywgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDkzLCAweGEyLCAweDhhLAorCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKKwkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZWIsIDB4OTMsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAorCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA2LCAweDE0LCAweGVjLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDIyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MmEsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OTQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDk0LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NCwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NCwgMHg2MywgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDk0LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMzLCAweDk0LCAweDIyLCAweGYzLAorCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDQzLCAweDk0LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MywgMHg5NCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MywKKwkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDUsIDB4OTQsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTQsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDk0LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5NCwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5NCwgMHhhMiwgMHgwMiwKKwkweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDcyLCAweDk0LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NGUsIDB4OTQsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTQsIDB4MDAsIDB4MDIsCisJMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU2LCAweDk0LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5NCwgMHgyMiwgMHgxNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDcxLCAweDk0LCAweGEyLCAweDAyLAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4OTQsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDYzLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MjAsIDB4MTUsCisJMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZlLCAweDk0LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MzUsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGE3LCAweDkxLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDdiLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQxLCAweGEzLCAweDQxLCAweDAxLCAweDAwLAorCTB4N2YsIDB4OTQsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsIDB4OGUsIDB4OTQsIDB4YTAsIDB4ZjAsCisJMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLAorCTB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTQsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk0LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE0LCAweDk0LCAweGEyLCAweDA2LAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTQsIDB4MjIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5YywgMHg5NCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDk0LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTQsIDB4OTQsIDB4YTAsIDB4NDgsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLCAweGZjLCAweGM5LCAweDAxLCAweDAwLAorCTB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGIzLCAweDk0LCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTQsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsIDB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsCisJMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NSwgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5NCwgMHhhMCwgMHhmMCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsCisJMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweGRlLCAweDk0LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDk0LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NCwgMHg0MywgMHgzMCwKKwkweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweGVjLCAweDk0LCAweDI2LCAweDMwLAorCTB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTQsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwKKwkweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5NCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZCwgMHg5NCwgMHhhMiwgMHg0MCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZkLCAweDk0LCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NSwgMHhhMiwgMHg1ZiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDE1LCAweDk1LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTUsIDB4MjAsIDB4ZjIsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg5NSwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4MWQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGYzLAorCTB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsIDB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg5NSwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDgyLCAweGVjLCAweDAwLCAweDAwLAorCTB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJhLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MmQsIDB4MWMsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjAsCisJMHg4YSwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4YiwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDhhLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg5NSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDk1LCAweDAwLCAweDE0LCAweDgyLCAweDUwLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4OTUsIDB4MjIsIDB4ZjIsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDk1LCAweDlmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLCAweGJlLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTQsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTUsIDB4MjMsIDB4ZjAsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NSwgMHgyMywgMHg5MiwgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweGM5LCAweDA0LCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg4OSwgMHgwMCwgMHg0YSwgMHg5NCwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5NSwgMHg2OCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NSwgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDk1LCAweDIzLCAweDQwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4NTQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDk1LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5NSwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwKKwkweDI0LCAweGVjLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsIDB4MzgsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDk1LCAweGEzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg5NSwgMHgyMiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAorCTB4NmUsIDB4OTUsIDB4MjMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweGEwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NSwgMHg5ZiwgMHg0MSwKKwkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTUsIDB4MDAsIDB4NDEsCisJMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDJmLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwgMHgzZSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwKKwkweGUwLCAweGVkLCAweDAwLCAweDAwLCAweGM4LCAweDAwLCAweDIwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTUsIDB4YTMsIDB4NWYsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDIyLCAweGYyLAorCTB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg2LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4OTUsIDB4MWYsIDB4NDMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDk1LCAweDlmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ0LCAweDg0LCAweGY0LCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MmUsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCisJMHg4OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5NSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGExLCAweDk1LCAweGEyLCAweDQwLCAweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDk1LCAweDYyLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg4LCAweGU0LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsCisJMHg4NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGE3LCAweDk1LCAweDIwLCAweDQzLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHg0MywgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDAwLCAweDJkLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDk1LCAweGEyLCAweDEyLAorCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg5NSwgMHhhMCwgMHhmMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MmQsIDB4MTIsIDB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTUsIDB4YTMsIDB4NDEsCisJMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg5NSwgMHhhMywgMHg0MiwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGJlLCAweDk1LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTUsIDB4YTAsIDB4MTcsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDk1LCAweDIyLCAweDQwLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLAorCTB4MGMsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHg5NSwgMHhhMCwgMHg0MSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwKKwkweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDQxLAorCTB4ODcsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLCAweGQxLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGQ3LCAweDk1LCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4MjgsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDdlLCAweDk0LCAweDFkLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDVmLAorCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTQsIDB4MmYsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMiwgMHg5NSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDk2LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsCisJMHgwNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGQwLCAweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTUsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTUsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDNiLCAweDk2LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGM4LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOSwgMHg5NSwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NiwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsCisJMHgzYywgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDUzLCAweGIzLCAweDAxLCAweDAwLCAweDJiLCAweDk2LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MmIsIDB4OTYsIDB4YTIsIDB4NTEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHgxZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LAorCTB4M2EsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHgwNSwgMHgwMCwgMHg0MCwgMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDRkLCAweGIzLCAweDAxLCAweDAwLCAweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LCAweDIxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKKwkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCisJMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAorCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMzUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc3JjdnVjb2RlLmgKQEAgLTAsMCArMSwyMDUgQEAKKyNkZWZpbmUgT0FTSVNfUkNWVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKKyNkZWZpbmUgT0FTSVNfUkNWVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTA6MjgiCisKK3N0YXRpYyB1MzIgT2FzaXNSY3ZVQ29kZUxlbiA9IDUxMjsKKworc3RhdGljIHU4IE9hc2lzUmN2VUNvZGVbMjU2MF0gPQoreworMHg0NywgMHg3NSwgMHgwMSwgMHgwMCwgMHgwNCwgMHhhMCwgMHgxMywgMHgwMSwgMHgwMCwgMHgxYywgMHhiNywgMHg1YiwgMHgwOSwKKzB4MzAsIDB4MDAsIDB4YjYsIDB4NWYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4M2IsCisweDc4LCAweDNhLCAweDAwLCAweDFjLCAweGEyLCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweDAxLCAweDcwLAorMHgxOCwgMHhhZCwgMHg3YiwgMHhmMSwgMHhmZiwgMHgxYywgMHhiMywgMHg3YiwgMHhhOSwgMHhhYSwgMHgxZSwgMHhiNCwgMHg3YiwKKzB4MDEsIDB4MGMsIDB4MWMsIDB4YjUsIDB4N2IsIDB4MGQsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4NjQsIDB4MDgsCisweDBjLCAweDMxLCAweDVhLCAweDcwLCAweDA0LCAweDBjLCAweDMxLCAweDVhLCAweDgwLCAweDA0LCAweDBjLCAweDMxLCAweDRlLAorMHg5MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0YSwgMHhhMCwgMHgwMCwgMHgwOSwgMHgyNSwgMHg1NSwgMHhjMCwgMHgwNCwgMHgwYywKKzB4MzEsIDB4NTIsIDB4YjAsIDB4MDAsIDB4ZTksIDB4MjQsIDB4NTUsIDB4YzAsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4MDAsIDB4MWMsCisweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweDA2LCAweDU2LCAweDMyLCAweGQ0LCAweDA4LCAweDA3LCAweDlkLAorMHgwMCwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKKzB4MDYsIDB4NTYsIDB4NWUsIDB4YzAsIDB4MDQsIDB4YTAsIDB4MzAsIDB4NTQsIDB4MDMsIDB4MDAsIDB4YWMsIDB4MzAsIDB4NTUsCisweDAzLCAweDAwLCAweGNkLCAweDAzLCAweDNhLCAweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDFjLCAweDYwLAorMHg4ZSwgMHgzMSwgMHg1NCwgMHgwOSwgMHgyOSwgMHgyNSwgMHg1NSwgMHgwMywgMHgwMCwgMHg4MCwgMHg4ZSwgMHgzMSwgMHg1NCwKKzB4MDksIDB4OGMsIDB4MzAsIDB4OTEsIDB4MDAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsCisweDMxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDA0LCAweDQ3LCAweDFjLCAweDY1LCAweGMwLCAweDA0LAorMHg0NywgMHgxYywgMHg1NSwgMHgwMywgMHgwMCwgMHg2YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg0ZCwgMHgzNCwgMHgwMiwKKzB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YzgsCisweDgzLCAweDM3LCAweDAwLCAweDFjLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDY0LCAweDAwLAorMHgwNCwgMHhhMCwgMHgwZiwgMHgzMCwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHg3YiwgMHhmYiwKKzB4ZjIsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDAsIDB4MWMsIDB4YjQsIDB4N2IsIDB4ZmQsIDB4MDMsIDB4MWMsCisweDgwLCAweDBlLCAweDMwLCAweDU0LCAweDA5LCAweGUwLCAweGZiLCAweDA1LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDhjLAorMHgwMywgMHgwMCwgMHhiMywgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhlYywgMHg3MCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4ZWMsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTMsIDB4MDAsIDB4NjEsIDB4NzYsIDB4OGQsIDB4YzMsCisweDA0LCAweGMwLCAweDhkLCAweDMxLCAweDU0LCAweDA5LCAweGUwLCAweDdiLCAweDAwLCAweGMwLCAweDFmLCAweGEwLCAweGZkLAorMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgzMywgMHgwNSwgMHgwMCwgMHgxYywgMHhkNCwgMHgwMywgMHgwMCwgMHgzYywgMHgxYywKKzB4ZDQsIDB4ZDMsIDB4MWIsIDB4MDAsIDB4MWMsIDB4YzAsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NWMsCisweDEzLCAweDA0LCAweDhlLCAweDhlLCAweDMyLCAweDU0LCAweDA5LCAweDViLCAweDgwLCAweDVlLCAweDEzLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwKKzB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4ZmMsIDB4N2YsIDB4MWMsIDB4YTAsIDB4MDEsCisweGEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAorMHhjMCwgMHgwMywgMHhmYywgMHgwMywgMHgxYywgMHhmNSwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwgMHhlNiwKKzB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjUsCisweDAyLCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweDdhLCAweDdlLCAweDAyLCAweDAwLAorMHgxYywgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHhhZiwgMHgwMywKKzB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsCisweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDNkLCAweGFhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweGFjLAorMHgxMSwgMHgwNCwgMHhkNCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHhiNSwgMHgzZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwKKzB4ZmIsIDB4ZmQsIDB4ZmYsIDB4MWYsIDB4ODAsIDB4MmMsIDB4NmMsIDB4MDMsIDB4MDAsIDB4YjksIDB4M2EsIDB4OWUsIDB4MDEsCisweDAwLCAweDc1LCAweDNiLCAweDAyLCAweDAwLCAweDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLCAweDEwLCAweGRiLCAweDgzLAorMHgxNiwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwgMHgyMSwgMHhjMSwgMHgwNCwgMHhiOSwgMHgzYiwgMHg4ZCwgMHhjMSwgMHgwNCwKKzB4OGIsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmIsIDB4MmMsIDB4MzUsIDB4YzEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsCisweDExLCAweDAwLCAweGNiLCAweDJjLCAweDc5LCAweGMxLCAweDA0LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLAorMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHg1NCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgxYywgMHg0OSwgMHgyNSwgMHhiMSwgMHgwMSwKKzB4MDAsIDB4YWIsIDB4MmMsIDB4ODEsIDB4YzEsIDB4MDQsIDB4YTcsIDB4MWQsIDB4NTUsIDB4MDMsIDB4MDAsIDB4Y2MsIDB4MzMsCisweDA5LCAweDAwLCAweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLCAweDAwLCAweDFjLAorMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhZSwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwKKzB4NTQsIDB4MDksIDB4ZDQsIDB4MDcsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4OTksIDB4M2EsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YmIsCisweDM4LCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGZjLCAweDAxLAorMHgwNCwgMHhkYiwgMHgzYiwgMHg3ZSwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwKKzB4ZmEsIDB4MDUsIDB4MWMsIDB4MjcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCisweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLAorMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywKKzB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MDYsIDB4MDIsIDB4MDAsCisweDFjLCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweGFmLCAweDAzLCAweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLAorMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwKKzB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsCisweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDAwLCAweDNkLCAweDAyLCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHg1OCwgMHgxMiwgMHgwMCwgMHhjYiwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDUsIDB4MDAsIDB4MWMsIDB4NjAsIDB4MmMsCisweDAwLCAweDAwLCAweDFjLCAweGM3LCAweDFjLCAweGM5LCAweDAyLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAorMHg1MywgMHgwNywgMHgwMiwgMHgwMCwgMHgxYywgMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHgzMiwKKzB4NTQsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MTksIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDQsIDB4NDYsCisweDdhLCAweGNhLCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LAorMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhiMywgMHg3YiwKKzB4MDEsIDB4YzAsIDB4MWYsIDB4NzQsIDB4MGUsIDB4MzAsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4OWMsIDB4MDAsIDB4MWMsCisweDgwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweGFjLAorMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywgMHgyYiwgMHgwMCwgMHgxYywgMHhkNCwKKzB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4ODAsIDB4NzYsIDB4N2QsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsCisweDAwLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweGM3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweDgwLCAweDJjLAorMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2YywgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwKKzB4YWIsIDB4MmQsIDB4ZDksIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4YjUsIDB4YzIsIDB4MDQsIDB4OGIsIDB4MmQsIDB4MDEsCisweDAwLCAweDFjLCAweDY5LCAweDI1LCAweDAxLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweGNiLAorMHgyZiwgMHgwOSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywKKzB4MDAsIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4NDYsIDB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsCisweDMyLCAweDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE5LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDA0LAorMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHhiNSwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwKKzB4NTQsIDB4MDksIDB4NzMsIDB4ZWMsIDB4MmEsIDB4MDMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweDI4LCAweDAzLCAweDAwLCAweGM3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDI4LCAweDEzLAorMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHhkNywgMHgyMiwgMHgwMCwgMHgxYywgMHg3NSwgMHg1NiwKKzB4N2UsIDB4MTMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTcsIDB4MWMsIDB4NDUsIDB4MDMsIDB4MDQsCisweGU3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweDgwLCAweDJjLCAweDAwLAorMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHhiOSwKKzB4N2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsCisweDFjLCAweGNiLCAweDJmLCAweDAxLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLCAweDAzLCAweDFjLCAweDAwLCAweDAwLAorMHg4YywgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwZCwgMHgwNCwgMHgxYywKKzB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsCisweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDFkLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDFjLCAweGM3LAorMHg5YywgMHg4YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4YywgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwKKzB4MWMsIDB4YzAsIDB4MWQsIDB4ZGMsIDB4ZDMsIDB4MDgsIDB4MjcsIDB4OWQsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4YTAsIDB4ZWUsCisweDQ2LCAweGQ0LCAweDAwLCAweGZiLCAweDc1LCAweDA5LCAweDE0LCAweDA0LCAweDIwLCAweDdiLCAweDA2LCAweDAwLCAweDFjLAorMHhjMCwgMHgxYywgMHgxYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhkMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ZjQsIDB4MDAsIDB4YzAsIDB4ZWYsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4MjAsIDB4MjUsIDB4NWMsIDB4MTQsIDB4MDQsIDB4NjAsCisweGI3LCAweGQyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE1LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLAorMHgxYywgMHhjYywgMHgzMywgMHgwNSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgwYywgMHhjNSwgMHgwNCwgMHg2MCwgMHhiNywKKzB4MGUsIDB4MDUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MTUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NWMsIDB4YzQsIDB4MDQsCisweGMwLCAweDFkLCAweDk4LCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDY4LCAweGM0LCAweDA0LCAweDA3LCAweDlkLCAweDAwLAorMHgwMCwgMHgxYywgMHgxYiwgMHg3NCwgMHhmZCwgMHhmMywgMHgwNCwgMHhhNiwgMHg3YiwgMHhmMSwgMHgwMywgMHgxYywgMHhhMCwKKzB4MGYsIDB4NjksIDB4NTQsIDB4MDksIDB4ZTAsIDB4N2IsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4MzksIDB4N2YsIDB4MDIsIDB4MDAsCisweDFjLCAweDA3LCAweDFkLCAweDlkLCAweGMzLCAweDA0LCAweGE2LCAweDdiLCAweGFkLCAweDAzLCAweDFjLCAweDAwLCAweDAwLAorMHg2OCwgMHhjNCwgMHgwNCwgMHhlMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwKKzB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4YWMsCisweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGFjLCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLAorMHgyZiwgMHgwMSwgMHgxOCwgMHgxZCwgMHhjNywgMHg5ZiwgMHgwMCwgMHgwYiwgMHgxYywgMHgwMCwgMHgwMCwgMHhhYywgMHhjMywKKzB4MDQsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4YjMsCisweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweGFjLCAweGMzLCAweDA0LAorMHhhMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhhMCwgMHhlZSwgMHhhMiwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywKKzB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MDksIDB4MDQsIDB4MWMsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweGFjLCAweGMzLCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwYywgMHhjNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzNCwgMHgwNSwgMHhjYywgMHhiMywKKzB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTUsIDB4MDIsIDB4MWMsIDB4NDcsIDB4OWQsIDB4NTQsIDB4YzQsIDB4MDQsCisweDAwLCAweDAwLCAweDc4LCAweDQ0LCAweDAwLCAweDgwLCAweDFkLCAweDdjLCAweDU0LCAweDA0LCAweDg3LCAweDFkLCAweDhkLAorMHgwNCwgMHgwMCwgMHhjZSwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHhlZiwgMHg3NiwgMHg5ZCwgMHhjNCwgMHgwNCwgMHhhNCwKKzB4NzcsIDB4OGQsIDB4MjQsIDB4MDksIDB4ZTQsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzQsIDB4NzYsIDB4MDEsIDB4MDAsCisweDFjLCAweDAwLCAweDAwLCAweDk4LCAweDU0LCAweDA0LCAweGQ3LCAweDc2LCAweDAxLCAweDUwLCAweDE4LCAweGY2LCAweDc2LAorMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4Y2MsIDB4MzAsIDB4NDUsIDB4YzUsIDB4MDQsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsCisweDAwLCAweDFjLCAweGMwLCAweDU5LCAweDAxLCAweDAwLCAweDFjLCAweGY1LCAweDc3LCAweDI5LCAweGM1LCAweDA0LCAweGUwLAorMHgzMCwgMHhkYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg0YywgMHhiMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0YywgMHhmNCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDQsIDB4MDAsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDA5LCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLAorMHhjYywgMHgzMywgMHgxOSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywKKzB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsIDB4MDQsIDB4Y2MsCisweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDExLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LAorMHgwNCwgMHgwMCwgMHg3YiwgMHgwMCwgMHg4MCwgMHgxYywgMHhhZSwgMHg3NywgMHg0NSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4YzAsIDB4MDQsIDB4ZDMsIDB4OGIsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4NjAsIDB4N2EsIDB4M2MsIDB4MDAsIDB4MWMsCisweDYwLCAweDRjLCAweGMwLCAweDA0LCAweDAwLCAweGMwLCAweDJmLCAweDIwLCAweDA1LCAweDFmLCAweGUwLCAweDMwLCAweGIwLAorMHgwNCwgMHgwMCwgMHg4MCwgMHgyNSwgMHhiMCwgMHgwNCwgMHgwMCwgMHhiNSwgMHg1YiwgMHhiMSwgMHgwNCwgMHgwNCwgMHg2OSwKKzB4MjYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MWQsIDB4MDAsIDB4MDAsCisweDFjLCAweGE5LCAweDI1LCAweDQ1LCAweDA1LCAweDAwLCAweGVlLCAweDMwLCAweDAwLCAweDAwLCAweDFjLCAweGFmLCAweDc3LAorMHgwMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgyNCwgMHgwNCwgMHhiNCwgMHg1ZiwgMHgwMSwgMHg0MCwgMHgxOCwKKzB4MDcsIDB4OWQsIDB4NDgsIDB4NTUsIDB4MDQsIDB4YjcsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTYsIDB4NzYsIDB4MDEsCisweDAwLCAweDFjLCAweDQ3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDMzLCAweDAxLCAweDYwLCAweDE4LCAweGE0LAorMHgyZiwgMHgwMSwgMHg2MCwgMHgxOCwgMHg2NCwgMHg3NywgMHgwMSwgMHg2MCwgMHgxOCwgMHgyNCwgMHg3NywgMHgwMSwgMHg2MCwKKzB4MTgsIDB4NDQsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NjQsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2YsCisweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDNiLCAweDAxLCAweDAwLCAweDFjLCAweDUzLCAweDdiLCAweDAwLCAweGMwLCAweDFjLAorMHhkMywgMHhjZiwgMHgxYiwgMHgwMCwgMHgxYywgMHg1MywgMHg0ZiwgMHgwMiwgMHgwMCwgMHgxYywgMHhkYSwgMHhjZiwgMHgwMCwKKzB4YzAsIDB4MWYsIDB4ZDUsIDB4NTcsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZDMsIDB4ZDMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ZDQsCisweDUzLCAweDBmLCAweDAwLCAweDFjLCAweGUwLCAweDI5LCAweDAwLCAweDAwLCAweDFjLCAweGY1LCAweGQ1LCAweGIwLCAweDA1LAorMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg1NSwgMHgwNCwgMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywKKzB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsCisweGY1LCAweDU1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGI0LCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLAorMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsCisweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLAorMHgwMSwgMHgyMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwMCwgMHgxMCwKKzB4ODksIDB4MjUsIDB4NjEsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsCisweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLAorMHgwMCwgMHg2MCwgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYywgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywKKzB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4NDAsIDB4MWMsCisweDZjLCAweGMwLCAweDA0LCAweDQwLCAweDFjLCAweDljLCAweGMwLCAweDA0LCAweGE3LCAweDc3LCAweDU1LCAweGMzLCAweDA0LAorMHgwMCwgMHgwMCwgMHhjNCwgMHhjMCwgMHgwNCwgMHgyNywgMHgxZCwgMHhmMSwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwKKzB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNWRjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpYy5oCisgKgorICogVGhpcyBpcyB0aGUgYmFzZSBzZXQgb2YgaGVhZGVyIGRlZmluaXRpb25zIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX19TTElDX0RSSVZFUl9IX18KKyNkZWZpbmUgX19TTElDX0RSSVZFUl9IX18KKworCitzdHJ1Y3Qgc2xpY19zcGlubG9jayB7CisJc3BpbmxvY2tfdAlsb2NrOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cit9OworCisjZGVmaW5lIFNMSUNfUlNQUV9QQUdFU19HQiAgICAgICAgMTAKKyNkZWZpbmUgU0xJQ19SU1BRX0JVRlNJTlBBR0UgICAgICAoUEFHRV9TSVpFIC8gU0xJQ19SU1BCVUZfU0laRSkKKworc3RydWN0IHNsaWNfcnNwcXVldWUgeworICAgIHUzMiAgICAgICAgICAgICBvZmZzZXQ7CisgICAgdTMyICAgICAgICAgICAgIHBhZ2VpbmRleDsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX3BhZ2VzOworICAgIHN0cnVjdCBzbGljX3JzcGJ1ZiAqcnNwYnVmOworICAgIHUzMiAqdmFkZHJbU0xJQ19SU1BRX1BBR0VTX0dCXTsKKyAgICBkbWFfYWRkcl90ICAgICAgICAgIHBhZGRyW1NMSUNfUlNQUV9QQUdFU19HQl07Cit9OworCisjZGVmaW5lIFNMSUNfUkNWUV9FWFBBTlNJT04gICAgICAgICAxCisjZGVmaW5lIFNMSUNfUkNWUV9FTlRSSUVTICAgICAgICAgICAoMjU2ICogU0xJQ19SQ1ZRX0VYUEFOU0lPTikKKyNkZWZpbmUgU0xJQ19SQ1ZRX01JTkVOVFJJRVMgICAgICAgIChTTElDX1JDVlFfRU5UUklFUyAvIDIpCisjZGVmaW5lIFNMSUNfUkNWUV9NQVhfUFJPQ0VTU19JU1IgICAoKFNMSUNfUkNWUV9FTlRSSUVTICogNCkpCisjZGVmaW5lIFNMSUNfUkNWUV9SQ1ZCVUZTSVpFICAgICAgICAyMDQ4CisjZGVmaW5lIFNMSUNfUkNWUV9GSUxMRU5UUklFUyAgICAgICAoMTYgKiBTTElDX1JDVlFfRVhQQU5TSU9OKQorI2RlZmluZSBTTElDX1JDVlFfRklMTFRIUkVTSCAgICAgICAgKFNMSUNfUkNWUV9FTlRSSUVTIC0gU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKQorCitzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSB7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgKmhlYWQ7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgKnRhaWw7CisgICAgdTMyICAgICAgICAgICAgY291bnQ7CisgICAgdTMyICAgICAgICAgICAgc2l6ZTsKKyAgICB1MzIgICAgICAgICAgICBlcnJvcnM7Cit9OworCitzdHJ1Y3Qgc2xpY19yY3ZidWZfaW5mbyB7CisgICAgdTMyICAgICBpZDsKKyAgICB1MzIgICAgIHN0YXJ0dGltZTsKKyAgICB1MzIgICAgIHN0b3B0aW1lOworICAgIHUzMiAgICAgc2xpY3dvcmxkOworICAgIHUzMiAgICAgbGFzdHRpbWU7CisgICAgdTMyICAgICBsYXN0aWQ7Cit9OworLyoKKyBTTElDIEhhbmRsZSBzdHJ1Y3R1cmUuICBVc2VkIHRvIHJlc3RyaWN0IGhhbmRsZSB2YWx1ZXMgdG8KKyAzMiBiaXRzIGJ5IHVzaW5nIGFuIGluZGV4IHJhdGhlciB0aGFuIGFuIGFkZHJlc3MuCisgU2ltcGxpZmllcyB1Y29kZSBpbiA2NC1iaXQgc3lzdGVtcworKi8KK3N0cnVjdCBzbGljX2hhbmRsZV93b3JkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1c2hvcnQgICAgICBpbmRleDsKKwkJCXVzaG9ydCAgICAgIGJvdHRvbWJpdHM7IC8qIHRvIGRlbm90ZSBudW0gYnVmcyB0byBjYXJkICovCisJCX0gIHBhcnRzOworCQl1MzIgICAgICAgICB3aG9sZTsKKwl9ICBoYW5kbGU7Cit9OworCitzdHJ1Y3Qgc2xpY19oYW5kbGUgeworICAgIHN0cnVjdCBzbGljX2hhbmRsZV93b3JkICB0b2tlbjsgIC8qIHRva2VuIHBhc3NlZCBiZXR3ZWVuIGhvc3QgYW5kIGNhcmQqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgICAgICB0eXBlOworICAgIHZvaWQgKmFkZHJlc3M7ICAgIC8qIGFjdHVhbCBhZGRyZXNzIG9mIHRoZSBvYmplY3QqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisgICAgc3RydWN0IHNsaWNfaGFuZGxlICAgICAgICpvdGhlcl9oYW5kbGU7CisgICAgc3RydWN0IHNsaWNfaGFuZGxlICAgICAgICpuZXh0OworfTsKKworI2RlZmluZSBTTElDX0hBTkRMRV9GUkVFICAgICAgICAweDAwMDAKKyNkZWZpbmUgU0xJQ19IQU5ETEVfREFUQSAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNMSUNfSEFORExFX0NNRCAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTTElDX0hBTkRMRV9DT05URVhUICAgICAweDAwMDMKKyNkZWZpbmUgU0xJQ19IQU5ETEVfVEVBTSAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgaGFuZGxlX2luZGV4ICAgICAgICBoYW5kbGUucGFydHMuaW5kZXgKKyNkZWZpbmUgaGFuZGxlX2JvdHRvbSAgICAgICBoYW5kbGUucGFydHMuYm90dG9tYml0cworI2RlZmluZSBoYW5kbGVfdG9rZW4gICAgICAgIGhhbmRsZS53aG9sZQorCisjZGVmaW5lIFNMSUNfSE9TVENNRF9TSVpFICAgIDUxMgorCitzdHJ1Y3Qgc2xpY19ob3N0Y21kIHsKKyAgICBzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kICBjbWQ2NDsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIHR5cGU7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgICAgICAgICAqc2tiOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgcGFkZHJsOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgcGFkZHJoOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgYnVzeTsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIGNtZHNpemU7CisgICAgdXNob3J0ICAgICAgICAgICAgICAgICAgICAgbnVtYnVmczsKKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGUgICAgKnBzbGljX2hhbmRsZTsvKiBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGNvbW1hbmQgKi8KKyAgICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICAgICpuZXh0OworICAgIHN0cnVjdCBzbGljX2hvc3RjbWQgICAgKm5leHRfYWxsOworfTsKKworI2RlZmluZSBTTElDX0NNRFFfQ01EU0lOUEFHRSAgICAoUEFHRV9TSVpFIC8gU0xJQ19IT1NUQ01EX1NJWkUpCisjZGVmaW5lIFNMSUNfQ01EX0RVTUIgICAgICAgICAgICAzCisjZGVmaW5lIFNMSUNfQ01EUV9JTklUQ01EUyAgICAgICAyNTYKKyNkZWZpbmUgU0xJQ19DTURRX01BWENNRFMgICAgICAgIDI1NgorI2RlZmluZSBTTElDX0NNRFFfTUFYT1VUU1RBTkQgICAgU0xJQ19DTURRX01BWENNRFMKKyNkZWZpbmUgU0xJQ19DTURRX01BWFBBR0VTICAgICAgIChTTElDX0NNRFFfTUFYQ01EUyAvIFNMSUNfQ01EUV9DTURTSU5QQUdFKQorI2RlZmluZSBTTElDX0NNRFFfSU5JVFBBR0VTICAgICAgKFNMSUNfQ01EUV9JTklUQ01EUyAvIFNMSUNfQ01EUV9DTURTSU5QQUdFKQorCitzdHJ1Y3Qgc2xpY19jbWRxbWVtIHsKKwlpbnQgcGFnZWNudDsKKwl1MzIgKnBhZ2VzW1NMSUNfQ01EUV9NQVhQQUdFU107CisJZG1hX2FkZHJfdCBkbWFfcGFnZXNbU0xJQ19DTURRX01BWFBBR0VTXTsKK307CisKK3N0cnVjdCBzbGljX2NtZHF1ZXVlIHsKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoZWFkOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKnRhaWw7CisJaW50IGNvdW50OworCXN0cnVjdCBzbGljX3NwaW5sb2NrIGxvY2s7Cit9OworCisjaWZkZWYgU1RBVFVTX1NVQ0NFU1MKKyN1bmRlZiBTVEFUVVNfU1VDQ0VTUworI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKKyNkZWZpbmUgU1RBVFVTX0VSUk9SICAgICAgICAgICAgICAgLTIKKyNkZWZpbmUgU1RBVFVTX05PVF9TVVBQT1JURUQgICAgICAgLTMKKyNkZWZpbmUgU1RBVFVTX0JVRkZFUl9UT09fU0hPUlQgICAgLTQKKworI2RlZmluZSBTTElDX01BWF9DQVJEUyAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU0xJQ19NQVhfUE9SVFMgICAgICAgICAgICAgIDQgICAgICAgIC8qIE1heCAjIG9mIHBvcnRzIHBlciBjYXJkICAgKi8KKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorLyoKK0R1bXAgYnVmZmVyIHNpemUKKworVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKK2dpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KK01vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbworanVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KKyovCisjZGVmaW5lIERVTVBfQlVGX1NJWkUgICAgICAgICAgICAgICAweDNDMDAKKyNlbmRpZgorCisKK3N0cnVjdCBtY2FzdF9hZGRyZXNzIHsKKwl1bnNpZ25lZCBjaGFyIGFkZHJlc3NbNl07CisJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm5leHQ7Cit9OworCisjZGVmaW5lIENBUkRfRE9XTiAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDQVJEX1VQICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0FSRF9GQUlMICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENBUkRfRElBRyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDQVJEX1NMRUVQICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBBREFQVF9ET1dOICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQURBUFRfVVAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFEQVBUX0ZBSUwgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQURBUFRfU0xFRVAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgQURBUFRfRkxBR1NfQk9PVFRJTUUgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQURBUFRfRkxBR1NfSVM2NEJJVCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQURBUFRfRkxBR1NfUEVORElOR0xJTktET1dOICAgICAweDAwMDQKKyNkZWZpbmUgQURBUFRfRkxBR1NfRklCRVJNRURJQSAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9DS1NfQUxMT0NFRCAgICAgICAweDAwMTAKKyNkZWZpbmUgQURBUFRfRkxBR1NfSU5UX1JFR0lTVEVSRUQgICAgICAweDAwMjAKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9BRF9USU1FUl9TRVQgICAgICAweDAwNDAKKyNkZWZpbmUgQURBUFRfRkxBR1NfU1RBVFNfVElNRVJfU0VUICAgICAweDAwODAKKyNkZWZpbmUgQURBUFRfRkxBR1NfUkVTRVRfVElNRVJfU0VUICAgICAweDAxMDAKKworI2RlZmluZSBMSU5LX0RPV04gICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19DT05GSUcgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfVVAgICAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExJTktfMTBNQiAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LXzEwME1CICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19BVVRPU1BFRUQgICAgICAgICAweDAyCisjZGVmaW5lIExJTktfMTAwME1CICAgICAgICAgICAgMHgwMworI2RlZmluZSBMSU5LXzEwMDAwTUIgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBMSU5LX0hBTEZEICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19GVUxMRCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfQVVUT0QgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIE1BQ19ESVJFQ1RFRCAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQUNfQkNBU1QgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUFDX01DQVNUICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1BQ19QUk9NSVNDICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNQUNfTE9PUEJBQ0sgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUFDX0FMTE1DQVNUICAgICAweDAwMDAwMDIwCisKKyNkZWZpbmUgU0xJQ19EVVBMRVgoeCkgICAgKCh4ID09IExJTktfRlVMTEQpID8gIkZEWCIgOiAiSERYIikKKyNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4ID09IExJTktfMTAwTUIpID8gIjEwME1iIiA6ICgoeCA9PSBMSU5LXzEwMDBNQikgP1wKKwkJCQkiMTAwME1iIiA6ICIgMTBNYiIpKQorI2RlZmluZSBTTElDX0xJTktTVEFURSh4KSAoKHggPT0gTElOS19ET1dOKSA/ICJEb3duIiA6ICJVcCAgIikKKyNkZWZpbmUgU0xJQ19BREFQVEVSX1NUQVRFKHgpICgoeCA9PSBBREFQVF9VUCkgPyAiVVAiIDogIkRvd24iKQorI2RlZmluZSBTTElDX0NBUkRfU1RBVEUoeCkgICAgKCh4ID09IENBUkRfVVApID8gIlVQIiA6ICJEb3duIikKKworc3RydWN0IHNsaWNfaWZhY2Vfc3RhdHMgeworICAgIC8qCisgICAgICogU3RhdHMKKyAgICAgKi8KKyAgICB1NjQgICAgICAgIHhtdF9ieXRlczsKKyAgICB1NjQgICAgICAgIHhtdF91Y2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9tY2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9iY2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9lcnJvcnM7CisgICAgdTY0ICAgICAgICB4bXRfZGlzY2FyZHM7CisgICAgdTY0ICAgICAgICB4bWl0X2NvbGxpc2lvbnM7CisgICAgdTY0ICAgICAgICB4bWl0X2V4Y2Vzc194bWl0X2NvbGxpc2lvbnM7CisgICAgdTY0ICAgICAgICByY3ZfYnl0ZXM7CisgICAgdTY0ICAgICAgICByY3ZfdWNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfbWNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfYmNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfZXJyb3JzOworICAgIHU2NCAgICAgICAgcmN2X2Rpc2NhcmRzOworfTsKKworc3RydWN0IHNsaWNjcF9zdGF0cyB7CisgICAgdTY0ICAgICAgICB4bWl0X3RjcF9zZWdzOworICAgIHU2NCAgICAgICAgeG1pdF90Y3BfYnl0ZXM7CisgICAgdTY0ICAgICAgICByY3ZfdGNwX3NlZ3M7CisgICAgdTY0ICAgICAgICByY3ZfdGNwX2J5dGVzOworfTsKKworc3RydWN0IHNsaWNuZXRfc3RhdHMgeworICAgIHN0cnVjdCBzbGljY3Bfc3RhdHMgICAgICAgIHRjcDsKKyAgICBzdHJ1Y3Qgc2xpY19pZmFjZV9zdGF0cyAgICAgIGlmYWNlOworfTsKKworI2RlZmluZSBTTElDX0xPQURUSU1FUl9QRVJJT0QgICAgIDEKKyNkZWZpbmUgU0xJQ19JTlRBR0dfREVGQVVMVCAgICAgICAyMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzAgICAgICAgICAgICAgMAorI2RlZmluZSBTTElDX0xPQURfMSAgICAgICAgICAgICAgIDgwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzIgICAgICAgICAgICAgICAxMDAwMAorI2RlZmluZSBTTElDX0xPQURfMyAgICAgICAgICAgICAgIDEyMDAwCisjZGVmaW5lIFNMSUNfTE9BRF80ICAgICAgICAgICAgICAgMTQwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzUgICAgICAgICAgICAgICAxNjAwMAorI2RlZmluZSBTTElDX0lOVEFHR18xICAgICAgICAgICAgIDUwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzIgICAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzMgICAgICAgICAgICAgMTUwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzQgICAgICAgICAgICAgMjAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzUgICAgICAgICAgICAgMjUwCisjZGVmaW5lIFNMSUNfTE9BRF8xR0IgICAgICAgICAgICAgMzAwMAorI2RlZmluZSBTTElDX0xPQURfMkdCICAgICAgICAgICAgIDYwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzNHQiAgICAgICAgICAgICAxMjAwMAorI2RlZmluZSBTTElDX0xPQURfNEdCICAgICAgICAgICAgIDI0MDAwCisjZGVmaW5lIFNMSUNfTE9BRF81R0IgICAgICAgICAgICAgNDgwMDAKKyNkZWZpbmUgU0xJQ19JTlRBR0dfMUdCICAgICAgICAgICA1MAorI2RlZmluZSBTTElDX0lOVEFHR18yR0IgICAgICAgICAgIDc1CisjZGVmaW5lIFNMSUNfSU5UQUdHXzNHQiAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzRHQiAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzVHQiAgICAgICAgICAgMTAwCisKK3N0cnVjdCBldGhlcl9oZWFkZXIgeworICAgIHVuc2lnbmVkIGNoYXIgICAgZXRoZXJfZGhvc3RbNl07CisgICAgdW5zaWduZWQgY2hhciAgICBldGhlcl9zaG9zdFs2XTsKKyAgICB1c2hvcnQgICBldGhlcl90eXBlOworfTsKKworc3RydWN0IHNsaWNjYXJkIHsKKyAgICB1aW50ICAgICAgICAgICAgICBidXNudW1iZXI7CisgICAgdWludCAgICAgICAgICAgICAgc2xvdG51bWJlcjsKKyAgICB1aW50ICAgICAgICAgICAgICBzdGF0ZTsKKyAgICB1aW50ICAgICAgICAgICAgICBjYXJkbnVtOworICAgIHVpbnQgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKyAgICB1aW50ICAgICAgICAgICAgICBhZGFwdGVyc19hY3RpdmF0ZWQ7CisgICAgdWludCAgICAgICAgICAgICAgYWRhcHRlcnNfYWxsb2NhdGVkOworICAgIHVpbnQgICAgICAgICAgICAgIGFkYXB0ZXJzX3NsZWVwaW5nOworICAgIHVpbnQgICAgICAgICAgICAgIGdlbm51bWJlcjsKKyAgICB1MzIgICAgICAgICAgIGV2ZW50czsKKyAgICB1MzIgICAgICAgICAgIGxvYWRsZXZlbF9jdXJyZW50OworICAgIHUzMiAgICAgICAgICAgbG9hZDsKKyAgICB1aW50ICAgICAgICAgICAgICByZXNldF9pbl9wcm9ncmVzczsKKyAgICB1MzIgICAgICAgICAgIHBpbmdzdGF0dXM7CisgICAgdTMyICAgICAgICAgICBiYWRfcGluZ3N0YXR1czsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCBsb2FkdGltZXI7CisgICAgdTMyICAgICAgICAgICBsb2FkdGltZXJzZXQ7CisgICAgdWludCAgICAgICAgICAgICAgY29uZmlnX3NldDsKKyAgICBzdHJ1Y3Qgc2xpY19jb25maWcgIGNvbmZpZzsKKyAgICBzdHJ1Y3QgZGVudHJ5ICAgICAgKmRlYnVnZnNfZGlyOworICAgIHN0cnVjdCBkZW50cnkgICAgICAqZGVidWdmc19jYXJkaW5mbzsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKm1hc3RlcjsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBzbGljY2FyZCAqbmV4dDsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHhtaXRfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX2lzcnM7CisgICAgdTMyICAgICAgICAgICAgIGZhbHNlX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfcmN2czsKKyAgICB1MzIgICAgICAgICAgICAgbWF4X2lzcl94bWl0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CisgICAgdTMyICAgICAgICAgICAgIHR4X3BhY2tldHM7CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKyAgICB1MzIgICAgICAgICAgICAgZHVtcHN0YXR1czsgICAgICAgICAgIC8qIFJlc3VsdCBvZiBkdW1wIFVQUiAqLworICAgIHZvaWQgKmNtZGJ1ZmZlcjsKKworICAgIHVsb25nICAgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXM7CisgICAgdTMyICAgICAgICAgICAgIGNtZGJ1ZmZlcl9waHlzbDsKKyAgICB1MzIgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXNoOworCisgICAgdTMyICAgICAgICAgICAgIGR1bXBfY291bnQ7CisgICAgc3RydWN0IHRhc2tfc3RydWN0ICpkdW1wX3Rhc2tfaWQ7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBfd2FpdF9jb3VudDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGR1bXB0aHJlYWRfcnVubmluZzsgLyogaGFzIGEgZHVtcCB0aHJlYWQgYmVlbiBpbml0J2QgICovCisgICAgdWludCAgICAgICAgICAgICAgICBkdW1wX3JlcXVlc3RlZDsgICAgIC8qIDAgbm8sIDEgPSByZXFzdGQgMj1jdXJyIDM9ZG9uZSAqLworICAgIHUzMiAgICAgICAgICAgICBkdW1wdGltZV9zdGFydDsKKyAgICB1MzIgICAgICAgICAgICAgZHVtcHRpbWVfY29tcGxldGU7CisgICAgdTMyICAgICAgICAgICAgIGR1bXB0aW1lX2RlbHRhOworICAgIHZvaWQgKmR1bXBidWZmZXI7CisgICAgdWxvbmcgICAgICAgICAgICAgICBkdW1wYnVmZmVyX3BoeXM7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5c2w7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5c2g7CisgICAgd2FpdF9xdWV1ZV9oZWFkX3QgICBkdW1wX3dxOworICAgIHN0cnVjdCBmaWxlICAgICAgICAqZHVtcGhhbmRsZTsKKyAgICBtbV9zZWdtZW50X3QgICAgICAgIGR1bXBmaWxlX2ZzOworI2VuZGlmCisgICAgdTMyICAgICAgICAgICAgIGRlYnVnX2l4OworICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVnX3R5cGVbMzJdOworICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVnX29mZnNldFszMl07CisgICAgdTMyICAgICAgICAgICAgIHJlZ192YWx1ZVszMl07CisgICAgdTMyICAgICAgICAgICAgIHJlZ192YWx1ZWhbMzJdOworfTsKKworI2RlZmluZSBOVU1fQ0ZHX1NQQUNFUyAgICAgIDIKKyNkZWZpbmUgTlVNX0NGR19SRUdTICAgICAgICA2NAorI2RlZmluZSBOVU1fQ0ZHX1JFR19VTE9OR1MgIChOVU1fQ0ZHX1JFR1MgLyBzaXplb2YodTMyKSkKKworc3RydWN0IHBoeXNjYXJkIHsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBwaHlzY2FyZCAqbmV4dDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGFkYXB0ZXJzX2FsbG9jZDsKKworIC8qICB0aGUgZm9sbG93aW5nIGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkCisgICAgdTMyICAgICAgICAgICAgICAgYnJpZGdlX2J1c251bTsKKyAgICB1MzIgICAgICAgICAgICAgICBicmlkZ2VfY2ZnW05VTV9DRkdfU1BBQ0VTXVtOVU1fQ0ZHX1JFR19VTE9OR1NdOworICovCit9OworCitzdHJ1Y3QgYmFzZV9kcml2ZXIgeworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrIGRyaXZlcl9sb2NrOworICAgIHUzMiAgICAgICAgICAgICAgbnVtX3NsaWNfY2FyZHM7CisgICAgdTMyICAgICAgICAgICAgICBudW1fc2xpY19wb3J0czsKKyAgICB1MzIgICAgICAgICAgICAgIG51bV9zbGljX3BvcnRzX2FjdGl2ZTsKKyAgICB1MzIgICAgICAgICAgICAgIGR5bmFtaWNfaW50YWdnOworICAgIHN0cnVjdCBzbGljY2FyZCAgKnNsaWNfY2FyZDsKKyAgICBzdHJ1Y3QgcGh5c2NhcmQgICpwaHlzX2NhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICAgY2FyZG51bWludXNlW1NMSUNfTUFYX0NBUkRTXTsKK307CisKK3N0cnVjdCBzbGljX3NobWVtIHsKKyAgICB2b2xhdGlsZSB1MzIgICAgICAgICAgaXNyOworICAgIHZvbGF0aWxlIHUzMiAgICAgICAgICBsaW5rc3RhdHVzOworICAgIHZvbGF0aWxlIHN0cnVjdCBzbGljX3N0YXRzICAgICBpbmljc3RhdHM7Cit9OworCitzdHJ1Y3Qgc2xpY19yZWdfcGFyYW1zIHsKKyAgICB1MzIgICAgICAgbGlua3NwZWVkOworICAgIHUzMiAgICAgICBsaW5rZHVwbGV4OworICAgIHUzMiAgICAgICBmYWlsX29uX2JhZF9lZXByb207Cit9OworCitzdHJ1Y3Qgc2xpY191cHIgeworICAgIHVpbnQgICAgICAgICAgICAgICBhZGFwdGVyOworICAgIHUzMiAgICAgICAgICAgIHVwcl9yZXF1ZXN0OworICAgIHUzMiAgICAgICAgICAgIHVwcl9kYXRhOworICAgIHUzMiAgICAgICAgICAgIHVwcl9kYXRhX2g7CisgICAgdTMyICAgICAgICAgICAgdXByX2J1ZmZlcjsKKyAgICB1MzIgICAgICAgICAgICB1cHJfYnVmZmVyX2g7CisgICAgc3RydWN0IHNsaWNfdXByICpuZXh0OworfTsKKworc3RydWN0IHNsaWNfaWZldmVudHMgeworICAgIHVpbnQgICAgICAgIG9mbG93ODAyOworICAgIHVpbnQgICAgICAgIHVmbG93ODAyOworICAgIHVpbnQgICAgICAgIFRwcnRvZmxvdzsKKyAgICB1aW50ICAgICAgICByY3ZlYXJseTsKKyAgICB1aW50ICAgICAgICBCdWZvdjsKKyAgICB1aW50ICAgICAgICBDYXJyZTsKKyAgICB1aW50ICAgICAgICBMb25nZTsKKyAgICB1aW50ICAgICAgICBJbnZwOworICAgIHVpbnQgICAgICAgIENyYzsKKyAgICB1aW50ICAgICAgICBEcmJsOworICAgIHVpbnQgICAgICAgIENvZGU7CisgICAgdWludCAgICAgICAgSXBIbGVuOworICAgIHVpbnQgICAgICAgIElwTGVuOworICAgIHVpbnQgICAgICAgIElwQ3N1bTsKKyAgICB1aW50ICAgICAgICBUcENzdW07CisgICAgdWludCAgICAgICAgVHBIbGVuOworfTsKKworc3RydWN0IGFkYXB0ZXIgeworICAgIHZvaWQgKmlmcDsKKyAgICBzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICBwb3J0OworICAgIHN0cnVjdCBwaHlzY2FyZCAqcGh5c2NhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICBwaHlzcG9ydDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNhcmRpbmRleDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNoaXBpZDsKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKm5ldGRldjsKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKm5leHRfbmV0ZGV2aWNlOworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICBhZGFwdGVyX2xvY2s7CisgICAgc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIHJlc2V0X2xvY2s7CisgICAgc3RydWN0IHBjaV9kZXYgICAgICpwY2lkZXY7CisgICAgdWludCAgICAgICAgICAgICAgICBidXNudW1iZXI7CisgICAgdWludCAgICAgICAgICAgICAgICBzbG90bnVtYmVyOworICAgIHVpbnQgICAgICAgICAgICAgICAgZnVuY3Rpb25udW1iZXI7CisgICAgdXNob3J0ICAgICAgICAgICAgICB2ZW5kaWQ7CisgICAgdXNob3J0ICAgICAgICAgICAgICBkZXZpZDsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIHN1YnN5c2lkOworICAgIHUzMiAgICAgICAgICAgICBpcnE7CisgICAgdm9pZCBfX2lvbWVtICptZW1vcnliYXNlOworICAgIHUzMiAgICAgICAgICAgICBtZW1vcnlsZW5ndGg7CisgICAgdTMyICAgICAgICAgICAgIGRyYW1iYXNlOworICAgIHUzMiAgICAgICAgICAgICBkcmFtbGVuZ3RoOworICAgIHVpbnQgICAgICAgICAgICAgICAgcXVldWVzX2luaXRpYWxpemVkOworICAgIHVpbnQgICAgICAgICAgICAgICAgYWxsb2NhdGVkOworICAgIHVpbnQgICAgICAgICAgICAgICAgYWN0aXZhdGVkOworICAgIHUzMiAgICAgICAgICAgICBpbnRycmVnaXN0ZXJlZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGlzcF9pbml0aWFsaXplZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGdlbm51bWJlcjsKKyAgICB1MzIgICAgICAgICAgICAgY3VyYWRkcnVwcGVyOworICAgIHN0cnVjdCBzbGljX3NobWVtICAgICAgKnBzaG1lbTsKKyAgICBkbWFfYWRkcl90ICAgICAgICAgIHBoeXNfc2htZW07CisgICAgdTMyICAgICAgICAgICAgIGlzcmNvcHk7CisgICAgX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICAgICAgICpzbGljX3JlZ3M7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIHN0YXRlOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3RhdGU7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzcGVlZDsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua2R1cGxleDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBtYWNhZGRyWzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBjdXJybWFjYWRkcls2XTsKKyAgICB1MzIgICAgICAgICAgICAgbWFjb3B0czsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIGRldmZsYWdzX3ByZXY7CisgICAgdTY0ICAgICAgICAgICAgIG1jYXN0bWFzazsKKyAgICBzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAgICptY2FzdGFkZHJzOworICAgIHN0cnVjdCBzbGljX3VwciAgICp1cHJfbGlzdDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIHVwcl9idXN5OworICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgcGluZ3RpbWVyOworICAgIHUzMiAgICAgICAgICAgICBwaW5ndGltZXJzZXQ7CisgICAgc3RydWN0IHRpbWVyX2xpc3QgICBzdGF0c3RpbWVyOworICAgIHUzMiAgICAgICAgICAgICBzdGF0c3RpbWVyc2V0OworICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgbG9hZHRpbWVyOworICAgIHUzMiAgICAgICAgICAgICBsb2FkdGltZXJzZXQ7CisgICAgc3RydWN0IGRlbnRyeSAgICAgICpkZWJ1Z2ZzX2VudHJ5OworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICB1cHJfbG9jazsKKyAgICBzdHJ1Y3Qgc2xpY19zcGlubG9jayAgICAgYml0NjRyZWdsb2NrOworICAgIHN0cnVjdCBzbGljX3JzcHF1ZXVlICAgICByc3BxdWV1ZTsKKyAgICBzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAgICAgcmN2cXVldWU7CisgICAgc3RydWN0IHNsaWNfY21kcXVldWUgICAgIGNtZHFfZnJlZTsKKyAgICBzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAgICAgY21kcV9kb25lOworICAgIHN0cnVjdCBzbGljX2NtZHF1ZXVlICAgICBjbWRxX2FsbDsKKyAgICBzdHJ1Y3Qgc2xpY19jbWRxbWVtICAgICAgY21kcW1lbTsKKyAgICAvKgorICAgICAqICBTTElDIEhhbmRsZXMKKyAgICAqLworICAgIHN0cnVjdCBzbGljX2hhbmRsZSBzbGljX2hhbmRsZXNbU0xJQ19DTURRX01BWENNRFMrMV07IC8qIE9iamVjdCBoYW5kbGVzKi8KKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBmcmVlX3NsaWNfaGFuZGxlczsgICAgICAgICAgLyogRnJlZSBvYmplY3QgaGFuZGxlcyovCisgICAgc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIGhhbmRsZV9sb2NrOyAgICAgICAgICAgLyogT2JqZWN0IGhhbmRsZSBsaXN0IGxvY2sqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgc2xpY19oYW5kbGVfaXg7CisKKyAgICB1MzIgICAgICAgICAgICAgeG1pdHFfZnVsbDsKKyAgICB1MzIgICAgICAgICAgICAgYWxsX3JlZ193cml0ZXM7CisgICAgdTMyICAgICAgICAgICAgIGljcl9yZWdfd3JpdGVzOworICAgIHUzMiAgICAgICAgICAgICBpc3JfcmVnX3dyaXRlczsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgcnhfZXJyb3JzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfZHJvcHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB4bWl0X2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIGxpbmtldmVudF9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB1cHJfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX2lzcnM7CisgICAgdTMyICAgICAgICAgICAgIGZhbHNlX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHR4X3BhY2tldHM7CisgICAgdTMyICAgICAgICAgICAgIHhtaXRfY29tcGxldGVzOworICAgIHUzMiAgICAgICAgICAgICB0eF9kcm9wczsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2Jyb2FkY2FzdHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9tdWx0aWNhc3RzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfdW5pY2FzdHM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfcmN2czsKKyAgICB1MzIgICAgICAgICAgICAgbWF4X2lzcl94bWl0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CisgICAgdTMyICAgICAgICAgICAgIGludGFnZ19wZXJpb2Q7CisgICAgc3RydWN0IGluaWNwbV9zdGF0ZSAgICAqaW5pY3BtX2luZm87CisgICAgdm9pZCAqcGluaWNwbV9pbmZvOworICAgIHN0cnVjdCBzbGljX3JlZ19wYXJhbXMgICByZWdfcGFyYW1zOworICAgIHN0cnVjdCBzbGljX2lmZXZlbnRzICBpZl9ldmVudHM7CisgICAgc3RydWN0IHNsaWNfc3RhdHMgICAgICAgIGluaWNzdGF0c19wcmV2OworICAgIHN0cnVjdCBzbGljbmV0X3N0YXRzICAgICBzbGljX3N0YXRzOworICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworfTsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisjZGVmaW5lIFNMSUNfRFVNUF9SRVFVRVNURUQgICAgICAxCisjZGVmaW5lIFNMSUNfRFVNUF9JTl9QUk9HUkVTUyAgICAyCisjZGVmaW5lIFNMSUNfRFVNUF9ET05FICAgICAgICAgICAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWljcm9jb2RlIGNyYXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIFRoaXMKKyAqIHN0cnVjdHVyZSBpcyB3cml0dGVuIG91dCB0byB0aGUgY2FyZCdzIFNSQU0gd2hlbiB0aGUgbWljcm9jb2RlIHBhbmljJ3MuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgc2xpY19jcmFzaF9pbmZvIHsKKyAgICB1c2hvcnQgIGNwdV9pZDsKKyAgICB1c2hvcnQgIGNyYXNoX3BjOworfTsKKworI2RlZmluZSBDUkFTSF9JTkZPX09GRlNFVCAgIDB4MTU1QworCisjZW5kaWYKKworI2RlZmluZSBVUERBVEVfU1RBVFMobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChuZXdzdGF0KSA8IChvbGRzdGF0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShsYXJnZXN0YXQpICs9ICgobmV3c3RhdCkgKyAoMHhGRkZGRkZGRiAtIG9sZHN0YXQgKyAxKSk7ICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBVUERBVEVfU1RBVFNfR0IobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEVUSEVSX0VRX0FERFIoX0FkZHJBLCBfQWRkckIsIF9SZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKKwlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKKyNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICh1MzIpKCh1NjQpKF9hZGRyKSAmIFwKKwkweDAwMDAwMDAwRkZGRkZGRkYpCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikoKCh1NjQpKF9hZGRyKSA+PiAzMikgJiBcCisJMHgwMDAwMDAwMEZGRkZGRkZGKQorI2Vsc2UKKyNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICAodTMyKV9hZGRyCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCisjZW5kaWYKKworI2RlZmluZSBGTFVTSCAgICAgICBUUlVFCisjZGVmaW5lIERPTlRfRkxVU0ggIEZBTFNFCisKKyNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIChTSU9DREVWUFJJVkFURSs5KQorI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgKFNJT0NERVZQUklWQVRFKzEwKQorI2RlZmluZSBTSU9DU0xJQ1RSQUNFRFVNUCAgICAgICAgKFNJT0NERVZQUklWQVRFKzExKQorCisjZW5kaWYgLyogIF9fU0xJQ19EUklWRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjNjc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNfb3MuaApAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY19vcy5oCisgKgorICogVGhlc2UgYXJlIHRoZSBMaW51eC1zcGVjaWZpYyBkZWZpbml0aW9ucyByZXF1aXJlZCBmb3IgdGhlIFNMSUNPU1MKKyAqIGRyaXZlciwgd2hpY2ggc2hvdWxkIGFsbG93IGZvciBncmVhdGVyIHBvcnRhYmlsaXR5IHRvIG90aGVyIE9TZXMuCisgKi8KKyNpZm5kZWYgX1NMSUNfT1NfU1BFQ0lGSUNfSF8KKyNkZWZpbmUgX1NMSUNfT1NfU1BFQ0lGSUNfSF8KKworI2RlZmluZSBGQUxTRSAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIFNMSUNfU0VDU19UT19KSUZGUyh4KSAgKCh4KSAqIEhaKQorI2RlZmluZSBTTElDX01TX1RPX0pJRkZJRVMoeCkgIChTTElDX1NFQ1NfVE9fSklGRlMoKHgpKSAvIDEwMDApCisKKyNpZmRlZiBERUJVR19SRUdJU1RFUl9UUkFDRQorI2RlZmluZSBXUklURV9SRUcocmVnLCB2YWx1ZSwgZmx1c2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdHlwZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSAwOyAgIFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX29mZnNldFthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSBcCisJCSgodW5zaWduZWQgY2hhciAqKSgmcmVnKSkgLSBcCisJCSgodW5zaWduZWQgY2hhciAqKWFkYXB0ZXItPnNsaWNfcmVncyk7IFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX3ZhbHVlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4KytdID0gdmFsdWU7ICBcCisJCWlmIChhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9PSAzMikgXAorCQkJYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPSAwOyAgICAgICAgICAgICAgICAgICAgICBcCisJCXNsaWNfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKTsgICAgICAgICAgICBcCisJfQorI2RlZmluZSBXUklURV9SRUc2NChhLCByZWcsIHZhbHVlLCByZWdoLCB2YWxoLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdHlwZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSAxOyAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfb2Zmc2V0W2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IFwKKwkJKCh1bnNpZ25lZCBjaGFyICopKCZyZWcpKSAtIFwKKwkJKCh1bnNpZ25lZCBjaGFyICopYWRhcHRlci0+c2xpY19yZWdzKTsgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gdmFsdWU7ICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVoW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4KytdID0gdmFsaDsgIFwKKwkJaWYgKGFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID09IDMyKSBcCisJCQlhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkJc2xpY19yZWc2NF93cml0ZSgoYSksICgmcmVnKSwgKHZhbHVlKSwgKCZyZWdoKSwgKHZhbGgpLCBcCisJCQkJKGZsdXNoKSk7XAorCX0KKyNlbHNlCisjZGVmaW5lIFdSSVRFX1JFRyhyZWcsIHZhbHVlLCBmbHVzaCkgXAorCXNsaWNfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKQorI2RlZmluZSBXUklURV9SRUc2NChhLCByZWcsIHZhbHVlLCByZWdoLCB2YWxoLCBmbHVzaCkgXAorCXNsaWNfcmVnNjRfd3JpdGUoKGEpLCAoJnJlZyksICh2YWx1ZSksICgmcmVnaCksICh2YWxoKSwgKGZsdXNoKSkKKyNlbmRpZgorCisjZW5kaWYgIC8qIF9TTElDX09TX1NQRUNJRklDX0hfICAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNidWlsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDVlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaApAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNidWlsZC5oCisgKgorICogVGhlIGZvbGxvd2luZyBjb250YWlucyB0aGUgY29tcGlsZXIgZGlyZWN0aXZlIHN3aXRjaGVzIHVzZWQgZm9yCisgKiBkaWZmZXJlbnQgU0xJQyBidWlsZCBvcHRpb25zLiAgVGhleSBjYW4gYWxsIGJlIHNldCBpbiB0aGUgTWFrZWZpbGUKKyAqIGJ1dCB0aGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgaGVyZS4KKyAqLworI2lmbmRlZiBfU0xJQ19CVUlMRF9IXworI2RlZmluZSBfU0xJQ19CVUlMRF9IXworCisjaWZuZGVmIFNMSUNfUFJPRFVDVElPTl9CVUlMRAorI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19GQUlMVVJFX1JFU0VUCisjZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkJCTEKKyNlbmRpZgorI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2lmbmRlZiBTTElDX0FTU0VSVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfQVNTRVJUX0VOQUJMRUQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19NQ0FTVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfTUNBU1RfRU5BQkxFRAkJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECisjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAorI2RlZmluZSBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECQkwCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAorI2RlZmluZSBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAkJMQorI2VuZGlmCisjaWZuZGVmIEFUS19ERUJVRworI2RlZmluZSBBVEtfREVCVUcJCQkJMQorI2VuZGlmCisjaWZuZGVmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECQkwCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAorI2RlZmluZSBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCQkxCisjZW5kaWYKKyNpZm5kZWYgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMKKyNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0KKyNkZWZpbmUgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJCTAKKyNlbmRpZgorI2lmbmRlZiBTVEFUU19USU1FUl9JTlRFUlZBTAorI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKKyNlbmRpZgorI2lmbmRlZiBQSU5HX1RJTUVSX0lOVEVSVkFMCisjZGVmaW5lIFBJTkdfVElNRVJfSU5URVJWQUwJCQkxCisjZW5kaWYKKworI2VuZGlmICAgLyogX1NMSUNfQlVJTERfSF8gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0ZTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkYmcuaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljZGJnLmgKKyAqCisgKiBBbGwgZGVidWcgYW5kIGFzc2VydGlvbi1iYXNlZCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGFyZSBpbmNsdWRlZAorICogaW4gdGhpcyBmaWxlIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NMSUNfREVCVUdfSF8KKyNkZWZpbmUgX1NMSUNfREVCVUdfSF8KKworI2lmZGVmIFNMSUNfREVGQVVMVF9MT0dfTEVWRUwKKyNlbHNlCisjZGVmaW5lIFNMSUNMRVZFTCAgIEtFUk5fREVCVUcKKyNlbmRpZgorI2RlZmluZSBTTElDX0RJU1BMQVkgICAgICAgICAgICAgIHByaW50aworI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikgICBTTElDX0RJU1BMQVkoS0VSTl9FTUVSRyBuLCAjI2FyZ3MpCisKKyNkZWZpbmUgU0xJQ19ERUJVR19NRVNTQUdFIDEKKyNpZiBTTElDX0RFQlVHX01FU1NBR0UKKy8qI2RlZmluZSBEQkdfTVNHKG4sIGFyZ3MuLi4pICAgICAgU0xJQ19ESVNQTEFZKFNMSUNMRVZFTCBuLCAjI2FyZ3MpKi8KKyNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQorI2Vsc2UKKyNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQorI2VuZGlmCisKKyNpZmRlZiBBU1NFUlQKKyN1bmRlZiBBU1NFUlQKKyNlbmRpZgorCisjaWYgU0xJQ19BU1NFUlRfRU5BQkxFRAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgVkFMSURfQUREUkVTUyhwKSAgKDEpCisjZWxzZQorI2RlZmluZSBWQUxJRF9BRERSRVNTKHApICAoKCh1MzIpKHApICYgMHg4MDAwMDAwMCkgfHwgKCh1MzIpKHApID09IDApKQorI2VuZGlmCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAorCQlfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJc2xpY19hc3NlcnRfZmFpbCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2VuZGlmCisjaWZuZGVmIEFTU0VSVE1TRworI2RlZmluZSBBU1NFUlRNU0coYSxtc2cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMiXAorCQkJImxpbmUgJWQ6ICVzXG4iLFwKKwkJCV9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18sIChtc2cpKTsgICAgICAgICAgICBcCisJCXNsaWNfYXNzZXJ0X2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZW5kaWYKKyNlbHNlCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkKKyNlbmRpZgorI2lmbmRlZiBBU1NFUlRNU0cKKyNkZWZpbmUgQVNTRVJUTVNHKGEsIG1zZykKKyNlbmRpZgorI2VuZGlmIC8qIFNMSUNfQVNTRVJUX0VOQUJMRUQgICovCisKKyNlbmRpZiAgLyogIF9TTElDX0RFQlVHX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2R1bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhOWI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogTk8gTElDRU5TRSBUTyBBTlkgQUxBQ1JJVEVDSCBQQVRFTlQgQ0xBSU0gSVMgR1JBTlRFRCBCWSBBTlkgQ09QWVJJR0hUCisgKiBMSUNFTlNFIFRPIFRISVMgT1IgT1RIRVIgU09GVFdBUkUuIFRISVMgU09GVFdBUkUgTUFZIEJFIENPVkVSRUQgQlkKKyAqIEFMQUNSSVRFQ0ggUEFURU5UUyBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFUuUy4gUEFURU5UIE5PUy4gNiwyMjYsNjgwLAorICogNiwyNDcsMDYwLCA2LDMzNCwxNTMsIDYsMzg5LDQ3OSwgNiwzOTMsNDg3LCA2LDQyNywxNzEsIDYsNDI3LDE3MworICogYW5kIDYsNDM0LDYyMC4KKyAqIFRISVMgU09GVFdBUkUgSVMgTk9UIFNVQkpFQ1QgVE8gVEhFIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIChHUEwpLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQKKyAqIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlCisgKiBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlcgorICogZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqLworI2lmbmRlZiBfU0xJQ19EVU1QX0hfCisjZGVmaW5lIF9TTElDX0RVTVBfSF8KKworI2RlZmluZSBERUJVR19TVUNDRVNTICAgMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBVdGlsaXR5IHByb2Nlc3NvciByZWdpc3RlciBsb2NhdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVVRJTElUWV9SRVNFVCAgICAgICAweDAKKyNkZWZpbmUgVVRJTElUWV9JU1BfQUREUiAgICAweDQgICAgIC8qIEludGVycnVwdCBzdGF0dXMgUG9pbnRlciAqLworI2RlZmluZSBVVElMSVRZX0lTUl9BRERSICAgIDB4OCAgICAgLyogSW50ZXJydXB0IHN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVVElMSVRZX0lDUl9BRERSICAgIDB4YyAgICAgLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRJTElUWV9DUFJfQUREUiAgICAweDEwICAgIC8qIENvbW1hbmQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBVVElMSVRZX0RQUl9BRERSICAgIDB4MTQgICAgLyogRGF0YSBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVUSUxJVFlfRE1QX1RSUSAgICAgMHgxOCAgICAvKiBEdW1wIHF1ZXVlIG9udG8gQUxVIGZvciBhbmFseXNlciAqLworI2RlZmluZSBVVElMSVRZX1VQUF9BRERSICAgIDB4MWMgICAgLyogQml0cyA2My0zMiBvZiBjbWQvZGF0YSBwb2ludGVyICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElOSUMgc3RhdHVzIHJlZ2lzdGVyIGJpdHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNMSUNfSVNSX0NDICAgICAgICAgMHgxMDAwMDAwMCAgLyogQ29tbWFuZCBjb21wbGV0ZSAtIHN5bmNocm9ub3VzICovCisjZGVmaW5lIFNMSUNfSVNSX0VSUiAgICAgICAgMHgwMTAwMDAwMCAgLyogQ29tbWFuZCBFcnJvciAtIHN5bmNocm9ub3VzICovCisjZGVmaW5lIFNMSUNfSVNSX0NNRF9NQVNLICAgMHgxMTAwMDAwMCAgLyogQ29tbWFuZCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTTElDX0lTUl9UUEggICAgICAgIDB4MDAwODAwMDAgIC8qIFRyYW5zbWl0IHByb2Nlc3NvciBoYWx0ZWQgLSBhc3luYyAqLworI2RlZmluZSBTTElDX0lTUl9SUEggICAgICAgIDB4MDAwNDAwMDAgIC8qIFJlY2VpdmUgcHJvY2Vzc29yIGhhbHRlZCAtIGFzeW5jICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElOSUMgQ29udHJvbCByZWdpc3RlciB2YWx1ZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNMSUNfSUNSX09GRiAgICAgICAgMCAgICAgICAgICAgLyogSW50ZXJydXB0cyBkaXNhYmxlZCAqLworI2RlZmluZSBTTElDX0lDUl9PTiAgICAgICAgIDEgICAgICAgICAgIC8qIEludGVycnVwdHMgZW5hYmxlZCAqLworI2RlZmluZSBTTElDX0lDUl9NQVNLICAgICAgIDIgICAgICAgICAgIC8qIEludGVycnVwdHMgbWFza2VkICovCisKKyNkZWZpbmUgV1JJVEVfRFJFRyhyZWcsIHZhbHVlLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdyaXRlbCgodmFsdWUpLCAocmVnKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGZsdXNoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCW1iKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvbW1hbmQgRm9ybWF0CisgKgorICogRWFjaCBjb21tYW5kIGNvbnRhaW5zIGEgY29tbWFuZCBieXRlIHdoaWNoIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKyAqCisgKiAgYml0czogICA3LTMgICAgIDIgICAgICAgMS0wCisgKiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgY29tbWFuZCAgICAgQWx0LiBQcm9jICAgUHJvY2Vzc29yCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIE1hY3JvIHRvIGNyZWF0ZSB0aGUgY29tbWFuZCBieXRlIGdpdmVuIHRoZSBjb21tYW5kLCBBbHQuIFByb2MsIGFuZAorICogUHJvY2Vzc29yIHZhbHVlcy4gIE5vdGUgdGhhdCB0aGUgbWFjcm8gYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZXMgYXJlCisgKiBwcmVzaGlmdGVkLiAgVGhhdCBpcywgdGhlIHZhbHVlcyBmb3IgYWx0LiBwcm9jIGFyZSAwIGZvciB0cmFuc21pdCBhbmQKKyAqIDQgZm9yIHJlY2VpdmUuCisgKi8KKyNkZWZpbmUgQ09NTUFORF9CWVRFKGNvbW1hbmQsIGFsdF9wcm9jLCBwcm9jKSAoKGNvbW1hbmQpIHwgKGFsdF9wcm9jKSB8IChwcm9jKSkKKworLyoKKyAqIENvbW1hbmQgdmFsdWVzCisgKi8KKyNkZWZpbmUgQ01EX0hBTFQgICAgICAgIDB4MCAgICAgLyogU2VuZCBhIGhhbHQgdG8gdGhlIElOSUMgKi8KKyNkZWZpbmUgQ01EX1JVTiAgICAgICAgIDB4OCAgICAgLyogU3RhcnQgdGhlIGhhbHRlZCBJTklDICovCisjZGVmaW5lIENNRF9TVEVQICAgICAgICAweDEwICAgIC8qIFNpbmdsZSBzdGVwIHRoZSBpbmljICovCisjZGVmaW5lIENNRF9CUkVBSyAgICAgICAweDE4ICAgIC8qIFNldCBhIGJyZWFrcG9pbnQgLSA4IGJ5dGUgY29tbWFuZCAqLworI2RlZmluZSBDTURfUkVTRVRfQlJFQUsgMHgyMCAgICAvKiBSZXNldCBhIGJyZWFrcG9pbnQgLSA4IGJ5dGUgY21kICovCisjZGVmaW5lIENNRF9EVU1QICAgICAgICAweDI4ICAgIC8qIER1bXAgSU5JQyBtZW1vcnkgLSA4IGJ5dGUgY29tbWFuZCAqLworI2RlZmluZSBDTURfTE9BRCAgICAgICAgMHgzMCAgICAvKiBMb2FkIElOSUMgbWVtb3J5IC0gOCBieXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01EX01BUCAgICAgICAgIDB4MzggICAgLyogTWFwIG91dCBhIFJPTSBpbnN0cnVjdGlvbiAtIDggQkMgKi8KKyNkZWZpbmUgQ01EX0NBTV9PUFMgICAgIDB4MzggICAgLyogcGVyZm9ybSBvcHMgb24gc3BlY2lmaWMgQ0FNICovCisjZGVmaW5lIENNRF9YTVQgICAgICAgICAweDQwICAgIC8qIFRyYW5zbWl0IGZyYW1lICovCisjZGVmaW5lIENNRF9SQ1YgICAgICAgICAweDQ4ICAgIC8qIFJlY2VpdmUgZnJhbWUgKi8KKworLyoKKyAqIEFsdC4gUHJvYyB2YWx1ZXMKKyAqCisgKiBXaGVuIHRoZSBwcm9jIHZhbHVlIGlzIHNldCB0byB0aGUgdXRpbGl0eSBwcm9jZXNzb3IsIHRoZSBBbHQuIFByb2MKKyAqIHNwZWNpZmllcyB3aGljaCBwcm9jZXNzb3IgaGFuZGxlcyB0aGUgZGVidWdnaW5nLgorICovCisjZGVmaW5lIEFMVF9QUk9DX1RSQU5TTUlUICAgMHgwCisjZGVmaW5lIEFMVF9QUk9DX1JFQ0VJVkUgICAgMHg0CisKKy8qCisgKiBQcm9jIHZhbHVlcworICovCisjZGVmaW5lIFBST0NfSU5WQUxJRCAgICAgICAgMHgwCisjZGVmaW5lIFBST0NfTk9ORSAgICAgICAgICAgMHgwICAvKiBHaWdhYml0IHVzZSAqLworI2RlZmluZSBQUk9DX1RSQU5TTUlUICAgICAgIDB4MQorI2RlZmluZSBQUk9DX1JFQ0VJVkUgICAgICAgIDB4MgorI2RlZmluZSBQUk9DX1VUSUxJVFkgICAgICAgIDB4MworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogOCBieXRlIGNvbW1hbmQgc3RydWN0dXJlIGRlZmluaXRpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEJyZWFrIGFuZCBSZXNldCBCcmVhayBjb21tYW5kIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgQlJFQUsgeworICAgIHVuc2lnbmVkIGNoYXIgICAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgICAgcmVzdmQ7CisgICAgdXNob3J0ICAgIGNvdW50OyAgICAgIC8qIE51bWJlciBvZiBleGVjdXRpb25zIGJlZm9yZSBicmVhayAqLworICAgIHUzMiAgIGFkZHI7ICAgICAgIC8qIEFkZHJlc3Mgb2YgYnJlYWsgcG9pbnQgKi8KK307CisKKy8qCisgKiBEdW1wIGFuZCBMb2FkIGNvbW1hbmQgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBkdW1wX2NtZCB7CisgICAgdW5zaWduZWQgY2hhciAgICAgY21kOyAgICAgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBkZXNjOyAgICAgICAvKiBEZXNjcmlwdG9yIHZhbHVlcyAtIGRlZmluZWQgYmVsb3cgKi8KKyAgICB1c2hvcnQgICAgY291bnQ7ICAgICAgLyogbnVtYmVyIG9mIDQgYnl0ZSB3b3JkcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworICAgIHUzMiAgIGFkZHI7ICAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgZHVtcCBvciBsb2FkICovCit9OworCisvKgorICogUmVjZWl2ZSBvciBUcmFuc21pdCBhIGZyYW1lLgorICovCitzdHJ1Y3QgUkNWX09SX1hNVF9GUkFNRSB7CisgICAgdW5zaWduZWQgY2hhciAgICAgY29tbWFuZDsgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBNYWNJZDsgICAgICAvKiBNYWMgSUQgb2YgaW50ZXJmYWNlIC0gdHJhbnNtaXQgb25seSAqLworICAgIHVzaG9ydCAgICBjb3VudDsgICAgICAvKiBMZW5ndGggb2YgZnJhbWUgaW4gYnl0ZXMgKi8KKyAgICB1MzIgICBwYWQ7ICAgICAgICAvKiBub3QgdXNlZCAqLworfTsKKworLyoKKyAqIFZhbHVlcyBvZiBkZXNjIGZpZWxkIGluIERVTVBfT1JfTE9BRCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBERVNDX1JGSUxFICAgICAgICAgIDB4MCAgICAgLyogUmVnaXN0ZXIgZmlsZSAqLworI2RlZmluZSBERVNDX1NSQU0gICAgICAgICAgIDB4MSAgICAgLyogU1JBTSAqLworI2RlZmluZSBERVNDX0RSQU0gICAgICAgICAgIDB4MiAgICAgLyogRFJBTSAqLworI2RlZmluZSBERVNDX1FVRVVFICAgICAgICAgIDB4MyAgICAgLyogcXVldWVzICovCisjZGVmaW5lIERFU0NfUkVHICAgICAgICAgICAgMHg0ICAgICAvKiBHZW5lcmFsIHJlZ2lzdGVycyAocGMsIHN0YXR1cywgZXRjKSAqLworI2RlZmluZSBERVNDX1NFTlNFICAgICAgICAgIDB4NSAgICAgLyogU2Vuc2UgcmVnaXN0ZXIgKi8KKworLyogRGVzY3JpcHRvciBmaWVsZCBkZWZpbml0aW9ucyBmb3IgQ01EX0RVTVBfQ0FNICovCisjZGVmaW5lIERVTVBfQ0FNX0EgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVNUF9DQU1fQiAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIC8qIHVudXNlZCBhdCBwcmVzZW50ICovCisjZGVmaW5lIERVTVBfQ0FNX0MgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRFVNUF9DQU1fRCAgICAgICAgICAgICAgMworI2RlZmluZSBTRUFSQ0hfQ0FNX0EgICAgICAgICAgICA0CisjZGVmaW5lIFNFQVJDSF9DQU1fQyAgICAgICAgICAgIDUKKworLyoKKyAqIE1hcCBjb21tYW5kIHRvIHJlcGxhY2UgYSBjb21tYW5kIGluIFJPTSB3aXRoIGEgY29tbWFuZCBpbiBXQ1MKKyAqLworc3RydWN0IE1BUCB7CisgICAgdW5zaWduZWQgY2hhciAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgIG5vdF91c2VkWzNdOworICAgIHVzaG9ydCAgbWFwX3RvOyAgICAgLyogSW5zdHJ1Y3Rpb24gYWRkcmVzcyBpbiBXQ1MgKi8KKyAgICB1c2hvcnQgIG1hcF9vdXQ7ICAgIC8qIEluc3RydWN0aW9uIGFkZHJlc3MgaW4gUk9NICovCit9OworCisvKgorICogTWlzYyBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFNMSUNfTUFYX1FVRVVFICAgICAgIDMyIC8qIFRvdGFsICMgb2YgcXVldWVzIG9uIHRoZSBJTklDICgwLTMxKSovCisjZGVmaW5lIFNMSUNfNE1BWF9SRUcgICAgICAgNTEyIC8qIFRvdGFsICMgb2YgNC1wb3J0IGZpbGUtcmVnaXN0ZXJzICAgICovCisjZGVmaW5lIFNMSUNfMU1BWF9SRUcgICAgICAgMzg0IC8qIFRvdGFsICMgb2YgZmlsZS1yZWdpc3RlcnMgICAgICAgICAgICovCisjZGVmaW5lIFNMSUNfR0JNQVhfUkVHICAgICAxMDI0IC8qIFRvdGFsICMgb2YgR2JpdCBmaWxlLXJlZ2lzdGVycyAgICAgICovCisjZGVmaW5lIFNMSUNfTlVNX1JFRyAgICAgICAgIDMyIC8qIG5vbi1maWxlLXJlZ2lzdGVycyA9IE5VTV9SRUcgaW4gdG0tc2ltYmEuaCAqLworI2RlZmluZSBTTElDX0dCX0NBTUFfU1pFICAgICAzMgorI2RlZmluZSBTTElDX0dCX0NBTUJfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTUFCX1NaRSAgICAzMgorI2RlZmluZSBTTElDX0dCX0NBTUNfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTURfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTUNEX1NaRSAgICAzMgorCisvKgorICogQ29yZWR1bXAgaGVhZGVyIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgQ09SRV9RIHsKKyAgICB1MzIgICBxdWV1ZU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBxdWV1ZSAqLworICAgIHUzMiAgIHF1ZXVlc2l6ZTsgICAgICAgICAgLyogc2l6ZSBvZiBxdWV1ZSAqLworfTsKKworI2RlZmluZSBEUklWRVJfTkFNRV9TSVpFICAgIDMyCisKK3N0cnVjdCBzbGljY29yZV9oZHIgeworICAgIHVuc2lnbmVkIGNoYXIgZHJpdmVyX3ZlcnNpb25bRFJJVkVSX05BTUVfU0laRV07IC8qIERyaXZlciB2ZXJzaW9uIHN0cmluZyAqLworICAgIHUzMiAgIFJjdlJlZ09mZjsgICAgICAgICAgLyogT2Zmc2V0IG9mIHJlY2VpdmUgcmVnaXN0ZXJzICovCisgICAgdTMyICAgUmN2UmVnc2l6ZTsgICAgICAgICAvKiBzaXplIG9mIHJlY2VpdmUgcmVnaXN0ZXJzICovCisgICAgdTMyICAgWG10UmVnT2ZmOyAgICAgICAgICAvKiBPZmZzZXQgb2YgdHJhbnNtaXQgcmVnaXN0ZXJzICovCisgICAgdTMyICAgWG10UmVnc2l6ZTsgICAgICAgICAvKiBzaXplIG9mIHRyYW5zbWl0IHJlZ2lzdGVycyAqLworICAgIHUzMiAgIEZpbGVSZWdPZmY7ICAgICAgICAgLyogT2Zmc2V0IG9mIHJlZ2lzdGVyIGZpbGUgKi8KKyAgICB1MzIgICBGaWxlUmVnc2l6ZTsgICAgICAgIC8qIHNpemUgb2YgcmVnaXN0ZXIgZmlsZSAqLworICAgIHUzMiAgIFNyYW1PZmY7ICAgICAgICAgICAgLyogT2Zmc2V0IG9mIFNyYW0gKi8KKyAgICB1MzIgICBTcmFtc2l6ZTsgICAgICAgICAgIC8qIHNpemUgb2YgU3JhbSAqLworICAgIHUzMiAgIERyYW1PZmY7ICAgICAgICAgICAgLyogT2Zmc2V0IG9mIERyYW0gKi8KKyAgICB1MzIgICBEcmFtc2l6ZTsgICAgICAgICAgIC8qIHNpemUgb2YgRHJhbSAqLworICAgIENPUkVfUSAgICBxdWV1ZXNbU0xJQ19NQVhfUVVFVUVdOyAvKiBzaXplIGFuZCBvZmZzZXRzIG9mIHF1ZXVlcyAqLworICAgIHUzMiAgIENhbUFNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBBIGNvbnRlbnRzICovCisgICAgdTMyICAgQ2FtQVNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBBICovCisgICAgdTMyICAgQ2FtQk1PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEIgY29udGVudHMgKi8KKyAgICB1MzIgICBDYW1CU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEIgKi8KKyAgICB1MzIgICBDYW1DTU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gQyBjb250ZW50cyAqLworICAgIHUzMiAgIENhbUNTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gQyAqLworICAgIHUzMiAgIENhbURNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBEIGNvbnRlbnRzICovCisgICAgdTMyICAgQ2FtRFNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBEICovCit9OworCisvKgorICogZGVmaW5pdGlvbnMgbmVlZGVkIGZvciBvdXIga2VybmVsLW1vZGUgZ2RiIHN0dWIuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERlZmluaXRpb25zICYgVHlwZWRlZnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQlVGTUFYICAgICAgMHgyMDAwMCAvKiAxMjhrIC0gc2l6ZSBvZiBpbnB1dC9vdXRwdXQgYnVmZmVyICovCisjZGVmaW5lIEJVRk1BWFAyICAgIDUgICAgICAgLyogMioqNSAoMzIpIDRLIHBhZ2VzICovCisKKyNkZWZpbmUgSU9DVExfU0lNQkFfQlJFQUsgICAgICAgICAgIF9JT1coJ3MnLCAwLCB1bnNpZ25lZCBsb25nKQorLyogI2RlZmluZSBJT0NUTF9TSU1CQV9JTklUICAgICAgICAgICAgX0lPVygncycsIDEsIHVuc2lnbmVkIGxvbmcpICovCisjZGVmaW5lIElPQ1RMX1NJTUJBX0tJTExfVEdUX1BST0MgICBfSU9XKCdzJywgMiwgdW5zaWduZWQgbG9uZykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR2xvYmFsIHZhcmlhYmxlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUSFJFQURSRUNFSVZFICAgMSAgIC8qIGJpdCAwIG9mIFN0b3BwZWRUaHJlYWRzICovCisjZGVmaW5lIFRIUkVBRFRSQU5TTUlUICAyICAgLyogYml0IDEgb2YgU3RvcHBlZFRocmVhZHMgKi8KKyNkZWZpbmUgVEhSRUFEQk9USCAgICAgIDMgICAvKiBiaXQgMCBhbmQgMS4uICovCisKKyNlbmRpZiAgLyogIF9TTElDX0RVTVBfSCAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzZTkwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oCkBAIC0wLDAgKzEsODQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNody5oCisgKgorICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gb3VyIGhhcmR3YXJlLgorICovCisjaWZuZGVmIF9fU0xJQ0hXX0hfXworI2RlZmluZSBfX1NMSUNIV19IX18KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMQUNSSVRFQ0ggICAgMHgxMzlBCisjZGVmaW5lIFNMSUNfMUdCX0RFVklDRV9JRCAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgU0xJQ18yR0JfREVWSUNFX0lEICAgICAgICAgIDB4MDAwNyAgLypPYXNpcyBEZXZpY2UgSUQgKi8KKworI2RlZmluZSBTTElDXzFHQl9DSUNBREFfU1VCU1lTX0lEICAgMHgwMDA4CisKKyNkZWZpbmUgU0xJQ19OQlJfTUFDUyAgICAgIDQKKworI2RlZmluZSBTTElDX1JDVkJVRl9TSVpFICAgICAgICAyMDQ4CisjZGVmaW5lIFNMSUNfUkNWQlVGX0hFQURTSVpFICAgIDM0CisjZGVmaW5lIFNMSUNfUkNWQlVGX1RBSUxTSVpFICAgIDAKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfREFUQVNJWkUgICAgKFNMSUNfUkNWQlVGX1NJWkUgLSAoU0xJQ19SQ1ZCVUZfSEVBRFNJWkUgK1wKKwkJCQkJU0xJQ19SQ1ZCVUZfVEFJTFNJWkUpKQorCisjZGVmaW5lIFZHQlNUQVRfWFBFUlIgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVkdCU1RBVF9YRVJSU0hGVCAgICAgICAgMjUKKyNkZWZpbmUgVkdCU1RBVF9YQ1NFUlIgICAgICAgICAgMHgyMworI2RlZmluZSBWR0JTVEFUX1hVRkxPVyAgICAgICAgICAweDIyCisjZGVmaW5lIFZHQlNUQVRfWEhMRU4gICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVkdCU1RBVF9ORVRFUlIgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBWR0JTVEFUX05FUlJTSEZUICAgICAgICAxNgorI2RlZmluZSBWR0JTVEFUX05FUlJNU0sgICAgICAgICAweDFmZgorI2RlZmluZSBWR0JTVEFUX05DU0VSUiAgICAgICAgICAweDEwMworI2RlZmluZSBWR0JTVEFUX05VRkxPVyAgICAgICAgICAweDEwMgorI2RlZmluZSBWR0JTVEFUX05ITEVOICAgICAgICAgICAweDEwMAorI2RlZmluZSBWR0JTVEFUX0xOS0VSUiAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFZHQlNUQVRfTEVSUk1TSyAgICAgICAgIDB4ZmYKKyNkZWZpbmUgVkdCU1RBVF9MREVBUkxZICAgICAgICAgMHg4NgorI2RlZmluZSBWR0JTVEFUX0xCT0ZMTyAgICAgICAgICAweDg1CisjZGVmaW5lIFZHQlNUQVRfTENPREVSUiAgICAgICAgIDB4ODQKKyNkZWZpbmUgVkdCU1RBVF9MREJMTkJMICAgICAgICAgMHg4MworI2RlZmluZSBWR0JTVEFUX0xDUkNFUlIgICAgICAgICAweDgyCisjZGVmaW5lIFZHQlNUQVRfTE9GTE8gICAgICAgICAgIDB4ODEKKyNkZWZpbmUgVkdCU1RBVF9MVUZMTyAgICAgICAgICAgMHg4MAorI2RlZmluZSBJUkhERFJfRkxFTl9NU0sgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIElSSEREUl9TVkFMSUQgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVJIRERSX0VSUiAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBWUkhTVEFUXzgwMk9FICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRfVFBPRkxPICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfODAyVUUgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9SQ1ZFICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0JVRkYgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ0FSUkUgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9MT05HRSAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1BSRUEgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ1JDICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9EUkJMICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0NPREUgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfVFBDU1VNICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9UUEhMRU4gICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0lQQ1NVTSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfSVBMRVJSICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBWUkhTVEFUQl9JUEhFUlIgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFNMSUNfTUFYNjRfQkNOVCAgICAgICAgIDIzCisjZGVmaW5lIFNMSUNfTUFYMzJfQkNOVCAgICAgICAgIDI2CisjZGVmaW5lIElIQ01EX1hNVF9SRVEgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSUhGTEdfSUZTSEZUICAgICAgICAgICAgMgorI2RlZmluZSBTTElDX1JTUEJVRl9TSVpFICAgICAgICAzMgorCisjZGVmaW5lIFNMSUNfUkVTRVRfTUFHSUMgICAgICAgIDB4REVBRAorI2RlZmluZSBJQ1JfSU5UX09GRiAgICAgICAgICAgICAwCisjZGVmaW5lIElDUl9JTlRfT04gICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUNSX0lOVF9NQVNLICAgICAgICAgICAgMgorCisjZGVmaW5lIElTUl9FUlIgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVNSX1JDViAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJU1JfQ01EICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElTUl9JTyAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQyAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJU1JfTEVWRU5UICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIElTUl9STUlTUyAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQ0VSUiAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJU1JfWERST1AgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIElTUl9VUENCU1kgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVNSX0VWTVNLICAgICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBJU1JfUElOR01BU0sgICAgICAgICAgICAweDAwNzAwMDAwCisjZGVmaW5lIElTUl9QSU5HRFNNQVNLICAgICAgICAgIDB4MDA3MTAwMDAKKyNkZWZpbmUgSVNSX1VQQ01BU0sgICAgICAgICAgICAgMHgxMTAwMDAwMAorI2RlZmluZSBTTElDX1dDU19TVEFSVCAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfV0NTX0NPTVBBUkUgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfQkVHSU4gICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTTElDX1JDVldDU19GSU5JU0ggICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfUE1fTUFYUEFUVEVSTlMgICAgIDYKKyNkZWZpbmUgU0xJQ19QTV9QQVRURVJOU0laRSAgICAgMTI4CisjZGVmaW5lIFNMSUNfUE1DQVBTX1dBS0VPTkxBTiAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJQ1JfUkVHX1BDUiAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBNSUlDUl9SRUdfNCAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIE1JSUNSX1JFR185ICAgICAgICAgICAgIDB4MDAwOTAwMDAKKyNkZWZpbmUgTUlJQ1JfUkVHXzE2ICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBQQ1JfUkVTRVQgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgUENSX1BPV0VSRE9XTiAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFBDUl9TUEVFRF8xMDAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBQQ1JfU1BFRURfMTAwMCAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUENSX0FVVE9ORUcgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFBDUl9BVVRPTkVHX1JTVCAgICAgICAgIDB4MDIwMAorI2RlZmluZSBQQ1JfRFVQTEVYX0ZVTEwgICAgICAgICAweDAxMDAKKyNkZWZpbmUgUFNSX0xJTktVUCAgICAgICAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgUEFSX0FEVjEwMEZEICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFBBUl9BRFYxMDBIRCAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBQQVJfQURWMTBGRCAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUEFSX0FEVjEwSEQgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0UgICAgICAgICAgIDB4MEMwMAorI2RlZmluZSBQQVJfODAyXzMgICAgICAgICAgICAgICAweDAwMDEKKworI2RlZmluZSBQQVJfQURWMTAwMFhGRCAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgUEFSX0FEVjEwMDBYSEQgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0VfRklCRVIgICAgIDB4MDE4MAorCisjZGVmaW5lIFBHQ19BRFYxMDAwRkQgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBQR0NfQURWMTAwMEhEICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgU0VFUV9MSU5LRkFJTCAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFNFRVFfU1BFRUQgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBTRUVRX0RVUExFWCAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgVERLX0RVUExFWCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFRES19TUEVFRCAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPTiAgICAgICAweDAwNjgKKyNkZWZpbmUgTVJWX1JFRzE2X1hPVkVST0ZGICAgICAgMHgwMDA4CisjZGVmaW5lIE1SVl9TUEVFRF8xMDAwICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBNUlZfU1BFRURfMTAwICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgTVJWX1NQRUVEXzEwICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE1SVl9GVUxMRFVQTEVYICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBNUlZfTElOS1VQICAgICAgICAgICAgICAweDA0MDAKKworI2RlZmluZSBHSUdfTElOS1VQICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0lHX0ZVTExEVVBMRVggICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdJR19TUEVFRF9NQVNLICAgICAgICAgIDB4MDAwQworI2RlZmluZSBHSUdfU1BFRURfMTAwMCAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgR0lHX1NQRUVEXzEwMCAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdJR19TUEVFRF8xMCAgICAgICAgICAgIDB4MDAwMAorCisjZGVmaW5lIE1DUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTUNSX0NSQ0VOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBNQ1JfRlVMTEQgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIE1DUl9QQUQgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgTUNSX1JFVFJZTEFURSAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBNQ1JfQk9MX1NISUZUICAgICAgICAgICAyMQorI2RlZmluZSBNQ1JfSVBHMV9TSElGVCAgICAgICAgICAxNAorI2RlZmluZSBNQ1JfSVBHMl9TSElGVCAgICAgICAgICA3CisjZGVmaW5lIE1DUl9JUEczX1NISUZUICAgICAgICAgIDAKKyNkZWZpbmUgR01DUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHTUNSX0dCSVQgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdNQ1JfRlVMTEQgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR01DUl9HQVBCQl9TSElGVCAgICAgICAgMTQKKyNkZWZpbmUgR01DUl9HQVBSMV9TSElGVCAgICAgICAgNworI2RlZmluZSBHTUNSX0dBUFIyX1NISUZUICAgICAgICAwCisjZGVmaW5lIEdNQ1JfR0FQQkJfMTAwMCAgICAgICAgIDB4NjAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAwICAgICAgICAgMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMDAgICAgICAgICAweDQwCisjZGVmaW5lIEdNQ1JfR0FQQkJfMTAwICAgICAgICAgIDB4NzAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAgICAgICAgICAgMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMCAgICAgICAgICAweDQwCisjZGVmaW5lIFhDUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgWENSX1hNVEVOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBYQ1JfUEFVU0VFTiAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFhDUl9MT0FEUk5HICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkNSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBSQ1JfUkNWRU4gICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJDUl9SQ1ZBTEwgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkJBRCAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSQ1JfQ1RMRU4gICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJDUl9BRERSQUVOICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1hDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHWENSX1hNVEVOICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdYQ1JfUEFVU0VFTiAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUkNSX1JDVkVOICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkNWQUxMICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZCQUQgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUkNSX0NUTEVOICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdSQ1JfQUREUkFFTiAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1JDUl9IQVNIU0laRV9TSElGVCAgICAgMTcKKyNkZWZpbmUgR1JDUl9IQVNIU0laRSAgICAgICAgICAgMTQKKworI2RlZmluZSBTTElDX0VFUFJPTV9JRCAgICAgICAgMHhBNUE1CisjZGVmaW5lIFNMSUNfU1JBTV9TSVpFMkdCICAgICAoNjQgKiAxMDI0KQorI2RlZmluZSBTTElDX1NSQU1fU0laRTFHQiAgICAgKDMyICogMTAyNCkKKyNkZWZpbmUgU0xJQ19IT1NUSURfREVGQVVMVCAgIDB4RkZGRiAgICAgIC8qIHVuaW5pdGlhbGl6ZWQgaG9zdGlkICovCisjZGVmaW5lIFNMSUNfTkJSX01BQ1MgICAgICAgICA0CisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgIDAKKyNlbHNlCisjdW5kZWYgIEZBTFNFCisjZGVmaW5lIEZBTFNFICAwCisjZW5kaWYKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgICAxCisjZWxzZQorI3VuZGVmICBUUlVFCisjZGVmaW5lIFRSVUUgICAxCisjZW5kaWYKKworc3RydWN0IHNsaWNfcmN2YnVmIHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQxWzZdOworICAgIHVzaG9ydCAgICBwYWQyOworICAgIHUzMiAgIHBhZDM7CisgICAgdTMyICAgcGFkNDsKKyAgICB1MzIgICBidWZmZXI7CisgICAgdTMyICAgbGVuZ3RoOworICAgIHUzMiAgIHN0YXR1czsKKyAgICB1MzIgICBwYWQ1OworICAgIHVzaG9ydCAgICBwYWQ2OworICAgIHVuc2lnbmVkIGNoYXIgICAgIGRhdGFbU0xJQ19SQ1ZCVUZfREFUQVNJWkVdOworfTsKKworIHN0cnVjdCBzbGljX2hkZHJfd2RzIHsKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisJdTMyICAgIGZyYW1lX3N0YXR1czsKKwl1MzIgICAgZnJhbWVfc3RhdHVzX2I7CisJdTMyICAgIHRpbWVfc3RhbXA7CisJdTMyICAgIGNoZWNrc3VtOworICAgIH0gaGRyc18xNHBvcnQ7CisgICAgc3RydWN0IHsKKwl1MzIgICAgZnJhbWVfc3RhdHVzOworCXVzaG9ydCAgICAgQnl0ZUNudDsKKwl1c2hvcnQgICAgIFRwQ2hrc3VtOworCXVzaG9ydCAgICAgQ3R4SGFzaDsKKwl1c2hvcnQgICAgIE1hY0hhc2g7CisJdTMyICAgIEJ1ZkxuazsKKyAgICB9IGhkcnNfZ2JpdDsKKyAgfSB1MDsKK307CisKKyNkZWZpbmUgZnJhbWVfc3RhdHVzMTQgICAgICAgIHUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1cworI2RlZmluZSBmcmFtZV9zdGF0dXNfYjE0ICAgICAgdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzX2IKKyNkZWZpbmUgZnJhbWVfc3RhdHVzR0IgICAgICAgIHUwLmhkcnNfZ2JpdC5mcmFtZV9zdGF0dXMKKworc3RydWN0IHNsaWNfaG9zdDY0c2cgeworCXUzMiAgICAgICAgcGFkZHJsOworCXUzMiAgICAgICAgcGFkZHJoOworCXUzMiAgICAgICAgbGVuZ3RoOworfTsKKworc3RydWN0IHNsaWNfaG9zdDY0X2NtZCB7CisgICAgdTMyICAgICAgIGhvc3RoYW5kbGU7CisgICAgdTMyICAgICAgIFJTVkQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgIGNvbW1hbmQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgIGZsYWdzOworICAgIHVuaW9uIHsKKwl1c2hvcnQgICAgICAgICAgcnN2MTsKKwl1c2hvcnQgICAgICAgICAgcnN2MjsKKyAgICB9IHUwOworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAgICAgICB0b3RsZW47CisJCXN0cnVjdCBzbGljX2hvc3Q2NHNnICAgIGJ1ZnNbU0xJQ19NQVg2NF9CQ05UXTsKKwl9IHNsaWNfYnVmZmVyczsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3Qgc2xpY19yc3BidWYgeworICAgIHUzMiAgIGhvc3RoYW5kbGU7CisgICAgdTMyICAgcGFkMDsKKyAgICB1MzIgICBwYWQxOworICAgIHUzMiAgIHN0YXR1czsKKyAgICB1MzIgICBwYWQyWzRdOworCit9OworCitzdHJ1Y3Qgc2xpY19yZWdzIHsKKwl1MzIJc2xpY19yZXNldDsJCS8qIFJlc2V0IFJlZ2lzdGVyICovCisJdTMyCXBhZDA7CisKKwl1MzIJc2xpY19pY3I7CQkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworCXUzMglwYWQyOworI2RlZmluZSBTTElDX0lDUgkJMHgwMDA4CisKKwl1MzIJc2xpY19pc3A7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIgKi8KKwl1MzIJcGFkMTsKKyNkZWZpbmUgU0xJQ19JU1AJCTB4MDAxMAorCisgICAgdTMyCXNsaWNfaXNyOwkJLyogSW50ZXJydXB0IHN0YXR1cyAqLworCXUzMglwYWQzOworI2RlZmluZSBTTElDX0lTUgkJMHgwMDE4CisKKyAgICB1MzIJc2xpY19oYmFyOwkJLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMgkJcGFkNDsKKwkvKiAzMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgaGRyIGJ1ZmZlcnMKKwkgICAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCisJICAgQnVmZmVycyBhcmUgMjU2IGJ5dGVzIGxvbmcgb24gMjU2LWJ5dGUgYm91bmRhcmllcy4gKi8KKyNkZWZpbmUgU0xJQ19IQkFSCQkweDAwMjAKKyNkZWZpbmUgU0xJQ19IQkFSX0NOVF9NU0sJMHgwMDAwMDBGRgorCisgICAgdTMyCXNsaWNfZGJhcjsJLyogRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KKwl1MzIJCXBhZDU7CisKKwkvKiA0IHNldHMgb2YgcmVnaXN0ZXJzOyBCdWZmZXJzIGFyZSAySyBieXRlcyBsb25nIDIgcGVyIDRLIHBhZ2UuICovCisjZGVmaW5lIFNMSUNfREJBUgkJMHgwMDI4CisjZGVmaW5lIFNMSUNfREJBUl9TSVpFCQkyMDQ4CisKKyAgICB1MzIJc2xpY19jYmFyOwkJIAkvKiBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuKi8KKwkvKiAxIHBlciBYTVQgaW50ZXJmYWNlCisJICAgMzEtNSAtIHBoeSBhZGRyIG9mIGhvc3QgY29tbWFuZCBidWZmZXIKKwkgICAgNC0wIC0gbGVuZ3RoIG9mIGNtZCBpbiBtdWx0aXBsZXMgb2YgMzIgYnl0ZXMKKwkgICBCdWZmZXJzIGFyZSAzMiBieXRlcyB1cCB0byA1MTIgYnl0ZXMgbG9uZyAqLworI2RlZmluZSBTTElDX0NCQVIJCTB4MDAzMAorI2RlZmluZSBTTElDX0NCQVJfTEVOX01TSwkweDAwMDAwMDFGCisjZGVmaW5lIFNMSUNfQ0JBUl9BTElHTgkJMHgwMDAwMDAyMAorCisJdTMyCXNsaWNfd2NzOwkJLyogd3JpdGUgY29udHJvbCBzdG9yZSovCisjZGVmaW5lCVNMSUNfV0NTCQkweDAwMzQKKyNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQJCTB4ODAwMDAwMDAJLypTdGFydCB0aGUgU0xJQyAoSnVtcCB0byBXQ1MpKi8KKyNkZWZpbmUgU0xJQ19XQ1NfQ09NUEFSRQkweDQwMDAwMDAwCS8qIENvbXBhcmUgd2l0aCB2YWx1ZSBpbiBXQ1MqLworCisgICAgdTMyCXNsaWNfcmJhcjsJCS8qIFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLworCXUzMgkJcGFkNzsKKwkgLyozMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgcmVzcG9uc2UgYnVmZmVycworCSAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCisJIEJ1ZmZlcnMgYXJlIDMyIGJ5dGVzIGxvbmcgb24gMzItYnl0ZSBib3VuZGFyaWVzLiovCisjZGVmaW5lIFNMSUNfUkJBUgkJMHgwMDM4CisjZGVmaW5lIFNMSUNfUkJBUl9DTlRfTVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xJQ19SQkFSX1NJWkUJCTMyCisKKwl1MzIJc2xpY19zdGF0czsJCS8qIHJlYWQgc3RhdGlzdGljcyAoVVBSKSAqLworCXUzMgkJcGFkODsKKyNkZWZpbmUJU0xJQ19SU1RBVAkJMHgwMDQwCisKKwl1MzIJc2xpY19ybHNyOwkJCS8qIHJlYWQgbGluayBzdGF0dXMgKi8KKwl1MzIJCXBhZDk7CisjZGVmaW5lIFNMSUNfTFNUQVQJCTB4MDA0OAorCisJdTMyCXNsaWNfd21jZmc7CQkJLyogV3JpdGUgTWFjIENvbmZpZyAqLworCXUzMgkJcGFkMTA7CisjZGVmaW5lCVNMSUNfV01DRkcJCTB4MDA1MAorCisJdTMyCXNsaWNfd3BoeTsJCQkvKiBXcml0ZSBwaHkgcmVnaXN0ZXIgKi8KKwl1MzIJCXBhZDExOworI2RlZmluZSBTTElDX1dQSFkJCTB4MDA1OAorCisJdTMyCXNsaWNfcmNiYXI7CQkJLypSY3YgQ21kIGJ1ZiBhZGRyIHJlZyovCisJdTMyCQlwYWQxMjsKKyNkZWZpbmUJU0xJQ19SQ0JBUgkJMHgwMDYwCisKKwl1MzIJc2xpY19yY29uZmlnOwkJLyogUmVhZCBTTElDIENvbmZpZyovCisJdTMyCQlwYWQxMzsKKyNkZWZpbmUgU0xJQ19SQ09ORklHCTB4MDA2OAorCisJdTMyCXNsaWNfaW50YWdnOwkJLyogSW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRpbWUqLworCXUzMgkJcGFkMTQ7CisjZGVmaW5lIFNMSUNfSU5UQUdHCQkweDAwNzAKKworCXUzMglzbGljX3d4Y2ZnOwkJLyogV3JpdGUgWE1JVCBjb25maWcgcmVnKi8KKwl1MzIJCXBhZDE2OworI2RlZmluZQlTTElDX1dYQ0ZHCQkweDAwNzgKKworCXUzMglzbGljX3dyY2ZnOwkJLyogV3JpdGUgUkNWIGNvbmZpZyByZWcqLworCXUzMgkJcGFkMTc7CisjZGVmaW5lCVNMSUNfV1JDRkcJCTB4MDA4MAorCisJdTMyCXNsaWNfd3JhZGRyYWw7CQkvKiBXcml0ZSByY3YgYWRkciBhIGxvdyovCisJdTMyCQlwYWQxODsKKyNkZWZpbmUJU0xJQ19XUkFERFJBTAkweDAwODgKKworCXUzMglzbGljX3dyYWRkcmFoOwkJLyogV3JpdGUgcmN2IGFkZHIgYSBoaWdoKi8KKwl1MzIJCXBhZDE5OworI2RlZmluZQlTTElDX1dSQUREUkFICTB4MDA5MAorCisJdTMyCXNsaWNfd3JhZGRyYmw7CQkvKiBXcml0ZSByY3YgYWRkciBiIGxvdyovCisJdTMyCQlwYWQyMDsKKyNkZWZpbmUJU0xJQ19XUkFERFJCTAkweDAwOTgKKworCXUzMglzbGljX3dyYWRkcmJoOwkJLyogV3JpdGUgcmN2IGFkZHIgYiBoaWdoKi8KKwl1MzIJCXBhZDIxOworI2RlZmluZQlTTElDX1dSQUREUkJICTB4MDBhMAorCisJdTMyCXNsaWNfbWNhc3Rsb3c7CQkvKiBMb3cgYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJCXBhZDIyOworI2RlZmluZQlTTElDX01DQVNUTE9XCTB4MDBhOAorCisJdTMyCXNsaWNfbWNhc3RoaWdoOwkJLyogSGlnaCBiaXRzIG9mIG1jYXN0IG1hc2sqLworCXUzMgkJcGFkMjM7CisjZGVmaW5lCVNMSUNfTUNBU1RISUdICTB4MDBiMAorCisJdTMyCXNsaWNfcGluZzsJCQkvKiBQaW5nIHRoZSBjYXJkKi8KKwl1MzIJCXBhZDI0OworI2RlZmluZSBTTElDX1BJTkcJCTB4MDBiOAorCisJdTMyCXNsaWNfZHVtcF9jbWQ7CQkvKiBEdW1wIGNvbW1hbmQgKi8KKwl1MzIJCXBhZDI1OworI2RlZmluZSBTTElDX0RVTVBfQ01ECTB4MDBjMAorCisJdTMyCXNsaWNfZHVtcF9kYXRhOwkJLyogRHVtcCBkYXRhIHBvaW50ZXIgKi8KKwl1MzIJCXBhZDI2OworI2RlZmluZSBTTElDX0RVTVBfREFUQQkweDAwYzgKKworCXUzMglzbGljX3BjaXN0YXR1czsJLyogUmVhZCBjYXJkJ3MgcGNpX3N0YXR1cyByZWdpc3RlciAqLworCXUzMgkJcGFkMjc7CisjZGVmaW5lCVNMSUNfUENJU1RBVFVTCTB4MDBkMAorCisJdTMyCXNsaWNfd3Job3N0aWQ7CQkvKiBXcml0ZSBob3N0aWQgZmllbGQgKi8KKwl1MzIJCXBhZDI4OworI2RlZmluZSBTTElDX1dSSE9TVElECQkgMHgwMGQ4CisjZGVmaW5lIFNMSUNfUkRIT1NUSURfMUdCCSAweDE1NTQKKyNkZWZpbmUgU0xJQ19SREhPU1RJRF8yR0IJIDB4MTU1NAorCisJdTMyCXNsaWNfbG93X3Bvd2VyOwkvKiBQdXQgY2FyZCBpbiBhIGxvdyBwb3dlciBzdGF0ZSAqLworCXUzMgkJcGFkMjk7CisjZGVmaW5lIFNMSUNfTE9XX1BPV0VSCTB4MDBlMAorCisJdTMyCXNsaWNfcXVpZXNjZTsJLyogZm9yY2Ugc2xpYyBpbnRvIHF1aWVzY2VudCBzdGF0ZQorCQkJCQkgYmVmb3JlIHNvZnQgcmVzZXQgKi8KKwl1MzIJCXBhZDMwOworI2RlZmluZSBTTElDX1FVSUVTQ0UJMHgwMGU4CisKKwl1MzIJc2xpY19yZXNldF9pZmFjZTsJLyogcmVzZXQgaW50ZXJmYWNlIHF1ZXVlcyAqLworCXUzMgkJcGFkMzE7CisjZGVmaW5lIFNMSUNfUkVTRVRfSUZBQ0UgMHgwMGYwCisKKyAgICB1MzIJc2xpY19hZGRyX3VwcGVyOwkvKiBCaXRzIDYzLTMyIGZvciBob3N0IGkvZiBhZGRycyAqLworCXUzMgkJcGFkMzI7CisjZGVmaW5lIFNMSUNfQUREUl9VUFBFUgkweDAwZjggLypSZWdpc3RlciBpcyBvbmx5IHdyaXR0ZW4gd2hlbiBpdCBoYXMgY2hhbmdlZCovCisKKyAgICB1MzIJc2xpY19oYmFyNjQ7CQkvKiA2NCBiaXQgSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMgkJcGFkMzM7CisjZGVmaW5lIFNMSUNfSEJBUjY0CQkweDAxMDAKKworICAgIHUzMglzbGljX2RiYXI2NDsJLyogNjQgYml0IERhdGEgYnVmZmVyIGhhbmRsZSAmIGFkZHJlc3MgcmVnICovCisJdTMyCQlwYWQzNDsKKyNkZWZpbmUgU0xJQ19EQkFSNjQJCTB4MDEwOAorCisgICAgdTMyCXNsaWNfY2JhcjY0OwkgCS8qIDY0IGJpdCBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuICovCisJdTMyCQlwYWQzNTsKKyNkZWZpbmUgU0xJQ19DQkFSNjQJCTB4MDExMAorCisgICAgdTMyCXNsaWNfcmJhcjY0OwkJLyogNjQgYml0IFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLworCXUzMgkJcGFkMzY7CisjZGVmaW5lIFNMSUNfUkJBUjY0CQkweDAxMTgKKworCXUzMglzbGljX3JjYmFyNjQ7CQkvKiA2NCBiaXQgUmN2IENtZCBidWYgYWRkciByZWcqLworCXUzMgkJcGFkMzc7CisjZGVmaW5lCVNMSUNfUkNCQVI2NAkweDAxMjAKKworCXUzMglzbGljX3N0YXRzNjQ7CQkvKnJlYWQgc3RhdGlzdGljcyAoNjQgYml0IFVQUikqLworCXUzMgkJcGFkMzg7CisjZGVmaW5lCVNMSUNfUlNUQVQ2NAkweDAxMjgKKworCXUzMglzbGljX3Jjdl93Y3M7CS8qRG93bmxvYWQgR2lnYWJpdCBSQ1Ygc2VxdWVuY2VyIHVjb2RlKi8KKwl1MzIJCXBhZDM5OworI2RlZmluZSBTTElDX1JDVl9XQ1MJMHgwMTMwCisjZGVmaW5lIFNMSUNfUkNWV0NTX0JFR0lOCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfRklOSVNICTB4ODAwMDAwMDAKKworCXUzMglzbGljX3dydmxhbmlkOwkJLyogV3JpdGUgVmxhbklkIGZpZWxkICovCisJdTMyCQlwYWQ0MDsKKyNkZWZpbmUgU0xJQ19XUlZMQU5JRAkweDAxMzgKKworCXUzMglzbGljX3JlYWRfeGZfaW5mbzsgIC8qIFJlYWQgVHJhbnNmb3JtZXIgaW5mbyAqLworCXUzMgkJcGFkNDE7CisjZGVmaW5lIFNMSUNfUkVBRF9YRl9JTkZPIAkweDAxNDAKKworCXUzMglzbGljX3dyaXRlX3hmX2luZm87IC8qIFdyaXRlIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJCXBhZDQyOworI2RlZmluZSBTTElDX1dSSVRFX1hGX0lORk8gCTB4MDE0OAorCisJdTMyCVJTVkQxOyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQzOworCisJdTMyCVJTVkQyOyAJICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ0OworCisJdTMyCVJTVkQzOyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ1OworCisJdTMyCVJTVkQ0OyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ2OworCisJdTMyCXNsaWNfdGlja3NfcGVyX3NlYzsgLyogV3JpdGUgY2FyZCB0aWNrcyBwZXIgc2Vjb25kICovCisJdTMyCQlwYWQ0NzsKKyNkZWZpbmUgU0xJQ19USUNLU19QRVJfU0VDCTB4MDE3MAorCit9OworCitlbnVtIFVQUl9SRVFVRVNUIHsKKyAgICBTTElDX1VQUl9TVEFUUywKKyAgICBTTElDX1VQUl9STFNSLAorICAgIFNMSUNfVVBSX1dDRkcsCisgICAgU0xJQ19VUFJfUkNPTkZJRywKKyAgICBTTElDX1VQUl9SUEhZLAorICAgIFNMSUNfVVBSX0VOTEIsCisgICAgU0xJQ19VUFJfRU5DVCwKKyAgICBTTElDX1VQUl9QRFdOLAorICAgIFNMSUNfVVBSX1BJTkcsCisgICAgU0xJQ19VUFJfRFVNUCwKK307CisKK3N0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4geworICAgIHUzMiAgICBwYXR0ZXJubGVuZ3RoOworICAgIHVuc2lnbmVkIGNoYXIgICAgICBwYXR0ZXJuW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICBtYXNrW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworfTsKKworc3RydWN0IGluaWNwbV9zdGF0ZSB7CisgICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcmNhcHM7CisgICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcnN0YXRlOworICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9saW5rc3RhdHVzOworICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9tYWdpY3BhY2tldDsKKyAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfZnJhbWVwYXR0ZXJuOworICAgIHN0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4gICAgd2FrZXBhdHRlcm5bU0xJQ19QTV9NQVhQQVRURVJOU107Cit9OworCitzdHJ1Y3Qgc2xpY3BtX3BhY2tldF9wYXR0ZXJuIHsKKyAgICB1MzIgICAgIHByaW9yaXR5OworICAgIHUzMiAgICAgcmVzZXJ2ZWQ7CisgICAgdTMyICAgICBtYXNrc2l6ZTsKKyAgICB1MzIgICAgIHBhdHRlcm5vZmZzZXQ7CisgICAgdTMyICAgICBwYXR0ZXJuc2l6ZTsKKyAgICB1MzIgICAgIHBhdHRlcm5mbGFnczsKK307CisKK2VudW0gc2xpY3BtX3Bvd2VyX3N0YXRlIHsKKyAgICBzbGljcG1fc3RhdGVfdW5zcGVjaWZpZWQgPSAwLAorICAgIHNsaWNwbV9zdGF0ZV9kMCwKKyAgICBzbGljcG1fc3RhdGVfZDEsCisgICAgc2xpY3BtX3N0YXRlX2QyLAorICAgIHNsaWNwbV9zdGF0ZV9kMywKKyAgICBzbGljcG1fc3RhdGVfbWF4aW11bQorfTsKKworc3RydWN0IHNsaWNwbV93YWtldXBfY2FwYWJpbGl0aWVzIHsKKyAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX21hZ2ljX3BhY2tldF93YWtldXA7CisgICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9wYXR0ZXJuX3dha2V1cDsKKyAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX2xpbmtfY2hhbmdlX3dha2V1cDsKK307CisKK3N0cnVjdCBzbGljX3BucF9jYXBhYmlsaXRpZXMgeworCXUzMiBmbGFnczsKKwlzdHJ1Y3Qgc2xpY3BtX3dha2V1cF9jYXBhYmlsaXRpZXMgd2FrZXVwX2NhcGFiaWxpdGllczsKK307CisKK3N0cnVjdCB4bXRfc3RhdHMgeworCXUzMiB4bWl0X3RjcF9ieXRlczsKKwl1MzIgeG1pdF90Y3Bfc2VnczsKKwl1MzIgeG1pdF9ieXRlczsKKwl1MzIgeG1pdF9jb2xsaXNpb25zOworCXUzMiB4bWl0X3VuaWNhc3RzOworCXUzMiB4bWl0X290aGVyX2Vycm9yOworCXUzMiB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zOworfTsKKworc3RydWN0IHJjdl9zdGF0cyB7CisJdTMyIHJjdl90Y3BfYnl0ZXM7CisJdTMyIHJjdl90Y3Bfc2VnczsKKwl1MzIgcmN2X2J5dGVzOworCXUzMiByY3ZfdW5pY2FzdHM7CisJdTMyIHJjdl9vdGhlcl9lcnJvcjsKKwl1MzIgcmN2X2Ryb3BzOworfTsKKworc3RydWN0IHhtdF9zdGF0c2diIHsKKwl1NjQgeG1pdF90Y3BfYnl0ZXM7CisJdTY0IHhtaXRfdGNwX3NlZ3M7CisJdTY0IHhtaXRfYnl0ZXM7CisJdTY0IHhtaXRfY29sbGlzaW9uczsKKwl1NjQgeG1pdF91bmljYXN0czsKKwl1NjQgeG1pdF9vdGhlcl9lcnJvcjsKKwl1NjQgeG1pdF9leGNlc3NfY29sbGlzaW9uczsKK307CisKK3N0cnVjdCByY3Zfc3RhdHNnYiB7CisJdTY0IHJjdl90Y3BfYnl0ZXM7CisJdTY0IHJjdl90Y3Bfc2VnczsKKwl1NjQgcmN2X2J5dGVzOworCXU2NCByY3ZfdW5pY2FzdHM7CisJdTY0IHJjdl9vdGhlcl9lcnJvcjsKKwl1NjQgcmN2X2Ryb3BzOworfTsKKworc3RydWN0IHNsaWNfc3RhdHMgeworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeG10X3N0YXRzICB4bXQxMDA7CisJCXN0cnVjdCByY3Zfc3RhdHMgIHJjdjEwMDsKKwl9IHN0YXRzXzEwMDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeG10X3N0YXRzZ2IgICAgIHhtdEdCOworCQlzdHJ1Y3QgcmN2X3N0YXRzZ2IgICAgIHJjdkdCOworCX0gc3RhdHNfR0I7CisgICAgfSB1OworfTsKKworI2RlZmluZSB4bWl0X3RjcF9zZWdzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF90Y3Bfc2VncworI2RlZmluZSB4bWl0X3RjcF9ieXRlczEwMCAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF90Y3BfYnl0ZXMKKyNkZWZpbmUgeG1pdF9ieXRlczEwMCAgICAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfYnl0ZXMKKyNkZWZpbmUgeG1pdF9jb2xsaXNpb25zMTAwICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfY29sbGlzaW9ucworI2RlZmluZSB4bWl0X3VuaWNhc3RzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF91bmljYXN0cworI2RlZmluZSB4bWl0X290aGVyX2Vycm9yMTAwICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9vdGhlcl9lcnJvcgorI2RlZmluZSB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zMTAwICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9leGNlc3NfY29sbGlzaW9ucworI2RlZmluZSByY3ZfdGNwX3NlZ3MxMDAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9zZWdzCisjZGVmaW5lIHJjdl90Y3BfYnl0ZXMxMDAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlczEwMCAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfYnl0ZXMKKyNkZWZpbmUgcmN2X3VuaWNhc3RzMTAwICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl91bmljYXN0cworI2RlZmluZSByY3Zfb3RoZXJfZXJyb3IxMDAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wczEwMCAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfZHJvcHMKKyNkZWZpbmUgeG1pdF90Y3Bfc2Vnc19nYiAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X3RjcF9zZWdzCisjZGVmaW5lIHhtaXRfdGNwX2J5dGVzX2diICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF90Y3BfYnl0ZXMKKyNkZWZpbmUgeG1pdF9ieXRlc19nYiAgICAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X2J5dGVzCisjZGVmaW5lIHhtaXRfY29sbGlzaW9uc19nYiAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF9jb2xsaXNpb25zCisjZGVmaW5lIHhtaXRfdW5pY2FzdHNfZ2IgICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF91bmljYXN0cworI2RlZmluZSB4bWl0X290aGVyX2Vycm9yX2diICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfb3RoZXJfZXJyb3IKKyNkZWZpbmUgeG1pdF9leGNlc3NfY29sbGlzaW9uc19nYiAgdS5zdGF0c19HQi54bXRHQi54bWl0X2V4Y2Vzc19jb2xsaXNpb25zCisKKyNkZWZpbmUgcmN2X3RjcF9zZWdzX2diICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX3NlZ3MKKyNkZWZpbmUgcmN2X3RjcF9ieXRlc19nYiAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2J5dGVzCisjZGVmaW5lIHJjdl91bmljYXN0c19nYiAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X3VuaWNhc3RzCisjZGVmaW5lIHJjdl9vdGhlcl9lcnJvcl9nYiAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2Ryb3BzCisKK3N0cnVjdCBzbGljX2NvbmZpZ19tYWMgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIG1hY2FkZHJBWzZdOworfTsKKworI2RlZmluZSBBVEtfRlJVX0ZPUk1BVCAgICAgICAgMHgwMAorI2RlZmluZSBWRU5ET1IxX0ZSVV9GT1JNQVQgICAgMHgwMQorI2RlZmluZSBWRU5ET1IyX0ZSVV9GT1JNQVQgICAgMHgwMgorI2RlZmluZSBWRU5ET1IzX0ZSVV9GT1JNQVQgICAgMHgwMworI2RlZmluZSBWRU5ET1I0X0ZSVV9GT1JNQVQgICAgMHgwNAorI2RlZmluZSBOT19GUlVfRk9STUFUICAgICAgICAgMHhGRgorCitzdHJ1Y3QgYXRrX2ZydSB7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgYXNzZW1ibHlbNl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcmV2aXNpb25bMl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VyaWFsWzE0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbM107Cit9OworCitzdHJ1Y3QgdmVuZG9yMV9mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGNvbW1vZGl0eTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBhc3NlbWJseVs0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICByZXZpc2lvblsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzdXBwbGllclsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBkYXRlWzJdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcXVlbmNlWzNdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFsxM107Cit9OworCitzdHJ1Y3QgdmVuZG9yMl9mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhcnRbOF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc3VwcGxpZXJbNV07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgZGF0ZVszXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXF1ZW5jZVs0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbN107Cit9OworCitzdHJ1Y3QgdmVuZG9yM19mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcmlhbFsxNF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworfTsKKworc3RydWN0IHZlbmRvcjRfZnJ1IHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBudW1iZXJbOF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFydFs4XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICB2ZXJzaW9uWzhdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKK307CisKK3VuaW9uIG9lbWZydSB7CisgICAgc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7CisgICAgc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7CisgICAgc3RydWN0IHZlbmRvcjNfZnJ1ICAgdmVuZG9yM19mcnU7CisgICAgc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7Cit9OworCisvKgorICAgU0xJQyBFRVBST00gc3RydWN0dXJlIGZvciBNb2phdmUKKyovCitzdHJ1Y3Qgc2xpY19lZXByb20geworCXVzaG9ydAkJSWQ7CQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScqLworCXVzaG9ydAkJRWVjb2RlU2l6ZTsJLyogMDEgU2l6ZSBvZiBFRVBST00gQ29kZXMgKGJ5dGVzICogNCkqLworCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAwMiBGbGFzaCBzaXplICovCisJdXNob3J0CQlFZXByb21TaXplOwkvKiAwMyBFRVBST00gU2l6ZSAqLworCXVzaG9ydAkJVmVuZG9ySWQ7CS8qIDA0IFZlbmRvciBJRCAqLworCXVzaG9ydAkJRGV2aWNlSWQ7CS8qIDA1IERldmljZSBJRCAqLworCXVuc2lnbmVkIGNoYXIJCVJldmlzaW9uSWQ7CS8qIDA2IFJldmlzaW9uIElEICovCisJdW5zaWduZWQgY2hhcgkJQ2xhc3NDb2RlWzNdOwkvKiAwNyBDbGFzcyBDb2RlICovCisJdW5zaWduZWQgY2hhcgkJRGJnSW50UGluOwkvKiAwOCBEZWJ1ZyBJbnRlcnJ1cHQgcGluICovCisJdW5zaWduZWQgY2hhcgkJTmV0SW50UGluMDsJLyogICAgTmV0d29yayBJbnRlcnJ1cHQgUGluICovCisJdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDA5IE1pbmltdW0gZ3JhbnQgKi8KKwl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1c2hvcnQJCVBjaVN0YXR1czsJLyogMTAgUENJIFN0YXR1cyAqLworCXVzaG9ydAkJU3ViU3lzVklkOwkvKiAxMSBTdWJzeXN0ZW0gVmVuZG9yIElkICovCisJdXNob3J0CQlTdWJTeXNJZDsJLyogMTIgU3Vic3lzdGVtIElEICovCisJdXNob3J0CQlEYmdEZXZJZDsJLyogMTMgRGVidWcgRGV2aWNlIElkICovCisJdXNob3J0CQlEcmFtUm9tRm47CS8qIDE0IERyYW0vUm9tIGZ1bmN0aW9uICovCisJdXNob3J0CQlEU2l6ZTJQY2k7CS8qIDE1IERSQU0gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNjRLKSAqLworCXVzaG9ydAlSU2l6ZTJQY2k7CS8qIDE2IFJPTSBleHRlbnNpb24gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNGspICovCisJdW5zaWduZWQgY2hhciBOZXRJbnRQaW4xOy8qIDE3IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAxCisJCQkJICAgIChzaW1iYS9sZW9uZSBvbmx5KSAqLworCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMjsgLypOZXR3b3JrIEludGVyZmFjZSBQaW4gMiAoc2ltYmEvbGVvbmUgb25seSkqLworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBOZXRJbnRQaW4zOy8qMTggTmV0d29yayBJbnRlcmZhY2UgUGluIDMKKwkJCQkJICAgKHNpbWJhIG9ubHkpKi8KKwkJdW5zaWduZWQgY2hhciBGcmVlVGltZTsvKkZyZWVUaW1lIHNldHRpbmcgKGxlb25lL21vamF2ZSBvbmx5KSAqLworCX0gdTE7CisJdW5zaWduZWQgY2hhcglUQkljdGw7CS8qICAgIDEwLWJpdCBpbnRlcmZhY2UgY29udHJvbCAoTW9qYXZlIG9ubHkpICovCisJdXNob3J0CQlEcmFtU2l6ZTsJLyogMTkgRFJBTSBzaXplIChieXRlcyAqIDY0aykgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQkvKiBNYWMgSW50ZXJmYWNlIFNwZWNpZmljIHBvcnRpb25zICovCisJCQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjCU1hY0luZm9bU0xJQ19OQlJfTUFDU107CisJCX0gbWFjOwkJCQkvKiBNQUMgYWNjZXNzIGZvciBhbGwgYm9hcmRzICovCisJCXN0cnVjdCB7CisJCQkvKiB1c2UgYWJvdmUgc3RydWN0IGZvciBNQUMgYWNjZXNzICovCisJCQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjCXBhZFtTTElDX05CUl9NQUNTIC0gMV07CisJCQl1c2hvcnQJCURldmljZUlkMjsJLyogRGV2aWNlIElEIGZvciAybmQKKwkJCQkJCQkJUENJIGZ1bmN0aW9uICovCisJCQl1bnNpZ25lZCBjaGFyCUludFBpbjI7CS8qIEludGVycnVwdCBwaW4gZm9yCisJCQkJCQkJICAgMm5kIFBDSSBmdW5jdGlvbiAqLworCQkJdW5zaWduZWQgY2hhcglDbGFzc0NvZGUyWzNdOwkvKiBDbGFzcyBDb2RlIGZvciAybmQKKwkJCQkJCQkJUENJIGZ1bmN0aW9uICovCisJCX0gbW9qYXZlOwkvKiAybmQgZnVuY3Rpb24gYWNjZXNzIGZvciBnaWdhYml0IGJvYXJkICovCisJfSB1MjsKKwl1c2hvcnQJCUNmZ0J5dGU2OwkvKiBDb25maWcgQnl0ZSA2ICovCisJdXNob3J0CQlQTUVDYXBhYjsJLyogUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXVzaG9ydAkJTndDbGtDdHJsczsJLyogTmV0d29ya0Nsb2NrQ29udHJvbHMgKi8KKwl1bnNpZ25lZCBjaGFyCUZydUZvcm1hdDsJLyogQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KKwlzdHJ1Y3QgYXRrX2ZydSAgIEF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBja3N1bSBieXRlcworCQkJCSAqKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwkJCQkgKiBieXRlcyBhdCB0aGUgZW5kICovCit9OworCisvKiBTTElDIEVFUFJPTSBzdHJ1Y3R1cmUgZm9yIE9hc2lzICovCitzdHJ1Y3Qgb3NsaWNfZWVwcm9tIHsKKwl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCisJdXNob3J0CQlFZWNvZGVTaXplOwkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCisJdXNob3J0CQlGbGFzaENvbmZpZzA7CS8qIDAyIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAwICovCisJdXNob3J0CQlGbGFzaENvbmZpZzE7CS8qIDAzIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAxICovCisJdXNob3J0CQlWZW5kb3JJZDsJLyogMDQgVmVuZG9yIElEICovCisJdXNob3J0CQlEZXZpY2VJZDsJLyogMDUgRGV2aWNlIElEIChmdW5jdGlvbiAwKSAqLworCXVuc2lnbmVkIGNoYXIJUmV2aXNpb25JZDsJLyogMDYgUmV2aXNpb24gSUQgKi8KKwl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSBmb3IgUENJIGZ1bmN0aW9uIDAgKi8KKwl1bnNpZ25lZCBjaGFyCUludFBpbjE7CS8qIDA4IEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAxKi8KKwl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZTJbM107CS8qIDA5IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAxICovCisJdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiAxMCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMiovCisJdW5zaWduZWQgY2hhcglJbnRQaW4wOwkvKiAgICBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMCovCisJdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDExIE1pbmltdW0gZ3JhbnQgKi8KKwl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTIgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEzIFN1YnN5c3RlbSBJRCAqLworCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAxNCBGbGFzaCBzaXplIChieXRlcyAvIDRLKSAqLworCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAvIDY0SykgKi8KKwl1c2hvcnQJCVJTaXplMlBjaTsJLyogMTYgRmxhc2ggKFJPTSBleHRlbnNpb24pIHNpemUgdG8KKwkJCQkJCVBDSSAoYnl0ZXMgLyA0SykgKi8KKwl1c2hvcnQJCURldmljZUlkMTsJLyogMTcgRGV2aWNlIElkIChmdW5jdGlvbiAxKSAqLworCXVzaG9ydAkJRGV2aWNlSWQyOwkvKiAxOCBEZXZpY2UgSWQgKGZ1bmN0aW9uIDIpICovCisJdXNob3J0CQlDZmdCeXRlNjsJLyogMTkgRGV2aWNlIFN0YXR1cyBDb25maWcgQnl0ZXMgNi03ICovCisJdXNob3J0CQlQTUVDYXBhYjsJLyogMjAgUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXVuc2lnbmVkIGNoYXIJCU1TSUNhcGFiOwkvKiAyMSBNU0kgY2FwYWJpbGl0aWVzICovCisJdW5zaWduZWQgY2hhcgkJQ2xvY2tEaXZpZGVyOwkvKiAgICBDbG9jayBkaXZpZGVyICovCisJdXNob3J0CQlQY2lTdGF0dXNMb3c7CS8qIDIyIFBDSSBTdGF0dXMgYml0cyAxNTowICovCisJdXNob3J0CQlQY2lTdGF0dXNIaWdoOwkvKiAyMyBQQ0kgU3RhdHVzIGJpdHMgMzE6MTYgKi8KKwl1c2hvcnQJCURyYW1Db25maWdMb3c7CS8qIDI0IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDE1OjAgKi8KKwl1c2hvcnQJCURyYW1Db25maWdIaWdoOwkvKiAyNSBEUkFNIENvbmZpZ3VyYXRpb24gYml0cyAzMToxNiAqLworCXVzaG9ydAkJRHJhbVNpemU7CS8qIDI2IERSQU0gc2l6ZSAoYnl0ZXMgLyA2NEspICovCisJdXNob3J0CQlHcGlvVGJpQ3RsOy8qIDI3IEdQSU8vVEJJIGNvbnRyb2xzIGZvciBmdW5jdGlvbnMgMS8wICovCisJdXNob3J0CQlFZXByb21TaXplOwkJLyogMjggRUVQUk9NIFNpemUgKi8KKwlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjIE1hY0luZm9bMl07CS8qIDI5IE1BQyBhZGRyZXNzZXMgKDIgcG9ydHMpICovCisJdW5zaWduZWQgY2hhcglGcnVGb3JtYXQ7CS8qIDM1IEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtZnJ1ICAgIE9lbUZydTsgICAgICAgICAvKiBvcHRpb25hbCBPRU0gRlJVIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgY2hhcglQYWRbNF07CS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNoZWNrc3VtIGJ5dGVzCisJCQkJICogKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwkJCQkgKiBieXRlcyBhdCB0aGUgZW5kCisJCQkJICovCit9OworCisjZGVmaW5lCU1BWF9FRUNPREVfU0laRQlzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKQorI2RlZmluZSBNSU5fRUVDT0RFX1NJWkUJMHg2MgkvKiBjb2RlIHNpemUgd2l0aG91dCBvcHRpb25hbCBPRU0gRlJVIHN0dWZmICovCisKKy8qIFNMSUMgQ09ORklHIHN0cnVjdHVyZQorCisgVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdGhlIENBUkQgc3RydWN0dXJlIGFuZCBpcyB2YWxpZCBmb3IgYWxsCisgYm9hcmQgdHlwZXMuICBJdCBpcyBmaWxsZWQgaW4gZnJvbSB0aGUgYXBwcm9wcmlhdGUgRUVQUk9NIHN0cnVjdHVyZQorIGJ5IFNsaWNHZXRDb25maWdEYXRhKCkuCisqLworc3RydWN0IHNsaWNfY29uZmlnIHsKKwlib29sIEVlcHJvbVZhbGlkOwkvKiBWYWxpZCBFRVBST00gZmxhZyAoY2hlY2tzdW0gZ29vZD8pICovCisJdXNob3J0CQlEcmFtU2l6ZTsJLyogRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KKwlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjIE1hY0luZm9bU0xJQ19OQlJfTUFDU107IC8qIE1BQyBhZGRyZXNzZXMgKi8KKwl1bnNpZ25lZCBjaGFyCQlGcnVGb3JtYXQ7CS8qIEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24geworCQlzdHJ1Y3QgdmVuZG9yMV9mcnUgICB2ZW5kb3IxX2ZydTsKKwkJc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7CisJCXN0cnVjdCB2ZW5kb3IzX2ZydSAgIHZlbmRvcjNfZnJ1OworCQlzdHJ1Y3QgdmVuZG9yNF9mcnUgICB2ZW5kb3I0X2ZydTsKKwl9IE9lbUZydTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjg4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaW5jLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY2luYy5oCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvdGhlciBpbmNsdWRlIGZpbGVzIGFuZCBwcm90b3R5cGUgZGVmaW5pdGlvbnMKKyAqIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NMSUNfSU5DTFVERV9IXworI2RlZmluZSBfU0xJQ19JTkNMVURFX0hfCisKKyNpbmNsdWRlICJzbGljX29zLmgiCisjaW5jbHVkZSAic2xpY2RiZy5oIgorI2luY2x1ZGUgInNsaWNody5oIgorI2luY2x1ZGUgInNsaWMuaCIKKworc3RhdGljIGludCBzbGljX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICAqcGNpZGV2LAorCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgICplbnQpOworc3RhdGljIHZvaWQgc2xpY19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9kcml2ZXIodm9pZCk7CitzdGF0aWMgaW50ICBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50ICBzbGljX2VudHJ5X2hhbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50ICBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCAgc2xpY194bWl0X3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgICAgKmFkYXB0ZXIsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAgICpza2IsCisJCQl2b2lkICpjbWQsCisJCQl1MzIgICAgICAgICAgIHNrYnR5cGUsCisJCQl1MzIgICAgICAgICAgIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIHVpbnQgZmx1c2gpOworc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCXUzMiB2YWx1ZSwgdm9pZCBfX2lvbWVtICpyZWdoLCB1MzIgcGFkZHJoLCB1aW50IGZsdXNoKTsKKworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKworc3RhdGljIGludCBzbGljX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpOworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX3htaXRfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcik7CitzdGF0aWMgaW50ICAgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JzcHF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBzbGljX3JzcGJ1ZiAqc2xpY19yc3BxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFtZW1faW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxbWVtX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHUzMiAqc2xpY19jbWRxbWVtX2FkZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCAgIHNsaWNfY21kcV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfYWRkY21kcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICpwYWdlKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX3B1dGRvbmVfaXJxKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQkJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kKTsKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpzbGljX2NtZHFfZ2V0ZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICAgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX2ZpbGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHUzMiBzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkICBzbGljX3JjdnF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlX2Vycm9yKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1Zik7CitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19pbnRhZ2dfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdmFsdWUpOworc3RhdGljIGludCAgc2xpY19jYXJkX2Rvd25sb2FkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB1MzIgc2xpY19jYXJkX2xvY2F0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyB2b2lkIHNsaWNfaWZfc3RvcF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2lmX3N0YXJ0X3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgIHNsaWNfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGxpbmtzcGVlZCwKKwkJCXUzMiBsaW5rZHVwbGV4KTsKK3N0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOworc3RhdGljIHZvaWQgc2xpY19pbml0X2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBib29sIHNsaWNfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9tYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19tY2FzdF9hZGRfbGlzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciAqYWRkcmVzcyk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX21jYXN0X2dldF9tYWNfaGFzaChjaGFyICptYWNhZGRyKTsKK3N0YXRpYyB2b2lkICBzbGljX21jYXN0X3NldF9iaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtjaGFuZ2UpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAorCQkJdTMyIGNvbmZpZ2gpOworc3RhdGljIHZvaWQgc2xpY190aW1lcl9sb2FkX2NoZWNrKHVsb25nIGNvbnRleHQpOworc3RhdGljIHZvaWQgc2xpY190aW1lcl9waW5nKHVsb25nIGRldik7CitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpOworc3RhdGljIHVzaG9ydCBzbGljX2VlcHJvbV9ja3N1bShjaGFyICptLCBpbnQgbGVuKTsKKy8qIHVwciAqLworc3RhdGljIHZvaWQgc2xpY191cHJfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIElzcik7CitzdGF0aWMgaW50ICBzbGljX3Vwcl9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICAgICphZGFwdGVyLAorCQkJdTMyICAgICAgICAgICAgdXByX3JlcXVlc3QsCisJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YSwKKwkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhX2gsCisJCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyLAorCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlcl9oKTsKK3N0YXRpYyBpbnQgIHNsaWNfdXByX3F1ZXVlX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgICAgICAqYWRhcHRlciwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfcmVxdWVzdCwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YSwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YV9oLAorCQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXIsCisJCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlcl9oKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X2luaXRfY3JjMzIodm9pZCk7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorc3RhdGljIGludCAgIHNsaWNfZHVtcF90aHJlYWQodm9pZCAqY29udGV4dCk7CitzdGF0aWMgdWludCAgc2xpY19pbml0X2R1bXBfdGhyZWFkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX2dldF9kdW1wX2luZGV4KGNoYXIgKnBhdGgpOworc3RhdGljIHUzMiBzbGljX2R1bXBfY2FyZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIGJvb2wgcmVzdW1lKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2hhbHQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpOworc3RhdGljIHUzMiBzbGljX2R1bXBfcmVnKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2RhdGEoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgYWRkciwKKwkJCXVzaG9ydCBjb3VudCwgdW5zaWduZWQgY2hhciBkZXNjKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3F1ZXVlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGJ1Zl9waHlzLAorCQkJdTMyIGJ1Zl9waHlzaCwgdTMyIHF1ZXVlKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2xvYWRfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgZGF0YSwKKwkJCQl1MzIgcXVldWUpOworc3RhdGljIHUzMiBzbGljX2R1bXBfY2FtKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGFkZHIsCisJCQl1MzIgY291bnQsIHVuc2lnbmVkIGNoYXIgZGVzYyk7CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3Jlc3VtZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYyk7CitzdGF0aWMgdTMyIHNsaWNfZHVtcF9zZW5kX2NtZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBjbWRfcGh5cywKKwkJCQl1MzIgY21kX3BoeXNoLCB1MzIgYnVmX3BoeXMsCisJCQkJdTMyIGJ1Zl9waHlzaCk7CisKKyNkZWZpbmUgY3JlYXRlX2ZpbGUoeCkgICAgICAgICBTVEFUVVNfU1VDQ0VTUworI2RlZmluZSB3cml0ZV9maWxlKHcsIHgsIHksIHopIFNUQVRVU19TVUNDRVNTCisjZGVmaW5lIGNsb3NlX2ZpbGUoeCkgICAgICAgICAgU1RBVFVTX1NVQ0NFU1MKKyNkZWZpbmUgcmVhZF9maWxlKHcsIHgsIHksIHopICBTVEFUVVNfU1VDQ0VTUworI2RlZmluZSBvcGVuX2ZpbGUoeCkgICAgICAgICAgIFNUQVRVU19TVUNDRVNTCisKKy8qIFBBR0VfU0laRSAqIDE2ICovCisjZGVmaW5lIERVTVBfUEFHRV9TSVpFICAgICAgICAgMHhGRkZGCisjZGVmaW5lIERVTVBfUEFHRV9TSVpFX0hBTEYgICAgMHg3RkZFCisjZW5kaWYKKworI2VuZGlmIC8qIF9TTElDX0lOQ0xVREVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE5NDkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCkBAIC0wLDAgKzEsNTkzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0ICAyMDAwLTIwMDYgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljb3NzLmMKKyAqCisgKiBUaGUgU0xJQ09TUyBkcml2ZXIgZm9yIEFsYWNyaXRlY2gncyBJUy1OSUMgcHJvZHVjdHMuCisgKgorICogVGhpcyBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gc3VwcG9ydDoKKyAqCisgKiAgICAgIE1vamF2ZSBjYXJkcyAoc2luZ2xlIHBvcnQgUENJIEdpZ2FiaXQpIGJvdGggY29wcGVyIGFuZCBmaWJlcgorICogICAgICBPYXNpcyBjYXJkcyAoc2luZ2xlIGFuZCBkdWFsIHBvcnQgUENJLXggR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorICogICAgICBLYWxhaGFyaSBjYXJkcyAoZHVhbCBhbmQgcXVhZCBwb3J0IFBDSS1lIEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKyAqCisgKiBUaGUgZHJpdmVyIHdhcyBhY3V0YWxseSB0ZXN0ZWQgb24gT2FzaXMgYW5kIEthbGFoYXJpIGNhcmRzLgorICoKKyAqCisgKiBOT1RFOiBUaGlzIGlzIHRoZSBzdGFuZGFyZCwgbm9uLWFjY2VsZXJhdGVkIHZlcnNpb24gb2YgQWxhY3JpdGVjaCdzCisgKiAgICAgICBJUy1OSUMgZHJpdmVyLgorICovCisKKworI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgS0xVREdFX0ZPUl80R0JfQk9VTkRBUlkgICAgICAgICAxCisjZGVmaW5lIERFQlVHX01JQ1JPQ09ERSAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJICAgICAgICAxCisjZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkgICAgICAgICAgICAxCisjZGVmaW5lIERCRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTTElDX0FTU0VSVF9FTkFCTEVECQkgICAgICAgIDEKKyNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAkJCTEKKyNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAkwCisjZGVmaW5lIFNMSUNfUElOR19USU1FUl9FTkFCTEVECQkgICAgMQorI2RlZmluZSBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCisjZGVmaW5lIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQJMQorI2RlZmluZSBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwkxCisjZGVmaW5lIFNMSUNfT0ZGTE9BRF9JUF9DSEVDS1NVTQkJMQorI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKKyNkZWZpbmUgUElOR19USU1FUl9JTlRFUlZBTAkJCSAgICAxCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjZGVmaW5lIFNMSUNfRVRIVE9PTF9TVVBQT1JUICAgICAxCisKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSAic2xpY2luYy5oIgorI2luY2x1ZGUgImdiZG93bmxvYWQuaCIKKyNpbmNsdWRlICJnYnJjdnVjb2RlLmgiCisjaW5jbHVkZSAib2FzaXNyY3Z1Y29kZS5oIgorCisjaWZkZWYgREVCVUdfTUlDUk9DT0RFCisjaW5jbHVkZSAib2FzaXNkYmdkb3dubG9hZC5oIgorI2Vsc2UKKyNpbmNsdWRlICJvYXNpc2Rvd25sb2FkLmgiCisjZW5kaWYKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisjaW5jbHVkZSAic2xpY2R1bXAuaCIKKyNlbmRpZgorCisjZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVCAgMAorCitzdGF0aWMgdWludCBzbGljX2ZpcnN0X2luaXQgPSAxOworc3RhdGljIGNoYXIgKnNsaWNfYmFubmVyID0gIkFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgIlwKKwkJImFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworCitzdGF0aWMgY2hhciAqc2xpY19wcm9jX3ZlcnNpb24gPSAiMi4wLjM1MSAgMjAwNi8wNy8xNCAxMjoyNjowMCI7CitzdGF0aWMgY2hhciAqc2xpY19wcm9kdWN0X25hbWUgPSAiU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgIlwKKwkJImFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpIjsKK3N0YXRpYyBjaGFyICpzbGljX3ZlbmRvciA9ICJBbGFjcml0ZWNoLCBJbmMuIjsKKworc3RhdGljIGludCBzbGljX2RlYnVnID0gMTsKK3N0YXRpYyBpbnQgZGVidWcgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaGVhZF9uZXRkZXZpY2U7CisKK3N0YXRpYyBzdHJ1Y3QgYmFzZV9kcml2ZXIgc2xpY19nbG9iYWwgPSB7IHt9LCAwLCAwLCAwLCAxLCBOVUxMLCBOVUxMIH07CitzdGF0aWMgaW50IGludGFnZ19kZWxheSA9IDEwMDsKK3N0YXRpYyB1MzIgZHluYW1pY19pbnRhZ2c7CitzdGF0aWMgaW50IGVycm9ybXNnOworc3RhdGljIGludCBnb29kbXNnOworc3RhdGljIHVuc2lnbmVkIGludCByY3ZfY291bnQ7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqc2xpY19kZWJ1Z2ZzOworCisjZGVmaW5lIERSVl9OQU1FICAgICAgICAgICJzbGljb3NzIgorI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgICAiMi4wLjEiCisjZGVmaW5lIERSVl9BVVRIT1IgICAgICAgICJBbGFjcml0ZWNoLCBJbmMuIEVuZ2luZWVyaW5nIgorI2RlZmluZSBEUlZfREVTQ1JJUFRJT04gICAiQWxhY3JpdGVjaCBTTElDIFRlY2hvbm9sb2d5KHRtKSAiXAorCQkiTm9uLUFjY2VsZXJhdGVkIERyaXZlciIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVCAgICAgIkNvcHlyaWdodCAgMjAwMC0yMDA2IEFsYWNyaXRlY2gsIEluYy4gIlwKKwkJIkFsbCByaWdodHMgcmVzZXJ2ZWQuIgorI2RlZmluZSBQRlgJCSAgIERSVl9OQU1FICIgIgorCitNT0RVTEVfQVVUSE9SKERSVl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKK21vZHVsZV9wYXJhbShkeW5hbWljX2ludGFnZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZHluYW1pY19pbnRhZ2csICJEeW5hbWljIEludGVycnVwdCBBZ2dyZWdhdGlvbiBTZXR0aW5nIik7Cittb2R1bGVfcGFyYW0oaW50YWdnX2RlbGF5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRhZ2dfZGVsYXksICJ1U2VjIEludGVycnVwdCBBZ2dyZWdhdGlvbiBEZWxheSIpOworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2xpY19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTEFDUklURUNILAorCSBTTElDXzFHQl9ERVZJQ0VfSUQsCisJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKKwl7UENJX1ZFTkRPUl9JRF9BTEFDUklURUNILAorCSBTTElDXzJHQl9ERVZJQ0VfSUQsCisJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKKwl7MCx9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2xpY19wY2lfdGJsKTsKKworI2RlZmluZSBTTElDX0dFVF9TTElDX0hBTkRMRShfYWRhcHRlciwgX3BzbGljX2hhbmRsZSkgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5fbG9ja19pcnFzYXZlKCZfYWRhcHRlci0+aGFuZGxlX2xvY2subG9jaywgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmZsYWdzKTsgICAgICAgICAgICAgICAgICAgXAorICAgIF9wc2xpY19oYW5kbGUgID0gIF9hZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXM7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChfcHNsaWNfaGFuZGxlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCUFTU0VSVChfcHNsaWNfaGFuZGxlLT50eXBlID09IFNMSUNfSEFORExFX0ZSRUUpOyAgICAgICAgICAgICAgICBcCisJX2FkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IF9wc2xpY19oYW5kbGUtPm5leHQ7ICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZfYWRhcHRlci0+aGFuZGxlX2xvY2subG9jaywgICAgICAgICAgICAgICAgIFwKKwkJCV9hZGFwdGVyLT5oYW5kbGVfbG9jay5mbGFncyk7ICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBTTElDX0ZSRUVfU0xJQ19IQU5ETEUoX2FkYXB0ZXIsIF9wc2xpY19oYW5kbGUpICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9wc2xpY19oYW5kbGUtPnR5cGUgPSBTTElDX0hBTkRMRV9GUkVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5fbG9ja19pcnFzYXZlKCZfYWRhcHRlci0+aGFuZGxlX2xvY2subG9jaywgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmZsYWdzKTsgICAgICAgICAgICAgICAgICAgXAorICAgIF9wc2xpY19oYW5kbGUtPm5leHQgPSBfYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzOyAgICAgICAgICAgICAgICAgXAorICAgIF9hZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMgPSBfcHNsaWNfaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJl9hZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrLCAgICAgICAgICAgICAgICAgXAorCQkJX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmZsYWdzKTsgICAgICAgICAgICAgICAgICAgXAorfQorCitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NsZWFudXAodm9pZCk7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2FkYXB0ZXJfY3JlYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfYWRhcHRlcl9kZXN0cm95KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9jcmVhdGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9kZXN0cm95KHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIHVpbnQgZmx1c2gpCit7CisJd3JpdGVsKHZhbHVlLCByZWcpOworCWlmIChmbHVzaCkKKwkJbWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgdm9pZCBfX2lvbWVtICpyZWcsCisJCQkgICAgICAgdTMyIHZhbHVlLAorCQkJICAgICAgIHZvaWQgX19pb21lbSAqcmVnaCwgdTMyIHBhZGRyaCwgdWludCBmbHVzaCkKK3sKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKKwlpZiAocGFkZHJoICE9IGFkYXB0ZXItPmN1cmFkZHJ1cHBlcikgeworCQlhZGFwdGVyLT5jdXJhZGRydXBwZXIgPSBwYWRkcmg7CisJCXdyaXRlbChwYWRkcmgsIHJlZ2gpOworCX0KKwl3cml0ZWwodmFsdWUsIHJlZyk7CisJaWYgKGZsdXNoKQorCQltYigpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9kcml2ZXIodm9pZCkKK3sKKwlpZiAoc2xpY19maXJzdF9pbml0KSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzIHNsaWNfZmlyc3RfaW5pdCBzZXQgamlmZmllc1slbHhdXG4iLAorCQkJX19mdW5jX18sIGppZmZpZXMpOworCQlzbGljX2ZpcnN0X2luaXQgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jayk7CisJCXNsaWNfZGVidWdfaW5pdCgpOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19kYmdfbWFjYWRkcnMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJREJHX01TRygiICAoJXMpIGN1cnIgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CisJREJHX01TRygiICAoJXMpIG1hYyAgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bWFjYWRkclswXSwKKwkJYWRhcHRlci0+bWFjYWRkclsxXSwgYWRhcHRlci0+bWFjYWRkclsyXSwKKwkJYWRhcHRlci0+bWFjYWRkclszXSwgYWRhcHRlci0+bWFjYWRkcls0XSwgYWRhcHRlci0+bWFjYWRkcls1XSk7CisJcmV0dXJuOworfQorCisjaWZkZWYgREVCVUdfUkVHSVNURVJfVFJBQ0UKK3N0YXRpYyB2b2lkIHNsaWNfZGJnX3JlZ2lzdGVyX3RyYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCit7CisJdWludCBpOworCisJREJHX0VSUk9SKCJEdW1wIFJlZ2lzdGVyIFdyaXRlIFRyYWNlOiBjdXJyX2l4ID09ICVkXG4iLCBjYXJkLT5kZWJ1Z19peCk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJREJHX0VSUk9SKCIlMmQgJWQgJTR4ICV4ICV4XG4iLAorCQkJICBpLCBjYXJkLT5yZWdfdHlwZVtpXSwgY2FyZC0+cmVnX29mZnNldFtpXSwKKwkJCSAgY2FyZC0+cmVnX3ZhbHVlW2ldLCBjYXJkLT5yZWdfdmFsdWVoW2ldKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgc2xpY19pbml0X2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSwKKwkJCSAgICAgIHZvaWQgX19pb21lbSAqbWVtYWRkciwgaW50IGNoaXBfaWR4KQoreworCXVzaG9ydCBpbmRleDsKKwlzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBzbGljX2hhbmRsZTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldik7CisvKgorICAgIERCR19NU0coInNsaWNvc3M6ICVzICglcylcbiAgICBuZXRkZXYgWyVwXVxuICAgIGFkYXB0ZXJbJXBdXG4gICAgIgorCSAgICAicGNpZGV2IFslcF1cbiIsIF9fZnVuY19fLCBuZXRkZXYtPm5hbWUsIG5ldGRldiwgYWRhcHRlciwgcGNpZGV2KTsqLworLyoJYWRhcHRlci0+cGNpZGV2ID0gcGNpZGV2OyovCisJYWRhcHRlci0+dmVuZGlkID0gcGNpX3RibF9lbnRyeS0+dmVuZG9yOworCWFkYXB0ZXItPmRldmlkID0gcGNpX3RibF9lbnRyeS0+ZGV2aWNlOworCWFkYXB0ZXItPnN1YnN5c2lkID0gcGNpX3RibF9lbnRyeS0+c3ViZGV2aWNlOworCWFkYXB0ZXItPmJ1c251bWJlciA9IHBjaWRldi0+YnVzLT5udW1iZXI7CisJYWRhcHRlci0+c2xvdG51bWJlciA9ICgocGNpZGV2LT5kZXZmbiA+PiAzKSAmIDB4MUYpOworCWFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyID0gKHBjaWRldi0+ZGV2Zm4gJiAweDcpOworCWFkYXB0ZXItPm1lbW9yeWxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKwlhZGFwdGVyLT5zbGljX3JlZ3MgPSAoX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICopbWVtYWRkcjsKKwlhZGFwdGVyLT5pcnEgPSBwY2lkZXYtPmlycTsKKy8qCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsqLworCWFkYXB0ZXItPm5leHRfbmV0ZGV2aWNlID0gaGVhZF9uZXRkZXZpY2U7CisJaGVhZF9uZXRkZXZpY2UgPSBuZXRkZXY7CisJYWRhcHRlci0+Y2hpcGlkID0gY2hpcF9pZHg7CisJYWRhcHRlci0+cG9ydCA9IDA7CS8qYWRhcHRlci0+ZnVuY3Rpb25udW1iZXI7Ki8KKwlhZGFwdGVyLT5jYXJkaW5kZXggPSBhZGFwdGVyLT5wb3J0OworCWFkYXB0ZXItPm1lbW9yeWJhc2UgPSBtZW1hZGRyOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT51cHJfbG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5hZGFwdGVyX2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlc2V0X2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2spOworCisJYWRhcHRlci0+Y2FyZF9zaXplID0gMTsKKwkvKgorCSAgSW5pdGlhbGl6ZSBzbGljX2hhbmRsZSBhcnJheQorCSovCisJQVNTRVJUKFNMSUNfQ01EUV9NQVhDTURTIDw9IDB4RkZGRik7CisJLyoKKwkgU3RhcnQgd2l0aCAxLiAgMCBpcyBhbiBpbnZhbGlkIGhvc3QgaGFuZGxlLgorCSovCisJZm9yIChpbmRleCA9IDEsIHBzbGljX2hhbmRsZSA9ICZhZGFwdGVyLT5zbGljX2hhbmRsZXNbMV07CisJICAgICBpbmRleCA8IFNMSUNfQ01EUV9NQVhDTURTOyBpbmRleCsrLCBwc2xpY19oYW5kbGUrKykgeworCisJCXBzbGljX2hhbmRsZS0+dG9rZW4uaGFuZGxlX2luZGV4ID0gaW5kZXg7CisJCXBzbGljX2hhbmRsZS0+dHlwZSA9IFNMSUNfSEFORExFX0ZSRUU7CisJCXBzbGljX2hhbmRsZS0+bmV4dCA9IGFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlczsKKwkJYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzID0gcHNsaWNfaGFuZGxlOworCX0KKy8qCisgICAgREJHX01TRygiLi4uLi4uLi4uXG5peFslZF0gcGhhbmRsZVslcF0gcGZyZWVbJXBdIG5leHRbJXBdXG4iLAorCWluZGV4LCBwc2xpY19oYW5kbGUsIGFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcywgcHNsaWNfaGFuZGxlLT5uZXh0KTsqLworCWFkYXB0ZXItPnBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKQorCQkJCQlwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCXNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSAqKSwKKwkJCQkJJmFkYXB0ZXItPgorCQkJCQlwaHlzX3NobWVtKTsKKy8qCisgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpXG4gICBwc2htZW0gICAgWyVwXVxuICAgcGh5c19zaG1lbVslcF1cbiJcCisJCSJzbGljX3JlZ3MgWyVwXVxuIiwgX19mdW5jX18sIG5ldGRldi0+bmFtZSwgYWRhcHRlci0+cHNobWVtLAorCQkodm9pZCAqKWFkYXB0ZXItPnBoeXNfc2htZW0sIGFkYXB0ZXItPnNsaWNfcmVncyk7CisqLworCUFTU0VSVChhZGFwdGVyLT5wc2htZW0pOworCisJbWVtc2V0KGFkYXB0ZXItPnBzaG1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNsaWNfZW50cnlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSkKK3sKKwlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOworCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCXZvaWQgX19pb21lbSAqbWVtbWFwcGVkX2lvYWRkciA9IE5VTEw7CisJdTMyIHN0YXR1cyA9IDA7CisJdWxvbmcgbW1pb19zdGFydCA9IDA7CisJdWxvbmcgbW1pb19sZW4gPSAwOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IE5VTEw7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAyLjYgVkVSU0lPTiBFTlRFUiBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLAorCQlfX2Z1bmNfXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnID0gZHluYW1pY19pbnRhZ2c7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOworCisJREJHX01TRygiQ2FsbCBwY2lfZW5hYmxlX2RldmljZSglcCkgIHN0YXR1c1sleF1cbiIsIHBjaWRldiwgZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHNsaWNfZGVidWcgPiAwICYmIGRpZF92ZXJzaW9uKysgPT0gMCkgeworCQlwcmludGsoc2xpY19iYW5uZXIpOworCQlwcmludGsoc2xpY19wcm9jX3ZlcnNpb24pOworCX0KKworCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJaWYgKCFlcnIpIHsKKwkJREJHX01TRygicGNpX3NldF9kbWFfbWFzayhETUFfNjRCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CisJfSBlbHNlIHsKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwkJaWYgKGVycikgeworCQkJREJHX01TRworCQkJICAgICgiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZyAgZXJyWyV4XVxuIiwKKwkJCSAgICAgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJREJHX01TRygicGNpX3NldF9kbWFfbWFzayhETUFfMzJCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CisJfQorCisJREJHX01TRygiQ2FsbCBwY2lfcmVxdWVzdF9yZWdpb25zXG4iKTsKKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlEQkdfTVNHKCJwY2lfcmVxdWVzdF9yZWdpb25zIEZBSUxFRCBlcnJbJXhdXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCURCR19NU0coImNhbGwgcGNpX3NldF9tYXN0ZXJcbiIpOworCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwlEQkdfTVNHKCJjYWxsIGFsbG9jX2V0aGVyZGV2XG4iKTsKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGFkYXB0ZXIpKTsKKwlpZiAoIW5ldGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdF9zbGljX3Byb2JlOworCX0KKwlEQkdfTVNHKCJhbGxvY19ldGhlcmRldiBmb3Igc2xpYyBuZXRkZXZbJXBdXG4iLCBuZXRkZXYpOworCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGNpZGV2LT5kZXYpOworCisJcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgbmV0ZGV2KTsKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7CisJYWRhcHRlci0+cGNpZGV2ID0gcGNpZGV2OworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCisJREJHX01TRygic2xpY29zczogY2FsbCBpb3JlbWFwKG1taW9fc3RhcnRbJWx4XSwgbW1pb19sZW5bJWx4XSlcbiIsCisJCW1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworLyogIG1lbW1hcHBlZF9pb2FkZHIgPSAgKHUzMilpb3JlbWFwX25vY2FjaGUobW1pb19zdGFydCwgbW1pb19sZW4pOyovCisJbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCURCR19NU0coInNsaWNvc3M6ICVzIE1FTU1BUFBFRF9JT0FERFIgWyVwXVxuIiwgX19mdW5jX18sCisJCW1lbW1hcHBlZF9pb2FkZHIpOworCWlmICghbWVtbWFwcGVkX2lvYWRkcikgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQkgIF9fZnVuY19fLCBtbWlvX2xlbiwgbW1pb19zdGFydCk7CisJCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOworCX0KKworCURCR19NU0cKKwkgICAgKCJzbGljb3NzOiAlcyBmb3VuZCBBbGFjcml0ZWNoIFNMSUNPU1MgUENJLCBNTUlPIGF0ICVwLCAiXAorCSAgICAic3RhcnRbJWx4XSBsZW5bJWx4XSwgSVJRICVkLlxuIiwKKwkgICAgIF9fZnVuY19fLCBtZW1tYXBwZWRfaW9hZGRyLCBtbWlvX3N0YXJ0LCBtbWlvX2xlbiwgcGNpZGV2LT5pcnEpOworCisJc2xpY19jb25maWdfcGNpKHBjaWRldik7CisKKwlzbGljX2luaXRfZHJpdmVyKCk7CisKKwlzbGljX2luaXRfYWRhcHRlcihuZXRkZXYsCisJCQkgIHBjaWRldiwgcGNpX3RibF9lbnRyeSwgbWVtbWFwcGVkX2lvYWRkciwgY2FyZHNfZm91bmQpOworCisJc3RhdHVzID0gc2xpY19jYXJkX2xvY2F0ZShhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKSB7CisJCURCR19FUlJPUigiJXMgY2Fubm90IGxvY2F0ZSBjYXJkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOworCX0KKworCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJaWYgKCFhZGFwdGVyLT5hbGxvY2F0ZWQpIHsKKwkJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKys7CisJCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDE7CisJfQorCisJREJHX01TRygic2xpY29zczogJXMgICAgY2FyZDogICAgICAgICAgICAgJXBcbiIsIF9fZnVuY19fLAorCQlhZGFwdGVyLT5jYXJkKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyWyVkXSA9PSBbJXBdXG4iLCBfX2Z1bmNfXywKKwkJKHVpbnQpIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXIpOworCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCBbJWRdXG4iLCBfX2Z1bmNfXywKKwkJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQgWyVkXVxuIiwgX19mdW5jX18sCisJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCk7CisKKwlzdGF0dXMgPSBzbGljX2NhcmRfaW5pdChjYXJkLCBhZGFwdGVyKTsKKworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJY2FyZC0+c3RhdGUgPSBDQVJEX0ZBSUw7CisJCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRkFJTDsKKwkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCQlEQkdfRVJST1IoInNsaWNfY2FyZF9pbml0IEZBSUxFRCBzdGF0dXNbJXhdXG4iLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOworCX0KKworCW5ldGRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlci0+bWVtb3J5YmFzZTsKKwluZXRkZXYtPmlycSA9IGFkYXB0ZXItPmlycTsKKwluZXRkZXYtPm9wZW4gPSBzbGljX2VudHJ5X29wZW47CisJbmV0ZGV2LT5zdG9wID0gc2xpY19lbnRyeV9oYWx0OworCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gc2xpY194bWl0X3N0YXJ0OworCW5ldGRldi0+ZG9faW9jdGwgPSBzbGljX2lvY3RsOworCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gc2xpY19tYWNfc2V0X2FkZHJlc3M7CisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorCW5ldGRldi0+Z2V0X3N0YXRzID0gc2xpY19nZXRfc3RhdHM7CisjZW5kaWYKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNsaWNfbWNhc3Rfc2V0X2xpc3Q7CisKKwlzbGljX2RlYnVnX2FkYXB0ZXJfY3JlYXRlKGFkYXB0ZXIpOworCisJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJaWYgKGVycikgeworCQlEQkdfRVJST1IoIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXRfdW5tYXA7CisJfQorCisJREJHX01TRworCSAgICAoInNsaWNvc3M6IGFkZHIgMHglbHgsIGlycSAlZCwgTUFDIGFkZHIgIlwKKwkgICAgICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkgICAgIG1taW9fc3RhcnQsIC8qcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCksICovIHBjaWRldi0+aXJxLAorCSAgICAgbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwgbmV0ZGV2LT5kZXZfYWRkclsyXSwKKwkgICAgIG5ldGRldi0+ZGV2X2FkZHJbM10sIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCisJY2FyZHNfZm91bmQrKzsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIHN0YXR1c1sleF0gamlmZmllc1slbHhdIGNwdSAlZFxuIiwKKwkJX19mdW5jX18sIHN0YXR1cywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXJldHVybiBzdGF0dXM7CisKK2Vycl9vdXRfdW5tYXA6CisJaW91bm1hcChtZW1tYXBwZWRfaW9hZGRyKTsKKworZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKK2Vycl9vdXRfZXhpdF9zbGljX3Byb2JlOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpZGV2KTsKKwlEQkdfRVJST1IoIiVzIEVYSVQgamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19mdW5jX18sIGppZmZpZXMsCisJCSAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwl1MzIgbG9ja2VkID0gMDsKKwlpbnQgc3RhdHVzOworCisJQVNTRVJUKGFkYXB0ZXIpOworCUFTU0VSVChjYXJkKTsKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgYWRhcHRlci0+YWN0aXZhdGVkWyVkXSBjYXJkLT5hZGFwdGVyc1sleF0gIlwKKwkgICAgICJhbGxvY2RbJXhdXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+YWN0aXZhdGVkLAorCSAgICAgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLAorCSAgICAgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKTsKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgKCVzKTogW2ppZmZpZXNbJWx4XSBjcHUgJWRdIGRldlslcF0gYWRhcHRbJXBdICJcCisJICAgICAicG9ydFslZF0gY2FyZFslcF1cbiIsCisJICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCksCisJICAgICBhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQsIGNhcmQpOworCisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCWxvY2tlZCA9IDE7CisJaWYgKCFhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKKwkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKys7CisJCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZSsrOworCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAxOworCX0KKwlzdGF0dXMgPSBzbGljX2lmX2luaXQoYWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWlmIChhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKKwkJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZC0tOworCQkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlLS07CisJCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAwOworCQl9CisJCWlmIChsb2NrZWQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJCQlsb2NrZWQgPSAwOworCQl9CisJCXJldHVybiBzdGF0dXM7CisJfQorCURCR19NU0coInNsaWNvc3M6ICVzIHNldCBjYXJkLT5tYXN0ZXJbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKKwkJY2FyZC0+bWFzdGVyLCBhZGFwdGVyKTsKKwlpZiAoIWNhcmQtPm1hc3RlcikKKwkJY2FyZC0+bWFzdGVyID0gYWRhcHRlcjsKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorCWlmICghKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZykpCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPmR1bXBfd3EpOworI2VuZGlmCisKKwlpZiAobG9ja2VkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwkJbG9ja2VkID0gMDsKKwl9CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwlpZiAoIShjYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcpKSB7CisJCURCR19NU0coImF0dGVtcHQgdG8gaW5pdGlhbGl6ZSBkdW1wIHRocmVhZFxuIik7CisJCXN0YXR1cyA9IHNsaWNfaW5pdF9kdW1wX3RocmVhZChjYXJkKTsKKwkJLyoKKwkJRXZlbiBpZiB0aGUgZHVtcCB0aHJlYWQgZmFpbHMsIHdlIHdpbGwgY29udGludWUgYXQgdGhpcyBwb2ludAorCQkqLworCX0KKyNlbmRpZgorCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2xpY19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CisJdTMyIG1taW9fc3RhcnQgPSAwOworCXVpbnQgbW1pb19sZW4gPSAwOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkOworCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIsICptbGlzdDsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBkZXZbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgZGV2LAorCQlhZGFwdGVyKTsKKwlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKKwlzbGljX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7CisJREJHX01TRygic2xpY29zczogJXMgdW5yZWdpc3Rlcl9uZXRkZXZcbiIsIF9fZnVuY19fKTsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCisJREJHX01TRygic2xpY29zczogJXMgcmVsX3JlZ2lvbigwKSBzdGFydFsleF0gbGVuWyV4XVxuIiwgX19mdW5jX18sCisJCW1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisJREJHX01TRygic2xpY29zczogJXMgaW91bm1hcCBkZXYtPmJhc2VfYWRkclsleF1cbiIsIF9fZnVuY19fLAorCQkodWludCkgZGV2LT5iYXNlX2FkZHIpOworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKKwkvKiBmcmVlIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KKwltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CisJd2hpbGUgKG1saXN0KSB7CisJCW1jYWRkciA9IG1saXN0OworCQltbGlzdCA9IG1saXN0LT5uZXh0OworCQlrZnJlZShtY2FkZHIpOworCX0KKwlBU1NFUlQoYWRhcHRlci0+Y2FyZCk7CisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJQVNTRVJUKGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLS07CisJYWRhcHRlci0+YWxsb2NhdGVkID0gMDsKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgaW5pdFsleF0gYWxsb2NbJXhdIGNhcmRbJXBdIGFkYXB0ZXJbJXBdXG4iLAorCSAgICAgX19mdW5jX18sIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCwgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLAorCSAgICAgY2FyZCwgYWRhcHRlcik7CisJaWYgKCFjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpIHsKKwkJc3RydWN0IHNsaWNjYXJkICpjdXJyX2NhcmQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CisJCWlmIChjdXJyX2NhcmQgPT0gY2FyZCkgeworCQkJc2xpY19nbG9iYWwuc2xpY19jYXJkID0gY2FyZC0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChjdXJyX2NhcmQtPm5leHQgIT0gY2FyZCkKKwkJCQljdXJyX2NhcmQgPSBjdXJyX2NhcmQtPm5leHQ7CisJCQlBU1NFUlQoY3Vycl9jYXJkKTsKKwkJCWN1cnJfY2FyZC0+bmV4dCA9IGNhcmQtPm5leHQ7CisJCX0KKwkJQVNTRVJUKHNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKTsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMtLTsKKwkJc2xpY19jYXJkX2NsZWFudXAoY2FyZCk7CisJfQorCURCR19NU0coInNsaWNvc3M6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJa2ZyZWUoZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCUFTU0VSVChjYXJkKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIGFjdHZ0ZFslZF0gYWxsb2NbJWRdIHN0YXRlWyV4XSBhZGFwdFslcF1cbiIsCisJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCwKKwkJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLCBjYXJkLT5zdGF0ZSwgYWRhcHRlcik7CisJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOworCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKKwlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJYWRhcHRlci0+dXByX2xpc3QgPSBOVUxMOworCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gMDsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNldCBhZGFwdGVyWyVwXSBzdGF0ZSB0byBBREFQVF9ET1dOKCVkKVxuIiwKKwkJX19mdW5jX18sIGRldi0+bmFtZSwgYWRhcHRlciwgYWRhcHRlci0+c3RhdGUpOworCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPmNhcmRpbmRleF0gPT0gYWRhcHRlcik7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJYWRhcHRlci0+YWxsX3JlZ193cml0ZXMrKzsKKwlhZGFwdGVyLT5pY3JfcmVnX3dyaXRlcysrOworCXNsaWNfY29uZmlnX2NsZWFyKGFkYXB0ZXIpOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgZGV2WyVwXSBhZGFwdFslcF0gY2FyZFslcF1cbiIsCisJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGRldiwgYWRhcHRlciwgY2FyZCk7CisJaWYgKGFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQtLTsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlLS07CisJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDA7CisJfQorI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAorCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmVzZXRfaWZhY2UsIDAsIEZMVVNIKTsKKyNlbmRpZgorCS8qCisJICogIFJlc2V0IHRoZSBhZGFwdGVyJ3MgcnNwLCBjbWQsIGFuZCByY3YgcXVldWVzCisJICovCisJc2xpY19jbWRxX3Jlc2V0KGFkYXB0ZXIpOworCXNsaWNfcnNwcXVldWVfcmVzZXQoYWRhcHRlcik7CisJc2xpY19yY3ZxdWV1ZV9yZXNldChhZGFwdGVyKTsKKworI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAorCWlmICghY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKSB7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorCQlpZiAoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSB7CisJCQl1aW50IHN0YXR1czsKKwkJCURCR19NU0coImF0dGVtcHQgdG8gdGVybWluYXRlIGR1bXAgdGhyZWFkIHBpZFsleF1cbiIsCisJCQkJY2FyZC0+ZHVtcF90YXNrX2lkKTsKKwkJCXN0YXR1cyA9IGtpbGxfcHJvYyhjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCwgU0lHS0lMTCwgMSk7CisKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJaW50IGNvdW50ID0gMTAgKiAxMDA7CisJCQkJd2hpbGUgKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZyAmJiAtLWNvdW50KSB7CisJCQkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQkJCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCQkJCX0KKworCQkJCWlmICghY291bnQpIHsKKwkJCQkJREJHX01TRworCQkJCQkgICAgKCJzbGljbW9uIHRocmVhZCBjbGVhbnVwIEZBSUxFRCBcCisJCQkJCSAgICAgcGlkWyV4XVxuIiwKKwkJCQkJICAgICBjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCk7CisJCQkJfQorCQkJfQorCQl9CisjZW5kaWYKKwkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBpbml0aWF0ZSBDQVJEX0hBTFRcbiIsIF9fZnVuY19fLAorCQkJZGV2LT5uYW1lKTsKKworCQlzbGljX2NhcmRfaW5pdChjYXJkLCBhZGFwdGVyKTsKKwl9CisjZW5kaWYKKworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVFxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJQVNTRVJUKHJxKTsKKy8qCisgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBjbWRbJXhdIHJxWyVwXSBkZXZbJXBdXG4iLCBfX2Z1bmNfXywgY21kLCBycSwgZGV2KTsKKyovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTTElDU0VUSU5UQUdHOgorCQl7CisJCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKQorCQkJCQkJCW5ldGRldl9wcml2KGRldik7CisJCQl1MzIgZGF0YVs3XTsKKwkJCXUzMiBpbnRhZ2c7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgeworCQkJCURCR19FUlJPUgorCQkJCSAgICAoImNvcHlfZnJvbV91c2VyIEZBSUxFRCBnZXR0aW5nIGluaXRpYWwgXAorCQkJCSAgICAgcGFyYW1zXG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWludGFnZyA9IGRhdGFbMF07CisJCQlwcmludGsoS0VSTl9FTUVSRworCQkJICAgICAgICIlczogc2V0IGludGVycnVwdCBhZ2dyZWdhdGlvbiB0byAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaW50YWdnKTsKKwkJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2cpOworCQkJcmV0dXJuIDA7CisJCX0KKyNpZmRlZiBTTElDX1VTRVJfUkVRVUVTVF9EVU1QX0VOQUJMRUQKKwljYXNlIFNJT0NTTElDRFVNUENBUkQ6CisJCXsKKwkJCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopCisJCQkJCQkJZGV2LT5wcml2OworCQkJc3RydWN0IHNsaWNjYXJkICpjYXJkOworCisJCQlBU1NFUlQoYWRhcHRlcik7CisJCQlBU1NFUlQoYWRhcHRlci0+Y2FyZCkKKwkJCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJCQlEQkdfSU9DVEwoInNsaWNfaW9jdGwgIFNJT0NTTElDX0RVTVBfQ0FSRFxuIik7CisKKwkJCWlmIChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfRE9ORSkgeworCQkJCXByaW50ayhTTElDTEVWRUwKKwkJCQkgICAgICAgIlNMSUMgQ2FyZCBkdW1wIHRvIGJlIG92ZXJ3cml0dGVuXG4iKTsKKwkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7CisJCQl9IGVsc2UgaWYgKChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKQorCQkJCSAgIHx8IChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PQorCQkJCSAgICAgICBTTElDX0RVTVBfSU5fUFJPR1JFU1MpKSB7CisJCQkJcHJpbnRrKFNMSUNMRVZFTAorCQkJCSAgICAgICAiU0xJQyBDYXJkIGR1bXAgUmVxdWVzdGVkIGJ1dCBhbHJlYWR5IFwKKwkJCQkJaW4gcHJvZ3Jlc3MuLi4gaWdub3JlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKFNMSUNMRVZFTAorCQkJCSAgICAgICAiU0xJQyBDYXJkICMlZCBEdW1wIFJlcXVlc3RlZFxuIiwKKwkJCQkgICAgICAgY2FyZC0+Y2FyZG51bSk7CisJCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfUkVRVUVTVEVEOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCisjaWZkZWYgU0xJQ19UUkFDRV9EVU1QX0VOQUJMRUQKKwljYXNlIFNJT0NTTElDVFJBQ0VEVU1QOgorCQl7CisJCQl1bG9uZyBkYXRhWzddOworCQkJdWxvbmcgdmFsdWU7CisKKwkJCURCR19JT0NUTCgic2xpY19pb2N0bCAgU0lPQ1NMSUNfVFJBQ0VfRFVNUFxuIik7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgeworCQkJCVBSSU5UX0VSUk9SCisJCQkJICAgICgic2xpYzogY29weV9mcm9tX3VzZXIgRkFJTEVEIGdldHRpbmcgXAorCQkJCSAgICAgaW5pdGlhbCBzaW1iYSBwYXJhbVxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisKKwkJCXZhbHVlID0gZGF0YVswXTsKKwkJCWlmICh0cmFjZW1vbl9yZXF1ZXN0ID09IFNMSUNfRFVNUF9ET05FKSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZFxuIik7CisJCQkJdHJhY2Vtb25fcmVxdWVzdCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7CisJCQkJdHJhY2Vtb25fcmVxdWVzdF90eXBlID0gdmFsdWU7CisJCQkJdHJhY2Vtb25fdGltZXN0YW1wID0gamlmZmllczsKKwkJCX0gZWxzZSBpZiAoKHRyYWNlbW9uX3JlcXVlc3QgPT0gU0xJQ19EVU1QX1JFUVVFU1RFRCkgfHwKKwkJCQkgICAodHJhY2Vtb25fcmVxdWVzdCA9PQorCQkJCSAgICBTTElDX0RVTVBfSU5fUFJPR1JFU1MpKSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZCBidXQgXAorCQkJCSAgICAgYWxyZWFkeSBpbiBwcm9ncmVzcy4uLiBpZ25vcmVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlQUklOVF9FUlJPUgorCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkXG4iKTsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0ID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0X3R5cGUgPSB2YWx1ZTsKKwkJCQl0cmFjZW1vbl90aW1lc3RhbXAgPSBqaWZmaWVzOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorI2lmIFNMSUNfRVRIVE9PTF9TVVBQT1JUCisJY2FzZSBTSU9DRVRIVE9PTDoKKwkJeworCQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikKKwkJCQkJCQluZXRkZXZfcHJpdihkZXYpOworCQkJc3RydWN0IGV0aHRvb2xfY21kIGRhdGE7CisJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKworCQkJQVNTRVJUKGFkYXB0ZXIpOworLyogICAgICAgICAgICAgICAgICAgICAgREJHX01TRygic2xpY29zczogJXMgU0lPQ0VUSFRPT0xcbiIsIF9fZnVuY19fKTsgKi8KKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmZWNtZCwgcnEtPmlmcl9kYXRhLCBzaXplb2YoZWNtZCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoZWNtZC5jbWQgPT0gRVRIVE9PTF9HU0VUKSB7CisJCQkJZGF0YS5zdXBwb3J0ZWQgPQorCQkJCSAgICAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkJICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCQkgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX01JSSk7CisJCQkJZGF0YS5wb3J0ID0gUE9SVF9NSUk7CisJCQkJZGF0YS50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJCQkJZGF0YS5waHlfYWRkcmVzcyA9IDA7CisJCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCQllbHNlCisJCQkJCWRhdGEuc3BlZWQgPSAwOworCisJCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQllbHNlCisJCQkJCWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJCQlkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCQlkYXRhLm1heHR4cGt0ID0gMTsKKwkJCQlkYXRhLm1heHJ4cGt0ID0gMTsKKwkJCQlpZiAoY29weV90b191c2VyCisJCQkJICAgIChycS0+aWZyX2RhdGEsICZkYXRhLCBzaXplb2YoZGF0YSkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJfSBlbHNlIGlmIChlY21kLmNtZCA9PSBFVEhUT09MX1NTRVQpIHsKKwkJCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQkJCXJldHVybiAtRVBFUk07CisKKwkJCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCisJCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7CisJCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKKwkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQkJCWVsc2UKKwkJCQkJZGF0YS5zcGVlZCA9IDA7CisKKwkJCQlpZiAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQorCQkJCQlkYXRhLmR1cGxleCA9IERVUExFWF9GVUxMOworCQkJCWVsc2UKKwkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJCWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJCWRhdGEubWF4dHhwa3QgPSAxOworCQkJCWRhdGEubWF4cnhwa3QgPSAxOworCQkJCWlmICgoZWNtZC5zcGVlZCAhPSBkYXRhLnNwZWVkKSB8fAorCQkJCSAgICAoZWNtZC5kdXBsZXggIT0gZGF0YS5kdXBsZXgpKSB7CisJCQkJCXUzMiBzcGVlZDsKKwkJCQkJdTMyIGR1cGxleDsKKworCQkJCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMCkgeworCQkJCQkJc3BlZWQgPSAwOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCIlczogc2xpYyBFVEhUT09MIHNldCBcCisJCQkJCQkgICAgIGxpbmsgc3BlZWQ9PTEwTUIiLAorCQkJCQkJICAgICBkZXYtPm5hbWUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3BlZWQgPSBQQ1JfU1BFRURfMTAwOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCIlczogc2xpYyBFVEhUT09MIHNldCBcCisJCQkJCQkgICAgbGluayBzcGVlZD09MTAwTUIiLAorCQkJCQkJICAgICBkZXYtPm5hbWUpOworCQkJCQl9CisJCQkJCWlmIChlY21kLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgeworCQkJCQkJZHVwbGV4ID0gUENSX0RVUExFWF9GVUxMOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCI6IGR1cGxleD09RlVMTFxuIik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlkdXBsZXggPSAwOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCI6IGR1cGxleD09SEFMRlxuIik7CisJCQkJCX0KKwkJCQkJc2xpY19saW5rX2NvbmZpZyhhZGFwdGVyLAorCQkJCQkJCSBzcGVlZCwgZHVwbGV4KTsKKwkJCQkJc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisvKiAgICAgICAgICAgICAgREJHX01TRygic2xpY29zczogJXMgVU5TVVBQT1JURURbJXhdXG4iLCBfX2Z1bmNfXywgY21kKTsgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKworI2RlZmluZSAgWE1JVF9GQUlMX0xJTktfU1RBVEUgICAgICAgICAgICAgICAxCisjZGVmaW5lICBYTUlUX0ZBSUxfWkVST19MRU5HVEggICAgICAgICAgICAgIDIKKyNkZWZpbmUgIFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUwgICAgICAgICAgICAgMworCitzdGF0aWMgdm9pZCBzbGljX3htaXRfYnVpbGRfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kICppaGNtZDsKKwl1bG9uZyBwaHlzX2FkZHI7CisKKwlpaGNtZCA9ICZoY21kLT5jbWQ2NDsKKworCWloY21kLT5mbGFncyA9IChhZGFwdGVyLT5wb3J0IDw8IElIRkxHX0lGU0hGVCk7CisJaWhjbWQtPmNvbW1hbmQgPSBJSENNRF9YTVRfUkVROworCWloY21kLT51LnNsaWNfYnVmZmVycy50b3RsZW4gPSBza2ItPmxlbjsKKwlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1swXS5wYWRkcmwgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2FkZHIpOworCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLnBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2FkZHIpOworCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLmxlbmd0aCA9IHNrYi0+bGVuOworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwloY21kLT5jbWRzaXplID0gKHUzMikgKCgoKHU2NCkmaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMV0gLQorCQkJCSAgICAgKHU2NCkgaGNtZCkgKyAzMSkgPj4gNSk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJaGNtZC0+Y21kc2l6ZSA9ICgoKCh1MzIpICZpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1sxXSAtCisJCQkgICAodTMyKSBoY21kKSArIDMxKSA+PiA1KTsKKyNlbHNlCisJU3RvcCBDb21waWxhdGlvbjsKKyNlbmRpZgorfQorCisjZGVmaW5lIE5PUk1BTF9FVEhGUkFNRSAgICAgMAorCitzdGF0aWMgaW50IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZCA9IE5VTEw7CisJdTMyIHN0YXR1cyA9IDA7CisJdTMyIHNrYnR5cGUgPSBOT1JNQUxfRVRIRlJBTUU7CisJdm9pZCAqb2ZmbG9hZGNtZCA9IE5VTEw7CisKKwljYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlBU1NFUlQoY2FyZCk7CisvKgorICAgIERCR19FUlJPUigieG1pdF9zdGFydCAoJXMpIEVOVEVSIHNrYlslcF0gbGVuWyVkXSBsaW5rc3RhdGVbJXhdIHN0YXRlWyV4XVxuIiwKKwlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHNrYiwgc2tiLT5sZW4sIGFkYXB0ZXItPmxpbmtzdGF0ZSwKKwkgYWRhcHRlci0+c3RhdGUpOworKi8KKwlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSAhPSBMSU5LX1VQKSB8fAorCSAgICAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHx8IChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSkgeworCQlzdGF0dXMgPSBYTUlUX0ZBSUxfTElOS19TVEFURTsKKwkJZ290byB4bWl0X2ZhaWw7CisKKwl9IGVsc2UgaWYgKHNrYi0+bGVuID09IDApIHsKKwkJc3RhdHVzID0gWE1JVF9GQUlMX1pFUk9fTEVOR1RIOworCQlnb3RvIHhtaXRfZmFpbDsKKwl9CisKKwlpZiAoc2tidHlwZSA9PSBOT1JNQUxfRVRIRlJBTUUpIHsKKwkJaGNtZCA9IHNsaWNfY21kcV9nZXRmcmVlKGFkYXB0ZXIpOworCQlpZiAoIWhjbWQpIHsKKwkJCWFkYXB0ZXItPnhtaXRxX2Z1bGwgPSAxOworCQkJc3RhdHVzID0gWE1JVF9GQUlMX0hPU1RDTURfRkFJTDsKKwkJCWdvdG8geG1pdF9mYWlsOworCQl9CisJCUFTU0VSVChoY21kLT5wc2xpY19oYW5kbGUpOworCQlBU1NFUlQoaGNtZC0+Y21kNjQuaG9zdGhhbmRsZSA9PQorCQkgICAgICAgaGNtZC0+cHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfdG9rZW4pOworCQloY21kLT5za2IgPSBza2I7CisJCWhjbWQtPmJ1c3kgPSAxOworCQloY21kLT50eXBlID0gU0xJQ19DTURfRFVNQjsKKwkJaWYgKHNrYnR5cGUgPT0gTk9STUFMX0VUSEZSQU1FKQorCQkJc2xpY194bWl0X2J1aWxkX3JlcXVlc3QoYWRhcHRlciwgaGNtZCwgc2tiKTsKKwl9CisJYWRhcHRlci0+c3RhdHMudHhfcGFja2V0cysrOworCWFkYXB0ZXItPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisjaWZkZWYgREVCVUdfRFVNUAorCWlmIChhZGFwdGVyLT5raWxsX2NhcmQpIHsKKwkJc3RydWN0IHNsaWNfaG9zdDY0X2NtZCBpaGNtZDsKKworCQlpaGNtZCA9ICZoY21kLT5jbWQ2NDsKKworCQlpaGNtZC0+ZmxhZ3MgfD0gMHg0MDsKKwkJYWRhcHRlci0+a2lsbF9jYXJkID0gMDsJLyogb25seSBkbyB0aGlzIG9uY2UgKi8KKwl9CisjZW5kaWYKKwlpZiAoaGNtZC0+cGFkZHJoID09IDApIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyLAorCQkJICAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksIERPTlRfRkxVU0gpOworCX0gZWxzZSB7CisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXI2NCwKKwkJCSAgICAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkgICAgaGNtZC0+cGFkZHJoLCBET05UX0ZMVVNIKTsKKwl9Cit4bWl0X2RvbmU6CisJcmV0dXJuIDA7Cit4bWl0X2ZhaWw6CisJc2xpY194bWl0X2ZhaWwoYWRhcHRlciwgc2tiLCBvZmZsb2FkY21kLCBza2J0eXBlLCBzdGF0dXMpOworCWdvdG8geG1pdF9kb25lOworfQorCitzdGF0aWMgdm9pZCBzbGljX3htaXRfZmFpbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICB2b2lkICpjbWQsIHUzMiBza2J0eXBlLCB1MzIgc3RhdHVzKQoreworCWlmIChhZGFwdGVyLT54bWl0cV9mdWxsKQorCQlzbGljX2lmX3N0b3BfcXVldWUoYWRhcHRlcik7CisJaWYgKChjbWQgPT0gTlVMTCkgJiYgKHN0YXR1cyA8PSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMKSkgeworCQlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIFhNSVRfRkFJTF9MSU5LX1NUQVRFOgorCQkJREJHX0VSUk9SCisJCQkgICAgKCIoJXMpIHJlamVjdCB4bWl0IHNrYlslcDogJXhdIGxpbmtzdGF0ZVslc10gXAorCQkJICAgICBhZGFwdGVyWyVzOiVkXSBjYXJkWyVzOiVkXVxuIiwKKwkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBza2IsIHNrYi0+cGt0X3R5cGUsCisJCQkgICAgIFNMSUNfTElOS1NUQVRFKGFkYXB0ZXItPmxpbmtzdGF0ZSksCisJCQkgICAgIFNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksIGFkYXB0ZXItPnN0YXRlLAorCQkJICAgICBTTElDX0NBUkRfU1RBVEUoYWRhcHRlci0+Y2FyZC0+c3RhdGUpLAorCQkJICAgICBhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7CisJCQlicmVhazsKKwkJY2FzZSBYTUlUX0ZBSUxfWkVST19MRU5HVEg6CisJCQlEQkdfRVJST1IKKwkJCSAgICAoInhtaXRfc3RhcnQgc2tiLT5sZW4gPT0gMCBza2JbJXBdIHR5cGVbJXhdISEhISBcbiIsCisJCQkgICAgIHNrYiwgc2tiLT5wa3RfdHlwZSk7CisJCQlicmVhazsKKwkJY2FzZSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMOgorCQkJREJHX0VSUk9SCisJCQkgICAgKCJ4bWl0X3N0YXJ0IHNrYlslcF0gdHlwZVsleF0gTm8gaG9zdCBjb21tYW5kcyBcCisJCQkgICAgIGF2YWlsYWJsZSAhISEhIFxuIiwKKwkJCSAgICAgc2tiLCBza2ItPnBrdF90eXBlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQVNTRVJUKDApOworCQl9CisJfQorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlhZGFwdGVyLT5zdGF0cy50eF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZV9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWYpCit7CisJc3RydWN0IHNsaWNfaGRkcl93ZHMgKmhkciA9IChzdHJ1Y3Qgc2xpY19oZGRyX3dkcyAqKXJjdmJ1Zi0+ZGF0YTsKKworCWlmIChhZGFwdGVyLT5kZXZpZCAhPSBTTElDXzFHQl9ERVZJQ0VfSUQpIHsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzMTQgJiBWUkhTVEFUXzgwMk9FKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLm9mbG93ODAyKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1czE0ICYgVlJIU1RBVF9UUE9GTE8pCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBydG9mbG93Kys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl84MDJVRSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy51ZmxvdzgwMisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfUkNWRSkgeworCQkJYWRhcHRlci0+aWZfZXZlbnRzLnJjdmVhcmx5Kys7CisJCQlhZGFwdGVyLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9CVUZGKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQnVmb3YrKzsKKwkJCWFkYXB0ZXItPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NBUlJFKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ2FycmUrKzsKKwkJCWFkYXB0ZXItPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0xPTkdFKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkxvbmdlKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9QUkVBKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkludnArKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NSQykgeworCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNyYysrOworCQkJYWRhcHRlci0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9EUkJMKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NPREUpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfVFBDU1VNKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfVFBITEVOKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwSGxlbisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBDU1VNKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBMRVJSKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9JUEhFUlIpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBIbGVuKys7CisJfSBlbHNlIHsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX1hQRVJSKSB7CisJCQl1MzIgeGVyciA9IGhkci0+ZnJhbWVfc3RhdHVzR0IgPj4gVkdCU1RBVF9YRVJSU0hGVDsKKworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YQ1NFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSsrOworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YVUZMT1cpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdysrOworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YSExFTikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBIbGVuKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX05FVEVSUikgeworCQkJdTMyIG5lcnIgPQorCQkJICAgIChoZHItPgorCQkJICAgICBmcmFtZV9zdGF0dXNHQiA+PiBWR0JTVEFUX05FUlJTSEZUKSAmCisJCQkgICAgVkdCU1RBVF9ORVJSTVNLOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OQ1NFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSsrOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OVUZMT1cpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKys7CisJCQlpZiAobmVyciA9PSBWR0JTVEFUX05ITEVOKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcEhsZW4rKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNHQiAmIFZHQlNUQVRfTE5LRVJSKSB7CisJCQl1MzIgbGVyciA9IGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX0xFUlJNU0s7CisKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTERFQVJMWSkKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMucmN2ZWFybHkrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTEJPRkxPKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5CdWZvdisrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MQ09ERVJSKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5Db2RlKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xEQkxOQkwpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTENSQ0VSUikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ3JjKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xPRkxPKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMisrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MVUZMTykKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIrKzsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgVENQX09GRkxPQURfRlJBTUVfUFVTSEZMQUcgIDB4MTAwMDAwMDAKKyNkZWZpbmUgTV9GQVNUX1BBVEggICAgICAgICAgICAgICAgIDB4MDA0MAorCitzdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWY7CisJdTMyIGZyYW1lcyA9IDA7CisKKwl3aGlsZSAoKHNrYiA9IHNsaWNfcmN2cXVldWVfZ2V0bmV4dChhZGFwdGVyKSkpIHsKKwkJdTMyIHJ4X2J5dGVzOworCisJCUFTU0VSVChza2ItPmhlYWQpOworCQlyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCQlhZGFwdGVyLT5jYXJkLT5ldmVudHMrKzsKKwkJaWYgKHJjdmJ1Zi0+c3RhdHVzICYgSVJIRERSX0VSUikgeworCQkJYWRhcHRlci0+cnhfZXJyb3JzKys7CisJCQlzbGljX3Jjdl9oYW5kbGVfZXJyb3IoYWRhcHRlciwgcmN2YnVmKTsKKwkJCXNsaWNfcmN2cXVldWVfcmVpbnNlcnQoYWRhcHRlciwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzbGljX21hY19maWx0ZXIoYWRhcHRlciwgKHN0cnVjdCBldGhlcl9oZWFkZXIgKikKKwkJCQkJcmN2YnVmLT5kYXRhKSkgeworI2lmIDAKKwkJCURCR19NU0cKKwkJCSAgICAoInNsaWNvc3M6ICVzICglcykgZHJvcCBmcmFtZSBkdWUgdG8gbWFjIGZpbHRlclxuIiwKKwkJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisjZW5kaWYKKwkJCXNsaWNfcmN2cXVldWVfcmVpbnNlcnQoYWRhcHRlciwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNrYl9wdWxsKHNrYiwgU0xJQ19SQ1ZCVUZfSEVBRFNJWkUpOworCQlyeF9ieXRlcyA9IChyY3ZidWYtPmxlbmd0aCAmIElSSEREUl9GTEVOX01TSyk7CisJCXNrYl9wdXQoc2tiLCByeF9ieXRlcyk7CisJCWFkYXB0ZXItPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMgKz0gcnhfYnl0ZXM7CisjaWYgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisjZW5kaWYKKworCQlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOworCQluZXRpZl9yeChza2IpOworCisJCSsrZnJhbWVzOworI2lmIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQKKwkJaWYgKGZyYW1lcyA+PSBTTElDX1JDVlFfTUFYX1BST0NFU1NfSVNSKSB7CisJCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0X3lpZWxkcysrOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKwlhZGFwdGVyLT5tYXhfaXNyX3JjdnMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl9yY3ZzLCBmcmFtZXMpOworfQorCitzdGF0aWMgdm9pZCBzbGljX3htaXRfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZDsKKwlzdHJ1Y3Qgc2xpY19yc3BidWYgKnJzcGJ1ZjsKKwl1MzIgZnJhbWVzID0gMDsKKwlzdHJ1Y3Qgc2xpY19oYW5kbGVfd29yZCBzbGljX2hhbmRsZV93b3JkOworCisJZG8geworCQlyc3BidWYgPSBzbGljX3JzcHF1ZXVlX2dldG5leHQoYWRhcHRlcik7CisJCWlmICghcnNwYnVmKQorCQkJYnJlYWs7CisJCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzKys7CisJCWFkYXB0ZXItPmNhcmQtPmV2ZW50cysrOworCQkvKgorCQkgR2V0IHRoZSBjb21wbGV0ZSBob3N0IGNvbW1hbmQgYnVmZmVyCisJCSovCisJCXNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX3Rva2VuID0gcnNwYnVmLT5ob3N0aGFuZGxlOworCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXgpOworCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXggPD0gU0xJQ19DTURRX01BWENNRFMpOworCQloY21kID0KKwkJICAgIChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopCisJCQlhZGFwdGVyLT5zbGljX2hhbmRsZXNbc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXhdLgorCQkJCQkJCQkJYWRkcmVzczsKKy8qICAgICAgaGNtZCA9IChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopIHJzcGJ1Zi0+aG9zdGhhbmRsZTsgKi8KKwkJQVNTRVJUKGhjbWQpOworCQlBU1NFUlQoaGNtZC0+cHNsaWNfaGFuZGxlID09CisJCSAgICAgICAmYWRhcHRlci0+c2xpY19oYW5kbGVzW3NsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4XSk7CisvKgorICAgICAgREJHX0VSUk9SKCJ4bWl0X2NvbXBsZXRlICglcykgICBoY21kWyVwXSAgaG9zdGhhbmRsZVsleF1cbiIsCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaGNtZCwgaGNtZC0+Y21kNjQuaG9zdGhhbmRsZSk7CisgICAgICBEQkdfRVJST1IoIiAgICBza2JbJXBdIGxlbiAlZCAgaGNtZHR5cGVbJXhdXG4iLCBoY21kLT5za2IsCisJCWhjbWQtPnNrYi0+bGVuLCBoY21kLT50eXBlKTsKKyovCisJCWlmIChoY21kLT50eXBlID09IFNMSUNfQ01EX0RVTUIpIHsKKwkJCWlmIChoY21kLT5za2IpCisJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaGNtZC0+c2tiKTsKKwkJCXNsaWNfY21kcV9wdXRkb25lX2lycShhZGFwdGVyLCBoY21kKTsKKwkJfQorCQlyc3BidWYtPnN0YXR1cyA9IDA7CisJCXJzcGJ1Zi0+aG9zdGhhbmRsZSA9IDA7CisJCWZyYW1lcysrOworCX0gd2hpbGUgKDEpOworCWFkYXB0ZXItPm1heF9pc3JfeG1pdHMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl94bWl0cywgZnJhbWVzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNsaWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaXNyOworCisJaWYgKChhZGFwdGVyLT5wc2htZW0pICYmIChhZGFwdGVyLT5wc2htZW0tPmlzcikpIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfTUFTSywgRkxVU0gpOworCQlpc3IgPSBhZGFwdGVyLT5pc3Jjb3B5ID0gYWRhcHRlci0+cHNobWVtLT5pc3I7CisJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJYWRhcHRlci0+bnVtX2lzcnMrKzsKKwkJc3dpdGNoIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSkgeworCQljYXNlIENBUkRfVVA6CisJCQlpZiAoaXNyICYgfklTUl9JTykgeworCQkJCWlmIChpc3IgJiBJU1JfRVJSKSB7CisJCQkJCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMrKzsKKwkJCQkJaWYgKGlzciAmIElTUl9STUlTUykgeworCQkJCQkJaW50IGNvdW50OworCQkJCQkJaW50IHByZV9jb3VudDsKKwkJCQkJCWludCBlcnJvcnM7CisKKwkJCQkJCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0KKwkJCQkJCSAgICAmYWRhcHRlci0+cmN2cXVldWU7CisKKwkJCQkJCWFkYXB0ZXItPgorCQkJCQkJICAgIGVycm9yX3JtaXNzX2ludGVycnVwdHMrKzsKKwkJCQkJCWlmICghcmN2cS0+ZXJyb3JzKQorCQkJCQkJCXJjdl9jb3VudCA9IHJjdnEtPmNvdW50OworCQkJCQkJcHJlX2NvdW50ID0gcmN2cS0+Y291bnQ7CisJCQkJCQllcnJvcnMgPSByY3ZxLT5lcnJvcnM7CisKKwkJCQkJCXdoaWxlIChyY3ZxLT5jb3VudCA8CisJCQkJCQkgICAgICAgU0xJQ19SQ1ZRX0ZJTExUSFJFU0gpIHsKKwkJCQkJCQljb3VudCA9CisJCQkJCQkJICAgIHNsaWNfcmN2cXVldWVfZmlsbAorCQkJCQkJCSAgICAoYWRhcHRlcik7CisJCQkJCQkJaWYgKCFjb3VudCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEQkdfTVNHCisJCQkJCQkgICAgKCIoJXMpOiBbJXhdIElTUl9STUlTUyBcCisJCQkJCQkgICAgIGluaXRpYWxbJXhdIHByZVsleF0gXAorCQkJCQkJICAgICBlcnJvcnNbJXhdIFwKKwkJCQkJCSAgICAgcG9zdF9jb3VudFsleF1cbiIsCisJCQkJCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkJCSAgICAgaXNyLCByY3ZfY291bnQsIHByZV9jb3VudCwKKwkJCQkJCSAgICAgZXJyb3JzLCByY3ZxLT5jb3VudCk7CisJCQkJCX0gZWxzZSBpZiAoaXNyICYgSVNSX1hEUk9QKSB7CisJCQkJCQlEQkdfRVJST1IKKwkJCQkJCSAgICAoImlzciAmIElTUl9FUlIgWyV4XSBcCisJCQkJCQkgICAgIElTUl9YRFJPUCBcbiIsCisJCQkJCQkgICAgIGlzcik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlEQkdfRVJST1IKKwkJCQkJCSAgICAoImlzciAmIElTUl9FUlIgWyV4XVxuIiwKKwkJCQkJCSAgICAgaXNyKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChpc3IgJiBJU1JfTEVWRU5UKSB7CisJCQkJCS8qREJHX01TRygiJXMgKCVzKSAgSVNSX0xFVkVOVCBcbiIsCisJCQkJCSAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOyovCisJCQkJCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzKys7CisJCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOworCQkJCX0KKworCQkJCWlmICgoaXNyICYgSVNSX1VQQykgfHwKKwkJCQkgICAgKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgeworCQkJCQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cysrOworCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIGlzcik7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaXNyICYgSVNSX1JDVikgeworCQkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzKys7CisJCQkJc2xpY19yY3ZfaGFuZGxlcihhZGFwdGVyKTsKKwkJCX0KKworCQkJaWYgKGlzciAmIElTUl9DTUQpIHsKKwkJCQlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMrKzsKKwkJCQlzbGljX3htaXRfY29tcGxldGUoYWRhcHRlcik7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIENBUkRfRE9XTjoKKwkJCWlmICgoaXNyICYgSVNSX1VQQykgfHwKKwkJCSAgICAoaXNyICYgSVNSX1VQQ0VSUikgfHwgKGlzciAmIElTUl9VUENCU1kpKSB7CisJCQkJYWRhcHRlci0+dXByX2ludGVycnVwdHMrKzsKKwkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIGlzcik7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKKwkJYWRhcHRlci0+YWxsX3JlZ193cml0ZXMgKz0gMjsKKwkJYWRhcHRlci0+aXNyX3JlZ193cml0ZXMrKzsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5mYWxzZV9pbnRlcnJ1cHRzKys7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIHNsaWNfbGlua19ldmVudF9oYW5kbGVyIC0KKyAqCisgKiBJbml0aWF0ZSBhIGxpbmsgY29uZmlndXJhdGlvbiBzZXF1ZW5jZS4gIFRoZSBsaW5rIGNvbmZpZ3VyYXRpb24gYmVnaW5zCisgKiBieSBpc3N1aW5nIGEgUkVBRF9MSU5LX1NUQVRVUyBjb21tYW5kIHRvIHRoZSBVdGlsaXR5IFByb2Nlc3NvciBvbiB0aGUKKyAqIFNMSUMuICBTaW5jZSB0aGUgY29tbWFuZCBmaW5pc2hlcyBhc3luY2hyb25vdXNseSwgdGhlIHNsaWNfdXByX2NvbWxldGUKKyAqIHJvdXRpbmUgd2lsbCBmb2xsb3cgaXQgdXAgd2l0aGEgVVAgY29uZmlndXJhdGlvbiB3cml0ZSBjb21tYW5kLCB3aGljaAorICogd2lsbCBhbHNvIGNvbXBsZXRlIGFzeW5jaHJvbm91c2x5LgorICoKKyAqLworc3RhdGljIHZvaWQgc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB7CisJCS8qIEFkYXB0ZXIgaXMgbm90IG9wZXJhdGlvbmFsLiAgSWdub3JlLiAgKi8KKwkJcmV0dXJuOworCX0KKworCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisvKgorICAgIERCR19NU0coInNsaWNfZXZlbnRfaGFuZGxlciAgcHNobWVtLT5saW5rc3RhdHVzWyV4XSAgcHNobWVtWyVwXVxuICAgXAorCSZsaW5rc3RhdHVzWyVwXSAmaXNyWyVwXVxuIiwgYWRhcHRlci0+cHNobWVtLT5saW5rc3RhdHVzLCBwc2htZW0sCisJJnBzaG1lbS0+bGlua3N0YXR1cywgJnBzaG1lbS0+aXNyKTsKKyovCisJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgU0xJQ19VUFJfUkxTUiwKKwkJCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgMCwgMCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9STFNSLAorCQkodTMyKSAmcHNobWVtLT5saW5rc3RhdHVzLAkvKiBubyA0R0Igd3JhcCBndWFyYW50ZWVkICovCisJCQkJICAwLCAwLCAwKTsKKyNlbHNlCisJU3RvcCBjb21waWxhdGlvbjsKKyNlbmRpZgorCUFTU0VSVCgoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKSB8fCAoc3RhdHVzID09IFNUQVRVU19QRU5ESU5HKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9jbGVhbnVwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdICIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlpZiAoYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQpIHsKKwkJREJHX01TRygiRlJFRV9JUlEgIik7CisJCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMDsKKwkJZnJlZV9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsIGFkYXB0ZXItPm5ldGRldik7CisKKwl9CisJaWYgKGFkYXB0ZXItPnBzaG1lbSkgeworCQlEQkdfTVNHKCJGUkVFX1NITUVNICIpOworCQlEQkdfTVNHKCJhZGFwdGVyWyVwXSBwb3J0ICVkIHBzaG1lbVslcF0gRnJlZVNobWVtICIsCisJCQlhZGFwdGVyLCBhZGFwdGVyLT5wb3J0LCAodm9pZCAqKSBhZGFwdGVyLT5wc2htZW0pOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtICopLAorCQkJCSAgICBhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPnBoeXNfc2htZW0pOworCQlhZGFwdGVyLT5wc2htZW0gPSBOVUxMOworCQlhZGFwdGVyLT5waHlzX3NobWVtID0gKGRtYV9hZGRyX3QpIE5VTEw7CisJfQorI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKKwlpZiAoYWRhcHRlci0+c3RhdHN0aW1lcnNldCkgeworCQlEQkdfTVNHKCJzdGF0c3RpbWVyICIpOworCQlhZGFwdGVyLT5zdGF0c3RpbWVyc2V0ID0gMDsKKwkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwl9CisjZW5kaWYKKyNpZiAhU0xJQ19EVU1QX0VOQUJMRUQgJiYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKKy8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVEKi8KKwlpZiAoYWRhcHRlci0+cGluZ3RpbWVyc2V0KSB7CisJCURCR19NU0coInBpbmd0aW1lciAiKTsKKwkJYWRhcHRlci0+cGluZ3RpbWVyc2V0ID0gMDsKKwkJZGVsX3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOworCX0KKyNlbmRpZgorCXNsaWNfcnNwcXVldWVfZnJlZShhZGFwdGVyKTsKKwlzbGljX2NtZHFfZnJlZShhZGFwdGVyKTsKKwlzbGljX3JjdnF1ZXVlX2ZyZWUoYWRhcHRlcik7CisKKwlEQkdfTVNHKCJcbiIpOworfQorCisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJc3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7CisJc3RhdHMtPmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKKwlzdGF0cy0+cnhfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZXJyb3JzOworCXN0YXRzLT50eF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtdF9lcnJvcnM7CisJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKKwlzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7CisJc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0gMDsKKwlzdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7CisJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKKwlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gMDsKKwlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IDA7CisJcmV0dXJuICZhZGFwdGVyLT5zdGF0czsKK30KKyNlbmRpZgorCisvKgorICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgKiAgTGluayBpdCBpbi4KKyAqLworc3RhdGljIGludCBzbGljX21jYXN0X2FkZF9saXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKQoreworCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIsICptbGlzdDsKKwlib29sIGVxdWFsYWRkcjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBpdCBhbHJlYWR5IGV4aXN0cyAqLworCW1saXN0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKwl3aGlsZSAobWxpc3QpIHsKKwkJRVRIRVJfRVFfQUREUihtbGlzdC0+YWRkcmVzcywgYWRkcmVzcywgZXF1YWxhZGRyKTsKKwkJaWYgKGVxdWFsYWRkcikKKwkJCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKwkJbWxpc3QgPSBtbGlzdC0+bmV4dDsKKwl9CisKKwkvKiBEb2Vzbid0IGFscmVhZHkgZXhpc3QuICBBbGxvY2F0ZSBhIHN0cnVjdHVyZSB0byBob2xkIGl0ICovCisJbWNhZGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1jYXN0X2FkZHJlc3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAobWNhZGRyID09IE5VTEwpCisJCXJldHVybiAxOworCisJbWVtY3B5KG1jYWRkci0+YWRkcmVzcywgYWRkcmVzcywgNik7CisKKwltY2FkZHItPm5leHQgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCWFkYXB0ZXItPm1jYXN0YWRkcnMgPSBtY2FkZHI7CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBGdW5jdGlvbnMgdG8gb2J0YWluIHRoZSBDUkMgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3MuCisgKiBUaGlzIGlzIGEgc3RhbmRhcmQgZXRoZXJuZXQgQ1JDIGluIHRoYXQgaXQgaXMgYSAzMi1iaXQsIHJlZmxlY3RlZCBDUkMgdXNpbmcKKyAqIHRoZSBwb2x5bm9taWFsOgorICogICB4XjMyICsgeF4yNiArIHheMjMgKyB4XjIyICsgeF4xNiArIHheMTIgKyB4XjExICsgeF4xMCArIHheOCArIHheNyArIHheNSArCisgKiAgIHheNCArIHheMiArIHheMS4KKyAqCisgKiBBZnRlciB0aGUgQ1JDIGZvciB0aGUgNiBieXRlcyBpcyBnZW5lcmF0ZWQgKGJ1dCBiZWZvcmUgdGhlIHZhbHVlIGlzCisgKiBjb21wbGVtZW50ZWQpLAorICogd2UgbXVzdCB0aGVuIHRyYW5zcG9zZSB0aGUgdmFsdWUgYW5kIHJldHVybiBiaXRzIDMwLTIzLgorICoKKyAqLworc3RhdGljIHUzMiBzbGljX2NyY190YWJsZVsyNTZdOwkvKiBUYWJsZSBvZiBDUkNzIGZvciBhbGwgcG9zc2libGUgYnl0ZSB2YWx1ZXMgKi8KK3N0YXRpYyB1MzIgc2xpY19jcmNfaW5pdDsJLyogSXMgdGFibGUgaW5pdGlhbGl6ZWQgKi8KKworLyoKKyAqICBDb250cnVjdCB0aGUgQ1JDMzIgdGFibGUKKyAqLworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9pbml0X2NyYzMyKHZvaWQpCit7CisJdTMyIGM7CQkvKiAgQ1JDIHNoaXQgcmVnICAgICAgICAgICAgICAgICAqLworCXUzMiBlID0gMDsJCS8qICBQb2x5IFgtb3IgcGF0dGVybiAgICAgICAgICAgICovCisJaW50IGk7CQkJLyogIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgazsJCQkvKiAgYnl0ZSBiZWluZyBzaGlmdGVkIGludG8gY3JjICAqLworCisJc3RhdGljIGludCBwW10gPSB7IDAsIDEsIDIsIDQsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDE2LCAyMiwgMjMsIDI2IH07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHApIC8gc2l6ZW9mKGludCk7IGkrKykKKwkJZSB8PSAxTCA8PCAoMzEgLSBwW2ldKTsKKworCWZvciAoaSA9IDE7IGkgPCAyNTY7IGkrKykgeworCQljID0gaTsKKwkJZm9yIChrID0gODsgazsgay0tKQorCQkJYyA9IGMgJiAxID8gKGMgPj4gMSkgXiBlIDogYyA+PiAxOworCQlzbGljX2NyY190YWJsZVtpXSA9IGM7CisJfQorfQorCisvKgorICogIFJldHVybiB0aGUgTUFDIGhhc3QgYXMgZGVzY3JpYmVkIGFib3ZlLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX21jYXN0X2dldF9tYWNfaGFzaChjaGFyICptYWNhZGRyKQoreworCXUzMiBjcmM7CisJY2hhciAqcDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIG1hY2hhc2ggPSAwOworCisJaWYgKCFzbGljX2NyY19pbml0KSB7CisJCXNsaWNfbWNhc3RfaW5pdF9jcmMzMigpOworCQlzbGljX2NyY19pbml0ID0gMTsKKwl9CisKKwljcmMgPSAweEZGRkZGRkZGOwkvKiBQcmVsb2FkIHNoaWZ0IHJlZ2lzdGVyLCBwZXIgY3JjLTMyIHNwZWMgKi8KKwlmb3IgKGkgPSAwLCBwID0gbWFjYWRkcjsgaSA8IDY7ICsrcCwgKytpKQorCQljcmMgPSAoY3JjID4+IDgpIF4gc2xpY19jcmNfdGFibGVbKGNyYyBeICpwKSAmIDB4RkZdOworCisJLyogUmV0dXJuIGJpdHMgMS04LCB0cmFuc3Bvc2VkICovCisJZm9yIChpID0gMTsgaSA8IDk7IGkrKykKKwkJbWFjaGFzaCB8PSAoKChjcmMgPj4gaSkgJiAxKSA8PCAoOCAtIGkpKTsKKworCXJldHVybiBtYWNoYXNoOworfQorCitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9iaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCit7CisJdW5zaWduZWQgY2hhciBjcmNwb2x5OworCisJLyogR2V0IHRoZSBDUkMgcG9seW5vbWlhbCBmb3IgdGhlIG1hYyBhZGRyZXNzICovCisJY3JjcG9seSA9IHNsaWNfbWNhc3RfZ2V0X21hY19oYXNoKGFkZHJlc3MpOworCisJLyogV2Ugb25seSBoYXZlIHNwYWNlIG9uIHRoZSBTTElDIGZvciA2NCBlbnRyaWVzLiAgTG9wCisJICogb2ZmIHRoZSB0b3AgdHdvIGJpdHMuICgyXjYgPSA2NCkKKwkgKi8KKwljcmNwb2x5ICY9IDB4M0Y7CisKKwkvKiBPUiBpbiB0aGUgbmV3IGJpdCBpbnRvIG91ciA2NCBiaXQgbWFzay4gKi8KKwlhZGFwdGVyLT5tY2FzdG1hc2sgfD0gKHU2NCkgMSA8PCBjcmNwb2x5OworfQorCitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOworCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKwlpbnQgaTsKKwljaGFyICphZGRyZXNzZXM7CisJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gZGV2LT5tY19saXN0OworCWludCBtY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisKKwlBU1NFUlQoYWRhcHRlcik7CisKKwlmb3IgKGkgPSAxOyBpIDw9IG1jX2NvdW50OyBpKyspIHsKKwkJYWRkcmVzc2VzID0gKGNoYXIgKikgJm1jX2xpc3QtPmRtaV9hZGRyOworCQlpZiAobWNfbGlzdC0+ZG1pX2FkZHJsZW4gPT0gNikgeworCQkJc3RhdHVzID0gc2xpY19tY2FzdF9hZGRfbGlzdChhZGFwdGVyLCBhZGRyZXNzZXMpOworCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzbGljX21jYXN0X3NldF9iaXQoYWRhcHRlciwgYWRkcmVzc2VzKTsKKwkJbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQ7CisJfQorCisJREJHX01TRygiJXMgYS0+ZGV2ZmxhZ3NfcHJldlsleF0gZGV2LT5mbGFnc1sleF0gc3RhdHVzWyV4XVxuIiwKKwkJX19mdW5jX18sIGFkYXB0ZXItPmRldmZsYWdzX3ByZXYsIGRldi0+ZmxhZ3MsIHN0YXR1cyk7CisJaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgeworCQlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCQlpZiAoZGV2LT5mbGFncykgeworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQorCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CisJCX0KKwkJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7CisJCURCR19NU0coIiVzIGNhbGwgc2xpY19jb25maWdfc2V0IGFkYXB0ZXItPm1hY29wdHNbJXhdXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXItPm1hY29wdHMpOworCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykKKwkJCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKworCURCR19NU0coIiVzIEVOVEVSICglcykgbWFjb3B0c1sleF0gbWFza1slbGx4XVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgKHVpbnQpIGFkYXB0ZXItPm1hY29wdHMsCisJCWFkYXB0ZXItPm1jYXN0bWFzayk7CisKKwlpZiAoYWRhcHRlci0+bWFjb3B0cyAmIChNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQykpIHsKKwkJLyogVHVybiBvbiBhbGwgbXVsdGljYXN0IGFkZHJlc3Nlcy4gV2UgaGF2ZSB0byBkbyB0aGlzIGZvcgorCQkgKiBwcm9taXNjdW91cyBtb2RlIGFzIHdlbGwgYXMgQUxMTUNBU1QgbW9kZS4gIEl0IHNhdmVzIHRoZQorCQkgKiBNaWNyb2NvZGUgZnJvbSBoYXZpbmcgdG8ga2VlcCBzdGF0ZSBhYm91dCB0aGUgTUFDCisJCSAqIGNvbmZpZ3VyYXRpb24uCisJCSAqLworLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIG1hY29wdHMgPSBNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQ1xuXAorCQlTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOyAqLworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0bG93LCAweEZGRkZGRkZGLCBGTFVTSCk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLCAweEZGRkZGRkZGLCBGTFVTSCk7CisvKiAgICAgICAgREJHX01TRygiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIDB4RkZGRkZGRkZcbiIsCisJCV9mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7ICovCisJfSBlbHNlIHsKKwkJLyogQ29tbWl0IG91ciBtdWx0aWNhc3QgbWFzdCB0byB0aGUgU0xJQyBieSB3cml0aW5nIHRvIHRoZQorCQkgKiBtdWx0aWNhc3QgYWRkcmVzcyBtYXNrIHJlZ2lzdGVycworCQkgKi8KKwkJREJHX01TRygiJXMgKCVzKSBXUklURSBtY2FzdGxvd1sleF0gbWNhc3RoaWdoWyV4XVxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkoKHVsb25nKSAoYWRhcHRlci0+bWNhc3RtYXNrICYgMHhGRkZGRkZGRikpLAorCQkJKCh1bG9uZykgKChhZGFwdGVyLT5tY2FzdG1hc2sgPj4gMzIpICYgMHhGRkZGRkZGRikpKTsKKworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0bG93LAorCQkJICAodTMyKSAoYWRhcHRlci0+bWNhc3RtYXNrICYgMHhGRkZGRkZGRiksIEZMVVNIKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGhpZ2gsCisJCQkgICh1MzIpICgoYWRhcHRlci0+bWNhc3RtYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpLAorCQkJICBGTFVTSCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX3RpbWVyX3BpbmcodWxvbmcgZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKworCUFTU0VSVChkZXYpOworCWFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikoKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldiktPnByaXY7CisJQVNTRVJUKGFkYXB0ZXIpOworCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCUFTU0VSVChjYXJkKTsKKyNpZiAhU0xJQ19EVU1QX0VOQUJMRUQKKy8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEKi8KKwlpZiAoKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkpIHsKKwkJaW50IHN0YXR1czsKKworCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKKwkJCWlmIChlcnJvcm1zZysrIDwgNSkgeworCQkJCURCR19NU0cKKwkJCQkgICAgKCIlcyAoJXMpIENBUkQgSEFTIENSQVNIRUQgIFBJTkdfc3RhdHVzID09IFwKKwkJCQkgICAgICV4IEVSUk9STVNHIyAlZFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJICAgICBjYXJkLT5waW5nc3RhdHVzLCBlcnJvcm1zZyk7CisJCQl9CisJCQkvKiAgIEFTU0VSVChjYXJkLT5waW5nc3RhdHVzID09IElTUl9QSU5HTUFTSyk7ICovCisJCX0gZWxzZSB7CisJCQlpZiAoZ29vZG1zZysrIDwgNSkgeworCQkJCURCR19NU0cKKwkJCQkgICAgKCJzbGljb3NzOiAlcyAoJXMpIFBJTkdfc3RhdHVzID09ICV4IFwKKwkJCQkgICAgIEdPT0QhISEhISEhISBtc2cjICVkXG4iLAorCQkJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkgICAgIGNhcmQtPnBpbmdzdGF0dXMsIGVycm9ybXNnKTsKKwkJCX0KKwkJfQorCQljYXJkLT5waW5nc3RhdHVzID0gMDsKKwkJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9QSU5HLCAwLCAwLCAwLCAwKTsKKworCQlBU1NFUlQoc3RhdHVzID09IDApOworCX0gZWxzZSB7CisJCURCR19NU0coInNsaWNvc3MgJXMgKCVzKSBhZGFwdGVyWyVwXSBOT1QgVVAhISEhXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJfQorI2VuZGlmCisJYWRhcHRlci0+cGluZ3RpbWVyLmV4cGlyZXMgPQorCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOworCWFkZF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19pZl9zdG9wX3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2xpY19pZl9zdGFydF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwluZXRpZl9zdGFydF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworfQorCisvKgorICogIHNsaWNfaWZfaW5pdAorICoKKyAqICBQZXJmb3JtIGluaXRpYWxpemF0aW9uIG9mIG91ciBzbGljIGludGVyZmFjZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc2xpY19pZl9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCWludCBzdGF0dXMgPSAwOworCisJQVNTRVJUKGNhcmQpOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVIgc3RhdGVzWyVkOiVkOiVkOiVkXSBmbGFnc1sleF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCwgYWRhcHRlci0+c3RhdGUsIGFkYXB0ZXItPmxpbmtzdGF0ZSwKKwkJY2FyZC0+c3RhdGUsIGRldi0+ZmxhZ3MpOworCisJLyogYWRhcHRlciBzaG91bGQgYmUgZG93biBhdCB0aGlzIHBvaW50ICovCisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV04pIHsKKwkJREJHX0VSUk9SKCJzbGljX2lmX2luaXQgYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlBU1NFUlQoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTik7CisKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKKwlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCWlmIChkZXYtPmZsYWdzKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgU2V0IE1BQyBvcHRpb25zOiAiLCBfX2Z1bmNfXywKKwkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQlEQkdfTVNHKCJCQ0FTVCAiKTsKKwkJfQorCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJREJHX01TRygiUFJPTUlTQyAiKTsKKwkJfQorCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7CisJCQlEQkdfTVNHKCJBTExfTUNBU1QgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKKwkJCURCR19NU0coIk1DQVNUICIpOworCQl9CisJCURCR19NU0coIlxuIik7CisJfQorCXN0YXR1cyA9IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUgorCQkgICAgKCJzbGljX2lmX2luaXQ6IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyBGQUlMRUQgJXhcbiIsCisJCSAgICAgc3RhdHVzKTsKKwkJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKCFhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQpIHsKKwkJREJHX01TRygic2xpY29zczogJXMgY2FsbCBzbGljX3JzcHF1ZXVlX2luaXRcbiIsIF9fZnVuY19fKTsKKwkJaWYgKHNsaWNfcnNwcXVldWVfaW5pdChhZGFwdGVyKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlEQkdfTVNHCisJCSAgICAoInNsaWNvc3M6ICVzIGNhbGwgc2xpY19jbWRxX2luaXQgYWRhcHRlclslcF0gcG9ydCAlZCBcbiIsCisJCSAgICAgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQpOworCQlpZiAoc2xpY19jbWRxX2luaXQoYWRhcHRlcikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfcmN2cXVldWVfaW5pdCBhZGFwdGVyWyVwXSBcCisJCSAgICAgcG9ydCAlZCBcbiIsIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wb3J0KTsKKwkJaWYgKHNsaWNfcmN2cXVldWVfaW5pdChhZGFwdGVyKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQgPSAxOworCX0KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBkaXNhYmxlIGludGVycnVwdHMoc2xpYylcbiIsIF9fZnVuY19fKTsKKworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOworCW1kZWxheSgxKTsKKworCWlmICghYWRhcHRlci0+aXNwX2luaXRpYWxpemVkKSB7CisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkgIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3AsCisJCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAodTMyKSAwLCBET05UX0ZMVVNIKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3AsICh1MzIpICZwc2htZW0tPmlzciwgRkxVU0gpOworI2Vsc2UKKwkJU3RvcCBDb21waWxhdGlvbnMKKyNlbmRpZgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKKwkJYWRhcHRlci0+aXNwX2luaXRpYWxpemVkID0gMTsKKwl9CisKKwlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1VQOworCWlmICghY2FyZC0+bG9hZHRpbWVyc2V0KSB7CisJCWluaXRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CisJCWNhcmQtPmxvYWR0aW1lci5leHBpcmVzID0KKwkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU0xJQ19MT0FEVElNRVJfUEVSSU9EKTsKKwkJY2FyZC0+bG9hZHRpbWVyLmRhdGEgPSAodWxvbmcpIGNhcmQ7CisJCWNhcmQtPmxvYWR0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2xvYWRfY2hlY2s7CisJCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKKworCQljYXJkLT5sb2FkdGltZXJzZXQgPSAxOworCX0KKyNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECisJaWYgKCFhZGFwdGVyLT5zdGF0c3RpbWVyc2V0KSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzIHN0YXJ0IGdldHN0YXRzX3RpbWVyKHNsaWMpXG4iLAorCQkJX19mdW5jX18pOworCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwkJYWRhcHRlci0+c3RhdHN0aW1lci5leHBpcmVzID0KKwkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU1RBVFNfVElNRVJfSU5URVJWQUwpOworCQlhZGFwdGVyLT5zdGF0c3RpbWVyLmRhdGEgPSAodWxvbmcpIGFkYXB0ZXItPm5ldGRldjsKKwkJYWRhcHRlci0+c3RhdHN0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2dldF9zdGF0czsKKwkJYWRkX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwkJYWRhcHRlci0+c3RhdHN0aW1lcnNldCA9IDE7CisJfQorI2VuZGlmCisjaWYgIVNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVECisvKiNpZiBTTElDX0RVTVBfRU5BQkxFRCAmJiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRCovCisJaWYgKCFhZGFwdGVyLT5waW5ndGltZXJzZXQpIHsKKwkJREJHX01TRygic2xpY29zczogJXMgc3RhcnQgY2FyZF9waW5nX3RpbWVyKHNsaWMpXG4iLAorCQkJX19mdW5jX18pOworCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOworCQlhZGFwdGVyLT5waW5ndGltZXIuZXhwaXJlcyA9CisJCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOworCQlhZGFwdGVyLT5waW5ndGltZXIuZGF0YSA9ICh1bG9uZykgZGV2OworCQlhZGFwdGVyLT5waW5ndGltZXIuZnVuY3Rpb24gPSAmc2xpY190aW1lcl9waW5nOworCQlhZGRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CisJCWFkYXB0ZXItPnBpbmd0aW1lcnNldCA9IDE7CisJCWFkYXB0ZXItPmNhcmQtPnBpbmdzdGF0dXMgPSBJU1JfUElOR01BU0s7CisJfQorI2VuZGlmCisKKwkvKgorCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cworCSAqLworCURCR19NU0coInNsaWNvc3M6ICVzIEVOQUJMRSBpbnRlcnJ1cHRzKHNsaWMpXG4iLCBfX2Z1bmNfXyk7CisJYWRhcHRlci0+aXNyY29weSA9IDA7CisJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT04sIEZMVVNIKTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIGNhbGwgc2xpY19saW5rX2NvbmZpZyhzbGljKVxuIiwgX19mdW5jX18pOworCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwgTElOS19BVVRPU1BFRUQsIExJTktfQVVUT0QpOworCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOworCisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgc2xpY191bm1hcF9tbWlvX3NwYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworI2lmIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCisJaWYgKGFkYXB0ZXItPnNsaWNfcmVncykKKwkJaW91bm1hcChhZGFwdGVyLT5zbGljX3JlZ3MpOworCWFkYXB0ZXItPnNsaWNfcmVncyA9IE5VTEw7CisjZW5kaWYKK30KKworc3RhdGljIGludCBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlpbnQgcmV0dmFsOworCisJCURCR19NU0cKKwkJICAgICgic2xpY29zczogJXMgQWxsb2NBZGFwdFJzcmNzIGFkYXB0ZXJbJXBdIHNobWVtWyVwXSBcCisJCSAgICAgcGh5c19zaG1lbVslcF0gZGV2LT5pcnFbJXhdICV4XG4iLAorCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCisJCSAgICAgKHZvaWQgKilhZGFwdGVyLT5waHlzX3NobWVtLCBhZGFwdGVyLT5uZXRkZXYtPmlycSwKKwkJICAgICBOUl9JUlFTKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsCisJCQkJICAgICAmc2xpY19pbnRlcnJ1cHQsCisJCQkJICAgICBJUlFGX1NIQVJFRCwKKwkJCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCURCR19FUlJPUigic2xpY29zczogcmVxdWVzdF9pcnEgKCVzKSBGQUlMRUQgWyV4XVxuIiwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAxOworCQlEQkdfTVNHCisJCSAgICAoInNsaWNvc3M6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBzaG1lbVslcF0gXAorCQkgICAgIHBzaG1lbVslcF0gZGV2LT5pcnFbJXhdXG4iLAorCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCisJCSAgICAgKHZvaWQgKilhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPm5ldGRldi0+aXJxKTsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwl1MTYgcGNpX2NvbW1hbmQ7CisJdTE2IG5ld19jb21tYW5kOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAgUENJIGNvbW1hbmRbJTQuNHhdXG4iLCBfX2Z1bmNfXywgcGNpX2NvbW1hbmQpOworCisJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IFBDSV9DT01NQU5EX01BU1RFUgorCSAgICB8IFBDSV9DT01NQU5EX01FTU9SWQorCSAgICB8IFBDSV9DT01NQU5EX0lOVkFMSURBVEUKKwkgICAgfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfRkFTVF9CQUNLOworCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkgeworCQlEQkdfTVNHKCIlcyAtLSBVcGRhdGluZyBQQ0kgQ09NTUFORCByZWdpc3RlciAlNC40eC0+JTQuNHguXG4iLAorCQkJX19mdW5jX18sIHBjaV9jb21tYW5kLCBuZXdfY29tbWFuZCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lkZXYsIFBDSV9DT01NQU5ELCBuZXdfY29tbWFuZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworCXNsaWNfaW5pdF9jbGVhbnVwKGFkYXB0ZXIpOworCW1lbXNldCgmYWRhcHRlci0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+bnVtX2lzcnMgPSAwOworCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzID0gMDsKKwlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyA9IDA7CisJYWRhcHRlci0+cmN2X211bHRpY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl91bmljYXN0cyA9IDA7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworfQorCisvKgorICogIHNsaWNfbGlua19jb25maWcKKyAqCisgKiAgV3JpdGUgcGh5IGNvbnRyb2wgdG8gY29uZmlndXJlIGxpbmsgZHVwbGV4L3NwZWVkCisgKgorICovCitzdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkgICAgICB1MzIgbGlua3NwZWVkLCB1MzIgbGlua2R1cGxleCkKK3sKKwl1MzIgc3BlZWQ7CisJdTMyIGR1cGxleDsKKwl1MzIgcGh5X2NvbmZpZzsKKwl1MzIgcGh5X2FkdnJlZzsKKwl1MzIgcGh5X2djdGxyZWc7CisKKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHsKKwkJREJHX01TRworCQkgICAgKCIlcyAoJXMpIEFEQVBUIE5vdCB1cCB5ZXQsIFJldHVybiEgc3BlZWRbJXhdIGR1cGxleFsleF1cbiIsCisJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgbGlua3NwZWVkLAorCQkgICAgIGxpbmtkdXBsZXgpOworCQlyZXR1cm47CisJfQorCURCR19NU0coInNsaWNvc3M6ICVzICglcykgc2xpY19saW5rX2NvbmZpZzogc3BlZWRbJXhdIGR1cGxleFsleF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGxpbmtzcGVlZCwgbGlua2R1cGxleCk7CisKKwlBU1NFUlQoKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkKKwkgICAgICAgfHwgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkpOworCisJaWYgKGxpbmtzcGVlZCA+IExJTktfMTAwME1CKQorCQlsaW5rc3BlZWQgPSBMSU5LX0FVVE9TUEVFRDsKKwlpZiAobGlua2R1cGxleCA+IExJTktfQVVUT0QpCisJCWxpbmtkdXBsZXggPSBMSU5LX0FVVE9EOworCisJaWYgKChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHx8IChsaW5rc3BlZWQgPT0gTElOS18xMDAwTUIpKSB7CisJCWlmIChhZGFwdGVyLT5mbGFncyAmIEFEQVBUX0ZMQUdTX0ZJQkVSTUVESUEpIHsKKwkJCS8qICBXZSd2ZSBnb3QgYSBmaWJlciBnaWdhYml0IGludGVyZmFjZSwgYW5kIHJlZ2lzdGVyCisJCQkgKiAgNCBpcyBkaWZmZXJlbnQgaW4gZmliZXIgbW9kZSB0aGFuIGluIGNvcHBlciBtb2RlCisJCQkgKi8KKworCQkJLyogYWR2ZXJ0aXNlIEZEIG9ubHkgQDEwMDAgTWIgKi8KKwkJCXBoeV9hZHZyZWcgPSAoTUlJQ1JfUkVHXzQgfCAoUEFSX0FEVjEwMDBYRkQpKTsKKwkJCS8qIGVuYWJsZSBQQVVTRSBmcmFtZXMgICAgICAgICovCisJCQlwaHlfYWR2cmVnIHw9IFBBUl9BU1lNUEFVU0VfRklCRVI7CisJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9hZHZyZWcsCisJCQkJICBGTFVTSCk7CisKKwkJCWlmIChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHsKKwkJCQkvKiByZXNldCBwaHksIGVuYWJsZSBhdXRvLW5lZyAgKi8KKwkJCQlwaHlfY29uZmlnID0KKwkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAorCQkJCSAgICAgKFBDUl9SRVNFVCB8IFBDUl9BVVRPTkVHIHwKKwkJCQkgICAgICBQQ1JfQVVUT05FR19SU1QpKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJfSBlbHNlIHsJLyogZm9yY2VkIDEwMDAgTWIgRkQqLworCQkJCS8qIHBvd2VyIGRvd24gcGh5IHRvIGJyZWFrIGxpbmsKKwkJCQkgICB0aGlzIG1heSBub3Qgd29yaykgKi8KKwkJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCBQQ1JfUE9XRVJET1dOKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCS8qIHdhaXQsIE1hcnZlbGwgc2F5cyAxIHNlYywKKwkJCQkgICB0cnkgdG8gZ2V0IGF3YXkgd2l0aCAxMCBtcyAgKi8KKwkJCQltZGVsYXkoMTApOworCisJCQkJLyogZGlzYWJsZSBhdXRvLW5lZywgc2V0IHNwZWVkL2R1cGxleCwKKwkJCQkgICBzb2Z0IHJlc2V0IHBoeSwgcG93ZXJ1cCAqLworCQkJCXBoeV9jb25maWcgPQorCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CisJCQkJICAgICAoUENSX1JFU0VUIHwgUENSX1NQRUVEXzEwMDAgfAorCQkJCSAgICAgIFBDUl9EVVBMRVhfRlVMTCkpOworCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKKwkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQl9CisJCX0gZWxzZSB7CS8qIGNvcHBlciBnaWdhYml0ICovCisKKwkJCS8qIEF1dG8tTmVnb3RpYXRlIG9yIDEwMDAgTWIgbXVzdCBiZSBhdXRvIG5lZ290aWF0ZWQKKwkJCSAqIFdlJ3ZlIGdvdCBhIGNvcHBlciBnaWdhYml0IGludGVyZmFjZSwgYW5kCisJCQkgKiByZWdpc3RlciA0IGlzIGRpZmZlcmVudCBpbiBjb3BwZXIgbW9kZSB0aGFuCisJCQkgKiBpbiBmaWJlciBtb2RlCisJCQkgKi8KKwkJCWlmIChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHsKKwkJCQkvKiBhZHZlcnRpc2UgMTAvMTAwIE1iIG1vZGVzICAgKi8KKwkJCQlwaHlfYWR2cmVnID0KKwkJCQkgICAgKE1JSUNSX1JFR180IHwKKwkJCQkgICAgIChQQVJfQURWMTAwRkQgfCBQQVJfQURWMTAwSEQgfCBQQVJfQURWMTBGRAorCQkJCSAgICAgIHwgUEFSX0FEVjEwSEQpKTsKKwkJCX0gZWxzZSB7CisJCQkvKiBsaW5rc3BlZWQgPT0gTElOS18xMDAwTUIgLQorCQkJICAgZG9uJ3QgYWR2ZXJ0aXNlIDEwLzEwMCBNYiBtb2RlcyAgKi8KKwkJCQlwaHlfYWR2cmVnID0gTUlJQ1JfUkVHXzQ7CisJCQl9CisJCQkvKiBlbmFibGUgUEFVU0UgZnJhbWVzICAqLworCQkJcGh5X2FkdnJlZyB8PSBQQVJfQVNZTVBBVVNFOworCQkJLyogcmVxdWlyZWQgYnkgdGhlIENpY2FkYSBQSFkgICovCisJCQlwaHlfYWR2cmVnIHw9IFBBUl84MDJfMzsKKwkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2FkdnJlZywKKwkJCQkgIEZMVVNIKTsKKwkJCS8qIGFkdmVydGlzZSBGRCBvbmx5IEAxMDAwIE1iICAqLworCQkJcGh5X2djdGxyZWcgPSAoTUlJQ1JfUkVHXzkgfCAoUEdDX0FEVjEwMDBGRCkpOworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfZ2N0bHJlZywKKwkJCQkgIEZMVVNIKTsKKworCQkJaWYgKGFkYXB0ZXItPnN1YnN5c2lkICE9IFNMSUNfMUdCX0NJQ0FEQV9TVUJTWVNfSUQpIHsKKwkJCQkvKiBpZiBhIE1hcnZlbGwgUEhZCisJCQkJICAgZW5hYmxlIGF1dG8gY3Jvc3NvdmVyICovCisJCQkJcGh5X2NvbmZpZyA9CisJCQkJICAgIChNSUlDUl9SRUdfMTYgfCAoTVJWX1JFRzE2X1hPVkVST04pKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCisJCQkJLyogcmVzZXQgcGh5LCBlbmFibGUgYXV0by1uZWcgICovCisJCQkJcGh5X2NvbmZpZyA9CisJCQkJICAgIChNSUlDUl9SRUdfUENSIHwKKwkJCQkgICAgIChQQ1JfUkVTRVQgfCBQQ1JfQVVUT05FRyB8CisJCQkJICAgICAgUENSX0FVVE9ORUdfUlNUKSk7CisJCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAorCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCX0gZWxzZSB7CS8qIGl0J3MgYSBDaWNhZGEgUEhZICAqLworCQkJCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBhdXRvLW5lZyAoZG9uJ3QgcmVzZXQpICAqLworCQkJCXBoeV9jb25maWcgPQorCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CisJCQkJICAgICAoUENSX0FVVE9ORUcgfCBQQ1JfQVVUT05FR19SU1QpKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogRm9yY2VkIDEwLzEwMCAgKi8KKwkJaWYgKGxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQlzcGVlZCA9IDA7CisJCWVsc2UKKwkJCXNwZWVkID0gUENSX1NQRUVEXzEwMDsKKwkJaWYgKGxpbmtkdXBsZXggPT0gTElOS19IQUxGRCkKKwkJCWR1cGxleCA9IDA7CisJCWVsc2UKKwkJCWR1cGxleCA9IFBDUl9EVVBMRVhfRlVMTDsKKworCQlpZiAoYWRhcHRlci0+c3Vic3lzaWQgIT0gU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRCkgeworCQkJLyogaWYgYSBNYXJ2ZWxsIFBIWQorCQkJICAgZGlzYWJsZSBhdXRvIGNyb3Nzb3ZlciAgKi8KKwkJCXBoeV9jb25maWcgPSAoTUlJQ1JfUkVHXzE2IHwgKE1SVl9SRUcxNl9YT1ZFUk9GRikpOworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLAorCQkJCSAgRkxVU0gpOworCQl9CisKKwkJLyogcG93ZXIgZG93biBwaHkgdG8gYnJlYWsgbGluayAodGhpcyBtYXkgbm90IHdvcmspICAqLworCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCAoUENSX1BPV0VSRE9XTiB8IHNwZWVkIHwgZHVwbGV4KSk7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOworCisJCS8qIHdhaXQsIE1hcnZlbGwgc2F5cyAxIHNlYywgdHJ5IHRvIGdldCBhd2F5IHdpdGggMTAgbXMgKi8KKwkJbWRlbGF5KDEwKTsKKworCQlpZiAoYWRhcHRlci0+c3Vic3lzaWQgIT0gU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRCkgeworCQkJLyogaWYgYSBNYXJ2ZWxsIFBIWQorCQkJICAgZGlzYWJsZSBhdXRvLW5lZywgc2V0IHNwZWVkLAorCQkJICAgc29mdCByZXNldCBwaHksIHBvd2VydXAgKi8KKwkJCXBoeV9jb25maWcgPQorCQkJICAgIChNSUlDUl9SRUdfUENSIHwgKFBDUl9SRVNFVCB8IHNwZWVkIHwgZHVwbGV4KSk7CisJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCisJCQkJICBGTFVTSCk7CisJCX0gZWxzZSB7CS8qIGl0J3MgYSBDaWNhZGEgUEhZICAqLworCQkJLyogZGlzYWJsZSBhdXRvLW5lZywgc2V0IHNwZWVkLCBwb3dlcnVwICAqLworCQkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgKHNwZWVkIHwgZHVwbGV4KSk7CisJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCisJCQkJICBGTFVTSCk7CisJCX0KKwl9CisKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgKCVzKSBFWElUIHNsaWNfbGlua19jb25maWcgOiBzdGF0ZVslZF0gXAorCSAgICBwaHlfY29uZmlnWyV4XVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+c3RhdGUsCisJICAgIHBoeV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCit7CisJREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJaWYgKGNhcmQtPmR1bXBidWZmZXIpIHsKKwkJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzID0gMDsKKwkJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCA9IDA7CisJCWNhcmQtPmR1bXBidWZmZXJfcGh5c2ggPSAwOworCQlrZnJlZShjYXJkLT5kdW1wYnVmZmVyKTsKKwkJY2FyZC0+ZHVtcGJ1ZmZlciA9IE5VTEw7CisJfQorCWlmIChjYXJkLT5jbWRidWZmZXIpIHsKKwkJY2FyZC0+Y21kYnVmZmVyX3BoeXMgPSAwOworCQljYXJkLT5jbWRidWZmZXJfcGh5c2wgPSAwOworCQljYXJkLT5jbWRidWZmZXJfcGh5c2ggPSAwOworCQlrZnJlZShjYXJkLT5jbWRidWZmZXIpOworCQljYXJkLT5jbWRidWZmZXIgPSBOVUxMOworCX0KKyNlbmRpZgorCisJaWYgKGNhcmQtPmxvYWR0aW1lcnNldCkgeworCQljYXJkLT5sb2FkdGltZXJzZXQgPSAwOworCQlkZWxfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CisJfQorCisJc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koY2FyZCk7CisKKwlrZnJlZShjYXJkKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19jYXJkX2Rvd25sb2FkX2dicmN2KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCXUzMiBjb2RlYWRkcjsKKwl1bnNpZ25lZCBjaGFyICppbnN0cnVjdGlvbiA9IE5VTEw7CisJdTMyIHJjdnVjb2RlbGVuID0gMDsKKworCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhciAqKSZPYXNpc1JjdlVDb2RlWzBdOworCQlyY3Z1Y29kZWxlbiA9IE9hc2lzUmN2VUNvZGVMZW47CisJCWJyZWFrOworCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgorCQlpbnN0cnVjdGlvbiA9ICh1bnNpZ25lZCBjaGFyICopJkdCUmN2VUNvZGVbMF07CisJCXJjdnVjb2RlbGVuID0gR0JSY3ZVQ29kZUxlbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwl9CisKKwkvKiBzdGFydCBkb3dubG9hZCAqLworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfQkVHSU4sIEZMVVNIKTsKKworCS8qIGRvd25sb2FkIHRoZSByY3Ygc2VxdWVuY2VyIHVjb2RlICovCisJZm9yIChjb2RlYWRkciA9IDA7IGNvZGVhZGRyIDwgcmN2dWNvZGVsZW47IGNvZGVhZGRyKyspIHsKKwkJLyogd3JpdGUgb3V0IGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCBjb2RlYWRkciwgRkxVU0gpOworCisJCS8qIHdyaXRlIG91dCB0aGUgaW5zdHJ1Y3Rpb24gZGF0YSBsb3cgYWRkciAqLworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsCisJCQkgICh1MzIpICoodTMyICopIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCWluc3RydWN0aW9uICs9IDQ7CisKKwkJLyogd3JpdGUgb3V0IHRoZSBpbnN0cnVjdGlvbiBkYXRhIGhpZ2ggYWRkciAqLworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsICh1MzIpICppbnN0cnVjdGlvbiwKKwkJCSAgRkxVU0gpOworCQlpbnN0cnVjdGlvbiArPSAxOworCX0KKworCS8qIGRvd25sb2FkIGZpbmlzaGVkICovCisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCBTTElDX1JDVldDU19GSU5JU0gsIEZMVVNIKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNsaWNfY2FyZF9kb3dubG9hZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgc2VjdGlvbjsKKwlpbnQgdGhpc3NlY3Rpb25zaXplOworCWludCBjb2RlYWRkcjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwl1MzIgKmluc3RydWN0aW9uID0gTlVMTDsKKwl1MzIgKmxhc3RpbnN0cnVjdCA9IE5VTEw7CisJdTMyICpzdGFydGluc3RydWN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpuZXh0aW5zdHJ1Y3Q7CisJdTMyIGJhc2VhZGRyZXNzOworCXUzMiBmYWlsdXJlOworCXUzMiBpOworCXUzMiBudW1zZWN0cyA9IDA7CisJdTMyIHNlY3RzaXplWzNdOworCXUzMiBzZWN0c3RhcnRbM107CisKKy8qICAgICAgREJHX01TRyAoInNsaWNvc3M6ICVzICglcykgYWRhcHRlclslcF0gY2FyZFslcF0gZGV2aWRbJXhdIFwKKwlqaWZmaWVzWyVseF0gY3B1ICVkXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLAorCSAgICBhZGFwdGVyLT5jYXJkLCBhZGFwdGVyLT5kZXZpZCxqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyAqLworCisJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorLyogICAgICBEQkdfTVNHICgic2xpY29zczogJXMgZGV2aWQ9PVNMSUNfMkdCX0RFVklDRV9JRCBzZWN0aW9uc1sleF1cbiIsCisJX19mdW5jX18sICh1aW50KSBPTnVtU2VjdGlvbnMpOyAqLworCQludW1zZWN0cyA9IE9OdW1TZWN0aW9uczsKKwkJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKKwkJCXNlY3RzaXplW2ldID0gT1NlY3Rpb25TaXplW2ldOworCQkJc2VjdHN0YXJ0W2ldID0gT1NlY3Rpb25TdGFydFtpXTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKy8qICAgICAgICAgICAgICBEQkdfTVNHICgic2xpY29zczogJXMgZGV2aWQ9PVNMSUNfMUdCX0RFVklDRV9JRCBzZWN0aW9uc1sleF1cbiIsCisJCV9fZnVuY19fLCAodWludCkgTU51bVNlY3Rpb25zKTsgKi8KKwkJbnVtc2VjdHMgPSBNTnVtU2VjdGlvbnM7CisJCWZvciAoaSA9IDA7IGkgPCBudW1zZWN0czsgaSsrKSB7CisJCQlzZWN0c2l6ZVtpXSA9IE1TZWN0aW9uU2l6ZVtpXTsKKwkJCXNlY3RzdGFydFtpXSA9IE1TZWN0aW9uU3RhcnRbaV07CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwl9CisKKwlBU1NFUlQobnVtc2VjdHMgPD0gMyk7CisKKwlmb3IgKHNlY3Rpb24gPSAwOyBzZWN0aW9uIDwgbnVtc2VjdHM7IHNlY3Rpb24rKykgeworCQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CisJCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopICZPYXNpc1VDb2RlW3NlY3Rpb25dWzBdOworCQkJYmFzZWFkZHJlc3MgPSBzZWN0c3RhcnRbc2VjdGlvbl07CisJCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOworCQkJbGFzdGluc3RydWN0ID0KKwkJCSAgICAodTMyICopICZPYXNpc1VDb2RlW3NlY3Rpb25dW3NlY3RzaXplW3NlY3Rpb25dIC0KKwkJCQkJCQkgICAgIDhdOworCQkJYnJlYWs7CisJCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgorCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopICZNb2phdmVVQ29kZVtzZWN0aW9uXVswXTsKKwkJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOworCQkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKKwkJCWxhc3RpbnN0cnVjdCA9CisJCQkgICAgKHUzMiAqKSAmTW9qYXZlVUNvZGVbc2VjdGlvbl1bc2VjdHNpemVbc2VjdGlvbl0KKwkJCQkJCQkgICAgICAtIDhdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCisJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOworCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOworCisJCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHRoaXNzZWN0aW9uc2l6ZTsgY29kZWFkZHIrKykgeworCQkJc3RhcnRpbnN0cnVjdCA9IGluc3RydWN0aW9uOworCQkJbmV4dGluc3RydWN0ID0gKCh1bnNpZ25lZCBjaGFyICopaW5zdHJ1Y3Rpb24pICsgODsKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgYmFzZWFkZHJlc3MgKyBjb2RlYWRkciwKKwkJCQkgIEZMVVNIKTsKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBsb3cgYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGhpZ2ggYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQl9CisJfQorCisJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IG51bXNlY3RzOyBzZWN0aW9uKyspIHsKKwkJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSZPYXNpc1VDb2RlW3NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgorCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopJk1vamF2ZVVDb2RlW3NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCisJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOworCQlpZiAoYmFzZWFkZHJlc3MgPCAweDgwMDApCisJCQljb250aW51ZTsKKwkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKKworLyogICAgICAgIERCR19NU0cgKCJzbGljb3NzOiBDT01QQVJFIHNlY3RvblsleF0gYmFzZWFkZHJbJXhdIHNlY3Ruc2l6ZVsleF1cbiIsCisJCSh1aW50KXNlY3Rpb24sYmFzZWFkZHJlc3MsdGhpc3NlY3Rpb25zaXplKTsqLworCisJCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHRoaXNzZWN0aW9uc2l6ZTsgY29kZWFkZHIrKykgeworCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLAorCQkJCSAgU0xJQ19XQ1NfQ09NUEFSRSB8IChiYXNlYWRkcmVzcyArIGNvZGVhZGRyKSwKKwkJCQkgIEZMVVNIKTsKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBsb3cgYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGhpZ2ggYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQkJLyogQ2hlY2sgU1JBTSBsb2NhdGlvbiB6ZXJvLiBJZiBpdCBpcyBub24temVyby4gQWJvcnQuKi8KKwkJCWZhaWx1cmUgPSByZWFkbCgodTMyIF9faW9tZW0gKikmc2xpY19yZWdzLT5zbGljX3Jlc2V0KTsKKwkJCWlmIChmYWlsdXJlKSB7CisJCQkJREJHX01TRworCQkJCSAgICAoInNsaWNvc3M6ICVzIEZBSUxVUkUgRVhJVCBjb2RlYWRkclsleF0gXAorCQkJCSAgICB0aGlzc2VjdGlvbnNpemVbJXhdIGZhaWx1cmVbJXhdXG4iLAorCQkJCSAgICAgX19mdW5jX18sIGNvZGVhZGRyLCB0aGlzc2VjdGlvbnNpemUsCisJCQkJICAgICBmYWlsdXJlKTsKKworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJfQorLyogICAgREJHX01TRyAoInNsaWNvc3M6IENvbXBhcmUgZG9uZVxuIik7Ki8KKworCS8qIEV2ZXJ5dGhpbmcgT0ssIGtpY2sgb2ZmIHRoZSBjYXJkICovCisJbWRlbGF5KDEwKTsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgU0xJQ19XQ1NfU1RBUlQsIEZMVVNIKTsKKworCS8qIHN0YWxsIGZvciAyMCBtcywgbG9uZyBlbm91Z2ggZm9yIHVjb2RlIHRvIGluaXQgY2FyZAorCSAgIGFuZCByZWFjaCBtYWlubG9vcCAqLworCW1kZWxheSgyMCk7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVYSVQgYWRhcHRlclslcF0gY2FyZFslcF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQpOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisvKiAgREJHX01TRyAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLAorICAgIF9fZnVuY19fLCBjYXJkLT5jb25maWdfc2V0LCBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyLT5waHlzcG9ydCwKKyAgICBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7CisKKyAgICBzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsgKi8KKworCWlmICgoYWRhcHRlci0+Y2FyZCkgJiYgKGNhcmQtPmNvbmZpZ19zZXQpKSB7CisJCW1lbWNweShhZGFwdGVyLT5tYWNhZGRyLAorCQkgICAgICAgY2FyZC0+Y29uZmlnLk1hY0luZm9bYWRhcHRlci0+ZnVuY3Rpb25udW1iZXJdLm1hY2FkZHJBLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKKy8qICAgICAgREJHX01TRyAoIiVzIEFGVEVSIGNvcHlpbmcgZnJvbSBjb25maWcubWFjaW5mbyBpbnRvIGN1cnJtYWNhZGRyXG4iLAorCV9fZnVuY19fKTsKKwlzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsqLworCQlpZiAoIShhZGFwdGVyLT5jdXJybWFjYWRkclswXSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSB8fAorCQkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkclszXSB8fAorCQkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSkpIHsKKwkJCW1lbWNweShhZGFwdGVyLT5jdXJybWFjYWRkciwgYWRhcHRlci0+bWFjYWRkciwgNik7CisJCX0KKwkJaWYgKGFkYXB0ZXItPm5ldGRldikgeworCQkJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmN1cnJtYWNhZGRyLAorCQkJICAgICAgIDYpOworCQl9CisJfQorLyogIERCR19NU0cgKCIlcyBFWElUIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5wb3J0KTsKKyAgICBzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsgKi8KK30KKworc3RhdGljIHZvaWQgc2xpY19pbnRhZ2dfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdmFsdWUpCit7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ludGFnZywgdmFsdWUsIEZMVVNIKTsKKwlhZGFwdGVyLT5jYXJkLT5sb2FkbGV2ZWxfY3VycmVudCA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisJc3RydWN0IHNsaWNfZWVwcm9tICpwZWVwcm9tOworCXN0cnVjdCBvc2xpY19lZXByb20gKnBPZWVwcm9tOworCWRtYV9hZGRyX3QgcGh5c19jb25maWc7CisJdTMyIHBoeXNfY29uZmlnaDsKKwl1MzIgcGh5c19jb25maWdsOworCXUzMiBpID0gMDsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCWludCBzdGF0dXM7CisJdWludCBtYWNhZGRycyA9IGNhcmQtPmNhcmRfc2l6ZTsKKwl1c2hvcnQgZWVjb2Rlc2l6ZTsKKwl1c2hvcnQgZHJhbXNpemU7CisJdXNob3J0IGVlX2Noa3N1bTsKKwl1c2hvcnQgY2FsY19jaGtzdW07CisJc3RydWN0IHNsaWNfY29uZmlnX21hYyAqcG1hYzsKKwl1bnNpZ25lZCBjaGFyIGZydWZvcm1hdDsKKwl1bnNpZ25lZCBjaGFyIG9lbWZydWZvcm1hdDsKKwlzdHJ1Y3QgYXRrX2ZydSAqcGF0a2ZydTsKKwl1bmlvbiBvZW1mcnUgKnBvZW1mcnU7CisKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgRU5URVIgY2FyZFslcF0gYWRhcHRlclslcF0gY2FyZC0+c3RhdGVbJXhdIFwKKwkgICAgc2l6ZVslZF1cbiIsIF9fZnVuY19fLCBjYXJkLCBhZGFwdGVyLCBjYXJkLT5zdGF0ZSwgY2FyZC0+Y2FyZF9zaXplKTsKKworCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgZXhjZXB0IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCisJc2xpY19zb2Z0X3Jlc2V0KGFkYXB0ZXIpOworCisJLyogRG93bmxvYWQgdGhlIG1pY3JvY29kZSAqLworCXN0YXR1cyA9IHNsaWNfY2FyZF9kb3dubG9hZChhZGFwdGVyKTsKKworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJTTElDIGRvd25sb2FkIGZhaWxlZCBidXMgJWQgc2xvdCAlZFxuIiwKKwkJCSAgKHVpbnQpIGFkYXB0ZXItPmJ1c251bWJlciwKKwkJCSAgKHVpbnQpIGFkYXB0ZXItPnNsb3RudW1iZXIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWlmICghY2FyZC0+Y29uZmlnX3NldCkgeworCQlwZWVwcm9tID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQkJCSAgICAgICAmcGh5c19jb25maWcpOworCisJCXBoeXNfY29uZmlnbCA9IFNMSUNfR0VUX0FERFJfTE9XKHBoeXNfY29uZmlnKTsKKwkJcGh5c19jb25maWdoID0gU0xJQ19HRVRfQUREUl9ISUdIKHBoeXNfY29uZmlnKTsKKworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFZXByb20gaW5mbyAgYWRhcHRlciBbJXBdXG4gICAgIgorCQkJInNpemUgICAgICAgIFsleF1cbiAgICBwZWVwcm9tICAgICBbJXBdXG4gICAgIgorCQkJInBoeXNfY29uZmlnIFslcF1cbiAgICBwaHlzX2NvbmZpZ2xbJXhdXG4gICAgIgorCQkJInBoeXNfY29uZmlnaFsleF1cbiIsCisJCQlfX2Z1bmNfXywgYWRhcHRlciwKKwkJCSh1MzIpc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQlwZWVwcm9tLCAodm9pZCAqKSBwaHlzX2NvbmZpZywgcGh5c19jb25maWdsLAorCQkJcGh5c19jb25maWdoKTsKKwkJaWYgKCFwZWVwcm9tKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIlNMSUMgZWVwcm9tIHJlYWQgZmFpbGVkIHRvIGdldCBtZW1vcnkgYnVzICVkIFwKKwkJCSAgICBzbG90ICVkXG4iLAorCQkJICAgICAodWludCkgYWRhcHRlci0+YnVzbnVtYmVyLAorCQkJICAgICAodWludCkgYWRhcHRlci0+c2xvdG51bWJlcik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChwZWVwcm9tLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSk7CisJCX0KKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJCW1kZWxheSgxKTsKKwkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCisJCXNsaWNfY29uZmlnX2dldChhZGFwdGVyLCBwaHlzX2NvbmZpZ2wsIHBoeXNfY29uZmlnaCk7CisKKwkJZm9yICg7OykgeworCQkJaWYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSB7CisJCQkJREJHX01TRygiJXMgc2htZW1bJXBdIHNobWVtLT5pc3JbJXhdXG4iLAorCQkJCQlfX2Z1bmNfXywgYWRhcHRlci0+cHNobWVtLAorCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzcik7CisKKwkJCQlpZiAoYWRhcHRlci0+cHNobWVtLT5pc3IgJiBJU1JfVVBDKSB7CisJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJCQkJICAgIDAsCisJCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkgICAgMCwgRkxVU0gpOworCQkJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzciwgMCwKKwkJCQkJCSAgRkxVU0gpOworCisJCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsCisJCQkJCQkgIEZMVVNIKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW1kZWxheSgxKTsKKwkJCQlpKys7CisJCQkJaWYgKGkgPiA1MDAwKSB7CisJCQkJCURCR19FUlJPUgorCQkJCQkgICAgKCJTTElDOiAlZCBjb25maWcgZGF0YSBmZXRjaCB0aW1lZFwKKwkJCQkJICAgICAgb3V0IVxuIiwgYWRhcHRlci0+cG9ydCk7CisJCQkJCURCR19NU0coIiVzIHNobWVtWyVwXSBzaG1lbS0+aXNyWyV4XVxuIiwKKwkJCQkJCV9fZnVuY19fLCBhZGFwdGVyLT5wc2htZW0sCisJCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzcik7CisJCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKKwkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJCSAgICAwLCBGTFVTSCk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwkJLyogT2FzaXMgY2FyZCAqLworCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCisJCQlwT2VlcHJvbSA9IChzdHJ1Y3Qgb3NsaWNfZWVwcm9tICopIHBlZXByb207CisJCQllZWNvZGVzaXplID0gcE9lZXByb20tPkVlY29kZVNpemU7CisJCQlkcmFtc2l6ZSA9IHBPZWVwcm9tLT5EcmFtU2l6ZTsKKwkJCXBtYWMgPSBwT2VlcHJvbS0+TWFjSW5mbzsKKwkJCWZydWZvcm1hdCA9IHBPZWVwcm9tLT5GcnVGb3JtYXQ7CisJCQlwYXRrZnJ1ID0gJnBPZWVwcm9tLT5BdGtGcnU7CisJCQlvZW1mcnVmb3JtYXQgPSBwT2VlcHJvbS0+T2VtRnJ1Rm9ybWF0OworCQkJcG9lbWZydSA9ICZwT2VlcHJvbS0+T2VtRnJ1OworCQkJbWFjYWRkcnMgPSAyOworCQkJLyogTWlub3Iga2x1ZGdlIGZvciBPYXNpcyBjYXJkCisJCQkgICAgIGdldCAyIE1BQyBhZGRyZXNzZXMgZnJvbSB0aGUKKwkJCSAgICAgRUVQUk9NIHRvIGVuc3VyZSB0aGF0IGZ1bmN0aW9uIDEKKwkJCSAgICAgZ2V0cyB0aGUgUG9ydCAxIE1BQyBhZGRyZXNzICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCisJCQllZWNvZGVzaXplID0gcGVlcHJvbS0+RWVjb2RlU2l6ZTsKKwkJCWRyYW1zaXplID0gcGVlcHJvbS0+RHJhbVNpemU7CisJCQlwbWFjID0gcGVlcHJvbS0+dTIubWFjLk1hY0luZm87CisJCQlmcnVmb3JtYXQgPSBwZWVwcm9tLT5GcnVGb3JtYXQ7CisJCQlwYXRrZnJ1ID0gJnBlZXByb20tPkF0a0ZydTsKKwkJCW9lbWZydWZvcm1hdCA9IHBlZXByb20tPk9lbUZydUZvcm1hdDsKKwkJCXBvZW1mcnUgPSAmcGVlcHJvbS0+T2VtRnJ1OworCQkJYnJlYWs7CisJCX0KKworCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBGQUxTRTsKKworCQkvKiAgc2VlIGlmIHRoZSBFRVBST00gaXMgdmFsaWQgYnkgY2hlY2tpbmcgaXQncyBjaGVja3N1bSAqLworCQlpZiAoKGVlY29kZXNpemUgPD0gTUFYX0VFQ09ERV9TSVpFKSAmJgorCQkgICAgKGVlY29kZXNpemUgPj0gTUlOX0VFQ09ERV9TSVpFKSkgeworCisJCQllZV9jaGtzdW0gPQorCQkJICAgICoodTE2ICopICgoY2hhciAqKSBwZWVwcm9tICsgKGVlY29kZXNpemUgLSAyKSk7CisJCQkvKgorCQkJICAgIGNhbGN1bGF0ZSB0aGUgRUVQUk9NIGNoZWNrc3VtCisJCQkqLworCQkJY2FsY19jaGtzdW0gPQorCQkJICAgIH5zbGljX2VlcHJvbV9ja3N1bSgoY2hhciAqKSBwZWVwcm9tLAorCQkJCQkgICAgICAgKGVlY29kZXNpemUgLSAyKSk7CisJCQkvKgorCQkJICAgIGlmIHRoZSB1Y2RvZSBjaGtzdW0gZmxhZyBiaXQgd29ya2VkLAorCQkJICAgIHdlIHdvdWxkbid0IG5lZWQgdGhpcyBzaGl0CisJCQkqLworCQkJaWYgKGVlX2Noa3N1bSA9PSBjYWxjX2Noa3N1bSkKKwkJCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBUUlVFOworCQl9CisJCS8qICBjb3B5IGluIHRoZSBEUkFNIHNpemUgKi8KKwkJY2FyZC0+Y29uZmlnLkRyYW1TaXplID0gZHJhbXNpemU7CisKKwkJLyogIGNvcHkgaW4gdGhlIE1BQyBhZGRyZXNzKGVzKSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbWFjYWRkcnM7IGkrKykgeworCQkJbWVtY3B5KCZjYXJkLT5jb25maWcuTWFjSW5mb1tpXSwKKwkJCSAgICAgICAmcG1hY1tpXSwgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKKwkJfQorLyogICAgICBEQkdfTVNHICgiJXMgRUVQUk9NIENoZWNrc3VtIEdvb2Q/ICVkICBNYWNBZGRyZXNzXG4iLF9fZnVuY19fLAorCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpOyAqLworCisJCS8qICBjb3B5IHRoZSBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCQljYXJkLT5jb25maWcuRnJ1Rm9ybWF0ID0gZnJ1Zm9ybWF0OworCQltZW1jcHkoJmNhcmQtPmNvbmZpZy5BdGtGcnUsIHBhdGtmcnUsCisJCQkJCQlzaXplb2Yoc3RydWN0IGF0a19mcnUpKTsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQkJICAgIHBlZXByb20sIHBoeXNfY29uZmlnKTsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBhZGFwdGVyJWQgWyVwXSBzaXplWyV4XSBGUkVFIHBlZXByb21bJXBdIFwKKwkJICAgICBwaHlzX2NvbmZpZ1slcF1cbiIsCisJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXIsCisJCSAgICAgKHUzMikgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksIHBlZXByb20sCisJCSAgICAgKHZvaWQgKikgcGh5c19jb25maWcpOworCisJCWlmICgoIWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCkgJiYKKwkJICAgIChhZGFwdGVyLT5yZWdfcGFyYW1zLmZhaWxfb25fYmFkX2VlcHJvbSkpIHsKKwkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJICAgIHNsaWNfcmVncy0+c2xpY19pc3AsCisJCQkJICAgIDAsIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBGTFVTSCk7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoInVuc3VwcG9ydGVkIENPTkZJR1VSQVRJT04gIEVFUFJPTSBpbnZhbGlkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJY2FyZC0+Y29uZmlnX3NldCA9IDE7CisJfQorCisJaWYgKHNsaWNfY2FyZF9kb3dubG9hZF9nYnJjdihhZGFwdGVyKSkgeworCQlEQkdfRVJST1IoIiVzIHVuYWJsZSB0byBkb3dubG9hZCBHQiByZWNlaXZlIG1pY3JvY29kZVxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cpIHsKKwkJREJHX01TRworCQkgICAgKCJEeW5hbWljIEludGVycnVwdCBBZ2dyZWdhdGlvbltFTkFCTEVEXTogc2xpYyVkIFwKKwkJICAgICBTRVQgaW50YWdnIHRvICVkXG4iLAorCQkgICAgIGNhcmQtPmNhcmRudW0sIDApOworCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgMCk7CisJfSBlbHNlIHsKKwkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIGludGFnZ19kZWxheSk7CisJCURCR19NU0cKKwkJICAgICgiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb25bRElTQUJMRURdOiBzbGljJWQgXAorCQkgICAgIFNFVCBpbnRhZ2cgdG8gJWRcbiIsCisJCSAgICAgY2FyZC0+Y2FyZG51bSwgaW50YWdnX2RlbGF5KTsKKwl9CisKKwkvKgorCSAqICBJbml0aWFsaXplIHBpbmcgc3RhdHVzIHRvICJvayIKKwkgKi8KKwljYXJkLT5waW5nc3RhdHVzID0gSVNSX1BJTkdNQVNLOworCisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwlpZiAoIWNhcmQtPmR1bXBidWZmZXIpIHsKKwkJY2FyZC0+ZHVtcGJ1ZmZlciA9IGttYWxsb2MoRFVNUF9QQUdFX1NJWkUsIEdGUF9BVE9NSUMpOworCisJCUFTU0VSVChjYXJkLT5kdW1wYnVmZmVyKTsKKwkJaWYgKGNhcmQtPmR1bXBidWZmZXIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKgorCSAqICBTbWVhciB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgYW5kIHRoZW4gb2J0YWluCisJICogIHRoZSBQSFlTSUNBTCBhZGRyZXNzIG9mIHRoaXMgc3RydWN0dXJlCisJICovCisJbWVtc2V0KGNhcmQtPmR1bXBidWZmZXIsIDAsIERVTVBfUEFHRV9TSVpFKTsKKwljYXJkLT5kdW1wYnVmZmVyX3BoeXMgPSB2aXJ0X3RvX2J1cyhjYXJkLT5kdW1wYnVmZmVyKTsKKwljYXJkLT5kdW1wYnVmZmVyX3BoeXNoID0gU0xJQ19HRVRfQUREUl9ISUdIKGNhcmQtPmR1bXBidWZmZXJfcGh5cyk7CisJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCA9IFNMSUNfR0VUX0FERFJfTE9XKGNhcmQtPmR1bXBidWZmZXJfcGh5cyk7CisKKwkvKgorCSAqICBBbGxvY2F0ZSBDT01NQU5EIEJVRkZFUgorCSAqLworCWlmICghY2FyZC0+Y21kYnVmZmVyKSB7CisJCWNhcmQtPmNtZGJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkdW1wX2NtZCksIEdGUF9BVE9NSUMpOworCisJCUFTU0VSVChjYXJkLT5jbWRidWZmZXIpOworCQlpZiAoY2FyZC0+Y21kYnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyoKKwkgKiAgU21lYXIgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGFuZCB0aGVuIG9idGFpbgorCSAqICB0aGUgUEhZU0lDQUwgYWRkcmVzcyBvZiB0aGlzIHN0cnVjdHVyZQorCSAqLworCW1lbXNldChjYXJkLT5jbWRidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZHVtcF9jbWQpKTsKKwljYXJkLT5jbWRidWZmZXJfcGh5cyA9IHZpcnRfdG9fYnVzKGNhcmQtPmNtZGJ1ZmZlcik7CisJY2FyZC0+Y21kYnVmZmVyX3BoeXNoID0gU0xJQ19HRVRfQUREUl9ISUdIKGNhcmQtPmNtZGJ1ZmZlcl9waHlzKTsKKwljYXJkLT5jbWRidWZmZXJfcGh5c2wgPSBTTElDX0dFVF9BRERSX0xPVyhjYXJkLT5jbWRidWZmZXJfcGh5cyk7CisjZW5kaWYKKworCS8qCisJICogTGFzdGx5LCBtYXJrIG91ciBjYXJkIHN0YXRlIGFzIHVwIGFuZCByZXR1cm4gc3VjY2VzcworCSAqLworCWNhcmQtPnN0YXRlID0gQ0FSRF9VUDsKKwljYXJkLT5yZXNldF9pbl9wcm9ncmVzcyA9IDA7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVCBjYXJkWyVwXSBhZGFwdGVyWyVwXSBjYXJkLT5zdGF0ZVsleF1cbiIsCisJCV9fZnVuY19fLCBjYXJkLCBhZGFwdGVyLCBjYXJkLT5zdGF0ZSk7CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19jYXJkX2xvY2F0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CisJc3RydWN0IHBoeXNjYXJkICpwaHlzY2FyZCA9IHNsaWNfZ2xvYmFsLnBoeXNfY2FyZDsKKwl1c2hvcnQgY2FyZF9ob3N0aWQ7CisJdTE2IF9faW9tZW0gKmhvc3RpZF9yZWc7CisJdWludCBpOworCXVpbnQgcmRob3N0aWRfb2Zmc2V0ID0gMDsKKworCURCR19NU0coInNsaWNvc3M6ICVzIGFkYXB0ZXJbJXBdIHNsb3RbJXhdIGJ1c1sleF0gcG9ydFsleF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5zbG90bnVtYmVyLCBhZGFwdGVyLT5idXNudW1iZXIsCisJCWFkYXB0ZXItPnBvcnQpOworCisJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorCQlyZGhvc3RpZF9vZmZzZXQgPSBTTElDX1JESE9TVElEXzJHQjsKKwkJYnJlYWs7CisJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6CisJCXJkaG9zdGlkX29mZnNldCA9IFNMSUNfUkRIT1NUSURfMUdCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCX0KKworCWhvc3RpZF9yZWcgPQorCSAgICAodTE2IF9faW9tZW0gKikgKCgodTggX19pb21lbSAqKSAoYWRhcHRlci0+c2xpY19yZWdzKSkgKworCSAgICByZGhvc3RpZF9vZmZzZXQpOworCURCR19NU0coInNsaWNvc3M6ICVzICpob3N0aWRfcmVnWyVwXSA9PSAiLCBfX2Z1bmNfXywgaG9zdGlkX3JlZyk7CisKKwkvKiByZWFkIHRoZSAxNiBiaXQgaG9zdGlkIGZyb20gU1JBTSAqLworCWNhcmRfaG9zdGlkID0gKHVzaG9ydCkgcmVhZHcoaG9zdGlkX3JlZyk7CisJREJHX01TRygiIGNhcmRfaG9zdGlkWyV4XVxuIiwgY2FyZF9ob3N0aWQpOworCisJLyogSW5pdGlhbGl6ZSBhIG5ldyBjYXJkIHN0cnVjdHVyZSBpZiBuZWVkIGJlICovCisJaWYgKGNhcmRfaG9zdGlkID09IFNMSUNfSE9TVElEX0RFRkFVTFQpIHsKKwkJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGljY2FyZCksIEdGUF9LRVJORUwpOworCQlpZiAoY2FyZCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJY2FyZC0+bmV4dCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKKwkJc2xpY19nbG9iYWwuc2xpY19jYXJkID0gY2FyZDsKKyNpZiBEQkcKKwkJaWYgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkgeworCQkJREJHX01TRworCQkJICAgICgiU0xJQ09TUyA9PT4gSW5pdGlhbGl6ZSAyIFBvcnQgR2lnYWJpdCBTZXJ2ZXIgXAorCQkJICAgICBhbmQgU3RvcmFnZSBBY2NlbGVyYXRvclxuIik7CisJCX0gZWxzZSB7CisJCQlEQkdfTVNHCisJCQkgICAgKCJTTElDT1NTID09PiBJbml0aWFsaXplIDEgUG9ydCBHaWdhYml0IFNlcnZlciBcCisJCQkgICAgIGFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yXG4iKTsKKwkJfQorI2VuZGlmCisJCWNhcmQtPmJ1c251bWJlciA9IGFkYXB0ZXItPmJ1c251bWJlcjsKKwkJY2FyZC0+c2xvdG51bWJlciA9IGFkYXB0ZXItPnNsb3RudW1iZXI7CisKKwkJLyogRmluZCBhbiBhdmFpbGFibGUgY2FyZG51bSAqLworCQlmb3IgKGkgPSAwOyBpIDwgU0xJQ19NQVhfQ0FSRFM7IGkrKykgeworCQkJaWYgKHNsaWNfZ2xvYmFsLmNhcmRudW1pbnVzZVtpXSA9PSAwKSB7CisJCQkJc2xpY19nbG9iYWwuY2FyZG51bWludXNlW2ldID0gMTsKKwkJCQljYXJkLT5jYXJkbnVtID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcysrOworCQlEQkdfTVNHKCJcbkNBUkROVU0gPT0gJWQgIFRvdGFsICVkICBDYXJkWyVwXVxuXG4iLAorCQkJY2FyZC0+Y2FyZG51bSwgc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMsIGNhcmQpOworCisJCXNsaWNfZGVidWdfY2FyZF9jcmVhdGUoY2FyZCk7CisJfSBlbHNlIHsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBDQVJEIGFscmVhZHkgYWxsb2NhdGVkLCBmaW5kIHRoZSBcCisJCSAgICAgY29ycmVjdCBjYXJkXG4iLCBfX2Z1bmNfXyk7CisJCS8qIENhcmQgZXhpc3RzLCBmaW5kIHRoZSBjYXJkIHRoaXMgYWRhcHRlciBiZWxvbmdzIHRvICovCisJCXdoaWxlIChjYXJkKSB7CisJCQlEQkdfTVNHCisJCQkgICAgKCJzbGljb3NzOiAlcyBjYXJkWyVwXSBzbG90WyV4XSBidXNbJXhdIFwKKwkJCSAgICAgIGFkYXB0cG9ydFslcF0gaG9zdGlkWyV4XSBjYXJkbnVtWyV4XVxuIiwKKwkJCSAgICAgX19mdW5jX18sIGNhcmQsIGNhcmQtPnNsb3RudW1iZXIsCisJCQkgICAgIGNhcmQtPmJ1c251bWJlciwgY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSwKKwkJCSAgICAgY2FyZF9ob3N0aWQsIGNhcmQtPmNhcmRudW0pOworCisJCQlpZiAoY2FyZC0+Y2FyZG51bSA9PSBjYXJkX2hvc3RpZCkKKwkJCQlicmVhazsKKwkJCWNhcmQgPSBjYXJkLT5uZXh0OworCQl9CisJfQorCisJQVNTRVJUKGNhcmQpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCS8qIFB1dCB0aGUgYWRhcHRlciBpbiB0aGUgY2FyZCdzIGFkYXB0ZXIgbGlzdCAqLworCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdID09IE5VTEwpOworCWlmICghY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSkgeworCQljYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdID0gYWRhcHRlcjsKKwkJYWRhcHRlci0+Y2FyZCA9IGNhcmQ7CisJfQorCisJY2FyZC0+Y2FyZF9zaXplID0gMTsJLyogb25lIHBvcnQgcGVyICpsb2dpY2FsKiBjYXJkICovCisKKwl3aGlsZSAocGh5c2NhcmQpIHsKKwkJZm9yIChpID0gMDsgaSA8IFNMSUNfTUFYX1BPUlRTOyBpKyspIHsKKwkJCWlmICghcGh5c2NhcmQtPmFkYXB0ZXJbaV0pCisJCQkJY29udGludWU7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJQVNTRVJUKGkgIT0gU0xJQ19NQVhfUE9SVFMpOworCQlpZiAocGh5c2NhcmQtPmFkYXB0ZXJbaV0tPnNsb3RudW1iZXIgPT0gYWRhcHRlci0+c2xvdG51bWJlcikKKwkJCWJyZWFrOworCQlwaHlzY2FyZCA9IHBoeXNjYXJkLT5uZXh0OworCX0KKwlpZiAoIXBoeXNjYXJkKSB7CisJCS8qIG5vIHN0cnVjdHVyZSBhbGxvY2F0ZWQgZm9yIHRoaXMgcGh5c2ljYWwgY2FyZCB5ZXQgKi8KKwkJcGh5c2NhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c2NhcmQgKiksIEdGUF9BVE9NSUMpOworCQlBU1NFUlQocGh5c2NhcmQpOworCQltZW1zZXQocGh5c2NhcmQsIDAsIHNpemVvZihzdHJ1Y3QgcGh5c2NhcmQgKikpOworCisJCURCR19NU0cKKwkJICAgICgiXG4lcyBBbGxvY2F0ZSBhIFBIWVNJQ0FMY2FyZDpcbiAgICBQSFlTSUNBTF9DYXJkWyVwXVxuXAorCQkgICAgIExvZ2ljYWxDYXJkICBbJXBdXG4gICAgYWRhcHRlciAgICAgIFslcF1cbiIsCisJCSAgICAgX19mdW5jX18sIHBoeXNjYXJkLCBjYXJkLCBhZGFwdGVyKTsKKworCQlwaHlzY2FyZC0+bmV4dCA9IHNsaWNfZ2xvYmFsLnBoeXNfY2FyZDsKKwkJc2xpY19nbG9iYWwucGh5c19jYXJkID0gcGh5c2NhcmQ7CisJCXBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QgPSAxOworCX0gZWxzZSB7CisJCXBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QrKzsKKwl9CisJLyogTm90ZSAtIHRoaXMgaXMgWkVSTyByZWxhdGl2ZSAqLworCWFkYXB0ZXItPnBoeXNwb3J0ID0gcGh5c2NhcmQtPmFkYXB0ZXJzX2FsbG9jZCAtIDE7CisKKwlBU1NFUlQocGh5c2NhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cGh5c3BvcnRdID09IE5VTEwpOworCXBoeXNjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBoeXNwb3J0XSA9IGFkYXB0ZXI7CisJYWRhcHRlci0+cGh5c2NhcmQgPSBwaHlzY2FyZDsKKwlEQkdfTVNHKCIgICAgUEhZU0lDQUxfUG9ydCAlZCAgICBMb2dpY2FsX1BvcnQgICVkXG4iLCBhZGFwdGVyLT5waHlzcG9ydCwKKwkJYWRhcHRlci0+cG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzIFFVSUVTQ0UgYWRhcHRlclslcF0gY2FyZFslcF0gZGV2aWRbJXhdXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQsIGFkYXB0ZXItPmRldmlkKTsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19xdWllc2NlLCAwLCBGTFVTSCk7CisJCW1kZWxheSgxKTsKKwl9CisvKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyAoJXMpIGFkYXB0ZXJbJXBdIGNhcmRbJXBdIGRldmlkWyV4XVxuIiwKKwlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5jYXJkLAorCSAgIGFkYXB0ZXItPmRldmlkKTsgKi8KKworCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcmVzZXQsIFNMSUNfUkVTRVRfTUFHSUMsIEZMVVNIKTsKKwltZGVsYXkoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBsaW5rY2hhbmdlKQoreworCXUzMiB2YWx1ZTsKKwl1MzIgUmNyUmVzZXQ7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNsaWNfaW50ZXJmYWNlX2VuYWJsZVslcF0oJWQpXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLAorCQlhZGFwdGVyLT5jYXJkaW5kZXgpOworCisJaWYgKGxpbmtjaGFuZ2UpIHsKKwkJLyogU2V0dXAgTUFDICovCisJCXNsaWNfbWFjX2NvbmZpZyhhZGFwdGVyKTsKKwkJUmNyUmVzZXQgPSBHUkNSX1JFU0VUOworCX0gZWxzZSB7CisJCXNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKGFkYXB0ZXIpOworCQlSY3JSZXNldCA9IDA7CisJfQorCisJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkgeworCQkvKiBzZXR1cCB4bXRjZmcgKi8KKwkJdmFsdWUgPSAoR1hDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgKi8KKwkJCSBHWENSX1hNVEVOIHwJLyogRW5hYmxlIHRyYW5zbWl0ICAqLworCQkJIEdYQ1JfUEFVU0VFTik7CS8qIEVuYWJsZSBwYXVzZSAgICAgKi8KKworCQlEQkdfTVNHKCJzbGljb3NzOiBGRFggYWRhcHRbJXBdIHNldCB4bXRjZmcgdG8gWyV4XVxuIiwgYWRhcHRlciwKKwkJCXZhbHVlKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193eGNmZywgdmFsdWUsIEZMVVNIKTsKKworCQkvKiBTZXR1cCByY3ZjZmcgbGFzdCAqLworCQl2YWx1ZSA9IChSY3JSZXNldCB8CS8qIFJlc2V0LCBpZiBsaW5rY2hhbmdlICovCisJCQkgR1JDUl9DVExFTiB8CS8qIEVuYWJsZSBDVEwgZnJhbWVzICAgICovCisJCQkgR1JDUl9BRERSQUVOIHwJLyogQWRkcmVzcyBBIGVuYWJsZSAgICAgKi8KKwkJCSBHUkNSX1JDVkJBRCB8CS8qIFJjdiBiYWQgZnJhbWVzICAgICAgICovCisJCQkgKEdSQ1JfSEFTSFNJWkUgPDwgR1JDUl9IQVNIU0laRV9TSElGVCkpOworCX0gZWxzZSB7CisJCS8qIHNldHVwIHhtdGNmZyAqLworCQl2YWx1ZSA9IChHWENSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICAgICAqLworCQkJIEdYQ1JfWE1URU4pOwkvKiBFbmFibGUgdHJhbnNtaXQgICovCisKKwkJREJHX01TRygic2xpY29zczogSERYIGFkYXB0WyVwXSBzZXQgeG10Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsCisJCQl2YWx1ZSk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisKKwkJLyogU2V0dXAgcmN2Y2ZnIGxhc3QgKi8KKwkJdmFsdWUgPSAoUmNyUmVzZXQgfAkvKiBSZXNldCwgaWYgbGlua2NoYW5nZSAqLworCQkJIEdSQ1JfQUREUkFFTiB8CS8qIEFkZHJlc3MgQSBlbmFibGUgICAgICovCisJCQkgR1JDUl9SQ1ZCQUQgfAkvKiBSY3YgYmFkIGZyYW1lcyAgICAgICAqLworCQkJIChHUkNSX0hBU0hTSVpFIDw8IEdSQ1JfSEFTSFNJWkVfU0hJRlQpKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQkvKiBPbmx5IGVuYWJsZSByZWNlaXZlIGlmIHdlIGFyZSByZXN0YXJ0aW5nIG9yIHJ1bm5pbmcgKi8KKwkJdmFsdWUgfD0gR1JDUl9SQ1ZFTjsKKwl9CisKKwlpZiAoYWRhcHRlci0+bWFjb3B0cyAmIE1BQ19QUk9NSVNDKQorCQl2YWx1ZSB8PSBHUkNSX1JDVkFMTDsKKworCURCR19NU0coInNsaWNvc3M6IGFkYXB0WyVwXSBzZXQgcmN2Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsIHZhbHVlKTsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOworfQorCisvKgorICogIFR1cm4gb2ZmIFJDViBhbmQgWE1ULCBwb3dlciBkb3duIFBIWQorICovCitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJdTMyIHBoeV9jb25maWc7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwkvKiBTZXR1cCB4bXRjZmcgKi8KKwl2YWx1ZSA9IChHWENSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICovCisJCSBHWENSX1BBVVNFRU4pOwkvKiBFbmFibGUgcGF1c2UgKi8KKworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisKKwl2YWx1ZSA9IChHUkNSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICAgICAgKi8KKwkJIEdSQ1JfQ1RMRU4gfAkvKiBFbmFibGUgQ1RMIGZyYW1lcyAqLworCQkgR1JDUl9BRERSQUVOIHwJLyogQWRkcmVzcyBBIGVuYWJsZSAgKi8KKwkJIChHUkNSX0hBU0hTSVpFIDw8IEdSQ1JfSEFTSFNJWkVfU0hJRlQpKTsKKworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JjZmcsIHZhbHVlLCBGTFVTSCk7CisKKwkvKiBwb3dlciBkb3duIHBoeSAqLworCXBoeV9jb25maWcgPSAoTUlJQ1JfUkVHX1BDUiB8IChQQ1JfUE9XRVJET1dOKSk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2dldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZywKKwkJCQkJCQl1MzIgY29uZmlnX2gpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgIFNMSUNfVVBSX1JDT05GSUcsCisJCQkJICAodTMyKSBjb25maWcsICh1MzIpIGNvbmZpZ19oLCAwLCAwKTsKKwlBU1NFUlQoc3RhdHVzID09IDApOworfQorCitzdGF0aWMgdm9pZCBzbGljX21hY19hZGRyZXNzX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJdTMyIHZhbHVlMjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKworCXZhbHVlID0gKih1MzIgKikgJmFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdOworCXZhbHVlID0gbnRvaGwodmFsdWUpOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWwsIHZhbHVlLCBGTFVTSCk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cmFkZHJibCwgdmFsdWUsIEZMVVNIKTsKKworCXZhbHVlMiA9ICh1MzIpICgoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gPDwgOCB8CisJCQkgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdKSAmIDB4RkZGRik7CisKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmFoLCB2YWx1ZTIsIEZMVVNIKTsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmJoLCB2YWx1ZTIsIEZMVVNIKTsKKworCURCR19NU0coIiVzIHZhbHVlMVsleF0gdmFsdWUyWyV4XSBDYWxsIHNsaWNfbWNhc3Rfc2V0X21hc2tcbiIsCisJCV9fZnVuY19fLCB2YWx1ZSwgdmFsdWUyKTsKKwlzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKworCS8qIFdyaXRlIG91ciBtdWx0aWNhc3QgbWFzayBvdXQgdG8gdGhlIGNhcmQuICBUaGlzIGlzIGRvbmUgKi8KKwkvKiBoZXJlIGluIGFkZGl0aW9uIHRvIHRoZSBzbGljX21jYXN0X2FkZHJfc2V0IHJvdXRpbmUgICAgICovCisJLyogYmVjYXVzZSBBTExfTUNBU1QgbWF5IGhhdmUgYmVlbiBlbmFibGVkIG9yIGRpc2FibGVkICAgICAqLworCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwkvKiBTZXR1cCBHTUFDIGdhcHMgKi8KKwlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwME1CKSB7CisJCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMDAgPDwgR01DUl9HQVBCQl9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIxXzEwMDAgPDwgR01DUl9HQVBSMV9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIyXzEwMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOworCX0gZWxzZSB7CisJCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMCA8PCBHTUNSX0dBUEJCX1NISUZUKSB8CisJCQkgKEdNQ1JfR0FQUjFfMTAwIDw8IEdNQ1JfR0FQUjFfU0hJRlQpIHwKKwkJCSAoR01DUl9HQVBSMl8xMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOworCX0KKworCS8qIGVuYWJsZSBHTUlJICovCisJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikKKwkJdmFsdWUgfD0gR01DUl9HQklUOworCisJLyogZW5hYmxlIGZ1bGxkdXBsZXggKi8KKwlpZiAoKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkgICAgfHwgKGFkYXB0ZXItPm1hY29wdHMgJiBNQUNfTE9PUEJBQ0spKSB7CisJCXZhbHVlIHw9IEdNQ1JfRlVMTEQ7CisJfQorCisJLyogd3JpdGUgbWFjIGNvbmZpZyAqLworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd21jZmcsIHZhbHVlLCBGTFVTSCk7CisKKwkvKiBzZXR1cCBtYWMgYWRkcmVzc2VzICovCisJc2xpY19tYWNfYWRkcmVzc19jb25maWcoYWRhcHRlcik7Cit9CisKK3N0YXRpYyBib29sIHNsaWNfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKQoreworCXUzMiBvcHRzID0gYWRhcHRlci0+bWFjb3B0czsKKwl1MzIgKmRob3N0NCA9ICh1MzIgKikmZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0WzBdOworCXUxNiAqZGhvc3QyID0gKHUxNiAqKSZldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3RbNF07CisJYm9vbCBlcXVhbGFkZHI7CisKKwlpZiAob3B0cyAmIE1BQ19QUk9NSVNDKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgUFJPTUlTQ1VPVVMuIEFjY2VwdCBmcmFtZVxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlpZiAoKCpkaG9zdDQgPT0gMHhGRkZGRkZGRikgJiYgKCpkaG9zdDIgPT0gMHhGRkZGKSkgeworCQlpZiAob3B0cyAmIE1BQ19CQ0FTVCkgeworCQkJYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMrKzsKKwkJCXJldHVybiBUUlVFOworCQl9IGVsc2UgeworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCisJaWYgKGV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFswXSAmIDB4MDEpIHsKKwkJaWYgKG9wdHMgJiBNQUNfQUxMTUNBU1QpIHsKKwkJCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzKys7CisJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJCXJldHVybiBUUlVFOworCQl9CisJCWlmIChvcHRzICYgTUFDX01DQVNUKSB7CisJCQlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKworCQkJd2hpbGUgKG1jYWRkcikgeworCQkJCUVUSEVSX0VRX0FERFIobWNhZGRyLT5hZGRyZXNzLAorCQkJCQkgICAgICBldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3QsCisJCQkJCSAgICAgIGVxdWFsYWRkcik7CisJCQkJaWYgKGVxdWFsYWRkcikgeworCQkJCQlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cysrOworCQkJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJCQkJcmV0dXJuIFRSVUU7CisJCQkJfQorCQkJCW1jYWRkciA9IG1jYWRkci0+bmV4dDsKKwkJCX0KKwkJCXJldHVybiBGQUxTRTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKwlpZiAob3B0cyAmIE1BQ19ESVJFQ1RFRCkgeworCQlhZGFwdGVyLT5yY3ZfdW5pY2FzdHMrKzsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKKworfQorCitzdGF0aWMgaW50IHNsaWNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcHRyOworCisJREJHX01TRygiJXMgRU5URVIgKCVzKVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIC1FQlVTWTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIGN1cnIgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkoYWRhcHRlci0+Y3Vycm1hY2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgbmV3ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKworCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCBUUlVFKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBzbGljX3RpbWVyX2dldF9zdGF0cworICoKKyAqIFRpbWVyIGZ1bmN0aW9uIHVzZWQgdG8gc3VjayB0aGUgc3RhdGlzdGljcyBvdXQgb2YgdGhlIGNhcmQgZXZlcnkKKyAqIDUwIHNlY29uZHMgb3Igd2hhdGV2ZXIgU1RBVFNfVElNRVJfSU5URVJWQUwgaXMgc2V0IHRvLgorICoKKyAqLworI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKK3N0YXRpYyB2b2lkIHNsaWNfdGltZXJfZ2V0X3N0YXRzKHVsb25nIGRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKworCUFTU0VSVChkZXYpOworCWFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikoKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2KS0+cHJpdjsKKwlBU1NFUlQoYWRhcHRlcik7CisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJQVNTRVJUKGNhcmQpOworCisJaWYgKChjYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSAmJgorCSAgICAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfVVApICYmIChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkpIHsKKwkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgU0xJQ19VUFJfU1RBVFMsCisJCQkJIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmluaWNzdGF0cyksCisJCQkJIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pbmljc3RhdHMpLCAwLCAwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKwkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAorCQkJCSBTTElDX1VQUl9TVEFUUywKKwkJCQkgKHUzMikgJnBzaG1lbS0+aW5pY3N0YXRzLCAwLCAwLCAwKTsKKyNlbHNlCisJCVN0b3AgY29tcGlsYXRpb247CisjZW5kaWYKKwl9IGVsc2UgeworLyoJCURCR19NU0cgKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBsaW5rc3RhdGVbJXhdIE5PVCBVUCFcbiIsCisJCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+bGlua3N0YXRlKTsgKi8KKwl9CisJYWRhcHRlci0+c3RhdHN0aW1lci5leHBpcmVzID0gamlmZmllcyArCisJICAgIFNMSUNfU0VDU19UT19KSUZGUyhTVEFUU19USU1FUl9JTlRFUlZBTCk7CisJYWRkX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKK30KKyNlbmRpZgorc3RhdGljIHZvaWQgc2xpY190aW1lcl9sb2FkX2NoZWNrKHVsb25nIGNhcmRhZGRyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IChzdHJ1Y3Qgc2xpY2NhcmQgKiljYXJkYWRkcjsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKKwl1MzIgbG9hZCA9IGNhcmQtPmV2ZW50czsKKwl1MzIgbGV2ZWwgPSAwOworCisJaWYgKChhZGFwdGVyKSAmJiAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfVVApICYmCisJICAgIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSAmJiAoc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cpKSB7CisJCWlmIChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzFHQl9ERVZJQ0VfSUQpIHsKKwkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDAwTUIpCisJCQkJbGV2ZWwgPSAxMDA7CisJCQllbHNlIHsKKwkJCQlpZiAobG9hZCA+IFNMSUNfTE9BRF81KQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzU7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF80KQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzQ7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8zKQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzM7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8yKQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzI7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8xKQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzE7CisJCQkJZWxzZQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzA7CisJCQl9CisJCQlpZiAoY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgIT0gbGV2ZWwpIHsKKwkJCQljYXJkLT5sb2FkbGV2ZWxfY3VycmVudCA9IGxldmVsOworCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaW50YWdnLAorCQkJCQkgIGxldmVsLCBGTFVTSCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobG9hZCA+IFNMSUNfTE9BRF81KQorCQkJCWxldmVsID0gU0xJQ19JTlRBR0dfNTsKKwkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfNCkKKwkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzQ7CisJCQllbHNlIGlmIChsb2FkID4gU0xJQ19MT0FEXzMpCisJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18zOworCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8yKQorCQkJCWxldmVsID0gU0xJQ19JTlRBR0dfMjsKKwkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfMSkKKwkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzE7CisJCQllbHNlCisJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18wOworCQkJaWYgKGNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ICE9IGxldmVsKSB7CisJCQkJY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSBsZXZlbDsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZywKKwkJCQkJICBsZXZlbCwgRkxVU0gpOworCQkJfQorCQl9CisJfQorCWNhcmQtPmV2ZW50cyA9IDA7CisJY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPQorCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNMSUNfTE9BRFRJTUVSX1BFUklPRCk7CisJYWRkX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpCit7CisJdTMyIGNwdWlkOworCXUzMiBjdXJyX3BpZDsKKwljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljdXJyX3BpZCA9IGN1cnJlbnQtPnBpZDsKKworCURCR19FUlJPUigiJXMgQ1BVICMgJWQgLS0tLSBQSUQgIyAlZFxuIiwgX19mdW5jX18sIGNwdWlkLCBjdXJyX3BpZCk7Cit9CisKK3N0YXRpYyBpbnQgc2xpY191cHJfcXVldWVfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgIHUzMiB1cHJfcmVxdWVzdCwKKwkJCSAgIHUzMiB1cHJfZGF0YSwKKwkJCSAgIHUzMiB1cHJfZGF0YV9oLAorCQkJICAgdTMyIHVwcl9idWZmZXIsIHUzMiB1cHJfYnVmZmVyX2gpCit7CisJc3RydWN0IHNsaWNfdXByICp1cHI7CisJc3RydWN0IHNsaWNfdXByICp1cHJxdWV1ZTsKKworCXVwciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGljX3VwciksIEdGUF9BVE9NSUMpOworCWlmICghdXByKSB7CisJCURCR19NU0coIiVzIENPVUxEIE5PVCBBTExPQ0FURSBVUFIgTUVNXG4iLCBfX2Z1bmNfXyk7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVwci0+YWRhcHRlciA9IGFkYXB0ZXItPnBvcnQ7CisJdXByLT51cHJfcmVxdWVzdCA9IHVwcl9yZXF1ZXN0OworCXVwci0+dXByX2RhdGEgPSB1cHJfZGF0YTsKKwl1cHItPnVwcl9idWZmZXIgPSB1cHJfYnVmZmVyOworCXVwci0+dXByX2RhdGFfaCA9IHVwcl9kYXRhX2g7CisJdXByLT51cHJfYnVmZmVyX2ggPSB1cHJfYnVmZmVyX2g7CisJdXByLT5uZXh0ID0gTlVMTDsKKwlpZiAoYWRhcHRlci0+dXByX2xpc3QpIHsKKwkJdXBycXVldWUgPSBhZGFwdGVyLT51cHJfbGlzdDsKKworCQl3aGlsZSAodXBycXVldWUtPm5leHQpCisJCQl1cHJxdWV1ZSA9IHVwcnF1ZXVlLT5uZXh0OworCQl1cHJxdWV1ZS0+bmV4dCA9IHVwcjsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT51cHJfbGlzdCA9IHVwcjsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHNsaWNfdXByX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgdTMyIHVwcl9yZXF1ZXN0LAorCQkgICAgIHUzMiB1cHJfZGF0YSwKKwkJICAgICB1MzIgdXByX2RhdGFfaCwKKwkJICAgICB1MzIgdXByX2J1ZmZlciwgdTMyIHVwcl9idWZmZXJfaCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssIGFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKKwlzdGF0dXMgPSBzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJCXVwcl9yZXF1ZXN0LAorCQkJCQl1cHJfZGF0YSwKKwkJCQkJdXByX2RhdGFfaCwgdXByX2J1ZmZlciwgdXByX2J1ZmZlcl9oKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJc2xpY191cHJfc3RhcnQoYWRhcHRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dXByX2xvY2subG9jaywKKwkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJcmV0dXJuIFNUQVRVU19QRU5ESU5HOworfQorCitzdGF0aWMgdm9pZCBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXNyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJc3RydWN0IHNsaWNfdXByICp1cHI7CisKKy8qICAgIGlmIChjYXJkLT5kdW1wX3JlcXVlc3RlZCkgeworCURCR19NU0coIkVOVEVSIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUgRHVtcCBpbiBwcm9ncmVzcyBJU1JbJXhdXG4iLAorCQlpc3IpOworICAgICAgfSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLCBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJdXByID0gYWRhcHRlci0+dXByX2xpc3Q7CisJaWYgKCF1cHIpIHsKKwkJQVNTRVJUKDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJCXJldHVybjsKKwl9CisJYWRhcHRlci0+dXByX2xpc3QgPSB1cHItPm5leHQ7CisJdXByLT5uZXh0ID0gTlVMTDsKKwlhZGFwdGVyLT51cHJfYnVzeSA9IDA7CisJQVNTRVJUKGFkYXB0ZXItPnBvcnQgPT0gdXByLT5hZGFwdGVyKTsKKwlzd2l0Y2ggKHVwci0+dXByX3JlcXVlc3QpIHsKKwljYXNlIFNMSUNfVVBSX1NUQVRTOgorCQl7CisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorCQkJc3RydWN0IHNsaWNfc3RhdHMgKnNsaWNzdGF0cyA9CisJCQkgICAgKHN0cnVjdCBzbGljX3N0YXRzICopICZhZGFwdGVyLT5wc2htZW0tPmluaWNzdGF0czsKKwkJCXN0cnVjdCBzbGljX3N0YXRzICpuZXdzdGF0cyA9IHNsaWNzdGF0czsKKwkJCXN0cnVjdCBzbGljX3N0YXRzICAqb2xkID0gJmFkYXB0ZXItPmluaWNzdGF0c19wcmV2OworCQkJc3RydWN0IHNsaWNuZXRfc3RhdHMgKnN0c3QgPSAmYWRhcHRlci0+c2xpY19zdGF0czsKKyNlbmRpZgorCQkJaWYgKGlzciAmIElTUl9VUENFUlIpIHsKKwkJCQlEQkdfRVJST1IKKwkJCQkgICAgKCJTTElDX1VQUl9TVEFUUyBjb21tYW5kIGZhaWxlZCBpc3JbJXhdXG4iLAorCQkJCSAgICAgaXNyKTsKKworCQkJCWJyZWFrOworCQkJfQorI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKy8qCQkJREJHX01TRyAoInNsaWNvc3M6ICVzIHJjdiAlbHg6JWx4OiVseDolbHg6JWx4ICVseCAlbHggIgorCQkJCSJ4bXQgJWx4OiVseDolbHg6JWx4OiVseCAlbHggJWx4XG4iLAorCQkJCSBfX2Z1bmNfXywKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdW5pY2FzdHMxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+cmN2X2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnJjdl9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdGNwX2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnJjdl90Y3Bfc2VnczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3Zfb3RoZXJfZXJyb3IxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+cmN2X2Ryb3BzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdW5pY2FzdHMxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX3NlZ3MxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9vdGhlcl9lcnJvcjEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2NvbGxpc2lvbnMxMDApOyovCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnhtaXRfdGNwX3NlZ3MsCisJCQkJCW5ld3N0YXRzLT54bWl0X3RjcF9zZWdzX2diLAorCQkJCQlvbGQtPnhtaXRfdGNwX3NlZ3NfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnhtaXRfdGNwX2J5dGVzLAorCQkJCQluZXdzdGF0cy0+eG1pdF90Y3BfYnl0ZXNfZ2IsCisJCQkJCW9sZC0+eG1pdF90Y3BfYnl0ZXNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnJjdl90Y3Bfc2VncywKKwkJCQkJbmV3c3RhdHMtPnJjdl90Y3Bfc2Vnc19nYiwKKwkJCQkJb2xkLT5yY3ZfdGNwX3NlZ3NfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnJjdl90Y3BfYnl0ZXMsCisJCQkJCW5ld3N0YXRzLT5yY3ZfdGNwX2J5dGVzX2diLAorCQkJCQlvbGQtPnJjdl90Y3BfYnl0ZXNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UueG10X2J5dGVzLAorCQkJCQluZXdzdGF0cy0+eG1pdF9ieXRlc19nYiwKKwkJCQkJb2xkLT54bWl0X2J5dGVzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnhtdF91Y2FzdCwKKwkJCQkJbmV3c3RhdHMtPnhtaXRfdW5pY2FzdHNfZ2IsCisJCQkJCW9sZC0+eG1pdF91bmljYXN0c19nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS5yY3ZfYnl0ZXMsCisJCQkJCW5ld3N0YXRzLT5yY3ZfYnl0ZXNfZ2IsCisJCQkJCW9sZC0+cmN2X2J5dGVzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnJjdl91Y2FzdCwKKwkJCQkJbmV3c3RhdHMtPnJjdl91bmljYXN0c19nYiwKKwkJCQkJb2xkLT5yY3ZfdW5pY2FzdHNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UueG10X2Vycm9ycywKKwkJCQkJbmV3c3RhdHMtPnhtaXRfY29sbGlzaW9uc19nYiwKKwkJCQkJb2xkLT54bWl0X2NvbGxpc2lvbnNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UueG10X2Vycm9ycywKKwkJCQkJbmV3c3RhdHMtPnhtaXRfZXhjZXNzX2NvbGxpc2lvbnNfZ2IsCisJCQkJCW9sZC0+eG1pdF9leGNlc3NfY29sbGlzaW9uc19nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS54bXRfZXJyb3JzLAorCQkJCQluZXdzdGF0cy0+eG1pdF9vdGhlcl9lcnJvcl9nYiwKKwkJCQkJb2xkLT54bWl0X290aGVyX2Vycm9yX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnJjdl9lcnJvcnMsCisJCQkJCW5ld3N0YXRzLT5yY3Zfb3RoZXJfZXJyb3JfZ2IsCisJCQkJCW9sZC0+cmN2X290aGVyX2Vycm9yX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnJjdl9kaXNjYXJkcywKKwkJCQkJbmV3c3RhdHMtPnJjdl9kcm9wc19nYiwKKwkJCQkJb2xkLT5yY3ZfZHJvcHNfZ2IpOworCisJCQlpZiAobmV3c3RhdHMtPnJjdl9kcm9wc19nYiA+IG9sZC0+cmN2X2Ryb3BzX2diKSB7CisJCQkJYWRhcHRlci0+cmN2X2Ryb3BzICs9CisJCQkJICAgIChuZXdzdGF0cy0+cmN2X2Ryb3BzX2diIC0KKwkJCQkgICAgIG9sZC0+cmN2X2Ryb3BzX2diKTsKKwkJCX0KKwkJCW1lbWNweShvbGQsIG5ld3N0YXRzLCBzaXplb2Yoc3RydWN0IHNsaWNfc3RhdHMpKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwljYXNlIFNMSUNfVVBSX1JMU1I6CisJCXNsaWNfbGlua191cHJfY29tcGxldGUoYWRhcHRlciwgaXNyKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9SQ09ORklHOgorCQlicmVhazsKKwljYXNlIFNMSUNfVVBSX1JQSFk6CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9FTkxCOgorCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCWNhc2UgU0xJQ19VUFJfRU5DVDoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwljYXNlIFNMSUNfVVBSX1BEV046CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9QSU5HOgorCQljYXJkLT5waW5nc3RhdHVzIHw9IChpc3IgJiBJU1JfUElOR0RTTUFTSyk7CisJCWJyZWFrOworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJY2FzZSBTTElDX1VQUl9EVU1QOgorCQljYXJkLT5kdW1wc3RhdHVzIHw9IChpc3IgJiBJU1JfVVBDTUFTSyk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCX0KKwlrZnJlZSh1cHIpOworCXNsaWNfdXByX3N0YXJ0KGFkYXB0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzbGljX3Vwcl9zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY191cHIgKnVwcjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKy8qCisgICAgY2hhciAqIHB0cjE7CisgICAgY2hhciAqIHB0cjI7CisgICAgdWludCBjbWRvZmZzZXQ7CisqLworCXVwciA9IGFkYXB0ZXItPnVwcl9saXN0OworCWlmICghdXByKQorCQlyZXR1cm47CisJaWYgKGFkYXB0ZXItPnVwcl9idXN5KQorCQlyZXR1cm47CisJYWRhcHRlci0+dXByX2J1c3kgPSAxOworCisJc3dpdGNoICh1cHItPnVwcl9yZXF1ZXN0KSB7CisJY2FzZSBTTElDX1VQUl9TVEFUUzoKKwkJaWYgKHVwci0+dXByX2RhdGFfaCA9PSAwKSB7CisJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3N0YXRzLCB1cHItPnVwcl9kYXRhLCBGTFVTSCk7CisJCX0gZWxzZSB7CisJCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfc3RhdHM2NCwKKwkJCQkgICAgdXByLT51cHJfZGF0YSwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJICAgIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTElDX1VQUl9STFNSOgorCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJICAgIHNsaWNfcmVncy0+c2xpY19ybHNyLAorCQkJICAgIHVwci0+dXByX2RhdGEsCisJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQlicmVhazsKKworCWNhc2UgU0xJQ19VUFJfUkNPTkZJRzoKKwkJREJHX01TRygiJXMgU0xJQ19VUFJfUkNPTkZJRyEhISFcbiIsIF9fZnVuY19fKTsKKwkJREJHX01TRygiV1JJVEVfUkVHNjQgYWRhcHRlclslcF1cbiIKKwkJCSIgICAgYS0+c2xpY19yZWdzWyVwXSBzbGljX3JlZ3NbJXBdXG4iCisJCQkiICAgICZzbGljX3Jjb25maWdbJXBdICZzbGljX2FkZHJfdXBwZXJbJXBdXG4iCisJCQkiICAgIHVwclslcF1cbiIKKwkJCSIgICAgdXByZGF0YVsleF0gdXByZGF0YWhbJXhdXG4iLAorCQkJYWRhcHRlciwgYWRhcHRlci0+c2xpY19yZWdzLCBzbGljX3JlZ3MsCisJCQkmc2xpY19yZWdzLT5zbGljX3Jjb25maWcsICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCXVwciwgdXByLT51cHJfZGF0YSwgdXByLT51cHJfZGF0YV9oKTsKKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfcmNvbmZpZywKKwkJCSAgICB1cHItPnVwcl9kYXRhLAorCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJYnJlYWs7CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwljYXNlIFNMSUNfVVBSX0RVTVA6CisjaWYgMAorCQlEQkdfTVNHKCIlcyBTTElDX1VQUl9EVU1QISEhIVxuIiwgX19mdW5jX18pOworCQlEQkdfTVNHKCJXUklURV9SRUc2NCBhZGFwdGVyWyVwXVxuIgorCQkJICIgICAgdXByX2J1ZmZlclsleF0gICB1cHJfYnVmZmVyaFsleF1cbiIKKwkJCSAiICAgIHVwcl9kYXRhWyV4XSAgICAgdXByX2RhdGFoWyV4XVxuIgorCQkJICIgICAgY21kYnVmZlslcF0gY21kYnVmZlBbJXBdXG4iCisJCQkgIiAgICBkdW1wYnVmZlslcF0gZHVtcGJ1ZmZQWyVwXVxuIiwKKwkJCSBhZGFwdGVyLCB1cHItPnVwcl9idWZmZXIsIHVwci0+dXByX2J1ZmZlcl9oLAorCQkJIHVwci0+dXByX2RhdGEsIHVwci0+dXByX2RhdGFfaCwKKwkJCSBhZGFwdGVyLT5jYXJkLT5jbWRidWZmZXIsCisJCQkgKHZvaWQgKilhZGFwdGVyLT5jYXJkLT5jbWRidWZmZXJfcGh5cywKKwkJCSBhZGFwdGVyLT5jYXJkLT5kdW1wYnVmZmVyLCAoCisJCQkgdm9pZCAqKWFkYXB0ZXItPmNhcmQtPmR1bXBidWZmZXJfcGh5cyk7CisKKwkJcHRyMSA9IChjaGFyICopc2xpY19yZWdzOworCQlwdHIyID0gKGNoYXIgKikoJnNsaWNfcmVncy0+c2xpY19kdW1wX2NtZCk7CisJCWNtZG9mZnNldCA9IHB0cjIgLSBwdHIxOworCQlEQkdfTVNHKCJzbGljX2R1bXBfY21kIHJlZ2lzdGVyIG9mZnNldCBbJXhdXG4iLCBjbWRvZmZzZXQpOworI2VuZGlmCisJCWlmICh1cHItPnVwcl9idWZmZXIgfHwgdXByLT51cHJfYnVmZmVyX2gpIHsKKwkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJICAgIHNsaWNfcmVncy0+c2xpY19kdW1wX2RhdGEsCisJCQkJICAgIHVwci0+dXByX2J1ZmZlciwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJICAgIHVwci0+dXByX2J1ZmZlcl9oLCBGTFVTSCk7CisJCX0KKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfZHVtcF9jbWQsCisJCQkgICAgdXByLT51cHJfZGF0YSwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBTTElDX1VQUl9QSU5HOgorCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3BpbmcsIDEsIEZMVVNIKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcikKK3sKKwl1MzIgbGlua3N0YXR1cyA9IGFkYXB0ZXItPnBzaG1lbS0+bGlua3N0YXR1czsKKwl1aW50IGxpbmt1cDsKKwl1bnNpZ25lZCBjaGFyIGxpbmtzcGVlZDsKKwl1bnNpZ25lZCBjaGFyIGxpbmtkdXBsZXg7CisKKwlEQkdfTVNHKCIlczogJXMgSVNSWyV4XSBsaW5rc3RhdHVzWyV4XVxuICAgYWRhcHRlclslcF0oJWQpXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpc3IsIGxpbmtzdGF0dXMsIGFkYXB0ZXIsCisJCWFkYXB0ZXItPmNhcmRpbmRleCk7CisKKwlpZiAoKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgeworCQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCisJCQkJICAgICAgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+bGlua3N0YXR1cyksCisJCQkJICAgICAgIDAsIDApOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCisJCQkJICAgICAgICh1MzIpICZwc2htZW0tPmxpbmtzdGF0dXMsCisJCQkJICAgICAgIFNMSUNfR0VUX0FERFJfSElHSChwc2htZW0pLCAwLCAwKTsKKyNlbHNlCisJCVN0b3AgQ29tcGlsYXRpb247CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApCisJCXJldHVybjsKKworCUFTU0VSVCgoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18xR0JfREVWSUNFX0lEKQorCSAgICAgICB8fCAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18yR0JfREVWSUNFX0lEKSk7CisKKwlsaW5rdXAgPSBsaW5rc3RhdHVzICYgR0lHX0xJTktVUCA/IExJTktfVVAgOiBMSU5LX0RPV047CisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwMCkgeworCQlsaW5rc3BlZWQgPSBMSU5LXzEwMDBNQjsKKwkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBHSUdBQklUIFNwZWVkPT0xMDAwTUIgICIsCisJCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9IGVsc2UgaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwKSB7CisJCWxpbmtzcGVlZCA9IExJTktfMTAwTUI7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTAwTUIgICIsIF9fZnVuY19fLAorCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQlsaW5rc3BlZWQgPSBMSU5LXzEwTUI7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTBNQiAgIiwgX19mdW5jX18sCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCX0KKwlpZiAobGlua3N0YXR1cyAmIEdJR19GVUxMRFVQTEVYKSB7CisJCWxpbmtkdXBsZXggPSBMSU5LX0ZVTExEOworCQlEQkdfTVNHKCIgRHVwbGV4ID09IEZVTExcbiIpOworCX0gZWxzZSB7CisJCWxpbmtkdXBsZXggPSBMSU5LX0hBTEZEOworCQlEQkdfTVNHKCIgRHVwbGV4ID09IEhBTEZcbiIpOworCX0KKworCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTikgJiYgKGxpbmt1cCA9PSBMSU5LX0RPV04pKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgcGh5c3BvcnQoJWQpIGxpbmsgc3RpbGwgZG93blxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnBoeXNwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxpbmsgdXAgZXZlbnQsIGJ1dCBub3RoaW5nIGhhcyBjaGFuZ2VkICovCisJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkgJiYKKwkgICAgKGxpbmt1cCA9PSBMSU5LX1VQKSAmJgorCSAgICAoYWRhcHRlci0+bGlua3NwZWVkID09IGxpbmtzcGVlZCkgJiYKKwkgICAgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gbGlua2R1cGxleCkpIHsKKwkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBwb3J0KCVkKSBsaW5rIHN0aWxsIHVwXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+cGh5c3BvcnQpOworCQlyZXR1cm47CisJfQorCisJLyogbGluayBoYXMgY2hhbmdlZCBhdCB0aGlzIHBvaW50ICovCisKKwkvKiBsaW5rIGhhcyBnb25lIGZyb20gdXAgdG8gZG93biAqLworCWlmIChsaW5rdXAgPT0gTElOS19ET1dOKSB7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJREJHX01TRygic2xpY29zczogJXMgJWQgTGlua0Rvd24hXG4iLCBfX2Z1bmNfXywKKwkJCWFkYXB0ZXItPnBoeXNwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxpbmsgaGFzIGdvbmUgZnJvbSBkb3duIHRvIHVwICovCisJYWRhcHRlci0+bGlua3NwZWVkID0gbGlua3NwZWVkOworCWFkYXB0ZXItPmxpbmtkdXBsZXggPSBsaW5rZHVwbGV4OworCisJaWYgKGFkYXB0ZXItPmxpbmtzdGF0ZSAhPSBMSU5LX1VQKSB7CisJCS8qIHNldHVwIHRoZSBtYWMgKi8KKwkJREJHX01TRygiJXMgY2FsbCBzbGljX2NvbmZpZ19zZXRcbiIsIF9fZnVuY19fKTsKKwkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX1VQOworCQlEQkdfTVNHKCJcbiglcykgTGluayBVUDogQ0FMTCBzbGljX2lmX3N0YXJ0X3F1ZXVlIiwKKwkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCXNsaWNfaWZfc3RhcnRfcXVldWUoYWRhcHRlcik7CisJfQorI2lmIDEKKwlzd2l0Y2ggKGxpbmtzcGVlZCkgeworCWNhc2UgTElOS18xMDAwTUI6CisJCURCR19NU0cKKwkJICAgICgiXG4oJXMpIExJTksgVVAhOiBHSUdBQklUIFNQRUVEID09IDEwMDBNQiAgZHVwbGV4WyV4XVxuIiwKKwkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOworCQlicmVhazsKKwljYXNlIExJTktfMTAwTUI6CisJCURCR19NU0coIlxuKCVzKSBMSU5LIFVQITogU1BFRUQgPT0gMTAwTUIgIGR1cGxleFsleF1cbiIsCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkdfTVNHKCJcbiglcykgTElOSyBVUCE6IFNQRUVEID09IDEwTUIgIGR1cGxleFsleF1cbiIsCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOworCQlicmVhazsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqICB0aGlzIGlzIGhlcmUgdG8gY2hlY2tzdW0gdGhlIGVlcHJvbSwgdGhlcmUgaXMgc29tZSB1Y29kZSBidWcKKyAqICB3aGljaCBwcmV2ZW5zIHVzIGZyb20gdXNpbmcgdGhlIHVjb2RlIHJlc3VsdC4KKyAqICByZW1vdmUgdGhpcyBvbmNlIHVjb2RlIGlzIGZpeGVkLgorICovCitzdGF0aWMgdXNob3J0IHNsaWNfZWVwcm9tX2Nrc3VtKGNoYXIgKm0sIGludCBsZW4pCit7CisjZGVmaW5lIEFERENBUlJZKHgpICAoeCA+IDY1NTM1ID8geCAtPSA2NTUzNSA6IHgpCisjZGVmaW5lIFJFRFVDRSB7bF91dGlsLmwgPSBzdW07IHN1bSA9IGxfdXRpbC5zWzBdICsgbF91dGlsLnNbMV07IEFERENBUlJZKHN1bSk7XAorCQl9CisKKwl1MTYgKnc7CisJdTMyIHN1bSA9IDA7CisJdTMyIGJ5dGVfc3dhcHBlZCA9IDA7CisJdTMyIHdfaW50OworCisJdW5pb24geworCQljaGFyIGNbMl07CisJCXVzaG9ydCBzOworCX0gc191dGlsOworCisJdW5pb24geworCQl1c2hvcnQgc1syXTsKKwkJaW50IGw7CisJfSBsX3V0aWw7CisKKwlsX3V0aWwubCA9IDA7CisJc191dGlsLnMgPSAwOworCisJdyA9ICh1MTYgKiltOworI2lmZGVmIENPTkZJR19YODZfNjQKKwl3X2ludCA9ICh1MzIpICgodWxvbmcpIHcgJiAweDAwMDAwMDAwRkZGRkZGRkYpOworI2Vsc2UKKwl3X2ludCA9ICh1MzIpICh3KTsKKyNlbmRpZgorCWlmICgoMSAmIHdfaW50KSAmJiAobGVuID4gMCkpIHsKKwkJUkVEVUNFOworCQlzdW0gPDw9IDg7CisJCXNfdXRpbC5jWzBdID0gKih1bnNpZ25lZCBjaGFyICopdzsKKwkJdyA9ICh1MTYgKikoKGNoYXIgKil3ICsgMSk7CisJCWxlbi0tOworCQlieXRlX3N3YXBwZWQgPSAxOworCX0KKworCS8qIFVucm9sbCB0aGUgbG9vcCB0byBtYWtlIG92ZXJoZWFkIGZyb20gYnJhbmNoZXMgJmMgc21hbGwuICovCisJd2hpbGUgKChsZW4gLT0gMzIpID49IDApIHsKKwkJc3VtICs9IHdbMF07CisJCXN1bSArPSB3WzFdOworCQlzdW0gKz0gd1syXTsKKwkJc3VtICs9IHdbM107CisJCXN1bSArPSB3WzRdOworCQlzdW0gKz0gd1s1XTsKKwkJc3VtICs9IHdbNl07CisJCXN1bSArPSB3WzddOworCQlzdW0gKz0gd1s4XTsKKwkJc3VtICs9IHdbOV07CisJCXN1bSArPSB3WzEwXTsKKwkJc3VtICs9IHdbMTFdOworCQlzdW0gKz0gd1sxMl07CisJCXN1bSArPSB3WzEzXTsKKwkJc3VtICs9IHdbMTRdOworCQlzdW0gKz0gd1sxNV07CisJCXcgPSAodTE2ICopKCh1bG9uZykgdyArIDE2KTsJLyogdmVyaWZ5ICovCisJfQorCWxlbiArPSAzMjsKKwl3aGlsZSAoKGxlbiAtPSA4KSA+PSAwKSB7CisJCXN1bSArPSB3WzBdOworCQlzdW0gKz0gd1sxXTsKKwkJc3VtICs9IHdbMl07CisJCXN1bSArPSB3WzNdOworCQl3ID0gKHUxNiAqKSgodWxvbmcpIHcgKyA0KTsJLyogdmVyaWZ5ICovCisJfQorCWxlbiArPSA4OworCWlmIChsZW4gIT0gMCB8fCBieXRlX3N3YXBwZWQgIT0gMCkgeworCQlSRURVQ0U7CisJCXdoaWxlICgobGVuIC09IDIpID49IDApCisJCQlzdW0gKz0gKncrKzsJLyogdmVyaWZ5ICovCisJCWlmIChieXRlX3N3YXBwZWQpIHsKKwkJCVJFRFVDRTsKKwkJCXN1bSA8PD0gODsKKwkJCWJ5dGVfc3dhcHBlZCA9IDA7CisJCQlpZiAobGVuID09IC0xKSB7CisJCQkJc191dGlsLmNbMV0gPSAqKGNoYXIgKikgdzsKKwkJCQlzdW0gKz0gc191dGlsLnM7CisJCQkJbGVuID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJbGVuID0gLTE7CisJCQl9CisKKwkJfSBlbHNlIGlmIChsZW4gPT0gLTEpIHsKKwkJCXNfdXRpbC5jWzBdID0gKihjaGFyICopIHc7CisJCX0KKworCQlpZiAobGVuID09IC0xKSB7CisJCQlzX3V0aWwuY1sxXSA9IDA7CisJCQlzdW0gKz0gc191dGlsLnM7CisJCX0KKwl9CisJUkVEVUNFOworCXJldHVybiAodXNob3J0KSBzdW07Cit9CisKK3N0YXRpYyBpbnQgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXN0cnVjdCBzbGljX3JzcHF1ZXVlICpyc3BxID0gJmFkYXB0ZXItPnJzcHF1ZXVlOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCXUzMiBwYWRkcmggPSAwOworCisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCW1lbXNldChyc3BxLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfcnNwcXVldWUpKTsKKworCXJzcHEtPm51bV9wYWdlcyA9IFNMSUNfUlNQUV9QQUdFU19HQjsKKworCWZvciAoaSA9IDA7IGkgPCByc3BxLT5udW1fcGFnZXM7IGkrKykgeworCQlyc3BxLT52YWRkcltpXSA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFBBR0VfU0laRSwKKwkJCQkJICZyc3BxLT5wYWRkcltpXSk7CisJCWlmICghcnNwcS0+dmFkZHJbaV0pIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgicnNwcXVldWVfaW5pdF9mYWlsZWQgIHBjaV9hbGxvY19jb25zaXN0ZW50XG4iKTsKKwkJCXNsaWNfcnNwcXVldWVfZnJlZShhZGFwdGVyKTsKKwkJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwkJfQorI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJCUFTU0VSVCgoKHUzMikgcnNwcS0+dmFkZHJbaV0gJiAweEZGRkZGMDAwKSA9PQorCQkgICAgICAgKHUzMikgcnNwcS0+dmFkZHJbaV0pOworCQlBU1NFUlQoKCh1MzIpIHJzcHEtPnBhZGRyW2ldICYgMHhGRkZGRjAwMCkgPT0KKwkJICAgICAgICh1MzIpIHJzcHEtPnBhZGRyW2ldKTsKKyNlbmRpZgorCQltZW1zZXQocnNwcS0+dmFkZHJbaV0sIDAsIFBBR0VfU0laRSk7CisvKiAgICAgICAgICAgICAgREJHX01TRygic2xpY29zczogJXMgVVBMT0FEIFJTUEJVRkYgUGFnZSBwYWdlaXhbJXhdIHBhZGRyWyVwXSAiCisJCQkidmFkZHJbJXBdXG4iLAorCQkJX19mdW5jX18sIGksICh2b2lkICopcnNwcS0+cGFkZHJbaV0sIHJzcHEtPnZhZGRyW2ldKTsgKi8KKworCQlpZiAocGFkZHJoID09IDApIHsKKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmJhciwKKwkJCQkgIChyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKKwkJCQkgIERPTlRfRkxVU0gpOworCQl9IGVsc2UgeworCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX3JiYXI2NCwKKwkJCQkgICAgKHJzcHEtPnBhZGRyW2ldIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAorCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkgICAgcGFkZHJoLCBET05UX0ZMVVNIKTsKKwkJfQorCX0KKwlyc3BxLT5vZmZzZXQgPSAwOworCXJzcHEtPnBhZ2VpbmRleCA9IDA7CisJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKXJzcHEtPnZhZGRyWzBdOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKKwkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKKwlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7CisJQVNTRVJUKHJzcHEpOworCisJREJHX01TRygic2xpY29zczogTm90aGluZyB0byBkby4gcnNwcVslcF1cbiIKKwkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WyV4XVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlaXhbJXhdXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzcGJ1ZlslcF1cbiIsCisJCXJzcHEsIHJzcHEtPm9mZnNldCwgcnNwcS0+cGFnZWluZGV4LCByc3BxLT5yc3BidWYpOworCisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKKwkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfcnNwcXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2xpY19yc3BxdWV1ZSAqcnNwcSA9ICZhZGFwdGVyLT5yc3BxdWV1ZTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIGFkYXB0ZXJbJXBdIHBvcnQgJWQgcnNwcVslcF0gRnJlZVJTUFFcbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCwgcnNwcSk7CisJZm9yIChpID0gMDsgaSA8IHJzcHEtPm51bV9wYWdlczsgaSsrKSB7CisJCWlmIChyc3BxLT52YWRkcltpXSkgeworCQkJREJHX01TRworCQkJICAgICgic2xpY29zczogIHBjaV9mcmVlX2NvbnNpc3RlbnQgcnNwcS0+dmFkZHJbJXBdIFwKKwkJCSAgICBwYWRkclslcF1cbiIsCisJCQkgICAgIHJzcHEtPnZhZGRyW2ldLCAodm9pZCAqKSByc3BxLT5wYWRkcltpXSk7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgUEFHRV9TSVpFLAorCQkJCQkgICAgcnNwcS0+dmFkZHJbaV0sIHJzcHEtPnBhZGRyW2ldKTsKKwkJfQorCQlyc3BxLT52YWRkcltpXSA9IE5VTEw7CisJCXJzcHEtPnBhZGRyW2ldID0gMDsKKwl9CisJcnNwcS0+b2Zmc2V0ID0gMDsKKwlyc3BxLT5wYWdlaW5kZXggPSAwOworCXJzcHEtPnJzcGJ1ZiA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19yc3BidWYgKnNsaWNfcnNwcXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19yc3BxdWV1ZSAqcnNwcSA9ICZhZGFwdGVyLT5yc3BxdWV1ZTsKKwlzdHJ1Y3Qgc2xpY19yc3BidWYgKmJ1ZjsKKworCWlmICghKHJzcHEtPnJzcGJ1Zi0+c3RhdHVzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlidWYgPSByc3BxLT5yc3BidWY7CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwlBU1NFUlQoKGJ1Zi0+c3RhdHVzICYgMHhGRkZGRkZFMCkgPT0gMCk7CisjZW5kaWYKKwlBU1NFUlQoYnVmLT5ob3N0aGFuZGxlKTsKKwlpZiAoKytyc3BxLT5vZmZzZXQgPCBTTElDX1JTUFFfQlVGU0lOUEFHRSkgeworCQlyc3BxLT5yc3BidWYrKzsKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCQlBU1NFUlQoKCh1MzIpIHJzcHEtPnJzcGJ1ZiAmIDB4RkZGRkZGRTApID09CisJCSAgICAgICAodTMyKSByc3BxLT5yc3BidWYpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJQVNTRVJUKHJzcHEtPm9mZnNldCA9PSBTTElDX1JTUFFfQlVGU0lOUEFHRSk7CisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3JiYXI2NCwKKwkJCSAgICAocnNwcS0+CisJCQkgICAgIHBhZGRyW3JzcHEtPnBhZ2VpbmRleF0gfCBTTElDX1JTUFFfQlVGU0lOUEFHRSksCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOworCQlyc3BxLT5wYWdlaW5kZXggPSAoKytyc3BxLT5wYWdlaW5kZXgpICUgcnNwcS0+bnVtX3BhZ2VzOworCQlyc3BxLT5vZmZzZXQgPSAwOworCQlyc3BxLT5yc3BidWYgPSAoc3RydWN0IHNsaWNfcnNwYnVmICopCisJCQkJCQlyc3BxLT52YWRkcltyc3BxLT5wYWdlaW5kZXhdOworI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJCUFTU0VSVCgoKHUzMikgcnNwcS0+cnNwYnVmICYgMHhGRkZGRjAwMCkgPT0KKwkJICAgICAgICh1MzIpIHJzcHEtPnJzcGJ1Zik7CisjZW5kaWYKKwl9CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwlBU1NFUlQoKCh1MzIpIGJ1ZiAmIDB4RkZGRkZGRTApID09ICh1MzIpIGJ1Zik7CisjZW5kaWYKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFtZW1faW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxbWVtICpjbWRxbWVtID0gJmFkYXB0ZXItPmNtZHFtZW07CisKKwltZW1zZXQoY21kcW1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHFtZW0pKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxbWVtX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfY21kcW1lbSAqY21kcW1lbSA9ICZhZGFwdGVyLT5jbWRxbWVtOworCWludCBpOworCisJREJHX01TRygic2xpY29zczogKCVzKSBhZGFwdGVyWyVwXSBwb3J0ICVkIHJzcHFbJXBdIEZyZWUgQ01EUSBNZW1vcnlcbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCwgY21kcW1lbSk7CisJZm9yIChpID0gMDsgaSA8IFNMSUNfQ01EUV9NQVhQQUdFUzsgaSsrKSB7CisJCWlmIChjbWRxbWVtLT5wYWdlc1tpXSkgeworCQkJREJHX01TRygic2xpY29zczogJXMgRGVhbGxvY2F0ZSBwYWdlICBDbWRRUGFnZVslcF1cbiIsCisJCQkJX19mdW5jX18sICh2b2lkICopIGNtZHFtZW0tPnBhZ2VzW2ldKTsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgUEFHRV9TSVpFLAorCQkJCQkgICAgKHZvaWQgKikgY21kcW1lbS0+cGFnZXNbaV0sCisJCQkJCSAgICBjbWRxbWVtLT5kbWFfcGFnZXNbaV0pOworCQl9CisJfQorCW1lbXNldChjbWRxbWVtLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcW1lbSkpOworfQorCitzdGF0aWMgdTMyICpzbGljX2NtZHFtZW1fYWRkcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxbWVtICpjbWRxbWVtID0gJmFkYXB0ZXItPmNtZHFtZW07CisJdTMyICpwYWdlYWRkcjsKKworCWlmIChjbWRxbWVtLT5wYWdlY250ID49IFNMSUNfQ01EUV9NQVhQQUdFUykKKwkJcmV0dXJuIE5VTEw7CisJcGFnZWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCVBBR0VfU0laRSwKKwkJCQkJJmNtZHFtZW0tPmRtYV9wYWdlc1tjbWRxbWVtLT5wYWdlY250XSk7CisJaWYgKCFwYWdlYWRkcikKKwkJcmV0dXJuIE5VTEw7CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwlBU1NFUlQoKCh1MzIpIHBhZ2VhZGRyICYgMHhGRkZGRjAwMCkgPT0gKHUzMikgcGFnZWFkZHIpOworI2VuZGlmCisJY21kcW1lbS0+cGFnZXNbY21kcW1lbS0+cGFnZWNudF0gPSBwYWdlYWRkcjsKKwljbWRxbWVtLT5wYWdlY250Kys7CisJcmV0dXJuIHBhZ2VhZGRyOworfQorCitzdGF0aWMgaW50IHNsaWNfY21kcV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXUzMiAqcGFnZWFkZHI7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfYWxsLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZnJlZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJbWVtc2V0KCZhZGFwdGVyLT5jbWRxX2RvbmUsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2FsbC5sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jayk7CisJc2xpY19jbWRxbWVtX2luaXQoYWRhcHRlcik7CisJYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOworCWZvciAoaSA9IDA7IGkgPCBTTElDX0NNRFFfSU5JVFBBR0VTOyBpKyspIHsKKwkJcGFnZWFkZHIgPSBzbGljX2NtZHFtZW1fYWRkcGFnZShhZGFwdGVyKTsKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCQlBU1NFUlQoKCh1MzIpIHBhZ2VhZGRyICYgMHhGRkZGRjAwMCkgPT0gKHUzMikgcGFnZWFkZHIpOworI2VuZGlmCisJCWlmICghcGFnZWFkZHIpIHsKKwkJCXNsaWNfY21kcV9mcmVlKGFkYXB0ZXIpOworCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCQl9CisJCXNsaWNfY21kcV9hZGRjbWRwYWdlKGFkYXB0ZXIsIHBhZ2VhZGRyKTsKKwl9CisJYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOworCURCR19NU0coInNsaWNvc3M6ICVzIHJlc2V0IHNsaWNfaGFuZGxlX2l4IHRvIE9ORVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQ7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBwb3J0ICVkIEZyZWVDb21tYW5kc0Zyb20gQ01EUVxuIiwKKwkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNwb3J0KTsKKwljbWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOworCXdoaWxlIChjbWQpIHsKKwkJaWYgKGNtZC0+YnVzeSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnRlbXBza2I7CisKKwkJCXRlbXBza2IgPSBjbWQtPnNrYjsKKwkJCWlmICh0ZW1wc2tiKSB7CisJCQkJY21kLT5za2IgPSBOVUxMOworCQkJCWRldl9rZnJlZV9za2JfaXJxKHRlbXBza2IpOworCQkJfQorCQl9CisJCWNtZCA9IGNtZC0+bmV4dF9hbGw7CisJfQorCW1lbXNldCgmYWRhcHRlci0+Y21kcV9hbGwsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCW1lbXNldCgmYWRhcHRlci0+Y21kcV9mcmVlLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZG9uZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJc2xpY19jbWRxbWVtX2ZyZWUoYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY21kcV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoY21kOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIG91dHN0YW5kaW5nOworCisJREJHX01TRygiJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKKwkJCWFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKKwkJCWFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmZsYWdzKTsKKwlvdXRzdGFuZGluZyA9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50IC0gYWRhcHRlci0+Y21kcV9kb25lLmNvdW50OworCW91dHN0YW5kaW5nIC09IGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudDsKKwloY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwl3aGlsZSAoaGNtZCkgeworCQlpZiAoaGNtZC0+YnVzeSkgeworCQkJc2tiID0gaGNtZC0+c2tiOworCQkJQVNTRVJUKHNrYik7CisJCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBoY21kWyVwXSBza2JbJXBdICIsIF9fZnVuY19fLAorCQkJCWhjbWQsIHNrYik7CisJCQloY21kLT5idXN5ID0gMDsKKwkJCWhjbWQtPnNrYiA9IE5VTEw7CisJCQlEQkdfTVNHKCIgRnJlZSBTS0JcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJfQorCQloY21kID0gaGNtZC0+bmV4dF9hbGw7CisJfQorCWFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCA9IDA7CisJYWRhcHRlci0+Y21kcV9mcmVlLmhlYWQgPSBOVUxMOworCWFkYXB0ZXItPmNtZHFfZnJlZS50YWlsID0gTlVMTDsKKwlhZGFwdGVyLT5jbWRxX2RvbmUuY291bnQgPSAwOworCWFkYXB0ZXItPmNtZHFfZG9uZS5oZWFkID0gTlVMTDsKKwlhZGFwdGVyLT5jbWRxX2RvbmUudGFpbCA9IE5VTEw7CisJYWRhcHRlci0+Y21kcV9mcmVlLmhlYWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOworCWhjbWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOworCXdoaWxlIChoY21kKSB7CisJCWFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCsrOworCQloY21kLT5uZXh0ID0gaGNtZC0+bmV4dF9hbGw7CisJCWhjbWQgPSBoY21kLT5uZXh0X2FsbDsKKwl9CisJaWYgKGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCAhPSBhZGFwdGVyLT5jbWRxX2FsbC5jb3VudCkgeworCQlEQkdfRVJST1IoIiVzIGZyZWVfY291bnQgJWQgIT0gYWxsIGNvdW50ICVkXG4iLCBfX2Z1bmNfXywKKwkJCSAgYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50LCBhZGFwdGVyLT5jbWRxX2FsbC5jb3VudCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Y21kcV9kb25lLmxvY2suZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOworCURCR19NU0coIiVzIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxX2FkZGNtZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcGFnZSkKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQ7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqcHJldjsKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICp0YWlsOworCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpjbWRxOworCWludCBjbWRjbnQ7CisJdm9pZCAqY21kYWRkcjsKKwl1bG9uZyBwaHlzX2FkZHI7CisJdTMyIHBoeXNfYWRkcmw7CisJdTMyIHBoeXNfYWRkcmg7CisJc3RydWN0IHNsaWNfaGFuZGxlICpwc2xpY19oYW5kbGU7CisKKwljbWRhZGRyID0gcGFnZTsKKwljbWQgPSAoc3RydWN0IHNsaWNfaG9zdGNtZCAqKWNtZGFkZHI7CisvKiAgREJHX01TRygiQ01EUSBQYWdlIGFkZHJbJXBdIGl4WyVkXSBwZnJlZVslcF1cbiIsIGNtZGFkZHIsIHNsaWNfaGFuZGxlX2l4LAorICAgIGFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyk7ICovCisJY21kY250ID0gMDsKKworCXBoeXNfYWRkciA9IHZpcnRfdG9fYnVzKCh2b2lkICopcGFnZSk7CisJcGh5c19hZGRybCA9IFNMSUNfR0VUX0FERFJfTE9XKHBoeXNfYWRkcik7CisJcGh5c19hZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2FkZHIpOworCisJcHJldiA9IE5VTEw7CisJdGFpbCA9IGNtZDsKKwl3aGlsZSAoKGNtZGNudCA8IFNMSUNfQ01EUV9DTURTSU5QQUdFKSAmJgorCSAgICAgICAoYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPCAyNTYpKSB7CisJCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgU0xJQ19IQU5ETEUgZm9yIHRoaXMgY29tbWFuZCAqLworCQlTTElDX0dFVF9TTElDX0hBTkRMRShhZGFwdGVyLCBwc2xpY19oYW5kbGUpOworCQlpZiAocHNsaWNfaGFuZGxlID09IE5VTEwpCisJCQlBU1NFUlQoMCk7CisJCUFTU0VSVChwc2xpY19oYW5kbGUgPT0KKwkJICAgICAgICZhZGFwdGVyLT5zbGljX2hhbmRsZXNbcHNsaWNfaGFuZGxlLT50b2tlbi4KKwkJCQkJICAgICAgaGFuZGxlX2luZGV4XSk7CisJCXBzbGljX2hhbmRsZS0+dHlwZSA9IFNMSUNfSEFORExFX0NNRDsKKwkJcHNsaWNfaGFuZGxlLT5hZGRyZXNzID0gKHZvaWQgKikgY21kOworCQlwc2xpY19oYW5kbGUtPm9mZnNldCA9ICh1c2hvcnQpIGFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4Kys7CisJCXBzbGljX2hhbmRsZS0+b3RoZXJfaGFuZGxlID0gTlVMTDsKKwkJcHNsaWNfaGFuZGxlLT5uZXh0ID0gTlVMTDsKKworCQljbWQtPnBzbGljX2hhbmRsZSA9IHBzbGljX2hhbmRsZTsKKwkJY21kLT5jbWQ2NC5ob3N0aGFuZGxlID0gcHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfdG9rZW47CisJCWNtZC0+YnVzeSA9IEZBTFNFOworCQljbWQtPnBhZGRybCA9IHBoeXNfYWRkcmw7CisJCWNtZC0+cGFkZHJoID0gcGh5c19hZGRyaDsKKwkJY21kLT5uZXh0X2FsbCA9IHByZXY7CisJCWNtZC0+bmV4dCA9IHByZXY7CisJCXByZXYgPSBjbWQ7CisJCXBoeXNfYWRkcmwgKz0gU0xJQ19IT1NUQ01EX1NJWkU7CisJCWNtZGFkZHIgKz0gU0xJQ19IT1NUQ01EX1NJWkU7CisKKwkJY21kID0gKHN0cnVjdCBzbGljX2hvc3RjbWQgKiljbWRhZGRyOworCQljbWRjbnQrKzsKKwl9CisKKwljbWRxID0gJmFkYXB0ZXItPmNtZHFfYWxsOworCWNtZHEtPmNvdW50ICs9IGNtZGNudDsJLyogIFNMSUNfQ01EUV9DTURTSU5QQUdFOyAgIG1vb2t0b2RvICovCisJdGFpbC0+bmV4dF9hbGwgPSBjbWRxLT5oZWFkOworCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKKwljbWRxLT5oZWFkID0gcHJldjsKKwljbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21kcS0+bG9jay5sb2NrLCBjbWRxLT5sb2NrLmZsYWdzKTsKKwljbWRxLT5jb3VudCArPSBjbWRjbnQ7CS8qICBTTElDX0NNRFFfQ01EU0lOUEFHRTsgICBtb29rdG9kbyAqLworCXRhaWwtPm5leHQgPSBjbWRxLT5oZWFkOworCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKKwljbWRxLT5oZWFkID0gcHJldjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHNsaWNfaG9zdGNtZCAqc2xpY19jbWRxX2dldGZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfY21kcXVldWUgKmNtZHEgPSAmYWRhcHRlci0+Y21kcV9mcmVlOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZCA9IE5VTEw7CisKK2xvY2tfYW5kX3JldHJ5OgorCXNwaW5fbG9ja19pcnFzYXZlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOworcmV0cnk6CisJY21kID0gY21kcS0+aGVhZDsKKwlpZiAoY21kKSB7CisJCWNtZHEtPmhlYWQgPSBjbWQtPm5leHQ7CisJCWNtZHEtPmNvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZHEtPmxvY2subG9jaywgY21kcS0+bG9jay5mbGFncyk7CisJfSBlbHNlIHsKKwkJc2xpY19jbWRxX2dldGRvbmUoYWRhcHRlcik7CisJCWNtZCA9IGNtZHEtPmhlYWQ7CisJCWlmIChjbWQpIHsKKwkJCWdvdG8gcmV0cnk7CisJCX0gZWxzZSB7CisJCQl1MzIgKnBhZ2VhZGRyOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWRxLT5sb2NrLmxvY2ssCisJCQkJCQljbWRxLT5sb2NrLmZsYWdzKTsKKwkJCXBhZ2VhZGRyID0gc2xpY19jbWRxbWVtX2FkZHBhZ2UoYWRhcHRlcik7CisJCQlpZiAocGFnZWFkZHIpIHsKKwkJCQlzbGljX2NtZHFfYWRkY21kcGFnZShhZGFwdGVyLCBwYWdlYWRkcik7CisJCQkJZ290byBsb2NrX2FuZF9yZXRyeTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gY21kOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqZG9uZV9jbWRxID0gJmFkYXB0ZXItPmNtZHFfZG9uZTsKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqZnJlZV9jbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKKworCUFTU0VSVChmcmVlX2NtZHEtPmhlYWQgPT0gTlVMTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbmVfY21kcS0+bG9jay5sb2NrLCBkb25lX2NtZHEtPmxvY2suZmxhZ3MpOworCUFTU0VSVChWQUxJRF9BRERSRVNTKGRvbmVfY21kcS0+aGVhZCkpOworCisJZnJlZV9jbWRxLT5oZWFkID0gZG9uZV9jbWRxLT5oZWFkOworCWZyZWVfY21kcS0+Y291bnQgPSBkb25lX2NtZHEtPmNvdW50OworCWRvbmVfY21kcS0+aGVhZCA9IE5VTEw7CisJZG9uZV9jbWRxLT50YWlsID0gTlVMTDsKKwlkb25lX2NtZHEtPmNvdW50ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb25lX2NtZHEtPmxvY2subG9jaywgZG9uZV9jbWRxLT5sb2NrLmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxX3B1dGRvbmVfaXJxKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqY21kcSA9ICZhZGFwdGVyLT5jbWRxX2RvbmU7CisKKwlzcGluX2xvY2soJmNtZHEtPmxvY2subG9jayk7CisJY21kLT5idXN5ID0gMDsKKwlBU1NFUlQoVkFMSURfQUREUkVTUyhjbWRxLT5oZWFkKSk7CisJY21kLT5uZXh0ID0gY21kcS0+aGVhZDsKKwlBU1NFUlQoVkFMSURfQUREUkVTUyhjbWQpKTsKKwljbWRxLT5oZWFkID0gY21kOworCWNtZHEtPmNvdW50Kys7CisJaWYgKChhZGFwdGVyLT54bWl0cV9mdWxsKSAmJiAoY21kcS0+Y291bnQgPiAxMCkpCisJCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwlzcGluX3VubG9jaygmY21kcS0+bG9jay5sb2NrKTsKK30KKworc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGNvdW50OworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCisJREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7CisJcmN2cS0+dGFpbCA9IE5VTEw7CisJcmN2cS0+aGVhZCA9IE5VTEw7CisJcmN2cS0+c2l6ZSA9IFNMSUNfUkNWUV9FTlRSSUVTOworCXJjdnEtPmVycm9ycyA9IDA7CisJcmN2cS0+Y291bnQgPSAwOworCWkgPSAoU0xJQ19SQ1ZRX0VOVFJJRVMgLyBTTElDX1JDVlFfRklMTEVOVFJJRVMpOworCWNvdW50ID0gMDsKKwl3aGlsZSAoaSkgeworCQljb3VudCArPSBzbGljX3JjdnF1ZXVlX2ZpbGwoYWRhcHRlcik7CisJCWktLTsKKwl9CisJaWYgKHJjdnEtPmNvdW50IDwgU0xJQ19SQ1ZRX01JTkVOVFJJRVMpIHsKKwkJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOworCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJfQorCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCUFTU0VSVChyY3ZxKTsKKworCURCR19NU0coInNsaWNvc3M6IE5vdGhpbmcgdG8gZG8uIHJjdnFbJXBdXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50WyV4XVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkWyVwXVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsWyVwXVxuIiwKKwkJcmN2cSwgcmN2cS0+Y291bnQsIHJjdnEtPmhlYWQsIHJjdnEtPnRhaWwpOworCisJREJHX01TRygic2xpY29zczogJXMgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgc2xpY19yY3ZxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3aGlsZSAocmN2cS0+aGVhZCkgeworCQlza2IgPSByY3ZxLT5oZWFkOworCQlyY3ZxLT5oZWFkID0gcmN2cS0+aGVhZC0+bmV4dDsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKwlyY3ZxLT50YWlsID0gTlVMTDsKKwlyY3ZxLT5oZWFkID0gTlVMTDsKKwlyY3ZxLT5jb3VudCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2xpY19yY3ZxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWY7CisJaW50IGNvdW50OworCisJaWYgKHJjdnEtPmNvdW50KSB7CisJCXNrYiA9IHJjdnEtPmhlYWQ7CisJCXJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7CisJCUFTU0VSVChyY3ZidWYpOworCisJCWlmIChyY3ZidWYtPnN0YXR1cyAmIElSSEREUl9TVkFMSUQpIHsKKwkJCXJjdnEtPmhlYWQgPSByY3ZxLT5oZWFkLT5uZXh0OworCQkJc2tiLT5uZXh0ID0gTlVMTDsKKwkJCXJjdnEtPmNvdW50LS07CisJCX0gZWxzZSB7CisJCQlza2IgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJREJHX0VSUk9SKCJSY3ZRIEVtcHR5ISEgYWRhcHRlclslcF0gcmN2cVslcF0gY291bnRbJXhdXG4iLAorCQkJICBhZGFwdGVyLCByY3ZxLCByY3ZxLT5jb3VudCk7CisJCXNrYiA9IE5VTEw7CisJfQorCXdoaWxlIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9GSUxMVEhSRVNIKSB7CisJCWNvdW50ID0gc2xpY19yY3ZxdWV1ZV9maWxsKGFkYXB0ZXIpOworCQlpZiAoIWNvdW50KQorCQkJYnJlYWs7CisJfQorCWlmIChza2IpCisJCXJjdnEtPmVycm9ycyA9IDA7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2ZpbGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdm9pZCAqcGFkZHI7CisJdTMyIHBhZGRybDsKKwl1MzIgcGFkZHJoOworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCWludCBpID0gMDsKKworCXdoaWxlIChpIDwgU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKSB7CisJCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworI2lmZGVmIEtMVURHRV9GT1JfNEdCX0JPVU5EQVJZCityZXRyeV9yY3ZxZmlsbDoKKyNlbmRpZgorCQlza2IgPSBhbGxvY19za2IoU0xJQ19SQ1ZRX1JDVkJVRlNJWkUsIEdGUF9BVE9NSUMpOworCQlpZiAoc2tiKSB7CisJCQlwYWRkciA9ICh2b2lkICopcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkJCSAgc2tiLT5kYXRhLAorCQkJCQkJCSAgU0xJQ19SQ1ZRX1JDVkJVRlNJWkUsCisJCQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGFkZHJsID0gU0xJQ19HRVRfQUREUl9MT1cocGFkZHIpOworCQkJcGFkZHJoID0gU0xJQ19HRVRfQUREUl9ISUdIKHBhZGRyKTsKKworCQkJc2tiLT5sZW4gPSBTTElDX1JDVkJVRl9IRUFEU0laRTsKKwkJCXJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7CisJCQlyY3ZidWYtPnN0YXR1cyA9IDA7CisJCQlza2ItPm5leHQgPSBOVUxMOworI2lmZGVmIEtMVURHRV9GT1JfNEdCX0JPVU5EQVJZCisJCQlpZiAocGFkZHJsID09IDApIHsKKwkJCQlEQkdfRVJST1IKKwkJCQkgICAgKCIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDAgIgorCQkJCSAgICAgInNrYlslcF0gICBQUk9CTEVNXG4iCisJCQkJICAgICAiICAgICAgICAgc2tiZGF0YVslcF1cbiIKKwkJCQkgICAgICIgICAgICAgICBza2JsZW5bJXhdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJbJXBdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJsWyV4XVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIF9fZnVuY19fLCBza2IsCisJCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuLCBwYWRkciwgcGFkZHJsLAorCQkJCSAgICAgcGFkZHJoKTsKKwkJCQlEQkdfRVJST1IoIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iCisJCQkJCSAgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iCisJCQkJCSAgIiAgICAgICAgIHJjdnEtPmNvdW50WyV4XVxuIiwKKwkJCQkJICByY3ZxLT5oZWFkLCByY3ZxLT50YWlsLCByY3ZxLT5jb3VudCk7CisJCQkJREJHX0VSUk9SKCJTS0lQIFRISVMgU0tCISEhISEhISFcbiIpOworCQkJCWdvdG8gcmV0cnlfcmN2cWZpbGw7CisJCQl9CisjZWxzZQorCQkJaWYgKHBhZGRybCA9PSAwKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiXG5cbiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCAiCisJCQkJICAgICAic2tiWyVwXSAgR0lWRSBUTyBDQVJEIEFOWVdBWVxuIgorCQkJCSAgICAgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJbJXBdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJsWyV4XVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIF9fZnVuY19fLCBza2IsCisJCQkJICAgICBza2ItPmRhdGEsIHBhZGRyLCBwYWRkcmwsIHBhZGRyaCk7CisJCQl9CisjZW5kaWYKKwkJCWlmIChwYWRkcmggPT0gMCkgeworCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwKKwkJCQkJICAodTMyKSBwYWRkcmwsIERPTlRfRkxVU0gpOworCQkJfSBlbHNlIHsKKwkJCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXI2NCwKKwkJCQkJICAgICh1MzIpIHBhZGRybCwKKwkJCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCQkgICAgKHUzMikgcGFkZHJoLCBET05UX0ZMVVNIKTsKKwkJCX0KKwkJCWlmIChyY3ZxLT5oZWFkKQorCQkJCXJjdnEtPnRhaWwtPm5leHQgPSBza2I7CisJCQllbHNlCisJCQkJcmN2cS0+aGVhZCA9IHNrYjsKKwkJCXJjdnEtPnRhaWwgPSBza2I7CisJCQlyY3ZxLT5jb3VudCsrOworCQkJaSsrOworCQl9IGVsc2UgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCIlcyBzbGljX3JjdnF1ZXVlX2ZpbGwgY291bGQgb25seSBnZXQgWyVkXSAiCisJCQkgICAgICJza2J1ZmZzXG4iLAorCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGkpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19yY3ZxdWV1ZV9yZWluc2VydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKwl2b2lkICpwYWRkcjsKKwl1MzIgcGFkZHJsOworCXUzMiBwYWRkcmg7CisJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCisJQVNTRVJUKHNrYi0+bGVuID09IFNMSUNfUkNWQlVGX0hFQURTSVpFKTsKKworCXBhZGRyID0gKHZvaWQgKilwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsIHNrYi0+aGVhZCwKKwkJCQkgIFNMSUNfUkNWUV9SQ1ZCVUZTSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXJjdmJ1Zi0+c3RhdHVzID0gMDsKKwlza2ItPm5leHQgPSBOVUxMOworCisJcGFkZHJsID0gU0xJQ19HRVRfQUREUl9MT1cocGFkZHIpOworCXBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwYWRkcik7CisKKwlpZiAocGFkZHJsID09IDApIHsKKwkJREJHX0VSUk9SCisJCSAgICAoIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCBza2JbJXBdICAgUFJPQkxFTVxuIgorCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIiAiICAgICAgICAgc2tibGVuWyV4XVxuIgorCQkgICAgICIgICAgICAgICBwYWRkclslcF1cbiIgIiAgICAgICAgIHBhZGRybFsleF1cbiIKKwkJICAgICAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgX19mdW5jX18sIHNrYiwgc2tiLT5kYXRhLAorCQkgICAgIHNrYi0+bGVuLCBwYWRkciwgcGFkZHJsLCBwYWRkcmgpOworCQlEQkdfRVJST1IoIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iCisJCQkgICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIgorCQkJICAiICAgICAgICAgcmN2cS0+Y291bnRbJXhdXG4iLCByY3ZxLT5oZWFkLCByY3ZxLT50YWlsLAorCQkJICByY3ZxLT5jb3VudCk7CisJfQorCWlmIChwYWRkcmggPT0gMCkgeworCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXIsICh1MzIpIHBhZGRybCwKKwkJCSAgRE9OVF9GTFVTSCk7CisJfSBlbHNlIHsKKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhcjY0LAorCQkJICAgIHBhZGRybCwKKwkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCSAgICBwYWRkcmgsIERPTlRfRkxVU0gpOworCX0KKwlpZiAocmN2cS0+aGVhZCkKKwkJcmN2cS0+dGFpbC0+bmV4dCA9IHNrYjsKKwllbHNlCisJCXJjdnEtPmhlYWQgPSBza2I7CisJcmN2cS0+dGFpbCA9IHNrYjsKKwlyY3ZxLT5jb3VudCsrOworCXJldHVybiByY3ZxLT5jb3VudDsKK30KKworc3RhdGljIGludCBzbGljX2RlYnVnX2NhcmRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKyNpZmRlZiBNT09LVE9ETworCWludCBpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2xpY19jb25maWcgKmNvbmZpZyA9ICZjYXJkLT5jb25maWc7CisJdW5zaWduZWQgY2hhciAqZnJ1ID0gKHVuc2lnbmVkIGNoYXIgKikoJmNhcmQtPmNvbmZpZy5hdGtfZnJ1KTsKKwl1bnNpZ25lZCBjaGFyICpvZW1mcnUgPSAodW5zaWduZWQgY2hhciAqKSgmY2FyZC0+Y29uZmlnLk9lbUZydSk7CisjZW5kaWYKKworCXNlcV9wcmludGYoc2VxLCAiZHJpdmVyX3ZlcnNpb24gICAgICAgICAgIDogJXMiLCBzbGljX3Byb2NfdmVyc2lvbik7CisJc2VxX3ByaW50ZihzZXEsICJNaWNyb2NvZGUgdmVyc2lvbnM6ICAgICAgICAgICBcbiIpOworCXNlcV9wcmludGYoc2VxLCAiICAgIEdpZ2FiaXQgKGdiKSAgICAgICAgIDogJXMgJXNcbiIsCisJCSAgICBNT0pBVkVfVUNPREVfVkVSU19TVFJJTkcsIE1PSkFWRV9VQ09ERV9WRVJTX0RBVEUpOworCXNlcV9wcmludGYoc2VxLCAiICAgIEdpZ2FiaXQgUmVjZWl2ZXIgICAgIDogJXMgJXNcbiIsCisJCSAgICBHQl9SQ1ZVQ09ERV9WRVJTX1NUUklORywgR0JfUkNWVUNPREVfVkVSU19EQVRFKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlZlbmRvciAgICAgICAgICAgICAgICAgICA6ICVzXG4iLCBzbGljX3ZlbmRvcik7CisJc2VxX3ByaW50ZihzZXEsICJQcm9kdWN0IE5hbWUgICAgICAgICAgICAgOiAlc1xuIiwgc2xpY19wcm9kdWN0X25hbWUpOworI2lmZGVmIE1PT0tUT0RPCisJc2VxX3ByaW50ZihzZXEsICJWZW5kb3JJZCAgICAgICAgICAgICAgICAgOiAlNC40WFxuIiwKKwkJICAgIGNvbmZpZy0+VmVuZG9ySWQpOworCXNlcV9wcmludGYoc2VxLCAiRGV2aWNlSWQgICAgICAgICAgICAgICAgIDogJTQuNFhcbiIsCisJCSAgICBjb25maWctPkRldmljZUlkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlJldmlzaW9uSWQgICAgICAgICAgICAgICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5SZXZpc2lvbklkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkJ1cyAgICAjICAgICAgICAgICAgICAgICA6ICVkXG4iLCBjYXJkLT5idXNudW1iZXIpOworCXNlcV9wcmludGYoc2VxLCAiRGV2aWNlICMgICAgICAgICAgICAgICAgIDogJWRcbiIsIGNhcmQtPnNsb3RudW1iZXIpOworCXNlcV9wcmludGYoc2VxLCAiSW50ZXJmYWNlcyAgICAgICAgICAgICAgIDogJWRcbiIsIGNhcmQtPmNhcmRfc2l6ZSk7CisJc2VxX3ByaW50ZihzZXEsICIgICAgIEluaXRpYWxpemVkICAgICAgICAgOiAlZFxuIiwKKwkJICAgIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCk7CisJc2VxX3ByaW50ZihzZXEsICIgICAgIEFsbG9jYXRlZCAgICAgICAgICAgOiAlZFxuIiwKKwkJICAgIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJQVNTRVJUKGNhcmQtPmNhcmRfc2l6ZSA8PSBTTElDX05CUl9NQUNTKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKKwkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAiICAgICBNQUMlZCA6ICUyLjJYICUyLjJYICUyLjJYICUyLjJYICUyLjJYICUyLjJYXG4iLAorCQkJICAgaSwgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzBdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzFdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzJdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzNdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzRdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzVdKTsKKwl9CisJc2VxX3ByaW50ZihzZXEsICIgICAgIElGICBJbml0IFN0YXRlIER1cGxleC9TcGVlZCBpcnFcbiIpOworCXNlcV9wcmludGYoc2VxLCAiICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkOyBpKyspIHsKKwkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CisKKwkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07CisJCWlmIChhZGFwdGVyKSB7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICAgJWQgICAlZCAgICVzICAlcyAgJXMgICAgMHglWFxuIiwKKwkJCQkgICAgYWRhcHRlci0+cGh5c3BvcnQsIGFkYXB0ZXItPnN0YXRlLAorCQkJCSAgICBTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpLAorCQkJCSAgICBTTElDX0RVUExFWChhZGFwdGVyLT5saW5rZHVwbGV4KSwKKwkJCQkgICAgU0xJQ19TUEVFRChhZGFwdGVyLT5saW5rc3BlZWQpLAorCQkJCSAgICAodWludCkgYWRhcHRlci0+aXJxKTsKKwkJfQorCX0KKwlzZXFfcHJpbnRmKHNlcSwgIkdlbmVyYXRpb24gIyAgICAgICAgICAgICA6ICU0LjRYXG4iLCBjYXJkLT5nZW5udW1iZXIpOworCXNlcV9wcmludGYoc2VxLCAiUmN2USBtYXggZW50cmllcyAgICAgICAgIDogJTQuNFhcbiIsCisJCSAgICBTTElDX1JDVlFfRU5UUklFUyk7CisJc2VxX3ByaW50ZihzZXEsICJQaW5nIFN0YXR1cyAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJICAgIGNhcmQtPnBpbmdzdGF0dXMpOworCXNlcV9wcmludGYoc2VxLCAiTWluaW11bSBncmFudCAgICAgICAgICAgIDogJTIuMnhcbiIsCisJCSAgICBjb25maWctPk1pbkdyYW50KTsKKwlzZXFfcHJpbnRmKHNlcSwgIk1heGltdW0gTGF0ZW5jeSAgICAgICAgICA6ICUyLjJ4XG4iLCBjb25maWctPk1heExhdCk7CisJc2VxX3ByaW50ZihzZXEsICJQY2lTdGF0dXMgICAgICAgICAgICAgICAgOiAlNC40eFxuIiwKKwkJICAgIGNvbmZpZy0+UGNpc3RhdHVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkRlYnVnIERldmljZSBJZCAgICAgICAgICA6ICU0LjR4XG4iLAorCQkgICAgY29uZmlnLT5EYmdEZXZJZCk7CisJc2VxX3ByaW50ZihzZXEsICJEUkFNIFJPTSBGdW5jdGlvbiAgICAgICAgOiAlNC40eFxuIiwKKwkJICAgIGNvbmZpZy0+RHJhbVJvbUZuKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk5ldHdvcmsgaW50ZXJmYWNlIFBpbiAxICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5OZXRJbnRQaW4xKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk5ldHdvcmsgaW50ZXJmYWNlIFBpbiAyICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5OZXRJbnRQaW4xKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk5ldHdvcmsgaW50ZXJmYWNlIFBpbiAzICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5OZXRJbnRQaW4xKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlBNIGNhcGFiaWxpdGllcyAgICAgICAgICA6ICU0LjRYXG4iLAorCQkgICAgY29uZmlnLT5QTUVDYXBhYik7CisJc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIENsb2NrIENvbnRyb2xzICAgOiAlNC40WFxuIiwKKwkJICAgIGNvbmZpZy0+TndDbGtDdHJscyk7CisKKwlzd2l0Y2ggKGNvbmZpZy0+RnJ1Rm9ybWF0KSB7CisJY2FzZSBBVEtfRlJVX0ZPUk1BVDoKKwkJeworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAgIlZlbmRvciAgICAgICAgICAgICAgICAgICA6IEFsYWNyaXRlY2gsIEluYy5cbiIpOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAgIkFzc2VtYmx5ICMgICAgICAgICAgICAgICA6ICVjJWMlYyVjJWMlY1xuIiwKKwkJCQkgICAgZnJ1WzBdLCBmcnVbMV0sIGZydVsyXSwgZnJ1WzNdLCBmcnVbNF0sCisJCQkJICAgIGZydVs1XSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIlJldmlzaW9uICMgICAgICAgICAgICAgICA6ICVjJWNcbiIsCisJCQkJICAgIGZydVs2XSwgZnJ1WzddKTsKKworCQkJaWYgKGNvbmZpZy0+T0VNRnJ1Rm9ybWF0ID09IFZFTkRPUjRfRlJVX0ZPUk1BVCkgeworCQkJCXNlcV9wcmludGYoc2VxLAorCQkJCQkgICAgIlNlcmlhbCAgICMgICAgICAgICAgICAgICA6ICIKKwkJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjJWMlYyVjJWNcbiIsCisJCQkJCSAgICBmcnVbOF0sIGZydVs5XSwgZnJ1WzEwXSwKKwkJCQkJICAgIGZydVsxMV0sIGZydVsxMl0sIGZydVsxM10sCisJCQkJCSAgICBmcnVbMTZdLCBmcnVbMTddLCBmcnVbMThdLAorCQkJCQkgICAgZnJ1WzE5XSwgZnJ1WzIwXSwgZnJ1WzIxXSk7CisJCQl9IGVsc2UgeworCQkJCXNlcV9wcmludGYoc2VxLAorCQkJCQkgICAgIlNlcmlhbCAgICMgICAgICAgICAgICAgICA6ICIKKwkJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCQkgICAgZnJ1WzhdLCBmcnVbOV0sIGZydVsxMF0sCisJCQkJCSAgICBmcnVbMTFdLCBmcnVbMTJdLCBmcnVbMTNdLAorCQkJCQkgICAgZnJ1WzE0XSwgZnJ1WzE1XSwgZnJ1WzE2XSwKKwkJCQkJICAgIGZydVsxN10sIGZydVsxOF0sIGZydVsxOV0sCisJCQkJCSAgICBmcnVbMjBdLCBmcnVbMjFdKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICAiVmVuZG9yICAgICAgICAgICAgICAgICAgIDogQWxhY3JpdGVjaCwgSW5jLlxuIik7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICAiU2VyaWFsICAgIyAgICAgICAgICAgICAgIDogRW1wdHkgRlJVXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3dpdGNoIChjb25maWctPk9FTUZydUZvcm1hdCkgeworCWNhc2UgVkVORE9SMV9GUlVfRk9STUFUOgorCQl7CisJCQlzZXFfcHJpbnRmKHNlcSwgIkZSVSBJbmZvcm1hdGlvbjpcbiIpOworCQkJc2VxX3ByaW50ZihzZXEsICIgICAgQ29tbW9kaXR5ICMgICAgICAgICAgOiAlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzBdKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIEFzc2VtYmx5ICMgICAgICAgICAgIDogJWMlYyVjJWNcbiIsCisJCQkJICAgIG9lbWZydVsxXSwgb2VtZnJ1WzJdLCBvZW1mcnVbM10sIG9lbWZydVs0XSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBSZXZpc2lvbiAjICAgICAgICAgICA6ICVjJWNcbiIsCisJCQkJICAgIG9lbWZydVs1XSwgb2VtZnJ1WzZdKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIFN1cHBsaWVyICMgICAgICAgICAgIDogJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzddLCBvZW1mcnVbOF0pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgRGF0ZSAgICAgICAgICAgICAgICAgOiAlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbOV0sIG9lbWZydVsxMF0pOworCQkJc2VxX3NwcmludGYoc2VxLAorCQkJCSAgICAiICAgIFNlcXVlbmNlICMgICAgICAgICAgIDogJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbMTFdLCBvZW1mcnVbMTJdLCBvZW1mcnVbMTNdKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZFTkRPUjJfRlJVX0ZPUk1BVDoKKwkJeworCQkJc2VxX3ByaW50ZihzZXEsICJGUlUgSW5mb3JtYXRpb246XG4iKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIFBhcnQgICAgICMgICAgICAgICAgIDogIgorCQkJCSAgICAiJWMlYyVjJWMlYyVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzBdLCBvZW1mcnVbMV0sIG9lbWZydVsyXSwKKwkJCQkgICAgb2VtZnJ1WzNdLCBvZW1mcnVbNF0sIG9lbWZydVs1XSwKKwkJCQkgICAgb2VtZnJ1WzZdLCBvZW1mcnVbN10pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgU3VwcGxpZXIgIyAgICAgICAgICAgOiAlYyVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbOF0sIG9lbWZydVs5XSwgb2VtZnJ1WzEwXSwKKwkJCQkgICAgb2VtZnJ1WzExXSwgb2VtZnJ1WzEyXSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBEYXRlICAgICAgICAgICAgICAgICA6ICVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzEzXSwgb2VtZnJ1WzE0XSwgb2VtZnJ1WzE1XSk7CisJCQlzZXFfc3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgU2VxdWVuY2UgIyAgICAgICAgICAgOiAlYyVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzE2XSwgb2VtZnJ1WzE3XSwgb2VtZnJ1WzE4XSwKKwkJCQkgICAgb2VtZnJ1WzE5XSk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWRU5ET1IzX0ZSVV9GT1JNQVQ6CisJCXsKKwkJCXNlcV9wcmludGYoc2VxLCAiRlJVIEluZm9ybWF0aW9uOlxuIik7CisJCX0KKworCWNhc2UgVkVORE9SNF9GUlVfRk9STUFUOgorCQl7CisJCQlzZXFfcHJpbnRmKHNlcSwgIkZSVSBJbmZvcm1hdGlvbjpcbiIpOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgRlJVIE51bWJlciAgICAgICAgICAgOiAiCisJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbMF0sIG9lbWZydVsxXSwgb2VtZnJ1WzJdLAorCQkJCSAgICBvZW1mcnVbM10sIG9lbWZydVs0XSwgb2VtZnJ1WzVdLAorCQkJCSAgICBvZW1mcnVbNl0sIG9lbWZydVs3XSk7CisJCQlzZXFfc3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgUGFydCBOdW1iZXIgICAgICAgICAgOiAiCisJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbOF0sIG9lbWZydVs5XSwgb2VtZnJ1WzEwXSwKKwkJCQkgICAgb2VtZnJ1WzExXSwgb2VtZnJ1WzEyXSwgb2VtZnJ1WzEzXSwKKwkJCQkgICAgb2VtZnJ1WzE0XSwgb2VtZnJ1WzE1XSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBFQyBMZXZlbCAgICAgICAgICAgICA6ICIKKwkJCQkgICAgIiVjJWMlYyVjJWMlYyVjJWNcbiIsCisJCQkJICAgIG9lbWZydVsxNl0sIG9lbWZydVsxN10sIG9lbWZydVsxOF0sCisJCQkJICAgIG9lbWZydVsxOV0sIG9lbWZydVsyMF0sIG9lbWZydVsyMV0sCisJCQkJICAgIG9lbWZydVsyMl0sIG9lbWZydVsyM10pOworCQkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19kZWJ1Z19hZGFwdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZXEtPnByaXZhdGU7CisKKwlpZiAoKGFkYXB0ZXItPm5ldGRldikgJiYgKGFkYXB0ZXItPm5ldGRldi0+bmFtZSkpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBpbnRlcmZhY2UgICAgICAgICAgOiAlc1xuIiwKKwkJCSAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCX0KKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IHN0YXR1cyAgICAgICAgICAgICA6ICVzXG4iLAorCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpKTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IHBvcnQgICAgICAgICAgICAgICA6ICVkXG4iLAorCQlhZGFwdGVyLT5waHlzcG9ydCk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBzcGVlZCAgICAgICAgICAgICAgOiAlc1xuIiwKKwkJU0xJQ19TUEVFRChhZGFwdGVyLT5saW5rc3BlZWQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IGR1cGxleCAgICAgICAgICAgICA6ICVzXG4iLAorCQlTTElDX0RVUExFWChhZGFwdGVyLT5saW5rZHVwbGV4KSk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBpcnEgICAgICAgICAgICAgICAgOiAweCVYXG4iLAorCQkodWludCkgYWRhcHRlci0+aXJxKTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IEludGVycnVwdCBBZ2cgRGVsYXk6ICVkIHVzZWNcbiIsCisJCWFkYXB0ZXItPmNhcmQtPmxvYWRsZXZlbF9jdXJyZW50KTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IFJjdlEgbWF4IGVudHJpZXMgICA6ICU0LjRYXG4iLAorCQlTTElDX1JDVlFfRU5UUklFUyk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBSY3ZRIGN1cnJlbnQgICAgICAgOiAlNC40WFxuIiwKKwkJICAgIGFkYXB0ZXItPnJjdnF1ZXVlLmNvdW50KTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBwYWNrZXRzICAgICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCisJCSAgICBhZGFwdGVyLT5zdGF0cy5yeF9wYWNrZXRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBieXRlcyAgICAgICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCisJCSAgICBhZGFwdGVyLT5zdGF0cy5yeF9ieXRlcyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogYnJvYWRjYXN0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICBhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogbXVsdGljYXN0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICBhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogdW5pY2FzdHMgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICBhZGFwdGVyLT5yY3ZfdW5pY2FzdHMpOworCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGVycm9ycyAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkgICAgKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZXJyb3JzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBNaXNzZWQgZXJyb3JzICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJICAgICh1MzIpIGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Rpc2NhcmRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBkcm9wcyAgICAgICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCSh1MzIpIGFkYXB0ZXItPnJjdl9kcm9wcyk7CisJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogcGFja2V0cyAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAorCQkJYWRhcHRlci0+c3RhdHMudHhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogYnl0ZXMgICAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAorCQkJYWRhcHRlci0+c3RhdHMudHhfYnl0ZXMpOworCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGVycm9ycyAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bXRfZXJyb3JzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBtdWx0aWNhc3RzICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCisJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QpOworCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGNvbGxpc2lvbiBlcnJvcnMgICAgICAgICA6ICU4LjhYXG4iLAorCQkJKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bWl0X2NvbGxpc2lvbnMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogTWF4IHJjdiBmcmFtZXMvaXNyICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+bWF4X2lzcl9yY3ZzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IFJjdiBpbnRlcnJ1cHQgeWllbGRzICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRfeWllbGRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IE1heCB4bWl0IGNvbXBsZXRlL2lzciAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPm1heF9pc3JfeG1pdHMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogZXJyb3IgaW50ZXJydXB0cyAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+ZXJyb3JfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBlcnJvciBybWlzcyBpbnRlcnJ1cHRzICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5lcnJvcl9ybWlzc19pbnRlcnJ1cHRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IHJjdiBpbnRlcnJ1cHRzICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IHhtaXQgaW50ZXJydXB0cyAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPnhtaXRfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBsaW5rIGV2ZW50IGludGVycnVwdHMgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBVUFIgaW50ZXJydXB0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBpbnRlcnJ1cHQgY291bnQgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5udW1faXNycyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBmYWxzZSBpbnRlcnJ1cHRzICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5mYWxzZV9pbnRlcnJ1cHRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IEFsbCByZWdpc3RlciB3cml0ZXMgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IElDUiByZWdpc3RlciB3cml0ZXMgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmljcl9yZWdfd3JpdGVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IElTUiByZWdpc3RlciB3cml0ZXMgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlzcl9yZWdfd3JpdGVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBvdmVyZmxvdyA4MDIgZXJyb3JzICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMik7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogdHJhbnNwb3J0IG92ZXJmbG93IGVycm9yczogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBydG9mbG93KTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiB1bmRlcmZsb3cgZXJyb3JzICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy51ZmxvdzgwMik7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogcmVjZWl2ZSBlYXJseSAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMucmN2ZWFybHkpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IGJ1ZmZlciBvdmVyZmxvd3MgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkJ1Zm92KTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBjYXJyaWVyIGVycm9ycyAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DYXJyZSk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogTG9uZyAgICAgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuTG9uZ2UpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IGludmFsaWQgcHJlYW1ibGVzICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkludnApOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IENSQyBlcnJvcnMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNyYyk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogZHJpYmJsZSBuaWJibGVzICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuRHJibCk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogQ29kZSB2aW9sYXRpb25zICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogVENQIGNoZWNrc3VtIGVycm9ycyAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBDc3VtKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBUQ1AgaGVhZGVyIHNob3J0IGVycm9ycyAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcEhsZW4pOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IElQIGNoZWNrc3VtIGVycm9ycyAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogSVAgZnJhbWUgaW5jb21wbGV0ZXMgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBMZW4pOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IElQIGhlYWRlcnMgc2hvcnRzICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwSGxlbik7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc2xpY19kZWJ1Z19hZGFwdGVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNsaWNfZGVidWdfYWRhcHRlcl9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGludCBzbGljX2RlYnVnX2NhcmRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2xpY19kZWJ1Z19jYXJkX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbGljX2RlYnVnX2FkYXB0ZXJfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc2xpY19kZWJ1Z19hZGFwdGVyX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNsaWNfZGVidWdfY2FyZF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzbGljX2RlYnVnX2NhcmRfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWNoYXIgICAgbmFtZVs3XTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJaWYgKCFjYXJkLT5kZWJ1Z2ZzX2RpcikKKwkJcmV0dXJuOworCisJc3ByaW50ZihuYW1lLCAicG9ydCVkIiwgYWRhcHRlci0+cG9ydCk7CisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JUlVHTywKKwkJCQljYXJkLT5kZWJ1Z2ZzX2RpciwgYWRhcHRlciwKKwkJCQkmc2xpY19kZWJ1Z19hZGFwdGVyX2ZvcHMpOworCWlmICghZCB8fCBJU19FUlIoZCkpCisJCXByX2luZm8oUEZYICIlczogZGVidWdmcyBjcmVhdGUgZmFpbGVkXG4iLCBuYW1lKTsKKwllbHNlCisJCWFkYXB0ZXItPmRlYnVnZnNfZW50cnkgPSBkOworfQorCitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2FkYXB0ZXJfZGVzdHJveShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+ZGVidWdmc19lbnRyeSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5KTsKKwkJYWRhcHRlci0+ZGVidWdmc19lbnRyeSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfY3JlYXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWNoYXIgICAgbmFtZVtJRk5BTVNJWl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJzbGljJWQiLCBjYXJkLT5jYXJkbnVtKTsKKwlkID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHNsaWNfZGVidWdmcyk7CisJaWYgKCFkIHx8IElTX0VSUihkKSkKKwkJcHJfaW5mbyhQRlggIiVzOiBkZWJ1Z2ZzIGNyZWF0ZSBkaXIgZmFpbGVkXG4iLAorCQkJCW5hbWUpOworCWVsc2UgeworCQljYXJkLT5kZWJ1Z2ZzX2RpciA9IGQ7CisJCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjYXJkaW5mbyIsIFNfSVJVR08sCisJCQkJc2xpY19kZWJ1Z2ZzLCBjYXJkLAorCQkJCSZzbGljX2RlYnVnX2NhcmRfZm9wcyk7CisJCWlmICghZCB8fCBJU19FUlIoZCkpCisJCQlwcl9pbmZvKFBGWCAiJXM6IGRlYnVnZnMgY3JlYXRlIGZhaWxlZFxuIiwKKwkJCQkJbmFtZSk7CisJCWVsc2UKKwkJCWNhcmQtPmRlYnVnZnNfY2FyZGluZm8gPSBkOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koc3RydWN0IHNsaWNjYXJkICpjYXJkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCisJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOworCQlpZiAoYWRhcHRlcikKKwkJCXNsaWNfZGVidWdfYWRhcHRlcl9kZXN0cm95KGFkYXB0ZXIpOworCX0KKwlpZiAoY2FyZC0+ZGVidWdmc19jYXJkaW5mbykgeworCQlkZWJ1Z2ZzX3JlbW92ZShjYXJkLT5kZWJ1Z2ZzX2NhcmRpbmZvKTsKKwkJY2FyZC0+ZGVidWdmc19jYXJkaW5mbyA9IE5VTEw7CisJfQorCWlmIChjYXJkLT5kZWJ1Z2ZzX2RpcikgeworCQlkZWJ1Z2ZzX3JlbW92ZShjYXJkLT5kZWJ1Z2ZzX2Rpcik7CisJCWNhcmQtPmRlYnVnZnNfZGlyID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmVudDsKKworCWVudCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2xpYyIsIE5VTEwpOworCWlmICghZW50IHx8IElTX0VSUihlbnQpKSB7CisJCXByX2luZm8oUEZYICJkZWJ1Z2ZzIGNyZWF0ZSBkaXJlY3RvcnkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNsaWNfZGVidWdmcyA9IGVudDsKK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jbGVhbnVwKHZvaWQpCit7CisJaWYgKHNsaWNfZGVidWdmcykgeworCQlkZWJ1Z2ZzX3JlbW92ZShzbGljX2RlYnVnZnMpOworCQlzbGljX2RlYnVnZnMgPSBOVUxMOworCX0KK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gRHVtcCByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKwordm9pZCAqc2xpY19kdW1wX2hhbmRsZTsJCS8qIHRocmVhZCBoYW5kbGUgKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKKyAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KKyAqLworc3RhdGljIGludCBzbGljX2R1bXBfc2VlayhzdHJ1Y3QgZmlsZSAqU0xJQ2hhbmRsZSwgdTMyIGZpbGVfb2Zmc2V0KQoreworCWlmIChTTElDaGFuZGxlLT5mX3BvcyAhPSBmaWxlX29mZnNldCkgeworCQkvKkRCR19NU0coInNsaWNfZHVtcF9zZWVrICBub3cgbmVlZGVkIFsleCA6ICV4XVxuIiwKKwkJCSh1MzIpU0xJQ2hhbmRsZS0+Zl9wb3MsICh1MzIpZmlsZV9vZmZzZXQpOyAqLworCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+bGxzZWVrKSB7CisJCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+CisJCQkgICAgbGxzZWVrKFNMSUNoYW5kbGUsIGZpbGVfb2Zmc2V0LCAwKSAhPSBmaWxlX29mZnNldCkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCVNMSUNoYW5kbGUtPmZfcG9zID0gZmlsZV9vZmZzZXQ7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19kdW1wX3dyaXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKKwkJCSAgIGNvbnN0IHZvaWQgKmFkZHIsIGludCBzaXplLCB1MzIgZmlsZV9vZmZzZXQpCit7CisJaW50IHIgPSAxOworCXUzMiByZXN1bHQgPSAwOworCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gY2FyZC0+ZHVtcGhhbmRsZTsKKworI2lmZGVmIEhJU1RPUklDQUwJCS8qIGxlZ2FjeSAqLworCWRvd24oJlNMSUNoYW5kbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisjZW5kaWYKKwlpZiAoc2l6ZSkgeworCQlzbGljX2R1bXBfc2VlayhTTElDaGFuZGxlLCBmaWxlX29mZnNldCk7CisKKwkJcmVzdWx0ID0KKwkJICAgIFNMSUNoYW5kbGUtPmZfb3AtPndyaXRlKFNMSUNoYW5kbGUsIGFkZHIsIHNpemUsCisJCQkJCSAgICAmU0xJQ2hhbmRsZS0+Zl9wb3MpOworCisJCXIgPSByZXN1bHQgPT0gc2l6ZTsKKwl9CisKKwljYXJkLT5kdW1wdGltZV9jb21wbGV0ZSA9IGppZmZpZXM7CisJY2FyZC0+ZHVtcHRpbWVfZGVsdGEgPSBjYXJkLT5kdW1wdGltZV9jb21wbGV0ZSAtIGNhcmQtPmR1bXB0aW1lX3N0YXJ0OworCWNhcmQtPmR1bXB0aW1lX3N0YXJ0ID0gamlmZmllczsKKworI2lmZGVmIEhJU1RPUklDQUwKKwl1cCgmU0xJQ2hhbmRsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKyNlbmRpZgorCWlmICghcikgeworCQlEQkdfRVJST1IoIiVzOiBhZGRyWyVwXSBzaXplWyV4XSByZXN1bHRbJXhdIGZpbGVfb2Zmc2V0WyV4XVxuIiwKKwkJCSAgX19mdW5jX18sIGFkZHIsIHNpemUsIHJlc3VsdCwgZmlsZV9vZmZzZXQpOworCX0KKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHVpbnQgc2xpY19pbml0X2R1bXBfdGhyZWFkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwljYXJkLT5kdW1wX3Rhc2tfaWQgPSBrdGhyZWFkX3J1bihzbGljX2R1bXBfdGhyZWFkLCAodm9pZCAqKWNhcmQsIDApOworCisvKiAgREJHX01TRygiY3JlYXRlIHNsaWNfZHVtcF90aHJlYWQgZHVtcF9waWRbJXhdXG4iLCBjYXJkLT5kdW1wX3BpZCk7ICovCisJaWYgKElTX0VSUihjYXJkLT5kdW1wX3Rhc2tfaWQpKSB7CisJCURCR19NU0coImNyZWF0ZSBzbGljX2R1bXBfdGhyZWFkIEZBSUxFRCBcbiIpOworCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHNsaWNfZHVtcF90aHJlYWQodm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSAoc3RydWN0IHNsaWNjYXJkICopY29udGV4dDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgYWRhcHRlciAqZHVtcF9hZGFwdGVyID0gTlVMTDsKKwl1MzIgZHVtcF9jb21wbGV0ZSA9IDA7CisJdTMyIGRlbGF5ID0gU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOworCXN0cnVjdCBzbGljX3JlZ3MgKnByZWdzOworCXUzMiBpOworCXN0cnVjdCBzbGljX3VwciAqdXByLCAqdXBybmV4dDsKKwl1MzIgZHVtcF9jYXJkOworCisJQVNTRVJUKGNhcmQpOworCisJY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMTsKKworI2lmZGVmIEhJU1RPUklDQUwKKwlsb2NrX2tlcm5lbCgpOworCS8qCisJICogVGhpcyB0aHJlYWQgZG9lc24ndCBuZWVkIGFueSB1c2VyLWxldmVsIGFjY2VzcywKKwkgKiBzbyBnZXQgcmlkIG9mIGFsbCBvdXIgcmVzb3VyY2VzCisJICovCisJZXhpdF9maWxlcyhjdXJyZW50KTsJLyogZGFlbW9uaXplIGRvZXNuJ3QgZG8gZXhpdF9maWxlcyAqLworCWN1cnJlbnQtPmZpbGVzID0gaW5pdF90YXNrLmZpbGVzOworCWF0b21pY19pbmMoJmN1cnJlbnQtPmZpbGVzLT5jb3VudCk7CisjZW5kaWYKKworCWRhZW1vbml6ZSgiJXMiLCAic2xpY21vbiIpOworCisJLyogU2V0dXAgYSBuaWNlIG5hbWUgKi8KKwlzdHJjcHkoY3VycmVudC0+Y29tbSwgInNsaWNtb24iKTsKKwlEQkdfRVJST1IKKwkgICAgKCJzbGljX2R1bXBfdGhyZWFkW3NsaWNtb25dIGRhZW1vbiBpcyBhbGl2ZSBjYXJkWyVwXSBwaWRbJXhdXG4iLAorCSAgICAgY2FyZCwgY2FyZC0+ZHVtcF90YXNrX2lkLT5waWQpOworCisJLyoKKwkgKiAgICBTZW5kIG1lIGEgc2lnbmFsIHRvIGdldCBtZSB0byBkaWUgKGZvciBkZWJ1Z2dpbmcpCisJICovCisJZG8geworCQkvKgorCQkgKiBJZiBjYXJkIHN0YXRlIGlzIG5vdCBzZXQgdG8gdXAsIHNraXAKKwkJICovCisJCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSB7CisJCQlpZiAoY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKQorCQkJCWdvdG8gd2FpdDsKKwkJCWVsc2UKKwkJCQlnb3RvIGVuZF90aHJlYWQ7CisJCX0KKwkJLyoKKwkJICogICAgQ2hlY2sgdGhlIHJlc3VsdHMgb2Ygb3VyIGxhc3QgcGluZy4KKwkJICovCisJCWR1bXBfY2FyZCA9IDA7CisjaWZkZWYgU0xJQ19GQUlMVVJFX0RVTVAKKwkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7CisJCQlEQkdfTVNHCisJCQkgICAgKCJcbltzbGljbW9uXSAgQ0FSRCAjJWQgVElNRUQgT1VUIC0gc3RhdHVzICIKKwkJCSAgICAgIiV4OiBEVU1QIFRIRSBDQVJEIVxuIiwKKwkJCSAgICAgY2FyZC0+Y2FyZG51bSwgY2FyZC0+cGluZ3N0YXR1cyk7CisJCQlkdW1wX2NhcmQgPSAxOworCQl9CisjZWxzZQorCQkvKgorCQkgKiAgQ2F1c2UgYSBjYXJkIFJFU0VUIGluc3RlYWQ/CisJCSAqLworCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKKwkJCS8qIHRvZG8uIGRvIHdlIHdhbnQgdG8gcmVzZXQgdGhlIGNhcmQgaW4gcHJvZHVjdGlvbiAqLworCQkJLyogREJHX01TRygiXG5bc2xpY21vbl0gIENBUkQgIyVkIFRJTUVEIE9VVCAtICIKKwkJCSAgIHN0YXR1cyAleDogUkVTRVQgVEhFIENBUkQhXG4iLCBjYXJkLT5jYXJkbnVtLAorCQkJICAgY2FyZC0+cGluZ3N0YXR1cyk7ICovCisJCQlEQkdfRVJST1IKKwkJCSAgICAoIlxuW3NsaWNtb25dICBDQVJEICMlZCBUSU1FRCBPVVQgLSBzdGF0dXMgJXg6ICIKKwkJCSAgICAgIkRVTVAgVEhFIENBUkQhXG4iLAorCQkJICAgICBjYXJkLT5jYXJkbnVtLCBjYXJkLT5waW5nc3RhdHVzKTsKKwkJCWR1bXBfY2FyZCA9IDE7CisJCX0KKyNlbmRpZgorCQlpZiAoKGR1bXBfY2FyZCkKKwkJICAgIHx8IChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKSkgeworCQkJaWYgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9SRVFVRVNURUQpIHsKKwkJCQlEQkdfRVJST1IKKwkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkIFJlcXVlc3RlZDogQ2FyZCAleFxuIiwKKwkJCQkgICAgIGNhcmQtPmNhcmRudW0pOworCQkJfQorCQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7CisJCQkJdXNob3J0IGNwdWlkID0gMDsKKwkJCQl1c2hvcnQgY3Jhc2hwYyA9IDA7CisKKwkJCQlpZiAoY2FyZC0+YWRhcHRlclswXSkgeworCQkJCQlpZiAoKGNhcmQtPmFkYXB0ZXJbMF0pLT5tZW1vcnlsZW5ndGggPj0KKwkJCQkJICAgIENSQVNIX0lORk9fT0ZGU0VUICsKKwkJCQkJICAgIHNpemVvZihzbGljX2NyYXNoX2luZm8pKSB7CisJCQkJCQljaGFyICpjcmFzaHB0cjsKKwkJCQkJCXBfc2xpY19jcmFzaF9pbmZvIGNyYXNoaW5mbzsKKworCQkJCQkJY3Jhc2hwdHIgPQorCQkJCQkJICAgICgoY2hhciAqKWNhcmQtPmFkYXB0ZXJbMF0tPgorCQkJCQkJICAgICBzbGljX3JlZ3MpICsKKwkJCQkJCSAgICBDUkFTSF9JTkZPX09GRlNFVDsKKwkJCQkJCWNyYXNoaW5mbyA9CisJCQkJCQkgICAgKHBfc2xpY19jcmFzaF9pbmZvKQorCQkJCQkJICAgIGNyYXNocHRyOworCQkJCQkJY3B1aWQgPSBjcmFzaGluZm8tPmNwdV9pZDsKKwkJCQkJCWNyYXNocGMgPSBjcmFzaGluZm8tPmNyYXNoX3BjOworCQkJCQl9CisJCQkJfQorCQkJCURCR19FUlJPUgorCQkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkOiBDYXJkICV4IGNyYXNoZWQgIgorCQkJCSAgICAgImFuZCBmYWlsZWQgdG8gYW5zd2VyIFBJTkcuICIKKwkJCQkgICAgICJDUFVJRFsleF0gUENbJXhdXG4gIiwKKwkJCQkgICAgIGNhcmQtPmNhcmRudW0sIGNwdWlkLCBjcmFzaHBjKTsKKwkJCX0KKworCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfSU5fUFJPR1JFU1M7CisKKwkJCS8qCisJCQkgKiBTZXQgdGhlIGNhcmQgc3RhdGUgdG8gRE9XTiBhbmQgdGhlIGFkYXB0ZXIgc3RhdGVzCisJCQkgKiB0byBSRVNFVC5UaGV5IHdpbGwgY2hlY2sgdGhpcyBpbiBTaW1iYUNoZWNrRm9ySGFuZworCQkJICogYW5kIGluaXRpYXRlIGludGVyZmFjZSByZXNldCAod2hpY2ggaW4gdHVybiB3aWxsCisJCQkgKiByZWluaXRpYWxpemUgdGhlIGNhcmQpLgorCQkJICovCisJCQljYXJkLT5zdGF0ZSA9IENBUkRfRE9XTjsKKworCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07CisJCQkJaWYgKGFkYXB0ZXIpIHsKKwkJCQkJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOworCisJCQkJCWlmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgeworCQkJCQkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9SRVNFVDsKKwkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJCQkJCURCR19FUlJPUgorCQkJCQkJICAgICgiW3NsaWNtb25dOiBTTElDIENhcmRbJWRdICIKKwkJCQkJCSAgICAgIlBvcnRbJWRdIGFkYXB0ZXJbJXBdICIKKwkJCQkJCSAgICAgImRvd25cbiIsCisJCQkJCQkgICAgICh1aW50KSBjYXJkLT5jYXJkbnVtLAorCQkJCQkJICAgICAodWludCkgaSwgYWRhcHRlcik7CisJCQkJCX0KKyNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECisJCQkJCS8qIGZyZWUgc3RhdHMgdGltZXIgKi8KKwkJCQkJaWYgKGFkYXB0ZXItPnN0YXRzdGltZXJzZXQpIHsKKwkJCQkJCWFkYXB0ZXItPnN0YXRzdGltZXJzZXQgPSAwOworCQkJCQkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwkJCQkJfQorI2VuZGlmCisJCQkJfQorCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKKwkJCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKKwkJCQlpZiAoKGFkYXB0ZXIpICYmIChhZGFwdGVyLT5hY3RpdmF0ZWQpKSB7CisJCQkJCXByZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCQkJCQlkdW1wX2FkYXB0ZXIgPSBhZGFwdGVyOworCisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSBkdW1wIHN0YXR1cyBpcyB6ZXJvLCB0aGVuCisJCQkJCSAqIHRoZSB1dGlsaXR5IHByb2Nlc3NvciBoYXMgY3Jhc2hlZC4KKwkJCQkJICogSWYgdGhpcyBpcyB0aGUgY2FzZSwgYW55IHBlbmRpbmcKKwkJCQkJICogdXRpbGl0eXByb2Nlc3NvciByZXF1ZXN0cyB3aWxsIG5vdAorCQkJCQkgKiBjb21wbGV0ZSBhbmQgb3VyIGR1bXAgY29tbWFuZHMgd2lsbAorCQkJCQkgKiBub3QgYmUgaXNzdWVkLgorCQkJCQkgKgorCQkJCQkgKiBUbyBhdm9pZCB0aGlzIHdlIHdpbGwgY2xlYXIgYW55CisJCQkJCSAqIHBlbmRpbmcgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdHMKKwkJCQkJICogbm93LgorCQkJCQkgKi8KKwkJCQkJaWYgKCFjYXJkLT5waW5nc3RhdHVzKSB7CisJCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgKKwkJCQkJCSAgICAmYWRhcHRlci0+dXByX2xvY2subG9jaywKKwkJCQkJCSAgICBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJCQkJCQl1cHIgPSBhZGFwdGVyLT51cHJfbGlzdDsKKwkJCQkJCXdoaWxlICh1cHIpIHsKKwkJCQkJCQl1cHJuZXh0ID0gdXByLT5uZXh0OworCQkJCQkJCWtmcmVlKHVwcik7CisJCQkJCQkJdXByID0gdXBybmV4dDsKKwkJCQkJCX0KKwkJCQkJCWFkYXB0ZXItPnVwcl9saXN0ID0gMDsKKwkJCQkJCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKKwkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCQkgICAgJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJCQkgICAgYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworCQkJCQl9CisKKwkJCQkJc2xpY19kdW1wX2NhcmQoY2FyZCwgRkFMU0UpOworCQkJCQlkdW1wX2NvbXBsZXRlID0gMTsKKwkJCQl9CisKKwkJCQlpZiAoZHVtcF9jb21wbGV0ZSkgeworCQkJCQlEQkdfRVJST1IoIlNMSUMgRHVtcCBDb21wbGV0ZVxuIik7CisJCQkJCS8qICBPbmx5IGR1bXAgdGhlIGNhcmQgb25lIHRpbWUgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoZHVtcF9hZGFwdGVyKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgic2xpYyBkdW1wIGNvbXBsZXRlZC4gIgorCQkJCSAgICAgIlJlZW5hYmxlIGludGVyZmFjZXNcbiIpOworCQkJCXNsaWNfY2FyZF9pbml0KGNhcmQsIGR1bXBfYWRhcHRlcik7CisKKwkJCQkvKgorCQkJCSAqICBSZWVuYWJsZSB0aGUgYWRhcHRlcnMgdGhhdCB3ZXJlIHJlc2V0CisJCQkJICovCisJCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCQkJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOworCQkJCQlpZiAoYWRhcHRlcikgeworCQkJCQkJaWYgKGFkYXB0ZXItPnN0YXRlID09CisJCQkJCQkgICAgQURBUFRfUkVTRVQpIHsKKwkJCQkJCQlEQkdfRVJST1IKKwkJCQkJCQkgICAgKCJzbGljZHVtcDogU0xJQyAiCisJCQkJCSAgICJDYXJkWyVkXSBQb3J0WyVkXSBhZGFwdGVyWyVwXSAiCisJCQkJCSAgICJicmluZyBVUFxuIiwKKwkJCQkJCQkgICAgICh1aW50KSBjYXJkLT4KKwkJCQkJCQkgICAgIGNhcmRudW0sICh1aW50KSBpLAorCQkJCQkJCSAgICAgYWRhcHRlcik7CisJCQkJCQkJYWRhcHRlci0+c3RhdGUgPQorCQkJCQkJCSAgICBBREFQVF9ET1dOOworCQkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9CisJCQkJCQkJICAgIExJTktfRE9XTjsKKwkJCQkJCQlzbGljX2VudHJ5X29wZW4KKwkJCQkJCQkgICAgKGFkYXB0ZXItPm5ldGRldik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9ET05FOworCQkJfQorCQl9IGVsc2UgeworCQkvKiBpZiBwaW5nc3RhdHVzICE9IElTUl9QSU5HTUFTSykgfHwgZHVtcF9yZXF1ZXN0ZWQuLi5FTFNFCisJCSAqICAgIFdlIHJlY2VpdmVkIGEgdmFsaWQgcGluZyByZXNwb25zZS4KKwkJICogICAgQ2xlYXIgdGhlIFBpbmdzdGF0dXMgZmllbGQsIGZpbmQgYSB2YWxpZCBhZGFwdGVyCisJCSAqICAgIHN0cnVjdHVyZSBhbmQgc2VuZCBhbm90aGVyIHBpbmcuCisJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07CisJCQkJaWYgKGFkYXB0ZXIgJiYgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSkgeworCQkJCQljYXJkLT5waW5nc3RhdHVzID0gMDsKKwkJCQkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9QSU5HLAorCQkJCQkJCSAwLCAwLCAwLCAwKTsKKwkJCQkJYnJlYWs7CS8qIE9ubHkgaXNzdWUgb25lIHBlciBjYXJkICovCisJCQkJfQorCQkJfQorCQl9Cit3YWl0OgorCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLCBkZWxheSk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworZW5kX3RocmVhZDoKKy8qICBEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX3RocmVhZCBjYXJkWyVwXSBwaWRbJXhdIEVORElOR1xuIiwKKyAgICBjYXJkLCBjYXJkLT5kdW1wX3BpZCk7ICovCisJY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gb3VyIGR1bXAgaW5kZXggZmlsZS4gIFRoaXMKKyAqIHZhbHVlIGlzIHVzZWQgYXMgb3VyIHN1ZmZpeCBmb3Igb3VyIGR1bXAgcGF0aC4gIFRoZQorICogdmFsdWUgaXMgaW5jcmVtZW50ZWQgYW5kIHdyaXR0ZW4gYmFjayB0byB0aGUgZmlsZQorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX2dldF9kdW1wX2luZGV4KGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgY2hhciBpbmRleCA9IDA7CisjaWZkZWYgU0xJQ19EVU1QX0lOREVYX1NVUFBPUlQKKwl1MzIgc3RhdHVzOworCXZvaWQgKkZpbGVIYW5kbGU7CisJdTMyIG9mZnNldDsKKworCW9mZnNldCA9IDA7CisKKwkvKgorCSAqIE9wZW4gdGhlIGluZGV4IGZpbGUuICBJZiBvbmUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0CisJICovCisJc3RhdHVzID0gY3JlYXRlX2ZpbGUoJkZpbGVIYW5kbGUpOworCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSAwOworCisJc3RhdHVzID0gcmVhZF9maWxlKEZpbGVIYW5kbGUsICZpbmRleCwgMSwgJm9mZnNldCk7CisKKwlpbmRleCsrOworCisJc3RhdHVzID0gd3JpdGVfZmlsZShGaWxlSGFuZGxlLCAmaW5kZXgsIDEsICZvZmZzZXQpOworCisJY2xvc2VfZmlsZShGaWxlSGFuZGxlKTsKKyNlbHNlCisJaW5kZXggPSAwOworI2VuZGlmCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgc3RydWN0IGZpbGUgKnNsaWNfZHVtcF9vcGVuX2ZpbGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKQoreworCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCWNoYXIgU0xJQ2ZpbGVbNTBdOworCisJY2FyZC0+ZHVtcGZpbGVfZnMgPSBnZXRfZnMoKTsKKworCXNldF9mcyhLRVJORUxfRFMpOworCisJbWVtc2V0KFNMSUNmaWxlLCAwLCBzaXplb2YoU0xJQ2ZpbGUpKTsKKwlzcHJpbnRmKFNMSUNmaWxlLCAiL3Zhci90bXAvc2xpYyVkLWR1bXAtJWQiLCBjYXJkLT5jYXJkbnVtLAorCQkodWludCkgY2FyZC0+ZHVtcF9jb3VudCk7CisJY2FyZC0+ZHVtcF9jb3VudCsrOworCisJU0xJQ2hhbmRsZSA9CisJICAgIGZpbHBfb3BlbihTTElDZmlsZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fU1lOQyB8IE9fTEFSR0VGSUxFLCAwNjY2KTsKKworCURCR19NU0coIltzbGljbW9uXTogRHVtcCBDYXJkICMlZCB0byBmaWxlOiAlcyBcbiIsIGNhcmQtPmNhcmRudW0sCisJCVNMSUNmaWxlKTsKKworLyogIERCR19NU0coIltzbGljbW9uXSBmaWxwX29wZW4gJXMgU0xJQ2hhbmRsZVslcF1cbiIsIFNMSUNmaWxlLCBTTElDaGFuZGxlKTsqLworCisJaWYgKElTX0VSUihTTElDaGFuZGxlKSkKKwkJZ290byBlbmRfc2xpY2R1bXA7CisKKwlkZW50cnkgPSBTTElDaGFuZGxlLT5mX2RlbnRyeTsKKwlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworLyogIERCR19NU0coIltzbGljbW9uXSBpbm9kZVslcF0gaV9ubGlua1sleF0gaV9tb2RlWyV4XSBpX29wWyVwXSBpX2ZvcFslcF1cbiIKKwkJImZfb3AtPndyaXRlWyVwXVxuIiwKKwkJaW5vZGUsIGlub2RlLT5pX25saW5rLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9vcCwKKwkJaW5vZGUtPmlfZm9wLCBTTElDaGFuZGxlLT5mX29wLT53cml0ZSk7ICovCisJaWYgKGlub2RlLT5pX25saW5rID4gMSkKKwkJZ290byBjbG9zZV9zbGljZHVtcDsJLyogbXVsdGlwbGUgbGlua3MgLSBkb24ndCBkdW1wICovCisjaWZkZWYgSElTVE9SSUNBTAorCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJZ290byBjbG9zZV9zbGljZHVtcDsKKyNlbmRpZgorCWlmICghaW5vZGUtPmlfb3AgfHwgIWlub2RlLT5pX2ZvcCkKKwkJZ290byBjbG9zZV9zbGljZHVtcDsKKworCWlmICghU0xJQ2hhbmRsZS0+Zl9vcC0+d3JpdGUpCisJCWdvdG8gY2xvc2Vfc2xpY2R1bXA7CisKKwkvKgorCSAqICBJZiB3ZSBnb3QgaGVyZSB3ZSBoYXZlIFNVQ0NFU1NGVUxMWSBPUEVORUQgdGhlIGR1bXAgZmlsZQorCSAqLworLyogIERCR19NU0coIm9wZW5lZCAlcyBTTElDaGFuZGxlWyVwXVxuIiwgU0xJQ2ZpbGUsIFNMSUNoYW5kbGUpOyAqLworCXJldHVybiBTTElDaGFuZGxlOworCitjbG9zZV9zbGljZHVtcDoKKwlEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX29wZW5fZmlsZSBmYWlsZWQgY2xvc2UgU0xJQ2hhbmRsZVslcF1cbiIsCisJCVNMSUNoYW5kbGUpOworCWZpbHBfY2xvc2UoU0xJQ2hhbmRsZSwgTlVMTCk7CisKK2VuZF9zbGljZHVtcDoKKwlzZXRfZnMoY2FyZC0+ZHVtcGZpbGVfZnMpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZHVtcF9jbG9zZV9maWxlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKworLyogIERCR19NU0coIltzbGljbW9uXSBzbGljX2R1bXBfQ0xPU0VfZmlsZSBjbG9zZSBTTElDaGFuZGxlWyVwXVxuIiwKKyAgIGNhcmQtPmR1bXBoYW5kbGUpOyAqLworCisJZmlscF9jbG9zZShjYXJkLT5kdW1waGFuZGxlLCBOVUxMKTsKKworCXNldF9mcyhjYXJkLT5kdW1wZmlsZV9mcyk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2NhcmQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBib29sIHJlc3VtZSkKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKKwl1MzIgc3RhdHVzOworCXUzMiBxdWV1ZTsKKwl1MzIgbGVuLCBvZmZzZXQ7CisJdTMyIHNyYW1fc2l6ZSwgZHJhbV9zaXplLCByZWdzOworCXN0cnVjdCBzbGljY29yZV9oZHIgY29yZWhkcjsKKwl1MzIgZmlsZV9vZmZzZXQ7CisJY2hhciAqbmFtZXN0cjsKKwl1MzIgaTsKKwl1MzIgbWF4X3F1ZXVlcyA9IDA7CisJdTMyIHJlc3VsdDsKKworCWNhcmQtPmR1bXBoYW5kbGUgPSBzbGljX2R1bXBfb3Blbl9maWxlKGNhcmQpOworCisJaWYgKGNhcmQtPmR1bXBoYW5kbGUgPT0gTlVMTCkgeworCQlEQkdfTVNHKCJbc2xpY21vbl0gQ2FudCBjcmVhdGUgRHVtcCBmaWxlIC0gZHVtcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKCFjYXJkLT5kdW1wYnVmZmVyKSB7CisJCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBkdW1wXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICghY2FyZC0+Y21kYnVmZmVyKSB7CisJCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgY21kIG1lbW9yeSBmb3IgZHVtcFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogV3JpdGUgdGhlIGZpbGUgdmVyc2lvbiB0byB0aGUgY29yZSBoZWFkZXIuCisJICovCisJbmFtZXN0ciA9IHNsaWNfcHJvY192ZXJzaW9uOworCWZvciAoaSA9IDA7IGkgPCAoRFJJVkVSX05BTUVfU0laRSAtIDEpOyBpKyssIG5hbWVzdHIrKykgeworCQlpZiAoIW5hbWVzdHIpCisJCQlicmVhazsKKwkJY29yZWhkci5kcml2ZXJfdmVyc2lvbltpXSA9ICpuYW1lc3RyOworCX0KKwljb3JlaGRyLmRyaXZlcl92ZXJzaW9uW2ldID0gMDsKKworCWZpbGVfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzbGljY29yZV9oZHIpOworCisJLyoKKwkgKiBJc3N1ZSB0aGUgZm9sbG93aW5nIGRlYnVnIGNvbW1hbmRzIHRvIHRoZSBTTElDOgorCSAqICAgICAgICAtIEhhbHQgYm90aCByZWNlaXZlIGFuZCB0cmFuc21pdAorCSAqICAgICAgICAtIER1bXAgcmVjZWl2ZSByZWdpc3RlcnMKKwkgKiAgICAgICAgLSBEdW1wIHRyYW5zbWl0IHJlZ2lzdGVycworCSAqICAgICAgICAtIER1bXAgc3JhbQorCSAqICAgICAgICAtIER1bXAgZHJhbQorCSAqICAgICAgICAtIER1bXAgcXVldWVzCisJICovCisJREJHX01TRygic2xpY0R1bXAgSEFMVCBSZWNlaXZlIFByb2Nlc3NvclxuIik7CisJY2FyZC0+ZHVtcHRpbWVfc3RhcnQgPSBqaWZmaWVzOworCisJc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19SRUNFSVZFKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUgorCQkgICAgKCJDYW50IGhhbHQgcmVjZWl2ZSBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZCBzdGF0dXNbJXhdXG4iLAorCQkgICAgIHN0YXR1cyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlEQkdfTVNHKCJzbGljRHVtcCBIQUxUIFRyYW5zbWl0IFByb2Nlc3NvclxuIik7CisJc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19UUkFOU01JVCk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlEQkdfRVJST1IoIkNhbnQgaGFsdCB0cmFuc21pdCBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBEdW1wIHJlY2VpdmUgcmVncyAqLworCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19SRUNFSVZFKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUigiQ2FudCBkdW1wIHJlY2VpdmUgcmVnaXN0ZXJzIC0gZHVtcCBmYWlsZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJREJHX01TRygic2xpY0R1bXAgV3JpdGUgUmVjZWl2ZSBSRUdTIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKKwkJKFNMSUNfTlVNX1JFRyAqIDQpLCBmaWxlX29mZnNldCk7CisKKwlyZXN1bHQgPQorCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgU0xJQ19OVU1fUkVHICogNCwKKwkJCSAgICBmaWxlX29mZnNldCk7CisJaWYgKCFyZXN1bHQpIHsKKwkJREJHX0VSUk9SCisJCSAgICAoIkNhbnQgd3JpdGUgcmN2IHJlZ2lzdGVycyB0byBkdW1wIGZpbGUgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljb3JlaGRyLlJjdlJlZ09mZiA9IGZpbGVfb2Zmc2V0OworCWNvcmVoZHIuUmN2UmVnc2l6ZSA9IFNMSUNfTlVNX1JFRyAqIDQ7CisJZmlsZV9vZmZzZXQgKz0gU0xJQ19OVU1fUkVHICogNDsKKworCS8qIER1bXAgdHJhbnNtaXQgcmVncyAqLworCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19UUkFOU01JVCk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlEQkdfRVJST1IoIkNhbnQgZHVtcCB0cmFuc21pdCByZWdpc3RlcnMgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBYTUlUIFJFR1MgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAorCQkoU0xJQ19OVU1fUkVHICogNCksIGZpbGVfb2Zmc2V0KTsKKworCXJlc3VsdCA9CisJICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBTTElDX05VTV9SRUcgKiA0LAorCQkJICAgIGZpbGVfb2Zmc2V0KTsKKwlpZiAoIXJlc3VsdCkgeworCQlEQkdfRVJST1IKKwkJICAgICgiQ2FudCB3cml0ZSB4bXQgcmVnaXN0ZXJzIHRvIGR1bXAgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCWNvcmVoZHIuWG10UmVnT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5YbXRSZWdzaXplID0gU0xJQ19OVU1fUkVHICogNDsKKwlmaWxlX29mZnNldCArPSBTTElDX05VTV9SRUcgKiA0OworCisJcmVncyA9IFNMSUNfR0JNQVhfUkVHOworCisJY29yZWhkci5GaWxlUmVnT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5GaWxlUmVnc2l6ZSA9IHJlZ3MgKiA0OworCisJZm9yIChvZmZzZXQgPSAwOyByZWdzOykgeworCQlsZW4gPSBNSU4ocmVncywgMTYpOwkvKiBDYW4gb25seSB4ZnIgMTYgcmVncyBhdCBhIHRpbWUgKi8KKworCQlzdGF0dXMgPSBzbGljX2R1bXBfZGF0YShjYXJkLCBvZmZzZXQsICh1c2hvcnQpIGxlbiwgREVTQ19SRklMRSk7CisKKwkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQkJREJHX0VSUk9SKCJDYW50IGR1bXAgcmVnaXN0ZXIgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCURCR19NU0coInNsaWNEdW1wIFdyaXRlIFJlZ2lzdGVyRmlsZSBsZW5bJXhdIG9mZnNldFsleF1cbiIsCisJCQkobGVuICogNCksIGZpbGVfb2Zmc2V0KTsKKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiAqIDQsCisJCQkJICAgIGZpbGVfb2Zmc2V0KTsKKwkJaWYgKCFyZXN1bHQpIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiQ2FudCB3cml0ZSByZWdpc3RlciBmaWxlIHRvIGR1bXAgZmlsZSAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbGVfb2Zmc2V0ICs9IGxlbiAqIDQ7CisJCW9mZnNldCArPSBsZW47CisJCXJlZ3MgLT0gbGVuOworCX0KKworCWRyYW1fc2l6ZSA9IGNhcmQtPmNvbmZpZy5EcmFtU2l6ZSAqIDB4MTAwMDA7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CisJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6CisJCXNyYW1fc2l6ZSA9IFNMSUNfU1JBTV9TSVpFMkdCOworCQlicmVhazsKKwljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKwkJc3JhbV9zaXplID0gU0xJQ19TUkFNX1NJWkUxR0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNyYW1fc2l6ZSA9IDA7CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJfQorCisJY29yZWhkci5TcmFtT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5TcmFtc2l6ZSA9IHNyYW1fc2l6ZTsKKworCWZvciAob2Zmc2V0ID0gMDsgc3JhbV9zaXplOykgeworCQlsZW4gPSBNSU4oc3JhbV9zaXplLCBEVU1QX0JVRl9TSVpFKTsKKwkJc3RhdHVzID0gc2xpY19kdW1wX2RhdGEoY2FyZCwgb2Zmc2V0LCAodXNob3J0KSBsZW4sIERFU0NfU1JBTSk7CisJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiW3NsaWNtb25dIENhbnQgZHVtcCBTUkFNIGF0IG9mZnNldCAleCAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iLCAodWludCkgb2Zmc2V0KTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCURCR19NU0coIltzbGljbW9uXSBzbGljRHVtcCBXcml0ZSBTUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsCisJCQlsZW4sIGZpbGVfb2Zmc2V0KTsKKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOworCQlpZiAoIXJlc3VsdCkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBTUkFNIHRvIGR1bXAgZmlsZSAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbGVfb2Zmc2V0ICs9IGxlbjsKKwkJb2Zmc2V0ICs9IGxlbjsKKwkJc3JhbV9zaXplIC09IGxlbjsKKwl9CisKKwljb3JlaGRyLkRyYW1PZmYgPSBmaWxlX29mZnNldDsKKwljb3JlaGRyLkRyYW1zaXplID0gZHJhbV9zaXplOworCisJZm9yIChvZmZzZXQgPSAwOyBkcmFtX3NpemU7KSB7CisJCWxlbiA9IE1JTihkcmFtX3NpemUsIERVTVBfQlVGX1NJWkUpOworCisJCXN0YXR1cyA9IHNsaWNfZHVtcF9kYXRhKGNhcmQsIG9mZnNldCwgKHVzaG9ydCkgbGVuLCBERVNDX0RSQU0pOworCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIltzbGljbW9uXSBDYW50IGR1bXAgZHJhbSBhdCBvZmZzZXQgJXggLSAiCisJCQkgICAgICJkdW1wIGZhaWxlZFxuIiwgKHVpbnQpIG9mZnNldCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBEUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsIGxlbiwKKwkJCWZpbGVfb2Zmc2V0KTsKKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOworCQlpZiAoIXJlc3VsdCkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBEUkFNIHRvIGR1bXAgZmlsZSAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbGVfb2Zmc2V0ICs9IGxlbjsKKwkJb2Zmc2V0ICs9IGxlbjsKKwkJZHJhbV9zaXplIC09IGxlbjsKKwl9CisKKwltYXhfcXVldWVzID0gU0xJQ19NQVhfUVVFVUU7CisKKwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBtYXhfcXVldWVzOyBxdWV1ZSsrKSB7CisJCXUzMiAqcWFycmF5ID0gKHUzMiAqKSBjYXJkLT5kdW1wYnVmZmVyOworCQl1MzIgcWFycmF5X3BoeXNsID0gY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbDsKKwkJdTMyIHFhcnJheV9waHlzaCA9IGNhcmQtPmR1bXBidWZmZXJfcGh5c2g7CisJCXUzMiBxc3RhcnQ7CisJCXUzMiBxZGVsdGE7CisJCXUzMiBxdG90YWwgPSAwOworCisJCURCR19NU0coIltzbGljbW9uXSBTdGFydCBEdW1wIG9mIFFVRVVFICMweCV4XG4iLCAodWludCkgcXVldWUpOworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgKERVTVBfQlVGX1NJWkUgPj4gMik7IG9mZnNldCsrKSB7CisJCQlxc3RhcnQgPSBqaWZmaWVzOworCQkJcWRlbHRhID0gMDsKKworCQkJc3RhdHVzID0gc2xpY19kdW1wX3F1ZXVlKGNhcmQsCisJCQkJCQkgcWFycmF5X3BoeXNsLAorCQkJCQkJIHFhcnJheV9waHlzaCwgcXVldWUpOworCQkJcWFycmF5X3BoeXNsICs9IDQ7CisKKwkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCQkJYnJlYWs7CisKKwkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7CisJCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKKwkJCQlxdG90YWwgKz0gcWRlbHRhOworCQkJfQorCQl9CisKKwkJaWYgKG9mZnNldCkKKwkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKKwkJZWxzZQorCQkJcWRlbHRhID0gMDsKKworLyogICAgICAgIERCR19NU0coIiAgIHNsaWNEdW1wIFdyaXRlIFFVRVVFICMweCV4IGxlblsleF0gb2Zmc2V0WyV4XSAiCisJCSJhdmdqaWZmc1sleF1cbiIsIHF1ZXVlLCAob2Zmc2V0KjQpLCBmaWxlX29mZnNldCwgcWRlbHRhKTsgKi8KKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIG9mZnNldCAqIDQsCisJCQkJICAgIGZpbGVfb2Zmc2V0KTsKKworCQlpZiAoIXJlc3VsdCkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBRVUVVRVMgdG8gZHVtcCBmaWxlIC0gIgorCQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJY29yZWhkci5xdWV1ZXNbcXVldWVdLnF1ZXVlT2ZmID0gZmlsZV9vZmZzZXQ7CisJCWNvcmVoZHIucXVldWVzW3F1ZXVlXS5xdWV1ZXNpemUgPSBvZmZzZXQgKiA0OworCQlmaWxlX29mZnNldCArPSBvZmZzZXQgKiA0OworCisvKiAgICAgIERCR19NU0coIiAgICBSZWxvYWQgUVVFVUUgIzB4JXggZWxlbWVudHNbJXhdXG4iLCAodWludClxdWV1ZSwgb2Zmc2V0KTsqLworCQkvKgorCQkgKiBGaWxsIHRoZSBxdWV1ZSBiYWNrIHVwCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCXFzdGFydCA9IGppZmZpZXM7CisJCQlxZGVsdGEgPSAwOworCisJCQlzdGF0dXMgPSBzbGljX2R1bXBfbG9hZF9xdWV1ZShjYXJkLCBxYXJyYXlbaV0sIHF1ZXVlKTsKKwkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCQkJYnJlYWs7CisKKwkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7CisJCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKKwkJCQlxdG90YWwgKz0gcWRlbHRhOworCQkJfQorCQl9CisKKwkJaWYgKG9mZnNldCkKKwkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKKwkJZWxzZQorCQkJcWRlbHRhID0gMDsKKworLyogICAgICBEQkdfTVNHKCIgICBSZWxvYWQgRE9ORSBhdmdqaWZmc1sleF1cbiIsIHFkZWx0YSk7ICovCisKKwkJcmVzdW1lID0gMTsKKwl9CisKKwlsZW4gPSBTTElDX0dCX0NBTUFCX1NaRSAqIDQ7CisJc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0EpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQSAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKKwlpZiAocmVzdWx0KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0EgZGF0YSB0byBkdW1wIGZpbGUgLSAiCisJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKwljb3JlaGRyLkNhbUFNT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5DYW1BU2l6ZSA9IGxlbjsKKwlmaWxlX29mZnNldCArPSBsZW47CisKKwlsZW4gPSBTTElDX0dCX0NBTUNEX1NaRSAqIDQ7CisJc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0MpOworCWlmIChzdGF0dXMpIHsKKwkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQyAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKKwlpZiAocmVzdWx0KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0MgZGF0YSB0byBkdW1wIGZpbGUgLSAiCisJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKwljb3JlaGRyLkNhbUNNT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5DYW1DU2l6ZSA9IGxlbjsKKwlmaWxlX29mZnNldCArPSBsZW47CisKK2RvbmU6CisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGNvcmUgaGVhZGVyCisJICovCisJZmlsZV9vZmZzZXQgPSAwOworCURCR19NU0coIltzbGljbW9uXSBXcml0ZSBDb3JlSGVhZGVyIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKKwkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSwgZmlsZV9vZmZzZXQpOworCisJcmVzdWx0ID0KKwkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsICZjb3JlaGRyLCBzaXplb2Yoc3RydWN0IHNsaWNjb3JlX2hkciksCisJCQkgICAgZmlsZV9vZmZzZXQpOworCURCR19NU0coIltzbGljbW9uXSBjb3JlaGRyICB4b2ZmWyV4XSB4c3pbJXhdXG4iCisJCSIgICAgcm9mZlsleF0gcnN6WyV4XSBmaWxlb2ZmWyV4XSBmaWxlc3pbJXhdXG4iCisJCSIgICAgc3JhbW9mZlsleF0gc3JhbXN6WyV4XSwgZHJhbW9mZlsleF0gZHJhbXN6WyV4XVxuIgorCQkiICAgIGNvcmVoZHJfb2Zmc2V0WyV4XVxuIiwgY29yZWhkci5YbXRSZWdPZmYsCisJCWNvcmVoZHIuWG10UmVnc2l6ZSwgY29yZWhkci5SY3ZSZWdPZmYsIGNvcmVoZHIuUmN2UmVnc2l6ZSwKKwkJY29yZWhkci5GaWxlUmVnT2ZmLCBjb3JlaGRyLkZpbGVSZWdzaXplLCBjb3JlaGRyLlNyYW1PZmYsCisJCWNvcmVoZHIuU3JhbXNpemUsIGNvcmVoZHIuRHJhbU9mZiwgY29yZWhkci5EcmFtc2l6ZSwKKwkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSk7CisJZm9yIChpID0gMDsgaSA8IG1heF9xdWV1ZXM7IGkrKykgeworCQlEQkdfTVNHKCJbc2xpY21vbl0gIFFVRVVFIDB4JXggIG9mZnNldFsleF0gc2l6ZVsleF1cbiIsCisJCQkodWludCkgaSwgY29yZWhkci5xdWV1ZXNbaV0ucXVldWVPZmYsCisJCQljb3JlaGRyLnF1ZXVlc1tpXS5xdWV1ZXNpemUpOworCisJfQorCisJc2xpY19kdW1wX2Nsb3NlX2ZpbGUoY2FyZCk7CisKKwlpZiAocmVzdW1lKSB7CisJCURCR19NU0coInNsaWNEdW1wIFJFU1RBUlQgUkVDRUlWRSBhbmQgWE1JVCBQUk9DRVNTT1JTXG5cbiIpOworCQlzbGljX2R1bXBfcmVzdW1lKGNhcmQsIFBST0NfUkVDRUlWRSk7CisJCXNsaWNfZHVtcF9yZXN1bWUoY2FyZCwgUFJPQ19UUkFOU01JVCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfaGFsdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKK3sKKwl1bnNpZ25lZCBjaGFyICpjbWQgPSBjYXJkLT5jbWRidWZmZXI7CisKKwkqY21kID0gQ09NTUFORF9CWVRFKENNRF9IQUxULCAwLCBwcm9jKTsKKworCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLCAwLCAwKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfcmVzdW1lKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKQoreworCXVuc2lnbmVkIGNoYXIgKmNtZCA9IGNhcmQtPmNtZGJ1ZmZlcjsKKworCSpjbWQgPSBDT01NQU5EX0JZVEUoQ01EX1JVTiwgMCwgcHJvYyk7CisKKwlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwgMCwgMCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3JlZyhzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKK3sKKwlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOworCisJZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBwcm9jKTsKKwlkdW1wLT5kZXNjID0gREVTQ19SRUc7CisJZHVtcC0+Y291bnQgPSAwOworCWR1bXAtPmFkZHIgPSAwOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCisJCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfZGF0YShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCisJCSAgICAgICB1MzIgYWRkciwgdXNob3J0IGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCit7CisJc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKKworCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfRFVNUCwgMCwgUFJPQ19SRUNFSVZFKTsKKwlkdW1wLT5kZXNjID0gZGVzYzsKKwlkdW1wLT5jb3VudCA9IGNvdW50OworCWR1bXAtPmFkZHIgPSBhZGRyOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCisJCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLAorCQkJdTMyIGFkZHIsIHUzMiBidWZfcGh5c2gsIHUzMiBxdWV1ZSkKK3sKKwlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOworCisJZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBQUk9DX1JFQ0VJVkUpOworCWR1bXAtPmRlc2MgPSBERVNDX1FVRVVFOworCWR1bXAtPmNvdW50ID0gMTsKKwlkdW1wLT5hZGRyID0gcXVldWU7CisKKwlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwKKwkJCQkgICBhZGRyLCBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfbG9hZF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBkYXRhLAorCQkJCXUzMiBxdWV1ZSkKK3sKKwlzdHJ1Y3QgZHVtcF9jbWQgKmxvYWQgPSAoc3RydWN0IGR1bXBfY21kICopIGNhcmQtPmNtZGJ1ZmZlcjsKKworCWxvYWQtPmNtZCA9IENPTU1BTkRfQllURShDTURfTE9BRCwgMCwgUFJPQ19SRUNFSVZFKTsKKwlsb2FkLT5kZXNjID0gREVTQ19RVUVVRTsKKwlsb2FkLT5jb3VudCA9ICh1c2hvcnQpIHF1ZXVlOworCWxvYWQtPmFkZHIgPSBkYXRhOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsIDAsIDApOworfQorCitzdGF0aWMgdTMyIHNsaWNfZHVtcF9jYW0oc3RydWN0IHNsaWNjYXJkICpjYXJkLAorCQkgICAgICB1MzIgYWRkciwgdTMyIGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCit7CisJc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKKworCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfQ0FNX09QUywgMCwgUFJPQ19OT05FKTsKKwlkdW1wLT5kZXNjID0gZGVzYzsKKwlkdW1wLT5jb3VudCA9IGNvdW50OworCWR1bXAtPmFkZHIgPSAwOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCisJCQkJICAgYWRkciwgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3NlbmRfY21kKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKKwkJCSAgIHUzMiBjbWRfcGh5c2wsCisJCQkgICB1MzIgY21kX3BoeXNoLAorCQkJICAgdTMyIGJ1Zl9waHlzbCwgdTMyIGJ1Zl9waHlzaCkKK3sKKwl1bG9uZyB0aW1lb3V0ID0gU0xJQ19NU19UT19KSUZGSUVTKDUwMCk7CS8qIDUwMCBtc2VjICovCisJdTMyIGF0dGVtcHRzID0gNTsKKwl1MzIgZGVsYXkgPSBTTElDX01TX1RPX0pJRkZJRVMoMTApOwkvKiAxMCBtc2VjICovCisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJZG8geworCQkvKgorCQkgKiBaZXJvIHRoZSBEdW1wc3RhdHVzIGZpZWxkIG9mIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorCQkgKi8KKwkJY2FyZC0+ZHVtcHN0YXR1cyA9IDA7CisJCS8qCisJCSAqIElzc3VlIHRoZSBkdW1wIGNvbW1hbmQgdmlhIGEgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdC4KKwkJICoKKwkJICogS2x1ZGdlOiBXZSB1c2UgdGhlIEluZm9ybWF0aW9uYnVmZmVyIHBhcmFtZXRlciB0byBob2xkCisJCSAqIHRoZSBidWZmZXIgYWRkcmVzcworCQkgKi8KKwkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9EVU1QLCBjbWRfcGh5c2wsIGNtZF9waHlzaCwKKwkJCQkgYnVmX3BoeXNsLCBidWZfcGh5c2gpOworCisJCXRpbWVvdXQgKz0gamlmZmllczsKKwkJLyoKKwkJICogU3BpbiB1bnRpbCBjb21wbGV0aW9uIG9yIHRpbWVvdXQuCisJCSAqLworCQl3aGlsZSAoIWNhcmQtPmR1bXBzdGF0dXMpIHsKKwkJCWludCBudW1fc2xlZXBzID0gMDsKKworCQkJaWYgKGppZmZpZXMgPiB0aW1lb3V0KSB7CisJCQkJLyoKKwkJCQkgKiAgQ29tcGxldGUgdGhlIHRpbWVkLW91dCBEVU1QIFVQUiByZXF1ZXN0LgorCQkJCSAqLworCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiJXM6IFRJTUVEIE9VVCBudW1fc2xlZXBzWyV4XSAiCisJCQkJICAgICAic3RhdHVzWyV4XVxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCBudW1fc2xlZXBzLCBTVEFUVVNfRkFJTFVSRSk7CisKKwkJCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJCQl9CisJCQludW1fc2xlZXBzKys7CisJCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLAorCQkJCQkJCSAgICBkZWxheSk7CisJCX0KKworCQlpZiAoY2FyZC0+ZHVtcHN0YXR1cyAmIElTUl9VUENFUlIpIHsKKwkJCS8qCisJCQkgKiBFcnJvciAob3IgcXVldWUgZW1wdHkpCisJCQkgKi8KKy8qICAgICAgICAgIERCR19FUlJPUigiW3NsaWNtb25dICVzOiBEVU1QX1NUQVRVUyAmIElTUl9VUENFUlIgc3RhdHVzWyV4XVxuIiwKKwkJX19mdW5jX18sIFNUQVRVU19GQUlMVVJFKTsgKi8KKworCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCQl9IGVsc2UgaWYgKGNhcmQtPmR1bXBzdGF0dXMgJiBJU1JfVVBDQlNZKSB7CisJCQkvKgorCQkJICogUmV0cnkKKwkJCSAqLworCQkJREJHX0VSUk9SKCIlczogSVNSX1VQQ0JVU1kgYXR0ZW1wdFsleF1cbiIsIF9fZnVuY19fLAorCQkJCSAgYXR0ZW1wdHMpOworCisJCQlhdHRlbXB0cy0tOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHN1Y2Nlc3MKKwkJCSAqLworCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCQl9CisKKwl9IHdoaWxlIChhdHRlbXB0cyk7CisKKwlEQkdfRVJST1IoIiVzOiBHQVZFIFVQIEFGVEVSIFNFVkVSQUwgQVRURU1QVFMgc3RhdHVzWyV4XVxuIiwKKwkJICBfX2Z1bmNfXywgU1RBVFVTX0ZBSUxVUkUpOworCisJLyoKKwkgKiBHYXZlIHVwIGFmdGVyIHNldmVyYWwgYXR0ZW1wdHMKKwkgKi8KKwlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Cit9CisKKyNlbmRpZgorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqICAgTU9EVUxFIElOSVRJQVRJT04gLyBURVJNSU5BVElPTiBGVU5DVElPTlMgICAqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2xpY19kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBzbGljX3BjaV90YmwsCisJLnByb2JlID0gc2xpY19lbnRyeV9wcm9iZSwKKwkucmVtb3ZlID0gc2xpY19lbnRyeV9yZW1vdmUsCisjaWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKwkuc3VzcGVuZCA9IHNsaWNwbV9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbGljcG1fcmVzdW1lLAorI2VuZGlmCisvKiAgICAuc2h1dGRvd24gICA9ICAgICBzbGljX3NodXRkb3duLCAgTU9PS19JTlZFU1RJR0FURSAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgc2xpY19tb2R1bGVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lkZXY7CisJaW50IHJldDsKKworLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBjcHUgJWRcbiIsIF9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyAqLworCisJc2xpY19pbml0X2RyaXZlcigpOworCisJaWYgKGRlYnVnID49IDAgJiYgc2xpY19kZWJ1ZyAhPSBkZWJ1ZykKKwkJcHJpbnRrKFNMSUNMRVZFTCAic2xpY29zczogZGVidWcgbGV2ZWwgaXMgJWQuXG4iLCBkZWJ1Zyk7CisJaWYgKGRlYnVnID49IDApCisJCXNsaWNfZGVidWcgPSBkZWJ1ZzsKKworCXBjaWRldiA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKXNsaWNfZHJpdmVyLmlkX3RhYmxlOworLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHBjaV9tb2R1bGVfaW5pdCBqaWZmaWVzWyVseF0gY3B1ICMlZFxuIiwKKwlfX2Z1bmNfXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKKworLyogIERCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWZ0ZXIgY2FsbCBwY2lfbW9kdWxlX2luaXQgamlmZmllc1slbHhdICIKKwkgICAgImNwdSAjJWQgc3RhdHVzWyV4XVxuIixfX2Z1bmNfXywgamlmZmllcywKKwkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZXQpOyAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNsaWNfbW9kdWxlX2NsZWFudXAodm9pZCkKK3sKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsgKi8KKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKKwlzbGljX2RlYnVnX2NsZWFudXAoKTsKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOyAqLworfQorCittb2R1bGVfaW5pdChzbGljX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHNsaWNfbW9kdWxlX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0YWdpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGFnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzZTU4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGFnaW5nLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworc3RhdGljIGludCBfX2luaXQgc3RhZ2luZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdGFnaW5nX2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQoc3RhZ2luZ19pbml0KTsKK21vZHVsZV9leGl0KHN0YWdpbmdfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdyZWcgS3JvYWgtSGFydG1hbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFnaW5nIENvcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTZjZjBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBTWEcKKwl0cmlzdGF0ZSAiQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgTkVUREVWXzEwMDAwCisJZGVwZW5kcyBvbiBYODYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kgTm9uLUFjY2VsZXJhdGVkCisJICAxMEdiZSBuZXR3b3JrIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKKwkgIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzeGcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ4ZmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfU1hHKQkrPSBzeGcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTE0ZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9SRUFETUUKQEAgLTAsMCArMSwxNCBAQAorVGhpcyBpcyB0aGUgcm91Z2ggY3V0IGF0IGEgZHJpdmVyIGZvciB0aGUgQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kKK05vbi1BY2NlbGVyYXRlZCAxMEdiZSBuZXR3b3JrIGRyaXZlci4KKworVE9ETzoKKwktIGxpbmRlbnQgdGhlIGNvZGUKKwktIHJlbW92ZSB0eXBlZGVmcworCS0gcmVtb3ZlIHdyYXBwZXJzCisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBjYXJkIG5lZWRzCisJLSByZW1vdmUgcmVsaWFuY2Ugb24geDg2CisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CisgICAgICAgIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+Citmb3IgYW55IGNsZWFudXBzIHRoYXQgeW91IGRvIHRvIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODY1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmgKQEAgLTAsMCArMSw0ODU0IEBACisjZGVmaW5lIFNBSEFSQV9VQ09ERV9WRVJTX1NUUklORwkiJFJldmlzaW9uOiAxLjEgJCIKKyNkZWZpbmUgU0FIQVJBX1VDT0RFX1ZFUlNfREFURSAgCSIkRGF0ZTogMjAwOC8wNi8yNyAxMjo1ODoyNyAkIgorI2RlZmluZSBTQUhBUkFfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgdTMyIFNOdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgU1NlY3Rpb25TaXplW10gPQoreworCTB4MDAwMGUyNzQsIDB4MDAwMDAwMGMsCit9OworCitzdGF0aWMgdTMyIFNTZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwMWZmZiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFNhaGFyYVVDb2RlWzJdWzU3OTcyXSA9Cit7Cit7CisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHg0ZCwgMHgyOSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGIyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDQwLCAweDJiLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgxZSwgMHg4MCwgMHhlOSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDIsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMywgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAzLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHg1ZiwgMHgzZiwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweGZmLCAweGZjLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDhhLCAweDExLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweGZkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHhjMCwgMHgwMSwgMHgzMiwKKwkweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDRkLCAweDI4LCAweDFhLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NWYsIDB4MGEsIDB4ZjYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MGUsIDB4ODAsIDB4MTgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhjMCwgMHgyMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NSwgMHgyMSwgMHg5MCwKKwkweDAwLCAweDAwLCAweDRiLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAyLCAweGMwLCAweDIyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHg5ZCwKKwkweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg5MCwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDAwLCAweGU5LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MWUsIDB4YzAsIDB4ZTcsIDB4OWEsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGI4LCAweDAxLCAweDAwLCAweDk0LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDE3LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NjksIDB4MDUsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYSwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4MTgsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDU3LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgxLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmIsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHg1NywgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDVhLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGIwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDYwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhmYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHhiZCwKKwkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEzLCAweDQwLCAweDAxLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiZCwKKwkweDAwLCAweDAwLCAweDc2LCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCisJMHg3NiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDZiLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODUsIDB4ODAsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDYzLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhiOCwgMHhmZiwgMHg4NSwgMHgzMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDIxLCAweGZmLCAweDM4LAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4NGQsIDB4ODAsIDB4M2EsCisJMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHgwZCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ4LCAweDQxLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODYsIDB4OTgsIDB4NjcsIDB4YzAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2MywgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDhiLCAweDgwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHg4MCwgMHg3MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDkwLCAweDk5LCAweDg2LCAweDJjLCAweDI4LCAweGRlLCAweDgyLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MTgsIDB4YzAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHhjNSwgMHg4MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGM1LCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDA4LCAweDAwLCAweDM4LCAweDAzLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDUsIDB4ODAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDNkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDNhLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4M2EsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHg5MCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg4MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMiwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwZCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDgsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDA0LCAweDA4LCAweDgwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCisJMHg4NywgMHgwMCwgMHg5NSwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg3ZCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDlhLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MGYsIDB4OTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHhhNSwgMHgwMCwgMHg4NywgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNiwgMHhiOCwKKwkweDAxLCAweDAwLCAweGE1LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAorCTB4ODcsIDB4MDAsIDB4YWYsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMCwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDk4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4YzEsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweGE4LCAweDQyLCAweDNkLCAweDcyLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTgsIDB4OTksIDB4YjEsIDB4ZjIsIDB4YzAsIDB4N2MsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YzEsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4ODAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4Y2QsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweGNkLCAweDg1LCAweDMwLAorCTB4ODAsIDB4MDAsIDB4YzYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHhhMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweGZjLCAweGI2LAorCTB4ODcsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhiOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHg2MSwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YjgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweGUxLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjOCwgMHhjMSwgMHg4MiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDAwLCAweDA0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YTgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwOCwgMHg4OSwgMHg4ZCwgMHg3MiwgMHgzMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE5LCAweGRjLCAweDE3LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4OTAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHg4NiwgMHg4MCwgMHgyMiwgMHgyNCwgMHg3YywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHhkMiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHhkZCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4ZTAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhmNCwgMHgwMCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MjksIDB4YzEsIDB4NzIsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHg5MCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweGMxLCAweDgyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDAsIDB4ODAsIDB4OTcsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhhMCwgMHgwNCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4ODEsIDB4ODAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQ1LCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4MDAsIDB4MjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDU5LCAweGMwLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NzgsIDB4MTksIDB4YzAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwNCwgMHgwMSwgMHhlYywgMHgwNiwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweGY0LCAweDFlLCAweDQwLCAweGVmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4MDksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweGMwLCAweDI5LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4M2QsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmNCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4MywgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDcyLCAweDAwLCAweDJiLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4M2QsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHg3MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDI3LCAweDAxLCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4MDAsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4MjgsIDB4MDEsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhjZCwgMHg4NSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweGJkLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg4MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNkLCAweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MjgsIDB4ODAsIDB4NzIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHgwNCwgMHgzOCwgMHgwMCwgMHg3OCwgMHhkOSwgMHhjNSwgMHg3MiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDk3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgzYywgMHhiOCwgMHgxYywgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDI4LCAweGMwLCAweDgzLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MmMsIDB4MDgsIDB4YzAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhiOCwgMHhlMCwgMHg4MywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDI5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg3OCwgMHhhMCwgMHg4MSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MDEsIDB4MDYsIDB4M2EsIDB4MDAsIDB4ODAsIDB4YjIsIDB4NWMsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgwMCwgMHg4OSwgMHhjMSwgMHg3MiwgMHgzNywKKwkweDA3LCAweDAwLCAweDUwLCAweDAxLCAweDJiLCAweDAxLCAweDAwLCAweDA0LCAweDc5LCAweDBhLCAweDA0LCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDEsIDB4OTAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHgwMCwgMHgzYSwgMHgwMCwgMHgyYywgMHgwNywgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDJjLCAweGQ3LCAweGUwLCAweDcyLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDY0LCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg2MSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQ5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDcsIDB4MDAsIDB4NjYsIDB4MDEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NzksIDB4MGEsIDB4MDIsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweGEwLCAweDgxLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg2MCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDcxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDczLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzMsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDhjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDEsIDB4MjksIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxMCwgMHgwMCwgMHg4YywgMHgwNywgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OGMsIDB4ZjcsIDB4ZTAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MjcsIDB4ZTQsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg3MiwgMHgwMCwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDg3LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg4MywgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHhmMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDA4LCAweDM4LCAweDgxLCAweDgwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MWUsIDB4NDAsIDB4ZWYsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDNiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MDEsIDB4YjksIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4M2IsIDB4M2EsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5MiwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgwMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YmEsIDB4ODMsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGY0LCAweGJkLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4OTcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZSwgMHg4MCwgMHg4MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDdhLCAweGU4LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHhjMCwgMHgyOSwgMHgzNywKKwkweDYwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBkLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhlOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgwOCwgMHg4MCwgMHg3MiwgMHgzMiwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDU0LCAweGE4LCAweDVjLCAweDE2LCAweDM4LAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmMsIDB4YTgsIDB4ZGMsIDB4MTYsIDB4MzgsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4OCwgMHg0ZCwgMHg4NSwgMHgzYSwKKwkweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MTQsIDB4YTksIDB4OWMsIDB4ODcsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDcyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgzYywgMHgwMCwgMHgxNCwgMHgxOCwgMHg4MCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweGJiLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg3OCwgMHhjMCwgMHgyOSwgMHgzNywKKwkweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGEwLCAweDgxLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZDgsIDB4ZTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGQ4LCAweDYwLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGQwLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGRjLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweDQwLCAweDg1LCAweDNhLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyOCwgMHgwMCwgMHg4NCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MTQsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODgsIDB4MGQsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYxLCAweDg1LCAweDNhLAorCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHhkOCwgMHg2MCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKKwkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweGMwLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YjgsIDB4NjAsIDB4ODUsIDB4M2MsCisJMHgwNCwgMHgwMCwgMHhmMiwgMHgwMSwgMHg4MSwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4OCwgMHhjZCwgMHg3NCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDI4LCAweGY4LCAweGEwLCAweDc1LCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzQsIDB4MDgsIDB4ODAsIDB4NzUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOCwgMHhmOCwgMHhhMCwgMHg3NSwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA4LCAweGExLCAweDgyLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjIsIDB4NjAsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDdjLCAweDA4LCAweDgwLCAweDc1LCAweDMyLAorCTB4MDksIDB4MDAsIDB4ZjksIDB4MDEsIDB4MDQsIDB4MWEsIDB4MDAsIDB4NzAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4YjAsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHg4NywgMHhjZCwgMHg3NCwgMHgzMSwKKwkweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDMxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MjgsIDB4NDAsIDB4ODYsIDB4M2EsCisJMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDgyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGNkLCAweDg1LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTgsIDB4YTEsIDB4ODIsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHhjMCwgMHg4MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LCAweGUxLCAweDgxLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4MDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg1OCwgMHgwNywgMHg0MCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDhmLCAweDAxLCAweDAwLCAweDc0LCAweDE4LCAweDQwLCAweDg3LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHhmNywgMHhhMCwgMHg4NiwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweGEwLCAweDg2LCAweDNhLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NTgsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHg0MCwgMHg4NSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDUwLCAweDA3LCAweDgwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHhjNywgMHhlMSwgMHg3NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDc4LCAweGEwLCAweDg0LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZjksIDB4YTEsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDU4LCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTgsIDB4YTEsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDYwLCAweDg1LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDU3LCAweDIxLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4NjEsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MjEsIDB4ODAsIDB4M2EsCisJMHgwNywgMHgwMCwgMHgyNywgMHgwMiwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg3OSwgMHgwYSwgMHgwMiwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTAsIDB4ODEsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHgzYywKKwkweDAwLCAweDAwLCAweDQxLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NjAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDMyLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDNkLCAweDAyLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweGMwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDcxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDIsIDB4OTAsIDB4MTksIDB4MDAsIDB4MDQsIDB4ZTksIDB4NWMsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA3LCAweDgwLCAweDg2LCAweDMyLAorCTB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4OGMsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhjLCAweDA3LCAweDQwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDUsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKKwkweDAwLCAweDAwLCAweDViLCAweDAyLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDI3LCAweGU0LCAweDgyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMiwgMHgyNywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg1YiwgMHgwMiwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2NywgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDAxLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQ1LCAweDgxLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg3MiwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4M2EsCisJMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDMsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4NmUsIDB4YmQsCisJMHg3NywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHgwZCwgMHg5MCwgMHgzYSwKKwkweDJlLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyYiwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDM3LCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MzgsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg0MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA1LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDA0LCAweDAxLCAweDE0LCAweDU5LCAweGMwLCAweDZlLCAweGQ3LAorCTB4MDIsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MDQsIDB4YjgsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MSwgMHgwMiwgMHhiNSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDAwLCAweDgwLCAweGEwLCAweDM2LCAweDBiLCAweDZhLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDg1LCAweDJmLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4NmUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAzLCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAorCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKKwkweDFiLCAweDAwLCAweGFmLCAweDAyLCAweDM4LCAweDAxLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDc5LCAweDBiLCAweDE0LCAweDM4LAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4NWIsIDB4OTEsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHhiZSwgMHgwMiwgMHgzOCwgMHgyOCwgMHgwMCwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGI2LCAweDAyLCAweDA0LCAweDIxLCAweDAxLCAweDA4LCAweDY5LCAweDI0LCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGJhLCAweDAyLCAweDAyLCAweDMwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YjksIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA1LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDBhLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MGIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwOCwgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDA0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzUsIDB4MDIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4MGMsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM5LCAweDAyLCAweDA0LCAweDMxLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDIxLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4YTQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDIyLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjZiwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDIwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjEsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHhiOSwKKwkweDEwLCAweDAwLCAweGQ0LCAweDAyLCAweGM1LCAweDAxLCAweDAwLCAweGNjLCAweDAyLCAweDIwLCAweDE1LCAweDk4LAorCTB4MDgsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4YjksCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMiwgMHgyMCwgMHgxNSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDdlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHgwMCwgMHg4MCwgMHhkNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ZmEsIDB4ODUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhmYSwgMHg4NSwgMHhiYywKKwkweDAwLCAweDAwLCAweGRmLCAweDAyLCAweDM2LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MGUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHgwMCwgMHhhOSwgMHhkYiwgMHg4NSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDIsIDB4OGMsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg5NCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDk4LCAweDI4LCAweDgwLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MzgsIDB4MjIsIDB4MTQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwMiwgMHgwNCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDUsIDB4MDAsIDB4ZWUsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4ZTEsIDB4NmUsIDB4OTksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDc4LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTEsIDB4OTcsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgxNCwgMHgxMCwgMHhmNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg3MiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDAyLCAweGYyLAorCTB4MGQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwOSwgMHgwMCwgMHg4MCwgMHg1MiwgMHhiZCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweGZiLCAweDAyLCAweDMzLCAweDE1LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4NzIsIDB4YjYsCisJMHgwMSwgMHgwMSwgMHgwOCwgMHgwYSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwZCwgMHg3NCwgMHgzYywKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDBiLCAweDMxLCAweDAwLCAweDdjLCAweDA4LCAweDAwLCAweDc1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4OWYsIDB4ZjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhmYywgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMCwgMHg4OCwgMHgxOCwgMHgwMCwgMHg3NSwgMHg5YywKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDAxLCAweDcyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4NzUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDc0LCAweDM4LCAweGEyLCAweDc1LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4ODMsIDB4MWIsIDB4MDAsIDB4NzgsIDB4MDgsIDB4YzAsIDB4NzQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGYyLCAweDAyLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4NCwgMHhkMiwKKwkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODcsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHg5ZiwgMHg3OCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDlmLCAweDk5LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDMsIDB4OWYsIDB4NjgsIDB4MDEsIDB4NjQsIDB4ODgsIDB4NWIsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4YTQsIDB4YjIsIDB4NWIsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDE3LCAweDAzLCAweDA4LCAweDAxLCAweDAwLCAweDA0LCAweGU4LCAweGE1LCAweDc1LCAweGJjLAorCTB4MGYsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDlmLCAweDk4LCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDYsIDB4YjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwMywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAyLCAweGQ0LCAweDAxLCAweDgwLCAweDkyLCAweGZiLCAweDZlLCAweGJjLAorCTB4MTUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDFjLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NzIsIDB4NjEsIDB4ODAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDIxLCAweDAzLCAweDA2LCAweGE4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MDQsIDB4YTksIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHgwNCwgMHhhOSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDgwLCAweGJjLAorCTB4MTMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHg5ZiwgMHhhMCwgMHgwMSwgMHg3OCwgMHgyOSwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4NjAsIDB4ODAsIDB4YmMsCisJMHgwNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhiMiwKKwkweDAwLCAweGMwLCAweDI5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyOSwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg2MCwgMHg4MCwgMHhiYywKKwkweDA5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MDMsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwNywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDFmLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MWUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTIsIDB4ZDIsCisJMHgwZCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MjAsIDB4MTUsIDB4YjgsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDFkLCAweDAwLCAweDQ5LCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGUwLCAweDAwLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgxZCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MTQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhOCwgMHgwNSwgMHgyOCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgzNSwgMHgwMCwgMHg1NCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODEsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDJiLCAweDAwLCAweDlkLCAweDA1LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVhLCAweDAzLCAweDFkLCAweDQxLCAweDAyLCAweDVjLCAweGY4LCAweDAxLCAweDY4LCAweGI0LAorCTB4NDEsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4OTEsCisJMHgzNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweGMwLCAweDg1LCAweGQ3LAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDIsIDB4MDAsIDB4YTksIDB4ZGIsIDB4ODUsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhlMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHhhNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDJmLCAweDAwLCAweDkzLCAweDA1LCAweGQ3LCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDMsIDB4MDYsIDB4YTksIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDlmLCAweDg4LCAweDAxLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDQsIDB4ZjksIDB4YmEsIDB4NmUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg2YywgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDE5LCAweDgwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgzMCwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MTIsIDB4NzAsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgzMSwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHhjMCwgMHg3NCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDgxLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MmIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHg0ZCwgMHg4MSwgMHhkNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwMywgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHg1MiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MjUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgyNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweGQ4LCAweDFlLCAweDgwLCAweGVkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDMsIDB4YjcsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGUsIDB4YzAsIDB4ZWQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgzYiwgMHhlZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDFlLCAweDAwLCAweGVlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MGUsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MWUsIDB4MDAsIDB4ZWIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NiwgMHhjYywgMHgwMiwgMHg4MCwgMHg2YywgMHgzMiwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgzNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDk5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGM1LCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgxMiwgMHhjMCwgMHgyYywgMHgzYSwKKwkweDAwLCAweDAwLCAweDk1LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwOCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDlmLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTUsIDB4MDEsIDB4ODAsIDB4YjIsIDB4MWIsIDB4MmIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1NSwgMHgwMSwgMHg4MCwgMHhiMiwgMHgxYiwgMHgyYiwgMHhiYywKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKKwkweGIwLCAweDAzLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHg5OSwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwMywgMHg4YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNSwgMHgwMywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDg1LCAweDAxLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MzIsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDcwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgxNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE5LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4NjQsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhmYiwgMHgwMywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg5MCwgMHhiYSwKKwkweDI1LCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGYzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHg4MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDNmLCAweDgwLCAweGZjLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDAsIDB4MzgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDEzLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweGQwLCAweDEyLCAweDAwLCAweDJkLCAweGJjLAorCTB4NTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgxMiwgMHgwMCwgMHgyZCwgMHgzYSwKKwkweDRjLCAweDAwLCAweDFhLCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDJkLCAweGJjLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4YWUsIDB4MGQsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweGNjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODYsIDB4Y2MsIDB4MDcsIDB4ODAsIDB4MDAsIDB4M2EsCisJMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDQwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjksIDB4NDAsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgyNiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDk3LCAweGI2LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZTksIDB4ZTUsIDB4MDAsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI0LCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDgyLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJjLCAweDA0LCAweDhlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDM2LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NzMsIDB4ODAsIDB4OTcsIDB4MzQsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHg4MCwgMHg5NywgMHgzNCwKKwkweDA5LCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ZmUsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDA0LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzYiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDNlLCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMiwgMHgwMCwgMHgzOSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHgyNCwgMHgxNywgMHhiOCwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4OTcsIDB4YmMsCisJMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweGZlLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ3LCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwNiwgMHgwMCwgMHg1OSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHg2NCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgzMywgMHgwMCwgMHg3NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDExLCAweDAwLCAweDc0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MzksIDB4MDAsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHg1YSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg5MCwgMHgzYSwKKwkweDBkLCAweDAwLCAweDdjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAorCTB4MGQsIDB4MDAsIDB4OGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCisJMHgwZCwgMHgwMCwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweGEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHhiMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGJkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHg5MCwgMHg5ZCwKKwkweDAwLCAweDAwLCAweGQ4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MDAsIDB4OTIsCisJMHhkOCwgMHgwMCwgMHhmNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGZmLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGU4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOSwgMHg0MCwgMHg5MCwgMHg5NywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ODUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDE1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDI0LCAweDE2LCAweDk4LAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwZCwgMHgwMCwgMHgzMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweDMzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4M2YsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4MDAsIDB4YjAsCisJMHgwMiwgMHgwMCwgMHg4MCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDZiLCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHhiMCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCisJMHhiMCwgMHgwMywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4OTEsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4OTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyYiwgMHhiYywKKwkweGYxLCAweDBmLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMiwgMHgwMCwgMHg5OCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDliLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGExLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGIyLAorCTB4MWYsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4OTksCisJMHgwMCwgMHgwMCwgMHhhMCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDBhLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MGYsIDB4ODEsIDB4ZmMsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDQyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHgwMCwgMHg5MCwgMHgzYywKKwkweDEwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDBlLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDBmLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MGYsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDkwLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDkwLCAweDMyLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg0MCwgMHg5MCwgMHg5YywKKwkweDAwLCAweDAwLCAweGRiLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHhlNSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgxMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDFmLCAweDQwLCAweDkwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4YTQsIDB4OTcsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZSwgMHg4MCwgMHhlZSwgMHg5ZCwKKwkweDAwLCAweDAwLCAweGYyLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgxZSwgMHg0MCwgMHg5MCwgMHg5YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODYsIDB4YzAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHgzOCwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZmEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjQsIDB4ZjYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgzZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDQwLCAweDgwLCAweGZjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg3OSwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAyLCAweDAwLCAweGZjLCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgxZiwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHg5OSwKKwkweGVhLCAweDA1LCAweDA1LCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDAsIDB4MTUsIDB4MzIsCisJMHgwMCwgMHhmZSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweGYwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4OTgsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwYiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHg5NSwKKwkweDM2LCAweDIzLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4ODAsIDB4MTQsIDB4MzIsCisJMHgwMCwgMHhmOCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweGMwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4OTgsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDhmLCAweDRkLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4NjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg3YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE5LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDZmLCAweDgwLCAweGZjLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4OTAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg1ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTcsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4NDAsIDB4OTAsIDB4YjAsCisJMHg4MCwgMHgwMSwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4ZCwgMHhmYywgMHg5MSwKKwkweDAwLCAweDAwLCAweDE5LCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4N2YsIDB4ODAsIDB4ZmMsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg3ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDFjLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGYsIDB4ODAsIDB4ZmMsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDIwLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDQwLCAweDkwLCAweGI2LAorCTB4ZjEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxZiwgMHg4MSwgMHhmYywgMHg5NSwKKwkweDBlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MWYsIDB4ODEsIDB4ZmMsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwMiwgMHhmNSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweGY1LCAweGJkLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MjUsIDB4ZjUsIDB4YjUsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgxZiwgMHgyNCwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDAwLCAweGY1LCAweDljLAorCTB4ODAsIDB4MDEsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ZmMsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwNSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHhmNSwgMHgzYSwKKwkweDhjLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAzLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwNSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGU0LCAweDZlLCAweDNhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg2OSwgMHgwNSwgMHgxNywgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhkMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDUsIDB4MDQsIDB4MTksIDB4ODYsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNSwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIyLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNiwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIxLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDMsIDB4MGUsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4ZGMsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDgxLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgwLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHg4MiwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MGEsIDB4MzIsCisJMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NjksIDB4MDUsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NiwgMHgwNCwgMHgxOSwgMHg4MCwgMHg2YywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDBjLCAweGY3LCAweDdmLCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4ODYsIDB4ODAsIDB4NzIsIDB4ODIsIDB4NmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhhOCwgMHg0MiwgMHg4MCwgMHg2YywgMHgzNywKKwkweDAwLCAweDAwLCAweDc4LCAweDA1LCAweDEyLCAweDAwLCAweDcwLCAweDM4LCAweDAyLCAweDAwLCAweDdjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgzMCwgMHgwMiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDM0LCAweDAyLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmIsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODIsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHgyZiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGEyLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2EsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4MywgMHgwNSwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjOCwgMHg0NiwgMHg4MCwgMHgyYSwgMHg5NiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDQ2LCAweDgwLCAweDJhLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMywgMHgwMCwgMHg4MCwgMHgwNSwgMHgyMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGMwLCAweGQzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4M2MsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDJmLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4YTIsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHhjMCwgMHhlZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDBlLCAweDgwLCAweDAyLCAweDMyLAorCTB4NDAsIDB4N2UsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGUsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwZSwgMHg4MCwgMHgwNywgMHgzMiwKKwkweDY0LCAweDAwLCAweDhmLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAorCTB4NjQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZWQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwZSwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweGEwLCAweDhjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBlLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MGUsIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwZSwgMHg4MCwgMHgwMiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDMzLCAweDdiLCAweGVjLCAweDM5LAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg2ZSwgMHhjMCwgMHhlYywgMHgzNywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBlLCAweGMwLCAweGVkLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDFjLCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MmIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgzZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDM1LCAweDAwLCAweDljLCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHhjZCwgMHg4MSwgMHgzYywKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDFjLCAweDAxLCAweDE0LCAweDU5LCAweGU0LCAweDZlLCAweGQ5LAorCTB4YTQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTgsIDB4MDEsIDB4ODAsIDB4OTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4MTQsIDB4NzksIDB4ZTAsIDB4NmUsIDB4ZDksCisJMHhhNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg4MSwgMHgzYSwKKwkweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhmMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGZjLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MDUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDE3LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgyOSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDMyLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4M2IsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg0NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDRkLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NTYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg1ZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NzEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg3YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDgzLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OGMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5NSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4YTcsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhiMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGI5LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4YzIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhjYiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGQ0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZGQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhlNiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGVmLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDBhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MTMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgxYywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDI1LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MmUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgzNywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NDksIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg1NywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4NTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg1NywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDVjLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NjEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg2NiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDZiLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg3NSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDdhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4N2YsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDg5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OGUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5MywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDk4LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDcxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3OSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGRhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDg2LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGM5LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDRiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGI1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGNjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDMxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU1LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGU4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGVhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGMyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBmLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwNywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVmLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDA4LCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDk5LAorCTB4MDgsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4OTksCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDA4LCAweDAwLCAweGE3LCAweDA3LCAweDFkLCAweDE5LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDBmLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHg2ZSwgMHgzNSwKKwkweDU0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCisJMHhiNCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGMwLCAweDJjLCAweDM3LAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGI3LCAweDA3LCAweGI3LCAweDEwLCAweDAyLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhmZiwgMHg4MCwgMHhmYywgMHg5NCwKKwkweDAwLCAweDAwLCAweGJjLCAweDA3LCAweDlmLCAweDk5LCAweDAwLCAweDgwLCAweDgyLCAweDFiLCAweGVlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4ZTAsIDB4MGUsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHhjMSwgMHgwNywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg5MSwgMHhiYywKKwkweDAwLCAweDQwLCAweGMyLCAweDA3LCAweDAwLCAweDE4LCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDJjLCAweDkyLAorCTB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOSwgMHg4MCwgMHgwMywgMHgzMiwKKwkweDAwLCAweDAwLCAweGM1LCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDgwLCAweDMyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDAsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDI0LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MjgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMywgMHgwNywgMHg4MCwgMHgwZSwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDEsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg0MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyOCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweDAxLCAweDAwLCAweDFjLCAweGQ5LCAweGMxLCAweDkxLCAweDM0LAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDM0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwZCwgMHg5MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweGQ5LCAweDA3LCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDQyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCisJMHgwNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDksIDB4YzEsIDB4OTEsIDB4MzQsCisJMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKKwkweDA0LCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MjAsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHhlYywgMHg4NiwgMHhjZCwgMHg5MSwgMHgzYSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAyLCAweGU4LCAweDg2LCAweDI0LCAweDkwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4OTYsIDB4MjQsIDB4MTQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUzLCAweDA3LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YzAsIDB4MmMsIDB4MzcsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDEsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhmOSwgMHgwNywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MmMsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDJjLCAweDA5LCAweGMwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4NmUsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4YzAsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweDA2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDNiLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwZiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDE3LCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAorCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHgwMCwgMHg3OCwgMHhlMSwgMHg2ZSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4NzgsIDB4Y2EsIDB4ZTksIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg5MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MDgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDUwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGUwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg4MywgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGU1LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDNmLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzYSwgMHgwOCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDQ2LCAweDA4LCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhlMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4ZjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgxOCwgMHg4MSwgMHg4MywgMHgzNSwKKwkweDAwLCAweDAwLCAweDI4LCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDgsIDB4YTAsIDB4MjgsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDViLCAweDEwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MWQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwOCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDYyLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDYyLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1ZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGUwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZhLCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDgsIDB4YTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc0LCAweDA4LCAweDJhLCAweDVkLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDc0LCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKKwkweDEwLCAweDA0LCAweDc3LCAweDA4LCAweDM3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweGIxLAorCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdjLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDMsIDB4YmMsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHg2NywgMHhhMSwgMHg3MywgMHgzOSwKKwkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhlMCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDJhLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDA4LCAweDFkLCAweDAwLCAweDAwLCAweDM4LCAweDE4LCAweDgxLCAweDgzLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDgsIDB4MDQsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDA4LCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFlLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4YWMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDQwLCAweDAwLCAweDljLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDkwLCAweGJjLAorCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwOCwgMHgwMiwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4YzAsIDB4NmUsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgwMCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGI3LCAweDAxLCAweDc4LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHhhZSwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4ZmEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzYywgMHgxOCwgMHgyMCwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGIwLCAweDAwLCAweDNjLCAweDg4LCAweGRiLCAweDgzLCAweGJlLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDEsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNywgMHgyMCwgMHg3OCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDc4LCAweDAxLCAweGUwLCAweGY2LCAweDIwLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjgsIDB4NjAsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDJlLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMywgMHhiYywKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDE4LCAweDAwLCAweDgwLCAweDY3LCAweGExLCAweDczLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4MzIsCisJMHgzMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGI4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDgsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweGJiLCAweDA4LCAweDA0LCAweGQxLCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4MjYsIDB4YzAsIDB4NmUsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMwLCAweDA4LCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwOCwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MTAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4OWEsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgyZiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDk3LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc3LCAweDEwLCAweDAwLCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDgsIDB4MjMsIDB4MjksIDB4MDIsIDB4MDQsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDA4LCAweDAwLCAweGQ4LCAweDA4LCAweDFkLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwOCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4ODcsIDB4OGQsIDB4ODUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgxMiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAxLCAweDc4LCAweDA5LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ZGMsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTcsIDB4OTIsCisJMHgxMiwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDM1LCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGY2LCAweDA4LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDJmLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4MDgsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDYsIDB4MDksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBkLCAweDA5LCAweDA4LCAweGM5LCAweDAxLCAweGU4LCAweDA2LCAweGJiLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgzMiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDksIDB4MDgsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDMyLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDEsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MTcsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDEzLCAweDA5LCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4OTcsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHg0NCwgMHhlMiwgMHgyNSwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4NzksIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDMwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlmLCAweDQxLCAweDAxLCAweDgwLCAweDUyLCAweDIwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDksIDB4OWYsIDB4OTgsIDB4MDEsIDB4ODAsIDB4NTIsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4MmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHhhYSwgMHgwNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDM0LAorCTB4M2EsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDEwLCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkNSwgMHg0MSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4NzgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzNSwgMHgwOSwgMHgwNCwgMHhkNCwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDE5LCAweDgwLCAweDk3LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4MjUsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDM5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMiwgMHgwMCwgMHgzZiwgMHgwOSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHgwOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MiwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDk5LCAweGIxLCAweGYyLCAweGMwLCAweDdjLCAweDMwLAorCTB4MDAsIDB4YzAsIDB4NDgsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDUwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhhMiwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4ZTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAyLCAweDAwLCAweDU5LCAweDA5LCAweDA0LCAweGI5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwOSwgMHgxMiwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDU1LCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDk0LAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4NGMsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1ZCwgMHgwOSwgMHgxMiwgMHgzMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVlLCAweDA5LCAweDEyLCAweDM4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDksIDB4MTIsIDB4NDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgwOSwgMHgxMiwgMHg0OCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDYxLCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjIsIDB4MDksIDB4MTIsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MywgMHgwOSwgMHgxMiwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDY0LCAweDA5LCAweDEyLCAweDI4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAzLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MCwgMHgzZCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NTMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDZhLCAweDA5LCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDc0LCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgxNCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDEwLCAweDAwLCAweDgyLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHhjYSwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MmMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDI5LCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MjMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgzYywgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhjLCAweDA5LCAweDM4LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4YzAsIDB4OTksIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4ZmEsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwOSwgMHgzOCwgMHgwMSwgMHgwMCwgMHgyYywgMHhmOCwgMHgwMSwgMHgwYiwgMHhiNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA5LCAweDAyLCAweDBkLCAweDAyLCAweDgwLCAweGEyLCAweDViLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzgsIDB4YzEsIDB4ODIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhhOCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDksIDB4MjcsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHgwMCwgMHgyYywgMHhlOCwgMHhjMCwgMHg4MiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFiLCAweDA5LCAweDIzLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweGIyLAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgwOSwgMHgxZCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGIwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MTAsIDB4MDAsIDB4YjYsIDB4MDksIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4YjksCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg4ZSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4OGUsIDB4MzksIDB4MDAsIDB4MDAsIDB4YjcsIDB4YzEsIDB4ODIsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweGJhLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjZSwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxYywgMHg0MCwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweGQyLCAweDAxLCAweDAwLCAweDk0LCAweDFlLCAweDQwLCAweGU5LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGVlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1MSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlNCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGUxLCAweDA5LCAweDllLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgyYSwgMHgzMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAorCTB4YTQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDBjLCAweDAwLCAweGViLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwYSwgMHgzOCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDI1LCAweDBhLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MGEsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MTgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHhhNiwgMHgyMCwgMHgwMCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDBmLCAweDBhLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDExLCAweDBhLCAweDlmLCAweDAxLCAweDAwLCAweDA0LCAweDY4LCAweDYwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTgsIDB4MjAsIDB4MDAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDE0LCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDBkLCAweDBhLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDYwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDBkLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFmLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGEwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDI3LCAweDBhLCAweDAwLCAweDE4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MGEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDNlLCAweDUxLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHg2MCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDdiLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNhLCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweDAwLCAweGE0LCAweGE4LCAweDYwLCAweDhhLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHhjMCwgMHgzZSwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHgwMCwgMHhhNCwgMHhhOCwgMHg2MCwgMHg4YSwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGEsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDRhLCAweDBhLCAweDFmLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0YSwgMHgwYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHhmNiwgMHg2MCwgMHg4MCwgMHg5YywKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDQwLCAweDAyLCAweDE0LCAweDM5LCAweDlhLCAweGZlLCAweGQ4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYSwgMHgyYSwgMHhhOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MiwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4NGYsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDYxLCAweDBhLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MTgsIDB4MDAsIDB4NWEsIDB4MGEsIDB4MmUsIDB4NDksIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgwYSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHhlYywgMHg3NiwgMHgwMCwgMHgwMCwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MjAsIDB4ODAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCisJMHgxYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDBjLCAweDAwLCAweGExLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDg1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDllLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDgwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwYSwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZlLCAweDBhLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDcyLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MmEsIDB4MDAsIDB4NzgsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NzgsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc4LCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDg1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHg4MCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgwLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg4NiwgMHgwYSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGEsIDB4M2YsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4ZiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweGY4LCAweGYyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRhLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKKwkweDAwLCAweDAwLCAweGIwLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWUsIDB4MGEsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE3LCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFjLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwYSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGZhLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4MGEsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGJjLCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDQwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGJhLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhlMCwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMwLCAweDBhLCAweDA0LCAweDIxLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGEsIDB4MmEsIDB4MTEsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4ZTAsIDB4ODYsIDB4YmEsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweGM2LCAweDBhLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MGEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwOCwgMHgwMCwgMHhjYSwgMHgwYSwgMHgyMywgMHgxOSwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MGEsIDB4MWQsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjZSwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGQzLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHgyMCwgMHg2ZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweGE1LCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg4OCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGU0LCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlNSwgMHgwYSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGVhLCAweDBhLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGVjLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGYzLCAweDBhLCAweDNkLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MGEsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY1LAorCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGY4LCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhmZCwgMHgwYSwgMHgyOSwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHhjMCwgMHgyZCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDAxLCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4OWMsCisJMHgyYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4MDUsIDB4MGIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhhOSwgMHg2MCwgMHg4MCwgMHhkOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4MTUsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg2MCwgMHg4MCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyMSwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjAsIDB4ODAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgyNiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg2OCwgMHhhMCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgxNywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDJlLCAweDBiLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHg4MCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDNjLCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDM0LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgzYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOCwgMHg4MCwgMHg4NywgMHhmNSwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGE1LCAweDAyLCAweDIzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgzYywgMHgwMCwgMHhhNSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHg0YiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NWMsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYiwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDUzLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDM5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHgzOSwKKwkweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDZhLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDZlLCAweDBiLCAweDFkLCAweDIxLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDcxLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4NzQsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdhLCAweDBiLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweDdjLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHg3MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDlmLCAweGYwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4OWYsIDB4ZjgsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAxLCAweGUwLCAweDA2LCAweGMwLCAweDg3LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhkLCAweDBiLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgzYiwgMHgwMCwgMHg4ZCwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MGIsIDB4MjcsIDB4MDksIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4YjIsCisJMHgwMCwgMHhjMCwgMHg5NSwgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgyMCwgMHg4MCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHg5MiwKKwkweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDg4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHhjYSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwYiwgMHgxZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGExLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGFlLCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MGIsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweGM1LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgwYiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwYiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweGQxLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgwYiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHhkYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZTYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGI5LCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGIsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGY2LCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHhjMCwgMHhmNywgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MGIsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGZmLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDA3LCAweDBjLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweGY2LCAweDYwLCAweDgwLCAweDljLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDA2LCAweDBjLCAweDlmLCAweDMxLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHgwYywgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDA4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgwYywgMHgyMywgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYSwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwYywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDFjLCAweDBjLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MWMsIDB4MGMsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGMsIDB4MjksIDB4MzEsIDB4MDEsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgyYSwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGU0LCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyNywgMHgwYywgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDA5LCAweDQwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg3OCwgMHgwYiwgMHgxNiwgMHgzOCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDc4LCAweDBiLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4OCwgMHgwZCwgMHg4YiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGI0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGMsIDB4MDQsIDB4MzEsIDB4MDEsIDB4OTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg4ZCwgMHg4YSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGMyLCAweGEyLCAweDJjLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4NDMsIDB4MGMsIDB4ODYsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ODgsIDB4MGQsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQxLCAweDAyLCAweDgwLCAweGIyLCAweDNmLCAweDc4LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHgzYywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZDgsIDB4NjIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHgxYiwgMHg4OSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4OGQsIDB4OGEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMiwgMHhhMiwgMHgyYywgMHgzYSwKKwkweDE4LCAweDAwLCAweDRlLCAweDBjLCAweDg2LCAweDQxLCAweDAyLCAweDc4LCAweDg4LCAweDBkLCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ZTIsIDB4OGEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAorCTB4YjcsIDB4MDAsIDB4NDcsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwYywgMHgyOCwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweGQ4LCAweDYyLCAweDgwLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1NSwgMHgwYywgMHgwMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgxOCwgMHgyMCwgMHg4OSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHg0NywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDU4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDkwLCAweDE4LCAweDIwLCAweDg5LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NDgsIDB4NjIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg0OCwgMHg2MiwgMHg4YiwgMHhiYSwKKwkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDA4LCAweDFlLCAweGZmLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjIsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDhkLCAweDhhLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4YzIsIDB4YTIsIDB4MmMsIDB4M2EsCisJMHgxOCwgMHgwMCwgMHg4NywgMHgwYywgMHg4NiwgMHg0MCwgMHgwMiwgMHg3OCwgMHg4OCwgMHgwZCwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweGIwLAorCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MWUsIDB4ZmYsIDB4YjgsCisJMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg3MiwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAorCTB4MjAsIDB4ODAsIDB4NjQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMSwgMHgwYiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDgxLCAweDBjLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDEsIDB4NzAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDkzLCAweDBjLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDFiLCAweDg5LCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKKwkweGI3LCAweDAwLCAweDVhLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjcsIDB4MDAsIDB4OGMsIDB4MGMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGEyLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGMsIDB4MjMsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YjIsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDkwLCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMSwgMHg3MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDgsIDB4MDAsIDB4OTcsIDB4MGMsIDB4MjMsIDB4MTksIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDk5LCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhhZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDgyLCAweGI2LAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDY2LCAweDAwLCAweDAwLCAweDM0LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4MzksCisJMHgxYiwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGI2LCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhiZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDIwLCAweDAwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQxLCAweDAyLCAweDgwLCAweDA2LCAweGMwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDIyLCAweDBkLCAweDFmLCAweDIwLCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGQsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwYywgMHgwNCwgMHgzMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDgsIDB4MDgsIDB4ODAsIDB4NmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDYxLCAweDgwLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjEsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDMwLCAweDAxLCAweDQ4LCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MTgsIDB4YTAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGUxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHg0OCwgMHgxOCwgMHhhMCwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCisJMHgwNSwgMHgwMCwgMHhkZSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHg5OCwKKwkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweDE4LCAweGEwLCAweDg0LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMSwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgxYSwgMHhmZiwgMHhiOCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYwLCAweDgwLCAweDM5LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDEsIDB4MDIsIDB4OGMsIDB4ZTYsIDB4YTEsIDB4OTcsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHg4MCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZmUsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDBlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDA1LCAweDAwLCAweDFkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDk4LAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDFhLCAweDBkLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4YjQsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhjMCwgMHgyYywgMHgzNywKKwkweGI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MGQsIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgyMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHhhMiwgMHhjZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzOSwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NDMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHgwZCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MDIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAyLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGQsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MmQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGE5LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1NiwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDVhLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDVjLCAweDBkLCAweDA0LCAweDk4LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MTEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDgsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgzMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDZjLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MzYsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NzksIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4N2IsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgzMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZDUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDU4LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDgsIDB4NTksIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4OWMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhmYiwgMHg2ZSwgMHgzYSwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4MGQsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDE5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDMxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweGMwLCAweGFkLCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDlmLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YjIsIDB4MGQsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiMiwgMHgwZCwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKKwkweDM0LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgyYSwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4YmMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAxLCAweDM4LCAweDg4LCAweDFiLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NDgsIDB4MDEsIDB4MjgsIDB4ODgsIDB4MDQsIDB4NmUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwZCwgMHg4MCwgMHg1ZiwgMHgwMSwgMHg4MCwgMHg3MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMzLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MGQsIDB4ODAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4NjIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhhOSwgMHg4MSwgMHg5MiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGM5LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzksIDB4MGQsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MmEsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhkMiwgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgwMSwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHhmMCwgMHhlMSwgMHgwZCwgMHgxZCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhhOCwgMHgwZCwgMHg2OCwgMHhiMSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWUsIDB4NDAsIDB4MDIsIDB4ODQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGRlLCAweDBkLCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4YTIsIDB4MGQsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwZCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGUxLCAweDBkLCAweGI1LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MzYsIDB4MGIsIDB4NmEsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhlNiwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGU5LCAweDAxLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzksIDB4MGIsIDB4MmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMywgMHg4MSwgMHg5NywgMHgzNCwKKwkweDAwLCAweDAwLCAweGYxLCAweDBkLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweGE0LCAweDAzLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzMsIDB4MGIsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDI5LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDJjLCAweDMyLAorCTB4ZDksIDB4MDIsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHg0NiwgMHgwMywgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZjEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MDgsIDB4YjksIDB4YmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgwZSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHg4MSwgMHg2OCwgMHhiNiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDYxLCAweDgwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMiwgMHg4OCwgMHhlNiwgMHgyMSwgMHg5MSwgMHg3OSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE5LCAweGEwLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ZmYsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYywgMHgwZSwgMHgyYywgMHg0MSwgMHgwMiwgMHg3OCwgMHhmOSwgMHg4MSwgMHg2OCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDgxLCAweDk3LCAweDM0LAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHhjMCwgMHg4NSwgMHhkNywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDI5LCAweDFhLCAweGZmLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4YjksIDB4MWIsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MSwgMHgwMiwgMHg4OCwgMHgxNiwgMHhhMCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDI3LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OGEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg3NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MjMsIDB4MGUsIDB4MWUsIDB4MDEsIDB4MDAsIDB4MzQsIDB4NzksIDB4NjEsIDB4ODAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxZiwgMHg0MCwgMHhmNSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQwLCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YjksIDB4M2YsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgyNiwgMHgyNCwgMHg2ZSwgMHgzYSwKKwkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGE0LCAweGZlLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4OTAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDIxLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4NjEsIDB4OTMsIDB4NzksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4OTAsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4OTAsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwZSwgMHgwNiwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MCwgMHhiYywKKwkweDI2LCAweDAwLCAweDJlLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4OTIsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEwLCAweDAxLCAweDc4LCAweDg5LCAweDFiLCAweDkyLCAweDdhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NzgsIDB4ODksIDB4OWIsIDB4OTcsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHhmOSwgMHhiYSwgMHg2ZSwgMHgzNywKKwkweDAwLCAweDAwLCAweDM5LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODAsIDB4MmYsIDB4NzQsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweDMyLAorCTB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4OSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDQyLCAweDBlLCAweDA4LCAweDVkLCAweDAxLCAweGVjLCAweDE2LCAweDQwLCAweDg5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGUsIDB4MGIsIDB4NWQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHg3OCwgMHg4OSwgMHgxYiwgMHg4NywgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGExLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHg5ZiwgMHhmMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDlmLCAweGY4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MSwgMHhiYywKKwkweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4OWIsIDB4OTEsIDB4ZDksCisJMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDE0LCAweDg5LCAweDBkLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4ODksIDB4NWIsIDB4OTEsIDB4ZDIsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDJkLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGUsIDB4MDQsIDB4MjEsIDB4MDEsIDB4MzAsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5YiwgMHg5MSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDY2LCAweDBlLCAweDFmLCAweDQwLCAweDAyLCAweDI0LCAweDA5LCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4NDEsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiOSwgMHg3ZiwgMHg5MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTQsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTksIDB4YTQsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHg1YywgMHgwZSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHhhNCwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwZSwgMHgzOCwgMHg1MCwgMHgwMSwgMHg3OCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZiLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MjgsIDB4MDEsIDB4NzgsIDB4ZTksIDB4MjUsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg2OSwgMHhhNCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGUsIDB4MzgsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZiwgMHgwZSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDc3LCAweDBlLCAweDM4LCAweDUxLCAweDAxLCAweDAwLCAweGE5LCAweDliLCAweDkxLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDcyLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4NTAsIDB4MDEsIDB4ODAsIDB4YTIsIDB4NWIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3ZiwgMHgwZSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgyNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MjQsIDB4MDAsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhlLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODgsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4ZSwgMHgwZSwgMHg4MCwgMHg0MCwgMHgwMiwgMHg4MCwgMHhmMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDhjLCAweGI2LCAweGMxLCAweDY4LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5NywgMHhkMiwKKwkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDBiLCAweDE2LCAweDM4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NzksIDB4MGIsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHhlNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODksIDB4NGQsIDB4OTAsIDB4M2EsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MiwgMHgwZCwgMHg5MSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDEyLCAweGE0LCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OTksIDB4MGUsIDB4ODAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4MDEsIDB4N2MsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHg3OCwgMHhiOSwgMHgzZiwgMHg3YywgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OWIsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MTksIDB4MDAsIDB4OTEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDk0LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGU0LCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4MjQsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHhhNCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxOCwgMHgwMCwgMHhhNSwgMHgwZSwgMHgxZiwgMHg0MSwgMHgwMiwgMHg3OCwgMHg4OCwgMHhjZCwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHhmZiwgMHg2OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MWEsIDB4ZmYsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHhmZiwgMHg2OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwZSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIzLCAweDBlLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweGI2LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4YTksIDB4NjAsIDB4ODEsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhhMCwgMHg4MSwgMHg3YywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMxLCAweDBlLCAweDFiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ZTAsIDB4ODMsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4MzIsCisJMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHg4NiwgMHg4ZCwgMHgyZiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGIzLCAweGU0LCAweDM5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDMwLCAweDMwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4YTUsIDB4MDMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMywgMHgwYiwgMHgyZiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweDc2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGUzLCAweGE1LCAweDAzLCAweDc5LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkOCwgMHgwZSwgMHgyMCwgMHgwMCwgMHgwMSwgMHgyYywgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQ5LCAweDBlLCAweDAwLCAweDE2LCAweDg2LCAweGNjLCAweDA2LCAweGMwLCAweDkyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODYsIDB4Y2MsIDB4MDYsIDB4YzAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4ZSwgMHg5MiwgMHg1MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkZiwgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDk3LCAweGJjLAorCTB4ZGYsIDB4MGUsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAzLCAweDAwLCAweDM4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyNCwgMHhkOCwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweGU0LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDRkLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHhkZiwgMHgwZSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDBmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDgsIDB4MDUsIDB4MzAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGY3LCAweDBlLCAweDMyLCAweDBmLCAweDAxLCAweGJjLCAweDA4LCAweGMwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZGMsIDB4MDIsIDB4NDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgxZiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGY2LCAweDBlLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDIwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YTAsIDB4ZWEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHhlYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MjYsIDB4MDEsIDB4NmUsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhmYiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBlLCAweDgyLCAweDMyLAorCTB4MDAsIDB4ZTAsIDB4MDMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4YTIsIDB4MGQsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4MDAsIDB4ODIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg5LCAweDYwLCAweDM4LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTQsIDB4MTcsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBhLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYzLCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDA1LCAweDMwLCAweDMwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4YTQsIDB4MDMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhjZSwgMHgyYywgMHgzMiwKKwkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDBkLCAweDkwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHgzMiwKKwkweDFkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGE0LCAweDE3LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxMCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgwMSwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDE4LCAweDBmLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGYsIDB4MWQsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4MjAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4YiwgMHhlYSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweGVhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweDMyLAorCTB4ZWUsIDB4ZmYsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGVlLCAweGZmLCAweDhhLCAweDExLCAweDA0LCAweDExLCAweDAxLCAweDgwLCAweDgyLCAweDBkLCAweDZlLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OSwgMHg0ZCwgMHgwZCwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJiLCAweDBmLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwZiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweDAyLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzNSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDU4LCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgwZiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NTksIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NSwgMHgwZiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDY0LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwZiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg2ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTcsIDB4ZDIsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NzksIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDg0LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDRkLCAweDBmLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YTgsIDB4NjAsIDB4OGEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4YSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhkLCAweDBmLCAweDJmLCAweGE4LCAweDAxLCAweDIwLCAweDk5LCAweDIyLCAweDZlLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MiwgMHgwZiwgMHgyMywgMHgyMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwNCwgMHgyMSwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OWEsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg5OSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MTksIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHg3NSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGVlLCAweDA1LCAweGFmLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweGY1LCAweGJjLAorCTB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHgwOSwgMHg5MiwKKwkweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4MDksIDB4MzIsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhjMCwgMHg4NywgMHhjZCwgMHgwMCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYwLCAweGMwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHg5NywgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDUyLCAweDgyLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDgsIDB4YjEsIDB4MGYsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ODcsIDB4Y2QsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDJhLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2EsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKKwkweDAwLCAweDAwLCAweGJiLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweGJjLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZSwgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4OSwgMHg0ZCwgMHg5MiwgMHgzYywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDRkLCAweDkyLCAweDM2LAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODksIDB4NGQsIDB4OTIsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOCwgMHg5YiwgMHg4MSwgMHhiMiwgMHhlNCwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDliLCAweDhkLCAweGI3LCAweGU0LCAweDc4LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGUsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDU5LCAweDAwLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MGYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4ZGQsIDB4MGYsIDB4ODYsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDksIDB4ODAsIDB4MmYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGYsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhlNywgMHgwZiwgMHhjMywgMHgwNywgMHgwMSwgMHhlYywgMHhiNiwgMHhlNCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweGU3LCAweDBmLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweGI2LCAweGU0LCAweDZlLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODAsIDB4OTAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhmYSwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGZhLCAweDkyLCAweGJjLAorCTB4NDQsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4ZDIsCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDkyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ZTgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHhjMCwgMHhlOCwgMHgzMiwKKwkweDAyLCAweDAwLCAweGYxLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmNiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmOSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MzQsIDB4YjAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGZkLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDJiLCAweGI3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4ODQsIDB4YzAsIDB4MzcsIDB4YWMsIDB4YjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDRkLCAweGIwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDY5LCAweDgxLCAweDk3LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MGIsIDB4MDAsIDB4N2MsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGU0LCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTMsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGQsIDB4NDAsIDB4ZDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFkLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDM0LCAweGIwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDBkLCAweDQwLCAweGQwLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDg0LCAweGMwLCAweDM3LCAweGFjLCAweGIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHg0ZCwgMHhiMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI1LCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg2OSwgMHg4MSwgMHg5NywgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDBiLCAweDAwLCAweDdjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MjUsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg1NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MSwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg5MiwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDkyLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDk3LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4OTIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg5MiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM4LCAweDgwLCAweDg3LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2MsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHhlNSwgMHg4MywgMHgzOSwKKwkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQxLCAweDAyLCAweDg0LCAweGU2LCAweGExLCAweDk3LCAweGI5LAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MTAsIDB4MzYsIDB4NTEsIDB4MDEsIDB4ZTgsIDB4MTYsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgxMCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MTAsIDB4MzgsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMxLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NDEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NTcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHg5MiwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE5LCAweGEwLCAweDJjLCAweGQ5LAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTAsIDB4OWQsIDB4MTEsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MSwgMHgxMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MTAsIDB4MmMsIDB4Y2QsIDB4MDEsIDB4MTgsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjOSwgMHhjMSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDY3LCAweDEwLCAweDNiLCAweDI5LCAweDAyLCAweDA0LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NTIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHg1NiwgMHhjMCwgMHg2ZSwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGI5LCAweGMxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4MTAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgxMCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNywgMHhlMCwgMHg5MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg5MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHgxMCwgMHgzOSwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YzksIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMSwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc0LCAweDEwLCAweDNiLCAweDIxLCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MDAsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg3OCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3YiwgMHgxMCwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDc4LCAweDI5LCAweDAwLCAweDZlLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4N2IsIDB4MTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4YTUsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDc4LCAweDQ5LCAweDIxLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4M2YsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgxMCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHhiZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDU4LCAweGI4LCAweDliLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4YTEsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4OCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5NywgMHg3YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4NTgsIDB4YjgsIDB4OWIsIDB4OTAsIDB4NzYsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhiLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGIsIDB4MTAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4OTIsCisJMHgxNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHg2NSwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGEyLCAweDEwLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4MTAsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGE0LCAweDEwLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDdhLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHg4MCwgMHhhOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MCwKKwkweDAwLCAweDAwLCAweGI3LCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgxMCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAorCTB4M2IsIDB4MDAsIDB4YmEsIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGJhLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGJkLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweDcwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCisJMHgzYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCisJMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MSwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgxMCwgMHgwNCwgMHgzOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDEwLCAweDJlLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODEsIDB4OTIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhkNSwgMHgxMCwgMHgyNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODAsIDB4OTIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAwLCAweGU3LCAweGEwLCAweDkyLCAweDc5LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDkwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGRmLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgxMCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NzksIDB4MGEsIDB4OTEsIDB4MzksCisJMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzOSwgMHgwYiwgMHg5MSwgMHgzOSwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDU5LCAweDBhLCAweDkxLCAweDM5LAorCTB4MDksIDB4MDAsIDB4ZTUsIDB4MTAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NjksIDB4MGIsIDB4OTEsIDB4YjksCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NiwgMHhhOCwgMHg4MiwgMHg4ZCwgMHg2YywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGUwLCAweDA3LCAweDAwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHg4MCwgMHhlYiwgMHgxMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyYSwgMHhiYywKKwkweDAwLCAweDAwLCAweGVjLCAweDEwLCAweGUxLCAweDI0LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MjQsIDB4ODYsIDB4YzgsIDB4ODYsIDB4OGQsIDB4MmEsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MTAsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDNjLCAweDAwLCAweDE0LCAweDI4LCAweDgwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MTAsIDB4ODAsIDB4MzksIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4ZTAsIDB4ZmQsIDB4MTAsIDB4MDQsIDB4MzgsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4NmUsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHhmZCwgMHgxMCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhlMiwgMHhhNSwgMHgyZiwgMHhiOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGVlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MDAsIDB4MTgsIDB4MDksIDB4MDAsIDB4NmUsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDA5LCAweDAwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhiYywgMHgwMCwgMHgxNCwgMHgyOCwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgwOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MGYsIDB4MTEsIDB4MzMsIDB4Y2QsIDB4MDEsIDB4YmMsIDB4MDgsIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyOSwgMHgyMiwgMHhlZSwgMHhkYywKKwkweDAwLCAweDAwLCAweDE0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4MDQsIDB4YjgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHg5ZiwgMHg3MSwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGE5LCAweDI0LCAweGVlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NGUsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTksIDB4ODAsIDB4OTIsIDB4ZGYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI4LCAweDExLCAweDA2LCAweDgwLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTAsIDB4YmMsCisJMHhlZSwgMHgwNSwgMHgyMCwgMHgxMSwgMHgwNiwgMHgwYywgMHgwMiwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDkwLCAweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4NDAsIDB4M2MsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHg5YSwKKwkweDYwLCAweDg5LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjMsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgyMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTEsIDB4YTgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTksIDB4OGYsIDB4OTAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhhMSwgMHg4OSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHhjMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweGMwLCAweDg5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTEsIDB4MDQsIDB4NzksIDB4MDEsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgxMSwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4NzUsCisJMHgwMCwgMHgwMCwgMHgzYywgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDNjLCAweDExLCAweGQ1LCAweDQxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MTEsIDB4M2MsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDhiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHgzZCwgMHgxMSwgMHg5ZiwgMHg0MSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MCwgMHgyZiwgMHg3NCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4NywgMHhkMiwKKwkweDAwLCAweDAwLCAweDQ3LCAweDExLCAweDlmLCAweGQ4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgxMSwgMHg5ZiwgMHhlMCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTEsIDB4OWYsIDB4YjAsIDB4MDEsIDB4ODAsIDB4ZDIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDQ5LCAweDExLCAweDA2LCAweDY4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgxMSwgMHgzNywgMHhiMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4NywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgxMSwgMHgwNCwgMHhjMSwgMHgwMSwgMHg4NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGU4LCAweDg2LCAweDhkLCAweDkyLCAweDM3LAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4OGQsIDB4OTIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDJjLCAweDg5LCAweDhkLCAweDZlLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4MmMsIDB4YTksIDB4ZGIsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgyOSwgMHhjMCwgMHg5MiwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDE5LCAweGZiLCAweDkyLCAweDNmLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjksIDB4ODAsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhhOSwgMHhlNCwgMHg5MiwgMHgzZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZmLCAweGNjLCAweDAxLCAweGU4LCAweDI2LCAweGZiLCAweDkyLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMiwgMHg4MCwgMHg5MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDI4LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4Y2MsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4Y2QsIDB4MmEsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhiYywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGJjLCAweDg4LCAweGRiLCAweDhiLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4YmMsIDB4ODgsIDB4ZGIsIDB4OGIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4OCwgMHhlMSwgMHg4YiwgMHhiYywKKwkweDAwLCAweDAwLCAweDZhLCAweDExLCAweDA0LCAweDBjLCAweDAyLCAweDQwLCAweGE4LCAweGRiLCAweDhiLCAweGJlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MWIsIDB4ODQsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHg2OSwgMHgxMSwgMHgwNCwgMHhiMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGMyLCAweDgwLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4NWIsIDB4ODAsIDB4N2MsCisJMHgyOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDhiLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKKwkweGVlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweDcxLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhkOSwgMHg0YSwgMHg5MSwgMHgzOSwKKwkweDM5LCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDUsIDB4OTEsIDB4MzAsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHg0ZCwgMHg5MSwgMHgzNiwKKwkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweGNkLCAweDkzLCAweDNjLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4Y2QsIDB4OTMsIDB4MzYsCisJMHgwNywgMHgwMCwgMHg3OSwgMHgxMSwgMHhmMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4OSwgMHhjZCwgMHg5MywgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDE4LCAweDliLCAweDgxLCAweDAyLCAweGU1LCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MTgsIDB4OWIsIDB4OGQsIDB4MDcsIDB4ZTUsIDB4NzgsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZDksIDB4NGEsIDB4OTEsIDB4MzksCisJMHgzYSwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQ1LCAweDkxLCAweDMwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4NGQsIDB4OTEsIDB4MzYsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHhjZCwgMHg5MywgMHgzYywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweGNkLCAweDkzLCAweDM2LAorCTB4MDcsIDB4MDAsIDB4ODQsIDB4MTEsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODksIDB4Y2QsIDB4OTMsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOSwgMHg5YiwgMHg4MSwgMHgwMiwgMHhlNSwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDE4LCAweDliLCAweDhkLCAweDA3LCAweGU1LCAweDc4LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBmLCAweDQwLCAweGZiLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MGYsIDB4NDAsIDB4MTgsIDB4MzIsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDVmLCAweGNhLCAweGY5LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDQxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBmLCAweDgwLCAweDJhLCAweDMyLAorCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHg5OCwgMHgxMSwgMHg5NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwZiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDEsIDB4ODQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGZhLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZmIsIDB4MzIsCisJMHgwMSwgMHgwMCwgMHhjZiwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4ZiwgMHg0ZCwgMHhmYiwgMHhiMCwKKwkweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGNkLCAweGIwLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NWIsIDB4Y2EsIDB4YjAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHhmZSwgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHgwMCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNmLCAweDUyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgxNiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YjksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHgwZCwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweDBkLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM5LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NmIsIDB4NDEsIDB4OTAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM1LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhjOSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM4LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAyLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGJjLCAweDBmLCAweDI0LCAweDE3LCAweGI4LAorCTB4MDYsIDB4MDAsIDB4YzIsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NjQsIDB4MTYsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHhmYiwgMHhiYywKKwkweDIwLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZiLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhkMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHhmOSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGI3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAzLCAweDMyLAorCTB4NDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkZSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZGUsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUwLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDRjLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGIzLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4Y2IsIDB4YzEsIDB4YjAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4YjAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDIsIDB4MDAsIDB4ZjIsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGYsIDB4NGQsIDB4ZmIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MWYsIDB4NDAsIDB4ZmIsIDB4MzUsCisJMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGIsIDB4YzEsIDB4YjAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgxMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmYSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZhLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZjksIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhiNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGJkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGZmLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJjLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBjLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGZhLCAweGIyLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDFiLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4M2MsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHg4ZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHhiMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4ZiwgMHg0ZCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDgsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBlLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwYiwgMHgwMCwgMHgxNCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDI3LCAweDAwLCAweDE4LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBmLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgyMCwgMHgwMCwgMHgxZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGZhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg1YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHgzYSwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGFjLCAweDhmLCAweGNkLCAweGY5LCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4M2EsCisJMHgwZiwgMHgwMCwgMHgyYiwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHgyYiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4YzAsIDB4ZjksIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2EsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTIsIDB4ODQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHhjMCwgMHhmOSwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NzMsIDB4M2UsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDNhLAorCTB4NzAsIDB4MDAsIDB4M2IsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4YzAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg3MywgMHg3ZSwgMHhmYSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ODUsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwZSwgMHgwMCwgMHg1MywgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDRkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDNmLCAweGMwLCAweGY5LCAweDlhLAorCTB4MWMsIDB4MDAsIDB4NGQsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZiwgMHhjZCwgMHhmOSwgMHhkYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDBlLCAweDAwLCAweDViLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg5YSwKKwkweDI2LCAweDAwLCAweDU3LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwZiwgMHg0MCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg1NiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDI5LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4NmIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDZiLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4M2UsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHgzZSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDcxLCAweDEyLCAweDk3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDBmLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDcsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4MjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxZiwgMHgwMCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDgwLCAweDJhLCAweDkyLAorCTB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDg0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MWYsIDB4MDAsIDB4N2EsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4MjksIDB4YmMsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZiwgMHhjZCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDc2LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDgyLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhhLCAweGZhLCAweGJjLAorCTB4YTIsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg4MiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGEzLCAweDNlLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YTMsIDB4M2UsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NDAsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJmLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDJkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4ZmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2YsIDB4NTIsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmOCwgMHgzMiwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4YzAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDlmLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJiLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHhmYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweDAwLCAweGZiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGIxLCAweDEyLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGI1LCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZiwgMHg0MCwgMHhmYiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjYiwgMHhjMSwgMHhiMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHhiMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweGJlLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgzNCwgMHhiMCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHhjMCwgMHgzNywgMHhhYywgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4NGQsIDB4YjAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGNkLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgxMiwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQwLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MGQsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4YjgsCisJMHgwMiwgMHgwMCwgMHhjZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwZiwgMHgyNCwgMHgxNywgMHhiOCwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweDY0LCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YzAsIDB4ZmIsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKK30sCit7CisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKK30sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3MmExOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKQEAgLTAsMCArMSwzNjI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc3hnLmMKKyAqCisgKiBUaGUgU1hHIGRyaXZlciBmb3IgQWxhY3JpdGVjaCdzIDEwR2JlIHByb2R1Y3RzLgorICoKKyAqIE5PVEU6IFRoaXMgaXMgdGhlIHN0YW5kYXJkLCBub24tYWNjZWxlcmF0ZWQgdmVyc2lvbiBvZiBBbGFjcml0ZWNoJ3MKKyAqICAgICAgIElTLU5JQyBkcml2ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKworI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRAkJMAorI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkwCisjZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCTEKKyNkZWZpbmUgU1hHX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTAKKyNkZWZpbmUgU1hHX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCisjZGVmaW5lIFZQQ0kJCQkJMAorI2RlZmluZSBEQkcJCQkJMQorI2RlZmluZSBBVEtfREVCVUcJCQkxCisKKyNpbmNsdWRlICJzeGdfb3MuaCIKKyNpbmNsdWRlICJzeGdody5oIgorI2luY2x1ZGUgInN4Z2hpZi5oIgorI2luY2x1ZGUgInN4Zy5oIgorI2luY2x1ZGUgInN4Z2RiZy5oIgorCisjaW5jbHVkZSAic3hncGh5Y29kZS5oIgorI2luY2x1ZGUgInNhaGFyYWRiZ2Rvd25sb2FkLmgiCisKK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIFNpemUsCisJCQkJICAgICAgU1hHX0JVRkZFUl9UWVBFIEJ1ZmZlclR5cGUpOworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHZvaWQgKlJjdkJsb2NrLAorCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKKwkJCQkJICAgdTMyIExlbmd0aCk7CitzdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCQkgICAgIFBTWEdfU0NBVFRFUl9HQVRIRVIgU3hnU2dsLAorCQkJCQkgICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAorCQkJCQkgICAgIHUzMiBMZW5ndGgpOworCitzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKTsKKworc3RhdGljIGludCBzeGdfZW50cnlfb3BlbihwX25ldF9kZXZpY2UgZGV2KTsKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X2hhbHQocF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z19pb2N0bChwX25ldF9kZXZpY2UgZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgc3hnX3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwX25ldF9kZXZpY2UgZGV2KTsKK3N0YXRpYyBpbnQgc3hnX3RyYW5zbWl0X3BhY2tldChwX2FkYXB0ZXJfdCBhZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIHN4Z19kdW1iX3NnbChQU0NBVFRFUl9HQVRIRVJfTElTVCBwU2dsLCBQU1hHX1NDQVRURVJfR0FUSEVSIFN4Z1NnbCk7CisKK3N0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIGludCBzeGdfcHJvY2Vzc19pc3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIE1lc3NhZ2VJZCk7CitzdGF0aWMgdTMyIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBSc3NJZCk7CitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIFBTWEdfRVZFTlQgRXZlbnQpOworc3RhdGljIHZvaWQgc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBFcnJvclN0YXR1cyk7CitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJICAgcF9ldGhlcl9oZWFkZXIgRXRoZXJIZHIsIHVzaG9ydCBsZW5ndGgpOworCisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzeGdfZ2V0X3N0YXRzKHBfbmV0X2RldmljZSBkZXYpOworI2VuZGlmCisKKyNkZWZpbmUgWFhYVE9ETyAwCisKKyNpZiBYWFhUT0RPCitzdGF0aWMgaW50IHN4Z19tYWNfc2V0X2FkZHJlc3MocF9uZXRfZGV2aWNlIGRldiwgdm9pZCAqcHRyKTsKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbGlzdChwX25ldF9kZXZpY2UgZGV2KTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworCitzdGF0aWMgdm9pZCBzeGdfdW5tYXBfbW1pb19zcGFjZShwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKKworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpOworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9saW5rKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIGludCBzeGdfcGh5X2luaXQocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfbGlua19ldmVudChwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyBTWEdfTElOS19TVEFURSBzeGdfZ2V0X2xpbmtfc3RhdGUocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpOworc3RhdGljIGludCBzeGdfd3JpdGVfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyIFZhbHVlKTsKK3N0YXRpYyBpbnQgc3hnX3JlYWRfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgKnBWYWx1ZSk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3hnX2ZpcnN0X2luaXQgPSAxOworc3RhdGljIGNoYXIgKnN4Z19iYW5uZXIgPQorICAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyIGFuZCBTdG9yYWdlIDEwR2JlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworCitzdGF0aWMgaW50IHN4Z19kZWJ1ZyA9IDE7CitzdGF0aWMgaW50IGRlYnVnID0gLTE7CitzdGF0aWMgcF9uZXRfZGV2aWNlIGhlYWRfbmV0ZGV2aWNlID0gTlVMTDsKKworc3RhdGljIHN4Z2Jhc2VfZHJpdmVyX3Qgc3hnX2dsb2JhbCA9IHsKKwkuZHluYW1pY19pbnRhZ2cgPSAxLAorfTsKK3N0YXRpYyBpbnQgaW50YWdnX2RlbGF5ID0gMTAwOworc3RhdGljIHUzMiBkeW5hbWljX2ludGFnZyA9IDA7CisKKyNkZWZpbmUgRFJWX05BTUUJInN4ZyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMC4xIgorI2RlZmluZSBEUlZfQVVUSE9SCSJBbGFjcml0ZWNoLCBJbmMuIEVuZ2luZWVyaW5nIgorI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkFsYWNyaXRlY2ggU0xJQyBUZWNob25vbG9neSh0bSkgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIERyaXZlciIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0IDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKworTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZHluYW1pY19pbnRhZ2csIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR5bmFtaWNfaW50YWdnLCAiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gU2V0dGluZyIpOworbW9kdWxlX3BhcmFtKGludGFnZ19kZWxheSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50YWdnX2RlbGF5LCAidVNlYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gRGVsYXkiKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN4Z19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX0RFVklDRShTWEdfVkVORE9SX0lELCBTWEdfREVWSUNFX0lEKX0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN4Z19wY2lfdGJsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeGdfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgYm9vbCBmbHVzaCkKK3sKKwl3cml0ZWwodmFsdWUsIHJlZyk7CisJaWYgKGZsdXNoKQorCQltYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3hnX3JlZzY0X3dyaXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCQkJCSAgIHU2NCB2YWx1ZSwgdTMyIGNwdSkKK3sKKwl1MzIgdmFsdWVfaGlnaCA9ICh1MzIpICh2YWx1ZSA+PiAzMik7CisJdTMyIHZhbHVlX2xvdyA9ICh1MzIpICh2YWx1ZSAmIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2ssIGZsYWdzKTsKKwl3cml0ZWwodmFsdWVfaGlnaCwgKHZvaWQgX19pb21lbSAqKSgmYWRhcHRlci0+VWNvZGVSZWdzW2NwdV0uVXBwZXIpKTsKKwl3cml0ZWwodmFsdWVfbG93LCByZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPkJpdDY0UmVnTG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzeGdfaW5pdF9kcml2ZXIodm9pZCkKK3sKKwlpZiAoc3hnX2ZpcnN0X2luaXQpIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIHN4Z19maXJzdF9pbml0IHNldCBqaWZmaWVzWyVseF1cbiIsCisJCQkgIF9fZnVuY19fLCBqaWZmaWVzKTsKKwkJc3hnX2ZpcnN0X2luaXQgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzeGdfZGJnX21hY2FkZHJzKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJREJHX0VSUk9SKCIgICglcykgY3VyciAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCURCR19FUlJPUigiICAoJXMpIG1hYyAgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5tYWNhZGRyWzBdLAorCQkgIGFkYXB0ZXItPm1hY2FkZHJbMV0sIGFkYXB0ZXItPm1hY2FkZHJbMl0sCisJCSAgYWRhcHRlci0+bWFjYWRkclszXSwgYWRhcHRlci0+bWFjYWRkcls0XSwKKwkJICBhZGFwdGVyLT5tYWNhZGRyWzVdKTsKKwlyZXR1cm47Cit9CisKKy8qIFNYRyBHbG9iYWxzICovCitzdGF0aWMgU1hHX0RSSVZFUiBTeGdEcml2ZXI7CisKKyNpZmRlZiAgQVRLREJHCitzdGF0aWMgc3hnX3RyYWNlX2J1ZmZlcl90IExTeGdUcmFjZUJ1ZmZlcjsKKyNlbmRpZiAvKiBBVEtEQkcgKi8KK3N0YXRpYyBzeGdfdHJhY2VfYnVmZmVyX3QgKlN4Z1RyYWNlQnVmZmVyID0gTlVMTDsKKworLyoKKyAqIHN4Z19kb3dubG9hZF9taWNyb2NvZGUKKyAqCisgKiBEb3dubG9hZCBNaWNyb2NvZGUgdG8gU2FoYXJhIGFkYXB0ZXIKKyAqCisgKiBBcmd1bWVudHMgLQorICoJCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJCVVjb2RlU2VsCS0gbWljcm9jb2RlIGZpbGUgc2VsZWN0aW9uCisgKgorICogUmV0dXJuCisgKglpbnQKKyAqLworc3RhdGljIGJvb2wgc3hnX2Rvd25sb2FkX21pY3JvY29kZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCBTWEdfVUNPREVfU0VMIFVjb2RlU2VsKQoreworCVBTWEdfSFdfUkVHUyBId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJdTMyIFNlY3Rpb247CisJdTMyIFRoaXNTZWN0aW9uU2l6ZTsKKwl1MzIgKkluc3RydWN0aW9uID0gTlVMTDsKKwl1MzIgQmFzZUFkZHJlc3MsIEFkZHJlc3NPZmZzZXQsIEFkZHJlc3M7CisvKiAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlOyAqLworCXUzMiBWYWx1ZVJlYWQ7CisJdTMyIGk7CisJdTMyIG51bVNlY3Rpb25zID0gMDsKKwl1MzIgc2VjdGlvblNpemVbMTZdOworCXUzMiBzZWN0aW9uU3RhcnRbMTZdOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRG5sZFVjb2QiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUlxuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChVY29kZVNlbCkgeworCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToJLyogU2FoYXJhIG9wZXJhdGlvbmFsIHVjb2RlICovCisJCW51bVNlY3Rpb25zID0gU051bVNlY3Rpb25zOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtU2VjdGlvbnM7IGkrKykgeworCQkJc2VjdGlvblNpemVbaV0gPSBTU2VjdGlvblNpemVbaV07CisJCQlzZWN0aW9uU3RhcnRbaV0gPSBTU2VjdGlvblN0YXJ0W2ldOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogV29haCwgYmlnIGVycm9yIHdpdGggdGhlIG1pY3JvY29kZSFcbiIpOworCQlicmVhazsKKwl9CisKKwlEQkdfRVJST1IoInN4ZzogUkVTRVQgVEhFIENBUkRcbiIpOworCS8qIEZpcnN0LCByZXNldCB0aGUgY2FyZCAqLworCVdSSVRFX1JFRyhId1JlZ3MtPlJlc2V0LCAweERFQUQsIEZMVVNIKTsKKworCS8qIERvd25sb2FkIGVhY2ggc2VjdGlvbiBvZiB0aGUgbWljcm9jb2RlIGFzIHNwZWNpZmllZCBpbiAqLworCS8qIGl0cyBkb3dubG9hZCBmaWxlLiAgVGhlICpkb3dubG9hZC5jIGZpbGUgaXMgZ2VuZXJhdGVkIHVzaW5nICovCisJLyogdGhlIHNhaGFyYW9ianRvYyBmYWNpbGl0eSB3aGljaCBjb252ZXJ0cyB0aGUgbWV0YXN0ZXAgLm9iaiAqLworCS8qIGZpbGUgdG8gYSAuYyBmaWxlIHdoaWNoIGNvbnRhaW5zIGEgdHdvIGRpbWVudGlvbmFsIGFycmF5LiAqLworCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1TZWN0aW9uczsgU2VjdGlvbisrKSB7CisJCURCR19FUlJPUigic3hnOiBTRUNUSU9OICMgJWRcbiIsIFNlY3Rpb24pOworCQlzd2l0Y2ggKFVjb2RlU2VsKSB7CisJCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToKKwkJCUluc3RydWN0aW9uID0gKHUzMiAqKSAmIFNhaGFyYVVDb2RlW1NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCQlCYXNlQWRkcmVzcyA9IHNlY3Rpb25TdGFydFtTZWN0aW9uXTsKKwkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJZm9yIChBZGRyZXNzT2Zmc2V0ID0gMDsgQWRkcmVzc09mZnNldCA8IFRoaXNTZWN0aW9uU2l6ZTsKKwkJICAgICBBZGRyZXNzT2Zmc2V0KyspIHsKKwkJCUFkZHJlc3MgPSBCYXNlQWRkcmVzcyArIEFkZHJlc3NPZmZzZXQ7CisJCQlBU1NFUlQoKEFkZHJlc3MgJiB+TUlDUk9DT0RFX0FERFJFU1NfTUFTSykgPT0gMCk7CisJCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDMxIC0gMCAqLworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCAqSW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKwkJCS8qIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgNjMtMzIgKi8KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YU1pZGRsZSwgKihJbnN0cnVjdGlvbiArIDEpLAorCQkJCSAgRkxVU0gpOworCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NCAqLworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhSGlnaCwgKihJbnN0cnVjdGlvbiArIDIpLAorCQkJCSAgRkxVU0gpOworCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB3aXRoIHRoZSBXUklURSBiaXQgc2V0ICovCisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZUFkZHIsCisJCQkJICAoQWRkcmVzcyB8IE1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFKSwgRkxVU0gpOworCQkJLyogU2FoYXJhIGJ1ZyBpbiB0aGUgdWNvZGUgZG93bmxvYWQgbG9naWMgLSB0aGUgd3JpdGUgdG8gRGF0YUxvdyAqLworCQkJLyogZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIGNvdWxkIGdldCBjb3JydXB0ZWQuICBUbyBhdm9pZCB0aGlzLCAqLworCQkJLyogd3JpdGUgdG8gRGF0YUxvdyBhZ2FpbiBmb3IgdGhpcyBpbnN0cnVjdGlvbiAod2hpY2ggbWF5IGdldCAqLworCQkJLyogY29ycnVwdGVkLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIpLCB0aGVuIGluY3JlbWVudCB0aGUgYWRkcmVzcyAqLworCQkJLyogYW5kIHdyaXRlIHRoZSBkYXRhIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0byBEYXRhTG93LiAgVGhhdCAqLworCQkJLyogd3JpdGUgc2hvdWxkIHN1Y2NlZWQuICovCisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFMb3csICpJbnN0cnVjdGlvbiwgVFJVRSk7CisJCQkvKiBBZHZhbmNlIDMgdTMyUyB0byBzdGFydCBvZiBuZXh0IGluc3RydWN0aW9uICovCisJCQlJbnN0cnVjdGlvbiArPSAzOworCQl9CisJfQorCS8qIE5vdyByZXBlYXQgdGhlIGVudGlyZSBvcGVyYXRpb24gcmVhZGluZyB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBhbmQgKi8KKwkvKiBjaGVja2luZyBmb3IgcGFyaXR5IGVycm9ycyAqLworCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1TZWN0aW9uczsgU2VjdGlvbisrKSB7CisJCURCR19FUlJPUigic3hnOiBjaGVjayBTRUNUSU9OICMgJWRcbiIsIFNlY3Rpb24pOworCQlzd2l0Y2ggKFVjb2RlU2VsKSB7CisJCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToKKwkJCUluc3RydWN0aW9uID0gKHUzMiAqKSAmIFNhaGFyYVVDb2RlW1NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCQlCYXNlQWRkcmVzcyA9IHNlY3Rpb25TdGFydFtTZWN0aW9uXTsKKwkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJZm9yIChBZGRyZXNzT2Zmc2V0ID0gMDsgQWRkcmVzc09mZnNldCA8IFRoaXNTZWN0aW9uU2l6ZTsKKwkJICAgICBBZGRyZXNzT2Zmc2V0KyspIHsKKwkJCUFkZHJlc3MgPSBCYXNlQWRkcmVzcyArIEFkZHJlc3NPZmZzZXQ7CisJCQkvKiBXcml0ZSB0aGUgYWRkcmVzcyB3aXRoIHRoZSBSRUFEIGJpdCBzZXQgKi8KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwKKwkJCQkgIChBZGRyZXNzIHwgTUlDUk9DT0RFX0FERFJFU1NfUkVBRCksIEZMVVNIKTsKKwkJCS8qIFJlYWQgaXQgYmFjayBhbmQgY2hlY2sgcGFyaXR5IGJpdC4gKi8KKwkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVBZGRyLCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAmIE1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWSkgeworCQkJCURCR19FUlJPUigic3hnOiAlcyBQQVJJVFkgRVJST1JcbiIsCisJCQkJCSAgX19mdW5jX18pOworCisJCQkJcmV0dXJuIChGQUxTRSk7CS8qIFBhcml0eSBlcnJvciAqLworCQkJfQorCQkJQVNTRVJUKChWYWx1ZVJlYWQgJiBNSUNST0NPREVfQUREUkVTU19NQVNLKSA9PSBBZGRyZXNzKTsKKwkJCS8qIFJlYWQgdGhlIGluc3RydWN0aW9uIGJhY2sgYW5kIGNvbXBhcmUgKi8KKwkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAhPSAqSW5zdHJ1Y3Rpb24pIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBMT1dcbiIsCisJCQkJCSAgX19mdW5jX18pOworCQkJCXJldHVybiAoRkFMU0UpOwkvKiBNaXNjb21wYXJlICovCisJCQl9CisJCQlSRUFEX1JFRyhId1JlZ3MtPlVjb2RlRGF0YU1pZGRsZSwgVmFsdWVSZWFkKTsKKwkJCWlmIChWYWx1ZVJlYWQgIT0gKihJbnN0cnVjdGlvbiArIDEpKSB7CisJCQkJREJHX0VSUk9SKCJzeGc6ICVzIE1JU0NPTVBBUkUgTUlERExFXG4iLAorCQkJCQkgIF9fZnVuY19fKTsKKwkJCQlyZXR1cm4gKEZBTFNFKTsJLyogTWlzY29tcGFyZSAqLworCQkJfQorCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZURhdGFIaWdoLCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAhPSAqKEluc3RydWN0aW9uICsgMikpIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBISUdIXG4iLAorCQkJCQkgIF9fZnVuY19fKTsKKwkJCQlyZXR1cm4gKEZBTFNFKTsJLyogTWlzY29tcGFyZSAqLworCQkJfQorCQkJLyogQWR2YW5jZSAzIHUzMlMgdG8gc3RhcnQgb2YgbmV4dCBpbnN0cnVjdGlvbiAqLworCQkJSW5zdHJ1Y3Rpb24gKz0gMzsKKwkJfQorCX0KKworCS8qIEV2ZXJ5dGhpbmcgT0ssIEdvLiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwgTUlDUk9DT0RFX0FERFJFU1NfR08sIEZMVVNIKTsKKworCS8qIFBvbGwgdGhlIENhcmRVcCByZWdpc3RlciB0byB3YWl0IGZvciBtaWNyb2NvZGUgdG8gaW5pdGlhbGl6ZSAqLworCS8qIEdpdmUgdXAgYWZ0ZXIgMTAsMDAwIGF0dGVtcHMgKDUwMG1zKS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworCQl1ZGVsYXkoNTApOworCQlSRUFEX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ2FyZFVwLCBWYWx1ZVJlYWQpOworCQlpZiAoVmFsdWVSZWFkID09IDB4Q0FGRSkgeworCQkJREJHX0VSUk9SKCJzeGc6ICVzIEJPTyBZQSAweENBRkVcbiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IDEwMDAwKSB7CisJCURCR19FUlJPUigic3hnOiAlcyBUSU1FT1VUXG4iLCBfX2Z1bmNfXyk7CisKKwkJcmV0dXJuIChGQUxTRSk7CS8qIFRpbWVvdXQgKi8KKwl9CisJLyogTm93IHdyaXRlIHRoZSBMb2FkU3luYyByZWdpc3Rlci4gIFRoaXMgaXMgdXNlZCB0byAqLworCS8qIHN5bmNocm9uaXplIHdpdGggdGhlIGNhcmQgc28gaXQgY2FuIHNjcmliYmxlIG9uIHRoZSBtZW1vcnkgKi8KKwkvKiB0aGF0IGNvbnRhaW5lZCAweENBRkUgZnJvbSB0aGUgIkNhcmRVcCIgc3RlcCBhYm92ZSAqLworCWlmIChVY29kZVNlbCA9PSBTWEdfVUNPREVfU0FIQVJBKSB7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uTG9hZFN5bmMsIDAsIEZMVVNIKTsKKwl9CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRG5sZFVjZCIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAoVFJVRSk7Cit9CisKKy8qCisgKiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzIC0gQWxsb2NhdGUgbWVtb3J5IGFuZCBsb2NrcworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBpOworCXUzMiBSc3NJZHMsIElzckNvdW50OworLyogICAgICBQU1hHX1hNVF9SSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbXRSaW5nOyAqLworLyogICAgICBQU1hHX1JDVl9SSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSY3ZSaW5nOyAqLworCisJREJHX0VSUk9SKCIlcyBFTlRFUlxuIiwgX19mdW5jX18pOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NSZXMiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJLyogV2luZG93cyB0ZWxscyB1cyBob3cgbWFueSBDUFVzIGl0IHBsYW5zIHRvIHVzZSBmb3IgKi8KKwkvKiBSU1MgKi8KKwlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKKwlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCisJREJHX0VSUk9SKCIlcyBTZXR1cCB0aGUgc3BpbmxvY2tzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBBbGxvY2F0ZSBzcGlubG9ja3MgYW5kIGluaXRpYWxpemUgbGlzdGhlYWRzIGZpcnN0LiAqLworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+WG10WmVyb0xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisKKwlEQkdfRVJST1IoIiVzIFNldHVwIHRoZSBsaXN0c1xuIiwgX19mdW5jX18pOworCisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkFsbFJjdkJsb2Nrcyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlU2dsQnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKKworCS8qIE1hcmsgdGhlc2UgYmFzaWMgYWxsb2NhdGlvbnMgZG9uZS4gIFRoaXMgZmxhZ3MgZXNzZW50aWFsbHkgKi8KKwkvKiB0ZWxscyB0aGUgU3hnRnJlZVJlc291cmNlcyByb3V0aW5lIHRoYXQgaXQgY2FuIGdyYWIgc3BpbmxvY2tzICovCisJLyogYW5kIHJlZmVyZW5jZSBsaXN0aGVhZHMuICovCisJYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9IFRSVUU7CisJLyogTWFpbiBhbGxvY2F0aW9uIGxvb3AuICBTdGFydCB3aXRoIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSAqLworCS8qIHRoZSBtaWNyb2NvZGUgYW5kIGJhY2sgb2ZmIGlmIG1lbW9yeSBhbGxvY2F0aW9uICovCisJLyogZmFpbHMuICBJZiB3ZSBoaXQgYSBtaW5pbXVtLCBmYWlsLiAqLworCisJZm9yICg7OykgeworCQlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIFhtdFJpbmdzIHNpemVbJXhdXG4iLCBfX2Z1bmNfXywKKwkJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKFNYR19YTVRfUklORykgKiAxKSk7CisKKwkJLyogU3RhcnQgd2l0aCBiaWcgaXRlbXMgZmlyc3QgLSByZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncy4gIEF0IHRoZSBtb21lbnQgKi8KKwkJLyogSSdtIGdvaW5nIHRvIGtlZXAgdGhlIHJpbmcgc2l6ZSBmaXhlZCBhbmQgYWRqdXN0IHRoZSBudW1iZXIgb2YgKi8KKwkJLyogVENCcyBpZiB3ZSBmYWlsLiAgTGF0ZXIgd2UgbWlnaHQgY29uc2lkZXIgcmVkdWNpbmcgdGhlIHJpbmcgc2l6ZSBhcyB3ZWxsLi4gKi8KKwkJYWRhcHRlci0+WG10UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkJIHNpemVvZihTWEdfWE1UX1JJTkcpICoKKwkJCQkJCQkgMSwKKwkJCQkJCQkgJmFkYXB0ZXItPlBYbXRSaW5ncyk7CisJCURCR19FUlJPUigiJXMgWG10UmluZ3NbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+WG10UmluZ3MpOworCisJCWlmICghYWRhcHRlci0+WG10UmluZ3MpIHsKKwkJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKKwkJfQorCQltZW1zZXQoYWRhcHRlci0+WG10UmluZ3MsIDAsIHNpemVvZihTWEdfWE1UX1JJTkcpICogMSk7CisKKwkJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBSY3ZSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCisJCQkgICh1bnNpZ25lZCBpbnQpKHNpemVvZihTWEdfUkNWX1JJTkcpICogMSkpOworCQlhZGFwdGVyLT5SY3ZSaW5ncyA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCSBzaXplb2YoU1hHX1JDVl9SSU5HKSAqIDEsCisJCQkJCSAmYWRhcHRlci0+UFJjdlJpbmdzKTsKKwkJREJHX0VSUk9SKCIlcyBSY3ZSaW5nc1slcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5SY3ZSaW5ncyk7CisJCWlmICghYWRhcHRlci0+UmN2UmluZ3MpIHsKKwkJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKKwkJfQorCQltZW1zZXQoYWRhcHRlci0+UmN2UmluZ3MsIDAsIHNpemVvZihTWEdfUkNWX1JJTkcpICogMSk7CisJCWJyZWFrOworCisJICAgICAgcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDoKKwkJLyogYW4gYWxsb2NhdGlvbiBmYWlsZWQuICBGcmVlIGFueSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zLiAqLworCQlpZiAoYWRhcHRlci0+WG10UmluZ3MpIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgc2l6ZW9mKFNYR19YTVRfUklORykgKiA0MDk2LAorCQkJCQkgICAgYWRhcHRlci0+WG10UmluZ3MsCisJCQkJCSAgICBhZGFwdGVyLT5QWG10UmluZ3MpOworCQkJYWRhcHRlci0+WG10UmluZ3MgPSBOVUxMOworCQl9CisJCWlmIChhZGFwdGVyLT5SY3ZSaW5ncykgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCSAgICBzaXplb2YoU1hHX1JDVl9SSU5HKSAqIDQwOTYsCisJCQkJCSAgICBhZGFwdGVyLT5SY3ZSaW5ncywKKwkJCQkJICAgIGFkYXB0ZXItPlBSY3ZSaW5ncyk7CisJCQlhZGFwdGVyLT5SY3ZSaW5ncyA9IE5VTEw7CisJCX0KKwkJLyogTG9vcCBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4uLi4gKi8KKwl9CisKKwlEQkdfRVJST1IoIiVzIEluaXRpYWxpemUgUkNWIFpFUk8gYW5kIFhNVCBaRVJPIHJpbmdzXG4iLCBfX2Z1bmNfXyk7CisJLyogSW5pdGlhbGl6ZSByY3YgemVybyBhbmQgeG10IHplcm8gcmluZ3MgKi8KKwlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbywgU1hHX1JDVl9SSU5HX1NJWkUpOworCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+WG10UmluZ1plcm9JbmZvLCBTWEdfWE1UX1JJTkdfU0laRSk7CisKKwkvKiBTYW5pdHkgY2hlY2sgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZSBmb3JtYXQgKi8KKwlBU1NFUlQoKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRSkgfHwKKwkgICAgICAgKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKKwlBU1NFUlQoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykgPT0KKwkgICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUpOworCisJLyogQWxsb2NhdGUgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXZSBhbGxvY2F0ZSBhIGJsb2NrIG9mIGJ1ZmZlcnMgYW5kICovCisJLyogYSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgYmxvY2sgYXQgb25jZS4gIFNlZSBzeGdody5oOlNYR19SQ1ZfQkxPQ0sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUzsKKwkgICAgIGkgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spIHsKKwkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgorCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKKwkJCQkJICAgU1hHX0JVRkZFUl9UWVBFX1JDVik7CisJfQorCS8qIE5CTCByZXNvdXJjZSBhbGxvY2F0aW9uIGNhbiBmYWlsIGluIHRoZSAnQWxsb2NhdGVDb21wbGV0ZScgcm91dGluZSwgd2hpY2ggKi8KKwkvKiBkb2Vzbid0IHJldHVybiBzdGF0dXMuICBNYWtlIHN1cmUgd2UgZ290IHRoZSBudW1iZXIgb2YgYnVmZmVycyB3ZSByZXF1ZXN0ZWQgKi8KKwlpZiAoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUykgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y2IiwKKwkJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBTWEdfTUFYX0VOVFJJRVMsCisJCQkgIDApOworCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOworCX0KKworCURCR19FUlJPUigiJXMgQWxsb2NhdGUgRXZlbnRSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCisJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcykpOworCisJLyogQWxsb2NhdGUgZXZlbnQgcXVldWVzLiAqLworCWFkYXB0ZXItPkV2ZW50UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkgICBzaXplb2YoU1hHX0VWRU5UX1JJTkcpICoKKwkJCQkJCSAgIFJzc0lkcywKKwkJCQkJCSAgICZhZGFwdGVyLT5QRXZlbnRSaW5ncyk7CisKKwlpZiAoIWFkYXB0ZXItPkV2ZW50UmluZ3MpIHsKKwkJLyogQ2FsbGVyIHdpbGwgY2FsbCBTeGdGcmVlQWRhcHRlciB0byBjbGVhbiB1cCBhYm92ZSBhbGxvY2F0aW9ucyAqLworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y4IiwKKwkJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKKwkJc3RhdHVzID0gU1RBVFVTX1JFU09VUkNFUzsKKwkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCX0KKwltZW1zZXQoYWRhcHRlci0+RXZlbnRSaW5ncywgMCwgc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcyk7CisKKwlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIElTUiBzaXplWyV4XVxuIiwgX19mdW5jX18sIElzckNvdW50KTsKKwkvKiBBbGxvY2F0ZSBJU1IgKi8KKwlhZGFwdGVyLT5Jc3IgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCSAgICBJc3JDb3VudCwgJmFkYXB0ZXItPlBJc3IpOworCWlmICghYWRhcHRlci0+SXNyKSB7CisJCS8qIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUgYWxsb2NhdGlvbnMgKi8KKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGOSIsCisJCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CisJCXN0YXR1cyA9IFNUQVRVU19SRVNPVVJDRVM7CisJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKKwl9CisJbWVtc2V0KGFkYXB0ZXItPklzciwgMCwgc2l6ZW9mKHUzMikgKiBJc3JDb3VudCk7CisKKwlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIHNoYXJlZCBYTVQgcmluZyB6ZXJvIGluZGV4IGxvY2F0aW9uIHNpemVbJXhdXG4iLAorCQkgIF9fZnVuY19fLCAodW5zaWduZWQgaW50KXNpemVvZih1MzIpKTsKKworCS8qIEFsbG9jYXRlIHNoYXJlZCBYTVQgcmluZyB6ZXJvIGluZGV4IGxvY2F0aW9uICovCisJYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJCQkgc2l6ZW9mKHUzMiksCisJCQkJCQkJICZhZGFwdGVyLT4KKwkJCQkJCQkgUFhtdFJpbmdaZXJvSW5kZXgpOworCWlmICghYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCkgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0YxMCIsCisJCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CisJCXN0YXR1cyA9IFNUQVRVU19SRVNPVVJDRVM7CisJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKKwl9CisJbWVtc2V0KGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgsIDAsIHNpemVvZih1MzIpKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbGNSZXNTIiwKKwkJICBhZGFwdGVyLCBTWEdfTUFYX0VOVFJJRVMsIDAsIDApOworCisJREJHX0VSUk9SKCIlcyBFWElUXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfY29uZmlnX3BjaSAtCisgKgorICogU2V0IHVwIFBDSSBDb25maWd1cmF0aW9uIHNwYWNlCisgKgorICogQXJndW1lbnRzIC0KKyAqCQlwY2lkZXYJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJdTE2IHBjaV9jb21tYW5kOworCXUxNiBuZXdfY29tbWFuZDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsICZwY2lfY29tbWFuZCk7CisJREJHX0VSUk9SKCJzeGc6ICVzICBQQ0kgY29tbWFuZFslNC40eF1cbiIsIF9fZnVuY19fLCBwY2lfY29tbWFuZCk7CisJLyogU2V0IHRoZSBjb21tYW5kIHJlZ2lzdGVyICovCisJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IChQQ0lfQ09NTUFORF9NRU1PUlkgfAkvKiBNZW1vcnkgU3BhY2UgRW5hYmxlICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9NQVNURVIgfAkvKiBCdXMgbWFzdGVyIGVuYWJsZSAqLworCQkJCSAgICAgUENJX0NPTU1BTkRfSU5WQUxJREFURSB8CS8qIE1lbW9yeSB3cml0ZSBhbmQgaW52YWxpZGF0ZSAqLworCQkJCSAgICAgUENJX0NPTU1BTkRfUEFSSVRZIHwJLyogUGFyaXR5IGVycm9yIHJlc3BvbnNlICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9TRVJSIHwJLyogU3lzdGVtIEVSUiAqLworCQkJCSAgICAgUENJX0NPTU1BTkRfRkFTVF9CQUNLKTsJLyogRmFzdCBiYWNrLXRvLWJhY2sgKi8KKwlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpIHsKKwkJREJHX0VSUk9SKCIlcyAtLSBVcGRhdGluZyBQQ0kgQ09NTUFORCByZWdpc3RlciAlNC40eC0+JTQuNHguXG4iLAorCQkJICBfX2Z1bmNfXywgcGNpX2NvbW1hbmQsIG5ld19jb21tYW5kKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsIG5ld19jb21tYW5kKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSkKK3sKKwlzdGF0aWMgaW50IGRpZF92ZXJzaW9uID0gMDsKKwlpbnQgZXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJcF9hZGFwdGVyX3QgYWRhcHRlcjsKKwl2b2lkIF9faW9tZW0gKm1lbW1hcHBlZF9pb2FkZHI7CisJdTMyIHN0YXR1cyA9IDA7CisJdWxvbmcgbW1pb19zdGFydCA9IDA7CisJdWxvbmcgbW1pb19sZW4gPSAwOworCisJREJHX0VSUk9SKCJzeGc6ICVzIDIuNiBWRVJTSU9OIEVOVEVSIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsCisJCSAgX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwkvKiBJbml0aWFsaXplIHRyYWNlIGJ1ZmZlciAqLworI2lmZGVmIEFUS0RCRworCVN4Z1RyYWNlQnVmZmVyID0gJkxTeGdUcmFjZUJ1ZmZlcjsKKwlTWEdfVFJBQ0VfSU5JVChTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1kpOworI2VuZGlmCisKKwlzeGdfZ2xvYmFsLmR5bmFtaWNfaW50YWdnID0gZHluYW1pY19pbnRhZ2c7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOworCisJREJHX0VSUk9SKCJDYWxsIHBjaV9lbmFibGVfZGV2aWNlKCVwKSAgc3RhdHVzWyV4XVxuIiwgcGNpZGV2LCBlcnIpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoc3hnX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHN4Z19iYW5uZXIpOworCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgRFJWX1ZFUlNJT04pOworCX0KKworCWlmICghKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CisJCURCR19FUlJPUigicGNpX3NldF9kbWFfbWFzayhETUFfNjRCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CisJfSBlbHNlIHsKKwkJaWYgKChlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BXzMyQklUX01BU0spKSkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nICBlcnJbJXhdXG4iLAorCQkJICAgICBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlEQkdfRVJST1IoInBjaV9zZXRfZG1hX21hc2soRE1BXzMyQklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCX0KKworCURCR19FUlJPUigiQ2FsbCBwY2lfcmVxdWVzdF9yZWdpb25zXG4iKTsKKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlEQkdfRVJST1IoInBjaV9yZXF1ZXN0X3JlZ2lvbnMgRkFJTEVEIGVyclsleF1cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJREJHX0VSUk9SKCJjYWxsIHBjaV9zZXRfbWFzdGVyXG4iKTsKKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJREJHX0VSUk9SKCJjYWxsIGFsbG9jX2V0aGVyZGV2XG4iKTsKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoYWRhcHRlcl90KSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXRfc3hnX3Byb2JlOworCX0KKwlEQkdfRVJST1IoImFsbG9jX2V0aGVyZGV2IGZvciBzbGljIG5ldGRldlslcF1cbiIsIG5ldGRldik7CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwY2lkZXYtPmRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBuZXRkZXYpOworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisKKwlEQkdfRVJST1IoInN4ZzogY2FsbCBpb3JlbWFwKG1taW9fc3RhcnRbJWx4XSwgbW1pb19sZW5bJWx4XSlcbiIsCisJCSAgbW1pb19zdGFydCwgbW1pb19sZW4pOworCisJbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCURCR19FUlJPUigic3hnOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fZnVuY19fLAorCQkgIG1lbW1hcHBlZF9pb2FkZHIpOworCWlmICghbWVtbWFwcGVkX2lvYWRkcikgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQkgIF9fZnVuY19fLCBtbWlvX2xlbiwgbW1pb19zdGFydCk7CisJCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOworCX0KKworCURCR19FUlJPUgorCSAgICAoInN4ZzogJXMgZm91bmQgQWxhY3JpdGVjaCBTWEcgUENJLCBNTUlPIGF0ICVwLCBzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLAorCSAgICAgX19mdW5jX18sIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7CisKKwlhZGFwdGVyLT5Id1JlZ3MgPSAodm9pZCAqKW1lbW1hcHBlZF9pb2FkZHI7CisJYWRhcHRlci0+YmFzZV9hZGRyID0gbWVtbWFwcGVkX2lvYWRkcjsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAyKTsKKworCURCR19FUlJPUigic3hnOiBjYWxsIGlvcmVtYXAobW1pb19zdGFydFslbHhdLCBtbWlvX2xlblslbHhdKVxuIiwKKwkJICBtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwltZW1tYXBwZWRfaW9hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJREJHX0VSUk9SKCJzeGc6ICVzIE1FTU1BUFBFRF9JT0FERFIgWyVwXVxuIiwgX19mdW5jX18sCisJCSAgbWVtbWFwcGVkX2lvYWRkcik7CisJaWYgKCFtZW1tYXBwZWRfaW9hZGRyKSB7CisJCURCR19FUlJPUigiJXMgY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwKKwkJCSAgX19mdW5jX18sIG1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJfQorCisJREJHX0VSUk9SKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgIgorCQkgICJzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLCBfX2Z1bmNfXywKKwkJICBtZW1tYXBwZWRfaW9hZGRyLCBtbWlvX3N0YXJ0LCBtbWlvX2xlbiwgcGNpZGV2LT5pcnEpOworCisJYWRhcHRlci0+VWNvZGVSZWdzID0gKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyOworCisJYWRhcHRlci0+U3RhdGUgPSBTWEdfU1RBVEVfSU5JVElBTElaSU5HOworCS8qIE1haW50YWluIGEgbGlzdCBvZiBhbGwgYWRhcHRlcnMgYW5jaG9yZWQgYnkgKi8KKwkvKiB0aGUgZ2xvYmFsIFN4Z0RyaXZlciBzdHJ1Y3R1cmUuICovCisJYWRhcHRlci0+TmV4dCA9IFN4Z0RyaXZlci5BZGFwdGVyczsKKwlTeGdEcml2ZXIuQWRhcHRlcnMgPSBhZGFwdGVyOworCWFkYXB0ZXItPkFkYXB0ZXJJRCA9ICsrU3hnRHJpdmVyLkFkYXB0ZXJJRDsKKworCS8qIEluaXRpYWxpemUgQ1JDIHRhYmxlIHVzZWQgdG8gZGV0ZXJtaW5lIG11bHRpY2FzdCBoYXNoICovCisJc3hnX21jYXN0X2luaXRfY3JjMzIoKTsKKworCWFkYXB0ZXItPkp1bWJvRW5hYmxlZCA9IEZBTFNFOworCWFkYXB0ZXItPlJzc0VuYWJsZWQgPSBGQUxTRTsKKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkKSB7CisJCWFkYXB0ZXItPkZyYW1lU2l6ZSA9IEpVTUJPTUFYRlJBTUU7CisJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5GcmFtZVNpemUgPSBFVEhFUk1BWEZSQU1FOworCQlhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRTsKKwl9CisKKy8qICAgIHN0YXR1cyA9IFNYR19SRUFEX0VFUFJPTShhZGFwdGVyKTsgKi8KKy8qICAgIGlmICghc3RhdHVzKSB7ICovCisvKiAgICAgICAgZ290byBzeGdfaW5pdF9iYWQ7ICovCisvKiAgICB9ICovCisKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2NvbmZpZ19wY2lcbiIsIF9fZnVuY19fKTsKKwlzeGdfY29uZmlnX3BjaShwY2lkZXYpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19jb25maWdfcGNpXG4iLCBfX2Z1bmNfXyk7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2luaXRfZHJpdmVyXG4iLCBfX2Z1bmNfXyk7CisJc3hnX2luaXRfZHJpdmVyKCk7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2luaXRfZHJpdmVyXG4iLCBfX2Z1bmNfXyk7CisKKwlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7CisJYWRhcHRlci0+ZGV2aWQgPSBwY2lfdGJsX2VudHJ5LT5kZXZpY2U7CisJYWRhcHRlci0+c3Vic3lzaWQgPSBwY2lfdGJsX2VudHJ5LT5zdWJkZXZpY2U7CisJYWRhcHRlci0+YnVzbnVtYmVyID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwlhZGFwdGVyLT5zbG90bnVtYmVyID0gKChwY2lkZXYtPmRldmZuID4+IDMpICYgMHgxRik7CisJYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIgPSAocGNpZGV2LT5kZXZmbiAmIDB4Nyk7CisJYWRhcHRlci0+bWVtb3J5bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCWFkYXB0ZXItPmlycSA9IHBjaWRldi0+aXJxOworCWFkYXB0ZXItPm5leHRfbmV0ZGV2aWNlID0gaGVhZF9uZXRkZXZpY2U7CisJaGVhZF9uZXRkZXZpY2UgPSBuZXRkZXY7CisvKiAgICAgIGFkYXB0ZXItPmNoaXBpZCA9IGNoaXBfaWR4OyAqLworCWFkYXB0ZXItPnBvcnQgPSAwOwkvKmFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyOyAqLworCWFkYXB0ZXItPmNhcmRpbmRleCA9IGFkYXB0ZXItPnBvcnQ7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgYW5kIG90aGVyIHJlc291cmNlcyAqLworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7CisJc3RhdHVzID0gc3hnX2FsbG9jYXRlX3Jlc291cmNlcyhhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzIHN0YXR1cyAleFxuIiwKKwkJICBfX2Z1bmNfXywgc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWdvdG8gZXJyX291dF91bm1hcDsKKwl9CisKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2Rvd25sb2FkX21pY3JvY29kZVxuIiwgX19mdW5jX18pOworCWlmIChzeGdfZG93bmxvYWRfbWljcm9jb2RlKGFkYXB0ZXIsIFNYR19VQ09ERV9TQUhBUkEpKSB7CisJCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXN4Z19hZGFwdGVyX3NldF9od2FkZHIoYWRhcHRlcik7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJCURCR19FUlJPUigic3hnX2Rvd25sb2FkX21pY3JvY29kZSBGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKKwl9CisKKwluZXRkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXItPmJhc2VfYWRkcjsKKwluZXRkZXYtPmlycSA9IGFkYXB0ZXItPmlycTsKKwluZXRkZXYtPm9wZW4gPSBzeGdfZW50cnlfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSBzeGdfZW50cnlfaGFsdDsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN4Z19zZW5kX3BhY2tldHM7CisJbmV0ZGV2LT5kb19pb2N0bCA9IHN4Z19pb2N0bDsKKyNpZiBYWFhUT0RPCisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzeGdfbWFjX3NldF9hZGRyZXNzOworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKwluZXRkZXYtPmdldF9zdGF0cyA9IHN4Z19nZXRfc3RhdHM7CisjZW5kaWYKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHN4Z19tY2FzdF9zZXRfbGlzdDsKKyNlbmRpZgorCisJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CisvKiAgc3RyY3B5KG5ldGRldi0+bmFtZSwgcGNpX25hbWUocGNpZGV2KSk7ICovCisJaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkpIHsKKwkJREJHX0VSUk9SKCJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuICVzXG4iLAorCQkJICBuZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycl9vdXRfdW5tYXA7CisJfQorCisJREJHX0VSUk9SCisJICAgICgic3hnOiAlcyBhZGRyIDB4JWx4LCBpcnEgJWQsIE1BQyBhZGRyICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCSAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYtPmJhc2VfYWRkciwgcGNpZGV2LT5pcnEsIG5ldGRldi0+ZGV2X2FkZHJbMF0sCisJICAgICBuZXRkZXYtPmRldl9hZGRyWzFdLCBuZXRkZXYtPmRldl9hZGRyWzJdLCBuZXRkZXYtPmRldl9hZGRyWzNdLAorCSAgICAgbmV0ZGV2LT5kZXZfYWRkcls0XSwgbmV0ZGV2LT5kZXZfYWRkcls1XSk7CisKKy8qc3hnX2luaXRfYmFkOiAqLworCUFTU0VSVChzdGF0dXMgPT0gRkFMU0UpOworLyogICAgICBzeGdfZnJlZV9hZGFwdGVyKGFkYXB0ZXIpOyAqLworCisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3RhdHVzWyV4XSBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLCBfX2Z1bmNfXywKKwkJICBzdGF0dXMsIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIHN0YXR1czsKKworICAgICAgZXJyX291dF91bm1hcDoKKwlpb3VubWFwKCh2b2lkICopbWVtbWFwcGVkX2lvYWRkcik7CisKKyAgICAgIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisgICAgICBlcnJfb3V0X2V4aXRfc3hnX3Byb2JlOgorCisJREJHX0VSUk9SKCIlcyBFWElUIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLCBqaWZmaWVzLAorCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMSU5FIEJBU0UgSW50ZXJydXB0IHJvdXRpbmVzLi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogc3hnX2Rpc2FibGVfaW50ZXJydXB0CisgKgorICogRGlzYWJsZUludGVycnVwdCBIYW5kbGVyCisgKgorICogQXJndW1lbnRzOgorICoKKyAqICAgYWRhcHRlcjoJT3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUuCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19kaXNhYmxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRpc0ludHIiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkLCAwLCAwKTsKKwkvKiBGb3Igbm93LCBSU1MgaXMgZGlzYWJsZWQgd2l0aCBsaW5lIGJhc2VkIGludGVycnVwdHMgKi8KKwlBU1NFUlQoYWRhcHRlci0+UnNzRW5hYmxlZCA9PSBGQUxTRSk7CisJQVNTRVJUKGFkYXB0ZXItPk1zaUVuYWJsZWQgPT0gRkFMU0UpOworCS8qICovCisJLyogVHVybiBvZmYgaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIHRoZSBpY3IgcmVnaXN0ZXIuICovCisJLyogKi8KKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkljciwgU1hHX0lDUigwLCBTWEdfSUNSX0RJU0FCTEUpLCBUUlVFKTsKKworCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhEaXNJbnRyIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCwgMCwgMCk7Cit9CisKKy8qCisgKgorICogc3hnX2VuYWJsZV9pbnRlcnJ1cHQKKyAqCisgKiBFbmFibGVJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIEFyZ3VtZW50czoKKyAqCisgKiAgIGFkYXB0ZXI6CU91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfZW5hYmxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkVuSW50ciIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOworCS8qIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cyAqLworCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKKwlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7CisJLyogKi8KKwkvKiBUdXJuIG9uIGludGVycnVwdHMgYnkgd3JpdGluZyB0byB0aGUgaWNyIHJlZ2lzdGVyLiAqLworCS8qICovCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9FTkFCTEUpLCBUUlVFKTsKKworCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhFbkludHIiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworfQorCisvKgorICoKKyAqIHN4Z19pc3IgLSBQcm9jZXNzIGFuIGxpbmUtYmFzZWQgaW50ZXJydXB0CisgKgorICogQXJndW1lbnRzOgorICogCQlDb250ZXh0CQkJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCQlRdWV1ZURlZmF1bHQgCS0gT3V0cHV0IHBhcmFtZXRlciB0byBxdWV1ZSB0byBkZWZhdWx0IENQVQorICoJCVRhcmdldENwdXMJCS0gT3V0cHV0IGJpdG1hcCB0byBzY2hlZHVsZSBEUEMncworICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlUUlVFIGlmIG91ciBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlycXJldHVybl90IHN4Z19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXBfbmV0X2RldmljZSBkZXYgPSAocF9uZXRfZGV2aWNlKSBkZXZfaWQ7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKy8qICAgICAgdTMyICAgICAgICAgICAgICAgICBDcHVNYXNrID0gMCwgaTsgKi8KKworCWFkYXB0ZXItPlN0YXRzLk51bUludHMrKzsKKwlpZiAoYWRhcHRlci0+SXNyWzBdID09IDApIHsKKwkJLyogVGhlIFNMSUMgZHJpdmVyIHVzZWQgdG8gZXhwZXJpZW5jZSBhIG51bWJlciBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzICovCisJCS8qIGR1ZSB0byB0aGUgZGVsYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXNraW5nIG9mIHRoZSBpbnRlcnJ1cHQgKi8KKwkJLyogKHdlJ2QgYm91bmNlIGJhY2sgaW4gaGVyZSkuICBJZiB3ZSBzZWUgdGhhdCBhZ2FpbiB3aXRoIFNhaGFyYSwgKi8KKwkJLyogYWRkIGEgUkVBRF9SRUcgb2YgdGhlIEljciByZWdpc3RlciBhZnRlciB0aGUgV1JJVEVfUkVHIGJlbG93LiAqLworCQlhZGFwdGVyLT5TdGF0cy5GYWxzZUludHMrKzsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwkvKiAqLworCS8qIE1vdmUgdGhlIElzciBjb250ZW50cyBhbmQgY2xlYXIgdGhlIHZhbHVlIGluICovCisJLyogc2hhcmVkIG1lbW9yeSwgYW5kIG1hc2sgaW50ZXJydXB0cyAqLworCS8qICovCisJYWRhcHRlci0+SXNyQ29weVswXSA9IGFkYXB0ZXItPklzclswXTsKKwlhZGFwdGVyLT5Jc3JbMF0gPSAwOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfTUFTSyksIFRSVUUpOworLyogICAgICBBU1NFUlQoYWRhcHRlci0+SXNyRHBjc1BlbmRpbmcgPT0gMCk7ICovCisjaWYgWFhYVE9ETwkJCS8qIFJTUyBTdHVmZiAqLworCS8qIElmIFJTUyBpcyBlbmFibGVkIGFuZCB0aGUgSVNSIHNwZWNpZmllcyAqLworCS8qIFNYR19JU1JfRVZFTlQsIHRoZW4gc2NoZWR1bGUgRFBDJ3MgKi8KKwkvKiBiYXNlZCBvbiBldmVudCBxdWV1ZXMuICovCisJaWYgKGFkYXB0ZXItPlJzc0VuYWJsZWQgJiYgKGFkYXB0ZXItPklzckNvcHlbMF0gJiBTWEdfSVNSX0VWRU5UKSkgeworCQlmb3IgKGkgPSAwOworCQkgICAgIGkgPCBhZGFwdGVyLT5Sc3NTeXN0ZW1JbmZvLT5Qcm9jZXNzb3JJbmZvLlJzc0NwdUNvdW50OworCQkgICAgIGkrKykgeworCQkJUFNYR19FVkVOVF9SSU5HIEV2ZW50UmluZyA9ICZhZGFwdGVyLT5FdmVudFJpbmdzW2ldOworCQkJUFNYR19FVkVOVCBFdmVudCA9CisJCQkgICAgJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbaV1dOworCQkJdW5zaWduZWQgY2hhciBDcHUgPQorCQkJICAgIGFkYXB0ZXItPlJzc1N5c3RlbUluZm8tPlJzc0lkVG9DcHVbaV07CisJCQlpZiAoRXZlbnQtPlN0YXR1cyAmIEVWRU5UX1NUQVRVU19WQUxJRCkgeworCQkJCWFkYXB0ZXItPklzckRwY3NQZW5kaW5nKys7CisJCQkJQ3B1TWFzayB8PSAoMSA8PCBDcHUpOworCQkJfQorCQl9CisJfQorCS8qIE5vdywgZWl0aGVyIHNjaGVkdWxlIHRoZSBDUFVzIHNwZWNpZmllZCBieSB0aGUgQ3B1TWFzaywgKi8KKwkvKiBvciBxdWV1ZSBkZWZhdWx0ICovCisJaWYgKENwdU1hc2spIHsKKwkJKlF1ZXVlRGVmYXVsdCA9IEZBTFNFOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPklzckRwY3NQZW5kaW5nID0gMTsKKwkJKlF1ZXVlRGVmYXVsdCA9IFRSVUU7CisJfQorCSpUYXJnZXRDcHVzID0gQ3B1TWFzazsKKyNlbmRpZgorCS8qICovCisJLyogIFRoZXJlIGFyZSBubyBEUENzIGluIExpbnV4LCBzbyBjYWxsIHRoZSBoYW5kbGVyIG5vdyAqLworCS8qICovCisJc3hnX2hhbmRsZV9pbnRlcnJ1cHQoYWRhcHRlcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisvKiAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBSc3NJZCAgID0gMDsgKi8KKwl1MzIgTmV3SXNyOworCisJaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgeworCQlEQkdfRVJST1IoIkVudGVyIHN4Z19oYW5kbGVfaW50ZXJydXB0IElTUlsleF1cbiIsCisJCQkgIGFkYXB0ZXItPklzckNvcHlbMF0pOworCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJIbmRsSW50ciIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+SXNyQ29weVswXSwgMCwgMCk7CisJLyogRm9yIG5vdywgUlNTIGlzIGRpc2FibGVkIHdpdGggbGluZSBiYXNlZCBpbnRlcnJ1cHRzICovCisJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQgPT0gRkFMU0UpOworCUFTU0VSVChhZGFwdGVyLT5Nc2lFbmFibGVkID09IEZBTFNFKTsKKwlBU1NFUlQoYWRhcHRlci0+SXNyQ29weVswXSk7CisvKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLworCisJLyogQWx3YXlzIHByb2Nlc3MgdGhlIGV2ZW50IHF1ZXVlLiAqLworCXN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKGFkYXB0ZXIsCisJCQkJKGFkYXB0ZXItPlJzc0VuYWJsZWQgPyAvKlJzc0lkICovIDAgOiAwKSk7CisKKyNpZiBYWFhUT0RPCQkJLyogUlNTIHN0dWZmICovCisJaWYgKC0tYWRhcHRlci0+SXNyRHBjc1BlbmRpbmcpIHsKKwkJLyogV2UncmUgZG9uZS4gKi8KKwkJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQpOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEUENzUGVuZCIsCisJCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLyogKi8KKwkvKiBMYXN0IChvciBvbmx5KSBEUEMgcHJvY2Vzc2VzIHRoZSBJU1IgYW5kIGNsZWFycyB0aGUgaW50ZXJydXB0LiAqLworCS8qICovCisJTmV3SXNyID0gc3hnX3Byb2Nlc3NfaXNyKGFkYXB0ZXIsIDApOworCS8qICovCisJLyogUmVlbmFibGUgaW50ZXJydXB0cyAqLworCS8qICovCisJYWRhcHRlci0+SXNyQ29weVswXSA9IDA7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ2xlYXJJc3IiLAorCQkgIGFkYXB0ZXIsIE5ld0lzciwgMCwgMCk7CisKKwlpZiAoYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIgPCA1KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJFeGl0IHN4Z19oYW5kbGVfaW50ZXJydXB0MiBhZnRlciBlbmFibGluZyBpbnRlcnJ1cHRcbiIpOworCX0KKworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSXNyLCBOZXdJc3IsIFRSVUUpOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEhuZGxJbnQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworfQorCisvKgorICoKKyAqIHN4Z19wcm9jZXNzX2lzciAtIFByb2Nlc3MgYW4gaW50ZXJydXB0LiAgQ2FsbGVkIGZyb20gdGhlIGxpbmUtYmFzZWQgYW5kCisgKgkJCW1lc3NhZ2UgYmFzZWQgaW50ZXJydXB0IERQQyByb3V0aW5lcworICoKKyAqIEFyZ3VtZW50czoKKyAqIAkJYWRhcHRlcgkJCS0gT3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgkJUXVldWUJCQktIFRoZSBJU1IgdGhhdCBuZWVkcyBwcm9jZXNzaW5nCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUKKyAqLworc3RhdGljIGludCBzeGdfcHJvY2Vzc19pc3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIE1lc3NhZ2VJZCkKK3sKKwl1MzIgSXNyID0gYWRhcHRlci0+SXNyQ29weVtNZXNzYWdlSWRdOworCXUzMiBOZXdJc3IgPSAwOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUHJvY0lzciIsCisJCSAgYWRhcHRlciwgSXNyLCAwLCAwKTsKKworCS8qIEVycm9yICovCisJaWYgKElzciAmIFNYR19JU1JfRVJSKSB7CisJCWlmIChJc3IgJiBTWEdfSVNSX1BEUUYpIHsKKwkJCWFkYXB0ZXItPlN0YXRzLlBkcUZ1bGwrKzsKKwkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBQRFFGISFcbiIsIF9fZnVuY19fKTsKKwkJfQorCQkvKiBObyBob3N0IGJ1ZmZlciAqLworCQlpZiAoSXNyICYgU1hHX0lTUl9STUlTUykgeworCQkJLyogVGhlcmUgaXMgYSBidW5jaCBvZiBjb2RlIGluIHRoZSBTTElDIGRyaXZlciB3aGljaCAqLworCQkJLyogYXR0ZW1wdHMgdG8gcHJvY2VzcyBtb3JlIHJlY2VpdmUgZXZlbnRzIHBlciBEUEMgKi8KKwkJCS8qIGlmIHdlIHN0YXJ0IHRvIGZhbGwgYmVoaW5kLiAgV2UnbGwgcHJvYmFibHkgKi8KKwkJCS8qIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgaGVyZSwgYnV0IGhvbGQgKi8KKwkJCS8qIG9mZiBmb3Igbm93LiAgSSBkb24ndCB3YW50IHRvIG1ha2UgdGhlIGNvZGUgbW9yZSAqLworCQkJLyogY29tcGxpY2F0ZWQgdGhhbiBzdHJpY3RseSBuZWVkZWQuICovCisJCQlhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlcisrOworCQkJaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgeworCQkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBSTUlTUyEhXG4iLAorCQkJCQkgIF9fZnVuY19fKTsKKwkJCX0KKwkJfQorCQkvKiBDYXJkIGNyYXNoICovCisJCWlmIChJc3IgJiBTWEdfSVNSX0RFQUQpIHsKKwkJCS8qIFNldCBhc2lkZSB0aGUgY3Jhc2ggaW5mbyBhbmQgc2V0IHRoZSBhZGFwdGVyIHN0YXRlIHRvIFJFU0VUICovCisJCQlhZGFwdGVyLT5DcmFzaENwdSA9CisJCQkgICAgKHVuc2lnbmVkIGNoYXIpKChJc3IgJiBTWEdfSVNSX0NQVSkgPj4KKwkJCQkJICAgIFNYR19JU1JfQ1BVX1NISUZUKTsKKwkJCWFkYXB0ZXItPkNyYXNoTG9jYXRpb24gPSAodXNob3J0KSAoSXNyICYgU1hHX0lTUl9DUkFTSCk7CisJCQlhZGFwdGVyLT5EZWFkID0gVFJVRTsKKwkJCURCR19FUlJPUigiJXM6IElTUl9ERUFEICV4LCBDUFU6ICVkXG4iLCBfX2Z1bmNfXywKKwkJCQkgIGFkYXB0ZXItPkNyYXNoTG9jYXRpb24sIGFkYXB0ZXItPkNyYXNoQ3B1KTsKKwkJfQorCQkvKiBFdmVudCByaW5nIGZ1bGwgKi8KKwkJaWYgKElzciAmIFNYR19JU1JfRVJGVUxMKSB7CisJCQkvKiBTYW1lIGlzc3VlIGFzIFJNSVNTLCByZWFsbHkuICBUaGlzIG1lYW5zIHRoZSAqLworCQkJLyogaG9zdCBpcyBmYWxsaW5nIGJlaGluZCB0aGUgY2FyZC4gIE5lZWQgdG8gaW5jcmVhc2UgKi8KKwkJCS8qIGV2ZW50IHJpbmcgc2l6ZSwgcHJvY2VzcyBtb3JlIGV2ZW50cyBwZXIgaW50ZXJydXB0LCAqLworCQkJLyogYW5kL29yIHJlZHVjZS9yZW1vdmUgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uLiAqLworCQkJYWRhcHRlci0+U3RhdHMuRXZlbnRSaW5nRnVsbCsrOworCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIEVWRU5UIFJJTkcgRlVMTCEhXG4iLAorCQkJCSAgX19mdW5jX18pOworCQl9CisJCS8qIFRyYW5zbWl0IGRyb3AgLSBubyBEUkFNIGJ1ZmZlcnMgb3IgWE1UIGVycm9yICovCisJCWlmIChJc3IgJiBTWEdfSVNSX1hEUk9QKSB7CisJCQlhZGFwdGVyLT5TdGF0cy5YbXREcm9wcysrOworCQkJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJCQlEQkdfRVJST1IoIiVzOiBTWEdfSVNSX0VSUiAgWERST1AhIVxuIiwgX19mdW5jX18pOworCQl9CisJfQorCS8qIFNsb3dwYXRoIHNlbmQgY29tcGxldGlvbnMgKi8KKwlpZiAoSXNyICYgU1hHX0lTUl9TUFNFTkQpIHsKKwkJc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChhZGFwdGVyKTsKKwl9CisJLyogRHVtcCAqLworCWlmIChJc3IgJiBTWEdfSVNSX1VQQykgeworCQlBU1NFUlQoYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcpOwkvKiBNYXliZSBjaGFuZ2Ugd2hlbiBkZWJ1ZyBpcyBhZGRlZC4uICovCisJCWFkYXB0ZXItPkR1bXBDbWRSdW5uaW5nID0gRkFMU0U7CisJfQorCS8qIExpbmsgZXZlbnQgKi8KKwlpZiAoSXNyICYgU1hHX0lTUl9MSU5LKSB7CisJCXN4Z19saW5rX2V2ZW50KGFkYXB0ZXIpOworCX0KKwkvKiBEZWJ1ZyAtIGJyZWFrcG9pbnQgaGl0ICovCisJaWYgKElzciAmIFNYR19JU1JfQlJFQUspIHsKKwkJLyogQXQgdGhlIG1vbWVudCBBR0RCIGlzbid0IHdyaXR0ZW4gdG8gc3VwcG9ydCBpbnRlcmFjdGl2ZSAqLworCQkvKiBkZWJ1ZyBzZXNzaW9ucy4gIFdoZW4gaXQgaXMsIHRoaXMgaW50ZXJydXB0IHdpbGwgYmUgdXNlZCAqLworCQkvKiB0byBzaWduYWwgQUdEQiB0aGF0IGl0IGhhcyBoaXQgYSBicmVha3BvaW50LiAgRm9yIG5vdywgQVNTRVJULiAqLworCQlBU1NFUlQoMCk7CisJfQorCS8qIEhlYXJ0YmVhdCByZXNwb25zZSAqLworCWlmIChJc3IgJiBTWEdfSVNSX1BJTkcpIHsKKwkJYWRhcHRlci0+UGluZ091dHN0YW5kaW5nID0gRkFMU0U7CisJfQorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhQcm9jSXNyIiwKKwkJICBhZGFwdGVyLCBJc3IsIE5ld0lzciwgMCk7CisKKwlyZXR1cm4gKE5ld0lzcik7Cit9CisKKy8qCisgKgorICogc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUgLSBQcm9jZXNzIG91ciBldmVudCBxdWV1ZQorICoKKyAqIEFyZ3VtZW50czoKKyAqIAkJLSBhZGFwdGVyCS0gQWRhcHRlciBzdHJ1Y3R1cmUKKyAqCQktIFJzc0lkCQktIFRoZSBldmVudCBxdWV1ZSByZXF1aXJpbmcgcHJvY2Vzc2luZworICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdTMyIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBSc3NJZCkKK3sKKwlQU1hHX0VWRU5UX1JJTkcgRXZlbnRSaW5nID0gJmFkYXB0ZXItPkV2ZW50UmluZ3NbUnNzSWRdOworCVBTWEdfRVZFTlQgRXZlbnQgPSAmRXZlbnRSaW5nLT5SaW5nW2FkYXB0ZXItPk5leHRFdmVudFtSc3NJZF1dOworCXUzMiBFdmVudHNQcm9jZXNzZWQgPSAwLCBCYXRjaGVzID0gMDsKKwl1MzIgbnVtX3NrYnMgPSAwOworCXN0cnVjdCBza19idWZmICpza2I7CisjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUworCXN0cnVjdCBza19idWZmICpwcmV2X3NrYiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKkluZGljYXRpb25MaXN0W1NYR19SQ1ZfQVJSQVlTSVpFXTsKKwl1MzIgSW5kZXg7CisJUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIFJjdkRhdGFCdWZmZXJIZHI7CisjZW5kaWYKKwl1MzIgUmV0dXJuU3RhdHVzID0gMDsKKworCUFTU0VSVCgoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX1JVTk5JTkcpIHx8CisJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfUEFVU0lORykgfHwKKwkgICAgICAgKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9QQVVTRUQpIHx8CisJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfSEFMVElORykpOworCS8qIFdlIG1heSBzdGlsbCBoYXZlIHVucHJvY2Vzc2VkIGV2ZW50cyBvbiB0aGUgcXVldWUgaWYgKi8KKwkvKiB0aGUgY2FyZCBjcmFzaGVkLiAgRG9uJ3QgcHJvY2VzcyB0aGVtLiAqLworCWlmIChhZGFwdGVyLT5EZWFkKSB7CisJCXJldHVybiAoMCk7CisJfQorCS8qIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBwcm9jZXNzb3IgdGhhdCAqLworCS8qIGFjY2Vzc2VzIHRoaXMgcXVldWUsIGFuZCBvbmx5IGF0IGludGVycnVwdC1EUEMgdGltZS4gIFNvICovCisJLyogd2Ugc2hvdWxkbid0IG5lZWQgYSBsb2NrIGZvciBhbnkgb2YgdGhpcy4gKi8KKwl3aGlsZSAoRXZlbnQtPlN0YXR1cyAmIEVWRU5UX1NUQVRVU19WQUxJRCkgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJFdmVudCIsCisJCQkgIEV2ZW50LCBFdmVudC0+Q29kZSwgRXZlbnQtPlN0YXR1cywKKwkJCSAgYWRhcHRlci0+TmV4dEV2ZW50KTsKKwkJc3dpdGNoIChFdmVudC0+Q29kZSkgeworCQljYXNlIEVWRU5UX0NPREVfQlVGRkVSUzoKKwkJCUFTU0VSVCghKEV2ZW50LT5Db21tYW5kSW5kZXggJiAweEZGMDApKTsJLyogU1hHX1JJTkdfSU5GTyBIZWFkICYgVGFpbCA9PSB1bnNpZ25lZCBjaGFyICovCisJCQkvKiAqLworCQkJc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKGFkYXB0ZXIsCisJCQkJCQkgICAgICAgRXZlbnQtPkNvbW1hbmRJbmRleCk7CisJCQkvKiAqLworCQkJYnJlYWs7CisJCWNhc2UgRVZFTlRfQ09ERV9TTE9XUkNWOgorCQkJLS1hZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkOworCQkJaWYgKChza2IgPSBzeGdfc2xvd19yZWNlaXZlKGFkYXB0ZXIsIEV2ZW50KSkpIHsKKwkJCQl1MzIgcnhfYnl0ZXM7CisjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUworCQkJCS8qIEFkZCBpdCB0byBvdXIgaW5kaWNhdGlvbiBsaXN0ICovCisJCQkJU1hHX0FERF9SQ1ZfUEFDS0VUKGFkYXB0ZXIsIHNrYiwgcHJldl9za2IsCisJCQkJCQkgICBJbmRpY2F0aW9uTGlzdCwgbnVtX3NrYnMpOworCQkJCS8qICBJbiBMaW51eCwgd2UganVzdCBwYXNzIHVwIGVhY2ggc2tiIHRvIHRoZSBwcm90b2NvbCBhYm92ZSBhdCB0aGlzIHBvaW50LCAqLworCQkJCS8qICB0aGVyZSBpcyBubyBjYXBhYmlsaXR5IG9mIGFuIGluZGljYXRpb24gbGlzdC4gKi8KKyNlbHNlCisvKiBDSEVDSyAgICAgICAgICAgIHNrYl9wdWxsKHNrYiwgSU5JQ19SQ1ZCVUZfSEVBRFNJWkUpOyAqLworCQkJCXJ4X2J5dGVzID0gRXZlbnQtPkxlbmd0aDsJLyogKHJjdmJ1Zi0+bGVuZ3RoICYgSVJIRERSX0ZMRU5fTVNLKTsgKi8KKwkJCQlza2JfcHV0KHNrYiwgcnhfYnl0ZXMpOworCQkJCWFkYXB0ZXItPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlhZGFwdGVyLT5zdGF0cy5yeF9ieXRlcyArPSByeF9ieXRlczsKKyNpZiBTWEdfT0ZGTE9BRF9JUF9DSEVDS1NVTQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisjZW5kaWYKKwkJCQlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7CisJCQkJbmV0aWZfcngoc2tiKTsKKyNlbmRpZgorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkdfRVJST1IoIiVzOiBFUlJPUiAgSW52YWxpZCBFdmVudENvZGUgJWRcbiIsCisJCQkJICBfX2Z1bmNfXywgRXZlbnQtPkNvZGUpOworLyogICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKDApOyAqLworCQl9CisJCS8qIFNlZSBpZiB3ZSBuZWVkIHRvIHJlc3RvY2sgY2FyZCByZWNlaXZlIGJ1ZmZlcnMuICovCisJCS8qIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRvIG5vdGUgaGVyZTogKi8KKwkJLyogICAgICBGaXJzdCAtIFRoaXMgdGVzdCBpcyBub3QgU01QIHNhZmUuICBUaGUgKi8KKwkJLyogICAgICAgICAgICAgIGFkYXB0ZXItPkJ1ZmZlcnNPbkNhcmQgZmllbGQgaXMgcHJvdGVjdGVkIHZpYSBhdG9taWMgaW50ZXJsb2NrZWQgY2FsbHMsIGJ1dCAqLworCQkvKiAgICAgICAgICAgICAgd2UgZG8gbm90IHByb3RlY3QgaXQgd2l0aCByZXNwZWN0IHRvIHRoZXNlIHRlc3RzLiAgVGhlIG9ubHkgd2F5IHRvIGRvIHRoYXQgKi8KKwkJLyogICAgICBpcyB3aXRoIGEgbG9jaywgYW5kIEkgZG9uJ3Qgd2FudCB0byBncmFiIGEgbG9jayBldmVyeSB0aW1lIHdlIGFkanVzdCB0aGUgKi8KKwkJLyogICAgICBCdWZmZXJzT25DYXJkIGNvdW50LiAgSW5zdGVhZCwgd2UgYWxsb3cgdGhlIGJ1ZmZlciByZXBsZW5pc2htZW50IHRvIGJlIG9mZiAqLworCQkvKiAgICAgIG9uY2UgaW4gYSB3aGlsZS4gIFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhlIGNhcmQgaXMgZ2l2ZW4gb25lICovCisJCS8qICAgICAgbW9yZS1vci1sZXNzIGRlc2NyaXB0b3IgYmxvY2sgdGhhbiB0aGUgYXJiaXRyYXJ5IHZhbHVlIHdlJ3ZlIGNob3Nlbi4gKi8KKwkJLyogICAgICBObyBiaWcgZGVhbCAqLworCQkvKiAgICAgIEluIHNob3J0IERPIE5PVCBBREQgQSBMT0NLIEhFUkUsIE9SIFdIRVJFIFJjdkJ1ZmZlcnNPbkNhcmQgaXMgYWRqdXN0ZWQuICovCisJCS8qICAgICAgU2Vjb25kIC0gV2UgZXhwZWN0IHRoaXMgdGVzdCB0byByYXJlbHkgZXZhbHVhdGUgdG8gdHJ1ZS4gIFdlIGF0dGVtcHQgdG8gKi8KKwkJLyogICAgICByZWZpbGwgZGVzY3JpcHRvciBibG9ja3MgYXMgdGhleSBhcmUgcmV0dXJuZWQgdG8gdXMgKi8KKwkJLyogICAgICAoc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKSwgc28gVGhlIG9ubHkgdGltZSB0aGlzIHNob3VsZCBldmFsdWF0ZSAqLworCQkvKiAgICAgIHRvIHRydWUgaXMgd2hlbiBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MgZmFpbGVkIHRvIGFsbG9jYXRlICovCisJCS8qICAgICAgICAgICAgICByZWNlaXZlIGJ1ZmZlcnMuICovCisJCWlmIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgU1hHX1JDVl9EQVRBX0JVRkZFUlMpIHsKKwkJCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKKwkJfQorCQkvKiBJdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3Qgc2V0IHRoaXMgdG8gemVyby4gKi8KKwkJLyogQnV0IGNsZWFyaW5nIHRoZSB0b3AgYml0IHNhdmVzIHBvdGVudGlhbCBkZWJ1ZyBpbmZvLi4uICovCisJCUV2ZW50LT5TdGF0dXMgJj0gfkVWRU5UX1NUQVRVU19WQUxJRDsKKwkJLyogQWR2YW5jdCB0byB0aGUgbmV4dCBldmVudCAqLworCQlTWEdfQURWQU5DRV9JTkRFWChhZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdLCBFVkVOVF9SSU5HX1NJWkUpOworCQlFdmVudCA9ICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXV07CisJCUV2ZW50c1Byb2Nlc3NlZCsrOworCQlpZiAoRXZlbnRzUHJvY2Vzc2VkID09IEVWRU5UX1JJTkdfQkFUQ0gpIHsKKwkJCS8qIFJlbGVhc2UgYSBiYXRjaCBvZiBldmVudHMgYmFjayB0byB0aGUgY2FyZCAqLworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAorCQkJCSAgRVZFTlRfUklOR19CQVRDSCwgRkFMU0UpOworCQkJRXZlbnRzUHJvY2Vzc2VkID0gMDsKKwkJCS8qIElmIHdlJ3ZlIHByb2Nlc3NlZCBvdXIgYmF0Y2ggbGltaXQsIGJyZWFrIG91dCBvZiB0aGUgKi8KKwkJCS8qIGxvb3AgYW5kIHJldHVybiBTWEdfSVNSX0VWRU5UIHRvIGFycmFuZ2UgZm9yIHVzIHRvICovCisJCQkvKiBiZSBjYWxsZWQgYWdhaW4gKi8KKwkJCWlmIChCYXRjaGVzKysgPT0gRVZFTlRfQkFUQ0hfTElNSVQpIHsKKwkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKKwkJCQkJICBUUkFDRV9OT0lTWSwgIkV2dExpbWl0IiwgQmF0Y2hlcywKKwkJCQkJICBhZGFwdGVyLT5OZXh0RXZlbnQsIDAsIDApOworCQkJCVJldHVyblN0YXR1cyA9IFNYR19JU1JfRVZFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUworCS8qICovCisJLyogSW5kaWNhdGUgYW55IHJlY2VpdmVkIGR1bWItbmljIGZyYW1lcyAqLworCS8qICovCisJU1hHX0lORElDQVRFX1BBQ0tFVFMoYWRhcHRlciwgSW5kaWNhdGlvbkxpc3QsIG51bV9za2JzKTsKKyNlbmRpZgorCS8qICovCisJLyogUmVsZWFzZSBldmVudHMgYmFjayB0byB0aGUgY2FyZC4gKi8KKwkvKiAqLworCWlmIChFdmVudHNQcm9jZXNzZWQpIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAorCQkJICBFdmVudHNQcm9jZXNzZWQsIEZBTFNFKTsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWFByY0V2bnQiLAorCQkgIEJhdGNoZXMsIEV2ZW50c1Byb2Nlc3NlZCwgYWRhcHRlci0+TmV4dEV2ZW50LCBudW1fc2ticyk7CisKKwlyZXR1cm4gKFJldHVyblN0YXR1cyk7Cit9CisKKy8qCisgKiBzeGdfY29tcGxldGVfc2xvd19zZW5kIC0gQ29tcGxldGUgc2xvd3BhdGggb3IgZHVtYi1uaWMgc2VuZHMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisKKyAqIFJldHVybgorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19YTVRfUklORyBYbXRSaW5nID0gJmFkYXB0ZXItPlhtdFJpbmdzWzBdOworCVBTWEdfUklOR19JTkZPIFhtdFJpbmdJbmZvID0gJmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbzsKKwl1MzIgKkNvbnRleHRUeXBlOworCVBTWEdfQ01EIFhtdENtZDsKKworCS8qIE5PVEUgLSBUaGlzIGxvY2sgaXMgZHJvcHBlZCBhbmQgcmVncmFiYmVkIGluIHRoaXMgbG9vcC4gKi8KKwkvKiBUaGlzIG1lYW5zIHR3byBkaWZmZXJlbnQgcHJvY2Vzc29ycyBjYW4gYm90aCBiZSBydW5uaW5nICovCisJLyogdGhyb3VnaCB0aGlzIGxvb3AuIEJlICp2ZXJ5KiBjYXJlZnVsLiAqLworCXNwaW5fbG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZHMiLAorCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CisKKwl3aGlsZSAoWG10UmluZ0luZm8tPlRhaWwgIT0gKmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKKwkJLyogTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kICovCisJCS8qIGFzc29jaWF0ZWQgU0dMLCBhbmQgYWR2YW5jZSB0aGUgdGFpbCAqLworCQlTWEdfUkVUVVJOX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBDb250ZXh0VHlwZSk7CisJCUFTU0VSVChDb250ZXh0VHlwZSk7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZCIsCisJCQkgIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgWG10Q21kLCAwKTsKKwkJLyogQ2xlYXIgdGhlIFNHTCBmaWVsZC4gKi8KKwkJWG10Q21kLT5TZ2wgPSAwOworCisJCXN3aXRjaCAoKkNvbnRleHRUeXBlKSB7CisJCWNhc2UgU1hHX1NHTF9EVU1COgorCQkJeworCQkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkJLyogRHVtYi1uaWMgc2VuZC4gIENvbW1hbmQgY29udGV4dCBpcyB0aGUgZHVtYi1uaWMgU0dMICovCisJCQkJc2tiID0gKHN0cnVjdCBza19idWZmICopQ29udGV4dFR5cGU7CisJCQkJLyogQ29tcGxldGUgdGhlIHNlbmQgKi8KKwkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKKwkJCQkJICBUUkFDRV9JTVBPUlRBTlQsICJEbVNuZENtcCIsIHNrYiwgMCwKKwkJCQkJICAwLCAwKTsKKwkJCQlBU1NFUlQoYWRhcHRlci0+U3RhdHMuWG10UUxlbik7CisJCQkJYWRhcHRlci0+U3RhdHMuWG10UUxlbi0tOwkvKiB3aXRoaW4gWG10WmVyb0xvY2sgKi8KKwkJCQlhZGFwdGVyLT5TdGF0cy5YbXRPaysrOworCQkJCS8qIE5vdyBkcm9wIHRoZSBsb2NrIGFuZCBjb21wbGV0ZSB0aGUgc2VuZCBiYWNrIHRvICovCisJCQkJLyogTWljcm9zb2Z0LiAgV2UgbmVlZCB0byBkcm9wIHRoZSBsb2NrIGJlY2F1c2UgKi8KKwkJCQkvKiBNaWNyb3NvZnQgY2FuIGNvbWUgYmFjayB3aXRoIGEgY2hpbW5leSBzZW5kLCB3aGljaCAqLworCQkJCS8qIHJlc3VsdHMgaW4gYSBkb3VibGUgdHJpcCBpbiBTeGdUY3BPdXB1dCAqLworCQkJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCQkJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOworCQkJCS8qIGFuZCByZWFjcXVpcmUuLiAqLworCQkJCXNwaW5fbG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmQiLAorCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7Cit9CisKKy8qCisgKiBzeGdfc2xvd19yZWNlaXZlCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJRXZlbnQJCS0gUmVjZWl2ZSBldmVudAorICoKKyAqIFJldHVybgorICoJIHNrYgorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUocF9hZGFwdGVyX3QgYWRhcHRlciwgUFNYR19FVkVOVCBFdmVudCkKK3sKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgUmN2RGF0YUJ1ZmZlckhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0OworCisJUmN2RGF0YUJ1ZmZlckhkciA9IChQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIpIEV2ZW50LT5Ib3N0SGFuZGxlOworCUFTU0VSVChSY3ZEYXRhQnVmZmVySGRyKTsKKwlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPT0gU1hHX0JVRkZFUl9PTkNBUkQpOworCUFTU0VSVChTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpID09CisJICAgICAgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiU2xvd1JjdiIsIEV2ZW50LAorCQkgIFJjdkRhdGFCdWZmZXJIZHIsIFJjdkRhdGFCdWZmZXJIZHItPlN0YXRlLAorCQkgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKKwkvKiBEcm9wIHJjdiBmcmFtZXMgaW4gbm9uLXJ1bm5pbmcgc3RhdGUgKi8KKwlzd2l0Y2ggKGFkYXB0ZXItPlN0YXRlKSB7CisJY2FzZSBTWEdfU1RBVEVfUlVOTklORzoKKwkJYnJlYWs7CisJY2FzZSBTWEdfU1RBVEVfUEFVU0lORzoKKwljYXNlIFNYR19TVEFURV9QQVVTRUQ6CisJY2FzZSBTWEdfU1RBVEVfSEFMVElORzoKKwkJZ290byBkcm9wOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwkJZ290byBkcm9wOworCX0KKworCS8qIENoYW5nZSBidWZmZXIgc3RhdGUgdG8gVVBTVFJFQU0gKi8KKwlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CisJaWYgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfUkNWRVJSKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkVycm9yIiwKKwkJCSAgRXZlbnQsIEV2ZW50LT5TdGF0dXMsIEV2ZW50LT5Ib3N0SGFuZGxlLCAwKTsKKwkJLyogWFhYVE9ETyAtIFJlbW92ZSB0aGlzIHByaW50IGxhdGVyICovCisJCURCR19FUlJPUigiU1hHOiBSZWNlaXZlIGVycm9yICV4XG4iLCAqKHUzMiAqKQorCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKTsKKwkJc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKGFkYXB0ZXIsICoodTMyICopCisJCQkJICAgICAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTgorCQkJCSAgICAgIChSY3ZEYXRhQnVmZmVySGRyKSk7CisJCWdvdG8gZHJvcDsKKwl9CisjaWYgWFhYVE9ETwkJCS8qIFZMQU4gc3R1ZmYgKi8KKwkvKiBJZiB0aGVyZSdzIGEgVkxBTiB0YWcsIGV4dHJhY3QgaXQgYW5kIHZhbGlkYXRlIGl0ICovCisJaWYgKCgocF9ldGhlcl9oZWFkZXIpIChTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKSktPgorCSAgICBFdGhlclR5cGUgPT0gRVRIRVJUWVBFX1ZMQU4pIHsKKwkJaWYgKFN4Z0V4dHJhY3RWbGFuSGVhZGVyKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50KSAhPQorCQkgICAgU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwKKwkJCQkgICJCYWRWbGFuIiwgRXZlbnQsCisJCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCQkJCSAgRXZlbnQtPkxlbmd0aCwgMCk7CisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisjZW5kaWYKKwkvKiAqLworCS8qIER1bWItbmljIGZyYW1lLiAgU2VlIGlmIGl0IHBhc3NlcyBvdXIgbWFjIGZpbHRlciBhbmQgdXBkYXRlIHN0YXRzICovCisJLyogKi8KKwlpZiAoIXN4Z19tYWNfZmlsdGVyKGFkYXB0ZXIsIChwX2V0aGVyX2hlYWRlcikKKwkJCSAgICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCQkJICAgIEV2ZW50LT5MZW5ndGgpKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkZpbHRyIiwKKwkJCSAgRXZlbnQsIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCisJCQkgIEV2ZW50LT5MZW5ndGgsIDApOworCQlnb3RvIGRyb3A7CisJfQorCisJUGFja2V0ID0gUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1iUmN2IiwKKwkJICBSY3ZEYXRhQnVmZmVySGRyLCBQYWNrZXQsIEV2ZW50LT5MZW5ndGgsIDApOworCS8qICovCisJLyogTGFzdGx5IGFkanVzdCB0aGUgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoLiAqLworCS8qICovCisJU1hHX0FESlVTVF9SQ1ZfUEFDS0VUKFBhY2tldCwgUmN2RGF0YUJ1ZmZlckhkciwgRXZlbnQpOworCisJcmV0dXJuIChQYWNrZXQpOworCisgICAgICBkcm9wOgorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRyb3BSY3YiLAorCQkgIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50LT5MZW5ndGgsIDAsIDApOworCWFkYXB0ZXItPlN0YXRzLlJjdkRpc2NhcmRzKys7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqIHN4Z19wcm9jZXNzX3Jjdl9lcnJvciAtIHByb2Nlc3MgcmVjZWl2ZSBlcnJvciBhbmQgdXBkYXRlCisgKiBzdGF0cworICoKKyAqIEFyZ3VtZW50czoKKyAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCisgKgkJRXJyb3JTdGF0dXMJLSA0LWJ5dGUgcmVjZWl2ZSBlcnJvciBzdGF0dXMKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfcHJvY2Vzc19yY3ZfZXJyb3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIEVycm9yU3RhdHVzKQoreworCXUzMiBFcnJvcjsKKworCWFkYXB0ZXItPlN0YXRzLlJjdkVycm9ycysrOworCisJaWYgKEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SKSB7CisJCUVycm9yID0gRXJyb3JTdGF0dXMgJiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTUFTSzsKKwkJc3dpdGNoIChFcnJvcikgeworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9DU1VNOgorCQkJYWRhcHRlci0+U3RhdHMuVHJhbnNwb3J0Q3N1bSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1VGTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuVHJhbnNwb3J0VWZsb3crKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU46CisJCQlhZGFwdGVyLT5TdGF0cy5UcmFuc3BvcnRIZHJMZW4rKzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IpIHsKKwkJRXJyb3IgPSBFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSzsKKwkJc3dpdGNoIChFcnJvcikgeworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfQ1NVTToKKwkJCWFkYXB0ZXItPlN0YXRzLk5ldHdvcmtDc3VtKys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuTmV0d29ya1VmbG93Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTjoKKwkJCWFkYXB0ZXItPlN0YXRzLk5ldHdvcmtIZHJMZW4rKzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX1BBUklUWSkgeworCQlhZGFwdGVyLT5TdGF0cy5QYXJpdHkrKzsKKwl9CisJaWYgKEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfTElOS19FUlJPUikgeworCQlFcnJvciA9IEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLOworCQlzd2l0Y2ggKEVycm9yKSB7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rUGFyaXR5Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0Vhcmx5Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0J1Zk9mbG93Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREU6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rQ29kZSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0RyaWJibGUrKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0NyYysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtPZmxvdysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtVZmxvdysrOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiBzeGdfbWFjX2ZpbHRlcgorICoKKyAqIEFyZ3VtZW50czoKKyAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCisgKgkJcGV0aGVyCQktIEV0aGVybmV0IGhlYWRlcgorICoJCWxlbmd0aAkJLSBGcmFtZSBsZW5ndGgKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJVFJVRSBpZiB0aGUgZnJhbWUgaXMgdG8gYmUgYWxsb3dlZAorICovCitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihwX2FkYXB0ZXJfdCBhZGFwdGVyLCBwX2V0aGVyX2hlYWRlciBFdGhlckhkciwKKwkJCSAgIHVzaG9ydCBsZW5ndGgpCit7CisJYm9vbCBFcXVhbEFkZHI7CisKKwlpZiAoU1hHX01VTFRJQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCWlmIChTWEdfQlJPQURDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKKwkJCS8qIGJyb2FkY2FzdCAqLworCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19CQ0FTVCkgeworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCY2FzdFBrdHMrKzsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2QmNhc3RCeXRlcyArPSBsZW5ndGg7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOworCQkJCXJldHVybiAoVFJVRSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBtdWx0aWNhc3QgKi8KKwkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfQUxMTUNBU1QpIHsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2TWNhc3RQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdk1jYXN0Qnl0ZXMgKz0gbGVuZ3RoOworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKFRSVUUpOworCQkJfQorCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19NQ0FTVCkgeworCQkJCVBTWEdfTVVMVElDQVNUX0FERFJFU1MgTXVsdGljYXN0QWRkcnMgPQorCQkJCSAgICBhZGFwdGVyLT5NdWx0aWNhc3RBZGRyczsKKwkJCQl3aGlsZSAoTXVsdGljYXN0QWRkcnMpIHsKKwkJCQkJRVRIRVJfRVFfQUREUihNdWx0aWNhc3RBZGRycy0+QWRkcmVzcywKKwkJCQkJCSAgICAgIEV0aGVySGRyLT5ldGhlcl9kaG9zdCwKKwkJCQkJCSAgICAgIEVxdWFsQWRkcik7CisJCQkJCWlmIChFcXVhbEFkZHIpIHsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLgorCQkJCQkJICAgIER1bWJSY3ZNY2FzdFBrdHMrKzsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLgorCQkJCQkJICAgIER1bWJSY3ZNY2FzdEJ5dGVzICs9IGxlbmd0aDsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0KKwkJCQkJCSAgICBsZW5ndGg7CisJCQkJCQlyZXR1cm4gKFRSVUUpOworCQkJCQl9CisJCQkJCU11bHRpY2FzdEFkZHJzID0gTXVsdGljYXN0QWRkcnMtPk5leHQ7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfRElSRUNURUQpIHsKKwkJLyogTm90IGJyb2FkY2FzdCBvciBtdWx0aWNhc3QuICBNdXN0IGJlIGRpcmVjdGVkIGF0IHVzIG9yICovCisJCS8qIHRoZSBjYXJkIGlzIGluIHByb21pc2N1b3VzIG1vZGUuICBFaXRoZXIgd2F5LCBjb25zaWRlciBpdCAqLworCQkvKiBvdXJzIGlmIE1BQ19ESVJFQ1RFRCBpcyBzZXQgKi8KKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlVjYXN0UGt0cysrOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2VWNhc3RCeXRlcyArPSBsZW5ndGg7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CisJCXJldHVybiAoVFJVRSk7CisJfQorCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfUFJPTUlTQykgeworCQkvKiBXaGF0ZXZlciBpdCBpcywga2VlcCBpdC4gKi8KKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKKwkJcmV0dXJuIChUUlVFKTsKKwl9CisJYWRhcHRlci0+U3RhdHMuUmN2RGlzY2FyZHMrKzsKKwlyZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIGludCBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlpbnQgcmV0dmFsOworCisJCURCR19FUlJPUgorCQkgICAgKCJzeGc6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBkZXYtPmlycVsleF0gJXhcbiIsCisJCSAgICAgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPm5ldGRldi0+aXJxLCBOUl9JUlFTKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLAorCQkJCSAgICAgICBzeGdfZ2xvYmFsLmZsYWdzKTsKKworCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5uZXRkZXYtPmlycSwKKwkJCQkgICAgICZzeGdfaXNyLAorCQkJCSAgICAgSVJRRl9TSEFSRUQsCisJCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm5ldGRldik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCURCR19FUlJPUigic3hnOiByZXF1ZXN0X2lycSAoJXMpIEZBSUxFRCBbJXhdXG4iLAorCQkJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCByZXR2YWwpOworCQkJcmV0dXJuIChyZXR2YWwpOworCQl9CisJCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMTsKKwkJYWRhcHRlci0+SW50UmVnaXN0ZXJlZCA9IFRSVUU7CisJCS8qIERpc2FibGUgUlNTIHdpdGggbGluZS1iYXNlZCBpbnRlcnJ1cHRzICovCisJCWFkYXB0ZXItPk1zaUVuYWJsZWQgPSBGQUxTRTsKKwkJYWRhcHRlci0+UnNzRW5hYmxlZCA9IEZBTFNFOworCQlEQkdfRVJST1IoInN4ZzogJXMgQWxsb2NBZGFwdFJzcmNzIGFkYXB0ZXJbJXBdIGRldi0+aXJxWyV4XVxuIiwKKwkJCSAgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPm5ldGRldi0+aXJxKTsKKwl9CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworI2lmIFhYWFRPRE8KKwlzbGljX2luaXRfY2xlYW51cChhZGFwdGVyKTsKKyNlbmRpZgorCW1lbXNldCgmYWRhcHRlci0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+bnVtX2lzcnMgPSAwOworCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzID0gMDsKKwlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyA9IDA7CisJYWRhcHRlci0+cmN2X211bHRpY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl91bmljYXN0cyA9IDA7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKK30KKworLyoKKyAqICBzeGdfaWZfaW5pdAorICoKKyAqICBQZXJmb3JtIGluaXRpYWxpemF0aW9uIG9mIG91ciBzbGljIGludGVyZmFjZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc3hnX2lmX2luaXQocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlwX25ldF9kZXZpY2UgZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBzdGF0dXMgPSAwOworCisJREJHX0VSUk9SKCJzeGc6ICVzICglcykgRU5URVIgc3RhdGVzWyVkOiVkOiVkXSBmbGFnc1sleF1cbiIsCisJCSAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJICBhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQsIGFkYXB0ZXItPnN0YXRlLAorCQkgIGFkYXB0ZXItPmxpbmtzdGF0ZSwgZGV2LT5mbGFncyk7CisKKwkvKiBhZGFwdGVyIHNob3VsZCBiZSBkb3duIGF0IHRoaXMgcG9pbnQgKi8KKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQlEQkdfRVJST1IoInN4Z19pZl9pbml0IGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV05cbiIpOworCQlyZXR1cm4gKC1FSU8pOworCX0KKwlBU1NFUlQoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTik7CisKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKKwlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCWlmIChkZXYtPmZsYWdzKSB7CisJCURCR19FUlJPUigic3hnOiAlcyAoJXMpIFNldCBNQUMgb3B0aW9uczogIiwgX19mdW5jX18sCisJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQlEQkdfRVJST1IoIkJDQVNUICIpOworCQl9CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7CisJCQlEQkdfRVJST1IoIlBST01JU0MgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQkJREJHX0VSUk9SKCJBTExfTUNBU1QgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKKwkJCURCR19FUlJPUigiTUNBU1QgIik7CisJCX0KKwkJREJHX0VSUk9SKCJcbiIpOworCX0KKwlzdGF0dXMgPSBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJzeGdfaWZfaW5pdDogc3hnX3JlZ2lzdGVyX2ludGVycnVwdCBGQUlMRUQgJXhcbiIsCisJCQkgIHN0YXR1cyk7CisJCXN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfVVA7CisKKwkvKgorCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cworCSAqLworCURCR19FUlJPUigic3hnOiAlcyBFTkFCTEUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X29wZW4ocF9uZXRfZGV2aWNlIGRldikKK3sKKwlwX2FkYXB0ZXJfdCBhZGFwdGVyID0gKHBfYWRhcHRlcl90KSBuZXRkZXZfcHJpdihkZXYpOworCWludCBzdGF0dXM7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIGFkYXB0ZXItPmFjdGl2YXRlZFslZF1cbiIsIF9fZnVuY19fLAorCQkgIGFkYXB0ZXItPmFjdGl2YXRlZCk7CisJREJHX0VSUk9SCisJICAgICgic3hnOiAlcyAoJXMpOiBbamlmZmllc1slbHhdIGNwdSAlZF0gZGV2WyVwXSBhZGFwdFslcF0gcG9ydFslZF1cbiIsCisJICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCksCisJICAgICBhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQpOworCisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCWlmICghYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCXN4Z19nbG9iYWwubnVtX3N4Z19wb3J0c19hY3RpdmUrKzsKKwkJYWRhcHRlci0+YWN0aXZhdGVkID0gMTsKKwl9CisJLyogSW5pdGlhbGl6ZSB0aGUgYWRhcHRlciAqLworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyXG4iLCBfX2Z1bmNfXyk7CisJc3RhdHVzID0gc3hnX2luaXRpYWxpemVfYWRhcHRlcihhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyIHN0YXR1c1sleF1cbiIsCisJCSAgX19mdW5jX18sIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaWZfaW5pdFxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSBzeGdfaWZfaW5pdChhZGFwdGVyKTsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2lmX2luaXQgc3RhdHVzWyV4XVxuIiwgX19mdW5jX18sCisJCQkgIHN0YXR1cyk7CisJfQorCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCQlzeGdfZ2xvYmFsLm51bV9zeGdfcG9ydHNfYWN0aXZlLS07CisJCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssCisJCQkJICAgICAgIHN4Z19nbG9iYWwuZmxhZ3MpOworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCURCR19FUlJPUigic3hnOiAlcyBFTkFCTEUgQUxMIElOVEVSUlVQVFNcbiIsIF9fZnVuY19fKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJU1hHX0VOQUJMRV9BTExfSU5URVJSVVBUUyhhZGFwdGVyKTsKKworCURCR19FUlJPUigic3hnOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzeGdfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJcF9uZXRfZGV2aWNlIGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOworCXUzMiBtbWlvX3N0YXJ0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbW1pb19sZW4gPSAwOworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIGRldlslcF0gYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBkZXYsCisJCSAgYWRhcHRlcik7CisJc3hnX2RlcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOworCXN4Z191bm1hcF9tbWlvX3NwYWNlKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyB1bnJlZ2lzdGVyX25ldGRldlxuIiwgX19mdW5jX18pOworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgcmVsX3JlZ2lvbigwKSBzdGFydFsleF0gbGVuWyV4XVxuIiwgX19mdW5jX18sCisJCSAgbW1pb19zdGFydCwgbW1pb19sZW4pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgaW91bm1hcCBkZXYtPmJhc2VfYWRkclsleF1cbiIsIF9fZnVuY19fLAorCQkgICh1bnNpZ25lZCBpbnQpZGV2LT5iYXNlX2FkZHIpOworCWlvdW5tYXAoKGNoYXIgKilkZXYtPmJhc2VfYWRkcik7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgZGVhbGxvY2F0ZSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwlrZnJlZShkZXYpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X2hhbHQocF9uZXRfZGV2aWNlIGRldikKK3sKKwlwX2FkYXB0ZXJfdCBhZGFwdGVyID0gKHBfYWRhcHRlcl90KSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVOVEVSXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0RPV047CisJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSAwOworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIHNldCBhZGFwdGVyWyVwXSBzdGF0ZSB0byBBREFQVF9ET1dOKCVkKVxuIiwKKwkJICBfX2Z1bmNfXywgZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5zdGF0ZSk7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFWElUXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19mdW5jX18pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCitzdGF0aWMgaW50IHN4Z19pb2N0bChwX25ldF9kZXZpY2UgZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCUFTU0VSVChycSk7CisvKiAgICAgIERCR19FUlJPUigic3hnOiAlcyBjbWRbJXhdIHJxWyVwXSBkZXZbJXBdXG4iLCBfX2Z1bmNfXywgY21kLCBycSwgZGV2KTsgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ1NMSUNTRVRJTlRBR0c6CisJCXsKKy8qICAgICAgICAgICAgICAgICAgICAgIHBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7ICovCisJCQl1MzIgZGF0YVs3XTsKKwkJCXUzMiBpbnRhZ2c7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgeworCQkJCURCR19FUlJPUgorCQkJCSAgICAoImNvcHlfZnJvbV91c2VyIEZBSUxFRCAgZ2V0dGluZyBpbml0aWFsIHBhcmFtc1xuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQlpbnRhZ2cgPSBkYXRhWzBdOworCQkJcHJpbnRrKEtFUk5fRU1FUkcKKwkJCSAgICAgICAiJXM6IHNldCBpbnRlcnJ1cHQgYWdncmVnYXRpb24gdG8gJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGludGFnZyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJZGVmYXVsdDoKKy8qICAgICAgICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgVU5TVVBQT1JURURbJXhdXG4iLCBfX2Z1bmNfXywgY21kKTsgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBOT1JNQUxfRVRIRlJBTUUgICAgIDAKKworLyoKKyAqCisgKiBzeGdfc2VuZF9wYWNrZXRzIC0gU2VuZCBhIHNrYiBwYWNrZXQKKyAqCisgKiBBcmd1bWVudHM6CisgKgkJCXNrYiAgICAgICAgICAgICAgICAgICAgIC0gVGhlIHBhY2tldCB0byBzZW5kCisgKgkJCWRldiAgICAgICAgICAgICAgICAgICAgIC0gT3VyIGxpbnV4IG5ldCBkZXZpY2UgdGhhdCByZWZzIG91ciBhZGFwdGVyCisgKgorICogUmV0dXJuOgorICoJCTAgICByZWdhcmRsZXNzIG9mIG91dGNvbWUgICAgWFhYVE9ETyByZWZlciB0byBlMTAwMCBkcml2ZXIKKyAqLworc3RhdGljIGludCBzeGdfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHBfbmV0X2RldmljZSBkZXYpCit7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX3NlbmRfcGFja2V0cyBza2JbJXBdXG4iLCBfX2Z1bmNfXywKKwkJICBza2IpOworCS8qIENoZWNrIHRoZSBhZGFwdGVyIHN0YXRlICovCisJc3dpdGNoIChhZGFwdGVyLT5TdGF0ZSkgeworCWNhc2UgU1hHX1NUQVRFX0lOSVRJQUxJWklORzoKKwljYXNlIFNYR19TVEFURV9IQUxURUQ6CisJY2FzZSBTWEdfU1RBVEVfU0hVVERPV046CisJCUFTU0VSVCgwKTsJLyogdW5leHBlY3RlZCAqLworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNYR19TVEFURV9SRVNFVFRJTkc6CisJY2FzZSBTWEdfU1RBVEVfU0xFRVA6CisJY2FzZSBTWEdfU1RBVEVfQk9PVERJQUc6CisJY2FzZSBTWEdfU1RBVEVfRElBRzoKKwljYXNlIFNYR19TVEFURV9IQUxUSU5HOgorCQlzdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKKwkJYnJlYWs7CisJY2FzZSBTWEdfU1RBVEVfUlVOTklORzoKKwkJaWYgKGFkYXB0ZXItPkxpbmtTdGF0ZSAhPSBTWEdfTElOS19VUCkgeworCQkJc3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCQlzdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKKwl9CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlnb3RvIHhtaXRfZmFpbDsKKwl9CisJLyogc2VuZCBhIHBhY2tldCAqLworCXN0YXR1cyA9IHN4Z190cmFuc21pdF9wYWNrZXQoYWRhcHRlciwgc2tiKTsKKwlpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKSB7CisJCWdvdG8geG1pdF9kb25lOworCX0KKworICAgICAgeG1pdF9mYWlsOgorCS8qIHJlamVjdCAmIGNvbXBsZXRlIGFsbCB0aGUgcGFja2V0cyBpZiB0aGV5IGNhbnQgYmUgc2VudCAqLworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKyNpZiBYWFhUT0RPCisvKiAgICAgIHN4Z19zZW5kX3BhY2tldHNfZmFpbChhZGFwdGVyLCBza2IsIHN0YXR1cyk7ICovCisjZWxzZQorCQlTWEdfRFJPUF9EVU1CX1NFTkQoYWRhcHRlciwgc2tiKTsKKwkJYWRhcHRlci0+c3RhdHMudHhfZHJvcHBlZCsrOworI2VuZGlmCisJfQorCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19zZW5kX3BhY2tldHMgc3RhdHVzWyV4XVxuIiwgX19mdW5jX18sCisJCSAgc3RhdHVzKTsKKworICAgICAgeG1pdF9kb25lOgorCXJldHVybiAwOworfQorCisvKgorICogc3hnX3RyYW5zbWl0X3BhY2tldAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGEgc2luZ2xlIHBhY2tldC4KKyAqCisgKiBBcmd1bWVudHMgLQorICoJCWFkYXB0ZXIJCQktIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIHNrYiAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gYmUgc2VudAorICoKKyAqIFJldHVybiAtCisgKiAJCVNUQVRVUyBvZiBzZW5kCisgKi8KK3N0YXRpYyBpbnQgc3hnX3RyYW5zbWl0X3BhY2tldChwX2FkYXB0ZXJfdCBhZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCVBTQ0FUVEVSX0dBVEhFUl9MSVNUIHBTZ2w7CisJUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2w7CisJdm9pZCAqU2dsQnVmZmVyOworCXUzMiBTZ2xCdWZmZXJMZW5ndGg7CisKKwkvKiBUaGUgdmFzdCBtYWpvcml0eSBvZiB3b3JrIGlzIGRvbmUgaW4gdGhlIHNoYXJlZCAqLworCS8qIHN4Z19kdW1iX3NnbCByb3V0aW5lLiAqLworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJTZW5kIiwKKwkJICBhZGFwdGVyLCBza2IsIDAsIDApOworCisJLyogQWxsb2NhdGUgYSBTR0wgYnVmZmVyICovCisJU1hHX0dFVF9TR0xfQlVGRkVSKGFkYXB0ZXIsIFN4Z1NnbCk7CisJaWYgKCFTeGdTZ2wpIHsKKwkJYWRhcHRlci0+U3RhdHMuTm9TZ2xCdWYrKzsKKwkJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlNuZFBrdEYxIiwKKwkJCSAgYWRhcHRlciwgc2tiLCAwLCAwKTsKKwkJcmV0dXJuIChTVEFUVVNfUkVTT1VSQ0VTKTsKKwl9CisJQVNTRVJUKFN4Z1NnbC0+YWRhcHRlciA9PSBhZGFwdGVyKTsKKwlTZ2xCdWZmZXIgPSBTWEdfU0dMX0JVRkZFUihTeGdTZ2wpOworCVNnbEJ1ZmZlckxlbmd0aCA9IFNYR19TR0xfQlVGX1NJWkU7CisJU3hnU2dsLT5WbGFuVGFnLlZsYW5UY2kgPSAwOworCVN4Z1NnbC0+VmxhblRhZy5WbGFuVHBpZCA9IDA7CisJU3hnU2dsLT5UeXBlID0gU1hHX1NHTF9EVU1COworCVN4Z1NnbC0+RHVtYlBhY2tldCA9IHNrYjsKKwlwU2dsID0gTlVMTDsKKworCS8qIENhbGwgdGhlIGNvbW1vbiBzeGdfZHVtYl9zZ2wgcm91dGluZSB0byBjb21wbGV0ZSB0aGUgc2VuZC4gKi8KKwlzeGdfZHVtYl9zZ2wocFNnbCwgU3hnU2dsKTsKKwkvKiBSZXR1cm4gc3VjY2VzcyAgIHN4Z19kdW1iX3NnbCAob3Igc29tZXRoaW5nIGxhdGVyKSB3aWxsIGNvbXBsZXRlIGl0LiAqLworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX2R1bWJfc2dsCisgKgorICogQXJndW1lbnRzOgorICoJCXBTZ2wgICAgIC0KKyAqCQlTeGdTZ2wgICAtIFNYR19TQ0FUVEVSX0dBVEhFUgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfZHVtYl9zZ2woUFNDQVRURVJfR0FUSEVSX0xJU1QgcFNnbCwgUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2wpCit7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IFN4Z1NnbC0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gU3hnU2dsLT5EdW1iUGFja2V0OworCS8qIEZvciBub3csIGFsbCBkdW1iLW5pYyBzZW5kcyBnbyBvbiBSU1MgcXVldWUgemVybyAqLworCVBTWEdfWE1UX1JJTkcgWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKKwlQU1hHX1JJTkdfSU5GTyBYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87CisJUFNYR19DTUQgWG10Q21kID0gTlVMTDsKKy8qICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4ID0gMDsgKi8KKwl1MzIgRGF0YUxlbmd0aCA9IHNrYi0+bGVuOworLyogIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmTGVuOyAqLworLyogICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgU2dsT2Zmc2V0OyAqLworCXU2NCBwaHlzX2FkZHI7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iU2dsIiwKKwkJICBwU2dsLCBTeGdTZ2wsIDAsIDApOworCisJLyogU2V0IGFzaWRlIGEgcG9pbnRlciB0byB0aGUgc2dsICovCisJU3hnU2dsLT5wU2dsID0gcFNnbDsKKworCS8qIFNhbml0eSBjaGVjayB0aGF0IG91ciBTR0wgZm9ybWF0IGlzIGFzIHdlIGV4cGVjdC4gKi8KKwlBU1NFUlQoc2l6ZW9mKFNYR19YNjRfU0dFKSA9PSBzaXplb2YoU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCkpOworCS8qIFNob3VsZG4ndCBiZSBhIHZsYW4gdGFnIG9uIHRoaXMgZnJhbWUgKi8KKwlBU1NFUlQoU3hnU2dsLT5WbGFuVGFnLlZsYW5UY2kgPT0gMCk7CisJQVNTRVJUKFN4Z1NnbC0+VmxhblRhZy5WbGFuVHBpZCA9PSAwKTsKKworCS8qIEZyb20gaGVyZSBiZWxvdyB3ZSB3b3JrIHdpdGggdGhlIFNHTCBwbGFjZWQgaW4gb3VyICovCisJLyogYnVmZmVyLiAqLworCisJU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyA9IDE7CisKKwkvKiBHcmFiIHRoZSBzcGlubG9jayBhbmQgYWNxdWlyZSBhIGNvbW1hbmQgKi8KKwlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlTWEdfR0VUX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBTeGdTZ2wpOworCWlmIChYbXRDbWQgPT0gTlVMTCkgeworCQkvKiBDYWxsIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQgdG8gc2VlIGlmIHdlIGNhbiAqLworCQkvKiBmcmVlIHVwIGFueSBYbXRSaW5nWmVybyBlbnRyaWVzIGFuZCB0aGVuIHRyeSBhZ2FpbiAqLworCQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQlzeGdfY29tcGxldGVfc2xvd19zZW5kKGFkYXB0ZXIpOworCQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJU1hHX0dFVF9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgU3hnU2dsKTsKKwkJaWYgKFhtdENtZCA9PSBOVUxMKSB7CisJCQlhZGFwdGVyLT5TdGF0cy5YbXRaZXJvRnVsbCsrOworCQkJZ290byBhYm9ydGNtZDsKKwkJfQorCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iQ21kIiwKKwkJICBYbXRDbWQsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CisJLyogVXBkYXRlIHN0YXRzICovCisJYWRhcHRlci0+U3RhdHMuRHVtYlhtdFBrdHMrKzsKKwlhZGFwdGVyLT5TdGF0cy5EdW1iWG10Qnl0ZXMgKz0gRGF0YUxlbmd0aDsKKyNpZiBYWFhUT0RPCQkJLyogU3RhdHMgc3R1ZmYgKi8KKwlpZiAoU1hHX01VTFRJQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCWlmIChTWEdfQlJPQURDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKKwkJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCY2FzdFBrdHMrKzsKKwkJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCY2FzdEJ5dGVzICs9IERhdGFMZW5ndGg7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10TWNhc3RQa3RzKys7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10TWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOworCQl9CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlhtdFVjYXN0UGt0cysrOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10VWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOworCX0KKyNlbmRpZgorCS8qIEZpbGwgaW4gdGhlIGNvbW1hbmQgKi8KKwkvKiBDb3B5IG91dCB0aGUgZmlyc3QgU0dFIHRvIHRoZSBjb21tYW5kIGFuZCBhZGp1c3QgZm9yIG9mZnNldCAqLworCXBoeXNfYWRkciA9CisJICAgIHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IFNYR19HRVRfQUREUl9ISUdIKHBoeXNfYWRkcik7CisJWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzIDw8IDMyOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9CisJICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyB8IFNYR19HRVRfQUREUl9MT1cocGh5c19hZGRyKTsKKy8qICAgICAgWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gU3hnU2dsLT5TZ2wuRWxlbWVudHNbSW5kZXhdLkFkZHJlc3M7ICovCisvKiAgICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcy5Mb3dQYXJ0ICs9IE1kbE9mZnNldDsgKi8KKwlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUxlbmd0aCA9IERhdGFMZW5ndGg7CisJLyogU2V0IGEgcG9pbnRlciB0byB0aGUgcmVtYWluaW5nIFNHTCBlbnRyaWVzICovCisvKiAgICAgIFhtdENtZC0+U2dsID0gU3hnU2dsLT5QaHlzaWNhbEFkZHJlc3M7ICovCisJLyogQWR2YW5jZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU3hnU2dsIHN0cnVjdHVyZSB0byAqLworCS8qIHRoZSBzZWNvbmQgU0dFICovCisvKiAgICAgIFNnbE9mZnNldCA9ICh1MzIpKCh1MzIgKikoJlN4Z1NnbC0+U2dsLkVsZW1lbnRzW0luZGV4KzFdKSAtICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyICopU3hnU2dsKTsgKi8KKy8qICAgICAgWG10Q21kLT5TZ2wuTG93UGFydCArPSBTZ2xPZmZzZXQ7ICovCisJWG10Q21kLT5CdWZmZXIuU2dlT2Zmc2V0ID0gMDsKKwkvKiBOb3RlIC0gVG90YWxMZW5ndGggbWlnaHQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBNU1MgYmVsb3cuLiAqLworCVhtdENtZC0+QnVmZmVyLlRvdGFsTGVuZ3RoID0gRGF0YUxlbmd0aDsKKwlYbXRDbWQtPlNnRW50cmllcyA9IDE7CS8qKHVzaG9ydCkoU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyAtIEluZGV4KTsgKi8KKwlYbXRDbWQtPkZsYWdzID0gMDsKKwkvKiAqLworCS8qIEFkdmFuY2UgdHJhbnNtaXQgY21kIGRlc2NyaXB0ZXIgYnkgMS4gKi8KKwkvKiBOT1RFIC0gU2VlIGNvbW1lbnRzIGluIFN4Z1RjcE91dHB1dCB3aGVyZSB3ZSB3cml0ZSAqLworCS8qIHRvIHRoZSBYbXRDbWQgcmVnaXN0ZXIgcmVnYXJkaW5nIENQVSBJRCB2YWx1ZXMgYW5kL29yICovCisJLyogbXVsdGlwbGUgY29tbWFuZHMuICovCisJLyogKi8KKwkvKiAqLworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10Q21kLCAxLCBUUlVFKTsKKwkvKiAqLworCS8qICovCisJYWRhcHRlci0+U3RhdHMuWG10UUxlbisrOwkvKiBTdGF0cyB3aXRoaW4gbG9jayAqLworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWER1bVNnbDIiLAorCQkgIFhtdENtZCwgcFNnbCwgU3hnU2dsLCAwKTsKKwlyZXR1cm47CisKKyAgICAgIGFib3J0Y21kOgorCS8qIE5PVEUgLSBPbmx5IGp1bXAgdG8gdGhpcyBsYWJlbCBBRlRFUiBncmFiYmluZyB0aGUgKi8KKwkvKiBYbXRaZXJvTG9jaywgYW5kIERPIE5PVCBEUk9QIElUIGJldHdlZW4gdGhlICovCisJLyogY29tbWFuZCBhbGxvY2F0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGFib3J0LiAqLworCWlmIChYbXRDbWQpIHsKKwkJU1hHX0FCT1JUX0NNRChYbXRSaW5nSW5mbyk7CisJfQorCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisKKy8qIGZhaWxzZ2w6ICovCisJLyogSnVtcCB0byB0aGlzIGxhYmVsIGlmIGZhaWx1cmUgb2NjdXJzIGJlZm9yZSB0aGUgKi8KKwkvKiBYbXRaZXJvTG9jayBpcyBncmFiYmVkICovCisJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIkR1bVNHRmFsIiwKKwkJICBwU2dsLCBTeGdTZ2wsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCk7CisKKwlTWEdfQ09NUExFVEVfRFVNQl9TRU5EKGFkYXB0ZXIsIFN4Z1NnbC0+RHVtYlBhY2tldCk7CS8qIFN4Z1NnbC0+RHVtYlBhY2tldCBpcyB0aGUgc2tiICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzeGdfaW5pdGlhbGl6ZV9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgbGluayBzdHVmZgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2xpbmsocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXUzMiBWYWx1ZTsKKwl1MzIgQ29uZmlnRGF0YTsKKwl1MzIgTWF4RnJhbWU7CisJaW50IHN0YXR1czsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluaXRMaW5rIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8qIFJlc2V0IFBIWSBhbmQgWEdYUyBtb2R1bGUgKi8KKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLCBMU19TRVJERVNfUE9XRVJfRE9XTiwgVFJVRSk7CisKKwkvKiBSZXNldCB0cmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJV1JJVEVfUkVHKEh3UmVncy0+WG10Q29uZmlnLCBYTVRfQ09ORklHX1JFU0VULCBUUlVFKTsKKworCS8qIFJlc2V0IHJlY2VpdmUgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCVdSSVRFX1JFRyhId1JlZ3MtPlJjdkNvbmZpZywgUkNWX0NPTkZJR19SRVNFVCwgVFJVRSk7CisKKwkvKiBSZXNldCBhbGwgTUFDIG1vZHVsZXMgKi8KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQsIFRSVUUpOworCisJLyogTGluayBhZGRyZXNzIDAgKi8KKwkvKiBYWFhUT0RPIC0gVGhpcyBhc3N1bWVzIHRoZSBNQUMgYWRkcmVzcyAoMGE6MGI6MGM6MGQ6MGU6MGYpICovCisJLyogaXMgc3RvcmVkIHdpdGggdGhlIGZpcnN0IG5pYmJsZSAoMGEpIGluIHRoZSBieXRlIDAgKi8KKwkvKiBvZiB0aGUgTWFjIGFkZHJlc3MuICBQb3NzaWJseSByZXZlcnNlPyAqLworCVZhbHVlID0gKih1MzIgKikgYWRhcHRlci0+TWFjQWRkcjsKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczBMb3csIFZhbHVlLCBUUlVFKTsKKwkvKiBhbHNvIHdyaXRlIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgTUFDLiAgRW5kaWFuIGlzIHJldmVyc2VkLiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FkZHJlc3NMb3csIG50b2hsKFZhbHVlKSwgVFJVRSk7CisJVmFsdWUgPSAoKih1MTYgKikgJiBhZGFwdGVyLT5NYWNBZGRyWzRdICYgMHgwMDAwRkZGRik7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MwSGlnaCwgVmFsdWUgfCBMSU5LX0FERFJFU1NfRU5BQkxFLCBUUlVFKTsKKwkvKiBlbmRpYW4gc3dhcCBmb3IgdGhlIE1BQyAocHV0IGhpZ2ggYnl0ZXMgaW4gYml0cyBbMzE6MTZdLCBzd2FwcGVkKSAqLworCVZhbHVlID0gbnRvaGwoVmFsdWUpOworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FkZHJlc3NIaWdoLCBWYWx1ZSwgVFJVRSk7CisJLyogTGluayBhZGRyZXNzIDEgKi8KKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczFMb3csIDAsIFRSVUUpOworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMUhpZ2gsIDAsIFRSVUUpOworCS8qIExpbmsgYWRkcmVzcyAyICovCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MyTG93LCAwLCBUUlVFKTsKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczJIaWdoLCAwLCBUUlVFKTsKKwkvKiBMaW5rIGFkZHJlc3MgMyAqLworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzM0xvdywgMCwgVFJVRSk7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MzSGlnaCwgMCwgVFJVRSk7CisKKwkvKiBFbmFibGUgTUFDIG1vZHVsZXMgKi8KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCAwLCBUUlVFKTsKKworCS8qIENvbmZpZ3VyZSBNQUMgKi8KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcxLCAoQVhHTUFDX0NGRzFfWE1UX1BBVVNFIHwJLyogQWxsb3cgc2VuZGluZyBvZiBwYXVzZSAqLworCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9YTVRfRU4gfAkvKiBFbmFibGUgWE1UICovCisJCQkJICAgICAgIEFYR01BQ19DRkcxX1JDVl9QQVVTRSB8CS8qIEVuYWJsZSBkZXRlY3Rpb24gb2YgcGF1c2UgKi8KKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfUkNWX0VOIHwJLyogRW5hYmxlIHJlY2VpdmUgKi8KKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUIHwJLyogc2hvcnQgZnJhbWUgZGV0ZWN0aW9uICovCisJCQkJICAgICAgIEFYR01BQ19DRkcxX0NIRUNLX0xFTiB8CS8qIFZlcmlmeSBmcmFtZSBsZW5ndGggKi8KKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfR0VOX0ZDUyB8CS8qIEdlbmVyYXRlIEZDUyAqLworCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9QQURfNjQpLAkvKiBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzICovCisJCSAgVFJVRSk7CisKKwkvKiBTZXQgQVhHTUFDIG1heCBmcmFtZSBsZW5ndGggaWYganVtYm8uICBOb3QgbmVlZGVkIGZvciBzdGFuZGFyZCBNVFUgKi8KKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkKSB7CisJCVdSSVRFX1JFRyhId1JlZ3MtPk1hY01heEZyYW1lTGVuLCBBWEdNQUNfTUFYRlJBTUVfSlVNQk8sIFRSVUUpOworCX0KKwkvKiBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0gKi8KKwkvKiBUaGUgdmFsdWUgcGxhY2VkIGluIHRoZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sgcG9ydGlvbiAqLworCS8qIChib3R0b20gYml0cykgb2YgdGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgKi8KKwkvKiBNREMgZnJlcXVlbmN5IGFzIHNwZWNpZmllZCBpbiB0aGUgQS1YR01BQyBEZXNpZ24gRG9jdW1lbnQuICovCisJLyogVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSB6ZXJvLiAgVGhlIGZvbGxvd2luZyB2YWx1ZSAoNjIgb3IgMHgzRSkgKi8KKwkvKiBpcyBiYXNlZCBvbiBvdXIgTUFDIHRyYW5zbWl0IGNsb2NrIGZyZXF1ZW5jeSAoTVRDTEspIG9mIDMxMi41IE1Iei4gKi8KKwkvKiBHaXZlbiBhIG1heGltdW0gTURJTyBjbG9jayBmcmVxdWVuY3kgb2YgMi41IE1IeiAoc2VlIHRoZSBQSFkgc3BlYyksICovCisJLyogd2UgZ2V0OiAgMzEyLjUvKDIqKFgrMSkpIDwgMi41ICA9PT4gWCA9IDYyLiAqLworCS8qIFRoaXMgdmFsdWUgaGFwcGVucyB0byBiZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyByZWdpc3RlciwgKi8KKwkvKiBzbyB3ZSByZWFsbHkgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzLiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ29uZmlnLCAweDAwMDAwMDNFLCBUUlVFKTsKKworCS8qIFBvd2VyIHVwIGFuZCBlbmFibGUgUEhZIGFuZCBYQVVJL1hHWFMvU2VyZGVzIGxvZ2ljICovCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua1N0YXR1cywKKwkJICAoTFNfUEhZX0NMUl9SRVNFVCB8CisJCSAgIExTX1hHWFNfRU5BQkxFIHwKKwkJICAgTFNfWEdYU19DVEwgfCBMU19QSFlfQ0xLX0VOIHwgTFNfQVRUTl9BTEFSTSksIFRSVUUpOworCURCR19FUlJPUigiQWZ0ZXIgUG93ZXIgVXAgYW5kIGVuYWJsZSBQSFkgaW4gc3hnX2luaXRpYWxpemVfbGlua1xuIik7CisKKwkvKiBQZXIgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgQWVsdXJvcywgd2FpdCAxMDAgbXMgYWZ0ZXIgcmVtb3ZpbmcgcmVzZXQuICovCisJLyogSXQncyBub3QgZW5vdWdoIHRvIHdhaXQgZm9yIHRoZSBzZWxmLWNsZWFyaW5nIHJlc2V0IGJpdCBpbiByZWcgMCB0byBjbGVhci4gKi8KKwltZGVsYXkoMTAwKTsKKworCS8qIFZlcmlmeSB0aGUgUEhZIGhhcyBjb21lIHVwIGJ5IGNoZWNraW5nIHRoYXQgdGhlIFJlc2V0IGJpdCBoYXMgY2xlYXJlZC4gKi8KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJCQkgICBQSFlfUE1BX0NPTlRST0wxLAkvKiBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCWlmIChWYWx1ZSAmIFBNQV9DT05UUk9MMV9SRVNFVCkJLyogcmVzZXQgY29tcGxldGUgaWYgYml0IGlzIDAgKi8KKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvKiBUaGUgU0VSREVTIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSBub3cgLSBjb25maXJtICovCisJUkVBRF9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLCBWYWx1ZSk7CisJaWYgKFZhbHVlICYgTFNfU0VSREVTX0RPV04pCS8qIHZlcmlmeSBTRVJERVMgaXMgaW5pdGlhbGl6ZWQgKi8KKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvKiBUaGUgWEFVSSBsaW5rIHNob3VsZCBhbHNvIGJlIHVwIC0gY29uZmlybSAqLworCWlmICghKFZhbHVlICYgTFNfWEFVSV9MSU5LX1VQKSkJLyogdmVyaWZ5IFhBVUkgbGluayBpcyB1cCAqLworCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKworCS8qIEluaXRpYWxpemUgdGhlIFBIWSAqLworCXN0YXR1cyA9IHN4Z19waHlfaW5pdChhZGFwdGVyKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKworCS8qIEVuYWJsZSB0aGUgTGluayBBbGFybSAqLworCXN0YXR1cyA9IHN4Z193cml0ZV9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJCQkgICAgTEFTSV9DT05UUk9MLAkvKiBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJCQkgICAgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKTsJLyogZW5hYmxlIGxpbmsgYWxhcm0gYml0ICovCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvKiBYWFhUT0RPIC0gdGVtcG9yYXJ5IC0gdmVyaWZ5IGJpdCBpcyBzZXQgKi8KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJCQkgICBMQVNJX0NPTlRST0wsCS8qIExBU0kgY29udHJvbCByZWdpc3RlciAqLworCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisJaWYgKCEoVmFsdWUgJiBMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUpKSB7CisJCURCR19FUlJPUigiRXJyb3IhICBMQVNJIENvbnRyb2wgQWxhcm0gRW5hYmxlIGJpdCBub3Qgc2V0IVxuIik7CisJfQorCS8qIEVuYWJsZSByZWNlaXZlICovCisJTWF4RnJhbWUgPSBhZGFwdGVyLT5KdW1ib0VuYWJsZWQgPyBKVU1CT01BWEZSQU1FIDogRVRIRVJNQVhGUkFNRTsKKwlDb25maWdEYXRhID0gKFJDVl9DT05GSUdfRU5BQkxFIHwKKwkJICAgICAgUkNWX0NPTkZJR19FTlBBUlNFIHwKKwkJICAgICAgUkNWX0NPTkZJR19SQ1ZCQUQgfAorCQkgICAgICBSQ1ZfQ09ORklHX1JDVlBBVVNFIHwKKwkJICAgICAgUkNWX0NPTkZJR19UWklQVjYgfAorCQkgICAgICBSQ1ZfQ09ORklHX1RaSVBWNCB8CisJCSAgICAgIFJDVl9DT05GSUdfSEFTSF8xNiB8CisJCSAgICAgIFJDVl9DT05GSUdfU09DS0VUIHwgUkNWX0NPTkZJR19CVUZTSVpFKE1heEZyYW1lKSk7CisJV1JJVEVfUkVHKEh3UmVncy0+UmN2Q29uZmlnLCBDb25maWdEYXRhLCBUUlVFKTsKKworCVdSSVRFX1JFRyhId1JlZ3MtPlhtdENvbmZpZywgWE1UX0NPTkZJR19FTkFCTEUsIFRSVUUpOworCisJLyogTWFyayB0aGUgbGluayBhcyBkb3duLiAgV2UnbGwgZ2V0IGEgbGluayBldmVudCB3aGVuIGl0IGNvbWVzIHVwLiAqLworCXN4Z19saW5rX3N0YXRlKGFkYXB0ZXIsIFNYR19MSU5LX0RPV04pOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEluaXRMbmsiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX3BoeV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgUEhZCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybgorICoJc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgc3hnX3BoeV9pbml0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJdTMyIFZhbHVlOworCVBQSFlfVUNPREUgcDsKKwlpbnQgc3RhdHVzOworCisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19mdW5jX18pOworCisJLyogUmVhZCBhIHJlZ2lzdGVyIHRvIGlkZW50aWZ5IHRoZSBQSFkgdHlwZSAqLworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLworCQkJCSAgIDB4QzIwNSwJLyogUEhZIElEIHJlZ2lzdGVyICg/KSAqLworCQkJCSAgICZWYWx1ZSk7CS8qICAgIFhYWFRPRE8gLSBhZGQgZGVmICovCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwlpZiAoVmFsdWUgPT0gMHgwMDEyKSB7CS8qIDB4MDAxMiA9PSBBRUwyMDA1QyBQSFkoPykgLSBYWFhUT0RPIC0gYWRkIGRlZiAqLworCQlEQkdfRVJST1IKKwkJICAgICgiQUVMMjAwNUMgUEhZIGRldGVjdGVkLiAgRG93bmxvYWRpbmcgUEhZIG1pY3JvY29kZS5cbiIpOworCisJCS8qIEluaXRpYWxpemUgQUVMMjAwNUMgUEhZIGFuZCBkb3dubG9hZCBQSFkgbWljcm9jb2RlICovCisJCWZvciAocCA9IFBoeVVjb2RlOyBwLT5BZGRyICE9IDB4RkZGRjsgcCsrKSB7CisJCQlpZiAocC0+QWRkciA9PSAwKSB7CisJCQkJLyogaWYgYWRkcmVzcyA9PSAwLCBkYXRhID09IHNsZWVwIHRpbWUgaW4gbXMgKi8KKwkJCQltZGVsYXkocC0+RGF0YSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHdyaXRlIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyAqLworCQkJCXN0YXR1cyA9IHN4Z193cml0ZV9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJCQkJCQkgICAgcC0+QWRkciwJLyogUEhZIGFkZHJlc3MgKi8KKwkJCQkJCQkgICAgcC0+RGF0YSk7CS8qIFBIWSBkYXRhICovCisJCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisJCQl9CisJCX0KKwl9CisJREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIHN4Z19saW5rX2V2ZW50IC0gUHJvY2VzcyBhIGxpbmsgZXZlbnQgbm90aWZpY2F0aW9uIGZyb20gdGhlIGNhcmQKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglOb25lCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19saW5rX2V2ZW50KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19IV19SRUdTIEh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlTWEdfTElOS19TVEFURSBMaW5rU3RhdGU7CisJaW50IHN0YXR1czsKKwl1MzIgVmFsdWU7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJMaW5rRXZudCIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19mdW5jX18pOworCisJLyogQ2hlY2sgdGhlIExpbmsgU3RhdHVzIHJlZ2lzdGVyLiAgV2Ugc2hvdWxkIGhhdmUgYSBMaW5rIEFsYXJtLiAqLworCVJFQURfUkVHKEh3UmVncy0+TGlua1N0YXR1cywgVmFsdWUpOworCWlmIChWYWx1ZSAmIExTX0xJTktfQUxBUk0pIHsKKwkJLyogV2UgZ290IGEgTGluayBTdGF0dXMgYWxhcm0uICBGaXJzdCwgcGF1c2UgdG8gbGV0IHRoZSAqLworCQkvKiBsaW5rIHN0YXRlIHNldHRsZSAoaXQgY2FuIGJvdW5jZSBhIG51bWJlciBvZiB0aW1lcykgKi8KKwkJbWRlbGF5KDEwKTsKKworCQkvKiBOb3cgY2xlYXIgdGhlIGFsYXJtIGJ5IHJlYWRpbmcgdGhlIExBU0kgc3RhdHVzIHJlZ2lzdGVyLiAqLworCQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJCQkJICAgTEFTSV9TVEFUVVMsCS8qIExBU0kgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCSAgICZWYWx1ZSk7CisJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBMQVNJIFN0YXR1cyBNRElPIHJlZ2lzdGVyIVxuIik7CisJCQlzeGdfbGlua19zdGF0ZShhZGFwdGVyLCBTWEdfTElOS19ET1dOKTsKKy8qICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsgKi8KKwkJfQorCQlBU1NFUlQoVmFsdWUgJiBMQVNJX1NUQVRVU19MU19BTEFSTSk7CisKKwkJLyogTm93IGdldCBhbmQgc2V0IHRoZSBsaW5rIHN0YXRlICovCisJCUxpbmtTdGF0ZSA9IHN4Z19nZXRfbGlua19zdGF0ZShhZGFwdGVyKTsKKwkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKKwkJREJHX0VSUk9SKCJTWEc6IExpbmsgQWxhcm0gb2NjdXJyZWQuICBMaW5rIGlzICVzXG4iLAorCQkJICAoKExpbmtTdGF0ZSA9PSBTWEdfTElOS19VUCkgPyAiVVAiIDogIkRPV04iKSk7CisJfSBlbHNlIHsKKwkJLyogWFhYVE9ETyAtIEFzc3VtaW5nIExpbmsgQXR0ZW50aW9uIGlzIG9ubHkgYmVpbmcgZ2VuZXJhdGVkIGZvciB0aGUgKi8KKwkJLyogTGluayBBbGFybSBwaW4gKGFuZCBub3QgZm9yIGEgWEFVSSBMaW5rIFN0YXR1cyBjaGFuZ2UpLCB0aGVuIGl0J3MgKi8KKwkJLyogaW1wb3NzaWJsZSB0byBnZXQgaGVyZS4gIFlldCB3ZSd2ZSBnb3R0ZW4gaGVyZSB0d2ljZSAodW5kZXIgZXh0cmVtZSAqLworCQkvKiBjb25kaXRpb25zIC0gYm91bmNpbmcgdGhlIGxpbmsgdXAgYW5kIGRvd24gbWFueSB0aW1lcyBhIHNlY29uZCkuICovCisJCS8qIE5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gKi8KKwkJREJHX0VSUk9SKCJTWEc6IHN4Z19saW5rX2V2ZW50OiBDYW4ndCBnZXQgaGVyZSFcbiIpOworCQlEQkdfRVJST1IoIlNYRzogTGluayBTdGF0dXMgPT0gMHglMDhYLlxuIiwgVmFsdWUpOworLyogICAgICAgICAgICAgIEFTU0VSVCgwKTsgKi8KKwl9CisJREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX2Z1bmNfXyk7CisKK30KKworLyoKKyAqIHN4Z19nZXRfbGlua19zdGF0ZSAtIERldGVybWluZSBpZiB0aGUgbGluayBpcyB1cCBvciBkb3duCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybgorICoJTGluayBTdGF0ZQorICovCitzdGF0aWMgU1hHX0xJTktfU1RBVEUgc3hnX2dldF9saW5rX3N0YXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKwl1MzIgVmFsdWU7CisKKwlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJHZXRMaW5rIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8qIFBlciB0aGUgWGVucGFrIHNwZWMgKGFuZCB0aGUgSUVFRSAxMEdiIHNwZWM/KSwgdGhlIGxpbmsgaXMgdXAgaWYgKi8KKwkvKiB0aGUgZm9sbG93aW5nIDMgYml0cyAoZnJvbSAzIGRpZmZlcmVudCBNRElPIHJlZ2lzdGVycykgYXJlIGFsbCB0cnVlLiAqLworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLworCQkJCSAgIFBIWV9QTUFfUkNWX0RFVCwJLyogUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QgcmVnaXN0ZXIgKi8KKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gYmFkOworCisJLyogSWYgUE1BL1BNRCByZWNlaXZlIHNpZ25hbCBkZXRlY3QgaXMgMCwgdGhlbiB0aGUgbGluayBpcyBkb3duICovCisJaWYgKCEoVmFsdWUgJiBQTUFfUkNWX0RFVEVDVCkpCisJCXJldHVybiAoU1hHX0xJTktfRE9XTik7CisKKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUENTLAkvKiBQSFkgUENTIG1vZHVsZSAqLworCQkJCSAgIFBIWV9QQ1NfMTBHX1NUQVRVUzEsCS8qIFBDUyAxMEdCQVNFLVIgU3RhdHVzIDEgcmVnaXN0ZXIgKi8KKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gYmFkOworCisJLyogSWYgUENTIGlzIG5vdCBsb2NrZWQgdG8gcmVjZWl2ZSBibG9ja3MsIHRoZW4gdGhlIGxpbmsgaXMgZG93biAqLworCWlmICghKFZhbHVlICYgUENTXzEwQl9CTE9DS19MT0NLKSkKKwkJcmV0dXJuIChTWEdfTElOS19ET1dOKTsKKworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9YUywJLyogUEhZIFhTIG1vZHVsZSAqLworCQkJCSAgIFBIWV9YU19MQU5FX1NUQVRVUywJLyogWFMgTGFuZSBTdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gYmFkOworCisJLyogSWYgWFMgdHJhbnNtaXQgbGFuZXMgYXJlIG5vdCBhbGlnbmVkLCB0aGVuIHRoZSBsaW5rIGlzIGRvd24gKi8KKwlpZiAoIShWYWx1ZSAmIFhTX0xBTkVfQUxJR04pKQorCQlyZXR1cm4gKFNYR19MSU5LX0RPV04pOworCisJLyogQWxsIDMgYml0cyBhcmUgdHJ1ZSwgc28gdGhlIGxpbmsgaXMgdXAgKi8KKwlEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAoU1hHX0xJTktfVVApOworCisgICAgICBiYWQ6CisJLyogQW4gZXJyb3Igb2NjdXJyZWQgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyLiAgVGhpcyBzaG91bGRuJ3QgaGFwcGVuLiAqLworCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyIVxuIik7CisJQVNTRVJUKDApOworCXJldHVybiAoU1hHX0xJTktfRE9XTik7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19pbmRpY2F0ZV9saW5rX3N0YXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJICAgIFNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZSkKK3sKKwlpZiAoYWRhcHRlci0+TGlua1N0YXRlID09IFNYR19MSU5LX1VQKSB7CisJCURCR19FUlJPUigiJXM6IExJTksgbm93IFVQLCBjYWxsIG5ldGlmX3N0YXJ0X3F1ZXVlXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJfSBlbHNlIHsKKwkJREJHX0VSUk9SKCIlczogTElOSyBub3cgRE9XTiwgY2FsbCBuZXRpZl9zdG9wX3F1ZXVlXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwl9Cit9CisKKy8qCisgKiBzeGdfbGlua19zdGF0ZSAtIFNldCB0aGUgbGluayBzdGF0ZSBhbmQgaWYgbmVjZXNzYXJ5LCBpbmRpY2F0ZS4KKyAqCVRoaXMgcm91dGluZSB0aGUgY2VudHJhbCBwb2ludCBvZiBwcm9jZXNzaW5nIGZvciBhbGwgbGluayBzdGF0ZSBjaGFuZ2VzLgorICoJTm90aGluZyBlbHNlIGluIHRoZSBkcml2ZXIgc2hvdWxkIGFsdGVyIHRoZSBsaW5rIHN0YXRlIG9yIHBlcmZvcm0KKyAqCWxpbmsgc3RhdGUgaW5kaWNhdGlvbnMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKglMaW5rU3RhdGUgCS0gVGhlIGxpbmsgc3RhdGUKKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUocF9hZGFwdGVyX3QgYWRhcHRlciwgU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJMbmtJTkRDVCIsCisJCSAgYWRhcHRlciwgTGlua1N0YXRlLCBhZGFwdGVyLT5MaW5rU3RhdGUsIGFkYXB0ZXItPlN0YXRlKTsKKworCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIEhvbGQgdGhlIGFkYXB0ZXIgbG9jayBkdXJpbmcgdGhpcyByb3V0aW5lLiAgTWF5YmUgbW92ZSAqLworCS8qIHRoZSBsb2NrIHRvIHRoZSBjYWxsZXIuICovCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJaWYgKExpbmtTdGF0ZSA9PSBhZGFwdGVyLT5MaW5rU3RhdGUpIHsKKwkJLyogTm90aGluZyBjaGFuZ2VkLi4gKi8KKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJREJHX0VSUk9SKCJFWElUICMwICVzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJLyogU2F2ZSB0aGUgYWRhcHRlciBzdGF0ZSAqLworCWFkYXB0ZXItPkxpbmtTdGF0ZSA9IExpbmtTdGF0ZTsKKworCS8qIERyb3AgdGhlIGxvY2sgYW5kIGluZGljYXRlIGxpbmsgc3RhdGUgKi8KKwlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCURCR19FUlJPUigiRVhJVCAjMSAlc1xuIiwgX19mdW5jX18pOworCisJc3hnX2luZGljYXRlX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKK30KKworLyoKKyAqIHN4Z193cml0ZV9tZGlvX3JlZyAtIFdyaXRlIHRvIGEgcmVnaXN0ZXIgb24gdGhlIE1ESU8gYnVzCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogIERldkFkZHIgICAgIC0gTURJTyBkZXZpY2UgbnVtYmVyIGJlaW5nIGFkZHJlc3NlZAorICogIFJlZ0FkZHIgICAgIC0gcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBNRElPIGRldmljZQorICogIFZhbHVlCQktIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBNRElPIHJlZ2lzdGVyCisgKgorICogUmV0dXJuCisgKglzdGF0dXMKKyAqLworc3RhdGljIGludCBzeGdfd3JpdGVfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyIFZhbHVlKQoreworCVBTWEdfSFdfUkVHUyBId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJdTMyIEFkZHJPcDsJCS8qIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLworCXUzMiBXcml0ZU9wOwkJLyogV3JpdGUgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLworCXUzMiBDbWQ7CQkvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCisJdTMyIFZhbHVlUmVhZDsKKwl1MzIgVGltZW91dDsKKworLyogIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsgKi8KKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIldydE1ESU8iLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJLyogRW5zdXJlIHZhbHVlcyBkb24ndCBleGNlZWQgZmllbGQgd2lkdGggKi8KKwlEZXZBZGRyICY9IDB4MDAxRjsJLyogNS1iaXQgZmllbGQgKi8KKwlSZWdBZGRyICY9IDB4RkZGRjsJLyogMTYtYml0IGZpZWxkICovCisJVmFsdWUgJj0gMHhGRkZGOwkvKiAxNi1iaXQgZmllbGQgKi8KKworCS8qIFNldCBNSUlNIGZpZWxkIHJlZ2lzdGVyIGJpdHMgZm9yIGFuIE1JSU0gYWRkcmVzcyBvcGVyYXRpb24gKi8KKwlBZGRyT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX0FERFIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKSB8IFJlZ0FkZHI7CisKKwkvKiBTZXQgTUlJTSBmaWVsZCByZWdpc3RlciBiaXRzIGZvciBhbiBNSUlNIHdyaXRlIG9wZXJhdGlvbiAqLworCVdyaXRlT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX1dSSVRFIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkgfCBWYWx1ZTsKKworCS8qIFNldCBNSUlNIGNvbW1hbmQgcmVnaXN0ZXIgYml0cyB0byBleGVjdXRlIGFuIE1JSU0gY29tbWFuZCAqLworCUNtZCA9IEFYR01BQ19BTUlJTV9DTURfU1RBUlQgfCBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT047CisKKwkvKiBSZXNldCB0aGUgY29tbWFuZCByZWdpc3RlciBjb21tYW5kIGJpdCAoaW4gY2FzZSBpdCdzIG5vdCAwKSAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCAwLCBUUlVFKTsKKworCS8qIE1JSU0gd3JpdGUgdG8gc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgTURJTyByZWdpc3RlciAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIEFkZHJPcCwgVFJVRSk7CisKKwkvKiBXcml0ZSB0byBNSUlNIENvbW1hbmQgUmVnaXN0ZXIgdG8gZXhlY3V0ZSB0byBhZGRyZXNzIG9wZXJhdGlvbiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLyogUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbiAqLworCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8qIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMgKi8KKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisJLyogUmVzZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgY29tbWFuZCBiaXQgKi8KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgMCwgVFJVRSk7CisKKwkvKiBNSUlNIHdyaXRlIHRvIHNldCB1cCBhbiBNRElPIHdyaXRlIG9wZXJhdGlvbiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIFdyaXRlT3AsIFRSVUUpOworCisJLyogV3JpdGUgdG8gTUlJTSBDb21tYW5kIFJlZ2lzdGVyIHRvIGV4ZWN1dGUgdGhlIHdyaXRlIG9wZXJhdGlvbiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLyogUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbiAqLworCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8qIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMgKi8KKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisvKiAgREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX2Z1bmNfXyk7ICovCisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIHN4Z19yZWFkX21kaW9fcmVnIC0gUmVhZCBhIHJlZ2lzdGVyIG9uIHRoZSBNRElPIGJ1cworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICBEZXZBZGRyICAgICAtIE1ESU8gZGV2aWNlIG51bWJlciBiZWluZyBhZGRyZXNzZWQKKyAqICBSZWdBZGRyICAgICAtIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgTURJTyBkZXZpY2UKKyAqICBwVmFsdWUJCS0gcG9pbnRlciB0byB3aGVyZSB0byBwdXQgZGF0YSByZWFkIGZyb20gdGhlIE1ESU8gcmVnaXN0ZXIKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z19yZWFkX21kaW9fcmVnKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyICpwVmFsdWUpCit7CisJUFNYR19IV19SRUdTIEh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwl1MzIgQWRkck9wOwkJLyogQWRkcmVzcyBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCisJdTMyIFJlYWRPcDsJCS8qIFJlYWQgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLworCXUzMiBDbWQ7CQkvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCisJdTMyIFZhbHVlUmVhZDsKKwl1MzIgVGltZW91dDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIldydE1ESU8iLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworLyogIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsgKi8KKworCS8qIEVuc3VyZSB2YWx1ZXMgZG9uJ3QgZXhjZWVkIGZpZWxkIHdpZHRoICovCisJRGV2QWRkciAmPSAweDAwMUY7CS8qIDUtYml0IGZpZWxkICovCisJUmVnQWRkciAmPSAweEZGRkY7CS8qIDE2LWJpdCBmaWVsZCAqLworCisJLyogU2V0IE1JSU0gZmllbGQgcmVnaXN0ZXIgYml0cyBmb3IgYW4gTUlJTSBhZGRyZXNzIG9wZXJhdGlvbiAqLworCUFkZHJPcCA9IChNSUlNX1BPUlRfTlVNIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX1NISUZUKSB8CisJICAgIChEZXZBZGRyIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfU0hJRlQpIHwKKwkgICAgKE1JSU1fVEFfMTBHQiA8PCBBWEdNQUNfQU1JSU1fRklFTERfVEFfU0hJRlQpIHwKKwkgICAgKE1JSU1fT1BfQUREUiA8PCBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQpIHwgUmVnQWRkcjsKKworCS8qIFNldCBNSUlNIGZpZWxkIHJlZ2lzdGVyIGJpdHMgZm9yIGFuIE1JSU0gcmVhZCBvcGVyYXRpb24gKi8KKwlSZWFkT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX1JFQUQgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKTsKKworCS8qIFNldCBNSUlNIGNvbW1hbmQgcmVnaXN0ZXIgYml0cyB0byBleGVjdXRlIGFuIE1JSU0gY29tbWFuZCAqLworCUNtZCA9IEFYR01BQ19BTUlJTV9DTURfU1RBUlQgfCBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT047CisKKwkvKiBSZXNldCB0aGUgY29tbWFuZCByZWdpc3RlciBjb21tYW5kIGJpdCAoaW4gY2FzZSBpdCdzIG5vdCAwKSAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCAwLCBUUlVFKTsKKworCS8qIE1JSU0gd3JpdGUgdG8gc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgTURJTyByZWdpc3RlciAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIEFkZHJPcCwgVFJVRSk7CisKKwkvKiBXcml0ZSB0byBNSUlNIENvbW1hbmQgUmVnaXN0ZXIgdG8gZXhlY3V0ZSB0byBhZGRyZXNzIG9wZXJhdGlvbiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLyogUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbiAqLworCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8qIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMgKi8KKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisJLyogUmVzZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgY29tbWFuZCBiaXQgKi8KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgMCwgVFJVRSk7CisKKwkvKiBNSUlNIHdyaXRlIHRvIHNldCB1cCBhbiBNRElPIHJlZ2lzdGVyIHJlYWQgb3BlcmF0aW9uICovCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1GaWVsZCwgUmVhZE9wLCBUUlVFKTsKKworCS8qIFdyaXRlIHRvIE1JSU0gQ29tbWFuZCBSZWdpc3RlciB0byBleGVjdXRlIHRoZSByZWFkIG9wZXJhdGlvbiAqLworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLyogUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbiAqLworCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8qIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMgKi8KKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisJLyogUmVhZCB0aGUgTURJTyByZWdpc3RlciBkYXRhIGJhY2sgZnJvbSB0aGUgZmllbGQgcmVnaXN0ZXIgKi8KKwlSRUFEX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsICpwVmFsdWUpOworCSpwVmFsdWUgJj0gMHhGRkZGOwkvKiBkYXRhIGlzIGluIHRoZSBsb3dlciAxNiBiaXRzICovCisKKy8qICBEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fZnVuY19fKTsgKi8KKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogRnVuY3Rpb25zIHRvIG9idGFpbiB0aGUgQ1JDIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzLgorICogVGhpcyBpcyBhIHN0YW5kYXJkIGV0aGVybmV0IENSQyBpbiB0aGF0IGl0IGlzIGEgMzItYml0LCByZWZsZWN0ZWQgQ1JDIHVzaW5nCisgKiB0aGUgcG9seW5vbWlhbDoKKyAqICAgeF4zMiArIHheMjYgKyB4XjIzICsgeF4yMiArIHheMTYgKyB4XjEyICsgeF4xMSArIHheMTAgKyB4XjggKyB4XjcgKyB4XjUgKyB4XjQgKyB4XjIgKyB4XjEuCisgKgorICogQWZ0ZXIgdGhlIENSQyBmb3IgdGhlIDYgYnl0ZXMgaXMgZ2VuZXJhdGVkIChidXQgYmVmb3JlIHRoZSB2YWx1ZSBpcyBjb21wbGVtZW50ZWQpLAorICogd2UgbXVzdCB0aGVuIHRyYW5zcG9zZSB0aGUgdmFsdWUgYW5kIHJldHVybiBiaXRzIDMwLTIzLgorICoKKyAqLworc3RhdGljIHUzMiBzeGdfY3JjX3RhYmxlWzI1Nl07CS8qIFRhYmxlIG9mIENSQydzIGZvciBhbGwgcG9zc2libGUgYnl0ZSB2YWx1ZXMgKi8KKworLyoKKyAqICBDb250cnVjdCB0aGUgQ1JDMzIgdGFibGUKKyAqLworc3RhdGljIHZvaWQgc3hnX21jYXN0X2luaXRfY3JjMzIodm9pZCkKK3sKKwl1MzIgYzsJCQkvKiAgQ1JDIHNoaXQgcmVnICAgICAgICAgICAgICAgICAqLworCXUzMiBlID0gMDsJCS8qICBQb2x5IFgtb3IgcGF0dGVybiAgICAgICAgICAgICovCisJaW50IGk7CQkJLyogIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgazsJCQkvKiAgYnl0ZSBiZWluZyBzaGlmdGVkIGludG8gY3JjICAqLworCisJc3RhdGljIGludCBwW10gPSB7IDAsIDEsIDIsIDQsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDE2LCAyMiwgMjMsIDI2IH07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHApIC8gc2l6ZW9mKGludCk7IGkrKykgeworCQllIHw9IDFMIDw8ICgzMSAtIHBbaV0pOworCX0KKworCWZvciAoaSA9IDE7IGkgPCAyNTY7IGkrKykgeworCQljID0gaTsKKwkJZm9yIChrID0gODsgazsgay0tKSB7CisJCQljID0gYyAmIDEgPyAoYyA+PiAxKSBeIGUgOiBjID4+IDE7CisJCX0KKwkJc3hnX2NyY190YWJsZVtpXSA9IGM7CisJfQorfQorCisjaWYgWFhYVE9ETworc3RhdGljIHUzMiBzeGdfY3JjX2luaXQ7CS8qIElzIHRhYmxlIGluaXRpYWxpemVkICovCisvKgorICogIFJldHVybiB0aGUgTUFDIGhhc3QgYXMgZGVzY3JpYmVkIGFib3ZlLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzeGdfbWNhc3RfZ2V0X21hY19oYXNoKGNoYXIgKm1hY2FkZHIpCit7CisJdTMyIGNyYzsKKwljaGFyICpwOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgbWFjaGFzaCA9IDA7CisKKwlpZiAoIXN4Z19jcmNfaW5pdCkgeworCQlzeGdfbWNhc3RfaW5pdF9jcmMzMigpOworCQlzeGdfY3JjX2luaXQgPSAxOworCX0KKworCWNyYyA9IDB4RkZGRkZGRkY7CS8qIFByZWxvYWQgc2hpZnQgcmVnaXN0ZXIsIHBlciBjcmMtMzIgc3BlYyAqLworCWZvciAoaSA9IDAsIHAgPSBtYWNhZGRyOyBpIDwgNjsgKytwLCArK2kpIHsKKwkJY3JjID0gKGNyYyA+PiA4KSBeIHN4Z19jcmNfdGFibGVbKGNyYyBeICpwKSAmIDB4RkZdOworCX0KKworCS8qIFJldHVybiBiaXRzIDEtOCwgdHJhbnNwb3NlZCAqLworCWZvciAoaSA9IDE7IGkgPCA5OyBpKyspIHsKKwkJbWFjaGFzaCB8PSAoKChjcmMgPj4gaSkgJiAxKSA8PCAoOCAtIGkpKTsKKwl9CisKKwlyZXR1cm4gKG1hY2hhc2gpOworfQorCitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X21hc2socF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlQU1hHX1VDT0RFX1JFR1Mgc3hnX3JlZ3MgPSBhZGFwdGVyLT5VY29kZVJlZ3M7CisKKwlEQkdfRVJST1IoIiVzIEVOVEVSICglcykgbWFjb3B0c1sleF0gbWFza1slbGx4XVxuIiwgX19mdW5jX18sCisJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCAodW5zaWduZWQgaW50KWFkYXB0ZXItPk1hY0ZpbHRlciwKKwkJICBhZGFwdGVyLT5NdWx0aWNhc3RNYXNrKTsKKworCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0MpKSB7CisJCS8qIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IgcHJvbWlzY3VvdXMKKwkJICogbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUgTWljcm9jb2RlIGZyb20gaGF2aW5nCisJCSAqIHRvIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQyBjb25maWd1cmF0aW9uLgorCQkgKi8KKy8qICAgICAgICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgbWFjb3B0cyA9IE1BQ19BTExNQ0FTVCB8IE1BQ19QUk9NSVNDXG4gICAgICBTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOyAqLworCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0TG93LCAweEZGRkZGRkZGLCBGTFVTSCk7CisJCVdSSVRFX1JFRyhzeGdfcmVncy0+TWNhc3RIaWdoLCAweEZGRkZGRkZGLCBGTFVTSCk7CisvKiAgICAgICAgREJHX0VSUk9SKCIlcyAoJXMpIFdSSVRFIHRvIHNsaWNfcmVncyBzbGljX21jYXN0bG93JmhpZ2ggMHhGRkZGRkZGRlxuIixfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsgKi8KKworCX0gZWxzZSB7CisJCS8qIENvbW1pdCBvdXIgbXVsdGljYXN0IG1hc3QgdG8gdGhlIFNMSUMgYnkgd3JpdGluZyB0byB0aGUgbXVsdGljYXN0CisJCSAqIGFkZHJlc3MgbWFzayByZWdpc3RlcnMKKwkJICovCisJCURCR19FUlJPUigiJXMgKCVzKSBXUklURSBtY2FzdGxvd1slbHhdIG1jYXN0aGlnaFslbHhdXG4iLAorCQkJICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJICAoKHVsb25nKSAoYWRhcHRlci0+TXVsdGljYXN0TWFzayAmIDB4RkZGRkZGRkYpKSwKKwkJCSAgKCh1bG9uZykKKwkJCSAgICgoYWRhcHRlci0+TXVsdGljYXN0TWFzayA+PiAzMikgJiAweEZGRkZGRkZGKSkpOworCisJCVdSSVRFX1JFRyhzeGdfcmVncy0+TWNhc3RMb3csCisJCQkgICh1MzIpIChhZGFwdGVyLT5NdWx0aWNhc3RNYXNrICYgMHhGRkZGRkZGRiksIEZMVVNIKTsKKwkJV1JJVEVfUkVHKHN4Z19yZWdzLT5NY2FzdEhpZ2gsCisJCQkgICh1MzIpICgoYWRhcHRlci0+CisJCQkJICBNdWx0aWNhc3RNYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpLCBGTFVTSCk7CisJfQorfQorCisvKgorICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgKiAgTGluayBpdCBpbi4KKyAqLworc3RhdGljIGludCBzeGdfbWNhc3RfYWRkX2xpc3QocF9hZGFwdGVyX3QgYWRhcHRlciwgY2hhciAqYWRkcmVzcykKK3sKKwlwX21jYXN0X2FkZHJlc3NfdCBtY2FkZHIsIG1saXN0OworCWJvb2wgZXF1YWxhZGRyOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCisJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCXdoaWxlIChtbGlzdCkgeworCQlFVEhFUl9FUV9BRERSKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzLCBlcXVhbGFkZHIpOworCQlpZiAoZXF1YWxhZGRyKSB7CisJCQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKKwkJfQorCQltbGlzdCA9IG1saXN0LT5uZXh0OworCX0KKworCS8qIERvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIEFsbG9jYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgaXQgKi8KKwltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihtY2FzdF9hZGRyZXNzX3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAobWNhZGRyID09IE5VTEwpCisJCXJldHVybiAxOworCisJbWVtY3B5KG1jYWRkci0+YWRkcmVzcywgYWRkcmVzcywgNik7CisKKwltY2FkZHItPm5leHQgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCWFkYXB0ZXItPm1jYXN0YWRkcnMgPSBtY2FkZHI7CisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9iaXQocF9hZGFwdGVyX3QgYWRhcHRlciwgY2hhciAqYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBjaGFyIGNyY3BvbHk7CisKKwkvKiBHZXQgdGhlIENSQyBwb2x5bm9taWFsIGZvciB0aGUgbWFjIGFkZHJlc3MgKi8KKwljcmNwb2x5ID0gc3hnX21jYXN0X2dldF9tYWNfaGFzaChhZGRyZXNzKTsKKworCS8qIFdlIG9ubHkgaGF2ZSBzcGFjZSBvbiB0aGUgU0xJQyBmb3IgNjQgZW50cmllcy4gIExvcAorCSAqIG9mZiB0aGUgdG9wIHR3byBiaXRzLiAoMl42ID0gNjQpCisJICovCisJY3JjcG9seSAmPSAweDNGOworCisJLyogT1IgaW4gdGhlIG5ldyBiaXQgaW50byBvdXIgNjQgYml0IG1hc2suICovCisJYWRhcHRlci0+TXVsdGljYXN0TWFzayB8PSAodTY0KSAxIDw8IGNyY3BvbHk7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbGlzdChwX25ldF9kZXZpY2UgZGV2KQoreworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCWludCBpOworCWNoYXIgKmFkZHJlc3NlczsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7CisJaW50IG1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKKworCUFTU0VSVChhZGFwdGVyKTsKKworCWZvciAoaSA9IDE7IGkgPD0gbWNfY291bnQ7IGkrKykgeworCQlhZGRyZXNzZXMgPSAoY2hhciAqKSZtY19saXN0LT5kbWlfYWRkcjsKKwkJaWYgKG1jX2xpc3QtPmRtaV9hZGRybGVuID09IDYpIHsKKwkJCXN0YXR1cyA9IHN4Z19tY2FzdF9hZGRfbGlzdChhZGFwdGVyLCBhZGRyZXNzZXMpOworCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXN4Z19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7CisJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OworCX0KKworCURCR19FUlJPUigiJXMgYS0+ZGV2ZmxhZ3NfcHJldlsleF0gZGV2LT5mbGFnc1sleF0gc3RhdHVzWyV4XVxuIiwKKwkJICBfX2Z1bmNfXywgYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiwgZGV2LT5mbGFncywgc3RhdHVzKTsKKwlpZiAoYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiAhPSBkZXYtPmZsYWdzKSB7CisJCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJCWlmIChkZXYtPmZsYWdzKSB7CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKKwkJCX0KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJfQorCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKKwkJCX0KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgeworCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOworCQkJfQorCQl9CisJCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCQlEQkdfRVJST1IoIiVzIGNhbGwgc3hnX2NvbmZpZ19zZXQgYWRhcHRlci0+bWFjb3B0c1sleF1cbiIsCisJCQkgIF9fZnVuY19fLCBhZGFwdGVyLT5tYWNvcHRzKTsKKwkJc3hnX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykgeworCQkJc3hnX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOworCQl9CisJfQorCXJldHVybjsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzeGdfdW5tYXBfbW1pb19zcGFjZShwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworI2lmIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCisvKiAgICAgIGlmIChhZGFwdGVyLT5SZWdzKSB7ICovCisvKiAgICAgICAgICAgICAgaW91bm1hcChhZGFwdGVyLT5SZWdzKTsgKi8KKy8qICAgICAgfSAqLworLyogICAgICBhZGFwdGVyLT5zbGljX3JlZ3MgPSBOVUxMOyAqLworI2VuZGlmCit9CisKKyNpZiBYWFhUT0RPCisvKgorICogU3hnRnJlZVJlc291cmNlcyAtIEZyZWUgZXZlcnl0aGluZyBhbGxvY2F0ZWQgaW4gU3hnQWxsb2NhdGVSZXNvdXJjZXMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglub25lCisgKi8KK3ZvaWQgU3hnRnJlZVJlc291cmNlcyhwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCXUzMiBSc3NJZHMsIElzckNvdW50OworCVBUQ1BfT0JKRUNUIFRjcE9iamVjdDsKKwl1MzIgaTsKKwlCT09MRUFOIFRpbWVyQ2FuY2VsbGVkOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRnJlZVJlcyIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+TWF4VGNicywgMCwgMCk7CisKKwlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKKwlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCisJaWYgKGFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPT0gRkFMU0UpIHsKKwkJLyogTm8gYWxsb2NhdGlvbnMgaGF2ZSBiZWVuIG1hZGUsIGluY2x1ZGluZyBzcGlubG9ja3MsICovCisJCS8qIG9yIGxpc3RoZWFkIGluaXRpYWxpemF0aW9ucy4gIFJldHVybi4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmICghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MpKSkgeworCQlTeGdGcmVlUmN2QmxvY2tzKGFkYXB0ZXIpOworCX0KKwlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsU2dsQnVmZmVycykpKSB7CisJCVN4Z0ZyZWVTZ2xCdWZmZXJzKGFkYXB0ZXIpOworCX0KKwkvKiBGcmVlIGV2ZW50IHF1ZXVlcy4gKi8KKwlpZiAoYWRhcHRlci0+RXZlbnRSaW5ncykgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcywKKwkJCQkgICAgYWRhcHRlci0+RXZlbnRSaW5ncywgYWRhcHRlci0+UEV2ZW50UmluZ3MpOworCX0KKwlpZiAoYWRhcHRlci0+SXNyKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2YodTMyKSAqIElzckNvdW50LAorCQkJCSAgICBhZGFwdGVyLT5Jc3IsIGFkYXB0ZXItPlBJc3IpOworCX0KKwlpZiAoYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKHUzMiksCisJCQkJICAgIGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgsCisJCQkJICAgIGFkYXB0ZXItPlBYbXRSaW5nWmVyb0luZGV4KTsKKwl9CisJaWYgKGFkYXB0ZXItPkluZGlyZWN0aW9uVGFibGUpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJICAgIFNYR19NQVhfUlNTX1RBQkxFX1NJWkUsCisJCQkJICAgIGFkYXB0ZXItPkluZGlyZWN0aW9uVGFibGUsCisJCQkJICAgIGFkYXB0ZXItPlBJbmRpcmVjdGlvblRhYmxlKTsKKwl9CisKKwlTWEdfRlJFRV9QQUNLRVRfUE9PTChhZGFwdGVyLT5QYWNrZXRQb29sSGFuZGxlKTsKKwlTWEdfRlJFRV9CVUZGRVJfUE9PTChhZGFwdGVyLT5CdWZmZXJQb29sSGFuZGxlKTsKKworCS8qIFVubWFwIHJlZ2lzdGVyIHNwYWNlcyAqLworCVN4Z1VubWFwUmVzb3VyY2VzKGFkYXB0ZXIpOworCisJLyogRGVyZWdpc3RlciBETUEgKi8KKwlpZiAoYWRhcHRlci0+RG1hSGFuZGxlKSB7CisJCVNYR19ERVJFR0lTVEVSX0RNQShhZGFwdGVyLT5EbWFIYW5kbGUpOworCX0KKwkvKiBEZXJlZ2lzdGVyIGludGVycnVwdCAqLworCVN4Z0RlcmVnaXN0ZXJJbnRlcnJ1cHQoYWRhcHRlcik7CisKKwkvKiBQb3NzaWJseSBmcmVlIHN5c3RlbSBpbmZvICg1LjIgb25seSkgKi8KKwlTWEdfUkVMRUFTRV9TWVNURU1fSU5GTyhhZGFwdGVyKTsKKworCVN4Z0RpYWdGcmVlUmVzb3VyY2VzKGFkYXB0ZXIpOworCisJU3hnRnJlZU1DYXN0QWRkcnMoYWRhcHRlcik7CisKKwlpZiAoU1hHX1RJTUVSX0FMTE9DQVRFRChhZGFwdGVyLT5SZXNldFRpbWVyKSkgeworCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJlc2V0VGltZXIsIFRpbWVyQ2FuY2VsbGVkKTsKKwkJU1hHX0ZSRUVfVElNRVIoYWRhcHRlci0+UmVzZXRUaW1lcik7CisJfQorCWlmIChTWEdfVElNRVJfQUxMT0NBVEVEKGFkYXB0ZXItPlJzc1RpbWVyKSkgeworCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyLCBUaW1lckNhbmNlbGxlZCk7CisJCVNYR19GUkVFX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyKTsKKwl9CisJaWYgKFNYR19USU1FUl9BTExPQ0FURUQoYWRhcHRlci0+T2ZmbG9hZFRpbWVyKSkgeworCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPk9mZmxvYWRUaW1lciwgVGltZXJDYW5jZWxsZWQpOworCQlTWEdfRlJFRV9USU1FUihhZGFwdGVyLT5PZmZsb2FkVGltZXIpOworCX0KKworCWFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPSBGQUxTRTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGcmVlUmVzIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5NYXhUY2JzLCAwLCAwKTsKK30KKyNlbmRpZgorCisvKgorICogc3hnX2FsbG9jYXRlX2NvbXBsZXRlIC0KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBtZW1vcnkgYWxsb2NhdGlvbiBoYXMgY29tcGxldGVkLgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglwX2FkYXB0ZXJfdCAgICAJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCVZpcnR1YWxBZGRyZXNzCS0gTWVtb3J5IHZpcnR1YWwgYWRkcmVzcworICoJUGh5c2ljYWxBZGRyZXNzCS0gTWVtb3J5IHBoeXNpY2FsIGFkZHJlc3MKKyAqCUxlbmd0aAkJLSBMZW5ndGggb2YgbWVtb3J5IGFsbG9jYXRlZCAob3IgMCkKKyAqCUNvbnRleHQJCS0gVGhlIHR5cGUgb2YgYnVmZmVyIGFsbG9jYXRlZAorICoKKyAqIFJldHVybgorICoJTm9uZS4KKyAqLworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJICB2b2lkICpWaXJ0dWFsQWRkcmVzcywKKwkJCQkgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAorCQkJCSAgdTMyIExlbmd0aCwgU1hHX0JVRkZFUl9UWVBFIENvbnRleHQpCit7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NDbXAiLAorCQkgIGFkYXB0ZXIsIFZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIENvbnRleHQpOworCUFTU0VSVChhZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmcpOworCS0tYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOworCisJc3dpdGNoIChDb250ZXh0KSB7CisKKwljYXNlIFNYR19CVUZGRVJfVFlQRV9SQ1Y6CisJCXN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShhZGFwdGVyLAorCQkJCQkgICAgICAgVmlydHVhbEFkZHJlc3MsCisJCQkJCSAgICAgICBQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCk7CisJCWJyZWFrOworCWNhc2UgU1hHX0JVRkZFUl9UWVBFX1NHTDoKKwkJc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUoYWRhcHRlciwgKFBTWEdfU0NBVFRFUl9HQVRIRVIpCisJCQkJCQkgVmlydHVhbEFkZHJlc3MsCisJCQkJCQkgUGh5c2ljYWxBZGRyZXNzLCBMZW5ndGgpOworCQlicmVhazsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsb2NDbXAiLAorCQkgIGFkYXB0ZXIsIFZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIENvbnRleHQpOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkgLSBTaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZSB1c2VkIGZvcgorICoJCXN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgYnVmZmVyIGFsbG9jYXRpb25zCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJU2l6ZQkJLSBibG9jayBzaXplIHRvIGFsbG9jYXRlCisgKglCdWZmZXJUeXBlCS0gVHlwZSBvZiBidWZmZXIgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJICAgICAgdTMyIFNpemUsIFNYR19CVUZGRVJfVFlQRSBCdWZmZXJUeXBlKQoreworCWludCBzdGF0dXM7CisJdm9pZCAqQnVmZmVyOworCWRtYV9hZGRyX3QgcEJ1ZmZlcjsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsbG9jTWVtIiwKKwkJICBhZGFwdGVyLCBTaXplLCBCdWZmZXJUeXBlLCAwKTsKKwkvKiBHcmFiIHRoZSBhZGFwdGVyIGxvY2sgYW5kIGNoZWNrIHRoZSBzdGF0ZS4gKi8KKwkvKiBJZiB3ZSdyZSBpbiBhbnl0aGluZyBvdGhlciB0aGFuIElOSVRJQUxJWklORyBvciAqLworCS8qIFJVTk5JTkcgc3RhdGUsIGZhaWwuICBUaGlzIGlzIHRvIHByZXZlbnQgKi8KKwkvKiBhbGxvY2F0aW9ucyBpbiBhbiBpbXByb3BlciBkcml2ZXIgc3RhdGUgKi8KKwlzcGluX2xvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKworCS8qIEluY3JlbWVudCB0aGUgQWxsb2NhdGlvbnNQZW5kaW5nIGNvdW50IHdoaWxlIGhvbGRpbmcgKi8KKwkvKiB0aGUgbG9jay4gIFBhdXNlIHByb2Nlc3NpbmcgcmVsaWVzIG9uIHRoaXMgKi8KKwkrK2FkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZzsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCisJLyogQXQgaW5pdGlhbGl6YXRpb24gdGltZSBhbGxvY2F0ZSByZXNvdXJjZXMgc3luY2hyb25vdXNseS4gKi8KKwlCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFNpemUsICZwQnVmZmVyKTsKKwlpZiAoQnVmZmVyID09IE5VTEwpIHsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJCS8qIERlY3JlbWVudCB0aGUgQWxsb2NhdGlvbnNQZW5kaW5nIGNvdW50IHdoaWxlIGhvbGRpbmcgKi8KKwkJLyogdGhlIGxvY2suICBQYXVzZSBwcm9jZXNzaW5nIHJlbGllcyBvbiB0aGlzICovCisJCS0tYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbGNNZW1GMSIsCisJCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIDApOworCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOworCX0KKwlzeGdfYWxsb2NhdGVfY29tcGxldGUoYWRhcHRlciwgQnVmZmVyLCBwQnVmZmVyLCBTaXplLCBCdWZmZXJUeXBlKTsKKwlzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbG9jTWVtIiwKKwkJICBhZGFwdGVyLCBTaXplLCBCdWZmZXJUeXBlLCBzdGF0dXMpOworCXJldHVybiAoc3RhdHVzKTsKK30KKworLyoKKyAqIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZSAtIENvbXBsZXRlIGEgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGFsbG9jYXRpb24KKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCVJjdkJsb2NrCQkJLSByZWNlaXZlIGJsb2NrIHZpcnR1YWwgYWRkcmVzcworICoJUGh5c2ljYWxBZGRyZXNzCQktIFBoeXNpY2FsIGFkZHJlc3MKKyAqCUxlbmd0aAkJCQktIE1lbW9yeSBsZW5ndGgKKyAqCisgKiBSZXR1cm4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCQkgICB2b2lkICpSY3ZCbG9jaywKKwkJCQkJICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCSAgIHUzMiBMZW5ndGgpCit7CisJdTMyIGk7CisJdTMyIEJ1ZmZlclNpemUgPSBhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZTsKKwl1NjQgUGFkZHI7CisJUFNYR19SQ1ZfQkxPQ0tfSERSIFJjdkJsb2NrSGRyOworCXVuc2lnbmVkIGNoYXIgKlJjdkRhdGFCdWZmZXI7CisJUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIFJjdkRhdGFCdWZmZXJIZHI7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBSY3ZEZXNjcmlwdG9yQmxvY2s7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxSY3ZCbGsiLAorCQkgIGFkYXB0ZXIsIFJjdkJsb2NrLCBMZW5ndGgsIDApOworCWlmIChSY3ZCbG9jayA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJbWVtc2V0KFJjdkJsb2NrLCAwLCBMZW5ndGgpOworCUFTU0VSVCgoQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8CisJICAgICAgIChCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKKwlBU1NFUlQoTGVuZ3RoID09IFNYR19SQ1ZfQkxPQ0tfU0laRShCdWZmZXJTaXplKSk7CisJLyogRmlyc3QsIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lZCBwb29sIG9mIHJlY2VpdmUgZGF0YSAqLworCS8qIGJ1ZmZlcnMuICBUaGlzIGluaXRpYWxpemF0aW9uIHJlcXVpcmVzIE5CTC9OQi9NREwgYWxsb2NhdGlvbnMsICovCisJLyogSWYgYW55IG9mIHRoZW0gZmFpbCwgZnJlZSB0aGUgYmxvY2sgYW5kIHJldHVybiB3aXRob3V0ICovCisJLyogcXVldWVpbmcgdGhlIHNoYXJlZCBtZW1vcnkgKi8KKwlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7CisjaWYgMAorCWZvciAoaSA9IDAsIFBhZGRyID0gKlBoeXNpY2FsQWRkcmVzczsKKwkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKwkgICAgIGkrKywgUGFkZHIuTG93UGFydCArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpCisjZW5kaWYKKwkJZm9yIChpID0gMCwgUGFkZHIgPSBQaHlzaWNhbEFkZHJlc3M7CisJCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCQkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7CisJCQkvKiAqLworCQkJUmN2RGF0YUJ1ZmZlckhkciA9CisJCQkgICAgKFBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUikgKFJjdkRhdGFCdWZmZXIgKworCQkJCQkJCVNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAorCQkJCQkJCShCdWZmZXJTaXplKSk7CisJCQlSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkRhdGFCdWZmZXI7CisJCQlSY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQYWRkcjsKKwkJCVJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9VUFNUUkVBTTsJLyogRm9yIEZSRUUgbWFjcm8gYXNzZXJ0aW9uICovCisJCQlSY3ZEYXRhQnVmZmVySGRyLT5TaXplID0KKwkJCSAgICBTWEdfUkNWX0JVRkZFUl9EQVRBX1NJWkUoQnVmZmVyU2l6ZSk7CisKKwkJCVNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCQkJaWYgKFJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQgPT0gTlVMTCkKKwkJCQlnb3RvIGZhaWw7CisKKwkJfQorCisJLyogUGxhY2UgdGhpcyBlbnRpcmUgYmxvY2sgb2YgbWVtb3J5IG9uIHRoZSBBbGxSY3ZCbG9ja3MgcXVldWUgc28gaXQgY2FuIGJlICovCisJLyogZnJlZSBsYXRlciAqLworCVJjdkJsb2NrSGRyID0KKwkgICAgKFBTWEdfUkNWX0JMT0NLX0hEUikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCQkJCSAgU1hHX1JDVl9CTE9DS19IRFJfT0ZGU0VUKEJ1ZmZlclNpemUpKTsKKwlSY3ZCbG9ja0hkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZCbG9jazsKKwlSY3ZCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCWFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQrKzsKKwlJbnNlcnRUYWlsTGlzdCgmYWRhcHRlci0+QWxsUmN2QmxvY2tzLCAmUmN2QmxvY2tIZHItPkFsbExpc3QpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisKKwkvKiBOb3cgZnJlZSB0aGUgY29udGFpbmVkIHJlY2VpdmUgZGF0YSBidWZmZXJzIHRoYXQgd2UgaW5pdGlhbGl6ZWQgYWJvdmUgKi8KKwlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7CisJZm9yIChpID0gMCwgUGFkZHIgPSBQaHlzaWNhbEFkZHJlc3M7CisJICAgICBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisJICAgICBpKyssIFBhZGRyICs9IEJ1ZmZlclNpemUsIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkgeworCQlSY3ZEYXRhQnVmZmVySGRyID0gKFBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUikgKFJjdkRhdGFCdWZmZXIgKworCQkJCQkJCSAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKKwkJCQkJCQkgICAgICAgKEJ1ZmZlclNpemUpKTsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwl9CisKKwkvKiBMb2NhdGUgdGhlIGRlc2NyaXB0b3IgYmxvY2sgYW5kIHB1dCBpdCBvbiBhIHNlcGFyYXRlIGZyZWUgcXVldWUgKi8KKwlSY3ZEZXNjcmlwdG9yQmxvY2sgPQorCSAgICAoUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCQkJCQkgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX09GRlNFVAorCQkJCQkgKEJ1ZmZlclNpemUpKTsKKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHIgPQorCSAgICAoUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKKwkJCQkJICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSX09GRlNFVAorCQkJCQkgICAgIChCdWZmZXJTaXplKSk7CisJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkRlc2NyaXB0b3JCbG9jazsKKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlBoeXNpY2FsQWRkcmVzcyA9IFBhZGRyOworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCVNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKGFkYXB0ZXIsIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxSQmxrIiwKKwkJICBhZGFwdGVyLCBSY3ZCbG9jaywgTGVuZ3RoLCAwKTsKKwlyZXR1cm47CisgICAgICBmYWlsOgorCS8qIEZyZWUgYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgKi8KKwlpZiAoUmN2QmxvY2spIHsKKwkJUmN2RGF0YUJ1ZmZlciA9IFJjdkJsb2NrOworCQlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisJCSAgICAgaSsrLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKKwkJCVJjdkRhdGFCdWZmZXJIZHIgPQorCQkJICAgIChQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIpIChSY3ZEYXRhQnVmZmVyICsKKwkJCQkJCQlTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKKwkJCQkJCQkoQnVmZmVyU2l6ZSkpOworCQkJU1hHX0ZSRUVfUkNWX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyKTsKKwkJfQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgTGVuZ3RoLCBSY3ZCbG9jaywgUGh5c2ljYWxBZGRyZXNzKTsKKwl9CisJREJHX0VSUk9SKCIlczogT1VUIE9GIFJFU09VUkNFU1xuIiwgX19mdW5jX18pOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJSY3ZBRmFpbCIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKKwlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUgLSBDb21wbGV0ZSBhIFNHTCBidWZmZXIgYWxsb2NhdGlvbgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJU3hnU2dsCQkJCS0gU1hHX1NDQVRURVJfR0FUSEVSIGJ1ZmZlcgorICoJUGh5c2ljYWxBZGRyZXNzCQktIFBoeXNpY2FsIGFkZHJlc3MKKyAqCUxlbmd0aAkJCQktIE1lbW9yeSBsZW5ndGgKKyAqCisgKiBSZXR1cm4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgICAgUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2wsCisJCQkJCSAgICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCSAgICAgdTMyIExlbmd0aCkKK3sKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFNnbENtcCIsCisJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOworCXNwaW5fbG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCWFkYXB0ZXItPkFsbFNnbEJ1ZmZlckNvdW50Kys7CisJbWVtc2V0KFN4Z1NnbCwgMCwgc2l6ZW9mKFNYR19TQ0FUVEVSX0dBVEhFUikpOworCVN4Z1NnbC0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOwkvKiAqUGh5c2ljYWxBZGRyZXNzOyAqLworCVN4Z1NnbC0+YWRhcHRlciA9IGFkYXB0ZXI7CS8qIEluaXRpYWxpemUgYmFja3BvaW50ZXIgb25jZSAqLworCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzLCAmU3hnU2dsLT5BbGxMaXN0KTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCVN4Z1NnbC0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CisJU1hHX0ZSRUVfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wsIE5VTEwpOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFNnbCIsCisJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB0ZW1wX21hY19hZGRyZXNzWzZdID0KKyAgICB7IDB4MDAsIDB4YWIsIDB4Y2QsIDB4ZWYsIDB4MTIsIDB4NjkgfTsKKworc3RhdGljIHZvaWQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworLyogIERCR19FUlJPUiAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLCBfX2Z1bmNfXywgKi8KKy8qICAgICAgICAgICAgIGNhcmQtPmNvbmZpZ19zZXQsIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXItPnBoeXNwb3J0LCBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7ICovCisvKiAqLworLyogIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisKKwltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwgdGVtcF9tYWNfYWRkcmVzcywgc2l6ZW9mKFNYR19DT05GSUdfTUFDKSk7CisvKiAgICAgIERCR19FUlJPUiAoIiVzIEFGVEVSIGNvcHlpbmcgZnJvbSBjb25maWcubWFjaW5mbyBpbnRvIGN1cnJtYWNhZGRyXG4iLCBfX2Z1bmNfXyk7ICovCisvKiAgICAgIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisJaWYgKCEoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gfHwKKwkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSB8fAorCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdIHx8CisJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10gfHwKKwkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSkpIHsKKwkJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGFwdGVyLT5tYWNhZGRyLCA2KTsKKwl9CisJaWYgKGFkYXB0ZXItPm5ldGRldikgeworCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Y3Vycm1hY2FkZHIsIDYpOworCX0KKy8qICBEQkdfRVJST1IgKCIlcyBFWElUIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5wb3J0KTsgKi8KKwlzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCit9CisKKyNpZiBYWFhUT0RPCitzdGF0aWMgaW50IHN4Z19tYWNfc2V0X2FkZHJlc3MocF9uZXRfZGV2aWNlIGRldiwgdm9pZCAqcHRyKQoreworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcHRyOworCisJREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKCFhZGFwdGVyKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCURCR19FUlJPUigic3hnOiAlcyAoJXMpIGN1cnIgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCSAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5jdXJybWFjYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJREJHX0VSUk9SKCJzeGc6ICVzICglcykgbmV3ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQkgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCisJc3hnX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKiogIFNYRyBEUklWRVIgRlVOQ1RJT05TICAoYmVsb3cpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3hnX2luaXRpYWxpemVfYWRhcHRlciAtIEluaXRpYWxpemUgYWRhcHRlcgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwl1MzIgUnNzSWRzLCBJc3JDb3VudDsKKwl1MzIgaTsKKwlpbnQgc3RhdHVzOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5pdEFkcHQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJUnNzSWRzID0gMTsJCS8qICBYWFhUT0RPICBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsgKi8KKwlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCisJLyogU2FuaXR5IGNoZWNrIFNYR19VQ09ERV9SRUdTIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvICovCisJLyogbWFrZSBzdXJlIHRoZSBsZW5ndGggaXMgY29ycmVjdCAqLworCUFTU0VSVChzaXplb2YoU1hHX1VDT0RFX1JFR1MpID09IFNYR19SRUdJU1RFUl9TSVpFX1BFUl9DUFUpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJU1hHX0RJU0FCTEVfQUxMX0lOVEVSUlVQVFMoYWRhcHRlcik7CisKKwkvKiBTZXQgTVRVICovCisJQVNTRVJUKChhZGFwdGVyLT5GcmFtZVNpemUgPT0gRVRIRVJNQVhGUkFNRSkgfHwKKwkgICAgICAgKGFkYXB0ZXItPkZyYW1lU2l6ZSA9PSBKVU1CT01BWEZSQU1FKSk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5MaW5rTXR1LCBhZGFwdGVyLT5GcmFtZVNpemUsIFRSVUUpOworCisJLyogU2V0IGV2ZW50IHJpbmcgYmFzZSBhZGRyZXNzIGFuZCBzaXplICovCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5FdmVudEJhc2UsIGFkYXB0ZXItPlBFdmVudFJpbmdzLCAwKTsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkV2ZW50U2l6ZSwgRVZFTlRfUklOR19TSVpFLCBUUlVFKTsKKworCS8qIFBlci1JU1IgaW5pdGlhbGl6YXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgSXNyQ291bnQ7IGkrKykgeworCQl1NjQgQWRkcjsKKwkJLyogU2V0IGludGVycnVwdCBzdGF0dXMgcG9pbnRlciAqLworCQlBZGRyID0gYWRhcHRlci0+UElzciArIChpICogc2l6ZW9mKHUzMikpOworCQlXUklURV9SRUc2NChhZGFwdGVyLCBhZGFwdGVyLT5VY29kZVJlZ3NbaV0uSXNwLCBBZGRyLCBpKTsKKwl9CisKKwkvKiBYTVQgcmluZyB6ZXJvIGluZGV4ICovCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5TUFNlbmRJbmRleCwKKwkJICAgIGFkYXB0ZXItPlBYbXRSaW5nWmVyb0luZGV4LCAwKTsKKworCS8qIFBlci1SU1MgaW5pdGlhbGl6YXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgUnNzSWRzOyBpKyspIHsKKwkJLyogUmVsZWFzZSBhbGwgZXZlbnQgcmluZyBlbnRyaWVzIHRvIHRoZSBNaWNyb2NvZGUgKi8KKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tpXS5FdmVudFJlbGVhc2UsIEVWRU5UX1JJTkdfU0laRSwKKwkJCSAgVFJVRSk7CisJfQorCisJLyogVHJhbnNtaXQgcmluZyBiYXNlIGFuZCBzaXplICovCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5YbXRCYXNlLCBhZGFwdGVyLT5QWG10UmluZ3MsIDApOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10U2l6ZSwgU1hHX1hNVF9SSU5HX1NJWkUsIFRSVUUpOworCisJLyogUmVjZWl2ZSByaW5nIGJhc2UgYW5kIHNpemUgKi8KKwlXUklURV9SRUc2NChhZGFwdGVyLAorCQkgICAgYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdkJhc2UsIGFkYXB0ZXItPlBSY3ZSaW5ncywgMCk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZTaXplLCBTWEdfUkNWX1JJTkdfU0laRSwgVFJVRSk7CisKKwkvKiBQb3B1bGF0ZSB0aGUgY2FyZCB3aXRoIHJlY2VpdmUgYnVmZmVycyAqLworCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKKworCS8qIEluaXRpYWxpemUgY2hlY2tzdW0gb2ZmbG9hZCBjYXBhYmlsaXRpZXMuICBBdCB0aGUgbW9tZW50ICovCisJLyogd2UgYWx3YXlzIGVuYWJsZSBJUCBhbmQgVENQIHJlY2VpdmUgY2hlY2tzdW1zIG9uIHRoZSBjYXJkLiAqLworCS8qIERlcGVuZGluZyBvbiB0aGUgY2hlY2tzdW0gY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlICovCisJLyogdXNlciwgd2UgY2FuIGNob29zZSB0byByZXBvcnQgb3IgaWdub3JlIHRoZSBjaGVja3N1bSAqLworCS8qIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjYXJkLiAqLworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmVjZWl2ZUNoZWNrc3VtLAorCQkgIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCB8IFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVELCBUUlVFKTsKKworCS8qIEluaXRpYWxpemUgdGhlIE1BQywgWEFVSSAqLworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaW5pdGlhbGl6ZV9saW5rXG4iLCBfX2Z1bmNfXyk7CisJc3RhdHVzID0gc3hnX2luaXRpYWxpemVfbGluayhhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzeGdfaW5pdGlhbGl6ZV9saW5rIHN0YXR1c1sleF1cbiIsIF9fZnVuY19fLAorCQkgIHN0YXR1cyk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCS8qIEluaXRpYWxpemUgRGVhZCB0byBGQUxTRS4gKi8KKwkvKiBTbGljQ2hlY2tGb3JIYW5nIG9yIFNsaWNEdW1wVGhyZWFkIHdpbGwgdGFrZSBpdCBmcm9tIGhlcmUuICovCisJYWRhcHRlci0+RGVhZCA9IEZBTFNFOworCWFkYXB0ZXItPlBpbmdPdXRzdGFuZGluZyA9IEZBTFNFOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEluaXQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayAtIFBvcHVsYXRlIGEgZGVzY3JpcHRvciBibG9jayBhbmQgZ2l2ZSBpdCB0bworICogdGhlIGNhcmQuICBUaGUgY2FsbGVyIHNob3VsZCBob2xkIHRoZSBSY3ZRTG9jaworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIJLSBEZXNjcmlwdG9yIGJsb2NrIHRvIGZpbGwKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2socF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkgICAgIFBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSCisJCQkJICAgICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpCit7CisJdTMyIGk7CisJUFNYR19SSU5HX0lORk8gUmN2UmluZ0luZm8gPSAmYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvOworCVBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBSY3ZEYXRhQnVmZmVySGRyOworCVBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgUmN2RGVzY3JpcHRvckJsb2NrOworCVBTWEdfQ01EIFJpbmdEZXNjcmlwdG9yQ21kOworCVBTWEdfUkNWX1JJTkcgUmluZ1plcm8gPSAmYWRhcHRlci0+UmN2UmluZ3NbMF07CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJGaWxCbGsiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQsCisJCSAgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKKworCUFTU0VSVChSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VzIHRvIGZpbGwgdGhlIGRlc2NyaXB0b3IgYmxvY2ssICovCisJLyogcmV0dXJuIGZhaWx1cmUgKi8KKwlpZiAoKGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSB8fAorCSAgICBTWEdfUklOR19GVUxMKFJjdlJpbmdJbmZvKSkgeworCQlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwl9CisJLyogR2V0IGEgcmluZyBkZXNjcmlwdG9yIGNvbW1hbmQgKi8KKwlTWEdfR0VUX0NNRChSaW5nWmVybywKKwkJICAgIFJjdlJpbmdJbmZvLCBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKKwlBU1NFUlQoUmluZ0Rlc2NyaXB0b3JDbWQpOworCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKKwlSY3ZEZXNjcmlwdG9yQmxvY2sgPQorCSAgICAoUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykgUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzczsKKworCS8qIEZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgYmxvY2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7IGkrKykgeworCQlTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKKwkJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHIpOworCQlTWEdfUkVJTklBVElBTElaRV9QQUNLRVQoUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCk7CisJCVJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9PTkNBUkQ7CisJCVJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uVmlydHVhbEFkZHJlc3MgPQorCQkgICAgKHZvaWQgKilSY3ZEYXRhQnVmZmVySGRyOworCQlSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLlBoeXNpY2FsQWRkcmVzcyA9CisJCSAgICBSY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3M7CisJfQorCS8qIEFkZCB0aGUgZGVzY3JpcHRvciBibG9jayB0byByZWNlaXZlIGRlc2NyaXB0b3IgcmluZyAwICovCisJUmluZ0Rlc2NyaXB0b3JDbWQtPlNnbCA9IFJjdkRlc2NyaXB0b3JCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzOworCisJLyogUmN2QnVmZmVyc09uQ2FyZCBpcyBub3QgcHJvdGVjdGVkIHZpYSB0aGUgcmVjZWl2ZSBsb2NrIChzZWUgKi8KKwkvKiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZSkgV2UgZG9uJ3Qgd2FudCB0byBncmFwIGEgbG9jayBldmVyeSB0aW1lIGEgKi8KKwkvKiBidWZmZXIgaXMgcmV0dXJuZWQgdG8gdXMsIHNvIHdlIHVzZSBhdG9taWMgaW50ZXJsb2NrZWQgZnVuY3Rpb25zICovCisJLyogaW5zdGVhZC4gKi8KKwlhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkICs9IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRHNjQmxrIiwKKwkJICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIsCisJCSAgUmluZ0Rlc2NyaXB0b3JDbWQsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7CisKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdkNtZCwgMSwgdHJ1ZSk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEZpbEJsayIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKKwkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX3N0b2NrX3Jjdl9idWZmZXJzIC0gU3RvY2sgdGhlIGNhcmQgd2l0aCByZWNlaXZlIGJ1ZmZlcnMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglOb25lCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19zdG9ja19yY3ZfYnVmZmVycyhwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSIFJjdkRlc2NyaXB0b3JCbG9ja0hkcjsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlN0b2NrQnVmIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7CisJLyogRmlyc3QsIHNlZSBpZiB3ZSd2ZSBnb3QgbGVzcyB0aGFuIG91ciBtaW5pbXVtIHRocmVzaG9sZCBvZiAqLworCS8qIHJlY2VpdmUgYnVmZmVycywgdGhlcmUgaXNuJ3QgYW4gYWxsb2NhdGlvbiBpbiBwcm9ncmVzcywgYW5kICovCisJLyogd2UgaGF2ZW4ndCBleGNlZWRlZCBvdXIgbWF4aW11bS4uIGdldCBhbm90aGVyIGJsb2NrIG9mIGJ1ZmZlcnMgKi8KKwkvKiBOb25lIG9mIHRoaXMgbmVlZHMgdG8gYmUgU01QIHNhZmUuICBJdCdzIHJvdW5kIG51bWJlcnMuICovCisJaWYgKChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlMpICYmCisJICAgIChhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50IDwgU1hHX01BWF9SQ1ZfQkxPQ0tTKSAmJgorCSAgICAoYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nID09IDApKSB7CisJCXN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KGFkYXB0ZXIsCisJCQkJCSAgIFNYR19SQ1ZfQkxPQ0tfU0laRShhZGFwdGVyLT4KKwkJCQkJCQkgICAgICBSZWNlaXZlQnVmZmVyU2l6ZSksCisJCQkJCSAgIFNYR19CVUZGRVJfVFlQRV9SQ1YpOworCX0KKwkvKiBOb3cgZ3JhYiB0aGUgUmN2UUxvY2sgbG9jayBhbmQgcHJvY2VlZCAqLworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCXdoaWxlIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgU1hHX1JDVl9EQVRBX0JVRkZFUlMpIHsKKwkJUExJU1RfRU5UUlkgX3BsZTsKKworCQkvKiBHZXQgYSBkZXNjcmlwdG9yIGJsb2NrICovCisJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9IE5VTEw7CisJCWlmIChhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudCkgeworCQkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKKwkJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9CisJCQkgICAgY29udGFpbmVyX29mKF9wbGUsIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIsCisJCQkJCSBGcmVlTGlzdCk7CisJCQlhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudC0tOworCQkJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfQlVTWTsKKwkJfQorCisJCWlmIChSY3ZEZXNjcmlwdG9yQmxvY2tIZHIgPT0gTlVMTCkgeworCQkJLyogQmFpbCBvdXQuLiAqLworCQkJYWRhcHRlci0+U3RhdHMuTm9NZW0rKzsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgYmxvY2sgYW5kIGdpdmUgaXQgdG8gdGhlIGNhcmQgKi8KKwkJaWYgKHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKSA9PQorCQkgICAgU1RBVFVTX0ZBSUxVUkUpIHsKKwkJCS8qIEZyZWUgdGhlIGRlc2NyaXB0b3IgYmxvY2sgKi8KKwkJCVNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKGFkYXB0ZXIsCisJCQkJCQkgICAgICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRmlsQmxrcyIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKKwkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOworfQorCisvKgorICogc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzIC0gUmV0dXJuIGRlc2NyaXB0b3IgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuCisgKiBjb21wbGV0ZWQgYnkgdGhlIG1pY3JvY29kZQorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCUluZGV4CQktIFdoZXJlIHRoZSBtaWNyb2NvZGUgaXMgdXAgdG8KKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpCit7CisJUFNYR19SQ1ZfUklORyBSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKKwlQU1hHX1JJTkdfSU5GTyBSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCVBTWEdfQ01EIFJpbmdEZXNjcmlwdG9yQ21kOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wUkJsa3MiLAorCQkgIGFkYXB0ZXIsIEluZGV4LCBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwpOworCisJLyogTm93IGdyYWIgdGhlIFJjdlFMb2NrIGxvY2sgYW5kIHByb2NlZWQgKi8KKwlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlBU1NFUlQoSW5kZXggIT0gUmN2UmluZ0luZm8tPlRhaWwpOworCXdoaWxlIChSY3ZSaW5nSW5mby0+VGFpbCAhPSBJbmRleCkgeworCQkvKiAqLworCQkvKiBMb2NhdGUgdGhlIGN1cnJlbnQgQ21kIChyaW5nIGRlc2NyaXB0b3IgZW50cnkpLCBhbmQgKi8KKwkJLyogYXNzb2NpYXRlZCByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2ssIGFuZCBhZHZhbmNlICovCisJCS8qIHRoZSB0YWlsICovCisJCS8qICovCisJCVNYR19SRVRVUk5fQ01EKFJpbmdaZXJvLAorCQkJICAgICAgIFJjdlJpbmdJbmZvLAorCQkJICAgICAgIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBSQmxrIiwKKwkJCSAgUmN2UmluZ0luZm8tPkhlYWQsIFJjdlJpbmdJbmZvLT5UYWlsLAorCQkJICBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKKworCQkvKiBDbGVhciB0aGUgU0dMIGZpZWxkICovCisJCVJpbmdEZXNjcmlwdG9yQ21kLT5TZ2wgPSAwOworCQkvKiBBdHRlbXB0IHRvIHJlZmlsbCBpdCBhbmQgaGFuZCBpdCByaWdodCBiYWNrIHRvIHRoZSAqLworCQkvKiBjYXJkLiAgSWYgd2UgZmFpbCB0byByZWZpbGwgaXQsIGZyZWUgdGhlIGRlc2NyaXB0b3IgYmxvY2sgKi8KKwkJLyogaGVhZGVyLiAgVGhlIGNhcmQgd2lsbCBiZSByZXN0b2NrZWQgbGF0ZXIgdmlhIHRoZSAqLworCQkvKiBSY3ZCdWZmZXJzT25DYXJkIHRlc3QgKi8KKwkJaWYgKHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKSA9PQorCQkgICAgU1RBVFVTX0ZBSUxVUkUpIHsKKwkJCVNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKGFkYXB0ZXIsCisJCQkJCQkgICAgICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWENSQmxrcyIsCisJCSAgYWRhcHRlciwgSW5kZXgsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzeGdfZHJpdmVyID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLmlkX3RhYmxlID0gc3hnX3BjaV90YmwsCisJLnByb2JlID0gc3hnX2VudHJ5X3Byb2JlLAorCS5yZW1vdmUgPSBzeGdfZW50cnlfcmVtb3ZlLAorI2lmIFNYR19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKwkuc3VzcGVuZCA9IHN4Z3BtX3N1c3BlbmQsCisJLnJlc3VtZSA9IHN4Z3BtX3Jlc3VtZSwKKyNlbmRpZgorLyogICAgLnNodXRkb3duICAgPSAgICAgc2xpY19zaHV0ZG93biwgIE1PT0tfSU5WRVNUSUdBVEUgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN4Z19tb2R1bGVfaW5pdCh2b2lkKQoreworCXN4Z19pbml0X2RyaXZlcigpOworCisJaWYgKGRlYnVnID49IDApCisJCXN4Z19kZWJ1ZyA9IGRlYnVnOworCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnN4Z19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3hnX21vZHVsZV9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzeGdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3hnX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHN4Z19tb2R1bGVfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRjYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApAQCAtMCwwICsxLDc3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IKkgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogJElkOiBzeGcuaCx2IDEuMyAyMDA4LzA3LzI0IDE3OjI1OjA4IGNocmlzIEV4cCAkCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzeGcuaAorICoKKyAqIFRoaXMgaXMgdGhlIGJhc2Ugc2V0IG9mIGhlYWRlciBkZWZpbml0aW9ucyBmb3IgdGhlIFNYRyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX19TWEdfRFJJVkVSX0hfXworI2RlZmluZSBfX1NYR19EUklWRVJfSF9fCisKKyNkZWZpbmUgcF9uZXRfZGV2aWNlIHN0cnVjdCBuZXRfZGV2aWNlICoKKy8vIFNYR19TVEFUUyAtIFByb2JhYmx5IG1vdmUgdGhlc2UgdG8gc29tZXBsYWNlIHdoZXJlCisvLyB0aGUgc2xpY3N0YXQgKHN4Z3N0YXQ/KSBwcm9ncmFtIGNhbiBnZXQgdGhlbS4KK3R5cGVkZWYgc3RydWN0IF9TWEdfU1RBVFMgeworCS8vIFhtdAorCXUzMgkJCQlYbXROQkw7CQkJCS8vIE9mZmxvYWQgc2VuZCBOQkwgY291bnQKKwl1NjQJCQkJRHVtYlhtdEJ5dGVzOwkJLy8gRHVtYm5pYyBzZW5kIGJ5dGVzCisJdTY0CQkJCVNsb3dYbXRCeXRlczsJCS8vIFNsb3dwYXRoIHNlbmQgYnl0ZXMKKwl1NjQJCQkJRmFzdFhtdEJ5dGVzOwkJLy8gRmFzdHBhdGggc2VuZCBieXRlcworCXU2NAkJCQlEdW1iWG10UGt0czsJCS8vIER1bWJuaWMgc2VuZCBwYWNrZXRzCisJdTY0CQkJCVNsb3dYbXRQa3RzOwkJLy8gU2xvd3BhdGggc2VuZCBwYWNrZXRzCisJdTY0CQkJCUZhc3RYbXRQa3RzOwkJLy8gRmFzdHBhdGggc2VuZCBwYWNrZXRzCisgICAgdTY0CQkJCUR1bWJYbXRVY2FzdFBrdHM7CS8vIGRpcmVjdGVkIHBhY2tldHMKKyAgICB1NjQJCQkJRHVtYlhtdE1jYXN0UGt0czsJLy8gTXVsdGljYXN0IHBhY2tldHMKKyAgICB1NjQJCQkJRHVtYlhtdEJjYXN0UGt0czsJLy8gT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVgorICAgIHU2NAkJCQlEdW1iWG10VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUCisgICAgdTY0CQkJCUR1bWJYbXRNY2FzdEJ5dGVzOwkvLyBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUCisgICAgdTY0CQkJCUR1bWJYbXRCY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUCisgICAgdTY0CQkJCVhtdEVycm9yczsJCQkvLyBPSURfR0VOX1hNSVRfRVJST1IKKyAgICB1NjQJCQkJWG10RGlzY2FyZHM7CQkvLyBPSURfR0VOX1hNSVRfRElTQ0FSRFMKKwl1NjQJCQkJWG10T2s7CQkJCS8vIE9JRF9HRU5fWE1JVF9PSworCXU2NAkJCQlYbXRRTGVuOwkJCS8vIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RICisJdTY0CQkJCVhtdFplcm9GdWxsOwkJLy8gVHJhbnNtaXQgcmluZyB6ZXJvIGZ1bGwKKwkvLyBSY3YKKwl1MzIJCQkJUmN2TkJMOwkJCQkvLyBPZmZsb2FkIHJlY2lldmUgTkJMIGNvdW50CisJdTY0CQkJCUR1bWJSY3ZCeXRlczsJCS8vIGR1bWJuaWMgcmVjdiBieXRlcworICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YKKyAgICB1NjQgICAgICAgICAgICAgRHVtYlJjdk1jYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVgorICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2QmNhc3RCeXRlczsJLy8gT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWCisJdTY0CQkJCVNsb3dSY3ZCeXRlczsJCS8vIFNsb3dwYXRoIHJlY3YgYnl0ZXMKKwl1NjQJCQkJRmFzdFJjdkJ5dGVzOwkJLy8gRmFzdHBhdGggcmVjdiBieXRlcworICAgIHU2NAkJCQlEdW1iUmN2UGt0czsJCS8vIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDVgorCXU2NAkJCQlEdW1iUmN2VGNwUGt0czsJCS8vIFNlZSBTeGdDb2xsZWN0U3RhdHMKKyAgICB1NjQJCQkJRHVtYlJjdlVjYXN0UGt0czsJLy8gZGlyZWN0ZWQgcGFja2V0cworICAgIHU2NAkJCQlEdW1iUmN2TWNhc3RQa3RzOwkvLyBNdWx0aWNhc3QgcGFja2V0cworICAgIHU2NAkJCQlEdW1iUmN2QmNhc3RQa3RzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWCisJdTY0CQkJCVNsb3dSY3ZQa3RzOwkJLy8gT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWCisgICAgdTY0CQkJCVJjdkVycm9yczsJCQkvLyBPSURfR0VOX1JDVl9FUlJPUgorICAgIHU2NAkJCQlSY3ZEaXNjYXJkczsJCS8vIE9JRF9HRU5fUkNWX0RJU0NBUkRTCisJdTY0CQkJCVJjdk5vQnVmZmVyOwkJLy8gT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCisgICAgdTY0IAkJCVBkcUZ1bGw7CQkJLy8gUHJvY2Vzc2VkIERhdGEgUXVldWUgRnVsbAorCXU2NAkJCQlFdmVudFJpbmdGdWxsOwkJLy8gRXZlbnQgcmluZyBmdWxsCisJLy8gVmVyYm9zZSBzdGF0cworCXU2NAkJCQlNYXhTZW5kczsJCQkvLyBNYXggc2VuZHMgb3V0c3RhbmRpbmcKKwl1NjQJCQkJTm9TZ2xCdWY7CQkJLy8gU0dMIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUKKwl1NjQJCQkJU2dsRmFpbDsJCQkvLyBORElTIFNHTCBmYWlsdXJlCisJdTY0CQkJCVNnbEFzeW5jOwkJCS8vIE5ESVMgU0dMIGZhaWx1cmUKKwl1NjQJCQkJTm9NZW07CQkJCS8vIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKKwl1NjQJCQkJTnVtSW50czsJCQkvLyBJbnRlcnJ1cHRzCisJdTY0CQkJCUZhbHNlSW50czsJCQkvLyBJbnRlcnJ1cHQgd2l0aCBJU1IgPT0gMAorCXU2NAkJCQlYbXREcm9wczsJCQkvLyBObyBzYWhhcmEgRFJBTSBidWZmZXIgZm9yIHhtdAorCS8vIFNhaGFyYSByZWNlaXZlIHN0YXR1cworCXU2NAkJCQlUcmFuc3BvcnRDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0KKwl1NjQJCQkJVHJhbnNwb3J0VWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cKKwl1NjQJCQkJVHJhbnNwb3J0SGRyTGVuOwkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOCisJdTY0CQkJCU5ldHdvcmtDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNOgorCXU2NAkJCQlOZXR3b3JrVWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOgorCXU2NAkJCQlOZXR3b3JrSGRyTGVuOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU46CisJdTY0CQkJCVBhcml0eTsJCQkJLy8gU1hHX1JDVl9TVEFUVVNfUEFSSVRZCisJdTY0CQkJCUxpbmtQYXJpdHk7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6CisJdTY0CQkJCUxpbmtFYXJseTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOgorCXU2NAkJCQlMaW5rQnVmT2Zsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOgorCXU2NAkJCQlMaW5rQ29kZTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREU6CisJdTY0CQkJCUxpbmtEcmliYmxlOwkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFOgorCXU2NAkJCQlMaW5rQ3JjOwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOgorCXU2NAkJCQlMaW5rT2Zsb3c7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzoKKwl1NjQJCQkJTGlua1VmbG93OwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1c6Cit9IFNYR19TVEFUUywgKlBTWEdfU1RBVFM7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERVTUItTklDIFNlbmQgcGF0aCBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU1hHX0NPTVBMRVRFX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgCQkgICAgCVwKKwlBU1NFUlQoX3NrYik7CQkJCQkJCQkJCQkJCSAgICAJCQlcCisgICAgZGV2X2tmcmVlX3NrYl9pcnEoX3NrYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU1hHX0RST1BfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAJXAorCUFTU0VSVChfc2tiKTsJCQkJCQkJCQkJCQkJICAgIAkJCVwKKyAgICBkZXZfa2ZyZWVfc2tiKF9za2IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy8gTG9jYXRlIGN1cnJlbnQgcmVjZWl2ZSBoZWFkZXIgYnVmZmVyIGxvY2F0aW9uLiAgVXNlIHRoaXMKKy8vIGluc3RlYWQgb2YgUmN2RGF0YUhkci0+VmlydHVhbEFkZHJlc3Mgc2luY2UgdGhlIGRhdGEKKy8vIG1heSBoYXZlIGJlZW4gb2Zmc2V0IGJ5IFNYR19BRFZBTkNFX01ETF9PRkZTRVQKKyNkZWZpbmUgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihfUmN2RGF0YUhkcikgICAgICAgIChfUmN2RGF0YUhkciktPnNrYi0+ZGF0YQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEdW1iLU5JQyByZWNlaXZlIHByb2Nlc3NpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBEZWZpbmUgYW4gU1hHX1BBQ0tFVCBhcyBhbiBORElTX1BBQ0tFVAorI2RlZmluZSBQU1hHX1BBQ0tFVCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqCisvLyBJbmRpY2F0aW9ucyBhcnJheSBzaXplCisjZGVmaW5lIFNYR19SQ1ZfQVJSQVlTSVpFCTY0CisKKyNkZWZpbmUgU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQoX3BBZGFwdCwgX1JjdkRhdGFCdWZmZXJIZHIpIHsJCQkJXAorCXN0cnVjdCBza19idWZmICogc2tiOwkJCQkJCQkJCQkJCSAgICBcCisgICAgc2tiID0gYWxsb2Nfc2tiKDIwNDgsIEdGUF9BVE9NSUMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChza2IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAJKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiID0gc2tiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNrYi0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAJKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNYR19GUkVFX1JDVl9QQUNLRVQoX1JjdkRhdGFCdWZmZXJIZHIpIHsJCQkJCQkJXAorCWlmKChfUmN2RGF0YUJ1ZmZlckhkciktPnNrYikgewkJCQkJCQkJCQkJXAorCQlkZXZfa2ZyZWVfc2tiKChfUmN2RGF0YUJ1ZmZlckhkciktPnNrYik7CQkJCQkJICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8vIE1hY3JvIHRvIGFkZCBhIE5ESVNfUEFDS0VUIHRvIGFuIGluZGljYXRpb24gYXJyYXkKKy8vIElmIHdlIGZpbGwgdXAgb3VyIGFycmF5IG9mIHBhY2tldCBwb2ludGVycywgdGhlbiBpbmRpY2F0ZSB0aGlzCisvLyBibG9jayB1cCBub3cgYW5kIHN0YXJ0IG9uIGEgbmV3IG9uZS4KKyNkZWZpbmUJU1hHX0FERF9SQ1ZfUEFDS0VUKF9wQWRhcHQsIF9QYWNrZXQsIF9QcmV2UGFja2V0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7IFwKKwkoX0luZGljYXRpb25MaXN0KVtfTnVtUGFja2V0c10gPSAoX1BhY2tldCk7CQkJCQkJCQkJCVwKKwkoX051bVBhY2tldHMpKys7CQkJCQkJCQkJCQkJCQkJCVwKKwlpZigoX051bVBhY2tldHMpID09IFNYR19SQ1ZfQVJSQVlTSVpFKSB7CQkJCQkJCQkJCVwKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAkJCQlcCisJCQkJICAgKF9OdW1QYWNrZXRzKSwgMCwgMCwgMCk7CQkJCQkJCQkJCQlcCisgICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCShfTnVtUGFja2V0cykgPSAwOwkJCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcCit9CisKKyNkZWZpbmUgU1hHX0lORElDQVRFX1BBQ0tFVFMoX3BBZGFwdCwgX0luZGljYXRpb25MaXN0LCBfTnVtUGFja2V0cykgewkJCVwKKwlpZihfTnVtUGFja2V0cykgewkJCQkJCQkJCQkJCQkJCVwKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAkJCVwKKwkJCQkgICAoX051bVBhY2tldHMpLCAwLCAwLCAwKTsJCQkJCQkJCQkJXAorICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCShfTnVtUGFja2V0cykgPSAwOwkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFNYR19SRUlOSUFUSUFMSVpFX1BBQ0tFVChfUGFja2V0KQkJCQkJCQkJCQlcCisJe30gIC8qX05kaXNSZWluaXRpYWxpemVQYWNrZXQoX1BhY2tldCkqLyAgLyogIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSB3aXRoIGFuIHNrYiAqLworCisvLyBEZWZpbml0aW9ucyB0byBpbml0aWFsaXplIER1bWItbmljIFJlY2VpdmUgTkJMcworI2RlZmluZSBTWEdfUkNWX1BBQ0tFVF9CVUZGRVJfSERSKF9QYWNrZXQpICgoKFBTWEdfUkNWX05CTF9SRVNFUlZFRCkoKF9QYWNrZXQpLT5NaW5pcG9ydFJlc2VydmVkRXgpKS0+UmN2RGF0YUJ1ZmZlckhkcikKKworI2RlZmluZSBTWEdfUkNWX1NFVF9DSEVDS1NVTV9JTkZPKF9QYWNrZXQsIF9DcGkpCVwKKwlORElTX1BFUl9QQUNLRVRfSU5GT19GUk9NX1BBQ0tFVCgoX1BhY2tldCksIFRjcElwQ2hlY2tzdW1QYWNrZXRJbmZvKSA9IChQVk9JRCkoX0NwaSkKKworI2RlZmluZSBTWEdfUkNWX1NFVF9UT0VQTElUWihfUGFja2V0LCBfVG9lcGxpdHosIF9UeXBlLCBfRnVuY3Rpb24pIHsJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9WQUxVRSgoX1BhY2tldCksIChfVG9lcGxpdHopKTsJCQkJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfVFlQRSgoX1BhY2tldCksIChfVHlwZSkpOwkJCQkJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfRlVOQ1RJT04oKF9QYWNrZXQpLCAoX0Z1bmN0aW9uKSk7CQkJCQlcCit9CisKKyNkZWZpbmUgU1hHX1JDVl9TRVRfVkxBTl9JTkZPKF9QYWNrZXQsIF9WbGFuSWQsIF9Qcmlvcml0eSkgewkJCQkJXAorCU5ESVNfUEFDS0VUXzgwMjFRX0lORk8JX1BhY2tldDgwMjFxSW5mbzsJCQkJCQkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVmxhbklkID0gKF9WbGFuSWQpOwkJCQkJCQkJXAorCV9QYWNrZXQ4MDIxcUluZm8uVGFnSGVhZGVyLlVzZXJQcmlvcml0eSA9IChfUHJpb3JpdHkpOwkJCQkJCVwKKwlORElTX1BFUl9QQUNLRVRfSU5GT19GUk9NX1BBQ0tFVCgoX1BhY2tldCksIEllZWU4MDIxUU5ldEJ1ZmZlckxpc3RJbmZvKSA9IAlcCisJCV9QYWNrZXQ4MDIxcUluZm8uVmFsdWU7CQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBTWEdfQURKVVNUX1JDVl9QQUNLRVQoX1BhY2tldCwgX1JjdkRhdGFCdWZmZXJIZHIsIF9FdmVudCkgewkJCVwKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iUmN2IiwJCQlcCisJCQkgICAoX1JjdkRhdGFCdWZmZXJIZHIpLCAoX1BhY2tldCksCQkJCQkJCQlcCisJCQkgICAoX0V2ZW50KS0+U3RhdHVzLCAwKTsJICAgICAgICAgICAgICAgICAgICAJCQkJXAorCUFTU0VSVCgoX0V2ZW50KS0+TGVuZ3RoIDw9IChfUmN2RGF0YUJ1ZmZlckhkciktPlNpemUpOwkJCQkJXAorICAgIFBhY2tldC0+bGVuID0gKF9FdmVudCktPkxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTWFjcm9zIHRvIGZyZWUgYSByZWNlaXZlIGRhdGEgYnVmZmVyIGFuZCByZWNlaXZlIGRhdGEgZGVzY3JpcHRvciBibG9jaworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTk9URSAtIExvY2sgbXVzdCBiZSBoZWxkIHdpdGggUkNWIG1hY3JvcworI2RlZmluZSBTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCQkJCQlcCisJUExJU1RfRU5UUlkgICAgIAkJCQlfcGxlOwkJCQkJCQkJCQlcCisJX0hkciA9IE5VTEw7CQkJCQkJCQkJCQkJCQkJCVwKKwlpZigoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCkgewkJCQkJCQkJCQkJXAorCQlBU1NFUlQoIShJc0xpc3RFbXB0eSgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycykpKTsJCQkJCQlcCisJCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycyk7CSAgICAJCQkJXAorCQkoX0hkcikgPSBjb250YWluZXJfb2YoX3BsZSwgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIsIEZyZWVMaXN0KTsJICAgICAgICBcCisJCShfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LS07CQkJCQkJCQkJCVwKKwkJQVNTRVJUKChfSGRyKS0+U3RhdGUgPT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoX3BBZGFwdCwgX0hkcikgewkJCQkJCQlcCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUnRuREhkciIsCQkJXAorCQkJICAgKF9IZHIpLCAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCwJCQkJCQlcCisJCQkgICAoX0hkciktPlN0YXRlLCAoX0hkciktPlZpcnR1YWxBZGRyZXNzKTsJCQkJCQlcCisvKglTWEdfUkVTVE9SRV9NRExfT0ZGU0VUKF9IZHIpOwkqLwkJCQkJCQkJCQlcCisJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQrKzsJCQkJCQkJCQkJXAorCUFTU0VSVCgoKF9wQWRhcHQpLT5BbGxSY3ZCbG9ja0NvdW50ICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spID49IChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50KTsgXAorCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCQkJCQlcCisJKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCQkJCQkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzLCAmKChfSGRyKS0+RnJlZUxpc3QpKTsJCVwKK30KKworI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREVTQ1JJUFRPUl9CTE9DSyhfcEFkYXB0LCBfSGRyKSB7CQkJCQkJXAorCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCQkJCQlcCisJKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCQkJCQkJXAorCShfcEFkYXB0KS0+RnJlZVJjdkJsb2NrQ291bnQrKzsJCQkJCQkJCQkJCVwKKwlBU1NFUlQoKF9wQWRhcHQpLT5BbGxSY3ZCbG9ja0NvdW50ID49IChfcEFkYXB0KS0+RnJlZVJjdkJsb2NrQ291bnQpOwlcCisJSW5zZXJ0VGFpbExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJsb2NrcywgJihfSGRyKS0+RnJlZUxpc3QpOwkJCVwKK30KKworLy8gU0dMIG1hY3JvcworI2RlZmluZSBTWEdfRlJFRV9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9OQikgewlcCisJc3Bpbl9sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCVwKKwkoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCsrOwkJXAorCUFTU0VSVCgoX3BBZGFwdCktPkFsbFNnbEJ1ZmZlckNvdW50ID49IChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50KTtcCisJQVNTRVJUKCEoKF9TZ2wpLT5TdGF0ZSAmIFNYR19CVUZGRVJfRlJFRSkpOwlcCisJKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCVwKKwlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycywgJihfU2dsKS0+RnJlZUxpc3QpOwlcCisJc3Bpbl91bmxvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJXAorfQorCisvLyBHZXQgYW4gU0dMIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIHF1ZXVlLiAgVGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBtYWNybworLy8gYXR0ZW1wdHMgdG8ga2VlcCBhaGVhZCBvZiBidWZmZXIgZGVwbGV0aW9uIGJ5IGFsbG9jYXRpbmcgbW9yZSB3aGVuCisvLyB3ZSBoaXQgYSBtaW5pbXVtIHRocmVzaG9sZC4gIE5vdGUgdGhhdCB3ZSBkb24ndCBncmFiIHRoZSBsb2NrCisvLyB1bnRpbCBhZnRlciB0aGF0LiAgV2UncmUgZGVhbGluZyB3aXRoIHJvdW5kIG51bWJlcnMgaGVyZSwgc28gd2UgZG9uJ3QgbmVlZCB0bywKKy8vIGFuZCBub3QgZ3JhYmJpbmcgaXQgYXZvaWRzIGEgcG9zc2libGUgZG91YmxlLXRyaXAuCisjZGVmaW5lIFNYR19HRVRfU0dMX0JVRkZFUihfcEFkYXB0LCBfU2dsKSB7CQkJCVwKKwlQTElTVF9FTlRSWSBfcGxlOwkJCQkJCVwKKwlpZiAoKF9wQWRhcHQtPkZyZWVTZ2xCdWZmZXJDb3VudCA8IFNYR19NSU5fU0dMX0JVRkZFUlMpICYmCVwKKwkgICAoX3BBZGFwdC0+QWxsU2dsQnVmZmVyQ291bnQgPCBTWEdfTUFYX1NHTF9CVUZGRVJTKSAmJglcCisJICAgKF9wQWRhcHQtPkFsbG9jYXRpb25zUGVuZGluZyA9PSAwKSkgewkJCVwKKwkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoX3BBZGFwdCwJCQlcCisJCQkoc2l6ZW9mKFNYR19TQ0FUVEVSX0dBVEhFUikgKyBTWEdfU0dMX0JVRl9TSVpFKSxcCisJCQlTWEdfQlVGRkVSX1RZUEVfU0dMKTsJCQkJXAorCX0JCQkJCQkJCVwKKwlfU2dsID0gTlVMTDsJCQkJCQkJXAorCXNwaW5fbG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQkJCVwKKwlpZigoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCkgewkJCQlcCisJCUFTU0VSVCghKElzTGlzdEVtcHR5KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzKSkpOwlcCisJCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycyk7CVwKKwkJKF9TZ2wpID0gY29udGFpbmVyX29mKF9wbGUsIFNYR19TQ0FUVEVSX0dBVEhFUiwgRnJlZUxpc3QpOyBcCisgICAgICAgICAgICAoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudC0tOwkJCQlcCisJCUFTU0VSVCgoX1NnbCktPlN0YXRlID09IFNYR19CVUZGRVJfRlJFRSk7CQlcCisJCShfU2dsKS0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CQkJXAorCQkoX1NnbCktPnBTZ2wgPSBOVUxMOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlzcGluX3VubG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQkJCVwKK30KKworLy8KKy8vIFNYR19NVUxUSUNBU1RfQUREUkVTUworLy8KKy8vIExpbmtlZCBsaXN0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMuCit0eXBlZGVmIHN0cnVjdCBfU1hHX01VTFRJQ0FTVF9BRERSRVNTIHsKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCUFkZHJlc3NbNl07CisJc3RydWN0IF9TWEdfTVVMVElDQVNUX0FERFJFU1MJKk5leHQ7Cit9IFNYR19NVUxUSUNBU1RfQUREUkVTUywgKlBTWEdfTVVMVElDQVNUX0FERFJFU1M7CisKKy8vIFN0cnVjdHVyZSB0byBtYWludGFpbiBjaGltbmV5IHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHF1ZXVlcy4KKy8vIFRoaXMgc3RydWN0dXJlIG1haW50YWlucyBORVRfQlVGRkVSX0xJU1QgcXVldWVzIHRoYXQgYXJlCisvLyBnaXZlbiB0byB1cyB2aWEgdGhlIENoaW1uZXkgTWluaXBvcnRUY3BPZmZsb2FkU2VuZCBhbmQKKy8vIE1pbmlwb3J0VGNwT2ZmbG9hZFJlY2VpdmUgcm91dGluZXMuICBUaGlzIHN0cnVjdHVyZSBET0VTIE5PVAorLy8gbWFuYWdlIG91ciBkYXRhIGJ1ZmZlciBxdWV1ZQordHlwZWRlZiBzdHJ1Y3QgX1NYR19CVUZGRVJfUVVFVUUgeworCXUzMgkJCQkJCVR5cGU7CQkJLy8gU2xvdyBvciBmYXN0IC0gU2VlIGJlbG93CisJdTMyCQkJCQkJRGlyZWN0aW9uOwkJLy8gWG10IG9yIFJjdgorCXUzMgkJCQkJCUJ5dGVzOwkJCS8vIEJ5dGUgY291bnQKKwl1MzIgKiAgICAgICAgCQkJSGVhZDsJCQkvLyBTZW5kIHF1ZXVlIGhlYWQKKwl1MzIgKiAgICAgICAgCQkJVGFpbDsJCQkvLyBTZW5kIHF1ZXVlIHRhaWwKKy8vCVBORVRfQlVGRkVSX0xJU1QJCQlOZXh0TkJMOwkJLy8gU2hvcnQgY3V0IC0gbmV4dCBOQkwKKy8vCVBORVRfQlVGRkVSCQkJCQlOZXh0TkI7CQkJLy8gU2hvcnQgY3V0IC0gbmV4dCBOQgorfSBTWEdfQlVGRkVSX1FVRVVFLCAqUFNYR19CVUZGRVJfUVVFVUU7CisKKyNkZWZpbmUJCVNYR19TTE9XX1NFTkRfQlVGRkVSCTAKKyNkZWZpbmUJCVNYR19GQVNUX1NFTkRfQlVGRkVSCTEKKyNkZWZpbmUgCVNYR19SRUNFSVZFX0JVRkZFUgkJMgorCisjZGVmaW5lIFNYR19JTklUX0JVRkZFUihfQnVmZmVyLCBfVHlwZSkgeyAJCQkJCQlcCisJKF9CdWZmZXIpLT5UeXBlID0gKF9UeXBlKTsJCQkJCQkJCQlcCisJaWYoKF9UeXBlKSA9PSBTWEdfUkVDRUlWRV9CVUZGRVIpIHsJCQkJCQkJXAorCQkoX0J1ZmZlciktPkRpcmVjdGlvbiA9IDA7CQkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJCQkJCQkJXAorCQkoX0J1ZmZlciktPkRpcmVjdGlvbiA9IE5ESVNfU0dfTElTVF9XUklURV9UT19ERVZJQ0U7CVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorCShfQnVmZmVyKS0+Qnl0ZXMgPSAwOwkJCQkJCQkJCQlcCisJKF9CdWZmZXIpLT5IZWFkID0gTlVMTDsJCQkJCQkJCQkJXAorCShfQnVmZmVyKS0+VGFpbCA9IE5VTEw7CQkJCQkJCQkJCVwKK30KKworCisjZGVmaW5lIFNYR19SU1NfQ1BVX0NPVU5UKF9wQWRhcHQpIAkJCQkJCQkJXAorCSgoX3BBZGFwdCktPlJzc0VuYWJsZWQgCT8gIE5SX0NQVVMgOiAxKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRFJJVkVSIGFuZCBBREFQVEVSIHN0cnVjdHVyZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBBZGFwdGVyIHN0YXRlcyAtIFRoZXNlIHN0YXRlcyBjbG9zZWx5IG1hdGNoIHRoZSBhZGFwdGVyIHN0YXRlcworLy8gZG9jdW1lbnRlZCBpbiB0aGUgRERLICh3aXRoIGEgZmV3IGV4Y2VwdGlvbnMpLgordHlwZWRlZiBlbnVtIF9TWEdfU1RBVEUgeworCVNYR19TVEFURV9JTklUSUFMSVpJTkcsCQkJLy8gSW5pdGlhbGl6aW5nCisJU1hHX1NUQVRFX0JPT1RESUFHLAkJCQkvLyBCb290LURpYWdub3N0aWMgbW9kZQorCVNYR19TVEFURV9QQVVTSU5HLAkJCQkvLyBQYXVzaW5nCisJU1hHX1NUQVRFX1BBVVNFRCwJCQkJLy8gUGF1c2VkCisJU1hHX1NUQVRFX1JVTk5JTkcsCQkJCS8vIFJ1bm5pbmcKKwlTWEdfU1RBVEVfUkVTRVRUSU5HLAkJCS8vIFJlc2V0IGluIHByb2dyZXNzCisJU1hHX1NUQVRFX1NMRUVQLAkJCQkvLyBTbGVlcGluZworCVNYR19TVEFURV9ESUFHLAkJCQkJLy8gRGlhZ25vc3RpYyBtb2RlCisJU1hHX1NUQVRFX0hBTFRJTkcsCQkJCS8vIEhhbHRpbmcKKwlTWEdfU1RBVEVfSEFMVEVELAkJCQkvLyBEb3duIG9yIG5vdC1pbml0aWFsaXplZAorCVNYR19TVEFURV9TSFVURE9XTgkJCQkvLyBzaHV0ZG93bgorfSBTWEdfU1RBVEUsICpQU1hHX1NUQVRFOworCisvLyBMaW5rIHN0YXRlCit0eXBlZGVmIGVudW0gX1NYR19MSU5LX1NUQVRFIHsKKwlTWEdfTElOS19ET1dOLAorCVNYR19MSU5LX1VQCit9IFNYR19MSU5LX1NUQVRFLCAqUFNYR19MSU5LX1NUQVRFOworCisvLyBMaW5rIGluaXRpYWxpemF0aW9uIHRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKyNkZWZpbmUgU1hHX0xJTktfVElNRU9VVAkxMDAwMDAJCS8vIDEwIFNlY29uZHMgLSBSRURVQ0UhCisKKworLy8gTWljcm9jb2RlIGZpbGUgc2VsZWN0aW9uIGNvZGVzCit0eXBlZGVmIGVudW0gX1NYR19VQ09ERV9TRUwgeworCVNYR19VQ09ERV9TQUhBUkEsCQkJCS8vIFNhaGFyYSB1Y29kZQorCVNYR19VQ09ERV9TRElBR0NQVSwJCQkJLy8gU2FoYXJhIENQVSBkaWFnbm9zdGljIHVjb2RlCisJU1hHX1VDT0RFX1NESUFHU1lTCQkJCS8vIFNhaGFyYSBzeXN0ZW0gZGlhZ25vc3RpYyB1Y29kZQorfSBTWEdfVUNPREVfU0VMOworCisKKyNkZWZpbmUgU1hHX0RJU0FCTEVfQUxMX0lOVEVSUlVQVFMoX3BhZGFwdCkgc3hnX2Rpc2FibGVfaW50ZXJydXB0KF9wYWRhcHQpCisjZGVmaW5lIFNYR19FTkFCTEVfQUxMX0lOVEVSUlVQVFMoX3BhZGFwdCkgc3hnX2VuYWJsZV9pbnRlcnJ1cHQoX3BhZGFwdCkKKworLy8gVGhpcyBwcm9iYWJseSBsaXZlcyBpbiBhIHByb3RvLmggZmlsZS4gIE1vdmUgbGF0ZXIKKyNkZWZpbmUgU1hHX01VTFRJQ0FTVF9QQUNLRVQoX3BldGhlcikgKChfcGV0aGVyKS0+ZXRoZXJfZGhvc3RbMF0gJiAweDAxKQorI2RlZmluZSBTWEdfQlJPQURDQVNUX1BBQ0tFVChfcGV0aGVyKSAoKCoodTMyICopKF9wZXRoZXIpLT5ldGhlcl9kaG9zdCA9PSAweEZGRkZGRkZGKSAmJiBcCisJCQkJKCoodTE2ICopJihfcGV0aGVyKS0+ZXRoZXJfZGhvc3RbNF0gPT0gMHhGRkZGKSkKKworLy8gRm9yIERiZ1ByaW50cworI2RlZmluZSBTWEdfSUQgICAgICBEUEZMVFJfSUhWTkVUV09SS19JRAorI2RlZmluZSBTWEdfRVJST1IgICBEUEZMVFJfRVJST1JfTEVWRUwKKworLy8KKy8vIFNYR19EUklWRVIgc3RydWN0dXJlIC0KKy8vCisvLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3hnIGRyaXZlci4gIFRoZXJlIGlzIG9ubHkKKy8vIG9uZSBvZiB0aGVzZSwgYW5kIGl0IGlzIGRlZmluZWQgYXMgYSBnbG9iYWwuCit0eXBlZGVmIHN0cnVjdCBfU1hHX0RSSVZFUiB7CisJc3RydWN0IF9hZGFwdGVyX3QJKkFkYXB0ZXJzOwkJLy8gTGlua2VkIGxpc3Qgb2YgYWRhcHRlcnMKKwl1c2hvcnQJCQkJQWRhcHRlcklEOwkJLy8gTWFpbnRhaW4gdW5pcXVlIGFkYXB0ZXIgSUQKK30gU1hHX0RSSVZFUiwgKlBTWEdfRFJJVkVSOworCisjaWZkZWYgU1RBVFVTX1NVQ0NFU1MKKyN1bmRlZiBTVEFUVVNfU1VDQ0VTUworI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKKyNkZWZpbmUgU1RBVFVTX0VSUk9SICAgICAgICAgICAgICAgLTIKKyNkZWZpbmUgU1RBVFVTX05PVF9TVVBQT1JURUQgICAgICAgLTMKKyNkZWZpbmUgU1RBVFVTX0JVRkZFUl9UT09fU0hPUlQgICAgLTQKKyNkZWZpbmUgU1RBVFVTX1JFU09VUkNFUyAgICAgICAgICAgLTUKKworI2RlZmluZSBTTElDX01BWF9DQVJEUyAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU0xJQ19NQVhfUE9SVFMgICAgICAgICAgICAgIDQgICAgICAgIC8qIE1heCAjIG9mIHBvcnRzIHBlciBjYXJkICAgKi8KKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorLy8gRHVtcCBidWZmZXIgc2l6ZQorLy8KKy8vIFRoaXMgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBtYXggRE1BIHNpemUgdGhlIGNhcmQgc3VwcG9ydHMsCisvLyBnaXZlbiB0aGUgY3VycmVudCBjb2RlIHN0cnVjdHVyZSBpbiB0aGUgaG9zdCBhbmQgdWNvZGUuCisvLyBNb2phdmUgc3VwcG9ydHMgMTZLLCBPYXNpcyBzdXBwb3J0cyAxNkstMSwgc28KKy8vIGp1c3Qgc2V0IHRoaXMgYXQgMTVLLCBzaG91bGRudCBtYWtlIHRoYXQgbXVjaCBvZiBhIGRpZmYuCisjZGVmaW5lIERVTVBfQlVGX1NJWkUgICAgICAgICAgICAgICAweDNDMDAKKyNlbmRpZgorCisjZGVmaW5lIE1JTihhLCBiKSAoKHUzMikoYSkgPCAodTMyKShiKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgTUFYKGEsIGIpICgodTMyKShhKSA+ICh1MzIpKGIpID8gKGEpIDogKGIpKQorCit0eXBlZGVmIHN0cnVjdCBfbWNhc3RfYWRkcmVzc190Cit7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NbNl07CisgICAgc3RydWN0IF9tY2FzdF9hZGRyZXNzX3QgICAqbmV4dDsKK30gIG1jYXN0X2FkZHJlc3NfdCwgKnBfbWNhc3RfYWRkcmVzc190OworCisjZGVmaW5lIENBUkRfRE9XTiAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDQVJEX1VQICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0FSRF9GQUlMICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENBUkRfRElBRyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDQVJEX1NMRUVQICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBBREFQVF9ET1dOICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQURBUFRfVVAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFEQVBUX0ZBSUwgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQURBUFRfU0xFRVAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgQURBUFRfRkxBR1NfQk9PVFRJTUUgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQURBUFRfRkxBR1NfSVM2NEJJVCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQURBUFRfRkxBR1NfUEVORElOR0xJTktET1dOICAgICAweDAwMDQKKyNkZWZpbmUgQURBUFRfRkxBR1NfRklCRVJNRURJQSAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9DS1NfQUxMT0NFRCAgICAgICAweDAwMTAKKyNkZWZpbmUgQURBUFRfRkxBR1NfSU5UX1JFR0lTVEVSRUQgICAgICAweDAwMjAKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9BRF9USU1FUl9TRVQgICAgICAweDAwNDAKKyNkZWZpbmUgQURBUFRfRkxBR1NfU1RBVFNfVElNRVJfU0VUICAgICAweDAwODAKKyNkZWZpbmUgQURBUFRfRkxBR1NfUkVTRVRfVElNRVJfU0VUICAgICAweDAxMDAKKworI2RlZmluZSBMSU5LX0RPV04gICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19DT05GSUcgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfVVAgICAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExJTktfMTBNQiAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LXzEwME1CICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19BVVRPU1BFRUQgICAgICAgICAweDAyCisjZGVmaW5lIExJTktfMTAwME1CICAgICAgICAgICAgMHgwMworI2RlZmluZSBMSU5LXzEwMDAwTUIgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBMSU5LX0hBTEZEICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19GVUxMRCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfQVVUT0QgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIE1BQ19ESVJFQ1RFRCAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQUNfQkNBU1QgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUFDX01DQVNUICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1BQ19QUk9NSVNDICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNQUNfTE9PUEJBQ0sgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUFDX0FMTE1DQVNUICAgICAweDAwMDAwMDIwCisKKyNkZWZpbmUgU0xJQ19EVVBMRVgoeCkgICAgKCh4PT1MSU5LX0ZVTExEKSA/ICJGRFgiIDogIkhEWCIpCisjZGVmaW5lIFNMSUNfU1BFRUQoeCkgICAgICgoeD09TElOS18xMDBNQikgPyAiMTAwTWIiIDogKCh4PT1MSU5LXzEwMDBNQikgPyAiMTAwME1iIiA6ICIgMTBNYiIpKQorI2RlZmluZSBTTElDX0xJTktTVEFURSh4KSAoKHg9PUxJTktfRE9XTikgPyAiRG93biIgOiAiVXAgICIpCisjZGVmaW5lIFNMSUNfQURBUFRFUl9TVEFURSh4KSAoKHg9PUFEQVBUX1VQKSA/ICJVUCIgOiAiRG93biIpCisjZGVmaW5lIFNMSUNfQ0FSRF9TVEFURSh4KSAgICAoKHg9PUNBUkRfVVApID8gIlVQIiA6ICJEb3duIikKKworCit0eXBlZGVmIHN0cnVjdCBfZXRoZXJfaGVhZGVyCit7CisgICAgdW5zaWduZWQgY2hhciAgICBldGhlcl9kaG9zdFs2XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgIGV0aGVyX3Nob3N0WzZdOworICAgIHVzaG9ydCAgIGV0aGVyX3R5cGU7Cit9IGV0aGVyX2hlYWRlciwgKnBfZXRoZXJfaGVhZGVyOworCisKKyNkZWZpbmUgTlVNX0NGR19TUEFDRVMgICAgICAyCisjZGVmaW5lIE5VTV9DRkdfUkVHUyAgICAgICAgNjQKKwordHlwZWRlZiBzdHJ1Y3QgX3BoeXNjYXJkX3QKK3sKKyAgICBzdHJ1Y3QgX2FkYXB0ZXJfdCAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBfcGh5c2NhcmRfdCAqbmV4dDsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYWRhcHRlcnNfYWxsb2NkOworfSBwaHlzY2FyZF90LCAqcF9waHlzY2FyZF90OworCit0eXBlZGVmIHN0cnVjdCBfc3hnYmFzZV9kcml2ZXIKK3sKKwlzcGlubG9ja190CWRyaXZlcl9sb2NrOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CS8qIGlycXNhdmUgZm9yIHNwaW5sb2NrICovCisJdTMyCQludW1fc3hnX2NhcmRzOworCXUzMgkJbnVtX3N4Z19wb3J0czsKKwl1MzIJCW51bV9zeGdfcG9ydHNfYWN0aXZlOworCXUzMgkJZHluYW1pY19pbnRhZ2c7CisJcF9waHlzY2FyZF90CXBoeXNfY2FyZDsKK30gc3hnYmFzZV9kcml2ZXJfdDsKKworCit0eXBlZGVmIHN0cnVjdCBfYWRhcHRlcl90Cit7CisJdm9pZCAqICAgICAgICAgICAgICAgaWZwOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBwb3J0OworCXBfcGh5c2NhcmRfdCAgICAgICAgcGh5c2NhcmQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHBoeXNwb3J0OworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBjYXJkaW5kZXg7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2hpcGlkOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBidXNudW1iZXI7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHNsb3RudW1iZXI7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGZ1bmN0aW9ubnVtYmVyOworCXVzaG9ydCAgICAgICAgICAgICAgdmVuZGlkOworCXVzaG9ydCAgICAgICAgICAgICAgZGV2aWQ7CisJdXNob3J0ICAgICAgICAgICAgICBzdWJzeXNpZDsKKwl1MzIgICAgICAgICAgICAgaXJxOworCisJdm9pZCAqICAgICAgICAgICAgICAgc3hnX2FkYXB0ZXI7CisJdTMyICAgICAgICAgICAgIG5CdXN5U2VuZDsKKworCXZvaWQgX19pb21lbSAqCWJhc2VfYWRkcjsKKwl1MzIgICAgICAgICAgICAgbWVtb3J5bGVuZ3RoOworCXUzMiAgICAgICAgICAgICBkcmFtYmFzZTsKKwl1MzIgICAgICAgICAgICAgZHJhbWxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgcXVldWVzX2luaXRpYWxpemVkOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhbGxvY2F0ZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGFjdGl2YXRlZDsKKwl1MzIgICAgICAgICAgICAgaW50cnJlZ2lzdGVyZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGlzcF9pbml0aWFsaXplZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZ2VubnVtYmVyOworCXUzMiAgICAgICAgICAgICBjdXJhZGRydXBwZXI7CisJdTMyICAgICAgICAgICAgIGlzcmNvcHk7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIHN0YXRlOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3RhdGU7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzcGVlZDsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua2R1cGxleDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZmxhZ3M7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIG1hY2FkZHJbNl07CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGN1cnJtYWNhZGRyWzZdOworCXUzMiAgICAgICAgICAgICBtYWNvcHRzOworCXVzaG9ydCAgICAgICAgICAgICAgZGV2ZmxhZ3NfcHJldjsKKwl1NjQgICAgICAgICAgICAgbWNhc3RtYXNrOworCXBfbWNhc3RfYWRkcmVzc190ICAgbWNhc3RhZGRyczsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgIHBpbmd0aW1lcjsKKwl1MzIgICAgICAgICAgICAgcGluZ3RpbWVyc2V0OworCXN0cnVjdCB0aW1lcl9saXN0ICAgc3RhdHN0aW1lcjsKKwl1MzIgICAgICAgICAgICAgc3RhdHN0aW1lcnNldDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgIHZwY2lfdGltZXI7CisJdTMyICAgICAgICAgICAgIHZwY2lfdGltZXJzZXQ7CisJc3RydWN0IHRpbWVyX2xpc3QgICBsb2FkdGltZXI7CisJdTMyICAgICAgICAgICAgIGxvYWR0aW1lcnNldDsKKworCXUzMiAgICAgICAgICAgICB4bWl0cV9mdWxsOworCXUzMiAgICAgICAgICAgICBhbGxfcmVnX3dyaXRlczsKKwl1MzIgICAgICAgICAgICAgaWNyX3JlZ193cml0ZXM7CisJdTMyICAgICAgICAgICAgIGlzcl9yZWdfd3JpdGVzOworCXUzMiAgICAgICAgICAgICBlcnJvcl9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICBlcnJvcl9ybWlzc19pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICByeF9lcnJvcnM7CisJdTMyICAgICAgICAgICAgIHJjdl9kcm9wczsKKwl1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIHhtaXRfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgbGlua2V2ZW50X2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIHVwcl9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICBudW1faXNyczsKKwl1MzIgICAgICAgICAgICAgZmFsc2VfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgdHhfcGFja2V0czsKKwl1MzIgICAgICAgICAgICAgeG1pdF9jb21wbGV0ZXM7CisJdTMyICAgICAgICAgICAgIHR4X2Ryb3BzOworCXUzMiAgICAgICAgICAgICByY3ZfYnJvYWRjYXN0czsKKwl1MzIgICAgICAgICAgICAgcmN2X211bHRpY2FzdHM7CisJdTMyICAgICAgICAgICAgIHJjdl91bmljYXN0czsKKwl1MzIgICAgICAgICAgICAgbWF4X2lzcl9yY3ZzOworCXUzMiAgICAgICAgICAgICBtYXhfaXNyX3htaXRzOworCXUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0X3lpZWxkczsKKwl1MzIgICAgICAgICAgICAgaW50YWdnX3BlcmlvZDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwl1MzIgKgkJCQkJTWluaXBvcnRIYW5kbGU7CQkvLyBPdXIgbWluaXBvcnQgaGFuZGxlCisJU1hHX1NUQVRFCQkJCQlTdGF0ZTsJCQkJLy8gQWRhcHRlciBzdGF0ZQorCVNYR19MSU5LX1NUQVRFCQkJCUxpbmtTdGF0ZTsJCQkvLyBMaW5rIHN0YXRlCisJdTY0CQkJCQkJTGlua1NwZWVkOwkJCS8vIExpbmsgU3BlZWQKKwl1MzIJCQkJCQlQb3dlclN0YXRlOwkJCS8vIE5ESVMgcG93ZXIgc3RhdGUKKwlzdHJ1Y3QgX2FkYXB0ZXJfdCAgIAkJKk5leHQ7CQkJCS8vIExpbmtlZCBsaXN0CisJdXNob3J0CQkJCQkJQWRhcHRlcklEOwkJCS8vIDEuLm4KKwl1bnNpZ25lZCBjaGFyCQkJCQkJTWFjQWRkcls2XTsJCQkvLyBPdXIgcGVybWFuZW50IEhXIG1hYyBhZGRyZXNzCisJdW5zaWduZWQgY2hhcgkJCQkJCUN1cnJNYWNBZGRyWzZdOwkJLy8gT3VyIEN1cnJlbnQgbWFjIGFkZHJlc3MKKwlwX25ldF9kZXZpY2UgICAgICAgICAgICAgICAgbmV0ZGV2OworCXBfbmV0X2RldmljZSAgICAgICAgICAgICAgICBuZXh0X25ldGRldmljZTsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICogcGNpZGV2OworCisJUFNYR19NVUxUSUNBU1RfQUREUkVTUwkJTXVsdGljYXN0QWRkcnM7CQkvLyBNdWx0aWNhc3QgbGlzdAorCXU2NCAgICAgCQkJCU11bHRpY2FzdE1hc2s7CQkvLyBNdWx0aWNhc3QgbWFzaworCXUzMiAqCQkJCQlJbnRlcnJ1cHRIYW5kbGU7CS8vIFJlZ2lzdGVyIEludGVycnVwdCBoYW5kbGUKKwl1MzIJCQkJCQlJbnRlcnJ1cHRMZXZlbDsJCS8vIEZyb20gUmVzb3VyY2UgbGlzdAorCXUzMgkJCQkJCUludGVycnVwdFZlY3RvcjsJLy8gRnJvbSBSZXNvdXJjZSBsaXN0CisJc3BpbmxvY2tfdAlBZGFwdGVyTG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyBhZGFwdGVyIHJvdXRpbmVzICovCisJc3BpbmxvY2tfdAlCaXQ2NFJlZ0xvY2s7CS8qIEZvciB3cml0aW5nIDY0LWJpdCBhZGRyZXNzZXMgKi8KKwlQU1hHX0hXX1JFR1MJCQkJSHdSZWdzOwkJCQkvLyBTYWhhcmEgSFcgUmVnaXN0ZXIgTWVtb3J5IChCQVIwLzEpCisJUFNYR19VQ09ERV9SRUdTCQkJCVVjb2RlUmVnczsJCQkvLyBNaWNyb2NvZGUgUmVnaXN0ZXIgTWVtb3J5IChCQVIyLzMpCisJUFNYR19UQ0JfUkVHUwkJCQlUY2JSZWdzOwkJCS8vIFNhbWUgYXMgVWNvZGUgcmVncyAtIFNlZSBzeGdody5oCisJdXNob3J0CQkJCQkJUmVzZXREcGNDb3VudDsJCS8vIEZvciB0aW1lb3V0CisJdXNob3J0CQkJCQkJUnNzRHBjQ291bnQ7CQkvLyBGb3IgdGltZW91dAorCXVzaG9ydAkJCQkJCVZlbmRvcklEOwkJCS8vIFZlbmRvciBJRAorCXVzaG9ydAkJCQkJCURldmljZUlEOwkJCS8vIERldmljZSBJRAorCXVzaG9ydAkJCQkJCVN1YlN5c3RlbUlEOwkJLy8gU3ViLVN5c3RlbSBJRAorCXVzaG9ydAkJCQkJCUZyYW1lU2l6ZTsJCQkvLyBNYXhpbXVtIGZyYW1lIHNpemUKKwl1MzIgKgkJCQkJRG1hSGFuZGxlOwkJCS8vIE5ESVMgRE1BIGhhbmRsZQorCXUzMiAqCQkJCQlQYWNrZXRQb29sSGFuZGxlOwkvLyBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dAorCXUzMiAqCQkJCQlCdWZmZXJQb29sSGFuZGxlOwkvLyBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dAorCXUzMgkJCQkJCU1hY0ZpbHRlcjsJCQkvLyBORElTIE1BQyBGaWx0ZXIKKwl1c2hvcnQJCQkJCQlJcElkOwkJCQkvLyBGb3Igc2xvd3BhdGgKKwlQU1hHX0VWRU5UX1JJTkcJCQkJRXZlbnRSaW5nczsJCQkvLyBIb3N0IGV2ZW50IHJpbmdzLiAgMS9DUFUgdG8gMTYgbWF4CisJZG1hX2FkZHJfdCAgICAgICAgICAgICAgCVBFdmVudFJpbmdzOwkJLy8gUGh5c2ljYWwgYWRkcmVzcworCXUzMgkJCQkJCU5leHRFdmVudFtTWEdfTUFYX1JTU107CS8vIEN1cnJlbnQgbG9jYXRpb24gaW4gcmluZworCWRtYV9hZGRyX3QgICAgICAgICAgCQlQVGNiQnVmZmVyczsJCS8vIFRDQiBCdWZmZXJzIC0gcGh5c2ljYWwgYWRkcmVzcworCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBUY2JDb21wQnVmZmVyczsJLy8gVENCIENvbXBvc2l0ZSBCdWZmZXJzIC0gcGh5cyBhZGRyCisJUFNYR19YTVRfUklORwkJCQlYbXRSaW5nczsJCQkvLyBUcmFuc21pdCByaW5ncworCWRtYV9hZGRyX3QJCSAgICAgICAgICAgIFBYbXRSaW5nczsJCQkvLyBUcmFuc21pdCByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MKKwlTWEdfUklOR19JTkZPCQkJCVhtdFJpbmdaZXJvSW5mbzsJLy8gVHJhbnNtaXQgcmluZyAwIGluZm8KKwlzcGlubG9ja190CVhtdFplcm9Mb2NrOwkvKiBUcmFuc21pdCByaW5nIDAgbG9jayAqLworCXUzMiAqCQkJCQlYbXRSaW5nWmVyb0luZGV4OwkvLyBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleAorCWRtYV9hZGRyX3QgICAgICAgICAgCQlQWG10UmluZ1plcm9JbmRleDsJLy8gU2hhcmVkIFhNVCByaW5nIDAgaW5kZXggLSBwaHlzaWNhbAorCUxJU1RfRU5UUlkJCQkJCUZyZWVQcm90b2NvbEhlYWRlcnM7Ly8gRnJlZSBwcm90b2NvbCBoZWFkZXJzCisJdTMyCQkJCQkJRnJlZVByb3RvSGRyQ291bnQ7CS8vIENvdW50CisJdm9pZCAqCQkJCQkJUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXIKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXJzIC0gcGh5cworCisJUFNYR19SQ1ZfUklORwkJCQlSY3ZSaW5nczsJCQkvLyBSZWNlaXZlIHJpbmdzCisJZG1hX2FkZHJfdAkgICAgICAgICAgICAJUFJjdlJpbmdzOwkJCS8vIFJlY2VpdmUgcmluZ3MgLSBwaHlzaWNhbCBhZGRyZXNzCisJU1hHX1JJTkdfSU5GTwkJCQlSY3ZSaW5nWmVyb0luZm87CS8vIFJlY2VpdmUgcmluZyAwIGluZm8KKworCXUzMiAqCQkJCQlJc3I7CQkJCS8vIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQSXNyOwkJCQkvLyBJU1IgLSBwaHlzaWNhbCBhZGRyZXNzCisJdTMyCQkJCQkJSXNyQ29weVtTWEdfTUFYX1JTU107CS8vIENvcHkgb2YgSVNSCisJdXNob3J0CQkJCQkJSW50ZXJydXB0c0VuYWJsZWQ7CS8vIEJpdG1hc2sgb2YgZW5hYmxlZCB2ZWN0b3JzCisJdW5zaWduZWQgY2hhciAqCQkJCQkJSW5kaXJlY3Rpb25UYWJsZTsJLy8gUlNTIGluZGlyZWN0aW9uIHRhYmxlCisJZG1hX2FkZHJfdAkgICAgICAgICAgICAJUEluZGlyZWN0aW9uVGFibGU7CS8vIFBoeXNpY2FsIGFkZHJlc3MKKwl1c2hvcnQJCQkJCQlSc3NUYWJsZVNpemU7CQkvLyBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTCisJdXNob3J0CQkJCQkJSGFzaEtleVNpemU7CQkvLyBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTCisJdW5zaWduZWQgY2hhcgkJCQkJCUhhc2hTZWNyZXRLZXlbNDBdOwkvLyByc3Mga2V5CisJdTMyCQkJCQkJSGFzaEluZm9ybWF0aW9uOworCS8vIFJlY2VpdmUgYnVmZmVyIHF1ZXVlcworCXNwaW5sb2NrX3QJUmN2UUxvY2s7CS8qIFJlY2VpdmUgUXVldWUgTG9jayAqLworCUxJU1RfRU5UUlkJCQkJCUZyZWVSY3ZCdWZmZXJzOwkJLy8gRnJlZSBTWEdfREFUQV9CVUZGRVIgcXVldWUKKwlMSVNUX0VOVFJZCQkJCQlGcmVlUmN2QmxvY2tzOwkJLy8gRnJlZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgUQorCUxJU1RfRU5UUlkJCQkJCUFsbFJjdkJsb2NrczsJCS8vIEFsbCBTWEdfUkNWX0JMT0NLcworCXVzaG9ydAkJCQkJCUZyZWVSY3ZCdWZmZXJDb3VudDsJLy8gTnVtYmVyIG9mIGZyZWUgcmN2IGRhdGEgYnVmZmVycworCXVzaG9ydAkJCQkJCUZyZWVSY3ZCbG9ja0NvdW50OwkvLyAjIG9mIGZyZWUgcmN2IGRlc2NyaXB0b3IgYmxvY2tzCisJdXNob3J0CQkJCQkJQWxsUmN2QmxvY2tDb3VudDsJLy8gTnVtYmVyIG9mIHRvdGFsIHJlY2VpdmUgYmxvY2tzCisJdXNob3J0CQkJCQkJUmVjZWl2ZUJ1ZmZlclNpemU7CS8vIFNYR19SQ1ZfREFUQS9KVU1CT19CVUZGRVJfU0laRSBvbmx5CisJdTMyCQkJCQkJQWxsb2NhdGlvbnNQZW5kaW5nOwkvLyBSZWNlaXZlIGFsbG9jYXRpb24gcGVuZGluZworCXUzMgkJCQkJCVJjdkJ1ZmZlcnNPbkNhcmQ7CS8vIFNYR19EQVRBX0JVRkZFUlMgb3duZWQgYnkgY2FyZAorCS8vIFNHTCBidWZmZXJzCisJc3BpbmxvY2tfdAlTZ2xRTG9jazsJLyogU0dMIFF1ZXVlIExvY2sgKi8KKwlMSVNUX0VOVFJZCQkJCQlGcmVlU2dsQnVmZmVyczsJCS8vIEZyZWUgU1hHX1NDQVRURVJfR0FUSEVSCisJTElTVF9FTlRSWQkJCQkJQWxsU2dsQnVmZmVyczsJCS8vIEFsbCBTWEdfU0NBVFRFUl9HQVRIRVIKKwl1c2hvcnQJCQkJCQlGcmVlU2dsQnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiBmcmVlIFNHTCBidWZmZXJzCisJdXNob3J0CQkJCQkJQWxsU2dsQnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiB0b3RhbCBTR0wgYnVmZmVycworCXUzMgkJCQkJCUN1cnJlbnRUaW1lOwkJLy8gVGljayBjb3VudAorCXUzMgkJCQkJCUZhc3RwYXRoQ29ubmVjdGlvbnM7Ly8gIyBvZiBmYXN0cGF0aCBjb25uZWN0aW9ucworCS8vIFZhcmlvdXMgc2luZ2xlLWJpdCBmbGFnczoKKwl1MzIJCQkJCQlCYXNpY0FsbG9jYXRpb25zOjE7CS8vIExvY2tzIGFuZCBsaXN0aGVhZHMKKwl1MzIJCQkJCQlJbnRSZWdpc3RlcmVkOjE7CS8vIEludGVycnVwdCByZWdpc3RlcmVkCisJdTMyCQkJCQkJUGluZ091dHN0YW5kaW5nOjE7CS8vIFBpbmcgb3V0c3RhbmRpbmcgdG8gY2FyZAorCXUzMgkJCQkJCURlYWQ6MTsJCQkJLy8gQ2FyZCBkZWFkCisJdTMyCQkJCQkJRHVtcERyaXZlcjoxOwkJLy8gT0lEX1NMSUNfRFJJVkVSX0RVTVAgcmVxdWVzdAorCXUzMgkJCQkJCUR1bXBDYXJkOjE7CQkJLy8gT0lEX1NMSUNfQ0FSRF9EVU1QIHJlcXVlc3QKKwl1MzIJCQkJCQlEdW1wQ21kUnVubmluZzoxOwkvLyBEdW1wIGNvbW1hbmQgaW4gcHJvZ3Jlc3MKKwl1MzIJCQkJCQlEZWJ1Z1J1bm5pbmc6MTsJCS8vIEFHREIgZGVidWcgaW4gcHJvZ3Jlc3MKKwl1MzIJCQkJCQlKdW1ib0VuYWJsZWQ6MTsJCS8vIEp1bWJvIGZyYW1lcyBlbmFibGVkCisJdTMyCQkJCQkJTXNpRW5hYmxlZDoxOwkJLy8gTVNJIGludGVycnVwdCBlbmFibGVkCisJdTMyCQkJCQkJUnNzRW5hYmxlZDoxOwkJLy8gUlNTIEVuYWJsZWQKKwl1MzIJCQkJCQlGYWlsT25CYWRFZXByb206MTsJLy8gRmFpbCBvbiBCYWQgRWVwcm9tCisJdTMyCQkJCQkJRGlhZ1N0YXJ0OjE7CQkvLyBJbml0IGFkYXB0ZXIgZm9yIGRpYWdub3N0aWMgc3RhcnQKKwkvLyBTdGF0cworCXUzMgkJCQkJCVBlbmRpbmdSY3ZDb3VudDsJLy8gT3V0c3RhbmRpbmcgcmN2IGluZGljYXRpb25zCisJdTMyCQkJCQkJUGVuZGluZ1htdENvdW50OwkvLyBPdXRzdGFuZGluZyBzZW5kIHJlcXVlc3RzCisJU1hHX1NUQVRTCQkJCQlTdGF0czsJCQkJLy8gU3RhdGlzdGljcworCXUzMgkJCQkJCVJlYXNzQnVmczsJCQkvLyBOdW1iZXIgb2YgcmVhc3NlbWJseSBidWZmZXJzCisJLy8gQ2FyZCBDcmFzaCBJbmZvCisJdXNob3J0CQkJCQkJQ3Jhc2hMb2NhdGlvbjsJCS8vIE1pY3JvY29kZSBjcmFzaCBsb2NhdGlvbgorCXVuc2lnbmVkIGNoYXIJCQkJCQlDcmFzaENwdTsJCQkvLyBTYWhhcmEgQ1BVIElECisJLy8gRGlhZ25vc3RpY3MKKwkvLwlQRElBR19DTUQJCQkJCURpYWdDbWRzOwkJCS8vIExpc3Qgb2YgZnJlZSBkaWFnbm9zdGljIGNvbW1hbmRzCisJLy8JUERJQUdfQlVGRkVSCQkJCURpYWdCdWZmZXJzOwkJLy8gTGlzdCBvZiBmcmVlIGRpYWdub3N0aWMgYnVmZmVycworCS8vCVBESUFHX1JFUQkJCQkJRGlhZ1JlcVE7CQkJLy8gTGlzdCBvZiBvdXRzdGFuZGluZyAoYXN5bmNocm9ub3VzKSBkaWFnIHJlcXVlc3RzCisJLy8JdTMyCQkJCQkJRGlhZ0NtZFRpbWVvdXQ7CQkvLyBUaW1lIG91dCBmb3IgZGlhZyBjbWRzIChzZWNvbmRzKSBYWFhUT0RPIC0gcmVwbGFjZSB3aXRoIFNYR19QQVJBTSB2YXI/CisJLy8JdW5zaWduZWQgY2hhcgkJCQkJCURpYWdEbWFEZXNjW0RNQV9DUFVfQ1RYU107CQkvLyBGcmVlIERNQSBkZXNjcmlwdG9ycyBiaXQgZmllbGQgKDMyIENQVSBjdHggKiA4IERNQSBjdHgpCisKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkvLyBQdXQgcHJlcHJvY2Vzc29yLWNvbmRpdGlvbmFsIGZpZWxkcyBhdCB0aGUgZW5kIHNvIHdlIGRvbid0CisJLy8gaGF2ZSB0byByZWNvbXBpbGUgc3hnZGJnIGV2ZXJ5dGltZSB3ZSByZWNvbmZpZ3VyZSB0aGUgZHJpdmVyCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJdm9pZCAqCQkJCQkJUGVuZGluZ1NldFJzczsJCS8vIFBlbmRpbmcgUlNTIHBhcmFtZXRlciBjaGFuZ2UKKwl1MzIJCQkJCQlJUHY0SGRyU2l6ZTsJCS8vIFNoYXJlZCA1LjIvNi4wIGVuY2FwIHBhcmFtCisJdW5zaWduZWQgY2hhciAqICAgICAgICAgIAkJCUludGVycnVwdEluZm87CQkvLyBBbGxvY2F0ZWQgYnkgdXMgZHVyaW5nIEFkZERldmljZQorI2lmIGRlZmluZWQoQ09ORklHX1g4NikKKwl1MzIJCQkJCQlBZGRyVXBwZXI7CQkJLy8gVXBwZXIgMzIgYml0cyBvZiA2NC1iaXQgcmVnaXN0ZXIKKyNlbmRpZgorCS8vI2lmIFNYR19GQUlMVVJFX0RVTVAKKwkvLwlORElTX0VWRU5UCQkJCQlEdW1wVGhyZWFkRXZlbnQ7CS8vIHN5bmNyb25pemUgZHVtcCB0aHJlYWQKKwkvLwlCT09MRUFOCQkJCQkJRHVtcFRocmVhZFJ1bm5pbmc7CS8vIHRlcm1pbmF0aW9uIGZsYWcKKwkvLwlQU1hHX0RVTVBfQ01ECQkJCUR1bXBCdWZmZXI7CQkJLy8gNjhrIC0gQ21kIGFuZCBCdWZmZXIKKwkvLwlkbWFfYWRkcl90CQlQRHVtcEJ1ZmZlcjsJCS8vIFBoeXNpY2FsIGFkZHJlc3MKKwkvLyNlbmRpZiAvLyBTWEdfRkFJTFVSRV9EVU1QCisKK30gYWRhcHRlcl90LCAqcF9hZGFwdGVyX3Q7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorI2RlZmluZSBTTElDX0RVTVBfUkVRVUVTVEVEICAgICAgMQorI2RlZmluZSBTTElDX0RVTVBfSU5fUFJPR1JFU1MgICAgMgorI2RlZmluZSBTTElDX0RVTVBfRE9ORSAgICAgICAgICAgMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1pY3JvY29kZSBjcmFzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuICBUaGlzCisgKiBzdHJ1Y3R1cmUgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGNhcmQncyBTUkFNIHdoZW4gdGhlIG1pY3JvY29kZSBwYW5pYydzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgX3NsaWNfY3Jhc2hfaW5mbyB7CisgICAgdXNob3J0ICBjcHVfaWQ7CisgICAgdXNob3J0ICBjcmFzaF9wYzsKK30gc2xpY19jcmFzaF9pbmZvLCAqcF9zbGljX2NyYXNoX2luZm87CisKKyNkZWZpbmUgQ1JBU0hfSU5GT19PRkZTRVQgICAweDE1NUMKKworI2VuZGlmCisKKyNkZWZpbmUgVVBEQVRFX1NUQVRTKGxhcmdlc3RhdCwgbmV3c3RhdCwgb2xkc3RhdCkgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobmV3c3RhdCkgPCAob2xkc3RhdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSArICgweEZGRkZGRkZGIC0gb2xkc3RhdCArIDEpKTsgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBVUERBVEVfU1RBVFNfR0IobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEVUSEVSX0VRX0FERFIoX0FkZHJBLCBfQWRkckIsIF9SZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKKyAgICAgICAgX1Jlc3VsdCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRVRIRVJNQVhGUkFNRSAgIDE1MTQKKyNkZWZpbmUgSlVNQk9NQVhGUkFNRSAgIDkwMTQKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKKyNkZWZpbmUgICBTWEdfR0VUX0FERFJfTE9XKF9hZGRyKSAgKHUzMikoKHU2NCkoX2FkZHIpICYgMHgwMDAwMDAwMEZGRkZGRkZGKQorI2RlZmluZSAgIFNYR19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikoKCh1NjQpKF9hZGRyKSA+PiAzMikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCisjZWxzZQorI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAgKHUzMilfYWRkcgorI2RlZmluZSAgIFNYR19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCisjZW5kaWYKKworI2RlZmluZSBGTFVTSCAgICAgICBUUlVFCisjZGVmaW5lIERPTlRfRkxVU0ggIEZBTFNFCisKKyNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIFNJT0NERVZQUklWQVRFKzkKKyNkZWZpbmUgU0lPQ1NMSUNTRVRJTlRBR0cgICAgICAgIFNJT0NERVZQUklWQVRFKzEwCisjZGVmaW5lIFNJT0NTTElDVFJBQ0VEVU1QICAgICAgICBTSU9DREVWUFJJVkFURSsxMQorCisjZW5kaWYgLyogIF9fU1hHX0RSSVZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMTgyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc3hnX29zLmgKKyAqCisgKiBUaGVzZSBhcmUgdGhlIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zIHJlcXVpcmVkIGZvciB0aGUgU0xJQ09TUworICogZHJpdmVyLCB3aGljaCBzaG91bGQgYWxsb3cgZm9yIGdyZWF0ZXIgcG9ydGFiaWxpdHkgdG8gb3RoZXIgT1Nlcy4KKyAqLworI2lmbmRlZiBfU0xJQ19PU19TUEVDSUZJQ19IXworI2RlZmluZSBfU0xJQ19PU19TUEVDSUZJQ19IXworCisjZGVmaW5lIEZBTFNFCSgwKQorI2RlZmluZSBUUlVFCSgxKQorCit0eXBlZGVmIHN0cnVjdCBfTElTVF9FTlRSWSB7CisJc3RydWN0IF9MSVNUX0VOVFJZICpubGVfZmxpbms7CisJc3RydWN0IF9MSVNUX0VOVFJZICpubGVfYmxpbms7Cit9IGxpc3RfZW50cnksIExJU1RfRU5UUlksICpQTElTVF9FTlRSWTsKKworI2RlZmluZSBJbml0aWFsaXplTGlzdEhlYWQobCkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobCktPm5sZV9mbGluayA9IChsKS0+bmxlX2JsaW5rID0gKGwpCisKKyNkZWZpbmUgSXNMaXN0RW1wdHkoaCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKChoKS0+bmxlX2ZsaW5rID09IChoKSkKKworI2RlZmluZSBSZW1vdmVFbnRyeUxpc3QoZSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpiOyAgICAgXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYgPSAoZSktPm5sZV9mbGluazsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGIgPSAoZSktPm5sZV9ibGluazsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisvKiBUaGVzZSB0d28gaGF2ZSB0byBiZSBpbmxpbmVkIHNpbmNlIHRoZXkgcmV0dXJuIHRoaW5ncy4gKi8KKworc3RhdGljIF9faW5saW5lIFBMSVNUX0VOVFJZIFJlbW92ZUhlYWRMaXN0KGxpc3RfZW50cnkgKiBsKQoreworCWxpc3RfZW50cnkgKmY7CisJbGlzdF9lbnRyeSAqZTsKKworCWUgPSBsLT5ubGVfZmxpbms7CisJZiA9IGUtPm5sZV9mbGluazsKKwlsLT5ubGVfZmxpbmsgPSBmOworCWYtPm5sZV9ibGluayA9IGw7CisKKwlyZXR1cm4gKGUpOworfQorCitzdGF0aWMgX19pbmxpbmUgUExJU1RfRU5UUlkgUmVtb3ZlVGFpbExpc3QobGlzdF9lbnRyeSAqIGwpCit7CisJbGlzdF9lbnRyeSAqYjsKKwlsaXN0X2VudHJ5ICplOworCisJZSA9IGwtPm5sZV9ibGluazsKKwliID0gZS0+bmxlX2JsaW5rOworCWwtPm5sZV9ibGluayA9IGI7CisJYi0+bmxlX2ZsaW5rID0gbDsKKworCXJldHVybiAoZSk7Cit9CisKKyNkZWZpbmUgSW5zZXJ0VGFpbExpc3QobCwgZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqYjsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiID0gKGwpLT5ubGVfYmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9mbGluayA9IChsKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiLT5ubGVfZmxpbmsgPSAoZSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAobCktPm5sZV9ibGluayA9IChlKTsgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJbnNlcnRIZWFkTGlzdChsLCBlKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYgPSAobCktPm5sZV9mbGluazsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2ZsaW5rID0gZjsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2JsaW5rID0gbDsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IChlKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChsKS0+bmxlX2ZsaW5rID0gKGUpOyAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFUS19ERUJVRyAgMQorCisjaWYgQVRLX0RFQlVHCisjZGVmaW5lIFNMSUNfVElNRVNUQU1QKHZhbHVlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHZhbHVlID0gdGltZXYudHZfc2VjKjEwMDAwMDAgKyB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2Vsc2UKKyNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKiAgU1hHIERFRklORVMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgIEFUS0RCRworI2RlZmluZSBTWEdfVElNRVNUQU1QKHZhbHVlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHZhbHVlID0gdGltZXYudHZfc2VjKjEwMDAwMDAgKyB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2Vsc2UKKyNkZWZpbmUgU1hHX1RJTUVTVEFNUCh2YWx1ZSkKKyNlbmRpZgorCisjZGVmaW5lIFdSSVRFX1JFRyhyZWcsdmFsdWUsZmx1c2gpICAgICAgICAgICAgICAgICAgc3hnX3JlZzMyX3dyaXRlKCgmcmVnKSwgKHZhbHVlKSwgKGZsdXNoKSkKKyNkZWZpbmUgV1JJVEVfUkVHNjQoYSxyZWcsdmFsdWUsY3B1KSAgICAgICAgICAgICAgICBzeGdfcmVnNjRfd3JpdGUoKGEpLCgmcmVnKSwodmFsdWUpLChjcHUpKQorI2RlZmluZSBSRUFEX1JFRyhyZWcsdmFsdWUpICAgKHZhbHVlKSA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKikoJnJlZykpCisKKyNlbmRpZiAvKiBfU0xJQ19PU19TUEVDSUZJQ19IXyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnZGJnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oCkBAIC0wLDAgKzEsMTkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDAwLTIwMDggQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAkSWQ6IHN4Z2RiZy5oLHYgMS4xIDIwMDgvMDYvMjcgMTI6NDk6MjggbW9vayBFeHAgJAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc3hnZGJnLmgKKyAqCisgKiBBbGwgZGVidWcgYW5kIGFzc2VydGlvbi1iYXNlZCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGFyZSBpbmNsdWRlZAorICogaW4gdGhpcyBmaWxlIGZvciB0aGUgU1hHT1NTIGRyaXZlci4KKyAqLworI2lmbmRlZiBfU1hHX0RFQlVHX0hfCisjZGVmaW5lIF9TWEdfREVCVUdfSF8KKworI2RlZmluZSBBVEtEQkcgIDEKKyNkZWZpbmUgQVRLX1RSQUNFX0VOQUJMRUQgMQorCisjZGVmaW5lIERCR19FUlJPUihuLCBhcmdzLi4uKQlwcmludGsoS0VSTl9FTUVSRyBuLCAjI2FyZ3MpCisKKyNpZmRlZiBBU1NFUlQKKyN1bmRlZiBBU1NFUlQKKyNlbmRpZgorCisjaWZkZWYgU1hHX0FTU0VSVF9FTkFCTEVECisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgREJHX0VSUk9SKCJBU1NFUlQoKSBGYWlsdXJlOiBmaWxlICVzLCBmdW5jdGlvbiAlcyAgbGluZSAlZFxuIixcCisgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNlbmRpZgorI2Vsc2UKKyNpZm5kZWYgQVNTRVJUCisjZGVmaW5lIEFTU0VSVChhKQorI2VuZGlmCisjZW5kaWYgLyogU1hHX0FTU0VSVF9FTkFCTEVEICAqLworCisKKyNpZmRlZiBBVEtEQkcKKy8qCisgKiAgR2xvYmFsIGZvciB0aW1lciBncmFudWxhcml0eTsgZXZlcnkgZHJpdmVyIG11c3QgaGF2ZSBhbiBpbnN0YW5jZQorICogIG9mIHRoaXMgaW5pdGlhbGl6ZWQgdG8gMAorICovCisKK2V4dGVybiB1bG9uZyBBVEtUaW1lckRpdjsKKworLyoKKyAqIHRyYWNlX2VudHJ5X3QgLQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYW4gZW50cnkgaW4gdGhlIHRyYWNlIGJ1ZmZlci4gIFRoZQorICogZmlyc3QgZmV3IGZpZWxkcyBtZWFuIHRoZSBzYW1lIGZyb20gZW50cnkgdG8gZW50cnksIHdoaWxlCisgKiB0aGUgbWVhbmluZyBvZiBsYXN0IHNldmVyYWwgZmllbGRzIGNoYW5nZSB0byBzdWl0IHRoZQorICogbmVlZHMgb2YgdGhlIHRyYWNlIGVudHJ5LiAgVHlwaWNhbGx5IHRoZXkgYXJlIGZ1bmN0aW9uIGNhbGwKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IF90cmFjZV9lbnRyeV9zIHsKKyAgICAgICAgY2hhciAgICAgIG5hbWVbOF07ICAgICAgICAvKiA4IGNoYXJhY3RlciBuYW1lIC0gbGlrZSAncydpJ20nYidhJ3InYyd2JyAqLworICAgICAgICB1MzIgICB0aW1lOyAgICAgICAgICAgLyogQ3VycmVudCBjbG9jayB0aWMgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgY3B1OyAgICAgICAgICAgIC8qIEN1cnJlbnQgQ1BVICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgIGlycWw7ICAgICAgICAgICAvKiBDdXJyZW50IElSUUwgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgZHJpdmVyOyAgICAgICAgIC8qIFRoZSBkcml2ZXIgd2hpY2ggYWRkZWQgdGhlIHRyYWNlIGNhbGwgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgcGFkMjsgICAgICAgICAgIC8qIHBhZCB0byA0IGJ5dGUgYm91bmRhcnkgLSB3aWxsIHByb2JhYmx5IGdldCB1c2VkICovCisgICAgICAgIHUzMiAgIGFyZzE7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMSAqLworICAgICAgICB1MzIgICBhcmcyOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzIgKi8KKyAgICAgICAgdTMyICAgYXJnMzsgICAgICAgICAgIC8qIENhbGxlciBhcmczICovCisgICAgICAgIHUzMiAgIGFyZzQ7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnNCAqLworfSB0cmFjZV9lbnRyeV90LCAqcHRyYWNlX2VudHJ5X3Q7CisKKy8qCisgKiBEcml2ZXIgdHlwZXMgZm9yIGRyaXZlciBmaWVsZCBpbiB0cmFjZV9lbnRyeV90CisgKi8KKyNkZWZpbmUgVFJBQ0VfU1hHICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJBQ0VfVlBDSSAgICAgICAgICAgIDIKKyNkZWZpbmUgVFJBQ0VfU0xJQyAgICAgICAgICAgIDMKKworI2RlZmluZSBUUkFDRV9FTlRSSUVTICAgMTAyNAorCit0eXBlZGVmIHN0cnVjdCBfc3hnX3RyYWNlX2J1ZmZlcl90Cit7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAgICAvKiBhaWQgZm9yIHdpbmRiZyBleHRlbnNpb24gKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBpbjsgICAgICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRvIGFkZCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIGxldmVsOyAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBUcmFjZSBsZXZlbCAqLworCXNwaW5sb2NrX3QJbG9jazsgICAgICAgICAgICAgICAgICAvKiBGb3IgTVAgdHJhY2luZyAqLworICAgICAgICB0cmFjZV9lbnRyeV90ICAgICAgICAgICBlbnRyaWVzW1RSQUNFX0VOVFJJRVNdOy8qIFRoZSBjaXJjdWxhciBidWZmZXIgKi8KK30gc3hnX3RyYWNlX2J1ZmZlcl90OworCisvKgorICogVGhlIHRyYWNlIGxldmVscworICoKKyAqIFhYWCBBdCB0aGUgbW9tZW50IEkgYW0gb25seSBkZWZpbmluZyBjcml0aWNhbCwgaW1wb3J0YW50LCBhbmQgbm9pc3kuCisgKiBJIGFtIGxlYXZpbmcgcm9vbSBmb3IgbW9yZSBpZiBhbnlvbmUgd2FudHMgdGhlbS4KKyAqLworI2RlZmluZSBUUkFDRV9OT05FICAgICAgICAgICAgICAwICAgLyogRm9yIHRyYWNlIGxldmVsIC0gaWYgbm8gdHJhY2luZyB3YW50ZWQgKi8KKyNkZWZpbmUgVFJBQ0VfQ1JJVElDQUwgICAgICAgICAgMSAgIC8qIG1pbmltYWwgdHJhY2luZyAtIG9ubHkgY3JpdGljYWwgc3R1ZmYgKi8KKyNkZWZpbmUgVFJBQ0VfSU1QT1JUQU5UICAgICAgICAgNSAgIC8qIG1vcmUgdHJhY2luZyAtIGFueXRoaW5nIGltcG9ydGFudCAqLworI2RlZmluZSBUUkFDRV9OT0lTWSAgICAgICAgICAgICAxMCAgLyogRXZlcnl0aGluZyBpbiB0aGUgd29ybGQgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoZSBtYWNyb3MgdGhlbXNlbHZlcyAtCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBBVEtfVFJBQ0VfRU5BQkxFRAorI2RlZmluZSBTWEdfVFJBQ0VfSU5JVChidWZmZXIsIHRsZXZlbCkJCQkJXAorewkJCQkJCQkJXAorCW1lbXNldCgoYnVmZmVyKSwgMCwgc2l6ZW9mKHN4Z190cmFjZV9idWZmZXJfdCkpOwlcCisJKGJ1ZmZlciktPmxldmVsID0gKHRsZXZlbCk7CQkJCVwKKwkoYnVmZmVyKS0+c2l6ZSA9IFRSQUNFX0VOVFJJRVM7CQkJCVwKKwlzcGluX2xvY2tfaW5pdCgmKGJ1ZmZlciktPmxvY2spOwkJCVwKK30KKyNlbHNlCisjZGVmaW5lIFNYR19UUkFDRV9JTklUKGJ1ZmZlciwgdGxldmVsKQorI2VuZGlmCisKKy8qCisgKiBUaGUgdHJhY2UgbWFjcm8uICBUaGlzIGlzIGFjdGl2ZSBvbmx5IGlmIEFUS19UUkFDRV9FTkFCTEVEIGlzIHNldC4KKyAqLworI2lmIEFUS19UUkFDRV9FTkFCTEVECisjZGVmaW5lIFNYR19UUkFDRSh0ZHJpdmVyLCBidWZmZXIsIHRsZXZlbCwgdG5hbWUsIGExLCBhMiwgYTMsIGE0KSB7ICAgICAgICBcCisgICAgICAgIGlmICgoYnVmZmVyKSAmJiAoKGJ1ZmZlciktPmxldmVsID49ICh0bGV2ZWwpKSkgeyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHJhY2VfaXJxbCA9IDA7ICAgIC8qID8/Pz8/PyBGSVggVEhJUyAgKi8gICAgXAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHRyYWNlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwdHJhY2VfZW50cnlfdCAgdHJhY2VfZW50cnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzcGluX2xvY2soJihidWZmZXIpLT5sb2NrKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeSA9ICYoYnVmZmVyKS0+ZW50cmllc1soYnVmZmVyKS0+aW5dOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBtZW1zZXQodHJhY2VfZW50cnktPm5hbWUsIDAsIDgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2xlbiA9IHN0cmxlbih0bmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfbGVuID0gdHJhY2VfbGVuID4gOCA/IDggOiB0cmFjZV9sZW47ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBtZW1jcHkodHJhY2VfZW50cnktPm5hbWUsICh0bmFtZSksIHRyYWNlX2xlbik7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT50aW1lID0gdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmNwdSA9ICh1bnNpZ25lZCBjaGFyKShzbXBfcHJvY2Vzc29yX2lkKCkgJiAweEZGKTsgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5kcml2ZXIgPSAodGRyaXZlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmlycWwgPSB0cmFjZV9pcnFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMSA9ICh1bG9uZykoYTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcyID0gKHVsb25nKShhMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzMgPSAodWxvbmcpKGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnNCA9ICh1bG9uZykoYTQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKGJ1ZmZlciktPmluKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoKGJ1ZmZlciktPmluID09IFRSQUNFX0VOVFJJRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlciktPmluID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmKGJ1ZmZlciktPmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZWxzZQorI2RlZmluZSBTWEdfVFJBQ0UodGRyaXZlciwgYnVmZmVyLCB0bGV2ZWwsIHRuYW1lLCBhMSwgYTIsIGEzLCBhNCkKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmICAvKiAgX1NYR19ERUJVR19IXyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2hpZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YmZmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2hpZi5oCkBAIC0wLDAgKzEsODU3IEBACisvKgorICogQ29weXJpZ2h0IKkgMTk5Ny0yMDA3IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqICRJZDogc3hnaGlmLmgsdiAxLjUgMjAwOC8wNy8yNCAxOToxODoyMiBjaHJpcyBFeHAgJAorICoKKyAqIHN4Z2hpZi5oOgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlCisgKiBBbGFjcml0ZWNoIFNhaGFyYSBob3N0IGludGVyZmFjZQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVQ09ERSBSZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgX1NYR19VQ09ERV9SRUdTIHsKKwkvLyBBZGRyZXNzIDAgLSAweDNGID0gQ29tbWFuZCBjb2RlcyAwLTE1IGZvciBUQ0IgMC4gIEV4Y29kZSAwCisJdTMyIEljcjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDAgLSBJbnQgY29udHJvbAorCXUzMiBSc3ZkUmVnMTsJCS8vIENvZGUgPSAxIC0gVE9FIC1OQQorCXUzMiBSc3ZkUmVnMjsJCS8vIENvZGUgPSAyIC0gVE9FIC1OQQorCXUzMiBSc3ZkUmVnMzsJCS8vIENvZGUgPSAzIC0gVE9FIC1OQQorCXUzMiBSc3ZkUmVnNDsJCS8vIENvZGUgPSA0IC0gVE9FIC1OQQorCXUzMiBSc3ZkUmVnNTsJCS8vIENvZGUgPSA1IC0gVE9FIC1OQQorCXUzMiBDYXJkVXA7CQkvLyBDb2RlID0gNiAtIE1pY3JvY29kZSBpbml0aWFsaXplZCB3aGVuIDEKKwl1MzIgUnN2ZFJlZzc7CQkvLyBDb2RlID0gNyAtIFRPRSAtTkEKKwl1MzIgQ29kZU5vdFVzZWRbOF07CS8vIENvZGVzIDgtMTUgbm90IHVzZWQuICBFeENvZGUgPSAwCisJLy8gVGhpcyBicmluZ3MgdXMgdG8gRXhDb2RlIDEgYXQgYWRkcmVzcyAweDQwID0gSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyCisJdTMyIElzcDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEKKwl1MzIgUGFkRXgxWzE1XTsJCS8vIENvZGVzIDEtMTUgbm90IHVzZWQgd2l0aCBleHRlbmRlZCBjb2RlcworCS8vIEV4Q29kZSAyID0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorCXUzMiBJc3I7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyCisJdTMyIFBhZEV4MlsxNV07CisJLy8gRXhDb2RlIDMgPSBFdmVudCBiYXNlIHJlZ2lzdGVyLiAgTG9jYXRpb24gb2YgZXZlbnQgcmluZ3MKKwl1MzIgRXZlbnRCYXNlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMworCXUzMiBQYWRFeDNbMTVdOworCS8vIEV4Q29kZSA0ID0gRXZlbnQgcmluZyBzaXplCisJdTMyIEV2ZW50U2l6ZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDQKKwl1MzIgUGFkRXg0WzE1XTsKKwkvLyBFeENvZGUgNSA9IFRDQiBCdWZmZXJzIGJhc2UgYWRkcmVzcworCXUzMiBUY2JCYXNlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNQorCXUzMiBQYWRFeDVbMTVdOworCS8vIEV4Q29kZSA2ID0gVENCIENvbXBvc2l0ZSBCdWZmZXJzIGJhc2UgYWRkcmVzcworCXUzMiBUY2JDb21wQmFzZTsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNgorCXUzMiBQYWRFeDZbMTVdOworCS8vIEV4Q29kZSA3ID0gVHJhbnNtaXQgcmluZyBiYXNlIGFkZHJlc3MKKwl1MzIgWG10QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDcKKwl1MzIgUGFkRXg3WzE1XTsKKwkvLyBFeENvZGUgOCA9IFRyYW5zbWl0IHJpbmcgc2l6ZQorCXUzMiBYbXRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOAorCXUzMiBQYWRFeDhbMTVdOworCS8vIEV4Q29kZSA5ID0gUmVjZWl2ZSByaW5nIGJhc2UgYWRkcmVzcworCXUzMiBSY3ZCYXNlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOQorCXUzMiBQYWRFeDlbMTVdOworCS8vIEV4Q29kZSAxMCA9IFJlY2VpdmUgcmluZyBzaXplCisJdTMyIFJjdlNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMAorCXUzMiBQYWRFeDEwWzE1XTsKKwkvLyBFeENvZGUgMTEgPSBSZWFkIEVFUFJPTSBDb25maWcKKwl1MzIgQ29uZmlnOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTEKKwl1MzIgUGFkRXgxMVsxNV07CisJLy8gRXhDb2RlIDEyID0gTXVsdGljYXN0IGJpdHMgMzE6MAorCXUzMiBNY2FzdExvdzsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEyCisJdTMyIFBhZEV4MTJbMTVdOworCS8vIEV4Q29kZSAxMyA9IE11bHRpY2FzdCBiaXRzIDYzOjMyCisJdTMyIE1jYXN0SGlnaDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEzCisJdTMyIFBhZEV4MTNbMTVdOworCS8vIEV4Q29kZSAxNCA9IFBpbmcKKwl1MzIgUGluZzsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE0CisJdTMyIFBhZEV4MTRbMTVdOworCS8vIEV4Q29kZSAxNSA9IExpbmsgTVRVCisJdTMyIExpbmtNdHU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNQorCXUzMiBQYWRFeDE1WzE1XTsKKwkvLyBFeENvZGUgMTYgPSBEb3dubG9hZCBzeW5jaHJvbml6YXRpb24KKwl1MzIgTG9hZFN5bmM7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNgorCXUzMiBQYWRFeDE2WzE1XTsKKwkvLyBFeENvZGUgMTcgPSBVcHBlciBEUkFNIGFkZHJlc3MgYml0cyBvbiAzMi1iaXQgc3lzdGVtcworCXUzMiBVcHBlcjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE3CisJdTMyIFBhZEV4MTdbMTVdOworCS8vIEV4Q29kZSAxOCA9IFNsb3dwYXRoIFNlbmQgSW5kZXggQWRkcmVzcworCXUzMiBTUFNlbmRJbmRleDsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTgKKwl1MzIgUGFkRXgxOFsxNV07CisJdTMyIFJzdmRYRjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE5CisJdTMyIFBhZEV4MTlbMTVdOworCS8vIEV4Q29kZSAyMCA9IEFnZ3JlZ2F0aW9uCisJdTMyIEFnZ3JlZ2F0aW9uOwkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMAorCXUzMiBQYWRFeDIwWzE1XTsKKwkvLyBFeENvZGUgMjEgPSBSZWNlaXZlIE1ETCBwdXNoIHRpbWVyCisJdTMyIFB1c2hUaWNrczsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIxCisJdTMyIFBhZEV4MjFbMTVdOworCS8vIEV4Q29kZSAyMiA9IFRPRSBOQQorCXUzMiBBY2tGcmVxdWVuY3k7CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIyCisJdTMyIFBhZEV4MjJbMTVdOworCS8vIEV4Q29kZSAyMyA9IFRPRSBOQQorCXUzMiBSc3ZkUmVnMjM7CisJdTMyIFBhZEV4MjNbMTVdOworCS8vIEV4Q29kZSAyNCA9IFRPRSBOQQorCXUzMiBSc3ZkUmVnMjQ7CisJdTMyIFBhZEV4MjRbMTVdOworCS8vIEV4Q29kZSAyNSA9IFRPRSBOQQorCXUzMiBSc3ZkUmVnMjU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyNQorCXUzMiBQYWRFeDI1WzE1XTsKKwkvLyBFeENvZGUgMjYgPSBSZWNlaXZlIGNoZWNrc3VtIHJlcXVpcmVtZW50cworCXUzMiBSZWNlaXZlQ2hlY2tzdW07CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI2CisJdTMyIFBhZEV4MjZbMTVdOworCS8vIEV4Q29kZSAyNyA9IFJTUyBSZXF1aXJlbWVudHMKKwl1MzIgUnNzOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjcKKwl1MzIgUGFkRXgyN1sxNV07CisJLy8gRXhDb2RlIDI4ID0gUlNTIFRhYmxlCisJdTMyIFJzc1RhYmxlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjgKKwl1MzIgUGFkRXgyOFsxNV07CisJLy8gRXhDb2RlIDI5ID0gRXZlbnQgcmluZyByZWxlYXNlIGVudHJpZXMKKwl1MzIgRXZlbnRSZWxlYXNlOwkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOQorCXUzMiBQYWRFeDI5WzE1XTsKKwkvLyBFeENvZGUgMzAgPSBOdW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJsaXN0IGNvbW1hbmRzIG9uIHJpbmcgMAorCXUzMiBSY3ZDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMAorCXUzMiBQYWRFeDMwWzE1XTsKKwkvLyBFeENvZGUgMzEgPSBzbG93cGF0aCB0cmFuc21pdCBjb21tYW5kIC0gRGF0YVszMTowXSA9IDEKKwl1MzIgWG10Q21kOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzEKKwl1MzIgUGFkRXgzMVsxNV07CisJLy8gRXhDb2RlIDMyID0gRHVtcCBjb21tYW5kCisJdTMyIER1bXBDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMgorCXUzMiBQYWRFeDMyWzE1XTsKKwkvLyBFeENvZGUgMzMgPSBEZWJ1ZyBjb21tYW5kCisJdTMyIERlYnVnQ21kOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzMKKwl1MzIgUGFkRXgzM1sxNV07CisJLy8gVGhlcmUgYXJlIDEyOCBwb3NzaWJsZSBleHRlbmRlZCBjb21tYW5kcyAtIGVhY2ggb2YgYWNjb3VudCBmb3IgMTYKKwkvLyB3b3JkcyAoaW5jbHVkaW5nIHRoZSBub24tcmVsZXZlbnQgYmFzZSBjb21tYW5kIGNvZGVzIDEtMTUpLgorCS8vIFBhZCBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGVzZSBoZXJlIHRvIGJyaW5nIHVzIHRvIHRoZSBuZXh0IENQVQorCS8vIGJhc2UuICBBcyBleHRlbmRlZCBjb2RlcyBhcmUgYWRkZWQsIHJlZHVjZSB0aGUgZmlyc3QgYXJyYXkgdmFsdWUgaW4KKwkvLyB0aGUgZm9sbG93aW5nIGZpZWxkCisJdTMyIFBhZFRvTmV4dENwdVs5NF1bMTZdOwkvLyA5NCA9IDEyOCAtIDM0ICgzNCA9IEV4Y29kZXMgMCAtIDMzKQorfSBTWEdfVUNPREVfUkVHUywgKlBTWEdfVUNPREVfUkVHUzsKKworLy8gSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKDApIHZhbHVlcworI2RlZmluZSBTWEdfSUNSX0RJU0FCTEUJCQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1hHX0lDUl9FTkFCTEUJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1hHX0lDUl9NQVNLCQkJCQkweDAwMDAwMDAyCisjZGVmaW5lIFNYR19JQ1JfTVNHSURfTUFTSwkJCQkweEZGRkYwMDAwCisjZGVmaW5lIFNYR19JQ1JfTVNHSURfU0hJRlQJCQkxNgorI2RlZmluZSBTWEdfSUNSKF9NZXNzYWdlSWQsIF9EYXRhKQlcCisJKCgoKF9NZXNzYWdlSWQpIDw8IFNYR19JQ1JfTVNHSURfU0hJRlQpICYJXAorCSAgU1hHX0lDUl9NU0dJRF9NQVNLKSB8IChfRGF0YSkpCisKKy8vIFRoZSBNaWNyb2NvZGUgc3VwcG9ydHMgdXAgdG8gMTYgUlNTIHF1ZXVlcworI2RlZmluZSBTWEdfTUFYX1JTUwkJCQkxNgorI2RlZmluZSBTWEdfTUFYX1JTU19UQUJMRV9TSVpFCTI1NgkvLyAyNTYtYnl0ZSBtYXgKKworI2RlZmluZSBTWEdfUlNTX1RDUDYJCQkJMHgwMDAwMDAwMQkvLyBSU1MgVENQIG92ZXIgSVB2NgorI2RlZmluZSBTWEdfUlNTX1RDUDQJCQkJMHgwMDAwMDAwMgkvLyBSU1MgVENQIG92ZXIgSVB2NAorI2RlZmluZSBTWEdfUlNTX0xFR0FDWQkJCQkweDAwMDAwMDA0CS8vIExpbmUtYmFzZSBpbnRlcnJ1cHRzCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0laRQkJCTB4MDAwMEZGMDAJLy8gVGFibGUgc2l6ZSBtYXNrCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0hJRlQJCQk4CisjZGVmaW5lCVNYR19SU1NfQkFTRV9DUFUJCQkweDAwRkYwMDAwCS8vIEJhc2UgQ1BVIChub3QgdXNlZCkKKyNkZWZpbmUgU1hHX1JTU19CQVNFX1NISUZUCQkJMTYKKworI2RlZmluZSBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRAkJMHgwMDAwMDAwMQkvLyBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkKKyNkZWZpbmUgU1hHX1JDVl9UQ1BfQ1NVTV9FTkFCTEVECTB4MDAwMDAwMDIJLy8gRXhDb2RlIDI2IChSZWNlaXZlQ2hlY2tzdW0pCisKKyNkZWZpbmUgU1hHX1hNVF9DUFVJRF9TSElGVAkJCTE2CisKKyNpZiBWUENJCisjZGVmaW5lIFNYR19DSEVDS19GT1JfSEFOR19USU1FCQkzMDAwCisjZWxzZQorI2RlZmluZSBTWEdfQ0hFQ0tfRk9SX0hBTkdfVElNRQkJNQorI2VuZGlmCisKKy8qCisgKiBUQ0IgcmVnaXN0ZXJzIC0gVGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgcmVnaXN0ZXIgbWVtb3J5IGFyZWEgYXMgVUNPREVfUkVHUworICogYWJvdmUsIGJ1dCBkZWZpbmVkIGRpZmZlcmVudGx5LiAgQml0cyAxNzowNiBvZiB0aGUgYWRkcmVzcyBkZWZpbmUgdGhlIFRDQiwKKyAqIHdoaWNoIG1lYW5zIGVhY2ggVENCIGFyZWEgb2NjdXBpZXMgMHg0MCAoNjQpIGJ5dGVzLCBvciAxNiB1MzJTLiAgV2hhdCByZWFsbHkKKyAqIGlzIGhhcHBlbmluZyBpcyB0aGF0IHRoZXNlIHJlZ2lzdGVycyBvY2N1cHkgdGhlICJQYWRFeFsxNV0iIGFyZWFzIGluIHRoZQorICogU1hHX1VDT0RFX1JFR1MgZGVmaW5pdGlvbiBhYm92ZQorICovCit0eXBlZGVmIHN0cnVjdCBfU1hHX1RDQl9SRUdTIHsKKwl1MzIgRXhDb2RlOwkJLyogRXh0ZW5kZWQgY29kZXMgLSBzZWUgU1hHX1VDT0RFX1JFR1MgKi8KKwl1MzIgWG10OwkJLyogQ29kZSA9IDEgLSAjIG9mIFhtdCBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCisJdTMyIFJjdjsJCS8qIENvZGUgPSAyIC0gIyBvZiBSY3YgZGVzY3JpcHRvcnMgYWRkZWQgdG8gcmluZyAqLworCXUzMiBSc3ZkMTsJCS8qIENvZGUgPSAzIC0gVE9FIE5BICovCisJdTMyIFJzdmQyOwkJLyogQ29kZSA9IDQgLSBUT0UgTkEgKi8KKwl1MzIgUnN2ZDM7CQkvKiBDb2RlID0gNSAtIFRPRSBOQSAqLworCXUzMiBJbnZhbGlkOwkJLyogQ29kZSA9IDYgLSBSZXNlcnZlZCBmb3IgIkNhcmRVcCIgc2VlIGFib3ZlICovCisJdTMyIFJzdmQ0OwkJLyogQ29kZSA9IDcgLSBUT0UgTkEgKi8KKwl1MzIgUnN2ZDU7CQkvKiBDb2RlID0gOCAtIFRPRSBOQSAqLworCXUzMiBQYWRbN107CQkvKiBDb2RlcyA4LTE1IC0gTm90IHVzZWQuICovCit9IFNYR19UQ0JfUkVHUywgKlBTWEdfVENCX1JFR1M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElTUiBGb3JtYXQKKyAqICAgICAgICAgICAgICAgIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgKiAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiAgICAgICAgICAgICAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfAorICogICAgICAgICAgICAgICAgfF9fX198X19fX3xfX19ffF9fX198X19fX3xfX19ffF9fX198X19fX3wKKyAqICAgICAgICAgICAgICAgICBeXl5eIF5eXl4gXl5eXiBeXl5eIFwgICAgICAgICAgICAgICAgIC8KKyAqICAgICAgICAgICBFUlIgLS18fHx8IHx8fHwgfHx8fCB8fHx8ICAtLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICBFVkVOVCAtLS18fHwgfHx8fCB8fHx8IHx8fHwgICAgICAgICAgfAorICogICAgICAgICAgICAgICAtLS0tfHwgfHx8fCB8fHx8IHx8fHwgICAgICAgICAgfC0tIENyYXNoIEFkZHJlc3MKKyAqICAgICAgICAgICBVUEMgLS0tLS18IHx8fHwgfHx8fCB8fHx8CisgKiAgICAgICAgTEVWRU5UIC0tLS0tLS18fHx8IHx8fHwgfHx8fAorICogICAgICAgICAgUERRRiAtLS0tLS0tLXx8fCB8fHx8IHx8fHwKKyAqICAgICAgICAgUk1JU1MgLS0tLS0tLS0tfHwgfHx8fCB8fHx8CisgKiAgICAgICAgIEJSRUFLIC0tLS0tLS0tLS18IHx8fHwgfHx8fAorICogICAgICAgSEJFQVRPSyAtLS0tLS0tLS0tLS18fHx8IHx8fHwKKyAqICAgICAgIE5PSEJFQVQgLS0tLS0tLS0tLS0tLXx8fCB8fHx8CisgKiAgICAgICAgRVJGVUxMIC0tLS0tLS0tLS0tLS0tfHwgfHx8fAorICogICAgICAgICBYRFJPUCAtLS0tLS0tLS0tLS0tLS18IHx8fHwKKyAqICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS18fHx8CisgKiAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tfHx8fC0tXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fC0tLXwtQ3B1SWQgb2YgY3Jhc2gKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0vCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfSVNSX0VSUgkJMHg4MDAwMDAwMAkvLyBFcnJvcgorI2RlZmluZSBTWEdfSVNSX0VWRU5UCQkweDQwMDAwMDAwCS8vIEV2ZW50IHJpbmcgZXZlbnQKKyNkZWZpbmUgU1hHX0lTUl9OT05FMQkJMHgyMDAwMDAwMAkvLyBOb3QgdXNlZAorI2RlZmluZSBTWEdfSVNSX1VQQwkJMHgxMDAwMDAwMAkvLyBEdW1wL2RlYnVnIGNvbW1hbmQgY29tcGxldGUKKyNkZWZpbmUgU1hHX0lTUl9MSU5LCQkweDA4MDAwMDAwCS8vIExpbmsgZXZlbnQKKyNkZWZpbmUgU1hHX0lTUl9QRFFGCQkweDA0MDAwMDAwCS8vIFByb2Nlc3NlZCBkYXRhIHF1ZXVlIGZ1bGwKKyNkZWZpbmUgU1hHX0lTUl9STUlTUwkJMHgwMjAwMDAwMAkvLyBEcm9wIC0gbm8gaG9zdCBidWYKKyNkZWZpbmUgU1hHX0lTUl9CUkVBSwkJMHgwMTAwMDAwMAkvLyBCcmVha3BvaW50IGhpdAorI2RlZmluZSBTWEdfSVNSX1BJTkcJCTB4MDA4MDAwMDAJLy8gSGVhcnRiZWF0IHJlc3BvbnNlCisjZGVmaW5lIFNYR19JU1JfREVBRAkJMHgwMDQwMDAwMAkvLyBDYXJkIGNyYXNoCisjZGVmaW5lIFNYR19JU1JfRVJGVUxMCQkweDAwMjAwMDAwCS8vIEV2ZW50IHJpbmcgZnVsbAorI2RlZmluZSBTWEdfSVNSX1hEUk9QCQkweDAwMTAwMDAwCS8vIFhNVCBEcm9wIC0gbm8gRFJBTSBidWZzIG9yIFhNVCBlcnIKKyNkZWZpbmUgU1hHX0lTUl9TUFNFTkQJCTB4MDAwODAwMDAJLy8gU2xvdyBzZW5kIGNvbXBsZXRlCisjZGVmaW5lIFNYR19JU1JfQ1BVCQkweDAwMDcwMDAwCS8vIERlYWQgQ1BVIG1hc2sKKyNkZWZpbmUgU1hHX0lTUl9DUFVfU0hJRlQJCTE2CS8vIERlYWQgQ1BVIHNoaWZ0CisjZGVmaW5lIFNYR19JU1JfQ1JBU0gJCTB4MDAwMEZGRkYJLy8gQ3Jhc2ggYWRkcmVzcyBtYXNrCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFdmVudCBSaW5nIGVudHJ5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgMzEgICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMAorICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX19fX18uCisgKiAgfDwtLS0tLS0tLS0tLS0gICAgUGFkIDAgICAgLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDAJCTB4MDAKKyAqICB8PC0tLS0tLS0tLS0tLSAgICBQYWQgMSAgICAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198NAkJMHgwNAorICogIHw8LS0tLS0tLS0tLS0tICAgIFBhZCAyICAgIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3w4IAkJMHgwOAorICogIHw8LS0tLS0tLS0tLS0gRXZlbnQgV29yZCAwIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxMgkJMHgwYworICogIHw8LS0tLS0tLS0tLS0gRXZlbnQgV29yZCAxIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxNgkJMHgxMAorICogIHw8LS0tLS0tLS0tLS0tLSBUb2VwbGl0eiAgIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyMAkJMHgxNAorICogIHw8LS0tLS0gTGVuZ3RoIC0tLS0+fDwtLS0tLS0gVENCIElkIC0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyNAkJMHgxOAorICogIHw8LS0tLS0gU3RhdHVzIC0tLS0+fEV2bnQgQ29kZXxGbHNoIENvZGV8CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYworICogICBeICAgICAgICAgICAgICAgICAgIF5eXl4gXl5eXgorICogICB8LSBWQUxJRCAgICAgICAgICAgIHx8fHwgfHx8fC0gUkJVRkMKKyAqICAgICAgICAgICAgICAgICAgICAgICB8fHx8IHx8fC0tIFNMT1dSCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fCB8fC0tLSBVTlVTRUQKKyAqICAgICAgICAgICAgICAgICAgICAgICB8fHx8IHwtLS0tIEZBU1RDCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fC0tLS0tLSBGQVNUUgorICogICAgICAgICAgICAgICAgICAgICAgIHx8fC0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICB8fC0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLQorICoKKyAqIFNsb3dwYXRoIHN0YXR1czoKKyAqICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiAgfDwtLS0tLSBTdGF0dXMgLS0tLT58RXZudCBDb2RlfEZsc2ggQ29kZXwKKyAqICB8X19fX19fX19ffENtZCBJbmRleHxfX19fX19fX198X19fX19fX19ffDI4CQkweDFjCisgKiAgICBeXl4gXl5eXgorICogICAgfHx8IHx8fHwtIElTVENQSVA2CisgKiAgICB8fHwgfHx8LS0gSVBPTkxZCisgKiAgICB8fHwgfHwtLS0gUkNWRVJSCisgKiAgICB8fHwgfC0tLS0gSVBDQkFECisgKiAgICB8fHwtLS0tLS0gVENQQ0JBRAorICogICAgfHwtLS0tLS0tIElTVENQSVAKKyAqICAgIHwtLS0tLS0tLSBTQ0VSUgorICoKKyAqLworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfU1hHX0VWRU5UIHsKKwl1MzIgUGFkWzFdOwkJLy8gbm90IHVzZWQKKwl1MzIgU25kVW5hOwkJLy8gU25kVW5hIHZhbHVlCisJdTMyIFJlc2lkOwkJLy8gcmVjZWl2ZSBNREwgcmVzaWQKKwl1bmlvbiB7CisJCXZvaWQgKkhvc3RIYW5kbGU7CS8vIFJlY2VpdmUgaG9zdCBoYW5kbGUKKwkJdTMyIFJzdmQxOwkvLyBUT0UgTkEKKwkJc3RydWN0IHsKKwkJCXUzMiBOb3RVc2VkOworCQkJdTMyIFJzdmQyOwkvLyBUT0UgTkEKKwkJfSBGbHVzaDsKKwl9OworCXUzMiBUb2VwbGl0ejsJCS8vIFJTUyBUb2VwbGl0eiBoYXNoCisJdW5pb24geworCQl1c2hvcnQgUnN2ZDM7CS8vIFRPRSBOQQorCQl1c2hvcnQgSGRyT2Zmc2V0OwkvLyBTbG93cGF0aAorCX07CisJdXNob3J0IExlbmd0aDsJCS8vCisJdW5zaWduZWQgY2hhciBSc3ZkNDsJLy8gVE9FIE5BCisJdW5zaWduZWQgY2hhciBDb2RlOwkvLyBFdmVudCBjb2RlCisJdW5zaWduZWQgY2hhciBDb21tYW5kSW5kZXg7CS8vIE5ldyByaW5nIGluZGV4CisJdW5zaWduZWQgY2hhciBTdGF0dXM7CS8vIEV2ZW50IHN0YXR1cworfSBTWEdfRVZFTlQsICpQU1hHX0VWRU5UOworI3ByYWdtYSBwYWNrKHBvcCkKKworLy8gRXZlbnQgY29kZSBkZWZpbml0aW9ucworI2RlZmluZSBFVkVOVF9DT0RFX0JVRkZFUlMJMHgwMQkvLyBSZWNlaXZlIGJ1ZmZlciBsaXN0IGNvbW1hbmQgKHJpbmcgMCkKKyNkZWZpbmUgRVZFTlRfQ09ERV9TTE9XUkNWCTB4MDIJLy8gU2xvd3BhdGggcmVjZWl2ZQorI2RlZmluZSBFVkVOVF9DT0RFX1VOVVNFRAkweDA0CS8vIFdhcyBzbG93cGF0aCBjb21tYW5kcyBjb21wbGV0ZQorCisvLyBTdGF0dXMgdmFsdWVzCisjZGVmaW5lIEVWRU5UX1NUQVRVU19WQUxJRAkweDgwCS8vIEVudHJ5IHZhbGlkCisKKy8vIFNsb3dwYXRoIHN0YXR1cworI2RlZmluZSBFVkVOVF9TVEFUVVNfRVJST1IJMHg0MAkvLyBDb21wbGV0ZWQgd2l0aCBlcnJvci4gSW5kZXggaW4gbmV4dCBieXRlCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUDQJMHgyMAkvLyBUQ1BJUHY0IGZyYW1lCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BCQUQJMHgxMAkvLyBCYWQgVENQIGNoZWNrc3VtCisjZGVmaW5lIEVWRU5UX1NUQVRVU19JUEJBRAkweDA4CS8vIEJhZCBJUCBjaGVja3N1bQorI2RlZmluZSBFVkVOVF9TVEFUVVNfUkNWRVJSCTB4MDQJLy8gU2xvd3BhdGggcmVjZWl2ZSBlcnJvcgorI2RlZmluZSBFVkVOVF9TVEFUVVNfSVBPTkxZCTB4MDIJLy8gSVAgZnJhbWUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNgkweDAxCS8vIFRDUElQdjYgZnJhbWUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQCTB4MjEJLy8gQ29tYmluYXRpb24gb2YgdjQgYW5kIHY2CisKKy8vIEV2ZW50IHJpbmcKKy8vIFNpemUgbXVzdCBiZSBwb3dlciBvZiAyLCBiZXR3ZWVuIDEyOCBhbmQgMTZrCisjZGVmaW5lIEVWRU5UX1JJTkdfU0laRQkJNDA5NgkvLyA/PworI2RlZmluZSBFVkVOVF9SSU5HX0JBVENICTE2CS8vIEhhbmQgZW50cmllcyBiYWNrIDE2IGF0IGEgdGltZS4KKyNkZWZpbmUgRVZFTlRfQkFUQ0hfTElNSVQJMjU2CS8vIFN0b3AgcHJvY2Vzc2luZyBldmVudHMgYWZ0ZXIgMjU2ICgxNiAqIDE2KQorCit0eXBlZGVmIHN0cnVjdCBfU1hHX0VWRU5UX1JJTkcgeworCVNYR19FVkVOVCBSaW5nW0VWRU5UX1JJTkdfU0laRV07Cit9IFNYR19FVkVOVF9SSU5HLCAqUFNYR19FVkVOVF9SSU5HOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVENCIEJ1ZmZlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTWF4aW11bSBudW1iZXIgb2YgVENCUyBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUvbWljcm9jb2RlCisjZGVmaW5lIFNYR19NQVhfVENCCQk0MDk2CisvLyBNaW5pbXVtIFRDQnMgYmVmb3JlIHdlIGZhaWwgaW5pdGlhbGl6YXRpb24KKyNkZWZpbmUgU1hHX01JTl9UQ0IJCTUxMgorLy8gVENCIEhhc2gKKy8vIFRoZSBidWNrZXQgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIDExOjQgb2YgdGhlIHRvZXBsaXR6IGlmIHdlIHN1cHBvcnQgNGsKKy8vIG9mZmxvYWRlZCBjb25uZWN0aW9ucywgMTA6NCBpZiB3ZSBzdXBwb3J0IDJrIGFuZCBzbyBvbi4KKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRfU0hJRlQJNAorI2RlZmluZSBTWEdfVENCX1BFUl9CVUNLRVQJCTE2CisjZGVmaW5lIFNYR19UQ0JfQlVDS0VUX01BU0sJCTB4RkYwCS8vIEJ1Y2tldCBwb3J0aW9uIG9mIFRDQiBJRAorI2RlZmluZSBTWEdfVENCX0VMRU1FTlRfTUFTSwkweDAwRgkvLyBFbGVtZW50IHdpdGhpbiBidWNrZXQKKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRTCQkJMjU2CS8vIDI1NiAqIDE2ID0gNGsKKworI2RlZmluZSBTWEdfVENCX0JVRkZFUl9TSVpFCTUxMgkvLyBBU1NFUlQgZm9ybWF0IGlzIGNvcnJlY3QKKworI2RlZmluZSBTWEdfVENCX1JDVlFfU0laRQkJNzM2CisKKyNkZWZpbmUgU1hHX1RDQl9DT01QT1NJVEVfQlVGRkVSX1NJWkUJMTAyNAorCisjZGVmaW5lIFNYR19MT0NBVEVfVENQX0ZSQU1FX0hEUihfVGNwT2JqZWN0LCBfSVB2NikJCQkJCQkJXAorCSgoKF9UY3BPYmplY3QpLT5WbGFuSWQpID8JCQkJCQkJCQkJCQlcCisJICgoX0lQdjYpID8JCS8qIFZsYW4gZnJhbWUgaGVhZGVyID0geWVzICovCQkJCQkJCVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LlN4Z1RjcAkJCToJXAorCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcC5TeGdUY3ApCQkJOiAJXAorCSAoKF9JUHY2KSA/CQkvKiBWbGFuIGZyYW1lIGhlYWRlciA9IE5vICovCQkJCQkJCVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcDYuU3hnVGNwCQkJCTogCVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcC5TeGdUY3ApKQorCisjZGVmaW5lIFNYR19MT0NBVEVfSVBfRlJBTUVfSERSKF9UY3BPYmplY3QpCQkJCQkJCQkJXAorCShfVGNwT2JqZWN0KS0+VmxhbklkID8JCQkJCQkJCQkJCQkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXAuSXAJCQkJOiAJCVwKKwkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXAuSXAKKworI2RlZmluZSBTWEdfTE9DQVRFX0lQNl9GUkFNRV9IRFIoX1RjcE9iamVjdCkJCQkJCQkJCVwKKwkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJCQkJCQkJCVwKKwkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwNi5JcAkJCQk6CQlcCisJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwNi5JcAorCisjaWYgREJHCisvLyBIb3JyaWJsZSBrbHVkZ2UgdG8gZGlzdGluZ3Vpc2ggZHVtYi1uaWMsIHNsb3dwYXRoLCBhbmQKKy8vIGZhc3RwYXRoIHRyYWZmaWMuICBEZWNyZW1lbnQgdGhlIEhvcExpbWl0IGJ5IG9uZQorLy8gZm9yIHNsb3dwYXRoLCB0d28gZm9yIGZhc3RwYXRoLiAgVGhpcyBhc3N1bWVzIHRoZSBsaW1pdCBpcyBtZWFzdXJhYmx5CisvLyBncmVhdGVyIHRoYW4gdHdvLCB3aGljaCBJIHRoaW5rIGlzIHJlYXNvbmFibGUuCisvLyBPYnZpb3VzbHkgdGhpcyBpcyBEQkcgb25seS4gIE1heWJlIHJlbW92ZSBsYXRlciwgb3IgI2lmIDAgc28gd2UKKy8vIGNhbiBzZXQgaXQgd2hlbiBuZWVkZWQKKyNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKSB7CQkJCQkJCQlcCisJUElQVjZfSERSCQlfSXA2RnJhbWVIZHI7CQkJCQkJCQkJCQkJXAorCWlmKChfVGNwT2JqZWN0KS0+SVB2NikgewkJCQkJCQkJCQkJCQlcCisJCV9JcDZGcmFtZUhkciA9IFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUigoX1RjcE9iamVjdCkpOwkJCQkJXAorCQlpZihfRmFzdFBhdGgpIHsJCQkJCQkJCQkJCQkJCQlcCisJCQlfSXA2RnJhbWVIZHItPkhvcExpbWl0ID0gKF9UY3BPYmplY3QpLT5DYWNoZWQuVHRsT3JIb3BMaW1pdCAtIDI7CVwKKwkJfSBlbHNlIHsJCQkJCQkJCQkJCQkJCQkJXAorCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IChfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAxOwlcCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcCit9CisjZWxzZQorLy8gRG8gbm90aGluZyB3aXRoIGZyZWUgYnVpbGQKKyNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlY2VpdmUgYW5kIHRyYW5zbWl0IHJpbmdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfTUFYX1JJTkdfU0laRQkyNTYKKyNkZWZpbmUgU1hHX1hNVF9SSU5HX1NJWkUJMTI4CS8vIFN0YXJ0IHdpdGggMTI4CisjZGVmaW5lIFNYR19SQ1ZfUklOR19TSVpFCTEyOAkvLyBTdGFydCB3aXRoIDEyOAorI2RlZmluZSBTWEdfTUFYX0VOVFJJRVMgICAgIDQwOTYKKworLy8gU3RydWN0dXJlIGFuZCBtYWNyb3MgdG8gbWFuYWdlIGEgcmluZwordHlwZWRlZiBzdHJ1Y3QgX1NYR19SSU5HX0lORk8geworCXVuc2lnbmVkIGNoYXIgSGVhZDsJLy8gV2hlcmUgd2UgYWRkIGVudHJpZXMgLSBOb3RlIHVuc2lnbmVkIGNoYXI6UklOR19TSVpFCisJdW5zaWduZWQgY2hhciBUYWlsOwkvLyBXaGVyZSB3ZSBwdWxsIG9mZiBjb21wbGV0ZWQgZW50cmllcworCXVzaG9ydCBTaXplOwkJLy8gUmluZyBzaXplIC0gTXVzdCBiZSBtdWx0aXBsZSBvZiAyCisJdm9pZCAqQ29udGV4dFtTWEdfTUFYX1JJTkdfU0laRV07CS8vIFNoYWRvdyByaW5nCit9IFNYR19SSU5HX0lORk8sICpQU1hHX1JJTkdfSU5GTzsKKworI2RlZmluZSBTWEdfSU5JVElBTElaRV9SSU5HKF9yaW5nLCBfc2l6ZSkgewkJCQkJCQlcCisJKF9yaW5nKS5IZWFkID0gMDsJCQkJCQkJCQkJCQlcCisJKF9yaW5nKS5UYWlsID0gMDsJCQkJCQkJCQkJCQlcCisJKF9yaW5nKS5TaXplID0gKF9zaXplKTsJCQkJCQkJCQkJCVwKK30KKyNkZWZpbmUgU1hHX0FEVkFOQ0VfSU5ERVgoX2luZGV4LCBfc2l6ZSkgKChfaW5kZXgpID0gKChfaW5kZXgpICsgMSkgJiAoKF9zaXplKSAtIDEpKQorI2RlZmluZSBTWEdfUFJFVklPVVNfSU5ERVgoX2luZGV4LCBfc2l6ZSkgKCgoX2luZGV4KSAtIDEpICYoKF9zaXplKSAtIDEpKQorI2RlZmluZSBTWEdfUklOR19FTVBUWShfcmluZykgKChfcmluZyktPkhlYWQgPT0gKF9yaW5nKS0+VGFpbCkKKyNkZWZpbmUgU1hHX1JJTkdfRlVMTChfcmluZykgKCgoKF9yaW5nKS0+SGVhZCArIDEpICYgKChfcmluZyktPlNpemUgLSAxKSkgPT0gKF9yaW5nKS0+VGFpbCkKKyNkZWZpbmUgU1hHX1JJTkdfQURWQU5DRV9IRUFEKF9yaW5nKSBTWEdfQURWQU5DRV9JTkRFWCgoX3JpbmcpLT5IZWFkLCAoKF9yaW5nKS0+U2l6ZSkpCisjZGVmaW5lIFNYR19SSU5HX1JFVFJFQVRfSEVBRChfcmluZykgKChfcmluZyktPkhlYWQgPQkJCQlcCisJCQkJCQkJCQkgIFNYR19QUkVWSU9VU19JTkRFWCgoX3JpbmcpLT5IZWFkLCAoX3JpbmcpLT5TaXplKSkKKyNkZWZpbmUgU1hHX1JJTkdfQURWQU5DRV9UQUlMKF9yaW5nKSB7CQkJCQkJCQlcCisJQVNTRVJUKChfcmluZyktPlRhaWwgIT0gKF9yaW5nKS0+SGVhZCk7CQkJCQkJCVwKKwlTWEdfQURWQU5DRV9JTkRFWCgoX3JpbmcpLT5UYWlsLCAoKF9yaW5nKS0+U2l6ZSkpOwkJCQlcCit9CisvLyBTZXQgY21kIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSByaW5nIGVudHJ5LCBzZXQgdGhlIHNoYWRvdyBjb250ZXh0CisvLyBlbnRyeSBhbmQgYWR2YW5jZSB0aGUgcmluZy4KKy8vIFRoZSBhcHByb3ByaWF0ZSBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBtYWNybworI2RlZmluZSBTWEdfR0VUX0NNRChfcmluZywgX3JpbmdpbmZvLCBfY21kLCBfY29udGV4dCkgewkJCQlcCisJaWYoU1hHX1JJTkdfRlVMTChfcmluZ2luZm8pKSB7CQkJCQkJCQkJXAorCQkoX2NtZCkgPSBOVUxMOwkJCQkJCQkJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQkJCQkJCQkJXAorCQkoX2NtZCkgPSAmKF9yaW5nKS0+RGVzY3JpcHRvcnNbKF9yaW5naW5mbyktPkhlYWRdOwkJCVwKKwkJKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPkhlYWRdID0gKHZvaWQgKikoX2NvbnRleHQpO1wKKwkJU1hHX1JJTkdfQURWQU5DRV9IRUFEKF9yaW5naW5mbyk7CQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCVwKK30KKworLy8gQWJvcnQgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGNvbW1hbmQgYnkgcmV0cmVhdGluZyB0aGUgaGVhZC4KKy8vIE5PVEUgLSBUaGUgYXBwb3ByaWF0ZSBsb2NrIE1VU1QgTk9UIEJFIERST1BQRUQgYmV0d2VlbiB0aGUgU1hHX0dFVF9DTUQKKy8vIGFuZCBTWEdfQUJPUlRfQ01EIGNhbGxzLgorI2RlZmluZSBTWEdfQUJPUlRfQ01EKF9yaW5naW5mbykgewkJCQkJCQkJCVwKKwlBU1NFUlQoIShTWEdfUklOR19FTVBUWShfcmluZ2luZm8pKSk7CQkJCQkJCVwKKwlTWEdfUklOR19SRVRSRUFUX0hFQUQoX3JpbmdpbmZvKTsJCQkJCQkJCVwKKwkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+SGVhZF0gPSBOVUxMOwkJCQkJXAorfQorCisvLyBGb3IgdGhlIGdpdmVuIHJpbmcsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRhaWwgY21kIGFuZCBjb250ZXh0LAorLy8gY2xlYXIgdGhlIGNvbnRleHQgYW5kIGFkdmFuY2UgdGhlIHRhaWwKKyNkZWZpbmUgU1hHX1JFVFVSTl9DTUQoX3JpbmcsIF9yaW5naW5mbywgX2NtZCwgX2NvbnRleHQpIHsJCQlcCisJKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5UYWlsXTsJCQkJXAorCShfY29udGV4dCkgPSAoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+VGFpbF07ICAgICAgIAlcCisJKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPlRhaWxdID0gTlVMTDsJCQkJCVwKKwlTWEdfUklOR19BRFZBTkNFX1RBSUwoX3JpbmdpbmZvKTsJCQkJCQkJCVwKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEhvc3QgQ29tbWFuZCBCdWZmZXIgLSBjb21tYW5kcyB0byBJTklDIHZpYSB0aGUgQ21kIFJpbmdzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgMzEgICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMAorICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX19fX18uCisgKiAgfDwtLS0tLS0tLS0tLS0tLSBTZ2wgTG93IC0tLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDAJCTB4MDAKKyAqICB8PC0tLS0tLS0tLS0tLS0tIFNnbCBIaWdoIC0tLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198NAkJMHgwNAorICogIHw8LS0tLS0tLS0tLS0tLSAgU2dlIDAgTG93ICAtLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3w4IAkJMHgwOAorICogIHw8LS0tLS0tLS0tLS0tLSAgU2dlIDAgSGlnaCAtLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxMgkJMHgwYworICogIHw8LS0tLS0tLS0tLS0tICBTZ2UgMCBMZW5ndGggLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxNgkJMHgxMAorICogIHw8LS0tLS0tLS0tLS0gV2luZG93IFVwZGF0ZSAtLS0tLS0tLS0tLT58CisgKiAgfDwtLS0tLS0tLSBTUCAxc3QgU0dFIG9mZnNldCAtLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDIwCQkweDE0CisgKiAgfDwtLS0tLS0tLS0tLSBUb3RhbCBMZW5ndGggLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDI0CQkweDE4CisgKiAgfDwtLS0tLSBMQ250IC0tLS0tLT58PC0tLS0tIEZsYWdzIC0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDI4CQkweDFjCisgKi8KKyNwcmFnbWEgcGFjayhwdXNoLCAxKQordHlwZWRlZiBzdHJ1Y3QgX1NYR19DTUQgeworCWRtYV9hZGRyX3QgU2dsOwkJLy8gUGh5c2ljYWwgYWRkcmVzcyBvZiBTR0wKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlkbWE2NF9hZGRyX3QgRmlyc3RTZ2VBZGRyZXNzOwkvLyBBZGRyZXNzIG9mIGZpcnN0IFNHRQorCQkJdTMyIEZpcnN0U2dlTGVuZ3RoOwkvLyBMZW5ndGggb2YgZmlyc3QgU0dFCisJCQl1bmlvbiB7CisJCQkJdTMyIFJzdmQxOwkvLyBUT0UgTkEKKwkJCQl1MzIgU2dlT2Zmc2V0OwkvLyBTbG93cGF0aCAtIDJuZCBTR0Ugb2Zmc2V0CisJCQkJdTMyIFJlc2lkOwkvLyBNREwgY29tcGxldGlvbiAtIGNsb2JiZXJzIHVwZGF0ZQorCQkJfTsKKwkJCXVuaW9uIHsKKwkJCQl1MzIgVG90YWxMZW5ndGg7CS8vIFRvdGFsIHRyYW5zZmVyIGxlbmd0aAorCQkJCXUzMiBNc3M7CS8vIExTTyBNU1MKKwkJCX07CisJCX0gQnVmZmVyOworCX07CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgY2hhciBGbGFnczo0OwkvLyBzbG93cGF0aCBmbGFncworCQkJdW5zaWduZWQgY2hhciBJcEhsOjQ7CS8vIElwIGhlYWRlciBsZW5ndGggKD4+MikKKwkJCXVuc2lnbmVkIGNoYXIgTWFjTGVuOwkvLyBNYWMgaGVhZGVyIGxlbgorCQl9IENzdW1GbGFnczsKKwkJc3RydWN0IHsKKwkJCXVzaG9ydCBGbGFnczo0OwkvLyBzbG93cGF0aCBmbGFncworCQkJdXNob3J0IFRjcEhkck9mZjo3OwkvLyBUQ1AKKwkJCXVzaG9ydCBNYWNMZW46NTsJLy8gTWFjIGhlYWRlciBsZW4KKwkJfSBMc29GbGFnczsKKwkJdXNob3J0IEZsYWdzOwkvLyBmbGFncworCX07CisJdW5pb24geworCQl1c2hvcnQgU2dFbnRyaWVzOwkvLyBTRyBlbnRyeSBjb3VudCBpbmNsdWRpbmcgZmlyc3Qgc2dlCisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyIFN0YXR1czsJLy8gQ29waWVkIGZyb20gZXZlbnQgc3RhdHVzCisJCQl1bnNpZ25lZCBjaGFyIE5vdFVzZWQ7CisJCX0gU3RhdHVzOworCX07Cit9IFNYR19DTUQsICpQU1hHX0NNRDsKKyNwcmFnbWEgcGFjayhwb3ApCisKKyNwcmFnbWEgcGFjayhwdXNoLCAxKQordHlwZWRlZiBzdHJ1Y3QgX1ZMQU5fSERSIHsKKwl1c2hvcnQgVmxhblRjaTsKKwl1c2hvcnQgVmxhblRwaWQ7Cit9IFZMQU5fSERSLCAqUFZMQU5fSERSOworI3ByYWdtYSBwYWNrKHBvcCkKKworLyoKKyAqIFNsb3dwYXRoIEZsYWdzOgorICoKKyAqCisgKiBMU1MgRmxhZ3M6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8uLS0tIFRDUCBMYXJnZSBzZWdtZW50IHNlbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy4tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy4tLS0KKyAqICAzICAgICAgICAgICAgICAgICAgIDEgICAgIDEgICAgICAgLy8vLworICogIDEgICAgICAgICAgICAgICAgICAgNSAgICAgMCAgICAgIHx8fHwKKyAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX192dnZ2LgorICogIHwgICAgICAgICAgICAgICAgICAgfE1BQyB8ICBUQ1AgfCAgICB8CisgKiAgfCAgICAgIExDbnQgICAgICAgICB8aGxlbnxoZHJvZmZ8Rmxnc3wKKyAqICB8X19fX19fX19fX19fX19fX19fX3x8fHx8fHx8fHx8fHxfX19ffAorICoKKyAqCisgKiBDaGVja3N1bSBGbGFncworICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy4tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy4tLS0gQ2hlY2tzdW0gVENQCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8uLS0tIENoZWNrc3VtIElQCisgKiAgMyAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgIC8vLy8gTm8gYml0cyAtIG5vcm1hbCBzZW5kCisgKiAgMSAgICAgICAgICAgICAgICAgICA1ICAgICAgICAgIDcgICAgfHx8fAorICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX3Z2dnYuCisgKiAgfCAgICAgICAgICAgICAgICAgICB8IE9mZmxvYWQgfCBJUCB8ICAgIHwKKyAqICB8ICAgICAgTENudCAgICAgICAgIHxNQUMgaGxlbiB8SGxlbnxGbGdzfAorICogIHxfX19fX19fX19fX19fX19fX19ffF9fX198X19fX3xfX19ffF9fX198CisgKgorICovCisvLyBTbG93cGF0aCBDTUQgZmxhZ3MKKyNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9JUAkJCTB4MDEJLy8gQ2hlY2tzdW0gSVAKKyNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9UQ1AJCTB4MDIJLy8gQ2hlY2tzdW0gVENQCisjZGVmaW5lIFNYR19TTE9XQ01EX0xTTwkJCQkweDA0CS8vIExhcmdlIHNlZ21lbnQgc2VuZAorCit0eXBlZGVmIHN0cnVjdCBfU1hHX1hNVF9SSU5HIHsKKwlTWEdfQ01EIERlc2NyaXB0b3JzW1NYR19YTVRfUklOR19TSVpFXTsKK30gU1hHX1hNVF9SSU5HLCAqUFNYR19YTVRfUklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfUklORyB7CisJU1hHX0NNRCBEZXNjcmlwdG9yc1tTWEdfUkNWX1JJTkdfU0laRV07Cit9IFNYR19SQ1ZfUklORywgKlBTWEdfUkNWX1JJTkc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNoYXJlIG1lbW9yeSBidWZmZXIgdHlwZXMgLSBVc2VkIHRvIGlkZW50aWZ5IGFzeW5jaHJvbm91cworICogc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKwlTWEdfQlVGRkVSX1RZUEVfUkNWLAkvLyBSZWNlaXZlIGJ1ZmZlcgorCVNYR19CVUZGRVJfVFlQRV9TR0wJLy8gU0dMIGJ1ZmZlcgorfSBTWEdfQlVGRkVSX1RZUEU7CisKKy8vIFN0YXRlIGZvciBTWEcgYnVmZmVycworI2RlZmluZSBTWEdfQlVGRkVSX0ZSRUUJCTB4MDEKKyNkZWZpbmUgU1hHX0JVRkZFUl9CVVNZCQkweDAyCisjZGVmaW5lIFNYR19CVUZGRVJfT05DQVJECTB4MDQKKyNkZWZpbmUgU1hHX0JVRkZFUl9VUFNUUkVBTQkweDA4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlY2VpdmUgZGF0YSBidWZmZXJzCisgKgorICogUmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgYXJlIGdpdmVuIHRvIHRoZSBTYWhhcmEgY2FyZCAxMjggYXQgYSB0aW1lLgorICogVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgZmlsbGluZyBpbiBhICJyZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2siCisgKiB3aXRoIDEyOCAicmVjZWl2ZSBkZXNjcmlwdG9ycyIuICBFYWNoIGRlc2NyaXB0b3IgY29uc2lzdHMgb2YKKyAqIGEgcGh5c2ljYWwgYWRkcmVzcywgd2hpY2ggdGhlIGNhcmQgdXNlcyBhcyB0aGUgYWRkcmVzcyB0bworICogRE1BIGRhdGEgaW50bywgYW5kIGEgdmlydHVhbCBhZGRyZXNzLCB3aGljaCBpcyBnaXZlbiBiYWNrCisgKiB0byB0aGUgaG9zdCBpbiB0aGUgIkhvc3RIYW5kbGUiIHBvcnRpb24gb2YgYW4gZXZlbnQuCisgKiBUaGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGRhdGEgc3RydWN0dXJlIGlzIGRlZmluZWQgYmVsb3cKKyAqIGFzIFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sKKyAqIGlzIGRlZmluZWQgYXMgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLLgorICoKKyAqIFRoaXMgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGlzIGdpdmVuIHRvIHRoZSBjYXJkIGJ5IGZpbGxpbmcKKyAqIGluIHRoZSBTZ2wgZmllbGQgb2YgYSBTWEdfQ01EIGVudHJ5IGZyb20gcEFkYXB0LT5SY3ZSaW5nc1swXQorICogd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrLgorICoKKyAqIEJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9ja3MKKyAqIHJlcXVpcmUgYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFpbnRhaW4gdGhlbQorICogb24gYSBmcmVlIHF1ZXVlIGFuZCBjb250YWluIG90aGVyIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICogVGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgorICogYW5kIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFNpbmNlIGJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jaworICogbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHRoZSBjYXJkLCBib3RoIG11c3QgYmUgYWxsb2NhdGVkIG91dCBvZgorICogc2hhcmVkIG1lbW9yeS4gIFRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVzY3JpcHRvcgorICogYmxvY2sgYXZhaWxhYmxlIGZvciBldmVyeSAxMjggYnVmZmVycywgd2UgYWxsb2NhdGUgYWxsIG9mCisgKiB0aGVzZSByZXNvdXJjZXMgdG9nZXRoZXIgaW4gYSBzaW5nbGUgYmxvY2suICBUaGlzIGVudGlyZQorICogYmxvY2sgaXMgbWFuYWdlZCBieSBhIFNYR19SQ1ZfQkxPQ0tfSERSLCB3aG8ncyBzb2xlIHB1cnBvc2UKKyAqIGlzIHRvIG1haW50YWluIGFkZHJlc3MgaW5mb3JtYXRpb24gc28gdGhhdCB0aGUgZW50aXJlIGJsb2NrCisgKiBjYW4gYmUgZnJlZSBsYXRlci4KKyAqCisgKiBGdXJ0aGVyIGNvbXBsaWNhdGluZyBtYXR0ZXJzIGlzIHRoZSBmYWN0IHRoYXQgdGhlIHJlY2VpdmUKKyAqIGJ1ZmZlcnMgbXVzdCBiZSB2YXJpYWJsZSBpbiBsZW5ndGggaW4gb3JkZXIgdG8gYWNjb21vZGF0ZQorICoganVtYm8gZnJhbWUgY29uZmlndXJhdGlvbnMuICBXZSBjb25maWd1cmUgdGhlIGJ1ZmZlcgorICogbGVuZ3RoIHNvIHRoYXQgdGhlIGJ1ZmZlciBhbmQgaXQncyBjb3JyZXNwb25kaW5nIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSCisgKiBzdHJ1Y3R1cmUgYWRkIHVwIHRvIGFuIGV2ZW4gYm91bmRhcnkuICBUaGVuIHdlIHBsYWNlIHRoZQorICogcmVtYWluaW5nIGRhdGEgc3RydWN0dXJlcyBhZnRlciAxMjggb2YgdGhlbSBhcyBzaG93biBpbgorICogdGhlIGZvbGxvd2luZyBkaWFncmFtOgorICoKKyAqICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICBWYXJpYWJsZSBsZW5ndGggcmVjZWl2ZSBidWZmZXIgIzEgICAgfAorICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAjMSAgICAgICAgfAorICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCA8PT0gRXZlbiAyayBvciAxMGsgYm91bmRhcnkKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAuLi4gcmVwZWF0IDItMTI4IC4uICAgICAgICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgICAgICAgICAgIHwKKyAqIHwgIENvbnRhaW5zIFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SICogMTI4IHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgU1hHX1JDVl9CTE9DS19IRFIgICAgICAgICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqCisgKiBNZW1vcnkgY29uc3VtcHRpb246CisgKgkgIE5vbi1qdW1ibzoKKyAqICAgICAgQnVmZmVycyBhbmQgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgPSAyayAqIDEyOCA9IDI1NmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgorICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgPT4gVG90YWwgPSB+MjU4ay9ibG9jaworICoKKyAqCSAgSnVtYm86CisgKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMTBrICogMTI4ID0gMTI4MGsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgorICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgPT4gVG90YWwgPSB+MTI4MmsvYmxvY2sKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfUkNWX0RBVEFfQlVGRkVSUwkJCTQwOTYJLy8gQW1vdW50IHRvIGdpdmUgdG8gdGhlIGNhcmQKKyNkZWZpbmUgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUwk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBidWZmZXJzCisjZGVmaW5lIFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUwkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQorI2RlZmluZSBTWEdfTUFYX1JDVl9CTE9DS1MJCQkJMTI4CS8vID0gMTYzODQgcmVjZWl2ZSBidWZmZXJzCisKKy8vIFJlY2VpdmUgYnVmZmVyIGhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREFUQV9CVUZGRVJfSERSIHsKKwlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsJLy8gQnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MKKwkvLyBOb3RlIC0gRE8gTk9UIFVTRSB0aGUgVmlydHVhbEFkZHJlc3MgZmllbGQgdG8gbG9jYXRlIGRhdGEuCisJLy8gVXNlIHRoZSBzeGcuaDpTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OIG1hY3JvIGluc3RlYWQuCisJdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIGJ1ZmZlcgorCUxJU1RfRU5UUlkgRnJlZUxpc3Q7CS8vIEZyZWUgcXVldWUgb2YgYnVmZmVycworCXN0cnVjdCBfU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKk5leHQ7CS8vIEZhc3RwYXRoIGRhdGEgYnVmZmVyIHF1ZXVlCisJdTMyIFNpemU7CQkvLyBCdWZmZXIgc2l6ZQorCXUzMiBCeXRlT2Zmc2V0OwkJLy8gU2VlIFNYR19SRVNUT1JFX01ETF9PRkZTRVQKKwl1bnNpZ25lZCBjaGFyIFN0YXRlOwkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvLyBFdmVudCBzdGF0dXMgKHRvIGxvZyBQVVNIKQorCXN0cnVjdCBza19idWZmICpza2I7CS8vIERvdWJsZSBtYXBwZWQgKG5ibCBhbmQgcGt0KQorfSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiwgKlBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUjsKKworLy8gU3hnU2xvd1JlY2VpdmUgdXNlcyB0aGUgUEFDS0VUIChza2IpIGNvbnRhaW5lZAorLy8gaW4gdGhlIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIHdoZW4gaW5kaWNhdGluZyBkdW1iLW5pYyBkYXRhCisjZGVmaW5lIFN4Z0R1bWJSY3ZQYWNrZXQJICAgICAgICBza2IKKworI2RlZmluZSBTWEdfUkNWX0RBVEFfSERSX1NJWkUJCQkyNTYJLy8gU3BhY2UgZm9yIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRQkJMjA0OAkvLyBOb24ganVtYm8gPSAyayBpbmNsdWRpbmcgSERSCisjZGVmaW5lIFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUJCTEwMjQwCS8vIGp1bWJvID0gMTBrIGluY2x1ZGluZyBIRFIKKworLy8gUmVjZWl2ZSBkYXRhIGRlc2NyaXB0b3IKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiB7CisJdW5pb24geworCQlzdHJ1Y3Qgc2tfYnVmZiAqVmlydHVhbEFkZHJlc3M7CS8vIEhvc3QgaGFuZGxlCisJCXU2NCBGb3JjZVRvOEJ5dGVzOwkvLyBGb3JjZSB4ODYgdG8gOC1ieXRlIGJvdW5kYXJ5CisJfTsKKwlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsKK30gU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1IsICpQU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1I7CisKKy8vIFJlY2VpdmUgZGVzY3JpcHRvciBibG9jaworI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSwkJMTI4CisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19TSVpFCQkyMDQ4CS8vIEZvciBzYW5pdHkgY2hlY2sKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgeworCVNYR19SQ1ZfREFUQV9ERVNDUklQVE9SIERlc2NyaXB0b3JzW1NYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLXTsKK30gU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLLCAqUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSzsKKworLy8gUmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgeworCXZvaWQgKlZpcnR1YWxBZGRyZXNzOwkvLyBTdGFydCBvZiAyayBidWZmZXIKKwlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsJLy8gLi5hbmQgaXQncyBwaHlzaWNhbCBhZGRyZXNzCisJTElTVF9FTlRSWSBGcmVlTGlzdDsJLy8gRnJlZSBxdWV1ZSBvZiBkZXNjcmlwdG9yIGJsb2NrcworCXVuc2lnbmVkIGNoYXIgU3RhdGU7CS8vIFNlZSBTWEdfQlVGRkVSIHN0YXRlIGFib3ZlCit9IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIsICpQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUjsKKworLy8gUmVjZWl2ZSBibG9jayBoZWFkZXIKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0JMT0NLX0hEUiB7CisJdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIHZpcnR1YWwgbWVtb3J5CisJZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CS8vIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcworCUxJU1RfRU5UUlkgQWxsTGlzdDsJLy8gUXVldWUgb2YgYWxsIFNYR19SQ1ZfQkxPQ0tTCit9IFNYR19SQ1ZfQkxPQ0tfSERSLCAqUFNYR19SQ1ZfQkxPQ0tfSERSOworCisvLyBNYWNyb3MgdG8gZGV0ZXJtaW5lIGRhdGEgc3RydWN0dXJlIG9mZnNldHMgaW50byByZWNlaXZlIGJsb2NrCisjZGVmaW5lIFNYR19SQ1ZfQkxPQ0tfU0laRShfQnVmZmVyc2l6ZSkgCQkJCQlcCisJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKKwkgKHNpemVvZihTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSAgICAgICAgICAgICAgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpKSAgICAgICAgICArCQlcCisJIChzaXplb2YoU1hHX1JDVl9CTE9DS19IRFIpKSkKKyNkZWZpbmUgU1hHX1JDVl9CVUZGRVJfREFUQV9TSVpFKF9CdWZmZXJzaXplKQkJCQlcCisJKChfQnVmZmVyc2l6ZSkgLSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVChfQnVmZmVyc2l6ZSkJCQlcCisJKChfQnVmZmVyc2l6ZSkgLSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19PRkZTRVQoX0J1ZmZlcnNpemUpCQlcCisJKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCVwKKwkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpKQorI2RlZmluZSBTWEdfUkNWX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQkJCVwKKwkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpICAgICAgICAgICAgICArCQlcCisJIChzaXplb2YoU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUikpKQorCisvLyBVc2UgdGhlIG1pbmlwb3J0IHJlc2VydmVkIHBvcnRpb24gb2YgdGhlIE5CTCB0byBsb2NhdGUKKy8vIG91ciBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBzdHJ1Y3R1cmUuCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9OQkxfUkVTRVJWRUQgeworCVBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBSY3ZEYXRhQnVmZmVySGRyOworCXZvaWQgKkF2YWlsYWJsZTsKK30gU1hHX1JDVl9OQkxfUkVTRVJWRUQsICpQU1hHX1JDVl9OQkxfUkVTRVJWRUQ7CisKKyNkZWZpbmUgU1hHX1JDVl9OQkxfQlVGRkVSX0hEUihfTkJMKSAoKChQU1hHX1JDVl9OQkxfUkVTRVJWRUQpTkVUX0JVRkZFUl9MSVNUX01JTklQT1JUX1JFU0VSVkVEKF9OQkwpKS0+UmN2RGF0YUJ1ZmZlckhkcikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2NhdHRlciBnYXRoZXIgbGlzdCBidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNYR19JTklUSUFMX1NHTF9CVUZGRVJTCQk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBTR0wgYnVmZmVycworI2RlZmluZSBTWEdfTUlOX1NHTF9CVUZGRVJTCQkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQorI2RlZmluZSBTWEdfTUFYX1NHTF9CVUZGRVJTCQkJMTYzODQJLy8gTWF4aW11bSB0byBhbGxvY2F0ZSAobm90ZSBBREFQVDp1c2hvcnQpCisKKy8vIFNlbGYgaWRlbnRpZnlpbmcgc3RydWN0dXJlIHR5cGUKK3R5cGVkZWYgZW51bSBfU1hHX1NHTF9UWVBFIHsKKwlTWEdfU0dMX0RVTUIsCQkvLyBEdW1iIE5JQyBTR0wKKwlTWEdfU0dMX1NMT1csCQkvLyBTbG93cGF0aCBwcm90b2NvbCBoZWFkZXIgLSBzZWUgYmVsb3cKKwlTWEdfU0dMX0NISU1ORVkJCS8vIENoaW1uZXkgb2ZmbG9hZCBTR0wKK30gU1hHX1NHTF9UWVBFLCBQU1hHX1NHTF9UWVBFOworCisvLyBOb3RlIC0gdGhlIGRlc2NyaXB0aW9uIGJlbG93IGlzIE1pY3Jvc29mdCBzcGVjaWZpYworLy8KKy8vIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHRvIGFsbG9jYXRlCisvLyBmb3IgdGhlIFNDQVRURVJfR0FUSEVSX0xJU1QgcG9ydGlvbiBvZiB0aGUgU1hHX1NDQVRURVJfR0FUSEVSIGRhdGEgc3RydWN0dXJlLgorLy8gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcHBseSB3aGVuIHNldHRpbmcgdGhpcyB2YWx1ZToKKy8vIC0gRmlyc3QsIHRoZSBTYWhhcmEgY2FyZCBpcyBkZXNpZ25lZCB0byByZWFkIHRoZSBNaWNyb3NvZnQgU0dMIHN0cnVjdHVyZQorLy8gICAgICAgc3RyYWlnaHQgb3V0IG9mIGhvc3QgbWVtb3J5LiAgVGhpcyBtZWFucyB0aGF0IHRoZSBTR0wgbXVzdCByZXNpZGUgaW4KKy8vICAgICAgIHNoYXJlZCBtZW1vcnkuICBJZiB0aGUgbGVuZ3RoIGhlcmUgaXMgc21hbGxlciB0aGFuIHRoZSBTR0wgZm9yIHRoZQorLy8gICAgICAgTkVUX0JVRkZFUiwgdGhlbiBORElTIHdpbGwgYWxsb2NhdGUgaXRzIG93biBidWZmZXIuICBUaGUgYnVmZmVyCisvLyAgICAgICB0aGF0IE5ESVMgYWxsb2NhdGVzIGlzIG5vdCBpbiBzaGFyZWQgbWVtb3J5LCBzbyB3aGVuIHRoaXMgaGFwcGVucywKKy8vICAgICAgIHRoZSBTR0wgd2lsbCBuZWVkIHRvIGJlIGNvcGllZCB0byBhIHNldCBvZiBTWEdfU0NBVFRFUl9HQVRIRVIgYnVmZmVycy4KKy8vICAgICAgIEluIG90aGVyIHdvcmRzLi4gd2UgZG9uJ3Qgd2FudCB0aGlzIHZhbHVlIHRvIGJlIHRvbyBzbWFsbC4KKy8vIC0gT24gdGhlIG90aGVyIGhhbmQuLiB3ZSdyZSBhbGxvY2F0aW5nIHVwIHRvIDE2ayBvZiB0aGVzZSB0aGluZ3MuICBJZgorLy8gICAgICAgd2UgbWFrZSB0aGlzIHRvbyBiaWcsIHdlIHN0YXJ0IHRvIGNvbnN1bWUgYSB0b24gb2YgbWVtb3J5Li4KKy8vIEF0IHRoZSBtb21lbnQsIEknbSBnb2luZyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIFNHIGVudHJpZXMgdG8gMTUwLgorLy8gSWYgZWFjaCBlbnRyeSBtYXBzIHJvdWdobHkgNGssIHRoZW4gdGhpcyBzaG91bGQgY292ZXIgcm91Z2hseSA2MDBrQgorLy8gTkVUX0JVRkZFUnMuICBGdXJ0aGVybW9yZSwgc2luY2UgZWFjaCBlbnRyeSBpcyAyNCBieXRlcywgdGhlIHRvdGFsCisvLyBTR0UgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlIGNvbnN1bWVzIDM2MDAgYnl0ZXMsIHdoaWNoIHNob3VsZCBhbGxvdworLy8gdGhlIGVudGlyZSBTWEdfU0NBVFRFUl9HQVRIRVIgc3RydWN0dXJlIHRvIHJlc2lkZSBjb21mb3J0YWJseSB3aXRoaW4KKy8vIGEgNGsgYmxvY2ssIHByb3ZpZGluZyB0aGUgcmVtYWluaW5nIGZpZWxkcyBzdGF5IHVuZGVyIDUwMCBieXRlcy4KKy8vCisvLyBTbyB3aXRoIDE1MCBlbnRyaWVzLCB0aGUgU1hHX1NDQVRURVJfR0FUSEVSIHN0cnVjdHVyZSBiZWNvbWVzIHJvdWdobHkKKy8vIDRrLiAgQXQgMTZrIG9mIHRoZW0sIHRoYXQgYW1vdW50cyB0byA2NE0gb2Ygc2hhcmVkIG1lbW9yeS4gIEEgdG9uLCBidXQKKy8vIG1hbmFnZWFibGUuCisjZGVmaW5lIFNYR19TR0xfRU5UUklFUwkJMTUwCisKKy8vIFRoZSB1Y29kZSBleHBlY3RzIGFuIE5ESVMgU0dMIHN0cnVjdHVyZSB0aGF0CisvLyBpcyBmb3JtYXR0ZWQgZm9yIGFuIHg2NCBzeXN0ZW0uICBXaGVuIHJ1bm5pbmcKKy8vIG9uIGFuIHg2NCBzeXN0ZW0sIHdlIGNhbiBzaW1wbHkgaGFuZCB0aGUgTkRJUyBTR0wKKy8vIHRvIHRoZSBjYXJkIGRpcmVjdGx5LiAgRm9yIHg4NiBzeXN0ZW1zIHdlIG11c3QgcmVjb25zdHJ1Y3QKKy8vIHRoZSBTR0wuICBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBkZWZpbmVzIGFuIHg2NAorLy8gZm9ybWF0dGVkIFNHTCBlbnRyeQordHlwZWRlZiBzdHJ1Y3QgX1NYR19YNjRfU0dFIHsKKwlkbWE2NF9hZGRyX3QgQWRkcmVzczsJLy8gc2FtZSBhcyB3ZG0uaAorCXUzMiBMZW5ndGg7CQkvLyBzYW1lIGFzIHdkbS5oCisJdTMyIENvbXBpbGVyUGFkOwkvLyBUaGUgY29tcGlsZXIgcGFkcyB0byA4LWJ5dGVzCisJdTY0IFJlc2VydmVkOwkJLy8gdTMyICogaW4gd2RtLmguICBGb3JjZSB0byA4IGJ5dGVzCit9IFNYR19YNjRfU0dFLCAqUFNYR19YNjRfU0dFOworCit0eXBlZGVmIHN0cnVjdCBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCB7CisJZG1hNjRfYWRkcl90IEFkZHJlc3M7CS8vIHNhbWUgYXMgd2RtLmgKKwl1MzIgTGVuZ3RoOwkJLy8gc2FtZSBhcyB3ZG0uaAorCXUzMiBDb21waWxlclBhZDsJLy8gVGhlIGNvbXBpbGVyIHBhZHMgdG8gOC1ieXRlcworCXU2NCBSZXNlcnZlZDsJCS8vIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcworfSBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5ULCAqUFNDQVRURVJfR0FUSEVSX0VMRU1FTlQ7CisKK3R5cGVkZWYgc3RydWN0IF9TQ0FUVEVSX0dBVEhFUl9MSVNUIHsKKwl1MzIgTnVtYmVyT2ZFbGVtZW50czsKKwl1MzIgKlJlc2VydmVkOworCVNDQVRURVJfR0FUSEVSX0VMRU1FTlQgRWxlbWVudHNbXTsKK30gU0NBVFRFUl9HQVRIRVJfTElTVCwgKlBTQ0FUVEVSX0dBVEhFUl9MSVNUOworCisvLyBUaGUgY2FyZCBkb2Vzbid0IGNhcmUgYWJvdXQgYW55dGhpbmcgZXhjZXB0IGVsZW1lbnRzLCBzbworLy8gd2UgY2FuIGxlYXZlIHRoZSB1MzIgKiByZXNlcnZlZCBmaWVsZCBhbG9uZSBpbiB0aGUgZm9sbG93aW5nCisvLyBTR0wgc3RydWN0dXJlLiAgQnV0IHJlZGVmaW5lIGZyb20gd2RtLmg6U0NBVFRFUl9HQVRIRVJfTElTVCBzbworLy8gd2UgY2FuIHNwZWNpZnkgU1hHX1g2NF9TR0UgYW5kIGRlZmluZSBhIGZpeGVkIG51bWJlciBvZiBlbGVtZW50cwordHlwZWRlZiBzdHJ1Y3QgX1NYR19YNjRfU0dMIHsKKwl1MzIgTnVtYmVyT2ZFbGVtZW50czsKKwl1MzIgKlJlc2VydmVkOworCVNYR19YNjRfU0dFIEVsZW1lbnRzW1NYR19TR0xfRU5UUklFU107Cit9IFNYR19YNjRfU0dMLCAqUFNYR19YNjRfU0dMOworCit0eXBlZGVmIHN0cnVjdCBfU1hHX1NDQVRURVJfR0FUSEVSIHsKKwlTWEdfU0dMX1RZUEUgVHlwZTsJLy8gRklSU1QhIER1bWItbmljIG9yIG9mZmxvYWQKKwl2b2lkICphZGFwdGVyOwkJLy8gQmFjayBwb2ludGVyIHRvIGFkYXB0ZXIKKwlMSVNUX0VOVFJZIEZyZWVMaXN0OwkvLyBGcmVlIFNYR19TQ0FUVEVSX0dBVEhFUiBibG9ja3MKKwlMSVNUX0VOVFJZIEFsbExpc3Q7CS8vIEFsbCBTWEdfU0NBVFRFUl9HQVRIRVIgYmxvY2tzCisJZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CS8vIHBoeXNpY2FsIGFkZHJlc3MKKwl1bnNpZ25lZCBjaGFyIFN0YXRlOwkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorCXVuc2lnbmVkIGNoYXIgQ21kSW5kZXg7CS8vIENvbW1hbmQgcmluZyBpbmRleAorCXN0cnVjdCBza19idWZmICpEdW1iUGFja2V0OwkvLyBBc3NvY2lhdGVkIFBhY2tldAorCXUzMiBEaXJlY3Rpb247CQkvLyBGb3IgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zCisJdTMyIEN1ck9mZnNldDsJCS8vIEN1cnJlbnQgU0dMIG9mZnNldAorCXUzMiBTZ2xSZWY7CQkvLyBTR0wgcmVmZXJlbmNlIGNvdW50CisJVkxBTl9IRFIgVmxhblRhZzsJLy8gVkxBTiB0YWcgdG8gYmUgaW5zZXJ0ZWQgaW50byBTR0wKKwlQU0NBVFRFUl9HQVRIRVJfTElTVCBwU2dsOwkvLyBTR0wgQWRkci4gUG9zc2libHkgJlNnbAorCVNYR19YNjRfU0dMIFNnbDsJLy8gU0dMIGhhbmRlZCB0byBjYXJkCit9IFNYR19TQ0FUVEVSX0dBVEhFUiwgKlBTWEdfU0NBVFRFUl9HQVRIRVI7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjZGVmaW5lIFNYR19TR0xfQlVGRkVSKF9TeGdTZ2wpCQkoJl9TeGdTZ2wtPlNnbCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZfU0laRQkJCXNpemVvZihTWEdfWDY0X1NHTCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKy8vIEZvcmNlIE5ESVMgdG8gZ2l2ZSB1cyBpdCdzIG93biBidWZmZXIgc28gd2UgY2FuIHJlZm9ybWF0IHRvIG91ciBvd24KKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCU5VTEwKKyNkZWZpbmUgU1hHX1NHTF9CVUZfU0laRQkJCTAKKyNlbHNlCitTdG9wIENvbXBpbGF0aW9uOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyMmFlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaApAQCAtMCwwICsxLDczNCBAQAorLyoKKyAqIENvcHlyaWdodCCpIDE5OTctMjAwNyBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiAkSWQ6IHN4Z2h3LmgsdiAxLjIgMjAwOC8wNy8yNCAxNzoyNDoyMyBjaHJpcyBFeHAgJAorICoKKyAqIHN4Z2h3Lmg6CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIEFsYWNyaXRlY2ggU2FoYXJhIGhhcmR3YXJlCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29uZmlndXJhdGlvbiBzcGFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgUENJIFZlbmRvciBJRCAqLworI2RlZmluZSBTWEdfVkVORE9SX0lECQkJMHgxMzlBCS8qIEFsYWNyaXRlY2gncyBWZW5kb3IgSUQgKi8KKworLy8gIFBDSSBEZXZpY2UgSUQKKyNkZWZpbmUgU1hHX0RFVklDRV9JRAkJCTB4MDAwOQkvKiBTYWhhcmEgRGV2aWNlIElEICovCisKKy8vCisvLyBTdWJzeXN0ZW0gSURzLgorLy8KKy8vIFRoZSBzdWJzeXN0ZW0gSUQgdmFsdWUgaXMgYnJva2VuIGludG8gYml0IGZpZWxkcyBhcyBmb2xsb3dzOgorLy8JCUJpdHMgWzE1OjEyXSAtIEZ1bmN0aW9uCisvLwkJQml0cyBbMTE6OF0gIC0gT0VNIGFuZC9vciBvcGVyYXRpbmcgc3lzdGVtLgorLy8JCUJpdHMgWzc6MF0gICAtIEJhc2UgU0lELgorLy8KKy8vIFNTSUQgZmllbGQgKGJpdCkgbWFza3MKKyNkZWZpbmUgU1NJRF9CQVNFX01BU0sJCQkJCTB4MDBGRgkvLyBCYXNlIHN1YnN5c3RlbSBJRCBtYXNrCisjZGVmaW5lIFNTSURfT0VNX01BU0sJCQkJCTB4MEYwMAkvLyBTdWJzeXN0ZW0gT0VNIG1hc2sKKyNkZWZpbmUgU1NJRF9GVU5DX01BU0sJCQkJCTB4RjAwMAkvLyBTdWJzeXN0ZW0gZnVuY3Rpb24gbWFzaworCisvLyBCYXNlIFNTSUQncworI2RlZmluZSBTU0lEX1NBSEFSQV9QUk9UTwkJCQkweDAwMTgJLy8gMTAwMDIyIFNhaGFyYSBwcm90b3R5cGUgKFhlblBhaykgYm9hcmQKKyNkZWZpbmUgU1NJRF9TQUhBUkFfRklCRVIJCQkJMHgwMDE5CS8vIDEwMDAyMyBTYWhhcmEgMS1wb3J0IGZpYmVyIGJvYXJkCisjZGVmaW5lIFNTSURfU0FIQVJBX0NPUFBFUgkJCQkweDAwMUEJLy8gMTAwMDI0IFNhaGFyYSAxLXBvcnQgY29wcGVyIGJvYXJkCisKKy8vIFVzZWZ1bCBTU0lEIG1hY3JvcworI2RlZmluZQlTU0lEX0JBU0Uoc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9CQVNFX01BU0spCQkvLyBpc29sYXRlIGJhc2UgU1NJRCBiaXRzCisjZGVmaW5lCVNTSURfT0VNKHNzaWQpCQkJKChzc2lkKSAmIFNTSURfT0VNX01BU0spCQkvLyBpc29sYXRlIFNTSUQgT0VNIGJpdHMKKyNkZWZpbmUJU1NJRF9GVU5DKHNzaWQpCQkJKChzc2lkKSAmIFNTSURfRlVOQ19NQVNLKQkJLy8gaXNvbGF0ZSBTU0lEIGZ1bmN0aW9uIGJpdHMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhXIFJlZ2lzdGVyIFNwYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1hHX0hXUkVHX01FTVNJWkUJMHg0MDAwCQkvLyAxNmsKKworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfU1hHX0hXX1JFR1MgeworCXUzMgkJUmVzZXQ7CQkJCS8vIFdyaXRlIDB4ZGVhZCB0byBpbnZva2Ugc29mdCByZXNldAorCXUzMgkJUGFkMTsJCQkJLy8gTm8gcmVnaXN0ZXIgZGVmaW5lZCBhdCBvZmZzZXQgNAorCXUzMgkJSW50ZXJydXB0TWFzazA7CQkvLyBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDAKKwl1MzIJCUludGVycnVwdE1hc2sxOwkJLy8gRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAxCisJdTMyCQlVY29kZURhdGFMb3c7CQkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyAzMS0wCisJdTMyCQlVY29kZURhdGFNaWRkbGU7CS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyCisJdTMyCQlVY29kZURhdGFIaWdoOwkJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQKKwl1MzIJCVVjb2RlQWRkcjsJCQkvLyBTdG9yZSBtaWNyb2NvZGUgYWRkcmVzcyAtIFNlZSBmbGFncyBiZWxvdworCXUzMgkJUGFkVG8weDgwWzI0XTsJCS8vIFBhZCB0byBYY3YgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKwl1MzIJCU1hY0NvbmZpZzA7CQkJLy8gMHg4MCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKKwl1MzIJCU1hY0NvbmZpZzE7CQkJLy8gMHg4NCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKwl1MzIJCU1hY0NvbmZpZzI7CQkJLy8gMHg4OCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIKKwl1MzIJCU1hY0NvbmZpZzM7CQkJLy8gMHg4QyAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKKwl1MzIJCU1hY0FkZHJlc3NMb3c7CQkvLyAweDkwIC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgMS00CisJdTMyCQlNYWNBZGRyZXNzSGlnaDsJCS8vIDB4OTQgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyA1LTYKKwl1MzIJCU1hY1Jlc2VydmVkMVsyXTsJLy8gMHg5OCAtIEFYR01BQyBSZXNlcnZlZAorCXUzMgkJTWFjTWF4RnJhbWVMZW47CQkvLyAweEEwIC0gQVhHTUFDIE1heGltdW0gRnJhbWUgTGVuZ3RoCisJdTMyCQlNYWNSZXNlcnZlZDJbMl07CS8vIDB4QTQgLSBBWEdNQUMgUmVzZXJ2ZWQKKwl1MzIJCU1hY1JldmlzaW9uOwkJLy8gMHhBQyAtIEFYR01BQyBSZXZpc2lvbiBMZXZlbCBSZWdpc3RlcgorCXUzMgkJTWFjUmVzZXJ2ZWQzWzRdOwkvLyAweEIwIC0gQVhHTUFDIFJlc2VydmVkCisJdTMyCQlNYWNBbWlpbUNtZDsJCS8vIDB4QzAgLSBBWEdNQUMgQU1JSU0gQ29tbWFuZCBSZWdpc3RlcgorCXUzMgkJTWFjQW1paW1GaWVsZDsJCS8vIDB4QzQgLSBBWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKwl1MzIJCU1hY0FtaWltQ29uZmlnOwkJLy8gMHhDOCAtIEFYR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisJdTMyCQlNYWNBbWlpbUxpbms7CQkvLyAweENDIC0gQVhHTUFDIEFNSUlNIExpbmsgRmFpbCBWZWN0b3IgUmVnaXN0ZXIKKwl1MzIJCU1hY0FtaWltSW5kaWNhdG9yOwkvLyAweEQwIC0gQVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RvcgorCXUzMgkJUGFkVG8weDEwMFsxMV07CQkvLyAweEQ0IC0gMHgxMDAgLSBQYWQKKwl1MzIJCVhtdENvbmZpZzsJCQkvLyAweDEwMCAtIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwl1MzIJCVJjdkNvbmZpZzsJCQkvLyAweDEwNCAtIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisJdTMyCQlMaW5rQWRkcmVzczBMb3c7CS8vIDB4MTA4IC0gTGluayBhZGRyZXNzIDAKKwl1MzIJCUxpbmtBZGRyZXNzMEhpZ2g7CS8vIDB4MTBDIC0gTGluayBhZGRyZXNzIDAKKwl1MzIJCUxpbmtBZGRyZXNzMUxvdzsJLy8gMHgxMTAgLSBMaW5rIGFkZHJlc3MgMQorCXUzMgkJTGlua0FkZHJlc3MxSGlnaDsJLy8gMHgxMTQgLSBMaW5rIGFkZHJlc3MgMQorCXUzMgkJTGlua0FkZHJlc3MyTG93OwkvLyAweDExOCAtIExpbmsgYWRkcmVzcyAyCisJdTMyCQlMaW5rQWRkcmVzczJIaWdoOwkvLyAweDExQyAtIExpbmsgYWRkcmVzcyAyCisJdTMyCQlMaW5rQWRkcmVzczNMb3c7CS8vIDB4MTIwIC0gTGluayBhZGRyZXNzIDMKKwl1MzIJCUxpbmtBZGRyZXNzM0hpZ2g7CS8vIDB4MTI0IC0gTGluayBhZGRyZXNzIDMKKwl1MzIJCVRvZXBsaXR6S2V5WzEwXTsJLy8gMHgxMjggLSAweDE1MCAtIFRvZXBsaXR6IGtleQorCXUzMgkJU29ja2V0S2V5WzEwXTsJCS8vIDB4MTUwIC0gMHgxNzggLSBTb2NrZXQgS2V5CisJdTMyCQlMaW5rU3RhdHVzOwkJCS8vIDB4MTc4IC0gTGluayBzdGF0dXMKKwl1MzIJCUNsZWFyU3RhdHM7CQkJLy8gMHgxN0MgLSBDbGVhciBTdGF0cworCXUzMgkJWG10RXJyb3JzTG93OwkJLy8gMHgxODAgLSBUcmFuc21pdCBzdGF0cyAtIGVycm9ycworCXUzMgkJWG10RXJyb3JzSGlnaDsJCS8vIDB4MTg0IC0gVHJhbnNtaXQgc3RhdHMgLSBlcnJvcnMKKwl1MzIJCVhtdEZyYW1lc0xvdzsJCS8vIDB4MTg4IC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAorCXUzMgkJWG10RnJhbWVzSGlnaDsJCS8vIDB4MThDIC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAorCXUzMgkJWG10Qnl0ZXNMb3c7CQkvLyAweDE5MCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJWG10Qnl0ZXNIaWdoOwkJLy8gMHgxOTQgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQKKwl1MzIJCVhtdFRjcFNlZ21lbnRzTG93OwkvLyAweDE5OCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIHNlZ21lbnRzCisJdTMyCQlYbXRUY3BTZWdtZW50c0hpZ2g7CS8vIDB4MTlDIC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKKwl1MzIJCVhtdFRjcEJ5dGVzTG93OwkJLy8gMHgxQTAgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBieXRlcworCXUzMgkJWG10VGNwQnl0ZXNIaWdoOwkvLyAweDFBNCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlSY3ZFcnJvcnNMb3c7CQkvLyAweDFBOCAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKKwl1MzIJCVJjdkVycm9yc0hpZ2g7CQkvLyAweDFBQyAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKKwl1MzIJCVJjdkZyYW1lc0xvdzsJCS8vIDB4MUIwIC0gUmVjZWl2ZSBzdGF0cyAtIGZyYW1lIGNvdW50CisJdTMyCQlSY3ZGcmFtZXNIaWdoOwkJLy8gMHgxQjQgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKKwl1MzIJCVJjdkJ5dGVzTG93OwkJLy8gMHgxQjggLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJUmN2Qnl0ZXNIaWdoOwkJLy8gMHgxQkMgLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJUmN2VGNwU2VnbWVudHNMb3c7CS8vIDB4MUMwIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cworCXUzMgkJUmN2VGNwU2VnbWVudHNIaWdoOwkvLyAweDFDNCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1Agc2VnbWVudHMKKwl1MzIJCVJjdlRjcEJ5dGVzTG93OwkJLy8gMHgxQzggLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlSY3ZUY3BCeXRlc0hpZ2g7CS8vIDB4MUNDIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcworCXUzMgkJUGFkVG8weDIwMFsxMl07CQkvLyAweDFEMCAtIDB4MjAwIC0gUGFkCisJdTMyCQlTb2Z0d2FyZVsxOTIwXTsJCS8vIDB4MjAwIC0gMHgyMDAwIC0gU29mdHdhcmUgZGVmaW5lZCAobm90IHVzZWQpCisJdTMyCQlNc2l4VGFibGVbMTAyNF07CS8vIDB4MjAwMCAtIDB4MzAwMCAtIE1TSVggVGFibGUKKwl1MzIJCU1zaXhCaXRBcnJheVsxMDI0XTsJLy8gMHgzMDAwIC0gMHg0MDAwIC0gTVNJWCBQZW5kaW5nIEJpdCBBcnJheQorfSBTWEdfSFdfUkVHUywgKlBTWEdfSFdfUkVHUzsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8vIE1pY3JvY29kZSBBZGRyZXNzIEZsYWdzCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX0dPCQkweDgwMDAwMDAwCS8vIFN0YXJ0IG1pY3JvY29kZQorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19XUklURQkJMHg0MDAwMDAwMAkvLyBTdG9yZSBtaWNyb2NvZGUKKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfUkVBRAkJMHgyMDAwMDAwMAkvLyBSZWFkIG1pY3JvY29kZQorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19QQVJJVFkJMHgxMDAwMDAwMAkvLyBQYXJpdHkgZXJyb3IgZGV0ZWN0ZWQKKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfTUFTSwkJMHgwMDAwMUZGRgkvLyBBZGRyZXNzIGJpdHMKKworLy8gTGluayBBZGRyZXNzIFJlZ2lzdGVycworI2RlZmluZSBMSU5LX0FERFJFU1NfRU5BQkxFCQkJMHg4MDAwMDAwMAkvLyBBcHBsaWVkIHRvIGxpbmsgYWRkcmVzcyBoaWdoCisKKy8vIE1pY3Jvc29mdCByZWdpc3RlciBzcGFjZSBzaXplCisjZGVmaW5lIFNYR19VQ09ERVJFR19NRU1TSVpFCTB4NDAwMDAJCS8vIDI1NmsKKworLy8gU2FoYXJhIG1pY3JvY29kZSByZWdpc3RlciBhZGRyZXNzIGZvcm1hdC4gIFRoZSBjb21tYW5kIGNvZGUsCisvLyBleHRlbmRlZCBjb21tYW5kIGNvZGUsIGFuZCBhc3NvY2lhdGVkIHByb2Nlc3NvciBhcmUgZW5jb2RlZCBpbgorLy8gdGhlIGFkZHJlc3MgYml0cyBhcyBmb2xsb3dzCisjZGVmaW5lIFNYR19BRERSRVNTX0NPREVfU0hJRlQJCTIJCQkvLyBCYXNlIGNvbW1hbmQgY29kZQorI2RlZmluZSBTWEdfQUREUkVTU19DT0RFX01BU0sJCTB4MDAwMDAwM0MKKyNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX1NISUZUCTYJCQkvLyBFeHRlbmRlZCAob3Igc3ViKSBjb21tYW5kIGNvZGUKKyNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX01BU0sJCTB4MDAwMDFGQzAKKyNkZWZpbmUJU1hHX0FERFJFU1NfQ1BVSURfU0hJRlQJCTEzCQkJLy8gQ1BVCisjZGVmaW5lIFNYR19BRERSRVNTX0NQVUlEX01BU0sJCTB4MDAwM0UwMDAKKyNkZWZpbmUgU1hHX1JFR0lTVEVSX1NJWkVfUEVSX0NQVQkweDAwMDAyMDAwCS8vIFVzZWQgdG8gc2FuaXR5IGNoZWNrIFVDT0RFX1JFR1Mgc3RydWN0dXJlCisKKy8vIFNhaGFyYSByZWNlaXZlIHNlcXVlbmNlciBzdGF0dXMgdmFsdWVzCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FUVE4JCQkweDgwMDAwMDAwCS8vIEF0dGVudGlvbgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTUFTSwkJMHgzRjAwMDAwMAkvLyBUcmFuc3BvcnQgbWFzaworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRVJST1IJCTB4MjAwMDAwMDAJLy8gVHJhbnNwb3J0IGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9DU1VNCQkweDIzMDAwMDAwCS8vIFRyYW5zcG9ydCBja3N1bSBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cJCTB4MjIwMDAwMDAJLy8gVHJhbnNwb3J0IHVuZGVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOCQkweDIwMDAwMDAwCS8vIFRyYW5zcG9ydCBoZWFkZXIgbGVuZ3RoCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9GTEFHUwkJMHgxMDAwMDAwMAkvLyBUcmFuc3BvcnQgZmxhZ3MgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX09QVFMJCTB4MDgwMDAwMDAJLy8gVHJhbnNwb3J0IG9wdGlvbnMgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1NFU1NfTUFTSwkweDA3MDAwMDAwCS8vIFRyYW5zcG9ydCBERFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0REUAkJMHgwNjAwMDAwMAkvLyBUcmFuc3BvcnQgRERQCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9pU0NTSQkJMHgwNTAwMDAwMAkvLyBUcmFuc3BvcnQgaVNDU0kKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX05GUwkJMHgwNDAwMDAwMAkvLyBUcmFuc3BvcnQgTkZTCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9GVFAJCTB4MDMwMDAwMDAJLy8gVHJhbnNwb3J0IEZUUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSFRUUAkJMHgwMjAwMDAwMAkvLyBUcmFuc3BvcnQgSFRUUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfU01CCQkweDAxMDAwMDAwCS8vIFRyYW5zcG9ydCBTTUIKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19NQVNLCQkweDAwRkYwMDAwCS8vIE5ldHdvcmsgbWFzaworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0VSUk9SCQkweDAwODAwMDAwCS8vIE5ldHdvcmsgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNCQkweDAwODMwMDAwCS8vIE5ldHdvcmsgY2tzdW0gZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRkxPVwkJMHgwMDgyMDAwMAkvLyBOZXR3b3JrIHVuZGVyZmxvdyBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTgkJMHgwMDgwMDAwMAkvLyBOZXR3b3JrIGhlYWRlciBsZW5ndGgKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PRkxPVwkJMHgwMDQwMDAwMAkvLyBOZXR3b3JrIG92ZXJmbG93IGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUNBU1QJCTB4MDAyMDAwMDAJLy8gTmV0d29yayBtdWx0aWNhc3QgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PUFRJT05TCQkweDAwMTAwMDAwCS8vIE5ldHdvcmsgb3B0aW9ucyBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09GRlNFVAkJMHgwMDA4MDAwMAkvLyBOZXR3b3JrIG9mZnNldCBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0ZSQUdNRU5UCQkweDAwMDQwMDAwCS8vIE5ldHdvcmsgZnJhZ21lbnQgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UUkFOU19NQVNLCTB4MDAwMzAwMDAJLy8gTmV0d29yayB0cmFuc3BvcnQgdHlwZSBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVURQCQkweDAwMDIwMDAwCS8vIFVEUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1RDUAkJMHgwMDAxMDAwMAkvLyBUQ1AKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfSVBPTkxZCQkJMHgwMDAwODAwMAkvLyBJUC1vbmx5IG5vdCBUQ1AKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSQkJCTB4MDAwMDYwMDAJLy8gUmVjZWl2ZSBwcmlvcml0eQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19QS1RfUFJJX1NIRlQJCQkxMwkvLyBSZWNlaXZlIHByaW9yaXR5IHNoaWZ0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BBUklUWQkJCTB4MDAwMDEwMDAJLy8gTUFDIFJlY2VpdmUgUkFNIHBhcml0eSBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX01BU0sJCTB4MDAwMDBGMDAJLy8gTGluayBhZGRyZXNzIGRldGVjdGlvbiBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfRAkJMHgwMDAwMEIwMAkvLyBMaW5rIGFkZHJlc3MgRAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0MJCTB4MDAwMDBBMDAJLy8gTGluayBhZGRyZXNzIEMKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19CCQkweDAwMDAwOTAwCS8vIExpbmsgYWRkcmVzcyBCCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQQkJMHgwMDAwMDgwMAkvLyBMaW5rIGFkZHJlc3MgQQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0JDQVNUCQkweDAwMDAwMzAwCS8vIExpbmsgYWRkcmVzcyBicm9hZGNhc3QKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19NQ0FTVAkJMHgwMDAwMDIwMAkvLyBMaW5rIGFkZHJlc3MgbXVsdGljYXN0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQ01DQVNUCQkweDAwMDAwMTAwCS8vIExpbmsgY29udHJvbCBtdWx0aWNhc3QKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkweDAwMDAwMEZGCS8vIExpbmsgc3RhdHVzIG1hc2sKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19FUlJPUgkJMHgwMDAwMDA4MAkvLyBMaW5rIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfTUFTSwkJMHgwMDAwMDBGRgkvLyBMaW5rIHN0YXR1cyBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZCQkweDAwMDAwMDg3CS8vIFJjdk1hY1EgcGFyaXR5IGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRUFSTFkJCTB4MDAwMDAwODYJLy8gRGF0YSBlYXJseQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XCQkweDAwMDAwMDg1CS8vIEJ1ZmZlciBvdmVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREUJCTB4MDAwMDAwODQJLy8gTGluayBjb2RlIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRFJJQkJMRQkJMHgwMDAwMDA4MwkvLyBEcmliYmxlIG5pYmJsZQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NSQwkJCTB4MDAwMDAwODIJLy8gQ1JDIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfT0ZMT1cJCTB4MDAwMDAwODEJLy8gTGluayBvdmVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1VGTE9XCQkweDAwMDAwMDgwCS8vIExpbmsgdW5kZXJmbG93CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfODAyMwkJMHgwMDAwMDAyMAkvLyA4MDIuMworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1NOQVAJCTB4MDAwMDAwMTAJLy8gU25hcAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1ZMQU4JCTB4MDAwMDAwMDgJLy8gVkxBTgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1RZUEVfTUFTSwkJMHgwMDAwMDAwNwkvLyBOZXR3b3JrIHR5cGUgbWFzaworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPTlRST0wJCTB4MDAwMDAwMDMJLy8gQ29udHJvbCBwYWNrZXQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19JUFY2CQkweDAwMDAwMDAyCS8vIElQdjYgcGFja2V0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfSVBWNAkJMHgwMDAwMDAwMQkvLyBJUHY0IHBhY2tldAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTYWhhcmEgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCVJDVl9DT05GSUdfUkVTRVQJCTB4ODAwMDAwMDAJLy8gUmN2Q29uZmlnIHJlZ2lzdGVyIHJlc2V0CisjZGVmaW5lCVJDVl9DT05GSUdfRU5BQkxFCQkweDQwMDAwMDAwCS8vIEVuYWJsZSB0aGUgcmVjZWl2ZSBsb2dpYworI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCTB4MjAwMDAwMDAJLy8gRW5hYmxlIHRoZSByZWNlaXZlIHBhcnNlcgorI2RlZmluZQlSQ1ZfQ09ORklHX1NPQ0tFVAkJMHgxMDAwMDAwMAkvLyBFbmFibGUgdGhlIHNvY2tldCBkZXRlY3RvcgorI2RlZmluZQlSQ1ZfQ09ORklHX1JDVkJBRAkJMHgwODAwMDAwMAkvLyBSZWNlaXZlIGFsbCBiYWQgZnJhbWVzCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJMHgwNDAwMDAwMAkvLyBSZWNlaXZlIGFsbCBjb250cm9sIGZyYW1lcworI2RlZmluZQlSQ1ZfQ09ORklHX1JDVlBBVVNFCQkweDAyMDAwMDAwCS8vIEVuYWJsZSBwYXVzZSB0cmFuc21pdCB3aGVuIGF0dG4KKyNkZWZpbmUJUkNWX0NPTkZJR19UWklQVjYJCTB4MDEwMDAwMDAJLy8gSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY2IHRvZXBsaXR6CisjZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY0CQkweDAwODAwMDAwCS8vIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NCB0b2VwbGl0egorI2RlZmluZQlSQ1ZfQ09ORklHX0ZMVVNICQkweDAwNDAwMDAwCS8vIEZsdXNoIGJ1ZmZlcnMKKyNkZWZpbmUJUkNWX0NPTkZJR19QUklPUklUWV9NQVNLCTB4MDAzMDAwMDAJLy8gUHJpb3JpdHkgbGV2ZWwKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIX01BU0sJCTB4MDAwMzAwMDAJLy8gSGFzaCBkZXB0aAorI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfOAkJMHgwMDAwMDAwMAkvLyBIYXNoIGRlcHRoIDgKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzE2CQkweDAwMDEwMDAwCS8vIEhhc2ggZGVwdGggMTYKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzQJCTB4MDAwMjAwMDAJLy8gSGFzaCBkZXB0aCA0CisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8yCQkweDAwMDMwMDAwCS8vIEhhc2ggZGVwdGggMgorI2RlZmluZQlSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLCQkweDAwMDBGRkYwCS8vIEJ1ZmZlciBsZW5ndGggYml0cyAxNTo0LiBpZSBtdWx0aXBsZSBvZiAxNi4KKyNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkweDAwMDAwMDA4CS8vIERpc2FibGUgc29ja2V0IGRldGVjdGlvbiBvbiBhdHRuCisvLyBNYWNybyB0byBkZXRlcm1pbmUgUkNWX0NPTkZJR19CVUZMRU4gYmFzZWQgb24gbWF4aW11bSBmcmFtZSBzaXplLgorLy8gV2UgYWRkIDE4IGJ5dGVzIGZvciBTYWhhcmEgcmVjZWl2ZSBzdGF0dXMgYW5kIHBhZGRpbmcsIHBsdXMgNCBieXRlcyBmb3IgQ1JDLAorLy8gYW5kIHJvdW5kIHVwIHRvIG5lYXJlc3QgMTYgYnl0ZSBib3VuZGFyeQorI2RlZmluZSBSQ1ZfQ09ORklHX0JVRlNJWkUoX01heEZyYW1lKSAoKCgoX01heEZyYW1lKSArIDIyKSArIDE1KSAmIFJDVl9DT05GSUdfQlVGTEVOX01BU0spCisKKyNkZWZpbmUJWE1UX0NPTkZJR19SRVNFVAkJMHg4MDAwMDAwMAkvLyBYbXRDb25maWcgcmVnaXN0ZXIgcmVzZXQKKyNkZWZpbmUJWE1UX0NPTkZJR19FTkFCTEUJCTB4NDAwMDAwMDAJLy8gRW5hYmxlIHRyYW5zbWl0IGxvZ2ljCisjZGVmaW5lCVhNVF9DT05GSUdfTUFDX1BBUklUWQkJMHgyMDAwMDAwMAkvLyBJbmhpYml0IE1BQyBSQU0gcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfQlVGX1BBUklUWQkJMHgxMDAwMDAwMAkvLyBJbmhpYml0IEQyRiBidWZmZXIgcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfTUVNX1BBUklUWQkJMHgwODAwMDAwMAkvLyBJbmhpYml0IDFUIFNSQU0gcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfSU5WRVJUX1BBUklUWQkweDA0MDAwMDAwCS8vIEludmVydCBNQUMgUkFNIHBhcml0eQorI2RlZmluZQlYTVRfQ09ORklHX0lOSVRJQUxfSVBJRAkJMHgwMDAwRkZGRgkvLyBJbml0aWFsIElQSUQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQS1YR01BQyBSZWdpc3RlcnMgLSBPY2N1cHkgMHg4MCAtIDB4RDQgb2YgdGhlIFNYR19IV19SRUdTCisgKgorICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIGF4Z21hYy5wZGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQJCTB4ODAwMDAwMDAJCS8vIFN1YiBtb2R1bGUgcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfUkNOVFJMX1JFU0VUCTB4MDA0MDAwMDAJCS8vIFJlY2VpdmUgY29udHJvbCByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9SRlVOQ19SRVNFVAkJMHgwMDIwMDAwMAkJLy8gUmVjZWl2ZSBmdW5jdGlvbiByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9UQ05UUkxfUkVTRVQJMHgwMDA0MDAwMAkJLy8gVHJhbnNtaXQgY29udHJvbCByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9URlVOQ19SRVNFVAkJMHgwMDAyMDAwMAkJLy8gVHJhbnNtaXQgZnVuY3Rpb24gcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfTUlJX1JFU0VUCQkweDAwMDEwMDAwCQkvLyBNSUkgTWFuYWdlbWVudCByZXNldAorCisvLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEFsbG93IHRoZSBzZW5kaW5nIG9mIFBhdXNlIGZyYW1lcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfRU4JCTB4NDAwMDAwMDAJCS8vIEVuYWJsZSB0cmFuc21pdAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UJCTB4MjAwMDAwMDAJCS8vIEFsbG93IHRoZSBkZXRlY3Rpb24gb2YgUGF1c2UgZnJhbWVzCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9FTgkJMHgxMDAwMDAwMAkJLy8gRW5hYmxlIHJlY2VpdmUKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX1NUQVRFCQkweDA0MDAwMDAwCQkvLyBDdXJyZW50IHRyYW5zbWl0IHN0YXRlIC0gUkVBRCBPTkxZCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVEFURQkJMHgwMTAwMDAwMAkJLy8gQ3VycmVudCByZWNlaXZlIHN0YXRlIC0gUkVBRCBPTkxZCisjZGVmaW5lIEFYR01BQ19DRkcxX1hPRkZfU0hPUlQJCTB4MDAwMDEwMDAJCS8vIE9ubHkgcGF1c2UgZm9yIDY0IHNsb3Qgb24gWE9GRgorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMQkJMHgwMDAwMDQwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDEgNC1ieXRlIHdvcmQKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzIJCTB4MDAwMDA4MDAJCS8vIERlbGF5IHRyYW5zbWl0IEZDUyAyIDQtYnl0ZSB3b3JkcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMwkJMHgwMDAwMEMwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDMgNC1ieXRlIHdvcmRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MxCQkweDAwMDAwMTAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAxIDQtYnl0ZSB3b3JkCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MyCQkweDAwMDAwMjAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAyIDQtYnl0ZSB3b3JkcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMwkJMHgwMDAwMDMwMAkJLy8gRGVsYXkgcmVjZWl2ZSBGQ1MgMyA0LWJ5dGUgd29yZHMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEtUX09WRVJSSURFCTB4MDAwMDAwODAJCS8vIFBlci1wYWNrZXQgb3ZlcnJpZGUgZW5hYmxlCisjZGVmaW5lIEFYR01BQ19DRkcxX1NXQVAJCTB4MDAwMDAwNDAJCS8vIEJ5dGUgc3dhcCBlbmFibGUKKyNkZWZpbmUgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUCTB4MDAwMDAwMjAJCS8vIEFTU0VSVCBzcmRycGZybSBvbiBzaG9ydCBmcmFtZSAoPDY0KQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfU1RSSUNUCQkweDAwMDAwMDEwCQkvLyBSQ1Ygb25seSA4MDIuM0FFIHdoZW4gQ0xFQVIKKyNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4CQkvLyBWZXJpZnkgZnJhbWUgbGVuZ3RoCisjZGVmaW5lIEFYR01BQ19DRkcxX0dFTl9GQ1MJCTB4MDAwMDAwMDQJCS8vIEdlbmVyYXRlIEZDUworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfTUFTSwkJMHgwMDAwMDAwMwkJLy8gTWFzayBmb3IgcGFkIGJpdHMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY0CQkweDAwMDAwMDAxCQkvLyBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzCisjZGVmaW5lIEFYR01BQ19DRkcxX1BBRF9WTEFOCQkweDAwMDAwMDAyCQkvLyBEZXRlY3QgVkxBTiBhbmQgcGFkIHRvIDY4IGJ5dGVzCisjZGVmaW5lIEFYR01BQ19DRkcxX1BBRF82OAkJMHgwMDAwMDAwMwkJLy8gUGFkIHRvIDY4IGJ5dGVzCisKKy8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCisjZGVmaW5lIEFYR01BQ19DRkcyX0dFTl9QQVVTRQkJMHg4MDAwMDAwMAkJLy8gR2VuZXJhdGUgc2luZ2xlIHBhdXNlIGZyYW1lICh0ZXN0KQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9NQU5VQUwJCTB4MDgwMDAwMDAJCS8vIE1hbnVhbCBsaW5rIGZhdWx0IHNlcXVlbmNlCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX0FVVE8JCTB4MDQwMDAwMDAJCS8vIEF1dG8gbGluayBmYXVsdCBzZXF1ZW5jZQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9SRU1PVEUJCTB4MDIwMDAwMDAJCS8vIFJlbW90ZSBsaW5rIGZhdWx0IChSRUFEIE9OTFkpCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX0xPQ0FMCQkweDAxMDAwMDAwCQkvLyBMb2NhbCBsaW5rIGZhdWx0IChSRUFEIE9OTFkpCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR19NQVNLCQkweDAwMUYwMDAwCQkvLyBJbnRlciBwYWNrZXQgZ2FwCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR19TSElGVAkJCTE2CisjZGVmaW5lIEFYR01BQ19DRkcyX1BBVVNFX1hNVAkJMHgwMDAwODAwMAkJLy8gUGF1c2UgdHJhbnNtaXQgbW9kdWxlCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR19FWFRFTgkJMHgwMDAwMDAyMAkJLy8gRW5hYmxlIElQRyBleHRlbnNpb24gYWxnb3JpdGhtCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR0VYX01BU0sJCTB4MDAwMDAwMUYJCS8vIElQRyBleHRlbnNpb24KKworLy8gQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RST1AJCTB4RkZGRjAwMDAJCS8vIFJlY2VpdmUgZnJhbWUgZHJvcCBmaWx0ZXIKKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RPTlRfQ0FSRQkweDAwMDBGRkZGCQkvLyBSZWNlaXZlIGZyYW1lIGRvbid0IGNhcmUgZmlsdGVyCisKKy8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDEtNAorI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkJLy8gRmlyc3Qgb2N0ZXQKKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9UV08JCTB4MDBGRjAwMDAJCS8vIFNlY29uZCBvY3RldAorI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RIUkVFCTB4MDAwMEZGMDAJCS8vIFRoaXJkIG9jdGV0CisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCQkvLyBGb3VydGggb2N0ZXQKKworLy8gQS1YR01BQyBTdGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLSBPY3RldHMgNS02CisjZGVmaW5lIEFYR01BQ19TQVJISUdIX09DVEVUX0ZJVkUJMHhGRjAwMDAwMAkJLy8gRmlmdGggb2N0ZXQKKyNkZWZpbmUgQVhHTUFDX1NBUkhJR0hfT0NURVRfU0lYCTB4MDBGRjAwMDAJCS8vIFNpeHRoIG9jdGV0CisKKy8vIEEtWEdNQUMgTWF4aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIKKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1hNVAkJMHgzRkZGMDAwMAkJLy8gTWF4aW11bSB0cmFuc21pdCBmcmFtZSBsZW5ndGgKKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1hNVF9TSElGVAkxNgorI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfUkNWCQkweDAwMDBGRkZGCQkvLyBNYXhpbXVtIHJlY2VpdmUgZnJhbWUgbGVuZ3RoCisvLyBUaGlzIHJlZ2lzdGVyIGRvZXNuJ3QgbmVlZCB0byBiZSB3cml0dGVuIGZvciBzdGFuZGFyZCBNVFUuCisvLyBGb3IganVtYm8sIEknbGwganVzdCBzdGF0aWNhbGx5IGRlZmluZSB0aGUgdmFsdWUgaGVyZS4gIFRoaXMKKy8vIHZhbHVlIHNldHMgdGhlIHJlY2VpdmUgYnl0ZSBjb3VudCB0byA5MDM2ICgweDIzNEMpIGFuZCB0aGUKKy8vIHRyYW5zbWl0IFdPUkQgY291bnQgdG8gMjI1OSAoMHg4RDMpLiAgVGhlc2UgdmFsdWVzIGluY2x1ZGUgMjIKKy8vIGJ5dGVzIG9mIHBhZGRpbmcgYmV5b25kIHRoZSBqdW1ibyBNVFUgb2YgOTAxNAorI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfSlVNQk8JCTB4MDhEMzIzNEMKKworLy8gQS1YR01BQyBSZXZpc2lvbiBsZXZlbAorI2RlZmluZSBBWEdNQUNfUkVWSVNJT05fTUFTSwkJMHgwMDAwRkZGRgkJLy8gUmV2aXNpb24gbGV2ZWwKKworLy8gQS1YR01BQyBBTUlJTSBDb21tYW5kIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfU1RBUlQJCTB4MDAwMDAwMDgJCS8vIENvbW1hbmQgc3RhcnQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NQVNLCQkweDAwMDAwMDA3CQkvLyBDb21tYW5kCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTEVHQUNZX1dSSVRFCQkxCQkvLyAxMC8xMDAvMTAwMCBNYnBzIFBoeSBXcml0ZQorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0xFR0FDWV9SRUFECQkyCQkvLyAxMC8xMDAvMTAwMCBNYnBzIFBoeSBSZWFkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTU9OSVRPUl9TSU5HTEUJCTMJCS8vIE1vbml0b3Igc2luZ2xlIFBIWQorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01PTklUT1JfTVVMVElQTEUJNAkJLy8gTW9uaXRvciBtdWx0aXBsZSBjb250aWd1b3VzIFBIWXMKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF8xMEdfT1BFUkFUSU9OCQk1CQkvLyBQcmVzZW50IEFNSUlNIEZpZWxkIFJlZworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0NMRUFSX0xJTktfRkFJTAk2CQkvLyBDbGVhciBMaW5rIEZhaWwgQml0IGluIE1JSU0KKworLy8gQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfU1QJCTB4QzAwMDAwMDAJCS8vIDItYml0IFNUIGZpZWxkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVF9TSElGVAkJMzAKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QCQkweDMwMDAwMDAwCQkvLyAyLWJpdCBPUCBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQJCTI4CisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX0FERFIJMHgwRjgwMDAwMAkJLy8gUG9ydCBhZGRyZXNzIGZpZWxkIChoc3RwaHlhZHggaW4gc3BlYykKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfU0hJRlQJCTIzCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfQUREUgkweDAwN0MwMDAwCQkvLyBEZXZpY2UgYWRkcmVzcyBmaWVsZCAoaHN0cmVnYWR4IGluIHNwZWMpCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfU0hJRlQJCTE4CisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9UQQkJMHgwMDAzMDAwMAkJLy8gMi1iaXQgVEEgZmllbGQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUCQkxNgorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREFUQQkJMHgwMDAwRkZGRgkJLy8gRGF0YSBmaWVsZAorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfT1AgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9PUF9BRERSCQkJCTAJCS8vIE1JSU0gQWRkcmVzcyBzZXQgb3BlcmF0aW9uCisjZGVmaW5lCU1JSU1fT1BfV1JJVEUJCQkJMQkJLy8gTUlJTSBXcml0ZSByZWdpc3RlciBvcGVyYXRpb24KKyNkZWZpbmUJTUlJTV9PUF9SRUFECQkJCTIJCS8vIE1JSU0gUmVhZCByZWdpc3RlciBvcGVyYXRpb24KKyNkZWZpbmUJTUlJTV9PUF9BRERSX1NISUZUCShNSUlNX09QX0FERFIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKQorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCisjZGVmaW5lCU1JSU1fUE9SVF9OVU0JCQkJMQkJLy8gQWxsIFNhaGFyYSBNSUlNIG1vZHVsZXMgdXNlIHBvcnQgMQorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX0FERFIgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9ERVZfUEhZX1BNQQkJCTEJCS8vIFBIWSBQTUEvUE1EIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKKyNkZWZpbmUJTUlJTV9ERVZfUEhZX1BDUwkJCTMJCS8vIFBIWSBQQ1MgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgorI2RlZmluZQlNSUlNX0RFVl9QSFlfWFMJCQkJNAkJLy8gUEhZIFhTIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKKyNkZWZpbmUJTUlJTV9ERVZfWEdYUwkJCQk1CQkvLyBYR1hTIE1JSU0gZGV2aWNlIG51bWJlcgorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfVEEgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9UQV8xMEdCCQkJCTIJCS8vIHNldCB0byAyIGZvciAxMCBHQiBvcGVyYXRpb24KKworLy8gQS1YR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DRkdfTk9QUkVBTQkweDAwMDAwMDgwCQkvLyBCeXBhc3MgcHJlYW1ibGUgb2YgbW5nbXQgZnJhbWUKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLCTB4MDAwMDAwN0YJCS8vIGhhbGYtY2xvY2sgZHVyYXRpb24gb2YgTURDIG91dHB1dAorCisvLyBBLVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RlcgorI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19MSU5LCQkweDAwMDAwMDEwCQkvLyBMaW5rIHN0YXR1cyBmcm9tIGxlZ2FjeSBQSFkgb3IgTU1ECisjZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX01QSFkJCTB4MDAwMDAwMDgJCS8vIE11bHRpcGxlIHBoeSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfU1BIWQkJMHgwMDAwMDAwNAkJLy8gU2luZ2xlIHBoeSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTU9OCQkweDAwMDAwMDAyCQkvLyBTaW5nbGUgb3IgbXVsdGlwbGUgbW9uaXRvciBjbWQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfQlVTWQkJMHgwMDAwMDAwMQkJLy8gU2V0IHVudGlsIGNtZCBvcGVyYXRpb24gY29tcGxldGUKKworLy8gTGluayBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIKKyNkZWZpbmUJTFNfUEhZX0NMUl9SRVNFVAkJMHg4MDAwMDAwMAkJLy8gQ2xlYXIgcmVzZXQgc2lnbmFsIHRvIFBIWQorI2RlZmluZQlMU19TRVJERVNfUE9XRVJfRE9XTgkJMHg0MDAwMDAwMAkJLy8gUG93ZXIgZG93biB0aGUgU2FoYXJhIFNlcmRlcworI2RlZmluZQlMU19YR1hTX0VOQUJMRQkJCTB4MjAwMDAwMDAJCS8vIEVuYWJsZSB0aGUgWEFVSSBYR1hTIGxvZ2ljCisjZGVmaW5lCUxTX1hHWFNfQ1RMCQkJMHgxMDAwMDAwMAkJLy8gSG9sZCBYQVVJIFhHWFMgbG9naWMgcmVzZXQgdW50aWwgU2VyZGVzIGlzIHVwCisjZGVmaW5lCUxTX1NFUkRFU19ET1dOCQkJMHgwODAwMDAwMAkJLy8gV2hlbiAwLCBYQVVJIFNlcmRlcyBpcyB1cCBhbmQgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUKKyNkZWZpbmUJTFNfVFJBQ0VfRE9XTgkJCTB4MDQwMDAwMDAJCS8vIFdoZW4gMCwgVHJhY2UgU2VyZGVzIGlzIHVwIGFuZCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZQorI2RlZmluZQlMU19QSFlfQ0xLXzI1TUhaCQkweDAyMDAwMDAwCQkvLyBTZXQgUEhZIGNsb2NrIHRvIDI1IE1IeiAoZWxzZSAxNTYuMTI1IE1IeikKKyNkZWZpbmUJTFNfUEhZX0NMS19FTgkJCTB4MDEwMDAwMDAJCS8vIEVuYWJsZSBjbG9jayB0byBQSFkKKyNkZWZpbmUJTFNfWEFVSV9MSU5LX1VQCQkJMHgwMDAwMDAxMAkJLy8gWEFVSSBsaW5rIGlzIHVwCisjZGVmaW5lCUxTX1hBVUlfTElOS19DSE5HCQkweDAwMDAwMDA4CQkvLyBYQVVJIGxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkCisjZGVmaW5lCUxTX0xJTktfQUxBUk0JCQkweDAwMDAwMDA0CQkvLyBMaW5rIGFsYXJtIHBpbgorI2RlZmluZQlMU19BVFROX0NUUkxfTUFTSwkJMHgwMDAwMDAwMwkJLy8gTWFzayBsaW5rIGF0dGVudGlvbiBjb250cm9sIGJpdHMKKyNkZWZpbmUJTFNfQVRUTl9BTEFSTQkJCTB4MDAwMDAwMDAJCS8vIDAwID0+IEF0dG4gb24gbGluayBhbGFybQorI2RlZmluZQlMU19BVFROX0FMQVJNX09SX1NUQVRfQ0hORwkweDAwMDAwMDAxCQkvLyAwMSA9PiBBdHRuIG9uIGxpbmsgYWxhcm0gb3Igc3RhdHVzIGNoYW5nZQorI2RlZmluZQlMU19BVFROX1NUQVRfQ0hORwkJMHgwMDAwMDAwMgkJLy8gMTAgPT4gQXR0biBvbiBsaW5rIHN0YXR1cyBjaGFuZ2UKKyNkZWZpbmUJTFNfQVRUTl9OT05FCQkJMHgwMDAwMDAwMwkJLy8gMTEgPT4gbm8gQXR0bgorCisvLyBMaW5rIEFkZHJlc3MgSGlnaCBSZWdpc3RlcnMKKyNkZWZpbmUJTElOS19BRERSX0VOQUJMRQkJMHg4MDAwMDAwMAkJLy8gRW5hYmxlIHRoaXMgbGluayBhZGRyZXNzCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogWEdYUyBYQVVJIFhHTUlJIEV4dGVuZGVyIHJlZ2lzdGVycworICoKKyAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBteGd4cy5wZGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBYR1hTIFJlZ2lzdGVyIE1hcAorI2RlZmluZSBYR1hTX0FERFJFU1NfQ09OVFJPTDEJCTB4MDAwMAkJCS8vIFhTIENvbnRyb2wgMQorI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMQkJMHgwMDAxCQkJLy8gWFMgU3RhdHVzIDEKKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVklEX0xPVwkJMHgwMDAyCQkJLy8gWFMgRGV2aWNlIElEIChsb3cpCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9ISUdICQkweDAwMDMJCQkvLyBYUyBEZXZpY2UgSUQgKGhpZ2gpCisjZGVmaW5lIFhHWFNfQUREUkVTU19TUEVFRAkJMHgwMDA0CQkJLy8gWFMgU3BlZWQgYWJpbGl0eQorI2RlZmluZSBYR1hTX0FERFJFU1NfREVWX0xPVwkJMHgwMDA1CQkJLy8gWFMgRGV2aWNlcyBpbiBwYWNrYWdlCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZfSElHSAkJMHgwMDA2CQkJLy8gWFMgRGV2aWNlcyBpbiBwYWNrYWdlCisjZGVmaW5lIFhHWFNfQUREUkVTU19TVEFUVVMyCQkweDAwMDgJCQkvLyBYUyBTdGF0dXMgMgorI2RlZmluZSBYR1hTX0FERFJFU1NfUEtHSURfbE9XCQkweDAwMEUJCQkvLyBYUyBQYWNrYWdlIElkZW50aWZpZXIKKyNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX0hJR0gJCTB4MDAwRgkJCS8vIFhTIFBhY2thZ2UgSWRlbnRpZmllcgorI2RlZmluZSBYR1hTX0FERFJFU1NfTEFORV9TVEFUVVMJMHgwMDE4CQkJLy8gMTBHIFhHWFMgTGFuZSBTdGF0dXMKKyNkZWZpbmUgWEdYU19BRERSRVNTX1RFU1RfQ1RSTAkJMHgwMDE5CQkJLy8gMTBHIFhHWFMgVGVzdCBDb250cm9sCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9MTzEJCTB4ODAwMAkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBMbyAxCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9MTzIJCTB4ODAwMQkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBMbyAyCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9ISTEJCTB4ODAwMgkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAxCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9ISTIJCTB4ODAwMwkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAyCisKKy8vIFhTIENvbnRyb2wgMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9SRVNFVAkJMHg4MDAwCQkJLy8gUmVzZXQgLSBzZWxmIGNsZWFyaW5nCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfTE9PUEJBQ0sJCTB4NDAwMAkJCS8vIEVuYWJsZSBsb29wYmFjaworI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMQkJMHgyMDAwCQkJLy8gMCA9IHVuc3BlY2lmaWVkLCAxID0gMTBHYisKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9MT1dQT1dFUgkJMHgwNDAwCQkJLy8gMSA9IExvdyBwb3dlciBtb2RlCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQyCQkweDAwNDAJCQkvLyBTYW1lIGFzIFNQRUVEMSAoPykKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRAkJMHgwMDNDCQkJLy8gRXZlcnl0aGluZyByZXNlcnZlZCBleGNlcHQgemVybyAoPykKKworLy8gWFMgU3RhdHVzIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9GQVVMVAkJMHgwMDgwCQkJLy8gRmF1bHQgZGV0ZWN0ZWQKKyNkZWZpbmUgWEdYU19TVEFUVVMxX0xJTksJCTB4MDAwNAkJCS8vIDEgPSBMaW5rIHVwCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9MT1dQT1dFUgkJMHgwMDAyCQkJLy8gMSA9IExvdyBwb3dlciBzdXBwb3J0ZWQKKworLy8gWFMgU3BlZWQgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfU1BFRURfMTBHCQkJMHgwMDAxCQkJLy8gMSA9IDEwRyBjYXBhYmxlCisKKy8vIFhTIERldmljZXMgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfREVWSUNFU19EVEUJCTB4MDAyMAkJCS8vIERURSBYUyBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19QSFkJCTB4MDAxMAkJCS8vIFBIWSBYUyBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19QQ1MJCTB4MDAwOAkJCS8vIFBDUyBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19XSVMJCTB4MDAwNAkJCS8vIFdJUyBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19QTUQJCTB4MDAwMgkJCS8vIFBNRC9QTUEgUHJlc2VudAorI2RlZmluZSBYR1hTX0RFVklDRVNfQ0xBVVNFMjIJCTB4MDAwMQkJCS8vIENsYXVzZSAyMiByZWdpc3RlcnMgcHJlc2VudAorCisvLyBYUyBEZXZpY2VzIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfREVWSUNFU19WRU5ET1IyCQkweDgwMDAJCQkvLyBWZW5kb3Igc3BlY2lmaWMgZGV2aWNlIDIKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjEJCTB4NDAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMQorCisvLyBYUyBTdGF0dXMgMiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9NQVNLCQkweEMwMDAJCQkvLyBEZXZpY2UgcHJlc2VudCBtYXNrCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9ERVZfUkVTUE9ORAkweDgwMDAJCQkvLyBEZXZpY2UgcmVzcG9uZGluZworI2RlZmluZSBYR1hTX1NUQVRVUzJfWE1UX0ZBVUxUCQkweDA4MDAJCQkvLyBUcmFuc21pdCBmYXVsdAorI2RlZmluZSBYR1hTX1NUQVRVUzJfUkNWX0ZBVUxUCQkweDA0MDAJCQkvLyBSZWNlaXZlIGZhdWx0CisKKy8vIFhTIFBhY2thZ2UgSUQgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX09SRwkJMHhGQzAwCQkJLy8gT3JnYW5pemF0aW9uYWxseSBVbmlxdWUKKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX01GRwkJMHgwM0YwCQkJLy8gTWFudWZhY3R1cmVyIE1vZGVsCisjZGVmaW5lIFhHWFNfUEtHSURfSElHSF9SRVYJCTB4MDAwRgkJCS8vIFJldmlzaW9uIE51bWJlcgorCisvLyBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19MQU5FX1BIWQkJCTB4MTAwMAkJCS8vIFBIWS9EVEUgbGFuZSBhbGlnbm1lbnQgc3RhdHVzCisjZGVmaW5lIFhHWFNfTEFORV9QQVRURVJOCQkweDA4MDAJCQkvLyBQYXR0ZXJuIHRlc3RpbmcgYWJpbGl0eQorI2RlZmluZSBYR1hTX0xBTkVfTE9PUEJBQ0sJCTB4MDQwMAkJCS8vIFBIWSBsb29wYmFjayBhYmlsaXR5CisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMwkJCTB4MDAwOAkJCS8vIExhbmUgMyBzeW5jCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMgkJCTB4MDAwNAkJCS8vIExhbmUgMiBzeW5jCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMQkJCTB4MDAwMgkJCS8vIExhbmUgMSBzeW5jCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMAkJCTB4MDAwMQkJCS8vIExhbmUgMCBzeW5jCisKKy8vIFhTIFRlc3QgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fRU5BQkxFCTB4MDAwNAkJCS8vIFRlc3QgcGF0dGVybiBlbmFibGVkCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01BU0sJCTB4MDAwMwkJCS8vIFRlc3QgcGF0dGVybnMKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkJMHgwMDAzCQkJLy8gVGVzdCBwYXR0ZXJuIC0gcmVzZXJ2ZWQKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUlYCQkweDAwMDIJCQkvLyBUZXN0IHBhdHRlcm4gLSBtaXhlZAorI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9MT1cJCTB4MDAwMQkJCS8vIFRlc3QgcGF0dGVybiAtIGxvdworI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBoaWdoCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV4dGVybmFsIE1ESU8gQnVzIFJlZ2lzdGVycworICoKKyAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBQSFkvWEVOUEFLL0lFRUUgc3BlY3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBMQVNJIChMaW5rIEFsYXJtIFN0YXR1cyBJbnRlcnJ1cHQpIFJlZ2lzdGVycyAobG9jYXRlZCBpbiBNSUlNX0RFVl9QSFlfUE1BIGRldmljZSkKKyNkZWZpbmUgTEFTSV9SWF9BTEFSTV9DT05UUk9MCQkweDkwMDAJCQkvLyBMQVNJIFJYX0FMQVJNIENvbnRyb2wKKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9DT05UUk9MCQkweDkwMDEJCQkvLyBMQVNJIFRYX0FMQVJNIENvbnRyb2wKKyNkZWZpbmUgTEFTSV9DT05UUk9MCQkJMHg5MDAyCQkJLy8gTEFTSSBDb250cm9sCisjZGVmaW5lIExBU0lfUlhfQUxBUk1fU1RBVFVTCQkweDkwMDMJCQkvLyBMQVNJIFJYX0FMQVJNIFN0YXR1cworI2RlZmluZSBMQVNJX1RYX0FMQVJNX1NUQVRVUwkJMHg5MDA0CQkJLy8gTEFTSSBUWF9BTEFSTSBTdGF0dXMKKyNkZWZpbmUgTEFTSV9TVEFUVVMJCQkweDkwMDUJCQkvLyBMQVNJIFN0YXR1cworCisvLyBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCUxBU0lfQ1RMX1JYX0FMQVJNX0VOQUJMRQkweDAwMDQJCQkvLyBFbmFibGUgUlhfQUxBUk0gaW50ZXJydXB0cworI2RlZmluZQlMQVNJX0NUTF9UWF9BTEFSTV9FTkFCTEUJMHgwMDAyCQkJLy8gRW5hYmxlIFRYX0FMQVJNIGludGVycnVwdHMKKyNkZWZpbmUJTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCTB4MDAwMQkJCS8vIEVuYWJsZSBMaW5rIFN0YXR1cyBpbnRlcnJ1cHRzCisKKy8vIExBU0lfU1RBVFVTIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlMQVNJX1NUQVRVU19SWF9BTEFSTQkJMHgwMDA0CQkJLy8gUlhfQUxBUk0gc3RhdHVzCisjZGVmaW5lCUxBU0lfU1RBVFVTX1RYX0FMQVJNCQkweDAwMDIJCQkvLyBUWF9BTEFSTSBzdGF0dXMKKyNkZWZpbmUJTEFTSV9TVEFUVVNfTFNfQUxBUk0JCTB4MDAwMQkJCS8vIExpbmsgU3RhdHVzCisKKy8vIFBIWSByZWdpc3RlcnMgLSBQTUEvUE1EIChkZXZpY2UgMSkKKyNkZWZpbmUJUEhZX1BNQV9DT05UUk9MMQkJMHgwMDAwCQkJLy8gUE1BL1BNRCBDb250cm9sIDEKKyNkZWZpbmUJUEhZX1BNQV9TVEFUVVMxCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCBTdGF0dXMgMQorI2RlZmluZQlQSFlfUE1BX1JDVl9ERVQJCQkweDAwMEEJCQkvLyBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdAorCQkvLyBvdGhlciBQTUEvUE1EIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisKKy8vIFBIWSByZWdpc3RlcnMgLSBQQ1MgKGRldmljZSAzKQorI2RlZmluZQlQSFlfUENTX0NPTlRST0wxCQkweDAwMDAJCQkvLyBQQ1MgQ29udHJvbCAxCisjZGVmaW5lCVBIWV9QQ1NfU1RBVFVTMQkJCTB4MDAwMQkJCS8vIFBDUyBTdGF0dXMgMQorI2RlZmluZQlQSFlfUENTXzEwR19TVEFUVVMxCQkweDAwMjAJCQkvLyBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxCisJCS8vIG90aGVyIFBDUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorCisvLyBQSFkgcmVnaXN0ZXJzIC0gWFMgKGRldmljZSA0KQorI2RlZmluZQlQSFlfWFNfQ09OVFJPTDEJCQkweDAwMDAJCQkvLyBYUyBDb250cm9sIDEKKyNkZWZpbmUJUEhZX1hTX1NUQVRVUzEJCQkweDAwMDEJCQkvLyBYUyBTdGF0dXMgMQorI2RlZmluZQlQSFlfWFNfTEFORV9TVEFUVVMJCTB4MDAxOAkJCS8vIFhTIExhbmUgU3RhdHVzCisJCS8vIG90aGVyIFhTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisKKy8vIFBIWV9QTUFfQ09OVFJPTDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVBNQV9DT05UUk9MMV9SRVNFVAkJMHg4MDAwCQkJLy8gUE1BL1BNRCByZXNldAorCisvLyBQSFlfUE1BX1JDVl9ERVQgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVBNQV9SQ1ZfREVURUNUCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCByZWNlaXZlIHNpZ25hbCBkZXRlY3QKKworLy8gUEhZX1BDU18xMEdfU1RBVFVTMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUJUENTXzEwQl9CTE9DS19MT0NLCQkweDAwMDEJCQkvLyBQQ1MgMTBHQkFTRS1SIGxvY2tlZCB0byByZWNlaXZlIGJsb2NrcworCisvLyBQSFlfWFNfTEFORV9TVEFUVVMgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVhTX0xBTkVfQUxJR04JCQkweDEwMDAJCQkvLyBYUyB0cmFuc21pdCBsYW5lcyBhbGlnbmVkCisKKy8vIFBIWSBNaWNyb2NvZGUgZG93bmxvYWQgZGF0YSBzdHJ1Y3R1cmUKK3R5cGVkZWYgc3RydWN0IF9QSFlfVUNPREUgeworCXVzaG9ydAlBZGRyOworCXVzaG9ydAlEYXRhOworfSBQSFlfVUNPREUsICpQUEhZX1VDT0RFOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVHJhbnNtaXQgU2VxdWVuY2VyIENvbW1hbmQgRGVzY3JpcHRvciBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBUaGlzIGRlc2NyaXB0b3IgbXVzdCBiZSBwbGFjZWQgaW4gR1JBTS4gIFRoZSBhZGRyZXNzIG9mIHRoaXMgZGVzY3JpcHRvcgorLy8gKGFsb25nIHdpdGggYSBjb3VwbGUgb2YgY29udHJvbCBiaXRzKSBpcyBwdXNoZWQgb250byB0aGUgUHhoQ21kUSBvciBQeGxDbWRRCisvLyAoUHJveHkgaGlnaCBvciBsb3cgY29tbWFuZCBxdWV1ZSkuICBUaGlzIGRhdGEgaXMgcmVhZCBieSB0aGUgUHJveHkgU2VxdWVuY2VyLAorLy8gd2hpY2ggcHVzaGVzIGl0IG9udG8gdGhlIFhtdENtZFEsIHdoaWNoIGlzIChldmVudHVhbGx5KSByZWFkIGJ5IHRoZSBUcmFuc21pdAorLy8gU2VxdWVuY2VyLCBjYXVzaW5nIGEgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkLiAgTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkIGZvcgorLy8gYWxsIGNvbW1hbmRzIC0gc2VlIHRoZSBTYWhhcmEgc3BlYyBmb3IgZGV0YWlscy4gIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcworLy8gb25seSB2YWxpZCB3aGVuIGNvbXBpbGVkIG9uIGEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lLgorI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfWE1UX0RFU0MgeworCXVzaG9ydAlYbXRMZW47CQkJLy8gd29yZCAwLCBiaXRzIFsxNTowXSAtICB0cmFuc21pdCBsZW5ndGgKKwl1bnNpZ25lZCBjaGFyCVhtdEN0bDsJCQkvLyB3b3JkIDAsIGJpdHMgWzIzOjE2XSAtIHRyYW5zbWl0IGNvbnRyb2wgYnl0ZQorCXVuc2lnbmVkIGNoYXIJQ21kOwkJCS8vIHdvcmQgMCwgYml0cyBbMzE6MjRdIC0gdHJhbnNtaXQgY29tbWFuZCBwbHVzIG1pc2MuCisJdTMyCVhtdEJ1ZklkOwkJLy8gd29yZCAxLCBiaXRzIFszMTowXSAtICB0cmFuc21pdCBidWZmZXIgSUQKKwl1bnNpZ25lZCBjaGFyCVRjcFN0cnQ7CQkvLyB3b3JkIDIsIGJpdHMgWzc6MF0gLSAgIGJ5dGUgYWRkcmVzcyBvZiBUQ1AgaGVhZGVyCisJdW5zaWduZWQgY2hhcglJcFN0cnQ7CQkJLy8gd29yZCAyLCBiaXRzIFsxNTo4XSAtICBieXRlIGFkZHJlc3Mgb2YgSVAgaGVhZGVyCisJdXNob3J0CUlwQ2tTdW07CQkvLyB3b3JkIDIsIGJpdHMgWzMxOjE2XSAtIHBhcnRpYWwgSVAgY2hlY2tzdW0KKwl1c2hvcnQJVGNwQ2tTdW07CQkvLyB3b3JkIDMsIGJpdHMgWzE1OjBdIC0gIHBhcnRpYWwgVENQIGNoZWNrc3VtCisJdXNob3J0CVJzdmQxOwkJCS8vIHdvcmQgMywgYml0cyBbMzE6MTZdIC0gUEFECisJdTMyCVJzdmQyOwkJCS8vIHdvcmQgNCwgYml0cyBbMzE6MF0gLSAgUEFECisJdTMyCVJzdmQzOwkJCS8vIHdvcmQgNSwgYml0cyBbMzE6MF0gLSAgUEFECisJdTMyCVJzdmQ0OwkJICAgIC8vIHdvcmQgNiwgYml0cyBbMzE6MF0gLSAgUEFECisJdTMyCVJzdmQ1OwkJICAgIC8vIHdvcmQgNywgYml0cyBbMzE6MF0gLSAgUEFECit9IFhNVF9ERVNDLCAqUFhNVF9ERVNDOworI3ByYWdtYSBwYWNrKHBvcCkKKworLy8gWE1UX0RFU0MgQ21kIGJ5dGUgZGVmaW5pdGlvbnMKKwkJLy8gY29tbWFuZCBjb2RlcworI2RlZmluZSBYTVRfREVTQ19DTURfUkFXX1NFTkQJCTAJCS8vIHJhdyBzZW5kIGRlc2NyaXB0b3IKKyNkZWZpbmUgWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUCTEJCS8vIGNoZWNrc3VtIGluc2VydCBkZXNjcmlwdG9yCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9GT1JNQVQJCTIJCS8vIGZvcm1hdCBkZXNjcmlwdG9yCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9QUklNRQkJMwkJLy8gcHJpbWUgZGVzY3JpcHRvcgorI2RlZmluZSBYTVRfREVTQ19DTURfQ09ERV9TSEZUCQk2CQkvLyBjb21hbmQgY29kZSBzaGlmdCAoc2hpZnQgdG8gYml0cyBbMzE6MzBdIGluIHdvcmQgMCkKKwkJLy8gc2hpZnRlZCBjb21tYW5kIGNvZGVzCisjZGVmaW5lIFhNVF9SQVdfU0VORAkJKFhNVF9ERVNDX0NNRF9SQVdfU0VORCAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfQ1NVTV9JTlNFUlQJCShYTVRfREVTQ19DTURfQ1NVTV9JTlNFUlQgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX0ZPUk1BVAkJCShYTVRfREVTQ19DTURfRk9STUFUICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX1BSSU1FCQkJKFhNVF9ERVNDX0NNRF9QUklNRSAgICAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorCisvLyBYTVRfREVTQyBDb250cm9sIEJ5dGUgKFhtdEN0bCkgZGVmaW5pdGlvbnMKKy8vIE5PVEU6ICBUaGVzZSBiaXRzIGRvIG5vdCB3b3JrIG9uIFNhaGFyYSAoUmV2IEEpIQorI2RlZmluZQlYTVRfQ1RMX1BBVVNFX0ZSQU1FCQkweDgwCS8vIGN1cnJlbnQgZnJhbWUgaXMgYSBwYXVzZSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykKKyNkZWZpbmUJWE1UX0NUTF9DT05UUk9MX0ZSQU1FCQkweDQwCS8vIGN1cnJlbnQgZnJhbWUgaXMgYSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykKKyNkZWZpbmUJWE1UX0NUTF9QRVJfUEtUX1FVQUwJCTB4MjAJLy8gcGVyIHBhY2tldCBxdWFsaWZpZXIKKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV9OT05FCQkweDAwCS8vIGRvIG5vdCBwYWQgZnJhbWUKKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV82NAkJMHgwOAkvLyBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMKKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV9WTEFOXzY4CTB4MTAJLy8gcGFkIGZyYW1lIHRvIDY0IGJ5dGVzLCBhbmQgVkxBTiBmcmFtZXMgdG8gNjggYnl0ZXMKKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV82OAkJMHgxOAkvLyBwYWQgZnJhbWUgdG8gNjggYnl0ZXMKKyNkZWZpbmUJWE1UX0NUTF9HRU5fRkNTCQkJMHgwNAkvLyBnZW5lcmF0ZSBGQ1MgKENSQykgZm9yIHRoaXMgZnJhbWUKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMAkJMHgwMAkvLyBkbyBub3QgZGVsYXkgRkNTIGNhbGN1dGlvbgorI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18xCQkweDAxCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAxICg0LWJ5dGUpIHdvcmQKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMgkJMHgwMgkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMiAoNC1ieXRlKSB3b3JkcworI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18zCQkweDAzCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAzICg0LWJ5dGUpIHdvcmRzCisKKy8vIFhNVF9ERVNDIFhtdEJ1ZklkIGRlZmluaXRpb24KKyNkZWZpbmUgWE1UX0JVRl9JRF9TSEZUCQk4CS8vIFRoZSBYbXQgYnVmZmVyIElEIGlzIGZvcm1lZCBieSBkaXZpZGluZworCQkJCQkvLyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzIGJ5IDI1NiAob3IgPDwgOCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWNlaXZlciBTZXF1ZW5jZXIgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gUmVjZWl2ZSBFdmVudCBRdWV1ZSAocXVldWVzIDMgLSA2KSBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUJUkNWX0VWVFFfUkJGSURfTUFTSwkJMHgwMDAwRkZGRgkvLyBiaXQgbWFzayBmb3IgdGhlIFJlY2VpdmUgQnVmZmVyIElECisKKy8vIFJlY2VpdmUgQnVmZmVyIElEIGRlZmluaXRpb24KKyNkZWZpbmUgUkNWX0JVRl9JRF9TSEZUCQk1CS8vIFRoZSBSY3YgYnVmZmVyIElEIGlzIGZvcm1lZCBieSBkaXZpZGluZworCQkJCQkvLyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzIGJ5IDMyIChvciA8PCA1KQorCisvLyBGb3JtYXQgb2YgdGhlIDE4IGJ5dGUgUmVjZWl2ZSBCdWZmZXIgcmV0dXJuZWQgYnkgdGhlCisvLyBSZWNlaXZlIFNlcXVlbmNlciBmb3IgcmVjZWl2ZWQgcGFja2V0cworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfUkNWX0JVRl9IRFIgeworCXUzMglTdGF0dXM7CQkJCS8vIFN0YXR1cyB3b3JkIGZyb20gUmN2IFNlcSBQYXJzZXIKKwl1c2hvcnQJTGVuZ3RoOwkJCQkvLyBSY3YgcGFja2V0IGJ5dGUgY291bnQKKwl1bmlvbiB7CisJCXVzaG9ydAkJVGNwQ3N1bTsJLy8gVENQIGNoZWNrc3VtCisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyCVRjcENzdW1MOwkvLyBsb3dlciA4IGJpdHMgb2YgdGhlIFRDUCBjaGVja3N1bQorCQkJdW5zaWduZWQgY2hhcglMaW5rSGFzaDsJLy8gTGluayBoYXNoIChtdWx0aWNhc3QgZnJhbWVzIG9ubHkpCisJCX07CisJfTsKKwl1c2hvcnQJU2t0SGFzaDsJCQkvLyBTb2NrZXQgaGFzaAorCXVuc2lnbmVkIGNoYXIJVGNwSGRyT2Zmc2V0OwkJLy8gVENQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQKKwl1bnNpZ25lZCBjaGFyCUlwSGRyT2Zmc2V0OwkJLy8gSVAgaGVhZGVyIG9mZnNldCBpbnRvIHBhY2tldAorCXUzMglUcHpIYXNoOwkJCS8vIFRvZXBsaXR6IGhhc2gKKwl1c2hvcnQJUmVzZXJ2ZWQ7CQkJLy8gUmVzZXJ2ZWQKK30gUkNWX0JVRl9IRFIsICpQUkNWX0JVRl9IRFI7CisjcHJhZ21hIHBhY2socG9wKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUXVldWUgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSW5ncmVzcyAocmVhZCBvbmx5KSBxdWV1ZSBudW1iZXJzICovCisjZGVmaW5lIFBYWV9CVUZfUQkJMAkJLyogUHJveHkgQnVmZmVyIFF1ZXVlICovCisjZGVmaW5lIEhTVF9FVlRfUQkJMQkJLyogSG9zdCBFdmVudCBRdWV1ZSAqLworI2RlZmluZSBYTVRfQlVGX1EJCTIJCS8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSAqLworI2RlZmluZSBTS1RfRVZMX1EJCTMJCS8qIFJjdlNxciBTb2NrZXQgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlICovCisjZGVmaW5lIFJDVl9FVkxfUQkJNAkJLyogUmN2U3FyIFJjdiBFdmVudCBMb3cgUHJpb3JpdHkgUXVldWUgKi8KKyNkZWZpbmUgU0tUX0VWSF9RCQk1CQkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KKyNkZWZpbmUgUkNWX0VWSF9RCQk2CQkvKiBSY3ZTcXIgUmN2IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KKyNkZWZpbmUgRE1BX1JTUF9RCQk3CQkvKiBEbWEgUmVzcG9uc2UgUXVldWUgLSBvbmUgcGVyIENQVSBjb250ZXh0ICovCisvKiBMb2NhbCAocmVhZC93cml0ZSkgcXVldWUgbnVtYmVycyAqLworI2RlZmluZSBMT0NBTF9BX1EJCTgJCS8qIFNwYXJlIGxvY2FsIFF1ZXVlICovCisjZGVmaW5lIExPQ0FMX0JfUQkJOQkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KKyNkZWZpbmUgTE9DQUxfQ19RCQkxMAkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KKyNkZWZpbmUgRlNNX0VWVF9RCQkxMQkJLyogRmluaXRlLVN0YXRlLU1hY2hpbmUgRXZlbnQgUXVldWUgKi8KKyNkZWZpbmUgU0JGX1BBTF9RCQkxMgkJLyogU3lzdGVtIEJ1ZmZlciBQaHlzaWNhbCBBZGRyZXNzIChsb3cpIFF1ZXVlICovCisjZGVmaW5lIFNCRl9QQUhfUQkJMTMJCS8qIFN5c3RlbSBCdWZmZXIgUGh5c2ljYWwgQWRkcmVzcyAoaGlnaCkgUXVldWUgKi8KKyNkZWZpbmUgU0JGX1ZBTF9RCQkxNAkJLyogU3lzdGVtIEJ1ZmZlciBWaXJ0dWFsIEFkZHJlc3MgKGxvdykgUXVldWUgKi8KKyNkZWZpbmUgU0JGX1ZBSF9RCQkxNQkJLyogU3lzdGVtIEJ1ZmZlciBWaXJ0dWFsIEFkZHJlc3MgKGhpZ2gpIFF1ZXVlICovCisvKiBFZ3Jlc3MgKHdyaXRlIG9ubHkpIHF1ZXVlIG51bWJlcnMgKi8KKyNkZWZpbmUgSDJHX0NNRF9RCQkxNgkJLyogSG9zdCB0byBHbGJSYW0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgSDJEX0NNRF9RCQkxNwkJLyogSG9zdCB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEcySF9DTURfUQkJMTgJCS8qIEdsYlJhbSB0byBIb3N0IERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEcyRF9DTURfUQkJMTkJCS8qIEdsYlJhbSB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEQySF9DTURfUQkJMjAJCS8qIERSQU0gdG8gSG9zdCBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBEMkdfQ01EX1EJCTIxCQkvKiBEUkFNIHRvIEdsYlJhbSBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBEMkRfQ01EX1EJCTIyCQkvKiBEUkFNIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUFhMX0NNRF9RCQkyMwkJLyogTG93IFByaW9yaXR5IFByb3h5IENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUFhIX0NNRF9RCQkyNAkJLyogSGlnaCBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIFJTUV9DTURfUQkJMjUJCS8qIFJlY2VpdmUgU2VxdWVuY2VyIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUkNWX0JVRl9RCQkyNgkJLyogUmVjZWl2ZSBCdWZmZXIgUXVldWUgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgUHJveHkgQ29tbWFuZCBxdWV1ZXMgKFBYTF9DTURfUSBhbmQgUFhIX0NNRF9RKSAqLworI2RlZmluZSBQWFlfQ09QWV9FTgkJMHgwMDIwMDAwMAkJLyogZW5hYmxlIGNvcHkgb2YgeG10IGRlc2NyaXB0b3IgdG8geG10IGNvbW1hbmQgcXVldWUgKi8KKyNkZWZpbmUgUFhZX1NJWkVfMTYJCTB4MDAwMDAwMDAJCS8qIGNvcHkgMTYgYnl0ZXMgKi8KKyNkZWZpbmUgUFhZX1NJWkVfMzIJCTB4MDAxMDAwMDAJCS8qIGNvcHkgMzIgYnl0ZXMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTWEcgRUVQUk9NL0ZsYXNoIENvbmZpZ3VyYXRpb24gRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNwcmFnbWEgcGFjayhwdXNoLCAxKQorCisvKiAqLwordHlwZWRlZiBzdHJ1Y3QgX0hXX0NGR19EQVRBIHsKKwl1c2hvcnQJCUFkZHI7CisJdW5pb24geworCQl1c2hvcnQJRGF0YTsKKwkJdXNob3J0CUNoZWNrc3VtOworCX07Cit9IEhXX0NGR19EQVRBLCAqUEhXX0NGR19EQVRBOworCisvKiAqLworI2RlZmluZQlOVU1fSFdfQ0ZHX0VOVFJJRVMJKCgxMjgvc2l6ZW9mKEhXX0NGR19EQVRBKSkgLSA0KQorCisvKiBNQUMgYWRkcmVzcyAqLwordHlwZWRlZiBzdHJ1Y3QgX1NYR19DT05GSUdfTUFDIHsKKwl1bnNpZ25lZCBjaGFyCQlNYWNBZGRyWzZdOwkJCS8qIE1BQyBBZGRyZXNzICovCit9IFNYR19DT05GSUdfTUFDLCAqUFNYR19DT05GSUdfTUFDOworCisvKiAqLwordHlwZWRlZiBzdHJ1Y3QgX0FUS19GUlUgeworCXVuc2lnbmVkIGNoYXIJCVBhcnROdW1bNl07CisJdW5zaWduZWQgY2hhcgkJUmV2aXNpb25bMl07CisJdW5zaWduZWQgY2hhcgkJU2VyaWFsWzE0XTsKK30gQVRLX0ZSVSwgKlBBVEtfRlJVOworCisvKiBPRU0gRlJVIEZvcm1hdCB0eXBlcyAqLworI2RlZmluZQlBVEtfRlJVX0ZPUk1BVAkJMHgwMDAwCisjZGVmaW5lIENQUV9GUlVfRk9STUFUCQkweDAwMDEKKyNkZWZpbmUgREVMTF9GUlVfRk9STUFUCQkweDAwMDIKKyNkZWZpbmUgSFBfRlJVX0ZPUk1BVAkJMHgwMDAzCisjZGVmaW5lIElCTV9GUlVfRk9STUFUCQkweDAwMDQKKyNkZWZpbmUgRU1DX0ZSVV9GT1JNQVQJCTB4MDAwNQorI2RlZmluZSBOT19GUlVfRk9STUFUCQkweEZGRkYKKworLyogRUVQUk9NL0ZsYXNoIEZvcm1hdCAqLwordHlwZWRlZiBzdHJ1Y3QgX1NYR19DT05GSUcgeworCS8qICovCisJLyogU2VjdGlvbiAxICgxMjggYnl0ZXMpICovCisJLyogKi8KKwl1c2hvcnQJCQlNYWdpY1dvcmQ7CQkJLyogRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCisJdXNob3J0CQkJU3BpQ2xrczsJCQkvKiBTUEkgYnVzIGNsb2NrIGRpdmlkZXJzICovCisJSFdfQ0ZHX0RBVEEJCUh3Q2ZnW05VTV9IV19DRkdfRU5UUklFU107CisJLyogKi8KKwkvKiAqLworCS8qICovCisJdXNob3J0CQkJVmVyc2lvbjsJCQkvKiBFRVBST00gZm9ybWF0IHZlcnNpb24gKi8KKwlTWEdfQ09ORklHX01BQwlNYWNBZGRyWzRdOwkJCS8qIHNwYWNlIGZvciA0IE1BQyBhZGRyZXNzZXMgKi8KKwlBVEtfRlJVCQkJQXRrRnJ1OwkJCQkvKiBGUlUgaW5mb3JtYXRpb24gKi8KKwl1c2hvcnQJCQlPZW1GcnVGb3JtYXQ7CQkvKiBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5zaWduZWQgY2hhcgkJCU9lbUZydVs3Nl07CQkJLyogT0VNIEZSVSBpbmZvcm1hdGlvbiAob3B0aW9uYWwpICovCisJdXNob3J0CQkJQ2hlY2tzdW07CQkJLyogQ2hlY2tzdW0gb2Ygc2VjdGlvbiAyICovCisJLyogQ1MgaW5mbyBYWFhUT0RPICovCit9IFNYR19DT05GSUcsICpQU1hHX0NPTkZJRzsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWlzY2VsbGFuZW91cyBIYXJkd2FyZSBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBTYWhhcmEgKEFTSUMgbGV2ZWwpIGRlZmluZXMKKyNkZWZpbmUgU0FIQVJBX0dSQU1fU0laRQkJMHgwMjAwMDAJCS8vIEdSQU0gc2l6ZSAtIDEyOCBLQgorI2RlZmluZSBTQUhBUkFfRFJBTV9TSVpFCQkweDIwMDAwMAkJLy8gRFJBTSBzaXplIC0gMiBNQgorI2RlZmluZSBTQUhBUkFfUVJBTV9TSVpFCQkweDAwNDAwMAkJLy8gUVJBTSBzaXplIC0gMTZLIGVudHJpZXMgKDY0IEtCKQorI2RlZmluZSBTQUhBUkFfV0NTX1NJWkUJCQkweDAwMjAwMAkJLy8gV0NTIC0gOEsgaW5zdHJ1Y3Rpb25zICh4IDEwOCBiaXRzKQorCisvLyBBcmFiaWEgKGJvYXJkIGxldmVsKSBkZWZpbmVzCisjZGVmaW5lCUZMQVNIX1NJWkUJCQkweDA4MDAwMAkJLy8gNTEyIEtCICg0IE1iKQorI2RlZmluZQlFRVBST01fU0laRV9YRk1SCQk1MTIJCQkvLyB0cnVlIEVFUFJPTSBzaXplIChieXRlcyksIGluY2x1ZGluZyB4Zm1yIGFyZWEKKyNkZWZpbmUJRUVQUk9NX1NJWkVfTk9fWEZNUgkJMjU2CQkJLy8gRUVQUk9NIHNpemUgZXhjbHVkaW5nIHhmbXIgYXJlYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdwaHljb2RlLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGJhZWRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdwaHljb2RlLmgKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwOCBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBzeGdwaHljb2RlLmg6CisgKgorICogVGhpcyBmaWxlIFBIWSBtaWNyb2NvZGUgYW5kIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGRhdGEuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBIWSBNaWNyb2NvZGUKKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbnRhaW5zIGJvdGggUEhZIG1pY3JvY29kZSBhbmQgUEhZIHJlZ2lzdGVyCisgKiBpbml0aWFsaXphdGlvbiBkYXRhLiAgSXQgaXMgc3BlY2lmaWMgdG8gYm90aCB0aGUgUEhZIGFuZCB0aGUKKyAqIHR5cGUgb2YgdHJhbnNjZWl2ZXIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEb3dubG9hZCBmb3IgQUVMMjAwNUMgUEhZIHdpdGggU1IvTFIgdHJhbnNjZWl2ZXIgKDEwR0JBU0UtU1Igb3IgMTBHQkFTRS1MUikKKyAqLworc3RhdGljIFBIWV9VQ09ERSBQaHlVY29kZVtdID0geworCS8qCisJICogTk9URTogIEFuIGFkZHJlc3Mgb2YgMCBpcyBhIHNwZWNpYWwgY2FzZS4gIFdoZW4gdGhlIGRvd25sb2FkIHJvdXRpbmUKKwkgKiBzZWVzIGFuIGFkZHJlc3Mgb2YgMCwgaXQgZG9lcyBub3Qgd3JpdGUgdG8gdGhlIFBIWS4gIEluc3RlYWQsIGl0CisJICogZGVsYXlzIHRoZSBkb3dubG9hZC4gIFRoZSBsZW5ndGggb2YgdGhlIGRlbGF5IChpbiBtcykgaXMgZ2l2ZW4gaW4KKwkgKiB0aGUgZGF0YSBmaWVsZC4KKwkgKgorCSAqIERlbGF5cyBhcmUgcmVxdWlyZWQgYXQgY2VydGFpbiBwb2ludHMuCisJICovCisKKwkvKgorCSAqIFBsYXRmb3JtLXNwZWNpZmljIE1ESU8gUGF0Y2hlczoKKwkgKiAoaW5jbHVkZSBwYXRjaGVzIGZvciAxMEcgUlggcG9sYXJpdHkgZmxpcCwgNTBNaHogU3ludGgsIGV0YykKKwkgKi8KKwkvKiBBZGRyLCBEYXRhICovCisJezB4YzAxNywgMHhmZWIwfSwJLyogZmxpcCBSWF9MT1MgcG9sYXJpdHkgKG1hbmRhdG9yeSAqLworCS8qICBwYXRjaCBmb3IgU0ZQKyBhcHBsaWNhdGlvbnMpICovCisJezB4QzAwMSwgMHgwNDI4fSwJLyogZmxpcCBSWCBzZXJpYWwgcG9sYXJpdHkgKi8KKworCXsweGMwMTMsIDB4ZjM0MX0sCS8qIGludmVydCBseG1pdCBjbG9jayAobWFuZGF0b3J5IHBhdGNoKSAqLworCXsweGMyMTAsIDB4ODAwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4YzIxMCwgMHg4MTAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KKwl7MHhjMjEwLCAweDgwMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLworCXsweGMyMTAsIDB4MDAwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4MDAwMCwgMHgwMDMyfSwJLyogd2FpdCBmb3IgNTBtcyBmb3IgZGF0YXBhdGggcmVzZXQgdG8gKi8KKwkvKiBjb21wbGV0ZS4gKG1hbmRhdG9yeSBwYXRjaCkgKi8KKworCS8qIENvbmZpZ3VyZSB0aGUgTEVEJ3MgKi8KKwl7MHhjMjE0LCAweDAwOTl9LAkvKiBjb25maWd1cmUgdGhlIExFRCBkcml2ZXJzICovCisJezB4YzIxNiwgMHg1ZjVmfSwJLyogY29uZmlndXJlIHRoZSBBY3Rpdml0eSBMRUQgKi8KKwl7MHhjMjE3LCAweDMzZmZ9LAkvKiBjb25maWd1cmUgdGhlIExpbmsgTEVEICovCisKKwkvKiBUcmFuc2NlaXZlci1zcGVjaWZpYyBNRElPIFBhdGNoZXM6ICovCisJezB4YzAxMCwgMHg0NDhhfSwJLyogKGJpdCAxNCkgbWFzayBvdXQgaGlnaCBCRVIgaW5wdXQgZnJvbSB0aGUgKi8KKwkvKiBMT1Mgc2lnbmFsIGluIDEuMDAwQSAqLworCS8qIChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNSIGNvZGUpICovCisJezB4YzAwMywgMHgwMTgxfSwJLyogKGJpdCA3KSBlbmFibGUgdGhlIENEUiBpbmMgc2V0dGluZyBpbiAqLworCS8qIDEuQzAwNSAobWFuZGF0b3J5IHBhdGNoIGZvciBTUiBjb2RlKSAqLworCisJLyogVHJhbnNjZWl2ZXItc3BlY2lmaWMgTWljcm9jb250cm9sbGVyIEluaXRpYWxpemF0aW9uOiAqLworCXsweGMwNGEsIDB4NTIwMH0sCS8qIGFjdGl2YXRlIG1pY3JvY29udHJvbGxlciBhbmQgcGF1c2UgKi8KKwl7MHgwMDAwLCAweDAwMzJ9LAkvKiB3YWl0IDUwbXMgZm9yIG1pY3JvY29udHJvbGxlciBiZWZvcmUgKi8KKwkvKiB3cml0aW5nIGluIGNvZGUuICovCisKKwkvKiBjb2RlIGJsb2NrIHN0YXJ0cyBoZXJlOiAqLworCXsweGNjMDAsIDB4MjAwOX0sCisJezB4Y2MwMSwgMHgzMDA5fSwKKwl7MHhjYzAyLCAweDI3ZmZ9LAorCXsweGNjMDMsIDB4MzAwZn0sCisJezB4Y2MwNCwgMHgyMDBjfSwKKwl7MHhjYzA1LCAweDMwMGN9LAorCXsweGNjMDYsIDB4MjBjNH0sCisJezB4Y2MwNywgMHgzYzA0fSwKKwl7MHhjYzA4LCAweDY0Mzd9LAorCXsweGNjMDksIDB4MjBjNH0sCisJezB4Y2MwYSwgMHgzYzA0fSwKKwl7MHhjYzBiLCAweDY0Mzd9LAorCXsweGNjMGMsIDB4MjVjNH0sCisJezB4Y2MwZCwgMHgzYzU0fSwKKwl7MHhjYzBlLCAweDY3MjR9LAorCXsweGNjMGYsIDB4MjVjNH0sCisJezB4Y2MxMCwgMHgzYzU0fSwKKwl7MHhjYzExLCAweDY3MjR9LAorCXsweGNjMTIsIDB4MjA0Mn0sCisJezB4Y2MxMywgMHgzMDEyfSwKKwl7MHhjYzE0LCAweDEwMDJ9LAorCXsweGNjMTUsIDB4MjQ4Mn0sCisJezB4Y2MxNiwgMHgzMDEyfSwKKwl7MHhjYzE3LCAweDEwMDJ9LAorCXsweGNjMTgsIDB4MmEzMn0sCisJezB4Y2MxOSwgMHgzMDAyfSwKKwl7MHhjYzFhLCAweDEwMDJ9LAorCXsweGNjMWIsIDB4MjAwZH0sCisJezB4Y2MxYywgMHgzMDRkfSwKKwl7MHhjYzFkLCAweDI4NjJ9LAorCXsweGNjMWUsIDB4MzAxMn0sCisJezB4Y2MxZiwgMHgxMDAyfSwKKwl7MHhjYzIwLCAweDI5ODJ9LAorCXsweGNjMjEsIDB4MzAwMn0sCisJezB4Y2MyMiwgMHgxMDAyfSwKKwl7MHhjYzIzLCAweDYyOGZ9LAorCXsweGNjMjQsIDB4MjBhNH0sCisJezB4Y2MyNSwgMHgzMDA0fSwKKwl7MHhjYzI2LCAweDY0Mzh9LAorCXsweGNjMjcsIDB4MjBhNH0sCisJezB4Y2MyOCwgMHgzMDA0fSwKKwl7MHhjYzI5LCAweDY0Mzh9LAorCXsweGNjMmEsIDB4MjAxNX0sCisJezB4Y2MyYiwgMHgzMDA1fSwKKwl7MHhjYzJjLCAweDU4NTN9LAorCXsweGNjMmQsIDB4MmJkMn0sCisJezB4Y2MyZSwgMHgzMDAyfSwKKwl7MHhjYzJmLCAweDEzNDJ9LAorCXsweGNjMzAsIDB4MjAwY30sCisJezB4Y2MzMSwgMHgzMDBjfSwKKwl7MHhjYzMyLCAweDJmZjd9LAorCXsweGNjMzMsIDB4MzBmN30sCisJezB4Y2MzNCwgMHgyMGM0fSwKKwl7MHhjYzM1LCAweDNjMDR9LAorCXsweGNjMzYsIDB4NjcyNH0sCisJezB4Y2MzNywgMHgyMGM0fSwKKwl7MHhjYzM4LCAweDNjMDR9LAorCXsweGNjMzksIDB4NjcyNH0sCisJezB4Y2MzYSwgMHgyZDMyfSwKKwl7MHhjYzNiLCAweDMwMDJ9LAorCXsweGNjM2MsIDB4MTAwMn0sCisJezB4Y2MzZCwgMHgyMDA4fSwKKwl7MHhjYzNlLCAweDMwMDh9LAorCXsweGNjM2YsIDB4NWM4M30sCisJezB4Y2M0MCwgMHgyZDUyfSwKKwl7MHhjYzQxLCAweDMwMDJ9LAorCXsweGNjNDIsIDB4MTM1Mn0sCisJezB4Y2M0MywgMHgyMDA4fSwKKwl7MHhjYzQ0LCAweDMwMDh9LAorCXsweGNjNDUsIDB4NWM4M30sCisJezB4Y2M0NiwgMHgyZDMyfSwKKwl7MHhjYzQ3LCAweDMwMDJ9LAorCXsweGNjNDgsIDB4MTM1Mn0sCisJezB4Y2M0OSwgMHgyMDFjfSwKKwl7MHhjYzRhLCAweDMwMGN9LAorCXsweGNjNGIsIDB4MjAwZH0sCisJezB4Y2M0YywgMHgzMTBkfSwKKwl7MHhjYzRkLCAweDI4NjJ9LAorCXsweGNjNGUsIDB4MzAxMn0sCisJezB4Y2M0ZiwgMHgxMDAyfSwKKwl7MHhjYzUwLCAweDJlZDJ9LAorCXsweGNjNTEsIDB4MzAwMn0sCisJezB4Y2M1MiwgMHgxMzQyfSwKKwl7MHhjYzUzLCAweDZmNzJ9LAorCXsweGNjNTQsIDB4MTAwMn0sCisJezB4Y2M1NSwgMHg2MjhmfSwKKwl7MHhjYzU2LCAweDI1MTR9LAorCXsweGNjNTcsIDB4M2M2NH0sCisJezB4Y2M1OCwgMHg2NDM2fSwKKwl7MHhjYzU5LCAweDI1MTR9LAorCXsweGNjNWEsIDB4M2M2NH0sCisJezB4Y2M1YiwgMHg2NDM2fSwKKwl7MHhjYzVjLCAweDJmYTR9LAorCXsweGNjNWQsIDB4M2NkNH0sCisJezB4Y2M1ZSwgMHg2NjI0fSwKKwl7MHhjYzVmLCAweDJmYTR9LAorCXsweGNjNjAsIDB4M2NkNH0sCisJezB4Y2M2MSwgMHg2NjI0fSwKKwl7MHhjYzYyLCAweDJmNDV9LAorCXsweGNjNjMsIDB4MzAxNX0sCisJezB4Y2M2NCwgMHg1NjUzfSwKKwl7MHhjYzY1LCAweDJlYjJ9LAorCXsweGNjNjYsIDB4MzAwMn0sCisJezB4Y2M2NywgMHgxM2QyfSwKKwl7MHhjYzY4LCAweDJlZDJ9LAorCXsweGNjNjksIDB4MzAwMn0sCisJezB4Y2M2YSwgMHgxMDAyfSwKKwl7MHhjYzZiLCAweDZmNzJ9LAorCXsweGNjNmMsIDB4MTAwMn0sCisJezB4Y2M2ZCwgMHg2MjhmfSwKKwl7MHhjYzZlLCAweDI2MDJ9LAorCXsweGNjNmYsIDB4MzAxMn0sCisJezB4Y2M3MCwgMHgxMDAyfSwKKwl7MHhjYzcxLCAweDIwMGR9LAorCXsweGNjNzIsIDB4MzIwZH0sCisJezB4Y2M3MywgMHgyODYyfSwKKwl7MHhjYzc0LCAweDMwMTJ9LAorCXsweGNjNzUsIDB4MTAwMn0sCisJezB4Y2M3NiwgMHgyNWM0fSwKKwl7MHhjYzc3LCAweDNjNTR9LAorCXsweGNjNzgsIDB4NjQzN30sCisJezB4Y2M3OSwgMHgyNWM0fSwKKwl7MHhjYzdhLCAweDNjNTR9LAorCXsweGNjN2IsIDB4NjQzN30sCisJezB4Y2M3YywgMHgyMGM0fSwKKwl7MHhjYzdkLCAweDNjMDR9LAorCXsweGNjN2UsIDB4NjcyNH0sCisJezB4Y2M3ZiwgMHgyMGM0fSwKKwl7MHhjYzgwLCAweDNjMDR9LAorCXsweGNjODEsIDB4NjcyNH0sCisJezB4Y2M4MiwgMHg2ZjcyfSwKKwl7MHhjYzgzLCAweDEwMDJ9LAorCXsweGNjODQsIDB4NjI4Zn0sCisJezB4Y2M4NSwgMHgyNmYyfSwKKwl7MHhjYzg2LCAweDMwMTJ9LAorCXsweGNjODcsIDB4MTAwMn0sCisJezB4Y2M4OCwgMHhjNTAzfSwKKwl7MHhjYzg5LCAweGQ1ZDV9LAorCXsweGNjOGEsIDB4YzYwMH0sCisJezB4Y2M4YiwgMHgyYTZkfSwKKwl7MHhjYzhjLCAweGM2MDF9LAorCXsweGNjOGQsIDB4MmE0Y30sCisJezB4Y2M4ZSwgMHhjNjAyfSwKKwl7MHhjYzhmLCAweDAxMTF9LAorCXsweGNjOTAsIDB4YzYwY30sCisJezB4Y2M5MSwgMHg1OTAwfSwKKwl7MHhjYzkyLCAweGM3MTB9LAorCXsweGNjOTMsIDB4MDcwMH0sCisJezB4Y2M5NCwgMHhjNzE4fSwKKwl7MHhjYzk1LCAweDA3MDB9LAorCXsweGNjOTYsIDB4YzcyMH0sCisJezB4Y2M5NywgMHg0NzAwfSwKKwl7MHhjYzk4LCAweGM4MDF9LAorCXsweGNjOTksIDB4N2Y1MH0sCisJezB4Y2M5YSwgMHhjODAyfSwKKwl7MHhjYzliLCAweDc3NjB9LAorCXsweGNjOWMsIDB4YzgwM30sCisJezB4Y2M5ZCwgMHg3ZmNlfSwKKwl7MHhjYzllLCAweGM4MDR9LAorCXsweGNjOWYsIDB4NTcwMH0sCisJezB4Y2NhMCwgMHhjODA1fSwKKwl7MHhjY2ExLCAweDVmMTF9LAorCXsweGNjYTIsIDB4YzgwNn0sCisJezB4Y2NhMywgMHg0NzUxfSwKKwl7MHhjY2E0LCAweGM4MDd9LAorCXsweGNjYTUsIDB4NTdlMX0sCisJezB4Y2NhNiwgMHhjODA4fSwKKwl7MHhjY2E3LCAweDI3MDB9LAorCXsweGNjYTgsIDB4YzgwOX0sCisJezB4Y2NhOSwgMHgwMDAwfSwKKwl7MHhjY2FhLCAweGM4MjF9LAorCXsweGNjYWIsIDB4MDAwMn0sCisJezB4Y2NhYywgMHhjODIyfSwKKwl7MHhjY2FkLCAweDAwMTR9LAorCXsweGNjYWUsIDB4YzgzMn0sCisJezB4Y2NhZiwgMHgxMTg2fSwKKwl7MHhjY2IwLCAweGM4NDd9LAorCXsweGNjYjEsIDB4MWUwMn0sCisJezB4Y2NiMiwgMHhjMDEzfSwKKwl7MHhjY2IzLCAweGYzNDF9LAorCXsweGNjYjQsIDB4YzAxYX0sCisJezB4Y2NiNSwgMHgwNDQ2fSwKKwl7MHhjY2I2LCAweGMwMjR9LAorCXsweGNjYjcsIDB4MTAwMH0sCisJezB4Y2NiOCwgMHhjMDI1fSwKKwl7MHhjY2I5LCAweDBhMDB9LAorCXsweGNjYmEsIDB4YzAyNn0sCisJezB4Y2NiYiwgMHgwYzBjfSwKKwl7MHhjY2JjLCAweGMwMjd9LAorCXsweGNjYmQsIDB4MGMwY30sCisJezB4Y2NiZSwgMHhjMDI5fSwKKwl7MHhjY2JmLCAweDAwYTB9LAorCXsweGNjYzAsIDB4YzAzMH0sCisJezB4Y2NjMSwgMHgwYTAwfSwKKwl7MHhjY2MyLCAweGMwM2N9LAorCXsweGNjYzMsIDB4MDAxY30sCisJezB4Y2NjNCwgMHhjMDA1fSwKKwl7MHhjY2M1LCAweDdhMDZ9LAorCXsweGNjYzYsIDB4MDAwMH0sCisJezB4Y2NjNywgMHgwMDAwfSwKKwl7MHhjY2M4LCAweDYyOGZ9LAorCXsweGNjYzksIDB4MjZmMn0sCisJezB4Y2NjYSwgMHgzMDEyfSwKKwl7MHhjY2NiLCAweDEwMDJ9LAorCXsweGNjY2MsIDB4YzYyMH0sCisJezB4Y2NjZCwgMHgwMDAwfSwKKwl7MHhjY2NlLCAweGM2MjF9LAorCXsweGNjY2YsIDB4MDAzZn0sCisJezB4Y2NkMCwgMHhjNjIyfSwKKwl7MHhjY2QxLCAweDAwMDB9LAorCXsweGNjZDIsIDB4YzYyM30sCisJezB4Y2NkMywgMHgwMDAwfSwKKwl7MHhjY2Q0LCAweGM2MjR9LAorCXsweGNjZDUsIDB4MDAwMH0sCisJezB4Y2NkNiwgMHhjNjI1fSwKKwl7MHhjY2Q3LCAweDAwMDB9LAorCXsweGNjZDgsIDB4YzYyN30sCisJezB4Y2NkOSwgMHgwMDAwfSwKKwl7MHhjY2RhLCAweGM2Mjh9LAorCXsweGNjZGIsIDB4MDAwMH0sCisJezB4Y2NkYywgMHhjNjJjfSwKKwl7MHhjY2RkLCAweDAwMDB9LAorCXsweGNjZGUsIDB4MDAwMH0sCisJezB4Y2NkZiwgMHgwMDAwfSwKKwl7MHhjY2UwLCAweDYyOGZ9LAorCXsweGNjZTEsIDB4ZDAxOX0sCisJezB4Y2NlMiwgMHgyNmYyfSwKKwl7MHhjY2UzLCAweDMwMTJ9LAorCXsweGNjZTQsIDB4MTAwMn0sCisJezB4Y2NlNSwgMHhjMjEwfSwKKwl7MHhjY2U2LCAweDgwMDB9LAorCXsweGNjZTcsIDB4YzIxMH0sCisJezB4Y2NlOCwgMHg4MDEwfSwKKwl7MHhjY2U5LCAweGMyMTB9LAorCXsweGNjZWEsIDB4ODAwMH0sCisJezB4Y2NlYiwgMHhjMjEwfSwKKwl7MHhjY2VjLCAweDAwMDB9LAorCXsweGNjZWQsIDB4MDAwMH0sCisJezB4Y2NlZSwgMHgwMDAwfSwKKwl7MHhjY2VmLCAweDgyMjF9LAorCXsweGNjZjAsIDB4Mjc1Mn0sCisJezB4Y2NmMSwgMHgzMDEyfSwKKwl7MHhjY2YyLCAweDEwMDJ9LAorCXsweGNjZjMsIDB4NmY3Mn0sCisJezB4Y2NmNCwgMHgxMDAyfSwKKwl7MHhjY2Y1LCAweDI4MDZ9LAorCXsweGNjZjYsIDB4MzAwNn0sCisJezB4Y2NmNywgMHgyMDA3fSwKKwl7MHhjY2Y4LCAweDNjYzd9LAorCXsweGNjZjksIDB4ZTE2MX0sCisJezB4Y2NmYSwgMHhjMTcxfSwKKwl7MHhjY2ZiLCAweDYxMzR9LAorCXsweGNjZmMsIDB4NjEzNX0sCisJezB4Y2NmZCwgMHg1NDUzfSwKKwl7MHhjY2ZlLCAweDI4NTh9LAorCXsweGNjZmYsIDB4MzAxOH0sCisJezB4Y2QwMCwgMHgxMzQ4fSwKKwl7MHhjZDAxLCAweDY1MjR9LAorCXsweGNkMDIsIDB4MjdiOH0sCisJezB4Y2QwMywgMHgzMDE4fSwKKwl7MHhjZDA0LCAweDEwMDh9LAorCXsweGNkMDUsIDB4MTAwMn0sCisJezB4Y2QwNiwgMHg2MjhmfSwKKwl7MHhjZDA3LCAweDVkZDN9LAorCXsweGNkMDgsIDB4MjkwNn0sCisJezB4Y2QwOSwgMHgzMDE2fSwKKwl7MHhjZDBhLCAweDEzMDZ9LAorCXsweGNkMGIsIDB4MmZmN30sCisJezB4Y2QwYywgMHgzMGY3fSwKKwl7MHhjZDBkLCAweDYwYjd9LAorCXsweGNkMGUsIDB4ZGZmZH0sCisJezB4Y2QwZiwgMHgwMDA4fSwKKwl7MHhjZDEwLCAweDZmNzJ9LAorCXsweGNkMTEsIDB4MTAwMn0sCisJezB4Y2QxMiwgMHgwMDAwfSwKKwl7MHhjZGZmLCAweDBhMDF9LAorCS8qIGVuZCBvZiBjb2RlIGJsb2NrICovCisKKwkvKiBVbnBhdXNlIHRoZSBtaWNyb2NvbnRyb2xsZXIgdG8gc3RhcnQgcHJvZ3JhbSAqLworCXsweGNhMDAsIDB4MDA4MH0sCisJezB4Y2ExMiwgMHgwMDAwfSwKKwl7MHgwMDAwLCAweDAwMEF9LAkvKiB3YWl0IDEwbXMganVzdCB0byBiZSBzYWZlICovCisJezB4ZmZmZiwgMHhmZmZmfQkvKiB0YWJsZSB0ZXJtaW5hdG9yICovCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI2MjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWcKQEAgLTAsMCArMSwzNiBAQAorY29uZmlnIFVTQl9JUF9DT01NT04KKwl0cmlzdGF0ZSAiVVNCIElQIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgVGhpcyBlbmFibGVzIHB1c2hpbmcgVVNCIHBhY2tldHMgb3ZlciBJUCB0byBhbGxvdyByZW1vdGUKKwkgIG1hY2hpbmVzIGFjY2VzcyB0byBVU0IgZGV2aWNlcyBkaXJlY3RseS4gIEZvciBtb3JlIGRldGFpbHMsCisJICBhbmQgbGlua3MgdG8gdGhlIHVzZXJzcGFjZSB1dGlsaXR5IHByb2dyYW1zIHRvIGxldCB0aGlzIHdvcmsKKwkgIHByb3Blcmx5LCBzZWUgaHR0cDovL3VzYmlwLm5haXN0LmpwLworCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JpcF9jb21tb25fbW9kLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgVVNCX0lQX1ZIQ0lfSENECisJdHJpc3RhdGUgIlVTQiBJUCBjbGllbnQgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX0lQX0NPTU1PTgorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgVGhpcyBlbmFibGVzIHRoZSBVU0IgSVAgaG9zdCBjb250cm9sbGVyIGRyaXZlciB3aGljaCB3aWxsCisJIHJ1biBvbiB0aGUgY2xpZW50IG1hY2hpbmUuCisKKwkgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aGNpX2hjZC4KKworY29uZmlnIFVTQl9JUF9IT1NUCisJdHJpc3RhdGUgIlVTQiBJUCBob3N0IGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9JUF9DT01NT04KKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJIFRoaXMgZW5hYmxlcyB0aGUgVVNCIElQIGRldmljZSBkcml2ZXIgd2hpY2ggd2lsbCBydW4gb24gdGhlCisJIGhvc3QgbWFjaGluZS4KKworCSBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OWY0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMiBAQAorb2JqLSQoQ09ORklHX1VTQl9JUF9DT01NT04pICs9IHVzYmlwX2NvbW1vbl9tb2QubwordXNiaXBfY29tbW9uX21vZC1vYmpzIDo9IHVzYmlwX2NvbW1vbi5vIHVzYmlwX2V2ZW50Lm8KKworb2JqLSQoQ09ORklHX1VTQl9JUF9WSENJX0hDRCkgKz0gdmhjaS1oY2QubwordmhjaS1oY2Qtb2JqcyA6PSB2aGNpX3N5c2ZzLm8gdmhjaV90eC5vIHZoY2lfcngubyB2aGNpX2hjZC5vCisKK29iai0kKENPTkZJR19VU0JfSVBfSE9TVCkgKz0gdXNiaXAubwordXNiaXAtb2JqcyA6PSBzdHViX2Rldi5vIHN0dWJfbWFpbi5vIHN0dWJfcngubyBzdHViX3R4Lm8KKworaWZlcSAoJChDT05GSUdfVVNCX0RFQlVHKSx5KQorCUVYVFJBX0NGTEFHUyArPSAtRERFQlVHCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExYmU1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9SRUFETUUKQEAgLTAsMCArMSw2IEBACitUT0RPOgorCS0gbW9yZSBkaXNjdXNzaW9uIGFib3V0IHRoZSBwcm90b2NvbAorCS0gdGVzdGluZworCS0gcmV2aWV3IG9mIHRoZSB1c2Vyc3BhY2UgaW50ZXJmYWNlCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgZm9yIHRoaXMgY29kZSB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0MWEzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKworc3RydWN0IHN0dWJfZGV2aWNlIHsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXN0cnVjdCB1c2JpcF9kZXZpY2UgdWQ7CisJX191MzIgZGV2aWQ7CisKKwkvKgorCSAqIHN0dWJfcHJpdiBwcmVzZXJ2ZXMgcHJpdmF0ZSBkYXRhIG9mIGVhY2ggdXJiLgorCSAqIEl0IGlzIGFsbG9jYXRlZCBhcyBzdHViX3ByaXZfY2FjaGUgYW5kIGFzc2lnbmVkIHRvIHVyYi0+Y29udGV4dC4KKwkgKgorCSAqIHN0dWJfcHJpdiBpcyBhbHdheXMgbGlua2VkIHRvIGFueSBvbmUgb2YgMyBsaXN0czsKKwkgKglwcml2X2luaXQ6IGxpbmtlZCB0byB0aGlzIHVudGlsIHRoZSBjb21sZXRpb24gb2YgYSB1cmIuCisJICoJcHJpdl90eCAgOiBsaW5rZWQgdG8gdGhpcyBhZnRlciB0aGUgY29tcGxldGlvbiBvZiBhIHVyYi4KKwkgKglwcml2X2ZyZWU6IGxpbmtlZCB0byB0aGlzIGFmdGVyIHRoZSBzZW5kaW5nIG9mIHRoZSByZXN1bHQuCisJICoKKwkgKiBBbnkgb2YgdGhlc2UgbGlzdCBvcGVyYXRpb25zIHNob3VsZCBiZSBsb2NrZWQgYnkgcHJpdl9sb2NrLgorCSAqLworCXNwaW5sb2NrX3QgcHJpdl9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcHJpdl9pbml0OworCXN0cnVjdCBsaXN0X2hlYWQgcHJpdl90eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZfZnJlZTsKKworCS8qIHNlZSBjb21tZW50cyBmb3IgdW5saW5raW5nIGluIHN0dWJfcnguYyAqLworCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX3R4OworCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX2ZyZWU7CisKKworCXdhaXRfcXVldWVfaGVhZF90IHR4X3dhaXRxOworfTsKKworLyogcHJpdmF0ZSBkYXRhIGludG8gdXJiLT5wcml2ICovCitzdHJ1Y3Qgc3R1Yl9wcml2IHsKKwl1bnNpZ25lZCBsb25nIHNlcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKKworCWludCB1bmxpbmtpbmc7Cit9OworCitzdHJ1Y3Qgc3R1Yl91bmxpbmsgeworCXVuc2lnbmVkIGxvbmcgc2VxbnVtOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlfX3UzMiBzdGF0dXM7Cit9OworCisKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqc3R1Yl9wcml2X2NhY2hlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwcm90b3R5cGUgZGVjbGFyYXRpb25zICovCisKKy8qIHN0dWJfdHguYyAqLwordm9pZCBzdHViX2NvbXBsZXRlKHN0cnVjdCB1cmIgKik7Cit2b2lkIHN0dWJfdHhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqKTsKKworLyogc3R1Yl9kZXYuYyAqLworZXh0ZXJuIHN0cnVjdCB1c2JfZHJpdmVyIHN0dWJfZHJpdmVyOworCisvKiBzdHViX3J4LmMgKi8KK3ZvaWQgc3R1Yl9yeF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICopOwordm9pZCBzdHViX2VucXVldWVfcmV0X3VubGluayhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKiwgX191MzIsIF9fdTMyKTsKKworLyogc3R1Yl9tYWluLmMgKi8KK2ludCBtYXRjaF9idXNpZChjaGFyICpidXNpZCk7Cit2b2lkIHN0dWJfZGV2aWNlX2NsZWFudXBfdXJicyhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQ1NWEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJzdHViLmgiCisKKworCitzdGF0aWMgaW50IHN0dWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgc3R1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisKKy8qCisgKiBEZWZpbmUgZGV2aWNlIElEcyBoZXJlIGlmIHlvdSB3YW50IHRvIGV4cGxpY2l0bHkgbGltaXQgZXhwb3J0YWJsZSBkZXZpY2VzLgorICogSW4gdGhlIG1vc3QgY2FzZXMsIHdpbGQgY2FyZCBtYXRjaGluZyB3aWxsIGJlIG9rIGJlY2F1c2UgZHJpdmVyIGJpbmRpbmcgY2FuCisgKiBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5IGJ5IGEgdXNlcmxhbmQgcHJvZ3JhbS4KKyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0dWJfdGFibGVbXSA9IHsKKyNpZiAwCisJLyoganVzdCBhbiBleGFtcGxlICovCisJeyBVU0JfREVWSUNFKDB4MDVhYywgMHgwMzAxKSB9LCAgIC8qIE1hYyAxIGJ1dHRvbiBtb3VzZSAqLworCXsgVVNCX0RFVklDRSgweDA0MzAsIDB4MDAwOSkgfSwgICAvKiBQbGF0IEhvbWUgS2V5Ym9hcmQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTliLCAweDAwMDEpIH0sICAgLyogSW9tZWdhIFVTQiBaaXAgMTAwICovCisJeyBVU0JfREVWSUNFKDB4MDRiMywgMHg0NDI3KSB9LCAgIC8qIElCTSBVU0IgQ0QtUk9NICovCisJeyBVU0JfREVWSUNFKDB4MDVhOSwgMHhhNTExKSB9LCAgIC8qIExpZmVWaWV3IFVTQiBjYW0gKi8KKwl7IFVTQl9ERVZJQ0UoMHg1NWFhLCAweDAyMDEpIH0sICAgLyogSW1hdGlvbiBjYXJkIHJlYWRlciAqLworCXsgVVNCX0RFVklDRSgweDA0NmQsIDB4MDg3MCkgfSwgICAvKiBRY2FtIEV4cHJlc3MoUVYtMzApICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwMTAxKSB9LCAgIC8qIElPLURBVEEgSEQgMTIwR0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5MDQpIH0sICAgLyogSU8tREFUQSBVU0ItRVQvVFggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDAyMDEpIH0sICAgLyogSU8tREFUQSBVU0ItRVQvVFggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOGJiLCAweDI3MDIpIH0sICAgLyogT05LWU8gVVNCIFNwZWFrZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YjIpIH0sICAgLyogTG9naWNvb2wgUWNhbSA0MDAwIFBybyAqLworI2VuZGlmCisJLyogbWFnaWMgZm9yIHdpbGQgY2FyZCAqLworCXsgLmRyaXZlcl9pbmZvID0gMSB9LAorCXsgMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzdHViX3RhYmxlKTsKKworc3RydWN0IHVzYl9kcml2ZXIgc3R1Yl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInVzYmlwIiwKKwkucHJvYmUJCT0gc3R1Yl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHN0dWJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBzdHViX3RhYmxlLAorfTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBEZWZpbmUgc3lzZnMgZW50cmllcyBmb3IgYSB1c2JpcC1ib3VuZCBkZXZpY2UgKi8KKworCisvKgorICogdXNiaXBfc3RhdHVzIHNob3dzIHN0YXR1cyBvZiB1c2JpcCBhcyBsb25nIGFzIHRoaXMgZHJpdmVyIGlzIGJvdW5kIHRvIHRoZQorICogdGFyZ2V0IGRldmljZS4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFzZGV2KSB7CisJCWRldl9lcnIoZGV2LCAic2RldiBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3Bpbl9sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKwlzdGF0dXMgPSBzZGV2LT51ZC5zdGF0dXM7CisJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHN0YXR1cyk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodXNiaXBfc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7CisKKy8qCisgKiB1c2JpcF9zb2NrZmQgZ2V0cyBhIHNvY2tldCBkZXNjcmlwdG9yIG9mIGFuIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9uIHRoYXQKKyAqIGlzIHVzZWQgdG8gdHJhbnNmZXIgdXNiaXAgcmVxdWVzdHMgYnkga2VybmVsIHRocmVhZHMuIC0xIGlzIGEgbWFnaWMgbnVtYmVyCisgKiBieSB3aGljaCB1c2JpcCBjb25uZWN0aW9uIGlzIGZpbmlzaGVkLgorICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9zb2NrZmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgc29ja2ZkID0gMDsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQ7CisKKwlpZiAoIXNkZXYpIHsKKwkJZGV2X2VycihkZXYsICJzZGV2IGlzIG51bGxcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzc2NhbmYoYnVmLCAiJWQiLCAmc29ja2ZkKTsKKworCWlmIChzb2NrZmQgIT0gLTEpIHsKKwkJZGV2X2luZm8oZGV2LCAic3R1YiB1cFxuIik7CisKKwkJc3Bpbl9sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKworCQlpZiAoc2Rldi0+dWQuc3RhdHVzICE9IFNERVZfU1RfQVZBSUxBQkxFKSB7CisJCQlkZXZfZXJyKGRldiwgIm5vdCByZWFkeVxuIik7CisJCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXNvY2tldCA9IHNvY2tmZF90b19zb2NrZXQoc29ja2ZkKTsKKwkJaWYgKCFzb2NrZXQpIHsKKwkJCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKyNpZiAwCisJCXNldG5vZGVsYXkoc29ja2V0KTsKKwkJc2V0a2VlcGFsaXZlKHNvY2tldCk7CisJCXNldHJldXNlKHNvY2tldCk7CisjZW5kaWYKKworCQlzZGV2LT51ZC50Y3Bfc29ja2V0ID0gc29ja2V0OworCisJCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKworCQl1c2JpcF9zdGFydF90aHJlYWRzKCZzZGV2LT51ZCk7CisKKwkJc3Bpbl9sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKwkJc2Rldi0+dWQuc3RhdHVzID0gU0RFVl9TVF9VU0VEOworCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICJzdHViIGRvd25cbiIpOworCisJCXNwaW5fbG9jaygmc2Rldi0+dWQubG9jayk7CisJCWlmIChzZGV2LT51ZC5zdGF0dXMgIT0gU0RFVl9TVF9VU0VEKSB7CisJCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisKKwkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9ET1dOKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodXNiaXBfc29ja2ZkLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9zb2NrZmQpOworCitzdGF0aWMgaW50IHN0dWJfYWRkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9zdGF0dXMpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3N0YXR1czsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9zb2NrZmQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3NvY2tmZDsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9kZWJ1Zyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZGVidWc7CisKKwlyZXR1cm4gMDsKKworZXJyX2RlYnVnOgorCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9zb2NrZmQpOworCitlcnJfc29ja2ZkOgorCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9zdGF0dXMpOworCitlcnJfc3RhdHVzOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHN0dWJfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc3RhdHVzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc29ja2ZkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfZGVidWcpOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFuIGV2ZW50IGhhbmRsZXIgdGhyZWFkICovCisKK3N0YXRpYyB2b2lkIHN0dWJfc2h1dGRvd25fY29ubmVjdGlvbihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCBzdHViX2RldmljZSwgdWQpOworCisJLyoKKwkgKiBXaGVuIHJlbW92aW5nIGFuIGV4cG9ydGVkIGRldmljZSwga2VybmVsIHBhbmljIHNvbWV0aW1lcyBvY2N1cnJlZAorCSAqIGFuZCB0aGVuIEVJUCB3YXMgc2tfd2FpdF9kYXRhIG9mIHN0dWJfcnggdGhyZWFkLiBJcyB0aGlzIGJlY2F1c2UKKwkgKiBza193YWl0X2RhdGEgcmV0dXJuZWQgdGhvdWdoIHN0dWJfcnggdGhyZWFkIHdhcyBhbHJlYWR5IGZpbmlzaGVkIGJ5CisJICogc3RlcCAxPworCSAqLworCWlmICh1ZC0+dGNwX3NvY2tldCkgeworCQl1ZGJnKCJzaHV0ZG93biB0Y3Bfc29ja2V0ICVwXG4iLCB1ZC0+dGNwX3NvY2tldCk7CisJCWtlcm5lbF9zb2NrX3NodXRkb3duKHVkLT50Y3Bfc29ja2V0LCBTSFVUX1JEV1IpOworCX0KKworCS8qIDEuIHN0b3AgdGhyZWFkcyAqLworCXVzYmlwX3N0b3BfdGhyZWFkcyh1ZCk7CisKKwkvKiAyLiBjbG9zZSB0aGUgc29ja2V0ICovCisJLyoKKwkgKiB0Y3Bfc29ja2V0IGlzIGZyZWVkIGFmdGVyIHRocmVhZHMgYXJlIGtpbGxlZC4KKwkgKiBTbyB1c2JpcF94bWl0IGRvIG5vdCB0b3VjaCBOVUxMIHNvY2tldC4KKwkgKi8KKwlpZiAodWQtPnRjcF9zb2NrZXQpIHsKKwkJc29ja19yZWxlYXNlKHVkLT50Y3Bfc29ja2V0KTsKKwkJdWQtPnRjcF9zb2NrZXQgPSBOVUxMOworCX0KKworCS8qIDMuIGZyZWUgdXNlZCBkYXRhICovCisJc3R1Yl9kZXZpY2VfY2xlYW51cF91cmJzKHNkZXYpOworCisJLyogNC4gZnJlZSBzdHViX3VubGluayAqLworCXsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHN0dWJfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnNkZXYtPnVubGlua190eCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCQlrZnJlZSh1bmxpbmspOworCQl9CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLAorCQkJCQkJICZzZGV2LT51bmxpbmtfZnJlZSwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCQlrZnJlZSh1bmxpbmspOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHViX2RldmljZV9yZXNldChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCBzdHViX2RldmljZSwgdWQpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOworCWludCByZXQ7CisKKwl1ZGJnKCJkZXZpY2UgcmVzZXQiKTsKKwlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVkZXYsIHNkZXYtPmludGVyZmFjZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAibG9jayBmb3IgcmVzZXRcbiIpOworCisJCXNwaW5fbG9jaygmdWQtPmxvY2spOworCQl1ZC0+c3RhdHVzID0gU0RFVl9TVF9FUlJPUjsKKwkJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKKworCQlyZXR1cm47CisJfQorCisJLyogdHJ5IHRvIHJlc2V0IHRoZSBkZXZpY2UgKi8KKwlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKHVkZXYpOworCisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisKKwlzcGluX2xvY2soJnVkLT5sb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImRldmljZSByZXNldFxuIik7CisJCXVkLT5zdGF0dXMgPSBTREVWX1NUX0VSUk9SOworCisJfSBlbHNlIHsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwgImRldmljZSByZXNldFxuIik7CisJCXVkLT5zdGF0dXMgPSBTREVWX1NUX0FWQUlMQUJMRTsKKworCX0KKwlzcGluX3VubG9jaygmdWQtPmxvY2spOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzdHViX2RldmljZV91bnVzYWJsZShzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzcGluX2xvY2soJnVkLT5sb2NrKTsKKwl1ZC0+c3RhdHVzID0gU0RFVl9TVF9FUlJPUjsKKwlzcGluX3VubG9jaygmdWQtPmxvY2spOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogc3R1Yl9kZXZpY2VfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyBzdHViX2RldmljZSBzdHJ1Y3QKKyAqIEBpbnRlcmZhY2U6IHVzYl9pbnRlcmZhY2Ugb2YgYSBuZXcgZGV2aWNlCisgKgorICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5ldyBzdHViX2RldmljZSBzdHJ1Y3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnN0dWJfZGV2aWNlX2FsbG9jKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2OworCWludCBidXNudW0gPSBpbnRlcmZhY2VfdG9fYnVzbnVtKGludGVyZmFjZSk7CisJaW50IGRldm51bSA9IGludGVyZmFjZV90b19kZXZudW0oaW50ZXJmYWNlKTsKKworCWRldl9kYmcoJmludGVyZmFjZS0+ZGV2LCAiYWxsb2NhdGluZyBzdHViIGRldmljZSIpOworCisJLyogeWVzLCBpdCdzIGEgbmV3IGRldmljZSAqLworCXNkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R1Yl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkZXYpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJubyBtZW1vcnkgZm9yIHN0dWJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2Rldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJLyoKKwkgKiBkZXZpZCBpcyBkZWZpbmVkIHdpdGggZGV2bnVtIHdoZW4gdGhpcyBkcml2ZXIgaXMgZmlyc3QgYWxsb2NhdGVkLgorCSAqIGRldm51bSBtYXkgY2hhbmdlIGxhdGVyIGlmIGEgZGV2aWNlIGlzIHJlc2V0LiBIb3dldmVyLCBkZXZpZCBuZXZlcgorCSAqIGNoYW5nZXMgZHVyaW5nIGEgdXNiaXAgY29ubmVjdGlvbi4KKwkgKi8KKwlzZGV2LT5kZXZpZCAgICAgPSAoYnVzbnVtIDw8IDE2KSB8IGRldm51bTsKKworCXVzYmlwX3Rhc2tfaW5pdCgmc2Rldi0+dWQudGNwX3J4LCAic3R1Yl9yeCIsIHN0dWJfcnhfbG9vcCk7CisJdXNiaXBfdGFza19pbml0KCZzZGV2LT51ZC50Y3BfdHgsICJzdHViX3R4Iiwgc3R1Yl90eF9sb29wKTsKKworCXNkZXYtPnVkLnNpZGUgPSBVU0JJUF9TVFVCOworCXNkZXYtPnVkLnN0YXR1cyA9IFNERVZfU1RfQVZBSUxBQkxFOworCS8qIHNkZXYtPnVkLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCisJc3Bpbl9sb2NrX2luaXQoJnNkZXYtPnVkLmxvY2spOworCXNkZXYtPnVkLnRjcF9zb2NrZXQgPSBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJnNkZXYtPnByaXZfaW5pdCk7CisJSU5JVF9MSVNUX0hFQUQoJnNkZXYtPnByaXZfdHgpOworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5wcml2X2ZyZWUpOworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT51bmxpbmtfZnJlZSk7CisJSU5JVF9MSVNUX0hFQUQoJnNkZXYtPnVubGlua190eCk7CisJLyogc2Rldi0+cHJpdl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOyAqLworCXNwaW5fbG9ja19pbml0KCZzZGV2LT5wcml2X2xvY2spOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2Rldi0+dHhfd2FpdHEpOworCisJc2Rldi0+dWQuZWhfb3BzLnNodXRkb3duID0gc3R1Yl9zaHV0ZG93bl9jb25uZWN0aW9uOworCXNkZXYtPnVkLmVoX29wcy5yZXNldCAgICA9IHN0dWJfZGV2aWNlX3Jlc2V0OworCXNkZXYtPnVkLmVoX29wcy51bnVzYWJsZSA9IHN0dWJfZGV2aWNlX3VudXNhYmxlOworCisJdXNiaXBfc3RhcnRfZWgoJnNkZXYtPnVkKTsKKworCXVkYmcoInJlZ2lzdGVyIG5ldyBpbnRlcmZhY2VcbiIpOworCXJldHVybiBzZGV2OworfQorCitzdGF0aWMgaW50IHN0dWJfZGV2aWNlX2ZyZWUoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCWlmICghc2RldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZnJlZShzZGV2KTsKKwl1ZGJnKCJrZnJlZSB1ZGV2IG9rXG4iKTsKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBJZiBhIHVzYiBkZXZpY2UgaGFzIG11bHRpcGxlIGFjdGl2ZSBpbnRlcmZhY2VzLCB0aGlzIGRyaXZlciBpcyBib3VuZCB0byBhbGwKKyAqIHRoZSBhY3RpdmUgaW50ZXJmYWNlcy4gSG93ZXZlciwgdXNiaXAgZXhwb3J0cyAqYSogdXNiIGRldmljZSAoaS5lLiwgbm90ICphbioKKyAqIGFjdGl2ZSBpbnRlcmZhY2UpLiBDdXJyZW50bHksIGEgdXNlcmxhbmQgcHJvZ3JhbSBtdXN0IGVuc3VyZSB0aGF0IGl0CisgKiBsb29rcyBhdCB0aGUgdXNiaXAncyBzeXNmcyBlbnRyaWVzIG9mIG9ubHkgdGhlIGZpcnN0IGFjdGl2ZSBpbnRlcmZhY2UuCisgKgorICogVE9ETzogdXNlICJzdHJ1Y3QgdXNiX2RldmljZV9kcml2ZXIiIHRvIGJpbmQgYSB1c2IgZGV2aWNlLgorICogSG93ZXZlciwgaXQgc2VlbXMgaXQgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiBtYWlubGluZSBrZXJuZWwgeWV0CisgKiAoMi42LjE5LjIpLgorICovCitzdGF0aWMgaW50IHN0dWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IE5VTEw7CisJY2hhciAqdWRldl9idXNpZCA9IGludGVyZmFjZS0+ZGV2LnBhcmVudC0+YnVzX2lkOworCWludCBlcnIgPSAwOworCisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJFbnRlclxuIik7CisKKwkvKiBjaGVjayB3ZSBzaG91bGQgY2xhaW0gb3Igbm90IGJ5IGJ1c2lkX3RhYmxlICovCisJaWYgKG1hdGNoX2J1c2lkKHVkZXZfYnVzaWQpKSB7CisJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKKwkJCSAidGhpcyBkZXZpY2UgJXMgaXMgbm90IGluIG1hdGNoX2J1c2lkIHRhYmxlLiBza2lwIVxuIiwKKwkJCSB1ZGV2X2J1c2lkKTsKKworCQkvKgorCQkgKiBSZXR1cm4gdmFsdWUgc2hvdWxkIGJlIEVOT0RFViBvciBFTk9YSU8gdG8gY29udGludWUgdHJ5aW5nCisJCSAqIG90aGVyIG1hdGNoZWQgZHJpdmVycyBieSB0aGUgZHJpdmVyIGNvcmUuCisJCSAqIFNlZSBkcml2ZXJfcHJvYmVfZGV2aWNlKCkgaW4gZHJpdmVyL2Jhc2UvZGQuYworCQkgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09ICBVU0JfQ0xBU1NfSFVCKSB7CisJCXVkYmcoInRoaXMgZGV2aWNlICVzIGlzIGEgdXNiIGh1YiBkZXZpY2UuIHNraXAhXG4iLAorCQkJCQkJCQl1ZGV2X2J1c2lkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFzdHJjbXAodWRldi0+YnVzLT5idXNfbmFtZSwgInZoY2lfaGNkIikpIHsKKwkJdWRiZygidGhpcyBkZXZpY2UgJXMgaXMgYXR0YWNoZWQgb24gdmhjaV9oY2QuIHNraXAhXG4iLAorCQkJCQkJCQl1ZGV2X2J1c2lkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogb2suIHRoaXMgaXMgbXkgZGV2aWNlLiAqLworCXNkZXYgPSBzdHViX2RldmljZV9hbGxvYyhpbnRlcmZhY2UpOworCWlmICghc2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IvSVAgU3R1YjogcmVnaXN0ZXIgYSBuZXcgaW50ZXJmYWNlICIKKwkJICIoYnVzICV1IGRldiAldSBpZm4gJXUpXG4iLCB1ZGV2LT5idXMtPmJ1c251bSwgdWRldi0+ZGV2bnVtLAorCQkgaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCS8qIHNldCBwcml2YXRlIGRhdGEgdG8gdXNiX2ludGVyZmFjZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBzZGV2KTsKKworCWVyciA9IHN0dWJfYWRkX2ZpbGVzKCZpbnRlcmZhY2UtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImNyZWF0ZSBzeXNmcyBmaWxlcyBmb3IgJXNcbiIsCisJCQl1ZGV2X2J1c2lkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogY2FsbGVkIGluIHVzYl9kaXNjb25uZWN0KCkgb3IgdXNiX2RlcmVnaXN0ZXIoKQorICogYnV0IG9ubHkgaWYgYWN0Y29uZmlnKGFjdGl2ZSBjb25maWd1cmF0aW9uKSBleGlzdHMKKyAqLworc3RhdGljIHZvaWQgc3R1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJdWRiZygiRW50ZXJcbiIpOworCisJLyogZ2V0IHN0dWJfZGV2aWNlICovCisJaWYgKCFzZGV2KSB7CisJCWVycigiIGNvdWxkIG5vdCBnZXQgZGV2aWNlIGZyb20gaW50ZWZhY2UgZGF0YSIpOworCQkvKiBCVUcoKTsgKi8KKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCisJLyoKKwkgKiBOT1RFOgorCSAqIHJ4L3R4IHRocmVhZHMgYXJlIGludm9rZWQgZm9yIGVhY2ggdXNiX2RldmljZS4KKwkgKi8KKwlzdHViX3JlbW92ZV9maWxlcygmaW50ZXJmYWNlLT5kZXYpOworCisJLyogMS4gc2h1dGRvd24gdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLworCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfUkVNT1ZFRCk7CisKKwkvKiAyLiB3YWl0IGZvciB0aGUgc3RvcCBvZiB0aGUgZXZlbnQgaGFuZGxlciAqLworCXVzYmlwX3N0b3BfZWgoJnNkZXYtPnVkKTsKKworCS8qIDMuIGZyZWUgc2RldiAqLworCXN0dWJfZGV2aWNlX2ZyZWUoc2Rldik7CisKKworCXVkYmcoImJ5ZVxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2NWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX21haW4uYwpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAic3R1Yi5oIgorCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRha2FoaXJvIEhpcm9mdWNoaSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlN0dWIgRHJpdmVyIGZvciBVU0IvSVAiCisKKy8qIHN0dWJfcHJpdiBpcyBhbGxvY2F0ZWQgZnJvbSBzdHViX3ByaXZfY2FjaGUgKi8KK3N0cnVjdCBrbWVtX2NhY2hlICpzdHViX3ByaXZfY2FjaGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERlZmluZSBzeXNmcyBlbnRyaWVzIGZvciB0aGUgdXNiaXAgZHJpdmVyICovCisKKworLyoKKyAqIGJ1c2lkX3RhYmxlcyBkZWZpbmVzIG1hdGNoaW5nIGJ1c2lkcyB0aGF0IHVzYmlwIGNhbiBncmFiLiBBIHVzZXIgY2FuIGNoYW5nZQorICogZHluYW1pY2FsbHkgd2hhdCBkZXZpY2UgaXMgbG9jYWxseSB1c2VkIGFuZCB3aGF0IGRldmljZSBpcyBleHBvcnRlZCB0byBhCisgKiByZW1vdGUgaG9zdC4KKyAqLworI2RlZmluZSBNQVhfQlVTSUQgMTYKK3N0YXRpYyBjaGFyIGJ1c2lkX3RhYmxlW01BWF9CVVNJRF1bQlVTX0lEX1NJWkVdOworc3RhdGljIHNwaW5sb2NrX3QgYnVzaWRfdGFibGVfbG9jazsKKworCitpbnQgbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKQorCQlpZiAoYnVzaWRfdGFibGVbaV1bMF0pCisJCQlpZiAoIXN0cm5jbXAoYnVzaWRfdGFibGVbaV0sIGJ1c2lkLCBCVVNfSURfU0laRSkpIHsKKwkJCQkvKiBhbHJlYWR5IHJlZ2lzdGVyZCAqLworCQkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X21hdGNoX2J1c2lkKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaTsKKwljaGFyICpvdXQgPSBidWY7CisKKwlzcGluX2xvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKQorCQlpZiAoYnVzaWRfdGFibGVbaV1bMF0pCisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyAiLCBidXNpZF90YWJsZVtpXSk7CisKKwlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKworc3RhdGljIGludCBhZGRfbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpCit7CisJaW50IGk7CisKKwlpZiAoIW1hdGNoX2J1c2lkKGJ1c2lkKSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKQorCQlpZiAoIWJ1c2lkX3RhYmxlW2ldWzBdKSB7CisJCQlzdHJuY3B5KGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTX0lEX1NJWkUpOworCQkJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKworCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBkZWxfbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKQorCQlpZiAoIXN0cm5jbXAoYnVzaWRfdGFibGVbaV0sIGJ1c2lkLCBCVVNfSURfU0laRSkpIHsKKwkJCS8qIGZvdW5kICovCisJCQltZW1zZXQoYnVzaWRfdGFibGVbaV0sIDAsIEJVU19JRF9TSVpFKTsKKwkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisKKwlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX21hdGNoX2J1c2lkKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50KQoreworCWludCBsZW47CisJY2hhciBidXNpZFtCVVNfSURfU0laRV07CisKKwlpZiAoY291bnQgPCA1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHN0cm5sZW4oKSBkb2VzIG5vdCBpbmNsdWRlIFwwICovCisJbGVuID0gc3RybmxlbihidWYgKyA0LCBCVVNfSURfU0laRSk7CisKKwkvKiBidXNpZCBuZWVkcyB0byBpbmNsdWRlIFwwIHRlcm1pbmF0aW9uICovCisJaWYgKCEobGVuIDwgQlVTX0lEX1NJWkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cm5jcHkoYnVzaWQsIGJ1ZiArIDQsIEJVU19JRF9TSVpFKTsKKworCisJaWYgKCFzdHJuY21wKGJ1ZiwgImFkZCAiLCA0KSkgeworCQlpZiAoYWRkX21hdGNoX2J1c2lkKGJ1c2lkKSA8IDApCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZWxzZSB7CisJCQl1ZGJnKCJhZGQgYnVzaWQgJXNcbiIsIGJ1c2lkKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAiZGVsICIsIDQpKSB7CisJCWlmIChkZWxfbWF0Y2hfYnVzaWQoYnVzaWQpIDwgMCkKKwkJCXJldHVybiAtRU5PREVWOworCQllbHNlIHsKKwkJCXVkYmcoImRlbCBidXNpZCAlc1xuIiwgYnVzaWQpOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgRFJJVkVSX0FUVFIobWF0Y2hfYnVzaWQsIFNfSVJVU1J8U19JV1VTUiwgc2hvd19tYXRjaF9idXNpZCwKKwkJCQkJCQlzdG9yZV9tYXRjaF9idXNpZCk7CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDbGVhbnVwIGZ1bmN0aW9ucyB1c2VkIHRvIGZyZWUgcHJpdmF0ZSBkYXRhICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl9wcml2ICpzdHViX3ByaXZfcG9wX2Zyb21fbGlzdGhlYWQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdGhlYWQpCit7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdiwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsIGxpc3RoZWFkLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZwcml2LT5saXN0KTsKKwkJcmV0dXJuIHByaXY7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl9wcml2ICpzdHViX3ByaXZfcG9wKHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3ByaXYgKnByaXY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlwcml2ID0gc3R1Yl9wcml2X3BvcF9mcm9tX2xpc3RoZWFkKCZzZGV2LT5wcml2X2luaXQpOworCWlmIChwcml2KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHJpdjsKKwl9CisKKwlwcml2ID0gc3R1Yl9wcml2X3BvcF9mcm9tX2xpc3RoZWFkKCZzZGV2LT5wcml2X3R4KTsKKwlpZiAocHJpdikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHByaXY7CisJfQorCisJcHJpdiA9IHN0dWJfcHJpdl9wb3BfZnJvbV9saXN0aGVhZCgmc2Rldi0+cHJpdl9mcmVlKTsKKwlpZiAocHJpdikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHByaXY7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgc3R1Yl9kZXZpY2VfY2xlYW51cF91cmJzKHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OworCisJdWRiZygiZnJlZSBzZGV2ICVwXG4iLCBzZGV2KTsKKworCXdoaWxlICgocHJpdiA9IHN0dWJfcHJpdl9wb3Aoc2RldikpKSB7CisJCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKKworCQl1ZGJnKCIgICBmcmVlIHVyYiAlcFxuIiwgdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisKKwkJa21lbV9jYWNoZV9mcmVlKHN0dWJfcHJpdl9jYWNoZSwgcHJpdik7CisKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpCisJCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwkJaWYgKHVyYi0+c2V0dXBfcGFja2V0ICE9IE5VTEwpCisJCQlrZnJlZSh1cmItPnNldHVwX3BhY2tldCk7CisKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zdHViX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3R1Yl9wcml2X2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInN0dWJfcHJpdiIsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHN0dWJfcHJpdiksIDAsCisJCQkJCSAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCisJaWYgKCFzdHViX3ByaXZfY2FjaGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBjcmVhdGUgc3R1Yl9wcml2X2NhY2hlIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzdHViX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJCWdvdG8gZXJyb3JfdXNiX3JlZ2lzdGVyOworCX0KKworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjoiCisJICAgICAgIERSSVZFUl9ERVNDICI6IiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKworCW1lbXNldChidXNpZF90YWJsZSwgMCwgc2l6ZW9mKGJ1c2lkX3RhYmxlKSk7CisJc3Bpbl9sb2NrX2luaXQoJmJ1c2lkX3RhYmxlX2xvY2spOworCisJcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZzdHViX2RyaXZlci5kcnZ3cmFwLmRyaXZlciwKKwkJCQkgJmRyaXZlcl9hdHRyX21hdGNoX2J1c2lkKTsKKworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IGNyZWF0ZSBkcml2ZXIgc3lzZnNcbiIpOworCQlnb3RvIGVycm9yX2NyZWF0ZV9maWxlOworCX0KKworCXJldHVybiByZXQ7CitlcnJvcl9jcmVhdGVfZmlsZToKKwl1c2JfZGVyZWdpc3Rlcigmc3R1Yl9kcml2ZXIpOworZXJyb3JfdXNiX3JlZ2lzdGVyOgorCWttZW1fY2FjaGVfZGVzdHJveShzdHViX3ByaXZfY2FjaGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc3R1Yl9leGl0KHZvaWQpCit7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZzdHViX2RyaXZlci5kcnZ3cmFwLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl9tYXRjaF9idXNpZCk7CisKKwkvKgorCSAqIGRlcmVnaXN0ZXIoKSBjYWxscyBzdHViX2Rpc2Nvbm5lY3QoKSBmb3IgYWxsIGRldmljZXMuIERldmljZQorCSAqIHNwZWNpZmljIGRhdGEgaXMgY2xlYXJlZCBpbiBzdHViX2Rpc2Nvbm5lY3QoKS4KKwkgKi8KKwl1c2JfZGVyZWdpc3Rlcigmc3R1Yl9kcml2ZXIpOworCisJa21lbV9jYWNoZV9kZXN0cm95KHN0dWJfcHJpdl9jYWNoZSk7Cit9CisKK21vZHVsZV9pbml0KHVzYl9zdHViX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3N0dWJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZTg5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKQEAgLTAsMCArMSw2MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJzdHViLmgiCisjaW5jbHVkZSAiLi4vLi4vdXNiL2NvcmUvaGNkLmgiCisKKworc3RhdGljIGludCBpc19jbGVhcl9oYWx0X2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisKKwkgcmV0dXJuIChyZXEtPmJSZXF1ZXN0ID09IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSkgJiYKKwkJIChyZXEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpICYmCisJCSAocmVxLT53VmFsdWUgPT0gVVNCX0VORFBPSU5UX0hBTFQpOworfQorCitzdGF0aWMgaW50IGlzX3NldF9pbnRlcmZhY2VfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKworCXJldHVybiAocmVxLT5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0UpICYmCisJCSAgIChyZXEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKTsKK30KKworc3RhdGljIGludCBpc19zZXRfY29uZmlndXJhdGlvbl9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCisJcmV0dXJuIChyZXEtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04pICYmCisJCSAgIChyZXEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKTsKK30KKworc3RhdGljIGludCBpc19yZXNldF9kZXZpY2VfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJX191MTYgdmFsdWU7CisJX191MTYgaW5kZXg7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwl2YWx1ZSA9IGxlMTZfdG9fY3B1KHJlcS0+d1ZhbHVlKTsKKwlpbmRleCA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KTsKKworCWlmICgocmVxLT5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9GRUFUVVJFKSAmJgorCQkJKHJlcS0+YlJlcXVlc3RUeXBlID09IFVTQl9SVF9QT1JUKSAmJgorCQkJKHZhbHVlID0gVVNCX1BPUlRfRkVBVF9SRVNFVCkpIHsKKwkJZGJnX3N0dWJfcngoInJlc2V0X2RldmljZV9jbWQsIHBvcnQgJXVcbiIsIGluZGV4KTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR3ZWFrX2NsZWFyX2hhbHRfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJaW50IHRhcmdldF9lbmRwOworCWludCB0YXJnZXRfZGlyOworCWludCB0YXJnZXRfcGlwZTsKKwlpbnQgcmV0OworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisKKwkvKgorCSAqIFRoZSBzdGFsbGVkIGVuZHBvaW50IGlzIHNwZWNpZmllZCBpbiB0aGUgd0luZGV4IHZhbHVlLiBUaGUgZW5kcG9pbnQKKwkgKiBvZiB0aGUgdXJiIGlzIHRoZSB0YXJnZXQgb2YgdGhpcyBjbGVhcl9oYWx0IHJlcXVlc3QgKGkuZS4sIGNvbnRyb2wKKwkgKiBlbmRwb2ludCkuCisJICovCisJdGFyZ2V0X2VuZHAgPSBsZTE2X3RvX2NwdShyZXEtPndJbmRleCkgJiAweDAwMGY7CisKKwkvKiB0aGUgc3RhbGxlZCBlbmRwb2ludCBkaXJlY3Rpb24gaXMgSU4gb3IgT1VUPy4gVVNCX0RJUl9JTiBpcyAweDgwLiAgKi8KKwl0YXJnZXRfZGlyID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpICYgMHgwMDgwOworCisJaWYgKHRhcmdldF9kaXIpCisJCXRhcmdldF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHVyYi0+ZGV2LCB0YXJnZXRfZW5kcCk7CisJZWxzZQorCQl0YXJnZXRfcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1cmItPmRldiwgdGFyZ2V0X2VuZHApOworCisJcmV0ID0gdXNiX2NsZWFyX2hhbHQodXJiLT5kZXYsIHRhcmdldF9waXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJdWluZm8oImNsZWFyX2hhbHQgZXJyb3I6IGRldm51bSAlZCBlbmRwICVkLCAlZFxuIiwKKwkJCQl1cmItPmRldi0+ZGV2bnVtLCB0YXJnZXRfZW5kcCwgcmV0KTsKKwllbHNlCisJCXVpbmZvKCJjbGVhcl9oYWx0IGRvbmU6IGRldm51bSAlZCBlbmRwICVkXG4iLAorCQkJCXVyYi0+ZGV2LT5kZXZudW0sIHRhcmdldF9lbmRwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHdlYWtfc2V0X2ludGVyZmFjZV9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKwlfX3UxNiBhbHRlcm5hdGU7CisJX191MTYgaW50ZXJmYWNlOworCWludCByZXQ7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwlhbHRlcm5hdGUgPSBsZTE2X3RvX2NwdShyZXEtPndWYWx1ZSk7CisJaW50ZXJmYWNlID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpOworCisJZGJnX3N0dWJfcngoInNldF9pbnRlcmZhY2U6IGluZiAldSBhbHQgJXVcbiIsIGludGVyZmFjZSwgYWx0ZXJuYXRlKTsKKworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVyYi0+ZGV2LCBpbnRlcmZhY2UsIGFsdGVybmF0ZSk7CisJaWYgKHJldCA8IDApCisJCXVpbmZvKCJzZXRfaW50ZXJmYWNlIGVycm9yOiBpbmYgJXUgYWx0ICV1LCAlZFxuIiwKKwkJCQlpbnRlcmZhY2UsIGFsdGVybmF0ZSwgcmV0KTsKKwllbHNlCisJCXVpbmZvKCJzZXRfaW50ZXJmYWNlIGRvbmU6IGluZiAldSBhbHQgJXVcbiIsCisJCQkJCQkJaW50ZXJmYWNlLAorCQkJCQkJCWFsdGVybmF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3ZWFrX3NldF9jb25maWd1cmF0aW9uX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCV9fdTE2IGNvbmZpZzsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCWNvbmZpZyA9IGxlMTZfdG9fY3B1KHJlcS0+d1ZhbHVlKTsKKworCS8qCisJICogSSBoYXZlIG5ldmVyIHNlZW4gYSBtdWx0aS1jb25maWcgZGV2aWNlLiBWZXJ5IHJhcmUuCisJICogRm9yIG1vc3QgZGV2aWNlcywgdGhpcyB3aWxsIGJlIGNhbGxlZCB0byBjaG9vc2UgYSBkZWZhdWx0CisJICogY29uZmlndXJhdGlvbiBvbmx5IG9uY2UgaW4gYW4gaW5pdGlhbGl6YXRpb24gcGhhc2UuCisJICoKKwkgKiBzZXRfY29uZmlndXJhdGlvbiBtYXkgY2hhbmdlIGEgZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXZpY2UKKwkgKiBkcml2ZXJzIHdpbGwgYmUgdW5ib3VuZCBhbmQgYXNzaWduZWQgZm9yIGEgbmV3IGRldmljZSBjb25maWd1cmF0aW9uLgorCSAqIFRoaXMgbWVhbnMgdGhpcyB1c2JpcCBkcml2ZXIgd2lsbCBiZSBhbHNvIHVuYm91bmQgd2hlbiBjYWxsZWQsIHRoZW4KKwkgKiBldmVudHVhbGx5IHJlYXNzaWduZWQgdG8gdGhlIGRldmljZSBhcyBmYXIgYXMgZHJpdmVyIG1hdGNoaW5nCisJICogY29uZGl0aW9uIGlzIGtlcHQuCisJICoKKwkgKiBVbmZvcnR1bmF0ZWxseSwgYW4gZXhpc3RpbmcgdXNiaXAgY29ubmVjdGlvbiB3aWxsIGJlIGRyb3BwZWQKKwkgKiBkdWUgdG8gdGhpcyBkcml2ZXIgdW5iaW5kaW5nLiBTbywgc2tpcCBoZXJlLgorCSAqIEEgdXNlciBtYXkgbmVlZCB0byBzZXQgYSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gdmFsdWUgYmVmb3JlCisJICogZXhwb3J0aW5nIHRoZSBkZXZpY2UuCisJICovCisJdWluZm8oInNldF9jb25maWd1cmF0aW9uICglZCkgdG8gJXNcbiIsIGNvbmZpZywgdXJiLT5kZXYtPmRldi5idXNfaWQpOworCXVpbmZvKCJidXQsIHNraXAhXG4iKTsKKworCXJldHVybiAwOworCS8qIHJldHVybiB1c2JfZHJpdmVyX3NldF9jb25maWd1cmF0aW9uKHVyYi0+ZGV2LCBjb25maWcpOyAqLworfQorCitzdGF0aWMgaW50IHR3ZWFrX3Jlc2V0X2RldmljZV9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKwlfX3UxNiB2YWx1ZTsKKwlfX3UxNiBpbmRleDsKKwlpbnQgcmV0OworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJdmFsdWUgPSBsZTE2X3RvX2NwdShyZXEtPndWYWx1ZSk7CisJaW5kZXggPSBsZTE2X3RvX2NwdShyZXEtPndJbmRleCk7CisKKwl1aW5mbygicmVzZXRfZGV2aWNlIChwb3J0ICVkKSB0byAlc1xuIiwgaW5kZXgsIHVyYi0+ZGV2LT5kZXYuYnVzX2lkKTsKKworCS8qIGFsbCBpbnRlcmZhY2VzIHNob3VsZCBiZSBvd25lZCBieSB1c2JpcCBkcml2ZXIsIHNvIGp1c3QgcmVzZXQgaXQuICAqLworCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodXJiLT5kZXYsIE5VTEwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJsb2NrIGZvciByZXNldFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogdHJ5IHRvIHJlc2V0IHRoZSBkZXZpY2UgKi8KKwlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKHVyYi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgImRldmljZSByZXNldFxuIik7CisKKwl1c2JfdW5sb2NrX2RldmljZSh1cmItPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogY2xlYXJfaGFsdCwgc2V0X2ludGVyZmFjZSwgYW5kIHNldF9jb25maWd1cmF0aW9uIHJlcXVpcmUgc3BlY2lhbCB0cmlja3MuCisgKi8KK3N0YXRpYyB2b2lkIHR3ZWFrX3NwZWNpYWxfcmVxdWVzdHMoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICghdXJiIHx8ICF1cmItPnNldHVwX3BhY2tldCkKKwkJcmV0dXJuOworCisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpICE9IFBJUEVfQ09OVFJPTCkKKwkJcmV0dXJuOworCisJaWYgKGlzX2NsZWFyX2hhbHRfY21kKHVyYikpCisJCS8qIHR3ZWFrIGNsZWFyX2hhbHQgKi8KKwkJIHR3ZWFrX2NsZWFyX2hhbHRfY21kKHVyYik7CisKKwllbHNlIGlmIChpc19zZXRfaW50ZXJmYWNlX2NtZCh1cmIpKQorCQkvKiB0d2VhayBzZXRfaW50ZXJmYWNlICovCisJCXR3ZWFrX3NldF9pbnRlcmZhY2VfY21kKHVyYik7CisKKwllbHNlIGlmIChpc19zZXRfY29uZmlndXJhdGlvbl9jbWQodXJiKSkKKwkJLyogdHdlYWsgc2V0X2NvbmZpZ3VyYXRpb24gKi8KKwkJdHdlYWtfc2V0X2NvbmZpZ3VyYXRpb25fY21kKHVyYik7CisKKwllbHNlIGlmIChpc19yZXNldF9kZXZpY2VfY21kKHVyYikpCisJCXR3ZWFrX3Jlc2V0X2RldmljZV9jbWQodXJiKTsKKwllbHNlCisJCWRiZ19zdHViX3J4KCJubyBuZWVkIHRvIHR3ZWFrXG4iKTsKK30KKworLyoKKyAqIHN0dWJfcmVjdl91bmxpbmsoKSB1bmxpbmtzIHRoZSBVUkIgYnkgYSBjYWxsIHRvIHVzYl91bmxpbmtfdXJiKCkuCisgKiBCeSB1bmxpbmtpbmcgdGhlIHVyYiBhc3luY2hyb25vdXNseSwgc3R1Yl9yeCBjYW4gY29udGludW91c2x5CisgKiBwcm9jZXNzIGNvbWluZyB1cmJzLiAgRXZlbiBpZiB0aGUgdXJiIGlzIHVubGlua2VkLCBpdHMgY29tcGxldGlvbgorICogaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBhbmQgc3R1Yl90eCB3aWxsIHNlbmQgYSByZXR1cm4gcGR1LgorICoKKyAqIFNlZSBhbHNvIGNvbW1lbnRzIGFib3V0IHVubGlua2luZyBzdHJhdGVneSBpbiB2aGNpX2hjZC5jLgorICovCitzdGF0aWMgaW50IHN0dWJfcmVjdl9jbWRfdW5saW5rKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwKKwkJCQkJCXN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0aGVhZCA9ICZzZGV2LT5wcml2X2luaXQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlmb3IgKHB0ciA9IGxpc3RoZWFkLT5uZXh0OyBwdHIgIT0gbGlzdGhlYWQ7IHB0ciA9IHB0ci0+bmV4dCkgeworCQlwcml2ID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBzdHViX3ByaXYsIGxpc3QpOworCQlpZiAocHJpdi0+c2VxbnVtID09IHBkdS0+dS5jbWRfdW5saW5rLnNlcW51bSkgeworCQkJaW50IHJldDsKKworCQkJZGV2X2luZm8oJnByaXYtPnVyYi0+ZGV2LT5kZXYsICJ1bmxpbmsgdXJiICVwXG4iLAorCQkJCSBwcml2LT51cmIpOworCisJCQkvKgorCQkJICogVGhpcyBtYXRjaGVkIHVyYiBpcyBub3QgY29tcGxldGVkIHlldCAoaS5lLiwgYmUgaW4KKwkJCSAqIGZsaWdodCBpbiB1c2IgaGNkIGhhcmR3YXJlL2RyaXZlcikuIE5vdyB3ZSBhcmUKKwkJCSAqIGNhbmNlbGxpbmcgaXQuIFRoZSB1bmxpbmtpbmcgZmxhZyBtZWFucyB0aGF0IHdlIGFyZQorCQkJICogbm93IG5vdCBnb2luZyB0byByZXR1cm4gdGhlIG5vcm1hbCByZXN1bHQgcGR1IG9mIGEKKwkJCSAqIHN1Ym1pc3Npb24gcmVxdWVzdCwgYnV0IGdvaW5nIHRvIHJldHVybiBhIHJlc3VsdCBwZHUKKwkJCSAqIG9mIHRoZSB1bmxpbmsgcmVxdWVzdC4KKwkJCSAqLworCQkJcHJpdi0+dW5saW5raW5nID0gMTsKKworCQkJLyoKKwkJCSAqIEluIHRoZSBjYXNlIHRoYXQgdW5saW5raW5nIGZsYWcgaXMgb24sIHByZXYtPnNlcW51bQorCQkJICogaXMgY2hhbmdlZCBmcm9tIHRoZSBzZXFudW0gb2YgdGhlIGNhbmNlbGxpbmcgdXJiIHRvCisJCQkgKiB0aGUgc2VxbnVtIG9mIHRoZSB1bmxpbmsgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIHVzZWQKKwkJCSAqIHRvIG1ha2UgdGhlIHJlc3VsdCBwZHUgb2YgdGhlIHVubGluayByZXF1ZXN0LgorCQkJICovCisJCQlwcml2LT5zZXFudW0gPSBwZHUtPmJhc2Uuc2VxbnVtOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCQkJLyoKKwkJCSAqIHVzYl91bmxpbmtfdXJiKCkgaXMgbm93IG91dCBvZiBzcGlubG9ja2luZyB0byBhdm9pZAorCQkJICogc3BpbmxvY2sgcmVjdXJzaW9uIHNpbmNlIHN0dWJfY29tcGxldGUoKSBpcworCQkJICogc29tZXRpbWVzIGNhbGxlZCBpbiB0aGlzIGNvbnRleHQgYnV0IG5vdCBpbiB0aGUKKwkJCSAqIGludGVycnVwdCBjb250ZXh0LiAgSWYgc3R1Yl9jb21wbGV0ZSgpIGlzIGV4ZWN1dGVkCisJCQkgKiBiZWZvcmUgd2UgY2FsbCB1c2JfdW5saW5rX3VyYigpLCB1c2JfdW5saW5rX3VyYigpCisJCQkgKiB3aWxsIHJldHVybiBhbiBlcnJvciB2YWx1ZS4gSW4gdGhpcyBjYXNlLCBzdHViX3R4CisJCQkgKiB3aWxsIHJldHVybiB0aGUgcmVzdWx0IHBkdSBvZiB0aGlzIHVubGluayByZXF1ZXN0CisJCQkgKiB0aG91Z2ggc3VibWlzc2lvbiBpcyBjb21wbGV0ZWQgYW5kIGFjdHVhbCB1bmxpbmtpbmcKKwkJCSAqIGlzIG5vdCBleGVjdXRlZC4gT0s/CisJCQkgKi8KKwkJCS8qIEluIHRoZSBhYm92ZSBjYXNlLCB1cmItPnN0YXR1cyBpcyBub3QgLUVDT05OUkVTRVQsCisJCQkgKiBzbyBhIGRyaXZlciBpbiBhIGNsaWVudCBob3N0IHdpbGwga25vdyB0aGUgZmFpbHVyZQorCQkJICogb2YgdGhlIHVubGluayByZXF1ZXN0ID8KKwkJCSAqLworCQkJcmV0ID0gdXNiX3VubGlua191cmIocHJpdi0+dXJiKTsKKwkJCWlmIChyZXQgIT0gLUVJTlBST0dSRVNTKQorCQkJCWRldl9lcnIoJnByaXYtPnVyYi0+ZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gdW5saW5rIGEgdXJiICVwLCByZXQgJWRcbiIsCisJCQkJCXByaXYtPnVyYiwgcmV0KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJZGJnX3N0dWJfcngoInNlcW51bSAlZCBpcyBub3QgcGVuZGluZ1xuIiwgcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKTsKKworCS8qCisJICogVGhlIHVyYiBvZiB0aGUgdW5saW5rIHRhcmdldCBpcyBub3QgZm91bmQgaW4gcHJpdl9pbml0IHF1ZXVlLiBJdCB3YXMKKwkgKiBhbHJlYWR5IGNvbXBsZXRlZCBhbmQgaXRzIHJlc3VsdHMgaXMvd2FzIGdvaW5nIHRvIGJlIHNlbnQgYnkgYQorCSAqIENNRF9SRVQgcGR1LiBJbiB0aGlzIGNhc2UsIHVzYl91bmxpbmtfdXJiKCkgaXMgbm90IG5lZWRlZC4gV2Ugb25seQorCSAqIHJldHVybiB0aGUgY29tcGxldGVuZXNzIG9mIHRoaXMgdW5saW5rIHJlcXVlc3QgdG8gdmhjaV9oY2QuCisJICovCisJc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc2RldiwgcGR1LT5iYXNlLnNlcW51bSwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfcmVxdWVzdChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsIHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZzZGV2LT51ZDsKKworCWlmIChwZHUtPmJhc2UuZGV2aWQgPT0gc2Rldi0+ZGV2aWQpIHsKKwkJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisJCWlmICh1ZC0+c3RhdHVzID09IFNERVZfU1RfVVNFRCkgeworCQkJLyogQSByZXF1ZXN0IGlzIHZhbGlkLiAqLworCQkJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKKwkJCXJldHVybiAxOworCQl9CisJCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl9wcml2ICpzdHViX3ByaXZfYWxsb2Moc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LAorCQkJCQkgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCBzdHViX3ByaXYgKnByaXY7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSAmc2Rldi0+dWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXByaXYgPSBrbWVtX2NhY2hlX2FsbG9jKHN0dWJfcHJpdl9jYWNoZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFwcml2KSB7CisJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiYWxsb2Mgc3R1Yl9wcml2XG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBzdHViX3ByaXYpKTsKKworCXByaXYtPnNlcW51bSA9IHBkdS0+YmFzZS5zZXFudW07CisJcHJpdi0+c2RldiA9IHNkZXY7CisKKwkvKgorCSAqIEFmdGVyIGEgc3R1Yl9wcml2IGlzIGxpbmtlZCB0byBhIGxpc3RfaGVhZCwKKwkgKiBvdXIgZXJyb3IgaGFuZGxlciBjYW4gZnJlZSBhbGxvY2F0ZWQgZGF0YS4KKwkgKi8KKwlsaXN0X2FkZF90YWlsKCZwcml2LT5saXN0LCAmc2Rldi0+cHJpdl9pbml0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHByaXY7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZ2V0X2VwX2Zyb21fZXBudW0oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCWludCBlcG51bTApCit7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnOworCWludCBpID0gMCwgaiA9IDA7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCA9IE5VTEw7CisJaW50IGVwbnVtOworCWludCBmb3VuZCA9IDA7CisKKwlpZiAoZXBudW0wID09IDApCisJCXJldHVybiAmdWRldi0+ZXAwOworCisJY29uZmlnID0gdWRldi0+YWN0Y29uZmlnOworCWlmICghY29uZmlnKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpzZXR0aW5nOworCisJCXNldHRpbmcgPSBjb25maWctPmludGVyZmFjZVtpXS0+Y3VyX2FsdHNldHRpbmc7CisKKwkJZm9yIChqID0gMDsgaiA8IHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgaisrKSB7CisJCQllcCA9ICZzZXR0aW5nLT5lbmRwb2ludFtqXTsKKwkJCWVwbnVtID0gKGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweDdmKTsKKworCQkJaWYgKGVwbnVtID09IGVwbnVtMCkgeworCQkJCS8qIHVpbmZvKCJmb3VuZCBlcG51bSAlZFxuIiwgZXBudW0wKTsgKi8KKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm91bmQpCisJCXJldHVybiBlcDsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X3BpcGUoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBpbnQgZXBudW0sIGludCBkaXIpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCA9IE5VTEw7CisKKwllcCA9IGdldF9lcF9mcm9tX2VwbnVtKHVkZXYsIGVwbnVtKTsKKwlpZiAoIWVwKSB7CisJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAibm8gc3VjaCBlbmRwb2ludD8sICVkXG4iLAorCQkJZXBudW0pOworCQlCVUcoKTsKKwl9CisKKwllcGQgPSAmZXAtPmRlc2M7CisKKworI2lmIDAKKwkvKiBlcG51bSAwIGlzIGFsd2F5cyBjb250cm9sICovCisJaWYgKGVwbnVtID09IDApIHsKKwkJaWYgKGRpciA9PSBVU0JJUF9ESVJfT1VUKQorCQkJcmV0dXJuIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKTsKKwkJZWxzZQorCQkJcmV0dXJuIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKTsKKwl9CisjZW5kaWYKKworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKGVwZCkpIHsKKwkJaWYgKGRpciA9PSBVU0JJUF9ESVJfT1VUKQorCQkJcmV0dXJuIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCBlcG51bSk7CisJCWVsc2UKKwkJCXJldHVybiB1c2JfcmN2Y3RybHBpcGUodWRldiwgZXBudW0pOworCX0KKworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkpIHsKKwkJaWYgKGRpciA9PSBVU0JJUF9ESVJfT1VUKQorCQkJcmV0dXJuIHVzYl9zbmRidWxrcGlwZSh1ZGV2LCBlcG51bSk7CisJCWVsc2UKKwkJCXJldHVybiB1c2JfcmN2YnVsa3BpcGUodWRldiwgZXBudW0pOworCX0KKworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSkgeworCQlpZiAoZGlyID09IFVTQklQX0RJUl9PVVQpCisJCQlyZXR1cm4gdXNiX3NuZGludHBpcGUodWRldiwgZXBudW0pOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3JjdmludHBpcGUodWRldiwgZXBudW0pOworCX0KKworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkpIHsKKwkJaWYgKGRpciA9PSBVU0JJUF9ESVJfT1VUKQorCQkJcmV0dXJuIHVzYl9zbmRpc29jcGlwZSh1ZGV2LCBlcG51bSk7CisJCWVsc2UKKwkJCXJldHVybiB1c2JfcmN2aXNvY3BpcGUodWRldiwgZXBudW0pOworCX0KKworCS8qIE5PVCBSRUFDSEVEICovCisJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJnZXQgcGlwZSwgZXBudW0gJWRcbiIsIGVwbnVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3R1Yl9yZWN2X2NtZF9zdWJtaXQoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LAorCQkJCSBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnNkZXYtPnVkOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOworCWludCBwaXBlID0gZ2V0X3BpcGUoc2RldiwgcGR1LT5iYXNlLmVwLCBwZHUtPmJhc2UuZGlyZWN0aW9uKTsKKworCisJcHJpdiA9IHN0dWJfcHJpdl9hbGxvYyhzZGV2LCBwZHUpOworCWlmICghcHJpdikKKwkJcmV0dXJuOworCisJLyogc2V0dXAgYSB1cmIgKi8KKwlpZiAodXNiX3BpcGVpc29jKHBpcGUpKQorCQlwcml2LT51cmIgPSB1c2JfYWxsb2NfdXJiKHBkdS0+dS5jbWRfc3VibWl0Lm51bWJlcl9vZl9wYWNrZXRzLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwllbHNlCisJCXByaXYtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXYtPnVyYikgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgIm1hbGxvYyB1cmJcbiIpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNldCBwcml2LT51cmItPnRyYW5zZmVyX2J1ZmZlciAqLworCWlmIChwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMCkgeworCQlwcml2LT51cmItPnRyYW5zZmVyX2J1ZmZlciA9CisJCQlremFsbG9jKHBkdS0+dS5jbWRfc3VibWl0LnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIXByaXYtPnVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgIm1hbGxvYyB4X2J1ZmZcbiIpOworCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBzZXQgcHJpdi0+dXJiLT5zZXR1cF9wYWNrZXQgKi8KKwlwcml2LT51cmItPnNldHVwX3BhY2tldCA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT51cmItPnNldHVwX3BhY2tldCkgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgImFsbG9jYXRlIHNldHVwX3BhY2tldFxuIik7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQlyZXR1cm47CisJfQorCW1lbWNweShwcml2LT51cmItPnNldHVwX3BhY2tldCwgJnBkdS0+dS5jbWRfc3VibWl0LnNldHVwLCA4KTsKKworCS8qIHNldCBvdGhlciBtZW1iZXJzIGZyb20gdGhlIGJhc2UgaGVhZGVyIG9mIHBkdSAqLworCXByaXYtPnVyYi0+Y29udGV4dCAgICAgICAgICAgICAgICA9ICh2b2lkICopIHByaXY7CisJcHJpdi0+dXJiLT5kZXYgICAgICAgICAgICAgICAgICAgID0gdWRldjsKKwlwcml2LT51cmItPnBpcGUgICAgICAgICAgICAgICAgICAgPSBwaXBlOworCXByaXYtPnVyYi0+Y29tcGxldGUgICAgICAgICAgICAgICA9IHN0dWJfY29tcGxldGU7CisKKwl1c2JpcF9wYWNrX3BkdShwZHUsIHByaXYtPnVyYiwgVVNCSVBfQ01EX1NVQk1JVCwgMCk7CisKKworCWlmICh1c2JpcF9yZWN2X3hidWZmKHVkLCBwcml2LT51cmIpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKHVzYmlwX3JlY3ZfaXNvKHVkLCBwcml2LT51cmIpIDwgMCkKKwkJcmV0dXJuOworCisJLyogbm8gbmVlZCB0byBzdWJtaXQgYW4gaW50ZXJjZXB0ZWQgcmVxdWVzdCwgYnV0IGhhcm1sZXNzPyAqLworCXR3ZWFrX3NwZWNpYWxfcmVxdWVzdHMocHJpdi0+dXJiKTsKKworCS8qIHVyYiBpcyBub3cgcmVhZHkgdG8gc3VibWl0ICovCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+dXJiLCBHRlBfS0VSTkVMKTsKKworCWlmIChyZXQgPT0gMCkKKwkJZGJnX3N0dWJfcngoInN1Ym1pdCB1cmIgb2ssIHNlcW51bSAldVxuIiwgcGR1LT5iYXNlLnNlcW51bSk7CisJZWxzZSB7CisJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAic3VibWl0X3VyYiBlcnJvciwgJWRcbiIsIHJldCk7CisJCXVzYmlwX2R1bXBfaGVhZGVyKHBkdSk7CisJCXVzYmlwX2R1bXBfdXJiKHByaXYtPnVyYik7CisKKwkJLyoKKwkJICogUGVzc2ltaXN0aWMuCisJCSAqIFRoaXMgY29ubmVjdGlvbiB3aWxsIGJlIGRpc2NhcmRlZC4KKwkJICovCisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9TVUJNSVQpOworCX0KKworCWRiZ19zdHViX3J4KCJMZWF2ZVxuIik7CisJcmV0dXJuOworfQorCisvKiByZWN2IGEgcGR1ICovCitzdGF0aWMgdm9pZCBzdHViX3J4X3BkdShzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JpcF9oZWFkZXIgcGR1OworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHN0dWJfZGV2aWNlLCB1ZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNkZXYtPmludGVyZmFjZS0+ZGV2OworCisJZGJnX3N0dWJfcngoIkVudGVyXG4iKTsKKworCW1lbXNldCgmcGR1LCAwLCBzaXplb2YocGR1KSk7CisKKwkvKiAxLiByZWNlaXZlIGEgcGR1IGhlYWRlciAqLworCXJldCA9IHVzYmlwX3htaXQoMCwgdWQtPnRjcF9zb2NrZXQsIChjaGFyICopICZwZHUsIHNpemVvZihwZHUpLCAwKTsKKwlpZiAocmV0ICE9IHNpemVvZihwZHUpKSB7CisJCWRldl9lcnIoZGV2LCAicmVjdiBhIGhlYWRlciwgJWRcbiIsIHJldCk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCisJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHUsIDApOworCisJaWYgKGRiZ19mbGFnX3N0dWJfcngpCisJCXVzYmlwX2R1bXBfaGVhZGVyKCZwZHUpOworCisJaWYgKCF2YWxpZF9yZXF1ZXN0KHNkZXYsICZwZHUpKSB7CisJCWRldl9lcnIoZGV2LCAicmVjdiBpbnZhbGlkIHJlcXVlc3RcbiIpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAocGR1LmJhc2UuY29tbWFuZCkgeworCWNhc2UgVVNCSVBfQ01EX1VOTElOSzoKKwkJc3R1Yl9yZWN2X2NtZF91bmxpbmsoc2RldiwgJnBkdSk7CisJCWJyZWFrOworCisJY2FzZSBVU0JJUF9DTURfU1VCTUlUOgorCQlzdHViX3JlY3ZfY21kX3N1Ym1pdChzZGV2LCAmcGR1KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBOT1RSRUFDSEVEICovCisJCWRldl9lcnIoZGV2LCAidW5rbm93biBwZHVcbiIpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJcmV0dXJuOworCX0KKworfQorCit2b2lkIHN0dWJfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSBjb250YWluZXJfb2YodXQsIHN0cnVjdCB1c2JpcF9kZXZpY2UsIHRjcF9yeCk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWRiZ19zdHViX3J4KCJzaWduYWwgY2F1Z2h0IVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh1c2JpcF9ldmVudF9oYXBwZW5kKHVkKSkKKwkJCWJyZWFrOworCisJCXN0dWJfcnhfcGR1KHVkKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTU2M2NkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYwpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorI2luY2x1ZGUgInN0dWIuaCIKKworCitzdGF0aWMgdm9pZCBzdHViX2ZyZWVfcHJpdl9hbmRfdXJiKHN0cnVjdCBzdHViX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHVyYiAqdXJiID0gcHJpdi0+dXJiOworCisJa2ZyZWUodXJiLT5zZXR1cF9wYWNrZXQpOworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7CisJa21lbV9jYWNoZV9mcmVlKHN0dWJfcHJpdl9jYWNoZSwgcHJpdik7CisJdXNiX2ZyZWVfdXJiKHVyYik7Cit9CisKKy8qIGJlIGluIHNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKSAqLwordm9pZCBzdHViX2VucXVldWVfcmV0X3VubGluayhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsIF9fdTMyIHNlcW51bSwKKwkJCSAgICAgX191MzIgc3RhdHVzKQoreworCXN0cnVjdCBzdHViX3VubGluayAqdW5saW5rOworCisJdW5saW5rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0dWJfdW5saW5rKSwgR0ZQX0FUT01JQyk7CisJaWYgKCF1bmxpbmspIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJhbGxvYyBzdHViX3VubGlua1xuIik7CisJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFZERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuOworCX0KKworCXVubGluay0+c2VxbnVtID0gc2VxbnVtOworCXVubGluay0+c3RhdHVzID0gc3RhdHVzOworCisJbGlzdF9hZGRfdGFpbCgmdW5saW5rLT5saXN0LCAmc2Rldi0+dW5saW5rX3R4KTsKK30KKworLyoqCisgKiBzdHViX2NvbXBsZXRlIC0gY29tcGxldGlvbiBoYW5kbGVyIG9mIGEgdXNiaXAgdXJiCisgKiBAdXJiOiBwb2ludGVyIHRvIHRoZSB1cmIgY29tcGxldGVkCisgKiBAcmVnczoKKyAqCisgKiBXaGVuIGEgdXJiIGhhcyBjb21wbGV0ZWQsIHRoZSBVU0IgY29yZSBkcml2ZXIgY2FsbHMgdGhpcyBmdW5jdGlvbiBtb3N0bHkgaW4KKyAqIHRoZSBpbnRlcnJ1cHQgY29udGV4dC4gVG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgYSB1cmIsIHRoZSBjb21wbGV0ZWQgdXJiIGlzCisgKiBsaW5rZWQgdG8gdGhlIHBlbmRpbmcgbGlzdCBvZiByZXR1cm5pbmcuCisgKgorICovCit2b2lkIHN0dWJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYgPSAoc3RydWN0IHN0dWJfcHJpdiAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gcHJpdi0+c2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnX3N0dWJfdHgoImNvbXBsZXRlISBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogT0sgKi8KKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCQl1aW5mbygic3RvcHBlZCBieSBhIGNhbGwgb2YgdXNiX2tpbGxfdXJiKCkgYmVjYXVzZSBvZiIKKwkJCQkJImNsZWFuaW5nIHVwIGEgdmlydHVhbCBjb25uZWN0aW9uXG4iKTsKKwkJcmV0dXJuOworCWNhc2UgLUVDT05OUkVTRVQ6CisJCXVpbmZvKCJ1bmxpbmtlZCBieSBhIGNhbGwgb2YgdXNiX3VubGlua191cmIoKVxuIik7CisJCWJyZWFrOworCWNhc2UgLUVQSVBFOgorCQl1aW5mbygiZW5kcG9pbnQgJWQgaXMgc3RhbGxlZFxuIiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpKTsKKwkJYnJlYWs7CisJY2FzZSAtRVNIVVRET1dOOgorCQl1aW5mbygiZGV2aWNlIHJlbW92ZWQ/XG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdWluZm8oInVyYiBjb21wbGV0aW9uIHdpdGggbm9uLXplcm8gc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisJfQorCisJLyogbGluayBhIHVyYiB0byB0aGUgcXVldWUgb2YgdHguICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPnVubGlua2luZykgeworCQlzdHViX2VucXVldWVfcmV0X3VubGluayhzZGV2LCBwcml2LT5zZXFudW0sIHVyYi0+c3RhdHVzKTsKKwkJc3R1Yl9mcmVlX3ByaXZfYW5kX3VyYihwcml2KTsKKwl9IGVsc2UKKwkJbGlzdF9tb3ZlX3RhaWwoJnByaXYtPmxpc3QsICZzZGV2LT5wcml2X3R4KTsKKworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwkvKiB3YWtlIHVwIHR4X3RocmVhZCAqLworCXdha2VfdXAoJnNkZXYtPnR4X3dhaXRxKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogZmlsbCBQRFUgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2Jhc2VfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXJfYmFzaWMgKmJhc2UsCisJCV9fdTMyIGNvbW1hbmQsIF9fdTMyIHNlcW51bSkKK3sKKwliYXNlLT5jb21tYW5kID0gY29tbWFuZDsKKwliYXNlLT5zZXFudW0gID0gc2VxbnVtOworCWJhc2UtPmRldmlkICAgPSAwOworCWJhc2UtPmVwICAgICAgPSAwOworCWJhc2UtPmRpcmVjdGlvbiAgID0gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcmV0X3N1Ym1pdF9wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcnBkdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYgPSAoc3RydWN0IHN0dWJfcHJpdiAqKSB1cmItPmNvbnRleHQ7CisKKwlzZXR1cF9iYXNlX3BkdSgmcnBkdS0+YmFzZSwgVVNCSVBfUkVUX1NVQk1JVCwgcHJpdi0+c2VxbnVtKTsKKworCXVzYmlwX3BhY2tfcGR1KHJwZHUsIHVyYiwgVVNCSVBfUkVUX1NVQk1JVCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3JldF91bmxpbmtfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnJwZHUsCisJCXN0cnVjdCBzdHViX3VubGluayAqdW5saW5rKQoreworCXNldHVwX2Jhc2VfcGR1KCZycGR1LT5iYXNlLCBVU0JJUF9SRVRfVU5MSU5LLCB1bmxpbmstPnNlcW51bSk7CisKKwlycGR1LT51LnJldF91bmxpbmsuc3RhdHVzID0gdW5saW5rLT5zdGF0dXM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHNlbmQgUkVUX1NVQk1JVCAqLworCitzdGF0aWMgc3RydWN0IHN0dWJfcHJpdiAqZGVxdWV1ZV9mcm9tX3ByaXZfdHgoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdiwgKnRtcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZzZGV2LT5wcml2X3R4LCBsaXN0KSB7CisJCWxpc3RfbW92ZV90YWlsKCZwcml2LT5saXN0LCAmc2Rldi0+cHJpdl9mcmVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc3R1Yl9zZW5kX3JldF9zdWJtaXQoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdiwgKnRtcDsKKworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdlszXTsKKwlzaXplX3QgdHhzaXplOworCisJc2l6ZV90IHRvdGFsX3NpemUgPSAwOworCisJd2hpbGUgKChwcml2ID0gZGVxdWV1ZV9mcm9tX3ByaXZfdHgoc2RldikpICE9IE5VTEwpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHVyYiAqdXJiID0gcHJpdi0+dXJiOworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisJCXZvaWQgKmlzb19idWZmZXIgPSBOVUxMOworCisJCXR4c2l6ZSA9IDA7CisJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworCQlkYmdfc3R1Yl90eCgic2V0dXAgdHhkYXRhIHVyYiAlcFxuIiwgdXJiKTsKKworCisJCS8qIDEuIHNldHVwIHVzYmlwX2hlYWRlciAqLworCQlzZXR1cF9yZXRfc3VibWl0X3BkdSgmcGR1X2hlYWRlciwgdXJiKTsKKwkJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHVfaGVhZGVyLCAxKTsKKworCQlpb3ZbMF0uaW92X2Jhc2UgPSAmcGR1X2hlYWRlcjsKKwkJaW92WzBdLmlvdl9sZW4gID0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCQl0eHNpemUgKz0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCisJCS8qIDIuIHNldHVwIHRyYW5zZmVyIGJ1ZmZlciAqLworCQlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpICYmIHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKKwkJCWlvdlsxXS5pb3ZfYmFzZSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkJaW92WzFdLmlvdl9sZW4gID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJdHhzaXplICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJfQorCisJCS8qIDMuIHNldHVwIGlzb19wYWNrZXRfZGVzY3JpcHRvciAqLworCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJc3NpemVfdCBsZW4gPSAwOworCisJCQlpc29fYnVmZmVyID0gdXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KHVyYiwgJmxlbik7CisJCQlpZiAoIWlzb19idWZmZXIpIHsKKwkJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLAorCQkJCQkJU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJaW92WzJdLmlvdl9iYXNlID0gaXNvX2J1ZmZlcjsKKwkJCWlvdlsyXS5pb3ZfbGVuICA9IGxlbjsKKwkJCXR4c2l6ZSArPSBsZW47CisJCX0KKworCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyhzZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLCBpb3YsCisJCQkJICAgICAzLCB0eHNpemUpOworCQlpZiAocmV0ICE9IHR4c2l6ZSkgeworCQkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsCisJCQkJInNlbmRtc2cgZmFpbGVkISwgcmV0dmFsICVkIGZvciAlemRcbiIsCisJCQkJcmV0LCB0eHNpemUpOworCQkJa2ZyZWUoaXNvX2J1ZmZlcik7CisJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlrZnJlZShpc29fYnVmZmVyKTsKKwkJZGJnX3N0dWJfdHgoInNlbmQgdHhkYXRhXG4iKTsKKworCQl0b3RhbF9zaXplICs9IHR4c2l6ZTsKKwl9CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZzZGV2LT5wcml2X2ZyZWUsIGxpc3QpIHsKKwkJc3R1Yl9mcmVlX3ByaXZfYW5kX3VyYihwcml2KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB0b3RhbF9zaXplOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzZW5kIFJFVF9VTkxJTksgKi8KKworc3RhdGljIHN0cnVjdCBzdHViX3VubGluayAqZGVxdWV1ZV9mcm9tX3VubGlua190eChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluaywgKnRtcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnNkZXYtPnVubGlua190eCwgbGlzdCkgeworCQlsaXN0X21vdmVfdGFpbCgmdW5saW5rLT5saXN0LCAmc2Rldi0+dW5saW5rX2ZyZWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHVubGluazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBpbnQgc3R1Yl9zZW5kX3JldF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0dWJfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbMV07CisJc2l6ZV90IHR4c2l6ZTsKKworCXNpemVfdCB0b3RhbF9zaXplID0gMDsKKworCXdoaWxlICgodW5saW5rID0gZGVxdWV1ZV9mcm9tX3VubGlua190eChzZGV2KSkgIT0gTlVMTCkgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisKKwkJdHhzaXplID0gMDsKKwkJbWVtc2V0KCZwZHVfaGVhZGVyLCAwLCBzaXplb2YocGR1X2hlYWRlcikpOworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQltZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisJCWRiZ19zdHViX3R4KCJzZXR1cCByZXQgdW5saW5rICVsdVxuIiwgdW5saW5rLT5zZXFudW0pOworCisJCS8qIDEuIHNldHVwIHVzYmlwX2hlYWRlciAqLworCQlzZXR1cF9yZXRfdW5saW5rX3BkdSgmcGR1X2hlYWRlciwgdW5saW5rKTsKKwkJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHVfaGVhZGVyLCAxKTsKKworCQlpb3ZbMF0uaW92X2Jhc2UgPSAmcGR1X2hlYWRlcjsKKwkJaW92WzBdLmlvdl9sZW4gID0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCQl0eHNpemUgKz0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCisJCXJldCA9IGtlcm5lbF9zZW5kbXNnKHNkZXYtPnVkLnRjcF9zb2NrZXQsICZtc2csIGlvdiwKKwkJCQkgICAgIDEsIHR4c2l6ZSk7CisJCWlmIChyZXQgIT0gdHhzaXplKSB7CisJCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCQkic2VuZG1zZyBmYWlsZWQhLCByZXR2YWwgJWQgZm9yICV6ZFxuIiwKKwkJCQlyZXQsIHR4c2l6ZSk7CisJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCisJCWRiZ19zdHViX3R4KCJzZW5kIHR4ZGF0YVxuIik7CisKKwkJdG90YWxfc2l6ZSArPSB0eHNpemU7CisJfQorCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZzZGV2LT51bmxpbmtfZnJlZSwgbGlzdCkgeworCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKKwkJa2ZyZWUodW5saW5rKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB0b3RhbF9zaXplOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgc3R1Yl90eF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9IGNvbnRhaW5lcl9vZih1dCwgc3RydWN0IHVzYmlwX2RldmljZSwgdGNwX3R4KTsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCBzdHViX2RldmljZSwgdWQpOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlkYmdfc3R1Yl90eCgic2lnbmFsIGNhdGNoZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodXNiaXBfZXZlbnRfaGFwcGVuZCh1ZCkpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBzZW5kX3JldF9zdWJtaXQgY29tZXMgZWFybGllciB0aGFuIHNlbmRfcmV0X3VubGluay4gIHN0dWJfcngKKwkJICogbG9va3MgYXQgb25seSBwcml2X2luaXQgcXVldWUuIElmIHRoZSBjb21wbGV0aW9uIG9mIGEgVVJCIGlzCisJCSAqIGVhcmxpZXIgdGhhbiB0aGUgcmVjZWl2ZSBvZiBDTURfVU5MSU5LLCBwcml2IGlzIG1vdmVkIHRvCisJCSAqIHByaXZfdHggcXVldWUgYW5kIHN0dWJfcnggZG9lcyBub3QgZmluZCB0aGUgdGFyZ2V0IHByaXYuIEluCisJCSAqIHRoaXMgY2FzZSwgdmhjaV9yeCByZWNlaXZlcyB0aGUgcmVzdWx0IG9mIHRoZSBzdWJtaXQgcmVxdWVzdAorCQkgKiBhbmQgdGhlbiByZWNlaXZlcyB0aGUgcmVzdWx0IG9mIHRoZSB1bmxpbmsgcmVxdWVzdC4gVGhlCisJCSAqIHJlc3VsdCBvZiB0aGUgc3VibWl0IGlzIGdpdmVuIGJhY2sgdG8gdGhlIHVzYmNvcmUgYXMgdGhlCisJCSAqIGNvbXBsZXRpb24gb2YgdGhlIHVubGluayByZXF1ZXN0LiBUaGUgcmVxdWVzdCBvZiB0aGUKKwkJICogdW5saW5rIGlzIGlnbm9yZWQuIFRoaXMgaXMgb2sgYmVjYXVzZSBhIGRyaXZlciB3aG8gY2FsbHMKKwkJICogdXNiX3VubGlua191cmIoKSB1bmRlcnN0YW5kcyB0aGUgdW5saW5rIHdhcyB0b28gbGF0ZSBieQorCQkgKiBnZXR0aW5nIHRoZSBzdGF0dXMgb2YgdGhlIGdpdmVuLWJhY2tlZCBVUkIgd2hpY2ggaGFzIHRoZQorCQkgKiBzdGF0dXMgb2YgdXNiX3N1Ym1pdF91cmIoKS4KKwkJICovCisJCWlmIChzdHViX3NlbmRfcmV0X3N1Ym1pdChzZGV2KSA8IDApCisJCQlicmVhazsKKworCQlpZiAoc3R1Yl9zZW5kX3JldF91bmxpbmsoc2RldikgPCAwKQorCQkJYnJlYWs7CisKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNkZXYtPnR4X3dhaXRxLAorCQkJCSghbGlzdF9lbXB0eSgmc2Rldi0+cHJpdl90eCkgfHwKKwkJCQkgIWxpc3RfZW1wdHkoJnNkZXYtPnVubGlua190eCkpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlMjA5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYwpAQCAtMCwwICsxLDk5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorCisvKiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRha2FoaXJvIEhpcm9mdWNoaSA8aGlyb2Z1Y2hpIF9hdF8gdXNlcnMuc291cmNlZm9yZ2UubmV0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgInVzYmlwIGNvbW1vbiBkcml2ZXIiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBkZWJ1ZyByb3V0aW5lcyAqLworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRwordW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnID0gMHhmZmZmZmZmZjsKKyNlbHNlCit1bnNpZ25lZCBsb25nIHVzYmlwX2RlYnVnX2ZsYWc7CisjZW5kaWYKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2RlYnVnX2ZsYWcpOworCisKKy8qIEZJWE1FICovCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl91c2JpcF9kZWJ1ZzsKK0VYUE9SVF9TWU1CT0xfR1BMKGRldl9hdHRyX3VzYmlwX2RlYnVnKTsKKworCitzdGF0aWMgc3NpemVfdCBzaG93X2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgdXNiaXBfZGVidWdfZmxhZyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJc3NjYW5mKGJ1ZiwgIiVseCIsICZmbGFnKTsKKwl1c2JpcF9kZWJ1Z19mbGFnID0gZmxhZzsKKworCXJldHVybiBjb3VudDsKK30KK0RFVklDRV9BVFRSKHVzYmlwX2RlYnVnLCAoU19JUlVHTyB8IFNfSVdVU1IpLCBzaG93X2ZsYWcsIHN0b3JlX2ZsYWcpOworCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX2J1ZmZlcihjaGFyICpidWZmLCBpbnQgYnVmZmxlbikKK3sKKwlpbnQgaTsKKworCWlmIChidWZmbGVuID4gMTI4KSB7CisJCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworCQkJaWYgKGklMjQgPT0gMCkKKwkJCQlwcmludGsoIiAgICIpOworCQkJcHJpbnRrKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSBidWZmW2ldKTsKKwkJCWlmIChpJTQgPT0gMykKKwkJCQlwcmludGsoInwgIik7CisJCQlpZiAoaSUyNCA9PSAyMykKKwkJCQlwcmludGsoIlxuIik7CisJCX0KKwkJcHJpbnRrKCIuLi4gKCVkIGJ5dGUpXG4iLCBidWZmbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBidWZmbGVuOyBpKyspIHsKKwkJaWYgKGklMjQgPT0gMCkKKwkJCXByaW50aygiICAgIik7CisJCXByaW50aygiJTAyeCAiLCAodW5zaWduZWQgY2hhcikgYnVmZltpXSk7CisJCWlmIChpJTQgPT0gMykKKwkJCXByaW50aygifCAiKTsKKwkJaWYgKGklMjQgPT0gMjMpCisJCQlwcmludGsoIlxuIik7CisJfQorCXByaW50aygiXG4iKTsKKworfQorCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3BpcGUodW5zaWduZWQgaW50IHApCit7CisJdW5zaWduZWQgY2hhciB0eXBlID0gdXNiX3BpcGV0eXBlKHApOworCXVuc2lnbmVkIGNoYXIgZXAgPSB1c2JfcGlwZWVuZHBvaW50KHApOworCXVuc2lnbmVkIGNoYXIgZGV2ID0gdXNiX3BpcGVkZXZpY2UocCk7CisJdW5zaWduZWQgY2hhciBkaXIgPSB1c2JfcGlwZWluKHApOworCisJcHJpbnRrKCJkZXYoJWQpICIsIGRldik7CisJcHJpbnRrKCJlcCglZCkgIiwgIGVwKTsKKwlwcmludGsoIiVzICIsIGRpciA/ICJJTiIgOiAiT1VUIik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCXByaW50aygiJXMgIiwgIklTTyIpOworCQlicmVhazsKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQlwcmludGsoIiVzICIsICJJTlQiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJCXByaW50aygiJXMgIiwgIkNUTCIpOworCQlicmVhazsKKwljYXNlIFBJUEVfQlVMSzoKKwkJcHJpbnRrKCIlcyAiLCAiQkxLIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiRVJSIik7CisJfQorCisJcHJpbnRrKCJcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX2R1bXBfdXNiX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdWRldi0+ZGV2OworCWludCBpOworCisJZGV2X2RiZyhkZXYsICIgICAgICAgZGV2bnVtKCVkKSBkZXZwYXRoKCVzKSIsCisJCXVkZXYtPmRldm51bSwgdWRldi0+ZGV2cGF0aCk7CisKKwlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJcHJpbnRrKCIgU1BEX0hJR0giKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJcHJpbnRrKCIgU1BEX0ZVTEwiKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQlwcmludGsoIiBTUERfTE9XIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX1VOS05PV046CisJCXByaW50aygiIFNQRF9VTktOT1dOIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiIFNQRF9FUlJPUiIpOworCX0KKworCXByaW50aygiIHR0ICVwLCB0dHBvcnQgJWQiLCB1ZGV2LT50dCwgdWRldi0+dHRwb3J0KTsKKwlwcmludGsoIlxuIik7CisKKwlkZXZfZGJnKGRldiwgIiAgICAgICAgICAgICAgICAgICAgIik7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXByaW50aygiICUydSIsIGkpOworCXByaW50aygiXG4iKTsKKworCWRldl9kYmcoZGV2LCAiICAgICAgIHRvZ2dsZTAoSU4pIDoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJcHJpbnRrKCIgJTJ1IiwgKHVkZXYtPnRvZ2dsZVswXSAmICgxIDw8IGkpKSA/IDEgOiAwKTsKKwlwcmludGsoIlxuIik7CisKKwlkZXZfZGJnKGRldiwgIiAgICAgICB0b2dnbGUxKE9VVCk6Iik7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXByaW50aygiICUydSIsICh1ZGV2LT50b2dnbGVbMV0gJiAoMSA8PCBpKSkgPyAxIDogMCk7CisJcHJpbnRrKCJcbiIpOworCisKKwlkZXZfZGJnKGRldiwgIiAgICAgICBlcG1heHBfaW4gICA6Iik7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHVkZXYtPmVwX2luW2ldKQorCQkJcHJpbnRrKCIgJTJ1IiwKKwkJCSAgICAgbGUxNl90b19jcHUodWRldi0+ZXBfaW5baV0tPmRlc2Mud01heFBhY2tldFNpemUpKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJZGV2X2RiZyhkZXYsICIgICAgICAgZXBtYXhwX291dCAgOiIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmICh1ZGV2LT5lcF9vdXRbaV0pCisJCQlwcmludGsoIiAlMnUiLAorCQkJICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5lcF9vdXRbaV0tPmRlc2Mud01heFBhY2tldFNpemUpKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJZGV2X2RiZyhkZXYsICJwYXJlbnQgJXAsIGJ1cyAlcFxuIiwgdWRldi0+cGFyZW50LCB1ZGV2LT5idXMpOworCisJZGV2X2RiZyhkZXYsICJkZXNjcmlwdG9yICVwLCBjb25maWcgJXAsIGFjdGNvbmZpZyAlcCwgIgorCQkicmF3ZGVzY3JpcHRvcnMgJXBcbiIsICZ1ZGV2LT5kZXNjcmlwdG9yLCB1ZGV2LT5jb25maWcsCisJCXVkZXYtPmFjdGNvbmZpZywgdWRldi0+cmF3ZGVzY3JpcHRvcnMpOworCisJZGV2X2RiZyhkZXYsICJoYXZlX2xhbmdpZCAlZCwgc3RyaW5nX2xhbmdpZCAlZFxuIiwKKwkJdWRldi0+aGF2ZV9sYW5naWQsIHVkZXYtPnN0cmluZ19sYW5naWQpOworCisJZGV2X2RiZyhkZXYsICJtYXhjaGlsZCAlZCwgY2hpbGRyZW4gJXBcbiIsCisJCXVkZXYtPm1heGNoaWxkLCB1ZGV2LT5jaGlsZHJlbik7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX2R1bXBfcmVxdWVzdF90eXBlKF9fdTggcnQpCit7CisJc3dpdGNoIChydCAmIFVTQl9SRUNJUF9NQVNLKSB7CisJY2FzZSBVU0JfUkVDSVBfREVWSUNFOgorCQlwcmludGsoIkRFVklDRSIpOworCQlicmVhazsKKwljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6CisJCXByaW50aygiSU5URVJGIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFQ0lQX0VORFBPSU5UOgorCQlwcmludGsoIkVORFBPSSIpOworCQlicmVhazsKKwljYXNlIFVTQl9SRUNJUF9PVEhFUjoKKwkJcHJpbnRrKCJPVEhFUiAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCItLS0tLS0iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX2R1bXBfdXNiX2N0cmxyZXF1ZXN0KHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCkKK3sKKwlpZiAoIWNtZCkgeworCQlwcmludGsoIiAgICAgICVzIDogbnVsbCBwb2ludGVyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoIiAgICAgICAiKTsKKwlwcmludGsoImJSZXF1ZXN0VHlwZSglMDJYKSAiLCBjbWQtPmJSZXF1ZXN0VHlwZSk7CisJcHJpbnRrKCJiUmVxdWVzdCglMDJYKSAiICwgY21kLT5iUmVxdWVzdCk7CisJcHJpbnRrKCJ3VmFsdWUoJTA0WCkgIiwgY21kLT53VmFsdWUpOworCXByaW50aygid0luZGV4KCUwNFgpICIsIGNtZC0+d0luZGV4KTsKKwlwcmludGsoIndMZW5ndGgoJTA0WCkgIiwgY21kLT53TGVuZ3RoKTsKKworCXByaW50aygiXG4gICAgICAgIik7CisKKwlpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfU1RBTkRBUkQpIHsKKwkJcHJpbnRrKCJTVEFOREFSRCAiKTsKKwkJc3dpdGNoIChjbWQtPmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQkJcHJpbnRrKCJHRVRfU1RBVFVTIik7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCQlwcmludGsoIkNMRUFSX0ZFQVQiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCQlwcmludGsoIlNFVF9GRUFUICAiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCQlwcmludGsoIlNFVF9BRERSUlMiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCQlwcmludGsoIkdFVF9ERVNDUkkiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0RFU0NSSVBUT1I6CisJCQlwcmludGsoIlNFVF9ERVNDUkkiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCQlwcmludGsoIkdFVF9DT05GSUciKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCQlwcmludGsoIlNFVF9DT05GSUciKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJCXByaW50aygiR0VUX0lOVEVSRiIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQkJcHJpbnRrKCJTRVRfSU5URVJGIik7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX1NZTkNIX0ZSQU1FOgorCQkJcHJpbnRrKCJTWU5DX0ZSQU1FIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiUkVRKCUwMlgpICIsIGNtZC0+YlJlcXVlc3QpOworCQl9CisKKwkJcHJpbnRrKCIgIik7CisJCXVzYmlwX2R1bXBfcmVxdWVzdF90eXBlKGNtZC0+YlJlcXVlc3RUeXBlKTsKKworCX0gZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfQ0xBU1MpCisJCXByaW50aygiQ0xBU1MgICAiKTsKKworCWVsc2UgaWYgKChjbWQtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spID09IFVTQl9UWVBFX1ZFTkRPUikKKwkJcHJpbnRrKCJWRU5ET1IgICIpOworCisJZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfUkVTRVJWRUQpCisJCXByaW50aygiUkVTRVJWRUQiKTsKKworCXByaW50aygiXG4iKTsKK30KKwordm9pZCB1c2JpcF9kdW1wX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJaWYgKCF1cmIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6JXM6IHVyYjogbnVsbCBwb2ludGVyISFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghdXJiLT5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6JXM6IHVyYi0+ZGV2OiBudWxsIHBvaW50ZXIhIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWRldiA9ICZ1cmItPmRldi0+ZGV2OworCisJZGV2X2RiZyhkZXYsICIgICB1cmIgICAgICAgICAgICAgICAgICAgOiVwXG4iLCB1cmIpOworCWRldl9kYmcoZGV2LCAiICAgZGV2ICAgICAgICAgICAgICAgICAgIDolcFxuIiwgdXJiLT5kZXYpOworCisJdXNiaXBfZHVtcF91c2JfZGV2aWNlKHVyYi0+ZGV2KTsKKworCWRldl9kYmcoZGV2LCAiICAgcGlwZSAgICAgICAgICAgICAgICAgIDolMDh4ICIsIHVyYi0+cGlwZSk7CisKKwl1c2JpcF9kdW1wX3BpcGUodXJiLT5waXBlKTsKKworCWRldl9kYmcoZGV2LCAiICAgc3RhdHVzICAgICAgICAgICAgICAgIDolZFxuIiwgdXJiLT5zdGF0dXMpOworCWRldl9kYmcoZGV2LCAiICAgdHJhbnNmZXJfZmxhZ3MgICAgICAgIDolMDhYXG4iLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwlkZXZfZGJnKGRldiwgIiAgIHRyYW5zZmVyX2J1ZmZlciAgICAgICA6JXBcbiIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlkZXZfZGJnKGRldiwgIiAgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg6JWRcbiIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJZGV2X2RiZyhkZXYsICIgICBhY3R1YWxfbGVuZ3RoICAgICAgICAgOiVkXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWRldl9kYmcoZGV2LCAiICAgc2V0dXBfcGFja2V0ICAgICAgICAgIDolcFxuIiwgdXJiLT5zZXR1cF9wYWNrZXQpOworCisJaWYgKHVyYi0+c2V0dXBfcGFja2V0ICYmIHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkKKwkJCXVzYmlwX2R1bXBfdXNiX2N0cmxyZXF1ZXN0KAorCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPnNldHVwX3BhY2tldCk7CisKKwlkZXZfZGJnKGRldiwgIiAgIHN0YXJ0X2ZyYW1lICAgICAgICAgICA6JWRcbiIsIHVyYi0+c3RhcnRfZnJhbWUpOworCWRldl9kYmcoZGV2LCAiICAgbnVtYmVyX29mX3BhY2tldHMgICAgIDolZFxuIiwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJZGV2X2RiZyhkZXYsICIgICBpbnRlcnZhbCAgICAgICAgICAgICAgOiVkXG4iLCB1cmItPmludGVydmFsKTsKKwlkZXZfZGJnKGRldiwgIiAgIGVycm9yX2NvdW50ICAgICAgICAgICA6JWRcbiIsIHVyYi0+ZXJyb3JfY291bnQpOworCWRldl9kYmcoZGV2LCAiICAgY29udGV4dCAgICAgICAgICAgICAgIDolcFxuIiwgdXJiLT5jb250ZXh0KTsKKwlkZXZfZGJnKGRldiwgIiAgIGNvbXBsZXRlICAgICAgICAgICAgICA6JXBcbiIsIHVyYi0+Y29tcGxldGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZHVtcF91cmIpOworCit2b2lkIHVzYmlwX2R1bXBfaGVhZGVyKHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwl1ZGJnKCJCQVNFOiBjbWQgJXUgc2VxICV1IGRldmlkICV1IGRpciAldSBlcCAldVxuIiwKKwkJCXBkdS0+YmFzZS5jb21tYW5kLAorCQkJcGR1LT5iYXNlLnNlcW51bSwKKwkJCXBkdS0+YmFzZS5kZXZpZCwKKwkJCXBkdS0+YmFzZS5kaXJlY3Rpb24sCisJCQlwZHUtPmJhc2UuZXApOworCisJc3dpdGNoIChwZHUtPmJhc2UuY29tbWFuZCkgeworCWNhc2UgVVNCSVBfQ01EX1NVQk1JVDoKKwkJdWRiZygiQ01EX1NVQk1JVDogeF9mbGFncyAldSB4X2xlbiAldSBzZiAldSAjcCAldSBpdiAldVxuIiwKKwkJCQlwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9mbGFncywKKwkJCQlwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LnN0YXJ0X2ZyYW1lLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0Lm51bWJlcl9vZl9wYWNrZXRzLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LmludGVydmFsKTsKKwkJCQlicmVhazsKKwljYXNlIFVTQklQX0NNRF9VTkxJTks6CisJCXVkYmcoIkNNRF9VTkxJTks6IHNlcSAldVxuIiwgcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgorCQl1ZGJnKCJSRVRfU1VCTUlUOiBzdCAlZCBhbCAldSBzZiAlZCBlYyAlZFxuIiwKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGF0dXMsCisJCQkJcGR1LT51LnJldF9zdWJtaXQuYWN0dWFsX2xlbmd0aCwKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGFydF9mcmFtZSwKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5lcnJvcl9jb3VudCk7CisJY2FzZSBVU0JJUF9SRVRfVU5MSU5LOgorCQl1ZGJnKCJSRVRfVU5MSU5LOiBzdGF0dXMgJWRcbiIsIHBkdS0+dS5yZXRfdW5saW5rLnN0YXR1cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5PVCBSRUFDSEVEICovCisJCXVkYmcoIlVOS05PV05cbiIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2R1bXBfaGVhZGVyKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogdGhyZWFkIHJvdXRpbmVzICovCisKK2ludCB1c2JpcF90aHJlYWQodm9pZCAqcGFyYW0pCit7CisJc3RydWN0IHVzYmlwX3Rhc2sgKnV0ID0gcGFyYW07CisKKwlpZiAoIXV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2tfa2VybmVsKCk7CisJZGFlbW9uaXplKHV0LT5uYW1lKTsKKwlhbGxvd19zaWduYWwoU0lHS0lMTCk7CisJdXQtPnRocmVhZCA9IGN1cnJlbnQ7CisJdW5sb2NrX2tlcm5lbCgpOworCisJLyogc3J2LnJiIG11c3Qgd2FpdCBmb3IgcnhfdGhyZWFkIHN0YXJ0aW5nICovCisJY29tcGxldGUoJnV0LT50aHJlYWRfZG9uZSk7CisKKwkvKiBzdGFydCBvZiB3aGlsZSBsb29wICovCisJdXQtPmxvb3Bfb3BzKHV0KTsKKworCS8qIGVuZCBvZiBsb29wICovCisJdXQtPnRocmVhZCA9IE5VTEw7CisKKwljb21wbGV0ZV9hbmRfZXhpdCgmdXQtPnRocmVhZF9kb25lLCAwKTsKK30KKwordm9pZCB1c2JpcF9zdGFydF90aHJlYWRzKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCS8qCisJICogdGhyZWFkcyBhcmUgaW52b2tlZCBwZXIgb25lIGRldmljZSAocGVyIG9uZSBjb25uZWN0aW9uKS4KKwkgKi8KKwlrZXJuZWxfdGhyZWFkKHVzYmlwX3RocmVhZCwgKHZvaWQgKikmdWQtPnRjcF9yeCwgMCk7CisJa2VybmVsX3RocmVhZCh1c2JpcF90aHJlYWQsICh2b2lkICopJnVkLT50Y3BfdHgsIDApOworCisJLyogY29uZmlybSB0aHJlYWRzIGFyZSBzdGFydGluZyAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVkLT50Y3BfcngudGhyZWFkX2RvbmUpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVkLT50Y3BfdHgudGhyZWFkX2RvbmUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfc3RhcnRfdGhyZWFkcyk7CisKK3ZvaWQgdXNiaXBfc3RvcF90aHJlYWRzKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCS8qIGtpbGwgdGhyZWFkcyByZWxhdGVkIHRvIHRoaXMgc2RldiwgaWYgdi5jLiBleGlzdHMgKi8KKwlpZiAodWQtPnRjcF9yeC50aHJlYWQgIT0gTlVMTCkgeworCQlzZW5kX3NpZyhTSUdLSUxMLCB1ZC0+dGNwX3J4LnRocmVhZCwgMSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVkLT50Y3BfcngudGhyZWFkX2RvbmUpOworCQl1ZGJnKCJyeF90aHJlYWQgZm9yIHVkICVwIGhhcyBmaW5pc2hlZFxuIiwgdWQpOworCX0KKworCWlmICh1ZC0+dGNwX3R4LnRocmVhZCAhPSBOVUxMKSB7CisJCXNlbmRfc2lnKFNJR0tJTEwsIHVkLT50Y3BfdHgudGhyZWFkLCAxKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF90eC50aHJlYWRfZG9uZSk7CisJCXVkYmcoInR4X3RocmVhZCBmb3IgdWQgJXAgaGFzIGZpbmlzaGVkXG4iLCB1ZCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfc3RvcF90aHJlYWRzKTsKKwordm9pZCB1c2JpcF90YXNrX2luaXQoc3RydWN0IHVzYmlwX3Rhc2sgKnV0LCBjaGFyICpuYW1lLAorCQl2b2lkICgqbG9vcF9vcHMpKHN0cnVjdCB1c2JpcF90YXNrICopKQoreworCXV0LT50aHJlYWQgPSBOVUxMOworCWluaXRfY29tcGxldGlvbigmdXQtPnRocmVhZF9kb25lKTsKKwl1dC0+bmFtZSA9IG5hbWU7CisJdXQtPmxvb3Bfb3BzID0gbG9vcF9vcHM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF90YXNrX2luaXQpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzb2NrZXQgcm91dGluZXMgKi8KKworIC8qICBTZW5kL3JlY2VpdmUgbWVzc2FnZXMgb3ZlciBUQ1AvSVAuIEkgcmVmZXIgZHJpdmVycy9ibG9jay9uYmQuYyAqLworaW50IHVzYmlwX3htaXQoaW50IHNlbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZiwKKwkgICAgICAgaW50IHNpemUsIGludCBtc2dfZmxhZ3MpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3Y7CisJaW50IHRvdGFsID0gMDsKKworCS8qIGZvciBibG9ja3Mgb2YgaWYgKGRiZ19mbGFnX3htaXQpICovCisJY2hhciAqYnAgPSBidWY7CisJaW50IG9zaXplID0gc2l6ZTsKKworCWRiZ194bWl0KCJlbnRlclxuIik7CisKKwlpZiAoIXNvY2sgfHwgIWJ1ZiB8fCAhc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGFyZywgc29jayAlcCBidWZmICVwIHNpemUgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc29jaywgYnVmLCBzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisKKwlpZiAoZGJnX2ZsYWdfeG1pdCkgeworCQlpZiAoc2VuZCkgeworCQkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJS0xMHM6IiwgY3VycmVudC0+Y29tbSk7CisJCQllbHNlCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImludGVydXB0ICA6Iik7CisKKwkJCXByaW50aygiJXM6IHNlbmRpbmcuLi4gLCBzb2NrICVwLCBidWYgJXAsICIKKwkJCSAgICAgICAic2l6ZSAlZCwgbXNnX2ZsYWdzICVkXG4iLCBfX2Z1bmNfXywKKwkJCSAgICAgICBzb2NrLCBidWYsIHNpemUsIG1zZ19mbGFncyk7CisJCQl1c2JpcF9kdW1wX2J1ZmZlcihidWYsIHNpemUpOworCQl9CisJfQorCisKKwlkbyB7CisJCXNvY2stPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87CisJCWlvdi5pb3ZfYmFzZSAgICA9IGJ1ZjsKKwkJaW92Lmlvdl9sZW4gICAgID0gc2l6ZTsKKwkJbXNnLm1zZ19uYW1lICAgID0gTlVMTDsKKwkJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwkJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwkJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwkJbXNnLm1zZ19uYW1lbGVuICAgID0gMDsKKwkJbXNnLm1zZ19mbGFncyAgICAgID0gbXNnX2ZsYWdzIHwgTVNHX05PU0lHTkFMOworCisJCWlmIChzZW5kKQorCQkJcmVzdWx0ID0ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgJmlvdiwgMSwgc2l6ZSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIHNpemUsCisJCQkJCQkJCU1TR19XQUlUQUxMKTsKKworCQlpZiAocmVzdWx0IDw9IDApIHsKKwkJCXVkYmcoInVzYmlwX3htaXQ6ICVzIHNvY2sgJXAgYnVmICVwIHNpemUgJXUgcmV0ICVkIgorCQkJCQkiIHRvdGFsICVkXG4iLAorCQkJCQlzZW5kID8gInNlbmQiIDogInJlY2VpdmUiLCBzb2NrLCBidWYsCisJCQkJCXNpemUsIHJlc3VsdCwgdG90YWwpOworCQkJZ290byBlcnI7CisJCX0KKworCQlzaXplIC09IHJlc3VsdDsKKwkJYnVmICs9IHJlc3VsdDsKKwkJdG90YWwgKz0gcmVzdWx0OworCisJfSB3aGlsZSAoc2l6ZSA+IDApOworCisKKwlpZiAoZGJnX2ZsYWdfeG1pdCkgeworCQlpZiAoIXNlbmQpIHsKKwkJCWlmICghaW5faW50ZXJydXB0KCkpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiUtMTBzOiIsIGN1cnJlbnQtPmNvbW0pOworCQkJZWxzZQorCQkJCXByaW50ayhLRVJOX0RFQlVHICJpbnRlcnVwdCAgOiIpOworCisJCQlwcmludGsoInVzYmlwX3htaXQ6IHJlY2VpdmluZy4uLi5cbiIpOworCQkJdXNiaXBfZHVtcF9idWZmZXIoYnAsIG9zaXplKTsKKwkJCXByaW50aygidXNiaXBfeG1pdDogcmVjZWl2ZWQsIG9zaXplICVkIHJldCAlZCBzaXplICVkICIKKwkJCQkJInRvdGFsICVkXG4iLCBvc2l6ZSwgcmVzdWx0LCBzaXplLAorCQkJCQl0b3RhbCk7CisJCX0KKworCQlpZiAoc2VuZCkKKwkJCXByaW50aygidXNiaXBfeG1pdDogc2VuZCwgdG90YWwgJWRcbiIsIHRvdGFsKTsKKwl9CisKKwlyZXR1cm4gdG90YWw7CisKK2VycjoKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfeG1pdCk7CisKKworLyogbm93IGEgdXNybGFuZCB1dGlsaXR5IHNob3VsZCBzZXQgb3B0aW9ucy4gKi8KKyNpZiAwCitpbnQgc2V0cXVpY2thY2soc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKwlpbnQgdmFsID0gMTsKKwlpbnQgcmV0OworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCXJldCA9IHNvY2tldC0+b3BzLT5zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1RDUCwgVENQX1FVSUNLQUNLLAorCQkJKGNoYXIgX191c2VyICopICZ2YWwsIHNpemVvZihyZXQpKTsKKwlzZXRfZnMob2xkZnMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHNldG5vZGVsYXkoc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKwlpbnQgdmFsID0gMTsKKwlpbnQgcmV0OworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCXJldCA9IHNvY2tldC0+b3BzLT5zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1RDUCwgVENQX05PREVMQVksCisJCQkoY2hhciBfX3VzZXIgKikgJnZhbCwgc2l6ZW9mKHJldCkpOworCXNldF9mcyhvbGRmcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2V0a2VlcGFsaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKK3sKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisJaW50IHZhbCA9IDE7CisJaW50IHJldDsKKworCW9sZGZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKGdldF9kcygpKTsKKwlyZXQgPSBzb2NrZXQtPm9wcy0+c2V0c29ja29wdChzb2NrZXQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwKKwkJCShjaGFyIF9fdXNlciAqKSAmdmFsLCBzaXplb2YocmV0KSk7CisJc2V0X2ZzKG9sZGZzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2V0cmV1c2Uoc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCXNvY2tldC0+c2stPnNrX3JldXNlID0gMTsKK30KKyNlbmRpZgorCitzdHJ1Y3Qgc29ja2V0ICpzb2NrZmRfdG9fc29ja2V0KHVuc2lnbmVkIGludCBzb2NrZmQpCit7CisJc3RydWN0IHNvY2tldCAqc29ja2V0OworCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlmaWxlID0gZmdldChzb2NrZmQpOworCWlmICghZmlsZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHNvY2tmZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCisJaWYgKCFpbm9kZSB8fCAhU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiBOVUxMOworCisJc29ja2V0ID0gU09DS0VUX0koaW5vZGUpOworCisJcmV0dXJuIHNvY2tldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNvY2tmZF90b19zb2NrZXQpOworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHBkdSByb3V0aW5lcyAqLworCisvKiB0aGVyZSBtYXkgYmUgbW9yZSBjYXNlcyB0byB0d2VhayB0aGUgZmxhZ3MuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHR3ZWFrX3RyYW5zZmVyX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKworCWlmIChmbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKQorCQkvKgorCQkgKiB2aGNpX2hjZCBkb2VzIG5vdCBwcm92aWRlIERNQS1tYXBwZWQgSS9PLiBUaGUgdXBwZXIKKwkJICogZHJpdmVyIGRvZXMgbm90IG5lZWQgdG8gc2V0IHRoaXMgZmxhZy4gVGhlIHJlbW90ZQorCQkgKiB1c2JpcC5rbyBkb2VzIG5vdCBzdGlsbCBwZXJmb3JtIERNQS1tYXBwZWQgSS9PIGZvcgorCQkgKiBETUEtY2FwbGFibGUgaG9zdCBjb250cm9sbGVycy4gU28sIGNsZWFyIHRoaXMgZmxhZy4KKwkJICovCisJCWZsYWdzICY9IH5VUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCWlmIChmbGFncyAmIFVSQl9OT19TRVRVUF9ETUFfTUFQKQorCQlmbGFncyAmPSB+VVJCX05PX1NFVFVQX0RNQV9NQVA7CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX3BhY2tfY21kX3N1Ym1pdChzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkJCQkJaW50IHBhY2spCit7CisJc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0ICpzcGR1ID0gJnBkdS0+dS5jbWRfc3VibWl0OworCisJLyoKKwkgKiBTb21lIG1lbWJlcnMgYXJlIG5vdCBzdGlsbCBpbXBsZW1lbnRlZCBpbiB1c2JpcC4gSSBob3BlIHRoaXMgaXNzdWUKKwkgKiB3aWxsIGJlIGRpc2N1c3NlZCB3aGVuIHVzYmlwIGlzIHBvcnRlZCB0byBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KKwkgKi8KKwlpZiAocGFjaykgeworCQkvKiB2aGNpX3R4LmMgKi8KKwkJc3BkdS0+dHJhbnNmZXJfZmxhZ3MgPQorCQkJCXR3ZWFrX3RyYW5zZmVyX2ZsYWdzKHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCQlzcGR1LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQlzcGR1LT5zdGFydF9mcmFtZQkJPSB1cmItPnN0YXJ0X2ZyYW1lOworCQlzcGR1LT5udW1iZXJfb2ZfcGFja2V0cwkJPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQlzcGR1LT5pbnRlcnZhbAkJCT0gdXJiLT5pbnRlcnZhbDsKKwl9IGVsc2UgIHsKKwkJLyogc3R1Yl9yeC5jICovCisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgICAgICAgICA9IHNwZHUtPnRyYW5zZmVyX2ZsYWdzOworCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNwZHUtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCXVyYi0+c3RhcnRfZnJhbWUgICAgICAgICAgICA9IHNwZHUtPnN0YXJ0X2ZyYW1lOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzICAgICAgPSBzcGR1LT5udW1iZXJfb2ZfcGFja2V0czsKKwkJdXJiLT5pbnRlcnZhbCAgICAgICAgICAgICAgID0gc3BkdS0+aW50ZXJ2YWw7CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2JpcF9wYWNrX3JldF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJCQkJCWludCBwYWNrKQoreworCXN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCAqcnBkdSA9ICZwZHUtPnUucmV0X3N1Ym1pdDsKKworCWlmIChwYWNrKSB7CisJCS8qIHN0dWJfdHguYyAqLworCisJCXJwZHUtPnN0YXR1cwkJPSB1cmItPnN0YXR1czsKKwkJcnBkdS0+YWN0dWFsX2xlbmd0aAk9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJcnBkdS0+c3RhcnRfZnJhbWUJPSB1cmItPnN0YXJ0X2ZyYW1lOworCQlycGR1LT5lcnJvcl9jb3VudAk9IHVyYi0+ZXJyb3JfY291bnQ7CisJfSBlbHNlIHsKKwkJLyogdmhjaV9yeC5jICovCisKKwkJdXJiLT5zdGF0dXMJCT0gcnBkdS0+c3RhdHVzOworCQl1cmItPmFjdHVhbF9sZW5ndGgJPSBycGR1LT5hY3R1YWxfbGVuZ3RoOworCQl1cmItPnN0YXJ0X2ZyYW1lCT0gcnBkdS0+c3RhcnRfZnJhbWU7CisJCXVyYi0+ZXJyb3JfY291bnQJPSBycGR1LT5lcnJvcl9jb3VudDsKKwl9Cit9CisKKwordm9pZCB1c2JpcF9wYWNrX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGNtZCwKKwkJCQkJCQkJaW50IHBhY2spCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFVTQklQX0NNRF9TVUJNSVQ6CisJCXVzYmlwX3BhY2tfY21kX3N1Ym1pdChwZHUsIHVyYiwgcGFjayk7CisJCWJyZWFrOworCWNhc2UgVVNCSVBfUkVUX1NVQk1JVDoKKwkJdXNiaXBfcGFja19yZXRfc3VibWl0KHBkdSwgdXJiLCBwYWNrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJ1bmtub3duIGNvbW1hbmQiKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCQkvKiBCVUcoKTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9wYWNrX3BkdSk7CisKKworc3RhdGljIHZvaWQgY29ycmVjdF9lbmRpYW5fYmFzaWMoc3RydWN0IHVzYmlwX2hlYWRlcl9iYXNpYyAqYmFzZSwgaW50IHNlbmQpCit7CisJaWYgKHNlbmQpIHsKKwkJYmFzZS0+Y29tbWFuZAk9IGNwdV90b19iZTMyKGJhc2UtPmNvbW1hbmQpOworCQliYXNlLT5zZXFudW0JPSBjcHVfdG9fYmUzMihiYXNlLT5zZXFudW0pOworCQliYXNlLT5kZXZpZAk9IGNwdV90b19iZTMyKGJhc2UtPmRldmlkKTsKKwkJYmFzZS0+ZGlyZWN0aW9uCT0gY3B1X3RvX2JlMzIoYmFzZS0+ZGlyZWN0aW9uKTsKKwkJYmFzZS0+ZXAJPSBjcHVfdG9fYmUzMihiYXNlLT5lcCk7CisJfSBlbHNlIHsKKwkJYmFzZS0+Y29tbWFuZAk9IGJlMzJfdG9fY3B1KGJhc2UtPmNvbW1hbmQpOworCQliYXNlLT5zZXFudW0JPSBiZTMyX3RvX2NwdShiYXNlLT5zZXFudW0pOworCQliYXNlLT5kZXZpZAk9IGJlMzJfdG9fY3B1KGJhc2UtPmRldmlkKTsKKwkJYmFzZS0+ZGlyZWN0aW9uCT0gYmUzMl90b19jcHUoYmFzZS0+ZGlyZWN0aW9uKTsKKwkJYmFzZS0+ZXAJPSBiZTMyX3RvX2NwdShiYXNlLT5lcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9jbWRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3N1Ym1pdCAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkgeworCQlwZHUtPnRyYW5zZmVyX2ZsYWdzID0gY3B1X3RvX2JlMzIocGR1LT50cmFuc2Zlcl9mbGFncyk7CisKKwkJY3B1X3RvX2JlMzJzKCZwZHUtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhcnRfZnJhbWUpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+bnVtYmVyX29mX3BhY2tldHMpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+aW50ZXJ2YWwpOworCX0gZWxzZSB7CisJCXBkdS0+dHJhbnNmZXJfZmxhZ3MgPSBiZTMyX3RvX2NwdShwZHUtPnRyYW5zZmVyX2ZsYWdzKTsKKworCQliZTMyX3RvX2NwdXMoJnBkdS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5pbnRlcnZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9yZXRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkgeworCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhdHVzKTsKKwkJY3B1X3RvX2JlMzJzKCZwZHUtPmFjdHVhbF9sZW5ndGgpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhcnRfZnJhbWUpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+ZXJyb3JfY291bnQpOworCX0gZWxzZSB7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGF0dXMpOworCQliZTMyX3RvX2NwdXMoJnBkdS0+YWN0dWFsX2xlbmd0aCk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5lcnJvcl9jb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9jbWRfdW5saW5rKHN0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3VubGluayAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkKKwkJcGR1LT5zZXFudW0gPSBjcHVfdG9fYmUzMihwZHUtPnNlcW51bSk7CisJZWxzZQorCQlwZHUtPnNlcW51bSA9IGJlMzJfdG9fY3B1KHBkdS0+c2VxbnVtKTsKK30KKworc3RhdGljIHZvaWQgY29ycmVjdF9lbmRpYW5fcmV0X3VubGluayhzdHJ1Y3QgdXNiaXBfaGVhZGVyX3JldF91bmxpbmsgKnBkdSwKKwkJCQkJCQkJaW50IHNlbmQpCit7CisJaWYgKHNlbmQpCisJCWNwdV90b19iZTMycygmcGR1LT5zdGF0dXMpOworCWVsc2UKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXR1cyk7Cit9CisKK3ZvaWQgdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgaW50IHNlbmQpCit7CisJX191MzIgY21kID0gMDsKKworCWlmIChzZW5kKQorCQljbWQgPSBwZHUtPmJhc2UuY29tbWFuZDsKKworCWNvcnJlY3RfZW5kaWFuX2Jhc2ljKCZwZHUtPmJhc2UsIHNlbmQpOworCisJaWYgKCFzZW5kKQorCQljbWQgPSBwZHUtPmJhc2UuY29tbWFuZDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBVU0JJUF9DTURfU1VCTUlUOgorCQljb3JyZWN0X2VuZGlhbl9jbWRfc3VibWl0KCZwZHUtPnUuY21kX3N1Ym1pdCwgc2VuZCk7CisJCWJyZWFrOworCWNhc2UgVVNCSVBfUkVUX1NVQk1JVDoKKwkJY29ycmVjdF9lbmRpYW5fcmV0X3N1Ym1pdCgmcGR1LT51LnJldF9zdWJtaXQsIHNlbmQpOworCQlicmVhazsKKwljYXNlIFVTQklQX0NNRF9VTkxJTks6CisJCWNvcnJlY3RfZW5kaWFuX2NtZF91bmxpbmsoJnBkdS0+dS5jbWRfdW5saW5rLCBzZW5kKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfVU5MSU5LOgorCQljb3JyZWN0X2VuZGlhbl9yZXRfdW5saW5rKCZwZHUtPnUucmV0X3VubGluaywgc2VuZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJZXJyKCJ1bmtub3duIGNvbW1hbmQgaW4gcGR1IGhlYWRlcjogJWQiLCBjbWQpOworCQkvKiBCVUcoKTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4pOworCitzdGF0aWMgdm9pZCB1c2JpcF9pc29fcGFrY2V0X2NvcnJlY3RfZW5kaWFuKAorCQkJCXN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbywKKwkJCQlpbnQgc2VuZCkKK3sKKwkvKiBkb2VzIG5vdCBuZWVkIGFsbCBtZW1iZXJzLiBidXQgY29weSBhbGwgc2ltcGx5LiAqLworCWlmIChzZW5kKSB7CisJCWlzby0+b2Zmc2V0CT0gY3B1X3RvX2JlMzIoaXNvLT5vZmZzZXQpOworCQlpc28tPmxlbmd0aAk9IGNwdV90b19iZTMyKGlzby0+bGVuZ3RoKTsKKwkJaXNvLT5zdGF0dXMJPSBjcHVfdG9fYmUzMihpc28tPnN0YXR1cyk7CisJCWlzby0+YWN0dWFsX2xlbmd0aCA9IGNwdV90b19iZTMyKGlzby0+YWN0dWFsX2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJaXNvLT5vZmZzZXQJPSBiZTMyX3RvX2NwdShpc28tPm9mZnNldCk7CisJCWlzby0+bGVuZ3RoCT0gYmUzMl90b19jcHUoaXNvLT5sZW5ndGgpOworCQlpc28tPnN0YXR1cwk9IGJlMzJfdG9fY3B1KGlzby0+c3RhdHVzKTsKKwkJaXNvLT5hY3R1YWxfbGVuZ3RoID0gYmUzMl90b19jcHUoaXNvLT5hY3R1YWxfbGVuZ3RoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX3BhY2tfaXNvKHN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbywKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKnVpc28sIGludCBwYWNrKQoreworCWlmIChwYWNrKSB7CisJCWlzby0+b2Zmc2V0CQk9IHVpc28tPm9mZnNldDsKKwkJaXNvLT5sZW5ndGgJCT0gdWlzby0+bGVuZ3RoOworCQlpc28tPnN0YXR1cwkJPSB1aXNvLT5zdGF0dXM7CisJCWlzby0+YWN0dWFsX2xlbmd0aAk9IHVpc28tPmFjdHVhbF9sZW5ndGg7CisJfSBlbHNlIHsKKwkJdWlzby0+b2Zmc2V0CQk9IGlzby0+b2Zmc2V0OworCQl1aXNvLT5sZW5ndGgJCT0gaXNvLT5sZW5ndGg7CisJCXVpc28tPnN0YXR1cwkJPSBpc28tPnN0YXR1czsKKwkJdWlzby0+YWN0dWFsX2xlbmd0aAk9IGlzby0+YWN0dWFsX2xlbmd0aDsKKwl9Cit9CisKKworLyogbXVzdCBmcmVlIGJ1ZmZlciAqLwordm9pZCAqdXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KHN0cnVjdCB1cmIgKnVyYiwgc3NpemVfdCAqYnVmZmxlbikKK3sKKwl2b2lkICpidWZmOworCXN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbzsKKwlpbnQgbnAgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCXNzaXplX3Qgc2l6ZSA9IG5wICogc2l6ZW9mKCppc28pOworCWludCBpOworCisJYnVmZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBucDsgaSsrKSB7CisJCWlzbyA9IGJ1ZmYgKyAoaSAqIHNpemVvZigqaXNvKSk7CisKKwkJdXNiaXBfcGFja19pc28oaXNvLCAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXSwgMSk7CisJCXVzYmlwX2lzb19wYWtjZXRfY29ycmVjdF9lbmRpYW4oaXNvLCAxKTsKKwl9CisKKwkqYnVmZmxlbiA9IHNpemU7CisKKwlyZXR1cm4gYnVmZjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdSk7CisKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl9pc28oc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl2b2lkICpidWZmOworCXN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbzsKKwlpbnQgbnAgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCWludCBzaXplID0gbnAgKiBzaXplb2YoKmlzbyk7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmICghdXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCisJCXJldHVybiAwOworCisJLyogbXkgQmx1ZXRvb3RoIGRvbmdsZSBnZXRzIElTTyBVUkJzIHdoaWNoIGFyZSBucCA9IDAgKi8KKwlpZiAobnAgPT0gMCkgeworCQkvKiB1aW5mbygiaXNvIG5wID09IDBcbiIpOyAqLworCQkvKiB1c2JpcF9kdW1wX3VyYih1cmIpOyAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgYnVmZiwgc2l6ZSwgMCk7CisJaWYgKHJldCAhPSBzaXplKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJyZWN2IGlzb19mcmFtZV9kZXNjcmlwdG9yLCAlZFxuIiwKKwkJCXJldCk7CisJCWtmcmVlKGJ1ZmYpOworCisJCWlmICh1ZC0+c2lkZSA9PSBVU0JJUF9TVFVCKQorCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCWVsc2UKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCisJCXJldHVybiAtRVBJUEU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5wOyBpKyspIHsKKwkJaXNvID0gYnVmZiArIChpICogc2l6ZW9mKCppc28pKTsKKworCQl1c2JpcF9pc29fcGFrY2V0X2NvcnJlY3RfZW5kaWFuKGlzbywgMCk7CisJCXVzYmlwX3BhY2tfaXNvKGlzbywgJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0sIDApOworCX0KKworCisJa2ZyZWUoYnVmZik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfcmVjdl9pc28pOworCisKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl94YnVmZihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKQoreworCWludCByZXQ7CisJaW50IHNpemU7CisKKwlpZiAodWQtPnNpZGUgPT0gVVNCSVBfU1RVQikgeworCQkvKiBzdHViX3J4LmMgKi8KKwkJLyogdGhlIGRpcmVjdGlvbiBvZiB1cmIgbXVzdCBiZSBPVVQuICovCisJCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpCisJCQlyZXR1cm4gMDsKKworCQlzaXplID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCX0gZWxzZSB7CisJCS8qIHZoY2lfcnguYyAqLworCQkvKiB0aGUgZGlyZWN0aW9uIG9mIHVyYiBtdXN0IGJlIElOLiAqLworCQlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkKKwkJCXJldHVybiAwOworCisJCXNpemUgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCisJLyogbm8gbmVlZCB0byByZWN2IHhidWZmICovCisJaWYgKCEoc2l6ZSA+IDApKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHVzYmlwX3htaXQoMCwgdWQtPnRjcF9zb2NrZXQsIChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgc2l6ZSwgMCk7CisJaWYgKHJldCAhPSBzaXplKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJyZWN2IHhidWYsICVkXG4iLCByZXQpOworCQlpZiAodWQtPnNpZGUgPT0gVVNCSVBfU1RVQikgeworCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCX0gZWxzZSB7CisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJCXJldHVybiAtRVBJUEU7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfcmVjdl94YnVmZik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdXNiaXBfY29tbW9uX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIiIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JpcF9jb21tb25fZXhpdCh2b2lkKQoreworCXJldHVybjsKK30KKworCisKKworbW9kdWxlX2luaXQodXNiaXBfY29tbW9uX2luaXQpOworbW9kdWxlX2V4aXQodXNiaXBfY29tbW9uX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE4NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaWZuZGVmIF9fVkhDSV9DT01NT05fSAorI2RlZmluZSBfX1ZIQ0lfQ09NTU9OX0gKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogZGVmaW5lIG1hY3JvcyB0byBwcmludCBtZXNzYWdlcworICovCisKKy8qKgorICogdWRiZyAtIHByaW50IGRlYnVnIG1lc3NhZ2VzIGlmIENPTkZJR19VU0JfREVCVUcgaXMgZGVmaW5lZAorICogQGZtdDoKKyAqIEBhcmdzOgorICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisKKyNkZWZpbmUgdWRiZyhmbXQsIGFyZ3MuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiUtMTBzOiglcywlZCkgJXM6ICIgZm10LAkJXAorCQkJKGluX2ludGVycnVwdCgpID8gImludGVycnVwdCIgOiAoY3VycmVudCktPmNvbW0pLFwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICMjYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisjZWxzZSAgLyogQ09ORklHX1VTQl9ERUJVRyAqLworCisjZGVmaW5lIHVkYmcoZm10LCBhcmdzLi4uKQkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9ERUJVRyAqLworCisKK2VudW0geworCXVzYmlwX2RlYnVnX3htaXQJPSAoMSA8PCAwKSwKKwl1c2JpcF9kZWJ1Z19zeXNmcwk9ICgxIDw8IDEpLAorCXVzYmlwX2RlYnVnX3VyYgkJPSAoMSA8PCAyKSwKKwl1c2JpcF9kZWJ1Z19laAkJPSAoMSA8PCAzKSwKKworCXVzYmlwX2RlYnVnX3N0dWJfY21wCT0gKDEgPDwgOCksCisJdXNiaXBfZGVidWdfc3R1Yl9kZXYJPSAoMSA8PCA5KSwKKwl1c2JpcF9kZWJ1Z19zdHViX3J4CT0gKDEgPDwgMTApLAorCXVzYmlwX2RlYnVnX3N0dWJfdHgJPSAoMSA8PCAxMSksCisKKwl1c2JpcF9kZWJ1Z192aGNpX3JoCT0gKDEgPDwgOCksCisJdXNiaXBfZGVidWdfdmhjaV9oYwk9ICgxIDw8IDkpLAorCXVzYmlwX2RlYnVnX3ZoY2lfcngJPSAoMSA8PCAxMCksCisJdXNiaXBfZGVidWdfdmhjaV90eAk9ICgxIDw8IDExKSwKKwl1c2JpcF9kZWJ1Z192aGNpX3N5c2ZzICA9ICgxIDw8IDEyKQorfTsKKworI2RlZmluZSBkYmdfZmxhZ194bWl0CQkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3htaXQpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfcmgJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX3JoKQorI2RlZmluZSBkYmdfZmxhZ192aGNpX2hjCSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfdmhjaV9oYykKKyNkZWZpbmUgZGJnX2ZsYWdfdmhjaV9yeAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3ZoY2lfcngpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfdHgJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX3R4KQorI2RlZmluZSBkYmdfZmxhZ192aGNpX3N5c2ZzCSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfdmhjaV9zeXNmcykKKyNkZWZpbmUgZGJnX2ZsYWdfc3R1Yl9yeAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3N0dWJfcngpCisjZGVmaW5lIGRiZ19mbGFnX3N0dWJfdHgJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z19zdHViX3R4KQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnOworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX3VzYmlwX2RlYnVnOworCisjZGVmaW5lIGRiZ193aXRoX2ZsYWcoZmxhZywgZm10LCBhcmdzLi4uKQkJXAorCWRvIHsJCQkJCQlcCisJCWlmIChmbGFnICYgdXNiaXBfZGVidWdfZmxhZykJCVwKKwkJCXVkYmcoZm10ICwgIyNhcmdzKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRiZ19zeXNmcyhmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zeXNmcywgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfeG1pdChmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z194bWl0LCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ191cmIoZm10LCBhcmdzLi4uKQkJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdXJiLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ19laChmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19laCwgZm10ICwgIyNhcmdzKQorCisjZGVmaW5lIGRiZ192aGNpX3JoKGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV9yaCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfdmhjaV9oYyhmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3ZoY2lfaGMsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3ZoY2lfcngoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3J4LCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ192aGNpX3R4KGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV90eCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfdmhjaV9zeXNmcyhmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3ZoY2lfc3lzZnMsIGZtdCAsICMjYXJncykKKworI2RlZmluZSBkYmdfc3R1Yl9jbXAoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zdHViX2NtcCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfc3R1Yl9yeChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N0dWJfcngsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3N0dWJfdHgoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zdHViX3R4LCBmbXQgLCAjI2FyZ3MpCisKKworLyoqCisgKiB1ZXJyIC0gcHJpbnQgZXJyb3IgbWVzc2FnZXMKKyAqIEBmbXQ6CisgKiBAYXJnczoKKyAqLworI2RlZmluZSB1ZXJyKGZtdCwgYXJncy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIiUtMTBzOiAqKipFUlJPUioqKiAoJXMsJWQpICVzOiAiIGZtdCwJXAorCQkJKGluX2ludGVycnVwdCgpID8gImludGVycnVwdCIgOiAoY3VycmVudCktPmNvbW0pLFwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICMjYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisvKioKKyAqIHVpbmZvIC0gcHJpbnQgaW5mb3JtYXRpb24gbWVzc2FnZXMKKyAqIEBmbXQ6CisgKiBAYXJnczoKKyAqLworI2RlZmluZSB1aW5mbyhmbXQsIGFyZ3MuLi4pCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXByaW50ayhLRVJOX0lORk8gInVzYmlwOiAiIGZtdCAsICMjIGFyZ3MpOwlcCisJfSB3aGlsZSAoMCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVVNCL0lQIHJlcXVlc3QgaGVhZGVycy4KKyAqIEN1cnJlbnRseSwgd2UgZGVmaW5lIDQgcmVxdWVzdCB0eXBlczoKKyAqCisgKiAgLSBDTURfU1VCTUlUIHRyYW5zZmVycyBhIFVTQiByZXF1ZXN0LCBjb3JyZXNwb25kaW5nIHRvIHVzYl9zdWJtaXRfdXJiKCkuCisgKiAgICAoY2xpZW50IHRvIHNlcnZlcikKKyAqICAtIFJFVF9SRVRVUk4gdHJhbnNmZXJzIHRoZSByZXN1bHQgb2YgQ01EX1NVQk1JVC4KKyAqICAgIChzZXJ2ZXIgdG8gY2xpZW50KQorICogIC0gQ01EX1VOTElOSyB0cmFuc2ZlcnMgYW4gdW5saW5rIHJlcXVlc3Qgb2YgYSBwZW5kaW5nIFVTQiByZXF1ZXN0LgorICogICAgKGNsaWVudCB0byBzZXJ2ZXIpCisgKiAgLSBSRVRfVU5MSU5LIHRyYW5zZmVycyB0aGUgcmVzdWx0IG9mIENNRF9VTkxJTksuCisgKiAgICAoc2VydmVyIHRvIGNsaWVudCkKKyAqCisgKiBOb3RlOiBUaGUgYmVsb3cgcmVxdWVzdCBmb3JtYXRzIGFyZSBiYXNlZCBvbiB0aGUgVVNCIHN1YnN5c3RlbSBvZiBMaW51eC4gSXRzCisgKiBkZXRhaWxzIHdpbGwgYmUgZGVmaW5lZCB3aGVuIG90aGVyIGltcGxlbWVudGF0aW9ucyBjb21lLgorICoKKyAqCisgKi8KKworLyoKKyAqIEEgYmFzaWMgaGVhZGVyIGZvbGxvd2VkIGJ5IG90aGVyIGFkZGl0aW9uYWwgaGVhZGVycy4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9iYXNpYyB7CisjZGVmaW5lIFVTQklQX0NNRF9TVUJNSVQJMHgwMDAxCisjZGVmaW5lIFVTQklQX0NNRF9VTkxJTksJMHgwMDAyCisjZGVmaW5lIFVTQklQX1JFVF9TVUJNSVQJMHgwMDAzCisjZGVmaW5lIFVTQklQX1JFVF9VTkxJTksJMHgwMDA0CisJX191MzIgY29tbWFuZDsKKworCSAvKiBzZXF1ZW5jaWFsIG51bWJlciB3aGljaCBpZGVudGlmaWVzIHJlcXVlc3RzLgorCSAgKiBpbmNyZW1lbnRlZCBwZXIgY29ubmVjdGlvbnMgKi8KKwlfX3UzMiBzZXFudW07CisKKwkvKiBkZXZpZCBpcyB1c2VkIHRvIHNwZWNpZnkgYSByZW1vdGUgVVNCIGRldmljZSB1bmlxdWVseSBpbnN0ZWFkCisJICogb2YgYnVzbnVtIGFuZCBkZXZudW0gaW4gTGludXguIEluIHRoZSBjYXNlIG9mIExpbnV4IHN0dWJfZHJpdmVyLAorCSAqIHRoaXMgdmFsdWUgaXMgKChidXNudW0gPDwgMTYpIHwgZGV2bnVtKSAqLworCV9fdTMyIGRldmlkOworCisjZGVmaW5lIFVTQklQX0RJUl9PVVQJMAorI2RlZmluZSBVU0JJUF9ESVJfSU4gCTEKKwlfX3UzMiBkaXJlY3Rpb247CisJX191MzIgZXA7ICAgICAvKiBlbmRwb2ludCBudW1iZXIgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogQW4gYWRkaXRpb25hbCBoZWFkZXIgZm9yIGEgQ01EX1NVQk1JVCBwYWNrZXQuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3N1Ym1pdCB7CisJLyogdGhlc2UgdmFsdWVzIGFyZSBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgaW4gYSBVUkIuICovCisKKwkvKiB0aGUgc2FtZSBpbiBhIFVSQi4gKi8KKwlfX3UzMiB0cmFuc2Zlcl9mbGFnczsKKworCS8qIHNldCB0aGUgZm9sbG93aW5nIGRhdGEgc2l6ZSAob3V0KSwKKwkgKiBvciBleHBlY3RlZCByZWFkaW5nIGRhdGEgc2l6ZSAoaW4pICovCisJX19zMzIgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCS8qIGl0IGlzIGRpZmZpY3VsdCBmb3IgdXNiaXAgdG8gc3luYyBmcmFtZXMgKHJlc2VydmVkIG9ubHk/KSAqLworCV9fczMyIHN0YXJ0X2ZyYW1lOworCisJLyogdGhlIG51bWJlciBvZiBpc28gZGVzY3JpcHRvcnMgdGhhdCBmb2xsb3dzIHRoaXMgaGVhZGVyICovCisJX19zMzIgbnVtYmVyX29mX3BhY2tldHM7CisKKwkvKiB0aGUgbWF4aW11bSB0aW1lIHdpdGhpbiB3aGljaCB0aGlzIHJlcXVlc3Qgd29ya3MgaW4gYSBob3N0CisJICogY29udHJvbGxlciBvZiBhIHNlcnZlciBzaWRlICovCisJX19zMzIgaW50ZXJ2YWw7CisKKwkvKiBzZXQgc2V0dXAgcGFja2V0IGRhdGEgZm9yIGEgQ1RSTCByZXF1ZXN0ICovCisJdW5zaWduZWQgY2hhciBzZXR1cFs4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogQW4gYWRkaXRpb25hbCBoZWFkZXIgZm9yIGEgUkVUX1NVQk1JVCBwYWNrZXQuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCB7CisJX19zMzIgc3RhdHVzOworCV9fczMyIGFjdHVhbF9sZW5ndGg7IC8qIHJldHVybmVkIGRhdGEgbGVuZ3RoICovCisJX19zMzIgc3RhcnRfZnJhbWU7IC8qIElTTyBhbmQgSU5UICovCisJX19zMzIgbnVtYmVyX29mX3BhY2tldHM7ICAvKiBJU08gb25seSAqLworCV9fczMyIGVycm9yX2NvdW50OyAvKiBJU08gb25seSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBDTURfVU5MSU5LIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfdW5saW5rIHsKKwlfX3UzMiBzZXFudW07IC8qIFVSQidzIHNlcW51bSB3aGljaCB3aWxsIGJlIHVubGlua2VkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogQW4gYWRkaXRpb25hbCBoZWFkZXIgZm9yIGEgUkVUX1VOTElOSyBwYWNrZXQuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3VubGluayB7CisJX19zMzIgc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyogdGhlIHNhbWUgYXMgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBidXQgcGFja2VkIGZvciBwZHUgKi8KK3N0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgeworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBsZW5ndGg7ICAgICAgICAgICAgLyogZXhwZWN0ZWQgbGVuZ3RoICovCisJX191MzIgYWN0dWFsX2xlbmd0aDsKKwlfX3UzMiBzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogQWxsIHVzYmlwIHBhY2tldHMgdXNlIGEgY29tbW9uIGhlYWRlciB0byBrZWVwIGNvZGUgc2ltcGxlLgorICovCitzdHJ1Y3QgdXNiaXBfaGVhZGVyIHsKKwlzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljIGJhc2U7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3N1Ym1pdAljbWRfc3VibWl0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyX3JldF9zdWJtaXQJcmV0X3N1Ym1pdDsKKwkJc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfdW5saW5rCWNtZF91bmxpbms7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3VubGluawlyZXRfdW5saW5rOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKK2ludCB1c2JpcF94bWl0KGludCwgc3RydWN0IHNvY2tldCAqLCBjaGFyICosIGludCwgaW50KTsKK2ludCB1c2JpcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBpbnQpOworCisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVyZmFjZV90b19idXNudW0oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlyZXR1cm4gdWRldi0+YnVzLT5idXNudW07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVyZmFjZV90b19kZXZudW0oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlyZXR1cm4gdWRldi0+ZGV2bnVtOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbnRlcmZhY2VfdG9faW5mbnVtKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJcmV0dXJuIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKK30KKworI2lmIDAKK2ludCBzZXRub2RlbGF5KHN0cnVjdCBzb2NrZXQgKik7CitpbnQgc2V0cXVpY2thY2soc3RydWN0IHNvY2tldCAqKTsKK2ludCBzZXRrZWVwYWxpdmUoc3RydWN0IHNvY2tldCAqc29ja2V0KTsKK3ZvaWQgc2V0cmV1c2Uoc3RydWN0IHNvY2tldCAqKTsKKyNlbmRpZgorCitzdHJ1Y3Qgc29ja2V0ICpzb2NrZmRfdG9fc29ja2V0KHVuc2lnbmVkIGludCk7CitpbnQgc2V0X3NvY2thZGRyKHN0cnVjdCBzb2NrZXQgKnNvY2tldCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzKTsKKwordm9pZCB1c2JpcF9kdW1wX3VyYihzdHJ1Y3QgdXJiICpwdXJiKTsKK3ZvaWQgdXNiaXBfZHVtcF9oZWFkZXIoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KTsKKworCitzdHJ1Y3QgdXNiaXBfZGV2aWNlOworCitzdHJ1Y3QgdXNiaXBfdGFzayB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CisJc3RydWN0IGNvbXBsZXRpb24gdGhyZWFkX2RvbmU7CisJY2hhciAqbmFtZTsKKwl2b2lkICgqbG9vcF9vcHMpKHN0cnVjdCB1c2JpcF90YXNrICopOworfTsKKworZW51bSB1c2JpcF9zaWRlIHsKKwlVU0JJUF9WSENJLAorCVVTQklQX1NUVUIsCit9OworCitlbnVtIHVzYmlwX3N0YXR1cyB7CisJLyogc2RldiBpcyBhdmFpbGFibGUuICovCisJU0RFVl9TVF9BVkFJTEFCTEUgPSAweDAxLAorCS8qIHNkZXYgaXMgbm93IHVzZWQuICovCisJU0RFVl9TVF9VU0VELAorCS8qIHNkZXYgaXMgdW51c2FibGUgYmVjYXVzZSBvZiBhIGZhdGFsIGVycm9yLiAqLworCVNERVZfU1RfRVJST1IsCisKKwkvKiB2ZGV2IGRvZXMgbm90IGNvbm5lY3QgYSByZW1vdGUgZGV2aWNlLiAqLworCVZERVZfU1RfTlVMTCwKKwkvKiB2ZGV2IGlzIHVzZWQsIGJ1dCB0aGUgVVNCIGFkZHJlc3MgaXMgbm90IGFzc2lnbmVkIHlldCAqLworCVZERVZfU1RfTk9UQVNTSUdORUQsCisJVkRFVl9TVF9VU0VELAorCVZERVZfU1RfRVJST1IKK307CisKKy8qIGEgY29tbW9uIHN0cnVjdHVyZSBmb3Igc3R1Yl9kZXZpY2UgYW5kIHZoY2lfZGV2aWNlICovCitzdHJ1Y3QgdXNiaXBfZGV2aWNlIHsKKwllbnVtIHVzYmlwX3NpZGUgc2lkZTsKKworCWVudW0gdXNiaXBfc3RhdHVzIHN0YXR1czsKKworCS8qIGxvY2sgZm9yIHN0YXR1cyAqLworCXNwaW5sb2NrX3QgbG9jazsKKworCXN0cnVjdCBzb2NrZXQgKnRjcF9zb2NrZXQ7CisKKwlzdHJ1Y3QgdXNiaXBfdGFzayB0Y3Bfcng7CisJc3RydWN0IHVzYmlwX3Rhc2sgdGNwX3R4OworCisJLyogZXZlbnQgaGFuZGxlciAqLworI2RlZmluZSBVU0JJUF9FSF9TSFVURE9XTgkoMSA8PCAwKQorI2RlZmluZSBVU0JJUF9FSF9CWUUJCSgxIDw8IDEpCisjZGVmaW5lIFVTQklQX0VIX1JFU0VUCQkoMSA8PCAyKQorI2RlZmluZSBVU0JJUF9FSF9VTlVTQUJMRQkoMSA8PCAzKQorCisjZGVmaW5lIFNERVZfRVZFTlRfUkVNT1ZFRAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCB8IFVTQklQX0VIX0JZRSkKKyNkZWZpbmUJU0RFVl9FVkVOVF9ET1dOCQkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCkKKyNkZWZpbmUJU0RFVl9FVkVOVF9FUlJPUl9UQ1AJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfUkVTRVQpCisjZGVmaW5lCVNERVZfRVZFTlRfRVJST1JfU1VCTUlUCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlTREVWX0VWRU5UX0VSUk9SX01BTExPQwkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9VTlVTQUJMRSkKKworI2RlZmluZQlWREVWX0VWRU5UX1JFTU9WRUQJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfQllFKQorI2RlZmluZQlWREVWX0VWRU5UX0RPV04JCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlWREVWX0VWRU5UX0VSUk9SX1RDUAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCkKKyNkZWZpbmUJVkRFVl9FVkVOVF9FUlJPUl9NQUxMT0MJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfVU5VU0FCTEUpCisKKwl1bnNpZ25lZCBsb25nIGV2ZW50OworCXN0cnVjdCB1c2JpcF90YXNrIGVoOworCXdhaXRfcXVldWVfaGVhZF90IGVoX3dhaXRxOworCisJc3RydWN0IGVoX29wcyB7CisJCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHVzYmlwX2RldmljZSAqKTsKKwkJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgdXNiaXBfZGV2aWNlICopOworCQl2b2lkICgqdW51c2FibGUpKHN0cnVjdCB1c2JpcF9kZXZpY2UgKik7CisJfSBlaF9vcHM7Cit9OworCisKK3ZvaWQgdXNiaXBfdGFza19pbml0KHN0cnVjdCB1c2JpcF90YXNrICp1dCwgY2hhciAqLAorCQkJCXZvaWQgKCpsb29wX29wcykoc3RydWN0IHVzYmlwX3Rhc2sgKikpOworCit2b2lkIHVzYmlwX3N0YXJ0X3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOwordm9pZCB1c2JpcF9zdG9wX3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOworaW50IHVzYmlwX3RocmVhZCh2b2lkICpwYXJhbSk7CisKK3ZvaWQgdXNiaXBfcGFja19wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBzdHJ1Y3QgdXJiICp1cmIsIGludCBjbWQsCisJCQkJCQkJCWludCBwYWNrKTsKKwordm9pZCB1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBpbnQgc2VuZCk7CisvKiBzb21lIG1lbWJlcnMgb2YgdXJiIG11c3QgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlLiAqLworaW50IHVzYmlwX3JlY3ZfeGJ1ZmYoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYik7CisvKiBzb21lIG1lbWJlcnMgb2YgdXJiIG11c3QgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlLiAqLworaW50IHVzYmlwX3JlY3ZfaXNvKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpOwordm9pZCAqdXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KHN0cnVjdCB1cmIgKnVyYiwgc3NpemVfdCAqYnVmZmxlbik7CisKKworLyogdXNiaXBfZXZlbnQuYyAqLwordm9pZCB1c2JpcF9zdGFydF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7Cit2b2lkIHVzYmlwX3N0b3BfZWgoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOwordm9pZCB1c2JpcF9ldmVudF9hZGQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQpOworaW50IHVzYmlwX2V2ZW50X2hhcHBlbmQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2V2ZW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzE4NTUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2V2ZW50LmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKworc3RhdGljIGludCBldmVudF9oYW5kbGVyKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCWRiZ19laCgiZW50ZXJcbiIpOworCisJLyoKKwkgKiBFdmVudHMgYXJlIGhhbmRsZWQgYnkgb25seSB0aGlzIHRocmVhZC4KKwkgKi8KKwl3aGlsZSAodXNiaXBfZXZlbnRfaGFwcGVuZCh1ZCkpIHsKKwkJZGJnX2VoKCJwZW5kaW5nIGV2ZW50ICVseFxuIiwgdWQtPmV2ZW50KTsKKworCQkvKgorCQkgKiBOT1RFOiBzaHV0ZG93biBtdXN0IGNvbWUgZmlyc3QuCisJCSAqIFNodXRkb3duIHRoZSBkZXZpY2UuCisJCSAqLworCQlpZiAodWQtPmV2ZW50ICYgVVNCSVBfRUhfU0hVVERPV04pIHsKKwkJCXVkLT5laF9vcHMuc2h1dGRvd24odWQpOworCisJCQl1ZC0+ZXZlbnQgJj0gflVTQklQX0VIX1NIVVRET1dOOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIFN0b3AgdGhlIGVycm9yIGhhbmRsZXIuICovCisJCWlmICh1ZC0+ZXZlbnQgJiBVU0JJUF9FSF9CWUUpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogUmVzZXQgdGhlIGRldmljZS4gKi8KKwkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX1JFU0VUKSB7CisJCQl1ZC0+ZWhfb3BzLnJlc2V0KHVkKTsKKworCQkJdWQtPmV2ZW50ICY9IH5VU0JJUF9FSF9SRVNFVDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBNYXJrIHRoZSBkZXZpY2UgYXMgdW51c2FibGUuICovCisJCWlmICh1ZC0+ZXZlbnQgJiBVU0JJUF9FSF9VTlVTQUJMRSkgeworCQkJdWQtPmVoX29wcy51bnVzYWJsZSh1ZCk7CisKKwkJCXVkLT5ldmVudCAmPSB+VVNCSVBfRUhfVU5VU0FCTEU7CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogTk9UUkVBQ0hFRCAqLworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGV2ZW50XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfaGFuZGxlcl9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9IGNvbnRhaW5lcl9vZih1dCwgc3RydWN0IHVzYmlwX2RldmljZSwgZWgpOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlkYmdfZWgoInNpZ25hbCBjYXRjaGVkIVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChldmVudF9oYW5kbGVyKHVkKSA8IDApCisJCQlicmVhazsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodWQtPmVoX3dhaXRxLCB1c2JpcF9ldmVudF9oYXBwZW5kKHVkKSk7CisJCWRiZ19laCgid2FrZXVwXG4iKTsKKwl9Cit9CisKK3ZvaWQgdXNiaXBfc3RhcnRfZWgoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHVzYmlwX3Rhc2sgKmVoID0gJnVkLT5laDsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVkLT5laF93YWl0cSk7CisJdWQtPmV2ZW50ID0gMDsKKworCXVzYmlwX3Rhc2tfaW5pdChlaCwgInVzYmlwX2VoIiwgZXZlbnRfaGFuZGxlcl9sb29wKTsKKworCWtlcm5lbF90aHJlYWQodXNiaXBfdGhyZWFkLCAodm9pZCAqKWVoLCAwKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmVoLT50aHJlYWRfZG9uZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdGFydF9laCk7CisKK3ZvaWQgdXNiaXBfc3RvcF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdXNiaXBfdGFzayAqZWggPSAmdWQtPmVoOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmZWgtPnRocmVhZF9kb25lKTsKKwlkYmdfZWgoInVzYmlwX2VoIGhhcyBmaW5pc2hlZFxuIik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdG9wX2VoKTsKKwordm9pZCB1c2JpcF9ldmVudF9hZGQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQpCit7CisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwl1ZC0+ZXZlbnQgfD0gZXZlbnQ7CisKKwl3YWtlX3VwKCZ1ZC0+ZWhfd2FpdHEpOworCisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2V2ZW50X2FkZCk7CisKK2ludCB1c2JpcF9ldmVudF9oYXBwZW5kKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCWludCBoYXBwZW5kID0gMDsKKworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCisJaWYgKHVkLT5ldmVudCAhPSAwKQorCQloYXBwZW5kID0gMTsKKworCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisKKwlyZXR1cm4gaGFwcGVuZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2V2ZW50X2hhcHBlbmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzNzUxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlICIuLi8uLi91c2IvY29yZS9oY2QuaCIKKworCitzdHJ1Y3QgdmhjaV9kZXZpY2UgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJLyoKKwkgKiBkZXZpZCBzcGVjaWZpZXMgYSByZW1vdGUgdXNiIGRldmljZSB1bmlxdWVseSBpbnN0ZWFkCisJICogb2YgY29tYmluYXRpb24gb2YgYnVzbnVtIGFuZCBkZXZudW0uCisJICovCisJX191MzIgZGV2aWQ7CisKKwkvKiBzcGVlZCBvZiBhIHJlbW90ZSBkZXZpY2UgKi8KKwllbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQ7CisKKwkvKiAgdmhjaSByb290LWh1YiBwb3J0IHRvIHdoaWNoIHRoaXMgZGV2aWNlIGlzIGF0dGFjaGVkICAqLworCV9fdTMyIHJocG9ydDsKKworCXN0cnVjdCB1c2JpcF9kZXZpY2UgdWQ7CisKKworCS8qIGxvY2sgZm9yIHRoZSBiZWxvdyBsaW5rIGxpc3RzICovCisJc3BpbmxvY2tfdCBwcml2X2xvY2s7CisKKwkvKiB2aGNpX3ByaXYgaXMgbGlua2VkIHRvIG9uZSBvZiB0aGVtLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgcHJpdl90eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZfcng7CisKKwkvKiB2aGNpX3VubGluayBpcyBsaW5rZWQgdG8gb25lIG9mIHRoZW0gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua190eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua19yeDsKKworCS8qIHZoY2lfdHggdGhyZWFkIHNsZWVwcyBmb3IgdGhpcyBxdWV1ZSAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxX3R4OworfTsKKworCisvKiB1cmItPmhjcHJpdiwgdXNlIGNvbnRhaW5lcl9vZigpICovCitzdHJ1Y3QgdmhjaV9wcml2IHsKKwl1bnNpZ25lZCBsb25nIHNlcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworCitzdHJ1Y3QgdmhjaV91bmxpbmsgeworCS8qIHNlcW51bSBvZiB0aGlzIHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBsb25nIHNlcW51bTsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIHNlcW51bSBvZiB0aGUgdW5saW5rIHRhcmdldCAqLworCXVuc2lnbmVkIGxvbmcgdW5saW5rX3NlcW51bTsKK307CisKKy8qCisgKiBUaGUgbnVtYmVyIG9mIHBvcnRzIGlzIGxlc3MgdGhhbiAxNiA/CisgKiBVU0JfTUFYQ0hJTERSRU4gaXMgc3RhdGljYWxseSBkZWZpbmVkIHRvIDE2IGluIHVzYi5oLiAgSXRzIG1heGltdW0gdmFsdWUKKyAqIHdvdWxkIGJlIDMxIGJlY2F1c2UgdGhlIGV2ZW50X2JpdHNbMV0gb2Ygc3RydWN0IHVzYl9odWIgaXMgZGVmaW5lZCBhcworICogdW5zaWduZWQgbG9uZyBpbiBodWIuaAorICovCisjZGVmaW5lIFZIQ0lfTlBPUlRTIDgKKworLyogZm9yIHVzYl9idXMuaGNwcml2ICovCitzdHJ1Y3QgdmhjaV9oY2QgeworCXNwaW5sb2NrX3QJbG9jazsKKworCXUzMglwb3J0X3N0YXR1c1tWSENJX05QT1JUU107CisKKwl1bnNpZ25lZAlyZXN1bWluZzoxOworCXVuc2lnbmVkIGxvbmcJcmVfdGltZW91dDsKKworCWF0b21pY190IHNlcW51bTsKKworCS8qCisJICogTk9URToKKwkgKiB3SW5kZXggc2hvd3MgdGhlIHBvcnQgbnVtYmVyIGFuZCBiZWdpbnMgZnJvbSAxLgorCSAqIEJ1dCwgdGhlIGluZGV4IG9mIHRoaXMgYXJyYXkgYmVnaW5zIGZyb20gMC4KKwkgKi8KKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgdmRldltWSENJX05QT1JUU107CisKKwkvKiB2aGNpX2RldmljZSB3aGljaCBoYXMgbm90IGJlZW4gYXNzaWdlZCBpdHMgYWRkcmVzcyB5ZXQgKi8KKwlpbnQgcGVuZGluZ19wb3J0OworfTsKKworCitleHRlcm4gc3RydWN0IHZoY2lfaGNkICp0aGVfY29udHJvbGxlcjsKK2V4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRldl9hdHRyX2dyb3VwOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwcm90b3R5cGUgZGVjbGFyYXRpb24gKi8KKworLyogdmhjaV9oY2QuYyAqLwordm9pZCByaF9wb3J0X2Nvbm5lY3QoaW50IHJocG9ydCwgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkKTsKK3ZvaWQgcmhfcG9ydF9kaXNjb25uZWN0KGludCByaHBvcnQpOwordm9pZCB2aGNpX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KTsKK3ZvaWQgdmhjaV90eF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCk7CisKKyNkZWZpbmUgaGFyZHdhcmUJCSgmdGhlX2NvbnRyb2xsZXItPnBkZXYuZGV2KQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2aGNpX2RldmljZSAqcG9ydF90b192ZGV2KF9fdTMyIHBvcnQpCit7CisJcmV0dXJuICZ0aGVfY29udHJvbGxlci0+dmRldltwb3J0XTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmhjaV9oY2QgKmhjZF90b192aGNpKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3QgdmhjaV9oY2QgKikgKGhjZC0+aGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICp2aGNpX3RvX2hjZChzdHJ1Y3QgdmhjaV9oY2QgKnZoY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKSB2aGNpLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnZoY2lfZGV2KHN0cnVjdCB2aGNpX2hjZCAqdmhjaSkKK3sKKwlyZXR1cm4gdmhjaV90b19oY2QodmhjaSktPnNlbGYuY29udHJvbGxlcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1YTJlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCkBAIC0wLDAgKzEsMTI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAidmhjaS5oIgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRha2FoaXJvIEhpcm9mdWNoaSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlZpcnR1YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBEcml2ZXIgZm9yIFVTQi9JUCIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOQ0UgIkdQTCIKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOQ0UpOworCisKKworLyoKKyAqIFRPRE8KKyAqCS0gdXBkYXRlIHJvb3QgaHViIGVtdWxhdGlvbgorICoJLSBtb3ZlIHRoZSBlbXVsYXRpb24gY29kZSB0byB1c2VybGFuZCA/CisgKgkJcG9ydGluZyB0byBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcworICoJCW1pbmltaXplIGtlcm5lbCBjb2RlCisgKgktIGFkZCBzdXNwZW5kL3Jlc3VtZSBjb2RlCisgKgktIGNsZWFuIHVwIGV2ZXJ5dGhpbmcKKyAqLworCisKKy8qIFNlZSB1c2IgZ2FkZ2V0IGR1bW15IGhjZCAqLworCisKK3N0YXRpYyBpbnQgdmhjaV9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZmYpOworc3RhdGljIGludCB2aGNpX2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLAorCQl1MTYgd0luZGV4LCBjaGFyICpidWZmLCB1MTYgd0xlbmd0aCk7CitzdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLAorCQkJCQkJCWdmcF90IG1lbV9mbGFncyk7CitzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqdmhjaV9oY2QpOworc3RhdGljIHZvaWQgdmhjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpOworc3RhdGljIGludCB2aGNpX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAidmhjaV9oY2QiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2NbXSA9ICJVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRvcm9sbGVyIjsKKworc3RydWN0IHZoY2lfaGNkICp0aGVfY29udHJvbGxlcjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJpdF9kZXNjW10gPSB7CisJIkNPTk5FQ1RJT04iLAkJLyowKi8KKwkiRU5BQkxFIiwJCS8qMSovCisJIlNVU1BFTkQiLAkJLyoyKi8KKwkiT1ZFUl9DVVJSRU5UIiwJCS8qMyovCisJIlJFU0VUIiwJCS8qNCovCisJIlI1IiwJCS8qNSovCisJIlI2IiwJCS8qNiovCisJIlI3IiwJCS8qNyovCisJIlBPV0VSIiwJCS8qOCovCisJIkxPV1NQRUVEIiwJCS8qOSovCisJIkhJR0hTUEVFRCIsCQkvKjEwKi8KKwkiUE9SVF9URVNUIiwJCS8qMTEqLworCSJJTkRJQ0FUT1IiLAkJLyoxMiovCisJIlIxMyIsCQkvKjEzKi8KKwkiUjE0IiwJCS8qMTQqLworCSJSMTUiLAkJLyoxNSovCisJIkNfQ09OTkVDVElPTiIsCQkvKjE2Ki8KKwkiQ19FTkFCTEUiLAkJLyoxNyovCisJIkNfU1VTUEVORCIsCQkvKjE4Ki8KKwkiQ19PVkVSX0NVUlJFTlQiLAkvKjE5Ki8KKwkiQ19SRVNFVCIsCQkvKjIwKi8KKwkiUjIxIiwJCS8qMjEqLworCSJSMjIiLAkJLyoyMiovCisJIlIyMyIsCQkvKjIzKi8KKwkiUjI0IiwJCS8qMjQqLworCSJSMjUiLAkJLyoyNSovCisJIlIyNiIsCQkvKjI2Ki8KKwkiUjI3IiwJCS8qMjcqLworCSJSMjgiLAkJLyoyOCovCisJIlIyOSIsCQkvKjI5Ki8KKwkiUjMwIiwJCS8qMzAqLworCSJSMzEiLAkJLyozMSovCit9OworCisKK3N0YXRpYyB2b2lkIGR1bXBfcG9ydF9zdGF0dXModTMyIHN0YXR1cykKK3sKKwlpbnQgaSA9IDA7CisKKwlwcmludGsoS0VSTl9ERUJVRyAic3RhdHVzICUwOHg6Iiwgc3RhdHVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpCisJCQlwcmludGsoIiAlcyIsIGJpdF9kZXNjW2ldKTsKKwl9CisKKwlwcmludGsoIlxuIik7Cit9CisKKworCit2b2lkIHJoX3BvcnRfY29ubmVjdChpbnQgcmhwb3J0LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWRiZ192aGNpX3JoKCJyaF9wb3J0X2Nvbm5lY3QgJWRcbiIsIHJocG9ydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKworCXRoZV9jb250cm9sbGVyLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTgorCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PSBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJdGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0gVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIHNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPnZkZXZbcmhwb3J0XS51ZC5sb2NrKTsKKwkgKiB0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLnN0YXR1cyA9IFZERVZfQ09OTkVDVDsKKwkgKiBzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPnZkZXZbcmhwb3J0XS51ZC5sb2NrKTsgKi8KKworCXRoZV9jb250cm9sbGVyLT5wZW5kaW5nX3BvcnQgPSByaHBvcnQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlcikpOworfQorCit2b2lkIHJoX3BvcnRfZGlzY29ubmVjdChpbnQgcmhwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmdfdmhjaV9yaCgicmhfcG9ydF9kaXNjb25uZWN0ICVkXG4iLCByaHBvcnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJLyogc3RvcF9hY3Rpdml0eShkdW0sIGRyaXZlcik7ICovCisJdGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0gflVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTjsKKwl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CisKKworCS8qIG5vdCB5ZXQgY29tcGxldGUgdGhlIGRpc2Nvbm5lY3Rpb24KKwkgKiBzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCSAqIHZkZXYtPnVkLnN0YXR1cyA9IFZIQ19TVF9ESVNDT05ORUNUOworCSAqIHNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsgKi8KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFBPUlRfQ19NQVNLIFwKKwkoKFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSBcCisJICB8IFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX1JFU0VUKSA8PCAxNikKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0bHkgdGhlIHNhbWUgYXMgZHVtbXlfaGNkLmM6ZHVtbXlfaHViX3N0YXR1cygpIHdpdGhvdXQKKyAqIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQuIEJ1dCwgaXQgaXMgbW9kaWZpZWQgdG8gcHJvdmlkZSBtdWx0aXBsZSBwb3J0cy4KKyAqCisgKiBAYnVmOiBhIGJpdG1hcCB0byBzaG93IHdoaWNoIHBvcnQgc3RhdHVzIGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgYml0ICAwOiByZXNlcnZlZCBvciB1c2VkIGZvciBhbm90aGVyIHB1cnBvc2U/CisgKiAgYml0ICAxOiB0aGUgc3RhdHVzIG9mIHBvcnQgMCBoYXMgYmVlbiBjaGFuZ2VkLgorICogIGJpdCAgMjogdGhlIHN0YXR1cyBvZiBwb3J0IDEgaGFzIGJlZW4gY2hhbmdlZC4KKyAqICAuLi4KKyAqICBiaXQgIDc6IHRoZSBzdGF0dXMgb2YgcG9ydCA2IGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgYml0ICA4OiB0aGUgc3RhdHVzIG9mIHBvcnQgNyBoYXMgYmVlbiBjaGFuZ2VkLgorICogIC4uLgorICogIGJpdCAxNTogdGhlIHN0YXR1cyBvZiBwb3J0IDE0IGhhcyBiZWVuIGNoYW5nZWQuCisgKgorICogU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3J0cyBpcyAzMSAoIHBvcnQgMCB0byBwb3J0IDMwKSA/CisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgYWN0dWFsIHRyYW5zZmVyZWQgbGVuZ3RoIGluIGJ5dGUuIElmIG5vdGhpbmcgaGFzCisgKiBiZWVuIGNoYW5nZWQsIHJldHVybiAwLiBJbiB0aGUgY2FzZSB0aGF0IHRoZSBudW1iZXIgb2YgcG9ydHMgaXMgbGVzcyB0aGFuIG9yCisgKiBlcXVhbCB0byA2IChWSENJX05QT1JUUz09NyksIHJldHVybiAxLgorICoKKyAqLworc3RhdGljIGludCB2aGNpX2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB2aGNpX2hjZAkqdmhjaTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJcmV0dmFsID0gMDsKKworCS8qIHRoZSBlbm91Z2ggYnVmZmVyIGlzIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8gVVNCX01BWENISUxEUkVOICovCisJdW5zaWduZWQgbG9uZwkqZXZlbnRfYml0cyA9ICh1bnNpZ25lZCBsb25nICopIGJ1ZjsKKwlpbnQJCXJocG9ydDsKKwlpbnQJCWNoYW5nZWQgPSAwOworCisKKwkqZXZlbnRfYml0cyA9IDA7CisKKwl2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aGNpLT5sb2NrLCBmbGFncyk7CisJaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpIHsKKwkJZGJnX3ZoY2lfcmgoImh3IGFjY2Vzc2libGUgZmxhZyBpbiBvbj9cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogY2hlY2sgcHNldWRvIHN0YXR1cyByZWdpc3RlciBmb3IgZWFjaCBwb3J0ICovCisJZm9yIChyaHBvcnQgPSAwOyByaHBvcnQgPCBWSENJX05QT1JUUzsgcmhwb3J0KyspIHsKKwkJaWYgKCh2aGNpLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgUE9SVF9DX01BU0spKSB7CisJCQkvKiBUaGUgc3RhdHVzIG9mIGEgcG9ydCBoYXMgYmVlbiBjaGFuZ2VkLCAqLworCQkJZGJnX3ZoY2lfcmgoInBvcnQgJWQgaXMgY2hhbmdlZFxuIiwgcmhwb3J0KTsKKworCQkJKmV2ZW50X2JpdHMgfD0gMSA8PCAocmhwb3J0ICsgMSk7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCX0KKworCXVpbmZvKCJjaGFuZ2VkICVkXG4iLCBjaGFuZ2VkKTsKKworCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1NVU1BFTkRFRCkKKwkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKKworCWlmIChjaGFuZ2VkKQorCQlyZXR2YWwgPSAxICsgKFZIQ0lfTlBPUlRTIC8gOCk7CisJZWxzZQorCQlyZXR2YWwgPSAwOworCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBTZWUgaHViX2NvbmZpZ3VyZSBpbiBodWIuYyAqLworc3RhdGljIGlubGluZSB2b2lkIGh1Yl9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA5OworCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSAoX19mb3JjZSBfX3UxNikKKwkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKSk7CisJZGVzYy0+Yk5iclBvcnRzID0gVkhDSV9OUE9SVFM7CisJZGVzYy0+Yml0bWFwWzBdID0gMHhmZjsKKwlkZXNjLT5iaXRtYXBbMV0gPSAweGZmOworfQorCitzdGF0aWMgaW50IHZoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJCQkgICAgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKK3sKKwlzdHJ1Y3QgdmhjaV9oY2QJKmR1bTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJaW50CQlyaHBvcnQ7CisKKwl1MzIgcHJldl9wb3J0X3N0YXR1c1tWSENJX05QT1JUU107CisKKwlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKgorCSAqIE5PVEU6CisJICogd0luZGV4IHNob3dzIHRoZSBwb3J0IG51bWJlciBhbmQgYmVnaW5zIGZyb20gMS4KKwkgKi8KKwlkYmdfdmhjaV9yaCgidHlwZVJlcSAleCB3VmFsdWUgJXggd0luZGV4ICV4XG4iLCB0eXBlUmVxLCB3VmFsdWUsCisJCQkJCQkJCXdJbmRleCk7CisJaWYgKHdJbmRleCA+IFZIQ0lfTlBPUlRTKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHBvcnQgbnVtYmVyICVkXG4iLCBfX2Z1bmNfXywgd0luZGV4KTsKKwlyaHBvcnQgPSAoKF9fdTgpKHdJbmRleCAmIDB4MDBmZikpIC0gMTsKKworCWR1bSA9IGhjZF90b192aGNpKGhjZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwkvKiBzdG9yZSBvbGQgc3RhdHVzIGFuZCBjb21wYXJlIG5vdyBhbmQgb2xkIGxhdGVyICovCisJaWYgKGRiZ19mbGFnX3ZoY2lfcmgpIHsKKwkJaW50IGkgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgVkhDSV9OUE9SVFM7IGkrKykKKwkJCXByZXZfcG9ydF9zdGF0dXNbaV0gPSBkdW0tPnBvcnRfc3RhdHVzW2ldOworCX0KKworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCQlkYmdfdmhjaV9yaCgiIENsZWFySHViRmVhdHVyZVxuIik7CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgVVNCX1BPUlRfU1RBVF9TVVNQRU5EKSB7CisJCQkJLyogMjBtc2VjIHNpZ25hbGluZyAqLworCQkJCWR1bS0+cmVzdW1pbmcgPSAxOworCQkJCWR1bS0+cmVfdGltZW91dCA9CisJCQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlkYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6IFVTQl9QT1JUX0ZFQVRfUE9XRVJcbiIpOworCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdID0gMDsKKwkJCS8qIGR1bS0+YWRkcmVzcyA9IDA7ICovCisJCQkvKiBkdW0tPmhkZXYgPSAwOyAqLworCQkJZHVtLT5yZXN1bWluZyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ6CisJCQlkYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6ICIKKwkJCQkJIlVTQl9QT1JUX0ZFQVRfQ19SRVNFVFxuIik7CisJCQlzd2l0Y2ggKGR1bS0+dmRldltyaHBvcnRdLnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOworCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQlkZWZhdWx0OgorCQkJZGJnX3ZoY2lfcmgoIiBDbGVhclBvcnRGZWF0dXJlOiBkZWZhdWx0ICV4XG4iLCB3VmFsdWUpOworCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICY9IH4oMSA8PCB3VmFsdWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJZGJnX3ZoY2lfcmgoIiBHZXRIdWJEZXNjcmlwdG9yXG4iKTsKKwkJaHViX2Rlc2NyaXB0b3IoKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJTdGF0dXM6CisJCWRiZ192aGNpX3JoKCIgR2V0SHViU3RhdHVzXG4iKTsKKwkJKihfX2xlMzIgKikgYnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigwKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlkYmdfdmhjaV9yaCgiIEdldFBvcnRTdGF0dXMgcG9ydCAleFxuIiwgd0luZGV4KTsKKwkJaWYgKHdJbmRleCA+IFZIQ0lfTlBPUlRTIHx8IHdJbmRleCA8IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcG9ydCBudW1iZXIgJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHdJbmRleCk7CisJCQlyZXR2YWwgPSAtRVBJUEU7CisJCX0KKworCQkvKiB3ZSBkbyBubyBjYXJlIG9mIHJlc3VtZS4gKi8KKworCQkvKiB3aG9ldmVyIHJlc2V0cyBvciByZXN1bWVzIG11c3QgR2V0UG9ydFN0YXR1cyB0bworCQkgKiBjb21wbGV0ZSBpdCEhCisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQlpZiAoZHVtLT5yZXN1bWluZyAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCB5ZXRcbiIsIF9fZnVuY19fKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KKwkJCQkJfigxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJCQlkdW0tPnJlc3VtaW5nID0gMDsKKwkJCWR1bS0+cmVfdGltZW91dCA9IDA7CisJCQkvKiBpZiAoZHVtLT5kcml2ZXIgJiYgZHVtLT5kcml2ZXItPnJlc3VtZSkgeworCQkJICoJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQkJICoJZHVtLT5kcml2ZXItPnJlc3VtZSAoJmR1bS0+Z2FkZ2V0KTsKKwkJCSAqCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisJCQkgKiB9ICovCisJCX0KKworCQlpZiAoKGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSAhPQorCQkJCTAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBkdW0tPnJlX3RpbWVvdXQpKSB7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KKwkJCQkJCX4oMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUKTsKKwkJCWR1bS0+cmVfdGltZW91dCA9IDA7CisKKwkJCWlmIChkdW0tPnZkZXZbcmhwb3J0XS51ZC5zdGF0dXMgPT0KKwkJCQkJCQlWREVWX1NUX05PVEFTU0lHTkVEKSB7CisJCQkJZGJnX3ZoY2lfcmgoIiBlbmFibGUgcmhwb3J0ICVkIChzdGF0dXMgJXUpXG4iLAorCQkJCQkJcmhwb3J0LAorCQkJCQkJZHVtLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzKTsKKwkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJCQlVU0JfUE9SVF9TVEFUX0VOQUJMRTsKKwkJCX0KKyNpZiAwCisJCQlpZiAoZHVtLT5kcml2ZXIpIHsKKworCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJCVVTQl9QT1JUX1NUQVRfRU5BQkxFOworCQkJCS8qIGdpdmUgaXQgdGhlIGJlc3Qgc3BlZWQgd2UgYWdyZWUgb24gKi8KKwkJCQlkdW0tPmdhZGdldC5zcGVlZCA9IGR1bS0+ZHJpdmVyLT5zcGVlZDsKKwkJCQlkdW0tPmdhZGdldC5lcDAtPm1heHBhY2tldCA9IDY0OworCQkJCXN3aXRjaCAoZHVtLT5nYWRnZXQuc3BlZWQpIHsKKwkJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOworCQkJCQlicmVhazsKKwkJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gODsKKwkJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCVVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlkdW0tPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisjZW5kaWYKKworCQl9CisJCSgodTE2ICopIGJ1ZilbMF0gPSBjcHVfdG9fbGUxNihkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0pOworCQkoKHUxNiAqKSBidWYpWzFdID0KKwkJCQljcHVfdG9fbGUxNihkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gPj4gMTYpOworCisJCWRiZ192aGNpX3JoKCIgR2V0UG9ydFN0YXR1cyBieWUgJXggJXhcbiIsICgodTE2ICopYnVmKVswXSwKKwkJCQkJCQkoKHUxNiAqKWJ1ZilbMV0pOworCQlicmVhazsKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCWRiZ192aGNpX3JoKCIgU2V0SHViRmVhdHVyZVxuIik7CisJCXJldHZhbCA9IC1FUElQRTsKKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlkYmdfdmhjaV9yaCgiIFNldFBvcnRGZWF0dXJlOiAiCisJCQkJCSJVU0JfUE9SVF9GRUFUX1NVU1BFTkRcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IHlldFxuIiwgX19mdW5jX18pOworI2lmIDAKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCWlmIChkdW0tPmRyaXZlci0+c3VzcGVuZCkgeworCQkJCXNwaW5fdW5sb2NrKCZkdW0tPmxvY2spOworCQkJCWR1bS0+ZHJpdmVyLT5zdXNwZW5kKCZkdW0tPmdhZGdldCk7CisJCQkJc3Bpbl9sb2NrKCZkdW0tPmxvY2spOworCQkJfQorI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJZGJnX3ZoY2lfcmgoIiBTZXRQb3J0RmVhdHVyZTogVVNCX1BPUlRfRkVBVF9SRVNFVFxuIik7CisJCQkvKiBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgZGlzY29ubmVjdCBmaXJzdCAqLworCQkJaWYgKGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSB7CisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICY9CisJCQkJCQl+KFVTQl9QT1JUX1NUQVRfRU5BQkxFIHwKKwkJCQkJCSAgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQgfAorCQkJCQkJICBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQpOworI2lmIDAKKwkJCQlpZiAoZHVtLT5kcml2ZXIpIHsKKwkJCQkJZGV2X2RiZyhoYXJkd2FyZSwgImRpc2Nvbm5lY3RcbiIpOworCQkJCQlzdG9wX2FjdGl2aXR5KGR1bSwgZHVtLT5kcml2ZXIpOworCQkJCX0KKyNlbmRpZgorCisJCQkJLyogRklYTUUgdGVzdCB0aGF0IGNvZGUgcGF0aCEgKi8KKwkJCX0KKwkJCS8qIDUwbXNlYyByZXNldCBzaWduYWxpbmcgKi8KKwkJCWR1bS0+cmVfdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKTsKKworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJZGVmYXVsdDoKKwkJCWRiZ192aGNpX3JoKCIgU2V0UG9ydEZlYXR1cmU6IGRlZmF1bHQgJWRcbiIsIHdWYWx1ZSk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0gKDEgPDwgd1ZhbHVlKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRlZmF1bHQ6IG5vIHN1Y2ggcmVxdWVzdFxuIiwgX19mdW5jX18pOworCQkvKiBkZXZfZGJnIChoYXJkd2FyZSwKKwkJICoJCSJodWIgY29udHJvbCByZXElMDR4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJICoJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoKTsgKi8KKworCQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisKKwlpZiAoZGJnX2ZsYWdfdmhjaV9yaCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAicG9ydCAlZFxuIiwgcmhwb3J0KTsKKwkJZHVtcF9wb3J0X3N0YXR1cyhwcmV2X3BvcnRfc3RhdHVzW3JocG9ydF0pOworCQlkdW1wX3BvcnRfc3RhdHVzKGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSk7CisJfQorCWRiZ192aGNpX3JoKCIgYnllXG4iKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdmhjaV9kZXZpY2UgKmdldF92ZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCBpOworCisJaWYgKCF1ZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBWSENJX05QT1JUUzsgaSsrKQorCQlpZiAodGhlX2NvbnRyb2xsZXItPnZkZXZbaV0udWRldiA9PSB1ZGV2KQorCQkJcmV0dXJuIHBvcnRfdG9fdmRldihpKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB2aGNpX3R4X3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gZ2V0X3ZkZXYodXJiLT5kZXYpOworCXN0cnVjdCB2aGNpX3ByaXYgKnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJaWYgKCF2ZGV2KSB7CisJCWVycigiY291bGQgbm90IGdldCB2aXJ0dWFsIGRldmljZSIpOworCQkvKiBCVUcoKTsgKi8KKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWcpOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aGNpX3ByaXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIm1hbGxvYyB2aGNpX3ByaXZcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWcpOworCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybjsKKwl9CisKKwlwcml2LT5zZXFudW0gPSBhdG9taWNfaW5jX3JldHVybigmdGhlX2NvbnRyb2xsZXItPnNlcW51bSk7CisJaWYgKHByaXYtPnNlcW51bSA9PSAweGZmZmYpCisJCXVpbmZvKCJzZXFudW0gbWF4XG4iKTsKKworCXByaXYtPnZkZXYgPSB2ZGV2OworCXByaXYtPnVyYiA9IHVyYjsKKworCXVyYi0+aGNwcml2ID0gKHZvaWQgKikgcHJpdjsKKworCisJbGlzdF9hZGRfdGFpbCgmcHJpdi0+bGlzdCwgJnZkZXYtPnByaXZfdHgpOworCisJd2FrZV91cCgmdmRldi0+d2FpdHFfdHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZyk7Cit9CisKK3N0YXRpYyBpbnQgdmhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkgICAgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmdfdmhjaV9oYygiZW50ZXIsIHVzYl9oY2QgJXAgdXJiICVwIG1lbV9mbGFncyAlZFxuIiwKKwkJICAgIGhjZCwgdXJiLCBtZW1fZmxhZ3MpOworCisJLyogcGF0Y2ggdG8gdXNiX3NnX2luaXQoKSBpcyBpbiAyLjUuNjAgKi8KKwlCVUdfT04oIXVyYi0+dHJhbnNmZXJfYnVmZmVyICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKworCS8qIGNoZWNrIEhDIGlzIGFjdGl2ZSBvciBub3QgKi8KKwlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJZGV2X2VycihkZXYsICJIQyBpcyBub3QgcnVubmluZ1xuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJZGV2X2VycihkZXYsICJVUkIgYWxyZWFkeSB1bmxpbmtlZCEsIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gdXJiLT5zdGF0dXM7CisJfQorCisJcmV0ID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7CisJaWYgKHJldCkKKwkJZ290byBub19uZWVkX3VubGluazsKKworCS8qCisJICogVGhlIGVudW1lbGF0aW9uIHByb2Nlc3MgaXMgYXMgZm9sbG93czsKKwkgKgorCSAqICAxLiBHZXRfRGVzY3JpcHRvciByZXF1ZXN0IHRvIERldkFkZHJzKDApIEVuZFBvaW50KDApCisJICogICAgIHRvIGdldCBtYXggcGFja2V0IGxlbmd0aCBvZiBkZWZhdWx0IHBpcGUKKwkgKgorCSAqICAyLiBTZXRfQWRkcmVzcyByZXF1ZXN0IHRvIERldkFkZHIoMCkgRW5kUG9pbnQoMCkKKwkgKgorCSAqLworCisJaWYgKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSkgPT0gMCkgeworCQlfX3U4IHR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybHJlcSA9CisJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9CisJCQkJcG9ydF90b192ZGV2KHRoZV9jb250cm9sbGVyLT5wZW5kaW5nX3BvcnQpOworCisJCWlmICh0eXBlICE9IFBJUEVfQ09OVFJPTCB8fCAhY3RybHJlcSkgeworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlcXVlc3QgdG8gZGV2bnVtIDBcbiIpOworCQkJcmV0ID0gRUlOVkFMOworCQkJZ290byBub19uZWVkX3htaXQ7CisJCX0KKworCQlzd2l0Y2ggKGN0cmxyZXEtPmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJCS8qIHNldF9hZGRyZXNzIG1heSBjb21lIHdoZW4gYSBkZXZpY2UgaXMgcmVzZXQgKi8KKwkJCWRldl9pbmZvKGRldiwgIlNldEFkZHJlc3MgUmVxdWVzdCAoJWQpIHRvIHBvcnQgJWRcbiIsCisJCQkJIGN0cmxyZXEtPndWYWx1ZSwgdmRldi0+cmhwb3J0KTsKKworCQkJdmRldi0+dWRldiA9IHVyYi0+ZGV2OworCisJCQlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCQkJdmRldi0+dWQuc3RhdHVzID0gVkRFVl9TVF9VU0VEOworCQkJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCisJCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQkJLyogVGhpcyByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuICovCisJCQkJLyogSWYgbm90IC1FSU5QUk9HUkVTUywgcG9zc2libHkgdW5saW5rZWQuICovCisJCQkJdXJiLT5zdGF0dXMgPSAwOworCQkJfQorCisJCQlnb3RvIG5vX25lZWRfeG1pdDsKKworCQljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCQlpZiAoY3RybHJlcS0+d1ZhbHVlID09IChVU0JfRFRfREVWSUNFIDw8IDgpKQorCQkJCWRiZ192aGNpX2hjKCJOb3QgeWV0PzogIgorCQkJCQkJIkdldF9EZXNjcmlwdG9yIHRvIGRldmljZSAwICIKKwkJCQkJCSIoZ2V0IG1heCBwaXBlIHNpemUpXG4iKTsKKworCQkJLyogRklYTUU6IHJlZmVyZW5jZSBjb3VudD8gKHVzYl9nZXRfZGV2KCkpICovCisJCQl2ZGV2LT51ZGV2ID0gdXJiLT5kZXY7CisJCQlnb3RvIG91dDsKKworCQlkZWZhdWx0OgorCQkJLyogTk9UIFJFQUNIRUQgKi8KKwkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCByZXF1ZXN0IHRvIGRldm51bSAwIGJSZXF1ZXN0ICV1LCAiCisJCQkJIndWYWx1ZSAldVxuIiwgY3RybHJlcS0+YlJlcXVlc3QsCisJCQkJY3RybHJlcS0+d1ZhbHVlKTsKKwkJCXJldCA9ICAtRUlOVkFMOworCQkJZ290byBub19uZWVkX3htaXQ7CisJCX0KKworCX0KKworb3V0OgorCXZoY2lfdHhfdXJiKHVyYik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK25vX25lZWRfeG1pdDoKKwl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7Citub19uZWVkX3VubGluazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsIHVyYi0+c3RhdHVzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdmhjaV9yeCBnaXZlcyBiYWNrIHRoZSB1cmIgYWZ0ZXIgcmVjZWl2aW5nIHRoZSByZXBseSBvZiB0aGUgdXJiLiAgSWYgYW4KKyAqIHVubGluayBwZHUgaXMgc2VudCBvciBub3QsIHZoY2lfcnggcmVjZWl2ZXMgYSBub3JtYWwgcmV0dXJuIHBkdSBhbmQgZ2l2ZXMKKyAqIGJhY2sgaXRzIHVyYi4gRm9yIHRoZSBkcml2ZXIgdW5saW5raW5nIHRoZSB1cmIsIHRoZSBjb250ZW50IG9mIHRoZSB1cmIgaXMKKyAqIG5vdCBpbXBvcnRhbnQsIGJ1dCB0aGUgY2FsbGluZyB0byBpdHMgY29tcGxldGlvbiBoYW5kbGVyIGlzIGltcG9ydGFudDsgdGhlCisgKiBjb21wbGV0aW9uIG9mIHVubGlua2luZyBpcyBub3RpZmllZCBieSB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorICoKKyAqCisgKiBDTElFTlQgU0lERQorICoKKyAqIC0gV2hlbiB2aGNpX2hjZCByZWNlaXZlcyBSRVRfU1VCTUlULAorICoKKyAqCS0gY2FzZSAxYSkuIHRoZSB1cmIgb2YgdGhlIHBkdSBpcyBub3QgdW5saW5raW5nLgorICoJCS0gbm9ybWFsIGNhc2UKKyAqCQk9PiBqdXN0IGdpdmUgYmFjayB0aGUgdXJiCisgKgorICoJLSBjYXNlIDFiKS4gdGhlIHVyYiBvZiB0aGUgcGR1IGlzIHVubGlua2luZy4KKyAqCQktIHVzYmlwLmtvIHdpbGwgcmV0dXJuIGEgcmVwbHkgb2YgdGhlIHVubGlua2luZyByZXF1ZXN0LgorICoJCT0+IGdpdmUgYmFjayB0aGUgdXJiIG5vdyBhbmQgZ28gdG8gY2FzZSAyYikuCisgKgorICogLSBXaGVuIHZoY2lfaGNkIHJlY2VpdmVzIFJFVF9VTkxJTkssCisgKgorICoJLSBjYXNlIDJhKS4gYSBzdWJtaXQgcmVxdWVzdCBpcyBzdGlsbCBwZW5kaW5nIGluIHZoY2lfaGNkLgorICoJCS0gdXJiIHdhcyByZWFsbHkgcGVuZGluZyBpbiB1c2JpcC5rbyBhbmQgdXJiX3VubGlua191cmIoKSB3YXMKKyAqCQkgIGNvbXBsZXRlZCB0aGVyZS4KKyAqCQk9PiBmcmVlIGEgcGVuZGluZyBzdWJtaXQgcmVxdWVzdAorICoJCT0+IG5vdGlmeSB1bmxpbmsgY29tcGxldGVuZXNzIGJ5IGdpdmluZyBiYWNrIHRoZSB1cmIKKyAqCisgKgktIGNhc2UgMmIpLiBhIHN1Ym1pdCByZXF1ZXN0IGlzICpub3QqIHBlbmRpbmcgaW4gdmhjaV9oY2QuCisgKgkJLSB1cmIgd2FzIGFscmVhZHkgZ2l2ZW4gYmFjayB0byB0aGUgY29yZSBkcml2ZXIuCisgKgkJPT4gZG8gbm90IGdpdmUgYmFjayB0aGUgdXJiCisgKgorICoKKyAqIFNFUlZFUiBTSURFCisgKgorICogLSBXaGVuIHVzYmlwIHJlY2VpdmVzIENNRF9VTkxJTkssCisgKgorICoJLSBjYXNlIDNhKS4gdGhlIHVyYiBvZiB0aGUgdW5saW5rIHJlcXVlc3QgaXMgbm93IGluIHN1Ym1pc3Npb24uCisgKgkJPT4gZG8gdXNiX3VubGlua191cmIoKS4KKyAqCQk9PiBhZnRlciB0aGUgdW5saW5rIGlzIGNvbXBsZXRlZCwgc2VuZCBSRVRfVU5MSU5LLgorICoKKyAqCS0gY2FzZSAzYikuIHRoZSB1cmIgb2YgdGhlIHVubGluayByZXF1ZXN0IGlzIG5vdCBpbiBzdWJtaXNzaW9uLgorICoJCS0gbWF5IGJlIGFscmVhZHkgY29tcGxldGVkIG9yIG5ldmVyIGJlIHJlY2VpdmVkCisgKgkJPT4gc2VuZCBSRVRfVU5MSU5LCisgKgorICovCitzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisKKwl1aW5mbygidmhjaV9oY2Q6IGRlcXVldWUgYSB1cmIgJXBcbiIsIHVyYik7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJcHJpdiA9IHVyYi0+aGNwcml2OworCWlmICghcHJpdikgeworCQkvKiBVUkIgd2FzIG5ldmVyIGxpbmtlZCEgb3Igd2lsbCBiZSBzb29uIGdpdmVuIGJhY2sgYnkKKwkJICogdmhjaV9yeC4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJeworCQlpbnQgcmV0ID0gMDsKKwkJcmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOworCQlpZiAocmV0KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkgLyogc2VuZCB1bmxpbmsgcmVxdWVzdCBoZXJlPyAqLworCXZkZXYgPSBwcml2LT52ZGV2OworCisJaWYgKCF2ZGV2LT51ZC50Y3Bfc29ja2V0KSB7CisJCS8qIHRjcCBjb25uZWN0aW9uIGlzIGNsb3NlZCAqLworCQl1bnNpZ25lZCBsb25nIGZsYWdzMjsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOworCisJCXVpbmZvKCJ2aGNpX2hjZDogZGV2aWNlICVwIHNlZW1zIHRvIGJlIGRpc2Nvbm5lY3RlZFxuIiwgdmRldik7CisJCWxpc3RfZGVsKCZwcml2LT5saXN0KTsKKwkJa2ZyZWUocHJpdik7CisJCXVyYi0+aGNwcml2ID0gTlVMTDsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisKKwl9IGVsc2UgeworCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqLworCQl1bnNpZ25lZCBsb25nIGZsYWdzMjsKKwkJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbms7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MyKTsKKworCQkvKiBzZXR1cCBDTURfVU5MSU5LIHBkdSAqLworCQl1bmxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmhjaV91bmxpbmspLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCF1bmxpbmspIHsKKwkJCXVlcnIoIm1hbGxvYyB2aGNpX3VubGlua1xuIik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl1bmxpbmstPnNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKTsKKwkJaWYgKHVubGluay0+c2VxbnVtID09IDB4ZmZmZikKKwkJCXVpbmZvKCJzZXFudW0gbWF4XG4iKTsKKworCQl1bmxpbmstPnVubGlua19zZXFudW0gPSBwcml2LT5zZXFudW07CisKKwkJdWluZm8oInZoY2lfaGNkOiBkZXZpY2UgJXAgc2VlbXMgdG8gYmUgc3RpbGwgY29ubmVjdGVkXG4iLAorCQkJCQkJCQkJdmRldik7CisKKwkJLyogc2VuZCBjbWRfdW5saW5rIGFuZCB0cnkgdG8gY2FuY2VsIHRoZSBwZW5kaW5nIFVSQiBpbiB0aGUKKwkJICogcGVlciAqLworCQlsaXN0X2FkZF90YWlsKCZ1bmxpbmstPmxpc3QsICZ2ZGV2LT51bmxpbmtfdHgpOworCQl3YWtlX3VwKCZ2ZGV2LT53YWl0cV90eCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOworCX0KKworCisJLyoKKwkgKiBJZiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSwgd2UgaGF2ZSBzZW50IENNRF9VTkxJTksuCisJICogdmhjaV9yeCB3aWxsIHJlY2VpdmUgUkVUX1VOTElOSyBhbmQgZ2l2ZSBiYWNrIHRoZSBVUkIuCisJICogT3RoZXJ3aXNlLCB3ZSBnaXZlIGJhY2sgaXQgaGVyZS4KKwkgKi8KKwlpZiAoIXZkZXYtPnVkLnRjcF9zb2NrZXQpIHsKKwkJLyogdGNwIGNvbm5lY3Rpb24gaXMgY2xvc2VkICovCisJCXVpbmZvKCJ2aGNpX2hjZDogdmhjaV91cmJfZGVxdWV1ZSgpIGdpdmVzIGJhY2sgdXJiICVwXG4iLCB1cmIpOworCisJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJZGJnX3ZoY2lfaGMoImxlYXZlXG4iKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCWtmcmVlKHVubGluayk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3J4LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQlrZnJlZSh1bmxpbmspOworCX0KKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworfQorCisvKgorICogVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IG9ubHkgb25lIGNvbnRleHQgYmVnaW5zIGNsZWFudXAuCisgKiBUaGlzIGlzIHdoeSBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBiZWNvbWUgc2ltcGxlLgorICogV2UgZG8gbm90IHdhbnQgdG8gY29uc2lkZXIgcmFjZSBjb25kaXRpb24gYXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyB2b2lkIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCB2aGNpX2RldmljZSwgdWQpOworCisJLyogbmVlZCB0aGlzPyBzZWUgc3R1Yl9kZXYuYyAqLworCWlmICh1ZC0+dGNwX3NvY2tldCkgeworCQl1ZGJnKCJzaHV0ZG93biB0Y3Bfc29ja2V0ICVwXG4iLCB1ZC0+dGNwX3NvY2tldCk7CisJCWtlcm5lbF9zb2NrX3NodXRkb3duKHVkLT50Y3Bfc29ja2V0LCBTSFVUX1JEV1IpOworCX0KKworCXVzYmlwX3N0b3BfdGhyZWFkcygmdmRldi0+dWQpOworCXVpbmZvKCJzdG9wIHRocmVhZHNcbiIpOworCisJLyogYWN0aXZlIGNvbm5lY3Rpb24gaXMgY2xvc2VkICovCisJaWYgKHZkZXYtPnVkLnRjcF9zb2NrZXQgIT0gTlVMTCkgeworCQlzb2NrX3JlbGVhc2UodmRldi0+dWQudGNwX3NvY2tldCk7CisJCXZkZXYtPnVkLnRjcF9zb2NrZXQgPSBOVUxMOworCX0KKwl1aW5mbygicmVsZWFzZSBzb2NrZXRcbiIpOworCisJdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAodmRldik7CisKKwkvKgorCSAqIHJoX3BvcnRfZGlzY29ubmVjdCgpIGlzIGEgdHJpZ2dlciBvZiAuLi4KKwkgKiAgIHVzYl9kaXNhYmxlX2RldmljZSgpOgorCSAqCWRpc2FibGUgYWxsIHRoZSBlbmRwb2ludHMgZm9yIGEgVVNCIGRldmljZS4KKwkgKiAgIHVzYl9kaXNhYmxlX2VuZHBvaW50KCk6CisJICoJZGlzYWJsZSBlbmRwb2ludHMuIHBlbmRpbmcgdXJicyBhcmUgdW5saW5rZWQoZGVxdWV1ZWQpLgorCSAqCisJICogTk9URTogQWZ0ZXIgY2FsbGluZyByaF9wb3J0X2Rpc2Nvbm5lY3QoKSwgdGhlIFVTQiBkZXZpY2UgZHJpdmVycyBvZiBhCisJICogZGV0ZWNoZWQgZGV2aWNlIHNob3VsZCByZWxlYXNlIHVzZWQgdXJicyBpbiBhIGNsZWFudXAgZnVuY3Rpb24oaS5lLgorCSAqIHh4eF9kaXNjb25uZWN0KCkpLiBUaGVyZWZvcmUsIHZoY2lfaGNkIGRvZXMgbm90IG5lZWQgdG8gcmVsZWFzZQorCSAqIHB1c2hlZCB1cmJzIGFuZCB0aGVpciBwcml2YXRlIGRhdGEgaW4gdGhpcyBmdW5jdGlvbi4KKwkgKgorCSAqIE5PVEU6IHZoY2lfZGVxdWV1ZSgpIG11c3QgYmUgY29uc2lkZXJlZCBjYXJlZnVsbHkuIFdoZW4gc2h1dGRvd25pbmcKKwkgKiBhIGNvbm5lY3Rpb24sIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbigpIGV4cGVjdHMgdmhjaV9kZXF1ZXVlKCkKKwkgKiBnaXZlcyBiYWNrIHB1c2hlZCB1cmJzIGFuZCBmcmVlcyB0aGVpciBwcml2YXRlIGRhdGEgYnkgcmVxdWVzdCBvZgorCSAqIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIG9mIGEgVVNCIGRyaXZlci4gV2hlbiB1bmxpbmtpbmcgYSB1cmIgd2l0aCBhbgorCSAqIGFjdGl2ZSBjb25uZWN0aW9uLCB2aGNpX2RlcXVldWUoKSBkb2VzIG5vdCBnaXZlIGJhY2sgdGhlIHVyYiB3aGljaAorCSAqIGlzIGFjdHVhbGx5IGdpdmVuIGJhY2sgYnkgdmhjaV9yeCBhZnRlciByZWNlaXZpbmcgaXRzIHJldHVybiBwZHUuCisJICoKKwkgKi8KKwlyaF9wb3J0X2Rpc2Nvbm5lY3QodmRldi0+cmhwb3J0KTsKKworCXVpbmZvKCJkaXNjb25uZWN0IGRldmljZVxuIik7Cit9CisKKworc3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3QgdmhjaV9kZXZpY2UsIHVkKTsKKworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCisJdmRldi0+c3BlZWQgID0gMDsKKwl2ZGV2LT5kZXZpZCAgPSAwOworCisJdWQtPnRjcF9zb2NrZXQgPSBOVUxMOworCisJdWQtPnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKKworCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX3VudXNhYmxlKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCisJdWQtPnN0YXR1cyA9IFZERVZfU1RfRVJST1I7CisKKwlzcGluX3VubG9jaygmdWQtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCB2aGNpX2RldmljZV9pbml0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwltZW1zZXQodmRldiwgMCwgc2l6ZW9mKCp2ZGV2KSk7CisKKwl1c2JpcF90YXNrX2luaXQoJnZkZXYtPnVkLnRjcF9yeCwgInZoY2lfcngiLCB2aGNpX3J4X2xvb3ApOworCXVzYmlwX3Rhc2tfaW5pdCgmdmRldi0+dWQudGNwX3R4LCAidmhjaV90eCIsIHZoY2lfdHhfbG9vcCk7CisKKwl2ZGV2LT51ZC5zaWRlICAgPSBVU0JJUF9WSENJOworCXZkZXYtPnVkLnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKKwkvKiB2ZGV2LT51ZC5sb2NrICAgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCisJc3Bpbl9sb2NrX2luaXQoJnZkZXYtPnVkLmxvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnZkZXYtPnByaXZfcngpOworCUlOSVRfTElTVF9IRUFEKCZ2ZGV2LT5wcml2X3R4KTsKKwlJTklUX0xJU1RfSEVBRCgmdmRldi0+dW5saW5rX3R4KTsKKwlJTklUX0xJU1RfSEVBRCgmdmRldi0+dW5saW5rX3J4KTsKKwkvKiB2ZGV2LT5wcml2X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCisJc3Bpbl9sb2NrX2luaXQoJnZkZXYtPnByaXZfbG9jayk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2ZGV2LT53YWl0cV90eCk7CisKKwl2ZGV2LT51ZC5laF9vcHMuc2h1dGRvd24gPSB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb247CisJdmRldi0+dWQuZWhfb3BzLnJlc2V0ID0gdmhjaV9kZXZpY2VfcmVzZXQ7CisJdmRldi0+dWQuZWhfb3BzLnVudXNhYmxlID0gdmhjaV9kZXZpY2VfdW51c2FibGU7CisKKwl1c2JpcF9zdGFydF9laCgmdmRldi0+dWQpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisJaW50IHJocG9ydDsKKwlpbnQgZXJyID0gMDsKKworCWRiZ192aGNpX2hjKCJlbnRlciB2aGNpX3N0YXJ0XG4iKTsKKworCisJLyogaW5pdGlhbGl6ZSBwcml2YXRlIGRhdGEgb2YgdXNiX2hjZCAqLworCisJZm9yIChyaHBvcnQgPSAwOyByaHBvcnQgPCBWSENJX05QT1JUUzsgcmhwb3J0KyspIHsKKwkJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gJnZoY2ktPnZkZXZbcmhwb3J0XTsKKwkJdmhjaV9kZXZpY2VfaW5pdCh2ZGV2KTsKKwkJdmRldi0+cmhwb3J0ID0gcmhwb3J0OworCX0KKworCWF0b21pY19zZXQoJnZoY2ktPnNlcW51bSwgMCk7CisJc3Bpbl9sb2NrX2luaXQoJnZoY2ktPmxvY2spOworCisKKworCWhjZC0+cG93ZXJfYnVkZ2V0ID0gMDsgLyogbm8gbGltaXQgKi8KKwloY2QtPnN0YXRlICA9IEhDX1NUQVRFX1JVTk5JTkc7CisJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKKworCisJLyogdmhjaV9oY2QgaXMgbm93IHJlYWR5IHRvIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBzeXNmcyAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmdmhjaV9kZXYodmhjaSktPmtvYmosICZkZXZfYXR0cl9ncm91cCk7CisJaWYgKGVycikgeworCQl1ZXJyKCJjcmVhdGUgc3lzZnMgZmlsZXNcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2aGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdmhjaV9oY2QgKnZoY2kgPSBoY2RfdG9fdmhjaShoY2QpOworCWludCByaHBvcnQgPSAwOworCisJZGJnX3ZoY2lfaGMoInN0b3AgVkhDSSBjb250cm9sbGVyXG4iKTsKKworCisJLyogMS4gcmVtb3ZlIHRoZSB1c2VybGFuZCBpbnRlcmZhY2Ugb2YgdmhjaV9oY2QgKi8KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnZoY2lfZGV2KHZoY2kpLT5rb2JqLCAmZGV2X2F0dHJfZ3JvdXApOworCisJLyogMi4gc2h1dGRvd24gYWxsIHRoZSBwb3J0cyBvZiB2aGNpX2hjZCAqLworCWZvciAocmhwb3J0ID0gMCA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgeworCQlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSAmdmhjaS0+dmRldltyaHBvcnRdOworCisJCXVzYmlwX2V2ZW50X2FkZCgmdmRldi0+dWQsIFZERVZfRVZFTlRfUkVNT1ZFRCk7CisJCXVzYmlwX3N0b3BfZWgoJnZkZXYtPnVkKTsKKwl9CisKKworCXVpbmZvKCJ2aGNpX3N0b3AgZG9uZVxuIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdmhjaV9nZXRfZnJhbWVfbnVtYmVyKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJdWVycigiTm90IHlldCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorCisvKiBGSVhNRTogc3VzcGVuZC9yZXN1bWUgKi8KK3N0YXRpYyBpbnQgdmhjaV9idXNfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisKKwlkZXZfZGJnKCZoY2QtPnNlbGYucm9vdF9odWItPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX2xvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKwkvKiB2aGNpLT5yaF9zdGF0ZSA9IERVTU1ZX1JIX1NVU1BFTkRFRDsKKwkgKiBzZXRfbGlua19zdGF0ZSh2aGNpKTsgKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCXNwaW5fdW5sb2NrX2lycSgmdmhjaS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aGNpX2J1c19yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdmhjaV9oY2QgKnZoY2kgPSBoY2RfdG9fdmhjaShoY2QpOworCWludCByYyA9IDA7CisKKwlkZXZfZGJnKCZoY2QtPnNlbGYucm9vdF9odWItPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX2xvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKwlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkgeworCQlyYyA9IC1FU0hVVERPV047CisJfSBlbHNlIHsKKwkJLyogdmhjaS0+cmhfc3RhdGUgPSBEVU1NWV9SSF9SVU5OSU5HOworCQkgKiBzZXRfbGlua19zdGF0ZSh2aGNpKTsKKwkJICogaWYgKCFsaXN0X2VtcHR5KCZ2aGNpLT51cmJwX2xpc3QpKQorCQkgKgltb2RfdGltZXIoJnZoY2ktPnRpbWVyLCBqaWZmaWVzKTsgKi8KKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmdmhjaS0+bG9jayk7CisJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgdmhjaV9idXNfc3VzcGVuZCAgICAgIE5VTEwKKyNkZWZpbmUgdmhjaV9idXNfcmVzdW1lICAgICAgIE5VTEwKKyNlbmRpZgorCisKKworc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCT0gZHJpdmVyX25hbWUsCisJLnByb2R1Y3RfZGVzYwk9IGRyaXZlcl9kZXNjLAorCS5oY2RfcHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCB2aGNpX2hjZCksCisKKwkuZmxhZ3MJCT0gSENEX1VTQjIsCisKKwkuc3RhcnQJCT0gdmhjaV9zdGFydCwKKwkuc3RvcCAJCT0gdmhjaV9zdG9wLAorCisJLnVyYl9lbnF1ZXVlCT0gdmhjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUJPSB2aGNpX3VyYl9kZXF1ZXVlLAorCisJLmdldF9mcmFtZV9udW1iZXIgPSB2aGNpX2dldF9mcmFtZV9udW1iZXIsCisKKwkuaHViX3N0YXR1c19kYXRhID0gdmhjaV9odWJfc3RhdHVzLAorCS5odWJfY29udHJvbCAgICA9IHZoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kCT0gdmhjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZQk9IHZoY2lfYnVzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgdmhjaV9oY2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXQ7CisKKwl1aW5mbygicHJvdmluZy4uLlxuIik7CisKKwlkYmdfdmhjaV9oYygibmFtZSAlcyBpZCAlZFxuIiwgcGRldi0+bmFtZSwgcGRldi0+aWQpOworCisJLyogd2lsbCBiZSByZW1vdmVkICovCisJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmhjaV9oY2QgRE1BIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGhjZC4KKwkgKiBPdXIgcHJpdmF0ZSBkYXRhIGlzIGFsc28gYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkuCisJICovCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnZoY2lfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoIWhjZCkgeworCQl1ZXJyKCJjcmVhdGUgaGNkIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCisJLyogdGhpcyBpcyBwcml2YXRlIGRhdGEgZm9yIHZoY2lfaGNkICovCisJdGhlX2NvbnRyb2xsZXIgPSBoY2RfdG9fdmhjaShoY2QpOworCisJLyoKKwkgKiBGaW5pc2ggZ2VuZXJpYyBIQ0Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3Rlci4KKwkgKiBDYWxsIHRoZSBkcml2ZXIncyByZXNldCgpIGFuZCBzdGFydCgpIHJvdXRpbmVzLgorCSAqLworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCXVlcnIoInVzYl9hZGRfaGNkIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJdXNiX3B1dF9oY2QoaGNkKTsKKwkJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2aGNpX2hjZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkOworCisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFoY2QpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBEaXNjb25uZWN0cyB0aGUgcm9vdCBodWIsCisJICogdGhlbiByZXZlcnNlcyB0aGUgZWZmZWN0cyBvZiB1c2JfYWRkX2hjZCgpLAorCSAqIGludm9raW5nIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kcy4KKwkgKi8KKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCXVzYl9wdXRfaGNkKGhjZCk7CisJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworCisKKwlyZXR1cm4gMDsKK30KKworCisKKyNpZmRlZiBDT05GSUdfUE0KKworLyogd2hhdCBzaG91bGQgaGFwcGVuIGZvciBVU0IvSVAgdW5kZXIgc3VzcGVuZC9yZXN1bWU/ICovCitzdGF0aWMgaW50IHZoY2lfaGNkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJaW50IHJocG9ydCA9IDA7CisJaW50IGNvbm5lY3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCWZvciAocmhwb3J0ID0gMDsgcmhwb3J0IDwgVkhDSV9OUE9SVFM7IHJocG9ydCsrKQorCQlpZiAodGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gJgorCQkJCQkJVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKQorCQkJY29ubmVjdGVkICs9IDE7CisKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJaWYgKGNvbm5lY3RlZCA+IDApIHsKKwkJdWluZm8oIldlIGhhdmUgJWQgYWN0aXZlIGNvbm5lY3Rpb24lcy4gRG8gbm90IHN1c3BlbmQuXG4iLAorCQkJCWNvbm5lY3RlZCwgKGNvbm5lY3RlZCA9PSAxID8gIiIgOiAicyIpKTsKKwkJcmV0ID0gIC1FQlVTWTsKKwl9IGVsc2UgeworCQl1aW5mbygic3VzcGVuZCB2aGNpX2hjZCIpOworCQljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmhjaV9oY2RfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzZXRfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworI2RlZmluZSB2aGNpX2hjZF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgdmhjaV9oY2RfcmVzdW1lCQlOVUxMCisKKyNlbmRpZgorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZoY2lfZHJpdmVyID0geworCS5wcm9iZQk9IHZoY2lfaGNkX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcCh2aGNpX2hjZF9yZW1vdmUpLAorCS5zdXNwZW5kID0gdmhjaV9oY2Rfc3VzcGVuZCwKKwkucmVzdW1lCT0gdmhjaV9oY2RfcmVzdW1lLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVGhlIFZIQ0kgJ2RldmljZScgaXMgJ3ZpcnR1YWwnOyBub3QgYSByZWFsIHBsdWcmcGxheSBoYXJkd2FyZS4KKyAqIFdlIG5lZWQgdG8gYWRkIHRoaXMgdmlydHVhbCBkZXZpY2UgYXMgYSBwbGF0Zm9ybSBkZXZpY2UgYXJiaXRyYXJpbHk6CisgKgkxLiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoKQorICovCitzdGF0aWMgdm9pZCB0aGVfcGRldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRoZV9wZGV2ID0geworCS8qIHNob3VsZCBiZSB0aGUgc2FtZSBuYW1lIGFzIGRyaXZlcl9uYW1lICovCisJLm5hbWUgPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkuaWQgPSAtMSwKKwkuZGV2ID0geworCQkvKiAuZHJpdmVyID0gJnZoY2lfZHJpdmVyLCAqLworCQkucmVsZWFzZSA9IHRoZV9wZGV2X3JlbGVhc2UsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZoY2lfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlkYmdfdmhjaV9oYygiZW50ZXJcbiIpOworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICVzLCAlc1xuIiwgZHJpdmVyX25hbWUsCisJICAgICAgIERSSVZFUl9WRVJTSU9OKTsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmhjaV9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kcml2ZXJfcmVnaXN0ZXI7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRoZV9wZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyOworCisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CisJcmV0dXJuIHJldDsKKworCS8qIGVycm9yIG9jY3VycmVkICovCitlcnJfcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7CisKK2Vycl9kcml2ZXJfcmVnaXN0ZXI6CisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHZoY2lfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aGNpX2NsZWFudXAodm9pZCkKK3sKKwlkYmdfdmhjaV9oYygiZW50ZXJcbiIpOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRoZV9wZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmhjaV9kcml2ZXIpOworCisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7Cit9Cittb2R1bGVfZXhpdCh2aGNpX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlMzk5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKworLyogZ2V0IFVSQiBmcm9tIHRyYW5zbWl0dGVkIHVyYiBxdWV1ZSAqLworc3RhdGljIHN0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCisJCQkJCSAgICBfX3UzMiBzZXFudW0pCit7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiwgKnRtcDsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmdmRldi0+cHJpdl9yeCwgbGlzdCkgeworCQlpZiAocHJpdi0+c2VxbnVtID09IHNlcW51bSkgeworCQkJdXJiID0gcHJpdi0+dXJiOworCQkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwkJCWRiZ192aGNpX3J4KCJmaW5kIHVyYiAlcCB2dXJiICVwIHNlcW51bSAldVxuIiwKKwkJCQkgICAgdXJiLCBwcml2LCBzZXFudW0pOworCisJCQkvKiBUT0RPOiBmaXggbG9naWMgaGVyZSB0byBpbXByb3ZlIGluZGVudCBzaXR1dGF0aW9uICovCisJCQlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJCWlmIChzdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkJCSAgICAgc3RhdHVzID09IC1FQ09OTlJFU0VUKQorCQkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKKwkJCQkJCSAidXJiICVwIHdhcyB1bmxpbmtlZCAiCisJCQkJCQkgIiVzc3luY2hyb251b3VzbHkuXG4iLCB1cmIsCisJCQkJCQkgc3RhdHVzID09IC1FTk9FTlQgPyAiIiA6ICJhIik7CisJCQkJZWxzZQorCQkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKKwkJCQkJCSAidXJiICVwIG1heSBiZSBpbiBhIGVycm9yLCAiCisJCQkJCQkgInN0YXR1cyAlZFxuIiwgdXJiLCBzdGF0dXMpOworCQkJfQorCisJCQlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7CisJCQlrZnJlZShwcml2KTsKKwkJCXVyYi0+aGNwcml2ID0gTlVMTDsKKworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCXJldHVybiB1cmI7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJCQkJCXN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZ2ZGV2LT51ZDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKworCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCBwZHUtPmJhc2Uuc2VxbnVtKTsKKworCisJaWYgKCF1cmIpIHsKKwkJdWVycigiY2Fubm90IGZpbmQgYSB1cmIgb2Ygc2VxbnVtICV1XG4iLCBwZHUtPmJhc2Uuc2VxbnVtKTsKKwkJdWluZm8oIm1heCBzZXFudW0gJWRcbiIsIGF0b21pY19yZWFkKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKSk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCisKKwkvKiB1bnBhY2sgdGhlIHBkdSB0byBhIHVyYiAqLworCXVzYmlwX3BhY2tfcGR1KHBkdSwgdXJiLCBVU0JJUF9SRVRfU1VCTUlULCAwKTsKKworCisJLyogcmVjdiB0cmFuc2ZlciBidWZmZXIgKi8KKwlpZiAodXNiaXBfcmVjdl94YnVmZih1ZCwgdXJiKSA8IDApCisJCXJldHVybjsKKworCisJLyogcmVjdiBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KKwlpZiAodXNiaXBfcmVjdl9pc28odWQsIHVyYikgPCAwKQorCQlyZXR1cm47CisKKworCWlmIChkYmdfZmxhZ192aGNpX3J4KQorCQl1c2JpcF9kdW1wX3VyYih1cmIpOworCisKKwlkYmdfdmhjaV9yeCgibm93IGdpdmViYWNrIHVyYiAlcFxuIiwgdXJiKTsKKworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiKTsKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsIHVyYi0+c3RhdHVzKTsKKworCisJZGJnX3ZoY2lfcngoIkxlYXZlXG4iKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX3BlbmRpbmdfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3J4LCBsaXN0KSB7CisJCXVpbmZvKCJ1bmxpbmstPnNlcW51bSAlbHVcbiIsIHVubGluay0+c2VxbnVtKTsKKwkJaWYgKHVubGluay0+c2VxbnVtID09IHBkdS0+YmFzZS5zZXFudW0pIHsKKwkJCWRiZ192aGNpX3J4KCJmb3VuZCBwZW5kaW5nIHVubGluaywgJWx1XG4iLAorCQkJCQkJCXVubGluay0+c2VxbnVtKTsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCisJCQlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKwkJCXJldHVybiB1bmxpbms7CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJCQkJCXN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluazsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwl1c2JpcF9kdW1wX2hlYWRlcihwZHUpOworCisJdW5saW5rID0gZGVxdWV1ZV9wZW5kaW5nX3VubGluayh2ZGV2LCBwZHUpOworCWlmICghdW5saW5rKSB7CisJCXVpbmZvKCJjYW5ub3QgZmluZCB0aGUgcGVuZGluZyB1bmxpbmsgJXVcbiIsIHBkdS0+YmFzZS5zZXFudW0pOworCQlyZXR1cm47CisJfQorCisJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHVubGluay0+dW5saW5rX3NlcW51bSk7CisJaWYgKCF1cmIpIHsKKwkJLyoKKwkJICogSSBnZXQgdGhlIHJlc3VsdCBvZiBhIHVubGluayByZXF1ZXN0LiBCdXQsIGl0IHNlZW1zIHRoYXQgSQorCQkgKiBhbHJlYWR5IHJlY2VpdmVkIHRoZSByZXN1bHQgb2YgaXRzIHN1Ym1pdCByZXN1bHQgYW5kIGdhdmUKKwkJICogYmFjayB0aGUgVVJCLgorCQkgKi8KKwkJdWluZm8oInRoZSB1cmIgKHNlcW51bSAlZCkgd2FzIGFscmVhZHkgZ2l2ZW4gYmFja2VkXG4iLAorCQkJCQkJCXBkdS0+YmFzZS5zZXFudW0pOworCX0gZWxzZSB7CisJCWRiZ192aGNpX3J4KCJub3cgZ2l2ZWJhY2sgdXJiICVwXG4iLCB1cmIpOworCisJCS8qIElmIHVubGluayBpcyBzdWNjZWVkLCBzdGF0dXMgaXMgLUVDT05OUkVTRVQgKi8KKwkJdXJiLT5zdGF0dXMgPSBwZHUtPnUucmV0X3VubGluay5zdGF0dXM7CisJCXVpbmZvKCIlZFxuIiwgdXJiLT5zdGF0dXMpOworCisJCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYik7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsCisJCQkJCQkJCXVyYi0+c3RhdHVzKTsKKwl9CisKKwlrZnJlZSh1bmxpbmspOworCisJcmV0dXJuOworfQorCisvKiByZWN2IGEgcGR1ICovCitzdGF0aWMgdm9pZCB2aGNpX3J4X3BkdShzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JpcF9oZWFkZXIgcGR1OworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHZoY2lfZGV2aWNlLCB1ZCk7CisKKworCWRiZ192aGNpX3J4KCJFbnRlclxuIik7CisKKwltZW1zZXQoJnBkdSwgMCwgc2l6ZW9mKHBkdSkpOworCisKKwkvKiAxLiByZWNlaXZlIGEgcGR1IGhlYWRlciAqLworCXJldCA9IHVzYmlwX3htaXQoMCwgdWQtPnRjcF9zb2NrZXQsIChjaGFyICopICZwZHUsIHNpemVvZihwZHUpLCAwKTsKKwlpZiAocmV0ICE9IHNpemVvZihwZHUpKSB7CisJCXVlcnIoInJlY2VpdmluZyBwZHUgZmFpbGVkISBzaXplIGlzICVkLCBzaG91bGQgYmUgJWRcbiIsCisJCQkJcmV0LCAodW5zaWduZWQgaW50KXNpemVvZihwZHUpKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKwl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdSwgMCk7CisKKwlpZiAoZGJnX2ZsYWdfdmhjaV9yeCkKKwkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CisKKwlzd2l0Y2ggKHBkdS5iYXNlLmNvbW1hbmQpIHsKKwljYXNlIFVTQklQX1JFVF9TVUJNSVQ6CisJCXZoY2lfcmVjdl9yZXRfc3VibWl0KHZkZXYsICZwZHUpOworCQlicmVhazsKKwljYXNlIFVTQklQX1JFVF9VTkxJTks6CisJCXZoY2lfcmVjdl9yZXRfdW5saW5rKHZkZXYsICZwZHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOT1RSRUFDSEVEICovCisJCXVlcnIoInVua25vd24gcGR1ICV1XG4iLCBwZHUuYmFzZS5jb21tYW5kKTsKKwkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHZoY2lfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSBjb250YWluZXJfb2YodXQsIHN0cnVjdCB1c2JpcF9kZXZpY2UsIHRjcF9yeCk7CisKKworCXdoaWxlICgxKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZGJnX3ZoY2lfcngoInNpZ25hbCBjYXRjaGVkIVxuIik7CisJCQlicmVhazsKKwkJfQorCisKKwkJaWYgKHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKQorCQkJYnJlYWs7CisKKwkJdmhjaV9yeF9wZHUodWQpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjMjg1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisvKiBUT0RPOiByZWZpbmUgbG9ja2luZyA/Ki8KKworLyogU3lzZnMgZW50cnkgdG8gc2hvdyBwb3J0IHN0YXR1cyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKm91dCkKK3sKKwljaGFyICpzID0gb3V0OworCWludCBpID0gMDsKKworCWlmICghdGhlX2NvbnRyb2xsZXIgfHwgIW91dCkKKwkJQlVHKCk7CisKKwlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCS8qCisJICogb3V0cHV0IGV4YW1wbGU6CisJICogcHJ0IHN0YSBzcGQgZGV2IHNvY2tldCAgICAgICAgICAgbG9jYWxfYnVzaWQKKwkgKiAwMDAgMDA0IDAwMCAwMDAgICAgICAgICBjNWE3YmI4MCAxLTIuMworCSAqIDAwMSAwMDQgMDAwIDAwMCAgICAgICAgIGQ4Y2VlOTgwIDItMy40CisJICoKKwkgKiBJUCBhZGRyZXNzIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhIHNvY2tldCBwb2ludGVyIGFkZHJlc3MgYnkgbG9va2luZworCSAqIHVwIC9wcm9jL25ldC97dGNwLHRjcDZ9LiBBbHNvLCBhIHVzZXJsYW5kIHByb2dyYW0gbWF5IHJlbWVtYmVyIGEKKwkgKiBwb3J0IG51bWJlciBhbmQgaXRzIHBlZXIgSVAgYWRkcmVzcy4KKwkgKi8KKwlvdXQgKz0gc3ByaW50ZihvdXQsICJwcnQgc3RhIHNwZCBidXMgZGV2IHNvY2tldCAgICAgICAgICAgIgorCQkgICAgICAgImxvY2FsX2J1c2lkXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBWSENJX05QT1JUUzsgaSsrKSB7CisJCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IHBvcnRfdG9fdmRldihpKTsKKworCQlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwM3UgJTAzdSAiLCBpLCB2ZGV2LT51ZC5zdGF0dXMpOworCisJCWlmICh2ZGV2LT51ZC5zdGF0dXMgPT0gVkRFVl9TVF9VU0VEKSB7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlMDN1ICUwOHggIiwKKwkJCQkJdmRldi0+c3BlZWQsIHZkZXYtPmRldmlkKTsKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUxNnAgIiwgdmRldi0+dWQudGNwX3NvY2tldCk7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyIsIHZkZXYtPnVkZXYtPmRldi5idXNfaWQpOworCisJCX0gZWxzZQorCQkJb3V0ICs9IHNwcmludGYob3V0LCAiMDAwIDAwMCAwMDAgMDAwMDAwMDAwMDAwMDAwMCAwLTAiKTsKKworCQlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCisJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwl9CisKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJcmV0dXJuIG91dCAtIHM7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7CisKKy8qIFN5c2ZzIGVudHJ5IHRvIHNodXRkb3duIGEgdmlydHVhbCBjb25uZWN0aW9uICovCitzdGF0aWMgaW50IHZoY2lfcG9ydF9kaXNjb25uZWN0KF9fdTMyIHJocG9ydCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisKKwlkYmdfdmhjaV9zeXNmcygiZW50ZXJcbiIpOworCisJLyogbG9jayAqLworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJdmRldiA9IHBvcnRfdG9fdmRldihyaHBvcnQpOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfTlVMTCkgeworCQl1ZXJyKCJub3QgY29ubmVjdGVkICVkXG4iLCB2ZGV2LT51ZC5zdGF0dXMpOworCisJCS8qIHVubG9jayAqLworCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogdW5sb2NrICovCisJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0RPV04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2RldGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBlcnI7CisJX191MzIgcmhwb3J0ID0gMDsKKworCXNzY2FuZihidWYsICIldSIsICZyaHBvcnQpOworCisJLyogY2hlY2sgcmhwb3J0ICovCisJaWYgKHJocG9ydCA+PSBWSENJX05QT1JUUykgeworCQl1ZXJyKCJpbnZhbGlkIHBvcnQgJXVcbiIsIHJocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHZoY2lfcG9ydF9kaXNjb25uZWN0KHJocG9ydCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZGJnX3ZoY2lfc3lzZnMoIkxlYXZlXG4iKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0YWNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9kZXRhY2gpOworCisvKiBTeXNmcyBlbnRyeSB0byBlc3RhYmxpc2ggYSB2aXJ0dWFsIGNvbm5lY3Rpb24gKi8KK3N0YXRpYyBpbnQgdmFsaWRfYXJncyhfX3UzMiByaHBvcnQsIGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCkKK3sKKwkvKiBjaGVjayByaHBvcnQgKi8KKwlpZiAoKHJocG9ydCA8IDApIHx8IChyaHBvcnQgPj0gVkhDSV9OUE9SVFMpKSB7CisJCXVlcnIoInBvcnQgJXVcbiIsIHJocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIHNwZWVkICovCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVlcnIoInNwZWVkICVkXG4iLCBzcGVlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVG8gc3RhcnQgYSBuZXcgVVNCL0lQIGF0dGFjaG1lbnQsIGEgdXNlcmxhbmQgcHJvZ3JhbSBuZWVkcyB0byBzZXR1cCBhIFRDUAorICogY29ubmVjdGlvbiBhbmQgdGhlbiB3cml0ZSBpdHMgc29ja2V0IGRlc2NyaXB0b3Igd2l0aCByZW1vdGUgZGV2aWNlCisgKiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgc3lzZnMgZmlsZS4KKyAqCisgKiBBIHJlbW90ZSBkZXZpY2UgaXMgdmlydHVhbGx5IGF0dGFjaGVkIHRvIHRoZSByb290LWh1YiBwb3J0IG9mIEByaHBvcnQgd2l0aAorICogQHNwZWVkLiBAZGV2aWQgaXMgZW1iZWRkZWQgaW50byBhIHJlcXVlc3QgdG8gc3BlY2lmeSB0aGUgcmVtb3RlIGRldmljZSBpbiBhCisgKiBzZXJ2ZXIgaG9zdC4KKyAqCisgKiB3cml0ZSgpIHJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisJc3RydWN0IHNvY2tldCAqc29ja2V0OworCWludCBzb2NrZmQgPSAwOworCV9fdTMyIHJocG9ydCA9IDAsIGRldmlkID0gMCwgc3BlZWQgPSAwOworCisJLyoKKwkgKiBAcmhwb3J0OiBwb3J0IG51bWJlciBvZiB2aGNpX2hjZAorCSAqIEBzb2NrZmQ6IHNvY2tldCBkZXNjcmlwdG9yIG9mIGFuIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9uCisJICogQGRldmlkOiB1bmlxdWUgZGV2aWNlIGlkZW50aWZpZXIgaW4gYSByZW1vdGUgaG9zdAorCSAqIEBzcGVlZDogdXNiIGRldmljZSBzcGVlZCBpbiBhIHJlbW90ZSBob3N0CisJICovCisJc3NjYW5mKGJ1ZiwgIiV1ICV1ICV1ICV1IiwgJnJocG9ydCwgJnNvY2tmZCwgJmRldmlkLCAmc3BlZWQpOworCisJZGJnX3ZoY2lfc3lzZnMoInJocG9ydCgldSkgc29ja2ZkKCV1KSBkZXZpZCgldSkgc3BlZWQoJXUpXG4iLAorCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CisKKworCS8qIGNoZWNrIHJlY2VpdmVkIHBhcmFtZXRlcnMgKi8KKwlpZiAodmFsaWRfYXJncyhyaHBvcnQsIHNwZWVkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY2hlY2sgc29ja2ZkICovCisJc29ja2V0ID0gc29ja2ZkX3RvX3NvY2tldChzb2NrZmQpOworCWlmICghc29ja2V0KQorCQlyZXR1cm4gIC1FSU5WQUw7CisKKwkvKiBub3cgbmVlZCBsb2NrIHVudGlsIHNldHRpbmcgdmRldiBzdGF0dXMgYXMgdXNlZCAqLworCisJLyogYmVnaW4gYSBsb2NrICovCisJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl2ZGV2ID0gcG9ydF90b192ZGV2KHJocG9ydCk7CisKKwlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCisJaWYgKHZkZXYtPnVkLnN0YXR1cyAhPSBWREVWX1NUX05VTEwpIHsKKwkJLyogZW5kIG9mIHRoZSBsb2NrICovCisJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCQl1ZXJyKCJwb3J0ICVkIGFscmVhZHkgdXNlZFxuIiwgcmhwb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdWluZm8oInJocG9ydCgldSkgc29ja2ZkKCVkKSBkZXZpZCgldSkgc3BlZWQoJXUpXG4iLAorCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CisKKwl2ZGV2LT5kZXZpZCAgICAgICAgID0gZGV2aWQ7CisJdmRldi0+c3BlZWQgICAgICAgICA9IHNwZWVkOworCXZkZXYtPnVkLnRjcF9zb2NrZXQgPSBzb2NrZXQ7CisJdmRldi0+dWQuc3RhdHVzICAgICA9IFZERVZfU1RfTk9UQVNTSUdORUQ7CisKKwlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKwkvKiBlbmQgdGhlIGxvY2sgKi8KKworCS8qCisJICogdGhpcyBmdW5jdGlvbiB3aWxsIHNsZWVwLCBzbyBzaG91bGQgYmUgb3V0IG9mIHRoZSBsb2NrLiBidXQsIGl0J3Mgb2sKKwkgKiBiZWNhdXNlIHdlIGFscmVhZHkgbWFya2VkIHZkZXYgYXMgYmVpbmcgdXNlZC4gcmVhbGx5PworCSAqLworCXVzYmlwX3N0YXJ0X3RocmVhZHMoJnZkZXYtPnVkKTsKKworCXJoX3BvcnRfY29ubmVjdChyaHBvcnQsIHNwZWVkKTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihhdHRhY2gsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2F0dGFjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX2RldGFjaC5hdHRyLAorCSZkZXZfYXR0cl9hdHRhY2guYXR0ciwKKwkmZGV2X2F0dHJfdXNiaXBfZGVidWcuYXR0ciwKKwlOVUxMLAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBkZXZfYXR0cnMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1NTJhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKworc3RhdGljIHZvaWQgc2V0dXBfY21kX3N1Ym1pdF9wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1cCwgIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2ID0gKChzdHJ1Y3QgdmhjaV9wcml2ICopdXJiLT5oY3ByaXYpOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IHByaXYtPnZkZXY7CisKKwlkYmdfdmhjaV90eCgiVVJCLCBsb2NhbCBkZXZudW0gJXUsIHJlbW90ZSBkZXZpZCAldVxuIiwKKwkJCQl1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCB2ZGV2LT5kZXZpZCk7CisKKwlwZHVwLT5iYXNlLmNvbW1hbmQgPSBVU0JJUF9DTURfU1VCTUlUOworCXBkdXAtPmJhc2Uuc2VxbnVtICA9IHByaXYtPnNlcW51bTsKKwlwZHVwLT5iYXNlLmRldmlkICAgPSB2ZGV2LT5kZXZpZDsKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQlwZHVwLT5iYXNlLmRpcmVjdGlvbiA9IFVTQklQX0RJUl9JTjsKKwllbHNlCisJCXBkdXAtPmJhc2UuZGlyZWN0aW9uID0gVVNCSVBfRElSX09VVDsKKwlwZHVwLT5iYXNlLmVwICAgICAgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisKKwl1c2JpcF9wYWNrX3BkdShwZHVwLCB1cmIsIFVTQklQX0NNRF9TVUJNSVQsIDEpOworCisJaWYgKHVyYi0+c2V0dXBfcGFja2V0KQorCQltZW1jcHkocGR1cC0+dS5jbWRfc3VibWl0LnNldHVwLCB1cmItPnNldHVwX3BhY2tldCwgOCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmhjaV9wcml2ICpkZXF1ZXVlX2Zyb21fcHJpdl90eChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2LCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnZkZXYtPnByaXZfdHgsIGxpc3QpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnByaXYtPmxpc3QsICZ2ZGV2LT5wcml2X3J4KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworCitzdGF0aWMgaW50IHZoY2lfc2VuZF9jbWRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2ID0gTlVMTDsKKworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdlszXTsKKwlzaXplX3QgdHhzaXplOworCisJc2l6ZV90IHRvdGFsX3NpemUgPSAwOworCisJd2hpbGUgKChwcml2ID0gZGVxdWV1ZV9mcm9tX3ByaXZfdHgodmRldikpICE9IE5VTEwpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHVyYiAqdXJiID0gcHJpdi0+dXJiOworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisJCXZvaWQgKmlzb19idWZmZXIgPSBOVUxMOworCisJCXR4c2l6ZSA9IDA7CisJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworCQlkYmdfdmhjaV90eCgic2V0dXAgdHhkYXRhIHVyYiAlcFxuIiwgdXJiKTsKKworCisJCS8qIDEuIHNldHVwIHVzYmlwX2hlYWRlciAqLworCQlzZXR1cF9jbWRfc3VibWl0X3BkdSgmcGR1X2hlYWRlciwgdXJiKTsKKwkJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHVfaGVhZGVyLCAxKTsKKworCQlpb3ZbMF0uaW92X2Jhc2UgPSAmcGR1X2hlYWRlcjsKKwkJaW92WzBdLmlvdl9sZW4gID0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCQl0eHNpemUgKz0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCisJCS8qIDIuIHNldHVwIHRyYW5zZmVyIGJ1ZmZlciAqLworCQlpZiAoIXVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKSB7CisJCQlpb3ZbMV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlvdlsxXS5pb3ZfbGVuICA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXR4c2l6ZSArPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCX0KKworCQkvKiAzLiBzZXR1cCBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KKwkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCXNzaXplX3QgbGVuID0gMDsKKworCQkJaXNvX2J1ZmZlciA9IHVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdSh1cmIsICZsZW4pOworCQkJaWYgKCFpc29fYnVmZmVyKSB7CisJCQkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwKKwkJCQkJCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWlvdlsyXS5pb3ZfYmFzZSA9IGlzb19idWZmZXI7CisJCQlpb3ZbMl0uaW92X2xlbiAgPSBsZW47CisJCQl0eHNpemUgKz0gbGVuOworCQl9CisKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2codmRldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LCAzLCB0eHNpemUpOworCQlpZiAocmV0ICE9IHR4c2l6ZSkgeworCQkJdWVycigic2VuZG1zZyBmYWlsZWQhLCByZXR2YWwgJWQgZm9yICV6ZFxuIiwgcmV0LAorCQkJCQkJCQl0eHNpemUpOworCQkJa2ZyZWUoaXNvX2J1ZmZlcik7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlrZnJlZShpc29fYnVmZmVyKTsKKwkJZGJnX3ZoY2lfdHgoInNlbmQgdHhkYXRhXG4iKTsKKworCQl0b3RhbF9zaXplICs9IHR4c2l6ZTsKKwl9CisKKwlyZXR1cm4gdG90YWxfc2l6ZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX2Zyb21fdW5saW5rX3R4KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3R4LCBsaXN0KSB7CisJCWxpc3RfbW92ZV90YWlsKCZ1bmxpbmstPmxpc3QsICZ2ZGV2LT51bmxpbmtfcngpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHVubGluazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHZoY2lfc2VuZF9jbWRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluayA9IE5VTEw7CisKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbM107CisJc2l6ZV90IHR4c2l6ZTsKKworCXNpemVfdCB0b3RhbF9zaXplID0gMDsKKworCXdoaWxlICgodW5saW5rID0gZGVxdWV1ZV9mcm9tX3VubGlua190eCh2ZGV2KSkgIT0gTlVMTCkgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisKKwkJdHhzaXplID0gMDsKKwkJbWVtc2V0KCZwZHVfaGVhZGVyLCAwLCBzaXplb2YocGR1X2hlYWRlcikpOworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQltZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisJCWRiZ192aGNpX3R4KCJzZXR1cCBjbWQgdW5saW5rLCAlbHUgXG4iLCB1bmxpbmstPnNlcW51bSk7CisKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJcGR1X2hlYWRlci5iYXNlLmNvbW1hbmQgPSBVU0JJUF9DTURfVU5MSU5LOworCQlwZHVfaGVhZGVyLmJhc2Uuc2VxbnVtICA9IHVubGluay0+c2VxbnVtOworCQlwZHVfaGVhZGVyLmJhc2UuZGV2aWQJPSB2ZGV2LT5kZXZpZDsKKwkJcGR1X2hlYWRlci5iYXNlLmVwCT0gMDsKKwkJcGR1X2hlYWRlci51LmNtZF91bmxpbmsuc2VxbnVtID0gdW5saW5rLT51bmxpbmtfc2VxbnVtOworCisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyh2ZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLCBpb3YsIDEsIHR4c2l6ZSk7CisJCWlmIChyZXQgIT0gdHhzaXplKSB7CisJCQl1ZXJyKCJzZW5kbXNnIGZhaWxlZCEsIHJldHZhbCAlZCBmb3IgJXpkXG4iLCByZXQsCisJCQkJCQkJCXR4c2l6ZSk7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCisJCWRiZ192aGNpX3R4KCJzZW5kIHR4ZGF0YVxuIik7CisKKwkJdG90YWxfc2l6ZSArPSB0eHNpemU7CisJfQorCisJcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCB2aGNpX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCB0Y3BfdHgpOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHZoY2lfZGV2aWNlLCB1ZCk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXVpbmZvKCJ2aGNpX3R4IHNpZ25hbCBjYXRjaGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZoY2lfc2VuZF9jbWRfc3VibWl0KHZkZXYpIDwgMCkKKwkJCWJyZWFrOworCisJCWlmICh2aGNpX3NlbmRfY21kX3VubGluayh2ZGV2KSA8IDApCisJCQlicmVhazsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodmRldi0+d2FpdHFfdHgsCisJCQkJKCFsaXN0X2VtcHR5KCZ2ZGV2LT5wcml2X3R4KSB8fAorCQkJCSAhbGlzdF9lbXB0eSgmdmRldi0+dW5saW5rX3R4KSkpOworCisJCWRiZ192aGNpX3R4KCJwZW5kaW5nIHVyYnMgPywgbm93IHdha2UgdXBcbiIpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTIxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCkBAIC0wLDAgKzEsNyBAQAorY29uZmlnIFczNVVORAorCXRyaXN0YXRlICJXaW5ib25kIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTCAmJiAhNEtTVEFDS1MKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGhpZ2hseSBleHBlcmltZW50YWwgZHJpdmVyIGZvciB3aW5ib25kIHdpZmkgY2FyZCBvbiBzb21lIEtvaGppbnNoYSBub3RlYm9va3MKKwkgIENoZWNrIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC93aW5ib25kcG9ydC8gZm9yIG5ldyB2ZXJzaW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Yzk4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisJRFJJVkVSX0RJUj0uL2xpbnV4CisKK3czNXVuZC1vYmpzIDo9ICQoRFJJVkVSX0RJUikvd2J1c2IubyAkKERSSVZFUl9ESVIpL3diMzVyZWcubyAkKERSSVZFUl9ESVIpL3diMzVyeC5vICQoRFJJVkVSX0RJUikvd2IzNXR4Lm8gXAorCW1kcy5vIFwKKwltbG1ldHhyeC5vIFwKKwltdG8ubwlcCisJcGh5X2NhbGlicmF0aW9uLm8JXAorCXJlZy5vCQkJXAorCXJ4aXNyLm8JCQlcCisJc21lX2FwaS5vCQlcCisJd2JoYWwubwkJCVwKKwl3YmxpbnV4Lm8JCVwKKworCitvYmotJChDT05GSUdfVzM1VU5EKSArPSB3MzV1bmQubworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTQ0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAorVE9ETzoKKwktIHNwYXJzZSBjbGVhbnVwcworCS0gY2hlY2twYXRjaCBjbGVhbnVwcworCS0ga2VybmVsZG9jIGNsZWFudXBzCisJLSByZW1vdmUgdHlwZWRlZnMKKwktIHJlbW92ZSB1bnVzZWQgaW9jdGxzCisJLSB1c2UgY2ZnODAyMTEgZm9yIHJlZ3VsYXRvcnkgc3R1ZmYKKwktIGZpeCA0ayBzdGFjayBwcm9ibGVtcworCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAorUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYWRhcHRlci5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTcwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9hZGFwdGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIEFEQVBURVIuSCAtCisvLyBXaW5kb3dzIE5ESVMgZ2xvYmFsIHZhcmlhYmxlICdBZGFwdGVyJyB0eXBlZGVmCisvLworI2RlZmluZSBNQVhfQU5TSV9TVFJJTkcJCTQwCit0eXBlZGVmIHN0cnVjdCBXQjMyX0FEQVBURVIKK3sKKwl1MzIgQWRhcHRlckluZGV4OyAvLyAyMDA2MDcwMy40IEFkZCBmb3IgdXNpbmcgcEFkYXB0ZXJDb250ZXh0IGdsb2JhbCBBZGFwdGVyIHBvaW50CisKKwlXQl9MT0NBTERFU0NSSVBUCXNMb2NhbFBhcmE7CQkvLyBNeXNlbGYgY29ubmVjdGVkIHBhcmFtZXRlcnMKKwlQV0JfQlNTREVTQ1JJUFRJT04JYXNCU1NEZXNjcmlwdEVsZW1lbnQ7CisKKwlNTE1FX0ZSQU1FCQlzTWxtZUZyYW1lOwkJLy8gY29ubmVjdCB0byBwZWVyU1RBIHBhcmFtZXRlcnMKKworCU1UT19QQVJBTUVURVJTCQlzTXRvUGFyYTsgLy8gTVRPX3N0cnVjdCAuLi4KKwlod19kYXRhX3QJCQlzSHdEYXRhOyAvL0ZvciBIQUwKKwlNRFMJCQkJCU1kczsKKworCVdCTElOVVgJCVdiTGludXg7CisgICAgICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOworCisJdTgJTGlua05hbWVbTUFYX0FOU0lfU1RSSU5HXTsKK30gV0IzMl9BREFQVEVSLCBBREFQVEVSLCAqUFdCMzJfQURBUFRFUiwgKlBBREFQVEVSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzMTgzMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmgKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIEJTUyBkZXNjcmlwdG9yIERhdGFCYXNlIG1hbmFnZW1lbnQgZ2xvYmFsIGZ1bmN0aW9uCisvLworCit2b2lkIHZCU1NkZXNjcmlwdGlvbkluaXQoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgdkJTU2ZvdW5kTGlzdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordTggYm9DaGFuRmlsdGVyKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggQ2hhbk5vKTsKK3UxNiB3QlNTYWxsb2NhdGVFbnRyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordTE2IHdCU1NHZXRFbnRyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCB2U2ltcGxlSG91c2VLZWVwaW5nKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit1MTYgd0JTU2hvdXNlS2VlcGluZyhQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBDbGVhckJTU2Rlc2NwdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiBpKTsKK3UxNiB3QlNTZmluZEJzc0lEKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggKnBiQnNzaWQpOwordTE2IHdCU1NmaW5kRGVkaWNhdGVDYW5kaWRhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBzdHJ1Y3QgU1NJRF9FbGVtZW50ICpwc1NzaWQsIHU4ICpwYkJzc2lkKTsKK3UxNiB3QlNTZmluZE1BQ2FkZHIoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqcGJNYWNBZGRyKTsKK3UxNiB3QlNTc2VhcmNoTUFDYWRkcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4ICpwYk1hY0FkZHIsIHU4IGJhbmQpOwordTE2IHdCU1NhZGRTY2FuRGF0YShQV0IzMl9BREFQVEVSLCB1MTYsIHBzUlhEQVRBKTsKK3UxNiB3QlNTVXBkYXRlU2NhbkRhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgd0Jzc0lkeCwgcHNSWERBVEEgcHNSY3ZEYXRhKTsKK3UxNiB3QlNTY3JlYXRlSUJTU2RhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKK3ZvaWQgRGVzaXJlZFJhdGUyQlNTZGVzY3JpcHRvcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIFBXQl9CU1NERVNDUklQVElPTiBwc0Rlc0RhdGEsCisJCQkJCQkJIHU4ICpwQmFzaWNSYXRlU2V0LCB1OCBCYXNpY1JhdGVDb3VudCwKKwkJCQkJCQkgdTggKnBPcGVyYXRpb25SYXRlU2V0LCB1OCBPcGVyYXRpb25SYXRlQ291bnQpOwordm9pZCBEZXNpcmVkUmF0ZTJJbmZvRWxlbWVudChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4CSphZGRyLCB1MTYgKmlGaWxkT2Zmc2V0LAorCQkJCQkJCSB1OCAqcEJhc2ljUmF0ZVNldCwgdTggQmFzaWNSYXRlQ291bnQsCisJCQkJCQkJIHU4ICpwT3BlcmF0aW9uUmF0ZVNldCwgdTggT3BlcmF0aW9uUmF0ZUNvdW50KTsKK3ZvaWQgQlNTQWRkSUJTU2RhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKK3Vuc2lnbmVkIGNoYXIgYm9DbXBNYWNBZGRyKCB1OCAqLCB1OCAqKTsKK3Vuc2lnbmVkIGNoYXIgYm9DbXBTU0lEKHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDEsIHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDIpOwordTE2IHdCU1NmaW5kU1NJRChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU3NpZCk7Cit1MTYgd1JvYW1pbmdRdWVyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCB2UmF0ZVRvQml0bWFwKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2IGluZGV4KTsKK3U4IGJSYXRlVG9CaXRtYXBJbmRleChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4IGJSYXRlKTsKK3U4IGJCaXRtYXBUb1JhdGUodTggaSk7Cit1bnNpZ25lZCBjaGFyIGJvSXNFUlBzdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgaSk7Cit1bnNpZ25lZCBjaGFyIGJvQ2hlY2tDb25uZWN0KFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit1bnNpZ25lZCBjaGFyIGJvQ2hlY2tTaWduYWwoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgQWRkSUJTU0llKFBXQjMyX0FEQVBURVIgQWRhcHRlcixQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhICk7Ly9hZGRlZCBieSB3cyBmb3IgV1BBX05vbmUwNi8wMS8wNAordm9pZCBCc3NTY2FuVXBUb0RhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgQnNzVXBUb0RhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgUmF0ZVNvcnQodTggKlJhdGVBcnJheSwgdTggbnVtLCB1OCBtb2RlKTsKK3ZvaWQgUmF0ZVJlU29ydEZvclNSYXRlKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggKlJhdGVBcnJheSwgdTggbnVtKTsKK3ZvaWQgQXNzZW1ibGVfSUUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgd0Jzc0lkeCk7Cit2b2lkIFNldE1heFR4UmF0ZShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOworCit2b2lkIENyZWF0ZVdwYUlFKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2KiBpRmlsZE9mZnNldCwgdTggKm1zZywgc3RydWN0ICBNYW5hZ2VtZW50X0ZyYW1lKiBtc2dIZWFkZXIsCisJCQkJIHN0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkqIG1zZ0JvZHksIHUxNiBpTVNpbmRleCk7IC8vYWRkZWQgYnkgV1MgMDUvMTQvMDUKKworI2lmZGVmIF9XUEEyXwordm9pZCBDcmVhdGVSc25JRShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiogaUZpbGRPZmZzZXQsIHU4ICptc2csIHN0cnVjdCAgTWFuYWdlbWVudF9GcmFtZSogbXNnSGVhZGVyLAorCQkJCSBzdHJ1Y3QgQXNzb2NpYXRpb25fUmVxdWVzdF9GcmFtZV9Cb2R5KiBtc2dCb2R5LCB1MTYgaU1TaW5kZXgpOy8vYWRkZWQgYnkgV1MgMDUvMTQvMDUKKwordTE2IFNlYXJjaFBta2lkKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgc3RydWN0ICBNYW5hZ2VtZW50X0ZyYW1lKiBtc2dIZWFkZXIsCisJCQkJICAgc3RydWN0IFBNS0lEX0luZm9ybWF0aW9uX0VsZW1lbnQgKiBBc3NvUmVxX1BNS0lEICk7CisjZW5kaWYKKworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3Nkc2NwdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzE1MGEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaApAQCAtMCwwICsxLDE1NiBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8JYnNzZHNjcHQuYworLy8JCUJTUyBkZXNjcmlwdG9yIGRhdGEgYmFzZQorLy8JaGlzdG9yeSA6CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJQlNTIGRlc2NyaXB0b3IgZGF0YSBiYXNlIHdpbGwgc3RvcmUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBzdGF0aW9ucyBhdCB0aGUKKy8vCQlzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gVGhlIGZpcnN0IGVudHJ5KCBwc0JTUygwKSApIHdpbGwgbm90IGJlIHVzZWQgYW5kIHRoZQorLy8JCXNlY29uZCBvbmUoIHBzQlNTKDEpICkgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKy8vI2RlZmluZSBNQVhfQUNDX1JTU0lfQ09VTlQJCTEwCisjZGVmaW5lIE1BWF9BQ0NfUlNTSV9DT1VOVAkJNgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBCU1MgRGVzY3JpcHRpb24gc2V0IEVsZW1lbnQgLCB0byBzdG9yZSBzY2FuIHJlY2VpdmVkIEJlYWNvbiBpbmZvcm1hdGlvbgorLy8KKy8vIE91cidzIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSB0aGUgc3BlY3MuIFRoZSBzcGVjaWZ5IGEgUEhZX1BhcmFtZXRlcl9TZXQuCisvLyBTaW5jZSB3ZSdyZSBvbmx5IGRvaW5nIGEgRFMgZGVzaWduIHJpZ2h0IG5vdywgd2UganVzdCBoYXZlIGEgRFMgc3RydWN0dXJlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0eXBlZGVmIHN0cnVjdCBCU1NEZXNjcmlwdGlvbkVsZW1lbnQKK3sKKwl1MzIJCVNsb3RWYWxpZDsKKwl1MzIJCVBvd2VyU2F2ZU1vZGU7CisJUlhMQVlFUjEJUnhMYXllcjE7CisKKyAgICB1OAkJYWJQZWVyQWRkcmVzc1sgTUFDX0FERFJfTEVOR1RIICsgMiBdOyAvLyBwZWVyIE1BQyBBZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uIDYtT0NURVQgdmFsdWUKKyAgICB1MzIJCWR3QmdTY2FuU3RhbXA7CQkvLyBCZ1NjYW4gU2VxdWVuY2UgQ291bnRlciBzdGFtcCwgcmVjb3JkIHBzUk9BTS0+ZHdTY2FuQ291bnRlci4KKworCXUxNgkJQmVhY29uX1BlcmlvZDsKKwl1MTYJCXdBVElNX1dpbmRvdzsKKworICAgIHU4CQlhYkJzc0lEWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJCS8vIDZCCisKKyAgICB1OAkJYkJzc1R5cGU7CisgICAgdTgJCURUSU1fUGVyaW9kOyAgICAgICAgLy8gMSBvY3RldCB1c3VhbGx5IGZyb20gVElNIGVsZW1lbnQsIGlmIHByZXNlbnQKKwl1OAkJYm9JblRpbWVySGFuZGxlcjsKKwl1OAkJYm9FUlA7CQkJLy8gYW5hbHlzaXMgRVJQIG9yIChleHRlbmRlZCkgc3VwcG9ydGVkIHJhdGUgZWxlbWVudAorCisJdTgJCVRpbWVzdGFtcFs4XTsKKwl1OAkJQmFzaWNSYXRlWzMyXTsKKwl1OAkJT3BlcmF0aW9uYWxSYXRlWzMyXTsKKwl1MzIJCWR3QmFzaWNSYXRlQml0bWFwOwkJCS8vYml0IG1hcCwgcmV0cmlldmUgZnJvbSBTdXBwb3J0ZWRSYXRlU2V0CisJdTMyCQlkd09wZXJhdGlvbmFsUmF0ZUJpdG1hcDsJLy9iaXQgbWFwLCByZXRyaWV2ZSBmcm9tIFN1cHBvcnRlZFJhdGVTZXQgYW5kCisJCQkJCQkJCQkJLy8gRXh0ZW5kZWRTdXBwb3J0ZWRSYXRlU2V0CisJLy8gRm9yIFJTU0kgY2FsY3VsYXRpbmcKKwl1MzIJCUhhbFJzc2lbTUFYX0FDQ19SU1NJX0NPVU5UXTsgLy8gRW5jb2RlLiBJdCBtdXN0IHVzZSBNQUNSTyBvZiBIQUwgdG8gZ2V0IHRoZSBMTkEgYW5kIEFHQyBkYXRhCisJdTMyCQlIYWxSc3NpSW5kZXg7CisKKwkvLy8vRnJvbSBiZWFjb24vcHJvYmUgcmVzcG9uc2UKKyAgICBzdHJ1Y3QgU1NJRF9FbGVtZW50IFNTSUQ7CQkJCS8vIDM0QgorCXU4CXJlc2VydmVkXzFbIDIgXTsKKworICAgIHN0cnVjdCBDYXBhYmlsaXR5X0luZm9ybWF0aW9uX0VsZW1lbnQgICBDYXBhYmlsaXR5SW5mb3JtYXRpb247ICAvLyAyQgorCXU4CXJlc2VydmVkXzJbIDIgXTsKKworICAgIHN0cnVjdCBDRl9QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgICAgQ0ZfUGFyYW1ldGVyX1NldDsJCS8vIDhCCisgICAgc3RydWN0IElCU1NfUGFyYW1ldGVyX1NldF9FbGVtZW50ICBJQlNTX1BhcmFtZXRlcl9TZXQ7CQkvLyA0QgorICAgIHN0cnVjdCBUSU1fRWxlbWVudCAgICAgICAgICAgICAgICAgVElNX0VsZW1lbnRfU2V0OyAJCQkvLyAyNTZCCisKKyAgICBzdHJ1Y3QgRFNfUGFyYW1ldGVyX1NldF9FbGVtZW50ICAgIERTX1BhcmFtZXRlcl9TZXQ7CQkvLyAzQgorCXU4CXJlc2VydmVkXzM7CisKKwlzdHJ1Y3QgRVJQX0luZm9ybWF0aW9uX0VsZW1lbnQJCUVSUF9JbmZvcm1hdGlvbl9TZXQ7CS8vIDNCCisJdTgJcmVzZXJ2ZWRfNDsKKworICAgIHN0cnVjdCBTdXBwb3J0ZWRfUmF0ZXNfRWxlbWVudCAgICAgU3VwcG9ydGVkUmF0ZVNldDsJCQkvLyAxMEIKKwl1OAlyZXNlcnZlZF81WzJdOworCisJc3RydWN0IEV4dGVuZGVkX1N1cHBvcnRlZF9SYXRlc19FbGVtZW50CUV4dGVuZGVkU3VwcG9ydGVkUmF0ZVNldDsJLy8gMjU3QgorCXU4CXJlc2VydmVkXzZbM107CisKKwl1OAliYW5kOworCXU4CXJlc2VydmVkXzdbM107CisKKwkvLyBmb3IgTUxNRSBtb2R1bGUKKyAgICB1MTYJCXdTdGF0ZTsJCQkvLyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtCisJdTE2CQl3SW5kZXg7CQkJLy8gVEhJUyBCU1MgZWxlbWVudCBlbnRyeSBpbmRleAorCisJdm9pZCoJcHNBZGFwdGVyOwkJLy8gcG9pbnRlciB0byBUSElTIEFkYXB0ZXIKKwlPU19USU1FUgluVGltZXI7ICAvLyBNTE1FIHRpbWVyCisKKyAgICAvLyBBdXRoZW50aWNhdGlvbgorICAgIHUxNgkJd0F1dGhBbGdvOyAgICAgIC8vIHBlZXIgTUFDIE1MTUUgdXNlIEF1dGggYWxnb3JpdGhtLCBkZWZhdWx0IE9QRU5fQVVUSAorICAgIHUxNgkJd0F1dGhTZXFOdW07ICAgIC8vIGN1cnJlbnQgbG9jYWwgTUFDIHNlbmRvdXQgQXV0aFJlcSBzZXF1ZW5jZSBudW1iZXIKKworCXU4CQlhdXRoX2NoYWxsZW5nZVRleHRbMTI4XTsKKworCS8vLy9Gb3IgWFA6CisgICAgdTMyCQlpZXNfbGVuOwkJLy8gaW5mb3JtYXRpb24gZWxlbWVudCBsZW5ndGgKKyAgICB1OAkJaWVzWzI1Nl07CQkvLyBpbmZvcm1hdGlvbiBlbGVtZW50CisKKwkvLy8vRm9yIFdQQQorCXU4CVJzbkllX1R5cGVbMl07CQkvL2FkZGVkIGJ5IHdzIGZvciBkaXN0aW5ndWlzaCBXUEEgYW5kIFdQQTIgMDUvMTQvMDQKKwl1OAlSc25JZV9sZW47CisgICAgdTgJUnNuX051bTsKKworICAgIC8vIHRvIHJlY29yZCB0aGUgcnNuIGNpcGhlciBzdWl0ZXMsYWRkZGVkIGJ5IHdzIDA5LzA1LzA0CisJU1VJVEVfU0VMRUNUT1IJCQlncm91cF9jaXBoZXI7IC8vIDRCCisJU1VJVEVfU0VMRUNUT1IJCQlwYWlyd2lzZV9rZXlfY2lwaGVyX3N1aXRlc1tXTEFOX01BWF9QQUlSV0lTRV9DSVBIRVJfU1VJVEVfQ09VTlRdOworCVNVSVRFX1NFTEVDVE9SCQkJYXV0aF9rZXlfbWd0X3N1aXRlc1tXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVF07CisKKwl1MTYJCQkJCXBhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfY291bnQ7CisJdTE2CQkJCQlhdXRoX2tleV9tZ3Rfc3VpdGVfY291bnQ7CisKKwl1OAkJCQkJcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9zZWxlY3RlZDsKKwl1OAkJCQkJYXV0aF9rZXlfbWd0X3N1aXRlX3NlbGVjdGVkOworCXU4CQkJCQlyZXNlcnZlZF84WzJdOworCisJc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQgIHJzbl9jYXBhYmlsaXRpZXM7IC8vIDJCCisJdTgJCQkJCXJlc2VydmVkXzlbMl07CisKKyAgICAvL3RvIHJlY29yZCB0aGUgcnNuIGNpcGhlciBzdWl0ZXMgZm9yIFdQQTIKKyAgICAjaWZkZWYgX1dQQTJfCisJdTMyCQkJCQlwcmVfYXV0aDsJCS8vYWRkZWQgYnkgV1MgZm9yIGRpc3Rpbmd1aXNoIGZvciAwNS8wNC8wNAorICAgIFNVSVRFX1NFTEVDVE9SCQkJd3BhMl9ncm91cF9jaXBoZXI7IC8vIDRCCisJU1VJVEVfU0VMRUNUT1IJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVzW1dMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVF07CisJU1VJVEVfU0VMRUNUT1IJCQl3cGEyX2F1dGhfa2V5X21ndF9zdWl0ZXNbV0xBTl9NQVhfQVVUSF9LRVlfTUdUX1NVSVRFX0xJU1RfQ09VTlRdOworCisJdTE2CQkJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfY291bnQ7CisJdTE2CQkJCQl3cGEyX2F1dGhfa2V5X21ndF9zdWl0ZV9jb3VudDsKKworCXU4CQkJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfc2VsZWN0ZWQ7CisJdTgJCQkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlX3NlbGVjdGVkOworCXU4CQkJCQlyZXNlcnZlZF8xMFsyXTsKKworCXN0cnVjdCBSU05fQ2FwYWJpbGl0eV9FbGVtZW50ICB3cGEyX3Jzbl9jYXBhYmlsaXRpZXM7IC8vIDJCCisJdTgJCQkJCXJlc2VydmVkXzExWzJdOworICAgICNlbmRpZiAvL2VuZGlmIF9XUEEyXworCisJLy9Gb3IgUmVwbGF5IHByb3RlY3Rpb24KKy8vCXU4CQlQYWlyd2lzZVRTQ1s2XTsKKy8vCXU4CQlHcm91cFRTQ1s2XTsKKworCS8vLy9Gb3IgdXAtdG8tZGF0ZQorCXUzMgkJU2NhblRpbWVTdGFtcDsJLy9mb3IgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdGhlIHN0YXRpb24vQVAobWF5IGV4aXN0IGF0CisJCQkJCQkJLy9kaWZmZXJlbnQgY2hhbm5lbHMpIGhhcyBsZWZ0LiBJdCBtdXN0IGJlIGRldGVjdGVkIGJ5CisJCQkJCQkJLy9zY2FubmluZy4gTG9jYWwgZGV2aWNlIG1heSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkLgorCXUzMgkJQnNzVGltZVN0YW1wOwkvL09ubHkgZm9yIHRoZSBkZWNpc2lvbiB3aGV0aGVyIHRoZSBzdGF0aW9uL0FQKGV4aXN0IGluCisJCQkJCQkJLy90aGUgc2FtZSBjaGFubmVsLCBhbmQgbm8gc2Nhbm5pbmcpIGlmIGxvY2FsIGRldmljZSBoYXMKKwkJCQkJCQkvL2Nvbm5lY3RlZCBzdWNjZXNzZnVsbHkuCisKKwkvLyAyMDA2MTEwOCBBZGQgZm9yIHN0b3JpbmcgV1BTX0lFLiBbRSBpZF1bTGVuZ3RoXVtPVUldW0RhdGFdCisJdTgJCVdQU19JRV9EYXRhW01BWF9JRV9BUFBFTkRfU0laRV07CisJdTE2CQlXUFNfSUVfbGVuZ3RoOworCXUxNgkJV1BTX0lFX2xlbmd0aF90bXA7IC8vIEZvciB2ZXJpZnkgdGhlcmUgaXMgYW4gV1BTX0lFIGluIEJlYWNvbiBvciBwcm9iZSByZXNwb25zZQorCit9IFdCX0JTU0RFU0NSSVBUSU9OLCAqUFdCX0JTU0RFU0NSSVBUSU9OOworCisjZGVmaW5lIHdCU1NDb25uZWN0ZWRTVEEoQWRhcHRlcikgICAgICAgICAgICAgXAorICAgICgodTE2KShBZGFwdGVyKS0+c0xvY2FsUGFyYS53Q29ubmVjdGVkU1RBaW5kZXgpCisKKyNkZWZpbmUgcHNCU1MoaSkJCQkoJihBZGFwdGVyLT5hc0JTU0Rlc2NyaXB0RWxlbWVudFsoaSldKSkKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9kc190a2lwLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9kc190a2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0MWQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaApAQCAtMCwwICsxLDMzIEBACisvLyBSb3RhdGlvbiBmdW5jdGlvbnMgb24gMzIgYml0IHZhbHVlcworI2RlZmluZSBST0wzMiggQSwgbiApIFwKKyAgICAoICgoQSkgPDwgKG4pKSB8ICggKChBKT4+KDMyLShuKSkpICAmICggKDFVTCA8PCAobikpIC0gMSApICkgKQorCisjZGVmaW5lIFJPUjMyKCBBLCBuICkgICBST0wzMiggKEEpLCAzMi0obikgKQorCisKK3R5cGVkZWYgc3RydWN0IHRraXAKK3sKKyAgICB1MzIJSzAsIEsxOwkJLy8gS2V5CisJdW5pb24KKwl7CisJCXN0cnVjdCAvLyBDdXJyZW50IHN0YXRlCisJCXsKKwkJCXUzMglMOworCQkJdTMyCVI7CisJCX07CisJCXU4CUxSWzhdOworCX07CisJdW5pb24KKwl7CisJCXUzMglNOwkJLy8gTWVzc2FnZSBhY2N1bXVsYXRvciAoc2luZ2xlIHdvcmQpCisJCXU4CU1iWzRdOworCX07CisJczMyCQlieXRlc19pbl9NOwkvLyAjIGJ5dGVzIGluIE0KK30gdGtpcF90OworCisvL3ZvaWQgX2FwcGVuZF9kYXRhKCB1OCAqcERhdGEsIHUxNiBzaXplLCB0a2lwX3QgKnAgKTsKK3ZvaWQgTWRzX01pY0dldCggIHZvaWQqIEFkYXB0ZXIsICB2b2lkKiBwUnhMYXllcjEsICB1OCAqcEtleSwgIHU4ICpwTWljICk7Cit2b2lkIE1kc19NaWNGaWxsKCAgdm9pZCogQWRhcHRlciwgIHZvaWQqIHBEZXMsICB1OCAqWG1pdEJ1ZkFkZHJlc3MgKTsKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2dsXzgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDZkODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oCkBAIC0wLDAgKzEsMTI1IEBACisKKyNpZm5kZWYgX19HTF84MDIxMV9IX18KKyNkZWZpbmUgX19HTF84MDIxMV9IX18KKworLyoqKioqKioqKioqKioqKioqKiBDT05TVEFOVCBBTkQgTUFDUk8gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJTUyBUeXBlICovCitlbnVtIHsKKyAgICBXTEFOX0JTU1RZUEVfSU5GUkFTVFJVQ1RVUkUgICAgICAgICA9IDAsCisgICAgV0xBTl9CU1NUWVBFX0lOREVQRU5ERU5ULAorICAgIFdMQU5fQlNTVFlQRV9BTllfQlNTLAorfTsKKworCisKKy8qIFByZWFtYmxlX1R5cGUsIHNlZSA8U0ZTLTgwMi4xMUctTUlCLTIwMz4gKi8KK3R5cGVkZWYgZW51bSBwcmVhbWJsZV90eXBlIHsKKyAgICBXTEFOX1BSRUFNQkxFX1RZUEVfU0hPUlQsCisgICAgV0xBTl9QUkVBTUJMRV9UWVBFX0xPTkcsCit9ICAgIHByZWFtYmxlX3R5cGVfZTsKKworCisvKiBTbG90X1RpbWVfVHlwZSwgc2VlIDxTRlMtODAyLjExRy1NSUItMjA4PiAqLwordHlwZWRlZiBlbnVtIHNsb3RfdGltZV90eXBlIHsKKyAgICBXTEFOX1NMT1RfVElNRV9UWVBFX0xPTkcsCisgICAgV0xBTl9TTE9UX1RJTUVfVFlQRV9TSE9SVCwKK30gICAgc2xvdF90aW1lX3R5cGVfZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFbmNyeXB0aW9uIE1vZGUgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VQX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICBXRVBfNjQsCisgICAgV0VQXzEyOCwKKworICAgIEVOQ1JZUFRfRElTQUJMRSwKKyAgICBFTkNSWVBUX1dFUCwKKyAgICBFTkNSWVBUX1dFUF9OT0tFWSwKKyAgICBFTkNSWVBUX1RLSVAsCisgICAgRU5DUllQVF9US0lQX05PS0VZLAorICAgIEVOQ1JZUFRfQ0NNUCwKKyAgICBFTkNSWVBUX0NDTVBfTk9LRVksCit9ICAgIGVuY3J5cHRpb25fbW9kZV9lOworCit0eXBlZGVmIGVudW0gX1dMQU5fUkFESU8geworICAgIFdMQU5fUkFESU9fT04sCisgICAgV0xBTl9SQURJT19PRkYsCisgICAgV0xBTl9SQURJT19NQVgsIC8vIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZAorfSBXTEFOX1JBRElPOworCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SQURJT19TVEFUVVMgeworCVdMQU5fUkFESU8gSFdTdGF0dXM7CisJV0xBTl9SQURJTyBTV1N0YXR1czsKK30gV0xBTl9SQURJT19TVEFUVVM7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gMjAwNDEwMjEgMS4xLjgxLjEwMDAgeWJqaWFuZworLy8gYWRkIGZvciByYWRpbyBub3RpZmljYXRpb24KK3R5cGVkZWYKK3ZvaWQgKCpSQURJT19OT1RJRklDQVRJT05fSEFORExFUikoCisJdm9pZCAqRGF0YSwKKwl2b2lkICpSYWRpb1N0YXR1c0J1ZmZlciwKKwl1MzIgUmFkaW9TdGF0dXNCdWZmZXJMZW4KKwkpOworCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SQURJT19OT1RJRklDQVRJT04KK3sKKyAgICBSQURJT19OT1RJRklDQVRJT05fSEFORExFUiBSYWRpb0NoYW5nZUhhbmRsZXI7CisgICAgdm9pZCAqRGF0YTsKK30gV0xBTl9SQURJT19OT1RJRklDQVRJT047CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gMjAwNDExMDIgMS4xLjkxLjEwMDAgeWJqaWFuZworLy8gYWRkIGZvciBPSURfODAyXzExX0NVU1RfUkVHSU9OX0NBUEFCSUxJVElFUyBhbmQgT0lEXzgwMl8xMV9PSURfUkVHSU9OCit0eXBlZGVmIGVudW0gX1dMQU5fUkVHSU9OX0NPREUKK3sKKwlXTEFOX1JFR0lPTl9VTktOT1dOLAorCVdMQU5fUkVHSU9OX0VVUk9QRSwKKwlXTEFOX1JFR0lPTl9KQVBBTiwKKwlXTEFOX1JFR0lPTl9VU0EsCisJV0xBTl9SRUdJT05fRlJBTkNFLAorCVdMQU5fUkVHSU9OX1NQQUlOLAorCVdMQU5fUkVHSU9OX0lTUkFFTCwKKwlXTEFOX1JFR0lPTl9NQVgsIC8vIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZAorfSBXTEFOX1JFR0lPTl9DT0RFOworCisjZGVmaW5lIFJFR0lPTl9OQU1FX01BWF9MRU5HVEggICAyNTYKKwordHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkVHSU9OX0NIQU5ORUxTCit7CisJdTMyIExlbmd0aDsKKwl1MzIgTmFtZUxlbmd0aDsKKwl1OCBOYW1lW1JFR0lPTl9OQU1FX01BWF9MRU5HVEhdOworCVdMQU5fUkVHSU9OX0NPREUgQ29kZTsKKwl1MzIgRnJlcXVlbmN5WzFdOworfSBXTEFOX1JFR0lPTl9DSEFOTkVMUzsKKwordHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkVHSU9OX0NBUEFCSUxJVElFUworeworCXUzMiBOdW1iZXJPZkl0ZW1zOworCVdMQU5fUkVHSU9OX0NIQU5ORUxTIFJlZ2lvblsxXTsKK30gV0xBTl9SRUdJT05fQ0FQQUJJTElUSUVTOworCit0eXBlZGVmIHN0cnVjdCBfcmVnaW9uX25hbWVfbWFwIHsKKwlXTEFOX1JFR0lPTl9DT0RFIHJlZ2lvbjsKKwl1OCAqbmFtZTsKKwl1MzIgKmNoYW5uZWxzOworfSByZWdpb25fbmFtZV9tYXA7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBNQUMyU1RSKGEpIChhKVswXSwgKGEpWzFdLCAoYSlbMl0sIChhKVszXSwgKGEpWzRdLCAoYSlbNV0KKyNkZWZpbmUgTUFDU1RSICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIKKworLy8gVE9ETzogMDYyNyBrZXZpbgorI2RlZmluZSBNSUMyU1RSKGEpIChhKVswXSwgKGEpWzFdLCAoYSlbMl0sIChhKVszXSwgKGEpWzRdLCAoYSlbNV0sIChhKVs2XSwgKGEpWzddCisjZGVmaW5lIE1JQ1NUUiAiJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYIgorCisjZGVmaW5lIE1JQ0tFWTJTVFIoYSkgICBNSUMyU1RSKGEpCisjZGVmaW5lIE1JQ0tFWVNUUiAgICAgICBNSUNTVFIKKworCisjZW5kaWYgLyogX19HTF84MDIxMV9IX18gKi8KKy8qKiogZW5kIG9mIGZpbGUgKioqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMzVkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oCkBAIC0wLDAgKzEsNjc4IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBJT0NUTFMuSCAtCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgRGVmaW5lIHRoZSBJT0NUTCBjb2Rlcy4KKy8vCisvLyAgUmV2aXNpb24gaGlzdG9yeToKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpZm5kZWYgX0lPQ1RMU19ICisjZGVmaW5lIF9JT0NUTFNfSAorCisvLyBQRDQzIEtlZXAgaXQgLSBVc2VkIHdpdGggdGhlIFdpbjMzIGFwcGxpY2F0aW9uCisvLyAjaW5jbHVkZSA8d2luaW9jdGwuaD4KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gMjAwNDAxMDggQUREIHRoZSBmb2xsb3cgZm9yIHRlc3QKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgSU5GT1JNQVRJT05fTEVOR1RIIHNpemVvZih1bnNpZ25lZCBpbnQpCisKKyNkZWZpbmUgV0IzMl9JT0NUTF9JTkRFWCAgMHgwOTAwIC8vwq3Dl8KnxI/EvUjFpEvFucWwxb1lLy8KKworI2RlZmluZSBXYjMyX1JlZ2lzdGVyUmVhZAkJCUNUTF9DT0RFKAlcCisJCQlGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfUmVnaXN0ZXJXcml0ZQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfU2VuZFBhY2tldAkJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDIsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX1F1ZXJ5U2VuZFJlc3VsdAkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAzLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9TZXRGcmFnbWVudFRocmVzaG9sZAlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDQsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX1NldExpbmtTdGF0dXMJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfU2V0QnVsa0luCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA2LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9Mb29wYmFja1Rlc3QJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDcsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X0VFUHJvbVJlYWQJCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA4LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9FRVByb21Xcml0ZQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgOSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRmxhc2hSZWFkRGF0YQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTAsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X0ZsYXNoV3JpdGUJCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxMSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRmxhc2hXcml0ZUJ1cnN0CQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDEyLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9UeEJ1cnN0U3RhcnQJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDEzLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9UeEJ1cnN0U3RvcAkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTQsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X1R4QnVyc3RTdGF0dXMJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDE1LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIEZvciBJT0NUTCBpbnRlcmZhY2UKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIExJTktOQU1FX1NUUklORyAgICAgIlxcRG9zRGV2aWNlc1xcVzM1VU5EIgorI2RlZmluZSBOVERFVklDRV9TVFJJTkcgICAgICJcXERldmljZVxcVzM1VU5EIgorI2RlZmluZSBBUFBMSUNBVElPTl9MSU5LCSJcXFxcLlxcVzM1VU5EIgorCisjZGVmaW5lIFdCX0lPQ1RMX0lOREVYICAgICAgMHgwODAwCisjZGVmaW5lIFdCX0lPQ1RMX1RTX0lOREVYICAgV0JfSU9DVExfSU5ERVggKyA2MAorI2RlZmluZSBXQl9JT0NUTF9EVVRfSU5ERVggIFdCX0lPQ1RMX1RTX0lOREVYICsgNDAKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSU9DVExTIGRlZmluZWQgZm9yIERVVCAoRGV2aWNlIFVuZGVyIFRlc3QpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX0FERFJFU1MKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGRvdDExU3RhdGlvbklECisvLyBTZXQgIDogU2V0IHRoZSBkb3QxMVN0YXRpb25JRC4gRGVtbyBvbmx5LgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9NQUNfQUREUkVTUyAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEsICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTX0RFU0NSSVBUSU9OCisvLyBRdWVyeTogUmV0dXJuIHRoZSBpbmZvLiBvZiB0aGUgY3VycmVudCBjb25uZWN0ZWQgQlNTLgorLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU19ERVNDUklQVElPTiAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEUKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgdHJhbnNtaXNzaW9uIHJhdGUuCisvLyBTZXQgIDogU2V0IHRoZSB0cmFuc21pc3Npb24gcmF0ZSBvZiB0aGUgVHggcGFja2V0cy4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURSAgICAgICAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9DVVJSRU5UX1NUQV9TVEFURQorLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCBTVEEgc3RhdGUuIChXQl9TVEFTVEFURSB0eXBlKQorLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0NVUlJFTlRfU1RBX1NUQVRFICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vLy8vLy8vLy8vIDEwLzMxLzAyJyBBZGRlZCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9TVEFSVF9JQlNTX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFN0YXJ0IGEgbmV3IElCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfU1RBUlRfSUJTU19SRVFVRVNUICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDUsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9KT0lOX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFN5bmNocm9uaXplIHdpdGggdGhlIHNlbGVjdGVkIEJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9KT0lOX1JFUVVFU1QgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgNiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FVVEhFTl9SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBBdXRoZW50aWNhdGUgd2l0aCB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FVVEhFTl9SRVFVRVNUICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA3LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfREVBVVRIRU5fUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogRGVBdXRoZW50aWNhdGUgd2l0aGUgdGhlIEJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9ERUFVVEhFTl9SRVFVRVNUICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgOCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FTU09DX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IEFzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FTU09DX1JFUVVFU1QgICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA5LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVBU1NPQ19SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBSZUFzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1JFQVNTT0NfUkVRVUVTVCAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9ESVNBU1NPQ19SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBEaXNBc3NvY2lhdGUgd2l0aGUgdGhlIEJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9ESVNBU1NPQ19SRVFVRVNUICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTEsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0ZSQUdfVEhSRVNIT0xECisvLyBRdWVyeTogUmV0dXJuIHRoZSBkb3QxMUZyYWdtZW50VGhyZXNob2xkCisvLyBTZXQgIDogU2V0IHRoZSBkb3QxMUZyYWdtZW50VGhyZXNob2xkCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0ZSQUdfVEhSRVNIT0xEICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUlRTX1RIUkVTSE9MRAorLy8gUXVlcnk6IFJldHVybiB0aGUgZG90MTFSVFNUaHJlc2hvbGQKKy8vIFNldCAgOiBTZXQgdGhlIGRvdDExUlRTVGhyZXNvbGQKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUlRTX1RIUkVTSE9MRCAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZTU9ERQorLy8gUXVlcnk6IEdldCB0aGUgV0VQIGtleSBtb2RlLgorLy8gU2V0ICA6IFNldCB0aGUgV0VQIGtleSBtb2RlOiBkaXNhYmxlLzY0IGJpdHMvMTI4IGJpdHMKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfV0VQX0tFWU1PREUgICAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE0LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZVkFMVUUKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IGZpbGwgaW4gdGhlIFdFUCBrZXkgdmFsdWUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfV0VQX0tFWVZBTFVFICAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE1LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9SRVNFVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogUmVzZXQgUy9XIGFuZCBIL1cKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVTRVQgICAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE2LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9QT1dFUl9TQVZFCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBTZXQgUG93ZXIgU2F2ZSBNb2RlCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1BPV0VSX1NBVkUgICAgQ1RMX0NPREUoICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxNywgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVF9TQ0FOCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9CU1NJRF9MSVNUX1NDQU4gQ1RMX0NPREUoICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTgsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1QKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIEJTUyBpbmZvIG9mIEJTU3MgaW4gdGhlIGxhc3Qgc2Nhbm5pbmcgcHJvY2VzcworLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1QgICAgQ1RMX0NPREUoICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxOSwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfU1RBVElTVElDUworLy8gUXVlcnk6IFJldHVybiB0aGUgc3RhdGlzdGljcyBvZiBUeC9SeC4KKy8vIFNldCAgOiBOb25lLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TVEFUSVNUSUNTICAgIENUTF9DT0RFKCAgICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjAsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FDQ0VQVF9CRUFDT04KKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgbW9kZSB0byBhY2NlcHQgYmVhY29uIG9yIG5vdC4KKy8vIFNldCAgOiBFbmFibGUgb3IgZGlzYWJsZSBhbGxvd2luZyB0aGUgSFctTUFDIHRvIHBhc3MgdGhlIGJlYWNvbiB0byB0aGUgU1ctTUFDCisvLyBBcmd1bWVudHM6IHVuc2lnbmVkIGNoYXIKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQUNDRVBUX0JFQUNPTiAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIxLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9ST0FNSU5HCisvLyBRdWVyeTogUmV0dXJuIHRoZSByb2FtaW5nIGZ1bmN0aW9uIHN0YXR1cworLy8gU2V0ICA6IEVuYWJsZS9EaXNhYmxlIHRoZSByb2FtaW5nIGZ1bmN0aW9uLgorI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1JPQU1JTkcgICAgICAgIENUTF9DT0RFKCAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPCisvLyBRdWVyeTogUmV0dXJuIHRoZSBEVE8oRGF0YSBUaHJvdWdocHV0IE9wdGltaXphdGlvbikKKy8vICAgICAgICBmdW5jdGlvbiBzdGF0dXMgKFRSVUUgb3IgRkFMU0UpCisvLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIERUTyBmdW5jdGlvbi4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPICAgICAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9BTlRFTk5BX0RJVkVSU0lUWQorLy8gUXVlcnk6IFJldHVybiB0aGUgYW50ZW5uYSBkaXZlcnNpdHkgc3RhdHVzLiAoVFJVRS9PTiBvciBGQUxTRS9PRkYpCisvLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIGFudGVubmEgZGl2ZXJzaXR5LgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BTlRFTk5BX0RJVkVSU0lUWSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjQsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLy0tLS0tLS0tLS0tLS0tIG5ldyBhZGRlZCBmb3IgYStiK2cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19PUEVSQVRJT05fTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgTUFDIG9wZXJhdGlvbiBtb2RlLiAoTU9ERV84MDJfMTFfQkcsIE1PREVfODAyXzExX0EsCisvLwkJCSBNT0RFXzgwMl8xMV9BQkcsIE1PREVfODAyXzExX0JHX0lCU1MpCisvLyBTZXQgIDogU2V0IHRoZSBNQUMgb3BlcmF0aW9uIG1vZGUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19PUEVSQVRJT05fTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjUsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfUkVERUZJTkVECisvLyBRdWVyeTogUmV0dXJuIHRoZSBjdXJyZW50IHR4IHJhdGUgd2hpY2ggZm9sbG93cyB0aGUgZGVmaW5pdGlvbiBpbiBzcGVjLiAoZm9yCisvLwkJCWV4YW1wbGUsIDUuNU0gPT4gMHgwYikKKy8vIFNldCAgOiBOb25lCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfUkVERUZJTkVEIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUFJFQU1CTEVfTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgcHJlYW1ibGUgbW9kZS4gKGF1dG8gb3IgbG9uZykKKy8vIFNldCAgOiBTZXQgdGhlIHByZWFtYmxlIG1vZGUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1BSRUFNQkxFX01PREUgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI3LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9TTE9UX1RJTUVfTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgc2xvdCB0aW1lIG1vZGUuIChhdXRvIG9yIGxvbmcpCisvLyBTZXQgIDogU2V0IHRoZSBzbG90IHRpbWUgbW9kZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfU0xPVF9USU1FX01PREUgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI4LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMKKy8vIFF1ZXJ5OgorLy8gU2V0ICA6IE5PTkUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI5LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9UWF9SQVRFX01PREUKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHR4IHJhdGUgbW9kZS4gKFJBVEVfQVVUTywgUkFURV8xTSwgLi4sIFJBVEVfNTRNLCBSQVRFX01BWCkKKy8vIFNldCAgOiBTZXQgdGhlIHR4IHJhdGUgbW9kZS4gIChSQVRFX0FVVE8sIFJBVEVfMU0sIC4uLCBSQVRFXzU0TSwgUkFURV9NQVgpCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzAsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0RUT19QQVJBCisvLyBRdWVyeTogUmV0dXJuIHRoZSBEVE8gcGFyYW1ldGVycworLy8gU2V0ICA6IFNldCB0aGUgRFRPIHBhcmFtZXRlcnMKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPX1BBUkEgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMxLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9FVkVOVF9MT0cKKy8vIFF1ZXJ5OiBSZXR1cm4gZXZlbnQgbG9nCisvLyBTZXQgIDogUmVzZXQgZXZlbnQgbG9nCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0VWRU5UX0xPRyBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzIsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0NXTUlOCisvLyBRdWVyeTogTk9ORShJdCB3aWxsIGJlIG9idGFpbmVkIGJ5IElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMpCisvLyBTZXQgIDogU2V0IENXTWluIHZhbHVlCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0NXTUlOIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMywgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNQVgKKy8vIFF1ZXJ5OiBOT05FKEl0IHdpbGwgYmUgb2J0YWluZWQgYnkgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUykKKy8vIFNldCAgOiBTZXQgQ1dNYXggdmFsdWUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNQVggQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDM0LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIElPQ1RMcyBmb3IgVGVzdGluZworCisvLyBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX0NYWF9SRUcKKy8vIFF1ZXJ5OiBOb25lCisvLyBTZXQgIDogV3JpdGUgdGhlIHZhbHVlIHRvIG9uZSBvZiBDeHggcmVnaXN0ZXIuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX0NYWF9SRUcgIENUTF9DT0RFKCAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfQ1hYX1JFRworLy8gUXVlcnk6IFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIEN4eCByZWdpc3Rlci4KKy8vIFNldCAgOiBXcml0ZSB0aGUgcmVnIG5vLiAoMHgwMCwgMHgwNCwgMHgwOCBldGMpCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfR0VUX0NYWF9SRUcgIENUTF9DT0RFKCAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfRFhYX1JFRworLy8gUXVlcnk6IE5vbmUKKy8vIFNldCAgOiBXcml0ZSB0aGUgdmFsdWUgdG8gb25lIG9mIER4eCByZWdpc3Rlci4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfRFhYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX1RTX0dFVF9EWFhfUkVHCisvLyBRdWVyeTogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgRHh4IHJlZ2lzdGVyLgorLy8gU2V0ICA6IFdyaXRlIHRoZSByZWcgbm8uICgweDAwLCAweDA0LCAweDA4IGV0YykKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfRFhYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFtUU10KKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfVFhfUkFURSAgICAgICAgICAgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19DVVJSRU5UX0NIQU5ORUwgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0VOQUJMRV9TRVFOTyAgICAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgNiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRU5BTEJFX0FDS0VEUEFDS0VUICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19JTkhJQklUX0NSQyAgICAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDgsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JFU0VUX1JDVl9DT1VOVEVSICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgOSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX1RYX1RSSUdHRVIgICAgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19GQUlMRURfVFhfQ09VTlQgICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDExLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIFtUUzFdCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19UWF9QT1dFUiAgICAgICAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEyLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01PREVfRU5BQkxFCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxMywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19NT0RFX0RJU0FCTEUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0FOVEVOTkEJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19BREFQVEVSX0lORk8JCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01BQ19BRERSRVNTCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxNywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19CU1NJRAkJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JGX1BBUkFNRVRFUgkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTksICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRklMVEVSCQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjAsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQ0FMSUJSQVRJT04JCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDIxLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0JTU19NT0RFCQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX1NTSUQJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19JQlNTX0NIQU5ORUwJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIHNldC9xdWVyeSB0aGUgc2xvdCB0aW1lIHZhbHVlKHNob3J0IG9yIGxvbmcgc2xvdCB0aW1lKQorI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0xPVF9USU1FCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TTE9UX1RJTUUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JYX1NUQVRJU1RJQ1MJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2VuZGlmICAvLyAjaWZuZGVmIF9JT0NUTFNfSAorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyYTg2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L2NvbW1vbi5oCkBAIC0wLDAgKzEsMTI4IEBACisvLworLy8gY29tbW9uLmgKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIE9TIGRlcGVuZGFudCBkZWZpbml0aW9uIGFuZCBmdW5jdGlvbi4KKy8vIEV2ZXJ5IE9TIGhhcyB0aGlzIGZpbGUgaW5kaXZpZHVhbC4KKy8vCisKKyNkZWZpbmUgRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIF9BICkKKworI2lmbmRlZiBDT01NT05fREVGCisjZGVmaW5lIENPTU1PTl9ERUYKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gLy9uZWVkIGZvciBrZXJuZWwgYWxlcnQKKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPiAvL21lbW9yeSBhbGxvY2F0ZQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPi8vbmVlZCBmb3IgaW5pdCBhbmQgZXhpdCBtb2R1bGVzIG1hcmNvCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisKKy8vI2RlZmluZSBERUJVR19FTkFCTEVEICAxCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tbW9uIHR5cGUgZGVmaW5pdGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIElHTk9SRSAgICAgIDIKKyNkZWZpbmUJU1VDQ0VTUyAgICAgMQorI2RlZmluZQlGQUlMVVJFICAgICAwCisKKworI2lmbmRlZiB0cnVlCisjZGVmaW5lIHRydWUgICAgICAgIDEKKyNlbmRpZgorCisjaWZuZGVmIGZhbHNlCisjZGVmaW5lIGZhbHNlICAgICAgIDAKKyNlbmRpZgorCisvLyBQRDQzIDIwMDIxMTA4CisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAgICAgICAgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX01FRElBX0NPTk5FQ1QgMQorI2RlZmluZSBTVEFUVVNfTUVESUFfRElTQ09OTkVDVCAwCisKKyNpZm5kZWYgQklUCisjZGVmaW5lIEJJVCh4KSAgICAgICAgICAgICAgICAgICgxIDw8ICh4KSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB1cmIgKiBQVVJCOworCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tbW9uIGZ1bmN0aW9uIGRlZmluaXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgYWJzCisjZGVmaW5lIGFicyhfVCkJCQkJCQkJKChfVCkgPCAwID8gLV9UIDogX1QpCisjZW5kaWYKKyNkZWZpbmUgREVCVUdfRU5BQkxFRAorI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgorI2lmZGVmIERFQlVHX0VOQUJMRUQKKyNkZWZpbmUgV0JERUJVRyggX00gKQlwcmludGsgX00KKyNlbHNlCisjZGVmaW5lIFdCREVCVUcoIF9NICkJMAorI2VuZGlmCisKKyNkZWZpbmUgT1NfRElTQ09OTkVDVEVECTAKKyNkZWZpbmUgT1NfQ09OTkVDVEVECTEKKworCisjZGVmaW5lIE9TX0VWRU5UX0lORElDQVRFKCBfQSwgX0IsIF9GICkKKyNkZWZpbmUgT1NfUE1LSURfU1RBVFVTX0VWRU5UKCBfQSApCisKKworLyogVWZmLCBubywgbG9uZ3MgYXJlIG5vdCBhdG9taWMgb24gYWxsIGFyY2hpdGVjdHVyZXMgTGludXgKKyAqIHN1cHBvcnRzLiBUaGlzIHNob3VsZCByZWFsbHkgdXNlIGF0b21pY190ICovCisKKyNkZWZpbmUgT1NfQVRPTUlDCQkJdTMyCisjZGVmaW5lIE9TX0FUT01JQ19SRUFEKCBfQSwgX1YgKQlfVgorI2RlZmluZSBPU19BVE9NSUNfSU5DKCBfQSwgX1YgKQkJRW5jYXBBdG9taWNJbmMoIF9BLCAodm9pZCopX1YgKQorI2RlZmluZSBPU19BVE9NSUNfREVDKCBfQSwgX1YgKQkJRW5jYXBBdG9taWNEZWMoIF9BLCAodm9pZCopX1YgKQorI2RlZmluZSBPU19NRU1PUllfQ0xFQVIoIF9BLCBfUyApCW1lbXNldCggKHU4ICopX0EsMCxfUykKKyNkZWZpbmUgT1NfTUVNT1JZX0NPTVBBUkUoIF9BLCBfQiwgX1MgKQkobWVtY21wKF9BLF9CLF9TKT8gMCA6IDEpIC8vIERlZmluaXRpb24gaXMgcmV2ZXJzZSB3aXRoIE5kaXMgMTogdGhlIHNhbWUgMDogZGlmZmVyZW50CisKKyNkZWZpbmUgT1NfVElNRVIJc3RydWN0IHRpbWVyX2xpc3QKKyNkZWZpbmUgT1NfVElNRVJfSU5JVElBTCggX1QsIF9GLCBfUCApCQkJXAorewkJCQkJCQlcCisJaW5pdF90aW1lciggX1QgKTsJCQkJXAorCShfVCktPmZ1bmN0aW9uID0gKHZvaWQgKilfRiMjXzFhOwkJXAorCShfVCktPmRhdGEgPSAodW5zaWduZWQgbG9uZylfUDsJCQlcCit9CisKKy8vIF9TIDogTWlsbGlzZWNvbmQKKy8vIDIwMDYwNDIwIEF0IGxlYXN0IDEgbGFyZ2UgdGhhbiBqaWZmaWVzCisjZGVmaW5lIE9TX1RJTUVSX1NFVCggX1QsIF9TICkJCQkJCVwKK3sJCQkJCQkJCVwKKwkoX1QpLT5leHBpcmVzID0gamlmZmllcyArICgoX1MqSForOTk5KS8xMDAwKTtcCisJYWRkX3RpbWVyKCBfVCApOwkJCQkJXAorfQorI2RlZmluZSBPU19USU1FUl9DQU5DRUwoIF9ULCBfQiApCQlkZWxfdGltZXJfc3luYyggX1QgKQorI2RlZmluZSBPU19USU1FUl9HRVRfU1lTX1RJTUUoIF9UICkJCSgqX1Q9amlmZmllcykKKworCisjZW5kaWYgLy8gQ09NTU9OX0RFRgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC9zeXNkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3N5c2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmQ2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC9zeXNkZWYuaApAQCAtMCwwICsxLDczIEBACisKKworLy8KKy8vIFdpbmJvbmQgV0xBTiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBkZWZpbmVzCisvLworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ3VycmVudCBkaXJlY3RvcnkgaXMgTGludXgKKy8vIFRoZSBkZWZpbml0aW9uIFdCX0xJTlVYIGlzIGEga2V5d29yZCBmb3IgdGhpcyBPUworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgU1lTX0RFRl9ICisjZGVmaW5lIFNZU19ERUZfSAorI2RlZmluZSBXQl9MSU5VWAorI2RlZmluZSBXQl9MSU5VWF9XUEFfUFNLCisKKworLy8jZGVmaW5lIF9JQlNTX0JFQUNPTl9TRVFfU1RJQ0tfCisjZGVmaW5lIF9VU0VfRkFMTEJBQ0tfUkFURV8KKy8vI2RlZmluZSBBTlRESVZfREVGQVVMVF9PTgorCisjZGVmaW5lIF9XUEEyXwkvLyAyMDA2MTEyMiBJdCdzIG5lZWRlZCBmb3IgY3VycmVudCBMaW51eCBkcml2ZXIKKworCisjaWZuZGVmIF9XUEFfUFNLX0RFQlVHCisjdW5kZWYgIF9XUEFfUFNLX0RFQlVHCisjZW5kaWYKKworLy8gZGVidWcgcHJpbnQgb3B0aW9ucywgbWFyayB3aGF0IGRlYnVnIHlvdSBkb24ndCBuZWVkCisKKyNpZmRlZiBGVUxMX0RFQlVHCisjZGVmaW5lIF9QRV9TVEFURV9EVU1QXworI2RlZmluZSBfUEVfVFhfRFVNUF8KKyNkZWZpbmUgX1BFX1JYX0RVTVBfCisjZGVmaW5lIF9QRV9PSURfRFVNUF8KKyNkZWZpbmUgX1BFX0RUT19EVU1QXworI2RlZmluZSBfUEVfUkVHX0RVTVBfCisjZGVmaW5lIF9QRV9VU0JfSU5JX0RVTVBfCisjZW5kaWYKKworCisKKyNpbmNsdWRlICJjb21tb24uaCIJLy8gSW5kaXZpZHVhbCBmaWxlIGRlcGVuZHMgb24gT1MKKworI2luY2x1ZGUgIi4uL3diMzVfdmVyLmgiCisjaW5jbHVkZSAiLi4vbWFjX3N0cnVjdHVyZXMuaCIKKyNpbmNsdWRlICIuLi9kc190a2lwLmgiCisjaW5jbHVkZSAiLi4vbG9jYWxwYXJhLmgiCisjaW5jbHVkZSAiLi4vc21lX3MuaCIKKyNpbmNsdWRlICIuLi9zY2FuX3MuaCIKKyNpbmNsdWRlICIuLi9tZHNfcy5oIgorI2luY2x1ZGUgIi4uL21sbWVfcy5oIgorI2luY2x1ZGUgIi4uL2Jzc2RzY3B0LmgiCisjaW5jbHVkZSAiLi4vc21lX2FwaS5oIgorI2luY2x1ZGUgIi4uL2dsXzgwMjExLmgiCisjaW5jbHVkZSAiLi4vbXRvLmgiCisjaW5jbHVkZSAiLi4vd2JsaW51eF9zLmgiCisjaW5jbHVkZSAiLi4vd2JoYWxfcy5oIgorCisKKyNpbmNsdWRlICIuLi9hZGFwdGVyLmgiCisKKyNpbmNsdWRlICIuLi9tbG1lX21pYi5oIgorI2luY2x1ZGUgIi4uL21kc19mLmgiCisjaW5jbHVkZSAiLi4vYnNzX2YuaCIKKyNpbmNsdWRlICIuLi9tbG1ldHhyeF9mLmgiCisjaW5jbHVkZSAiLi4vbXRvX2YuaCIKKyNpbmNsdWRlICIuLi93YmhhbF9mLmgiCisjaW5jbHVkZSAiLi4vd2JsaW51eF9mLmgiCisvLyBLZXJuZWwgVGltZXIgcmVzb2x1dGlvbiwgTkRJUyBpcyAxMG1zLCAxMDAwMHVzCisjZGVmaW5lIE1JTl9USU1FT1VUX1ZBTAkoMTApIC8vbXMKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmI2ZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZy5jCkBAIC0wLDAgKzEsNzQ0IEBACisjaW5jbHVkZSAic3lzZGVmLmgiCisKK2V4dGVybiB2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpOworCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAorLy8gUmVnaXN0ZXJObyA6IHN0YXJ0IGJhc2UKKy8vIHBSZWdpc3RlckRhdGEgOiBkYXRhIHBvaW50CisvLyBOdW1iZXJPZkRhdGEgOiBudW1iZXIgb2YgcmVnaXN0ZXIgZGF0YQorLy8gRmxhZyA6IEFVVE9fSU5DUkVNRU5UIC0gUmVnaXN0ZXJObyB3aWxsIGF1dG8gaW5jcmVtZW50IDQKKy8vCQkgIE5PX0lOQ1JFTUVOVCAtIEZ1bmN0aW9uIHdpbGwgd3JpdGUgZGF0YSBpbnRvIHRoZSBzYW1lIHJlZ2lzdGVyCit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX0J1cnN0V3JpdGUocGh3X2RhdGFfdCBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgdTMyICogcFJlZ2lzdGVyRGF0YSwgdTggTnVtYmVyT2ZEYXRhLCB1OCBGbGFnKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFVSQgkJcFVyYiA9IE5VTEw7CisJUFJFR19RVUVVRQlwUmVnUXVldWUgPSBOVUxMOworCXUxNgkJVXJiU2l6ZTsKKwlzdHJ1Y3QgICAgICB1c2JfY3RybHJlcXVlc3QgKmRyOworCXUxNgkJaSwgRGF0YVNpemUgPSBOdW1iZXJPZkRhdGEqNDsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gVHJ5aW5nIHRvIHVzZSBidXJzdCB3cml0ZSBmdW5jdGlvbiBpZiB1c2UgbmV3IGhhcmR3YXJlCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgRGF0YVNpemUgKyBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCk7CisJT1NfTUVNT1JZX0FMTE9DKCAodm9pZCogKikmcFJlZ1F1ZXVlLCBVcmJTaXplICk7CisJcFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYoIHBVcmIgJiYgcFJlZ1F1ZXVlICkgeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDI7Ly8gYnVyc3Qgd3JpdGUgcmVnaXN0ZXIKKwkJcFJlZ1F1ZXVlLT5JTkRFWCA9IFJlZ2lzdGVyTm87CisJCXBSZWdRdWV1ZS0+cEJ1ZmZlciA9ICh1MzIgKikoKHU4ICopcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQltZW1jcHkoIHBSZWdRdWV1ZS0+cEJ1ZmZlciwgcFJlZ2lzdGVyRGF0YSwgRGF0YVNpemUgKTsKKwkJLy90aGUgZnVuY3Rpb24gZm9yIHJldmVyc2luZyByZWdpc3RlciBkYXRhIGZyb20gbGl0dGxlIGVuZGlhbiB0byBiaWcgZW5kaWFuCisJCWZvciggaT0wOyBpPE51bWJlck9mRGF0YSA7IGkrKyApCisJCQlwUmVnUXVldWUtPnBCdWZmZXJbaV0gPSBjcHVfdG9fbGUzMiggcFJlZ1F1ZXVlLT5wQnVmZmVyW2ldICk7CisKKwkJZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSgodTggKilwUmVnUXVldWUgKyBzaXplb2YoUkVHX1FVRVVFKSArIERhdGFTaXplKTsKKwkJZHItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJZHItPmJSZXF1ZXN0ID0gMHgwNDsgLy8gVVNCIG9yIHZlbmRvci1kZWZpbmVkIHJlcXVlc3QgY29kZSwgYnVyc3QgbW9kZQorCQlkci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoIEZsYWcgKTsgLy8gMDogUmVnaXN0ZXIgbnVtYmVyIGF1dG8taW5jcmVtZW50LCAxOiBObyBhdXRvIGluY3JlbWVudAorCQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIFJlZ2lzdGVyTm8gKTsKKwkJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNiggRGF0YVNpemUgKTsKKwkJcFJlZ1F1ZXVlLT5OZXh0ID0gTlVMTDsKKwkJcFJlZ1F1ZXVlLT5wVXNiUmVxID0gZHI7CisJCXBSZWdRdWV1ZS0+cFVyYiA9IHBVcmI7CisKKwkJc3Bpbl9sb2NrX2lycSggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKwkJaWYgKHBXYjM1UmVnLT5wUmVnRmlyc3QgPT0gTlVMTCkKKwkJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwUmVnUXVldWU7CisJCWVsc2UKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdC0+TmV4dCA9IHBSZWdRdWV1ZTsKKwkJcFdiMzVSZWctPnBSZWdMYXN0ID0gcFJlZ1F1ZXVlOworCisJCXNwaW5fdW5sb2NrX2lycSggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQkvLyBTdGFydCBFUDBWTQorCQlXYjM1UmVnX0VQMFZNX3N0YXJ0KHBId0RhdGEpOworCisJCXJldHVybiBUUlVFOworCX0gZWxzZSB7CisJCWlmIChwVXJiKQorCQkJdXNiX2ZyZWVfdXJiKHBVcmIpOworCQlpZiAocFJlZ1F1ZXVlKQorCQkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKyAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZAorV2IzNVJlZ19VcGRhdGUocGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXN3aXRjaCAoUmVnaXN0ZXJObykgeworCWNhc2UgMHgzYjA6IHBXYjM1UmVnLT5VMUIwID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDNiYzogcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDQwMDogcFdiMzVSZWctPkQwMF9EbWFDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgwMDogcFdiMzVSZWctPk0wMF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgwNDogcFdiMzVSZWctPk0wNF9NdWx0aWNhc3RBZGRyZXNzMSA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4MDg6IHBXYjM1UmVnLT5NMDhfTXVsdGljYXN0QWRkcmVzczIgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODI0OiBwV2IzNVJlZy0+TTI0X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODI4OiBwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODJjOiBwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODM4OiBwV2IzNVJlZy0+TTM4X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODQwOiBwV2IzNVJlZy0+TTQwX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODQ0OiBwV2IzNVJlZy0+TTQ0X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODQ4OiBwV2IzNVJlZy0+TTQ4X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODRjOiBwV2IzNVJlZy0+TTRDX01hY1N0YXR1cyA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4NjA6IHBXYjM1UmVnLT5NNjBfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4Njg6IHBXYjM1UmVnLT5NNjhfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4NzA6IHBXYjM1UmVnLT5NNzBfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4NzQ6IHBXYjM1UmVnLT5NNzRfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4Nzg6IHBXYjM1UmVnLT5NNzhfRVJQSW5mb3JtYXRpb24gPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODdDOiBwV2IzNVJlZy0+TTdDX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODgwOiBwV2IzNVJlZy0+TTgwX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODg0OiBwV2IzNVJlZy0+TTg0X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODg4OiBwV2IzNVJlZy0+TTg4X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODk4OiBwV2IzNVJlZy0+TTk4X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTAwYzogcFdiMzVSZWctPkJCMEMgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTAyYzogcFdiMzVSZWctPkJCMkMgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTAzMDogcFdiMzVSZWctPkJCMzAgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTAzYzogcFdiMzVSZWctPkJCM0MgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTA0ODogcFdiMzVSZWctPkJCNDggPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTA0YzogcFdiMzVSZWctPkJCNEMgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTA1MDogcFdiMzVSZWctPkJCNTAgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTA1NDogcFdiMzVSZWctPkJCNTQgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTA1ODogcFdiMzVSZWctPkJCNTggPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTA1YzogcFdiMzVSZWctPkJCNUMgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4MTA2MDogcFdiMzVSZWctPkJCNjAgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwl9Cit9CisKKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0Cit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX1dyaXRlU3luYyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJaW50IHJldCA9IC0xOworCisJLy8gTW9kdWxlIHNodXRkb3duCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm4gRkFMU0U7CisKKwlSZWdpc3RlclZhbHVlID0gY3B1X3RvX2xlMzIoUmVnaXN0ZXJWYWx1ZSk7CisKKwkvLyB1cGRhdGUgdGhlIHJlZ2lzdGVyIGJ5IHNlbmQgdXNiIG1lc3NhZ2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlwV2IzNVJlZy0+U3luY0lvUGF1c2UgPSAxOworCisJLy8gMjAwNjA3MTcuNSBXYWl0IHVudGlsIEVQMFZNIHN0b3AKKwl3aGlsZSAocFdiMzVSZWctPkVQMHZtX3N0YXRlICE9IFZNX1NUT1ApCisJCU9TX1NMRUVQKDEwMDAwKTsKKworCS8vIFN5bmMgSW9DYWxsRHJpdmVyCisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fUlVOTklORzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlKCBwSHdEYXRhLT5XYlVzYi51ZGV2LCAwICksCisJCQkgICAgICAgMHgwMywgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfT1VULAorCQkJICAgICAgIDB4MCxSZWdpc3Rlck5vLCAmUmVnaXN0ZXJWYWx1ZSwgNCwgSFoqMTAwICk7CisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKwlwV2IzNVJlZy0+U3luY0lvUGF1c2UgPSAwOworCisJV2IzNVJlZ19FUDBWTV9zdGFydChwSHdEYXRhKTsKKworCWlmIChyZXQgPCAwKSB7CisJCSNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCVdCREVCVUcoKCJFUDAgV3JpdGUgcmVnaXN0ZXIgdXNiIG1lc3NhZ2Ugc2VuZGluZyBlcnJvclxuIikpOworCQkjZW5kaWYKKworCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7IC8vIDIwMDYwNzA0LjIKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXJldHVybiBUUlVFOworfQorCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAordW5zaWduZWQgY2hhcgorV2IzNVJlZ19Xcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJUFVSQgkJcFVyYiA9IE5VTEw7CisJUFJFR19RVUVVRQlwUmVnUXVldWUgPSBOVUxMOworCXUxNgkJVXJiU2l6ZTsKKworCisJLy8gTW9kdWxlIHNodXRkb3duCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyB1cGRhdGUgdGhlIHJlZ2lzdGVyIGJ5IHNlbmQgdXJiIHJlcXVlc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVcmJTaXplID0gc2l6ZW9mKFJFR19RVUVVRSkgKyBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCk7CisJT1NfTUVNT1JZX0FMTE9DKCAodm9pZCogKikmcFJlZ1F1ZXVlLCBVcmJTaXplICk7CisJcFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYgKHBVcmIgJiYgcFJlZ1F1ZXVlKSB7CisJCXBSZWdRdWV1ZS0+RElSRUNUID0gMTsvLyBidXJzdCB3cml0ZSByZWdpc3RlcgorCQlwUmVnUXVldWUtPklOREVYID0gUmVnaXN0ZXJObzsKKwkJcFJlZ1F1ZXVlLT5WQUxVRSA9IGNwdV90b19sZTMyKFJlZ2lzdGVyVmFsdWUpOworCQlwUmVnUXVldWUtPlJFU0VSVkVEX1ZBTElEID0gRkFMU0U7CisJCWRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikoKHU4ICopcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQlkci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfVkVORE9SfFVTQl9ESVJfT1VUIHxVU0JfUkVDSVBfREVWSUNFOworCQlkci0+YlJlcXVlc3QgPSAweDAzOyAvLyBVU0Igb3IgdmVuZG9yLWRlZmluZWQgcmVxdWVzdCBjb2RlLCBidXJzdCBtb2RlCisJCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNigweDApOworCQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoUmVnaXN0ZXJObyk7CisJCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoNCk7CisKKwkJLy8gRW50ZXIgdGhlIHNlbmRpbmcgcXVldWUKKwkJcFJlZ1F1ZXVlLT5OZXh0ID0gTlVMTDsKKwkJcFJlZ1F1ZXVlLT5wVXNiUmVxID0gZHI7CisJCXBSZWdRdWV1ZS0+cFVyYiA9IHBVcmI7CisKKwkJc3Bpbl9sb2NrX2lycSgmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiAocFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMKQorCQkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBSZWdRdWV1ZTsKKwkJZWxzZQorCQkJcFdiMzVSZWctPnBSZWdMYXN0LT5OZXh0ID0gcFJlZ1F1ZXVlOworCQlwV2IzNVJlZy0+cFJlZ0xhc3QgPSBwUmVnUXVldWU7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJCS8vIFN0YXJ0IEVQMFZNCisJCVdiMzVSZWdfRVAwVk1fc3RhcnQocEh3RGF0YSk7CisKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIocFVyYik7CisJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKKy8vVGhpcyBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCBhIHVzZXIgZGVmaW5lZCB2YWx1ZS4gV2hlbiBpdCBjb21wbGV0ZXMsCisvL3RoaXMgdmFsdWUgaXMgdXNlZnVsLiBGb3IgZXhhbXBsZSwgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwgd2lsbCB1c2UgaXQuCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAordW5zaWduZWQgY2hhcgorV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKCBwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCB1MzIgUmVnaXN0ZXJWYWx1ZSwKKwkJCQlzOCAqcFZhbHVlLCBzOCBMZW4pCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkcjsKKwlQVVJCCQlwVXJiID0gTlVMTDsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZSA9IE5VTEw7CisJdTE2CQlVcmJTaXplOworCisJLy8gTW9kdWxlIHNodXRkb3duCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyB1cGRhdGUgdGhlIHJlZ2lzdGVyIGJ5IHNlbmQgdXJiIHJlcXVlc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVcmJTaXplID0gc2l6ZW9mKFJFR19RVUVVRSkgKyBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCk7CisJT1NfTUVNT1JZX0FMTE9DKCh2b2lkKiAqKSAmcFJlZ1F1ZXVlLCBVcmJTaXplICk7CisJcFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYgKHBVcmIgJiYgcFJlZ1F1ZXVlKSB7CisJCXBSZWdRdWV1ZS0+RElSRUNUID0gMTsvLyBidXJzdCB3cml0ZSByZWdpc3RlcgorCQlwUmVnUXVldWUtPklOREVYID0gUmVnaXN0ZXJObzsKKwkJcFJlZ1F1ZXVlLT5WQUxVRSA9IGNwdV90b19sZTMyKFJlZ2lzdGVyVmFsdWUpOworCQkvL05PVEUgOiBVc2VycyBtdXN0IGd1YXJhbnRlZSB0aGUgc2l6ZSBvZiB2YWx1ZSB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlciBzaXplLgorCQltZW1jcHkocFJlZ1F1ZXVlLT5SRVNFUlZFRCwgcFZhbHVlLCBMZW4pOworCQlwUmVnUXVldWUtPlJFU0VSVkVEX1ZBTElEID0gVFJVRTsKKwkJZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSgodTggKilwUmVnUXVldWUgKyBzaXplb2YoUkVHX1FVRVVFKSk7CisJCWRyLT5iUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9WRU5ET1J8VVNCX0RJUl9PVVQgfFVTQl9SRUNJUF9ERVZJQ0U7CisJCWRyLT5iUmVxdWVzdCA9IDB4MDM7IC8vIFVTQiBvciB2ZW5kb3ItZGVmaW5lZCByZXF1ZXN0IGNvZGUsIGJ1cnN0IG1vZGUKKwkJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MCk7CisJCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihSZWdpc3Rlck5vKTsKKwkJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNig0KTsKKworCQkvLyBFbnRlciB0aGUgc2VuZGluZyBxdWV1ZQorCQlwUmVnUXVldWUtPk5leHQgPSBOVUxMOworCQlwUmVnUXVldWUtPnBVc2JSZXEgPSBkcjsKKwkJcFJlZ1F1ZXVlLT5wVXJiID0gcFVyYjsKKwkJc3Bpbl9sb2NrX2lycSAoJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKwkJaWYoIHBXYjM1UmVnLT5wUmVnRmlyc3QgPT0gTlVMTCApCisJCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFJlZ1F1ZXVlOworCQllbHNlCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QtPk5leHQgPSBwUmVnUXVldWU7CisJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IHBSZWdRdWV1ZTsKKworCQlzcGluX3VubG9ja19pcnEgKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJCS8vIFN0YXJ0IEVQMFZNCisJCVdiMzVSZWdfRVAwVk1fc3RhcnQocEh3RGF0YSk7CisJCXJldHVybiBUUlVFOworCX0gZWxzZSB7CisJCWlmIChwVXJiKQorCQkJdXNiX2ZyZWVfdXJiKHBVcmIpOworCQlrZnJlZShwUmVnUXVldWUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAorLy8gcFJlZ2lzdGVyVmFsdWUgOiBJdCBtdXN0IGJlIGEgcmVzaWRlbnQgYnVmZmVyIGR1ZSB0byBhc3luY2hyb25vdXMgcmVhZCByZWdpc3Rlci4KK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfUmVhZFN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIgKglwbHRtcCA9IHBSZWdpc3RlclZhbHVlOworCWludCByZXQgPSAtMTsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gUmVhZCB0aGUgcmVnaXN0ZXIgYnkgc2VuZCB1c2IgbWVzc2FnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJcFdiMzVSZWctPlN5bmNJb1BhdXNlID0gMTsKKworCS8vIDIwMDYwNzE3LjUgV2FpdCB1bnRpbCBFUDBWTSBzdG9wCisJd2hpbGUgKHBXYjM1UmVnLT5FUDB2bV9zdGF0ZSAhPSBWTV9TVE9QKQorCQlPU19TTEVFUCgxMDAwMCk7CisKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCXJldCA9IHVzYl9jb250cm9sX21zZyggcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgICAgICB1c2JfcmN2Y3RybHBpcGUocEh3RGF0YS0+V2JVc2IudWRldiwgMCksCisJCQkgICAgICAgMHgwMSwgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9ERVZJQ0V8VVNCX0RJUl9JTiwKKwkJCSAgICAgICAweDAsIFJlZ2lzdGVyTm8sIHBsdG1wLCA0LCBIWioxMDAgKTsKKworCSpwUmVnaXN0ZXJWYWx1ZSA9IGNwdV90b19sZTMyKCpwbHRtcCk7CisKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9TVE9QOworCisJV2IzNVJlZ19VcGRhdGUoIHBId0RhdGEsIFJlZ2lzdGVyTm8sICpwUmVnaXN0ZXJWYWx1ZSApOworCXBXYjM1UmVnLT5TeW5jSW9QYXVzZSA9IDA7CisKKwlXYjM1UmVnX0VQMFZNX3N0YXJ0KCBwSHdEYXRhICk7CisKKwlpZiAocmV0IDwgMCkgeworCQkjaWZkZWYgX1BFX1JFR19EVU1QXworCQlXQkRFQlVHKCgiRVAwIFJlYWQgcmVnaXN0ZXIgdXNiIG1lc3NhZ2Ugc2VuZGluZyBlcnJvclxuIikpOworCQkjZW5kaWYKKworCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7IC8vIDIwMDYwNzA0LjIKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXJldHVybiBUUlVFOworfQorCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAorLy8gcFJlZ2lzdGVyVmFsdWUgOiBJdCBtdXN0IGJlIGEgcmVzaWRlbnQgYnVmZmVyIGR1ZSB0byBhc3luY2hyb25vdXMgcmVhZCByZWdpc3Rlci4KK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfUmVhZChwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqIGRyOworCVBVUkIJCXBVcmI7CisJUFJFR19RVUVVRQlwUmVnUXVldWU7CisJdTE2CQlVcmJTaXplOworCisJLy8gTW9kdWxlIHNodXRkb3duCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyB1cGRhdGUgdGhlIHZhcmlhYmxlIGJ5IHNlbmQgVXJiIHRvIHJlYWQgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCU9TX01FTU9SWV9BTExPQyggKHZvaWQqICopJnBSZWdRdWV1ZSwgVXJiU2l6ZSApOworCXBVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCWlmKCBwVXJiICYmIHBSZWdRdWV1ZSApCisJeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDA7Ly8gcmVhZCByZWdpc3RlcgorCQlwUmVnUXVldWUtPklOREVYID0gUmVnaXN0ZXJObzsKKwkJcFJlZ1F1ZXVlLT5wQnVmZmVyID0gcFJlZ2lzdGVyVmFsdWU7CisJCWRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikoKHU4ICopcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQlkci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9ERVZJQ0V8VVNCX0RJUl9JTjsKKwkJZHItPmJSZXF1ZXN0ID0gMHgwMTsgLy8gVVNCIG9yIHZlbmRvci1kZWZpbmVkIHJlcXVlc3QgY29kZSwgYnVyc3QgbW9kZQorCQlkci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMHgwKTsKKwkJZHItPndJbmRleCA9IGNwdV90b19sZTE2IChSZWdpc3Rlck5vKTsKKwkJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNiAoNCk7CisKKwkJLy8gRW50ZXIgdGhlIHNlbmRpbmcgcXVldWUKKwkJcFJlZ1F1ZXVlLT5OZXh0ID0gTlVMTDsKKwkJcFJlZ1F1ZXVlLT5wVXNiUmVxID0gZHI7CisJCXBSZWdRdWV1ZS0+cFVyYiA9IHBVcmI7CisJCXNwaW5fbG9ja19pcnEgKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiggcFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMICkKKwkJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwUmVnUXVldWU7CisJCWVsc2UKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdC0+TmV4dCA9IHBSZWdRdWV1ZTsKKwkJcFdiMzVSZWctPnBSZWdMYXN0ID0gcFJlZ1F1ZXVlOworCisJCXNwaW5fdW5sb2NrX2lycSggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQkvLyBTdGFydCBFUDBWTQorCQlXYjM1UmVnX0VQMFZNX3N0YXJ0KCBwSHdEYXRhICk7CisKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIoIHBVcmIgKTsKKwkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKworCit2b2lkCitXYjM1UmVnX0VQMFZNX3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYgKE9TX0FUT01JQ19JTkMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50KSA9PSAxKSB7CisJCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCVdiMzVSZWdfRVAwVk0ocEh3RGF0YSk7CisJfSBlbHNlCisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50ICk7Cit9CisKK3ZvaWQKK1diMzVSZWdfRVAwVk0ocGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVBVUkIJCXBVcmI7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJdTMyICoJCXBCdWZmZXI7CisJaW50CQkJcmV0ID0gLTE7CisJUFJFR19RVUVVRQlwUmVnUXVldWU7CisKKworCWlmIChwV2IzNVJlZy0+U3luY0lvUGF1c2UpCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJZ290byBjbGVhbnVwOworCisJLy8gR2V0IHRoZSByZWdpc3RlciBkYXRhIGFuZCBzZW5kIHRvIFVTQiB0aHJvdWdoIElycAorCXNwaW5fbG9ja19pcnEoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwlzcGluX3VubG9ja19pcnEoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwlpZiAoIXBSZWdRdWV1ZSkKKwkJZ290byBjbGVhbnVwOworCisJLy8gR2V0IGFuIFVyYiwgc2VuZCBpdAorCXBVcmIgPSAoUFVSQilwUmVnUXVldWUtPnBVcmI7CisKKwlkciA9IHBSZWdRdWV1ZS0+cFVzYlJlcTsKKwlwVXJiID0gcFJlZ1F1ZXVlLT5wVXJiOworCXBCdWZmZXIgPSBwUmVnUXVldWUtPnBCdWZmZXI7CisJaWYgKHBSZWdRdWV1ZS0+RElSRUNUID09IDEpIC8vIG91dHB1dAorCQlwQnVmZmVyID0gJnBSZWdRdWV1ZS0+VkFMVUU7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYiggcFVyYiwgcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgICAgIFJFR19ESVJFQ1RJT04ocEh3RGF0YS0+V2JVc2IudWRldixwUmVnUXVldWUpLAorCQkJICAgICAgKHU4ICopZHIscEJ1ZmZlcixjcHVfdG9fbGUxNihkci0+d0xlbmd0aCksCisJCQkgICAgICBXYjM1UmVnX0VQMFZNX2NvbXBsZXRlLCAodm9pZCopcEh3RGF0YSk7CisKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCisJcmV0ID0gd2JfdXNiX3N1Ym1pdF91cmIoIHBVcmIgKTsKKworCWlmIChyZXQgPCAwKSB7CisjaWZkZWYgX1BFX1JFR19EVU1QXworCQlXQkRFQlVHKCgiRVAwIElycCBzZW5kaW5nIGVycm9yXG4iKSk7CisjZW5kaWYKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJldHVybjsKKworIGNsZWFudXA6CisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVSZWctPlJlZ0ZpcmVDb3VudCApOworfQorCisKK3ZvaWQKK1diMzVSZWdfRVAwVk1fY29tcGxldGUoUFVSQiBwVXJiKQoreworCXBod19kYXRhX3QgIHBId0RhdGEgPSAocGh3X2RhdGFfdClwVXJiLT5jb250ZXh0OworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFJFR19RVUVVRQlwUmVnUXVldWU7CisKKworCS8vIFZhcmlhYmxlIHNldHRpbmcKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVSZWctPkVQMFZNX3N0YXR1cyA9IHBVcmItPnN0YXR1czsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkgeyAvLyBMZXQgV2JXbGFuSGFsdCB0byBoYW5kbGUgc3VycHJpc2UgcmVtb3ZlCisJCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1NUT1A7CisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50ICk7CisJfSBlbHNlIHsKKwkJLy8gQ29tcGxldGUgdG8gc2VuZCwgcmVtb3ZlIHRoZSBVUkIgZnJvbSB0aGUgZmlyc3QKKwkJc3Bpbl9sb2NrX2lycSggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKwkJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwkJaWYgKHBSZWdRdWV1ZSA9PSBwV2IzNVJlZy0+cFJlZ0xhc3QpCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QgPSBOVUxMOworCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFdiMzVSZWctPnBSZWdGaXJzdC0+TmV4dDsKKwkJc3Bpbl91bmxvY2tfaXJxKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJCWlmIChwV2IzNVJlZy0+RVAwVk1fc3RhdHVzKSB7CisjaWZkZWYgX1BFX1JFR19EVU1QXworCQkJV0JERUJVRygoIkVQMCBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKKwkJCURlYnVnVXNiZFN0YXR1c0luZm9ybWF0aW9uKCBwV2IzNVJlZy0+RVAwVk1fc3RhdHVzICk7CisjZW5kaWYKKwkJCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1NUT1A7CisJCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7CisJCX0gZWxzZSB7CisJCQkvLyBTdWNjZXNzLiBVcGRhdGUgdGhlIHJlc3VsdAorCisJCQkvLyBTdGFydCB0aGUgbmV4dCBzZW5kCisJCQlXYjM1UmVnX0VQMFZNKHBId0RhdGEpOworCQl9CisKKyAgIAkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwl9CisKKwl1c2JfZnJlZV91cmIocFVyYik7Cit9CisKKwordm9pZAorV2IzNVJlZ19kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVBVUkIJCXBVcmI7CisJUFJFR19RVUVVRQlwUmVnUXVldWU7CisKKworCVV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKHBId0RhdGEpOworCisJLy8gV2FpdCBmb3IgUmVnIG9wZXJhdGlvbiBjb21wbGV0ZWQKKwlkbyB7CisJCU9TX1NMRUVQKDEwMDAwKTsgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZW50ZXIgOTQwNjIzLjEuYQorCX0gd2hpbGUgKHBXYjM1UmVnLT5FUDB2bV9zdGF0ZSAhPSBWTV9TVE9QKTsKKwlPU19TTEVFUCgxMDAwMCk7ICAvLyBEZWxheSBmb3Igd2FpdGluZyBmdW5jdGlvbiBlbnRlciA5NDA2MjMuMS5iCisKKwkvLyBSZWxlYXNlIGFsbCB0aGUgZGF0YSBpbiBSZWdRdWV1ZQorCXNwaW5fbG9ja19pcnEoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwl3aGlsZSAocFJlZ1F1ZXVlKSB7CisJCWlmIChwUmVnUXVldWUgPT0gcFdiMzVSZWctPnBSZWdMYXN0KQorCQkJcFdiMzVSZWctPnBSZWdMYXN0ID0gTlVMTDsKKwkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBXYjM1UmVnLT5wUmVnRmlyc3QtPk5leHQ7CisKKwkJcFVyYiA9IHBSZWdRdWV1ZS0+cFVyYjsKKwkJc3Bpbl91bmxvY2tfaXJxKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiAocFVyYikgeworCQkJdXNiX2ZyZWVfdXJiKHBVcmIpOworCQkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJfSBlbHNlIHsKKwkJCSNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCQlXQkRFQlVHKCgiRVAwIHF1ZXVlIHJlbGVhc2UgZXJyb3JcbiIpKTsKKwkJCSNlbmRpZgorCQl9CisJCXNwaW5fbG9ja19pcnEoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhlIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gcGFzc2l2ZS1sZXZlbCBvbmx5LgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZz0mcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIgbHRtcDsKKwl1MzIgU29mdHdhcmVTZXQsIFZDT190cmltLCBUeFZnYSwgUmVnaW9uX1NjYW5JbnRlcnZhbDsKKworCS8vIFNwaW4gbG9jayBpcyBhY3F1aXJlZCBmb3IgcmVhZCBhbmQgd3JpdGUgSVJQIGNvbW1hbmQKKwlzcGluX2xvY2tfaW5pdCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCS8vIEdldHRpbmcgUkYgbW9kdWxlIHR5cGUgZnJvbSBFRVBST00gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODBkMDAwMCApOyAvLyBTdGFydCBFRVBST00gYWNjZXNzICsgUmVhZCArIGFkZHJlc3MoMHgwZCkKKwlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZsdG1wICk7CisKKwkvL1VwZGF0ZSBSRiBtb2R1bGUgdHlwZSBhbmQgZGV0ZXJtaW5lIHRoZSBQSFkgdHlwZSBieSBpbmYgb3IgRUVQUk9NCisJcFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPSAodTgpKCBsdG1wICYgMHhmZiApOworCS8vIDAgViBNQVgyODI1LCAxIFYgTUFYMjgyNywgMiBWIE1BWDI4MjgsIDMgViBNQVgyODI5CisJLy8gMTZWIEFMMjIzMCwgMTcgLSBBTDcyMzAsIDE4IC0gQUwyMjMwUworCS8vIDMyIFJlc2VydmVkCisJLy8gMzMgLSBXODlSRjI0MihUeFZHQSAwfjE5KSwgMzQgLSBXODlSRjI0MihUeFZHQSAwfjM0KQorCWlmIChwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSAhPSBSRl9ERUNJREVfQllfSU5GKSB7CisJCWlmKCAocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfTUFYSU1fMjgyNSkJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9NQVhJTV8yODI3KQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX01BWElNXzI4MjgpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfTUFYSU1fMjgyOSkJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9NQVhJTV9WMSkJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9BSVJPSEFfMjIzMCkJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9BSVJPSEFfMjIzMFMpICAgIHx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfQUlST0hBXzcyMzApCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfV0JfMjQyKQkJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9XQl8yNDJfMSkpCisJCQlwSHdEYXRhLT5waHlfdHlwZSA9IHBXYjM1UmVnLT5FRVBST01QaHlUeXBlOworCX0KKworCS8vIFBvd2VyIE9uIHByb2NlZHVyZSBydW5uaW5nLiBUaGUgcmVsYXRpdmUgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGFjY29yZGluZyB0byBwaHlfdHlwZQorCVV4eF9wb3dlcl9vbl9wcm9jZWR1cmUoIHBId0RhdGEgKTsKKworCS8vIFJlYWRpbmcgTUFDIGFkZHJlc3MKKwlVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggcEh3RGF0YSApOworCisJLy8gUmVhZCBWQ08gdHJpbSBmb3IgUkYgcGFyYW1ldGVyCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODIwMDAwMCApOworCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlZDT190cmltICk7CisKKwkvLyBSZWFkIEFudGVubmEgT24vT2ZmIG9mIHNvZnR3YXJlIGZsYWcKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MjEwMDAwICk7CisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmU29mdHdhcmVTZXQgKTsKKworCS8vIFJlYWQgVFhWR0EKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MTAwMDAwICk7CisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmVHhWZ2EgKTsKKworCS8vIEdldCBTY2FuIGludGVydmFsIHNldHRpbmcgZnJvbSBFRVBST00gb2Zmc2V0IDB4MWMKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MWQwMDAwICk7CisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmUmVnaW9uX1NjYW5JbnRlcnZhbCApOworCisJLy8gVXBkYXRlIEV0aGVybmV0IGFkZHJlc3MKKwltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MgKTsKKworCS8vIFVwZGF0ZSBzb2Z0d2FyZSB2YXJpYWJsZQorCXBId0RhdGEtPlNvZnR3YXJlU2V0ID0gKHUxNikoU29mdHdhcmVTZXQgJiAweGZmZmYpOworCVR4VmdhICY9IDB4MDAwMDAwZmY7CisJcEh3RGF0YS0+UG93ZXJJbmRleEZyb21FRVBST00gPSAodTgpVHhWZ2E7CisJcEh3RGF0YS0+VkNPX3RyaW0gPSAodTgpVkNPX3RyaW0gJiAweGZmOworCWlmIChwSHdEYXRhLT5WQ09fdHJpbSA9PSAweGZmKQorCQlwSHdEYXRhLT5WQ09fdHJpbSA9IDB4Mjg7CisKKwlwV2IzNVJlZy0+RUVQUk9NUmVnaW9uID0gKHU4KShSZWdpb25fU2NhbkludGVydmFsPj44KTsgLy8gMjAwNjA3MjAKKwlpZiggcFdiMzVSZWctPkVFUFJPTVJlZ2lvbjwxIHx8IHBXYjM1UmVnLT5FRVBST01SZWdpb24+NiApCisJCXBXYjM1UmVnLT5FRVBST01SZWdpb24gPSBSRUdJT05fQVVUTzsKKworCS8vRm9yIEdldCBUeCBWR0EgZnJvbSBFRVBST00gMjAwNjAzMTUuNSBtb3ZlIGhlcmUKKwlHZXRUeFZnYUZyb21FRVBST00oIHBId0RhdGEgKTsKKworCS8vIFNldCBTY2FuIEludGVydmFsCisJcEh3RGF0YS0+U2Nhbl9JbnRlcnZhbCA9ICh1OCkoUmVnaW9uX1NjYW5JbnRlcnZhbCAmIDB4ZmYpICogMTA7CisJaWYgKChwSHdEYXRhLT5TY2FuX0ludGVydmFsID09IDI1NTApIHx8IChwSHdEYXRhLT5TY2FuX0ludGVydmFsIDwgMTApKSAvLyBJcyBkZWZhdWx0IHNldHRpbmcgMHhmZiAqIDEwCisJCXBId0RhdGEtPlNjYW5fSW50ZXJ2YWwgPSBTQ0FOX01BWF9DSE5MX1RJTUU7CisKKwkvLyBJbml0aWFsIHJlZ2lzdGVyCisJUkZTeW50aGVzaXplcl9pbml0aWFsKHBId0RhdGEpOworCisJQkJQcm9jZXNzb3JfaW5pdGlhbChwSHdEYXRhKTsgLy8gQXN5bmMgd3JpdGUsIG11c3Qgd2FpdCB1bnRpbCBjb21wbGV0ZQorCisJV2IzNVJlZ19waHlfY2FsaWJyYXRpb24ocEh3RGF0YSk7CisKKwlNeHhfaW5pdGlhbChwSHdEYXRhKTsKKwlEeHhfaW5pdGlhbChwSHdEYXRhKTsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCWVsc2UKKwkJcmV0dXJuIFRSVUU7IC8vIEluaXRpYWwgZmFpbAorfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgQ2FyZENvbXB1dGVDcmMgLS0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBSdW5zIHRoZSBBVVRPRElOIElJIENSQyBhbGdvcml0aG0gb24gYnVmZmVyIEJ1ZmZlciBvZiBsZW5ndGgsIExlbmd0aC4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgQnVmZmVyIC0gdGhlIGlucHV0IGJ1ZmZlcgorLy8gICAgTGVuZ3RoIC0gdGhlIGxlbmd0aCBvZiBCdWZmZXIKKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgVGhlIDMyLWJpdCBDUkMgdmFsdWUuCisvLworLy8gIE5vdGU6CisvLyAgICBUaGlzIGlzIGFkYXB0ZWQgZnJvbSB0aGUgY29tbWVudHMgaW4gdGhlIGFzc2VtYmx5IGxhbmd1YWdlCisvLyAgICB2ZXJzaW9uIGluIF9HRU5SRVEuQVNNIG9mIHRoZSBEV0IgTkUxMDAwLzIwMDAgZHJpdmVyLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit1MzIKK0NhcmRDb21wdXRlQ3JjKHU4ICogQnVmZmVyLCB1MzIgTGVuZ3RoKQoreworICAgIHUzMiBDcmMsIENhcnJ5OworICAgIHUzMiAgaSwgajsKKyAgICB1OCBDdXJCeXRlOworCisgICAgQ3JjID0gMHhmZmZmZmZmZjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBMZW5ndGg7IGkrKykgeworCisgICAgICAgIEN1ckJ5dGUgPSBCdWZmZXJbaV07CisKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCisgICAgICAgICAgICBDYXJyeSAgICAgPSAoKENyYyAmIDB4ODAwMDAwMDApID8gMSA6IDApIF4gKEN1ckJ5dGUgJiAweDAxKTsKKyAgICAgICAgICAgIENyYyAgICAgPDw9IDE7CisgICAgICAgICAgICBDdXJCeXRlID4+PSAxOworCisgICAgICAgICAgICBpZiAoQ2FycnkpIHsKKyAgICAgICAgICAgICAgICBDcmMgPShDcmMgXiAweDA0YzExZGI2KSB8IENhcnJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENyYzsKK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQml0UmV2ZXJzZSAtLQorLy8gICBSZXZlcnNlIHRoZSBiaXRzIGluIHRoZSBpbnB1dCBhcmd1bWVudCwgZHdEYXRhLCB3aGljaCBpcworLy8gICByZWdhcmRlZCBhcyBhIHN0cmluZyBvZiBiaXRzIHdpdGggdGhlIGxlbmd0aCwgRGF0YUxlbmd0aC4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIGR3RGF0YSAgICAgOgorLy8gICBEYXRhTGVuZ3RoIDoKKy8vCisvLyBSZXR1cm46CisvLyAgIFRoZSBjb252ZXJ0ZWQgdmFsdWUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordTMyIEJpdFJldmVyc2UoIHUzMiBkd0RhdGEsIHUzMiBEYXRhTGVuZ3RoKQoreworCXUzMiAgIEhhbGZMZW5ndGgsIGksIGo7CisJdTMyICAgQml0QSwgQml0QjsKKworCWlmICggRGF0YUxlbmd0aCA8PSAwKSAgICAgICByZXR1cm4gMDsgICAvLyBObyBjb252ZXJzaW9uIGlzIGRvbmUuCisJZHdEYXRhID0gZHdEYXRhICYgKDB4ZmZmZmZmZmYgPj4gKDMyIC0gRGF0YUxlbmd0aCkpOworCisJSGFsZkxlbmd0aCA9IERhdGFMZW5ndGggLyAyOworCWZvciAoIGkgPSAwLCBqID0gRGF0YUxlbmd0aC0xIDsgaSA8IEhhbGZMZW5ndGg7IGkrKywgai0tKQorCXsKKwkJQml0QSA9IEdldEJpdCggZHdEYXRhLCBpKTsKKwkJQml0QiA9IEdldEJpdCggZHdEYXRhLCBqKTsKKwkJaWYgKEJpdEEgJiYgIUJpdEIpIHsKKwkJCWR3RGF0YSA9IENsZWFyQml0KCBkd0RhdGEsIGkpOworCQkJZHdEYXRhID0gU2V0Qml0KCBkd0RhdGEsIGopOworCQl9IGVsc2UgaWYgKCFCaXRBICYmIEJpdEIpIHsKKwkJCWR3RGF0YSA9IFNldEJpdCggZHdEYXRhLCBpKTsKKwkJCWR3RGF0YSA9IENsZWFyQml0KCBkd0RhdGEsIGopOworCQl9IGVsc2UKKwkJeworCQkJLy8gRG8gbm90aGluZyBzaW5jZSB0aGVzZSB0d28gYml0cyBhcmUgb2YgdGhlIHNhdmUgdmFsdWVzLgorCQl9CisJfQorCisJcmV0dXJuIGR3RGF0YTsKK30KKwordm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyIEJCM2MsIEJCNTQ7CisKKwlpZiAoKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MikgfHwKKwkJKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0Ml8xKSkgeworCQlwaHlfY2FsaWJyYXRpb25fd2luYm9uZCAoIHBId0RhdGEsIDI0MTIgKTsgLy8gU3luYyBvcGVyYXRpb24KKwkJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgxMDNjLCAmQkIzYyApOworCQlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDEwNTQsICZCQjU0ICk7CisKKwkJcEh3RGF0YS0+QkIzY19jYWwgPSBCQjNjOworCQlwSHdEYXRhLT5CQjU0X2NhbCA9IEJCNTQ7CisKKwkJUkZTeW50aGVzaXplcl9pbml0aWFsKHBId0RhdGEpOworCQlCQlByb2Nlc3Nvcl9pbml0aWFsKHBId0RhdGEpOyAvLyBBc3luYyBvcGVyYXRpb24KKworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDNjLCBCQjNjICk7CisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNTQsIEJCNTQgKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDA2Y2ZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19mLmgKQEAgLTAsMCArMSw1NiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1UmVnX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBEeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBNeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBSRlN5bnRoZXNpemVyX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKy8vdm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBzOCBDaGFubmVsICk7Cit2b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKTsKK3ZvaWQgQkJQcm9jZXNzb3JfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjEzLjEKKy8vdm9pZCBSRl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjI2LjUuYyBBZGQKK3U4IFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI1UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhMjIzMFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRXaW5ib25kMjQyUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3ZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7IC8vIDIwMDYwNjE5LjUgQWRkCisKKyNkZWZpbmUgUkZXcml0ZUNvbnRyb2xEYXRhKCBfQSwgX1YgKSBXYjM1UmVnX1dyaXRlKCBfQSwgMHgwODY0LCBfViApCisKK3ZvaWQgV2IzNVJlZ19kZXN0cm95KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkU3luYyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIHUzMiAqIHBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoICBwaHdfZGF0YV90IHBId0RhdGEsCisJCQkJCQkJCSB1MTYgUmVnaXN0ZXJObywKKwkJCQkJCQkJIHUzMiBSZWdpc3RlclZhbHVlLAorCQkJCQkJCQkgczggKnBWYWx1ZSwKKwkJCQkJCQkJIHM4IExlbik7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfQnVyc3RXcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyRGF0YSwgIHU4IE51bWJlck9mRGF0YSwgIHU4IEZsYWcgKTsKKwordm9pZCBXYjM1UmVnX0VQMFZNKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVSZWdfRVAwVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19FUDBWTV9jb21wbGV0ZSggIFBVUkIgcFVyYiApOworCit1MzIgQml0UmV2ZXJzZSggdTMyIGR3RGF0YSwgdTMyIERhdGFMZW5ndGgpOworCit2b2lkIENhcmRHZXRNdWx0aWNhc3RCaXQoICAgdTggQWRkcmVzc1tNQUNfQUREUl9MRU5HVEhdLCAgdTggKkJ5dGUsICB1OCAqVmFsdWUgKTsKK3UzMiBDYXJkQ29tcHV0ZUNyYyggIHU4ICogQnVmZmVyLCAgdTMyIExlbmd0aCApOworCit2b2lkIFdiMzVSZWdfcGh5X2NhbGlicmF0aW9uKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVSZWdfVXBkYXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyggIHBod19kYXRhX3QgcEh3RGF0YSApOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWdfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzNWI5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWdfcy5oCkBAIC0wLDAgKzEsMTcwIEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoKKwkJCQlIQUwgc2V0dGluZyBmdW5jdGlvbgorCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJfFV4eHwgCXxEeHh8CXxNeHh8CXxCQnwJfFJGfAorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQl8CQkJCQl8CisJCVdiMzVSZWdfUmVhZAkJV2IzNVJlZ19Xcml0ZQorCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlXYlVzYl9DYWxsVVNCREFTeW5jCQkJCQlzdXBwbGllZCBCeSBXYlVzYiBtb2R1bGUKKyovCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZGVmaW5lICAgICBHZXRCaXQoIGR3RGF0YSwgaSkgICAgICAoIGR3RGF0YSAmICgweDAwMDAwMDAxIDw8IGkpKQorI2RlZmluZSAgICAgU2V0Qml0KCBkd0RhdGEsIGkpICAgICAgKCBkd0RhdGEgfCAoMHgwMDAwMDAwMSA8PCBpKSkKKyNkZWZpbmUgICAgIENsZWFyQml0KCBkd0RhdGEsIGkpICAgICggZHdEYXRhICYgfigweDAwMDAwMDAxIDw8IGkpKQorCisjZGVmaW5lCQlJR05PUkVfSU5DUkVNRU5UCTAKKyNkZWZpbmUJCUFVVE9fSU5DUkVNRU5UCQkwCisjZGVmaW5lCQlOT19JTkNSRU1FTlQJCTEKKyNkZWZpbmUgUkVHX0RJUkVDVElPTihfeCxfeSkgICAoKF95KS0+RElSRUNUID09MCA/IHVzYl9yY3ZjdHJscGlwZShfeCwwKSA6IHVzYl9zbmRjdHJscGlwZShfeCwwKSkKKyNkZWZpbmUgUkVHX0JVRl9TSVpFKF94KSAgICAgICAoKF94KS0+YlJlcXVlc3Q9PSAweDA0ID8gY3B1X3RvX2xlMTYoKF94KS0+d0xlbmd0aCkgOiA0KQorCisvLyAyMDA2MDYxMy4yIEFkZCB0aGUgZm9sbG93IGRlZmluaXRpb24KKyNkZWZpbmUgQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUIJCTB4MDAzMzQ0N2MKKyNkZWZpbmUgQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUIJCTB4MEEwMEZFRkYKKyNkZWZpbmUgQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUcJCTB4MDAzMzJDMUIKKyNkZWZpbmUgQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUcJCTB4MEEwMEZFRkYKKworCisjZGVmaW5lIEJCNDhfREVGQVVMVF9XQjI0Ml8xMUIJCTB4MDAyOTIzMTUJLy9iYWNrb2ZmICAyZEIKKyNkZWZpbmUgQkI0Q19ERUZBVUxUX1dCMjQyXzExQgkJMHgwODAwRkVGRgkvL2JhY2tvZmYgIDJkQgorLy8jZGVmaW5lIEJCNDhfREVGQVVMVF9XQjI0Ml8xMUIJCTB4MDAyMDFCMTEJLy9iYWNrb2ZmICA0ZEIKKy8vI2RlZmluZSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFCCQkweDA2MDBGRjAwCS8vYmFja29mZiAgNGRCCisjZGVmaW5lIEJCNDhfREVGQVVMVF9XQjI0Ml8xMUcJCTB4MDA0NTNCMjQKKyNkZWZpbmUgQkI0Q19ERUZBVUxUX1dCMjQyXzExRwkJMHgwRTAwRkVGRgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gRGVmYXVsdCBzZXR0aW5nIGZvciBNeHgKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIERFRkFVTFRfQ1dNSU4JCQkJCTMxCQkvLyhNMkMpIENXbWluLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMzEuCisjZGVmaW5lIERFRkFVTFRfQ1dNQVgJCQkJCTEwMjMJLy8oTTJDKSBDV21heC4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTEwMjMuCisjZGVmaW5lIERFRkFVTFRfQUlECQkJCQkJMQkJLy8oTTM0KSBBSUQuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMS0yMDA3LgorCisjaWZkZWYgX1VTRV9GQUxMQkFDS19SQVRFXworI2RlZmluZSBERUZBVUxUX1JBVEVfUkVUUllfTElNSVQJCTIJCS8vKE0zOCkgYXMgbmFtZWQKKyNlbHNlCisjZGVmaW5lIERFRkFVTFRfUkFURV9SRVRSWV9MSU1JVAkJNwkJLy8oTTM4KSBhcyBuYW1lZAorI2VuZGlmCisKKyNkZWZpbmUgREVGQVVMVF9MT05HX1JFVFJZX0xJTUlUCQk3CQkvLyhNMzgpIExvbmdSZXRyeUxpbWl0LiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMTUuCisjZGVmaW5lIERFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQJCTcJCS8vKE0zOCkgU2hvcnRSZXRyeUxpbWl0LiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMTUuCisjZGVmaW5lIERFRkFVTFRfUElGU1QJCQkJCTI1CQkvLyhNM0MpIFBJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX0VJRlNUCQkJCQkzNTQJCS8vKE0zQykgRUlGUyBUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMTA0ODU3NS4KKyNkZWZpbmUgREVGQVVMVF9ESUZTVAkJCQkJNDUJCS8vKE0zQykgRElGUyBUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNjU1MzUuCisjZGVmaW5lIERFRkFVTFRfU0lGU1QJCQkJCTUJCS8vKE0zQykgU0lGUyBUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNjU1MzUuCisjZGVmaW5lIERFRkFVTFRfT1NJRlNUCQkJCQkxMAkJLy8oTTNDKSBPcmlnaW5hbCBTSUZTIFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0xNS4KKyNkZWZpbmUgREVGQVVMVF9BVElNV0QJCQkJCTAJCS8vKE00MCkgQVRJTSBXaW5kb3cuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9TTE9UX1RJTUUJCQkJMjAJCS8vKE00MCkgKCQpIFNsb3RUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMjU1LgorI2RlZmluZSBERUZBVUxUX01BWF9UWF9NU0RVX0xJRkVfVElNRQk1MTIJLy8oTTQ0KSBNYXhUeE1TRFVMaWZlVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTQyOTQ5NjcyOTUuCisjZGVmaW5lIERFRkFVTFRfQkVBQ09OX0lOVEVSVkFMCQkJNTAwCQkvLyhNNDgpIEJlYWNvbiBJbnRlcnZhbC4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX1BST0JFX0RFTEFZX1RJTUUJCTIwMAkJLy8oTTQ4KSBQcm9iZSBEZWxheSBUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNjU1MzUuCisjZGVmaW5lIERFRkFVTFRfUFJPVE9DT0xfVkVSU0lPTgkJMAkJLy8oTTRDKQorI2RlZmluZSBERUZBVUxUX01BQ19QT1dFUl9TVEFURQkJCTIJCS8vKE00QykgMjogTUFDIGF0IHBvd2VyIGFjdGl2ZQorI2RlZmluZSBERUZBVUxUX0RUSU1fQUxFUlRfVElNRQkJCTAKKworCit0eXBlZGVmIHN0cnVjdCBfUkVHX1FVRVVFCit7CisgICAgc3RydWN0ICB1cmIgKnBVcmI7CisJdm9pZCoJcFVzYlJlcTsKKwl2b2lkKglOZXh0OworCXVuaW9uCisJeworCQl1MzIJVkFMVUU7CisJCXUzMiAqCXBCdWZmZXI7CisJfTsKKwl1OAlSRVNFUlZFRFs0XTsvLyBzcGFjZSByZXNlcnZlZCBmb3IgY29tbXVuaWNhdGlvbgorCisgICAgdTE2CUlOREVYOyAvLyBGb3Igc3RvcmluZyB0aGUgcmVnaXN0ZXIgaW5kZXgKKyAgICB1OAlSRVNFUlZFRF9WQUxJRDsJLy9JbmRpY2F0ZSB3aGV0aGVyIHRoZSBSRVNFUlZFRCBzcGFjZSBpcyB2YWxpZCBhdCB0aGlzIGNvbW1hbmQuCisJdTgJRElSRUNUOyAvLyAwOkluICAgMTpPdXQKKworfSBSRUdfUVVFVUUsICpQUkVHX1FVRVVFOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUFYX1NRM19GSUxURVJfU0laRQkJNQordHlwZWRlZiBzdHJ1Y3QgX1dCMzVSRUcKK3sKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBSZWdpc3RlciBCYW5rIGJhY2t1cAorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXUzMglVMUIwOwkJCS8vYml0MTYgcmVjb3JkIHRoZSBoL3cgcmFkaW8gb24vb2ZmIHN0YXR1cworCXUzMglVMUJDX0xFRENvbmZpZ3VyZTsKKwl1MzIJRDAwX0RtYUNvbnRyb2w7CisJdTMyCU0wMF9NYWNDb250cm9sOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMglNMDRfTXVsdGljYXN0QWRkcmVzczE7CisJCQl1MzIJTTA4X011bHRpY2FzdEFkZHJlc3MyOworCQl9OworCQl1OAkJTXVsdGljYXN0WzhdOwkvLyBjb250ZW50cyBvZiBjYXJkIG11bHRpY2FzdCByZWdpc3RlcnMKKwl9OworCisJdTMyCU0yNF9NYWNDb250cm9sOworCXUzMglNMjhfTWFjQ29udHJvbDsKKwl1MzIJTTJDX01hY0NvbnRyb2w7CisJdTMyCU0zOF9NYWNDb250cm9sOworCXUzMglNM0NfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTQwX01hY0NvbnRyb2w7CisJdTMyCU00NF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNDhfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTRDX01hY1N0YXR1czsKKwl1MzIJTTYwX01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU02OF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNzBfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTc0X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU03OF9FUlBJbmZvcm1hdGlvbjsvLzkzMDIwNi4yLmIKKwl1MzIJTTdDX01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU04MF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNODRfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTg4X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU05OF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCisJLy9bMjAwNDA3MjIgV0tdCisJLy9CYXNlYmFuZCByZWdpc3RlcgorCXUzMglCQjBDOwkvLyBVc2VkIGZvciBMTkEgY2FsY3VsYXRpb24KKwl1MzIJQkIyQzsJLy8KKwl1MzIJQkIzMDsJLy8xMWIgYWNxdWlzaXRpb24gY29udHJvbCByZWdpc3RlcgorCXUzMglCQjNDOworCXUzMglCQjQ4OwkvLyAyMDA1MTIyMS4xLmEgMjAwNjA2MTMuMSBGaXggT0JXIGlzc3VlIG9mIDExYi8xMWcgcmF0ZQorCXUzMglCQjRDOwkvLyAyMDA2MDYxMy4xICBGaXggT0JXIGlzc3VlIG9mIDExYi8xMWcgcmF0ZQorCXUzMglCQjUwOwkvL21vZGUgY29udHJvbCByZWdpc3RlcgorCXUzMglCQjU0OworCXUzMiAJQkI1ODsJLy9JUV9BTFBIQQorCXUzMglCQjVDOwkvLyBGb3IgdGVzdAorCXUzMglCQjYwOwkvLyBmb3IgV1RPIHJlYWQgdmFsdWUKKworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFZNCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tCisJc3BpbmxvY2tfdAlFUDBWTV9zcGluX2xvY2s7IC8vIDRCCisJdTMyCSAgICAgICAgRVAwVk1fc3RhdHVzOy8vJCQKKwlQUkVHX1FVRVVFCSAgICBwUmVnRmlyc3Q7CisJUFJFR19RVUVVRQkgICAgcFJlZ0xhc3Q7CisJT1NfQVRPTUlDICAgICAgIFJlZ0ZpcmVDb3VudDsKKworCS8vIEhhcmR3YXJlIHN0YXR1cworCXU4CUVQMHZtX3N0YXRlOworCXU4CW1hY19wb3dlcl9zYXZlOworCXU4CUVFUFJPTVBoeVR5cGU7IC8vIDAgfiAxNSBmb3IgTWF4aW0gKDAgxIRWIE1BWDI4MjUsIDEgxIRWIE1BWDI4MjcsIDIgxIRWIE1BWDI4MjgsIDMgxIRWIE1BWDI4MjkpLAorCQkJCQkJICAgLy8gMTYgfiAzMSBmb3IgQWlyb2hhICgxNiDEhFYgQUwyMjMwLCAxMSAtIEFMNzIzMCkKKwkJCQkJCSAgIC8vIDMyIH4gUmVzZXJ2ZWQKKwkJCQkJCSAgIC8vIDMzIH4gNDcgRm9yIFdCMjQyICggMzMgLSBXQjI0MiwgMzQgLSBXQjI0MiB3aXRoIG5ldyBUeHZnYSAwLjUgZGIgc3RlcCkKKwkJCQkJCSAgIC8vIDQ4IH4gMjU1IEFSRSBSRVNFUlZFRC4KKwl1OAlFRVBST01SZWdpb247CS8vUmVnaW9uIHNldHRpbmcgaW4gRUVQUk9NCisKKwl1MzIJU3luY0lvUGF1c2U7IC8vIElmIHVzZXIgdXNlIHRoZSBTeW5jIElvIHRvIGFjY2VzcyBIdywgdGhlbiBwYXVzZSB0aGUgYXN5bmMgYWNjZXNzCisKKwl1OAlMTkFWYWx1ZVs0XTsgLy9UYWJsZSBmb3Igc3BlZWQgdXAgcnVubmluZworCXUzMglTUTNfZmlsdGVyW01BWF9TUTNfRklMVEVSX1NJWkVdOworCXUzMglTUTNfaW5kZXg7CisKK30gV0IzNVJFRywgKlBXQjM1UkVHOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiOWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeC5jCkBAIC0wLDAgKzEsMzM0IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMiBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICBXYjM1UnguYworLy8KKy8vICBBYnN0cmFjdDoKKy8vICAgIFByb2Nlc3NpbmcgdGhlIFJ4IG1lc3NhZ2UgZnJvbSBkb3duIGxheWVyCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaW5jbHVkZSAic3lzZGVmLmgiCisKKwordm9pZCBXYjM1Unhfc3RhcnQocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisKKwkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gdGhlIFdiMzVSeCgpIGZ1bmN0aW9uCisJaWYgKE9TX0FUT01JQ19JTkMocEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIpID09IDEpIHsKKwkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCQlXYjM1UngocEh3RGF0YSk7CisJfSBlbHNlCisJCU9TX0FUT01JQ19ERUMocEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNhbm5vdCByZWVudHJhaW4KK3ZvaWQgV2IzNVJ4KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJYCXBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXU4ICoJcFJ4QnVmZmVyQWRkcmVzczsKKwlQVVJCCXBVcmIgPSAoUFVSQilwV2IzNVJ4LT5SeFVyYjsKKwlpbnQJcmV0djsKKwl1MzIJUnhCdWZmZXJJZDsKKworCS8vCisJLy8gSXNzdWluZyBVUkIKKwkvLworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocFdiMzVSeC0+cnhfaGFsdCkKKwkJZ290byBlcnJvcjsKKworCS8vIEdldCBSeEJ1ZmZlcidzIElECisJUnhCdWZmZXJJZCA9IHBXYjM1UngtPlJ4QnVmZmVySWQ7CisJaWYgKCFwV2IzNVJ4LT5SeE93bmVyW1J4QnVmZmVySWRdKSB7CisJCS8vIEl0J3MgaW1wb3NzaWJsZSB0byBydW4gaGVyZS4KKwkJI2lmZGVmIF9QRV9SWF9EVU1QXworCQlXQkRFQlVHKCgiUnggZHJpdmVyIGZpZm8gdW5hdmFpbGFibGVcbiIpKTsKKwkJI2VuZGlmCisJCWdvdG8gZXJyb3I7CisJfQorCisJLy8gVXBkYXRlIGJ1ZmZlciBwb2ludCwgdGhlbiBzdGFydCB0byBidWxraW4gdGhlIGRhdGEgZnJvbSBVU0IKKwlwV2IzNVJ4LT5SeEJ1ZmZlcklkKys7CisJcFdiMzVSeC0+UnhCdWZmZXJJZCAlPSBNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVI7CisKKwlwV2IzNVJ4LT5DdXJyZW50UnhCdWZmZXJJZCA9IFJ4QnVmZmVySWQ7CisKKwlpZiAoMSAhPSBPU19NRU1PUllfQUxMT0MoKHZvaWQqICopJnBXYjM1UngtPnBEUngsIE1BWF9VU0JfUlhfQlVGRkVSKSkgeworCQlwcmludGsoInczNXVuZDogUnggbWVtb3J5IGFsbG9jIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXBSeEJ1ZmZlckFkZHJlc3MgPSBwV2IzNVJ4LT5wRFJ4OworCisJdXNiX2ZpbGxfYnVsa191cmIocFVyYiwgcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsIDMpLAorCQkJICBwUnhCdWZmZXJBZGRyZXNzLCBNQVhfVVNCX1JYX0JVRkZFUiwKKwkJCSAgV2IzNVJ4X0NvbXBsZXRlLCBwSHdEYXRhKTsKKworCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fUlVOTklORzsKKworCXJldHYgPSB3Yl91c2Jfc3VibWl0X3VyYihwVXJiKTsKKworCWlmIChyZXR2ICE9IDApIHsKKwkJcHJpbnRrKCJSeCBVUkIgc2VuZGluZyBlcnJvclxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybjsKKworZXJyb3I6CisJLy8gVk0gc3RvcAorCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fU1RPUDsKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVSeC0+UnhGaXJlQ291bnRlciApOworfQorCit2b2lkIFdiMzVSeF9Db21wbGV0ZShQVVJCIHBVcmIpCit7CisJcGh3X2RhdGFfdAlwSHdEYXRhID0gcFVyYi0+Y29udGV4dDsKKwlQV0IzNVJYCQlwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwl1OCAqCQlwUnhCdWZmZXJBZGRyZXNzOworCXUzMgkJU2l6ZUNoZWNrOworCXUxNgkJQnVsa0xlbmd0aDsKKwl1MzIJCVJ4QnVmZmVySWQ7CisJUjAwX0RFU0NSSVBUT1IgCVIwMDsKKworCS8vIFZhcmlhYmxlIHNldHRpbmcKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKwlwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgPSBwVXJiLT5zdGF0dXM7Ly9TdG9yZSB0aGUgbGFzdCByZXN1bHQgb2YgSXJwCisKKwlSeEJ1ZmZlcklkID0gcFdiMzVSeC0+Q3VycmVudFJ4QnVmZmVySWQ7CisKKwlwUnhCdWZmZXJBZGRyZXNzID0gcFdiMzVSeC0+cERSeDsKKwlCdWxrTGVuZ3RoID0gKHUxNilwVXJiLT5hY3R1YWxfbGVuZ3RoOworCisJLy8gVGhlIElSUCBpcyBjb21wbGV0ZWQKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApIC8vIE11c3QgYmUgaGVyZSwgb3IgUnhCdWZmZXJJZCBpcyBpbnZhbGlkCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocFdiMzVSeC0+cnhfaGFsdCkKKwkJZ290byBlcnJvcjsKKworCS8vIFN0YXJ0IHRvIHByb2Nlc3MgdGhlIGRhdGEgb25seSBpbiBzdWNjZXNzZnVsIGNvbmRpdGlvbgorCXBXYjM1UngtPlJ4T3duZXJbIFJ4QnVmZmVySWQgXSA9IDA7IC8vIFNldCB0aGUgb3duZXIgdG8gZHJpdmVyCisJUjAwLnZhbHVlID0gbGUzMl90b19jcHUoKih1MzIgKilwUnhCdWZmZXJBZGRyZXNzKTsKKworCS8vIFRoZSBVUkIgaXMgY29tcGxldGVkLCBjaGVjayB0aGUgcmVzdWx0CisJaWYgKHBXYjM1UngtPkVQM1ZNX3N0YXR1cyAhPSAwKSB7CisJCSNpZmRlZiBfUEVfVVNCX1NUQVRFX0RVTVBfCisJCVdCREVCVUcoKCJFUDMgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKSk7CisJCURlYnVnVXNiZFN0YXR1c0luZm9ybWF0aW9uKCBwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgKTsKKwkJI2VuZGlmCisJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fU1RPUDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvLyAyMDA2MDIyMCBGb3IgcmVjb3ZlcmluZy4gY2hlY2sgaWYgb3BlcmF0aW5nIGluIHNpbmdsZSBVU0IgbW9kZQorCWlmICghSEFMX1VTQl9NT0RFX0JVUlNUKHBId0RhdGEpKSB7CisJCVNpemVDaGVjayA9IFIwMC5SMDBfcmVjZWl2ZV9ieXRlX2NvdW50OyAgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCQlpZiAoKFNpemVDaGVjayAmIDB4MDMpID4gMCkKKwkJCVNpemVDaGVjayAtPSA0OworCQlTaXplQ2hlY2sgPSAoU2l6ZUNoZWNrICsgMykgJiB+MHgwMzsKKwkJU2l6ZUNoZWNrICs9IDEyOyAvLyA4ICsgNCBiYWRiZWVmCisJCWlmICgoQnVsa0xlbmd0aCA+IDE2MDApIHx8CisJCQkoU2l6ZUNoZWNrID4gMTYwMCkgfHwKKwkJCShCdWxrTGVuZ3RoICE9IFNpemVDaGVjaykgfHwKKwkJCShCdWxrTGVuZ3RoID09IDApKSB7IC8vIEFkZCBmb3IgZmFpbCBVcmIKKwkJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fU1RPUDsKKwkJCXBXYjM1UngtPkVwM0Vycm9yQ291bnQyKys7CisJCX0KKwl9CisKKwkvLyBJbmRpY2F0aW5nIHRoZSByZWNlaXZpbmcgZGF0YQorCXBXYjM1UngtPkJ5dGVSZWNlaXZlZCArPSBCdWxrTGVuZ3RoOworCXBXYjM1UngtPlJ4QnVmZmVyU2l6ZVsgUnhCdWZmZXJJZCBdID0gQnVsa0xlbmd0aDsKKworCWlmICghcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdKQorCQlXYjM1UnhfaW5kaWNhdGUocEh3RGF0YSk7CisKKwlrZnJlZShwV2IzNVJ4LT5wRFJ4KTsKKwkvLyBEbyB0aGUgbmV4dCByZWNlaXZlCisJV2IzNVJ4KHBId0RhdGEpOworCXJldHVybjsKKworZXJyb3I6CisJcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdID0gMTsgLy8gU2V0IHRoZSBvd25lciB0byBoYXJkd2FyZQorCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyICk7CisJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3Vuc2lnbmVkIGNoYXIgV2IzNVJ4X2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisKKwkvLyBJbml0aWFsIHRoZSBCdWZmZXIgUXVldWUKKwlXYjM1UnhfcmVzZXRfZGVzY3JpcHRvciggcEh3RGF0YSApOworCisJcFdiMzVSeC0+UnhVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCXJldHVybiAoISFwV2IzNVJ4LT5SeFVyYik7Cit9CisKK3ZvaWQgV2IzNVJ4X3N0b3AocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisKKwkvLyBDYW5jZWxpbmcgdGhlIElycCBpZiBhbHJlYWR5IHNlbmRzIGl0IG91dC4KKwlpZiAocFdiMzVSeC0+RVAzdm1fc3RhdGUgPT0gVk1fUlVOTklORykgeworCQl1c2JfdW5saW5rX3VyYiggcFdiMzVSeC0+UnhVcmIgKTsgLy8gT25seSB1c2UgdW5saW5rLCBsZXQgV2IzNVJ4X2Rlc3Ryb3kgdG8gZnJlZSB0aGVtCisJCSNpZmRlZiBfUEVfUlhfRFVNUF8KKwkJV0JERUJVRygoIkVQMyBSeCBzdG9wXG4iKSk7CisJCSNlbmRpZgorCX0KK30KKworLy8gTmVlZHMgcHJvY2VzcyBjb250ZXh0Cit2b2lkIFdiMzVSeF9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCisJZG8geworCQlPU19TTEVFUCgxMDAwMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmEKKwl9IHdoaWxlIChwV2IzNVJ4LT5FUDN2bV9zdGF0ZSAhPSBWTV9TVE9QKTsKKwlPU19TTEVFUCgxMDAwMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGV4aXQgOTQwNjIzLjEuYgorCisJaWYgKHBXYjM1UngtPlJ4VXJiKQorCQl1c2JfZnJlZV91cmIoIHBXYjM1UngtPlJ4VXJiICk7CisJI2lmZGVmIF9QRV9SWF9EVU1QXworCVdCREVCVUcoKCJXYjM1UnhfZGVzdHJveSBPS1xuIikpOworCSNlbmRpZgorfQorCit2b2lkIFdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXUzMglpOworCisJcFdiMzVSeC0+Qnl0ZVJlY2VpdmVkID0gMDsKKwlwV2IzNVJ4LT5SeFByb2Nlc3NJbmRleCA9IDA7CisJcFdiMzVSeC0+UnhCdWZmZXJJZCA9IDA7CisJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworCXBXYjM1UngtPnJ4X2hhbHQgPSAwOworCisJLy8gSW5pdGlhbCB0aGUgUXVldWUuIFRoZSBsYXN0IGJ1ZmZlciBpcyByZXNlcnZlZCBmb3IgdXNlZCBpZiB0aGUgUnggcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUuCisJZm9yKCBpPTA7IGk8TUFYX1VTQl9SWF9CVUZGRVJfTlVNQkVSOyBpKysgKQorCQlwV2IzNVJ4LT5SeE93bmVyW2ldID0gMTsKK30KKwordm9pZCBXYjM1UnhfYWRqdXN0KFBERVNDUklQVE9SIHBSeERlcykKK3sKKwl1MzIgKglwUnhCdWZmZXJBZGRyZXNzOworCXUzMglEZWNyeXB0aW9uTWV0aG9kOworCXUzMglpOworCXUxNglCdWZmZXJTaXplOworCisJRGVjcnlwdGlvbk1ldGhvZCA9IHBSeERlcy0+UjAxLlIwMV9kZWNyeXB0aW9uX21ldGhvZDsKKwlwUnhCdWZmZXJBZGRyZXNzID0gcFJ4RGVzLT5idWZmZXJfYWRkcmVzc1swXTsKKwlCdWZmZXJTaXplID0gcFJ4RGVzLT5idWZmZXJfc2l6ZVswXTsKKworCS8vIEFkanVzdCB0aGUgbGFzdCBwYXJ0IG9mIGRhdGEuIE9ubHkgZGF0YSBsZWZ0CisJQnVmZmVyU2l6ZSAtPSA0OyAvLyBGb3IgQ1JDLTMyCisJaWYgKERlY3J5cHRpb25NZXRob2QpCisJCUJ1ZmZlclNpemUgLT0gNDsKKwlpZiAoRGVjcnlwdGlvbk1ldGhvZCA9PSAzKSAvLyBGb3IgQ0NNUAorCQlCdWZmZXJTaXplIC09IDQ7CisKKwkvLyBBZGp1c3QgdGhlIElWIGZpZWxkIHdoaWNoIGFmdGVyIDgwMi4xMSBoZWFkZXIgYW5kIElDViBmaWVsZC4KKwlpZiAoRGVjcnlwdGlvbk1ldGhvZCA9PSAxKSAvLyBGb3IgV0VQCisJeworCQlmb3IoIGk9NjsgaT4wOyBpLS0gKQorCQkJcFJ4QnVmZmVyQWRkcmVzc1tpXSA9IHBSeEJ1ZmZlckFkZHJlc3NbaS0xXTsKKwkJcFJ4RGVzLT5idWZmZXJfYWRkcmVzc1swXSA9IHBSeEJ1ZmZlckFkZHJlc3MgKyAxOworCQlCdWZmZXJTaXplIC09IDQ7IC8vIDQgYnl0ZSBmb3IgSVYKKwl9CisJZWxzZSBpZiggRGVjcnlwdGlvbk1ldGhvZCApIC8vIEZvciBUS0lQIGFuZCBDQ01QCisJeworCQlmb3IgKGk9NzsgaT4xOyBpLS0pCisJCQlwUnhCdWZmZXJBZGRyZXNzW2ldID0gcFJ4QnVmZmVyQWRkcmVzc1tpLTJdOworCQlwUnhEZXMtPmJ1ZmZlcl9hZGRyZXNzWzBdID0gcFJ4QnVmZmVyQWRkcmVzcyArIDI7Ly9VcGRhdGUgdGhlIGRlc2NyaXB0b3IsIHNoaWZ0IDggYnl0ZQorCQlCdWZmZXJTaXplIC09IDg7IC8vIDggYnl0ZSBmb3IgSVYgKyBJQ1YKKwl9CisJcFJ4RGVzLT5idWZmZXJfc2l6ZVswXSA9IEJ1ZmZlclNpemU7Cit9CisKK2V4dGVybiB2b2lkIHBhY2tldF9jYW1lKGNoYXIgKnBSeEJ1ZmZlckFkZHJlc3MsIGludCBQYWNrZXRTaXplKTsKKworCit1MTYgV2IzNVJ4X2luZGljYXRlKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlERVNDUklQVE9SCVJ4RGVzOworCVBXQjM1UlgJcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJdTggKgkJcFJ4QnVmZmVyQWRkcmVzczsKKwl1MTYJCVBhY2tldFNpemU7CisJdTE2CQlzdG1wLCBCdWZmZXJTaXplLCBzdG1wMiA9IDA7CisJdTMyCQlSeEJ1ZmZlcklkOworCisJLy8gT25seSBvbmUgdGhyZWFkIGJlIGFsbG93ZWQgdG8gcnVuIGludG8gdGhlIGZvbGxvd2luZworCWRvIHsKKwkJUnhCdWZmZXJJZCA9IHBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4OworCQlpZiAocFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdKSAvL093bmVyIGJ5IFZNCisJCQlicmVhazsKKworCQlwV2IzNVJ4LT5SeFByb2Nlc3NJbmRleCsrOworCQlwV2IzNVJ4LT5SeFByb2Nlc3NJbmRleCAlPSBNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVI7CisKKwkJcFJ4QnVmZmVyQWRkcmVzcyA9IHBXYjM1UngtPnBEUng7CisJCUJ1ZmZlclNpemUgPSBwV2IzNVJ4LT5SeEJ1ZmZlclNpemVbIFJ4QnVmZmVySWQgXTsKKworCQkvLyBQYXJzZSB0aGUgYnVsa2luIGJ1ZmZlcgorCQl3aGlsZSAoQnVmZmVyU2l6ZSA+PSA0KSB7CisJCQlpZiAoKGNwdV90b19sZTMyKCoodTMyICopcFJ4QnVmZmVyQWRkcmVzcykgJiAweDBmZmZmZmZmKSA9PSBSWF9FTkRfVEFHKSAvL0lzIGVuZGluZz8gOTIxMDAyLjkuYQorCQkJCWJyZWFrOworCisJCQkvLyBHZXQgdGhlIFIwMCBSMDEgZmlyc3QKKwkJCVJ4RGVzLlIwMC52YWx1ZSA9IGxlMzJfdG9fY3B1KCoodTMyICopcFJ4QnVmZmVyQWRkcmVzcyk7CisJCQlQYWNrZXRTaXplID0gKHUxNilSeERlcy5SMDAuUjAwX3JlY2VpdmVfYnl0ZV9jb3VudDsKKwkJCVJ4RGVzLlIwMS52YWx1ZSA9IGxlMzJfdG9fY3B1KCooKHUzMiAqKShwUnhCdWZmZXJBZGRyZXNzKzQpKSk7CisJCQkvLyBGb3IgbmV3IERNQSA0aworCQkJaWYgKChQYWNrZXRTaXplICYgMHgwMykgPiAwKQorCQkJCVBhY2tldFNpemUgLT0gNDsKKworCQkJLy8gQmFzaWMgY2hlY2sgZm9yIFJ4IGxlbmd0aC4gSXMgbGVuZ3RoIHZhbGlkPworCQkJaWYgKFBhY2tldFNpemUgPiBNQVhfUEFDS0VUX1NJWkUpIHsKKwkJCQkjaWZkZWYgX1BFX1JYX0RVTVBfCisJCQkJV0JERUJVRygoIlNlcmlvdXMgRVJST1IgOiBSeCBkYXRhIHNpemUgdG9vIGxvbmcsIHNpemUgPSVkXG4iLCBQYWNrZXRTaXplKSk7CisJCQkJI2VuZGlmCisKKwkJCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CisJCQkJcFdiMzVSeC0+RXAzRXJyb3JDb3VudDIrKzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLy8gU3RhcnQgdG8gcHJvY2VzcyBSeCBidWZmZXIKKy8vCQkJUnhEZXMuRGVzY3JpcHRvcl9JRCA9IFJ4QnVmZmVySWQ7IC8vIER1ZSB0byBzeW5jaHJvbm91cyBpbmRpY2F0ZSwgdGhlIGZpZWxkIGRvZXNuJ3QgbmVjZXNzYXJ5IHRvIHVzZS4KKwkJCUJ1ZmZlclNpemUgLT0gODsgLy9zdWJ0cmFjdCA4IGJ5dGUgZm9yIDM1J3MgVVNCIGhlYWRlciBsZW5ndGgKKwkJCXBSeEJ1ZmZlckFkZHJlc3MgKz0gODsKKworCQkJUnhEZXMuYnVmZmVyX2FkZHJlc3NbMF0gPSBwUnhCdWZmZXJBZGRyZXNzOworCQkJUnhEZXMuYnVmZmVyX3NpemVbMF0gPSBQYWNrZXRTaXplOworCQkJUnhEZXMuYnVmZmVyX251bWJlciA9IDE7CisJCQlSeERlcy5idWZmZXJfc3RhcnRfaW5kZXggPSAwOworCQkJUnhEZXMuYnVmZmVyX3RvdGFsX3NpemUgPSBSeERlcy5idWZmZXJfc2l6ZVswXTsKKwkJCVdiMzVSeF9hZGp1c3QoJlJ4RGVzKTsKKworCQkJcGFja2V0X2NhbWUocFJ4QnVmZmVyQWRkcmVzcywgUGFja2V0U2l6ZSk7CisKKwkJCS8vIE1vdmUgUnhCdWZmZXIgcG9pbnQgdG8gdGhlIG5leHQKKwkJCXN0bXAgPSBQYWNrZXRTaXplICsgMzsKKwkJCXN0bXAgJj0gfjB4MDM7IC8vIDRuIGFsaWdubWVudAorCQkJcFJ4QnVmZmVyQWRkcmVzcyArPSBzdG1wOworCQkJQnVmZmVyU2l6ZSAtPSBzdG1wOworCQkJc3RtcDIgKz0gc3RtcDsKKwkJfQorCisJCS8vIFJlY2xhaW0gcmVzb3VyY2UKKwkJcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdID0gMTsKKwl9IHdoaWxlKFRSVUUpOworCisJcmV0dXJuIHN0bXAyOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTNlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfZi5oCkBAIC0wLDAgKzEsMTcgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcmZhY2UgZnVuY3Rpb24gZGVjbGFyZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQJCVdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit1bnNpZ25lZCBjaGFyCQlXYjM1UnhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X2Rlc3Ryb3koICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQJCVdiMzVSeF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit1MTYJCVdiMzVSeF9pbmRpY2F0ZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X2FkanVzdCggIFBERVNDUklQVE9SIHBSeERlcyApOwordm9pZAkJV2IzNVJ4X3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKK3ZvaWQJCVdiMzVSeCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X0NvbXBsZXRlKCAgUFVSQiBwVXJiICk7CisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MGMyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfcy5oCkBAIC0wLDAgKzEsNDggQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gd2IzNXJ4LmggLS0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyBEZWZpbml0aW9uIGZvciB0aGlzIG1vZHVsZSB1c2VkCisjZGVmaW5lIE1BWF9VU0JfUlhfQlVGRkVSCTQwOTYJLy8gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSA0MDk2IDkzMTEzMC40LmYKKworI2RlZmluZSBNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVIJRVRIRVJORVRfUlhfREVTQ1JJUFRPUlMJCS8vIE1heGltdW0gMjU0LCAyNTUgaXMgUkVTRVJWRUQgSUQKKyNkZWZpbmUgUlhfSU5URVJGQUNFCQkJCTAJLy8gSW50ZXJmYWNlIDEKKyNkZWZpbmUgUlhfUElQRQkJCQkJCTIJLy8gUGlwZSAzCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRQkJCQkxNjAwIC8vMTU2OAkvLyA4ICsgMTUzMiArIDQgKyAyNChJViBFSVYgTUlDIElDViBDUkMpIGZvciBjaGVjayBETUEgZGF0YSA5MzExMzAuNC5nCisjZGVmaW5lIFJYX0VORF9UQUcJCQkJCTB4MGJhZGJlZWYKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgc3RydWN0IF9XQjM1UlgKK3sKKwl1MzIJCQlCeXRlUmVjZWl2ZWQ7Ly8gRm9yIGNhbGN1bGF0aW5nIHRocm91Z2hwdXQgb2YgQnVsa0luCisJT1NfQVRPTUlDCQlSeEZpcmVDb3VudGVyOy8vIERvZXMgV2IzNVJ4IG1vZHVsZSBmaXJlPworCisJdTgJUnhCdWZmZXJbIE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUiBdWyAoKE1BWF9VU0JfUlhfQlVGRkVSKzMpICYgfjB4MDMgKSBdOworCXUxNglSeEJ1ZmZlclNpemVbICgoTUFYX1VTQl9SWF9CVUZGRVJfTlVNQkVSKzEpICYgfjB4MDEpIF07CisJdTgJUnhPd25lclsgKChNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVIrMykgJiB+MHgwMyApIF07Ly9Pd25lcnNoaXAgb2YgYnVmZmVyICAwOiBTVyAxOkhXCisKKwl1MzIJUnhQcm9jZXNzSW5kZXg7Ly9UaGUgbmV4dCBpbmRleCB0byBwcm9jZXNzCisJdTMyCVJ4QnVmZmVySWQ7CisJdTMyCUVQM3ZtX3N0YXRlOworCisJdTMyCXJ4X2hhbHQ7IC8vIEZvciBWTSBzdG9wcGluZworCisJdTE2CU1vcmVEYXRhU2l6ZTsKKwl1MTYJUGFja2V0U2l6ZTsKKworCXUzMglDdXJyZW50UnhCdWZmZXJJZDsgLy8gRm9yIGNvbXBsZXRlIHJvdXRpbmUgdXNhZ2UKKwl1MzIJUngzVXJiQ2FuY2VsOworCisJdTMyCUxhc3RSMTsgLy8gRm9yIFJTU0kgcmVwb3J0aW5nCisJc3RydWN0IHVyYiAqCQkJCVJ4VXJiOworCXUzMgkJRXAzRXJyb3JDb3VudDI7IC8vIDIwMDYwNjI1LjEgVXNiZCBmb3IgUnggRE1BIGVycm9yIGNvdW50CisKKwlpbnQJCUVQM1ZNX3N0YXR1czsKKwl1OCAqCXBEUng7CisKK30gV0IzNVJYLCAqUFdCMzVSWDsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWQ1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHguYwpAQCAtMCwwICsxLDMwNyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDIgV2luYm9uZCBFbGVjdHJvbmljIENvcnBvcmF0aW9uCisvLworLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgV2IzNVR4LmMKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBQcm9jZXNzaW5nIHRoZSBUeCBtZXNzYWdlIGFuZCBwdXQgaW50byBkb3duIGxheWVyCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaW5jbHVkZSAic3lzZGVmLmgiCisKKwordW5zaWduZWQgY2hhcgorV2IzNVR4X2dldF90eF9idWZmZXIocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCAqKnBCdWZmZXIpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKworCSpwQnVmZmVyID0gcFdiMzVUeC0+VHhCdWZmZXJbMF07CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgV2IzNVR4X3N0YXJ0KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIGZ1bmN0aW9uCisJaWYgKE9TX0FUT01JQ19JTkMocEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4RmlyZUNvdW50ZXIpID09IDEpIHsKKwkJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCQlXYjM1VHgocEh3RGF0YSk7CisJfSBlbHNlCisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeEZpcmVDb3VudGVyICk7Cit9CisKKwordm9pZCBXYjM1VHgocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFgJCXBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCVBBREFQVEVSCUFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworCXU4CQkqcFR4QnVmZmVyQWRkcmVzczsKKwlQTURTCQlwTWRzID0gJkFkYXB0ZXItPk1kczsKKwlzdHJ1Y3QgdXJiICoJcFVyYiA9IChzdHJ1Y3QgdXJiICopcFdiMzVUeC0+VHg0VXJiOworCWludCAgICAgICAgIAlyZXR2OworCXUzMgkJU2VuZEluZGV4OworCisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAocFdiMzVUeC0+dHhfaGFsdCkKKwkJZ290byBjbGVhbnVwOworCisJLy8gT3duZXJzaGlwIGNoZWNraW5nCisJU2VuZEluZGV4ID0gcFdiMzVUeC0+VHhTZW5kSW5kZXg7CisJaWYgKCFwTWRzLT5UeE93bmVyW1NlbmRJbmRleF0pIC8vTm8gbW9yZSBkYXRhIG5lZWQgdG8gYmUgc2VudCwgcmV0dXJuIGltbWVkaWF0ZWx5CisJCWdvdG8gY2xlYW51cDsKKworCXBUeEJ1ZmZlckFkZHJlc3MgPSBwV2IzNVR4LT5UeEJ1ZmZlcltTZW5kSW5kZXhdOworCS8vCisJLy8gSXNzdWluZyBVUkIKKwkvLworCXVzYl9maWxsX2J1bGtfdXJiKHBVcmIsIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkgIHVzYl9zbmRidWxrcGlwZShwSHdEYXRhLT5XYlVzYi51ZGV2LCA0KSwKKwkJCSAgcFR4QnVmZmVyQWRkcmVzcywgcE1kcy0+VHhCdWZmZXJTaXplWyBTZW5kSW5kZXggXSwKKwkJCSAgV2IzNVR4X2NvbXBsZXRlLCBwSHdEYXRhKTsKKworCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fUlVOTklORzsKKwlyZXR2ID0gd2JfdXNiX3N1Ym1pdF91cmIoIHBVcmIgKTsKKwlpZiAocmV0djwwKSB7CisJCXByaW50aygiRVA0IFR4IElycCBzZW5kaW5nIGVycm9yXG4iKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8vIENoZWNrIGlmIGRyaXZlciBuZWVkcyBpc3N1ZSBJcnAgZm9yIEVQMgorCXBXYjM1VHgtPlR4RmlsbENvdW50ICs9IHBNZHMtPlR4Q291bnRJbkJ1ZmZlcltTZW5kSW5kZXhdOworCWlmIChwV2IzNVR4LT5UeEZpbGxDb3VudCA+IDEyKQorCQlXYjM1VHhfRVAyVk1fc3RhcnQoIHBId0RhdGEgKTsKKworCXBXYjM1VHgtPkJ5dGVUcmFuc2ZlciArPSBwTWRzLT5UeEJ1ZmZlclNpemVbU2VuZEluZGV4XTsKKwlyZXR1cm47CisKKyBjbGVhbnVwOgorCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fU1RPUDsKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhGaXJlQ291bnRlciApOworfQorCisKK3ZvaWQgV2IzNVR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKiBwVXJiKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9IHBVcmItPmNvbnRleHQ7CisJUEFEQVBURVIJQWRhcHRlciA9IChQQURBUFRFUilwSHdEYXRhLT5BZGFwdGVyOworCVBXQjM1VFgJCXBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCVBNRFMJCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCisJcHJpbnRrKCJ3YjM1OiB0eCBjb21wbGV0ZVxuIik7CisJLy8gVmFyaWFibGUgc2V0dGluZworCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fQ09NUExFVEVEOworCXBXYjM1VHgtPkVQNFZNX3N0YXR1cyA9IHBVcmItPnN0YXR1czsgLy9TdG9yZSB0aGUgbGFzdCByZXN1bHQgb2YgSXJwCisJcE1kcy0+VHhPd25lclsgcFdiMzVUeC0+VHhTZW5kSW5kZXggXSA9IDA7Ly8gU2V0IHRoZSBvd25lci4gRnJlZSB0aGUgb3duZXIgYml0IGFsd2F5cy4KKwlwV2IzNVR4LT5UeFNlbmRJbmRleCsrOworCXBXYjM1VHgtPlR4U2VuZEluZGV4ICU9IE1BWF9VU0JfVFhfQlVGRkVSX05VTUJFUjsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApIC8vIExldCBXYldsYW5IYWx0IHRvIGhhbmRsZSBzdXJwcmlzZSByZW1vdmUKKwkJZ290byBlcnJvcjsKKworCWlmIChwV2IzNVR4LT50eF9oYWx0KQorCQlnb3RvIGVycm9yOworCisJLy8gVGhlIFVSQiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKKwlpZiAocFdiMzVUeC0+RVA0Vk1fc3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKCJVUkIgc3VibWlzc2lvbiBmYWlsZWRcbiIpOworCQlwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9IFZNX1NUT1A7CisJCWdvdG8gZXJyb3I7CisJfQorCisJTWRzX1R4KEFkYXB0ZXIpOworCVdiMzVUeChwSHdEYXRhKTsKKwlyZXR1cm47CisKK2Vycm9yOgorCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeEZpcmVDb3VudGVyICk7CisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9TVE9QOworfQorCit2b2lkIFdiMzVUeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJcFdiMzVUeC0+VHhTZW5kSW5kZXggPSAwOworCXBXYjM1VHgtPnR4X2hhbHQgPSAwOworfQorCit1bnNpZ25lZCBjaGFyIFdiMzVUeF9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJcFdiMzVUeC0+VHg0VXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAoIXBXYjM1VHgtPlR4NFVyYikKKwkJcmV0dXJuIEZBTFNFOworCisJcFdiMzVUeC0+VHgyVXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAoIXBXYjM1VHgtPlR4MlVyYikKKwl7CisJCXVzYl9mcmVlX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgV2IzNVR4X3N0b3AocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBUcnlpbmcgdG8gY2FuY2VsaW5nIHRoZSBUcnAgb2YgRVAyCisJaWYgKHBXYjM1VHgtPkVQMnZtX3N0YXRlID09IFZNX1JVTk5JTkcpCisJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsgLy8gT25seSB1c2UgdW5saW5rLCBsZXQgV2IzNVR4X2Rlc3Ryb3QgdG8gZnJlZSB0aGVtCisJI2lmZGVmIF9QRV9UWF9EVU1QXworCVdCREVCVUcoKCJFUDIgVHggc3RvcFxuIikpOworCSNlbmRpZgorCisJLy8gVHJ5aW5nIHRvIGNhbmNlbGluZyB0aGUgSXJwIG9mIEVQNAorCWlmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKQorCQl1c2JfdW5saW5rX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVUeF9kZXN0cm90IHRvIGZyZWUgdGhlbQorCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwlXQkRFQlVHKCgiRVA0IFR4IHN0b3BcbiIpKTsKKwkjZW5kaWYKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgV2IzNVR4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBXYWl0IGZvciBWTSBzdG9wCisJZG8geworCQlPU19TTEVFUCgxMDAwMCk7ICAvLyBEZWxheSBmb3Igd2FpdGluZyBmdW5jdGlvbiBlbnRlciA5NDA2MjMuMS5hCisJfSB3aGlsZSggKHBXYjM1VHgtPkVQMnZtX3N0YXRlICE9IFZNX1NUT1ApICYmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSAhPSBWTV9TVE9QKSApOworCU9TX1NMRUVQKDEwMDAwKTsgIC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmIKKworCWlmIChwV2IzNVR4LT5UeDRVcmIpCisJCXVzYl9mcmVlX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7CisKKwlpZiAocFdiMzVUeC0+VHgyVXJiKQorCQl1c2JfZnJlZV91cmIoIHBXYjM1VHgtPlR4MlVyYiApOworCisJI2lmZGVmIF9QRV9UWF9EVU1QXworCVdCREVCVUcoKCJXYjM1VHhfZGVzdHJveSBPS1xuIikpOworCSNlbmRpZgorfQorCit2b2lkIFdiMzVUeF9DdXJyZW50VGltZShwaHdfZGF0YV90IHBId0RhdGEsIHUzMiBUaW1lQ291bnQpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwl1bnNpZ25lZCBjaGFyIFRyaWdnZXIgPSBGQUxTRTsKKworCWlmIChwV2IzNVR4LT5UeFRpbWVyID4gVGltZUNvdW50KQorCQlUcmlnZ2VyID0gVFJVRTsKKwllbHNlIGlmIChUaW1lQ291bnQgPiAocFdiMzVUeC0+VHhUaW1lcis1MDApKQorCQlUcmlnZ2VyID0gVFJVRTsKKworCWlmIChUcmlnZ2VyKSB7CisJCXBXYjM1VHgtPlR4VGltZXIgPSBUaW1lQ291bnQ7CisJCVdiMzVUeF9FUDJWTV9zdGFydCggcEh3RGF0YSApOworCX0KK30KKwordm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gZnVuY3Rpb24KKwlpZiAoT1NfQVRPTUlDX0lOQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKSA9PSAxKSB7CisJCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fUlVOTklORzsKKwkJV2IzNVR4X0VQMlZNKCBwSHdEYXRhICk7CisJfQorCWVsc2UKKwkJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKTsKK30KKworCit2b2lkIFdiMzVUeF9FUDJWTShwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgdXJiICoJcFVyYiA9IChzdHJ1Y3QgdXJiICopcFdiMzVUeC0+VHgyVXJiOworCXUzMiAqCXBsdG1wID0gKHUzMiAqKXBXYjM1VHgtPkVQMl9idWY7CisJaW50CQlyZXR2OworCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlIHx8IHBId0RhdGEtPkh3U3RvcCkKKwkJZ290byBlcnJvcjsKKworCWlmIChwV2IzNVR4LT50eF9oYWx0KQorCQlnb3RvIGVycm9yOworCisJLy8KKwkvLyBJc3N1aW5nIFVSQgorCS8vCisJdXNiX2ZpbGxfaW50X3VyYiggcFVyYiwgcEh3RGF0YS0+V2JVc2IudWRldiwgdXNiX3JjdmludHBpcGUocEh3RGF0YS0+V2JVc2IudWRldiwyKSwKKwkJCSAgcGx0bXAsIE1BWF9JTlRFUlJVUFRfTEVOR1RILCBXYjM1VHhfRVAyVk1fY29tcGxldGUsIHBId0RhdGEsIDMyKTsKKworCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fUlVOTklORzsKKwlyZXR2ID0gd2JfdXNiX3N1Ym1pdF91cmIoIHBVcmIgKTsKKworCWlmIChyZXR2IDwgMCkgeworCQkjaWZkZWYgX1BFX1RYX0RVTVBfCisJCVdCREVCVUcoKCJFUDIgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJI2VuZGlmCisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuOworZXJyb3I6CisJcFdiMzVUeC0+RVAydm1fc3RhdGUgPSBWTV9TVE9QOworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeFJlc3VsdENvdW50ICk7Cit9CisKKwordm9pZCBXYjM1VHhfRVAyVk1fY29tcGxldGUoc3RydWN0IHVyYiAqIHBVcmIpCit7CisJcGh3X2RhdGFfdAlwSHdEYXRhID0gcFVyYi0+Y29udGV4dDsKKwlUMDJfREVTQ1JJUFRPUglUMDIsIFRTVEFUVVM7CisJUEFEQVBURVIJQWRhcHRlciA9IChQQURBUFRFUilwSHdEYXRhLT5BZGFwdGVyOworCVBXQjM1VFgJCXBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCXUzMiAqCQlwbHRtcCA9ICh1MzIgKilwV2IzNVR4LT5FUDJfYnVmOworCXUzMgkJaTsKKwl1MTYJCUludGVycnVwdEluTGVuZ3RoOworCisKKwkvLyBWYXJpYWJsZSBzZXR0aW5nCisJcFdiMzVUeC0+RVAydm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVUeC0+RVAyVk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOworCisJLy8gRm9yIExpbnV4IDIuNC4gSW50ZXJydXB0IHdpbGwgYWx3YXlzIHRyaWdnZXIKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKSAvLyBMZXQgV2JXbGFuSGFsdCB0byBoYW5kbGUgc3VycHJpc2UgcmVtb3ZlCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocFdiMzVUeC0+dHhfaGFsdCkKKwkJZ290byBlcnJvcjsKKworCS8vVGhlIFVyYiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKKwlpZiAocFdiMzVUeC0+RVAyVk1fc3RhdHVzICE9IDApIHsKKwkJV0JERUJVRygoIkVQMiBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKKwkJcFdiMzVUeC0+RVAydm1fc3RhdGU9IFZNX1NUT1A7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLy8gVXBkYXRlIHRoZSBUeCByZXN1bHQKKwlJbnRlcnJ1cHRJbkxlbmd0aCA9IHBVcmItPmFjdHVhbF9sZW5ndGg7CisJLy8gTW9kaWZ5IGZvciBtaW5pbXVtIG1lbW9yeSBhY2Nlc3MgYW5kIERXT1JEIGFsaWdubWVudC4KKwlUMDIudmFsdWUgPSBjcHVfdG9fbGUzMihwbHRtcFswXSkgPj4gODsgLy8gWzMxOjhdIC0+IFsyNDowXQorCUludGVycnVwdEluTGVuZ3RoIC09IDE7Ly8gMjAwNTEyMjEuMS5jIE1vZGlmeSB0aGUgZm9sbG93IGZvciBtb3JlIHN0YWJsZQorCUludGVycnVwdEluTGVuZ3RoID4+PSAyOyAvLyBJbnRlcnJ1cHRJbkxlbmd0aC80CisJZm9yIChpID0gMTsgaSA8PSBJbnRlcnJ1cHRJbkxlbmd0aDsgaSsrKSB7CisJCVQwMi52YWx1ZSB8PSAoKGNwdV90b19sZTMyKHBsdG1wW2ldKSAmIDB4ZmYpIDw8IDI0KTsKKworCQlUU1RBVFVTLnZhbHVlID0gVDAyLnZhbHVlOyAgLy8yMDA2MTAwOSBhbnNvbidzIGVuZGlhbgorCQlNZHNfU2VuZENvbXBsZXRlKCBBZGFwdGVyLCAmVFNUQVRVUyApOworCQlUMDIudmFsdWUgPSBjcHVfdG9fbGUzMihwbHRtcFtpXSkgPj4gODsKKwl9CisKKwlyZXR1cm47CitlcnJvcjoKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhSZXN1bHRDb3VudCApOworCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fU1RPUDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3YjEyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9mLmgKQEAgLTAsMCArMSwyMCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbCgJIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordW5zaWduZWQgY2hhciBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICoqcEJ1ZmZlciApOworCit2b2lkIFdiMzVUeF9FUDJWTSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X0VQMlZNX2NvbXBsZXRlKCAgUFVSQiBwdXJiICk7CisKK3ZvaWQgV2IzNVR4X3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVUeF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVUeCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfY29tcGxldGUoICBQVVJCIHB1cmIgKTsKK3ZvaWQgV2IzNVR4X3Jlc2V0X2Rlc2NyaXB0b3IoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKwordm9pZCBXYjM1VHhfQ3VycmVudFRpbWUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgVGltZUNvdW50ICk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0MzI1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9zLmgKQEAgLTAsMCArMSw0NyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIElTODlDMzUgVHggcmVsYXRlZCBkZWZpbml0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBUWF9JTlRFUkZBQ0UJCQkwCS8vIEludGVyZmFjZSAxCisjZGVmaW5lIFRYX1BJUEUJCQkJCTMJLy8gZW5kcG9pbnQgNAorI2RlZmluZSBUWF9JTlRFUlJVUFQJCQkxCS8vIGVuZHBvaW50IDIKKyNkZWZpbmUgTUFYX0lOVEVSUlVQVF9MRU5HVEgJNjQJLy8gSXQgbXVzdCBiZSA2NCBmb3IgRVAyIGhhcmR3YXJlCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCit0eXBlZGVmIHN0cnVjdCBfV0IzNVRYCit7CisJLy8gRm9yIFR4IGJ1ZmZlcgorCXU4CVR4QnVmZmVyWyBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgXVsgTUFYX1VTQl9UWF9CVUZGRVIgXTsKKworCS8vIEZvciBJbnRlcnJ1cHQgcGlwZQorCXU4CUVQMl9idWZbTUFYX0lOVEVSUlVQVF9MRU5HVEhdOworCisJT1NfQVRPTUlDCVR4UmVzdWx0Q291bnQ7Ly8gRm9yIHRocmVhZCBjb250cm9sIG9mIEVQMiA5MzExMzAuNC5tCisJT1NfQVRPTUlDCVR4RmlyZUNvdW50ZXI7Ly8gRm9yIHRocmVhZCBjb250cm9sIG9mIEVQNCA5MzExMzAuNC5uCisJdTMyCQkJQnl0ZVRyYW5zZmVyOworCisJdTMyCSAgICBUeFNlbmRJbmRleDsvLyBUaGUgbmV4dCBpbmRleCBvZiBNZHMgYXJyYXkgdG8gYmUgc2VudAorCXUzMgkgICAgRVAydm1fc3RhdGU7IC8vIGZvciBFUDJ2bSBzdGF0ZQorCXUzMgkgICAgRVA0dm1fc3RhdGU7IC8vIGZvciBFUDR2bSBzdGF0ZQorCXUzMgkgICAgdHhfaGFsdDsgLy8gU3RvcHBpbmcgVk0KKworCXN0cnVjdCB1cmIgKgkJCQlUeDRVcmI7CisJc3RydWN0IHVyYiAqCQkJCVR4MlVyYjsKKworCWludAkJRVAyVk1fc3RhdHVzOworCWludAkJRVA0Vk1fc3RhdHVzOworCisJdTMyCVR4RmlsbENvdW50OyAvLyAyMDA2MDkyOAorCXUzMglUeFRpbWVyOyAvLyAyMDA2MDkyOCBBZGQgaWYgc2VuZGluZyBwYWNrZXQgbm90IGdyZWF0IHRoYW4gMTMKKworfSBXQjM1VFgsICpQV0IzNVRYOworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3didXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YTc4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYi5jCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICoKKyAqIERpc3RyaWJ1dGUgdW5kZXIgR1BMdjIuCisgKi8KKyNpbmNsdWRlICJzeXNkZWYuaCIKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3YjM1X3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7VVNCX0RFVklDRSgweDA0MTYsIDB4MDAzNSl9LAorCXtVU0JfREVWSUNFKDB4MThFOCwgMHg2MjAxKX0sCisJe1VTQl9ERVZJQ0UoMHgxOEU4LCAweDYyMDYpfSwKKwl7VVNCX0RFVklDRSgweDE4RTgsIDB4NjIxNyl9LAorCXtVU0JfREVWSUNFKDB4MThFOCwgMHg2MjMwKX0sCisJe1VTQl9ERVZJQ0UoMHgxOEU4LCAweDYyMzMpfSwKKwl7VVNCX0RFVklDRSgweDExMzEsIDB4MjAzNSl9LAorCXsgMCwgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHdiMzVfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdic29mdF9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2Jzb2Z0X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKK307CisKK2ludCB3YnNvZnRfZW5hYmxlZDsKK3N0cnVjdCBpZWVlODAyMTFfaHcgKm15X2RldjsKK1BBREFQVEVSIG15X2FkYXB0ZXI7CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlwcmludGsoIndic29mdF9hZGQgaW50ZXJmYWNlIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdic29mdF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXByaW50aygid2Jzb2Z0X3JlbW92ZSBpbnRlcmZhY2UgY2FsbGVkXG4iKTsKK30KKworc3RhdGljIHZvaWQgd2Jzb2Z0X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2Jzb2Z0X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKK3sKKwl1bnNpZ25lZCBpbnQgYml0X25yLCBuZXdfZmxhZ3M7CisJdTMyIG1jX2ZpbHRlclsyXTsKKwlpbnQgaTsKKworCW5ld19mbGFncyA9IDA7CisKKwlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB7CisJCW5ld19mbGFncyB8PSBGSUZfUFJPTUlTQ19JTl9CU1M7CisJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IH4wOworCX0gZWxzZSBpZiAoKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkgfHwgKG1jX2NvdW50ID4gMzIpKSB7CisJCW5ld19mbGFncyB8PSBGSUZfQUxMTVVMVEk7CisJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IH4wOworCX0gZWxzZSB7CisJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7CisJCQlpZiAoIW1jbGlzdCkKKwkJCQlicmVhazsKKwkJCXByaW50aygiU2hvdWxkIGNhbGwgZXRoZXJfY3JjIGhlcmVcbiIpOworCQkJLy9iaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OworCQkJYml0X25yID0gMDsKKworCQkJYml0X25yICY9IDB4M0Y7CisJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKKwkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwkJfQorCX0KKworCWRldi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1M7CisKKwkqdG90YWxfZmxhZ3MgPSBuZXdfZmxhZ3M7Cit9CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljaGFyICpidWZmZXIgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKwlwcmludGsoIlNlbmRpbmcgZnJhbWUgJWQgYnl0ZXNcbiIsIHNrYi0+bGVuKTsKKwltZW1jcHkoYnVmZmVyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlpZiAoMSA9PSBNTE1FU2VuZEZyYW1lKG15X2FkYXB0ZXIsIGJ1ZmZlciwgc2tiLT5sZW4sIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlQpKQorCQlwcmludGsoImZyYW1lIHNlbnQgb2sgKCVkIGJ5dGVzKT9cbiIsIHNrYi0+bGVuKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisKK3N0YXRpYyBpbnQgd2Jzb2Z0X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwl3YnNvZnRfZW5hYmxlZCA9IDE7CisJcHJpbnRrKCJ3YnNvZnRfc3RhcnQgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3YnNvZnRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCUNoYW5JbmZvIGNoOworCXByaW50aygid2Jzb2Z0X2NvbmZpZyBjYWxsZWRcbiIpOworCisJY2guYmFuZCA9IDE7CisJY2guQ2hhbk5vID0gMTsJLyogU2hvdWxkIHVzZSBjaGFubmVsX251bSwgb3Igc29tZXRoaW5nLCBhcyB0aGF0IGlzIGFscmVhZHkgcHJlLXRyYW5zbGF0ZWQgKi8KKworCisJaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoJm15X2FkYXB0ZXItPnNId0RhdGEsIGNoKTsKKwloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJm15X2FkYXB0ZXItPnNId0RhdGEsIGNvbmYtPmJlYWNvbl9pbnQpOworLy8JaGFsX3NldF9jYXBfaW5mbygmbXlfYWRhcHRlci0+c0h3RGF0YSwgPz8gKTsKKy8vIGhhbF9zZXRfc3NpZChwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqIHBzc2lkLCAgdTggc3NpZF9sZW4pOyA/PworCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCgmbXlfYWRhcHRlci0+c0h3RGF0YSwgMSk7CisJaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMoJm15X2FkYXB0ZXItPnNId0RhdGEsICAxKTsKKwloYWxfc2V0X2FjY2VwdF9tdWx0aWNhc3QoJm15X2FkYXB0ZXItPnNId0RhdGEsICAxKTsKKwloYWxfc2V0X2FjY2VwdF9iZWFjb24oJm15X2FkYXB0ZXItPnNId0RhdGEsICAxKTsKKwloYWxfc2V0X3JhZGlvX21vZGUoJm15X2FkYXB0ZXItPnNId0RhdGEsICAwKTsKKwkvL2hhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IG51bWJlciApCisJLy9oYWxfc2V0X3JmX3Bvd2VyKHBod19kYXRhX3QgcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKKworCisvLwloYWxfc3RhcnRfYnNzKCZteV9hZGFwdGVyLT5zSHdEYXRhLCBXTEFOX0JTU1RZUEVfSU5GUkFTVFJVQ1RVUkUpOwk/PworCisvL3ZvaWQgaGFsX3NldF9yYXRlcyhwaHdfZGF0YV90IHBId0RhdGEsIHU4ICogcGJzc19yYXRlcywKKy8vCQkgICB1OCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgYmFzaWNfcmF0ZV9zZXQpCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3YnNvZnRfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlwcmludGsoIndic29mdF9jb25maWdfaW50ZXJmYWNlIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgd2Jzb2Z0X2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXByaW50aygid2Jzb2Z0X2dldF90c2YgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHdic29mdF9vcHMgPSB7CisJLnR4CQkJPSB3YnNvZnRfdHgsCisJLnN0YXJ0CQkJPSB3YnNvZnRfc3RhcnQsCQkvKiBTdGFydCBjYW4gYmUgcHJldHR5IG11Y2ggZW1wdHkgYXMgd2UgZG8gV2JXTGFuSW5pdGlhbGl6ZSgpIGR1cmluZyBwcm9iZT8gKi8KKwkuc3RvcAkJCT0gd2Jzb2Z0X3N0b3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gd2Jzb2Z0X2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UJPSB3YnNvZnRfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSB3YnNvZnRfY29uZmlnLAorCS5jb25maWdfaW50ZXJmYWNlCT0gd2Jzb2Z0X2NvbmZpZ19pbnRlcmZhY2UsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSB3YnNvZnRfY29uZmlndXJlX2ZpbHRlciwKKwkuZ2V0X3N0YXRzCQk9IHdic29mdF9nZXRfc3RhdHMsCisJLmdldF90eF9zdGF0cwkJPSB3YnNvZnRfZ2V0X3R4X3N0YXRzLAorCS5nZXRfdHNmCQk9IHdic29mdF9nZXRfdHNmLAorLy8gY29uZl90eDogaGFsX3NldF9jd21pbigpL2hhbF9zZXRfY3dtYXg7Cit9OworCitzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgeworfTsKKworCisvLyBVc2Iga2VybmVsIHN1YnN5c3RlbSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGEgbmV3IGRldmljZSBpcyBwbHVnZ2VkIGludG8uCitpbnQgd2IzNV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKQoreworCVBBREFQVEVSCUFkYXB0ZXI7CisJUFdCTElOVVgJcFdiTGludXg7CisJUFdCVVNCCQlwV2JVc2I7CisgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCWludAlyZXQgPSAtMTsKKwl1MzIJbHRtcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwl1c2JfZ2V0X2Rldih1ZGV2KTsKKworCXByaW50aygiW3czNXVuZF13YjM1X3Byb2JlIC0+XG4iKTsKKworCS8vIDIwMDYwNjMwLjIgQ2hlY2sgdGhlIGRldmljZSBpZiBpdCBhbHJlYWR5IGJlIG9wZW5lZAorCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUoIHVkZXYsIDAgKSwKKwkJCSAgICAgIDB4MDEsIFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfREVWSUNFfFVTQl9ESVJfSU4sCisJCQkgICAgICAweDAsIDB4NDAwLCAmbHRtcCwgNCwgSFoqMTAwICk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlsdG1wID0gY3B1X3RvX2xlMzIobHRtcCk7CisJaWYgKGx0bXApICAvLyBJcyBhbHJlYWR5IGluaXRpYWxpemVkPworCQlnb3RvIGVycm9yOworCisJQWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKEFEQVBURVIpLCBHRlBfS0VSTkVMKTsKKworCW15X2FkYXB0ZXIgPSBBZGFwdGVyOworCXBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisJcFdiVXNiID0gJkFkYXB0ZXItPnNId0RhdGEuV2JVc2I7CisJcFdiVXNiLT51ZGV2ID0gdWRldjsKKworICAgICAgICBpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKyAgICAgICAgZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJaWYgKGVuZHBvaW50WzJdLndNYXhQYWNrZXRTaXplID09IDUxMikgeworCQlwcmludGsoIlt3MzV1bmRdIFdvcmtpbmcgb24gVVNCIDIuMFxuIik7CisJCXBXYlVzYi0+SXNVc2IyMCA9IDE7CisJfQorCisJaWYgKCFXYldMYW5Jbml0aWFsaXplKEFkYXB0ZXIpKSB7CisJCXByaW50aygiW3czNXVuZF1XYldMYW5Jbml0aWFsaXplIGZhaWxcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXsKKwkJc3RydWN0IHdic29mdF9wcml2ICpwcml2OworCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7CisJCXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJCWludCByZXM7CisKKwkJZGV2ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZ3YnNvZnRfb3BzKTsKKworCQlpZiAoIWRldikgeworCQkJcHJpbnRrKCJ3MzV1bmQ6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIgKTsKKwkJCUJVRygpOworCQl9CisKKwkJbXlfZGV2ID0gZGV2OworCisJCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJnVkZXYtPmRldik7CisJCXsKKwkJCXBod19kYXRhX3QgcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCQkJdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsKKwkJCWhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MocEh3RGF0YSwgZGV2X2FkZHIpOworCQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBkZXZfYWRkcik7CisJCX0KKworCisJCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSAxMjsJLyogRklYTUUgKi8KKwkJZGV2LT5mbGFncyA9IDA7CisKKwkJZGV2LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDsKKy8vCQlkZXYtPm1heF9yc3NpID0gMTAwOworCisJCWRldi0+cXVldWVzID0gMTsKKworCQliYW5kLmNoYW5uZWxzID0gd2Jzb2Z0X2NoYW5uZWxzOworCQliYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdic29mdF9jaGFubmVscyk7CisJCWJhbmQuYml0cmF0ZXMgPSB3YnNvZnRfcmF0ZXM7CisJCWJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUod2Jzb2Z0X3JhdGVzKTsKKworCQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZiYW5kOworI2lmIDAKKwkJd2Jzb2Z0X21vZGVzWzBdLm51bV9jaGFubmVscyA9IDE7CisJCXdic29mdF9tb2Rlc1swXS5jaGFubmVscyA9IHdic29mdF9jaGFubmVsczsKKwkJd2Jzb2Z0X21vZGVzWzBdLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7CisJCXdic29mdF9tb2Rlc1swXS5udW1fcmF0ZXMgPSBBUlJBWV9TSVpFKHdic29mdF9yYXRlcyk7CisJCXdic29mdF9tb2Rlc1swXS5yYXRlcyA9IHdic29mdF9yYXRlczsKKworCQlyZXMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKGRldiwgJndic29mdF9tb2Rlc1swXSk7CisJCUJVR19PTihyZXMpOworI2VuZGlmCisKKwkJcmVzID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7CisJCUJVR19PTihyZXMpOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoIGludGYsIEFkYXB0ZXIgKTsKKworCXByaW50aygiW3czNXVuZF0gX3Byb2JlIE9LXG4iKTsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIHBhY2tldF9jYW1lKGNoYXIgKnBSeEJ1ZmZlckFkZHJlc3MsIGludCBQYWNrZXRTaXplKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0gezB9OworCisJaWYgKCF3YnNvZnRfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihQYWNrZXRTaXplKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBwYWNrZXQsIEZJWE1FXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1lbWNweShza2JfcHV0KHNrYiwgUGFja2V0U2l6ZSksCisJICAgICAgIHBSeEJ1ZmZlckFkZHJlc3MsCisJICAgICAgIFBhY2tldFNpemUpOworCisvKgorCXJ4X3N0YXR1cy5yYXRlID0gMTA7CisJcnhfc3RhdHVzLmNoYW5uZWwgPSAxOworCXJ4X3N0YXR1cy5mcmVxID0gMTIzNDU7CisJcnhfc3RhdHVzLnBoeW1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7CisqLworCisJaWVlZTgwMjExX3J4X2lycXNhZmUobXlfZGV2LCBza2IsICZyeF9zdGF0dXMpOworfQorCit1bnNpZ25lZCBjaGFyCitXYlVzYl9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlyZXR1cm4gMTsKK30KKworCit2b2lkCitXYlVzYl9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKK30KKworaW50IHdiMzVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVBBREFQVEVSIEFkYXB0ZXIgPSAoUEFEQVBURVIpbmV0ZGV2LT5wcml2OworCXBod19kYXRhX3QgcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCisgICAgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisKKwkvL1RPRE8gOiBwdXQgaGVyZSB0ZW1wb3JhcmlseQorCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdChwSHdEYXRhLCAxKTsgLy8gb3BlbiBhY2NlcHQgYnJvYWRjYXN0CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdiMzVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2IzNV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCVBXQkxJTlVYIHBXYkxpbnV4OworCVBBREFQVEVSIEFkYXB0ZXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKyAgICAgICAgcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKworCS8vIENhcmQgcmVtb3ZlCisJV2JXbGFuSGFsdChBZGFwdGVyKTsKKworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgd2IzNV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInczNXVuZCIsCisJLmlkX3RhYmxlCT0gd2IzNV90YWJsZSwKKwkucHJvYmUJCT0gd2IzNV9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHdiMzVfZGlzY29ubmVjdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdiMzVfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJndiMzVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdiMzVfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ3YjM1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdiMzVfaW5pdCk7Cittb2R1bGVfZXhpdCh3YjM1X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2JfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2JfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZTI5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYl9mLmgKQEAgLTAsMCArMSwzNCBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YnVzYl9mLmgKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCBkcml2ZXIuCisvLworLy8gIEF1dGhvcjoKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKK2ludCB3YjM1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgd2IzNV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3Vuc2lnbmVkIGNoYXIgV2JVc2JfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpOwordm9pZCBXYlVzYl9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSk7Cit1bnNpZ25lZCBjaGFyIFdiV0xhbkluaXRpYWxpemUoUEFEQVBURVIgQWRhcHRlcik7CisjZGVmaW5lCVdiVXNiX1N0b3AoIF9BICkKKworaW50IHdiMzVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKK3ZvaWQgd2IzNV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworCisjZGVmaW5lIHdiX3VzYl9zdWJtaXRfdXJiKF9BKSB1c2Jfc3VibWl0X3VyYihfQSwgR0ZQX0FUT01JQykKKyNkZWZpbmUgd2JfdXNiX2FsbG9jX3VyYihfQSkgdXNiX2FsbG9jX3VyYihfQSwgR0ZQX0FUT01JQykKKworI2RlZmluZSBXYlVzYl9DaGVja0ZvckhhbmcoIF9QICkKKyNkZWZpbmUgV2JVc2JfRGV0ZWN0U3RhcnQoIF9QLCBfSSApCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2Jfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2Jfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzFkNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYl9zLmgKQEAgLTAsMCArMSw0MiBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YnVzYl9zLmgKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCBkcml2ZXIuCisvLworLy8gIEF1dGhvcjoKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKyNkZWZpbmUgT1NfU0xFRVAoIF9NVCApCXsgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsgXAorCQkJICBzY2hlZHVsZV90aW1lb3V0KCBfTVQqSFovMTAwMDAwMCApOyB9CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBSV19DT05URVhUIC0tCisvLworLy8gIFVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCBpbyBpcnBzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBzdHJ1Y3QgX1JXX0NPTlRFWFQKK3sKKwl2b2lkKgkJCXBId0RhdGE7CisJUFVSQgkJCXBVcmI7CisJdm9pZCoJCQlwQ2FsbEJhY2tGdW5jdGlvblBhcmFtZXRlcjsKK30gUldfQ09OVEVYVCwgKlBSV19DT05URVhUOworCisKKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk9yaWdpbmFsIGJ5OiBKZWZmIExlZTxZWV9MZWVAaXNzYy5jb20udHc+IEFkYXB0ZWQgdG8gMi42LnggYnkgQ29zdGFudGlubyBMZWFuZHJvIChSeGFydCBEZXNrdG9wKSA8bGVfY29zdGFudGlub0BwaXhhcnRhcmdlbnRpbmEuY29tLmFyPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAiSVM4OUMzNSA4MDIuMTFiZyBXTEFOIFVTQiBEcml2ZXIiCisKKworCit0eXBlZGVmIHN0cnVjdCBfV0JVU0IgeworCXUzMglJc1VzYjIwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXUzMglEZXRlY3RDb3VudDsKK30gV0JVU0IsICpQV0JVU0I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xvY2FscGFyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OGNmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaApAQCAtMCwwICsxLDI3NSBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBMb2NhbFBhcmEuaCAtCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vRGVmaW5lIHRoZSBsb2NhbCBhYmlsaXR5CisKKyNkZWZpbmUgTE9DQUxfREVGQVVMVF9CRUFDT05fUEVSSU9ECQkJMTAwCQkvL21zCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfQVRJTV9XSU5ET1cJCQkwCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfRVJQX0NBUEFCSUxJVFkJCTB4MDQzMQkvLzB4MDAwMToJRVNTCisJCQkJCQkJCQkJCQkJLy8weDAwMTA6CVByaXZhY3kKKwkJCQkJCQkJCQkJCQkvLzB4MDAyMDoJc2hvcnQgcHJlYW1ibGUKKwkJCQkJCQkJCQkJCQkvLzB4MDQwMDoJc2hvcnQgc2xvdCB0aW1lCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfTElTVEVOX0lOVEVSVkFMCQk1CisKKy8vI2RlZmluZSBMT0NBTF9ERUZBVUxUXzI0X0NIQU5ORUxfTlVNCQkxMQkJLy8gY2hhbm5lbCAxLi4xMQorI2RlZmluZSBMT0NBTF9ERUZBVUxUXzI0X0NIQU5ORUxfTlVNCQkxMwkJLy8gY2hhbm5lbCAxLi4xMworI2RlZmluZSBMT0NBTF9ERUZBVUxUXzVfQ0hBTk5FTF9OVU0JCQk4CQkvLyBjaGFubmVsIDM2Li42NAorCisjZGVmaW5lIExPQ0FMX1VTQV8yNF9DSEFOTkVMX05VTQkJCTExCisjZGVmaW5lIExPQ0FMX1VTQV81X0NIQU5ORUxfTlVNCQkJCTEyCisjZGVmaW5lIExPQ0FMX0VVUk9QRV8yNF9DSEFOTkVMX05VTQkJCTEzCisjZGVmaW5lIExPQ0FMX0VVUk9QRV81X0NIQU5ORUxfTlVNCQkJMTkKKyNkZWZpbmUgTE9DQUxfSkFQQU5fMjRfQ0hBTk5FTF9OVU0JCQkxNAorI2RlZmluZSBMT0NBTF9KQVBBTl81X0NIQU5ORUxfTlVNCQkJMTEKKyNkZWZpbmUgTE9DQUxfVU5LTk9XTl8yNF9DSEFOTkVMX05VTQkJMTQKKyNkZWZpbmUgTE9DQUxfVU5LTk9XTl81X0NIQU5ORUxfTlVNCQkJMzQJLy9ub3QgaW5jbHVkZSAxNjUKKworCisjZGVmaW5lIHBzTE9DQUwJCQkoJihBZGFwdGVyLT5zTG9jYWxQYXJhKSkKKworI2RlZmluZSBNT0RFXzgwMl8xMV9CRwkJCTAKKyNkZWZpbmUgTU9ERV84MDJfMTFfQQkJCTEKKyNkZWZpbmUgTU9ERV84MDJfMTFfQUJHCQkJMgorI2RlZmluZSBNT0RFXzgwMl8xMV9CR19JQlNTCQkzCisjZGVmaW5lIE1PREVfODAyXzExX0IJCQk0CisjZGVmaW5lIE1PREVfQVVUTwkJCQkyNTUKKworI2RlZmluZSBCQU5EX1RZUEVfRFNTUwkJCTAKKyNkZWZpbmUgQkFORF9UWVBFX09GRE1fMjQJCTEKKyNkZWZpbmUgQkFORF9UWVBFX09GRE1fNQkJMgorCisvL3JlZmVyIEJpdG1hcDJSYXRlVmFsdWUgdGFibGUKKyNkZWZpbmUgTE9DQUxfQUxMX1NVUFBPUlRFRF9SQVRFU19CSVRNQVAJCTB4MTMwYzFhNjYJLy90aGUgYml0bWFwIHZhbHVlIG9mIGFsbCB0aGUgSC9XIHN1cHBvcnRlZCByYXRlcworCQkJCQkJCQkJCQkJCQkJLy8xLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisjZGVmaW5lIExPQ0FMX09GRE1fU1VQUE9SVEVEX1JBVEVTX0JJVE1BUAkJMHgxMzBjMTI0MAkvL3RoZSBiaXRtYXAgdmFsdWUgb2YgYWxsIHRoZSBIL1cgc3VwcG9ydGVkIHJhdGVzCisJCQkJCQkJCQkJCQkJCQkvL2V4Y2VwdCB0byBub24tT0ZETSByYXRlcworCQkJCQkJCQkJCQkJCQkJLy82LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisKKyNkZWZpbmUgTE9DQUxfMTFCX1NVUFBPUlRFRF9SQVRFX0JJVE1BUAkJCTB4ODI2CisjZGVmaW5lIExPQ0FMXzExQl9CQVNJQ19SQVRFX0JJVE1BUAkJCQkweDgyNgorI2RlZmluZSBMT0NBTF8xMUJfT1BFUkFUSU9OX1JBVEVfQklUTUFQCQkJMHg4MjYKKyNkZWZpbmUgTE9DQUxfMTFHX0JBU0lDX1JBVEVfQklUTUFQCQkJCTB4ODI2CQkvLzEsIDIsIDUuNSwgMTEKKyNkZWZpbmUgTE9DQUxfMTFHX09QRVJBVElPTl9SQVRFX0JJVE1BUAkJCTB4MTMwYzEyNDAJLy82LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisjZGVmaW5lIExPQ0FMXzExQV9CQVNJQ19SQVRFX0JJVE1BUAkJCQkweDAxMDAxMDQwCS8vNiwgMTIsIDI0CisjZGVmaW5lIExPQ0FMXzExQV9PUEVSQVRJT05fUkFURV9CSVRNQVAJCQkweDEyMGMwMjAwCS8vOSwgMTgsIDM2LCA0OCwgNTQKKworCisKKyNkZWZpbmUgUFdSX0FDVElWRQkJMAorI2RlZmluZSBQV1JfU0FWRQkJMQorI2RlZmluZSBQV1JfVFhfSURMRV9DWUNMRQkJCTYKKworLy9iUHJlYW1ibGVNb2RlIGFuZCBiU2xvdFRpbWVNb2RlCisjZGVmaW5lIEFVVE9fTU9ERQkJCTAKKyNkZWZpbmUgTE9OR19NT0RFCQkJMQorCisvL1JlZ2lvbiBkZWZpbml0aW9uCisjZGVmaW5lIFJFR0lPTl9BVVRPCQkJMHhmZgorI2RlZmluZSBSRUdJT05fVU5LTk9XTgkJMAorI2RlZmluZSBSRUdJT05fRVVST1BFCQkxCS8vRVRTSQorI2RlZmluZSBSRUdJT05fSkFQQU4JCTIJLy9NS0sKKyNkZWZpbmUgUkVHSU9OX1VTQQkJCTMJLy9GQ0MKKyNkZWZpbmUJUkVHSU9OX0ZSQU5DRQkJNAkvL0ZSQU5DRQorI2RlZmluZSBSRUdJT05fU1BBSU4JCTUJLy9TUEFJTgorI2RlZmluZSBSRUdJT05fSVNSQUVMCQk2CS8vSVNSQUVMCisvLyNkZWZpbmUgUkVHSU9OX0NBTkFEQQkJNwkvL0lDCisKKyNkZWZpbmUgTUFYX0JTU19ERVNDUklQVF9FTEVNRU5UCQkzMgorI2RlZmluZSBNQVhfUE1LSURfQ2FuZGlkYXRlTGlzdCAgICAgICAgIDE2CisKKy8vSGlnaCBieXRlIDogRXZlbnQgbnVtYmVyLCAgbG93IGJ5dGUgOiByZWFzb24KKy8vRXZlbnQgZGVmaW5pdGlvbgorLy8tLSBTTUUvTUxNRSBldmVudAorI2RlZmluZSBFVkVOVF9SQ1ZfREVBVVRICQkJCQkweDAxMDAKKyNkZWZpbmUgRVZFTlRfSk9JTl9GQUlMCQkJCQkJMHgwMjAwCisjZGVmaW5lIEVWRU5UX0FVVEhfRkFJTAkJCQkJCTB4MDMwMAorI2RlZmluZSBFVkVOVF9BU1NPQ19GQUlMCQkJCQkweDA0MDAKKyNkZWZpbmUgRVZFTlRfTE9TVF9TSUdOQUwJCQkJCTB4MDUwMAorI2RlZmluZSBFVkVOVF9CU1NfREVTQ1JJUFRfTEFDSwkJCQkweDA2MDAKKyNkZWZpbmUgRVZFTlRfQ09VTlRFUk1FQVNVUkUJCQkJMHgwNzAwCisjZGVmaW5lIEVWRU5UX0pPSU5fRklMVEVSCQkJCQkweDA4MDAKKy8vLS0gVFgvUlggZXZlbnQKKyNkZWZpbmUgRVZFTlRfUlhfQlVGRl9VTkFWQUlMQUJMRQkJCTB4NDEwMAorCisjZGVmaW5lIEVWRU5UX0NPTk5FQ1QJCQkJCQkweDgxMDAKKyNkZWZpbmUgRVZFTlRfRElTQ09OTkVDVAkJCQkJMHg4MjAwCisjZGVmaW5lIEVWRU5UX1NDQU5fUkVRCQkJCQkJMHg4MzAwCisKKy8vUmVhc29uIG9mIEV2ZW50CisjZGVmaW5lIEVWRU5UX1JFQVNPTl9GSUxURVJfQkFTSUNfUkFURQkJMHgwMDAxCisjZGVmaW5lIEVWRU5UX1JFQVNPTl9GSUxURVJfUFJJVkFDWQkJCTB4MDAwMgorI2RlZmluZSBFVkVOVF9SRUFTT05fRklMVEVSX0FVVEhfTU9ERQkJMHgwMDAzCisjZGVmaW5lIEVWRU5UX1JFQVNPTl9USU1FT1VUCQkJCTB4MDBmZgorCisvLyAyMDA2MTEwOCBXUFMgSUUgYnVmZmVyCisjZGVmaW5lIE1BWF9JRV9BUFBFTkRfU0laRQkJCQkJMjU2ICsgNCAvLyBEdWUgdG8gW0UgaWRdW0xlbmd0aF1bT1VJXVtEYXRhXSBtYXkgMjU3IGJ5dGVzCisKK3R5cGVkZWYgc3RydWN0IF9FVkVOVExPRworeworCXUxNgkJQ291bnQ7CQkJLy9Ub3RhbCBjb3VudCBmcm9tIHN0YXJ0CisJdTE2CQlpbmRleDsJCQkvL0J1ZmZlciBpbmRleCwgMCB+IDYzCisJdTMyCQlFdmVudFZhbHVlWzY0XTsJLy9CWVRFIDN+MiA6IGNvdW50LCBCWVRFIDEgOiBFdmVudCwgQllURSAwIDogcmVhc29uCit9IEV2ZW50X0xvZywgKnBFdmVudF9Mb2c7CisKK3R5cGVkZWYgc3RydWN0IF9DaGFuSW5mbworeworCXU4CQliYW5kOworCXU4CQlDaGFuTm87Cit9IENoYW5JbmZvLCAqcENoYW5JbmZvOworCit0eXBlZGVmIHN0cnVjdCBfQ0hBTl9MSVNUCit7CisJdTE2CQkJCUNvdW50OworCUNoYW5JbmZvCQlDaGFubmVsWzUwXTsgLy8gMTAwQgorfSBDSEFOX0xJU1QsICpwc0NIQU5fTElTVDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JhZGlvT2ZmCit7CisJdTgJCQlib0h3UmFkaW9PZmY7CisJdTgJCQlib1N3UmFkaW9PZmY7Cit9IFJhZGlvT2ZmLCAqcHNSYWRpb09mZjsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgc3RydWN0IExPQ0FMX1BBUkEKK3sKKwl1OAkJCVBlcm1hbmVudEFkZHJlc3NbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsgCS8vIHJlYWQgZnJvbSBFUFJPTSwgbWFudWZhY3R1cmUgc2V0IGZvciBlYWNoIE5ldENhcmQKKyAgICB1OCAgICAJCVRoaXNNYWNBZGRyZXNzWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJLy8gdGhlIGRyaXZlciB3aWxsIHVzZSBhY3R1YWxseS4KKworCXUzMgkJCU1UVXNpemU7CQkJCS8vIEluZCB0byBVcGxheWVyLCBNYXggdHJhbnNtaXNzaW9uIHVuaXQgc2l6ZQorCisJdTgJCQlyZWdpb25fSU5GOwkvL3JlZ2lvbiBzZXR0aW5nIGZyb20gSU5GCisJdTgJCQlyZWdpb247CQkvL3JlYWwgcmVnaW9uIHNldHRpbmcgb2YgdGhlIGRldmljZQorCXU4CQkJUmVzZXJ2ZWRfMVsyXTsKKworICAgIC8vLy8gcG93ZXItc2F2ZSB2YXJpYWJsZXMKKyAgICB1OCAgCQkgIAlpUG93ZXJTYXZlTW9kZTsgICAgIC8vIDAgaW5kaWNhdGVzIGl0IGlzIG9uLCAxIGluZGljYXRlcyBpdCBpcyBvZmYKKwl1OAkJCVNodXREb3duZWQ7CisJdTgJCQlBVElNbW9kZTsKKwl1OAkJCUV4Y2x1ZGVVbmVuY3J5cHRlZDsKKworCXUxNgkJCUNoZWNrQ291bnRGb3JQUzsJLy9Vbml0IGltZSBjb3VudCBmb3IgdGhlIGRlY2lzaW9uIHRvIGVudGVyIFBTIG1vZGUKKwl1OAkJCWJvSGFzVHhBY3Rpdml0eTsJLy90eCBhY3Rpdml0eSBoYXMgb2NjdXJyZWQKKwl1OAkJCWJvTWFjUHNWYWxpZDsJCS8vUG93ZXIgc2F2ZSBtb2RlIG9idGFpbmVkIGZyb20gSC9XIGlzIHZhbGlkIG9yIG5vdAorCisJLy8vLyBSYXRlCisJdTgJCQlUeFJhdGVNb2RlOwkJCQkvLyBJbml0aWFsLCBpbnB1dCBmcm9tIFJlZ2lzdHJ5LCBtYXkgYmUgdXBkYXRlZCBieSBHVUkKKwkJCQkJCQkJCQkJLy9UeCBSYXRlIE1vZGU6IGF1dG8oRFRPIG9uKSwgbWF4LCAxTSwgMk0sIC4uCisJdTgJCQlDdXJyZW50VHhSYXRlOwkJCS8vIFRoZSBjdXJyZW50IFR4IHJhdGUKKwl1OAkJCUN1cnJlbnRUeFJhdGVGb3JNbmc7CS8vIFRoZSBjdXJyZW50IFR4IHJhdGUgZm9yIG1hbmFnZW1lbnQgZnJhbWVzCisJCQkJCQkJCQkJLy8gSXQgd2lsbCBiZSBkZWNpZGVkIGJlZm9yZSBjb25uZWN0aW9uIHN1Y2NlZWRzLgorCXU4CQkJQ3VycmVudFR4RmFsbGJhY2tSYXRlOworCisJLy9mb3IgUmF0ZSBoYW5kbGVyCisJdTgJCQlCUmF0ZVNldFszMl07CQkJLy9iYXNpYyByYXRlIHNldAorCXU4CQkJU1JhdGVTZXRbMzJdOwkJCS8vc3VwcG9ydCByYXRlIHNldAorCisJdTgJCQlOdW1PZkJSYXRlOworCXU4CQkJTnVtT2ZTUmF0ZTsKKwl1OAkJCU51bU9mRHNzc1JhdGVJblNSYXRlOwkvL251bWJlciBvZiBEU1NTIHJhdGVzIGluIHN1cHBvcnRlZCByYXRlIHNldAorCXU4CQkJcmVzZXJ2ZWQxOworCisJdTMyCQkJZHdCYXNpY1JhdGVCaXRtYXA7CQkvL2JpdCBtYXAgb2YgYmFzaWMgcmF0ZXMKKwl1MzIJCQlkd1N1cHBvcnRSYXRlQml0bWFwOwkvL2JpdCBtYXAgb2YgYWxsIHN1cHBvcnQgcmF0ZXMgaW5jbHVkaW5nCisJCQkJCQkJCQkJLy9iYXNpYyBhbmQgb3BlcmF0aW9uYWwgcmF0ZXMKKworCS8vLy9Gb3IgU01FL01MTUUgaGFuZGxlcgorCXUxNgkJCXdPbGRTVEFpbmRleDsJCQkvLyB2YWxpZCB3aGVuIGJvSGFuZG92ZXI9VFJVRSwgc3RvcmUgb2xkIGNvbm5lY3RlZCBTVEEgaW5kZXgKKwl1MTYJCQl3Q29ubmVjdGVkU1RBaW5kZXg7CQkvLyBJbmRleCBvZiBwZWVybHkgY29ubmVjdGVkIEFQIG9yIElCU1MgaW4KKwkJCQkJCQkJCQkvLyB0aGUgZGVzY3JpcHRpb25zZXQuCisgICAgdTE2CQkJQXNzb2NpYXRpb25fSUQ7ICAgICAJLy8gVGhlIEFzc29jaWF0aW9uIElEIGluIHRoZSAoUmUpQXNzb2NpYXRpb24KKyAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgIAkvLyBSZXNwb25zZSBmcmFtZS4KKyAgICB1MTYJCQlMaXN0ZW5JbnRlcnZhbDsgICAgIAkvLyBUaGUgbGlzdGVuIGludGVydmFsIHdoZW4gU01FIGludm9raW5nIE1MTUVfCisgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAJLy8gKFJlKUFzc29jaWF0ZV9SZXF1ZXN0KCkuCisKKwlSYWRpb09mZgkJUmFkaW9PZmZTdGF0dXM7CisJdTgJCQlSZXNlcnZlZDBbMl07CisKKwl1OAkJCWJvTXNSYWRpb09mZjsJCQkvLyBOZGlzIGRlbWFuZHMgdG8gYmUgdHJ1ZSB3aGVuIHNldCBEaXNhc3NvYy4gT0lEIGFuZCBiZSBmYWxzZSB3aGVuIHNldCBTU0lEIE9JRC4KKwl1OAkJCWJvQW50ZW5uYURpdmVyc2l0eTsJCS8vVFJVRS9PTiBvciBGQUxTRS9PRkYKKwl1OAkJCWJBbnRlbm5hTm87CQkJCS8vd2hpY2ggYW50ZW5uYQorCXU4CQkJYkNvbm5lY3RGbGFnOwkJCS8vdGhlIGNvbm5lY3Qgc3RhdHVzIGZsYWcgZm9yIHJvYW1pbmcgdGFzaworCisJdTgJCQlSb2FtU3RhdHVzOworCXU4CQkJcmVzZXJ2ZWQ3WzNdOworCisJQ2hhbkluZm8JQ3VycmVudENoYW47CQkJLy9DdXJyZW50IGNoYW5uZWwgbm8uIGFuZCBjaGFubmVsIGJhbmQuIEl0IG1heSBiZSBjaGFuZ2VkIGJ5IHNjYW5uaW5nLgorCXU4CQkJYm9IYW5kb3ZlcjsJCQkJLy8gUm9hbWluZywgSG5hZG92ZXIgdG8gb3RoZXIgQVAuCisJdTgJCQlib0NDQWJ1c3k7CisKKwl1MTYJCQlDV01heDsJCQkJCS8vIEl0IG1heSBub3QgYmUgdGhlIHJlYWwgdmFsdWUgdGhhdCBIL1cgdXNlZAorCXU4CQkJQ1dNaW47CQkJCQkvLyAyNTU6IHNldCBhY2NvcmRpbmcgdG8gODAyLjExIHNwZWMuCisJdTgJCQlyZXNlcnZlZDI7CisKKwkvLzExRzoKKwl1OAkJCWJNYWNPcGVyYXRpb25Nb2RlOwkJLy8gb3BlcmF0aW9uIGluIDgwMi4xMWIgb3IgODAyLjExZworCXU4CQkJYlNsb3RUaW1lTW9kZTsJCQkvL0FVVE8sIHMzMgorCXU4CQkJYlByZWFtYmxlTW9kZTsJCQkvL0FVVE8sIHMzMgorCXU4CQkJYm9Ob25FUlBwcmVzZW50OworCisJdTgJCQlib1Byb3RlY3RNZWNoYW5pc207CS8vIEgvVyB3aWxsIHRha2UgdGhlIG5lY2Vzc2FyeSBhY3Rpb24gYmFzZWQgb24gdGhpcyB2YXJpYWJsZQorCXU4CQkJYm9TaG9ydFByZWFtYmxlOwkvLyBIL1cgd2lsbCB0YWtlIHRoZSBuZWNlc3NhcnkgYWN0aW9uIGJhc2VkIG9uIHRoaXMgdmFyaWFibGUKKwl1OAkJCWJvU2hvcnRTbG90VGltZTsJLy8gSC9XIHdpbGwgdGFrZSB0aGUgbmVjZXNzYXJ5IGFjdGlvbiBiYXNlZCBvbiB0aGlzIHZhcmlhYmxlCisJdTgJCQlyZXNlcnZlZF8zOworCisJdTMyICAgICAgIAlSU05fSUVfQml0bWFwOwkJLy9hZGRlZCBieSBXUworCXUzMiAgICAgIAkJUlNOX09VSV9UeXBlOwkJLy9hZGRlZCBieSBXUworCisJLy9Gb3IgdGhlIEJTU0lECisJdTgJCQlId0Jzc2lkW01BQ19BRERSX0xFTkdUSCArIDJdOworCXUzMgkJCUh3QnNzaWRWYWxpZDsKKworCS8vRm9yIHNjYW4gbGlzdAorCXU4CQkJQnNzTGlzdENvdW50OwkJCQkJCQkvL1RvdGFsIGNvdW50IG9mIHZhbGlkIGRlc2NyaXB0b3IgaW5kZXhlcworCXU4CQkJYm9SZWNlaXZlVW5jb3JyZWN0SW5mbzsJLy9pbXBvcnRhbnQgc2V0dGluZ3MgaW4gYmVhY29uL3Byb2JlIHJlc3AuIGhhdmUgYmVlbiBjaGFuZ2VkCisJdTgJCQlOb09mSm9pbmVySW5JYnNzOworCXU4CQkJcmVzZXJ2ZWRfNDsKKworCXU4CQkJQnNzTGlzdEluZGV4WyAoTUFYX0JTU19ERVNDUklQVF9FTEVNRU5UKzMpICYgfjB4MDMgXTsJLy9TdG9yZSB0aGUgdmFsaWQgZGVzY3JpcHRvciBpbmRleGVzIG9idGFpbmVkIGZyb20gc2Nhbm5pbmdzCisJdTgJCQlKb2luZXJJbklic3NbIChNQVhfQlNTX0RFU0NSSVBUX0VMRU1FTlQrMykgJiB+MHgwMyBdOwkvL3NhdmUgdGhlIEJzc0Rlc2NyaXB0b3IgaW5kZXggaW4gdGhpcworCQkJCQkJCQkJCQkJCQkvL0lCU1MuIFRoZSBpbmRleCAwIGlzIGxvY2FsIGRlc2NyaXB0b3IKKwkJCQkJCQkJCQkJCQkJLy8ocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS4KKwkJCQkJCQkJCQkJCQkJLy9JZiBDT05ORUNURUQgOiBOb09mSm9pbmVySW5JYnNzID49MgorCQkJCQkJCQkJCQkJCQkvLwkJZWxzZSAgIDogTm9PZkpvaW5lckluSWJzcyA8PTEKKworCS8vLy8gR2VuZXJhbCBTdGF0aXN0aWNzLCBjb3VudCBhdCBSeF9oYW5kbGVyIG9yIFR4X2NhbGxiYWNrIGludGVycnVwdCBoYW5kbGVyCisgICAgdTY0IAlHU19YTUlUX09LOwkJCQkvLyBHb29kIEZyYW1lcyBUcmFuc21pdHRlZAorICAgIHU2NCAJR1NfUkNWX09LOwkJCQkvLyBHb29kIEZyYW1lcyBSZWNlaXZlZAorCXUzMgkJR1NfUkNWX0VSUk9SOwkJCS8vIEZyYW1lcyByZWNlaXZlZCB3aXRoIGNyYyBlcnJvcgorCXUzMgkJR1NfWE1JVF9FUlJPUjsJCQkvLyBCYWQgRnJhbWVzIFRyYW5zbWl0dGVkCisJdTMyCQlHU19SQ1ZfTk9fQlVGRkVSOwkJLy8gUmVjZWl2ZSBCdWZmZXIgdW5kZXJydW4KKwl1MzIJCUdTX1hNSVRfT05FX0NPTExJU0lPTjsJLy8gb25lIGNvbGxpc2lvbgorCXUzMgkJR1NfWE1JVF9NT1JFX0NPTExJU0lPTlM7Ly8gbW9yZSBjb2xsaXNpb25zCisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBTdGF0aXN0aWNzIChubyBtYXR0ZXIgd2hldGhlciBpdCBoYWQgZG9uZSBzdWNjZXNzZnVsbHkpIC13a2NoZW4KKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICB1MzIJCSAgIAlfTnVtUnhNU0RVOworICAgIHUzMgkgICAJCV9OdW1UeE1TRFU7CisgICAgdTMyCSAgIAkJX2RvdDExV0VQRXhjbHVkZWRDb3VudDsKKyAgICB1MzIJICAgCQlfZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CisgICAgdTMyCSAgIAkJX2RvdDExRnJhbWVEdXBsaWNhdGVDb3VudDsKKworCUNoYW5JbmZvCUlic3NDaGFuU2V0dGluZzsJLy8gMkIuIFN0YXJ0IElCU1MgQ2hhbm5lbCBzZXR0aW5nIGJ5IHJlZ2lzdHJ5IG9yIFdXVS4KKwl1OAkJcmVzZXJ2ZWRfNVsyXTsJCS8vSXQgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIGNvbnNpZGVyaW5nIFJGIHR5cGUsCisJCQkJCQkJCQkvL3JlZ2lvbiBhbmQgbW9kdWxhdGlvbiB0eXBlLgorCisJQ0hBTl9MSVNUCXNTdXBwb3J0Q2hhbkxpc3Q7CS8vIDg2Qi4gSXQgd2lsbCBiZSBvYnRhaW5lZCBhY2NvcmRpbmcgdG8gUkYgdHlwZSBhbmQgcmVnaW9uCisJdTgJCXJlc2VydmVkXzZbMl07CQkvL3R3byB2YXJpYWJsZXMgYXJlIGZvciB3ZXAga2V5IGVycm9yIGRldGVjdGlvbiBhZGRlZCBieSB3cyAwMi8wMi8wNAorCisgICAgdTMyCSAgICAgIGJXZXBLZXlFcnJvcjsKKyAgICB1MzIgICAgICAgICBiVG9TZWxmUGFja2V0UmVjZWl2ZWQ7CisgICAgdTMyICAgICAgICAgV2VwS2V5RGV0ZWN0VGltZXJDb3VudDsKKworCUV2ZW50X0xvZwlFdmVudExvZzsKKworCXUxNgkJU2lnbmFsTG9zdFRoOworCXUxNgkJU2lnbmFsUm9hbVRoOworCisJLy8gMjAwNjExMDggV1BTIElFIEFwcGVuZAorCXU4CQlJRV9BcHBlbmRfZGF0YVtNQVhfSUVfQVBQRU5EX1NJWkVdOworCXUxNgkJSUVfQXBwZW5kX3NpemU7CisJdTE2CQlyZXNlcnZlZF83OworCit9IFdCX0xPQ0FMREVTQ1JJUFQsICpQV0JfTE9DQUxERVNDUklQVDsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tYWNfc3RydWN0dXJlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzFkMmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaApAQCAtMCwwICsxLDY3MCBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBNQUNfU3RydWN0dXJlcy5oCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgU1ctTUFDLgorLy8KKy8vIFJldmlzaW9uIEhpc3RveQorLy89PT09PT09PT09PT09PT09PQorLy8gMC4xICAgICAgMjAwMiAgICAgICAgVU4wMAorLy8gMC4yICAgICAgMjAwMjEwMDQgICAgUEQ0MyBDQ0xpdTYKKy8vICAgICAgICAgIDIwMDIxMDE4ICAgIFBENDMgQ0NMaXU2CisvLyAgICAgICAgICAgICAgICAgICAgICBBZGQgZW51bV9UeFJhdGUgdHlwZQorLy8gICAgICAgICAgICAgICAgICAgICAgTW9kaWZ5IGVudW1fU1RBU3RhdGUgdHlwZQorLy8gMC4zICAgICAgMjAwMjEwMjMgICAgUEUyMyBDWUxpdSB1cGRhdGUgTUFDIHNlc3Npb24gc3RydWN0CisvLyAgICAgICAgICAyMDAyMTEwOAorLy8gICAgICAgICAgMjAwMjExMjIgICAgUEQ0MyBBdXN0aW4KKy8vICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZWQgc29tZSB1bnVzZWQuCisvLyAgICAgICAgICAyMDAyMTEyOSAgICBQRDQzIEF1c3RpbgorLy8JCQkyMDAzMDYxNwlpbmNyZWFzZSB0aGUgODAyLjExZyBkZWZpbml0aW9uCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworI2lmbmRlZiBfTUFDX1N0cnVjdHVyZXNfSF8KKyNkZWZpbmUgX01BQ19TdHJ1Y3R1cmVzX0hfCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNvbWUgbWlzY2VsbGFuZW91cyBkZWZpbml0aW9ucworLy8tLS0tLQorI2RlZmluZSBNQVhfQ0hBTk5FTFMgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBNQUNfQUREUl9MRU5HVEggICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIE1BWF9XRVBfS0VZX1NJWkUgICAgICAgICAgICAgICAgICAgIDE2ICAvLyAxMjggYml0cworI2RlZmluZQlNQVhfODAyXzExX0ZSQUdNRU5UX05VTUJFUgkJMTAgLy8gQnkgc3BlYworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyA4MDIuMTEgRnJhbWUgZGVmaW5lCisvLy0tLS0tCisjZGVmaW5lIE1BU0tfUFJPVE9DT0xfVkVSU0lPTl9UWVBFCTB4MEYKKyNkZWZpbmUgTUFTS19GUkFHTUVOVF9OVU1CRVIJCTB4MDAwRgorI2RlZmluZSBTRVFVRU5DRV9OVU1CRVJfU0hJRlQJCTQKKyNkZWZpbmUgRElGRkVSXzExX1RPXzMJCQkJMTgKKyNkZWZpbmUgRE9UXzExX01BQ19IRUFERVJfU0laRQkJMjQKKyNkZWZpbmUgRE9UXzExX1NOQVBfU0laRQkJCTYKKyNkZWZpbmUgRE9UXzExX0RVUkFUSU9OX09GRlNFVAkJMgorI2RlZmluZSBET1RfMTFfU0VRVUVOQ0VfT0ZGU0VUCQkyMiAvL1NlcXVlbmNlIGNvbnRyb2wgb2Zmc2V0CisjZGVmaW5lIERPVF8xMV9UWVBFX09GRlNFVAkJCTMwIC8vVGhlIHN0YXJ0IG9mZnNldCBvZiA4MDIuMTEgRnJhbWUvLworI2RlZmluZSBET1RfMTFfREFUQV9PRkZTRVQgICAgICAgICAgMjQKKyNkZWZpbmUgRE9UXzExX0RBX09GRlNFVAkJCTQKKyNkZWZpbmUgRE9UXzNfVFlQRV9BUlAJCQkJMHg4MEYzCisjZGVmaW5lIERPVF8zX1RZUEVfSVBYCQkJCTB4ODEzNworI2RlZmluZSBET1RfM19UWVBFX09GRlNFVAkJCTEyCisKKworI2RlZmluZSBFVEhFUk5FVF9IRUFERVJfU0laRQkJCTE0CisjZGVmaW5lIE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRQkJMTUxNAorCisKKy8vLS0tLS0gIG1hbmFnZW1lbnQgOiBUeXBlIG9mIEJpdHMgKDIsIDMpIGFuZCBTdWJ0eXBlIG9mIEJpdHMgKDQsIDUsIDYsIDcpCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BU1NPQ19SRVFVRVNUICAgIDB4MDAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0FTU09DX1JFU1BPTlNFICAgMHgxMAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfUkVBU1NPQ19SRVFVRVNUICAweDIwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9SRUFTU09DX1JFU1BPTlNFIDB4MzAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX1BST0JFX1JFUVVFU1QgICAgMHg0MAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfUFJPQkVfUkVTUE9OU0UgICAweDUwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9CRUFDT04gICAgICAgICAgIDB4ODAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0FUSU0gICAgICAgICAgICAgMHg5MAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfRElTQVNTT0NJQVRJT04gICAweEEwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BVVRIRU5USUNBVElPTiAgIDB4QjAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0RFQVVUSEVOVElDQVRJT04gMHhDMAorCisvLy0tLS0tICBjb250cm9sIDogVHlwZSBvZiBCaXRzICgyLCAzKSBhbmQgU3VidHlwZSBvZiBCaXRzICg0LCA1LCA2LCA3KQorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX1BTUE9MTCAgICAgICAgICAweEE0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfUlRTICAgICAgICAgICAgIDB4QjQKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9DVFMgICAgICAgICAgICAgMHhDNAorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX0FDSyAgICAgICAgICAgICAweEQ0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfQ0ZFTkQgICAgICAgICAgIDB4RTQKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9DRkVORF9DRkFDSyAgICAgMHhGNAorCisvLy0tLS0tICBkYXRhIDogVHlwZSBvZiBCaXRzICgyLCAzKSBhbmQgU3VidHlwZSBvZiBCaXRzICg0LCA1LCA2LCA3KQorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZBQ0sgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRlBPTEwgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGQUNLX0NGUE9MTCAgICAgICAweDM4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfTlVMTCAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRkFDS19OVUxMICAgICAgICAgMHg1OAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGUE9MTF9OVUxMICAgICAgICAweDY4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZBQ0tfQ0ZQT0xMX05VTEwgIDB4NzgKKworLy8tLS0tLSAgRnJhbWUgVHlwZSBvZiBCaXRzICgyLCAzKQorI2RlZmluZSBNQUNfVFlQRV9NQU5BR0VNRU5UICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE1BQ19UWVBFX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTUFDX1RZUEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorCisvLy0tLS0tIGRlZmluaXRpb25zIGZvciBNYW5hZ2VtZW50IEZyYW1lIEVsZW1lbnQgSUQgKDEgQllURSkKKyNkZWZpbmUgRUxFTUVOVF9JRF9TU0lEICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFTEVNRU5UX0lEX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAxCisjZGVmaW5lIEVMRU1FTlRfSURfRkhfUEFSQU1FVEVSX1NFVCAgICAgICAgIDIKKyNkZWZpbmUgRUxFTUVOVF9JRF9EU19QQVJBTUVURVJfU0VUICAgICAgICAgMworI2RlZmluZSBFTEVNRU5UX0lEX0NGX1BBUkFNRVRFUl9TRVQgICAgICAgICA0CisjZGVmaW5lIEVMRU1FTlRfSURfVElNICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRUxFTUVOVF9JRF9JQlNTX1BBUkFNRVRFUl9TRVQgICAgICAgNgorLy8gN34xNSByZXNlcnZlcmQKKyNkZWZpbmUgRUxFTUVOVF9JRF9DSEFMTEVOR0VfVEVYVCAgICAgICAgICAgMTYKKy8vIDE3fjMxIHJlc2VydmVkIGZvciBjaGFsbGVuZ2UgdGV4dCBleHRlbnNpb24KKy8vIDMyfjI1NSByZXNlcnZlZAorLy8tLSAgMTFHICAtLQorI2RlZmluZSBFTEVNRU5UX0lEX0VSUF9JTkZPUk1BVElPTgkJCTQyCisjZGVmaW5lIEVMRU1FTlRfSURfRVhURU5ERURfU1VQUE9SVEVEX1JBVEVTIDUwCisKKy8vLS0gIFdQQSAgLS0KKworI2RlZmluZSBFTEVNRU5UX0lEX1JTTl9XUEEJCQkJCTIyMQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBFTEVNRU5UX0lEX1JTTl9XUEEyCQkJCSAgICA0OAorI2VuZGlmIC8vZW5kaWYgV1BBMgorCisjZGVmaW5lIFdMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVCAgICAoKHUxNikgNikKKyNkZWZpbmUgV0xBTl9NQVhfQVVUSF9LRVlfTUdUX1NVSVRFX0xJU1RfQ09VTlQgICgodTE2KSAyKQorCisjaWZkZWYgV0JfTElOVVgKKyNkZWZpbmUgVU5BTElHTkVECisjZW5kaWYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBlbnVtIGVudW1fUG93ZXJNYW5hZ2VtZW50TW9kZQoreworICAgIEFDVElWRSA9IDAsCisgICAgUE9XRVJfU0FWRQorfSBXQl9QTV9Nb2RlLCAqUFdCX1BNX01PREU7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIFJlYXNvbiBDb2RlIChUYWJsZSAxOCk6IGluZGljYXRlIHRoZSByZWFzb24gb2YgRGlzQXNzb2MsIERlQXV0aGVuCisvLyAgbGVuZ3RoIG9mIFJlYXNvbkNvZGUgaXMgMiBPY3RzLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIFJFQVNPTl9SRUFTRVJFRCAgICAgICAgICAgICAwCisjZGVmaW5lIFJFQVNPTl9VTlNQRUNJRElFRCAgICAgICAgICAxCisjZGVmaW5lIFJFQVNPTl9QUkVBVVRIX0lOVkFMSUQgICAgICAyCisjZGVmaW5lIERFQVVUSF9SRUFTT05fTEVGVF9CU1MgICAgICAzCisjZGVmaW5lIERJU0FTU19SRUFTT05fQVBfSU5BQ1RJVkUgICA0CisjZGVmaW5lIERJU0FTU19SRUFTT05fQVBfQlVTWSAgICAgICA1CisjZGVmaW5lIFJFQVNPTl9DTEFTUzJfRlJBTUVfRlJPTV9OT05BVVRIX1NUQSAgICA2CisjZGVmaW5lIFJFQVNPTl9DTEFTUzNfRlJBTUVfRlJPTV9OT05BU1NPX1NUQSAgICA3CisjZGVmaW5lIERJU0FTU19SRUFTT05fTEVGVF9CU1MgICAgICA4CisjZGVmaW5lIFJFQVNPTl9OT1RfQVVUSF9ZRVQgICAgICAgICA5CisvLzgwMi4xMWkgZGVmaW5lCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX0lFCQkJCQkJMTMKKyNkZWZpbmUgUkVBU09OX01JQ19FUlJPUgkJCQkJCTE0CisjZGVmaW5lIFJFQVNPTl80V0FZX0hBTkRTSEFLRV9USU1FT1VUCQkJMTUKKyNkZWZpbmUgUkVBU09OX0dST1VQS0VZX1VQREFURV9USU1FT1VUCQkJMTYKKyNkZWZpbmUgUkVBU09OX0lFX0RJRkZfNFdBWV9BU1NPQwkJCQkxNworI2RlZmluZSBSRUFTT05fSU5WQUxJRF9NVUxUSUNBU1RfQ0lQSEVSCQkJMTgKKyNkZWZpbmUgUkVBU09OX0lOVkFMSURfVU5JQ0FTVF9DSVBIRVIJCQkxOQorI2RlZmluZSBSRUFTT05fSU5WQUxJRF9BS01QCQkJCQkJMjAKKyNkZWZpbmUgUkVBU09OX1VOU1VQUE9SVEVEX1JTTklFX1ZFUlNJT04JCTIxCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX1JTTklFX0NBUEFCSUxJVFkJCQkyMgorI2RlZmluZSBSRUFTT05fODAyXzFYX0FVVEhfRkFJTAkJCQkJMjMKKyNkZWZpbmUJUkVBU09OX0NJUEhFUl9SRUpFQ1RfUEVSX1NFQ19QT0xJQ1kJCTE0CisKKy8qCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBlbnVtX01NUERVUmVzdWx0Q29kZSAtLQorLy8gICBTdGF0dXMgY29kZSAoMiBPY3RzKSBpbiB0aGUgTU1QRFUncyBmcmFtZSBib2R5LiBUYWJsZS4xOQorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2VudW0gZW51bV9NTVBEVVJlc3VsdENvZGUKK3sKKy8vICAgIFNVQ0NFU1MgICA9IDAsICAgICAgLy8gUmVkZWZpbmVkCisgICAgVU5TUEVDSUZJRURfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisKKyAgICAvLyAyIC0gOSBSZXNlcnZlZAorCisgICAgTk9UX1NVUFBST1RfQ0FQQUJJTElUSUVTICAgICAgICAgICAgICAgICAgICA9IDEwLAorCisgICAgLy9SRUFTU09DSUFUSU9OX0RFTklFRAorICAgIC8vCisgICAgUkVBU1NPQ19ERU5JRURfVU5BQkxFX0NGTV9BU1NPQ19FWElTVCAgICAgICA9IDExLAorCisgICAgLy9BU1NPQ0lBVElPTl9ERU5JRURfTk9UX0lOX1NUQU5EQVJECisgICAgLy8KKyAgICBBU1NPQ19ERU5JRURfUkVBU09OX05PVF9JTl9TVEFOREFSRCAgICAgICAgID0gMTIsCisgICAgUEVFUl9OT1RfU1VQUE9SVF9BVVRIX0FMR09SSVRITSAgICAgICAgICAgICA9IDEzLAorICAgIEFVVEhfU0VRTlVNX09VVF9PRl9FWFBFQ1QgICAgICAgICAgICAgICAgICAgPSAxNCwKKyAgICBBVVRIX1JFSkVDVF9SRUFTT05fQ0hBTExFTkdFX0ZBSUwgICAgICAgICAgID0gMTUsCisgICAgQVVUSF9SRUpFQ1RfUkVBU09OX1dBSVRfVElNRU9VVCAgICAgICAgICAgICA9IDE2LAorICAgIEFTU09DX0RFTklFRF9SRUFTT05fQVBfQlVTWSAgICAgICAgICAgICAgICAgPSAxNywKKyAgICBBU1NPQ19ERU5JRURfUkVBU09OX05PVF9TVVBQT1JUX0JBU0lDX1JBVEUgID0gMTgKK30gV0JfTU1QRFVSRVNVTFRDT0RFLCAqUFdCX01NUERVUkVTVUxUQ09ERTsKKyovCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIGVudW1fVHhSYXRlIC0tCisvLyAgIERlZmluZSB0aGUgdHJhbnNtaXNzaW9uIGNvbnN0YW50cyBiYXNlZCBvbiBXODlDMzIgTUFDCisvLyAgIHRhcmdldCBzcGVjaWZpY2F0aW9uLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBlbnVtIGVudW1fVHhSYXRlCit7CisgICAgVFhSQVRFXzFNICAgICAgICAgICAgICAgPSAwLAorICAgIFRYUkFURV8yTUxPTkcgICAgICAgICAgID0gMiwKKyAgICBUWFJBVEVfMk1TSE9SVCAgICAgICAgICA9IDMsCisgICAgVFhSQVRFXzU1TUxPTkcgICAgICAgICAgPSA0LAorICAgIFRYUkFURV81NU1TSE9SVCAgICAgICAgID0gNSwKKyAgICBUWFJBVEVfMTFNTE9ORyAgICAgICAgICA9IDYsCisgICAgVFhSQVRFXzExTVNIT1JUICAgICAgICAgPSA3LAorICAgIFRYUkFURV9BVVRPICAgICAgICAgICAgID0gMjU1ICAgICAgICAgICAvLyBQRDQzIDIwMDIxMTA4Cit9IFdCX1RYUkFURSwgKlBXQl9UWFJBVEU7CisKKworI2RlZmluZQlSQVRFX0JJVE1BUF8xTQkJCQkxCisjZGVmaW5lCVJBVEVfQklUTUFQXzJNCQkJCTIKKyNkZWZpbmUJUkFURV9CSVRNQVBfNWRvdDVNCQkJNQorI2RlZmluZSBSQVRFX0JJVE1BUF82TQkJCQk2CisjZGVmaW5lIFJBVEVfQklUTUFQXzlNCQkJCTkKKyNkZWZpbmUgUkFURV9CSVRNQVBfMTFNCQkJCTExCisjZGVmaW5lIFJBVEVfQklUTUFQXzEyTQkJCQkxMgorI2RlZmluZSBSQVRFX0JJVE1BUF8xOE0JCQkJMTgKKyNkZWZpbmUgUkFURV9CSVRNQVBfMjJNCQkJCTIyCisjZGVmaW5lIFJBVEVfQklUTUFQXzI0TQkJCQkyNAorI2RlZmluZSBSQVRFX0JJVE1BUF8zM00JCQkJMTcKKyNkZWZpbmUgUkFURV9CSVRNQVBfMzZNCQkJCTE5CisjZGVmaW5lIFJBVEVfQklUTUFQXzQ4TQkJCQkyNQorI2RlZmluZSBSQVRFX0JJVE1BUF81NE0JCQkJMjgKKworI2RlZmluZSBSQVRFX0FVVE8JCQkJCTAKKyNkZWZpbmUgUkFURV8xTQkJCQkJCTIKKyNkZWZpbmUgUkFURV8yTQkJCQkJCTQKKyNkZWZpbmUgUkFURV81ZG90NU0JCQkJCTExCisjZGVmaW5lIFJBVEVfNk0JCQkJCQkxMgorI2RlZmluZSBSQVRFXzlNCQkJCQkJMTgKKyNkZWZpbmUgUkFURV8xMU0JCQkJCTIyCisjZGVmaW5lIFJBVEVfMTJNCQkJCQkyNAorI2RlZmluZSBSQVRFXzE4TQkJCQkJMzYKKyNkZWZpbmUgUkFURV8yMk0JCQkJCTQ0CisjZGVmaW5lIFJBVEVfMjRNCQkJCQk0OAorI2RlZmluZSBSQVRFXzMzTQkJCQkJNjYKKyNkZWZpbmUgUkFURV8zNk0JCQkJCTcyCisjZGVmaW5lIFJBVEVfNDhNCQkJCQk5NgorI2RlZmluZSBSQVRFXzU0TQkJCQkJMTA4CisjZGVmaW5lIFJBVEVfTUFYCQkJCQkyNTUKKworLy9DQVBBQklMSVRZCisjZGVmaW5lIENBUEFCSUxJVFlfRVNTX0JJVAkJCQkweDAwMDEKKyNkZWZpbmUgQ0FQQUJJTElUWV9JQlNTX0JJVAkJCQkweDAwMDIKKyNkZWZpbmUgQ0FQQUJJTElUWV9DRl9QT0xMX0JJVAkJCTB4MDAwNAorI2RlZmluZSBDQVBBQklMSVRZX0NGX1BPTExfUkVRX0JJVAkJMHgwMDA4CisjZGVmaW5lIENBUEFCSUxJVFlfUFJJVkFDWV9CSVQJCQkweDAwMTAKKyNkZWZpbmUgQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRV9CSVQJMHgwMDIwCisjZGVmaW5lIENBUEFCSUxJVFlfUEJDQ19CSVQJCQkJMHgwMDQwCisjZGVmaW5lIENBUEFCSUxJVFlfQ0hBTl9BR0lMSVRZX0JJVAkJMHgwMDgwCisjZGVmaW5lIENBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FX0JJVAkweDA0MDAKKyNkZWZpbmUgQ0FQQUJJTElUWV9EU1NTX09GRE1fQklUCQkweDIwMDAKKworCitzdHJ1Y3QgQ2FwYWJpbGl0eV9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisgIHVuaW9uCisgIHsKKyAgCXUxNiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd1ZhbHVlOworICAgICNpZmRlZiBfQklHX0VORElBTl8gIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisgICAgc3RydWN0IF9DYXBhYmlsaXR5CisgICAgeworICAgICAgICAvLy0tICAxMUcgIC0tCisJdTgJUmVzZXJ2ZWQzIDogMjsKKwl1OAlEU1NTX09GRE0gOiAxOworCXU4CVJlc2VydmVkMiA6IDI7CisJdTgJU2hvcnRfU2xvdF9UaW1lIDogMTsKKwl1OCAgICBSZXNlcnZlZDEgOiAyOworCXU4ICAgIENoYW5uZWxfQWdpbGl0eSA6IDE7CisJdTggICAgUEJDQyA6IDE7CisJdTggICAgU2hvcnRQcmVhbWJsZSA6IDE7CisJdTggICAgQ0ZfUHJpdmFjeSA6IDE7CisJdTggICAgQ0ZfUG9sbF9SZXF1ZXN0IDogMTsKKwl1OCAgICBDRl9Qb2xsYWJsZSA6IDE7CisJdTggICAgSUJTUyA6IDE7CisJdTggICAgRVNTIDogMTsKKyAgICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBDYXBhYmlsaXR5OworICAgICNlbHNlCisgICAgc3RydWN0IF9DYXBhYmlsaXR5CisgICAgeworICAgICAgICB1OCAgICBFU1MgOiAxOworICAgICAgICB1OCAgICBJQlNTIDogMTsKKyAgICAgICAgdTggICAgQ0ZfUG9sbGFibGUgOiAxOworICAgICAgICB1OCAgICBDRl9Qb2xsX1JlcXVlc3QgOiAxOworICAgICAgICB1OCAgICBDRl9Qcml2YWN5IDogMTsKKyAgICAgICAgdTggICAgU2hvcnRQcmVhbWJsZSA6IDE7CisgICAgICAgIHU4ICAgIFBCQ0MgOiAxOworICAgICAgICB1OCAgICBDaGFubmVsX0FnaWxpdHkgOiAxOworICAgICAgICB1OCAgICBSZXNlcnZlZDEgOiAyOworCQkvLy0tICAxMUcgIC0tCisJCXU4CVNob3J0X1Nsb3RfVGltZSA6IDE7CisJCXU4CVJlc2VydmVkMiA6IDI7CisJCXU4CURTU1NfT0ZETSA6IDE7CisJCXU4CVJlc2VydmVkMyA6IDI7CisgICAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgQ2FwYWJpbGl0eTsKKyAgICAjZW5kaWYKKyAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgRkhfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgRHdlbGxfVGltZVsyXTsKKyAgICB1OCAgICBIb3BfU2V0OworICAgIHU4ICAgIEhvcF9QYXR0ZXJuOworICAgIHU4ICAgIEhvcF9JbmRleDsKK307CisKK3N0cnVjdCBEU19QYXJhbWV0ZXJfU2V0X0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBDdXJyZW50X0NoYW5uZWw7Cit9OworCitzdHJ1Y3QgU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBTdXBwb3J0ZWRSYXRlc1s4XTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBTU0lEX0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBTU0lEWzMyXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworCitzdHJ1Y3QgQ0ZfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgQ0ZQX0NvdW50OworICAgIHU4ICAgIENGUF9QZXJpb2Q7CisgICAgdTggICAgQ0ZQX01heER1cmF0aW9uWzJdOyAgICAgLy8gaW4gVGltZSBVbml0cworICAgIHU4ICAgIENGUF9EdXJSZW1haW5pbmdbMl07ICAgIC8vIGluIHRpbWUgdW5pdHMKK307CisKK3N0cnVjdCBUSU1fRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIERUSU1fQ291bnQ7CisgICAgdTggICAgRFRJTV9QZXJpb2Q7CisgICAgdTggICAgQml0bWFwX0NvbnRyb2w7CisgICAgdTggICAgUGFydGlhbF9WaXJ0dWFsX0JpdG1hcFsyNTFdOworfTsKKworc3RydWN0IElCU1NfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgQVRJTV9XaW5kb3dbMl07Cit9OworCitzdHJ1Y3QgQ2hhbGxlbmdlX1RleHRfRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIENoYWxsZW5nZV9UZXh0WzI1M107Cit9OworCitzdHJ1Y3QgUEhZX1BhcmFtZXRlcl9TZXRfRWxlbWVudAoreworLy8gIGludCAgICAgYVNsb3RUaW1lOworLy8gIGludCAgICAgYVNpZnNUaW1lOworICAgIHMzMiAgICAgYUNDQVRpbWU7CisgICAgczMyICAgICBhUnhUeFR1cm5hcm91bmRUaW1lOworICAgIHMzMiAgICAgYVR4UExDUERlbGF5OworICAgIHMzMiAgICAgUnhQTENQRGVsYXk7CisgICAgczMyICAgICBhUnhUeFN3aXRjaFRpbWU7CisgICAgczMyICAgICBhVHhSYW1wT250aW1lOworICAgIHMzMiAgICAgYVR4UmFtcE9mZlRpbWU7CisgICAgczMyICAgICBhVHhSRkRlbGF5OworICAgIHMzMiAgICAgYVJ4UkZEZWxheTsKKyAgICBzMzIgICAgIGFBaXJQcm9wYWdhdGlvblRpbWU7CisgICAgczMyICAgICBhTUFDUHJvY2Vzc2luZ0RlbGF5OworICAgIHMzMiAgICAgYVByZWFtYmxlTGVuZ3RoOworICAgIHMzMiAgICAgYVBMQ1BIZWFkZXJMZW5ndGg7CisgICAgczMyICAgICBhTVBEVUR1cmF0aW9uRmFjdG9yOworICAgIHMzMiAgICAgYU1QRFVNYXhMZW5ndGg7CisvLyAgaW50ICAgICBhQ1dtaW47CisvLyAgaW50ICAgICBhQ1dtYXg7Cit9OworCisvLy0tICAxMUcgIC0tCitzdHJ1Y3QgRVJQX0luZm9ybWF0aW9uX0VsZW1lbnQKK3sKKyAgICB1OAlFbGVtZW50X0lEOworICAgIHU4CUxlbmd0aDsKKyAgICAjaWZkZWYgX0JJR19FTkRJQU5fIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisgICAgCXU4CVJlc2VydmVkOjU7ICAgLy8yMDA2MDkyNiBhZGQgYnkgYW5zb24KKyAgICAgICB1OAlCYXJrZXJfUHJlYW1ibGVfTW9kZToxOworCXU4CVVzZV9Qcm90ZWN0aW9uOjE7CisgICAgICAgdTgJTm9uRVJQX1ByZXNlbnQ6MTsKKyAgICAjZWxzZQorCXU4CU5vbkVSUF9QcmVzZW50OjE7CisJdTgJVXNlX1Byb3RlY3Rpb246MTsKKwl1OAlCYXJrZXJfUHJlYW1ibGVfTW9kZToxOworCXU4CVJlc2VydmVkOjU7CisgICAgI2VuZGlmCit9OworCitzdHJ1Y3QgRXh0ZW5kZWRfU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQKK3sKKyAgICB1OAlFbGVtZW50X0lEOworICAgIHU4CUxlbmd0aDsKKyAgICB1OAlFeHRlbmRlZFN1cHBvcnRlZFJhdGVzWzI1NV07Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvL1dQQSg4MDIuMTFpIGRyYWZ0IDMuMCkKKyNkZWZpbmUgVkVSU0lPTl9XUEEJCQkJMQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBWRVJTSU9OX1dQQTIgICAgICAgICAgICAxCisjZW5kaWYgLy9lbmQgZGVmICBfV1BBMl8KKyNkZWZpbmUgT1VJX1dQQQkJCQkJMHgwMEYyNTAwMAkvL1dQQTIuMCBPVUk9MDA6NTA6RjIsIHRoZSBNU0IgaXMgcmVzZXJ2ZWQgZm9yIHN1aXRlIHR5cGUKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgT1VJX1dQQTIJCQkJMHgwMEFDMEYwMAkvLyBmb3Igd3BhMiBjaGFuZ2UgdG8gMHgwMEFDT0YwNCBieSBXcyAyNi8wNC8wNAorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBPVUlfV1BBX0FERElUSU9OQUwJCTB4MDEKKyNkZWZpbmUgV0xBTl9NSU5fUlNOX1dQQV9MRU5HVEggICAgICAgICAgICAgICAgIDYgLy9hZGRlZCBieSB3cyAwOS8xMC8wNAorI2lmZGVmIF9XUEEyXworI2RlZmluZSBXTEFOX01JTl9SU05fV1BBMl9MRU5HVEggICAgICAgICAgICAgICAgMiAvLyBGaXggdG8gMiAwOS8xNC8wNQorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBvdWlfd3BhICAgICAgICAgICAgICAgICAgKHUzMikoT1VJX1dQQXxPVUlfV1BBX0FERElUSU9OQUwpCisKKyNkZWZpbmUgV1BBX09VSV9CSUcgICAgKCh1MzIpIDB4MDFGMjUwMDApLy9hZGRlZCBieSB3cyAwOS8yMy8wNAorI2RlZmluZSBXUEFfT1VJX0xJVFRMRSAgKCh1MzIpIDB4MDFGMjUwMDEpLy9hZGRlZCBieSB3cyAwOS8yMy8wNAorCisjZGVmaW5lIFdQQV9XUFNfT1VJCQkJCWNwdV90b19sZTMyKDB4MDRGMjUwMDApIC8vIDIwMDYxMTA4IEZvciBXUFMuIEl0J3MgbGl0dGxlIGVuZGlhbi4gQmlnIGVuZGlhbiBpcyAweDAwNTBGMjA0CisKKy8vLS0tLS1XUEEyLS0tLS0KKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgV1BBMl9PVUlfQklHICAgICgodTMyKTB4MDFBQzBGMDApCisjZGVmaW5lIFdQQTJfT1VJX0xJVFRMRSAoKHUzMikweDAxQUMwRjAxKQorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworLy9BdXRoZW50aWNhdGlvbiBzdWl0ZQorI2RlZmluZSBPVUlfQVVUSF9XUEFfTk9ORSAgICAgICAgICAgMHgwMCAvL2ZvciBXUEFfTk9ORQorI2RlZmluZSBPVUlfQVVUSF84MDIxWAkJCQkweDAxCisjZGVmaW5lIE9VSV9BVVRIX1BTSwkJCQkweDAyCisvL0NpcGhlciBzdWl0ZQorI2RlZmluZSBPVUlfQ0lQSEVSX0dST1VQX0tFWSAgICAgICAgMHgwMCAgLy9hZGRlZCBieSB3cyAwNS8yMS8wNAorI2RlZmluZSBPVUlfQ0lQSEVSX1dFUF80MAkJCTB4MDEKKyNkZWZpbmUgT1VJX0NJUEhFUl9US0lQCQkJCTB4MDIKKyNkZWZpbmUgT1VJX0NJUEhFUl9DQ01QCQkJCTB4MDQKKyNkZWZpbmUgT1VJX0NJUEhFUl9XRVBfMTA0CQkJMHgwNQorCit0eXBlZGVmIHN0cnVjdCBfU1VJVEVfU0VMRUNUT1JfCit7CisJdW5pb24KKwl7CisJCXU4CVZhbHVlWzRdOworCQlzdHJ1Y3QgX1NVSVRfCisJCXsKKwkJCXU4CU9VSVszXTsKKwkJCXU4CVR5cGU7CisJCX1TdWl0U2VsZWN0b3I7CisJfTsKK31TVUlURV9TRUxFQ1RPUjsKKworLy8tLSAgV1BBICAtLQorc3RydWN0CVJTTl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTgJCQkJCUVsZW1lbnRfSUQ7CisJdTgJCQkJCUxlbmd0aDsKKwlVTkFMSUdORUQgU1VJVEVfU0VMRUNUT1IJT3VpV1BBQWRkaXRpb25hbDsvL1dQQSB2ZXJzaW9uIDIuMCBhZGRpdGlvbmFsIGZpZWxkLCBhbmQgc2hvdWxkIGJlIDAwOjUwOkYyOjAxCisJdTE2CQkJCQlWZXJzaW9uOworCVNVSVRFX1NFTEVDVE9SCQlHcm91cEtleVN1aXRlOworCXUxNgkJCQkJUGFpcndpc2VLZXlTdWl0ZUNvdW50OworCVNVSVRFX1NFTEVDVE9SCQlQYWlyd2lzZUtleVN1aXRlWzFdOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK3N0cnVjdCBSU05fQXV0aF9TdWJfSW5mb3JtYXRpb25fRWxlbWVudAoreworCXUxNgkJCQlBdXRoS2V5TW5ndFN1aXRlQ291bnQ7CisJU1VJVEVfU0VMRUNUT1IJQXV0aEtleU1uZ3RTdWl0ZVsxXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8vLS0gIFdQQTIgIC0tCitzdHJ1Y3QgUlNOX0NhcGFiaWxpdHlfRWxlbWVudAoreworICB1bmlvbgorICB7CisJdTE2CV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQl3VmFsdWU7CisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXwkgLy8yMDA2MDkyNyBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKyAgICBzdHJ1Y3QgX1JTTl9DYXBhYmlsaXR5CisgICAgeworICAgIAl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMiA6IDg7IC8vIDIwMDUxMjAxCisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDEgOiAyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyIDogMjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFBUS19SZXBsYXlfQ291bnRlciA6IDI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBOb19QYWlyd2lzZSA6IDE7CisgICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGggOiAxOworICAgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJTTl9DYXBhYmlsaXR5OworICAgICNlbHNlCisgICAgc3RydWN0IF9SU05fQ2FwYWJpbGl0eQorICAgIHsKKyAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQcmVfQXV0aCA6IDE7CisgICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgTm9fUGFpcndpc2UgOiAxOworICAgICAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFBUS19SZXBsYXlfQ291bnRlciA6IDI7CisJICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyIDogMjsKKwkgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDEgOiAyOworCSAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMiA6IDg7IC8vIDIwMDUxMjAxCisgICAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUlNOX0NhcGFiaWxpdHk7CisgICAgI2VuZGlmCisKKyAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKworI2lmZGVmIF9XUEEyXwordHlwZWRlZiBzdHJ1Y3QgX1BNS0lECit7CisgIHU4IHBWYWx1ZVsxNl07Cit9UE1LSUQ7CisKK3N0cnVjdAlXUEEyX1JTTl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTgJCQkJCUVsZW1lbnRfSUQ7CisJdTgJCQkJCUxlbmd0aDsKKwl1MTYJCQkJCVZlcnNpb247CisJU1VJVEVfU0VMRUNUT1IJCUdyb3VwS2V5U3VpdGU7CisJdTE2CQkJCQlQYWlyd2lzZUtleVN1aXRlQ291bnQ7CisJU1VJVEVfU0VMRUNUT1IJCVBhaXJ3aXNlS2V5U3VpdGVbMV07CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBXUEEyX1JTTl9BdXRoX1N1Yl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTE2CQkJCUF1dGhLZXlNbmd0U3VpdGVDb3VudDsKKwlTVUlURV9TRUxFQ1RPUglBdXRoS2V5TW5ndFN1aXRlWzFdOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudAoreworCXUxNgkJCQlQTUtJRF9Db3VudDsKKwlQTUtJRCBwbWtpZCBbMTZdIDsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZiAvL2VuZGRlZiBfV1BBMl8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNQUMgRnJhbWUgc3RydWN0dXJlIChkaWZmZXJlbnQgdHlwZSkgYW5kIHN1YmZpZWxkIHN0cnVjdHVyZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0cnVjdCBNQUNfZnJhbWVfY29udHJvbAoreworICAgIHU4ICAgIG1hY19mcmFtZV9pbmZvOyAvLyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBbUHJvdG9jb2wgVmVyc2lvbiwgQ29udHJvbCBUeXBlLCBDb250cm9sIFN1YnR5cGVdCisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYwOTI3IGFkZCBieSBhbnNvbidzIGVuZGlhbgorICAgIHU4ICAgIG9yZGVyOjE7CisgICAgdTggICAgV0VQOjE7CisgICAgdTggICAgbW9yZV9kYXRhOjE7CisgICAgdTggICAgcHdyX21ndDoxOworICAgIHU4ICAgIHJldHJ5OjE7CisgICAgdTggICAgbW9yZV9mcmFnOjE7CisgICAgdTggICAgZnJvbV9kczoxOworICAgIHU4ICAgIHRvX2RzOjE7CisgICAgI2Vsc2UKKyAgICB1OCAgICB0b19kczoxOworICAgIHU4ICAgIGZyb21fZHM6MTsKKyAgICB1OCAgICBtb3JlX2ZyYWc6MTsKKyAgICB1OCAgICByZXRyeToxOworICAgIHU4ICAgIHB3cl9tZ3Q6MTsKKyAgICB1OCAgICBtb3JlX2RhdGE6MTsKKyAgICB1OCAgICBXRVA6MTsKKyAgICB1OCAgICBvcmRlcjoxOworICAgICNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBNYW5hZ2VtZW50X0ZyYW1lIHsKKyAgICBzdHJ1Y3QgTUFDX2ZyYW1lX2NvbnRyb2wgZnJhbWVfY29udHJvbDsgLy8gMkIsIFRvRFMsRnJvbURTLE1vcmVGcmFnLE1vcmVEYXRhLE9yZGVyPTAKKyAgICB1MTYJCWR1cmF0aW9uOworICAgIHU4CQlEQVtNQUNfQUREUl9MRU5HVEhdOwkJCS8vIEFkZHIxCisgICAgdTgJCVNBW01BQ19BRERSX0xFTkdUSF07CQkJLy8gQWRkcjIKKyAgICB1OAkJQlNTSURbTUFDX0FERFJfTEVOR1RIXTsJCQkvLyBBZGRyMworICAgIHUxNgkJU2VxdWVuY2VfQ29udHJvbDsKKyAgICAvLyBNYW5hZ2VtZW50IEZyYW1lIEJvZHkgPD0gMzI1IGJ5dGVzCisgICAgLy8gRkNTIDQgYnl0ZXMKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8vIFNXLU1BQyBkb24ndCBUeC9SeCBDb250cm9sLUZyYW1lLCBIVy1NQUMgZG8gaXQuCitzdHJ1Y3QgQ29udHJvbF9GcmFtZSB7CisgICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8vIFRvRFMsRnJvbURTLE1vcmVGcmFnLFJldHJ5LE1vcmVEYXRhLFdFUCxPcmRlcj0wCisgICAgdTE2CQlkdXJhdGlvbjsKKyAgICB1OAkJUkFbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1OAkJVEFbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1MTYJCUZDUzsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBEYXRhX0ZyYW1lIHsKKyAgICBzdHJ1Y3QgTUFDX2ZyYW1lX2NvbnRyb2wgZnJhbWVfY29udHJvbDsKKyAgICB1MTYJCWR1cmF0aW9uOworICAgIHU4CQlBZGRyMVtNQUNfQUREUl9MRU5HVEhdOworICAgIHU4CQlBZGRyMltNQUNfQUREUl9MRU5HVEhdOworICAgIHU4CQlBZGRyM1tNQUNfQUREUl9MRU5HVEhdOworICAgIHUxNgkJU2VxdWVuY2VfQ29udHJvbDsKKyAgICB1OAkJQWRkcjRbTUFDX0FERFJfTEVOR1RIXTsgLy8gb25seSBleGlzdCB3aGVuIFRvRFM9RnJvbURTPTEKKyAgICAvLyBEYXRhIEZyYW1lIEJvZHkgPD0gMjMxMgorICAgIC8vIEZDUworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IERpc2Fzc29jaWF0aW9uX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgcmVhc29uQ29kZTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgbGlzdGVuSW50ZXJ2YWw7CisgICAgdTggICAgIEN1cnJlbnRfQVBfQWRkcmVzc1tNQUNfQUREUl9MRU5HVEhdOy8vZm9yIHJlYXNzb2NpYXRpb24gb25seQorICAgIC8vIFNTSUQgKDIrMzIgYnl0ZXMpCisgICAgLy8gU3VwcG9ydGVkX1JhdGVzICgyKzggYnl0ZXMpCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgQXNzb2NpYXRpb25fUmVzcG9uc2VfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBjYXBhYmlsaXR5X2luZm9ybWF0aW9uOworICAgIHUxNiAgICBzdGF0dXNDb2RlOworICAgIHUxNiAgICBBc3NvY2lhdGlvbl9JRDsKKyAgICBzdHJ1Y3QgU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQgc3VwcG9ydGVkUmF0ZXM7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKnN0cnVjdCBSZWFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBjYXBhYmlsaXR5X2luZm9ybWF0aW9uOworICAgIHUxNiAgICBsaXN0ZW5JbnRlcnZhbDsKKyAgICB1OCAgICAgQ3VycmVudF9BUF9BZGRyZXNzW01BQ19BRERSX0xFTkdUSF07CisgICAgLy8gU1NJRCAoMiszMiBieXRlcykKKyAgICAvLyBTdXBwb3J0ZWRfUmF0ZXMgKDIrOCBieXRlcykKK307Ki8KKy8vIGVsaW1pbmF0ZWQgYnkgV1MgMDcvMjIvMDQgY29tYm9pbmVkIHdpdGggYXNzb2NpYXRlaW9uIHJlcXVlc3QgZnJhbWUuCisKK3N0cnVjdCBSZWFzc29jaWF0aW9uX1Jlc3BvbnNlX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgc3RhdHVzQ29kZTsKKyAgICB1MTYgICAgQXNzb2NpYXRpb25fSUQ7CisgICAgc3RydWN0IFN1cHBvcnRlZF9SYXRlc19FbGVtZW50IHN1cHBvcnRlZFJhdGVzOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IERlYXV0aGVudGljYXRpb25fRnJhbWVfQm9keQoreworICAgIHUxNiAgICByZWFzb25Db2RlOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgUHJvYmVfUmVzcG9uc2VfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBUaW1lc3RhbXA7CisgICAgdTE2ICAgIEJlYWNvbl9JbnRlcnZhbDsKKyAgICB1MTYgICAgQ2FwYWJpbGl0eV9JbmZvcm1hdGlvbjsKKyAgICAvLyBTU0lECisgICAgLy8gU3VwcG9ydGVkX1JhdGVzCisgICAgLy8gUEhZIHBhcmFtZXRlciBTZXQgKERTIFBhcmFtZXRlcnMpCisgICAgLy8gQ0YgcGFyYW1ldGVyIFNldAorICAgIC8vIElCU1MgcGFyYW1ldGVyIFNldAorfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IEF1dGhlbnRpY2F0aW9uX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgYWxnb3JpdGhtTnVtYmVyOworICAgIHUxNiAgICBzZXF1ZW5jZU51bWJlcjsKKyAgICB1MTYgICAgc3RhdHVzQ29kZTsKKyAgICAvLyBOQjogZG9uJ3QgaW5jbHVkZSBDaGFsbGVuZ2VUZXh0IGluIHRoaXMgc3RydWN0dXJlCisJLy8gc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQgc0NoYWxsZW5nZVRleHRFbGVtZW50OyAvLyB3a2NoZW4gYWRkZWQKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2VuZGlmIC8vIF9NQUNfU3RydWN0dXJlX0hfCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWRlODEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKQEAgLTAsMCArMSw2MzIgQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordm9pZAorTWRzX3Jlc2V0X2Rlc2NyaXB0b3IoUEFEQVBURVIgQWRhcHRlcikKK3sKKwlQTURTIHBNZHMgPSAmQWRhcHRlci0+TWRzOworCisJcE1kcy0+VHhQYXVzZSA9IDA7CisJcE1kcy0+VHhUaHJlYWRDb3VudCA9IDA7CisJcE1kcy0+VHhGaWxsSW5kZXggPSAwOworCXBNZHMtPlR4RGVzSW5kZXggPSAwOworCXBNZHMtPlNjYW5UeFBhdXNlID0gMDsKKwltZW1zZXQocE1kcy0+VHhPd25lciwgMCwgKChNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgKyAzKSAmIH4weDAzKSk7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK01kc19pbml0aWFsKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUE1EUyBwTWRzID0gJkFkYXB0ZXItPk1kczsKKworCXBNZHMtPlR4UGF1c2UgPSBGQUxTRTsKKwlwTWRzLT5UeFJUU1RocmVzaG9sZCA9IERFRkFVTFRfUlRTVGhyZXNob2xkOworCXBNZHMtPlR4RnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKworCXZSeFRpbWVySW5pdChBZGFwdGVyKTsvL2ZvciBXUEEgY291bnRlcm1lYXN1cmUKKworCXJldHVybiBoYWxfZ2V0X3R4X2J1ZmZlciggJkFkYXB0ZXItPnNId0RhdGEsICZwTWRzLT5wVHhCdWZmZXIgKTsKK30KKwordm9pZAorTWRzX0Rlc3Ryb3koUEFEQVBURVIgQWRhcHRlcikKK3sKKwl2UnhUaW1lclN0b3AoQWRhcHRlcik7Cit9CisKK3ZvaWQKK01kc19UeChQQURBUFRFUiBBZGFwdGVyKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCVBNRFMJCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCURFU0NSSVBUT1IJVHhEZXM7CisJUERFU0NSSVBUT1IJcFR4RGVzID0gJlR4RGVzOworCXU4CQkqWG1pdEJ1ZkFkZHJlc3M7CisJdTE2CQlYbWl0QnVmU2l6ZSwgUGFja2V0U2l6ZSwgc3RtcCwgQ3VycmVudFNpemUsIEZyYWdtZW50VGhyZXNob2xkOworCXU4CQlGaWxsSW5kZXgsIFR4RGVzSW5kZXgsIEZyYWdtZW50Q291bnQsIEZpbGxDb3VudDsKKwl1bnNpZ25lZCBjaGFyCUJ1ZmZlckZpbGxlZCA9IEZBTFNFLCBNSUNBZGQgPSAwOworCisKKwlpZiAocE1kcy0+VHhQYXVzZSkKKwkJcmV0dXJuOworCWlmICghaGFsX2RyaXZlcl9pbml0X09LKHBId0RhdGEpKQorCQlyZXR1cm47CisKKwkvL09ubHkgb25lIHRocmVhZCBjYW4gYmUgcnVuIGhlcmUKKwlpZiAoIU9TX0FUT01JQ19JTkMoIEFkYXB0ZXIsICZwTWRzLT5UeFRocmVhZENvdW50KSA9PSAxKQorCQlnb3RvIGNsZWFudXA7CisKKwkvLyBTdGFydCB0byBmaWxsIHRoZSBkYXRhCisJZG8geworCQlGaWxsSW5kZXggPSBwTWRzLT5UeEZpbGxJbmRleDsKKwkJaWYgKHBNZHMtPlR4T3duZXJbRmlsbEluZGV4XSkgeyAvLyBJcyBvd25lZCBieSBzb2Z0d2FyZSAwOlllcyAxOk5vCisjaWZkZWYgX1BFX1RYX0RVTVBfCisJCQlXQkRFQlVHKCgiW01kc19UeF0gVHggT3duZXIgaXMgSC9XLlxuIikpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCisJCVhtaXRCdWZBZGRyZXNzID0gcE1kcy0+cFR4QnVmZmVyICsgKE1BWF9VU0JfVFhfQlVGRkVSICogRmlsbEluZGV4KTsgLy9HZXQgYnVmZmVyCisJCVhtaXRCdWZTaXplID0gMDsKKwkJRmlsbENvdW50ID0gMDsKKwkJZG8geworCQkJUGFja2V0U2l6ZSA9IEFkYXB0ZXItPnNNbG1lRnJhbWUubGVuOworCQkJaWYgKCFQYWNrZXRTaXplKQorCQkJCWJyZWFrOworCisJCQkvL0ZvciBDaGVjayB0aGUgYnVmZmVyIHJlc291cmNlCisJCQlGcmFnbWVudFRocmVzaG9sZCA9IENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xEOworCQkJLy85MzExMzAuNS5iCisJCQlGcmFnbWVudENvdW50ID0gUGFja2V0U2l6ZS9GcmFnbWVudFRocmVzaG9sZCArIDE7CisJCQlzdG1wID0gUGFja2V0U2l6ZSArIEZyYWdtZW50Q291bnQqMzIgKyA4Oy8vOTMxMTMwLjUuYyA4Ok1JQworCQkJaWYgKChYbWl0QnVmU2l6ZSArIHN0bXApID49IE1BWF9VU0JfVFhfQlVGRkVSKSB7CisJCQkJcHJpbnRrKCJbTWRzX1R4XSBFeGNlc3MgbWF4IHR4IGJ1ZmZlci5cbiIpOworCQkJCWJyZWFrOyAvLyBidWZmZXIgaXMgbm90IGVub3VnaAorCQkJfQorCisKKwkJCS8vCisJCQkvLyBTdGFydCB0cmFuc21pdHRpbmcKKwkJCS8vCisJCQlCdWZmZXJGaWxsZWQgPSBUUlVFOworCisJCQkvKiBMZWF2ZXMgZmlyc3QgdTggaW50YWN0ICovCisJCQltZW1zZXQoKHU4ICopcFR4RGVzICsgMSwgMCwgc2l6ZW9mKERFU0NSSVBUT1IpIC0gMSk7CisKKwkJCVR4RGVzSW5kZXggPSBwTWRzLT5UeERlc0luZGV4Oy8vR2V0IHRoZSBjdXJyZW50IElECisJCQlwVHhEZXMtPkRlc2NyaXB0b3JfSUQgPSBUeERlc0luZGV4OworCQkJcE1kcy0+VHhEZXNGcm9tWyBUeERlc0luZGV4IF0gPSAyOy8vU3RvcmluZyB0aGUgaW5mb3JtYXRpb24gb2Ygc291cmNlIGNvbW1pbmcgZnJvbQorCQkJcE1kcy0+VHhEZXNJbmRleCsrOworCQkJcE1kcy0+VHhEZXNJbmRleCAlPSBNQVhfVVNCX1RYX0RFU0NSSVBUT1I7CisKKwkJCU1MTUVfR2V0TmV4dFBhY2tldCggQWRhcHRlciwgcFR4RGVzICk7CisKKwkJCS8vIENvcHkgaGVhZGVyLiA4Ynl0ZSBVU0IgKyAyNGJ5dGUgODAyLjExSGRyLiBTZXQgVHhSYXRlLCBQcmVhbWJsZSB0eXBlCisJCQlNZHNfSGVhZGVyQ29weSggQWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyApOworCisJCQkvLyBGb3Igc3BlZWQgdXAgS2V5IHNldHRpbmcKKwkJCWlmIChwVHhEZXMtPkVhcEZpeCkgeworI2lmZGVmIF9QRV9UWF9EVU1QXworCQkJCVdCREVCVUcoKCIzNTogRVBBIDR0aCBmcmFtZSBkZXRlY3RlZC4gU2l6ZSA9ICVkXG4iLCBQYWNrZXRTaXplKSk7CisjZW5kaWYKKwkJCQlwSHdEYXRhLT5Jc0tleVByZVNldCA9IDE7CisJCQl9CisKKwkJCS8vIENvcHkgKGZyYWdtZW50KSBmcmFtZSBib2R5LCBhbmQgc2V0IFVTQiwgODAyLjExIGhkciBmbGFnCisJCQlDdXJyZW50U2l6ZSA9IE1kc19Cb2R5Q29weShBZGFwdGVyLCBwVHhEZXMsIFhtaXRCdWZBZGRyZXNzKTsKKworCQkJLy8gU2V0IFJUUy9DVFMgYW5kIE5vcm1hbCBkdXJhdGlvbiBmaWVsZCBpbnRvIGJ1ZmZlcgorCQkJTWRzX0R1cmF0aW9uU2V0KEFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MpOworCisJCQkvLworCQkJLy8gQ2FsY3VsYXRpb24gTUlDIGZyb20gYnVmZmVyIHdoaWNoIG1heWJlIGZyYWdtZW50LCB0aGVuIGZpbGwgaW50byB0ZW1wb3JhcnkgYWRkcmVzcyA4IGJ5dGUKKwkJCS8vIDkzMTEzMC41LmUKKwkJCWlmIChNSUNBZGQpCisJCQkJTWRzX01pY0ZpbGwoIEFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MgKTsKKworCQkJLy9TaGlmdCB0byB0aGUgbmV4dCBhZGRyZXNzCisJCQlYbWl0QnVmU2l6ZSArPSBDdXJyZW50U2l6ZTsKKwkJCVhtaXRCdWZBZGRyZXNzICs9IEN1cnJlbnRTaXplOworCisjaWZkZWYgX0lCU1NfQkVBQ09OX1NFUV9TVElDS18KKwkJCWlmICgoWG1pdEJ1ZkFkZHJlc3NbIERPVF8xMV9EQV9PRkZTRVQrOCBdICYgMHhmYykgIT0gTUFDX1NVQlRZUEVfTU5HTU5UX1BST0JFX1JFUVVFU1QpIC8vICs4IGZvciBVU0IgaGRyCisjZW5kaWYKKwkJCQlwTWRzLT5UeFRvZ2dsZSA9IFRSVUU7CisKKwkJCS8vIEdldCBwYWNrZXQgdG8gdHJhbnNtaXQgY29tcGxldGVkLCAxOlRFU1RTVEEgMjpNTE1FIDM6IE5kaXMgZGF0YQorCQkJTUxNRV9TZW5kQ29tcGxldGUoQWRhcHRlciwgMCwgVFJVRSk7CisKKwkJCS8vIFNvZnR3YXJlIFRTQyBjb3VudCAyMDA2MDIxNAorCQkJcE1kcy0+VHhUc2MrKzsKKwkJCWlmIChwTWRzLT5UeFRzYyA9PSAwKQorCQkJCXBNZHMtPlR4VHNjXzIrKzsKKworCQkJRmlsbENvdW50Kys7IC8vIDIwMDYwOTI4CisJCX0gd2hpbGUgKEhBTF9VU0JfTU9ERV9CVVJTVChwSHdEYXRhKSk7IC8vIEVuZCBvZiBtdWx0aXBsZSBNU0RVIGNvcHkgbG9vcC4gRkFMU0UgPSBzaW5nbGUgVFJVRSA9IG11bHRpcGxlIHNlbmRpbmcKKworCQkvLyBNb3ZlIHRvIHRoZSBuZXh0IG9uZSwgaWYgbmVjZXNzYXJ5CisJCWlmIChCdWZmZXJGaWxsZWQpIHsKKwkJCS8vIHNpemUgc2V0dGluZworCQkJcE1kcy0+VHhCdWZmZXJTaXplWyBGaWxsSW5kZXggXSA9IFhtaXRCdWZTaXplOworCisJCQkvLyAyMDA2MDkyOCBzZXQgVHggY291bnQKKwkJCXBNZHMtPlR4Q291bnRJbkJ1ZmZlcltGaWxsSW5kZXhdID0gRmlsbENvdW50OworCisJCQkvLyBTZXQgb3duZXIgZmxhZworCQkJcE1kcy0+VHhPd25lcltGaWxsSW5kZXhdID0gMTsKKworCQkJcE1kcy0+VHhGaWxsSW5kZXgrKzsKKwkJCXBNZHMtPlR4RmlsbEluZGV4ICU9IE1BWF9VU0JfVFhfQlVGRkVSX05VTUJFUjsKKwkJCUJ1ZmZlckZpbGxlZCA9IEZBTFNFOworCQl9IGVsc2UKKwkJCWJyZWFrOworCisJCWlmICghUGFja2V0U2l6ZSkgLy8gTm8gbW9yZSBwayBmb3IgdHJhbnNtaXR0aW5nCisJCQlicmVhazsKKworCX0gd2hpbGUoVFJVRSk7CisKKwkvLworCS8vIFN0YXJ0IHRvIHNlbmQgYnkgbG93ZXIgbW9kdWxlCisJLy8KKwlpZiAoIXBId0RhdGEtPklzS2V5UHJlU2V0KQorCQlXYjM1VHhfc3RhcnQocEh3RGF0YSk7CisKKyBjbGVhbnVwOgorCU9TX0FUT01JQ19ERUMoIEFkYXB0ZXIsICZwTWRzLT5UeFRocmVhZENvdW50ICk7Cit9CisKK3ZvaWQKK01kc19TZW5kQ29tcGxldGUoUEFEQVBURVIgQWRhcHRlciwgUFQwMl9ERVNDUklQVE9SIHBUMDIpCit7CisJUE1EUwlwTWRzID0gJkFkYXB0ZXItPk1kczsKKwlwaHdfZGF0YV90CXBId0RhdGEgPSAmQWRhcHRlci0+c0h3RGF0YTsKKwl1OAlQYWNrZXRJZCA9ICh1OClwVDAyLT5UMDJfVHhfUGt0SUQ7CisJdW5zaWduZWQgY2hhcglTZW5kT0sgPSBUUlVFOworCXU4CVJldHJ5Q291bnQsIFR4UmF0ZTsKKworCWlmIChwVDAyLT5UMDJfSWdub3JlUmVzdWx0KSAvLyBEb24ndCBjYXJlIHRoZSByZXN1bHQKKwkJcmV0dXJuOworCWlmIChwVDAyLT5UMDJfSXNMYXN0TXBkdSkgeworCQkvL1RPRE86IERUTyAtLSBnZXQgdGhlIHJldHJ5IGNvdW50IGFuZCBmcmFnbWVudCBjb3VudAorCQkvLyBUeCByYXRlCisJCVR4UmF0ZSA9IHBNZHMtPlR4UmF0ZVsgUGFja2V0SWQgXVsgMCBdOworCQlSZXRyeUNvdW50ID0gKHU4KXBUMDItPlQwMl9NUERVX0NudDsKKwkJaWYgKHBUMDItPnZhbHVlICYgRkxBR19FUlJPUl9UWF9NQVNLKSB7CisJCQlTZW5kT0sgPSBGQUxTRTsKKworCQkJaWYgKHBUMDItPlQwMl90cmFuc21pdF9hYm9ydCB8fCBwVDAyLT5UMDJfb3V0X29mX01heFR4TVNEVUxpZnRUaW1lKSB7CisJCQkJLy9yZXRyeSBlcnJvcgorCQkJCXBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCArPSAoUmV0cnlDb3VudCsxKTsKKwkJCQkvL1tmb3IgdHggZGVidWddCisJCQkJaWYgKFJldHJ5Q291bnQ8NykKKwkJCQkJcEh3RGF0YS0+dHhfcmV0cnlfY291bnRbUmV0cnlDb3VudF0gKz0gUmV0cnlDb3VudDsKKwkJCQllbHNlCisJCQkJCXBId0RhdGEtPnR4X3JldHJ5X2NvdW50WzddICs9IFJldHJ5Q291bnQ7CisJCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQkJCVdCREVCVUcoKCJkdG9fdHhfcmV0cnlfY291bnQgPSVkXG4iLCBwSHdEYXRhLT5kdG9fdHhfcmV0cnlfY291bnQpKTsKKwkJCQkjZW5kaWYKKwkJCQlNVE9fU2V0VHhDb3VudChBZGFwdGVyLCBUeFJhdGUsIFJldHJ5Q291bnQpOworCQkJfQorCQkJcEh3RGF0YS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKFJldHJ5Q291bnQrMSk7CisKKwkJCS8vW2ZvciB0eCBkZWJ1Z10KKwkJCWlmIChwVDAyLT5UMDJfdHJhbnNtaXRfYWJvcnRfZHVlX3RvX1RCVFQpCisJCQkJcEh3RGF0YS0+dHhfVEJUVF9zdGFydF9jb3VudCsrOworCQkJaWYgKHBUMDItPlQwMl90cmFuc21pdF93aXRob3V0X2VuY3J5cHRpb25fZHVlX3RvX3dlcF9vbl9mYWxzZSkKKwkJCQlwSHdEYXRhLT50eF9XZXBPbl9mYWxzZV9jb3VudCsrOworCQkJaWYgKHBUMDItPlQwMl9kaXNjYXJkX2R1ZV90b19udWxsX3dlcF9rZXkpCisJCQkJcEh3RGF0YS0+dHhfTnVsbF9rZXlfY291bnQrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChwVDAyLT5UMDJfZWZmZWN0aXZlX3RyYW5zbWlzc2lvbl9yYXRlKQorCQkJCXBId0RhdGEtPnR4X0VUUl9jb3VudCsrOworCQkJTVRPX1NldFR4Q291bnQoQWRhcHRlciwgVHhSYXRlLCBSZXRyeUNvdW50KTsKKwkJfQorCisJCS8vIENsZWFyIHNlbmQgcmVzdWx0IGJ1ZmZlcgorCQlwTWRzLT5UeFJlc3VsdFsgUGFja2V0SWQgXSA9IDA7CisJfSBlbHNlCisJCXBNZHMtPlR4UmVzdWx0WyBQYWNrZXRJZCBdIHw9ICgodTE2KShwVDAyLT52YWx1ZSAmIDB4MGZmZmYpKTsKK30KKwordm9pZAorTWRzX0hlYWRlckNvcHkoUEFEQVBURVIgQWRhcHRlciwgUERFU0NSSVBUT1IgcERlcywgdTggKlRhcmdldEJ1ZmZlcikKK3sKKwlQTURTCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCXU4CSpzcmNfYnVmZmVyID0gcERlcy0+YnVmZmVyX2FkZHJlc3NbMF07Ly85MzExMzAuNS5nCisJUFQwMF9ERVNDUklQVE9SCXBUMDA7CisJUFQwMV9ERVNDUklQVE9SCXBUMDE7CisJdTE2CXN0bXA7CisJdTgJaSwgY3RtcDEsIGN0bXAyLCBjdG1wZjsKKwl1MTYJRnJhZ21lbnRUaHJlc2hvbGQgPSBDVVJSRU5UX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKworCisJc3RtcCA9IHBEZXMtPmJ1ZmZlcl90b3RhbF9zaXplOworCS8vCisJLy8gU2V0IFVTQiBoZWFkZXIgOCBieXRlCisJLy8KKwlwVDAwID0gKFBUMDBfREVTQ1JJUFRPUilUYXJnZXRCdWZmZXI7CisJVGFyZ2V0QnVmZmVyICs9IDQ7CisJcFQwMSA9IChQVDAxX0RFU0NSSVBUT1IpVGFyZ2V0QnVmZmVyOworCVRhcmdldEJ1ZmZlciArPSA0OworCisJcFQwMC0+dmFsdWUgPSAwOy8vIENsZWFyCisJcFQwMS0+dmFsdWUgPSAwOy8vIENsZWFyCisKKwlwVDAwLT5UMDBfdHhfcGFja2V0X2lkID0gcERlcy0+RGVzY3JpcHRvcl9JRDsvLyBTZXQgcGFja2V0IElECisJcFQwMC0+VDAwX2hlYWRlcl9sZW5ndGggPSAyNDsvLyBTZXQgaGVhZGVyIGxlbmd0aAorCXBUMDEtPlQwMV9yZXRyeV9hYm9ydF9lYmFibGUgPSAxOy8vOTIxMDEzIDkzMTEzMC41LmgKKworCS8vIEtleSBJRCBzZXR1cAorCXBUMDEtPlQwMV93ZXBfaWQgPSAwOworCisJRnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsJLy9EbyBub3QgZnJhZ21lbnQKKwkvLyBDb3B5IGZ1bGwgZGF0YSwgdGhlIDEnc3QgYnVmZmVyIGNvbnRhaW4gYWxsIHRoZSBkYXRhIDkzMTEzMC41LmoKKwltZW1jcHkoIFRhcmdldEJ1ZmZlciwgc3JjX2J1ZmZlciwgRE9UXzExX01BQ19IRUFERVJfU0laRSApOy8vIENvcHkgaGVhZGVyCisJcERlcy0+YnVmZmVyX2FkZHJlc3NbMF0gPSBzcmNfYnVmZmVyICsgRE9UXzExX01BQ19IRUFERVJfU0laRTsKKwlwRGVzLT5idWZmZXJfdG90YWxfc2l6ZSAtPSBET1RfMTFfTUFDX0hFQURFUl9TSVpFOworCXBEZXMtPmJ1ZmZlcl9zaXplWzBdID0gcERlcy0+YnVmZmVyX3RvdGFsX3NpemU7CisKKwkvLyBTZXQgZnJhZ21lbnQgdGhyZXNob2xkCisJRnJhZ21lbnRUaHJlc2hvbGQgLT0gKERPVF8xMV9NQUNfSEVBREVSX1NJWkUgKyA0KTsKKwlwRGVzLT5GcmFnbWVudFRocmVzaG9sZCA9IEZyYWdtZW50VGhyZXNob2xkOworCisJLy8gU2V0IG1vcmUgZnJhZyBiaXQKKwlUYXJnZXRCdWZmZXJbMV0gfD0gMHgwNDsvLyBTZXQgbW9yZSBmcmFnIGJpdAorCisJLy8KKwkvLyBTZXQgdHggcmF0ZQorCS8vCisJc3RtcCA9ICoodTE2ICopKFRhcmdldEJ1ZmZlciszMCk7IC8vIDJuIGFsaWdubWVudCBhZGRyZXNzCisKKwkvL1VzZSBiYXNpYyByYXRlCisJY3RtcDEgPSBjdG1wZiA9IENVUlJFTlRfVFhfUkFURV9GT1JfTU5HOworCisJcERlcy0+VHhSYXRlID0gY3RtcDE7CisJI2lmZGVmIF9QRV9UWF9EVU1QXworCVdCREVCVUcoKCJUeCByYXRlID0leFxuIiwgY3RtcDEpKTsKKwkjZW5kaWYKKworCXBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgPSAoY3RtcDElMykgPyAwIDogMTsKKworCWZvciggaT0wOyBpPDI7IGkrKyApIHsKKwkJaWYoIGkgPT0gMSApCisJCQljdG1wMSA9IGN0bXBmOworCisJCXBNZHMtPlR4UmF0ZVtwRGVzLT5EZXNjcmlwdG9yX0lEXVtpXSA9IGN0bXAxOyAvLyBiYWNrdXAgdGhlIHRhIHJhdGUgYW5kIGZhbGwgYmFjayByYXRlCisKKwkJaWYoIGN0bXAxID09IDEwOCkgY3RtcDIgPSA3OworCQllbHNlIGlmKCBjdG1wMSA9PSA5NiApIGN0bXAyID0gNjsgLy8gUmF0ZSBjb252ZXJ0IGZvciBVU0IKKwkJZWxzZSBpZiggY3RtcDEgPT0gNzIgKSBjdG1wMiA9IDU7CisJCWVsc2UgaWYoIGN0bXAxID09IDQ4ICkgY3RtcDIgPSA0OworCQllbHNlIGlmKCBjdG1wMSA9PSAzNiApIGN0bXAyID0gMzsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMjQgKSBjdG1wMiA9IDI7CisJCWVsc2UgaWYoIGN0bXAxID09IDE4ICkgY3RtcDIgPSAxOworCQllbHNlIGlmKCBjdG1wMSA9PSAxMiApIGN0bXAyID0gMDsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMjIgKSBjdG1wMiA9IDM7CisJCWVsc2UgaWYoIGN0bXAxID09IDExICkgY3RtcDIgPSAyOworCQllbHNlIGlmKCBjdG1wMSA9PSA0ICApIGN0bXAyID0gMTsKKwkJZWxzZSBjdG1wMiA9IDA7IC8vIGlmKCBjdG1wMSA9PSAyICApIG9yIGRlZmF1bHQKKworCQlpZiggaSA9PSAwICkKKwkJCXBUMDEtPlQwMV90cmFuc21pdF9yYXRlID0gY3RtcDI7CisJCWVsc2UKKwkJCXBUMDEtPlQwMV9mYWxsX2JhY2tfcmF0ZSA9IGN0bXAyOworCX0KKworCS8vCisJLy8gU2V0IHByZWFtYmxlIHR5cGUKKwkvLworCWlmICgocFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSA9PSAwKSAmJiAocFQwMS0+VDAxX3RyYW5zbWl0X3JhdGUgPT0gMCkpCS8vIFJBVEVfMU0KKwkJcERlcy0+UHJlYW1ibGVNb2RlID0gIFdMQU5fUFJFQU1CTEVfVFlQRV9MT05HOworCWVsc2UKKwkJcERlcy0+UHJlYW1ibGVNb2RlID0gIENVUlJFTlRfUFJFQU1CTEVfTU9ERTsKKwlwVDAxLT5UMDFfcGxjcF9oZWFkZXJfbGVuZ3RoID0gcERlcy0+UHJlYW1ibGVNb2RlOwkvLyBTZXQgcHJlYW1ibGUKKworfQorCisvLyBUaGUgZnVuY3Rpb24gcmV0dXJuIHRoZSA0biBzaXplIG9mIHVzYiBwawordTE2CitNZHNfQm9keUNvcHkoUEFEQVBURVIgQWRhcHRlciwgUERFU0NSSVBUT1IgcERlcywgdTggKlRhcmdldEJ1ZmZlcikKK3sKKwlQVDAwX0RFU0NSSVBUT1IJcFQwMDsKKwlQTURTCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCXU4CSpidWZmZXI7CisJdTgJKnNyY19idWZmZXI7CisJdTgJKnBjdG1wOworCXUxNglTaXplID0gMDsKKwl1MTYJU2l6ZUxlZnQsIENvcHlTaXplLCBDb3B5TGVmdCwgc3RtcDsKKwl1OAlidWZfaW5kZXgsIEZyYWdtZW50Q291bnQgPSAwOworCisKKwkvLyBDb3B5IGZyYWdtZW50IGJvZHkKKwlidWZmZXIgPSBUYXJnZXRCdWZmZXI7IC8vIHNoaWZ0IDhCIHVzYiArIDI0QiA4MDIuMTEKKwlTaXplTGVmdCA9IHBEZXMtPmJ1ZmZlcl90b3RhbF9zaXplOworCWJ1Zl9pbmRleCA9IHBEZXMtPmJ1ZmZlcl9zdGFydF9pbmRleDsKKworCXBUMDAgPSAoUFQwMF9ERVNDUklQVE9SKWJ1ZmZlcjsKKwl3aGlsZSAoU2l6ZUxlZnQpIHsKKwkJcFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpYnVmZmVyOworCQlDb3B5U2l6ZSA9IFNpemVMZWZ0OworCQlpZiAoU2l6ZUxlZnQgPiBwRGVzLT5GcmFnbWVudFRocmVzaG9sZCkgeworCQkJQ29weVNpemUgPSBwRGVzLT5GcmFnbWVudFRocmVzaG9sZDsKKwkJCXBUMDAtPlQwMF9mcmFtZV9sZW5ndGggPSAyNCArIENvcHlTaXplOy8vU2V0IFVTQiBsZW5ndGgKKwkJfSBlbHNlCisJCQlwVDAwLT5UMDBfZnJhbWVfbGVuZ3RoID0gMjQgKyBTaXplTGVmdDsvL1NldCBVU0IgbGVuZ3RoCisKKwkJU2l6ZUxlZnQgLT0gQ29weVNpemU7CisKKwkJLy8gMSBCeXRlIG9wZXJhdGlvbgorCQlwY3RtcCA9ICh1OCAqKSggYnVmZmVyICsgOCArIERPVF8xMV9TRVFVRU5DRV9PRkZTRVQgKTsKKwkJKnBjdG1wICY9IDB4ZjA7CisJCSpwY3RtcCB8PSBGcmFnbWVudENvdW50Oy8vOTMxMTMwLjUubQorCQlpZiggIUZyYWdtZW50Q291bnQgKQorCQkJcFQwMC0+VDAwX2ZpcnN0X21wZHUgPSAxOworCisJCWJ1ZmZlciArPSAzMjsgLy8gOEIgdXNiICsgMjRCIDgwMi4xMSBoZWFkZXIKKwkJU2l6ZSArPSAzMjsKKworCQkvLyBDb3B5IGludG8gYnVmZmVyCisJCXN0bXAgPSBDb3B5U2l6ZSArIDM7CisJCXN0bXAgJj0gfjB4MDM7Ly80biBBbGlnbm1lbnQKKwkJU2l6ZSArPSBzdG1wOy8vIEN1cnJlbnQgNG4gb2Zmc2V0IG9mIG1wZHUKKworCQl3aGlsZSAoQ29weVNpemUpIHsKKwkJCS8vIENvcHkgYm9keQorCQkJc3JjX2J1ZmZlciA9IHBEZXMtPmJ1ZmZlcl9hZGRyZXNzW2J1Zl9pbmRleF07CisJCQlDb3B5TGVmdCA9IENvcHlTaXplOworCQkJaWYgKENvcHlTaXplID49IHBEZXMtPmJ1ZmZlcl9zaXplW2J1Zl9pbmRleF0pIHsKKwkJCQlDb3B5TGVmdCA9IHBEZXMtPmJ1ZmZlcl9zaXplW2J1Zl9pbmRleF07CisKKwkJCQkvLyBHZXQgdGhlIG5leHQgYnVmZmVyIG9mIGRlc2NyaXB0b3IKKwkJCQlidWZfaW5kZXgrKzsKKwkJCQlidWZfaW5kZXggJT0gTUFYX0RFU0NSSVBUT1JfQlVGRkVSX0lOREVYOworCQkJfSBlbHNlIHsKKwkJCQl1OAkqcGN0bXAgPSBwRGVzLT5idWZmZXJfYWRkcmVzc1tidWZfaW5kZXhdOworCQkJCXBjdG1wICs9IENvcHlTaXplOworCQkJCXBEZXMtPmJ1ZmZlcl9hZGRyZXNzW2J1Zl9pbmRleF0gPSBwY3RtcDsKKwkJCQlwRGVzLT5idWZmZXJfc2l6ZVtidWZfaW5kZXhdIC09IENvcHlTaXplOworCQkJfQorCisJCQltZW1jcHkoYnVmZmVyLCBzcmNfYnVmZmVyLCBDb3B5TGVmdCk7CisJCQlidWZmZXIgKz0gQ29weUxlZnQ7CisJCQlDb3B5U2l6ZSAtPSBDb3B5TGVmdDsKKwkJfQorCisJCS8vIDkzMTEzMC41Lm4KKwkJaWYgKHBNZHMtPk1pY0FkZCkgeworCQkJaWYgKCFTaXplTGVmdCkgeworCQkJCXBNZHMtPk1pY1dyaXRlQWRkcmVzc1sgcE1kcy0+TWljV3JpdGVJbmRleCBdID0gYnVmZmVyIC0gcE1kcy0+TWljQWRkOworCQkJCXBNZHMtPk1pY1dyaXRlU2l6ZVsgcE1kcy0+TWljV3JpdGVJbmRleCBdID0gcE1kcy0+TWljQWRkOworCQkJCXBNZHMtPk1pY0FkZCA9IDA7CisJCQl9CisJCQllbHNlIGlmKCBTaXplTGVmdCA8IDggKSAvLzkzMTEzMC41LnAKKwkJCXsKKwkJCQlwTWRzLT5NaWNBZGQgPSBTaXplTGVmdDsKKwkJCQlwTWRzLT5NaWNXcml0ZUFkZHJlc3NbIHBNZHMtPk1pY1dyaXRlSW5kZXggXSA9IGJ1ZmZlciAtICggOCAtIFNpemVMZWZ0ICk7CisJCQkJcE1kcy0+TWljV3JpdGVTaXplWyBwTWRzLT5NaWNXcml0ZUluZGV4IF0gPSA4IC0gU2l6ZUxlZnQ7CisJCQkJcE1kcy0+TWljV3JpdGVJbmRleCsrOworCQkJfQorCQl9CisKKwkJLy8gRG9lcyBpdCBuZWVkIHRvIGdlbmVyYXRlIHRoZSBuZXcgaGVhZGVyIGZvciBuZXh0IG1wZHU/CisJCWlmIChTaXplTGVmdCkgeworCQkJYnVmZmVyID0gVGFyZ2V0QnVmZmVyICsgU2l6ZTsgLy8gR2V0IHRoZSBuZXh0IDRuIHN0YXJ0IGFkZHJlc3MKKwkJCW1lbWNweSggYnVmZmVyLCBUYXJnZXRCdWZmZXIsIDMyICk7Ly9Db3B5IDhCIFVTQiArMjRCIDgwMi4xMQorCQkJcFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpYnVmZmVyOworCQkJcFQwMC0+VDAwX2ZpcnN0X21wZHUgPSAwOworCQl9CisKKwkJRnJhZ21lbnRDb3VudCsrOworCX0KKworCXBUMDAtPlQwMF9sYXN0X21wZHUgPSAxOworCXBUMDAtPlQwMF9Jc0xhc3RNcGR1ID0gMTsKKwlidWZmZXIgPSAodTggKilwVDAwICsgODsgLy8gKzggZm9yIFVTQiBoZHIKKwlidWZmZXJbMV0gJj0gfjB4MDQ7IC8vIENsZWFyIG1vcmUgZnJhZyBiaXQgb2YgODAyLjExIGZyYW1lIGNvbnRyb2wKKwlwRGVzLT5GcmFnbWVudENvdW50ID0gRnJhZ21lbnRDb3VudDsgLy8gVXBkYXRlIHRoZSBjb3JyZWN0IGZyYWdtZW50IG51bWJlcgorCXJldHVybiBTaXplOworfQorCisKK3ZvaWQKK01kc19EdXJhdGlvblNldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzLCAgdTggKmJ1ZmZlciApCit7CisJUFQwMF9ERVNDUklQVE9SCXBUMDA7CisJUFQwMV9ERVNDUklQVE9SCXBUMDE7CisJdTE2CUR1cmF0aW9uLCBOZXh0Qm9keUxlbiwgT2Zmc2V0U2l6ZTsKKwl1OAlSYXRlLCBpOworCXVuc2lnbmVkIGNoYXIJQ1RTX29uID0gRkFMU0UsIFJUU19vbiA9IEZBTFNFOworCVBUMDBfREVTQ1JJUFRPUiBwTmV4dFQwMDsKKwl1MTYgQm9keUxlbiA9IDA7CisJdW5zaWduZWQgY2hhciBib0dyb3VwQWRkciA9IEZBTFNFOworCisKKwlPZmZzZXRTaXplID0gcERlcy0+RnJhZ21lbnRUaHJlc2hvbGQgKyAzMiArIDM7CisJT2Zmc2V0U2l6ZSAmPSB+MHgwMzsKKwlSYXRlID0gcERlcy0+VHhSYXRlID4+IDE7CisJaWYgKCFSYXRlKQorCQlSYXRlID0gMTsKKworCXBUMDAgPSAoUFQwMF9ERVNDUklQVE9SKWJ1ZmZlcjsKKwlwVDAxID0gKFBUMDFfREVTQ1JJUFRPUikoYnVmZmVyKzQpOworCXBOZXh0VDAwID0gKFBUMDBfREVTQ1JJUFRPUikoYnVmZmVyK09mZnNldFNpemUpOworCisJaWYoIGJ1ZmZlclsgRE9UXzExX0RBX09GRlNFVCs4IF0gJiAweDEgKSAvLyArOCBmb3IgVVNCIGhkcgorCQlib0dyb3VwQWRkciA9IFRSVUU7CisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBTZXQgUlRTL0NUUyBtZWNoYW5pc20KKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlpZiAoIWJvR3JvdXBBZGRyKQorCXsKKwkJLy9OT1RFIDogSWYgdGhlIHByb3RlY3Rpb24gbW9kZSBpcyBlbmFibGVkIGFuZCB0aGUgTVNEVSB3aWxsIGJlIGZyYWdtZW50ZWQsCisJCS8vCQkgdGhlIHR4IHJhdGVzIG9mIE1QRFVzIHdpbGwgYWxsIGJlIERTU1MgcmF0ZXMuIFNvIGl0IHdpbGwgbm90IHVzZQorCQkvLwkJIENUUy10by1zZWxmIGluIHRoaXMgY2FzZS4gQ1RTLVRvLXNlbGYgd2lsbCBvbmx5IGJlIHVzZWQgd2hlbiB3aXRob3V0CisJCS8vCQkgZnJhZ21lbnRhdGlvbi4gLS0gMjAwNTAxMTIKKwkJQm9keUxlbiA9ICh1MTYpcFQwMC0+VDAwX2ZyYW1lX2xlbmd0aDsJLy9pbmNsdWRlIDgwMi4xMSBoZWFkZXIKKwkJQm9keUxlbiArPSA0OwkvL0NSQworCisJCWlmKCBCb2R5TGVuID49IENVUlJFTlRfUlRTX1RIUkVTSE9MRCApCisJCQlSVFNfb24gPSBUUlVFOyAvLyBVc2luZyBSVFMKKwkJZWxzZQorCQl7CisJCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSApIC8vIElzIHVzaW5nIE9GRE0KKwkJCXsKKwkJCQlpZiggQ1VSUkVOVF9QUk9URUNUX01FQ0hBTklTTSApIC8vIElzIHVzaW5nIHByb3RlY3QKKwkJCQkJQ1RTX29uID0gVFJVRTsgLy8gVXNpbmcgQ1RTCisJCQl9CisJCX0KKwl9CisKKwlpZiggUlRTX29uIHx8IENUU19vbiApCisJeworCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSkgLy8gSXMgdXNpbmcgT0ZETQorCQl7CisJCQkvL0NUUyBkdXJhdGlvbgorCQkJLy8gMiBTSUZTICsgREFUQSB0cmFuc21pdCB0aW1lICsgMSBBQ0sKKwkJCS8vIEFDSyBSYXRlIDogMjQgTWVnYSBicHMKKwkJCS8vIEFDSyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJRHVyYXRpb24gPSAyKkRFRkFVTFRfU0lGU1RJTUUgKworCQkJCQkgICAyKlBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OICsKKwkJCQkJICAgKChCb2R5TGVuKjggKyAyMiArIFJhdGUqNCAtIDEpLyhSYXRlKjQpKSpUc3ltICsKKwkJCQkJICAgKCgxMTIgKyAyMiArIDk1KS85NikqVHN5bTsKKwkJfQorCQllbHNlCS8vRFNTUworCQl7CisJCQkvL0NUUyBkdXJhdGlvbgorCQkJLy8gMiBTSUZTICsgREFUQSB0cmFuc21pdCB0aW1lICsgMSBBQ0sKKwkJCS8vIFJhdGUgOiA/PyBNZWdhIGJwcworCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQlpZiggcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCApIC8vbG9uZyBwcmVhbWJsZQorCQkJCUR1cmF0aW9uID0gTE9OR19QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRSoyOworCQkJZWxzZQorCQkJCUR1cmF0aW9uID0gU0hPUlRfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUqMjsKKworCQkJRHVyYXRpb24gKz0gKCAoKEJvZHlMZW4gKyAxNCkqOCArIFJhdGUtMSkgLyBSYXRlICsKKwkJCQkJCURFRkFVTFRfU0lGU1RJTUUqMiApOworCQl9CisKKwkJaWYoIFJUU19vbiApCisJCXsKKwkJCWlmKCBwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlICkgLy8gSXMgdXNpbmcgT0ZETQorCQkJeworCQkJCS8vQ1RTICsgMSBTSUZTICsgQ1RTIGR1cmF0aW9uCisJCQkJLy9DVFMgUmF0ZSA6IDI0IE1lZ2EgYnBzCisJCQkJLy9DVFMgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMKKwkJCQlEdXJhdGlvbiArPSAoREVGQVVMVF9TSUZTVElNRSArCisJCQkJCQkJCVBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OICsKKwkJCQkJCQkJKCgxMTIgKyAyMiArIDk1KS85NikqVHN5bSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy9DVFMgKyAxIFNJRlMgKyBDVFMgZHVyYXRpb24KKwkJCQkvL0NUUyBSYXRlIDogPz8gTWVnYSBicHMKKwkJCQkvL0NUUyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJCWlmKCBwVDAxLT5UMDFfcGxjcF9oZWFkZXJfbGVuZ3RoICkgLy9sb25nIHByZWFtYmxlCisJCQkJCUR1cmF0aW9uICs9IExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUU7CisJCQkJZWxzZQorCQkJCQlEdXJhdGlvbiArPSBTSE9SVF9QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRTsKKworCQkJCUR1cmF0aW9uICs9ICggKCgxMTIgKyBSYXRlLTEpIC8gUmF0ZSkgKyBERUZBVUxUX1NJRlNUSU1FICk7CisJCQl9CisJCX0KKworCQkvLyBTZXQgdGhlIHZhbHVlIGludG8gVVNCIGRlc2NyaXB0b3IKKwkJcFQwMS0+VDAxX2FkZF9ydHMgPSBSVFNfb24gPyAxIDogMDsKKwkJcFQwMS0+VDAxX2FkZF9jdHMgPSBDVFNfb24gPyAxIDogMDsKKwkJcFQwMS0+VDAxX3J0c19jdHNfZHVyYXRpb24gPSBEdXJhdGlvbjsKKwl9CisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBGaWxsIHRoZSBtb3JlIGZyYWdtZW50IGRlc2NyaXB0b3IKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlpZiggYm9Hcm91cEFkZHIgKQorCQlEdXJhdGlvbiA9IDA7CisJZWxzZQorCXsKKwkJZm9yKCBpPXBEZXMtPkZyYWdtZW50Q291bnQtMTsgaT4wOyBpLS0gKQorCQl7CisJCQlOZXh0Qm9keUxlbiA9ICh1MTYpcE5leHRUMDAtPlQwMF9mcmFtZV9sZW5ndGg7CisJCQlOZXh0Qm9keUxlbiArPSA0OwkvL0NSQworCisJCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSApCisJCQl7CisJCQkJLy9PRkRNCisJCQkJLy8gZGF0YSB0cmFuc21pdCB0aW1lICsgMyBTSUZTICsgMiBBQ0sKKwkJCQkvLyBSYXRlIDogPz9NZWdhIGJwcworCQkJCS8vIEFDSyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcywgdHggcmF0ZSA9IDI0TQorCQkJCUR1cmF0aW9uID0gUFJFQU1CTEVfUExVU19TSUdOQUxfUExVU19TSUdOQUxFWFRFTlNJT04gKiAzOworCQkJCUR1cmF0aW9uICs9ICgoKE5leHRCb2R5TGVuKjggKyAyMiArIFJhdGUqNCAtIDEpLyhSYXRlKjQpKSAqIFRzeW0gKworCQkJCQkJCSgoKDIqMTQpKjggKyAyMiArIDk1KS85NikqVHN5bSArCisJCQkJCQkJREVGQVVMVF9TSUZTVElNRSozKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvL0RTU1MKKwkJCQkvLyBkYXRhIHRyYW5zbWl0IHRpbWUgKyAyIEFDSyArIDMgU0lGUworCQkJCS8vIFJhdGUgOiA/P01lZ2EgYnBzCisJCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQkJLy9UT0RPIDoKKwkJCQlpZiggcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCApIC8vbG9uZyBwcmVhbWJsZQorCQkJCQlEdXJhdGlvbiA9IExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUqMzsKKwkJCQllbHNlCisJCQkJCUR1cmF0aW9uID0gU0hPUlRfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUqMzsKKworCQkJCUR1cmF0aW9uICs9ICggKChOZXh0Qm9keUxlbiArICgyKjE0KSkqOCArIFJhdGUtMSkgLyBSYXRlICsKKwkJCQkJCQlERUZBVUxUX1NJRlNUSU1FKjMgKTsKKwkJCX0KKworCQkJKCh1MTYgKilidWZmZXIpWzVdID0gY3B1X3RvX2xlMTYoRHVyYXRpb24pOy8vIDQgVVNIT1IgZm9yIHNraXAgOEIgVVNCLCAyVVNIT1JUPUZDICsgRHVyYXRpb24KKworCQkJLy8tLS0tMjAwNjEwMDkgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJCQlwTmV4dFQwMC0+dmFsdWUgPSBjcHVfdG9fbGUzMihwTmV4dFQwMC0+dmFsdWUpOworCQkJcFQwMS0+dmFsdWUgPSBjcHVfdG9fbGUzMiggcFQwMS0+dmFsdWUgKTsKKwkJCS8vLS0tLWVuZCAyMDA2MTAwOSBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKworCQkJYnVmZmVyICs9IE9mZnNldFNpemU7CisJCQlwVDAxID0gKFBUMDFfREVTQ1JJUFRPUikoYnVmZmVyKzQpOworCQkJaWYgKGkgIT0gMSkJLy9UaGUgbGFzdCBmcmFnbWVudCB3aWxsIG5vdCBoYXZlIHRoZSBuZXh0IGZyYWdtZW50CisJCQkJcE5leHRUMDAgPSAoUFQwMF9ERVNDUklQVE9SKShidWZmZXIrT2Zmc2V0U2l6ZSk7CisJCX0KKworCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gRmlsbCB0aGUgbGFzdCBmcmFnbWVudCBkZXNjcmlwdG9yCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSApCisJCXsKKwkJCS8vT0ZETQorCQkJLy8gMSBTSUZTICsgMSBBQ0sKKwkJCS8vIFJhdGUgOiAyNCBNZWdhIGJwcworCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQlEdXJhdGlvbiA9IFBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OOworCQkJLy9UaGUgVHggcmF0ZSBvZiBBQ0sgdXNlIDI0TQorCQkJRHVyYXRpb24gKz0gKCgoMTEyICsgMjIgKyA5NSkvOTYpKlRzeW0gKyBERUZBVUxUX1NJRlNUSU1FICk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBEU1NTCisJCQkvLyAxIEFDSyArIDEgU0lGUworCQkJLy8gUmF0ZSA6ID8/IE1lZ2EgYnBzCisJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMoMTEyIGJpdHMpCisJCQlpZiggcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCApIC8vbG9uZyBwcmVhbWJsZQorCQkJCUR1cmF0aW9uID0gTE9OR19QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRTsKKwkJCWVsc2UKKwkJCQlEdXJhdGlvbiA9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FOworCisJCQlEdXJhdGlvbiArPSAoICgxMTIgKyBSYXRlLTEpL1JhdGUgKwlERUZBVUxUX1NJRlNUSU1FICk7CisJCX0KKwl9CisKKwkoKHUxNiAqKWJ1ZmZlcilbNV0gPSBjcHVfdG9fbGUxNihEdXJhdGlvbik7Ly8gNCBVU0hPUiBmb3Igc2tpcCA4QiBVU0IsIDJVU0hPUlQ9RkMgKyBEdXJhdGlvbgorCXBUMDAtPnZhbHVlID0gY3B1X3RvX2xlMzIocFQwMC0+dmFsdWUpOworCXBUMDEtPnZhbHVlID0gY3B1X3RvX2xlMzIocFQwMS0+dmFsdWUpOworCS8vLS1lbmQgMjAwNjEwMDkgYWRkCisKK30KKwordm9pZCBNRFNfRXRoZXJuZXRQYWNrZXRSZWNlaXZlKCAgUEFEQVBURVIgQWRhcHRlciwgIFBSWExBWUVSMSBwUnhMYXllcjEgKQoreworCQlPU19SRUNFSVZFX1BBQ0tFVF9JTkRJQ0FURSggQWRhcHRlciwgcFJ4TGF5ZXIxICk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2ODJkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19mLmgKQEAgLTAsMCArMSwzMyBAQAordW5zaWduZWQgY2hhciBNZHNfaW5pdGlhbCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgTWRzX0Rlc3Ryb3koICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIE1kc19UeCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgTWRzX0hlYWRlckNvcHkoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcywgIHU4ICpUYXJnZXRCdWZmZXIgKTsKK3UxNiBNZHNfQm9keUNvcHkoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcywgIHU4ICpUYXJnZXRCdWZmZXIgKTsKK3ZvaWQgTWRzX0R1cmF0aW9uU2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMsICB1OCAqVGFyZ2V0QnVmZmVyICk7Cit2b2lkIE1kc19TZW5kQ29tcGxldGUoICBQQURBUFRFUiBBZGFwdGVyLCAgUFQwMl9ERVNDUklQVE9SIHBUMDIgKTsKK3ZvaWQgTWRzX01wZHVQcm9jZXNzKCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBSeERlcyApOwordm9pZCBNZHNfcmVzZXRfZGVzY3JpcHRvciggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK2V4dGVybiB2b2lkIERhdGFEbXAodTggKnBkYXRhLCB1MzIgbGVuLCB1MzIgb2Zmc2V0KTsKKworCit2b2lkIHZSeFRpbWVySW5pdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCB2UnhUaW1lclN0YXJ0KFBXQjMyX0FEQVBURVIgQWRhcHRlciwgaW50IHRpbWVvdXRfdmFsdWUpOwordm9pZCBSeFRpbWVySGFuZGxlcl8xYSggUEFEQVBURVIgQWRhcHRlcik7Cit2b2lkIHZSeFRpbWVyU3RvcChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBSeFRpbWVySGFuZGxlciggdm9pZCoJCQlTeXN0ZW1TcGVjaWZpYzEsCisJCQkJCSAgIFBXQjMyX0FEQVBURVIgCUFkYXB0ZXIsCisJCQkJCSAgIHZvaWQqCQkJU3lzdGVtU3BlY2lmaWMyLAorCQkJCQkgICB2b2lkKgkJCVN5c3RlbVNwZWNpZmljMyk7CisKKworLy8gRm9yIEFzeW5jaHJvbm91cyBpbmRpY2F0aW5nLiBUaGUgcm91dGluZSBjb2xsb2NhdGVzIHdpdGggVVNCLgordm9pZCBNZHNfTXNkdVByb2Nlc3MoICBQV0IzMl9BREFQVEVSIEFkYXB0ZXIsICBQUlhMQVlFUjEgcFJ4TGF5ZXIxLCAgdTggU2xvdEluZGV4KTsKKworLy8gRm9yIGRhdGEgZnJhbWUgc2VuZGluZyAyMDA2MDgwMgordTE2IE1EU19HZXRQYWNrZXRTaXplKCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBNRFNfR2V0TmV4dFBhY2tldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit2b2lkIE1EU19HZXROZXh0UGFja2V0Q29tcGxldGUoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordm9pZCBNRFNfU2VuZFJlc3VsdCggIFBBREFQVEVSIEFkYXB0ZXIsICB1OCBQYWNrZXRJZCwgIHVuc2lnbmVkIGNoYXIgU2VuZE9LICk7Cit2b2lkIE1EU19FdGhlcm5ldFBhY2tldFJlY2VpdmUoICBQQURBUFRFUiBBZGFwdGVyLCAgUFJYTEFZRVIxIHBSeExheWVyMSApOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjJlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCkBAIC0wLDAgKzEsMTgzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBNQVhfVVNCX1RYX0RFU0NSSVBUT1IJCTE1CQkvLyBJUzg5QzM1IGFiaWxpdHkKKyNkZWZpbmUgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSCTQJCS8vIFZpcnR1YWwgcHJlLWJ1ZmZlciBudW1iZXIgb2YgTUFYX1VTQl9UWF9CVUZGRVIKKyNkZWZpbmUgTUFYX1VTQl9UWF9CVUZGRVIJCQk0MDk2CS8vIElTODlDMzUgYWJpbGl0eSA0biBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIGhhcmR3YXJlCisKKyNkZWZpbmUgTURTX0VWRU5UX0lORElDQVRFKCBfQSwgX0IsIF9GICkJT1NfRVZFTlRfSU5ESUNBVEUoIF9BLCBfQiwgX0YgKQorI2RlZmluZSBBVVRIX1JFUVVFU1RfUEFJUldJU0VfRVJST1IJCQkwCQkvLyBfRiBmbGFnIHNldHRpbmcKKyNkZWZpbmUgQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SCQkJMQkJLy8gX0YgZmxhZyBzZXR0aW5nCisKKy8vIEZvciB2YXJpYWJsZSBzZXR0aW5nCisjZGVmaW5lIENVUlJFTlRfQlNTX1RZUEUJCQkJcHNCU1MocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS0+YkJzc1R5cGUKKyNkZWZpbmUgQ1VSUkVOVF9XRVBfTU9ERQkJCQlwc1NNRS0+X2RvdDExUHJpdmFjeUludm9rZWQKKyNkZWZpbmUgQ1VSUkVOVF9CU1NJRAkJCQkJcHNCU1MocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS0+YWJCc3NJRAorI2RlZmluZSBDVVJSRU5UX0RFU0lSRURfV1BBX0VOQUJMRQkJKChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBX0FVVEgpfHwocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQVBTS19BVVRIKSkKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgQ1VSUkVOVF9ERVNJUkVEX1dQQTJfRU5BQkxFCQkoKHBzU01FLT5iRGVzaXJlZEF1dGhNb2RlPT1XUEEyX0FVVEgpfHwocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQTJQU0tfQVVUSCkpCisjZW5kaWYgLy9lbmQgZGVmIF9XUEEyXworI2RlZmluZSBDVVJSRU5UX1BBSVJXSVNFX0tFWV9PSwkJCXBzU01FLT5wYWlyd2lzZV9rZXlfb2sKKy8vWzIwMDQwNzEyIFdTXQorI2RlZmluZSBDVVJSRU5UX0dST1VQX0tFWV9PSwkJCXBzU01FLT5ncm91cF9rZXlfb2sKKyNkZWZpbmUgQ1VSUkVOVF9QQUlSV0lTRV9LRVkJCQlwc1NNRS0+dHhfbWljX2tleQorI2RlZmluZSBDVVJSRU5UX0dST1VQX0tFWQkJCQlwc1NNRS0+Z3JvdXBfdHhfbWljX2tleQorI2RlZmluZSBDVVJSRU5UX0VOQ1JZUFRfU1RBVFVTCQkJcHNTTUUtPmVuY3J5cHRfc3RhdHVzCisjZGVmaW5lIENVUlJFTlRfV0VQX0lECQkJCQlBZGFwdGVyLT5zU21lUGFyYS5fZG90MTFXRVBEZWZhdWx0S2V5SUQKKyNkZWZpbmUgQ1VSUkVOVF9DT05UUk9MX1BPUlRfQkxPQ0sJCSggcHNTTUUtPndwYV9vayE9MSB8fCAoQWRhcHRlci0+TWRzLmJvQ291bnRlck1lYXN1cmVCbG9jaz09MSAmJiAoQ1VSUkVOVF9FTkNSWVBUX1NUQVRVUz09RU5DUllQVF9US0lQKSkgKQorI2RlZmluZSBDVVJSRU5UX0ZSQUdNRU5UX1RIUkVTSE9MRAkJKEFkYXB0ZXItPk1kcy5UeEZyYWdtZW50VGhyZXNob2xkICYgfjB4MSkKKyNkZWZpbmUgQ1VSUkVOVF9QUkVBTUJMRV9NT0RFCQkJcHNMT0NBTC0+Ym9TaG9ydFByZWFtYmxlP1dMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVDpXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORworI2RlZmluZSBDVVJSRU5UX0xJTktfT04JCQkJCU9TX0xJTktfU1RBVFVTCisjZGVmaW5lIENVUlJFTlRfVFhfUkFURQkJCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlCisjZGVmaW5lIENVUlJFTlRfRkFMTF9CQUNLX1RYX1JBVEUJCUFkYXB0ZXItPnNMb2NhbFBhcmEuQ3VycmVudFR4RmFsbGJhY2tSYXRlCisjZGVmaW5lIENVUlJFTlRfVFhfUkFURV9GT1JfTU5HCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlRm9yTW5nCisjZGVmaW5lIENVUlJFTlRfUFJPVEVDVF9NRUNIQU5JU00JCXBzTE9DQUwtPmJvUHJvdGVjdE1lY2hhbmlzbQorI2RlZmluZSBDVVJSRU5UX1JUU19USFJFU0hPTEQJCQlBZGFwdGVyLT5NZHMuVHhSVFNUaHJlc2hvbGQKKworI2RlZmluZSBNSUJfR1NfWE1JVF9PS19JTkMJCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5HU19YTUlUX09LKysKKyNkZWZpbmUgTUlCX0dTX1JDVl9PS19JTkMJCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5HU19SQ1ZfT0srKworI2RlZmluZSBNSUJfR1NfWE1JVF9FUlJPUl9JTkMJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkdTX1hNSVRfRVJST1IKKworLy8tLS0tLS0tLS0tIFRYIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIEVUSEVSTkVUX1RYX0RFU0NSSVBUT1JTICAgICAgICAgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSCisKKy8vLS0tLS0tLS0tLSBSWCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgRVRIRVJORVRfUlhfREVTQ1JJUFRPUlMJCQk4CS8vSXQncyBub3QgbmVjZXNzYXJ5IHRvIGFsbG9jYXRlIG1vcmUgdGhhbiAyIGluIHN5bmMgaW5kaWNhdGUKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb25maWdyYXRpb24gZGVmYXVsdCB2YWx1ZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIERFRkFVTFRfTVVMVElDQVNUTElTVE1BWAkJMzIgCQkvLyBzdGFuZGFyZAorI2RlZmluZSBERUZBVUxUX1RYX0JVUlNUTEVOR1RICQkJMyAJCS8vIDMyIExvbmd3b3JkcworI2RlZmluZSBERUZBVUxUX1JYX0JVUlNUTEVOR1RICQkJMyAJCS8vIDMyIExvbmd3b3JkcworI2RlZmluZSBERUZBVUxUX1RYX1RIUkVTSE9MRAkJCTAgCQkvLyBGdWxsIFBhY2tldAorI2RlZmluZSBERUZBVUxUX1JYX1RIUkVTSE9MRAkJCTAgCQkvLyBGdWxsIFBhY2tldAorI2RlZmluZSBERUZBVUxUX01BWFRYUkFURQkJCQk2IAkJLy8gMTEgTWJwcyAoTG9uZykKKyNkZWZpbmUgREVGQVVMVF9DSEFOTkVMCQkJCQkzIAkJLy8gQ2hlbm5lbCAzCisjZGVmaW5lIERFRkFVTFRfUlRTVGhyZXNob2xkCQkJMjM0NyAJLy8gRGlzYWJsZSBSVFMKKy8vI2RlZmluZSBERUZBVUxUX1BNRQkJCQkJCTEgCQkvLyBFbmFibGUKKyNkZWZpbmUgREVGQVVMVF9QTUUJCQkJCQkwIAkJLy8gRGlzYWJsZQorI2RlZmluZSBERUZBVUxUX1NJRlNUSU1FCQkJCTEwCisjZGVmaW5lIERFRkFVTFRfQUNLVElNRV8xTUwgICAgICAgICAgICAgMzA0ICAgICAvLyAxNDgrNDQrMTEyIDkxMTIyMCBieSBMQ0MKKyNkZWZpbmUgREVGQVVMVF9BQ0tUSU1FXzJNTCAgICAgICAgICAgICAyNDggICAgIC8vIDE0OCs0NCs1NiA5MTEyMjAgYnkgTENDCisjZGVmaW5lIERFRkFVTFRfRlJBR01FTlRfVEhSRVNIT0xEICAgICAgMjM0NiAJLy8gTm8gZnJhZ21lbnQKKyNkZWZpbmUgREVGQVVMVF9QUkVBTUJMRV9MRU5HVEgJCQk3MgorI2RlZmluZSBERUZBVUxUX1BMQ1BIRUFERVJUSU1FX0xFTkdUSAkyNAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDAuOTYgc2VjIHNpbmNlIHRpbWUgdW5pdCBvZiB0aGUgUjAzIGZvciB0aGUgY3VycmVudCwgVzg5QzMyIGlzIGFib3V0IDYwbnMKKyBpbnN0ZWFkIG9mIDk2MCBucy4gVGhpcyBzaGFsbCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlIFc4OUMzMgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBERUZBVUxUX01BWF9SRUNFSVZFX1RJTUUgICAgICAgIDE2NDQwMDAwCisKKyNkZWZpbmUgUlhfQlVGX1NJWkUJCQkJCQkyMzUyICAgICAgICAvLyA2MDAgCS8vIEZvciAzMDEgbXVzdCBiZSBtdWx0aXBsZSBvZiA4CisjZGVmaW5lIE1BWF9SWF9ERVNDUklQVE9SUyAgICAgICAgICAgICAgMTggICAgICAgICAvLyBSeCBMYXllciAyCisjZGVmaW5lIE1BWF9CVUZGRVJfUVVFVUUJOCAvLyBUaGUgdmFsdWUgaXMgYWx3YXlzIGVxdWFsIDggZHVlIHRvIE5ESVNfUEFDS0VUJ3MgTWluaXBvcnRSZXNlcnZlZCBmaWVsZCBzaXplCisKKworLy8gRm9yIGJyYW5kLW5ldyByeCBzeXN0ZW0KKyNkZWZpbmUgTURTX0lEX0lHTk9SRQkJCQlFVEhFUk5FVF9SWF9ERVNDUklQVE9SUworCisvLyBGb3IgVHggUGFja2V0IHN0YXR1cyBjbGFzc2lmeQorI2RlZmluZSBQQUNLRVRfRlJFRV9UT19VU0UJCQkJCQkwCisjZGVmaW5lIFBBQ0tFVF9DT01FX0ZST01fTkRJUwkJCQkJMHgwOAorI2RlZmluZSBQQUNLRVRfQ09NRV9GUk9NX01MTUUJCQkJCTB4ODAKKyNkZWZpbmUgUEFDS0VUX1NFTkRfQ09NUExFVEUJCQkJCTB4ZmYKKwordHlwZWRlZiBzdHJ1Y3QgX01EUworeworCS8vIEZvciBUeCB1c2FnZQorCXU4CVR4T3duZXJbICgoTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSICsgMykgJiB+MHgwMykgXTsKKwl1OAkqcFR4QnVmZmVyOworCXUxNglUeEJ1ZmZlclNpemVbICgoTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSICsgMSkgJiB+MHgwMSkgXTsKKwl1OAlUeERlc0Zyb21bICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SICsgMykgJiB+MHgwMykgXTsvLzkzMTEzMC40LnUgLy8gMTogTUxNRSAyOiBORElTIGNvbnRyb2wgMzogTkRJUyBkYXRhCisJdTgJVHhDb3VudEluQnVmZmVyWyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUiArIDMpICYgfjB4MDMpIF07IC8vIDIwMDYwOTI4CisKKwl1OAlUeEZpbGxJbmRleDsvL3RoZSBuZXh0IGluZGV4IG9mIFR4QnVmZmVyIGNhbiBiZSB1c2VkCisJdTgJVHhEZXNJbmRleDsvL1RoZSBuZXh0IGluZGV4IG9mIFR4RGVzIGNhbiBiZSB1c2VkCisJdTgJU2NhblR4UGF1c2U7CS8vZGF0YSBUeCBwYXVzZSBiZWNhdXNlIHRoZSBzY2FubmluZyBpcyBwcm9ncmVzc2luZywgYnV0IHByb2JlIHJlcXVlc3QgVHggd29uJ3QuCisJdTgJVHhQYXVzZTsvL0ZvciBwYXVzZSB0aGUgTWRzX1R4IG1vZHVsdAorCisJT1NfQVRPTUlDCVR4VGhyZWFkQ291bnQ7Ly9Gb3IgdGhyZWFkIGNvdW50aW5nIDkzMTEzMC40LnYKKy8vOTUwMzAxIGRlbGV0ZSBkdWUgdG8gSFcKKy8vCU9TX0FUT01JQwlUeENvbmN1cnJlbnRDb3VudDsvLzkzMTEzMC40LncKKworCXUxNglUeFJlc3VsdFsgKChNQVhfVVNCX1RYX0RFU0NSSVBUT1IgKyAxKSAmIH4weDAxKSBdOy8vQ29sbGVjdCB0aGUgc2VuZGluZyByZXN1bHQgb2YgTXBkdQorCisJdTgJTWljUmVkdW5kYW50WzhdOyAvLyBGb3IgdG1wIHVzZQorCXU4CSpNaWNXcml0ZUFkZHJlc3NbMl07IC8vVGhlIHN0YXJ0IGFkZHJlc3MgdG8gZmlsbCB0aGUgTWljLCB1c2UgMiBwb2ludCBkdWUgdG8gTWljIG1heWJlIGZyYWdtZW50CisKKwl1MTYJTWljV3JpdGVTaXplWzJdOyAvLzkzMTEzMC40LngKKworCXUxNglNaWNBZGQ7IC8vIElmIHdhbnQgdG8gYWRkIHRoZSBNaWMsIHRoaXMgdmFyaWFibGUgZXF1YWwgdG8gOAorCXUxNglNaWNXcml0ZUluZGV4Oy8vVGhlIG51bWJlciBvZiBNaWNXcml0ZUFkZHJlc3MgOTMxMTMwLjQueQorCisJdTgJVHhSYXRlWyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUisxKSZ+MHgwMSkgXVsyXTsgLy8gWzBdIGN1cnJlbnQgdHggcmF0ZSwgWzFdIGZhbGwgYmFjayByYXRlCisJdTgJVHhJbmZvWyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUisxKSZ+MHgwMSkgXTsJLy9TdG9yZSBpbmZvcm1hdGlvbiBmb3IgY2FsbGJhY2sgZnVuY3Rpb24KKworCS8vV0tDSEVOIGFkZGVkIGZvciBzY2FubmluZyBtZWNoYW5pc20KKwl1OAlUeFRvZ2dsZTsJCS8vSXQgaXMgVFJVRSBpZiB0aGVyZSBhcmUgdHggYWN0aXZpdGllcyBpbiBzb21lIHRpbWUgaW50ZXJ2YWwKKwl1OAlSZXNlcnZlZF9bM107CisKKwkvLy0tLS0tLS0tLS0gZm9yIFR4IFBhcmFtZXRlcgorCXUxNglUeEZyYWdtZW50VGhyZXNob2xkOyAgICAJLy8gRm9yIGZyYW1lIGJvZHkgb25seQorCXUxNglUeFJUU1RocmVzaG9sZDsKKworCXUzMgkJTWF4UmVjZWl2ZVRpbWU7Ly85MTEyMjAuMyBBZGQKKworCS8vIGRlcGVuZCBvbiBPUywKKwl1MzIJCQkJCU11bHRpY2FzdExpc3RObzsKKwl1MzIJCQkJCVBhY2tldEZpbHRlcjsgLy8gU2V0dGluZyBieSBORElTLCB0aGUgY3VycmVudCBwYWNrZXQgZmlsdGVyIGluIHVzZS4KKwl1OAkJCQkJTXVsdGljYXN0QWRkcmVzc2VzQXJyYXlbREVGQVVMVF9NVUxUSUNBU1RMSVNUTUFYXVtNQUNfQUREUl9MRU5HVEhdOworCisJLy9DT1VOVEVSTUVBU1VSRQorCXU4CQliTUlDZmFpbENvdW50OworCXU4CQlib0NvdW50ZXJNZWFzdXJlQmxvY2s7CisJdTgJCXJlc2VydmVkXzRbMl07CisKKwkvL05ESVNfTUlOSVBPUlRfVElNRVIJblRpbWVyOworCU9TX1RJTUVSCW5UaW1lcjsKKworCXUzMglUeFRzYzsgLy8gMjAwNjAyMTQKKwl1MzIJVHhUc2NfMjsgLy8gMjAwNjAyMTQKKworfSBNRFMsICpQTURTOworCisKK3R5cGVkZWYgc3RydWN0IF9SeEJ1ZmZlcgoreworICAgIHU4ICogcEJ1ZmZlckFkZHJlc3M7ICAgICAvLyBQb2ludGVyIHRoZSByZWNlaXZlZCBkYXRhIGJ1ZmZlci4KKwl1MTYJQnVmZmVyU2l6ZTsKKwl1OAlSRVNFUlZFRDsKKwl1OAlCdWZmZXJJbmRleDsvLyBPbmx5IDEgYnl0ZQorfSBSWEJVRkZFUiwgKlBSWEJVRkZFUjsKKworLy8KKy8vIFJldmVpdmUgTGF5ZXIgMSBGb3JtYXQuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgc3RydWN0IF9SWExBWUVSMQoreworICAgIHUxNiAgU2VxdWVuY2VOdW1iZXI7ICAgICAvLyBUaGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldC4KKwl1MTYJQnVmZmVyVG90YWxTaXplOworCisJdTMyCUluVXNlZDsKKyAgICB1MzIgICBEZWNyeXB0aW9uTWV0aG9kOyAgIC8vIFRoZSBkZXNpcmVkIGRlZnJhZ21lbnQgbnVtYmVyIG9mIHRoZSBuZXh0IGluY29taW5nIHBhY2tldC4KKworCXU4CURlRnJhZ21lbnROdW1iZXI7CisJdTgJRnJhbWVUeXBlOworICAgIHU4CVR5cGVFbmNhcHN1bGF0ZWQ7CisJdTgJQnVmZmVyTnVtYmVyOworCisJdTMyCUZpcnN0RnJhbWVBcnJpdmVkVGltZTsKKworCVJYQlVGRkVSCUJ1ZmZlclF1ZXVlWyBNQVhfQlVGRkVSX1FVRVVFIF07CisKKwl1OAkJTGFzdEZyYW1lVHlwZTsgLy8gMjAwNjEwMDQgZm9yIGZpeCBpbnRlbCAzOTQ1ICdzIGJ1ZworCXU4CQlSRVNFUlZFRFszXTsgIC8vQEAgYW5zb24KKworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vIEZvciBicmFuZC1uZXcgUnggc3lzdGVtCisJdTgJUmVzZXJ2ZWRCdWZmZXJbIDI0MDAgXTsvL0lmIEJ1ZmZlciBJRCBpcyByZXNlcnZlZCBvbmUsIGl0IG11c3QgY29weSB0aGUgZGF0YSBpbnRvIHRoaXMgYXJlYQorCXU4CSpSZXNlcnZlZEJ1ZmZlclBvaW50Oy8vIFBvaW50IHRvIHRoZSBuZXh0IGF2YWlsYWJlIGFkZHJlc3Mgb2YgcmVzZXJ2ZWQgYnVmZmVyCisKK31SWExBWUVSMSwgKiBQUlhMQVlFUjE7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9taWIuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3NTk3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmgKQEAgLTAsMCArMSw4NCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTUxNRU1JQi5IIC0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBHZXQgYW5kIFNldCBzb21lIG9mIE1MTUUgTUlCIGF0dHJpYnV0ZXMuCisvLworLy8gIFJldmlzaW9uIGhpc3Rvcnk6CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAyMDAzMDExNyAgUEQ0MyBBdXN0aW4gTGl1CisvLyAgICAgICAgICAgICAgICAgICAgIEluaXRpYWwgcmVsZWFzZQorLy8KKy8vICBDb3B5cmlnaHQgKGMpIDIwMDMgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpZm5kZWYgX01MTUVfTUlCX0gKKyNkZWZpbmUgX01MTUVfTUlCX0gKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FU2V0RXhjbHVkZVVuZW5jcnlwdGVkIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIFNldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLyAgIEV4VW5lbmNyeXB0ZWQgIC0gdW5zaWduZWQgY2hhciB0eXBlLiBUaGUgdmFsdWUgdG8gYmUgc2V0LgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRVNldEV4Y2x1ZGVVbmVuY3J5cHRlZChBZGFwdGVyLCBFeFVuZW5jcnlwdGVkKSAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChBZGFwdGVyKS0+c0xvY2FsUGFyYS5FeGNsdWRlVW5lbmNyeXB0ZWQgPSBFeFVuZW5jcnlwdGVkOyAgICAgICAgICAgICBcCit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTUxNRUdldEV4Y2x1ZGVVbmVuY3J5cHRlZCAtLQorLy8KKy8vIERlc2NyaXB0aW9uOgorLy8gICBHZXQgdGhlIGRvdDExRXhjbHVkZVVuZW5jcnlwdGVkIHZhbHVlLgorLy8KKy8vIEFyZ3VtZW50czoKKy8vICAgQWRhcHRlciAgICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIHVuc2lnbmVkIGNoYXIgdHlwZS4gVGhlIGN1cnJlbnQgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRUdldEV4Y2x1ZGVVbmVuY3J5cHRlZChBZGFwdGVyKSAoKHVuc2lnbmVkIGNoYXIpIChBZGFwdGVyKS0+c0xvY2FsUGFyYS5FeGNsdWRlVW5lbmNyeXB0ZWQpCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTUxNRVNldE1heFJlY2VpdmVMaWZlVGltZSAtLQorLy8KKy8vIERlc2NyaXB0aW9uOgorLy8gICBTZXQgdGhlIGRvdDExTWF4UmVjZWl2ZUxpZmVUaW1lIHZhbHVlLgorLy8KKy8vIEFyZ3VtZW50czoKKy8vICAgQWRhcHRlciAgICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgorLy8gICBSZWNlaXZlTGlmZVRpbWUtIHUzMiB0eXBlLiBUaGUgdmFsdWUgdG8gYmUgc2V0LgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRVNldE1heFJlY2VpdmVMaWZlVGltZShBZGFwdGVyLCBSZWNlaXZlTGlmZVRpbWUpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKEFkYXB0ZXIpLT5NZHMuTWF4UmVjZWl2ZVRpbWUgPSBSZWNlaXZlTGlmZVRpbWU7ICAgICAgICAgICAgICAgIFwKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIEdldCB0aGUgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgdTMyIHR5cGUuIFRoZSBjdXJyZW50IGRvdDExTWF4UmVjZWl2ZUxpZmVUaW1lIHZhbHVlLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIE1MTUVHZXRNYXhSZWNlaXZlTGlmZVRpbWUoQWRhcHRlcikgKCh1MzIpIChBZGFwdGVyKS0+TWRzLk1heFJlY2VpdmVUaW1lKQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWZkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX3MuaApAQCAtMCwwICsxLDE5NSBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8JTWxtZS5oCisvLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIE1MTUUgbW9kdWxlCisvLwloaXN0b3J5IC0tIDAxLzE0LzAzJyBjcmVhdGVkCisvLworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCisjZGVmaW5lIEFVVEhfUkVKRUNUX1JFQVNPTl9DSEFMTEVOR0VfRkFJTAkJMQorCisvLz09PT09PSB0aGUgc3RhdGUgb2YgTUxNRSBtb2R1bGUKKyNkZWZpbmUgSU5BQ1RJVkUJCQkweDAKKyNkZWZpbmUgSURMRV9TQ0FOCQkJMHgxCisKKy8vPT09PT09IHRoZSBzdGF0ZSBvZiBNTE1FL0VTUyBtb2R1bGUKKyNkZWZpbmUgU1RBVEVfMQkJCQkweDIKKyNkZWZpbmUgQVVUSF9SRVEJCQkweDMKKyNkZWZpbmUgQVVUSF9XRVAJCQkweDQKKyNkZWZpbmUgU1RBVEVfMgkJCQkweDUKKyNkZWZpbmUgQVNTT0NfUkVRCQkJMHg2CisjZGVmaW5lIFNUQVRFXzMJCQkJMHg3CisKKy8vPT09PT09IHRoZSBzdGF0ZSBvZiBNTE1FL0lCU1MgbW9kdWxlCisjZGVmaW5lIElCU1NfSk9JTl9TWU5DCQkweDgKKyNkZWZpbmUgSUJTU19BVVRIX1JFUQkJMHg5CisjZGVmaW5lIElCU1NfQVVUSF9DSEFOTEdFCTB4YQorI2RlZmluZSBJQlNTX0FVVEhfV0VQCQkweGIKKyNkZWZpbmUgSUJTU19BVVRIX0lORAkJMHhjCisjZGVmaW5lIElCU1NfU1RBVEVfMgkJMHhkCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvL2RlcGVuZCBvbiBENUMoTUFDIHRpbWluZyBjb250cm9sIDAzIHJlZ2lzdGVyKTogTWF4VHhNU0RVTGlmZVRpbWUgZGVmYXVsdCAweDgwMDAwdXMKKyNkZWZpbmUgQVVUSF9GQUlMX1RJTUVPVVQJCTU1MAorI2RlZmluZSBBU1NPQ19GQUlMX1RJTUVPVVQJCTU1MAorI2RlZmluZSBSRUFTU09DX0ZBSUxfVElNRU9VVAk1NTAKKworCisKKy8vCisvLyBNTE1FIHRhc2sgZ2xvYmFsIENPTlNUQU5UUywgU1RSVUNUVVJFLCB2YXJpYWJsZXMKKy8vCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIGVudW1fUmVzdWx0Q29kZSAtLQorLy8gIFJlc3VsdCBjb2RlIHJldHVybmVkIGZyb20gTUxNRSB0byBTTUUuCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUEQ0MyAyMDAzMDgyOSBNb2RpZmlsZWQKKy8vI2RlZmluZQlTVUNDRVNTCQkJCQkJCQkwCisjZGVmaW5lIE1MTUVfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgIDAgLy9mb2xsb3cgc3BlYy4KKyNkZWZpbmUJSU5WQUxJRF9QQVJBTUVURVJTCQkJCQkxIC8vTm90IGZvbGxvd2luZyBzcGVjLgorI2RlZmluZQlOT1RfU1VQUFBPUlRFRAkJCQkJCTIKKyNkZWZpbmUJVElNRU9VVAkJCQkJCQkJMworI2RlZmluZQlUT09fTUFOWV9TSU1VTFRBTkVPVVNfUkVRVUVTVFMJCTQKKyNkZWZpbmUgUkVGVVNFRAkJCQkJCQkJNQorI2RlZmluZQlCU1NfQUxSRUFEWV9TVEFSVEVEX09SX0pPSU5FRAkJNgorI2RlZmluZQlUUkFOU01JVF9GUkFNRV9GQUlMCQkJCQk3CisjZGVmaW5lCU5PX0JTU19GT1VORAkJCQkJCTgKKyNkZWZpbmUgUkVUUlkJCQkJCQkJCTkKKyNkZWZpbmUgR0lWRV9VUAkJCQkJCQkJMTAKKworCisjZGVmaW5lIE9QRU5fQVVUSAkJCQkJCQkwCisjZGVmaW5lIFNIQVJFX0FVVEgJCQkJCQkJMQorI2RlZmluZSBBTllfQVVUSAkJCQkJCQkyCisjZGVmaW5lIFdQQV9BVVRICQkJCQkJCTMJLy9mb3IgV1BBCisjZGVmaW5lIFdQQVBTS19BVVRICQkJCQkJCTQKKyNkZWZpbmUgV1BBTk9ORV9BVVRICQkJCQkJNQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGFkZGVkIGJ5IHdzIDA0LzE5LzA0CisjaWZkZWYgX1dQQTJfCisjZGVmaW5lIFdQQTJfQVVUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYvL2ZvciBXUEEyCisjZGVmaW5lIFdQQTJQU0tfQVVUSCAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9kZWZpbmUgdGhlIG1zZyB0eXBlIG9mIE1MTUUgbW9kdWxlCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vZnJvbSBTTUUKKworI2RlZmluZSBNTE1FTVNHX0FVVEhfUkVRCQkJCTB4MGIKKyNkZWZpbmUgTUxNRU1TR19ERUFVVEhfUkVRCQkJCTB4MGMKKyNkZWZpbmUgTUxNRU1TR19BU1NPQ19SRVEJCQkJMHgwZAorI2RlZmluZSBNTE1FTVNHX1JFQVNTT0NfUkVRCQkJCTB4MGUKKyNkZWZpbmUgTUxNRU1TR19ESVNBU1NPQ19SRVEJCQkweDBmCisjZGVmaW5lIE1MTUVNU0dfU1RBUlRfSUJTU19SRVEJCQkweDEwCisjZGVmaW5lIE1MTUVNU0dfSUJTU19ORVRfQ0ZNCQkJMHgxMQorCisvL2Zyb20gUlggOgorI2RlZmluZSBNTE1FTVNHX1JDVl9NTE1FRlJBTUUJCQkweDIwCisjZGVmaW5lIE1MTUVNU0dfUkNWX0FTU09DUlNQCQkJMHgyMgorI2RlZmluZSBNTE1FTVNHX1JDVl9SRUFTU09DUlNQCQkJMHgyNAorI2RlZmluZSBNTE1FTVNHX1JDVl9ESVNBU1NPQwkJCTB4MmIKKyNkZWZpbmUgTUxNRU1TR19SQ1ZfQVVUSAkJCQkweDJjCisjZGVmaW5lIE1MTUVNU0dfUkNWX0RFQVVUSAkJCQkweDJkCisKKworLy9mcm9tIFRYIGNhbGxiYWNrCisjZGVmaW5lIE1MTUVNU0dfVFhfQ0FMTEJBQ0sJCQkJMHg0MAorI2RlZmluZSBNTE1FTVNHX0FTU09DUkVRX0NBTExCQUNLCQkweDQxCisjZGVmaW5lIE1MTUVNU0dfUkVBU1NPQ1JFUV9DQUxMQkFDSwkJMHg0MworI2RlZmluZSBNTE1FTVNHX0RJU0FTU09DX0NBTExCQUNLCQkweDRhCisjZGVmaW5lIE1MTUVNU0dfQVVUSF9DQUxMQkFDSwkJCTB4NGMKKyNkZWZpbmUgTUxNRU1TR19ERUFVVEhfQ0FMTEJBQ0sJCQkweDRkCisKKy8vI2RlZmluZSBNTE1FTVNHX0pPSU5fRkFJTAkJCQk0CisvLyNkZWZpbmUgTUxNRU1TR19BVVRIRU5fRkFJTAkJCTE4CisjZGVmaW5lIE1MTUVNU0dfVElNRU9VVAkJCQkJMHg1MAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vR2xvYmFsIGRhdGEgc3RydWN0dXJlcworI2RlZmluZSBNQVhfTlVNX1RYX01NUERVCTIKKyNkZWZpbmUgTUFYX01NUERVX1NJWkUJCTE1MTIKKyNkZWZpbmUgTUFYX05VTV9SWF9NTVBEVQk2CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL01BQ1JPCisjZGVmaW5lIGJvTUxNRV9JbmFjdGl2ZVN0YXRlKF9BQV8pCShfQUFfLT53U3RhdGU9PUlOQUNUSVZFKQorI2RlZmluZSBib01MTUVfSWRsZVNjYW5TdGF0ZShfQkJfKQkoX0JCXy0+d1N0YXRlPT1JRExFX1NDQU4pCisjZGVmaW5lIGJvTUxNRV9Gb3VuZFNUQWluZm8oX0NDXykJKF9DQ18tPndTdGF0ZT49SURMRV9TQ0FOKQorCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9GUkFNRQoreworCS8vTkRJU19QQUNLRVQJCU1MTUVfUGFja2V0OworCXM4ICoJCQlwTU1QRFU7CisJdTE2CQkJbGVuOworCXU4CQkJRGF0YVR5cGU7CisJdTgJCQlJc0luVXNlZDsKKworCXNwaW5sb2NrX3QJTUxNRVNwaW5Mb2NrOworCisgICAgdTgJCVR4TU1QRFVbTUFYX05VTV9UWF9NTVBEVV1bTUFYX01NUERVX1NJWkVdOworCXU4CQlUeE1NUERVSW5Vc2VbIChNQVhfTlVNX1RYX01NUERVKzMpICYgfjB4MDMgXTsKKworCXUxNgkJd051bVR4TU1QRFU7CisJdTE2CQl3TnVtVHhNTVBEVURpc2NhcmRlZDsKKworICAgIHU4CQlSeE1NUERVW01BWF9OVU1fUlhfTU1QRFVdW01BWF9NTVBEVV9TSVpFXTsKKyAgICB1OAkgCVNhdmVSeEJ1ZlNsb3RJblVzZVsgKE1BWF9OVU1fUlhfTU1QRFUrMykgJiB+MHgwMyBdOworCisJdTE2CQl3TnVtUnhNTVBEVTsKKwl1MTYJCXdOdW1SeE1NUERVRGlzY2FyZGVkOworCisJdTE2CQl3TnVtUnhNTVBEVUluTUxNRTsgCS8vIE51bWJlciBvZiB0aGUgUnggTU1QRFUKKwl1MTYJCXJlc2VydmVkXzE7CQkJLy8gIGluIE1MTUUuCisgICAgICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAvLyAgZXhjbHVkaW5nIHRoZSBkaXNjYXJkZWQKK30gTUxNRV9GUkFNRSwgKnBzTUxNRV9GUkFNRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FVVEhSRVEgeworCisJdTggCXBlZXJNQUNhZGRyW01BQ19BRERSX0xFTkdUSF07CisJdTE2CXdBdXRoQWxnb3JpdGhtOworCit9IE1MTUVfQVVUSFJFUV9QQVJBLCAqcHNNTE1FX0FVVEhSRVFfUEFSQTsKKworc3RydWN0IF9SZWFzb25fQ29kZSB7CisKKwl1OAlwZWVyTUFDYWRkcltNQUNfQUREUl9MRU5HVEhdOworCXUxNgl3UmVhc29uQ29kZTsKK307Cit0eXBlZGVmIHN0cnVjdCBfUmVhc29uX0NvZGUgTUxNRV9ERUFVVEhSRVFfUEFSQSwgKnBzTUxNRV9ERUFVVEhSRVFfUEFSQTsKK3R5cGVkZWYgc3RydWN0IF9SZWFzb25fQ29kZSBNTE1FX0RJU0FTU09DUkVRX1BBUkEsICpwc01MTUVfRElTQVNTT0NSRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FTU09DUkVRIHsKKyAgdTggICAgICAgUGVlclNUQUFkZHJbTUFDX0FERFJfTEVOR1RIXTsKKyAgdTE2ICAgICAgIENhcGFiaWxpdHlJbmZvOworICB1MTYgICAgICAgTGlzdGVuSW50ZXJ2YWw7CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgTUxNRV9BU1NPQ1JFUV9QQVJBLCAqcHNNTE1FX0FTU09DUkVRX1BBUkE7CisKK3R5cGVkZWYgc3RydWN0IF9SRUFTU09DUkVRIHsKKyAgdTggICAgICAgTmV3QVBBZGRyW01BQ19BRERSX0xFTkdUSF07CisgIHUxNiAgICAgICBDYXBhYmlsaXR5SW5mbzsKKyAgdTE2ICAgICAgIExpc3RlbkludGVydmFsOworCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIE1MTUVfUkVBU1NPQ1JFUV9QQVJBLCAqcHNNTE1FX1JFQVNTT0NSRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVDQUxMQkFDSyB7CisKKyAgdTggCSpwc0ZyYW1lUHRyOworICB1OAkJYlJlc3VsdDsKKworfSBNTE1FX1RYQ0FMTEJBQ0ssICpwc01MTUVfVFhDQUxMQkFDSzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JYREFUQQoreworCXMzMgkJRnJhbWVMZW5ndGg7CisJdTgJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpwYkZyYW1lUHRyOworCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIFJYREFUQSwgKnBzUlhEQVRBOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTMzYjhkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgTUxNRVR4UnguQworLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBNRFMgKE1BQyBEYXRhIFNlcnZpY2UpIGFuZCBNTE1FLgorLy8KKy8vICBSZXZpc2lvbiBIaXN0b3J5OgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAyMDAyMDkgICAgICBVTjIwIEplbm5pZmVyIFh1CisvLyAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFJlbGVhc2UKKy8vICAgICAgICAgIDIwMDIxMTA4ICAgIFBENDMgQXVzdGluIExpdQorLy8gICAgICAgICAgMjAwMzAxMTcgICAgUEQ0MyBBdXN0aW4gTGl1CisvLyAgICAgICAgICAgICAgICAgICAgICBEZWxldGVkIE1MTUVSZXR1cm5QYWNrZXQgYW5kIE1MTUVQcm9jVGhyZWFkKCkKKy8vCisvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3ZvaWQgTUxNRVJlc2V0VHhSeChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJczMyICAgICBpOworCisJLy8gUmVzZXQgdGhlIGludGVyZmFjZSBiZXR3ZWVuIE1EUyBhbmQgTUxNRQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RYX01NUERVOyBpKyspCisJCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gRkFMU0U7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fUlhfTU1QRFU7IGkrKykKKwkJQWRhcHRlci0+c01sbWVGcmFtZS5TYXZlUnhCdWZTbG90SW5Vc2VbaV0gPSBGQUxTRTsKKworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVJ4TU1QRFVJbk1MTUUgICA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtUnhNTVBEVURpc2NhcmRlZCA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtUnhNTVBEVSAgICAgICAgICA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVURpc2NhcmRlZCA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVSAgICAgICAgICA9IDA7CisJQWRhcHRlci0+c0xvY2FsUGFyYS5ib0NDQWJ1c3kgICAgPSBGQUxTRTsKKwlBZGFwdGVyLT5zTG9jYWxQYXJhLmlQb3dlclNhdmVNb2RlICAgICA9IFBXUl9BQ1RJVkU7ICAgICAvLyBQb3dlciBhY3RpdmUKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8JRnVuY3Rpb246CisvLyAgICBNTE1FR2V0TU1QRFVCdWZmZXIoKQorLy8KKy8vCURlc2NyaXB0aW9uOgorLy8gICAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIGFuIGF2YWlsYWJsZSBkYXRhIGJ1ZmZlciB3aXRoCisvLyAgICB0aGUgc2l6ZSBNQVhfTU1QRFVfU0laRSBmb3IgYSBNTVBEVS4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgQWRhcHRlciAgIC0gcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgorLy8KKy8vCVJldHVybiB2YWx1ZToKKy8vICAgIE5VTEwgICAgIDogTm8gYXZhaWxhYmxlIGRhdGEgYnVmZmVyIGF2YWlsYWJsZQorLy8gICAgT3RoZXJ3aXNlOiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlcgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiBGSVhNRTogU2hvdWxkIHRoaXMganVzdCBiZSByZXBsYWNlZCB3aXRoIGttYWxsb2MoKSBhbmQga2ZyZWUoKT8gKi8KK3U4ICpNTE1FR2V0TU1QRFVCdWZmZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyKQoreworCXMzMiBpOworCXU4ICpyZXR1cm5WYWw7CisKKwlmb3IgKGkgPSAwOyBpPCBNQVhfTlVNX1RYX01NUERVOyBpKyspIHsKKwkJaWYgKEFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID09IEZBTFNFKQorCQkJYnJlYWs7CisJfQorCWlmIChpID49IE1BWF9OVU1fVFhfTU1QRFUpIHJldHVybiBOVUxMOworCisJcmV0dXJuVmFsID0gKHU4ICopJihBZGFwdGVyLT5zTWxtZUZyYW1lLlR4TU1QRFVbaV0pOworCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gVFJVRTsKKworCXJldHVybiByZXR1cm5WYWw7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3U4IE1MTUVTZW5kRnJhbWUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqcE1NUERVLCB1MTYgbGVuLCB1OCBEYXRhVHlwZSkKKy8qCURhdGFUeXBlIDogRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVCwgRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVF9DSEFMTEVOR0UsCisJCQkJRlJBTUVfVFlQRV84MDJfMTFfREFUQSAqLworeworCWlmIChBZGFwdGVyLT5zTWxtZUZyYW1lLklzSW5Vc2VkICE9IFBBQ0tFVF9GUkVFX1RPX1VTRSkgeworCQlBZGFwdGVyLT5zTWxtZUZyYW1lLndOdW1UeE1NUERVRGlzY2FyZGVkKys7CisJCXJldHVybiBGQUxTRTsKKwl9CisJQWRhcHRlci0+c01sbWVGcmFtZS5Jc0luVXNlZCA9IFBBQ0tFVF9DT01FX0ZST01fTUxNRTsKKworCS8vIEtlZXAgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLnBNTVBEVSA9IHBNTVBEVTsKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLkRhdGFUeXBlID0gRGF0YVR5cGU7CisJLy8gbGVuIG11c3QgYmUgdGhlIGxhc3Qgc2V0dGluZyBkdWUgdG8gUVVFUllfU0laRV9TRUNPTkQgb2YgTWRzCisJQWRhcHRlci0+c01sbWVGcmFtZS5sZW4gPSBsZW47CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVSsrOworCisJLy8gSC9XIHdpbGwgZW50ZXIgcG93ZXIgc2F2ZSBieSBzZXQgdGhlIHJlZ2lzdGVyLiBTL1cgZG9uJ3Qgc2VuZCBudWxsIGZyYW1lCisJLy93aXRoIFBXUk1ndCBiaXQgZW5ibGVkIHRvIGVudGVyIHBvd2VyIHNhdmUgbm93LgorCisJLy8gVHJhbnNtaXQgTkRJUyBwYWNrZXQKKwlNZHNfVHgoQWRhcHRlcik7CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQKK01MTUVfR2V0TmV4dFBhY2tldChQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzKQoreworI2RlZmluZSBERVNDUklQVE9SX0FERF9CVUZGRVIoIF9ELCBfQSwgX1MgKSBcCit7XAorCV9ELT5JbnRlcm5hbFVzZWQgPSBfRC0+YnVmZmVyX3N0YXJ0X2luZGV4ICsgX0QtPmJ1ZmZlcl9udW1iZXI7IFwKKwlfRC0+SW50ZXJuYWxVc2VkICU9IE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWDsgXAorCV9ELT5idWZmZXJfYWRkcmVzc1sgX0QtPkludGVybmFsVXNlZCBdID0gX0E7IFwKKwlfRC0+YnVmZmVyX3NpemVbIF9ELT5JbnRlcm5hbFVzZWQgXSA9IF9TOyBcCisJX0QtPmJ1ZmZlcl90b3RhbF9zaXplICs9IF9TOyBcCisJX0QtPmJ1ZmZlcl9udW1iZXIrKztcCit9CisKKwlERVNDUklQVE9SX0FERF9CVUZGRVIoIHBEZXMsIEFkYXB0ZXItPnNNbG1lRnJhbWUucE1NUERVLCBBZGFwdGVyLT5zTWxtZUZyYW1lLmxlbiApOworCXBEZXMtPlR5cGUgPSBBZGFwdGVyLT5zTWxtZUZyYW1lLkRhdGFUeXBlOworfQorCit2b2lkIE1MTUVmcmVlTU1QRFVCdWZmZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBzOCAqcERhdGEpCit7CisJaW50IGk7CisKKwkvLyBSZWNsYWltIHRoZSBkYXRhIGJ1ZmZlcgorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RYX01NUERVOyBpKyspIHsKKwkJaWYgKHBEYXRhID09IChzOCAqKSYoQWRhcHRlci0+c01sbWVGcmFtZS5UeE1NUERVW2ldKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoQWRhcHRlci0+c01sbWVGcmFtZS5UeE1NUERVSW5Vc2VbaV0pCisJCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gRkFMU0U7CisJZWxzZSAgeworCQkvLyBTb21ldGhpbmcgd3JvbmcKKwkJLy8gUEQ0MyBBZGQgZGVidWcgY29kZSBoZXJlPz8/CisJfQorfQorCit2b2lkCitNTE1FX1NlbmRDb21wbGV0ZShQQURBUFRFUiBBZGFwdGVyLCB1OCBQYWNrZXRJRCwgdW5zaWduZWQgY2hhciBTZW5kT0spCit7CisJTUxNRV9UWENBTExCQUNLCVR4Q2FsbGJhY2s7CisKKyAgICAvLyBSZWNsYWltIHRoZSBkYXRhIGJ1ZmZlcgorCUFkYXB0ZXItPnNNbG1lRnJhbWUubGVuID0gMDsKKwlNTE1FZnJlZU1NUERVQnVmZmVyKCBBZGFwdGVyLCBBZGFwdGVyLT5zTWxtZUZyYW1lLnBNTVBEVSApOworCisKKwlUeENhbGxiYWNrLmJSZXN1bHQgPSBNTE1FX1NVQ0NFU1M7CisKKwkvLyBSZXR1cm4gcmVzb3VyY2UKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLklzSW5Vc2VkID0gUEFDS0VUX0ZSRUVfVE9fVVNFOworfQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnhfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnhfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0Y2Q1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeF9mLmgKQEAgLTAsMCArMSw1MiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FVHhSeC5IIC0tCisvLworLy8gICBGdW5jdGlvbnMgZGVmaW5lZCBpbiBNTE1FVHhSeC5jLgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMiBXaW5ib25kIEVsZWN0cmljcyBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZuZGVmIF9NTE1FVFhSWF9ICisjZGVmaW5lIF9NTE1FVFhSWF9ICisKK3ZvaWQKK01MTUVQcm9jVGhyZWFkKAorICAgICBQV0IzMl9BREFQVEVSICAgIEFkYXB0ZXIKKwkpOworCit2b2lkIE1MTUVSZXNldFR4UngoIFBXQjMyX0FEQVBURVIgQWRhcHRlcik7CisKK3U4ICoKK01MTUVHZXRNTVBEVUJ1ZmZlcigKKyAgICAgUFdCMzJfQURBUFRFUiAgICBBZGFwdGVyCisgICApOworCit2b2lkIE1MTUVmcmVlTU1QRFVCdWZmZXIoIFBXQjMyX0FEQVBURVIgQWRhcHRlciwgIHM4ICogcERhdGEpOworCit2b2lkIE1MTUVfR2V0TmV4dFBhY2tldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit1OCBNTE1FU2VuZEZyYW1lKCBQV0IzMl9BREFQVEVSIEFkYXB0ZXIsCisJCQkJCXU4CSpwTU1QRFUsCisJCQkJCXUxNglsZW4sCisJCQkJCSB1OAlEYXRhVHlwZSk7CisKK3ZvaWQKK01MTUVfU2VuZENvbXBsZXRlKCAgUFdCMzJfQURBUFRFUiBBZGFwdGVyLCAgdTggUGFja2V0SUQsICB1bnNpZ25lZCBjaGFyIFNlbmRPSyApOworCit2b2lkCitNTE1FUmN2RnJhbWUoCisgICAgIFBXQjMyX0FEQVBURVIgICAgQWRhcHRlciwKKyAgICAgUFJYQlVGRkVSICAgICAgICBwUnhCdWZmZXJBcnJheSwKKyAgICAgdTggICAgICAgICAgICBOdW1PZkJ1ZmZlciwKKyAgICAgdTggICAgICAgICAgICBSZXR1cm5TbG90SW5kZXgKKwkpOworCit2b2lkCitNTE1FUmV0dXJuUGFja2V0KAorICAgICBQV0IzMl9BREFQVEVSICAgIEFkYXB0ZXIsCisgICAgIHU4ICogICAgICAgICAgcFJ4QnVmZXIKKyAgICk7CisjaWZkZWYgX0lCU1NfQkVBQ09OX1NFUV9TVElDS18KK3M4IFNlbmRCQ051bGxEYXRhKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2IHdJZHgpOworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjYwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uYwpAQCAtMCwwICsxLDEyMjkgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1UTy5DIC0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBNQUMgVGhyb3VnaHB1dCBPcHRpbWl6YXRpb24gZm9yIFc4OUMzMyA4MDIuMTFnIFdMQU4gU1RBLgorLy8KKy8vICAgIFRoZSBmb2xsb3dpbmcgTUlCIGF0dHJpYnV0ZXMgb3IgaW50ZXJuYWwgdmFyaWFibGVzIHdpbGwgYmUgYWZmZWN0ZWQKKy8vICAgIHdoaWxlIHRoZSBNVE8gaXMgYmVpbmcgZXhlY3V0ZWQ6CisvLyAgICAgICBkb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQsCisvLyAgICAgICBkb3QxMVJUU1RocmVzaG9sZCwKKy8vICAgICAgIHRyYW5zbWlzc2lvbiByYXRlIGFuZCBQTENQIHByZWFtYmxlIHR5cGUsCisvLyAgICAgICBDQ0EgbW9kZSwKKy8vICAgICAgIGFudGVubmEgZGl2ZXJzaXR5LgorLy8KKy8vICBSZXZpc2lvbiBoaXN0b3J5OgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgMjAwMzEyMjcgIFVOMjAgUGV0ZSBDaGFvCisvLyAgICAgICAgICAgICAgICAgICAgIEZpcnN0IGRyYWZ0CisvLyAgMjAwMzEyMjkgICAgICAgICAgIFR1cmJvICAgICAgICAgICAgICAgIGNvcHkgZnJvbSBQRDQzCisvLyAgMjAwNDAyMTAgICAgICAgICAgIEtldmluICAgICAgICAgICAgICAgIHJldmlzZWQKKy8vICBDb3B5cmlnaHQgKGMpIDIwMDMgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIExBMjAwNDAyMTBfRFRPIGtldmluCisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKKy8vIERlY2xhcmUgU1EzIHRvIHJhdGUgYW5kIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIHRhYmxlCisvLyBEZWNsYXJlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkcyB0YWJsZQorI2RlZmluZSBNVE9fTUFYX1NRM19MRVZFTFMgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTVRPX01BWF9GUkFHX1RIX0xFVkVMUyAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTICAgICAgICAgICAgICAgIDEyCisKK3UxNiBNVE9fRnJhZ19UaF9UYmxbTVRPX01BWF9GUkFHX1RIX0xFVkVMU10gPQoreworICAgIDI1NiwgMzg0LCA1MTIsIDc2OCwgMTUzNgorfTsKKwordTggIE1UT19TUTNfTGV2ZWxbTVRPX01BWF9TUTNfTEVWRUxTXSA9Cit7CisgICAgMCwgMjYsIDMwLCAzMiwgMzQsIDM1LCAzNywgNDIsIDQ0LCA0NiwgNTQsIDYyLCA3OCwgODEKK307Cit1OCAgTVRPX1NRM3RvUmF0ZVtNVE9fTUFYX1NRM19MRVZFTFNdID0KK3sKKyAgICAwLCAxLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEKK307Cit1OCAgTVRPX1NRM3RvRnJhZ1tNVE9fTUFYX1NRM19MRVZFTFNdID0KK3sKKyAgICAwLCAyLCAyLCAzLCAzLCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0Cit9OworCisvLyBPbmUgRXhjaGFuZ2UgVGltZSB0YWJsZQorLy8KK3UxNiBNVE9fT25lX0V4Y2hhbmdlX1RpbWVfVGJsX2xbTVRPX01BWF9GUkFHX1RIX0xFVkVMU11bTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXSA9Cit7CisgICAgeyAyNTU0LCAxNDc0LCAgODIyLCAgICAwLCAgICAwLCAgNjM2LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwfSwKKyAgICB7IDM1NzgsIDE5ODYsIDEwMDksICAgIDAsICAgIDAsICA3MjksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDB9LAorICAgIHsgNDYwMiwgMjQ5OCwgMTE5NSwgICAgMCwgICAgMCwgIDgyMiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMH0sCisgICAgeyA2NjUwLCAzNTIyLCAxNTY3LCAgICAwLCAgICAwLCAxMDA5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwfSwKKyAgICB7MTI3OTQsIDY1OTQsIDI2ODQsICAgIDAsICAgIDAsIDE1NjcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDB9Cit9OworCit1MTYgTVRPX09uZV9FeGNoYW5nZV9UaW1lX1RibF9zW01UT19NQVhfRlJBR19USF9MRVZFTFNdW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworICAgIHsgICAgMCwgMTI4MiwgIDYzMCwgIDQwNCwgIDI4OCwgIDQ0NCwgIDIzMiwgIDE3MiwgIDE0NCwgIDExNiwgIDEwMCwgICA5Nn0sCisgICAgeyAgICAwLCAxNzk0LCAgODE3LCAgNTcyLCAgNDAwLCAgNTM3LCAgMzE2LCAgMjI4LCAgMTg4LCAgMTQ0LCAgMTI0LCAgMTE2fSwKKyAgICB7ICAgIDAsIDIzMDYsIDEwMDMsICA3NDQsICA1MTYsICA2MzAsICA0MDAsICAyODgsICAyMjgsICAxNzIsICAxNDQsICAxMzZ9LAorICAgIHsgICAgMCwgMzMzMCwgMTM3NSwgMTA4NCwgIDc0NCwgIDgxNywgIDU3MiwgIDQwMCwgIDMxNiwgIDIyOCwgIDE4OCwgIDE3Mn0sCisgICAgeyAgICAwLCA2NDAyLCAyNDkyLCAyMTA4LCAxNDI0LCAxMzc1LCAxMDg0LCAgNzQwLCAgNTcyLCAgNDAwLCAgMzE2LCAgMjg0fQorfTsKKworI2RlZmluZSBNVE9fT05FX0VYQ0hBTkdFX1RJTUUocHJlYW1ibGVfdHlwZSwgZnJhZ190aF9sdmwsIGRhdGFfcmF0ZV9sdmwpIFwKKyAgICAgICAgICAgIChwcmVhbWJsZV90eXBlKSA/ICAgTVRPX09uZV9FeGNoYW5nZV9UaW1lX1RibF9zW2ZyYWdfdGhfbHZsXVtkYXRhX3JhdGVfbHZsXSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPX09uZV9FeGNoYW5nZV9UaW1lX1RibF9sW2ZyYWdfdGhfbHZsXVtkYXRhX3JhdGVfbHZsXQorCisvLyBEZWNsYXJlIGRhdGEgcmF0ZSB0YWJsZQorLy9UaGUgZm9sbG93aW5nIHRhYmxlIHdpbGwgYmUgY2hhbmdlZCBhdCBhbnl0aW1lIGlmIHRoZSBvcHJhdGlvbiByYXRlIHN1cHBvcnRlZCBieSBBUCBkb24ndAorLy9tYXRjaCB0aGUgdGFibGUKK3U4ICBNVE9fRGF0YV9SYXRlX1RibFtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0KK3sKKyAgICAyLCA0LCAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDgKK307CisKKy8vVGhlIFN0YXJkYXJkX0RhdGFfUmF0ZV9UYmwgYW5kIExldmVsMlBlclRibCB0YWJsZSBpcyB1c2VkIHRvIGluZGlyZWN0bHkgcmV0cmVpdmUgUEVSCisvL2luZm9ybWF0aW9uIGZyb20gUmF0ZV9QRVJfVEJMCisvL1RoZSBkZWZhdWx0IHNldHRpbmdzIGlzIEFQIGNhbiBzdXBwb3J0IGZ1bGwgcmF0ZSBzZXQuCitzdGF0aWMgdTggIFN0YXJkYXJkX0RhdGFfUmF0ZV9UYmxbTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXSA9Cit7CisJMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4Cit9Oworc3RhdGljIHU4ICBMZXZlbDJQZXJUYmxbTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXSA9Cit7CisJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCit9OworLy9Ib3cgbWFueSBraW5kIG9mIHR4IHJhdGUgY2FuIGJlIHN1cHBvcnRlZCBieSBBUAorLy9EVE8gd2lsbCBjaGFuZ2UgUmF0ZSBiZXR3ZWVuIE1UT19EYXRhX1JhdGVfVGJsWzBdIGFuZCBNVE9fRGF0YV9SYXRlX1RibFtNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbC0xXQorc3RhdGljIHU4ICBNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCA9IE1UT19NQVhfREFUQV9SQVRFX0xFVkVMUzsKKy8vU21vb3RoZWQgUEVSIHRhYmxlIGZvciBlYWNoIGRpZmZlcmVudCBSQVRFIGJhc2VkIG9uIHBhY2tldCBsZW5ndGggb2YgMTUxNAorc3RhdGljIGludCBSYXRlX1BFUl9UQkxbOTFdW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPSB7CisvLyAgICAgICAgMU0gICAgMk0gICAgNS41TSAgMTFNICAgNk0gICAgOU0gICAgMTJNICAgICAxOE0gICAgMjRNICAgIDM2TSAgICA0OE0gICA1NE0KKy8qIDAlICAqL3sgOTMsICAgMTc3LCAgNDIwLCAgNTM4LCAgNjkwLCAgNzc0LCAgMTAwMSwgIDE0MDEsICAxNzY4LCAgMjM1OCwgIDI4MzgsICAzMDM5fSwKKy8qIDElICAqL3sgOTIsICAgMTc2LCAgNDE2LCAgNTMzLCAgNjgzLCAgNzY3LCAgOTkyLCAgIDEzODksICAxNzUyLCAgMjMzNiwgIDI4MTEsICAzMDEwfSwKKy8qIDIlICAqL3sgOTEsICAgMTc0LCAgNDEyLCAgNTI4LCAgNjc1LCAgNzYwLCAgOTgzLCAgIDEzNzYsICAxNzM1LCAgMjMxMywgIDI3ODMsICAyOTc5fSwKKy8qIDMlICAqL3sgOTAsICAgMTcyLCAgNDA3LCAgNTIzLCAgNjY3LCAgNzUzLCAgOTczLCAgIDEzNjMsICAxNzE5LCAgMjI5MCwgIDI3NTUsICAyOTQ4fSwKKy8qIDQlICAqL3sgOTAsICAgMTcwLCAgNDAzLCAgNTE4LCAgNjU5LCAgNzQ2LCAgOTY0LCAgIDEzNTAsICAxNzAxLCAgMjI2NiwgIDI3MjYsICAyOTE2fSwKKy8qIDUlICAqL3sgODksICAgMTY5LCAgMzk4LCAgNTEyLCAgNjUxLCAgNzM4LCAgOTU0LCAgIDEzMzYsICAxNjg0LCAgMjI0MiwgIDI2OTYsICAyODg0fSwKKy8qIDYlICAqL3sgODgsICAgMTY3LCAgMzk0LCAgNTA3LCAgNjQzLCAgNzMxLCAgOTQ0LCAgIDEzMjIsICAxNjY2LCAgMjIxNywgIDI2NjUsICAyODUxfSwKKy8qIDclICAqL3sgODcsICAgMTY1LCAgMzg5LCAgNTAyLCAgNjM1LCAgNzIzLCAgOTM1LCAgIDEzMDgsICAxNjQ4LCAgMjE5MiwgIDI2MzQsICAyODE3fSwKKy8qIDglICAqL3sgODYsICAgMTYzLCAgMzg0LCAgNDk3LCAgNjI2LCAgNzE2LCAgOTI0LCAgIDEyOTQsICAxNjI5LCAgMjE2NiwgIDI2MDIsICAyNzgyfSwKKy8qIDklICAqL3sgODUsICAgMTYxLCAgMzgwLCAgNDkxLCAgNjE4LCAgNzA4LCAgOTE0LCAgIDEyNzksICAxNjExLCAgMjE0MCwgIDI1NzAsICAyNzQ3fSwKKy8qIDEwJSAqL3sgODQsICAgMTYwLCAgMzc1LCAgNDg2LCAgNjA5LCAgNzAwLCAgOTA0LCAgIDEyNjUsICAxNTkxLCAgMjExMywgIDI1MzcsICAyNzExfSwKKy8qIDExJSAqL3sgODMsICAgMTU4LCAgMzcwLCAgNDgwLCAgNjAwLCAgNjkyLCAgODk0LCAgIDEyNTAsICAxNTcyLCAgMjA4NiwgIDI1MDMsICAyNjc1fSwKKy8qIDEyJSAqL3sgODIsICAgMTU2LCAgMzY1LCAgNDc1LCAgNTkyLCAgNjg0LCAgODgzLCAgIDEyMzQsICAxNTUyLCAgMjA1OSwgIDI0NjksICAyNjM4fSwKKy8qIDEzJSAqL3sgODEsICAgMTU0LCAgMzYwLCAgNDY5LCAgNTgzLCAgNjc2LCAgODcyLCAgIDEyMTksICAxNTMyLCAgMjAzMSwgIDI0MzUsICAyNjAwfSwKKy8qIDE0JSAqL3sgODAsICAgMTUyLCAgMzU1LCAgNDY0LCAgNTc0LCAgNjY4LCAgODYyLCAgIDEyMDQsICAxNTEyLCAgMjAwMywgIDI0MDAsICAyNTYyfSwKKy8qIDE1JSAqL3sgNzksICAgMTUwLCAgMzUwLCAgNDU4LCAgNTY1LCAgNjYwLCAgODUxLCAgIDExODgsICAxNDkyLCAgMTk3NCwgIDIzNjUsICAyNTI0fSwKKy8qIDE2JSAqL3sgNzgsICAgMTQ4LCAgMzQ1LCAgNDUzLCAgNTU2LCAgNjUyLCAgODQwLCAgIDExNzIsICAxNDcxLCAgMTk0NSwgIDIzMjksICAyNDg1fSwKKy8qIDE3JSAqL3sgNzcsICAgMTQ2LCAgMzQwLCAgNDQ3LCAgNTQ3LCAgNjQzLCAgODI5LCAgIDExNTYsICAxNDUwLCAgMTkxNiwgIDIyOTMsICAyNDQ2fSwKKy8qIDE4JSAqL3sgNzYsICAgMTQ0LCAgMzM1LCAgNDQxLCAgNTM4LCAgNjM1LCAgODE4LCAgIDExNDAsICAxNDI5LCAgMTg4NywgIDIyNTYsICAyNDA2fSwKKy8qIDE5JSAqL3sgNzUsICAgMTQzLCAgMzMwLCAgNDM2LCAgNTI5LCAgNjI3LCAgODA3LCAgIDExMjQsICAxNDA4LCAgMTg1NywgIDIyMTksICAyMzY2fSwKKy8qIDIwJSAqL3sgNzQsICAgMTQxLCAgMzI1LCAgNDMwLCAgNTIwLCAgNjE4LCAgNzk1LCAgIDExMDcsICAxMzg2LCAgMTgyNywgIDIxODIsICAyMzI2fSwKKy8qIDIxJSAqL3sgNzMsICAgMTM5LCAgMzIwLCAgNDI0LCAgNTEwLCAgNjEwLCAgNzg0LCAgIDEwOTEsICAxMzY1LCAgMTc5NywgIDIxNDUsICAyMjg1fSwKKy8qIDIyJSAqL3sgNzIsICAgMTM3LCAgMzE0LCAgNDE4LCAgNTAxLCAgNjAxLCAgNzcyLCAgIDEwNzQsICAxMzQzLCAgMTc2NiwgIDIxMDcsICAyMjQ0fSwKKy8qIDIzJSAqL3sgNzEsICAgMTM1LCAgMzA5LCAgNDEyLCAgNDkyLCAgNTkyLCAgNzYxLCAgIDEwNTcsICAxMzIxLCAgMTczNiwgIDIwNjksICAyMjAzfSwKKy8qIDI0JSAqL3sgNzAsICAgMTMzLCAgMzA0LCAgNDA3LCAgNDgyLCAgNTg0LCAgNzQ5LCAgIDEwNDAsICAxMjk5LCAgMTcwNSwgIDIwMzEsICAyMTYxfSwKKy8qIDI1JSAqL3sgNjksICAgMTMxLCAgMjk5LCAgNDAxLCAgNDczLCAgNTc1LCAgNzM4LCAgIDEwMjMsICAxMjc3LCAgMTY3NCwgIDE5OTIsICAyMTIwfSwKKy8qIDI2JSAqL3sgNjgsICAgMTI5LCAgMjkzLCAgMzk1LCAgNDY0LCAgNTY2LCAgNzI2LCAgIDEwMDYsICAxMjU0LCAgMTY0MiwgIDE5NTMsICAyMDc4fSwKKy8qIDI3JSAqL3sgNjcsICAgMTI3LCAgMjg4LCAgMzg5LCAgNDU0LCAgNTU3LCAgNzE0LCAgIDk4OSwgICAxMjMyLCAgMTYxMSwgIDE5MTUsICAyMDM1fSwKKy8qIDI4JSAqL3sgNjYsICAgMTI1LCAgMjgzLCAgMzgzLCAgNDQ1LCAgNTQ5LCAgNzAzLCAgIDk3MiwgICAxMjA5LCAgMTU3OSwgIDE4NzYsICAxOTkzfSwKKy8qIDI5JSAqL3sgNjUsICAgMTIzLCAgMjc4LCAgMzc3LCAgNDM2LCAgNTQwLCAgNjkxLCAgIDk1NSwgICAxMTg3LCAgMTU0OCwgIDE4MzYsICAxOTUxfSwKKy8qIDMwJSAqL3sgNjQsICAgMTIxLCAgMjcyLCAgMzcxLCAgNDI2LCAgNTMxLCAgNjc5LCAgIDkzNywgICAxMTY0LCAgMTUxNiwgIDE3OTcsICAxOTA4fSwKKy8qIDMxJSAqL3sgNjMsICAgMTE5LCAgMjY3LCAgMzY1LCAgNDE3LCAgNTIyLCAgNjY3LCAgIDkyMCwgICAxMTQxLCAgMTQ4NCwgIDE3NTgsICAxODY2fSwKKy8qIDMyJSAqL3sgNjIsICAgMTE3LCAgMjYyLCAgMzU5LCAgNDA3LCAgNTEzLCAgNjU1LCAgIDkwMiwgICAxMTE4LCAgMTQ1MywgIDE3MTksICAxODIzfSwKKy8qIDMzJSAqL3sgNjEsICAgMTE1LCAgMjU2LCAgMzUzLCAgMzk4LCAgNTA0LCAgNjQzLCAgIDg4NSwgICAxMDk1LCAgMTQyMSwgIDE2NzksICAxNzgxfSwKKy8qIDM0JSAqL3sgNjAsICAgMTEzLCAgMjUxLCAgMzQ3LCAgMzg5LCAgNDk1LCAgNjMxLCAgIDg2NywgICAxMDcyLCAgMTM4OSwgIDE2NDAsICAxNzM4fSwKKy8qIDM1JSAqL3sgNTksICAgMTExLCAgMjQ2LCAgMzQxLCAgMzc5LCAgNDg2LCAgNjE5LCAgIDg1MCwgICAxMDQ5LCAgMTM1NywgIDE2MDAsICAxNjk1fSwKKy8qIDM2JSAqL3sgNTgsICAgMTA4LCAgMjQwLCAgMzM1LCAgMzcwLCAgNDc3LCAgNjA3LCAgIDgzMiwgICAxMDI3LCAgMTMyNSwgIDE1NjEsICAxNjUzfSwKKy8qIDM3JSAqL3sgNTcsICAgMTA2LCAgMjM1LCAgMzI5LCAgMzYxLCAgNDY4LCAgNTk1LCAgIDgxNSwgICAxMDA0LCAgMTI5MywgIDE1MjIsICAxNjEwfSwKKy8qIDM4JSAqL3sgNTYsICAgMTA0LCAgMjMwLCAgMzIzLCAgMzUxLCAgNDU5LCAgNTg0LCAgIDc5NywgICA5ODEsICAgMTI2MSwgIDE0ODMsICAxNTY4fSwKKy8qIDM5JSAqL3sgNTUsICAgMTAyLCAgMjI0LCAgMzE3LCAgMzQyLCAgNDUwLCAgNTcyLCAgIDc4MCwgICA5NTgsICAgMTIzMCwgIDE0NDMsICAxNTI2fSwKKy8qIDQwJSAqL3sgNTQsICAgMTAwLCAgMjE5LCAgMzExLCAgMzMzLCAgNDQxLCAgNTYwLCAgIDc2MiwgICA5MzUsICAgMTE5OCwgIDE0MDQsICAxNDg0fSwKKy8qIDQxJSAqL3sgNTMsICAgOTgsICAgMjE0LCAgMzA1LCAgMzI0LCAgNDMyLCAgNTQ4LCAgIDc0NCwgICA5MTIsICAgMTE2NiwgIDEzNjYsICAxNDQyfSwKKy8qIDQyJSAqL3sgNTIsICAgOTYsICAgMjA5LCAgMjk5LCAgMzE1LCAgNDIzLCAgNTM2LCAgIDcyNywgICA4ODksICAgMTEzNSwgIDEzMjcsICAxNDAwfSwKKy8qIDQzJSAqL3sgNTEsICAgOTQsICAgMjAzLCAgMjkzLCAgMzA2LCAgNDE0LCAgNTI0LCAgIDcwOSwgICA4NjYsICAgMTEwNCwgIDEyODksICAxMzU4fSwKKy8qIDQ0JSAqL3sgNTAsICAgOTIsICAgMTk4LCAgMjg3LCAgMjk3LCAgNDA1LCAgNTEyLCAgIDY5MiwgICA4NDQsICAgMTA3MiwgIDEyNTAsICAxMzE3fSwKKy8qIDQ1JSAqL3sgNDksICAgOTAsICAgMTkzLCAgMjgxLCAgMjg4LCAgMzk2LCAgNTAwLCAgIDY3NSwgICA4MjEsICAgMTA0MSwgIDEyMTIsICAxMjc2fSwKKy8qIDQ2JSAqL3sgNDgsICAgODgsICAgMTg4LCAgMjc1LCAgMjc5LCAgMzg3LCAgNDg4LCAgIDY1NywgICA3OTksICAgMTAxMSwgIDExNzQsICAxMjM2fSwKKy8qIDQ3JSAqL3sgNDcsICAgODYsICAgMTgzLCAgMjY5LCAgMjcxLCAgMzc4LCAgNDc2LCAgIDY0MCwgICA3NzcsICAgOTgwLCAgIDExMzcsICAxMTk1fSwKKy8qIDQ4JSAqL3sgNDYsICAgODQsICAgMTc4LCAgMjYyLCAgMjYyLCAgMzY5LCAgNDY0LCAgIDYyMywgICA3NTQsICAgOTQ5LCAgIDExMDAsICAxMTU1fSwKKy8qIDQ5JSAqL3sgNDUsICAgODIsICAgMTczLCAgMjU2LCAgMjU0LCAgMzYwLCAgNDUyLCAgIDYwNiwgICA3MzIsICAgOTE5LCAgIDEwNjMsICAxMTE2fSwKKy8qIDUwJSAqL3sgNDQsICAgODAsICAgMTY4LCAgMjUxLCAgMjQ1LCAgMzUxLCAgNDQxLCAgIDU4OSwgICA3MTAsICAgODg5LCAgIDEwMjYsICAxMDc2fSwKKy8qIDUxJSAqL3sgNDMsICAgNzgsICAgMTYzLCAgMjQ1LCAgMjM3LCAgMzQyLCAgNDI5LCAgIDU3MiwgICA2ODksICAgODYwLCAgIDk5MCwgICAxMDM4fSwKKy8qIDUyJSAqL3sgNDIsICAgNzYsICAgMTU4LCAgMjM5LCAgMjI4LCAgMzMzLCAgNDE3LCAgIDU1NSwgICA2NjcsICAgODMwLCAgIDk1NSwgICA5OTl9LAorLyogNTMlICoveyA0MSwgICA3NCwgICAxNTMsICAyMzMsICAyMjAsICAzMjQsICA0MDYsICAgNTM4LCAgIDY0NSwgICA4MDEsICAgOTE5LCAgIDk2MX0sCisvKiA1NCUgKi97IDQwLCAgIDcyLCAgIDE0OCwgIDIyNywgIDIxMiwgIDMxNSwgIDM5NCwgICA1MjIsICAgNjI0LCAgIDc3MywgICA4ODQsICAgOTI0fSwKKy8qIDU1JSAqL3sgMzksICAgNzAsICAgMTQzLCAgMjIxLCAgMjA0LCAgMzA3LCAgMzgzLCAgIDUwNSwgICA2MDMsICAgNzQ0LCAgIDg1MCwgICA4ODd9LAorLyogNTYlICoveyAzOCwgICA2OCwgICAxMzgsICAyMTUsICAxOTYsICAyOTgsICAzNzEsICAgNDg5LCAgIDU4MiwgICA3MTYsICAgODE2LCAgIDg1MX0sCisvKiA1NyUgKi97IDM3LCAgIDY3LCAgIDEzNCwgIDIwOSwgIDE4OSwgIDI4OSwgIDM2MCwgICA0NzMsICAgNTYyLCAgIDY4OCwgICA3ODMsICAgODE1fSwKKy8qIDU4JSAqL3sgMzYsICAgNjUsICAgMTI5LCAgMjAzLCAgMTgxLCAgMjgxLCAgMzQ5LCAgIDQ1NywgICA1NDEsICAgNjYxLCAgIDc1MCwgICA3ODB9LAorLyogNTklICoveyAzNSwgICA2MywgICAxMjQsICAxOTcsICAxNzQsICAyNzIsICAzMzgsICAgNDQxLCAgIDUyMSwgICA2MzQsICAgNzE3LCAgIDc0NX0sCisvKiA2MCUgKi97IDM0LCAgIDYxLCAgIDEyMCwgIDE5MiwgIDE2NiwgIDI2NCwgIDMyNywgICA0MjUsICAgNTAxLCAgIDYwOCwgICA2ODYsICAgNzEyfSwKKy8qIDYxJSAqL3sgMzMsICAgNTksICAgMTE1LCAgMTg2LCAgMTU5LCAgMjU1LCAgMzE2LCAgIDQwOSwgICA0ODIsICAgNTgyLCAgIDY1NSwgICA2Nzh9LAorLyogNjIlICoveyAzMiwgICA1NywgICAxMTEsICAxODAsICAxNTIsICAyNDcsICAzMDUsICAgMzk0LCAgIDQ2MiwgICA1NTYsICAgNjI0LCAgIDY0Nn0sCisvKiA2MyUgKi97IDMxLCAgIDU1LCAgIDEwNywgIDE3NCwgIDE0NSwgIDIzOCwgIDI5NCwgICAzNzksICAgNDQzLCAgIDUzMSwgICA1OTQsICAgNjE0fSwKKy8qIDY0JSAqL3sgMzAsICAgNTMsICAgMTAyLCAgMTY5LCAgMTM4LCAgMjMwLCAgMjgzLCAgIDM2NCwgICA0MjUsICAgNTA2LCAgIDU2NSwgICA1ODN9LAorLyogNjUlICoveyAyOSwgICA1MiwgICA5OCwgICAxNjMsICAxMzIsICAyMjIsICAyNzMsICAgMzQ5LCAgIDQwNiwgICA0ODIsICAgNTM2LCAgIDU1M30sCisvKiA2NiUgKi97IDI4LCAgIDUwLCAgIDk0LCAgIDE1OCwgIDEyNSwgIDIxNCwgIDI2MiwgICAzMzQsICAgMzg4LCAgIDQ1OSwgICA1MDgsICAgNTIzfSwKKy8qIDY3JSAqL3sgMjcsICAgNDgsICAgOTAsICAgMTUyLCAgMTE5LCAgMjA2LCAgMjUyLCAgIDMyMCwgICAzNzAsICAgNDM2LCAgIDQ4MSwgICA0OTV9LAorLyogNjglICoveyAyNiwgICA0NiwgICA4NiwgICAxNDcsICAxMTMsICAxOTgsICAyNDIsICAgMzA2LCAgIDM1MywgICA0MTMsICAgNDU1LCAgIDQ2N30sCisvKiA2OSUgKi97IDI2LCAgIDQ0LCAgIDgyLCAgIDE0MSwgIDEwNywgIDE5MCwgIDIzMSwgICAyOTIsICAgMzM2LCAgIDM5MSwgICA0MjksICAgNDQwfSwKKy8qIDcwJSAqL3sgMjUsICAgNDMsICAgNzgsICAgMTM2LCAgMTAxLCAgMTgyLCAgMjIxLCAgIDI3OCwgICAzMTksICAgMzcwLCAgIDQwNSwgICA0MTR9LAorLyogNzElICoveyAyNCwgICA0MSwgICA3NCwgICAxMzAsICA5NSwgICAxNzQsICAyMTIsICAgMjY1LCAgIDMwMywgICAzNTAsICAgMzgxLCAgIDM4OX0sCisvKiA3MiUgKi97IDIzLCAgIDM5LCAgIDcxLCAgIDEyNSwgIDkwLCAgIDE2NywgIDIwMiwgICAyNTIsICAgMjg3LCAgIDMyOSwgICAzNTgsICAgMzY1fSwKKy8qIDczJSAqL3sgMjIsICAgMzcsICAgNjcsICAgMTE5LCAgODUsICAgMTU5LCAgMTkyLCAgIDIzOSwgICAyNzEsICAgMzEwLCAgIDMzNSwgICAzNDJ9LAorLyogNzQlICoveyAyMSwgICAzNiwgICA2MywgICAxMTQsICA4MCwgICAxNTEsICAxODMsICAgMjI2LCAgIDI1NiwgICAyOTEsICAgMzE0LCAgIDMyMH0sCisvKiA3NSUgKi97IDIwLCAgIDM0LCAgIDYwLCAgIDEwOSwgIDc1LCAgIDE0NCwgIDE3NCwgICAyMTQsICAgMjQxLCAgIDI3MywgICAyOTQsICAgMjk4fSwKKy8qIDc2JSAqL3sgMTksICAgMzIsICAgNTcsICAgMTA0LCAgNzAsICAgMTM3LCAgMTY0LCAgIDIwMiwgICAyMjcsICAgMjU2LCAgIDI3NCwgICAyNzh9LAorLyogNzclICoveyAxOCwgICAzMSwgICA1MywgICA5OSwgICA2NiwgICAxMzAsICAxNTUsICAgMTkwLCAgIDIxMywgICAyMzksICAgMjU2LCAgIDI1OX0sCisvKiA3OCUgKi97IDE3LCAgIDI5LCAgIDUwLCAgIDk0LCAgIDYyLCAgIDEyMiwgIDE0NiwgICAxNzgsICAgMjAwLCAgIDIyMywgICAyMzgsICAgMjQxfSwKKy8qIDc5JSAqL3sgMTYsICAgMjgsICAgNDcsICAgODksICAgNTgsICAgMTE1LCAgMTM4LCAgIDE2NywgICAxODcsICAgMjA4LCAgIDIyMiwgICAyMjV9LAorLyogODAlICoveyAxNiwgICAyNiwgICA0NCwgICA4NCwgICA1NCwgICAxMDksICAxMjksICAgMTU2LCAgIDE3NSwgICAxOTQsICAgMjA2LCAgIDIwOX0sCisvKiA4MSUgKi97IDE1LCAgIDI0LCAgIDQxLCAgIDc5LCAgIDUwLCAgIDEwMiwgIDEyMSwgICAxNDYsICAgMTYzLCAgIDE4MCwgICAxOTIsICAgMTk0fSwKKy8qIDgyJSAqL3sgMTQsICAgMjMsICAgMzksICAgNzQsICAgNDcsICAgOTUsICAgMTEzLCAgIDEzNiwgICAxNTEsICAgMTY3LCAgIDE3OCwgICAxODF9LAorLyogODMlICoveyAxMywgICAyMSwgICAzNiwgICA2OSwgICA0NCwgICA4OSwgICAxMDUsICAgMTI2LCAgIDE0MCwgICAxNTUsICAgMTY2LCAgIDE2OX0sCisvKiA4NCUgKi97IDEyLCAgIDIwLCAgIDMzLCAgIDY0LCAgIDQxLCAgIDgyLCAgIDk3LCAgICAxMTYsICAgMTMwLCAgIDE0NCwgICAxNTUsICAgMTU4fSwKKy8qIDg1JSAqL3sgMTEsICAgMTksICAgMzEsICAgNjAsICAgMzksICAgNzYsICAgODksICAgIDEwNywgICAxMjAsICAgMTM0LCAgIDE0NSwgICAxNDl9LAorLyogODYlICoveyAxMSwgICAxNywgICAyOSwgICA1NSwgICAzNiwgICA3MCwgICA4MiwgICAgOTgsICAgIDExMCwgICAxMjUsICAgMTM2LCAgIDE0MH0sCisvKiA4NyUgKi97IDEwLCAgIDE2LCAgIDI2LCAgIDUxLCAgIDM0LCAgIDY0LCAgIDc1LCAgICA5MCwgICAgMTAyLCAgIDExNiwgICAxMjgsICAgMTMzfSwKKy8qIDg4JSAqL3sgOSwgICAgMTQsICAgMjQsICAgNDYsICAgMzIsICAgNTgsICAgNjgsICAgIDgxLCAgICA5MywgICAgMTA4LCAgIDEyMSwgICAxMjh9LAorLyogODklICoveyA4LCAgICAxMywgICAyMiwgICA0MiwgICAzMSwgICA1MiwgICA2MSwgICAgNzQsICAgIDg2LCAgICAxMDIsICAgMTE2LCAgIDEyNH0sCisvKiA5MCUgKi97IDcsICAgIDEyLCAgIDIxLCAgIDM3LCAgIDI5LCAgIDQ2LCAgIDU0LCAgICA2NiwgICAgNzksICAgIDk2LCAgICAxMTIsICAgMTIxfQorfTsKKworI2RlZmluZSBSU1NJQlVGX05VTSAxMAorI2RlZmluZSBSU1NJMlJBVEVfU0laRSA5CisKK3N0YXRpYyBUWFJFVFJZX1JFQyBUeFJhdGVSZWM9e01UT19NQVhfREFUQV9SQVRFX0xFVkVMUyAtIDEsIDB9OyAgIC8vbmV3IHJlY29yZD0+VHhSYXRlUmVjCitzdGF0aWMgaW50IFR4UmV0cnlSYXRlOworLy9zdGF0aWMgaW50IFNRMywgQlNTX1BLX0NOVCwgTklETEVTTE9ULCBTTE9UX0NOVCwgSU5URVJGX0NOVCwgR0FQX0NOVCwgRFNfRVZNOworc3RhdGljIHMzMiBSU1NJQnVmW1JTU0lCVUZfTlVNXT17LTcwLCAtNzAsIC03MCwgLTcwLCAtNzAsIC03MCwgLTcwLCAtNzAsIC03MCwgLTcwfTsKK3N0YXRpYyBzMzIgUlNTSVNtb290aGVkPS03MDA7CitzdGF0aWMgaW50IFJTU0lCdWZJbmRleD0wOworc3RhdGljIHU4IG1heF9yc3NpX3JhdGU7CitzdGF0aWMgaW50IHJhdGVfdGJsWzEzXSA9IHswLDEsMiw1LDExLDYsOSwxMiwxOCwyNCwzNiw0OCw1NH07CisvL1tXS0NIRU5dc3RhdGljIGNvcmVfZGF0YV90ICpwTVRPY29yZV9kYXRhPU5VTEw7CisKK3N0YXRpYyBpbnQgVG90YWxUeFBrdCA9IDA7CitzdGF0aWMgaW50IFRvdGFsVHhQa3RSZXRyeSA9IDA7CitzdGF0aWMgaW50IFR4UGt0UGVyQW50WzNdID0gezAsMCwwfTsKK3N0YXRpYyBpbnQgUlhSU1NJQU5UWzNdID17LTcwLC03MCwtNzB9Oworc3RhdGljIGludCBUeFBrdFJldHJ5UGVyQW50WzNdID0gezAsMCwwfTsKKy8vc3RhdGljIGludCBUeERvbWluYXRlRmxhZz1GQUxTRTsKK3N0YXRpYyB1OCBvbGRfYW50ZW5uYVs0XT17MSAsMCAsMSAsMH07CitzdGF0aWMgaW50IHJldHJ5cmF0ZV9yZWNbTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXTsvL3RoaXMgcmVjb3JkIHRoZSByZXRyeSByYXRlIGF0IGRpZmZlcmVudCBkYXRhIHJhdGUKKworc3RhdGljIGludCBQZXJpb2RUb3RhbFR4UGt0ID0gMDsKK3N0YXRpYyBpbnQgUGVyaW9kVG90YWxUeFBrdFJldHJ5ID0gMDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlzMzIgUlNTSTsKKwl1OCAgVHhSYXRlOworfVJTU0kyUkFURTsKKworc3RhdGljIFJTU0kyUkFURSBSU1NJMlJhdGVUYmxbUlNTSTJSQVRFX1NJWkVdID0KK3sKKwl7LTc0MCwgMTA4fSwgIC8vIDU0TQorCXstNzYwLCA5Nn0sICAvLyA0OE0KKwl7LTgyMCwgNzJ9LCAgLy8gMzZNCisJey04NTAsIDQ4fSwgIC8vIDI0TQorCXstODcwLCAzNn0sICAvLyAxOE0KKwl7LTg5MCwgMjR9LCAgLy8gMTJNCisJey05MDAsIDEyfSwgIC8vIDZNCisJey05MjAsIDExfSwgLy8gNS41TQorCXstOTUwLCA0fSwgLy8gMk0KK307CitzdGF0aWMgdTggdW50b2dnbGVjb3VudDsKK3N0YXRpYyB1OCBsYXN0X3JhdGVfYW50OyAvL3RoaXMgaXMgdXNlZCBmb3IgYW50ZW5uYSBiYWNrb2ZmLWhoCisKK3U4CWJvU3BhcnNlVHhUcmFmZmljID0gRkFMU0U7CisKK3ZvaWQgTVRPX0luaXQoTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBBbnRlbm5hVG9nZ2xlSW5pdGlhdG9yKE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgQW50ZW5uYVRvZ2dsZVN0YXRlKE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgVHhQd3JDb250cm9sKE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgR2V0RnJlc2hBbnRlbm5hRGF0YShNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIFR4UmF0ZVJlZHVjdGlvbkN0cmwoTVRPX0ZVTkNfSU5QVVQpOworLyoqIDEuMS4zMS4xMDAwIFR1cmJvIG1vZGlmeSAqLworLy92b2lkIE1UT19TZXREVE9SYXRlUmFuZ2UoaW50IHR5cGUpOwordm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKE1UT19GVU5DX0lOUFVULCB1OCAqcFJhdGVBcnJheSwgdTggQXJyYXlTaXplKTsKK3ZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHQwLCB1OCBpbmRleCk7Cit2b2lkIE1UT19UeEZhaWxlZChNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIFNtb290aFJTU0koczMyIG5ld19yc3NpKTsKK3ZvaWQgaGFsX2dldF9kdG9fcGFyYShNVE9fRlVOQ19JTlBVVCwgY2hhciAqYnVmZmVyKTsKK3U4IENhbGNOZXdSYXRlKE1UT19GVU5DX0lOUFVULCB1OCBvbGRfcmF0ZSwgdTMyIHJldHJ5X2NudCwgdTMyIHR4X2ZyYWdfY250KTsKK3U4IEdldE1heFJhdGVMZXZlbEZyb21SU1NJKHZvaWQpOwordTggTVRPX0dldFR4RmFsbGJhY2tSYXRlKE1UT19GVU5DX0lOUFVUKTsKK2ludCBEaXZpZGUoaW50IGEsIGludCBiKTsKK3ZvaWQgbXVsdGlhZ2MoTVRPX0ZVTkNfSU5QVVQsIHU4IGhpZ2hfZ2Fpbl9tb2RlKTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNVE9fSW5pdCAtLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIFNldCBEVE8gVHggUmF0ZSBTY29wZSBiZWNhdXNlIGRpZmZlcmVudCBBUCBjb3VsZCBoYXZlIGRpZmZlcmVudCBSYXRlIHNldC4KKy8vICAgIEFmdGVyIG91ciBzdGFpb24gam9pbiB3aXRoIEFQLCBMTSBjb3JlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUKKy8vICAgIFR4IFJhdGUgdGFibGUuCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIHBSYXRlQXJyYXkgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBUeCBSYXRlIEFycmF5IGJ5IHRoZSBmb2xsb3dpbmcgb3JkZXIKKy8vICAgICAgICAgICAgICAgICAgICAtIDIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOAorLy8gICAgICAgICAgICAgICAgICAgIC0gRFRPIHdvbid0IGNoZWNrIHdoZXRoZXIgcmF0ZSBvcmRlciBpcyBpbnZhbGlkIG9yIG5vdAorLy8gICAgQXJyYXlTaXplICAgICAgIC0gVGhlIGFycmF5IHNpemUgdG8gaW5kaWNhdGUgaG93IG1hbnkgdHggcmF0ZSB3ZSBjYW4gY2hvb3NlCisvLworLy8gIHNhbXBsZSBjb2RlOgorLy8JeworLy8JCXU4IFJhdGVBcnJheVs0XSA9IHsyLCA0LCAxMSwgMjJ9OworLy8JCU1UT19TZXREVE9SYXRlUmFuZ2UoUmF0ZUFycmF5LCA0KTsKKy8vCX0KKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgTm9uZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIE1UT19TZXREVE9SYXRlUmFuZ2UoTVRPX0ZVTkNfSU5QVVQsdTggKnBSYXRlQXJyYXksIHU4IEFycmF5U2l6ZSkKK3sKKwl1OAlpLCBqPTA7CisKKwlmb3IoaT0wO2k8QXJyYXlTaXplO2krKykKKwl7CisJCWlmKHBSYXRlQXJyYXlbaV0gPT0gMjIpCisJCQlicmVhazsKKwl9CisJaWYoaSA8IEFycmF5U2l6ZSkgLy93ZSBuZWVkIGFkanVzdCB0aGUgb3JkZXIgb2YgcmF0ZSBsaXN0IGJlY2F1c2UgMTFNYnBzIHJhdGUgZXhpc3RzCisJeworCQlmb3IoO2k+MDtpLS0pCisJCXsKKwkJCWlmKHBSYXRlQXJyYXlbaS0xXSA8PSAxMSkKKwkJCQlicmVhazsKKwkJCXBSYXRlQXJyYXlbaV0gPSBwUmF0ZUFycmF5W2ktMV07CisJCX0KKwkJcFJhdGVBcnJheVtpXSA9IDIyOworCQlNVE9fT0ZETV9SQVRFX0xFVkVMKCkgPSBpOworCX0KKwllbHNlCisJeworCQlmb3IoaT0wOyBpPEFycmF5U2l6ZTsgaSsrKQorCQl7CisJCQlpZiAocFJhdGVBcnJheVtpXSA+PSAxMikKKwkJCQlicmVhazsKKwkJfQorCQlNVE9fT0ZETV9SQVRFX0xFVkVMKCkgPSBpOworCX0KKworCWZvcihpPTA7aTxBcnJheVNpemU7aSsrKQorCXsKKwkJTVRPX0RhdGFfUmF0ZV9UYmxbaV0gPSBwUmF0ZUFycmF5W2ldOworCQlmb3IoO2o8TVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTO2orKykKKwkJeworCQkJaWYoU3RhcmRhcmRfRGF0YV9SYXRlX1RibFtqXSA9PSBwUmF0ZUFycmF5W2ldKQorCQkJCWJyZWFrOworCQl9CisJCUxldmVsMlBlclRibFtpXSA9IGo7CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbTVRPXTpPcCBSYXRlWyVkXTogJWRcbiIsaSwgTVRPX0RhdGFfUmF0ZV9UYmxbaV0pKTsKKwkJI2VuZGlmCisJfQorCU1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsID0gQXJyYXlTaXplOworCWlmKCBNVE9fREFUQSgpLlJhdGVQb2xpY3kgKSAvLyAwIG1lYW5zIHRoYXQgbm8gcmVnaXN0cnkgc2V0dGluZworCXsKKwkJaWYoIE1UT19EQVRBKCkuUmF0ZVBvbGljeSA9PSAxICkKKwkJCVR4UmF0ZVJlYy50eF9yYXRlID0gMDsJLy9hc2NlbnQKKwkJZWxzZQorCQkJVHhSYXRlUmVjLnR4X3JhdGUgPSBNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCAtMSA7CS8vZGVzY2VudAorCX0KKwllbHNlCisJeworCQlpZiggTVRPX0lOSVRUWFJBVEVfTU9ERSApCisJCQlUeFJhdGVSZWMudHhfcmF0ZSA9IDA7CS8vYXNjZW50CisJCWVsc2UKKwkJCVR4UmF0ZVJlYy50eF9yYXRlID0gTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgLTEgOwkvL2Rlc2NlbnQKKwl9CisJVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGUgPSAwOworCS8vc2V0IGRlZmF1bHQgcmF0ZSBmb3IgaW5pdGlhbCB1c2UKKwlNVE9fUkFURV9MRVZFTCgpID0gVHhSYXRlUmVjLnR4X3JhdGU7CisJTVRPX0ZBTExCQUNLX1JBVEVfTEVWRUwoKSA9IE1UT19SQVRFX0xFVkVMKCk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTVRPX0luaXQgLS0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBJbml0aWFsaXplIE1UTyBwYXJhbWV0ZXJzLgorLy8KKy8vICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQgZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbi4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgQWRhcHRlciAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIE1pbmlwb3J0IEFkYXB0ZXIgQ29udGV4dAorLy8KKy8vICBSZXR1cm4gVmFsdWU6CisvLyAgICBOb25lCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgTVRPX0luaXQoTVRPX0ZVTkNfSU5QVVQpCit7CisgICAgaW50IGk7CisJLy9XQkRFQlVHKCgiW01UT10gLT4gTVRPX0luaXQoKVxuIikpOworCS8vW1dLQ0hFTl1wTVRPY29yZV9kYXRhID0gcGNvcmVfZGF0YTsKKy8vIDIwMDQwNTEwIFR1cmJvIGFkZCBmb3IgZ2xvYmFsIHZhcmlhYmxlCisgICAgTVRPX1RNUl9DTlQoKSAgICAgICA9IDA7CisgICAgTVRPX1RPR0dMRV9TVEFURSgpICA9IFRPR0dMRV9TVEFURV9JRExFOworICAgIE1UT19UWF9SQVRFX1JFRFVDVElPTl9TVEFURSgpID0gUkFURV9DSEdTVEFURV9JRExFOworICAgIE1UT19CQUNLT0ZGX1RNUigpICAgPSAwOworICAgIE1UT19MQVNUX1JBVEUoKSAgICAgPSAxMTsKKyAgICBNVE9fQ09fRUZGSUNFTlQoKSAgID0gMDsKKworICAgIC8vTVRPX1RIX0ZJWEFOVCgpICAgICA9IE1UT19ERUZBVUxUX1RIX0ZJWEFOVDsKKyAgICBNVE9fVEhfQ05UKCkgICAgICAgID0gTVRPX0RFRkFVTFRfVEhfQ05UOworICAgIE1UT19USF9TUTMoKSAgICAgICAgPSBNVE9fREVGQVVMVF9USF9TUTM7CisgICAgTVRPX1RIX0lETEVfU0xPVCgpICA9IE1UT19ERUZBVUxUX1RIX0lETEVfU0xPVDsKKyAgICBNVE9fVEhfUFJfSU5URVJGKCkgID0gTVRPX0RFRkFVTFRfVEhfUFJfSU5URVJGOworCisgICAgTVRPX1RNUl9BR0lORygpICAgICA9IE1UT19ERUZBVUxUX1RNUl9BR0lORzsKKyAgICBNVE9fVE1SX1BFUklPRElDKCkgID0gTVRPX0RFRkFVTFRfVE1SX1BFUklPRElDOworCisgICAgLy9bV0tDSEVOXU1UT19DQ0FfTU9ERV9TRVRVUCgpPSAodTgpIGhhbF9nZXRfY2NhX21vZGUoTVRPX0hBTCgpKTsKKyAgICAvL1tXS0NIRU5dTVRPX0NDQV9NT0RFKCkgICAgICA9IE1UT19DQ0FfTU9ERV9TRVRVUCgpOworCisgICAgLy9NVE9fUFJFQU1CTEVfVFlQRSgpID0gTVRPX1BSRUFNQkxFX0xPTkc7CisgICAgTVRPX1BSRUFNQkxFX1RZUEUoKSA9IE1UT19QUkVBTUJMRV9TSE9SVDsgICAvLyBmb3IgdGVzdAorCisgICAgTVRPX0FOVF9TRUwoKSAgICAgICA9IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpKTsKKyAgICBNVE9fQU5UX01BQygpICAgICAgID0gTVRPX0FOVF9TRUwoKTsKKyAgICBNVE9fQ05UX0FOVCgwKSAgICAgID0gMDsKKyAgICBNVE9fQ05UX0FOVCgxKSAgICAgID0gMDsKKyAgICBNVE9fU1FfQU5UKDApICAgICAgID0gMDsKKyAgICBNVE9fU1FfQU5UKDEpICAgICAgID0gMDsKKyAgICBNVE9fQU5UX0RJVkVSU0lUWSgpID0gTVRPX0FOVEVOTkFfRElWRVJTSVRZX09OOworICAgIC8vQ2FyZFNldF9BbnRlbm5hRGl2ZXJzaXR5KEFkYXB0ZXIsIE1UT19BTlRfRElWRVJTSVRZKCkpOworICAgIC8vUExNRVNldEFudGVubmFEaXZlcnNpdHkoIEFkYXB0ZXIsIE1UT19BTlRfRElWRVJTSVRZKCkpOworCisgICAgTVRPX0FHSU5HX1RJTUVPVVQoKSA9IDA7Ly9NVE9fVE1SX0FHSU5HKCkgLyBNVE9fVE1SX1BFUklPRElDKCk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIHRoZSB2YWx1ZXMgc2V0IGJ5IHVzZXIKKyAgICAvLworICAgIC8vTVRPX1JBVEVfTEVWRUwoKSAgICAgICAgICAgID0gMTA7CisgICAgTVRPX1JBVEVfTEVWRUwoKSAgICAgICAgICAgID0gMDsKKwlNVE9fRkFMTEJBQ0tfUkFURV9MRVZFTCgpCT0gTVRPX1JBVEVfTEVWRUwoKTsKKyAgICBNVE9fRlJBR19USF9MRVZFTCgpICAgICAgICAgPSA0OworICAgIC8qKiAxLjEuMjMuMTAwMCBUdXJibyBtb2RpZnkgZnJvbSAtMSB0byArMQorCU1UT19SVFNfVEhSRVNIT0xEKCkgICAgICAgICA9IE1UT19GUkFHX1RIKCkgLSAxOworICAgIE1UT19SVFNfVEhSRVNIT0xEX1NFVFVQKCkgICA9IE1UT19GUkFHX1RIKCkgLSAxOworCSovCisJTVRPX1JUU19USFJFU0hPTEQoKSAgICAgICAgID0gTVRPX0ZSQUdfVEgoKSArIDE7CisgICAgTVRPX1JUU19USFJFU0hPTERfU0VUVVAoKSAgID0gTVRPX0ZSQUdfVEgoKSArIDE7CisgICAgLy8gMS4xLjIzLjEwMDAgVHVyYm8gYWRkIGZvciBtdG8gY2hhbmdlIHByZWFtYmxlIGZyb20gMCB0byAxCisJTVRPX1JBVEVfQ0hBTkdFX0VOQUJMRSgpICAgID0gMTsKKyAgICBNVE9fRlJBR19DSEFOR0VfRU5BQkxFKCkgICAgPSAwOyAgICAgICAgICAvLyAxLjEuMjkuMTAwMCBUdXJibyBhZGQgZG9uJ3Qgc3VwcG9ydCBmcmFnCisJLy9UaGUgZGVmYXVsdCB2YWx1ZCBvZiBBTlRESVZfREVGQVVMVF9PTiB3aWxsIGJlIGRlY2lkZWQgYnkgRUVQUk9NCisJLy8jaWZkZWYgQU5URElWX0RFRkFVTFRfT04KKyAgICAvL01UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpICA9IDE7CisJLy8jZWxzZQorICAgIC8vTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkgID0gMDsKKwkvLyNlbmRpZgorICAgIE1UT19QT1dFUl9DSEFOR0VfRU5BQkxFKCkgICA9IDE7CisJTVRPX1BSRUFNQkxFX0NIQU5HRV9FTkFCTEUoKT0gMTsKKyAgICBNVE9fUlRTX0NIQU5HRV9FTkFCTEUoKSAgICAgPSAwOyAgICAgICAgICAvLyAxLjEuMjkuMTAwMCBUdXJibyBhZGQgZG9uJ3Qgc3VwcG9ydCBmcmFnCisgICAgLy8gMjAwNDA1MTIgVHVyYm8gYWRkCisJLy9vbGRfYW50ZW5uYVswXSA9IDE7CisJLy9vbGRfYW50ZW5uYVsxXSA9IDA7CisJLy9vbGRfYW50ZW5uYVsyXSA9IDE7CisJLy9vbGRfYW50ZW5uYVszXSA9IDA7CisJZm9yIChpPTA7aTxNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFM7aSsrKQorCQlyZXRyeXJhdGVfcmVjW2ldPTU7CisKKwlNVE9fVFhGTE9XQ09VTlQoKSA9IDA7CisJLy8tLS0tLS0tLS0gRFRPIHRocmVzaG9sZCBwYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0KKwkvL01UT1BBUkFfUEVSSU9ESUNfQ0hFQ0tfQ1lDTEUoKSA9IDUwOworCU1UT1BBUkFfUEVSSU9ESUNfQ0hFQ0tfQ1lDTEUoKSA9IDEwOworCU1UT1BBUkFfUlNTSV9USF9GT1JfQU5URElWKCkgPSAxMDsKKwlNVE9QQVJBX1RYQ09VTlRfVEhfRk9SX0NBTENfUkFURSgpID0gNTA7CisJTVRPUEFSQV9UWFJBVEVfSU5DX1RIKCkJPSAxMDsKKwlNVE9QQVJBX1RYUkFURV9ERUNfVEgoKSA9IDMwOworCU1UT1BBUkFfVFhSQVRFX0VRX1RIKCkgPSA0MDsKKwlNVE9QQVJBX1RYUkFURV9CQUNLT0ZGKCkgPSAxMjsKKwlNVE9QQVJBX1RYUkVUUllSQVRFX1JFRFVDRSgpID0gNjsKKwlpZiAoIE1UT19UWFBPV0VSX0ZST01fRUVQUk9NID09IDB4ZmYpCisJeworCQlzd2l0Y2goIE1UT19IQUwoKS0+cGh5X3R5cGUpCisJCXsKKwkJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisJCQljYXNlIFJGX0FJUk9IQV8yMjMwUzogLy8gMjAwNjA0MjAgQWRkIHRoaXMKKwkJCQlNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKSA9IDQ2OyAvLyBNQVgtOCAvLyBAQCBPbmx5IGZvciBBTCAyMjMwCisJCQkJYnJlYWs7CisJCQljYXNlIFJGX0FJUk9IQV83MjMwOgorCQkJCU1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpID0gNDk7CisJCQkJYnJlYWs7CisJCQljYXNlIFJGX1dCXzI0MjoKKwkJCQlNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKSA9IDEwOworCQkJCWJyZWFrOworCQkJY2FzZSBSRl9XQl8yNDJfMToKKwkJCQlNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKSA9IDI0OyAvLyAtPjEwIDIwMDYwMzE2LjEgbW9kaWZ5CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZQkvL2ZvbGxvdyB0aGUgc2V0dGluZyBmcm9tIEVFUFJPTQorCQlNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKSA9IE1UT19UWFBPV0VSX0ZST01fRUVQUk9NOworCWhhbF9zZXRfcmZfcG93ZXIoTVRPX0hBTCgpLCAodTgpTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkpOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvLyBGb3IgUlNTSSB0dXJuaW5nIDIwMDYwODA4LjQgQ2FuY2VsIGxvYWQgZnJvbSBFRVBST00KKwlNVE9fREFUQSgpLlJTU0lfaGlnaCA9IC00MTsKKwlNVE9fREFUQSgpLlJTU0lfbG93ID0gLTYwOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCitzdGF0aWMgdTMyIERUT19SeF9JbmZvWzEzXVszXTsKK3N0YXRpYyB1MzIgRFRPX1J4Q1JDRmFpbF9JbmZvWzEzXVszXTsKK3N0YXRpYyB1MzIgQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9NTsKK3R5cGVkZWYgc3RydWN0eworCWludCBSeFJhdGU7CisJaW50IFJ4UmF0ZVBrdHM7CisJaW50IGluZGV4OworfVJYUkFURV9BTlQ7CitSWFJBVEVfQU5UIFJ4UmF0ZVBlYWtBbnRbM107CisKKyNkZWZpbmUgQU5UMCAgICAwCisjZGVmaW5lIEFOVDEgICAgMQorI2RlZmluZSBPTERfQU5UIDIKKwordm9pZCBTZWFyY2hQZWFrUnhSYXRlKGludCBpbmRleCkKK3sKKwlpbnQgaTsKKwlSeFJhdGVQZWFrQW50W2luZGV4XS5SeFJhdGVQa3RzPTA7CisJLy9GaW5kIG91dCB0aGUgYmVzdCByeCByYXRlIHdoaWNoIGlzIHVzZWQgb24gZGlmZmVyZW50IGFudGVubmEKKwlmb3IoaT0xO2k8MTM7aSsrKQorCXsKKwkJaWYoRFRPX1J4X0luZm9baV1baW5kZXhdID4gKHUzMikgUnhSYXRlUGVha0FudFtpbmRleF0uUnhSYXRlUGt0cykKKwkJeworCQkJUnhSYXRlUGVha0FudFtpbmRleF0uUnhSYXRlUGt0cyA9IERUT19SeF9JbmZvW2ldW2luZGV4XTsKKwkJCVJ4UmF0ZVBlYWtBbnRbaW5kZXhdLlJ4UmF0ZSA9IHJhdGVfdGJsW2ldOworCQkJUnhSYXRlUGVha0FudFtpbmRleF0uaW5kZXggPSBpOworCQl9CisJfQorfQorCit2b2lkIFJlc2V0RFRPX1J4SW5mbyhpbnQgaW5kZXgsIE1UT19GVU5DX0lOUFVUKQoreworCWludCBpOworCisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiUmVzZXREVE9yeFxuIikpOworCSNlbmRpZgorCisJZm9yKGk9MDtpPDEzO2krKykKKwkJRFRPX1J4X0luZm9baV1baW5kZXhdID0gTVRPX0hBTCgpLT5yeF9va19jb3VudFtpXTsKKworCWZvcihpPTA7aTwxMztpKyspCisJCURUT19SeENSQ0ZhaWxfSW5mb1tpXVtpbmRleF0gPSBNVE9fSEFMKCktPnJ4X2Vycl9jb3VudFtpXTsKKworCVRvdGFsVHhQa3QgPSAwOworCVRvdGFsVHhQa3RSZXRyeSA9IDA7Cit9CisKK3ZvaWQgR2V0RFRPX1J4SW5mbyhpbnQgaW5kZXgsIE1UT19GVU5DX0lOUFVUKQoreworCWludCBpOworCisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiR2V0RFRPcnhcbiIpKTsKKwkjZW5kaWYKKworCS8vUERFQlVHKCgiW01UT106RFRPX1J4X0luZm9bJWRdPSVkLCByeF9va19jb3VudD0lZFxuIiwgaW5kZXgsIERUT19SeF9JbmZvWzBdW2luZGV4XSwgcGh3X2RhdGEtPnJ4X29rX2NvdW50WzBdKSk7CisJZm9yKGk9MDtpPDEzO2krKykKKwkJRFRPX1J4X0luZm9baV1baW5kZXhdID0gYWJzKE1UT19IQUwoKS0+cnhfb2tfY291bnRbaV0gLSBEVE9fUnhfSW5mb1tpXVtpbmRleF0pOworCWlmKERUT19SeF9JbmZvWzBdW2luZGV4XT09MCkgRFRPX1J4X0luZm9bMF1baW5kZXhdID0gMTsKKworCWZvcihpPTA7aTwxMztpKyspCisJCURUT19SeENSQ0ZhaWxfSW5mb1tpXVtpbmRleF0gPSBNVE9fSEFMKCktPnJ4X2Vycl9jb3VudFtpXSAtIERUT19SeENSQ0ZhaWxfSW5mb1tpXVtpbmRleF07CisKKwlUeFBrdFBlckFudFtpbmRleF0gPSBUb3RhbFR4UGt0OworCVR4UGt0UmV0cnlQZXJBbnRbaW5kZXhdID0gVG90YWxUeFBrdFJldHJ5OworCVRvdGFsVHhQa3QgPSAwOworCVRvdGFsVHhQa3RSZXRyeSA9IDA7Cit9CisKK3ZvaWQgT3V0cHV0RGVidWdJbmZvKGludCBpbmRleDEsIGludCBpbmRleDIpCit7CisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiW0hIRFRPXTpUb3RhbCBSeCAoJWQpXHRcdCglZCkgXG4gIiwgRFRPX1J4X0luZm9bMF1baW5kZXgxXSwgRFRPX1J4X0luZm9bMF1baW5kZXgyXSkpOworICAgIFdCREVCVUcoKCJbSEhEVE9dOlJFQ0VJVkUgUlNTSTogKCVkKVx0XHQoJWQpIFxuICIsIFJYUlNTSUFOVFtpbmRleDFdLCBSWFJTU0lBTlRbaW5kZXgyXSkpOworCVdCREVCVUcoKCJbSEhEVE9dOlRYIHBhY2tldCBjb3JyZWN0IHJhdGU6ICglZCklJVx0XHQoJWQpJSUgXG4gIixEaXZpZGUoVHhQa3RQZXJBbnRbaW5kZXgxXSoxMDAsVHhQa3RSZXRyeVBlckFudFtpbmRleDFdKSwgRGl2aWRlKFR4UGt0UGVyQW50W2luZGV4Ml0qMTAwLFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgyXSkpKTsKKwkjZW5kaWYKKwl7CisJCWludCB0bXAxLCB0bXAyOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiW0hIRFRPXTpUb3RhbCBUeCAoJWQpXHRcdCglZCkgXG4gIiwgVHhQa3RQZXJBbnRbaW5kZXgxXSwgVHhQa3RQZXJBbnRbaW5kZXgyXSkpOworCQlXQkRFQlVHKCgiW0hIRFRPXTpUb3RhbCBUeCByZXRyeSAoJWQpXHRcdCglZCkgXG4gIiwgVHhQa3RSZXRyeVBlckFudFtpbmRleDFdLCBUeFBrdFJldHJ5UGVyQW50W2luZGV4Ml0pKTsKKwkJI2VuZGlmCisJCXRtcDEgPSBUeFBrdFBlckFudFtpbmRleDFdICsgRFRPX1J4X0luZm9bMF1baW5kZXgxXTsKKwkJdG1wMiA9IFR4UGt0UGVyQW50W2luZGV4Ml0gKyBEVE9fUnhfSW5mb1swXVtpbmRleDJdOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiW0hIRFRPXTpUb3RhbCBUeCtSWCAoJWQpXHRcdCglZCkgXG4gIiwgdG1wMSwgdG1wMikpOworCQkjZW5kaWYKKwl9Cit9CisKK3Vuc2lnbmVkIGNoYXIgVHhEb21pbmF0ZShpbnQgaW5kZXgpCit7CisJaW50IHRtcDsKKworCXRtcCA9IFR4UGt0UGVyQW50W2luZGV4XSArIERUT19SeF9JbmZvWzBdW2luZGV4XTsKKworCWlmKERpdmlkZShUeFBrdFBlckFudFtpbmRleF0qMTAwLCB0bXApID4gNDApCisJCXJldHVybiBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworfQorCit1bnNpZ25lZCBjaGFyIENtcFR4UmV0cnlSYXRlKGludCBpbmRleDEsIGludCBpbmRleDIpCit7CisJaW50IHR4X3JldHJ5X3JhdGUxLCB0eF9yZXRyeV9yYXRlMjsKKwl0eF9yZXRyeV9yYXRlMSA9IERpdmlkZSgoVHhQa3RSZXRyeVBlckFudFtpbmRleDFdIC0gVHhQa3RQZXJBbnRbaW5kZXgxXSkqMTAwLCBUeFBrdFJldHJ5UGVyQW50W2luZGV4MV0pOworCXR4X3JldHJ5X3JhdGUyID0gRGl2aWRlKChUeFBrdFJldHJ5UGVyQW50W2luZGV4Ml0gLSBUeFBrdFBlckFudFtpbmRleDJdKSoxMDAsIFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgyXSk7CisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiW01UT106VHhSZXRyeSBBbnQwOiAoJWQlJSkgIEFudDE6ICglZCUlKSBcbiAiLCB0eF9yZXRyeV9yYXRlMSwgdHhfcmV0cnlfcmF0ZTIpKTsKKwkjZW5kaWYKKworCWlmKHR4X3JldHJ5X3JhdGUxID4gdHhfcmV0cnlfcmF0ZTIpCisJCXJldHVybiBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIEdldEZyZXNoQW50ZW5uYURhdGEoTVRPX0ZVTkNfSU5QVVQpCit7CisgICAgdTggICAgICB4OworCisJeCA9IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpKTsKKwkvL2hhbF9nZXRfYnNzX3BrX2NudChNVE9fSEFMKCkpOworCS8vaGFsX2dldF9lc3Rfc3EzKE1UT19IQUwoKSwgMSk7CisJb2xkX2FudGVubmFbMF0gPSB4OworCS8vaWYgdGhpcyBpcyB0aGUgZnVuY3Rpb24gZm9yIHRpbWVyCisJUmVzZXREVE9fUnhJbmZvKHgsIE1UT19GVU5DX0lOUFVUX0RBVEEpOworCWlmKEFudGVubmFUb2dnbGVCa29mZlRpbWVyKQorCQkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXItLTsKKwlpZiAoYWJzKGxhc3RfcmF0ZV9hbnQtTVRPX1JBVEVfTEVWRUwoKSk+MSkgIC8vYmFja29mZiB0aW1lciByZXNldAorCQlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj0wOworCisJaWYgKE1UT19BTlRfRElWRVJTSVRZKCkgIT0gTVRPX0FOVEVOTkFfRElWRVJTSVRZX09OIHx8CisJCU1UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpICE9IDEpCisJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9MTsKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJbSEhEVE9dOioqbGFzdCBkYXRhIHJhdGU9JWQsbm93IGRhdGEgcmF0ZT0lZCoqYW50ZW5uYSB0b2dnbGUgdGltZXI9JWQiLGxhc3RfcmF0ZV9hbnQsTVRPX1JBVEVfTEVWRUwoKSxBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcikpOworCSNlbmRpZgorCWxhc3RfcmF0ZV9hbnQ9TVRPX1JBVEVfTEVWRUwoKTsKKwlpZihBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj09MCkKKwl7CisJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9XQUlUMDsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT106PT09c3RhdGUgaXMgc3RhcnRpbmc9PWZvciBhbnRlbm5hIHRvZ2dsZT09PSIpKTsKKwkJI2VuZGlmCisJfQorCWVsc2UKKwkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX0lETEU7CisKKwlpZiAoKE1UT19CQUNLT0ZGX1RNUigpIT0wKSYmKE1UT19SQVRFX0xFVkVMKCk+TVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgLSAzKSkKKwl7CisJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9JRExFOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiW0hIRFRPXTo9PT10aGUgZGF0YSByYXRlIGlzICVkIChnb29kKWFuZCB3aWxsIG5vdCB0b29nbGUgID09PSIsTVRPX0RBVEFfUkFURSgpPj4xKSk7CisJCSNlbmRpZgorCX0KKworCit9CisKK2ludCBXQl9QQ1JbMl07IC8vcGFja2V0IGNvcnJlY3QgcmF0ZQorCit2b2lkIEFudGVubmFUb2dnbGVTdGF0ZShNVE9fRlVOQ19JTlBVVCkKK3sKKyAgICBpbnQgZGVjaWRlYW50ZmxhZyA9IDA7CisJdTggICAgICB4OworCXMzMiAgICAgcnNzaTsKKworCWlmKE1UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpICE9IDEpCisJCXJldHVybjsKKwl4ID0gaGFsX2dldF9hbnRlbm5hX251bWJlcihNVE9fSEFMKCkpOworCXN3aXRjaChNVE9fVE9HR0xFX1NUQVRFKCkpCisJeworCisJICAgLy9NaXNzaW5nLi4uLi4KKwkgICBjYXNlIFRPR0dMRV9TVEFURV9JRExFOgorCSBjYXNlIFRPR0dMRV9TVEFURV9CS09GRjoKKwkgICAgICAgICAgICAgYnJlYWs7OworCisJCWNhc2UgVE9HR0xFX1NUQVRFX1dBSVQwOi8vPT09PT09PT0KKwkgICAgICAgICAgICAgICBHZXREVE9fUnhJbmZvKHgsIE1UT19GVU5DX0lOUFVUX0RBVEEpOworCQkJc21lX2dldF9yc3NpKE1UT19GVU5DX0lOUFVUX0RBVEEsICZyc3NpKTsKKwkJCVJYUlNTSUFOVFt4XSA9IHJzc2k7CisJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJV0JERUJVRygoIltISERUT10gKip3YWl0MD09PT0gQ29sbGVjdGluZyBBbnQlZC0tcnNzaT0lZFxuIiwgeCxSWFJTU0lBTlRbeF0pKTsKKwkJCSNlbmRpZgorCisJCQkvL2NoYW5nZSBhbnRlbm5hIGFuZCByZXNldCB0aGUgZGF0YSBhdCBjaGFuZ2VkIGFudGVubmEKKwkJCXggPSAofngpICYgMHgwMTsKKwkJCU1UT19BTlRfU0VMKCkgPSB4OworCQkJaGFsX3NldF9hbnRlbm5hX251bWJlcihNVE9fSEFMKCksIE1UT19BTlRfU0VMKCkpOworCQkJTE9DQUxfQU5URU5OQV9OTygpID0geDsKKworCQkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX1dBSVQxOy8vZ28gdG8gd2FpdDEKKwkJCVJlc2V0RFRPX1J4SW5mbyh4LCBNVE9fRlVOQ19JTlBVVF9EQVRBKTsKKwkJCWJyZWFrOworCQljYXNlIFRPR0dMRV9TVEFURV9XQUlUMTovLz09PT09d2FpdDEKKwkJCS8vTVRPX0NOVF9BTlQoeCkgPSBoYWxfZ2V0X2Jzc19wa19jbnQoTVRPX0hBTCgpKTsKKwkJCS8vUlhSU1NJQU5UW3hdID0gaGFsX2dldF9yc3NpKE1UT19IQUwoKSk7CisJCQlzbWVfZ2V0X3Jzc2koTVRPX0ZVTkNfSU5QVVRfREFUQSwgJnJzc2kpOworCQkJUlhSU1NJQU5UW3hdID0gcnNzaTsKKwkJCUdldERUT19SeEluZm8oeCwgTVRPX0ZVTkNfSU5QVVRfREFUQSk7CisJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJV0JERUJVRygoIltISERUT10gKip3YWl0MT09PT0gQ29sbGVjdGluZyBBbnQlZC0tcnNzaT0lZFxuIiwgeCxSWFJTU0lBTlRbeF0pKTsKKwkJCSNlbmRpZgorCQkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX01BS0VERVNJU0lPTjsKKwkJCWJyZWFrOworCQljYXNlIFRPR0dMRV9TVEFURV9NQUtFREVTSVNJT046CisJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJV0JERUJVRygoIltISERUT106QW50LS0wLS0tLS0tLS0tLS0tLS0tLS0xLS0tXG4iKSk7CisJCQlPdXRwdXREZWJ1Z0luZm8oQU5UMCxBTlQxKTsKKwkJCSNlbmRpZgorCQkJLy9QREVCVUcoKCJbSEhEVE9dICoqZGVjaXNpb249PT09XG4gIikpOworCisJCQkvLz09PT09Zm9sbG93aW5nIGlzIHRoZSBkZWNpc2lvbiBwcm9kdXJjZQorCQkJLy8KKwkJCS8vICAgIGZpcnN0OiBjb21wYXJlIHRoZSByc3NpIGlmIGRpZmZlcmVuY2UgPjEwCisJCQkvLyAgICAgICAgICAgc2VsZWN0IHRoZSBsYXJnZXIgb25lCisJCQkvLyAgICAgICAgICAgLG90aGVycyBnbyB0byBzZWNvbmQKKwkJCS8vICAgIHNlY29uZDogY29tYXByZSB0aGUgdHgrcnggcGFja2V0IGNvdW50IGlmIGRpZmZlcmVuY2UgPjEwMAorCQkJLy8gICAgICAgICAgICB1c2UgbGFyZ2VyIHRvdGFsIHBhY2tldHMgYW50ZW5uYQorCQkJLy8gICAgdGhpcmQ6OmNvbXBhcmUgdGhlIHR4IFBFUiBpZiBwYWNrZXRzPjIwCisJCQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRpZmZlcmVuY2UgPjUlIHVzaW5nIHRoZSBiaWdnZXIgb25lCisJCQkvLworCQkJLy8gICAgZm91cnRoOmNvbXBhcmUgdGhlIFJYIFBFUiBpZiBwYWNrZXRzPjIwCisJCQkvLyAgICAgICAgICAgICAgICAgICAgaWYgUEVSIGRpZmZlcmVuY2UgPDUlCisJCQkvLyAgICAgICAgICAgICAgICAgICB1c2luZyBvbGQgYW50ZW5uYQorCQkJLy8KKwkJCS8vCisJCQlpZiAoYWJzKFJYUlNTSUFOVFtBTlQwXS1SWFJTU0lBTlRbQU5UMV0pID4gTVRPUEFSQV9SU1NJX1RIX0ZPUl9BTlRESVYoKSkvLz09PT1yc3NpX3RoCisJCQl7CisJCQkJaWYgKFJYUlNTSUFOVFtBTlQwXT5SWFJTU0lBTlRbQU5UMV0pCisJCQkJeworCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQwOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQxOworCQkJCX0KKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCJTZWxlY3QgYW50ZW5uYSBieSBSU1NJXG4iKSk7CisJCQkJI2VuZGlmCisJCQl9CisJCQllbHNlIGlmICAoYWJzKFR4UGt0UGVyQW50W0FOVDBdICsgRFRPX1J4X0luZm9bMF1bQU5UMF0tVHhQa3RQZXJBbnRbQU5UMV0tRFRPX1J4X0luZm9bMF1bQU5UMV0pPDUwKS8vPT09PT10b3RhbCBwYWNrZXRfdGgKKwkJCXsKKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCJUb3RhbCB0eC9yeCBpcyBjbG9zZVxuIikpOworCQkJCSNlbmRpZgorCQkJCWlmIChUeERvbWluYXRlKEFOVDApICYmIFR4RG9taW5hdGUoQU5UMSkpCisJCQkJeworCQkJCQlpZiAoKFR4UGt0UGVyQW50W0FOVDBdPjEwKSAmJiAoVHhQa3RQZXJBbnRbQU5UMV0+MTApKS8vPT09PXR4IHBhY2tldF90aAorCQkJCQl7CisJCQkJCQlXQl9QQ1JbQU5UMF09RGl2aWRlKFR4UGt0UGVyQW50W0FOVDBdKjEwMCxUeFBrdFJldHJ5UGVyQW50W0FOVDBdKTsKKwkJCQkJCVdCX1BDUltBTlQxXT1EaXZpZGUoVHhQa3RQZXJBbnRbQU5UMV0qMTAwLFR4UGt0UmV0cnlQZXJBbnRbQU5UMV0pOworCQkJCQkJaWYgKGFicyhXQl9QQ1JbQU5UMF0tV0JfUENSW0FOVDFdKT41KS8vIHR4IFBFUl90aAorCQkJCQkJeworCQkJCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJCQkJV0JERUJVRygoIkRlY2lkZSBieSBUeCBjb3JyZWN0IHJhdGVcbiIpKTsKKwkJCQkJCQkjZW5kaWYKKwkJCQkJCQlpZiAoV0JfUENSW0FOVDBdPldCX1BDUltBTlQxXSkKKwkJCQkJCQl7CisJCQkJCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQkJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDA7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQkJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDE7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRlY2lkZWFudGZsYWc9MDsKKwkJCQkJCQl1bnRvZ2dsZWNvdW50Kys7CisJCQkJCQkJTVRPX0FOVF9NQUMoKSA9IG9sZF9hbnRlbm5hWzBdOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJZGVjaWRlYW50ZmxhZz0wOworCQkJCQkJTVRPX0FOVF9NQUMoKSA9IG9sZF9hbnRlbm5hWzBdOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKChEVE9fUnhfSW5mb1swXVtBTlQwXT4xMCkmJihEVE9fUnhfSW5mb1swXVtBTlQxXT4xMCkpLy9yeCBwYWNrZXQgdGgKKwkJCQl7CisJCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJCVdCREVCVUcoKCJEZWNpZGUgYnkgUnhcbiIpKTsKKwkJCQkJI2VuZGlmCisJCQkJCWlmIChhYnMoRFRPX1J4X0luZm9bMF1bQU5UMF0gLSBEVE9fUnhfSW5mb1swXVtBTlQxXSk+NTApCisJCQkJCXsKKwkJCQkJCWlmIChEVE9fUnhfSW5mb1swXVtBTlQwXSA+IERUT19SeF9JbmZvWzBdW0FOVDFdKQorCQkJCQkJeworCQkJCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDE7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlkZWNpZGVhbnRmbGFnPTA7CisJCQkJCQl1bnRvZ2dsZWNvdW50Kys7CisJCQkJCQlNVE9fQU5UX01BQygpID0gb2xkX2FudGVubmFbMF07CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZGVjaWRlYW50ZmxhZz0wOworCQkJCQlNVE9fQU5UX01BQygpID0gb2xkX2FudGVubmFbMF07CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKFR4UGt0UGVyQW50W0FOVDBdK0RUT19SeF9JbmZvWzBdW0FOVDBdKT4oVHhQa3RQZXJBbnRbQU5UMV0rRFRPX1J4X0luZm9bMF1bQU5UMV0pKS8vdXNlIG1vcmUgcGFja2VrdHMKKwkJCXsKKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCJkZWNpZGUgYnkgdG90YWwgdHgvcnggOiBBTlQgMFxuIikpOworCQkJCSNlbmRpZgorCisJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQwOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoImRlY2lkZSBieSB0b3RhbCB0eC9yeCA6IEFOVCAxXG4iKSk7CisJCQkJI2VuZGlmCisJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQxOworCisJCQl9CisJCQkvL3RoaXMgaXMgZm9yY2UgYW50IHRvZ2dsZQorCQkJaWYgKGRlY2lkZWFudGZsYWc9PTEpCisJCQkJdW50b2dnbGVjb3VudD0wOworCisJCQl1bnRvZ2dsZWNvdW50PXVudG9nZ2xlY291bnQlNDsKKwkJCWlmICh1bnRvZ2dsZWNvdW50PT0zKSAvL2NoYW5nZSBhbnRlbm5hCisJCQkJTVRPX0FOVF9NQUMoKSA9ICgofm9sZF9hbnRlbm5hWzBdKSAmIDB4MSk7CisJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJV0JERUJVRygoIltISERUT106PT09PT09PT09PT09PT09PT09dW50b2dnbGUtY291bnQ9JWQiLHVudG9nZ2xlY291bnQpKTsKKwkJCSNlbmRpZgorCisKKworCisJCQkvL1BERUJVRygoIltISERUT10gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKkRUTyBFTkFCTEU9JWQiLE1UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpKSk7CisJCQlpZihNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSA9PSAxKQorCQkJeworCQkJCQlNVE9fQU5UX1NFTCgpID0gTVRPX0FOVF9NQUMoKTsKKwkJCQkJaGFsX3NldF9hbnRlbm5hX251bWJlcihNVE9fSEFMKCksIE1UT19BTlRfU0VMKCkpOworCQkJCQlMT0NBTF9BTlRFTk5BX05PKCkgPSBNVE9fQU5UX1NFTCgpOworCQkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCQlXQkRFQlVHKCgiW0hIRFRPXSA9PWRlY2lzaW9uPT0qKioqKioqYW50ZmxhZz0lZCoqKioqKioqKioqKioqKioqKnNlbGVjdGVkIGFudGVubmE9JWRcbiIsZGVjaWRlYW50ZmxhZyxNVE9fQU5UX1NFTCgpKSk7CisJCQkJCSNlbmRpZgorCQkJfQorCQkJaWYgKGRlY2lkZWFudGZsYWcpCisJCQl7CisJCQkJb2xkX2FudGVubmFbM109b2xkX2FudGVubmFbMl07Ly9zdG9yZSBhbnRlbm5hIGluZm8KKwkJCQlvbGRfYW50ZW5uYVsyXT1vbGRfYW50ZW5uYVsxXTsKKwkJCQlvbGRfYW50ZW5uYVsxXT1vbGRfYW50ZW5uYVswXTsKKwkJCQlvbGRfYW50ZW5uYVswXT0gTVRPX0FOVF9NQUMoKTsKKwkJCX0KKwkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQlXQkRFQlVHKCgiW0hIRFRPXToqKm9sZCBhbnRlbm5hPVslZF1bJWRdWyVkXVslZF1cbiIsb2xkX2FudGVubmFbMF0sb2xkX2FudGVubmFbMV0sb2xkX2FudGVubmFbMl0sb2xkX2FudGVubmFbM10pKTsKKwkJCSNlbmRpZgorCQkJaWYgKG9sZF9hbnRlbm5hWzBdIT1vbGRfYW50ZW5uYVsxXSkKKwkJCQlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj0wOworCQkJZWxzZSBpZiAob2xkX2FudGVubmFbMV0hPW9sZF9hbnRlbm5hWzJdKQorCQkJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTE7CisJCQllbHNlIGlmIChvbGRfYW50ZW5uYVsyXSE9b2xkX2FudGVubmFbM10pCisJCQkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9MjsKKwkJCWVsc2UKKwkJCQlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj00OworCisJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJV0JERUJVRygoIltISERUT106KipiYWNrIG9mZiB0aW1lcj0lZCIsQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXIpKTsKKwkJCSNlbmRpZgorCisJCQlSZXNldERUT19SeEluZm8oTVRPX0FOVF9NQUMoKSwgTVRPX0ZVTkNfSU5QVVRfREFUQSk7CisJCQlpZiAoQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9PTAgJiYgZGVjaWRlYW50ZmxhZykKKwkJCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfV0FJVDA7CisJCQllbHNlCisJCQkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX0lETEU7CisJCQlicmVhazsKKwl9CisKK30KKwordm9pZCBtdWx0aWFnYyhNVE9fRlVOQ19JTlBVVCwgdTggaGlnaF9nYWluX21vZGUgKQoreworCXMzMgkJcnNzaTsKKwlod19kYXRhX3QJKnBId0RhdGEgPSBNVE9fSEFMKCk7CisKKwlzbWVfZ2V0X3Jzc2koTVRPX0ZVTkNfSU5QVVRfREFUQSwgJnJzc2kpOworCisJaWYoIChSRl9XQl8yNDIgPT0gcEh3RGF0YS0+cGh5X3R5cGUpIHx8CisJCShSRl9XQl8yNDJfMSA9PSBwSHdEYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAorCXsKKwkJaWYgKGhpZ2hfZ2Fpbl9tb2RlPT0xKQorCQl7CisJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweGY4ZjUyMjMwKTsKKwkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDZDNDM0NDApOworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDBDLCAweEYyRjMyMjMyICk7IC8vIDk0MDkxNiAweGY4ZjUyMjMwICk7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMjAsIDB4MDRjYjM0NDAgKTsgLy8gOTQwOTE1IDB4MDZDNDM0NDAKKwkJfQorCQllbHNlIGlmIChoaWdoX2dhaW5fbW9kZT09MCkKKwkJeworCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgwQywgMHhFRUVFMDAwRCk7CisJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA2YzQxNDQwKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAwQywgMHhFRUVFMDAwRCApOworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDIwLCAweDA0Y2IxNDQwICk7IC8vIDk0MDkxNSAweDA2YzQxNDQwCisJCX0KKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT0FHQ10gKipyc3NpPSVkLCBoaWdoIGdhaW4gbW9kZT0lZCIsIHJzc2ksIGhpZ2hfZ2Fpbl9tb2RlKSk7CisJCSNlbmRpZgorCX0KK30KKwordm9pZCBUeFB3ckNvbnRyb2woTVRPX0ZVTkNfSU5QVVQpCit7CisgICAgczMyICAgICByc3NpOworCWh3X2RhdGFfdAkqcEh3RGF0YSA9IE1UT19IQUwoKTsKKworCXNtZV9nZXRfcnNzaShNVE9fRlVOQ19JTlBVVF9EQVRBLCAmcnNzaSk7CisJaWYoIChSRl9XQl8yNDIgPT0gcEh3RGF0YS0+cGh5X3R5cGUpIHx8CisJCShSRl9XQl8yNDJfMSA9PSBwSHdEYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAorCXsKKwkJc3RhdGljIHU4IGhpZ2hfZ2Fpbl9tb2RlOyAvL3RoaXMgaXMgZm9yIHdpbmJvbmQgUkYgc3dpdGNoIExOQQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgZGlmZmVyZW50IHJlZ2lzdGVyIHNldHRpbmcKKworCQlpZiAoaGlnaF9nYWluX21vZGU9PTEpCisJCXsKKwkJCWlmKCByc3NpID4gTVRPX0RBVEEoKS5SU1NJX2hpZ2ggKQorCQkJeworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4ZjhmNTIyMzApOworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDU1NDE2NDApOworCQkJCWhpZ2hfZ2Fpbl9tb2RlPTA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgwQywgMHhmOGY1MTgzMCk7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgyMCwgMHgwNTU0M0U0MCk7CisJCQkJaGlnaF9nYWluX21vZGU9MTsKKwkJCX0KKwkJfQorCQllbHNlIC8vaWYgKGhpZ2hfZ2Fpbl9tb2RlPT0wKQorCQl7CisJCQlpZiggcnNzaSA8IE1UT19EQVRBKCkuUlNTSV9sb3cgKQorCQkJeworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4ZjhmNTE4MzApOworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDU1NDNFNDApOworCQkJCWhpZ2hfZ2Fpbl9tb2RlPTE7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgwQywgMHhmOGY1MjIzMCk7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgyMCwgMHgwNTU0MTY0MCk7CisJCQkJaGlnaF9nYWluX21vZGU9MDsKKwkJCX0KKwkJfQorCisJCS8vIEFsd2F5cyBoaWdoIGdhaW4gMjAwNTEwMTQuIFVzaW5nIHRoZSBpbml0aWFsIHZhbHVlIG9ubHkuCisJCW11bHRpYWdjKE1UT19GVU5DX0lOUFVUX0RBVEEsIGhpZ2hfZ2Fpbl9tb2RlKTsKKwl9Cit9CisKKwordTggQ2FsY05ld1JhdGUoTVRPX0ZVTkNfSU5QVVQsIHU4IG9sZF9yYXRlLCB1MzIgcmV0cnlfY250LCB1MzIgdHhfZnJhZ19jbnQpCit7CisJaW50IGk7CisJdTggbmV3X3JhdGU7CisgICAgdTMyIHJldHJ5X3JhdGU7CisJaW50IFR4VGhyb3VwdXQxLCBUeFRocm91cHV0MiwgVHhUaHJvdXB1dDMsIEJlc3RUaHJvdXBodDsKKworCWlmKHR4X2ZyYWdfY250IDwgTVRPUEFSQV9UWENPVU5UX1RIX0ZPUl9DQUxDX1JBVEUoKSkgLy90b28gZmV3IHBhY2tldHMgdHJhbnNtaXQKKwl7CisJCXJldHVybiAweGZmOworCX0KKwlyZXRyeV9yYXRlID0gRGl2aWRlKHJldHJ5X2NudCAqIDEwMCwgdHhfZnJhZ19jbnQpOworCisJaWYocmV0cnlfcmF0ZSA+IDkwKSByZXRyeV9yYXRlID0gOTA7IC8vYWx3YXlzIHRydW5jYXRlIHRvIDkwJSBkdWUgdG8gbG9va3VwIHRhYmxlIHNpemUKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCIjIyMjIyBDdXJyZW50IGxldmVsID0lZCwgUmV0cnkgY291bnQgPSVkLCBGcmFnIGNvdW50ID0lZFxuIiwKKwkJCQkJCW9sZF9yYXRlLCByZXRyeV9jbnQsIHR4X2ZyYWdfY250KSk7CisJV0JERUJVRygoIiojIyogUmV0cnkgcmF0ZSA9JWQsIHRocm91Z2hwdXQgPSVkXG4iLAorCQkJCQkJcmV0cnlfcmF0ZSwgUmF0ZV9QRVJfVEJMW3JldHJ5X3JhdGVdW29sZF9yYXRlXSkpOworCVdCREVCVUcoKCJUeFJhdGVSZWMudHhfcmF0ZSA9JWQsIFJldHJ5IHJhdGUgPSAlZCwgdGhyb3VnaHB1dCA9ICVkXG4iLAorCQkJCQkJVHhSYXRlUmVjLnR4X3JhdGUsIFR4UmF0ZVJlYy50eF9yZXRyeV9yYXRlLAorCQkJCQkJUmF0ZV9QRVJfVEJMW1R4UmF0ZVJlYy50eF9yZXRyeV9yYXRlXVtMZXZlbDJQZXJUYmxbVHhSYXRlUmVjLnR4X3JhdGVdXSkpOworCVdCREVCVUcoKCJvbGRfcmF0ZS0xID0lZCwgUmV0cnkgcmF0ZSA9ICVkLCB0aHJvdWdocHV0ID0gJWRcbiIsCisJCQkJCQlvbGRfcmF0ZS0xLCByZXRyeXJhdGVfcmVjW29sZF9yYXRlLTFdLAorCQkJCQkJUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUtMV1dW29sZF9yYXRlLTFdKSk7CisJV0JERUJVRygoIm9sZF9yYXRlKzEgPSVkLCBSZXRyeSByYXRlID0gJWQsIHRocm91Z2hwdXQgPSAlZFxuIiwKKwkJCQkJCW9sZF9yYXRlKzEsIHJldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0sCisJCQkJCQlSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXV1bb2xkX3JhdGUrMV0pKTsKKwkjZW5kaWYKKworCS8vZm9sbG93aW5nIGlzIGZvciByZWNvcmQgdGhlIHJldHJ5IHJhdGUgYXQgdGhlIGRpZmZlcmVudCBkYXRhIHJhdGUKKwlpZiAoYWJzKHJldHJ5X3JhdGUtcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZV0pPDUwKS8vLS0tdGhlIHBlciBUSAorCQlyZXRyeXJhdGVfcmVjW29sZF9yYXRlXSA9IHJldHJ5X3JhdGU7IC8vdXBkYXRlIHJldHJ5IHJhdGUKKwllbHNlCisJeworCQlmb3IgKGk9MDtpPE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsO2krKykgLy9yZXNldCBhbGwgcmV0cnkgcmF0ZQorCQkJcmV0cnlyYXRlX3JlY1tpXT0wOworCQlyZXRyeXJhdGVfcmVjW29sZF9yYXRlXSA9IHJldHJ5X3JhdGU7CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJSZXNldCByZXRyeSByYXRlIHRhYmxlXG4iKSk7CisJCSNlbmRpZgorCX0KKworCWlmKFR4UmF0ZVJlYy50eF9yYXRlID4gb2xkX3JhdGUpICAgLy9EZWNyZWFzZSBUeCBSYXRlCisJeworCQlUeFRocm91cHV0MSA9IFJhdGVfUEVSX1RCTFtUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW1R4UmF0ZVJlYy50eF9yYXRlXV07CisJCVR4VGhyb3VwdXQyID0gUmF0ZV9QRVJfVEJMW3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtvbGRfcmF0ZV1dOworCQlpZihUeFRocm91cHV0MSA+IFR4VGhyb3VwdXQyKQorCQl7CisJCQluZXdfcmF0ZSA9IFR4UmF0ZVJlYy50eF9yYXRlOworCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDE7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXdfcmF0ZSA9IG9sZF9yYXRlOworCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDI7CisJCX0KKwkJaWYoKG9sZF9yYXRlID4gMCkgJiYocmV0cnlfcmF0ZT5NVE9QQVJBX1RYUkFURV9ERUNfVEgoKSkpICAgLy9NaW4gUmF0ZQorCQl7CisJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlLTFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUtMV1dOworCQkJaWYoQmVzdFRocm91cGh0IDwgVHhUaHJvdXB1dDMpCisJCQl7CisJCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZSAtIDE7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiLS0tLS0tLS1cbiIpKTsKKwkJCQkjZW5kaWYKKwkJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MzsKKwkJCX0KKwkJfQorCX0KKwllbHNlIGlmKFR4UmF0ZVJlYy50eF9yYXRlIDwgb2xkX3JhdGUpICAvL0luY3JlYXNlIFR4IFJhdGUKKwl7CisJCVR4VGhyb3VwdXQxID0gUmF0ZV9QRVJfVEJMW1R4UmF0ZVJlYy50eF9yZXRyeV9yYXRlXVtMZXZlbDJQZXJUYmxbVHhSYXRlUmVjLnR4X3JhdGVdXTsKKwkJVHhUaHJvdXB1dDIgPSBSYXRlX1BFUl9UQkxbcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlXV07CisJCWlmKFR4VGhyb3VwdXQxID4gVHhUaHJvdXB1dDIpCisJCXsKKwkJCW5ld19yYXRlID0gVHhSYXRlUmVjLnR4X3JhdGU7CisJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5ld19yYXRlID0gb2xkX3JhdGU7CisJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MjsKKwkJfQorCQlpZiAoKG9sZF9yYXRlIDwgTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgLSAxKSYmKHJldHJ5X3JhdGU8TVRPUEFSQV9UWFJBVEVfSU5DX1RIKCkpKQorCQl7CisJCQkvL1R4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV1dW0xldmVsMlBlclRibFtvbGRfcmF0ZSsxXV07CisJCQlpZiAocmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXSA+IE1UT1BBUkFfVFhSRVRSWVJBVEVfUkVEVUNFKCkpCisJCQkJVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXS1NVE9QQVJBX1RYUkVUUllSQVRFX1JFRFVDRSgpXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJZWxzZQorCQkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV1dW0xldmVsMlBlclRibFtvbGRfcmF0ZSsxXV07CisJCQlpZihCZXN0VGhyb3VwaHQgPCBUeFRocm91cHV0MykKKwkJCXsKKwkJCQluZXdfcmF0ZSA9IG9sZF9yYXRlICsgMTsKKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCIrKysrKysrKysrXG4iKSk7CisJCQkJI2VuZGlmCisJCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDM7CisJCQl9CisJCX0KKwl9CisJZWxzZSAgLy9UeCBSYXRlIG5vIGNoYW5nZQorCXsKKwkJVHhUaHJvdXB1dDIgPSBSYXRlX1BFUl9UQkxbcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlXV07CisJCW5ld19yYXRlID0gb2xkX3JhdGU7CisJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQyOworCisJCWlmIChyZXRyeV9yYXRlIDxNVE9QQVJBX1RYUkFURV9FUV9USCgpKSAgICAvL3RoIGZvciBjaGFuZ2UgaGlnaGVyIHJhdGUKKwkJeworCQkJaWYob2xkX3JhdGUgPCBNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCAtIDEpCisJCQl7CisJCQkJLy9UeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJCWlmIChyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdID4gTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKSkKKwkJCQkJVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXS1NVE9QQVJBX1RYUkVUUllSQVRFX1JFRFVDRSgpXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJCWVsc2UKKwkJCQkJVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCQlpZihCZXN0VGhyb3VwaHQgPCBUeFRocm91cHV0MykKKwkJCQl7CisJCQkJCW5ld19yYXRlID0gb2xkX3JhdGUgKyAxOworCQkJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MzsKKwkJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQkJV0JERUJVRygoIj0rKysrKysrKysrXG4iKSk7CisJCQkJCSNlbmRpZgorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCWlmKG9sZF9yYXRlID4gMCkgICAvL01pbiBSYXRlCisJCXsKKwkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUtMV1dW0xldmVsMlBlclRibFtvbGRfcmF0ZS0xXV07CisJCQlpZihCZXN0VGhyb3VwaHQgPCBUeFRocm91cHV0MykKKwkJCXsKKwkJCQluZXdfcmF0ZSA9IG9sZF9yYXRlIC0gMTsKKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCI9LS0tLS0tLS1cbiIpKTsKKwkJCQkjZW5kaWYKKwkJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MzsKKwkJCX0KKwkJfQorCX0KKworCWlmICghTE9DQUxfSVNfSUJTU19NT0RFKCkpCisJeworCW1heF9yc3NpX3JhdGUgPSBHZXRNYXhSYXRlTGV2ZWxGcm9tUlNTSSgpOworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIltNVE9dOlJTU0kyUmF0ZT0lZFxuIiwgTVRPX0RhdGFfUmF0ZV9UYmxbbWF4X3Jzc2lfcmF0ZV0pKTsKKwkjZW5kaWYKKwlpZihuZXdfcmF0ZSA+IG1heF9yc3NpX3JhdGUpCisJCW5ld19yYXRlID0gbWF4X3Jzc2lfcmF0ZTsKKwl9CisKKwkvL3NhdmUgbmV3IHJhdGU7CisJVHhSYXRlUmVjLnR4X3JhdGUgPSBvbGRfcmF0ZTsKKwlUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZSA9ICh1OCkgcmV0cnlfcmF0ZTsKKwlUeFJldHJ5UmF0ZSA9IHJldHJ5X3JhdGU7CisJcmV0dXJuIG5ld19yYXRlOworfQorCit2b2lkIFNtb290aFJTU0koczMyIG5ld19yc3NpKQoreworCVJTU0lTbW9vdGhlZCA9IFJTU0lTbW9vdGhlZCArIG5ld19yc3NpIC0gUlNTSUJ1ZltSU1NJQnVmSW5kZXhdOworCVJTU0lCdWZbUlNTSUJ1ZkluZGV4XSA9IG5ld19yc3NpOworCVJTU0lCdWZJbmRleCA9IChSU1NJQnVmSW5kZXggKyAxKSAlIDEwOworfQorCit1OCBHZXRNYXhSYXRlTGV2ZWxGcm9tUlNTSSh2b2lkKQoreworCXU4IGk7CisJdTggVHhSYXRlOworCisJZm9yKGk9MDtpPFJTU0kyUkFURV9TSVpFO2krKykKKwl7CisJCWlmKFJTU0lTbW9vdGhlZCA+IFJTU0kyUmF0ZVRibFtpXS5SU1NJKQorCQkJYnJlYWs7CisJfQorCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIltNVE9dOlJTU0k9JWRcbiIsIERpdmlkZShSU1NJU21vb3RoZWQsIDEwKSkpOworCSNlbmRpZgorCWlmKGkgPCBSU1NJMlJBVEVfU0laRSkKKwkJVHhSYXRlID0gUlNTSTJSYXRlVGJsW2ldLlR4UmF0ZTsKKwllbHNlCisJCVR4UmF0ZSA9IDI7ICAvL2RpdmlkZWQgYnkgMiA9IDFNYnBzCisKKwlmb3IoaT1NVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbC0xO2k+MDtpLS0pCisJeworCQlpZihUeFJhdGUgPj1NVE9fRGF0YV9SYXRlX1RibFtpXSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgICAgSWYgd2UgZW5hYmxlIERUTywgd2Ugd2lsbCBpZ25vcmUgdGhlIHR4IGNvdW50IHdpdGggZGlmZmVyZW50IHR4IHJhdGUgZnJvbQorLy8gICAgICBEVE8gcmF0ZS4gVGhpcyBpcyBiZWNhdXNlIHdoZW4gd2UgYWRqdXN0IERUTyB0eCByYXRlLCB0aGVyZSBjb3VsZCBiZSBzb21lCisvLyAgICAgIHBhY2tldHMgaW4gdGhlIHR4IHF1ZXVlIHdpdGggcHJldmlvdXMgdHggcmF0ZQordm9pZCBNVE9fU2V0VHhDb3VudChNVE9fRlVOQ19JTlBVVCwgdTggdHhfcmF0ZSwgdTggaW5kZXgpCit7CisJTVRPX1RYRkxPV0NPVU5UKCkrKzsKKwlpZiAoKE1UT19FTkFCTEU9PTEpICYmIChNVE9fUkFURV9DSEFOR0VfRU5BQkxFKCk9PTEpKQorCXsKKwkJaWYodHhfcmF0ZSA9PSBNVE9fREFUQV9SQVRFKCkpCisJCXsKKwkJCWlmIChpbmRleCA9PSAwKQorCQkJeworCQkJCWlmIChib1NwYXJzZVR4VHJhZmZpYykKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSBNVE9QQVJBX1BFUklPRElDX0NIRUNLX0NZQ0xFKCk7CisJCQkJZWxzZQorCQkJCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IDE7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGluZGV4PDgpCisJCQkJeworCQkJCQlNVE9fSEFMKCktPmR0b190eF9yZXRyeV9jb3VudCArPSBpbmRleDsKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSAoaW5kZXgrMSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IDc7CisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gNzsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZihNVE9fREFUQV9SQVRFKCk+NDggJiYgdHhfcmF0ZSA9PTQ4KQorCQl7Ly9BTEZSRUQKKwkJCWlmIChpbmRleDwzKSAvL2ZvciByZWR1Y2lpbmcgZGF0YSByYXRlIHNjaGVtZSAsCisJCQkJICAgICAgICAgLy9kbyBub3QgY2FsY3UgZGlmZmVyZW50IGRhdGEgcmF0ZQorCQkJCQkJIC8vMyBpcyB0aGUgcmVkdWNpbmcgZGF0YSByYXRlIGF0IHJldHJ5CisJCQl7CisJCQkJTVRPX0hBTCgpLT5kdG9fdHhfcmV0cnlfY291bnQgKz0gaW5kZXg7CisJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSAoaW5kZXgrMSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJTVRPX0hBTCgpLT5kdG9fdHhfcmV0cnlfY291bnQgKz0gMzsKKwkJCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IDM7CisJCQl9CisKKwkJfQorCX0KKwllbHNlCisJeworCQlNVE9fSEFMKCktPmR0b190eF9yZXRyeV9jb3VudCArPSBpbmRleDsKKwkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSAoaW5kZXgrMSk7CisJfQorCVRvdGFsVHhQa3QgKys7CisJVG90YWxUeFBrdFJldHJ5ICs9IChpbmRleCsxKTsKKworCVBlcmlvZFRvdGFsVHhQa3QgKys7CisJUGVyaW9kVG90YWxUeFBrdFJldHJ5ICs9IChpbmRleCsxKTsKK30KKwordTggTVRPX0dldFR4RmFsbGJhY2tSYXRlKE1UT19GVU5DX0lOUFVUKQoreworCXJldHVybiBNVE9fREFUQV9GQUxMQkFDS19SQVRFKCk7Cit9CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNVE9fVHhGYWlsZWQgLS0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBGYWlsdXJlIG9mIHRyYW5zbWl0dGluZyBhIHBhY2tldCBpbmRpY2F0ZXMgdGhhdCBjZXJ0YWluIE1UTyBwYXJtZXRlcnMKKy8vICAgIG1heSBuZWVkIHRvIGJlIGFkanVzdGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIE5JQyBqdXN0IGZhaWxlZAorLy8gICAgdG8gdHJhbnNtaXQgYSBwYWNrZXQgb3Igd2hlbiBNU0RVTGlmZVRpbWUgZXhwaXJlZC4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgQWRhcHRlciAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIE1pbmlwb3J0IEFkYXB0ZXIgQ29udGV4dAorLy8KKy8vICBSZXR1cm4gVmFsdWU6CisvLyAgICBOb25lCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgTVRPX1R4RmFpbGVkKE1UT19GVU5DX0lOUFVUKQoreworCXJldHVybjsKK30KKworaW50IERpdmlkZShpbnQgYSwgaW50IGIpCit7CisJaWYgKGI9PTApIGI9MTsKKwlyZXR1cm4gYS9iOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3OTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oCkBAIC0wLDAgKzEsMjY1IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTVRPLkgKKy8vCisvLyBSZXZpc2lvbiBoaXN0b3J5CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gICAgICAgICAgMjAwMzAxMTAgICAgVU4yMCBQZXRlIENoYW8KKy8vICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWwgUmVsZWFzZQorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMyBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmbmRlZiBfX01UT19IX18KKyNkZWZpbmUgX19NVE9fSF9fCisKKyNkZWZpbmUgTVRPX0RFRkFVTFRfVEhfQ05UICAgICAgICAgICAgICA1CisjZGVmaW5lIE1UT19ERUZBVUxUX1RIX1NRMyAgICAgICAgICAgICAgMTEyICAvL09MRCBJUyAxMyByZWZlcmVuY2UgSm9oblh1CisjZGVmaW5lIE1UT19ERUZBVUxUX1RIX0lETEVfU0xPVCAgICAgICAgMTUKKyNkZWZpbmUgTVRPX0RFRkFVTFRfVEhfUFJfSU5URVJGICAgICAgICAzMAorI2RlZmluZSBNVE9fREVGQVVMVF9UTVJfQUdJTkcgICAgICAgICAgIDI1ICAvLyB1bml0OiBzbG90IHRpbWUgIDEwIHJlZmVyZW5jZSBKb2huWHUKKyNkZWZpbmUgTVRPX0RFRkFVTFRfVE1SX1BFUklPRElDICAgICAgICA1ICAgLy8gdW5pdDogc2xvdCB0aW1lCisKKyNkZWZpbmUgTVRPX0FOVEVOTkFfRElWRVJTSVRZX09GRiAgICAgICAwCisjZGVmaW5lIE1UT19BTlRFTk5BX0RJVkVSU0lUWV9PTiAgICAgICAgMQorCisvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorLy8jZGVmaW5lIE1UT19QUkVBTUJMRV9MT05HICAgICAgICAgICAgICAgMAorLy8jZGVmaW5lIE1UT19QUkVBTUJMRV9TSE9SVCAgICAgICAgICAgICAgMQorI2RlZmluZSBNVE9fUFJFQU1CTEVfTE9ORyAgICAgICAgICAgICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9MT05HCisjZGVmaW5lIE1UT19QUkVBTUJMRV9TSE9SVCAgICAgICAgICAgICAgV0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JUCisKK3R5cGVkZWYgZW51bSB7CisgICAgVE9HR0xFX1NUQVRFX0lETEUgICAgICAgICAgICAgPSAwLAorICAgIFRPR0dMRV9TVEFURV9XQUlUMCAgICAgICAgICAgID0gMSwKKyAgICBUT0dHTEVfU1RBVEVfV0FJVDEgICAgICAgICAgICA9IDIsCisgICAgVE9HR0xFX1NUQVRFX01BS0VERVNJU0lPTiAgICAgPSAzLAorCVRPR0dMRV9TVEFURV9CS09GRiAgICAgICAgICAgID0gNAorfSBUT0dHTEVfU1RBVEU7CisKK3R5cGVkZWYgZW51bSB7CisgICAgUkFURV9DSEdTVEFURV9JRExFICAgICAgICAgPSAwLAorICAgIFJBVEVfQ0hHU1RBVEVfQ0FMQ1VMQVRFICAgID0gMSwKKyAgICBSQVRFX0NIR1NUQVRFX0JBQ0tPRkYJICAgPSAyCit9IFRYX1JBVEVfUkVEVUNUSU9OX1NUQVRFOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIHN0cnVjdCBfTVRPUGFyYW1ldGVycyAtLQorLy8KKy8vICAgRGVmaW5lcyB0aGUgcGFyYW1ldGVycyB1c2VkIGluIHRoZSBNQUMgVGhyb3VnaHB1dCBPcHRpbWl6YXRpb24gYWxnb3JpdGhtCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgc3RydWN0IF9NVE9fUEFSQU1FVEVSUworeworCXU4ICAgICAgVGhfRml4YW50OworCXU4ICAgICAgVGhfQ250OworCXU4ICAgICAgVGhfU1EzOworCXU4ICAgICAgVGhfSWRsZVNsb3Q7CisKKwl1MTYgICAgIFRtcl9BZ2luZzsKKwl1OCAgICAgIFRoX1BySW50ZXJmOworCXU4ICAgICAgVG1yX1BlcmlvZGljOworCisJLy8tLS0tLS0tLS0gICAgICAgIHdrY2hlbiBhZGRlZCAgICAgIC0tLS0tLS0tLS0tLS0KKwl1MzIJCVR4Rmxvd0NvdW50OwkvL3RvIGp1ZGdlIHdoYXQga2luZCB0aGUgdHggZmxvdyhzcGFyc2Ugb3IgYnVzeSkgaXMKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJLy8tLS0tLS0tLS0gRFRPIHRocmVzaG9sZCBwYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0KKwl1MTYJCURUT19QZXJpb2RpY0NoZWNrQ3ljbGU7CisJdTE2CQlEVE9fUnNzaVRoRm9yQW50RGl2OworCisJdTE2CQlEVE9fVHhDb3VudFRoRm9yQ2FsY05ld1JhdGU7CisJdTE2CQlEVE9fVHhSYXRlSW5jVGg7CisKKwl1MTYJCURUT19UeFJhdGVEZWNUaDsKKwl1MTYJCURUT19UeFJhdGVFcVRoOworCisJdTE2CQlEVE9fVHhSYXRlQmFja09mZjsKKwl1MTYJCURUT19UeFJldHJ5UmF0ZVJlZHVjZTsKKworCXUxNgkJRFRPX1R4UG93ZXJJbmRleDsJLy8wIH4gMzEKKwl1MTYJCXJlc2VydmVkXzE7CisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXU4ICAgICAgUG93ZXJDaGFuZ2VFbmFibGU7CisJdTggICAgICBBbnREaXZlcnNpdHlFbmFibGU7CisJdTggICAgICBBbnRfbWFjOworCXU4ICAgICAgQW50X2RpdjsKKworCXU4ICAgICAgQ0NBX01vZGU7CisJdTggICAgICBDQ0FfTW9kZV9TZXR1cDsKKwl1OCAgICAgIFByZWFtYmxlX1R5cGU7CisJdTggICAgICBQcmVhbWJsZUNoYW5nZUVuYWJsZTsKKworCXU4ICAgICAgRGF0YVJhdGVMZXZlbDsKKwl1OCAgICAgIERhdGFSYXRlQ2hhbmdlRW5hYmxlOworCXU4ICAgICAgRnJhZ1RocmVzaG9sZExldmVsOworCXU4ICAgICAgRnJhZ1RocmVzaG9sZENoYW5nZUVuYWJsZTsKKworCXUxNiAgICAgUlRTVGhyZXNob2xkOworCXUxNiAgICAgUlRTVGhyZXNob2xkX1NldHVwOworCisJdTMyICAgICBBdmdJZGxlU2xvdDsKKwl1MzIgICAgIFByX0ludGVyZjsKKwl1MzIgICAgIEF2Z0dhcEJ0d25JbnRlcmY7CisKKwl1OAkgICBSVFNDaGFuZ2VFbmFibGU7CisJdTggICAgICBBbnRfc2VsOworCXU4ICAgICAgYWdpbmdfdGltZW91dDsKKwl1OAkgICByZXNlcnZlZF8yOworCisJdTMyICAgICBDbnRfQW50WzJdOworCXUzMiAgICAgU1FfQW50WzJdOworCisvLyAyMDA0MDUxMCByZW1vdmUgZnJvbSBnbG9iZSB2YWlyYWJsZQorCXUzMiAgICAgICAgICAgICAgICAgICAgIFRtckNudDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBCYWNrb2ZmVG1yOworCVRPR0dMRV9TVEFURSAgICAgICAgICAgIFRvZ2dsZVN0YXRlOworCVRYX1JBVEVfUkVEVUNUSU9OX1NUQVRFIFR4UmF0ZVJlZHVjdGlvblN0YXRlOworCisJdTggICAgICAgICAgICAgICAgICAgICAgTGFzdF9SYXRlOworCXU4ICAgICAgICAgICAgICAgICAgICAgIENvX2VmZmljZW50OworCXU4CQlGYWxsYmFja1JhdGVMZXZlbDsKKwl1OAkJT2ZkbVJhdGVMZXZlbDsKKworCXU4CQlSYXRlUG9saWN5OworCXU4CQlyZXNlcnZlZF8zWzNdOworCisJLy8gRm9yIFJTU0kgdHVybmluZworCXMzMgkJUlNTSV9oaWdoOworCXMzMgkJUlNTSV9sb3c7CisKK30gTVRPX1BBUkFNRVRFUlMsICpQTVRPX1BBUkFNRVRFUlM7CisKKworI2RlZmluZSBNVE9fRlVOQ19JTlBVVCAgICAgICAgICAgICAgUFdCMzJfQURBUFRFUglBZGFwdGVyCisjZGVmaW5lIE1UT19GVU5DX0lOUFVUX0RBVEEgICAgICAgICBBZGFwdGVyCisjZGVmaW5lIE1UT19EQVRBKCkgICAgICAgICAgICAgICAgICAoQWRhcHRlci0+c010b1BhcmEpCisjZGVmaW5lIE1UT19IQUwoKSAgICAgICAgICAgICAgICAgICAoJkFkYXB0ZXItPnNId0RhdGEpCisjZGVmaW5lIE1UT19TRVRfUFJFQU1CTEVfVFlQRSh4KSAgICAvLyAyMDA0MDUxMSBUdXJibyBtYXJrIExNX1BSRUFNQkxFX1RZUEUoJnBjb3JlX2RhdGEtPmxtX2RhdGEpID0gKHgpCisjZGVmaW5lIE1UT19FTkFCTEUJCQkJCShBZGFwdGVyLT5zTG9jYWxQYXJhLlR4UmF0ZU1vZGUgPT0gUkFURV9BVVRPKQorI2RlZmluZSBNVE9fVFhQT1dFUl9GUk9NX0VFUFJPTQkJKEFkYXB0ZXItPnNId0RhdGEuUG93ZXJJbmRleEZyb21FRVBST00pCisjZGVmaW5lIExPQ0FMX0FOVEVOTkFfTk8oKQkJCShBZGFwdGVyLT5zTG9jYWxQYXJhLmJBbnRlbm5hTm8pCisjZGVmaW5lIExPQ0FMX0lTX0NPTk5FQ1RFRCgpCQkoQWRhcHRlci0+c0xvY2FsUGFyYS53Q29ubmVjdGVkU1RBaW5kZXggIT0gMCkKKyNkZWZpbmUgTE9DQUxfSVNfSUJTU19NT0RFKCkJCShBZGFwdGVyLT5hc0JTU0Rlc2NyaXB0RWxlbWVudFtBZGFwdGVyLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleF0uYkJzc1R5cGUgPT0gSUJTU19ORVQpCisjZGVmaW5lIE1UT19JTklUVFhSQVRFX01PREUJCQkoQWRhcHRlci0+c0h3RGF0YS5Tb2Z0d2FyZVNldCYweDIpCS8vYml0IDEKKy8vIDIwMDQwNTEwIFR1cmJvIGFkZAorI2RlZmluZSBNVE9fVE1SX0NOVCgpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5UbXJDbnQKKyNkZWZpbmUgTVRPX1RPR0dMRV9TVEFURSgpICAgICAgICAgIE1UT19EQVRBKCkuVG9nZ2xlU3RhdGUKKyNkZWZpbmUgTVRPX1RYX1JBVEVfUkVEVUNUSU9OX1NUQVRFKCkgTVRPX0RBVEEoKS5UeFJhdGVSZWR1Y3Rpb25TdGF0ZQorI2RlZmluZSBNVE9fQkFDS09GRl9UTVIoKSAgICAgICAgICAgTVRPX0RBVEEoKS5CYWNrb2ZmVG1yCisjZGVmaW5lIE1UT19MQVNUX1JBVEUoKSAgICAgICAgICAgICBNVE9fREFUQSgpLkxhc3RfUmF0ZQorI2RlZmluZSBNVE9fQ09fRUZGSUNFTlQoKSAgICAgICAgICAgTVRPX0RBVEEoKS5Db19lZmZpY2VudAorCisjZGVmaW5lIE1UT19USF9DTlQoKSAgICAgICAgICAgICAgICBNVE9fREFUQSgpLlRoX0NudAorI2RlZmluZSBNVE9fVEhfU1EzKCkgICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5UaF9TUTMKKyNkZWZpbmUgTVRPX1RIX0lETEVfU0xPVCgpICAgICAgICAgIE1UT19EQVRBKCkuVGhfSWRsZVNsb3QKKyNkZWZpbmUgTVRPX1RIX1BSX0lOVEVSRigpICAgICAgICAgIE1UT19EQVRBKCkuVGhfUHJJbnRlcmYKKworI2RlZmluZSBNVE9fVE1SX0FHSU5HKCkgICAgICAgICAgICAgTVRPX0RBVEEoKS5UbXJfQWdpbmcKKyNkZWZpbmUgTVRPX1RNUl9QRVJJT0RJQygpICAgICAgICAgIE1UT19EQVRBKCkuVG1yX1BlcmlvZGljCisKKyNkZWZpbmUgTVRPX1BPV0VSX0NIQU5HRV9FTkFCTEUoKSAgIE1UT19EQVRBKCkuUG93ZXJDaGFuZ2VFbmFibGUKKyNkZWZpbmUgTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkgIEFkYXB0ZXItPnNMb2NhbFBhcmEuYm9BbnRlbm5hRGl2ZXJzaXR5CisjZGVmaW5lIE1UT19BTlRfTUFDKCkgICAgICAgICAgICAgICBNVE9fREFUQSgpLkFudF9tYWMKKyNkZWZpbmUgTVRPX0FOVF9ESVZFUlNJVFkoKSAgICAgICAgIE1UT19EQVRBKCkuQW50X2RpdgorI2RlZmluZSBNVE9fQ0NBX01PREUoKSAgICAgICAgICAgICAgTVRPX0RBVEEoKS5DQ0FfTW9kZQorI2RlZmluZSBNVE9fQ0NBX01PREVfU0VUVVAoKSAgICAgICAgTVRPX0RBVEEoKS5DQ0FfTW9kZV9TZXR1cAorI2RlZmluZSBNVE9fUFJFQU1CTEVfVFlQRSgpICAgICAgICAgTVRPX0RBVEEoKS5QcmVhbWJsZV9UeXBlCisjZGVmaW5lIE1UT19QUkVBTUJMRV9DSEFOR0VfRU5BQkxFKCkgICAgICAgICBNVE9fREFUQSgpLlByZWFtYmxlQ2hhbmdlRW5hYmxlCisKKyNkZWZpbmUgTVRPX1JBVEVfTEVWRUwoKSAgICAgICAgICAgIE1UT19EQVRBKCkuRGF0YVJhdGVMZXZlbAorI2RlZmluZSBNVE9fRkFMTEJBQ0tfUkFURV9MRVZFTCgpCU1UT19EQVRBKCkuRmFsbGJhY2tSYXRlTGV2ZWwKKyNkZWZpbmUgTVRPX09GRE1fUkFURV9MRVZFTCgpCQlNVE9fREFUQSgpLk9mZG1SYXRlTGV2ZWwKKyNkZWZpbmUgTVRPX1JBVEVfQ0hBTkdFX0VOQUJMRSgpICAgIE1UT19EQVRBKCkuRGF0YVJhdGVDaGFuZ2VFbmFibGUKKyNkZWZpbmUgTVRPX0ZSQUdfVEhfTEVWRUwoKSAgICAgICAgIE1UT19EQVRBKCkuRnJhZ1RocmVzaG9sZExldmVsCisjZGVmaW5lIE1UT19GUkFHX0NIQU5HRV9FTkFCTEUoKSAgICBNVE9fREFUQSgpLkZyYWdUaHJlc2hvbGRDaGFuZ2VFbmFibGUKKyNkZWZpbmUgTVRPX1JUU19USFJFU0hPTEQoKSAgICAgICAgIE1UT19EQVRBKCkuUlRTVGhyZXNob2xkCisjZGVmaW5lIE1UT19SVFNfQ0hBTkdFX0VOQUJMRSgpICAgICBNVE9fREFUQSgpLlJUU0NoYW5nZUVuYWJsZQorI2RlZmluZSBNVE9fUlRTX1RIUkVTSE9MRF9TRVRVUCgpICAgTVRPX0RBVEEoKS5SVFNUaHJlc2hvbGRfU2V0dXAKKworI2RlZmluZSBNVE9fQVZHX0lETEVfU0xPVCgpICAgICAgICAgTVRPX0RBVEEoKS5BdmdJZGxlU2xvdAorI2RlZmluZSBNVE9fUFJfSU5URVJGKCkgICAgICAgICAgICAgTVRPX0RBVEEoKS5Qcl9JbnRlcmYKKyNkZWZpbmUgTVRPX0FWR19HQVBfQlRXTl9JTlRFUkYoKSAgIE1UT19EQVRBKCkuQXZnR2FwQnR3bkludGVyZgorCisjZGVmaW5lIE1UT19BTlRfU0VMKCkgICAgICAgICAgICAgICBNVE9fREFUQSgpLkFudF9zZWwKKyNkZWZpbmUgTVRPX0NOVF9BTlQoeCkgICAgICAgICAgICAgIE1UT19EQVRBKCkuQ250X0FudFsoeCldCisjZGVmaW5lIE1UT19TUV9BTlQoeCkgICAgICAgICAgICAgICBNVE9fREFUQSgpLlNRX0FudFsoeCldCisjZGVmaW5lIE1UT19BR0lOR19USU1FT1VUKCkgICAgICAgICBNVE9fREFUQSgpLmFnaW5nX3RpbWVvdXQKKworCisjZGVmaW5lIE1UT19UWEZMT1dDT1VOVCgpCQkJTVRPX0RBVEEoKS5UeEZsb3dDb3VudAorLy8tLS0tLS0tLS0gRFRPIHRocmVzaG9sZCBwYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0KKyNkZWZpbmUJTVRPUEFSQV9QRVJJT0RJQ19DSEVDS19DWUNMRSgpCQlNVE9fREFUQSgpLkRUT19QZXJpb2RpY0NoZWNrQ3ljbGUKKyNkZWZpbmUJTVRPUEFSQV9SU1NJX1RIX0ZPUl9BTlRESVYoKQkJTVRPX0RBVEEoKS5EVE9fUnNzaVRoRm9yQW50RGl2CisjZGVmaW5lCU1UT1BBUkFfVFhDT1VOVF9USF9GT1JfQ0FMQ19SQVRFKCkJTVRPX0RBVEEoKS5EVE9fVHhDb3VudFRoRm9yQ2FsY05ld1JhdGUKKyNkZWZpbmUJTVRPUEFSQV9UWFJBVEVfSU5DX1RIKCkJCQlNVE9fREFUQSgpLkRUT19UeFJhdGVJbmNUaAorI2RlZmluZQlNVE9QQVJBX1RYUkFURV9ERUNfVEgoKQkJCU1UT19EQVRBKCkuRFRPX1R4UmF0ZURlY1RoCisjZGVmaW5lIE1UT1BBUkFfVFhSQVRFX0VRX1RIKCkJCQlNVE9fREFUQSgpLkRUT19UeFJhdGVFcVRoCisjZGVmaW5lCU1UT1BBUkFfVFhSQVRFX0JBQ0tPRkYoKQkJTVRPX0RBVEEoKS5EVE9fVHhSYXRlQmFja09mZgorI2RlZmluZQlNVE9QQVJBX1RYUkVUUllSQVRFX1JFRFVDRSgpCQlNVE9fREFUQSgpLkRUT19UeFJldHJ5UmF0ZVJlZHVjZQorI2RlZmluZSBNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKQkJCU1UT19EQVRBKCkuRFRPX1R4UG93ZXJJbmRleAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitleHRlcm4gdTggICBNVE9fRGF0YV9SYXRlX1RibFtdOworZXh0ZXJuIHUxNiAgTVRPX0ZyYWdfVGhfVGJsW107CisKKyNkZWZpbmUgTVRPX0RBVEFfUkFURSgpICAgICAgICAgIE1UT19EYXRhX1JhdGVfVGJsW01UT19SQVRFX0xFVkVMKCldCisjZGVmaW5lIE1UT19EQVRBX0ZBTExCQUNLX1JBVEUoKSBNVE9fRGF0YV9SYXRlX1RibFtNVE9fRkFMTEJBQ0tfUkFURV9MRVZFTCgpXQkvL25leHQgbGV2ZWwKKyNkZWZpbmUgTVRPX0ZSQUdfVEgoKSAgICAgICAgICAgIE1UT19GcmFnX1RoX1RibFtNVE9fRlJBR19USF9MRVZFTCgpXQorCit0eXBlZGVmIHN0cnVjdCB7CisJdTggdHhfcmF0ZTsKKwl1OCB0eF9yZXRyeV9yYXRlOworfSBUWFJFVFJZX1JFQzsKKwordHlwZWRlZiBzdHJ1Y3QgX1NUQVRJU1RJQ1NfSU5GTyB7CisJdTMyICAgUmF0ZTU0TTsKKwl1MzIgICBSYXRlNDhNOworCXUzMiAgIFJhdGUzNk07CisJdTMyICAgUmF0ZTI0TTsKKwl1MzIgICBSYXRlMThNOworCXUzMiAgIFJhdGUxMk07CisJdTMyICAgUmF0ZTlNOworCXUzMiAgIFJhdGU2TTsKKwl1MzIgICBSYXRlMTFNUzsKKwl1MzIgICBSYXRlMTFNTDsKKwl1MzIgICBSYXRlNTVNUzsKKwl1MzIgICBSYXRlNTVNTDsKKwl1MzIgICBSYXRlMk1TOworCXUzMiAgIFJhdGUyTUw7CisJdTMyICAgUmF0ZTFNOworCXUzMiAgIFJhdGU1NE1PSzsKKwl1MzIgICBSYXRlNDhNT0s7CisJdTMyICAgUmF0ZTM2TU9LOworCXUzMiAgIFJhdGUyNE1PSzsKKwl1MzIgICBSYXRlMThNT0s7CisJdTMyICAgUmF0ZTEyTU9LOworCXUzMiAgIFJhdGU5TU9LOworCXUzMiAgIFJhdGU2TU9LOworCXUzMiAgIFJhdGUxMU1TT0s7CisJdTMyICAgUmF0ZTExTUxPSzsKKwl1MzIgICBSYXRlNTVNU09LOworCXUzMiAgIFJhdGU1NU1MT0s7CisJdTMyICAgUmF0ZTJNU09LOworCXUzMiAgIFJhdGUyTUxPSzsKKwl1MzIgICBSYXRlMU1PSzsKKwl1MzIgICBTUTM7CisJczMyICAgUlNTSUFWRzsKKwlzMzIgICBSU1NJTUFYOworCXMzMiAgIFRYUkFURTsKKwlzMzIgICBUeFJldHJ5UmF0ZTsKKwlzMzIgICBCU1NfUEtfQ05UOworCXMzMiAgIE5JRExFU0xPVDsKKwlzMzIgICBTTE9UX0NOVDsKKwlzMzIgICBJTlRFUkZfQ05UOworCXMzMiAgIEdBUF9DTlQ7CisJczMyICAgRFNfRVZNOworCXMzMiAgIFJjdkJlYWNvbk51bTsKKwlzMzIgICBSWFJBVEU7CisJczMyICAgUnhCeXRlczsKKwlzMzIgICBUeEJ5dGVzOworCXMzMiAgIEFudGVubmE7Cit9IFNUQVRJU1RJQ1NfSU5GTywgKlBTVEFUSVNUSUNTX0lORk87CisKKyNlbmRpZiAvL19fTVRPX0hfXworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210b19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYjNkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oCkBAIC0wLDAgKzEsNyBAQAorZXh0ZXJuIHZvaWQgTVRPX0luaXQoUFdCMzJfQURBUFRFUik7CitleHRlcm4gdm9pZCBNVE9fUGVyaW9kaWNUaW1lckV4cGlyZWQoUFdCMzJfQURBUFRFUik7CitleHRlcm4gdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKFBXQjMyX0FEQVBURVIsIHU4ICosIHU4KTsKK2V4dGVybiB1OCBNVE9fR2V0VHhSYXRlKE1UT19GVU5DX0lOUFVULCB1MzIgZnBkdV9sZW4pOworZXh0ZXJuIHU4IE1UT19HZXRUeEZhbGxiYWNrUmF0ZShNVE9fRlVOQ19JTlBVVCk7CitleHRlcm4gdm9pZCBNVE9fU2V0VHhDb3VudChNVE9fRlVOQ19JTlBVVCwgdTggdDAsIHU4IGluZGV4KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9vc19jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjRmZjQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSAibGludXgvc3lzZGVmLmgiCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyYTY1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCkBAIC0wLDAgKzEsMTc1OSBAQAorLyoKKyAqIHBoeV8zMDJfY2FsaWJyYXRpb24uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSAgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgorICoKKyAqIG1vZGlmaWNhdGlvbiBoaXN0b3J5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDAuMDEuMDAxLCAyMDAzLTA0LTE2LCBLZXZpbiAgICAgIGNyZWF0ZWQKKyAqCisgKi8KKworLyoqKioqKioqKioqKioqKioqKiBJTkNMVURFIEZJTEVTIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisjaW5jbHVkZSAicGh5X2NhbGlicmF0aW9uLmgiCisKKworLyoqKioqKioqKioqKioqKioqKiBERUJVRyBDT05TVEFOVCBBTkQgTUFDUk8gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKiogTE9DQUwgQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBMT09QX1RJTUVTICAgICAgMjAKKyNkZWZpbmUgVVMgICAgICAgICAgICAgIDEwMDAvL01JQ1JPU0VDT05ECisKKyNkZWZpbmUgQUdfQ09OU1QgICAgICAgIDAuNjA3MjUyOTM1MAorI2RlZmluZSBGSVhFRChYKSAgICAgICAgKChzMzIpKChYKSAqIDMyNzY4LjApKQorI2RlZmluZSBERUcyUkFEKFgpICAgICAgMC4wMTc0NTMgKiAoWCkKKworLyoqKioqKioqKioqKioqKioqKiBMT0NBTCBUWVBFIERFRklOSVRJT04gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHMzMiAgICAgICAgIGZpeGVkOyAvKiAxNi4xNiBmaXhlZC1wb2ludCAqLworCitzdGF0aWMgY29uc3QgZml4ZWQgQW5nbGVzW109Cit7CisgICAgRklYRUQoREVHMlJBRCg0NS4wKSksICAgIEZJWEVEKERFRzJSQUQoMjYuNTY1KSksICBGSVhFRChERUcyUkFEKDE0LjAzNjIpKSwKKyAgICBGSVhFRChERUcyUkFEKDcuMTI1MDIpKSwgRklYRUQoREVHMlJBRCgzLjU3NjMzKSksIEZJWEVEKERFRzJSQUQoMS43ODk5MSkpLAorICAgIEZJWEVEKERFRzJSQUQoMC44OTUxNzQpKSxGSVhFRChERUcyUkFEKDAuNDQ3NjE0KSksRklYRUQoREVHMlJBRCgwLjIyMzgxMSkpLAorICAgIEZJWEVEKERFRzJSQUQoMC4xMTE5MDYpKSxGSVhFRChERUcyUkFEKDAuMDU1OTUzKSksRklYRUQoREVHMlJBRCgwLjAyNzk3NykpCit9OworCisvKioqKioqKioqKioqKioqKioqIExPQ0FMIEZVTkNUSU9OIERFQ0xBUkFUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKi8KKy8vdm9pZCAgICBfcGh5X3JmX3dyaXRlX2RlbGF5KGh3X2RhdGFfdCAqcGh3X2RhdGEpOworLy92b2lkICAgIHBoeV9pbml0X3JmKGh3X2RhdGFfdCAqcGh3X2RhdGEpOworCisvKioqKioqKioqKioqKioqKioqIEZVTkNUSU9OIERFRklOSVRJT04gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworczMyIF9zMTNfdG9fczMyKHUzMiBkYXRhKQoreworICAgIHUzMiAgICAgdmFsOworCisgICAgdmFsID0gKGRhdGEgJiAweDBGRkYpOworCisgICAgaWYgKChkYXRhICYgQklUKDEyKSkgIT0gMCkKKyAgICB7CisgICAgICAgIHZhbCB8PSAweEZGRkZGMDAwOworICAgIH0KKworICAgIHJldHVybiAoKHMzMikgdmFsKTsKK30KKwordTMyIF9zMzJfdG9fczEzKHMzMiBkYXRhKQoreworICAgIHUzMiAgICAgdmFsOworCisgICAgaWYgKGRhdGEgPiA0MDk1KQorICAgIHsKKyAgICAgICAgZGF0YSA9IDQwOTU7CisgICAgfQorICAgIGVsc2UgaWYgKGRhdGEgPCAtNDA5NikKKyAgICB7CisgICAgICAgIGRhdGEgPSAtNDA5NjsKKyAgICB9CisKKyAgICB2YWwgPSBkYXRhICYgMHgxRkZGOworCisgICAgcmV0dXJuIHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzMzIgX3M0X3RvX3MzMih1MzIgZGF0YSkKK3sKKyAgICBzMzIgICAgIHZhbDsKKworICAgIHZhbCA9IChkYXRhICYgMHgwMDA3KTsKKworICAgIGlmICgoZGF0YSAmIEJJVCgzKSkgIT0gMCkKKyAgICB7CisgICAgICAgIHZhbCB8PSAweEZGRkZGRkY4OworICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK3UzMiBfczMyX3RvX3M0KHMzMiBkYXRhKQoreworICAgIHUzMiAgICAgdmFsOworCisgICAgaWYgKGRhdGEgPiA3KQorICAgIHsKKyAgICAgICAgZGF0YSA9IDc7CisgICAgfQorICAgIGVsc2UgaWYgKGRhdGEgPCAtOCkKKyAgICB7CisgICAgICAgIGRhdGEgPSAtODsKKyAgICB9CisKKyAgICB2YWwgPSBkYXRhICYgMHgwMDBGOworCisgICAgcmV0dXJuIHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzMzIgX3M1X3RvX3MzMih1MzIgZGF0YSkKK3sKKyAgICBzMzIgICAgIHZhbDsKKworICAgIHZhbCA9IChkYXRhICYgMHgwMDBGKTsKKworICAgIGlmICgoZGF0YSAmIEJJVCg0KSkgIT0gMCkKKyAgICB7CisgICAgICAgIHZhbCB8PSAweEZGRkZGRkYwOworICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK3UzMiBfczMyX3RvX3M1KHMzMiBkYXRhKQoreworICAgIHUzMiAgICAgdmFsOworCisgICAgaWYgKGRhdGEgPiAxNSkKKyAgICB7CisgICAgICAgIGRhdGEgPSAxNTsKKyAgICB9CisgICAgZWxzZSBpZiAoZGF0YSA8IC0xNikKKyAgICB7CisgICAgICAgIGRhdGEgPSAtMTY7CisgICAgfQorCisgICAgdmFsID0gZGF0YSAmIDB4MDAxRjsKKworICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworczMyIF9zNl90b19zMzIodTMyIGRhdGEpCit7CisgICAgczMyICAgICB2YWw7CisKKyAgICB2YWwgPSAoZGF0YSAmIDB4MDAxRik7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoNSkpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRkZFMDsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCit1MzIgX3MzMl90b19zNihzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gMzEpCisgICAgeworICAgICAgICBkYXRhID0gMzE7CisgICAgfQorICAgIGVsc2UgaWYgKGRhdGEgPCAtMzIpCisgICAgeworICAgICAgICBkYXRhID0gLTMyOworICAgIH0KKworICAgIHZhbCA9IGRhdGEgJiAweDAwM0Y7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3MzMiBfczlfdG9fczMyKHUzMiBkYXRhKQoreworICAgIHMzMiAgICAgdmFsOworCisgICAgdmFsID0gZGF0YSAmIDB4MDBGRjsKKworICAgIGlmICgoZGF0YSAmIEJJVCg4KSkgIT0gMCkKKyAgICB7CisgICAgICAgIHZhbCB8PSAweEZGRkZGRjAwOworICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK3UzMiBfczMyX3RvX3M5KHMzMiBkYXRhKQoreworICAgIHUzMiAgICAgdmFsOworCisgICAgaWYgKGRhdGEgPiAyNTUpCisgICAgeworICAgICAgICBkYXRhID0gMjU1OworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTI1NikKKyAgICB7CisgICAgICAgIGRhdGEgPSAtMjU2OworICAgIH0KKworICAgIHZhbCA9IGRhdGEgJiAweDAxRkY7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3MzMiBfZmxvb3IoczMyIG4pCit7CisgICAgaWYgKG4gPiAwKQorICAgIHsKKyAgICAgICAgbiArPSA1OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuIC09IDU7CisgICAgfQorCisgICAgcmV0dXJuIChuLzEwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgc3FhcmUtcm9vdCBmdW5jdGlvbi4KKy8vIHNxc3VtIGlzIHRoZSBpbnB1dCBhbmQgdGhlIG91dHB1dCBpcyBzcV9ydDsKKy8vIFRoZSBtYXhpbXVtIG9mIHNxc3VtID0gMl4yNyAtMTsKK3UzMiBfc3FydCh1MzIgc3FzdW0pCit7CisgICAgdTMyICAgICBzcV9ydDsKKworICAgIGludCAgICAgZzAsIGcxLCBnMiwgZzMsIGc0OworICAgIGludCAgICAgc2VlZDsKKyAgICBpbnQgICAgIG5leHQ7CisgICAgaW50ICAgICBzdGVwOworCisgICAgZzQgPSAgc3FzdW0gLyAxMDAwMDAwMDA7CisgICAgZzMgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDApIC8xMDAwMDAwOworICAgIGcyID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCkgLzEwMDAwOworICAgIGcxID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCAtIGcyKjEwMDAwKSAvMTAwOworICAgIGcwID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCAtIGcyKjEwMDAwIC0gZzEqMTAwKTsKKworICAgIG5leHQgPSBnNDsKKyAgICBzdGVwID0gMDsKKyAgICBzZWVkID0gMDsKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAJc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzZWVkICogMTAwMDA7CisgICAgbmV4dCA9IChuZXh0LShzZWVkKnN0ZXApKSoxMDAgKyBnMzsKKworICAgIHN0ZXAgPSAwOworICAgIHNlZWQgPSAyICogc2VlZCAqIDEwOworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCisgICAgeworICAgICAgICBzdGVwKys7CisgICAgCXNlZWQrKzsKKyAgICB9CisKKyAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcCAqIDEwMDA7CisgICAgbmV4dCA9IChuZXh0IC0gc2VlZCAqIHN0ZXApICogMTAwICsgZzI7CisgICAgc2VlZCA9IChzZWVkICsgc3RlcCkgKiAxMDsKKyAgICBzdGVwID0gMDsKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAgICAgc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzcV9ydCArIHN0ZXAgKiAxMDA7CisgICAgbmV4dCA9IChuZXh0IC0gc2VlZCAqIHN0ZXApICogMTAwICsgZzE7CisgICAgc2VlZCA9IChzZWVkICsgc3RlcCkgKiAxMDsKKyAgICBzdGVwID0gMDsKKworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCisgICAgeworICAgICAgICBzdGVwKys7CisgICAgCXNlZWQrKzsKKyAgICB9CisKKyAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcCAqIDEwOworICAgIG5leHQgPSAobmV4dCAtIHNlZWQqIHN0ZXApICogMTAwICsgZzA7CisgICAgc2VlZCA9IChzZWVkICsgc3RlcCkgKiAxMDsKKyAgICBzdGVwID0gMDsKKworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCisgICAgeworICAgICAgICBzdGVwKys7CisgICAgCXNlZWQrKzsKKyAgICB9CisKKyAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcDsKKworICAgIHJldHVybiBzcV9ydDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIF9zaW5fY29zKHMzMiBhbmdsZSwgczMyICpzaW4sIHMzMiAqY29zKQoreworICAgIGZpeGVkICAgICAgIFgsIFksIFRhcmdldEFuZ2xlLCBDdXJyQW5nbGU7CisgICAgdW5zaWduZWQgICAgU3RlcDsKKworICAgIFg9RklYRUQoQUdfQ09OU1QpOyAgICAgIC8vIEFHX0NPTlNUICogY29zKDApCisgICAgWT0wOyAgICAgICAgICAgICAgICAgICAgLy8gQUdfQ09OU1QgKiBzaW4oMCkKKyAgICBUYXJnZXRBbmdsZT1hYnMoYW5nbGUpOworICAgIEN1cnJBbmdsZT0wOworCisgICAgZm9yIChTdGVwPTA7IFN0ZXAgPCAxMjsgU3RlcCsrKQorICAgIHsKKyAgICAgICAgZml4ZWQgTmV3WDsKKworICAgICAgICBpZihUYXJnZXRBbmdsZSA+IEN1cnJBbmdsZSkKKyAgICAgICAgeworICAgICAgICAgICAgTmV3WD1YIC0gKFkgPj4gU3RlcCk7CisgICAgICAgICAgICBZPShYID4+IFN0ZXApICsgWTsKKyAgICAgICAgICAgIFg9TmV3WDsKKyAgICAgICAgICAgIEN1cnJBbmdsZSArPSBBbmdsZXNbU3RlcF07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOZXdYPVggKyAoWSA+PiBTdGVwKTsKKyAgICAgICAgICAgIFk9LShYID4+IFN0ZXApICsgWTsKKyAgICAgICAgICAgIFg9TmV3WDsKKyAgICAgICAgICAgIEN1cnJBbmdsZSAtPSBBbmdsZXNbU3RlcF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYW5nbGUgPiAwKQorICAgIHsKKyAgICAgICAgKmNvcyA9IFg7CisgICAgICAgICpzaW4gPSBZOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqY29zID0gWDsKKyAgICAgICAgKnNpbiA9IC1ZOworICAgIH0KK30KKworCit2b2lkIF9yZXNldF9yeF9jYWwoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3sKKwl1MzIgICAgIHZhbDsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKworCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJeworCQl2YWwgJj0gMHhGRkZGMDAwMDsKKwl9CisJZWxzZSAvLyAybmQtY3V0CisJeworCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwl9CisKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKK30KKworCisvLyAqKioqKioqKioqKipmb3Igd2luYm9uZCBjYWxpYnJhdGlvbioqKioqKioqKgorLy8KKworLy8KKy8vCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgX3J4YWRjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQoreworICAgIHUzMiAgICAgcmVnX2FnY19jdHJsMzsKKyAgICB1MzIgICAgIHJlZ19hX2FjcV9jdHJsOworICAgIHUzMiAgICAgcmVnX2JfYWNxX2N0cmw7CisgICAgdTMyICAgICB2YWw7CisKKyAgICBQSFlfREVCVUcoKCJbQ0FMXSAtPiBbMV1fcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbigpXG4iKSk7CisgICAgcGh5X2luaXRfcmYocGh3X2RhdGEpOworCisgICAgLy8gc2V0IGNhbGlicmF0aW9uIGNoYW5uZWwKKyAgICBpZiggKFJGX1dCXzI0MiA9PSBwaHdfZGF0YS0+cGh5X3R5cGUpIHx8CisJCShSRl9XQl8yNDJfMSA9PSBwaHdfZGF0YS0+cGh5X3R5cGUpICkgLy8gMjAwNjA2MTkuNSBBZGQKKyAgICB7CisgICAgICAgIGlmICgoZnJlcXVlbmN5ID49IDI0MTIpICYmIChmcmVxdWVuY3kgPD0gMjQ4NCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHc4OXJmMjQyIGNoYW5nZSBmcmVxdWVuY3kgdG8gMjM5ME1oegorICAgICAgICAgICAgUEhZX0RFQlVHKCgiW0NBTF0gVzg5UkYyNDIvMTFHL0NoYW5uZWw9MjM5ME1oelxuIikpOworCQkJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAzLCAoMzw8MjQpfDB4MDI1NTg2KTsKKworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKwl7CisKKwl9CisKKwkvLyByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbAorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCAmdmFsKTsKKwl2YWwgJj0gfigweDAzRkYpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCB2YWwpOworCisJLy8gcmVzZXQgdGhlIFRYIGFuZCBSWCBJUSBjYWxpYnJhdGlvbiBkYXRhCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIDApOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAwKTsKKworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCisJLy8gYS4gRGlzYWJsZSBBR0MKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgJnJlZ19hZ2NfY3RybDMpOworCXJlZ19hZ2NfY3RybDMgJj0gfkJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzIHw9IChNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCAmdmFsKTsKKwl2YWwgfD0gTUFTS19BR0NfRklYX0dBSU47CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsIHZhbCk7CisKKwkvLyBiLiBUdXJuIG9mZiBCQiBSWAorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgJnJlZ19hX2FjcV9jdHJsKTsKKwlyZWdfYV9hY3FfY3RybCB8PSBNQVNLX0FNRVJfT0ZGX1JFRzsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsIHJlZ19hX2FjcV9jdHJsKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQl9BQ1FfQ1RSTCwgJnJlZ19iX2FjcV9jdHJsKTsKKwlyZWdfYl9hY3FfY3RybCB8PSBNQVNLX0JNRVJfT0ZGX1JFRzsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsIHJlZ19iX2FjcV9jdHJsKTsKKworCS8vIGMuIE1ha2Ugc3VyZSBNQUMgaXMgaW4gcmVjZWl2aW5nIG1vZGUKKwkvLyBkLiBUdXJuIE9OIEFEQyBjYWxpYnJhdGlvbgorCS8vICAgIC0gQURDIGNhbGlicmF0b3IgaXMgdHJpZ2dlcmVkIGJ5IHRoaXMgc2lnbmFsIHJpc2luZyBmcm9tIDAgdG8gMQorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmdmFsKTsKKwl2YWwgJj0gfk1BU0tfQURDX0RDX0NBTF9TVFI7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHZhbCk7CisKKwl2YWwgfD0gTUFTS19BRENfRENfQ0FMX1NUUjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgdmFsKTsKKwlwYV9zdGFsbF9leGVjdXRpb24oVVMpOyAvLyAqTVVTVCogd2FpdCBmb3IgYSB3aGlsZQorCisJLy8gZS4gVGhlIHJlc3VsdCBhcmUgc2hvd24gaW4gImFkY19kY19jYWxfaVs4OjBdIGFuZCBhZGNfZGNfY2FsX3FbODowXSIKKyNpZmRlZiBfREVCVUcKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX09GRlNFVF9SRUFELCAmdmFsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBSRUdfT0ZGU0VUX1JFQUQgPSAweCUwOFhcbiIsIHZhbCkpOworCisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYWRjX2RjX2NhbF9pID0gJWQgKDB4JTA0WClcbiIsCisJCQkgICBfczlfdG9fczMyKHZhbCYweDAwMDAwMUZGKSwgdmFsJjB4MDAwMDAxRkYpKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhZGNfZGNfY2FsX3EgPSAlZCAoMHglMDRYKVxuIiwKKwkJCSAgIF9zOV90b19zMzIoKHZhbCYweDAwMDNGRTAwKT4+OSksICh2YWwmMHgwMDAzRkUwMCk+PjkpKTsKKyNlbmRpZgorCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZ2YWwpOworCXZhbCAmPSB+TUFTS19BRENfRENfQ0FMX1NUUjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgdmFsKTsKKworCS8vIGYuIFR1cm4gb24gQkIgUlgKKwkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgJnJlZ19hX2FjcV9jdHJsKTsKKwlyZWdfYV9hY3FfY3RybCAmPSB+TUFTS19BTUVSX09GRl9SRUc7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCByZWdfYV9hY3FfY3RybCk7CisKKwkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQl9BQ1FfQ1RSTCwgJnJlZ19iX2FjcV9jdHJsKTsKKwlyZWdfYl9hY3FfY3RybCAmPSB+TUFTS19CTUVSX09GRl9SRUc7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCByZWdfYl9hY3FfY3RybCk7CisKKwkvLyBnLiBFbmFibGUgQUdDCisJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgJnZhbCk7CisJcmVnX2FnY19jdHJsMyB8PSBCSVQoMik7CisJcmVnX2FnY19jdHJsMyAmPSB+KE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsIHJlZ19hZ2NfY3RybDMpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordm9pZCBfdHhpZGFjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhKQoreworCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJdTMyICAgICByZWdfZGNfY2FuY2VsOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfaTsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX3E7CisJdTMyICAgICBzcXN1bTsKKwlzMzIgICAgIG1hZ18wOworCXMzMiAgICAgbWFnXzE7CisJczMyICAgICBmaXhfY2FuY2VsX2RjX2kgPSAwOworCXUzMiAgICAgdmFsOworCWludCAgICAgbG9vcDsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IFsyXV90eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbigpXG4iKSk7CisKKwkvLyBhLiBTZXQgdG8gIlRYIGNhbGlicmF0aW9uIG1vZGUiCisKKwkvLzB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOworCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDE5MDFENik7CisJLy8weDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM0OEEpOworICAgIC8vMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgwNjg5MEMpOworCS8vMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGREYxQzApOworCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvLyBJUV9BbHBoYSBDaGFuZ2VkCisKKwkvLyBhLiBEaXNhYmxlIEFHQworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CisJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOworCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsIHJlZ19hZ2NfY3RybDMpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsICZ2YWwpOworCXZhbCB8PSBNQVNLX0FHQ19GSVhfR0FJTjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgdmFsKTsKKworCS8vIGIuIHNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgyIGFuZCBzZXQgaXFjYWxfdG9uZVszOjJdIHRvIDAKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CisKKwkvLyBtb2RlPTIsIHRvbmU9MAorCS8vcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyKTsKKworCS8vIG1vZGU9MiwgdG9uZT0xCisJLy9yZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDJ8KDE8PDIpKTsKKworCS8vIG1vZGU9MiwgdG9uZT0yCisJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyfCgyPDwyKSk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCAmcmVnX2RjX2NhbmNlbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCisJZm9yIChsb29wID0gMDsgbG9vcCA8IExPT1BfVElNRVM7IGxvb3ArKykKKwl7CisJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIGxvb3ApKTsKKworCQkvLyBjLgorCQkvLyByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbAorCQlyZWdfZGNfY2FuY2VsICY9IH4oMHgwM0ZGKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDIsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMiA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwkJaXFjYWxfaW1hZ2VfaSA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQlpcWNhbF9pbWFnZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJc3FzdW0gPSBpcWNhbF9pbWFnZV9pKmlxY2FsX2ltYWdlX2kgKyBpcWNhbF9pbWFnZV9xKmlxY2FsX2ltYWdlX3E7CisJCW1hZ18wID0gKHMzMikgX3NxcnQoc3FzdW0pOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMD0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCisJCQkJICAgbWFnXzAsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKKworCQkvLyBkLgorCQlyZWdfZGNfY2FuY2VsIHw9ICgxIDw8IENBTkNFTF9EQ19JX1NISUZUKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDIsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMiA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwkJaXFjYWxfaW1hZ2VfaSA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQlpcWNhbF9pbWFnZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJc3FzdW0gPSBpcWNhbF9pbWFnZV9pKmlxY2FsX2ltYWdlX2kgKyBpcWNhbF9pbWFnZV9xKmlxY2FsX2ltYWdlX3E7CisJCW1hZ18xID0gKHMzMikgX3NxcnQoc3FzdW0pOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMT0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCisJCQkJICAgbWFnXzEsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKKworCQkvLyBlLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSQorCQlpZiAobWFnXzAgIT0gbWFnXzEpCisJCXsKKwkJCWZpeF9jYW5jZWxfZGNfaSA9IChtYWdfMCoxMDAwMCkgLyAobWFnXzAqMTAwMDAgLSBtYWdfMSoxMDAwMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAobWFnXzAgPT0gbWFnXzEpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAqKioqKiBtYWdfMCA9IG1hZ18xICEhXG4iKSk7CisJCQl9CisKKwkJCWZpeF9jYW5jZWxfZGNfaSA9IDA7CisJCX0KKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBmaXhfY2FuY2VsX2RjX2kgPSAlZCAoMHglMDRYKVxuIiwKKwkJCQkgICBmaXhfY2FuY2VsX2RjX2ksIF9zMzJfdG9fczUoZml4X2NhbmNlbF9kY19pKSkpOworCisJCWlmICgoYWJzKG1hZ18xLW1hZ18wKSo2KSA+IG1hZ18wKQorCQl7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICggbG9vcCA+PSAxOSApCisJICAgZml4X2NhbmNlbF9kY19pID0gMDsKKworCXJlZ19kY19jYW5jZWwgJj0gfigweDAzRkYpOworCXJlZ19kY19jYW5jZWwgfD0gKF9zMzJfdG9fczUoZml4X2NhbmNlbF9kY19pKSA8PCBDQU5DRUxfRENfSV9TSElGVCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisKKwkvLyBnLgorCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordm9pZCBfdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit7CisJdTMyICAgICByZWdfYWdjX2N0cmwzOworCXUzMiAgICAgcmVnX21vZGVfY3RybDsKKwl1MzIgICAgIHJlZ19kY19jYW5jZWw7CisJczMyICAgICBpcWNhbF9pbWFnZV9pOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfcTsKKwl1MzIgICAgIHNxc3VtOworCXMzMiAgICAgbWFnXzA7CisJczMyICAgICBtYWdfMTsKKwlzMzIgICAgIGZpeF9jYW5jZWxfZGNfcSA9IDA7CisJdTMyICAgICB2YWw7CisJaW50ICAgICBsb29wOworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzNdX3R4cWRhY19kY19vZmZzZXRfY2FjZWxsYXRpb24oKVxuIikpOworCS8vMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cworCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMSwgKDE8PDI0KXwweEVFM0ZDMik7CisJLy8weDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTkwMUQ2KTsKKwkvLzB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKDU8PDI0KXwweDI0QzQ4QSk7CisgICAgLy8weDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDA2ODkwQyk7CisJLy8weDAwIDB4RkRGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg2ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMCwgKDA8PDI0KXwweEZERjFDMCk7CisKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgMHgzMDMwMzAzMCk7IC8vIElRX0FscGhhIENoYW5nZWQKKworCS8vIGEuIERpc2FibGUgQUdDCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKKwlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CisJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgJnZhbCk7CisJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOworCisJLy8gYS4gc2V0IGlxY2FsX21vZGVbMTowXSB0byAweDMgYW5kIHNldCBpcWNhbF90b25lWzM6Ml0gdG8gMAorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJLy9yZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREUpOworCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX01PREUpOworCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8Myk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCAmcmVnX2RjX2NhbmNlbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCisJZm9yIChsb29wID0gMDsgbG9vcCA8IExPT1BfVElNRVM7IGxvb3ArKykKKwl7CisJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIGxvb3ApKTsKKworCQkvLyBiLgorCQkvLyByZXNldCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbAorCQlyZWdfZGNfY2FuY2VsICY9IH4oMHgwMDFGKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDIsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMiA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJaXFjYWxfaW1hZ2VfaSA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQlpcWNhbF9pbWFnZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJc3FzdW0gPSBpcWNhbF9pbWFnZV9pKmlxY2FsX2ltYWdlX2kgKyBpcWNhbF9pbWFnZV9xKmlxY2FsX2ltYWdlX3E7CisJCW1hZ18wID0gX3NxcnQoc3FzdW0pOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMD0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCisJCQkJICAgbWFnXzAsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKKworCQkvLyBjLgorCQlyZWdfZGNfY2FuY2VsIHw9ICgxIDw8IENBTkNFTF9EQ19RX1NISUZUKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDIsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMiA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJaXFjYWxfaW1hZ2VfaSA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQlpcWNhbF9pbWFnZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJc3FzdW0gPSBpcWNhbF9pbWFnZV9pKmlxY2FsX2ltYWdlX2kgKyBpcWNhbF9pbWFnZV9xKmlxY2FsX2ltYWdlX3E7CisJCW1hZ18xID0gX3NxcnQoc3FzdW0pOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMT0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCisJCQkJICAgbWFnXzEsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKKworCQkvLyBkLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSQorCQlpZiAobWFnXzAgIT0gbWFnXzEpCisJCXsKKwkJCWZpeF9jYW5jZWxfZGNfcSA9IChtYWdfMCoxMDAwMCkgLyAobWFnXzAqMTAwMDAgLSBtYWdfMSoxMDAwMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAobWFnXzAgPT0gbWFnXzEpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAqKioqKiBtYWdfMCA9IG1hZ18xICEhXG4iKSk7CisJCQl9CisKKwkJCWZpeF9jYW5jZWxfZGNfcSA9IDA7CisJCX0KKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBmaXhfY2FuY2VsX2RjX3EgPSAlZCAoMHglMDRYKVxuIiwKKwkJCQkgICBmaXhfY2FuY2VsX2RjX3EsIF9zMzJfdG9fczUoZml4X2NhbmNlbF9kY19xKSkpOworCisJCWlmICgoYWJzKG1hZ18xLW1hZ18wKSo2KSA+IG1hZ18wKQorCQl7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICggbG9vcCA+PSAxOSApCisJICAgZml4X2NhbmNlbF9kY19xID0gMDsKKworCXJlZ19kY19jYW5jZWwgJj0gfigweDAwMUYpOworCXJlZ19kY19jYW5jZWwgfD0gKF9zMzJfdG9fczUoZml4X2NhbmNlbF9kY19xKSA8PCBDQU5DRUxfRENfUV9TSElGVCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisKKworCS8vIGYuCisJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworfQorCisvLzIwMDYwNjEyLjEuYSAyMDA2MDcxOC4xIE1vZGlmeQordTggX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLAorCQkJCQkJICAgczMyIGFfMl90aHJlc2hvbGQsCisJCQkJCQkgICBzMzIgYl8yX3RocmVzaG9sZCkKK3sKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJczMyICAgICBpcV9tYWdfMF90eDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaTA7CisJczMyICAgICBpcWNhbF90b25lX3EwOworCXMzMiAgICAgaXFjYWxfdG9uZV9pOworCXMzMiAgICAgaXFjYWxfdG9uZV9xOworCXUzMiAgICAgc3FzdW07CisJczMyICAgICByb3RfaV9iOworCXMzMiAgICAgcm90X3FfYjsKKwlzMzIgICAgIHR4X2NhbF9mbHRfYls0XTsKKwlzMzIgICAgIHR4X2NhbFs0XTsKKwlzMzIgICAgIHR4X2NhbF9yZWdbNF07CisJczMyICAgICBhXzIsIGJfMjsKKwlzMzIgICAgIHNpbl9iLCBzaW5fMmI7CisJczMyICAgICBjb3NfYiwgY29zXzJiOworCXMzMiAgICAgZGl2aXNvcjsKKwlzMzIgICAgIHRlbXAxLCB0ZW1wMjsKKwl1MzIgICAgIHZhbDsKKwl1MTYgICAgIGxvb3A7CisJczMyICAgICBpcWNhbF90b25lX2lfYXZnLGlxY2FsX3RvbmVfcV9hdmc7CisJdTggICAgICB2ZXJpZnlfY291bnQ7CisJaW50IGNhcHR1cmVfdGltZTsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wKClcbiIpKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhXzJfdGhyZXNob2xkID0gJWRcbiIsIGFfMl90aHJlc2hvbGQpKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBiXzJfdGhyZXNob2xkID0gJWRcbiIsIGJfMl90aHJlc2hvbGQpKTsKKworCXZlcmlmeV9jb3VudCA9IDA7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCWxvb3AgPSBMT09QX1RJTUVTOworCisJd2hpbGUgKGxvb3AgPiAwKQorCXsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gWyVkLl0gPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPlxuIiwgKExPT1BfVElNRVMtbG9vcCsxKSkpOworCisJCWlxY2FsX3RvbmVfaV9hdmc9MDsKKwkJaXFjYWxfdG9uZV9xX2F2Zz0wOworCQlpZiggIWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAweDAwKSApIC8vIDIwMDYwNzE4LjEgbW9kaWZ5CisJCQlyZXR1cm4gMDsKKwkJZm9yKGNhcHR1cmVfdGltZT0wO2NhcHR1cmVfdGltZTwxMDtjYXB0dXJlX3RpbWUrKykKKwkJeworCQkJLy8gYS4gU2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MSB0bworCQkJLy8gICAgZW5hYmxlICJJUSBhbGlicmF0aW9uIE1vZGUgSUkiCisJCQlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREUpOworCQkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOworCQkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAyKTsKKwkJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMnwyPDwyKTsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCQkvLyBiLgorCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMSA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCQlpcWNhbF90b25lX2kwID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCQlpcWNhbF90b25lX3EwID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxY2FsX3RvbmVfaTA9JWQsIGlxY2FsX3RvbmVfcTA9JWRcbiIsCisJCQkJICAgaXFjYWxfdG9uZV9pMCwgaXFjYWxfdG9uZV9xMCkpOworCisJCQlzcXN1bSA9IGlxY2FsX3RvbmVfaTAqaXFjYWxfdG9uZV9pMCArCisJCQlpcWNhbF90b25lX3EwKmlxY2FsX3RvbmVfcTA7CisJCQlpcV9tYWdfMF90eCA9IChzMzIpIF9zcXJ0KHNxc3VtKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxX21hZ18wX3R4PSVkXG4iLCBpcV9tYWdfMF90eCkpOworCisJCQkvLyBjLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwkJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCQkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQkJLy8gZC4gU2V0IGlxY2FsX21vZGVbMTowXSB0byAweDMgYW5kIHNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MSB0bworCQkJLy8gICAgZW5hYmxlICJJUSBhbGlicmF0aW9uIE1vZGUgSUkiCisJCQkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmdmFsKTsKKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0lRQ0FMX01PREU7CisJCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDMpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwkJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJCS8vIGUuCisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQxLCAmdmFsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJCWlxY2FsX3RvbmVfaSA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQkJaXFjYWxfdG9uZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxY2FsX3RvbmVfaSA9ICVkLCBpcWNhbF90b25lX3EgPSAlZFxuIiwKKwkJCWlxY2FsX3RvbmVfaSwgaXFjYWxfdG9uZV9xKSk7CisJCQlpZiggY2FwdHVyZV90aW1lID09IDApCisJCQl7CisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaXFjYWxfdG9uZV9pX2F2Zz0oIGlxY2FsX3RvbmVfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfdG9uZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9xX2F2Zz0oIGlxY2FsX3RvbmVfcV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfdG9uZV9xKS9jYXB0dXJlX3RpbWU7CisJCQl9CisJCX0KKworCQlpcWNhbF90b25lX2kgPSBpcWNhbF90b25lX2lfYXZnOworCQlpcWNhbF90b25lX3EgPSBpcWNhbF90b25lX3FfYXZnOworCisKKwkJcm90X2lfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX2kwICsKKwkJCQkgICBpcWNhbF90b25lX3EgKiBpcWNhbF90b25lX3EwKSAvIDEwMjQ7CisJCXJvdF9xX2IgPSAoaXFjYWxfdG9uZV9pICogaXFjYWxfdG9uZV9xMCAqICgtMSkgKworCQkJCSAgIGlxY2FsX3RvbmVfcSAqIGlxY2FsX3RvbmVfaTApIC8gMTAyNDsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X2lfYiA9ICVkLCByb3RfcV9iID0gJWRcbiIsCisJCQkJICAgcm90X2lfYiwgcm90X3FfYikpOworCisJCS8vIGYuCisJCWRpdmlzb3IgPSAoKGlxX21hZ18wX3R4ICogaXFfbWFnXzBfdHggKiAyKS8xMDI0IC0gcm90X2lfYikgKiAyOworCisJCWlmIChkaXZpc29yID09IDApCisJCXsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gRVJST1IgKioqKioqKlxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogZGl2aXNvcj0wIHRvIGNhbGN1bGF0ZSBFUFMgYW5kIFRIRVRBICEhXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYV8yID0gKHJvdF9pX2IgKiAzMjc2OCkgLyBkaXZpc29yOworCQliXzIgPSAocm90X3FfYiAqICgtMzI3NjgpKSAvIGRpdmlzb3I7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqKioqIEVQU0lMT04vMiA9ICVkXG4iLCBhXzIpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKioqKiogVEhFVEEvMiAgID0gJWRcbiIsIGJfMikpOworCisJCXBod19kYXRhLT5pcV9yc2RsX2dhaW5fdHhfZDIgPSBhXzI7CisJCXBod19kYXRhLT5pcV9yc2RsX3BoYXNlX3R4X2QyID0gYl8yOworCisJCS8vaWYgKChhYnMoYV8yKSA8IDE1MCkgJiYgKGFicyhiXzIpIDwgMTAwKSkKKwkJLy9pZiAoKGFicyhhXzIpIDwgMjAwKSAmJiAoYWJzKGJfMikgPCAyMDApKQorCQlpZiAoKGFicyhhXzIpIDwgYV8yX3RocmVzaG9sZCkgJiYgKGFicyhiXzIpIDwgYl8yX3RocmVzaG9sZCkpCisJCXsKKwkJCXZlcmlmeV9jb3VudCsrOworCisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKioqKipcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIFZFUklGWSBPSyAjICVkICEhXG4iLCB2ZXJpZnlfY291bnQpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCisJCQlpZiAodmVyaWZ5X2NvdW50ID4gMikKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIChFUFMsVEhFVEEpIE9LICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJY29udGludWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQl2ZXJpZnlfY291bnQgPSAwOworCQl9CisKKwkJX3Npbl9jb3MoYl8yLCAmc2luX2IsICZjb3NfYik7CisJCV9zaW5fY29zKGJfMioyLCAmc2luXzJiLCAmY29zXzJiKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIvMik9JWQsIGNvcyhiLzIpPSVkXG4iLCBzaW5fYiwgY29zX2IpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIpPSVkLCBjb3MoYik9JWRcbiIsIHNpbl8yYiwgY29zXzJiKSk7CisKKwkJaWYgKGNvc18yYiA9PSAwKQorCQl7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIGNvcyhiKT0wICEhXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gMTI4MCAqIDMyNzY4ID0gNDE5NDMwNDAKKwkJdGVtcDEgPSAoNDE5NDMwNDAvY29zXzJiKSpjb3NfYjsKKworCQkvL3RlbXAyID0gKDQxOTQzMDQwL2Nvc18yYikqc2luX2IqKC0xKTsKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJdGVtcDIgPSAoNDE5NDMwNDAvY29zXzJiKSpzaW5fYiooLTEpOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQl0ZW1wMiA9ICg0MTk0MzA0MCo0L2Nvc18yYikqc2luX2IqKC0xKTsKKwkJfQorCisJCXR4X2NhbF9mbHRfYlswXSA9IF9mbG9vcih0ZW1wMS8oMzI3NjgrYV8yKSk7CisJCXR4X2NhbF9mbHRfYlsxXSA9IF9mbG9vcih0ZW1wMi8oMzI3NjgrYV8yKSk7CisJCXR4X2NhbF9mbHRfYlsyXSA9IF9mbG9vcih0ZW1wMi8oMzI3NjgtYV8yKSk7CisJCXR4X2NhbF9mbHRfYlszXSA9IF9mbG9vcih0ZW1wMS8oMzI3NjgtYV8yKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHR4X2NhbF9mbHRfYlswXSA9ICVkXG4iLCB0eF9jYWxfZmx0X2JbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX2ZsdF9iWzFdID0gJWRcbiIsIHR4X2NhbF9mbHRfYlsxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfZmx0X2JbMl0gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9mbHRfYlszXSA9ICVkXG4iLCB0eF9jYWxfZmx0X2JbM10pKTsKKworCQl0eF9jYWxbMl0gPSB0eF9jYWxfZmx0X2JbMl07CisJCXR4X2NhbFsyXSA9IHR4X2NhbFsyXSArMzsKKwkJdHhfY2FsWzFdID0gdHhfY2FsWzJdOworCQl0eF9jYWxbM10gPSB0eF9jYWxfZmx0X2JbM10gLSAxMjg7CisJCXR4X2NhbFswXSA9IC10eF9jYWxbM10rMTsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxbMF0gPSAlZFxuIiwgdHhfY2FsWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFsxXSA9ICVkXG4iLCB0eF9jYWxbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzJdID0gJWRcbiIsIHR4X2NhbFsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxbM10gPSAlZFxuIiwgdHhfY2FsWzNdKSk7CisKKwkJLy9pZiAoKHR4X2NhbFswXSA9PSAwKSAmJiAodHhfY2FsWzFdID09IDApICYmCisJCS8vICAgICh0eF9jYWxbMl0gPT0gMCkgJiYgKHR4X2NhbFszXSA9PSAwKSkKKwkJLy97CisJCS8vICAgIFBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqKioqKlxuIikpOworCQkvLyAgICBQSFlfREVCVUcoKCJbQ0FMXSAqKiBUWF9JUV9DQUxJQlJBVElPTiBDT01QTEVURSAhIVxuIikpOworCQkvLyAgICBQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJLy8gICAgcmV0dXJuIDA7CisJCS8vfQorCisJCS8vIGcuCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOworCQkJdHhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4RjAwMDAwMDApID4+IDI4KTsKKwkJCXR4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDBGMDAwMDAwKSA+PiAyNCk7CisJCQl0eF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMEYwMDAwMCkgPj4gMjApOworCQkJdHhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwRjAwMDApID4+IDE2KTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHgzQyA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQl0eF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOworCQkJdHhfY2FsX3JlZ1sxXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDdFMDAwMDApID4+IDIxKTsKKwkJCXR4X2NhbF9yZWdbMl0gPSBfczZfdG9fczMyKCh2YWwgJiAweDAwMUY4MDAwKSA+PiAxNSk7CisJCQl0eF9jYWxfcmVnWzNdID0gX3M1X3RvX3MzMigodmFsICYgMHgwMDAwN0MwMCkgPj4gMTApOworCisJCX0KKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiB0eF9jYWxfcmVnWzBdID0gJWRcbiIsIHR4X2NhbF9yZWdbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1sxXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbMl0gPSAlZFxuIiwgdHhfY2FsX3JlZ1syXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzNdID0gJWRcbiIsIHR4X2NhbF9yZWdbM10pKTsKKworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQlpZiAoKCh0eF9jYWxfcmVnWzBdPT03KSB8fCAodHhfY2FsX3JlZ1swXT09KC04KSkpICYmCisJCQkJKCh0eF9jYWxfcmVnWzNdPT03KSB8fCAodHhfY2FsX3JlZ1szXT09KC04KSkpKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJaWYgKCgodHhfY2FsX3JlZ1swXT09MzEpIHx8ICh0eF9jYWxfcmVnWzBdPT0oLTMyKSkpICYmCisJCQkJKCh0eF9jYWxfcmVnWzNdPT0zMSkgfHwgKHR4X2NhbF9yZWdbM109PSgtMzIpKSkpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBUWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJdHhfY2FsWzBdID0gdHhfY2FsWzBdICsgdHhfY2FsX3JlZ1swXTsKKwkJdHhfY2FsWzFdID0gdHhfY2FsWzFdICsgdHhfY2FsX3JlZ1sxXTsKKwkJdHhfY2FsWzJdID0gdHhfY2FsWzJdICsgdHhfY2FsX3JlZ1syXTsKKwkJdHhfY2FsWzNdID0gdHhfY2FsWzNdICsgdHhfY2FsX3JlZ1szXTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYXBwbHkgdHhfY2FsWzBdID0gJWRcbiIsIHR4X2NhbFswXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSB0eF9jYWxbMV0gPSAlZFxuIiwgdHhfY2FsWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHR4X2NhbFsyXSA9ICVkXG4iLCB0eF9jYWxbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgdHhfY2FsWzNdID0gJWRcbiIsIHR4X2NhbFszXSkpOworCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCXZhbCAmPSAweDAwMDBGRkZGOworCQkJdmFsIHw9ICgoX3MzMl90b19zNCh0eF9jYWxbMF0pIDw8IDI4KXwKKwkJCQkJKF9zMzJfdG9fczQodHhfY2FsWzFdKSA8PCAyNCl8CisJCQkJCShfczMyX3RvX3M0KHR4X2NhbFsyXSkgPDwgMjApfAorCQkJCQkoX3MzMl90b19zNCh0eF9jYWxbM10pIDw8IDE2KSk7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIENBTElCX0RBVEEgPSAweCUwOFhcbiIsIHZhbCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCXZhbCAmPSAweDAwMDAwM0ZGOworCQkJdmFsIHw9ICgoX3MzMl90b19zNSh0eF9jYWxbMF0pIDw8IDI3KXwKKwkJCQkJKF9zMzJfdG9fczYodHhfY2FsWzFdKSA8PCAyMSl8CisJCQkJCShfczMyX3RvX3M2KHR4X2NhbFsyXSkgPDwgMTUpfAorCQkJCQkoX3MzMl90b19zNSh0eF9jYWxbM10pIDw8IDEwKSk7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIFRYX0lRX0NBTElCUkFUSU9OID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLy8gaS4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwCisJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCQlsb29wLS07CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3sKKwl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CisjaWZkZWYgX0RFQlVHCisJczMyICAgICB0eF9jYWxfcmVnWzRdOworCisjZW5kaWYKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJdTMyICAgICB2YWw7CisJdTggICAgICByZXN1bHQ7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBbNF1fdHhfaXFfY2FsaWJyYXRpb24oKVxuIikpOworCisJLy8weDAxIDB4RUUzRkMyICA7IDNCOEZGICA7IENhbGlicmF0aW9uICg2YSkuIGVuYWJsZSBUWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxLCAoMTw8MjQpfDB4RUUzRkMyKTsKKwkvLzB4MEIgMHgxOTA1RDYgIDsgMDY0MTcgIDsgQ2FsaWJyYXRpb24gKDZiKS4gZW5hYmxlIFRYIEkvUSBjYWwgbG9vcCBzcXVhcmluZyBjaXJjdWl0CisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxMSwgKDExPDwyNCl8MHgxOUJERDYpOyAvLyAyMDA2MDYxMi4xLmEgMHgxOTA1RDYpOworCS8vMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoNTw8MjQpfDB4MjRDNjBBKTsgLy8weDI0QzYwQSAoaGlnaCB0ZW1wZXJhdHVyZSkKKyAgICAvLzB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA2LCAoNjw8MjQpfDB4MzQ4ODBDKTsgLy8gMjAwNjA2MTIuMS5hIDB4MDY4OTBDKTsKKwkvLzB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKKwkvLzsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmYpLlNlbmQgdGVzdCBwYXR0ZXJuCisJLy87IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZnKS4gU2VhcmNoIFJYR0NMIG9wdGltYWwgdmFsdWUKKwkvLzsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmgpLiBDYWN1bGF0ZSBUWC1wYXRoIElRIGltYmFsYW5jZSBhbmQgc2V0dGluZyBUWCBwYXRoIElRIGNvbXBlbnNhdGlvbiB0YWJsZQorCS8vcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAzLCAoMzw8MjQpfDB4MDI1NTg2KTsKKworCU9TX1NMRUVQKDMwMDAwKTsgLy8gMjAwNjA2MTIuMS5hIDMwbXMgZGVsYXkuIEFkZCB0aGUgZm9sbG93IDIgbGluZXMKKwkvL1RvIGFkanVzdCBUWFZHQSB0byBmaXQgaXFfbWFnXzAgcmFuZ2UgZnJvbSAxMjUwIH4gMTc1MAorCWFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKCBwaHdfZGF0YSApOworCisJLy8gYS4gRGlzYWJsZSBBR0MKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgJnJlZ19hZ2NfY3RybDMpOworCXJlZ19hZ2NfY3RybDMgJj0gfkJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzIHw9IChNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCAmdmFsKTsKKwl2YWwgfD0gTUFTS19BR0NfRklYX0dBSU47CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsIHZhbCk7CisKKwlyZXN1bHQgPSBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCAxNTAsIDEwMCk7CisKKwlpZiAocmVzdWx0ID4gMCkKKwl7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJCXZhbCAmPSAweDAwMDBGRkZGOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCXZhbCAmPSAweDAwMDAwM0ZGOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CisJCX0KKworCQlyZXN1bHQgPSBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCAzMDAsIDIwMCk7CisKKwkJaWYgKHJlc3VsdCA+IDApCisJCXsKKwkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCQl7CisJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQkJCXZhbCAmPSAweDAwMDBGRkZGOworCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQkJfQorCQkJZWxzZSAvLyAybmQtY3V0CisJCQl7CisJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOworCQkJCXZhbCAmPSAweDAwMDAwM0ZGOworCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOworCQkJfQorCisJCQlyZXN1bHQgPSBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA1MDAsIDQwMCk7CisJCQlpZiAocmVzdWx0ID4gMCkKKwkJCXsKKwkJCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQkJCXsKKwkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCQkJfQorCQkJCWVsc2UgLy8gMm5kLWN1dAorCQkJCXsKKwkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOworCQkJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CisJCQkJfQorCisKKwkJCQlyZXN1bHQgPSBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA3MDAsIDUwMCk7CisKKwkJCQlpZiAocmVzdWx0ID4gMCkKKwkJCQl7CisJCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb24+ICoqKioqKioqKioqKioqXG4iKSk7CisJCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIEZBSUxVUkUgISFcbiIpKTsKKwkJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKworCQkJCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQkJCQl7CisJCQkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCQkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQkJCQl9CisJCQkJCWVsc2UgLy8gMm5kLWN1dAorCQkJCQl7CisJCQkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCQkJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLy8gaS4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKwlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJLy8gZy4gRW5hYmxlIEFHQworCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZ2YWwpOworCXJlZ19hZ2NfY3RybDMgfD0gQklUKDIpOworCXJlZ19hZ2NfY3RybDMgJj0gfihNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKKworI2lmZGVmIF9ERUJVRworCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJeworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOworCQl0eF9jYWxfcmVnWzBdID0gX3M0X3RvX3MzMigodmFsICYgMHhGMDAwMDAwMCkgPj4gMjgpOworCQl0eF9jYWxfcmVnWzFdID0gX3M0X3RvX3MzMigodmFsICYgMHgwRjAwMDAwMCkgPj4gMjQpOworCQl0eF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMEYwMDAwMCkgPj4gMjApOworCQl0eF9jYWxfcmVnWzNdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDBGMDAwMCkgPj4gMTYpOworCX0KKwllbHNlIC8vIDJuZC1jdXQKKwl7CisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHgzQyA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCXR4X2NhbF9yZWdbMF0gPSBfczVfdG9fczMyKCh2YWwgJiAweEY4MDAwMDAwKSA+PiAyNyk7CisJCXR4X2NhbF9yZWdbMV0gPSBfczZfdG9fczMyKCh2YWwgJiAweDA3RTAwMDAwKSA+PiAyMSk7CisJCXR4X2NhbF9yZWdbMl0gPSBfczZfdG9fczMyKCh2YWwgJiAweDAwMUY4MDAwKSA+PiAxNSk7CisJCXR4X2NhbF9yZWdbM10gPSBfczVfdG9fczMyKCh2YWwgJiAweDAwMDA3QzAwKSA+PiAxMCk7CisKKwl9CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiB0eF9jYWxfcmVnWzBdID0gJWRcbiIsIHR4X2NhbF9yZWdbMF0pKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzFdID0gJWRcbiIsIHR4X2NhbF9yZWdbMV0pKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzJdID0gJWRcbiIsIHR4X2NhbF9yZWdbMl0pKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzNdID0gJWRcbiIsIHR4X2NhbF9yZWdbM10pKTsKKyNlbmRpZgorCisKKwkvLyBmb3IgdGVzdCAtIEJFTgorCS8vIFJGIENvbnRyb2wgT3ZlcnJpZGUKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3U4IF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTE2IGZhY3RvciwgdTMyIGZyZXF1ZW5jeSkKK3sKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJczMyICAgICBpcWNhbF90b25lX2k7CisJczMyICAgICBpcWNhbF90b25lX3E7CisJczMyICAgICBpcWNhbF9pbWFnZV9pOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfcTsKKwlzMzIgICAgIHJvdF90b25lX2lfYjsKKwlzMzIgICAgIHJvdF90b25lX3FfYjsKKwlzMzIgICAgIHJvdF9pbWFnZV9pX2I7CisJczMyICAgICByb3RfaW1hZ2VfcV9iOworCXMzMiAgICAgcnhfY2FsX2ZsdF9iWzRdOworCXMzMiAgICAgcnhfY2FsWzRdOworCXMzMiAgICAgcnhfY2FsX3JlZ1s0XTsKKwlzMzIgICAgIGFfMiwgYl8yOworCXMzMiAgICAgc2luX2IsIHNpbl8yYjsKKwlzMzIgICAgIGNvc19iLCBjb3NfMmI7CisJczMyICAgICB0ZW1wMSwgdGVtcDI7CisJdTMyICAgICB2YWw7CisJdTE2ICAgICBsb29wOworCisJdTMyICAgICBwd3JfdG9uZTsKKwl1MzIgICAgIHB3cl9pbWFnZTsKKwl1OCAgICAgIHZlcmlmeV9jb3VudDsKKworCXMzMiAgICAgaXFjYWxfdG9uZV9pX2F2ZyxpcWNhbF90b25lX3FfYXZnOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfaV9hdmcsaXFjYWxfaW1hZ2VfcV9hdmc7CisJdTE2CQljYXB0dXJlX3RpbWU7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBbNV1fcnhfaXFfY2FsaWJyYXRpb25fbG9vcCgpXG4iKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gKiogZmFjdG9yID0gJWRcbiIsIGZhY3RvcikpOworCisKKy8vIFJGIENvbnRyb2wgT3ZlcnJpZGUKKwlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgJnZhbCk7CisJdmFsIHw9IEJJVCgxOSk7CisJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsIHZhbCk7CisKKy8vIFJGX0N0cmwKKwlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHhFNCwgJnZhbCk7CisJdmFsIHw9IEJJVCgwKTsKKwlod19zZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHhFNCwgdmFsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSRl9DVFJMKDB4RTQpID0gMHglMDhYIiwgdmFsKSk7CisKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgMHg0NDQ0NDQ0NCk7IC8vIElRX0FscGhhCisKKwkvLyBiLgorCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwl2ZXJpZnlfY291bnQgPSAwOworCisJLy9mb3IgKGxvb3AgPSAwOyBsb29wIDwgMTsgbG9vcCsrKQorCS8vZm9yIChsb29wID0gMDsgbG9vcCA8IExPT1BfVElNRVM7IGxvb3ArKykKKwlsb29wID0gTE9PUF9USU1FUzsKKwl3aGlsZSAobG9vcCA+IDApCisJeworCQlQSFlfREVCVUcoKCJbQ0FMXSBbJWQuXSA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+XG4iLCAoTE9PUF9USU1FUy1sb29wKzEpKSk7CisJCWlxY2FsX3RvbmVfaV9hdmc9MDsKKwkJaXFjYWxfdG9uZV9xX2F2Zz0wOworCQlpcWNhbF9pbWFnZV9pX2F2Zz0wOworCQlpcWNhbF9pbWFnZV9xX2F2Zz0wOworCQljYXB0dXJlX3RpbWU9MDsKKworCQlmb3IoY2FwdHVyZV90aW1lPTA7IGNhcHR1cmVfdGltZTwxMDsgY2FwdHVyZV90aW1lKyspCisJCXsKKwkJLy8gaS4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwCisJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CisJCWlmKCAhaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpICkvLzIwMDYwNzE4LjEgbW9kaWZ5CisJCQlyZXR1cm4gMDsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0lRQ0FMX01PREU7CisJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgxKTsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOyAgLy9TaG91bGQgYmUgcmVhZCBvdXQgYWZ0ZXIgNDUwdXMKKworCQkvLyBjLgorCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQxLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWlxY2FsX3RvbmVfaSA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQlpcWNhbF90b25lX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF90b25lX2kgPSAlZCwgaXFjYWxfdG9uZV9xID0gJWRcbiIsCisJCQkJICAgaXFjYWxfdG9uZV9pLCBpcWNhbF90b25lX3EpKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxY2FsX2ltYWdlX2kgPSAlZCwgaXFjYWxfaW1hZ2VfcSA9ICVkXG4iLAorCQkJCSAgIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKKwkJCWlmKCBjYXB0dXJlX3RpbWUgPT0gMCkKKwkJCXsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpcWNhbF9pbWFnZV9pX2F2Zz0oIGlxY2FsX2ltYWdlX2lfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX2ltYWdlX2kpL2NhcHR1cmVfdGltZTsKKwkJCQlpcWNhbF9pbWFnZV9xX2F2Zz0oIGlxY2FsX2ltYWdlX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX2ltYWdlX3EpL2NhcHR1cmVfdGltZTsKKwkJCQlpcWNhbF90b25lX2lfYXZnPSggaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX2kpL2NhcHR1cmVfdGltZTsKKwkJCQlpcWNhbF90b25lX3FfYXZnPSggaXFjYWxfdG9uZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKKwkJCX0KKwkJfQorCisKKwkJaXFjYWxfaW1hZ2VfaSA9IGlxY2FsX2ltYWdlX2lfYXZnOworCQlpcWNhbF9pbWFnZV9xID0gaXFjYWxfaW1hZ2VfcV9hdmc7CisJCWlxY2FsX3RvbmVfaSA9IGlxY2FsX3RvbmVfaV9hdmc7CisJCWlxY2FsX3RvbmVfcSA9IGlxY2FsX3RvbmVfcV9hdmc7CisKKwkJLy8gZC4KKwkJcm90X3RvbmVfaV9iID0gKGlxY2FsX3RvbmVfaSAqIGlxY2FsX3RvbmVfaSArCisJCQkJCQlpcWNhbF90b25lX3EgKiBpcWNhbF90b25lX3EpIC8gMTAyNDsKKwkJcm90X3RvbmVfcV9iID0gKGlxY2FsX3RvbmVfaSAqIGlxY2FsX3RvbmVfcSAqICgtMSkgKworCQkJCQkJaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9pKSAvIDEwMjQ7CisJCXJvdF9pbWFnZV9pX2IgPSAoaXFjYWxfaW1hZ2VfaSAqIGlxY2FsX3RvbmVfaSAtCisJCQkJCQkgaXFjYWxfaW1hZ2VfcSAqIGlxY2FsX3RvbmVfcSkgLyAxMDI0OworCQlyb3RfaW1hZ2VfcV9iID0gKGlxY2FsX2ltYWdlX2kgKiBpcWNhbF90b25lX3EgKworCQkJCQkJIGlxY2FsX2ltYWdlX3EgKiBpcWNhbF90b25lX2kpIC8gMTAyNDsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfdG9uZV9pX2IgID0gJWRcbiIsIHJvdF90b25lX2lfYikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfdG9uZV9xX2IgID0gJWRcbiIsIHJvdF90b25lX3FfYikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfaW1hZ2VfaV9iID0gJWRcbiIsIHJvdF9pbWFnZV9pX2IpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X2ltYWdlX3FfYiA9ICVkXG4iLCByb3RfaW1hZ2VfcV9iKSk7CisKKwkJLy8gZi4KKwkJaWYgKHJvdF90b25lX2lfYiA9PSAwKQorCQl7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIHJvdF90b25lX2lfYj0wIHRvIGNhbGN1bGF0ZSBFUFMgYW5kIFRIRVRBICEhXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYV8yID0gKHJvdF9pbWFnZV9pX2IgKiAzMjc2OCkgLyByb3RfdG9uZV9pX2IgLQorCQkJcGh3X2RhdGEtPmlxX3JzZGxfZ2Fpbl90eF9kMjsKKwkJYl8yID0gKHJvdF9pbWFnZV9xX2IgKiAzMjc2OCkgLyByb3RfdG9uZV9pX2IgLQorCQkJcGh3X2RhdGEtPmlxX3JzZGxfcGhhc2VfdHhfZDI7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFfcnNkbF9nYWluX3R4X2QyID0gJWRcbiIsIHBod19kYXRhLT5pcV9yc2RsX2dhaW5fdHhfZDIpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFfcnNkbF9waGFzZV90eF9kMj0gJWRcbiIsIHBod19kYXRhLT5pcV9yc2RsX3BoYXNlX3R4X2QyKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqKioqIEVQU0lMT04vMiA9ICVkXG4iLCBhXzIpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKioqKiogVEhFVEEvMiAgID0gJWRcbiIsIGJfMikpOworCisJCV9zaW5fY29zKGJfMiwgJnNpbl9iLCAmY29zX2IpOworCQlfc2luX2NvcyhiXzIqMiwgJnNpbl8yYiwgJmNvc18yYik7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHNpbihiLzIpPSVkLCBjb3MoYi8yKT0lZFxuIiwgc2luX2IsIGNvc19iKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHNpbihiKT0lZCwgY29zKGIpPSVkXG4iLCBzaW5fMmIsIGNvc18yYikpOworCisJCWlmIChjb3NfMmIgPT0gMCkKKwkJeworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBjb3MoYik9MCAhIVxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8vIDEyODAgKiAzMjc2OCA9IDQxOTQzMDQwCisJCXRlbXAxID0gKDQxOTQzMDQwL2Nvc18yYikqY29zX2I7CisKKwkJLy90ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCXRlbXAyID0gKDQxOTQzMDQwL2Nvc18yYikqc2luX2IqKC0xKTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJdGVtcDIgPSAoNDE5NDMwNDAqNC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCX0KKworCQlyeF9jYWxfZmx0X2JbMF0gPSBfZmxvb3IodGVtcDEvKDMyNzY4K2FfMikpOworCQlyeF9jYWxfZmx0X2JbMV0gPSBfZmxvb3IodGVtcDIvKDMyNzY4LWFfMikpOworCQlyeF9jYWxfZmx0X2JbMl0gPSBfZmxvb3IodGVtcDIvKDMyNzY4K2FfMikpOworCQlyeF9jYWxfZmx0X2JbM10gPSBfZmxvb3IodGVtcDEvKDMyNzY4LWFfMikpOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJ4X2NhbF9mbHRfYlswXSA9ICVkXG4iLCByeF9jYWxfZmx0X2JbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX2ZsdF9iWzFdID0gJWRcbiIsIHJ4X2NhbF9mbHRfYlsxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfZmx0X2JbMl0gPSAlZFxuIiwgcnhfY2FsX2ZsdF9iWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9mbHRfYlszXSA9ICVkXG4iLCByeF9jYWxfZmx0X2JbM10pKTsKKworCQlyeF9jYWxbMF0gPSByeF9jYWxfZmx0X2JbMF0gLSAxMjg7CisJCXJ4X2NhbFsxXSA9IHJ4X2NhbF9mbHRfYlsxXTsKKwkJcnhfY2FsWzJdID0gcnhfY2FsX2ZsdF9iWzJdOworCQlyeF9jYWxbM10gPSByeF9jYWxfZmx0X2JbM10gLSAxMjg7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJ4X2NhbFswXSA9ICVkXG4iLCByeF9jYWxbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsWzFdID0gJWRcbiIsIHJ4X2NhbFsxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxbMl0gPSAlZFxuIiwgcnhfY2FsWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbFszXSA9ICVkXG4iLCByeF9jYWxbM10pKTsKKworCQkvLyBlLgorCQlwd3JfdG9uZSA9IChpcWNhbF90b25lX2kqaXFjYWxfdG9uZV9pICsgaXFjYWxfdG9uZV9xKmlxY2FsX3RvbmVfcSk7CisJCXB3cl9pbWFnZSA9IChpcWNhbF9pbWFnZV9pKmlxY2FsX2ltYWdlX2kgKyBpcWNhbF9pbWFnZV9xKmlxY2FsX2ltYWdlX3EpKmZhY3RvcjsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBwd3JfdG9uZSAgPSAlZFxuIiwgcHdyX3RvbmUpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcHdyX2ltYWdlICA9ICVkXG4iLCBwd3JfaW1hZ2UpKTsKKworCQlpZiAocHdyX3RvbmUgPiBwd3JfaW1hZ2UpCisJCXsKKwkJCXZlcmlmeV9jb3VudCsrOworCisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKioqKipcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIFZFUklGWSBPSyAjICVkICEhXG4iLCB2ZXJpZnlfY291bnQpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCisJCQlpZiAodmVyaWZ5X2NvdW50ID4gMikKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFJYX0lRX0NBTElCUkFUSU9OIE9LICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJY29udGludWU7CisJCX0KKwkJLy8gZy4KKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQlyeF9jYWxfcmVnWzBdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwRjAwMCkgPj4gMTIpOworCQkJcnhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDBGMDApID4+ICA4KTsKKwkJCXJ4X2NhbF9yZWdbMl0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwMEYwKSA+PiAgNCk7CisJCQlyeF9jYWxfcmVnWzNdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMDAwRikpOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQlyeF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOworCQkJcnhfY2FsX3JlZ1sxXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDdFMDAwMDApID4+IDIxKTsKKwkJCXJ4X2NhbF9yZWdbMl0gPSBfczZfdG9fczMyKCh2YWwgJiAweDAwMUY4MDAwKSA+PiAxNSk7CisJCQlyeF9jYWxfcmVnWzNdID0gX3M1X3RvX3MzMigodmFsICYgMHgwMDAwN0MwMCkgPj4gMTApOworCQl9CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcnhfY2FsX3JlZ1swXSA9ICVkXG4iLCByeF9jYWxfcmVnWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbMV0gPSAlZFxuIiwgcnhfY2FsX3JlZ1sxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfcmVnWzJdID0gJWRcbiIsIHJ4X2NhbF9yZWdbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1szXSA9ICVkXG4iLCByeF9jYWxfcmVnWzNdKSk7CisKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJaWYgKCgocnhfY2FsX3JlZ1swXT09NykgfHwgKHJ4X2NhbF9yZWdbMF09PSgtOCkpKSAmJgorCQkJCSgocnhfY2FsX3JlZ1szXT09NykgfHwgKHJ4X2NhbF9yZWdbM109PSgtOCkpKSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFJYX0lRX0NBTElCUkFUSU9OIFNBVFVBVElPTiAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCWlmICgoKHJ4X2NhbF9yZWdbMF09PTMxKSB8fCAocnhfY2FsX3JlZ1swXT09KC0zMikpKSAmJgorCQkJCSgocnhfY2FsX3JlZ1szXT09MzEpIHx8IChyeF9jYWxfcmVnWzNdPT0oLTMyKSkpKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogUlhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXJ4X2NhbFswXSA9IHJ4X2NhbFswXSArIHJ4X2NhbF9yZWdbMF07CisJCXJ4X2NhbFsxXSA9IHJ4X2NhbFsxXSArIHJ4X2NhbF9yZWdbMV07CisJCXJ4X2NhbFsyXSA9IHJ4X2NhbFsyXSArIHJ4X2NhbF9yZWdbMl07CisJCXJ4X2NhbFszXSA9IHJ4X2NhbFszXSArIHJ4X2NhbF9yZWdbM107CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGFwcGx5IHJ4X2NhbFswXSA9ICVkXG4iLCByeF9jYWxbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgcnhfY2FsWzFdID0gJWRcbiIsIHJ4X2NhbFsxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSByeF9jYWxbMl0gPSAlZFxuIiwgcnhfY2FsWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHJ4X2NhbFszXSA9ICVkXG4iLCByeF9jYWxbM10pKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCXZhbCAmPSAweDAwMDBGRkZGOworCQkJdmFsIHw9ICgoX3MzMl90b19zNChyeF9jYWxbMF0pIDw8IDEyKXwKKwkJCQkJKF9zMzJfdG9fczQocnhfY2FsWzFdKSA8PCAgOCl8CisJCQkJCShfczMyX3RvX3M0KHJ4X2NhbFsyXSkgPDwgIDQpfAorCQkJCQkoX3MzMl90b19zNChyeF9jYWxbM10pKSk7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQl2YWwgfD0gKChfczMyX3RvX3M1KHJ4X2NhbFswXSkgPDwgMjcpfAorCQkJCQkoX3MzMl90b19zNihyeF9jYWxbMV0pIDw8IDIxKXwKKwkJCQkJKF9zMzJfdG9fczYocnhfY2FsWzJdKSA8PCAxNSl8CisJCQkJCShfczMyX3RvX3M1KHJ4X2NhbFszXSkgPDwgMTApKTsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCisJCQlpZiggbG9vcCA9PSAzICkKKwkJCXJldHVybiAwOworCQl9CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIENBTElCX0RBVEEgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWxvb3AtLTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordm9pZCBfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQoreworLy8gZmlnbyAyMDA1MDUyMyBtYXJrZWQgdGhzaSBmbGFnIGZvciBjYW4ndCBjb21waWxlIGZvciByZWxlc2FzZQorI2lmZGVmIF9ERUJVRworCXMzMiAgICAgcnhfY2FsX3JlZ1s0XTsKKwl1MzIgICAgIHZhbDsKKyNlbmRpZgorCisJdTggICAgICByZXN1bHQ7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBbNV1fcnhfaXFfY2FsaWJyYXRpb24oKVxuIikpOworLy8gYS4gU2V0IFJGSUMgdG8gIlJYIGNhbGlicmF0aW9uIG1vZGUiCisJLy87IC0tLS0tIENhbGlicmF0aW9uICg3KS4gUlggcGF0aCBJUSBpbWJhbGFuY2UgY2FsaWJyYXRpb24gbG9vcAorCS8vCTB4MDEgMHhGRkJGQzIgIDsgM0ZFRkYgIDsgQ2FsaWJyYXRpb24gKDdhKS4gZW5hYmxlIFJYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRkJGQzIpOworCS8vCTB4MEIgMHgxQTAxRDYgIDsgMDY4MTcgIDsgQ2FsaWJyYXRpb24gKDdiKS4gZW5hYmxlIFJYIEkvUSBjYWwgbG9vcCBTVzEgY2lyY3VpdAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MUEwNUQ2KTsKKwkvLzB4MDUgMHgyNDg0OEEgIDsgMDkyMTIgIDsgQ2FsaWJyYXRpb24gKDdjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbiAoVFhHQ0gpIHRvIDIgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKDU8PDI0KXwgcGh3X2RhdGEtPnR4dmdhX3NldHRpbmdfZm9yX2NhbCk7CisJLy8weDA2IDB4MDY4NDBDICA7IDAxQTEwICA7IENhbGlicmF0aW9uICg3ZCkuIFJYR0NIPTAwOyBSWEdDTD0wMTAgMDAwIChSWFZHQSkgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDA2ODM0Qyk7CisJLy8weDAwIDB4RkZGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg3ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMCwgKDA8PDI0KXwweEZGRjFDMCk7CisKKwkvLyAgOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3ZikuIFNlbmQgdGVzdCBwYXR0ZXJuCisJLy8JOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3ZykuIFNlYXJjaCBSWEdDTCBvcHRpbWFsIHZhbHVlCisJLy8JOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3aCkuIENhY3VsYXRlIFJYLXBhdGggSVEgaW1iYWxhbmNlIGFuZCBzZXR0aW5nIFJYIHBhdGggSVEgY29tcGVuc2F0aW9uIHRhYmxlCisKKwlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCAxMjU4OSwgZnJlcXVlbmN5KTsKKworCWlmIChyZXN1bHQgPiAwKQorCXsKKwkJX3Jlc2V0X3J4X2NhbChwaHdfZGF0YSk7CisJCXJlc3VsdCA9IF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDc5NDMsIGZyZXF1ZW5jeSk7CisKKwkJaWYgKHJlc3VsdCA+IDApCisJCXsKKwkJCV9yZXNldF9yeF9jYWwocGh3X2RhdGEpOworCQkJcmVzdWx0ID0gX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNTAxMSwgZnJlcXVlbmN5KTsKKworCQkJaWYgKHJlc3VsdCA+IDApCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbj4gKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBGQUlMVVJFICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlfcmVzZXRfcnhfY2FsKHBod19kYXRhKTsKKwkJCX0KKwkJfQorCX0KKworI2lmZGVmIF9ERUJVRworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKKworCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJeworCQlyeF9jYWxfcmVnWzBdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwRjAwMCkgPj4gMTIpOworCQlyeF9jYWxfcmVnWzFdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMEYwMCkgPj4gIDgpOworCQlyeF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMDBGMCkgPj4gIDQpOworCQlyeF9jYWxfcmVnWzNdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMDAwRikpOworCX0KKwllbHNlIC8vIDJuZC1jdXQKKwl7CisJCXJ4X2NhbF9yZWdbMF0gPSBfczVfdG9fczMyKCh2YWwgJiAweEY4MDAwMDAwKSA+PiAyNyk7CisJCXJ4X2NhbF9yZWdbMV0gPSBfczZfdG9fczMyKCh2YWwgJiAweDA3RTAwMDAwKSA+PiAyMSk7CisJCXJ4X2NhbF9yZWdbMl0gPSBfczZfdG9fczMyKCh2YWwgJiAweDAwMUY4MDAwKSA+PiAxNSk7CisJCXJ4X2NhbF9yZWdbM10gPSBfczVfdG9fczMyKCh2YWwgJiAweDAwMDA3QzAwKSA+PiAxMCk7CisJfQorCisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcnhfY2FsX3JlZ1swXSA9ICVkXG4iLCByeF9jYWxfcmVnWzBdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1sxXSA9ICVkXG4iLCByeF9jYWxfcmVnWzFdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1syXSA9ICVkXG4iLCByeF9jYWxfcmVnWzJdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1szXSA9ICVkXG4iLCByeF9jYWxfcmVnWzNdKSk7CisjZW5kaWYKKworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3sKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJdTMyICAgICBpcV9hbHBoYTsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKClcbiIpKTsKKworCS8vIDIwMDQwNzAxIDEuMS4yNS4xMDAwIGtldmluCisJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsICZtYWNfY3RybCk7CisJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsICZyZl9jdHJsKTsKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgJmlxX2FscGhhKTsKKworCisKKwlfcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHBod19kYXRhLCBmcmVxdWVuY3kpOworCS8vX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOworCS8vX3R4cWRhY19kY19vZmZzZXRfY2FjZWxsYXRpb25fd2luYm9uZChwaHdfZGF0YSk7CisKKwlfdHhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChwaHdfZGF0YSk7CisJX3J4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQocGh3X2RhdGEsIGZyZXF1ZW5jeSk7CisKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFfE1BU0tfQ0FMSUJfU1RBUlQpOyAvLyBzZXQgd2hlbiBmaW5pc2gKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCS8vIGkuIFNldCBSRklDIHRvICJOb3JtYWwgbW9kZSIKKwlod19zZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgbWFjX2N0cmwpOworCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweEU0LCByZl9jdHJsKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgaXFfYWxwaGEpOworCisKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXBoeV9pbml0X3JmKHBod19kYXRhKTsKKworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBwaHlfc2V0X3JmX2RhdGEoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgaW5kZXgsICB1MzIgdmFsdWUgKQoreworICAgdTMyIGx0bXA9MDsKKworICAgIHN3aXRjaCggcEh3RGF0YS0+cGh5X3R5cGUgKQorCXsKKwkJY2FzZSBSRl9NQVhJTV8yODI1OgorCQljYXNlIFJGX01BWElNX1YxOiAvLyAxMWcgV2luYm9uZCAybmQgQkIod2l0aCBQaHkgYm9hcmQgKHYxKSArIE1heGltIDMzMSkKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjc6CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9NQVhJTV8yODI4OgorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMTggKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyOToKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV8yMjMwOgorCQljYXNlIFJGX0FJUk9IQV8yMjMwUzogLy8gMjAwNjA0MjAgQWRkIHRoaXMKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDIwICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV83MjMwOgorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAodmFsdWUmMHhmZmZmZmYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9XQl8yNDI6CisJCWNhc2UgUkZfV0JfMjQyXzE6IC8vIDIwMDYwNjE5LjUgQWRkCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAyNCApOworCQkJYnJlYWs7CisJfQorCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworfQorCisvLyAyMDA2MDcxNyBtb2RpZnkgYXMgQnJ1Y2UncyBtYWlsCit1bnNpZ25lZCBjaGFyIGFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit7CisJaW50IGluaXRfdHh2Z2EgPSAwOworCXUzMiAgICAgcmVnX21vZGVfY3RybDsKKwl1MzIgICAgIHZhbDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaTA7CisJczMyICAgICBpcWNhbF90b25lX3EwOworCXUzMiAgICAgc3FzdW07CisJczMyICAgICBpcV9tYWdfMF90eDsKKwl1OAkJcmVnX3N0YXRlOworCWludAkJY3VycmVudF90eHZnYTsKKworCisJcmVnX3N0YXRlID0gMDsKKwlmb3IoIGluaXRfdHh2Z2E9MDsgaW5pdF90eHZnYTwxMDsgaW5pdF90eHZnYSsrKQorCXsKKwkJY3VycmVudF90eHZnYSA9ICggMHgyNEM0MEF8KGluaXRfdHh2Z2E8PDYpICk7CisJCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKCg1PDwyNCl8Y3VycmVudF90eHZnYSkgKTsKKwkJcGh3X2RhdGEtPnR4dmdhX3NldHRpbmdfZm9yX2NhbCA9IGN1cnJlbnRfdHh2Z2E7CisKKwkJLy9wYV9zdGFsbF9leGVjdXRpb24oMzAwMDApOy8vU2xlZXAoMzApOworCQlPU19TTEVFUCgzMDAwMCk7IC8vIDIwMDYwNjEyLjEuYQorCisJCWlmKCAhaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKSApIC8vIDIwMDYwNzE4LjEgbW9kaWZ5CisJCQlyZXR1cm4gRkFMU0U7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJCS8vIGEuIFNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgyIGFuZCBzZXQgImNhbGliX3N0YXJ0IiB0byAweDEgdG8KKwkJLy8gICAgZW5hYmxlICJJUSBhbGlicmF0aW9uIE1vZGUgSUkiCisJCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CisJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfSVFDQUxfTU9ERTsKKwkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAyKTsKKwkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAyfDI8PDIpOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkJLy9wYV9zdGFsbF9leGVjdXRpb24oVVMpOworCQlPU19TTEVFUCgxKTsgLy8gMjAwNjA2MTIuMS5hCisKKwkJLy9wYV9zdGFsbF9leGVjdXRpb24oMzAwKTsvL1NsZWVwKDMwKTsKKwkJT1NfU0xFRVAoMzAwKTsgLy8gMjAwNjA2MTIuMS5hCisKKwkJLy8gYi4KKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOworCQkvL3BhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKDMwMCk7Ly9TbGVlcCgzMCk7CisJCU9TX1NMRUVQKDMwMCk7IC8vIDIwMDYwNjEyLjEuYQorCisJCWlxY2FsX3RvbmVfaTAgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfdG9uZV9xMCA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxY2FsX3RvbmVfaTA9JWQsIGlxY2FsX3RvbmVfcTA9JWRcbiIsCisJCQkJICAgaXFjYWxfdG9uZV9pMCwgaXFjYWxfdG9uZV9xMCkpOworCisJCXNxc3VtID0gaXFjYWxfdG9uZV9pMCppcWNhbF90b25lX2kwICsgaXFjYWxfdG9uZV9xMCppcWNhbF90b25lX3EwOworCQlpcV9tYWdfMF90eCA9IChzMzIpIF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYXV0b19hZGp1c3RfdHh2Z2FfZm9yX2lxX21hZ18wX3R4PSVkXG4iLCBpcV9tYWdfMF90eCkpOworCisJCWlmKCBpcV9tYWdfMF90eD49NzAwICYmIGlxX21hZ18wX3R4PD0xNzUwICkKKwkJCWJyZWFrOworCQllbHNlIGlmKGlxX21hZ18wX3R4ID4gMTc1MCkKKwkJeworCQkJaW5pdF90eHZnYT0tMjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJfQorCisJaWYoIGlxX21hZ18wX3R4Pj03MDAgJiYgaXFfbWFnXzBfdHg8PTE3NTAgKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhNjVkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCkBAIC0wLDAgKzEsMTAxIEBACisvLyAyMDAzMTIyOSBUdXJibyBhZGQKKyNkZWZpbmUgUkVHX0FHQ19DVFJMMSAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBSRUdfQUdDX0NUUkwyICAgICAgICAgICAgICAgMHgxMDA0CisjZGVmaW5lIFJFR19BR0NfQ1RSTDMgICAgICAgICAgICAgICAweDEwMDgKKyNkZWZpbmUgUkVHX0FHQ19DVFJMNCAgICAgICAgICAgICAgIDB4MTAwQworI2RlZmluZSBSRUdfQUdDX0NUUkw1ICAgICAgICAgICAgICAgMHgxMDEwCisjZGVmaW5lIFJFR19BR0NfQ1RSTDYgICAgICAgICAgICAgICAweDEwMTQKKyNkZWZpbmUgUkVHX0FHQ19DVFJMNyAgICAgICAgICAgICAgIDB4MTAxOAorI2RlZmluZSBSRUdfQUdDX0NUUkw4ICAgICAgICAgICAgICAgMHgxMDFDCisjZGVmaW5lIFJFR19BR0NfQ1RSTDkgICAgICAgICAgICAgICAweDEwMjAKKyNkZWZpbmUgUkVHX0FHQ19DVFJMMTAgICAgICAgICAgICAgIDB4MTAyNAorI2RlZmluZSBSRUdfQ0NBX0NUUkwgICAgICAgICAgICAgICAgMHgxMDI4CisjZGVmaW5lIFJFR19BX0FDUV9DVFJMICAgICAgICAgICAgICAweDEwMkMKKyNkZWZpbmUgUkVHX0JfQUNRX0NUUkwgICAgICAgICAgICAgIDB4MTAzMAorI2RlZmluZSBSRUdfQV9UWFJYX0NUUkwgICAgICAgICAgICAgMHgxMDM0CisjZGVmaW5lIFJFR19CX1RYUlhfQ1RSTCAgICAgICAgICAgICAweDEwMzgKKyNkZWZpbmUgUkVHX0FfVFhfQ09FRjMgICAgICAgICAgICAgIDB4MTAzQworI2RlZmluZSBSRUdfQV9UWF9DT0VGMiAgICAgICAgICAgICAgMHgxMDQwCisjZGVmaW5lIFJFR19BX1RYX0NPRUYxICAgICAgICAgICAgICAweDEwNDQKKyNkZWZpbmUgUkVHX0JfVFhfQ09FRjIgICAgICAgICAgICAgIDB4MTA0OAorI2RlZmluZSBSRUdfQl9UWF9DT0VGMSAgICAgICAgICAgICAgMHgxMDRDCisjZGVmaW5lIFJFR19NT0RFX0NUUkwgICAgICAgICAgICAgICAweDEwNTAKKyNkZWZpbmUgUkVHX0NBTElCX0RBVEEgICAgICAgICAgICAgIDB4MTA1NAorI2RlZmluZSBSRUdfSVFfQUxQSEEgICAgICAgICAgICAgICAgMHgxMDU4CisjZGVmaW5lIFJFR19EQ19DQU5DRUwgICAgICAgICAgICAgICAweDEwNUMKKyNkZWZpbmUgUkVHX1dUT19SRUFEICAgICAgICAgICAgICAgIDB4MTA2MAorI2RlZmluZSBSRUdfT0ZGU0VUX1JFQUQgICAgICAgICAgICAgMHgxMDY0CisjZGVmaW5lIFJFR19DQUxJQl9SRUFEMSAgICAgICAgICAgICAweDEwNjgKKyNkZWZpbmUgUkVHX0NBTElCX1JFQUQyICAgICAgICAgICAgIDB4MTA2QworI2RlZmluZSBSRUdfQV9GUkVRX0VTVCAgICAgICAgICAgICAgMHgxMDcwCisKKworCisKKy8vICAyMDAzMTEwMSBUdXJibyBhZGQKKyNkZWZpbmUgTUFTS19BTUVSX09GRl9SRUcgICAgICAgICAgQklUKDMxKQorCisjZGVmaW5lIE1BU0tfQk1FUl9PRkZfUkVHICAgICAgICAgIEJJVCgzMSkKKworI2RlZmluZSBNQVNLX0xOQV9GSVhfR0FJTiAgICAgICAgICAoQklUKDMpfEJJVCg0KSkKKyNkZWZpbmUgTUFTS19BR0NfRklYICAgICAgICAgICAgICAgQklUKDEpCisKKyNkZWZpbmUgTUFTS19BR0NfRklYX0dBSU4gICAgICAgICAgMHhGRjAwCisKKyNkZWZpbmUgTUFTS19BRENfRENfQ0FMX1NUUiAgICAgICAgQklUKDEwKQorI2RlZmluZSBNQVNLX0NBTElCX1NUQVJUICAgICAgICAgICBCSVQoNCkKKyNkZWZpbmUgTUFTS19JUUNBTF9UT05FX1NFTCAgICAgICAgKEJJVCgzKXxCSVQoMikpCisjZGVmaW5lIE1BU0tfSVFDQUxfTU9ERSAgICAgICAgICAgIChCSVQoMSl8QklUKDApKQorCisjZGVmaW5lIE1BU0tfVFhfQ0FMXzAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgVFhfQ0FMXzBfU0hJRlQgICAgICAgICAgICAgMjgKKyNkZWZpbmUgTUFTS19UWF9DQUxfMSAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBUWF9DQUxfMV9TSElGVCAgICAgICAgICAgICAyNAorI2RlZmluZSBNQVNLX1RYX0NBTF8yICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIFRYX0NBTF8yX1NISUZUICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1BU0tfVFhfQ0FMXzMgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgVFhfQ0FMXzNfU0hJRlQgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTUFTS19SWF9DQUxfMCAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBSWF9DQUxfMF9TSElGVCAgICAgICAgICAgICAxMgorI2RlZmluZSBNQVNLX1JYX0NBTF8xICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIFJYX0NBTF8xX1NISUZUICAgICAgICAgICAgIDgKKyNkZWZpbmUgTUFTS19SWF9DQUxfMiAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBSWF9DQUxfMl9TSElGVCAgICAgICAgICAgICA0CisjZGVmaW5lIE1BU0tfUlhfQ0FMXzMgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgUlhfQ0FMXzNfU0hJRlQgICAgICAgICAgICAgMAorCisjZGVmaW5lIE1BU0tfQ0FOQ0VMX0RDX0kgICAgICAgICAgIDB4M0UwCisjZGVmaW5lIENBTkNFTF9EQ19JX1NISUZUICAgICAgICAgIDUKKyNkZWZpbmUgTUFTS19DQU5DRUxfRENfUSAgICAgICAgICAgMHgwMUYKKyNkZWZpbmUgQ0FOQ0VMX0RDX1FfU0hJRlQgICAgICAgICAgMAorCisvLyBMQTIwMDQwMjEwIGtldmluCisvLyNkZWZpbmUgTUFTS19BRENfRENfQ0FMX0koeCkgICAgICAgKCgoeCkmMHgxRkUwMCk+PjkpCisvLyNkZWZpbmUgTUFTS19BRENfRENfQ0FMX1EoeCkgICAgICAgKCh4KSYweDFGRikKKyNkZWZpbmUgTUFTS19BRENfRENfQ0FMX0koeCkgICAgICAgKCgoeCkmMHgwMDAzRkUwMCk+PjkpCisjZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9RKHgpICAgICAgICgoeCkmMHgwMDAwMDFGRikKKworLy8gTEEyMDA0MDIxMCBrZXZpbiAoVHVyYm8gaGFzIHdyb25nIGRlZmluaXRpb24pCisvLyNkZWZpbmUgTUFTS19JUUNBTF9UT05FX0kgICAgICAgICAgMHg3RkZDMDAwCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfVE9ORV9JKHgpICAgICAgKCh4KT4+MTMpCisvLyNkZWZpbmUgTUFTS19JUUNBTF9UT05FX1EgICAgICAgICAgMHgxRkZGCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfVE9ORV9RKHgpICAgICAgKCh4KT4+MCkKKyNkZWZpbmUgTUFTS19JUUNBTF9UT05FX0kgICAgICAgICAgMHgwMDAwMUZGRgorI2RlZmluZSBTSElGVF9JUUNBTF9UT05FX0koeCkgICAgICAoKHgpPj4wKQorI2RlZmluZSBNQVNLX0lRQ0FMX1RPTkVfUSAgICAgICAgICAweDAzRkZFMDAwCisjZGVmaW5lIFNISUZUX0lRQ0FMX1RPTkVfUSh4KSAgICAgICgoeCk+PjEzKQorCisvLyBMQTIwMDQwMjEwIGtldmluIChUdXJibyBoYXMgd3JvbmcgZGVmaW5pdGlvbikKKy8vI2RlZmluZSBNQVNLX0lRQ0FMX0lNQUdFX0kgICAgICAgICAweDdGRkMwMDAKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9JTUFHRV9JKHgpICAgICAoKHgpPj4xMykKKy8vI2RlZmluZSBNQVNLX0lRQ0FMX0lNQUdFX1EgICAgICAgICAweDFGRkYKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9JTUFHRV9RKHgpICAgICAoKHgpPj4wKQorCisvLyNkZWZpbmUgTUFTS19JUUNBTF9JTUFHRV9JICAgICAgICAgMHgwMDAwMUZGRgorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX0lNQUdFX0koeCkgICAgICgoeCk+PjApCisvLyNkZWZpbmUgTUFTS19JUUNBTF9JTUFHRV9RICAgICAgICAgMHgwM0ZGRTAwMAorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX0lNQUdFX1EoeCkgICAgICgoeCk+PjEzKQorCit2b2lkIHBoeV9zZXRfcmZfZGF0YSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApOworI2RlZmluZSBwaHlfaW5pdF9yZiggX0EgKQkvL1JGU3ludGhlc2l6ZXJfaW5pdGlhbCggX0EgKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YWY1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYwpAQCAtMCwwICsxLDI2ODMgQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBPcmlnaW5hbCBQaHkuaAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzsgRm9yIE1BWElNMjgyNS82LzcgVmVyLiAzMzEgb3IgbW9yZQorOyBFZGl0ZWQgYnkgVGlnZXIsIFNlcC0xNy0yMDAzCis7IHJldmlzZWQgYnkgQmVuLCBTZXAtMTgtMjAwMworCisweDAwIDB4MDAwYTIKKzB4MDEgMHgyMWNjMAorOzB4MDIgMHgxMzgwMgorMHgwMiAweDEzODNhCisKKztjaGFubmUxIDAxIDsgMHgwMyAweDMwMTQyIDsgMHgwNCAweDBiMzMzOworO2NoYW5uZTEgMDIgOzB4MDMgMHgzMjE0MSA7MHgwNCAweDA4NDQ0OworO2NoYW5uZTEgMDMgOzB4MDMgMHgzMjE0MyA7MHgwNCAweDBhZWVlOworO2NoYW5uZTEgMDQgOzB4MDMgMHgzMjE0MiA7MHgwNCAweDBiMzMzOworO2NoYW5uZTEgMDUgOzB4MDMgMHgzMTE0MSA7MHgwNCAweDA4NDQ0OworO2NoYW5uZTEgMDYgOworMHgwMyAweDMxMTQzOworMHgwNCAweDBhZWVlOworO2NoYW5uZTEgMDcgOzB4MDMgMHgzMTE0MiA7MHgwNCAweDBiMzMzOworO2NoYW5uZTEgMDggOzB4MDMgMHgzMzE0MSA7MHgwNCAweDA4NDQ0OworO2NoYW5uZTEgMDkgOzB4MDMgMHgzMzE0MyA7MHgwNCAweDBhZWVlOworO2NoYW5uZTEgMTAgOzB4MDMgMHgzMzE0MiA7MHgwNCAweDBiMzMzOworO2NoYW5uZTEgMTEgOzB4MDMgMHgzMDk0MSA7MHgwNCAweDA4NDQ0OworO2NoYW5uZTEgMTIgOzB4MDMgMHgzMDk0MyA7MHgwNCAweDBhZWVlOworO2NoYW5uZTEgMTMgOzB4MDMgMHgzMDk0MiA7MHgwNCAweDBiMzMzOworCisweDA1IDB4Mjg5ODYKKzB4MDYgMHgxODAwOAorMHgwNyAweDM4NDAwCisweDA4IDB4MDUxMDA7IDEwMCBIeiBEQworOzB4MDggMHgwNTkwMDsgMzAgS0h6IERDCisweDA5IDB4MjRmMDgKKzB4MGEgMHgxN2UwMCwgMHgxN2VhMAorMHgwYiAweDM3ZDgwCisweDBjIDB4MGM5MDAgLy8gMHgwY2EwMCAobGFnZXIgcG93ZXIgOWRiIHRoYW4gMHgwYzAwMCksIDB4MGMwMDAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTUFYMjgyNSAocHVyZSBiL2cpCit1MzIgbWF4MjgyNV9yZl9kYXRhW10gPQoreworICAgICgweDAwPDwxOCl8MHgwMDBhMiwKKyAgICAoMHgwMTw8MTgpfDB4MjFjYzAsCisgICAgKDB4MDI8PDE4KXwweDEzODA2LAorICAgICgweDAzPDwxOCl8MHgzMDE0MiwKKyAgICAoMHgwNDw8MTgpfDB4MGIzMzMsCisgICAgKDB4MDU8PDE4KXwweDI4OUE2LAorICAgICgweDA2PDwxOCl8MHgxODAwOCwKKyAgICAoMHgwNzw8MTgpfDB4MzgwMDAsCisgICAgKDB4MDg8PDE4KXwweDA1MTAwLAorICAgICgweDA5PDwxOCl8MHgyNGYwOCwKKyAgICAoMHgwQTw8MTgpfDB4MTQwMDAsCisgICAgKDB4MEI8PDE4KXwweDM3ZDgwLAorICAgICgweDBDPDwxOCl8MHgwYzEwMCAgIC8vIDExYTogMHgwYzMwMCwgMTFnOiAweDBjMTAwCit9OworCit1MzIgbWF4MjgyNV9jaGFubmVsX2RhdGFfMjRbXVszXSA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzMDE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwxOCl8MHgzMjE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwxOCl8MHgzMjE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwxOCl8MHgzMjE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwxOCl8MHgzMTE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwxOCl8MHgzMTE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwxOCl8MHgzMTE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwxOCl8MHgzMzE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwxOCl8MHgzMzE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwxOCl8MHgzMzE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwxOCl8MHgzMDk0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwxOCl8MHgzMDk0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwxOCl8MHgzMDk0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEzCisgICAgeygweDAzPDwxOCl8MHgzMjk0MSwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9IC8vIDE0ICgyNDg0TUh6KSBoaG1vZGlmeQorfTsKKwordTMyIG1heDI4MjVfcG93ZXJfZGF0YV8yNFtdID0geygweDBDPDwxOCl8MHgwYzAwMCwgKDB4MEM8PDE4KXwweDBjMTAwfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBNQVgyODI3IChhL2IvZykKK3UzMiBtYXgyODI3X3JmX2RhdGFbXSA9Cit7CisgICAgKDB4MDA8PDE4KXwweDAwMGEyLAorICAgICgweDAxPDwxOCl8MHgyMWNjMCwKKyAgICAoMHgwMjw8MTgpfDB4MTM4MDYsCisgICAgKDB4MDM8PDE4KXwweDMwMTQyLAorICAgICgweDA0PDwxOCl8MHgwYjMzMywKKyAgICAoMHgwNTw8MTgpfDB4Mjg5QTYsCisgICAgKDB4MDY8PDE4KXwweDE4MDA4LAorICAgICgweDA3PDwxOCl8MHgzODAwMCwKKyAgICAoMHgwODw8MTgpfDB4MDUxMDAsCisgICAgKDB4MDk8PDE4KXwweDI0ZjA4LAorICAgICgweDBBPDwxOCl8MHgxNDAwMCwKKyAgICAoMHgwQjw8MTgpfDB4MzdkODAsCisgICAgKDB4MEM8PDE4KXwweDBjMTAwICAgLy8gMTFhOiAweDBjMzAwLCAxMWc6IDB4MGMxMDAKK307CisKK3UzMiBtYXgyODI3X2NoYW5uZWxfZGF0YV8yNFtdWzNdID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMwMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTMKKyAgICB7KDB4MDM8PDE4KXwweDMyOTQxLCAoMHgwNDw8MTgpfDB4MDk5OTksICgweDA1PDwxOCl8MHgyODlBNn0gIC8vIDE0ICgyNDg0TUh6KSBoaG1vZGlmeQorfTsKKwordTMyIG1heDI4MjdfY2hhbm5lbF9kYXRhXzUwW11bM10gPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzNjYzMsICgweDA0PDwxOCl8MHgwOGNjYywgKDB4MDU8PDE4KXwweDJBOUE2fSwgLy8gY2hhbm5lbCAzNgorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDJBOUE2fSwgLy8gY2hhbm5lbCA0MAorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDJBOUE2fSwgLy8gY2hhbm5lbCA0NAorICAgIHsoMHgwMzw8MTgpfDB4MzIyYzEsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDJBOUE2fSwgLy8gY2hhbm5lbCA0OAorICAgIHsoMHgwMzw8MTgpfDB4MzEyYzEsICgweDA0PDwxOCl8MHgwYTY2NiwgKDB4MDU8PDE4KXwweDJBOUE2fSwgLy8gY2hhbm5lbCA1MgorICAgIHsoMHgwMzw8MTgpfDB4MzMyYzMsICgweDA0PDwxOCl8MHgwOGNjYywgKDB4MDU8PDE4KXwweDJBOUE2fSwgLy8gY2hhbm5lbCA1NgorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDJBOUE2fSwgLy8gY2hhbm5lbCA2MAorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDJBOUE2fSAvLyBjaGFubmVsIDY0Cit9OworCit1MzIgbWF4MjgyN19wb3dlcl9kYXRhXzI0W10gPSB7KDB4MEM8PDE4KXwweDBDMDAwLCAoMHgwQzw8MTgpfDB4MEQ2MDAsICgweDBDPDwxOCl8MHgwQzEwMH07Cit1MzIgbWF4MjgyN19wb3dlcl9kYXRhXzUwW10gPSB7KDB4MEM8PDE4KXwweDBDNDAwLCAoMHgwQzw8MTgpfDB4MEQ1MDAsICgweDBDPDwxOCl8MHgwQzMwMH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTUFYMjgyOCAoYS9iL2cpCit1MzIgbWF4MjgyOF9yZl9kYXRhW10gPQoreworICAgICgweDAwPDwxOCl8MHgwMDBhMiwKKyAgICAoMHgwMTw8MTgpfDB4MjFjYzAsCisgICAgKDB4MDI8PDE4KXwweDEzODA2LAorICAgICgweDAzPDwxOCl8MHgzMDE0MiwKKyAgICAoMHgwNDw8MTgpfDB4MGIzMzMsCisgICAgKDB4MDU8PDE4KXwweDI4OUE2LAorICAgICgweDA2PDwxOCl8MHgxODAwOCwKKyAgICAoMHgwNzw8MTgpfDB4MzgwMDAsCisgICAgKDB4MDg8PDE4KXwweDA1MTAwLAorICAgICgweDA5PDwxOCl8MHgyNGYwOCwKKyAgICAoMHgwQTw8MTgpfDB4MTQwMDAsCisgICAgKDB4MEI8PDE4KXwweDM3ZDgwLAorICAgICgweDBDPDwxOCl8MHgwYzEwMCAgIC8vIDExYTogMHgwYzMwMCwgMTFnOiAweDBjMTAwCit9OworCit1MzIgbWF4MjgyOF9jaGFubmVsX2RhdGFfMjRbXVszXSA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzMDE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwxOCl8MHgzMjE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwxOCl8MHgzMjE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwxOCl8MHgzMjE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwxOCl8MHgzMTE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwxOCl8MHgzMTE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwxOCl8MHgzMTE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwxOCl8MHgzMzE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwxOCl8MHgzMzE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwxOCl8MHgzMzE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwxOCl8MHgzMDk0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwxOCl8MHgzMDk0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwxOCl8MHgzMDk0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEzCisgICAgeygweDAzPDwxOCl8MHgzMjk0MSwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9ICAvLyAxNCAoMjQ4NE1IeikgaGhtb2RpZnkKK307CisKK3UzMiBtYXgyODI4X2NoYW5uZWxfZGF0YV81MFtdWzNdID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMzY2MzLCAoMHgwNDw8MTgpfDB4MDhjY2MsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZWwgMzYKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZWwgNDAKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZWwgNDQKKyAgICB7KDB4MDM8PDE4KXwweDMyMmMxLCAoMHgwNDw8MTgpfDB4MDk5OTksICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZWwgNDgKKyAgICB7KDB4MDM8PDE4KXwweDMxMmMxLCAoMHgwNDw8MTgpfDB4MGE2NjYsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZWwgNTIKKyAgICB7KDB4MDM8PDE4KXwweDMzMmMzLCAoMHgwNDw8MTgpfDB4MDhjY2MsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZWwgNTYKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZWwgNjAKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0gLy8gY2hhbm5lbCA2NAorfTsKKwordTMyIG1heDI4MjhfcG93ZXJfZGF0YV8yNFtdID0geygweDBDPDwxOCl8MHgwYzAwMCwgKDB4MEM8PDE4KXwweDBjMTAwfTsKK3UzMiBtYXgyODI4X3Bvd2VyX2RhdGFfNTBbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTEEyMDA0MDcyOCBrZXZpbgorLy8gTUFYMjgyOSAoYS9iL2cpCit1MzIgbWF4MjgyOV9yZl9kYXRhW10gPQoreworICAgICgweDAwPDwxOCl8MHgwMDBhMiwKKyAgICAoMHgwMTw8MTgpfDB4MjM1MjAsCisgICAgKDB4MDI8PDE4KXwweDEzODAyLAorICAgICgweDAzPDwxOCl8MHgzMDE0MiwKKyAgICAoMHgwNDw8MTgpfDB4MGIzMzMsCisgICAgKDB4MDU8PDE4KXwweDI4OTA2LAorICAgICgweDA2PDwxOCl8MHgxODAwOCwKKyAgICAoMHgwNzw8MTgpfDB4M0I1MDAsCisgICAgKDB4MDg8PDE4KXwweDA1MTAwLAorICAgICgweDA5PDwxOCl8MHgyNGYwOCwKKyAgICAoMHgwQTw8MTgpfDB4MTQwMDAsCisgICAgKDB4MEI8PDE4KXwweDM3ZDgwLAorICAgICgweDBDPDwxOCl8MHgwRjMwMCAvL1RYVkdBPTUxLCAoTUFYLTYgZEIpCit9OworCit1MzIgbWF4MjgyOV9jaGFubmVsX2RhdGFfMjRbXVszXSA9Cit7CisgICAgeygzPDwxOCl8MHgzMDE0MiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDEgKDI0MTJNSHopCisgICAgeygzPDwxOCl8MHgzMjE0MSwgKDQ8PDE4KXwweDA4NDQ0LCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDIgKDI0MTdNSHopCisgICAgeygzPDwxOCl8MHgzMjE0MywgKDQ8PDE4KXwweDBhZWVlLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDMgKDI0MjJNSHopCisgICAgeygzPDwxOCl8MHgzMjE0MiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDQgKDI0MjdNSHopCisgICAgeygzPDwxOCl8MHgzMTE0MSwgKDQ8PDE4KXwweDA4NDQ0LCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDUgKDI0MzJNSHopCisgICAgeygzPDwxOCl8MHgzMTE0MywgKDQ8PDE4KXwweDBhZWVlLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDYgKDI0MzdNSHopCisgICAgeygzPDwxOCl8MHgzMTE0MiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDcgKDI0NDJNSHopCisgICAgeygzPDwxOCl8MHgzMzE0MSwgKDQ8PDE4KXwweDA4NDQ0LCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDggKDI0NDdNSHopCisgICAgeygzPDwxOCl8MHgzMzE0MywgKDQ8PDE4KXwweDBhZWVlLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMDkgKDI0NTJNSHopCisgICAgeygzPDwxOCl8MHgzMzE0MiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMTAgKDI0NTdNSHopCisgICAgeygzPDwxOCl8MHgzMDk0MSwgKDQ8PDE4KXwweDA4NDQ0LCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMTEgKDI0NjJNSHopCisgICAgeygzPDwxOCl8MHgzMDk0MywgKDQ8PDE4KXwweDBhZWVlLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMTIgKDI0NjdNSHopCisgICAgeygzPDwxOCl8MHgzMDk0MiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMTMgKDI0NzJNSHopCisgICAgeygzPDwxOCl8MHgzMjk0MSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4Mjg5QzZ9LCAgLy8gMTQgKDI0ODRNSHopIGhoLW1vZGlmeQorfTsKKwordTMyIG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwW11bNF0gPQoreworICAgICB7MzYsICgzPDwxOCl8MHgzM2NjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAzNiAoNS4xODBHSHopCisgICAgIHs0MCwgKDM8PDE4KXwweDMwMmMwLCAoNDw8MTgpfDB4MDgwMDAsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDQwICg1LjIwMEdIeikKKyAgICAgezQ0LCAoMzw8MTgpfDB4MzAyYzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNDQgKDUuMjIwR0h6KQorICAgICB7NDgsICgzPDwxOCl8MHgzMjJjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA0OCAoNS4yNDBHSHopCisgICAgIHs1MiwgKDM8PDE4KXwweDMxMmMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDUyICg1LjI2MEdIeikKKyAgICAgezU2LCAoMzw8MTgpfDB4MzMyYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNTYgKDUuMjgwR0h6KQorICAgICB7NjAsICgzPDwxOCl8MHgzMGFjMCwgKDQ8PDE4KXwweDA4MDAwLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA2MCAoNS4zMDBHSHopCisgICAgIHs2NCwgKDM8PDE4KXwweDMwYWMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDY0ICg1LjMyMEdIeikKKworICAgIHsxMDAsICgzPDwxOCl8MHgzMGVjMCwgKDQ8PDE4KXwweDA4MDAwLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMDAgKDUuNTAwR0h6KQorICAgIHsxMDQsICgzPDwxOCl8MHgzMGVjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMDQgKDUuNTIwR0h6KQorICAgIHsxMDgsICgzPDwxOCl8MHgzMmVjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMDggKDUuNTQwR0h6KQorICAgIHsxMTIsICgzPDwxOCl8MHgzMWVjMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMTIgKDUuNTYwR0h6KQorICAgIHsxMTYsICgzPDwxOCl8MHgzM2VjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMTYgKDUuNTgwR0h6KQorICAgIHsxMjAsICgzPDwxOCl8MHgzMDFjMCwgKDQ8PDE4KXwweDA4MDAwLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMjAgKDUuNjAwR0h6KQorICAgIHsxMjQsICgzPDwxOCl8MHgzMDFjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMjQgKDUuNjIwR0h6KQorICAgIHsxMjgsICgzPDwxOCl8MHgzMjFjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMjggKDUuNjQwR0h6KQorICAgIHsxMzIsICgzPDwxOCl8MHgzMTFjMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMzIgKDUuNjYwR0h6KQorICAgIHsxMzYsICgzPDwxOCl8MHgzMzFjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxMzYgKDUuNjgwR0h6KQorICAgIHsxNDAsICgzPDwxOCl8MHgzMDljMCwgKDQ8PDE4KXwweDA4MDAwLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNDAgKDUuNzAwR0h6KQorCisgICAgezE0OSwgKDM8PDE4KXwweDMyOWMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDE0OSAoNS43NDVHSHopCisgICAgezE1MywgKDM8PDE4KXwweDMxOWMxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyQTlDNn0sIC8vIDE1MyAoNS43NjVHSHopCisgICAgezE1NywgKDM8PDE4KXwweDMzOWMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDE1NyAoNS43ODVHSHopCisgICAgezE2MSwgKDM8PDE4KXwweDMwNWMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDE2MSAoNS44MDVHSHopCisKKyAgICAvLyBKYXBhbgorICAgIHsgMTg0LCAoMzw8MTgpfDB4MzA4YzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gMTg0ICg0LjkyMEdIeikKKyAgICB7IDE4OCwgKDM8PDE4KXwweDMyOGMxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDE4OCAoNC45NDBHSHopCisgICAgeyAxOTIsICgzPDwxOCl8MHgzMThjMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAxOTIgKDQuOTYwR0h6KQorICAgIHsgMTk2LCAoMzw8MTgpfDB4MzM4YzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gMTk2ICg0Ljk4MEdIeikKKyAgICB7ICAgOCwgKDM8PDE4KXwweDMyNGMxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyQTk0Nn0sIC8vICAgOCAoNS4wNDBHSHopCisgICAgeyAgMTIsICgzPDwxOCl8MHgzMTRjMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgMTIgKDUuMDYwR0h6KQorICAgIHsgIDE2LCAoMzw8MTgpfDB4MzM0YzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDE2ICg1LjA4MEdIeikKKyAgICB7ICAzNCwgKDM8PDE4KXwweDMxY2MyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTk0Nn0sIC8vICAzNCAoNS4xNzBHSHopCisgICAgeyAgMzgsICgzPDwxOCl8MHgzM2NjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgMzggKDUuMTkwR0h6KQorICAgIHsgIDQyLCAoMzw8MTgpfDB4MzAyYzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDQyICg1LjIxMEdIeikKKyAgICB7ICA0NiwgKDM8PDE4KXwweDMyMmMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vICA0NiAoNS4yMzBHSHopCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzsgRm9yIE1BWElNMjgyNS82LzcgVmVyLiAzMTcgb3IgbGVzcworOyBFZGl0ZWQgYnkgVGlnZXIsIFNlcC0xNy0yMDAzICBmb3IgMi40R2h6IGNoYW5uZWxzCis7IFVwZGF0ZWQgYnkgVGlnZXIsIFNlcC0yMi0yMDAzIGZvciA1LjBHaHogY2hhbm5lbHMKKzsgQ29ycmVjdGVkIGJ5IFRpZ2VyLCBTZXAtMjMtMjAwMywgZm9yIDB4MDMgYW5kIDB4MDQgb2YgNS4wR2h6IGNoYW5uZWxzCisKKzB4MDAgMHgwMDA4MAorMHgwMSAweDIxNGMwCisweDAyIDB4MTM4MDIKKworOzIuNEdIeiBDaGFubmVscworO2NoYW5uZTEgMDEgKDIuNDEyR0h6KTsgMHgwMyAweDMwMTQzIDsweDA0IDB4MGFjY2MKKztjaGFubmUxIDAyICgyLjQxN0dIeik7IDB4MDMgMHgzMjE0MCA7MHgwNCAweDA5MTExCis7Y2hhbm5lMSAwMyAoMi40MjJHSHopOyAweDAzIDB4MzIxNDIgOzB4MDQgMHgwYmJiYgorO2NoYW5uZTEgMDQgKDIuNDI3R0h6KTsgMHgwMyAweDMyMTQzIDsweDA0IDB4MGFjY2MKKztjaGFubmUxIDA1ICgyLjQzMkdIeik7IDB4MDMgMHgzMTE0MCA7MHgwNCAweDA5MTExCis7Y2hhbm5lMSAwNiAoMi40MzdHSHopOyAweDAzIDB4MzExNDIgOzB4MDQgMHgwYmJiYgorO2NoYW5uZTEgMDcgKDIuNDQyR0h6KTsgMHgwMyAweDMxMTQzIDsweDA0IDB4MGFjY2MKKztjaGFubmUxIDA4ICgyLjQ0N0dIeik7IDB4MDMgMHgzMzE0MCA7MHgwNCAweDA5MTExCis7Y2hhbm5lMSAwOSAoMi40NTJHSHopOyAweDAzIDB4MzMxNDIgOzB4MDQgMHgwYmJiYgorO2NoYW5uZTEgMTAgKDIuNDU3R0h6KTsgMHgwMyAweDMzMTQzIDsweDA0IDB4MGFjY2MKKztjaGFubmUxIDExICgyLjQ2MkdIeik7IDB4MDMgMHgzMDk0MCA7MHgwNCAweDA5MTExCis7Y2hhbm5lMSAxMiAoMi40NjdHSHopOyAweDAzIDB4MzA5NDIgOzB4MDQgMHgwYmJiYgorO2NoYW5uZTEgMTMgKDIuNDcyR0h6KTsgMHgwMyAweDMwOTQzIDsweDA0IDB4MGFjY2MKKworOzUuMEdoeiBDaGFubmVscworO2NoYW5uZWwgMzYgKDUuMTgwR0h6KTsgMHgwMyAweDMzY2MwIDsweDA0IDB4MGIzMzMKKztjaGFubmVsIDQwICg1LjIwMEdIeik7IDB4MDMgMHgzMDJjMCA7MHgwNCAweDA4MDAwCis7Y2hhbm5lbCA0NCAoNS4yMjBHSHopOyAweDAzIDB4MzAyYzIgOzB4MDQgMHgwYjMzMworO2NoYW5uZWwgNDggKDUuMjQwR0h6KTsgMHgwMyAweDMyMmMxIDsweDA0IDB4MDk5OTkKKztjaGFubmVsIDUyICg1LjI2MEdIeik7IDB4MDMgMHgzMTJjMSA7MHgwNCAweDBhNjY2Cis7Y2hhbm5lbCA1NiAoNS4yODBHSHopOyAweDAzIDB4MzMyYzMgOzB4MDQgMHgwOGNjYworO2NoYW5uZWwgNjAgKDUuMzAwR0h6KTsgMHgwMyAweDMwYWMwIDsweDA0IDB4MDgwMDAKKztjaGFubmVsIDY0ICg1LjMyMEdIeik7IDB4MDMgMHgzMGFjMiA7MHgwNCAweDA4MzMzCisKKzsyLjRHSHogYmFuZCA7MHgwNSAweDI4OTg2OworOzUuMEdIeiBiYW5kCisweDA1IDB4MmE5ODYKKworMHgwNiAweDE4MDA4CisweDA3IDB4Mzg0MDAKKzB4MDggMHgwNTEwOAorMHgwOSAweDI3ZmY4CisweDBhIDB4MTQwMDAKKzB4MGIgMHgzN2Y5OQorMHgwYyAweDBjMDAwCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBtYXhpbV8zMTdfcmZfZGF0YVtdICAgICA9Cit7CisgICAgKDB4MDA8PDE4KXwweDAwMGEyLAorICAgICgweDAxPDwxOCl8MHgyMTRjMCwKKyAgICAoMHgwMjw8MTgpfDB4MTM4MDIsCisgICAgKDB4MDM8PDE4KXwweDMwMTQzLAorICAgICgweDA0PDwxOCl8MHgwYWNjYywKKyAgICAoMHgwNTw8MTgpfDB4Mjg5ODYsCisgICAgKDB4MDY8PDE4KXwweDE4MDA4LAorICAgICgweDA3PDwxOCl8MHgzODQwMCwKKyAgICAoMHgwODw8MTgpfDB4MDUxMDgsCisgICAgKDB4MDk8PDE4KXwweDI3ZmY4LAorICAgICgweDBBPDwxOCl8MHgxNDAwMCwKKyAgICAoMHgwQjw8MTgpfDB4MzdmOTksCisgICAgKDB4MEM8PDE4KXwweDBjMDAwCit9OworCit1MzIgbWF4aW1fMzE3X2NoYW5uZWxfZGF0YV8yNFtdWzNdICAgID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMwMTQzLCAoMHgwNDw8MTgpfDB4MGFjY2MsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQwLCAoMHgwNDw8MTgpfDB4MDkxMTEsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQyLCAoMHgwNDw8MTgpfDB4MGJiYmIsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQzLCAoMHgwNDw8MTgpfDB4MGFjY2MsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQwLCAoMHgwNDw8MTgpfDB4MDkxMTEsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQyLCAoMHgwNDw8MTgpfDB4MGJiYmIsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQzLCAoMHgwNDw8MTgpfDB4MGFjY2MsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQwLCAoMHgwNDw8MTgpfDB4MDkxMTEsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQyLCAoMHgwNDw8MTgpfDB4MGJiYmIsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQzLCAoMHgwNDw8MTgpfDB4MGFjY2MsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQwLCAoMHgwNDw8MTgpfDB4MDkxMTEsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQyLCAoMHgwNDw8MTgpfDB4MGJiYmIsICgweDA1PDwxOCl8MHgyODk4Nn0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQzLCAoMHgwNDw8MTgpfDB4MGFjY2MsICgweDA1PDwxOCl8MHgyODk4Nn0gLy8gY2hhbm5lMSAxMworfTsKKwordTMyIG1heGltXzMxN19jaGFubmVsX2RhdGFfNTBbXVszXSAgICA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzM2NjMCwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4MmE5ODZ9LCAvLyBjaGFubmVsIDM2CisgICAgeygweDAzPDwxOCl8MHgzMDJjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4MmE5ODZ9LCAvLyBjaGFubmVsIDQwCisgICAgeygweDAzPDwxOCl8MHgzMDJjMywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4MmE5ODZ9LCAvLyBjaGFubmVsIDQ0CisgICAgeygweDAzPDwxOCl8MHgzMjJjMSwgKDB4MDQ8PDE4KXwweDA5NjY2LCAoMHgwNTw8MTgpfDB4MmE5ODZ9LCAvLyBjaGFubmVsIDQ4CisgICAgeygweDAzPDwxOCl8MHgzMTJjMiwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4MmE5ODZ9LCAvLyBjaGFubmVsIDUyCisgICAgeygweDAzPDwxOCl8MHgzMzJjMCwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4MmE5OWV9LCAvLyBjaGFubmVsIDU2CisgICAgeygweDAzPDwxOCl8MHgzMGFjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4MmE5OWV9LCAvLyBjaGFubmVsIDYwCisgICAgeygweDAzPDwxOCl8MHgzMGFjMywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4MmE5OWV9IC8vIGNoYW5uZWwgNjQKK307CisKK3UzMiBtYXhpbV8zMTdfcG93ZXJfZGF0YV8yNFtdID0geygweDBDPDwxOCl8MHgwYzAwMCwgKDB4MEM8PDE4KXwweDBjMTAwfTsKK3UzMiBtYXhpbV8zMTdfcG93ZXJfZGF0YV81MFtdID0geygweDBDPDwxOCl8MHgwYzAwMCwgKDB4MEM8PDE4KXwweDBjMTAwfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7O0FMMjIzMCBNUCAoTWFzcyBQcm9kdWN0aW9uIFZlcnNpb24pCis7O1JGIFJlZ2lzdGVycyBTZXR0aW5nIGZvciBBaXJvaGEgQUwyMjMwIHNpbGljb24gYWZ0ZXIgSnVuZSAxc3QsIDIwMDQKKzs7VXBkYXRlZCBieSBUaWdlciBIdWFuZyAoSnVuZSAxc3QsIDIwMDQpCis7OzIwLWJpdCBsZW5ndGggYW5kIExTQiBmaXJzdAorCis7O0NoMDEgKDI0MTJNSHopIDsweDAwIDB4MDlFRkMgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gwMiAoMjQxN01IeikgOzB4MDAgMHgwOUVGQyA7MHgwMSAweDhDQ0NEOworOztDaDAzICgyNDIyTUh6KSA7MHgwMCAweDA5RTdDIDsweDAxIDB4OENDQ0M7Cis7O0NoMDQgKDI0MjdNSHopIDsweDAwIDB4MDlFN0MgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gwNSAoMjQzMk1IeikgOzB4MDAgMHgwNUVGQyA7MHgwMSAweDhDQ0NDOworOztDaDA2ICgyNDM3TUh6KSA7MHgwMCAweDA1RUZDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMDcgKDI0NDJNSHopIDsweDAwIDB4MDVFN0MgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gwOCAoMjQ0N01IeikgOzB4MDAgMHgwNUU3QyA7MHgwMSAweDhDQ0NEOworOztDaDA5ICgyNDUyTUh6KSA7MHgwMCAweDBERUZDIDsweDAxIDB4OENDQ0M7Cis7O0NoMTAgKDI0NTdNSHopIDsweDAwIDB4MERFRkMgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gxMSAoMjQ2Mk1IeikgOzB4MDAgMHgwREU3QyA7MHgwMSAweDhDQ0NDOworOztDaDEyICgyNDY3TUh6KSA7MHgwMCAweDBERTdDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMTMgKDI0NzJNSHopIDsweDAwIDB4MDNFRkMgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gxNCAoMjQ4NE1oeikgOzB4MDAgMHgwM0U3QyA7MHgwMSAweDg2NjY2OworCisweDAyIDB4NDAxRDg7IFJYRENPQyBCVyAxMDBIeiBmb3IgUlhIUCBsb3cKKzs7MHgwMiAweDQ4MURDOyBSWERDT0MgQlcgMzBLaHogZm9yIFJYSFAgbG93CisKKzB4MDMgMHhDRkZGMAorMHgwNCAweDIzODAwCisweDA1IDB4QTNCNzIKKzB4MDYgMHg2REEwMQorMHgwNyAweEUxNjg4CisweDA4IDB4MTE2MDAKKzB4MDkgMHg5OUUwMgorMHgwQSAweDVEREIwCisweDBCIDB4RDk5MDAKKzB4MEMgMHgzRkZCRAorMHgwRCAweEIwMDAwCisweDBGIDB4RjAwQTAKKworO1JGIENhbGlicmF0aW9uIGZvciBBaXJvaGEgQUwyMjMwCis7RWRpdCBieSBCZW4gQ2hhbmcgKDAxLzMwLzA0KQorO1VwZGF0ZWQgYnkgVGlnZXIgSHVhbmcgKDAzLzAzLzA0KQorMHgwZiAweGYwMGEwIDsgSW5pdGlhbCBTZXR0aW5nCisweDBmIDB4ZjAwYjAgOyBBY3RpdmF0ZSBUWCBEQ0MKKzB4MGYgMHhmMDJhMCA7IEFjdGl2YXRlIFBoYXNlIENhbGlicmF0aW9uCisweDBmIDB4ZjAwZTAgOyBBY3RpdmF0ZSBGaWx0ZXIgUkMgQ2FsaWJyYXRpb24KKzB4MGYgMHhmMDBhMCA7IFJlc3RvcmUgSW5pdGlhbCBTZXR0aW5nCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordTMyIGFsMjIzMF9yZl9kYXRhW10gICAgID0KK3sKKyAgICAoMHgwMDw8MjApfDB4MDlFRkMsCisgICAgKDB4MDE8PDIwKXwweDhDQ0NDLAorICAgICgweDAyPDwyMCl8MHg0MDA1OCwvLyAyMDA2MDYyNyBBbnNvbiAweDQwMUQ4LAorICAgICgweDAzPDwyMCl8MHhDRkZGMCwKKyAgICAoMHgwNDw8MjApfDB4MjQxMDAsLy8gMjAwNjA2MjcgQW5zb24gMHgyMzgwMCwKKyAgICAoMHgwNTw8MjApfDB4QTNCMkYsLy8gMjAwNjA2MjcgQW5zb24gMHhBM0I3MgorICAgICgweDA2PDwyMCl8MHg2REEwMSwKKyAgICAoMHgwNzw8MjApfDB4RTM2MjgsLy8gMjAwNjA2MjcgQW5zb24gMHhFMTY4OCwKKyAgICAoMHgwODw8MjApfDB4MTE2MDAsCisgICAgKDB4MDk8PDIwKXwweDlEQzAyLC8vIDIwMDYwNjI3IEFub3NuIDB4OTc2MDIsLy8weDk5RTAyLCAvLzB4OUFFMDIKKyAgICAoMHgwQTw8MjApfDB4NWRkYjAsIC8vIDk0MTIwNiBGb3IgUUNPTSBpbnRlcmZlcmVuY2UgMHg1ODhiMCwvLzB4NUREQjAsIDk0MDYwMSBhZGogMHg1YWEzMCBmb3IgYmx1ZXRvb3RoCisgICAgKDB4MEI8PDIwKXwweEQ5OTAwLAorICAgICgweDBDPDwyMCl8MHgzRkZCRCwKKyAgICAoMHgwRDw8MjApfDB4QjAwMDAsCisgICAgKDB4MEY8PDIwKXwweEYwMUEwIC8vIDIwMDYwNjI3IEFuc29uIDB4RjAwQTAKK307CisKK3UzMiBhbDIyMzBzX3JmX2RhdGFbXSAgICAgPQoreworICAgICgweDAwPDwyMCl8MHgwOUVGQywKKyAgICAoMHgwMTw8MjApfDB4OENDQ0MsCisgICAgKDB4MDI8PDIwKXwweDQwMDU4LC8vIDIwMDYwNDE5IDB4NDAxRDgsCisgICAgKDB4MDM8PDIwKXwweENGRkYwLAorICAgICgweDA0PDwyMCl8MHgyNDEwMCwvLyAyMDA2MDQxOSAweDIzODAwLAorICAgICgweDA1PDwyMCl8MHhBM0IyRiwvLyAyMDA2MDQxOSAweEEzQjcyLAorICAgICgweDA2PDwyMCl8MHg2REEwMSwKKyAgICAoMHgwNzw8MjApfDB4RTM2MjgsLy8gMjAwNjA0MTkgMHhFMTY4OCwKKyAgICAoMHgwODw8MjApfDB4MTE2MDAsCisgICAgKDB4MDk8PDIwKXwweDlEQzAyLC8vIDIwMDYwNDE5IDB4OTc2MDIsLy8weDk5RTAyLCAvLzB4OUFFMDIKKyAgICAoMHgwQTw8MjApfDB4NUREQjAsLy8gOTQxMjA2IEZvciBRQ09NIGludGVyZmVyZW5jZSAweDU4OGIwLC8vMHg1RERCMCwgOTQwNjAxIGFkaiAweDVhYTMwIGZvciBibHVldG9vdGgKKyAgICAoMHgwQjw8MjApfDB4RDk5MDAsCisgICAgKDB4MEM8PDIwKXwweDNGRkJELAorICAgICgweDBEPDwyMCl8MHhCMDAwMCwKKyAgICAoMHgwRjw8MjApfDB4RjAxQTAgLy8gMjAwNjA0MTkgMHhGMDBBMAorfTsKKwordTMyIGFsMjIzMF9jaGFubmVsX2RhdGFfMjRbXVsyXSA9Cit7CisgICAgeygweDAwPDwyMCl8MHgwOUVGQywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMDw8MjApfDB4MDlFRkMsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDA8PDIwKXwweDA5RTdDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAwPDwyMCl8MHgwOUU3QywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMDw8MjApfDB4MDVFRkMsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDA8PDIwKXwweDA1RUZDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAwPDwyMCl8MHgwNUU3QywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMDw8MjApfDB4MDVFN0MsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDA8PDIwKXwweDBERUZDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAwPDwyMCl8MHgwREVGQywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMDw8MjApfDB4MERFN0MsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDA8PDIwKXwweDBERTdDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAwPDwyMCl8MHgwM0VGQywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAxMworICAgIHsoMHgwMDw8MjApfDB4MDNFN0MsICgweDAxPDwyMCl8MHg4NjY2Nn0gLy8gY2hhbm5lMSAxNAorfTsKKworLy8gQ3VycmVudCBzZXR0aW5nLiB1MzIgYWlyb2hhX3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwOTw8MjApfDB4OTAyMDIsICgweDA5PDwyMCl8MHg5NjYwMiwgKDB4MDk8PDIwKXwweDk3NjAyfTsKKyNkZWZpbmUgQUlST0hBX1RYVkdBX0xPV19JTkRFWAkJMzEJCS8vIEluZGV4IGZvciAweDkwMjAyCisjZGVmaW5lIEFJUk9IQV9UWFZHQV9NSURETEVfSU5ERVgJMTIJCS8vIEluZGV4IGZvciAweDk2NjAyCisjZGVmaW5lIEFJUk9IQV9UWFZHQV9ISUdIX0lOREVYCQk4CQkvLyBJbmRleCBmb3IgMHg5NzYwMiAxLjAuMjQuMCAxLjAuMjguMAorLyoKK3UzMiBhaXJvaGFfcG93ZXJfZGF0YV8yNFtdID0KK3sKKyAgICAweDlGRTAyLCAgICAgICAgICAvLyBNYXggLSAwIGRCCisgICAgMHg5QkUwMiwgICAgICAgICAgLy8gTWF4IC0gMSBkQgorICAgIDB4OURFMDIsICAgICAgICAgIC8vIE1heCAtIDIgZEIKKyAgICAweDk5RTAyLCAgICAgICAgICAvLyBNYXggLSAzIGRCCisgICAgMHg5RUUwMiwgICAgICAgICAgLy8gTWF4IC0gNCBkQgorICAgIDB4OUFFMDIsICAgICAgICAgIC8vIE1heCAtIDUgZEIKKyAgICAweDlDRTAyLCAgICAgICAgICAvLyBNYXggLSA2IGRCCisgICAgMHg5OEUwMiwgICAgICAgICAgLy8gTWF4IC0gNyBkQgorICAgIDB4OTc2MDIsICAgICAgICAgIC8vIE1heCAtIDggZEIKKyAgICAweDkzNjAyLCAgICAgICAgICAvLyBNYXggLSA5IGRCCisgICAgMHg5NTYwMiwgICAgICAgICAgLy8gTWF4IC0gMTAgZEIKKyAgICAweDkxNjAyLCAgICAgICAgICAvLyBNYXggLSAxMSBkQgorICAgIDB4OTY2MDIsICAgICAgICAgIC8vIE1heCAtIDEyIGRCCisgICAgMHg5MjYwMiwgICAgICAgICAgLy8gTWF4IC0gMTMgZEIKKyAgICAweDk0NjAyLCAgICAgICAgICAvLyBNYXggLSAxNCBkQgorICAgIDB4OTA2MDIsICAgICAgICAgIC8vIE1heCAtIDE1IGRCCisgICAgMHg5N0EwMiwgICAgICAgICAgLy8gTWF4IC0gMTYgZEIKKyAgICAweDkzQTAyLCAgICAgICAgICAvLyBNYXggLSAxNyBkQgorICAgIDB4OTVBMDIsICAgICAgICAgIC8vIE1heCAtIDE4IGRCCisgICAgMHg5MUEwMiwgICAgICAgICAgLy8gTWF4IC0gMTkgZEIKKyAgICAweDk2QTAyLCAgICAgICAgICAvLyBNYXggLSAyMCBkQgorICAgIDB4OTJBMDIsICAgICAgICAgIC8vIE1heCAtIDIxIGRCCisgICAgMHg5NEEwMiwgICAgICAgICAgLy8gTWF4IC0gMjIgZEIKKyAgICAweDkwQTAyLCAgICAgICAgICAvLyBNYXggLSAyMyBkQgorICAgIDB4OTcyMDIsICAgICAgICAgIC8vIE1heCAtIDI0IGRCCisgICAgMHg5MzIwMiwgICAgICAgICAgLy8gTWF4IC0gMjUgZEIKKyAgICAweDk1MjAyLCAgICAgICAgICAvLyBNYXggLSAyNiBkQgorICAgIDB4OTEyMDIsICAgICAgICAgIC8vIE1heCAtIDI3IGRCCisgICAgMHg5NjIwMiwgICAgICAgICAgLy8gTWF4IC0gMjggZEIKKyAgICAweDkyMjAyLCAgICAgICAgICAvLyBNYXggLSAyOSBkQgorICAgIDB4OTQyMDIsICAgICAgICAgIC8vIE1heCAtIDMwIGRCCisgICAgMHg5MDIwMiAgICAgICAgICAgLy8gTWF4IC0gMzEgZEIKK307CisqLworCisvLyAyMDA0MDkyNyAxLjEuNjkuMTAwMCB5YmppYW5nCisvLyBmcm9tIEpvaG4KK3UzMiBhbDIyMzBfdHh2Z2FfZGF0YVtdWzJdID0KK3sKKwkvL3ZhbHVlCSwgaW5kZXgKKwl7MHgwOTAyMDIsIDB9LAorCXsweDA5NDIwMiwgMn0sCisJezB4MDkyMjAyLCA0fSwKKwl7MHgwOTYyMDIsIDZ9LAorCXsweDA5MTIwMiwgOH0sCisJezB4MDk1MjAyLCAxMH0sCisJezB4MDkzMjAyLCAxMn0sCisJezB4MDk3MjAyLCAxNH0sCisJezB4MDkwQTAyLCAxNn0sCisJezB4MDk0QTAyLCAxOH0sCisJezB4MDkyQTAyLCAyMH0sCisJezB4MDk2QTAyLCAyMn0sCisJezB4MDkxQTAyLCAyNH0sCisJezB4MDk1QTAyLCAyNn0sCisJezB4MDkzQTAyLCAyOH0sCisJezB4MDk3QTAyLCAzMH0sCisJezB4MDkwNjAyLCAzMn0sCisJezB4MDk0NjAyLCAzNH0sCisJezB4MDkyNjAyLCAzNn0sCisJezB4MDk2NjAyLCAzOH0sCisJezB4MDkxNjAyLCA0MH0sCisJezB4MDk1NjAyLCA0Mn0sCisJezB4MDkzNjAyLCA0NH0sCisJezB4MDk3NjAyLCA0Nn0sCisJezB4MDkwRTAyLCA0OH0sCisJezB4MDk4RTAyLCA0OX0sCisJezB4MDk0RTAyLCA1MH0sCisJezB4MDlDRTAyLCA1MX0sCisJezB4MDkyRTAyLCA1Mn0sCisJezB4MDlBRTAyLCA1M30sCisJezB4MDk2RTAyLCA1NH0sCisJezB4MDlFRTAyLCA1NX0sCisJezB4MDkxRTAyLCA1Nn0sCisJezB4MDk5RTAyLCA1N30sCisJezB4MDk1RTAyLCA1OH0sCisJezB4MDlERTAyLCA1OX0sCisJezB4MDkzRTAyLCA2MH0sCisJezB4MDlCRTAyLCA2MX0sCisJezB4MDk3RTAyLCA2Mn0sCisJezB4MDlGRTAyLCA2M30KK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZvciBBaXJvaGEgQUw3MjMwLCAyLjRHaHogYmFuZAorLy8gRWRpdCBieSBUaWdlciwgKE1hcmNoLCA5LCAyMDA1KQorLy8gMjRiaXQsIE1TQiBmaXJzdAorCisvL2NoYW5uZWwgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzOgordTMyIGFsNzIzMF9yZl9kYXRhXzI0W10JPQoreworCSgweDAwPDwyNCl8MHgwMDM3OTAsCisJKDB4MDE8PDI0KXwweDEzMzMzMSwKKwkoMHgwMjw8MjQpfDB4ODQxRkYyLAorCSgweDAzPDwyNCl8MHgzRkRGQTMsCisJKDB4MDQ8PDI0KXwweDdGRDc4NCwKKwkoMHgwNTw8MjQpfDB4ODAyQjU1LAorCSgweDA2PDwyNCl8MHg1NkFGMzYsCisJKDB4MDc8PDI0KXwweENFMDIwNywKKwkoMHgwODw8MjQpfDB4NkVCQzA4LAorCSgweDA5PDwyNCl8MHgyMjFCQjksCisJKDB4MEE8PDI0KXwweEUwMDAwQSwKKwkoMHgwQjw8MjQpfDB4MDgwNzFCLAorCSgweDBDPDwyNCl8MHgwMDBBM0MsCisJKDB4MEQ8PDI0KXwweEZGRkZGRCwKKwkoMHgwRTw8MjQpfDB4MDAwMDBFLAorCSgweDBGPDwyNCl8MHgxQUJBOEYKK307CisKK3UzMiBhbDcyMzBfY2hhbm5lbF9kYXRhXzI0W11bMl0gPQoreworICAgIHsoMHgwMDw8MjQpfDB4MDAzNzkwLCAoMHgwMTw8MjQpfDB4MTMzMzMxfSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMDw8MjQpfDB4MDAzNzkwLCAoMHgwMTw8MjQpfDB4MUIzMzMxfSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMDw8MjQpfDB4MDAzNzkwLCAoMHgwMTw8MjQpfDB4MDMzMzMxfSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMDw8MjQpfDB4MDAzNzkwLCAoMHgwMTw8MjQpfDB4MEIzMzMxfSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0EwLCAoMHgwMTw8MjQpfDB4MTMzMzMxfSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0EwLCAoMHgwMTw8MjQpfDB4MUIzMzMxfSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0EwLCAoMHgwMTw8MjQpfDB4MDMzMzMxfSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMDw8MjQpfDB4MDAzN0EwLCAoMHgwMTw8MjQpfDB4MEIzMzMxfSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0IwLCAoMHgwMTw8MjQpfDB4MTMzMzMxfSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0IwLCAoMHgwMTw8MjQpfDB4MUIzMzMxfSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0IwLCAoMHgwMTw8MjQpfDB4MDMzMzMxfSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0IwLCAoMHgwMTw8MjQpfDB4MEIzMzMxfSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMDw8MjQpfDB4MDAzN0MwLCAoMHgwMTw8MjQpfDB4MTMzMzMxfSwgLy8gY2hhbm5lMSAxMworCXsoMHgwMDw8MjQpfDB4MDAzN0MwLCAoMHgwMTw8MjQpfDB4MDY2NjYxfSAgLy8gY2hhbm5lbCAxNAorfTsKKworLy9jaGFubmVsIGluZGVwZW5kZW50IHJlZ2lzdGVyczoKK3UzMiBhbDcyMzBfcmZfZGF0YV81MFtdCT0KK3sKKwkoMHgwMDw8MjQpfDB4MEZGNTIwLAorCSgweDAxPDwyNCl8MHgwMDAwMDEsCisJKDB4MDI8PDI0KXwweDQ1MUZFMiwKKwkoMHgwMzw8MjQpfDB4NUZERkEzLAorCSgweDA0PDwyNCl8MHg2RkQ3ODQsCisJKDB4MDU8PDI0KXwweDg1M0Y1NSwKKwkoMHgwNjw8MjQpfDB4NTZBRjM2LAorCSgweDA3PDwyNCl8MHhDRTAyMDcsCisJKDB4MDg8PDI0KXwweDZFQkMwOCwKKwkoMHgwOTw8MjQpfDB4MjIxQkI5LAorCSgweDBBPDwyNCl8MHhFMDYwMEEsCisJKDB4MEI8PDI0KXwweDA4MDQ0QiwKKwkoMHgwQzw8MjQpfDB4MDAxNDNDLAorCSgweDBEPDwyNCl8MHhGRkZGRkQsCisJKDB4MEU8PDI0KXwweDAwMDAwRSwKKwkoMHgwRjw8MjQpfDB4MTJCQUNGIC8vNUdoeiBkZWZhdWx0IHN0YXRlCit9OworCit1MzIgYWw3MjMwX2NoYW5uZWxfZGF0YV81W11bNF0gPQoreworCS8vY2hhbm5lbCBkZXBlbmRlbnQgcmVnaXN0ZXJzOiAweDAwLCAweDAxIGFuZCAweDA0CisJLy8xMUogPT09PT09PT09PT0KKwl7MTg0LCAoMHgwMDw8MjQpfDB4MEZGNTIwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAxODQKKwl7MTg4LCAoMHgwMDw8MjQpfDB4MEZGNTIwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxODgKKwl7MTkyLCAoMHgwMDw8MjQpfDB4MEZGNTMwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxOTIKKwl7MTk2LCAoMHgwMDw8MjQpfDB4MEZGNTMwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAxOTYKKwl7OCwgICAoMHgwMDw8MjQpfDB4MEZGNTQwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAwMDgKKwl7MTIsICAoMHgwMDw8MjQpfDB4MEZGNTQwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwMTIKKwl7MTYsICAoMHgwMDw8MjQpfDB4MEZGNTUwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwMTYKKwl7MzQsICAoMHgwMDw8MjQpfDB4MEZGNTYwLCAoMHgwMTw8MjQpfDB4MDU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwMzQKKwl7MzgsICAoMHgwMDw8MjQpfDB4MEZGNTcwLCAoMHgwMTw8MjQpfDB4MTAwMDAxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwMzgKKwl7NDIsICAoMHgwMDw8MjQpfDB4MEZGNTcwLCAoMHgwMTw8MjQpfDB4MUFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwNDIKKwl7NDYsICAoMHgwMDw8MjQpfDB4MEZGNTcwLCAoMHgwMTw8MjQpfDB4MDU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwNDYKKwkvLzExIEEvSCA9PT09PT09PT0KKwl7MzYsICAoMHgwMDw8MjQpfDB4MEZGNTYwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwMzYKKwl7NDAsICAoMHgwMDw8MjQpfDB4MEZGNTcwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwNDAKKwl7NDQsICAoMHgwMDw8MjQpfDB4MEZGNTcwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAwNDQKKwl7NDgsICAoMHgwMDw8MjQpfDB4MEZGNTcwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwNDgKKwl7NTIsICAoMHgwMDw8MjQpfDB4MEZGNTgwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwNTIKKwl7NTYsICAoMHgwMDw8MjQpfDB4MEZGNTgwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAwNTYKKwl7NjAsICAoMHgwMDw8MjQpfDB4MEZGNTgwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwNjAKKwl7NjQsICAoMHgwMDw8MjQpfDB4MEZGNTkwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAwNjQKKwl7MTAwLCAoMHgwMDw8MjQpfDB4MEZGNUMwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxMDAKKwl7MTA0LCAoMHgwMDw8MjQpfDB4MEZGNUMwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAxMDQKKwl7MTA4LCAoMHgwMDw8MjQpfDB4MEZGNUMwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxMDgKKwl7MTEyLCAoMHgwMDw8MjQpfDB4MEZGNUQwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxMTIKKwl7MTE2LCAoMHgwMDw8MjQpfDB4MEZGNUQwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAxMTYKKwl7MTIwLCAoMHgwMDw8MjQpfDB4MEZGNUQwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxMjAKKwl7MTI0LCAoMHgwMDw8MjQpfDB4MEZGNUUwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxMjQKKwl7MTI4LCAoMHgwMDw8MjQpfDB4MEZGNUUwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAxMjgKKwl7MTMyLCAoMHgwMDw8MjQpfDB4MEZGNUUwLCAoMHgwMTw8MjQpfDB4MEFBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxMzIKKwl7MTM2LCAoMHgwMDw8MjQpfDB4MEZGNUYwLCAoMHgwMTw8MjQpfDB4MTU1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxMzYKKwl7MTQwLCAoMHgwMDw8MjQpfDB4MEZGNUYwLCAoMHgwMTw8MjQpfDB4MDAwMDAxLCAoMHgwNDw8MjQpfDB4NjdGNzg0fSwgLy8gY2hhbm5lbCAxNDAKKwl7MTQ5LCAoMHgwMDw8MjQpfDB4MEZGNjAwLCAoMHgwMTw8MjQpfDB4MTgwMDAxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxNDkKKwl7MTUzLCAoMHgwMDw8MjQpfDB4MEZGNjAwLCAoMHgwMTw8MjQpfDB4MDJBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxNTMKKwl7MTU3LCAoMHgwMDw8MjQpfDB4MEZGNjAwLCAoMHgwMTw8MjQpfDB4MEQ1NTUxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxNTcKKwl7MTYxLCAoMHgwMDw8MjQpfDB4MEZGNjEwLCAoMHgwMTw8MjQpfDB4MTgwMDAxLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSwgLy8gY2hhbm5lbCAxNjEKKwl7MTY1LCAoMHgwMDw8MjQpfDB4MEZGNjEwLCAoMHgwMTw8MjQpfDB4MDJBQUExLCAoMHgwNDw8MjQpfDB4NzdGNzg0fSAgLy8gY2hhbm5lbCAxNjUKK307CisKKy8vOyBSRiBDYWxpYnJhdGlvbiA8PT09IFJlZ2lzdGVyIDB4MEYKKy8vMHgwRiAweDFBQkE4Rjsgc3RhcnQgZnJvbSAyLjRHaHogZGVmYXVsdCBzdGF0ZQorLy8weDBGIDB4OUFCQThGOyBUWERDIGNvbXBlbnNhdGlvbgorLy8weDBGIDB4M0FCQThGOyBSWEZJTCBhZGp1c3RtZW50CisvLzB4MEYgMHgxQUJBOEY7IHJlc3RvcmUgMi40R2h6IGRlZmF1bHQgc3RhdGUKKworLy87VFhWR0EgTWFwcGluZyBUYWJsZSA8PT09IFJlZ2lzdGVyIDB4MEIKK3UzMiBhbDcyMzBfdHh2Z2FfZGF0YVtdWzJdID0KK3sKKwl7MHgwODA0MEIsIDB9LCAvL1RYVkdBPTA7CisJezB4MDgwNDFCLCAxfSwgLy9UWFZHQT0xOworCXsweDA4MDQyQiwgMn0sIC8vVFhWR0E9MjsKKwl7MHgwODA0M0IsIDN9LCAvL1RYVkdBPTM7CisJezB4MDgwNDRCLCA0fSwgLy9UWFZHQT00OworCXsweDA4MDQ1QiwgNX0sIC8vVFhWR0E9NTsKKwl7MHgwODA0NkIsIDZ9LCAvL1RYVkdBPTY7CisJezB4MDgwNDdCLCA3fSwgLy9UWFZHQT03OworCXsweDA4MDQ4QiwgOH0sIC8vVFhWR0E9ODsKKwl7MHgwODA0OUIsIDl9LCAvL1RYVkdBPTk7CisJezB4MDgwNEFCLCAxMH0sIC8vVFhWR0E9MTA7CisJezB4MDgwNEJCLCAxMX0sIC8vVFhWR0E9MTE7CisJezB4MDgwNENCLCAxMn0sIC8vVFhWR0E9MTI7CisJezB4MDgwNERCLCAxM30sIC8vVFhWR0E9MTM7CisJezB4MDgwNEVCLCAxNH0sIC8vVFhWR0E9MTQ7CisJezB4MDgwNEZCLCAxNX0sIC8vVFhWR0E9MTU7CisJezB4MDgwNTBCLCAxNn0sIC8vVFhWR0E9MTY7CisJezB4MDgwNTFCLCAxN30sIC8vVFhWR0E9MTc7CisJezB4MDgwNTJCLCAxOH0sIC8vVFhWR0E9MTg7CisJezB4MDgwNTNCLCAxOX0sIC8vVFhWR0E9MTk7CisJezB4MDgwNTRCLCAyMH0sIC8vVFhWR0E9MjA7CisJezB4MDgwNTVCLCAyMX0sIC8vVFhWR0E9MjE7CisJezB4MDgwNTZCLCAyMn0sIC8vVFhWR0E9MjI7CisJezB4MDgwNTdCLCAyM30sIC8vVFhWR0E9MjM7CisJezB4MDgwNThCLCAyNH0sIC8vVFhWR0E9MjQ7CisJezB4MDgwNTlCLCAyNX0sIC8vVFhWR0E9MjU7CisJezB4MDgwNUFCLCAyNn0sIC8vVFhWR0E9MjY7CisJezB4MDgwNUJCLCAyN30sIC8vVFhWR0E9Mjc7CisJezB4MDgwNUNCLCAyOH0sIC8vVFhWR0E9Mjg7CisJezB4MDgwNURCLCAyOX0sIC8vVFhWR0E9Mjk7CisJezB4MDgwNUVCLCAzMH0sIC8vVFhWR0E9MzA7CisJezB4MDgwNUZCLCAzMX0sIC8vVFhWR0E9MzE7CisJezB4MDgwNjBCLCAzMn0sIC8vVFhWR0E9MzI7CisJezB4MDgwNjFCLCAzM30sIC8vVFhWR0E9MzM7CisJezB4MDgwNjJCLCAzNH0sIC8vVFhWR0E9MzQ7CisJezB4MDgwNjNCLCAzNX0sIC8vVFhWR0E9MzU7CisJezB4MDgwNjRCLCAzNn0sIC8vVFhWR0E9MzY7CisJezB4MDgwNjVCLCAzN30sIC8vVFhWR0E9Mzc7CisJezB4MDgwNjZCLCAzOH0sIC8vVFhWR0E9Mzg7CisJezB4MDgwNjdCLCAzOX0sIC8vVFhWR0E9Mzk7CisJezB4MDgwNjhCLCA0MH0sIC8vVFhWR0E9NDA7CisJezB4MDgwNjlCLCA0MX0sIC8vVFhWR0E9NDE7CisJezB4MDgwNkFCLCA0Mn0sIC8vVFhWR0E9NDI7CisJezB4MDgwNkJCLCA0M30sIC8vVFhWR0E9NDM7CisJezB4MDgwNkNCLCA0NH0sIC8vVFhWR0E9NDQ7CisJezB4MDgwNkRCLCA0NX0sIC8vVFhWR0E9NDU7CisJezB4MDgwNkVCLCA0Nn0sIC8vVFhWR0E9NDY7CisJezB4MDgwNkZCLCA0N30sIC8vVFhWR0E9NDc7CisJezB4MDgwNzBCLCA0OH0sIC8vVFhWR0E9NDg7CisJezB4MDgwNzFCLCA0OX0sIC8vVFhWR0E9NDk7CisJezB4MDgwNzJCLCA1MH0sIC8vVFhWR0E9NTA7CisJezB4MDgwNzNCLCA1MX0sIC8vVFhWR0E9NTE7CisJezB4MDgwNzRCLCA1Mn0sIC8vVFhWR0E9NTI7CisJezB4MDgwNzVCLCA1M30sIC8vVFhWR0E9NTM7CisJezB4MDgwNzZCLCA1NH0sIC8vVFhWR0E9NTQ7CisJezB4MDgwNzdCLCA1NX0sIC8vVFhWR0E9NTU7CisJezB4MDgwNzhCLCA1Nn0sIC8vVFhWR0E9NTY7CisJezB4MDgwNzlCLCA1N30sIC8vVFhWR0E9NTc7CisJezB4MDgwN0FCLCA1OH0sIC8vVFhWR0E9NTg7CisJezB4MDgwN0JCLCA1OX0sIC8vVFhWR0E9NTk7CisJezB4MDgwN0NCLCA2MH0sIC8vVFhWR0E9NjA7CisJezB4MDgwN0RCLCA2MX0sIC8vVFhWR0E9NjE7CisJezB4MDgwN0VCLCA2Mn0sIC8vVFhWR0E9NjI7CisJezB4MDgwN0ZCLCA2M30sIC8vVFhWR0E9NjM7Cit9OworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKy8vOyBXODlSRjI0MiBSRklDIFNQSSBwcm9ncmFtbWluZyBpbml0aWFsIGRhdGEKKy8vOyBXaW5ib25kIFdMQU4gMTFnIFJGSUMgQkItU1BJIHJlZ2lzdGVyIC0tIHZlcnNpb24gRkE1OTc2QSByZXYgMS4zYgorLy87IFVwZGF0ZSBEYXRlOiBPY290YmVyIDMsIDIwMDUgYnkgUFAxMCBIc2lhbmctVGUgSG8KKy8vOworLy87IFZlcnNpb24gMS4zYiByZXZpc2lvbiBpdGVtczogKE9jdC4gMSwgMjAwNSBieSBIVEhvKSBmb3IgRkE1OTc2QQordTMyIHc4OXJmMjQyX3JmX2RhdGFbXSAgICAgPQoreworICAgICgweDAwPDwyNCl8MHhGODYxMDAsIC8vIDIwMDYwNzIxIDB4Rjg2MTAwLCAvLzsgM0UxODQ7IE1PREEgICgweDAwKSAtLSBOb3JtYWwgbW9kZSA7IGNhbGlicmF0aW9uIG9mZgorICAgICgweDAxPDwyNCl8MHhFRkZGQzIsIC8vOyAzQkZGRjsgTU9EQiAgKDB4MDEpIC0tIHR1cm4gb2ZmIFJTU0ksIGFuZCBvdGhlciBjaXJjdWl0cyBhcmUgdHVybmVkIG9uCisgICAgKDB4MDI8PDI0KXwweDEwMjUwNCwgLy87IDA0MDk0OyBGU0VUICAoMHgwMikgLS0gZGVmYXVsdCAyME1IeiBjcnlzdGFsIDsgSWNtcD0xLjVtQQorICAgICgweDAzPDwyNCl8MHgwMjYyODYsIC8vOyAwMDk4QTsgRkNITiAgKDB4MDMpIC0tIGRlZmF1bHQgQ0g3LCAyNDQyTUh6CisgICAgKDB4MDQ8PDI0KXwweDAwMDIwOCwgLy8gMjAwNjA2MTIuMS5hIDB4MDAwMkM4LCAvLyAyMDA1MDgxOCAvLyAyMDA1MDgxNiAweDAwMDM4OAorCQkJCQkJIC8vOyAwMjAwODsgRkNBTCAgKDB4MDQpIC0tIFhUQUwgRnJlcSBUcmltPTAwMTAwMCAoc29ja2V0IGJvYXJkIzEpOyBGQTU5NzZBWUdfdjEuM0MKKyAgICAoMHgwNTw8MjQpfDB4MjRDNjBBLCAvLyAyMDA2MDYxMi4xLmEgMHgyNEM1OEEsIC8vIDk0MTAwMyAweDI0QzQ4QSwgLy8gMjAwNTA4MTguMiAweDI0ODQ4QSwgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHgyNEM0OEEKKwkJCQkJCSAvLzsgMDkzMTY7IEdBTkEgICgweDA1KSAtLSBUWCBWR0EgZGVmYXVsdCAoVFhWR0E9MHgxOCgxMikpICYgVFhHUEs9MTEwIDsgRkE1OTc2QV8xLjNECisgICAgKDB4MDY8PDI0KXwweDM0MzJDQywgLy8gOTQxMDAzIDB4MjZDMzRDLCAvLyAyMDA1MDgxOCAweDA2QjQwQworCQkJCQkJIC8vOyAwRDBDQjsgR0FOQiAgKDB4MDYpIC0tIFJYREMoREMgb2Zmc2V0KSBvbjsgTE5BPTExOyBSWFZHQT0wMDEwMTEoMTEpIDsgUlhGTFNXPTExKDAxMDAwMSk7IFJYR1BLPTAwOyBSWEdDRj0wMDsgLTUwZEJtIGlucHV0CisgICAgKDB4MDc8PDI0KXwweDBDNjhDRSwgLy8gMjAwNTA4MTguMiAweDBDNjZDRSwgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHgwQzY4Q0UKKwkJCQkJCSAvLzsgMDMxQTM7IEZJTFQgICgweDA3KSAtLSBUWC9SWCBmaWx0ZXIgd2l0aCBhdXRvLXR1bmluZzsgVEZMQlc9MDExOyBSRkxCVz0xMDAKKyAgICAoMHgwODw8MjQpfDB4MTAwMDEwLCAvLzsgMDQwMDA7IFRDQUwgICgweDA4KSAtLSAvL2ZvciBMTworICAgICgweDA5PDwyNCl8MHgwMDQwMTIsIC8vIDIwMDYwNjEyLjEuYSAweDZFNDAxMiwgLy8gMHgwMDQwMTIsCisJCQkJCQkgLy87IDFCOTAwOyBSQ0FMQSAoMHgwOSkgLS0gRkFTVFM9MTE7IEhQREU9MDEgKDEwMG5zZWMpOyBTRUhQPTEgKHNlbGVjdCBCMCBwaW49UlhIUCk7IFJYSFA9MSAoVHVybiBvbiBSWEhQIGZ1bmN0aW9uKShGQTU5NzZBXzEuM0MpCisgICAgKDB4MEE8PDI0KXwweDcwNDAxNCwgLy87IDFDMTAwOyBSQ0FMQiAoMHgwQSkKKyAgICAoMHgwQjw8MjQpfDB4MThCREQ2LCAvLyA5NDEwMDMgMHgxODA1RDYsIC8vIDIwMDUwODE4LjIgMHgxODAxRDYsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4MTgwNUQ2CisJCQkJCQkgLy87IDA2MkY3OyBJUUNBTCAoMHgwQikgLS0gVHVybiBvbiBMTyBwaGFzZSB0dW5lcj0wMTExICYgUlgtTE8gcGhhc2UgPSAwMTExOyBGQTU5NzZBXzEuM0IgKDIwMDUvMDkvMjkpCisgICAgKDB4MEM8PDI0KXwweDU3NTU1OCwgLy8gMjAwNTA4MTguMiAweDU1NTU1OCwgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHg1NzU1NTgKKwkJCQkJCSAvLzsgMTVENTUgOyBJQlNBICAoMHgwQykgLS0gSUZQcmUgPTExIDsgVEM1Mzc2QV92MS4zQSBmb3IgY29ybmVyCisgICAgKDB4MEQ8PDI0KXwweDU1NTQ1QSwgLy8gMjAwNjA2MTIuMS5hIDB4NTU1NTVBLAorCQkJCQkJIC8vOyAxNTU1NSA7IElCU0IgICgweDBEKQorICAgICgweDBFPDwyNCl8MHg1NTU3REMsIC8vIDIwMDYwNjEyLjEuYSAweDU1NTU1QywgLy8gOTQxMDAzIDB4NTU1N0RDLAorCQkJCQkJIC8vOyAxNTU1RiA7IElCU0MgICgweDBFKSAtLSBJUkxOQSAmIElSTE5CIChQVEFUICYgQ29uc3QgY3VycmVudCk9MDEvMDE7IEZBNTk3NkJfMS4zRiAoMjAwNS8xMS8yNSkKKwkoMHgxMDw8MjQpfDB4MDAwQzIwLCAvLyA5NDEwMDMgMHgwMDAwMjAsIC8vIDIwMDUwODE4CisJCQkJCQkgLy87IDAwMDMwIDsgVE1PREEgKDB4MTApIC0tIExOQV9nYWluX3N0ZXA9MDAxMSA7IExOQT0xNS8xNmRCCisJKDB4MTE8PDI0KXwweDBDMDAyMiwgLy8gOTQxMDAzIDB4MDMwMDIyICAvLyAyMDA1MDgxOC4yIDB4MDMwMDIyICAvLyAyMDA1MDgxOCAvLyAyMDA1MDgxNiAweDBDMDAyMgorCQkJCQkJIC8vOyAwMzAwMCA7IFRNT0RCICgweDExKSAtLSBUdXJuIE9OIFJYLVEgcGF0aCBUZXN0IFN3aXRjaDsgVG8gaW1wcm92ZSBJUSBwYXRoIGdyb3VwIGRlbGF5IChGQTU5NzZBXzEuM0MpCisJKDB4MTI8PDI0KXwweDAwMDAyNCAgLy8gMjAwNjA2MTIuMS5hIDB4MDAxODI0ICAvLyA5NDEwMDMgYWRkCisJCQkJCQkgLy87IFRNT0RDICgweDEyKSAtLSBUdXJuIE9GRiBUZW1wZWFydXJlIHNlbnNvcgorfTsKKwordTMyIHc4OXJmMjQyX2NoYW5uZWxfZGF0YV8yNFtdWzJdID0KK3sKKyAgICB7KDB4MDM8PDI0KXwweDAyNUIwNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDM8PDI0KXwweDAyNUM0NiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDM8PDI0KXwweDAyNUQ4NiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDM8PDI0KXwweDAyNUVDNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDM8PDI0KXwweDAyNjAwNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDM8PDI0KXwweDAyNjE0NiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDM8PDI0KXwweDAyNjI4NiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDM8PDI0KXwweDAyNjNDNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDM8PDI0KXwweDAyNjUwNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDM8PDI0KXwweDAyNjY0NiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDM8PDI0KXwweDAyNjc4NiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDM8PDI0KXwweDAyNjhDNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDM8PDI0KXwweDAyNkEwNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0sIC8vIGNoYW5uZTEgMTMKKyAgICB7KDB4MDM8PDI0KXwweDAyNkQwNiwgKDB4MDQ8PDI0KXwweDA4MDQwOH0gIC8vIGNoYW5uZTEgMTQKK307CisKK3UzMiB3ODlyZjI0Ml9wb3dlcl9kYXRhXzI0W10gPSB7KDB4MDU8PDI0KXwweDI0QzQ4QSwgKDB4MDU8PDI0KXwweDI0QzQ4QSwgKDB4MDU8PDI0KXwweDI0QzQ4QX07CisKKy8vIDIwMDYwMzE1LjYgRW5sYXJnZSBmb3IgbmV3IHNjYWxlCisvLyAyMDA2MDMxNi42IDIwMDYwNjE5LjIuYSBhZGQgbWFwcGluZyBhcnJheQordTMyIHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nW11bMl0gPQoreworCXswLCAwfSAsIC8vIE5ldyA8LT4gT2xkCisJezEsIDF9ICwKKwl7MiwgMn0gLAorCXszLCAzfSAsCisJezQsIDR9ICwKKwl7NiwgNX0gLAorCXs4LCA2IH0sCisJezEwLCA3IH0sCisJezEyLCA4IH0sCisJezE0LCA5IH0sCisJezE2LCAxMH0sCisJezE4LCAxMX0sCisJezIwLCAxMn0sCisJezIyLCAxM30sCisJezI0LCAxNH0sCisJezI2LCAxNX0sCisJezI4LCAxNn0sCisJezMwLCAxN30sCisJezMyLCAxOH0sCisJezM0LCAxOX0sCisKKworfTsKKworLy8gMjAwNjA2MTkuMyBtb2RpZnkgZnJvbSBCcnVjZSdzIG1haWwKK3UzMiB3ODlyZjI0Ml90eHZnYV9kYXRhW11bNV0gPQoreworCS8vbG93IGdhaW4gbW9kZQorCXsgKDB4MDU8PDI0KXwweDI0QzAwQSwgMCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MjUyMzEzMSB9LC8vICA7IG1pbiBnYWluCisJeyAoMHgwNTw8MjQpfDB4MjRDODBBLCAxLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUyNTIzMTMxIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDMDRBLCAyLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUyNTIzMTMxIH0sLy8gIChkZWZhdWx0KSArMTRkQm0gKEFOVCkKKwl7ICgweDA1PDwyNCl8MHgyNEM4NEEsIDMsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTI1MjMxMzEgfSwKKworCS8vVFhWR0E9MHgxMAorCXsgKDB4MDU8PDI0KXwweDI0QzQwQSwgNCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg2MDYwMzgzOCB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzQwQSwgNSwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg2NTY1M0IzQiB9LAorCisJLy9UWFZHQT0weDExCisJeyAoMHgwNTw8MjQpfDB4MjRDNDRBLCA2LCAweDAwMjQxRjEzLCAweDA3MDBGRkZGLCAweDU4NTgzMzMzIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNDRBLCA3LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDVFNUUzNzM3IH0sCisKKwkvL1RYVkdBPTB4MTIKKwl7ICgweDA1PDwyNCl8MHgyNEM0OEEsIDgsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTM1MzMwMzAgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM0OEEsIDksIDB4MDAyNDFGMTMsIDB4MDcwMEZGRkYsIDB4NTk1OTM0MzQgfSwKKworCS8vVFhWR0E9MHgxMworCXsgKDB4MDU8PDI0KXwweDI0QzRDQSwgMTAsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTI1MjMwMzAgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM0Q0EsIDExLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDU2NTYzMjMyIH0sCisKKwkvL1RYVkdBPTB4MTQKKwl7ICgweDA1PDwyNCl8MHgyNEM1MEEsIDEyLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDU0NTQzMTMxIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNTBBLCAxMywgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1ODU4MzQzNCB9LAorCisJLy9UWFZHQT0weDE1CisJeyAoMHgwNTw8MjQpfDB4MjRDNTRBLCAxNCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1NDU0MzEzMSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzU0QSwgMTUsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTk1OTM0MzQgfSwKKworCS8vVFhWR0E9MHgxNgorCXsgKDB4MDU8PDI0KXwweDI0QzU4QSwgMTYsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTU1NTMxMzEgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM1OEEsIDE3LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDVCNUIzNTM1IH0sCisKKwkvL1RYVkdBPTB4MTcKKwl7ICgweDA1PDwyNCl8MHgyNEM1Q0EsIDE4LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDUxNTEyRjJGIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNUNBLCAxOSwgMHgwMDI0MUYxMywgMHgwNzAwRkZGRiwgMHg1NTU1MzEzMSB9LAorCisJLy9UWFZHQT0weDE4CisJeyAoMHgwNTw8MjQpfDB4MjRDNjBBLCAyMCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg0RjRGMkUyRSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzYwQSwgMjEsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTM1MzMwMzAgfSwKKworCS8vVFhWR0E9MHgxOQorCXsgKDB4MDU8PDI0KXwweDI0QzY0QSwgMjIsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NEU0RTJEMkQgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM2NEEsIDIzLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDUzNTMzMDMwIH0sCisKKwkvL1RYVkdBPTB4MUEKKwl7ICgweDA1PDwyNCl8MHgyNEM2OEEsIDI0LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUwNTAyRTJFIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNjhBLCAyNSwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1NTU1MzEzMSB9LAorCisJLy9UWFZHQT0weDFCCisJeyAoMHgwNTw8MjQpfDB4MjRDNkNBLCAyNiwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1MzUzMzAzMCB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzZDQSwgMjcsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NUE1QTM0MzQgfSwKKworCS8vVFhWR0E9MHgxQworCXsgKDB4MDU8PDI0KXwweDI0QzcwQSwgMjgsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTU1NTMxMzEgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM3MEEsIDI5LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDVENUQzNjM2IH0sCisKKwkvL1RYVkdBPTB4MUQKKwl7ICgweDA1PDwyNCl8MHgyNEM3NEEsIDMwLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDVGNUYzNzM3IH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNzRBLCAzMSwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg2NTY1M0IzQiB9LAorCisJLy9UWFZHQT0weDFFCisJeyAoMHgwNTw8MjQpfDB4MjRDNzhBLCAzMiwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg2NjY2M0IzQiB9LAorCXsgKDB4MDU8PDI0KXwweDI0Qzc4QSwgMzMsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NzA3MDQxNDEgfSwKKworCS8vVFhWR0E9MHgxRgorCXsgKDB4MDU8PDI0KXwweDI0QzdDQSwgMzQsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NzI3MjQyNDIgfQorfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MgLS0KKy8vCisvLyAgUm91dGluZSBEZXNjcmlwdGlvbjoKKy8vICAgIFJlYWRzIGluIHRoZSBFdGhlcm5ldCBhZGRyZXNzIGZyb20gdGhlIElDLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBwSHdEYXRhICAgICAgICAtIFRoZSBwSHdEYXRhIHN0cnVjdHVyZQorLy8KKy8vICBSZXR1cm4gVmFsdWU6CisvLworLy8gICAgVGhlIGFkZHJlc3MgaXMgc3RvcmVkIGluIEV0aGVybmV0SURBZGRyLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkCitVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyCWx0bXA7CisKKwkvLyBSZWFkaW5nIEV0aGVybmV0IGFkZHJlc3MgZnJvbSBFRVBST00gYW5kIHNldCBpbnRvIGhhcmR3YXJlIGR1ZSB0byBNQUMgYWRkcmVzcyBtYXliZSBjaGFuZ2UuCisJLy8gT25seSB1bnBsdWcgYW5kIHBsdWcgYWdhaW4gY2FuIG1ha2UgaGFyZHdhcmUgcmVhZCBFRVBST00gYWdhaW4uIDIwMDYwNzI3CisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODAwMDAwMCApOyAvLyBTdGFydCBFRVBST00gYWNjZXNzICsgUmVhZCArIGFkZHJlc3MoMHgwZCkKKwlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZsdG1wICk7CisJKih1MTYgKilwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzID0gY3B1X3RvX2xlMTYoKHUxNilsdG1wKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwMTAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCSoodTE2ICopKHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MgKyAyKSA9IGNwdV90b19sZTE2KCh1MTYpbHRtcCk7IC8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MDIwMDAwICk7IC8vIFN0YXJ0IEVFUFJPTSBhY2Nlc3MgKyBSZWFkICsgYWRkcmVzcygweDBkKQorCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJmx0bXAgKTsKKwkqKHUxNiAqKShwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzICsgNCkgPSBjcHVfdG9fbGUxNigodTE2KWx0bXApOyAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJKih1MTYgKikocEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyArIDYpID0gMDsKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2U4LCBjcHVfdG9fbGUzMigqKHUzMiAqKXBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MpICk7IC8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2VjLCBjcHVfdG9fbGUzMigqKHUzMiAqKShwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzKzQpKSApOyAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCit9CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDYXJkR2V0TXVsdGljYXN0Qml0IC0tCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBGb3IgYSBnaXZlbiBtdWx0aWNhc3QgYWRkcmVzcywgcmV0dXJucyB0aGUgYnl0ZSBhbmQgYml0IGluIHRoZSBjYXJkIG11bHRpY2FzdCByZWdpc3RlcnMgdGhhdCBpdCBoYXNoZXMgdG8uCisvLyAgICBDYWxscyBDYXJkQ29tcHV0ZUNyYygpIHRvIGRldGVybWluZSB0aGUgQ1JDIHZhbHVlLgorLy8gIEFyZ3VtZW50czoKKy8vICAgIEFkZHJlc3MgLSB0aGUgYWRkcmVzcworLy8gICAgQnl0ZSAtIHRoZSBieXRlIHRoYXQgaXQgaGFzaGVzIHRvCisvLyAgICBWYWx1ZSAtIHdpbGwgaGF2ZSBhIDEgaW4gdGhlIHJlbGV2YW50IGJpdAorLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIENhcmRHZXRNdWx0aWNhc3RCaXQoICAgdTggQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1NdLAorCQkJCQkJICAgdTggKkJ5dGUsICB1OCAqVmFsdWUgKQoreworICAgIHUzMiBDcmM7CisgICAgdTMyIEJpdE51bWJlcjsKKworICAgIC8vIEZpcnN0IGNvbXB1dGUgdGhlIENSQy4KKyAgICBDcmMgPSBDYXJkQ29tcHV0ZUNyYyhBZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MpOworCisJLy8gVGhlIGNvbXB1dGVkIENSQyBpcyBiaXQwfjMxIGZyb20gbGVmdCB0byByaWdodAorCS8vQXQgZmlyc3Qgd2Ugc2hvdWxkIGRvIHJpZ2h0IHNoaWZ0IDI1Yml0cywgYW5kIHJlYWQgN2JpdHMgYnkgdXNpbmcgJyYnLCAyXjc9MTI4CisJQml0TnVtYmVyID0gKHUzMikgKChDcmMgPj4gMjYpICYgMHgzZik7CisKKwkqQnl0ZSAgPSAodTgpIChCaXROdW1iZXIgPj4gMyk7Ly8gOTAwNTE0IG9yaWdpbmFsIChCaXROdW1iZXIgLyA4KQorCSpWYWx1ZSA9ICh1OCkgKCh1OCkxIDw8IChCaXROdW1iZXIgJSA4KSk7Cit9CisKK3ZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyCWx0bXAsIGxvb3A7CisKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPD0gUkZfTUFYSU1fVjEgKQorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweGZmZmZmZjM4ICk7CisJZWxzZQorCXsKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNmNCwgMHhGRjU4MDdGRiApOy8vIDIwMDYwNzIxIEZvciBORVcgSUMgMHhGRjU4MDdGRgorCisJCS8vIDIwMDYwNTExLjEgRml4IHRoZSBmb2xsb3dpbmcgNCBzdGVwcyBmb3IgUnggb2YgUkYgMjIzMCBpbml0aWFsIGZhaWwKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHg4MCApOy8vIHJlZ3VsYXRvciBvbiBvbmx5CisJCU9TX1NMRUVQKDEwMDAwKTsgLy8gTW9kaWZ5IDIwMDUxMjIxLjEuYgorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweGI4ICk7Ly8gUkVHX09OIFJGX1JTVE4gb24sIGFuZAorCQlPU19TTEVFUCgxMDAwMCk7IC8vIE1vZGlmeSAyMDA1MTIyMS4xLmIKKworCQlsdG1wID0gMHg0OTY4OworCQlpZiggKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MikgfHwKKwkJCShSRl9XQl8yNDJfMSA9PSBwSHdEYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAorCQkJbHRtcCA9IDB4NDQ2ODsKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkMCwgbHRtcCApOworCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4YTAgKTsvLyBQTExfUEQgUkVGX1BEIHNldCB0byAwCisKKwkJT1NfU0xFRVAoMjAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisJCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNkMCwgJmx0bXAgKTsKKwkJbG9vcCA9IDUwMDsgLy8gV2FpdCBmb3IgNSBzZWNvbmQgMjAwNjExMDEKKwkJd2hpbGUoICEobHRtcCAmIDB4MjApICYmIGxvb3AtLSApCisJCXsKKwkJCU9TX1NMRUVQKDEwMDAwKTsgLy8gTW9kaWZ5IDIwMDUxMjIxLjEuYgorCQkJaWYoICFXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzZDAsICZsdG1wICkgKQorCQkJCWJyZWFrOworCQl9CisKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHhlMCApOy8vIE1MS19FTgorCX0KKworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjAsIDEgKTsvLyBSZXNldCBoYXJkd2FyZSBmaXJzdAorCU9TX1NMRUVQKDEwMDAwKTsgLy8gQWRkIHRoaXMgMjAwNTEyMjEuMS5iCisKKwkvLyBTZXQgYnVyc3Qgd3JpdGUgZGVsYXkKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Y4LCAweDdmZiApOworfQorCit2b2lkIFNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNCggIHBod19kYXRhX3QgcEh3RGF0YSwgdTMyICpwbHRtcCAsY2hhciBudW1iZXIpCit7CisJdTgJaTsKKworCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwl7CisJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gYWw3MjMwX3JmX2RhdGFfMjRbaV07CisJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IChhbDcyMzBfcmZfZGF0YV8yNFtpXSYweGZmZmZmZik7CisJfQorfQorCit2b2lkIFNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF81MCggIHBod19kYXRhX3QgcEh3RGF0YSwgdTMyICpwbHRtcCwgY2hhciBudW1iZXIpCit7CisJdTgJaTsKKworCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwl7CisJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gYWw3MjMwX3JmX2RhdGFfNTBbaV07CisJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IChhbDcyMzBfcmZfZGF0YV81MFtpXSYweGZmZmZmZik7CisJfQorfQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gUkZTeW50aGVzaXplcl9pbml0aWFsIC0tCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQKK1JGU3ludGhlc2l6ZXJfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJdTMyCWFsdG1wWzMyXTsKKwl1MzIgKglwbHRtcCA9IGFsdG1wOworCXUzMglsdG1wOworCXU4CW51bWJlcj0weDAwOyAvLyBUaGUgbnVtYmVyIG9mIHJlZ2lzdGVyIHZhbGUKKwl1OAlpOworCisJLy8KKwkvLyBiaXRbMzFdICAgICAgU1BJIEVuYWJsZS4KKwkvLyAgICAgICAgICAgICAgMT1wZXJmb3JtIHN5bnRoZXNpemVyIHByb2dyYW0gb3BlcmF0aW9uLiBUaGlzIGJpdCB3aWxsCisJLy8gICAgICAgICAgICAgIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4KKwkvLyBiaXRbMzBdICAgICAgU1BJIFIvVyBDb250cm9sCisJLy8gICAgICAgICAgICAgIDA9d3JpdGUsICAgIDE9cmVhZAorCS8vIGJpdFsyOToyNF0gICBTUEkgRGF0YSBGb3JtYXQgTGVuZ3RoCisJLy8gYml0WzE3OjQgXSAgIFJGIERhdGEgYml0cy4KKwkvLyBiaXRbMyA6MCBdICAgUkYgYWRkcmVzcy4KKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJY2FzZSBSRl9NQVhJTV8yODI1OgorCWNhc2UgUkZfTUFYSU1fVjE6IC8vIDExZyBXaW5ib25kIDJuZCBCQih3aXRoIFBoeSBib2FyZCAodjEpICsgTWF4aW0gMzMxKQorCQludW1iZXIgPSBzaXplb2YobWF4MjgyNV9yZl9kYXRhKS9zaXplb2YobWF4MjgyNV9yZl9kYXRhWzBdKTsKKwkJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQl7CisJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IG1heDI4MjVfcmZfZGF0YVtpXTsvLyBCYWNrdXAgUmYgcGFyYW1ldGVyCisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI1X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfTUFYSU1fMjgyNzoKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjdfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjdfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI3X3JmX2RhdGFbaV07CisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI3X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfTUFYSU1fMjgyODoKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjhfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjhfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI4X3JmX2RhdGFbaV07CisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI4X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfTUFYSU1fMjgyOToKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjlfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjlfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI5X3JmX2RhdGFbaV07CisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI5X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfQUlST0hBXzIyMzA6CisJCW51bWJlciA9IHNpemVvZihhbDIyMzBfcmZfZGF0YSkvc2l6ZW9mKGFsMjIzMF9yZl9kYXRhWzBdKTsKKwkJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQl7CisJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IGFsMjIzMF9yZl9kYXRhW2ldOworCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggYWwyMjMwX3JmX2RhdGFbaV0sIDIwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfQUlST0hBXzIyMzBTOgorCQludW1iZXIgPSBzaXplb2YoYWwyMjMwc19yZl9kYXRhKS9zaXplb2YoYWwyMjMwc19yZl9kYXRhWzBdKTsKKwkJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQl7CisJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IGFsMjIzMHNfcmZfZGF0YVtpXTsKKwkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMHNfcmZfZGF0YVtpXSwgMjApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKworCQkvL1N0YXJ0IHRvIGZpbGwgUkYgcGFyYW1ldGVycywgUExMX09OIHNob3VsZCBiZSBwdWxsZWQgbG93LgorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7CisjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBsb3dcbiIpKTsKKyNlbmRpZgorCisJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV8yNCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzI0WzBdKTsKKwkJU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KHBId0RhdGEsIHBsdG1wLCBudW1iZXIpOworCQlicmVhazsKKworCWNhc2UgUkZfV0JfMjQyOgorCWNhc2UgUkZfV0JfMjQyXzE6IC8vIDIwMDYwNjE5LjUgQWRkCisJCW51bWJlciA9IHNpemVvZih3ODlyZjI0Ml9yZl9kYXRhKS9zaXplb2Yodzg5cmYyNDJfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJbHRtcCA9IHc4OXJmMjQyX3JmX2RhdGFbaV07CisJCQlpZiggaSA9PSA0ICkgLy8gVXBkYXRlIHRoZSBWQ08gdHJpbSBmcm9tIEVFUFJPTQorCQkJeworCQkJCWx0bXAgJj0gfjB4ZmYwOyAvLyBNYXNrIGJpdDQgfmJpdDExCisJCQkJbHRtcCB8PSBwSHdEYXRhLT5WQ09fdHJpbTw8NDsKKwkJCX0KKworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBsdG1wOworCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggbHRtcCwgMjQpOworCQl9CisJCWJyZWFrOworCX0KKworCXBId0RhdGEtPnBoeV9udW1iZXIgPSBudW1iZXI7CisKKwkgLy8gVGhlIDE2IGlzIHRoZSBtYXhpbXVtIGNhcGFiaWxpdHkgb2YgaGFyZHdhcmUuIEhlcmUgdXNlIDEyCisJaWYoIG51bWJlciA+IDEyICkgeworCQkvL1diMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMTIsIE5PX0lOQ1JFTUVOVCApOworCQlmb3IoIGk9MDsgaTwxMjsgaSsrICkgLy8gRm9yIEFsMjIzMAorCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXBbaV0gKTsKKworCQlwbHRtcCArPSAxMjsKKwkJbnVtYmVyIC09IDEyOworCX0KKworCS8vIFdyaXRlIHRvIHJlZ2lzdGVyLiBudW1iZXIgbXVzdCBsZXNzIGFuZCBlcXVhbCB0aGFuIDE2CisJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHg4NjQsIHBsdG1wW2ldICk7CisKKwkvLyAyMDA2MDYzMC4xIENhbGlicmF0aW9uIG9ubHkgMSB0aW1lCisJaWYoIHBId0RhdGEtPkNhbE9uZVRpbWUgKQorCQlyZXR1cm47CisJcEh3RGF0YS0+Q2FsT25lVGltZSA9IDE7CisKKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisKKwkJCS8vIDIwMDYwNTExLjEgLS0tIE1vZGlmeWluZyB0aGUgZm9sbG93IHN0ZXAgZm9yIFJ4IGlzc3VlLS0tLS0tLS0tLS0tLS0tLS0KKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDc8PDIwKXwweEUxNjhFLCAyMCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCgxMDAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMF9yZl9kYXRhWzddLCAyMCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCgxMDAwMCk7CisKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisKKwkJCS8vIDIwMDYwNTExLjEgLS0tIE1vZGlmeWluZyB0aGUgZm9sbG93IHN0ZXAgZm9yIFJ4IGlzc3VlLS0tLS0tLS0tLS0tLS0tLS0KKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4ODAgKTsvLyByZWd1bGF0b3Igb24gb25seQorCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4YTAgKTsvLyBQTExfUEQgUkVGX1BEIHNldCB0byAwCisJCQlPU19TTEVFUCgxMDAwMCk7IC8vIE1vZGlmeSAyMDA1MTIyMS4xLmIKKworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHhlMCApOy8vIE1MS19FTgorCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiMCwgMSApOy8vIFJlc2V0IGhhcmR3YXJlIGZpcnN0CisJCQlPU19TTEVFUCgxMDAwMCk7IC8vIEFkZCB0aGlzIDIwMDUxMjIxLjEuYgorCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkJLy8gVGhlIGZvbGxvdyBjb2RlIGRvZXNuJ3QgdXNlIHRoZSBidXJzdC13cml0ZSBtb2RlCisJCQkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMHgwRiwgKDB4MEY8PDIwKSB8IDB4RjAxQTApOyAvL1JhaXNlIEluaXRpYWwgU2V0dGluZworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwRjw8MjApIHwgMHhGMDFBMCwgMjApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQlsdG1wID0gcEh3RGF0YS0+V2IzNVJlZy5CQjVDICYgMHhmZmZmZjAwMDsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNWMsIGx0bXAgKTsKKwkJCXBId0RhdGEtPldiMzVSZWcuQkI1MCB8PSAweDEzOy8vKE1BU0tfSVFDQUxfTU9ERXxNQVNLX0NBTElCX1NUQVJUKTsvLzIwMDYwMzE1LjEgbW9kaWZ5CisgICAgICAgIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDUwLCBwSHdEYXRhLT5XYjM1UmVnLkJCNTApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCS8vcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAweDBGLCAoMHgwRjw8MjApIHwgMHhGMDFCMCk7IC8vQWN0aXZhdGUgRmlsdGVyIENhbC4KKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDIwKSB8IDB4RjAxQjAsIDIwKTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCisJCQkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMHgwRiwgKDB4MEY8PDIwKSB8IDB4RjAxZTApOyAvL0FjdGl2YXRlIFRYIERDQworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwRjw8MjApIHwgMHhGMDFFMCwgMjApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCS8vcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAweDBGLCAoMHgwRjw8MjApIHwgMHhGMDFBMCk7IC8vUmVzb3RyZSBJbml0aWFsIFNldHRpbmcKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDIwKSB8IDB4RjAxQTAsIDIwKTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworLy8JCQkvL0ZvcmNlIFRYSShRKVAoTikgdG8gbm9ybWFsIGNvbnRyb2wKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNWMsIHBId0RhdGEtPldiMzVSZWcuQkI1QyApOworCQkJcEh3RGF0YS0+V2IzNVJlZy5CQjUwICY9IH4weDEzOy8vKE1BU0tfSVFDQUxfTU9ERXxNQVNLX0NBTElCX1NUQVJUKTsKKyAgICAgICAgCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNTAsIHBId0RhdGEtPldiMzVSZWcuQkI1MCk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV83MjMwOgorCisJCQkvL1JGIHBhcmFtZXRlcnMgaGF2ZSBmaWxsZWQgY29tcGxldGVseSwgUExMX09OIHNob3VsZCBiZQorCQkJLy9wdWxsZWQgaGlnaAorCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDA4MCApOworCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQkJV0JERUJVRygoIiogUExMX09OICAgIGhpZ2hcbiIpKTsKKwkJCSNlbmRpZgorCisJCQkvLzIuNEdIegorCQkJLy9sdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MUFCQThGOworCQkJLy9XYjM1UmVnX1dyaXRlU3luYyBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vT1NfU0xFRVAoMTAwMCk7IC8vIFNsZWVwIDEgbXMKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHg5QUJBOEY7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgzQUJBOEY7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgxQUJBOEY7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsKKworCQkJLy81R0h6CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7CisJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCQlXQkRFQlVHKCgiKiBQTExfT04gICAgbG93XG4iKSk7CisJCQkjZW5kaWYKKworCQkJbnVtYmVyID0gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwKS9zaXplb2YoYWw3MjMwX3JmX2RhdGFfNTBbMF0pOworCQkJU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKHBId0RhdGEsIHBsdG1wLCBudW1iZXIpOworCQkJLy8gV3JpdGUgdG8gcmVnaXN0ZXIuIG51bWJlciBtdXN0IGxlc3MgYW5kIGVxdWFsIHRoYW4gMTYKKwkJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBwbHRtcFtpXSApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwODAgKTsKKwkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBoaWdoXG4iKSk7CisJCQkjZW5kaWYKKworCQkJLy9sdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MTJCQUNGOworCQkJLy9XYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4OUFCQThGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4M0FCQThGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MTJCQUNGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCS8vV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDA4MCApOworCQkJLy9XQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9XQl8yNDI6CisJCWNhc2UgUkZfV0JfMjQyXzE6IC8vIDIwMDYwNjE5LjUgQWRkCisKKwkJCS8vCisJCQkvLyA7IFZlcnNpb24gMS4zQiByZXZpc2lvbiBpdGVtczogZm9yIEZBNTk3NkEgLCBPY3RvYmVyIDMsIDIwMDUgYnkgSFRIbworCQkJLy8KKwkJCWx0bXAgPSBwSHdEYXRhLT5XYjM1UmVnLkJCNUMgJiAweGZmZmZmMDAwOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1YywgbHRtcCApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1OCwgMCApOworCQkJcEh3RGF0YS0+V2IzNVJlZy5CQjUwIHw9IDB4MzsvLyhNQVNLX0lRQ0FMX01PREV8TUFTS19DQUxJQl9TVEFSVCk7Ly8yMDA2MDYzMAorCSAgICAgIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDUwLCBwSHdEYXRhLT5XYjM1UmVnLkJCNTApOworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICgxKS4gVkNPIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbgorCQkJLy9DYWxpYnJhdGlvbiAoMWEuMCkuIFN5bnRoZXNpemVyIHJlc2V0IChIVEhvIGNvcnJlY3RlZCAyMDA1LzA1LzEwKQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwRjw8MjQpIHwgMHgwMDEwMUUsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKCA1MDAwICk7IC8vIFNsZWVwIDVtcworCQkJLy9DYWxpYnJhdGlvbiAoMWEpLiBWQ08gZnJlcXVlbmN5IGNhbGlicmF0aW9uIG1vZGUgOyB3YWl0aW5nIDJtc2VjIFZDTyBjYWxpYnJhdGlvbiB0aW1lCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZFNjljMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoIDIwMDAgKTsgLy8gU2xlZXAgMm1zCisKKwkJCS8vLS0tLS0gQ2FsaWJyYXRpb24gKDIpLiBUWCBiYXNlYmFuZCBHbS1DIGZpbHRlciBhdXRvLXR1bmluZworCQkJLy9DYWxpYnJhdGlvbiAoMmEpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RjhFQkMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICgyYi4wKS4gVFggZmlsdGVyIGF1dG8tdHVuaW5nIEJXOiBURkxCVz0xMDEgKFRDNTM3NkEgZGVmYXVsdCkKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDc8PDI0KSB8IDB4MEM2OENFLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICgyYikuIHNlbmQgVFggcmVzZXQgc2lnbmFsIChIVEhvIGNvcnJlY3RlZCBNYXkgMTAsIDIwMDUpCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDBGPDwyNCkgfCAweDAwMjAxRSwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoMmMpLiB0dXJuLW9uIFRYIEdtLUMgZmlsdGVyIGF1dG8tdHVuaW5nCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZDRUJDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoIDE1MCApOyAvLyBTbGVlcCAxNTAgdXMKKwkJCS8vdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEY4RUJDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICgzKS4gUlggYmFzZWJhbmQgR20tQyBmaWx0ZXIgYXV0by10dW5pbmcKKwkJCS8vQ2FsaWJyYXRpb24gKDNhKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZBRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoM2IuMCkuIFJYIGZpbHRlciBhdXRvLXR1bmluZyBCVzogUkZMQlc9MTAwIChUQzUzNzZBK2Nvcm5lciBkZWZhdWx0OyBKdWx5IDI2LCAyMDA1KQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwNzw8MjQpIHwgMHgwQzY4Q0UsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDNiKS4gc2VuZCBSWCByZXNldCBzaWduYWwgKEhUSG8gY29ycmVjdGVkIE1heSAxMCwgMjAwNSkKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDI0KSB8IDB4MDA0MDFFLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICgzYykuIHR1cm4tb24gUlggR20tQyBmaWx0ZXIgYXV0by10dW5pbmcKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkVFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCggMTUwICk7IC8vIFNsZWVwIDE1MCB1cworCQkJLy9DYWxpYnJhdGlvbiAoM2UpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKwkJCS8vLS0tLS0gQ2FsaWJyYXRpb24gKDQpLiBUWCBMTyBsZWFrYWdlIGNhbGlicmF0aW9uCisJCQkvL0NhbGlicmF0aW9uICg0YSkuIFRYIExPIGxlYWthZ2UgY2FsaWJyYXRpb24KKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkQ2QkMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCggMTUwICk7IC8vIFNsZWVwIDE1MCB1cworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICg1KS4gUlggREMgb2Zmc2V0IGNhbGlicmF0aW9uCisJCQkvL0NhbGlicmF0aW9uICg1YSkuIHR1cm4gb2ZmIEVOQ0FMIHNpZ25hbCBhbmQgc2V0IHRvIFJYIFNXIERDIGNhbGlyYXRpb24gbW9kZQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGQUVEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDViKS4gdHVybiBvZmYgQUdDIHNlcnZvLWxvb3AgJiBSU1NJCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAxPDwyNCkgfCAweEVCRkZDMiwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLzsgZm9yIExOQT0xMSAtLS0tLS0tLQorCQkJLy9DYWxpYnJhdGlvbiAoNWMtaCkuIFJYIERDIG9mZnNldCBjdXJyZW50IGJpYXMgT047ICYgTE5BPTExOyBSWFZHQT0xMTExMTEKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDY8PDI0KSB8IDB4MzQzRkNDLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1ZCkuIHR1cm4gb24gUlggREMgb2Zmc2V0IGNhbCBmdW5jdGlvbjsgYW5kIHdhaXRpbmcgMiBtc2VjIGNhbCB0aW1lCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZGNkRDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoMjAwMCk7IC8vIFNsZWVwIDJtcworCQkJLy9DYWxpYnJhdGlvbiAoNWYpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKwkJCS8vOyBmb3IgTE5BPTEwIC0tLS0tLS0tCisJCQkvL0NhbGlicmF0aW9uICg1Yy1tKS4gUlggREMgb2Zmc2V0IGN1cnJlbnQgYmlhcyBPTjsgJiBMTkE9MTA7IFJYVkdBPTExMTExMQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwNjw8MjQpIHwgMHgzNDJGQ0MsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDVkKS4gdHVybiBvbiBSWCBEQyBvZmZzZXQgY2FsIGZ1bmN0aW9uOyBhbmQgd2FpdGluZyAyIG1zZWMgY2FsIHRpbWUKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkY2REMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCgyMDAwKTsgLy8gU2xlZXAgMm1zCisJCQkvL0NhbGlicmF0aW9uICg1ZikuIHR1cm4gb2ZmIEVOQ0FMIHNpZ25hbAorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGQUVEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworCQkJLy87IGZvciBMTkE9MDEgLS0tLS0tLS0KKwkJCS8vQ2FsaWJyYXRpb24gKDVjLW0pLiBSWCBEQyBvZmZzZXQgY3VycmVudCBiaWFzIE9OOyAmIExOQT0wMTsgUlhWR0E9MTExMTExCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDA2PDwyNCkgfCAweDM0MUZDQywgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoNWQpLiB0dXJuIG9uIFJYIERDIG9mZnNldCBjYWwgZnVuY3Rpb247IGFuZCB3YWl0aW5nIDIgbXNlYyBjYWwgdGltZQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGRjZEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDIwMDApOyAvLyBTbGVlcCAybXMKKwkJCS8vQ2FsaWJyYXRpb24gKDVmKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZBRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLzsgZm9yIExOQT0wMCAtLS0tLS0tLQorCQkJLy9DYWxpYnJhdGlvbiAoNWMtbCkuIFJYIERDIG9mZnNldCBjdXJyZW50IGJpYXMgT047ICYgTE5BPTAwOyBSWFZHQT0xMTExMTEKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDY8PDI0KSB8IDB4MzQwRkNDLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1ZCkuIHR1cm4gb24gUlggREMgb2Zmc2V0IGNhbCBmdW5jdGlvbjsgYW5kIHdhaXRpbmcgMiBtc2VjIGNhbCB0aW1lCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZGNkRDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoMjAwMCk7IC8vIFNsZWVwIDJtcworCQkJLy9DYWxpYnJhdGlvbiAoNWYpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1ZykuIHR1cm4gb24gQUdDIHNlcnZvLWxvb3AKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDE8PDI0KSB8IDB4RUZGRkMyLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKwkJCS8vOyAtLS0tLSBDYWxpYnJhdGlvbiAoNykuIFN3aXRjaCBSRiBjaGlwIHRvIG5vcm1hbCBtb2RlCisJCQkvLzB4MDAgMHhGODYxMDAgOyAzRTE4NCAgIDsgU3dpdGNoIFJGIGNoaXAgdG8gbm9ybWFsIG1vZGUKKy8vCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBAQCAyMDA2MDcyMQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGODYxMDAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOyAvLyBTbGVlcCA1IG1zCisKKy8vCQkJLy93cml0ZSBiYWNrCisvLwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNWMsIHBId0RhdGEtPldiMzVSZWcuQkI1QyApOworLy8JCQlwSHdEYXRhLT5XYjM1UmVnLkJCNTAgJj0gfjB4MTM7Ly8oTUFTS19JUUNBTF9NT0RFfE1BU0tfQ0FMSUJfU1RBUlQpOyAvLyAyMDA2MDMxNS4xIGZpeAorLy8gICAgICAJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1MCwgcEh3RGF0YS0+V2IzNVJlZy5CQjUwKTsKKy8vCQkJT1NfU0xFRVAoMTAwMCk7IC8vIFNsZWVwIDEgbXMKKwkJCWJyZWFrOworCX0KK30KKwordm9pZCBCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMCggIHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMglwbHRtcFsxMl07CisKKwlwbHRtcFswXSA9IDB4MTZBODMzN0E7IC8vIDB4MTZhNTIxNWY7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwlwbHRtcFsxXSA9IDB4OUFGRjlBQTY7IC8vIDB4OWFmZjljYTY7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwlwbHRtcFsyXSA9IDB4NTVEMDBBMDQ7IC8vIDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwlwbHRtcFszXSA9IDB4RkZGNzIwMzE7IC8vIDB4RmZGZjIxMzg7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwlwV2IzNVJlZy0+QkIwQyA9IDB4RkZGNzIwMzE7CisJcGx0bXBbNF0gPSAweDBGYWNEQ0M1OyAvLyAweDEwMTAgQUdDX0N0cmw1IC8vIDIwMDUwOTI3IDB4MEZhY0RDQjcKKwlwbHRtcFs1XSA9IDB4MDBDQUEzMzM7IC8vIDB4MDBlYWEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwlwbHRtcFs2XSA9IDB4RjIyMTExMTE7IC8vIDB4MTExMTExMTE7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwlwbHRtcFs4XSA9IDB4MDY0NDM0NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwlwbHRtcFs5XSA9IDB4QTgwMDJBNzk7IC8vIDB4YTkwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJcGx0bXBbMTBdID0gMHg0MDAwMDUyODsgLy8gMjAwNTA5MjcgMHg0MDAwMDIyOAorCXBsdG1wWzExXSA9IDB4MjMyRDdGMzA7IC8vIDB4MjM0NTdmMzA7Ly8gMHgxMDJjIEFfQUNRX0N0cmwKKwlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyRDdGMzA7CisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCXBsdG1wWzBdID0gMHgwMDAwMmM1NDsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJjNTQ7CisJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwlwbHRtcFsyXSA9IDB4NUIyQzg3Njk7IC8vIDB4MTAzOCBCX1RYUlhfQ3RybAorCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwlwbHRtcFs2XSA9IDB4MDAzMzJDMUI7IC8vIDB4MDA0NTNCMjQ7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyCisJcGx0bXBbN10gPSAweDBBMDBGRUZGOyAvLyAweDBFMDBGRUZGOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlcgorCXBsdG1wWzhdID0gMHgyQjEwNjIwODsgLy8gMHgxMDUwIE1PREVfQ3RybAorCXBXYjM1UmVnLT5CQjUwID0gMHgyQjEwNjIwODsKKwlwbHRtcFs5XSA9IDA7IC8vIDB4MTA1NAorCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwlwbHRtcFsxMF0gPSAweDUyNTI0MjQyOyAvLyAweDY0NjQ1MjUyOyAvLyAweDEwNTggSVFfQWxwaGEKKwlwV2IzNVJlZy0+QkI1OCA9IDB4NTI1MjQyNDI7CisJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKK30KKwordm9pZCBCQlByb2Nlc3Nvcl9BTDcyMzBfNTAwMCggIHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMglwbHRtcFsxMl07CisKKwlwbHRtcFswXSA9IDB4MTZBQTY2Nzg7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwlwbHRtcFsxXSA9IDB4OUFGRkEwQjI7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwlwbHRtcFsyXSA9IDB4NTVEMDBBMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwlwbHRtcFszXSA9IDB4RUZGRjIzM0U7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwlwV2IzNVJlZy0+QkIwQyA9IDB4RUZGRjIzM0U7CisJcGx0bXBbNF0gPSAweDBGYWNEQ0M1OyAvLyAweDEwMTAgQUdDX0N0cmw1IC8vIDIwMDUwOTI3IDB4MEZhY0RDQjcKKwlwbHRtcFs1XSA9IDB4MDBDQUEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwlwbHRtcFs2XSA9IDB4RjI0MzIxMTE7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwlwbHRtcFs4XSA9IDB4MDVDNDM0NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJcGx0bXBbMTBdID0gMHg0MDAwMDUyODsgLy8gMjAwNTA5MjcgMHg0MDAwMDIyOAorCXBsdG1wWzExXSA9IDB4MjMyRkRGMzA7Ly8gMHgxMDJjIEFfQUNRX0N0cmwKKwlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyRkRGMzA7CisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCXBsdG1wWzBdID0gMHg4MDAwMkM3QzsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCXBsdG1wWzJdID0gMHg1QjJDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCisJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCXBXYjM1UmVnLT5CQjNDID0gMHgwMDAwMDAwMDsKKwlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCXBsdG1wWzZdID0gMHgwMDMzMkMxQjsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIKKwlwbHRtcFs3XSA9IDB4MEEwMEZFRkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyCisJcGx0bXBbOF0gPSAweDJCMTA3MjA4OyAvLyAweDEwNTAgTU9ERV9DdHJsCisJcFdiMzVSZWctPkJCNTAgPSAweDJCMTA3MjA4OworCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJcFdiMzVSZWctPkJCNTQgPSAweDAwMDAwMDAwOworCXBsdG1wWzEwXSA9IDB4NTI1MjQyNDI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCXBXYjM1UmVnLT5CQjU4ID0gMHg1MjUyNDI0MjsKKwlwbHRtcFsxMV0gPSAweEFBMEFDMDAwOyAvLyAweDEwNWMgRENfQ2FuY2VsCisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBCQlByb2Nlc3NvclBvd2VydXBJbml0IC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgSW5pdGlhbGl6ZSB0aGUgQmFzZWJhbmQgcHJvY2Vzc29yLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBwSHdEYXRhICAgIC0gSGFuZGxlIG9mIHRoZSBVU0IgRGV2aWNlLgorLy8KKy8vICBSZXR1cm4gdmFsdWVzOgorLy8gICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAorQkJQcm9jZXNzb3JfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJaSwgcGx0bXBbMTJdOworCisgICAgc3dpdGNoKCBwSHdEYXRhLT5waHlfdHlwZSApCisgICAgeworCQljYXNlIFJGX01BWElNX1YxOiAvLyBJbml0aWFsaXpuZyB0aGUgV2luYm9uZCAybmQgQkIod2l0aCBQaHkgYm9hcmQgKHYxKSArIE1heGltIDMzMSkKKworCQkJcGx0bXBbMF0gPSAweDE2RjQ3RTc3OyAvLyAweDEwMDAgQUdDX0N0cmwxCisJCQlwbHRtcFsxXSA9IDB4OUFGRkFFQTQ7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwkJCXBsdG1wWzJdID0gMHg1NUQwMEEwNDsgLy8gMHgxMDA4IEFHQ19DdHJsMworCQkJcGx0bXBbM10gPSAweEVGRkYxQTM0OyAvLyAweDEwMGMgQUdDX0N0cmw0CisJCQlwV2IzNVJlZy0+QkIwQyA9IDB4RUZGRjFBMzQ7CisJCQlwbHRtcFs0XSA9IDB4MEZBQkUwQjc7IC8vIDB4MTAxMCBBR0NfQ3RybDUKKwkJCXBsdG1wWzVdID0gMHgwMENBQTMzMjsgLy8gMHgxMDE0IEFHQ19DdHJsNgorCQkJcGx0bXBbNl0gPSAweEY2NjMyMTExOyAvLyAweDEwMTggQUdDX0N0cmw3CisJCQlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwkJCXBsdG1wWzhdID0gMHgwNENDMzY0MDsgLy8gMHgxMDIwIEFHQ19DdHJsOQorCQkJcGx0bXBbOV0gPSAweDAwMDAyQTc5OyAvLyAweDEwMjQgQUdDX0N0cmwxMAorCQkJcGx0bXBbMTBdID0gKHBId0RhdGEtPnBoeV90eXBlPT0zKSA/IDB4NDAwMDBhMjggOiAweDQwMDAwMjI4OyAvLyAweDEwMjggTUFYSU1fMzMxKGIzMT0wKSArIFdCUkZfVjEoYjExPTEpIDogTUFYSU1fMzMxKGIzMT0wKSArIFdCUkZfVjIoYjExPTApCisJCQlwbHRtcFsxMV0gPSAweDIzMkZERjMwOyAvLyAweDEwMmMgQV9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMkMgPSAweDIzMkZERjMwOyAvL01vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24sIGFudGVubmEgMQorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1QjZDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCisJCQlwbHRtcFszXSA9IDB4MDAwMDAwMDA7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJCQlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IDB4MDA0NTNCMjQ7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs3XSA9IDB4MEUwMEZFRkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDg7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwODsKKwkJCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJCQlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFsxMF0gPSAweDY0NjQ2NDY0OyAvLyAweDEwNTggSVFfQWxwaGEKKwkJCXBXYjM1UmVnLT5CQjU4ID0gMHg2NDY0NjQ2NDsKKwkJCXBsdG1wWzExXSA9IDB4QUEwQUMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA3MCwgMHgwMDAwMDA0NSApOworCQkJYnJlYWs7CisKKwkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy9bMjAwNDA3MjIgV0tdCisJCS8vT25seSBmb3IgYmFzZWJhbmQgdmVyc2lvbiAyCisvLwkJY2FzZSBSRl9NQVhJTV8zMTc6CisJCWNhc2UgUkZfTUFYSU1fMjgyNToKKwkJY2FzZSBSRl9NQVhJTV8yODI3OgorCQljYXNlIFJGX01BWElNXzI4Mjg6CisKKwkJCXBsdG1wWzBdID0gMHgxNmI0N2U3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQorCQkJcGx0bXBbMV0gPSAweDlhZmZhZWE0OyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhlZmZmMWEzNDsgLy8gMHgxMDBjIEFHQ19DdHJsNAorCQkJcFdiMzVSZWctPkJCMEMgPSAweGVmZmYxYTM0OworCQkJcGx0bXBbNF0gPSAweDBmYWJlMGI3OyAvLyAweDEwMTAgQUdDX0N0cmw1CisJCQlwbHRtcFs1XSA9IDB4MDBjYWEzMzI7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwkJCXBsdG1wWzZdID0gMHhmNjYzMjExMTsgLy8gMHgxMDE4IEFHQ19DdHJsNworCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDQzM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDB4NDAwMDAxMjg7IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzExXSA9IDB4MjMyZmRmMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyZmRmMzA7IC8vTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbiwgYW50ZW5uYSAxCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDVCNkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwKKwkJCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNDID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzRdID0gMHgwMDAwM0YyOTsgLy8gMHgxMDQwIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzZdID0gMHgwMDQ1M0IyNDsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzddID0gMHgwRDAwRkRGRjsgLy8gMHgxMDRjIDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwODsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjA4OworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NjQ2NDY0NjQ7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDY0NjQ2NDY0OworCQkJcGx0bXBbMTFdID0gMHhBQTI4QzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjk6CisKKwkJCXBsdG1wWzBdID0gMHgxNmI0N2U3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQorCQkJcGx0bXBbMV0gPSAweDlhZmZhZWE0OyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhmNGZmMTYzMjsgLy8gMHhlZmZmMWEzNDsgLy8gMHgxMDBjIEFHQ19DdHJsNCBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwV2IzNVJlZy0+QkIwQyA9IDB4ZjRmZjE2MzI7IC8vIDB4ZWZmZjFhMzQ7IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzRdID0gMHgwZmFiZTBiNzsgLy8gMHgxMDEwIEFHQ19DdHJsNQorCQkJcGx0bXBbNV0gPSAweDAwY2FhMzMyOyAvLyAweDEwMTQgQUdDX0N0cmw2CisJCQlwbHRtcFs2XSA9IDB4Zjg2MzIxMTI7IC8vIDB4ZjY2MzIxMTE7IC8vIDB4MTAxOCBBR0NfQ3RybDcgTW9kaWZ5IGZvciAzMydzIDEuMC45NQorCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDQzM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDB4NDAwMDAxMjg7IG1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzExXSA9IDB4MjMyZmRmMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyZmRmMzA7IC8vTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbiwgYW50ZW5uYSAxCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDViMmM4NzY5OyAvLyAweDVCNkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwgTW9kaWZ5IGZvciAzMydzIDEuMC45NQorCQkJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCQkJcFdiMzVSZWctPkJCM0MgPSAweDAwMDAwMDAwOworCQkJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNl0gPSAweDAwMmMyNjE3OyAvLyAweDAwNDUzQjI0OyAvLyAweDEwNDggMTFiIFRYIFJDIGZpbHRlciBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwbHRtcFs3XSA9IDB4MDgwMGZlZmY7IC8vIDB4MEQwMEZERkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyIE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwODsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjA4OworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NjQ2NDRhNGE7IC8vIDB4NjQ2NDY0NjQ7IC8vIDB4MTA1OCBJUV9BbHBoYSBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwV2IzNVJlZy0+QkI1OCA9IDB4NjQ2NDY0NjQ7CisJCQlwbHRtcFsxMV0gPSAweEFBMjhDMDAwOyAvLyAweDEwNWMgRENfQ2FuY2VsCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAzMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNzAsIDB4MDAwMDAwNDUgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisKKwkJCXBsdG1wWzBdID0gMFgxNjc2NEE3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQkJLy8weDE2NzY1QTc3CisJCQlwbHRtcFsxXSA9IDB4OWFmZmFmYjI7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwkJCXBsdG1wWzJdID0gMHg1NWQwMGEwNDsgLy8gMHgxMDA4IEFHQ19DdHJsMworCQkJcGx0bXBbM10gPSAweEZGRmQyMDNjOyAvLyAweEZGRmIyMDNhOyAvLyAweDEwMGMgQUdDX0N0cmw0IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBXYjM1UmVnLT5CQjBDID0gMHhGRkZkMjAzYzsKKwkJCXBsdG1wWzRdID0gMFgwRkJGRENjNTsgLy8gMFgwRkJGRENBMDsgLy8gMHgxMDEwIEFHQ19DdHJsNSAvLzB4MEZCMkUwQjcgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcGx0bXBbNV0gPSAweDAwY2FhMzMyOyAvLyAweDAwY2FhMzMzOyAvLyAweDEwMTQgQUdDX0N0cmw2IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBsdG1wWzZdID0gMFhGNjYzMjExMTsgLy8gMFhGMTYzMjExMjsgLy8gMHgxMDE4IEFHQ19DdHJsNwkJLy8weGY2NjMyMTEyIE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0QzQzNjQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJCQlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJCQlwbHRtcFsxMF0gPSAwWDQwMDAwNTI4OwkJCQkJCQkvLzB4NDAwMDAyMjgKKwkJCXBsdG1wWzExXSA9IDB4MjMyZGZGMzA7IC8vIDB4MjMyQTlGMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCS8vMHgyMzJhOTczMAorCQkJcFdiMzVSZWctPkJCMkMgPSAweDIzMmRmRjMwOyAvL01vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24sIGFudGVubmEgMQorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1QjJDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCS8vMHg1QjZDODc2OQorCQkJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCQkJcFdiMzVSZWctPkJCM0MgPSAweDAwMDAwMDAwOworCQkJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNl0gPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIgMjAwNjA2MTMuMgorCQkJcFdiMzVSZWctPkJCNDggPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMjAwNTEyMjEgY2gxNCAyMDA2MDYxMy4yCisJCQlwbHRtcFs3XSA9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlciAyMDA2MDYxMy4yCisJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAyMDA2MDYxMy4xIDIwMDYwNjEzLjIKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwMDsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjAwOworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NTI1MjQyNDI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDUyNTI0MjQyOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV8yMjMwUzogLy8gMjAwNjA0MjAgQWRkIHRoaXMKKworCQkJcGx0bXBbMF0gPSAwWDE2NzY0QTc3OyAvLyAweDEwMDAgQUdDX0N0cmwxCQkvLzB4MTY3NjVBNzcKKwkJCXBsdG1wWzFdID0gMHg5YWZmYWZiMjsgLy8gMHgxMDA0IEFHQ19DdHJsMgorCQkJcGx0bXBbMl0gPSAweDU1ZDAwYTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJCQlwbHRtcFszXSA9IDB4RkZGZDIwM2M7IC8vIDB4RkZGYjIwM2E7IC8vIDB4MTAwYyBBR0NfQ3RybDQgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcFdiMzVSZWctPkJCMEMgPSAweEZGRmQyMDNjOworCQkJcGx0bXBbNF0gPSAwWDBGQkZEQ2M1OyAvLyAwWDBGQkZEQ0EwOyAvLyAweDEwMTAgQUdDX0N0cmw1IC8vMHgwRkIyRTBCNyBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1Lnh4eCB2ZXJzaW9uCisJCQlwbHRtcFs1XSA9IDB4MDBjYWEzMzI7IC8vIDB4MDBjYWEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcGx0bXBbNl0gPSAwWEY2NjMyMTExOyAvLyAwWEYxNjMyMTEyOyAvLyAweDEwMTggQUdDX0N0cmw3CQkvLzB4ZjY2MzIxMTIgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDNDM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDBYNDAwMDA1Mjg7CQkJCQkJCS8vMHg0MDAwMDIyOAorCQkJcGx0bXBbMTFdID0gMHgyMzJkZkYzMDsgLy8gMHgyMzJBOUYzMDsgLy8gMHgxMDJjIEFfQUNRX0N0cmwJLy8weDIzMmE5NzMwCisJCQlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyZGZGMzA7IC8vTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbiwgYW50ZW5uYSAxCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDVCMkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwJLy8weDVCNkM4NzY5CisJCQlwbHRtcFszXSA9IDB4MDAwMDAwMDA7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJCQlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAweDEwNDggMTFiIFRYIFJDIGZpbHRlciAyMDA2MDYxMy4yCisJCQlwV2IzNVJlZy0+QkI0OCA9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAyMDA1MTIyMSBjaDE0IDIwMDYwNjEzLjIKKwkJCXBsdG1wWzddID0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUc7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyIDIwMDYwNjEzLjIKKwkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUc7IC8vIDIwMDYwNjEzLjEKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwMDsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjAwOworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NTI1MjMyMzI7IC8vIDIwMDYwNDE5IDB4NTI1MjQyNDI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDUyNTIzMjMyOyAvLyAyMDA2MDQxOSAweDUyNTI0MjQyOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV83MjMwOgorLyoKKwkJCXBsdG1wWzBdID0gMHgxNmE4NGE3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQorCQkJcGx0bXBbMV0gPSAweDlhZmZhZmIyOyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhGRkZiMjAzYTsgLy8gMHgxMDBjIEFHQ19DdHJsNAorCQkJcFdiMzVSZWctPkJCMGMgPSAweEZGRmIyMDNhOworCQkJcGx0bXBbNF0gPSAweDBGQkZEQ0I3OyAvLyAweDEwMTAgQUdDX0N0cmw1CisJCQlwbHRtcFs1XSA9IDB4MDBjYWEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwkJCXBsdG1wWzZdID0gMHhmNjYzMjExMjsgLy8gMHgxMDE4IEFHQ19DdHJsNworCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDNDM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDAyMjg7CisJCQlwbHRtcFsxMV0gPSAweDIzMkE5RjMwOy8vIDB4MTAyYyBBX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIyYyA9IDB4MjMyQTlGMzA7CisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDVCMkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwKKwkJCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNjID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzRdID0gMHgwMDAwM0YyOTsgLy8gMHgxMDQwIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzZdID0gMHgwMDQ1M0IyNDsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzddID0gMHgwRTAwRkVGRjsgLy8gMHgxMDRjIDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwMDsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjAwOworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NjQ2NDUyNTI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDY0NjQ1MjUyOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKyovCisJCQlCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMCggcEh3RGF0YSApOworCisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNzAsIDB4MDAwMDAwNDUgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfV0JfMjQyOgorCQljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAorCisJCQlwbHRtcFswXSA9IDB4MTZBODUyNUQ7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwkJCXBsdG1wWzFdID0gMHg5QUZGOUFCQTsgLy8gMHgxMDA0IEFHQ19DdHJsMgorCQkJcGx0bXBbMl0gPSAweDU1RDAwQTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJCQlwbHRtcFszXSA9IDB4RUVFOTFDMzI7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwkJCXBXYjM1UmVnLT5CQjBDID0gMHhFRUU5MUMzMjsKKwkJCXBsdG1wWzRdID0gMHgwRkFDRENDNTsgLy8gMHgxMDEwIEFHQ19DdHJsNQorCQkJcGx0bXBbNV0gPSAweDAwMEFBMzQ0OyAvLyAweDEwMTQgQUdDX0N0cmw2CisJCQlwbHRtcFs2XSA9IDB4MjIyMjIyMjE7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0Q0MzNDQwOyAvLyAyMDA1MTAxOCAweDAzQ0IzNDQwOyAvLyAweDEwMjAgQUdDX0N0cmw5IDIwMDUxMDE0IDB4MDNDMzM0NDAKKwkJCXBsdG1wWzldID0gMHhBOTAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDB4MTAyOAorCQkJcGx0bXBbMTFdID0gMHgyMzQ1N0YzMDsgLy8gMHgxMDJjIEFfQUNRX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjJDID0gMHgyMzQ1N0YzMDsKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDAwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCXBsdG1wWzBdID0gMHgwMDAwMkM1NDsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjMwID0gMHgwMDAwMkM1NDsKKwkJCXBsdG1wWzFdID0gMHgwMEMwRDZDNTsgLy8gMHgxMDM0IEFfVFhSWF9DdHJsCisJCQlwbHRtcFsyXSA9IDB4NUIyQzg3Njk7IC8vIDB4MTAzOCBCX1RYUlhfQ3RybAorCQkJcGx0bXBbM10gPSBwSHdEYXRhLT5CQjNjX2NhbDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNDID0gcEh3RGF0YS0+QkIzY19jYWw7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUc7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyIDIwMDYwNjEzLjIKKwkJCXBXYjM1UmVnLT5CQjQ4ID0gQkI0OF9ERUZBVUxUX1dCMjQyXzExRzsgLy8gMjAwNjA2MTMuMSAyMDA2MDYxMy4yCisJCQlwbHRtcFs3XSA9IEJCNENfREVGQVVMVF9XQjI0Ml8xMUc7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyIDIwMDYwNjEzLjIKKwkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX1dCMjQyXzExRzsgLy8gMjAwNjA2MTMuMSAyMDA2MDYxMy4yCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDg7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwODsKKwkJCXBsdG1wWzldID0gcEh3RGF0YS0+QkI1NF9jYWw7IC8vIDB4MTA1NAorCQkJcFdiMzVSZWctPkJCNTQgPSBwSHdEYXRhLT5CQjU0X2NhbDsKKwkJCXBsdG1wWzEwXSA9IDB4NTI1MjMxMzE7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDUyNTIzMTMxOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMjAwNjA4MjUgMHhBQTJBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKyAgICB9CisKKwkvLyBGaWxsIHRoZSBMTkEgdGFibGUKKwlwV2IzNVJlZy0+TE5BVmFsdWVbMF0gPSAodTgpKHBXYjM1UmVnLT5CQjBDICYgMHhmZik7CisJcFdiMzVSZWctPkxOQVZhbHVlWzFdID0gMDsKKwlwV2IzNVJlZy0+TE5BVmFsdWVbMl0gPSAodTgpKChwV2IzNVJlZy0+QkIwQyAmIDB4ZmYwMCk+PjgpOworCXBXYjM1UmVnLT5MTkFWYWx1ZVszXSA9IDA7CisKKwkvLyBGaWxsIFNRMyB0YWJsZQorCWZvciggaT0wOyBpPE1BWF9TUTNfRklMVEVSX1NJWkU7IGkrKyApCisJCXBXYjM1UmVnLT5TUTNfZmlsdGVyW2ldID0gMHgyZjsgLy8gaGFsZiBvZiBCaXQgMCB+IDYKK30KKwordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfbWF4MjgyOSggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwpCit7CisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsgLy8gMjAwNjA2MjAuMSBNb2RpZnkKK30KKwordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWwyMjMwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApCit7CisJdTgJaW5kZXggPSAxMDA7CisKKwlpZiAocEh3RGF0YS0+VHhWZ2FGb3IyNFtDaGFubmVsLkNoYW5ObyAtIDFdICE9IDB4ZmYpIC8vIDIwMDYwNjIwLjEgQWRkCisJCWluZGV4ID0gcEh3RGF0YS0+VHhWZ2FGb3IyNFtDaGFubmVsLkNoYW5ObyAtIDFdOworCisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBpbmRleCApOworfQorCit2b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQoreworCXU4CWksIGluZGV4ID0gMTAwOworCisJc3dpdGNoICggQ2hhbm5lbC5iYW5kICkKKwl7CisJCWNhc2UgQkFORF9UWVBFX0RTU1M6CisJCWNhc2UgQkFORF9UWVBFX09GRE1fMjQ6CisJCQl7CisJCQkJaWYgKHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXSAhPSAweGZmKQorCQkJCQlpbmRleCA9IHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEJBTkRfVFlQRV9PRkRNXzU6CisJCQl7CisJCQkJZm9yIChpID0wOyBpPDM1OyBpKyspCisJCQkJeworCQkJCQlpZiAoQ2hhbm5lbC5DaGFuTm8gPT0gcEh3RGF0YS0+VHhWZ2FGb3I1MFtpXS5DaGFuTm8pCisJCQkJCXsKKwkJCQkJCWlmIChwSHdEYXRhLT5UeFZnYUZvcjUwW2ldLlR4VmdhVmFsdWUgIT0gMHhmZikKKwkJCQkJCQlpbmRleCA9IHBId0RhdGEtPlR4VmdhRm9yNTBbaV0uVHhWZ2FWYWx1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKK30KKwordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQoreworCXU4CWluZGV4ID0gMTAwOworCisJc3dpdGNoICggQ2hhbm5lbC5iYW5kICkKKwl7CisJCWNhc2UgQkFORF9UWVBFX0RTU1M6CisJCWNhc2UgQkFORF9UWVBFX09GRE1fMjQ6CisJCQl7CisJCQkJaWYgKHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXSAhPSAweGZmKQorCQkJCQlpbmRleCA9IHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEJBTkRfVFlQRV9PRkRNXzU6CisJCQlicmVhazsKKwl9CisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBpbmRleCApOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCAtLQorLy8KKy8vIERlc2NyaXB0aW9uOgorLy8gICBTd2l0aGNoIHRoZSBSRiBjaGFubmVsLgorLy8KKy8vIEFyZ3VtZW50czoKKy8vICAgcEh3RGF0YSAgICAtIEhhbmRsZSBvZiB0aGUgVVNCIERldmljZS4KKy8vICAgQ2hhbm5lbCAgICAtIFRoZSBjaGFubmVsIG5vLgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQKK1JGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdTMyCXBsdG1wWzE2XTsgLy8gVGhlIDE2IGlzIHRoZSBtYXhpbXVtIGNhcGFiaWxpdHkgb2YgaGFyZHdhcmUKKwl1MzIJY291bnQsIGx0bXA7CisJdTgJaSwgaiwgbnVtYmVyOworCXU4CUNobmxUbXA7CisKKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfTUFYSU1fMjgyNToKKwkJY2FzZSBSRl9NQVhJTV9WMTogLy8gMTFnIFdpbmJvbmQgMm5kIEJCKHdpdGggUGh5IGJvYXJkICh2MSkgKyBNYXhpbSAzMzEpCisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxMworCQkJeworCQkJCWZvciggaT0wOyBpPDM7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjVfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdW2ldLCAxOCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgMTAwICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjc6CisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxMworCQkJeworCQkJCWZvciggaT0wOyBpPDM7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjdfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdW2ldLCAxOCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCWVsc2UgaWYoIENoYW5uZWwuYmFuZCA9PSBCQU5EX1RZUEVfT0ZETV81ICkgLy8gY2hhbm5lbCAzNiB+IDY0CisJCQl7CisJCQkJQ2hubFRtcCA9IChDaGFubmVsLkNoYW5ObyAtIDM2KSAvIDQ7CisJCQkJZm9yKCBpPTA7IGk8MzsgaSsrICkKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyN19jaGFubmVsX2RhdGFfNTBbQ2hubFRtcF1baV0sIDE4KTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyODoKKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApIC8vIGNoYW5uZWwgMSB+IDEzCisJCQl7CisJCQkJZm9yKCBpPTA7IGk8MzsgaSsrICkKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0sIDE4KTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJZWxzZSBpZiggQ2hhbm5lbC5iYW5kID09IEJBTkRfVFlQRV9PRkRNXzUgKSAvLyBjaGFubmVsIDM2IH4gNjQKKwkJCXsKKwkJCQlDaG5sVG1wID0gKENoYW5uZWwuQ2hhbk5vIC0gMzYpIC8gNDsKKwkJCQlmb3IgKCBpID0gMDsgaSA8IDM7IGkrKykKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9jaGFubmVsX2RhdGFfNTBbQ2hubFRtcF1baV0sIDE4KTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyOToKKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCkKKwkJCXsKKwkJCQlmb3IoIGk9MDsgaTwzOyBpKysgKQorCQkJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI5X2NoYW5uZWxfZGF0YV8yNFtDaGFubmVsLkNoYW5Oby0xXVtpXSwgMTgpOworCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMywgTk9fSU5DUkVNRU5UICk7CisJCQl9CisJCQllbHNlIGlmKCBDaGFubmVsLmJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSApCisJCQl7CisJCQkJY291bnQgPSBzaXplb2YobWF4MjgyOV9jaGFubmVsX2RhdGFfNTApIC8gc2l6ZW9mKG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwWzBdKTsKKworCQkJCWZvciggaT0wOyBpPGNvdW50OyBpKysgKQorCQkJCXsKKwkJCQkJaWYoIG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwW2ldWzBdID09IENoYW5uZWwuQ2hhbk5vICkKKwkJCQkJeworCQkJCQkJZm9yKCBqPTA7IGo8MzsgaisrICkKKwkJCQkJCQlwbHRtcFtqXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI5X2NoYW5uZWxfZGF0YV81MFtpXVtqKzFdLCAxOCk7CisJCQkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCisJCQkJCQlpZiggKG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwW2ldWzNdICYgMHgzRkZGRikgPT0gMHgyQTk0NiApCisJCQkJCQl7CisJCQkJCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoNTw8MTgpfDB4MkE5MDYsIDE4KTsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgICAgLy8gMHgyQTlDNgorCQkJCQkJeworCQkJCQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggKDU8PDE4KXwweDJBOTg2LCAxOCk7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfbWF4MjgyOSggcEh3RGF0YSwgQ2hhbm5lbCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxNAorCQkJeworCQkJCWZvciggaT0wOyBpPDI7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMF9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0sIDIwKTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDIsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsMjIzMCggcEh3RGF0YSwgQ2hhbm5lbCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKworCQkJLy9TdGFydCB0byBmaWxsIFJGIHBhcmFtZXRlcnMsIFBMTF9PTiBzaG91bGQgYmUgcHVsbGVkIGxvdy4KKwkJCS8vV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7CisJCQkvL1dCREVCVUcoKCIqIFBMTF9PTiAgICBsb3dcbiIpKTsKKworCQkJLy9DaGFubmVsIGluZGVwZW5kZW50IHJlZ2lzdGVycworCQkJaWYoIENoYW5uZWwuYmFuZCAhPSBwSHdEYXRhLT5iYW5kKQorCQkJeworCQkJCWlmIChDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQpCisJCQkJeworCQkJCQkvL1VwZGF0ZSBCQiByZWdpc3RlcgorCQkJCQlCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMChwSHdEYXRhKTsKKworCQkJCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjQpL3NpemVvZihhbDcyMzBfcmZfZGF0YV8yNFswXSk7CisJCQkJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy9VcGRhdGUgQkIgcmVnaXN0ZXIKKwkJCQkJQkJQcm9jZXNzb3JfQUw3MjMwXzUwMDAocEh3RGF0YSk7CisKKwkJCQkJbnVtYmVyID0gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwKS9zaXplb2YoYWw3MjMwX3JmX2RhdGFfNTBbMF0pOworCQkJCQlTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAocEh3RGF0YSwgcGx0bXAsIG51bWJlcik7CisJCQkJfQorCisJCQkJLy8gV3JpdGUgdG8gcmVnaXN0ZXIuIG51bWJlciBtdXN0IGxlc3MgYW5kIGVxdWFsIHRoYW4gMTYKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIG51bWJlciwgTk9fSU5DUkVNRU5UICk7CisJCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQkJCVdCREVCVUcoKCJCYW5kIGNoYW5nZWRcbiIpKTsKKwkJCQkjZW5kaWYKKwkJCX0KKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApIC8vIGNoYW5uZWwgMSB+IDE0CisJCQl7CisJCQkJZm9yKCBpPTA7IGk8MjsgaSsrICkKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0mMHhmZmZmZmYpOworCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMiwgTk9fSU5DUkVNRU5UICk7CisJCQl9CisJCQllbHNlIGlmKCBDaGFubmVsLmJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSApCisJCQl7CisJCQkJLy9VcGRhdGUgUmVnMTIKKwkJCQlpZiAoKENoYW5uZWwuQ2hhbk5vID4gNjQpICYmIChDaGFubmVsLkNoYW5ObyA8PSAxNjUpKQorCQkJCXsKKwkJCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDAwMTQzYzsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkJfQorCQkJCWVsc2UJLy9yZWcxMiA9IDB4MDAxNDdjIGF0IENoYW5uZWwgNDkyMCB+IDUzMjAKKwkJCQl7CisJCQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgwMDE0N2M7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJCX0KKworCQkJCWNvdW50ID0gc2l6ZW9mKGFsNzIzMF9jaGFubmVsX2RhdGFfNSkgLyBzaXplb2YoYWw3MjMwX2NoYW5uZWxfZGF0YV81WzBdKTsKKworCQkJCWZvciAoaT0wOyBpPGNvdW50OyBpKyspCisJCQkJeworCQkJCQlpZiAoYWw3MjMwX2NoYW5uZWxfZGF0YV81W2ldWzBdID09IENoYW5uZWwuQ2hhbk5vKQorCQkJCQl7CisJCQkJCQlmb3IoIGo9MDsgajwzOyBqKysgKQorCQkJCQkJCXBsdG1wW2pdID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8ICggYWw3MjMwX2NoYW5uZWxfZGF0YV81W2ldW2orMV0mMHhmZmZmZmYpOworCQkJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAocEh3RGF0YSwgQ2hhbm5lbCk7CisJCQlicmVhazsKKworCQljYXNlIFJGX1dCXzI0MjoKKwkJY2FzZSBSRl9XQl8yNDJfMTogLy8gMjAwNjA2MTkuNSBBZGQKKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApIC8vIGNoYW5uZWwgMSB+IDE0CisJCQl7CisJCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB3ODlyZjI0Ml9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1bMF0sIDI0KTsKKwkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDg2NCwgbHRtcCApOworCQkJfQorCQkJc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX3diMjQyKHBId0RhdGEsIENoYW5uZWwpOworCQkJYnJlYWs7CisJfQorCisJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApCisJeworICAgICAgICAvLyBCQjogc2VsZWN0IDIuNCBHSHosIGJpdFsxMi0xMV09MDAKKwkJcFdiMzVSZWctPkJCNTAgJj0gfihCSVQoMTEpfEJJVCgxMikpOworCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNTAsIHBXYjM1UmVnLT5CQjUwICk7IC8vIE1PREVfQ3RybAorICAgICAgICAvLyBNQUM6IHNlbGVjdCAyLjQgR0h6LCBiaXRbNV09MAorCQlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uICY9IH5CSVQoNSk7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg3OCwgcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiApOworICAgICAgICAvLyBlbmFibGUgMTFiIEJhc2ViYW5kCisJCXBXYjM1UmVnLT5CQjMwICY9IH5CSVQoMzEpOworCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBXYjM1UmVnLT5CQjMwICk7CisJfQorCWVsc2UgaWYoIChDaGFubmVsLmJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSkgKQorCXsKKyAgICAgICAgLy8gQkI6IHNlbGVjdCA1IEdIegorCQlwV2IzNVJlZy0+QkI1MCAmPSB+KEJJVCgxMSl8QklUKDEyKSk7CisJCWlmIChDaGFubmVsLkNoYW5ObyA8PTY0ICkKKwkJCXBXYjM1UmVnLT5CQjUwIHw9IEJJVCgxMik7CQkJCS8vIDEwLTUuMjVHSHoKKwkJZWxzZSBpZiAoKENoYW5uZWwuQ2hhbk5vID49IDEwMCkgJiYgKENoYW5uZWwuQ2hhbk5vIDw9IDEyNCkpCisJCQlwV2IzNVJlZy0+QkI1MCB8PSBCSVQoMTEpOwkJCQkvLyAwMS01LjQ4R0h6CisJCWVsc2UgaWYgKChDaGFubmVsLkNoYW5ObyA+PTEyOCkgJiYgKENoYW5uZWwuQ2hhbk5vIDw9IDE2MSkpCisJCQlwV2IzNVJlZy0+QkI1MCB8PSAoQklUKDEyKXxCSVQoMTEpKTsJLy8gMTEtNS43NzVHSHoKKwkJZWxzZQkvL0NoYW4gMTg0IH4gMTk2IHdpbGwgdXNlIGJpdFsxMi0xMV0gPSAxMCBpbiB2ZXJzaW9uIHNoLXNyYy0xLjIuMjUKKwkJCXBXYjM1UmVnLT5CQjUwIHw9IEJJVCgxMik7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA1MCwgcFdiMzVSZWctPkJCNTAgKTsgLy8gTU9ERV9DdHJsCisKKwkJLy8oMSkgTTc4IHNob3VsZCBhbHdheSB1c2UgMi40RyBzZXR0aW5nIHdoZW4gdXNpbmcgUkZfQUlST0hBXzcyMzAKKwkJLy8oMikgQkIzMCBoYXMgYmVlbiB1cGRhdGVkIHByZXZpb3VzbHkuCisJCWlmIChwSHdEYXRhLT5waHlfdHlwZSAhPSBSRl9BSVJPSEFfNzIzMCkKKwkJeworICAgIAkgICAgLy8gTUFDOiBzZWxlY3QgNSBHSHosIGJpdFs1XT0xCisJCQlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uIHw9IEJJVCg1KTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg3OCwgcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiApOworCisgICAgCSAgICAvLyBkaXNhYmxlIDExYiBCYXNlYmFuZAorCQkJcFdiMzVSZWctPkJCMzAgfD0gQklUKDMxKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAzMCwgcFdiMzVSZWctPkJCMzAgKTsKKwkJfQorCX0KK30KKworLy9TZXQgdGhlIHR4IHBvd2VyIGRpcmVjdGx5IGZyb20gRFVUIEdVSSwgbm90IGZyb20gdGhlIEVFUFJPTS4gUmV0dXJuIHRoZSBjdXJyZW50IHNldHRpbmcKK3U4IFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKQoreworCXUzMglCYW5kID0gcEh3RGF0YS0+YmFuZDsKKwl1OAlpbmRleD0wOworCisJaWYoIHBId0RhdGEtPnBvd2VyX2luZGV4ID09IFBvd2VySW5kZXggKSAvLyAyMDA2MDYyMC4xIEFkZAorCQlyZXR1cm4gUG93ZXJJbmRleDsKKworCWlmIChSRl9NQVhJTV8yODI1ID09IHBId0RhdGEtPnBoeV90eXBlKQorCXsKKwkJLy8gQ2hhbm5lbCAxIC0gMTMKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyNVBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJfQorCWVsc2UgaWYgKFJGX01BWElNXzI4MjcgPT0gcEh3RGF0YS0+cGh5X3R5cGUpCisJeworCQlpZiggQmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApICAgIC8vIENoYW5uZWwgMSAtIDEzCisJCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwkJZWxzZS8vIGlmKCBCYW5kID09IEJBTkRfVFlQRV9PRkRNXzUgKSAgLy8gQ2hhbm5lbCAzNiAtIDY0CisJCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwl9CisJZWxzZSBpZiAoUkZfTUFYSU1fMjgyOCA9PSBwSHdEYXRhLT5waHlfdHlwZSkKKwl7CisJCWlmKCBCYW5kIDw9IEJBTkRfVFlQRV9PRkRNXzI0ICkgICAgLy8gQ2hhbm5lbCAxIC0gMTMKKwkJCWluZGV4ID0gUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfMjRQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQllbHNlLy8gaWYoIEJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSApICAvLyBDaGFubmVsIDM2IC0gNjQKKwkJCWluZGV4ID0gUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCX0KKwllbHNlIGlmKCBSRl9BSVJPSEFfMjIzMCA9PSBwSHdEYXRhLT5waHlfdHlwZSApCisJeworCQkvL1Bvd2VyIGluZGV4OiAwIH4gNjMgLy8gQ2hhbm5lbCAxIC0gMTQKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQlpbmRleCA9ICh1OClhbDIyMzBfdHh2Z2FfZGF0YVtpbmRleF1bMV07CisJfQorCWVsc2UgaWYoIFJGX0FJUk9IQV8yMjMwUyA9PSBwSHdEYXRhLT5waHlfdHlwZSApIC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJeworCQkvL1Bvd2VyIGluZGV4OiAwIH4gNjMgLy8gQ2hhbm5lbCAxIC0gMTQKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQlpbmRleCA9ICh1OClhbDIyMzBfdHh2Z2FfZGF0YVtpbmRleF1bMV07CisJfQorCWVsc2UgaWYoIFJGX0FJUk9IQV83MjMwID09IHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCS8vUG93ZXIgaW5kZXg6IDAgfiA2MworCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJCWluZGV4ID0gKHU4KWFsNzIzMF90eHZnYV9kYXRhW2luZGV4XVsxXTsKKwl9CisJZWxzZSBpZiggKFJGX1dCXzI0MiA9PSBwSHdEYXRhLT5waHlfdHlwZSkgfHwKKwkJIChSRl9XQl8yNDJfMSA9PSBwSHdEYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAorCXsKKwkJLy9Qb3dlciBpbmRleDogMCB+IDE5IGZvciBvcmlnaW5hbC4gTmV3IHJhbmdlIGlzIDAgfiAzMworCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJCWluZGV4ID0gKHU4KXc4OXJmMjQyX3R4dmdhX2RhdGFbaW5kZXhdWzFdOworCX0KKworCXBId0RhdGEtPnBvd2VyX2luZGV4ID0gaW5kZXg7ICAvLyBCYWNrdXAgY3VycmVudAorCXJldHVybiBpbmRleDsKK30KKworLy8tLSBTdWIgZnVuY3Rpb24KK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzI0UG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOworCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI4X3Bvd2VyX2RhdGFfMjRbaW5kZXhdLCAxOCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisvLy0tCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF81MFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9wb3dlcl9kYXRhXzUwW2luZGV4XSwgMTgpOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGluZGV4OworfQorLy8tLQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfMjRQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQoreworCXUzMgkJUG93ZXJEYXRhOworCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CisJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjdfcG93ZXJfZGF0YV8yNFtpbmRleF0sIDE4KTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIFBvd2VyRGF0YSApOworCXJldHVybiBpbmRleDsKK30KKy8vLS0KK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOworCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI3X3Bvd2VyX2RhdGFfNTBbaW5kZXhdLCAxOCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisvLy0tCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyNVBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyNV9wb3dlcl9kYXRhXzI0W2luZGV4XSwgMTgpOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGluZGV4OworfQorLy8tLQordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwl1OAkJaSxjb3VudDsKKworCWNvdW50ID0gc2l6ZW9mKGFsMjIzMF90eHZnYV9kYXRhKSAvIHNpemVvZihhbDIyMzBfdHh2Z2FfZGF0YVswXSk7CisJZm9yIChpPTA7IGk8Y291bnQ7IGkrKykKKwl7CisJCWlmIChhbDIyMzBfdHh2Z2FfZGF0YVtpXVsxXSA+PSBpbmRleCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBjb3VudCkKKwkJaS0tOworCisJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMF90eHZnYV9kYXRhW2ldWzBdLCAyMCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaTsKK30KKy8vLS0KK3U4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJdTgJCWksY291bnQ7CisKKwkvL1Bvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBhaXJvaGFfcG93ZXJfZGF0YV8yNFtpbmRleF0sIDIwKTsKKwljb3VudCA9IHNpemVvZihhbDcyMzBfdHh2Z2FfZGF0YSkgLyBzaXplb2YoYWw3MjMwX3R4dmdhX2RhdGFbMF0pOworCWZvciAoaT0wOyBpPGNvdW50OyBpKyspCisJeworCQlpZiAoYWw3MjMwX3R4dmdhX2RhdGFbaV1bMV0gPj0gaW5kZXgpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gY291bnQpCisJCWktLTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF90eHZnYV9kYXRhW2ldWzBdJjB4ZmZmZmZmKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIFBvd2VyRGF0YSApOworCXJldHVybiBpOworfQorCit1OCBSRlN5bnRoZXNpemVyX1NldFdpbmJvbmQyNDJQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQoreworCXUzMgkJUG93ZXJEYXRhOworCXU4CQlpLGNvdW50OworCisJY291bnQgPSBzaXplb2Yodzg5cmYyNDJfdHh2Z2FfZGF0YSkgLyBzaXplb2Yodzg5cmYyNDJfdHh2Z2FfZGF0YVswXSk7CisJZm9yIChpPTA7IGk8Y291bnQ7IGkrKykKKwl7CisJCWlmICh3ODlyZjI0Ml90eHZnYV9kYXRhW2ldWzFdID49IGluZGV4KQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IGNvdW50KQorCQlpLS07CisKKwkvLyBTZXQgVHhWZ2EgaW50byBSRgorCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB3ODlyZjI0Ml90eHZnYV9kYXRhW2ldWzBdLCAyNCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKworCS8vIFVwZGF0ZSBCQjQ4IEJCNEMgQkI1OCBmb3IgaGlnaCBwcmVjaXNpb24gdHh2Z2EKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNDgsIHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bMl0gKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNGMsIHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bM10gKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNTgsIHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bNF0gKTsKKworLy8gUmYgdmdhIDAgfiAzIGZvciB0ZW1wZXJhdHVyZSBjb21wZW5zYXRlLiBJdCB3aWxsIGFmZmVjdCB0aGUgc2NhbiBCc3MuCisvLyBUaGUgaSB2YWx1ZSBlcXVhbHMgdG8gOCBvciA3IHVzdWFsbHkuIFNvIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBzZXR1cCB0aGlzIFJGIHJlZ2lzdGVyLgorLy8JaWYoIGkgPD0gMyApCisvLwkJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoIDB4MDAwMDI0LCAyNCApOworLy8JZWxzZQorLy8JCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAweDAwMTgyNCwgMjQgKTsKKy8vCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIER4eF9pbml0aWFsIC0tCisvLyBNeHhfaW5pdGlhbCAtLQorCS8vCisvLyAgUm91dGluZSBEZXNjcmlwdGlvbjoKKy8vCQlJbml0aWFsIHRoZSBoYXJkd2FyZSBzZXR0aW5nIGFuZCBtb2R1bGUgdmFyaWFibGUKKwkvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBEeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCS8vIE9sZCBJQzpTaW5nbGUgbW9kZSBvbmx5LgorCS8vIE5ldyBJQzogb3BlcmF0aW9uIGRlY2lkZSBieSBTb2Z0d2FyZSBzZXQgYml0WzRdLiAxOm11bHRpcGxlIDA6IHNpbmdsZQorCXBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCA9IDB4YzAwMDAwMDQ7CS8vVHhvbiwgUnhvbiwgbXVsdGlwbGUgUnggZm9yIG5ldyA0ayBETUEKKwkJCQkJCQkJCQkJLy9UeG9uLCBSeG9uLCBzaW5nbGUgUnggZm9yIG9sZCA4ayBBU0lDCisJaWYoICFIQUxfVVNCX01PREVfQlVSU1QoIHBId0RhdGEgKSApCisJCXBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCA9IDB4YzAwMDAwMDA7Ly9UeG9uLCBSeG9uLCBzaW5nbGUgUnggZm9yIG5ldyA0ayBETUEKKworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA0MDAsIHBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCApOworfQorCit2b2lkIE14eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMgkJdG1wOworCXUzMgkJcGx0bXBbMTFdOworCXUxNglpOworCisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIEluaXRpYWwgTXh4IHJlZ2lzdGVyCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCS8vIE0wMCBiaXQgc2V0CisjaWZkZWYgX0lCU1NfQkVBQ09OX1NFUV9TVElDS18KKwlwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgPSAwOyAvLyBTb2x2ZSBiZWFjb24gc2VxdWVuY2UgbnVtYmVyIHN0b3AgYnkgc29mdHdhcmUKKyNlbHNlCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sID0gMHg4MDAwMDAwMDsgLy8gU29sdmUgYmVhY29uIHNlcXVlbmNlIG51bWJlciBzdG9wIGJ5IGhhcmR3YXJlCisjZW5kaWYKKworCS8vIE0yNCBkaXNhYmxlIGVudGVyIHBvd2VyIHNhdmUsIEJCIFJ4T24gYW5kIGVuYWJsZSBOQVYgYXR0YWNrCisJcFdiMzVSZWctPk0yNF9NYWNDb250cm9sID0gMHgwODA0MDA0MjsKKwlwbHRtcFswXSA9IHBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbDsKKworCXBsdG1wWzFdID0gMDsgLy8gU2tpcCBNMjgsIGJlY2F1c2Ugbm8gaW5pdGlhbGl6ZSB2YWx1ZSBpcyByZXF1aXJlZC4KKworCS8vIE0yQyBDV21pbiBhbmQgQ1dtYXggc2V0dGluZworCXBId0RhdGEtPmN3bWluID0gREVGQVVMVF9DV01JTjsKKwlwSHdEYXRhLT5jd21heCA9IERFRkFVTFRfQ1dNQVg7CisJcFdiMzVSZWctPk0yQ19NYWNDb250cm9sID0gREVGQVVMVF9DV01JTiA8PCAxMDsKKwlwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2wgfD0gREVGQVVMVF9DV01BWDsKKwlwbHRtcFsyXSA9IHBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbDsKKworCS8vIE0zMCBCU1NJRAorCXBsdG1wWzNdID0gKih1MzIgKilwSHdEYXRhLT5ic3NpZDsKKworCS8vIE0zNAorCXBId0RhdGEtPkFJRCA9IERFRkFVTFRfQUlEOworCXRtcCA9ICoodTE2ICopKHBId0RhdGEtPmJzc2lkKzQpOworCXRtcCB8PSBERUZBVUxUX0FJRCA8PCAxNjsKKwlwbHRtcFs0XSA9IHRtcDsKKworCS8vIE0zOAorCXBXYjM1UmVnLT5NMzhfTWFjQ29udHJvbCA9IChERUZBVUxUX1JBVEVfUkVUUllfTElNSVQ8PDgpIHwgKERFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCA8PCA0KSB8IERFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQ7CisJcGx0bXBbNV0gPSBwV2IzNVJlZy0+TTM4X01hY0NvbnRyb2w7CisKKwkvLyBNM0MKKwl0bXAgPSAoREVGQVVMVF9QSUZTVCA8PCAyNikgfCAoREVGQVVMVF9FSUZTVCA8PCAxNikgfCAoREVGQVVMVF9ESUZTVCA8PCA4KSB8IChERUZBVUxUX1NJRlNUIDw8IDQpIHwgREVGQVVMVF9PU0lGU1QgOworCXBXYjM1UmVnLT5NM0NfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs2XSA9IHRtcDsKKworCS8vIE00MAorCXBId0RhdGEtPnNsb3RfdGltZV9zZWxlY3QgPSBERUZBVUxUX1NMT1RfVElNRTsKKwl0bXAgPSAoREVGQVVMVF9BVElNV0QgPDwgMTYpIHwgREVGQVVMVF9TTE9UX1RJTUU7CisJcFdiMzVSZWctPk00MF9NYWNDb250cm9sID0gdG1wOworCXBsdG1wWzddID0gdG1wOworCisJLy8gTTQ0CisJdG1wID0gREVGQVVMVF9NQVhfVFhfTVNEVV9MSUZFX1RJTUUgPDwgMTA7IC8vICoxMDI0CisJcFdiMzVSZWctPk00NF9NYWNDb250cm9sID0gdG1wOworCXBsdG1wWzhdID0gdG1wOworCisJLy8gTTQ4CisJcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gREVGQVVMVF9CRUFDT05fSU5URVJWQUw7CisJcEh3RGF0YS0+UHJvYmVEZWxheSA9IERFRkFVTFRfUFJPQkVfREVMQVlfVElNRTsKKwl0bXAgPSAoREVGQVVMVF9CRUFDT05fSU5URVJWQUwgPDwgMTYpIHwgREVGQVVMVF9QUk9CRV9ERUxBWV9USU1FOworCXBXYjM1UmVnLT5NNDhfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs5XSA9IHRtcDsKKworCS8vTTRDCisJcFdiMzVSZWctPk00Q19NYWNTdGF0dXMgPSAoREVGQVVMVF9QUk9UT0NPTF9WRVJTSU9OIDw8IDMwKSB8IChERUZBVUxUX01BQ19QT1dFUl9TVEFURSA8PCAyOCkgfCAoREVGQVVMVF9EVElNX0FMRVJUX1RJTUUgPDwgMjQpOworCXBsdG1wWzEwXSA9IHBXYjM1UmVnLT5NNENfTWFjU3RhdHVzOworCisJLy8gQnVyc3Qgd3JpdGUKKwkvL1diMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODI0LCBwbHRtcCwgMTEsIEFVVE9fSU5DUkVNRU5UICk7CisJZm9yKCBpPTA7IGk8MTE7IGkrKyApCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4MjQgKyBpKjQsIHBsdG1wW2ldICk7CisKKwkvLyBNNjAKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODYwLCAweDEyNDgxMjQ4ICk7CisJcFdiMzVSZWctPk02MF9NYWNDb250cm9sID0gMHgxMjQ4MTI0ODsKKworCS8vIE02OAorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjgsIDB4MDAwNTA5MDAgKTsgLy8gMjAwNTEwMTggMHgwMDBGMEYwMCApOyAvLyA5NDA5MzAgMHgwMDEzMTMwMAorCXBXYjM1UmVnLT5NNjhfTWFjQ29udHJvbCA9IDB4MDAwNTA5MDA7CisKKwkvLyBNOTgKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODk4LCAweGZmZmY4ODg4ICk7CisJcFdiMzVSZWctPk05OF9NYWNDb250cm9sID0gMHhmZmZmODg4ODsKK30KKworCit2b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwkvLyBTVywgUE1VIHJlc2V0IGFuZCB0dXJuIG9mZiBjbG9jaworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjAsIDMgKTsKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2YwLCAweGY5ICk7Cit9CisKKy8vRGVjaWRlIHRoZSBUeFZnYSBvZiBldmVyeSBjaGFubmVsCit2b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyCQlpLCBqLCBsdG1wOworCXUxNgkJVmFsdWVbTUFYX1RYVkdBX0VFUFJPTV07CisJdTgJCSpwY3RtcDsKKwl1OAkJY3RtcD0wOworCisJLy8gR2V0IHRoZSBlbnRpcmUgVHhWZ2Egc2V0dGluZyBpbiBFRVBST00KKwlmb3IoIGk9MDsgaTxNQVhfVFhWR0FfRUVQUk9NOyBpKysgKQorCXsKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODEwMDAwMCArIDB4MDAwMTAwMDAqaSApOworCQlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZsdG1wICk7CisJCVZhbHVlW2ldID0gKHUxNikoIGx0bXAgJiAweGZmZmYgKTsgLy8gR2V0IDE2IGJpdCBhdmFpbGFibGUKKwkJVmFsdWVbaV0gPSBjcHVfdG9fbGUxNiggVmFsdWVbaV0gKTsgLy8gWzc6MF0yNDEyIFs3OjBdMjQxNyAuLi4uCisJfQorCisJLy8gQWRqdXN0IHRoZSBmaWxlZCB3aGljaCBmaWxscyB3aXRoIHJlc2VydmVkIHZhbHVlLgorCXBjdG1wID0gKHU4ICopVmFsdWU7CisJZm9yKCBpPTA7IGk8KE1BWF9UWFZHQV9FRVBST00qMik7IGkrKyApCisJeworCQlpZiggcGN0bXBbaV0gIT0gMHhmZiApCisJCQljdG1wID0gcGN0bXBbaV07CisJCWVsc2UKKwkJCXBjdG1wW2ldID0gY3RtcDsKKwl9CisKKwkvLyBBZGp1c3QgV0JfMjQyIHRvIFdCXzI0Ml8xIFR4VmdhIHNjYWxlCisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MiApCisJeworCQlmb3IoIGk9MDsgaTw0OyBpKysgKSAvLyBPbmx5IDI0MTIgMjQzNyAyNDYyIDI0ODQgY2FzZSBtdXN0IGJlIG1vZGlmaWVkCisJCXsKKwkJCWZvciggaj0wOyBqPChzaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmcpL3NpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1swXSkpOyBqKysgKQorCQkJeworCQkJCWlmKCBwY3RtcFtpXSA8ICh1OCl3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqXVsxXSApCisJCQkJeworCQkJCQlwY3RtcFtpXSA9ICh1OCl3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqXVswXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiggaiA9PSAoc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nKS9zaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbMF0pKSApCisJCQkJcGN0bXBbaV0gPSAodTgpdzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbai0xXVswXTsKKwkJfQorCX0KKworCS8vIDIwMDYwNjIxIEFkZAorCW1lbWNweSggcEh3RGF0YS0+VHhWZ2FTZXR0aW5nSW5FRVBST00sIHBjdG1wLCBNQVhfVFhWR0FfRUVQUk9NKjIgKTsgLy9NQVhfVFhWR0FfRUVQUk9NIGlzIHUxNiBjb3VudAorCUVFUFJPTVR4VmdhQWRqdXN0KCBwSHdEYXRhICk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBhZmZlY3QgdGhlIFR4VmdhIHBhcmFtZXRlciBpbiBIQUwuIElmIGhhbF9zZXRfY3VycmVudF9jaGFubmVsCisvLyBvciBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXggYmUgY2FsbGVkLCBuZXcgVHhWZ2Egd2lsbCB0YWtlIGVmZmVjdC4KKy8vIFR4VmdhU2V0dGluZ0luRUVQUk9NIG9mIHNId0RhdGEgaXMgYW4gdTggYXJyYXkgcG9pbnQgdG8gRUVQUk9NIGNvbnRhaW4gZm9yIElTODlDMzUKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgZGVmYXVsdCBUeFZnYVNldHRpbmdJbkVFUFJPTSBkYXRhIHRvIGNhbGN1bGF0ZSBuZXcgVHhWZ2EuCit2b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkgLy8gMjAwNjA2MTkuNSBBZGQKK3sKKwl1OAkqCXBUeFZnYSA9IHBId0RhdGEtPlR4VmdhU2V0dGluZ0luRUVQUk9NOworCXMxNgkJaSwgc3RtcDsKKworCS8vLS0gMi40RyAtLSAyMDA2MDcwNC4yIFJlcXVlc3QgZnJvbSBUaWdlcgorCS8vY2hhbm5lbCAxIH4gNQorCXN0bXAgPSBwVHhWZ2FbMV0gLSBwVHhWZ2FbMF07CisJZm9yKCBpPTA7IGk8NTsgaSsrICkKKwkJcEh3RGF0YS0+VHhWZ2FGb3IyNFtpXSA9IHBUeFZnYVswXSArIHN0bXAqaS80OworCS8vY2hhbm5lbCA2IH4gMTAKKwlzdG1wID0gcFR4VmdhWzJdIC0gcFR4VmdhWzFdOworCWZvciggaT01OyBpPDEwOyBpKysgKQorCQlwSHdEYXRhLT5UeFZnYUZvcjI0W2ldID0gcFR4VmdhWzFdICsgc3RtcCooaS01KS80OworCS8vY2hhbm5lbCAxMSB+IDEzCisJc3RtcCA9IHBUeFZnYVszXSAtIHBUeFZnYVsyXTsKKwlmb3IoIGk9MTA7IGk8MTM7IGkrKyApCisJCXBId0RhdGEtPlR4VmdhRm9yMjRbaV0gPSBwVHhWZ2FbMl0gKyBzdG1wKihpLTEwKS8yOworCS8vY2hhbm5lbCAxNAorCXBId0RhdGEtPlR4VmdhRm9yMjRbMTNdID0gcFR4VmdhWzNdOworCisJLy8tLSA1RyAtLQorCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9BSVJPSEFfNzIzMCApCisJeworCQkvL2NoYW5uZWwgMTg0CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMF0uQ2hhbk5vID0gMTg0OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzBdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbNF07CisJCS8vY2hhbm5lbCAxOTYKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszXS5DaGFuTm8gPSAxOTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbM10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs1XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzFdLkNoYW5ObyA9IDE4ODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyXS5DaGFuTm8gPSAxOTI7CisJCXN0bXAgPSBwVHhWZ2FbNV0gLSBwVHhWZ2FbNF07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs1XSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxXS5UeFZnYVZhbHVlID0gcFR4VmdhWzVdIC0gc3RtcCoyLzM7CisKKwkJLy9jaGFubmVsIDE2CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNl0uQ2hhbk5vID0gMTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs2XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs0XS5DaGFuTm8gPSA4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzRdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbNl07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNV0uQ2hhbk5vID0gMTI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs2XTsKKworCQkvL2NoYW5uZWwgMzYKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs4XS5DaGFuTm8gPSAzNjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs4XS5UeFZnYVZhbHVlID0gcFR4VmdhWzddOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzddLkNoYW5ObyA9IDM0OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzddLlR4VmdhVmFsdWUgPSBwVHhWZ2FbN107CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbOV0uQ2hhbk5vID0gMzg7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbOV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs3XTsKKworCQkvL2NoYW5uZWwgNDAKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMF0uQ2hhbk5vID0gNDA7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTBdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOF07CisJCS8vY2hhbm5lbCA0OAorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE0XS5DaGFuTm8gPSA0ODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs5XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzExXS5DaGFuTm8gPSA0MjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMl0uQ2hhbk5vID0gNDQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTNdLkNoYW5ObyA9IDQ2OworCQlzdG1wID0gcFR4VmdhWzldIC0gcFR4VmdhWzhdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEzXS5UeFZnYVZhbHVlID0gcFR4VmdhWzldIC0gc3RtcC80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzldIC0gc3RtcCoyLzQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTFdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOV0gLSBzdG1wKjMvNDsKKworCQkvL2NoYW5uZWwgNTIKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNV0uQ2hhbk5vID0gNTI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTVdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTBdOworCQkvL2NoYW5uZWwgNjQKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOF0uQ2hhbk5vID0gNjQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMThdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTFdOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTZdLkNoYW5ObyA9IDU2OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE3XS5DaGFuTm8gPSA2MDsKKwkJc3RtcCA9IHBUeFZnYVsxMV0gLSBwVHhWZ2FbMTBdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE3XS5UeFZnYVZhbHVlID0gcFR4VmdhWzExXSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMV0gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTAwCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTldLkNoYW5ObyA9IDEwMDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMl07CisJCS8vY2hhbm5lbCAxMTIKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyMl0uQ2hhbk5vID0gMTEyOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzEzXTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIwXS5DaGFuTm8gPSAxMDQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjFdLkNoYW5ObyA9IDEwODsKKwkJc3RtcCA9IHBUeFZnYVsxM10gLSBwVHhWZ2FbMTJdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIxXS5UeFZnYVZhbHVlID0gcFR4VmdhWzEzXSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxM10gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTI4CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjZdLkNoYW5ObyA9IDEyODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNF07CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyM10uQ2hhbk5vID0gMTE2OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI0XS5DaGFuTm8gPSAxMjA7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjVdLkNoYW5ObyA9IDEyNDsKKwkJc3RtcCA9IHBUeFZnYVsxNF0gLSBwVHhWZ2FbMTNdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI1XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XSAtIHN0bXAvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNF0gLSBzdG1wKjIvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyM10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNF0gLSBzdG1wKjMvNDsKKworCQkvL2NoYW5uZWwgMTQwCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjldLkNoYW5ObyA9IDE0MDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyOV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNV07CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyN10uQ2hhbk5vID0gMTMyOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI4XS5DaGFuTm8gPSAxMzY7CisJCXN0bXAgPSBwVHhWZ2FbMTVdIC0gcFR4VmdhWzE0XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyOF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNV0gLSBzdG1wLzM7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjddLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTVdIC0gc3RtcCoyLzM7CisKKwkJLy9jaGFubmVsIDE0OQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMwXS5DaGFuTm8gPSAxNDk7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzBdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTZdOworCQkvL2NoYW5uZWwgMTY1CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzRdLkNoYW5ObyA9IDE2NTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxN107CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMV0uQ2hhbk5vID0gMTUzOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMyXS5DaGFuTm8gPSAxNTc7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzNdLkNoYW5ObyA9IDE2MTsKKwkJc3RtcCA9IHBUeFZnYVsxN10gLSBwVHhWZ2FbMTZdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMzXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XSAtIHN0bXAvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxN10gLSBzdG1wKjIvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxN10gLSBzdG1wKjMvNDsKKwl9CisKKwkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJV0JERUJVRygoIiBUeFZnYUZvcjI0IDogXG4iKSk7CisJRGF0YURtcCgodTggKilwSHdEYXRhLT5UeFZnYUZvcjI0LCAxNCAsMCk7CisJV0JERUJVRygoIiBUeFZnYUZvcjUwIDogXG4iKSk7CisJRGF0YURtcCgodTggKilwSHdEYXRhLT5UeFZnYUZvcjUwLCA3MCAsMCk7CisJI2VuZGlmCit9CisKK3ZvaWQgQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggcmF0ZSApIC8vIDIwMDYwNjEzLjEKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXVuc2lnbmVkIGNoYXIJCUlzMTFiUmF0ZTsKKworCUlzMTFiUmF0ZSA9IChyYXRlICUgNikgPyAxIDogMDsKKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisJCWNhc2UgUkZfQUlST0hBXzIyMzBTOiAvLyAyMDA2MDQyMCBBZGQgdGhpcworCQkJaWYoIElzMTFiUmF0ZSApCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExQikgJiYKKwkJCQkJKHBXYjM1UmVnLT5CQjRDICE9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFCKSApCisJCQkJeworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNDgsIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFCICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUIgKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRykgJiYKKwkJCQkJKHBXYjM1UmVnLT5CQjRDICE9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHKSApCisJCQkJeworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNDgsIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUcgKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJGX1dCXzI0MjogLy8gMjAwNjA2MjMgVGhlIGZpeCBvbmx5IGZvciBvbGQgVHhWR0Egc2V0dGluZworCQkJaWYoIElzMTFiUmF0ZSApCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX1dCMjQyXzExQikgKQorCQkJCXsKKwkJCQkJcFdiMzVSZWctPkJCNDggPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCOworCQkJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9XQjI0Ml8xMUI7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX1dCMjQyXzExQiApOworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNGMsIEJCNENfREVGQVVMVF9XQjI0Ml8xMUIgKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX1dCMjQyXzExRykgKQorCQkJCXsKKwkJCQkJcFdiMzVSZWctPkJCNDggPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHOworCQkJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9XQjI0Ml8xMUc7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX1dCMjQyXzExRyApOworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNGMsIEJCNENfREVGQVVMVF9XQjI0Ml8xMUcgKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwl9Cit9CisKKworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3J4aXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yeGlzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTk0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yeGlzci5jCkBAIC0wLDAgKzEsMzAgQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordm9pZCB2UnhUaW1lckluaXQoUFdCMzJfQURBUFRFUiBBZGFwdGVyKQoreworCU9TX1RJTUVSX0lOSVRJQUwoJihBZGFwdGVyLT5NZHMublRpbWVyKSwgKHZvaWQqKSBSeFRpbWVySGFuZGxlciwgKHZvaWQqKSBBZGFwdGVyKTsKK30KKwordm9pZCB2UnhUaW1lclN0YXJ0KFBXQjMyX0FEQVBURVIgQWRhcHRlciwgaW50IHRpbWVvdXRfdmFsdWUpCit7CisJaWYgKHRpbWVvdXRfdmFsdWU8TUlOX1RJTUVPVVRfVkFMKQorCQl0aW1lb3V0X3ZhbHVlPU1JTl9USU1FT1VUX1ZBTDsKKworCU9TX1RJTUVSX1NFVCggJihBZGFwdGVyLT5NZHMublRpbWVyKSwgdGltZW91dF92YWx1ZSApOworfQorCit2b2lkIHZSeFRpbWVyU3RvcChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJT1NfVElNRVJfQ0FOQ0VMKCAmKEFkYXB0ZXItPk1kcy5uVGltZXIpLCAwICk7Cit9CisKK3ZvaWQgUnhUaW1lckhhbmRsZXJfMWEoIFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUnhUaW1lckhhbmRsZXIoTlVMTCwgQWRhcHRlciwgTlVMTCwgTlVMTCk7Cit9CisKK3ZvaWQgUnhUaW1lckhhbmRsZXIodm9pZCogU3lzdGVtU3BlY2lmaWMxLCBQV0IzMl9BREFQVEVSIEFkYXB0ZXIsCisJCSAgICB2b2lkKiBTeXN0ZW1TcGVjaWZpYzIsIHZvaWQqIFN5c3RlbVNwZWNpZmljMykKK3sKKwlXQVJOX09OKDEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc2Nhbl9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDFiMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc2Nhbl9zLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8vCisvLyBTQ0FOIHRhc2sgZ2xvYmFsIENPTlNUQU5UUywgU1RSVUNUVVJFUywgdmFyaWFibGVzCisvLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9kZWZpbmUgdGhlIG1zZyB0eXBlIG9mIFNDQU4gbW9kdWxlCisjZGVmaW5lIFNDQU5NU0dfU0NBTl9SRVEJCQkweDAxCisjZGVmaW5lIFNDQU5NU0dfQkVBQ09OCQkJCTB4MDIKKyNkZWZpbmUgU0NBTk1TR19QUk9CRV9SRVNQT05TRQkJMHgwMworI2RlZmluZSBTQ0FOTVNHX1RJTUVPVVQJCQkJMHgwNAorI2RlZmluZSBTQ0FOTVNHX1RYUFJPQkVfRkFJTAkJMHgwNQorI2RlZmluZSBTQ0FOTVNHX0VOQUJMRV9CR1NDQU4JCTB4MDYKKyNkZWZpbmUgU0NBTk1TR19TVE9QX1NDQU4JCQkweDA3CisKKy8vIEJTUyBUeXBlID0+Y29uZm9ybSB0bworLy8gSUJTUyAgICAgICAgICAgICA6IFRvRFMvRnJvbURTID0gMDAKKy8vIEluZnJhc3RydWN0dXJlICAgOiBUb0RTL0Zyb21EUyA9IDAxCisjZGVmaW5lIElCU1NfTkVUCQkJMAorI2RlZmluZSBFU1NfTkVUCQkJCTEKKyNkZWZpbmUgQU5ZQlNTX05FVAkJCTIKKworLy8gU2NhbiBUeXBlCisjZGVmaW5lIEFDVElWRV9TQ0FOCQkJMAorI2RlZmluZSBQQVNTSVZFX1NDQU4JCTEKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL0dsb2JhbCBkYXRhIHN0cnVjdHVyZXMsIEluaXRpYWwgU2NhbiAmIEJhY2tncm91bmQgU2NhbgordHlwZWRlZiBzdHJ1Y3QgX1NDQU5fUkVRX1BBUkEJLy9tYW5kYXRvcnkgcGFyYW1ldGVycyBmb3IgU0NBTiByZXF1ZXN0Cit7CisJdTMyCQkJCVNjYW5UeXBlOwkJCS8vcGFzc2l2ZS9hY3RpdmUgc2NhbgorCisJQ0hBTl9MSVNUCQlzQ2hhbm5lbExpc3Q7CS8vIDg2QgorCXU4CQkJcmVzZXJ2ZWRfMVsyXTsKKworCXN0cnVjdCBTU0lEX0VsZW1lbnQJc1NTSUQ7IC8vIDM0Qi4gc2NhbiBvbmx5IGZvciB0aGlzIFNTSUQKKwl1OAkJCXJlc2VydmVkXzJbMl07CisKK30gU0NBTl9SRVFfUEFSQSwgKnBzU0NBTl9SRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX1NDQU5fUEFSQU1FVEVSUworeworCXUxNgkJCQl3U3RhdGU7CisJdTE2CQkJCWlDdXJyZW50Q2hhbm5lbEluZGV4OworCisJU0NBTl9SRVFfUEFSQQlzU2NhblJlcTsKKworCXU4CQkJCUJTU0lEW01BQ19BRERSX0xFTkdUSCArIDJdOwkJLy9zY2FuIG9ubHkgZm9yIHRoaXMgQlNTSUQKKworCXUzMgkJCQlCc3NUeXBlOwkJCQkJCS8vc2NhbiBvbmx5IGZvciB0aGlzIEJTUyB0eXBlCisKKwkvL3N0cnVjdCBTU0lEX0VsZW1lbnQJc1NTSUQ7CQkJCQkJLy9zY2FuIG9ubHkgZm9yIHRoaXMgU1NJRAorCXUxNgkJCQlQcm9iZURlbGF5OworCXUxNgkJCQlNaW5DaGFubmVsVGltZTsKKworCXUxNgkJCQlNYXhDaGFubmVsVGltZTsKKwl1MTYJCQkJcmVzZXJ2ZWRfMTsKKworICAgIHMzMgkJCQlpQmdTY2FuUGVyaW9kOwkJCQkvLyBYUDogNSBzZWMKKworICAgIHU4CQkJCWJvQmdTY2FuOwkJCQkJLy8gV2I6IGVuYWJsZSBCRyBzY2FuLCBGb3IgWFAsIHRoaXMgdmFsdWUgbXVzdCBiZSBGQUxTRQorICAgIHU4CQkJCWJvRmFzdFNjYW47CQkJCQkvLyBXYjogcmVzZXJ2ZWQKKwl1OAkJCQlib0NDQWJ1c3k7CQkJCQkvLyBXYjogSFdNQUMgQ0NBIGJ1c3kgc3RhdHVzCisJdTgJCQkJcmVzZXJ2ZWRfMjsKKworCS8vTkRJU19NSU5JUE9SVF9USU1FUgluVGltZXI7CisJT1NfVElNRVIJCQluVGltZXI7CisKKwl1MzIJCQkJU2NhblRpbWVTdGFtcDsJCQkvL0luY3JlYXNlIDEgcGVyIGJhY2tncm91bmQgc2NhbigxIG1pbnV0ZSkKKwl1MzIJCQkJQnNzVGltZVN0YW1wOwkJCS8vSW5jcmVhc2UgMSBwZXIgY29ubmVjdCBzdGF0dXMgY2hlY2sKKwl1MzIJCQkJUnhOdW1QZXJBbnRlbm5hWzJdOwkJLy8KKworCXU4CQkJCUFudGVubmFUb2dnbGU7CQkJLy8KKwl1OAkJCQlib0luVGltZXJIYW5kbGVyOworCXU4IAkJCQlib1RpbWVyQWN0aXZlOwkJCQkvLyBXYjogcmVzZXJ2ZWQKKwl1OAkJCQlib1NhdmU7CisKKwl1MzIJCQkJQlNjYW5FbmFibGU7IC8vIEJhY2tncm91bmQgc2NhbiBlbmFibGUuIERlZmF1bHQgaXMgT24KKworfSBTQ0FOX1BBUkFNRVRFUlMsICpwc1NDQU5fUEFSQU1FVEVSUzsKKworLy8gRW5jYXBzdWxhdGUgJ0FkYXB0ZXInIGRhdGEgc3RydWN0dXJlCisjZGVmaW5lIHBzU0NBTgkJCSgmKEFkYXB0ZXItPnNTY2FuUGFyYSkpCisjZGVmaW5lIHBzU0NBTlJFUQkJCSgmKEFkYXB0ZXItPnNTY2FuUGFyYS5zU2NhblJlcSkpCisKKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKy8vCXNjYW4uaAorLy8JCURlZmluZSB0aGUgcmVsYXRlZCBkZWZpbml0aW9ucyBvZiBzY2FuIG1vZHVsZQorLy8JaGlzdG9yeSAtLSAwMS8xNC8wMycgY3JlYXRlZAorLy8KKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLy9EZWZpbmUgdGhlIHN0YXRlIG9mIHNjYW4gbW9kdWxlCisjZGVmaW5lIFNDQU5fSU5BQ1RJVkUJCQkJCQkwCisjZGVmaW5lIFdBSVRfUFJPQkVfREVMQVkJCQkJCTEKKyNkZWZpbmUgV0FJVF9SRVNQT05TRV9NSU4JCQkJCTIKKyNkZWZpbmUgV0FJVF9SRVNQT05TRV9NQVhfQUNUSVZFCQkJMworI2RlZmluZSBXQUlUX0JFQUNPTl9NQVhfUEFTU0lWRQkJCQk0CisjZGVmaW5lIFNDQU5fQ09NUExFVEUJCQkJCQk1CisjZGVmaW5lIEJHX1NDQU4JCQkJCQkJCTYKKyNkZWZpbmUgQkdfU0NBTk5JTkcJCQkJCQkJNworCisKKy8vIFRoZSB2YWx1ZSB3aWxsIGxvYWQgZnJvbSBFRVBST00KKy8vIElmIDB4ZmYgaXMgc2V0IGluIEVFUE9NLCB0aGUgZHJpdmVyIHdpbGwgdXNlIFNDQU5fTUFYX0NITkxfVElNRSBpbnN0ZWFkLgorLy8gVGhlIGRlZmluaXRpb24gaXMgaW4gV2JIYWwuaAorLy8JI2RlZmluZSBTQ0FOX01BWF9DSE5MX1RJTUUJCQkJKDUwKQorCisKKworLy8gc3RhdGljIGZ1bmN0aW9ucworCisvL3N0YXRpYyB2b2lkIFNjYW5UaW1lckhhbmRsZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKKy8vc3RhdGljIHZvaWQgdlNjYW5UaW1lclN0YXJ0KFBXQjMyX0FEQVBURVIJQWRhcHRlciwgaW50IHRpbWVvdXRfdmFsdWUpOworLy9zdGF0aWMgdm9pZCB2U2NhblRpbWVyU3RvcChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjOTY3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuYwpAQCAtMCwwICsxLDE0IEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gc21lX2FwaS5jCisvLworLy8gQ29weXJpZ2h0KEMpIDIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgorLy8KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCitzOCBzbWVfZ2V0X3Jzc2kodm9pZCAqcGNvcmVfZGF0YSwgczMyICpwcnNzaSkKK3sKKyAgICAgICBCVUcoKTsKKyAgICAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDVlYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogc21lX2FwaS5oCisgKgorICogQ29weXJpZ2h0KEMpIDIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgorICoKKyAqIG1vZGlmaWNhdGlvbiBoaXN0b3J5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDEuMDAuMDAxLCAyMDAzLTA0LTIxLCBLZXZpbiAgICAgICBjcmVhdGVkCisgKiAxLjAwLjAwMiwgMjAwMy0wNS0xNCwgUEQ0MyAmIFBFMjAgbW9kaWZpZWQKKyAqCisgKi8KKworI2lmbmRlZiBfX1NNRV9BUElfSF9fCisjZGVmaW5lIF9fU01FX0FQSV9IX18KKworLyoqKioqKioqKioqKioqKioqKiBJTkNMVURFIEZJTEVTIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyNpbmNsdWRlICJHTFxnbF9jb3JlLmgiCisKKy8qKioqKioqKioqKioqKioqKiogQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBfSU5MSU5FICAgICAgX19pbmxpbmUKKworI2RlZmluZSBNRURJQV9TVEFURV9ESVNDT05ORUNURUQgICAgMAorI2RlZmluZSBNRURJQV9TVEFURV9DT05ORUNURUQgICAgICAgMQorCisvL0FSUkFZIENIRUNLCisjZGVmaW5lIE1BWF9QT1dFUl9UT19EQiAzMgorCisvKioqKioqKioqKioqKioqKioqIFRZUEUgREVGSU5JVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKiBFWFBPUlRFRCBGVU5DVElPTiBERUNMQVJBVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKiovCisKKy8vIE9JRF84MDJfMTFfQlNTSUQKK3M4IHNtZV9nZXRfYnNzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NpZCk7CitzOCBzbWVfZ2V0X2Rlc2lyZWRfYnNzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NpZCk7Ly9Ob3QgdXNlCitzOCBzbWVfc2V0X2Rlc2lyZWRfYnNzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NpZCk7CisKKy8vIE9JRF84MDJfMTFfU1NJRAorczggc21lX2dldF9zc2lkKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3NpZCwgdTggKnBzc2lkX2xlbik7CitzOCBzbWVfZ2V0X2Rlc2lyZWRfc3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHNzaWQsIHU4ICpwc3NpZF9sZW4pOy8vIE5vdCB1c2UKK3M4IHNtZV9zZXRfZGVzaXJlZF9zc2lkKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3NpZCwgdTggc3NpZF9sZW4pOworCisvLyBPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUKK3M4IHNtZV9nZXRfYnNzX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NfdHlwZSk7CitzOCBzbWVfZ2V0X2Rlc2lyZWRfYnNzX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NfdHlwZSk7Ly9Ob3QgdXNlCitzOCBzbWVfc2V0X2Rlc2lyZWRfYnNzX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggYnNzX3R5cGUpOworCisvLyBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xECitzOCBzbWVfZ2V0X2ZyYWdtZW50X3RocmVzaG9sZCh2b2lkICpwY29yZV9kYXRhLCB1MzIgKnB0aHJlc2hvbGQpOworczggc21lX3NldF9mcmFnbWVudF90aHJlc2hvbGQodm9pZCAqcGNvcmVfZGF0YSwgdTMyIHRocmVzaG9sZCk7CisKKy8vIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAorczggc21lX2dldF9ydHNfdGhyZXNob2xkKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiAqcHRocmVzaG9sZCk7CitzOCBzbWVfc2V0X3J0c190aHJlc2hvbGQodm9pZCAqcGNvcmVfZGF0YSwgdTMyIHRocmVzaG9sZCk7CisKKy8vIE9JRF84MDJfMTFfUlNTSQorczggc21lX2dldF9yc3NpKHZvaWQgKnBjb3JlX2RhdGEsIHMzMiAqcHJzc2kpOworCisvLyBPSURfODAyXzExX0NPTkZJR1VSQVRJT04KK3M4IHNtZV9nZXRfYmVhY29uX3BlcmlvZCh2b2lkICpwY29yZV9kYXRhLCB1MTYgKnBiZWFjb25fcGVyaW9kKTsKK3M4IHNtZV9zZXRfYmVhY29uX3BlcmlvZCh2b2lkICpwY29yZV9kYXRhLCB1MTYgYmVhY29uX3BlcmlvZCk7CisKK3M4IHNtZV9nZXRfYXRpbV93aW5kb3codm9pZCAqcGNvcmVfZGF0YSwgdTE2ICpwYXRpbV93aW5kb3cpOworczggc21lX3NldF9hdGltX3dpbmRvdyh2b2lkICpwY29yZV9kYXRhLCB1MTYgYXRpbV93aW5kb3cpOworCitzOCBzbWVfZ2V0X2N1cnJlbnRfY2hhbm5lbCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGN1cnJlbnRfY2hhbm5lbCk7CitzOCBzbWVfZ2V0X2N1cnJlbnRfYmFuZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGN1cnJlbnRfYmFuZCk7CitzOCBzbWVfc2V0X2N1cnJlbnRfY2hhbm5lbCh2b2lkICpwY29yZV9kYXRhLCB1OCBjdXJyZW50X2NoYW5uZWwpOworCisvLyBPSURfODAyXzExX0JTU0lEX0xJU1QKK3M4IHNtZV9nZXRfc2Nhbl9ic3NfY291bnQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBjb3VudCk7CitzOCBzbWVfZ2V0X3NjYW5fYnNzKHZvaWQgKnBjb3JlX2RhdGEsIHU4IGluZGV4LCB2b2lkICoqcHBic3MpOworCitzOCBzbWVfZ2V0X2Nvbm5lY3RlZF9ic3Modm9pZCAqcGNvcmVfZGF0YSwgdm9pZCAqKnBwYnNzX25vdyk7CisKKy8vIE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQorczggc21lX2dldF9hdXRoX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBhdXRoX21vZGUpOworczggc21lX3NldF9hdXRoX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggYXV0aF9tb2RlKTsKKworLy8gT0lEXzgwMl8xMV9XRVBfU1RBVFVTIC8gT0lEXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUworczggc21lX2dldF93ZXBfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHdlcF9tb2RlKTsKK3M4IHNtZV9zZXRfd2VwX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggd2VwX21vZGUpOworLy9zOCBzbWVfZ2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3RhdHVzKTsKKy8vczggc21lX3NldF9lbmNyeXB0aW9uX3N0YXR1cyh2b2lkICpwY29yZV9kYXRhLCB1OCBzdGF0dXMpOworCisvLyA/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKworLy8gT0lEX0dFTl9WRU5ET1JfSUQKKy8vIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUworczggc21lX2dldF9wZXJtYW5lbnRfbWFjX2FkZHIodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBtYWNfYWRkcik7CisKKy8vIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MKK3M4IHNtZV9nZXRfY3VycmVudF9tYWNfYWRkcih2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1hY19hZGRyKTsKKworLy8gT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCitzOCBzbWVfZ2V0X25ldHdvcmtfdHlwZV9pbl91c2Uodm9pZCAqcGNvcmVfZGF0YSwgdTggKnB0eXBlKTsKK3M4IHNtZV9zZXRfbmV0d29ya190eXBlX2luX3VzZSh2b2lkICpwY29yZV9kYXRhLCB1OCB0eXBlKTsKKworLy8gT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMKK3M4IHNtZV9nZXRfc3VwcG9ydGVkX3JhdGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnByYXRlcyk7CisKKy8vIE9JRF84MDJfMTFfQUREX1dFUAorLy8xMi8yOS8wMycgd2tjaGVuCitzOCBzbWVfc2V0X2FkZF93ZXAodm9pZCAqcGNvcmVfZGF0YSwgdTMyIGtleV9pbmRleCwgdTMyIGtleV9sZW4sCisJCQkJCSB1OCAqQWRkcmVzcywgdTggKmtleSk7CisKKy8vIE9JRF84MDJfMTFfUkVNT1ZFX1dFUAorczggc21lX3NldF9yZW1vdmVfd2VwKHZvaWQgKnBjcmVfZGF0YSwgdTMyIGtleV9pbmRleCk7CisKKy8vIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFCitzOCBzbWVfc2V0X2Rpc2Fzc29jaWF0ZSh2b2lkICpwY29yZV9kYXRhKTsKKworLy8gT0lEXzgwMl8xMV9QT1dFUl9NT0RFCitzOCBzbWVfZ2V0X3Bvd2VyX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBtb2RlKTsKK3M4IHNtZV9zZXRfcG93ZXJfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBtb2RlKTsKKworLy8gT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4KK3M4IHNtZV9zZXRfYnNzaWRfbGlzdF9zY2FuKHZvaWQgKnBjb3JlX2RhdGEsIHZvaWQgKnBzY2FuX3BhcmEpOworCisvLyBPSURfODAyXzExX1JFTE9BRF9ERUZBVUxUUworczggc21lX3NldF9yZWxvYWRfZGVmYXVsdHModm9pZCAqcGNvcmVfZGF0YSwgdTggcmVsb2FkX3R5cGUpOworCisKKy8vIFRoZSBmb2xsb3dpbmcgU01FIEFQSSBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIFdQQQorLy8KKy8vIE1hbmRhdG9yeSBPSURzIGZvciBXUEEKKy8vCisKKy8vIE9JRF84MDJfMTFfQUREX0tFWQorLy9zOCBzbWVfc2V0X2FkZF9rZXkodm9pZCAqcGNvcmVfZGF0YSwgTkRJU184MDJfMTFfS0VZICpwa2V5KTsKKworLy8gT0lEXzgwMl8xMV9SRU1PVkVfS0VZCisvL3M4IHNtZV9zZXRfcmVtb3ZlX2tleSh2b2lkICpwY29yZV9kYXRhLCBORElTXzgwMl8xMV9SRU1PVkVfS0VZICpwa2V5KTsKKworLy8gT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgorLy9zOCBzbWVfc2V0X2Fzc29jaWF0aW9uX2luZm9ybWF0aW9uKHZvaWQgKnBjb3JlX2RhdGEsCisvLyAgICAgICAgICAgICAgICAgICAgTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04gKnBpbmZvKTsKKworLy8gT0lEXzgwMl8xMV9URVNUCisvL3M4IHNtZV9zZXRfdGVzdCh2b2lkICpwY29yZV9kYXRhLCBORElTXzgwMl8xMV9URVNUICpwdGVzdF9kYXRhKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCisvKgorLy8gVGhlIGxlZnQgT0lEcworCisvLyBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVECisvLyBPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCisvLyBPSURfODAyXzExX1JTU0lfVFJJR0dFUgorLy8gT0lEXzgwMl8xMV9OVU1CRVJfT0ZfQU5URU5OQVMKKy8vIE9JRF84MDJfMTFfUlhfQU5URU5OQV9TRUxFQ1RFRAorLy8gT0lEXzgwMl8xMV9UWF9BTlRFTk5BX1NFTEVDVEVECisvLyBPSURfODAyXzExX1NUQVRJU1RJQ1MKKy8vIE9JRF84MDJfMTFfREVTSVJFRF9SQVRFUworLy8gT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgorCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm9uZS1zdGFuZGFyZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3M4IHNtZV9nZXRfY29ubmVjdF9zdGF0dXModm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzdGF0dXMpOworCisvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8vczggc21lX2dldF9zY2FuX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzY2FuX3R5cGUpOworLy9zOCBzbWVfc2V0X3NjYW5fdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCBzY2FuX3R5cGUpOworCisvL3M4IHNtZV9nZXRfc2Nhbl9jaGFubmVsX2xpc3Qodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzY2FuX3R5cGUpOworLy9zOCBzbWVfc2V0X3NjYW5fY2hhbm5lbF9saXN0KHZvaWQgKnBjb3JlX2RhdGEsIHU4IHNjYW5fdHlwZSk7CisKKwordm9pZCBzbWVfZ2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpFbmNyeXB0U3RhdHVzKTsKK3ZvaWQgc21lX3NldF9lbmNyeXB0aW9uX3N0YXR1cyh2b2lkICpwY29yZV9kYXRhLCB1OCBFbmNyeXB0U3RhdHVzKTsKK3M4IHNtZV9hZGRfa2V5KHZvaWQJCSpwY29yZV9kYXRhLAorCQkJCQl1MzIJCWtleV9pbmRleCwKKwkJCQkJdTgJCWtleV9sZW4sCisJCQkJCXU4CQlrZXlfdHlwZSwKKwkJCQkJdTgJCSprZXlfYnNzaWQsCisJCQkJCS8vdTgJCSprZXlfcnNjLAorCQkJCQl1OAkJKnB0eF90c2MsCisJCQkJCXU4CQkqcHJ4X3RzYywKKwkJCQkJdTgJCSprZXlfbWF0ZXJpYWwpOwordm9pZCBzbWVfcmVtb3ZlX2RlZmF1bHRfa2V5KHZvaWQgKnBjb3JlX2RhdGEsIGludCBpbmRleCk7Cit2b2lkIHNtZV9yZW1vdmVfbWFwcGluZ19rZXkodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBtYWNfYWRkcik7Cit2b2lkIHNtZV9jbGVhcl9hbGxfbWFwcGluZ19rZXkodm9pZCAqcGNvcmVfZGF0YSk7Cit2b2lkIHNtZV9jbGVhcl9hbGxfZGVmYXVsdF9rZXkodm9pZCAqcGNvcmVfZGF0YSk7CisKKworCitzOCBzbWVfc2V0X3ByZWFtYmxlX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggbW9kZSk7CitzOCBzbWVfZ2V0X3ByZWFtYmxlX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKm1vZGUpOworczggc21lX2dldF9wcmVhbWJsZV90eXBlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICp0eXBlKTsKK3M4IHNtZV9zZXRfc2xvdHRpbWVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBtb2RlKTsKK3M4IHNtZV9nZXRfc2xvdHRpbWVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqbW9kZSk7CitzOCBzbWVfZ2V0X3Nsb3R0aW1lX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnR5cGUpOworczggc21lX3NldF90eHJhdGVfcG9saWN5KHZvaWQgKnBjb3JlX2RhdGEsIHU4IHBvbGljeSk7CitzOCBzbWVfZ2V0X3R4cmF0ZV9wb2xpY3kodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBvbGljeSk7CitzOCBzbWVfZ2V0X2N3bWluX3ZhbHVlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpjd21pbik7CitzOCBzbWVfZ2V0X2N3bWF4X3ZhbHVlKHZvaWQgKnBjb3JlX2RhdGEsIHUxNiAqY3dtYXgpOworczggc21lX2dldF9tc19yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICogcE1zUmFkaW9PZmYpOworczggc21lX3NldF9tc19yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IGJvTXNSYWRpb09mZik7CitzOCBzbWVfZ2V0X3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgcHNSYWRpb09mZiBwUmFkaW9PZmZEYXRhKTsKK3M4IHNtZV9zZXRfcmFkaW9fbW9kZSh2b2lkICpwY29yZV9kYXRhLCBSYWRpb09mZiBSYWRpb09mZkRhdGEpOworCit2b2lkIHNtZV9nZXRfdHhfcG93ZXJfbGV2ZWwodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpUeFBvd2VyKTsKK3U4IHNtZV9zZXRfdHhfcG93ZXJfbGV2ZWwodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFR4UG93ZXIpOwordm9pZCBzbWVfZ2V0X2FudGVubmFfY291bnQodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpBbnRlbm5hQ291bnQpOwordm9pZCBzbWVfZ2V0X3J4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpSeEFudGVubmEpOwordTggc21lX3NldF9yeF9hbnRlbm5hKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiBSeEFudGVubmEpOwordm9pZCBzbWVfZ2V0X3R4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpUeEFudGVubmEpOworczggc21lX3NldF90eF9hbnRlbm5hKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiBUeEFudGVubmEpOworczggc21lX3NldF9JQlNTX2NoYW4odm9pZCAqcGNvcmVfZGF0YSwgQ2hhbkluZm8gY2hhbik7CisKKy8vMjAwNjExMDggV1BTCitzOCBzbWVfc2V0X0lFX2FwcGVuZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqYnVmZmVyLCB1MTYgYnVmX2xlbik7CisKKworCisKKy8vPT09PT09PT09PT09PT09PT09IExvY2FsIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09CisvLyNpZmRlZiBfSFNJTkNIVQorLy92b2lkIGRydl90cmFuc2xhdGVfcnNzaSgpOyAgIC8vIEhXIFJTU0kgYml0IC0+IE5ESVMgUlNTSSByZXByZXNlbnRhdGlvbgorLy92b2lkIGRydl90cmFuc2xhdGVfYnNzX2Rlc2NyaXB0aW9uKCk7IC8vIExvY2FsIGJzcyBkZXNjIC0+IE5ESVMgYnNzIGRlc2MKKy8vdm9pZCBkcnZfdHJhbnNsYXRlX2NoYW5uZWwodTggTmV0d29ya1R5cGUsIHU4IENoYW5uZWxOdW1iZXIsIHUzMiAqZnJlcSk7IC8vIGNoYW5uZWwgbnVtYmVyIC0+IGNoYW5uZWwgL2ZyZXEuCisvLyNlbmRpZiBfSFNJTkNIVQorLy8KK3N0YXRpYyBjb25zdCB1MzIgUG93ZXJEYlRvTXdbXSA9Cit7CisJNTYsCS8vbVcsIE1BWCAtIDAsCTE3LjUgZGJtCisJNDAsCS8vbVcsIE1BWCAtIDEsCTE2LjAgZGJtCisJMzAsCS8vbVcsIE1BWCAtIDIsCTE0LjggZGJtCisJMjAsCS8vbVcsIE1BWCAtIDMsCTEzLjAgZGJtCisJMTUsCS8vbVcsIE1BWCAtIDQsCTExLjggZGJtCisJMTIsCS8vbVcsIE1BWCAtIDUsCTEwLjYgZGJtCisJOSwJLy9tVywgTUFYIC0gNiwJIDkuNCBkYm0KKwk3LAkvL21XLCBNQVggLSA3LAkgOC4zIGRibQorCTUsCS8vbVcsIE1BWCAtIDgsCSA2LjQgZGJtCisJNCwJLy9tVywgTUFYIC0gOSwJIDUuMyBkYm0KKwkzLAkvL21XLCBNQVggLSAxMCwgIDQuMCBkYm0KKwkyLAkvL21XLCBNQVggLSAxMSwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTIsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDEzLCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxNCwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTUsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDE2LCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxNywgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTgsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDE5LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyMCwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjEsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDIyLCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyMywgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjQsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI1LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyNiwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjcsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI4LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyOSwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMzAsICA/IGRibQorCTEJLy9tVywgTUFYIC0gMzEsICA/IGRibQorfTsKKworCisKKworCisjZW5kaWYgLyogX19TTUVfQVBJX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZDJmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oCkBAIC0wLDAgKzEsMjI4IEBACisvLworLy8gU01FX1MuSCAtCisvLyBTTUUgdGFzayBnbG9iYWwgQ09OU1RBTlRTLCBTVFJVQ1RVUkVTLCB2YXJpYWJsZXMKKy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL2RlZmluZSB0aGUgbXNnIHR5cGUgb2YgU01FIG1vZHVsZQorLy8gMHgwMH4weDFGIDogTVNHIGZyb20gR1VJIGRpc3BhdGNoCisvLyAweDIwfjB4M0YgOiBNU0cgZnJvbSBNTE1FCisvLyAweDQwfjB4NUYgOiBNU0cgZnJvbSBTQ0FOCisvLyAweDYwfjB4NkYgOiBNU0cgZnJvbSBUWC9SWAorLy8gMHg3MH4weDdGIDogTVNHIGZyb20gUk9BTUlORworLy8gMHg4MH4weDhGIDogTVNHIGZyb20gSVNSCisvLyAweDkwCQkgOiBNU0cgVGltZU91dAorCisvLyBmcm9tIEdVSQorI2RlZmluZSBTTUVNU0dfU0NBTl9SRVEJCQkJCTB4MDEKKy8vI2RlZmluZSBTTUVNU0dfUEFTU0lWRV9TQ0FOX1JFUQkJCTB4MDIKKyNkZWZpbmUgU01FTVNHX0pPSU5fUkVRCQkJCQkweDAzCisjZGVmaW5lIFNNRU1TR19TVEFSVF9JQlNTCQkJCTB4MDQKKyNkZWZpbmUgU01FTVNHX0RJU0NPTk5FQ1RfUkVRCQkJMHgwNQorI2RlZmluZSBTTUVNU0dfQVVUSEVOX1JFUQkJCQkweDA2CisjZGVmaW5lIFNNRU1TR19ERUFVVEhFTl9SRVEJCQkJMHgwNworI2RlZmluZSBTTUVNU0dfQVNTT0NfUkVRCQkJCTB4MDgKKyNkZWZpbmUgU01FTVNHX1JFQVNTT0NfUkVRCQkJCTB4MDkKKyNkZWZpbmUgU01FTVNHX0RJU0FTU09DX1JFUQkJCQkweDBhCisjZGVmaW5lIFNNRU1TR19QT1dFUlNBVkVfUkVRCQkJMHgwYgorCisKKy8vIGZyb20gTUxNRQorI2RlZmluZSBTTUVNU0dfQVVUSEVOX0NGTQkJCQkweDIxCisjZGVmaW5lIFNNRU1TR19BVVRIRU5fSU5ECQkJCTB4MjIKKyNkZWZpbmUgU01FTVNHX0FTU09DX0NGTQkJCQkweDIzCisjZGVmaW5lIFNNRU1TR19ERUFVVEhFTl9JTkQJCQkJMHgyNAorI2RlZmluZSBTTUVNU0dfRElTQVNTT0NfSU5ECQkJCTB4MjUKKy8vIGZyb20gU0NBTgorI2RlZmluZSBTTUVNU0dfU0NBTl9DRk0JCQkJCTB4NDEKKyNkZWZpbmUgU01FTVNHX1NUQVJUX0lCU1NfQ0ZNCQkJMHg0MgorLy8gZnJvbSBNVE8sIGZ1bmN0aW9uIGNhbGwgdG8gc2V0IFNNRSBwYXJhbWV0ZXJzCisKKy8vIDB4NjB+MHg2RiA6IE1TRyBmcm9tIFRYL1JYCisvLyNkZWZpbmUgU01FTVNHX0lCU1NfSk9JTl9VUERBVEVfQlNTSUQJMHg2MQorI2RlZmluZSBTTUVNU0dfQ09VTlRFUk1FQVNVUkVfTUlDRkFJTF9USU1FT1VUCQkweDYyCisjZGVmaW5lIFNNRU1TR19DT1VOVEVSTUVBU1VSRV9CTE9DS19USU1FT1VUCTB4NjMKKy8vIGZyb20gUk9BTUlORworI2RlZmluZSBTTUVNU0dfSEFORE9WRVJfSk9JTl9SRVEJCTB4NzEKKyNkZWZpbmUgU01FTVNHX0VORF9ST0FNSU5HCQkJCTB4NzIKKyNkZWZpbmUgU01FTVNHX1NDQU5fSk9JTl9SRVEJCQkweDczCisvLyBmcm9tIElTUgorI2RlZmluZSBTTUVNU0dfVFNGX1NZTkNfSU5ECQkJCTB4ODEKKy8vIGZyb20gVGltZU91dAorI2RlZmluZSBTTUVNU0dfVElNRU9VVAkJCQkJMHg5MQorCisKKworI2RlZmluZSBNQVhfUE1LSURfQWNjdW50ICAgICAgICAgICAgICAgIDE2CisvL0BhZGRlZCBieSB3cyAwNC8yMi8wNQorI2RlZmluZSBDaXBoZXJfRGlzYWJsZWQgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ2lwaGVyX1dlcCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENpcGhlcl9Ua2lwICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDaXBoZXJfQ2NtcCAgICAgICAgICAgICAgICAgICAgIDQKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vQ29uc3RhbnRzCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9HbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzCisKKyNkZWZpbmUgTlVNT0ZXRVBFTlRSSUVTICAgICA2NAorCit0eXBlZGVmIGVudW0gX1dFUEtleU1vZGUKK3sKKyAgICBXRVBLRVlfRElTQUJMRUQgPSAwLAorICAgIFdFUEtFWV82NCAgICAgICA9IDEsCisgICAgV0VQS0VZXzEyOCAgICAgID0gMgorCit9IFdFUEtFWU1PREUsICpwV0VQS0VZTU9ERTsKKworI2lmZGVmIF9XUEEyXworCit0eXBlZGVmIHN0cnVjdCBfQlNTSW5mbworeworICB1OCAgICAgICAgUHJlQXV0aEJzc0lEWzZdOworICBQTUtJRCAgICAgICAgcG1raWRfdmFsdWU7Cit9QlNTSURfSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgX1BNS0lEX1RhYmxlIC8vYWRkZWQgYnkgd3MgMDUvMDUvMDQKK3sKKyAgIHUzMiAgTGVuZ3RoOworICAgdTMyICBCU1NJREluZm9Db3VudDsKKyAgIEJTU0lEX0luZm8gQlNTSURJbmZvWzE2XTsKKworfSBQTUtJRF9UYWJsZTsKKworI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBNQVhfQkFTSUNfUkFURV9TRVQgICAgICAgICAgMTUKKyNkZWZpbmUgTUFYX09QVF9SQVRFX1NFVCAgICAgICAgICAgIE1BWF9CQVNJQ19SQVRFX1NFVAorCisKK3R5cGVkZWYgc3RydWN0IF9TTUVfUEFSQU1FVEVSUworeworICAgIHUxNgkJCQl3U3RhdGU7CisJdTgJCQkJYm9EVVRtb2RlOworCXU4CQkJCWJEZXNpcmVkUG93ZXJTYXZlOworCisJLy8gU01FIHRpbWVyIGFuZCB0aW1lb3V0IHZhbHVlCisJLy9ORElTX01JTklQT1JUX1RJTUVSCW5UaW1lcjsKKwlPU19USU1FUgkJCW5UaW1lcjsKKworCXU4CQkJCWJvSW5UaW1lckhhbmRsZXI7CisJdTggCQkJCWJvQXV0aFJldHJ5QWN0aXZlOworCXU4CQkJCXJlc2VydmVkXzBbMl07CisKKwl1MzIJCQkJQXV0aGVuUmV0cnlUaW1lclZhbDsJLy8gTk9URTogQXNzb2MgZG9uJ3QgZmFpbCB0aW1lb3V0CisJdTMyCQkJCUpvaW5GYWlsVGltZXJWYWw7CQkvLyAxMCpCZWFjb24tSW50ZXJ2YWwKKworCS8vUmF0ZXMKKwl1OAkJCQlCU1NCYXNpY1JhdGVTZXRbKE1BWF9CQVNJQ19SQVRFX1NFVCArIDMpICYgfjB4MDMgXTsgICAgLy8gQlNTIGJhc2ljIHJhdGUgc2V0CisJdTgJCQkJT3BlcmF0aW9uYWxSYXRlU2V0WyhNQVhfT1BUX1JBVEVfU0VUICsgMykgJiB+MHgwMyBdOyAvLyBPcGVyYXRpb25hbCByYXRlIHNldAorCisJdTgJCQkJTnVtT2ZCU1NCYXNpY1JhdGU7CisJdTgJCQkJTnVtT2ZPcGVyYXRpb25hbFJhdGU7CisJdTgJCQkJcmVzZXJ2ZWRfMVsyXTsKKworCXUzMgkJCQlCYXNpY1JhdGVCaXRtYXA7CisJdTMyCQkJCU9wUmF0ZUJpdG1hcDsKKworCS8vIFN5c3RlbSBwYXJhbWV0ZXJzIFNldCBieSBHVUkKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXJ0IElCU1MgcGFyYW1ldGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCisJdTMyCQkJCWJvU3RhcnRJQlNTOwkJCS8vU3RhcnQgSUJTUyB0b2dnbGUKKworCXUxNgkJCQl3QmVhY29uUGVyaW9kOworCXUxNgkJCQl3QVRJTV9XaW5kb3c7CisKKwlDaGFuSW5mbwkJCUlic3NDaGFuOyAvLyAyQgkvL2NoYW5uZWwgc2V0dGluZyB3aGVuIHN0YXJ0IElCU1MKKwl1OAkJCQlyZXNlcnZlZF8yWzJdOworCisgICAgLy8gSm9pbiByZWxhdGVkCisJdTE2CQkJCXdEZXNpcmVkSm9pbkJTUzsJCS8vIEJTUyBpbmRleCB3aGljaCBkZXNpcmUgdG8gam9pbgorCXU4CQkJCWJvSm9pblJlcTsJCQkJLy9Kb2luIHJlcXVlc3QgdG9nZ2xlCisJdTgJCQkJYkRlc2lyZWRCU1NUeXBlOwkJLy9mb3IgSm9pbiByZXF1ZXN0CisKKyAgICB1MTYJCQkJd0NhcGFiaWxpdHlJbmZvOyAgICAgICAgLy8gVXNlZCB3aGVuIGludm9raW5nIHRoZSBNTE1FX0Fzc29jaWF0ZV9yZXF1ZXN0KCkuCisJdTE2CQkJCXdOb25FUlBjYXBhYmlsaXR5SW5mbzsKKworICAgIHN0cnVjdCBTU0lEX0VsZW1lbnQgc0Rlc2lyZWRTU0lEOyAvLyAzNCBCCisJdTgJCQkJcmVzZXJ2ZWRfM1syXTsKKworCXU4ICAgIAkJCWFiRGVzaXJlZEJTU0lEW01BQ19BRERSX0xFTkdUSCArIDJdOworCisJdTgJCQkJYkpvaW5TY2FuQ291bnQ7CQkJLy8gdGhlIHRpbWUgb2Ygc2Nhbi1qb2luIGFjdGlvbiBuZWVkIHRvIGRvCisJdTgJCQkJYkRlc2lyZWRBdXRoTW9kZTsgICAgICAgLy8gQVVUSF9PUEVOX1NZU1RFTSBvciBBVVRIX1NIQVJFRF9LRVkKKwl1OAkJCQlyZXNlcnZlZF80WzJdOworCisgICAgLy8gRW5jcnlwdGlvbiBwYXJhbWV0ZXJzCisJdTggICAgIAkJCV9kb3QxMVByaXZhY3lJbnZva2VkOworICAgIHU4ICAgICAgICAgICAgIAlfZG90MTFQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQ7CisJdTgJCQkJcmVzZXJ2ZWRfNVsyXTsKKworICAgIC8vQCB3cyBhZGRlZAorICAgIHU4CQkJCURlc2lyZWRFbmNyeXB0OworCXU4CQkJCWVuY3J5cHRfc3RhdHVzOwkvL0VOQ1JZUFRfRElTQUJMRSwgRU5DUllQVF9XRVAsIEVOQ1JZUFRfV0VQX05PS0VZLCBFTkNSWVBUX1RLSVAsIC4uLgorCXU4CQkJCWtleV9sZW5ndGg7CisJdTgJCQkJcGFpcndpc2Vfa2V5X29rOworCisJdTgJCQkJZ3JvdXBfa2V5X29rOworICAgIHU4CQkJCXdwYV9vazsgICAgICAgICAgICAgLy8gaW5kaWNhdGUgdGhlIGNvbnRyb2wgcG9ydCBvZiA4MDIuMXggaXMgb3BlbiBvciBjbG9zZQorCXU4CQkJCXBhaXJ3aXNlX2tleV90eXBlOworCXU4CQkJCWdyb3VwX2tleV90eXBlOworCisgICAgdTMyICAgICAgICAgICAgICAgX2RvdDExV0VQRGVmYXVsdEtleUlEOworCisJdTggICAgICAgICAgICAgIAl0eF9taWNfa2V5WzhdOyAgICAgIC8vIFRPRE86IDA2Mjcga2V2aW4tVEtJUAorCXU4ICAgICAgICAgICAgICAJcnhfbWljX2tleVs4XTsgICAgICAvLyBUT0RPOiAwNjI3IGtldmluLVRLSVAKKwl1OAkJCQlncm91cF90eF9taWNfa2V5WzhdOworCXU4CQkJCWdyb3VwX3J4X21pY19rZXlbOF07CisKKy8vCSNpZmRlZiBfV1BBXworCXU4CQkJCUFzc29jUmVxVmFySUVbMjAwXTsKKwl1OAkJCQlBc3NvY1Jlc3BWYXJJRVsyMDBdOworCisJdTE2CQkJCUFzc29jUmVxVmFyTGVuOworCXUxNgkJCQlBc3NvY1Jlc3BWYXJMZW47CisJdTgJCQkJYm9SZWFzc29jOwkJCQkvL3VzZSBhc3NvYy4gb3IgcmVhc3NvYy4KKwl1OAkJCQlyZXNlcnZlZF82WzNdOworCXUxNgkJCQlBc3NvY1Jlc3BDYXBhYmlsaXR5OworCXUxNgkJCQlBc3NvY1Jlc3BTdGF0dXM7CisvLwkjZW5kaWYKKworCSNpZmRlZiBfV1BBMl8KKyAgICB1OCAgICAgICAgICAgICAgIFBta0lkVGFibGVbMjU2XTsKKyAgICB1MzIgICAgICAgICAgICAgICBQbWtpZFRhYmxlSW5kZXg7CisJI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworfSBTTUVfUEFSQU1FVEVSUywgKlBTTUVfUEFSQU1FVEVSUzsKKworI2RlZmluZSBwc1NNRQkJCSgmKEFkYXB0ZXItPnNTbWVQYXJhKSkKKworI2RlZmluZSB3U01FR2V0Q3VycmVudFNUQVN0YXRlKEFkYXB0ZXIpCQkoKHUxNikoQWRhcHRlciktPnNTbWVQYXJhLndTdGF0ZSkKKworCisKKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKy8vCVNtZU1vZHVsZS5oCisvLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIFNNRSBtb2R1bGUKKy8vCWhpc3RvcnkgLS0gMDEvMTQvMDMnIGNyZWF0ZWQKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKy8vRGVmaW5lIHRoZSBzdGF0ZSBvZiBTTUUgbW9kdWxlCisjZGVmaW5lIERJU0FCTEVECQkJCQkJMAorI2RlZmluZSBJTklUX1NDQU4JCQkJCQkxCisjZGVmaW5lIFNDQU5fUkVBRFkJCQkJCQkyCisjZGVmaW5lIFNUQVJUX0lCU1MJCQkJCQkzCisjZGVmaW5lIEpPSU5fUEVORElORwkJCQkJNAorI2RlZmluZSBKT0lOX0NGTQkJCQkJCTUKKyNkZWZpbmUgQVVUSEVOVElDQVRFX1BFTkRJTkcJCQk2CisjZGVmaW5lIEFVVEhFTlRJQ0FURUQJCQkJCTcKKyNkZWZpbmUgQ09OTkVDVEVECQkJCQkJOAorLy8jZGVmaW5lIEVBUF9TVEFSVElORwkJCQkJOQorLy8jZGVmaW5lIEVBUE9MX0FVVEhFTl9QRU5ESU5HCQkJMTAKKy8vI2RlZmluZSBTRUNVUkVfQ09OTkVDVEVECQkJCTExCisKKworLy8gU3RhdGljIGZ1bmN0aW9uCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1X3Zlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzNiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1X3Zlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBPbmx5IGRlZmluZSBvbmUgb2YgZm9sbG93CisvLworCisjaWZkZWYgV0JfV0lOCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT04gICAgICAgICAgICAgMSwwMCw0NywwMAorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OX1NUUiAgICAgICAgICIxLjAwLjQ3LjAwIgorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUFKT1JfVkVSU0lPTiAgIDB4MDEwMAorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUlOT1JfVkVSU0lPTiAgIDB4NDcwMAorI2VuZGlmCisKKyNpZmRlZiBXQl9DRQorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OICAgICAgICAgICAgIDIsMDAsNDcsMDAKKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTl9TVFIgICAgICAgICAiMi4wMC40Ny4wMCIKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01BSk9SX1ZFUlNJT04gICAweDAyMDAKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01JTk9SX1ZFUlNJT04gICAweDQ3MDAKKyNlbmRpZgorCisjaWZkZWYgV0JfTElOVVgKKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTiAgICAgICAgICAgICAzLDAwLDQ3LDAwCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT05fU1RSICAgICAgICAgIjMuMDAuNDcuMDAiCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NQUpPUl9WRVJTSU9OICAgMHgwMzAwCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NSU5PUl9WRVJTSU9OICAgMHg0NzAwCisjZW5kaWYKKworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjhlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jCkBAIC0wLDAgKzEsODc4IEBACisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3ZvaWQgaGFsX2dldF9ldGhlcm5ldF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIHU4ICpjdXJyZW50X2FkZHJlc3MgKQoreworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCW1lbWNweSggY3VycmVudF9hZGRyZXNzLCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTICk7Cit9CisKK3ZvaWQgaGFsX3NldF9ldGhlcm5ldF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIHU4ICpjdXJyZW50X2FkZHJlc3MgKQoreworCXUzMiBsdG1wWzJdOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgY3VycmVudF9hZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MgKTsKKworCWx0bXBbMF09IGNwdV90b19sZTMyKCAqKHUzMiAqKXBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzICk7CisJbHRtcFsxXT0gY3B1X3RvX2xlMzIoICoodTMyICopKHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzICsgNCkgKSAmIDB4ZmZmZjsKKworCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwM2U4LCBsdG1wLCAyLCBBVVRPX0lOQ1JFTUVOVCApOworfQorCit2b2lkIGhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgdTggKnBldGhlcm5ldF9hZGRyZXNzICkKK3sKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwltZW1jcHkoIHBldGhlcm5ldF9hZGRyZXNzLCBwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzLCA2ICk7Cit9CisKK3U4IGhhbF9pbml0X2hhcmR3YXJlKHBod19kYXRhX3QgcEh3RGF0YSwgUFdCMzJfQURBUFRFUiBBZGFwdGVyKQoreworCXUxNiBTb2Z0d2FyZVNldDsKKwlwSHdEYXRhLT5BZGFwdGVyID0gQWRhcHRlcjsKKworCS8vIEluaXRpYWwgdGhlIHZhcmlhYmxlCisJcEh3RGF0YS0+TWF4UmVjZWl2ZUxpZmVUaW1lID0gREVGQVVMVF9NU0RVX0xJRkVfVElNRTsgLy8gU2V0dGluZyBSeCBtYXhpbXVtIE1TRFUgbGlmZSB0aW1lCisJcEh3RGF0YS0+RnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsgLy8gU2V0dGluZyBkZWZhdWx0IGZyYWdtZW50IHRocmVzaG9sZAorCisJaWYgKFdiVXNiX2luaXRpYWwocEh3RGF0YSkpIHsKKwkJcEh3RGF0YS0+SW5pdGlhbFJlc291cmNlID0gMTsKKwkJaWYoIFdiMzVSZWdfaW5pdGlhbChwSHdEYXRhKSkgeworCQkJcEh3RGF0YS0+SW5pdGlhbFJlc291cmNlID0gMjsKKwkJCWlmIChXYjM1VHhfaW5pdGlhbChwSHdEYXRhKSkgeworCQkJCXBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSA9IDM7CisJCQkJaWYgKFdiMzVSeF9pbml0aWFsKHBId0RhdGEpKSB7CisJCQkJCXBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSA9IDQ7CisJCQkJCU9TX1RJTUVSX0lOSVRJQUwoICZwSHdEYXRhLT5MRURUaW1lciwgaGFsX2xlZF9jb250cm9sLCBwSHdEYXRhICk7CisJCQkJCU9TX1RJTUVSX1NFVCggJnBId0RhdGEtPkxFRFRpbWVyLCAxMDAwICk7IC8vIDIwMDYwNjIzCisKKwkJCQkJLy8KKwkJCQkJLy8gRm9yIHJlc3RyaWN0IHRvIHZlbmRvcidzIGhhcmR3YXJlCisJCQkJCS8vCisJCQkJCVNvZnR3YXJlU2V0ID0gaGFsX3NvZnR3YXJlX3NldCggcEh3RGF0YSApOworCisJCQkJCSNpZmRlZiBWZW5kb3IyCisJCQkJCS8vIFRyeSB0byBtYWtlIHN1cmUgdGhlIEVFUFJPTSBjb250YWluCisJCQkJCVNvZnR3YXJlU2V0ID4+PSA4OworCQkJCQlpZiggU29mdHdhcmVTZXQgIT0gMHg4MiApCisJCQkJCQlyZXR1cm4gRkFMU0U7CisJCQkJCSNlbmRpZgorCisJCQkJCVdiMzVSeF9zdGFydCggcEh3RGF0YSApOworCQkJCQlXYjM1VHhfRVAyVk1fc3RhcnQoIHBId0RhdGEgKTsKKworCQkJCQlyZXR1cm4gVFJVRTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7CisJcmV0dXJuIEZBTFNFOworfQorCisKK3ZvaWQgaGFsX2hhbHQocGh3X2RhdGFfdCBwSHdEYXRhLCB2b2lkICpwcGFfZGF0YSkKK3sKKwlzd2l0Y2goIHBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSApCisJeworCQljYXNlIDQ6CisJCWNhc2UgMzogT1NfVElNRVJfQ0FOQ0VMKCAmcEh3RGF0YS0+TEVEVGltZXIsICZjYW5jZWwgKTsKKwkJCU9TX1NMRUVQKDEwMDAwMCk7IC8vIFdhaXQgZm9yIFRpbWVyIERQQyBleGl0IDk0MDYyMy4yCisJCQlXYjM1UnhfZGVzdHJveSggcEh3RGF0YSApOyAvLyBSZWxlYXNlIHRoZSBSeAorCQljYXNlIDI6IFdiMzVUeF9kZXN0cm95KCBwSHdEYXRhICk7IC8vIFJlbGVhc2UgdGhlIFR4CisJCWNhc2UgMTogV2IzNVJlZ19kZXN0cm95KCBwSHdEYXRhICk7IC8vIFJlbGVhc2UgdGhlIFdiMzUgUmVnaXNzdGVyIHJlc291cmNlcworCQkJCVdiVXNiX2Rlc3Ryb3koIHBId0RhdGEgKTsvLyBSZWxlYXNlIHRoZSBXYlVzYgorCX0KK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9yYXRlcyhwaHdfZGF0YV90IHBId0RhdGEsIHU4ICpwYnNzX3JhdGVzLAorCQkgICB1OCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgYmFzaWNfcmF0ZV9zZXQpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJCXRtcCwgdG1wMTsKKwl1OAkJUmF0ZVsxMl09eyAyLCA0LCAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDggfTsKKwl1OAkJU3VwcG9ydGVkUmF0ZVsxNl07CisJdTgJCWksIGosIGssIENvdW50MSwgQ291bnQyLCBCeXRlOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJaWYgKGJhc2ljX3JhdGVfc2V0KSB7CisJCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHgwMDBmZmYwMDsKKwkJdG1wMSA9IDB4MDAwMDAxMDA7CisJfSBlbHNlIHsKKwkJcFdiMzVSZWctPk0yOF9NYWNDb250cm9sICY9IH4weGZmZjAwMDAwOworCQl0bXAxID0gMHgwMDEwMDAwMDsKKwl9CisKKwl0bXAgPSAwOworCWZvciAoaT0wOyBpPGxlbmd0aDsgaSsrKSB7CisJCUJ5dGUgPSBwYnNzX3JhdGVzW2ldICYgMHg3ZjsKKwkJZm9yIChqPTA7IGo8MTI7IGorKykgeworCQkJaWYoIEJ5dGUgPT0gUmF0ZVtqXSApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiA8IDEyKQorCQkJdG1wIHw9ICh0bXAxPDxqKTsKKwl9CisKKwlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgfD0gdG1wOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgyOCwgcFdiMzVSZWctPk0yOF9NYWNDb250cm9sICk7CisKKwkvLyA5MzAyMDYuMi5jIE03OCBzZXR0aW5nCisJaiA9IGsgPSBDb3VudDEgPSBDb3VudDIgPSAwOworCW1lbXNldCggU3VwcG9ydGVkUmF0ZSwgMCwgMTYgKTsKKwl0bXAgPSAweDAwMTAwMDAwOworCXRtcDEgPSAweDAwMDAwMTAwOworCWZvciAoaT0wOyBpPDEyOyBpKyspIHsgLy8gR2V0IHRoZSBzdXBwb3J0ZWQgcmF0ZQorCQlpZiAodG1wICYgcFdiMzVSZWctPk0yOF9NYWNDb250cm9sKSB7CisJCQlTdXBwb3J0ZWRSYXRlW2pdID0gUmF0ZVtpXTsKKworCQkJaWYgKHRtcDEgJiBwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wpCisJCQkJU3VwcG9ydGVkUmF0ZVtqXSB8PSAweDgwOworCisJCQlpZiAoaykKKwkJCQlDb3VudDIrKzsKKwkJCWVsc2UKKwkJCQlDb3VudDErKzsKKworCQkJaisrOworCQl9CisKKwkJaWYgKGk9PTQgJiYgaz09MCkgeworCQkJaWYoICEocFdiMzVSZWctPk0yOF9NYWNDb250cm9sICYgMHgwMDBmZjAwMCkgKSAvLyBpZiBiYXNpYyByYXRlIGluIDExZyBkb21haW4pCisJCQl7CisJCQkJayA9IDE7CisJCQkJaiA9IDg7CisJCQl9CisJCX0KKworCQl0bXAgPDw9IDE7CisJCXRtcDEgPDw9IDE7CisJfQorCisJLy8gRmlsbCBkYXRhIGludG8gc3VwcG9ydCByYXRlIHVudGlsIGJ1ZmZlciBmdWxsCisJLy8tLS0yMDA2MDkyNiBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKwlmb3IgKGk9MDsgaTw0OyBpKyspCisJCSoodTMyICopKFN1cHBvcnRlZFJhdGUrKGk8PDIpKSA9IGNwdV90b19sZTMyKCAqKHUzMiAqKShTdXBwb3J0ZWRSYXRlKyhpPDwyKSkgKTsKKwkvLy0tLSBlbmQgMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLDB4MDg3YywgKHUzMiAqKVN1cHBvcnRlZFJhdGUsIDQsIEFVVE9fSU5DUkVNRU5UICk7CisJcFdiMzVSZWctPk03Q19NYWNDb250cm9sID0gKCh1MzIgKilTdXBwb3J0ZWRSYXRlKVswXTsKKwlwV2IzNVJlZy0+TTgwX01hY0NvbnRyb2wgPSAoKHUzMiAqKVN1cHBvcnRlZFJhdGUpWzFdOworCXBXYjM1UmVnLT5NODRfTWFjQ29udHJvbCA9ICgodTMyICopU3VwcG9ydGVkUmF0ZSlbMl07CisJcFdiMzVSZWctPk04OF9NYWNDb250cm9sID0gKCh1MzIgKilTdXBwb3J0ZWRSYXRlKVszXTsKKworCS8vIEZpbGwgbGVuZ3RoCisJdG1wID0gQ291bnQxPDwyOCB8IENvdW50Mjw8MjQ7CisJcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiAmPSB+MHhmZjAwMDAwMDsKKwlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uIHw9IHRtcDsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NzgsIHBXYjM1UmVnLT5NNzhfRVJQSW5mb3JtYXRpb24gKTsKK30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYmVhY29uX3BlcmlvZCApCit7CisJdTMyCXRtcDsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCXBId0RhdGEtPkJlYWNvblBlcmlvZCA9IGJlYWNvbl9wZXJpb2Q7CisJdG1wID0gcEh3RGF0YS0+QmVhY29uUGVyaW9kIDw8IDE2OworCXRtcCB8PSBwSHdEYXRhLT5Qcm9iZURlbGF5OworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg0OCwgdG1wICk7Cit9CisKKwordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKQorCQlyZXR1cm47CisKKwlwcmludGsoIkdvaW5nIHRvIGNoYW5uZWw6ICVkLyVkXG4iLCBjaGFubmVsLmJhbmQsIGNoYW5uZWwuQ2hhbk5vKTsKKworCVJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggcEh3RGF0YSwgY2hhbm5lbCApOy8vIFN3aXRjaCBjaGFubmVsCisJcEh3RGF0YS0+Q2hhbm5lbCA9IGNoYW5uZWwuQ2hhbk5vOworCXBId0RhdGEtPmJhbmQgPSBjaGFubmVsLmJhbmQ7CisJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCVdCREVCVUcoKCJTZXQgY2hhbm5lbCBpcyAlZCwgYmFuZCA9JWRcbiIsIHBId0RhdGEtPkNoYW5uZWwsIHBId0RhdGEtPmJhbmQpKTsKKwkjZW5kaWYKKwlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgJj0gfjB4ZmY7IC8vIENsZWFuIGNoYW5uZWwgaW5mb3JtYXRpb24gZmllbGQKKwlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgfD0gY2hhbm5lbC5DaGFuTm87CisJV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKCBwSHdEYXRhLCAweDA4MjgsIHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCwKKwkJCQkJKHM4ICopJmNoYW5uZWwsIHNpemVvZihDaGFuSW5mbykpOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICkKK3sKKwloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggcEh3RGF0YSwgY2hhbm5lbCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX2dldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyAqY2hhbm5lbCApCit7CisJY2hhbm5lbC0+Q2hhbk5vID0gcEh3RGF0YS0+Q2hhbm5lbDsKKwljaGFubmVsLT5iYW5kID0gcEh3RGF0YS0+YmFuZDsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCAmPSB+MHgwMjAwMDAwMDsvL1RoZSBIVyB2YWx1ZQorCisJaWYgKGVuYWJsZSkKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sIHw9IDB4MDIwMDAwMDA7Ly9UaGUgSFcgdmFsdWUKKworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7Cit9CisKKy8vZm9yIHdlcCBrZXkgZXJyb3IgZGV0ZWN0aW9uLCB3ZSBuZWVkIHRvIGFjY2VwdCBicm9hZGNhc3QgcGFja2V0cyB0byBiZSByZWNlaXZlZCB0ZW1wb3JhcnkuCit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkgcmV0dXJuOworCWlmIChlbmFibGUpIHsKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sIHw9IDB4MDA0MDAwMDA7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7CisJfSBlbHNlIHsKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sJj1+MHgwMDQwMDAwMDsKKwkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODAwLCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgKTsKKwl9Cit9CisKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICY9IH4weDAxMDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJaWYgKGVuYWJsZSkgIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDAxMDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODAwLCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgKTsKK30KKwordm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwkvLyAyMDA0MDEwOCBkZWJ1ZworCWlmKCAhZW5hYmxlICkvL0R1ZSB0byBTTUUgYW5kIE1MTUUgYXJlIG5vdCBzdWl0YWJsZSBmb3IgMzUKKwkJcmV0dXJuOworCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICY9IH4weDA0MDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJaWYoIGVuYWJsZSApCisJCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDA0MDAwMDAwOy8vVGhlIEhXIHZhbHVlCisKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MDAsIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9tdWx0aWNhc3RfYWRkcmVzcyggcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCAqYWRkcmVzcywgdTggbnVtYmVyICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXU4CQlCeXRlLCBCaXQ7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwkvL0VyYXNlcyBhbmQgcmVmaWxscyB0aGUgY2FyZCBtdWx0aWNhc3QgcmVnaXN0ZXJzLiBVc2VkIHdoZW4gYW4gYWRkcmVzcworCS8vICAgIGhhcyBiZWVuIGRlbGV0ZWQgYW5kIGFsbCBiaXRzIG11c3QgYmUgcmVjb21wdXRlZC4KKwlwV2IzNVJlZy0+TTA0X011bHRpY2FzdEFkZHJlc3MxID0gMDsKKwlwV2IzNVJlZy0+TTA4X011bHRpY2FzdEFkZHJlc3MyID0gMDsKKworCXdoaWxlKCBudW1iZXIgKQorCXsKKwkJbnVtYmVyLS07CisJCUNhcmRHZXRNdWx0aWNhc3RCaXQoIChhZGRyZXNzKyhudW1iZXIqRVRIX0xFTkdUSF9PRl9BRERSRVNTKSksICZCeXRlLCAmQml0KTsKKwkJcFdiMzVSZWctPk11bHRpY2FzdFtCeXRlXSB8PSBCaXQ7CisJfQorCisJLy8gVXBkYXRpbmcgcmVnaXN0ZXIKKwlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDgwNCwgKHUzMiAqKXBXYjM1UmVnLT5NdWx0aWNhc3QsIDIsIEFVVE9fSU5DUkVNRU5UICk7Cit9CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordTggaGFsX2dldF9hY2NlcHRfYmVhY29uKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuIDA7CisKKwlpZiggcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICYgMHgwNDAwMDAwMCApCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGNoYXIgaGFsX3Jlc2V0X2hhcmR3YXJlKCBwaHdfZGF0YV90IHBId0RhdGEsIHZvaWQqIHBwYSApCit7CisJLy8gTm90IGltcGxlbWVudCB5ZXQKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBoYWxfc3RvcCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCXBId0RhdGEtPldiMzVSeC5yeF9oYWx0ID0gMTsKKwlXYjM1Unhfc3RvcCggcEh3RGF0YSApOworCisJcEh3RGF0YS0+V2IzNVR4LnR4X2hhbHQgPSAxOworCVdiMzVUeF9zdG9wKCBwSHdEYXRhICk7CisKKwlwV2IzNVJlZy0+RDAwX0RtYUNvbnRyb2wgJj0gfjB4YzAwMDAwMDA7Ly9UeCBPZmYsIFJ4IE9mZgorCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDQwMCwgcFdiMzVSZWctPkQwMF9EbWFDb250cm9sICk7CisKKwlXYlVzYl9TdG9wKCBwSHdEYXRhICk7IC8vIDIwMDUxMjMwIEFkZC40Cit9CisKK3Vuc2lnbmVkIGNoYXIgaGFsX2lkbGUocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFdCVVNCCXBXYlVzYiA9ICZwSHdEYXRhLT5XYlVzYjsKKworCWlmKCAhcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgJiYgKCBwV2JVc2ItPkRldGVjdENvdW50IHx8IHBXYjM1UmVnLT5FUDB2bV9zdGF0ZSE9Vk1fU1RPUCApICkKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBoYWxfc2V0X2N3bWluKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTgJY3dpbl9taW4gKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwlwSHdEYXRhLT5jd21pbiA9IGN3aW5fbWluOworCXBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbCAmPSB+MHg3YzAwOwkvL2JpdCAxMCB+IDE0CisJcFdiMzVSZWctPk0yQ19NYWNDb250cm9sIHw9IChwSHdEYXRhLT5jd21pbjw8MTApOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgyYywgcFdiMzVSZWctPk0yQ19NYWNDb250cm9sICk7Cit9CisKK3MzMiBoYWxfZ2V0X3Jzc2koICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgKkhhbFJzc2lBcnJ5LCAgdTggQ291bnQgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUjAxX0RFU0NSSVBUT1IJcjAxOworCXMzMiBsdG1wID0gMCwgdG1wOworCXU4CWk7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm4gLTIwMDsKKwlpZiggQ291bnQgPiBNQVhfQUNDX1JTU0lfQ09VTlQgKSAvLyBCZWNhdXNlIHRoZSBUUyBtYXkgdXNlIHRoaXMgZnVudGlvbgorCQlDb3VudCA9IE1BWF9BQ0NfUlNTSV9DT1VOVDsKKworCS8vIFJTU0kgPSBDMSArIEMyICogKGFnY19zdGF0ZVs3OjBdICsgb2Zmc2V0X21hcChsbmFfc3RhdGVbMTowXSkpCisJLy8gQzEgPSAtMTk1LCBDMiA9IDAuNjYgPSA4NS8xMjgKKwlmb3IgKGk9MDsgaTxDb3VudDsgaSsrKQorCXsKKwkJcjAxLnZhbHVlID0gSGFsUnNzaUFycnlbaV07CisJCXRtcCA9ICgoKCByMDEuUjAxX0FHQ19zdGF0ZSArIHBXYjM1UmVnLT5MTkFWYWx1ZVtyMDEuUjAxX0xOQV9zdGF0ZV0pICogODUgKSA+PjcgKSAtIDE5NTsKKwkJbHRtcCArPSB0bXA7CisJfQorCWx0bXAgLz0gQ291bnQ7CisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV8yMjMwICkgbHRtcCAtPSA1OyAvLyAxMDsKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfQUlST0hBXzIyMzBTICkgbHRtcCAtPSA1OyAvLyAxMDsgMjAwNjA0MjAgQWRkIHRoaXMKKworCS8vaWYoIGx0bXAgPCAtMjAwICkgbHRtcCA9IC0yMDA7CisJaWYoIGx0bXAgPCAtMTEwICkgbHRtcCA9IC0xMTA7Ly8gMS4wLjI0LjAgRm9yIE5KUkMKKworCXJldHVybiBsdG1wOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzMzIgaGFsX2dldF9yc3NpX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBpZHgsICB1OCBDb3VudCApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlSMDFfREVTQ1JJUFRPUglyMDE7CisJczMyIGx0bXAgPSAwLCB0bXA7CisJdTgJaSwgajsKKwlQQURBUFRFUglBZGFwdGVyID0gcEh3RGF0YS0+QWRhcHRlcjsKKy8vCXUzMiAqSGFsUnNzaUFycnkgPSBwc0JTUyhpZHgpLT5IYWxSc3NpOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuIC0yMDA7CisJaWYoIENvdW50ID4gTUFYX0FDQ19SU1NJX0NPVU5UICkgLy8gQmVjYXVzZSB0aGUgVFMgbWF5IHVzZSB0aGlzIGZ1bnRpb24KKwkJQ291bnQgPSBNQVhfQUNDX1JTU0lfQ09VTlQ7CisKKwkvLyBSU1NJID0gQzEgKyBDMiAqIChhZ2Nfc3RhdGVbNzowXSArIG9mZnNldF9tYXAobG5hX3N0YXRlWzE6MF0pKQorCS8vIEMxID0gLTE5NSwgQzIgPSAwLjY2ID0gODUvMTI4CisjaWYgMAorCWZvciAoaT0wOyBpPENvdW50OyBpKyspCisJeworCQlyMDEudmFsdWUgPSBIYWxSc3NpQXJyeVtpXTsKKwkJdG1wID0gKCgoIHIwMS5SMDFfQUdDX3N0YXRlICsgcFdiMzVSZWctPkxOQVZhbHVlW3IwMS5SMDFfTE5BX3N0YXRlXSkgKiA4NSApID4+NyApIC0gMTk1OworCQlsdG1wICs9IHRtcDsKKwl9CisjZWxzZQorCWlmIChwc0JTUyhpZHgpLT5IYWxSc3NpSW5kZXggPT0gMCkKKwkJcHNCU1MoaWR4KS0+SGFsUnNzaUluZGV4ID0gTUFYX0FDQ19SU1NJX0NPVU5UOworCWogPSAodTgpcHNCU1MoaWR4KS0+SGFsUnNzaUluZGV4LTE7CisKKwlmb3IgKGk9MDsgaTxDb3VudDsgaSsrKQorCXsKKwkJcjAxLnZhbHVlID0gcHNCU1MoaWR4KS0+SGFsUnNzaVtqXTsKKwkJdG1wID0gKCgoIHIwMS5SMDFfQUdDX3N0YXRlICsgcFdiMzVSZWctPkxOQVZhbHVlW3IwMS5SMDFfTE5BX3N0YXRlXSkgKiA4NSApID4+NyApIC0gMTk1OworCQlsdG1wICs9IHRtcDsKKwkJaWYgKGogPT0gMCkKKwkJeworCQkJaiA9IE1BWF9BQ0NfUlNTSV9DT1VOVDsKKwkJfQorCQlqLS07CisJfQorI2VuZGlmCisJbHRtcCAvPSBDb3VudDsKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfQUlST0hBXzIyMzAgKSBsdG1wIC09IDU7IC8vIDEwOworCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9BSVJPSEFfMjIzMFMgKSBsdG1wIC09IDU7IC8vIDEwOyAyMDA2MDQyMCBBZGQgdGhpcworCisJLy9pZiggbHRtcCA8IC0yMDAgKSBsdG1wID0gLTIwMDsKKwlpZiggbHRtcCA8IC0xMTAgKSBsdG1wID0gLTExMDsvLyAxLjAuMjQuMCBGb3IgTkpSQworCisJcmV0dXJuIGx0bXA7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9sZWRfY29udHJvbF8xYSggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJaGFsX2xlZF9jb250cm9sKCBOVUxMLCBwSHdEYXRhLCBOVUxMLCBOVUxMICk7Cit9CisKK3ZvaWQgaGFsX2xlZF9jb250cm9sKCAgdm9pZCogUzEsICBwaHdfZGF0YV90IHBId0RhdGEsICB2b2lkKiBTMywgIHZvaWQqIFM0ICkKK3sKKwlQQURBUFRFUglBZGFwdGVyID0gcEh3RGF0YS0+QWRhcHRlcjsKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMglMRURTZXQgPSAocEh3RGF0YS0+U29mdHdhcmVTZXQgJiBIQUxfTEVEX1NFVF9NQVNLKSA+PiBIQUxfTEVEX1NFVF9TSElGVDsKKwl1OAlMRURncmF5WzIwXSA9IHsgMCwzLDQsNiw4LDEwLDExLDEyLDEzLDE0LDE1LDE0LDEzLDEyLDExLDEwLDgsNiw0LDIgfTsKKwl1OAlMRURncmF5MlszMF0gPSB7IDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTUsMTQsMTMsMTIsMTEsMTAsOSw4IH07CisJdTMyCVRpbWVJbnRlcnZhbCA9IDUwMCwgbHRtcCwgbHRtcDI7CisgICAgICAgIGx0bXA9MDsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCWlmKCBwSHdEYXRhLT5MRURfY29udHJvbCApIHsKKwkJbHRtcDIgPSBwSHdEYXRhLT5MRURfY29udHJvbCAmIDB4ZmY7CisJCWlmKCBsdG1wMiA9PSA1ICkgLy8gNSBpcyBXUFMgbW9kZQorCQl7CisJCQlUaW1lSW50ZXJ2YWwgPSAxMDA7CisJCQlsdG1wMiA9IChwSHdEYXRhLT5MRURfY29udHJvbD4+OCkgJiAweGZmOworCQkJc3dpdGNoKCBsdG1wMiApCisJCQl7CisJCQkJY2FzZSAxOiAvLyBbMC4yIE9uXVswLjEgT2ZmXS4uLgorCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgJT0gMzsKKwkJCQkJbHRtcCA9IDB4MTAxMDsgLy8gTGVkIDEgJiAwIEdyZWVuIGFuZCBSZWQKKwkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyA9PSAyICkgLy8gVHVybiBvZmYKKwkJCQkJCWx0bXAgPSAwOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6IC8vIFswLjEgT25dWzAuMSBPZmZdLi4uCisJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyAlPSAyOworCQkJCQlsdG1wID0gMHgwMDEwOyAvLyBMZWQgMCByZWQgY29sb3IKKwkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyApIC8vIFR1cm4gb2ZmCisJCQkJCQlsdG1wID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOiAvLyBbMC4xIE9uXVswLjEgT2ZmXVswLjEgT25dWzAuMSBPZmZdWzAuMSBPbl1bMC4xIE9mZl1bMC4xIE9uXVswLjEgT2ZmXVswLjEgT25dWzAuMSBPZmZdWzAuNSBPZmZdLi4uCisJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyAlPSAxNTsKKwkJCQkJbHRtcCA9IDB4MDAxMDsgLy8gTGVkIDAgcmVkIGNvbG9yCisJCQkJCWlmKCAocEh3RGF0YS0+TEVEX0JsaW5raW5nID49IDkpIHx8IChwSHdEYXRhLT5MRURfQmxpbmtpbmclMikgKSAvLyBUdXJuIG9mZiAwLjYgc2VjCisJCQkJCQlsdG1wID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OiAvLyBbMzAwIE9uXVsgb2ZmIF0KKwkJCQkJbHRtcCA9IDB4MTAwMDsgLy8gTGVkIDEgR3JlZW4gY29sb3IKKwkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyA+PSAzMDAwICkKKwkJCQkJCWx0bXAgPSAwOyAvLyBsZWQgbWF5YmUgb24gYWZ0ZXIgMzAwc2VjICogMzJiaXQgY291bnRlciBvdmVybGFwLgorCQkJCQlicmVhazsKKwkJCX0KKwkJCXBId0RhdGEtPkxFRF9CbGlua2luZysrOworCisJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgPSBsdG1wOworCQkJaWYoIExFRFNldCAhPSA3ICkgLy8gT25seSAxMTEgbW9kZSBoYXMgMiBMRURzIG9uIFBDQi4KKwkJCXsKKwkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gKGx0bXAgJjB4ZmYpPDw4OyAvLyBDb3B5IExFRCByZXN1bHQgdG8gZWFjaCBMRUQgY29udHJvbCByZWdpc3RlcgorCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAobHRtcCAmMHhmZjAwKT4+ODsKKwkJCX0KKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisJCX0KKwl9CisJZWxzZSBpZiggcEh3RGF0YS0+Q3VycmVudFJhZGlvU3cgfHwgcEh3RGF0YS0+Q3VycmVudFJhZGlvSHcgKSAvLyBJZiByYWRpbyBvZmYKKwl7CisJCWlmKCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwMTAgKQorCQl7CisJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MTAxMDsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJc3dpdGNoKCBMRURTZXQgKQorCQl7CisJCQljYXNlIDQ6IC8vIFsxMDBdIE9ubHkgMSBMZWQgYmUgcGxhY2VkIG9uIFBDQiBhbmQgdXNlIHBpbiAyMSBvZiBJQy4gVXNlIExFRF8wIGZvciBzaG93aW5nCisJCQkJaWYoICFwSHdEYXRhLT5MRURfTGlua09uICkgLy8gQmxpbmsgb25seSBpZiBub3QgTGluayBPbgorCQkJCXsKKwkJCQkJLy8gQmxpbmtpbmcgaWYgc2Nhbm5pbmcgaXMgb24gcHJvZ3Jlc3MKKwkJCQkJaWYoIHBId0RhdGEtPkxFRF9TY2FubmluZyApCisJCQkJCXsKKwkJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPT0gMCApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT24KKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAxOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MTA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT2ZmCisJCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMDsKKwkJCQkJCQlUaW1lSW50ZXJ2YWwgPSAzMDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvL1R1cm4gT2ZmIExFRF8wCisJCQkJCQlpZiggcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMCApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIFR1cm4gT24gTEVEXzAKKwkJCQkJaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwKSA9PSAwICkKKwkJCQkJeworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSA2OiAvLyBbMTEwXSBPbmx5IDEgTGVkIGJlIHBsYWNlZCBvbiBQQ0IgYW5kIHVzZSBwaW4gMjEgb2YgSUMuIFVzZSBMRURfMCBmb3Igc2hvd2luZworCQkJCWlmKCAhcEh3RGF0YS0+TEVEX0xpbmtPbiApIC8vIEJsaW5rIG9ubHkgaWYgbm90IExpbmsgT24KKwkJCQl7CisJCQkJCS8vIEJsaW5raW5nIGlmIHNjYW5uaW5nIGlzIG9uIHByb2dyZXNzCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfU2Nhbm5pbmcgKQorCQkJCQl7CisJCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nID09IDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHhmOworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9uCisJCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMTsKKwkJCQkJCQlUaW1lSW50ZXJ2YWwgPSAzMDA7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDFmOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDA7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gMjAwNjA5MDEgR3JheSBibGlua2luZyBpZiBpbiBkaXNjb25uZWN0IHN0YXRlIGFuZCBub3Qgc2Nhbm5pbmcKKwkJCQkJCWx0bXAgPSBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmU7CisJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MWY7CisJCQkJCQlpZiggTEVEZ3JheTJbKHBId0RhdGEtPkxFRF9CbGlua2luZyUzMCldICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gTEVEZ3JheTJbIChwSHdEYXRhLT5MRURfQmxpbmtpbmclMzApIF07CisJCQkJCQl9CisJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcrKzsKKwkJCQkJCWlmKCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgIT0gbHRtcCApCisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT2ZmCisJCQkJCQlUaW1lSW50ZXJ2YWwgPSAxMDA7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gVHVybiBPbiBMRURfMAorCQkJCQlpZiggKHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTApID09IDAgKQorCQkJCQl7CisJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIDU6IC8vIFsxMDFdIE9ubHkgMSBMZWQgYmUgcGxhY2VkIG9uIFBDQiBhbmQgdXNlIExFRF8xIGZvciBzaG93aW5nCisJCQkJaWYoICFwSHdEYXRhLT5MRURfTGlua09uICkgLy8gQmxpbmsgb25seSBpZiBub3QgTGluayBPbgorCQkJCXsKKwkJCQkJLy8gQmxpbmtpbmcgaWYgc2Nhbm5pbmcgaXMgb24gcHJvZ3Jlc3MKKwkJCQkJaWYoIHBId0RhdGEtPkxFRF9TY2FubmluZyApCisJCQkJCXsKKwkJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPT0gMCApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTAwMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMSBPbgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDE7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDAwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8xIE9mZgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDA7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy9UdXJuIE9mZiBMRURfMQorCQkJCQkJaWYoIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTAwMCApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwMDA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzEgT2ZmCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gSXMgdHJhbnNtaXR0aW5nL3JlY2VpdmluZyA/PworCQkJCQlpZiggKE9TX0NVUlJFTlRfUlhfQllURSggQWRhcHRlciApICE9IHBId0RhdGEtPlJ4Qnl0ZUNvdW50TGFzdCApIHx8CisJCQkJCQkoT1NfQ1VSUkVOVF9UWF9CWVRFKCBBZGFwdGVyICkgIT0gcEh3RGF0YS0+VHhCeXRlQ291bnRMYXN0ICkgKQorCQkJCQl7CisJCQkJCQlpZiggKHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MzAwMCkgIT0gMHgzMDAwICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgzMDAwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8xIE9uCisJCQkJCQl9CisKKwkJCQkJCS8vIFVwZGF0ZSB2YXJpYWJsZQorCQkJCQkJcEh3RGF0YS0+UnhCeXRlQ291bnRMYXN0ID0gT1NfQ1VSUkVOVF9SWF9CWVRFKCBBZGFwdGVyICk7CisJCQkJCQlwSHdEYXRhLT5UeEJ5dGVDb3VudExhc3QgPSBPU19DVVJSRU5UX1RYX0JZVEUoIEFkYXB0ZXIgKTsKKwkJCQkJCVRpbWVJbnRlcnZhbCA9IDIwMDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vIFR1cm4gT24gTEVEXzEgYW5kIGJsaW5raW5nIGlmIHRyYW5zbWl0dGluZy9yZWNlaXZpbmcKKwkJCQkJCSBpZiggKHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MzAwMCkgIT0gMHgxMDAwICkKKwkJCQkJCSB7CisJCQkJCQkJIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgzMDAwOworCQkJCQkJCSBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDAwOworCQkJCQkJCSBXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMSBPbgorCQkJCQkJIH0KKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDogLy8gRGVmYXVsdCBzZXR0aW5nLiAyIExFRCBiZSBwbGFjZWQgb24gUENCLiBMRURfMDogTGluayBPbiBMRURfMSBBY3RpdmUKKwkJCQlpZiggKHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MzAwMCkgIT0gMHgzMDAwICkKKwkJCQl7CisJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDMwMDA7Ly8gTEVEXzEgaXMgYWx3YXlzIG9uIGFuZCBldmVudCBlbmFibGUKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKwkJCQl9CisKKwkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nICkKKwkJCQl7CisJCQkJCS8vIEdyYXkgYmxpbmtpbmcKKwkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDBmOworCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IExFRGdyYXlbIChwSHdEYXRhLT5MRURfQmxpbmtpbmctMSklMjAgXTsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKworCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgKz0gMjsKKwkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyA8IDQwICkKKwkJCQkJCVRpbWVJbnRlcnZhbCA9IDEwMDsKKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOyAvLyBTdG9wIGJsaW5raW5nCisJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MGY7CisJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmKCBwSHdEYXRhLT5MRURfTGlua09uICkKKwkJCQl7CisJCQkJCWlmKCAhKHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTApICkgLy8gQ2hlY2sgdGhlIExFRF8wCisJCQkJCXsKKwkJCQkJCS8vVHJ5IHRvIHR1cm4gT04gTEVEXzAgYWZ0ZXIgZ3JheSBibGlua2luZworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAxOyAvL1N0YXJ0IGJsaW5raW5nCisJCQkJCQlUaW1lSW50ZXJ2YWwgPSA1MDsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiggcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMCApIC8vIENoZWNrIHRoZSBMRURfMAorCQkJCQl7CisJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MTA7CisJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQl9CisKKwkJLy8yMDA2MDgyOC4xIEFjdGl2ZSBzZW5kIG51bGwgcGFja2V0IHRvIGF2b2lkIEFQIGRpc2Nvbm5lY3QKKwkJaWYoIHBId0RhdGEtPkxFRF9MaW5rT24gKQorCQl7CisJCQlwSHdEYXRhLT5OdWxsUGFja2V0Q291bnQgKz0gVGltZUludGVydmFsOworCQkJaWYoIHBId0RhdGEtPk51bGxQYWNrZXRDb3VudCA+PSBERUZBVUxUX05VTExfUEFDS0VUX0NPVU5UICkKKwkJCXsKKwkJCQlwSHdEYXRhLT5OdWxsUGFja2V0Q291bnQgPSAwOworCQkJfQorCQl9CisJfQorCisJcEh3RGF0YS0+dGltZV9jb3VudCArPSBUaW1lSW50ZXJ2YWw7CisJV2IzNVR4X0N1cnJlbnRUaW1lKCBwSHdEYXRhLCBwSHdEYXRhLT50aW1lX2NvdW50ICk7IC8vIDIwMDYwOTI4IGFkZAorCU9TX1RJTUVSX1NFVCggJnBId0RhdGEtPkxFRFRpbWVyLCBUaW1lSW50ZXJ2YWwgKTsgLy8gMjAwNjA2MjMuMQorfQorCisKK3ZvaWQgaGFsX3NldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBoeVR5cGUgKQoreworCXBId0RhdGEtPnBoeV90eXBlID0gUGh5VHlwZTsKK30KKwordm9pZCBoYWxfZ2V0X3BoeV90eXBlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKlBoeVR5cGUgKQoreworCSpQaHlUeXBlID0gcEh3RGF0YS0+cGh5X3R5cGU7Cit9CisKK3ZvaWQgaGFsX3Jlc2V0X2NvdW50ZXIoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCXBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCA9IDA7CisJcEh3RGF0YS0+ZHRvX3R4X2ZyYWdfY291bnQgPSAwOworCW1lbXNldCggcEh3RGF0YS0+dHhfcmV0cnlfY291bnQsIDAsIDgpOworfQorCit2b2lkIGhhbF9zZXRfcmFkaW9fbW9kZSggcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciByYWRpb19vZmYpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCWlmIChyYWRpb19vZmYpCS8vZGlzYWJsZSBCYXNlYmFuZCByZWNlaXZlIG9mZgorCXsKKwkJcEh3RGF0YS0+Q3VycmVudFJhZGlvU3cgPSAxOyAvLyBvZmYKKwkJcFdiMzVSZWctPk0yNF9NYWNDb250cm9sICY9IDB4ZmZmZmZmYmY7CisJfQorCWVsc2UKKwl7CisJCXBId0RhdGEtPkN1cnJlbnRSYWRpb1N3ID0gMDsgLy8gb24KKwkJcFdiMzVSZWctPk0yNF9NYWNDb250cm9sIHw9IDB4MDAwMDAwNDA7CisJfQorCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgyNCwgcFdiMzVSZWctPk0yNF9NYWNDb250cm9sICk7Cit9CisKK3U4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiAoKHBXYjM1UmVnLT5CQjJDICYgQklUKDExKSkgPT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKwordm9pZCBoYWxfc2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBudW1iZXIgKQoreworCisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmIChudW1iZXIgPT0gMSkgeworCQlwV2IzNVJlZy0+QkIyQyB8PSBCSVQoMTEpOworCX0gZWxzZSB7CisJCXBXYjM1UmVnLT5CQjJDICY9IH5CSVQoMTEpOworCX0KKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMmMsIHBXYjM1UmVnLT5CQjJDICk7CisjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJV0JERUJVRygoIkN1cnJlbnQgYW50ZW5uYSBudW1iZXIgOiAlZFxuIiwgbnVtYmVyKSk7CisjZW5kaWYKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLzAgOiByYWRpbyBvbjsgMTogcmFkaW8gb2ZmCit1OCBoYWxfZ2V0X2h3X3JhZGlvX29mZiggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybiAxOworCisJLy9yZWFkIHRoZSBiaXQxNiBvZiByZWdpc3RlciBVMUIwCisJV2IzNVJlZ19SZWFkKCBwSHdEYXRhLCAweDNiMCwgJnBXYjM1UmVnLT5VMUIwICk7CisJaWYgKChwV2IzNVJlZy0+VTFCMCAmIDB4MDAwMTAwMDApKSB7CisJCXBId0RhdGEtPkN1cnJlbnRSYWRpb0h3ID0gMTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcEh3RGF0YS0+Q3VycmVudFJhZGlvSHcgPSAwOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3Vuc2lnbmVkIGNoYXIgaGFsX2dldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiAqIHBWYWx1ZSApCit7CisJaWYoIG51bWJlciA8IDB4MTAwMCApCisJCW51bWJlciArPSAweDEwMDA7CisJcmV0dXJuIFdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIG51bWJlciwgcFZhbHVlICk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiB2YWx1ZSApCit7CisJdW5zaWduZWQgY2hhcglyZXQ7CisKKwlpZiggbnVtYmVyIDwgMHgxMDAwICkKKwkJbnVtYmVyICs9IDB4MTAwMDsKKwlyZXQgPSBXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgbnVtYmVyLCB2YWx1ZSApOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaGFsX3NjYW5fc3RhdHVzX2luZGljYXRlKHBod19kYXRhX3QgcEh3RGF0YSwgdW5zaWduZWQgY2hhciBJc09uUHJvZ3Jlc3MpCit7CisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCXBId0RhdGEtPkxFRF9TY2FubmluZyA9IElzT25Qcm9ncmVzcyA/IDEgOiAwOworfQorCit2b2lkIGhhbF9zeXN0ZW1fcG93ZXJfY2hhbmdlKHBod19kYXRhX3QgcEh3RGF0YSwgdTMyIFBvd2VyU3RhdGUpCit7CisJaWYoIFBvd2VyU3RhdGUgIT0gMCApCisJeworCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7CisJCWlmKCBwSHdEYXRhLT5XYlVzYi5Jc1VzYjIwICkKKwkJCWhhbF9zdG9wKCBwSHdEYXRhICk7CisJfQorCWVsc2UKKwl7CisJCWlmKCAhcEh3RGF0YS0+V2JVc2IuSXNVc2IyMCApCisJCQloYWxfc3RvcCggcEh3RGF0YSApOworCX0KK30KKwordm9pZCBoYWxfc3VycHJpc2VfcmVtb3ZlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQQURBUFRFUiBBZGFwdGVyID0gcEh3RGF0YS0+QWRhcHRlcjsKKwlpZiAoT1NfQVRPTUlDX0lOQyggQWRhcHRlciwgJnBId0RhdGEtPlN1cnByaXNlUmVtb3ZlQ291bnQgKSA9PSAxKSB7CisJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJV0JERUJVRygoIkNhbGxpbmcgaGFsX3N1cnByaXNlX3JlbW92ZVxuIikpOworCQkjZW5kaWYKKwkJT1NfU1RPUCggQWRhcHRlciApOworCX0KK30KKwordm9pZCBoYWxfcmF0ZV9jaGFuZ2UoICBwaHdfZGF0YV90IHBId0RhdGEgKSAvLyBOb3RpZnkgdGhlIEhBTCByYXRlIGlzIGNoYW5naW5nIDIwMDYwNjEzLjEKK3sKKwlQQURBUFRFUglBZGFwdGVyID0gcEh3RGF0YS0+QWRhcHRlcjsKKwl1OAkJcmF0ZSA9IENVUlJFTlRfVFhfUkFURTsKKworCUJCUHJvY2Vzc29yX1JhdGVDaGFuZ2luZyggcEh3RGF0YSwgcmF0ZSApOworfQorCit2b2lkIGhhbF9zZXRfcmZfcG93ZXIocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBQb3dlckluZGV4KQoreworCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgUG93ZXJJbmRleCApOworfQorCit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfTEVEKHBod19kYXRhX3QgcEh3RGF0YSwgdTMyIE1vZGUpIC8vIDIwMDYxMTA4IGZvciBXUFMgbGVkIGNvbnRyb2wKK3sKKwlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOworCXBId0RhdGEtPkxFRF9jb250cm9sID0gTW9kZTsKKwlPU19USU1FUl9TRVQoICZwSHdEYXRhLT5MRURUaW1lciwgMTAgKTsgLy8gMjAwNjA2MjMKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTUzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBEZXZpY2UgcmVsYXRlZCBpbmNsdWRlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmZGVmIFdCX0xJTlVYCisJI2luY2x1ZGUgImxpbnV4L3didXNiX2YuaCIKKwkjaW5jbHVkZSAibGludXgvd2IzNXJlZ19mLmgiCisJI2luY2x1ZGUgImxpbnV4L3diMzV0eF9mLmgiCisJI2luY2x1ZGUgImxpbnV4L3diMzVyeF9mLmgiCisjZWxzZQorCSNpbmNsdWRlICJ3YnVzYl9mLmgiCisJI2luY2x1ZGUgIndiMzVyZWdfZi5oIgorCSNpbmNsdWRlICJ3YjM1dHhfZi5oIgorCSNpbmNsdWRlICJ3YjM1cnhfZi5oIgorI2VuZGlmCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgaGFsX3JlbW92ZV9tYXBwaW5nX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpwbWFjX2FkZHIgKTsKK3ZvaWQgaGFsX3JlbW92ZV9kZWZhdWx0X2tleSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBpbmRleCApOwordW5zaWduZWQgY2hhciBoYWxfc2V0X21hcHBpbmdfa2V5KCAgcGh3X2RhdGFfdCBBZGFwdGVyLCAgdTggKnBtYWNfYWRkciwgIHU4IG51bGxfa2V5LCAgdTggd2VwX29uLCAgdTggKnB0eF90c2MsICB1OCAqcHJ4X3RzYywgIHU4IGtleV90eXBlLCAgdTgga2V5X2xlbiwgIHU4ICpwa2V5X2RhdGEgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9kZWZhdWx0X2tleSggIHBod19kYXRhX3QgQWRhcHRlciwgIHU4IGluZGV4LCAgdTggbnVsbF9rZXksICB1OCB3ZXBfb24sICB1OCAqcHR4X3RzYywgIHU4ICpwcnhfdHNjLCAgdTgga2V5X3R5cGUsICB1OCBrZXlfbGVuLCAgdTggKnBrZXlfZGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfZ3JvdXBfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfbWFwcGluZ19rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2dldF9ldGhlcm5ldF9hZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKmN1cnJlbnRfYWRkcmVzcyApOwordm9pZCBoYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqY3VycmVudF9hZGRyZXNzICk7Cit2b2lkIGhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcGV0aGVybmV0X2FkZHJlc3MgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX2luaXRfaGFyZHdhcmUoICBwaHdfZGF0YV90IHBId0RhdGEsICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIGhhbF9zZXRfcG93ZXJfc2F2ZV9tb2RlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBwb3dlcl9zYXZlLCAgdW5zaWduZWQgY2hhciB3YWtldXAsICB1bnNpZ25lZCBjaGFyIGR0aW0gKTsKK3ZvaWQgaGFsX2dldF9wb3dlcl9zYXZlX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICAgdTggKnBpbl9wd3Jfc2F2ZSApOwordm9pZCBoYWxfc2V0X3Nsb3RfdGltZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IHR5cGUgKTsKKyNkZWZpbmUgaGFsX3NldF9hdGltX3dpbmRvdyggX0EsIF9BVE0gKQordm9pZCBoYWxfc2V0X3JhdGVzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKnBic3NfcmF0ZXMsICB1OCBsZW5ndGgsICB1bnNpZ25lZCBjaGFyIGJhc2ljX3JhdGVfc2V0ICk7CisjZGVmaW5lIGhhbF9zZXRfYmFzaWNfcmF0ZXMoIF9BLCBfUiwgX0wgKSBoYWxfc2V0X3JhdGVzKCBfQSwgX1IsIF9MLCBUUlVFICkKKyNkZWZpbmUgaGFsX3NldF9vcF9yYXRlcyggX0EsIF9SLCBfTCApIGhhbF9zZXRfcmF0ZXMoIF9BLCBfUiwgX0wsIEZBTFNFICkKK3ZvaWQgaGFsX3N0YXJ0X2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IG1hY19vcF9tb2RlICk7Cit2b2lkIGhhbF9qb2luX3JlcXVlc3QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBic3NfdHlwZSApOyAvLyAwOkJTUyBTVEEgMTpJQlNTIFNUQS8vCit2b2lkIGhhbF9zdG9wX3N5bmNfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9yZXN1bWVfc3luY19ic3MoICBwaHdfZGF0YV90IHBId0RhdGEpOwordm9pZCBoYWxfc2V0X2FpZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBhaWQgKTsKK3ZvaWQgaGFsX3NldF9ic3NpZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpwYnNzaWQgKTsKK3ZvaWQgaGFsX2dldF9ic3NpZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpwYnNzaWQgKTsKK3ZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGJlYWNvbl9wZXJpb2QgKTsKK3ZvaWQgaGFsX3NldF9saXN0ZW5faW50ZXJ2YWwoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgbGlzdGVuX2ludGVydmFsICk7Cit2b2lkIGhhbF9zZXRfY2FwX2luZm8oICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgY2FwYWJpbGl0eV9pbmZvICk7Cit2b2lkIGhhbF9zZXRfc3NpZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpwc3NpZCwgIHU4IHNzaWRfbGVuICk7Cit2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApOwordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKTsKK3ZvaWQgaGFsX2dldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyAqY2hhbm5lbCApOwordm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKTsKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X2JlYWNvbiggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApOwordm9pZCBoYWxfc2V0X211bHRpY2FzdF9hZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKmFkZHJlc3MsICB1OCBudW1iZXIgKTsKK3U4IGhhbF9nZXRfYWNjZXB0X2JlYWNvbiggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfc3RvcCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfaGFsdCggIHBod19kYXRhX3QgcEh3RGF0YSwgdm9pZCAqcHBhX2RhdGEgKTsKK3ZvaWQgaGFsX3N0YXJ0X3R4MCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfc2V0X3BoeV90eXBlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUGh5VHlwZSApOwordm9pZCBoYWxfZ2V0X3BoeV90eXBlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKlBoeVR5cGUgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX3Jlc2V0X2hhcmR3YXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdm9pZCogcHBhICk7Cit2b2lkIGhhbF9zZXRfY3dtaW4oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OAljd2luX21pbiApOworI2RlZmluZSBoYWxfZ2V0X2N3bWluKCBfQSApICggKF9BKS0+Y3dtaW4gKQordm9pZCBoYWxfc2V0X2N3bWF4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGN3aW5fbWF4ICk7CisjZGVmaW5lIGhhbF9nZXRfY3dtYXgoIF9BICkgKCAoX0EpLT5jd21heCApCit2b2lkIGhhbF9zZXRfcnNuX3dwYSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiAqIFJTTl9JRV9CaXRtYXAgLCB1MzIgKiBSU05fT1VJX3R5cGUgLCB1bnNpZ25lZCBjaGFyIGJEZXNpcmVkQXV0aE1vZGUpOworLy9zMzIgaGFsX2dldF9yc3NpKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIEhhbFJzc2kgKTsKK3MzMiBoYWxfZ2V0X3Jzc2koICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgKkhhbFJzc2lBcnJ5LCAgdTggQ291bnQgKTsKK3MzMiBoYWxfZ2V0X3Jzc2lfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGlkeCwgIHU4IENvdW50ICk7Cit2b2lkIGhhbF9zZXRfY29ubmVjdF9pbmZvKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib0Nvbm5lY3QgKTsKK3U4IGhhbF9nZXRfZXN0X3NxMyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IENvdW50ICk7Cit2b2lkIGhhbF9sZWRfY29udHJvbF8xYSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfbGVkX2NvbnRyb2woICB2b2lkKiBTMSwgIHBod19kYXRhX3QgcEh3RGF0YSwgIHZvaWQqIFMzLCAgdm9pZCogUzQgKTsKK3ZvaWQgaGFsX3NldF9yZl9wb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKTsgLy8gMjAwNjA2MjEgTW9kaWZ5Cit2b2lkIGhhbF9yZXNldF9jb3VudGVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9zZXRfcmFkaW9fbW9kZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgYm9WYWx1ZSk7Cit2b2lkIGhhbF9kZXNjcmlwdG9yX2luZGljYXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgUERFU0NSSVBUT1IgcERlcyApOwordTggaGFsX2dldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfc2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBudW1iZXIgKTsKK3UzMiBoYWxfZ2V0X2Jzc19wa19jbnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKyNkZWZpbmUgaGFsX2dldF9yZWdpb25fZnJvbV9FRVBST00oIF9BICkgKCAoX0EpLT5XYjM1UmVnLkVFUFJPTVJlZ2lvbiApCit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzCQkoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUpOworI2RlZmluZSBoYWxfZ2V0X3R4X2J1ZmZlciggX0EsIF9CICkgV2IzNVR4X2dldF90eF9idWZmZXIoIF9BLCBfQiApCit1OCBoYWxfZ2V0X2h3X3JhZGlvX29mZgkJCSggIHBod19kYXRhX3QgcEh3RGF0YSApOworI2RlZmluZSBoYWxfc29mdHdhcmVfc2V0KCBfQSApCQkoX0EtPlNvZnR3YXJlU2V0KQorI2RlZmluZSBoYWxfZHJpdmVyX2luaXRfT0soIF9BICkJKF9BLT5Jc0luaXRPSykKKyNkZWZpbmUgaGFsX3Jzc2lfYm91bmRhcnlfaGlnaCggX0EgKSAoX0EtPlJTU0lfaGlnaCkKKyNkZWZpbmUgaGFsX3Jzc2lfYm91bmRhcnlfbG93KCBfQSApIChfQS0+UlNTSV9sb3cpCisjZGVmaW5lIGhhbF9zY2FuX2ludGVydmFsKCBfQSApCQkoX0EtPlNjYW5fSW50ZXJ2YWwpCit2b2lkIGhhbF9zY2FuX3N0YXR1c19pbmRpY2F0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggc3RhdHVzKTsJLy8gMDogY29tcGxldGUsIDE6IGluIHByb2dyZXNzCit2b2lkIGhhbF9zeXN0ZW1fcG93ZXJfY2hhbmdlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgUG93ZXJTdGF0ZSApOyAvLyAyMDA1MTIzMCAtPUQwIDE9RDEgLi4KK3ZvaWQgaGFsX3N1cnByaXNlX3JlbW92ZSggIHBod19kYXRhX3QgcEh3RGF0YSApOworCisjZGVmaW5lIFBIWV9ERUJVRyggbXNnLCBhcmdzLi4uICkKKworCisKK3ZvaWQgaGFsX3JhdGVfY2hhbmdlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7IC8vIE5vdGlmeSB0aGUgSEFMIHJhdGUgaXMgY2hhbmdpbmcgMjAwNjA2MTMuMQordW5zaWduZWQgY2hhciBoYWxfZ2V0X2R4eF9yZWcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyICogcFZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgdmFsdWUgKTsKKyNkZWZpbmUgaGFsX2dldF90aW1lX2NvdW50KCBfUCApCShfUC0+dGltZV9jb3VudC8xMCkJLy8gcmV0dXJuIDEwMG1zIGNvdW50CisjZGVmaW5lIGhhbF9kZXRlY3RfZXJyb3IoIF9QICkJCShfUC0+V2JVc2IuRGV0ZWN0Q291bnQpCit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfTEVEKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIE1vZGUgKTsgLy8gMjAwNjExMDggZm9yIFdQUyBsZWQgY29udHJvbAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBmb2xsb3cgZnVuY3Rpb24gaXMgdW51c2VkIGZvciBJUzg5QzM1CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgaGFsX2Rpc2FibGVfaW50ZXJydXB0KF9BKQorI2RlZmluZSBoYWxfZW5hYmxlX2ludGVycnVwdChfQSkKKyNkZWZpbmUgaGFsX2dldF9pbnRlcnJ1cHRfdHlwZSggX0EpCisjZGVmaW5lIGhhbF9nZXRfY2xlYXJfaW50ZXJydXB0KF9BKQorI2RlZmluZSBoYWxfaWJzc19kaXNjb25uZWN0KF9BKSBoYWxfc3RvcF9zeW5jX2JzcyhfQSkKKyNkZWZpbmUgaGFsX2pvaW5fcmVxdWVzdF9zdG9wKF9BKQordW5zaWduZWQgY2hhcgloYWxfaWRsZSggIHBod19kYXRhX3QgcEh3RGF0YSApOworI2RlZmluZSBwYV9zdGFsbF9leGVjdXRpb24oIF9BICkJLy9PU19TTEVFUCggMSApCisjZGVmaW5lIGh3X2dldF9jeHhfcmVnKCBfQSwgX0IsIF9DICkKKyNkZWZpbmUgaHdfc2V0X2N4eF9yZWcoIF9BLCBfQiwgX0MgKQorI2RlZmluZSBod19nZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApCWhhbF9nZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyICopX0MgKQorI2RlZmluZSBod19zZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApCWhhbF9zZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyKV9DICkKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlM2YwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX3MuaApAQCAtMCwwICsxLDYxNSBAQAorLy9bMjAwNDA3MjIgV0tdCisjZGVmaW5lIEhBTF9MRURfU0VUX01BU0sJCTB4MDAxYwkvLzIwMDYwOTAxIEV4dGVuZAorI2RlZmluZSBIQUxfTEVEX1NFVF9TSElGVAkJMgorCisvL3N1cHBvcnRlZCBSRiB0eXBlCisjZGVmaW5lIFJGX01BWElNXzI4MjUJCTAKKyNkZWZpbmUgUkZfTUFYSU1fMjgyNwkJMQorI2RlZmluZSBSRl9NQVhJTV8yODI4CQkyCisjZGVmaW5lIFJGX01BWElNXzI4MjkJCTMKKyNkZWZpbmUgUkZfTUFYSU1fVjEJCQkxNQorI2RlZmluZSBSRl9BSVJPSEFfMjIzMAkJMTYKKyNkZWZpbmUgUkZfQUlST0hBXzcyMzAJCTE3CisjZGVmaW5lIFJGX0FJUk9IQV8yMjMwUwkJMTgJLy8gMjAwNjA0MjAgQWRkIHRoaXMKKy8vICNkZWZpbmUgUkZfUkZNRF8yOTU5CQkzMgkvLyAyMDA2MDYyNiBSZW1vdmUgYWxsIGFib3V0IFJGTUQKKyNkZWZpbmUgUkZfV0JfMjQyCQkJMzMKKyNkZWZpbmUgUkZfV0JfMjQyXzEJCQkzNAkvLyAyMDA2MDYxOS41IEFkZAorI2RlZmluZSBSRl9ERUNJREVfQllfSU5GCTI1NQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBmb2xsb3cgZGVmaW5lIGNvbm5lY3QgdG8gdXBwZXIgbGF5ZXIKKy8vCVVzZXIgbXVzdCBtb2RpZnkgZm9yIGNvbm5lY3Rpb24gYmV0d2VlbiBIQUwgYW5kIHVwcGVyIGxheWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb21tb24gZGVmaW5lCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBIQUxfVVNCX01PREVfQlVSU1QoIF9IICkJKF9ILT5Tb2Z0d2FyZVNldCAmIDB4MjAgKSAvLyBCaXQgNSAyMDA2MDkwMSBNb2RpZnkKKworLy8gU2NhbiBpbnRlcnZhbAorI2RlZmluZSBTQ0FOX01BWF9DSE5MX1RJTUUJCQkJKDUwKQorCisvLyBGb3IgVHhMMiBGcmFtZSB0eXByIHJlY29nbmlzZQorI2RlZmluZSBGUkFNRV9UWVBFXzgwMl8zX0RBVEEJCQkwCisjZGVmaW5lIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlQJCTEKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVF9DSEFMTEVOR0UgIDIKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfMTFfQ09OVFJPTAkJMworI2RlZmluZSBGUkFNRV9UWVBFXzgwMl8xMV9EQVRBCQkJNAorI2RlZmluZSBGUkFNRV9UWVBFX1BST01JU0NVT1VTCQkJNQorCisvLyBUaGUgZm9sbG93IGRlZmluaXRpb24gaXMgdXNlZCBmb3IgY29udmVydCB0aGUgZnJhbWUtLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBET1RfMTFfU0VRVUVOQ0VfT0ZGU0VUCQkyMiAvL1NlcXVlbmNlIGNvbnRyb2wgb2Zmc2V0CisjZGVmaW5lIERPVF8zX1RZUEVfT0ZGU0VUCQkJMTIKKyNkZWZpbmUgRE9UXzExX01BQ19IRUFERVJfU0laRQkJMjQKKyNkZWZpbmUgRE9UXzExX1NOQVBfU0laRQkJCTYKKyNkZWZpbmUgRE9UXzExX1RZUEVfT0ZGU0VUCQkJMzAgLy9UaGUgc3RhcnQgb2Zmc2V0IG9mIDgwMi4xMSBGcmFtZS4gVHlwZSBlbmNhcHN1bGF0dWluLgorI2RlZmluZSBERUZBVUxUX1NJRlNUSU1FCQkJMTAKKyNkZWZpbmUgREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQJCTIzNDYgLy8gTm8gZnJhZ21lbnQKKyNkZWZpbmUgREVGQVVMVF9NU0RVX0xJRkVfVElNRQkJCTB4ZmZmZgorCisjZGVmaW5lIExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUJCQkJCQkoMTQ0KzQ4KQorI2RlZmluZSBTSE9SVF9QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRSAJCQkJCSg3MisyNCkKKyNkZWZpbmUgUFJFQU1CTEVfUExVU19TSUdOQUxfUExVU19TSUdOQUxFWFRFTlNJT04JCQkJKDE2KzQrNikKKyNkZWZpbmUgVHN5bSA0CisKKy8vICBGcmFtZSBUeXBlIG9mIEJpdHMgKDIsIDMpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIE1BQ19UWVBFX01BTkFHRU1FTlQJCQkweDAwCisjZGVmaW5lIE1BQ19UWVBFX0NPTlRST0wJCQkweDA0CisjZGVmaW5lIE1BQ19UWVBFX0RBVEEJCQkJMHgwOAorI2RlZmluZSBNQVNLX0ZSQUdNRU5UX05VTUJFUgkJMHgwMDBGCisjZGVmaW5lIFNFUVVFTkNFX05VTUJFUl9TSElGVAkJNAorCisjZGVmaW5lICBIQUxfV09MX1RZUEVfV0FLRVVQX0ZSQU1FCQkweDAxCisjZGVmaW5lICBIQUxfV09MX1RZUEVfTUFHSUNfUEFDS0VUCQkweDAyCisKKy8vIDIwMDQwMTA2IEFEREVECisjZGVmaW5lIEhBTF9LRVlUWVBFX1dFUDQwICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEhBTF9LRVlUWVBFX1dFUDEwNCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEhBTF9LRVlUWVBFX1RLSVAgICAgICAgICAgICAgICAgICAgICAgICAyIC8vIDEyOCBiaXQga2V5CisjZGVmaW5lIEhBTF9LRVlUWVBFX0FFU19DQ01QICAgICAgICAgICAgICAgICAgICAzIC8vIDEyOCBiaXQga2V5CisKKy8vIEZvciBWTSBzdGF0ZQorZW51bSB7CisJVk1fU1RPUCA9IDAsCisJVk1fUlVOTklORywKKwlWTV9DT01QTEVURUQKK307CisKKy8vIEJlIHVzZWQgZm9yIDgwMi4xMSBtYWMgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfTUFDX0ZSQU1FX0NPTlRST0wgeworCXU4CW1hY19mcmFtZV9pbmZvOyAvLyB0aGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHByb3RvdmwgdmVyc2lvbiwgdHlwZSBhbmQgc3VidHlwZQorCXU4CXRvX2RzOjE7CisJdTgJZnJvbV9kczoxOworCXU4CW1vcmVfZnJhZzoxOworCXU4CXJldHJ5OjE7CisJdTgJcHdyX21ndDoxOworCXU4CW1vcmVfZGF0YToxOworCXU4CVdFUDoxOworCXU4CW9yZGVyOjE7Cit9IE1BQ19GUkFNRV9DT05UUk9MLCAqUE1BQ19GUkFNRV9DT05UUk9MOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOb3JtYWwgS2V5IHRhYmxlIGZvcm1hdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIG9yZGVyIG9mIEtFWSBpbmRleCBpcyBNQVBQSU5HX0tFWV9TVEFSVF9JTkRFWCA+IEdST1VQX0tFWV9TVEFSVF9JTkRFWAorI2RlZmluZSBNQVhfS0VZX1RBQkxFCQkJCTI0CS8vIDI0IGVudHJ5IGZvciBzdG9yaW5nIGtleSBkYXRhCisjZGVmaW5lIEdST1VQX0tFWV9TVEFSVF9JTkRFWAkJNAorI2RlZmluZSBNQVBQSU5HX0tFWV9TVEFSVF9JTkRFWAkJOAordHlwZWRlZiBzdHJ1Y3QgX0tFWV9UQUJMRQoreworCXUzMglEVzBfVmFsaWQ6MTsKKwl1MzIJRFcwX051bGxLZXk6MTsKKwl1MzIJRFcwX1NlY3VyaXR5X01vZGU6MjsvLzA6V0VQIDQwIGJpdCAxOldFUCAxMDQgYml0IDI6VEtJUCAxMjggYml0IDM6Q0NNUCAxMjggYml0CisJdTMyCURXMF9XRVBPTjoxOworCXUzMglEVzBfUkVTRVJWRUQ6MTE7CisJdTMyCURXMF9BZGRyZXNzMToxNjsKKworCXUzMglEVzFfQWRkcmVzczI7CisKKwl1MzIJRFcyX1J4U2VxdWVuY2VDb3VudDE7CisKKwl1MzIJRFczX1J4U2VxdWVuY2VDb3VudDI6MTY7CisJdTMyCURXM19SRVNFUlZFRDoxNjsKKworCXUzMglEVzRfVHhTZXF1ZW5jZUNvdW50MTsKKworCXUzMglEVzVfVHhTZXF1ZW5jZUNvdW50MjoxNjsKKwl1MzIJRFc1X1JFU0VSVkVEOjE2OworCit9IEtFWV9UQUJMRSwgKlBLRVlfVEFCTEU7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIAkJCSBEZXNjcmlwdG9yCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWAk4CS8vIEhhdmUgdG8gbXVsdGlwbGUgb2YgMgorLy8jZGVmaW5lIEZMQUdfRVJST1JfVFhfTUFTSwkJCWNwdV90b19sZTMyKDB4MDAwMDAwYmYpIC8vMjAwNjEwMDkgbWFya2VkIGJ5IGFuc29uJ3MgZW5kaWFuCisjZGVmaW5lIEZMQUdfRVJST1JfVFhfTUFTSwkJCTB4MDAwMDAwYmYgIC8vMjAwNjEwMDkgYW5zb24ncyBlbmRpYW4KKy8vI2RlZmluZSBGTEFHX0VSUk9SX1JYX01BU0sJCQkweDAwMDAwYzNmCisvLyNkZWZpbmUgRkxBR19FUlJPUl9SWF9NQVNLCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDgzZikJLy8yMDA2MTAwOSBtYXJrZWQgYnkgYW5zb24ncyBlbmRpYW4KKwkJCQkJCQkJCS8vRG9uJ3QgY2FyZSByZXBsYXkgZXJyb3IsCisJCQkJCQkJCQkJCQkvL2l0IGlzIGhhbmRsZWQgYnkgUy9XCisjZGVmaW5lIEZMQUdfRVJST1JfUlhfTUFTSwkJCTB4MDAwMDA4M2YJLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCisjZGVmaW5lIEZMQUdfQkFORF9SWF9NQVNLCQkJMHgxMDAwMDAwMAkvL0JpdCAyOAorCit0eXBlZGVmIHN0cnVjdCBfUjAwX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJUjAwX3BhY2tldF9vcl9idWZmZXJfc3RhdHVzOjE7CisJCQl1MzIJUjAwX3BhY2tldF9pbl9maWZvOjE7CisJCQl1MzIJUjAwX1JFU0VSVkVEOjI7CisJCQl1MzIJUjAwX3JlY2VpdmVfYnl0ZV9jb3VudDoxMjsKKwkJCXUzMglSMDBfcmVjZWl2ZV90aW1lX2luZGV4OjE2OworCQl9OworCQkjZWxzZQorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVIwMF9yZWNlaXZlX3RpbWVfaW5kZXg6MTY7CisJCQl1MzIJUjAwX3JlY2VpdmVfYnl0ZV9jb3VudDoxMjsKKwkJCXUzMglSMDBfUkVTRVJWRUQ6MjsKKwkJCXUzMglSMDBfcGFja2V0X2luX2ZpZm86MTsKKwkJCXUzMglSMDBfcGFja2V0X29yX2J1ZmZlcl9zdGF0dXM6MTsKKwkJfTsKKwkJI2VuZGlmCisJfTsKK30gUjAwX0RFU0NSSVBUT1IsICpQUjAwX0RFU0NSSVBUT1I7CisKK3R5cGVkZWYgc3RydWN0IF9UMDBfREVTQ1JJUFRPUgoreworCXVuaW9uCisJeworCQl1MzIJdmFsdWU7CisJCSNpZmRlZiBfQklHX0VORElBTl8gIC8vMjAwNjEwMDkgYW5zb24ncyBlbmRpYW4KKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDBfZmlyc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCQl1MzIJVDAwX2xhc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCQl1MzIJVDAwX0lzTGFzdE1wZHU6MTsvLyAwOiBub3QgICAxOlllcyBmb3Igc29mdHdhcmUgdXNlZAorCQkJdTMyCVQwMF9JZ25vcmVSZXN1bHQ6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZy4gMDUwMTExIE1vZGlmeSBmb3IgVFMKKwkJCXUzMglUMDBfUkVTRVJWRURfSUQ6MjsvLzMgYml0IElEIHJlc2VydmVkCisJCQl1MzIJVDAwX3R4X3BhY2tldF9pZDo0Oy8vOTMwNTE5LjQuZSA5MzA4MTAuMy5jCisJCQl1MzIJVDAwX1JFU0VSVkVEOjQ7CisJCQl1MzIJVDAwX2hlYWRlcl9sZW5ndGg6NjsKKwkJCXUzMglUMDBfZnJhbWVfbGVuZ3RoOjEyOworCQl9OworCQkjZWxzZQorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMF9mcmFtZV9sZW5ndGg6MTI7CisJCQl1MzIJVDAwX2hlYWRlcl9sZW5ndGg6NjsKKwkJCXUzMglUMDBfUkVTRVJWRUQ6NDsKKwkJCXUzMglUMDBfdHhfcGFja2V0X2lkOjQ7Ly85MzA1MTkuNC5lIDkzMDgxMC4zLmMKKwkJCXUzMglUMDBfUkVTRVJWRURfSUQ6MjsvLzMgYml0IElEIHJlc2VydmVkCisJCQl1MzIJVDAwX0lnbm9yZVJlc3VsdDoxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nLiAwNTAxMTEgTW9kaWZ5IGZvciBUUworCQkJdTMyCVQwMF9Jc0xhc3RNcGR1OjE7Ly8gMDogbm90ICAgMTpZZXMgZm9yIHNvZnR3YXJlIHVzZWQKKwkJCXUzMglUMDBfbGFzdF9tcGR1OjE7IC8vIGZvciBoYXJkd2FyZSB1c2UKKwkJCXUzMglUMDBfZmlyc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMF9ERVNDUklQVE9SLCAqUFQwMF9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfUjAxX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJUjAxX1JFU0VSVkVEOjM7CisJCQl1MzIJUjAxX21vZF90eXBlOjE7CisJCQl1MzIJUjAxX3ByZV90eXBlOjE7CisJCQl1MzIJUjAxX2RhdGFfcmF0ZTozOworCQkJdTMyCVIwMV9BR0Nfc3RhdGU6ODsKKwkJCXUzMglSMDFfTE5BX3N0YXRlOjI7CisJCQl1MzIJUjAxX2RlY3J5cHRpb25fbWV0aG9kOjI7CisJCQl1MzIJUjAxX21pY19lcnJvcjoxOworCQkJdTMyCVIwMV9yZXBsYXk6MTsKKwkJCXUzMglSMDFfYnJvYWRjYXN0X2ZyYW1lOjE7CisJCQl1MzIJUjAxX211bHRpY2FzdF9mcmFtZToxOworCQkJdTMyCVIwMV9kaXJlY3RlZF9mcmFtZToxOworCQkJdTMyCVIwMV9yZWNlaXZlX2ZyYW1lX2FudGVubmFfc2VsZWN0aW9uOjE7CisJCQl1MzIJUjAxX2ZyYW1lX3JlY2VpdmVfZHVyaW5nX2F0aW1fd2luZG93OjE7CisJCQl1MzIJUjAxX3Byb3RvY29sX3ZlcnNpb25fZXJyb3I6MTsKKwkJCXUzMglSMDFfYXV0aGVudGljYXRpb25fZnJhbWVfaWN2X2Vycm9yOjE7CisJCQl1MzIJUjAxX251bGxfa2V5X3RvX2F1dGhlbnRpY2F0aW9uX2ZyYW1lOjE7CisJCQl1MzIJUjAxX2ljdl9lcnJvcjoxOworCQkJdTMyCVIwMV9jcmNfZXJyb3I6MTsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglSMDFfY3JjX2Vycm9yOjE7CisJCQl1MzIJUjAxX2ljdl9lcnJvcjoxOworCQkJdTMyCVIwMV9udWxsX2tleV90b19hdXRoZW50aWNhdGlvbl9mcmFtZToxOworCQkJdTMyCVIwMV9hdXRoZW50aWNhdGlvbl9mcmFtZV9pY3ZfZXJyb3I6MTsKKwkJCXUzMglSMDFfcHJvdG9jb2xfdmVyc2lvbl9lcnJvcjoxOworCQkJdTMyCVIwMV9mcmFtZV9yZWNlaXZlX2R1cmluZ19hdGltX3dpbmRvdzoxOworCQkJdTMyCVIwMV9yZWNlaXZlX2ZyYW1lX2FudGVubmFfc2VsZWN0aW9uOjE7CisJCQl1MzIJUjAxX2RpcmVjdGVkX2ZyYW1lOjE7CisJCQl1MzIJUjAxX211bHRpY2FzdF9mcmFtZToxOworCQkJdTMyCVIwMV9icm9hZGNhc3RfZnJhbWU6MTsKKwkJCXUzMglSMDFfcmVwbGF5OjE7CisJCQl1MzIJUjAxX21pY19lcnJvcjoxOworCQkJdTMyCVIwMV9kZWNyeXB0aW9uX21ldGhvZDoyOworCQkJdTMyCVIwMV9MTkFfc3RhdGU6MjsKKwkJCXUzMglSMDFfQUdDX3N0YXRlOjg7CisJCQl1MzIJUjAxX2RhdGFfcmF0ZTozOworCQkJdTMyCVIwMV9wcmVfdHlwZToxOworCQkJdTMyCVIwMV9tb2RfdHlwZToxOworCQkJdTMyCVIwMV9SRVNFUlZFRDozOworCQl9OworCQkjZW5kaWYKKwl9OworfSBSMDFfREVTQ1JJUFRPUiwgKlBSMDFfREVTQ1JJUFRPUjsKKwordHlwZWRlZiBzdHJ1Y3QgX1QwMV9ERVNDUklQVE9SCit7CisJdW5pb24KKwl7CisJCXUzMgl2YWx1ZTsKKwkJI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYxMDA5IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAxX3J0c19jdHNfZHVyYXRpb246MTY7CisJCQl1MzIJVDAxX2ZhbGxfYmFja19yYXRlOjM7CisJCQl1MzIJVDAxX2FkZF9ydHM6MTsKKwkJCXUzMglUMDFfYWRkX2N0czoxOworCQkJdTMyCVQwMV9tb2R1bGF0aW9uX3R5cGU6MTsKKwkJCXUzMglUMDFfcGxjcF9oZWFkZXJfbGVuZ3RoOjE7CisJCQl1MzIJVDAxX3RyYW5zbWl0X3JhdGU6MzsKKwkJCXUzMglUMDFfd2VwX2lkOjI7CisJCQl1MzIJVDAxX2FkZF9jaGFsbGVuZ2VfdGV4dDoxOworCQkJdTMyCVQwMV9pbmhpYml0X2NyYzoxOworCQkJdTMyCVQwMV9sb29wX2JhY2tfd2VwX21vZGU6MTsKKwkJCXUzMglUMDFfcmV0cnlfYWJvcnRfZWJhYmxlOjE7CisJCX07CisJCSNlbHNlCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAxX3JldHJ5X2Fib3J0X2ViYWJsZToxOworCQkJdTMyCVQwMV9sb29wX2JhY2tfd2VwX21vZGU6MTsKKwkJCXUzMglUMDFfaW5oaWJpdF9jcmM6MTsKKwkJCXUzMglUMDFfYWRkX2NoYWxsZW5nZV90ZXh0OjE7CisJCQl1MzIJVDAxX3dlcF9pZDoyOworCQkJdTMyCVQwMV90cmFuc21pdF9yYXRlOjM7CisJCQl1MzIJVDAxX3BsY3BfaGVhZGVyX2xlbmd0aDoxOworCQkJdTMyCVQwMV9tb2R1bGF0aW9uX3R5cGU6MTsKKwkJCXUzMglUMDFfYWRkX2N0czoxOworCQkJdTMyCVQwMV9hZGRfcnRzOjE7CisJCQl1MzIJVDAxX2ZhbGxfYmFja19yYXRlOjM7CisJCQl1MzIJVDAxX3J0c19jdHNfZHVyYXRpb246MTY7CisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMV9ERVNDUklQVE9SLCAqUFQwMV9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfVDAyX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYxMDA5IGFkZCBieSBhbnNvbidzIGVuZGlhbgorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMl9Jc0xhc3RNcGR1OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcKKwkJCXUzMglUMDJfSWdub3JlUmVzdWx0OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcuIDA1MDExMSBNb2RpZnkgZm9yIFRTCisJCQl1MzIJVDAyX1JFU0VSVkVEX0lEOjI7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcKKwkJCXUzMglUMDJfVHhfUGt0SUQ6NDsKKwkJCXUzMglUMDJfTVBEVV9DbnQ6NDsKKwkJCXUzMglUMDJfUlRTX0NudDo0OworCQkJdTMyCVQwMl9SRVNFUlZFRDo3OworCQkJdTMyCVQwMl90cmFuc21pdF9jb21wbGV0ZToxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydF9kdWVfdG9fVEJUVDoxOworCQkJdTMyCVQwMl9lZmZlY3RpdmVfdHJhbnNtaXNzaW9uX3JhdGU6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfd2l0aG91dF9lbmNyeXB0aW9uX2R1ZV90b193ZXBfb25fZmFsc2U6MTsKKwkJCXUzMglUMDJfZGlzY2FyZF9kdWVfdG9fbnVsbF93ZXBfa2V5OjE7CisJCQl1MzIJVDAyX1JFU0VSVkVEXzE6MTsKKwkJCXUzMglUMDJfb3V0X29mX01heFR4TVNEVUxpZnRUaW1lOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2Fib3J0OjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2ZhaWw6MTsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDJfdHJhbnNtaXRfZmFpbDoxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydDoxOworCQkJdTMyCVQwMl9vdXRfb2ZfTWF4VHhNU0RVTGlmdFRpbWU6MTsKKwkJCXUzMglUMDJfUkVTRVJWRURfMToxOworCQkJdTMyCVQwMl9kaXNjYXJkX2R1ZV90b19udWxsX3dlcF9rZXk6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfd2l0aG91dF9lbmNyeXB0aW9uX2R1ZV90b193ZXBfb25fZmFsc2U6MTsKKwkJCXUzMglUMDJfZWZmZWN0aXZlX3RyYW5zbWlzc2lvbl9yYXRlOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2Fib3J0X2R1ZV90b19UQlRUOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2NvbXBsZXRlOjE7CisJCQl1MzIJVDAyX1JFU0VSVkVEOjc7CisJCQl1MzIJVDAyX1JUU19DbnQ6NDsKKwkJCXUzMglUMDJfTVBEVV9DbnQ6NDsKKwkJCXUzMglUMDJfVHhfUGt0SUQ6NDsKKwkJCXUzMglUMDJfUkVTRVJWRURfSUQ6MjsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZworCQkJdTMyCVQwMl9JZ25vcmVSZXN1bHQ6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZy4gMDUwMTExIE1vZGlmeSBmb3IgVFMKKwkJCXUzMglUMDJfSXNMYXN0TXBkdToxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nCisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMl9ERVNDUklQVE9SLCAqUFQwMl9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfREVTQ1JJUFRPUiB7CQkvLyBTa2lwIGxlbmd0aCA9IDggRFdPUkQKKwkvLyBJRCBmb3IgZGVzY3JpcHRvciAtLS0sIFRoZSBmaWVsZCBkb2Vzbid0IGJlIGNsZWFyZCBpbiB0aGUgb3BlcmF0aW9uIG9mIERlc2NyaXB0b3IgZGVmaW5pdGlvbgorCXU4CURlc2NyaXB0b3JfSUQ7CisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVGhlIGFib3ZlIHJlZ2lvbiBkb2Vzbid0IGJlIGNsZWFyZWQgYnkgREVTQ1JJUFRPUl9SRVNFVC0tLS0tLQorCXU4CVJFU0VSVkVEWzNdOworCisJdTE2CUZyYWdtZW50VGhyZXNob2xkOworCXU4CUludGVybmFsVXNlZDsvL09ubHkgY2FuIGJlIHVzZWQgYnkgb3BlcmF0aW9uIG9mIGRlc2NyaXB0b3IgZGVmaW5pdGlvbgorCXU4CVR5cGU7Ly8gMDogODAyLjMJMTo4MDIuMTEgZGF0YSBmcmFtZQkyOjgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lCisKKwl1OAlQcmVhbWJsZU1vZGU7Ly8gMDogc2hvcnQgMTpsb25nCisJdTgJVHhSYXRlOworCXU4CUZyYWdtZW50Q291bnQ7CisJdTgJRWFwRml4OyAvLyBGb3Igc3BlZWQgdXAga2V5IGluc3RhbGwKKworCS8vIEZvciBSMDAgYW5kIFQwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdW5pb24KKwl7CisJCVIwMF9ERVNDUklQVE9SCVIwMDsKKwkJVDAwX0RFU0NSSVBUT1IJVDAwOworCX07CisKKwkvLyBGb3IgUjAxIGFuZCBUMDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXVuaW9uCisJeworCQlSMDFfREVTQ1JJUFRPUglSMDE7CisJCVQwMV9ERVNDUklQVE9SCVQwMTsKKwl9OworCisJLy8gRm9yIFIwMiBhbmQgVDAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl1bmlvbgorCXsKKwkJdTMyCQkJUjAyOworCQlUMDJfREVTQ1JJUFRPUglUMDI7CisJfTsKKworCS8vIEZvciBSMDMgYW5kIFQwMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gRm9yIHNvZnR3YXJlIHVzZWQKKwl1bmlvbgorCXsKKwkJdTMyCVIwMzsKKwkJdTMyCVQwMzsKKwkJc3RydWN0CisJCXsKKwkJCXU4CWJ1ZmZlcl9udW1iZXI7CisJCQl1OAlidWZmZXJfc3RhcnRfaW5kZXg7CisJCQl1MTYJYnVmZmVyX3RvdGFsX3NpemU7CisJCX07CisJfTsKKworCS8vIEZvciBzdG9yaW5nIHRoZSBidWZmZXIKKwl1MTYJYnVmZmVyX3NpemVbIE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWCBdOworCXZvaWQqCWJ1ZmZlcl9hZGRyZXNzWyBNQVhfREVTQ1JJUFRPUl9CVUZGRVJfSU5ERVggXTsvLzkzMTEzMC40LnEKKworfSBERVNDUklQVE9SLCAqUERFU0NSSVBUT1I7CisKKworI2RlZmluZSBERUZBVUxUX05VTExfUEFDS0VUX0NPVU5UCQkxODAwMDAJLy8yMDA2MDgyOC4xIEFkZC4gMTgwIHNlY29uZHMKKworI2RlZmluZSBNQVhfVFhWR0FfRUVQUk9NCTkJLy9Ib3cgbWFueSB3b3JkKHUxNikgb2YgRUVQUk9NIHdpbGwgYmUgdXNlZCBmb3IgVHhWR0EKKyNkZWZpbmUgTUFYX1JGX1BBUkFNRVRFUgkzMgorCit0eXBlZGVmIHN0cnVjdCBfVFhWR0FfRk9SXzUwIHsKKwl1OAlDaGFuTm87CisJdTgJVHhWZ2FWYWx1ZTsKK30gVFhWR0FfRk9SXzUwOworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBEZXZpY2UgcmVsYXRlZCBpbmNsdWRlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjaW5jbHVkZSAibGludXgvd2J1c2Jfcy5oIgorI2luY2x1ZGUgImxpbnV4L3diMzVyZWdfcy5oIgorI2luY2x1ZGUgImxpbnV4L3diMzV0eF9zLmgiCisjaW5jbHVkZSAibGludXgvd2IzNXJ4X3MuaCIKKworCisvLyBGb3IgSGFsIHVzaW5nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBzdHJ1Y3QgX0hXX0RBVEFfVAoreworCS8vIEZvciBjb21wYXRpYmxlIHdpdGggMzMKKwl1MzIJcmV2aXNpb247CisJdTMyCUJCM2NfY2FsOyAvLyBUaGUgdmFsdWUgZm9yIFR4IGNhbGlicmF0aW9uIGNvbWVzIGZyb20gRUVQUk9NCisJdTMyCUJCNTRfY2FsOyAvLyBUaGUgdmFsdWUgZm9yIFJ4IGNhbGlicmF0aW9uIGNvbWVzIGZyb20gRUVQUk9NCisKKworCS8vIEZvciBzdXJwcmlzZSByZW1vdmUKKwl1MzIJU3VycHJpc2VSZW1vdmU7IC8vIDA6IE5vcm1hbCAxOiBTdXJwcmlzZSByZW1vdmUKKwl1OAlJbml0aWFsUmVzb3VyY2U7CisJdTgJSXNLZXlQcmVTZXQ7CisJdTgJQ2FsT25lVGltZTsgLy8gMjAwNjA2MzAuMQorCisJdTgJVkNPX3RyaW07CisKKwkvLyBGb3IgRml4IDEnc3QgRE1BIGJ1ZworCXUzMglGcmFnQ291bnQ7CisJdTMyCURNQUZpeDsgLy9WMV9ETUFfRklYIFRoZSB2YXJpYWJsZSBjYW4gYmUgcmVtb3ZlZCBpZiBkcml2ZXIgd2FudCB0byBzYXZlIG1lbSBzcGFjZSBmb3IgVjIuCisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIEZvciBVU0IgZHJpdmVyLCBoYWwgbmVlZCBtb3JlIHZhcmlhYmxlcy4gRHVlIHRvCisJLy8JMS4gTkRJUy1XRE0gb3BlcmF0aW9uCisJLy8JMi4gVGhlIFNNRSwgTUxNRSBhbmQgT0xEIE1EUyBuZWVkIEFkYXB0ZXIgc3RydWN0dXJlLCBidXQgdGhlIGRyaXZlciB1bmRlciBIQUwgZG9lc24ndAorCS8vCQloYXZlIHRoYXQgcGFyYW1ldGVyIHdoZW4gcmVjZWl2aW5nIGFuZCBpbmRpY2F0aW5nIHBhY2tldC4KKwkvLwkJVGhlIE1EUyBtdXN0IGlucHV0IHRoZSBBZGFwdGVyIHBvaW50ZXIgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgaGFsX2luaXRfaGFyZHdhcmUuCisJLy8JCVRoZSBmdW5jdGlvbiB1c2FnZSBpcyBkaWZmZXJlbnQgdGhhbiBQQ0kgZHJpdmVyLgorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdm9pZCogQWRhcHRlcjsKKworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBEZWZpbml0aW9uIGZvciBNQUMgYWRkcmVzcworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwl1OAkJUGVybWFuZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIHN0b3JlZCBpbiBFRVBST00uICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCXU4CQlDdXJyZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIGluIHVzZWQuICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBEZWZpbml0aW9uIGZvciA4MDIuMTEKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXU4CSpic3NpZF9wb2ludGVyOyAvLyBVc2VkIGJ5IGhhbF9nZXRfYnNzaWQgZm9yIHJldHVybiB2YWx1ZQorCXU4CWJzc2lkWzhdOy8vIE9ubHkgNiBieXRlIHdpbGwgYmUgdXNlZC4gOCBieXRlIGlzIHJlcXVpcmVkIGZvciByZWFkIGJ1ZmZlcgorCXU4CXNzaWRbMzJdOy8vIG1heGltdW0gc3NpZCBsZW5ndGggaXMgMzIgYnl0ZQorCisJdTE2CUFJRDsKKwl1OAlzc2lkX2xlbmd0aDsKKwl1OAlDaGFubmVsOworCisJdTE2CUxpc3RlbkludGVydmFsOworCXUxNglDYXBhYmlsaXR5SW5mb3JtYXRpb247CisKKwl1MTYJQmVhY29uUGVyaW9kOworCXUxNglQcm9iZURlbGF5OworCisJdTgJYnNzX3R5cGU7Ly8gMDogSUJTU19ORVQgb3IgMTpFU1NfTkVUCisJdTgJcHJlYW1ibGU7Ly8gMDogc2hvcnQgcHJlYW1ibGUsIDE6IGxvbmcgcHJlYW1ibGUKKwl1OAlzbG90X3RpbWVfc2VsZWN0Oy8vIDkgb3IgMjAgdmFsdWUKKwl1OAlwaHlfdHlwZTsvLyBQaHkgc2VsZWN0CisKKwl1MzIJcGh5X3BhcmFbTUFYX1JGX1BBUkFNRVRFUl07CisJdTMyCXBoeV9udW1iZXI7CisKKwl1MzIJQ3VycmVudFJhZGlvU3c7IC8vIDIwMDYwMzIwLjIgMDpPbiAxOk9mZgorCXUzMglDdXJyZW50UmFkaW9IdzsgLy8gMjAwNjA4MjUgMDpPbiAxOk9mZgorCisJdTgJKnBvd2VyX3NhdmVfcG9pbnQ7ICAvLyBVc2VkIGJ5IGhhbF9nZXRfcG93ZXJfc2F2ZV9tb2RlIGZvciByZXR1cm4gdmFsdWUKKwl1OAljd21pbjsKKwl1OAlkZXNpcmVkX3Bvd2VyX3NhdmU7CisJdTgJZHRpbTsvLyBJcyBydW5uaW5nIGR0aW0KKwl1OAltYXBwaW5nX2tleV9yZXBsYWNlX2luZGV4Oy8vSW4gS2V5IHRhYmxlLCB0aGUgbmV4dCBpbmRleCBiZSByZXBsYWNlZCA5MzExMzAuNC5yCisKKwl1MTYJTWF4UmVjZWl2ZUxpZmVUaW1lOworCXUxNglGcmFnbWVudFRocmVzaG9sZDsKKwl1MTYJRnJhZ21lbnRUaHJlc2hvbGRfdG1wOworCXUxNgljd21heDsKKworCXU4CUtleV9zbG90W01BWF9LRVlfVEFCTEVdWzhdOyAvL093bmVyc2hpcCByZWNvcmQgZm9yIGtleSBzbG90LiBGb3IgQWxpZ25tZW50CisJdTMyCUtleV9jb250ZW50W01BWF9LRVlfVEFCTEVdWzEyXTsgLy8gMTBEVyBmb3IgZWFjaCBlbnRyeSArIDIgZm9yIGJ1cnN0IGNvbW1hbmQoIE9mZiBhbmQgT24gdmFsaWQgYml0KQorCXU4CUN1cnJlbnREZWZhdWx0S2V5SW5kZXg7CisJdTMyCUN1cnJlbnREZWZhdWx0S2V5TGVuZ3RoOworCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBWYXJpYWJsZSBmb3IgZWFjaCBtb2R1bGUKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVdCVVNCCQlXYlVzYjsgLy8gTmVlZCBXYlVzYi5oCisJV0IzNVJFRwkJV2IzNVJlZzsgLy8gTmVlZCBXYjM1UmVnLmgKKwlXQjM1VFgJCVdiMzVUeDsgLy8gTmVlZCBXYjM1VHguaAorCVdCMzVSWAkJV2IzNVJ4OyAvLyBOZWVkIFdiMzVSeC5oCisKKwlPU19USU1FUglMRURUaW1lcjsvLyBGb3IgTEVECisKKwl1MzIJCUxFRHBvaW50Oy8vIEZvciBMRUQKKworICAgIHUzMiAgICAgICAgIGR0b190eF9yZXRyeV9jb3VudDsgICAgICAgICAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorICAgIHUzMiAgICAgICAgIGR0b190eF9mcmFnX2NvdW50OyAgICAgICAgICAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorICAgIHUzMiAgICAgICAgIHJ4X29rX2NvdW50WzEzXTsgICAgLy8gaW5kZXg9MDogdG90YWwgcnggb2sKKyAgICAvL3UzMiAgICAgICAgIHJ4X29rX2J5dGVzWzEzXTsgICAgLy8gaW5kZXg9MCwgdG90YWwgcnggb2sgYnl0ZXMKKyAgICB1MzIgICAgICAgICByeF9lcnJfY291bnRbMTNdOyAgIC8vIGluZGV4PTA6IHRvdGFsIHJ4IGVycgorCisJLy9mb3IgVHggZGVidWcKKwl1MzIJCQl0eF9UQlRUX3N0YXJ0X2NvdW50OworCXUzMgkJCXR4X0VUUl9jb3VudDsKKwl1MzIJCQl0eF9XZXBPbl9mYWxzZV9jb3VudDsKKwl1MzIJCQl0eF9OdWxsX2tleV9jb3VudDsKKwl1MzIJCQl0eF9yZXRyeV9jb3VudFs4XTsKKworCXU4CQlQb3dlckluZGV4RnJvbUVFUFJPTTsgLy8gRm9yIDI0MTJNSHoKKwl1OAkJcG93ZXJfaW5kZXg7CisJdTgJCUlzV2FpdEpvaW5Db21wbGV0ZTsJLy8gVFJVRTogc2V0IGpvaW4gcmVxdWVzdAorCXU4CQliYW5kOworCisJdTE2CQlTb2Z0d2FyZVNldDsKKwl1MTYJCVJlc2VydmVkX3M7CisKKwl1MzIJCUlzSW5pdE9LOyAvLyAwOiBEcml2ZXIgc3RhcnRpbmcgICAxOiBEcml2ZXIgaW5pdCBPSworCisJLy8gRm9yIFBoeSBjYWxpYnJhdGlvbgorICAgIHMzMgkJaXFfcnNkbF9nYWluX3R4X2QyOworICAgIHMzMgkJaXFfcnNkbF9waGFzZV90eF9kMjsKKwl1MzIJCXR4dmdhX3NldHRpbmdfZm9yX2NhbDsgLy8gMjAwNjA3MDMuMSBBZGQKKworCXU4CQlUeFZnYVNldHRpbmdJbkVFUFJPTVsgKCgoTUFYX1RYVkdBX0VFUFJPTSoyKSszKSAmIH4weDAzKSBdOyAvLyAyMDA2MDYyMSBGb3IgYmFja3VwIEVFUFJPTSB2YWx1ZQorCXU4CQlUeFZnYUZvcjI0WzE2XTsgLy8gTWF4IGlzIDE0LCAyIGZvciBhbGlnbm1lbnQKKwlUWFZHQV9GT1JfNTAJVHhWZ2FGb3I1MFszNl07CS8vIDM1IGNoYW5uZWxzIGluIDVHLiAzNXgyID0gNzAgYnl0ZS4gMiBmb3IgYWxpZ25tZW50cworCisJdTE2CQlTY2FuX0ludGVydmFsOworCXUxNgkJUkVTRVJWRUQ2OworCisJLy8gTEVEIGNvbnRyb2wKKwl1MzIJCUxFRF9jb250cm9sOworCQkvLyBMRURfY29udHJvbCA0IGJ5dGU6IEdyYXlfTGVkXzFbM10JCUdyYXlfTGVkXzBbMl0JCUxlZFsxXQkJCUxlZFswXQorCQkvLyBHcmF5X0xlZAorCQkvLwkJRm9yIExlZCBncmF5IHNldHRpbmcKKwkJLy8gTGVkCisJCS8vCQkwOiBub3JtYWwgY29udHJvbCwgTEVEIGJlaGF2aW9yIHdpbGwgZGVjaWRlIGJ5IEVFUFJPTSBzZXR0aW5nCisJCS8vCQkxOiBUdXJuIG9mZiBzcGVjaWZpYyBMRUQKKwkJLy8JCTI6IEFsd2F5cyBvbiBzcGVjaWZpYyBMRUQKKwkJLy8JCTM6IHNsb3cgYmxpbmtpbmcgc3BlY2lmaWMgTEVECisJCS8vCQk0OiBmYXN0IGJsaW5raW5nIHNwZWNpZmljIExFRAorCQkvLwkJNTogV1BTIGxlZCBjb250cm9sIGlzIHNldC4gTGVkMCBpcyBSZWQsIExlZDEgaWQgR3JlZW4KKwkJLy8JCQlMZWRbMV0gaXMgcGFyYW1ldGVyIGZvciBXUFMgTEVEIG1vZGUKKwkJLy8JCQkJIC8vIDE6SW5Qcm9ncmVzcyAgMjogRXJyb3IgMzogU2Vzc2lvbiBvdmVybGFwIDQ6IFN1Y2Nlc3MgMjAwNjExMDggY29udHJvbAorCisJdTMyCQlMRURfTGlua09uOwkJLy9UdXJuIExFRCBvbiBjb250cm9sCisJdTMyCQlMRURfU2Nhbm5pbmc7CS8vIExldCBMRUQgaW4gc2NhbiBwcm9jZXNzIGNvbnRyb2wKKwl1MzIJCUxFRF9CbGlua2luZzsgLy8gVGVtcCB2YXJpYWJsZSBmb3Igc2hpbmluZworCXUzMgkJUnhCeXRlQ291bnRMYXN0OworCXUzMgkJVHhCeXRlQ291bnRMYXN0OworCisJczMyCQlTdXJwcmlzZVJlbW92ZUNvdW50OworCisJLy8gRm9yIGdsb2JhbCB0aW1lcgorCXUzMgkJdGltZV9jb3VudDsvL1RJQ0tfVElNRV8xMDBtcyAxID0gMTAwbXMKKworCS8vIEZvciBlcnJvciByZWNvdmVyCisJdTMyCQlId1N0b3A7CisKKwkvLyAyMDA2MDgyOC4xIGZvciBhdm9pZCBBUCBkaXNjb25uZWN0CisJdTMyCQlOdWxsUGFja2V0Q291bnQ7CisKK30gaHdfZGF0YV90LCAqcGh3X2RhdGFfdDsKKworLy8gVGhlIG1hcHBpbmcgb2YgUnggYW5kIFR4IGRlc2NyaXB0b3IgZmllbGQKK3R5cGVkZWYgc3RydWN0IF9IQUxfUkFURQoreworCS8vIERTU1MKKwl1MzIJUkVTRVJWRURfMDsKKwl1MzIgICBOdW1SYXRlMk1TOworCXUzMiAgIE51bVJhdGU1NU1TOworCXUzMiAgIE51bVJhdGUxMU1TOworCisJdTMyCVJFU0VSVkVEXzFbNF07CisKKwl1MzIgICBOdW1SYXRlMU07CisJdTMyICAgTnVtUmF0ZTJNTDsKKwl1MzIgICBOdW1SYXRlNTVNTDsKKwl1MzIgICBOdW1SYXRlMTFNTDsKKworCXUzMglSRVNFUlZFRF8yWzRdOworCisJLy8gT0ZETQorCXUzMiAgIE51bVJhdGU2TTsKKwl1MzIgICBOdW1SYXRlOU07CisJdTMyICAgTnVtUmF0ZTEyTTsKKwl1MzIgICBOdW1SYXRlMThNOworCXUzMiAgIE51bVJhdGUyNE07CisJdTMyICAgTnVtUmF0ZTM2TTsKKwl1MzIgICBOdW1SYXRlNDhNOworCXUzMiAgIE51bVJhdGU1NE07Cit9IEhBTF9SQVRFLCAqUEhBTF9SQVRFOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQ0NWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eC5jCkBAIC0wLDAgKzEsMjc1IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNSBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YmxpbnV4LmMKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCByZWxlYXRlZCByb3V0aW5lcworLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCit1MzIKK1dCTElOVVhfTWVtb3J5QWxsb2Modm9pZCogKlZpcnR1YWxBZGRyZXNzLCB1MzIgTGVuZ3RoKQoreworCSpWaXJ0dWFsQWRkcmVzcyA9IGt6YWxsb2MoIExlbmd0aCwgR0ZQX0FUT01JQyApOyAvL0dGUF9LRVJORUwgaXMgbm90IHN1aXRhYmxlCisKKwlpZiAoKlZpcnR1YWxBZGRyZXNzID09IE5VTEwpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzMzIKK0VuY2FwQXRvbWljSW5jKFBBREFQVEVSIEFkYXB0ZXIsIHZvaWQqIHBBdG9taWMpCit7CisJUFdCTElOVVggcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKwl1MzIJbHRtcDsKKwl1MzIgKglwbHRtcCA9ICh1MzIgKilwQXRvbWljOworCXNwaW5fbG9ja19pcnEoICZwV2JMaW51eC0+QXRvbWljU3BpbkxvY2sgKTsKKwkoKnBsdG1wKSsrOworCWx0bXAgPSAoKnBsdG1wKTsKKwlzcGluX3VubG9ja19pcnEoICZwV2JMaW51eC0+QXRvbWljU3BpbkxvY2sgKTsKKwlyZXR1cm4gbHRtcDsKK30KKworczMyCitFbmNhcEF0b21pY0RlYyhQQURBUFRFUiBBZGFwdGVyLCB2b2lkKiBwQXRvbWljKQoreworCVBXQkxJTlVYIHBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisJdTMyCWx0bXA7CisJdTMyICoJcGx0bXAgPSAodTMyICopcEF0b21pYzsKKwlzcGluX2xvY2tfaXJxKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJKCpwbHRtcCktLTsKKwlsdG1wID0gKCpwbHRtcCk7CisJc3Bpbl91bmxvY2tfaXJxKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJcmV0dXJuIGx0bXA7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK1dCTElOVVhfSW5pdGlhbChQQURBUFRFUiBBZGFwdGVyKQoreworCVBXQkxJTlVYIHBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisKKwlzcGluX2xvY2tfaW5pdCggJnBXYkxpbnV4LT5TcGluTG9jayApOworCXNwaW5fbG9ja19pbml0KCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQKK1dCTGludXhfUmVjZWl2ZVBhY2tldChQQURBUFRFUiBBZGFwdGVyLCBQUlhMQVlFUjEgcFJ4TGF5ZXIxKQoreworCUJVRygpOworfQorCisKK3ZvaWQKK1dCTElOVVhfR2V0TmV4dFBhY2tldChQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcykKK3sKKwlCVUcoKTsKK30KKwordm9pZAorV0JMSU5VWF9HZXROZXh0UGFja2V0Q29tcGxldGVkKFBBREFQVEVSIEFkYXB0ZXIsIFBERVNDUklQVE9SIHBEZXMpCit7CisJQlVHKCk7Cit9CisKK3ZvaWQKK1dCTElOVVhfRGVzdHJveShQQURBUFRFUiBBZGFwdGVyKQoreworCVdCTElOVVhfc3RvcCggQWRhcHRlciApOworI2lmZGVmIF9QRV9VU0JfSU5JX0RVTVBfCisJV0JERUJVRygoIlt3MzV1bmRdIHVucmVnaXN0ZXJfbmV0ZGV2IVxuIikpOworI2VuZGlmCit9CisKK3ZvaWQKK1dCTElOVVhfc3RvcCggIFBBREFQVEVSIEFkYXB0ZXIgKQoreworCVBXQkxJTlVYCXBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisJc3RydWN0IHNrX2J1ZmYgKnBTa2I7CisKKwlpZiAoT1NfQVRPTUlDX0lOQyggQWRhcHRlciwgJnBXYkxpbnV4LT5UaHJlYWRDb3VudCApID09IDEpIHsKKwkJLy8gU2h1dGRvd24gbW9kdWxlIGltbWVkaWF0ZWx5CisJCXBXYkxpbnV4LT5zaHV0ZG93biA9IDE7CisKKwkJd2hpbGUgKHBXYkxpbnV4LT5za2JfYXJyYXlbIHBXYkxpbnV4LT5za2JfR2V0SW5kZXggXSkgeworCQkJLy8gVHJ5aW5nIHRvIGZyZWUgdGhlIHVuLXNlbmRpbmcgcGFja2V0CisJCQlwU2tiID0gcFdiTGludXgtPnNrYl9hcnJheVsgcFdiTGludXgtPnNrYl9HZXRJbmRleCBdOworCQkJcFdiTGludXgtPnNrYl9hcnJheVsgcFdiTGludXgtPnNrYl9HZXRJbmRleCBdID0gTlVMTDsKKwkJCWlmKCBpbl9pcnEoKSApCisJCQkJZGV2X2tmcmVlX3NrYl9pcnEoIHBTa2IgKTsKKwkJCWVsc2UKKwkJCQlkZXZfa2ZyZWVfc2tiKCBwU2tiICk7CisKKwkJCXBXYkxpbnV4LT5za2JfR2V0SW5kZXgrKzsKKwkJCXBXYkxpbnV4LT5za2JfR2V0SW5kZXggJT0gV0JMSU5VWF9QQUNLRVRfQVJSQVlfU0laRTsKKwkJfQorCisjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCVdCREVCVUcoKCAiW3czNXVuZF0gU0tCX1JFTEVBU0UgT0tcbiIgKSk7CisjZW5kaWYKKwl9CisKKwlPU19BVE9NSUNfREVDKCBBZGFwdGVyLCAmcFdiTGludXgtPlRocmVhZENvdW50ICk7Cit9CisKK3ZvaWQKK1diV2xhbkhhbHQoICBQQURBUFRFUiBBZGFwdGVyICkKK3sKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFkYXB0ZXItPnNMb2NhbFBhcmEuU2h1dERvd25lZCA9IFRSVUU7CisKKwlNZHNfRGVzdHJveSggQWRhcHRlciApOworCisJLy8gVHVybiBvZmYgUnggYW5kIFR4IGhhcmR3YXJlIGFiaWxpdHkKKwloYWxfc3RvcCggJkFkYXB0ZXItPnNId0RhdGEgKTsKKyNpZmRlZiBfUEVfVVNCX0lOSV9EVU1QXworCVdCREVCVUcoKCJbdzM1dW5kXSBIYWxfc3RvcCBPLksuXG4iKSk7CisjZW5kaWYKKwlPU19TTEVFUCgxMDAwMDApOy8vIFdhaXRpbmcgSXJwIGNvbXBsZXRlZAorCisJLy8gRGVzdHJveSB0aGUgTkRJUyBtb2R1bGUKKwlXQkxJTlVYX0Rlc3Ryb3koIEFkYXB0ZXIgKTsKKworCS8vIEhhbHQgdGhlIEhBTAorCWhhbF9oYWx0KCZBZGFwdGVyLT5zSHdEYXRhLCBOVUxMKTsKK30KKwordW5zaWduZWQgY2hhcgorV2JXTGFuSW5pdGlhbGl6ZShQQURBUFRFUiBBZGFwdGVyKQoreworCXBod19kYXRhX3QJcEh3RGF0YTsKKwl1OAkJKnBNYWNBZGRyOworCXU4CQkqcE1hY0FkZHIyOworCXUzMgkJSW5pdFN0ZXAgPSAwOworCXU4CQlFRVBST01fcmVnaW9uOworCXU4CQlId1JhZGlvT2ZmOworCisJLy8KKwkvLyBTZXR0aW5nIGRlZmF1bHQgdmFsdWUgZm9yIExpbnV4CisJLy8KKwlBZGFwdGVyLT5zTG9jYWxQYXJhLnJlZ2lvbl9JTkYgPSBSRUdJT05fQVVUTzsKKwlBZGFwdGVyLT5zTG9jYWxQYXJhLlR4UmF0ZU1vZGUgPSBSQVRFX0FVVE87CisJcHNMT0NBTC0+Yk1hY09wZXJhdGlvbk1vZGUgPSBNT0RFXzgwMl8xMV9CRzsJLy8gQi9HIG1vZGUKKwlBZGFwdGVyLT5NZHMuVHhSVFNUaHJlc2hvbGQgPSBERUZBVUxUX1JUU1RocmVzaG9sZDsKKwlBZGFwdGVyLT5NZHMuVHhGcmFnbWVudFRocmVzaG9sZCA9IERFRkFVTFRfRlJBR01FTlRfVEhSRVNIT0xEOworCWhhbF9zZXRfcGh5X3R5cGUoICZBZGFwdGVyLT5zSHdEYXRhLCBSRl9XQl8yNDJfMSApOworCUFkYXB0ZXItPnNMb2NhbFBhcmEuTVRVc2l6ZSA9IE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRTsKKwlwc0xPQ0FMLT5iUHJlYW1ibGVNb2RlID0gQVVUT19NT0RFOworCUFkYXB0ZXItPnNMb2NhbFBhcmEuUmFkaW9PZmZTdGF0dXMuYm9Td1JhZGlvT2ZmID0gRkFMU0U7CisJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCWhhbF9zZXRfcGh5X3R5cGUoIHBId0RhdGEsIFJGX0RFQ0lERV9CWV9JTkYgKTsKKworCS8vCisJLy8gSW5pdGlhbCBlYWNoIG1vZHVsZSBhbmQgdmFyaWFibGUKKwkvLworCWlmICghV0JMSU5VWF9Jbml0aWFsKEFkYXB0ZXIpKSB7CisjaWZkZWYgX1BFX1VTQl9JTklfRFVNUF8KKwkJV0JERUJVRygoIlt3MzV1bmRdV0JORElTIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIikpOworI2VuZGlmCisJCWdvdG8gZXJyb3I7CisJfQorCisJLy8gSW5pdGlhbCBTb2Z0d2FyZSB2YXJpYWJsZQorCUFkYXB0ZXItPnNMb2NhbFBhcmEuU2h1dERvd25lZCA9IEZBTFNFOworCisJLy9hZGRlZCBieSB3cyBmb3Igd2VwIGtleSBlcnJvciBkZXRlY3Rpb24KKwlBZGFwdGVyLT5zTG9jYWxQYXJhLmJXZXBLZXlFcnJvcj0gRkFMU0U7CisJQWRhcHRlci0+c0xvY2FsUGFyYS5iVG9TZWxmUGFja2V0UmVjZWl2ZWQgPSBGQUxTRTsKKwlBZGFwdGVyLT5zTG9jYWxQYXJhLldlcEtleURldGVjdFRpbWVyQ291bnQ9IDIgKiAxMDA7IC8vLyAyIHNlY29uZHMKKworCS8vIEluaXRpYWwgVVNCIGhhbAorCUluaXRTdGVwID0gMTsKKwlwSHdEYXRhID0gJkFkYXB0ZXItPnNId0RhdGE7CisJaWYgKCFoYWxfaW5pdF9oYXJkd2FyZShwSHdEYXRhLCBBZGFwdGVyKSkKKwkJZ290byBlcnJvcjsKKworCUVFUFJPTV9yZWdpb24gPSBoYWxfZ2V0X3JlZ2lvbl9mcm9tX0VFUFJPTSggcEh3RGF0YSApOworCWlmIChFRVBST01fcmVnaW9uICE9IFJFR0lPTl9BVVRPKQorCQlwc0xPQ0FMLT5yZWdpb24gPSBFRVBST01fcmVnaW9uOworCWVsc2UgeworCQlpZiAocHNMT0NBTC0+cmVnaW9uX0lORiAhPSBSRUdJT05fQVVUTykKKwkJCXBzTE9DQUwtPnJlZ2lvbiA9IHBzTE9DQUwtPnJlZ2lvbl9JTkY7CisJCWVsc2UKKwkJCXBzTE9DQUwtPnJlZ2lvbiA9IFJFR0lPTl9VU0E7CS8vZGVmYXVsdCBzZXR0aW5nCisJfQorCisJLy8gR2V0IFNvZnR3YXJlIHNldHRpbmcgZmxhZyBmcm9tIGhhbAorCUFkYXB0ZXItPnNMb2NhbFBhcmEuYm9BbnRlbm5hRGl2ZXJzaXR5ID0gRkFMU0U7CisJaWYgKGhhbF9zb2Z0d2FyZV9zZXQocEh3RGF0YSkgJiAweDAwMDAwMDAxKQorCQlBZGFwdGVyLT5zTG9jYWxQYXJhLmJvQW50ZW5uYURpdmVyc2l0eSA9IFRSVUU7CisKKwkvLworCS8vIEZvciBUUyBtb2R1bGUKKwkvLworCUluaXRTdGVwID0gMjsKKworCS8vIEZvciBNRFMgbW9kdWxlCisJSW5pdFN0ZXAgPSAzOworCU1kc19pbml0aWFsKEFkYXB0ZXIpOworCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBJbml0aWFsaXplIHRoZSBTTUUsIFNDQU4sIE1MTUUsIFJPQU0KKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUluaXRTdGVwID0gNDsKKwlJbml0U3RlcCA9IDU7CisJSW5pdFN0ZXAgPSA2OworCisJLy8gSWYgbm8gdXNlci1kZWZpbmVkIGFkZHJlc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlIGFkZHJlc3NzICJidXJuZWQiIG9uIHRoZSBOSUMgaW5zdGVhZC4KKwlwTWFjQWRkciA9IEFkYXB0ZXItPnNMb2NhbFBhcmEuVGhpc01hY0FkZHJlc3M7CisJcE1hY0FkZHIyID0gQWRhcHRlci0+c0xvY2FsUGFyYS5QZXJtYW5lbnRBZGRyZXNzOworCWhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoIHBId0RhdGEsIEFkYXB0ZXItPnNMb2NhbFBhcmEuUGVybWFuZW50QWRkcmVzcyApOy8vIFJlYWRpbmcgZXRoZXJuZXQgYWRkcmVzcyBmcm9tIEVFUFJPTQorCWlmIChPU19NRU1PUllfQ09NUEFSRShwTWFjQWRkciwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsIE1BQ19BRERSX0xFTkdUSCApKSAvLyBJcyBlcXVhbAorCXsKKwkJbWVtY3B5KCBwTWFjQWRkciwgcE1hY0FkZHIyLCBNQUNfQUREUl9MRU5HVEggKTsKKwl9IGVsc2UgeworCQkvLyBTZXQgdGhlIHVzZXIgZGVmaW5lIE1BQyBhZGRyZXNzCisJCWhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggcEh3RGF0YSwgQWRhcHRlci0+c0xvY2FsUGFyYS5UaGlzTWFjQWRkcmVzcyApOworCX0KKworCS8vZ2V0IGN1cnJlbnQgYW50ZW5uYQorCXBzTE9DQUwtPmJBbnRlbm5hTm8gPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKHBId0RhdGEpOworI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCVdCREVCVUcoKCJEcml2ZXIgaW5pdCwgYW50ZW5uYSBubyA9ICVkXG4iLCBwc0xPQ0FMLT5iQW50ZW5uYU5vKSk7CisjZW5kaWYKKwloYWxfZ2V0X2h3X3JhZGlvX29mZiggcEh3RGF0YSApOworCisJLy8gV2FpdGluZyBmb3IgSEFMIHNldHRpbmcgT0sKKwl3aGlsZSAoIWhhbF9pZGxlKHBId0RhdGEpKQorCQlPU19TTEVFUCgxMDAwMCk7CisKKwlNVE9fSW5pdChBZGFwdGVyKTsKKworCUh3UmFkaW9PZmYgPSBoYWxfZ2V0X2h3X3JhZGlvX29mZiggcEh3RGF0YSApOworCXBzTE9DQUwtPlJhZGlvT2ZmU3RhdHVzLmJvSHdSYWRpb09mZiA9ICEhSHdSYWRpb09mZjsKKworCWhhbF9zZXRfcmFkaW9fbW9kZSggcEh3RGF0YSwgKHVuc2lnbmVkIGNoYXIpKHBzTE9DQUwtPlJhZGlvT2ZmU3RhdHVzLmJvU3dSYWRpb09mZiB8fCBwc0xPQ0FMLT5SYWRpb09mZlN0YXR1cy5ib0h3UmFkaW9PZmYpICk7CisKKwloYWxfZHJpdmVyX2luaXRfT0socEh3RGF0YSkgPSAxOyAvLyBOb3RpZnkgaGFsIHRoYXQgdGhlIGRyaXZlciBpcyByZWFkeSBub3cuCisJLy9zZXQgYSB0eCBwb3dlciBmb3IgcmVmZXJlbmNlLi4uLi4KKy8vCXNtZV9zZXRfdHhfcG93ZXJfbGV2ZWwoQWRhcHRlciwgMTIpOwlGSVhNRT8KKwlyZXR1cm4gVFJVRTsKKworZXJyb3I6CisJc3dpdGNoIChJbml0U3RlcCkgeworCWNhc2UgNToKKwljYXNlIDQ6CisJY2FzZSAzOiBNZHNfRGVzdHJveSggQWRhcHRlciApOworCWNhc2UgMjoKKwljYXNlIDE6IFdCTElOVVhfRGVzdHJveSggQWRhcHRlciApOworCQloYWxfaGFsdCggcEh3RGF0YSwgTlVMTCApOworCWNhc2UgMDogYnJlYWs7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFdCTElOVVhfQ29ubmVjdFN0YXR1cyhQQURBUFRFUiBBZGFwdGVyLCB1MzIgZmxhZykKK3sKKwlQV0JMSU5VWAlwV2JMaW51eCA9ICZBZGFwdGVyLT5XYkxpbnV4OworCisJcFdiTGludXgtPkxpbmtTdGF0dXMgPSBmbGFnOyAvLyBPU19ESVNDT05ORUNURUQJb3IgIE9TX0NPTk5FQ1RFRAorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXhfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjQwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X2YuaApAQCAtMCwwICsxLDIzIEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAoYykgMTk5Ni0yMDA0IFdpbmJvbmQgRWxlY3Ryb25pYyBDb3Jwb3JhdGlvbgorLy8KKy8vIHdibGludXhfZi5oCisvLwordTMyIFdCTElOVVhfTWVtb3J5QWxsb2MoICB2b2lkKiAqVmlydHVhbEFkZHJlc3MsICB1MzIgTGVuZ3RoICk7CitzMzIgRW5jYXBBdG9taWNJbmMoICBQQURBUFRFUiBBZGFwdGVyLCAgdm9pZCogcEF0b21pYyApOworczMyIEVuY2FwQXRvbWljRGVjKCAgUEFEQVBURVIgQWRhcHRlciwgIHZvaWQqIHBBdG9taWMgKTsKK3ZvaWQgV0JMaW51eF9SZWNlaXZlUGFja2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBSWExBWUVSMSBwUnhMYXllcjEgKTsKK3Vuc2lnbmVkIGNoYXIgV0JMSU5VWF9Jbml0aWFsKCAgUEFEQVBURVIgQWRhcHRlciApOworaW50IHdiMzVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ICk7Cit2b2lkIFdCTElOVVhfR2V0TmV4dFBhY2tldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit2b2lkIFdCTElOVVhfR2V0TmV4dFBhY2tldENvbXBsZXRlZCggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit2b2lkIFdCTElOVVhfc3RvcCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgV0JMSU5VWF9EZXN0cm95KCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCB3YjM1X3NldF9tdWx0aWNhc3QoIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgKTsKK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICogd2IzNV9uZXRkZXZfc3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgKTsKK3ZvaWQgV0JMSU5VWF9zdG9wKCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBXYldsYW5IYWx0KCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBXQkxJTlVYX0Nvbm5lY3RTdGF0dXMoICBQQURBUFRFUiBBZGFwdGVyLCAgdTMyIGZsYWcgKTsKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXhfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyYmI0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXhfcy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyB3YmxpbnV4X3MuaAorLy8KKyNkZWZpbmUgT1NfTUVNT1JZX0FMTE9DKCBfViwgX1MgKQlXQkxJTlVYX01lbW9yeUFsbG9jKCBfViwgX1MgKQorI2RlZmluZSBPU19MSU5LX1NUQVRVUwkJCShBZGFwdGVyLT5XYkxpbnV4LkxpbmtTdGF0dXMgPT0gT1NfQ09OTkVDVEVEKQorI2RlZmluZSBPU19TRVRfU0hVVERPV04oIF9BICkJCV9BLT5XYkxpbnV4LnNodXRkb3duPTEKKyNkZWZpbmUgT1NfU0VUX1JFU1VNRSggX0EgKQkJX0EtPldiTGludXguc2h1dGRvd249MAorI2RlZmluZSBPU19DT05ORUNUX1NUQVRVU19JTkRJQ0FURSggX0EsIF9GICkJCVdCTElOVVhfQ29ubmVjdFN0YXR1cyggX0EsIF9GICkKKyNkZWZpbmUgT1NfRElTQ09OTkVDVEVECTAKKyNkZWZpbmUgT1NfQ09OTkVDVEVECTEKKyNkZWZpbmUgT1NfU1RPUCggX0EgKQlXQkxJTlVYX3N0b3AoIF9BICkKKworI2RlZmluZSBPU19DVVJSRU5UX1JYX0JZVEUoIF9BICkJCV9BLT5XYkxpbnV4LlJ4Qnl0ZUNvdW50CisjZGVmaW5lIE9TX0NVUlJFTlRfVFhfQllURSggX0EgKQkJX0EtPldiTGludXguVHhCeXRlQ291bnQKKyNkZWZpbmUgT1NfRVZFTlRfSU5ESUNBVEUoIF9BLCBfQiwgX0YgKQorI2RlZmluZSBPU19QTUtJRF9TVEFUVVNfRVZFTlQoIF9BICkKKyNkZWZpbmUgT1NfUkVDRUlWRV9QQUNLRVRfSU5ESUNBVEUoIF9BLCBfRCApCQlXQkxpbnV4X1JlY2VpdmVQYWNrZXQoIF9BLCBfRCApCisjZGVmaW5lIE9TX1JFQ0VJVkVfODAyXzFYX1BBQ0tFVF9JTkRJQ0FURSggX0EsIF9EICkJRUFQX1JlY2VpdmVQYWNrZXQoIF9BLCBfRCApCisjZGVmaW5lIE9TX0dFVF9QQUNLRVQoIF9BLCBfRCApCQkJCVdCTElOVVhfR2V0TmV4dFBhY2tldCggX0EsIF9EICkKKyNkZWZpbmUgT1NfR0VUX1BBQ0tFVF9DT01QTEVURSggX0EsIF9EICkJV0JMSU5VWF9HZXROZXh0UGFja2V0Q29tcGxldGVkKCBfQSwgX0QgKQorI2RlZmluZSBPU19TRU5EX1JFU1VMVCggX0EsIF9JRCwgX1IgKQorCisjZGVmaW5lIFdCTElOVVhfUEFDS0VUX0FSUkFZX1NJWkUJKEVUSEVSTkVUX1RYX0RFU0NSSVBUT1JTKjQpCisKK3R5cGVkZWYgc3RydWN0IF9XQkxJTlVYCit7CisJc3BpbmxvY2tfdAlBdG9taWNTcGluTG9jazsKKwlzcGlubG9ja190CVNwaW5Mb2NrOworCXUzMglzaHV0ZG93bjsKKworCU9TX0FUT01JQwlUaHJlYWRDb3VudDsKKworCXUzMglMaW5rU3RhdHVzOwkJLy8gT1NfRElTQ09OTkVDVEVEIG9yIE9TX0NPTk5FQ1RFRAorCisJdTMyCVJ4Qnl0ZUNvdW50OworCXUzMglUeEJ5dGVDb3VudDsKKworCXN0cnVjdCBza19idWZmICpza2JfYXJyYXlbIFdCTElOVVhfUEFDS0VUX0FSUkFZX1NJWkUgXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGFja2V0X3JldHVybjsKKwlzMzIJc2tiX1NldEluZGV4OworCXMzMglza2JfR2V0SW5kZXg7CisJczMyCW5ldGlmX3N0YXRlX3N0b3A7IC8vIDE6IHN0b3AgIDA6IG5vcm1hbAorfSBXQkxJTlVYLCAqUFdCTElOVVg7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyNWQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIFBSSVNNMl9VU0IKKwl0cmlzdGF0ZSAiUHJpc20yLjUgVVNCIGRyaXZlciIKKwlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgVVNCCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyB0aGUgd2xhbi1uZyBwcmlzbSAyLjUgVVNCIGRyaXZlciBmb3IgYSB3aWRlIHJhbmdlIG9mCisJICBvbGQgVVNCIHdpcmVsZXNzIGRldmljZXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHByaXNtMl91c2IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2I1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK29iai0kKENPTkZJR19QUklTTTJfVVNCKSArPSBwcmlzbTJfdXNiLm8KK29iai0kKENPTkZJR19QUklTTTJfVVNCKSArPSBwODAyMTEubworCitwODAyMTEtb2JqcyA6PSBwODAyMTFtb2QubyBcCisJCXA4MDIxMWNvbnYubyBcCisJCXA4MDIxMXJlcS5vIFwKKwkJcDgwMjExd2VwLm8gXAorCQlwODAyMTF3ZXh0Lm8gXAorCQlwODAyMTFuZXRkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MGU0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9SRUFETUUKQEAgLTAsMCArMSw4IEBACitUT0RPOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gc3BhcnNlIHdhcm5pbmdzCisJLSBMaW5kZW50IGNsZWFudXBzCisJLSBtb3ZlIHRvIHVzZSB0aGUgaW4ta2VybmVsIHdpcmVsZXNzIHN0YWNrCisJLSBwb3NzaWJsZSBlbmFibGUgdGhlIHBjbWNpYSBhbmQgcGNpIHBvcnRpb25zIG9mIHRoZSBkcml2ZXIKKworUGxlYXNlIHNlbmQgYWxsIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGRmM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5jCkBAIC0wLDAgKzEsNDAxOCBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvaGZhMzg0eC5jCisqCisqIEltcGxlbWVudHMgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgSW50ZXJzaWwgaGZhMzg0eCBNQUMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGltcGxlbWVudHMgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgcHJpc20yL2hmYTM4NHgKKyogODAyLjExIE1BQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgaG9zdCBpbnRlcmZhY2UuCisqCisqIFRoZSBmdW5jdGlvbnMgY2FuIGJlIGNvbnNpZGVyZWQgdG8gcmVwcmVzZW50IHNldmVyYWwgbGV2ZWxzIG9mCisqIGFic3RyYWN0aW9uLiAgVGhlIGxvd2VzdCBsZXZlbCBmdW5jdGlvbnMgYXJlIHNpbXBseSBDLWNhbGxhYmxlIHdyYXBwZXJzCisqIGFyb3VuZCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGUgbmV4dCBoaWdoZXIgbGV2ZWwgcmVwcmVzZW50cyBDLWNhbGxhYmxlCisqIHByaXNtMiBBUEkgZnVuY3Rpb25zIHRoYXQgbWF0Y2ggdGhlIEludGVyc2lsIGRvY3VtZW50YXRpb24gYXMgY2xvc2VseQorKiBhcyBpcyByZWFzb25hYmxlLiAgVGhlIG5leHQgaGlnaGVyIGxheWVyIGltcGxlbWVudHMgY29tbW9uIHNlcXVlbmNlcworKiBvZiBpbnZva2F0aW9ucyBvZiB0aGUgQVBJIGxheWVyIChlLmcuIHdyaXRlIHRvIGJhcCwgZm9sbG93ZWQgYnkgY21kKS4KKyoKKyogQ29tbW9uIHNlcXVlbmNlczoKKyogaGZhMzg0eF9kcnZyX3h4eAlIaWdoZXN0IGxldmVsIGFic3RyYWN0aW9ucyBwcm92aWRlZCBieSB0aGUKKyoJCQloZmEzODR4IGNvZGUuICBUaGV5IGFyZSBkcml2ZXIgZGVmaW5lZCB3cmFwcGVycworKgkJCWZvciBjb21tb24gc2VxdWVuY2VzLiAgVGhlc2UgZnVuY3Rpb25zIGdlbmVyYWxseQorKgkJCXVzZSB0aGUgc2VydmljZXMgb2YgdGhlIGxvd2VyIGxldmVscy4KKyoKKyogaGZhMzg0eF9kcnZyX3h4eGNvbmZpZyAgQW4gZXhhbXBsZSBvZiB0aGUgZHJ2ciBsZXZlbCBhYnN0cmFjdGlvbi4gVGhlc2UKKyoJCQlmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGZvciB0aGUgUklEIGdldC9zZXQKKyoJCQlzZXF1ZW5jZS4gVGhleSAJY2FsbCBjb3B5X1t0b3xmcm9tXV9iYXAoKSBhbmQKKyoJCQljbWRfYWNjZXNzKCkuCVRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHRoZQorKgkJCVJJRHMgYW5kIGJ1ZmZlcnMgd2l0aG91dCB2YWxpZGF0aW9uLiAgVGhlIGNhbGxlcgorKgkJCWlzIHJlc3BvbnNpYmxlIGZvciB0aGF0LgorKgorKiBBUEkgd3JhcHBlciBmdW5jdGlvbnM6CisqIGhmYTM4NHhfY21kX3h4eAlmdW5jdGlvbnMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGUgZi93IGNvbW1hbmRzLgorKgkJCVRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY29ycmVzcG9uZCB0byBlYWNoIGNvbW1hbmQKKyoJCQlhcmd1bWVudCwgZXZlbiBjb21tYW5kIGFyZ3VtZW50cyB0aGF0IGdldCBwYWNrZWQKKyoJCQlpbnRvIHNpbmdsZSByZWdpc3RlcnMuICBUaGVzZSBmdW5jdGlvbnMgX2p1c3RfCisqCQkJaXNzdWUgdGhlIGNvbW1hbmQgYnkgc2V0dGluZyB0aGUgY21kL3Bhcm0gcmVncworKgkJCSYgcmVhZGluZyB0aGUgc3RhdHVzL3Jlc3AgcmVncy4gIEFkZGl0aW9uYWwKKyoJCQlhY3Rpdml0aWVzIHJlcXVpcmVkIHRvIGZ1bGx5IHVzZSBhIGNvbW1hbmQKKyoJCQkocmVhZC93cml0ZSBmcm9tL3RvIGJhcCwgZ2V0L3NldCBpbnQgc3RhdHVzIGV0Yy4pCisqCQkJYXJlIGltcGxlbWVudGVkIHNlcGFyYXRlbHkuICBUaGluayBvZiB0aGVzZSBhcworKgkJCUMtY2FsbGFibGUgcHJpc20yIGNvbW1hbmRzLgorKgorKiBMb3dlc3QgTGF5ZXIgRnVuY3Rpb25zOgorKiBoZmEzODR4X2RvY21kX3h4eAlUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBzZXF1ZW5jZSByZXF1aXJlZAorKgkJCXRvIGlzc3VlIGFueSBwcmlzbTIgY29tbWFuZC4gIFByaW1hcmlseSB1c2VkIGJ5IHRoZQorKgkJCWhmYTM4NHhfY21kX3h4eCBmdW5jdGlvbnMuCisqCisqIGhmYTM4NHhfYmFwX3h4eAlCQVAgcmVhZC93cml0ZSBhY2Nlc3MgZnVuY3Rpb25zLgorKgkJCU5vdGU6IHdlIHVzdWFsbHkgdXNlIEJBUDAgZm9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAorKgkJCSBhbmQgQkFQMSBmb3IgaW50ZXJydXB0IGNvbnRleHQuCisqCisqIGhmYTM4NHhfZGxfeHh4CWRvd25sb2FkIHJlbGF0ZWQgZnVuY3Rpb25zLgorKgorKiBEcml2ZXIgU3RhdGUgSXNzdWVzOgorKiBOb3RlIHRoYXQgdGhlcmUgYXJlIHR3byBwYWlycyBvZiBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlCisqICdpbml0aWFsaXplZCcgYW5kICdydW5uaW5nJyBzdGF0ZXMgb2YgdGhlIGh3L01BQyBjb21iby4gIFRoZSBmb3VyCisqIGZ1bmN0aW9ucyBhcmUgY3JlYXRlKCksIGRlc3Ryb3koKSwgc3RhcnQoKSwgYW5kIHN0b3AoKS4gIGNyZWF0ZSgpCisqIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBoZmEzODR4XyoKKyogZnVuY3Rpb25zIGFuZCBkZXN0cm95KCkgY2xlYW5zIHRoZW0gdXAuICBUaGUgc3RhcnQoKSBmdW5jdGlvbiBnZXRzCisqIHRoZSBhY3R1YWwgaGFyZHdhcmUgcnVubmluZyBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIFRoZSBzdG9wKCkKKyogZnVuY3Rpb24gc2h1dHMgdGhlIGhhcmR3YXJlIGRvd24uICBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlOgorKiBjcmVhdGUoKQorKiAgLgorKiAgLiAgU2VsZiBjb250YWluZWQgdGVzdCByb3V0aW5lcyBjYW4gcnVuIGhlcmUsIHBhcnRpY3VsYXJseQorKiAgLiAgY29yZXJlc2V0KCkgYW5kIHRlc3RfaG9zdGlmKCkuCisqICAuCisqIHN0YXJ0KCkKKyogIC4KKyogIC4gIERvIGludGVyZXN0aW5nIHRoaW5ncyB3LyB0aGUgaGFyZHdhcmUKKyogIC4KKyogc3RvcCgpCisqIGRlc3Ryb3koKQorKgorKiBOb3RlIHRoYXQgZGVzdHJveSgpIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIHN0b3AoKSBmaXJzdC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZworI2luY2x1ZGUgInZlcnNpb24uaCIKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisjaW5jbHVkZSA8bGludXgvdHF1ZXVlLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2VuZGlmCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykgKQorI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2VuZGlmCisKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpKQorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisvLyBYWFhYICNkZWZpbmUgQ01EX0lSUQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCitzdGF0aWMgY29uc3QgVUlOVDE2IGNyYzE2dGFiWzI1Nl0gPQoreworCTB4MDAwMCwgMHhjMGMxLCAweGMxODEsIDB4MDE0MCwgMHhjMzAxLCAweDAzYzAsIDB4MDI4MCwgMHhjMjQxLAorCTB4YzYwMSwgMHgwNmMwLCAweDA3ODAsIDB4Yzc0MSwgMHgwNTAwLCAweGM1YzEsIDB4YzQ4MSwgMHgwNDQwLAorCTB4Y2MwMSwgMHgwY2MwLCAweDBkODAsIDB4Y2Q0MSwgMHgwZjAwLCAweGNmYzEsIDB4Y2U4MSwgMHgwZTQwLAorCTB4MGEwMCwgMHhjYWMxLCAweGNiODEsIDB4MGI0MCwgMHhjOTAxLCAweDA5YzAsIDB4MDg4MCwgMHhjODQxLAorCTB4ZDgwMSwgMHgxOGMwLCAweDE5ODAsIDB4ZDk0MSwgMHgxYjAwLCAweGRiYzEsIDB4ZGE4MSwgMHgxYTQwLAorCTB4MWUwMCwgMHhkZWMxLCAweGRmODEsIDB4MWY0MCwgMHhkZDAxLCAweDFkYzAsIDB4MWM4MCwgMHhkYzQxLAorCTB4MTQwMCwgMHhkNGMxLCAweGQ1ODEsIDB4MTU0MCwgMHhkNzAxLCAweDE3YzAsIDB4MTY4MCwgMHhkNjQxLAorCTB4ZDIwMSwgMHgxMmMwLCAweDEzODAsIDB4ZDM0MSwgMHgxMTAwLCAweGQxYzEsIDB4ZDA4MSwgMHgxMDQwLAorCTB4ZjAwMSwgMHgzMGMwLCAweDMxODAsIDB4ZjE0MSwgMHgzMzAwLCAweGYzYzEsIDB4ZjI4MSwgMHgzMjQwLAorCTB4MzYwMCwgMHhmNmMxLCAweGY3ODEsIDB4Mzc0MCwgMHhmNTAxLCAweDM1YzAsIDB4MzQ4MCwgMHhmNDQxLAorCTB4M2MwMCwgMHhmY2MxLCAweGZkODEsIDB4M2Q0MCwgMHhmZjAxLCAweDNmYzAsIDB4M2U4MCwgMHhmZTQxLAorCTB4ZmEwMSwgMHgzYWMwLCAweDNiODAsIDB4ZmI0MSwgMHgzOTAwLCAweGY5YzEsIDB4Zjg4MSwgMHgzODQwLAorCTB4MjgwMCwgMHhlOGMxLCAweGU5ODEsIDB4Mjk0MCwgMHhlYjAxLCAweDJiYzAsIDB4MmE4MCwgMHhlYTQxLAorCTB4ZWUwMSwgMHgyZWMwLCAweDJmODAsIDB4ZWY0MSwgMHgyZDAwLCAweGVkYzEsIDB4ZWM4MSwgMHgyYzQwLAorCTB4ZTQwMSwgMHgyNGMwLCAweDI1ODAsIDB4ZTU0MSwgMHgyNzAwLCAweGU3YzEsIDB4ZTY4MSwgMHgyNjQwLAorCTB4MjIwMCwgMHhlMmMxLCAweGUzODEsIDB4MjM0MCwgMHhlMTAxLCAweDIxYzAsIDB4MjA4MCwgMHhlMDQxLAorCTB4YTAwMSwgMHg2MGMwLCAweDYxODAsIDB4YTE0MSwgMHg2MzAwLCAweGEzYzEsIDB4YTI4MSwgMHg2MjQwLAorCTB4NjYwMCwgMHhhNmMxLCAweGE3ODEsIDB4Njc0MCwgMHhhNTAxLCAweDY1YzAsIDB4NjQ4MCwgMHhhNDQxLAorCTB4NmMwMCwgMHhhY2MxLCAweGFkODEsIDB4NmQ0MCwgMHhhZjAxLCAweDZmYzAsIDB4NmU4MCwgMHhhZTQxLAorCTB4YWEwMSwgMHg2YWMwLCAweDZiODAsIDB4YWI0MSwgMHg2OTAwLCAweGE5YzEsIDB4YTg4MSwgMHg2ODQwLAorCTB4NzgwMCwgMHhiOGMxLCAweGI5ODEsIDB4Nzk0MCwgMHhiYjAxLCAweDdiYzAsIDB4N2E4MCwgMHhiYTQxLAorCTB4YmUwMSwgMHg3ZWMwLCAweDdmODAsIDB4YmY0MSwgMHg3ZDAwLCAweGJkYzEsIDB4YmM4MSwgMHg3YzQwLAorCTB4YjQwMSwgMHg3NGMwLCAweDc1ODAsIDB4YjU0MSwgMHg3NzAwLCAweGI3YzEsIDB4YjY4MSwgMHg3NjQwLAorCTB4NzIwMCwgMHhiMmMxLCAweGIzODEsIDB4NzM0MCwgMHhiMTAxLCAweDcxYzAsIDB4NzA4MCwgMHhiMDQxLAorCTB4NTAwMCwgMHg5MGMxLCAweDkxODEsIDB4NTE0MCwgMHg5MzAxLCAweDUzYzAsIDB4NTI4MCwgMHg5MjQxLAorCTB4OTYwMSwgMHg1NmMwLCAweDU3ODAsIDB4OTc0MSwgMHg1NTAwLCAweDk1YzEsIDB4OTQ4MSwgMHg1NDQwLAorCTB4OWMwMSwgMHg1Y2MwLCAweDVkODAsIDB4OWQ0MSwgMHg1ZjAwLCAweDlmYzEsIDB4OWU4MSwgMHg1ZTQwLAorCTB4NWEwMCwgMHg5YWMxLCAweDliODEsIDB4NWI0MCwgMHg5OTAxLCAweDU5YzAsIDB4NTg4MCwgMHg5ODQxLAorCTB4ODgwMSwgMHg0OGMwLCAweDQ5ODAsIDB4ODk0MSwgMHg0YjAwLCAweDhiYzEsIDB4OGE4MSwgMHg0YTQwLAorCTB4NGUwMCwgMHg4ZWMxLCAweDhmODEsIDB4NGY0MCwgMHg4ZDAxLCAweDRkYzAsIDB4NGM4MCwgMHg4YzQxLAorCTB4NDQwMCwgMHg4NGMxLCAweDg1ODEsIDB4NDU0MCwgMHg4NzAxLCAweDQ3YzAsIDB4NDY4MCwgMHg4NjQxLAorCTB4ODIwMSwgMHg0MmMwLCAweDQzODAsIDB4ODM0MSwgMHg0MTAwLCAweDgxYzEsIDB4ODA4MSwgMHg0MDQwCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCitleHRlcm4gaW50IHByaXNtMl9kZWJ1ZzsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9kdGltKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKK3N0YXRpYyB2b2lkICAgICBoZmEzODR4X2JhcF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgdm9pZAloZmEzODR4X2ludF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfcngod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworI2lmZGVmIENNRF9JUlEKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X2NtZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworI2VuZGlmCitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCVVJTlQxNiByeGZpZCwgaGZhMzg0eF9yeF9mcmFtZV90ICpyeGRlc2MpOworc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfYWxsb2Mod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworc3RhdGljIGludCBoZmEzODR4X2RvY21kX3dhaXQoIGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpOworCitzdGF0aWMgaW50IGhmYTM4NHhfZGxfZG9jbWRfd2FpdCggaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCk7CisKK3N0YXRpYyBVSU5UMTYKK2hmYTM4NHhfbWtjcmMxNihVSU5UOCAqcCwgaW50IGxlbik7CisKK2ludCBoZmEzODR4X2NvcHlfdG9fYmFwNChoZmEzODR4X3QgKmh3LCBVSU5UMTYgYmFwLCBVSU5UMTYgaWQsIFVJTlQxNiBvZmZzZXQsCisJCQkgdm9pZCAqYnVmLCBVSU5UIGxlbiwgdm9pZCogYnVmMiwgVUlOVCBsZW4yLAorCQkJIHZvaWQgKmJ1ZjMsIFVJTlQgbGVuMywgdm9pZCogYnVmNCwgVUlOVCBsZW40KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKK3N0YXRpYyBVSU5UMTYKK3R4ZmlkX3F1ZXVlX2VtcHR5KGhmYTM4NHhfdCAqaHcpCit7CisJcmV0dXJuIChody0+dHhmaWRfaGVhZCA9PSBody0+dHhmaWRfdGFpbCkgPyAxIDogMDsKK30KKworc3RhdGljIFVJTlQxNgordHhmaWRfcXVldWVfcmVtb3ZlKGhmYTM4NHhfdCAqaHcpCit7CisJVUlOVDE2IHJlc3VsdD0gMDsKKworCWlmICh0eGZpZF9xdWV1ZV9lbXB0eShodykpIHsKKwkJV0xBTl9MT0dfREVCVUcoMywicXVldWUgZW1wdHkuXG4iKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBody0+dHhmaWRfcXVldWVbaHctPnR4ZmlkX2hlYWRdOworCQlody0+dHhmaWRfaGVhZCA9IChody0+dHhmaWRfaGVhZCArIDEpICUgaHctPnR4ZmlkX047CisJfQorCisJcmV0dXJuIChVSU5UMTYpcmVzdWx0OworfQorCitzdGF0aWMgSU5UMTYKK3R4ZmlkX3F1ZXVlX2FkZChoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsKQoreworCUlOVDE2IHJlc3VsdCA9IDA7CisKKwlpZiAoaHctPnR4ZmlkX2hlYWQgPT0gKChody0+dHhmaWRfdGFpbCArIDEpICUgaHctPnR4ZmlkX04pKSB7CisJCXJlc3VsdCA9IC0xOworCQlXTEFOX0xPR19ERUJVRygzLCJxdWV1ZSBmdWxsLlxuIik7CisJfSBlbHNlIHsKKwkJaHctPnR4ZmlkX3F1ZXVlW2h3LT50eGZpZF90YWlsXSA9IHZhbDsKKwkJcmVzdWx0ID0gaHctPnR4ZmlkX3RhaWw7CisJCWh3LT50eGZpZF90YWlsID0gKGh3LT50eGZpZF90YWlsICsgMSkgJSBody0+dHhmaWRfTjsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jcmVhdGUKKyoKKyogSW5pdGlhbGl6ZXMgdGhlIGhmYTM4NHhfdCBkYXRhIHN0cnVjdHVyZSBmb3IgdXNlLiAgTm90ZSB0aGlzCisqIGRvZXMgX25vdF8gaW50aWFsaXplIHRoZSBhY3R1YWwgaGFyZHdhcmUsIGp1c3QgdGhlIGRhdGEgc3RydWN0dXJlcworKiB3ZSB1c2UgdG8ga2VlcCB0cmFjayBvZiBpdHMgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJaXJxCQlkZXZpY2UgaXJxIG51bWJlcgorKglpb2Jhc2UJCVtwY21jaWFdIGkvbyBiYXNlIGFkZHJlc3MgZm9yIHJlZ2lzdGVyIGFjY2VzcworKgkJCVtwY2ldIHplcm8KKyoJCQlbcGx4XSBpL28gYmFzZSBhZGRyZXNzIGZvciByZWdpc3RlciBhY2Nlc3MKKyoJbWVtYmFzZQkJW3BjbWNpYV0gcGNtY2lhX2NzICJsaW5rIiBwb2ludGVyCisqCQkJW3BjaV0gbWVtb3J5IGJhc2UgYWRkcmVzcyBmb3IgcmVnaXN0ZXIgYWNjZXNzCisqCQkJW3BseF0gbWVtb3J5IGJhc2UgYWRkcmVzcyBmb3IgY2FyZCBhdHRyaWJ1dGUgbWVtb3J5CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgaGZhMzg0eF9jcmVhdGUoaGZhMzg0eF90ICpodywgVUlOVCBpcnEsIFVJTlQzMiBpb2Jhc2UsCisJCSAgICBVSU5UOCBfX2lvbWVtICptZW1iYXNlKQoreworCURCRkVOVEVSOworCW1lbXNldChodywgMCwgc2l6ZW9mKGhmYTM4NHhfdCkpOworCWh3LT5pcnEgPSBpcnE7CisJaHctPmlvYmFzZSA9IGlvYmFzZTsKKwlody0+bWVtYmFzZSA9IG1lbWJhc2U7CisJc3Bpbl9sb2NrX2luaXQoJihody0+Y21kbG9jaykpOworCisJLyogQkFQIHNldHVwICovCisgCXNwaW5fbG9ja19pbml0KCYoaHctPmJhcGxvY2spKTsKKwl0YXNrbGV0X2luaXQoJmh3LT5iYXBfdGFza2xldCwKKwkJICAgICBoZmEzODR4X2JhcF90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBodyk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZody0+Y21kcSk7CisJc2VtYV9pbml0KCZody0+aW5mb2ZpZF9zZW0sIDEpOworCisgICAgICAgIGh3LT50eGZpZF9oZWFkID0gMDsKKyAgICAgICAgaHctPnR4ZmlkX3RhaWwgPSAwOworICAgICAgICBody0+dHhmaWRfTiA9IEhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVg7CisgICAgICAgIG1lbXNldChody0+dHhmaWRfcXVldWUsIDAsIHNpemVvZihody0+dHhmaWRfcXVldWUpKTsKKworCWh3LT5pc3JhbTE2ID0gMTsKKworCS8qIEluaXQgdGhlIGF1dGggcXVldWUgaGVhZCAqLworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmh3LT5hdXRocSk7CisKKwlJTklUX1dPUksyKCZody0+bGlua19iaCwgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIpOworCisgICAgICAgIElOSVRfV09SSzIoJmh3LT5jb21tc3F1YWxfYmgsIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIpOworCisJaW5pdF90aW1lcigmaHctPmNvbW1zcXVhbF90aW1lcik7CisJaHctPmNvbW1zcXVhbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGh3OworCWh3LT5jb21tc3F1YWxfdGltZXIuZnVuY3Rpb24gPSBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyOworCisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kZXN0cm95CisqCisqIFBhcnRuZXIgdG8gaGZhMzg0eF9jcmVhdGUoKS4gIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBodworKiBzdHJ1Y3R1cmUgc28gdGhhdCBpdCBjYW4gYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIHNpbXBsZQorKiBrZnJlZS4gIEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuICBJZiwgYXQgc29tZQorKiBwb2ludCBpbiB0aGUgZnV0dXJlLCBhbiBodyBpbiB0aGUgJ3NodXRkb3duJyBzdGF0ZSByZXF1aXJlcyBhICdkZWVwJworKiBrZnJlZSwgdGhpcyBpcyB3aGVyZSBpdCBzaG91bGQgYmUgZG9uZS4gIE5vdGUgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uCisqIGlzIGNhbGxlZCBvbiBhIF9ydW5uaW5nXyBodyBzdHJ1Y3R1cmUsIHRoZSBkcnZyX3N0b3AoKSBmdW5jdGlvbiBpcworKiBjYWxsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZywgdGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBmYWlsLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2Rlc3Ryb3koIGhmYTM4NHhfdCAqaHcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCURCRkVOVEVSOworCisJaWYgKCBody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkgeworCQloZmEzODR4X2RydnJfc3RvcChodyk7CisJfQorCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUFJFSU5JVDsKKworCWlmIChody0+c2NhbnJlc3VsdHMpIHsKKwkJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKKwkJaHctPnNjYW5yZXN1bHRzID0gTlVMTDsKKwl9CisKKyAgICAgICAgLyogTm93IHRvIGNsZWFuIG91dCB0aGUgYXV0aCBxdWV1ZSAqLworICAgICAgICB3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7CisgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOworICAgICAgICB9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9nZXRjb25maWcKKyoKKyogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byByZWFkIGEgY29uZmlnL2luZm8gaXRlbS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglyaWQJCWNvbmZpZy9pbmZvIHJlY29yZCBpZCAoaG9zdCBvcmRlcikKKyoJYnVmCQlob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlci4gIFVwb24gcmV0dXJuIGl0IHdpbGwKKyoJCQljb250YWluIHRoZSBib2R5IHBvcnRpb24gb2YgdGhlIHJlY29yZCAobWludXMgdGhlCisqCQkJUklEIGFuZCBsZW4pLgorKglsZW4JCWJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzLCBzaG91bGQgbWF0Y2ggcmVjb3JkIGxlbmd0aCkKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoJLUVOT0RBVEEgCWxlbmd0aCBtaXNtYXRjaCBiZXR3ZWVuIGFyZ3VtZW50IGFuZCByZXRyaWV2ZWQKKyoJCQlyZWNvcmQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pCit7CisJaW50IAkJcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2FjY2VzcyggaHcsIDAsIHJpZCwgYnVmLCBsZW4pOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSBuZWNlc3NhcnkgdG8gd3JpdGUgYSBjb25maWcvaW5mbyBpdGVtLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJpZAkJY29uZmlnL2luZm8gcmVjb3JkIGlkIChpbiBob3N0IG9yZGVyKQorKglidWYJCWhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyCisqCWxlbgkJYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCURCRkVOVEVSOworCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfYWNjZXNzKCBodywgMSwgcmlkLCBidWYsIGxlbik7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yZWFkcGRhCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSB0byByZWFkIHRoZSBQREEgc3BhY2UuICBOb3RlIHRoZXJlIGlzIG5vCisqIGRydnJfd3JpdGVwZGEoKSBmdW5jdGlvbi4gIFdyaXRpbmcgYSBQREEgaXMKKyogZ2VuZXJhbGx5IGltcGxlbWVudGVkIGJ5IGEgY2FsbGluZyBjb21wb25lbnQgdmlhIGNhbGxzIHRvCisqIGNtZF9kb3dubG9hZCBhbmQgd3JpdGluZyB0byB0aGUgZmxhc2ggZG93bmxvYWQgYnVmZmVyIHZpYSB0aGUKKyogYXV4IHJlZ3MuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYnVmCQlidWZmZXIgdG8gc3RvcmUgUERBIGluCisqCWxlbgkJYnVmZmVyIGxlbmd0aAorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgktRVRJTUVPVVQJdGltb3V0IHdhaXRpbmcgZm9yIHRoZSBjbWQgcmVncyB0byBiZWNvbWUKKyoJCQlhdmFpbGFibGUsIG9yIHdhaXRpbmcgZm9yIHRoZSBjb250cm9sIHJlZworKgkJCXRvIGluZGljYXRlIHRoZSBBdXggcG9ydCBpcyBlbmFibGVkLgorKgktRU5PREFUQQl0aGUgYnVmZmVyIGRvZXMgTk9UIGNvbnRhaW4gYSB2YWxpZCBQREEuCisqCQkJRWl0aGVyIHRoZSBjYXJkIFBEQSBpcyBiYWQsIG9yIHRoZSBhdXhkYXRhCisqCQkJcmVhZHMgYXJlIGdpdmluZyB1cyBnYXJiYWdlLgorCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCBvciBub24tY2FyZCBpbnRlcnJ1cHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfcmVhZHBkYShoZmEzODR4X3QgKmh3LCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMTYJCSpwZGEgPSBidWY7CisJaW50CQlwZGFvayA9IDA7CisJaW50CQltb3JlcGRycyA9IDE7CisJaW50CQljdXJycGRyID0gMDsJLyogd29yZCBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgcGRyICovCisJaW50CQlpOworCVVJTlQxNgkJcGRybGVuOwkJLyogcGRyIGxlbmd0aCBpbiBieXRlcywgaG9zdCBvcmRlciAqLworCVVJTlQxNgkJcGRyY29kZTsJLyogcGRyIGNvZGUsIGhvc3Qgb3JkZXIgKi8KKwlVSU5UMTYJCWNyYzsKKwlVSU5UMTYJCXBkYWNyYzsKKwlzdHJ1Y3QgcGRhbG9jIHsKKwkJVUlOVDMyCWNhcmRhZGRyOworCQlVSU5UMTYJYXV4Y3RsOworCX0gcGRhbG9jW10gPQorCXsKKwkJeyBIRkEzODQyX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX05WfSwKKwkJeyBIRkEzODQyX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX0VYVERTfSwKKwkJeyBIRkEzODQxX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX05WfSwKKwkJeyBIRkEzODQxX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX0VYVERTfSwKKwkJeyBIRkEzODQxX1BEQV9CT0dVU19CQVNFLAlIRkEzODR4X0FVWF9DVExfTlZ9CisJfTsKKworCURCRkVOVEVSOworCS8qIENoZWNrIGZvciBhdXggYXZhaWxhYmxlICovCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShodywgMCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsImF1eF9lbmFibGUoKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogUmVhZCB0aGUgcGRhIGZyb20gZWFjaCBrbm93biBhZGRyZXNzLiAgKi8KKwlmb3IgKCBpID0gMDsgaSA8IChzaXplb2YocGRhbG9jKS9zaXplb2YocGRhbG9jWzBdKSk7IGkrKykgeworCQlXTEFOX0xPR19ERUJVRyggMywgIkNoZWNraW5nIFBEQUAoMHglMDh4LCVzKVxuIiwKKwkJCXBkYWxvY1tpXS5jYXJkYWRkciwKKwkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gSEZBMzg0eF9BVVhfQ1RMX05WID8KKwkJCSJDVExfTlYiIDogIkNUTF9FWFREUyIpOworCisJCS8qIENvcHkgYnVmc2l6ZSBieXRlcyBmcm9tIG91ciBjdXJyZW50IHBkYWxvYyAqLworCQloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsCisJCQlwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQlwZGFsb2NbaV0uYXV4Y3RsLAorCQkJYnVmLAorCQkJbGVuKTsKKworCQkvKiBUZXN0IGZvciBnYXJiYWdlICovCisJCS8qIFRyYXZlcnNlIHRoZSBQRFIgbGlzdCBMb29raW5nIGZvciBQREEtRU5EICovCisJCXBkYW9rID0gMTsJLyogaW50aWFsbHkgYXNzdW1lIGdvb2QgKi8KKwkJbW9yZXBkcnMgPSAxOworCQljdXJycGRyID0gMDsKKwkJd2hpbGUgKCBwZGFvayAmJiBtb3JlcGRycyApIHsKKwkJCXBkcmxlbiA9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICogMjsKKwkJCXBkcmNvZGUgPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHIrMV0pOworCisJCQkvKiBUZXN0IGZvciBjb21wbGV0aW9uIGF0IEVORCByZWNvcmQgKi8KKwkJCWlmICggcGRyY29kZSA9PSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBICkgeworCQkJCWlmICggcGRybGVuID09IDQgKSB7CisJCQkJCW1vcmVwZHJzID0gMDsKKwkJCQkJLyogQ2FsY3VsYXRlIENSQy0xNiBhbmQgY29tcGFyZSB0byBQREEKKwkJCQkJICogdmFsdWUuICBOb3RlIHRoZSBhZGRpdGlvbiBvZiAyIHdvcmRzCisJCQkJCSAqIGZvciBFTkRSRUMubGVuIGFuZCBFTkRSRUMuY29kZQorCQkJCQkgKiBmaWVsZHMuCisJCQkJCSAqLworCQkJCQljcmMgPSBoZmEzODR4X21rY3JjMTYoIChVSU5UOCopcGRhLAorCQkJCQkJKGN1cnJwZHIgKyAyKSAqIHNpemVvZihVSU5UMTYpKTsKKwkJCQkJcGRhY3JjID1oZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHIrMl0pOworCQkJCQlpZiAoIGNyYyAhPSBwZGFjcmMgKSB7CisJCQkJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCQkJIlBEQSBjcmMgZmFpbGVkOiIKKwkJCQkJCSJjYWxjX2NyYz0weCUwNHgsIgorCQkJCQkJInBkcl9jcmM9MHglMDR4LlxuIiwKKwkJCQkJCWNyYywgcGRhY3JjKTsKKwkJCQkJCXBkYW9rID0gMDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCVdMQU5fTE9HX0RFQlVHKDMsCisJCQkJCSJFTkQgcmVjb3JkIGRldGVjdGVkIHcvICIKKwkJCQkJImxlbiglZCkgIT0gMiwgYXNzdW1pbmcgYmFkIFBEQVxuIiwKKwkJCQkJcGRybGVuKTsKKwkJCQkJcGRhb2sgPSAwOworCisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBUZXN0IHRoZSByZWNvcmQgbGVuZ3RoICovCisJCQlpZiAoIHBkcmxlbiA+IEhGQTM4NHhfUERSX0xFTl9NQVggfHwgcGRybGVuID09IDApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCQkicGRybGVuIGZvciBhZGRyZXNzICMlZCAiCisJCQkJCSJhdCAlI3g6JSN4OiVkXG4iLAorCQkJCQlpLCBwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQkJCXBkYWxvY1tpXS5hdXhjdGwsIHBkcmxlbik7CisJCQkJV0xBTl9MT0dfREVCVUcoMywicGRybGVuIGludmFsaWQ9JWRcbiIsCisJCQkJCXBkcmxlbik7CisJCQkJcGRhb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBNb3ZlIHRvIHRoZSBuZXh0IHBkciAqLworCQkJaWYgKCBtb3JlcGRycyApIHsKKwkJCQkvKiBub3RlIHRoZSBhY2Nlc3MgdG8gcGRhW10sIHdlIG5lZWQgd29yZHMgKi8KKwkJCQljdXJycGRyICs9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICsgMTsKKwkJCQlpZiAoY3VycnBkcipzaXplb2YoVUlOVDE2KSA+IGxlbikgeworCQkJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCQkiRGlkbid0IGZpbmQgUERBX0VORCBpbiBidWZmZXIsICIKKwkJCQkJInRyeWluZyBuZXh0IGxvY2F0aW9uLlxuIik7CisJCQkJCXBkYW9rID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICggcGRhb2sgKSB7CisJCQlXTEFOX0xPR19JTkZPKAorCQkJCSJQREEgUmVhZCBmcm9tIDB4JTA4eCBpbiAlcyBzcGFjZS5cbiIsCisJCQkJcGRhbG9jW2ldLmNhcmRhZGRyLAorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMCA/ICJFWFREUyIgOgorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMSA/ICJOViIgOgorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMiA/ICJQSFkiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDMgPyAiSUNTUkFNIiA6CisJCQkJIjxib2d1cyBhdXhjdGw+Iik7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXN1bHQgPSBwZGFvayA/IDAgOiAtRU5PREFUQTsKKworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygzLCJGYWlsdXJlOiBwZGEgaXMgbm90IG9rYXlcbiIpOworCX0KKworCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogbWtwZGFfY3JjCisqCisqIENhbGN1bGF0ZXMgdGhlIENSQzE2IGZvciB0aGUgZ2l2ZW4gUERBIGFuZCBpbnNlcnRzIHRoZSB2YWx1ZQorKiBpbnRvIHRoZSBlbmQgcmVjb3JkLgorKgorKiBBcmd1bWVudHM6CisqCXBkYQlwdHIgdG8gdGhlIFBEQSBkYXRhIHN0cnVjdHVyZS4KKyoKKyogUmV0dXJuczoKKyoJMAktIHN1Y2Nlc3MKKyoJfjAJLSBmYWlsdXJlIChwcm9iYWJseSBhbiBlcnJubykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIFVJTlQxNgoraGZhMzg0eF9ta2NyYzE2KFVJTlQ4ICpwLCBpbnQgbGVuKQoreworCVVJTlQxNgljcmMgPSAwOworCVVJTlQ4CSpsaW0gPSBwICsgbGVuOworCisJd2hpbGUgKHAgPCBsaW0pIHsKKwkJY3JjID0gKGNyYyA+PiA4ICkgXiBjcmMxNnRhYlsoY3JjICYgMHhmZikgXiAqcCsrXTsKKwl9CisKKwlyZXR1cm4gY3JjOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlCisqCisqIEJlZ2lucyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCBjYWxscyBjbWRfZG93bmxvYWQgd2l0aCB0aGUKKyogRU5BQkxFX1ZPTEFUSUxFIHN1YmNvbW1hbmQgYW5kIHRoZSBleGVhZGRyIGFyZ3VtZW50LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWV4ZWFkZHIJCXRoZSBjYXJkIGV4ZWN1dGlvbiBhZGRyZXNzIHRoYXQgd2lsbCBiZQorKiAgICAgICAgICAgICAgICAgICAgICAganVtcGVkIHRvIHdoZW4gcmFtZGxfZGlzYWJsZSgpIGlzIGNhbGxlZAorKgkJCShob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBleGVhZGRyKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMTYJCWxvd2FkZHI7CisJVUlOVDE2CQloaWFkZHI7CisJaW50CQlpOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgYSBwb3J0IGlzbid0IGFjdGl2ZSAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKCBody0+cG9ydF9lbmFibGVkW2ldICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwiQ2FuJ3QgZG93bmxvYWQgd2l0aCBhIHBvcnQgZW5hYmxlZC5cbiIpOworCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEICkgeworCQlXTEFOX0xPR19ERUJVRygxLCJEb3dubG9hZCBzdGF0ZSBub3QgZGlzYWJsZWQuXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCS8qIEFyZSB3ZSBzdXBwb3NlZCB0byBnbyBpbnRvIGdlbmVzaXMgbW9kZT8gKi8KKwlpZiAoZXhlYWRkciA9PSAweDNmMDAwMCkgeworCQlVSU5UMTYgaW5pdHNlcVsyXSA9IHsgMHhlMTAwLCAweGZmYTEgfTsKKwkJVUlOVDE2IHJlYWRidWZbMl07CisJCVVJTlQ4IGhjciA9IDB4MGY7IC8qIERlZmF1bHQgdG8geDE2IFNSQU0gKi8KKwkJaHctPmlzcmFtMTYgPSAxOworCisJCVdMQU5fTE9HX0RFQlVHKDEsICJEcm9wcGluZyBpbnRvIEdlbmVzaXMgbW9kZVxuIik7CisKKwkJLyogSXNzdWUgY2FyZCByZXNldCBhbmQgZW5hYmxlIGF1eCBwb3J0ICovCisJCWhmYTM4NHhfY29yZXJlc2V0KGh3LCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWhmYTM4NHhfY21kX2F1eF9lbmFibGUoaHcsIDEpOworCisJCS8qIEdlbmVzaXMgc2V0ICovCisJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJICAgIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisKKwkJaGZhMzg0eF9jb3JlcmVzZXQoaHcsIHByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkgIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCBoY3IpOworCisJCS8qIFZhbGlkYXRlIG1lbW9yeSBjb25maWcgKi8KKwkJaGZhMzg0eF9jb3B5X3RvX2F1eChodywgMHg3RTAwMzgsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJCQkgICAgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKKwkJaGZhMzg0eF9jb3B5X2Zyb21fYXV4KGh3LCAweDdFMDAzOCwgSEZBMzg0eF9BVVhfQ1RMX0VYVERTLAorCQkJCSAgICByZWFkYnVmLCBzaXplb2YoaW5pdHNlcSkpOworCQlXTEFOX0hFWF9EVU1QKDMsICJyZWFkYmFjayIsIHJlYWRidWYsIHNpemVvZihyZWFkYnVmKSk7CisKKwkJaWYgKG1lbWNtcChpbml0c2VxLCByZWFkYnVmLCBzaXplb2YocmVhZGJ1ZikpKSB7CisJCQloY3IgPSAweDFmOyAvKiB4OCBTUkFNICovCisJCQlody0+aXNyYW0xNiA9IDA7CisKKwkJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJCSAgICBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOworCQkJaGZhMzg0eF9jb3JlcmVzZXQoaHcsIHByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkJICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaGNyKTsKKworCQkJaGZhMzg0eF9jb3B5X3RvX2F1eChodywgMHg3RTAwMzgsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJCQkJICAgIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisJCQloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJCSAgICByZWFkYnVmLCBzaXplb2YoaW5pdHNlcSkpOworCQkJV0xBTl9IRVhfRFVNUCgyLCAicmVhZGJhY2siLCByZWFkYnVmLCBzaXplb2YocmVhZGJ1ZikpOworCisJCQlpZiAobWVtY21wKGluaXRzZXEsIHJlYWRidWYsIHNpemVvZihyZWFkYnVmKSkpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigiR2VuZXNpcyBtb2RlIGZhaWxlZFxuIik7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisKKwkJLyogTm93IHdlJ3JlIGluIGdlbmVzaXMgbW9kZSAqLworCQlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9HRU5FU0lTOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKSkgKSB7CisJCWdvdG8gZG9uZTsKKwl9CisJaHctPmJ1ZmluZm8ucGFnZSA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5wYWdlKTsKKwlody0+YnVmaW5mby5vZmZzZXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ub2Zmc2V0KTsKKwlody0+YnVmaW5mby5sZW4gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ubGVuKTsKKwlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAorCQkJCSYoaHctPmRsdGltZW91dCkpKSApIHsKKwkJZ290byBkb25lOworCX0KKwlody0+ZGx0aW1lb3V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5kbHRpbWVvdXQpOworCisJLyogRW5hYmxlIHRoZSBhdXggcG9ydCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfY21kX2F1eF9lbmFibGUoaHcsIDApKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwiQXV4IGVuYWJsZSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDYWxsIHRoZSBkb3dubG9hZCgxLGFkZHIpIGZ1bmN0aW9uICovCisJbG93YWRkciA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoZXhlYWRkcik7CisJaGlhZGRyID0gIEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGV4ZWFkZHIpOworCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfUkFNLAorCQkJbG93YWRkciwgaGlhZGRyLCAwKTsKKwlpZiAoIHJlc3VsdCA9PSAwKSB7CisJCS8qIFNldCB0aGUgZG93bmxvYWQgc3RhdGUgKi8KKwkJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRDsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19ERUJVRygxLCJjbWRfZG93bmxvYWQoMHglMDR4LCAweCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwKKwkJCQlsb3dhZGRyLGhpYWRkciwgcmVzdWx0KTsKKwkJLyogRGlzYWJsZSAgdGhlIGF1eCBwb3J0ICovCisJCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKKwl9CisKKyBkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgJiYKKwkgICAgICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0dFTkVTSVMgKSApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGh3LT5kbHN0YXRlID09IEhGQTM4NHhfRExTVEFURV9HRU5FU0lTKSB7CisJCWhmYTM4NHhfY29yZXJlc2V0KGh3LCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwKKwkJCQkgIGh3LT5pc3JhbTE2ID8gMHgwNzogMHgxNyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBhdXggcG9ydCAqLworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAgLCAwKTsKKworIGRvbmU6CisJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQ7CisJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlCisqCisqIFBlcmZvcm1zIGEgUkFNIGRvd25sb2FkIG9mIGEgY2h1bmsgb2YgZGF0YS4gRmlyc3QgY2hlY2tzIHRvIHNlZQorKiB0aGF0IHdlJ3JlIGluIHRoZSBSQU0gZG93bmxvYWQgc3RhdGUsIHRoZW4gdXNlcyB0aGUgYXV4IGZ1bmN0aW9ucworKiB0byAxKSBjb3B5IHRoZSBkYXRhLCAyKSByZWFkYmFjayBhbmQgY29tcGFyZS4gIFRoZSBkb3dubG9hZAorKiBzdGF0ZSBpcyB1bmFmZmVjdGVkLiAgV2hlbiBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHVzaW5nCisqIHRoaXMgZnVuY3Rpb24sIGNhbGwgZHJ2cl9yYW1kbF9kaXNhYmxlKCkgdG8gZW5kIHRoZSBkb3dubG9hZCBzdGF0ZQorKiBhbmQgcmVzdGFydCB0aGUgTUFDLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWRhZGRyCQlDYXJkIGFkZHJlc3MgdG8gd3JpdGUgdG8uIChob3N0IG9yZGVyKQorKglidWYJCVB0ciB0byBkYXRhIHRvIHdyaXRlLgorKglsZW4JCUxlbmd0aCBvZiBkYXRhIChob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGRhZGRyLCB2b2lkKiBidWYsIFVJTlQzMiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQ4CQkqdmVyYnVmOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCApICYmCisJICAgICAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9HRU5FU0lTICkgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gcmFtIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworI2lmIDAKK1dMQU5fSEVYX0RVTVAoMSwgImRsZGF0YSIsIGJ1ZiwgbGVuKTsKKyNlbmRpZgorCS8qIENvcHkgdGhlIGRhdGEgdmlhIHRoZSBhdXggcG9ydCAqLworCWhmYTM4NHhfY29weV90b19hdXgoaHcsIGRhZGRyLCBIRkEzODR4X0FVWF9DVExfRVhURFMsIGJ1ZiwgbGVuKTsKKworCS8qIENyZWF0ZSBhIGJ1ZmZlciBmb3IgdGhlIHZlcmlmeSAqLworCXZlcmJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAodmVyYnVmID09IE5VTEwgKSByZXR1cm4gMTsKKworCS8qIFJlYWQgYmFjayBhbmQgY29tcGFyZSAqLworCWhmYTM4NHhfY29weV9mcm9tX2F1eChodywgZGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywgdmVyYnVmLCBsZW4pOworCisJaWYgKCBtZW1jbXAoYnVmLCB2ZXJidWYsIGxlbikgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsInJhbWRsIHZlcmlmeSBmYWlsZWQhXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZV9zKHZlcmJ1ZiwgbGVuKTsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZQorKgorKiBCZWdpbnMgdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCByZXRyaWV2ZXMgdGhlIGZsYXNoIGRvd25sb2FkCisqIGJ1ZmZlciBsb2NhdGlvbiwgYnVmZmVyIHNpemUsIGFuZCB0aW1lb3V0IGxlbmd0aC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCWk7CisKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7CisJCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5idWZpbmZvLnBhZ2UgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ucGFnZSk7CisJaHctPmJ1ZmluZm8ub2Zmc2V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLm9mZnNldCk7CisJaHctPmJ1ZmluZm8ubGVuID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLmxlbik7CisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwKKwkJCQkmKGh3LT5kbHRpbWVvdXQpKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5kbHRpbWVvdXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmRsdGltZW91dCk7CisKKwkvKiBFbmFibGUgdGhlIGF1eCBwb3J0ICovCisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShodywgMCkpICkgeworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRDsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUuICBOb3RlIHRoYXQgdGhpcyB3aWxsIGNhdXNlIHRoZSBNQUMKKyogZmlybXdhcmUgdG8gcmVzdGFydC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50LCBzbyBJIGRvbid0ICovCisJLyogIGJvdGhlciAgdy8gdGhlIHJldHVybiB2YWx1ZSAqLworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAgLCAwKTsKKwlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRDsKKworCS8qIERpc2FibGUgdGhlIGF1eCBwb3J0ICovCisJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUKKyoKKyogUGVyZm9ybXMgYSBGTEFTSCBkb3dubG9hZCBvZiBhIGNodW5rIG9mIGRhdGEuIEZpcnN0IGNoZWNrcyB0byBzZWUKKyogdGhhdCB3ZSdyZSBpbiB0aGUgRkxBU0ggZG93bmxvYWQgc3RhdGUsIHRoZW4gc2V0cyB0aGUgZG93bmxvYWQKKyogbW9kZSwgdXNlcyB0aGUgYXV4IGZ1bmN0aW9ucyB0byAxKSBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaAorKiBidWZmZXIsIDIpIHNldHMgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSwgMykgcmVhZGJhY2sgYW5kCisqIGNvbXBhcmUuICBMYXRoZXIgcmluc2UsIHJlcGVhdCBhcyBtYW55IHRpbWVzIGFuIG5lY2Vzc2FyeSB0byBnZXQKKyogYWxsIHRoZSBnaXZlbiBkYXRhIGludG8gZmxhc2guCisqIFdoZW4gYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB1c2luZyB0aGlzIGZ1bmN0aW9uIChwb3NzaWJseQorKiByZXBlYXRlZGx5KSwgY2FsbCBkcnZyX2ZsYXNoZGxfZGlzYWJsZSgpIHRvIGVuZCB0aGUgZG93bmxvYWQgc3RhdGUKKyogYW5kIHJlc3RhcnQgdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglkYWRkcgkJQ2FyZCBhZGRyZXNzIHRvIHdyaXRlIHRvLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlQdHIgdG8gZGF0YSB0byB3cml0ZS4KKyoJbGVuCQlMZW5ndGggb2YgZGF0YSAoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGRhZGRyLCB2b2lkKiBidWYsIFVJTlQzMiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQ4CQkqdmVyYnVmOworCVVJTlQzMgkJZGxidWZhZGRyOworCVVJTlQzMgkJY3VycmxlbjsKKwlVSU5UMzIJCWN1cnJkYWRkcjsKKwlVSU5UMTYJCWRlc3RsbzsKKwlVSU5UMTYJCWRlc3RoaTsKKwlpbnQJCW53cml0ZXM7CisJaW50CQlpOworCisJREJGRU5URVI7CisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBpbiB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIkRvd25sb2FkICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCisJLyogTmVlZCBhIGZsYXQgYWRkcmVzcyBmb3IgYXJpdGhtZXRpYyAqLworCWRsYnVmYWRkciA9IEhGQTM4NHhfQUREUl9BVVhfTUtGTEFUKAorCQkJaHctPmJ1ZmluZm8ucGFnZSwKKwkJCWh3LT5idWZpbmZvLm9mZnNldCk7CisJdmVyYnVmID0ga21hbGxvYyhody0+YnVmaW5mby5sZW4sIEdGUF9LRVJORUwpOworCisjaWYgMAorV0xBTl9MT0dfV0FSTklORygiZGxidWZAMHglMDZseCBsZW49JWQgdG89JWRcbiIsIGRsYnVmYWRkciwgaHctPmJ1ZmluZm8ubGVuLCBody0+ZGx0aW1lb3V0KTsKKyNlbmRpZgorCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgdGltZXMgdG8gdG8gdGhlIGZsYXNoIHByb2cgKi8KKwlud3JpdGVzID0gbGVuIC8gaHctPmJ1ZmluZm8ubGVuOworCW53cml0ZXMgKz0gKGxlbiAlIGh3LT5idWZpbmZvLmxlbikgPyAxIDogMDsKKworCWlmICggdmVyYnVmID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZmxhc2ggdmVyaWZ5IGJ1ZmZlclxuIik7CisJCXJldHVybiAxOworCX0KKwkvKiBGb3IgZWFjaCAqLworCWZvciAoIGkgPSAwOyBpIDwgbndyaXRlczsgaSsrKSB7CisJCS8qIEdldCB0aGUgZGVzdCBhZGRyZXNzIGFuZCBsZW4gKi8KKwkJY3VycmxlbiA9IChsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpID4gaHctPmJ1ZmluZm8ubGVuID8KKwkJCQlody0+YnVmaW5mby5sZW4gOgorCQkJCShsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpOworCQljdXJyZGFkZHIgPSBkYWRkciArIChody0+YnVmaW5mby5sZW4gKiBpKTsKKwkJZGVzdGxvID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihjdXJyZGFkZHIpOworCQlkZXN0aGkgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShjdXJyZGFkZHIpOworCQlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsIGN1cnJsZW4sIGN1cnJkYWRkcik7CisjaWYgMAorV0xBTl9IRVhfRFVNUCgxLCAiZGxkYXRhIiwgYnVmKyhody0+YnVmaW5mby5sZW4qaSksIGN1cnJsZW4pOworI2VuZGlmCisJCS8qIFNldCB0aGUgZG93bmxvYWQgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9OViwKKwkJCQlkZXN0bG8sIGRlc3RoaSwgY3Vycmxlbik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoImRvd25sb2FkKE5WLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQlkZXN0bG8sIGRlc3RoaSwgY3VycmxlbiwgcmVzdWx0KTsKKwkJCWdvdG8gZXhpdF9wcm9jOworCQl9CisJCS8qIGNvcHkgdGhlIGRhdGEgdG8gdGhlIGZsYXNoIGJ1ZmZlciAqLworCQloZmEzODR4X2NvcHlfdG9fYXV4KGh3LCBkbGJ1ZmFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJCQkJYnVmKyhody0+YnVmaW5mby5sZW4qaSksIGN1cnJsZW4pOworCQkvKiBzZXQgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9OVldSSVRFLCAwLDAsMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJImRvd25sb2FkKE5WV1JJVEUsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJCWRlc3RsbywgZGVzdGhpLCBjdXJybGVuLCByZXN1bHQpOworCQkJZ290byBleGl0X3Byb2M7CisJCX0KKwkJLyogcmVhZGJhY2sgYW5kIGNvbXBhcmUsIGlmIGZhaWwuLi5iYWlsICovCisJCWhmYTM4NHhfY29weV9mcm9tX2F1eChodywKKwkJCQljdXJyZGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9OViwKKwkJCQl2ZXJidWYsIGN1cnJsZW4pOworCisJCWlmICggbWVtY21wKGJ1ZisoaHctPmJ1ZmluZm8ubGVuKmkpLCB2ZXJidWYsIGN1cnJsZW4pICkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKK2V4aXRfcHJvYzoKKyAgICAgICAgIC8qIERPSCEgVGhpcyBrZnJlZSdzIGZvciB5b3UgTWFyayA6LSkgTXkgZm9yZWhlYWQgaHVydHMuLi4gKi8KKyAgICAgICAgIGtmcmVlKHZlcmJ1Zik7CisKKwkvKiBMZWF2ZSB0aGUgZmlybXdhcmUgaW4gdGhlICdwb3N0LXByb2cnIG1vZGUuICBmbGFzaGRsX2Rpc2FibGUgd2lsbCAqLworCS8qICBhY3R1YWxseSBkaXNhYmxlIHByb2dyYW1taW5nIG1vZGUuICBSZW1lbWJlciwgdGhhdCB3aWxsIGNhdXNlIHRoZSAqLworCS8qICB0aGUgZmlybXdhcmUgdG8gZWZmZWN0aXZlbHkgcmVzZXQgaXRzZWxmLiAqLworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbml0aWFsaXplCisqCisqIElzc3VlcyB0aGUgaW5pdGlhbGl6ZSBjb21tYW5kIGFuZCBzZXRzIHRoZSBody0+c3RhdGUgYmFzZWQKKyogb24gdGhlIHJlc3VsdC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaTsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCS8qIHdlIGRvbid0IHdhbnQgdG8gYmUgaW50ZXJydXB0ZWQgZHVyaW5nIHRoZSByZXNldCAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X0lOVEVOKTsKKwloZmEzODR4X3NldHJlZyhodywgMHhmZmZmLCBIRkEzODR4X0VWQUNLKTsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5JVDsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCWlmICggcmVzdWx0ID09IDAgKSB7CisJCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCQkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7CisJCX0KKwl9CisKKyAgICAgICAgaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzCisqCisqIFNlbmQgYSBjb21tdGFsbGllcyBpbnF1aXJ5IHRvIHRoZSBNQUMuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiBhc3luYworKiBjYWxsIHRoYXQgd2lsbCByZXN1bHQgaW4gYW4gaW5mbyBmcmFtZSBhcnJpdmluZyBzb21ldGltZSBsYXRlci4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlzdWNjZXNzLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3ICkKK3sKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTlE7CisJY21kLnBhcm0wID0gSEZBMzg0eF9JVF9DT01NVEFMTElFUzsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSBlbmFibGUgY29tbWFuZCB0byBlbmFibGUgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuICBPbmx5IG1hY3BvcnQgMCBpcyB2YWxpZCAgZm9yIHN0YXRpb25zLgorKiBBUHMgbWF5IGFsc28gZW5hYmxlIG1hY3BvcnRzIDEtNi4gIE9ubHkgcG9ydHMgdGhhdCBhcmUgY3VycmVudGx5CisqIGRpc2FibGVkIG1heSBiZSBlbmFibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAoaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSkgKXsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9lbmFibGUoaHcsIG1hY3BvcnQpOworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDE7CisJCX0KKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSB0aGUgZW5hYmxlIGNvbW1hbmQgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZiB0aGUKKyogTUFDcyAncG9ydHMnLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9FTkFCTEUpIHwKKwkJICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2Rpc2FibGUKKyoKKyogSXNzdWVzIHRoZSBkaXNhYmxlIGNvbW1hbmQgdG8gc3RvcCBjb21tdW5pY2F0aW9ucyBvbiBvbmUgb2YKKyogdGhlIE1BQ3MgJ3BvcnRzJy4gIE9ubHkgbWFjcG9ydCAwIGlzIHZhbGlkICBmb3Igc3RhdGlvbnMuCisqIEFQcyBtYXkgYWxzbyBkaXNhYmxlIG1hY3BvcnRzIDEtNi4gIE9ubHkgcG9ydHMgdGhhdCBoYXZlIGJlZW4KKyogcHJldmlvdXNseSBlbmFibGVkIG1heSBiZSBkaXNhYmxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltYWNwb3J0CQlNQUMgcG9ydCBudW1iZXIgKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAhKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pICl7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZGlzYWJsZShodywgbWFjcG9ydCk7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisJCQlody0+cG9ydF9lbmFibGVkW21hY3BvcnRdID0gMDsKKwkJfQorCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2Rpc2FibGUKKyoKKyogSXNzdWVzIHRoZSBjb21tYW5kIHRvIGRpc2FibGUgYSBwb3J0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlciAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2Rpc2FibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUpIHwKKwkJICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZGlhZ25vc2UKKyoKKyogSXNzdWVzIHRoZSBkaWFnbm9zZSBjb21tYW5kIHRvIHRlc3QgdGhlOiByZWdpc3RlciBpbnRlcmZhY2UsCisqIE1BQyBjb250cm9sbGVyIChpbmNsdWRpbmcgbG9vcGJhY2spLCBFeHRlcm5hbCBSQU0sIE5vbi12b2xhdGlsZQorKiBtZW1vcnkgaW50ZWdyaXR5LCBhbmQgc3ludGhlc2l6ZXJzLiAgRm9sbG93aW5nIGV4ZWN1dGlvbiBvZiB0aGlzCisqIGNvbW1hbmQsIE1BQy9maXJtd2FyZSBhcmUgaW4gdGhlICdpbml0aWFsIHN0YXRlJy4gIFRoZXJlZm9yZSwKKyogdGhlIEluaXRpYWxpemUgY29tbWFuZCBzaG91bGQgYmUgaXNzdWVkIGFmdGVyIHN1Y2Nlc3NmdWwKKyogY29tcGxldGlvbiBvZiB0aGlzIGNvbW1hbmQuICBUaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZAorKiB3aGVuIHRoZSBNQUMgaXMgaW4gdGhlICdjb21tdW5pY2F0aW9uIGRpc2FibGVkJyBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIERJQUdfUEFUVEVSTkEgKChVSU5UMTYpMHhhYWFhKQorI2RlZmluZSBESUFHX1BBVFRFUk5CICgoVUlOVDE2KTB4NTU1NSkKKworaW50IGhmYTM4NHhfY21kX2RpYWdub3NlKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RJQUcpOworCWNtZC5wYXJtMCA9IERJQUdfUEFUVEVSTkE7CisJY21kLnBhcm0xID0gRElBR19QQVRURVJOQjsKKwljbWQucGFybTIgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9hbGxvY2F0ZQorKgorKiBJc3N1ZXMgdGhlIGFsbG9jYXRlIGNvbW1hbmQgaW5zdHJ1Y3RpbmcgdGhlIGZpcm13YXJlIHRvIGFsbG9jYXRlCisqIGEgJ2ZyYW1lIHN0cnVjdHVyZSBidWZmZXInIGluIE1BQyBjb250cm9sbGVyIFJBTS4gIFRoaXMgY29tbWFuZAorKiBkb2VzIG5vdCBwcm92aWRlIHRoZSByZXN1bHQsIGl0IG9ubHkgaW5pdGlhdGVzIG9uZSBvZiB0aGUgZi93J3MKKyogYXN5bmNocm9ub3VzIHByb2Nlc3NlcyB0byBjb25zdHJ1Y3QgdGhlIGJ1ZmZlci4gIFdoZW4gdGhlCisqIGFsbG9jYXRpb24gaXMgY29tcGxldGUsIGl0IHdpbGwgYmUgaW5kaWNhdGVkIHZpYSB0aGUgQWxsb2MKKyogYml0IGluIHRoZSBFdlN0YXQgcmVnaXN0ZXIgYW5kIHRoZSBGSUQgaWRlbnRpZnlpbmcgdGhlIGFsbG9jYXRlZAorKiBzcGFjZSB3aWxsIGJlIGF2YWlsYWJsZSBmcm9tIHRoZSBBbGxvY0ZJRCByZWdpc3Rlci4gIFNvbWUgY2FyZQorKiBzaG91bGQgYmUgdGFrZW4gd2hlbiB3YWl0aW5nIGZvciB0aGUgQWxsb2MgZXZlbnQuICBJZiBhIFR4IG9yCisqIE5vdGlmeSBjb21tYW5kIHcvIFJlY2xhaW0gaGFzIGJlZW4gcHJldmlvdXNseSBleGVjdXRlZCwgaXQncworKiBwb3NzaWJsZSB0aGUgZmlyc3QgQWxsb2MgZXZlbnQgYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoaXMgY29tbWFuZAorKiB3aWxsIGJlIGZvciB0aGUgcmVjbGFpbWVkIGJ1ZmZlciBhbmQgbm90IHRoZSBvbmUgeW91IGFza2VkIGZvci4KKyogVGhpcyBjYXNlIG11c3QgYmUgaGFuZGxlZCBpbiB0aGUgQWxsb2MgZXZlbnQgaGFuZGxlci4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglsZW4JCWFsbG9jYXRpb24gbGVuZ3RoLCBtdXN0IGJlIGFuIGV2ZW4gdmFsdWUKKyoJCQlpbiB0aGUgcmFuZ2UgWzQtMjQwMF0uIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfYWxsb2NhdGUoaGZhMzg0eF90ICpodywgVUlOVDE2IGxlbikKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWlmICggKGxlbiAlIDIpIHx8CisJICAgICBsZW4gPCBIRkEzODR4X0NNRF9BTExPQ19MRU5fTUlOIHx8CisJICAgICBsZW4gPiBIRkEzODR4X0NNRF9BTExPQ19MRU5fTUFYICkgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfQUxMT0MpOworCQljbWQucGFybTAgPSBsZW47CisJCWNtZC5wYXJtMSA9IDA7CisJCWNtZC5wYXJtMiA9IDA7CisKKwkJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfdHJhbnNtaXQKKyoKKyogSW5zdHJ1Y3RzIHRoZSBmaXJtd2FyZSB0byB0cmFuc21pdCBhIGZyYW1lIHByZXZpb3VzbHkgY29waWVkCisqIHRvIGEgZ2l2ZW4gYnVmZmVyLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LCB0aGUgVHgKKyogcmVzdWx0cyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgVHggb3IgVHhFeGMgZXZlbnRzIChpZiB0aGUgZnJhbWUKKyogY29udHJvbCBiaXRzIGFyZSBzZXQpLiAgVGhlIHJlY2xhaW0gYXJndW1lbnQgc3BlY2lmaWVzIGlmIHRoZQorKiBGSUQgcGFzc2VkIHdpbGwgYmUgdXNlZCBieSB0aGUgZi93IHR4IHByb2Nlc3Mgb3IgcmV0dXJuZWQgZm9yCisqIHVzZSB3LyBhbm90aGVyIHRyYW5zbWl0IGNvbW1hbmQuICBJZiByZWNsYWltIGlzIHNldCwgZXhwZWN0IGFuCisqIEFsbG9jIGV2ZW50IHNpZ25hbGxpbmcgdGhlIGF2YWlsaWJpbGl0eSBvZiB0aGUgRklEIGZvciByZXVzZS4KKyoKKyogTk9URTogaHctPmNtZGxvY2sgTVVTVCBCRSBIRUxEIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmVjbGFpbQkJWzB8MV0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdpdmVuIEZJRCB3aWxsCisqCQkJYmUgaGFuZGVkIGJhY2sgKHZpYSBBbGxvYyBldmVudCkgZm9yIHJldXNlLgorKgkJCShob3N0IG9yZGVyKQorKglxb3MJCVswLTNdIFZhbHVlIHRvIHB1dCBpbiB0aGUgUW9TIGZpZWxkIG9mIHRoZQorKgkJCXR4IGNvbW1hbmQsIGlkZW50aWZpZXMgYSBxdWV1ZSB0byBwbGFjZSB0aGUKKyoJCQlvdXRnb2luZyBmcmFtZSBpbi4KKyoJCQkoaG9zdCBvcmRlcikKKyoJZmlkCQlGSUQgb2YgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZyYW1lIHRoYXQgd2FzCisqCQkJcHJldmlvdXNseSBjb3BpZWQgdG8gTUFDIG1lbW9yeSB2aWEgdGhlIGJhcC4KKyoJCQkoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCWh3LT5yZXNwMCB3aWxsIGNvbnRhaW4gdGhlIEZJRCBiZWluZyB1c2VkIGJ5IGFzeW5jIHR4CisqCXByb2Nlc3MuICBJZiByZWNsYWltPT0wLCByZXNwMCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBmaWQKKyoJYXJndW1lbnQuICBJZiByZWNsYWltPT0xLCByZXNwMCB3aWxsIGJlIHRoZSBkaWZmZXJlbnQgYW5kCisqCWlzIHRoZSB2YWx1ZSB0byB3YXRjaCBmb3IgaW4gdGhlIFR4fFR4RXhjIHRvIGluZGljYXRlIGNvbXBsZXRpb24KKyoJb2YgdGhlIGZyYW1lIHBhc3NlZCBpbiBmaWQuCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX3RyYW5zbWl0KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgcW9zLCBVSU5UMTYgZmlkKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfVFgpIHwKKwkJSEZBMzg0eF9DTURfUkVDTF9TRVQocmVjbGFpbSkgfAorCQlIRkEzODR4X0NNRF9RT1NfU0VUKHFvcyk7CisJY21kLnBhcm0wID0gZmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2NsZWFycGVyc2lzdAorKgorKiBJbnN0cnVjdHMgdGhlIGZpcm13YXJlIHRvIGNsZWFyIHRoZSBwZXJzaXN0ZW5jZSBiaXQgaW4gYSBnaXZlbgorKiBGSUQuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHRlbGxpbmcgdGhlIGZpcm13YXJlIHRvIGRyb3AgdGhlCisqIHBlcnNpc3RlbnQgZnJhbWUuICBUaGUgRklEIG11c3QgYmUgb25lIHRoYXQgd2FzIHByZXZpb3VzbHkgdXNlZAorKiB0byB0cmFuc21pdCBhIFBSU1QgZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZmlkCQlGSUQgb2YgdGhlIHBlcnNpc3RlbnQgZnJhbWUgKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9jbGVhcnBlcnNpc3QoaGZhMzg0eF90ICpodywgVUlOVDE2IGZpZCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfQ0xSUFJTVCk7CisJY21kLnBhcm0wID0gZmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX25vdGlmeQorKgorKiBTZW5kcyBhbiBpbmZvIGZyYW1lIHRvIHRoZSBmaXJtd2FyZSB0byBhbHRlciB0aGUgYmVoYXZpb3IKKyogb2YgdGhlIGYvdyBhc3luY2ggcHJvY2Vzc2VzLiAgQ2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIE1BQworKiBpcyBpbiB0aGUgZW5hYmxlZCBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglyZWNsYWltCQlbMHwxXSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gRklEIHdpbGwKKyoJCQliZSBoYW5kZWQgYmFjayAodmlhIEFsbG9jIGV2ZW50KSBmb3IgcmV1c2UuCisqCQkJKGhvc3Qgb3JkZXIpCisqCWZpZAkJRklEIG9mIGJ1ZmZlciBjb250YWluaW5nIHRoZSBmcmFtZSB0aGF0IHdhcworKgkJCXByZXZpb3VzbHkgY29waWVkIHRvIE1BQyBtZW1vcnkgdmlhIHRoZSBiYXAuCisqCQkJKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKglody0+cmVzcDAgd2lsbCBjb250YWluIHRoZSBGSUQgYmVpbmcgdXNlZCBieSBhc3luYyBub3RpZnkKKyoJcHJvY2Vzcy4gIElmIHJlY2xhaW09PTAsIHJlc3AwIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGZpZAorKglhcmd1bWVudC4gIElmIHJlY2xhaW09PTEsIHJlc3AwIHdpbGwgYmUgdGhlIGRpZmZlcmVudC4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfbm90aWZ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgZmlkLAorCQkgICAgICAgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTk9USUZZKSB8CisJCUhGQTM4NHhfQ01EX1JFQ0xfU0VUKHJlY2xhaW0pOworCWNtZC5wYXJtMCA9IGZpZDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworICAgICAgICAvKiBDb3B5IHRoZSByZWNvcmQgdG8gRklEICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfY29weV90b19iYXAoaHcsIEhGQTM4NHhfQkFQX1BST0MsIGh3LT5pbmZvZmlkLCAwLCBidWYsIGxlbik7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV90b19iYXAoJTA0eCwgMCwgJWQpIGZhaWxlZCwgcmVzdWx0PTB4JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBody0+aW5mb2ZpZCwgbGVuLCByZXN1bHQpOworCQlyZXN1bHQgPSAtRUlPOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisgZmFpbGVkOgorCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworI2lmIDAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbnF1aXJ5CisqCisqIFJlcXVlc3RzIGFuIGluZm8gZnJhbWUgZnJvbSB0aGUgZmlybXdhcmUuICBUaGUgaW5mbyBmcmFtZSB3aWxsCisqIGJlIGRlbGl2ZXJlZCBhc3luY2hyb25vdXNseSB2aWEgdGhlIEluZm8gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZmlkCQlGSUQgb2YgdGhlIGluZm8gZnJhbWUgcmVxdWVzdGVkLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBoZmEzODR4X2NtZF9pbnF1aXJ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBmaWQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0lOUSk7CisJY21kLnBhcm0wID0gZmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9hY2Nlc3MKKyoKKyogUmVxdWVzdHMgdGhhdCBhIGdpdmVuIHJlY29yZCBiZSBjb3BpZWQgdG8vZnJvbSB0aGUgcmVjb3JkCisqIGJ1ZmZlci4gIElmIHdlJ3JlIHdyaXRpbmcgZnJvbSB0aGUgcmVjb3JkIGJ1ZmZlciwgdGhlIGNvbnRlbnRzCisqIG11c3QgcHJldmlvdXNseSBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGUgcmVjb3JkIGJ1ZmZlciB2aWEgdGhlCisqIGJhcC4gIElmIHdlJ3JlIHJlYWRpbmcgaW50byB0aGUgcmVjb3JkIGJ1ZmZlciwgdGhlIHJlY29yZCBjYW4KKyogYmUgcmVhZCBvdXQgb2YgdGhlIHJlY29yZCBidWZmZXIgYWZ0ZXIgdGhpcyBjYWxsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXdyaXRlCQlbMHwxXSBjb3B5IHRoZSByZWNvcmQgYnVmZmVyIHRvIHRoZSBnaXZlbgorKgkJCWNvbmZpZ3VyYXRpb24gcmVjb3JkLiAoaG9zdCBvcmRlcikKKyoJcmlkCQlSSUQgb2YgdGhlIHJlY29yZCB0byByZWFkL3dyaXRlLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlci4gIFVwb24gcmV0dXJuIGl0IHdpbGwKKyoJCQljb250YWluIHRoZSBib2R5IHBvcnRpb24gb2YgdGhlIHJlY29yZCAobWludXMgdGhlCisqCQkJUklEIGFuZCBsZW4pLgorKglsZW4JCWJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzLCBzaG91bGQgbWF0Y2ggcmVjb3JkIGxlbmd0aCkKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2FjY2VzcyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgd3JpdGUsIFVJTlQxNiByaWQsCisJCSAgICAgICB2b2lkKiBidWYsIFVJTlQxNiBsZW4pCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCWhmYTM4NHhfcmVjX3QJcmVjOworCisJREJGRU5URVI7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKwkvKiBUaGlzIHNob3VsZCBOT1QgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0ISAqLworCWlmIChpbl9pcnEoKSkgeworCQlXTEFOX0xPR19FUlJPUigiS3JhcCwgaW4gSW50ZXJydXB0IGNvbnRleHQhIik7CisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCisJCUJVRygpOworI2VuZGlmCisJfQorI2VuZGlmCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlpZiAod3JpdGUpIHsKKwkJcmVjLnJpZCA9IGhvc3QyaGZhMzg0eF8xNihyaWQpOworCQlyZWMucmVjbGVuID0gaG9zdDJoZmEzODR4XzE2KChsZW4vMikgKyAxKTsgLyogbm90ZSBjb252ZXJzaW9uIHRvIHdvcmRzLCArMSBmb3IgcmlkIGZpZWxkICovCisJCS8qIHdyaXRlIHRoZSByZWNvcmQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X3RvX2JhcDQoIGh3LCBIRkEzODR4X0JBUF9QUk9DLCByaWQsIDAsCisJCQkJCSAgICAgICAmcmVjLCBzaXplb2YocmVjKSwKKwkJCQkJICAgICAgIGJ1ZiwgbGVuLAorCQkJCQkgICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMywiRmFpbHVyZSB3cml0aW5nIHJlY29yZCBoZWFkZXIrZGF0YVxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCX0KKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfQUNDRVNTKSB8CisJCUhGQTM4NHhfQ01EX1dSSVRFX1NFVCh3cml0ZSk7CisJY21kLnBhcm0wID0gcmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJDYWxsIHRvIGhmYTM4NHhfZG9jbWRfd2FpdCBmYWlsZWQgKCVkICVkKVxuIiwKKwkJCQlyZXN1bHQsIGNtZC5yZXN1bHQucmVzcDApOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKCF3cml0ZSkgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoIGh3LCBIRkEzODR4X0JBUF9QUk9DLCByaWQsIDAsICZyZWMsIHNpemVvZihyZWMpKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygzLCJDYWxsIHRvIGhmYTM4NHhfY29weV9mcm9tX2JhcCBmYWlsZWRcbiIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJLyogVmFsaWRhdGUgdGhlIHJlY29yZCBsZW5ndGggKi8KKwkJaWYgKCAoKGhmYTM4NHgyaG9zdF8xNihyZWMucmVjbGVuKS0xKSoyKSAhPSBsZW4gKSB7ICAvKiBub3RlIGJvZHkgbGVuIGNhbGN1bGF0aW9uIGluIGJ5dGVzICovCisJCQlXTEFOX0xPR19ERUJVRygxLCAiUklEIGxlbiBtaXNtYXRjaCwgcmlkPTB4JTA0eCBobGVuPSVkIGZ3bGVuPSVkXG4iLAorCQkJCQlyaWQsIGxlbiwgKGhmYTM4NHgyaG9zdF8xNihyZWMucmVjbGVuKS0xKSoyKTsKKwkJCXJlc3VsdCA9IC1FTk9EQVRBOworCQkJZ290byBmYWlsOworCQl9CisKKwkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKCBodywgSEZBMzg0eF9CQVBfUFJPQywgcmlkLCBzaXplb2YocmVjKSwgYnVmLCBsZW4pOworCisJfQorCisgZmFpbDoKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfbW9uaXRvcgorKgorKiBFbmFibGVzIHRoZSAnbW9uaXRvciBtb2RlJyBvZiB0aGUgTUFDLiAgSGVyZSdzIHRoZSBkZXNjcmlwdGlvbiBvZgorKiBtb25pdG9yIG1vZGUgdGhhdCBJJ3ZlIHJlY2VpdmVkIHRodXMgZmFyOgorKgorKiAgIlRoZSAibW9uaXRvciBtb2RlIiBvZiBvcGVyYXRpb24gaXMgdGhhdCB0aGUgTUFDIHBhc3NlcyBhbGwKKyogIGZyYW1lcyBmb3Igd2hpY2ggdGhlIFBMQ1AgY2hlY2tzIGFyZSBjb3JyZWN0LiBBbGwgcmVjZWl2ZWQKKyogIE1QRFVzIGFyZSBwYXNzZWQgdG8gdGhlIGhvc3Qgd2l0aCBNQUMgUG9ydCA9IDcsIHdpdGggYQorKiAgcmVjZWl2ZSBzdGF0dXMgb2YgZ29vZCwgRkNTIGVycm9yLCBvciB1bmRlY3J5cHRhYmxlLiBQYXNzaW5nCisqICBjZXJ0YWluIE1QRFVzIGlzIGEgdmlvbGF0aW9uIG9mIHRoZSA4MDIuMTEgc3RhbmRhcmQsIGJ1dCB1c2VmdWwKKyogIGZvciBhIGRlYnVnZ2luZyB0b29sLiIgIE5vcm1hbCBjb21tdW5pY2F0aW9uIGlzIG5vdCBwb3NzaWJsZQorKiAgd2hpbGUgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZW5hYmxlCQlhIGNvZGUgKDB4MGJ8MHgwZikgdGhhdCBlbmFibGVzL2Rpc2FibGVzCisqCQkJbW9uaXRvciBtb2RlLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgVUlOVDE2IGVuYWJsZSkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTU9OSVRPUikgfAorCQlIRkEzODR4X0NNRF9BSU5GT19TRVQoZW5hYmxlKTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZG93bmxvYWQKKyoKKyogU2V0cyB0aGUgY29udHJvbHMgZm9yIHRoZSBNQUMgY29udHJvbGxlciBjb2RlL2RhdGEgZG93bmxvYWQKKyogcHJvY2Vzcy4gIFRoZSBhcmd1bWVudHMgc2V0IHRoZSBtb2RlIGFuZCBhZGRyZXNzIGFzc29jaWF0ZWQKKyogd2l0aCBhIGRvd25sb2FkLiAgTm90ZSB0aGF0IHRoZSBhdXggcmVnaXN0ZXJzIHNob3VsZCBiZSBlbmFibGVkCisqIHByaW9yIHRvIHNldHRpbmcgb25lIG9mIHRoZSBkb3dubG9hZCBlbmFibGUgbW9kZXMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbW9kZQkJMCAtIERpc2FibGUgcHJvZ3JhbW1pbmcgYW5kIGJlZ2luIGNvZGUgZXhlYworKgkJCTEgLSBFbmFibGUgdm9sYXRpbGUgbWVtIHByb2dyYW1taW5nCisqCQkJMiAtIEVuYWJsZSBub24tdm9sYXRpbGUgbWVtIHByb2dyYW1taW5nCisqCQkJMyAtIFByb2dyYW0gbm9uLXZvbGF0aWxlIHNlY3Rpb24gZnJvbSBOViBkb3dubG9hZAorKgkJCSAgICBidWZmZXIuCisqCQkJKGhvc3Qgb3JkZXIpCisqCWxvd2FkZHIKKyoJaGlnaGFkZHIJRm9yIG1vZGUgMSwgc2V0cyB0aGUgaGlnaCAmIGxvdyBvcmRlciBiaXRzIG9mCisqCQkJdGhlICJkZXN0aW5hdGlvbiBhZGRyZXNzIi4gIFRoaXMgYWRkcmVzcyB3aWxsIGJlCisqCQkJdGhlIGV4ZWN1dGlvbiBzdGFydCBhZGRyZXNzIHdoZW4gZG93bmxvYWQgaXMKKyoJCQlzdWJzZXF1ZW50bHkgZGlzYWJsZWQuCisqCQkJRm9yIG1vZGUgMiwgc2V0cyB0aGUgaGlnaCAmIGxvdyBvcmRlciBiaXRzIG9mCisqCQkJdGhlIGRlc3RpbmF0aW9uIGluIE5WIHJhbS4KKyoJCQlGb3IgbW9kZXMgMCAmIDMsIHNob3VsZCBiZSB6ZXJvLiAoaG9zdCBvcmRlcikKKyoJCQlOT1RFOiB0aGVzZSBhZGRyZXNzIGFyZ3MgYXJlIGluIENNRCBmb3JtYXQKKyoJY29kZWxlbgkJTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHdyaXRlIGluIG1vZGUgMiwKKyoJCQl6ZXJvIG90aGVyd2lzZS4gKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9kb3dubG9hZChoZmEzODR4X3QgKmh3LCBVSU5UMTYgbW9kZSwgVUlOVDE2IGxvd2FkZHIsCisJCQkJVUlOVDE2IGhpZ2hhZGRyLCBVSU5UMTYgY29kZWxlbikKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRE9XTkxEKSB8CisJCUhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVChtb2RlKTsKKwljbWQucGFybTAgPSBsb3dhZGRyOworCWNtZC5wYXJtMSA9IGhpZ2hhZGRyOworCWNtZC5wYXJtMiA9IGNvZGVsZW47CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RsX2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2F1eF9lbmFibGUKKyoKKyogR29lcyB0aHJvdWdoIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIHRoZSBhdXhpbGFyeSBwb3J0LiAgVGhpcworKiBpcyBuZWNlc3NhcnkgcHJpb3IgdG8gcmF3IHJlYWRzL3dyaXRlcyB0byBjYXJkIGRhdGEgc3BhY2UuCisqIERpcmVjdCBhY2Nlc3MgdG8gdGhlIGNhcmQgZGF0YSBzcGFjZSBpcyBvbmx5IHVzZWQgZm9yIGRvd25sb2FkaW5nCisqIGNvZGUgYW5kIGRlYnVnZ2luZy4KKyogTm90ZSB0aGF0IGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSBhdHRlbXB0aW5nCisqIGEgZG93bmxvYWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dCkKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIGludCBmb3JjZSkKK3sKKwlpbnQJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlVSU5UMzIJCXJldHJpZXNfcmVtYWluaW5nOworCVVJTlQxNgkJcmVnOworCVVJTlQJCWF1eGVuX21pcnJvciA9IGh3LT5hdXhlbjsKKworCURCRkVOVEVSOworCisJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGVuYWJsZSAqLworCWlmICggaHctPmF1eGVuICkgeworCQlody0+YXV4ZW4rKzsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWNxdWlyZSB0aGUgbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCAmKGh3LT5jbWRsb2NrKSwgZmxhZ3MpOworCS8qIHdhaXQgZm9yIGNtZCByZWdpc3RlciBidXN5IGJpdCB0byBjbGVhciAqLworCXJldHJpZXNfcmVtYWluaW5nID0gMTAwMDAwOworCWRvIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwkJdWRlbGF5KDEwKTsKKwl9CisJd2hpbGUgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpICYmIC0tcmV0cmllc19yZW1haW5pbmcpOworCWlmIChyZXRyaWVzX3JlbWFpbmluZyAhPSAwKSB7CisJCS8qIGJ1c3kgYml0IGNsZWFyLCBpdCdzIE9LIHRvIHdyaXRlIHRvIFBhcmFtWCByZWdzICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0FVWFBXMCwKKwkJCUhGQTM4NHhfUEFSQU0wKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfQVVYUFcxLAorCQkJSEZBMzg0eF9QQVJBTTEpOworCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9BVVhQVzIsCisJCQlIRkEzODR4X1BBUkFNMik7CisKKwkJLyogU2V0IHRoZSBhdXggZW5hYmxlIGluIHRoZSBDb250cm9sIHJlZ2lzdGVyICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0NPTlRST0xfQVVYX0RPRU5BQkxFLAorCQkJSEZBMzg0eF9DT05UUk9MKTsKKworCQkvKiBOb3cgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCQlyZXRyaWVzX3JlbWFpbmluZyA9IDEwMDAwMDsKKwkJZG8geworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ09OVFJPTCk7CisJCQl1ZGVsYXkoMTApOworCQl9CisJCXdoaWxlICggKChyZWcgJiAoQklUMTR8QklUMTUpKSAhPSBIRkEzODR4X0NPTlRST0xfQVVYX0lTRU5BQkxFRCkgJiYKKwkJCS0tcmV0cmllc19yZW1haW5pbmcgKTsKKwkJaWYgKHJldHJpZXNfcmVtYWluaW5nICE9IDApIHsKKwkJCXJlc3VsdCA9IDA7CisJCQlody0+YXV4ZW4rKzsKKwkJfQorCX0KKworCS8qIEZvcmNlIGl0IGVuYWJsZWQgZXZlbiBpZiB0aGUgY29tbWFuZCBmYWlsZWQsIGlmIHRvbGQuLiAqLworCWlmICgoaHctPmF1eGVuID09IGF1eGVuX21pcnJvcikgJiYgZm9yY2UpCisJCWh3LT5hdXhlbisrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+Y21kbG9jayksIGZsYWdzKTsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2F1eF9kaXNhYmxlCisqCisqIEdvZXMgdGhyb3VnaCB0aGUgcHJvY2VzcyBvZiBkaXNhYmxpbmcgdGhlIGF1eGlsYXJ5IHBvcnQKKyogZW5hYmxlZCB3aXRoIGF1eF9lbmFibGUoKS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0KQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CQlyZXN1bHQgPSAtRVRJTUVET1VUOworCXVuc2lnbmVkIGxvbmcgICB0aW1lb3V0OworCVVJTlQxNgkJcmVnID0gMDsKKworCURCRkVOVEVSOworCisJLyogU2VlIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBlbmFibGUgKi8KKwlpZiAoaHctPmF1eGVuKSBody0+YXV4ZW4tLTsKKwlpZiAoaHctPmF1eGVuKSByZXR1cm4gMDsKKworCS8qIENsZWFyIHRoZSBhdXggZW5hYmxlIGluIHRoZSBDb250cm9sIHJlZ2lzdGVyICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDAsIEhGQTM4NHhfUEFSQU0wKTsKKwloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9QQVJBTTEpOworCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X1BBUkFNMik7CisJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfQ09OVFJPTF9BVVhfRE9ESVNBQkxFLAorCQlIRkEzODR4X0NPTlRST0wpOworCisJLyogTm93IHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIDEqSFo7CisJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ09OVFJPTCk7CisJd2hpbGUgKCAoKHJlZyAmIChCSVQxNHxCSVQxNSkpICE9IEhGQTM4NHhfQ09OVFJPTF9BVVhfSVNESVNBQkxFRCkgJiYKKwkJdGltZV9iZWZvcmUoamlmZmllcyx0aW1lb3V0KSApeworCQl1ZGVsYXkoMTApOworCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9DT05UUk9MKTsKKwl9CisJaWYgKChyZWcgJiAoQklUMTR8QklUMTUpKSA9PSBIRkEzODR4X0NPTlRST0xfQVVYX0lTRElTQUJMRUQgKSB7CisJCXJlc3VsdCA9IDA7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwKKyoKKyogV3JpdGUgdGVzdCBjb21tYW5kcyB0byB0aGUgY2FyZC4gIFNvbWUgdGVzdCBjb21tYW5kcyBkb24ndCBtYWtlCisqIHNlbnNlIHdpdGhvdXQgcHJpb3Igc2V0LXVwLiAgRm9yIGV4YW1wbGUsIGNvbnRpbm91cyBUWCBpc24ndCB2ZXJ5CisqIHVzZWZ1bCB1bnRpbCB5b3Ugc2V0IHRoZSBjaGFubmVsLiAgVGhhdCBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICBwcm9jZXNzIHRocmVhZAorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2xvd19sZXZlbChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQoreworCWludCAgICAgICAgICAgICByZXN1bHQgPSAwOworCURCRkVOVEVSOworCisJLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisjaWYgMAorCXByaW50ayhLRVJOX0lORk8gIiUjeCAlI3ggJSN4ICUjeFxuIiwgY21kLT5jbWQsIGNtZC0+cGFybTAsIGNtZC0+cGFybTEsIGNtZC0+cGFybTIpOworI2VuZGlmCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyogVE9ETzogZGV0ZXJtaW5lIGlmIHRoZXNlIHdpbGwgZXZlciBiZSBuZWVkZWQgKi8KKyNpZiAwCitpbnQgaGZhMzg0eF9jbWRfcmVhZG1pZihoZmEzODR4X3QgKmh3KQoreworCURCRkVOVEVSOworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGhmYTM4NHhfY21kX3dyaXRlbWlmKGhmYTM4NHhfdCAqaHcpCit7CisJREJGRU5URVI7CisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX21taV9yZWFkCisqCisqIFJlYWQgbW1pIHJlZ2lzdGVycy4gIG1taSBpcyBpbnRlcnNpbC1zcGVhayBmb3IgdGhlIGJhc2ViYW5kCisqIHByb2Nlc3NvciByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgcmVnaXN0ZXIgICAgICAgIFRoZSB0ZXN0IHJlZ2lzdGVyIHRvIGJlIGFjY2Vzc2VkIChtdXN0IGJlIGV2ZW4gIykuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisqICAgICAgID4wICAgICAgICAgICAgICBmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9tbWlfcmVhZChoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkciwgVUlOVDMyICpyZXNwKQoreworICAgICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKyAgICAgICAgREJGRU5URVI7CisJY21kLmNtZCA9IChVSU5UMTYpIDB4MzA7CisJY21kLnBhcm0wID0gKFVJTlQxNikgYWRkcjsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKyAgICAgICAgLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJKnJlc3AgPSAoVUlOVDMyKSBjbWQucmVzdWx0LnJlc3AwOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbW1pX3dyaXRlCisqCisqIFJlYWQgbW1pIHJlZ2lzdGVycy4gIG1taSBpcyBpbnRlcnNpbC1zcGVhayBmb3IgdGhlIGJhc2ViYW5kCisqIHByb2Nlc3NvciByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgYWRkciAgICAgICAgICAgIFRoZSB0ZXN0IHJlZ2lzdGVyIHRvIGJlIGFjY2Vzc2VkIChtdXN0IGJlIGV2ZW4gIykuCisqICAgICAgIGRhdGEgICAgICAgICAgICBUaGUgZGF0YSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisqICAgICAgID4wICAgICAgICAgICAgICBmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQKK2hmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHIsIFVJTlQzMiBkYXRhKQoreworICAgICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKyAgICAgICAgREJGRU5URVI7CisJY21kLmNtZCA9IChVSU5UMTYpIDB4MzE7CisJY21kLnBhcm0wID0gKFVJTlQxNikgYWRkcjsKKwljbWQucGFybTEgPSAoVUlOVDE2KSBkYXRhOworCWNtZC5wYXJtMiA9IDA7CisKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwibW1pIHdyaXRlIDogYWRkciA9IDB4JTA4eFxuIiwgYWRkcik7CisgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsIm1taSB3cml0ZSA6IGRhdGEgPSAweCUwOHhcbiIsIGRhdGEpOworCisgICAgICAgIC8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRPRE86IGRldGVybWluZSBpZiB0aGVzZSB3aWxsIGV2ZXIgYmUgbmVlZGVkICovCisjaWYgMAoraW50IGhmYTM4NHhfY21kX3JlYWRtaWYoaGZhMzg0eF90ICpodykKK3sKKyAgICAgICAgREJGRU5URVI7CisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorCisKK2ludCBoZmEzODR4X2NtZF93cml0ZW1pZihoZmEzODR4X3QgKmh3KQoreworICAgICAgICBEQkZFTlRFUjsKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcHlfZnJvbV9iYXAKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyBmcm9tIHRoZSBNQUMgY29udHJvbGxlciBtZW1vcnkgdmlhCisqIG9uZSBzZXQgb2YgQkFQIHJlZ2lzdGVycy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgliYXAJCVswfDFdIHdoaWNoIEJBUCB0byB1c2UKKyoJaWQJCUZJRCBvciBSSUQsIGRlc3RpbmVkIGZvciB0aGUgc2VsZWN0IHJlZ2lzdGVyIChob3N0IG9yZGVyKQorKglvZmZzZXQJCUFuIF9ldmVuXyBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4KKyoJCQlGSUQvUklELiAgV2UgaGF2ZW4ndCB0aGUgbWVhbnMgdG8gdmFsaWRhdGUgdGhpcywKKyoJCQlzbyBiZSBjYXJlZnVsLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlwdHIgdG8gYXJyYXkgb2YgYnl0ZXMKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciBpbiBieXRlcworKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIHZhbHVlIG9mIG9mZnNldCByZWcuCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBiYXAsIFVJTlQxNiBpZCwgVUlOVDE2IG9mZnNldCwKKwkJCQl2b2lkICpidWYsIFVJTlQgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzID0gMDsKKwlVSU5UOAkJKmQgPSAoVUlOVDgqKWJ1ZjsKKwlVSU5UCQlzZWxlY3RyZWc7CisJVUlOVAkJb2Zmc2V0cmVnOworCVVJTlQJCWRhdGFyZWc7CisJVUlOVAkJaTsKKwlVSU5UMTYJCXJlZyA9IDA7CisKKwlEQkZFTlRFUjsKKworCS8qIFZhbGlkYXRlIGJhcCwgb2Zmc2V0LCBidWYsIGFuZCBsZW4gKi8KKwlpZiAoIChiYXAgPiAxKSB8fAorCSAgICAgKG9mZnNldCA+IEhGQTM4NHhfQkFQX09GRlNFVF9NQVgpIHx8CisJICAgICAob2Zmc2V0ICUgMikgfHwKKwkgICAgIChidWYgPT0gTlVMTCkgfHwKKwkgICAgIChsZW4gPiBIRkEzODR4X0JBUF9EQVRBTEVOX01BWCkgKXsKKwkgICAgIAlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXNlbGVjdHJlZyA9IChiYXAgPT0gMSkgPyAgSEZBMzg0eF9TRUxFQ1QxIDogSEZBMzg0eF9TRUxFQ1QwIDsKKwkJb2Zmc2V0cmVnID0gKGJhcCA9PSAxKSA/ICBIRkEzODR4X09GRlNFVDEgOiBIRkEzODR4X09GRlNFVDAgOworCQlkYXRhcmVnID0gICAoYmFwID09IDEpID8gIEhGQTM4NHhfREFUQTEgOiBIRkEzODR4X0RBVEEwIDsKKworCQkvKiBPYnRhaW4gbG9jayAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKworCQkvKiBXcml0ZSBpZCB0byBzZWxlY3QgcmVnICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBpZCwgc2VsZWN0cmVnKTsKKwkJLyogV3JpdGUgb2Zmc2V0IHRvIG9mZnNldCByZWcgKi8KKwkJaGZhMzg0eF9zZXRyZWcoaHcsIG9mZnNldCwgb2Zmc2V0cmVnKTsKKwkJLyogV2FpdCBmb3Igb2Zmc2V0W2J1c3ldIHRvIGNsZWFyIChzZWUgQkFQX1RJTUVPVVQpICovCisJCWkgPSAwOworCQlkbyB7CisJCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgb2Zmc2V0cmVnKTsKKwkJCWlmICggaSA+IDAgKSB1ZGVsYXkoMTApOworCQkJaSsrOworCQl9IHdoaWxlICggaSA8IHByaXNtMl9iYXBfdGltZW91dCAmJiBIRkEzODR4X09GRlNFVF9JU0JVU1kocmVnKSk7CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fUENJKQorCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJCWlmICggSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHJlZykgKXsKKwkJCS8qIElmIHRpbWVvdXQsIHJldHVybiAtRVRJTUVET1VUICovCisJCQlyZXN1bHQgPSByZWc7CisJCX0gZWxzZSBpZiAoIEhGQTM4NHhfT0ZGU0VUX0lTRVJSKHJlZykgKXsKKwkJCS8qIElmIG9mZnNldFtlcnJdID09IDEsIHJldHVybiAtRUlOVkFMICovCisJCQlyZXN1bHQgPSByZWc7CisJCX0gZWxzZSB7CisJCQkvKiBSZWFkIGV2ZW4obGVuKSBidWYgY29udGVudHMgZnJvbSBkYXRhIHJlZyAqLworCQkJZm9yICggaSA9IDA7IGkgPCAobGVuICYgMHhmZmZlKTsgaSs9MiApIHsKKwkJCQkqKFVJTlQxNiopKCYoZFtpXSkpID0KKwkJCQkJaGZhMzg0eF9nZXRyZWdfbm9zd2FwKGh3LCBkYXRhcmVnKTsKKwkJCX0KKwkJCS8qIElmIGxlbiBvZGQsIGhhbmRsZSBsYXN0IGJ5dGUgKi8KKwkJCWlmICggbGVuICUgMiApeworCQkJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnX25vc3dhcChodywgZGF0YXJlZyk7CisJCQkJZFtsZW4tMV0gPSAoKFVJTlQ4KikoJnJlZykpWzBdOworCQkJfQorCQl9CisKKwkJLyogQWNjb3JkaW5nIHRvIEludGVyc2lsIGVycmF0YSBkYXRlZCA5LzE2LzAyOgorCisJCSJJbiBQUklTTSBQQ0kgTUFDIGhvc3QgaW50ZXJmYWNlLCBpZiBib3RoIEJBUHMgYXJlIGNvbmN1cnJlbnRseQorCQkgcmVxdWVzaW5nIG1lbW9yeSBhY2Nlc3MsIGJvdGggd2lsbCBhY2NlcHQgdGhlIEFjay4gICBUaGVyZSBpcyBubworCQkgZmlybXdhcmUgd29ya2Fyb3VuZCBwb3NzaWJsZS4gIFRvIHByZXZlbnQgQkFQIGFjY2VzcyBmYWlsdXJlcyBvcgorCQkgaGFuZyBjb25kaXRpb25zIHRoZSBob3N0IE1VU1QgTk9UIGFjY2VzcyBib3RoIEJBUHMgaW4gc3VjZXNzaW9uCisJCSB1bmxlc3MgYXQgbGVhc3QgNXVzIGVsYXBzZXMgYmV0d2VlbiBhY2Nlc3Nlcy4gIFRoZSBzYWZlc3QgY2hvaWNlCisJCSBpcyB0byBVU0UgT05MWSBPTkUgQkFQIGZvciBhbGwgZGF0YSBtb3ZlbWVudCBvcGVyYXRpb25zLiIKKworCQkgV2hhdCB0aGlzIG1lYW5zOgorCisJCSBXZSBoYXZlIHRvIHNlcmlhbGl6ZSBBTEwgQkFQIGFjY2Vzc2VzLCBhbmQgZnVydGhlcm1vcmUsIGFkZCBhIDV1cworCQkgZGVsYXkgYWZ0ZXIgYWNjZXNzIGlmIHdlJ3JlIHVzaW5nIGEgUENJIHBsYXRmb3JtLgorCisJCSBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gbG9jayBvdXQgaW50ZXJydXB0cyB0aHJvdWdvdXQKKwkJIHRoZSBlbnRpcmUgQkFQIGNvcHkuCisKKwkJIEl0IHJlbWFpbnMgdG8gYmUgc2VlbiBpZiAiQkFQIGFjY2VzcyIgbWVhbnMgIkJBUCBzZXR1cCIgb3IgdGhlIG1vcmUKKwkJIGxpdGVyYWwgZGVmaW5pdGlvbiBvZiAiY29weWluZyBkYXRhIGJhY2sgYW5kIGZvcnRoIiAgSSdtIGVycmluZyBmb3IKKwkJIHRoZSBsYXR0ZXIsIHNhZmVyIGRlZmluaXRpb24uICAtLSBTTFAuCisKKwkJKi8KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwkJdWRlbGF5KDUpOworCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJfQorCisJaWYgKHJlc3VsdCkgeworCSAgV0xBTl9MT0dfREVCVUcoMSwKKwkJCSAgImNvcHlfZnJvbV9iYXAoMHglMDR4LCAwLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCSAgcmVnLCBsZW4sIHJlc3VsdCk7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jb3B5X3RvX2JhcAorKgorKiBDb3BpZXMgYSBjb2xsZWN0aW9uIG9mIGJ5dGVzIHRvIHRoZSBNQUMgY29udHJvbGxlciBtZW1vcnkgdmlhCisqIG9uZSBzZXQgb2YgQkFQIHJlZ2lzdGVycy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgliYXAJCVswfDFdIHdoaWNoIEJBUCB0byB1c2UKKyoJaWQJCUZJRCBvciBSSUQsIGRlc3RpbmVkIGZvciB0aGUgc2VsZWN0IHJlZ2lzdGVyIChob3N0IG9yZGVyKQorKglvZmZzZXQJCUFuIF9ldmVuXyBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4KKyoJCQlGSUQvUklELiAgV2UgaGF2ZW4ndCB0aGUgbWVhbnMgdG8gdmFsaWRhdGUgdGhpcywKKyoJCQlzbyBiZSBjYXJlZnVsLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlwdHIgdG8gYXJyYXkgb2YgYnl0ZXMKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gdmFsdWUgb2Ygb2Zmc2V0IHJlZy4KKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NvcHlfdG9fYmFwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBiYXAsIFVJTlQxNiBpZCwgVUlOVDE2IG9mZnNldCwKKwkJCQl2b2lkICpidWYsIFVJTlQgbGVuKQoreworCXJldHVybiBoZmEzODR4X2NvcHlfdG9fYmFwNChodywgYmFwLCBpZCwgb2Zmc2V0LCBidWYsIGxlbiwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCk7Cit9CisKK2ludCBoZmEzODR4X2NvcHlfdG9fYmFwNChoZmEzODR4X3QgKmh3LCBVSU5UMTYgYmFwLCBVSU5UMTYgaWQsIFVJTlQxNiBvZmZzZXQsCisJCQkgdm9pZCAqYnVmLCBVSU5UIGxlbjEsIHZvaWQqIGJ1ZjIsIFVJTlQgbGVuMiwKKwkJCSB2b2lkICpidWYzLCBVSU5UIGxlbjMsIHZvaWQgKmJ1ZjQsIFVJTlQgbGVuNCkKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFncyA9IDA7CisJVUlOVDgJCSpkOworCVVJTlQJCXNlbGVjdHJlZzsKKwlVSU5UCQlvZmZzZXRyZWc7CisJVUlOVAkJZGF0YXJlZzsKKwlVSU5UCQlpOworCVVJTlQxNgkJcmVnOworCisJREJGRU5URVI7CisKKy8vCXByaW50ayhLRVJOX0RFQlVHICJjdGIxICVkIGlkICUwNHggbyAlZCAlZCAlZCAlZCAlZFxuIiwgYmFwLCBpZCwgb2Zmc2V0LCBsZW4xLCBsZW4yLCBsZW4zLCBsZW40KTsKKworCS8qIFZhbGlkYXRlIGJhcCwgb2Zmc2V0LCBidWYsIGFuZCBsZW4gKi8KKwlpZiAoIChiYXAgPiAxKSB8fAorCSAgICAgKG9mZnNldCA+IEhGQTM4NHhfQkFQX09GRlNFVF9NQVgpIHx8CisJICAgICAob2Zmc2V0ICUgMikgfHwKKwkgICAgIChidWYgPT0gTlVMTCkgfHwKKwkgICAgIChsZW4xK2xlbjIrbGVuMytsZW40ID4gSEZBMzg0eF9CQVBfREFUQUxFTl9NQVgpICl7CisJICAgICAJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlzZWxlY3RyZWcgPSAoYmFwID09IDEpID8gSEZBMzg0eF9TRUxFQ1QxIDogSEZBMzg0eF9TRUxFQ1QwOworCQlvZmZzZXRyZWcgPSAoYmFwID09IDEpID8gSEZBMzg0eF9PRkZTRVQxIDogSEZBMzg0eF9PRkZTRVQwOworCQlkYXRhcmVnID0gICAoYmFwID09IDEpID8gSEZBMzg0eF9EQVRBMSAgIDogSEZBMzg0eF9EQVRBMDsKKwkJLyogT2J0YWluIGxvY2sgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoICYoaHctPmJhcGxvY2spLCBmbGFncyk7CisKKwkJLyogV3JpdGUgaWQgdG8gc2VsZWN0IHJlZyAqLworCQloZmEzODR4X3NldHJlZyhodywgaWQsIHNlbGVjdHJlZyk7CisJCXVkZWxheSgxMCk7CisJCS8qIFdyaXRlIG9mZnNldCB0byBvZmZzZXQgcmVnICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBvZmZzZXQsIG9mZnNldHJlZyk7CisJCS8qIFdhaXQgZm9yIG9mZnNldFtidXN5XSB0byBjbGVhciAoc2VlIEJBUF9USU1FT1VUKSAqLworCQlpID0gMDsKKwkJZG8geworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIG9mZnNldHJlZyk7CisJCQlpZiAoIGkgPiAwICkgdWRlbGF5KDEwKTsKKwkJCWkrKzsKKwkJfSB3aGlsZSAoIGkgPCBwcmlzbTJfYmFwX3RpbWVvdXQgJiYgSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHJlZykpOworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fUENJKQorCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJCWlmICggSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHJlZykgKXsKKwkJCS8qIElmIHRpbWVvdXQsIHJldHVybiByZWcgKi8KKwkJCXJlc3VsdCA9IHJlZzsKKwkJfSBlbHNlIGlmICggSEZBMzg0eF9PRkZTRVRfSVNFUlIocmVnKSApeworCQkJLyogSWYgb2Zmc2V0W2Vycl0gPT0gMSwgcmV0dXJuIHJlZyAqLworCQkJcmVzdWx0ID0gcmVnOworCQl9IGVsc2UgeworCQkJZCA9IChVSU5UOCopYnVmOworCQkJLyogV3JpdGUgZXZlbihsZW4xKSBidWYgY29udGVudHMgdG8gZGF0YSByZWcgKi8KKwkJCWZvciAoIGkgPSAwOyBpIDwgKGxlbjEgJiAweGZmZmUpOyBpKz0yICkgeworCQkJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywKKwkJCQkJKihVSU5UMTYqKSgmKGRbaV0pKSwgZGF0YXJlZyk7CisJCQl9CisJCQlpZiAobGVuMSAmIDEpIHsKKwkJCQlVSU5UMTYgZGF0YTsKKwkJCQlVSU5UOCAqYiA9IChVSU5UOCAqKSAmZGF0YTsKKwkJCQliWzBdID0gZFtsZW4xLTFdOworCQkJCWlmIChidWYyICE9IE5VTEwpIHsKKwkJCQkJZCA9IChVSU5UOCopYnVmMjsKKwkJCQkJYlsxXSA9IGRbMF07CisJCQkJCWxlbjItLTsKKwkJCQkJYnVmMisrOworCQkJCX0KKwkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJfQorCQkJaWYgKChidWYyICE9IE5VTEwpICYmIChsZW4yID4gMCkpIHsKKwkJCQkvKiBXcml0ZSBldmVuKGxlbjIpIGJ1ZiBjb250ZW50cyB0byBkYXRhIHJlZyAqLworCQkJCWQgPSAoVUlOVDgqKWJ1ZjI7CisJCQkJZm9yICggaSA9IDA7IGkgPCAobGVuMiAmIDB4ZmZmZSk7IGkrPTIgKSB7CisJCQkJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywgKihVSU5UMTYqKSgmKGRbaV0pKSwgZGF0YXJlZyk7CisJCQkJfQorCQkJCWlmIChsZW4yICYgMSkgeworCQkJCQlVSU5UMTYgZGF0YTsKKwkJCQkJVUlOVDggKmIgPSAoVUlOVDggKikgJmRhdGE7CisJCQkJCWJbMF0gPSBkW2xlbjItMV07CisJCQkJCWlmIChidWYzICE9IE5VTEwpIHsKKwkJCQkJCWQgPSAoVUlOVDgqKWJ1ZjM7CisJCQkJCQliWzFdID0gZFswXTsKKwkJCQkJCWxlbjMtLTsKKwkJCQkJCWJ1ZjMrKzsKKwkJCQkJfQorCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKChidWYzICE9IE5VTEwpICYmIChsZW4zID4gMCkpIHsKKwkJCQkvKiBXcml0ZSBldmVuKGxlbjMpIGJ1ZiBjb250ZW50cyB0byBkYXRhIHJlZyAqLworCQkJCWQgPSAoVUlOVDgqKWJ1ZjM7CisJCQkJZm9yICggaSA9IDA7IGkgPCAobGVuMyAmIDB4ZmZmZSk7IGkrPTIgKSB7CisJCQkJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywgKihVSU5UMTYqKSgmKGRbaV0pKSwgZGF0YXJlZyk7CisJCQkJfQorCQkJCWlmIChsZW4zICYgMSkgeworCQkJCQlVSU5UMTYgZGF0YTsKKwkJCQkJVUlOVDggKmIgPSAoVUlOVDggKikgJmRhdGE7CisJCQkJCWJbMF0gPSBkW2xlbjMtMV07CisJCQkJCWlmIChidWY0ICE9IE5VTEwpIHsKKwkJCQkJCWQgPSAoVUlOVDgqKWJ1ZjQ7CisJCQkJCQliWzFdID0gZFswXTsKKwkJCQkJCWxlbjQtLTsKKwkJCQkJCWJ1ZjQrKzsKKwkJCQkJfQorCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJCX0KKwkJCX0KKwkJCWlmICgoYnVmNCAhPSBOVUxMKSAmJiAobGVuNCA+IDApKSB7CisJCQkJLyogV3JpdGUgZXZlbihsZW40KSBidWYgY29udGVudHMgdG8gZGF0YSByZWcgKi8KKwkJCQlkID0gKFVJTlQ4KilidWY0OworCQkJCWZvciAoIGkgPSAwOyBpIDwgKGxlbjQgJiAweGZmZmUpOyBpKz0yICkgeworCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsICooVUlOVDE2KikoJihkW2ldKSksIGRhdGFyZWcpOworCQkJCX0KKwkJCQlpZiAobGVuNCAmIDEpIHsKKwkJCQkJVUlOVDE2IGRhdGE7CisJCQkJCVVJTlQ4ICpiID0gKFVJTlQ4ICopICZkYXRhOworCQkJCQliWzBdID0gZFtsZW40LTFdOworCQkJCQliWzFdID0gMDsKKworCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJCX0KKwkJCX0KKy8vCQkJcHJpbnRrKEtFUk5fREVCVUcgImN0YjIgJWQgaWQgJTA0eCBvICVkICVkICVkICVkICVkXG4iLCBiYXAsIGlkLCBvZmZzZXQsIGxlbjEsIGxlbjIsIGxlbjMsIGxlbjQpOworCisJCX0KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwkJdWRlbGF5KDUpOworCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJfQorCisJaWYgKHJlc3VsdCkKKwkJV0xBTl9MT0dfRVJST1IoImNvcHlfdG9fYmFwKCkgZmFpbGVkLlxuIik7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29weV9mcm9tX2F1eAorKgorKiBDb3BpZXMgYSBjb2xsZWN0aW9uIG9mIGJ5dGVzIGZyb20gdGhlIGNvbnRyb2xsZXIgbWVtb3J5LiAgVGhlCisqIEF1eGlsaWFyeSBwb3J0IE1VU1QgYmUgZW5hYmxlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisqIFdlIF9taWdodF8gYmUgaW4gYSBkb3dubG9hZCBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgljYXJkYWRkcglhZGRyZXNzIGluIGhmYTM4NHggZGF0YSBzcGFjZSB0byByZWFkCisqCWF1eGN0bAkJYWRkcmVzcyBzcGFjZSBzZWxlY3QKKyoJYnVmCQlwdHIgdG8gZGVzdGluYXRpb24gaG9zdCBidWZmZXIKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglidWYgY29udGFpbnMgdGhlIGRhdGEgY29waWVkCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK2hmYTM4NHhfY29weV9mcm9tX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJVUlOVAkJaSA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICggIShody0+YXV4ZW4pICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJIkF0dGVtcHQgdG8gcmVhZCAweCUwNHggd2hlbiBhdXggbm90IGVuYWJsZWRcbiIsCisJCQljYXJkYWRkcik7CisJCXJldHVybjsKKworCX0KKwkvKiBCdWlsZCBhcHByb3ByaWF0ZSBhdXggcGFnZSBhbmQgb2Zmc2V0ICovCisJY3VycnBhZ2UgPSBIRkEzODR4X0FVWF9NS1BBR0UoY2FyZGFkZHIpOworCWN1cnJvZmZzZXQgPSBIRkEzODR4X0FVWF9NS09GRihjYXJkYWRkciwgYXV4Y3RsKTsKKwloZmEzODR4X3NldHJlZyhodywgY3VycnBhZ2UsIEhGQTM4NHhfQVVYUEFHRSk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIGN1cnJvZmZzZXQsIEhGQTM4NHhfQVVYT0ZGU0VUKTsKKwl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKworCS8qIHJlYWQgdGhlIGRhdGEgKi8KKwl3aGlsZSAoIGkgPCBsZW4pIHsKKwkJKigoVUlOVDE2KikoYnVmK2kpKSA9IGhmYTM4NHhfZ2V0cmVnX25vc3dhcChodywgSEZBMzg0eF9BVVhEQVRBKTsKKwkJaSs9MjsKKwkJY3Vycm9mZnNldCs9MjsKKwkJaWYgKCAoY3Vycm9mZnNldCZIRkEzODR4X0FERFJfQVVYX09GRl9NQVNLKSA+CisJCQlIRkEzODR4X0FERFJfQVVYX09GRl9NQVggKSB7CisJCQljdXJycGFnZSsrOworCQkJY3Vycm9mZnNldCA9IDA7CisJCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BVVhfTUtPRkYoY3Vycm9mZnNldCwgYXV4Y3RsKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJycGFnZSwgSEZBMzg0eF9BVVhQQUdFKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJyb2Zmc2V0LCBIRkEzODR4X0FVWE9GRlNFVCk7CisJCQl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKwkJfQorCX0KKwkvKiBNYWtlIHN1cmUgdGhlIGF1eGN0bCBiaXRzIGFyZSBjbGVhciAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X0FVWE9GRlNFVCk7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jb3B5X3RvX2F1eAorKgorKiBDb3BpZXMgYSBjb2xsZWN0aW9uIG9mIGJ5dGVzIHRvIHRoZSBjb250cm9sbGVyIG1lbW9yeS4gIFRoZQorKiBBdXhpbGlhcnkgcG9ydCBNVVNUIGJlIGVuYWJsZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKiBXZSBfbWlnaHRfIGJlIGluIGEgZG93bmxvYWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJY2FyZGFkZHIJYWRkcmVzcyBpbiBoZmEzODR4IGRhdGEgc3BhY2UgdG8gcmVhZAorKglhdXhjdGwJCWFkZHJlc3Mgc3BhY2Ugc2VsZWN0CisqCWJ1ZgkJcHRyIHRvIGRlc3RpbmF0aW9uIGhvc3QgYnVmZmVyCisqCWxlbgkJbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNmZXIgKGluIGJ5dGVzKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJQ29udHJvbGxlciBtZW1vcnkgbm93IGNvbnRhaW5zIGEgY29weSBvZiBidWYKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9jb3B5X3RvX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJVUlOVAkJaSA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICggIShody0+YXV4ZW4pICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJIkF0dGVtcHQgdG8gcmVhZCAweCUwNHggd2hlbiBhdXggbm90IGVuYWJsZWRcbiIsCisJCQljYXJkYWRkcik7CisJCXJldHVybjsKKworCX0KKwkvKiBCdWlsZCBhcHByb3ByaWF0ZSBhdXggcGFnZSBhbmQgb2Zmc2V0ICovCisJY3VycnBhZ2UgPSBIRkEzODR4X0FVWF9NS1BBR0UoY2FyZGFkZHIpOworCWN1cnJvZmZzZXQgPSBIRkEzODR4X0FVWF9NS09GRihjYXJkYWRkciwgYXV4Y3RsKTsKKwloZmEzODR4X3NldHJlZyhodywgY3VycnBhZ2UsIEhGQTM4NHhfQVVYUEFHRSk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIGN1cnJvZmZzZXQsIEhGQTM4NHhfQVVYT0ZGU0VUKTsKKwl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKworCS8qIHdyaXRlIHRoZSBkYXRhICovCisJd2hpbGUgKCBpIDwgbGVuKSB7CisJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywKKwkJCSooKFVJTlQxNiopKGJ1ZitpKSksIEhGQTM4NHhfQVVYREFUQSk7CisJCWkrPTI7CisJCWN1cnJvZmZzZXQrPTI7CisJCWlmICggY3Vycm9mZnNldCA+IEhGQTM4NHhfQUREUl9BVVhfT0ZGX01BWCApIHsKKwkJCWN1cnJwYWdlKys7CisJCQljdXJyb2Zmc2V0ID0gMDsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJycGFnZSwgSEZBMzg0eF9BVVhQQUdFKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJyb2Zmc2V0LCBIRkEzODR4X0FVWE9GRlNFVCk7CisJCQl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKwkJfQorCX0KKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF93YWl0CisqCisqIFdhaXRzIGZvciBhdmFpbGFiaWxpdHkgb2YgdGhlIENvbW1hbmQgcmVnaXN0ZXIsIHRoZW4KKyogaXNzdWVzIHRoZSBnaXZlbiBjb21tYW5kLiAgVGhlbiBwb2xscyB0aGUgRXZzdGF0IHJlZ2lzdGVyCisqIHdhaXRpbmcgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4gIFRpbWVvdXRzIHNob3VsZG4ndCBiZQorKiBwb3NzaWJsZSBzaW5jZSB3ZSdyZSBwcmV2ZW50aW5nIG92ZXJsYXBwaW5nIGNvbW1hbmRzIGFuZCBhbGwKKyogY29tbWFuZHMgc2hvdWxkIGJlIGNsZWFyZWQgYW5kIGFja25vd2xlZGdlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIGNtZCAgICAgICAgICAgICBjbWQgc3RydWN0dXJlLiAgSW5jbHVkZXMgYWxsIGFyZ3VtZW50cyBhbmQgcmVzdWx0CisqICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHBvaW50cy4gIEFsbCBpbiBob3N0IG9yZGVyLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FVElNRURPVVQJdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZ2lzdGVyIHJlYWR5IG9yCisqCQkJY29tbWFuZCBjb21wbGV0aW9uCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaGZhMzg0eF9kb2NtZF93YWl0KCBoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQoreworCWludAkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKKwlVSU5UMTYJCXJlZyA9IDA7CisJVUlOVDE2ICAgICAgICAgIGNvdW50ZXI7CisKKwlEQkZFTlRFUjsKKworCWh3LT5jbWRmbGFnID0gMDsKKwlody0+Y21kZGF0YSA9IGNtZDsKKworCS8qIHdhaXQgZm9yIHRoZSBidXN5IGJpdCB0byBjbGVhciAqLworCWNvdW50ZXIgPSAwOworCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NNRCk7CisJd2hpbGUgKCBIRkEzODR4X0NNRF9JU0JVU1kocmVnKSAmJgorCQkoY291bnRlciA8IDEwKSkgeworCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9DTUQpOworCQljb3VudGVyKys7CisJCXVkZWxheSgxMCk7CisJfQorCisJaWYgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJoZmEzODR4X2NtZCB0aW1lb3V0KDEpLCByZWc9MHglMGh4LlxuIiwgcmVnKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCWlmICghSEZBMzg0eF9DTURfSVNCVVNZKHJlZykpIHsKKwkJLyogYnVzeSBiaXQgY2xlYXIsIHdyaXRlIGNvbW1hbmQgKi8KKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTAsIEhGQTM4NHhfUEFSQU0wKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTEsIEhGQTM4NHhfUEFSQU0xKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTIsIEhGQTM4NHhfUEFSQU0yKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+Y21kLCBIRkEzODR4X0NNRCk7CisKKyNpZmRlZiBDTURfSVJRCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwyLDApKQorCQl3aGlsZSAoISBody0+Y21kZmxhZykKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmh3LT5jbWRxKTsKKyNlbHNlCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShody0+Y21kcSwgaHctPmNtZGZsYWcpOworI2VuZGlmCisJCXJlc3VsdCA9IEhGQTM4NHhfU1RBVFVTX1JFU1VMVF9HRVQoY21kLT5zdGF0dXMpOworI2Vsc2UgLy8gQ01EX0lSUQorCQkvKiBOb3cgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCQljb3VudGVyID0gMDsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKwkJLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHByb2JsZW0uICBJdCB0YWtlcyBhYm91dAorICAgICAgICAgICAgICAgICAgIDEwMG1zLiAibm9ybWFsIiBjb21tYW5kcyBhcmUgdHlwaWNhbGx5IGlzIGFib3V0CisgICAgICAgICAgICAgICAgICAgMjAwLTQwMCB1cyAoSSd2ZSBuZXZlciBzZWVuIGxlc3MgdGhhbiAyMDApLiAgTG9uZ2VyCisgICAgICAgICAgICAgICAgICAgaXMgYmV0dGVyIHNvIHRoYXQgd2UncmUgbm90IGhhbW1lcmluZyB0aGUgYnVzLiAqLworCQl3aGlsZSAoICFIRkEzODR4X0VWU1RBVF9JU0NNRChyZWcpICYmCisJCQkoY291bnRlciA8IDUwMDApKSB7CisJCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpOworCQkJY291bnRlcisrOworCQkJdWRlbGF5KDIwMCk7CisJCX0KKworCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTQ01EKHJlZykgKSB7CisJCQlyZXN1bHQgPSAwOworCQkJY21kLT5yZXN1bHQuc3RhdHVzID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfU1RBVFVTKTsKKwkJCWNtZC0+cmVzdWx0LnJlc3AwID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDApOworCQkJY21kLT5yZXN1bHQucmVzcDEgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMSk7CisJCQljbWQtPnJlc3VsdC5yZXNwMiA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AyKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0NNRCwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJCXJlc3VsdCA9IEhGQTM4NHhfU1RBVFVTX1JFU1VMVF9HRVQoY21kLT5yZXN1bHQuc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJoZmEzODR4X2NtZCB0aW1lb3V0KDIpLCByZWc9MHglMGh4LlxuIiwgcmVnKTsKKwkJfQorI2VuZGlmICAvKiBDTURfSVJRICovCisJfQorCisgZmFpbGVkOgorCWh3LT5jbWRmbGFnID0gMDsKKwlody0+Y21kZGF0YSA9IE5VTEw7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZGxfZG9jbWRfd2FpdAorKgorKiBXYWl0cyBmb3IgYXZhaWxhYmlsaXR5IG9mIHRoZSBDb21tYW5kIHJlZ2lzdGVyLCB0aGVuCisqIGlzc3VlcyB0aGUgZ2l2ZW4gY29tbWFuZC4gIFRoZW4gcG9sbHMgdGhlIEV2c3RhdCByZWdpc3RlcgorKiB3YWl0aW5nIGZvciBjb21tYW5kIGNvbXBsZXRpb24uICBUaW1lb3V0cyBzaG91bGRuJ3QgYmUKKyogcG9zc2libGUgc2luY2Ugd2UncmUgcHJldmVudGluZyBvdmVybGFwcGluZyBjb21tYW5kcyBhbmQgYWxsCisqIGNvbW1hbmRzIHNob3VsZCBiZSBjbGVhcmVkIGFuZCBhY2tub3dsZWRnZWQuCisqCisqIFRoaXMgcm91dGluZSBpcyBvbmx5IHVzZWQgZm9yIGRvd25sb2Fkcy4gIFNpbmNlIGl0IGRvZXNuJ3QgbG9jayBvdXQKKyogaW50ZXJydXB0cyB0aGUgc3lzdGVtIHJlc3BvbnNlIGlzIG11Y2ggYmV0dGVyLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCWRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgY21kICAgICAgICAgICAgIGNtZCBzdHJ1Y3R1cmUuICBJbmNsdWRlcyBhbGwgYXJndW1lbnRzIGFuZCByZXN1bHQKKyogICAgICAgICAgICAgICAgICAgICAgIGRhdGEgcG9pbnRzLiAgQWxsIGluIGhvc3Qgb3JkZXIuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBoZmEzODR4X2RsX2RvY21kX3dhaXQoIGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCit7CisJaW50CQlyZXN1bHQgPSAtRVRJTUVET1VUOworCXVuc2lnbmVkIGxvbmcJdGltZW91dDsKKwlVSU5UMTYJCXJlZyA9IDA7CisKKwlEQkZFTlRFUjsKKwkvKiB3YWl0IGZvciB0aGUgYnVzeSBiaXQgdG8gY2xlYXIgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIDEqSFo7CisJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwl3aGlsZSAoIEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpICYmIHRpbWVfYmVmb3JlKCBqaWZmaWVzLCB0aW1lb3V0KSApIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpKSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjbWQgcmVnaXN0ZXIuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWYgKCFIRkEzODR4X0NNRF9JU0JVU1kocmVnKSkgeworCQkvKiBidXN5IGJpdCBjbGVhciwgd3JpdGUgY29tbWFuZCAqLworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5wYXJtMCwgSEZBMzg0eF9QQVJBTTApOworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5wYXJtMSwgSEZBMzg0eF9QQVJBTTEpOworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5wYXJtMiwgSEZBMzg0eF9QQVJBTTIpOworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5jbWQsIEhGQTM4NHhfQ01EKTsKKworCQkvKiBOb3cgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCQlpZiAoIChIRkEzODR4X0NNRF9DTURDT0RFX0dFVChjbWQtPmNtZCkgPT0gSEZBMzg0eF9DTURDT0RFX0RPV05MRCkgKSB7CisJCQkvKiBkbHRpbWVvdXQgaXMgaW4gbXMgKi8KKwkJCXRpbWVvdXQgPSAoKChVSU5UMzIpaHctPmRsdGltZW91dCkgLyAxMDAwVUwpICogSFo7CisJCQlpZiAoIHRpbWVvdXQgPiAwICkgeworCQkJCXRpbWVvdXQgKz0gamlmZmllczsKKwkJCX0gZWxzZSB7CisJCQkJdGltZW91dCA9IGppZmZpZXMgKyAxKkhaOworCQkJfQorCQl9IGVsc2UgeworCQkJdGltZW91dCA9IGppZmZpZXMgKyAxKkhaOworCQl9CisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisJCXdoaWxlICggIUhGQTM4NHhfRVZTVEFUX0lTQ01EKHJlZykgJiYgdGltZV9iZWZvcmUoamlmZmllcyx0aW1lb3V0KSApIHsKKwkJCXVkZWxheSgxMDApOworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKwkJfQorCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTQ01EKHJlZykgKSB7CisJCQlyZXN1bHQgPSAwOworCQkJY21kLT5yZXN1bHQuc3RhdHVzID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfU1RBVFVTKTsKKwkJCWNtZC0+cmVzdWx0LnJlc3AwID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDApOworCQkJY21kLT5yZXN1bHQucmVzcDEgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMSk7CisJCQljbWQtPnJlc3VsdC5yZXNwMiA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AyKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0NNRCwgSEZBMzg0eF9FVkFDSyk7CisJCQlyZXN1bHQgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKGNtZC0+cmVzdWx0LnN0YXR1cyk7CisJCX0KKwl9CisKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc3RhcnQKKyoKKyogSXNzdWVzIHRoZSBNQUMgaW5pdGlhbGl6ZSBjb21tYW5kLCBzZXRzIHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzLAorKiBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCB0aGUKKyogbG93LWxldmVsIHN0dWZmIHNob3VsZCBiZSByZWFkeSBmb3IgYW55L2FsbCBjb21tYW5kcy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KQoreworCWludAlyZXN1bHQgPSAwOworCVVJTlQxNgkJCXJlZzsKKwlpbnQJCQlpOworCWludAkJCWo7CisJREJGRU5URVI7CisKKwkvKiBjYWxsIGluaXRpYWxpemUgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkluaXRpYWxpemUgY29tbWFuZCBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogbWFrZSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZCBhbnkgbGF5YWJvdXQgZXZlbnRzIGNsZWFyZWQgKi8KKwloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9JTlRFTik7CisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4ZmZmZiwgSEZBMzg0eF9FVkFDSyk7CisKKyAgICAgICAgaHctPnR4ZmlkX2hlYWQgPSAwOworICAgICAgICBody0+dHhmaWRfdGFpbCA9IDA7CisgICAgICAgIGh3LT50eGZpZF9OID0gSEZBMzg0eF9EUlZSX0ZJRFNUQUNLTEVOX01BWDsKKyAgICAgICAgbWVtc2V0KGh3LT50eGZpZF9xdWV1ZSwgMCwgc2l6ZW9mKGh3LT50eGZpZF9xdWV1ZSkpOworCisJLyogQWxsb2NhdGUgdHggYW5kIG5vdGlmeSBGSURzICovCisJLyogRmlyc3QsIHR4ICovCisJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X0RSVlJfRklEU1RBQ0tMRU5fTUFYLTE7IGkrKykgeworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9hbGxvY2F0ZShodywgSEZBMzg0eF9EUlZSX1RYQlVGX01BWCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJV0xBTl9MT0dfRVJST1IoIkFsbG9jYXRlKHR4KSBjb21tYW5kIGZhaWxlZC5cbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJaiA9IDA7CisJCWRvIHsKKwkJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisJCQl1ZGVsYXkoMTApOworCQkJaisrOworCQl9IHdoaWxlICggIUhGQTM4NHhfRVZTVEFUX0lTQUxMT0MocmVnKSAmJiBqIDwgNTApOyAvKiA1MCBpcyB0aW1lb3V0ICovCisJCWlmICggaiA+PSA1MCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZXZhbGxvYyh0eCkuXG4iKTsKKwkJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9BTExPQ0ZJRCk7CisKKwkJdHhmaWRfcXVldWVfYWRkKGh3LCByZWcpOworCisJCVdMQU5fTE9HX0RFQlVHKDQsImh3LT50eGZpZF9xdWV1ZVslZF09MHglMDR4XG4iLGkscmVnKTsKKworCQlyZWcgPSBIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCgxKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIHJlZywgSEZBMzg0eF9FVkFDSyk7CisKKwl9CisKKwkvKiBOb3csIHRoZSBpbmZvIGZyYW1lIGZpZCAqLworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2FsbG9jYXRlKGh3LCBIRkEzODR4X0lORk9GUk1fTUFYTEVOKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkFsbG9jYXRlKHR4KSBjb21tYW5kIGZhaWxlZC5cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaSA9IDA7CisJZG8geworCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpOworCQl1ZGVsYXkoMTApOworCQlpKys7CisJfSB3aGlsZSAoICFIRkEzODR4X0VWU1RBVF9JU0FMTE9DKHJlZykgJiYgaSA8IDUwKTsgLyogNTAgaXMgdGltZW91dCAqLworCWlmICggaSA+PSA1MCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBldmFsbG9jKGluZm8pLlxuIik7CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJCWdvdG8gZmFpbGVkOworCX0KKwlody0+aW5mb2ZpZCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0FMTE9DRklEKTsKKwlyZWcgPSBIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCgxKTsKKwloZmEzODR4X3NldHJlZyhodywgcmVnLCBIRkEzODR4X0VWQUNLKTsKKwlXTEFOX0xPR19ERUJVRyg0LCJody0+aW5mb2ZpZD0weCUwNHhcbiIsIGh3LT5pbmZvZmlkKTsKKworCS8qIFNldCBzd3N1cHBvcnQgcmVncyB0byBtYWdpYyAjIGZvciBjYXJkIHByZXNlbmNlIGRldGVjdGlvbiAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0RSVlJfTUFHSUMsIEhGQTM4NHhfU1dTVVBQT1JUMCk7CisKKwkvKiBOb3cgZW5hYmxlIHRoZSBpbnRlcnJ1cHRzIGFuZCBzZXQgdGhlIHJ1bm5pbmcgc3RhdGUgKi8KKwloZmEzODR4X3NldHJlZyhodywgMHhmZmZmLCBIRkEzODR4X0VWU1RBVCk7CisJaGZhMzg0eF9ldmVudHNfYWxsKGh3KTsKKworCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUlVOTklORzsKKworCWdvdG8gZG9uZTsKK2ZhaWxlZDoKKwlXTEFOX0xPR19FUlJPUigiRmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7Citkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3N0b3AKKyoKKyogSXNzdWVzIHRoZSBpbml0aWFsaXplIGNvbW1hbmQgdG8gbGVhdmUgdXMgaW4gdGhlICdyZXNldCcgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KQoreworCWludAlyZXN1bHQgPSAwOworCWludCBpOworCURCRkVOVEVSOworCisJZGVsX3RpbWVyX3N5bmMoJmh3LT5jb21tc3F1YWxfdGltZXIpOworCisJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkgeworCQkvKiBvbmx5IGZsdXNoIHdoZW4gd2UncmUgc2h1dHRpbmcgZG93biBmb3IgZ29vZCAqLworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCX0KKworCWlmIChody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HKSB7CisJCS8qCisJCSAqIFNlbmQgdGhlIE1BQyBpbml0aWFsaXplIGNtZC4KKwkJICovCisJCWhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworCisJCS8qCisJCSAqIE1ha2UgYWJzb2x1dGVseSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZCBhbnkKKwkJICogbGF5YWJvdXQgZXZlbnRzIGNsZWFyZWQKKwkJICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X0lOVEVOKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIDB4ZmZmZiwgSEZBMzg0eF9FVkFDSyk7CisJfQorCisJdGFza2xldF9raWxsKCZody0+YmFwX3Rhc2tsZXQpOworCisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CisKKwkvKiBDbGVhciBhbGwgdGhlIHBvcnQgc3RhdHVzICovCisJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X05VTVBPUlRTX01BWDsgaSsrKSB7CisJCWh3LT5wb3J0X2VuYWJsZWRbaV0gPSAwOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3R4ZnJhbWUKKyoKKyogVGFrZXMgYSBmcmFtZSBmcm9tIHByaXNtMnN0YSBhbmQgcXVldWVzIGl0IGZvciB0cmFuc21pc3Npb24uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlwYWNrZXQgYnVmZmVyIHN0cnVjdC4gIENvbnRhaW5zIGFuIDgwMi4xMQorKgkJCWRhdGEgZnJhbWUuCisqICAgICAgIHA4MDIxMV9oZHIgICAgICBwb2ludHMgdG8gdGhlIDgwMi4xMSBoZWFkZXIgZm9yIHRoZSBwYWNrZXQuCisqIFJldHVybnM6CisqCTAJCVN1Y2Nlc3MgYW5kIG1vcmUgYnVmZnMgYXZhaWxhYmxlCisqCTEJCVN1Y2Nlc3MgYnV0IG5vIG1vcmUgYnVmZnMKKyoJMgkJQWxsb2NhdGlvbiBmYWlsdXJlCisqCTMJCU1BQyBUeCBjb21tYW5kIGZhaWxlZAorKgk0CQlCdWZmZXIgZnVsbCBvciBxdWV1ZSBidXN5CisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQoreworCWhmYTM4NHhfdHhfZnJhbWVfdAl0eGRlc2M7CisJVUlOVDE2CQkJbWFjcSA9IDA7CisJVUlOVDE2CQkJZmlkOworCWludAkJCXJlc3VsdDsKKworCURCRkVOVEVSOworCisJLyogQnVpbGQgVHggZnJhbWUgc3RydWN0dXJlICovCisJLyogU2V0IHVwIHRoZSBjb250cm9sIGZpZWxkICovCisJbWVtc2V0KCZ0eGRlc2MsIDAsIHNpemVvZih0eGRlc2MpKTsKKworLyogVHggY29tcGxldGUgYW5kIFR4IGV4Y2VwdGlvbiBkaXNhYmxlIHBlciBkbGVhY2guICBNaWdodCBiZSBjYXVzaW5nCisgKiBidWYgZGVwbGV0aW9uCisgKi8KKyNkZWZpbmUgRE9CT1RIIDEKKyNpZiBET0JPVEgKKwl0eGRlc2MudHhfY29udHJvbCA9CisJCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCQlIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgxKTsKKyNlbGlmIERPRVhDCisJdHhkZXNjLnR4X2NvbnRyb2wgPQorCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisjZWxzZQorCXR4ZGVzYy50eF9jb250cm9sID0KKwkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8CisJCUhGQTM4NHhfVFhfVFhFWF9TRVQoMCkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworI2VuZGlmCisKKwkvKiBpZiB3ZSdyZSB1c2luZyBob3N0IFdFUCwgaW5jcmVhc2Ugc2l6ZSBieSBJVitJQ1YgKi8KKwlpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQl0eGRlc2MuZGF0YV9sZW4gPSBob3N0MmhmYTM4NHhfMTYoc2tiLT5sZW4rOCk7CisJCS8vCQl0eGRlc2MudHhfY29udHJvbCB8PSBIRkEzODR4X1RYX05PRU5DUllQVF9TRVQoMSk7CisJfSBlbHNlIHsKKwkJdHhkZXNjLmRhdGFfbGVuID0gIGhvc3QyaGZhMzg0eF8xNihza2ItPmxlbik7CisJfQorCisJdHhkZXNjLnR4X2NvbnRyb2wgPSBob3N0MmhmYTM4NHhfMTYodHhkZXNjLnR4X2NvbnRyb2wpOworCS8qIGNvcHkgdGhlIGhlYWRlciBvdmVyIHRvIHRoZSB0eGRlc2MgKi8KKwltZW1jcHkoJih0eGRlc2MuZnJhbWVfY29udHJvbCksIHA4MDIxMV9oZHIsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKworCS8qIFNpbmNlIHRidXN5IGlzIHNldCB3aGVuZXZlciB0aGUgc3RhY2sgaXMgZW1wdHksIHRoZXJlIHNob3VsZAorCSAqIGFsd2F5cyBiZSBzb21ldGhpbmcgb24gdGhlIHN0YWNrIGlmIHdlIGdldCB0byB0aGlzIHBvaW50LgorCSAqIFtNU01dOiBOT1QgVFJVRSEhISEhIHNvIEkgYWRkZWQgdGhlIHRlc3Qgb2YgZmlkIGJlbG93LgorCSAqLworCisJLyogQWxsb2NhdGUgRklEICovCisKKwlmaWQgPSB0eGZpZF9xdWV1ZV9yZW1vdmUoaHcpOworCisJaWYgKCBmaWQgPT0gMCApIHsgLyogc3RhY2sgb3IgcXVldWUgd2FzIGVtcHR5ICovCisJCXJldHVybiA0OworCX0KKworCS8qIG5vdyBsZXQncyBnZXQgdGhlIGNtZGxvY2sgKi8KKwlzcGluX2xvY2soJmh3LT5jbWRsb2NrKTsKKworCS8qIENvcHkgZGVzY3JpcHRvcitwYXlsb2FkIHRvIEZJRCAqLworICAgICAgICBpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcHlfdG9fYmFwNChodywgSEZBMzg0eF9CQVBfUFJPQywgZmlkLCAwLAorCQkJCQkgICAgICAmdHhkZXNjLCBzaXplb2YodHhkZXNjKSwKKwkJCQkJICAgICAgcDgwMjExX3dlcC0+aXYsIHNpemVvZihwODAyMTFfd2VwLT5pdiksCisJCQkJCSAgICAgIHA4MDIxMV93ZXAtPmRhdGEsIHNrYi0+bGVuLAorCQkJCQkgICAgICBwODAyMTFfd2VwLT5pY3YsIHNpemVvZihwODAyMTFfd2VwLT5pY3YpKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcHlfdG9fYmFwNChodywgSEZBMzg0eF9CQVBfUFJPQywgZmlkLCAwLAorCQkJCQkgICAgICAmdHhkZXNjLCBzaXplb2YodHhkZXNjKSwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisJfQorCisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV90b19iYXAoJTA0eCwgJWQsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJZmlkLAorCQkgCXNpemVvZih0eGRlc2MpLAorCSAJCXNrYi0+bGVuLAorCQkJcmVzdWx0KTsKKworCQkvKiBwdXQgdGhlIGZpZCBiYWNrIGluIHRoZSBxdWV1ZSAqLworCQl0eGZpZF9xdWV1ZV9hZGQoaHcsIGZpZCk7CisKKwkJcmVzdWx0ID0gMzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogSXNzdWUgVHggY29tbWFuZCAqLworCXJlc3VsdCA9IGhmYTM4NHhfY21kX3RyYW5zbWl0KGh3LCBIRkEzODR4X1RYQ01EX1JFQ0wsIG1hY3EsIGZpZCk7CisKKwlpZiAoIHJlc3VsdCAhPSAwICkgeworCQl0eGZpZF9xdWV1ZV9hZGQoaHcsIGZpZCk7CisKKwkJV0xBTl9MT0dfREVCVUcoMSwiY21kX3R4KCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkXG4iLAorCQkJZmlkLCByZXN1bHQpOworCQlyZXN1bHQgPSAzOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBpbmRpY2F0ZSB3ZSBoYXZlbid0IGFueSBidWZmZXJzLCBpbnRfYWxsb2Mgd2lsbCBjbGVhciAqLworCXJlc3VsdCA9IHR4ZmlkX3F1ZXVlX2VtcHR5KGh3KTsKK2ZhaWxlZDoKKworCXNwaW5fdW5sb2NrKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludGVycnVwdAorKgorKiBEcml2ZXIgaW50ZXJydXB0IGhhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJaXJxCQlpcnEgbnVtYmVyCisqCWRldl9pZAkJcG9pbnRlciB0byB0aGUgZGV2aWNlCisqCXJlZ3MJCXJlZ2lzdGVycworKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJTWF5IHJlc3VsdCBpbiBhIGZyYW1lIGJlaW5nIHBhc3NlZCB1cCB0aGUgc3RhY2sgb3IgYW4gaW5mbworKglmcmFtZSBiZWluZyBoYW5kbGVkLgorKgorKiBDYWxsIGNvbnRleHQ6CisqCVVtbW0sIGNvdWxkIGl0IGJlIGludGVycnVwdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaXJxcmV0dXJuX3QgaGZhMzg0eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1MpCit7CisJaW50CQkJcmVnOworCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXZfaWQ7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCWludAkJCWV2X3JlYWQgPSAwOworCURCRkVOVEVSOworCisJaWYgKCF3bGFuZGV2IHx8IHdsYW5kZXYtPmh3cmVtb3ZlZCkKKwkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG11Y2ggd2UgY2FuIGRvIHcvbyBoYXJkd2FyZSAqLworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKwlpZiAoaHctPmlvYmFzZSA9PSAwKSAgLyogWFhYIEZJWE1FIFByb3Blcmx5ICovCisJCXJldHVybiBJUlFfTk9ORTsKKyNlbmRpZgorCisJZm9yICg7O2V2X3JlYWQrKykgeworCQlpZiAoZXZfcmVhZCA+PSBwcmlzbTJfaXJxX2V2cmVhZF9tYXgpCisJCQlicmVhazsKKworCQkvKiBDaGVjayBzd3N1cHBvcnQgcmVnIG1hZ2ljICMgZm9yIGNhcmQgcHJlc2VuY2UgKi8KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfU1dTVVBQT1JUMCk7CisJCWlmICggcmVnICE9IEhGQTM4NHhfRFJWUl9NQUdJQykgeworCQkJV0xBTl9MT0dfREVCVUcoMiwgImlycT0lZCwgbm8gbWFnaWMuICBDYXJkIHJlbW92ZWQ/LlxuIiwgaXJxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogcmVhZCB0aGUgRXZTdGF0IHJlZ2lzdGVyIGZvciBpbnRlcnJ1cHQgZW5hYmxlZCBldmVudHMgKi8KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKworCQkvKiBBTkQgd2l0aCB0aGUgZW5hYmxlZCBpbnRlcnJ1cHRzICovCisJCXJlZyAmPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9JTlRFTik7CisKKwkJLyogSGFuZGxlIHRoZSBldmVudHMgKi8KKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU1dURVJSKHJlZykgKXsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkVycm9yOiBXVEVSUiBpbnRlcnJ1cHQgcmVjZWl2ZWQgKHVuaGFuZGxlZCkuXG4iKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX1dURVJSX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNJTkZEUk9QKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X2luZmRyb3Aod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19JTkZEUk9QX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCisJCWlmIChIRkEzODR4X0VWU1RBVF9JU0JBUF9PUChyZWcpKSB7CisJCQkvKiBEaXNhYmxlIHRoZSBCQVAgaW50ZXJydXB0cyAqLworCQkJaGZhMzg0eF9ldmVudHNfbm9iYXAoaHcpOworCQkJdGFza2xldF9zY2hlZHVsZSgmaHctPmJhcF90YXNrbGV0KTsKKwkJfQorCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNBTExPQyhyZWcpICl7CisJCQloZmEzODR4X2ludF9hbGxvYyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNEVElNKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X2R0aW0od2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19EVElNX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorI2lmZGVmIENNRF9JUlEKKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU0NNRChyZWcpICl7CisJCQloZmEzODR4X2ludF9jbWQod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19DTURfU0VUKDEpLAorCQkJCSAgICAgICBIRkEzODR4X0VWQUNLKTsKKwkJfQorI2VuZGlmCisKKwkJLyogYWxsb3cgdGhlIGV2c3RhdCB0byBiZSB1cGRhdGVkIGFmdGVyIHRoZSBldmFjayAqLworCQl1ZGVsYXkoMjApOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ01EX0lSUQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X2NtZAorKgorKiBIYW5kbGVzIGNvbW1hbmQgY29tcGxldGlvbiBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgaGZhMzg0eF9pbnRfY21kKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJREJGRU5URVI7CisKKwkvLyBjaGVjayB0byBtYWtlIHN1cmUgaXQncyB0aGUgcmlnaHQgY29tbWFuZD8KKwlpZiAoaHctPmNtZGRhdGEpIHsKKwkJaHctPmNtZGRhdGEtPnN0YXR1cyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1NUQVRVUyk7CisJCWh3LT5jbWRkYXRhLT5yZXNwMCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AwKTsKKwkJaHctPmNtZGRhdGEtPnJlc3AxID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDEpOworCQlody0+Y21kZGF0YS0+cmVzcDIgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMik7CisJfQorCWh3LT5jbWRmbGFnID0gMTsKKworCXByaW50ayhLRVJOX0lORk8gInVtLiBpbnRfY21kXG4iKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaHctPmNtZHEpOworCisJLy8gWFhYWCBwZXJmb3JtIGEgYmFwIGNvcHkgdG9vPworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X2R0aW0KKyoKKyogSGFuZGxlcyB0aGUgRFRJTSBlYXJseSB3YXJuaW5nIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisjaWYgMAorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKyNlbmRpZgorCURCRkVOVEVSOworCXByaXNtMnN0YV9ldl9kdGltKHdsYW5kZXYpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9pbmZkcm9wCisqCisqIEhhbmRsZXMgdGhlIEluZkRyb3AgZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKyNpZiAwCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworI2VuZGlmCisJREJGRU5URVI7CisJcHJpc20yc3RhX2V2X2luZmRyb3Aod2xhbmRldik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X2luZm8KKyoKKyogSGFuZGxlcyB0aGUgSW5mbyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJdGFza2xldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJVUlOVDE2CQkJcmVnOworCWhmYTM4NHhfSW5mRnJhbWVfdAlpbmY7CisJaW50CQkJcmVzdWx0OworCURCRkVOVEVSOworCS8qIFJldHJpZXZlIHRoZSBGSUQgKi8KKwlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9JTkZPRklEKTsKKworCS8qIFJldHJpZXZlIHRoZSBsZW5ndGggKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoIGh3LAorCQlIRkEzODR4X0JBUF9JTlQsIHJlZywgMCwgJmluZi5mcmFtZWxlbiwgc2l6ZW9mKFVJTlQxNikpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImNvcHlfZnJvbV9iYXAoMHglMDR4LCAwLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCXJlZywgc2l6ZW9mKGluZiksIHJlc3VsdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlpbmYuZnJhbWVsZW4gPSBoZmEzODR4Mmhvc3RfMTYoaW5mLmZyYW1lbGVuKTsKKworCS8qIFJldHJpZXZlIHRoZSByZXN0ICovCisJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKCBodywKKwkJSEZBMzg0eF9CQVBfSU5ULCByZWcsIHNpemVvZihVSU5UMTYpLAorCQkmKGluZi5pbmZvdHlwZSksIGluZi5mcmFtZWxlbiAqIHNpemVvZihVSU5UMTYpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJjb3B5X2Zyb21fYmFwKDB4JTA0eCwgMCwgJWQpIGZhaWxlZCwgcmVzdWx0PTB4JXhcbiIsCisJCQlyZWcsIHNpemVvZihpbmYpLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2LCAmaW5mKTsKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfdHhleGMKKyoKKyogSGFuZGxlcyB0aGUgVHhFeGMgZXZlbnQuICBBIFRyYW5zbWl0IEV4Y2VwdGlvbiBldmVudCBpbmRpY2F0ZXMKKyogdGhhdCB0aGUgTUFDJ3MgVFggcHJvY2VzcyB3YXMgdW5zdWNjZXNzZnVsIC0gc28gdGhlIHBhY2tldCBkaWQKKyogbm90IGdldCB0cmFuc21pdHRlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJdGFza2xldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCXN0YXR1czsKKwlVSU5UMTYJCQlmaWQ7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKwkvKiBDb2xsZWN0IHRoZSBzdGF0dXMgYW5kIGRpc3BsYXkgKi8KKwlmaWQgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9UWENPTVBMRklEKTsKKwlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoaHcsIEhGQTM4NHhfQkFQX0lOVCwgZmlkLCAwLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsIDAsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJZmlkLCBzaXplb2Yoc3RhdHVzKSwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCXN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihzdGF0dXMpOworCXByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2LCBzdGF0dXMpOworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF90eAorKgorKiBIYW5kbGVzIHRoZSBUeCBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJdGFza2xldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCWZpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKwlmaWQgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9UWENPTVBMRklEKTsKKwlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoaHcsIEhGQTM4NHhfQkFQX0lOVCwgZmlkLCAwLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsIDAsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJZmlkLCBzaXplb2Yoc3RhdHVzKSwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCXN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihzdGF0dXMpOworCXByaXNtMnN0YV9ldl90eCh3bGFuZGV2LCBzdGF0dXMpOworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfcngKKyoKKyogSGFuZGxlcyB0aGUgUnggZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXRhc2tsZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfcngod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYJCQlyeGZpZDsKKwloZmEzODR4X3J4X2ZyYW1lX3QJcnhkZXNjOworCWludAkJCXJlc3VsdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBoZHJsZW47CisJVUlOVDE2ICAgICAgICAgICAgICAgICAgZmM7CisJcDgwMjExX3J4bWV0YV90CSpyeG1ldGE7CisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAgKnNrYiA9IE5VTEw7CisJVUlOVDggKmRhdGFwOworCisJREJGRU5URVI7CisKKwkvKiBHZXQgdGhlIEZJRCAqLworCXJ4ZmlkID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUlhGSUQpOworCS8qIEdldCB0aGUgZGVzY3JpcHRvciAoaW5jbHVkaW5nIGhlYWRlcnMpICovCisJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LAorCQkJSEZBMzg0eF9CQVBfSU5ULAorCQkJcnhmaWQsCisJCQkwLAorCQkJJnJ4ZGVzYywKKwkJCXNpemVvZihyeGRlc2MpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJjb3B5X2Zyb21fYmFwKDB4JTA0eCwgJWQsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJcnhmaWQsCisJCQkwLAorCQkJc2l6ZW9mKHJ4ZGVzYyksCisJCQlyZXN1bHQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogQnl0ZSBvcmRlciBjb252ZXJ0IG9uY2UgdXAgZnJvbnQuICovCisJcnhkZXNjLnN0YXR1cyA9CWhmYTM4NHgyaG9zdF8xNihyeGRlc2Muc3RhdHVzKTsKKwlyeGRlc2MudGltZSA9CWhmYTM4NHgyaG9zdF8zMihyeGRlc2MudGltZSk7CisKKwkvKiBkcm9wIGVycm9ycyBhbmQgd2hhdG5vdCBpbiBwcm9taXNjIG1vZGUgKi8KKwlpZiAoKCB3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MgKSAmJgorCSAgICAoSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUihyeGRlc2Muc3RhdHVzKSB8fAorCSAgICAgSEZBMzg0eF9SWFNUQVRVU19JU1VOREVDUihyeGRlc2Muc3RhdHVzKSkpCisJICBnb3RvIGRvbmU7CisKKwkvKiBOb3cgaGFuZGxlIGZyYW1lIGJhc2VkIG9uIHBvcnQjICovCisJc3dpdGNoKCBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfR0VUKHJ4ZGVzYy5zdGF0dXMpICkKKwl7CisJY2FzZSAwOgorCisJCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLmZyYW1lX2NvbnRyb2wpOworCisJCS8qIElmIGV4Y2x1ZGUgYW5kIHdlIHJlY2VpdmUgYW4gdW5lbmNyeXB0ZWQsIGRyb3AgaXQgKi8KKwkJaWYgKCAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKSAmJgorCQkgICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpIHsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWhkcmxlbiA9IHA4MDIxMV9oZWFkZXJsZW4oZmMpOworCisJCS8qIEFsbG9jYXRlIHRoZSBidWZmZXIsIG5vdGUgQ1JDIChha2EgRkNTKS4gcGJhbGxvYyAqLworCQkvKiBhc3N1bWVzIHRoZXJlIG5lZWRzIHRvIGJlIHNwYWNlIGZvciBvbmUgKi8KKwkJc2tiID0gZGV2X2FsbG9jX3NrYihoZmEzODR4Mmhvc3RfMTYocnhkZXNjLmRhdGFfbGVuKSArIGhkcmxlbiArIFdMQU5fQ1JDX0xFTiArIDIpOyAvKiBhIGxpdHRsZSBleHRyYSAqLworCisJCWlmICggISBza2IgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiYWxsb2Nfc2tiIGZhaWxlZC5cbiIpOworCQkJZ290byBkb25lOworICAgICAgICAgICAgICAgIH0KKworCQlza2ItPmRldiA9IHdsYW5kZXYtPm5ldGRldjsKKworCQkvKiB0aGVvcmV0aWNhbGx5IGFsaWduIHRoZSBJUCBoZWFkZXIgb24gYSAzMi1iaXQgd29yZC4gKi8KKwkJaWYgKCBoZHJsZW4gPT0gV0xBTl9IRFJfQTRfTEVOICkKKwkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwkJLyogQ29weSB0aGUgODAyLjExIGhkciB0byB0aGUgYnVmZmVyICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIFdMQU5fSERSX0EzX0xFTik7CisJCW1lbWNweShkYXRhcCwgJnJ4ZGVzYy5mcmFtZV9jb250cm9sLCBXTEFOX0hEUl9BM19MRU4pOworCisJCS8qIFNuYWcgdGhlIEE0IGFkZHJlc3MgaWYgcHJlc2VudCAqLworCQlpZiAoaGRybGVuID09IFdMQU5fSERSX0E0X0xFTikgeworCQkJZGF0YXAgPSBza2JfcHV0KHNrYiwgV0xBTl9BRERSX0xFTik7CisJCQltZW1jcHkoZGF0YXAsICZyeGRlc2MuYWRkcmVzczQsIFdMQU5fSERSX0EzX0xFTik7CisJCX0KKworCQkvKiB3ZSBjYW4gY29udmVydCB0aGUgZGF0YV9sZW4gYXMgd2UgcGFzc2VkIHRoZSBvcmlnaW5hbCBvbiAqLworCQlyeGRlc2MuZGF0YV9sZW4gPSBoZmEzODR4Mmhvc3RfMTYocnhkZXNjLmRhdGFfbGVuKTsKKworCQkvKiBDb3B5IHRoZSBwYXlsb2FkIGRhdGEgdG8gdGhlIGJ1ZmZlciAqLworCQlpZiAoIHJ4ZGVzYy5kYXRhX2xlbiA+IDAgKSB7CisJCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCByeGRlc2MuZGF0YV9sZW4pOworCQkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LAorCQkJCUhGQTM4NHhfQkFQX0lOVCwgcnhmaWQsIEhGQTM4NHhfUlhfREFUQV9PRkYsCisJCQkJZGF0YXAsIHJ4ZGVzYy5kYXRhX2xlbik7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsICVkLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCQkJcnhmaWQsCisJCQkJCUhGQTM4NHhfUlhfREFUQV9PRkYsCisJCQkJCXJ4ZGVzYy5kYXRhX2xlbiwKKwkJCQkJcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJfQorCQkvKiB0aGUgcHJpc20yIGNhcmRzIGRvbid0IHJldHVybiB0aGUgRkNTICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIFdMQU5fQ1JDX0xFTik7CisJCW1lbXNldCAoZGF0YXAsIDB4ZmYsIFdMQU5fQ1JDX0xFTik7CisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwkJLyogQXR0YWNoIHRoZSByeG1ldGEsIHNldCBzb21lIHN0dWZmICovCisJCXA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHdsYW5kZXYsIHNrYik7CisJCXJ4bWV0YSA9IFA4MDIxMVNLQl9SWE1FVEEoc2tiKTsKKwkJcnhtZXRhLT5tYWN0aW1lID0gcnhkZXNjLnRpbWU7CisJCXJ4bWV0YS0+cnhyYXRlID0gcnhkZXNjLnJhdGU7CisJCXJ4bWV0YS0+c2lnbmFsID0gcnhkZXNjLnNpZ25hbCAtIGh3LT5kYm1hZGp1c3Q7CisJCXJ4bWV0YS0+bm9pc2UgPSByeGRlc2Muc2lsZW5jZSAtIGh3LT5kYm1hZGp1c3Q7CisKKwkJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CisJCWdvdG8gZG9uZTsKKwljYXNlIDc6CisKKyAgICAgICAgCWlmICggISBIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHJ4ZGVzYy5zdGF0dXMpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2LCByeGZpZCwgJnJ4ZGVzYyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIG1vbml0b3IgZnJhbWU6IEZDU2VyciBzZXRcbiIpOworICAgICAgICAgICAgICAgIH0KKwkJZ290byBkb25lOworCisJZGVmYXVsdDoKKworCQlXTEFOX0xPR19XQVJOSU5HKCJSZWNlaXZlZCBmcmFtZSBvbiB1bnN1cHBvcnRlZCBwb3J0PSVkXG4iLAorCQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVChyeGRlc2Muc3RhdHVzKSApOworCQlnb3RvIGRvbmU7CisJfQorCisgZmFpbGVkOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKworIGRvbmU6CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X3J4bW9uaXRvcgorKgorKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGludF9yeC4gIEhhbmRsZXMgbW9uaXRvciBmcmFtZXMuCisqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIEZDUyBhbmQgc2V0cyBpdAorKiB0byAweGZmZmZmZmZmLiAgVGhlIGhmYTM4NHggZG9lc24ndCBnaXZlIHVzIHRoZSBGQ1MgdmFsdWUgYnV0IHRoZQorKiBoaWdoZXIgbGF5ZXJzIGV4cGVjdCBpdC4gIDB4ZmZmZmZmZmYgaXMgdXNlZCBhcyBhIGZsYWcgdG8gaW5kaWNhdGUKKyogdGhlIEZDUyBpcyBib2d1cy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJcnhmaWQJCXJlY2VpdmVkIEZJRAorKglyeGRlc2MJCXJ4IGRlc2NyaXB0b3IgcmVhZCBmcm9tIGNhcmQgaW4gaW50X3J4CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglBbGxvY2F0ZXMgYW4gc2tiIGFuZCBwYXNzZXMgaXQgdXAgdmlhIHRoZSBQRl9QQUNLRVQgaW50ZXJmYWNlLgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHJ4ZmlkLAorCQkJCSAgIGhmYTM4NHhfcnhfZnJhbWVfdCAqcnhkZXNjKQoreworCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJVUlOVAkJCQloZHJsZW4gPSAwOworCVVJTlQJCQkJZGF0YWxlbiA9IDA7CisJVUlOVAkJCQlza2JsZW4gPSAwOworCVVJTlQJCQkJdHJ1bmNhdGVkID0gMDsKKwlVSU5UOAkJCQkqZGF0YXA7CisJVUlOVDE2CQkJCWZjOworCXN0cnVjdCBza19idWZmCQkJKnNrYjsKKworCURCRkVOVEVSOworCS8qIERvbid0IGZvcmdldCB0aGUgc3RhdHVzLCB0aW1lLCBhbmQgZGF0YV9sZW4gZmllbGRzIGFyZSBpbiBob3N0IG9yZGVyICovCisJLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBmcmFtZSBpcyAqLworCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKKwloZHJsZW4gPSBwODAyMTFfaGVhZGVybGVuKGZjKTsKKwlkYXRhbGVuID0gaGZhMzg0eDJob3N0XzE2KHJ4ZGVzYy0+ZGF0YV9sZW4pOworCisJLyogQWxsb2NhdGUgYW4gaW5kIG1lc3NhZ2UrZnJhbWVzaXplIHNrYiAqLworCXNrYmxlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpICsKKwkJaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKKworCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCisJaWYgKCBza2JsZW4gPgorCQkoc2l6ZW9mKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCkgKworCQlXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgIm92ZXJsZW4gZnJtOiBsZW49JWRcbiIsCisJCQlza2JsZW4gLSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSk7CisJfQorCisJaWYgKCAoc2tiID0gZGV2X2FsbG9jX3NrYihza2JsZW4pKSA9PSBOVUxMICkgeworCQlXTEFOX0xPR19FUlJPUigiYWxsb2Nfc2tiIGZhaWxlZCB0cnlpbmcgdG8gYWxsb2NhdGUgJWQgYnl0ZXNcbiIsIHNrYmxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKiBvbmx5IHByZXBlbmQgdGhlIHByaXNtIGhlYWRlciBpZiBpbiB0aGUgcmlnaHQgbW9kZSAqLworCWlmICgod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTFfUFJJU00pICYmCisJICAgIChody0+c25pZmZoZHIgPT0gMCkpIHsKKwkJcDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90CSptc2c7CisJCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpKTsKKwkJbXNnID0gKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCopIGRhdGFwOworCisJCS8qIEluaXRpYWxpemUgdGhlIG1lc3NhZ2UgbWVtYmVycyAqLworCQltc2ctPm1zZ2NvZGUgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtOworCQltc2ctPm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpOworCQlzdHJjcHkobXNnLT5kZXZuYW1lLCB3bGFuZGV2LT5uYW1lKTsKKworCQltc2ctPmhvc3R0aW1lLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWU7CisJCW1zZy0+aG9zdHRpbWUuc3RhdHVzID0gMDsKKwkJbXNnLT5ob3N0dGltZS5sZW4gPSA0OworCQltc2ctPmhvc3R0aW1lLmRhdGEgPSBqaWZmaWVzOworCisJCW1zZy0+bWFjdGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWU7CisJCW1zZy0+bWFjdGltZS5zdGF0dXMgPSAwOworCQltc2ctPm1hY3RpbWUubGVuID0gNDsKKwkJbXNnLT5tYWN0aW1lLmRhdGEgPSByeGRlc2MtPnRpbWUgKiAxMDAwOworCisJCW1zZy0+Y2hhbm5lbC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWw7CisJCW1zZy0+Y2hhbm5lbC5zdGF0dXMgPSAwOworCQltc2ctPmNoYW5uZWwubGVuID0gNDsKKwkJbXNnLT5jaGFubmVsLmRhdGEgPSBody0+c25pZmZfY2hhbm5lbDsKKworCQltc2ctPnJzc2kuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpOworCQltc2ctPnJzc2kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5yc3NpLmxlbiA9IDQ7CisJCW1zZy0+cnNzaS5kYXRhID0gMDsKKworCQltc2ctPnNxLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc3E7CisJCW1zZy0+c3Euc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5zcS5sZW4gPSA0OworCQltc2ctPnNxLmRhdGEgPSAwOworCisJCW1zZy0+c2lnbmFsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsOworCQltc2ctPnNpZ25hbC5zdGF0dXMgPSAwOworCQltc2ctPnNpZ25hbC5sZW4gPSA0OworCQltc2ctPnNpZ25hbC5kYXRhID0gcnhkZXNjLT5zaWduYWw7CisKKwkJbXNnLT5ub2lzZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlOworCQltc2ctPm5vaXNlLnN0YXR1cyA9IDA7CisJCW1zZy0+bm9pc2UubGVuID0gNDsKKwkJbXNnLT5ub2lzZS5kYXRhID0gcnhkZXNjLT5zaWxlbmNlOworCisJCW1zZy0+cmF0ZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGU7CisJCW1zZy0+cmF0ZS5zdGF0dXMgPSAwOworCQltc2ctPnJhdGUubGVuID0gNDsKKwkJbXNnLT5yYXRlLmRhdGEgPSByeGRlc2MtPnJhdGUgLyA1OyAvKiBzZXQgdG8gODAyLjExIHVuaXRzICovCisKKwkJbXNnLT5pc3R4LmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eDsKKwkJbXNnLT5pc3R4LnN0YXR1cyA9IDA7CisJCW1zZy0+aXN0eC5sZW4gPSA0OworCQltc2ctPmlzdHguZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisKKwkJbXNnLT5mcm1sZW4uZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW47CisJCW1zZy0+ZnJtbGVuLnN0YXR1cyA9IDA7CisJCW1zZy0+ZnJtbGVuLmxlbiA9IDQ7CisJCW1zZy0+ZnJtbGVuLmRhdGEgPSBoZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOworCX0gZWxzZSBpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgorCQkgICAoaHctPnNuaWZmaGRyICE9IDApKSB7CisJCXA4MDIxMV9jYXBoZHJfdAkJKmNhcGhkcjsKKwkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QqKSBkYXRhcDsKKworCQljYXBoZHItPnZlcnNpb24gPQlodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOworCQljYXBoZHItPmxlbmd0aCA9CWh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyLT5tYWN0aW1lID0JX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpOworCQljYXBoZHItPmhvc3R0aW1lID0JX19jcHVfdG9fYmU2NChqaWZmaWVzKTsKKwkJY2FwaGRyLT5waHl0eXBlID0JaHRvbmwoNCk7IC8qIGRzc19kb3QxMV9iICovCisJCWNhcGhkci0+Y2hhbm5lbCA9CWh0b25sKGh3LT5zbmlmZl9jaGFubmVsKTsKKwkJY2FwaGRyLT5kYXRhcmF0ZSA9CWh0b25sKHJ4ZGVzYy0+cmF0ZSk7CisJCWNhcGhkci0+YW50ZW5uYSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCisJCWNhcGhkci0+cHJpb3JpdHkgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLworCQljYXBoZHItPnNzaV90eXBlID0JaHRvbmwoMyk7IC8qIHJzc2lfcmF3ICovCisJCWNhcGhkci0+c3NpX3NpZ25hbCA9CWh0b25sKHJ4ZGVzYy0+c2lnbmFsKTsKKwkJY2FwaGRyLT5zc2lfbm9pc2UgPQlodG9ubChyeGRlc2MtPnNpbGVuY2UpOworCQljYXBoZHItPnByZWFtYmxlID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5lbmNvZGluZyA9CWh0b25sKDEpOyAvKiBjY2sgKi8KKwl9CisJLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiIChjdGwgZnJhbWVzIG1heSBiZSBsZXNzIHRoYW4gYSBmdWxsIGhlYWRlcikgKi8KKwlkYXRhcCA9IHNrYl9wdXQoc2tiLCBoZHJsZW4pOworCW1lbWNweSggZGF0YXAsICYocnhkZXNjLT5mcmFtZV9jb250cm9sKSwgaGRybGVuKTsKKworCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KKwlpZiAoIGRhdGFsZW4gPiAwICkKKwl7CisJCS8qIFRydW5jYXRlIHRoZSBwYWNrZXQgaWYgdGhlIHVzZXIgd2FudHMgdXMgdG8gKi8KKwkJVUlOVAlkYXRhcmVhZCA9IGRhdGFsZW47CisJCWlmKGh3LT5zbmlmZl90cnVuY2F0ZSA+IDAgJiYgZGF0YXJlYWQgPiBody0+c25pZmZfdHJ1bmNhdGUpIHsKKwkJCWRhdGFyZWFkID0gaHctPnNuaWZmX3RydW5jYXRlOworCQkJdHJ1bmNhdGVkID0gMTsKKwkJfQorCisJCWRhdGFwID0gc2tiX3B1dChza2IsIGRhdGFyZWFkKTsKKwkJaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LAorCQkJSEZBMzg0eF9CQVBfSU5ULCByeGZpZCwgSEZBMzg0eF9SWF9EQVRBX09GRiwKKwkJCWRhdGFwLCBkYXRhcmVhZCk7CisKKwkJLyogY2hlY2sgZm9yIHVuZW5jcnlwdGVkIHN0dWZmIGlmIFdFUCBiaXQgc2V0LiAqLworCQlpZiAoKihkYXRhcCAtIGhkcmxlbiArIDEpICYgMHg0MCkgLy8gd2VwIHNldAorCQkgIGlmICgoKihkYXRhcCkgPT0gMHhhYSkgJiYgKCooZGF0YXArMSkgPT0gMHhhYSkpCisJCSAgICAqKGRhdGFwIC0gaGRybGVuICsgMSkgJj0gMHhiZjsgLy8gY2xlYXIgd2VwOyBpdCdzIHRoZSA4MDIuMiBoZWFkZXIhCisJfQorCisJaWYgKCF0cnVuY2F0ZWQgJiYgaHctPnNuaWZmX2ZjcykgeworCQkvKiBTZXQgdGhlIEZDUyAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pOworCQltZW1zZXQoIGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCX0KKworCS8qIHBhc3MgaXQgYmFjayB1cCAqLworCXByaXNtMnN0YV9ldl9yeCh3bGFuZGV2LCBza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9hbGxvYworKgorKiBIYW5kbGVzIHRoZSBBbGxvYyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfaW50X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJVUlOVDE2CQkJZmlkOworCUlOVDE2CQkJcmVzdWx0OworCisJREJGRU5URVI7CisKKwkvKiBIYW5kbGUgdGhlIHJlY2xhaW1lZCBGSUQgKi8KKwkvKiAgIGNvbGxlY3QgdGhlIEZJRCBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjayAqLworCWZpZCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0FMTE9DRklEKTsKKworCWlmICggZmlkICE9IGh3LT5pbmZvZmlkICkgeyAvKiBJdCdzIGEgdHJhbnNtaXQgZmlkICovCisJCVdMQU5fTE9HX0RFQlVHKDUsICJpbnRfYWxsb2MoJSN4KVxuIiwgZmlkKTsKKwkJcmVzdWx0ID0gdHhmaWRfcXVldWVfYWRkKGh3LCBmaWQpOworCQlpZiAocmVzdWx0ICE9IC0xKSB7CisJCQlwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7CisJCQlXTEFOX0xPR19ERUJVRyg1LCAicV9hZGQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDUsICJxX2Z1bGwuXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHVubG9jayB0aGUgaW5mbyBmaWQgKi8KKwkJdXAoJmh3LT5pbmZvZmlkX3NlbSk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9oYW5kb3ZlcgorKgorKiBTZW5kcyBhIGhhbmRvdmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgTUFDLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWFkZHIJCWFkZHJlc3Mgb2Ygc3RhdGlvbiB0aGF0J3MgbGVmdAorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlzdWNjZXNzLgorKgktRVJFU1RBUlRTWVMJcmVjZWl2ZWQgc2lnbmFsIHdoaWxlIHdhaXRpbmcgZm9yIHNlbWFwaG9yZS4KKyoJLUVJTwkJZmFpbGVkIHRvIHdyaXRlIHRvIGJhcCwgb3IgZmFpbGVkIGluIGNtZC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkLCBOT1RFOiB0aGlzIGNhbGwgbWF5IGJsb2NrIG9uIGEgc2VtYXBob3JlIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2hhbmRvdmVyKCBoZmEzODR4X3QgKmh3LCBVSU5UOCAqYWRkcikKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworICAgICAgICBoZmEzODR4X0hhbmRvdmVyQWRkcl90ICByZWM7CisgICAgICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICAgICAgREJGRU5URVI7CisKKwkvKiBBY3F1aXJlIHRoZSBpbmZvZmlkICovCisJaWYgKCBkb3duX2ludGVycnVwdGlibGUoJmh3LT5pbmZvZmlkX3NlbSkgKSB7CisJCXJlc3VsdCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisgICAgICAgIC8qIFNldCB1cCB0aGUgcmVjb3JkICovCisgICAgICAgIGxlbiA9IHNpemVvZihoZmEzODR4X0hhbmRvdmVyQWRkcl90KTsKKyAgICAgICAgcmVjLmZyYW1lbGVuID0gaG9zdDJoZmEzODR4XzE2KGxlbi8yIC0gMSk7CisgICAgICAgIHJlYy5pbmZvdHlwZSA9IGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X0lUX0hBTkRPVkVSQUREUik7CisgICAgICAgIG1lbWNweShyZWMuaGFuZG92ZXJfYWRkciwgYWRkciwgc2l6ZW9mKHJlYy5oYW5kb3Zlcl9hZGRyKSk7CisKKyAgICAgICAgLyogSXNzdWUgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9jbWRfbm90aWZ5KGh3LCAxLCBody0+aW5mb2ZpZCwgJnJlYywgbGVuKTsKKworICAgICAgICBpZiAoIHJlc3VsdCAhPSAwICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsImNtZF9ub3RpZnkoJTA0eCkgZmFpbGVkLCByZXN1bHQ9JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaHctPmluZm9maWQsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisJV0xBTl9MT0dfV0FSTklORygiSW1wbGVtZW50IG1lLlxuIik7CisKKwlEQkZFWElUOworfQorCisvKiBIYW5kbGVzIGFsbCAicngiIEJBUCBvcGVyYXRpb25zICovCitzdGF0aWMgdm9pZCAgICAgaGZhMzg0eF9iYXBfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBody0+d2xhbmRldjsKKwlpbnQgY291bnRlciA9IHByaXNtMl9pcnFfZXZyZWFkX21heDsKKwlpbnQJCQlyZWc7CisKKwlEQkZFTlRFUjsKKworCXdoaWxlIChjb3VudGVyLS0gPiAwKSB7CisJCS8qIEdldCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKworCQlpZiAoKHJlZyA9PSAweGZmZmYpIHx8CisJCSAgICAhKHJlZyAmIEhGQTM4NHhfSU5UX0JBUF9PUCkpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU0lORk8ocmVnKSApeworCQkJaGZhMzg0eF9pbnRfaW5mbyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0lORk9fU0VUKDEpLAorCQkJCUhGQTM4NHhfRVZBQ0spOworCQl9CisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNUWEVYQyhyZWcpICl7CisJCQloZmEzODR4X2ludF90eGV4Yyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX1RYRVhDX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTVFgocmVnKSApeworCQkJaGZhMzg0eF9pbnRfdHgod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19UWF9TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU1JYKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X3J4KHdsYW5kZXYpOworCQkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfRVZBQ0tfUlhfU0VUKDEpLAorCQkJCUhGQTM4NHhfRVZBQ0spOworCQl9CisJfQorCisJLyogcmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwloZmEzODR4X2V2ZW50c19hbGwoaHcpOworCisJREJGRVhJVDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGZiOGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCkBAIC0wLDAgKzEsMzA2NyBAQAorLyogaGZhMzg0eC5oCisqCisqIERlZmluZXMgdGhlIGNvbnN0YW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgaGZhMzg0eAorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgIFtJbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2Ugbm90ZXNdCisqCisqICAgW1JlZmVyZW5jZXNdCisqCUNXMTAgUHJvZ3JhbW1lcidzIE1hbnVhbCB2MS41CisqCUlFRUUgODAyLjExIEQxMC4wCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9IRkEzODR4X0gKKyNkZWZpbmUgX0hGQTM4NHhfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisKKyNkZWZpbmUgSEZBMzg0eF9MRVZFTF9UT19kQm0odikgICAoMHgxMDAgKyAodikgKiAxMDAgLyAyNTUgLSAxMDApCisKKy8qLS0tLS0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLSBNaW5zICYgTWF4cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BTExPQ19MRU5fTUlOCSgoVUlOVDE2KTQpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BTExPQ19MRU5fTUFYCSgoVUlOVDE2KTI0MDApCisjZGVmaW5lCQlIRkEzODR4X0JBUF9EQVRBTEVOX01BWAkJKChVSU5UMTYpNDA5NikKKyNkZWZpbmUJCUhGQTM4NHhfQkFQX09GRlNFVF9NQVgJCSgoVUlOVDE2KTQwOTYpCisjZGVmaW5lCQlIRkEzODR4X1BPUlRJRF9NQVgJCSgoVUlOVDE2KTcpCisjZGVmaW5lCQlIRkEzODR4X05VTVBPUlRTX01BWAkJKChVSU5UMTYpKEhGQTM4NHhfUE9SVElEX01BWCsxKSkKKyNkZWZpbmUJCUhGQTM4NHhfUERSX0xFTl9NQVgJCSgoVUlOVDE2KTUxMikJLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERBX1JFQ1NfTUFYCQkoKFVJTlQxNikyMDApCS8qIGEgZ3Vlc3MgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERBX0xFTl9NQVgJCSgoVUlOVDE2KTEwMjQpCS8qIGluIGJ5dGVzLCBmcm9tIEVLICovCisjZGVmaW5lCQlIRkEzODR4X1NDQU5SRVNVTFRfTUFYCQkoKFVJTlQxNikzMSkKKyNkZWZpbmUJCUhGQTM4NHhfSFNDQU5SRVNVTFRfTUFYCQkoKFVJTlQxNikzMSkKKyNkZWZpbmUJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWAkoKFVJTlQxNikxNikKKyNkZWZpbmUJCUhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVgJKDEwKQorI2RlZmluZQkJSEZBMzg0eF9EUlZSX1RYQlVGX01BWAkJKHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpICsgXAorCQkJCQkJV0xBTl9EQVRBX01BWExFTiAtIFwKKwkJCQkJCVdMQU5fV0VQX0lWX0xFTiAtIFwKKwkJCQkJCVdMQU5fV0VQX0lDVl9MRU4gKyAyKQorI2RlZmluZQkJSEZBMzg0eF9EUlZSX01BR0lDCQkoMHg0YTJkKQorI2RlZmluZQkJSEZBMzg0eF9JTkZPREFUQV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9pbmZvZGF0YV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5GT0ZSTV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9JbmZGcmFtZV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4ICAvKiBJJ20gbm90IHJlYWxseSBzdXJlICovCisjZGVmaW5lCQlIRkEzODR4X1JJRERBVEFfTUFYTEVOCQlIRkEzODR4X1JJRF9HVUVTU0lOR19NQVhMRU4KKyNkZWZpbmUJCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTgkyMDQ4CisKKy8qLS0tIFN1cHBvcnQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQkFQX1BST0MJCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9CQVBfSU5UCQkJCSgoVUlOVDE2KTEpCisjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0lCU1MJCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9CU1MJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9XRFMJCQkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTCQkoKFVJTlQxNikzKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9IT1NUQVAgICAgCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19QUklWSU5WT0tFRAkJKChVSU5UMTYpQklUMCkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERQkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9UWENSWVBUCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVAkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBTExPV19NSVhFRCAJKChVSU5UMTYpQklUMTEpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0lWX0lOVEVSVkFMMQkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUwxMAkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUw1MAkJKChVSU5UMTYpQklUNikKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUwxMDAJCSgoVUlOVDE2KShCSVQ1IHwgQklUNikpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0ZJUk1XQVJFX1dQQSAgCQkoKFVJTlQxNilCSVQ4KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19IT1NUX01JQyAgICAgIAkJKChVSU5UMTYpQklUOSkKKyNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0ZXUk9BTQkJKChVSU5UMTYpMSkKKyNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0hPU1RST0FNCSgoVUlOVDE2KTIpCisjZGVmaW5lIAlIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNCSgoVUlOVDE2KTMpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfRElTQUJMRUQJCSgoVUlOVDE2KTEpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfSU5JVFNSQ0gJCSgoVUlOVDE2KTIpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfQ09OTl9JQlNTCQkoKFVJTlQxNikzKQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fRVNTCQkoKFVJTlQxNik0KQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX09PUl9FU1MJCSgoVUlOVDE2KTUpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfQ09OTl9XRFMJCSgoVUlOVDE2KTYpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfSE9TVEFQCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzEJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzIJCQkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzVkb3Q1CQkJKChVSU5UMTYpNCkKKyNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xMQkJCSgoVUlOVDE2KTgpCisKKy8qLS0tIEp1c3Qgc29tZSBzeW1ib2xpYyBuYW1lcyBmb3IgbGVnaWJpbGl0eSAtLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfVFhDTURfTk9SRUNMCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9UWENNRF9SRUNMCQkoKFVJTlQxNikxKQorCisvKi0tLSBNQUMgSW50ZXJuYWwgbWVtb3J5IGNvbnN0YW50cyBhbmQgbWFjcm9zIC0tLS0tLSovCisvKiBtYXNrcyBhbmQgbWFjcm9zIHVzZWQgdG8gbWFuaXB1bGF0ZSBNQUMgaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3Nlcy4gKi8KKy8qIE1BQyBpbnRlcm5hbCBtZW1vcnkgYWRkcmVzc2VzIGFyZSAyMyBiaXQgcXVhbnRpdGllcy4gIFRoZSBNQUMgdXNlcworICogYSBwYWdlZCBhZGRyZXNzIHNwYWNlIHdoZXJlIHRoZSB1cHBlciAxNiBiaXRzIGFyZSB0aGUgcGFnZSBudW1iZXIKKyAqIGFuZCB0aGUgbG93ZXIgNyBiaXRzIGFyZSB0aGUgb2Zmc2V0LiAgVGhlcmUgYXJlIHZhcmlvdXMgSG9zdCBBUEkKKyAqIGVsZW1lbnRzIHRoYXQgcmVxdWlyZSB0d28gMTYtYml0IHF1YW50aXRpZXMgdG8gc3BlY2lmeSBhIE1BQworICogaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3MuICBVbmZvcnR1bmF0ZWx5LCBzb21lIG9mIHRoZSBBUEkncyB1c2UgYQorICogcGFnZS9vZmZzZXQgZm9ybWF0IHdoZXJlIHRoZSBvZmZzZXQgdmFsdWUgaXMgSlVTVCB0aGUgbG93ZXIgc2V2ZW4KKyAqIGJpdHMgYW5kIHRoZSBwYWdlIGlzICB0aGUgcmVtYWluaW5nIDE2IGJpdHMuICBTb21lIG9mIHRoZSBBUEkncworICogYXNzdW1lIHRoYXQgdGhlIDIzIGJpdCBhZGRyZXNzIGhhcyBiZWVuIHNwbGl0IGF0IHRoZSAxNnRoIGJpdC4gIFdlCisgKiByZWZlciB0byB0aGVzZSB0d28gZm9ybWF0cyBhcyBBVVggZm9ybWF0IGFuZCBDTUQgZm9ybWF0LiAgVGhlCisgKiBtYWNyb3MgYmVsb3cgaGVscCBoYW5kbGUgc29tZSBvZiB0aGlzLgorICovCisKKy8qIEhhbmR5IGNvbnN0YW50ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX09GRl9NQVgJKChVSU5UMTYpMHgwMDdmKQorCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIGEgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLCSgweDAwN2ZmZjgwKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLCSgweDAwMDAwMDdmKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSwkoMHhmZmZmMDAwMCkKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0NNRF9PRkZfTUFTSwkoMHgwMDAwZmZmZikKKworLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBBVVggZm9ybWF0IDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSwkoMHhmZmZmKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSwkoMHgwMDdmKQorCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIENNRCBmb3JtYXQgMTYtYml0IGFkZHJlc3MgcGFydHMgKi8KKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLCSgweDAwN2YpCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLCSgweGZmZmYpCisKKy8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQVVYIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LRkxBVChwLG8pCVwKKwkJKCgoVUlOVDMyKSgoKFVJTlQxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDw3KSB8IFwKKwkJKChVSU5UMzIpKCgoVUlOVDE2KShvKSkmSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSykpCisKKy8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQ01EIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX01LRkxBVChwLG8pCVwKKwkJKCgoVUlOVDMyKSgoKFVJTlQxNikocCkpJkhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLKSkgPDwxNikgfCBcCisJCSgoVUlOVDMyKSgoKFVJTlQxNikobykpJkhGQTM4NHhfQUREUl9DTURfT0ZGX01BU0spKQorCisvKiBNYWtlIEFVWCBmb3JtYXQgb2Zmc2V0IGFuZCBwYWdlIGZyb20gYSAzMi1iaXQgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LUEFHRShmKSBcCisJCSgoVUlOVDE2KSgoKChVSU5UMzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLKT4+NykpCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LT0ZGKGYpIFwKKwkJKChVSU5UMTYpKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLKSkKKworLyogTWFrZSBDTUQgZm9ybWF0IG9mZnNldCBhbmQgcGFnZSBmcm9tIGEgMzItYml0IGZsYXQgYWRkcmVzcyAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZikgXAorCQkoKFVJTlQxNikoKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSyk+PjE2KSkKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtPRkYoZikgXAorCQkoKFVJTlQxNikoKChVSU5UMzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9DTURfT0ZGX01BU0spKQorCisvKi0tLSBBdXggcmVnaXN0ZXIgbWFza3MvdGVzdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTb21lIG9mIHRoZSB1cHBlciBiaXRzIG9mIHRoZSBBVVggb2Zmc2V0IHJlZ2lzdGVyIGFyZSB1c2VkIHRvICovCisvKiAgc2VsZWN0IGFkZHJlc3Mgc3BhY2UuICovCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfRVhURFMJKDB4MDApCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfTlYJKDB4MDEpCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfUEhZCSgweDAyKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX0lDU1JBTQkoMHgwMykKKworLyogTWFrZSBBVVggcmVnaXN0ZXIgb2Zmc2V0IGFuZCBwYWdlIHZhbHVlcyBmcm9tIGEgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FVWF9NS09GRihmLCBjKSBcCisJKEhGQTM4NHhfQUREUl9BVVhfTUtPRkYoZikgfCAoKChVSU5UMTYpKGMpKTw8MTIpKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfTUtQQUdFKGYpCUhGQTM4NHhfQUREUl9BVVhfTUtQQUdFKGYpCisKKworLyotLS0gQ29udHJvbGxlciBNZW1vcnkgYWRkcmVzc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0Ml9QREFfQkFTRQkoMHgwMDdmMDAwMFVMKQorI2RlZmluZQkJSEZBMzg0MV9QREFfQkFTRQkoMHgwMDNmMDAwMFVMKQorI2RlZmluZQkJSEZBMzg0MV9QREFfQk9HVVNfQkFTRQkoMHgwMDM5MDAwMFVMKQorCisvKi0tLSBEcml2ZXIgRG93bmxvYWQgc3RhdGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQJCTAKKyNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVECQkxCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVECQkyCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hXUklUVEVOCQkzCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hXUklURVBFTkRJTkcJNAorI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0dFTkVTSVMgCQk1CisKKy8qLS0tIFJlZ2lzdGVyIEkvTyBvZmZzZXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCisjZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDIpCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA0KQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwNikKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MDgpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MEEpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MEMpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MEUpCisjZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHgyMCkKKyNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHgyMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDI0KQorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MTgpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgxQykKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHgzNikKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDFBKQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4MUUpCisjZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4MzgpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDMwKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9PRkYJCSgweDMyKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDM0KQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MTQpCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHgyOCkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDJBKQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4MkMpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHgzQSkKKyNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4M0MpCisjZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHgzRSkKKworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJIHx8IFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorCisjZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDQpCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA4KQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwYykKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MTApCisjZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MTQpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MTgpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MWMpCisjZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgyMCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHg0MCkKKyNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHg0NCkKKyNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDQ4KQorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MzApCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgzOCkKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHg2YykKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDM0KQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4M2MpCisjZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4NzApCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDYwKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9PRkYJCSgweDY0KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDY4KQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MjgpCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHg1MCkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDU0KQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4NTgpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHg3NCkKKyNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4NzgpCisjZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHg3YykKKyNkZWZpbmUJCUhGQTM4NHhfUENJQ09SX09GRgkJKDB4NGMpCisjZGVmaW5lCQlIRkEzODR4X1BDSUhDUl9PRkYJCSgweDVjKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkhfT0ZGCSgweDgwKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkxfT0ZGCSgweDg0KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfTEVOX09GRgkJKDB4ODgpCisjZGVmaW5lCQlIRkEzODR4X1BDSV9NMF9DVExfT0ZGCQkoMHg4YykKKyNkZWZpbmUJCUhGQTM4NHhfUENJX1NUQVRVU19PRkYJCSgweDk4KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkhfT0ZGCSgweGEwKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkxfT0ZGCSgweGE0KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfTEVOX09GRgkJKDB4YTgpCisjZGVmaW5lCQlIRkEzODR4X1BDSV9NMV9DVExfT0ZGCQkoMHhhYykKKworI2VuZGlmCisKKy8qLS0tIFJlZ2lzdGVyIEZpZWxkIE1hc2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0JVU1kJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgoVUlOVDE2KShCSVQxNCB8IEJJVDEzIHwgQklUMTIgfCBCSVQxMSB8IEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVAkJKChVSU5UMTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTAkJKChVSU5UMTYpQklUOCkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1dSSVRFCQkoKFVJTlQxNilCSVQ4KQorI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREUJCSgoVUlOVDE2KShCSVQ5IHwgQklUOCkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKFVJTlQxNikoQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEgfCBCSVQwKSkKKworI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUCQkoKFVJTlQxNikoQklUMTQgfCBCSVQxMyB8IEJJVDEyIHwgQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREUJCSgoVUlOVDE2KShCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSB8IEJJVDApKQorCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9CVVNZCQkoKFVJTlQxNilCSVQxNSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0VSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGCQkoKFVJTlQxNikoQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4IHwgQklUNyB8IEJJVDYgfCBCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSkpCisKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfV1RFUlIJCSgoVUlOVDE2KUJJVDE0KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSU5GRFJPUAkJKChVSU5UMTYpQklUMTMpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfRFRJTQkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0NNRAkJKChVSU5UMTYpQklUNCkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfVFhFWEMJCSgoVUlOVDE2KUJJVDIpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9UWAkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9JTlRfQkFQX09QICAgICAgICAgICAoSEZBMzg0eF9FVlNUQVRfSU5GT3xIRkEzODR4X0VWU1RBVF9SWHxIRkEzODR4X0VWU1RBVF9UWHxIRkEzODR4X0VWU1RBVF9UWEVYQykKKworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfSU5UX05PUk1BTCAgICAgICAgICAgKEhGQTM4NHhfRVZTVEFUX0lORk98SEZBMzg0eF9FVlNUQVRfUlh8SEZBMzg0eF9FVlNUQVRfVFh8SEZBMzg0eF9FVlNUQVRfVFhFWEN8SEZBMzg0eF9FVlNUQVRfSU5GRFJPUHxIRkEzODR4X0VWU1RBVF9BTExPQ3xIRkEzODR4X0VWU1RBVF9EVElNKQorCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9XVEVSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lORkRST1AJCSgoVUlOVDE2KUJJVDEzKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9EVElNCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9DTUQJCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9UWEVYQwkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFgJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19XVEVSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1AJCSgoVUlOVDE2KUJJVDEzKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19EVElNCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTUQJCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQwkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFgJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU4JCSgoVUlOVDE2KShCSVQxNSB8IEJJVDE0KSkKKworCisvKi0tLSBDb21tYW5kIENvZGUgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIENvbnRyb2xsZXIgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0lOSVQJCSgoVUlOVDE2KTB4MDApCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRU5BQkxFCQkoKFVJTlQxNikweDAxKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUJCSgoVUlOVDE2KTB4MDIpCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRElBRwkJKChVSU5UMTYpMHgwMykKKworLyotLS0gQnVmZmVyIE1nbXQgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FMTE9DCQkoKFVJTlQxNikweDBBKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX1RYCQkoKFVJTlQxNikweDBCKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0NMUlBSU1QJCSgoVUlOVDE2KTB4MTIpCisKKy8qLS0tIFJlZ3VsYXRlIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9OT1RJRlkJCSgoVUlOVDE2KTB4MTApCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfSU5RCQkoKFVJTlQxNikweDExKQorCisvKi0tLSBDb25maWd1cmUgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FDQ0VTUwkJKChVSU5UMTYpMHgyMSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9ET1dOTEQJCSgoVUlOVDE2KTB4MjIpCisKKy8qLS0tIERlYnVnZ2luZyBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIAlIRkEzODR4X0NNRENPREVfTU9OSVRPUgkJKChVSU5UMTYpKDB4MzgpKQorI2RlZmluZQkJSEZBMzg0eF9NT05JVE9SX0VOQUJMRQkJKChVSU5UMTYpKDB4MGIpKQorI2RlZmluZQkJSEZBMzg0eF9NT05JVE9SX0RJU0FCTEUJCSgoVUlOVDE2KSgweDBmKSkKKworLyotLS0gUmVzdWx0IENvZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfU1VDQ0VTUwkJCSgoVUlOVDE2KSgweDAwKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ0FSRF9GQUlMCQkoKFVJTlQxNikoMHgwMSkpCisjZGVmaW5lCQlIRkEzODR4X05PX0JVRkYJCQkoKFVJTlQxNikoMHgwNSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9FUlIJCQkoKFVJTlQxNikoMHg3RikpCisKKy8qLS0tIFByb2dyYW1taW5nIE1vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTU9ERSAwOiBEaXNhYmxlIHByb2dyYW1taW5nCisJTU9ERSAxOiBFbmFibGUgdm9sYXRpbGUgbWVtb3J5IHByb2dyYW1taW5nCisJTU9ERSAyOiBFbmFibGUgbm9uLXZvbGF0aWxlIG1lbW9yeSBwcm9ncmFtbWluZworCU1PREUgMzogUHJvZ3JhbSBub24tdm9sYXRpbGUgbWVtb3J5IHNlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfRElTQUJMRQkoKFVJTlQxNikweDAwKQorI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9SQU0JCSgoVUlOVDE2KTB4MDEpCisjZGVmaW5lCQlIRkEzODR4X1BST0dNT0RFX05WCQkoKFVJTlQxNikweDAyKQorI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9OVldSSVRFCSgoVUlOVDE2KTB4MDMpCisKKy8qLS0tIEFVWCByZWdpc3RlciBlbmFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9BVVhQVzAJCQkoKFVJTlQxNikweGZlMDEpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBXMQkJCSgoVUlOVDE2KTB4ZGMyMykKKyNkZWZpbmUJCUhGQTM4NHhfQVVYUFcyCQkJKChVSU5UMTYpMHhiYTQ1KQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0lTRElTQUJMRUQJKChVSU5UMTYpMHgwMDAwKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9JU0VOQUJMRUQJKChVSU5UMTYpMHhjMDAwKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9ET0VOQUJMRQkoKFVJTlQxNikweDgwMDApCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0RPRElTQUJMRQkoKFVJTlQxNikweDQwMDApCisKKy8qLS0tIFJlY29yZCBJRCBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSURzOiBOZXR3b3JrIFBhcmFtZXRlcnMsIFN0YXRpYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQT1JUVFlQRQkJKChVSU5UMTYpMHhGQzAwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUgkoKFVJTlQxNikweEZDMDEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRAkoKFVJTlQxNikweEZDMDIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMCSgoVUlOVDE2KTB4RkMwMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSUQJCSgoVUlOVDE2KTB4RkMwNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU4JKChVSU5UMTYpMHhGQzA1KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1lTU0NBTEUJCSgoVUlOVDE2KTB4RkMwNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4JKChVSU5UMTYpMHhGQzA3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUgkJKChVSU5UMTYpMHhGQzA4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVECSgoVUlOVDE2KTB4RkMwOSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBNRVBTCQkoKFVJTlQxNikweEZDMEEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWAkoKFVJTlQxNikweEZDMEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUgkoKFVJTlQxNikweEZDMEMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVIJKChVSU5UMTYpMHhGQzBEKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTkFNRQkJKChVSU5UMTYpMHhGQzBFKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUgkoKFVJTlQxNikweEZDMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMQkJKChVSU5UMTYpMHhGQzExKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjIJCSgoVUlOVDE2KTB4RkMxMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIzCQkoKFVJTlQxNikweEZDMTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNAkJKChVSU5UMTYpMHhGQzE0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjUJCSgoVUlOVDE2KTB4RkMxNSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI2CQkoKFVJTlQxNikweEZDMTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRgkoKFVJTlQxNikweEZDMTcpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUklEIGxlbmd0aHM6IE5ldHdvcmsgUGFyYW1zLCBTdGF0aWMgQ29uZmlnIEVudGl0aWVzCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVE9ETzogZmlsbCBpbiB0aGUgcmVzdCBvZiB0aGVzZSAqLworI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEVfTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOCSgoVUlOVDE2KTM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTF9MRU4JKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOCSgoVUlOVDE2KTM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQVRJTVdJTl9MRU4JKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNZU1NDQUxFX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFJfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVOQUJMRURfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVQU19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1VTFRJQ0FTVFJYX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05OQU1FX0xFTgkoKFVJTlQxNikzNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMV9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIyX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjNfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNF9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI1X0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjZfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0xFTiAoKFVJTlQxNilzaXplb2YoVUlOVDE2KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSX0xFTgkoKFVJTlQxNikwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJJRHM6IE5ldHdvcmsgUGFyYW1ldGVycywgRHluYW1pYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9HUk9VUEFERFIJCSgoVUlOVDE2KTB4RkM4MCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MJCSgoVUlOVDE2KTB4RkM4MSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gJCSgoVUlOVDE2KTB4RkM4MikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSAkJKChVSU5UMTYpMHhGQzgzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTAkJKChVSU5UMTYpMHhGQzg0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREUJCSgoVUlOVDE2KTB4RkM4NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwCQkoKFVJTlQxNikweEZDOTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMQkJKChVSU5UMTYpMHhGQzkxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDIJCSgoVUlOVDE2KTB4RkM5MikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gzCQkoKFVJTlQxNikweEZDOTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINAkJKChVSU5UMTYpMHhGQzk0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDUJCSgoVUlOVDE2KTB4RkM5NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g2CQkoKFVJTlQxNikweEZDOTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gwCQkoKFVJTlQxNikweEZDOTcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxCQkoKFVJTlQxNikweEZDOTgpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gyCQkoKFVJTlQxNikweEZDOTkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gzCQkoKFVJTlQxNikweEZDOUEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0CQkoKFVJTlQxNikweEZDOUIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g1CQkoKFVJTlQxNikweEZDOUMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g2CQkoKFVJTlQxNikweEZDOUQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMAkJKChVSU5UMTYpMHhGQzlFKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDEJCSgoVUlOVDE2KTB4RkM5RikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwyCQkoKFVJTlQxNikweEZDQTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMwkJKChVSU5UMTYpMHhGQ0ExKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDQJCSgoVUlOVDE2KTB4RkNBMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw1CQkoKFVJTlQxNikweEZDQTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNgkJKChVSU5UMTYpMHhGQ0E0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJJRCBMZW5ndGhzOiBOZXR3b3JrIFBhcmFtLCBEeW5hbWljIENvbmZpZyBFbnRpdGllcworICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRPRE86IGZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlc2UgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dST1VQQUREUl9MRU4JKChVSU5UMTYpMTYgKiBXTEFOX0FERFJfTEVOKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTU19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0hfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0hfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMX0xFTgkoKFVJTlQxNik0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREVfTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIM19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDBfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDNfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINV9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDZfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMM19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNl9MRU4JKChVSU5UMTYpMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSURzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9JVElDS1RJTUUJCSgoVUlOVDE2KTB4RkNFMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSUQgTGVuZ3RoczogQmVoYXZpb3IgUGFyYW1ldGVycworICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0lUSUNLVElNRV9MRU4JKChVSU5UMTYpMikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSURzOiBOSUMgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWExPQURUSU1FCQkoKFVJTlQxNikweEZEMDApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUgkoKFVJTlQxNikweEZEMDEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklJREVOVElUWQkJKChVSU5UMTYpMHhGRDAyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJU1VQUkFOR0UJCSgoVUlOVDE2KTB4RkQwMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSV9DRklBQ1RSQU5HRVMJKChVSU5UMTYpMHhGRDA0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSCSgoVUlOVDE2KTB4RkQwQSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ0lERU5USVRZCQkoKFVJTlQxNikweEZEMEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRklTVVBSQU5HRQkJKChVSU5UMTYpMHhGRDBDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0UJCSgoVUlOVDE2KTB4RkQwRCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NIQU5ORUxMSVNUCQkoKFVJTlQxNikweEZEMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOUwkoKFVJTlQxNikweEZEMTEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9URU1QVFlQRQkJKChVSU5UMTYpMHhGRDEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0lTCQkJKChVSU5UMTYpMHhGRDEzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBSURFTlRJVFkJCSgoVUlOVDE2KTB4RkQyMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQVNVUFJBTkdFCQkoKFVJTlQxNikweEZEMjEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFfTUZJQUNUUkFOR0VTCSgoVUlOVDE2KTB4RkQyMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQV9DRklBQ1RSQU5HRVMJKChVSU5UMTYpMHhGRDIzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQlVJTERTRVEJCSgoVUlOVDE2KTB4RkZGRSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZXSUQJCSgoVUlOVDE2KTB4RkZGRikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogTklDIEluZm9ybWF0aW9uCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYTE9BRFRJTUVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVJfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSUlERU5USVRZX0xFTgkJKChVSU5UMTYpOCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DRklBQ1RSQU5HRVNfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4JCSgoVUlOVDE2KTEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTklDSURFTlRJVFlfTEVOCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUZJU1VQUkFOR0VfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMTElTVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOU19MRU4JKChVSU5UMTYpMTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9URU1QVFlQRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSVNfTEVOCQkJKChVSU5UMTYpNDgwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBSURFTlRJVFlfTEVOCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBU1VQUkFOR0VfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01GSUFDVFJBTkdFU19MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTMl9MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQlVJTERTRVFfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9CdWlsZFNlcV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZXSURfTEVOCQkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfRldJRF90KSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEczogIE1BQyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUE9SVFNUQVRVUwkJKChVSU5UMTYpMHhGRDQwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQJCSgoVUlOVDE2KTB4RkQ0MSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRAkoKFVJTlQxNikweEZENDIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DT01NU1FVQUxJVFkJKChVSU5UMTYpMHhGRDQzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURQkoKFVJTlQxNikweEZENDQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQkNOSU5UCSgoVUlOVDE2KTB4RkQ0NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTQ0FMRVRIUkVTSAkoKFVJTlQxNikweEZENDYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUUJKChVSU5UMTYpMHhGRDQ3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlUCSgoVUlOVDE2KTB4RkQ0OCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlUCSgoVUlOVDE2KTB4RkQ0OSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUJKChVSU5UMTYpMHhGRDRBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRQkoKFVJTlQxNikweEZENEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DRlBPTExBQkxFCQkoKFVJTlQxNikweEZENEMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNUwkoKFVJTlQxNikweEZENEQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QCSgoVUlOVDE2KTB4RkQ0RikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWQkoKFVJTlQxNikweEZENTEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMQkoKFVJTlQxNikweEZEODApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMgkoKFVJTlQxNikweEZEODEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMwkoKFVJTlQxNikweEZEODIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNAkoKFVJTlQxNikweEZEODMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNQkoKFVJTlQxNikweEZEODQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNgkoKFVJTlQxNikweEZEODUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9PV05NQUNBRERSRVNTCSgoVUlOVDE2KTB4RkQ4NikKKy8vICNkZWZpbmUJSEZBMzg0eF9SSURfUENGSU5GTwkJKChVSU5UMTYpMHhGRDg3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFU1VMVFMgICAgICAgCSgoVUlOVDE2KTB4RkQ4OCkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9IT1NUU0NBTlJFU1VMVFMgICAJKChVSU5UMTYpMHhGRDg5KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FUSU9OVVNFRAkoKFVJTlQxNikweEZEOEEpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFRkFJTFVSRSAgCSgoVUlOVDE2KTB4RkQ4RCkgLy8gMS44LjAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEIExlbmd0aHM6ICBNQUMgSW5mb3JtYXRpb24KKyAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAorICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QT1JUU1RBVFVTX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lEX0xFTgkJKChVSU5UMTYpMzQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSURfTEVOCQkoKFVJTlQxNilXTEFOX0JTU0lEX0xFTikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X2NvbW1zcXVhbGl0eV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X2RibWNvbW1zcXVhbGl0eV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJDTklOVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFDVVJTQ0FMRVRIUkVTSF9MRU4JKChVSU5UMTYpMTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BUENVUlNDQUxFVEhSRVNIX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPVE9DT0xSU1BUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9MT05HUkVUUllMSU1JVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFJYTElGRVRJTUVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNU19MRU4JCSgoVUlOVDE2KTQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUyX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUzX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU1X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU2X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1NfTEVOCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUENGSU5GT19MRU4JCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfUENGSW5mb19kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFUVVFU1RfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEVOVElDQVRFU1RBX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUX0xFTgkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9DaGFubmVsSW5mb1JlcXVlc3RfZGF0YV90KSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFJJRHM6ICBNb2RlbSBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUEhZVFlQRQkJKChVSU5UMTYpMHhGREMwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUwJKChVSU5UMTYpMHhGREMxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFBPV0VSU1RBVEUJKChVSU5UMTYpMHhGREMyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0NBTU9ERQkJKChVSU5UMTYpMHhGREMzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTCSgoVUlOVDE2KTB4RkRDNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0xGT1NUQVRVUyAgICAgICAgICAgKChVSU5UMTYpMHhGREM3KSAvLyAxLjcuMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogIE1vZGVtIEluZm9ybWF0aW9uCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUEhZVFlQRV9MRU4JCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUxfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFBPV0VSU1RBVEVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DQ0FNT0RFX0xFTgkJCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVVBQT1JURUREQVRBUkFURVNfTEVOCSgoVUlOVDE2KTEwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBUEkgRU5IQU5DRU1FTlRTIChOT1QgQUxSRUFEWSBJTVBMRU1FTlRFRCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlJRAkoKFVJTlQxNikweEZDMjMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMAkoKFVJTlQxNikweEZDMjQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMQkoKFVJTlQxNikweEZDMjUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMgkoKFVJTlQxNikweEZDMjYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMwkoKFVJTlQxNikweEZDMjcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBGTEFHUwkJKChVSU5UMTYpMHhGQzI4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQS0VZTUFQVEFCTEUJKChVSU5UMTYpMHhGQzI5KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04JKChVSU5UMTYpMHhGQzJBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYQVNTT0NTVEFUSU9OUwkoKFVJTlQxNikweEZDMkIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUWENPTlRST0wJKChVSU5UMTYpMHhGQzJDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUJKChVSU5UMTYpMHhGQzJEKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GSE9TVEFVVEhBU1NPQwkoKFVJTlQxNikweEZDMkUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZSQ1ZDUkNFUlJPUgkoKFVJTlQxNikweEZDMzApCisvLyAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNTUxJRkUJCSgoVUlOVDE2KTB4RkMzMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFMVFJFVFJZQ05UCSgoVUlOVDE2KTB4RkMzMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFQQkNOSU5UCQkoKFVJTlQxNikweEZDMzMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUFBDRklORk8JKChVSU5UMTYpMHhGQzM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1RBUENGSU5GTwkoKFVJTlQxNikweEZDMzUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQUklPUklUWVFVU0FHRQkoKFVJTlQxNikweEZDMzcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUSU1DVFJMCQkoKFVJTlQxNikweEZDNDApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUSElSVFkyVEFMTFkJKChVSU5UMTYpMHhGQzQyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRU5IU0VDVVJJVFkJKChVSU5UMTYpMHhGQzQzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREJNQURKVVNUICAJKChVSU5UMTYpMHhGQzQ2KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQURBVEEgICAgICAgCSgoVUlOVDE2KTB4RkM0OCkgLy8gMS43LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBST1BPR0FUSU9OREVMQVkJKChVSU5UMTYpMHhGQzQ5KSAvLyAxLjcuNgorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU0hPUlRQUkVBTUJMRQkoKFVJTlQxNikweEZDQjApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZFWENMT05HUFJFQU1CTEUJKChVSU5UMTYpMHhGQ0IxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVVUSFJTUFRJTUVPVVQJKChVSU5UMTYpMHhGQ0IyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUwkoKFVJTlQxNikweEZDQjMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMJKChVSU5UMTYpMHhGQ0I0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRkFMTEJBQ0tDVFJMCSgoVUlOVDE2KTB4RkNCNSkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9XRVBLRVlTVEFUVVMgICAJKChVSU5UMTYpMHhGQ0I2KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1dFUEtFWU1BUElOREVYIAkoKFVJTlQxNikweEZDQjcpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfQlJPQURDQVNUS0VZSUQgCSgoVUlOVDE2KTB4RkNCOCkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9FTlRTRUNGTEFHRVlJRCAJKChVSU5UMTYpMHhGQ0I5KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTAkoKFVJTlQxNikweEZDQkEpIC8vIE5FVyBTVEEKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQUhBTkRMSU5HCSgoVUlOVDE2KTB4RkNCQikgLy8gMS43LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01EQ0NPTlRST0wgICAgICAgIAkoKFVJTlQxNikweEZDQkMpIC8vIDEuNy4wLzEuNC4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRENDT1VOVFJZICAgICAgICAJKChVSU5UMTYpMHhGQ0JEKSAvLyAxLjcuMC8xLjQuMAorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhQT1dFUk1BWCAgICAgICAgCSgoVUlOVDE2KTB4RkNCRSkgLy8gMS43LjAvMS40LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkxGT0VOQkxFRCAgICAgIAkoKFVJTlQxNikweEZDQkYpIC8vIDEuNi4zCisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfQ0FQSU5GTyAgICAgICAgICAgICAoKFVJTlQxNikweEZDQzApIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfTElTVEVOSU5URVJWQUwgICAgICAoKFVJTlQxNikweEZDQzEpIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfRElWRVJTSVRZRU5BQkxFRCAgICAoKFVJTlQxNikweEZDQzIpIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfTEVEX0NPTlRST0wgICAgICAgICAoKFVJTlQxNikweEZDQzQpIC8vIDEuNy42CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfSEZPX0RFTEFZICAgICAgICAgICAoKFVJTlQxNikweEZDQzUpIC8vIDEuNy42CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfRElTU0FMT1dFREJTU0lEICAgICAoKFVJTlQxNikweEZDQzYpIC8vIDEuOC4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TQ0FOUkVRVUVTVAkJKChVSU5UMTYpMHhGQ0UxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QJCSgoVUlOVDE2KTB4RkNFMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FURVNUQQkoKFVJTlQxNikweEZDRTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMSU5GT1JFUVVFU1QJKChVSU5UMTYpMHhGQ0U0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfSE9TVFNDQU4gICAgICAgICAgCSgoVUlOVDE2KTB4RkNFNSkgLy8gTkVXIFNUQQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFU1RBCSgoVUlOVDE2KTB4RkNFNikKKworI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWV9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUDEyOERFRkFVTFRLRVlfTEVOCSgoVUlOVDE2KTE0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUFJJT1FVU0FHRV9MRU4JCSgoVUlOVDE2KTQpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQRCBSZWNvcmQgY29kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENCX1BBUlROVU0JCSgoVUlOVDE2KTB4MDAwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUERBVkVSCQkoKFVJTlQxNikweDAwMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ19TRVJJQUwJCSgoVUlOVDE2KTB4MDAwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMDQpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ19SQU1TSVpFCQkoKFVJTlQxNikweDAwMDUpCisjZGVmaW5lIEhGQTM4NHhfUERSX01GSVNVUFJBTkdFCQkoKFVJTlQxNikweDAwMDYpCisjZGVmaW5lIEhGQTM4NHhfUERSX0NGSVNVUFJBTkdFCQkoKFVJTlQxNikweDAwMDcpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ0lECQkoKFVJTlQxNikweDAwMDgpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVGREFDX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMTApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfTUVBU1VSRU1FTlRTCSgoVUlOVDE2KTB4MDAyMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMzApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTU9ERU1fVFJJTURBQ19NRUFTVVJFTUVOVFMJKChVSU5UMTYpMHgwMDQwKQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX0NPUkVHQV9IQUNLCQkoKFVJTlQxNikweDAwZmYpCisjZGVmaW5lIEhGQTM4NHhfUERSX01BQ19BRERSRVNTCQkoKFVJTlQxNikweDAxMDEpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX0NBTExOQU1FCSgoVUlOVDE2KTB4MDEwMikKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVHRE9NQUlOCQkoKFVJTlQxNikweDAxMDMpCisjZGVmaW5lIEhGQTM4NHhfUERSX0FMTE9XRURfQ0hBTk5FTAkoKFVJTlQxNikweDAxMDQpCisjZGVmaW5lIEhGQTM4NHhfUERSX0RFRkFVTFRfQ0hBTk5FTAkoKFVJTlQxNikweDAxMDUpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfUFJJVkFDWV9PUFRJT04JKChVSU5UMTYpMHgwMTA2KQorI2RlZmluZSBIRkEzODR4X1BEUl9URU1QVFlQRQkJKChVSU5UMTYpMHgwMTA3KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1JFRkRBQ19TRVRVUAkoKFVJTlQxNikweDAxMTApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfU0VUVVAJCSgoVUlOVDE2KTB4MDEyMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX1NFVFVQCSgoVUlOVDE2KTB4MDEzMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9UUklNREFDX1NFVFVQCSgoVUlOVDE2KTB4MDE0MCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSUZSX1NFVFRJTkcJCSgoVUlOVDE2KTB4MDIwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUkZSX1NFVFRJTkcJCSgoVUlOVDE2KTB4MDIwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9CQVNFTElORQkoKFVJTlQxNikweDAyMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfU0hBRE9XCSgoVUlOVDE2KTB4MDIwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9JRlJGCSgoVUlOVDE2KTB4MDIwNCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTFNQCSgoVUlOVDE2KTB4MDMwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTEkJKChVSU5UMTYpMHgwMzAxKQorI2RlZmluZSBIRkEzODR4X1BEUl9NQVhfVFhfUE9XRVIgIAkoKFVJTlQxNikweDAzMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX01BU1RFUl9DSEFOX0xJU1QJKChVSU5UMTYpMHgwMzAzKQorI2RlZmluZSBIRkEzODR4X1BEUl8zODQyX05JQ19DT05GSUcJKChVSU5UMTYpMHgwNDAwKQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfSUQJCSgoVUlOVDE2KTB4MDQwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX0lECQkoKFVJTlQxNikweDA0MDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX1BDSV9JRkNPTkYJCSgoVUlOVDE2KTB4MDQwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX1BNQ09ORgkJKChVSU5UMTYpMHgwNDA0KQorI2RlZmluZSBIRkEzODR4X1BEUl9SRkVOUkdZCQkoKFVJTlQxNikweDA0MDYpCisjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9QT1dFUl9UWVBFICAgICAgKChVSU5UMTYpMHgwNDA3KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1VOS05PV040MDgJCSgoVUlOVDE2KTB4MDQwOCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX01BWF9QT1dFUgkoKFVJTlQxNikweDA0MDkpCisjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9NQU5VRkFDVFVSRVIJKChVSU5UMTYpMHgwNDEwKQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfUFJPRFVDVCAgCSgoVUlOVDE2KTB4MDQxMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfQU5UX0RJVkVSU0lUWSAgIAkoKFVJTlQxNikweDA0MTIpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGT19ERUxBWSAgICAgICAJKChVSU5UMTYpMHgwNDEzKQorI2RlZmluZSBIRkEzODR4X1BEUl9TQ0FMRV9USFJFU0ggCSgoVUlOVDE2KTB4MDQxNCkKKworI2RlZmluZSBIRkEzODR4X1BEUl9IRkEzODYxX01BTkZfVEVTVFNQCSgoVUlOVDE2KTB4MDkwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RJCSgoVUlOVDE2KTB4MDkwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfRU5EX09GX1BEQQkJKChVSU5UMTYpMHgwMDAwKQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLSBSZWdpc3RlciBJRCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQkJSEZBMzg0eF9DTUQJCUhGQTM4NHhfQ01EX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTAJCUhGQTM4NHhfUEFSQU0wX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTEJCUhGQTM4NHhfUEFSQU0xX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTIJCUhGQTM4NHhfUEFSQU0yX09GRgorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVMJCUhGQTM4NHhfU1RBVFVTX09GRgorI2RlZmluZQkJSEZBMzg0eF9SRVNQMAkJSEZBMzg0eF9SRVNQMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUkVTUDEJCUhGQTM4NHhfUkVTUDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyCQlIRkEzODR4X1JFU1AyX09GRgorI2RlZmluZQkJSEZBMzg0eF9JTkZPRklECQlIRkEzODR4X0lORk9GSURfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1JYRklECQlIRkEzODR4X1JYRklEX09GRgorI2RlZmluZQkJSEZBMzg0eF9BTExPQ0ZJRAlIRkEzODR4X0FMTE9DRklEX09GRgorI2RlZmluZQkJSEZBMzg0eF9UWENPTVBMRklECUhGQTM4NHhfVFhDT01QTEZJRF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMAkJSEZBMzg0eF9TRUxFQ1QwX09GRgorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwCQlIRkEzODR4X09GRlNFVDBfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0RBVEEwCQlIRkEzODR4X0RBVEEwX09GRgorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QxCQlIRkEzODR4X1NFTEVDVDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDEJCUhGQTM4NHhfT0ZGU0VUMV9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTEJCUhGQTM4NHhfREFUQTFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVAkJSEZBMzg0eF9FVlNUQVRfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOCQlIRkEzODR4X0lOVEVOX09GRgorI2RlZmluZQkJSEZBMzg0eF9FVkFDSwkJSEZBMzg0eF9FVkFDS19PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTAkJSEZBMzg0eF9DT05UUk9MX09GRgorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwCUhGQTM4NHhfU1dTVVBQT1JUMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDIJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgorI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFCQlIRkEzODR4X0FVWFBBR0VfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVAlIRkEzODR4X0FVWE9GRlNFVF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQVVYREFUQQkJSEZBMzg0eF9BVVhEQVRBX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQ0lDT1IJCUhGQTM4NHhfUENJQ09SX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQ0lIQ1IJCUhGQTM4NHhfUENJSENSX09GRgorCisKKy8qLS0tIFJlZ2lzdGVyIFRlc3QvR2V0L1NldCBGaWVsZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQkJSEZBMzg0eF9DTURfSVNCVVNZKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KXZhbHVlKSAmIEhGQTM4NHhfQ01EX0JVU1kpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fR0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9BSU5GTykgPj4gOCkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpCQkoKFVJTlQxNikoKFVJTlQxNikodmFsdWUpIDw8IDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVF9HRVQodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX01BQ1BPUlQpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKHZhbHVlKQkJKChVSU5UMTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTUkVDTCh2YWx1ZSkJCSgoVUlOVDE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfUkVDTCkpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTF9TRVQodmFsdWUpCQkoKFVJTlQxNilIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKChVSU5UMTYpKHZhbHVlKSkmKChVSU5UMTYpMHgzMDAwKSkgPj4gMTIpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTIpICYgMHgzMDAwKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTV1JJVEUodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1dSSVRFKSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9XUklURV9TRVQodmFsdWUpCQkoKFVJTlQxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKFVJTlQxNil2YWx1ZSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9HRVQodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1BST0dNT0RFKSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQodmFsdWUpCQkoKFVJTlQxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKFVJTlQxNil2YWx1ZSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfQ01EX0NNRENPREUpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQodmFsdWUpCQkoKFVJTlQxNikodmFsdWUpKQorCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKHZhbHVlKQkoKFVJTlQxNikoKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUKSA+PiA4KSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVF9TRVQodmFsdWUpCSgoKFVJTlQxNikodmFsdWUpKSA8PCA4KQorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfQ01EQ09ERV9HRVQodmFsdWUpCSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfU1RBVFVTX0NNRENPREUpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFX1NFVCh2YWx1ZSkJKChVSU5UMTYpKHZhbHVlKSkKKworI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfQlVTWSkpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9JU0VSUih2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfT0ZGU0VUX0VSUikpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfREFUQU9GRikpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX1NFVCh2YWx1ZSkJKChVSU5UMTYpKHZhbHVlKSkKKworI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNUSUNLKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVElDSykpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1dURVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfV1RFUlIpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNJTkZEUk9QKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfSU5GRFJPUCkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0lORk8odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9JTkZPKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTRFRJTSh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0RUSU0pKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNDTUQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9DTUQpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNBTExPQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0FMTE9DKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTVFhFWEModmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9UWEVYQykpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1RYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVFgpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNSWCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1JYKSkKKworI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNCQVBfT1AodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVF9CQVBfT1ApKQorCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTVElDSyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fVElDSykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RJQ0tfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDE1KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNXVEVSUih2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fV1RFUlIpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9XVEVSUl9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTQpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0lORkRST1AodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0lORkRST1ApKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZEUk9QX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEzKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNJTkZPKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9JTkZPKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSU5GT19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTRFRJTSh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fRFRJTSkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0RUSU1fU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDUpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0NNRCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQ01EKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fQ01EX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA0KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNBTExPQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQUxMT0MpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9BTExPQ19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTVFhFWEModmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1RYRVhDKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFhFWENfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDIpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU1RYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9UWCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RYX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNSWCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fUlgpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9SWF9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMCkpCisKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUSUNLKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19USUNLKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVElDS19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTUpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1dURVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19XVEVSUikpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1dURVJSX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxNCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTSU5GRFJPUCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfSU5GRFJPUCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1BfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTMpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0lORk8odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0lORk8pKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA3KSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNEVElNKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19EVElNKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfRFRJTV9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNSkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTQ01EKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19DTUQpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTURfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDQpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0FMTE9DKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19BTExPQykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAzKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUWEVYQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfVFhFWEMpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQ19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMikpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTVFgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1RYKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFhfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1JYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19SWCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAwKSkKKworI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDE0KSkKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhFTl9HRVQodmFsdWUpCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA+PiAxNCkpCisKKy8qIEJ5dGUgT3JkZXIgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIGhmYTM4NHgyaG9zdF8xNihuKQkoX19sZTE2X3RvX2NwdSgoVUlOVDE2KShuKSkpCisjZGVmaW5lIGhmYTM4NHgyaG9zdF8zMihuKQkoX19sZTMyX3RvX2NwdSgoVUlOVDMyKShuKSkpCisjZGVmaW5lIGhvc3QyaGZhMzg0eF8xNihuKQkoX19jcHVfdG9fbGUxNigoVUlOVDE2KShuKSkpCisjZGVmaW5lIGhvc3QyaGZhMzg0eF8zMihuKQkoX19jcHVfdG9fbGUzMigoVUlOVDMyKShuKSkpCisjZW5kaWYKKworLyogSG9zdCBNYWludGFpbmVkIFN0YXRlIEluZm8gKi8KKyNkZWZpbmUgSEZBMzg0eF9TVEFURV9QUkVJTklUCTAKKyNkZWZpbmUgSEZBMzg0eF9TVEFURV9JTklUCTEKKyNkZWZpbmUgSEZBMzg0eF9TVEFURV9SVU5OSU5HCTIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIFR5cGVzIGFuZCB0aGVpciByZWxhdGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgSEZBMzg0eF9IT1NUQVVUSEFTU09DX0hPU1RBVVRIICAgQklUMAorI2RlZmluZSBIRkEzODR4X0hPU1RBVVRIQVNTT0NfSE9TVEFTU09DICBCSVQxCisKKyNkZWZpbmUgSEZBMzg0eF9XSEFIQU5ETElOR19ESVNBQkxFRCAgICAgMAorI2RlZmluZSBIRkEzODR4X1dIQUhBTkRMSU5HX1BBU1NUSFJPVUdIICBCSVQxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDb21tb25seSB1c2VkIGJhc2ljIHR5cGVzICovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2J5dGVzdHIKK3sKKwlVSU5UMTYJbGVuOworCVVJTlQ4CWRhdGFbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYnl0ZXN0cl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2J5dGVzdHIzMgoreworCVVJTlQxNglsZW47CisJVUlOVDgJZGF0YVszMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYnl0ZXN0cjMyX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6CisJTmV0d29yayBQYXJhbWV0ZXJzLCBTdGF0aWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJvdG90eXBlIHN0cnVjdHVyZTogYWxsIGNvbmZpZ3VyYXRpb24gcmVjb3JkIHN0cnVjdHVyZXMgc3RhcnQgd2l0aAordGhlc2UgbWVtYmVycyAqLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JlY29yZAoreworCVVJTlQxNglyZWNsZW47CisJVUlOVDE2CXJpZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yZWNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yZWNvcmQxNgoreworCVVJTlQxNglyZWNsZW47CisJVUlOVDE2CXJpZDsKKwlVSU5UMTYJdmFsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlYzE2X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcmVjb3JkMzIKK3sKKwlVSU5UMTYJcmVjbGVuOworCVVJTlQxNglyaWQ7CisJVUlOVDMyCXZhbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yZWMzMjsKKworLyotLSBIYXJkd2FyZS9GaXJtd2FyZSBDb21wb25lbnQgSW5mb3JtYXRpb24gLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NvbXBpZGVudAoreworCVVJTlQxNglpZDsKKwlVSU5UMTYJdmFyaWFudDsKKwlVSU5UMTYJbWFqb3I7CisJVUlOVDE2CW1pbm9yOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NvbXBpZGVudF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NhcGxldmVsCit7CisJVUlOVDE2CXJvbGU7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNglib3R0b207CisJVUlOVDE2CXRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jYXBsZXZlbF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQb3J0VHlwZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBvcnRUeXBlCit7CisJVUlOVDE2CWNuZlBvcnRUeXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBvcnRUeXBlX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bk1BQ0FkZHJlc3MgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25NQUNBZGRyZXNzCit7CisJVUlOVDgJY25mT3duTUFDQWRkcmVzc1s2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25NQUNBZGRyZXNzX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZkRlc2lyZWRTU0lEIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mRGVzaXJlZFNTSUQKK3sKKwlVSU5UOAljbmZEZXNpcmVkU1NJRFszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mRGVzaXJlZFNTSURfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duQ2hhbm5lbCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bkNoYW5uZWwKK3sKKwlVSU5UMTYJY25mT3duQ2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25DaGFubmVsX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93blNTSUQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25TU0lECit7CisJVUlOVDgJY25mT3duU1NJRFszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duU1NJRF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25BVElNV2luZG93IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duQVRJTVdpbmRvdworeworCVVJTlQxNgljbmZPd25BVElNV2luZG93OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkFUSU1XaW5kb3dfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mU3lzdGVtU2NhbGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZTeXN0ZW1TY2FsZQoreworCVVJTlQxNgljbmZTeXN0ZW1TY2FsZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZTeXN0ZW1TY2FsZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNYXhEYXRhTGVuZ3RoIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTWF4RGF0YUxlbmd0aAoreworCVVJTlQxNgljbmZNYXhEYXRhTGVuZ3RoOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk1heERhdGFMZW5ndGhfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mV0RTQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZldEU0FkZHJlc3MKK3sKKwlVSU5UOAljbmZXRFNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZldEU0FkZHJlc3NfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1FbmFibGVkIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUE1FbmFibGVkCit7CisJVUlOVDE2CWNuZlBNRW5hYmxlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUVuYWJsZWRfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1FUFMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUVQUworeworCVVJTlQxNgljbmZQTUVQUzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUVQU190OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNdWx0aWNhc3RSZWNlaXZlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTXVsdGljYXN0UmVjZWl2ZQoreworCVVJTlQxNgljbmZNdWx0aWNhc3RSZWNlaXZlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk11bHRpY2FzdFJlY2VpdmVfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mQXV0aGVudGljYXRpb24gLS0qLworI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU0JMHgwMDAxCisjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZCTB4MDAwMgorI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX0xFQVAgICAgIAkweDAwMDQKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mTWF4U2xlZXBEdXJhdGlvbiAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk1heFNsZWVwRHVyYXRpb24KK3sKKwlVSU5UMTYJY25mTWF4U2xlZXBEdXJhdGlvbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZNYXhTbGVlcER1cmF0aW9uX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBNSG9sZG92ZXJEdXJhdGlvbiAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNSG9sZG92ZXJEdXJhdGlvbgoreworCVVJTlQxNgljbmZQTUhvbGRvdmVyRHVyYXRpb247Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUE1Ib2xkb3ZlckR1cmF0aW9uX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bk5hbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25OYW1lCit7CisJVUlOVDgJY25mT3duTmFtZVszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duTmFtZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25EVElNUGVyaW9kIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duRFRJTVBlcmlvZAoreworCVVJTlQxNgljbmZPd25EVElNUGVyaW9kOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkRUSU1QZXJpb2RfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mV0RTQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZldEU0FkZHJlc3NOCit7CisJVUlOVDgJY25mV0RTQWRkcmVzc1s2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZXRFNBZGRyZXNzTl90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nCit7CisJVUlOVDE2CWNuZk11bHRpY2FzdFBNQnVmZmVyaW5nOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6CisJTmV0d29yayBQYXJhbWV0ZXJzLCBEeW5hbWljIENvbmZpZ3VyYXRpb24gRW50aXRpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogR3JvdXBBZGRyZXNzZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Hcm91cEFkZHJlc3NlcworeworCVVJTlQ4CU1BQ0FkZHJlc3NbMTZdWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0dyb3VwQWRkcmVzc2VzX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IENyZWF0ZUlCU1MgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DcmVhdGVJQlNTCit7CisJVUlOVDE2CUNyZWF0ZUlCU1M7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3JlYXRlSUJTU190OworCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOQ1JFQVRFSUJTUyAgICAgICAgICAwCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5DUkVBVEVJQlNTICAxCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOSUJTUyAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5JQlNTICAgICAgICAzCisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEZyYWdtZW50YXRpb25UaHJlc2hvbGQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9GcmFnbWVudGF0aW9uVGhyZXNob2xkCit7CisJVUlOVDE2CUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfRnJhZ21lbnRhdGlvblRocmVzaG9sZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBSVFNUaHJlc2hvbGQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9SVFNUaHJlc2hvbGQKK3sKKwlVSU5UMTYJUlRTVGhyZXNob2xkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1JUU1RocmVzaG9sZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBUeFJhdGVDb250cm9sIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfVHhSYXRlQ29udHJvbAoreworCVVJTlQxNglUeFJhdGVDb250cm9sOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1R4UmF0ZUNvbnRyb2xfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogUHJvbWlzY3VvdXNNb2RlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJvbWlzY3VvdXNNb2RlCit7CisJVUlOVDE2CVByb21pc2N1b3VzTW9kZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcm9taXNjdW91c01vZGVfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogU2NhblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UMTYJY2hhbm5lbExpc3Q7CisJVUlOVDE2CXR4UmF0ZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEhvc3RTY2FuUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UMTYJY2hhbm5lbExpc3Q7CisJVUlOVDE2CXR4UmF0ZTsKKwloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogSm9pblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UOAlic3NpZFtXTEFOX0JTU0lEX0xFTl07CisJVUlOVDE2CWNoYW5uZWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBhdXRoZW50aWNhdGVTdGF0aW9uIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGEKK3sKKwlVSU5UOAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CWFsZ29yaXRobTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogYXNzb2NpYXRlU3RhdGlvbiAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYXNzb2NpYXRlU3RhdGlvbl9kYXRhCit7CisJVUlOVDgJYWRkcmVzc1tXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJc3RhdHVzOworCVVJTlQxNgl0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2Fzc29jaWF0ZVN0YXRpb25fZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBDaGFubmVsSW5mb1JlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhCit7CisJVUlOVDE2CWNoYW5uZWxMaXN0OworCVVJTlQxNgljaGFubmVsRHdlbGxUaW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFdFUEtleU1hcHBpbmcgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dFUEtleU1hcHBpbmcKK3sKKwlVSU5UOAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglrZXlfaW5kZXg7CisJVUlOVDggCWtleVsxNl07CisJVUlOVDggCW1pY190cmFuc21pdF9rZXlbNF07CisJVUlOVDggCW1pY19yZWNlaXZlX2tleVs0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9XRVBLZXlNYXBwaW5nX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFdQQURhdGEgICAgICAgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dQQURhdGEKK3sKKwlVSU5UMTYJZGF0YWxlbjsKKyAgICAgICAgVUlOVDggCWRhdGFbMF07IC8vIG1heCA4MAorfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1dQQURhdGFfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczogQmVoYXZpb3IgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBUaWNrVGltZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1RpY2tUaW1lCit7CisJVUlOVDE2CVRpY2tUaW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1RpY2tUaW1lX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBOSUMgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heExvYWRUaW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4TG9hZFRpbWUKK3sKKwlVSU5UMTYJTWF4TG9hZFRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4TG9hZFRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IERvd25Mb2FkQnVmZmVyIC0tKi8KKy8qIE5PVEU6IFRoZSBwYWdlIGFuZCBvZmZzZXQgYXJlIGluIEFVWCBmb3JtYXQgKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfZG93bmxvYWRidWZmZXIKK3sKKwlVSU5UMTYJcGFnZTsKKwlVSU5UMTYJb2Zmc2V0OworCVVJTlQxNglsZW47Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBSSUlkZW50aXR5IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUFJJSWRlbnRpdHkKK3sKKwlVSU5UMTYJUFJJQ29tcElEOworCVVJTlQxNglQUklWYXJpYW50OworCVVJTlQxNglQUklNYWpvclZlcnNpb247CisJVUlOVDE2CVBSSU1pbm9yVmVyc2lvbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QUklJZGVudGl0eV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUFJJU3VwUmFuZ2UgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QUklTdXBSYW5nZQoreworCVVJTlQxNglQUklSb2xlOworCVVJTlQxNglQUklJRDsKKwlVSU5UMTYJUFJJVmFyaWFudDsKKwlVSU5UMTYJUFJJQm90dG9tOworCVVJTlQxNglQUklUb3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFJJU3VwUmFuZ2VfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGSUFjdFJhbmdlcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NGSUFjdFJhbmdlcworeworCVVJTlQxNglDRklSb2xlOworCVVJTlQxNglDRklJRDsKKwlVSU5UMTYJQ0ZJVmFyaWFudDsKKwlVSU5UMTYJQ0ZJQm90dG9tOworCVVJTlQxNglDRklUb3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJQWN0UmFuZ2VzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBOSUNTZXJpYWxOdW1iZXIgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNTZXJpYWxOdW1iZXIKK3sKKwlVSU5UOAlOSUNTZXJpYWxOdW1iZXJbMTJdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ1NlcmlhbE51bWJlcl90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTklDSWRlbnRpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNJZGVudGl0eQoreworCVVJTlQxNglOSUNDb21wSUQ7CisJVUlOVDE2CU5JQ1ZhcmlhbnQ7CisJVUlOVDE2CU5JQ01ham9yVmVyc2lvbjsKKwlVSU5UMTYJTklDTWlub3JWZXJzaW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ0lkZW50aXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNRklTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X01GSVN1cFJhbmdlCit7CisJVUlOVDE2CU1GSVJvbGU7CisJVUlOVDE2CU1GSUlEOworCVVJTlQxNglNRklWYXJpYW50OworCVVJTlQxNglNRklCb3R0b207CisJVUlOVDE2CU1GSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0ZJU3VwUmFuZ2UgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRklTdXBSYW5nZQoreworCVVJTlQxNglDRklSb2xlOworCVVJTlQxNglDRklJRDsKKwlVSU5UMTYJQ0ZJVmFyaWFudDsKKwlVSU5UMTYJQ0ZJQm90dG9tOworCVVJTlQxNglDRklUb3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJU3VwUmFuZ2VfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEJVSUxEU0VROkJ1aWxkU2VxIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQnVpbGRTZXEgeworCVVJTlQxNglwcmltYXJ5OworCVVJTlQxNglzZWNvbmRhcnk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQnVpbGRTZXFfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEZXSUQgLS0qLworI2RlZmluZSBIRkEzODR4X0ZXSURfTEVOCTE0Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0ZXSUQgeworCVVJTlQ4CXByaW1hcnlbSEZBMzg0eF9GV0lEX0xFTl07CisJVUlOVDgJc2Vjb25kYXJ5W0hGQTM4NHhfRldJRF9MRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0ZXSURfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENoYW5uZWxMaXN0IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hhbm5lbExpc3QKK3sKKwlVSU5UMTYJQ2hhbm5lbExpc3Q7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hhbm5lbExpc3RfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFJlZ3VsYXRvcnlEb21haW5zIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnMKK3sKKwlVSU5UOAlSZWd1bGF0b3J5RG9tYWluc1sxMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnNfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFRlbXBUeXBlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGVtcFR5cGUKK3sKKwlVSU5UMTYJVGVtcFR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGVtcFR5cGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENJUyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NJUworeworCVVJTlQ4CUNJU1s0ODBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NJU190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU1RBSWRlbnRpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TVEFJZGVudGl0eQoreworCVVJTlQxNglTVEFDb21wSUQ7CisJVUlOVDE2CVNUQVZhcmlhbnQ7CisJVUlOVDE2CVNUQU1ham9yVmVyc2lvbjsKKwlVSU5UMTYJU1RBTWlub3JWZXJzaW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NUQUlkZW50aXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTVEFTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NUQVN1cFJhbmdlCit7CisJVUlOVDE2CVNUQVJvbGU7CisJVUlOVDE2CVNUQUlEOworCVVJTlQxNglTVEFWYXJpYW50OworCVVJTlQxNglTVEFCb3R0b207CisJVUlOVDE2CVNUQVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TVEFTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTUZJQWN0UmFuZ2VzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTUZJQWN0UmFuZ2VzCit7CisJVUlOVDE2CU1GSVJvbGU7CisJVUlOVDE2CU1GSUlEOworCVVJTlQxNglNRklWYXJpYW50OworCVVJTlQxNglNRklCb3R0b207CisJVUlOVDE2CU1GSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklBY3RSYW5nZXNfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE5JQyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUG9ydFN0YXR1cyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BvcnRTdGF0dXMKK3sKKwlVSU5UMTYJUG9ydFN0YXR1czsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qb3J0U3RhdHVzX3Q7CisKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0RJU0FCTEVECSgoVUlOVDE2KTEpCisjZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19TRUFSQ0hJTkcJKChVSU5UMTYpMikKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUwkoKFVJTlQxNikzKQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9FU1MJKChVSU5UMTYpNCkKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX09VVE9GUkFOR0UJKChVSU5UMTYpNSkKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fV0RTCSgoVUlOVDE2KTYpCisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50U1NJRCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRTU0lECit7CisJVUlOVDgJQ3VycmVudFNTSURbMzRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRTU0lEX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50QlNTSUQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50QlNTSUQKK3sKKwlVSU5UOAlDdXJyZW50QlNTSURbNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudEJTU0lEX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBjb21tc3F1YWxpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jb21tc3F1YWxpdHkKK3sKKwlVSU5UMTYJQ1FfY3VyckJTUzsKKwlVSU5UMTYJQVNMX2N1cnJCU1M7CisJVUlOVDE2CUFOTF9jdXJyRkM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY29tbXNxdWFsaXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBkbWJjb21tc3F1YWxpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9kYm1jb21tc3F1YWxpdHkKK3sKKwlVSU5UMTYJQ1FkYm1fY3VyckJTUzsKKwlVSU5UMTYJQVNMZGJtX2N1cnJCU1M7CisJVUlOVDE2CUFOTGRibV9jdXJyRkM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50VHhSYXRlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFR4UmF0ZQoreworCVVJTlQxNglDdXJyZW50VHhSYXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRUeFJhdGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRCZWFjb25JbnRlcnZhbCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRCZWFjb25JbnRlcnZhbAoreworCVVJTlQxNglDdXJyZW50QmVhY29uSW50ZXJ2YWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudEJlYWNvbkludGVydmFsX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50U2NhbGVUaHJlc2hvbGRzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFNjYWxlVGhyZXNob2xkcworeworCVVJTlQxNglFbmVyZ3lEZXRlY3RUaHJlc2hvbGQ7CisJVUlOVDE2CUNhcnJpZXJEZXRlY3RUaHJlc2hvbGQ7CisJVUlOVDE2CURlZmVyRGV0ZWN0VGhyZXNob2xkOworCVVJTlQxNglDZWxsU2VhcmNoVGhyZXNob2xkOyAvKiBTdGF0aW9ucyBvbmx5ICovCisJVUlOVDE2CURlYWRTcG90VGhyZXNob2xkOyAvKiBTdGF0aW9ucyBvbmx5ICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFNjYWxlVGhyZXNob2xkc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUHJvdG9jb2xSc3BUaW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJvdG9jb2xSc3BUaW1lCit7CisJVUlOVDE2CVByb3RvY29sUnNwVGltZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcm90b2NvbFJzcFRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFNob3J0UmV0cnlMaW1pdCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1Nob3J0UmV0cnlMaW1pdAoreworCVVJTlQxNglTaG9ydFJldHJ5TGltaXQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2hvcnRSZXRyeUxpbWl0X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMb25nUmV0cnlMaW1pdCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xvbmdSZXRyeUxpbWl0Cit7CisJVUlOVDE2CUxvbmdSZXRyeUxpbWl0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0xvbmdSZXRyeUxpbWl0X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNYXhUcmFuc21pdExpZmV0aW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4VHJhbnNtaXRMaWZldGltZQoreworCVVJTlQxNglNYXhUcmFuc21pdExpZmV0aW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01heFRyYW5zbWl0TGlmZXRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heFJlY2VpdmVMaWZldGltZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X01heFJlY2VpdmVMaWZldGltZQoreworCVVJTlQxNglNYXhSZWNlaXZlTGlmZXRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4UmVjZWl2ZUxpZmV0aW1lX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDRlBvbGxhYmxlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0ZQb2xsYWJsZQoreworCVVJTlQxNglDRlBvbGxhYmxlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NGUG9sbGFibGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcworeworCVVJTlQxNglBdXRoZW50aWNhdGlvblR5cGU7CisJVUlOVDE2CVR5cGVFbmFibGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQXV0aGVudGljYXRpb25BbGdvcml0aG1zCisoZGF0YSBvbmx5IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zX2RhdGEKK3sKKwlVSU5UMTYJQXV0aGVudGljYXRpb25UeXBlOworCVVJTlQxNglUeXBlRW5hYmxlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9BdXRoZW50aWNhdGlvbkFsZ29yaXRobXNfZGF0YV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkCit7CisJVUlOVDE2CVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcml2YWN5T3B0aW9uSW1wbGVtZW50ZWRfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE93bk1BQ0FkZHJlc3MgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Pd25NQUNBZGRyZXNzCit7CisJVUlOVDgJT3duTUFDQWRkcmVzc1s2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Pd25NQUNBZGRyZXNzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQQ0ZJbmZvIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUENGSW5mbworeworCVVJTlQxNglNZWRpdW1PY2N1cGFuY3lMaW1pdDsKKwlVSU5UMTYJQ0ZQUGVyaW9kOworCVVJTlQxNglDRlBNYXhEdXJhdGlvbjsKKwlVSU5UMTYJQ0ZQRmxhZ3M7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUENGSW5mb190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUENGSW5mbyAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUENGSW5mb19kYXRhCit7CisJVUlOVDE2CU1lZGl1bU9jY3VwYW5jeUxpbWl0OworCVVJTlQxNglDRlBQZXJpb2Q7CisJVUlOVDE2CUNGUE1heER1cmF0aW9uOworCVVJTlQxNglDRlBGbGFnczsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE1vZGVtIEluZm9ybWF0aW9uIFJlY29yZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBIWVR5cGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QSFlUeXBlCit7CisJVUlOVDE2CVBIWVR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUEhZVHlwZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudENoYW5uZWwgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50Q2hhbm5lbAoreworCVVJTlQxNglDdXJyZW50Q2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50Q2hhbm5lbF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudFBvd2VyU3RhdGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50UG93ZXJTdGF0ZQoreworCVVJTlQxNglDdXJyZW50UG93ZXJTdGF0ZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50UG93ZXJTdGF0ZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0NBTW9kZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NDQU1vZGUKK3sKKwlVSU5UMTYJQ0NBTW9kZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DQ0FNb2RlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTdXBwb3J0ZWREYXRhUmF0ZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TdXBwb3J0ZWREYXRhUmF0ZXMKK3sKKwlVSU5UOAlTdXBwb3J0ZWREYXRhUmF0ZXNbMTBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1N1cHBvcnRlZERhdGFSYXRlc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTEZPU3RhdHVzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTEZPU3RhdHVzCit7CisJVUlOVDE2ICBUZXN0UmVzdWx0czsKKwlVSU5UMTYgIExGT1Jlc3VsdDsKKwlVSU5UMTYgIFZSSEZPUmVzdWx0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0xGT1N0YXR1c190OworCisjZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9BTExQQVNTRUQgICAgQklUMAorI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfTEZPX0ZBSUwgICAgIEJJVDEKKyNkZWZpbmUgSEZBMzg0eF9URVNUUkVTVUxUX1ZSX0hGMF9GQUlMICBCSVQyCisjZGVmaW5lIEhGQTM4NHhfSE9TVF9GSVJNX0NPT1JESU5BVEUgICAgQklUNworI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfQ09PUkRJTkFURSAgIEJJVDE1CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMRURDb250cm9sIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTEVEQ29udHJvbAoreworCVVJTlQxNiAgc2VhcmNoaW5nX29uOworCVVJTlQxNiAgc2VhcmNoaW5nX29mZjsKKwlVSU5UMTYgIGFzc29jX29uOworCVVJTlQxNiAgYXNzb2Nfb2ZmOworCVVJTlQxNiAgYWN0aXZpdHk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTEVEQ29udHJvbF90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgIEZSQU1FIERFU0NSSVBUT1JTIEFORCBGUkFNRSBTVFJVQ1RVUkVTCisKK0ZSQU1FIERFU0NSSVBUT1JTOiBPZmZzZXRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbnRyb2wgSW5mbyAob2Zmc2V0IDQ0LTUxKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9GRF9TVEFUVVNfT0ZGCQkJKChVSU5UMTYpMHg0NCkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfVElNRV9PRkYJCQkoKFVJTlQxNikweDQ2KQorI2RlZmluZQkJSEZBMzg0eF9GRF9TV1NVUFBPUlRfT0ZGCQkoKFVJTlQxNikweDRBKQorI2RlZmluZQkJSEZBMzg0eF9GRF9TSUxFTkNFX09GRgkJCSgoVUlOVDE2KTB4NEEpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NJR05BTF9PRkYJCQkoKFVJTlQxNikweDRCKQorI2RlZmluZQkJSEZBMzg0eF9GRF9SQVRFX09GRgkJCSgoVUlOVDE2KTB4NEMpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1JYRkxPV19PRkYJCQkoKFVJTlQxNikweDREKQorI2RlZmluZQkJSEZBMzg0eF9GRF9SRVNFUlZFRF9PRkYJCQkoKFVJTlQxNikweDRFKQorI2RlZmluZQkJSEZBMzg0eF9GRF9UWENPTlRST0xfT0ZGCQkoKFVJTlQxNikweDUwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorODAyLjExIEhlYWRlciAob2Zmc2V0IDUyLTZCKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9GRF9GUkFNRUNPTlRST0xfT0ZGCQkoKFVJTlQxNikweDUyKQorI2RlZmluZQkJSEZBMzg0eF9GRF9EVVJBVElPTklEX09GRgkJKChVSU5UMTYpMHg1NCkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzFfT0ZGCQkJKChVSU5UMTYpMHg1NikKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzJfT0ZGCQkJKChVSU5UMTYpMHg1QykKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzNfT0ZGCQkJKChVSU5UMTYpMHg2MikKKyNkZWZpbmUJCUhGQTM4NHhfRkRfU0VRQ09OVFJPTF9PRkYJCSgoVUlOVDE2KTB4NjgpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0FERFJFU1M0X09GRgkJCSgoVUlOVDE2KTB4NkEpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RBVEFMRU5fT0ZGCQkJKChVSU5UMTYpMHg3MCkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzgwMi4zIEhlYWRlciAob2Zmc2V0IDcyLTdGKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9GRF9ERVNUQUREUkVTU19PRkYJCSgoVUlOVDE2KTB4NzIpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NSQ0FERFJFU1NfT0ZGCQkoKFVJTlQxNikweDc4KQorI2RlZmluZQkJSEZBMzg0eF9GRF9EQVRBTEVOR1RIX09GRgkJKChVSU5UMTYpMHg3RSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRlJBTUUgU1RSVUNUVVJFUzogQ29tbXVuaWNhdGlvbiBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBUcmFuc21pdCBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gQ29tbXVuaWNhdGlvbiBGcmFtZTogVHJhbnNtaXQgRnJhbWUgU3RydWN0dXJlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUKK3sKKwlVSU5UMTYJc3RhdHVzOworCVVJTlQxNglyZXNlcnZlZDE7CisJVUlOVDE2CXJlc2VydmVkMjsKKwlVSU5UMzIJc3dfc3VwcG9ydDsKKwlVSU5UOAl0eF9yZXRyeWNvdW50OworCVVJTlQ4ICAgdHhfcmF0ZTsKKwlVSU5UMTYJdHhfY29udHJvbDsKKworCS8qLS0gODAyLjExIEhlYWRlciBJbmZvcm1hdGlvbiAtLSovCisKKwlVSU5UMTYJZnJhbWVfY29udHJvbDsKKwlVSU5UMTYJZHVyYXRpb25faWQ7CisJVUlOVDgJYWRkcmVzczFbNl07CisJVUlOVDgJYWRkcmVzczJbNl07CisJVUlOVDgJYWRkcmVzczNbNl07CisJVUlOVDE2CXNlcXVlbmNlX2NvbnRyb2w7CisJVUlOVDgJYWRkcmVzczRbNl07CisJVUlOVDE2CWRhdGFfbGVuOyAvKiBsaXR0bGUgZW5kaWFuIGZvcm1hdCAqLworCisJLyotLSA4MDIuMyBIZWFkZXIgSW5mb3JtYXRpb24gLS0qLworCisJVUlOVDgJZGVzdF9hZGRyWzZdOworCVVJTlQ4CXNyY19hZGRyWzZdOworCVVJTlQxNglkYXRhX2xlbmd0aDsgLyogYmlnIGVuZGlhbiBmb3JtYXQgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF90eF9mcmFtZV90OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IEZpZWxkIE1hc2tzIGZvciBUcmFuc21pdCBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gU3RhdHVzIEZpZWxkIC0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSCQkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfRk9STUVSUgkJKChVSU5UMTYpQklUMykKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfRElTQ09OCQkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUgkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIJCSgoVUlOVDE2KUJJVDApCisvKi0tIFRyYW5zbWl0IENvbnRyb2wgRmllbGQgLS0qLworI2RlZmluZQkJSEZBMzg0eF9UWF9DRlBPTEwJCQkoKFVJTlQxNilCSVQxMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhfUFJTVAkJCQkoKFVJTlQxNilCSVQxMSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfTUFDUE9SVAkJCSgoVUlOVDE2KShCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfTk9FTkNSWVBUCQkJKChVSU5UMTYpQklUNykKKyNkZWZpbmUJCUhGQTM4NHhfVFhfUkVUUllTVFJBVAkJCSgoVUlOVDE2KShCSVQ2IHwgQklUNSkpCisjZGVmaW5lCQlIRkEzODR4X1RYX1NUUlVDVFlQRQkJCSgoVUlOVDE2KShCSVQ0IHwgQklUMykpCisjZGVmaW5lCQlIRkEzODR4X1RYX1RYRVgJCQkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhfVFhPSwkJCQkoKFVJTlQxNilCSVQxKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRlc3QvR2V0L1NldCBGaWVsZCBWYWx1ZXMgZm9yIFRyYW5zbWl0IEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBTdGF0dXMgRmllbGQgLS0qLworI2RlZmluZSBIRkEzODR4X1RYU1RBVFVTX0lTRVJST1IodikJXAorCSgoKFVJTlQxNikodikpJlwKKwkoSEZBMzg0eF9UWFNUQVRVU19BQ0tFUlJ8SEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSfFwKKwlIRkEzODR4X1RYU1RBVFVTX0RJU0NPTnxIRkEzODR4X1RYU1RBVFVTX0FHRURFUlJ8XAorCUhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIpKQorCisjZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNBQ0tFUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0FDS0VSUikpCisjZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNGT1JNRVJSKHYpCSgoVUlOVDE2KSgoKFVJTlQxNikodikpICYgSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSKSkKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0RJU0NPTih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfRElTQ09OKSkKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0FHRURFUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0FHRURFUlIpKQorI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTUkVUUllFUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX1JFVFJZRVJSKSkKKworI2RlZmluZQlIRkEzODR4X1RYX0dFVCh2LG0scykJCSgoKChVSU5UMTYpKHYpKSYoKFVJTlQxNikobSkpKT4+KChVSU5UMTYpKHMpKSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9TRVQodixtLHMpCQkoKCgoVUlOVDE2KSh2KSk8PCgoVUlOVDE2KShzKSkpJigoVUlOVDE2KShtKSkpCisKKyNkZWZpbmUJSEZBMzg0eF9UWF9DRlBPTExfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfQ0ZQT0xMLDEyKQorI2RlZmluZQlIRkEzODR4X1RYX0NGUE9MTF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9DRlBPTEwsMTIpCisjZGVmaW5lCUhGQTM4NHhfVFhfUFJTVF9HRVQodikJCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfUFJTVCwxMSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9QUlNUX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9QUlNULDExKQorI2RlZmluZQlIRkEzODR4X1RYX01BQ1BPUlRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfTUFDUE9SVCwgOCkKKyNkZWZpbmUJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX01BQ1BPUlQsIDgpCisjZGVmaW5lCUhGQTM4NHhfVFhfTk9FTkNSWVBUX0dFVCh2KQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX05PRU5DUllQVCwgNykKKyNkZWZpbmUJSEZBMzg0eF9UWF9OT0VOQ1JZUFRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfTk9FTkNSWVBULCA3KQorI2RlZmluZQlIRkEzODR4X1RYX1JFVFJZU1RSQVRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfUkVUUllTVFJBVCwgNSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9SRVRSWVNUUkFUX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1JFVFJZU1RSQVQsIDUpCisjZGVmaW5lCUhGQTM4NHhfVFhfU1RSVUNUWVBFX0dFVCh2KQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1NUUlVDVFlQRSwgMykKKyNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQorI2RlZmluZQlIRkEzODR4X1RYX1RYRVhfR0VUKHYpCQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1RYRVgsIDIpCisjZGVmaW5lCUhGQTM4NHhfVFhfVFhFWF9TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhFWCwgMikKKyNkZWZpbmUJSEZBMzg0eF9UWF9UWE9LX0dFVCh2KQkJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9UWE9LLCAxKQorI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tdW5pY2F0aW9uIEZyYW1lczogUmVjZWl2ZSBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gQ29tbXVuaWNhdGlvbiBGcmFtZTogUmVjZWl2ZSBGcmFtZSBTdHJ1Y3R1cmUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yeF9mcmFtZQoreworCS8qLS0gTUFDIHJ4IGRlc2NyaXB0b3IgKGhmYTM4NHggYnl0ZSBvcmRlcikgLS0qLworCVVJTlQxNglzdGF0dXM7CisJVUlOVDMyCXRpbWU7CisJVUlOVDgJc2lsZW5jZTsKKwlVSU5UOAlzaWduYWw7CisJVUlOVDgJcmF0ZTsKKwlVSU5UOAlyeF9mbG93OworCVVJTlQxNglyZXNlcnZlZDE7CisJVUlOVDE2CXJlc2VydmVkMjsKKworCS8qLS0gODAyLjExIEhlYWRlciBJbmZvcm1hdGlvbiAoODAyLjExIGJ5dGUgb3JkZXIpIC0tKi8KKwlVSU5UMTYJZnJhbWVfY29udHJvbDsKKwlVSU5UMTYJZHVyYXRpb25faWQ7CisJVUlOVDgJYWRkcmVzczFbNl07CisJVUlOVDgJYWRkcmVzczJbNl07CisJVUlOVDgJYWRkcmVzczNbNl07CisJVUlOVDE2CXNlcXVlbmNlX2NvbnRyb2w7CisJVUlOVDgJYWRkcmVzczRbNl07CisJVUlOVDE2CWRhdGFfbGVuOyAvKiBoZmEzODR4IChsaXR0bGUgZW5kaWFuKSBmb3JtYXQgKi8KKworCS8qLS0gODAyLjMgSGVhZGVyIEluZm9ybWF0aW9uIC0tKi8KKwlVSU5UOAlkZXN0X2FkZHJbNl07CisJVUlOVDgJc3JjX2FkZHJbNl07CisJVUlOVDE2CWRhdGFfbGVuZ3RoOyAvKiBJRUVFPyAoYmlnIGVuZGlhbikgZm9ybWF0ICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcnhfZnJhbWVfdDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBGaWVsZCBNYXNrcyBmb3IgUmVjZWl2ZSBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gT2Zmc2V0cyAtLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JYX0RBVEFfTEVOX09GRgkJCSgoVUlOVDE2KTQ0KQorI2RlZmluZQkJSEZBMzg0eF9SWF84MDIxMUhEUl9PRkYJCQkoKFVJTlQxNikxNCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhfREFUQV9PRkYJCQkoKFVJTlQxNik2MCkKKworLyotLSBTdGF0dXMgRmllbGRzIC0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTVNHVFlQRQkJKChVSU5UMTYpKEJJVDE1IHwgQklUMTQgfCBCSVQxMykpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQJCSgoVUlOVDE2KShCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfVU5ERUNSCQkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfRkNTRVJSCQkJKChVSU5UMTYpQklUMCkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBUZXN0L0dldC9TZXQgRmllbGQgVmFsdWVzIGZvciBSZWNlaXZlIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTVNHVFlQRSkgPj4gMTMpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEzKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodmFsdWUpCSgoVUlOVDE2KSgoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQpID4+IDgpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDgpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19JU1VOREVDUih2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19VTkRFQ1IpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUih2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19GQ1NFUlIpKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZSQU1FIFNUUlVDVFVSRVM6IEluZm9ybWF0aW9uIFR5cGVzIGFuZCBJbmZvcm1hdGlvbiBGcmFtZSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBUeXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9JVF9IQU5ET1ZFUkFERFIJCQkoKFVJTlQxNikweEYwMDBVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfSEFORE9WRVJERUFVVEhBRERSRVNTCSgoVUlOVDE2KTB4RjAwMVVMKS8vQVAgMS4zLjcKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQ09NTVRBTExJRVMJCQkoKFVJTlQxNikweEYxMDBVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfU0NBTlJFU1VMVFMJCQkoKFVJTlQxNikweEYxMDFVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQ0hJTkZPUkVTVUxUUwkJKChVSU5UMTYpMHhGMTAyVUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX0hPU1RTQ0FOUkVTVUxUUwkJKChVSU5UMTYpMHhGMTAzVUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX0xJTktTVEFUVVMJCQkoKFVJTlQxNikweEYyMDBVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQVNTT0NTVEFUVVMJCQkoKFVJTlQxNikweEYyMDFVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQVVUSFJFUQkJCSgoVUlOVDE2KTB4RjIwMlVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9QU1VTRVJDTlQJCQkoKFVJTlQxNikweEYyMDNVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfS0VZSURDSEFOR0VECQkJKChVSU5UMTYpMHhGMjA0VUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX0FTU09DUkVRICAgIAkJCSgoVUlOVDE2KTB4RjIwNVVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9NSUNGQUlMVVJFICAJCQkoKFVJTlQxNikweEYyMDZVTCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gRnJhbWVzIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIEZyYW1lczogTm90aWZpY2F0aW9uIEZyYW1lIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gIE5vdGlmaWNhdGlvbiBGcmFtZSxNQUMgTWdtdDogSGFuZG92ZXIgQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hhbmRvdmVyQWRkcgoreworCVVJTlQxNglmcmFtZWxlbjsKKwlVSU5UMTYJaW5mb3R5cGU7CisJVUlOVDgJaGFuZG92ZXJfYWRkcltXTEFOX0JTU0lEX0xFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSGFuZG92ZXJBZGRyX3Q7CisKKy8qLS0gIElucXVpcnkgRnJhbWUsIERpYWdub3NlOiBDb21tdW5pY2F0aW9uIFRhbGxpZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczE2Cit7CisJVUlOVDE2CXR4dW5pY2FzdGZyYW1lczsKKwlVSU5UMTYJdHhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDE2CXR4ZnJhZ21lbnRzOworCVVJTlQxNgl0eHVuaWNhc3RvY3RldHM7CisJVUlOVDE2CXR4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQxNgl0eGRlZmVycmVkdHJhbnM7CisJVUlOVDE2CXR4c2luZ2xlcmV0cnlmcmFtZXM7CisJVUlOVDE2CXR4bXVsdGlwbGVyZXRyeWZyYW1lczsKKwlVSU5UMTYJdHhyZXRyeWxpbWl0ZXhjZWVkZWQ7CisJVUlOVDE2CXR4ZGlzY2FyZHM7CisJVUlOVDE2CXJ4dW5pY2FzdGZyYW1lczsKKwlVSU5UMTYJcnhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDE2CXJ4ZnJhZ21lbnRzOworCVVJTlQxNglyeHVuaWNhc3RvY3RldHM7CisJVUlOVDE2CXJ4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQxNglyeGZjc2Vycm9yczsKKwlVSU5UMTYJcnhkaXNjYXJkc25vYnVmZmVyOworCVVJTlQxNgl0eGRpc2NhcmRzd3JvbmdzYTsKKwlVSU5UMTYJcnhkaXNjYXJkc3dlcHVuZGVjcjsKKwlVSU5UMTYJcnhtc2dpbm1zZ2ZyYWc7CisJVUlOVDE2CXJ4bXNnaW5iYWRtc2dmcmFnOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NvbW1UYWxsaWVzMTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczMyCit7CisJVUlOVDMyCXR4dW5pY2FzdGZyYW1lczsKKwlVSU5UMzIJdHhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDMyCXR4ZnJhZ21lbnRzOworCVVJTlQzMgl0eHVuaWNhc3RvY3RldHM7CisJVUlOVDMyCXR4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQzMgl0eGRlZmVycmVkdHJhbnM7CisJVUlOVDMyCXR4c2luZ2xlcmV0cnlmcmFtZXM7CisJVUlOVDMyCXR4bXVsdGlwbGVyZXRyeWZyYW1lczsKKwlVSU5UMzIJdHhyZXRyeWxpbWl0ZXhjZWVkZWQ7CisJVUlOVDMyCXR4ZGlzY2FyZHM7CisJVUlOVDMyCXJ4dW5pY2FzdGZyYW1lczsKKwlVSU5UMzIJcnhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDMyCXJ4ZnJhZ21lbnRzOworCVVJTlQzMglyeHVuaWNhc3RvY3RldHM7CisJVUlOVDMyCXJ4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQzMglyeGZjc2Vycm9yczsKKwlVSU5UMzIJcnhkaXNjYXJkc25vYnVmZmVyOworCVVJTlQzMgl0eGRpc2NhcmRzd3JvbmdzYTsKKwlVSU5UMzIJcnhkaXNjYXJkc3dlcHVuZGVjcjsKKwlVSU5UMzIJcnhtc2dpbm1zZ2ZyYWc7CisJVUlOVDMyCXJ4bXNnaW5iYWRtc2dmcmFnOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NvbW1UYWxsaWVzMzJfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IFNjYW4gUmVzdWx0cyAmIFN1YmZpZWxkcy0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdFN1YgoreworCVVJTlQxNgljaGlkOworCVVJTlQxNglhbmw7CisJVUlOVDE2CXNsOworCVVJTlQ4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlVSU5UMTYJYmNuaW50OworCVVJTlQxNgljYXBpbmZvOworCWhmYTM4NHhfYnl0ZXN0cjMyX3QJc3NpZDsKKwlVSU5UOAlzdXBwcmF0ZXNbMTBdOyAvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCisJVUlOVDE2CXByb2JlcmVzcF9yYXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRTdWJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TY2FuUmVzdWx0Cit7CisJVUlOVDE2CXJzdmQ7CisJVUlOVDE2CXNjYW5yZWFzb247CisJaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3QKKwkJcmVzdWx0W0hGQTM4NHhfU0NBTlJFU1VMVF9NQVhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IENoSW5mbyBSZXN1bHRzICYgU3ViZmllbGRzLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWIKK3sKKwlVSU5UMTYJY2hpZDsKKwlVSU5UMTYJYW5sOworCVVJTlQxNglwbmw7CisJVUlOVDE2CWFjdGl2ZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdDsKKworI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUJQklUMAorI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9QQ0ZBQ1RJVkUJQklUMQorCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdAoreworCVVJTlQxNglzY2FuY2hhbm5lbHM7CisJaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdAorCQlyZXN1bHRbSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaEluZm9SZXN1bHRfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IEhvc3QgU2NhbiBSZXN1bHRzICYgU3ViZmllbGRzLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdFN1YgoreworCVVJTlQxNgljaGlkOworCVVJTlQxNglhbmw7CisJVUlOVDE2CXNsOworCVVJTlQ4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlVSU5UMTYJYmNuaW50OworCVVJTlQxNgljYXBpbmZvOworCWhmYTM4NHhfYnl0ZXN0cjMyX3QJc3NpZDsKKwlVSU5UOAlzdXBwcmF0ZXNbMTBdOyAvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCisJVUlOVDE2CXByb2JlcmVzcF9yYXRlOworCVVJTlQxNglhdGltOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0hTY2FuUmVzdWx0U3ViX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHQKK3sKKwlVSU5UMTYJbnJlc3VsdDsKKwlVSU5UMTYJcnN2ZDsKKwloZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QKKwkJcmVzdWx0W0hGQTM4NHhfSFNDQU5SRVNVTFRfTUFYXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IU2NhblJlc3VsdF90OworCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IExpbmtTdGF0dXMgLS0qLworCisjZGVmaW5lIEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQJKChVSU5UMTYpMCkKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRAkJKChVSU5UMTYpMSkKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX0RJU0NPTk5FQ1RFRAkoKFVJTlQxNikyKQorI2RlZmluZSBIRkEzODR4X0xJTktfQVBfQ0hBTkdFCQkoKFVJTlQxNikzKQorI2RlZmluZSBIRkEzODR4X0xJTktfQVBfT1VUT0ZSQU5HRQkoKFVJTlQxNik0KQorI2RlZmluZSBIRkEzODR4X0xJTktfQVBfSU5SQU5HRQkJKChVSU5UMTYpNSkKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX0FTU09DRkFJTAkJKChVSU5UMTYpNikKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MaW5rU3RhdHVzCit7CisJVUlOVDE2CWxpbmtzdGF0dXM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTGlua1N0YXR1c190OworCisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXNzb2NpYXRpb25TdGF0dXMgKC0tKi8KKworI2RlZmluZSBIRkEzODR4X0FTU09DU1RBVFVTX1NUQUFTU09DCSgoVUlOVDE2KTEpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfUkVBU1NPQwkoKFVJTlQxNikyKQorI2RlZmluZSBIRkEzODR4X0FTU09DU1RBVFVTX0RJU0FTU09DCSgoVUlOVDE2KTMpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfQVNTT0NGQUlMCSgoVUlOVDE2KTQpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwJKChVSU5UMTYpNSkKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Bc3NvY1N0YXR1cworeworCVVJTlQxNglhc3NvY3N0YXR1czsKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwkvKiBvbGRfYXBfYWRkciBpcyBvbmx5IHZhbGlkIGlmIGFzc29jc3RhdHVzID09IDIgKi8KKwlVSU5UOAlvbGRfYXBfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJcmVhc29uOworCVVJTlQxNglyZXNlcnZlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Bc3NvY1N0YXR1c190OworCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IEF1dGhSZXF1ZXN0IChBUCBPbmx5KSAtLSovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aFJlcXVlc3QKK3sKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJYWxnb3JpdGhtOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhSZXFfdDsKKworLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBc3NvY1JlcXVlc3QgKEFQIE9ubHkpIC0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Bc3NvY1JlcXVlc3QKK3sKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJdHlwZTsKKwlVSU5UOCAgIHdwYV9kYXRhWzgwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Bc3NvY1JlcV90OworCisKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1JFUV9UWVBFX0FTU09DICAgICAwCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NSRVFfVFlQRV9SRUFTU09DICAgMQorCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IE1JQyBGYWlsdXJlICAoQVAgT25seSkgLS0qLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X01pY0ZhaWx1cmUKK3sKKwlVSU5UOAlzZW5kZXJbV0xBTl9BRERSX0xFTl07CisJVUlOVDgJZGVzdFtXTEFOX0FERFJfTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NaWNGYWlsdXJlX3Q7CisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogUFNVc2VyQ291bnQgKEFQIE9ubHkpIC0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QU1VzZXJDb3VudAoreworCVVJTlQxNgl1c2VyY250OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BTVXNlckNvdW50X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfS2V5SURDaGFuZ2VkCit7CisJVUlOVDgJc3RhX2FkZHJbV0xBTl9BRERSX0xFTl07CisJVUlOVDE2CWtleWlkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0tleUlEQ2hhbmdlZF90OworCisvKi0tICBDb2xsZWN0aW9uIG9mIGFsbCBJbmYgZnJhbWVzIC0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHVuaW9uIGhmYTM4NHhfaW5mb2RhdGEgeworCWhmYTM4NHhfQ29tbVRhbGxpZXMxNl90CWNvbW10YWxsaWVzMTY7CisJaGZhMzg0eF9Db21tVGFsbGllczMyX3QJY29tbXRhbGxpZXMzMjsKKwloZmEzODR4X1NjYW5SZXN1bHRfdAlzY2FucmVzdWx0OworCWhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QJY2hpbmZvcmVzdWx0OworCWhmYTM4NHhfSFNjYW5SZXN1bHRfdAloc2NhbnJlc3VsdDsKKwloZmEzODR4X0xpbmtTdGF0dXNfdAlsaW5rc3RhdHVzOworCWhmYTM4NHhfQXNzb2NTdGF0dXNfdAlhc3NvY3N0YXR1czsKKwloZmEzODR4X0F1dGhSZXFfdAlhdXRocmVxOworCWhmYTM4NHhfUFNVc2VyQ291bnRfdAlwc3VzZXJjbnQ7CisJaGZhMzg0eF9LZXlJRENoYW5nZWRfdCAga2V5aWRjaGFuZ2VkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2luZm9kYXRhX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSW5mRnJhbWUKK3sKKwlVSU5UMTYJCQlmcmFtZWxlbjsKKwlVSU5UMTYJCQlpbmZvdHlwZTsKKwloZmEzODR4X2luZm9kYXRhX3QJaW5mbzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9JbmZGcmFtZV90OworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVVNCIFBhY2tldCBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFNob3VsZCBiZSBzZW50IHRvIHRoZSBjdHJsb3V0IGVuZHBvaW50ICovCisjZGVmaW5lIEhGQTM4NHhfVVNCX0VOQlVMS0lOCTYKKworLyogU2hvdWxkIGJlIHNlbnQgdG8gdGhlIGJ1bGtvdXQgZW5kcG9pbnQgKi8KKyNkZWZpbmUgSEZBMzg0eF9VU0JfVFhGUk0JMAorI2RlZmluZSBIRkEzODR4X1VTQl9DTURSRVEJMQorI2RlZmluZSBIRkEzODR4X1VTQl9XUklEUkVRCTIKKyNkZWZpbmUgSEZBMzg0eF9VU0JfUlJJRFJFUQkzCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dNRU1SRVEJNAorI2RlZmluZSBIRkEzODR4X1VTQl9STUVNUkVRCTUKKworLyogUmVjZWl2ZWQgZnJvbSB0aGUgYnVsa2luIGVuZHBvaW50ICovCisjZGVmaW5lIEhGQTM4NHhfVVNCX0lTRlJNKGEpCSghKChhKSAmIDB4ODAwMCkpCisjZGVmaW5lIEhGQTM4NHhfVVNCX0lTVFhGUk0oYSkJKCgoYSkgJiAweDkwMDApID09IDB4MTAwMCkKKyNkZWZpbmUgSEZBMzg0eF9VU0JfSVNSWEZSTShhKQkoISgoYSkgJiAweDkwMDApKQorI2RlZmluZSBIRkEzODR4X1VTQl9JTkZPRlJNCTB4ODAwMAorI2RlZmluZSBIRkEzODR4X1VTQl9DTURSRVNQCTB4ODAwMQorI2RlZmluZSBIRkEzODR4X1VTQl9XUklEUkVTUAkweDgwMDIKKyNkZWZpbmUgSEZBMzg0eF9VU0JfUlJJRFJFU1AJMHg4MDAzCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dNRU1SRVNQCTB4ODAwNAorI2RlZmluZSBIRkEzODR4X1VTQl9STUVNUkVTUAkweDgwMDUKKyNkZWZpbmUgSEZBMzg0eF9VU0JfQlVGQVZBSUwJMHg4MDA2CisjZGVmaW5lIEhGQTM4NHhfVVNCX0VSUk9SCTB4ODAwNworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBSZXF1ZXN0IChidWxrIE9VVCkgcGFja2V0IGNvbnRlbnRzICovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3R4ZnJtIHsKKwloZmEzODR4X3R4X2ZyYW1lX3QJZGVzYzsKKwlVSU5UOAkJCWRhdGFbV0xBTl9EQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3R4ZnJtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX2NtZHJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJY21kOworCVVJTlQxNgkJcGFybTA7CisJVUlOVDE2CQlwYXJtMTsKKwlVSU5UMTYJCXBhcm0yOworCVVJTlQ4CQlwYWRbNTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9jbWRyZXFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfd3JpZHJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworCVVJTlQxNgkJcmlkOworCVVJTlQ4CQlkYXRhW0hGQTM4NHhfUklEREFUQV9NQVhMRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl93cmlkcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JyaWRyZXEgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UMTYJCXJpZDsKKwlVSU5UOAkJcGFkWzU4XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfcnJpZHJlcV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl93bWVtcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlvZmZzZXQ7CisJVUlOVDE2CQlwYWdlOworCVVJTlQ4CQlkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3dtZW1yZXFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcm1lbXJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworCVVJTlQxNgkJb2Zmc2V0OworCVVJTlQxNgkJcGFnZTsKKwlVSU5UOAkJcGFkWzU2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfcm1lbXJlcV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBSZXNwb25zZSAoYnVsayBJTikgcGFja2V0IGNvbnRlbnRzICovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3J4ZnJtIHsKKwloZmEzODR4X3J4X2ZyYW1lX3QJZGVzYzsKKwlVSU5UOAkJCWRhdGFbV0xBTl9EQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3J4ZnJtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX2luZm9mcm0geworCVVJTlQxNgkJCXR5cGU7CisJaGZhMzg0eF9JbmZGcmFtZV90CWluZm87Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2luZm9mcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfc3RhdHVzcmVzcCB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJcmVzcDA7CisJVUlOVDE2CQlyZXNwMTsKKwlVSU5UMTYJCXJlc3AyOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9jbWRyZXNwX3Q7CisKK3R5cGVkZWYgaGZhMzg0eF91c2JfY21kcmVzcF90IGhmYTM4NHhfdXNiX3dyaWRyZXNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlyaWQ7CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JyaWRyZXNwX3Q7CisKK3R5cGVkZWYgaGZhMzg0eF91c2JfY21kcmVzcF90IGhmYTM4NHhfdXNiX3dtZW1yZXNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfcm1lbXJlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfYnVmYXZhaWwgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfYnVmYXZhaWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfZXJyb3IgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWVycm9ydHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfZXJyb3JfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVuaW9ucyBmb3IgcGFja2FnaW5nIGFsbCB0aGUga25vd24gcGFja2V0IHR5cGVzIHRvZ2V0aGVyICovCisKK3R5cGVkZWYgdW5pb24gaGZhMzg0eF91c2JvdXQgeworCVVJTlQxNgkJCXR5cGU7CisJaGZhMzg0eF91c2JfdHhmcm1fdAl0eGZybTsKKwloZmEzODR4X3VzYl9jbWRyZXFfdAljbWRyZXE7CisJaGZhMzg0eF91c2Jfd3JpZHJlcV90CXdyaWRyZXE7CisJaGZhMzg0eF91c2JfcnJpZHJlcV90CXJyaWRyZXE7CisJaGZhMzg0eF91c2Jfd21lbXJlcV90CXdtZW1yZXE7CisJaGZhMzg0eF91c2Jfcm1lbXJlcV90CXJtZW1yZXE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNib3V0X3Q7CisKK3R5cGVkZWYgdW5pb24gaGZhMzg0eF91c2JpbiB7CisJVUlOVDE2CQkJdHlwZTsKKwloZmEzODR4X3VzYl9yeGZybV90CXJ4ZnJtOworCWhmYTM4NHhfdXNiX3R4ZnJtX3QJdHhmcm07CisJaGZhMzg0eF91c2JfaW5mb2ZybV90CWluZm9mcm07CisJaGZhMzg0eF91c2JfY21kcmVzcF90CWNtZHJlc3A7CisJaGZhMzg0eF91c2Jfd3JpZHJlc3BfdAl3cmlkcmVzcDsKKwloZmEzODR4X3VzYl9ycmlkcmVzcF90CXJyaWRyZXNwOworCWhmYTM4NHhfdXNiX3dtZW1yZXNwX3QJd21lbXJlc3A7CisJaGZhMzg0eF91c2Jfcm1lbXJlc3BfdAlybWVtcmVzcDsKKwloZmEzODR4X3VzYl9idWZhdmFpbF90CWJ1ZmF2YWlsOworCWhmYTM4NHhfdXNiX2Vycm9yX3QJdXNiZXJyb3I7CisJVUlOVDgJCQlib2d1c3BhZFszMDAwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jpbl90OworCisjZW5kaWYgLyogV0xBTl9VU0IgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEQgcmVjb3JkIHN0cnVjdHVyZXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3BjYl9wYXJ0bnVtCit7CisJVUlOVDgJbnVtWzhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9wY2JfcGFydG51bV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9wY2JfdHJhY2VudW0KK3sKKwlVSU5UOAludW1bOF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3BjYl90cmFjZW51bV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNfc2VyaWFsCit7CisJVUlOVDgJbnVtWzEyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljX3NlcmlhbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzCit7CisJZG91YmxlCWNhcnJpZXJfZnJlcTsKKwlkb3VibGUJb2NjdXBpZWRfYmFuZDsKKwlkb3VibGUJcG93ZXJfZGVuc2l0eTsKKwlkb3VibGUJdHhfc3B1cl9mMTsKKwlkb3VibGUJdHhfc3B1cl9mMjsKKwlkb3VibGUJdHhfc3B1cl9mMzsKKwlkb3VibGUJdHhfc3B1cl9mNDsKKwlkb3VibGUJdHhfc3B1cl9sMTsKKwlkb3VibGUJdHhfc3B1cl9sMjsKKwlkb3VibGUJdHhfc3B1cl9sMzsKKwlkb3VibGUJdHhfc3B1cl9sNDsKKwlkb3VibGUJcnhfc3B1cl9mMTsKKwlkb3VibGUJcnhfc3B1cl9mMjsKKwlkb3VibGUJcnhfc3B1cl9sMTsKKwlkb3VibGUJcnhfc3B1cl9sMjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWtrX21lYXN1cmVtZW50c190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZQoreworCVVJTlQ4CXNpemVbMTJdOyAvKiB1bml0cyBvZiBLQiAqLworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9tZmlzdXByYW5nZQoreworCVVJTlQxNglpZDsKKwlVSU5UMTYJdmFyaWFudDsKKwlVSU5UMTYJYm90dG9tOworCVVJTlQxNgl0b3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX21maXN1cHJhbmdlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2NmaXN1cHJhbmdlCit7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNglib3R0b207CisJVUlOVDE2CXRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbmljaWQKK3sKKwlVSU5UMTYJaWQ7CisJVUlOVDE2CXZhcmlhbnQ7CisJVUlOVDE2CW1ham9yOworCVVJTlQxNgltaW5vcjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljaWRfdDsKKworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzCit7CisJVUlOVDE2CXZhbHVlWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ZnZGFjX21lYXN1cmVtZW50cworeworCVVJTlQxNgl2YWx1ZVswXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfbWVhc3VyZW1lbnRzCit7CisJVUlOVDE2CXZhbHVlWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9sZXZlbF9jb21wY19tZWFzdXJlbWVudHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbWFjX2FkZHJlc3MKK3sKKwlVSU5UOAlhZGRyWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9tYWNfYWRkcmVzc190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9ta2tfY2FsbG5hbWUKK3sKKwlVSU5UOAljYWxsbmFtZVs4XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWtrX2NhbGxuYW1lX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZ2RvbWFpbgoreworCVVJTlQxNgludW1kb21haW5zOworCVVJTlQxNglkb21haW5bNV07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZ2RvbWFpbl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9hbGxvd2VkX2NoYW5uZWwKK3sKKwlVSU5UMTYJY2hfYml0bWFwOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9hbGxvd2VkX2NoYW5uZWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfZGVmYXVsdF9jaGFubmVsCit7CisJVUlOVDE2CWNoYW5uZWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2RlZmF1bHRfY2hhbm5lbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9wcml2YWN5X29wdGlvbgoreworCVVJTlQxNglhdmFpbGFibGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3ByaXZhY3lfb3B0aW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3RlbXB0eXBlCit7CisJVUlOVDE2CXR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3RlbXB0eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cAoreworCVVJTlQxNgljaF92YWx1ZVsxNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl92Z2RhY19zZXR1cAoreworCVVJTlQxNgljaF92YWx1ZVsxNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3ZnZGFjX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXAKK3sKKwlVSU5UMTYJY2hfdmFsdWVbMTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9sZXZlbF9jb21wX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXAKK3sKKwlVSU5UMTYJdHJpbWlkYWM7CisJVUlOVDE2CXRyaW1xZGFjOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl90cmltZGFjX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nCit7CisJVUlOVDE2CXZhbHVlWzNdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9pZnJfc2V0dGluZ190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9yZnJfc2V0dGluZworeworCVVJTlQxNgl2YWx1ZVszXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmZyX3NldHRpbmdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZQoreworCVVJTlQxNgl2YWx1ZVs1MF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfYmFzZWxpbmVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9zaGFkb3cKK3sKKwlVSU5UMzIJdmFsdWVbMzJdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvd190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2lmcmYKK3sKKwlVSU5UMzIJdmFsdWVbMjBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2lmcmZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwCit7CisJVUlOVDE2CXZhbHVlWzE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfY2hjYWxpCit7CisJVUlOVDE2CXZhbHVlWzE3XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9uaWNfY29uZmlnCit7CisJVUlOVDE2CWNvbmZpZ19iaXRtYXA7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX25pY19jb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZvX2RlbGF5Cit7CisJVUlOVDggICBoZm9fZGVsYXk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfaGZvX2RlbGF5X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0c3AKK3sKKwlVSU5UMTYJdmFsdWVbMzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdHNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0aQoreworCVVJTlQxNgl2YWx1ZVszMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0aV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2VuZF9vZl9wZGEKK3sKKwlVSU5UMTYJY3JjOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9lbmRfb2ZfcGRhX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyZWMKK3sKKwlVSU5UMTYJbGVuOyAvKiBpbiB3b3JkcyAqLworCVVJTlQxNgljb2RlOworCXVuaW9uIHBkciB7CisJaGZhMzg0eF9wZHJfcGNiX3BhcnRudW1fdAlwY2JfcGFydG51bTsKKwloZmEzODR4X3Bkcl9wY2JfdHJhY2VudW1fdAlwY2JfdHJhY2VudW07CisJaGZhMzg0eF9wZHJfbmljX3NlcmlhbF90CW5pY19zZXJpYWw7CisJaGZhMzg0eF9wZHJfbWtrX21lYXN1cmVtZW50c190CW1ra19tZWFzdXJlbWVudHM7CisJaGZhMzg0eF9wZHJfbmljX3JhbXNpemVfdAluaWNfcmFtc2l6ZTsKKwloZmEzODR4X3Bkcl9tZmlzdXByYW5nZV90CW1maXN1cHJhbmdlOworCWhmYTM4NHhfcGRyX2NmaXN1cHJhbmdlX3QJY2Zpc3VwcmFuZ2U7CisJaGZhMzg0eF9wZHJfbmljaWRfdAkJbmljaWQ7CisJaGZhMzg0eF9wZHJfcmVmZGFjX21lYXN1cmVtZW50c190CXJlZmRhY19tZWFzdXJlbWVudHM7CisJaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzX3QJdmdkYWNfbWVhc3VyZW1lbnRzOworCWhmYTM4NHhfcGRyX2xldmVsX2NvbXBjX21lYXN1cmVtZW50c190CWxldmVsX2NvbXBjX21lYXN1cmVtZW50czsKKwloZmEzODR4X3Bkcl9tYWNfYWRkcmVzc190CW1hY19hZGRyZXNzOworCWhmYTM4NHhfcGRyX21ra19jYWxsbmFtZV90CW1ra19jYWxsbmFtZTsKKwloZmEzODR4X3Bkcl9yZWdkb21haW5fdAkJcmVnZG9tYWluOworCWhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbF90CWFsbG93ZWRfY2hhbm5lbDsKKwloZmEzODR4X3Bkcl9kZWZhdWx0X2NoYW5uZWxfdAlkZWZhdWx0X2NoYW5uZWw7CisJaGZhMzg0eF9wZHJfcHJpdmFjeV9vcHRpb25fdAlwcml2YWN5X29wdGlvbjsKKwloZmEzODR4X3Bkcl90ZW1wdHlwZV90CQl0ZW1wdHlwZTsKKwloZmEzODR4X3Bkcl9yZWZkYWNfc2V0dXBfdAlyZWZkYWNfc2V0dXA7CisJaGZhMzg0eF9wZHJfdmdkYWNfc2V0dXBfdAl2Z2RhY19zZXR1cDsKKwloZmEzODR4X3Bkcl9sZXZlbF9jb21wX3NldHVwX3QJbGV2ZWxfY29tcF9zZXR1cDsKKwloZmEzODR4X3Bkcl90cmltZGFjX3NldHVwX3QJdHJpbWRhY19zZXR1cDsKKwloZmEzODR4X3Bkcl9pZnJfc2V0dGluZ190CWlmcl9zZXR0aW5nOworCWhmYTM4NHhfcGRyX3Jmcl9zZXR0aW5nX3QJcmZyX3NldHRpbmc7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZV90CWhmYTM4NjFfYmFzZWxpbmU7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9zaGFkb3dfdAloZmEzODYxX3NoYWRvdzsKKwloZmEzODR4X3Bkcl9oZmEzODYxX2lmcmZfdAloZmEzODYxX2lmcmY7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwX3QJaGZhMzg2MV9jaGNhbHNwOworCWhmYTM4NHhfcGRyX2hmYTM4NjFfY2hjYWxpX3QJaGZhMzg2MV9jaGNhbGk7CisJaGZhMzg0eF9wZHJfbmljX2NvbmZpZ190CW5pY19jb25maWc7CisJaGZhMzg0eF9oZm9fZGVsYXlfdCAgICAgICAgICAgICBoZm9fZGVsYXk7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RzcF90CWhmYTM4NjFfbWFuZl90ZXN0c3A7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpX3QJaGZhMzg2MV9tYW5mX3Rlc3RpOworCWhmYTM4NHhfcGRyX2VuZF9vZl9wZGFfdAllbmRfb2ZfcGRhOworCisJfSBkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3BkcmVjX3Q7CisKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLSAgTUFDIHN0YXRlIHN0cnVjdHVyZSwgYXJndW1lbnQgdG8gYWxsIGZ1bmN0aW9ucyAtLQorLS0tICBBbHNvLCBhIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydCB0eXBlcyAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9zdGF0dXNyZXN1bHQKK3sKKwlVSU5UMTYJc3RhdHVzOworCVVJTlQxNglyZXNwMDsKKwlVSU5UMTYJcmVzcDE7CisJVUlOVDE2CXJlc3AyOworfSBoZmEzODR4X2NtZHJlc3VsdF90OworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorCisvKiBVU0IgQ29udHJvbCBFeGNoYW5nZSAoQ1RMWCk6CisgKiAgQSBxdWV1ZSBvZiB0aGUgc3RydWN0dXJlIGJlbG93IGlzIG1haW50YWluZWQgZm9yIGFsbCBvZiB0aGUKKyAqICBSZXF1ZXN0L1Jlc3BvbnNlIHR5cGUgVVNCIHBhY2tldHMgc3VwcG9ydGVkIGJ5IFByaXNtMi4KKyAqLworLyogVGhlIGZvbGxvd2luZyBoZmEzODR4Xyogc3RydWN0dXJlcyBhcmUgYXJndW1lbnRzIHRvCisgKiB0aGUgdXNlcmNiKCkgZm9yIHRoZSBkaWZmZXJlbnQgQ1RMWCB0eXBlcy4KKyAqLwordHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd3JpZHJlc3VsdF90OwordHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd21lbXJlc3VsdF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JyaWRyZXN1bHQKK3sKKwlVSU5UMTYJCXJpZDsKKwljb25zdCB2b2lkCSpyaWRkYXRhOworCVVJTlQJCXJpZGRhdGFfbGVuOworfSBoZmEzODR4X3JyaWRyZXN1bHRfdDsKKworZW51bSBjdGx4X3N0YXRlIHsKKwlDVExYX1NUQVJUID0gMCwJLyogU3RhcnQgc3RhdGUsIG5vdCBxdWV1ZWQgKi8KKworCUNUTFhfQ09NUExFVEUsCS8qIENUTFggc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCAqLworCUNUTFhfUkVRX0ZBSUxFRCwJLyogT1VUIFVSQiBjb21wbGV0ZWQgdy8gZXJyb3IgKi8KKworCUNUTFhfUEVORElORywJCS8qIFF1ZXVlZCwgZGF0YSB2YWxpZCAqLworCUNUTFhfUkVRX1NVQk1JVFRFRCwJLyogT1VUIFVSQiBzdWJtaXR0ZWQgKi8KKwlDVExYX1JFUV9DT01QTEVURSwJLyogT1VUIFVSQiBjb21wbGV0ZSAqLworCUNUTFhfUkVTUF9DT01QTEVURQkvKiBJTiBVUkIgcmVjZWl2ZWQgKi8KK307Cit0eXBlZGVmIGVudW0gY3RseF9zdGF0ZSAgQ1RMWF9TVEFURTsKKworc3RydWN0IGhmYTM4NHhfdXNiY3RseDsKK3N0cnVjdCBoZmEzODR4OworCit0eXBlZGVmIHZvaWQgKCpjdGx4X2NtZGNiX3QpKCBzdHJ1Y3QgaGZhMzg0eCosIGNvbnN0IHN0cnVjdCBoZmEzODR4X3VzYmN0bHgqICk7CisKK3R5cGVkZWYgdm9pZCAoKmN0bHhfdXNlcmNiX3QpKAorCXN0cnVjdCBoZmEzODR4CSpodywKKwl2b2lkCQkqY3RseHJlc3VsdCwKKwl2b2lkCQkqdXNlcmNiX2RhdGEpOworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYmN0bHgKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisKKwlzaXplX3QJCQlvdXRidWZzaXplOworCWhmYTM4NHhfdXNib3V0X3QJb3V0YnVmOwkJLyogcGt0IGJ1ZiBmb3IgT1VUICovCisJaGZhMzg0eF91c2Jpbl90CQlpbmJ1ZjsJCS8qIHBrdCBidWYgZm9yIElOKGEgY29weSkgKi8KKworCUNUTFhfU1RBVEUJCXN0YXRlOwkJLyogVHJhY2tzIHJ1bm5pbmcgc3RhdGUgKi8KKworCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CisJdm9sYXRpbGUgaW50CQlyZWFwYWJsZTsJLyogRm9vZCBmb3IgdGhlIHJlYXBlciB0YXNrICovCisKKwljdGx4X2NtZGNiX3QJCWNtZGNiOwkJLyogQXN5bmMgY29tbWFuZCBjYWxsYmFjayAqLworCWN0bHhfdXNlcmNiX3QJCXVzZXJjYjsJCS8qIEFzeW5jIHVzZXIgY2FsbGJhY2ssICovCisJdm9pZAkJCSp1c2VyY2JfZGF0YTsJLyogIGF0IENUTFggY29tcGxldGlvbiAgKi8KKworCWludAkJCXZhcmlhbnQ7CS8qIElkZW50aWZpZXMgY21kIHZhcmlhbnQgKi8KK30gaGZhMzg0eF91c2JjdGx4X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiY3RseHEKK3sKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbXBsZXRpbmc7CisJc3RydWN0IGxpc3RfaGVhZAlyZWFwYWJsZTsKK30gaGZhMzg0eF91c2JjdGx4cV90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGhmYTQ4NHhfbWV0YWNtZAoreworCVVJTlQxNgkJY21kOworCisJVUlOVDE2ICAgICAgICAgIHBhcm0wOworCVVJTlQxNiAgICAgICAgICBwYXJtMTsKKwlVSU5UMTYgICAgICAgICAgcGFybTI7CisKKyNpZiAwIC8vWFhYIGNtZCBpcnEgc3R1ZmYKKwlVSU5UMTYgICAgICAgICAgYnVsa2lkOyAgICAgICAgIC8qIHdoYXQgUklEL0ZJRCB0byBjb3B5IGRvd24uICovCisJaW50ICAgICAgICAgICAgIGJ1bGtsZW47ICAgICAgICAvKiBob3cgbXVjaCB0byBjb3B5IGZyb20gQkFQICovCisgICAgICAgIGNoYXIgICAgICAgICAgICAqYnVsa2RhdGE7ICAgICAgLyogQW5kIHRvIHdoZXJlPyAqLworI2VuZGlmCisKKwloZmEzODR4X2NtZHJlc3VsdF90IHJlc3VsdDsKK30gaGZhMzg0eF9tZXRhY21kX3Q7CisKKyNkZWZpbmUJTUFYX1BSSVNNMl9HUlBfQUREUgkxNgorI2RlZmluZQlNQVhfR1JQX0FERFIJCTMyCisjZGVmaW5lIFdMQU5fQ09NTUVOVF9NQVgJODAgIC8qIE1heC4gbGVuZ3RoIG9mIHVzZXIgY29tbWVudCBzdHJpbmcuICovCisKKyNkZWZpbmUgTU1fU0FUX1BDRgkJKEJJVDE0KQorI2RlZmluZSBNTV9HQ1NEX1BDRgkJKEJJVDE1KQorI2RlZmluZSBNTV9HQ1NEX1BDRl9FQgkJKEJJVDE0IHwgQklUMTUpCisKKyNkZWZpbmUgV0xBTl9TVEFURV9TVE9QUEVECTAgICAvKiBOZXR3b3JrIGlzIG5vdCBhY3RpdmUuICovCisjZGVmaW5lIFdMQU5fU1RBVEVfU1RBUlRFRAkxICAgLyogTmV0d29yayBoYXMgYmVlbiBzdGFydGVkLiAqLworCisjZGVmaW5lIFdMQU5fQVVUSF9NQVggICAgICAgICAgIDYwICAvKiBNYXguICMgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfTUFYCQk2MCAgLyogTWF4LiAjIG9mIHN0YXRpb25zIGluIGFuIGFjY2VzcyBsaXN0LiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19OT05FCTAgICAvKiBObyBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMCQkxICAgLyogQWxsIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTExPVwkyICAgLyogQXV0aGVudGljYXRlIG9ubHkgImFsbG93ZWQiIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19ERU5ZCTMgICAvKiBEbyBub3QgYXV0aGVudGljYXRlICJkZW5pZWQiIHN0YXRpb25zLiAqLworCisvKiBYWFggVGhlc2UgYXJlIGdvaW5nIGF3YXkgQVNBUCAqLwordHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2F1dGhsaXN0Cit7CisJVUlOVAljbnQ7CisJVUlOVDgJYWRkcltXTEFOX0FVVEhfTUFYXVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhc3NvY1tXTEFOX0FVVEhfTUFYXTsKK30gcHJpc20yc3RhX2F1dGhsaXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHByaXNtMnN0YV9hY2Nlc3NsaXN0Cit7CisJVUlOVAltb2RpZnk7CisJVUlOVAljbnQ7CisJVUlOVDgJYWRkcltXTEFOX0FDQ0VTU19NQVhdW1dMQU5fQUREUl9MRU5dOworCVVJTlQJY250MTsKKwlVSU5UOAlhZGRyMVtXTEFOX0FDQ0VTU19NQVhdW1dMQU5fQUREUl9MRU5dOworfSBwcmlzbTJzdGFfYWNjZXNzbGlzdF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4Cit7CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCS8qIFJlc291cmNlIGNvbmZpZyAqLworCVVJTlQzMgkJCWlvYmFzZTsKKwljaGFyCQkJX19pb21lbSAqbWVtYmFzZTsKKwlVSU5UMzIJCQlpcnE7CisjZWxzZQorCS8qIFVTQiBzdXBwb3J0IGRhdGEgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiOworCXN0cnVjdCB1cmIJCXJ4X3VyYjsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnJ4X3VyYl9za2I7CisJc3RydWN0IHVyYgkJdHhfdXJiOworCXN0cnVjdCB1cmIJCWN0bHhfdXJiOworCWhmYTM4NHhfdXNib3V0X3QJdHhidWZmOworCWhmYTM4NHhfdXNiY3RseHFfdAljdGx4cTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyZXF0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyZXNwdGltZXI7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aHJvdHRsZTsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlyZWFwZXJfYmg7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWNvbXBsZXRpb25fYmg7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdXNiX3dvcms7CisKKwl1bnNpZ25lZCBsb25nCQl1c2JfZmxhZ3M7CisjZGVmaW5lIFRIUk9UVExFX1JYCTAKKyNkZWZpbmUgVEhST1RUTEVfVFgJMQorI2RlZmluZSBXT1JLX1JYX0hBTFQJMgorI2RlZmluZSBXT1JLX1RYX0hBTFQJMworI2RlZmluZSBXT1JLX1JYX1JFU1VNRQk0CisjZGVmaW5lIFdPUktfVFhfUkVTVU1FCTUKKworCXVuc2lnbmVkIHNob3J0CQlyZXFfdGltZXJfZG9uZToxOworCXVuc2lnbmVkIHNob3J0CQlyZXNwX3RpbWVyX2RvbmU6MTsKKworCWludCAgICAgICAgICAgICAgICAgICAgIGVuZHBfaW47CisJaW50ICAgICAgICAgICAgICAgICAgICAgZW5kcF9vdXQ7CisjZW5kaWYgLyogIVVTQiAqLworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldjsKKyNlbHNlCisJZGV2X2xpbmtfdAkqbGluazsKKyNlbmRpZgorCWRldl9ub2RlX3QJbm9kZTsKKyNlbmRpZgorCisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfZmNzOworCWludCAgICAgICAgICAgICAgICAgICAgIHNuaWZmX2NoYW5uZWw7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfdHJ1bmNhdGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZoZHI7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjbWRxOwkgICAgICAgIC8qIHdhaXQgcXVldWUgaXRzZWxmICovCisKKwkvKiBDb250cm9sbGVyIHN0YXRlICovCisJVUlOVDMyCQlzdGF0ZTsKKwlVSU5UMzIJCWlzYXA7CisJVUlOVDgJCXBvcnRfZW5hYmxlZFtIRkEzODR4X05VTVBPUlRTX01BWF07CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCVVJTlQJCWF1eGVuOworCVVJTlQgICAgICAgICAgICBpc3JhbTE2OworI2VuZGlmIC8qICFVU0IgKi8KKworCS8qIERvd25sb2FkIHN1cHBvcnQgKi8KKwlVSU5UCQkJCWRsc3RhdGU7CisJaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90CWJ1ZmluZm87CisJVUlOVDE2CQkJCWRsdGltZW91dDsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKwlzcGlubG9ja190CWNtZGxvY2s7CisJdm9sYXRpbGUgaW50ICAgIGNtZGZsYWc7ICAgICAgICAvKiB3YWl0IHF1ZXVlIGZsYWcgKi8KKwloZmEzODR4X21ldGFjbWRfdCAqY21kZGF0YTsgICAgICAvKiBmb3Igb3VyIGFzeW5jIGNhbGxiYWNrICovCisKKwkvKiBCQVAgc3VwcG9ydCAqLworCXNwaW5sb2NrX3QJYmFwbG9jazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgICBiYXBfdGFza2xldDsKKworCS8qIE1BQyBidWZmZXIgaWRzICovCisgICAgICAgIFVJTlQxNiAgICAgICAgICB0eGZpZF9oZWFkOworICAgICAgICBVSU5UMTYgICAgICAgICAgdHhmaWRfdGFpbDsKKyAgICAgICAgVUlOVCAgICAgICAgICAgIHR4ZmlkX047CisgICAgICAgIFVJTlQxNiAgICAgICAgICB0eGZpZF9xdWV1ZVtIRkEzODR4X0RSVlJfRklEU1RBQ0tMRU5fTUFYXTsKKwlVSU5UMTYJCQlpbmZvZmlkOworCXN0cnVjdCBzZW1hcGhvcmUJaW5mb2ZpZF9zZW07CisjZW5kaWYgLyogIVVTQiAqLworCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZmxhZzsgICAgLyogdG8gc2lnbmFsIHNjYW4gY29tbGV0ZSAqLworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9hcDsgICAgICAgIC8qIGFyZSB3ZSBqb2luZWQgdG8gYSBzcGVjaWZpYyBhcCAqLworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9yZXRyaWVzOyAgIC8qIG51bWJlciBvZiBqb2luIHJldHJpZXMgdGlsbCB3ZSBmYWlsICovCisJaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QgICBqb2lucmVxOyAgICAgICAgLyogam9pbiByZXF1ZXN0IHNhdmVkIGRhdGEgKi8KKworCXdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2OworCS8qIFRpbWVyIHRvIGFsbG93IGZvciB0aGUgZGVmZXJyZWQgcHJvY2Vzc2luZyBvZiBsaW5rc3RhdHVzIG1lc3NhZ2VzICovCisJc3RydWN0IHdvcmtfc3RydWN0IAlsaW5rX2JoOworCisgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGNvbW1zcXVhbF9iaDsKKwloZmEzODR4X2NvbW1zcXVhbGl0eV90ICBxdWFsOworCXN0cnVjdCB0aW1lcl9saXN0CWNvbW1zcXVhbF90aW1lcjsKKworCVVJTlQxNiBsaW5rX3N0YXR1czsKKwlVSU5UMTYgbGlua19zdGF0dXNfbmV3OworCXN0cnVjdCBza19idWZmX2hlYWQgICAgICAgIGF1dGhxOworCisJLyogQW5kIGhlcmUgd2UgaGF2ZSBzdHVmZiB0aGF0IHVzZWQgdG8gYmUgaW4gcHJpdiAqLworCisJLyogU3RhdGUgdmFyaWFibGVzICovCisJVUlOVAkJcHJlc25pZmZfcG9ydF90eXBlOworCVVJTlQxNgkJcHJlc25pZmZfd2VwZmxhZ3M7CisJVUlOVDMyCQlkb3QxMV9kZXNpcmVkX2Jzc190eXBlOworCWludAkJYXA7CS8qIEFQIGZsYWc6IDAgLSBTdGF0aW9uLCAxIC0gQWNjZXNzIFBvaW50LiAqLworCisJaW50ICAgICAgICAgICAgIGRibWFkanVzdDsKKworCS8qIEdyb3VwIEFkZHJlc3NlcyAtIHJpZ2h0IG5vdywgdGhlcmUgYXJlIHVwIHRvIGEgdG90YWwKKwlvZiBNQVhfR1JQX0FERFIgZ3JvdXAgYWRkcmVzc2VzICovCisJVUlOVDgJCWRvdDExX2dycF9hZGRyW01BWF9HUlBfQUREUl1bV0xBTl9BRERSX0xFTl07CisJVUlOVAkJZG90MTFfZ3JwY250OworCisJLyogQ29tcG9uZW50IElkZW50aXRpZXMgKi8KKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X25pYzsKKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X3ByaV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X3N0YV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X2FwX2Z3OworCVVJTlQxNgkJCW1tX21vZHM7CisKKwkvKiBTdXBwbGllciBjb21wYXRpYmlsaXR5IHJhbmdlcyAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX21maTsKKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9jZmk7CisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfcHJpOworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX3N0YTsKKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9hcDsKKworCS8qIEFjdG9yIGNvbXBhdGliaWxpdHkgcmFuZ2VzICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfcHJpX2NmaTsgLyogcHJpIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X3N0YV9jZmk7IC8qIHN0YSBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX2FjdF9zdGFfbWZpOyAvKiBzdGEgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X2FwX2NmaTsgIC8qIGFwIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X2FwX21maTsgIC8qIGFwIGYvdyB0byBtb2RlbSBpbnRlcmZhY2UgKi8KKworCVVJTlQzMgkJCXBzdXNlcmNvdW50OyAgLyogUG93ZXIgc2F2ZSB1c2VyIGNvdW50LiAqLworCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90CXRhbGxpZXM7ICAgICAgLyogQ29tbXVuaWNhdGlvbiB0YWxsaWVzLiAqLworCVVJTlQ4CQkJY29tbWVudFtXTEFOX0NPTU1FTlRfTUFYKzFdOyAvKiBVc2VyIGNvbW1lbnQgKi8KKworCS8qIENoYW5uZWwgSW5mbyByZXF1ZXN0IHJlc3VsdHMgKEFQIG9ubHkpICovCisJc3RydWN0IHsKKwkJYXRvbWljX3QJCWRvbmU7CisJCVVJTlQ4CQkJY291bnQ7CisJCWhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QJcmVzdWx0czsKKwl9IGNoYW5uZWxfaW5mbzsKKworCWhmYTM4NHhfSW5mRnJhbWVfdCAgICAgICpzY2FucmVzdWx0czsKKworCisgICAgICAgIHByaXNtMnN0YV9hdXRobGlzdF90CWF1dGhsaXN0OyAgICAgLyogQXV0aGVudGljYXRlZCBzdGF0aW9uIGxpc3QuICovCisJVUlOVAkJCWFjY2Vzc21vZGU7ICAgLyogQWNjZXNzIG1vZGUuICovCisgICAgICAgIHByaXNtMnN0YV9hY2Nlc3NsaXN0X3QJYWxsb3c7ICAgICAgICAvKiBBbGxvd2VkIHN0YXRpb24gbGlzdC4gKi8KKyAgICAgICAgcHJpc20yc3RhX2FjY2Vzc2xpc3RfdAlkZW55OyAgICAgICAgIC8qIERlbmllZCBzdGF0aW9uIGxpc3QuICovCisKK30gaGZhMzg0eF90OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0gRnVuY3Rpb24gRGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQordm9pZAoraGZhMzg0eF9jcmVhdGUoCisJaGZhMzg0eF90ICpodywKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKTsKKyNlbHNlCit2b2lkCitoZmEzODR4X2NyZWF0ZSgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQgaXJxLAorCVVJTlQzMiBpb2Jhc2UsCisJVUlOVDggX19pb21lbSAqbWVtYmFzZSk7CisjZW5kaWYKKwordm9pZCBoZmEzODR4X2Rlc3Ryb3koaGZhMzg0eF90ICpodyk7CisKK2lycXJldHVybl90CitoZmEzODR4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQgUFRfUkVHUyk7CitpbnQKK2hmYTM4NHhfY29yZXJlc2V0KCBoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9jaGluZm9yZXN1bHRzKCBoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpOworaW50CitoZmEzODR4X2RydnJfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KTsKK2ludAoraGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgZGFkZHIsIHZvaWQqIGJ1ZiwgVUlOVDMyIGxlbik7CitpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9kcnZyX2hhbmRvdmVyKCBoZmEzODR4X3QgKmh3LCBVSU5UOCAqYWRkcik7CitpbnQKK2hmYTM4NHhfZHJ2cl9ob3N0c2NhbnJlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfbG93X2xldmVsKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpOworaW50CitoZmEzODR4X2RydnJfbW1pX3JlYWQoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHJlc3MsIFVJTlQzMiAqcmVzdWx0KTsKK2ludAoraGZhMzg0eF9kcnZyX21taV93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkcmVzcywgVUlOVDMyIGRhdGEpOworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBleGVhZGRyKTsKK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgZGFkZHIsIHZvaWQqIGJ1ZiwgVUlOVDMyIGxlbik7CitpbnQKK2hmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pOworaW50CitoZmEzODR4X2RydnJfc2NhbnJlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworCitpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICp2YWwpCit7CisJaW50CQlyZXN1bHQgPSAwOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIHJpZCwgdmFsLCBzaXplb2YoVUlOVDE2KSk7CisJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJKigoVUlOVDE2Kil2YWwpID0gaGZhMzg0eDJob3N0XzE2KCooKFVJTlQxNiopdmFsKSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfZ2V0Y29uZmlnMzIoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqdmFsKQoreworCWludAkJcmVzdWx0ID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIHJpZCwgdmFsLCBzaXplb2YoVUlOVDMyKSk7CisJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJKigoVUlOVDMyKil2YWwpID0gaGZhMzg0eDJob3N0XzMyKCooKFVJTlQzMiopdmFsKSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMTYgdmFsKQoreworCVVJTlQxNiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8xNih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnMzIoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgVUlOVDMyIHZhbCkKK3sKKwlVSU5UMzIgdmFsdWUgPSBob3N0MmhmYTM4NHhfMzIodmFsKTsKKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgcmlkLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworfQorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQoraW50CitoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAgICAgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDE2ICAgICAgICByaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgKnVzZXJjYl9kYXRhKTsKKworaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgcmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDE2IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKmJ1ZiwgVUlOVDE2IGxlbiwKKwkJCSAgICAgdm9pZCAqcHRyMSwgdm9pZCAqcHRyMikKK3sKKyAgICAgICAgICh2b2lkKXB0cjE7CisgICAgICAgICAodm9pZClwdHIyOworICAgICAgICAgcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgYnVmLCBsZW4pOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgVUlOVDE2IHZhbCkKK3sKKwlVSU5UMTYgdmFsdWUgPSBob3N0MmhmYTM4NHhfMTYodmFsKTsKKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhodywgcmlkLCAmdmFsdWUsIHNpemVvZih2YWx1ZSksCisJCQkJCSAgICBOVUxMICwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnMzJfYXN5bmMoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgVUlOVDMyIHZhbCkKK3sKKwlVSU5UMzIgdmFsdWUgPSBob3N0MmhmYTM4NHhfMzIodmFsKTsKKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhodywgcmlkLCAmdmFsdWUsIHNpemVvZih2YWx1ZSksCisJCQkJCSAgICBOVUxMICwgTlVMTCk7Cit9CisKKworaW50CitoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwordm9pZAoraGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKK2ludAoraGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KTsKK2ludAoraGZhMzg0eF9jbWRfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCk7CitpbnQKK2hmYTM4NHhfY21kX2RpYWdub3NlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2NtZF9hbGxvY2F0ZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9jbWRfdHJhbnNtaXQoaGZhMzg0eF90ICpodywgVUlOVDE2IHJlY2xhaW0sIFVJTlQxNiBxb3MsIFVJTlQxNiBmaWQpOworaW50CitoZmEzODR4X2NtZF9jbGVhcnBlcnNpc3QoaGZhMzg0eF90ICpodywgVUlOVDE2IGZpZCk7CitpbnQKK2hmYTM4NHhfY21kX25vdGlmeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IGZpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9jbWRfaW5xdWlyZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgZmlkKTsKK2ludAoraGZhMzg0eF9jbWRfYWNjZXNzKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB3cml0ZSwgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9jbWRfbW9uaXRvcihoZmEzODR4X3QgKmh3LCBVSU5UMTYgZW5hYmxlKTsKK2ludAoraGZhMzg0eF9jbWRfZG93bmxvYWQoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMTYgbW9kZSwKKwlVSU5UMTYgbG93YWRkciwKKwlVSU5UMTYgaGlnaGFkZHIsCisJVUlOVDE2IGNvZGVsZW4pOworaW50CitoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIGludCBmb3JjZSk7CitpbnQKK2hmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2NvcHlfZnJvbV9iYXAoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMTYJYmFwLAorCVVJTlQxNglpZCwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7CitpbnQKK2hmYTM4NHhfY29weV90b19iYXAoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMTYJYmFwLAorCVVJTlQxNglpZCwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7Cit2b2lkCitoZmEzODR4X2NvcHlfZnJvbV9hdXgoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMzIJY2FyZGFkZHIsCisJVUlOVDMyCWF1eGN0bCwKKwl2b2lkCSpidWYsCisJVUlOVAlsZW4pOwordm9pZAoraGZhMzg0eF9jb3B5X3RvX2F1eCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQzMgljYXJkYWRkciwKKwlVSU5UMzIJYXV4Y3RsLAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisKKy8qCisgICBIRkEzODR4IGlzIGEgTElUVExFIEVORElBTiBwYXJ0LgorCisgICB0aGUgZ2V0L3NldHJlZyBmdW5jdGlvbnMgaW1wbGljaXRseSBieXRlLXN3YXAgdGhlIGRhdGEgdG8gTEUuCisgICB0aGUgX25vc3dhcCB2YXJpYW50cyBkbyBub3QgcGVyZm9ybSBhIGJ5dGUtc3dhcCBvbiB0aGUgZGF0YS4KKyovCisKK3N0YXRpYyBpbmxpbmUgVUlOVDE2CitfX2hmYTM4NHhfZ2V0cmVnKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKTsKKworc3RhdGljIGlubGluZSB2b2lkCitfX2hmYTM4NHhfc2V0cmVnKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB2YWwsIFVJTlQgcmVnKTsKKworc3RhdGljIGlubGluZSBVSU5UMTYKK19faGZhMzg0eF9nZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKTsKKworc3RhdGljIGlubGluZSB2b2lkCitfX2hmYTM4NHhfc2V0cmVnX25vc3dhcChoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsLCBVSU5UIHJlZyk7CisKKyNpZmRlZiBSRVZFUlNFX0VORElBTgorI2RlZmluZSBoZmEzODR4X2dldHJlZyBfX2hmYTM4NHhfZ2V0cmVnX25vc3dhcAorI2RlZmluZSBoZmEzODR4X3NldHJlZyBfX2hmYTM4NHhfc2V0cmVnX25vc3dhcAorI2RlZmluZSBoZmEzODR4X2dldHJlZ19ub3N3YXAgX19oZmEzODR4X2dldHJlZworI2RlZmluZSBoZmEzODR4X3NldHJlZ19ub3N3YXAgX19oZmEzODR4X3NldHJlZworI2Vsc2UKKyNkZWZpbmUgaGZhMzg0eF9nZXRyZWcgX19oZmEzODR4X2dldHJlZworI2RlZmluZSBoZmEzODR4X3NldHJlZyBfX2hmYTM4NHhfc2V0cmVnCisjZGVmaW5lIGhmYTM4NHhfZ2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfZ2V0cmVnX25vc3dhcAorI2RlZmluZSBoZmEzODR4X3NldHJlZ19ub3N3YXAgX19oZmEzODR4X3NldHJlZ19ub3N3YXAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9nZXRyZWcKKyoKKyogUmV0cmlldmUgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqIE5PVEU6IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgaW4gSE9TVCBPUkRFUiEhISEhIQorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgTUFDIHBhcnQgc3RydWN0dXJlCisqICAgICAgIHJlZyAgICAgICAgUmVnaXN0ZXIgaWRlbnRpZmllciAob2Zmc2V0IGZvciBJL08gYmFzZWQgaS9mKQorKgorKiBSZXR1cm5zOgorKiAgICAgICBWYWx1ZSBmcm9tIHRoZSByZWdpc3RlciBpbiBIT1NUIE9SREVSISEhIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIFVJTlQxNgorX19oZmEzODR4X2dldHJlZyhoZmEzODR4X3QgKmh3LCBVSU5UIHJlZykKK3sKKy8qCXByaW50ayhLRVJOX0RFQlVHICJSZWFkaW5nIGZyb20gMHglMHhcbiIsIGh3LT5tZW1iYXNlICsgcmVnKTsgKi8KKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCXJldHVybiB3bGFuX2lud19sZTE2X3RvX2NwdShody0+aW9iYXNlK3JlZyk7CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJcmV0dXJuIF9fbGUxNl90b19jcHUocmVhZHcoaHctPm1lbWJhc2UgKyByZWcpKTsKKyNlbmRpZgorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9zZXRyZWcKKyoKKyogU2V0IHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlIE1BQyByZWdpc3RlcnMuICBEb25lIGhlcmUKKyogYmVjYXVzZSBkaWZmZXJlbnQgUFJJU00yIE1BQyBwYXJ0cyB1c2UgZGlmZmVyZW50IGJ1c2VzIGFuZCBzdWNoLgorKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIHZhbHVlIGlzIGluIEhPU1QgT1JERVIhISEhISEKKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBodwlNQUMgcGFydCBzdHJ1Y3R1cmUKKyoJdmFsCVZhbHVlLCBpbiBIT1NUIE9SREVSISEsIHRvIHB1dCBpbiB0aGUgcmVnaXN0ZXIKKyogICAgICAgcmVnCVJlZ2lzdGVyIGlkZW50aWZpZXIgKG9mZnNldCBmb3IgSS9PIGJhc2VkIGkvZikKKyoKKyogUmV0dXJuczoKKyogICAgICAgTm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHZhbCwgVUlOVCByZWcpCit7CisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSkKKwl3bGFuX291dHdfY3B1X3RvX2xlMTYoIHZhbCwgaHctPmlvYmFzZSArIHJlZyk7CisJcmV0dXJuOworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCXdyaXRldyhfX2NwdV90b19sZTE2KHZhbCksIGh3LT5tZW1iYXNlICsgcmVnKTsKKwlyZXR1cm47CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9nZXRyZWdfbm9zd2FwCisqCisqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlIE1BQyByZWdpc3RlcnMuICBEb25lIGhlcmUKKyogYmVjYXVzZSBkaWZmZXJlbnQgUFJJU00yIE1BQyBwYXJ0cyB1c2UgZGlmZmVyZW50IGJ1c2VzIGFuZCBzdWNoLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgTUFDIHBhcnQgc3RydWN0dXJlCisqICAgICAgIHJlZyAgICAgICAgUmVnaXN0ZXIgaWRlbnRpZmllciAob2Zmc2V0IGZvciBJL08gYmFzZWQgaS9mKQorKgorKiBSZXR1cm5zOgorKiAgICAgICBWYWx1ZSBmcm9tIHRoZSByZWdpc3Rlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlubGluZSBVSU5UMTYKK19faGZhMzg0eF9nZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKQoreworI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkpCisJcmV0dXJuIHdsYW5faW53KGh3LT5pb2Jhc2UrcmVnKTsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwlyZXR1cm4gcmVhZHcoaHctPm1lbWJhc2UgKyByZWcpOworI2VuZGlmCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfc2V0cmVnX25vc3dhcAorKgorKiBTZXQgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcJTUFDIHBhcnQgc3RydWN0dXJlCisqCXZhbAlWYWx1ZSB0byBwdXQgaW4gdGhlIHJlZ2lzdGVyCisqICAgICAgIHJlZwlSZWdpc3RlciBpZGVudGlmaWVyIChvZmZzZXQgZm9yIEkvTyBiYXNlZCBpL2YpCisqCisqIFJldHVybnM6CisqICAgICAgIE5vdGhpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlubGluZSB2b2lkCitfX2hmYTM4NHhfc2V0cmVnX25vc3dhcChoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsLCBVSU5UIHJlZykKK3sKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCXdsYW5fb3V0dyggdmFsLCBody0+aW9iYXNlICsgcmVnKTsKKwlyZXR1cm47CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJd3JpdGV3KHZhbCwgaHctPm1lbWJhc2UgKyByZWcpOworCXJldHVybjsKKyNlbmRpZgorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZmEzODR4X2V2ZW50c19hbGwoaGZhMzg0eF90ICpodykKK3sKKwloZmEzODR4X3NldHJlZyhodywKKwkJICAgICAgIEhGQTM4NHhfSU5UX05PUk1BTAorI2lmZGVmIENNRF9JUlEKKwkJICAgICAgIHwgSEZBMzg0eF9JTlRFTl9DTURfU0VUKDEpCisjZW5kaWYKKwkJICAgICAgICwKKwkJICAgICAgIEhGQTM4NHhfSU5URU4pOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZmEzODR4X2V2ZW50c19ub2JhcChoZmEzODR4X3QgKmh3KQoreworCWhmYTM4NHhfc2V0cmVnKGh3LAorCQkgICAgICAgIChIRkEzODR4X0lOVF9OT1JNQUwgJiB+SEZBMzg0eF9JTlRfQkFQX09QKQorI2lmZGVmIENNRF9JUlEKKwkJICAgICAgIHwgSEZBMzg0eF9JTlRFTl9DTURfU0VUKDEpCisjZW5kaWYKKwkJICAgICAgICwKKwkJICAgICAgIEhGQTM4NHhfSU5URU4pOworCit9CisKKyNlbmRpZiAvKiBXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQiAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmICAvKiBfSEZBMzg0eF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBjNTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwpAQCAtMCwwICsxLDUwMjcgQEAKKy8qIHNyYy9wcmlzbTIvZHJpdmVyL2hmYTM4NHhfdXNiLmMKKyoKKyogRnVuY3Rpb25zIHRoYXQgdGFsayB0byB0aGUgVVNCIHZhcmlhbnRvZiB0aGUgSW50ZXJzaWwgaGZhMzg0eCBNQUMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGltcGxlbWVudHMgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgcHJpc20yL2hmYTM4NHgKKyogODAyLjExIE1BQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgaG9zdCBpbnRlcmZhY2UuCisqCisqIFRoZSBmdW5jdGlvbnMgY2FuIGJlIGNvbnNpZGVyZWQgdG8gcmVwcmVzZW50IHNldmVyYWwgbGV2ZWxzIG9mCisqIGFic3RyYWN0aW9uLiAgVGhlIGxvd2VzdCBsZXZlbCBmdW5jdGlvbnMgYXJlIHNpbXBseSBDLWNhbGxhYmxlIHdyYXBwZXJzCisqIGFyb3VuZCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGUgbmV4dCBoaWdoZXIgbGV2ZWwgcmVwcmVzZW50cyBDLWNhbGxhYmxlCisqIHByaXNtMiBBUEkgZnVuY3Rpb25zIHRoYXQgbWF0Y2ggdGhlIEludGVyc2lsIGRvY3VtZW50YXRpb24gYXMgY2xvc2VseQorKiBhcyBpcyByZWFzb25hYmxlLiAgVGhlIG5leHQgaGlnaGVyIGxheWVyIGltcGxlbWVudHMgY29tbW9uIHNlcXVlbmNlcworKiBvZiBpbnZva2F0aW9ucyBvZiB0aGUgQVBJIGxheWVyIChlLmcuIHdyaXRlIHRvIGJhcCwgZm9sbG93ZWQgYnkgY21kKS4KKyoKKyogQ29tbW9uIHNlcXVlbmNlczoKKyogaGZhMzg0eF9kcnZyX3h4eAlIaWdoZXN0IGxldmVsIGFic3RyYWN0aW9ucyBwcm92aWRlZCBieSB0aGUKKyoJCQloZmEzODR4IGNvZGUuICBUaGV5IGFyZSBkcml2ZXIgZGVmaW5lZCB3cmFwcGVycworKgkJCWZvciBjb21tb24gc2VxdWVuY2VzLiAgVGhlc2UgZnVuY3Rpb25zIGdlbmVyYWxseQorKgkJCXVzZSB0aGUgc2VydmljZXMgb2YgdGhlIGxvd2VyIGxldmVscy4KKyoKKyogaGZhMzg0eF9kcnZyX3h4eGNvbmZpZyAgQW4gZXhhbXBsZSBvZiB0aGUgZHJ2ciBsZXZlbCBhYnN0cmFjdGlvbi4gVGhlc2UKKyoJCQlmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGZvciB0aGUgUklEIGdldC9zZXQKKyoJCQlzZXF1ZW5jZS4gVGhleSAJY2FsbCBjb3B5X1t0b3xmcm9tXV9iYXAoKSBhbmQKKyoJCQljbWRfYWNjZXNzKCkuCVRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHRoZQorKgkJCVJJRHMgYW5kIGJ1ZmZlcnMgd2l0aG91dCB2YWxpZGF0aW9uLiAgVGhlIGNhbGxlcgorKgkJCWlzIHJlc3BvbnNpYmxlIGZvciB0aGF0LgorKgorKiBBUEkgd3JhcHBlciBmdW5jdGlvbnM6CisqIGhmYTM4NHhfY21kX3h4eAlmdW5jdGlvbnMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGUgZi93IGNvbW1hbmRzLgorKgkJCVRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY29ycmVzcG9uZCB0byBlYWNoIGNvbW1hbmQKKyoJCQlhcmd1bWVudCwgZXZlbiBjb21tYW5kIGFyZ3VtZW50cyB0aGF0IGdldCBwYWNrZWQKKyoJCQlpbnRvIHNpbmdsZSByZWdpc3RlcnMuICBUaGVzZSBmdW5jdGlvbnMgX2p1c3RfCisqCQkJaXNzdWUgdGhlIGNvbW1hbmQgYnkgc2V0dGluZyB0aGUgY21kL3Bhcm0gcmVncworKgkJCSYgcmVhZGluZyB0aGUgc3RhdHVzL3Jlc3AgcmVncy4gIEFkZGl0aW9uYWwKKyoJCQlhY3Rpdml0aWVzIHJlcXVpcmVkIHRvIGZ1bGx5IHVzZSBhIGNvbW1hbmQKKyoJCQkocmVhZC93cml0ZSBmcm9tL3RvIGJhcCwgZ2V0L3NldCBpbnQgc3RhdHVzIGV0Yy4pCisqCQkJYXJlIGltcGxlbWVudGVkIHNlcGFyYXRlbHkuICBUaGluayBvZiB0aGVzZSBhcworKgkJCUMtY2FsbGFibGUgcHJpc20yIGNvbW1hbmRzLgorKgorKiBMb3dlc3QgTGF5ZXIgRnVuY3Rpb25zOgorKiBoZmEzODR4X2RvY21kX3h4eAlUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBzZXF1ZW5jZSByZXF1aXJlZAorKgkJCXRvIGlzc3VlIGFueSBwcmlzbTIgY29tbWFuZC4gIFByaW1hcmlseSB1c2VkIGJ5IHRoZQorKgkJCWhmYTM4NHhfY21kX3h4eCBmdW5jdGlvbnMuCisqCisqIGhmYTM4NHhfYmFwX3h4eAlCQVAgcmVhZC93cml0ZSBhY2Nlc3MgZnVuY3Rpb25zLgorKgkJCU5vdGU6IHdlIHVzdWFsbHkgdXNlIEJBUDAgZm9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAorKgkJCSBhbmQgQkFQMSBmb3IgaW50ZXJydXB0IGNvbnRleHQuCisqCisqIGhmYTM4NHhfZGxfeHh4CWRvd25sb2FkIHJlbGF0ZWQgZnVuY3Rpb25zLgorKgorKiBEcml2ZXIgU3RhdGUgSXNzdWVzOgorKiBOb3RlIHRoYXQgdGhlcmUgYXJlIHR3byBwYWlycyBvZiBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlCisqICdpbml0aWFsaXplZCcgYW5kICdydW5uaW5nJyBzdGF0ZXMgb2YgdGhlIGh3L01BQyBjb21iby4gIFRoZSBmb3VyCisqIGZ1bmN0aW9ucyBhcmUgY3JlYXRlKCksIGRlc3Ryb3koKSwgc3RhcnQoKSwgYW5kIHN0b3AoKS4gIGNyZWF0ZSgpCisqIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBoZmEzODR4XyoKKyogZnVuY3Rpb25zIGFuZCBkZXN0cm95KCkgY2xlYW5zIHRoZW0gdXAuICBUaGUgc3RhcnQoKSBmdW5jdGlvbiBnZXRzCisqIHRoZSBhY3R1YWwgaGFyZHdhcmUgcnVubmluZyBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIFRoZSBzdG9wKCkKKyogZnVuY3Rpb24gc2h1dHMgdGhlIGhhcmR3YXJlIGRvd24uICBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlOgorKiBjcmVhdGUoKQorKiBzdGFydCgpCisqICAuCisqICAuICBEbyBpbnRlcmVzdGluZyB0aGluZ3Mgdy8gdGhlIGhhcmR3YXJlCisqICAuCisqIHN0b3AoKQorKiBkZXN0cm95KCkKKyoKKyogTm90ZSB0aGF0IGRlc3Ryb3koKSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgY2FsbGluZyBzdG9wKCkgZmlyc3QuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorI2Vycm9yICJUaGlzIGZpbGUgaXMgc3BlY2lmaWMgdG8gVVNCIgorI2VuZGlmCisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKK3N0YXRpYyBpbnQKK3dhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkKK3sKKyAgaW50IHJldCA9IDA7CisKKyAgbWlnaHRfc2xlZXAoKTsKKworICBzcGluX2xvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworICBpZiAoIXgtPmRvbmUpIHsKKyAgICBERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworICAgIHdhaXQuZmxhZ3MgfD0gV1FfRkxBR19FWENMVVNJVkU7CisgICAgX19hZGRfd2FpdF9xdWV1ZV90YWlsKCZ4LT53YWl0LCAmd2FpdCk7CisgICAgZG8geworICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsKKyAgICAgICAgX19yZW1vdmVfd2FpdF9xdWV1ZSgmeC0+d2FpdCwgJndhaXQpOworICAgICAgICBnb3RvIG91dDsKKyAgICAgIH0KKyAgICAgIF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKyAgICAgIHNwaW5fdW5sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsKKyAgICAgIHNjaGVkdWxlKCk7CisgICAgICBzcGluX2xvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworICAgIH0gd2hpbGUgKCF4LT5kb25lKTsKKyAgICBfX3JlbW92ZV93YWl0X3F1ZXVlKCZ4LT53YWl0LCAmd2FpdCk7CisgIH0KKyAgeC0+ZG9uZS0tOworb3V0OgorICBzcGluX3VubG9ja19pcnEoJngtPndhaXQubG9jayk7CisKKyAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDY5KQorc3RhdGljIHZvaWQKK3VzYl9pbml0X3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJbWVtc2V0KHVyYiwgMCwgc2l6ZW9mKCp1cmIpKTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApIC8qIHR1bmUgbWUhICovCisJdXJiLT5jb3VudCA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgxKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZ1cmItPmxvY2spOworfQorI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApIC8qIHR1bmUgbWUhICovCisjICBkZWZpbmUgU1VCTUlUX1VSQih1LGYpICB1c2Jfc3VibWl0X3VyYih1LGYpCisjZWxzZQorIyAgZGVmaW5lIFNVQk1JVF9VUkIodSxmKSAgdXNiX3N1Ym1pdF91cmIodSkKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCitlbnVtIGNtZF9tb2RlCit7CisgIERPV0FJVCA9IDAsCisgIERPQVNZTkMKK307Cit0eXBlZGVmIGVudW0gY21kX21vZGUgQ01EX01PREU7CisKKyNkZWZpbmUgVEhST1RUTEVfSklGRklFUwkoSFovOCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisjZGVmaW5lIFJPVU5EVVA2NChhKSAoKChhKSs2MykmfjYzKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworZXh0ZXJuIGludCBwcmlzbTJfZGVidWc7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworI2lmZGVmIERFQlVHX1VTQgorc3RhdGljIHZvaWQKK2RicHJpbnRfdXJiKHN0cnVjdCB1cmIqIHVyYik7CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfaW50X3J4bW9uaXRvcigKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKKworc3RhdGljIGludAorc3VibWl0X3J4X3VyYihoZmEzODR4X3QgKmh3LCBnZnBfdCBmbGFncyk7CisKK3N0YXRpYyBpbnQKK3N1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBmbGFncyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENhbGxiYWNrcyAqLworI2lmZGVmIFVSQl9PTkxZX0NBTExCQUNLCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkCitoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CisjZWxzZQorc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2VuZGlmCisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JvdXRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYm91dF90ICp1c2JvdXQpOworCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2N0bHgoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2Jpbl90ICp1c2JpbiwKKwkJCSAgICAgICBpbnQgdXJiX3N0YXR1cyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBwcmlzbTIgdXNiIGNvbW1hbmQgcXVldWUgKi8KKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiY3RseHFfcnVuKGhmYTM4NHhfdCAqaHcpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiY3RseF9yZXNwdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfdXNiY3RseF9zdWJtaXQoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOworCitzdGF0aWMgdm9pZAordW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0cnVjdCB1c2JjdGx4X2NvbXBsZXRvcgoreworCWludCAoKmNvbXBsZXRlKShzdHJ1Y3QgdXNiY3RseF9jb21wbGV0b3IqKTsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciB1c2JjdGx4X2NvbXBsZXRvcl90OworCitzdGF0aWMgaW50CitoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhoZmEzODR4X3QgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JjdGx4X2NvbXBsZXRvcl90ICpjb21wbGV0b3IpOworCitzdGF0aWMgaW50Cit1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3N0YXR1cyhoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOworCitzdGF0aWMgaW50Cit1c2JjdGx4X2dldF9zdGF0dXMoY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90ICpjbWRyZXNwLAorICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCk7CisKK3N0YXRpYyB2b2lkCit1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKnJyaWRyZXNwLAorICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3JyaWRyZXN1bHRfdCAqcmVzdWx0KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTG93IGxldmVsIHJlcS9yZXNwIENUTFggZm9ybWF0dGVycyBhbmQgc3VibWl0dGVycyAqLworc3RhdGljIGludAoraGZhMzg0eF9kb2NtZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2RvcnJpZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXJpZCwKKwl2b2lkCSpyaWRkYXRhLAorCVVJTlQJcmlkZGF0YWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2Rvd3JpZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXJpZCwKKwl2b2lkCSpyaWRkYXRhLAorCVVJTlQJcmlkZGF0YWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2Rvcm1lbSgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXBhZ2UsCisJVUlOVDE2CW9mZnNldCwKKwl2b2lkCSpkYXRhLAorCVVJTlQJbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG93bWVtKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcGFnZSwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmRhdGEsCisJVUlOVAlsZW4sCisJY3RseF9jbWRjYl90IGNtZGNiLAorCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAorCXZvaWQJKnVzZXJjYl9kYXRhKTsKKworc3RhdGljIGludAoraGZhMzg0eF9pc2dvb2RfcGRyY29kZShVSU5UMTYgcGRyY29kZSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBjdGx4c3RyKENUTFhfU1RBVEUgcykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciogY3RseF9zdHJbXSA9IHsKKwkJIkluaXRpYWwgc3RhdGUiLAorCQkiQ29tcGxldGUiLAorCQkiUmVxdWVzdCBmYWlsZWQiLAorCQkiUmVxdWVzdCBwZW5kaW5nIiwKKwkJIlJlcXVlc3QgcGFja2V0IHN1Ym1pdHRlZCIsCisJCSJSZXF1ZXN0IHBhY2tldCBjb21wbGV0ZWQiLAorCQkiUmVzcG9uc2UgcGFja2V0IGNvbXBsZXRlZCIKKwl9OworCisJcmV0dXJuIGN0bHhfc3RyW3NdOworfTsKKworCitzdGF0aWMgaW5saW5lIGhmYTM4NHhfdXNiY3RseF90KgorZ2V0X2FjdGl2ZV9jdGx4KGhmYTM4NHhfdCAqaHcpCit7CisJcmV0dXJuIGxpc3RfZW50cnkoaHctPmN0bHhxLmFjdGl2ZS5uZXh0LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7Cit9CisKKworI2lmZGVmIERFQlVHX1VTQgordm9pZAorZGJwcmludF91cmIoc3RydWN0IHVyYiogdXJiKQoreworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+cGlwZT0weCUwOHhcbiIsIHVyYi0+cGlwZSk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGF0dXM9MHglMDh4XG4iLCB1cmItPnN0YXR1cyk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9mbGFncz0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfYnVmZmVyPTB4JTA4eFxuIiwgKFVJTlQpdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5hY3R1YWxfbGVuZ3RoPTB4JTA4eFxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmJhbmR3aWR0aD0weCUwOHhcbiIsIHVyYi0+YmFuZHdpZHRoKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnNldHVwX3BhY2tldChjdGwpPTB4JTA4eFxuIiwgKFVJTlQpdXJiLT5zZXR1cF9wYWNrZXQpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c3RhcnRfZnJhbWUoaXNvL2lycSk9MHglMDh4XG4iLCB1cmItPnN0YXJ0X2ZyYW1lKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmludGVydmFsKGlycSk9MHglMDh4XG4iLCB1cmItPmludGVydmFsKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmVycm9yX2NvdW50KGlzbyk9MHglMDh4XG4iLCB1cmItPmVycm9yX2NvdW50KTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnRpbWVvdXQ9MHglMDh4XG4iLCB1cmItPnRpbWVvdXQpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+Y29udGV4dD0weCUwOHhcbiIsIChVSU5UKXVyYi0+Y29udGV4dCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5jb21wbGV0ZT0weCUwOHhcbiIsIChVSU5UKXVyYi0+Y29tcGxldGUpOworfQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHN1Ym1pdF9yeF91cmIKKyoKKyogTGlzdGVuIGZvciBpbnB1dCBkYXRhIG9uIHRoZSBCVUxLLUlOIHBpcGUuIElmIHRoZSBwaXBlIGhhcworKiBzdGFsbGVkIHRoZW4gc2NoZWR1bGUgaXQgdG8gYmUgcmVzZXQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3QKKyoJbWVtZmxhZ3MJbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKKyoKKyogUmV0dXJuczoKKyoJZXJyb3IgY29kZSBmcm9tIHN1Ym1pc3Npb24KKyoKKyogQ2FsbCBjb250ZXh0OgorKglBbnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorc3VibWl0X3J4X3VyYihoZmEzODR4X3QgKmh3LCBnZnBfdCBtZW1mbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCByZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKGhmYTM4NHhfdXNiaW5fdCkpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogUG9zdCB0aGUgSU4gdXJiICovCisJdXNiX2ZpbGxfYnVsa191cmIoJmh3LT5yeF91cmIsIGh3LT51c2IsCisJICAgICAgICAgICAgICBody0+ZW5kcF9pbiwKKwkgICAgICAgICAgICAgIHNrYi0+ZGF0YSwgc2l6ZW9mKGhmYTM4NHhfdXNiaW5fdCksCisJICAgICAgICAgICAgICBoZmEzODR4X3VzYmluX2NhbGxiYWNrLCBody0+d2xhbmRldik7CisKKwlody0+cnhfdXJiX3NrYiA9IHNrYjsKKworCXJlc3VsdCA9IC1FTk9MSU5LOworCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYgIXRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CisJCXJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5yeF91cmIsIG1lbWZsYWdzKTsKKworCQkvKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gcmVzZXQgdGhlIFJYIHBpcGUgKi8KKwkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQl9CisJfQorCisJLyogRG9uJ3QgbGVhayBtZW1vcnkgaWYgYW55dGhpbmcgc2hvdWxkIGdvIHdyb25nICovCisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJaHctPnJ4X3VyYl9za2IgPSBOVUxMOworCX0KKworIGRvbmU6CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBzdWJtaXRfdHhfdXJiCisqCisqIFByZXBhcmVzIGFuZCBzdWJtaXRzIHRoZSBVUkIgb2YgdHJhbnNtaXR0ZWQgZGF0YS4gSWYgdGhlCisqIHN1Ym1pc3Npb24gZmFpbHMgdGhlbiBpdCB3aWxsIHNjaGVkdWxlIHRoZSBvdXRwdXQgcGlwZSB0bworKiBiZSByZXNldC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdAorKgl0eF91cmIJCVVSQiBvZiBkYXRhIGZvciB0cmFubWlzc2lvbgorKgltZW1mbGFncwltZW1vcnkgYWxsb2NhdGlvbiBmbGFncworKgorKiBSZXR1cm5zOgorKgllcnJvciBjb2RlIGZyb20gc3VibWlzc2lvbgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUFueQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitzdWJtaXRfdHhfdXJiKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1cmIgKnR4X3VyYiwgZ2ZwX3QgbWVtZmxhZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGh3LT53bGFuZGV2LT5uZXRkZXY7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gLUVOT0xJTks7CisJaWYgKCBuZXRpZl9ydW5uaW5nKG5ldGRldikgKSB7CisKKwkJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7CisJCQlyZXN1bHQgPSBTVUJNSVRfVVJCKHR4X3VyYiwgbWVtZmxhZ3MpOworCisJCQkvKiBUZXN0IHdoZXRoZXIgd2UgbmVlZCB0byByZXNldCB0aGUgVFggcGlwZSAqLworCQkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJCXNldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CisJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQl9CisJCX0KKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM5NHhfdXNiX2RlZmVyCisqCisqIFRoZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IHRoZSBVU0Igc3RhY2sgY2Fubm90IGRvIHdoaWxlCisqIGluIGludGVycnVwdCBjb250ZXh0LCBzbyB3ZSBhcnJhbmdlIHRoaXMgZnVuY3Rpb24gdG8gcnVuCisqIGluIHByb2Nlc3MgY29udGV4dC4KKyoKKyogQXJndW1lbnRzOgorKglodwlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIChieSBkZXNpZ24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgdXNiX3dvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBody0+d2xhbmRldi0+bmV0ZGV2OworCisJREJGRU5URVI7CisKKwkvKiBEb24ndCBib3RoZXIgdHJ5aW5nIHRvIHJlc2V0IGFueXRoaW5nIGlmIHRoZSBwbHVnCisJICogaGFzIGJlZW4gcHVsbGVkIC4uLgorCSAqLworCWlmICggaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKKwkJREJGRVhJVDsKKwkJcmV0dXJuOworCX0KKworCS8qIFJlY2VwdGlvbiBoYXMgc3RvcHBlZDogdHJ5IHRvIHJlc2V0IHRoZSBpbnB1dCBwaXBlICovCisJaWYgKHRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CisJCWludCByZXQ7CisKKwkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsgIC8qIENhbm5vdCBiZSBob2xkaW5nIHNwaW5sb2NrISAqLworCisJCXJldCA9IHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiRmFpbGVkIHRvIGNsZWFyIHJ4IHBpcGUgZm9yICVzOiBlcnI9JWRcbiIsCisJCQkgICAgICAgbmV0ZGV2LT5uYW1lLCByZXQpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcnggcGlwZSByZXNldCBjb21wbGV0ZS5cbiIsCisJCQkgICAgICAgICAgICAgICAgIG5ldGRldi0+bmFtZSk7CisJCQljbGVhcl9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CisJCQlzZXRfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncyk7CisJCX0KKwl9CisKKwkvKiBSZXN1bWUgcmVjZWl2aW5nIGRhdGEgYmFjayBmcm9tIHRoZSBkZXZpY2UuICovCisJaWYgKCB0ZXN0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpICkgeworCQlpbnQgcmV0OworCisJCXJldCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9LRVJORUwpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJGYWlsZWQgdG8gcmVzdW1lICVzIHJ4IHBpcGUuXG4iLCBuZXRkZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJY2xlYXJfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncyk7CisJCX0KKwl9CisKKwkvKiBUcmFuc21pc3Npb24gaGFzIHN0b3BwZWQ6IHRyeSB0byByZXNldCB0aGUgb3V0cHV0IHBpcGUgKi8KKwlpZiAodGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwkJaW50IHJldDsKKworCQl1c2Jfa2lsbF91cmIoJmh3LT50eF91cmIpOworCQlyZXQgPSB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJGYWlsZWQgdG8gY2xlYXIgdHggcGlwZSBmb3IgJXM6IGVycj0lZFxuIiwKKwkJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyB0eCBwaXBlIHJlc2V0IGNvbXBsZXRlLlxuIiwKKwkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCWNsZWFyX2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJCXNldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKKworCQkJLyogU3RvcHBpbmcgdGhlIEJVTEstT1VUIHBpcGUgYWxzbyBibG9ja2VkCisJCQkgKiB1cyBmcm9tIHNlbmRpbmcgYW55IG1vcmUgQ1RMWCBVUkJzLCBzbworCQkJICogd2UgbmVlZCB0byByZS1ydW4gb3VyIHF1ZXVlIC4uLgorCQkJICovCisJCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisJCX0KKwl9CisKKwkvKiBSZXN1bWUgdHJhbnNtaXR0aW5nLiAqLworCWlmICggdGVzdF9hbmRfY2xlYXJfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykgKSB7CisJCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKGh3LT53bGFuZGV2KTsKKwl9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NyZWF0ZQorKgorKiBTZXRzIHVwIHRoZSBoZmEzODR4X3QgZGF0YSBzdHJ1Y3R1cmUgZm9yIHVzZS4gIE5vdGUgdGhpcworKiBkb2VzIF9ub3RfIGludGlhbGl6ZSB0aGUgYWN0dWFsIGhhcmR3YXJlLCBqdXN0IHRoZSBkYXRhIHN0cnVjdHVyZXMKKyogd2UgdXNlIHRvIGtlZXAgdHJhY2sgb2YgaXRzIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWlycQkJZGV2aWNlIGlycSBudW1iZXIKKyoJaW9iYXNlCQlpL28gYmFzZSBhZGRyZXNzIGZvciByZWdpc3RlciBhY2Nlc3MKKyoJbWVtYmFzZQkJbWVtb3J5IGJhc2UgYWRkcmVzcyBmb3IgcmVnaXN0ZXIgYWNjZXNzCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9jcmVhdGUoIGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCit7CisJREJGRU5URVI7CisKKwltZW1zZXQoaHcsIDAsIHNpemVvZihoZmEzODR4X3QpKTsKKwlody0+dXNiID0gdXNiOworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludHMgKi8KKwlody0+ZW5kcF9pbiA9IHVzYl9yY3ZidWxrcGlwZSh1c2IsIDEpOworCWh3LT5lbmRwX291dCA9IHVzYl9zbmRidWxrcGlwZSh1c2IsIDIpOworCisJLyogU2V0IHVwIHRoZSB3YWl0cSAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmh3LT5jbWRxKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgcXVldWUgKi8KKwlzcGluX2xvY2tfaW5pdCgmaHctPmN0bHhxLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZody0+Y3RseHEucGVuZGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5hY3RpdmUpOworCUlOSVRfTElTVF9IRUFEKCZody0+Y3RseHEuY29tcGxldGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5yZWFwYWJsZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBhdXRoZW50aWNhdGlvbiBxdWV1ZSAqLworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmh3LT5hdXRocSk7CisKKwl0YXNrbGV0X2luaXQoJmh3LT5yZWFwZXJfYmgsCisJICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaywKKwkgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHcpOworCXRhc2tsZXRfaW5pdCgmaHctPmNvbXBsZXRpb25fYmgsCisJICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2ssCisJICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWh3KTsKKwlJTklUX1dPUksyKCZody0+bGlua19iaCwgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIpOworCUlOSVRfV09SSzIoJmh3LT51c2Jfd29yaywgaGZhMzg0eF91c2JfZGVmZXIpOworCisJaW5pdF90aW1lcigmaHctPnRocm90dGxlKTsKKwlody0+dGhyb3R0bGUuZnVuY3Rpb24gPSBoZmEzODR4X3VzYl90aHJvdHRsZWZuOworCWh3LT50aHJvdHRsZS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHc7CisKKwlpbml0X3RpbWVyKCZody0+cmVzcHRpbWVyKTsKKwlody0+cmVzcHRpbWVyLmZ1bmN0aW9uID0gaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuOworCWh3LT5yZXNwdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3OworCisJaW5pdF90aW1lcigmaHctPnJlcXRpbWVyKTsKKwlody0+cmVxdGltZXIuZnVuY3Rpb24gPSBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbjsKKwlody0+cmVxdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3OworCisJdXNiX2luaXRfdXJiKCZody0+cnhfdXJiKTsKKwl1c2JfaW5pdF91cmIoJmh3LT50eF91cmIpOworCXVzYl9pbml0X3VyYigmaHctPmN0bHhfdXJiKTsKKworCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9JTklUOworCisgICAgICAgIElOSVRfV09SSzIoJmh3LT5jb21tc3F1YWxfYmgsIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIpOworCWluaXRfdGltZXIoJmh3LT5jb21tc3F1YWxfdGltZXIpOworCWh3LT5jb21tc3F1YWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBodzsKKwlody0+Y29tbXNxdWFsX3RpbWVyLmZ1bmN0aW9uID0gcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcjsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZGVzdHJveQorKgorKiBQYXJ0bmVyIHRvIGhmYTM4NHhfY3JlYXRlKCkuICBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgaHcKKyogc3RydWN0dXJlIHNvIHRoYXQgaXQgY2FuIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgYSBzaW1wbGUKKyoga2ZyZWUuICBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyLiAgSWYsIGF0IHNvbWUKKyogcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYW4gaHcgaW4gdGhlICdzaHV0ZG93bicgc3RhdGUgcmVxdWlyZXMgYSAnZGVlcCcKKyoga2ZyZWUsIHRoaXMgaXMgd2hlcmUgaXQgc2hvdWxkIGJlIGRvbmUuICBOb3RlIHRoYXQgaWYgdGhpcyBmdW5jdGlvbgorKiBpcyBjYWxsZWQgb24gYSBfcnVubmluZ18gaHcgc3RydWN0dXJlLCB0aGUgZHJ2cl9zdG9wKCkgZnVuY3Rpb24gaXMKKyogY2FsbGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcsIHRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9kZXN0cm95KCBoZmEzODR4X3QgKmh3KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlEQkZFTlRFUjsKKworCWlmICggaHctPnN0YXRlID09IEhGQTM4NHhfU1RBVEVfUlVOTklORyApIHsKKwkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCX0KKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1BSRUlOSVQ7CisKKwlpZiAoaHctPnNjYW5yZXN1bHRzKSB7CisJCWtmcmVlKGh3LT5zY2FucmVzdWx0cyk7CisJCWh3LT5zY2FucmVzdWx0cyA9IE5VTEw7CisJfQorCisJLyogTm93IHRvIGNsZWFuIG91dCB0aGUgYXV0aCBxdWV1ZSAqLworICAgICAgICB3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7CisgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOworICAgICAgICB9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaGZhMzg0eF91c2JjdGx4X3QqIHVzYmN0bHhfYWxsb2Modm9pZCkKK3sKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKKworCWN0bHggPSBrbWFsbG9jKHNpemVvZigqY3RseCksIGluX2ludGVycnVwdCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCWlmIChjdGx4ICE9IE5VTEwpCisJeworCQltZW1zZXQoY3RseCwgMCwgc2l6ZW9mKCpjdGx4KSk7CisJCWluaXRfY29tcGxldGlvbigmY3RseC0+ZG9uZSk7CisJfQorCisJcmV0dXJuIGN0bHg7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50Cit1c2JjdGx4X2dldF9zdGF0dXMoY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90ICpjbWRyZXNwLAorICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCkKK3sKKwlEQkZFTlRFUjsKKworCXJlc3VsdC0+c3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnN0YXR1cyk7CisJcmVzdWx0LT5yZXNwMCA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5yZXNwMCk7CisJcmVzdWx0LT5yZXNwMSA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5yZXNwMSk7CisJcmVzdWx0LT5yZXNwMiA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5yZXNwMik7CisKKwlXTEFOX0xPR19ERUJVRyg0LCAiY21kcmVzdWx0OnN0YXR1cz0weCUwNHggIgorCSAgICAgICAgICAgICAgICAgICJyZXNwMD0weCUwNHggcmVzcDE9MHglMDR4IHJlc3AyPTB4JTA0eFxuIiwKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5zdGF0dXMsCisJICAgICAgICAgICAgICAgIHJlc3VsdC0+cmVzcDAsCisJICAgICAgICAgICAgICAgIHJlc3VsdC0+cmVzcDEsCisJICAgICAgICAgICAgICAgIHJlc3VsdC0+cmVzcDIpOworCisJREJGRVhJVDsKKwlyZXR1cm4gKHJlc3VsdC0+c3RhdHVzICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUKTsKK30KKworc3RhdGljIHZvaWQKK3VzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdCAqcnJpZHJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpCit7CisJREJGRU5URVI7CisKKwlyZXN1bHQtPnJpZCA9IGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+cmlkKTsKKwlyZXN1bHQtPnJpZGRhdGEgPSBycmlkcmVzcC0+ZGF0YTsKKwlyZXN1bHQtPnJpZGRhdGFfbGVuID0gKChoZmEzODR4Mmhvc3RfMTYocnJpZHJlc3AtPmZybWxlbikgLSAxKSAqIDIpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29tcGxldG9yIG9iamVjdDoKKyogVGhpcyBjb21wbGV0b3IgbXVzdCBiZSBwYXNzZWQgdG8gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoKQorKiB3aGVuIHByb2Nlc3NpbmcgYSBDVExYIHRoYXQgcmV0dXJucyBhIGhmYTM4NHhfY21kcmVzdWx0X3Qgc3RydWN0dXJlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdXNiY3RseF9jbWRfY29tcGxldG9yCit7CisJdXNiY3RseF9jb21wbGV0b3JfdAloZWFkOworCisJY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90CSpjbWRyZXNwOworCWhmYTM4NHhfY21kcmVzdWx0X3QJKnJlc3VsdDsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgdXNiY3RseF9jbWRfY29tcGxldG9yX3Q7CisKK3N0YXRpYyBpbnQgdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCit7CisJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfY21kX2NvbXBsZXRvcl90KiloZWFkOworCXJldHVybiB1c2JjdGx4X2dldF9zdGF0dXMoY29tcGxldGUtPmNtZHJlc3AsIGNvbXBsZXRlLT5yZXN1bHQpOworfQorCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCitpbml0X2NtZF9jb21wbGV0b3IodXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRvciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCisgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KQoreworCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfY21kX2NvbXBsZXRvcl9mbjsKKwljb21wbGV0b3ItPmNtZHJlc3AgPSBjbWRyZXNwOworCWNvbXBsZXRvci0+cmVzdWx0ID0gcmVzdWx0OworCXJldHVybiAmKGNvbXBsZXRvci0+aGVhZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBUaGlzIGNvbXBsZXRvciBtdXN0IGJlIHBhc3NlZCB0byBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygpCisqIHdoZW4gcHJvY2Vzc2luZyBhIENUTFggdGhhdCByZWFkcyBhIFJJRC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RydWN0IHVzYmN0bHhfcnJpZF9jb21wbGV0b3IKK3sKKwl1c2JjdGx4X2NvbXBsZXRvcl90CWhlYWQ7CisKKwljb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90CSpycmlkcmVzcDsKKwl2b2lkCQkJKnJpZGRhdGE7CisJVUlOVAkJCXJpZGRhdGFsZW47Cit9OwordHlwZWRlZiBzdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvciB1c2JjdGx4X3JyaWRfY29tcGxldG9yX3Q7CisKK3N0YXRpYyBpbnQgdXNiY3RseF9ycmlkX2NvbXBsZXRvcl9mbih1c2JjdGx4X2NvbXBsZXRvcl90ICpoZWFkKQoreworCXVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9ycmlkX2NvbXBsZXRvcl90KiloZWFkOworCWhmYTM4NHhfcnJpZHJlc3VsdF90IHJyaWRyZXN1bHQ7CisKKwl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbXBsZXRlLT5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOworCisJLyogVmFsaWRhdGUgdGhlIGxlbmd0aCwgbm90ZSBib2R5IGxlbiBjYWxjdWxhdGlvbiBpbiBieXRlcyAqLworCWlmICggcnJpZHJlc3VsdC5yaWRkYXRhX2xlbiAhPSBjb21wbGV0ZS0+cmlkZGF0YWxlbiApIHsKKwkJV0xBTl9MT0dfV0FSTklORygKKwkJCSJSSUQgbGVuIG1pc21hdGNoLCByaWQ9MHglMDR4IGhsZW49JWQgZndsZW49JWRcbiIsCisJCSAgICAgICAgcnJpZHJlc3VsdC5yaWQsCisJCSAgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4sCisJCSAgICAgICAgcnJpZHJlc3VsdC5yaWRkYXRhX2xlbik7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwltZW1jcHkoY29tcGxldGUtPnJpZGRhdGEsCisJICAgICAgIHJyaWRyZXN1bHQucmlkZGF0YSwKKwkgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCitpbml0X3JyaWRfY29tcGxldG9yKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmlkZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgVUlOVCByaWRkYXRhbGVuKQoreworCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfZm47CisJY29tcGxldG9yLT5ycmlkcmVzcCA9IHJyaWRyZXNwOworCWNvbXBsZXRvci0+cmlkZGF0YSA9IHJpZGRhdGE7CisJY29tcGxldG9yLT5yaWRkYXRhbGVuID0gcmlkZGF0YWxlbjsKKwlyZXR1cm4gJihjb21wbGV0b3ItPmhlYWQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29tcGxldG9yIG9iamVjdDoKKyogSW50ZXJwcmV0cyB0aGUgcmVzdWx0cyBvZiBhIHN5bmNocm9ub3VzIFJJRC13cml0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHVzYmN0bHhfY21kX2NvbXBsZXRvcl90IHVzYmN0bHhfd3JpZF9jb21wbGV0b3JfdDsKKyNkZWZpbmUgaW5pdF93cmlkX2NvbXBsZXRvciAgaW5pdF9jbWRfY29tcGxldG9yCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBJbnRlcnByZXRzIHRoZSByZXN1bHRzIG9mIGEgc3luY2hyb25vdXMgbWVtb3J5LXdyaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgdXNiY3RseF9jbWRfY29tcGxldG9yX3QgdXNiY3RseF93bWVtX2NvbXBsZXRvcl90OworI2RlZmluZSBpbml0X3dtZW1fY29tcGxldG9yICBpbml0X2NtZF9jb21wbGV0b3IKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvbXBsZXRvciBvYmplY3Q6CisqIEludGVycHJldHMgdGhlIHJlc3VsdHMgb2YgYSBzeW5jaHJvbm91cyBtZW1vcnktcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvcgoreworICAgICAgICB1c2JjdGx4X2NvbXBsZXRvcl90ICAgICAgICAgICBoZWFkOworCisgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgICpybWVtcmVzcDsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGE7CisgICAgICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yIHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdDsKKworc3RhdGljIGludCB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCit7CisJdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QqKWhlYWQ7CisKKwlXTEFOX0xPR19ERUJVRyg0LCJybWVtcmVzcDpsZW49JWRcbiIsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZnJtbGVuKTsKKwltZW1jcHkoY29tcGxldGUtPmRhdGEsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZGF0YSwgY29tcGxldGUtPmxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKK2luaXRfcm1lbV9jb21wbGV0b3IodXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0b3IsCisgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgKnJtZW1yZXNwLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICBVSU5UIGxlbikKK3sKKwljb21wbGV0b3ItPmhlYWQuY29tcGxldGUgPSB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuOworCWNvbXBsZXRvci0+cm1lbXJlc3AgPSBybWVtcmVzcDsKKwljb21wbGV0b3ItPmRhdGEgPSBkYXRhOworCWNvbXBsZXRvci0+bGVuID0gbGVuOworCXJldHVybiAmKGNvbXBsZXRvci0+aGVhZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NiX3N0YXR1cworKgorKiBDdGx4X2NvbXBsZXRlIGhhbmRsZXIgZm9yIGFzeW5jIENNRCB0eXBlIGNvbnRyb2wgZXhjaGFuZ2VzLgorKiBtYXJrIHRoZSBodyBzdHJ1Y3QgYXMgc3VjaC4KKyoKKyogTm90ZTogSWYgdGhlIGhhbmRsaW5nIGlzIGNoYW5nZWQgaGVyZSwgaXQgc2hvdWxkIHByb2JhYmx5IGJlCisqICAgICAgIGNoYW5nZWQgaW4gZG9jbWQgYXMgd2VsbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJaHcgc3RydWN0CisqCWN0bHgJCWNvbXBsZXRlZCBDVExYCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF9jYl9zdGF0dXMoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJREJGRU5URVI7CisKKwlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCQloZmEzODR4X2NtZHJlc3VsdF90IGNtZHJlc3VsdDsKKworCQlpZiAoY3RseC0+c3RhdGUgIT0gQ1RMWF9DT01QTEVURSkgeworCQkJbWVtc2V0KCZjbWRyZXN1bHQsIDAsIHNpemVvZihjbWRyZXN1bHQpKTsKKwkJCWNtZHJlc3VsdC5zdGF0dXMgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKEhGQTM4NHhfQ01EX0VSUik7CisJCX0gZWxzZSB7CisJCQl1c2JjdGx4X2dldF9zdGF0dXMoJmN0bHgtPmluYnVmLmNtZHJlc3AsICZjbWRyZXN1bHQpOworCQl9CisKKwkJY3RseC0+dXNlcmNiKGh3LCAmY21kcmVzdWx0LCBjdGx4LT51c2VyY2JfZGF0YSk7CisJfQorCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jYl9ycmlkCisqCisqIENUTFggY29tcGxldGlvbiBoYW5kbGVyIGZvciBhc3luYyBSUklEIHR5cGUgY29udHJvbCBleGNoYW5nZXMuCisqCisqIE5vdGU6IElmIHRoZSBoYW5kbGluZyBpcyBjaGFuZ2VkIGhlcmUsIGl0IHNob3VsZCBwcm9iYWJseSBiZQorKiAgICAgICBjaGFuZ2VkIGluIGRvcnJpZCBhcyB3ZWxsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlodyBzdHJ1Y3QKKyoJY3RseAkJY29tcGxldGVkIENUTFgKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJREJGRU5URVI7CisKKwlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCQloZmEzODR4X3JyaWRyZXN1bHRfdCBycmlkcmVzdWx0OworCisJCWlmIChjdGx4LT5zdGF0ZSAhPSBDVExYX0NPTVBMRVRFKSB7CisJCQltZW1zZXQoJnJyaWRyZXN1bHQsIDAsIHNpemVvZihycmlkcmVzdWx0KSk7CisJCQlycmlkcmVzdWx0LnJpZCA9IGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpOworCQl9IGVsc2UgeworCQkJdXNiY3RseF9nZXRfcnJpZHJlc3VsdCgmY3RseC0+aW5idWYucnJpZHJlc3AsICZycmlkcmVzdWx0KTsKKwkJfQorCisJCWN0bHgtPnVzZXJjYihodywgJnJyaWRyZXN1bHQsIGN0bHgtPnVzZXJjYl9kYXRhKTsKKwl9CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb2NtZF93YWl0KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPV0FJVCwgY21kLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9jbWRfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKyAgICAgICAgICAgICAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPQVNZTkMsIGNtZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RvcnJpZF93YWl0KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3JyaWQoaHcsIERPV0FJVCwKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9ycmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgcmlkLCB2b2lkICpyaWRkYXRhLCBVSU5UIHJpZGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQoreworCXJldHVybiBoZmEzODR4X2RvcnJpZChodywgRE9BU1lOQywKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvd3JpZF93YWl0KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dyaWQoaHcsIERPV0FJVCwKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG93cmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgcmlkLCB2b2lkICpyaWRkYXRhLCBVSU5UIHJpZGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZChodywgRE9BU1lOQywKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvcm1lbV93YWl0KGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBwYWdlLCBVSU5UMTYgb2Zmc2V0LCB2b2lkICpkYXRhLCBVSU5UIGxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3JtZW0oaHcsIERPV0FJVCwKKwkgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3JtZW1fYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBwYWdlLCBVSU5UMTYgb2Zmc2V0LCB2b2lkICpkYXRhLCBVSU5UIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9ybWVtKGh3LCBET0FTWU5DLAorCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3dtZW1fd2FpdCgKKyAgICAgICAgaGZhMzg0eF90ICpodywKKyAgICAgICAgVUlOVDE2ICBwYWdlLAorICAgICAgICBVSU5UMTYgIG9mZnNldCwKKyAgICAgICAgdm9pZCAgICAqZGF0YSwKKyAgICAgICAgVUlOVCAgICBsZW4pCit7CisJcmV0dXJuIGhmYTM4NHhfZG93bWVtKGh3LCBET1dBSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG93bWVtX2FzeW5jKAorICAgICAgICBoZmEzODR4X3QgKmh3LAorICAgICAgICBVSU5UMTYgIHBhZ2UsCisgICAgICAgIFVJTlQxNiAgb2Zmc2V0LAorICAgICAgICB2b2lkICAgICpkYXRhLAorICAgICAgICBVSU5UICAgIGxlbiwKKyAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgdm9pZCAgICAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG93bWVtKGh3LCBET0FTWU5DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZQorKgorKiBJc3N1ZXMgdGhlIGluaXRpYWxpemUgY29tbWFuZCBhbmQgc2V0cyB0aGUgaHctPnN0YXRlIGJhc2VkCisqIG9uIHRoZSByZXN1bHQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaW50CWk7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5JVDsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisKKworCVdMQU5fTE9HX0RFQlVHKDMsImNtZHJlc3AuaW5pdDogIgorCQkic3RhdHVzPTB4JTA0eCwgcmVzcDA9MHglMDR4LCAiCisJCSJyZXNwMT0weCUwNHgsIHJlc3AyPTB4JTA0eFxuIiwKKwkJY21kLnJlc3VsdC5zdGF0dXMsCisJCWNtZC5yZXN1bHQucmVzcDAsCisJCWNtZC5yZXN1bHQucmVzcDEsCisJCWNtZC5yZXN1bHQucmVzcDIpOworCWlmICggcmVzdWx0ID09IDAgKSB7CisJCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCQkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7CisJCX0KKwl9CisKKyAgICAgICAgaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZGlzYWJsZQorKgorKiBJc3N1ZXMgdGhlIGRpc2FibGUgY29tbWFuZCB0byBzdG9wIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlciAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRElTQUJMRSkgfAorCQkgIEhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKG1hY3BvcnQpOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZW5hYmxlCisqCisqIElzc3VlcyB0aGUgZW5hYmxlIGNvbW1hbmQgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0VOQUJMRSkgfAorCQkgIEhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKG1hY3BvcnQpOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfbm90aWZ5CisqCisqIFNlbmRzIGFuIGluZm8gZnJhbWUgdG8gdGhlIGZpcm13YXJlIHRvIGFsdGVyIHRoZSBiZWhhdmlvcgorKiBvZiB0aGUgZi93IGFzeW5jaCBwcm9jZXNzZXMuICBDYW4gb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgTUFDCisqIGlzIGluIHRoZSBlbmFibGVkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJlY2xhaW0JCVswfDFdIGluZGljYXRlcyB3aGV0aGVyIHRoZSBnaXZlbiBGSUQgd2lsbAorKgkJCWJlIGhhbmRlZCBiYWNrICh2aWEgQWxsb2MgZXZlbnQpIGZvciByZXVzZS4KKyoJCQkoaG9zdCBvcmRlcikKKyoJZmlkCQlGSUQgb2YgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZyYW1lIHRoYXQgd2FzCisqCQkJcHJldmlvdXNseSBjb3BpZWQgdG8gTUFDIG1lbW9yeSB2aWEgdGhlIGJhcC4KKyoJCQkoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCWh3LT5yZXNwMCB3aWxsIGNvbnRhaW4gdGhlIEZJRCBiZWluZyB1c2VkIGJ5IGFzeW5jIG5vdGlmeQorKglwcm9jZXNzLiAgSWYgcmVjbGFpbT09MCwgcmVzcDAgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlkCisqCWFyZ3VtZW50LiAgSWYgcmVjbGFpbT09MSwgcmVzcDAgd2lsbCBiZSB0aGUgZGlmZmVyZW50LgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX25vdGlmeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IGZpZCwKKwkJICAgICAgIHZvaWQgKmJ1ZiwgVUlOVDE2IGxlbikKK3sKKyNpZiAwCisJaW50CXJlc3VsdCA9IDA7CisJVUlOVDE2CWNtZDsKKwlEQkZFTlRFUjsKKwljbWQgPQlIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTk9USUZZKSB8CisJCUhGQTM4NHhfQ01EX1JFQ0xfU0VUKHJlY2xhaW0pOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorcmV0dXJuIDA7Cit9CisKKworI2lmIDAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbnF1aXJ5CisqCisqIFJlcXVlc3RzIGFuIGluZm8gZnJhbWUgZnJvbSB0aGUgZmlybXdhcmUuICBUaGUgaW5mbyBmcmFtZSB3aWxsCisqIGJlIGRlbGl2ZXJlZCBhc3luY2hyb25vdXNseSB2aWEgdGhlIEluZm8gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZmlkCQlGSUQgb2YgdGhlIGluZm8gZnJhbWUgcmVxdWVzdGVkLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfaW5xdWlyeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgZmlkKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9JTlEpOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9tb25pdG9yCisqCisqIEVuYWJsZXMgdGhlICdtb25pdG9yIG1vZGUnIG9mIHRoZSBNQUMuICBIZXJlJ3MgdGhlIGRlc2NyaXB0aW9uIG9mCisqIG1vbml0b3IgbW9kZSB0aGF0IEkndmUgcmVjZWl2ZWQgdGh1cyBmYXI6CisqCisqICAiVGhlICJtb25pdG9yIG1vZGUiIG9mIG9wZXJhdGlvbiBpcyB0aGF0IHRoZSBNQUMgcGFzc2VzIGFsbAorKiAgZnJhbWVzIGZvciB3aGljaCB0aGUgUExDUCBjaGVja3MgYXJlIGNvcnJlY3QuIEFsbCByZWNlaXZlZAorKiAgTVBEVXMgYXJlIHBhc3NlZCB0byB0aGUgaG9zdCB3aXRoIE1BQyBQb3J0ID0gNywgd2l0aCBhCisqICByZWNlaXZlIHN0YXR1cyBvZiBnb29kLCBGQ1MgZXJyb3IsIG9yIHVuZGVjcnlwdGFibGUuIFBhc3NpbmcKKyogIGNlcnRhaW4gTVBEVXMgaXMgYSB2aW9sYXRpb24gb2YgdGhlIDgwMi4xMSBzdGFuZGFyZCwgYnV0IHVzZWZ1bAorKiAgZm9yIGEgZGVidWdnaW5nIHRvb2wuIiAgTm9ybWFsIGNvbW11bmljYXRpb24gaXMgbm90IHBvc3NpYmxlCisqICB3aGlsZSBtb25pdG9yIG1vZGUgaXMgZW5hYmxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgllbmFibGUJCWEgY29kZSAoMHgwYnwweDBmKSB0aGF0IGVuYWJsZXMvZGlzYWJsZXMKKyoJCQltb25pdG9yIG1vZGUuIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBlbmFibGUpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX01PTklUT1IpIHwKKwkJSEZBMzg0eF9DTURfQUlORk9fU0VUKGVuYWJsZSk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9kb3dubG9hZAorKgorKiBTZXRzIHRoZSBjb250cm9scyBmb3IgdGhlIE1BQyBjb250cm9sbGVyIGNvZGUvZGF0YSBkb3dubG9hZAorKiBwcm9jZXNzLiAgVGhlIGFyZ3VtZW50cyBzZXQgdGhlIG1vZGUgYW5kIGFkZHJlc3MgYXNzb2NpYXRlZAorKiB3aXRoIGEgZG93bmxvYWQuICBOb3RlIHRoYXQgdGhlIGF1eCByZWdpc3RlcnMgc2hvdWxkIGJlIGVuYWJsZWQKKyogcHJpb3IgdG8gc2V0dGluZyBvbmUgb2YgdGhlIGRvd25sb2FkIGVuYWJsZSBtb2Rlcy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltb2RlCQkwIC0gRGlzYWJsZSBwcm9ncmFtbWluZyBhbmQgYmVnaW4gY29kZSBleGVjCisqCQkJMSAtIEVuYWJsZSB2b2xhdGlsZSBtZW0gcHJvZ3JhbW1pbmcKKyoJCQkyIC0gRW5hYmxlIG5vbi12b2xhdGlsZSBtZW0gcHJvZ3JhbW1pbmcKKyoJCQkzIC0gUHJvZ3JhbSBub24tdm9sYXRpbGUgc2VjdGlvbiBmcm9tIE5WIGRvd25sb2FkCisqCQkJICAgIGJ1ZmZlci4KKyoJCQkoaG9zdCBvcmRlcikKKyoJbG93YWRkcgorKgloaWdoYWRkcglGb3IgbW9kZSAxLCBzZXRzIHRoZSBoaWdoICYgbG93IG9yZGVyIGJpdHMgb2YKKyoJCQl0aGUgImRlc3RpbmF0aW9uIGFkZHJlc3MiLiAgVGhpcyBhZGRyZXNzIHdpbGwgYmUKKyoJCQl0aGUgZXhlY3V0aW9uIHN0YXJ0IGFkZHJlc3Mgd2hlbiBkb3dubG9hZCBpcworKgkJCXN1YnNlcXVlbnRseSBkaXNhYmxlZC4KKyoJCQlGb3IgbW9kZSAyLCBzZXRzIHRoZSBoaWdoICYgbG93IG9yZGVyIGJpdHMgb2YKKyoJCQl0aGUgZGVzdGluYXRpb24gaW4gTlYgcmFtLgorKgkJCUZvciBtb2RlcyAwICYgMywgc2hvdWxkIGJlIHplcm8uIChob3N0IG9yZGVyKQorKgkJCU5PVEU6IHRoZXNlIGFyZSBDTUQgZm9ybWF0LgorKgljb2RlbGVuCQlMZW5ndGggb2YgdGhlIGRhdGEgdG8gd3JpdGUgaW4gbW9kZSAyLAorKgkJCXplcm8gb3RoZXJ3aXNlLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfZG93bmxvYWQoaGZhMzg0eF90ICpodywgVUlOVDE2IG1vZGUsIFVJTlQxNiBsb3dhZGRyLAorCQkJCVVJTlQxNiBoaWdoYWRkciwgVUlOVDE2IGNvZGVsZW4pCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoNSwKKwkJIm1vZGU9JWQsIGxvd2FkZHI9MHglMDR4LCBoaWdoYWRkcj0weCUwNHgsIGNvZGVsZW49JWRcbiIsCisJCW1vZGUsIGxvd2FkZHIsIGhpZ2hhZGRyLCBjb2RlbGVuKTsKKworCWNtZC5jbWQgPSAoSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RPV05MRCkgfAorCQkgICBIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQobW9kZSkpOworCisJY21kLnBhcm0wID0gbG93YWRkcjsKKwljbWQucGFybTEgPSBoaWdoYWRkcjsKKwljbWQucGFybTIgPSBjb2RlbGVuOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jb3B5X2Zyb21fYXV4CisqCisqIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgZnJvbSB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKKyogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKKyoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAorKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgorKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCWJ1ZiBjb250YWlucyB0aGUgZGF0YSBjb3BpZWQKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2NvcHlfZnJvbV9hdXgoCisJaGZhMzg0eF90ICpodywgVUlOVDMyIGNhcmRhZGRyLCBVSU5UMzIgYXV4Y3RsLCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCURCRkVOVEVSOworCVdMQU5fTE9HX0VSUk9SKCJub3QgdXNlZCBpbiBVU0IuXG4iKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcHlfdG9fYXV4CisqCisqIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgdG8gdGhlIGNvbnRyb2xsZXIgbWVtb3J5LiAgVGhlCisqIEF1eGlsaWFyeSBwb3J0IE1VU1QgYmUgZW5hYmxlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisqIFdlIF9taWdodF8gYmUgaW4gYSBkb3dubG9hZCBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgljYXJkYWRkcglhZGRyZXNzIGluIGhmYTM4NHggZGF0YSBzcGFjZSB0byByZWFkCisqCWF1eGN0bAkJYWRkcmVzcyBzcGFjZSBzZWxlY3QKKyoJYnVmCQlwdHIgdG8gZGVzdGluYXRpb24gaG9zdCBidWZmZXIKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglDb250cm9sbGVyIG1lbW9yeSBub3cgY29udGFpbnMgYSBjb3B5IG9mIGJ1ZgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK2hmYTM4NHhfY29weV90b19hdXgoCisJaGZhMzg0eF90ICpodywgVUlOVDMyIGNhcmRhZGRyLCBVSU5UMzIgYXV4Y3RsLCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCURCRkVOVEVSOworCVdMQU5fTE9HX0VSUk9SKCJub3QgdXNlZCBpbiBVU0IuXG4iKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcmVyZXNldAorKgorKiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGhmYTM4eHggTUFDIGNvcmUuICBXZSBhc3N1bWUgdGhhdCB0aGUgaHcKKyogc3RydWN0dXJlIGlzIGluIGl0cyAiY3JlYXRlZCIgc3RhdGUuICBUaGF0IGlzLCBpdCBpcyBpbml0aWFsaXplZAorKiB3aXRoIHByb3BlciB2YWx1ZXMuICBOb3RlIHRoYXQgaWYgYSByZXNldCBpcyBkb25lIGFmdGVyIHRoZQorKiBkZXZpY2UgaGFzIGJlZW4gYWN0aXZlIGZvciBhd2hpbGUsIHRoZSBjYWxsZXIgbWlnaHQgaGF2ZSB0byBjbGVhbgorKiB1cCBzb21lIGxlZnRvdmVyIGNydWZ0IGluIHRoZSBodyBzdHJ1Y3R1cmUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJaG9sZHRpbWUJaG93IGxvbmcgKGluIG1zKSB0byBob2xkIHRoZSByZXNldAorKglzZXR0bGV0aW1lCWhvdyBsb25nIChpbiBtcykgdG8gd2FpdCBhZnRlciByZWxlYXNpbmcKKyoJCQl0aGUgcmVzZXQKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpCit7CisjaWYgMAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJc3RydWN0IHVzYl9kZXZpY2UJKnBhcmVudCA9IGh3LT51c2ItPnBhcmVudDsKKwlpbnQJCQlpOworCWludAkJCXBvcnQgPSAtMTsKKyNlbmRpZgorI2VuZGlmCisJaW50IAkJCXJlc3VsdCA9IDA7CisKKworI2RlZmluZSBQMl9VU0JfUlRfUE9SVAkJKFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX09USEVSKQorI2RlZmluZSBQMl9VU0JfRkVBVF9SRVNFVAk0CisjZGVmaW5lIFAyX1VTQl9GRUFUX0NfUkVTRVQJMjAKKworCURCRkVOVEVSOworCisjaWYgMAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJLyogRmluZCB0aGUgaHViIHBvcnQgKi8KKwlmb3IgKCBpID0gMDsgaSA8IHBhcmVudC0+bWF4Y2hpbGQ7IGkrKykgeworCQlpZiAocGFyZW50LT5jaGlsZHJlbltpXSA9PSBody0+dXNiKSB7CisJCQlwb3J0ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChwb3J0IDwgMCkgcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiBTZXQgYW5kIGNsZWFyIHRoZSByZXNldCAqLworCXVzYl9jb250cm9sX21zZyhwYXJlbnQsIHVzYl9zbmRjdHJscGlwZShwYXJlbnQsIDApLAorCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCBQMl9VU0JfUlRfUE9SVCwgUDJfVVNCX0ZFQVRfUkVTRVQsCisJCXBvcnQrMSwgTlVMTCwgMCwgMSpIWik7CisJd2FpdF9tcyhob2xkdGltZSk7CisJdXNiX2NvbnRyb2xfbXNnKHBhcmVudCwgdXNiX3NuZGN0cmxwaXBlKHBhcmVudCwgMCksCisJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgUDJfVVNCX1JUX1BPUlQsIFAyX1VTQl9GRUFUX0NfUkVTRVQsCisJCXBvcnQrMSwgTlVMTCwgMCwgMSpIWik7CisJd2FpdF9tcyhzZXR0bGV0aW1lKTsKKworCS8qIFNldCB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KKwlyZXN1bHQ9dXNiX3NldF9hZGRyZXNzKGh3LT51c2IpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJyZXNldF91c2JkZXY6IERldiBub3QgYWNjZXB0aW5nIGFkZHJlc3MsICIKKwkJCSJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCWNsZWFyX2JpdChody0+dXNiLT5kZXZudW0sICZody0+dXNiLT5idXMtPmRldm1hcC5kZXZpY2VtYXApOworCQlody0+dXNiLT5kZXZudW0gPSAtMTsKKwkJZ290byBkb25lOworCX0KKwkvKiBMZXQgdGhlIGFkZHJlc3Mgc2V0dGxlICovCisJd2FpdF9tcygyMCk7CisKKwkvKiBBc3N1bWUgd2UncmUgcmV1c2luZyB0aGUgb3JpZ2luYWwgZGVzY3JpcHRvciBkYXRhICovCisKKwkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24uICovCisJV0xBTl9MT0dfREVCVUcoMywgIlNldHRpbmcgQ29uZmlndXJhdGlvbiAlZFxuIiwKKwkJaHctPnVzYi0+Y29uZmlnWzBdLmJDb25maWd1cmF0aW9uVmFsdWUpOworCXJlc3VsdD11c2Jfc2V0X2NvbmZpZ3VyYXRpb24oaHctPnVzYiwgaHctPnVzYi0+Y29uZmlnWzBdLmJDb25maWd1cmF0aW9uVmFsdWUpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigidXNiX3NldF9jb25maWd1cmF0aW9uKCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLAorCQkJCXJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisJLyogTGV0IHRoZSBjb25maWd1cmF0aW9uIHNldHRsZSAqLworCXdhaXRfbXMoMjApOworCisgZG9uZToKKyNlbHNlCisJcmVzdWx0PXVzYl9yZXNldF9kZXZpY2UoaHctPnVzYik7CisJaWYocmVzdWx0PDApIHsKKwkJV0xBTl9MT0dfRVJST1IoInVzYl9yZXNldF9kZXZpY2UoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIscmVzdWx0KTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCisJcmVzdWx0PXVzYl9yZXNldF9kZXZpY2UoaHctPnVzYik7CisJaWYocmVzdWx0PDApIHsKKwkJV0xBTl9MT0dfRVJST1IoInVzYl9yZXNldF9kZXZpY2UoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIscmVzdWx0KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jCisqCisqIFdhaXRzIGZvciBhIHN5bmNocm9ub3VzIENUTFggb2JqZWN0IHRvIGNvbXBsZXRlLAorKiBhbmQgdGhlbiBoYW5kbGVzIHRoZSByZXNwb25zZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgljdGx4CSAJQ1RMWCBwdHIKKyoJY29tcGxldG9yCWZ1bmN0b3Igb2JqZWN0IHRvIGRlY2lkZSB3aGF0IHRvCisqCQkJZG8gd2l0aCB0aGUgQ1RMWCdzIHJlc3VsdC4KKyoKKyogUmV0dXJuczoKKyoJMAkJU3VjY2VzcworKgktRVJFU1RBUlRTWVMJSW50ZXJydXB0ZWQgYnkgYSBzaWduYWwKKyoJLUVJTwkJQ1RMWCBmYWlsZWQKKyoJLUVOT0RFVgkJQWRhcHRlciB3YXMgdW5wbHVnZ2VkCisqCT8/PwkJUmVzdWx0IGZyb20gY29tcGxldG9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaGZhMzg0eF90ICpodywKKwkJCQkJIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4LAorCQkJCQkgdXNiY3RseF9jb21wbGV0b3JfdCAqY29tcGxldG9yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjdGx4LT5kb25lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBjYW4gb25seSBoYW5kbGUgdGhlIENUTFggaWYgdGhlIFVTQiBkaXNjb25uZWN0CisJICogZnVuY3Rpb24gaGFzIG5vdCBydW4geWV0IC4uLgorCSAqLworCWNsZWFudXA6CisJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwl7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJfQorCWVsc2UgaWYgKCByZXN1bHQgIT0gMCApCisJeworCQlpbnQgcnVucXVldWUgPSAwOworCisJCS8qCisJCSAqIFdlIHdlcmUgcHJvYmFibHkgaW50ZXJydXB0ZWQsIHNvIGRlbGV0ZQorCQkgKiB0aGlzIENUTFggYXN5bmNocm9ub3VzbHksIGtpbGwgdGhlIHRpbWVycworCQkgKiBhbmQgdGhlIFVSQiwgYW5kIHRoZW4gc3RhcnQgdGhlIG5leHQKKwkJICogcGVuZGluZyBDVExYLgorCQkgKgorCQkgKiBOT1RFOiBXZSBjYW4gb25seSBkZWxldGUgdGhlIHRpbWVycyBhbmQKKwkJICogICAgICAgdGhlIFVSQiBpZiB0aGlzIENUTFggaXMgYWN0aXZlLgorCQkgKi8KKwkJaWYgKGN0bHggPT0gZ2V0X2FjdGl2ZV9jdGx4KGh3KSkKKwkJeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCQkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlcXRpbWVyKTsKKwkJCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJmh3LT5yZXNwdGltZXIpOworCQkJaHctPnJlcV90aW1lcl9kb25lID0gMTsKKwkJCWh3LT5yZXNwX3RpbWVyX2RvbmUgPSAxOworCQkJdXNiX2tpbGxfdXJiKCZody0+Y3RseF91cmIpOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCQkJcnVucXVldWUgPSAxOworCisJCQkvKgorCQkJICogVGhpcyBzY2VuYXJpbyBpcyBzbyB1bmxpa2VseSB0aGF0IEknbQorCQkJICogaGFwcHkgd2l0aCBhIGdydWJieSAiZ290byIgc29sdXRpb24gLi4uCisJCQkgKi8KKwkJCWlmICggaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApCisJCQkJZ290byBjbGVhbnVwOworCQl9CisKKwkJLyoKKwkJICogVGhlIGNvbXBsZXRpb24gdGFzayB3aWxsIHNlbmQgdGhpcyBDVExYCisJCSAqIHRvIHRoZSByZWFwZXIgdGhlIG5leHQgdGltZSBpdCBydW5zLiBXZQorCQkgKiBhcmUgbm8gbG9uZ2VyIGluIGEgaHVycnkuCisJCSAqLworCQljdGx4LT5yZWFwYWJsZSA9IDE7CisJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVFfRkFJTEVEOworCQlsaXN0X21vdmVfdGFpbCgmY3RseC0+bGlzdCwgJmh3LT5jdGx4cS5jb21wbGV0aW5nKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCWlmIChydW5xdWV1ZSkKKwkJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKwl9IGVsc2UgeworCQlpZiAoY3RseC0+c3RhdGUgPT0gQ1RMWF9DT01QTEVURSkgeworCQkJcmVzdWx0ID0gY29tcGxldG9yLT5jb21wbGV0ZShjb21wbGV0b3IpOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfV0FSTklORygiQ1RMWFslZF0gZXJyb3I6IHN0YXRlKCVzKVxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICAgICAgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOworCQkJcmVzdWx0ID0gLUVJTzsKKwkJfQorCisJCWxpc3RfZGVsKCZjdGx4LT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJa2ZyZWUoY3RseCk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kb2NtZAorKgorKiBDb25zdHJ1Y3RzIGEgY29tbWFuZCBDVExYIGFuZCBzdWJtaXRzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYmNtZCgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqICAgICAgIGNtZCAgICAgICAgICAgICBjbWQgc3RydWN0dXJlLiAgSW5jbHVkZXMgYWxsIGFyZ3VtZW50cyBhbmQgcmVzdWx0CisqICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHBvaW50cy4gIEFsbCBpbiBob3N0IG9yZGVyLiBpbiBob3N0IG9yZGVyCisqCWNtZGNiCQljb21tYW5kLXNwZWNpZmljIGNhbGxiYWNrCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMsIE5VTEwKKyoJCQlmb3IgRE9BU1lOQyBjYWxscworKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FSU8JCUNUTFggZmFpbHVyZQorKgktRVJFU1RBUlRTWVMJQXdha2VuZWQgb24gc2lnbmFsCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb2NtZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwljdGx4X2NtZGNiX3QJY21kY2IsCisJY3RseF91c2VyY2JfdAl1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYuY21kcmVxLnR5cGUgPSAJaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX0NNRFJFUSk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5jbWQgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5jbWQpOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTAgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5wYXJtMCk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMSA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPnBhcm0xKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0yID0JaG9zdDJoZmEzODR4XzE2KGNtZC0+cGFybTIpOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYuY21kcmVxKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsICJjbWRyZXE6IGNtZD0weCUwNHggIgorCQkicGFybTA9MHglMDR4IHBhcm0xPTB4JTA0eCBwYXJtMj0weCUwNHhcbiIsCisJCWNtZC0+Y21kLAorCQljbWQtPnBhcm0wLAorCQljbWQtPnBhcm0xLAorCQljbWQtPnBhcm0yKTsKKworCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKKwljdGx4LT5jbWRjYiA9IGNtZGNiOworCWN0bHgtPnVzZXJjYiA9IHVzZXJjYjsKKwljdGx4LT51c2VyY2JfZGF0YSA9IHVzZXJjYl9kYXRhOworCisJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGN0bHgpOworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgY29tcGxldG9yOworCisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorCQkgICAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfY21kX2NvbXBsZXRvcigmY29tcGxldG9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYuY21kcmVzcCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZC0+cmVzdWx0KSApOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZG9ycmlkCisqCisqIENvbnN0cnVjdHMgYSByZWFkIHJpZCBDVExYIGFuZCBpc3N1ZXMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2NicnJpZCgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqCXJpZAkJUmVhZCBSSUQgbnVtYmVyIChob3N0IG9yZGVyKQorKglyaWRkYXRhCQlDYWxsZXIgc3VwcGxpZWQgYnVmZmVyIHRoYXQgTUFDIGZvcm1hdHRlZCBSSUQuZGF0YQorKgkJCXJlY29yZCB3aWxsIGJlIHdyaXR0ZW4gdG8gZm9yIERPV0FJVCBjYWxscy4gU2hvdWxkCisqCQkJYmUgTlVMTCBmb3IgRE9BU1lOQyBjYWxscy4KKyoJcmlkZGF0YWxlbglCdWZmZXIgbGVuZ3RoIGZvciBET1dBSVQgY2FsbHMuIFplcm8gZm9yIERPQVNZTkMgY2FsbHMuCisqCWNtZGNiCQljb21tYW5kIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMsIE5VTEwKKyoJCQlmb3IgRE9XQUlUIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVJTwkJQ1RMWCBmYWlsdXJlCisqCS1FUkVTVEFSVFNZUwlBd2FrZW5lZCBvbiBzaWduYWwKKyoJLUVOT0RBVEEJcmlkZGF0YWxlbiAhPSBtYWNkYXRhbGVuCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdCAoRE9BU1lOQykKKyoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG9ycmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYucnJpZHJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfUlJJRFJFUSk7CisJY3RseC0+b3V0YnVmLnJyaWRyZXEuZnJtbGVuID0KKwkJaG9zdDJoZmEzODR4XzE2KHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpKTsKKwljdGx4LT5vdXRidWYucnJpZHJlcS5yaWQgPSAgICBob3N0MmhmYTM4NHhfMTYocmlkKTsKKworCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLnJyaWRyZXEpOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwkvKiBTdWJtaXQgdGhlIENUTFggKi8KKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgeworCQl1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgY29tcGxldG9yOworCisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorCQkgICAgICAgICAgIGh3LCBjdGx4LCBpbml0X3JyaWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLnJyaWRyZXNwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZGRhdGEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlkZGF0YWxlbikgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2Rvd3JpZAorKgorKiBDb25zdHJ1Y3RzIGEgd3JpdGUgcmlkIENUTFggYW5kIGlzc3VlcyBpdC4KKyoKKyogTk9URTogQW55IGNoYW5nZXMgdG8gdGhlICdwb3N0LXN1Ym1pdCcgY29kZSBpbiB0aGlzIGZ1bmN0aW9uCisqICAgICAgIG5lZWQgdG8gYmUgY2FycmllZCBvdmVyIHRvIGhmYTM4NHhfY2J3cmlkKCkgc2luY2UgdGhlIGhhbmRsaW5nCisqICAgICAgIGlzIHZpcnR1YWxseSBpZGVudGljYWwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJQ01EX01PREUJRE9XQUlUIG9yIERPQVNZTkMKKyoJcmlkCQlSSUQgY29kZQorKglyaWRkYXRhCQlEYXRhIHBvcnRpb24gb2YgUklEIGZvcm1hdHRlZCBmb3IgTUFDCisqCXJpZGRhdGFsZW4JTGVuZ3RoIG9mIHRoZSBkYXRhIHBvcnRpb24gaW4gYnl0ZXMKKyogICAgICAgY21kY2IgICAgICAgICAgIGNvbW1hbmQgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiCQl1c2VyIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYl9kYXRhCXVzZXIgc3VwcGxpZWQgZGF0YSBwb2ludGVyIGZvciBhc3luYyBjYWxscworKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FVElNRURPVVQJdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZ2lzdGVyIHJlYWR5IG9yCisqCQkJY29tbWFuZCBjb21wbGV0aW9uCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdCAoRE9BU1lOQykKKyoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG93cmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi53cmlkcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9XUklEUkVRKTsKKwljdGx4LT5vdXRidWYud3JpZHJlcS5mcm1sZW4gPSBob3N0MmhmYTM4NHhfMTYoCisJCQkJCShzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEucmlkKSArCisJCQkJCXJpZGRhdGFsZW4gKyAxKSAvIDIpOworCWN0bHgtPm91dGJ1Zi53cmlkcmVxLnJpZCA9ICAgIGhvc3QyaGZhMzg0eF8xNihyaWQpOworCW1lbWNweShjdGx4LT5vdXRidWYud3JpZHJlcS5kYXRhLCByaWRkYXRhLCByaWRkYXRhbGVuKTsKKworCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSkgKworCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuKSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5yaWQpICsKKwkgICAgICAgICAgICAgICAgICAgcmlkZGF0YWxlbjsKKworCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKKwljdGx4LT5jbWRjYiA9IGNtZGNiOworCWN0bHgtPnVzZXJjYiA9IHVzZXJjYjsKKwljdGx4LT51c2VyY2JfZGF0YSA9IHVzZXJjYl9kYXRhOworCisJLyogU3VibWl0IHRoZSBDVExYICovCisJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGN0bHgpOworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF93cmlkX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKKwkJaGZhMzg0eF9jbWRyZXN1bHRfdCB3cmlkcmVzdWx0OworCisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorCQkgICAgICAgICAgICAgICBodywKKwkJICAgICAgICAgICAgICAgY3RseCwKKwkJICAgICAgICAgICAgICAgaW5pdF93cmlkX2NvbXBsZXRvcigmY29tcGxldG9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi53cmlkcmVzcCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpZHJlc3VsdCkgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kb3JtZW0KKyoKKyogQ29uc3RydWN0cyBhIHJlYWRtZW0gQ1RMWCBhbmQgaXNzdWVzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYnJtZW0oKSBzaW5jZSB0aGUgaGFuZGxpbmcKKyogICAgICAgaXMgdmlydHVhbGx5IGlkZW50aWNhbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltb2RlCQlET1dBSVQgb3IgRE9BU1lOQworKglwYWdlCQlNQUMgYWRkcmVzcyBzcGFjZSBwYWdlIChDTUQgZm9ybWF0KQorKglvZmZzZXQJCU1BQyBhZGRyZXNzIHNwYWNlIG9mZnNldAorKglkYXRhCQlQdHIgdG8gZGF0YSBidWZmZXIgdG8gcmVjZWl2ZSByZWFkCisqCWxlbgkJTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHJlYWQgKG1heCA9PSAyMDQ4KQorKgljbWRjYgkJY29tbWFuZCBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2IJCXVzZXIgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiX2RhdGEJdXNlciBzdXBwbGllZCBkYXRhIHBvaW50ZXIgZm9yIGFzeW5jIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET0FTWU5DKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3JtZW0oCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglwYWdlLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqZGF0YSwKKwlVSU5UCWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYucm1lbXJlcS50eXBlID0gICAgaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1JNRU1SRVEpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiA9ICBob3N0MmhmYTM4NHhfMTYoCisJCQkJCXNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQpICsKKwkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UpICsKKwkJCQkJbGVuKTsKKwljdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQgPQlob3N0MmhmYTM4NHhfMTYob2Zmc2V0KTsKKwljdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlID0JaG9zdDJoZmEzODR4XzE2KHBhZ2UpOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcSk7CisKKwlXTEFOX0xPR19ERUJVRyg0LAorCQkidHlwZT0weCUwNHggZnJtbGVuPSVkIG9mZnNldD0weCUwNHggcGFnZT0weCUwNHhcbiIsCisJCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUsCisJCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiwKKwkJY3RseC0+b3V0YnVmLnJtZW1yZXEub2Zmc2V0LAorCQljdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsInBrdHNpemU9JXpkXG4iLAorCQlST1VORFVQNjQoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxKSkpOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmICggbW9kZSA9PSBET1dBSVQgKSB7CisgICAgICAgICAgICAgICAgdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfcm1lbV9jb21wbGV0b3IoJmNvbXBsZXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5ybWVtcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pICk7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2Rvd21lbQorKgorKiBDb25zdHJ1Y3RzIGEgd3JpdGVtZW0gQ1RMWCBhbmQgaXNzdWVzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYndtZW0oKSBzaW5jZSB0aGUgaGFuZGxpbmcKKyogICAgICAgaXMgdmlydHVhbGx5IGlkZW50aWNhbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltb2RlCQlET1dBSVQgb3IgRE9BU1lOQworKglwYWdlCQlNQUMgYWRkcmVzcyBzcGFjZSBwYWdlIChDTUQgZm9ybWF0KQorKglvZmZzZXQJCU1BQyBhZGRyZXNzIHNwYWNlIG9mZnNldAorKglkYXRhCQlQdHIgdG8gZGF0YSBidWZmZXIgY29udGFpbmluZyB3cml0ZSBkYXRhCisqCWxlbgkJTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHJlYWQgKG1heCA9PSAyMDQ4KQorKgljbWRjYgkJY29tbWFuZCBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2IJCXVzZXIgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiX2RhdGEJdXNlciBzdXBwbGllZCBkYXRhIHBvaW50ZXIgZm9yIGFzeW5jIGNhbGxzLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FVElNRURPVVQJdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZ2lzdGVyIHJlYWR5IG9yCisqCQkJY29tbWFuZCBjb21wbGV0aW9uCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdCAoRE9XQUlUKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3dtZW0oCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglwYWdlLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqZGF0YSwKKwlVSU5UCWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoNSwgInBhZ2U9MHglMDR4IG9mZnNldD0weCUwNHggbGVuPSVkXG4iLAorCQlwYWdlLG9mZnNldCxsZW4pOworCisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYud21lbXJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfV01FTVJFUSk7CisJY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuID0gaG9zdDJoZmEzODR4XzE2KAorCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCisJCQkJCXNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArCisJCQkJCWxlbik7CisJY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0ID0gaG9zdDJoZmEzODR4XzE2KG9mZnNldCk7CisJY3RseC0+b3V0YnVmLndtZW1yZXEucGFnZSA9ICAgaG9zdDJoZmEzODR4XzE2KHBhZ2UpOworCW1lbWNweShjdGx4LT5vdXRidWYud21lbXJlcS5kYXRhLCBkYXRhLCBsZW4pOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS50eXBlKSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5mcm1sZW4pICsKKwkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLm9mZnNldCkgKworCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEucGFnZSkgKworCSAgICAgICAgICAgICAgICAgICBsZW47CisKKwljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CisJY3RseC0+Y21kY2IgPSBjbWRjYjsKKwljdGx4LT51c2VyY2IgPSB1c2VyY2I7CisJY3RseC0+dXNlcmNiX2RhdGEgPSB1c2VyY2JfZGF0YTsKKworCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlrZnJlZShjdGx4KTsKKwl9IGVsc2UgaWYgKCBtb2RlID09IERPV0FJVCApIHsKKyAgICAgICAgICAgICAgICB1c2JjdGx4X3dtZW1fY29tcGxldG9yX3QgY29tcGxldG9yOworICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3Qgd21lbXJlc3VsdDsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF93bWVtX2NvbXBsZXRvcigmY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLndtZW1yZXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndtZW1yZXN1bHQpICk7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzCisqCisqIFNlbmQgYSBjb21tdGFsbGllcyBpbnF1aXJ5IHRvIHRoZSBNQUMuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiBhc3luYworKiBjYWxsIHRoYXQgd2lsbCByZXN1bHQgaW4gYW4gaW5mbyBmcmFtZSBhcnJpdmluZyBzb21ldGltZSBsYXRlci4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlzdWNjZXNzLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3ICkKK3sKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5ROworCWNtZC5wYXJtMCA9IEhGQTM4NHhfSVRfQ09NTVRBTExJRVM7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJaGZhMzg0eF9kb2NtZF9hc3luYyhodywgJmNtZCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZGlzYWJsZQorKgorKiBJc3N1ZXMgdGhlIGRpc2FibGUgY29tbWFuZCB0byBzdG9wIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLiAgT25seSBtYWNwb3J0IDAgaXMgdmFsaWQgIGZvciBzdGF0aW9ucy4KKyogQVBzIG1heSBhbHNvIGRpc2FibGUgbWFjcG9ydHMgMS02LiAgT25seSBwb3J0cyB0aGF0IGhhdmUgYmVlbgorKiBwcmV2aW91c2x5IGVuYWJsZWQgbWF5IGJlIGRpc2FibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlciAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKwlpZiAoKCFody0+aXNhcCAmJiBtYWNwb3J0ICE9IDApIHx8CisJICAgIChody0+aXNhcCAmJiAhKG1hY3BvcnQgPD0gSEZBMzg0eF9QT1JUSURfTUFYKSkgfHwKKwkgICAgIShody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSApeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rpc2FibGUoaHcsIG1hY3BvcnQpOworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDA7CisJCX0KKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZW5hYmxlCisqCisqIElzc3VlcyB0aGUgZW5hYmxlIGNvbW1hbmQgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLiAgT25seSBtYWNwb3J0IDAgaXMgdmFsaWQgIGZvciBzdGF0aW9ucy4KKyogQVBzIG1heSBhbHNvIGVuYWJsZSBtYWNwb3J0cyAxLTYuICBPbmx5IHBvcnRzIHRoYXQgYXJlIGN1cnJlbnRseQorKiBkaXNhYmxlZCBtYXkgYmUgZW5hYmxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltYWNwb3J0CQlNQUMgcG9ydCBudW1iZXIKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAoaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSkgKXsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9lbmFibGUoaHcsIG1hY3BvcnQpOworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDE7CisJCX0KKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUKKyoKKyogQmVnaW5zIHRoZSBmbGFzaCBkb3dubG9hZCBzdGF0ZS4gIENoZWNrcyB0byBzZWUgdGhhdCB3ZSdyZSBub3QKKyogYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlIGFuZCB0aGF0IGEgcG9ydCBpc24ndCBlbmFibGVkLgorKiBTZXRzIHRoZSBkb3dubG9hZCBzdGF0ZSBhbmQgcmV0cmlldmVzIHRoZSBmbGFzaCBkb3dubG9hZAorKiBidWZmZXIgbG9jYXRpb24sIGJ1ZmZlciBzaXplLCBhbmQgdGltZW91dCBsZW5ndGguCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCWk7CisKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7CisJCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5idWZpbmZvLnBhZ2UgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ucGFnZSk7CisJaHctPmJ1ZmluZm8ub2Zmc2V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLm9mZnNldCk7CisJaHctPmJ1ZmluZm8ubGVuID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLmxlbik7CisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwKKwkJCQkmKGh3LT5kbHRpbWVvdXQpKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5kbHRpbWVvdXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmRsdGltZW91dCk7CisKKwlXTEFOX0xPR19ERUJVRygxLCJmbGFzaGRsX2VuYWJsZVxuIik7CisKKwlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQ7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlCisqCisqIEVuZHMgdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSB0aGUgTUFDCisqIGZpcm13YXJlIHRvIHJlc3RhcnQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19ERUJVRygxLCJmbGFzaGRsX2VuYWJsZVxuIik7CisKKwkvKiBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50LCBzbyBJIGRvbid0ICovCisJLyogIGJvdGhlciAgdy8gdGhlIHJldHVybiB2YWx1ZSAqLworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAgLCAwKTsKKwlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlCisqCisqIFBlcmZvcm1zIGEgRkxBU0ggZG93bmxvYWQgb2YgYSBjaHVuayBvZiBkYXRhLiBGaXJzdCBjaGVja3MgdG8gc2VlCisqIHRoYXQgd2UncmUgaW4gdGhlIEZMQVNIIGRvd25sb2FkIHN0YXRlLCB0aGVuIHNldHMgdGhlIGRvd25sb2FkCisqIG1vZGUsIHVzZXMgdGhlIGF1eCBmdW5jdGlvbnMgdG8gMSkgY29weSB0aGUgZGF0YSB0byB0aGUgZmxhc2gKKyogYnVmZmVyLCAyKSBzZXRzIHRoZSBkb3dubG9hZCAnd3JpdGUgZmxhc2gnIG1vZGUsIDMpIHJlYWRiYWNrIGFuZAorKiBjb21wYXJlLiAgTGF0aGVyIHJpbnNlLCByZXBlYXQgYXMgbWFueSB0aW1lcyBhbiBuZWNlc3NhcnkgdG8gZ2V0CisqIGFsbCB0aGUgZ2l2ZW4gZGF0YSBpbnRvIGZsYXNoLgorKiBXaGVuIGFsbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdXNpbmcgdGhpcyBmdW5jdGlvbiAocG9zc2libHkKKyogcmVwZWF0ZWRseSksIGNhbGwgZHJ2cl9mbGFzaGRsX2Rpc2FibGUoKSB0byBlbmQgdGhlIGRvd25sb2FkIHN0YXRlCisqIGFuZCByZXN0YXJ0IHRoZSBNQUMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZGFkZHIJCUNhcmQgYWRkcmVzcyB0byB3cml0ZSB0by4gKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJUHRyIHRvIGRhdGEgdG8gd3JpdGUuCisqCWxlbgkJTGVuZ3RoIG9mIGRhdGEgKGhvc3Qgb3JkZXIpLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKAorCWhmYTM4NHhfdAkqaHcsCisJVUlOVDMyCQlkYWRkciwKKwl2b2lkCQkqYnVmLAorCVVJTlQzMgkJbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMzIJCWRsYnVmYWRkcjsKKwlpbnQJCW5idXJuczsKKwlVSU5UMzIJCWJ1cm5sZW47CisJVUlOVDMyCQlidXJuZGFkZHI7CisJVUlOVDE2CQlidXJubG87CisJVUlOVDE2CQlidXJuaGk7CisJaW50CQlud3JpdGVzOworCVVJTlQ4CQkqd3JpdGVidWY7CisJVUlOVDE2CQl3cml0ZXBhZ2U7CisJVUlOVDE2CQl3cml0ZW9mZnNldDsKKwlVSU5UMzIJCXdyaXRlbGVuOworCWludAkJaTsKKwlpbnQJCWo7CisKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRyg1LCJkYWRkcj0weCUwOHggbGVuPSVkXG4iLCBkYWRkciwgbGVuKTsKKworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19JTkZPKCJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKworCS8qIENvbnZlcnQgdG8gZmxhdCBhZGRyZXNzIGZvciBhcml0aG1ldGljICovCisJLyogTk9URTogZGxidWZmZXIgUklEIHN0b3JlcyB0aGUgYWRkcmVzcyBpbiBBVVggZm9ybWF0ICovCisJZGxidWZhZGRyID0gSEZBMzg0eF9BRERSX0FVWF9NS0ZMQVQoCisJCQlody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQpOworCVdMQU5fTE9HX0RFQlVHKDUsCisJCSJkbGJ1Zi5wYWdlPTB4JTA0eCBkbGJ1Zi5vZmZzZXQ9MHglMDR4IGRsYnVmYWRkcj0weCUwOHhcbiIsCisJCWh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCwgZGxidWZhZGRyKTsKKworI2lmIDAKK1dMQU5fTE9HX1dBUk5JTkcoImRsYnVmQDB4JTA2bHggbGVuPSVkIHRvPSVkXG4iLCBkbGJ1ZmFkZHIsIGh3LT5idWZpbmZvLmxlbiwgaHctPmRsdGltZW91dCk7CisjZW5kaWYKKwkvKiBDYWxjdWxhdGlvbnMgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGZpbGxzIG9mIHRoZSBkbGJ1ZmZlciB0byBkbworCSAqIGFuZCBob3cgbWFueSBVU0Igd21lbXJlcSdzIHRvIGRvIGZvciBlYWNoIGZpbGwuICBBdCB0aGlzIHBvaW50CisJICogaW4gdGltZSwgdGhlIGRsYnVmZmVyIHNpemUgYW5kIHRoZSB3bWVtcmVxIHNpemUgYXJlIHRoZSBzYW1lLgorCSAqIFRoZXJlZm9yZSwgbndyaXRlcyBzaG91bGQgYWx3YXlzIGJlIDEuICBUaGUgZXh0cmEgY29tcGxleGl0eQorCSAqIGhlcmUgaXMgYSBoZWRnZSBhZ2FpbnN0IGZ1dHVyZSBjaGFuZ2VzLgorCSAqLworCisJLyogRmlndXJlIG91dCBob3cgbWFueSB0aW1lcyB0byBkbyB0aGUgZmxhc2ggcHJvZ3JhbW1pbmcgKi8KKwluYnVybnMgPSBsZW4gLyBody0+YnVmaW5mby5sZW47CisJbmJ1cm5zICs9IChsZW4gJSBody0+YnVmaW5mby5sZW4pID8gMSA6IDA7CisKKwkvKiBGb3IgZWFjaCBmbGFzaCBwcm9ncmFtIGN5Y2xlLCBob3cgbWFueSBVU0Igd21lbXJlcSdzIGFyZSBuZWVkZWQ/ICovCisJbndyaXRlcyA9IGh3LT5idWZpbmZvLmxlbiAvIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKKwlud3JpdGVzICs9IChody0+YnVmaW5mby5sZW4gJSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pID8gMSA6IDA7CisKKwkvKiBGb3IgZWFjaCBidXJuICovCisJZm9yICggaSA9IDA7IGkgPCBuYnVybnM7IGkrKykgeworCQkvKiBHZXQgdGhlIGRlc3QgYWRkcmVzcyBhbmQgbGVuICovCisJCWJ1cm5sZW4gPSAobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKSA+IGh3LT5idWZpbmZvLmxlbiA/CisJCQkJaHctPmJ1ZmluZm8ubGVuIDoKKwkJCQkobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKTsKKwkJYnVybmRhZGRyID0gZGFkZHIgKyAoaHctPmJ1ZmluZm8ubGVuICogaSk7CisJCWJ1cm5sbyA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoYnVybmRhZGRyKTsKKwkJYnVybmhpID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoYnVybmRhZGRyKTsKKworCQlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsCisJCQlidXJubGVuLCBidXJuZGFkZHIpOworCisJCS8qIFNldCB0aGUgZG93bmxvYWQgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9OViwKKwkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoImRvd25sb2FkKE5WLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKKwkJCWdvdG8gZXhpdF9wcm9jOworCQl9CisKKwkJLyogY29weSB0aGUgZGF0YSB0byB0aGUgZmxhc2ggZG93bmxvYWQgYnVmZmVyICovCisJCWZvciAoIGo9MDsgaiA8IG53cml0ZXM7IGorKykgeworCQkJd3JpdGVidWYgPSBidWYgKworCQkJCShpKmh3LT5idWZpbmZvLmxlbikgKworCQkJCShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisKKwkJCXdyaXRlcGFnZSA9IEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKAorCQkJCQlkbGJ1ZmFkZHIgKworCQkJCQkoaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pKTsKKwkJCXdyaXRlb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRigKKwkJCQkJZGxidWZhZGRyICsKKwkJCQkJKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSk7CisKKwkJCXdyaXRlbGVuID0gYnVybmxlbi0oaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQkJd3JpdGVsZW4gPSB3cml0ZWxlbiAgPiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4gPworCQkJCQlIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4gOgorCQkJCQl3cml0ZWxlbjsKKworCQkJcmVzdWx0ID0gaGZhMzg0eF9kb3dtZW1fd2FpdCggaHcsCisJCQkJCXdyaXRlcGFnZSwKKwkJCQkJd3JpdGVvZmZzZXQsCisJCQkJCXdyaXRlYnVmLAorCQkJCQl3cml0ZWxlbiApOworI2lmIDAKKworQ29tbWVudCBvdXQgZm9yIGRlYnVnZ2luZywgYXNzdW1lIHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bC4KKwkJCWlmIChyZXN1bHQpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkJIldyaXRlIHRvIGRsIGJ1ZmZlciBmYWlsZWQsICIKKwkJCQkJInJlc3VsdD0weCUwNHguIEFib3J0aW5nLlxuIiwKKwkJCQkJcmVzdWx0KTsKKwkJCQlnb3RvIGV4aXRfcHJvYzsKKwkJCX0KKyNlbmRpZgorCisJCX0KKworCQkvKiBzZXQgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywKKwkJCQlIRkEzODR4X1BST0dNT0RFX05WV1JJVEUsCisJCQkJMCwwLDApOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSJkb3dubG9hZChOVldSSVRFLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKKwkJCWdvdG8gZXhpdF9wcm9jOworCQl9CisKKwkJLyogVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkbyBhIHJlYWRiYWNrIGFuZCBjb21wYXJlLiAqLworCX0KKworZXhpdF9wcm9jOgorCisJLyogTGVhdmUgdGhlIGZpcm13YXJlIGluIHRoZSAncG9zdC1wcm9nJyBtb2RlLiAgZmxhc2hkbF9kaXNhYmxlIHdpbGwgKi8KKwkvKiAgYWN0dWFsbHkgZGlzYWJsZSBwcm9ncmFtbWluZyBtb2RlLiAgUmVtZW1iZXIsIHRoYXQgd2lsbCBjYXVzZSB0aGUgKi8KKwkvKiAgdGhlIGZpcm13YXJlIHRvIGVmZmVjdGl2ZWx5IHJlc2V0IGl0c2VsZi4gKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2dldGNvbmZpZworKgorKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgbmVjZXNzYXJ5IHRvIHJlYWQgYSBjb25maWcvaW5mbyBpdGVtLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJpZAkJY29uZmlnL2luZm8gcmVjb3JkIGlkIChob3N0IG9yZGVyKQorKglidWYJCWhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyLiAgVXBvbiByZXR1cm4gaXQgd2lsbAorKgkJCWNvbnRhaW4gdGhlIGJvZHkgcG9ydGlvbiBvZiB0aGUgcmVjb3JkIChtaW51cyB0aGUKKyoJCQlSSUQgYW5kIGxlbikuCisqCWxlbgkJYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMsIHNob3VsZCBtYXRjaCByZWNvcmQgbGVuZ3RoKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgktRU5PREFUQSAJbGVuZ3RoIG1pc21hdGNoIGJldHdlZW4gYXJndW1lbnQgYW5kIHJldHJpZXZlZAorKgkJCXJlY29yZC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCWludCAJCQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvcnJpZF93YWl0KGh3LCByaWQsIGJ1ZiwgbGVuKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jCisgKgorICogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byBwZXJmb3JtIGFuIGFzeW5jIHJlYWQgb2YKKyAqIG9mIGEgY29uZmlnL2luZm8gaXRlbS4KKyAqCisgKiBBcmd1bWVudHM6CisgKiAgICAgICBodyAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdHVyZQorICogICAgICAgcmlkICAgICAgICAgICAgIGNvbmZpZy9pbmZvIHJlY29yZCBpZCAoaG9zdCBvcmRlcikKKyAqICAgICAgIGJ1ZiAgICAgICAgICAgICBob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlci4gIFVwb24gcmV0dXJuIGl0IHdpbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSBib2R5IHBvcnRpb24gb2YgdGhlIHJlY29yZCAobWludXMgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgUklEIGFuZCBsZW4pLgorICogICAgICAgbGVuICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzLCBzaG91bGQgbWF0Y2ggcmVjb3JkIGxlbmd0aCkKKyAqICAgICAgIGNiZm4gICAgICAgICAgICBjYWxsZXIgc3VwcGxpZWQgY2FsbGJhY2ssIGNhbGxlZCB3aGVuIHRoZSBjb21tYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgaXMgZG9uZSAoc3VjY2Vzc2Z1bCBvciBub3QpLgorICogICAgICAgY2JmbmRhdGEgICAgICAgIHBvaW50ZXIgdG8gc29tZSBjYWxsZXIgc3VwcGxpZWQgZGF0YSB0aGF0IHdpbGwgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIGNiZm4uCisgKgorICogUmV0dXJuczoKKyAqICAgICAgIG5vdGhpbmcgICAgICAgICB0aGUgY2JmbiBnZXRzIGEgc3RhdHVzIGFyZ3VtZW50IGlkZW50aWZ5aW5nIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgYW55IGVycm9ycyBvY2N1ci4KKyAqIFNpZGUgZWZmZWN0czoKKyAqICAgICAgIFF1ZXVlcyBhbiBoZmEzODR4X3VzYmNtZF90IGZvciBzdWJzZXF1ZW50IGV4ZWN1dGlvbi4KKyAqCisgKiBDYWxsIGNvbnRleHQ6CisgKiAgICAgICBBbnkKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX2dldGNvbmZpZ19hc3luYygKKyAgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodywKKyAgICAgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgIHJpZCwKKyAgICAgICAgIGN0bHhfdXNlcmNiX3QgICAgICAgICAgIHVzZXJjYiwKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICp1c2VyY2JfZGF0YSkKK3sKKyAgICAgICAgIHJldHVybiBoZmEzODR4X2RvcnJpZF9hc3luYyhodywgcmlkLCBOVUxMLCAwLAorCQkJCSAgICAgaGZhMzg0eF9jYl9ycmlkLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jCisgKgorICogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byB3cml0ZSBhIGNvbmZpZy9pbmZvIGl0ZW0uCisgKgorICogQXJndW1lbnRzOgorICogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyAqICAgICAgIHJpZCAgICAgICAgICAgICBjb25maWcvaW5mbyByZWNvcmQgaWQgKGluIGhvc3Qgb3JkZXIpCisgKiAgICAgICBidWYgICAgICAgICAgICAgaG9zdCBzaWRlIHJlY29yZCBidWZmZXIKKyAqICAgICAgIGxlbiAgICAgICAgICAgICBidWZmZXIgbGVuZ3RoIChpbiBieXRlcykKKyAqICAgICAgIHVzZXJjYiAgICAgICAgICBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiAgICAgICB1c2VyY2JfZGF0YSAgICAgY29tcGxldGlvbiBjYWxsYmFjayBhcmd1bWVudAorICoKKyAqIFJldHVybnM6CisgKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworICogICAgICAgPjAgICAgICAgICAgICAgIGYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorICogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorICoKKyAqIFNpZGUgZWZmZWN0czoKKyAqCisgKiBDYWxsIGNvbnRleHQ6CisgKiAgICAgICBwcm9jZXNzCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoCisgICAgICAgICBoZmEzODR4X3QgICAgICAgKmh3LAorICAgICAgICAgVUlOVDE2ICAgICAgICAgIHJpZCwKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAqYnVmLAorICAgICAgICAgVUlOVDE2ICAgICAgICAgIGxlbiwKKyAgICAgICAgIGN0bHhfdXNlcmNiX3QgICB1c2VyY2IsCisgICAgICAgICB2b2lkICAgICAgICAgICAgKnVzZXJjYl9kYXRhKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZF9hc3luYyhodywgcmlkLCBidWYsIGxlbiwKKwkJCQkgICAgaGZhMzg0eF9jYl9zdGF0dXMsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2hhbmRvdmVyCisqCisqIFNlbmRzIGEgaGFuZG92ZXIgbm90aWZpY2F0aW9uIHRvIHRoZSBNQUMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYWRkcgkJYWRkcmVzcyBvZiBzdGF0aW9uIHRoYXQncyBsZWZ0CisqCisqIFJldHVybnM6CisqCXplcm8JCXN1Y2Nlc3MuCisqCS1FUkVTVEFSVFNZUwlyZWNlaXZlZCBzaWduYWwgd2hpbGUgd2FpdGluZyBmb3Igc2VtYXBob3JlLgorKgktRUlPCQlmYWlsZWQgdG8gd3JpdGUgdG8gYmFwLCBvciBmYWlsZWQgaW4gY21kLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2hhbmRvdmVyKCBoZmEzODR4X3QgKmh3LCBVSU5UOCAqYWRkcikKK3sKKyAgICAgICAgREJGRU5URVI7CisJV0xBTl9MT0dfRVJST1IoIk5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIFVTQiFcbiIpOworCURCRkVYSVQ7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbG93X2xldmVsCisqCisqIFdyaXRlIHRlc3QgY29tbWFuZHMgdG8gdGhlIGNhcmQuICBTb21lIHRlc3QgY29tbWFuZHMgZG9uJ3QgbWFrZQorKiBzZW5zZSB3aXRob3V0IHByaW9yIHNldC11cC4gIEZvciBleGFtcGxlLCBjb250aW5vdXMgVFggaXNuJ3QgdmVyeQorKiB1c2VmdWwgdW50aWwgeW91IHNldCB0aGUgY2hhbm5lbC4gIFRoYXQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgcHJvY2VzcyB0aHJlYWQKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCkKK3sKKwlpbnQgICAgICAgICAgICAgcmVzdWx0OworCURCRkVOVEVSOworCisJLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsIGNtZCk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbW1pX3JlYWQKKyoKKyogUmVhZCBtbWkgcmVnaXN0ZXJzLiAgbW1pIGlzIGludGVyc2lsLXNwZWFrIGZvciB0aGUgYmFzZWJhbmQKKyogcHJvY2Vzc29yIHJlZ2lzdGVycy4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBodyAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdHVyZQorKiAgICAgICByZWdpc3RlciAgICAgICAgVGhlIHRlc3QgcmVnaXN0ZXIgdG8gYmUgYWNjZXNzZWQgKG11c3QgYmUgZXZlbiAjKS4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgICAgICAgICAgICAgIHN1Y2Nlc3MKKyogICAgICAgPjAgICAgICAgICAgICAgIGYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKiAgICAgICA8MCAgICAgICAgICAgICAgZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKiAgICAgICBwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfbW1pX3JlYWQoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHIsIFVJTlQzMiAqcmVzcCkKK3sKKyNpZiAwCisgICAgICAgIGludCAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICBVSU5UMTYgIGNtZF9jb2RlID0gKFVJTlQxNikgMHgzMDsKKyAgICAgICAgVUlOVDE2IHBhcmFtID0gKFVJTlQxNikgYWRkcjsKKyAgICAgICAgREJGRU5URVI7CisKKyAgICAgICAgLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kX2NvZGUpOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKK3JldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX21taV93cml0ZQorKgorKiBSZWFkIG1taSByZWdpc3RlcnMuICBtbWkgaXMgaW50ZXJzaWwtc3BlYWsgZm9yIHRoZSBiYXNlYmFuZAorKiBwcm9jZXNzb3IgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIGFkZHIgICAgICAgICAgICBUaGUgdGVzdCByZWdpc3RlciB0byBiZSBhY2Nlc3NlZCAobXVzdCBiZSBldmVuICMpLgorKiAgICAgICBkYXRhICAgICAgICAgICAgVGhlIGRhdGEgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqICAgICAgIDwwICAgICAgICAgICAgICBkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgIHByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQKK2hmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHIsIFVJTlQzMiBkYXRhKQoreworI2lmIDAKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIFVJTlQxNiAgY21kX2NvZGUgPSAoVUlOVDE2KSAweDMxOworICAgICAgICBVSU5UMTYgcGFyYW0wID0gKFVJTlQxNikgYWRkcjsKKyAgICAgICAgVUlOVDE2IHBhcmFtMSA9IChVSU5UMTYpIGRhdGE7CisgICAgICAgIERCRkVOVEVSOworCisgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsIm1taSB3cml0ZSA6IGFkZHIgPSAweCUwOGx4XG4iLCBhZGRyKTsKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwibW1pIHdyaXRlIDogZGF0YSA9IDB4JTA4bHhcbiIsIGRhdGEpOworCisgICAgICAgIC8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLworICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsIGNtZF9jb2RlKTsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCityZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJV0xBTl9MT0dfREVCVUcoMywicmFtZGxfZGlzYWJsZSgpXG4iKTsKKworCS8qIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQsIHNvIEkgZG9uJ3QgKi8KKwkvKiAgYm90aGVyICB3LyB0aGUgcmV0dXJuIHZhbHVlICovCisJaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCAsIDApOworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZQorKgorKiBCZWdpbnMgdGhlIHJhbSBkb3dubG9hZCBzdGF0ZS4gIENoZWNrcyB0byBzZWUgdGhhdCB3ZSdyZSBub3QKKyogYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlIGFuZCB0aGF0IGEgcG9ydCBpc24ndCBlbmFibGVkLgorKiBTZXRzIHRoZSBkb3dubG9hZCBzdGF0ZSBhbmQgY2FsbHMgY21kX2Rvd25sb2FkIHdpdGggdGhlCisqIEVOQUJMRV9WT0xBVElMRSBzdWJjb21tYW5kIGFuZCB0aGUgZXhlYWRkciBhcmd1bWVudC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglleGVhZGRyCQl0aGUgY2FyZCBleGVjdXRpb24gYWRkcmVzcyB0aGF0IHdpbGwgYmUKKyogICAgICAgICAgICAgICAgICAgICAgIGp1bXBlZCB0byB3aGVuIHJhbWRsX2Rpc2FibGUoKSBpcyBjYWxsZWQKKyoJCQkoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgZXhlYWRkcikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQlsb3dhZGRyOworCVVJTlQxNgkJaGlhZGRyOworCWludAkJaTsKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7CisJCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSJDYW4ndCBkb3dubG9hZCB3aXRoIGEgbWFjcG9ydCBlbmFibGVkLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEICkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJEb3dubG9hZCBzdGF0ZSBub3QgZGlzYWJsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJV0xBTl9MT0dfREVCVUcoMywicmFtZGxfZW5hYmxlLCBleGVhZGRyPTB4JTA4eFxuIiwgZXhlYWRkcik7CisKKwkvKiBDYWxsIHRoZSBkb3dubG9hZCgxLGFkZHIpIGZ1bmN0aW9uICovCisJbG93YWRkciA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoZXhlYWRkcik7CisJaGlhZGRyID0gIEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGV4ZWFkZHIpOworCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfUkFNLAorCQkJbG93YWRkciwgaGlhZGRyLCAwKTsKKworCWlmICggcmVzdWx0ID09IDApIHsKKwkJLyogU2V0IHRoZSBkb3dubG9hZCBzdGF0ZSAqLworCQlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY21kX2Rvd25sb2FkKDB4JTA0eCwgMHglMDR4KSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCQlsb3dhZGRyLAorCQkJaGlhZGRyLAorCQkJcmVzdWx0KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZQorKgorKiBQZXJmb3JtcyBhIFJBTSBkb3dubG9hZCBvZiBhIGNodW5rIG9mIGRhdGEuIEZpcnN0IGNoZWNrcyB0byBzZWUKKyogdGhhdCB3ZSdyZSBpbiB0aGUgUkFNIGRvd25sb2FkIHN0YXRlLCB0aGVuIHVzZXMgdGhlIFtyZWFkfHdyaXRlXW1lbSBVU0IKKyogY29tbWFuZHMgdG8gMSkgY29weSB0aGUgZGF0YSwgMikgcmVhZGJhY2sgYW5kIGNvbXBhcmUuICBUaGUgZG93bmxvYWQKKyogc3RhdGUgaXMgdW5hZmZlY3RlZC4gIFdoZW4gYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB1c2luZworKiB0aGlzIGZ1bmN0aW9uLCBjYWxsIGRydnJfcmFtZGxfZGlzYWJsZSgpIHRvIGVuZCB0aGUgZG93bmxvYWQgc3RhdGUKKyogYW5kIHJlc3RhcnQgdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglkYWRkcgkJQ2FyZCBhZGRyZXNzIHRvIHdyaXRlIHRvLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlQdHIgdG8gZGF0YSB0byB3cml0ZS4KKyoJbGVuCQlMZW5ndGggb2YgZGF0YSAoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCW53cml0ZXM7CisJVUlOVDgJCSpkYXRhID0gYnVmOworCWludAkJaTsKKwlVSU5UMzIJCWN1cnJhZGRyOworCVVJTlQxNgkJY3VycnBhZ2U7CisJVUlOVDE2CQljdXJyb2Zmc2V0OworCVVJTlQxNgkJY3VycmxlbjsKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSByYW0gZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIHJhbSBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKworCS8qIEhvdyBtYW55IGRvd21lbSBjYWxscz8gICovCisJbndyaXRlcyA9IGxlbiAvIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKKwlud3JpdGVzICs9IGxlbiAlIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/IDEgOiAwOworCisJLyogRG8gYmxvY2tpbmcgd21lbSdzICovCisJZm9yKGk9MDsgaSA8IG53cml0ZXM7IGkrKykgeworCQkvKiBtYWtlIGFkZHJlc3MgYXJncyAqLworCQljdXJyYWRkciA9IGRhZGRyICsgKGkgKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQljdXJycGFnZSA9IEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGN1cnJhZGRyKTsKKwkJY3Vycm9mZnNldCA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoY3VycmFkZHIpOworCQljdXJybGVuID0gbGVuIC0gKGkgKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQlpZiAoIGN1cnJsZW4gPiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pIHsKKwkJCWN1cnJsZW4gPSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU47CisJCX0KKworCSAJLyogRG8gYmxvY2tpbmcgY3RseCAqLworCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KCBodywKKwkJCQljdXJycGFnZSwKKwkJCQljdXJyb2Zmc2V0LAorCQkJCWRhdGEgKyAoaSpIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pLAorCQkJCWN1cnJsZW4gKTsKKworCQlpZiAocmVzdWx0KSBicmVhazsKKworCQkvKiBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgYSByZWFkYmFjay4gKi8KKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yZWFkcGRhCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSB0byByZWFkIHRoZSBQREEgc3BhY2UuICBOb3RlIHRoZXJlIGlzIG5vCisqIGRydnJfd3JpdGVwZGEoKSBmdW5jdGlvbi4gIFdyaXRpbmcgYSBQREEgaXMKKyogZ2VuZXJhbGx5IGltcGxlbWVudGVkIGJ5IGEgY2FsbGluZyBjb21wb25lbnQgdmlhIGNhbGxzIHRvCisqIGNtZF9kb3dubG9hZCBhbmQgd3JpdGluZyB0byB0aGUgZmxhc2ggZG93bmxvYWQgYnVmZmVyIHZpYSB0aGUKKyogYXV4IHJlZ3MuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYnVmCQlidWZmZXIgdG8gc3RvcmUgUERBIGluCisqCWxlbgkJYnVmZmVyIGxlbmd0aAorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgktRVRJTUVPVVQJdGltb3V0IHdhaXRpbmcgZm9yIHRoZSBjbWQgcmVncyB0byBiZWNvbWUKKyoJCQlhdmFpbGFibGUsIG9yIHdhaXRpbmcgZm9yIHRoZSBjb250cm9sIHJlZworKgkJCXRvIGluZGljYXRlIHRoZSBBdXggcG9ydCBpcyBlbmFibGVkLgorKgktRU5PREFUQQl0aGUgYnVmZmVyIGRvZXMgTk9UIGNvbnRhaW4gYSB2YWxpZCBQREEuCisqCQkJRWl0aGVyIHRoZSBjYXJkIFBEQSBpcyBiYWQsIG9yIHRoZSBhdXhkYXRhCisqCQkJcmVhZHMgYXJlIGdpdmluZyB1cyBnYXJiYWdlLgorCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIG9yIG5vbi1jYXJkIGludGVycnVwdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQxNgkJKnBkYSA9IGJ1ZjsKKwlpbnQJCXBkYW9rID0gMDsKKwlpbnQJCW1vcmVwZHJzID0gMTsKKwlpbnQJCWN1cnJwZHIgPSAwOwkvKiB3b3JkIG9mZnNldCBvZiB0aGUgY3VycmVudCBwZHIgKi8KKwlzaXplX3QJCWk7CisJVUlOVDE2CQlwZHJsZW47CQkvKiBwZHIgbGVuZ3RoIGluIGJ5dGVzLCBob3N0IG9yZGVyICovCisJVUlOVDE2CQlwZHJjb2RlOwkvKiBwZHIgY29kZSwgaG9zdCBvcmRlciAqLworCVVJTlQxNgkJY3VycnBhZ2U7CisJVUlOVDE2CQljdXJyb2Zmc2V0OworCXN0cnVjdCBwZGFsb2MgeworCQlVSU5UMzIJY2FyZGFkZHI7CisJCVVJTlQxNglhdXhjdGw7CisJfSBwZGFsb2NbXSA9CisJeworCQl7IEhGQTM4NDJfUERBX0JBU0UsCQkwfSwKKwkJeyBIRkEzODQxX1BEQV9CQVNFLAkJMH0sCisJCXsgSEZBMzg0MV9QREFfQk9HVVNfQkFTRSwJMH0KKwl9OworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIHRoZSBwZGEgZnJvbSBlYWNoIGtub3duIGFkZHJlc3MuICAqLworCWZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGFsb2MpOyBpKyspIHsKKwkJLyogTWFrZSBhZGRyZXNzICovCisJCWN1cnJwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UocGRhbG9jW2ldLmNhcmRhZGRyKTsKKwkJY3Vycm9mZnNldCA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYocGRhbG9jW2ldLmNhcmRhZGRyKTsKKworCQlyZXN1bHQgPSBoZmEzODR4X2Rvcm1lbV93YWl0KGh3LAorCQkJY3VycnBhZ2UsCisJCQljdXJyb2Zmc2V0LAorCQkJYnVmLAorCQkJbGVuKTsJCS8qIHVuaXRzIG9mIGJ5dGVzICovCisKKwkJaWYgKHJlc3VsdCkgeworCQkJV0xBTl9MT0dfV0FSTklORygKKwkJCQkJICAiUmVhZCBmcm9tIGluZGV4ICV6ZCBmYWlsZWQsIGNvbnRpbnVpbmdcbiIsCisJCQkJaSApOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUZXN0IGZvciBnYXJiYWdlICovCisJCXBkYW9rID0gMTsJLyogaW5pdGlhbGx5IGFzc3VtZSBnb29kICovCisJCW1vcmVwZHJzID0gMTsKKwkJd2hpbGUgKCBwZGFvayAmJiBtb3JlcGRycyApIHsKKwkJCXBkcmxlbiA9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICogMjsKKwkJCXBkcmNvZGUgPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHIrMV0pOworCQkJLyogVGVzdCB0aGUgcmVjb3JkIGxlbmd0aCAqLworCQkJaWYgKCBwZHJsZW4gPiBIRkEzODR4X1BEUl9MRU5fTUFYIHx8IHBkcmxlbiA9PSAwKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoInBkcmxlbiBpbnZhbGlkPSVkXG4iLAorCQkJCQlwZHJsZW4pOworCQkJCXBkYW9rID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIFRlc3QgdGhlIGNvZGUgKi8KKwkJCWlmICggIWhmYTM4NHhfaXNnb29kX3BkcmNvZGUocGRyY29kZSkgKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoInBkcmNvZGUgaW52YWxpZD0lZFxuIiwKKwkJCQkJcGRyY29kZSk7CisJCQkJcGRhb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogVGVzdCBmb3IgY29tcGxldGlvbiAqLworCQkJaWYgKCBwZHJjb2RlID09IEhGQTM4NHhfUERSX0VORF9PRl9QREEpIHsKKwkJCQltb3JlcGRycyA9IDA7CisJCQl9CisKKwkJCS8qIE1vdmUgdG8gdGhlIG5leHQgcGRyIChpZiBuZWNlc3NhcnkpICovCisJCQlpZiAoIG1vcmVwZHJzICkgeworCQkJCS8qIG5vdGUgdGhlIGFjY2VzcyB0byBwZGFbXSwgbmVlZCB3b3JkcyBoZXJlICovCisJCQkJY3VycnBkciArPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHJdKSArIDE7CisJCQl9CisJCX0KKwkJaWYgKCBwZGFvayApIHsKKwkJCVdMQU5fTE9HX0lORk8oCisJCQkJIlBEQSBSZWFkIGZyb20gMHglMDh4IGluICVzIHNwYWNlLlxuIiwKKwkJCQlwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAwID8gIkVYVERTIiA6CisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAxID8gIk5WIiA6CisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAyID8gIlBIWSIgOgorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMyA/ICJJQ1NSQU0iIDoKKwkJCQkiPGJvZ3VzIGF1eGN0bD4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlc3VsdCA9IHBkYW9rID8gMCA6IC1FTk9EQVRBOworCisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsIkZhaWx1cmU6IHBkYSBpcyBub3Qgb2theVxuIik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSBuZWNlc3NhcnkgdG8gd3JpdGUgYSBjb25maWcvaW5mbyBpdGVtLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJpZAkJY29uZmlnL2luZm8gcmVjb3JkIGlkIChpbiBob3N0IG9yZGVyKQorKglidWYJCWhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyCisqCWxlbgkJYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKmJ1ZiwgVUlOVDE2IGxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dyaWRfd2FpdChodywgcmlkLCBidWYsIGxlbik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc3RhcnQKKyoKKyogSXNzdWVzIHRoZSBNQUMgaW5pdGlhbGl6ZSBjb21tYW5kLCBzZXRzIHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzLAorKiBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCB0aGUKKyogbG93LWxldmVsIHN0dWZmIHNob3VsZCBiZSByZWFkeSBmb3IgYW55L2FsbCBjb21tYW5kcy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3N0YXJ0KGhmYTM4NHhfdCAqaHcpCit7CisJaW50CQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwltaWdodF9zbGVlcCgpOworCisJaWYgKHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKSkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJGYWlsZWQgdG8gcmVzZXQgYnVsayBpbiBlbmRwb2ludC5cbiIpOworCX0KKworCWlmICh1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkZhaWxlZCB0byByZXNldCBidWxrIG91dCBlbmRwb2ludC5cbiIpOworCX0KKworCS8qIFN5bmNocm9ub3VzIHVubGluaywgaW4gY2FzZSB3ZSdyZSB0cnlpbmcgdG8gcmVzdGFydCB0aGUgZHJpdmVyICovCisJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKKworCS8qIFBvc3QgdGhlIElOIHVyYiAqLworCXJlc3VsdCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJGYXRhbCwgZmFpbGVkIHRvIHN1Ym1pdCBSWCBVUkIsIHJlc3VsdD0lZFxuIiwKKwkJCXJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjYWxsIGluaXRpYWxpemUgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiY21kX2luaXRpYWxpemUoKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwKKwkJCXJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1JVTk5JTkc7CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc3RvcAorKgorKiBTaHV0cyBkb3duIHRoZSBNQUMgdG8gdGhlIHBvaW50IHdoZXJlIGl0IGlzIHNhZmUgdG8gdW5sb2FkIHRoZQorKiBkcml2ZXIuICBBbnkgc3Vic3lzdGVtIHRoYXQgbWF5IGJlIGhvbGRpbmcgYSBkYXRhIG9yIGZ1bmN0aW9uCisqIHB0ciBpbnRvIHRoZSBkcml2ZXIgbXVzdCBiZSBjbGVhcmVkL2RlaW5pdGlhbGl6ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KQoreworCWludAlyZXN1bHQgPSAwOworCWludAlpOworCURCRkVOVEVSOworCisJbWlnaHRfc2xlZXAoKTsKKworCS8qIFRoZXJlJ3Mgbm8gbmVlZCBmb3Igc3BpbmxvY2tzIGhlcmUuIFRoZSBVU0IgImRpc2Nvbm5lY3QiCisJICogZnVuY3Rpb24gc2V0cyB0aGlzICJyZW1vdmVkIiBmbGFnIGFuZCB0aGVuIGNhbGxzIHVzLgorCSAqLworCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgKSB7CisJCS8qIENhbGwgaW5pdGlhbGl6ZSB0byBsZWF2ZSB0aGUgTUFDIGluIGl0cyAncmVzZXQnIHN0YXRlICovCisJCWhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworCisJCS8qIENhbmNlbCB0aGUgcnh1cmIgKi8KKwkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKKwl9CisKKwlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOworCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfSU5JVDsKKworCWRlbF90aW1lcl9zeW5jKCZody0+Y29tbXNxdWFsX3RpbWVyKTsKKworCS8qIENsZWFyIGFsbCB0aGUgcG9ydCBzdGF0dXMgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfTlVNUE9SVFNfTUFYOyBpKyspIHsKKwkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3R4ZnJhbWUKKyoKKyogVGFrZXMgYSBmcmFtZSBmcm9tIHByaXNtMnN0YSBhbmQgcXVldWVzIGl0IGZvciB0cmFuc21pc3Npb24uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlwYWNrZXQgYnVmZmVyIHN0cnVjdC4gIENvbnRhaW5zIGFuIDgwMi4xMQorKgkJCWRhdGEgZnJhbWUuCisqICAgICAgIHA4MDIxMV9oZHIgICAgICBwb2ludHMgdG8gdGhlIDgwMi4xMSBoZWFkZXIgZm9yIHRoZSBwYWNrZXQuCisqIFJldHVybnM6CisqCTAJCVN1Y2Nlc3MgYW5kIG1vcmUgYnVmZnMgYXZhaWxhYmxlCisqCTEJCVN1Y2Nlc3MgYnV0IG5vIG1vcmUgYnVmZnMKKyoJMgkJQWxsb2NhdGlvbiBmYWlsdXJlCisqCTQJCUJ1ZmZlciBmdWxsIG9yIHF1ZXVlIGJ1c3kKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQorCit7CisJaW50CQl1c2Jwa3RsZW4gPSBzaXplb2YoaGZhMzg0eF90eF9mcmFtZV90KTsKKwlpbnQJCXJlc3VsdDsKKwlpbnQJCXJldDsKKwljaGFyCQkqcHRyOworCisJREJGRU5URVI7CisKKwlpZiAoaHctPnR4X3VyYi5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoIlRYIFVSQiBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJlc3VsdCA9IDM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBCdWlsZCBUeCBmcmFtZSBzdHJ1Y3R1cmUgKi8KKwkvKiBTZXQgdXAgdGhlIGNvbnRyb2wgZmllbGQgKi8KKwltZW1zZXQoJmh3LT50eGJ1ZmYudHhmcm0uZGVzYywgMCwgc2l6ZW9mKGh3LT50eGJ1ZmYudHhmcm0uZGVzYykpOworCisJLyogU2V0dXAgdGhlIHVzYiB0eXBlIGZpZWxkICovCisJaHctPnR4YnVmZi50eXBlID0gaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1RYRlJNKTsKKworCS8qIFNldCB1cCB0aGUgc3dfc3VwcG9ydCBmaWVsZCB0byBpZGVudGlmeSB0aGlzIGZyYW1lICovCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnN3X3N1cHBvcnQgPSAweDAxMjM7CisKKy8qIFR4IGNvbXBsZXRlIGFuZCBUeCBleGNlcHRpb24gZGlzYWJsZSBwZXIgZGxlYWNoLiAgTWlnaHQgYmUgY2F1c2luZworICogYnVmIGRlcGxldGlvbgorICovCisvLyNkZWZpbmUgRE9FWEMgIFNMUCAtLSBkb2JvdGggYnJlYWtzIGhvcnJpYmx5IHVuZGVyIGxvYWQsIGRvZXhjIGxlc3Mgc28uCisjaWYgZGVmaW5lZChET0JPVEgpCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQorCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMSk7CisjZWxpZiBkZWZpbmVkKERPRVhDKQorCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KKwkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8CisJCUhGQTM4NHhfVFhfVFhFWF9TRVQoMSkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworI2Vsc2UKKwlody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCA9CisJCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCQlIRkEzODR4X1RYX1RYRVhfU0VUKDApIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgwKTsKKyNlbmRpZgorCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KKwkJaG9zdDJoZmEzODR4XzE2KGh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sKTsKKworCS8qIGNvcHkgdGhlIGhlYWRlciBvdmVyIHRvIHRoZSB0eGRlc2MgKi8KKwltZW1jcHkoJihody0+dHhidWZmLnR4ZnJtLmRlc2MuZnJhbWVfY29udHJvbCksIHA4MDIxMV9oZHIsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKworCS8qIGlmIHdlJ3JlIHVzaW5nIGhvc3QgV0VQLCBpbmNyZWFzZSBzaXplIGJ5IElWK0lDViAqLworCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7CisJCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5kYXRhX2xlbiA9IGhvc3QyaGZhMzg0eF8xNihza2ItPmxlbis4KTsKKwkJLy8gaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgfD0gSEZBMzg0eF9UWF9OT0VOQ1JZUFRfU0VUKDEpOworCQl1c2Jwa3RsZW4rPTg7CisJfSBlbHNlIHsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKTsKKwl9CisKKwl1c2Jwa3RsZW4gKz0gc2tiLT5sZW47CisKKwkvKiBjb3B5IG92ZXIgdGhlIFdFUCBJViBpZiB3ZSBhcmUgdXNpbmcgaG9zdCBXRVAgKi8KKwlwdHIgPSBody0+dHhidWZmLnR4ZnJtLmRhdGE7CisJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKKwkJbWVtY3B5KHB0ciwgcDgwMjExX3dlcC0+aXYsIHNpemVvZihwODAyMTFfd2VwLT5pdikpOworCQlwdHIrPSBzaXplb2YocDgwMjExX3dlcC0+aXYpOworCQltZW1jcHkocHRyLCBwODAyMTFfd2VwLT5kYXRhLCBza2ItPmxlbik7CisJfSBlbHNlIHsKKwkJbWVtY3B5KHB0ciwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJfQorCS8qIGNvcHkgb3ZlciB0aGUgcGFja2V0IGRhdGEgKi8KKwlwdHIrPSBza2ItPmxlbjsKKworCS8qIGNvcHkgb3ZlciB0aGUgV0VQIElDViBpZiB3ZSBhcmUgdXNpbmcgaG9zdCBXRVAgKi8KKwlpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQltZW1jcHkocHRyLCBwODAyMTFfd2VwLT5pY3YsIHNpemVvZihwODAyMTFfd2VwLT5pY3YpKTsKKwl9CisKKwkvKiBTZW5kIHRoZSBVU0IgcGFja2V0ICovCisJdXNiX2ZpbGxfYnVsa191cmIoICYoaHctPnR4X3VyYiksIGh3LT51c2IsCisJICAgICAgICAgICAgICAgaHctPmVuZHBfb3V0LAorCSAgICAgICAgICAgICAgICYoaHctPnR4YnVmZiksIFJPVU5EVVA2NCh1c2Jwa3RsZW4pLAorCSAgICAgICAgICAgICAgIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrLCBody0+d2xhbmRldiApOworCWh3LT50eF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVNCX1FVRVVFX0JVTEs7CisKKwlyZXN1bHQgPSAxOworCXJldCA9IHN1Ym1pdF90eF91cmIoaHcsICZody0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIHJldCAhPSAwICkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJzdWJtaXRfdHhfdXJiKCkgZmFpbGVkLCBlcnJvcj0lZFxuIiwgcmV0KTsKKwkJcmVzdWx0ID0gMzsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdAkqaHcgPSB3bGFuZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgorCSAgICAgLyogTm90ZSB0aGUgYml0d2lzZSBPUiwgbm90IHRoZSBsb2dpY2FsIE9SLiAqLworCSAgICAgKCAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSB8CisJICAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkgKQorCXsKKwkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaworKgorKiBUYXNrbGV0IHRvIGRlbGV0ZSBkZWFkIENUTFggb2JqZWN0cworKgorKiBBcmd1bWVudHM6CisqCWRhdGEJcHRyIHRvIGEgaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCisqIENhbGwgY29udGV4dDoKKyoJSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJREJGRU5URVI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qIFRoaXMgbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIGVtcHR5IGlmIHNvbWVvbmUKKwkgKiBoYXMgdW5wbHVnZ2VkIHRoZSBhZGFwdGVyLgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdGVtcCwgJmh3LT5jdGx4cS5yZWFwYWJsZSkgeworCQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKworCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOworCQlsaXN0X2RlbCgmY3RseC0+bGlzdCk7CisJCWtmcmVlKGN0bHgpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzaworKgorKiBUYXNrbGV0IHRvIGNhbGwgY29tcGxldGlvbiBoYW5kbGVycyBmb3IgcmV0dXJuZWQgQ1RMWHMKKyoKKyogQXJndW1lbnRzOgorKglkYXRhCXB0ciB0byBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorKiBDYWxsIGNvbnRleHQ6CisqCUludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnQgcmVhcCA9IDA7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogVGhpcyBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZW1wdHkgaWYgc29tZW9uZQorCSAqIGhhcyB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIgLi4uCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0ZW1wLCAmaHctPmN0bHhxLmNvbXBsZXRpbmcpIHsKKwkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CisKKwkJY3RseCA9IGxpc3RfZW50cnkoZW50cnksIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKKworCQkvKiBDYWxsIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIHRoYXQgdGhpcworCQkgKiBjb21tYW5kIHdhcyBhc3NpZ25lZCwgYXNzdW1pbmcgaXQgaGFzIG9uZS4KKwkJICovCisJCWlmICggY3RseC0+Y21kY2IgIT0gTlVMTCApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQljdGx4LT5jbWRjYihodywgY3RseCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCQkJLyogTWFrZSBzdXJlIHdlIGRvbid0IHRyeSBhbmQgY29tcGxldGUKKwkJCSAqIHRoaXMgQ1RMWCBtb3JlIHRoYW4gb25jZSEKKwkJCSAqLworCQkJY3RseC0+Y21kY2IgPSBOVUxMOworCisJCQkvKiBEaWQgc29tZW9uZSB5YW5rIHRoZSBhZGFwdGVyIG91dAorCQkJICogd2hpbGUgb3VyIGxpc3Qgd2FzIChicmllZmx5KSB1bmxvY2tlZD8KKwkJCSAqLworCQkJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwkJCXsKKwkJCQlyZWFwID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqICJSZWFwYWJsZSIgQ1RMWHMgYXJlIG9uZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbnkKKwkJICogdGhyZWFkcyB3YWl0aW5nIGZvciB0aGVtIHRvIGRpZS4gSGVuY2UgdGhleSBtdXN0CisJCSAqIGJlIGRlbGl2ZXJlZCB0byBUaGUgUmVhcGVyIQorCQkgKi8KKwkJaWYgKCBjdGx4LT5yZWFwYWJsZSApIHsKKwkJCS8qIE1vdmUgdGhlIENUTFggb2ZmIHRoZSAiY29tcGxldGluZyIgbGlzdCAoaG9wZWZ1bGx5KQorCQkJICogb24gdG8gdGhlICJyZWFwYWJsZSIgbGlzdCB3aGVyZSB0aGUgcmVhcGVyIHRhc2sKKwkJCSAqIGNhbiBmaW5kIGl0LiBBbmQgInJlYXBhYmxlIiBtZWFucyB0aGF0IHRoaXMgQ1RMWAorCQkJICogaXNuJ3Qgc2l0dGluZyBvbiBhIHdhaXQtcXVldWUgc29tZXdoZXJlLgorCQkJICovCisJCQlsaXN0X21vdmVfdGFpbCgmY3RseC0+bGlzdCwgJmh3LT5jdGx4cS5yZWFwYWJsZSk7CisJCQlyZWFwID0gMTsKKwkJfQorCisJCWNvbXBsZXRlKCZjdGx4LT5kb25lKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCWlmIChyZWFwKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZody0+cmVhcGVyX2JoKTsKKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYworKgorKiBNYXJrIHRoZSBDVExYIGRlYWQgYXN5bmNocm9ub3VzbHksIGFuZCBlbnN1cmUgdGhhdCB0aGUKKyogbmV4dCBjb21tYW5kIG9uIHRoZSBxdWV1ZSBpcyBydW4gYWZ0ZXJ3YXJkcy4KKyoKKyogQXJndW1lbnRzOgorKglodwlwdHIgdG8gdGhlIGhmYTM4NHhfdCBzdHJ1Y3R1cmUKKyoJY3RseAlwdHIgdG8gYSBDVExYIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCXRoZSBDVExYJ3MgVVJCIGlzIGluYWN0aXZlCisqIC1FSU5QUk9HUkVTUwl0aGUgVVJCIGlzIGN1cnJlbnRseSBiZWluZyB1bmxpbmtlZAorKgorKiBDYWxsIGNvbnRleHQ6CisqCUVpdGhlciBwcm9jZXNzIG9yIGludGVycnVwdCwgYnV0IHByZXN1bWFibHkgaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJaW50IHJldDsKKworCURCRkVOVEVSOworCisJLyoKKwkgKiBUcnkgdG8gZGVsZXRlIHRoZSBVUkIgY29udGFpbmluZyBvdXIgcmVxdWVzdCBwYWNrZXQuCisJICogSWYgd2Ugc3VjY2VlZCwgdGhlbiBpdHMgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwgYmUKKwkgKiBjYWxsZWQgd2l0aCBhIHN0YXR1cyBvZiAtRUNPTk5SRVNFVC4KKwkgKi8KKwlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwlyZXQgPSB1c2JfdW5saW5rX3VyYigmaHctPmN0bHhfdXJiKTsKKworCWlmIChyZXQgIT0gLUVJTlBST0dSRVNTKSB7CisJCS8qCisJCSAqIFRoZSBPVVQgVVJCIGhhZCBlaXRoZXIgYWxyZWFkeSBjb21wbGV0ZWQKKwkJICogb3Igd2FzIHN0aWxsIGluIHRoZSBwZW5kaW5nIHF1ZXVlLCBzbyB0aGUKKwkJICogVVJCJ3MgY29tcGxldGlvbiBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuCisJCSAqIFdlIHdpbGwgaGF2ZSB0byBjb21wbGV0ZSB0aGUgQ1RMWCBvdXJzZWx2ZXMuCisJCSAqLworCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0ZBSUxFRDsKKwkJdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShodywgY3RseCk7CisJCXJldCA9IDA7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlCisqCisqIEEgQ1RMWCBoYXMgY29tcGxldGVkLiAgSXQgbWF5IGhhdmUgYmVlbiBzdWNjZXNzZnVsLCBpdCBtYXkgbm90CisqIGhhdmUgYmVlbi4gQXQgdGhpcyBwb2ludCwgdGhlIENUTFggc2hvdWxkIGJlIHF1aWVzY2VudC4gIFRoZSBVUkJzCisqIGFyZW4ndCBhY3RpdmUgYW5kIHRoZSB0aW1lcnMgc2hvdWxkIGhhdmUgYmVlbiBzdG9wcGVkLgorKgorKiBUaGUgQ1RMWCBpcyBtaWdyYXRlZCB0byB0aGUgImNvbXBsZXRpbmciIHF1ZXVlLCBhbmQgdGhlIGNvbXBsZXRpbmcKKyogdGFza2xldCBpcyBzY2hlZHVsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCXB0ciB0byBhIGhmYTM4NHhfdCBzdHJ1Y3R1cmUKKyoJY3RseAkJcHRyIHRvIGEgY3RseCBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJRWl0aGVyLCBhc3N1bWUgaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJREJGRU5URVI7CisKKwkvKiBUaW1lcnMgaGF2ZSBiZWVuIHN0b3BwZWQsIGFuZCBjdGx4IHNob3VsZCBiZSBpbgorCSAqIGEgdGVybWluYWwgc3RhdGUuIFJldGlyZSBpdCBmcm9tIHRoZSAiYWN0aXZlIgorCSAqIHF1ZXVlLgorCSAqLworCWxpc3RfbW92ZV90YWlsKCZjdGx4LT5saXN0LCAmaHctPmN0bHhxLmNvbXBsZXRpbmcpOworCXRhc2tsZXRfc2NoZWR1bGUoJmh3LT5jb21wbGV0aW9uX2JoKTsKKworCXN3aXRjaCAoY3RseC0+c3RhdGUpIHsKKwljYXNlIENUTFhfQ09NUExFVEU6CisJY2FzZSBDVExYX1JFUV9GQUlMRUQ6CisJCS8qIFRoaXMgYXJlIHRoZSBjb3JyZWN0IHRlcm1pbmF0aW5nIHN0YXRlcy4gKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19FUlJPUigiQ1RMWFslZF0gbm90IGluIGEgdGVybWluYXRpbmcgc3RhdGUoJXMpXG4iLAorCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCWJyZWFrOworCX0gLyogc3dpdGNoICovCisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4cV9ydW4KKyoKKyogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaGVhZCBpdGVtIGlzIHJ1bm5pbmcuICBJZiBub3QsIHN0YXJ0cyBpdC4KKyoKKyogQXJndW1lbnRzOgorKglodwlwdHIgdG8gaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWFueQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90CSpodykKK3sKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlEQkZFTlRFUjsKKworCS8qIGFjcXVpcmUgbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogT25seSBvbmUgYWN0aXZlIENUTFggYXQgYW55IG9uZSB0aW1lLCBiZWNhdXNlIHRoZXJlJ3Mgbm8KKwkgKiBvdGhlciAocmVsaWFibGUpIHdheSB0byBtYXRjaCB0aGUgcmVzcG9uc2UgVVJCIHRvIHRoZQorCSAqIGNvcnJlY3QgQ1RMWC4KKwkgKgorCSAqIERvbid0IHRvdWNoIGFueSBvZiB0aGVzZSBDVExYcyBpZiB0aGUgaGFyZHdhcmUKKwkgKiBoYXMgYmVlbiByZW1vdmVkIG9yIHRoZSBVU0Igc3Vic3lzdGVtIGlzIHN0YWxsZWQuCisJICovCisJaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgfHwKKwkgICAgIHRlc3RfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHx8CisJICAgICBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwkJZ290byB1bmxvY2s7CisKKwl3aGlsZSAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEucGVuZGluZykgKSB7CisJCWhmYTM4NHhfdXNiY3RseF90CSpoZWFkOworCQlpbnQJCQlyZXN1bHQ7CisKKwkJLyogVGhpcyBpcyB0aGUgZmlyc3QgcGVuZGluZyBjb21tYW5kICovCisJCWhlYWQgPSBsaXN0X2VudHJ5KGh3LT5jdGx4cS5wZW5kaW5nLm5leHQsCisJCSAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF90LAorCQkgICAgICAgICAgICAgICAgICBsaXN0KTsKKworCQkvKiBXZSBuZWVkIHRvIHNwbGl0IHRoaXMgb2ZmIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJmhlYWQtPmxpc3QsICZody0+Y3RseHEuYWN0aXZlKTsKKworCQkvKiBGaWxsIHRoZSBvdXQgcGFja2V0ICovCisJCXVzYl9maWxsX2J1bGtfdXJiKCAmKGh3LT5jdGx4X3VyYiksIGh3LT51c2IsCisJCSAgICAgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCisJCSAgICAgICAgICAgICAgICAgICAmKGhlYWQtPm91dGJ1ZiksIFJPVU5EVVA2NChoZWFkLT5vdXRidWZzaXplKSwKKwkJICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaywgaHcpOworCQlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVNCX1FVRVVFX0JVTEs7CisKKwkJLyogTm93IHN1Ym1pdCB0aGUgVVJCIGFuZCB1cGRhdGUgdGhlIENUTFgncyBzdGF0ZQorCQkgKi8KKwkJaWYgKChyZXN1bHQgPSBTVUJNSVRfVVJCKCZody0+Y3RseF91cmIsIEdGUF9BVE9NSUMpKSA9PSAwKSB7CisJCQkvKiBUaGlzIENUTFggaXMgbm93IHJ1bm5pbmcgb24gdGhlIGFjdGl2ZSBxdWV1ZSAqLworCQkJaGVhZC0+c3RhdGUgPSBDVExYX1JFUV9TVUJNSVRURUQ7CisKKwkJCS8qIFN0YXJ0IHRoZSBPVVQgd2FpdCB0aW1lciAqLworCQkJaHctPnJlcV90aW1lcl9kb25lID0gMDsKKwkJCWh3LT5yZXF0aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCQkJYWRkX3RpbWVyKCZody0+cmVxdGltZXIpOworCisJCQkvKiBTdGFydCB0aGUgSU4gd2FpdCB0aW1lciAqLworCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDA7CisJCQlody0+cmVzcHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMipIWjsKKwkJCWFkZF90aW1lcigmaHctPnJlc3B0aW1lcik7CisKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCS8qIFRoZSBPVVQgcGlwZSBuZWVkcyByZXNldHRpbmcsIHNvIHB1dAorCQkJICogdGhpcyBDVExYIGJhY2sgaW4gdGhlICJwZW5kaW5nIiBxdWV1ZQorCQkJICogYW5kIHNjaGVkdWxlIGEgcmVzZXQgLi4uCisJCQkgKi8KKwkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlsaXN0X21vdmUoJmhlYWQtPmxpc3QsICZody0+Y3RseHEucGVuZGluZyk7CisJCQlzZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOworCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSAtRVNIVVRET1dOKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB1cmIgc2h1dGRvd24hXG4iLAorCQkJCQkgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3VibWl0IENUTFhbJWRdOiBlcnJvcj0lZFxuIiwKKwkJICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGhlYWQtPm91dGJ1Zi50eXBlKSwgcmVzdWx0KTsKKwkJdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShodywgaGVhZCk7CisJfSAvKiB3aGlsZSAqLworCisJdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX2NhbGxiYWNrCisqCisqIENhbGxiYWNrIGZvciBVUkJzIG9uIHRoZSBCVUxLSU4gZW5kcG9pbnQuCisqCisqIEFyZ3VtZW50czoKKyoJdXJiCQlwdHIgdG8gdGhlIGNvbXBsZXRlZCB1cmIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBVUkJfT05MWV9DQUxMQkFDSworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCisjZWxzZQorc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2VuZGlmCit7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKKwloZmEzODR4X3QJCSpodzsKKwloZmEzODR4X3VzYmluX3QJCSp1c2JpbiA9IChoZmEzODR4X3VzYmluX3QgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAgKnNrYiA9IE5VTEw7CisJaW50CQkJcmVzdWx0OworCWludCAgICAgICAgICAgICAgICAgICAgIHVyYl9zdGF0dXM7CisJVUlOVDE2CQkJdHlwZTsKKworCWVudW0gVVNCSU5fQUNUSU9OIHsKKwkJSEFORExFLAorCQlSRVNVQk1JVCwKKwkJQUJPUlQKKwl9IGFjdGlvbjsKKworCURCRkVOVEVSOworCisJaWYgKCAhd2xhbmRldiB8fAorCSAgICAgIXdsYW5kZXYtPm5ldGRldiB8fAorCSAgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KHdsYW5kZXYtPm5ldGRldikgKQorCQlnb3RvIGV4aXQ7CisKKwlodyA9IHdsYW5kZXYtPnByaXY7CisJaWYgKCFodykKKwkJZ290byBleGl0OworCisJc2tiID0gaHctPnJ4X3VyYl9za2I7CisJaWYgKCFza2IgfHwgKHNrYi0+ZGF0YSAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcikpIHsKKwkJQlVHKCk7CisJfQorCWh3LT5yeF91cmJfc2tiID0gTlVMTDsKKworCS8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGUgVVJCICovCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYWN0aW9uID0gSEFORExFOworCisJCS8qIENoZWNrIGZvciBzaG9ydCBwYWNrZXQgKi8KKwkJaWYgKCB1cmItPmFjdHVhbF9sZW5ndGggPT0gMCApIHsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CisJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKTsKKwkJCWFjdGlvbiA9IFJFU1VCTUlUOworCQl9CisJCWJyZWFrOworCisJY2FzZSAtRVBJUEU6CisJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJICAgICAgICAgICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CisJCWFjdGlvbiA9IEFCT1JUOworCQlicmVhazsKKworCWNhc2UgLUVJTFNFUToKKwljYXNlIC1FVElNRURPVVQ6CisJY2FzZSAtRVBST1RPOgorCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKKwkJICAgICAhdGltZXJfcGVuZGluZygmaHctPnRocm90dGxlKSApIHsKKwkJCW1vZF90aW1lcigmaHctPnRocm90dGxlLCBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CisJCX0KKwkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJYWN0aW9uID0gQUJPUlQ7CisJCWJyZWFrOworCisJY2FzZSAtRU9WRVJGTE9XOgorCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9vdmVyX2Vycm9ycyk7CisJCWFjdGlvbiA9IFJFU1VCTUlUOworCQlicmVhazsKKworCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCVdMQU5fTE9HX0RFQlVHKDMsInN0YXR1cz0lZCwgZGV2aWNlIHJlbW92ZWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWFjdGlvbiA9IEFCT1JUOworCQlicmVhazsKKworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCQlXTEFOX0xPR19ERUJVRygzLCJzdGF0dXM9JWQsIHVyYiBleHBsaWNpdGx5IHVubGlua2VkLlxuIiwgdXJiLT5zdGF0dXMpOworCQlhY3Rpb24gPSBBQk9SVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19ERUJVRygzLCJ1cmIgc3RhdHVzPSVkLCB0cmFuc2ZlciBmbGFncz0weCV4XG4iLAorCQkgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJYWN0aW9uID0gUkVTVUJNSVQ7CisJCWJyZWFrOworCX0KKworCXVyYl9zdGF0dXMgPSB1cmItPnN0YXR1czsKKworCWlmIChhY3Rpb24gIT0gQUJPUlQpIHsKKwkJLyogUmVwb3N0IHRoZSBSWCBVUkIgKi8KKwkJcmVzdWx0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHJlc3VsdCAhPSAwKSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiRmF0YWwsIGZhaWxlZCB0byByZXN1Ym1pdCByeF91cmIuIGVycm9yPSVkXG4iLAorCQkJCXJlc3VsdCk7CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgYW55IFVTQi1JTiBwYWNrZXQgKi8KKwkvKiBOb3RlOiB0aGUgY2hlY2sgb2YgdGhlIHN3X3N1cHBvcnQgZmllbGQsIHRoZSB0eXBlIGZpZWxkIGRvZXNuJ3QKKwkgKiAgICAgICBoYXZlIGJpdCAxMiBzZXQgbGlrZSB0aGUgZG9jcyBzdWdnZXN0LgorCSAqLworCXR5cGUgPSBoZmEzODR4Mmhvc3RfMTYodXNiaW4tPnR5cGUpOworCWlmIChIRkEzODR4X1VTQl9JU1JYRlJNKHR5cGUpKSB7CisJCWlmIChhY3Rpb24gPT0gSEFORExFKSB7CisJCQlpZiAodXNiaW4tPnR4ZnJtLmRlc2Muc3dfc3VwcG9ydCA9PSAweDAxMjMpIHsKKwkJCQloZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldiwgdXNiaW4pOworCQkJfSBlbHNlIHsKKwkJCQlza2JfcHV0KHNrYiwgc2l6ZW9mKCp1c2JpbikpOworCQkJCWhmYTM4NHhfdXNiaW5fcngod2xhbmRldiwgc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCQkJfQorCQl9CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKEhGQTM4NHhfVVNCX0lTVFhGUk0odHlwZSkpIHsKKwkJaWYgKGFjdGlvbiA9PSBIQU5ETEUpCisJCQloZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldiwgdXNiaW4pOworCQlnb3RvIGV4aXQ7CisJfQorCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSEZBMzg0eF9VU0JfSU5GT0ZSTToKKwkJaWYgKGFjdGlvbiA9PSBBQk9SVCkKKwkJCWdvdG8gZXhpdDsKKwkJaWYgKGFjdGlvbiA9PSBIQU5ETEUpCisJCQloZmEzODR4X3VzYmluX2luZm8od2xhbmRldiwgdXNiaW4pOworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9VU0JfQ01EUkVTUDoKKwljYXNlIEhGQTM4NHhfVVNCX1dSSURSRVNQOgorCWNhc2UgSEZBMzg0eF9VU0JfUlJJRFJFU1A6CisJY2FzZSBIRkEzODR4X1VTQl9XTUVNUkVTUDoKKwljYXNlIEhGQTM4NHhfVVNCX1JNRU1SRVNQOgorCQkvKiBBTFdBWVMsIEFMV0FZUywgQUxXQVlTIGhhbmRsZSB0aGlzIENUTFghISEhICovCisJCWhmYTM4NHhfdXNiaW5fY3RseChodywgdXNiaW4sIHVyYl9zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9VU0JfQlVGQVZBSUw6CisJCVdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIEJVRkFWQUlMIHBhY2tldCwgZnJtbGVuPSVkXG4iLAorCQkJdXNiaW4tPmJ1ZmF2YWlsLmZybWxlbik7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X1VTQl9FUlJPUjoKKwkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgVVNCX0VSUk9SIHBhY2tldCwgZXJyb3J0eXBlPSVkXG4iLAorCQkJdXNiaW4tPnVzYmVycm9yLmVycm9ydHlwZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfREVCVUcoMywiVW5yZWNvZ25pemVkIFVTQklOIHBhY2tldCwgdHlwZT0leCwgc3RhdHVzPSVkXG4iLAorCQkJdXNiaW4tPnR5cGUsIHVyYl9zdGF0dXMpOworCQlicmVhazsKKwl9IC8qIHN3aXRjaCAqLworCitleGl0OgorCisJaWYgKHNrYikKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2Jpbl9jdGx4CisqCisqIFdlJ3ZlIHJlY2VpdmVkIGEgVVJCIGNvbnRhaW5pbmcgYSBQcmlzbTIgInJlc3BvbnNlIiBtZXNzYWdlLgorKiBUaGlzIG1lc3NhZ2UgbmVlZHMgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGEgQ1RMWCBvbiB0aGUgYWN0aXZlCisqIHF1ZXVlIGFuZCBvdXIgc3RhdGUgdXBkYXRlZCBhY2NvcmRpbmdseS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJcHRyIHRvIGhmYTM4NHhfdAorKgl1c2JpbgkJcHRyIHRvIFVTQiBJTiBwYWNrZXQKKyoJdXJiX3N0YXR1cwlzdGF0dXMgb2YgdGhpcyBCdWxrLUluIFVSQgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jdGx4KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4sCisJCQkgICAgICAgaW50IHVyYl9zdGF0dXMpCit7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50CQkJcnVuX3F1ZXVlID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCURCRkVOVEVSOworCityZXRyeToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBDVExYIG9uIHRoZSBhY3RpdmUgcXVldWUKKwkgKiBhdCBhbnkgb25lIHRpbWUsIGFuZCB0aGlzIGlzIHRoZSBDVExYIHRoYXQgdGhlCisJICogdGltZXJzIGFyZSB3YWl0aW5nIGZvci4KKwkgKi8KKwlpZiAoIGxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkgeworCQlnb3RvIHVubG9jazsKKwl9CisKKwkvKiBSZW1vdmUgdGhlICJyZXNwb25zZSB0aW1lb3V0Ii4gSXQncyBwb3NzaWJsZSB0aGF0CisJICogd2UgYXJlIGFscmVhZHkgdG9vIGxhdGUsIGFuZCB0aGF0IHRoZSB0aW1lb3V0IGlzCisJICogYWxyZWFkeSBydW5uaW5nLiBBbmQgdGhhdCdzIGp1c3QgdG9vIGJhZCBmb3IgdXMsCisJICogYmVjYXVzZSB3ZSBjb3VsZCBsb3NlIG91ciBDVExYIGZyb20gdGhlIGFjdGl2ZQorCSAqIHF1ZXVlIGhlcmUgLi4uCisJICovCisJaWYgKGRlbF90aW1lcigmaHctPnJlc3B0aW1lcikgPT0gMCkgeworCQlpZiAoaHctPnJlc3BfdGltZXJfZG9uZSA9PSAwKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQkJZ290byByZXRyeTsKKwkJfQorCX0KKwllbHNlIHsKKwkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJfQorCisJY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CisKKwlpZiAodXJiX3N0YXR1cyAhPSAwKSB7CisJCS8qCisJCSAqIEJhZCBDVExYLCBzbyBnZXQgcmlkIG9mIGl0LiBCdXQgd2Ugb25seQorCQkgKiByZW1vdmUgaXQgZnJvbSB0aGUgYWN0aXZlIHF1ZXVlIGlmIHdlJ3JlIG5vCisJCSAqIGxvbmdlciBleHBlY3RpbmcgdGhlIE9VVCBVUkIgdG8gY29tcGxldGUuCisJCSAqLworCQlpZiAodW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaHcsIGN0bHgpID09IDApCisJCQlydW5fcXVldWUgPSAxOworCX0gZWxzZSB7CisJCWNvbnN0IFVJTlQxNiBpbnR5cGUgPSAodXNiaW4tPnR5cGUmfmhvc3QyaGZhMzg0eF8xNigweDgwMDApKTsKKworCQkvKgorCQkgKiBDaGVjayB0aGF0IG91ciBtZXNzYWdlIGlzIHdoYXQgd2UncmUgZXhwZWN0aW5nIC4uLgorCQkgKi8KKwkJaWYgKGN0bHgtPm91dGJ1Zi50eXBlICE9IGludHlwZSkgeworCQkJV0xBTl9MT0dfV0FSTklORygiRXhwZWN0ZWQgSU5bJWRdLCByZWNlaXZlZCBJTlslZF0gLSBpZ25vcmVkLlxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGludHlwZSkpOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQkvKiBUaGlzIFVSQiBoYXMgc3VjY2VlZGVkLCBzbyBncmFiIHRoZSBkYXRhIC4uLiAqLworCQltZW1jcHkoJmN0bHgtPmluYnVmLCB1c2Jpbiwgc2l6ZW9mKGN0bHgtPmluYnVmKSk7CisKKwkJc3dpdGNoIChjdGx4LT5zdGF0ZSkgeworCQljYXNlIENUTFhfUkVRX1NVQk1JVFRFRDoKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHJlY2VpdmVkIG91ciByZXNwb25zZSBVUkIgYmVmb3JlCisJCQkgKiBvdXIgcmVxdWVzdCBoYXMgYmVlbiBhY2tub3dsZWRnZWQuIE9kZCwKKwkJCSAqIGJ1dCBvdXIgT1VUIFVSQiBpcyBzdGlsbCBhbGl2ZS4uLgorCQkJICovCisJCQlXTEFOX0xPR19ERUJVRygwLCAiQ2F1c2FsaXR5IHZpb2xhdGlvbjogcGxlYXNlIHJlYm9vdCBVbml2ZXJzZSwgb3IgZW1haWwgbGludXgtd2xhbi1kZXZlbEBsaXN0cy5saW51eC13bGFuLmNvbVxuIik7CisJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVTUF9DT01QTEVURTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1RMWF9SRVFfQ09NUExFVEU6CisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgdXN1YWwgcGF0aDogb3VyIHJlcXVlc3QKKwkJCSAqIGhhcyBhbHJlYWR5IGJlZW4gYWNrbm93bGVkZ2VkLCBhbmQKKwkJCSAqIG5vdyB3ZSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSB0b28uCisJCQkgKi8KKwkJCWN0bHgtPnN0YXRlID0gQ1RMWF9DT01QTEVURTsKKwkJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGN0bHgpOworCQkJcnVuX3F1ZXVlID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogVGhyb3cgdGhpcyBDVExYIGF3YXkgLi4uCisJCQkgKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJNYXRjaGVkIElOIFVSQiwgQ1RMWFslZF0gaW4gaW52YWxpZCBzdGF0ZSglcykuIgorCQkJICAgICAgICAgICAgICAgIiBEaXNjYXJkZWQuXG4iLAorCQkJICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICAgICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKKwkJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKKwkJCQlydW5fcXVldWUgPSAxOworCQkJYnJlYWs7CisJCX0gLyogc3dpdGNoICovCisJfQorCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCWlmIChydW5fcXVldWUpCisJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiaW5fdHhjb21wbAorKgorKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIHJlc3VsdHMgb2YgYSBwcmV2aW91cyB0cmFuc21pdC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JpbgkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKQoreworCVVJTlQxNgkJCXN0YXR1czsKKwlEQkZFTlRFUjsKKworCXN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+dHlwZSk7IC8qIHllYWggSSBrbm93IGl0IHNheXMgdHlwZS4uLiovCisKKwkvKiBXYXMgdGhlcmUgYW4gZXJyb3I/ICovCisJaWYgKEhGQTM4NHhfVFhTVEFUVVNfSVNFUlJPUihzdGF0dXMpKSB7CisJCXByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2LCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXByaXNtMnN0YV9ldl90eCh3bGFuZGV2LCBzdGF0dXMpOworCX0KKwkvLyBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX3J4CisqCisqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgcmVjZWl2ZWQgYSByeCBmcmFtZSBwYWNrZXQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2UKKyoJdXNiaW4JCXB0ciB0byB0aGUgdXNiIHRyYW5zZmVyIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaGZhMzg0eF91c2Jpbl90ICAgICAgICAgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSBza2ItPmRhdGE7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBoZHJsZW47CisJcDgwMjExX3J4bWV0YV90ICAgICAgICAgKnJ4bWV0YTsKKwlVSU5UMTYgICAgICAgICAgICAgICAgICBkYXRhX2xlbjsKKwlVSU5UMTYgICAgICAgICAgICAgICAgICBmYzsKKworCURCRkVOVEVSOworCisJLyogQnl0ZSBvcmRlciBjb252ZXJ0IG9uY2UgdXAgZnJvbnQuICovCisJdXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzID0KKwkJaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cyk7CisJdXNiaW4tPnJ4ZnJtLmRlc2MudGltZSA9CisJCWhmYTM4NHgyaG9zdF8zMih1c2Jpbi0+cnhmcm0uZGVzYy50aW1lKTsKKworCS8qIE5vdyBoYW5kbGUgZnJhbWUgYmFzZWQgb24gcG9ydCMgKi8KKwlzd2l0Y2goIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApCisJeworCWNhc2UgMDoKKwkJZmMgPSBpZWVlMmhvc3QxNih1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sKTsKKworCQkvKiBJZiBleGNsdWRlIGFuZCB3ZSByZWNlaXZlIGFuIHVuZW5jcnlwdGVkLCBkcm9wIGl0ICovCisJCWlmICggKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkgJiYKKwkJICAgICAhV0xBTl9HRVRfRkNfSVNXRVAoZmMpKXsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWRhdGFfbGVuID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLmRhdGFfbGVuKTsKKworCQkvKiBIb3cgbXVjaCBoZWFkZXIgZGF0YSBkbyB3ZSBoYXZlPyAqLworCQloZHJsZW4gPSBwODAyMTFfaGVhZGVybGVuKGZjKTsKKworCQkvKiBQdWxsIG9mZiB0aGUgZGVzY3JpcHRvciAqLworCQlza2JfcHVsbChza2IsIHNpemVvZihoZmEzODR4X3J4X2ZyYW1lX3QpKTsKKworCQkvKiBOb3cgc2h1bnQgdGhlIGhlYWRlciBibG9jayB1cCBhZ2FpbnN0IHRoZSBkYXRhIGJsb2NrCisJCSAqIHdpdGggYW4gIm92ZXJsYXBwaW5nIiBjb3B5CisJCSAqLworCQltZW1tb3ZlKHNrYl9wdXNoKHNrYiwgaGRybGVuKSwKKwkJICAgICAgICAmdXNiaW4tPnJ4ZnJtLmRlc2MuZnJhbWVfY29udHJvbCwKKwkJICAgICAgICBoZHJsZW4pOworCisJCXNrYi0+ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwkJLyogQW5kIHNldCB0aGUgZnJhbWUgbGVuZ3RoIHByb3Blcmx5ICovCisJCXNrYl90cmltKHNrYiwgZGF0YV9sZW4gKyBoZHJsZW4pOworCisJCS8qIFRoZSBwcmlzbTIgc2VyaWVzIGRvZXMgbm90IHJldHVybiB0aGUgQ1JDICovCisJCW1lbXNldChza2JfcHV0KHNrYiwgV0xBTl9DUkNfTEVOKSwgMHhmZiwgV0xBTl9DUkNfTEVOKTsKKworCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisJCS8qIEF0dGFjaCB0aGUgcnhtZXRhLCBzZXQgc29tZSBzdHVmZiAqLworCQlwODAyMTFza2JfcnhtZXRhX2F0dGFjaCh3bGFuZGV2LCBza2IpOworCQlyeG1ldGEgPSBQODAyMTFTS0JfUlhNRVRBKHNrYik7CisJCXJ4bWV0YS0+bWFjdGltZSA9IHVzYmluLT5yeGZybS5kZXNjLnRpbWU7CisJCXJ4bWV0YS0+cnhyYXRlID0gdXNiaW4tPnJ4ZnJtLmRlc2MucmF0ZTsKKwkJcnhtZXRhLT5zaWduYWwgPSB1c2Jpbi0+cnhmcm0uZGVzYy5zaWduYWwgLSBody0+ZGJtYWRqdXN0OworCQlyeG1ldGEtPm5vaXNlID0gdXNiaW4tPnJ4ZnJtLmRlc2Muc2lsZW5jZSAtIGh3LT5kYm1hZGp1c3Q7CisKKwkJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CisKKwkJYnJlYWs7CisKKwljYXNlIDc6CisJCWlmICggISBIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cykgKSB7CisJCQkvKiBDb3B5IHRvIHdsYW5zbmlmIHNrYiAqLworCQkJaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2LCAmdXNiaW4tPnJ4ZnJtKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIG1vbml0b3IgZnJhbWU6IEZDU2VyciBzZXRcbiIpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfV0FSTklORygiUmVjZWl2ZWQgZnJhbWUgb24gdW5zdXBwb3J0ZWQgcG9ydD0lZFxuIiwKKwkJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApOworCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X3J4bW9uaXRvcgorKgorKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGludF9yeC4gIEhhbmRsZXMgbW9uaXRvciBmcmFtZXMuCisqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIEZDUyBhbmQgc2V0cyBpdAorKiB0byAweGZmZmZmZmZmLiAgVGhlIGhmYTM4NHggZG9lc24ndCBnaXZlIHVzIHRoZSBGQ1MgdmFsdWUgYnV0IHRoZQorKiBoaWdoZXIgbGF5ZXJzIGV4cGVjdCBpdC4gIDB4ZmZmZmZmZmYgaXMgdXNlZCBhcyBhIGZsYWcgdG8gaW5kaWNhdGUKKyogdGhlIEZDUyBpcyBib2d1cy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJcnhmcm0JCXJ4IGRlc2NyaXB0b3IgcmVhZCBmcm9tIGNhcmQgaW4gaW50X3J4CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglBbGxvY2F0ZXMgYW4gc2tiIGFuZCBwYXNzZXMgaXQgdXAgdmlhIHRoZSBQRl9QQUNLRVQgaW50ZXJmYWNlLgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pCit7CisJaGZhMzg0eF9yeF9mcmFtZV90ICAgICAgICAgICAgICAqcnhkZXNjID0gJihyeGZybS0+ZGVzYyk7CisJVUlOVAkJCQloZHJsZW4gPSAwOworCVVJTlQJCQkJZGF0YWxlbiA9IDA7CisJVUlOVAkJCQlza2JsZW4gPSAwOworCXA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdAkqbXNnOworCVVJTlQ4CQkJCSpkYXRhcDsKKwlVSU5UMTYJCQkJZmM7CisJc3RydWN0IHNrX2J1ZmYJCQkqc2tiOworCWhmYTM4NHhfdAkJICAgICAgICAqaHcgPSB3bGFuZGV2LT5wcml2OworCisKKwlEQkZFTlRFUjsKKwkvKiBEb24ndCBmb3JnZXQgdGhlIHN0YXR1cywgdGltZSwgYW5kIGRhdGFfbGVuIGZpZWxkcyBhcmUgaW4gaG9zdCBvcmRlciAqLworCS8qIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZnJhbWUgaXMgKi8KKwlmYyA9IGllZWUyaG9zdDE2KHJ4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CisJaGRybGVuID0gcDgwMjExX2hlYWRlcmxlbihmYyk7CisJZGF0YWxlbiA9IGhmYTM4NHgyaG9zdF8xNihyeGRlc2MtPmRhdGFfbGVuKTsKKworCS8qIEFsbG9jYXRlIGFuIGluZCBtZXNzYWdlK2ZyYW1lc2l6ZSBza2IgKi8KKwlza2JsZW4gPSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSArCisJCWhkcmxlbiArIGRhdGFsZW4gKyBXTEFOX0NSQ19MRU47CisKKwkvKiBzYW5pdHkgY2hlY2sgdGhlIGxlbmd0aCAqLworCWlmICggc2tibGVuID4KKwkJKHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpICsKKwkJV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsICJvdmVybGVuIGZybTogbGVuPSV6ZFxuIiwKKwkJCXNrYmxlbiAtIHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpKTsKKwl9CisKKwlpZiAoIChza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbikpID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJhbGxvY19za2IgZmFpbGVkIHRyeWluZyB0byBhbGxvY2F0ZSAlZCBieXRlc1xuIiwgc2tibGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG9ubHkgcHJlcGVuZCB0aGUgcHJpc20gaGVhZGVyIGlmIGluIHRoZSByaWdodCBtb2RlICovCisJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTSkgJiYKKwkgICAgKGh3LT5zbmlmZmhkciA9PSAwKSkgeworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSk7CisJCW1zZyA9IChwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QqKSBkYXRhcDsKKworCQkvKiBJbml0aWFsaXplIHRoZSBtZXNzYWdlIG1lbWJlcnMgKi8KKwkJbXNnLT5tc2djb2RlID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybTsKKwkJbXNnLT5tc2dsZW4gPSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KTsKKwkJc3RyY3B5KG1zZy0+ZGV2bmFtZSwgd2xhbmRldi0+bmFtZSk7CisKKwkJbXNnLT5ob3N0dGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2hvc3R0aW1lOworCQltc2ctPmhvc3R0aW1lLnN0YXR1cyA9IDA7CisJCW1zZy0+aG9zdHRpbWUubGVuID0gNDsKKwkJbXNnLT5ob3N0dGltZS5kYXRhID0gamlmZmllczsKKworCQltc2ctPm1hY3RpbWUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lOworCQltc2ctPm1hY3RpbWUuc3RhdHVzID0gMDsKKwkJbXNnLT5tYWN0aW1lLmxlbiA9IDQ7CisJCW1zZy0+bWFjdGltZS5kYXRhID0gcnhkZXNjLT50aW1lOworCisJCW1zZy0+Y2hhbm5lbC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWw7CisJCW1zZy0+Y2hhbm5lbC5zdGF0dXMgPSAwOworCQltc2ctPmNoYW5uZWwubGVuID0gNDsKKwkJbXNnLT5jaGFubmVsLmRhdGEgPSBody0+c25pZmZfY2hhbm5lbDsKKworCQltc2ctPnJzc2kuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpOworCQltc2ctPnJzc2kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5yc3NpLmxlbiA9IDQ7CisJCW1zZy0+cnNzaS5kYXRhID0gMDsKKworCQltc2ctPnNxLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc3E7CisJCW1zZy0+c3Euc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5zcS5sZW4gPSA0OworCQltc2ctPnNxLmRhdGEgPSAwOworCisJCW1zZy0+c2lnbmFsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsOworCQltc2ctPnNpZ25hbC5zdGF0dXMgPSAwOworCQltc2ctPnNpZ25hbC5sZW4gPSA0OworCQltc2ctPnNpZ25hbC5kYXRhID0gcnhkZXNjLT5zaWduYWw7CisKKwkJbXNnLT5ub2lzZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlOworCQltc2ctPm5vaXNlLnN0YXR1cyA9IDA7CisJCW1zZy0+bm9pc2UubGVuID0gNDsKKwkJbXNnLT5ub2lzZS5kYXRhID0gcnhkZXNjLT5zaWxlbmNlOworCisJCW1zZy0+cmF0ZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGU7CisJCW1zZy0+cmF0ZS5zdGF0dXMgPSAwOworCQltc2ctPnJhdGUubGVuID0gNDsKKwkJbXNnLT5yYXRlLmRhdGEgPSByeGRlc2MtPnJhdGUgLyA1OyAvKiBzZXQgdG8gODAyLjExIHVuaXRzICovCisKKwkJbXNnLT5pc3R4LmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eDsKKwkJbXNnLT5pc3R4LnN0YXR1cyA9IDA7CisJCW1zZy0+aXN0eC5sZW4gPSA0OworCQltc2ctPmlzdHguZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisKKwkJbXNnLT5mcm1sZW4uZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW47CisJCW1zZy0+ZnJtbGVuLnN0YXR1cyA9IDA7CisJCW1zZy0+ZnJtbGVuLmxlbiA9IDQ7CisJCW1zZy0+ZnJtbGVuLmRhdGEgPSBoZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOworCX0gZWxzZSBpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgorCQkgICAoaHctPnNuaWZmaGRyICE9IDApKSB7CisJCXA4MDIxMV9jYXBoZHJfdAkJKmNhcGhkcjsKKwkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QqKSBkYXRhcDsKKworCQljYXBoZHItPnZlcnNpb24gPQlodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOworCQljYXBoZHItPmxlbmd0aCA9CWh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyLT5tYWN0aW1lID0JX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpICogMTAwMDsKKwkJY2FwaGRyLT5ob3N0dGltZSA9CV9fY3B1X3RvX2JlNjQoamlmZmllcyk7CisJCWNhcGhkci0+cGh5dHlwZSA9CWh0b25sKDQpOyAvKiBkc3NfZG90MTFfYiAqLworCQljYXBoZHItPmNoYW5uZWwgPQlodG9ubChody0+c25pZmZfY2hhbm5lbCk7CisJCWNhcGhkci0+ZGF0YXJhdGUgPQlodG9ubChyeGRlc2MtPnJhdGUpOworCQljYXBoZHItPmFudGVubmEgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLworCQljYXBoZHItPnByaW9yaXR5ID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5zc2lfdHlwZSA9CWh0b25sKDMpOyAvKiByc3NpX3JhdyAqLworCQljYXBoZHItPnNzaV9zaWduYWwgPQlodG9ubChyeGRlc2MtPnNpZ25hbCk7CisJCWNhcGhkci0+c3NpX25vaXNlID0JaHRvbmwocnhkZXNjLT5zaWxlbmNlKTsKKwkJY2FwaGRyLT5wcmVhbWJsZSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCisJCWNhcGhkci0+ZW5jb2RpbmcgPQlodG9ubCgxKTsgLyogY2NrICovCisJfQorCisJLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiIChjdGwgZnJhbWVzIG1heSBiZSBsZXNzIHRoYW4gYSBmdWxsIGhlYWRlcikgKi8KKwlkYXRhcCA9IHNrYl9wdXQoc2tiLCBoZHJsZW4pOworCW1lbWNweSggZGF0YXAsICYocnhkZXNjLT5mcmFtZV9jb250cm9sKSwgaGRybGVuKTsKKworCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KKwlpZiAoIGRhdGFsZW4gPiAwICkKKwl7CisJCWRhdGFwID0gc2tiX3B1dChza2IsIGRhdGFsZW4pOworCQltZW1jcHkoZGF0YXAsIHJ4ZnJtLT5kYXRhLCBkYXRhbGVuKTsKKworCQkvKiBjaGVjayBmb3IgdW5lbmNyeXB0ZWQgc3R1ZmYgaWYgV0VQIGJpdCBzZXQuICovCisJCWlmICgqKGRhdGFwIC0gaGRybGVuICsgMSkgJiAweDQwKSAvLyB3ZXAgc2V0CisJCSAgaWYgKCgqKGRhdGFwKSA9PSAweGFhKSAmJiAoKihkYXRhcCsxKSA9PSAweGFhKSkKKwkJICAgICooZGF0YXAgLSBoZHJsZW4gKyAxKSAmPSAweGJmOyAvLyBjbGVhciB3ZXA7IGl0J3MgdGhlIDgwMi4yIGhlYWRlciEKKwl9CisKKwlpZiAoaHctPnNuaWZmX2ZjcykgeworCQkvKiBTZXQgdGhlIEZDUyAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pOworCQltZW1zZXQoIGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCX0KKworCS8qIHBhc3MgaXQgYmFjayB1cCAqLworCXByaXNtMnN0YV9ldl9yeCh3bGFuZGV2LCBza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2Jpbl9pbmZvCisqCisqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgcmVjZWl2ZWQgYSBQcmlzbTIgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JpbgkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKQoreworCURCRkVOVEVSOworCisJdXNiaW4tPmluZm9mcm0uaW5mby5mcmFtZWxlbiA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+aW5mb2ZybS5pbmZvLmZyYW1lbGVuKTsKKwlwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2LCAmdXNiaW4tPmluZm9mcm0uaW5mbyk7CisKKwlEQkZFWElUOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrCisqCisqIENhbGxiYWNrIGZvciBVUkJzIG9uIHRoZSBCVUxLT1VUIGVuZHBvaW50LgorKgorKiBBcmd1bWVudHM6CisqCXVyYgkJcHRyIHRvIHRoZSBjb21wbGV0ZWQgdXJiCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVVJCX09OTFlfQ0FMTEJBQ0sKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKKyNlbHNlCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2VuZGlmCit7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKKwloZmEzODR4X3VzYm91dF90CSp1c2JvdXQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlEQkZFTlRFUjsKKworI2lmZGVmIERFQlVHX1VTQgorCWRicHJpbnRfdXJiKHVyYik7CisjZW5kaWYKKworCWlmICggd2xhbmRldiAmJgorCSAgICAgd2xhbmRldi0+bmV0ZGV2ICkgeworCisJCXN3aXRjaCh1cmItPnN0YXR1cykgeworCQljYXNlIDA6CisJCQloZmEzODR4X3VzYm91dF90eCh3bGFuZGV2LCB1c2JvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSAtRVBJUEU6CisJCXsKKwkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJaWYgKCAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSApCisJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgLUVQUk9UTzoKKwkJY2FzZSAtRVRJTUVET1VUOgorCQljYXNlIC1FSUxTRVE6CisJCXsKKwkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCisJCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykKKwkJCSAgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkgKSB7CisJCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsCisJCQkJICAgICAgICAgIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCX0KKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CisJCQluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVNIVVRET1dOOgorCQkJLyogSWdub3JhYmxlIGVycm9ycyAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCVdMQU5fTE9HX0lORk8oInVua25vd24gdXJiLT5zdGF0dXM9JWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CisJCQlicmVhazsKKwkJfSAvKiBzd2l0Y2ggKi8KKwl9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2sKKyoKKyogQ2FsbGJhY2sgZm9yIGNvbnRyb2wgZGF0YSBvbiB0aGUgQlVMS09VVCBlbmRwb2ludC4KKyoKKyogQXJndW1lbnRzOgorKgl1cmIJCXB0ciB0byB0aGUgY29tcGxldGVkIHVyYgorKgorKiBSZXR1cm5zOgorKiBub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKiBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFVSQl9PTkxZX0NBTExCQUNLCitzdGF0aWMgdm9pZCBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorI2Vsc2UKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2VuZGlmCit7CisJaGZhMzg0eF90CSpodyA9IHVyYi0+Y29udGV4dDsKKwlpbnQgICAgICAgICAgICAgZGVsZXRlX3Jlc3B0aW1lciA9IDA7CisJaW50ICAgICAgICAgICAgIHRpbWVyX29rID0gMTsKKwlpbnQJCXJ1bl9xdWV1ZSA9IDA7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCURCRkVOVEVSOworCisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGF0dXM9JWRcbiIsIHVyYi0+c3RhdHVzKTsKKyNpZmRlZiBERUJVR19VU0IKKwlkYnByaW50X3VyYih1cmIpOworI2VuZGlmCisJaWYgKCAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgfHwKKwkgICAgICh1cmItPnN0YXR1cyA9PSAtRU5PREVWKSB8fAorCSAgICAgKGh3ID09IE5VTEwpICkKKwkJZ290byBkb25lOworCityZXRyeToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogT25seSBvbmUgQ1RMWCBhdCBhIHRpbWUgb24gdGhlICJhY3RpdmUiIGxpc3QsIGFuZAorCSAqIG5vbmUgYXQgYWxsIGlmIHdlIGFyZSB1bnBsdWdnZWQuIEhvd2V2ZXIsIHdlIGNhbgorCSAqIHJlbHkgb24gdGhlIGRpc2Nvbm5lY3QgZnVuY3Rpb24gdG8gY2xlYW4gZXZlcnl0aGluZworCSAqIHVwIGlmIHNvbWVvbmUgdW5wbHVnZ2VkIHRoZSBhZGFwdGVyLgorCSAqLworCWlmICggbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIEhhdmluZyBzb21ldGhpbmcgb24gdGhlICJhY3RpdmUiIHF1ZXVlIG1lYW5zCisJICogdGhhdCB3ZSBoYXZlIHRpbWVycyB0byB3b3JyeSBhYm91dCAuLi4KKwkgKi8KKwlpZiAoZGVsX3RpbWVyKCZody0+cmVxdGltZXIpID09IDApIHsKKwkJaWYgKGh3LT5yZXFfdGltZXJfZG9uZSA9PSAwKSB7CisJCQkvKgorCQkJICogVGhpcyB0aW1lciB3YXMgYWN0dWFsbHkgcnVubmluZyB3aGlsZSB3ZQorCQkJICogd2VyZSB0cnlpbmcgdG8gZGVsZXRlIGl0LiBMZXQgaXQgdGVybWluYXRlCisJCQkgKiBncmFjZWZ1bGx5IGluc3RlYWQuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCWVsc2UgeworCQlody0+cmVxX3RpbWVyX2RvbmUgPSAxOworCX0KKworCWN0bHggPSBnZXRfYWN0aXZlX2N0bHgoaHcpOworCisJaWYgKCB1cmItPnN0YXR1cyA9PSAwICkgeworCQkvKiBSZXF1ZXN0IHBvcnRpb24gb2YgYSBDVExYIGlzIHN1Y2Nlc3NmdWwgKi8KKwkJc3dpdGNoICggY3RseC0+c3RhdGUgKSB7CisJCWNhc2UgQ1RMWF9SRVFfU1VCTUlUVEVEOgorCQkJLyogVGhpcyBPVVQtQUNLIHJlY2VpdmVkIGJlZm9yZSBJTiAqLworCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9DT01QTEVURTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1RMWF9SRVNQX0NPTVBMRVRFOgorCQkJLyogSU4gYWxyZWFkeSByZWNlaXZlZCBiZWZvcmUgdGhpcyBPVVQtQUNLLAorCQkJICogc28gdGhpcyBjb21tYW5kIG11c3Qgbm93IGJlIGNvbXBsZXRlLgorCQkJICovCisJCQljdGx4LT5zdGF0ZSA9IENUTFhfQ09NUExFVEU7CisJCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBjdGx4KTsKKwkJCXJ1bl9xdWV1ZSA9IDE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogVGhpcyBpcyBOT1QgYSB2YWxpZCBDVExYICJzdWNjZXNzIiBzdGF0ZSEgKi8KKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJICAgICJJbGxlZ2FsIENUTFhbJWRdIHN1Y2Nlc3Mgc3RhdGUoJXMsICVkKSBpbiBPVVQgVVJCXG4iLAorCQkJICAgIGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYudHlwZSksCisJCQkgICAgY3RseHN0cihjdGx4LT5zdGF0ZSksIHVyYi0+c3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IC8qIHN3aXRjaCAqLworCX0gZWxzZSB7CisJCS8qIElmIHRoZSBwaXBlIGhhcyBzdGFsbGVkIHRoZW4gd2UgbmVlZCB0byByZXNldCBpdCAqLworCQlpZiAoICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpICYmCisJCSAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkgeworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJCX0KKworCQkvKiBJZiBzb21lb25lIGNhbmNlbHMgdGhlIE9VVCBVUkIgdGhlbiBpdHMgc3RhdHVzCisJCSAqIHNob3VsZCBiZSBlaXRoZXIgLUVDT05OUkVTRVQgb3IgLUVOT0VOVC4KKwkJICovCisJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVFfRkFJTEVEOworCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBjdGx4KTsKKwkJZGVsZXRlX3Jlc3B0aW1lciA9IDE7CisJCXJ1bl9xdWV1ZSA9IDE7CisJfQorCisgZGVscmVzcDoKKwlpZiAoZGVsZXRlX3Jlc3B0aW1lcikgeworCQlpZiAoKHRpbWVyX29rID0gZGVsX3RpbWVyKCZody0+cmVzcHRpbWVyKSkgIT0gMCkgeworCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKCAhdGltZXJfb2sgJiYgKGh3LT5yZXNwX3RpbWVyX2RvbmUgPT0gMCkgKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQlnb3RvIGRlbHJlc3A7CisJfQorCisJaWYgKHJ1bl9xdWV1ZSkKKwkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCisgZG9uZToKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbgorKgorKiBUaW1lciByZXNwb25zZSBmdW5jdGlvbiBmb3IgQ1RMWCByZXF1ZXN0IHRpbWVvdXRzLiAgSWYgdGhpcworKiBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgT1VUCisqIFVSQiBjb250YWluaW5nIGEgUHJpc20yLnggWFhYX1JlcXVlc3Qgd2FzIG5ldmVyIGNhbGxlZC4KKyoKKyogQXJndW1lbnRzOgorKglkYXRhCQlhIHB0ciB0byB0aGUgaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQoreworCWhmYTM4NHhfdAkqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaHctPnJlcV90aW1lcl9kb25lID0gMTsKKworCS8qIFJlbW92aW5nIHRoZSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGVtcHRpZXMKKwkgKiB0aGUgYWN0aXZlIGxpc3QgLi4uCisJICovCisJaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKQorCXsKKwkJLyoKKwkJICogV2UgbXVzdCBlbnN1cmUgdGhhdCBvdXIgVVJCIGlzIHJlbW92ZWQgZnJvbQorCQkgKiB0aGUgc3lzdGVtLCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBleHBpcmVkLgorCQkgKi8KKwkJaHctPmN0bHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJCWlmICh1c2JfdW5saW5rX3VyYigmaHctPmN0bHhfdXJiKSA9PSAtRUlOUFJPR1JFU1MpCisJCXsKKwkJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKKworCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9GQUlMRUQ7CisKKwkJCS8qIFRoaXMgVVJCIHdhcyBhY3RpdmUsIGJ1dCBoYXMgbm93IGJlZW4KKwkJCSAqIGNhbmNlbGxlZC4gSXQgd2lsbCBub3cgaGF2ZSBhIHN0YXR1cyBvZgorCQkJICogLUVDT05OUkVTRVQgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorCQkJICoKKwkJCSAqIFdlIGFyZSBjYW5jZWxsaW5nIHRoaXMgQ1RMWCwgc28gd2UncmUKKwkJCSAqIG5vdCBnb2luZyB0byBuZWVkIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UuCisJCQkgKiBUaGUgVVJCJ3MgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBjaGVjaworCQkJICogdGhhdCB0aGlzIHRpbWVyIGlzIHRydWx5IGRlYWQuCisJCQkgKi8KKwkJCWlmIChkZWxfdGltZXIoJmh3LT5yZXNwdGltZXIpICE9IDApCisJCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuCisqCisqIFRpbWVyIHJlc3BvbnNlIGZ1bmN0aW9uIGZvciBDVExYIHJlc3BvbnNlIHRpbWVvdXRzLiAgSWYgdGhpcworKiBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgSU4KKyogVVJCIGNvbnRhaW5pbmcgYSBQcmlzbTIueCBYWFhfUmVzcG9uc2Ugd2FzIG5ldmVyIGNhbGxlZC4KKyoKKyogQXJndW1lbnRzOgorKglkYXRhCQlhIHB0ciB0byB0aGUgaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisKKwkvKiBUaGUgYWN0aXZlIGxpc3Qgd2lsbCBiZSBlbXB0eSBpZiB0aGUKKwkgKiBhZGFwdGVyIGhhcyBiZWVuIHVucGx1Z2dlZCAuLi4KKwkgKi8KKwlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApCisJeworCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CisKKwkJaWYgKCB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCApCisJCXsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisgZG9uZToKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JfdGhyb3R0bGVmbgorKgorKgorKiBBcmd1bWVudHM6CisqCWRhdGEJcHRyIHRvIGh3CisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJREJGRU5URVI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogV2UgbmVlZCB0byBjaGVjayBCT1RIIHRoZSBSWCBhbmQgdGhlIFRYIHRocm90dGxlIGNvbnRyb2xzLAorCSAqIHNvIHdlIHVzZSB0aGUgYml0d2lzZSBPUiBpbnN0ZWFkIG9mIHRoZSBsb2dpY2FsIE9SLgorCSAqLworCVdMQU5fTE9HX0RFQlVHKDMsICJmbGFncz0weCVseFxuIiwgaHctPnVzYl9mbGFncyk7CisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgorCSAgICAgKAorCSAgICAgICAodGVzdF9hbmRfY2xlYXJfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKKwkgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKKwkgICAgICAgfAorCSAgICAgICAodGVzdF9hbmRfY2xlYXJfYml0KFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykgJiYKKwkgICAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykpCisJICAgICApICkKKwl7CisJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9zdWJtaXQKKyoKKyogQ2FsbGVkIGZyb20gdGhlIGRveHh4IGZ1bmN0aW9ucyB0byBzdWJtaXQgYSBDVExYIHRvIHRoZSBxdWV1ZQorKgorKiBBcmd1bWVudHM6CisqCWh3CQlwdHIgdG8gdGhlIGh3IHN0cnVjdAorKgljdGx4CQljdGx4IHN0cnVjdHVyZSB0byBlbnF1ZXVlCisqCisqIFJldHVybnM6CisqCS1FTk9ERVYgaWYgdGhlIGFkYXB0ZXIgaXMgdW5wbHVnZ2VkCisqCTAKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3Mgb3IgaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK2hmYTM4NHhfdXNiY3RseF9zdWJtaXQoCisJaGZhMzg0eF90CQkqaHcsCisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJREJGRU5URVI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCXJldCA9IC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJY3RseC0+c3RhdGUgPSBDVExYX1BFTkRJTkc7CisJCWxpc3RfYWRkX3RhaWwoJmN0bHgtPmxpc3QsICZody0+Y3RseHEucGVuZGluZyk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCQlyZXQgPSAwOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJldDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JvdXRfdHgKKyoKKyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGZpbmlzaGVkIGEgc2VuZCBvZiBhIGZyYW1lLiAgTWFyayB0aGUgVVJCCisqIGFzIGF2YWlsYWJsZSBhbmQgY2FsbCBldl9hbGxvYyB0byBub3RpZnkgaGlnaGVyIGxheWVycyB3ZSdyZQorKiByZWFkeSBmb3IgbW9yZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JvdXQJCXB0ciB0byB0aGUgdXNiIHRyYW5zZmVyIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYm91dF90ICp1c2JvdXQpCit7CisJREJGRU5URVI7CisKKwlwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pc2dvb2RfcGRyY29yZQorKgorKiBRdWljayBjaGVjayBvZiBQRFIgY29kZXMuCisqCisqIEFyZ3VtZW50czoKKyoJcGRyY29kZQkJUERSIGNvZGUgbnVtYmVyIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlub3QgZ29vZC4KKyoJb25lCQlpcyBnb29kLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9pc2dvb2RfcGRyY29kZShVSU5UMTYgcGRyY29kZSkKK3sKKwlzd2l0Y2gocGRyY29kZSkgeworCWNhc2UgSEZBMzg0eF9QRFJfRU5EX09GX1BEQToKKwljYXNlIEhGQTM4NHhfUERSX1BDQl9QQVJUTlVNOgorCWNhc2UgSEZBMzg0eF9QRFJfUERBVkVSOgorCWNhc2UgSEZBMzg0eF9QRFJfTklDX1NFUklBTDoKKwljYXNlIEhGQTM4NHhfUERSX01LS19NRUFTVVJFTUVOVFM6CisJY2FzZSBIRkEzODR4X1BEUl9OSUNfUkFNU0laRToKKwljYXNlIEhGQTM4NHhfUERSX01GSVNVUFJBTkdFOgorCWNhc2UgSEZBMzg0eF9QRFJfQ0ZJU1VQUkFOR0U6CisJY2FzZSBIRkEzODR4X1BEUl9OSUNJRDoKKwljYXNlIEhGQTM4NHhfUERSX01BQ19BRERSRVNTOgorCWNhc2UgSEZBMzg0eF9QRFJfUkVHRE9NQUlOOgorCWNhc2UgSEZBMzg0eF9QRFJfQUxMT1dFRF9DSEFOTkVMOgorCWNhc2UgSEZBMzg0eF9QRFJfREVGQVVMVF9DSEFOTkVMOgorCWNhc2UgSEZBMzg0eF9QRFJfVEVNUFRZUEU6CisJY2FzZSBIRkEzODR4X1BEUl9JRlJfU0VUVElORzoKKwljYXNlIEhGQTM4NHhfUERSX1JGUl9TRVRUSU5HOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9CQVNFTElORToKKwljYXNlIEhGQTM4NHhfUERSX0hGQTM4NjFfU0hBRE9XOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9JRlJGOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTFNQOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTEk6CisJY2FzZSBIRkEzODR4X1BEUl8zODQyX05JQ19DT05GSUc6CisJY2FzZSBIRkEzODR4X1BEUl9VU0JfSUQ6CisJY2FzZSBIRkEzODR4X1BEUl9QQ0lfSUQ6CisJY2FzZSBIRkEzODR4X1BEUl9QQ0lfSUZDT05GOgorCWNhc2UgSEZBMzg0eF9QRFJfUENJX1BNQ09ORjoKKwljYXNlIEhGQTM4NHhfUERSX1JGRU5SR1k6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX01BTkZfVEVTVFNQOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RJOgorCQkvKiBjb2RlIGlzIE9LICovCisJCXJldHVybiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoIHBkcmNvZGUgPCAweDEwMDAgKSB7CisJCQkvKiBjb2RlIGlzIE9LLCBidXQgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgaXMgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDMsCisJCQkJIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKKwkJCQkiYXNzdW1pbmcgaXQncyBvay5cbiIsCisJCQkJcGRyY29kZSk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCS8qIGJhZCBjb2RlICovCisJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCSJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAiCisJCQkJIig+PTB4MTAwMCksIGFzc3VtaW5nIGl0J3MgYmFkLlxuIiwKKwkJCQlwZHJjb2RlKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgKi8KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MTIxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKQEAgLTAsMCArMSw2ODMgQEAKKy8qIHNyYy9wODAyMTEvcDgwMjExY29udi5jCisqCisqIEV0aGVyLzgwMi4xMSBjb252ZXJzaW9ucyBhbmQgcGFja2V0IGJ1ZmZlciByb3V0aW5lcworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSBFdGhlcm5ldCB0by9mcm9tCisqIDgwMi4xMSBmcmFtZSBjb252ZXJzaW9ucy4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKyNkZWZpbmUgX19OT19WRVJTSU9OX18JCS8qIHByZXZlbnQgdGhlIHN0YXRpYyBkZWZpbml0aW9uICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFpb2N0bC5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworc3RhdGljIFVJTlQ4CW91aV9yZmMxMDQyW10gPSB7MHgwMCwgMHgwMCwgMHgwMH07CitzdGF0aWMgVUlOVDgJb3VpXzgwMjFoW10gPSB7MHgwMCwgMHgwMCwgMHhmOH07CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXBiX2V0aGVyX3RvXzgwMjExCisqCisqIFVzZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBldGhlciBmcmFtZSBhbmQgdGhlIGV0aGVyY29udiBzZXR0aW5nCisqIHRvIGJ1aWxkIHRoZSBlbGVtZW50cyBvZiB0aGUgODAyLjExIGZyYW1lLgorKgorKiBXZSBkb24ndCBhY3R1YWxseSBzZXQKKyogdXAgdGhlIGZyYW1lIGhlYWRlciBoZXJlLiAgVGhhdCdzIHRoZSBNQUMncyBqb2IuICBXZSdyZSBvbmx5IGhhbmRsaW5nCisqIGNvbnZlcnNpb24gb2YgRElYSUkgb3IgODAyLjMrTExDIGZyYW1lcyB0byBzb21ldGhpbmcgdGhhdCB3b3JrcworKiB3aXRoIDgwMi4xMS4KKyoKKyogTm90ZSAtLSA4MDIuMTEgaGVhZGVyIGlzIE5PVCBwYXJ0IG9mIHRoZSBza2IuICBMaWtld2lzZSwgdGhlIDgwMi4xMQorKiAgICAgICAgIEZDUyBpcyBhbHNvIG5vdCBwcmVzZW50IGFuZCB3aWxsIG5lZWQgdG8gYmUgYWRkZWQgZWxzZXdoZXJlLgorKgorKiBBcmd1bWVudHM6CisqCWV0aGNvbnYJCUNvbnZlcnNpb24gdHlwZSB0byBwZXJmb3JtCisqCXNrYgkJc2tidWZmIGNvbnRhaW5pbmcgdGhlIGV0aGVyIGZyYW1lCisqICAgICAgIHA4MDIxMV9oZHIgICAgICA4MDIuMTEgaGVhZGVyCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBza2JfZXRoZXJfdG9fcDgwMjExKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQzMiBldGhjb252LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCit7CisKKwlVSU5UMTYgICAgICAgICAgZmM7CisJVUlOVDE2ICAgICAgICAgIHByb3RvOworCXdsYW5fZXRoaGRyX3QgICBlX2hkcjsKKwl3bGFuX2xsY190ICAgICAgKmVfbGxjOworCXdsYW5fc25hcF90ICAgICAqZV9zbmFwOworCWludCBmb287CisKKwlEQkZFTlRFUjsKKwltZW1jcHkoJmVfaGRyLCBza2ItPmRhdGEsIHNpemVvZihlX2hkcikpOworCisJaWYgKHNrYi0+bGVuIDw9IDApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgInplcm8tbGVuZ3RoIHNrYiFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WX0VOQ0FQICkgeyAvKiBzaW1wbGVzdCBjYXNlICovCisJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiRU5DQVAgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCQkvKiBoZXJlLCB3ZSBkb24ndCBjYXJlIHdoYXQga2luZCBvZiBldGhlciBmcm0uIEp1c3Qgc3RpY2sgaXQgKi8KKwkJLyogIGluIHRoZSA4MDIxMSBwYXlsb2FkICovCisJCS8qIHdoaWNoIGlzIHRvIHNheSwgbGVhdmUgdGhlIHNrYiBhbG9uZS4gKi8KKwl9IGVsc2UgeworCQkvKiBzdGVwIDE6IGNsYXNzaWZ5IGV0aGVyIGZyYW1lLCBESVggb3IgODAyLjM/ICovCisJCXByb3RvID0gbnRvaHMoZV9oZHIudHlwZSk7CisJCWlmICggcHJvdG8gPD0gMTUwMCApIHsKKwkJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiODAyLjMgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgLyogY29kZXMgPD0gMTUwMCByZXNlcnZlZCBmb3IgODAyLjMgbGVuZ3RocyAqLworCQkJLyogaXQncyA4MDIuMywgcGFzcyBldGhlciBwYXlsb2FkIHVuY2hhbmdlZCwgICovCisKKwkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLworCQkJc2tiX3B1bGwoc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCisJCQkvKiAgIGxlYXZlIG9mZiBhbnkgUEFEIG9jdGV0cy4gICovCisJCQlza2JfdHJpbShza2IsIHByb3RvKTsKKwkJfSBlbHNlIHsKKwkJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiRElYSUkgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCQkJLyogaXQncyBESVhJSSwgdGltZSBmb3Igc29tZSBjb252ZXJzaW9uICovCisKKwkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLworCQkJc2tiX3B1bGwoc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCisJCQkvKiB0YWNrIG9uIFNOQVAgKi8KKwkJCWVfc25hcCA9ICh3bGFuX3NuYXBfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX3NuYXBfdCkpOworCQkJZV9zbmFwLT50eXBlID0gaHRvbnMocHJvdG8pOworCQkJaWYgKCBldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaCAmJiBwODAyMTFfc3R0X2ZpbmRwcm90byhwcm90bykgKSB7CisJCQkJbWVtY3B5KCBlX3NuYXAtPm91aSwgb3VpXzgwMjFoLCBXTEFOX0lFRUVfT1VJX0xFTik7CisJCQl9IGVsc2UgeworCQkJCW1lbWNweSggZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTik7CisJCQl9CisKKwkJCS8qIHRhY2sgb24gbGxjICovCisJCQllX2xsYyA9ICh3bGFuX2xsY190ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwkJCWVfbGxjLT5kc2FwID0gMHhBQTsJLyogU05BUCwgc2VlIElFRUUgODAyICovCisJCQllX2xsYy0+c3NhcCA9IDB4QUE7CisJCQllX2xsYy0+Y3RsID0gMHgwMzsKKworCQl9CisJfQorCisJLyogU2V0IHVwIHRoZSA4MDIuMTEgaGVhZGVyICovCisJLyogSXQncyBhIGRhdGEgZnJhbWUgKi8KKwlmYyA9IGhvc3QyaWVlZTE2KCBXTEFOX1NFVF9GQ19GVFlQRShXTEFOX0ZUWVBFX0RBVEEpIHwKKwkJCSAgV0xBTl9TRVRfRkNfRlNUWVBFKFdMQU5fRlNUWVBFX0RBVEFPTkxZKSk7CisKKwlzd2l0Y2ggKCB3bGFuZGV2LT5tYWNtb2RlICkgeworCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgorCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgd2xhbmRldi0+YnNzaWQsIFdMQU5fQUREUl9MRU4pOworCQlicmVhazsKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfU1RBOgorCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19UT0RTKDEpKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmExLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgorCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19GUk9NRFMoMSkpOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQUREUl9MRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTMsICZlX2hkci5zYWRkciwgV0xBTl9BRERSX0xFTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdMQU5fTE9HX0VSUk9SKCJFcnJvcjogQ29udmVydGluZyBldGggdG8gd2xhbiBpbiB1bmtub3duIG1vZGUuXG4iKTsKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKworCXA4MDIxMV93ZXAtPmRhdGEgPSBOVUxMOworCisJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VOQ1JZUFQpKSB7CisJCS8vIFhYWFggbmVlZCB0byBwaWNrIGtleW51bSBvdGhlciB0aGFuIGRlZmF1bHQ/CisKKyNpZiAxCisJCXA4MDIxMV93ZXAtPmRhdGEgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKyNlbHNlCisJCXA4MDIxMV93ZXAtPmRhdGEgPSBza2ItPmRhdGE7CisjZW5kaWYKKworCQlpZiAoKGZvbyA9IHdlcF9lbmNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSwgcDgwMjExX3dlcC0+ZGF0YSwKKwkJCQkgICAgICAgc2tiLT5sZW4sCisJCQkJKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyksCisJCQkJcDgwMjExX3dlcC0+aXYsIHA4MDIxMV93ZXAtPmljdikpKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCJIb3N0IGVuLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJcmV0dXJuIDI7CisJCX0KKwkJZmMgfD0gaG9zdDJpZWVlMTYoV0xBTl9TRVRfRkNfSVNXRVAoMSkpOworCX0KKworCisJLy8Jc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7CisKKwlwODAyMTFfaGRyLT5hMy5mYyA9IGZjOworCXA4MDIxMV9oZHItPmEzLmR1ciA9IDA7CisJcDgwMjExX2hkci0+YTMuc2VxID0gMDsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIGprcmllZ2w6IGZyb20gb3Jpbm9jbywgbW9kaWZpZWQgKi8KK3N0YXRpYyB2b2lkIG9yaW5vY29fc3B5X2dhdGhlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGNoYXIgKm1hYywKKwkJCSAgICAgICBwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YSkKK3sKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgLyogR2F0aGVyIHdpcmVsZXNzIHNweSBzdGF0aXN0aWNzOiBmb3IgZWFjaCBwYWNrZXQsIGNvbXBhcmUgdGhlCisgICAgICAgICAqIHNvdXJjZSBhZGRyZXNzIHdpdGggb3V0IGxpc3QsIGFuZCBpZiBtYXRjaCwgZ2V0IHRoZSBzdGF0cy4uLiAqLworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3bGFuZGV2LT5zcHlfbnVtYmVyOyBpKyspIHsKKworICAgICAgICAgICAgICAgIGlmICghbWVtY21wKHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKSkgeworCQkJbWVtY3B5KHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLmxldmVsID0gcnhtZXRhLT5zaWduYWw7CisgICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5ub2lzZSA9IHJ4bWV0YS0+bm9pc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5xdWFsID0gKHJ4bWV0YS0+c2lnbmFsID4gcnhtZXRhLT5ub2lzZSkgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyeG1ldGEtPnNpZ25hbCAtIHJ4bWV0YS0+bm9pc2UpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLnVwZGF0ZWQgPSAweDc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFwYl84MDIxMV90b19ldGhlcgorKgorKiBVc2VzIHRoZSBjb250ZW50cyBvZiBhIHJlY2VpdmVkIDgwMi4xMSBmcmFtZSBhbmQgdGhlIGV0aGVyY29udgorKiBzZXR0aW5nIHRvIGJ1aWxkIGFuIGV0aGVyIGZyYW1lLgorKgorKiBUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIHRoZSBzcmMgYW5kIGRlc3QgYWRkcmVzcyBmcm9tIHRoZSA4MDIuMTEKKyogZnJhbWUgdG8gdXNlIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGV0aCBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKglldGhjb252CQlDb252ZXJzaW9uIHR5cGUgdG8gcGVyZm9ybQorKglza2IJCVBhY2tldCBidWZmZXIgY29udGFpbmluZyB0aGUgODAyLjExIGZyYW1lCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBza2JfcDgwMjExX3RvX2V0aGVyKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQzMiBldGhjb252LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCW5ldGRldmljZV90ICAgICAqbmV0ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCVVJTlQxNiAgICAgICAgICBmYzsKKwlVSU5UICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGg7CisJVUlOVCAgICAgICAgICAgIHBheWxvYWRfb2Zmc2V0OworCVVJTlQ4CQlkYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKKwlVSU5UOAkJc2FkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJcDgwMjExX2hkcl90ICAgICp3X2hkcjsKKwl3bGFuX2V0aGhkcl90ICAgKmVfaGRyOworCXdsYW5fbGxjX3QgICAgICAqZV9sbGM7CisJd2xhbl9zbmFwX3QgICAgICplX3NuYXA7CisKKwlpbnQgZm9vOworCisJREJGRU5URVI7CisKKwlwYXlsb2FkX2xlbmd0aCA9IHNrYi0+bGVuIC0gV0xBTl9IRFJfQTNfTEVOIC0gV0xBTl9DUkNfTEVOOworCXBheWxvYWRfb2Zmc2V0ID0gV0xBTl9IRFJfQTNfTEVOOworCisJd19oZHIgPSAocDgwMjExX2hkcl90ICopIHNrYi0+ZGF0YTsKKworICAgICAgICAvKiBzZXR1cCBzb21lIHZhcnMgZm9yIGNvbnZlbmllbmNlICovCisJZmMgPSBpZWVlMmhvc3QxNih3X2hkci0+YTMuZmMpOworCWlmICggKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDApICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDApICkgeworCQltZW1jcHkoZGFkZHIsIHdfaGRyLT5hMy5hMSwgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShzYWRkciwgd19oZHItPmEzLmEyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwl9IGVsc2UgaWYoIChXTEFOX0dFVF9GQ19UT0RTKGZjKSA9PSAwKSAmJiAoV0xBTl9HRVRfRkNfRlJPTURTKGZjKSA9PSAxKSApIHsKKwkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTEsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMywgV0xBTl9FVEhBRERSX0xFTik7CisJfSBlbHNlIGlmKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMSkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkgKSB7CisJCW1lbWNweShkYWRkciwgd19oZHItPmEzLmEzLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KHNhZGRyLCB3X2hkci0+YTMuYTIsIFdMQU5fRVRIQUREUl9MRU4pOworCX0gZWxzZSB7CisJCXBheWxvYWRfb2Zmc2V0ID0gV0xBTl9IRFJfQTRfTEVOOworCQlwYXlsb2FkX2xlbmd0aCAtPSAoIFdMQU5fSERSX0E0X0xFTiAtIFdMQU5fSERSX0EzX0xFTiApOworCQlpZiAocGF5bG9hZF9sZW5ndGggPCAwICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkE0IGZyYW1lIHRvbyBzaG9ydCFcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTQuYTMsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hNC5hNCwgV0xBTl9FVEhBRERSX0xFTik7CisJfQorCisJLyogcGVyZm9ybSBkZS13ZXAgaWYgbmVjZXNzYXJ5Li4gKi8KKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiBXTEFOX0dFVF9GQ19JU1dFUChmYykgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpKSB7CisJCWlmIChwYXlsb2FkX2xlbmd0aCA8PSA4KSB7CisJCQlXTEFOX0xPR19FUlJPUigiV0VQIGZyYW1lIHRvbyBzaG9ydCAoJXUpLlxuIiwKKwkJCQkJc2tiLT5sZW4pOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKChmb28gPSB3ZXBfZGVjcnlwdCh3bGFuZGV2LCBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIDQsCisJCQkJICAgICAgIHBheWxvYWRfbGVuZ3RoIC0gOCwgLTEsCisJCQkJICAgICAgIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0LAorCQkJCSAgICAgICBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIHBheWxvYWRfbGVuZ3RoIC0gNCkpKSB7CisJCQkvKiBkZS13ZXAgZmFpbGVkLCBkcm9wIHNrYi4gKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJIb3N0IGRlLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJd2xhbmRldi0+cnguZGVjcnlwdF9lcnIrKzsKKwkJCXJldHVybiAyOworCQl9CisKKwkJLyogc3VidHJhY3QgdGhlIElWK0lDViBsZW5ndGggb2ZmIHRoZSBwYXlsb2FkICovCisJCXBheWxvYWRfbGVuZ3RoIC09IDg7CisJCS8qIGNob3Agb2ZmIHRoZSBJViAqLworCQlza2JfcHVsbChza2IsIDQpOworCQkvKiBjaG9wIG9mZiB0aGUgSUNWLiAqLworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7CisKKwkJd2xhbmRldi0+cnguZGVjcnlwdCsrOworCX0KKworCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKKworCWVfbGxjID0gKHdsYW5fbGxjX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKKwllX3NuYXAgPSAod2xhbl9zbmFwX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKworCS8qIFRlc3QgZm9yIHRoZSB2YXJpb3VzIGVuY29kaW5ncyAqLworCWlmICggKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2V0aGhkcl90KSkgJiYKKwkgICAgICggZV9sbGMtPmRzYXAgIT0gMHhhYSB8fCBlX2xsYy0+c3NhcCAhPSAweGFhICkgJiYKKwkgICAgICgobWVtY21wKGRhZGRyLCBlX2hkci0+ZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApIHx8CisJICAgICAobWVtY21wKHNhZGRyLCBlX2hkci0+c2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApKSkgeworCQlXTEFOX0xPR19ERUJVRygzLCAiODAyLjMgRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQkvKiA4MDIuMyBFbmNhcHN1bGF0ZWQgKi8KKwkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLworCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gKG5ldGRldi0+bXR1ICsgV0xBTl9FVEhIRFJfTEVOKSkgeworCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIGVuY2FwJ2QuICovCisJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCisJCQlXTEFOX0xPR19FUlJPUigiRU5DQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCQlwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBDaG9wIG9mZiB0aGUgODAyLjExIGhlYWRlci4gIGl0J3MgYWxyZWFkeSBzYW5lLiAqLworCQlza2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTsKKwkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CisKKwl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9sbGNfdCkgKyBzaXplb2Yod2xhbl9zbmFwX3QpKSAmJgorCQkgICAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYKKwkJICAgKGVfbGxjLT5zc2FwID09IDB4YWEpICYmCisJCSAgIChlX2xsYy0+Y3RsID09IDB4MDMpICYmCisJCSAgICgoKG1lbWNtcCggZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTik9PTApICYmCisJCSAgICAoZXRoY29udiA9PSBXTEFOX0VUSENPTlZfODAyMWgpICYmCisJCSAgICAocDgwMjExX3N0dF9maW5kcHJvdG8oaWVlZTJob3N0MTYoZV9zbmFwLT50eXBlKSkpKSB8fAorCQkgICAgKG1lbWNtcCggZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTikhPTApKSkKKwl7CisJCVdMQU5fTE9HX0RFQlVHKDMsICJTTkFQK1JGQzEwNDIgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQkvKiBpdCdzIGEgU05BUCArIFJGQzEwNDIgZnJhbWUgJiYgcHJvdG9jb2wgaXMgaW4gU1RUICovCisJCS8qIGJ1aWxkIDgwMi4zICsgUkZDMTA0MiAqLworCisJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KKwkJaWYgKCBwYXlsb2FkX2xlbmd0aCA+IG5ldGRldi0+bXR1ICkgeworCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCisJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCisJCQlXTEFOX0xPR19FUlJPUigiU05BUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIGNob3AgODAyLjExIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7CisKKwkJLyogY3JlYXRlIDgwMi4zIGhlYWRlciBhdCBiZWdpbm5pbmcgb2Ygc2tiLiAqLworCQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5kYWRkciwgZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoZV9oZHItPnNhZGRyLCBzYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisJCWVfaGRyLT50eXBlID0gaHRvbnMocGF5bG9hZF9sZW5ndGgpOworCisJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOworCisJfSAgZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpICYmCisJCSAgICAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYKKwkJICAgIChlX2xsYy0+c3NhcCA9PSAweGFhKSAmJgorCQkgICAgKGVfbGxjLT5jdGwgPT0gMHgwMykgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMWgvUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIGl0J3MgYW4gODAyLjFoIGZyYW1lIHx8IChhbiBSRkMxMDQyICYmIHByb3RvY29sIGlzIG5vdCBpbiBTVFQpICovCisJCS8qIGJ1aWxkIGEgRElYSUkgKyBSRkM4OTQgKi8KKworCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCisJCWlmICgocGF5bG9hZF9sZW5ndGggLSBzaXplb2Yod2xhbl9sbGNfdCkgLSBzaXplb2Yod2xhbl9zbmFwX3QpKQorCQkgICAgPiBuZXRkZXYtPm10dSkgeworCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCisJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCisJCQlXTEFOX0xPR19FUlJPUigiRElYSUkgZnJhbWUgdG9vIGxhcmdlICglbGQgPiAlZClcbiIsCisJCQkJCShsb25nIGludCkgKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHdsYW5fbGxjX3QpIC0KKwkJCQkJCSAgICBzaXplb2Yod2xhbl9zbmFwX3QpKSwKKwkJCQkJbmV0ZGV2LT5tdHUpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBjaG9wIDgwMi4xMSBoZWFkZXIgZnJvbSBza2IuICovCisJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOworCisJCS8qIGNob3AgbGxjIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yod2xhbl9sbGNfdCkpOworCisJCS8qIGNob3Agc25hcCBoZWFkZXIgZnJvbSBza2IuICovCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHdsYW5fc25hcF90KSk7CisKKwkJLyogY3JlYXRlIDgwMi4zIGhlYWRlciBhdCBiZWdpbm5pbmcgb2Ygc2tiLiAqLworCQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKKwkJZV9oZHItPnR5cGUgPSBlX3NuYXAtPnR5cGU7CisJCW1lbWNweShlX2hkci0+ZGFkZHIsIGRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5zYWRkciwgc2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCisJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsICJOT04tRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQkvKiBhbnkgTk9OLUVOQ0FQICovCisJCS8qIGl0J3MgYSBnZW5lcmljIDgwMjExK0xMQyBvciBJUFggJ1JhdyA4MDIuMycgKi8KKwkJLyogIGJ1aWxkIGFuIDgwMi4zIGZyYW1lICovCisJCS8qIGFsbG9jYXRlIHNwYWNlIGFuZCBzZXR1cCBob3N0YnVmICovCisKKwkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLworCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gbmV0ZGV2LT5tdHUgKSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJPVEhFUiBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJCXBheWxvYWRfbGVuZ3RoLAorCQkJCW5ldGRldi0+bXR1KTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogQ2hvcCBvZmYgdGhlIDgwMi4xMSBoZWFkZXIuICovCisJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOworCisJCS8qIGNyZWF0ZSA4MDIuMyBoZWFkZXIgYXQgYmVnaW5uaW5nIG9mIHNrYi4gKi8KKwkJZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CisJCW1lbWNweShlX2hkci0+ZGFkZHIsIGRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5zYWRkciwgc2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQllX2hkci0+dHlwZSA9IGh0b25zKHBheWxvYWRfbGVuZ3RoKTsKKworCQkvKiBjaG9wIG9mZiB0aGUgODAyLjExIENSQyAqLworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gV0xBTl9DUkNfTEVOKTsKKworCX0KKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKworICAgICAgICAvKiBqa3JpZWdsOiBwcm9jZXNzIHNpZ25hbCBhbmQgbm9pc2UgYXMgc2V0IGluIGhmYTM4NHhfaW50X3J4KCkgKi8KKwkvKiBqa3JpZWdsOiBvbmx5IHByb2Nlc3Mgc2lnbmFsL25vaXNlIGlmIHJlcXVlc3RlZCBieSBpd3NweSAqLworICAgICAgICBpZiAod2xhbmRldi0+c3B5X251bWJlcikKKyAgICAgICAgICAgICAgICBvcmlub2NvX3NweV9nYXRoZXIod2xhbmRldiwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgUDgwMjExU0tCX1JYTUVUQShza2IpKTsKKworCS8qIEZyZWUgdGhlIG1ldGFkYXRhICovCisJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFfc3R0X2ZpbmRwcm90bworKgorKiBTZWFyY2hlcyB0aGUgODAyLjFoIFNlbGVjdGl2ZSBUcmFuc2xhdGlvbiBUYWJsZSBmb3IgYSBnaXZlbgorKiBwcm90b2NvbC4KKyoKKyogQXJndW1lbnRzOgorKglwcm90bwlwcm90b2NsIG51bWJlciAoaW4gaG9zdCBvcmRlcikgdG8gc2VhcmNoIGZvci4KKyoKKyogUmV0dXJuczoKKyoJMSAtIGlmIHRoZSB0YWJsZSBpcyBlbXB0eSBvciBhIG1hdGNoIGlzIGZvdW5kLgorKgkwIC0gaWYgdGhlIHRhYmxlIGlzIG5vbi1lbXB0eSBhbmQgYSBtYXRjaCBpcyBub3QgZm91bmQuCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwODAyMTFfc3R0X2ZpbmRwcm90byhVSU5UMTYgcHJvdG8pCit7CisJLyogQWx3YXlzIHJldHVybiBmb3VuZCBmb3Igbm93LiAgVGhpcyBpcyB0aGUgYmVoYXZpb3IgdXNlZCBieSB0aGUgKi8KKwkvKiAgWm9vbSBXaW45NSBkcml2ZXIgd2hlbiA4MDIuMWggbW9kZSBpcyBzZWxlY3RlZCAqLworCS8qIFRPRE86IElmIG5lY2Vzc2FyeSwgYWRkIGFuIGFjdHVhbCBzZWFyY2ggd2UnbGwgcHJvYmFibHkKKwkJIG5lZWQgdGhpcyB0byBtYXRjaCB0aGUgQ01BQydzIHdheSBvZiBkb2luZyB0aGluZ3MuCisJCSBOZWVkIHRvIGRvIHNvbWUgdGVzdGluZyB0byBjb25maXJtLgorCSovCisKKwlpZiAocHJvdG8gPT0gMHg4MGYzKSAgLyogQVBQTEVUQUxLICovCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFza2JfcnhtZXRhX2RldGFjaAorKgorKiBEaXNjb25uZWN0cyB0aGUgZnJtbWV0YSBhbmQgcnhtZXRhIGZyb20gYW4gc2tiLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVRoZSB3bGFuZGV2IHRoaXMgc2tiIGJlbG9uZ3MgdG8uCisqCXNrYgkJVGhlIHNrYiB3ZSdyZSBhdHRhY2hpbmcgdG8uCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK3A4MDIxMXNrYl9yeG1ldGFfZGV0YWNoKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcDgwMjExX3J4bWV0YV90CQkqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QJKmZybW1ldGE7CisKKwlEQkZFTlRFUjsKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJaWYgKCBza2I9PU5VTEwgKSB7CQkJLyogYmFkIHNrYiAqLworCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIG51bGwgc2tiLlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJZnJtbWV0YSA9IFA4MDIxMVNLQl9GUk1NRVRBKHNrYik7CisJaWYgKCBmcm1tZXRhID09IE5VTEwgKSB7IAkJLyogbm8gbWFnaWMgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwgIkNhbGxlZCB3LyBiYWQgZnJtbWV0YSBtYWdpYy5cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCXJ4bWV0YSA9IGZybW1ldGEtPnJ4OworCWlmICggcnhtZXRhID09IE5VTEwgKSB7CQkJLyogYmFkIG1ldGEgcHRyICovCisJCVdMQU5fTE9HX0RFQlVHKDEsICJDYWxsZWQgdy8gYmFkIHJ4bWV0YSBwdHIuXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIEZyZWUgcnhtZXRhICovCisJa2ZyZWUocnhtZXRhKTsKKworCS8qIENsZWFyIHNrYi0+Y2IgKi8KKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKK2V4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFza2JfcnhtZXRhX2F0dGFjaAorKgorKiBBbGxvY2F0ZXMgYSBwODAyMTFyeG1ldGEgc3RydWN0dXJlLCBpbml0aWFsaXplcyBpdCwgYW5kIGF0dGFjaGVzCisqIGl0IHRvIGFuIHNrYi4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlUaGUgd2xhbmRldiB0aGlzIHNrYiBiZWxvbmdzIHRvLgorKglza2IJCVRoZSBza2Igd2UncmUgYXR0YWNoaW5nIHRvLgorKgorKiBSZXR1cm5zOgorKgkwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK3A4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJcDgwMjExX3J4bWV0YV90CQkqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QJKmZybW1ldGE7CisKKwlEQkZFTlRFUjsKKworCS8qIElmIHRoZXNlIGFscmVhZHkgaGF2ZSBtZXRhZGF0YSwgd2UgZXJyb3Igb3V0ISAqLworCWlmIChQODAyMTFTS0JfUlhNRVRBKHNrYikgIT0gTlVMTCkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IFJYbWV0YSBhbHJlYWR5IGF0dGFjaGVkIVxuIiwKKwkJCQl3bGFuZGV2LT5uYW1lKTsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBleGl0OworCX0KKworCS8qIEFsbG9jYXRlIHRoZSByeG1ldGEgKi8KKwlyeG1ldGEgPSBrbWFsbG9jKHNpemVvZihwODAyMTFfcnhtZXRhX3QpLCBHRlBfQVRPTUlDKTsKKworCWlmICggcnhtZXRhID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHJ4bWV0YS5cbiIsCisJCQkJd2xhbmRldi0+bmFtZSk7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSByeG1ldGEgKi8KKwltZW1zZXQocnhtZXRhLCAwLCBzaXplb2YocDgwMjExX3J4bWV0YV90KSk7CisJcnhtZXRhLT53bGFuZGV2ID0gd2xhbmRldjsKKwlyeG1ldGEtPmhvc3R0aW1lID0gamlmZmllczsKKworCS8qIE92ZXJsYXkgYSBmcm1tZXRhX3Qgb250byBza2ItPmNiICovCisJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihwODAyMTFfZnJtbWV0YV90KSk7CisJZnJtbWV0YSA9IChwODAyMTFfZnJtbWV0YV90Kikoc2tiLT5jYik7CisJZnJtbWV0YS0+bWFnaWMgPSBQODAyMTFfRlJNTUVUQV9NQUdJQzsKKwlmcm1tZXRhLT5yeCA9IHJ4bWV0YTsKK2V4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExc2tiX2ZyZWUKKyoKKyogRnJlZXMgYW4gZW50aXJlIHA4MDIxMXNrYiBieSBjaGVja2luZyBhbmQgZnJlZWluZyB0aGUgbWV0YSBzdHJ1Y3QKKyogYW5kIHRoZW4gZnJlZWluZyB0aGUgc2tiLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVRoZSB3bGFuZGV2IHRoaXMgc2tiIGJlbG9uZ3MgdG8uCisqCXNrYgkJVGhlIHNrYiB3ZSdyZSBhdHRhY2hpbmcgdG8uCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK3A4MDIxMXNrYl9mcmVlKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXA4MDIxMV9mcm1tZXRhX3QJKm1ldGE7CisJREJGRU5URVI7CisJbWV0YSA9IFA4MDIxMVNLQl9GUk1NRVRBKHNrYik7CisJaWYgKCBtZXRhICYmIG1ldGEtPnJ4KSB7CisJCXA4MDIxMXNrYl9yeG1ldGFfZGV0YWNoKHNrYik7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZyZWVpbmcgYW4gc2tiICglcCkgdy8gbm8gZnJtbWV0YS5cbiIsIHNrYik7CisJfQorCisJZGV2X2tmcmVlX3NrYihza2IpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWFiNTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCkBAIC0wLDAgKzEsMTg2IEBACisvKiBwODAyMTFjb252LmgKKyoKKyogRXRoZXIvODAyLjExIGNvbnZlcnNpb25zIGFuZCBwYWNrZXQgYnVmZmVyIHJvdXRpbmVzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgZnVuY3Rpb25zLCB0eXBlcyBhbmQgbWFjcm9zIHRoYXQgcGVyZm9ybQorKiBFdGhlcm5ldCB0by9mcm9tIDgwMi4xMSBmcmFtZSBjb252ZXJzaW9ucy4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX0xJTlVYX1A4MDIxMUNPTlZfSAorI2RlZmluZSBfTElOVVhfUDgwMjExQ09OVl9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBXTEFOX0VUSEFERFJfTEVOCTYKKyNkZWZpbmUgV0xBTl9JRUVFX09VSV9MRU4JMworCisjZGVmaW5lIFdMQU5fRVRIQ09OVl9FTkNBUAkxCisjZGVmaW5lIFdMQU5fRVRIQ09OVl9SRkMxMDQyCTIKKyNkZWZpbmUgV0xBTl9FVEhDT05WXzgwMjFoCTMKKworI2RlZmluZSBXTEFOX01JTl9FVEhGUk1fTEVOCTYwCisjZGVmaW5lIFdMQU5fTUFYX0VUSEZSTV9MRU4JMTUxNAorI2RlZmluZSBXTEFOX0VUSEhEUl9MRU4JCTE0CisKKyNkZWZpbmUgUDgwMjExQ0FQVFVSRV9WRVJTSU9OCTB4ODAyMTEwMDEKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisjZGVmaW5lCVA4MDIxMV9GUk1NRVRBX01BR0lDCQkweDgwMjExMAorCisjZGVmaW5lIFA4MDIxMVNLQl9GUk1NRVRBKHMpIFwKKwkoKCgoKHA4MDIxMV9mcm1tZXRhX3QqKSgocyktPmNiKSktPm1hZ2ljKT09UDgwMjExX0ZSTU1FVEFfTUFHSUMpID8gXAorCQkoKHA4MDIxMV9mcm1tZXRhX3QqKSgocyktPmNiKSkgOiBcCisJCShOVUxMKSkKKworI2RlZmluZSBQODAyMTFTS0JfUlhNRVRBKHMpIFwKKwkoUDgwMjExU0tCX0ZSTU1FVEEoKHMpKSA/ICBQODAyMTFTS0JfRlJNTUVUQSgocykpLT5yeCA6ICgocDgwMjExX3J4bWV0YV90KikoTlVMTCkpKQorCit0eXBlZGVmIHN0cnVjdCBwODAyMTFfcnhtZXRhCit7CisJc3RydWN0IHdsYW5kZXZpY2UJKndsYW5kZXY7CisKKwlVSU5UNjQJbWFjdGltZTsJLyogSGktcmV6IE1BQy1zdXBwbGllZCB0aW1lIHZhbHVlICovCisJVUlOVDY0CWhvc3R0aW1lOwkvKiBCZXN0LXJleiBob3N0IHN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KKworCVVJTlQJcnhyYXRlOwkJLyogUmVjZWl2ZSBkYXRhIHJhdGUgaW4gMTAwa2JwcyAqLworCVVJTlQJcHJpb3JpdHk7CS8qIDAtMTUsIDA9Y29udGVudGlvbiwgNj1DRiAqLworCUlOVAlzaWduYWw7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLworCUlOVAlub2lzZTsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCisJVUlOVAljaGFubmVsOwkvKiBSZWNlaXZlIGNoYW5uZWwgKG1vc3RseSBmb3Igc25pZnMpICovCisJVUlOVAlwcmVhbWJsZTsJLyogUDgwMjExRU5VTV9wcmVhbWJsZXR5cGVfKiAqLworCVVJTlQJZW5jb2Rpbmc7CS8qIFA4MDIxMUVOVU1fZW5jb2RpbmdfKiAqLworCit9IHA4MDIxMV9yeG1ldGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2ZybW1ldGEKK3sKKwlVSU5UCQkJbWFnaWM7CisJcDgwMjExX3J4bWV0YV90CQkqcng7Cit9IHA4MDIxMV9mcm1tZXRhX3Q7CisKK3ZvaWQgcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKgorICogRnJhbWUgY2FwdHVyZSBoZWFkZXIuICAoU2VlIGRvYy9jYXB0dXJlZnJtLnR4dCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2NhcGhkcgoreworCVVJTlQzMgkJdmVyc2lvbjsKKwlVSU5UMzIJCWxlbmd0aDsKKwlVSU5UNjQJCW1hY3RpbWU7CisJVUlOVDY0CQlob3N0dGltZTsKKwlVSU5UMzIJCXBoeXR5cGU7CisJVUlOVDMyCQljaGFubmVsOworCVVJTlQzMgkJZGF0YXJhdGU7CisJVUlOVDMyCQlhbnRlbm5hOworCVVJTlQzMgkJcHJpb3JpdHk7CisJVUlOVDMyCQlzc2lfdHlwZTsKKwlJTlQzMgkJc3NpX3NpZ25hbDsKKwlJTlQzMgkJc3NpX25vaXNlOworCVVJTlQzMgkJcHJlYW1ibGU7CisJVUlOVDMyCQllbmNvZGluZzsKK30gcDgwMjExX2NhcGhkcl90OworCisvKiBidWZmZXIgZnJlZSBtZXRob2QgcG9pbnRlciB0eXBlICovCit0eXBlZGVmIHZvaWQgKCogZnJlZWJ1Zl9tZXRob2RfdCkodm9pZCAqYnVmLCBpbnQgc2l6ZSk7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9tZXRhd2VwIHsKKwl2b2lkICAqZGF0YTsKKwlVSU5UOCBpdls0XTsKKwlVSU5UOCBpY3ZbNF07Cit9IHA4MDIxMV9tZXRhd2VwX3Q7CisKKy8qIGxvY2FsIGV0aGVyIGhlYWRlciB0eXBlICovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2V0aGhkcgoreworCVVJTlQ4CWRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCVVJTlQ4CXNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCVVJTlQxNgl0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2V0aGhkcl90OworCisvKiBsb2NhbCBsbGMgaGVhZGVyIHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fbGxjCit7CisJVUlOVDgJZHNhcDsKKwlVSU5UOAlzc2FwOworCVVJTlQ4CWN0bDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9sbGNfdDsKKworLyogbG9jYWwgc25hcCBoZWFkZXIgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9zbmFwCit7CisJVUlOVDgJb3VpW1dMQU5fSUVFRV9PVUlfTEVOXTsKKwlVSU5UMTYJdHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9zbmFwX3Q7CisKKy8qIENpcmN1bGFyIGluY2x1ZGUgdHJpY2sgKi8KK3N0cnVjdCB3bGFuZGV2aWNlOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJucyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLypGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoIHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBVSU5UMzIgZXRoY29udiwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBza2JfZXRoZXJfdG9fcDgwMjExKCBzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgVUlOVDMyIGV0aGNvbnYsCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXAgKTsKKworaW50IHA4MDIxMV9zdHRfZmluZHByb3RvKFVJTlQxNiBwcm90byk7CitpbnQgcDgwMjExX3N0dF9hZGRwcm90byhVSU5UMTYgcHJvdG8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiMDg3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCkBAIC0wLDAgKzEsMjk5IEBACisvKiBwODAyMTFoZHIuaAorKgorKiBNYWNyb3MsIHR5cGVzLCBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyA4MDIuMTEgTUFDIGhlYWRlcnMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdGhlIGludGVyZmFjZQorKiBiZXR3ZWVuIGEgd2xhbiBkcml2ZXIgYW5kIHRoZSB1c2VyIG1vZGUgdXRpbGl0aWVzLgorKgorKiBOb3RlOgorKiAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuICBUbyBhc3NpZ24KKyogICAgdmFsdWVzIHRvIG11bHRpLWJ5dGUgZmllbGRzIHRoZXkgX211c3RfIGJlIGNvbnZlcnRlZCB0bworKiAgICBpZWVlIGJ5dGUgb3JkZXIuICBUbyByZXRyaWV2ZSBtdWx0aS1ieXRlIHZhbHVlcyBmcm9tIGluY29taW5nCisqICAgIGZyYW1lcywgdGhleSBtdXN0IGJlIGNvbnZlcnRlZCB0byBob3N0IG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMS5jCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFIRFJfSAorI2RlZmluZSBfUDgwMjExSERSX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmICBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tIFNpemVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9BRERSX0xFTgkJCTYKKyNkZWZpbmUgV0xBTl9DUkNfTEVOCQkJNAorI2RlZmluZSBXTEFOX0JTU0lEX0xFTgkJCTYKKyNkZWZpbmUgV0xBTl9CU1NfVFNfTEVOCQkJOAorI2RlZmluZSBXTEFOX0hEUl9BM19MRU4JCQkyNAorI2RlZmluZSBXTEFOX0hEUl9BNF9MRU4JCQkzMAorI2RlZmluZSBXTEFOX1NTSURfTUFYTEVOCQkzMgorI2RlZmluZSBXTEFOX0RBVEFfTUFYTEVOCQkyMzEyCisjZGVmaW5lIFdMQU5fQTNGUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKQorI2RlZmluZSBXTEFOX0E0RlJfTUFYTEVOCQkoV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikKKyNkZWZpbmUgV0xBTl9CRUFDT05fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMzM0KQorI2RlZmluZSBXTEFOX0FUSU1fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMCkKKyNkZWZpbmUgV0xBTl9ESVNBU1NPQ19GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyKQorI2RlZmluZSBXTEFOX0FTU09DUkVRX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDQ4KQorI2RlZmluZSBXTEFOX0FTU09DUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDE2KQorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfRlJfTUFYTEVOCShXTEFOX0hEUl9BM19MRU4gKyA1NCkKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDE2KQorI2RlZmluZSBXTEFOX1BST0JFUkVRX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDQ0KQorI2RlZmluZSBXTEFOX1BST0JFUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDc4KQorI2RlZmluZSBXTEFOX0FVVEhFTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyNjEpCisjZGVmaW5lIFdMQU5fREVBVVRIRU5fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMikKKyNkZWZpbmUgV0xBTl9XRVBfTktFWVMJCQk0CisjZGVmaW5lIFdMQU5fV0VQX01BWEtFWUxFTgkJMTMKKyNkZWZpbmUgV0xBTl9DSEFMTEVOR0VfSUVfTEVOCQkxMzAKKyNkZWZpbmUgV0xBTl9DSEFMTEVOR0VfTEVOCQkxMjgKKyNkZWZpbmUgV0xBTl9XRVBfSVZfTEVOCQkJNAorI2RlZmluZSBXTEFOX1dFUF9JQ1ZfTEVOCQk0CisKKy8qLS0tIEZyYW1lIENvbnRyb2wgRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBGcmFtZSBUeXBlcyAqLworI2RlZmluZSBXTEFOX0ZUWVBFX01HTVQJCQkweDAwCisjZGVmaW5lIFdMQU5fRlRZUEVfQ1RMCQkJMHgwMQorI2RlZmluZSBXTEFOX0ZUWVBFX0RBVEEJCQkweDAyCisKKy8qIEZyYW1lIHN1YnR5cGVzICovCisvKiBNYW5hZ2VtZW50ICovCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FTU09DUkVRCQkweDAwCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FTU09DUkVTUAkJMHgwMQorI2RlZmluZSBXTEFOX0ZTVFlQRV9SRUFTU09DUkVRCQkweDAyCisjZGVmaW5lIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVNQCQkweDAzCisjZGVmaW5lIFdMQU5fRlNUWVBFX1BST0JFUkVRCQkweDA0CisjZGVmaW5lIFdMQU5fRlNUWVBFX1BST0JFUkVTUAkJMHgwNQorI2RlZmluZSBXTEFOX0ZTVFlQRV9CRUFDT04JCTB4MDgKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQVRJTQkJMHgwOQorI2RlZmluZSBXTEFOX0ZTVFlQRV9ESVNBU1NPQwkJMHgwYQorI2RlZmluZSBXTEFOX0ZTVFlQRV9BVVRIRU4JCTB4MGIKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREVBVVRIRU4JCTB4MGMKKworLyogQ29udHJvbCAqLworI2RlZmluZSBXTEFOX0ZTVFlQRV9CTE9DS0FDS1JFUQkJMHg4CisjZGVmaW5lIFdMQU5fRlNUWVBFX0JMT0NLQUNLICAJCTB4OQorI2RlZmluZSBXTEFOX0ZTVFlQRV9QU1BPTEwJCTB4MGEKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUlRTCQkJMHgwYgorI2RlZmluZSBXTEFOX0ZTVFlQRV9DVFMJCQkweDBjCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FDSwkJCTB4MGQKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZFTkQJCTB4MGUKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZFTkRDRkFDSwkJMHgwZgorCisvKiBEYXRhICovCisjZGVmaW5lIFdMQU5fRlNUWVBFX0RBVEFPTkxZCQkweDAwCisjZGVmaW5lIFdMQU5fRlNUWVBFX0RBVEFfQ0ZBQ0sJCTB4MDEKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQV9DRlBPTEwJCTB4MDIKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQV9DRkFDS19DRlBPTEwJMHgwMworI2RlZmluZSBXTEFOX0ZTVFlQRV9OVUxMCQkweDA0CisjZGVmaW5lIFdMQU5fRlNUWVBFX0NGQUNLCQkweDA1CisjZGVmaW5lIFdMQU5fRlNUWVBFX0NGUE9MTAkJMHgwNgorI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkFDS19DRlBPTEwJMHgwNworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLS0gRkMgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWFjcm9zIHRvIGdldC9zZXQgdGhlIGJpdGZpZWxkcyBvZiB0aGUgRnJhbWUgQ29udHJvbCBGaWVsZCAqLworLyogIEdFVF9GQ18/Pz8gLSB0YWtlcyB0aGUgaG9zdCBieXRlLW9yZGVyIHZhbHVlIG9mIGFuIEZDICAgICAqLworLyogICAgICAgICAgICAgICBhbmQgcmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlICAgICAgICAqLworLyogICAgICAgICAgICAgICBiaXRmaWVsZHMgYW5kIG1vdmVzIHRoYXQgdmFsdWUgc28gaXRzIGxzYiBpcyAqLworLyogICAgICAgICAgICAgICBpbiBiaXQgMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFNFVF9GQ18/Pz8gLSB0YWtlcyBhIGhvc3Qgb3JkZXIgdmFsdWUgZm9yIG9uZSBvZiB0aGUgRkMgICAqLworLyogICAgICAgICAgICAgICBiaXRmaWVsZHMgYW5kIG1vdmVzIGl0IHRvIHRoZSBwcm9wZXIgYml0ICAgICAqLworLyogICAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgT1JpbmcgaW50byBhIGhvc3Qgb3JkZXIgRkMuICAgICAqLworLyogICAgICAgICAgICAgICBUbyBzZW5kIHRoZSBGQyBwcm9kdWNlZCBmcm9tIFNFVF9GQ18/Pz8sICAgICAqLworLyogICAgICAgICAgICAgICBvbmUgbXVzdCBwdXQgdGhlIGJ5dGVzIGluIElFRUUgb3JkZXIuICAgICAgICAqLworLyogIGUuZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIHByaW50ZigidGhlIGZyYW1lIHN1YnR5cGUgaXMgJXgiLCAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgIEdFVF9GQ19GVFlQRSggaWVlZTJob3N0KCByeC5mYyApKSkgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIHR4LmZjID0gaG9zdDJpZWVlKCBTRVRfRkNfRlRZUEUoV0xBTl9GVFlQX0NUTCkgfCAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBTRVRfRkNfRlNUWVBFKFdMQU5fRlNUWVBFX1JUUykgKTsgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BWRVIobikJICgoKFVJTlQxNikobikpICYgKEJJVDAgfCBCSVQxKSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlRZUEUobikJKCgoKFVJTlQxNikobikpICYgKEJJVDIgfCBCSVQzKSkgPj4gMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlNUWVBFKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAJKCgoKFVJTlQxNikobikpICYgKEJJVDgpKSA+PiA4KQorI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikJKCgoKFVJTlQxNikobikpICYgKEJJVDkpKSA+PiA5KQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFRlJBRyhuKSAoKCgoVUlOVDE2KShuKSkgJiAoQklUMTApKSA+PiAxMCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfUkVUUlkobikJKCgoKFVJTlQxNikobikpICYgKEJJVDExKSkgPj4gMTEpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BXUk1HVChuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMTIpKSA+PiAxMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRURBVEEobikgKCgoKFVJTlQxNikobikpICYgKEJJVDEzKSkgPj4gMTMpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0lTV0VQKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQxNCkpID4+IDE0KQorI2RlZmluZSBXTEFOX0dFVF9GQ19PUkRFUihuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMTUpKSA+PiAxNSkKKworI2RlZmluZSBXTEFOX1NFVF9GQ19QVkVSKG4pCSgoVUlOVDE2KShuKSkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlRZUEUobikJKCgoVUlOVDE2KShuKSkgPDwgMikKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlNUWVBFKG4pCSgoKFVJTlQxNikobikpIDw8IDQpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1RPRFMobikgCSgoKFVJTlQxNikobikpIDw8IDgpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZST01EUyhuKQkoKChVSU5UMTYpKG4pKSA8PCA5KQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFRlJBRyhuKSAoKChVSU5UMTYpKG4pKSA8PCAxMCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfUkVUUlkobikJKCgoVUlOVDE2KShuKSkgPDwgMTEpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1BXUk1HVChuKQkoKChVSU5UMTYpKG4pKSA8PCAxMikKKyNkZWZpbmUgV0xBTl9TRVRfRkNfTU9SRURBVEEobikgKCgoVUlOVDE2KShuKSkgPDwgMTMpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX0lTV0VQKG4pCSgoKFVJTlQxNikobikpIDw8IDE0KQorI2RlZmluZSBXTEFOX1NFVF9GQ19PUkRFUihuKQkoKChVSU5UMTYpKG4pKSA8PCAxNSkKKworLyotLS0gRHVyYXRpb24gTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWFjcm9zIHRvIGdldC9zZXQgdGhlIGJpdGZpZWxkcyBvZiB0aGUgRHVyYXRpb24gRmllbGQgICAgICAqLworLyogIC0gdGhlIGR1cmF0aW9uIHZhbHVlIGlzIG9ubHkgdmFsaWQgd2hlbiBiaXQxNSBpcyB6ZXJvICAgICAqLworLyogIC0gdGhlIGZpcm13YXJlIGhhbmRsZXMgdGhlc2UgdmFsdWVzLCBzbyBJJ20gbm90IGdvaW5nICAgICAqLworLyogICAgdGhlc2UgbWFjcm9zIHJpZ2h0IG5vdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLSBTZXF1ZW5jZSBDb250cm9sICBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNyb3MgdG8gZ2V0L3NldCB0aGUgYml0ZmllbGRzIG9mIHRoZSBTZXF1ZW5jZSBDb250cm9sICAgICovCisvKiBGaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkdOVU0obikgKCgoVUlOVDE2KShuKSkgJiAoQklUMHxCSVQxfEJJVDJ8QklUMykpCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVFOVU0obikgKCgoKFVJTlQxNikobikpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQorCisvKi0tLSBEYXRhIHB0ciBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDcmVhdGVzIGEgVUlOVDgqIHRvIHRoZSBkYXRhIHBvcnRpb24gb2YgYSBmcmFtZSAgICAgICAgICAgICovCisvKiBBc3N1bWVzIHlvdSdyZSBwYXNzaW5nIGluIGEgcHRyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhkciovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fSERSX0EzX0RBVEFQKHApICgoKFVJTlQ4KikocCkpICsgV0xBTl9IRFJfQTNfTEVOKQorI2RlZmluZSBXTEFOX0hEUl9BNF9EQVRBUChwKSAoKChVSU5UOCopKHApKSArIFdMQU5fSERSX0E0X0xFTikKKworI2RlZmluZSBET1QxMV9SQVRFNV9JU0JBU0lDX0dFVChyKSAgICAgKCgoVUlOVDgpKHIpKSAmIEJJVDcpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKiBCU1MgVGltZXN0YW1wICovCit0eXBlZGVmIFVJTlQ4IHdsYW5fYnNzX3RzX3RbV0xBTl9CU1NfVFNfTEVOXTsKKworLyogR2VuZXJpYyA4MDIuMTEgSGVhZGVyIHR5cGVzICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTMKK3sKKwlVSU5UMTYJZmM7CisJVUlOVDE2CWR1cjsKKwlVSU5UOAlhMVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhMltXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhM1tXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJc2VxOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX2EzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTQKK3sKKwlVSU5UMTYJZmM7CisJVUlOVDE2CWR1cjsKKwlVSU5UOAlhMVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhMltXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhM1tXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJc2VxOworCVVJTlQ4CWE0W1dMQU5fQUREUl9MRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX2E0X3Q7CisKK3R5cGVkZWYgdW5pb24gcDgwMjExX2hkcgoreworCXA4MDIxMV9oZHJfYTNfdAkJYTM7CisJcDgwMjExX2hkcl9hNF90CQlhNDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExX2hkcl90OworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisvKiBGcmFtZSBhbmQgaGVhZGVyIGxlbmdodCBtYWNyb3MgKi8KKworI2RlZmluZSBXTEFOX0NUTF9GUkFNRUxFTihmc3R5cGUpIChcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQkxPQ0tBQ0tSRVEJPyAyNCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9CTE9DS0FDSyAgIAk/IDE1MiA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9QU1BPTEwJCT8gMjAgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfUlRTCQk/IDIwIDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0NUUwkJPyAxNCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9BQ0sJCT8gMTQgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQ0ZFTkQJCT8gMjAgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQ0ZFTkRDRkFDSwk/IDIwIDogNCkKKworI2RlZmluZSBXTEFOX0ZDU19MRU4JCQk0CisKKy8qIGZ0Y2wgaW4gSE9TVCBvcmRlciAqLworaW5saW5lIHN0YXRpYyBVSU5UMTYgcDgwMjExX2hlYWRlcmxlbihVSU5UMTYgZmN0bCkKK3sKKwlVSU5UMTYgaGRybGVuID0gMDsKKworCXN3aXRjaCAoIFdMQU5fR0VUX0ZDX0ZUWVBFKGZjdGwpICkgeworCWNhc2UgV0xBTl9GVFlQRV9NR01UOgorCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CisJCWJyZWFrOworCWNhc2UgV0xBTl9GVFlQRV9EQVRBOgorCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CisJCWlmICggV0xBTl9HRVRfRkNfVE9EUyhmY3RsKSAmJiBXTEFOX0dFVF9GQ19GUk9NRFMoZmN0bCkgKSB7CisJCQloZHJsZW4gKz0gV0xBTl9BRERSX0xFTjsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fRlRZUEVfQ1RMOgorCQloZHJsZW4gPSBXTEFOX0NUTF9GUkFNRUxFTihXTEFOX0dFVF9GQ19GU1RZUEUoZmN0bCkpIC0KKwkJCVdMQU5fRkNTX0xFTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaGRybGVuID0gV0xBTl9IRFJfQTNfTEVOOworCX0KKworCXJldHVybiBoZHJsZW47Cit9CisKKyNlbmRpZiAvKiBfUDgwMjExSERSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjJlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKiBwODAyMTFpb2N0bC5oCisqCisqIERlY2xhcmVzIGNvbnN0YW50cyBhbmQgdHlwZXMgZm9yIHRoZSBwODAyMTEgaW9jdGxzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBXaGlsZSB0aGlzIGZpbGUgaXMgY2FsbGVkICdpb2N0bCcgaXMgcHVycG9zZSBnb2VzIGEgbGl0dGxlIGJleW9uZAorKiAgdGhhdC4gIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0eXBlcyBhbmQgY29udGFudHMgdXNlZCB0byBpbXBsZW1lbnQKKyogIHRoZSBwODAyMTEgcmVxdWVzdC9jb25maXJtL2luZGljYXRlIGludGVyZmFjZXMgb24gTGludXguICBUaGUKKyogIHJlcXVlc3QvY29uZmlybSBpbnRlcmZhY2UgaXMsIGluIGZhY3QsIG5vcm1hbGx5IGltcGxlbWVudGVkIGFzIGFuCisqICBpb2N0bC4gIFRoZSBpbmRpY2F0ZSBpbnRlcmZhY2Ugb24gdGhlIG90aGVyIGhhbmQsIGlzIGltcGxlbWVudGVkCisqICB1c2luZyB0aGUgTGludXggJ25ldGxpbmsnIGludGVyZmFjZS4KKyoKKyogIFRoZSByZWFzb24gSSBzYXkgdGhhdCByZXF1ZXN0L2NvbmZpcm0gaXMgJ25vcm1hbGx5JyBpbXBsZW1lbnRlZAorKiAgdmlhIGlvY3RsIGlzIHRoYXQgd2UncmUgcmVzZXJ2aW5nIHRoZSByaWdodCB0byBiZSBhYmxlIHRvIHNlbmQKKyogIHJlcXVlc3QgY29tbWFuZHMgdmlhIHRoZSBuZXRsaW5rIGludGVyZmFjZS4gIFRoaXMgd2lsbCBiZSBuZWNlc3NhcnkKKyogIGlmIHdlIGV2ZXIgbmVlZCB0byBzZW5kIHJlcXVlc3QgbWVzc2FnZXMgd2hlbiB0aGVyZSBhcmVuJ3QgYW55CisqICB3bGFuIG5ldHdvcmsgZGV2aWNlcyBwcmVzZW50IChpLmUuIHNlbmRpbmcgYSBtZXNzYWdlIHRoYXQgb25seSBwODAyMTEKKyogIGNhcmVzIGFib3V0LgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisjaWZuZGVmIF9QODAyMTFJT0NUTF9ICisjZGVmaW5lIF9QODAyMTFJT0NUTF9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBpb2N0bCAicmVxdWVzdCIgY29kZXMuICBTZWUgYXJndW1lbnQgMiBvZiBpb2N0bCgyKS4gKi8KKworI2RlZmluZSBQODAyMTFfSUZURVNUCQkoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBQODAyMTFfSUZSRVEJCShTSU9DREVWUFJJVkFURSArIDEpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWdpYyBudW1iZXIsIGEgcXVpY2sgdGVzdCB0byBzZWUgd2UncmUgZ2V0dGluZyB0aGUgZGVzaXJlZCBzdHJ1Y3QgKi8KKworI2RlZmluZSBQODAyMTFfSU9DVExfTUFHSUMJKDB4NGEyZDQ2NGRVTCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE5ldGxpbmsgcHJvdG9jb2wgbnVtYmVycyBmb3IgdGhlIGluZGljYXRpb24gaW50ZXJmYWNlICovCisKKyNkZWZpbmUgUDgwMjExX05MX1NPQ0tfSU5ECU5FVExJTktfVVNFUlNPQ0sKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE5ldGxpbmsgbXVsdGljYXN0IGJpdHMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZXNzYWdlcyAqLworCisjZGVmaW5lIFA4MDIxMV9OTF9NQ0FTVF9HUlBfTUxNRQlCSVQwCS8qIExvY2FsIHN0YXRpb24gbWVzc2FnZXMgKi8KKyNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9TTklGRglCSVQxCS8qIFNuaWZmZXIgbWVzc2FnZXMgKi8KKyNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9ESVNUCUJJVDIJLyogRGlzdHJpYnV0aW9uIHN5c3RlbSBtZXNzYWdlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBBIHB0ciB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0eXBlIGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgKi8KKy8qICBhcmd1bWVudCB0byB0aGUgaW9jdGwgc3lzdGVtIGNhbGwgd2hlbiBpc3N1aW5nIGEgcmVxdWVzdCB0byAqLworLyogIHRoZSBwODAyMTEgbW9kdWxlLiAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpb2N0bF9yZXEKK3sKKwljaGFyIAluYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCWNhZGRyX3QgZGF0YTsKKwlVSU5UMzIJbWFnaWM7CisJVUlOVDE2CWxlbjsKKwlVSU5UMzIJcmVzdWx0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpb2N0bF9yZXFfdDsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworCisjZW5kaWYgLyogX1A4MDIxMUlPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2IzZjVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCkBAIC0wLDAgKzEsMTY5IEBACisvKiBwODAyMTFtZXRhLmgKKyoKKyogTWFjcm9zLCBjb25zdGFudHMsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtZXRhZGF0YQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgc29tZSBvZiB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHZhcmlvdXMKKyogcGFydHMgb2YgdGhlIGxpbnV4LXdsYW4gc3lzdGVtLgorKgorKiBOb3RlczoKKyogICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4KKyoKKyogQWxsIGZ1bmN0aW9ucyBhbmQgc3RhdGljcyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTF0eXBlcy5jCisqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1FVEFfSAorI2RlZmluZSBfUDgwMjExTUVUQV9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgbmFtaW5nICovCisvKiAgY29udmVudGlvbnMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIGxpc3RzLiAqLworCisjZGVmaW5lIE1LUkVRTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIHJlcSAjIyBfICMjIG5hbWUKKyNkZWZpbmUgTUtJTkRNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgaW5kICMjIF8gIyMgbmFtZQorI2RlZmluZSBNS01JQk1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lCisjZGVmaW5lIE1LR1JQTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGdycCAjIyBfICMjIG5hbWUKKworI2RlZmluZSBNS1JFUU1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyByZXEgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorI2RlZmluZSBNS0lORE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBpbmQgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorI2RlZmluZSBNS01JQk1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorI2RlZmluZSBNS0dSUE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBncnAgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorCisjZGVmaW5lIEdFVE1FVEFTSVpFKGFwdHIpCQkoKiooKFVJTlQzMioqKShhcHRyKSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIGlmZGVmIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBkZWZpbmVzOiAqLworLyogIFA4MDIxMV9OT0lOQ0xVREVTVFJJTkdTIC0gaWYgZGVmaW5lZCwgYWxsIG1ldGFkYXRhIG5hbWUgZmllbGRzICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZW1wdHkgc3RyaW5ncyAqLworCisjaWZkZWYgUDgwMjExX05PSU5DTFVERVNUUklOR1MKKwkjZGVmaW5lCU1LSVRFTU5BTUUocykJKCIiKQorI2Vsc2UKKwkjZGVmaW5lCU1LSVRFTU5BTUUocykJKHMpCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0eXBlcyBhcmUgdXNlZCBmb3IgdGhlIG1ldGFkYXRhICovCisvKiByZXByZXNlbnRhdGlvbiBvZiBjYXRlZ29yeSBsaXN0IG1ldGFkYXRhLCBncm91cCBsaXN0IG1ldGFkYXRhLCAqLworLyogYW5kIGRhdGEgaXRlbSBtZXRhZGF0YSBmb3IgYm90aCBNaWIgYW5kIE1lc3NhZ2VzLiAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtZXRhCit7CisJY2hhcgkJCSpuYW1lOwkJLyogZGF0YSBpdGVtIG5hbWUgKi8KKwlVSU5UMzIJCQlkaWQ7CQkvKiBwYXJ0aWFsIGRpZCAqLworCVVJTlQzMgkJCWZsYWdzOwkJLyogc2V0IG9mIHZhcmlvdXMgZmxhZyBiaXRzICovCisJVUlOVDMyCQkJbWluOwkJLyogbWluIHZhbHVlIG9mIGEgQk9VTkRFRElOVCAqLworCVVJTlQzMgkJCW1heDsJCS8qIG1heCB2YWx1ZSBvZiBhIEJPVU5ERURJTlQgKi8KKworCVVJTlQzMgkJCW1heGxlbjsJCS8qIG1heGxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KKwlVSU5UMzIJCQltaW5sZW47CQkvKiBtaW5sZW4gb2YgYSBPQ1RFVFNUUiBvciBESVNQTEFZU1RSICovCisJcDgwMjExZW51bV90CQkqZW51bXB0cjsJLyogcHRyIHRvIHRoZSBlbnVtIHR5cGUgZm9yIEVOVU1JTlQgKi8KKwlwODAyMTFfdG90ZXh0X3QJCXRvdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJcDgwMjExX2Zyb210ZXh0X3QJZnJvbXRleHRwdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLworCXA4MDIxMV92YWxpZF90CQl2YWxpZGZ1bnB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCit9IHA4MDIxMW1ldGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZ3JwbGlzdGl0ZW0KK3sKKwljaGFyCQkqbmFtZTsKKwlwODAyMTFtZXRhX3QJKml0ZW1saXN0OworfSBncnBsaXN0aXRlbV90OworCit0eXBlZGVmIHN0cnVjdCBjYXRsaXN0aXRlbQoreworCWNoYXIJCSpuYW1lOworCWdycGxpc3RpdGVtX3QJKmdycGxpc3Q7Cit9IGNhdGxpc3RpdGVtX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworVUlOVDMyIHA4MDIxMV90ZXh0MmRpZChjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBjaGFyICpjYXRuYW1lLCBjaGFyICpncnBuYW1lLCBjaGFyICppdGVtbmFtZSk7CitVSU5UMzIgcDgwMjExX3RleHQyY2F0ZGlkKGNhdGxpc3RpdGVtX3QgKmxpc3QsIGNoYXIgKm5hbWUgKTsKK1VJTlQzMiBwODAyMTFfdGV4dDJncnBkaWQoZ3JwbGlzdGl0ZW1fdCAqbGlzdCwgY2hhciAqbmFtZSApOworVUlOVDMyIHA4MDIxMV90ZXh0Mml0ZW1kaWQocDgwMjExbWV0YV90ICpsaXN0LCBjaGFyICpuYW1lICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfY2F0ZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZ3JwZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfaXRlbWRpZCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgVUlOVDMyIGRpZCApOworY2F0bGlzdGl0ZW1fdCAqcDgwMjExX2RpZDJjYXQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK2dycGxpc3RpdGVtX3QgKnA4MDIxMV9kaWQyZ3JwKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitwODAyMTFtZXRhX3QgKnA4MDIxMV9kaWQyaXRlbSggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgVUlOVDMyIGRpZCApOworVUlOVDMyIHA4MDIxMWl0ZW1fbWF4ZGF0YWxlbiggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCApOworVUlOVDMyIHA4MDIxMV9tZXRhbmFtZTJkaWQoc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgY2hhciAqaXRlbW5hbWUpOworVUlOVDMyIHA4MDIxMWl0ZW1fZ2V0b2Zmc2V0KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkICk7CitpbnQgcDgwMjExaXRlbV9nZXR0eXBlKHA4MDIxMW1ldGFfdCAqbWV0YSk7CisKKyNlbmRpZiAvKiBfUDgwMjExTUVUQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3ZjQzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaApAQCAtMCwwICsxLDI1MjQgQEAKKy8qIFRoaXMgZmlsZSBpcyBHRU5FUkFURUQgQVVUT01BVElDQUxMWS4gIERPIE5PVCBFRElUIE9SIE1PRElGWS4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1LTUVUQURFRl9ICisjZGVmaW5lIF9QODAyMTFNS01FVEFERUZfSAorCisKKyNkZWZpbmUgRElEbXNnX2NhdF9kb3QxMXJlcSBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDEpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJnZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYmdldF9taWJhdHRyaWJ1dGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWliZ2V0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWlic2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJzZXRfbWliYXR0cmlidXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYnNldF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Bvd2VybWdtdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210X3Bvd2VybWdtdG1vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210X3dha2V1cCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfcmVjZWl2ZWR0aW1zIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Bvd2VybWdtdF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fYnNzdHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2Jzc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3NjYW50eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcHJvYmVkZWxheSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2NoYW5uZWxsaXN0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fbWluY2hhbm5lbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9tYXhjaGFubmVsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9udW1ic3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fYXBwZW5kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ic3NpbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc2lnbmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ub2lzZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3NzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jzc3R5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2JlYWNvbnBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZHRpbXBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdGltZXN0YW1wIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfbG9jYWx0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhkd2VsbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGhvcHNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoaG9wcGF0dGVybiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoaG9waW5kZXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19kc2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBjb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcHBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcG1heGR1cmF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwZHVycmVtYWluaW5nIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfaWJzc2F0aW13aW5kb3cgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfcHJpdmFjeSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jzc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fam9pbmZhaWx1cmV0aW1lb3V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZV9hdXRoZW50aWNhdGlvbnR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9uZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3JlYXNvbmNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX2NmcG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX2NmcG9sbHJlcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfcHJpdmFjeSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfbGlzdGVuaW50ZXJ2YWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV9uZXdhcGFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3JlYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX2NmcG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX2NmcG9sbHJlcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfcHJpdmFjeSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfbGlzdGVuaW50ZXJ2YWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDExKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDExKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3JlYXNvbmNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZXNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0X3NldGRlZmF1bHRtaWIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0X21hY2FkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYnNzdHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmVhY29ucGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9kdGltcGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9jZnBwZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcG1heGR1cmF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9maGR3ZWxsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZmhob3BzZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2ZoaG9wcGF0dGVybiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZHNjaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfaWJzc2F0aW13aW5kb3cgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9wcm9iZWRlbGF5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2Zwb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcG9sbHJlcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfY2F0X2RvdDExaW5kIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMikKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZV9hdXRoZW50aWNhdGlvbnR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3JlYXNvbmNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXNzb2NpYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXNzb2NpYXRlX2FpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfYWlkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlX29sZGFwYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19jYXRfbG54cmVxIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMykKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfaWZzdGF0ZV9pZnN0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9jaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfcHJpc21oZWFkZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl93bGFuaGVhZGVyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfa2VlcHdlcGZsYWdzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfc3RyaXBmY3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9wYWNrZXRfdHJ1bmMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfaG9zdHdlcF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwX2RlY3J5cHQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXBfZW5jcnlwdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9kYm0gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9saW5rIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9ub2lzZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfYXV0b2pvaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9hdXRodHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfYXV0b2pvaW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19jYXRfbG54aW5kIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oNCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2hvc3R0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9jaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ub2lzZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcmF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fZnJtbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfcm9hbSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfbG54aW5kX3JvYW1fcmVhc29uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2NhdF9wMnJlcSBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDUpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jzc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9jaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2F1dGh0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRwZGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRwZGFfcGRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRwZGFfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkY2lzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkY2lzX2NpcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkY2lzX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfcmVhZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkX2xlbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV9sZW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9jb21tYW5kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9wYXJhbTAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3BhcmFtMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcGFyYW0yIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9yZXNwMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcmVzcDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3Jlc3AyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Rlc3Rjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZF90ZXN0cGFyYW0gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3N0YXR1cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfcmVzcDAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Jlc3AxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZF9yZXNwMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3JlYWRfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZF92YWx1ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV93cml0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV93cml0ZV9hZGRyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfd3JpdGVfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3dyaXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGVfZW5hYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9leGVhZGRyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlX2xlbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfZW5hYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX2RhdGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1fc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbV9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21tX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2R1bXBfc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNikpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9kdW1wX3N0YXRlX2xldmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9kdW1wX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mbyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE3KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19jaGFubmVsbGlzdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX2NoYW5uZWxkd2VsbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fbnVtY2hpbmZvIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX2F2Z25vaXNlbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX3BlYWtub2lzZWxldmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0c19ic3NhY3RpdmUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX3BjZmFjdGl2ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZW5hYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTkpKQorI2RlZmluZSBESURtc2dfcDJyZXFfZW5hYmxlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9kb3QxMXNtdCBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDEpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9wODAyMTFUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfcDgwMjExVGFibGVfcDgwMjExX2lmc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExU3RhdGlvbklEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExTWVkaXVtT2NjdXBhbmN5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQ0ZQUGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQ0ZQTWF4RHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGlvblJlc3BvbnNlVGltZU91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVBvd2VyTWFuYWdlbWVudE1vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZXNpcmVkU1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRCU1NUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMU9wZXJhdGlvbmFsUmF0ZVNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFCZWFjb25QZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRFRJTVBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBc3NvY2lhdGlvblJlc3BvbnNlVGltZU91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEaXNhc3NvY2lhdGVSZWFzb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRGlzYXNzb2NpYXRlU3RhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZWF1dGhlbnRpY2F0ZVJlYXNvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZWF1dGhlbnRpY2F0ZVN0YXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQXV0aGVudGljYXRlRmFpbFN0YXR1cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGVGYWlsU3RhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0yIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG01IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG02IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nV0VQT24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ1ZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0xlbmd0aCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUElDVkVycm9yQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBFeGNsdWRlZENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9kb3QxMW1hYyBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDIpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTUFDQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4UmVjZWl2ZUxpZmV0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYW51ZmFjdHVyZXJJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUHJvZHVjdElEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGYWlsZWRDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSZXRyeUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpcGxlUmV0cnlDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGcmFtZUR1cGxpY2F0ZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJUU1N1Y2Nlc3NDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSVFNGYWlsdXJlQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExQUNLRmFpbHVyZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGQ1NFcnJvckNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFUcmFuc21pdHRlZEZyYW1lQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2RvdDExcGh5IFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMykKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFQSFlUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDdXJyZW50UmVnRG9tYWluIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFUZW1wVHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExQ2hhbm5lbEFnaWxpdHlQcmVzZW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDaGFubmVsQWdpbGl0eUVuYWJsZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UHJlYW1ibGVFbmFibGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMUN1cnJlbnRUeEFudGVubmEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGVfZG90MTFEaXZlcnNpdHlTdXBwb3J0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlX2RvdDExQ3VycmVudFJ4QW50ZW5uYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFOdW1iZXJTdXBwb3J0ZWRQb3dlckxldmVscyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExSG9wVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsTnVtYmVyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExTWF4RHdlbGxUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudER3ZWxsVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRTZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50UGF0dGVybiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUNDQU1vZGVTdXBwb3J0ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q0NBTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUVEVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExU2hvcnRQcmVhbWJsZU9wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExUEJDQ09wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dUaW1lck1heCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ0NvdW50TWF4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nVGltZXJNaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dDb3VudE1pbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFSZWdEb21haW5zU3VwcG9ydGVkVGFibGVfZG90MTFSZWdEb21haW5zU3VwcG9ydEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUmVnRG9tYWluc1N1cHBvcnRlZFRhYmxlX2RvdDExUmVnRG9tYWluc1N1cHBvcnRWYWx1ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExQW50ZW5uYUxpc3RJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExU3VwcG9ydGVkVHhBbnRlbm5hIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFTdXBwb3J0ZWRSeEFudGVubmEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMURpdmVyc2l0eVNlbGVjdGlvblJ4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4SW5kZXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4VmFsdWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9sbnggXAorCQkJUDgwMjExRElEX01LU0VDVElPTig0KQorI2RlZmluZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGVfbG54UlNOQUlFIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9wMiBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDUpCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyTU1UeCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyRWFybHlCZWFjb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMlJlY2VpdmVkRnJhbWVTdGF0aXN0aWNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJDb21tdW5pY2F0aW9uVGFsbGllcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyQXV0aGVudGljYXRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyQXNzb2NpYXRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyUG93ZXJTYXZlVXNlckNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJDb21tZW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NNb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NBbGxvdyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0RlbnkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJDaGFubmVsSW5mb1Jlc3VsdHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duTUFDQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkRlc2lyZWRTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duQ2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93blNTSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25BVElNV2luZG93IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU3lzdGVtU2NhbGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhEYXRhTGVuZ3RoIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNRW5hYmxlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUVQUyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNdWx0aWNhc3RSZWNlaXZlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heFNsZWVwRHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1Ib2xkb3ZlckR1cmF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bk5hbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duRFRJTVBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5SUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRmxhZ3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQXV0aGVudGljYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4QXNzb2NpYXRlZFN0YXRpb25zIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlR4Q29udHJvbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSb2FtaW5nTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZIb3N0QXV0aGVudGljYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUmN2Q3JjRXJyb3IgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzUpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQWx0UmV0cnlDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZCZWFjb25JbnRlcnZhbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNZWRpdW1PY2N1cGFuY3lMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBQZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQTWF4RHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQRmxhZ3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU1RBUENGSW5mbyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQcmlvcml0eVFVc2FnZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZUSU1DdHJsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlRoaXJ0eTJUYWxseSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0NSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZFbmhTZWN1cml0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0NikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTaG9ydFByZWFtYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkV4Y2x1ZGVMb25nUHJlYW1ibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDgpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQXV0aGVudGljYXRpb25Sc3BUTyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0OSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZCYXNpY1JhdGVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlN1cHBvcnRlZFJhdGVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMkNyZWF0ZUlCU1MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJQcm9taXNjdW91c01vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyQmVoYXZpb3IgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbWliX3AyX3AyQmVoYXZpb3JfcDJUaWNrVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJNYXhMb2FkVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkRMQnVmZmVyUGFnZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkRMQnVmZmVyT2Zmc2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJMZW5ndGggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJQUklJZGVudGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlBSSVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyQ0ZJQWN0UmFuZ2VzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyTklDU2VyaWFsTnVtYmVyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyTklDSWRlbnRpdHkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJNRklTdXBSYW5nZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJDRklTdXBSYW5nZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJDaGFubmVsTGlzdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJSZWd1bGF0b3J5RG9tYWlucyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJUZW1wVHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTVEFJZGVudGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTVEFTdXBSYW5nZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJNRklBY3RSYW5nZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyU1RBQ0ZJQWN0UmFuZ2VzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkJ1aWxkU2VxdWVuY2UgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyUHJpbWFyeUZXSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyU2Vjb25kYXJ5RldJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJUZXJ0aWFyeUZXSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlBvcnRTdGF0dXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50U1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRCU1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eUNRIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5QVNMIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5QU5MIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5Q1EgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlBU0wgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5QU5MIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudEJlYWNvbkludGVydmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlN0YUN1cnJlbnRTY2FsZVRocmVzaG9sZHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQVBDdXJyZW50U2NhbGVUaHJlc2hvbGRzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlByb3RvY29sUnNwVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJTaG9ydFJldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyTG9uZ1JldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyTWF4VHJhbnNtaXRMaWZldGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJNYXhSZWNlaXZlTGlmZXRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ0ZQb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMk93bk1BQ0FkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW0gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJQSFlUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJDdXJyZW50Q2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyQ3VycmVudFBvd2VyU3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMkNDQU1vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMlN1cHBvcnRlZERhdGFSYXRlcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyVHhQb3dlck1heCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTg2N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1pYi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKiBwODAyMTFtZXRhbWliLmgKKyoKKyogTWFjcm9zLCBjb25zdCwgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcDgwMjExIG1pYiBtZXRhZGF0YQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgc29tZSBvZiB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHZhcmlvdXMKKyogcGFydHMgb2YgdGhlIGxpbnV4LXdsYW4gc3lzdGVtLgorKgorKiBOb3RlczoKKyogICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4KKyoKKyogQWxsIGZ1bmN0aW9ucyBhbmQgc3RhdGljcyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTF0eXBlcy5jCisqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1FVEFNSUJfSAorI2RlZmluZSBfUDgwMjExTUVUQU1JQl9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBpcyB0aGUgZXh0ZXJuYWwgZGVjbGFyYXRpb24gZm9yIHRoZSBtaWIgKi8KKy8qIGNhdGVnb3J5IG1ldGFkYXRhIGxpc3QgKi8KKworZXh0ZXJuIGNhdGxpc3RpdGVtX3QgbWliX2NhdGxpc3RbXTsKK2V4dGVybiBVSU5UMzIgbWliX2NhdGxpc3Rfc2l6ZTsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisjZW5kaWYgLyogX1A4MDIxMU1FVEFNSUJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1zZy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmRmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIHA4MDIxMW1ldGFtc2cuaAorKgorKiBNYWNyb3MsIGNvbnN0LCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgbXNnIG1ldGFkYXRhCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cworKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCisqCisqIE5vdGVzOgorKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKKyogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUVUQU1TR19ICisjZGVmaW5lIF9QODAyMTFNRVRBTVNHX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKi8KKy8qIGNhdGVnb3J5IG1ldGFkYXRhIGxpc3QgKi8KKworZXh0ZXJuIGNhdGxpc3RpdGVtX3QgbXNnX2NhdGxpc3RbXTsKK2V4dGVybiBVSU5UMzIgbXNnX2NhdGxpc3Rfc2l6ZTsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisjZW5kaWYgLyogX1A4MDIxMU1FVEFNU0dfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWY0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKQEAgLTAsMCArMSw2NDQgQEAKKy8qIFRoaXMgZmlsZSBpcyBHRU5FUkFURUQgQVVUT01BVElDQUxMWS4gIERPIE5PVCBFRElUIE9SIE1PRElGWS4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1LTUVUQVNUUlVDVF9ICisjZGVmaW5lIF9QODAyMTFNS01FVEFTVFJVQ1RfSAorCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91bmszOTJfdAltaWJhdHRyaWJ1dGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VuazM5Ml90CW1pYmF0dHJpYnV0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfcG93ZXJtZ210Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcG93ZXJtZ210bW9kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAl3YWtldXAJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVjZWl2ZWR0aW1zCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfcG93ZXJtZ210X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzdHlwZQk7CisJcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKKwlVSU5UOAlwYWRfMENbMV0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzFEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXNjYW50eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByb2JlZGVsYXkJOworCXA4MDIxMWl0ZW1fcHN0cjE0X3QJY2hhbm5lbGxpc3QJOworCVVJTlQ4CXBhZF8yQ1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAltaW5jaGFubmVsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAltYXhjaGFubmVsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW51bWJzcwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhcHBlbmQJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzaW5kZXgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzaWduYWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlic3NpZAk7CisJVUlOVDgJcGFkXzNDWzFdCTsKKwlwODAyMTFpdGVtX3BzdHIzMl90CXNzaWQJOworCVVJTlQ4CXBhZF80RFszXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJlYWNvbnBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkdGltcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXRpbWVzdGFtcAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsb2NhbHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhkd2VsbHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BzZXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BwYXR0ZXJuCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9waW5kZXgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZHNjaGFubmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcGNvdW50CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcHBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBtYXhkdXJhdGlvbgk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBkdXJyZW1haW5pbmcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaWJzc2F0aW13aW5kb3cJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpdmFjeQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlOAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX2pvaW4KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKKwlVSU5UOAlwYWRfNUNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJam9pbmZhaWx1cmV0aW1lb3V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9qb2luX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfNkNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aGVudGljYXRpb250eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF1dGhlbnRpY2F0aW9uZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzdDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbmNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzhDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFzc29jaWF0ZWZhaWx1cmV0aW1lb3V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbGFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xscmVxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByaXZhY3kJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGlzdGVuaW50ZXJ2YWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAluZXdhcGFkZHJlc3MJOworCVVJTlQ4CXBhZF85Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzc29jaWF0ZWZhaWx1cmV0aW1lb3V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbGFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xscmVxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByaXZhY3kJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGlzdGVuaW50ZXJ2YWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzEwQ1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzb25jb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9yZXNldAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXNldGRlZmF1bHRtaWIJOworCXA4MDIxMWl0ZW1fcHN0cjZfdAltYWNhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTFDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfcmVzZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzEyRFszXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJlYWNvbnBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkdGltcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcHBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBtYXhkdXJhdGlvbgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGR3ZWxsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHNldAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHBhdHRlcm4JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZHNjaGFubmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWlic3NhdGltd2luZG93CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByb2JlZGVsYXkJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTNDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF1dGhlbnRpY2F0aW9udHlwZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE0Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzb25jb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMWluZF9hc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTVDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFpZAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9hc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE2Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhaWQJOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlvbGRhcGFkZHJlc3MJOworCVVJTlQ4CXBhZF8xN0NbMV0JOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF8xOENbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVhc29uY29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaWZzdGF0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpc21oZWFkZXIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJd2xhbmhlYWRlcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlrZWVwd2VwZmxhZ3MJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3RyaXBmY3MJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFja2V0X3RydW5jCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXAKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWRlY3J5cHQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5jcnlwdAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZGJtCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxpbmsJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGV2ZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzE5RFszXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdXRodHlwZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaG9zdHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbWFjdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljaGFubmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJzc2kJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3EJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc2lnbmFsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW5vaXNlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJhdGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaXN0eAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmcm1sZW4JOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhpbmRfcm9hbQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbgk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhpbmRfcm9hbV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfam9pbgoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJYnNzaWQJOworCVVJTlQ4CXBhZF8yMENbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlOAk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMjFEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aHR5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9qb2luX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdW5rMTAyNF90CXBkYQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRjaXMKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91bmsxMDI0X3QJY2lzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmVhZGNpc190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfcmVhZAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGVuCTsKKwlwODAyMTFpdGVtX3VuazEwMjRfdAlkYXRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9yZWFkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOworCXA4MDIxMWl0ZW1fdW5rMTAyNF90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9sb3dfbGV2ZWwKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljb21tYW5kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBhcmFtMAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwYXJhbTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFyYW0yCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3AwCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3AxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3AyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfbG93X2xldmVsX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV90ZXN0X2NvbW1hbmQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAl0ZXN0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAl0ZXN0cGFyYW0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdGF0dXMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDAJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDIJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9tbWlfcmVhZAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJdmFsdWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9tbWlfcmVhZF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfbW1pX3dyaXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkYXRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfbW1pX3dyaXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlleGVhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOworCXA4MDIxMWl0ZW1fdW5rNDA5Nl90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7CisJcDgwMjExaXRlbV91bms0MDk2X3QJZGF0YQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX21tX3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfbW1fc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2R1bXBfc3RhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZXZlbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2R1bXBfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2NoYW5uZWxfaW5mbworeworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWxsaXN0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWxkd2VsbHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAludW1jaGluZm8JOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0cworeworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdmdub2lzZWxldmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBlYWtub2lzZWxldmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJzc2FjdGl2ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwY2ZhY3RpdmUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2VuYWJsZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZW5hYmxlX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGMxNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCkBAIC0wLDAgKzEsNTc1IEBACisvKiBwODAyMTFtZ210LmgKKyoKKyogTWFjcm9zLCB0eXBlcywgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgODAyLjExIG1nbXQgZnJhbWVzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHRoZSBpbnRlcmZhY2UKKyogYmV0d2VlbiBhIHdsYW4gZHJpdmVyIGFuZCB0aGUgdXNlciBtb2RlIHV0aWxpdGllcy4KKyoKKyogTm90ZXM6CisqICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4gIFRvIGFzc2lnbgorKiAgICB2YWx1ZXMgdG8gbXVsdGktYnl0ZSBmaWVsZHMgdGhleSBfbXVzdF8gYmUgY29udmVydGVkIHRvCisqICAgIGllZWUgYnl0ZSBvcmRlci4gIFRvIHJldHJpZXZlIG11bHRpLWJ5dGUgdmFsdWVzIGZyb20gaW5jb21pbmcKKyogICAgZnJhbWVzLCB0aGV5IG11c3QgYmUgY29udmVydGVkIHRvIGhvc3Qgb3JkZXIuCisqCisqICAtIFRoZSBsZW4gbWVtYmVyIG9mIHRoZSBmcmFtZSBzdHJ1Y3R1cmUgZG9lcyBOT1QhISEgaW5jbHVkZQorKiAgICB0aGUgTUFDIENSQy4gIFRoZXJlZm9yZSwgdGhlIGxlbiBmaWVsZCBvbiByeCdkIGZyYW1lcyBzaG91bGQKKyogICAgaGF2ZSA0IHN1YnRyYWN0ZWQgZnJvbSBpdC4KKyoKKyogQWxsIGZ1bmN0aW9ucyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTEuYworKgorKiBUaGUgdHlwZXMsIG1hY3JvcywgYW5kIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUgYXJlIHByaW1hcmlseQorKiB1c2VkIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgbWFuYWdlbWVudCBmcmFtZXMuICBUaGV5IGFyZQorKiBkZXNpZ25lZCB0byBmb2xsb3cgdGhlc2UgcGF0dGVybnMgb2YgdXNlOgorKgorKiBERUNPREU6CisqIDEpIGEgZnJhbWUgb2YgbGVuZ3RoIGxlbiBpcyByZWNlaXZlZCBpbnRvIGJ1ZmZlciBiCisqIDIpIHVzaW5nIHRoZSBoZHIgc3RydWN0dXJlIGFuZCBtYWNyb3MsIHdlIGRldGVybWluZSB0aGUgdHlwZQorKiAzKSBhbiBhcHByb3ByaWF0ZSBtZ210IGZyYW1lIHN0cnVjdHVyZSwgbWYsIGlzIGFsbG9jYXRlZCBhbmQgemVyb2VkCisqIDQpIG1mLmhkciA9IGIKKyogICAgbWYuYnVmID0gYgorKiAgICBtZi5sZW4gPSBsZW4KKyogNSkgY2FsbCBtZ210X2RlY29kZSggbWYgKQorKiA2KSB0aGUgZnJhbWUgZmllbGQgcG9pbnRlcnMgaW4gbWYgYXJlIG5vdyBzZXQuICBOb3RlIHRoYXQgYW55CisqICAgIG11bHRpLWJ5dGUgZnJhbWUgZmllbGQgdmFsdWVzIGFjY2Vzc2VkIHVzaW5nIHRoZSBmcmFtZSBmaWVsZAorKiAgICBwb2ludGVycyBhcmUgaW4gaWVlZSBieXRlIG9yZGVyIGFuZCB3aWxsIGhhdmUgdG8gYmUgY29udmVydGVkCisqICAgIHRvIGhvc3Qgb3JkZXIuCisqCisqIEVOQ09ERToKKyogMSkgTGlicmFyeSBjbGllbnQgYWxsb2NhdGVzIGJ1ZmZlciBzcGFjZSBmb3IgbWF4aW11bSBsZW5ndGgKKyogICAgZnJhbWUgb2YgdGhlIGRlc2lyZWQgdHlwZQorKiAyKSBMaWJyYXJ5IGNsaWVudCBhbGxvY2F0ZXMgYSBtZ210IGZyYW1lIHN0cnVjdHVyZSwgY2FsbGVkIG1mLAorKiAgICBvZiB0aGUgZGVzaXJlZCB0eXBlCisqIDMpIFNldCB0aGUgZm9sbG93aW5nOgorKiAgICBtZi50eXBlID0gPGRlc2lyZWQgdHlwZT4KKyogICAgbWYuYnVmID0gPGFsbG9jYXRlZCBidWZmZXIgYWRkcmVzcz4KKyogNCkgY2FsbCBtZ210X2VuY29kZSggbWYgKQorKiA1KSBhbGwgb2YgdGhlIGZpeGVkIGZpZWxkIHBvaW50ZXJzIGFuZCBmaXhlZCBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudAorKiAgICBwb2ludGVycyBpbiBtZiBhcmUgbm93IHNldCB0byB0aGVpciByZXNwZWN0aXZlIGxvY2F0aW9ucyBpbiB0aGUKKyogICAgYWxsb2NhdGVkIHNwYWNlIChmb3J0dW5hdGVseSwgYWxsIHZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cworKiAgICBmYWxsIGF0IHRoZSBlbmQgb2YgdGhlaXIgcmVzcGVjdGl2ZSBmcmFtZXMpLgorKiA1YSkgVGhlIGxlbmd0aCBmaWVsZCBpcyBzZXQgdG8gaW5jbHVkZSB0aGUgbGFzdCBvZiB0aGUgZml4ZWQgYW5kIGZpeGVkCisqICAgICBsZW5ndGggZmllbGRzLiAgSXQgbWF5IGhhdmUgdG8gYmUgdXBkYXRlZCBmb3Igb3B0aW9uYWwgb3IgdmFyaWFibGUKKyogCWxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy4KKyogNikgT3B0aW9uYWwgYW5kIHZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cyBhcmUgc3BlY2lhbCBjYXNlcworKiAgICBhbmQgbXVzdCBiZSBoYW5kbGVkIGluZGl2aWR1YWxseSBieSB0aGUgY2xpZW50IGNvZGUuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFNR01UX0gKKyNkZWZpbmUgX1A4MDIxMU1HTVRfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisjaWZuZGVmICBfUDgwMjExSERSX0gKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNlbmRpZgorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLSBJbmZvcm1hdGlvbiBFbGVtZW50IElEcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fRUlEX1NTSUQJCTAKKyNkZWZpbmUgV0xBTl9FSURfU1VQUF9SQVRFUwkxCisjZGVmaW5lIFdMQU5fRUlEX0ZIX1BBUk1TCTIKKyNkZWZpbmUgV0xBTl9FSURfRFNfUEFSTVMJMworI2RlZmluZSBXTEFOX0VJRF9DRl9QQVJNUwk0CisjZGVmaW5lIFdMQU5fRUlEX1RJTQkJNQorI2RlZmluZSBXTEFOX0VJRF9JQlNTX1BBUk1TCTYKKy8qLS0gdmFsdWVzIDctMTUgcmVzZXJ2ZWQgLS0qLworI2RlZmluZSBXTEFOX0VJRF9DSEFMTEVOR0UJMTYKKy8qLS0gdmFsdWVzIDE3LTMxIHJlc2VydmVkIGZvciBjaGFsbGVuZ2UgdGV4dCBleHRlbnNpb24gLS0qLworLyotLSB2YWx1ZXMgMzItMjU1IHJlc2VydmVkIC0tKi8KKworLyotLSBSZWFzb24gQ29kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fUlNWRAkJCTAKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9VTlNQRUMJCQkxCisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fUFJJT1JfQVVUSF9JTlZBTElECTIKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9ERUFVVEhfTEVBVklORwkJMworI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0RJU0FTU09DX0lOQUNUSVZFCTQKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9ESVNBU1NPQ19BUF9CVVNZCTUKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9DTEFTUzJfTk9OQVVUSAkJNgorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0NMQVNTM19OT05BU1NPQwk3CisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fRElTQVNTT0NfU1RBX0hBU0xFRlQJOAorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0NBTlRfQVNTT0NfTk9OQVVUSAk5CisKKy8qLS0gU3RhdHVzIENvZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1NVQ0NFU1MJCTAKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19VTlNQRUNfRkFJTFVSRQkJMQorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0NBUFNfVU5TVVBQT1JURUQJMTAKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19SRUFTU09DX05PX0FTU09DCTExCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX1VOU1BFQwkxMgorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1VOU1VQUE9SVEVEX0FVVEhBTEcJMTMKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19SWF9BVVRIX05PU0VRCQkxNAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0NIQUxMRU5HRV9GQUlMCQkxNQorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FVVEhfVElNRU9VVAkJMTYKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19BU1NPQ19ERU5JRURfQlVTWQkxNworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9SQVRFUwkxOAorICAvKiBwODAyMTFiIGFkZGl0aW9ucyAqLworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9OT1NIT1JUCTE5CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PUEJDQwkyMAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9OT0FHSUxJVFkJMjEKKworCisKKy8qLS0gQXV0aCBBbGdvcml0aG0gRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9BVVRIX0FMR19PUEVOU1lTVEVNCQkwCisjZGVmaW5lIFdMQU5fQVVUSF9BTEdfU0hBUkVES0VZCQkJMQorCisvKi0tIE1hbmFnZW1lbnQgRnJhbWUgRmllbGQgT2Zmc2V0cyAtLS0tLS0tLS0tLS0tKi8KKy8qIE5vdGU6IE5vdCBhbGwgZmllbGRzIGFyZSBsaXN0ZWQgYmVjYXVzZSBvZiB2YXJpYWJsZSBsZW5ndGhzLCAgICovCisvKiAgICAgICBzZWUgdGhlIGNvZGUgaW4gcDgwMjExLmMgdG8gc2VlIGhvdyB3ZSBzZWFyY2ggZm9yIGZpZWxkcyAqLworLyogTm90ZTogVGhlc2Ugb2Zmc2V0cyBhcmUgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lIGRhdGEgICAgICAgKi8KKworI2RlZmluZSBXTEFOX0JFQUNPTl9PRkZfVFMJCQkwCisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9CQ05fSU5UCQkJOAorI2RlZmluZSBXTEFOX0JFQUNPTl9PRkZfQ0FQSU5GTwkJCTEwCisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9TU0lECQkJMTIKKworI2RlZmluZSBXTEFOX0RJU0FTU09DX09GRl9SRUFTT04JCTAKKworI2RlZmluZSBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTwkJMAorI2RlZmluZSBXTEFOX0FTU09DUkVRX09GRl9MSVNURU5fSU5UCQkyCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfT0ZGX1NTSUQJCQk0CisKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fQVNTT0NSRVNQX09GRl9TVEFUVVMJCTIKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX0FJRAkJCTQKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX1NVUFBfUkFURVMJCTYKKworI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9PRkZfTElTVEVOX0lOVAkJMgorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NVUlJfQVAJCTQKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVRX09GRl9TU0lECQkxMAorCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX1NUQVRVUwkJMgorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQJCTQKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9PRkZfU1VQUF9SQVRFUwkJNgorCisjZGVmaW5lIFdMQU5fUFJPQkVSRVFfT0ZGX1NTSUQJCQkwCisKKyNkZWZpbmUgV0xBTl9QUk9CRVJFU1BfT0ZGX1RTCQkJMAorI2RlZmluZSBXTEFOX1BST0JFUkVTUF9PRkZfQkNOX0lOVAkJOAorI2RlZmluZSBXTEFOX1BST0JFUkVTUF9PRkZfQ0FQX0lORk8JCTEwCisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX09GRl9TU0lECQkJMTIKKworI2RlZmluZSBXTEFOX0FVVEhFTl9PRkZfQVVUSF9BTEcJCTAKKyNkZWZpbmUgV0xBTl9BVVRIRU5fT0ZGX0FVVEhfU0VRCQkyCisjZGVmaW5lIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMJCQk0CisjZGVmaW5lIFdMQU5fQVVUSEVOX09GRl9DSEFMTEVOR0UJCTYKKworI2RlZmluZSBXTEFOX0RFQVVUSEVOX09GRl9SRUFTT04JCTAKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0gQ2FwYWJpbGl0eSBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0VTUyhuKQkJKChuKSAmIEJJVDApCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fSUJTUyhuKQkJKCgobikgJiBCSVQxKSA+PiAxKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKCgobikgJiBCSVQyKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShuKQkoKChuKSAmIEJJVDMpID4+IDMpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fUFJJVkFDWShuKQkoKChuKSAmIEJJVDQpID4+IDQpCisgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgoKG4pICYgQklUNSkgPj4gNSkKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKChuKSAmIEJJVDYpID4+IDYpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKChuKSAmIEJJVDcpID4+IDcpCisKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19FU1MobikJCShuKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0lCU1MobikJCSgobikgPDwgMSkKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19DRlBPTExBQkxFKG4pCSgobikgPDwgMikKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19DRlBPTExSRVEobikJKChuKSA8PCAzKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX1BSSVZBQ1kobikJKChuKSA8PCA0KQorICAvKiBwODAyMTFiIGFkZGl0aW9ucyAqLworI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX1NIT1JUKG4pCQkoKG4pIDw8IDUpCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fUEJDQyhuKQkJKChuKSA8PCA2KQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0FHSUxJVFkobikJKChuKSA8PCA3KQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tIEluZm9ybWF0aW9uIEVsZW1lbnQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHJvdG90eXBlIHN0cnVjdHVyZSwgYWxsIElFcyBzdGFydCB3aXRoIHRoZXNlIG1lbWJlcnMgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZQoreworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfdDsKKworLyotLSBTZXJ2aWNlIFNldCBJZGVudGl0eSAoU1NJRCkgIC0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfc3NpZAoreworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDgJc3NpZFsxXTsgIC8qIG1heSBiZSB6ZXJvLCBwdHJzIG1heSBvdmVybGFwICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3NpZF90OworCisvKi0tIFN1cHBvcnRlZCBSYXRlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zdXBwX3JhdGVzCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAlyYXRlc1sxXTsgIC8qIGhhZCBiZXR0ZXIgYmUgYXQgTEVBU1Qgb25lISAqLworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX3N1cHBfcmF0ZXNfdDsKKworLyotLSBGSCBQYXJhbWV0ZXIgU2V0ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfZmhfcGFybXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQxNglkd2VsbDsKKwlVSU5UOAlob3BzZXQ7CisJVUlOVDgJaG9wcGF0dGVybjsKKwlVSU5UOAlob3BpbmRleDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9maF9wYXJtc190OworCisvKi0tIERTIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9kc19wYXJtcworeworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDgJY3Vycl9jaDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9kc19wYXJtc190OworCisvKi0tIENGIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NmX3Bhcm1zCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAljZnBfY250OworCVVJTlQ4CWNmcF9wZXJpb2Q7CisJVUlOVDE2CWNmcF9tYXhkdXI7CisJVUlOVDE2CWNmcF9kdXJyZW1haW5pbmc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfY2ZfcGFybXNfdDsKKworLyotLSBUSU0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfdGltCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAlkdGltX2NudDsKKwlVSU5UOAlkdGltX3BlcmlvZDsKKwlVSU5UOAliaXRtYXBfY3RsOworCVVJTlQ4CXZpcnRfYm1bMV07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfdGltX3Q7CisKKy8qLS0gSUJTUyBQYXJhbWV0ZXIgU2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2lic3NfcGFybXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQxNglhdGltX3dpbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9pYnNzX3Bhcm1zX3Q7CisKKy8qLS0gQ2hhbGxlbmdlIFRleHQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NoYWxsZW5nZQoreworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDgJY2hhbGxlbmdlWzFdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2NoYWxsZW5nZV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEZyYW1lIFR5cGVzICAqLworCisvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgbWdtdCBmcmFtZSB0eXBlcyB3aWxsIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9tZ210Cit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CS8qIERPRVMgTk9UIGluY2x1ZGUgQ1JDICEhISEqLworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworfSB3bGFuX2ZyX21nbXRfdDsKKworLyotLSBCZWFjb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYmVhY29uCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UNjQJCQkqdHM7CisJVUlOVDE2CQkJKmJjbl9pbnQ7CisJVUlOVDE2CQkJKmNhcF9pbmZvOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9maF9wYXJtc190CSpmaF9wYXJtczsKKwl3bGFuX2llX2RzX3Bhcm1zX3QJKmRzX3Bhcm1zOworCXdsYW5faWVfY2ZfcGFybXNfdAkqY2ZfcGFybXM7CisJd2xhbl9pZV9pYnNzX3Bhcm1zX3QJKmlic3NfcGFybXM7CisJd2xhbl9pZV90aW1fdAkJKnRpbTsKKworfSB3bGFuX2ZyX2JlYWNvbl90OworCisKKy8qLS0gSUJTUyBBVElNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2lic3NhdGltCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgqCQkJYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKworCS8qIHRoaXMgZnJhbWUgdHlwZSBoYXMgYSBudWxsIGJvZHkgKi8KKworfSB3bGFuX2ZyX2lic3NhdGltX3Q7CisKKy8qLS0gRGlzYXNzb2NpYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2Rpc2Fzc29jCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqcmVhc29uOworCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCit9IHdsYW5fZnJfZGlzYXNzb2NfdDsKKworLyotLSBBc3NvY2lhdGlvbiBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXEKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOCoJCQlidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwlVSU5UMTYJCQkqbGlzdGVuX2ludDsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfYXNzb2NyZXFfdDsKKworLyotLSBBc3NvY2lhdGlvbiBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXNwCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqY2FwX2luZm87CisJVUlOVDE2CQkJKnN0YXR1czsKKwlVSU5UMTYJCQkqYWlkOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKworfSB3bGFuX2ZyX2Fzc29jcmVzcF90OworCisvKi0tIFJlYXNzb2NpYXRpb24gUmVxdWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9yZWFzc29jcmVxCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqY2FwX2luZm87CisJVUlOVDE2CQkJKmxpc3Rlbl9pbnQ7CisJVUlOVDgJCQkqY3Vycl9hcDsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfcmVhc3NvY3JlcV90OworCisvKi0tIFJlYXNzb2NpYXRpb24gUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9yZWFzc29jcmVzcAoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKmNhcF9pbmZvOworCVVJTlQxNgkJCSpzdGF0dXM7CisJVUlOVDE2CQkJKmFpZDsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisKK30gd2xhbl9mcl9yZWFzc29jcmVzcF90OworCisvKi0tIFByb2JlIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9wcm9iZXJlcQoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCXdsYW5faWVfc3NpZF90CQkqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKworfSB3bGFuX2ZyX3Byb2JlcmVxX3Q7CisKKy8qLS0gUHJvYmUgUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVzcAoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDY0CQkJKnRzOworCVVJTlQxNgkJCSpiY25faW50OworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfZmhfcGFybXNfdAkqZmhfcGFybXM7CisJd2xhbl9pZV9kc19wYXJtc190CSpkc19wYXJtczsKKwl3bGFuX2llX2NmX3Bhcm1zX3QJKmNmX3Bhcm1zOworCXdsYW5faWVfaWJzc19wYXJtc190CSppYnNzX3Bhcm1zOworfSB3bGFuX2ZyX3Byb2JlcmVzcF90OworCisvKi0tIEF1dGhlbnRpY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hdXRoZW4KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSphdXRoX2FsZzsKKwlVSU5UMTYJCQkqYXV0aF9zZXE7CisJVUlOVDE2CQkJKnN0YXR1czsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9jaGFsbGVuZ2VfdAkqY2hhbGxlbmdlOworCit9IHdsYW5fZnJfYXV0aGVuX3Q7CisKKy8qLS0gRGVhdXRoZW5pY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGVhdXRoZW4KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpyZWFzb247CisKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisKK30gd2xhbl9mcl9kZWF1dGhlbl90OworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYmVhY29uKCB3bGFuX2ZyX2JlYWNvbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2JlYWNvbiggd2xhbl9mcl9iZWFjb25fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kaXNhc3NvYyggd2xhbl9mcl9kaXNhc3NvY190ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Rpc2Fzc29jKCB3bGFuX2ZyX2Rpc2Fzc29jX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXEoIHdsYW5fZnJfYXNzb2NyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3JlcSggd2xhbl9mcl9hc3NvY3JlcV90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Fzc29jcmVzcCggd2xhbl9mcl9hc3NvY3Jlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3Jlc3AoIHdsYW5fZnJfYXNzb2NyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3JlcSggd2xhbl9mcl9yZWFzc29jcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcmVhc3NvY3JlcSggd2xhbl9mcl9yZWFzc29jcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3Jlc3AoIHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVzcCggd2xhbl9mcl9yZWFzc29jcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVxKCB3bGFuX2ZyX3Byb2JlcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXEoIHdsYW5fZnJfcHJvYmVyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9wcm9iZXJlc3AoIHdsYW5fZnJfcHJvYmVyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXNwKCB3bGFuX2ZyX3Byb2JlcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2F1dGhlbiggd2xhbl9mcl9hdXRoZW5fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hdXRoZW4oIHdsYW5fZnJfYXV0aGVuX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfZGVhdXRoZW4oIHdsYW5fZnJfZGVhdXRoZW5fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9kZWF1dGhlbiggd2xhbl9mcl9kZWF1dGhlbl90ICAqZiApOworCisKKyNlbmRpZiAvKiBfUDgwMjExTUdNVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtb2QuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzNmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtb2QuYwpAQCAtMCwwICsxLDIxNiBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFtb2QuYworKgorKiBNb2R1bGUgZW50cnkgYW5kIGV4aXQgZm9yIHA4MDIxMQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHA4MDIxMS5vIGVudHJ5IGFuZCBleGl0IHBvaW50cyBkZWZpbmVkIGZvciBsaW51eAorKiBrZXJuZWwgbW9kdWxlcy4KKyoKKyogTm90ZXM6CisqIC0gYWxsIG1vZHVsZSBwYXJhbWV0ZXJzIGZvciAgcDgwMjExLm8gc2hvdWxkIGJlIGRlZmluZWQgaGVyZS4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMjUpKQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJwODAyMTEubzogIiBXTEFOX1JFTEVBU0U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIC0tTW9kdWxlIFBhcmFtZXRlcnMgKi8KKworaW50IHdsYW5fd2F0Y2hkb2cgPSA1MDAwOworbW9kdWxlX3BhcmFtKHdsYW5fd2F0Y2hkb2csIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdsYW5fd2F0Y2hkb2csICJ0cmFuc21pdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyIpOworCitpbnQgd2xhbl93ZXh0X3dyaXRlID0gMDsKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorbW9kdWxlX3BhcmFtKHdsYW5fd2V4dF93cml0ZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2xhbl93ZXh0X3dyaXRlLCAiZW5hYmxlIHdyaXRlIHdpcmVsZXNzIGV4dGVuc2lvbnMiKTsKKyNlbmRpZgorCisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCitpbnQgd2xhbl9kZWJ1Zz0wOworbW9kdWxlX3BhcmFtKHdsYW5fZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdsYW5fZGVidWcsICJwODAyMTEgZGVidWcgbGV2ZWwiKTsKKyNlbmRpZgorCitNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworaW50CWluaXRfbW9kdWxlKHZvaWQpOwordm9pZAljbGVhbnVwX21vZHVsZSh2b2lkKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBpbml0X21vZHVsZQorKgorKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgY2FsbGVkIG9uY2UgYXQgbW9kdWxlIGxvYWQgdGltZS4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCTAJLSBzdWNjZXNzCisqCX4wCS0gZmFpbHVyZSwgbW9kdWxlIGlzIHVubG9hZGVkLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCVRPRE86IGRlZmluZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkIChpbnNtb2Qgb3IgbW9kcHJvYmUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworICAgICAgICBEQkZFTlRFUjsKKworI2lmIDAKKyAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyAoJXMpIExvYWRlZFxuIiwgdmVyc2lvbiwgV0xBTl9CVUlMRF9EQVRFKTsKKyNlbmRpZgorCisJcDgwMjExbmV0ZGV2X3N0YXJ0dXAoKTsKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKE5VTEwsIFdMQU5fSE9UUExVR19TVEFSVFVQKTsKKyNlbmRpZgorCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBjbGVhbnVwX21vZHVsZQorKgorKiBDYWxsZWQgYXQgbW9kdWxlIHVubG9hZCB0aW1lLiAgVGhpcyBpcyBvdXIgbGFzdCBjaGFuY2UgdG8KKyogY2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCVRPRE86IGRlZmluZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKyAgICAgICAgREJGRU5URVI7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKE5VTEwsIFdMQU5fSE9UUExVR19TSFVURE9XTik7CisjZW5kaWYKKwlwODAyMTFuZXRkZXZfc2h1dGRvd24oKTsKKyAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyBVbmxvYWRlZFxuIiwgdmVyc2lvbik7CisKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuOworfQorCitFWFBPUlRfU1lNQk9MKHA4MDIxMW5ldGRldl9od3JlbW92ZWQpOworRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl93bGFuZGV2KTsKK0VYUE9SVF9TWU1CT0wocDgwMjExbmV0ZGV2X3J4KTsKK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl93bGFuZGV2KTsKK0VYUE9SVF9TWU1CT0wod2xhbl9zZXR1cCk7CitFWFBPUlRfU1lNQk9MKHdsYW5fdW5zZXR1cCk7CitFWFBPUlRfU1lNQk9MKHA4MDIxMV9zdXNwZW5kKTsKK0VYUE9SVF9TWU1CT0wocDgwMjExX3Jlc3VtZSk7CisKK0VYUE9SVF9TWU1CT0wocDgwMjExc2tiX2ZyZWUpOworRVhQT1JUX1NZTUJPTChwODAyMTFza2JfcnhtZXRhX2F0dGFjaCk7CisKK0VYUE9SVF9TWU1CT0wocDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0ZTlmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBwODAyMTFtc2cuaAorKgorKiBNYWNyb3MsIGNvbnN0YW50cywgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcmVxIGFuZCBpbmQgbWVzc2FnZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1TR19ICisjZGVmaW5lIF9QODAyMTFNU0dfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBNU0dfQlVGRl9MRU4JCTQwMDAKKyNkZWZpbmUgV0xBTl9ERVZOQU1FTEVOX01BWAkxNgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0gTWVzc2FnZSBTdHJ1Y3R1cmUgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByb3RvdHlwZSBtc2cgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2cKK3sKKwlVSU5UMzIJbXNnY29kZTsKKwlVSU5UMzIJbXNnbGVuOworCVVJTlQ4CWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dkCit7CisJVUlOVDMyCW1zZ2NvZGU7CisJVUlOVDMyCW1zZ2xlbjsKKwlVSU5UOAlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCVVJTlQ4CWFyZ3NbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ2RfdDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKyNlbmRpZiAgLyogX1A4MDIxMU1TR19IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmODRhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC0wLDAgKzEsMTUwMiBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFrbmV0ZGV2LmMKKyoKKyogTGludXggS2VybmVsIG5ldCBkZXZpY2UgaW50ZXJmYWNlCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoZSBmdW5jdGlvbnMgcmVxdWlyZWQgZm9yIGEgTGludXggbmV0d29yayBkZXZpY2UgYXJlIGRlZmluZWQgaGVyZS4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2lmZGVmIFNJT0NFVEhUT09MCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2VuZGlmCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBfX05PX1ZFUlNJT05fXwkJLyogcHJldmVudCB0aGUgc3RhdGljIGRlZmluaXRpb24gKi8KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX3A4MDIxMTsKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qIFN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBwODAyMTFuZXRkZXZfcnhfYmgodW5zaWduZWQgbG9uZyBhcmcpOworCisvKiBuZXRkZXZpY2UgbWV0aG9kIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2luaXQoIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBwODAyMTFrbmV0ZGV2X2dldF9zdGF0cyhuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9vcGVuKCBuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zdG9wKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICk7CitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0KG5ldGRldmljZV90ICpkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2RvX2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zZXRfbWFjX2FkZHJlc3MobmV0ZGV2aWNlX3QgKmRldiwgdm9pZCAqYWRkcik7CitzdGF0aWMgdm9pZCBwODAyMTFrbmV0ZGV2X3R4X3RpbWVvdXQobmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgaW50IHA4MDIxMV9yeF90eXBlZHJvcCggd2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgZmMpOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBpbnQKK3A4MDIxMW5ldGRldl9wcm9jX3JlYWQoCisJY2hhcgkqcGFnZSwKKwljaGFyCSoqc3RhcnQsCisJb2ZmX3QJb2Zmc2V0LAorCWludAljb3VudCwKKwlpbnQJKmVvZiwKKwl2b2lkCSpkYXRhKTsKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc3RhcnR1cAorKgorKiBJbml0aWFsaXplIHRoZSB3bGFuZGV2aWNlL25ldGRldmljZSBwYXJ0IG9mIDgwMi4xMSBzZXJ2aWNlcyBhdAorKiBsb2FkIHRpbWUuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcDgwMjExbmV0ZGV2X3N0YXJ0dXAodm9pZCkKK3sKKwlEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKGluaXRfbmV0LnByb2NfbmV0ICE9IE5VTEwpIHsKKwkJcHJvY19wODAyMTEgPSBjcmVhdGVfcHJvY19lbnRyeSgKKwkJCQkicDgwMjExIiwKKwkJCQkoU19JRkRJUnxTX0lSVUdPfFNfSVhVR08pLAorCQkJCWluaXRfbmV0LnByb2NfbmV0KTsKKwl9CisjZW5kaWYKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc2h1dGRvd24KKyoKKyogU2h1dGRvd24gdGhlIHdsYW5kZXZpY2UvbmV0ZGV2aWNlIHBhcnQgb2YgODAyLjExIHNlcnZpY2VzIGF0CisqIHVubG9hZCB0aW1lLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitwODAyMTFuZXRkZXZfc2h1dGRvd24odm9pZCkKK3sKKwlEQkZFTlRFUjsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmIChwcm9jX3A4MDIxMSAhPSBOVUxMKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJwODAyMTEiLCBpbml0X25ldC5wcm9jX25ldCk7CisJfQorI2VuZGlmCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfaW5pdAorKgorKiBJbml0IG1ldGhvZCBmb3IgYSBMaW51eCBuZXRkZXZpY2UuICBDYWxsZWQgaW4gcmVzcG9uc2UgdG8KKyogcmVnaXN0ZXJfbmV0ZGV2LgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldikKK3sKKwlEQkZFTlRFUjsKKwkvKiBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gcmVnaXN0ZXJfbmV0ZGV2ICovCisJLyogVGhpcyBpcyB1c3VhbGx5IHRoZSBwcm9iZSBmdW5jdGlvbiwgYnV0IHRoZSBwcm9iZSBoYXMgKi8KKwkvKiBhbHJlYWR5IGJlZW4gZG9uZSBieSB0aGUgTVNEIGFuZCB0aGUgY3JlYXRlX2tkZXYgKi8KKwkvKiBmdW5jdGlvbi4gIEFsbCB3ZSBkbyBoZXJlIGlzIHJldHVybiBzdWNjZXNzICovCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9nZXRfc3RhdHMKKyoKKyogU3RhdGlzdGljcyByZXRyaWV2YWwgZm9yIGxpbnV4IG5ldGRldmljZXMuICBIZXJlIHdlJ3JlIHJlcG9ydGluZworKiB0aGUgTGludXggaS9mIGxldmVsIHN0YXRpc3RpY3MuICBIZW5jZSwgZm9yIHRoZSBwcmltYXJ5IG51bWJlcnMsCisqIHdlIGRvbid0IHdhbnQgdG8gcmVwb3J0IHRoZSBudW1iZXJzIGZyb20gdGhlIE1JQi4gIEV2ZW50dWFsbHksCisqIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBjb2xsZWN0IHNvbWUgb2YgdGhlIGVycm9yIGNvdW50ZXJzIHRob3VnaC4KKyoKKyogQXJndW1lbnRzOgorKgluZXRkZXYJCUxpbnV4IG5ldGRldmljZQorKgorKiBSZXR1cm5zOgorKgl0aGUgYWRkcmVzcyBvZiB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKgorcDgwMjExa25ldGRldl9nZXRfc3RhdHMobmV0ZGV2aWNlX3QgKm5ldGRldikKK3sKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KiluZXRkZXYtPnByaXY7CisJREJGRU5URVI7CisKKwkvKiBUT0RPOiByZXZpZXcgdGhlIE1JQiBzdGF0cyBmb3IgaXRlbXMgdGhhdCBjb3JyZXNwb25kIHRvCisJCWxpbnV4IHN0YXRzICovCisKKwlEQkZFWElUOworCXJldHVybiAmKHdsYW5kZXYtPmxpbnV4X3N0YXRzKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9vcGVuCisqCisqIExpbnV4IG5ldGRldmljZSBvcGVuIG1ldGhvZC4gIEZvbGxvd2luZyBhIHN1Y2Nlc3NmdWwgY2FsbCBoZXJlLAorKiB0aGUgZGV2aWNlIGlzIHN1cHBvc2VkIHRvIGJlIHJlYWR5IGZvciB0eCBhbmQgcnguICBJbiBvdXIKKyogc2l0dWF0aW9uIHRoYXQgbWF5IG5vdCBiZSBlbnRpcmVseSB0cnVlIGR1ZSB0byB0aGUgc3RhdGUgb2YgdGhlCisqIE1BQyBiZWxvdy4KKyoKKyogQXJndW1lbnRzOgorKgluZXRkZXYJCUxpbnV4IG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfb3BlbiggbmV0ZGV2aWNlX3QgKm5ldGRldiApCit7CisJaW50IAkJcmVzdWx0ID0gMDsgLyogc3VjY2VzcyAqLworCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKShuZXRkZXYtPnByaXYpOworCisJREJGRU5URVI7CisKKwkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIE1TRCBpcyBydW5uaW5nICovCisJaWYgKCB3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9SVU5OSU5HICkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBUZWxsIHRoZSBNU0QgdG8gb3BlbiAqLworCWlmICggd2xhbmRldi0+b3BlbiAhPSBOVUxMKSB7CisJCXJlc3VsdCA9IHdsYW5kZXYtPm9wZW4od2xhbmRldik7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisjaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsNDMpICkKKwkJCW5ldGRldi0+aW50ZXJydXB0ID0gMDsKKyNlbmRpZgorCQkJcDgwMjExbmV0ZGV2X3N0YXJ0X3F1ZXVlKHdsYW5kZXYpOworCQkJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9PUEVOOworCQl9CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gLUVBR0FJTjsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc3RvcAorKgorKiBMaW51eCBuZXRkZXZpY2Ugc3RvcCAoY2xvc2UpIG1ldGhvZC4gIEZvbGxvd2luZyB0aGlzIGNhbGwsCisqIG5vIGZyYW1lcyBzaG91bGQgZ28gdXAgb3IgZG93biB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlLgorKgorKiBBcmd1bWVudHM6CisqCW5ldGRldgkJTGludXggbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zdG9wKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICkKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopKG5ldGRldi0+cHJpdik7CisKKwlEQkZFTlRFUjsKKworCWlmICggd2xhbmRldi0+Y2xvc2UgIT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gd2xhbmRldi0+Y2xvc2Uod2xhbmRldik7CisJfQorCisJcDgwMjExbmV0ZGV2X3N0b3BfcXVldWUod2xhbmRldik7CisJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFuZXRkZXZfcngKKyoKKyogRnJhbWUgcmVjZWl2ZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG1hYyBzcGVjaWZpYyBkcml2ZXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlza2J1ZmYgY29udGFpbmluZyBhIGZ1bGwgODAyLjExIGZyYW1lLgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiApCit7CisJREJGRU5URVI7CisKKwkvKiBFbnF1ZXVlIGZvciBwb3N0LWlycSBwcm9jZXNzaW5nICovCisJc2tiX3F1ZXVlX3RhaWwoJndsYW5kZXYtPm5zZF9yeHEsIHNrYik7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZ3bGFuZGV2LT5yeF9iaCk7CisKKyAgICAgICAgREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFuZXRkZXZfcnhfYmgKKyoKKyogRGVmZXJyZWQgcHJvY2Vzc2luZyBvZiBhbGwgcmVjZWl2ZWQgZnJhbWVzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVdMQU4gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCisqCXNrYgkJc2tidWZmIGNvbnRhaW5pbmcgYSBmdWxsIDgwMi4xMSBmcmFtZS4KKyogUmV0dXJuczoKKyoJbm90aGluZworKiBTaWRlIGVmZmVjdHM6CisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90ICopIGFyZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwluZXRkZXZpY2VfdCAgICAgKmRldiA9IHdsYW5kZXYtPm5ldGRldjsKKwlwODAyMTFfaGRyX2EzX3QgKmhkcjsKKwlVSU5UMTYgZmM7CisKKyAgICAgICAgREJGRU5URVI7CisKKwkvKiBMZXQncyBlbXB0eSBvdXIgb3VyIHF1ZXVlICovCisJd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwkJaWYgKHdsYW5kZXYtPnN0YXRlID09IFdMQU5fREVWSUNFX09QRU4pIHsKKworCQkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJCQkvKiBSQVcgZnJhbWU7IHdlIHNob3VsZG4ndCBjb252ZXJ0IGl0ICovCisJCQkJLy8gWFhYIEFwcGVuZCB0aGUgUHJpc20gSGVhZGVyIGhlcmUgaW5zdGVhZC4KKworCQkJCS8qIHNldCB1cCB2YXJpb3VzIGRhdGEgZmllbGRzICovCisJCQkJc2tiLT5kZXYgPSBkZXY7CisJCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisJCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMjExX1JBVyk7CisJCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCQluZXRpZl9yeF9uaShza2IpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQloZHIgPSAocDgwMjExX2hkcl9hM190ICopc2tiLT5kYXRhOworCQkJCWZjID0gaWVlZTJob3N0MTYoaGRyLT5mYyk7CisJCQkJaWYgKHA4MDIxMV9yeF90eXBlZHJvcCh3bGFuZGV2LCBmYykpIHsKKwkJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvKiBwZXJmb3JtIG1jYXN0IGZpbHRlcmluZyAqLworCQkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCQkJCS8qIGFsbG93IG15IGxvY2FsIGFkZHJlc3MgdGhyb3VnaCAqLworCQkJCQlpZiAobWVtY21wKGhkci0+YTEsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQUREUl9MRU4pICE9IDApIHsKKwkJCQkJCS8qIGJ1dCByZWplY3QgYW55dGhpbmcgZWxzZSB0aGF0IGlzbid0IG11bHRpY2FzdCAqLworCQkJCQkJaWYgKCEoaGRyLT5hMVswXSAmIDB4MDEpKSB7CisJCQkJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCBza2JfcDgwMjExX3RvX2V0aGVyKHdsYW5kZXYsIHdsYW5kZXYtPmV0aGNvbnYsIHNrYikgPT0gMCApIHsKKwkJCQkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJCQluZXRpZl9yeF9uaShza2IpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJV0xBTl9MT0dfREVCVUcoMSwgInA4MDIxMV90b19ldGhlciBmYWlsZWQuXG4iKTsKKwkJCX0KKwkJfQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJfQorCisgICAgICAgIERCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0CisqCisqIExpbnV4IG5ldGRldmljZSBtZXRob2QgZm9yIHRyYW5zbWl0dGluZyBhIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXNrYglMaW51eCBza19idWZmIGNvbnRhaW5pbmcgdGhlIGZyYW1lLgorKgluZXRkZXYJTGludXggbmV0ZGV2aWNlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCUlmIHRoZSBsb3dlciBsYXllcnMgcmVwb3J0IHRoYXQgYnVmZmVycyBhcmUgZnVsbC4gbmV0ZGV2LT50YnVzeQorKgl3aWxsIGJlIHNldCB0byBwcmV2ZW50IGhpZ2hlciBsYXllcnMgZnJvbSBzZW5kaW5nIG1vcmUgdHJhZmZpYy4KKyoKKyoJTm90ZTogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvLCBoaWdoZXIgbGF5ZXJzIHJldGFpbgorKgkgICAgICBvd25lcnNoaXAgb2YgdGhlIHNrYi4KKyoKKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZpY2VfdCAqbmV0ZGV2KQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCXR4cmVzdWx0ID0gLTE7CisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopbmV0ZGV2LT5wcml2OworCXA4MDIxMV9oZHJfdCAgICBwODAyMTFfaGRyOworCXA4MDIxMV9tZXRhd2VwX3QgcDgwMjExX3dlcDsKKworCURCRkVOVEVSOworCisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXJldHVybiAwOworCX0KKworICAgICAgICBpZiAod2xhbmRldi0+c3RhdGUgIT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwltZW1zZXQoJnA4MDIxMV9oZHIsIDAsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKwltZW1zZXQoJnA4MDIxMV93ZXAsIDAsIHNpemVvZihwODAyMTFfbWV0YXdlcF90KSk7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJaWYgKCB0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkKikmKG5ldGRldi0+dGJ1c3kpKSAhPSAwICkgeworCQkvKiBXZSd2ZSBiZWVuIGNhbGxlZCB3LyB0YnVzeSBzZXQsIGhhcyB0aGUgdHggKi8KKwkJLyogcGF0aCBzdGFsbGVkPyAgICovCisJCVdMQU5fTE9HX0RFQlVHKDEsICJjYWxsZWQgd2hlbiB0YnVzeSBzZXRcbiIpOworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisjZWxzZQorCWlmICggbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICkgeworCQlXTEFOX0xPR19ERUJVRygxLCAiY2FsbGVkIHdoZW4gcXVldWUgc3RvcHBlZC5cbiIpOworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBObyB0aW1lb3V0IGhhbmRsaW5nIGhlcmUsIDIuMy4zOCsga2VybmVscyBjYWxsIHRoZQorCSAqIHRpbWVvdXQgZnVuY3Rpb24gZGlyZWN0bHkuCisJICogVE9ETzogQWRkIHRpbWVvdXQgaGFuZGxpbmcuCisJKi8KKyNlbmRpZgorCisJLyogQ2hlY2sgdG8gc2VlIHRoYXQgYSB2YWxpZCBtb2RlIGlzIHNldCAqLworCXN3aXRjaCggd2xhbmRldi0+bWFjbW9kZSApIHsKKwljYXNlIFdMQU5fTUFDTU9ERV9JQlNTX1NUQToKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfU1RBOgorCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19BUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTW9kZSBpc24ndCBzZXQgeWV0LCBqdXN0IGRyb3AgdGhlIGZyYW1lCisJCSAqIGFuZCByZXR1cm4gc3VjY2VzcyAuCisJCSAqIFRPRE86IHdlIG5lZWQgYSBzYW5lciB3YXkgdG8gaGFuZGxlIHRoaXMKKwkJICovCisJCWlmKHNrYi0+cHJvdG9jb2wgIT0gRVRIX1BfODAyMTFfUkFXKSB7CisJCQlwODAyMTFuZXRkZXZfc3RhcnRfcXVldWUod2xhbmRldik7CisJCQlXTEFOX0xPR19OT1RJQ0UoCisJCQkJIlR4IGF0dGVtcHQgcHJpb3IgdG8gYXNzb2NpYXRpb24sIGZyYW1lIGRyb3BwZWQuXG4iKTsKKwkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCXJlc3VsdCA9IDA7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKiBDaGVjayBmb3IgcmF3IHRyYW5zbWl0cyAqLworCWlmKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfODAyMTFfUkFXKSB7CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJcmVzdWx0ID0gMTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCS8qIG1vdmUgdGhlIGhlYWRlciBvdmVyICovCisJCW1lbWNweSgmcDgwMjExX2hkciwgc2tiLT5kYXRhLCBzaXplb2YocDgwMjExX2hkcl90KSk7CisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCX0gZWxzZSB7CisJCWlmICggc2tiX2V0aGVyX3RvX3A4MDIxMSh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLCAmcDgwMjExX3dlcCkgIT0gMCApIHsKKwkJCS8qIGNvbnZlcnQgZmFpbGVkICovCisJCQlXTEFOX0xPR19ERUJVRygxLCAiZXRoZXJfdG9fODAyMTEoJWQpIGZhaWxlZC5cbiIsCisJCQkJCXdsYW5kZXYtPmV0aGNvbnYpOworCQkJcmVzdWx0ID0gMTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICggd2xhbmRldi0+dHhmcmFtZSA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X3BhY2tldHMrKzsKKwkvKiBjb3VudCBvbmx5IHRoZSBwYWNrZXQgcGF5bG9hZCAqLworCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJdHhyZXN1bHQgPSB3bGFuZGV2LT50eGZyYW1lKHdsYW5kZXYsIHNrYiwgJnA4MDIxMV9oZHIsICZwODAyMTFfd2VwKTsKKworCWlmICggdHhyZXN1bHQgPT0gMCkgeworCQkvKiBzdWNjZXNzIGFuZCBtb3JlIGJ1ZiAqLworCQkvKiBhdmFpbCwgcmU6IGh3X3R4ZGF0YSAqLworCQlwODAyMTFuZXRkZXZfd2FrZV9xdWV1ZSh3bGFuZGV2KTsKKwkJcmVzdWx0ID0gMDsKKwl9IGVsc2UgaWYgKCB0eHJlc3VsdCA9PSAxICkgeworCQkvKiBzdWNjZXNzLCBubyBtb3JlIGF2YWlsICovCisJCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHN1Y2Nlc3MsIG5vIG1vcmUgYnVmc1xuIik7CisJCS8qIG5ldGRldi0+dGJ1c3kgPSAxOyAgZG9uJ3Qgc2V0IGhlcmUsIGlycWhkbHIgKi8KKwkJLyogICBtYXkgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgaXQgKi8KKwkJcmVzdWx0ID0gMDsKKwl9IGVsc2UgaWYgKCB0eHJlc3VsdCA9PSAyICkgeworCQkvKiBhbGxvYyBmYWlsdXJlLCBkcm9wIGZyYW1lICovCisJCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHJldHVybmVkIGFsbG9jX2ZhaWxcbiIpOworCQlyZXN1bHQgPSAxOworCX0gZWxzZSB7CisJCS8qIGJ1ZmZlciBmdWxsIG9yIHF1ZXVlIGJ1c3ksIGRyb3AgZnJhbWUuICovCisJCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHJldHVybmVkIGZ1bGwgb3IgYnVzeVxuIik7CisJCXJlc3VsdCA9IDE7CisJfQorCisgZmFpbGVkOgorCS8qIEZyZWUgdXAgdGhlIFdFUCBidWZmZXIgaWYgaXQncyBub3QgdGhlIHNhbWUgYXMgdGhlIHNrYiAqLworCWlmICgocDgwMjExX3dlcC5kYXRhKSAmJiAocDgwMjExX3dlcC5kYXRhICE9IHNrYi0+ZGF0YSkpCisJCWtmcmVlKHA4MDIxMV93ZXAuZGF0YSk7CisKKwkvKiB3ZSBhbHdheXMgZnJlZSB0aGUgc2tiIGhlcmUsIG5ldmVyIGluIGEgbG93ZXIgbGV2ZWwuICovCisJaWYgKCFyZXN1bHQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QKKyoKKyogQ2FsbGVkIGZyb20gaGlnaGVyIGxhdmVycyB3aGVuZXZlciB0aGVyZSdzIGEgbmVlZCB0byBzZXQvY2xlYXIKKyogcHJvbWlzY3VvdXMgbW9kZSBvciByZXdyaXRlIHRoZSBtdWx0aWNhc3QgbGlzdC4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2aWNlX3QgKmRldikKK3sKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisKKwlEQkZFTlRFUjsKKworCS8qIFRPRE86ICByZWFsIG11bHRpY2FzdCBzdXBwb3J0IGFzIHdlbGwgKi8KKworCWlmICh3bGFuZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QpCisJCXdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCh3bGFuZGV2LCBkZXYpOworCisJREJGRVhJVDsKK30KKworI2lmZGVmIFNJT0NFVEhUT09MCisKK3N0YXRpYyBpbnQgcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCit7CisJVUlOVDMyIGV0aGNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm87CisJc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGE7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJbWVtc2V0KCZlZGF0YSwgMCwgc2l6ZW9mKGVkYXRhKSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmV0aGNtZCwgdXNlcmFkZHIsIHNpemVvZihldGhjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGV0aGNtZCkgeworCWNhc2UgRVRIVE9PTF9HRFJWSU5GTzoKKwkJaW5mby5jbWQgPSBldGhjbWQ7CisJCXNucHJpbnRmKGluZm8uZHJpdmVyLCBzaXplb2YoaW5mby5kcml2ZXIpLCAicDgwMjExXyVzIiwKKwkJCSB3bGFuZGV2LT5uc2RuYW1lKTsKKwkJc25wcmludGYoaW5mby52ZXJzaW9uLCBzaXplb2YoaW5mby52ZXJzaW9uKSwgIiVzIiwKKwkJCSBXTEFOX1JFTEVBU0UpOworCisJCS8vIGluZm8uZndfdmVyc2lvbgorCQkvLyBpbmZvLmJ1c19pbmZvCisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisjaWZkZWYgRVRIVE9PTF9HTElOSworCWNhc2UgRVRIVE9PTF9HTElOSzoKKwkJZWRhdGEuY21kID0gZXRoY21kOworCisJCWlmICh3bGFuZGV2LT5saW5rc3RhdHVzICYmCisJCSAgICAod2xhbmRldi0+bWFjbW9kZSAhPSBXTEFOX01BQ01PREVfTk9ORSkpIHsKKwkJCWVkYXRhLmRhdGEgPSAxOworCQl9IGVsc2UgeworCQkJZWRhdGEuZGF0YSA9IDA7CisJCX0KKworCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmZWRhdGEsIHNpemVvZihlZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfZG9faW9jdGwKKyoKKyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgb24gb25lIG9mIG91ciBkZXZpY2VzLiAgRXZlcnl0aGluZyBMaW51eAorKiBpb2N0bCBzcGVjaWZpYyBpcyBkb25lIGhlcmUuICBUaGVuIHdlIHBhc3MgdGhlIGNvbnRlbnRzIG9mIHRoZQorKiBpZnItPmRhdGEgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZSBoYW5kbGVyLgorKgorKiBBcmd1bWVudHM6CisqCWRldglMaW51eCBrZXJuZWwgbmV0ZGV2aWNlCisqCWlmcglPdXIgcHJpdmF0ZSBpb2N0bCByZXF1ZXN0IHN0cnVjdHVyZSwgdHlwZWQgZm9yIHRoZQorKgkJZ2VuZXJpYyBzdHJ1Y3QgaWZyZXEgc28gd2UgY2FuIHVzZSBwdHIgdG8gZnVuYworKgkJdy9vIGNhc3QuCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLiAgUG9zc2libGUgdmFsdWVzOgorKgkJLUVORVRET1dOIERldmljZSBpc24ndCB1cC4KKyoJCS1FQlVTWQljbWQgYWxyZWFkeSBpbiBwcm9ncmVzcworKgkJLUVUSU1FCXA4MDIxMSBjbWQgdGltZWQgb3V0IChNU0QgbWF5IGhhdmUgaXRzIG93biB0aW1lcnMpCisqCQktRUZBVUxUIG1lbW9yeSBmYXVsdCBjb3B5aW5nIG1zZyBmcm9tIHVzZXIgYnVmZmVyCisqCQktRU5PTUVNIHVuYWJsZSB0byBhbGxvY2F0ZSBrZXJuZWwgbXNnIGJ1ZmZlcgorKgkJLUVOT1NZUwliYWQgbWFnaWMsIGl0IHRoZSBjbWQgcmVhbGx5IGZvciB1cz8KKyoJCS1FSU5UUglzbGVlcGluZyBvbiBjbWQsIGF3YWtlbmVkIGJ5IHNpZ25hbCwgY21kIGNhbmNlbGxlZC4KKyoKKyogQ2FsbCBDb250ZXh0OgorKglQcm9jZXNzIHRocmVhZCAoaW9jdGwgY2FsbGVyKS4gIFRPRE86IFNNUCBzdXBwb3J0IG1heSByZXF1aXJlCisqCWxvY2tzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfZG9faW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlwODAyMTFpb2N0bF9yZXFfdAkqcmVxID0gKHA4MDIxMWlvY3RsX3JlcV90KilpZnI7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlVSU5UOAkJCSptc2didWY7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygyLCAicngnZCBpb2N0bCwgY21kPSVkLCBsZW49JWRcbiIsIGNtZCwgcmVxLT5sZW4pOworCisjaWYgV0lSRUxFU1NfRVhUIDwgMTMKKwkvKiBJcyB0aGlzIGEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBpb2N0bD8gKi8KKwlpZiAoKGNtZCA+PSBTSU9DSVdGSVJTVCkgJiYgKGNtZCA8PSBTSU9DSVdMQVNUKSkgeworCQlpZiAoKHJlc3VsdCA9IHA4MDIxMXdleHRfc3VwcG9ydF9pb2N0bChkZXYsIGlmciwgY21kKSkKKwkJICAgICE9ICgtRU9QTk9UU1VQUCkpIHsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKyNlbmRpZgorCisjaWZkZWYgU0lPQ0VUSFRPT0wKKwlpZiAoY21kID09IFNJT0NFVEhUT09MKSB7CisJCXJlc3VsdCA9IHA4MDIxMW5ldGRldl9ldGh0b29sKHdsYW5kZXYsICh2b2lkIF9fdXNlciAqKSBpZnItPmlmcl9kYXRhKTsKKwkJZ290byBiYWlsOworCX0KKyNlbmRpZgorCisJLyogVGVzdCB0aGUgbWFnaWMsIGFzc3VtZSBpZnIgaXMgZ29vZCBpZiBpdCdzIHRoZXJlICovCisJaWYgKCByZXEtPm1hZ2ljICE9IFA4MDIxMV9JT0NUTF9NQUdJQyApIHsKKwkJcmVzdWx0ID0gLUVOT1NZUzsKKwkJZ290byBiYWlsOworCX0KKworCWlmICggY21kID09IFA4MDIxMV9JRlRFU1QgKSB7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9IGVsc2UgaWYgKCBjbWQgIT0gUDgwMjExX0lGUkVRICkgeworCQlyZXN1bHQgPSAtRU5PU1lTOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogQWxsb2NhdGUgYSBidWYgb2Ygc2l6ZSByZXEtPmxlbiAqLworCWlmICgobXNnYnVmID0ga21hbGxvYyggcmVxLT5sZW4sIEdGUF9LRVJORUwpKSkgeworCQlpZiAoIGNvcHlfZnJvbV91c2VyKCBtc2didWYsICh2b2lkIF9fdXNlciAqKSByZXEtPmRhdGEsIHJlcS0+bGVuKSApIHsKKwkJCXJlc3VsdCA9IC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KCB3bGFuZGV2LCBtc2didWYpOworCQl9CisKKwkJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJCWlmICggY29weV90b191c2VyKCAodm9pZCBfX3VzZXIgKikgcmVxLT5kYXRhLCBtc2didWYsIHJlcS0+bGVuKSkgeworCQkJCXJlc3VsdCA9IC1FRkFVTFQ7CisJCQl9CisJCX0KKwkJa2ZyZWUobXNnYnVmKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCX0KK2JhaWw6CisJREJGRVhJVDsKKworCXJldHVybiByZXN1bHQ7IC8qIElmIGFsbG9jYXRlLGNvcHlmcm9tIG9yIGNvcHl0byBmYWlscywgcmV0dXJuIGVycm5vICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcworKgorKiBIYW5kbGVzIHRoZSBpb2N0bCBmb3IgY2hhbmdpbmcgdGhlIE1BQ0FkZHJlc3Mgb2YgYSBuZXRkZXZpY2UKKyoKKyogcmVmZXJlbmNlczogbGludXgvbmV0ZGV2aWNlLmggYW5kIGRyaXZlcnMvbmV0L25ldF9pbml0LmMKKyoKKyogTk9URTogW01TTV0gV2Ugb25seSBwcmV2ZW50IGFkZHJlc3MgY2hhbmdlcyB3aGVuIHRoZSBuZXRkZXYgaXMKKyogdXAuICBXZSBkb24ndCBjb250cm9sIGFueXRoaW5nIGJhc2VkIG9uIGRvdDExIHN0YXRlLiAgSWYgdGhlCisqIGFkZHJlc3MgaXMgY2hhbmdlZCBvbiBhIFNUQSB0aGF0J3MgY3VycmVudGx5IGFzc29jaWF0ZWQsIHlvdQorKiB3aWxsIHByb2JhYmx5IGxvc2UgdGhlIGFiaWxpdHkgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIGZyYW1lcy4KKyogSnVzdCBiZSBhd2FyZS4gIFRoZXJlZm9yZSwgdGhpcyBzaG91bGQgdXN1YWxseSBvbmx5IGJlIGRvbmUKKyogcHJpb3IgdG8gc2Nhbi9qb2luL2F1dGgvYXNzb2MuCisqCisqIEFyZ3VtZW50czoKKyoJZGV2CW5ldGRldmljZSBzdHJ1Y3QKKyoJYWRkcgl0aGUgbmV3IE1BQ0FkZHJlc3MgKGEgc3RydWN0KQorKgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4gIFBvc3NpYmxlIHZhbHVlczoKKyoJCS1FQlVTWQlkZXZpY2UgaXMgYnVzc3kgKGNtZCBub3QgcG9zc2libGUpCisqCQktYW5kIGVycm9ycyByZXR1cm5lZCBieTogcDgwMjExcmVxX2RvcmVxdWVzdCguLikKKyoKKyogYnk6IENvbGxpbiBSLiBNdWxsaW5lciA8Y29sbGluQG11bGxpbmVyLm9yZz4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhuZXRkZXZpY2VfdCAqZGV2LCB2b2lkICphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkcgkJCSpuZXdfYWRkciA9IGFkZHI7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CWRvdDExcmVxOworCXA4MDIxMWl0ZW1fdW5rMzkyX3QJCSptaWJhdHRyOworCXA4MDIxMWl0ZW1fcHN0cjZfdAkJKm1hY2FkZHI7CisJcDgwMjExaXRlbV91aW50MzJfdAkJKnJlc3VsdGNvZGU7CisJaW50IHJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKwkvKiBJZiB3ZSdyZSBydW5uaW5nLCB3ZSBkb24ndCBhbGxvdyBNQUMgYWRkcmVzcyBjaGFuZ2VzICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCWlmICggZGV2LT5zdGFydCkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKyNlbHNlCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKyNlbmRpZgorCisJLyogU2V0IHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMuICovCisJbWliYXR0ciA9ICZkb3QxMXJlcS5taWJhdHRyaWJ1dGU7CisJbWFjYWRkciA9IChwODAyMTFpdGVtX3BzdHI2X3QqKSZtaWJhdHRyLT5kYXRhOworCXJlc3VsdGNvZGUgPSAmZG90MTFyZXEucmVzdWx0Y29kZTsKKworCS8qIFNldCB1cCBhIGRvdDExcmVxX21pYnNldCAqLworCW1lbXNldCgmZG90MTFyZXEsIDAsIHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpKTsKKwlkb3QxMXJlcS5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwlkb3QxMXJlcS5tc2dsZW4gPSBzaXplb2YocDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90KTsKKwltZW1jcHkoZG90MTFyZXEuZGV2bmFtZSwKKwkJKCh3bGFuZGV2aWNlX3QqKShkZXYtPnByaXYpKS0+bmFtZSwKKwkJV0xBTl9ERVZOQU1FTEVOX01BWCAtIDEpOworCisJLyogU2V0IHVwIHRoZSBtaWJhdHRyaWJ1dGUgYXJndW1lbnQgKi8KKwltaWJhdHRyLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X21pYmF0dHJpYnV0ZTsKKwltaWJhdHRyLT5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbWliYXR0ci0+bGVuID0gc2l6ZW9mKG1pYmF0dHItPmRhdGEpOworCisJbWFjYWRkci0+ZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzOworCW1hY2FkZHItPnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltYWNhZGRyLT5sZW4gPSBzaXplb2YobWFjYWRkci0+ZGF0YSk7CisJbWFjYWRkci0+ZGF0YS5sZW4gPSBXTEFOX0FERFJfTEVOOworCW1lbWNweSgmbWFjYWRkci0+ZGF0YS5kYXRhLCBuZXdfYWRkci0+c2FfZGF0YSwgV0xBTl9BRERSX0xFTik7CisKKwkvKiBTZXQgdXAgdGhlIHJlc3VsdGNvZGUgYXJndW1lbnQgKi8KKwlyZXN1bHRjb2RlLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X3Jlc3VsdGNvZGU7CisJcmVzdWx0Y29kZS0+c3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwlyZXN1bHRjb2RlLT5sZW4gPSBzaXplb2YocmVzdWx0Y29kZS0+ZGF0YSk7CisJcmVzdWx0Y29kZS0+ZGF0YSA9IDA7CisKKwkvKiBub3cgZmlyZSB0aGUgcmVxdWVzdCAqLworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3QoZGV2LT5wcml2LCAoVUlOVDgqKSZkb3QxMXJlcSk7CisKKwkvKiBJZiB0aGUgcmVxdWVzdCB3YXNuJ3Qgc3VjY2Vzc2Z1bCwgcmVwb3J0IGFuIGVycm9yIGFuZCBkb24ndAorCSAqIGNoYW5nZSB0aGUgbmV0ZGV2IGFkZHJlc3MKKwkgKi8KKwlpZiAoIHJlc3VsdCAhPSAwIHx8IHJlc3VsdGNvZGUtPmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCSJMb3ctbGV2ZWwgZHJpdmVyIGZhaWxlZCBkb3QxMXJlcV9taWJzZXQoZG90MTFNQUNBZGRyZXNzKS5cbiIpOworCQlyZXN1bHQgPSAtRUFERFJOT1RBVkFJTDsKKwl9IGVsc2UgeworCQkvKiBldmVyeXRoaW5nJ3Mgb2ssIGNoYW5nZSB0aGUgYWRkciBpbiBuZXRkZXYgKi8KKwkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG5ld19hZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgd2xhbl9jaGFuZ2VfbXR1KG5ldGRldmljZV90ICpkZXYsIGludCBuZXdfbXR1KQoreworCURCRkVOVEVSOworCS8vIDIzMTIgaXMgbWF4IDgwMi4xMSBwYXlsb2FkLCAyMCBpcyBvdmVyaGVhZCwgKGV0aGVyICsgbGxjICtzbmFwKQorCS8vIGFuZCBhbm90aGVyIDggZm9yIHdlcC4KKyAgICAgICAgaWYgKCAobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+ICgyMzEyIC0gMjAgLSA4KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgZGV2LT5tdHUgPSBuZXdfbXR1OworCisJREJGRVhJVDsKKworICAgICAgICByZXR1cm4gMDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB3bGFuX3NldHVwCisqCisqIFJvdWdobHkgbWF0Y2hlcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBldGhlcl9zZXR1cC4gIEhlcmUKKyogd2Ugc2V0IHVwIGFueSBtZW1iZXJzIG9mIHRoZSB3bGFuZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGFyZSBjb21tb24KKyogdG8gYWxsIGRldmljZXMuICBBZGRpdGlvbmFsbHksIHdlIGFsbG9jYXRlIGEgbGludXggJ3N0cnVjdCBkZXZpY2UnCisqIGFuZCBwZXJmb3JtIHRoZSBzYW1lIHNldHVwIGFzIGV0aGVyX3NldHVwLgorKgorKiBOb3RlOiBJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBjYWxsZXIgaGF2ZSBzZXR1cCB0aGUgd2xhbmRldi0+bmFtZQorKglwdHIgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXB0ciB0byB0aGUgd2xhbmRldiBzdHJ1Y3R1cmUgZm9yIHRoZQorKgkJCWludGVyZmFjZS4KKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCisqIENhbGwgQ29udGV4dDoKKyoJU2hvdWxkIGJlIHByb2Nlc3MgdGhyZWFkLiAgV2UnbGwgYXNzdW1lIGl0IG1pZ2h0IGJlCisqCWludGVycnVwdCB0aG91Z2guICBXaGVuIHdlIGFkZCBzdXBwb3J0IGZvciBzdGF0aWNhbGx5CisqCWNvbXBpbGVkIGRyaXZlcnMsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlCisqCWNvbnRleHQgb2YgdGhlIGtlcm5lbCBzdGFydHVwIGNvZGUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJbmV0ZGV2aWNlX3QJKmRldjsKKworCURCRkVOVEVSOworCisJLyogU2V0IHVwIHRoZSB3bGFuZGV2ICovCisJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CisJd2xhbmRldi0+ZXRoY29udiA9IFdMQU5fRVRIQ09OVl84MDIxaDsKKwl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkvKiBTZXQgdXAgdGhlIHJ4IHF1ZXVlICovCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2xhbmRldi0+bnNkX3J4cSk7CisJdGFza2xldF9pbml0KCZ3bGFuZGV2LT5yeF9iaCwKKwkJICAgICBwODAyMTFuZXRkZXZfcnhfYmgsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpd2xhbmRldik7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IGRldmljZSAqLworCWRldiA9IGttYWxsb2Moc2l6ZW9mKG5ldGRldmljZV90KSwgR0ZQX0FUT01JQyk7CisJaWYgKCBkZXYgPT0gTlVMTCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvYyBuZXRkZXYuXG4iKTsKKwkJcmVzdWx0ID0gMTsKKwl9IGVsc2UgeworCQltZW1zZXQoIGRldiwgMCwgc2l6ZW9mKG5ldGRldmljZV90KSk7CisJCWV0aGVyX3NldHVwKGRldik7CisJCXdsYW5kZXYtPm5ldGRldiA9IGRldjsKKwkJZGV2LT5wcml2ID0gd2xhbmRldjsKKwkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPQlwODAyMTFrbmV0ZGV2X2hhcmRfc3RhcnRfeG1pdDsKKwkJZGV2LT5nZXRfc3RhdHMgPQlwODAyMTFrbmV0ZGV2X2dldF9zdGF0czsKKyNpZmRlZiBIQVZFX1BSSVZBVEVfSU9DVEwKKwkJZGV2LT5kb19pb2N0bCA9IAlwODAyMTFrbmV0ZGV2X2RvX2lvY3RsOworI2VuZGlmCisjaWZkZWYgSEFWRV9NVUxUSUNBU1QKKwkJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBwODAyMTFrbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdDsKKyNlbmRpZgorCQlkZXYtPmluaXQgPQkJcDgwMjExa25ldGRldl9pbml0OworCQlkZXYtPm9wZW4gPQkJcDgwMjExa25ldGRldl9vcGVuOworCQlkZXYtPnN0b3AgPQkJcDgwMjExa25ldGRldl9zdG9wOworCisjaWZkZWYgQ09ORklHX05FVF9XSVJFTEVTUworI2lmICgoV0lSRUxFU1NfRVhUIDwgMTcpICYmIChXSVJFTEVTU19FWFQgPCAyMSkpCisJCWRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzID0gcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHM7CisjZW5kaWYKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorCQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnA4MDIxMXdleHRfaGFuZGxlcl9kZWY7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCQlkZXYtPnRidXN5ID0gMTsKKwkJZGV2LT5zdGFydCA9IDA7CisjZWxzZQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0NIQU5HRV9NVFUKKwkJZGV2LT5jaGFuZ2VfbXR1ID0gd2xhbl9jaGFuZ2VfbXR1OworI2VuZGlmCisjaWZkZWYgSEFWRV9TRVRfTUFDX0FERFIKKwkJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPQlwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzczsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVFhfVElNRU9VVAorCQlkZXYtPnR4X3RpbWVvdXQgICAgICA9ICAmcDgwMjExa25ldGRldl90eF90aW1lb3V0OworCQlkZXYtPndhdGNoZG9nX3RpbWVvICA9ICAod2xhbl93YXRjaGRvZyAqIEhaKSAvIDEwMDA7CisjZW5kaWYKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB3bGFuX3Vuc2V0dXAKKyoKKyogVGhpcyBmdW5jdGlvbiBpcyBwYWlyZWQgd2l0aCB0aGUgd2xhbl9zZXR1cCByb3V0aW5lLiAgSXQgc2hvdWxkCisqIGJlIGNhbGxlZCBhZnRlciB1bnJlZ2lzdGVyX3dsYW5kZXYuICBCYXNpY2FsbHksIGFsbCBpdCBkb2VzIGlzCisqIGZyZWUgdGhlICdzdHJ1Y3QgZGV2aWNlJyB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB3bGFuZGV2LgorKiBXZSBkbyBpdCBoZXJlIGJlY2F1c2UgdGhlICdzdHJ1Y3QgZGV2aWNlJyBpc24ndCBhbGxvY2F0ZWQKKyogZXhwbGljaXRseSBpbiB0aGUgZHJpdmVyIGNvZGUsIGl0J3MgZG9uZSBpbiB3bGFuX3NldHVwLiAgVG8KKyogZG8gdGhlIGZyZWUgaW4gdGhlIGRyaXZlciBtaWdodCBzZWVtIGxpa2UgJ21hZ2ljJy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlwdHIgdG8gdGhlIHdsYW5kZXYgc3RydWN0dXJlIGZvciB0aGUKKyoJCQlpbnRlcmZhY2UuCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgorKiBDYWxsIENvbnRleHQ6CisqCVNob3VsZCBiZSBwcm9jZXNzIHRocmVhZC4gIFdlJ2xsIGFzc3VtZSBpdCBtaWdodCBiZQorKglpbnRlcnJ1cHQgdGhvdWdoLiAgV2hlbiB3ZSBhZGQgc3VwcG9ydCBmb3Igc3RhdGljYWxseQorKgljb21waWxlZCBkcml2ZXJzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHRoZQorKgljb250ZXh0IG9mIHRoZSBrZXJuZWwgc3RhcnR1cCBjb2RlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgd2xhbl91bnNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKworCXRhc2tsZXRfa2lsbCgmd2xhbmRldi0+cnhfYmgpOworCisJaWYgKHdsYW5kZXYtPm5ldGRldiA9PSBOVUxMICkgeworCQlXTEFOX0xPR19FUlJPUigiY2FsbGVkIHdpdGhvdXQgd2xhbmRldi0+bmV0ZGV2IHNldC5cbiIpOworCQlyZXN1bHQgPSAxOworCX0gZWxzZSB7CisJCWZyZWVfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CisJCXdsYW5kZXYtPm5ldGRldiA9IE5VTEw7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiByZWdpc3Rlcl93bGFuZGV2CisqCisqIFJvdWdobHkgbWF0Y2hlcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiByZWdpc3Rlcl9uZXRkZXYuICBUaGlzIGZ1bmN0aW9uCisqIGlzIGNhbGxlZCBhZnRlciB0aGUgZHJpdmVyIGhhcyBzdWNjZXNzZnVsbHkgcHJvYmVkIGFuZCBzZXQgdXAgdGhlCisqIHJlc291cmNlcyBmb3IgdGhlIGRldmljZS4gIEl0J3Mgbm93IHJlYWR5IHRvIGJlY29tZSBhIG5hbWVkIGRldmljZQorKiBpbiB0aGUgTGludXggc3lzdGVtLgorKgorKiBGaXJzdCB3ZSBhbGxvY2F0ZSBhIG5hbWUgZm9yIHRoZSBkZXZpY2UgKGlmIG5vdCBhbHJlYWR5IHNldCksIHRoZW4KKyogd2UgY2FsbCB0aGUgTGludXggZnVuY3Rpb24gcmVnaXN0ZXJfbmV0ZGV2aWNlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXB0ciB0byB0aGUgd2xhbmRldiBzdHJ1Y3R1cmUgZm9yIHRoZQorKgkJCWludGVyZmFjZS4KKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCisqIENhbGwgQ29udGV4dDoKKyoJQ2FuIGJlIGVpdGhlciBpbnRlcnJ1cHQgb3Igbm90LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaW50CQlpID0gMDsKKwluZXRkZXZpY2VfdAkqZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCisJREJGRU5URVI7CisKKwlpID0gZGV2X2FsbG9jX25hbWUod2xhbmRldi0+bmV0ZGV2LCAid2xhbiVkIik7CisJaWYgKGkgPj0gMCkgeworCQlpID0gcmVnaXN0ZXJfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CisJfQorCWlmIChpICE9IDApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisjaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkgKQorCWRldi0+bmFtZSA9IHdsYW5kZXYtPm5hbWU7CisjZWxzZQorCXN0cmNweSh3bGFuZGV2LT5uYW1lLCBkZXYtPm5hbWUpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmIChwcm9jX3A4MDIxMSkgeworCQl3bGFuZGV2LT5wcm9jZGlyID0gcHJvY19ta2Rpcih3bGFuZGV2LT5uYW1lLCBwcm9jX3A4MDIxMSk7CisJCWlmICggd2xhbmRldi0+cHJvY2RpciApCisJCQl3bGFuZGV2LT5wcm9jd2xhbmRldiA9CisJCQkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgid2xhbmRldiIsIDAsCisJCQkJCQkgICAgICAgd2xhbmRldi0+cHJvY2RpciwKKwkJCQkJCSAgICAgICBwODAyMTFuZXRkZXZfcHJvY19yZWFkLAorCQkJCQkJICAgICAgIHdsYW5kZXYpOworCQlpZiAod2xhbmRldi0+bnNkX3Byb2NfcmVhZCkKKwkJCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoIm5zZCIsIDAsCisJCQkJCSAgICAgICB3bGFuZGV2LT5wcm9jZGlyLAorCQkJCQkgICAgICAgd2xhbmRldi0+bnNkX3Byb2NfcmVhZCwKKwkJCQkJICAgICAgIHdsYW5kZXYpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwlwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2LCBXTEFOX0hPVFBMVUdfUkVHSVNURVIpOworI2VuZGlmCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB1bnJlZ2lzdGVyX3dsYW5kZXYKKyoKKyogUm91Z2hseSBtYXRjaGVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHVucmVnaXN0ZXJfbmV0ZGV2LiAgVGhpcworKiBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmVtb3ZlIGEgbmFtZWQgZGV2aWNlIGZyb20gdGhlIHN5c3RlbS4KKyoKKyogRmlyc3Qgd2UgdGVsbCBsaW51eCB0aGF0IHRoZSBkZXZpY2Ugc2hvdWxkIG5vIGxvbmdlciBleGlzdC4KKyogVGhlbiB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBrbm93biB3bGFuIGRldmljZXMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJcHRyIHRvIHRoZSB3bGFuZGV2IHN0cnVjdHVyZSBmb3IgdGhlCisqCQkJaW50ZXJmYWNlLgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglDYW4gYmUgZWl0aGVyIGludGVycnVwdCBvciBub3QuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCB1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcod2xhbmRldiwgV0xBTl9IT1RQTFVHX1JFTU9WRSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKCB3bGFuZGV2LT5wcm9jd2xhbmRldiApIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIndsYW5kZXYiLCB3bGFuZGV2LT5wcm9jZGlyKTsKKwl9CisJaWYgKCB3bGFuZGV2LT5uc2RfcHJvY19yZWFkICkgeworCQlyZW1vdmVfcHJvY19lbnRyeSgibnNkIiwgd2xhbmRldi0+cHJvY2Rpcik7CisJfQorCWlmICh3bGFuZGV2LT5wcm9jZGlyKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHdsYW5kZXYtPm5hbWUsIHByb2NfcDgwMjExKTsKKwl9CisjZW5kaWYKKworCXVucmVnaXN0ZXJfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CisKKwkvKiBOb3cgdG8gY2xlYW4gb3V0IHRoZSByeCBxdWV1ZSAqLworCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkgKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcm9jX3JlYWQKKyoKKyogUmVhZCBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3A4MDIxMS88ZGV2aWNlPi93bGFuZGV2CisqCisqIEFyZ3VtZW50czoKKyoJYnVmCisqCXN0YXJ0CisqCW9mZnNldAorKgljb3VudAorKgllb2YKKyoJZGF0YQorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglDYW4gYmUgZWl0aGVyIGludGVycnVwdCBvciBub3QuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3A4MDIxMW5ldGRldl9wcm9jX3JlYWQoCisJY2hhcgkqcGFnZSwKKwljaGFyCSoqc3RhcnQsCisJb2ZmX3QJb2Zmc2V0LAorCWludAljb3VudCwKKwlpbnQJKmVvZiwKKwl2b2lkCSpkYXRhKQoreworCWNoYXIJICpwID0gcGFnZTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90ICopIGRhdGE7CisKKwlEQkZFTlRFUjsKKwlpZiAob2Zmc2V0ICE9IDApIHsKKwkJKmVvZiA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwICs9IHNwcmludGYocCwgInA4MDIxMSB2ZXJzaW9uOiAlcyAoJXMpXG5cbiIsCisJCSAgICAgV0xBTl9SRUxFQVNFLCBXTEFOX0JVSUxEX0RBVEUpOworCXAgKz0gc3ByaW50ZihwLCAibmFtZSAgICAgICA6ICVzXG4iLCB3bGFuZGV2LT5uYW1lKTsKKwlwICs9IHNwcmludGYocCwgIm5zZCBuYW1lICAgOiAlc1xuIiwgd2xhbmRldi0+bnNkbmFtZSk7CisJcCArPSBzcHJpbnRmKHAsICJhZGRyZXNzICAgIDogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCSAgICAgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkclswXSwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkclsxXSwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkclsyXSwKKwkJICAgICB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzNdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzRdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzVdKTsKKwlwICs9IHNwcmludGYocCwgIm5zZCBjYXBzICAgOiAlcyVzJXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVApID8gIndlcF9odyAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX1RJRURXRVApID8gIndlcF90aWVkICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfTk9IT1NUV0VQKSA/ICJ3ZXBfaHdfb25seSAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX1BCQ0MpID8gInBiY2MgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9TSE9SVF9QUkVBTUJMRSkgPyAic2hvcnRfcHJlYW1ibGUgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9BR0lMSVRZKSA/ICJhZ2lsaXR5ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfQVBfUkVUUkFOU01JVCkgPyAiYXBfcmV0cmFuc21pdCAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQpID8gImh3X2ZyYWcgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9BVVRPSk9JTikgPyAiYXV0b2pvaW4gIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9OT1NDQU4pID8gIiIgOiAic2NhbiAiKTsKKworCisJcCArPSBzcHJpbnRmKHAsICJic3NpZCAgICAgIDogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCSAgICAgd2xhbmRldi0+YnNzaWRbMF0sIHdsYW5kZXYtPmJzc2lkWzFdLCB3bGFuZGV2LT5ic3NpZFsyXSwKKwkJICAgICB3bGFuZGV2LT5ic3NpZFszXSwgd2xhbmRldi0+YnNzaWRbNF0sIHdsYW5kZXYtPmJzc2lkWzVdKTsKKworCXAgKz0gc3ByaW50ZihwLCAiRW5hYmxlZCAgICA6ICVzJXNcbiIsCisJCSAgICAgKHdsYW5kZXYtPnNob3J0cHJlYW1ibGUpID8gInNob3J0X3ByZWFtYmxlICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpID8gInByaXZhY3kiIDogIiIpOworCisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIChwIC0gcGFnZSk7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMW5ldGRldl9od3JlbW92ZWQKKyoKKyogSGFyZHdhcmUgcmVtb3ZlZCBub3RpZmljYXRpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZAorKiBpbW1lZGlhdGVseSBhZnRlciBhbiBNU0QgaGFzIGRldGVjdGVkIHRoYXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUKKyogaGFzIGJlZW4geWFua2VkIG91dCBmcm9tIHVuZGVyIHVzLiAgVGhlIHByaW1hcnkgdGhpbmdzIHdlIG5lZWQKKyogdG8gZG8gYXJlOgorKiAgIC0gTWFyayB0aGUgd2xhbmRldgorKiAgIC0gUHJldmVudCBhbnkgZnVydGhlciB0cmFmZmljIGZyb20gdGhlIGtuZXRkZXYgaS9mCisqICAgLSBQcmV2ZW50IGFueSBmdXJ0aGVyIHJlcXVlc3RzIGZyb20gbWdtdCBpL2YKKyogICAtIElmIHRoZXJlIGFyZSBhbnkgd2FpdHEnZCBtZ210IHJlcXVlc3RzIG9yIG1nbXQtZnJhbWUgZXhjaGFuZ2VzLAorKiAgICAgc2h1dCB0aGVtIGRvd24uCisqICAgLSBDYWxsIHRoZSBNU0QgaHdyZW1vdmVkIGZ1bmN0aW9uLgorKgorKiBUaGUgcmVtYWluZGVyIG9mIHRoZSBjbGVhbnVwIHdpbGwgYmUgaGFuZGxlZCBieSB1bnJlZ2lzdGVyKCkuCisqIE91ciBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBwcmV2ZW50IGFzIG11Y2ggdGlja2xpbmcgb2YgdGhlIE1TRAorKiBhcyBwb3NzaWJsZSBzaW5jZSB0aGUgTVNEIGlzIGFscmVhZHkgaW4gYSAnd291bmRlZCcgc3RhdGUuCisqCisqIFRPRE86IEFzIG5ldyBmZWF0dXJlcyBhcmUgYWRkZWQsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCisqICAgICAgIHVwZGF0ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyogUmV0dXJuczoKKyoJbm90aGluZworKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJVXN1YWxseSBpbnRlcnJ1cHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisJd2xhbmRldi0+aHdyZW1vdmVkID0gMTsKKwlpZiAoIHdsYW5kZXYtPnN0YXRlID09IFdMQU5fREVWSUNFX09QRU4pIHsKKwkJcDgwMjExbmV0ZGV2X3N0b3BfcXVldWUod2xhbmRldik7CisJfQorCisJbmV0aWZfZGV2aWNlX2RldGFjaCh3bGFuZGV2LT5uZXRkZXYpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExX3J4X3R5cGVkcm9wCisqCisqIENsYXNzaWZpZXMgdGhlIGZyYW1lLCBpbmNyZW1lbnRzIHRoZSBhcHByb3ByaWF0ZSBjb3VudGVyLCBhbmQKKyogcmV0dXJucyAwfDF8MiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciBzaG91bGQgaGFuZGxlLCBpZ25vcmUsIG9yCisqIGRyb3AgdGhlIGZyYW1lCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWZjCQlmcmFtZSBjb250cm9sIGZpZWxkCisqCisqIFJldHVybnM6CisqCXplcm8gaWYgdGhlIGZyYW1lIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIsCisqICAgICAgIG9uZSBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGlnbm9yZWQKKyogICAgICAgYW55dGhpbmcgZWxzZSBtZWFucyB3ZSBkcm9wIGl0LgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBmYykKK3sKKwlVSU5UMTYJZnR5cGU7CisJVUlOVDE2CWZzdHlwZTsKKwlpbnQJZHJvcCA9IDA7CisJLyogQ2xhc3NpZnkgZnJhbWUsIGluY3JlbWVudCBjb3VudGVyICovCisJZnR5cGUgPSBXTEFOX0dFVF9GQ19GVFlQRShmYyk7CisJZnN0eXBlID0gV0xBTl9HRVRfRkNfRlNUWVBFKGZjKTsKKyNpZiAwCisJV0xBTl9MT0dfREVCVUcoNCwKKwkJInJ4X3R5cGVkcm9wIDogZnR5cGU9JWQgZnN0eXBlPSVkLlxuIiwgZnR5cGUsIGZzdHlwZSk7CisjZW5kaWYKKwlzd2l0Y2ggKCBmdHlwZSApIHsKKwljYXNlIFdMQU5fRlRZUEVfTUdNVDoKKwkJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8CisJCQkod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJCWRyb3AgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgbWdtdDpcbiIpOworCQl3bGFuZGV2LT5yeC5tZ210Kys7CisJCXN3aXRjaCggZnN0eXBlICkgeworCQljYXNlIFdMQU5fRlNUWVBFX0FTU09DUkVROgorCQkJLyogcHJpbnRrKCJhc3NvY3JlcSIpOyAqLworCQkJd2xhbmRldi0+cnguYXNzb2NyZXErKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FTU09DUkVTUDoKKwkJCS8qIHByaW50aygiYXNzb2NyZXNwIik7ICovCisJCQl3bGFuZGV2LT5yeC5hc3NvY3Jlc3ArKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVE6CisJCQkvKiBwcmludGsoInJlYXNzb2NyZXEiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LnJlYXNzb2NyZXErKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVNQOgorCQkJLyogcHJpbnRrKCJyZWFzc29jcmVzcCIpOyAqLworCQkJd2xhbmRldi0+cngucmVhc3NvY3Jlc3ArKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1BST0JFUkVROgorCQkJLyogcHJpbnRrKCJwcm9iZXJlcSIpOyAqLworCQkJd2xhbmRldi0+cngucHJvYmVyZXErKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1BST0JFUkVTUDoKKwkJCS8qIHByaW50aygicHJvYmVyZXNwIik7ICovCisJCQl3bGFuZGV2LT5yeC5wcm9iZXJlc3ArKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0JFQUNPTjoKKwkJCS8qIHByaW50aygiYmVhY29uIik7ICovCisJCQl3bGFuZGV2LT5yeC5iZWFjb24rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FUSU06CisJCQkvKiBwcmludGsoImF0aW0iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmF0aW0rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RJU0FTU09DOgorCQkJLyogcHJpbnRrKCJkaXNhc3NvYyIpOyAqLworCQkJd2xhbmRldi0+cnguZGlzYXNzb2MrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FVVEhFTjoKKwkJCS8qIHByaW50aygiYXV0aGVuIik7ICovCisJCQl3bGFuZGV2LT5yeC5hdXRoZW4rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RFQVVUSEVOOgorCQkJLyogcHJpbnRrKCJkZWF1dGhlbiIpOyAqLworCQkJd2xhbmRldi0+cnguZGVhdXRoZW4rKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogcHJpbnRrKCJ1bmtub3duIik7ICovCisJCQl3bGFuZGV2LT5yeC5tZ210X3Vua25vd24rKzsKKwkJCWJyZWFrOworCQl9CisJCS8qIHByaW50aygiXG4iKTsgKi8KKwkJZHJvcCA9IDI7CisJCWJyZWFrOworCisJY2FzZSBXTEFOX0ZUWVBFX0NUTDoKKwkJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8CisJCQkod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJCWRyb3AgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgY3RsOlxuIik7CisJCXdsYW5kZXYtPnJ4LmN0bCsrOworCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9QU1BPTEw6CisJCQkvKiBwcmludGsoInBzcG9sbCIpOyAqLworCQkJd2xhbmRldi0+cngucHNwb2xsKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9SVFM6CisJCQkvKiBwcmludGsoInJ0cyIpOyAqLworCQkJd2xhbmRldi0+cngucnRzKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DVFM6CisJCQkvKiBwcmludGsoImN0cyIpOyAqLworCQkJd2xhbmRldi0+cnguY3RzKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9BQ0s6CisJCQkvKiBwcmludGsoImFjayIpOyAqLworCQkJd2xhbmRldi0+cnguYWNrKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRkVORDoKKwkJCS8qIHByaW50aygiY2ZlbmQiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmNmZW5kKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRkVORENGQUNLOgorCQkJLyogcHJpbnRrKCJjZmVuZGNmYWNrIik7ICovCisJCQl3bGFuZGV2LT5yeC5jZmVuZGNmYWNrKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIHByaW50aygidW5rbm93biIpOyAqLworCQkJd2xhbmRldi0+cnguY3RsX3Vua25vd24rKzsKKwkJCWJyZWFrOworCQl9CisJCS8qIHByaW50aygiXG4iKTsgKi8KKwkJZHJvcCA9IDI7CisJCWJyZWFrOworCisJY2FzZSBXTEFOX0ZUWVBFX0RBVEE6CisJCXdsYW5kZXYtPnJ4LmRhdGErKzsKKwkJc3dpdGNoKCBmc3R5cGUgKSB7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQU9OTFk6CisJCQl3bGFuZGV2LT5yeC5kYXRhb25seSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQV9DRkFDSzoKKwkJCXdsYW5kZXYtPnJ4LmRhdGFfY2ZhY2srKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RBVEFfQ0ZQT0xMOgorCQkJd2xhbmRldi0+cnguZGF0YV9jZnBvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RBVEFfQ0ZBQ0tfQ0ZQT0xMOgorCQkJd2xhbmRldi0+cnguZGF0YV9fY2ZhY2tfY2Zwb2xsKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9OVUxMOgorCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpudWxsXG4iKTsKKwkJCXdsYW5kZXYtPnJ4Lm51bGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGQUNLOgorCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpjZmFja1xuIik7CisJCQl3bGFuZGV2LT5yeC5jZmFjaysrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZQT0xMOgorCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpjZnBvbGxcbiIpOworCQkJd2xhbmRldi0+cnguY2Zwb2xsKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRkFDS19DRlBPTEw6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmYWNrX2NmcG9sbFxuIik7CisJCQl3bGFuZGV2LT5yeC5jZmFja19jZnBvbGwrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogcHJpbnRrKCJ1bmtub3duIik7ICovCisJCQl3bGFuZGV2LT5yeC5kYXRhX3Vua25vd24rKzsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfQorCXJldHVybiBkcm9wOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKy8qIE5vdGlmeSB1c2Vyc3BhY2Ugd2hlbiBhIG5ldGRldmljZSBldmVudCBvY2N1cnMsCisgKiBieSBydW5uaW5nICcvc2Jpbi9ob3RwbHVnIG5ldCcgd2l0aCBjZXJ0YWluCisgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0LgorICovCitpbnQgcDgwMjExX3J1bl9zYmluX2hvdHBsdWcod2xhbmRldmljZV90ICp3bGFuZGV2LCBjaGFyICphY3Rpb24pCit7CisgICAgICAgIGNoYXIgKmFyZ3ZbM10sICplbnZwWzddLCBpZm5hbWVbMTIgKyBJRk5BTVNJWl0sIGFjdGlvbl9zdHJbMzJdOworCWNoYXIgbnNkbmFtZVszMl0sIHdsYW5fd2V4dFszMl07CisgICAgICAgIGludCBpOworCisJaWYgKHdsYW5kZXYpIHsKKwkJc3ByaW50ZihpZm5hbWUsICJJTlRFUkZBQ0U9JXMiLCB3bGFuZGV2LT5uYW1lKTsKKwkJc3ByaW50Zihuc2RuYW1lLCAiTlNETkFNRT0lcyIsIHdsYW5kZXYtPm5zZG5hbWUpOworCX0gZWxzZSB7CisJCXNwcmludGYoaWZuYW1lLCAiSU5URVJGQUNFPW51bGwiKTsKKwkJc3ByaW50Zihuc2RuYW1lLCAiTlNETkFNRT1udWxsIik7CisJfQorCisJc3ByaW50Zih3bGFuX3dleHQsICJXTEFOX1dFWFQ9JXMiLCB3bGFuX3dleHRfd3JpdGUgPyAieSIgOiAiIik7CisgICAgICAgIHNwcmludGYoYWN0aW9uX3N0ciwgIkFDVElPTj0lcyIsIGFjdGlvbik7CisKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGFyZ3ZbaSsrXSA9IGhvdHBsdWdfcGF0aDsKKyAgICAgICAgYXJndltpKytdID0gIndsYW4iOworICAgICAgICBhcmd2W2ldID0gTlVMTDsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgLyogbWluaW1hbCBjb21tYW5kIGVudmlyb25tZW50ICovCisgICAgICAgIGVudnAgW2krK10gPSAiSE9NRT0vIjsKKyAgICAgICAgZW52cCBbaSsrXSA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIjsKKyAgICAgICAgZW52cCBbaSsrXSA9IGlmbmFtZTsKKyAgICAgICAgZW52cCBbaSsrXSA9IGFjdGlvbl9zdHI7CisgICAgICAgIGVudnAgW2krK10gPSBuc2RuYW1lOworICAgICAgICBlbnZwIFtpKytdID0gd2xhbl93ZXh0OworICAgICAgICBlbnZwIFtpXSA9IE5VTEw7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDYyKSkKKyAgICAgICAgcmV0dXJuIGNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndiBbMF0sIGFyZ3YsIGVudnApOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndiBbMF0sIGFyZ3YsIGVudnAsIDApOworI2VuZGlmCit9CisKKyNlbmRpZgorCisKK3ZvaWQgICAgcDgwMjExX3N1c3BlbmQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwlwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2LCBXTEFOX0hPVFBMVUdfU1VTUEVORCk7CisjZW5kaWYKKworCURCRkVYSVQ7Cit9CisKK3ZvaWQgICAgcDgwMjExX3Jlc3VtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXYsIFdMQU5fSE9UUExVR19SRVNVTUUpOworI2VuZGlmCisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBwODAyMTFrbmV0ZGV2X3R4X3RpbWVvdXQoIG5ldGRldmljZV90ICpuZXRkZXYpCit7CisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopbmV0ZGV2LT5wcml2OworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPnR4X3RpbWVvdXQpIHsKKwkJd2xhbmRldi0+dHhfdGltZW91dCh3bGFuZGV2KTsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19XQVJOSU5HKCJJbXBsZW1lbnQgdHhfdGltZW91dCBmb3IgJXNcbiIsCisJCQkJIHdsYW5kZXYtPm5zZG5hbWUpOworCQlwODAyMTFuZXRkZXZfd2FrZV9xdWV1ZSh3bGFuZGV2KTsKKwl9CisKKwlEQkZFWElUOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJlMGNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKQEAgLTAsMCArMSwzMzYgQEAKKy8qIHA4MDIxMW5ldGRldi5oCisqCisqIFdMQU4gbmV0IGRldmljZSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgdGhlIHN0cnVjdHVyZSB0eXBlIHRoYXQgcmVwcmVzZW50cyBlYWNoIHdsYW4KKyogaW50ZXJmYWNlLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfTElOVVhfUDgwMjExTkVUREVWX0gKKyNkZWZpbmUgX0xJTlVYX1A4MDIxMU5FVERFVl9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKyNkZWZpbmUgV0xBTl9ERVZJQ0VfQ0xPU0VECTAKKyNkZWZpbmUgV0xBTl9ERVZJQ0VfT1BFTgkxCisKKyNkZWZpbmUgV0xBTl9NQUNNT0RFX05PTkUJMAorI2RlZmluZSBXTEFOX01BQ01PREVfSUJTU19TVEEJMQorI2RlZmluZSBXTEFOX01BQ01PREVfRVNTX1NUQQkyCisjZGVmaW5lIFdMQU5fTUFDTU9ERV9FU1NfQVAJMworCisvKiBNU0QgU3RhdGVzICovCisjZGVmaW5lIFdMQU5fTVNEX1NUQVJUCQkJLTEKKyNkZWZpbmUgV0xBTl9NU0RfRFJJVkVSTE9BREVECQkwCisjZGVmaW5lIFdMQU5fTVNEX0hXUFJFU0VOVF9QRU5ESU5HCTEKKyNkZWZpbmUgV0xBTl9NU0RfSFdGQUlMCQkJMgorI2RlZmluZSBXTEFOX01TRF9IV1BSRVNFTlQJCTMKKyNkZWZpbmUgV0xBTl9NU0RfRldMT0FEX1BFTkRJTkcJCTQKKyNkZWZpbmUgV0xBTl9NU0RfRldMT0FECQkJNQorI2RlZmluZSBXTEFOX01TRF9SVU5OSU5HX1BFTkRJTkcJNgorI2RlZmluZSBXTEFOX01TRF9SVU5OSU5HCQk3CisKKyNpZm5kZWYgRVRIX1BfRUNPTkVUCisjZGVmaW5lIEVUSF9QX0VDT05FVCAgIDB4MDAxOCAgICAvKiBuZWVkZWQgZm9yIDIuMi54IGtlcm5lbHMgKi8KKyNlbmRpZgorCisjZGVmaW5lIEVUSF9QXzgwMjExX1JBVyAgICAgICAgKEVUSF9QX0VDT05FVCArIDEpCisKKyNpZm5kZWYgQVJQSFJEX0lFRUU4MDIxMQorI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExIDgwMSAgICAgLyoga2VybmVsIDIuNC42ICovCisjZW5kaWYKKworI2lmbmRlZiBBUlBIUkRfSUVFRTgwMjExX1BSSVNNICAvKiBrZXJuZWwgMi40LjE4ICovCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gODAyCisjZW5kaWYKKworLyotLS0gTlNEIENhcGFiaWxpdGllcyBGbGFncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX0hBUkRXQVJFV0VQICAgICAgICAgICAweDAxICAvKiBoYXJkd2FyZSB3ZXAgZW5naW5lICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfVElFRFdFUCAgICAgICAgICAgICAgIDB4MDIgIC8qIGNhbid0IGRlY291cGxlIGVuL2RlICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfTk9IT1NUV0VQICAgICAgICAgICAgIDB4MDQgIC8qIG11c3QgdXNlIGhhcmR3YXJlIHdlcCAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX1BCQ0MgICAgICAgICAgICAgICAgICAweDA4ICAvKiBoYXJkd2FyZSBzdXBwb3J0cyBQQkNDICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfU0hPUlRfUFJFQU1CTEUgICAgICAgIDB4MTAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfQUdJTElUWSAgICAgICAgICAgICAgIDB4MjAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVBfUkVUUkFOU01JVCAgICAgICAgIDB4NDAgIC8qIG5zZCBoYW5kbGVzIHJldHJhbnNtaXRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCAgICAgICAgICAgIDB4ODAgIC8qIG5zZCBoYW5kbGVzIGZyYWcvZGVmcmFnICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU4gICAgICAgICAgICAgIDB4MTAwICAvKiBuc2QgZG9lcyBhdXRvam9pbiAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX05PU0NBTiAgICAgICAgICAgICAgICAweDIwMCAgLyogbnNkIGNhbiBzY2FuICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qIFJlY2VpdmVkIGZyYW1lIHN0YXRpc3RpY3MgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1yeF90Cit7CisJVUlOVDMyCW1nbXQ7CisJVUlOVDMyCWFzc29jcmVxOworCVVJTlQzMglhc3NvY3Jlc3A7CisJVUlOVDMyCXJlYXNzb2NyZXE7CisJVUlOVDMyCXJlYXNzb2NyZXNwOworCVVJTlQzMglwcm9iZXJlcTsKKwlVSU5UMzIJcHJvYmVyZXNwOworCVVJTlQzMgliZWFjb247CisJVUlOVDMyCWF0aW07CisJVUlOVDMyCWRpc2Fzc29jOworCVVJTlQzMglhdXRoZW47CisJVUlOVDMyCWRlYXV0aGVuOworCVVJTlQzMgltZ210X3Vua25vd247CisJVUlOVDMyCWN0bDsKKwlVSU5UMzIJcHNwb2xsOworCVVJTlQzMglydHM7CisJVUlOVDMyCWN0czsKKwlVSU5UMzIJYWNrOworCVVJTlQzMgljZmVuZDsKKwlVSU5UMzIJY2ZlbmRjZmFjazsKKwlVSU5UMzIJY3RsX3Vua25vd247CisJVUlOVDMyCWRhdGE7CisJVUlOVDMyCWRhdGFvbmx5OworCVVJTlQzMglkYXRhX2NmYWNrOworCVVJTlQzMglkYXRhX2NmcG9sbDsKKwlVSU5UMzIJZGF0YV9fY2ZhY2tfY2Zwb2xsOworCVVJTlQzMgludWxsOworCVVJTlQzMgljZmFjazsKKwlVSU5UMzIJY2Zwb2xsOworCVVJTlQzMgljZmFja19jZnBvbGw7CisJVUlOVDMyCWRhdGFfdW5rbm93bjsKKwlVSU5UMzIgIGRlY3J5cHQ7CisJVUlOVDMyICBkZWNyeXB0X2VycjsKK30gcDgwMjExX2ZybXJ4X3Q7CisKKyNpZmRlZiBXSVJFTEVTU19FWFQKKy8qIGNhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KK3N0cnVjdCBpd19zdGF0aXN0aWNzKiBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqZGV2KTsKKy8qIHdpcmVsZXNzIGV4dGVuc2lvbnMnIGlvY3RscyAqLworaW50IHA4MDIxMXdleHRfc3VwcG9ydF9pb2N0bChuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CisjaWYgV0lSRUxFU1NfRVhUID4gMTIKK2V4dGVybiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKKyNlbmRpZgorCitpbnQgcDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBpbnQgYXNzb2MpOworCisjZW5kaWYgLyogd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLworCisvKiBXRVAgc3R1ZmYgKi8KKyNkZWZpbmUgTlVNX1dFUEtFWVMgNAorI2RlZmluZSBNQVhfS0VZTEVOIDMyCisKKyNkZWZpbmUgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0sgKEJJVDF8QklUMCkKKyNkZWZpbmUgSE9TVFdFUF9ERUNSWVBUICBCSVQ0CisjZGVmaW5lIEhPU1RXRVBfRU5DUllQVCAgQklUNQorI2RlZmluZSBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEIEJJVDYKKyNkZWZpbmUgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgQklUNworCitleHRlcm4gaW50IHdsYW5fd2F0Y2hkb2c7CitleHRlcm4gaW50IHdsYW5fd2V4dF93cml0ZTsKKworLyogV0xBTiBkZXZpY2UgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbmRldmljZQoreworCXN0cnVjdCB3bGFuZGV2aWNlCSpuZXh0OwkJLyogbGluayBmb3IgbGlzdCBvZiBkZXZpY2VzICovCisJdm9pZAkJCSpwcml2OwkJLyogcHJpdmF0ZSBkYXRhIGZvciBNU0QgKi8KKworCS8qIFN1YnN5c3RlbSBTdGF0ZSAqLworCWNoYXIJCW5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07IC8qIERldiBuYW1lLCBmcm9tIHJlZ2lzdGVyX3dsYW5kZXYoKSovCisJY2hhcgkJKm5zZG5hbWU7CisKKwlVSU5UMzIgICAgICAgICAgc3RhdGU7ICAgICAgICAgIC8qIERldmljZSBJL0Ygc3RhdGUgKG9wZW4vY2xvc2VkKSAqLworCVVJTlQzMgkJbXNkc3RhdGU7CS8qIHN0YXRlIG9mIHVuZGVybHlpbmcgZHJpdmVyICovCisJVUlOVDMyCQlod3JlbW92ZWQ7CS8qIEhhcyB0aGUgaHcgYmVlbiB5YW5rZWQgb3V0PyAqLworCisJLyogSGFyZHdhcmUgY29uZmlnICovCisJVUlOVAkJaXJxOworCVVJTlQJCWlvYmFzZTsKKwlVSU5UCQltZW1iYXNlOworCVVJTlQzMiAgICAgICAgICBuc2RjYXBzOyAgLyogTlNEIENhcGFiaWxpdGllcyBmbGFncyAqLworCisJLyogQ29uZmlnIHZhcnMgKi8KKwlVSU5UCQlldGhjb252OworCisJLyogZGV2aWNlIG1ldGhvZHMgKGluaXQgYnkgTVNELCB1c2VkIGJ5IHA4MDIxMSAqLworCWludAkJKCpvcGVuKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50CQkoKmNsb3NlKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJdm9pZAkJKCpyZXNldCkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYgKTsKKwlpbnQJCSgqdHhmcmFtZSkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CisJaW50CQkoKm1sbWVyZXF1ZXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CisJaW50ICAgICAgICAgICAgICgqc2V0X211bHRpY2FzdF9saXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwKKwkJCQkJICAgICAgbmV0ZGV2aWNlX3QgKmRldik7CisJdm9pZAkJKCp0eF90aW1lb3V0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWludCAgICAgICAgICAgICAoKm5zZF9wcm9jX3JlYWQpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsIGludAkqZW9mLCB2b2lkICpkYXRhKTsKKyNlbmRpZgorCisJLyogODAyLjExIFN0YXRlICovCisJVUlOVDgJCWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlwODAyMTFwc3RyMzJfdAlzc2lkOworCVVJTlQzMgkJbWFjbW9kZTsKKwlpbnQgICAgICAgICAgICAgbGlua3N0YXR1czsKKwlpbnQgICAgICAgICAgICAgc2hvcnRwcmVhbWJsZTsgIC8qIEMgYm9vbCAqLworCisJLyogV0VQIFN0YXRlICovCisJVUlOVDggd2VwX2tleXNbTlVNX1dFUEtFWVNdW01BWF9LRVlMRU5dOworCVVJTlQ4IHdlcF9rZXlsZW5zW05VTV9XRVBLRVlTXTsKKwlpbnQgICBob3N0d2VwOworCisJLyogUmVxdWVzdC9Db25maXJtIGkvZiBzdGF0ZSAodXNlZCBieSBwODAyMTEpICovCisJdW5zaWduZWQgbG9uZwkJcmVxdWVzdF9wZW5kaW5nOyAvKiBmbGFnLCBhY2Nlc3MgYXRvbWljYWxseSAqLworCisJLyogbmV0bGluayBzb2NrZXQgKi8KKwkvKiBxdWV1ZSBmb3IgaW5kaWNhdGlvbnMgd2FpdGluZyBmb3IgY21kIGNvbXBsZXRpb24gKi8KKwkvKiBMaW51eCBuZXRkZXZpY2UgYW5kIHN1cHBvcnQgKi8KKwluZXRkZXZpY2VfdAkJKm5ldGRldjsJLyogcHRyIHRvIGxpbnV4IG5ldGRldmljZSAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGxpbnV4X3N0YXRzOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwkvKiBQcm9jZnMgc3VwcG9ydCAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY2RpcjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2N3bGFuZGV2OworI2VuZGlmCisKKwkvKiBSeCBib3R0b20gaGFsZiAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlyeF9iaDsKKworCXN0cnVjdCBza19idWZmX2hlYWQJbnNkX3J4cTsKKworCS8qIDgwMi4xMSBkZXZpY2Ugc3RhdGlzdGljcyAqLworCXN0cnVjdCBwODAyMTFfZnJtcnhfdAlyeDsKKworLyogY29tcGF0aWJpbGl0eSB0byB3aXJlbGVzcyBleHRlbnNpb25zICovCisjaWZkZWYgV0lSRUxFU1NfRVhUCisJc3RydWN0IGl3X3N0YXRpc3RpY3MJd3N0YXRzOworCisJLyogamtyaWVnbDogaXdzcHkgZmllbGRzICovCisgICAgICAgIFVJTlQ4CQkJc3B5X251bWJlcjsKKyAgICAgICAgY2hhcgkJCXNweV9hZGRyZXNzW0lXX01BWF9TUFldW0VUSF9BTEVOXTsKKyAgICAgICAgc3RydWN0IGl3X3F1YWxpdHkgICAgICAgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisKKyNlbmRpZgorCit9IHdsYW5kZXZpY2VfdDsKKworLyogV0VQIHN0dWZmICovCitpbnQgd2VwX2NoYW5nZV9rZXkod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQga2V5bnVtLCBVSU5UOCoga2V5LCBpbnQga2V5bGVuKTsKK2ludCB3ZXBfZGVjcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICpidWYsIFVJTlQzMiBsZW4sIGludCBrZXlfb3ZlcnJpZGUsIFVJTlQ4ICppdiwgVUlOVDggKmljdik7CitpbnQgd2VwX2VuY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UOCAqYnVmLCBVSU5UOCAqZHN0LCBVSU5UMzIgbGVuLCBpbnQga2V5bnVtLCBVSU5UOCAqaXYsIFVJTlQ4ICppY3YpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJucyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3ZvaWQJcDgwMjExbmV0ZGV2X3N0YXJ0dXAodm9pZCk7Cit2b2lkCXA4MDIxMW5ldGRldl9zaHV0ZG93bih2b2lkKTsKK2ludAl3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQJd2xhbl91bnNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQJcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworaW50CXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZAlwODAyMTFuZXRkZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQJcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCAgICBwODAyMTFfc3VzcGVuZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCAgICBwODAyMTFfcmVzdW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3A4MDIxMW5ldGRldl9zdG9wX3F1ZXVlKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpZiAoICF3bGFuZGV2ICkgcmV0dXJuOworCWlmICggIXdsYW5kZXYtPm5ldGRldiApIHJldHVybjsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJd2xhbmRldi0+bmV0ZGV2LT50YnVzeSA9IDE7CisJd2xhbmRldi0+bmV0ZGV2LT5zdGFydCA9IDA7CisjZWxzZQorCW5ldGlmX3N0b3BfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3A4MDIxMW5ldGRldl9zdGFydF9xdWV1ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaWYgKCAhd2xhbmRldiApIHJldHVybjsKKwlpZiAoICF3bGFuZGV2LT5uZXRkZXYgKSByZXR1cm47CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCXdsYW5kZXYtPm5ldGRldi0+dGJ1c3kgPSAwOworCXdsYW5kZXYtPm5ldGRldi0+c3RhcnQgPSAxOworI2Vsc2UKKwluZXRpZl9zdGFydF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDgwMjExbmV0ZGV2X3dha2VfcXVldWUod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWlmICggIXdsYW5kZXYgKSByZXR1cm47CisJaWYgKCAhd2xhbmRldi0+bmV0ZGV2ICkgcmV0dXJuOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpICkKKwl3bGFuZGV2LT5uZXRkZXYtPnRidXN5ID0gMDsKKwltYXJrX2JoKE5FVF9CSCk7CisjZWxzZQorCW5ldGlmX3dha2VfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1JFR0lTVEVSICJyZWdpc3RlciIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1JFTU9WRSAgICJyZW1vdmUiCisjZGVmaW5lIFdMQU5fSE9UUExVR19TVEFSVFVQICAic3RhcnR1cCIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1NIVVRET1dOICJzaHV0ZG93biIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1NVU1BFTkQgInN1c3BlbmQiCisjZGVmaW5lIFdMQU5fSE9UUExVR19SRVNVTUUgInJlc3VtZSIKK2ludCBwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGNoYXIgKmFjdGlvbik7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMzNhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwpAQCAtMCwwICsxLDMyOSBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFyZXEuYworKgorKiBSZXF1ZXN0L0luZGljYXRpb24vTWFjTWdtdCBpbnRlcmZhY2UgaGFuZGxpbmcgZnVuY3Rpb25zCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zLCB0eXBlcywgYW5kIG1hY3JvcyB0byBzdXBwb3J0IHRoZQorKiBNTE1FIHJlcXVlc3QgaW50ZXJmYWNlIHRoYXQncyBpbXBsZW1lbnRlZCB2aWEgdGhlIGRldmljZSBpb2N0bHMuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExaW9jdGwuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKy8qIE1heGltdW0gYW1vdW50IG9mIHRpbWUgd2UnbGwgd2FpdCBmb3IgYSByZXF1ZXN0IHRvIGNvbXBsZXRlICovCisjZGVmaW5lIFA4MDIxMVJFUV9NQVhUSU1FCTMqSFoJLyogMyBzZWNvbmRzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZCBwODAyMTFyZXFfaGFuZGxlbXNnKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworc3RhdGljIGludCBwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZywgaW50IGlzZ2V0KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXJlcV9kb3JlcXVlc3QKKyoKKyogSGFuZGxlcyBhbiBNTE1FIHJlcWVzdC9jb25maXJtIG1lc3NhZ2UuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBkZXZpY2Ugc3RydWN0CisqCW1zZ2J1ZgkJQnVmZmVyIGNvbnRhaW5pbmcgYSByZXF1ZXN0IG1lc3NhZ2UKKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBhbiBlcnJubyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglQb3RlbnRpYWxseSBibG9ja3MgdGhlIGNhbGxlciwgc28gaXQncyBhIGdvb2QgaWRlYSB0bworKglub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwODAyMTFyZXFfZG9yZXF1ZXN0KCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICptc2didWYpCit7CisJaW50CQlyZXN1bHQgPSAwOworCXA4MDIxMW1zZ190CSptc2cgPSAocDgwMjExbXNnX3QqKW1zZ2J1ZjsKKworCURCRkVOVEVSOworCisJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBNU0QgaXMgcnVubmluZyAqLworCWlmICgKKwkhKCh3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9IV1BSRVNFTlQgJiYKKwltc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2xueHJlcV9pZnN0YXRlKSB8fAorCXdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX1JVTk5JTkcgfHwKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9GV0xPQUQpICkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBDaGVjayBQZXJtaXNzaW9ucyAqLworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSAmJgorCSAgICAobXNnLT5tc2djb2RlICE9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogb25seSBkb3QxMXJlcV9taWJnZXQgYWxsb3dlZCBmb3Igbm9uLXJvb3QuXG4iLCB3bGFuZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKiBDaGVjayBmb3IgYnVzeSBzdGF0dXMgKi8KKwlpZiAoIHRlc3RfYW5kX3NldF9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEFsbG93IHA4MDIxMSB0byBsb29rIGF0IG1zZyBhbmQgaGFuZGxlIGlmIGRlc2lyZWQuICovCisJLyogU28gZmFyLCBhbGwgcDgwMjExIG1zZ3MgYXJlIGltbWVkaWF0ZSwgbm8gd2FpdHEvdGltZXIgbmVjZXNzYXJ5ICovCisJLyogVGhpcyBtYXkgY2hhbmdlLiAqLworCXA4MDIxMXJlcV9oYW5kbGVtc2cod2xhbmRldiwgbXNnKTsKKworCS8qIFBhc3MgaXQgZG93biB0byB3bGFuZGV2IHZpYSB3bGFuZGV2LT5tbG1lcmVxdWVzdCAqLworCWlmICggd2xhbmRldi0+bWxtZXJlcXVlc3QgIT0gTlVMTCApCisJCXdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIG1zZyk7CisKKwljbGVhcl9iaXQoIDEsICYod2xhbmRldi0+cmVxdWVzdF9wZW5kaW5nKSk7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OwkvKiBpZiByZXN1bHQ9PTAsIG1zZy0+c3RhdHVzIHN0aWxsIG1heSBjb250YWluIGFuIGVyciAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExcmVxX2hhbmRsZW1zZworKgorKiBwODAyMTEgbWVzc2FnZSBoYW5kbGVyLiAgUHJpbWFyaWx5IGxvb2tzIGZvciBtZXNzYWdlcyB0aGF0CisqIGJlbG9uZyB0byBwODAyMTEgYW5kIHRoZW4gZGlzcGF0Y2hlcyB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UuCisqIFRPRE86IHdlIGRvbid0IGRvIGFueXRoaW5nIHlldC4gIE9uY2UgdGhlIGxpbnV4TUlCIGlzIGJldHRlcgorKglkZWZpbmVkIHdlJ2xsIG5lZWQgYSBnZXQvc2V0IGhhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBkZXZpY2Ugc3RydWN0CisqCW1zZwkJbWVzc2FnZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZyAoYW55IHJlc3VsdHMgYXJlIHNldCBpbiB0aGUgc3RhdHVzIGZpZWxkIG9mIHRoZSBtc2cpCisqCisqIENhbGwgY29udGV4dDoKKyoJUHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyggd2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQoreworICAgICAgICBEQkZFTlRFUjsKKworCXN3aXRjaCAobXNnLT5tc2djb2RlKSB7CisKKwljYXNlIERJRG1zZ19sbnhyZXFfaG9zdHdlcDogeworCQlwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdCAqcmVxID0gKHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90KikgbXNnOworCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9ERUNSWVBUfEhPU1RXRVBfRU5DUllQVCk7CisJCWlmIChyZXEtPmRlY3J5cHQuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfREVDUllQVDsKKwkJaWYgKHJlcS0+ZW5jcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9FTkNSWVBUOworCisJCWJyZWFrOworCX0KKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJnZXQ6CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0OiB7CisJCWludCBpc2dldCA9IChtc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2RvdDExcmVxX21pYmdldCk7CisJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAgKm1pYl9tc2cgPSAocDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICopIG1zZzsKKwkJcDgwMjExcmVxX21pYnNldF9taWJnZXQgKHdsYW5kZXYsIG1pYl9tc2csIGlzZ2V0KTsKKwl9CisJZGVmYXVsdDoKKwkJLy8gWFhYIGRvIG5vdGhpbmchCisJCTsKKwl9IC8qIHN3aXRjaCBtc2ctPm1zZ2NvZGUgKi8KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExcmVxX21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZywKKwkJCQkgICBpbnQgaXNnZXQpCit7CisJcDgwMjExaXRlbWRfdCAgICptaWJpdGVtID0gKHA4MDIxMWl0ZW1kX3QgKikgbWliX21zZy0+bWliYXR0cmlidXRlLmRhdGE7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIG1pYml0ZW0tPmRhdGE7CisJVUlOVDggKmtleSA9IG1pYml0ZW0tPmRhdGEgKyBzaXplb2YocDgwMjExcHN0cmRfdCk7CisKKwlEQkZFTlRFUjsKKworCXN3aXRjaCAobWliaXRlbS0+ZGlkKSB7CisJY2FzZSBESURtaWJfZG90MTFzbXRfcDgwMjExVGFibGVfcDgwMjExX2lmc3RhdGU6IHsKKwkJVUlOVDMyICpkYXRhID0gKFVJTlQzMiAqKSBtaWJpdGVtLT5kYXRhOworCQlpZiAoaXNnZXQpCisJCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CisJCQljYXNlIFdMQU5fTVNEX0hXUFJFU0VOVDoKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlOworCQkJCWJyZWFrOworCQkJY2FzZSBXTEFOX01TRF9GV0xPQUQ6CisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkOworCQkJCWJyZWFrOworCQkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgorCQkJCSpkYXRhID0gUDgwMjExRU5VTV9pZnN0YXRlX2VuYWJsZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX2lmc3RhdGVfZW5hYmxlOworCQkJfQorCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UHJlYW1ibGVFbmFibGVkOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpCisJCQkqZGF0YSA9IHdsYW5kZXYtPnNob3J0cHJlYW1ibGU7CisJCWVsc2UKKwkJCXdsYW5kZXYtPnNob3J0cHJlYW1ibGUgPSAqZGF0YTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOiB7CisJCWlmICghaXNnZXQpCisJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAwLCBrZXksIHBzdHItPmxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTogeworCQlpZiAoIWlzZ2V0KQorCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMSwga2V5LCBwc3RyLT5sZW4pOworCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI6IHsKKwkJaWYgKCFpc2dldCkKKwkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDIsIGtleSwgcHN0ci0+bGVuKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOiB7CisJCWlmICghaXNnZXQpCisJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAzLCBrZXksIHBzdHItPmxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRDogeworCQlVSU5UMzIgKmRhdGEgPSAoVUlOVDMyICopIG1pYml0ZW0tPmRhdGE7CisKKwkJaWYgKGlzZ2V0KSB7CisJCQkqZGF0YSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKKwkJCX0gZWxzZSB7CisJCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLKTsKKworCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gKCpkYXRhICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOworCQkJfQorCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZDogeworCQlVSU5UMzIgKmRhdGEgPSAoVUlOVDMyICopIG1pYml0ZW0tPmRhdGE7CisKKwkJaWYgKGlzZ2V0KSB7CisJCQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJCQllbHNlCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJCXdsYW5kZXYtPmhvc3R3ZXAgJj0gfihIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKTsKKwkJCQlpZiAoKmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQ7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpIHsKKwkJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJCQllbHNlCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKTsKKwkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRDsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJLy8gWFhYWCBkbyBub3RoaW5nIQorCQk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFiZGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKQEAgLTAsMCArMSw2OCBAQAorLyogcDgwMjExcmVxLmgKKyoKKyogUmVxdWVzdCBoYW5kbGluZyBmdW5jdGlvbnMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX0xJTlVYX1A4MDIxMVJFUV9ICisjZGVmaW5lIF9MSU5VWF9QODAyMTFSRVFfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm5zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworaW50CXA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UOCAqbXNnYnVmKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFiMGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaApAQCAtMCwwICsxLDY3NSBAQAorLyogcDgwMjExdHlwZXMuaAorKgorKiBNYWNyb3MsIGNvbnN0YW50cywgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcDgwMjExIGRhdGEgdHlwZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCisqIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KKyoKKyogTm90ZXM6CisqICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCisqCisqIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYworKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFUWVBFU19ICisjZGVmaW5lIF9QODAyMTFUWVBFU19ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcDgwMjExIGRhdGEgdHlwZSBjb2RlcyB1c2VkIGZvciBNSUIgaXRlbXMgYW5kIG1lc3NhZ2UgKi8KKy8qIGFyZ3VtZW50cy4gVGhlIHZhcmlvdXMgbWV0YWRhdGEgc3RydWN0dXJlcyBwcm92aWRlIGFkZGl0aW9uYWwgKi8KKy8qIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIHR5cGVzLiAqLworCisjZGVmaW5lIFA4MDIxMV9UWVBFX09DVEVUU1RSCQkxCS8qIHBhc2NhbCBhcnJheSBvZiBieXRlcyAqLworI2RlZmluZSBQODAyMTFfVFlQRV9ESVNQTEFZU1RSCQkyCS8qIHBhc2NhbCBhcnJheSBvZiBieXRlcyBjb250YWluaW5nIGFzY2lpICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0lOVAkJCTQJLyogVUlOVDMyIG1pbiBhbmQgbWF4IGxpbWl0ZWQgYnkgMzIgYml0cyAqLworI2RlZmluZSBQODAyMTFfVFlQRV9FTlVNSU5UCQk1CS8qIFVJTlQzMiBob2xkaW5nIGEgbnVtZXJpYworCQkJCQkJICAgY29kZSB0aGF0IGNhbiBiZSBtYXBwZWQKKwkJCQkJCSAgIHRvIGEgdGV4dHVhbCBuYW1lICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX1VOS0RBVEEJCTYJLyogRGF0YSBpdGVtIGNvbnRhaW5pbmcgYW4KKwkJCQkJCSAgIHVua25vd24gZGF0YSB0eXBlICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0lOVEFSUkFZCQk3CS8qIEFycmF5IG9mIDMyLWJpdCBpbnRlZ2Vycy4gKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfQklUQVJSQVkJCTgJLyogQXJyYXkgb2YgYml0cy4gKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfTUFDQVJSQVkJCTkJLyogQXJyYXkgb2YgTUFDIGFkZHJlc3Nlcy4gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBpbmRleGVzIGludG8gdGhlIE1pYiBDYXRlZ29yeSBMaXN0ICovCisvKiBhbmQgdGhlIE1lc3NhZ2UgQ2F0ZWdvcnkgTGlzdCAqLworCisvKiBNaWIgQ2F0ZWdvcnkgTGlzdCAqLworI2RlZmluZSBQODAyMTFfTUlCX0NBVF9ET1QxMVNNVAkJMQorI2RlZmluZSBQODAyMTFfTUlCX0NBVF9ET1QxMU1BQwkJMgorI2RlZmluZSBQODAyMTFfTUlCX0NBVF9ET1QxMVBIWQkJMworCisjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMVNNVAkJUDgwMjExX01JQl9DQVRfRE9UMTFTTVQKKyNkZWZpbmUgUDgwMjExU0VDX0RPVDExTUFDCQlQODAyMTFfTUlCX0NBVF9ET1QxMU1BQworI2RlZmluZSBQODAyMTFTRUNfRE9UMTFQSFkJCVA4MDIxMV9NSUJfQ0FUX0RPVDExUEhZCisKKy8qIE1lc3NhZ2UgQ2F0ZWdvcnkgTGlzdCAqLworI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMVJFUQkJMQorI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMUlORAkJMgorLyogI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMUNGTQkJMyAoZG9lc24ndCBleGlzdCBhdCB0aGlzIHRpbWUpICovCisKKyNkZWZpbmUgUDgwMjExU0VDX0RPVDExUkVRCQlQODAyMTFfTVNHX0NBVF9ET1QxMVJFUQorI2RlZmluZSBQODAyMTFTRUNfRE9UMTFJTkQJCVA4MDIxMV9NU0dfQ0FUX0RPVDExSU5ECisvKiAjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMUNGTQkJUDgwMjExX01TR19DQVRfRE9UMTFDRk0gIChkb2Vzbid0IGV4aXN0IGF0IHRoaXMgdGltZSAqLworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBESUQgZmllbGQgY29kZXMgdGhhdCByZXByZXNlbnQgYWNjZXNzIHR5cGUgYW5kICovCisvKiBpc190YWJsZSBzdGF0dXMuICovCisKKyNkZWZpbmUgUDgwMjExRElEX0FDQ0VTU19SRUFECQkweDEwMDAwMDAwCisjZGVmaW5lIFA4MDIxMURJRF9BQ0NFU1NfV1JJVEUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUDgwMjExRElEX1dSSVRFT05MWQkJMHgwMDAwMDAwMQorI2RlZmluZSBQODAyMTFESURfUkVBRE9OTFkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUDgwMjExRElEX1JFQURXUklURQkJMHgwMDAwMDAwMworI2RlZmluZSBQODAyMTFESURfSVNUQUJMRV9GQUxTRQkJMAorI2RlZmluZSBQODAyMTFESURfSVNUQUJMRV9UUlVFCQkxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwODAyMTEgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgVGhlIHZhbHVlIHRvIHRleHQgbWFwcGluZ3MgZm9yICovCisvKiAgdGhlc2UgaXMgaW4gcDgwMjExdHlwZXMuYy4gIFRoZXNlIGRlZmluZXMgd2VyZSBnZW5lcmF0ZWQgKi8KKy8qICBmcm9tIHRoZSBtYXBwaW5ncy4gKi8KKworLyogZXJyb3IgY29kZXMgZm9yIGxvb2t1cHMgKi8KKyNkZWZpbmUgUDgwMjExRU5VTV9CQUQJCQkJMHhmZmZmZmZmZlVMCisjZGVmaW5lIFA4MDIxMUVOVU1fQkFEU1RSCQkJIlA4MDIxMUVOVU1fQkFEIgorCisjZGVmaW5lIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UJCQkwCisjZGVmaW5lIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZQkJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUJCTAKKyNkZWZpbmUgUDgwMjExRU5VTV9pZnN0YXRlX2Z3bG9hZAkJMQorI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZW5hYmxlCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fcG93ZXJtZ210X2FjdGl2ZQkJMQorI2RlZmluZSBQODAyMTFFTlVNX3Bvd2VybWdtdF9wb3dlcnNhdmUJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9ic3N0eXBlX2luZGVwZW5kZW50CQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fYnNzdHlwZV9hbnkJCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXkJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9waHl0eXBlX2Zoc3MJCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcGh5dHlwZV9kc3NzCQkJMgorI2RlZmluZSBQODAyMTFFTlVNX3BoeXR5cGVfaXJiYXNlYmFuZAkJMworI2RlZmluZSBQODAyMTFFTlVNX3RlbXB0eXBlX2NvbW1lcmNpYWwJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV90ZW1wdHlwZV9pbmR1c3RyaWFsCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2ZjYwkJMTYKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZG9jCQkzMgorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9ldHNpCQk0OAorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9zcGFpbgkJNDkKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZnJhbmNlCQk1MAorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9ta2sJCTY0CisjZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9lZG9ubHkJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2Nzb25seQkJMgorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfZWRhbmRjcwkJNAorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfY3N3aXRodGltZXIJCTgKKyNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2hyY3NhbmRlZAkJMTYKKyNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfZml4ZWRsaXN0CQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fZGl2ZXJzaXR5X25vdHN1cHBvcnRlZAkyCisjZGVmaW5lIFA4MDIxMUVOVU1fZGl2ZXJzaXR5X2R5bmFtaWMJCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9zY2FudHlwZV9hY3RpdmUJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9zY2FudHlwZV9wYXNzaXZlCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fc2NhbnR5cGVfYm90aAkJMworI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcwkJMQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQJMworI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfdGltZW91dAkJNAorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfdG9vX21hbnlfcmVxCTUKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQJCTYKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2Jzc19hbHJlYWR5CTcKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfYWNjZXNzCTgKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfbWliYXR0cmlidXRlCTkKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfc2V0X3JlYWRvbmx5X21pYgkxMAorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZQkxMQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYgkxMgorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl91bnNwZWNfcmVhc29uCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2F1dGhfbm90X3ZhbGlkCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fZGVhdXRoX2x2X3NzCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2luYWN0aXZpdHkJCTQKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fYXBfb3ZlcmxvYWQJCTUKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fY2xhc3MyM19lcnIJCTYKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fY2xhc3MzX2VycgkJNworI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9kaXNhc19sdl9zcwkJOAorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9hc29jX25vdF9hdXRoCQk5CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWwJCTAKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmUJMQorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9jYXAJCTEwCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3JlYXNvY19ub19hc29jCTExCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2ZhaWxfb3RoZXIJCTEyCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3B0X2FsZwkJMTMKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfYXV0aF9zZXFfZmFpbAkJMTQKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfY2hsbmdfZmFpbAkJMTUKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfYXV0aF90aW1lb3V0CQkxNgorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hcF9mdWxsCQkxNworI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9yYXRlCQkxOAorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9zaG9ydHByZWFtYmxlCTE5CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3BiY2MJCTIwCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX2FnaWxpdHkJCTIxCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vawkJMAorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9pdGVtbmFtZQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9pdGVtZGF0YQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ19pdGVtZGF0YQk0CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW5jb21wbGV0ZV9pdGVtZGF0YQk1CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9tc2dfZGlkCTYKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX21pYl9kaWQJNworI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfY29udl9mdW5jCTgKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19zdHJpbmdfdG9vX2xvbmcJOQorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb3V0X29mX3JhbmdlCTEwCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfc3RyaW5nX3Rvb19zaG9ydAkxMQorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfdmFsaWRfZnVuYwkxMgorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX3Vua25vd24JCTEzCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9kaWQJCTE0CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ19wcmludF9mdW5jCTE1CisKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl91bmtub3duICAgICAgICAwCisjZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fYmVhY29uICAgICAgICAgMQorI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3NpZ25hbCAgICAgICAgIDIKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl90eHJldHJ5ICAgICAgICAzCisjZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fbm90am9pbmVkICAgICAgNAorCisjZGVmaW5lIFA4MDIxMUVOVU1fcDJwcmVhbWJsZV9sb25nICAgICAgICAgICAgICAgMAorI2RlZmluZSBQODAyMTFFTlVNX3AycHJlYW1ibGVfc2hvcnQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUDgwMjExRU5VTV9wMnByZWFtYmxlX21peGVkICAgICAgICAgICAgICAzCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwODAyMTEgbWF4IGxlbmd0aCBjb25zdGFudHMgZm9yIHRoZSBkaWZmZXJlbnQgcGFzY2FsIHN0cmluZ3MuICovCisKKyNkZWZpbmUgTUFYTEVOX1BTVFI2CQkoNikJLyogcGFzY2FsIGFycmF5IG9mIDYgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX1BTVFIxNAkJKDE0KQkvKiBwYXNjYWwgYXJyYXkgb2YgMTQgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX1BTVFIzMgkJKDMyKQkvKiBwYXNjYWwgYXJyYXkgb2YgMzIgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX1BTVFIyNTUJCSgyNTUpCS8qIHBhc2NhbCBhcnJheSBvZiAyNTUgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX01JQkFUVFJJQlVURQkoMzkyKQkvKiBtYXhpbXVtIG1pYmF0dHJpYnV0ZSAqLworCQkJCQkvKiB3aGVyZSB0aGUgc2l6ZSBvZiB0aGUgREFUQSBpdHNlbGYgKi8KKwkJCQkJLyogaXMgYSBESUQtTEVOLURBVEEgdHJpcGxlICovCisJCQkJCS8qIHdpdGggYSBtYXggc2l6ZSBvZiA0KzQrMzg0ICovCisKKyNkZWZpbmUgUDgwMjExX1NFVF9JTlQoaXRlbSwgdmFsdWUpIGRvIHsgXAorCShpdGVtKS5kYXRhICAgPSAodmFsdWUpOyBcCisJKGl0ZW0pLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsgXAorCX0gd2hpbGUoMCkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzdHJpbmcgY29uc3RhbnRzICovCisKKyNkZWZpbmUgTk9UX1NFVAkJCSJOT1RfU0VUIgorI2RlZmluZSBOT1RfU1VQUE9SVEVECQkiTk9UX1NVUFBPUlRFRCIKKyNkZWZpbmUgVU5LTk9XTl9EQVRBCQkiVU5LTk9XTl9EQVRBIgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE1ldGFkYXRhIGZsYWdzICAqLworCisvKiBNU006IERvIHRoZXNlIGJlbG9uZyBpbiBwODAyMTFtZXRhLmg/IEknbSBub3Qgc3VyZS4gKi8KKworI2RlZmluZSBJU1JFUVVJUkVECQkoMHg4MDAwMDAwMFVMKQorI2RlZmluZSBJU1JFUVVFU1QJCSgweDQwMDAwMDAwVUwpCisjZGVmaW5lIElTQ09ORklSTQkJKDB4MjAwMDAwMDBVTCkKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgJ2ZsYWdzJyBmaWVsZCBpbiAgICovCisvKiAgdGhlIG1ldGFkYXRhLiAgVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSBtZXRhZGF0YSBpcyBmb3IgICAgICAgKi8KKy8qICBjb21tYW5kIGFyZ3VtZW50cyB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgaXRlbSBpcyByZXF1aXJlZCwgYW5kICAqLworLyogIHdoZXRoZXIgdGhlIG1ldGFkYXRhIGl0ZW0gaXMgZm9yIGEgcmVxdWVzdCBjb21tYW5kLCBjb25maXJtICAgICAgICovCisvKiAgY29tbWFuZCBvciBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTVNNOiBEbyB0aGVzZSBiZWxvbmcgaW4gcDgwMjExbWV0YS5oPyAgSSdtIG5vdCBzdXJlICovCisKKyNkZWZpbmUgUDgwMjExSVRFTV9TRVRGTEFHUyhxLCByLCBjKQkoIHEgfCByIHwgYyApCisKKyNkZWZpbmUgUDgwMjExSVRFTV9JU1JFUVVJUkVEKGZsYWdzKQkoKChVSU5UMzIpKGZsYWdzICYgSVNSRVFVSVJFRCkpID4+IDMxICkKKyNkZWZpbmUgUDgwMjExSVRFTV9JU1JFUVVFU1QoZmxhZ3MpCSgoKFVJTlQzMikoZmxhZ3MgJiBJU1JFUVVFU1QpKSA+PiAzMCApCisjZGVmaW5lIFA4MDIxMUlURU1fSVNDT05GSVJNKGZsYWdzKQkoKChVSU5UMzIpKGZsYWdzICYgSVNDT05GSVJNKSkgPj4gMjkgKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBtYWNybyBjcmVhdGVzIGEgbmFtZSBmb3IgYW4gZW51bSAqLworCisjZGVmaW5lIE1LRU5VTU5BTUUobmFtZSkgcDgwMjExZW51bV8gIyMgbmFtZQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIG1hY3JvcyBhcmUgdXNlZCB0byBjb25zdHJ1Y3QgYW5kCisqIGRlY29uc3RydWN0IHRoZSBEYXRhIElEIGNvZGVzLiAgVGhlIGNvZGluZyBpcyBhcyBmb2xsb3dzOgorKgorKiAgICAgLi4ucnd0bm5ubm5ubm5paWlpaWlnZ2dnZ2dzc3Nzc3MgICAgICBzIC0gU2VjdGlvbgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnIC0gR3JvdXAKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAtIEl0ZW0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiAtIEluZGV4CisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgLSBUYWJsZSBmbGFnCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgLSBXcml0ZSBmbGFnCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgLSBSZWFkIGZsYWcKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAtIFVudXNlZAorKi8KKworI2RlZmluZSBQODAyMTFESURfSU5WQUxJRAkJMHhmZmZmZmZmZlVMCisjZGVmaW5lIFA4MDIxMURJRF9WQUxJRAkJCTB4MDAwMDAwMDBVTAorCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfU0VDVElPTgkJKDApCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfR1JPVVAJCSg2KQorI2RlZmluZSBQODAyMTFESURfTFNCX0lURU0JCSgxMikKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9JTkRFWAkJKDE4KQorI2RlZmluZSBQODAyMTFESURfTFNCX0lTVEFCTEUJCSgyNikKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9BQ0NFU1MgCQkoMjcpCisKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfU0VDVElPTgkJKDB4MDAwMDAwM2ZVTCkKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfR1JPVVAJCSgweDAwMDAwMDNmVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0lURU0JCSgweDAwMDAwMDNmVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0lOREVYCQkoMHgwMDAwMDBmZlVMKQorI2RlZmluZSBQODAyMTFESURfTUFTS19JU1RBQkxFCQkoMHgwMDAwMDAwMVVMKQorI2RlZmluZSBQODAyMTFESURfTUFTS19BQ0NFU1MgCQkoMHgwMDAwMDAwM1VMKQorCisKKyNkZWZpbmUgUDgwMjExRElEX01LKGEsbSxsKQkoKCgoVUlOVDMyKShhKSkgJiAobSkpIDw8IChsKSkKKworI2RlZmluZSBQODAyMTFESURfTUtTRUNUSU9OKGEpCVA4MDIxMURJRF9NSyhhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX1NFQ1RJT04sIFwKKwkJCQkJUDgwMjExRElEX0xTQl9TRUNUSU9OICkKKyNkZWZpbmUgUDgwMjExRElEX01LR1JPVVAoYSkJUDgwMjExRElEX01LKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfR1JPVVAsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9HUk9VUCApCisjZGVmaW5lIFA4MDIxMURJRF9NS0lURU0oYSkJUDgwMjExRElEX01LKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfSVRFTSwgXAorCQkJCQlQODAyMTFESURfTFNCX0lURU0gKQorI2RlZmluZSBQODAyMTFESURfTUtJTkRFWChhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JTkRFWCwgXAorCQkJCQlQODAyMTFESURfTFNCX0lOREVYICkKKyNkZWZpbmUgUDgwMjExRElEX01LSVNUQUJMRShhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JU1RBQkxFLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSVNUQUJMRSApCisKKworI2RlZmluZSBQODAyMTFESURfTUtJRChzLGcsaSxuLHQsYSkJKFA4MDIxMURJRF9NS1NFQ1RJT04ocykgfCBcCisJCQkJCQlQODAyMTFESURfTUtHUk9VUChnKSB8IFwKKwkJCQkgCQlQODAyMTFESURfTUtJVEVNKGkpIHwgXAorCQkJCSAJCVA4MDIxMURJRF9NS0lOREVYKG4pIHwgXAorCQkJCQkJUDgwMjExRElEX01LSVNUQUJMRSh0KSB8IFwKKwkJCQkJCShhKSApCisKKworI2RlZmluZSBQODAyMTFESURfR0VUKGEsbSxsKQkoKCgoVUlOVDMyKShhKSkgPj4gKGwpKSAmIChtKSkKKworI2RlZmluZSBQODAyMTFESURfU0VDVElPTihhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfU0VDVElPTiwgXAorCQkJCQlQODAyMTFESURfTFNCX1NFQ1RJT04pCisjZGVmaW5lIFA4MDIxMURJRF9HUk9VUChhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfR1JPVVAsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9HUk9VUCkKKyNkZWZpbmUgUDgwMjExRElEX0lURU0oYSkJUDgwMjExRElEX0dFVChhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lURU0sIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JVEVNKQorI2RlZmluZSBQODAyMTFESURfSU5ERVgoYSkJUDgwMjExRElEX0dFVChhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lOREVYLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSU5ERVgpCisjZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JU1RBQkxFLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSVNUQUJMRSkKKyNkZWZpbmUgUDgwMjExRElEX0FDQ0VTUyhhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfQUNDRVNTLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfQUNDRVNTKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIGZvciB0aGUgcmVwcmVzZW5hdGlvbiAqLworLyogIG9mIEVOVU1JTlQgdHlwZSBtZXRhZGF0YS4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bXBhaXIKK3sKKwlVSU5UMzIJCQl2YWw7CisJY2hhcgkJCSpuYW1lOworfSBwODAyMTFlbnVtcGFpcl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFlbnVtCit7CisJSU5UCQkJbml0ZW1zOworCXA4MDIxMWVudW1wYWlyX3QJKmxpc3Q7Cit9IHA4MDIxMWVudW1fdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIHRvIHN0b3JlIGRhdGEgaXRlbXMgaW4gKi8KKy8qICBtZXNzYWdlcy4gKi8KKworLyogVGVtcGxhdGUgcGFzY2FsIHN0cmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cgoreworCVVJTlQ4CQlsZW47Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cmQKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyZF90OworCisvKiBNYXhpbXVtIHBhc2NhbCBzdHJpbmcgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIyNTUKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9QU1RSMjU1XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjI1NV90OworCisvKiBwYXNjYWwgc3RyaW5nIGZvciBtYWNhZGRyZXNzIGFuZCBic3NpZCAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjYKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9QU1RSNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHI2X3Q7CisKKy8qIHBhc2NhbCBzdHJpbmcgZm9yIGNoYW5uZWwgbGlzdCAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjE0Cit7CisJVUlOVDgJCWxlbjsKKwlVSU5UOAkJZGF0YVtNQVhMRU5fUFNUUjE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjE0X3Q7CisKKy8qIHBhc2NhbCBzdHJpbmcgZm9yIHNzaWQgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIzMgoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbTUFYTEVOX1BTVFIzMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHIzMl90OworCisvKiBNQUMgYWRkcmVzcyBhcnJheSAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbWFjYXJyYXkKK3sKKwlVSU5UMzIJCWNudDsKKwlVSU5UOAkJZGF0YVsxXVtNQVhMRU5fUFNUUjZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtYWNhcnJheV90OworCisvKiBwcm90b3R5cGUgdGVtcGxhdGUgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW0KK3sKKwlVSU5UMzIJCWRpZDsKKwlVSU5UMTYJCXN0YXR1czsKKwlVSU5UMTYJCWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV90OworCisvKiBwcm90b3R5cGUgdGVtcGxhdGUgdy8gZGF0YSBpdGVtICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtZAoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtZF90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgSU5ULCBCT1VOREVESU5ULCBFTlVNSU5UICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3VpbnQzMgoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQzMgkJZGF0YTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91aW50MzJfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHI2Cit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJcDgwMjExcHN0cjZfdAlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHI2X3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMTQKK3sKKwlVSU5UMzIJCQlkaWQ7CisJVUlOVDE2CQkJc3RhdHVzOworCVVJTlQxNgkJCWxlbjsKKwlwODAyMTFwc3RyMTRfdAkJZGF0YTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMTRfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIzMgoreworCVVJTlQzMgkJCWRpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJVUlOVDE2CQkJbGVuOworCXA4MDIxMXBzdHIzMl90CQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIzMl90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjI1NQoreworCVVJTlQzMgkJCWRpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJVUlOVDE2CQkJbGVuOworCXA4MDIxMXBzdHIyNTVfdAkJZGF0YTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMjU1X3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgMzkyLCBuYW1lbHkgbWliIGl0ZW1zICovCit0eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bmszOTIKK3sKKwlVSU5UMzIJCWRpZDsKKwlVSU5UMTYJCXN0YXR1czsKKwlVSU5UMTYJCWxlbjsKKwlVSU5UOAkJZGF0YVtNQVhMRU5fTUlCQVRUUklCVVRFXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmszOTJfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyAxMDI1LCBuYW1lbHkgcDIgcGRhcyAqLwordHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rMTAyNAoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhWzEwMjRdOworfSAgX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmsxMDI0X3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgNDA5NiwgbmFtZWx5IHAyIGRvd25sb2FkIGNodW5rcyAqLwordHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rNDA5NgoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhWzQwOTZdOworfSAgX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bms0MDk2X3Q7CisKK3N0cnVjdCBjYXRsaXN0aXRlbTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgYWxsIG9mIHRoZSAqLworLyogIG1ldGFkYXRhIGl0ZW1zLiAgU29tZSBjb21wb25lbnRzIG1heSBjaG9vc2UgdG8gdXNlIG1vcmUsICovCisvKiAgbGVzcyBvciBkaWZmZXJlbnQgbWV0YWRhdGEgaXRlbXMuICovCisKK3R5cGVkZWYgdm9pZCAoKnA4MDIxMV90b3RleHRfdCkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqLCBVSU5UMzIgZGlkLCBVSU5UOCogaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1Zik7Cit0eXBlZGVmIHZvaWQgKCpwODAyMTFfZnJvbXRleHRfdCkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqLCBVSU5UMzIgZGlkLCBVSU5UOCogaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1Zik7Cit0eXBlZGVmIFVJTlQzMiAoKnA4MDIxMV92YWxpZF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIFVJTlQzMiBkaWQsIFVJTlQ4KiBpdGVtYnVmKTsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRW51bWVyYXRpb24gTGlzdHMgKi8KKy8qICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgZXh0ZXJuYWwgZGVjbGFyYXRpb25zICovCisvKiAgZm9yIGFsbCBlbnVtZXJhdGlvbnMgICovCisKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRSh0cnV0aCk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUoaWZzdGF0ZSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUocG93ZXJtZ210KTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShic3N0eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShhdXRoYWxnKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwaHl0eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRSh0ZW1wdHlwZSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUocmVnZG9tYWluKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShjY2Ftb2RlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShkaXZlcnNpdHkpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHNjYW50eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShyZXN1bHRjb2RlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShyZWFzb24pOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHN0YXR1cyk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUobXNnY29kZSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUobXNnaXRlbV9zdGF0dXMpOworCitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUobG54cm9hbV9yZWFzb24pOworCitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUocDJwcmVhbWJsZSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgKi8KKy8qICBwODAyMTFlbnVtX3QgdHlwZS4gKi8KKworVUlOVDMyIHA4MDIxMWVudW1fdGV4dDJpbnQocDgwMjExZW51bV90ICplcCwgY2hhciAqdGV4dCk7CitVSU5UMzIgcDgwMjExZW51bV9pbnQydGV4dChwODAyMTFlbnVtX3QgKmVwLCBVSU5UMzIgdmFsLCBjaGFyICp0ZXh0KTsKK3ZvaWQgcDgwMjExX2Vycm9yMnRleHQoaW50IGVycl9jb2RlLCBjaGFyICplcnJfc3RyKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgKi8KKy8qICBwODAyMTFpdGVtX3QgYW5kIHA4MDIxMW1ldGFfdCB0eXBlcy4gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIHZhbGlkYXRpb24gYW5kICAgICovCisvKiB0ZXh0IHRvIGJpbmFyeSBjb252ZXJzaW9ucyBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgZm9yIGludGVyZmFjZSAqLworLyogYW5kIE1JQiBkYXRhIGl0ZW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0gRElTUExBWVNUUiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHN0ciA9PT4gY3N0ciAqLwordm9pZCBwODAyMTFfdG90ZXh0X2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGNzdHIgPT0+IHBzdHIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGEgZGlzcGxheXN0ciBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9kaXNwbGF5c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIE9DVEVUU1RSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHBzdHIgPT0+ICJ4eDp4eDouLi4uIiAqLwordm9pZCBwODAyMTFfdG90ZXh0X29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiAieHg6eHg6Li4uLiIgPT0+IHBzdHIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhbiBvY3RldHN0ciBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9vY3RldHN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYgKTsKKworLyotLSBJTlQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVSU5UMzIgPT0+ICVkICovCit2b2lkIHA4MDIxMV90b3RleHRfaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiAlZCA9PT4gVUlOVDMyICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGludCdzIGJpbmFyeSB2YWx1ZSAoYWx3YXlzIHN1Y2Nlc3NmdWwpICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIEVOVU1JTlQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMiA9PT4gPHZhbHVlbmFtZT4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiA8dmFsdWVuYW1lPiA9PT4gVUlOVDMyICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhbiBlbnVtJ3MgYmluYXJ5IHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZW51bWludCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYgKTsKKworLyotLSBJTlRBUlJBWSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVSU5UMzJbXSA9PiAlZCwlZCwlZCwuLi4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9pbnRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogJWQsJWQsJWQsLi4uID09PiBVSU5UMzJbXSAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfaW50YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGludGVnZXIgYXJyYXkncyB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX2ludGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIEJJVEFSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMiA9PT4gJWQsJWQsJWQsLi4uICovCit2b2lkIHA4MDIxMV90b3RleHRfYml0YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qICVkLCVkLCVkLC4uLiA9PT4gVUlOVDMyICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9iaXRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBiaXQgYXJyYXkncyB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX2JpdGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIE1BQ0FSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9tYWNhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKwordm9pZCBwODAyMTFfZnJvbXRleHRfbWFjYXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGEgTUFDIGFkZHJlc3MgYXJyYXkncyB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX21hY2FycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIE1JQkFUVFJJVUJURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogPG1pYnZhbHVlPiA9PT4gPHRleHR1YWwgcmVwcmVzZW50YXRpb24gaWRlbnRpZmllZCBpbiBNSUIgbWV0YWRhdGE+ICovCit2b2lkIHA4MDIxMV90b3RleHRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwordm9pZCBwODAyMTFfdG90ZXh0X3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworCisvKiA8dGV4dHVhbCByZXByZXNlbnRhdGlvbiBpZGVudGlmaWVkIGluIE1JQiBtZXRhZGF0YT4gPT0+IDxtaWJ2YWx1ZT4gKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2dldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKK3ZvaWQgcDgwMjExX2Zyb210ZXh0X3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBtaWJpdGVtJ3MgYmluYXJ5IHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYgKTsKKworI2VuZGlmIC8qIF9QODAyMTFUWVBFU19IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdlcC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhNTBjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdlcC5jCkBAIC0wLDAgKzEsMzE2IEBACisvKiBzcmMvcDgwMjExL3A4MDIxMXdlcC5jCisqCisqIFdFUCBlbmNvZGUvZGVjb2RlIGZvciBQODAyMTEuCisqCisqIENvcHlyaWdodCAoQykgMjAwMiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8vICNkZWZpbmUgV0VQX0RFQlVHCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisjZGVmaW5lIFNTV0FQKGEsYikge1VJTlQ4IHRtcCA9IHNbYV07IHNbYV0gPSBzW2JdOyBzW2JdID0gdG1wO30KKyNkZWZpbmUgV0VQX0tFWSh4KSAgICAgICAoKCh4KSAmIDB4QzApID4+IDYpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKK3N0YXRpYyBjb25zdCBVSU5UMzIgd2VwX2NyYzMyX3RhYmxlWzI1Nl0gPSB7CisgICAgICAgIDB4MDAwMDAwMDBMLCAweDc3MDczMDk2TCwgMHhlZTBlNjEyY0wsIDB4OTkwOTUxYmFMLCAweDA3NmRjNDE5TCwKKyAgICAgICAgMHg3MDZhZjQ4ZkwsIDB4ZTk2M2E1MzVMLCAweDllNjQ5NWEzTCwgMHgwZWRiODgzMkwsIDB4NzlkY2I4YTRMLAorICAgICAgICAweGUwZDVlOTFlTCwgMHg5N2QyZDk4OEwsIDB4MDliNjRjMmJMLCAweDdlYjE3Y2JkTCwgMHhlN2I4MmQwN0wsCisgICAgICAgIDB4OTBiZjFkOTFMLCAweDFkYjcxMDY0TCwgMHg2YWIwMjBmMkwsIDB4ZjNiOTcxNDhMLCAweDg0YmU0MWRlTCwKKyAgICAgICAgMHgxYWRhZDQ3ZEwsIDB4NmRkZGU0ZWJMLCAweGY0ZDRiNTUxTCwgMHg4M2QzODVjN0wsIDB4MTM2Yzk4NTZMLAorICAgICAgICAweDY0NmJhOGMwTCwgMHhmZDYyZjk3YUwsIDB4OGE2NWM5ZWNMLCAweDE0MDE1YzRmTCwgMHg2MzA2NmNkOUwsCisgICAgICAgIDB4ZmEwZjNkNjNMLCAweDhkMDgwZGY1TCwgMHgzYjZlMjBjOEwsIDB4NGM2OTEwNWVMLCAweGQ1NjA0MWU0TCwKKyAgICAgICAgMHhhMjY3NzE3MkwsIDB4M2MwM2U0ZDFMLCAweDRiMDRkNDQ3TCwgMHhkMjBkODVmZEwsIDB4YTUwYWI1NmJMLAorICAgICAgICAweDM1YjVhOGZhTCwgMHg0MmIyOTg2Y0wsIDB4ZGJiYmM5ZDZMLCAweGFjYmNmOTQwTCwgMHgzMmQ4NmNlM0wsCisgICAgICAgIDB4NDVkZjVjNzVMLCAweGRjZDYwZGNmTCwgMHhhYmQxM2Q1OUwsIDB4MjZkOTMwYWNMLCAweDUxZGUwMDNhTCwKKyAgICAgICAgMHhjOGQ3NTE4MEwsIDB4YmZkMDYxMTZMLCAweDIxYjRmNGI1TCwgMHg1NmIzYzQyM0wsIDB4Y2ZiYTk1OTlMLAorICAgICAgICAweGI4YmRhNTBmTCwgMHgyODAyYjg5ZUwsIDB4NWYwNTg4MDhMLCAweGM2MGNkOWIyTCwgMHhiMTBiZTkyNEwsCisgICAgICAgIDB4MmY2ZjdjODdMLCAweDU4Njg0YzExTCwgMHhjMTYxMWRhYkwsIDB4YjY2NjJkM2RMLCAweDc2ZGM0MTkwTCwKKyAgICAgICAgMHgwMWRiNzEwNkwsIDB4OThkMjIwYmNMLCAweGVmZDUxMDJhTCwgMHg3MWIxODU4OUwsIDB4MDZiNmI1MWZMLAorICAgICAgICAweDlmYmZlNGE1TCwgMHhlOGI4ZDQzM0wsIDB4NzgwN2M5YTJMLCAweDBmMDBmOTM0TCwgMHg5NjA5YTg4ZUwsCisgICAgICAgIDB4ZTEwZTk4MThMLCAweDdmNmEwZGJiTCwgMHgwODZkM2QyZEwsIDB4OTE2NDZjOTdMLCAweGU2NjM1YzAxTCwKKyAgICAgICAgMHg2YjZiNTFmNEwsIDB4MWM2YzYxNjJMLCAweDg1NjUzMGQ4TCwgMHhmMjYyMDA0ZUwsIDB4NmMwNjk1ZWRMLAorICAgICAgICAweDFiMDFhNTdiTCwgMHg4MjA4ZjRjMUwsIDB4ZjUwZmM0NTdMLCAweDY1YjBkOWM2TCwgMHgxMmI3ZTk1MEwsCisgICAgICAgIDB4OGJiZWI4ZWFMLCAweGZjYjk4ODdjTCwgMHg2MmRkMWRkZkwsIDB4MTVkYTJkNDlMLCAweDhjZDM3Y2YzTCwKKyAgICAgICAgMHhmYmQ0NGM2NUwsIDB4NGRiMjYxNThMLCAweDNhYjU1MWNlTCwgMHhhM2JjMDA3NEwsIDB4ZDRiYjMwZTJMLAorICAgICAgICAweDRhZGZhNTQxTCwgMHgzZGQ4OTVkN0wsIDB4YTRkMWM0NmRMLCAweGQzZDZmNGZiTCwgMHg0MzY5ZTk2YUwsCisgICAgICAgIDB4MzQ2ZWQ5ZmNMLCAweGFkNjc4ODQ2TCwgMHhkYTYwYjhkMEwsIDB4NDQwNDJkNzNMLCAweDMzMDMxZGU1TCwKKyAgICAgICAgMHhhYTBhNGM1ZkwsIDB4ZGQwZDdjYzlMLCAweDUwMDU3MTNjTCwgMHgyNzAyNDFhYUwsIDB4YmUwYjEwMTBMLAorICAgICAgICAweGM5MGMyMDg2TCwgMHg1NzY4YjUyNUwsIDB4MjA2Zjg1YjNMLCAweGI5NjZkNDA5TCwgMHhjZTYxZTQ5ZkwsCisgICAgICAgIDB4NWVkZWY5MGVMLCAweDI5ZDljOTk4TCwgMHhiMGQwOTgyMkwsIDB4YzdkN2E4YjRMLCAweDU5YjMzZDE3TCwKKyAgICAgICAgMHgyZWI0MGQ4MUwsIDB4YjdiZDVjM2JMLCAweGMwYmE2Y2FkTCwgMHhlZGI4ODMyMEwsIDB4OWFiZmIzYjZMLAorICAgICAgICAweDAzYjZlMjBjTCwgMHg3NGIxZDI5YUwsIDB4ZWFkNTQ3MzlMLCAweDlkZDI3N2FmTCwgMHgwNGRiMjYxNUwsCisgICAgICAgIDB4NzNkYzE2ODNMLCAweGUzNjMwYjEyTCwgMHg5NDY0M2I4NEwsIDB4MGQ2ZDZhM2VMLCAweDdhNmE1YWE4TCwKKyAgICAgICAgMHhlNDBlY2YwYkwsIDB4OTMwOWZmOWRMLCAweDBhMDBhZTI3TCwgMHg3ZDA3OWViMUwsIDB4ZjAwZjkzNDRMLAorICAgICAgICAweDg3MDhhM2QyTCwgMHgxZTAxZjI2OEwsIDB4NjkwNmMyZmVMLCAweGY3NjI1NzVkTCwgMHg4MDY1NjdjYkwsCisgICAgICAgIDB4MTk2YzM2NzFMLCAweDZlNmIwNmU3TCwgMHhmZWQ0MWI3NkwsIDB4ODlkMzJiZTBMLCAweDEwZGE3YTVhTCwKKyAgICAgICAgMHg2N2RkNGFjY0wsIDB4ZjliOWRmNmZMLCAweDhlYmVlZmY5TCwgMHgxN2I3YmU0M0wsIDB4NjBiMDhlZDVMLAorICAgICAgICAweGQ2ZDZhM2U4TCwgMHhhMWQxOTM3ZUwsIDB4MzhkOGMyYzRMLCAweDRmZGZmMjUyTCwgMHhkMWJiNjdmMUwsCisgICAgICAgIDB4YTZiYzU3NjdMLCAweDNmYjUwNmRkTCwgMHg0OGIyMzY0YkwsIDB4ZDgwZDJiZGFMLCAweGFmMGExYjRjTCwKKyAgICAgICAgMHgzNjAzNGFmNkwsIDB4NDEwNDdhNjBMLCAweGRmNjBlZmMzTCwgMHhhODY3ZGY1NUwsIDB4MzE2ZThlZWZMLAorICAgICAgICAweDQ2NjliZTc5TCwgMHhjYjYxYjM4Y0wsIDB4YmM2NjgzMWFMLCAweDI1NmZkMmEwTCwgMHg1MjY4ZTIzNkwsCisgICAgICAgIDB4Y2MwYzc3OTVMLCAweGJiMGI0NzAzTCwgMHgyMjAyMTZiOUwsIDB4NTUwNTI2MmZMLCAweGM1YmEzYmJlTCwKKyAgICAgICAgMHhiMmJkMGIyOEwsIDB4MmJiNDVhOTJMLCAweDVjYjM2YTA0TCwgMHhjMmQ3ZmZhN0wsIDB4YjVkMGNmMzFMLAorICAgICAgICAweDJjZDk5ZThiTCwgMHg1YmRlYWUxZEwsIDB4OWI2NGMyYjBMLCAweGVjNjNmMjI2TCwgMHg3NTZhYTM5Y0wsCisgICAgICAgIDB4MDI2ZDkzMGFMLCAweDljMDkwNmE5TCwgMHhlYjBlMzYzZkwsIDB4NzIwNzY3ODVMLCAweDA1MDA1NzEzTCwKKyAgICAgICAgMHg5NWJmNGE4MkwsIDB4ZTJiODdhMTRMLCAweDdiYjEyYmFlTCwgMHgwY2I2MWIzOEwsIDB4OTJkMjhlOWJMLAorICAgICAgICAweGU1ZDViZTBkTCwgMHg3Y2RjZWZiN0wsIDB4MGJkYmRmMjFMLCAweDg2ZDNkMmQ0TCwgMHhmMWQ0ZTI0MkwsCisgICAgICAgIDB4NjhkZGIzZjhMLCAweDFmZGE4MzZlTCwgMHg4MWJlMTZjZEwsIDB4ZjZiOTI2NWJMLCAweDZmYjA3N2UxTCwKKyAgICAgICAgMHgxOGI3NDc3N0wsIDB4ODgwODVhZTZMLCAweGZmMGY2YTcwTCwgMHg2NjA2M2JjYUwsIDB4MTEwMTBiNWNMLAorICAgICAgICAweDhmNjU5ZWZmTCwgMHhmODYyYWU2OUwsIDB4NjE2YmZmZDNMLCAweDE2NmNjZjQ1TCwgMHhhMDBhZTI3OEwsCisgICAgICAgIDB4ZDcwZGQyZWVMLCAweDRlMDQ4MzU0TCwgMHgzOTAzYjNjMkwsIDB4YTc2NzI2NjFMLCAweGQwNjAxNmY3TCwKKyAgICAgICAgMHg0OTY5NDc0ZEwsIDB4M2U2ZTc3ZGJMLCAweGFlZDE2YTRhTCwgMHhkOWQ2NWFkY0wsIDB4NDBkZjBiNjZMLAorICAgICAgICAweDM3ZDgzYmYwTCwgMHhhOWJjYWU1M0wsIDB4ZGViYjllYzVMLCAweDQ3YjJjZjdmTCwgMHgzMGI1ZmZlOUwsCisgICAgICAgIDB4YmRiZGYyMWNMLCAweGNhYmFjMjhhTCwgMHg1M2IzOTMzMEwsIDB4MjRiNGEzYTZMLCAweGJhZDAzNjA1TCwKKyAgICAgICAgMHhjZGQ3MDY5M0wsIDB4NTRkZTU3MjlMLCAweDIzZDk2N2JmTCwgMHhiMzY2N2EyZUwsIDB4YzQ2MTRhYjhMLAorICAgICAgICAweDVkNjgxYjAyTCwgMHgyYTZmMmI5NEwsIDB4YjQwYmJlMzdMLCAweGMzMGM4ZWExTCwgMHg1YTA1ZGYxYkwsCisgICAgICAgIDB4MmQwMmVmOGRMCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKiBrZXlsZW4gaW4gYnl0ZXMhICovCisKK2ludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBrZXludW0sIFVJTlQ4KiBrZXksIGludCBrZXlsZW4pCit7CisJaWYgKGtleWxlbiA8IDApICByZXR1cm4gLTE7CisJaWYgKGtleWxlbiA+PSBNQVhfS0VZTEVOKSByZXR1cm4gLTE7CisJaWYgKGtleSA9PSBOVUxMKSByZXR1cm4gLTE7CisJaWYgKGtleW51bSA8IDApICByZXR1cm4gLTE7CisJaWYgKGtleW51bSA+PSBOVU1fV0VQS0VZUykgcmV0dXJuIC0xOworCisKKyNpZmRlZiBXRVBfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiV0VQIGtleSAlZCBsZW4gJWQgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIGtleW51bSwga2V5bGVuLCBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlbM10sIGtleVs0XSwga2V5WzVdLCBrZXlbNl0sIGtleVs3XSk7CisjZW5kaWYKKworCXdsYW5kZXYtPndlcF9rZXlsZW5zW2tleW51bV0gPSBrZXlsZW47CisJbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2tleW51bV0sIGtleSwga2V5bGVuKTsKKworCXJldHVybiAwOworfQorCisvKgorICA0LWJ5dGUgSVYgYXQgc3RhcnQgb2YgYnVmZmVyLCA0LWJ5dGUgSUNWIGF0IGVuZCBvZiBidWZmZXIuCisgIGlmIHN1Y2Nlc3NmdWwsIGJ1ZiBzdGFydCBpcyBwYXlsb2FkIGJlZ2luLCBsZW5ndGggLT0gODsKKyAqLworaW50IHdlcF9kZWNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDggKmJ1ZiwgVUlOVDMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwgVUlOVDggKml2LCBVSU5UOCAqaWN2KQoreworCVVJTlQzMiBpLCBqLCBrLCBjcmMsIGtleWxlbjsKKwlVSU5UOCBzWzI1Nl0sIGtleVs2NF0sIGNfY3JjWzRdOworCVVJTlQ4IGtleWlkeDsKKworCS8qIE5lZWRzIHRvIGJlIGF0IGxlYXN0IDggYnl0ZXMgb2YgcGF5bG9hZCAqLworCWlmIChsZW4gPD0gMCkgcmV0dXJuIC0xOworCisJLyogaW5pdGlhbGl6ZSB0aGUgZmlyc3QgYnl0ZXMgb2YgdGhlIGtleSBmcm9tIHRoZSBJViAqLworCWtleVswXSA9IGl2WzBdOworCWtleVsxXSA9IGl2WzFdOworCWtleVsyXSA9IGl2WzJdOworCWtleWlkeCA9IFdFUF9LRVkoaXZbM10pOworCisJaWYgKGtleV9vdmVycmlkZSA+PSAwKQorCQlrZXlpZHggPSBrZXlfb3ZlcnJpZGU7CisKKwlpZiAoa2V5aWR4ID49IE5VTV9XRVBLRVlTKSByZXR1cm4gLTI7CisKKwlrZXlsZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1trZXlpZHhdOworCisJaWYgKGtleWxlbiA9PSAwKSByZXR1cm4gLTM7CisKKwkvKiBjb3B5IHRoZSByZXN0IG9mIHRoZSBrZXkgb3ZlciBmcm9tIHRoZSBkZXNpZ25hdGVkIGtleSAqLworCW1lbWNweShrZXkrMywgd2xhbmRldi0+d2VwX2tleXNba2V5aWR4XSwga2V5bGVuKTsKKworCWtleWxlbis9MzsgIC8qIGFkZCBpbiBJViBieXRlcyAqLworCisjaWZkZWYgV0VQX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIkQgJWQ6ICUwMnggJTAyeCAlMDJ4ICglZCAlZCkgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBsZW4sIGtleVswXSwga2V5WzFdLCBrZXlbMl0sIGtleWlkeCwga2V5bGVuLCBrZXlbM10sIGtleVs0XSwga2V5WzVdLCBrZXlbNl0sIGtleVs3XSk7CisjZW5kaWYKKworCS8qIHNldCB1cCB0aGUgUkM0IHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorCQlzW2ldID0gaTsKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJaiA9IChqICsgc1tpXSArIGtleVtpICUga2V5bGVuXSkgJiAweGZmOworCQlTU1dBUChpLGopOworCX0KKworCS8qIEFwcGx5IHRoZSBSQzQgdG8gdGhlIGRhdGEsIHVwZGF0ZSB0aGUgQ1JDMzIgKi8KKwljcmMgPSB+MDsKKwlpID0gaiA9IDA7CisJZm9yIChrID0gMDsgayA8IGxlbjsgaysrKSB7CisJCWkgPSAoaSsxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWJ1ZltrXSBePSBzWyhzW2ldICsgc1tqXSkgJiAweGZmXTsKKwkJY3JjID0gd2VwX2NyYzMyX3RhYmxlWyhjcmMgXiBidWZba10pICYgMHhmZl0gXiAoY3JjID4+IDgpOworCX0KKwljcmMgPSB+Y3JjOworCisJLyogbm93IGxldCdzIGNoZWNrIHRoZSBjcmMgKi8KKwljX2NyY1swXSA9IGNyYzsKKwljX2NyY1sxXSA9IGNyYyA+PiA4OworCWNfY3JjWzJdID0gY3JjID4+IDE2OworCWNfY3JjWzNdID0gY3JjID4+IDI0OworCisJZm9yIChrID0gMDsgayA8IDQ7IGsrKykgeworCQlpID0gKGkgKyAxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWlmICgoY19jcmNba10gXiBzWyhzW2ldICsgc1tqXSkgJiAweGZmXSkgIT0gaWN2W2tdKQorCQkJcmV0dXJuIC0oNCB8IChrIDw8IDQpKSA7IC8qIElDViBtaXNtYXRjaCAqLworCX0KKworCXJldHVybiAwOworfQorCisvKiBlbmNyeXB0cyBpbi1wbGFjZS4gKi8KK2ludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICpidWYsIFVJTlQ4ICpkc3QsIFVJTlQzMiBsZW4sIGludCBrZXludW0sIFVJTlQ4ICppdiwgVUlOVDggKmljdikKK3sKKwlVSU5UMzIgaSwgaiwgaywgY3JjLCBrZXlsZW47CisJVUlOVDggc1syNTZdLCBrZXlbNjRdOworCisJLyogbm8gcG9pbnQgaW4gV0VQcGluZyBhbiBlbXB0eSBmcmFtZSAqLworCWlmIChsZW4gPD0gMCkgcmV0dXJuIC0xOworCisJLyogd2UgbmVlZCB0byBoYXZlIGEgcmVhbCBrZXkuLiAqLworCWlmIChrZXludW0gPj0gTlVNX1dFUEtFWVMpIHJldHVybiAtMjsKKwlrZXlsZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1trZXludW1dOworCWlmIChrZXlsZW4gPD0gMCkgcmV0dXJuIC0zOworCisJLyogdXNlIGEgcmFuZG9tIElWLiAgQW5kIHNraXAga25vd24gd2VhayBvbmVzLiAqLworCWdldF9yYW5kb21fYnl0ZXMoaXYsIDMpOworCXdoaWxlICgoaXZbMV0gPT0gMHhmZikgJiYgKGl2WzBdID49IDMpICYmIChpdlswXSA8IGtleWxlbikpCisJCWdldF9yYW5kb21fYnl0ZXMoaXYsIDMpOworCisJaXZbM10gPSAoa2V5bnVtICYgMHgwMykgPDwgNjsKKworCWtleVswXSA9IGl2WzBdOworCWtleVsxXSA9IGl2WzFdOworCWtleVsyXSA9IGl2WzJdOworCisJLyogY29weSB0aGUgcmVzdCBvZiB0aGUga2V5IG92ZXIgZnJvbSB0aGUgZGVzaWduYXRlZCBrZXkgKi8KKwltZW1jcHkoa2V5KzMsIHdsYW5kZXYtPndlcF9rZXlzW2tleW51bV0sIGtleWxlbik7CisKKwlrZXlsZW4rPTM7ICAvKiBhZGQgaW4gSVYgYnl0ZXMgKi8KKworI2lmZGVmIFdFUF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJFICVkICglZC8lZCAlZCkgJTAyeCAlMDJ4ICUwMnggJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBsZW4sICBpdlszXSwga2V5bnVtLCBrZXlsZW4sIGtleVswXSwga2V5WzFdLCBrZXlbMl0sIGtleVszXSwga2V5WzRdLCBrZXlbNV0sIGtleVs2XSwga2V5WzddKTsKKyNlbmRpZgorCisJLyogc2V0IHVwIHRoZSBSQzQgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCXNbaV0gPSBpOworCWogPSAwOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlqID0gKGogKyBzW2ldICsga2V5W2kgJSBrZXlsZW5dKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJfQorCisJLyogVXBkYXRlIENSQzMyIHRoZW4gYXBwbHkgUkM0IHRvIHRoZSBkYXRhICovCisJY3JjID0gfjA7CisJaSA9IGogPSAwOworCWZvciAoayA9IDA7IGsgPCBsZW47IGsrKykgeworCQljcmMgPSB3ZXBfY3JjMzJfdGFibGVbKGNyYyBeIGJ1ZltrXSkgJiAweGZmXSBeIChjcmMgPj4gOCk7CisJCWkgPSAoaSsxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWRzdFtrXSA9IGJ1ZltrXSBeIHNbKHNbaV0gKyBzW2pdKSAmIDB4ZmZdOworCX0KKwljcmMgPSB+Y3JjOworCisJLyogbm93IGxldCdzIGVuY3J5cHQgdGhlIGNyYyAqLworCWljdlswXSA9IGNyYzsKKwlpY3ZbMV0gPSBjcmMgPj4gODsKKwlpY3ZbMl0gPSBjcmMgPj4gMTY7CisJaWN2WzNdID0gY3JjID4+IDI0OworCisJZm9yIChrID0gMDsgayA8IDQ7IGsrKykgeworCQlpID0gKGkgKyAxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWljdltrXSBePSBzWyhzW2ldICsgc1tqXSkgJiAweGZmXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDZiYTQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCkBAIC0wLDAgKzEsMjA0OCBAQAorLyogc3JjL3A4MDIxMS9wODAyMTF3ZXh0LmMKKyoKKyogR2x1ZSBjb2RlIHRvIG1ha2UgbGludXgtd2xhbi1uZyBhIGhhcHB5IHdpcmVsZXNzIGV4dGVuc2lvbiBjYW1wZXIuCisqCisqIG9yaWdpbmFsIGF1dGhvcjogIFJleWsgRmxvZXRlciA8cmV5a0BzeW5hY2suZGU+CisqIENvbXBsZXRlbHkgcmUtd3JpdHRlbiBieSBTb2xvbW9uIFBlYWNoeSA8c29sb21vbkBsaW51eC13bGFuLmNvbT4KKyoKKyogQ29weXJpZ2h0IChDKSAyMDAyIEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYXRlKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKTsKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdlc3NpZChuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCk7CisvKiBjb21wYXRpYmlsaXR5IHRvIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KKyNpZmRlZiBXSVJFTEVTU19FWFQKKworc3RhdGljIFVJTlQ4IHA4MDIxMV9taHpfdG9fY2hhbm5lbChVSU5UMTYgbWh6KQoreworCWlmIChtaHogPj0gNTAwMCkgeworCQlyZXR1cm4gKChtaHogLSA1MDAwKSAvIDUpOworCX0KKworCWlmIChtaHogPT0gMjQ4MikKKwkJcmV0dXJuIDE0OworCisJaWYgKG1oeiA+PSAyNDA3KSB7CisJCXJldHVybiAoKG1oeiAtIDI0MDcpIC8gNSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBVSU5UMTYgcDgwMjExX2NoYW5uZWxfdG9fbWh6KFVJTlQ4IGNoLCBpbnQgZG90MTFhKQoreworCisJaWYgKGNoID09IDApCisJCXJldHVybiAwOworCWlmIChjaCA+IDIwMCkKKwkJcmV0dXJuIDA7CisKKwkvKiA1RyAqLworCisJaWYgKGRvdDExYSkgeworCQlyZXR1cm4gKDUwMDAgKyAoNSAqIGNoKSk7CisJfQorCisJLyogMi40RyAqLworCisJaWYgKGNoID09IDE0KQorCQlyZXR1cm4gMjQ4NDsKKworCWlmICgoY2ggPCAxNCkgJiYgKGNoID4gMCkpIHsKKwkJcmV0dXJuICgyNDA3ICsgKDUgKiBjaCkpOworCX0KKworCXJldHVybiAwOworfQorCisvKiB0YWtlbiBmcm9tIG9yaW5vY28uYyA7LSkgKi8KK3N0YXRpYyBjb25zdCBsb25nIHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxW10gPSB7CisJMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKKwkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0Cit9OworI2RlZmluZSBOVU1fQ0hBTk5FTFMgKHNpemVvZihwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcSkgLyBzaXplb2YocDgwMjExd2V4dF9jaGFubmVsX2ZyZXFbMF0pKQorCisvKiBzdGVhbCBhIHNwYXJlIGJpdCB0byBzdG9yZSB0aGUgc2hhcmVkL29wZW5zeXN0ZW1zIHN0YXRlLiBzaG91bGQgZGVmYXVsdCB0byBvcGVuIGlmIG5vdCBzZXQgKi8KKyNkZWZpbmUgSE9TVFdFUF9TSEFSRURLRVkgQklUMworCisKKy8qKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgPT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyBpbnQgcXVhbF9hc19wZXJjZW50KGludCBzbnIgKSB7CisgIGlmICggc25yIDw9IDAgKQorICAgIHJldHVybiAwOworICBpZiAoIHNuciA8PSA0MCApCisgICAgcmV0dXJuIHNucio1LzI7CisgIHJldHVybiAxMDA7Cit9CisKKworCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMzIgZGlkLCBVSU5UMzIgZGF0YSkKK3sKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QJCW1pYml0ZW07CisJaW50CXJlc3VsdDsKKworCURCRkVOVEVSOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1pYml0ZW0uZGlkID0gZGlkOworCW1pYml0ZW0uZGF0YSA9IGRhdGE7CisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2F1dG9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgICAgIG1zZzsKKwlzdHJ1Y3QgaXdfcG9pbnQJCQlkYXRhOworCWNoYXIgc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwkvKiBHZXQgRVNTSUQgKi8KKwlyZXN1bHQgPSBwODAyMTF3ZXh0X2dpd2Vzc2lkKHdsYW5kZXYtPm5ldGRldiwgTlVMTCwgJmRhdGEsIHNzaWQpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgKQorCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWVsc2UKKwkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CisKKwkvKiBUcmltIHRoZSBsYXN0ICdcMCcgdG8gZml0IHRoZSBTU0lEIGZvcm1hdCAqLworCisJaWYgKGRhdGEubGVuZ3RoICYmIHNzaWRbZGF0YS5sZW5ndGgtMV0gPT0gJ1wwJykgeworCQlkYXRhLmxlbmd0aCA9IGRhdGEubGVuZ3RoIC0gMTsKKwl9CisKKwltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBzc2lkLCBkYXRhLmxlbmd0aCk7CisJbXNnLnNzaWQuZGF0YS5sZW4gPSBkYXRhLmxlbmd0aDsKKworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworZXhpdDoKKworCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKKworfQorCisvKiBjYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzICovCitzdHJ1Y3QgaXdfc3RhdGlzdGljcyogcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMgKG5ldGRldmljZV90ICpkZXYpCit7CisJcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAgcXVhbGl0eTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MqIHdzdGF0cyA9ICZ3bGFuZGV2LT53c3RhdHM7CisJaW50IHJldHZhbDsKKworCURCRkVOVEVSOworCS8qIENoZWNrICovCisJaWYgKCAod2xhbmRldiA9PSBOVUxMKSB8fCAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykgKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFhYWCBPbmx5IHZhbGlkIGluIHN0YXRpb24gbW9kZSAqLworCXdzdGF0cy0+c3RhdHVzID0gMDsKKworCS8qIGJ1aWxkIHJlcXVlc3QgbWVzc2FnZSAqLworCXF1YWxpdHkubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OworCXF1YWxpdHkuZGJtLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJcXVhbGl0eS5kYm0uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJLyogc2VuZCBtZXNzYWdlIHRvIG5zZCAqLworCWlmICggd2xhbmRldi0+bWxtZXJlcXVlc3QgPT0gTlVMTCApCisJCXJldHVybiBOVUxMOworCisJcmV0dmFsID0gd2xhbmRldi0+bWxtZXJlcXVlc3Qod2xhbmRldiwgKHA4MDIxMW1zZ190KikgJnF1YWxpdHkpOworCisJd3N0YXRzLT5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQocXVhbGl0eS5saW5rLmRhdGEpOyAgICAvKiBvdmVyYWxsIGxpbmsgcXVhbGl0eSAqLworCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHF1YWxpdHkubGV2ZWwuZGF0YTsgIC8qIGluc3RhbnQgc2lnbmFsIGxldmVsICovCisJd3N0YXRzLT5xdWFsLm5vaXNlID0gcXVhbGl0eS5ub2lzZS5kYXRhOyAgLyogaW5zdGFudCBub2lzZSBsZXZlbCAqLworCisjaWYgV0lSRUxFU1NfRVhUID4gMTgKKwl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKKyNlbHNlCisJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSA3OworI2VuZGlmCisJd3N0YXRzLT5kaXNjYXJkLmNvZGUgPSB3bGFuZGV2LT5yeC5kZWNyeXB0X2VycjsKKwl3c3RhdHMtPmRpc2NhcmQubndpZCA9IDA7CisJd3N0YXRzLT5kaXNjYXJkLm1pc2MgPSAwOworCisjaWYgV0lSRUxFU1NfRVhUID4gMTEKKwl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgPSAwOyAgLy8gaW5jb21wbGV0ZSBmcmFnbWVudHMKKwl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyA9IDA7ICAgLy8gdHggcmV0cmllcy4KKwl3c3RhdHMtPm1pc3MuYmVhY29uID0gMDsKKyNlbmRpZgorCisJREJGRVhJVDsKKworCXJldHVybiB3c3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXduYW1lKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgY2hhciAqbmFtZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGl3X3BhcmFtIHJhdGU7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gcDgwMjExd2V4dF9naXdyYXRlKGRldiwgTlVMTCwgJnJhdGUsIE5VTEwpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3dpdGNoIChyYXRlLnZhbHVlKSB7CisJY2FzZSAxMDAwMDAwOgorCWNhc2UgMjAwMDAwMDoKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOworCQlicmVhazsKKwljYXNlIDU1MDAwMDA6CisJY2FzZSAxMTAwMDAwMDoKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1iIik7CisJCWJyZWFrOworCX0KK2V4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZnJlcShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlpZiAobWliaXRlbS5kYXRhID4gTlVNX0NIQU5ORUxTKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBjb252ZXJ0IGludG8gZnJlcXVlbmN5IGluc3RlYWQgb2YgYSBjaGFubmVsICovCisJZnJlcS0+ZSA9IDE7CisJZnJlcS0+bSA9IHA4MDIxMV9jaGFubmVsX3RvX21oeihtaWJpdGVtLmRhdGEsIDApICogMTAwMDAwOworCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdmcmVxKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOworCW1pYml0ZW0uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJaWYgKCAoZnJlcS0+ZSA9PSAwKSAmJiAoZnJlcS0+bSA8PSAxMDAwKSApCisJCW1pYml0ZW0uZGF0YSA9IGZyZXEtPm07CisJZWxzZQorCQltaWJpdGVtLmRhdGEgPSBwODAyMTFfbWh6X3RvX2NoYW5uZWwoZnJlcS0+bSk7CisKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKKyNpZiBXSVJFTEVTU19FWFQgPiA4CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdtb2RlKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJc3dpdGNoICh3bGFuZGV2LT5tYWNtb2RlKSB7CisJY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6CisJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX01BQ01PREVfRVNTX1NUQToKKwkJKm1vZGUgPSBJV19NT0RFX0lORlJBOworCQlicmVhazsKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfQVA6CisJCSptb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5vdCBzZXQgeWV0LiAqLworCQkqbW9kZSA9IElXX01PREVfQVVUTzsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3bW9kZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCAJcmVzdWx0OworCWludCAgICAgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICgqbW9kZSAhPSBJV19NT0RFX0FESE9DICYmICptb2RlICE9IElXX01PREVfSU5GUkEgJiYKKwkgICAgKm1vZGUgIT0gSVdfTU9ERV9NQVNURVIpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIE9wZXJhdGlvbiBtb2RlIGlzIHRoZSBzYW1lIHdpdGggY3VycmVudCBtb2RlICovCisJaWYgKCptb2RlID09IHdsYW5kZXYtPm1hY21vZGUpCisJCWdvdG8gZXhpdDsKKworCXN3aXRjaCAoKm1vZGUpIHsKKwljYXNlIElXX01PREVfQURIT0M6CisJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfSUJTU19TVEE7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9FU1NfU1RBOworCQlicmVhazsKKwljYXNlIElXX01PREVfTUFTVEVSOgorCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19BUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTm90IHNldCB5ZXQuICovCisJCVdMQU5fTE9HX0lORk8oIk9wZXJhdGlvbiBtb2RlOiAlZCBub3Qgc3VwcG9ydFxuIiwgKm1vZGUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogU2V0IE9wZXJhdGlvbiBtb2RlIHRvIHRoZSBQT1JUIFRZUEUgUklEICovCisKKyN3YXJuaW5nICJnZXQgcmlkIG9mIHAybWliIGhlcmUiCisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQb3J0VHlwZTsKKwltaWJpdGVtLmRhdGEgPSAoKm1vZGUgPT0gSVdfTU9ERV9BREhPQykgPyAwIDogMTsKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworIGV4aXQ6CisJREJGRVhJVDsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JhbmdlKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworICAgICAgICBzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwlpbnQgaSwgdmFsOworCisJREJGRU5URVI7CisKKwkvLyBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSBzZXQgc2l6ZSAmIHplcm8gZXZlcnl0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kCisJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKCpyYW5nZSk7CisJbWVtc2V0KHJhbmdlLDAsc2l6ZW9mKCpyYW5nZSkpOworCisjaWYgV0lSRUxFU1NfRVhUID4gOQorCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07CisJLy8gWFhYIHdoYXQgYWJvdXQgbWluL21heF9wbXAsIG1pbi9tYXhfcG10LCBldGMuCisjZW5kaWYKKworI2lmIFdJUkVMRVNTX0VYVCA+IDEwCisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTM7CisKKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTAgKi8KKworI2lmIFdJUkVMRVNTX0VYVCA+IDE2CisgICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzBdID0gKElXX0VWRU5UX0NBUEFfS18wIHwgIC8vbW9kZS9mcmVxL3NzaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKKyAgICAgICAgcmFuZ2UtPmV2ZW50X2NhcGFbMV0gPSBJV19FVkVOVF9DQVBBX0tfMTsgIC8vZW5jb2RlCisgICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzRdID0gKElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWUVVBTCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soSVdFVkNVU1RPTSkgKTsKKyNlbmRpZgorCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKKworCS8qIFhYWCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiAmfCBhY3RpdmUgc2V0ICovCisJdmFsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTIDsgaSsrKSB7CisJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGkgKyAxOworCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcVtpXSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKKwkJdmFsKys7CisJfQorCisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSB2YWw7CisKKwkvKiBNYXggb2YgL3Byb2MvbmV0L3dpcmVsZXNzICovCisJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CisJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOworCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7CisJLy8gWFhYIHRoZXNlIG5lZWQgdG8gYmUgbnNkLXNwZWNpZmljIQorCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gTlVNX1dFUEtFWVM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisKKwkvLyBYWFggd2hhdCBhYm91dCBudW1fYml0cmF0ZXMvdGhyb3VnaHB1dD8KKwlyYW5nZS0+bnVtX2JpdHJhdGVzID0gMDsKKworCS8qIGVzdGltYXRlZCBtYXggdGhyb3VnaHB1dCAqLworCS8vIFhYWCBuZWVkIHRvIGNhcCBpdCBpZiB3ZSdyZSBydW5uaW5nIGF0IH4yTWJwcy4uCisJcmFuZ2UtPnRocm91Z2hwdXQgPSA1NTAwMDAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3YXAobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisKKwlEQkZFTlRFUjsKKworCW1lbWNweShhcF9hZGRyLT5zYV9kYXRhLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKyNpZiBXSVJFTEVTU19FWFQgPiA4CitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZW5jb2RlKG5ldGRldmljZV90ICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJZWxzZQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwllbHNlCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CisKKwlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKworCWlmIChpID09IC0xKQorCQlpID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOworCisJaWYgKChpIDwgMCkgfHwgKGkgPj0gTlVNX1dFUEtFWVMpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnEtPmZsYWdzIHw9IGkgKyAxOworCisJLyogY29weSB0aGUga2V5IGZyb20gdGhlIGRyaXZlciBjYWNoZSBhcyB0aGUga2V5cyBhcmUgcmVhZC1vbmx5IE1JQnMgKi8KKwllcnEtPmxlbmd0aCA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2ldOworCW1lbWNweShrZXksIHdsYW5kZXYtPndlcF9rZXlzW2ldLCBlcnEtPmxlbmd0aCk7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2VuY29kZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CW1zZzsKKwlwODAyMTFpdGVtX3BzdHIzMl90CQlwc3RyOworCisJaW50IGVyciA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGVuYWJsZSA9IDA7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKwlpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQ2hlY2sgdGhlIEtleSBpbmRleCBmaXJzdC4gKi8KKwlpZigoaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSkpIHsKKworCQlpZiAoKGkgPCAxKSB8fCAoaSA+IE5VTV9XRVBLRVlTKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQllbHNlCisJCQlpLS07CisKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELCBpKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisJCWVsc2UgeworCQkJZW5hYmxlID0gMTsKKwkJfQorCisJfQorCWVsc2UgeworCQkvLyBEbyBub3QgdGhpbmcgd2hlbiBubyBLZXkgSW5kZXgKKwl9CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBubyBrZXkgaW5mb3JtYXRpb24gaW4gdGhlIGl3Y29uZmlnIHJlcXVlc3QgKi8KKwlpZigoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgPT0gMCAmJiBlbmFibGUgPT0gMSkgeworCisJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAqIElmIHRoZXJlIGlzIFdFUCBLZXkgZm9yIHNldHRpbmcsIGNoZWNrIHRoZSBLZXkgSW5mb3JtYXRpb24KKwkJICogYW5kIHRoZW4gc2V0IGl0IHRvIHRoZSBmaXJtd2FyZS4KKwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJCWlmIChlcnEtPmxlbmd0aCA+IDApIHsKKworCQkJLyogY29weSB0aGUga2V5IGZyb20gdGhlIGRyaXZlciBjYWNoZSBhcyB0aGUga2V5cyBhcmUgcmVhZC1vbmx5IE1JQnMgKi8KKwkJCXdsYW5kZXYtPndlcF9rZXlsZW5zW2ldID0gZXJxLT5sZW5ndGg7CisJCQltZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaV0sIGtleSwgZXJxLT5sZW5ndGgpOworCisJCQkvKiBQcmVwYXJlIGRhdGEgc3RydXR1cmUgZm9yIHA4MDIxMXJlcV9kb3JlcXVlc3QuICovCisJCQltZW1jcHkocHN0ci5kYXRhLmRhdGEsIGtleSwgZXJxLT5sZW5ndGgpOworCQkJcHN0ci5kYXRhLmxlbiA9IGVycS0+bGVuZ3RoOworCisJCQlzd2l0Y2goaSkKKwkJCXsKKwkJCQljYXNlIDA6CisJCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMToKKwkJCQkJcHN0ci5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAyOgorCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDM6CisJCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZwc3RyLCBzaXplb2YocHN0cikpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJCQlpZiAocmVzdWx0KSB7CisJCQkJZXJyID0gLUVGQVVMVDsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0KKworCX0KKworCS8qIENoZWNrIHRoZSBQcml2YWN5SW52b2tlZCBmbGFnICovCisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOworCX0KKwllbHNlIGlmKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0VOQUJMRUQpIHx8IGVuYWJsZSA9PSAxKSB7CisJCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCX0KKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCS8qIENoZWNrIHRoZSBFeGNsdWRlVW5lbmNyeXB0ZWQgZmxhZyAqLworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpIHsKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCX0KKwllbHNlIGlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pIHsKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwl9CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyBleGl0OgorCisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZXNzaWQobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+c3NpZC5sZW4pIHsKKwkJZGF0YS0+bGVuZ3RoID0gd2xhbmRldi0+c3NpZC5sZW47CisJCWRhdGEtPmZsYWdzID0gMTsKKwkJbWVtY3B5KGVzc2lkLCB3bGFuZGV2LT5zc2lkLmRhdGEsIGRhdGEtPmxlbmd0aCk7CisJCWVzc2lkW2RhdGEtPmxlbmd0aF0gPSAwOworI2lmIChXSVJFTEVTU19FWFQgPCAyMSkKKwkJZGF0YS0+bGVuZ3RoKys7CisjZW5kaWYKKwl9IGVsc2UgeworCSAgCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKHdsYW5kZXYtPnNzaWQuZGF0YSkpOworCQlkYXRhLT5sZW5ndGggPSAwOworCQlkYXRhLT5mbGFncyA9IDA7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2Vzc2lkKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgICAgIG1zZzsKKworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisJaW50IGxlbmd0aCA9IGRhdGEtPmxlbmd0aDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCisJaWYgKCB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgKQorCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWVsc2UKKwkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CisKKyNpZiAoV0lSRUxFU1NfRVhUIDwgMjEpCisJaWYgKGxlbmd0aCkgbGVuZ3RoLS07CisjZW5kaWYKKworCS8qIFRyaW0gdGhlIGxhc3QgJ1wwJyB0byBmaXQgdGhlIFNTSUQgZm9ybWF0ICovCisKKwlpZiAobGVuZ3RoICYmIGVzc2lkW2xlbmd0aC0xXSA9PSAnXDAnKSB7CisJICBsZW5ndGgtLTsKKwl9CisKKwltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBlc3NpZCwgbGVuZ3RoKTsKKwltc2cuc3NpZC5kYXRhLmxlbiA9IGxlbmd0aDsKKworCVdMQU5fTE9HX0RFQlVHKDEsImF1dG9qb2luX3NzaWQgZm9yICVzIFxuIixlc3NpZCk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworICAgICAgICBXTEFOX0xPR19ERUJVRygxLCJhdXRvam9pbl9zc2lkICVkXG4iLHJlc3VsdCk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3Y29tbWl0KG5ldGRldmljZV90ICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIEF1dG8gSm9pbiAqLworCWVyciA9IHA4MDIxMXdleHRfYXV0b2pvaW4od2xhbmRldik7CisKKyBleGl0OgorIAlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JhdGUobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlycnEtPmZpeGVkID0gMDsgICAvKiBjYW4gaXQgY2hhbmdlPyAqLworCXJycS0+ZGlzYWJsZWQgPSAwOworCXJycS0+dmFsdWUgPSAwOworCisjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMQkJCSgoVUlOVDE2KTEpCisjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMgkJCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfNWRvdDUJCQkoKFVJTlQxNik0KQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzExCQkJKChVSU5UMTYpOCkKKworCXN3aXRjaCAobWliaXRlbS5kYXRhKSB7CisJY2FzZSBIRkEzODR4X1JBVEVCSVRfMToKKwkJcnJxLT52YWx1ZSA9IDEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzI6CisJCXJycS0+dmFsdWUgPSAyMDAwMDAwOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfUkFURUJJVF81ZG90NToKKwkJcnJxLT52YWx1ZSA9IDU1MDAwMDA7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzExOgorCQlycnEtPnZhbHVlID0gMTEwMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cnRzKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlydHMtPnZhbHVlID0gbWliaXRlbS5kYXRhOworCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA9PSAyMzQ3KTsKKwlydHMtPmZpeGVkID0gMTsKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdydHMobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOworCWlmIChydHMtPmRpc2FibGVkKQorCQltaWJpdGVtLmRhdGEgPSAyMzQ3OworCWVsc2UKKwkJbWliaXRlbS5kYXRhID0gcnRzLT52YWx1ZTsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2ZyYWcobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlmcmFnLT52YWx1ZSA9IG1pYml0ZW0uZGF0YTsKKwlmcmFnLT5kaXNhYmxlZCA9IChmcmFnLT52YWx1ZSA9PSAyMzQ2KTsKKwlmcmFnLT5maXhlZCA9IDE7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2ZyYWcobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZDsKKworCWlmIChmcmFnLT5kaXNhYmxlZCkKKwkJbWliaXRlbS5kYXRhID0gMjM0NjsKKwllbHNlCisJCW1pYml0ZW0uZGF0YSA9IGZyYWctPnZhbHVlOworCisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisjZW5kaWYgIC8qIFdJUkVMRVNTX0VYVCA+IDggKi8KKworI2lmIFdJUkVMRVNTX0VYVCA+IDEwCisKKyNpZm5kZWYgSVdfUkVUUllfTE9ORworI2RlZmluZSBJV19SRVRSWV9MT05HIElXX1JFVFJZX01BWAorI2VuZGlmCisKKyNpZm5kZWYgSVdfUkVUUllfU0hPUlQKKyNkZWZpbmUgSVdfUkVUUllfU0hPUlQgSVdfUkVUUllfTUlOCisjZW5kaWYKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JldHJ5KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCVVJTlQxNiBzaG9ydHJldHJ5LCBsb25ncmV0cnksIGxpZmV0aW1lOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdDsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlzaG9ydHJldHJ5ID0gbWliaXRlbS5kYXRhOworCisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0OworCisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSgmbWliaXRlbSwgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgc2l6ZW9mKG1pYml0ZW0pKTsKKworCWxvbmdyZXRyeSA9IG1pYml0ZW0uZGF0YTsKKworCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlsaWZldGltZSA9IG1pYml0ZW0uZGF0YTsKKworCXJycS0+ZGlzYWJsZWQgPSAwOworCisJaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKKwkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOworCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDI0OworCX0gZWxzZSB7CisJCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKKwkJCXJycS0+dmFsdWUgPSBsb25ncmV0cnk7CisJCX0gZWxzZSB7CisJCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJCQlycnEtPnZhbHVlID0gc2hvcnRyZXRyeTsKKwkJCWlmIChzaG9ydHJldHJ5ICE9IGxvbmdyZXRyeSkKKwkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOworCQl9CisJfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7CisKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3JldHJ5KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHJycS0+ZGlzYWJsZWQpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKworCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7CisJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKwkJbWliaXRlbS5kYXRhID0gIHJycS0+dmFsdWUgLz0gMTAyNDsKKworCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7CisJCQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQ7CisJCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOworCisJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQllcnIgPSAtRUZBVUxUOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCisJCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfU0hPUlQpIHsKKwkJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CisJCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOworCisJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQllcnIgPSAtRUZBVUxUOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworCit9CisKKyNlbmRpZiAvKiBXSVJFTEVTU19FWFQgPiAxMCAqLworCisjaWYgV0lSRUxFU1NfRVhUID4gOQorc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3R4cG93KG5ldGRldmljZV90ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisgICAgICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgaW50IGVyciA9IDA7CisKKyAgICAgICAgREJGRU5URVI7CisKKyAgICAgICBpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworICAgICAgICAgICAgICAgIGVyciA9ICgtRU9QTk9UU1VQUCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCisgICAgICAgIHN3aXRjaCAocnJxLT52YWx1ZSkgeworCisgICAgICAgICAgY2FzZSAxIDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwxOyBicmVhazsKKyAgICAgICAgICBjYXNlIDIgOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDI7IGJyZWFrOworICAgICAgICAgIGNhc2UgMyA6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMzsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0IDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw0OyBicmVhazsKKyAgICAgICAgICBjYXNlIDUgOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDU7IGJyZWFrOworICAgICAgICAgIGNhc2UgNiA6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNjsgYnJlYWs7CisgICAgICAgICAgY2FzZSA3IDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw3OyBicmVhazsKKyAgICAgICAgICBjYXNlIDggOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDg7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsODsgYnJlYWs7CisJfQorCisgICAgICAgIG1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKyAgICAgICAgcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSAtRUZBVUxUOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgZXhpdDoKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3R4cG93KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOworCisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSgmbWliaXRlbSwgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgc2l6ZW9mKG1pYml0ZW0pKTsKKworCS8vIFhYWCBoYW5kbGUgT0ZGIGJ5IHNldHRpbmcgZGlzYWJsZWQgPSAxOworCisJcnJxLT5mbGFncyA9IDA7IC8vIElXX1RYUE9XX0RCTTsKKwlycnEtPmRpc2FibGVkID0gMDsKKwlycnEtPmZpeGVkID0gMDsKKwlycnEtPnZhbHVlID0gbWliaXRlbS5kYXRhOworCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gOSAqLworCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3c3B5KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkciBhZGRyZXNzW0lXX01BWF9TUFldOworICAgICAgICBpbnQgbnVtYmVyID0gc3JxLT5sZW5ndGg7CisgICAgICAgIGludCBpOworCisJREJGRU5URVI7CisKKwkvKiBDb3B5IHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciAqLworCW1lbWNweShhZGRyZXNzLCBleHRyYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyKTsKKworICAgICAgICB3bGFuZGV2LT5zcHlfbnVtYmVyID0gMDsKKworICAgICAgICBpZiAobnVtYmVyID4gMCkgeworCisgICAgICAgICAgICAgICAgLyogZXh0cmFjdCB0aGUgYWRkcmVzc2VzICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSh3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgYWRkcmVzc1tpXS5zYV9kYXRhLCBFVEhfQUxFTik7CisJCX0KKworICAgICAgICAgICAgICAgIC8qIHJlc2V0IHN0YXRzICovCisgICAgICAgICAgICAgICAgbWVtc2V0KHdsYW5kZXYtPnNweV9zdGF0LCAwLCBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpICogSVdfTUFYX1NQWSk7CisKKyAgICAgICAgICAgICAgICAvKiBzZXQgbnVtYmVyIG9mIGFkZHJlc3NlcyAqLworICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9udW1iZXIgPSBudW1iZXI7CisgICAgICAgIH0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIGprcmllZ2w6IGZyb20gb3Jpbm9jbywgbW9kaWZpZWQgKi8KK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdzcHkobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgYWRkcmVzc1tJV19NQVhfU1BZXTsKKyAgICAgICAgc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisgICAgICAgIGludCBudW1iZXI7CisgICAgICAgIGludCBpOworCisJREJGRU5URVI7CisKKyAgICAgICAgbnVtYmVyID0gd2xhbmRldi0+c3B5X251bWJlcjsKKworICAgICAgICBpZiAobnVtYmVyID4gMCkgeworCisgICAgICAgICAgICAgICAgLyogcG9wdWxhdGUgYWRkcmVzcyBhbmQgc3B5IHN0cnVjdCdzICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcmVzc1tpXS5zYV9kYXRhLCB3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgRVRIX0FMRU4pOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1tpXS5zYV9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICAgICAgICAgIAltZW1jcHkoJnNweV9zdGF0W2ldLCAmd2xhbmRldi0+c3B5X3N0YXRbaV0sIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpOworICAgICAgICAgICAgICAgIH0KKworCQkvKiByZXNldCB1cGRhdGUgZmxhZyAqLworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgbnVtYmVyOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS51cGRhdGVkID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHB1c2ggc3R1ZmYgdG8gdXNlciBzcGFjZSAqLworICAgICAgICBzcnEtPmxlbmd0aCA9IG51bWJlcjsKKwltZW1jcHkoZXh0cmEsIGFkZHJlc3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlcik7CisJbWVtY3B5KGV4dHJhK3NpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlciwgc3B5X3N0YXQsIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkqbnVtYmVyKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yX3Jlc3VsdDJlcnIgKGludCBwcmlzbTJfcmVzdWx0KQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChwcmlzbTJfcmVzdWx0KSB7CisJCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZToKKwkJCWVyciA9IC1FSU87CisJCQlicmVhazsKKwkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDoKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworI2lmIFdJUkVMRVNTX0VYVCA+IDEzCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3c2NhbihuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QJbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisJaW50IGkgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+bWFjbW9kZSA9PSBXTEFOX01BQ01PREVfRVNTX0FQKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJDYW4ndCBzY2FuIGluIEFQIG1vZGVcbiIpOworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtc2V0KCZtc2csIDB4MDAsIHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90KSk7CisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2NhbjsKKwltc2cuYnNzdHlwZS5kYXRhID0gUDgwMjExRU5VTV9ic3N0eXBlX2FueTsKKworCW1lbXNldCgmKG1zZy5ic3NpZC5kYXRhKSwgMHhGRiwgc2l6ZW9mIChwODAyMTFpdGVtX3BzdHI2X3QpKTsKKwltc2cuYnNzaWQuZGF0YS5sZW4gPSA2OworCisJbXNnLnNjYW50eXBlLmRhdGEgPSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZTsKKwltc2cucHJvYmVkZWxheS5kYXRhID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gMTQ7IGkrKykKKwkJbXNnLmNoYW5uZWxsaXN0LmRhdGEuZGF0YVtpLTFdID0gaTsKKwltc2cuY2hhbm5lbGxpc3QuZGF0YS5sZW4gPSAxNDsKKworCW1zZy5tYXhjaGFubmVsdGltZS5kYXRhID0gMjUwOworCW1zZy5taW5jaGFubmVsdGltZS5kYXRhID0gMjAwOworCisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCWlmIChyZXN1bHQpCisJCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyIChtc2cucmVzdWx0Y29kZS5kYXRhKTsKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIEhlbHBlciB0byB0cmFuc2xhdGUgc2NhbiBpbnRvIFdpcmVsZXNzIEV4dGVuc2lvbnMgc2NhbiByZXN1bHRzLgorICogSW5zcGlyZWQgYnkgdGhlIHByaXNtNTQgY29kZSwgd2hpY2ggd2FzIGluIHR1cm4gaW5zcGlyZWQgYnkgdGhlCisgKiBhaXJvIGRyaXZlciBjb2RlLgorICovCitzdGF0aWMgY2hhciAqCit3ZXh0X3RyYW5zbGF0ZV9ic3Moc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqY3VycmVudF9ldiwKKwkJICAgY2hhciAqZW5kX2J1ZiwgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICpic3MpCit7CisJc3RydWN0IGl3X2V2ZW50IGl3ZTsJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCisJLyogVGhlIGZpcnN0IGVudHJ5IG11c3QgYmUgdGhlIE1BQyBhZGRyZXNzICovCisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZC5kYXRhLmRhdGEsIFdMQU5fQlNTSURfTEVOKTsKKwlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKwkvKiBUaGUgZm9sbG93aW5nIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNhbWUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCisKKwkvKiBUaGUgRVNTSUQuICovCisJaWYgKGJzcy0+c3NpZC5kYXRhLmxlbiA+IDApIHsKKwkJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCQlpbnQgc2l6ZTsKKworCQlzaXplID0gd2xhbl9taW4oSVdfRVNTSURfTUFYX1NJWkUsIGJzcy0+c3NpZC5kYXRhLmxlbik7CisJCW1lbXNldCgmZXNzaWQsIDAsIHNpemVvZiAoZXNzaWQpKTsKKwkJbWVtY3B5KCZlc3NpZCwgYnNzLT5zc2lkLmRhdGEuZGF0YSwgc2l6ZSk7CisJCVdMQU5fTE9HX0RFQlVHKDEsICIgZXNzaWQgc2l6ZSA9ICVkXG4iLCBzaXplKTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplOworCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICZlc3NpZFswXSk7CisJCVdMQU5fTE9HX0RFQlVHKDEsICIgZXNzaWQgc2l6ZSBPSy5cbiIpOworCX0KKworCXN3aXRjaCAoYnNzLT5ic3N0eXBlLmRhdGEpIHsKKwkJY2FzZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmU6CisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCQlicmVhazsKKworCQljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDoKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWl3ZS51Lm1vZGUgPSAwOworCQkJYnJlYWs7CisJfQorCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwlpZiAoaXdlLnUubW9kZSkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKworCS8qIEVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLworCWlmIChic3MtPnByaXZhY3kuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKKworCS8qIEFkZCBmcmVxdWVuY3kuIChzaG9ydCkgYnNzLT5jaGFubmVsIGlzIHRoZSBmcmVxdWVuY3kgaW4gTUh6ICovCisJaXdlLnUuZnJlcS5tID0gYnNzLT5kc2NoYW5uZWwuZGF0YTsKKwlpd2UudS5mcmVxLmUgPSAwOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCisJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLworCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPnNpZ25hbC5kYXRhOworCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlLmRhdGE7CisJLyogZG8gYSBzaW1wbGUgU05SIGZvciBxdWFsaXR5ICovCisJaXdlLnUucXVhbC5xdWFsID0gcXVhbF9hc19wZXJjZW50KGJzcy0+c2lnbmFsLmRhdGEgLSBic3MtPm5vaXNlLmRhdGEpOworCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3NjYW4obmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QJbXNnOworCWludCByZXN1bHQgPSAwOworCWludCBlcnIgPSAwOworCWludCBpID0gMDsKKwlpbnQgc2Nhbl9nb29kID0gMDsKKwljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7CisKKwlEQkZFTlRFUjsKKworCS8qIFNpbmNlIHdpcmVsZXNzIHRvb2xzIGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSB3YXkgb2YgcGFzc2luZyBob3cKKwkgKiBtYW55IHNjYW4gcmVzdWx0cyByZXN1bHRzIHRoZXJlIHdlcmUgYmFjayBoZXJlLCBrZWVwIGdyYWJiaW5nIHRoZW0KKwkgKiB1bnRpbCB3ZSBmYWlsLgorCSAqLworCWRvIHsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzOworCQltc2cuYnNzaW5kZXguZGF0YSA9IGk7CisKKwkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCQlpZiAoKHJlc3VsdCAhPSAwKSB8fAorCQkgICAgKG1zZy5yZXN1bHRjb2RlLmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpKSB7CisJCQlicmVhazsKKwkJfQorCisJCWN1cnJlbnRfZXYgPSB3ZXh0X3RyYW5zbGF0ZV9ic3MoaW5mbywgY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmbXNnKTsKKwkJc2Nhbl9nb29kID0gMTsKKwkJaSsrOworCX0gd2hpbGUgKGkgPCBJV19NQVhfQVApOworCisJc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKKwlzcnEtPmZsYWdzID0gMDsJLyogdG9kbyAqLworCisJaWYgKHJlc3VsdCAmJiAhc2Nhbl9nb29kKQorCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVyciAobXNnLnJlc3VsdGNvZGUuZGF0YSk7CisKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy9leHRyYSB3aXJlbGVzcyBleHRlbnNpb25zIHN0dWZmIHRvIHN1cHBvcnQgTmV0d29ya01hbmFnZXIgKEkgaG9wZSkKKworI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisvKiBTSU9DU0lXRU5DT0RFRVhUICovCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKyAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdAltc2c7CisJcDgwMjExaXRlbV9wc3RyMzJfdAkJKnBzdHI7CisKKyAgaW50IHJlc3VsdCA9IDA7CisgIHN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisgIGludCBpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisKKyAgV0xBTl9MT0dfREVCVUcoMSwic2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIixleHQtPmV4dF9mbGFncywoaW50KWV4dC0+YWxnLChpbnQpZXh0LT5rZXlfbGVuKTsKKworCisgIGlmICggZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSApIHsKKyAgICAvLyBzZXQgZGVmYXVsdCBrZXkgPyBJJ20gbm90IHN1cmUgaWYgdGhpcyB0aGUgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZQorCisgICAgaWYgKCBpZHggKSB7CisgICAgICBpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUykgeworCXJldHVybiAtRUlOVkFMOworICAgICAgfSBlbHNlCisJaWR4LS07CisgICAgfQorICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldHRpbmcgZGVmYXVsdCBrZXkgKCVkKVxuIixpZHgpOworICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwgaWR4KTsKKyAgICBpZiAoIHJlc3VsdCApCisgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgfQorCisKKyAgaWYgKCBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSApIHsKKyAgICBpZiAoICEgZXh0LT5hbGcgJiBJV19FTkNPREVfQUxHX1dFUCkgeworICAgICAgV0xBTl9MT0dfREVCVUcoMSwiYXNrZWQgdG8gc2V0IGEgbm9uIHdlcCBrZXkgOigiKTsKKyAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKyAgICBpZiAoaWR4KSB7CisgICAgICBpZiAoaWR4IDwxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKQorCXJldHVybiAtRUlOVkFMOworICAgICAgZWxzZQorCWlkeC0tOworICAgIH0KKyAgICBXTEFOX0xPR19ERUJVRygxLCJTZXQgV0VQIGtleSAoJWQpXG4iLGlkeCk7CisgICAgd2xhbmRldi0+d2VwX2tleWxlbnNbaWR4XSA9IGV4dC0+a2V5X2xlbjsKKyAgICBtZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisKKyAgICBtZW1zZXQoICZtc2csMCxzaXplb2YobXNnKSk7CisgICAgcHN0ciA9IChwODAyMTFpdGVtX3BzdHIzMl90KikmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOworICAgIG1lbWNweShwc3RyLT5kYXRhLmRhdGEsIGV4dC0+a2V5LGV4dC0+a2V5X2xlbik7CisgICAgcHN0ci0+ZGF0YS5sZW4gPSBleHQtPmtleV9sZW47CisgICAgc3dpdGNoIChpZHgpIHsKKyAgICBjYXNlIDA6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICAgIG1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKyAgICByZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsKFVJTlQ4KikmbXNnKTsKKyAgICBXTEFOX0xPR19ERUJVRygxLCJyZXN1bHQgKCVkKVxuIixyZXN1bHQpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFNJT0NHSVdFTkNPREVFWFQgKi8KK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKKworeworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCWludCByZXN1bHQgPSAwOworCWludCBtYXhfbGVuOworCWludCBpZHg7CisKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsZXh0LT5leHRfZmxhZ3MsKGludClleHQtPmFsZywoaW50KWV4dC0+a2V5X2xlbik7CisKKworCW1heF9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOworCWlmICggbWF4X2xlbiA8PSAwKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVleHQgbWF4X2xlbiBbJWRdIGludmFsaWRcbiIsbWF4X2xlbik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCisJV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZV9leHQgaW5kZXggWyVkXVxuIixpZHgpOworCisJaWYgKGlkeCkgeworCQlpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUyApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGludmFsaWQga2V5IGluZGV4IFslZF1cbiIsaWR4KTsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaWR4LS07CisJfSBlbHNlIHsKKwkJLyogZGVmYXVsdCBrZXkgPyBub3Qgc3VyZSB3aGF0IHRvIGRvICovCisJCS8qIHdpbGwganVzdCB1c2Uga2V5WzBdIGZvciBub3cgISBGSVggTUUgKi8KKwl9CisKKwllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOworCW1lbXNldChleHQsMCxzaXplb2YoKmV4dCkpOworCisJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKKwlleHQtPmtleV9sZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1tpZHhdOworCW1lbWNweSggZXh0LT5rZXksIHdsYW5kZXYtPndlcF9rZXlzW2lkeF0gLCBleHQtPmtleV9sZW4gKTsKKworCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKK2V4aXQ6CisJREJGRVhJVDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyogU0lPQ1NJV0FVVEggKi8KK3N0YXRpYyBpbnQgcDgwMjExX3dleHRfc2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgIHN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisgIGludCByZXN1bHQgPTA7CisKKyAgV0xBTl9MT0dfREVCVUcoMSwic2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsKGludClwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYICk7CisKKyAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisgIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorICAgIFdMQU5fTE9HX0RFQlVHKDEsImRyb3BfdW5lbmNyeXB0ZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKKyAgICBpZiAocGFyYW0tPnZhbHVlKQorICAgICAgcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKyAgICBXTEFOX0xPR19ERUJVRygxLCJwcml2YWN5IGludm9rZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKKyAgICBpZiAoIHBhcmFtLT52YWx1ZSkKKyAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKworICAgIGJyZWFrOworCisgIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKyAgICBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNICkgeworICAgICAgV0xBTl9MT0dfREVCVUcoMSwic2V0IG9wZW5fc3lzdGVtXG4iKTsKKyAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgJj0gfkhPU1RXRVBfU0hBUkVES0VZOworICAgIH0gZWxzZSBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKKyAgICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldCBzaGFyZWQga2V5XG4iKTsKKyAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9TSEFSRURLRVk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGRvbid0IGtub3cgd2hhdCB0byBkbyBrbm93IDooICovCisgICAgICBXTEFOX0xPR19ERUJVRygxLCJ1bmtub3duIEFVVEhfQUxHICglZClcbiIscGFyYW0tPnZhbHVlKTsKKyAgICAgIHJlc3VsdCA9IC1FSU5WQUw7CisgICAgfQorICAgIGJyZWFrOworCisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0KKworCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogU0lPQ1NJV0FVVEggKi8KK3N0YXRpYyBpbnQgcDgwMjExX3dleHRfZ2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgIHN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisgIGludCByZXN1bHQgPTA7CisKKyAgV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsKGludClwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYICk7CisKKyAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisgIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRD8xOjA7CisgICAgYnJlYWs7CisKKyAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKyAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRD8xOjA7CisgICAgYnJlYWs7CisKKyAgY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWT9JV19BVVRIX0FMR19TSEFSRURfS0VZOklXX0FVVEhfQUxHX09QRU5fU1lTVEVNOworICAgIGJyZWFrOworCisKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfQorCisKKworICByZXR1cm4gcmVzdWx0OworfQorCisKKyNlbmRpZgorCisKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworCisKKy8qCit0eXBlZGVmIGludCAoKml3X2hhbmRsZXIpKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKKyovCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorc3RhdGljIGl3X2hhbmRsZXIgcDgwMjExd2V4dF9oYW5kbGVyc1tdID0gIHsKKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdjb21taXQsCQkvKiBTSU9DU0lXQ09NTUlUICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJlcSwgIAkJLyogU0lPQ1NJV0ZSRVEgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmVxLCAgCQkvKiBTSU9DR0lXRlJFUSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd21vZGUsICAgICAgIAkJLyogU0lPQ1NJV01PREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdtb2RlLCAgICAgICAJCS8qIFNJT0NHSVdNT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdTRU5TICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV1NFTlMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmFuZ2UsICAgICAgCQkvKiBTSU9DR0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1BSSVYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyoga2VybmVsIGNvZGUgKi8gICAJCS8qIFNJT0NHSVdQUklWICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIG5vdCB1c2VkICovICAgICAJCS8qIFNJT0NTSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiBrZXJuZWwgY29kZSAqLyAgIAkJLyogU0lPQ0dJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c3B5LAkJCS8qIFNJT0NTSVdTUFkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdzcHksCQkJLyogU0lPQ0dJV1NQWSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV0FQICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3YXAsICAgICAgICAgCQkvKiBTSU9DR0lXQVAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV0FQTElTVCAqLworI2lmIFdJUkVMRVNTX0VYVCA+IDEzCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c2NhbiwJCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NjYW4sCQkJLyogU0lPQ0dJV1NDQU4gKi8KKyNlbHNlIC8qIFdJUkVMRVNTX0VYVCA+IDEzICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIG51bGwgKi8JCS8qIFNJT0NTSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIG51bGwgKi8JCS8qIFNJT0NHSVdTQ0FOICovCisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlc3NpZCwgIAkJLyogU0lPQ1NJV0VTU0lEICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZXNzaWQsICAgICAgCQkvKiBTSU9DR0lXRVNTSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZXNzaWQsICAgICAgCQkvKiBTSU9DR0lXTklDS04gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV1JBVEUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYXRlLCAgICAgIAkJLyogU0lPQ0dJV1JBVEUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdydHMsICAJCS8qIFNJT0NTSVdSVFMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdydHMsICAgICAgICAJCS8qIFNJT0NHSVdSVFMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmFnLCAgICAgIAkJLyogU0lPQ1NJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmFnLCAgIAkJLyogU0lPQ0dJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXd0eHBvdywgICAgICAgICAgIAkvKiBTSU9DU0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXd0eHBvdywgIAkJLyogU0lPQ0dJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cmV0cnksICAgICAJCS8qIFNJT0NTSVdSRVRSWSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JldHJ5LCAgCQkvKiBTSU9DR0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlbmNvZGUsICAgICAJCS8qIFNJT0NTSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlbmNvZGUsICAJCS8qIFNJT0NHSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV1BPV0VSICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgCQkvKiBTSU9DR0lXUE9XRVIgKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxNworLyogV1BBIG9wZXJhdGlvbnMgKi8KKworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogU0lPQ1NJV0dFTklFCXNldCBnZW5lcmljIElFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIFNJT0NHSVdHRU5JRQlnZXQgZ2VuZXJpYyBJRSAqLworCShpd19oYW5kbGVyKSBwODAyMTFfd2V4dF9zZXRfaXdhdXRoLCAvKiBTSU9DU0lXQVVUSAlzZXQgYXV0aGVudGljYXRpb24gbW9kZSBwYXJhbXMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfZ2V0X2l3YXV0aCwgLyogU0lPQ0dJV0FVVEgJZ2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCisKKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zZXRfZW5jb2RlZXh0LCAvKiBTSU9DU0lXRU5DT0RFRVhUICBzZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2V0X2VuY29kZWV4dCwgLyogU0lPQ0dJV0VOQ09ERUVYVCAgZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DU0lXUE1LU0EJUE1LU0EgY2FjaGUgb3BlcmF0aW9uICovCisjZW5kaWYKK307CisKK3N0cnVjdCBpd19oYW5kbGVyX2RlZiBwODAyMTF3ZXh0X2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBzaXplb2YocDgwMjExd2V4dF9oYW5kbGVycykgLyBzaXplb2YoaXdfaGFuZGxlciksCisJLm51bV9wcml2YXRlID0gMCwKKwkubnVtX3ByaXZhdGVfYXJncyA9IDAsCisgICAgICAgIC5zdGFuZGFyZCA9IHA4MDIxMXdleHRfaGFuZGxlcnMsCisJLnByaXZhdGUgPSBOVUxMLAorCS5wcml2YXRlX2FyZ3MgPSBOVUxMLAorI2lmIFdJUkVMRVNTX0VYVCA+IDE2CisJLmdldF93aXJlbGVzc19zdGF0cyA9IHA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzCisjZW5kaWYKK307CisKKyNlbmRpZgorCisvKiB3aXJlbGVzcyBleHRlbnNpb25zJyBpb2N0bHMgKi8KK2ludCBwODAyMTF3ZXh0X3N1cHBvcnRfaW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCisjaWYgV0lSRUxFU1NfRVhUIDwgMTMKKwlzdHJ1Y3QgaXdyZXEgKml3ciA9IChzdHJ1Y3QgaXdyZXEqKWlmcjsKKyNlbmRpZgorCisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltaWJpdGVtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCWlmICggd2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORyApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCVdMQU5fTE9HX0RFQlVHKDEsICJSZWNlaXZlZCB3aXJlbGVzcyBleHRlbnNpb24gaW9jdGwgIyVkLlxuIiwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisjaWYgV0lSRUxFU1NfRVhUIDwgMTMKKwljYXNlIFNJT0NTSVdOQU1FOiAgLyogdW51c2VkICAqLworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdOQU1FOiAvKiBnZXQgbmFtZSA9PSB3aXJlbGVzcyBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfZ2l3bmFtZShkZXYsIE5VTEwsIChjaGFyICopICZpd3ItPnUsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NTSVdOV0lEOgorCWNhc2UgU0lPQ0dJV05XSUQ6CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJV0ZSRVE6IC8qIHNldCBjaGFubmVsICovCisgICAgICAgICAgICAgICAgZXJyID0gcDgwMjExd2V4dF9zaXdmcmVxKGRldiwgTlVMTCwgJihpd3ItPnUuZnJlcSksIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdGUkVROiAvKiBnZXQgY2hhbm5lbCAqLworICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfZ2l3ZnJlcShkZXYsIE5VTEwsICYoaXdyLT51LmZyZXEpLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lXUkFOR0U6CisJY2FzZSBTSU9DU0lXUFJJVjoKKwljYXNlIFNJT0NTSVdBUDogLyogc2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzIChCU1NJRCkgKi8KKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NHSVdBUDoJLyogZ2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzIChCU1NJRCkgKi8KKyAgICAgICAgICAgICAgICBlcnIgPSBwODAyMTF3ZXh0X2dpd2FwKGRldiwgTlVMTCwgJihpd3ItPnUuYXBfYWRkciksIE5VTEwpOworCQlicmVhazsKKworI2lmIFdJUkVMRVNTX0VYVCA+IDgKKwljYXNlIFNJT0NTSVdNT0RFOiAvKiBzZXQgb3BlcmF0aW9uIG1vZGUgKi8KKwljYXNlIFNJT0NTSVdFU1NJRDogLyogc2V0IFNTSUQgKG5ldHdvcmsgbmFtZSkgKi8KKwljYXNlIFNJT0NTSVdSQVRFOiAvKiBzZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKSAqLworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKworCWNhc2UgU0lPQ0dJV01PREU6IC8qIGdldCBvcGVyYXRpb24gbW9kZSAqLworCQllcnIgPSBwODAyMTF3ZXh0X2dpd21vZGUoZGV2LCBOVUxMLCAmaXdyLT51Lm1vZGUsIE5VTEwpOworCisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV05JQ0tOOiAvKiBnZXQgbm9kZSBuYW1lL25pY2tuYW1lICovCisJY2FzZSBTSU9DR0lXRVNTSUQ6IC8qIGdldCBTU0lEICovCisJCWlmKGl3ci0+dS5lc3NpZC5wb2ludGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07CisJCQltZW1zZXQoc3NpZCwgMCwgc2l6ZW9mKHNzaWQpKTsKKworCQkJZXJyID0gcDgwMjExd2V4dF9naXdlc3NpZChkZXYsIE5VTEwsICZpd3ItPnUuZXNzaWQsIHNzaWQpOworCQkJaWYoY29weV90b191c2VyKGl3ci0+dS5lc3NpZC5wb2ludGVyLCBzc2lkLCBzaXplb2Yoc3NpZCkpKQorCQkJCWVyciA9ICgtRUZBVUxUKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNJT0NHSVdSQVRFOgorICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfZ2l3cmF0ZShkZXYsIE5VTEwsICZpd3ItPnUuYml0cmF0ZSwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV1JUUzoKKwkJZXJyID0gcDgwMjExd2V4dF9naXdydHMoZGV2LCBOVUxMLCAmaXdyLT51LnJ0cywgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV0ZSQUc6CisJCWVyciA9IHA4MDIxMXdleHRfZ2l3ZnJhZyhkZXYsIE5VTEwsICZpd3ItPnUucnRzLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXRU5DT0RFOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQllcnIgPSAtRVBFUk07CisJCWVsc2UgaWYgKGl3ci0+dS5lbmNvZGluZy5wb2ludGVyKSB7CisJCQljaGFyIGtleWJ1ZltNQVhfS0VZTEVOXTsKKwkJCWVyciA9IHA4MDIxMXdleHRfZ2l3ZW5jb2RlKGRldiwgTlVMTCwKKwkJCQkJCSAgICAgJml3ci0+dS5lbmNvZGluZywga2V5YnVmKTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoaXdyLT51LmVuY29kaW5nLnBvaW50ZXIsIGtleWJ1ZiwKKwkJCQkJIGl3ci0+dS5lbmNvZGluZy5sZW5ndGgpKQorCQkJCWVyciA9IC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXQVBMSVNUOgorCWNhc2UgU0lPQ1NJV1JUUzoKKwljYXNlIFNJT0NTSVdGUkFHOgorCWNhc2UgU0lPQ1NJV1NFTlM6CisJY2FzZSBTSU9DR0lXU0VOUzoKKwljYXNlIFNJT0NTSVdOSUNLTjogLyogc2V0IG5vZGUgbmFtZS9uaWNrbmFtZSAqLworCWNhc2UgU0lPQ1NJV0VOQ09ERTogLyogc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworCWNhc2UgU0lPQ1NJV1NQWToKKwljYXNlIFNJT0NHSVdTUFk6CisJY2FzZSBTSU9DU0lXUE9XRVI6CisJY2FzZSBTSU9DR0lXUE9XRVI6CisJY2FzZSBTSU9DR0lXUFJJVjoKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXUkFOR0U6CisJCWlmKGl3ci0+dS5kYXRhLnBvaW50ZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JhbmdlIHJhbmdlOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gcDgwMjExd2V4dF9naXdyYW5nZShkZXYsIE5VTEwsICZpd3ItPnUuZGF0YSwKKwkJCQkJCSAgKGNoYXIgKikgJnJhbmdlKTsKKwkJCS8qIFB1c2ggdGhhdCB1cCB0byB0aGUgY2FsbGVyICovCisJCQlpZiAoY29weV90b191c2VyKGl3ci0+dS5kYXRhLnBvaW50ZXIsICZyYW5nZSwgc2l6ZW9mKHJhbmdlKSkpCisJCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCQlicmVhazsKKyNlbmRpZiAvKiBXSVJFTEVTU19FWFQgPiA4ICovCisjaWYgV0lSRUxFU1NfRVhUID4gOQorCWNhc2UgU0lPQ1NJV1RYUE9XOgorCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdUWFBPVzoKKwkJZXJyID0gcDgwMjExd2V4dF9naXd0eHBvdyhkZXYsIE5VTEwsICZpd3ItPnUudHhwb3dlciwgTlVMTCk7CisJCWJyZWFrOworI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA+IDkgKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxMAorCWNhc2UgU0lPQ1NJV1JFVFJZOgorCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdSRVRSWToKKwkJZXJyID0gcDgwMjExd2V4dF9naXdyZXRyeShkZXYsIE5VTEwsICZpd3ItPnUucmV0cnksIE5VTEwpOworCQlicmVhazsKKyNlbmRpZiAvKiBXSVJFTEVTU19FWFQgPiAxMCAqLworCisjZW5kaWYgLyogV0lSRUxFU1NfRVhUIDw9IDEyICovCisKKwlkZWZhdWx0OgorCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIChlcnIpOworfQorCitpbnQgcDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaW50IGFzc29jKQoreworICAgICAgICB1bmlvbiBpd3JlcV9kYXRhIGRhdGE7CisKKyAgICAgICAgREJGRU5URVI7CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMworICAgICAgICAvKiBTZW5kIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBmaXJzdCAqLworICAgICAgICBkYXRhLmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworICAgICAgICBpZiAoYXNzb2MpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIDAsIFdMQU5fQUREUl9MRU4pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdsYW5fd2V4dF93cml0ZSkKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHdsYW5kZXYtPm5ldGRldiwgU0lPQ0dJV0FQLCAmZGF0YSwgTlVMTCk7CisKKyAgICAgICAgaWYgKCFhc3NvYykgZ290byBkb25lOworCisgICAgICAgIC8vIFhYWCBzZW5kIGFzc29jaWF0aW9uIGRhdGEsIGxpa2UgSUVzLCBldGMgZXRjLgorI2VuZGlmCisgZG9uZToKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworI2VuZGlmIC8qIGNvbXBhdGliaWxpdHkgdG8gd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl9jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzY2U1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfY3MuYwpAQCAtMCwwICsxLDE0ODcgQEAKKyNkZWZpbmUgV0xBTl9IT1NUSUYgV0xBTl9QQ01DSUEKKyNpbmNsdWRlICJoZmEzODR4LmMiCisjaW5jbHVkZSAicHJpc20ybWdtdC5jIgorI2luY2x1ZGUgInByaXNtMm1pYi5jIgorI2luY2x1ZGUgInByaXNtMnN0YS5jIgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDQsMjEpICkKKyNpZiAoV0xBTl9DUFVfRkFNSUxZID09IFdMQU5fSXg4NikKKyNpZm5kZWYgQ09ORklHX0lTQQorI3dhcm5pbmcgIllvdSBtYXkgbmVlZCB0byBlbmFibGUgSVNBIHN1cHBvcnQgaW4geW91ciBrZXJuZWwuIgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkgKQorc3RhdGljIHVfaW50CWlycV9tYXNrID0gMHhkZWI4OwkJLyogSW50ZXJydXB0IG1hc2sgKi8KK3N0YXRpYyBpbnQJaXJxX2xpc3RbNF0gPSB7IC0xIH07CQkvKiBJbnRlcnJ1cHQgbGlzdCAqLworI2VuZGlmCitzdGF0aWMgdV9pbnQJcHJpc20yX2lnbm9yZXZjYz0xOwkJLyogQm9vbGVhbiwgaWYgc2V0LCB3ZQorCQkJCQkJICogaWdub3JlIHdoYXQgdGhlIFZjYworCQkJCQkJICogaXMgc2V0IHRvIGFuZCB3aGF0IHRoZSBDSVMKKwkJCQkJCSAqIHNheXMuCisJCQkJCQkgKi8KK21vZHVsZV9wYXJhbSggcHJpc20yX2lnbm9yZXZjYywgaW50LCAwNjQ0KTsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTEpICkKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiw5KSkKK3N0YXRpYyBpbnQgbnVtbGlzdCA9IDQ7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXJxX2xpc3QsIGludCwgbnVtbGlzdCwgMDQ0NCk7CisjZWxzZQorbW9kdWxlX3BhcmFtX2FycmF5KGlycV9saXN0LCBpbnQsIE5VTEwsIDA0NDQpOworI2VuZGlmCittb2R1bGVfcGFyYW0oIGlycV9tYXNrLCBpbnQsIDA2NDQpOworI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTUpCitzdGF0aWMgaW50IHByaXNtMl9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldik7CitzdGF0aWMgdm9pZCBwcmlzbTJfY3NfcmVtb3ZlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KTsKKyNlbHNlCitkZXZfbGlua190CSpwcmlzbTJzdGFfYXR0YWNoKHZvaWQpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2RldGFjaChkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfcmVsZWFzZSh1X2xvbmcgYXJnKTsKK3N0YXRpYyBpbnQgCXByaXNtMnN0YV9ldmVudCAoZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5LCBldmVudF9jYWxsYmFja19hcmdzX3QgKmFyZ3MpOworCitzdGF0aWMgZGV2X2xpbmtfdAkqZGV2X2xpc3QgPSBOVUxMOwkvKiBoZWFkIG9mIGluc3RhbmNlIGxpc3QgKi8KKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSw2OCkpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogY3NfZXJyb3IKKyoKKyogVXRpbGl0eSBmdW5jdGlvbiB0byBwcmludCBjYXJkIHNlcnZpY2VzIGVycm9yIG1lc3NhZ2VzLgorKgorKiBBcmd1bWVudHM6CisqCWhhbmRsZQljbGllbnQgaGFuZGxlIGlkZW50aWZ5aW5nIHRoaXMgQ1MgY2xpZW50CisqCWZ1bmMJQ1MgZnVuY3Rpb24gbnVtYmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBlcnJvcgorKglyZXQJQ1MgZnVuY3Rpb24gcmV0dXJuIGNvZGUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGNzX2Vycm9yKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGludCBmdW5jLCBpbnQgcmV0KQoreworI2lmIChkZWZpbmVkKENTX1JFTEVBU0VfQ09ERSkgJiYgKENTX1JFTEVBU0VfQ09ERSA8IDB4MjkxMSkpCisJQ2FyZFNlcnZpY2VzKFJlcG9ydEVycm9yLCBkZXZfaW5mbywgKHZvaWQgKilmdW5jLCAodm9pZCAqKXJldCk7CisjZWxzZQorCWVycm9yX2luZm9fdCBlcnIgPSB7IGZ1bmMsIHJldCB9OworCXBjbWNpYV9yZXBvcnRfZXJyb3IoaGFuZGxlLCAmZXJyKTsKKyNlbmRpZgorfQorI2Vsc2UgLy8ga2VybmVsX3ZlcnNpb24KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxMikKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBwcmlzbTJfY3NfaWRzW10gPSB7CisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklOVEVSU0lMIiwgICJIRkEzODR4L0lFRUUiLCAweDc0YzVlNDBkLCAweGRiNDcyYTE4KSwgLy8gSW50ZXJzaWwgUFJJU00yIFJlZmVyZW5jZSBEZXNpZ24gMTFNYi9zIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTM4LCAweDAwMDIpLCAvLyBDb21wYXEgV0wxMDAvMjAwIDExTWIvcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI4YSwgMHgwMDAyKSwgLy8gQ29tcGFxIGlQYXEgSE5XLTEwMCAxMU1iL3MgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNTAsIDB4MDAwMiksIC8vIFNhbXN1bmcgU1dMMjAwMC1OIDExTWIvcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4ZDYwMSwgMHgwMDAyKSwgLy8gWi1Db20gWEkzMDAgMTFNYi9zIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlpvb21BaXIgMTFNYnBzIEhpZ2giLCAgIlJhdGUgd2lyZWxlc3MgTmV0d29ya2luZyIsIDB4MjczZmUzZGIsIDB4MzJhMWVhZWUpLCAvLyBab29tQWlyIDQxMDAgMTFNYi9zIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJJbnN0YW50IFdpcmVsZXNzICIsICAiIE5ldHdvcmsgUEMgQ0FSRCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4MTFkOTAxYWYsIDB4NmU5YmQ5MjYsIDB4NGI3NGJhYTApLCAvLyBMaW5rc3lzIFdQQzExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiQWRkdHJvbiIsICAiQVdQLTEwMCBXaXJlbGVzcyBQQ01DSUEiLCAgIlZlcnNpb24gMDEuMDIiLCAweGU2ZWM1MmNlLCAweDg2NDlhZjIsIDB4NGI3NGJhYTApLCAvLyBBZGR0cm9uIEFXUC0xMDAgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJEIiwgICJMaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4NzFiMTg1ODksIDB4YjZmMWIwYWIsIDB4NGI3NGJhYTApLCAvLyBELUxpbmsgRFdMLTY1MCAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIlNNQyIsICAiU01DMjYzMlciLCAgIlZlcnNpb24gMDEuMDIiLCAweGM0ZjhiMThiLCAweDQ3NGExZjJhLCAweDRiNzRiYWEwKSwgLy8gU01DIDI2MzJXIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIkludGVyc2lsIiwgICJQUklTTSAyXzUgUENNQ0lBIEFEQVBURVIiLCAgIklTTDM3MzAwUCIsICAiRXZhbC1SZXZBIiwgMHg0YjgwMWExNywgMHg2MzQ1YTBiZiwgMHhjOTA0OWEzOSwgMHhjMjNhZGMwZSksIC8vIEJyb01heCBGcmVlcG9ydCAxMU1icHMgODAyLjExYiBXTEFOIENhcmQgKFByaXNtIDIuNSkKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIlUuUy4gUm9ib3RpY3MiLCAgIklFRUUgODAyLjExYiBQQy1DQVJEIiwgICJWZXJzaW9uIDAxLjAyIiwgMHhjN2I4ZGY5ZCwgMHgxNzAwZDA4NywgMHg0Yjc0YmFhMCksIC8vIFUuUy4gUm9ib3RpY3MgSUVFRSA4MDIuMTFiIFBDLUNBUkQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRGlnaXRhbCBEYXRhIENvbW11bmljYXRpb25zIiwgICJXUEMtMDEwMCIsIDB4ZmRkNzM0NzAsIDB4ZTBiNmYxNDYpLCAvLyBMZXZlbC1PbmUgV1BDLTAxMDAKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNzQsIDB4MTYxMiksIC8vIEJyb21heCBPRU0gMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIChQcmlzbSAyLjUpCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjc0LCAweDE2MTMpLCAvLyBCcm9tYXggT0VNIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCAoUHJpc20gMykKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAgIldpcmVsZXNzIExBTiBQQ0MtMTEiLCAweDUyNjE0NDBmLCAweGE2NDA1NTg0KSwgLy8gY29yZWdhIEsuSy4gV2lyZWxlc3MgTEFOIFBDQy0xMQorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICAiV2lyZWxlc3MgTEFOIFBDQ0EtMTEiLCAweDUyNjE0NDBmLCAweGRmNjExNWY5KSwgLy8gY29yZWdhIEsuSy4gV2lyZWxlc3MgTEFOIFBDQ0EtMTEKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGMwMDEsIDB4MDAwOCksIC8vIENPTlRFQyBGTEVYU0NBTi9GWC1ERFMxMTAtUENDCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBMQU5FWCIsICAiR2VvV2F2ZS9HVy1OUzExMCIsIDB4MjA5ZjQwYWIsIDB4NDYyNjMxNzgpLCAvLyBQTEFORVggR2VvV2F2ZS9HVy1OUzExMAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiT0VNIiwgICJQUklTTTIgSUVFRSA4MDIuMTEgUEMtQ2FyZCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4ZmVhNTRjOTAsIDB4NDhmMmJkZDYsIDB4NGI3NGJhYTApLCAvLyBBbWJpY29tIFdMMTEwMCAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIkxlQXJ0ZXJ5IiwgICJTWU5DQllBSVIgMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgICJWZXJzaW9uIDAxLjAyIiwgMHg3ZTNiMzI2YSwgMHg0OTg5M2U5MiwgMHg0Yjc0YmFhMCksIC8vIExlQXJ0ZXJ5IFNZTkNCWUFJUiAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKK1BDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFmZiwgMHgwMDA4KSwgLy8gSW50ZXJtZWMgTW9iaWxlTEFOIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiTkVUR0VBUiBNQTQwMSBXaXJlbGVzcyBQQyIsICAiQ2FyZCIsICAiVmVyc2lvbiAwMS4wMCIsIDB4YTM3NDM0ZTksIDB4OTc2MmU4ZjEsIDB4YTU3YWRiOGMpLCAvLyBORVRHRUFSIE1BNDAxIDExTWJwcyA4MDIuMTEgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiSW50ZXJzaWwiLCAgIlBSSVNNIEZyZWVkb20gUENNQ0lBIEFkYXB0ZXIiLCAgIklTTDM3MTAwUCIsICAiRXZhbC1SZXZBIiwgMHg0YjgwMWExNywgMHhmMjIyZWMyZCwgMHg2MzBkNTJiMiwgMHhjMjNhZGMwZSksIC8vIEludGVyc2lsIFBSSVNNIEZyZWVkb20gMTFtYnBzIDgwMi4xMSBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIk9UQyIsICAiV2lyZWxlc3MgQWlyRVpZIDI0MTEtUENDIFdMQU4gQ2FyZCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4NGFjNDQyODcsIDB4MjM1YTZiZWQsIDB4NGI3NGJhYTApLCAvLyBPVEMgV2lyZWxlc3MgQWlyRVpZIDI0MTEtUENDIDExTWJwcyA4MDIuMTEgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiODAyLjExIiwgICIxMU1icHMgV2lyZWxlc3MgTEFOIENhcmQiLCAgInYwOEMxIiwgICIiICAgLCAweGI2N2E2MTBlLCAweDY1NWFhN2I3LCAweDI2NGI0NTFhLCAweDApLCAvLyBEeW5hbGluayBMMTFIRFQgMTFNYnBzIDgwMi4xMSBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGMyNTAsIDB4MDAwMiksIC8vIER5bmFsaW5rIEwxMUhEVCAxMU1icHMgODAyLjExIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJQUk9YSU0iLCAgIlJhbmdlTEFOLURTL0xBTiBQQyBDQVJEIiwgMHhjNjUzNmE1ZSwgMHgzZjM1Nzk3ZCksIC8vIFBST1hJTSBSYW5nZUxBTi1EUy9MQU4gUEMgQ0FSRAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIkFDVElPTlRFQyIsICAiUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAgIjAzODEiLCAgIlJldkEiLCAweDM5MzA4OWRhLCAweGE3MWU2OWQ1LCAweDkwNDcxZmE5LCAweDU3YTY2MTk0KSwgLy8gQUNUSU9OVEVDIFBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgxNjY4LCAweDAxMDEpLCAvLyBBQ1RJT05URUMgUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiM0NvbSIsICAiM0NSV0U3MzdBIEFpckNvbm5lY3QgV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDQxMjQwZTViLCAweDU2MDEwYWYzKSwgLy8gM0NvbSBBaXJDb25uZWN0IDNDUldFNzM3QQorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCIzQ29tIiwgICIzQ1JXRTc3N0EgQWlyQ29ubmVjdCBXaXJlbGVzcyBMQU4gUENJIENhcmQiICAsIDB4NDEyNDBlNWIsIDB4YWZjN2MzM2UpLCAvLyAzQ29tIEFpckNvbm5lY3QgM0NSV0U3NzdBCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFTVVMiLCAgIjgwMl8xMWJfUENfQ0FSRF8yNSIsIDB4NzhmYzA2ZWUsIDB4ZGI5YWE4NDIpLCAvLyBBU1VTIFdMLTEwMCA4MDIuMTFiIFdMQU4gIFBDIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVNVUyIsICAiODAyXzExQl9DRl9DQVJEXzI1IiwgMHg3OGZjMDZlZSwgMHg0NWE1MGMxZSksIC8vIEFTVVMgV0wtMTEwIDgwMi4xMWIgV0xBTiBDRiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkJVRkZBTE8iLCAgIldMSS1DRi1TMTFHIiwgMHgyZGVjZWNlMywgMHg4MjA2N2MxOCksIC8vIEJVRkZBTE8gV0xJLUNGLVMxMUcgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJUaGUgTGlua3N5cyBHcm91cCwgSW5jLiIsICJXaXJlbGVzcyBOZXR3b3JrIENGIENhcmQiLCAiSVNMMzczMDBQIiwgIlJldkEiLCAweGE1ZjQ3MmMyLCAweDljMDU1OThkLCAweGM5MDQ5YTM5LCAweDU3YTY2MTk0KSwgLy8gTGlua3N5cyBXQ0YxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQgKFByaXNtIDIuNSkKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJMaW5rc3lzIiwgICJXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIsICAiIiwgICIiLCAweDczM2NjODEsIDB4YzUyZjM5NSwgMHgwLCAweDApLCAvLyBMaW5rc3lzIFdDRjEyIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCAoUHJpc20gMykKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyOGEsIDB4MDY3MyksIC8vIExpbmtzeXMgV0NGMTIgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIChQcmlzbSAzKQorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIk5FVEdFQVIgTUE0MDFSQSBXaXJlbGVzcyBQQyIsICAiQ2FyZCIsICAiSVNMMzczMDBQIiwgICJFdmFsLVJldkEiLCAweDMwNjQ2N2YsIDB4OTc2MmU4ZjEsIDB4YzkwNDlhMzksIDB4YzIzYWRjMGUpLCAvLyBORVRHRUFSIE1BNDAxUkEgMTFNYnBzIDgwMi4xMSBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwNSksIC8vIEQtTGluayBEQ0YtNjYwVyAgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMmQyLCAweDAwMDEpLCAvLyBNaWNyb3NvZnQgV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwODksIDB4MDAwMiksIC8vIEFueVBvaW50KFRNKSBXaXJlbGVzcyBJSSBQQyBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiRCIsICAiTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiLCAgIlZlcnNpb24gMDEuMDIiLCAgIiIgLCAweDcxYjE4NTg5LCAweGYxNDRlM2FjLCAweDRiNzRiYWEwLCAweDApLCAvLyBELUxpbmsgRFJDLTY1MCA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4OTAwNSwgMHgwMDIxKSwgLy8gQWRhcHRlYyBBV04tODAzMAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDAwYiwgMHg3MTEwKSwgLy8gRC1MaW5rIERXTC02NTAgcmV2IFAgODAyLjExYiBXTEFOIGNhcmQKKwkvLyBQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJELUxpbmsiLCAgIkRXTC02NTAgV2lyZWxlc3MgUEMgQ2FyZCBSZXZQIiwgICJJU0wzNzEwMVAtMTAiLCAgIkEzIiwgMHgxYTQyNGExYywgMHg2ZWE1NzYzMiwgMHhkZDk3YTI2YiwgMHg1NmIyMWY1MiksIC8vIEQtTGluayBEV0wtNjUwIHJldiBQIDgwMi4xMWIgV0xBTiBjYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJJTlRFUlNJTCIsICAgIkktR0FURSAxMU0gUEMgQ2FyZCAvIFBDIENhcmQgcGx1cyIsICAiVmVyc2lvbiAwMS4wMiIsIDB4NzRjNWU0MGQsIDB4ODMwNGZmNzcsIDB4NGI3NGJhYTApLCAvLyBJLUdhdGUgMTFNIFBDIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJCRU5RIiwgICJBV0wxMDAgUENNQ0lBIEFEQVBURVIiLCAgIklTTDM3MzAwUCIsICAiRXZhbC1SZXZBIiwgMHgzNWRhZGM3NCwgMHgxZjdmZWRiLCAweGM5MDQ5YTM5LCAweGMyM2FkYzBlKSwgLy8gYmVuUSBBV0wxMDAgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMGIsIDB4NzMwMCksIC8vIGJlblEgQVdMMTAwIDgwMi4xMWIgV0xBTiBDYXJkCisJLy8gUENNQ0lBX0RFVklDRV9QUk9EX0lEMSgiSU5URVJTSUwiLCAweDc0YzVlNDBkKSwgLy8gSW50ZXJzaWwgUHJpc20gMiBjYXJkCisJLy8gUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTU2LCAweDAwMDIpLCAvLyBJbnRlcnNpbCBQcmlzbSAyIGNhcmQKKworCVBDTUNJQV9ERVZJQ0VfTlVMTAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHByaXNtMl9jc19pZHMpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBwcmlzbTJfY3NfZHJpdmVyID0geworCS5kcnYgPSB7CisJCS5uYW1lID0gInByaXNtMl9jcyIsCisJfSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisJLnN1c3BlbmQgPSBwcmlzbTJfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gcHJpc20yX2NzX3Jlc3VtZSwKKwkucmVtb3ZlID0gcHJpc20yX2NzX3JlbW92ZSwKKwkucHJvYmUgPSBwcmlzbTJfY3NfcHJvYmUsCisJLmlkX3RhYmxlID0gcHJpc20yX2NzX2lkcywKKyNlbHNlCisJLmF0dGFjaCA9IHByaXNtMnN0YV9hdHRhY2gsCisJLmRldGFjaCA9IHByaXNtMnN0YV9kZXRhY2gsCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDEyKQorCS5pZF90YWJsZSA9IHByaXNtMl9jc19pZHMsCisJLmV2ZW50ID0gIHByaXNtMnN0YV9ldmVudCwKKyNlbmRpZiAvLyA+IDIuNi4xMgorI2VuZGlmIC8vIDw9IDIuNi4xNQorfTsKKyNlbmRpZiAvKiBrZXJuZWxfdmVyc2lvbiAqLworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQorI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCitkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENGR19DSEVDSyhmbiwgcmV0ZikgXAorZG8geyBpbnQgcmV0ID0gKHJldGYpOyBcCitpZiAocmV0ICE9IDApIHsgXAorICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiQ2FyZFNlcnZpY2VzKCIgI2ZuICIpIHJldHVybmVkICVkXG4iLCByZXQpOyBcCisgICAgICAgIGNzX2Vycm9yKHBkZXYsIGZuLCByZXQpOyBcCisgICAgICAgIGdvdG8gbmV4dF9lbnRyeTsgXAorfSBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBwcmlzbTJfY3NfcmVtb3ZlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bGFuZGV2aWNlICAqd2xhbmRldjsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNykKKyAgICAgICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwZGV2KTsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldiA9IHBkZXYtPnByaXY7CisjZWxzZQorCXdsYW5kZXYgPSBsaW5rLT5wcml2OworI2VuZGlmCisKKwlpZiAod2xhbmRldikgeworCQlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCQl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldik7CisJCXdsYW5fdW5zZXR1cCh3bGFuZGV2KTsKKwkJaWYgKHdsYW5kZXYtPnByaXYpIHsKKwkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCQkJd2xhbmRldi0+cHJpdiA9IE5VTEw7CisJCQlpZiAoaHcpIHsKKwkJCQloZmEzODR4X2Rlc3Ryb3koaHcpOworCQkJCWtmcmVlKGh3KTsKKwkJCX0KKwkJfQorCQlrZnJlZSh3bGFuZGV2KTsKKwl9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJcGRldi0+cHJpdiA9IE5VTEw7CisgICAgICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShwZGV2KTsKKyNlbHNlCisgICAgICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKKwkgICAgICAgIGlmIChsaW5rLT53aW4pCisJCQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKKwkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOworCQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQlpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQorCQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisKKwkJbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJfQorCisJbGluay0+cHJpdiA9IE5VTEw7CisJa2ZyZWUobGluayk7CisjZW5kaWYKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHByaXNtMl9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bGFuZGV2aWNlICAqd2xhbmRldjsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNykKKyAgICAgICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwZGV2KTsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldiA9IHBkZXYtPnByaXY7CisJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworI2Vsc2UKKwl3bGFuZGV2ID0gbGluay0+cHJpdjsKKworICAgICAgICBsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKKyAgICAgICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgeworCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisJCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKKwl9CisjZW5kaWYKKworCURCRkVYSVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmlzbTJfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bGFuZGV2aWNlICAqd2xhbmRldjsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNykKKyAgICAgICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwZGV2KTsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldiA9IHBkZXYtPnByaXY7CisJLy8gWFhYIGRvIHNvbWV0aGluZyBoZXJlPworI2Vsc2UKKwl3bGFuZGV2ID0gbGluay0+cHJpdjsKKyAgICAgICAgbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOworICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7CisgICAgICAgICAgICAgICAgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwkJLy8gWFhYIGRvIHNvbWV0aGluZyBoZXJlPworCX0KKyNlbmRpZgorCisKKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCWludCBydmFsID0gMDsKKwlzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90ICpodyA9IE5VTEw7CisKKyAgICAgICAgY29uZmlnX2luZm9fdCBzb2NrZXRjb25mOworICAgICAgICBjaXNwYXJzZV90ICpwYXJzZSA9IE5VTEw7CisJdHVwbGVfdCB0dXBsZTsKKwl1aW50OF90CWJ1Zls2NF07CisgICAgICAgIGludCBsYXN0X2ZuLCBsYXN0X3JldDsKKyAgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTcpCisJZGV2X2xpbmtfdCAqbGluazsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJLyogU2V0IHVwIGludGVycnVwdCB0eXBlICovCisgICAgICAgIHBkZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworI2Vsc2UKKyAgICAgICAgbGluayA9IGttYWxsb2Moc2l6ZW9mKGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKGxpbmsgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgbWVtc2V0KGxpbmssIDAsIHNpemVvZihkZXZfbGlua190KSk7CisKKyAgICAgICAgbGluay0+Y29uZi5WY2MgPSAzMzsKKyAgICAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisKKyAgICAgICAgbGluay0+aGFuZGxlID0gcGRldjsKKyAgICAgICAgcGRldi0+aW5zdGFuY2UgPSBsaW5rOworICAgICAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKKworI2VuZGlmCisKKwkvLyBWQ0MgY3JhcD8KKyAgICAgICAgcGFyc2UgPSBrbWFsbG9jKHNpemVvZihjaXNwYXJzZV90KSwgR0ZQX0tFUk5FTCk7CisKKwl3bGFuZGV2ID0gY3JlYXRlX3dsYW4oKTsKKwlpZiAoIXdsYW5kZXYgfHwgIXBhcnNlKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlydmFsID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgaHcgc3RydWN0IGZvciBub3cgKi8KKwloZmEzODR4X2NyZWF0ZShodywgMCwgMCwgTlVMTCk7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCWh3LT5wZGV2ID0gcGRldjsKKwlwZGV2LT5wcml2ID0gd2xhbmRldjsKKyNlbHNlCisJaHctPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSB3bGFuZGV2OworI2VuZGlmCisKKyAgICAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKyAgICAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CisgICAgICAgIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKyAgICAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisgICAgICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKyAgICAgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShwZGV2LCAmdHVwbGUpKTsKKyAgICAgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEocGRldiwgJnR1cGxlKSk7CisgICAgICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShwZGV2LCAmdHVwbGUsIHBhcnNlKSk7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorICAgICAgICBwZGV2LT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CisgICAgICAgIHBkZXYtPmNvbmYuUHJlc2VudCA9IHBhcnNlLT5jb25maWcucm1hc2tbMF07CisjZWxzZQorICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CisgICAgICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLT5jb25maWcucm1hc2tbMF07CisKKwlsaW5rLT5jb25mLlZjYyA9IHNvY2tldGNvbmYuVmNjOworI2VuZGlmCisgICAgICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAorICAgICAgICAgICAgICAgICBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhwZGV2LCAmc29ja2V0Y29uZikpOworCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShwZGV2LCAmdHVwbGUpKTsKKyAgICAgICAgZm9yICg7OykgeworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLT5jZnRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBDRkdfQ0hFQ0soR2V0VHVwbGVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKHBkZXYsICZ0dXBsZSkpOworICAgICAgICAgICAgICAgIENGR19DSEVDSyhQYXJzZVR1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNtY2lhX3BhcnNlX3R1cGxlKHBkZXYsICZ0dXBsZSwgcGFyc2UpKTsKKworICAgICAgICAgICAgICAgIGlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRmbHQgPSAqY2ZnOworICAgICAgICAgICAgICAgIGlmIChjZmctPmluZGV4ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRfZW50cnk7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworI2Vsc2UKKyAgICAgICAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisgICAgICAgICAgICAgICAgaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworICAgICAgICAgICAgICAgICAgICAgICAgcGRldi0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KKyAgICAgICAgICAgICAgICAvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldGNvbmYuVmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAgJiYgIXByaXNtMl9pZ25vcmV2Y2MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwgIiAgVmNjIG1pc21hdGNoIC0gc2tpcHBpbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoaXMgZW50cnlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRfZW50cnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ja2V0Y29uZi5WY2MgIT0gZGZsdC52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMCAmJiAhcHJpc20yX2lnbm9yZXZjYykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiICBWY2MgKGRlZmF1bHQpIG1pc21hdGNoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIHNraXBwaW5nIHRoaXMgZW50cnlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRfZW50cnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgcGRldi0+Y29uZi5WcHAgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworI2VuZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuVnBwID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKyNlbmRpZgorCQl9CisKKwkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJCS8qIEhBQ0s6IGR1ZSB0byBhIGJhZCBDSVMuLi4ud2UgQUxXQVlTIG5lZWQgYW4gaW50ZXJydXB0ICovCisJCS8qIGlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkgKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJCXBkZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisjZWxzZQorCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworI2VuZGlmCisKKwkJLyogSU8gd2luZG93IHNldHRpbmdzICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCQlwZGV2LT5pby5OdW1Qb3J0czEgPSBwZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJcGRldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlwZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJcGRldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWlmICAoIHBkZXYtPmlvLkJhc2VQb3J0MSAhPSAwICkgeworCQkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIkJyYWluIGRhbWFnZWQgQ0lTOiBoYXJkIGNvZGVkIGlvYmFzZT0iCisJCQkJIjB4JXgsIHRyeSBsZXR0aW5nIHBjbWNpYV9jcyBkZWNpZGUuLi5cbiIsCisJCQkJcGRldi0+aW8uQmFzZVBvcnQxICk7CisJCQkJcGRldi0+aW8uQmFzZVBvcnQxID0gMDsKKwkJCX0KKwkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMyID0gcGRldi0+aW8uQXR0cmlidXRlczE7CisJCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCXBkZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQl9CisJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCUNGR19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykpOworI2Vsc2UKKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlpZiAgKCBsaW5rLT5pby5CYXNlUG9ydDEgIT0gMCApIHsKKwkJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJCcmFpbiBkYW1hZ2VkIENJUzogaGFyZCBjb2RlZCBpb2Jhc2U9IgorCQkJCSIweCV4LCB0cnkgbGV0dGluZyBwY21jaWFfY3MgZGVjaWRlLi4uXG4iLAorCQkJCWxpbmstPmlvLkJhc2VQb3J0MSApOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IDA7CisJCQl9CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJfQorCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQlDRkdfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmbGluay0+aW8pKTsKKyNlbmRpZgorCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJbmV4dF9lbnRyeToKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKHBkZXYsICZ0dXBsZSkpOworCisJfQorCisJLyogTGV0IHBjbWNpYSBrbm93IHRoZSBkZXZpY2UgbmFtZSAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlwZGV2LT5kZXZfbm9kZSA9ICZody0+bm9kZTsKKyNlbHNlCisJbGluay0+ZGV2ID0gJmh3LT5ub2RlOworI2VuZGlmCisKKwkvKiBSZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgYW5kIGdldCBhc3NpZ25lZCBhIG5hbWUgKi8KKwlTRVRfTU9EVUxFX09XTkVSKHdsYW5kZXYtPm5ldGRldik7CisJU0VUX05FVERFVl9ERVYod2xhbmRldi0+bmV0ZGV2LCAgJmhhbmRsZV90b19kZXYocGRldikpOworCWlmIChyZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpICE9IDApIHsKKwkJV0xBTl9MT0dfTk9USUNFKCJwcmlzbTJzdGFfY3M6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJc3RyY3B5KGh3LT5ub2RlLmRldl9uYW1lLCB3bGFuZGV2LT5uYW1lKTsKKworCS8qIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEgKi8KKwkvKiBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUgKi8KKwkvKiBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlpZiAocGRldi0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCXBkZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwkJcGRldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJCXBkZXYtPmlycS5IYW5kbGVyID0gaGZhMzg0eF9pbnRlcnJ1cHQ7CisJCXBkZXYtPmlycS5JbnN0YW5jZSA9IHdsYW5kZXY7CisJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShwZGV2LCAmcGRldi0+aXJxKSk7CisJfQorI2Vsc2UKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwkJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJCWxpbmstPmlycS5IYW5kbGVyID0gaGZhMzg0eF9pbnRlcnJ1cHQ7CisJCWxpbmstPmlycS5JbnN0YW5jZSA9IHdsYW5kZXY7CisJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShwZGV2LCAmbGluay0+aXJxKSk7CisJfQorI2VuZGlmCisKKwkvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cCAqLworCS8qIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUgKi8KKwkvKiBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLiAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwZGV2LCAmcGRldi0+Y29uZikpOworI2Vsc2UKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwZGV2LCAmbGluay0+Y29uZikpOworI2VuZGlmCisKKwkvKiBGaWxsIHRoZSBuZXRkZXZpY2Ugd2l0aCB0aGlzIGluZm8gKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldi0+bmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnEuQXNzaWduZWRJUlE7CisJd2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIgPSBwZGV2LT5pby5CYXNlUG9ydDE7CisjZWxzZQorCXdsYW5kZXYtPm5ldGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCXdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworI2VuZGlmCisKKwkvKiBBbmQgdGhlIHJlc3Qgb2YgdGhlIGh3IHN0cnVjdHVyZSAqLworCWh3LT5pcnEgPSB3bGFuZGV2LT5uZXRkZXYtPmlycTsKKwlody0+aW9iYXNlID0gd2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTcpCisJbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKKwlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworI2VuZGlmCisKKwkvKiBBbmQgbm93IHdlJ3JlIGRvbmUhICovCisJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisKKwlnb3RvIGRvbmU7CisKKyBjc19mYWlsZWQ6CisgICAgICAgIGNzX2Vycm9yKHBkZXYsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKworZmFpbGVkOgorCS8vIHdsYW5kZXYsIGh3LCBldGMgZXRjLi4KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJcGRldi0+cHJpdiA9IE5VTEw7CisjZWxzZQorCXBkZXYtPmluc3RhbmNlID0gTlVMTDsKKwlpZiAobGluaykgeworCQlsaW5rLT5wcml2ID0gTlVMTDsKKwkJa2ZyZWUobGluayk7CisJfQorI2VuZGlmCisJaWYgKHdsYW5kZXYpIHsKKwkJd2xhbl91bnNldHVwKHdsYW5kZXYpOworCQlpZiAod2xhbmRldi0+cHJpdikgeworCQkJaHcgPSB3bGFuZGV2LT5wcml2OworCQkJd2xhbmRldi0+cHJpdiA9IE5VTEw7CisJCQlpZiAoaHcpIHsKKwkJCQloZmEzODR4X2Rlc3Ryb3koaHcpOworCQkJCWtmcmVlKGh3KTsKKwkJCX0KKwkJfQorCQlrZnJlZSh3bGFuZGV2KTsKKwl9CisKK2RvbmU6CisJaWYgKHBhcnNlKSBrZnJlZShwYXJzZSk7CisKKwlEQkZFWElUOworCXJldHVybiBydmFsOworfQorI2Vsc2UgIC8vIDw9IDIuNi4xNQorI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCitkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENGR19DSEVDSyhmbiwgcmV0ZikgXAorZG8geyBpbnQgcmV0ID0gKHJldGYpOyBcCitpZiAocmV0ICE9IDApIHsgXAorICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiQ2FyZFNlcnZpY2VzKCIgI2ZuICIpIHJldHVybmVkICVkXG4iLCByZXQpOyBcCisgICAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgZm4sIHJldCk7IFwKKyAgICAgICAgZ290byBuZXh0X2VudHJ5OyBcCit9IFwKK30gd2hpbGUgKDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfYXR0YWNoCisqCisqIEhhbGYgb2YgdGhlIGF0dGFjaC9kZXRhY2ggcGFpci4gIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIGRldmljZQorKiBpbnN0YW5jZSB3aXRoIENhcmQgU2VydmljZXMuICBJbiB0aGlzIGNhc2UsIGl0IGFsc28gY3JlYXRlcyB0aGUKKyogd2xhbmRldiBzdHJ1Y3R1cmUgYW5kIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4gIFRoZXNlIGFyZQorKiBsaW5rZWQgdG8gdGhlIGRldmljZSBpbnN0YW5jZSB2aWEgaXRzIHByaXYgbWVtYmVyLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJQSB2YWxpZCBwdHIgdG8gZGV2X2xpbmtfdCBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgKGluc21vZC9pbml0X21vZHVsZS9yZWdpc3Rlcl9wY2NhcmRfZHJpdmVyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitkZXZfbGlua190ICpwcmlzbTJzdGFfYXR0YWNoKHZvaWQpCit7CisJY2xpZW50X3JlZ190CQljbGllbnRfcmVnOworCWludAkJCXJlc3VsdDsKKwlkZXZfbGlua190CQkqbGluayA9IE5VTEw7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90CQkqaHcgPSBOVUxMOworCisJREJGRU5URVI7CisKKwkvKiBBbGxvYyBvdXIgc3RydWN0dXJlcyAqLworCWxpbmsgPQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbGluayB8fCAoKHdsYW5kZXYgPSBjcmVhdGVfd2xhbigpKSA9PSBOVUxMKSkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwkvKiBDbGVhciBhbGwgdGhlIHN0cnVjdHMgKi8KKwltZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSk7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBodyBzdHJ1Y3QgZm9yIG5vdyAqLworCWhmYTM4NHhfY3JlYXRlKGh3LCAwLCAwLCBOVUxMKTsKKwlody0+d2xhbmRldiA9IHdsYW5kZXY7CisKKwkvKiBJbml0aWFsaXplIHRoZSBQQyBjYXJkIGRldmljZSBvYmplY3QuICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKwlpbml0X3RpbWVyKCZsaW5rLT5yZWxlYXNlKTsKKwlsaW5rLT5yZWxlYXNlLmZ1bmN0aW9uID0gJnByaXNtMnN0YV9yZWxlYXNlOworCWxpbmstPnJlbGVhc2UuZGF0YSA9ICh1X2xvbmcpbGluazsKKyNlbmRpZgorCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCWxpbmstPnByaXYgPSB3bGFuZGV2OworI2lmIChkZWZpbmVkKENTX1JFTEVBU0VfQ09ERSkgJiYgKENTX1JFTEVBU0VfQ09ERSA8IDB4MjkxMSkpCisJbGluay0+aXJxLkluc3RhbmNlID0gd2xhbmRldjsKKyNlbmRpZgorCisJLyogTGluayBpbiB0byB0aGUgbGlzdCBvZiBkZXZpY2VzIG1hbmFnZWQgYnkgdGhpcyBkcml2ZXIgKi8KKwlsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CisJZGV2X2xpc3QgPSBsaW5rOworCisJLyogUmVnaXN0ZXIgd2l0aCBDYXJkIFNlcnZpY2VzICovCisJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDExKSApCisJY2xpZW50X3JlZy5BdHRyaWJ1dGVzID0gSU5GT19JT19DTElFTlQgfCBJTkZPX0NBUkRfU0hBUkU7CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTMpICkKKwljbGllbnRfcmVnLkV2ZW50TWFzayA9CisJCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKKwkJQ1NfRVZFTlRfUkVTRVRfUkVRVUVTVCB8CisJCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8CisJCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7CisJY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnByaXNtMnN0YV9ldmVudDsKKyNlbmRpZgorCisJY2xpZW50X3JlZy5WZXJzaW9uID0gMHgwMjEwOworCWNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CisKKwlyZXN1bHQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZWdpc3RlckNsaWVudCwgcmVzdWx0KTsKKwkJcHJpc20yc3RhX2RldGFjaChsaW5rKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZ290byBkb25lOworCisgZmFpbGVkOgorCWlmIChsaW5rKQlrZnJlZShsaW5rKTsKKwlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7CisJaWYgKGh3KQkJa2ZyZWUoaHcpOworCWxpbmsgPSBOVUxMOworCisgZG9uZToKKwlEQkZFWElUOworCXJldHVybiBsaW5rOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZGV0YWNoCisqCisqIFJlbW92ZSBvbmUgb2YgdGhlIGRldmljZSBpbnN0YW5jZXMgbWFuYWdlZCBieSB0aGlzIGRyaXZlci4KKyogICBTZWFyY2ggdGhlIGxpc3QgZm9yIHRoZSBnaXZlbiBpbnN0YW5jZSwKKyogICBjaGVjayBvdXIgZmxhZ3MgZm9yIGEgd2FpdGluZyB0aW1lcidkIHJlbGVhc2UgY2FsbAorKiAgIGNhbGwgcmVsZWFzZQorKiAgIERlcmVnaXN0ZXIgdGhlIGluc3RhbmNlIHdpdGggQ2FyZCBTZXJ2aWNlcworKiAgIChuZXRkZXZpY2UpIHVucmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLgorKiAgIHVubGluayB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgbGlzdAorKiAgIGZyZWUgdGhlIGxpbmssIHByaXYsIGFuZCBwcml2LT5wcml2IG1lbW9yeQorKiBOb3RlOiB0aGUgZGV2X2xpc3QgdmFyaWFibGUgaXMgYSBkcml2ZXIgc2NvcGVkIHN0YXRpYyB1c2VkIHRvCisqCW1haW50YWluIGEgbGlzdCBvZiBkZXZpY2UgaW5zdGFuY2VzIG1hbmFnZWQgYnkgdGhpcworKglkcml2ZXIuCisqCisqIEFyZ3VtZW50czoKKyoJbGluawlwdHIgdG8gdGhlIGluc3RhbmNlIHRvIGRldGFjaAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJdGhlIGxpbmsgc3RydWN0dXJlIGlzIGdvbmUsIHRoZSBuZXRkZXZpY2UgaXMgZ29uZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCU1pZ2h0IGJlIGludGVycnVwdCwgZG9uJ3QgYmxvY2suCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2RldGFjaChkZXZfbGlua190ICpsaW5rKQoreworCWRldl9saW5rX3QJCSoqbGlua3A7CisJd2xhbmRldmljZV90CQkqd2xhbmRldjsKKwloZmEzODR4X3QJCSpodzsKKworCURCRkVOVEVSOworCisJLyogTG9jYXRlIHByZXYgZGV2aWNlIHN0cnVjdHVyZSAqLworCWZvciAobGlua3AgPSAmZGV2X2xpc3Q7ICpsaW5rcDsgbGlua3AgPSAmKCpsaW5rcCktPm5leHQpIHsKKwkJaWYgKCpsaW5rcCA9PSBsaW5rKSBicmVhazsKKwl9CisKKwlpZiAoKmxpbmtwICE9IE5VTEwpIHsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorCQl1bnNpZ25lZCBsb25nCWZsYWdzOworCQkvKiBHZXQgcmlkIG9mIGFueSB0aW1lcidkIHJlbGVhc2UgY2FsbCAqLworCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJY2xpKCk7CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisJCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9SRUxFQVNFX1BFTkRJTkcpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZsaW5rLT5yZWxlYXNlKTsKKwkJCWxpbmstPnN0YXRlICY9IH5ERVZfUkVMRUFTRV9QRU5ESU5HOworCQl9CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworI2VuZGlmCisKKwkJLyogSWYgbGluayBzYXlzIHdlJ3JlIHN0aWxsIGNvbmZpZydkLCBjYWxsIHJlbGVhc2UgKi8KKwkJaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgeworCQkJcHJpc20yc3RhX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKKwkJCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9TVEFMRV9DT05GSUcpIHsKKwkJCQlsaW5rLT5zdGF0ZSB8PSBERVZfU1RBTEVfTElOSzsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQkvKiBUZWxsIENhcmQgU2VydmljZXMgd2UncmUgbm90IGFyb3VuZCBhbnkgbW9yZSAqLworCQlpZiAobGluay0+aGFuZGxlKSB7CisJCQlwY21jaWFfZGVyZWdpc3Rlcl9jbGllbnQobGluay0+aGFuZGxlKTsKKwkJfQorCisJCS8qIFVubGluayBkZXZpY2Ugc3RydWN0dXJlLCBmcmVlIGJpdHMgKi8KKwkJKmxpbmtwID0gbGluay0+bmV4dDsKKwkJaWYgKCBsaW5rLT5wcml2ICE9IE5VTEwgKSB7CisJCQl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopbGluay0+cHJpdjsKKwkJCXA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldik7CisJCQlpZiAobGluay0+ZGV2ICE9IE5VTEwpIHsKKwkJCQl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldik7CisJCQl9CisJCQl3bGFuX3Vuc2V0dXAod2xhbmRldik7CisJCQlpZiAod2xhbmRldi0+cHJpdikgeworCQkJCWh3ID0gd2xhbmRldi0+cHJpdjsKKwkJCQl3bGFuZGV2LT5wcml2ID0gTlVMTDsKKwkJCQlpZiAoaHcpIHsKKwkJCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCQkJa2ZyZWUoaHcpOworCQkJCX0KKwkJCX0KKwkJCWxpbmstPnByaXYgPSBOVUxMOworCQkJa2ZyZWUod2xhbmRldik7CisJCX0KKwkJa2ZyZWUobGluayk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfY29uZmlnCisqCisqIEhhbGYgb2YgdGhlIGNvbmZpZy9yZWxlYXNlIHBhaXIuICBVc3VhbGx5IGNhbGxlZCBpbiByZXNwb25zZSB0bworKiBhIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LiAgQXQgdGhpcyBwb2ludCwgd2UgX2tub3dfIHRoZXJlJ3Mgc29tZQorKiBwaHlzaWNhbCBkZXZpY2UgcHJlc2VudC4gIFRoYXQgbWVhbnMgd2UgY2FuIHN0YXJ0IHBva2luZyBhcm91bmQKKyogYXQgdGhlIENJUyBhbmQgYXQgYW55IGRldmljZSBzcGVjaWZpYyBjb25maWcgZGF0YSB3ZSB3YW50LgorKgorKiBOb3RlIHRoZSBnb3RvcyBhbmQgdGhlIG1hY3Jvcy4gIEkgcmVjb2RlZCB0aGlzIG9uY2Ugd2l0aG91dAorKiB0aGVtLCBhbmQgaXQgZ290IGluY3JlZGlibHkgdWdseS4gIEl0J3MgYWN0dWFsbHkgc2ltcGxlciB3aXRoCisqIHRoZW0uCisqCisqIEFyZ3VtZW50czoKKyoJbGluawl0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgY3JlYXRlZCBpbiBhdHRhY2ggdGhhdAorKgkJcmVwcmVzZW50cyB0aGlzIGRldmljZSBpbnN0YW5jZS4KKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCVJlc291cmNlcyAoaXJxLCBpbywgbWVtKSBhcmUgYWxsb2NhdGVkCisqCVRoZSBwY21jaWEgZGV2X2xpbmstPm5vZGUtPm5hbWUgaXMgc2V0CisqCShGb3IgbmV0Y2FyZHMpIFRoZSBkZXZpY2Ugc3RydWN0dXJlIGlzIGZpbmlzaGVkIGFuZCwKKyoJICBtb3N0IGltcG9ydGFudGx5LCByZWdpc3RlcmVkLiAgVGhpcyBtZWFucyB0aGF0IHRoZXJlCisqCSAgaXMgbm93IGEgX25hbWVkXyBkZXZpY2UgdGhhdCBjYW4gYmUgY29uZmlndXJlZCBmcm9tCisqCSAgdXNlcmxhbmQuCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBmcm9tIGEgdGltZXIuICBEb24ndCBibG9jayEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCitkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENGR19DSEVDSyhmbiwgcmV0ZikgXAorZG8geyBpbnQgcmV0ID0gKHJldGYpOyBcCitpZiAocmV0ICE9IDApIHsgXAorICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiQ2FyZFNlcnZpY2VzKCIgI2ZuICIpIHJldHVybmVkICVkXG4iLCByZXQpOyBcCisgICAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgZm4sIHJldCk7IFwKKyAgICAgICAgZ290byBuZXh0X2VudHJ5OyBcCit9IFwKK30gd2hpbGUgKDApCisKK3ZvaWQgcHJpc20yc3RhX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQoreworCWNsaWVudF9oYW5kbGVfdAkJaGFuZGxlOworCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3OworCWludAkJCWxhc3RfZm47CisJaW50CQkJbGFzdF9yZXQ7CisJdHVwbGVfdAkJCXR1cGxlOworCWNpc3BhcnNlX3QJCXBhcnNlOworCWNvbmZpZ19pbmZvX3QJCXNvY2tldGNvbmY7CisJVUlOVDgJCQlidWZbNjRdOworCWludAkJCW1pblZjYyA9IDA7CisJaW50CQkJbWF4VmNjID0gMDsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90CWRmbHQgPSB7IDAgfTsKKworCURCRkVOVEVSOworCisJaGFuZGxlID0gbGluay0+aGFuZGxlOworCXdsYW5kZXYgPSAod2xhbmRldmljZV90KilsaW5rLT5wcml2OworCWh3ID0gd2xhbmRldi0+cHJpdjsKKworCS8qIENvbGxlY3QgdGhlIGNvbmZpZyByZWdpc3RlciBpbmZvICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisKKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CisKKwkvKiBDb25maWd1cmUgY2FyZCAqLworCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7CisKKwkvKiBBY3F1aXJlIHRoZSBjdXJyZW50IHNvY2tldCBjb25maWcgKG5lZWQgVmNjIHNldHRpbmcpICovCisJQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJnNvY2tldGNvbmYpKTsKKworCS8qIExvb3AgdGhyb3VnaCB0aGUgY29uZmlnIHRhYmxlIGVudHJpZXMgdW50aWwgd2UgZmluZCBvbmUgdGhhdCB3b3JrcyAqLworCS8qIEFzc3VtZXMgYSBjb21wbGV0ZSBhbmQgdmFsaWQgQ0lTICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCUNGR19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworCQlDRkdfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKworCQlpZiAoY2ZnLT5pbmRleCA9PSAwKSBnb3RvIG5leHRfZW50cnk7CisJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworCisJCS8qIExldHMgcHJpbnQgb3V0IHRoZSBWY2MgdGhhdCB0aGUgY29udHJvbGxlcitwY21jaWEtY3Mgc2V0CisJCSAqIGZvciB1cywgY2F1c2UgdGhhdCdzIHdoYXQgd2UncmUgZ29pbmcgdG8gdXNlLgorCQkgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwiSW5pdGlhbCBWY2M9JWQvMTB2XG4iLCBzb2NrZXRjb25mLlZjYyk7CisJCWlmIChwcmlzbTJfaWdub3JldmNjKSB7CisJCQlsaW5rLT5jb25mLlZjYyA9IHNvY2tldGNvbmYuVmNjOworCQkJZ290byBza2lwdmNjOworCQl9CisKKwkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisJCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisJCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwgIlZjYyBvYnRhaW5lZCBmcm9tIGN1cnR1cGwuVk5PTVxuIik7CisJCQltaW5WY2MgPSBtYXhWY2MgPQorCQkJCWNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKKwkJfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwgIlZjYyBzZXQgZnJvbSBkZmx0LlZOT01cbiIpOworCQkJbWluVmNjID0gbWF4VmNjID0KKwkJCQlkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisJCX0gZWxzZSBpZiAoKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNQVgpKSAmJgorCQkJICAgKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNSU4pKSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJWY2Mgc2V0IGZyb20gY3VydHVwbChWTUlOLFZNQVgpXG4iKTsJCQltaW5WY2MgPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk1JTl0vMTAwMDA7CisJCQltYXhWY2MgPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk1BWF0vMTAwMDA7CisJCX0gZWxzZSBpZiAoKGRmbHQudmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNQVgpKSAmJgorCQkJICAgKGRmbHQudmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNSU4pKSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJWY2Mgc2V0IGZyb20gZGZsdChWTUlOLFZNQVgpXG4iKTsKKwkJCW1pblZjYyA9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTUlOXS8xMDAwMDsKKwkJCW1heFZjYyA9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTUFYXS8xMDAwMDsKKwkJfQorCisJCWlmICggc29ja2V0Y29uZi5WY2MgPj0gbWluVmNjICYmIHNvY2tldGNvbmYuVmNjIDw9IG1heFZjYykgeworCQkJbGluay0+Y29uZi5WY2MgPSBzb2NrZXRjb25mLlZjYzsKKwkJfSBlbHNlIHsKKwkJCS8qIFtNU01dOiBOb3RlIHRoYXQgSSd2ZSBnaXZlbiB1cCB0cnlpbmcgdG8gY2hhbmdlCisJCQkgKiB0aGUgVmNjIGlmIGEgY2hhbmdlIGlzIGluZGljYXRlZC4gIEl0IHNlZW1zIHRoZQorCQkJICogc3lzdGVtJnNvY2tldGNvbnRyb2xsZXImY2FyZCB2ZW5kb3JzIGNhbid0IHNlZW0KKwkJCSAqIHRvIGdldCBpdCByaWdodCwgc28gSSdtIHRpcmVkIG9mIHRyeWluZyB0byBoYWNrCisJCQkgKiBteSB3YXkgYXJvdW5kIGl0LiAgcGNtY2lhLWNzIGRvZXMgaXRzIGJlc3QgdXNpbmcKKwkJCSAqIHRoZSB2b2x0YWdlIHNlbnNlIHBpbnMgYnV0IHNvbWV0aW1lcyB0aGUgY29udHJvbGxlcgorCQkJICogbGllcy4gIFRoZW4sIGV2ZW4gaWYgd2UgaGF2ZSBhIGdvb2QgcmVhZCBvbiB0aGUgVlMKKwkJCSAqIHBpbnMsIHNvbWUgc3lzdGVtIGRlc2lnbnMgd2lsbCBzaWxlbnRseSBpZ25vcmUgb3VyCisJCQkgKiByZXF1ZXN0cyB0byBzZXQgdGhlIHZvbHRhZ2UuICBBZGRpdGlvbmFsbHksIHNvbWUKKwkJCSAqIHZlbmRvcnMgaGF2ZSAzLjN2IGluZGljYXRlZCBvbiB0aGVpciBzZW5zZSBwaW5zLAorCQkJICogYnV0IDV2IHNwZWNpZmllZCBpbiB0aGUgQ0lTIG9yIHZpY2UtdmVyc2EuICBJJ3ZlCisJCQkgKiBoYWQgaXQuICBNeSBvbmx5IHJlY29tbWVuZGF0aW9uIGlzICJsZXQgdGhlIGJ1eWVyCisJCQkgKiBiZXdhcmUiLiAgWW91ciBzeXN0ZW0gbWlnaHQgc3VwcGx5IDV2IHRvIGEgM3YgY2FyZAorCQkJICogKHBvc3NpYmx5IGNhdXNpbmcgZGFtYWdlKSBvciBhIDN2IGNhcGFibGUgc3lzdGVtCisJCQkgKiBtaWdodCBzdXBwbHkgNXYgdG8gYSAzdiBjYXBhYmxlIGNhcmQgKHdhc3RpbmcKKwkJCSAqIHByZWNpb3VzIGJhdHRlcnkgbGlmZSkuCisJCQkgKiBNeSBvbmx5IHJlY29tbWVuZGF0aW9uIChpZiB5b3UgY2FyZSkgaXMgdG8gZ2V0CisJCQkgKiB5b3Vyc2VsZiBhbiBleHRlbmRlciBjYXJkIChJIGRvbid0IGtub3cgd2hlcmUsIEkKKwkJCSAqIGhhdmUgb25seSBvbmUgbXlzZWxmKSBhbmQgYSBtZXRlciBhbmQgdGVzdCBpdCBmb3IKKwkJCSAqIHlvdXJzZWxmLgorCQkJICovCisJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KK3NraXB2Y2M6CisJCVdMQU5fTE9HX0RFQlVHKDEsICJsaW5rLT5jb25mLlZjYz0lZFxuIiwgbGluay0+Y29uZi5WY2MpOworCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQkvKiBIQUNLOiBkdWUgdG8gYSBiYWQgQ0lTLi4uLndlIEFMV0FZUyBuZWVkIGFuIGludGVycnVwdCAqLworCQkvKiBpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpICovCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWlmICAoIGxpbmstPmlvLkJhc2VQb3J0MSAhPSAwICkgeworCQkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIkJyYWluIGRhbWFnZWQgQ0lTOiBoYXJkIGNvZGVkIGlvYmFzZT0iCisJCQkJIjB4JXgsIHRyeSBsZXR0aW5nIHBjbWNpYV9jcyBkZWNpZGUuLi5cbiIsCisJCQkJbGluay0+aW8uQmFzZVBvcnQxICk7CisJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gMDsKKwkJCX0KKwkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7CisJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQl9CisKKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJQ0ZHX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKTsKKworCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCituZXh0X2VudHJ5OgorCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCX0KKworCS8qIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEgKi8KKwkvKiBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUgKi8KKwkvKiBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAqLworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJeworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTEpICkKKwkJaW50CQkJaTsKKwkJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0lORk8yX1ZBTElEIHwgSVJRX0xFVkVMX0lEOworCQlpZiAoaXJxX2xpc3RbMF0gPT0gLTEpCisJCQlsaW5rLT5pcnEuSVJRSW5mbzIgPSBpcnFfbWFzazsKKwkJZWxzZQorCQkJZm9yIChpPTA7IGk8NDsgaSsrKQorCQkJCWxpbmstPmlycS5JUlFJbmZvMiB8PSAxIDw8IGlycV9saXN0W2ldOworI2Vsc2UKKwkJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworI2VuZGlmCisJCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCQlsaW5rLT5pcnEuSGFuZGxlciA9IGhmYTM4NHhfaW50ZXJydXB0OworCQlsaW5rLT5pcnEuSW5zdGFuY2UgPSB3bGFuZGV2OworCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisJfQorCisJLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAgKi8KKwkvKiB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlICovCisJLyogY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4gKi8KKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisKKwkvKiBGaWxsIHRoZSBuZXRkZXZpY2Ugd2l0aCB0aGlzIGluZm8gKi8KKwl3bGFuZGV2LT5uZXRkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKwl3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKworCS8qIFJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlXTEFOX0xPR19JTkZPKCIlczogaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAorCQlkZXZfaW5mbywgbGluay0+Y29uZi5Db25maWdJbmRleCwKKwkJbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKKwlpZiAobGluay0+Y29uZi5WcHAxKQorCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCisJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKKwlwcmludGsoIlxuIik7CisKKwlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCisJLyogTGV0IHBjbWNpYSBrbm93IHRoZSBkZXZpY2UgbmFtZSAqLworCWxpbmstPmRldiA9ICZody0+bm9kZTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgZ2V0IGFzc2lnbmVkIGEgbmFtZSAqLworCVNFVF9NT0RVTEVfT1dORVIod2xhbmRldi0+bmV0ZGV2KTsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkgKQorCVNFVF9ORVRERVZfREVWKHdsYW5kZXYtPm5ldGRldiwgICZoYW5kbGVfdG9fZGV2KGxpbmstPmhhbmRsZSkpOworI2VuZGlmCisJaWYgKHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCkgeworCQlXTEFOX0xPR19OT1RJQ0UoInByaXNtMnN0YV9jczogcmVnaXN0ZXJfd2xhbmRldigpIGZhaWxlZC5cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlzdHJjcHkoaHctPm5vZGUuZGV2X25hbWUsIHdsYW5kZXYtPm5hbWUpOworCisJLyogQW55IGRldmljZSBjdXN0b20gY29uZmlnL3F1ZXJ5IHN0dWZmIHNob3VsZCBiZSBkb25lIGhlcmUgKi8KKwkvKiBGb3IgYSBuZXRkZXZpY2UsIHdlIHNob3VsZCBhdCBsZWFzdCBncmFiIHRoZSBtYWMgYWRkcmVzcyAqLworCisJcmV0dXJuOworY3NfZmFpbGVkOgorCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCVdMQU5fTE9HX0VSUk9SKCJOZXh0VHVwbGUgZmFpbHVyZT8gSXQncyBwcm9iYWJseSBhIFZjYyBtaXNtYXRjaC5cbiIpOworCitmYWlsZWQ6CisJcHJpc20yc3RhX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfcmVsZWFzZQorKgorKiBIYWxmIG9mIHRoZSBjb25maWcvcmVsZWFzZSBwYWlyLiAgVXN1YWxseSBjYWxsZWQgaW4gcmVzcG9uc2UgdG8KKyogYSBjYXJkIGVqZWN0aW9uIGV2ZW50LiAgQ2hlY2tzIHRvIG1ha2Ugc3VyZSBubyBoaWdoZXIgbGF5ZXJzCisqIGFyZSBzdGlsbCAob3IgdGhpbmsgdGhleSBhcmUpIHVzaW5nIHRoZSBjYXJkIHZpYSB0aGUgbGluay0+b3BlbgorKiBmaWVsZC4KKyoKKyogTk9URTogRG9uJ3QgZm9yZ2V0IHRvIGluY3JlbWVudCB0aGUgbGluay0+b3BlbiB2YXJpYWJsZSBpbiB0aGUKKyogIGRldmljZV9vcGVuIG1ldGhvZCwgYW5kIGRlY3JlbWVudCBpdCBpbiB0aGUgZGV2aWNlX2Nsb3NlCisqICBtZXRob2QuCisqCisqIEFyZ3VtZW50czoKKyoJYXJnCWEgZ2VuZXJpYyAzMiBiaXQgdmFyaWFibGUuICBJdCdzIHRoZSB2YWx1ZSB0aGF0CisqCQl3ZSBhc3NpZ25lZCB0byBsaW5rLT5yZWxlYXNlLmRhdGEgaW4gc3RhX2F0dGFjaCgpLgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJQWxsIHJlc291cmNlcyBzaG91bGQgYmUgcmVsZWFzZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbgorKglleGVjdXRlcyBhbmQgZmluZHMgdGhlIGRldmljZSAhb3Blbi4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglQb3NzaWJseSBpbiBhIHRpbWVyIGNvbnRleHQuICBEb24ndCBkbyBhbnl0aGluZyB0aGF0J2xsCisqCWJsb2NrLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9yZWxlYXNlKHVfbG9uZyBhcmcpCit7CisgICAgICAgIGRldl9saW5rX3QJKmxpbmsgPSAoZGV2X2xpbmtfdCAqKWFyZzsKKworCURCRkVOVEVSOworCisJLyogRmlyc3QgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIGdldCB0aGUgTVNEIGJhY2sgdG8gdGhlCisJICogSFdQUkVTRU5UIHN0YXRlLiAgSS5lLiBldmVyeXRoaW5nIHF1aWVzY2VudC4KKwkgKi8KKwlwcmlzbTJzdGFfaWZzdGF0ZShsaW5rLT5wcml2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisKKyAgICAgICAgaWYgKGxpbmstPm9wZW4pIHsKKwkJLyogVE9ETzogSSBkb24ndCB0aGluayB3ZSdyZSBldmVuIHVzaW5nIHRoaXMgYml0IG9mIGNvZGUKKwkJICogYW5kIEkgZG9uJ3QgdGhpbmsgaXQncyBodXJ0aW5nIHVzIGF0IHRoZSBtb21lbnQuCisJCSAqLworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsCisJCQkicHJpc20yc3RhX2NzOiByZWxlYXNlIHBvc3Rwb25lZCwgJyVzJyBzdGlsbCBvcGVuXG4iLAorCQkJbGluay0+ZGV2LT5kZXZfbmFtZSk7CisgICAgICAgICAgICAgICAgbGluay0+c3RhdGUgfD0gREVWX1NUQUxFX0NPTkZJRzsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CisgICAgICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKyAgICAgICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisKKyAgICAgICAgbGluay0+c3RhdGUgJj0gfihERVZfQ09ORklHIHwgREVWX1JFTEVBU0VfUEVORElORyk7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2ZW50CisqCisqIEhhbmRsZXIgZm9yIGNhcmQgc2VydmljZXMgZXZlbnRzLgorKgorKiBBcmd1bWVudHM6CisqCWV2ZW50CQlUaGUgZXZlbnQgY29kZQorKglwcmlvcml0eQloaS9sb3cgLSBSRU1PVkFMIGlzIHRoZSBvbmx5IGhpCisqCWFyZ3MJCXB0ciB0byBjYXJkIHNlcnZpY2VzIHN0cnVjdCBjb250YWluaW5nIGluZm8gYWJvdXQKKyoJCQlwY21jaWEgc3RhdHVzCisqCisqIFJldHVybnM6CisqCVplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglCb3RoIGludGVycnVwdCBhbmQgcHJvY2VzcyB0aHJlYWQsIGRlcGVuZHMgb24gdGhlIGV2ZW50LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitwcmlzbTJzdGFfZXZlbnQgKAorCWV2ZW50X3QgZXZlbnQsCisJaW50IHByaW9yaXR5LAorCWV2ZW50X2NhbGxiYWNrX2FyZ3NfdCAqYXJncykKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCWRldl9saW5rX3QJCSpsaW5rID0gKGRldl9saW5rX3QgKikgYXJncy0+Y2xpZW50X2RhdGE7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWxpbmstPnByaXY7CisJaGZhMzg0eF90CQkqaHcgPSBOVUxMOworCisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldikgaHcgPSB3bGFuZGV2LT5wcml2OworCisJc3dpdGNoIChldmVudCkKKwl7CisJY2FzZSBDU19FVkVOVF9DQVJEX0lOU0VSVElPTjoKKwkJV0xBTl9MT0dfREVCVUcoNSwiZXZlbnQgaXMgSU5TRVJUSU9OXG4iKTsKKwkJbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7CisJCXByaXNtMnN0YV9jb25maWcobGluayk7CisJCWlmICghKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykpIHsKKwkJCXdsYW5kZXYtPm5ldGRldi0+aXJxID0gMDsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSIlczogSW5pdGlhbGl6YXRpb24gZmFpbGVkIVxuIiwgZGV2X2luZm8pOworCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV0ZBSUw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIGh3IHN0cnVjdCAqLworCQlody0+aXJxID0gd2xhbmRldi0+bmV0ZGV2LT5pcnE7CisJCWh3LT5pb2Jhc2UgPSB3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkcjsKKwkJaHctPmxpbmsgPSBsaW5rOworCisJCWlmIChwcmlzbTJfZG9yZXNldCkgeworCQkJcmVzdWx0ID0gaGZhMzg0eF9jb3JlcmVzZXQoaHcsCisJCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkJcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJCSJjb3JlcmVzZXQoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCQkJCXJlc3VsdCk7CisJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV0ZBSUw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworI2lmIDAKKwkJLyoKKwkJICogVE9ETzogdGVzdF9ob3N0aWYoKSBub3QgaW1wbGVtZW50ZWQgeWV0LgorCQkgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF90ZXN0X2hvc3RpZihodyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJInRlc3RfaG9zdGlmKCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV0ZBSUw7CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQlicmVhazsKKworCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMOgorCQlXTEFOX0xPR19ERUJVRyg1LCJldmVudCBpcyBSRU1PVkFMXG4iKTsKKwkJbGluay0+c3RhdGUgJj0gfkRFVl9QUkVTRU5UOworCisJCWlmICh3bGFuZGV2KSB7CisJCQlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCQl9CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorCQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQorCQl7CisJCQlsaW5rLT5yZWxlYXNlLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaLzIwKTsKKwkJCWFkZF90aW1lcigmbGluay0+cmVsZWFzZSk7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIENTX0VWRU5UX1JFU0VUX1JFUVVFU1Q6CisJCVdMQU5fTE9HX0RFQlVHKDUsImV2ZW50IGlzIFJFU0VUX1JFUVVFU1RcbiIpOworCQlXTEFOX0xPR19OT1RJQ0UoCisJCQkicHJpc20yIGNhcmQgcmVzZXQgbm90IHN1cHBvcnRlZCAiCisJCQkiZHVlIHRvIHBvc3QtcmVzZXQgdXNlciBtb2RlIGNvbmZpZ3VyYXRpb24gIgorCQkJInJlcXVpcmVtZW50cy5cbiIpOworCQlXTEFOX0xPR19OT1RJQ0UoCisJCQkiICBGcm9tIHVzZXIgbW9kZSwgdXNlICIKKwkJCSInY2FyZGN0bCBzdXNwZW5kO2NhcmRjdGwgcmVzdW1lJyAiCisJCQkiaW5zdGVhZC5cbiIpOworCQlicmVhazsKKwljYXNlIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMOgorCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRVNFVDoKKwkJV0xBTl9MT0dfV0FSTklORygiUngnZCBDU19FVkVOVF9SRVNFVF94eHgsIHNob3VsZCBub3QgIgorCQkJImJlIHBvc3NpYmxlIHNpbmNlIFJFU0VUX1JFUVVFU1Qgd2FzIGRlbmllZC5cbiIpOworCQlicmVhazsKKworCWNhc2UgQ1NfRVZFTlRfUE1fU1VTUEVORDoKKwkJV0xBTl9MT0dfREVCVUcoNSwiZXZlbnQgaXMgU1VTUEVORFxuIik7CisJCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOworCQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQorCQl7CisJCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisJCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENTX0VWRU5UX1BNX1JFU1VNRToKKwkJV0xBTl9MT0dfREVCVUcoNSwiZXZlbnQgaXMgUkVTVU1FXG4iKTsKKwkJbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOworCQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7CisJCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCQl9CisJCWJyZWFrOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7ICAvKiBub29uZSBlbHNlIGRvZXMgYW50aGluZyB3aXRoIHRoZSByZXR1cm4gdmFsdWUgKi8KK30KKyNlbmRpZiAvLyA8PSAyLjYuMTUKKworCisKK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJY29uZl9yZWdfdAlyZWc7CisJVUlOVDgJCWNvcnNhdmU7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCAiRG9pbmcgcmVzZXQgdmlhIENhcmRTZXJ2aWNlcygpLlxuIik7CisKKwkvKiBDb2xsZWN0IENPUiAqLworCXJlZy5GdW5jdGlvbiA9IDA7CisJcmVnLkFjdGlvbiA9IENTX1JFQUQ7CisJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihody0+cGRldiwgJnJlZyk7CisjZWxzZQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcigKKwkJCWh3LT5saW5rLT5oYW5kbGUsCisJCQkmcmVnKTsKKyNlbmRpZgorCWlmIChyZXN1bHQgIT0gQ1NfU1VDQ0VTUyApIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiOjA6IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcihDU19SRUFEKSBmYWlsZWQsIgorCQkJInJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisJfQorCWNvcnNhdmUgPSByZWcuVmFsdWU7CisKKwkvKiBXcml0ZSByZXNldCBiaXQgKEJJVDcpICovCisJcmVnLlZhbHVlIHw9IEJJVDc7CisJcmVnLkFjdGlvbiA9IENTX1dSSVRFOworCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHctPnBkZXYsICZyZWcpOworI2Vsc2UKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQlody0+bGluay0+aGFuZGxlLAorCQkJJnJlZyk7CisjZW5kaWYKKwlpZiAocmVzdWx0ICE9IENTX1NVQ0NFU1MgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIjoxOiBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIoQ1NfV1JJVEUpIGZhaWxlZCwiCisJCQkicmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9CisKKwkvKiBIb2xkIGZvciBob2xkdGltZSAqLworCW1kZWxheShob2xkdGltZSk7CisKKwlpZiAoZ2VuZXNpcykgeworCQlyZWcuVmFsdWUgPSBnZW5lc2lzOworCQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CisJCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ0NTUjsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihody0+cGRldiwgJnJlZyk7CisjZWxzZQorCQlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQkJICAgICAgaHctPmxpbmstPmhhbmRsZSwKKwkJCQkgICAgICAmcmVnKTsKKyNlbmRpZgorCQlpZiAocmVzdWx0ICE9IENTX1NVQ0NFU1MgKSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiOjE6IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcihDU19XUklURSkgZmFpbGVkLCIKKwkJCQkicmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCX0KKwl9CisKKwkvKiBIb2xkIGZvciBob2xkdGltZSAqLworCW1kZWxheShob2xkdGltZSk7CisKKwkvKiBDbGVhciByZXNldCBiaXQgKi8KKwlyZWcuVmFsdWUgJj0gfkJJVDc7CisJcmVnLkFjdGlvbiA9IENTX1dSSVRFOworCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHctPnBkZXYsICZyZWcpOworI2Vsc2UKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQkJICAgICAgaHctPmxpbmstPmhhbmRsZSwKKwkJCQkgICAgICAmcmVnKTsKKyNlbmRpZgorCWlmIChyZXN1bHQgIT0gQ1NfU1VDQ0VTUyApIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiOjI6IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcihDU19XUklURSkgZmFpbGVkLCIKKwkJCSJyZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogV2FpdCBmb3Igc2V0dGxldGltZSAqLworCW1kZWxheShzZXR0bGV0aW1lKTsKKworCS8qIFNldCBub24tcmVzZXQgYml0cyBiYWNrIHdoYXQgdGhleSB3ZXJlICovCisJcmVnLlZhbHVlID0gY29yc2F2ZTsKKwlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CisJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihody0+cGRldiwgJnJlZyk7CisjZWxzZQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcigKKwkJCQkgICAgICBody0+bGluay0+aGFuZGxlLAorCQkJCSAgICAgICZyZWcpOworI2VuZGlmCisJaWYgKHJlc3VsdCAhPSBDU19TVUNDRVNTICkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSI6MjogQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyKENTX1dSSVRFKSBmYWlsZWQsIgorCQkJInJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMmNzX2luaXQodm9pZCkKK3sKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDY4KSkKKwlzZXJ2aW5mb190CXNlcnY7CisjZW5kaWYKKworCURCRkVOVEVSOworCisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKyAgICAgICAgV0xBTl9MT0dfTk9USUNFKCJkZXZfaW5mbyBpczogJXNcbiIsIGRldl9pbmZvKTsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjgpKQorCXBjbWNpYV9nZXRfY2FyZF9zZXJ2aWNlc19pbmZvKCZzZXJ2KTsKKwlpZiAoIHNlcnYuUmV2aXNpb24gIT0gQ1NfUkVMRUFTRV9DT0RFICkKKwl7CisJCXByaW50ayhLRVJOX05PVElDRSIlczogQ2FyZFNlcnZpY2VzIHJlbGVhc2UgZG9lcyBub3QgbWF0Y2ghXG4iLCBkZXZfaW5mbyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBUaGlzIGNhbGwgd2lsbCByZXN1bHQgaW4gYSBjYWxsIHRvIHByaXNtMnN0YV9hdHRhY2ggKi8KKwkvKiAgIGFuZCBldmVudHVhbGx5IHByaXNtMnN0YV9kZXRhY2ggKi8KKwlyZWdpc3Rlcl9wY2NhcmRfZHJpdmVyKCAmZGV2X2luZm8sICZwcmlzbTJzdGFfYXR0YWNoLCAmcHJpc20yc3RhX2RldGFjaCk7CisjZWxzZQorCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnByaXNtMl9jc19kcml2ZXIpOworI2VuZGlmCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20yY3NfY2xlYW51cCh2b2lkKQoreworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjgpKQorICAgICAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X2xpc3Q7CisgICAgICAgIGRldl9saW5rX3QgKm5saW5rOworICAgICAgICBEQkZFTlRFUjsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTApICkKKwlmb3IgKGxpbms9ZGV2X2xpc3Q7IGxpbmsgIT0gTlVMTDsgbGluayA9IG5saW5rKSB7CisJCW5saW5rID0gbGluay0+bmV4dDsKKwkJaWYgKCBsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcgKSB7CisJCQlwcmlzbTJzdGFfcmVsZWFzZSgodV9sb25nKWxpbmspOworCQl9CisJCXByaXNtMnN0YV9kZXRhY2gobGluayk7IC8qIHJlbWVtYmVyIGRldGFjaCgpIGZyZWVzIGxpbmsgKi8KKwl9CisjZW5kaWYKKworCXVucmVnaXN0ZXJfcGNjYXJkX2RyaXZlciggJmRldl9pbmZvKTsKKyNlbHNlCisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZwcmlzbTJfY3NfZHJpdmVyKTsKKyNlbmRpZgorCisgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgVW5sb2FkZWRcbiIsIHZlcnNpb24pOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybjsKK30KKworbW9kdWxlX2luaXQocHJpc20yY3NfaW5pdCk7Cittb2R1bGVfZXhpdChwcmlzbTJjc19jbGVhbnVwKTsKKworI2VuZGlmIC8vIE1PRFVMRQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlMzJkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl9wY2kuYwpAQCAtMCwwICsxLDMzMiBAQAorI2RlZmluZSBXTEFOX0hPU1RJRiBXTEFOX1BDSQorI2luY2x1ZGUgImhmYTM4NHguYyIKKyNpbmNsdWRlICJwcmlzbTJtZ210LmMiCisjaW5jbHVkZSAicHJpc20ybWliLmMiCisjaW5jbHVkZSAicHJpc20yc3RhLmMiCisKKyNkZWZpbmUgUENJX1NJWkUJCTB4MTAwMAkJLyogTWVtb3J5IHNpemUgLSA0SyBieXRlcyAqLworCisvKiBJU0wzODc0QSAxMU1iL3MgV0xBTiBjb250cm9sbGVyICovCisjZGVmaW5lIFBDSVZFTkRPUl9JTlRFUlNJTAkweDEyNjBVTAorI2RlZmluZSBQQ0lERVZJQ0VfSVNMMzg3NAkweDM4NzNVTCAvKiBbTVNNXSB5ZWFoIEkga25vdy4uLnRoZSBJRCBzYXlzCisJCQkJCSAgICAzODczLiBUcnVzdCBtZSwgaXQncyBhIDM4NzQuICovCisKKy8qIFNhbXN1bmcgU1dMLTIyMTBQIDExTWIvcyBXTEFOIGNvbnRyb2xsZXIgKHVzZXMgSVNMMzg3NEEpICovCisjZGVmaW5lIFBDSVZFTkRPUl9TQU1TVU5HICAgICAgMHgxNjdkVUwKKyNkZWZpbmUgUENJREVWSUNFX1NXTF8yMjEwUCAgICAweGEwMDBVTAorCisjZGVmaW5lIFBDSVZFTkRPUl9ORVRHRUFSICAgICAgMHgxMzg1VUwgLyogZm9yIE1BMzExICovCisKKy8qIFBDSSBDbGFzcyAmIFN1Yi1DbGFzcyBjb2RlLCBOZXR3b3JrLSdPdGhlciBjb250cm9sbGVyJyAqLworI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19PVEhFUlMgMHgyODAKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX3Byb2JlX3BjaQorKgorKiBQcm9iZSByb3V0aW5lIGNhbGxlZCB3aGVuIGEgUENJIGRldmljZSB3LyBtYXRjaGluZyBJRCBpcyBmb3VuZC4KKyogVGhlIElTTDM4NzQgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgZm9sbG93aW5nIG1hcDoKKyogICBCQVIwOiBQcmlzbTIueCByZWdpc3RlcnMgbWVtb3J5IG1hcHBlZCwgc2l6ZT00aworKiBIZXJlJ3MgdGhlIHNlcXVlbmNlOgorKiAgIC0gQWxsb2NhdGUgdGhlIFBDSSByZXNvdXJjZXMuCisqICAgLSBSZWFkIHRoZSBQQ01DSUEgYXR0cmlidXRlIG1lbW9yeSB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIFdMQU4gY2FyZAorKiAgIC0gUmVzZXQgdGhlIE1BQworKiAgIC0gSW5pdGlhbGl6ZSB0aGUgbmV0ZGV2IGFuZCB3bGFuIGRhdGEKKyogICAtIEluaXRpYWxpemUgdGhlIE1BQworKgorKiBBcmd1bWVudHM6CisqCXBkZXYJCXB0ciB0byBwY2kgZGV2aWNlIHN0cnVjdHVyZSBjb250YWluaW5nIGluZm8gYWJvdXQKKyoJCQlwY2kgY29uZmlndXJhdGlvbi4KKyoJaWQJCXB0ciB0byB0aGUgZGV2aWNlIGlkIGVudHJ5IHRoYXQgbWF0Y2hlZCB0aGlzIGRldmljZS4KKyoKKyogUmV0dXJuczoKKyoJemVybwkJLSBzdWNjZXNzCisqCW5lZ2F0aXZlCS0gZmFpbGVkCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHJpc20yc3RhX3Byb2JlX3BjaSgKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50CQlyZXN1bHQ7CisJcGh5c190CQlwaHltZW0gPSAwOworCXZvaWQJCV9faW9tZW0gKm1lbSA9IE5VTEw7CisgICAgICAgIHdsYW5kZXZpY2VfdCAgICAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90CSpodyA9IE5VTEw7CisKKwlEQkZFTlRFUjsKKworCS8qIEVuYWJsZSB0aGUgcGNpIGRldmljZSAqLworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IHBjaV9lbmFibGVfZGV2aWNlKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogRmlndXJlIG91dCBvdXIgcmVzb3VyY2VzICovCisJcGh5bWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCisgICAgICAgIGlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBoeW1lbSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSwgIlByaXNtMiIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicHJpc20yOiBDYW5ub3QgcmVzZXJ2ZSBQQ0kgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKyAgICAgICAgfQorCisJbWVtID0gaW9yZW1hcChwaHltZW0sIFBDSV9TSVpFKTsKKwlpZiAoIG1lbSA9PSAwICkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IGlvcmVtYXAoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBMb2cgdGhlIGRldmljZSAqLworICAgICAgICBXTEFOX0xPR19JTkZPKCJBIFByaXNtMi41IFBDSSBkZXZpY2UgZm91bmQsICIKKwkJInBoeW1lbToweCVsbHgsIGlycTolZCwgbWVtOjB4JXBcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGh5bWVtLCBwZGV2LT5pcnEsIG1lbSk7CisKKwlpZiAoKHdsYW5kZXYgPSBjcmVhdGVfd2xhbigpKSA9PSBOVUxMKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogU2V0dXAgbmV0ZGV2aWNlJ3MgYWJpbGl0eSB0byByZXBvcnQgcmVzb3VyY2VzCisJICogTm90ZTogdGhlIG5ldGRldmljZSB3YXMgYWxsb2NhdGVkIGJ5IHdsYW5fc2V0dXAoKQorCSAqLworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKyAgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5tZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykgbWVtOworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm1lbV9lbmQgPSB3bGFuZGV2LT5uZXRkZXYtPm1lbV9zdGFydCArCisJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBodyBkYXRhICovCisgICAgICAgIGhmYTM4NHhfY3JlYXRlKGh3LCB3bGFuZGV2LT5uZXRkZXYtPmlycSwgMCwgbWVtKTsKKwlody0+d2xhbmRldiA9IHdsYW5kZXY7CisKKwkvKiBSZWdpc3RlciB0aGUgd2xhbmRldiwgdGhpcyBnZXRzIHVzIGEgbmFtZSBhbmQgcmVnaXN0ZXJzIHRoZQorCSAqIGxpbnV4IG5ldGRldmljZS4KKwkgKi8KKwlTRVRfTU9EVUxFX09XTkVSKHdsYW5kZXYtPm5ldGRldik7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisgICAgICAgU0VUX05FVERFVl9ERVYod2xhbmRldi0+bmV0ZGV2LCAmKHBkZXYtPmRldikpOworI2VuZGlmCisgICAgICAgIGlmICggcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KSAhPSAwICkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKyAgICAgICAgfQorCisjaWYgMAorCS8qIFRPRE86IE1vdmUgdGhpcyBhbmQgYW4gaXJxIHRlc3QgaW50byBhbiBoZmEzODR4X3Rlc3RpZigpIHJvdXRpbmUuCisJICovCisJb3V0dyhQUklTTTJTVEFfTUFHSUMsIEhGQTM4NHhfU1dTVVBQT1JUKHdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyKSk7CisJcmVnPWludyggSEZBMzg0eF9TV1NVUFBPUlQod2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIpKTsKKwlpZiAoIHJlZyAhPSBQUklTTTJTVEFfTUFHSUMgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJNQUMgcmVnaXN0ZXIgYWNjZXNzIHRlc3QgZmFpbGVkIVxuIik7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKwl9CisjZW5kaWYKKworCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCisJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAorCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJIiVzOiBoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIsCisJCQkJZGV2X2luZm8pOworCQkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKyAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBkZXYsIHdsYW5kZXYpOworCisJLyogU2hvdWxkbid0IGFjdHVhbGx5IGhvb2sgdXAgdGhlIElSUSB1bnRpbCB3ZQorCSAqIF9rbm93XyB0aGluZ3MgYXJlIGFscmlnaHQuICBBIHRlc3Qgcm91dGluZSB3b3VsZCBoZWxwLgorCSAqLworICAgICAgIAlyZXF1ZXN0X2lycSh3bGFuZGV2LT5uZXRkZXYtPmlycSwgaGZhMzg0eF9pbnRlcnJ1cHQsCisJCVNBX1NISVJRLCB3bGFuZGV2LT5uYW1lLCB3bGFuZGV2KTsKKworCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCisJcmVzdWx0ID0gMDsKKwlnb3RvIGRvbmU7CisKKyBmYWlsOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7CisJaWYgKGh3KQkJa2ZyZWUoaHcpOworICAgICAgICBpZiAobWVtKSAgICAgICAgaW91bm1hcChtZW0pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworIGRvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcHJpc20yc3RhX3JlbW92ZV9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisgICAgICAgCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisJaGZhMzg0eF90CSpodzsKKworCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCisJLyogcmVzZXQgaGFyZHdhcmUgKi8KKwlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisKKyAgICAgICAgaWYgKHBkZXYtPmlycSkKKwkJZnJlZV9pcnEocGRldi0+aXJxLCB3bGFuZGV2KTsKKworCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKworCS8qIGZyZWUgbG9jYWwgc3R1ZmYgKi8KKwlpZiAoaHcpIHsKKwkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJa2ZyZWUoaHcpOworCX0KKworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKXdsYW5kZXYtPm5ldGRldi0+bWVtX3N0YXJ0KTsKKwl3bGFuX3Vuc2V0dXAod2xhbmRldik7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJa2ZyZWUod2xhbmRldik7Cit9CisKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZF90YmxbXSA9IHsKKwl7CisJCVBDSVZFTkRPUl9JTlRFUlNJTCwgUENJREVWSUNFX0lTTDM4NzQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJJbnRlcnNpbCBQcmlzbTIuNSBJU0wzODc0IDExTWIvcyBXTEFOIENvbnRyb2xsZXIiCisJfSwKKwl7CisJCVBDSVZFTkRPUl9JTlRFUlNJTCwgMHgzODcyLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiSW50ZXJzaWwgUHJpc20yLjUgSVNMMzg3MiAxMU1iL3MgV0xBTiBDb250cm9sbGVyIgorCX0sCisgICAgICAgIHsKKyAgICAgICAgICAgICAgIFBDSVZFTkRPUl9TQU1TVU5HLCBQQ0lERVZJQ0VfU1dMXzIyMTBQLAorICAgICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKyAgICAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICAgICAvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIlNhbXN1bmcgTWFnaWNMQU4gU1dMLTIyMTBQIDExTWIvcyBXTEFOIENvbnRyb2xsZXIiCisJfSwKKwl7IC8qIGZvciBOZXRHZWFyIE1BMzExICovCisJCVBDSVZFTkRPUl9ORVRHRUFSLCAweDM4NzIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJOZXRnZWFyIE1BMzExIFdMQU4gQ29udHJvbGxlciIKKwl9LAorCXsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMAorCX0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lfaWRfdGJsKTsKKworLyogRnVuY3Rpb24gZGVjbGFyZWQgaGVyZSBiZWNhdXNlIG9mIHB0ciByZWZlcmVuY2UgYmVsb3cgKi8KK3N0YXRpYyBpbnQgIF9fZGV2aW5pdCBwcmlzbTJzdGFfcHJvYmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCAgX19kZXZleGl0IHByaXNtMnN0YV9yZW1vdmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByaXNtMl9wY2lfZHJ2X2lkID0geworICAgICAgICAubmFtZSA9ICJwcmlzbTJfcGNpIiwKKyAgICAgICAgLmlkX3RhYmxlID0gcGNpX2lkX3RibCwKKyAgICAgICAgLnByb2JlID0gcHJpc20yc3RhX3Byb2JlX3BjaSwKKyAgICAgICAgLnJlbW92ZSA9IHByaXNtMnN0YV9yZW1vdmVfcGNpLAorI2lmZGVmIENPTkZJR19QTQorICAgICAgICAuc3VzcGVuZCA9IHByaXNtMnN0YV9zdXNwZW5kX3BjaSwKKyAgICAgICAgLnJlc3VtZSA9IHByaXNtMnN0YV9yZXN1bWVfcGNpLAorI2VuZGlmCit9OworCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMnBjaV9pbml0KHZvaWQpCit7CisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZwcmlzbTJfcGNpX2Rydl9pZCk7Cit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20ycGNpX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnByaXNtMl9wY2lfZHJ2X2lkKTsKK307CisKK21vZHVsZV9pbml0KHByaXNtMnBjaV9pbml0KTsKK21vZHVsZV9leGl0KHByaXNtMnBjaV9jbGVhbnVwKTsKKworI2VuZGlmCisKK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZwl0aW1lb3V0OworCVVJTlQxNglyZWc7CisJREJGRU5URVI7CisKKwkvKiBBc3NlcnQgcmVzZXQgYW5kIHdhaXQgYXdoaWxlCisJICogKG5vdGU6IHRoZXNlIGRlbGF5cyBhcmUgX3JlYWxseV8gbG9uZywgYnV0IHRoZXkgYXBwZWFyIHRvIGJlCisJICogICAgICAgIG5lY2Vzc2FyeS4pCisJICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4YzUsIEhGQTM4NHhfUENJQ09SKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIEhaLzQ7CisJd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHVkZWxheSg1KTsKKworCWlmIChnZW5lc2lzKSB7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCBnZW5lc2lzLCBIRkEzODR4X1BDSUhDUik7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgSFovNDsKKwkJd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHVkZWxheSg1KTsKKwl9CisKKwkvKiBDbGVhciB0aGUgcmVzZXQgYW5kIHdhaXQgc29tZSBtb3JlCisJICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4NDUsIEhGQTM4NHhfUENJQ09SKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIEhaLzI7CisJd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHVkZWxheSg1KTsKKworCS8qIFdhaXQgZm9yIGYvdyB0byBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiAoQ01EOkJVU1kgPT0gMCkKKwkgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIDIqSFo7CisJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwl3aGlsZSAoIEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpICYmIHRpbWVfYmVmb3JlKCBqaWZmaWVzLCB0aW1lb3V0KSApIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpKSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoImNvcmVyZXNldDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNtZCByZWdpc3Rlci5cbiIpOworCQlyZXN1bHQ9MTsKKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3BseC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3BseC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMDQ0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfcGx4LmMKQEAgLTAsMCArMSw0NzIgQEAKKyNkZWZpbmUgV0xBTl9IT1NUSUYgV0xBTl9QTFgKKyNpbmNsdWRlICJoZmEzODR4LmMiCisjaW5jbHVkZSAicHJpc20ybWdtdC5jIgorI2luY2x1ZGUgInByaXNtMm1pYi5jIgorI2luY2x1ZGUgInByaXNtMnN0YS5jIgorCisjZGVmaW5lIFBMWF9BVFRSX1NJWkUJMHgxMDAwCS8qIEF0dHJpYnV0ZSBtZW1vcnkgc2l6ZSAtIDRLIGJ5dGVzICovCisjZGVmaW5lIENPUl9PRkZTRVQJMHgzZTAJLyogQ09SIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KKyNkZWZpbmUgQ09SX1ZBTFVFCTB4NDEJLyogRW5hYmxlIFBDIGNhcmQgd2l0aCBpcnEgaW4gbGV2ZWwgdHJpZ2dlciAqLworI2RlZmluZSBQTFhfSU5UQ1NSCTB4NGMJLyogSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0lOVEVOICgxPDw2KSAvKiBJbnRlcnJ1cHQgRW5hYmxlIGJpdCAqLworI2RlZmluZSBQTFhfTUlOX0FUVFJfTEVOIDUxMiAgICAvKiBhdCBsZWFzdCAyIHggMjU2IGlzIG5lZWRlZCBmb3IgQ0lTICovCisKKy8qIDNDb20gM0NSVzc3N0EgKFBMWCkgYm9hcmQgSUQgKi8KKyNkZWZpbmUgUENJVkVORE9SXzNDT00gICAgICAgMHgxMEI3CisjZGVmaW5lIFBDSURFVklDRV9BSVJDT05ORUNUIDB4Nzc3MAorCisvKiBFdW1pdGNvbSBQQ0kgV0wxMTAwMCBQQ0kgQWRhcHRlciAoUExYKSBib2FyZCBkZXZpY2UrdmVuZG9yIElEICovCisjZGVmaW5lIFBDSVZFTkRPUl9FVU1JVENPTQkweDE2MzhVTAorI2RlZmluZSBQQ0lERVZJQ0VfV0wxMTAwMAkweDExMDBVTAorCisvKiBHbG9iYWwgU3VuIFRlY2ggR0wyNDExMFAgUENJIEFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZSBQQ0lWRU5ET1JfR0xPQkFMU1VOCTB4MTZhYlVMCisjZGVmaW5lIFBDSURFVklDRV9HTDI0MTEwUAkweDExMDFVTAorI2RlZmluZSBQQ0lERVZJQ0VfR0wyNDExMFBfQUxUCTB4MTEwMlVMCisKKy8qIE5ldGdlYXIgTUEzMDEgUENJIEFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZSBQQ0lWRU5ET1JfTkVUR0VBUgkweDEzODVVTAorI2RlZmluZSBQQ0lERVZJQ0VfTUEzMDEJCTB4NDEwMFVMCisKKy8qIFVTIFJvYm90aWNzIFVTUjI0MTAgUENJIEFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZQlQQ0lWRU5ET1JfVVNST0JPVElDUyAgICAweDE2ZWNVTAorI2RlZmluZSBQQ0lERVZJQ0VfVVNSMjQxMCAgICAgICAweDM2ODVVTAorCisvKiBMaW5rc3lzIFdQQzExIGNhcmQgd2l0aCB0aGUgV0RUMTEgYWRhcHRlciAoUExYKSBib2FyZCBkZXZpY2UrdmVuZG9yIElEICovCisjZGVmaW5lCVBDSVZFTkRPUl9MaW5rc3lzICAgICAgIDB4MTZhYlVMCisjZGVmaW5lIFBDSURFVklDRV9XcGMxMVdkdDExICAgIDB4MTEwMlVMCisKKy8qIE5hdGlvbmFsIERhdGFjb21tIENvcnAgU09IT3dhcmUgTmV0Ymxhc3RlciBJSSBQQ0kgKi8KKyNkZWZpbmUgUENJVkVORE9SX05EQwkgICAgICAgIDB4MTVlOFVMCisjZGVmaW5lIFBDSURFVklDRV9OQ1AxMzBfUExYIAkweDAxMzBVTAorI2RlZmluZSBQQ0lERVZJQ0VfTkNQMTMwX0FTSUMJMHgwMTMxVUwKKworLyogTkRDIE5DUDEzMF9QTFggaXMgYWxzbyBzb2xkIGJ5IENvcmVnYS4gVGhlaXIgbmFtZSBpcyBDR1dMUENJQTExICovCisjZGVmaW5lIFBDSVZFTkRPUl9DT1JFR0EgICAgICAgUENJVkVORE9SX05EQworI2RlZmluZSBQQ0lERVZJQ0VfQ0dXTFBDSUExMSAgIFBDSURFVklDRV9OQ1AxMzBfUExYCisKKy8qIFBDSSBDbGFzcyAmIFN1Yi1DbGFzcyBjb2RlLCBOZXR3b3JrLSdPdGhlciBjb250cm9sbGVyJyAqLworI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19PVEhFUlMgMHgyODAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9wcm9iZV9wbHgKKyoKKyogUHJvYmUgcm91dGluZSBjYWxsZWQgd2hlbiBhIFBDSSBkZXZpY2Ugdy8gbWF0Y2hpbmcgSUQgaXMgZm91bmQuCisqIFRoaXMgUExYIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZvbGxvd2luZyBtYXA6CisqICAgQkFSMDogVW51c2VkCisqICAgQkFSMTogPz8/PworKiAgIEJBUjI6IFBDTUNJQSBhdHRyaWJ1dGUgbWVtb3J5CisqICAgQkFSMzogUENNQ0lBIGkvbyBzcGFjZQorKiBIZXJlJ3MgdGhlIHNlcXVlbmNlOgorKiAgIC0gQWxsb2NhdGUgdGhlIFBDSSByZXNvdXJjZXMuCisqICAgLSBSZWFkIHRoZSBQQ01DSUEgYXR0cmlidXRlIG1lbW9yeSB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIFdMQU4gY2FyZAorKiAgIC0gUmVzZXQgdGhlIE1BQyB1c2luZyB0aGUgUENNQ0lBIENPUgorKiAgIC0gSW5pdGlhbGl6ZSB0aGUgbmV0ZGV2IGFuZCB3bGFuIGRhdGEKKyogICAtIEluaXRpYWxpemUgdGhlIE1BQworKgorKiBBcmd1bWVudHM6CisqCXBkZXYJCXB0ciB0byBwY2kgZGV2aWNlIHN0cnVjdHVyZSBjb250YWluaW5nIGluZm8gYWJvdXQKKyoJCQlwY2kgY29uZmlndXJhdGlvbi4KKyoJaWQJCXB0ciB0byB0aGUgZGV2aWNlIGlkIGVudHJ5IHRoYXQgbWF0Y2hlZCB0aGlzIGRldmljZS4KKyoKKyogUmV0dXJuczoKKyoJemVybwkJLSBzdWNjZXNzCisqCW5lZ2F0aXZlCS0gZmFpbGVkCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHJpc20yc3RhX3Byb2JlX3BseCgKKwlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCSppZCkKK3sKKwlpbnQJCXJlc3VsdDsKKyAgICAgICAgcGh5c190CXBjY2FyZF9pb2FkZHI7CisJcGh5c190ICBwY2NhcmRfYXR0cl9tZW07CisgICAgICAgIHVuc2lnbmVkIGludCAgICBwY2NhcmRfYXR0cl9sZW47CisJdm9pZCBfX2lvbWVtICphdHRyX21lbSA9IE5VTEw7CisJVUlOVDMyCQlwbHhfYWRkcjsKKyAgICAgICAgd2xhbmRldmljZV90ICAgICp3bGFuZGV2ID0gTlVMTDsKKwloZmEzODR4X3QJKmh3ID0gTlVMTDsKKwlpbnQJCXJlZzsKKyAgICAgICAgdTMyCQlyZWdpYzsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBUTUM3MTYwIGJvYXJkcyBhcmUgc3BlY2lhbCAqLworCWlmICgocGRldi0+dmVuZG9yID09IFBDSVZFTkRPUl9OREMpICYmCisJICAgIChwZGV2LT5kZXZpY2UgPT0gUENJREVWSUNFX05DUDEzMF9BU0lDKSkgeworCQl1bnNpZ25lZCBsb25nIGRlbGF5OworCisJCXBjY2FyZF9hdHRyX21lbSA9IDA7CisJCXBjY2FyZF9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisKKwkJb3V0YigweDQ1LCBwY2NhcmRfaW9hZGRyKTsKKwkJZGVsYXkgPSBqaWZmaWVzICsgMSpIWjsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSk7CisKKwkJaWYgKGluYihwY2NhcmRfaW9hZGRyKSAhPSAweDQ1KSB7CisJCQlXTEFOX0xPR19FUlJPUigiSW5pdGlhbGl6ZSB0aGUgVE1DNzE2MCBmYWlsZWQuICgweCV4KVxuIiwgaW5iKHBjY2FyZF9pb2FkZHIpKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcGNjYXJkX2lvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwkJcHJpc20yX2RvcmVzZXQgPSAwOworCisJCVdMQU5fTE9HX0lORk8oIk5EQyBOQ1AxMzAgd2l0aCBUTUM3MTYoQVNJQykgUENJIGludGVyZmFjZSBkZXZpY2UgZm91bmQgYXQgaW86MHgleCwgaXJxOiVkXG4iLCBwY2NhcmRfaW9hZGRyLCBwZGV2LT5pcnEpOworCQlnb3RvIGluaXQ7CisJfQorCisJLyogQ29sbGVjdCB0aGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzICovCisJcGNjYXJkX2F0dHJfbWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCXBjY2FyZF9hdHRyX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CisgICAgICAgIGlmIChwY2NhcmRfYXR0cl9sZW4gPCBQTFhfTUlOX0FUVFJfTEVOKQorCQlyZXR1cm4gLUVJTzsKKworCXBjY2FyZF9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMyk7CisKKwkvKiBiam9lcm46IFdlIG5lZWQgdG8gdGVsbCB0aGUgY2FyZCB0byBlbmFibGUgaW50ZXJydXB0cywgaW4KKwkgKiBjYXNlIHRoZSBzZXJpYWwgZXByb20gZGlkbid0IGRvIHRoaXMgYWxyZWFkeS4gU2VlIHRoZQorCSAqIFBMWDkwNTIgZGF0YSBib29rLCBwOC0xIGFuZCA4LTI0IGZvciByZWZlcmVuY2UuCisJICogW01TTV06IFRoaXMgYml0IG9mIGNvZGUgY2FtZSBmcm9tIHRoZSBvcmlub2NvX2NzIGRyaXZlci4KKwkgKi8KKwlwbHhfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKworCXJlZ2ljID0gMDsKKwlyZWdpYyA9IGlubChwbHhfYWRkcitQTFhfSU5UQ1NSKTsKKwlpZihyZWdpYyAmIFBMWF9JTlRDU1JfSU5URU4pIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSIlczogTG9jYWwgSW50ZXJydXB0IGFscmVhZHkgZW5hYmxlZFxuIiwgZGV2X2luZm8pOworCX0gZWxzZSB7CisJCXJlZ2ljIHw9IFBMWF9JTlRDU1JfSU5URU47CisJCW91dGwocmVnaWMsIHBseF9hZGRyK1BMWF9JTlRDU1IpOworCQlyZWdpYyA9IGlubChwbHhfYWRkcitQTFhfSU5UQ1NSKTsKKwkJaWYoIShyZWdpYyAmIFBMWF9JTlRDU1JfSU5URU4pKSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiJXM6IENvdWxkbid0IGVuYWJsZSBMb2NhbCBJbnRlcnJ1cHRzXG4iLAorCQkJCWRldl9pbmZvKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJLyogVGhlc2UgYXNzaWdubWVudHMgYXJlIGhlcmUgaW4gY2FzZSBvZiBmdXR1cmUgbWFwcGluZ3MgZm9yCisJICogaW8gc3BhY2UgYW5kIGlycSB0aGF0IG1pZ2h0IGJlIHNpbWlsYXIgdG8gaW9yZW1hcAorCSAqLworICAgICAgICBpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwY2NhcmRfYXR0cl9tZW0sIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMiksICJQcmlzbTIiKSkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IENvdWxkbid0IHJlc2VydmUgUENJIG1lbW9yeSByZWdpb25cbiIsIGRldl9pbmZvKTsKKwkJcmV0dXJuIC1FSU87CisgICAgICAgIH0KKworCWF0dHJfbWVtID0gaW9yZW1hcChwY2NhcmRfYXR0cl9tZW0sIHBjY2FyZF9hdHRyX2xlbik7CisKKwlXTEFOX0xPR19JTkZPKCJBIFBMWCBQQ0kvUENNQ0lBIGludGVyZmFjZSBkZXZpY2UgZm91bmQsICIKKwkJInBoeW1lbToweCVsbHgsIHBoeWlvPTB4JXgsIGlycTolZCwgIgorCQkibWVtOiAweCVseFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2NhcmRfYXR0cl9tZW0sIHBjY2FyZF9pb2FkZHIsIHBkZXYtPmlycSwKKwkJKHVuc2lnbmVkIGxvbmcpYXR0cl9tZW0pOworCisJLyogVmVyaWZ5IHdoZXRoZXIgUEMgY2FyZCBpcyBwcmVzZW50LgorCSAqIFtNU01dIFRoaXMgbmVlZHMgaW1wcm92ZW1lbnQsIHRoZSByaWdodCB0aGluZyB0byBkbyBpcworCSAqIHByb2JhYmx5IHRvIHdhbGsgdGhlIENJUyBsb29raW5nIGZvciB0aGUgdmVuZG9yIGFuZCBwcm9kdWN0CisJICogSURzLiAgSXQgd291bGQgYmUgbmljZSBpZiB0aGlzIGNvdWxkIGJlIHRpZWQgaW4gd2l0aCB0aGUKKwkgKiBldGMvcGNtY2lhL3dsYW4tbmcuY29uZiBmaWxlLiAgQW55IHZvbHVudGVlcnM/ICA7LSkKKwkgKi8KKwlpZiAoCisJcmVhZGIoYXR0cl9tZW0gKyAwKSAhPSAweDAxIHx8IHJlYWRiKGF0dHJfbWVtICsgMikgIT0gMHgwMyB8fAorCXJlYWRiKGF0dHJfbWVtICsgNCkgIT0gMHgwMCB8fCByZWFkYihhdHRyX21lbSArIDYpICE9IDB4MDAgfHwKKwlyZWFkYihhdHRyX21lbSArIDgpICE9IDB4RkYgfHwgcmVhZGIoYXR0cl9tZW0gKyAxMCkgIT0gMHgxNyB8fAorCXJlYWRiKGF0dHJfbWVtICsgMTIpICE9IDB4MDQgfHwgcmVhZGIoYXR0cl9tZW0gKyAxNCkgIT0gMHg2NykgeworCQlXTEFOX0xPR19FUlJPUigiUHJpc20yIFBDIGNhcmQgQ0lTIGlzIGludmFsaWQuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisgICAgICAgIH0KKyAgICAgICAgV0xBTl9MT0dfSU5GTygiQSBQQ01DSUEgV0xBTiBhZGFwdGVyIHdhcyBmb3VuZC5cbiIpOworCisgICAgICAgIC8qIFdyaXRlIENPUiB0byBlbmFibGUgUEMgY2FyZCAqLworCXdyaXRlYihDT1JfVkFMVUUsIGF0dHJfbWVtICsgQ09SX09GRlNFVCk7CisJcmVnID0gcmVhZGIoYXR0cl9tZW0gKyBDT1JfT0ZGU0VUKTsKKworIGluaXQ6CisKKwkvKgorCSAqIE5vdyBkbyBldmVyeXRoaW5nIHRoZSBzYW1lIGFzIGEgUENJIGRldmljZQorCSAqIFtNU01dIFRPRE86IFdlIGNvdWxkIHByb2JhYmx5IGZhY3RvciB0aGlzIG91dCBvZiBwY21jaWEvcGNpL3BseAorCSAqIGFuZCBwZXJoYXBzIHVzYi4gIFBlcmhhcHMgYSB0YXNrIGZvciBhbm90aGVyIGRheS4uLi4uLi4KKwkgKi8KKworCWlmICgod2xhbmRldiA9IGNyZWF0ZV93bGFuKCkpID09IE5VTEwpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBTZXR1cCBuZXRkZXZpY2UncyBhYmlsaXR5IHRvIHJlcG9ydCByZXNvdXJjZXMKKwkgKiBOb3RlOiB0aGUgbmV0ZGV2aWNlIHdhcyBhbGxvY2F0ZWQgYnkgd2xhbl9zZXR1cCgpCisJICovCisgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+aXJxID0gcGRldi0+aXJxOworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkciA9IHBjY2FyZF9pb2FkZHI7CisgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpYXR0cl9tZW07CisgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bWVtX2VuZCA9ICh1bnNpZ25lZCBsb25nKWF0dHJfbWVtICsgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGh3IGRhdGEgKi8KKyAgICAgICAgaGZhMzg0eF9jcmVhdGUoaHcsIHdsYW5kZXYtPm5ldGRldi0+aXJxLCBwY2NhcmRfaW9hZGRyLCBhdHRyX21lbSk7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIHdsYW5kZXYsIHRoaXMgZ2V0cyB1cyBhIG5hbWUgYW5kIHJlZ2lzdGVycyB0aGUKKwkgKiBsaW51eCBuZXRkZXZpY2UuCisJICovCisJU0VUX01PRFVMRV9PV05FUih3bGFuZGV2LT5uZXRkZXYpOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorICAgICAgIFNFVF9ORVRERVZfREVWKHdsYW5kZXYtPm5ldGRldiwgJihwZGV2LT5kZXYpKTsKKyNlbmRpZgorICAgICAgICBpZiAoIHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiByZWdpc3Rlcl93bGFuZGV2KCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorCisjaWYgMAorCS8qIFRPRE86IE1vdmUgdGhpcyBhbmQgYW4gaXJxIHRlc3QgaW50byBhbiBoZmEzODR4X3Rlc3RpZigpIHJvdXRpbmUuCisJICovCisJb3V0dyhQUklTTTJTVEFfTUFHSUMsIEhGQTM4NHhfU1dTVVBQT1JUKHdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyKSk7CisJcmVnPWludyggSEZBMzg0eF9TV1NVUFBPUlQod2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIpKTsKKwlpZiAoIHJlZyAhPSBQUklTTTJTVEFfTUFHSUMgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJNQUMgcmVnaXN0ZXIgYWNjZXNzIHRlc3QgZmFpbGVkIVxuIik7CisgCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisjZW5kaWYKKworCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCisJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAorCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSIlczogaGZhMzg0eF9jb3JlcmVzZXQoKSBmYWlsZWQuXG4iLAorCQkJCWRldl9pbmZvKTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3bGFuZGV2KTsKKworCS8qIFNob3VsZG4ndCBhY3R1YWxseSBob29rIHVwIHRoZSBJUlEgdW50aWwgd2UKKwkgKiBfa25vd18gdGhpbmdzIGFyZSBhbHJpZ2h0LiAgQSB0ZXN0IHJvdXRpbmUgd291bGQgaGVscC4KKwkgKi8KKyAgICAgICAJcmVxdWVzdF9pcnEod2xhbmRldi0+bmV0ZGV2LT5pcnEsIGhmYTM4NHhfaW50ZXJydXB0LAorCQlTQV9TSElSUSwgd2xhbmRldi0+bmFtZSwgd2xhbmRldik7CisKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKworCXJlc3VsdCA9IDA7CisKKwlnb3RvIGRvbmU7CisKKyBmYWlsZWQ6CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOworCWlmIChodykJCWtmcmVlKGh3KTsKKyAgICAgICAgaWYgKGF0dHJfbWVtKSAgICAgICAgaW91bm1hcChhdHRyX21lbSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKyAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisgZG9uZToKKwlEQkZFWElUOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcHJpc20yc3RhX3JlbW92ZV9wbHgoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisgICAgICAgCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3OworCisJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWh3ID0gd2xhbmRldi0+cHJpdjsKKworCXA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldik7CisKKwkvKiByZXNldCBoYXJkd2FyZSAqLworCXByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlKTsKKworICAgICAgICBpZiAocGRldi0+aXJxKQorCQlmcmVlX2lycShwZGV2LT5pcnEsIHdsYW5kZXYpOworCisJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCisJLyogZnJlZSBsb2NhbCBzdHVmZiAqLworCWlmIChodykgeworCQloZmEzODR4X2Rlc3Ryb3koaHcpOworCQlrZnJlZShodyk7CisJfQorCisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopd2xhbmRldi0+bmV0ZGV2LT5tZW1fc3RhcnQpOworCXdsYW5fdW5zZXR1cCh3bGFuZGV2KTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlrZnJlZSh3bGFuZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBseF9pZF90YmxbXSA9IHsKKwl7CisJCVBDSVZFTkRPUl9FVU1JVENPTSwgUENJREVWSUNFX1dMMTEwMDAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJFdW1pdGNvbSBXTDExMDAwIFBDSShQTFgpIGNhcmQiCisJfSwKKwl7CisJCVBDSVZFTkRPUl9HTE9CQUxTVU4sIFBDSURFVklDRV9HTDI0MTEwUCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIkdsb2JhbCBTdW4gVGVjaCBHTDI0MTEwUCBQQ0koUExYKSBjYXJkIgorCX0sCisJeworCQlQQ0lWRU5ET1JfR0xPQkFMU1VOLCBQQ0lERVZJQ0VfR0wyNDExMFBfQUxULAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiR2xvYmFsIFN1biBUZWNoIEdMMjQxMTBQIFBDSShQTFgpIGNhcmQiCisJfSwKKwl7CisJCVBDSVZFTkRPUl9ORVRHRUFSLCBQQ0lERVZJQ0VfTUEzMDEsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJHbG9iYWwgU3VuIFRlY2ggR0wyNDExMFAgUENJKFBMWCkgY2FyZCIKKwl9LAorCXsKKwkJUENJVkVORE9SX1VTUk9CT1RJQ1MsIFBDSURFVklDRV9VU1IyNDEwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiVVMgUm9ib3RpY3MgVVNSMjQxMCBQQ0koUExYKSBjYXJkIgorCX0sCisJeworCQlQQ0lWRU5ET1JfTGlua3N5cywgUENJREVWSUNFX1dwYzExV2R0MTEsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJMaW5rc3lzIFdQQzExIHdpdGggV0RUMTEgUENJKFBMWCkgYWRhcHRlciIKKwl9LAorCXsKKwkgICAgICAgIFBDSVZFTkRPUl9OREMsIFBDSURFVklDRV9OQ1AxMzBfUExYLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiTkRDIE5ldGJsYXN0ZXIgSUkgUENJKFBMWCkiCisJfSwKKwl7CisJICAgICAgICBQQ0lWRU5ET1JfTkRDLCBQQ0lERVZJQ0VfTkNQMTMwX0FTSUMsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJOREMgTmV0Ymxhc3RlciBJSSBQQ0koVE1DNzE2MCkiCisJfSwKKwl7CisJCVBDSVZFTkRPUl8zQ09NLCBQQ0lERVZJQ0VfQUlSQ09OTkVDVCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIjNDb20gQWlyQ29ubmVjdCBQQ0kgODAyLjExYiAxMU1iL3MgV0xBTiBDb250cm9sbGVyIgorCX0sCisJeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwCisJfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBseF9pZF90YmwpOworCisvKiBGdW5jdGlvbiBkZWNsYXJlZCBoZXJlIGJlY2F1c2Ugb2YgcHRyIHJlZmVyZW5jZSBiZWxvdyAqLworc3RhdGljIGludCBfX2RldmluaXQgcHJpc20yc3RhX3Byb2JlX3BseChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOworc3RhdGljIHZvaWQgX19kZXZleGl0IHByaXNtMnN0YV9yZW1vdmVfcGx4KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByaXNtMl9wbHhfZHJ2X2lkID0geworICAgICAgICAubmFtZSA9ICJwcmlzbTJfcGx4IiwKKyAgICAgICAgLmlkX3RhYmxlID0gcGx4X2lkX3RibCwKKyAgICAgICAgLnByb2JlID0gcHJpc20yc3RhX3Byb2JlX3BseCwKKyAgICAgICAgLnJlbW92ZSA9IHByaXNtMnN0YV9yZW1vdmVfcGx4LAorI2lmZGVmIENPTkZJR19QTQorICAgICAgICAuc3VzcGVuZCA9IHByaXNtMnN0YV9zdXNwZW5kX3BjaSwKKyAgICAgICAgLnJlc3VtZSA9IHByaXNtMnN0YV9yZXN1bWVfcGNpLAorI2VuZGlmCit9OworCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMnBseF9pbml0KHZvaWQpCit7CisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZwcmlzbTJfcGx4X2Rydl9pZCk7Cit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20ycGx4X2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnByaXNtMl9wbHhfZHJ2X2lkKTsKK307CisKK21vZHVsZV9pbml0KHByaXNtMnBseF9pbml0KTsKK21vZHVsZV9leGl0KHByaXNtMnBseF9jbGVhbnVwKTsKKworI2VuZGlmIC8vIE1PRFVMRQorCisKK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisKKyNkZWZpbmUgQ09SX09GRlNFVAkweDNlMAkvKiBDT1IgYXR0cmlidXRlIG9mZnNldCBvZiBQcmlzbTIgUEMgY2FyZCAqLworI2RlZmluZSBDT1JfVkFMVUUJMHg0MQkvKiBFbmFibGUgUEMgY2FyZCB3aXRoIGlycSBpbiBsZXZlbCB0cmlnZ2VyICovCisKKyNkZWZpbmUgSENSX09GRlNFVAkweDNlMgkvKiBIQ1IgYXR0cmlidXRlIG9mZnNldCBvZiBQcmlzbTIgUEMgY2FyZCAqLworCisJVUlOVDgJCWNvcnNhdmU7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCAiRG9pbmcgcmVzZXQgdmlhIGRpcmVjdCBDT1IgYWNjZXNzLlxuIik7CisKKwkvKiBDb2xsZWN0IENPUiAqLworCWNvcnNhdmUgPSByZWFkYihody0+bWVtYmFzZSArIENPUl9PRkZTRVQpOworCS8qIFdyaXRlIHJlc2V0IGJpdCAoQklUNykgKi8KKwl3cml0ZWIoY29yc2F2ZSB8IEJJVDcsIGh3LT5tZW1iYXNlICsgQ09SX09GRlNFVCk7CisJLyogSG9sZCBmb3IgaG9sZHRpbWUgKi8KKwltZGVsYXkoaG9sZHRpbWUpOworCisJaWYgKGdlbmVzaXMpIHsKKwkJd3JpdGViKGdlbmVzaXMsIGh3LT5tZW1iYXNlICsgSENSX09GRlNFVCk7CisJCS8qIEhvbGQgZm9yIGhvbGR0aW1lICovCisJCW1kZWxheShob2xkdGltZSk7CisJfQorCisJLyogQ2xlYXIgcmVzZXQgYml0ICovCisJd3JpdGViKGNvcnNhdmUgJiB+QklUNywgaHctPm1lbWJhc2UgKyBDT1JfT0ZGU0VUKTsKKwkvKiBXYWl0IGZvciBzZXR0bGV0aW1lICovCisJbWRlbGF5KHNldHRsZXRpbWUpOworCS8qIFNldCBub24tcmVzZXQgYml0cyBiYWNrIHdoYXQgdGhleSB3ZXJlICovCisJd3JpdGViKGNvcnNhdmUsIGh3LT5tZW1iYXNlICsgQ09SX09GRlNFVCk7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NWJlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfdXNiLmMKQEAgLTAsMCArMSwzNjEgQEAKKyNkZWZpbmUgV0xBTl9IT1NUSUYgV0xBTl9VU0IKKyNpbmNsdWRlICJoZmEzODR4X3VzYi5jIgorI2luY2x1ZGUgInByaXNtMm1nbXQuYyIKKyNpbmNsdWRlICJwcmlzbTJtaWIuYyIKKyNpbmNsdWRlICJwcmlzbTJzdGEuYyIKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZXJyb3IgInByaXNtMl91c2IgcmVxdWlyZXMgYXQgbGVhc3QgYSAyLjQueCBrZXJuZWwhIgorI2VuZGlmCisKKyNkZWZpbmUgUFJJU01fVVNCX0RFVklDRSh2aWQsIHBpZCwgbmFtZSkgXAorICAgICAgICAgICBVU0JfREVWSUNFKHZpZCwgcGlkKSwgIFwKKyAgICAgICAgICAgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIG5hbWUKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9wcmlzbV90YmxbXSA9IHsKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0YmIsIDB4MDkyMiwgIklPRGF0YSBBaXJQb3J0IFdOLUIxMS9VU0JTIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDdhYSwgMHgwMDEyLCAiQ29yZWdhIFdpcmVsZXNzIExBTiBVU0IgU3RpY2stMTEiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwOWFhLCAweDM2NDIsICJQcmlzbTIueCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQwOCwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQyMSwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE5MTUsIDB4MjIzNiwgIkxpbmtzeXMgV1VTQjExdjMuMCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMiwgIkxpbmtzeXMgV1VTQjExdjIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMywgIkxpbmtzeXMgV1VTQjEydjEuMSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA2N2MsIDB4MTAyMiwgIlNpZW1lbnMgU3BlZWRTdHJlYW0gMTAyMiAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMywgIkNvbXBhcS9JbnRlbCBXMTAwIFBSTy9XaXJlbGVzcyAxMU1icHMgbXVsdGlwb3J0IFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0MTEsIDB4MDAxNiwgIk1lbGNvIFdMSS1VU0ItUzExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwOGRlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHg4MDg2LCAweDExMTEsICJJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIgTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGQ4ZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMDZlLCAiTWljcm9zb2Z0IE1ONTEwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDk2NywgMHgwMjA0LCAiQWNlciBXYXJwbGluayBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMiwgIlotQ29tIDcyNS83MjYgUHJpc20yLjUgVVNCL1VTQiBJbnRlZ3JhdGVkIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA1LCAiWi1Db20gWGw3MzUgV2lyZWxlc3MgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDQxM2MsIDB4ODEwMCwgIkRlbGwgVHJ1ZU1vYmlsZSAxMTgwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGIzYiwgMHgxNjAxLCAiQUxMTkVUIDAxOTMgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MDIsICJaeVhFTCBaeUFJUiBCMjAwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGJhZiwgMHgwMGViLCAiVVNSb2JvdGljcyBVU1IxMTIwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDQxMSwgMHgwMDI3LCAiTWVsY28gV0xJLVVTQi1LUzExRyAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAorICAgICAgICB7UFJJU01fVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDg0NiwgMHg0MTEwLCAiTmV0R2VhciBNQTExMSIpfSwKKyAgICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwM2YzLCAweDAwMjAsICJBZGFwdGVjIEFXTi04MDIwIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCisvLwl7UFJJU01fVVNCX0RFVklDRSgweDBhY2UsIDB4MTIwMSwgIlp5REFTIFpEMTIwMSBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDI4MjEsIDB4MzMwMCwgIkFTVVMtV0wxNDAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDAsICJEV0wtMTIyIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAyLCAiRFdMLTEyMCBSZXYgRiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDUwYzIsIDB4NDAxMywgIkF2ZXJhdGVjIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyYzAyLCAweDE0ZWEsICJQbGFuZXggR1ctVVMxMUggV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4MTY4YiwgIkFpcnZhc3QgUFJJU00zIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwODNhLCAweDM1MDMsICJULVNpbnVzIDExMSBVU0IgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MjgyMSwgMHgzMzAwLCAiSGF3a2luZyBIaWdoREIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDExLCAweDAwNDQsICJNZWxjbyBXTEktVVNCLUtCMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4NjEwNiwgIlJPUEVYIEZyZWVMYW4gODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4NDAxNywgIlBoZWVuZXQgV0wtNTAzSUEgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBiYjIsIDB4MDMwMiwgIkFtYml0IE1pY3Jvc3lzdGVtcyBDb3JwLiIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDkwMTYsIDB4MTgyZCwgIlNpdGVjb20gV0wtMDIyIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNTQzLCAweDBmMDEsICJWaWV3U29uaWMgQWlyc3luYyBVU0IgQWRhcHRlciAxMU1icHMgKFByaXNtMi41KSIpfSwKKwl7IC8qIHRlcm1pbmF0b3IgKi8gfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9wcmlzbV90YmwpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX3Byb2JlX3VzYgorKgorKiBQcm9iZSByb3V0aW5lIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbS4KKyoKKyogQXJndW1lbnRzOgorKglkZXYJCXB0ciB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3QKKyoJaWZudW0JCWludGVyZmFjZSBudW1iZXIgYmVpbmcgb2ZmZXJlZAorKgorKiBSZXR1cm5zOgorKglOVUxMCQktIHdlJ3JlIG5vdCBjbGFpbWluZyB0aGUgZGV2aWNlK2ludGVyZmFjZQorKglub24tTlVMTAktIHdlIGFyZSBjbGFpbWluZyB0aGUgZGV2aWNlK2ludGVyZmFjZSBhbmQKKyoJCQkgIHRoaXMgaXMgYSBwdHIgdG8gdGhlIGRhdGEgd2Ugd2FudCBiYWNrCisqCQkJICB3aGVuIGRpc2Nvbm5lY3QgaXMgY2FsbGVkLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJSSdtIG5vdCBzdXJlLCBhc3N1bWUgaXQncyBpbnRlcnJ1cHQuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorc3RhdGljIHZvaWQgX19kZXZpbml0ICpwcmlzbTJzdGFfcHJvYmVfdXNiKAorCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJdW5zaWduZWQgaW50IGlmbnVtLAorCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKyNlbHNlCitzdGF0aWMgaW50IHByaXNtMnN0YV9wcm9iZV91c2IoCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCisjZW5kaWYKK3sKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKyNlbHNlCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKyNlbmRpZgorCisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gTlVMTDsKKwloZmEzODR4X3QJKmh3ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJaW50ZXJmYWNlID0gJmRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaWZudW1dOworI2Vsc2UKKwlkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisjZW5kaWYKKworCisJaWYgKCh3bGFuZGV2ID0gY3JlYXRlX3dsYW4oKSkgPT0gTlVMTCkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBodyBkYXRhICovCisJaGZhMzg0eF9jcmVhdGUoaHcsIGRldik7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIHdsYW5kZXYsIHRoaXMgZ2V0cyB1cyBhIG5hbWUgYW5kIHJlZ2lzdGVycyB0aGUKKwkgKiBsaW51eCBuZXRkZXZpY2UuCisJICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisJU0VUX05FVERFVl9ERVYod2xhbmRldi0+bmV0ZGV2LCAmKGludGVyZmFjZS0+ZGV2KSk7CisjZW5kaWYKKyAgICAgICAgaWYgKCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogcmVnaXN0ZXJfd2xhbmRldigpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisgICAgICAgIH0KKworCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCisJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAorCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiJXM6IGhmYTM4NHhfY29yZXJlc2V0KCkgZmFpbGVkLlxuIiwKKwkJCQlkZXZfaW5mbyk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCX0KKworI2lmbmRlZiBORVdfTU9EVUxFX0NPREUKKwl1c2JfaW5jX2Rldl91c2UoZGV2KTsKKyNlbmRpZgorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDE1KSkKKwl1c2JfZ2V0X2RldihkZXYpOworI2VuZGlmCisKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKworCWdvdG8gZG9uZTsKKworIGZhaWxlZDoKKwlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7CisJaWYgKGh3KQkJa2ZyZWUoaHcpOworCXdsYW5kZXYgPSBOVUxMOworCisgZG9uZToKKwlEQkZFWElUOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwlyZXR1cm4gd2xhbmRldjsKKyNlbHNlCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHdsYW5kZXYpOworCXJldHVybiByZXN1bHQ7CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiCisqCisqIENhbGxlZCB3aGVuIGEgZGV2aWNlIHByZXZpb3VzbHkgY2xhaW1lZCBieSBwcm9iZSBpcyByZW1vdmVkCisqIGZyb20gdGhlIFVTQi4KKyoKKyogQXJndW1lbnRzOgorKglkZXYJCXB0ciB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3QKKyoJcHRyCQlwdHIgcmV0dXJuZWQgYnkgcHJvYmUoKSB3aGVuIHRoZSBkZXZpY2UKKyogICAgICAgICAgICAgICAgICAgICAgIHdhcyBjbGFpbWVkLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorc3RhdGljIHZvaWQgX19kZXZleGl0CitwcmlzbTJzdGFfZGlzY29ubmVjdF91c2Ioc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKQorI2Vsc2UKK3N0YXRpYyB2b2lkCitwcmlzbTJzdGFfZGlzY29ubmVjdF91c2Ioc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKKyNlbmRpZgoreworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisjZWxzZQorCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSAod2xhbmRldmljZV90KilwdHI7CisjZW5kaWYKKworICAgICAgICBEQkZFTlRFUjsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKyNlbmRpZgorCisJaWYgKCB3bGFuZGV2ICE9IE5VTEwgKSB7CisJCUxJU1RfSEVBRChjbGVhbmxpc3QpOworCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKKwkJc3RydWN0IGxpc3RfaGVhZAkqdGVtcDsKKwkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwkJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCisJCWlmICghaHcpCisJCQlnb3RvIGV4aXQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkJcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2KTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmaHctPmN0bHhxLnJlYXBhYmxlLCAmY2xlYW5saXN0KTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmaHctPmN0bHhxLmNvbXBsZXRpbmcsICZjbGVhbmxpc3QpOworCQlsaXN0X3NwbGljZV9pbml0KCZody0+Y3RseHEucGVuZGluZywgJmNsZWFubGlzdCk7CisJCWxpc3Rfc3BsaWNlX2luaXQoJmh3LT5jdGx4cS5hY3RpdmUsICZjbGVhbmxpc3QpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkJLyogVGhlcmUncyBubyBoYXJkd2FyZSB0byBzaHV0ZG93biwgYnV0IHRoZSBkcml2ZXIKKwkJICogbWlnaHQgaGF2ZSBzb21lIHRhc2tzIG9yIHRhc2tsZXRzIHRoYXQgbXVzdCBiZQorCQkgKiBzdG9wcGVkIGJlZm9yZSB3ZSBjYW4gdGVhciBldmVyeXRoaW5nIGRvd24uCisJCSAqLworCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisKKwkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnRocm90dGxlKTsKKwkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlcXRpbWVyKTsKKwkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlc3B0aW1lcik7CisKKwkJLyogVW5saW5rIGFsbCB0aGUgVVJCcy4gVGhpcyAicmVtb3ZlcyB0aGUgd2hlZWxzIgorCQkgKiBmcm9tIHRoZSBlbnRpcmUgQ1RMWCBoYW5kbGluZyBtZWNoYW5pc20uCisJCSAqLworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCQl1c2Jfa2lsbF91cmIoJmh3LT50eF91cmIpOworCQl1c2Jfa2lsbF91cmIoJmh3LT5jdGx4X3VyYik7CisKKwkJdGFza2xldF9raWxsKCZody0+Y29tcGxldGlvbl9iaCk7CisJCXRhc2tsZXRfa2lsbCgmaHctPnJlYXBlcl9iaCk7CisKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCQkvKiBOb3cgd2UgY29tcGxldGUgYW55IG91dHN0YW5kaW5nIGNvbW1hbmRzCisJCSAqIGFuZCB0ZWxsIGV2ZXJ5b25lIHdobyBpcyB3YWl0aW5nIGZvciB0aGVpcgorCQkgKiByZXNwb25zZXMgdGhhdCB3ZSBoYXZlIHNodXQgZG93bi4KKwkJICovCisJCWxpc3RfZm9yX2VhY2goZW50cnksICZjbGVhbmxpc3QpIHsKKwkJCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOworCQkJY29tcGxldGUoJmN0bHgtPmRvbmUpOworCQl9CisKKwkJLyogR2l2ZSBhbnkgb3V0c3RhbmRpbmcgc3luY2hyb25vdXMgY29tbWFuZHMKKwkJICogYSBjaGFuY2UgdG8gY29tcGxldGUuIEFsbCB0aGV5IG5lZWQgdG8gZG8KKwkJICogaXMgIndha2UgdXAiLCBzbyB0aGF0J3MgZWFzeS4KKwkJICogKEknZCBsaWtlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCByZWFsbHkuKQorCQkgKi8KKwkJbXNsZWVwKDEwMCk7CisKKwkJLyogTm93IGRlbGV0ZSB0aGUgQ1RMWHMsIGJlY2F1c2Ugbm8tb25lIGVsc2UgY2FuIG5vdy4gKi8KKwkJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0ZW1wLCAmY2xlYW5saXN0KSB7CisJCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKKworCQkJY3RseCA9IGxpc3RfZW50cnkoZW50cnksIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKKwkJCWtmcmVlKGN0bHgpOworCQl9CisKKwkJLyogVW5ob29rIHRoZSB3bGFuZGV2ICovCisJCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKwkJd2xhbl91bnNldHVwKHdsYW5kZXYpOworCisjaWZuZGVmIE5FV19NT0RVTEVfQ09ERQorCQl1c2JfZGVjX2Rldl91c2UoaHctPnVzYik7CisjZW5kaWYKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkpCisJCXVzYl9wdXRfZGV2KGh3LT51c2IpOworI2VuZGlmCisKKwkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJa2ZyZWUoaHcpOworCisJCWtmcmVlKHdsYW5kZXYpOworCX0KKworIGV4aXQ6CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisjZW5kaWYKKwlEQkZFWElUOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwcmlzbTJfdXNiX2RyaXZlciA9IHsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDE5KSkgJiYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikpCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisjZW5kaWYKKwkubmFtZSA9ICJwcmlzbTJfdXNiIiwKKwkucHJvYmUgPSBwcmlzbTJzdGFfcHJvYmVfdXNiLAorCS5kaXNjb25uZWN0ID0gcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiLAorCS5pZF90YWJsZSA9IHVzYl9wcmlzbV90YmwsCisJLyogZm9wcywgbWlub3I/ICovCit9OworCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMnVzYl9pbml0KHZvaWQpCit7CisgICAgICAgIERCRkVOVEVSOworCisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKyAgICAgICAgV0xBTl9MT0dfTk9USUNFKCJkZXZfaW5mbyBpczogJXNcbiIsIGRldl9pbmZvKTsKKworCS8qIFRoaXMgY2FsbCB3aWxsIHJlc3VsdCBpbiBjYWxscyB0byBwcmlzbTJzdGFfcHJvYmVfdXNiLiAqLworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnByaXNtMl91c2JfZHJpdmVyKTsKKworCURCRkVYSVQ7Cit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20ydXNiX2NsZWFudXAodm9pZCkKK3sKKyAgICAgICAgREJGRU5URVI7CisKKwl1c2JfZGVyZWdpc3RlcigmcHJpc20yX3VzYl9kcml2ZXIpOworCisgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgVW5sb2FkZWRcbiIsIHZlcnNpb24pOworCisJREJGRVhJVDsKK307CisKK21vZHVsZV9pbml0KHByaXNtMnVzYl9pbml0KTsKK21vZHVsZV9leGl0KHByaXNtMnVzYl9jbGVhbnVwKTsKKworI2VuZGlmIC8vIG1vZHVsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzUwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKQEAgLTAsMCArMSwyOTU2IEBACisvKiBzcmMvcHJpc20yL2RyaXZlci9wcmlzbTJtZ210LmMKKyoKKyogTWFuYWdlbWVudCByZXF1ZXN0IGhhbmRsZXIgZnVuY3Rpb25zLgorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBoYW5kbGUgbWFuYWdlbWVudCByZXF1ZXN0cyBzZW50IGZyb20KKyogdXNlciBtb2RlLgorKgorKiBNb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHR3byBzZXBhcmF0ZSBibG9ja3Mgb2YgY29kZSB0aGF0IGFyZQorKiBjb25kaXRpb25hbCBvbiB3aGV0aGVyIHRoaXMgaXMgYSBzdGF0aW9uIG9yIGFuIEFQLiAgVGhpcyBpcyB1c2VkCisqIHRvIHNlcGFyYXRlIG91dCB0aGUgU1RBIGFuZCBBUCByZXNwb25zZXMgdG8gdGhlc2UgbWFuYWdlbWVudCBwcmltaXRpdmVzLgorKiBJdCdzIGEgY2hvaWNlIChnb29kLCBiYWQsIGluZGlmZmVyZW50PykgdG8gaGF2ZSB0aGUgY29kZSBpbiB0aGUgc2FtZQorKiBwbGFjZSBzbyBpdCdzIGNsZWFyIHRoYXQgdGhlIHNhbWUgcHJpbWl0aXZlIGlzIGltcGxlbWVudGVkIGluIGJvdGgKKyogY2FzZXMgYnV0IGhhcyBkaWZmZXJlbnQgYmVoYXZpb3IuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjZW5kaWYKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKyNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgorI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKKyNpbmNsdWRlICJoZmEzODR4LmgiCisjaW5jbHVkZSAicHJpc20ybWdtdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisvKiBDb252ZXJ0cyA4MDIuMTEgZm9ybWF0IHJhdGUgc3BlY2lmaWNhdGlvbnMgdG8gcHJpc20yICovCisjZGVmaW5lIHA4MDIxMXJhdGVfdG9fcDJiaXQobikJKCgoKG4pJn5CSVQ3KSA9PSAyKSA/IEJJVDAgOiBcCisJCQkJICgoKG4pJn5CSVQ3KSA9PSA0KSA/IEJJVDEgOiBcCisJCQkJICgoKG4pJn5CSVQ3KSA9PSAxMSkgPyBCSVQyIDogXAorCQkJCSAoKChuKSZ+QklUNykgPT0gMjIpID8gQklUMyA6IDApCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcG93ZXJtZ210CisqCisqIFNldCB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZSBvZiB0aGlzIHN0YXRpb24ncyBNQUMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9wb3dlcm1nbXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfcG93ZXJtZ210X3QJKm1zZyA9IG1zZ3A7CisKKwlEQkZFTlRFUjsKKworCWlmICghaHctPmFwKSB7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKworCQkvKgorCQkgKiBTZXQgQ05GUE1FTkFCTEVEIChvbiBvciBvZmYpCisJCSAqIFNldCBDTkZNVUxUSUNBU1RSWCAoaWYgUE0gb24sIG90aGVyd2lzZSBjbGVhcikKKwkJICogU3BvdXQgYSBub3RpY2Ugc3RhdGluZyB0aGF0IFNsZWVwRHVyYXRpb24gYW5kCisJCSAqIEhvbGRvdmVyRHVyYXRpb24gYW5kIFBNRVBTIGFsc28gaGF2ZSBhbiBpbXBhY3QuCisJCSAqLworCQkvKiBQb3dlcm1nbXQgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkIGZvciBTVEEgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBQb3dlcm1nbXQgaXMgbmV2ZXIgc3VwcG9ydGVkIGZvciBBUCAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9zY2FuCisqCisqIEluaXRpYXRlIGEgc2NhbiBmb3IgQlNTcy4KKyoKKyogVGhpcyBmdW5jdGlvbiBjb3JyZXNwb25kcyB0byBNTE1FLXNjYW4ucmVxdWVzdCBhbmQgcGFydCBvZgorKiBNTE1FLXNjYW4uY29uZmlybS4gIEFzIGZhciBhcyBJIGNhbiB0ZWxsIGluIHRoZSBzdGFuZGFyZCwgdGhlcmUKKyogYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiB3aGVuIGEgc2Nhbi5yZXF1ZXN0IG1heSBiZSBpc3N1ZWQuICBXZSBoYXZlCisqIHRvIGhhbmRsZSBpbiB3aGF0ZXZlciBzdGF0ZSB0aGUgZHJpdmVyL01BQyBoYXBwZW4gdG8gYmUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdAkqbXNnID0gbXNncDsKKyAgICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgcm9hbWluZ21vZGUsIHdvcmQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaSwgdGltZW91dDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBpc3RtcGVuYWJsZSA9IDA7CisKKyAgICAgICAgaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90ICBzY2FucmVxOworCisJREJGRU5URVI7CisKKyAgICAgICAgaWYgKGh3LT5hcCkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJQcmlzbTIgaW4gQVAgbW9kZSBjYW5ub3QgcGVyZm9ybSBzY2Fucy5cbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IDE7CisgICAgICAgICAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBnYXRla2VlcGVyIGNoZWNrICovCisgICAgICAgIGlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAorICAgICAgICAgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsMywyKSkgeworCQlXTEFOX0xPR19FUlJPUigiSG9zdFNjYW4gbm90IHN1cHBvcnRlZCB3aXRoIGN1cnJlbnQgZmlybXdhcmUgKDwxLjMuMikuXG4iKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAxOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyAgICAgICAgbWVtc2V0KCZzY2FucmVxLCAwLCBzaXplb2Yoc2NhbnJlcSkpOworCisgICAgICAgIC8qIHNhdmUgY3VycmVudCByb2FtaW5nIG1vZGUgKi8KKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsICZyb2FtaW5nbW9kZSk7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJnZXRjb25maWcoUk9BTU1PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRyb3AgaW50byBtb2RlIDMgZm9yIHRoZSBzY2FuICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKyAgICAgICAgICAgICAgICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoUk9BTUlOR01PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFjdGl2ZSBvciBwYXNzaXZlPyAqLworICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpID4KKyAgICAgICAgICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDUsMCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobXNnLT5zY2FudHlwZS5kYXRhICE9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTCwgd29yZCk7CisgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0xPR19XQVJOSU5HKCJQYXNzaXZlIHNjYW4gbm90IHN1cHBvcnRlZCB3aXRoICIKKwkJCQkJICAiY3VycmVudCBmaXJtd2FyZS4gICg8MS41LjEpXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworCS8qIHNldCB1cCB0aGUgdHhyYXRlIHRvIGJlIDJNQlBTLiBTaG91bGQgYmUgZmFzdGVzdCBiYXNpY3JhdGUuLi4gKi8KKwl3b3JkID0gSEZBMzg0eF9SQVRFQklUXzI7CisJc2NhbnJlcS50eFJhdGUgPSBob3N0MmhmYTM4NHhfMTYod29yZCk7CisKKyAgICAgICAgLyogc2V0IHVwIHRoZSBjaGFubmVsIGxpc3QgKi8KKyAgICAgICAgd29yZCA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2ctPmNoYW5uZWxsaXN0LmRhdGEubGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBVSU5UOCBjaGFubmVsID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaV07CisgICAgICAgICAgICAgICAgaWYgKGNoYW5uZWwgPiAxNCkgY29udGludWU7CisgICAgICAgICAgICAgICAgLyogY2hhbm5lbCAxIGlzIEJJVDAgLi4uIGNoYW5uZWwgMTQgaXMgQklUMTMgKi8KKyAgICAgICAgICAgICAgICB3b3JkIHw9ICgxIDw8IChjaGFubmVsLTEpKTsKKyAgICAgICAgfQorICAgICAgICBzY2FucmVxLmNoYW5uZWxMaXN0ID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCisgICAgICAgIC8qIHNldCB1cCB0aGUgc3NpZCwgaWYgcHJlc2VudC4gKi8KKyAgICAgICAgc2NhbnJlcS5zc2lkLmxlbiA9IGhvc3QyaGZhMzg0eF8xNihtc2ctPnNzaWQuZGF0YS5sZW4pOworICAgICAgICBtZW1jcHkoc2NhbnJlcS5zc2lkLmRhdGEsIG1zZy0+c3NpZC5kYXRhLmRhdGEsIG1zZy0+c3NpZC5kYXRhLmxlbik7CisKKwkvKiBFbmFibGUgdGhlIE1BQyBwb3J0IGlmIGl0J3Mgbm90IGFscmVhZHkgZW5hYmxlZCAgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsICZ3b3JkKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoImdldGNvbmZpZyhQT1JUU1RBVFVTKSBmYWlsZWQuICIKKwkJCQkicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJZ290byBleGl0OworCX0KKwlpZiAod29yZCA9PSBIRkEzODR4X1BPUlRTVEFUVVNfRElTQUJMRUQpIHsKKwkJVUlOVDE2IHdvcmRidWZbMTddOworCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCUhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJLyogQ29uc3RydWN0IGEgYm9ndXMgU1NJRCBhbmQgYXNzaWduIGl0IHRvIE93blNTSUQgYW5kCisJCSAqIERlc2lyZWRTU0lECisJCSAqLworCQl3b3JkYnVmWzBdID0gaG9zdDJoZmEzODR4XzE2KFdMQU5fU1NJRF9NQVhMRU4pOworCQlnZXRfcmFuZG9tX2J5dGVzKCZ3b3JkYnVmWzFdLCBXTEFOX1NTSURfTUFYTEVOKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJd29yZGJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IE93blNTSUQuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQkJd29yZGJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBEZXNpcmVkU1NJRC5cbiIpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJZ290byBleGl0OworCQl9CisJCS8qIGJzc3R5cGUgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCUhGQTM4NHhfUE9SVFRZUEVfSUJTUyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ05GUE9SVFRZUEUuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKiBpYnNzIG9wdGlvbnMgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MsCisJCQkJSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBDUkVBVEVJQlNTLlxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoImRydnJfZW5hYmxlKDApIGZhaWxlZC4gIgorCQkJCQkicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaXN0bXBlbmFibGUgPSAxOworCX0KKworICAgICAgICAvKiBGaWd1cmUgb3V0IG91ciB0aW1lb3V0IGZpcnN0IEt1cywgdGhlbiBIWiAqLworICAgICAgICB0aW1lb3V0ID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmxlbiAqIG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YTsKKwl0aW1lb3V0ID0gKHRpbWVvdXQgKiBIWikvMTAwMDsKKworICAgICAgICAvKiBJc3N1ZSB0aGUgc2NhbiByZXF1ZXN0ICovCisgICAgICAgIGh3LT5zY2FuZmxhZyA9IDA7CisKKwlXTEFOX0hFWF9EVU1QKDUsImhzY2FucmVxIiwgJnNjYW5yZXEsIHNpemVvZihzY2FucmVxKSk7CisKKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisgICAgICAgICAgICAgICAgICAgICAgICBIRkEzODR4X1JJRF9IT1NUU0NBTiwgJnNjYW5yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90KSk7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoU0NBTlJFUVVFU1QpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNsZWVwIHVudGlsIGluZm8gZnJhbWUgYXJyaXZlcyAqLworICAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChody0+Y21kcSwgaHctPnNjYW5mbGFnLCB0aW1lb3V0KTsKKworCW1zZy0+bnVtYnNzLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlpZiAoaHctPnNjYW5mbGFnID09IC0xKQorCQlody0+c2NhbmZsYWcgPSAwOworCisJbXNnLT5udW1ic3MuZGF0YSA9IGh3LT5zY2FuZmxhZzsKKworICAgICAgICBody0+c2NhbmZsYWcgPSAwOworCisJLyogRGlzYWJsZSBwb3J0IGlmIHdlIHRlbXBvcmFyaWx5IGVuYWJsZWQgaXQuICovCisJaWYgKGlzdG1wZW5hYmxlKSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiZHJ2cl9kaXNhYmxlKDApIGZhaWxlZC4gIgorCQkJCQkicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwkvKiByZXN0b3JlIG9yaWdpbmFsIHJvYW1pbmcgbW9kZSAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsCisJCQkJCSAgcm9hbWluZ21vZGUpOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSAwOworICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisgZXhpdDoKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3NjYW5fcmVzdWx0cworKgorKiBSZXRyaWV2ZSB0aGUgQlNTIGRlc2NyaXB0aW9uIGZvciBvbmUgb2YgdGhlIEJTU3MgaWRlbnRpZmllZCBpbgorKiBhIHNjYW4uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgICAgICAgKnJlcTsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90ICppdGVtID0gTlVMTDsKKworCWludCBjb3VudDsKKworCURCRkVOVEVSOworCisgICAgICAgIHJlcSA9IChwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKikgbXNncDsKKworCXJlcS0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwlpZiAoaHctPmFwKSB7CisJCXJlc3VsdCA9IDE7CisJCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoISBody0+c2NhbnJlc3VsdHMpIHsKKwkJV0xBTl9MT0dfRVJST1IoImRvdDExcmVxX3NjYW5fcmVzdWx0cyBjYW4gb25seSBiZSB1c2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkb3QxMXJlcV9zY2FuLlxuIik7CisJCXJlc3VsdCA9IDI7CisJCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJZ290byBleGl0OworCX0KKworICAgICAgICBjb3VudCA9IChody0+c2NhbnJlc3VsdHMtPmZyYW1lbGVuIC0gMykgLyAzMjsKKwlpZiAoY291bnQgPiAzMikgIGNvdW50ID0gMzI7CisKKwlpZiAocmVxLT5ic3NpbmRleC5kYXRhID49IGNvdW50KSB7CisJCVdMQU5fTE9HX0RFQlVHKDAsICJyZXF1ZXN0ZWQgaW5kZXggKCVkKSBvdXQgb2YgcmFuZ2UgKCVkKVxuIiwKKwkJCQlyZXEtPmJzc2luZGV4LmRhdGEsIGNvdW50KTsKKwkJcmVzdWx0ID0gMjsKKwkJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlnb3RvIGV4aXQ7CisJfQorCisJaXRlbSA9ICYoaHctPnNjYW5yZXN1bHRzLT5pbmZvLmhzY2FucmVzdWx0LnJlc3VsdFtyZXEtPmJzc2luZGV4LmRhdGFdKTsKKwkvKiBzaWduYWwgYW5kIG5vaXNlICovCisJcmVxLT5zaWduYWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+bm9pc2Uuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+c2lnbmFsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+c2wpOworCXJlcS0+bm9pc2UuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5hbmwpOworCisJLyogQlNTSUQgKi8KKwlyZXEtPmJzc2lkLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmJzc2lkLmRhdGEubGVuID0gV0xBTl9CU1NJRF9MRU47CisJbWVtY3B5KHJlcS0+YnNzaWQuZGF0YS5kYXRhLCBpdGVtLT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCisJLyogU1NJRCAqLworCXJlcS0+c3NpZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5zc2lkLmRhdGEubGVuID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPnNzaWQubGVuKTsKKwltZW1jcHkocmVxLT5zc2lkLmRhdGEuZGF0YSwgaXRlbS0+c3NpZC5kYXRhLCByZXEtPnNzaWQuZGF0YS5sZW4pOworCisJLyogc3VwcG9ydGVkIHJhdGVzICovCisgICAgICAgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IDEwIDsgY291bnQrKykKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS0+c3VwcHJhdGVzW2NvdW50XSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNkZWZpbmUgUkVRQkFTSUNSQVRFKE4pIFwKKwlpZiAoKGNvdW50ID49IE4pICYmIERPVDExX1JBVEU1X0lTQkFTSUNfR0VUKGl0ZW0tPnN1cHByYXRlc1soTiktMV0pKSB7IFwKKwkJcmVxLT5iYXNpY3JhdGUgIyMgTiAuZGF0YSA9IGl0ZW0tPnN1cHByYXRlc1soTiktMV07IFwKKwkJcmVxLT5iYXNpY3JhdGUgIyMgTiAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCisJfQorCisJUkVRQkFTSUNSQVRFKDEpOworCVJFUUJBU0lDUkFURSgyKTsKKwlSRVFCQVNJQ1JBVEUoMyk7CisJUkVRQkFTSUNSQVRFKDQpOworCVJFUUJBU0lDUkFURSg1KTsKKwlSRVFCQVNJQ1JBVEUoNik7CisJUkVRQkFTSUNSQVRFKDcpOworCVJFUUJBU0lDUkFURSg4KTsKKworI2RlZmluZSBSRVFTVVBQUkFURShOKSBcCisJaWYgKGNvdW50ID49IE4pIHsgXAorCQlyZXEtPnN1cHByYXRlICMjIE4gLmRhdGEgPSBpdGVtLT5zdXBwcmF0ZXNbKE4pLTFdOyBcCisJCXJlcS0+c3VwcHJhdGUgIyMgTiAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCisJfQorCisJUkVRU1VQUFJBVEUoMSk7CisJUkVRU1VQUFJBVEUoMik7CisJUkVRU1VQUFJBVEUoMyk7CisJUkVRU1VQUFJBVEUoNCk7CisJUkVRU1VQUFJBVEUoNSk7CisJUkVRU1VQUFJBVEUoNik7CisJUkVRU1VQUFJBVEUoNyk7CisJUkVRU1VQUFJBVEUoOCk7CisKKwkvKiBiZWFjb24gcGVyaW9kICovCisJcmVxLT5iZWFjb25wZXJpb2Quc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+YmVhY29ucGVyaW9kLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+YmNuaW50KTsKKworCS8qIHRpbWVzdGFtcHMgKi8KKwlyZXEtPnRpbWVzdGFtcC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT50aW1lc3RhbXAuZGF0YSA9IGppZmZpZXM7CisJcmVxLT5sb2NhbHRpbWUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+bG9jYWx0aW1lLmRhdGEgPSBqaWZmaWVzOworCisJLyogYXRpbSB3aW5kb3cgKi8KKwlyZXEtPmlic3NhdGltd2luZG93LnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmlic3NhdGltd2luZG93LmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+YXRpbSk7CisKKwkvKiBDaGFubmVsICovCisJcmVxLT5kc2NoYW5uZWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+ZHNjaGFubmVsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+Y2hpZCk7CisKKwkvKiBjYXBpbmZvIGJpdHMgKi8KKwljb3VudCA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5jYXBpbmZvKTsKKworCS8qIHByaXZhY3kgZmxhZyAqLworCXJlcS0+cHJpdmFjeS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5wcml2YWN5LmRhdGEgPSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BSSVZBQ1koY291bnQpOworCisJLyogY2Zwb2xsYWJsZSAqLworCXJlcS0+Y2Zwb2xsYWJsZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5jZnBvbGxhYmxlLmRhdGEgPSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUoY291bnQpOworCisJLyogY2Zwb2xscmVxICovCisJcmVxLT5jZnBvbGxyZXEuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+Y2Zwb2xscmVxLmRhdGEgPSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShjb3VudCk7CisKKwkvKiBic3N0eXBlICovCisJcmVxLT5ic3N0eXBlLnN0YXR1cyA9ICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5ic3N0eXBlLmRhdGEgPSAoV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19FU1MoY291bnQpKSA/CisJCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZSA6CisJCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDsKKworCS8vIGl0ZW0tPnByb2JlcmVzcF9yYXRlCisvKgorCXJlcS0+Zmhkd2VsbHRpbWUKKwlyZXEtPmZoaG9wc2V0CisJcmVxLT5maGhvcHBhdHRlcm4KKwlyZXEtPmZoaG9waW5kZXgKKyAgICAgICAgcmVxLT5jZnBkdXJyZW1haW5pbmcKKyovCisKKwlyZXN1bHQgPSAwOworCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9qb2luCisqCisqIEpvaW4gYSBCU1Mgd2hvc2UgQlNTIGRlc2NyaXB0aW9uIHdhcyBwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKyogYSBzY2FuLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9qb2luX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogSW1wbGVtZW50IGFmdGVyIHNjYW4gKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgYnkgQVBzICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3AyX2pvaW4KKyoKKyogSm9pbiBhIHNwZWNpZmljIEJTUworKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcDJfam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9qb2luX3QJKm1zZyA9IG1zZ3A7CisJVUlOVDE2CQkJcmVnOworCXA4MDIxMXBzdHJkX3QJCSpwc3RyOworCVVJTlQ4CQkJYnl0ZWJ1ZlsyNTZdOworCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7CisgICAgICAgIGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90CWpvaW5yZXE7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKworCQkvKioqIFNUQVRJT04gKioqLworCQkvKiBTZXQgdGhlIFBvcnRUeXBlICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwkJLyogZXNzIHBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgMSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgUG9ydCBUeXBlXG4iKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogU2V0IHRoZSBhdXRoIHR5cGUgKi8KKwkJaWYgKCBtc2ctPmF1dGh0eXBlLmRhdGEgPT0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleSApIHsKKwkJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZOworCQl9IGVsc2UgeworCQkJcmVnID0gSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNOworCQl9CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIHJlZyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQXV0aGVudGljYXRpb25cbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBUdXJuIG9mZiBhbGwgcm9hbWluZyAqLworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLCAzKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIFR1cm4gb2ZmIFJvYW1pbmdcbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBCYXNpYyByYXRlcyAqLworICAgICAgICAgICAgICAgIHJlZyA9IDA7CisJCWlmICggbXNnLT5iYXNpY3JhdGUxLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgPSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTMuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPmJhc2ljcmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNC5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTYuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPmJhc2ljcmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU4LmRhdGEpOworCQl9CisJCWlmKCByZWcgPT0gMCkKKwkJCSByZWcgPSAweDAzOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIHJlZyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmFzaWNyYXRlcz0lZC5cbiIsIHJlZyk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIE9wZXJhdGlvbmFsIHJhdGVzIChzdXBwcmF0ZXMgYW5kIHR4cmF0ZWNvbnRyb2wpICovCisJCXJlZyA9IDA7CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUxLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgPSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTMuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTYuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU4LmRhdGEpOworCQl9CisJCWlmKCByZWcgPT0gMCkKKwkJCSByZWcgPSAweDBmOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlNVUFBSQVRFUywgcmVnKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCByZWcpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCByZWcpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHR4cmF0ZXM9JWQuXG4iLCByZWcpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBTZXQgdGhlIHNzaWQgKi8KKwkJbWVtc2V0KGJ5dGVidWYsIDAsIDI1Nik7CisJCXBzdHIgPSAocDgwMjExcHN0cmRfdCopJihtc2ctPnNzaWQuZGF0YSk7CisJCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoCisJCQlodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IFNTSURcbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZW5hYmxlKGh3LCAwKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRW5hYmxlIG1hY3BvcnQgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBGaWxsIGluIHRoZSBqb2luIHJlcXVlc3QgKi8KKwkJam9pbnJlcS5jaGFubmVsID0gbXNnLT5jaGFubmVsLmRhdGE7CisJCW1lbWNweSggam9pbnJlcS5ic3NpZCwgKCh1bnNpZ25lZCBjaGFyICopICZtc2ctPmJzc2lkLmRhdGEpICsgMSwgV0xBTl9CU1NJRF9MRU4pOworCQlody0+am9pbnJlcSA9IGpvaW5yZXE7CisJCWh3LT5qb2luX2FwID0gMTsKKworCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworICAgICAgICAgICAgICAgIGlmKHJlc3VsdCAhPSAwKSB7CisJCQlXTEFOX0xPR19FUlJPUigiSm9pbiByZXF1ZXN0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgYnkgQVBzICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfQorCisgICAgICAgIGdvdG8gZG9uZTsKK2ZhaWxlZDoKKwlXTEFOX0xPR19ERUJVRygxLCAiRmFpbGVkIHRvIHNldCBhIGNvbmZpZyBvcHRpb24sIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisKK2RvbmU6CisgICAgICAgIHJlc3VsdCA9IDA7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV0aGVudGljYXRlCisqCisqIFN0YXRpb24gc2hvdWxkIGJlIGJlZ2luIGFuIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV0aGVudGljYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIFRPRE86IERlY2lkZSBob3cgd2UncmUgZ29pbmcgdG8gaGFuZGxlIHRoaXMgb25lIHcvIFByaXNtMiAqLworCQkvKiAgICAgICBJdCBjb3VsZCBiZSBlbnRlcnRhaW5pbmcgc2luY2UgUHJpc20yIGRvZXNuJ3QgaGF2ZSAgKi8KKwkJLyogICAgICAgYW4gZXhwbGljaXQgd2F5IHRvIGNvbnRyb2wgdGhpcyAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0gZWxzZSB7CisKKwkJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJCS8qIE5ldmVyIHN1cHBvcnRlZCBieSBBUHMgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZGVhdXRoZW50aWNhdGUKKyoKKyogU2VuZCBhIGRlYXV0aGVudGljYXRlIG5vdGlmaWNhdGlvbi4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2RlYXV0aGVudGljYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogRGVjaWRlIGhvdyB3ZSdyZSBnb2luZyB0byBoYW5kbGUgdGhpcyBvbmUgdy8gUHJpc20yICovCisJCS8qICAgICAgIEl0IGNvdWxkIGJlIGVudGVydGFpbmluZyBzaW5jZSBQcmlzbTIgZG9lc24ndCBoYXZlICAqLworCQkvKiAgICAgICBhbiBleHBsaWNpdCB3YXkgdG8gY29udHJvbCB0aGlzICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfSBlbHNlIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisJCWhmYTM4NHhfZHJ2cl9oYW5kb3ZlcihodywgbXNnLT5wZWVyc3RhYWRkcmVzcy5kYXRhLmRhdGEpOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9hc3NvY2lhdGUKKyoKKyogQXNzb2NpYXRlIHdpdGggYW4gRVNTLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXNzb2NpYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJcDgwMjExbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisjaWYgMAorCQkvKiBTZXQgdGhlIFR4UmF0ZXMgKi8KKwkJcmVnID0gMHgwMDBmOworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIHJlZyk7CisjZW5kaWYKKworCQkvKiBTZXQgdGhlIFBvcnRUeXBlICovCisJCS8qIGVzcyBwb3J0ICovCisJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIDEpOworCisJCS8qIEVuYWJsZSB0aGUgUG9ydCAqLworCQloZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKKworCQkvKiBTZXQgdGhlIHJlc3VsdGNvZGUgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCX0gZWxzZSB7CisKKwkJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJCS8qIE5ldmVyIHN1cHBvcnRlZCBvbiBBUCAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9yZWFzc29jaWF0ZQorKgorKiBSZW5ldyBhc3NvY2lhdGlvbiBiZWNhdXNlIG9mIGEgQlNTIGNoYW5nZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3JlYXNzb2NpYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogTm90IHN1cHBvcnRlZCB5ZXQuLi5ub3Qgc3VyZSBob3cgd2UncmUgZ29pbmcgdG8gZG8gaXQgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgb24gQVAgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZGlzYXNzb2NpYXRlCisqCisqIFNlbmQgYSBkaXNhc3NvY2lhdGlvbiBub3RpZmljYXRpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9kaXNhc3NvY2lhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogTm90IHN1cHBvcnRlZCB5ZXQuLi5ub3Qgc3VyZSBob3cgdG8gZG8gaXQgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKwkJaGZhMzg0eF9kcnZyX2hhbmRvdmVyKGh3LCBtc2ctPnBlZXJzdGFhZGRyZXNzLmRhdGEuZGF0YSk7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3Jlc2V0CisqCisqIFJlc2V0IHRoZSBNQUMgYW5kIE1TRC4gIFRoZSBwODAyMTEgbGF5ZXIgaGFzIGl0J3Mgb3duIGhhbmRsaW5nCisqIHRoYXQgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGZ1bmN0aW9uLgorKiBQcm9jZWR1cmU6CisqICAgLSBkaXNhYmxlIHN5c3RlbSBpbnRlcnJ1cHRzID8/CisqICAgLSBkaXNhYmxlIE1BQyBpbnRlcnJ1cHRzCisqICAgLSByZXN0b3JlIHN5c3RlbSBpbnRlcnJ1cHRzCisqICAgLSBpc3N1ZSB0aGUgTUFDIGluaXRpYWxpemUgY29tbWFuZAorKiAgIC0gY2xlYXIgYW55IE1TRCBsZXZlbCBzdGF0ZSAoaW5jbHVkaW5nIHRpbWVycywgcXVldWVkIGV2ZW50cywKKyogICAgIGV0Yy4pLiAgTm90ZSB0aGF0IGlmIHdlJ3JlIHJlbW92aW5nIHRpbWVyJ2QvcXVldWUgZXZlbnRzLCB3ZSBtYXkKKyogICAgIG5lZWQgdG8gaGF2ZSByZW1haW5lZCBpbiB0aGUgc3lzdGVtIGludGVycnVwdCBkaXNhYmxlZCBzdGF0ZS4KKyogICAgIFdlIHNob3VsZCBiZSBsZWZ0IGluIHRoZSBzYW1lIHN0YXRlIHRoYXQgd2UncmUgaW4gZm9sbG93aW5nCisqICAgICBkcml2ZXIgaW5pdGlhbGl6YXRpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyLCBNQVkgQkUgTlVMTCEgZm9yIGEgZHJpdmVyIGxvY2FsCisqCQkJY2FsbC4KKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkLCBjb21tb25seSB3bGFuY3RsLCBidXQgbWlnaHQgYmUgcm1tb2QvcGNpX2Nsb3NlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9yZXNldF90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJLyoKKwkgKiBUaGlzIGlzIHN1cHBvcnRlZCBvbiBib3RoIEFQIGFuZCBTVEEgYW5kIGl0J3Mgbm90IGFsbG93ZWQKKwkgKiB0byBmYWlsLgorCSAqLworCWlmICggbXNncCApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJV0xBTl9MT0dfSU5GTygiZG90MTFyZXFfcmVzZXQ6IHRoZSBtYWNhZGRyZXNzIGFuZCAiCisJCQkic2V0ZGVmYXVsdG1pYiBhcmd1bWVudHMgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZC5cbiIpOworCX0KKworCS8qCisJICogSWYgd2UgZ290IHRoaXMgZmFyLCB0aGUgTVNEIG11c3QgYmUgaW4gdGhlIE1TRFJVTk5JTkcgc3RhdGUKKwkgKiB0aGVyZWZvcmUsIHdlIG11c3Qgc3RvcCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBody9NQUMgY29tYm8uCisJICovCisJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodyk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJkb3QxMXJlcV9yZXNldDogSW5pdGlhbGl6ZSBjb21tYW5kIGZhaWxlZCwiCisJCQkJIiBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuIGZyb20gaGVyZS5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3N0YXJ0CisqCisqIFN0YXJ0IGEgQlNTLiAgQW55IHN0YXRpb24gY2FuIGRvIHRoaXMgZm9yIElCU1MsIG9ubHkgQVAgZm9yIEVTUy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3QJKm1zZyA9IG1zZ3A7CisKKwlwODAyMTFwc3RyZF90CQkqcHN0cjsKKwlVSU5UOAkJCWJ5dGVidWZbODBdOworCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7CisJaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdAkqcGNmaW5mbyA9IChoZmEzODR4X1BDRkluZm9fZGF0YV90KilieXRlYnVmOworCVVJTlQxNgkJCXdvcmQ7CisJREJGRU5URVI7CisKKwl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkvKiBTZXQgdGhlIFNTSUQgKi8KKwltZW1jcHkoJndsYW5kZXYtPnNzaWQsICZtc2ctPnNzaWQuZGF0YSwgc2l6ZW9mKG1zZy0+c3NpZC5kYXRhKSk7CisKKwlpZiAoIWh3LT5hcCkgeworCQkvKioqIEFESE9DIElCU1MgKioqLworCQkvKiBzZWUgaWYgY3VycmVudCBmL3cgaXMgbGVzcyB0aGFuIDhjMyAqLworCQlpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKwkJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKwkJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigwLDgsMykpIHsKKwkJCS8qIEFkLUhvYyBub3QgcXVpdGUgc3VwcG9ydGVkIG9uIFByaXNtMiAqLworCQkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKworICAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKwkJLyogU2V0IHRoZSBSRVFVSVJFRCBjb25maWcgaXRlbXMgKi8KKwkJLyogU1NJRCAqLworCQlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCQlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKKwkJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ25mT3duU1NJRFxuIik7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBDbmZEZXNpcmVkU1NJRFxuIik7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIGJzc3R5cGUgLSB3ZSB1c2UgdGhlIGRlZmF1bHQgaW4gdGhlIGFwIGZpcm13YXJlICovCisJCS8qIElCU1MgcG9ydCAqLworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCAwKTsKKworCQkvKiBiZWFjb24gcGVyaW9kICovCisJCXdvcmQgPSBtc2ctPmJlYWNvbnBlcmlvZC5kYXRhOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkFQQkNOSU5ULCB3b3JkKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBiZWFjb24gcGVyaW9kPSVkLlxuIiwgd29yZCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIGRzY2hhbm5lbCAqLworCQl3b3JkID0gbXNnLT5kc2NoYW5uZWwuZGF0YTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCB3b3JkKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBjaGFubmVsPSVkLlxuIiwgd29yZCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQkvKiBCYXNpYyByYXRlcyAqLworCQl3b3JkID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTEuZGF0YSk7CisJCWlmICggbXNnLT5iYXNpY3JhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUzLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU0LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU1LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU2LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU3LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU4LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU4LmRhdGEpOworCQl9CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUywgd29yZCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmFzaWNyYXRlcz0lZC5cbiIsIHdvcmQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBPcGVyYXRpb25hbCByYXRlcyAoc3VwcHJhdGVzIGFuZCB0eHJhdGVjb250cm9sKSAqLworCQl3b3JkID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTEuZGF0YSk7CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUzLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU0LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU1LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU2LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU3LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU4LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU4LmRhdGEpOworCQl9CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCB3b3JkKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKyAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgd29yZCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdHhyYXRlcz0lZC5cbiIsIHdvcmQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBTZXQgdGhlIG1hY21vZGUgc28gdGhlIGZyYW1lIHNldHVwIGNvZGUga25vd3Mgd2hhdCB0byBkbyAqLworCQlpZiAoIG1zZy0+YnNzdHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudCApIHsKKwkJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfSUJTU19TVEE7CisJCQkvKiBsZXRzIGV4dGVuZCB0aGUgZGF0YSBsZW5ndGggYSBiaXQgKi8KKwkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwgMjMwNCk7CisJCX0KKworCQkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkVuYWJsZSBtYWNwb3J0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCS8qIFZhbGlkYXRlIHRoZSBjb21tYW5kLCBpZiBCU1N0eXBlPWluZnJhIGlzIHRoZSB0ZXJ0aWFyeSBsb2FkZWQ/ICovCisJaWYgKCBtc2ctPmJzc3R5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJBUCBkcml2ZXIgY2Fubm90IGNyZWF0ZSBJQlNTLlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0gZWxzZSBpZiAoIGh3LT5jYXBfc3VwX3N0YS5pZCAhPSA1KSB7CisJCVdMQU5fTE9HX0VSUk9SKCJBUCBkcml2ZXIgZmFpbGVkIHRvIGRldGVjdCBBUCBmaXJtd2FyZS5cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBTZXQgdGhlIFJFUVVJUkVEIGNvbmZpZyBpdGVtcyAqLworCS8qIFNTSUQgKi8KKwlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBTU0lELCByZXN1bHQ9MHglMDR4XG4iLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBic3N0eXBlIC0gd2UgdXNlIHRoZSBkZWZhdWx0IGluIHRoZSBhcCBmaXJtd2FyZSAqLworCisJLyogYmVhY29uIHBlcmlvZCAqLworCXdvcmQgPSBtc2ctPmJlYWNvbnBlcmlvZC5kYXRhOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQVBCQ05JTlQsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBiZWFjb24gcGVyaW9kPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGRzY2hhbm5lbCAqLworCXdvcmQgPSBtc2ctPmRzY2hhbm5lbC5kYXRhOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwgd29yZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGNoYW5uZWw9JWQuXG4iLCB3b3JkKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCS8qIEJhc2ljIHJhdGVzICovCisJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUxLmRhdGEpOworCWlmICggbXNnLT5iYXNpY3JhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTIuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTMuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTQuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU1LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTUuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTYuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTcuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU4LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTguZGF0YSk7CisJfQorCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUywgd29yZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGJhc2ljcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogT3BlcmF0aW9uYWwgcmF0ZXMgKHN1cHByYXRlcyBhbmQgdHhyYXRlY29udHJvbCkgKi8KKwl3b3JkID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTEuZGF0YSk7CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTYuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5kYXRhKTsKKwl9CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDAsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGlic3NhdGltd2luZG93ICovCisJaWYgKG1zZy0+aWJzc2F0aW13aW5kb3cuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgeworCQlXTEFOX0xPR19JTkZPKCJwcmlzbTJtZ210X3N0YXJ0OiBhdGltd2luZG93IG5vdCB1c2VkIGluICIKKwkJCSAgICAgICAiSW5mcmFzdHJ1Y3R1cmUgbW9kZSwgaWdub3JlZC5cbiIpOworCX0KKworCS8qIERUSU0gcGVyaW9kICovCisJd29yZCA9IG1zZy0+ZHRpbXBlcmlvZC5kYXRhOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUiwgd29yZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGR0aW0gcGVyaW9kPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIHByb2JlZGVsYXkgKi8KKwlpZiAobXNnLT5wcm9iZWRlbGF5LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spIHsKKwkJV0xBTl9MT0dfSU5GTygicHJpc20ybWdtdF9zdGFydDogcHJvYmVkZWxheSBub3QgIgorCQkJICAgICAgICJzdXBwb3J0ZWQgaW4gcHJpc20yLCBpZ25vcmVkLlxuIik7CisJfQorCisJLyogY2Zwb2xsYWJsZSwgY2Zwb2xscmVxLCBjZnBwZXJpb2QsIGNmcG1heGR1cmF0aW9uICovCisJaWYgKG1zZy0+Y2Zwb2xsYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSAmJgorCSAgICBtc2ctPmNmcG9sbHJlcS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSApIHsKKwkJV0xBTl9MT0dfRVJST1IoImNmcG9sbGFibGU9Y2Zwb2xscmVxPXRydWUgaXMgaWxsZWdhbC5cbiIpOworCQlyZXN1bHQgPSAtMTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogcmVhZCB0aGUgUENGSW5mbyBhbmQgdXBkYXRlICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLAorCQkJCQlwY2ZpbmZvLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfSU5GTygicHJpc20ybWdtdF9zdGFydDogcmVhZChwY2ZpbmZvKSBmYWlsZWQsICIKKwkJCQkiYXNzdW1lIGl0J3MgIgorCQkJCSJub3Qgc3VwcG9ydGVkLCBwY2Ygc2V0dGluZ3MgaWdub3JlZC5cbiIpOworCQlnb3RvIHBjZl9za2lwOworCX0KKwlpZiAoKG1zZy0+Y2Zwb2xsYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UgJiYKKwkgICAgIG1zZy0+Y2Zwb2xscmVxLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF9mYWxzZSkgKSB7CisJICAgIAlwY2ZpbmZvLT5NZWRpdW1PY2N1cGFuY3lMaW1pdCA9IDA7CisJCXBjZmluZm8tPkNGUFBlcmlvZCA9IDA7CisJCXBjZmluZm8tPkNGUE1heER1cmF0aW9uID0gMDsKKwkJcGNmaW5mby0+Q0ZQRmxhZ3MgJj0gaG9zdDJoZmEzODR4XzE2KChVSU5UMTYpfkJJVDApOworCisJCWlmICggbXNnLT5jZnBwZXJpb2Quc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayB8fAorCQkgICAgIG1zZy0+Y2ZwbWF4ZHVyYXRpb24uc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIlNldHRpbmcgY2ZwcGVyaW9kIG9yIGNmcG1heGR1cmF0aW9uIHdoZW4gIgorCQkJCSJjZnBvbGxhYmxlIGFuZCBjZnJlcSBhcmUgZmFsc2UgaXMgcG9pbnRsZXNzLlxuIik7CisJCX0KKwl9CisJaWYgKChtc2ctPmNmcG9sbGFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgfHwKKwkgICAgIG1zZy0+Y2Zwb2xscmVxLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSApIHsKKwkJaWYgKCBtc2ctPmNmcG9sbGFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpIHsKKwkJCXBjZmluZm8tPkNGUEZsYWdzIHw9IGhvc3QyaGZhMzg0eF8xNigoVUlOVDE2KUJJVDApOworCQl9CisKKwkJaWYgKCBtc2ctPmNmcHBlcmlvZC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSB7CisJCQlwY2ZpbmZvLT5DRlBQZXJpb2QgPSBtc2ctPmNmcHBlcmlvZC5kYXRhOworCQkJcGNmaW5mby0+Q0ZQUGVyaW9kID0gaG9zdDJoZmEzODR4XzE2KHBjZmluZm8tPkNGUFBlcmlvZCk7CisJCX0KKworCQlpZiAoIG1zZy0+Y2ZwbWF4ZHVyYXRpb24uc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgeworCQkJcGNmaW5mby0+Q0ZQTWF4RHVyYXRpb24gPSBtc2ctPmNmcG1heGR1cmF0aW9uLmRhdGE7CisJCQlwY2ZpbmZvLT5DRlBNYXhEdXJhdGlvbiA9IGhvc3QyaGZhMzg0eF8xNihwY2ZpbmZvLT5DRlBNYXhEdXJhdGlvbik7CisJCQlwY2ZpbmZvLT5NZWRpdW1PY2N1cGFuY3lMaW1pdCA9IHBjZmluZm8tPkNGUE1heER1cmF0aW9uOworCQl9CisJfQorCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywKKwkJCQkJcGNmaW5mbywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJ3cml0ZShwY2ZpbmZvKSBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCitwY2Zfc2tpcDoKKwkvKiBTZXQgdGhlIG1hY21vZGUgc28gdGhlIGZyYW1lIHNldHVwIGNvZGUga25vd3Mgd2hhdCB0byBkbyAqLworCWlmICggbXNnLT5ic3N0eXBlLmRhdGEgPT0gUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlICkgeworCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19BUDsKKwkJLyogbGV0cyBleHRlbmQgdGhlIGRhdGEgbGVuZ3RoIGEgYml0ICovCisJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwgMjMwNCk7CisJfQorCisJLyogU2V0IHRoZSBCU1NJRCB0byB0aGUgc2FtZSBhcyBvdXIgTUFDICovCisJbWVtY3B5KCB3bGFuZGV2LT5ic3NpZCwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9CU1NJRF9MRU4pOworCisJLyogRW5hYmxlIHRoZSBQb3J0ICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJFbmFibGUgbWFjcG9ydCBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwlnb3RvIGRvbmU7CitmYWlsZWQ6CisJV0xBTl9MT0dfREVCVUcoMSwgIkZhaWxlZCB0byBzZXQgYSBjb25maWcgb3B0aW9uLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCitkb25lOgorCXJlc3VsdCA9IDA7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZW5hYmxlCisqCisqIFN0YXJ0IGEgQlNTLiAgQW55IHN0YXRpb24gY2FuIGRvIHRoaXMgZm9yIElCU1MsIG9ubHkgQVAgZm9yIEVTUy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2VuYWJsZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX2VuYWJsZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIEFkLUhvYyBub3QgcXVpdGUgc3VwcG9ydGVkIG9uIFByaXNtMiAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCS8qIElzIHRoZSB0ZXJ0aWFyeSBsb2FkZWQ/ICovCisJaWYgKCBody0+Y2FwX3N1cF9zdGEuaWQgIT0gNSkgeworCQlXTEFOX0xPR19FUlJPUigiQVAgZHJpdmVyIGZhaWxlZCB0byBkZXRlY3QgQVAgZmlybXdhcmUuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogU2V0IHRoZSBtYWNtb2RlIHNvIHRoZSBmcmFtZSBzZXR1cCBjb2RlIGtub3dzIHdoYXQgdG8gZG8gKi8KKwl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19BUDsKKworCS8qIFNldCB0aGUgQlNTSUQgdG8gdGhlIHNhbWUgYXMgb3VyIE1BQyAqLworCW1lbWNweSggd2xhbmRldi0+YnNzaWQsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQlNTSURfTEVOKTsKKworCS8qIEVuYWJsZSB0aGUgUG9ydCAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRW5hYmxlIG1hY3BvcnQgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJZ290byBkb25lOworZmFpbGVkOgorCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKworZG9uZToKKwlyZXN1bHQgPSAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3JlYWRwZGEKKyoKKyogQ29sbGVjdCB0aGUgUERBIGRhdGEgYW5kIHB1dCBpdCBpbiB0aGUgbWVzc2FnZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcmVhZHBkYSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3QJKm1zZyA9IG1zZ3A7CisJaW50CQkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBjb2xsZWN0aW5nIHRoZSBQREEgd2hlbiBpbiB0aGUgRldMT0FECisJICogc3RhdGUuCisJICovCisJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJQREEgbWF5IG9ubHkgYmUgcmVhZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwl9IGVsc2UgeworCQkvKiAgQ2FsbCBkcnZyX3JlYWRwZGEoKSwgaXQgaGFuZGxlcyB0aGUgYXV4cG9ydCBlbmFibGUKKwkJICogIGFuZCB2YWxpZGF0aW5nIHRoZSByZXR1cm5lZCBQREEuCisJCSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfcmVhZHBkYSgKKwkJCWh3LAorCQkJbXNnLT5wZGEuZGF0YSwKKwkJCUhGQTM4NHhfUERBX0xFTl9NQVgpOworCQlpZiAocmVzdWx0KSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiaGZhMzg0eF9kcnZyX3JlYWRwZGEoKSBmYWlsZWQsICIKKwkJCQkicmVzdWx0PSVkXG4iLAorCQkJCXJlc3VsdCk7CisKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPQorCQkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCURCRkVYSVQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltc2ctPnBkYS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcmVhZGNpcworKgorKiBDb2xsZWN0IHRoZSBDSVMgZGF0YSBhbmQgcHV0IGl0IGluIHRoZSBtZXNzYWdlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yZWFkY2lzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yZWFkY2lzX3QJKm1zZyA9IG1zZ3A7CisKKwlEQkZFTlRFUjsKKworICAgICAgICBtZW1zZXQobXNnLT5jaXMuZGF0YSwgMCwgc2l6ZW9mKG1zZy0+Y2lzLmRhdGEpKTsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NJUywKKwkJCQkJbXNnLT5jaXMuZGF0YSwgSEZBMzg0eF9SSURfQ0lTX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0lORk8oInByaXNtMm1nbXRfcmVhZGNpczogcmVhZChjaXMpIGZhaWxlZC5cbiIpOworCQltc2ctPmNpcy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCisJCX0KKwllbHNlIHsKKwkJbXNnLT5jaXMuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV4cG9ydF9zdGF0ZQorKgorKiBFbmFibGVzL0Rpc2FibGVzIHRoZSBjYXJkJ3MgYXV4aWxpYXJ5IHBvcnQuICBTaG91bGQgYmUgY2FsbGVkCisqIGJlZm9yZSBhbmQgYWZ0ZXIgYSBzZXF1ZW5jZSBvZiBhdXhwb3J0X3JlYWQoKS9hdXhwb3J0X3dyaXRlKCkKKyogY2FsbHMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCXA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCURCRkVOVEVSOworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlpZiAobXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpIHsKKwkJaWYgKCBoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGh3LCAwKSApIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisJfSBlbHNlIHsKKwkJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCX0KKworI2Vsc2UgLyogIVVTQiAqLworCURCRkVOVEVSOworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCisjZW5kaWYgLyogV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IgKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV4cG9ydF9yZWFkCisqCisqIENvcGllcyBkYXRhIGZyb20gdGhlIGNhcmQgdXNpbmcgdGhlIGF1eHBvcnQuICBUaGUgYXV4cG9ydCBtdXN0CisqIGhhdmUgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQuICBOb3RlOiB0aGlzIGlzIG5vdCB0aGUgd2F5IHRvCisqIGRvIGRvd25sb2Fkcywgc2VlIHRoZSBbcmFtfGZsYXNoXWRsIGZ1bmN0aW9ucy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV4cG9ydF9yZWFkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfdAkqbXNnID0gbXNncDsKKwlVSU5UMzIJCQlhZGRyOworCVVJTlQzMgkJCWxlbjsKKwlVSU5UOCoJCQlidWY7CisJVUlOVDMyCQkJbWF4bGVuID0gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKTsKKwlEQkZFTlRFUjsKKworCWlmICggaHctPmF1eGVuICkgeworCQlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CisJCWxlbiA9IG1zZy0+bGVuLmRhdGE7CisJCWJ1ZiA9IG1zZy0+ZGF0YS5kYXRhOworCQlpZiAoIGxlbiA8PSBtYXhsZW4gKSB7ICAvKiBtYXggcmVhZC93cml0ZSBzaXplICovCisJCQloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsIGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywgYnVmLCBsZW4pOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsIkF0dGVtcHQgdG8gcmVhZCA+IG1heGxlbiBmcm9tIGF1eHBvcnQuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJCX0KKworCX0gZWxzZSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJfQorCW1zZy0+ZGF0YS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7CisjZWxzZQorCURCRkVOVEVSOworCisJV0xBTl9MT0dfRVJST1IoInByaXNtMm1nbXRfYXV4cG9ydF9yZWFkOiBOb3Qgc3VwcG9ydGVkIG9uIFVTQi5cbiIpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2F1eHBvcnRfd3JpdGUKKyoKKyogQ29waWVzIGRhdGEgdG8gdGhlIGNhcmQgdXNpbmcgdGhlIGF1eHBvcnQuICBUaGUgYXV4cG9ydCBtdXN0CisqIGhhdmUgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQuICBOb3RlOiB0aGlzIGlzIG5vdCB0aGUgd2F5IHRvCisqIGRvIGRvd25sb2Fkcywgc2VlIHRoZSBbcmFtfGZsYXNoXWRsIGZ1bmN0aW9ucy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV4cG9ydF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV90CSptc2cgPSBtc2dwOworCVVJTlQzMgkJCWFkZHI7CisJVUlOVDMyCQkJbGVuOworCVVJTlQ4KgkJCWJ1ZjsKKwlVSU5UMzIJCQltYXhsZW4gPSBzaXplb2YobXNnLT5kYXRhLmRhdGEpOworCURCRkVOVEVSOworCisJaWYgKCBody0+YXV4ZW4gKSB7CisJCWFkZHIgPSBtc2ctPmFkZHIuZGF0YTsKKwkJbGVuID0gbXNnLT5sZW4uZGF0YTsKKwkJYnVmID0gbXNnLT5kYXRhLmRhdGE7CisJCWlmICggbGVuIDw9IG1heGxlbiApIHsgIC8qIG1heCByZWFkL3dyaXRlIHNpemUgKi8KKwkJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywgYnVmLCBsZW4pOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfREVCVUcoMSwiQXR0ZW1wdCB0byB3cml0ZSA+IG1heGxlbiBmcm9tIGF1eHBvcnQuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJCX0KKworCX0gZWxzZSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJfQorCW1zZy0+ZGF0YS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7CisjZWxzZQorCURCRkVOVEVSOworCVdMQU5fTE9HX0VSUk9SKCJwcmlzbTJtZ210X2F1eHBvcnRfcmVhZDogTm90IHN1cHBvcnRlZCBvbiBVU0IuXG4iKTsKKwlEQkZFWElUOworCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2xvd19sZXZlbAorKgorKiBQdXRzIHRoZSBjYXJkIGludG8gdGhlIGRlc2lyZWQgdGVzdCBtb2RlLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHdsYW5kZXYgICAgICAgICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgbXNncCAgICAgICAgICAgIHB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgc3VjY2VzcyBhbmQgZG9uZQorKiAgICAgICA8MCAgICAgIHN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKiAgICAgICA+MCAgICAgIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9sb3dfbGV2ZWwod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKyAgICAgICAgcDgwMjExbXNnX3AycmVxX2xvd19sZXZlbF90ICAgICAqbXNnID0gbXNncDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisgICAgICAgIERCRkVOVEVSOworCisgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKyAgICAgICAgLyogY2FsbCBzb21lIHJvdXRpbmUgdG8gZXhlY3V0ZSB0aGUgdGVzdCBjb21tYW5kICovCisJY21kLmNtZCA9IChVSU5UMTYpIG1zZy0+Y29tbWFuZC5kYXRhOworCWNtZC5wYXJtMCA9IChVSU5UMTYpIG1zZy0+cGFyYW0wLmRhdGE7CisJY21kLnBhcm0xID0gKFVJTlQxNikgbXNnLT5wYXJhbTEuZGF0YTsKKwljbWQucGFybTIgPSAoVUlOVDE2KSBtc2ctPnBhcmFtMi5kYXRhOworCisgICAgICAgIGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaHcsJmNtZCk7CisKKyAgICAgICAgbXNnLT5yZXNwMC5kYXRhID0gKFVJTlQzMikgY21kLnJlc3VsdC5yZXNwMDsKKyAgICAgICAgbXNnLT5yZXNwMS5kYXRhID0gKFVJTlQzMikgY21kLnJlc3VsdC5yZXNwMTsKKyAgICAgICAgbXNnLT5yZXNwMi5kYXRhID0gKFVJTlQzMikgY21kLnJlc3VsdC5yZXNwMjsKKworICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF90ZXN0X2NvbW1hbmQKKyoKKyogUHV0cyB0aGUgY2FyZCBpbnRvIHRoZSBkZXNpcmVkIHRlc3QgbW9kZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfdGVzdF9jb21tYW5kKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3Rlc3RfY29tbWFuZF90CSptc2cgPSBtc2dwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworICAgICAgICBEQkZFTlRFUjsKKworCWNtZC5jbWQgPSAoKFVJTlQxNikgbXNnLT50ZXN0Y29kZS5kYXRhKSA8PCA4IHwgMHgzODsKKwljbWQucGFybTAgPSAoVUlOVDE2KSBtc2ctPnRlc3RwYXJhbS5kYXRhOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworICAgICAgICAvKiBjYWxsIHNvbWUgcm91dGluZSB0byBleGVjdXRlIHRoZSB0ZXN0IGNvbW1hbmQgKi8KKworICAgICAgICBoZmEzODR4X2RydnJfbG93X2xldmVsKGh3LCZjbWQpOworCisgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKyAgICAgICAgbXNnLT5zdGF0dXMuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworICAgICAgICBtc2ctPnN0YXR1cy5kYXRhID0gY21kLnJlc3VsdC5zdGF0dXM7CisgICAgICAgIG1zZy0+cmVzcDAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworICAgICAgICBtc2ctPnJlc3AwLmRhdGEgPSBjbWQucmVzdWx0LnJlc3AwOworICAgICAgICBtc2ctPnJlc3AxLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKyAgICAgICAgbXNnLT5yZXNwMS5kYXRhID0gY21kLnJlc3VsdC5yZXNwMTsKKyAgICAgICAgbXNnLT5yZXNwMi5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisgICAgICAgIG1zZy0+cmVzcDIuZGF0YSA9IGNtZC5yZXN1bHQucmVzcDI7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X21taV9yZWFkCisqCisqIFJlYWQgZnJvbSBvbmUgb2YgdGhlIE1NSSByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X21taV9yZWFkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX21taV9yZWFkX3QJKm1zZyA9IG1zZ3A7CisJVUlOVDMyIHJlc3AgPSAwOworCisJREJGRU5URVI7CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJLyogY2FsbCBzb21lIHJvdXRpbmUgdG8gZXhlY3V0ZSB0aGUgdGVzdCBjb21tYW5kICovCisKKwloZmEzODR4X2RydnJfbW1pX3JlYWQoaHcsIG1zZy0+YWRkci5kYXRhLCAmcmVzcCk7CisKKwkvKiBJJ20gbm90IHN1cmUgaWYgdGhpcyBpcyAiYXJjaGl0ZWN0dXJhbGx5IiBjb3JyZWN0LCBidXQgaXQKKyAgICAgICAgICAgaXMgZXhwZWRpZW50LiAqLworCisJbXNnLT52YWx1ZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT52YWx1ZS5kYXRhID0gcmVzcDsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfbW1pX3dyaXRlCisqCisqIFdyaXRlIGEgZGF0YSB2YWx1ZSB0byBvbmUgb2YgdGhlIE1NSSByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X21taV93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9tbWlfd3JpdGVfdAkqbXNnID0gbXNncDsKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwkvKiBjYWxsIHNvbWUgcm91dGluZSB0byBleGVjdXRlIHRoZSB0ZXN0IGNvbW1hbmQgKi8KKworCWhmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaHcsIG1zZy0+YWRkci5kYXRhLCBtc2ctPmRhdGEuZGF0YSk7CisKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcmFtZGxfc3RhdGUKKyoKKyogRXN0YWJsaXNoZXMgdGhlIGJlZ2lubmluZy9lbmQgb2YgYSBjYXJkIFJBTSBkb3dubG9hZCBzZXNzaW9uLgorKgorKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSByYW1kbF93cml0ZSgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisqIG9uZSBvciBtb3JlIHRpbWVzIGJldHdlZW4gdGhlICdlbmFibGUnIGFuZCAnZGlzYWJsZScgY2FsbHMgdG8KKyogdGhpcyBmdW5jdGlvbi4KKyoKKyogTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGEgbWFjIGNvbW0gcG9ydAorKiAgICAgICBpcyBhY3RpdmUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJInJhbWRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSovCisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCWlmICAoIG1zZy0+ZW5hYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlICkgeworCQlpZiAoIGhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaHcsIG1zZy0+ZXhlYWRkci5kYXRhKSApIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisJfSBlbHNlIHsKKwkJaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaHcpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcmFtZGxfd3JpdGUKKyoKKyogV3JpdGVzIGEgYnVmZmVyIHRvIHRoZSBjYXJkIFJBTSB1c2luZyB0aGUgZG93bmxvYWQgc3RhdGUuICBUaGlzCisqIGlzIGZvciB3cml0aW5nIGNvZGUgdG8gY2FyZCBSQU0uICBUbyBqdXN0IHJlYWQgb3Igd3JpdGUgcmF3IGRhdGEKKyogdXNlIHRoZSBhdXggZnVuY3Rpb25zLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90CSptc2cgPSBtc2dwOworCVVJTlQzMgkJCWFkZHI7CisJVUlOVDMyCQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlEQkZFTlRFUjsKKworCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkicmFtZGxfd3JpdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJCSJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlEQkZFWElUOworCQlyZXR1cm4gMDsKKwl9CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCS8qIGZpcnN0IHZhbGlkYXRlIHRoZSBsZW5ndGggKi8KKwlpZiAgKCBtc2ctPmxlbi5kYXRhID4gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKSApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCXJldHVybiAwOworCX0KKwkvKiBjYWxsIHRoZSBoZmEzODR4IGZ1bmN0aW9uIHRvIGRvIHRoZSB3cml0ZSAqLworCWFkZHIgPSBtc2ctPmFkZHIuZGF0YTsKKwlsZW4gPSBtc2ctPmxlbi5kYXRhOworCWJ1ZiA9IG1zZy0+ZGF0YS5kYXRhOworCWlmICggaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGh3LCBhZGRyLCBidWYsIGxlbikgKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisKKwl9CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZQorKgorKiBFc3RhYmxpc2hlcyB0aGUgYmVnaW5uaW5nL2VuZCBvZiBhIGNhcmQgRmxhc2ggZG93bmxvYWQgc2Vzc2lvbi4KKyoKKyogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmxhc2hkbF93cml0ZSgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisqIG9uZSBvciBtb3JlIHRpbWVzIGJldHdlZW4gdGhlICdlbmFibGUnIGFuZCAnZGlzYWJsZScgY2FsbHMgdG8KKyogdGhpcyBmdW5jdGlvbi4KKyoKKyogTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGEgbWFjIGNvbW0gcG9ydAorKiAgICAgICBpcyBhY3RpdmUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJCSJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlEQkZFWElUOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAorCSoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCisJKi8KKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJaWYgICggbXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgKSB7CisJCWlmICggaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGh3KSApIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisJfSBlbHNlIHsKKwkJaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZGlzYWJsZShodyk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCS8qIE5PVEU6IEF0IHRoaXMgcG9pbnQsIHRoZSBNQUMgaXMgaW4gdGhlIHBvc3QtcmVzZXQKKwkJICogc3RhdGUgYW5kIHRoZSBkcml2ZXIgaXMgaW4gdGhlIGZ3bG9hZCBzdGF0ZS4KKwkJICogV2UgbmVlZCB0byBnZXQgdGhlIE1BQyBiYWNrIGludG8gdGhlIGZ3bG9hZAorCQkgKiBzdGF0ZS4gIFRvIGRvIHRoaXMsIHdlIHNldCB0aGUgbnNkc3RhdGUgdG8gSFdQUkVTRU5UCisJCSAqIGFuZCB0aGVuIGNhbGwgdGhlIGlmc3RhdGUgZnVuY3Rpb24gdG8gcmVkbyBldmVyeXRoaW5nCisJCSAqIHRoYXQgZ290IHVzIGludG8gdGhlIGZ3bG9hZCBzdGF0ZS4KKwkJICovCisJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQlyZXN1bHQgPSBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkKTsKKwkJaWYgKHJlc3VsdCAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgeworCQkJV0xBTl9MT0dfRVJST1IoInByaXNtMnN0YV9pZnN0YXRlKGZ3bG9hZCkgZmFpbGVkLCIKKwkJCQkiUDgwMjExRU5VTV9yZXN1bHRjb2RlPSVkXG4iLCByZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJcmVzdWx0ID0gLTE7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUKKyoKKyoKKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3QJKm1zZyA9IG1zZ3A7CisJVUlOVDMyCQkJYWRkcjsKKwlVSU5UMzIJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJmbGFzaGRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSovCisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCS8qIGZpcnN0IHZhbGlkYXRlIHRoZSBsZW5ndGggKi8KKwlpZiAgKCBtc2ctPmxlbi5kYXRhID4gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKSApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlyZXR1cm4gMDsKKwl9CisJLyogY2FsbCB0aGUgaGZhMzg0eCBmdW5jdGlvbiB0byBkbyB0aGUgd3JpdGUgKi8KKwlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CisJbGVuID0gbXNnLT5sZW4uZGF0YTsKKwlidWYgPSBtc2ctPmRhdGEuZGF0YTsKKwlpZiAoIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGh3LCBhZGRyLCBidWYsIGxlbikgKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisKKwl9CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZHVtcF9zdGF0ZQorKgorKiBEdW1wcyB0aGUgZHJpdmVyJ3MgYW5kIGhhcmR3YXJlJ3MgY3VycmVudCBzdGF0ZSB2aWEgdGhlIGtlcm5lbAorKiBsb2cgYXQgS0VSTl9OT1RJQ0UgbGV2ZWwuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2R1bXBfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCXA4MDIxMW1zZ19wMnJlcV9kdW1wX3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisJaW50CQkJCXJlc3VsdCA9IDA7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCQlhdXhidWZbMTVdOworCURCRkVOVEVSOworCisJV0xBTl9MT0dfTk9USUNFKCJwcmlzbTIgZHJpdmVyIGFuZCBoYXJkd2FyZSBzdGF0ZTpcbiIpOworCWlmICAoIChyZXN1bHQgPSBoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGh3LCAwKSkgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJhdXhfZW5hYmxlIGZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaGZhMzg0eF9jb3B5X2Zyb21fYXV4KGh3LAorCQkweDAxZTIsCisJCUhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJYXV4YnVmLAorCQlzaXplb2YoYXV4YnVmKSk7CisJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCVdMQU5fTE9HX05PVElDRSgiICBjbWFjOiBGcmVlQmxvY2tzPSVkXG4iLCBhdXhidWZbNV0pOworCVdMQU5fTE9HX05PVElDRSgiICBjbWFjOiBJbnRFbj0weCUwMnggRXZTdGF0PTB4JTAyeFxuIiwKKwkJaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfSU5URU4pLAorCQloZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpKTsKKworCSNpZmRlZiBVU0VfRklEX1NUQUNLCisJV0xBTl9MT0dfTk9USUNFKCIgIGRydnI6IHR4ZmlkX3RvcD0lZCBzdGFja3NpemU9JWRcbiIsCisJCWh3LT50eGZpZF90b3AsSEZBMzg0eF9EUlZSX0ZJRFNUQUNLTEVOX01BWCk7CisJI2Vsc2UKKwlXTEFOX0xPR19OT1RJQ0UoIiAgZHJ2cjogdHhmaWRfaGVhZD0lZCB0eGZpZF90YWlsPSVkIHR4ZmlkX049JWRcbiIsCisJCWh3LT50eGZpZF9oZWFkLCBody0+dHhmaWRfdGFpbCwgaHctPnR4ZmlkX04pOworCSNlbmRpZgorCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisjZWxzZSAvKiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpICovCisKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwlnb3RvIGZhaWxlZDsKKworI2VuZGlmIC8qIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikgKi8KKworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvCisqCisqIElzc3VlcyBhIENoYW5uZWxJbmZvUmVxdWVzdC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3QJKm1zZz1tc2dwOworCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50CQkJCXJlc3VsdCwgaSwgbj0wOworCVVJTlQxNgkJCQljaGFubmVsX21hc2s9MDsKKwloZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3QJY2hpbmZvcmVxOworCS8vIHVuc2lnbmVkIGxvbmcgCQkJbm93OworCisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogTm90IHN1cHBvcnRlZCBpbiBTVEEgZi93ICovCisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+cmVzdWx0Y29kZSwgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisjZGVmaW5lIENISU5GT19USU1FT1VUIDIKKworCVA4MDIxMV9TRVRfSU5UKG1zZy0+cmVzdWx0Y29kZSwgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpOworCisJLyogc2V0dGluZyBkZWZhdWx0IHZhbHVlIGZvciBjaGFubmVsbGlzdCA9IGFsbCBjaGFubmVscyAqLworCWlmICghbXNnLT5jaGFubmVsbGlzdC5kYXRhKSB7CisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+Y2hhbm5lbGxpc3QsIDB4MDAwMDdGRkUpOworCX0KKwkvKiBzZXR0aW5nIGRlZmF1bHQgdmFsdWUgZm9yIGNoYW5uZWxkd2VsbHRpbWUgPSAxMDAgbXMgKi8KKwlpZiAoIW1zZy0+Y2hhbm5lbGR3ZWxsdGltZS5kYXRhKSB7CisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+Y2hhbm5lbGR3ZWxsdGltZSwgMTAwKTsKKwl9CisJY2hhbm5lbF9tYXNrID0gKFVJTlQxNikgKG1zZy0+Y2hhbm5lbGxpc3QuZGF0YSA+PiAxKTsKKwlmb3IgKGk9MCwgbj0wOyBpIDwgMTQ7IGkrKykgeworCQlpZiAoY2hhbm5lbF9tYXNrICYgKDE8PGkpKSB7CisJCQluKys7CisJCX0KKwl9CisJUDgwMjExX1NFVF9JTlQobXNnLT5udW1jaGluZm8sIG4pOworCWNoaW5mb3JlcS5jaGFubmVsTGlzdCA9IGhvc3QyaGZhMzg0eF8xNihjaGFubmVsX21hc2spOworCWNoaW5mb3JlcS5jaGFubmVsRHdlbGxUaW1lID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+Y2hhbm5lbGR3ZWxsdGltZS5kYXRhKTsKKworCWF0b21pY19zZXQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSwgMSk7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNULAorCQkJCQkgJmNoaW5mb3JlcSwgSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoQ0hBTk5FTElORk9SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJCQlyZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGRvbmU7CisJfQorCS8qCisJbm93ID0gamlmZmllczsKKwl3aGlsZSAoYXRvbWljX3JlYWQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSkgIT0gMSkgeworCQlpZiAoKGppZmZpZXMgLSBub3cpID4gQ0hJTkZPX1RJTUVPVVQqSFopIHsKKwkJCVdMQU5fTE9HX05PVElDRSgiQ2hhbm5lbEluZm8gcmVzdWx0cyBub3QgcmVjZWl2ZWQgaW4gJWQgc2Vjb25kcywgYWJvcnRpbmcuXG4iLAorCQkJCQlDSElORk9fVElNRU9VVCk7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90aW1lb3V0OworCQkJZ290byBkb25lOworCQl9CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KEhaLzQpOworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwl9CisJKi8KKworZG9uZToKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2NoYW5uZWxfaW5mb19yZXN1bHRzCisqCisqIFJldHVybnMgcmVxdWlyZWQgQ2hhbm5lbEluZm8gcmVzdWx0LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9jaGFubmVsX2luZm9fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKworCXA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0c190CSptc2c9bXNncDsKKwlpbnQJCQkJcmVzdWx0PTA7CisJaW50CQljaGFubmVsOworCisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogTm90IHN1cHBvcnRlZCBpbiBTVEEgZi93ICovCisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+cmVzdWx0Y29kZSwgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJc3dpdGNoIChhdG9taWNfcmVhZCgmaHctPmNoYW5uZWxfaW5mby5kb25lKSkgeworCWNhc2UgMDogbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWU7CisJCWdvdG8gZG9uZTsKKwljYXNlIDE6IG1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2luY29tcGxldGVfaXRlbWRhdGE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlQODAyMTFfU0VUX0lOVChtc2ctPnJlc3VsdGNvZGUsIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKTsKKwljaGFubmVsPW1zZy0+Y2hhbm5lbC5kYXRhLTE7CisKKwlpZiAoY2hhbm5lbCA8IDAgfHwgISAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmIDE8PGNoYW5uZWwpICkgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCWdvdG8gZG9uZTsKKwl9CisJV0xBTl9MT0dfREVCVUcoMiwgImNoaW5mb19yZXN1bHRzOiBjaGFubmVsICVkLCBhdmcvcGVhayBsZXZlbD0lZC8lZCBkQiwgYWN0aXZlPSVkXG4iLAorCQkJY2hhbm5lbCsxLAorCQkJaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXS5hbmwsCisJCQlody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLnBubCwKKwkJCWh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbY2hhbm5lbF0uYWN0aXZlCisJCSk7CisJUDgwMjExX1NFVF9JTlQobXNnLT5hdmdub2lzZWxldmVsLCBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLmFubCk7CisJUDgwMjExX1NFVF9JTlQobXNnLT5wZWFrbm9pc2VsZXZlbCwgaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXS5wbmwpOworCVA4MDIxMV9TRVRfSU5UKG1zZy0+YnNzYWN0aXZlLCBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLmFjdGl2ZSAmCisJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRQorICAgICAgICAgICAgICAgID8gUDgwMjExRU5VTV90cnV0aF90cnVlCisgICAgICAgICAgICAgICAgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKSA7CisJUDgwMjExX1NFVF9JTlQobXNnLT5wY2ZhY3RpdmUsIGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbY2hhbm5lbF0uYWN0aXZlICYKKwkJSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFCisgICAgICAgICAgICAgICAgPyBQODAyMTFFTlVNX3RydXRoX3RydWUKKyAgICAgICAgICAgICAgICA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpIDsKKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV0b2pvaW4KKyoKKyogQXNzb2NpYXRlIHdpdGggYW4gRVNTLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQkJcmVnOworCVVJTlQxNgkJCXBvcnRfdHlwZTsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QJKm1zZyA9IG1zZ3A7CisJcDgwMjExcHN0cmRfdAkJKnBzdHI7CisJVUlOVDgJCQlieXRlYnVmWzI1Nl07CisJaGZhMzg0eF9ieXRlc3RyX3QJKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCopYnl0ZWJ1ZjsKKwlEQkZFTlRFUjsKKworCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKworCS8qIFNldCB0aGUgU1NJRCAqLworCW1lbWNweSgmd2xhbmRldi0+c3NpZCwgJm1zZy0+c3NpZC5kYXRhLCBzaXplb2YobXNnLT5zc2lkLmRhdGEpKTsKKworCWlmIChody0+YXApIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisKKwkJLyogTmV2ZXIgc3VwcG9ydGVkIG9uIEFQICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBQb3J0ICovCisJaGZhMzg0eF9kcnZyX2Rpc2FibGUoaHcsIDApOworCisJLyoqKiBTVEFUSU9OICoqKi8KKwkvKiBTZXQgdGhlIFR4UmF0ZXMgKi8KKwloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIDB4MDAwZik7CisKKwkvKiBTZXQgdGhlIGF1dGggdHlwZSAqLworCWlmICggbXNnLT5hdXRodHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXkgKSB7CisJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZOworCX0gZWxzZSB7CisJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTTsKKwl9CisJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTiwgcmVnKTsKKworCS8qIFNldCB0aGUgc3NpZCAqLworCW1lbXNldChieXRlYnVmLCAwLCAyNTYpOworCXBzdHIgPSAocDgwMjExcHN0cmRfdCopJihtc2ctPnNzaWQuZGF0YSk7CisJcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIocDJieXRlc3RyLCBwc3RyKTsKKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZygKKwkJCWh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CisjaWYgMAorCS8qIHdlIGNhbiB1c2UgdGhlIG5ldy1mYW5nbGVkIGF1dG8tdW5rbm93biBtb2RlIGlmIHRoZSBmaXJtd2FyZQorCSAgIGlzIDEuMy4zIG9yIG5ld2VyICovCisJaWYgKEhGQTM4NHhfRklSTUFSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkJICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisJCQkJICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPj0KKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsMywzKSkgeworCQkvKiBTZXQgdXAgdGhlIElCU1Mgb3B0aW9ucyAqLworCQlyZWcgPSAgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5FU1NfSk9JTkNSRUFURUlCU1M7CisJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywgcmVnKTsKKworCQkvKiBTZXQgdGhlIFBvcnRUeXBlICovCisJCXBvcnRfdHlwZSA9IEhGQTM4NHhfUE9SVFRZUEVfSUJTUzsKKwl9IGVsc2UgeworCQlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0JTUzsKKwl9CisjZWxzZQorCXBvcnRfdHlwZSA9IEhGQTM4NHhfUE9SVFRZUEVfQlNTOworI2VuZGlmCisJLyogU2V0IHRoZSBQb3J0VHlwZSAqLworCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHBvcnRfdHlwZSk7CisKKwkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwloZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKKworCS8qIFNldCB0aGUgcmVzdWx0Y29kZSAqLworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfd2xhbnNuaWZmCisqCisqIFN0YXJ0IG9yIHN0b3Agc25pZmZpbmcuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCXA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3QJKm1zZyA9IG1zZ3A7CisKKwloZmEzODR4X3QJCQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCXdvcmQ7CisKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJc3dpdGNoIChtc2ctPmVuYWJsZS5kYXRhKQorCXsKKwljYXNlIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U6CisJCS8qIENvbmZpcm0gdGhhdCB3ZSdyZSBpbiBtb25pdG9yIG1vZGUgKi8KKwkJaWYgKCB3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSICkgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKiBEaXNhYmxlIG1vbml0b3IgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9tb25pdG9yKGh3LCBIRkEzODR4X01PTklUT1JfRElTQUJMRSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkiZmFpbGVkIHRvIGRpc2FibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCisJCQkJcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCS8qIERpc2FibGUgcG9ydCAwICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgMCBhZnRlciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCS8qIENsZWFyIHRoZSBkcml2ZXIgc3RhdGUgKi8KKwkJd2xhbmRldi0+bmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCisJCS8qIFJlc3RvcmUgdGhlIHdlcGZsYWdzICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQlIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKKwkJCQlody0+cHJlc25pZmZfd2VwZmxhZ3MpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiZmFpbGVkIHRvIHJlc3RvcmUgd2VwZmxhZ3M9MHglMDR4LCByZXN1bHQ9JWRcbiIsCisJCQlody0+cHJlc25pZmZfd2VwZmxhZ3MsCisJCQlyZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBTZXQgdGhlIHBvcnQgdG8gaXRzIHByaW9yIHR5cGUgYW5kIGVuYWJsZSAoaWYgbmVjZXNzYXJ5KSAqLworCQlpZiAoaHctPnByZXNuaWZmX3BvcnRfdHlwZSAhPSAwICkgeworCQkJd29yZCA9IGh3LT5wcmVzbmlmZl9wb3J0X3R5cGU7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHdvcmQpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkiZmFpbGVkIHRvIHJlc3RvcmUgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwKKwkJCQlyZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCisJCQkvKiBFbmFibGUgdGhlIHBvcnQgKi8KKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwgImZhaWxlZCB0byBlbmFibGUgcG9ydCB0byBwcmVzbmlmZiBzZXR0aW5nLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7CisKKwkJfQorCisJCVdMQU5fTE9HX0lORk8oIm1vbml0b3IgbW9kZSBkaXNhYmxlZFxuIik7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX3RydXRoX3RydWU6CisJCS8qIERpc2FibGUgdGhlIHBvcnQgKGlmIGVuYWJsZWQpLCBvbmx5IGNoZWNrIFBvcnQgMCAqLworCQlpZiAoIGh3LT5wb3J0X2VuYWJsZWRbMF0pIHsKKwkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7CisJCQkJLyogU2F2ZSBtYWNwb3J0IDAgc3RhdGUgKi8KKwkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCisJCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkJCSAgJihody0+cHJlc25pZmZfcG9ydF90eXBlKSk7CisJCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJCVdMQU5fTE9HX0RFQlVHKDEsImZhaWxlZCB0byByZWFkIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCQkvKiBTYXZlIHRoZSB3ZXBmbGFncyBzdGF0ZSAqLworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKKwkJCQkJCQkJICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKKwkJCQkJCQkJICAmKGh3LT5wcmVzbmlmZl93ZXBmbGFncykpOworCQkJCWlmICggcmVzdWx0ICkgeworCQkJCQlXTEFOX0xPR19ERUJVRygxLCJmYWlsZWQgdG8gcmVhZCB3ZXBmbGFncywgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJCQlnb3RvIGZhaWxlZDsKKwkJCQl9CisJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodyk7CisJCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJCQkgICAgICAgImZhaWxlZCB0byByZXN0YXJ0IHRoZSBjYXJkIGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogRGlzYWJsZSB0aGUgcG9ydCAqLworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKKwkJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgPSAwOworCQl9CisKKwkJLyogU2V0IHRoZSBjaGFubmVsIHdlIHdpc2ggdG8gc25pZmYgICovCisJCXdvcmQgPSBtc2ctPmNoYW5uZWwuZGF0YTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCQkJICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCB3b3JkKTsKKwkJaHctPnNuaWZmX2NoYW5uZWw9d29yZDsKKworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IGNoYW5uZWwgJWQsIHJlc3VsdD0lZFxuIiwKKwkJCQkJICAgICAgIHdvcmQsCisJCQkJICAgICAgIHJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIE5vdyBpZiB3ZSdyZSBhbHJlYWR5IHNuaWZmaW5nLCB3ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLworCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikgeworCQkJLyogU2V0IHRoZSBwb3J0IHR5cGUgdG8gcElic3MgKi8KKwkJCXdvcmQgPSBIRkEzODR4X1BPUlRUWVBFX1BTVUVET0lCU1M7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgd29yZCk7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgcG9ydHR5cGUgJWQsIHJlc3VsdD0lZFxuIiwKKwkJCQkJICAgICAgIHdvcmQsCisJCQkJCSAgICAgICByZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQkJaWYgKChtc2ctPmtlZXB3ZXBmbGFncy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT5rZWVwd2VwZmxhZ3MuZGF0YSAhPSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CisJCQkJLyogU2V0IHRoZSB3ZXBmbGFncyBmb3Igbm8gZGVjcnlwdGlvbiAqLworCQkJCXdvcmQgPSBIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfVFhDUllQVCB8CisJCQkJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUOworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIHdvcmQpOworCQkJfQorCisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgd2VwZmxhZ3M9MHglMDR4LCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICB3b3JkLAorCQkJCQkgICAgICAgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJfQorCisJCS8qIERvIHdlIHdhbnQgdG8gc3RyaXAgdGhlIEZDUyBpbiBtb25pdG9yIG1vZGU/ICovCisJCWlmICgobXNnLT5zdHJpcGZjcy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT5zdHJpcGZjcy5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJCWh3LT5zbmlmZl9mY3MgPSAwOworCQl9IGVsc2UgeworCQkJaHctPnNuaWZmX2ZjcyA9IDE7CisJCX0KKworCQkvKiBEbyB3ZSB3YW50IHRvIHRydW5jYXRlIHRoZSBwYWNrZXRzPyAqLworCQlpZiAobXNnLT5wYWNrZXRfdHJ1bmMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgeworCQkJaHctPnNuaWZmX3RydW5jYXRlID0gbXNnLT5wYWNrZXRfdHJ1bmMuZGF0YTsKKwkJfSBlbHNlIHsKKwkJCWh3LT5zbmlmZl90cnVuY2F0ZSA9IDA7CisJCX0KKworCQkvKiBFbmFibGUgdGhlIHBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCisJCQlyZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9tb25pdG9yKGh3LCBIRkEzODR4X01PTklUT1JfRU5BQkxFKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImZhaWxlZCB0byBlbmFibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCisJCQlyZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgeworCQkJV0xBTl9MT0dfSU5GTygibW9uaXRvciBtb2RlIGVuYWJsZWRcbiIpOworCQl9CisKKwkJLyogU2V0IHRoZSBkcml2ZXIgc3RhdGUgKi8KKwkJLyogRG8gd2Ugd2FudCB0aGUgcHJpc20yIGhlYWRlcj8gKi8KKwkJaWYgKChtc2ctPnByaXNtaGVhZGVyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spICYmIChtc2ctPnByaXNtaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQkJaHctPnNuaWZmaGRyID0gMDsKKwkJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007CisJCX0gZWxzZSBpZiAoKG1zZy0+d2xhbmhlYWRlci5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT53bGFuaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQkJaHctPnNuaWZmaGRyID0gMTsKKwkJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007CisJCX0gZWxzZSB7CisJCQl3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOworCQl9CisKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBleGl0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisJfQorCitmYWlsZWQ6CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKKwlyZXN1bHQgPSAwOworZXhpdDoKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNmZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKiBwcmlzbTJtZ210LmgKKyoKKyogRGVjbGFyZXMgdGhlIG1nbXQgY29tbWFuZCBoYW5kbGVyIGZ1bmN0aW9ucworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvbnN0YW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBpbnRlcmFjdGlvbgorKiB3aXRoIHRoZSBoZmEzODR4IFdpcmVsZXNzIExBTiAoV0xBTikgTWVkaWEgQWNjZXNzIENvbnRvbGxlciAoTUFDKS4KKyogVGhlIGhmYTM4NHggaXMgYSBwb3J0aW9uIG9mIHRoZSBIYXJyaXMgUFJJU00odG0pIFdMQU4gY2hpcHNldC4KKyoKKyogW0ltcGxlbWVudGF0aW9uIGFuZCB1c2FnZSBub3Rlc10KKyoKKyogW1JlZmVyZW5jZXNdCisqICAgQ1cxMCBQcm9ncmFtbWVyJ3MgTWFudWFsIHYxLjUKKyogICBJRUVFIDgwMi4xMSBEMTAuMAorKgorKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUFJJU00yTUdNVF9ICisjZGVmaW5lIF9QUklTTTJNR01UX0gKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBUeXBlcyBhbmQgdGhlaXIgcmVsYXRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gU3RhdGljIHZhcmlhYmxlIGV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKK2V4dGVybiBpbnQgICAgICBwcmlzbTJfYmFwX3RpbWVvdXQ7CitleHRlcm4gaW50CXByaXNtMl9pcnFfZXZyZWFkX21heDsKKyNlbmRpZgorZXh0ZXJuIGludAlwcmlzbTJfZGVidWc7CitleHRlcm4gaW50ICAgICAgcHJpc20yX3Jlc2V0X2hvbGR0aW1lOworZXh0ZXJuIGludCAgICAgIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitVSU5UMzIKK3ByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGlmc3RhdGUpOworCit2b2lkCitwcmlzbTJzdGFfZXZfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZAorcHJpc20yc3RhX2V2X2luZmRyb3Aod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwordm9pZAorcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHN0YXR1cyk7Cit2b2lkCitwcmlzbTJzdGFfZXZfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgc3RhdHVzKTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZAorcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKKworaW50IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcG93ZXJtZ210KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3AyX2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1dGhlbnRpY2F0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZGVhdXRoZW50aWNhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2Fzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmVhc3NvY2lhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2Rpc2Fzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYWRjaXMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfcmVhZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfYXV4cG9ydF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfbG93X2xldmVsKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF90ZXN0X2NvbW1hbmQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X21taV9yZWFkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9tbWlfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfbW1fc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2R1bXBfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2VuYWJsZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9jaGFubmVsX2luZm9fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogY29udmVyc2lvbiBmdW5jdGlvbnMgZ29pbmcgYmV0d2VlbiB3bGFuIG1lc3NhZ2UgZGF0YSB0eXBlcyBhbmQKKyogUHJpc20yIGRhdGEgdHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBieXRlIGFyZWEgY29udmVyc2lvbiBmdW5jdGlvbnMqLwordm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEoVUlOVDggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKK3ZvaWQgcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKFVJTlQ4ICpieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqcHN0ciwgaW50IGxlbik7CisKKy8qIGJ5dGUgc3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zKi8KK3ZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwordm9pZCBwcmlzbTJtZ210X2J5dGVzdHIycHN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cik7CisKKy8qIGludGVnZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KK3ZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KFVJTlQxNiAqcHJpc20yaW50LCBVSU5UMzIgKndsYW5pbnQpOwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQoVUlOVDE2ICpwcmlzbTJpbnQsIFVJTlQzMiAqd2xhbmludCk7CisKKy8qIGVudW1lcmF0ZWQgaW50ZWdlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqLwordm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpOwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpOworCisvKiBmdW5jdGlvbnMgdG8gY29udmVydCBhIGJpdCBhcmVhIHRvL2Zyb20gYW4gT3BlcmF0aW9uYWwgUmF0ZSBTZXQgKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KFVJTlQxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cik7Cit2b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldChVSU5UMTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOworCisvKiBmdW5jdGlvbnMgdG8gY29udmVydCBHcm91cCBBZGRyZXNzZXMgKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcihVSU5UMzIgZGlkLAorCXA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdiApOworaW50IHByaXNtMm1nbXRfc2V0X2dycGFkZHIoVUlOVDMyIGRpZCwKKwlVSU5UOCAqcHJpc20yYnVmLCBwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKnByaXYgKTsKK2ludCBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KCBVSU5UMzIgZGlkICk7CisKK3ZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKKwordm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7Cit2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9ucyAoaWYgc3VwcG9ydGVkKSAtLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzA2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYwpAQCAtMCwwICsxLDM3OTcgQEAKKy8qIHNyYy9wcmlzbTIvZHJpdmVyL3ByaXNtMm1pYi5jCisqCisqIE1hbmFnZW1lbnQgcmVxdWVzdCBmb3IgbWlic2V0L21pYmdldAorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBoYW5kbGUgdGhlIG1pYnNldC9taWJnZXQgbWFuYWdlbWVudAorKiBmdW5jdGlvbnMuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8vI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKy8vI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CisvLyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKy8vI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisvLyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisvLyNlbmRpZgorLy8KKy8vI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkpCisvLyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKy8vI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorLy9lbmRpZgorCisvLyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisvLyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisjZGVmaW5lIE1JQl9UTVBfTUFYTEVOICAgIDIwMCAgICAvKiBNYXggbGVuZ3RoIG9mIFJJRCByZWNvcmQgKGluIGJ5dGVzKS4gKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKyNkZWZpbmUgIEZfQVAgICAgICAgICAweDEgICAgICAgIC8qIE1JQiBpcyBzdXBwb3J0ZWQgb24gQWNjZXNzIFBvaW50cy4gKi8KKyNkZWZpbmUgIEZfU1RBICAgICAgICAweDIgICAgICAgIC8qIE1JQiBpcyBzdXBwb3J0ZWQgb24gc3RhdGlvbnMuICovCisjZGVmaW5lICBGX1JFQUQgICAgICAgMHg0ICAgICAgICAvKiBNSUIgbWF5IGJlIHJlYWQuICovCisjZGVmaW5lICBGX1dSSVRFICAgICAgMHg4ICAgICAgICAvKiBNSUIgbWF5IGJlIHdyaXR0ZW4uICovCisKK3R5cGVkZWYgc3RydWN0IG1pYnJlYworeworICAgIFVJTlQzMiAgIGRpZDsKKyAgICBVSU5UMTYgICBmbGFnOworICAgIFVJTlQxNiAgIHBhcm0xOworICAgIFVJTlQxNiAgIHBhcm0yOworICAgIFVJTlQxNiAgIHBhcm0zOworICAgIGludCAgICAgICgqZnVuYykoc3RydWN0IG1pYnJlYyAgICAgICAgICAgICAgICAqbWliLAorICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKKyAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCisgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKKyAgICAgICAgICAgICAgICAgICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworfSBtaWJyZWNfdDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ieXRlc3RyMnBzdHIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyYXJyYXkoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMm9mZnNldCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfdHJ1dGgoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByZWFtYmxlKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9mbGFnKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9hcHBjZmluZm9mbGFnKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9yZWd1bGF0b3J5ZG9tYWlucygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfcG93ZXJtYW5hZ2VtZW50KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9vcGVyYXRpb25hbHJhdGVzZXQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2dyb3VwYWRkcmVzcygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfZndpZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfYXV0aGFsZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoCitoZmEzODR4X3QgICAgICAqaHcsCitwcmlzbTJzdGFfYXV0aGxpc3RfdCAgKmxpc3QpOworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3Ntb2RlKAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorVUlOVDMyICAgICAgICAgICAgbW9kZSk7CisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93KAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorcDgwMjExbWFjYXJyYXlfdCAgKm1hY2FycmF5KTsKKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzZGVueSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK3A4MDIxMW1hY2FycmF5X3QgICptYWNhcnJheSk7CisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlKAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorVUlOVDggICAgICAgICAgICAgKmFkZHIpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKK3N0YXRpYyBtaWJyZWNfdCBtaWJ0YWJbXSA9IHsKKworICAgIC8qIGRvdDExc210IE1JQidzICovCisKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVN0YXRpb25JRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFNZWRpdW1PY2N1cGFuY3lMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQ0ZQb2xsYWJsZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DRlBPTExBQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUNGUFBlcmlvZCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDEsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQ0ZQTWF4RHVyYXRpb24sCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAyLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uUmVzcG9uc2VUaW1lT3V0LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBVVRIUlNQVElNRU9VVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BSSVZBQ1lPUFRJTVAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExUG93ZXJNYW5hZ2VtZW50TW9kZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVELCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wb3dlcm1hbmFnZW1lbnQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRTU0lELAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRCU1NUeXBlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFPcGVyYXRpb25hbFJhdGVTZXQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX29wZXJhdGlvbmFscmF0ZXNldCB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExT3BlcmF0aW9uYWxSYXRlU2V0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9vcGVyYXRpb25hbHJhdGVzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUJlYWNvblBlcmlvZCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUEJDTklOVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEVElNUGVyaW9kLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBc3NvY2lhdGlvblJlc3BvbnNlVGltZU91dCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJPVE9DT0xSU1BUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0xLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG00LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICA0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtNSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgNSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTYsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlMSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGdlbmFibGUgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlMiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGdlbmFibGUgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlMywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGdlbmFibGUgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlNCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGdlbmFibGUgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlNSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGdlbmFibGUgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlNiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGdlbmFibGUgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTEsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCBIRkEzODR4X1dFUEZMQUdTX1BSSVZJTlZPS0VELCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWUlELCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCBIRkEzODR4X1dFUEZMQUdTX0VYQ0xVREUsIDAsCisgICAgICAgICAgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZCB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFByZWFtYmxlRW5hYmxlZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlNIT1JUUFJFQU1CTEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByZWFtYmxlIH0sCisKKyAgICAvKiBkb3QxMW1hYyBNSUIncyAqLworCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3MsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSLCBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TSE9SVFJFVFJZTElNSVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNILCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhSZWNlaXZlTGlmZXRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01BWFJYTElGRVRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M0LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczYsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M3LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczksCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczExLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTIsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE0LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE3LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTgsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxOSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIwLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjEsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIzLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI2LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjcsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI5LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzAsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMyLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKworICAgIC8qIGRvdDExcGh5IE1JQidzICovCisKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExUEhZVHlwZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUEhZVFlQRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVRlbXBUeXBlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9URU1QVFlQRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQ0hBTk5FTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENDQU1vZGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NDQU1PREUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCisgICAgLyogcDJUYWJsZSBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMk1NVHgsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkVhcmx5QmVhY29uLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEJJVDcsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2FwcGNmaW5mb2ZsYWcgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyUmVjZWl2ZWRGcmFtZVN0YXRpc3RpY3MsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQ29tbXVuaWNhdGlvblRhbGxpZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQXV0aGVudGljYXRlZCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQXNzb2NpYXRlZCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyUG93ZXJTYXZlVXNlckNvdW50LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJDb21tZW50LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NNb2RlLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzQWxsb3csCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NEZW55LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQ2hhbm5lbEluZm9SZXN1bHRzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorCisgICAgLyogcDJTdGF0aWMgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bk1BQ0FkZHJlc3MsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSLCBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mRGVzaXJlZFNTSUQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duQ2hhbm5lbCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duU1NJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bkFUSU1XaW5kb3csCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU4sIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU3lzdGVtU2NhbGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZTWVNTQ0FMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhEYXRhTGVuZ3RoLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRFNBRERSLCBIRkEzODR4X1JJRF9DTkZXRFNBRERSX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1FbmFibGVkLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQTUVOQUJMRUQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUVQUywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUE1FUFMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNdWx0aWNhc3RSZWNlaXZlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heFNsZWVwRHVyYXRpb24sCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNSG9sZG92ZXJEdXJhdGlvbiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUE1IT0xERFVSLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bk5hbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05OQU1FLCBIRkEzODR4X1JJRF9DTkZPV05OQU1FX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25EVElNUGVyaW9kLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRFNBRERSMSwgSEZBMzg0eF9SSURfQ05GV0RTQUREUjFfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRFNBRERSMiwgSEZBMzg0eF9SSURfQ05GV0RTQUREUjJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRFNBRERSMywgSEZBMzg0eF9SSURfQ05GV0RTQUREUjNfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRFNBRERSNCwgSEZBMzg0eF9SSURfQ05GV0RTQUREUjRfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRFNBRERSNSwgSEZBMzg0eF9SSURfQ05GV0RTQUREUjVfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRFNBRERSNiwgSEZBMzg0eF9SSURfQ05GV0RTQUREUjZfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUERlZmF1bHRLZXlJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlJRCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBGbGFncywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkF1dGhlbnRpY2F0aW9uLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4QXNzb2NpYXRlZFN0YXRpb25zLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk1BWEFTU09DU1RBVElPTlMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mVHhDb250cm9sLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GVFhDT05UUk9MLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlJvYW1pbmdNb2RlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZIb3N0QXV0aGVudGljYXRpb24sCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GSE9TVEFVVEhBU1NPQywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlJjdkNyY0Vycm9yLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUkNWQ1JDRVJST1IsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQWx0UmV0cnlDb3VudCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFMVFJFVFJZQ05ULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkJlYWNvbkludGVydmFsLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQQkNOSU5ULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1lZGl1bU9jY3VwYW5jeUxpbWl0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBQZXJpb2QsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAxLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkNGUE1heER1cmF0aW9uLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMiwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBGbGFncywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDMsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU1RBUENGSW5mbywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GU1RBUENGSU5GTywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQcmlvcml0eVFVc2FnZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBSSU9SSVRZUVVTQUdFLCBIRkEzODR4X1JJRF9DTkZQUklPUVVTQUdFX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlRJTUN0cmwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZUSU1DVFJMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlRoaXJ0eTJUYWxseSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlRISVJUWTJUQUxMWSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkVuaFNlY3VyaXR5LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkVOSFNFQ1VSSVRZLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlNob3J0UHJlYW1ibGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZTSE9SVFBSRUFNQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcmVhbWJsZSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mRXhjbHVkZUxvbmdQcmVhbWJsZSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZFWENMT05HUFJFQU1CTEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBdXRoZW50aWNhdGlvblJzcFRPLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBVVRIUlNQVElNRU9VVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZCYXNpY1JhdGVzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTdXBwb3J0ZWRSYXRlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlNVUFBSQVRFUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisKKyAgICAvKiBwMkR5bmFtaWMgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkNyZWF0ZUlCU1MsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NSRUFURUlCU1MsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNILCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJQcm9taXNjdW91c01vZGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1BST01JU0NNT0RFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQwLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDEsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNIMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNINSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ2LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0g2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQxLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDIsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNINSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0g2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDEsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wyLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w1LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEw1LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMNiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisKKyAgICAvKiBwMkJlaGF2aW9yIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMkJlaGF2aW9yX3AyVGlja1RpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9JVElDS1RJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCisgICAgLyogcDJOSUMgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyTklDX3AyTWF4TG9hZFRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01BWExPQURUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkRMQnVmZmVyUGFnZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJETEJ1ZmZlck9mZnNldCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJETEJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSX0xFTiwgMiwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJQUklJZGVudGl0eSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJSURFTlRJVFksIEhGQTM4NHhfUklEX1BSSUlERU5USVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlBSSVN1cFJhbmdlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUklTVVBSQU5HRSwgSEZBMzg0eF9SSURfUFJJU1VQUkFOR0VfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyQ0ZJQWN0UmFuZ2VzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUklfQ0ZJQUNUUkFOR0VTLCBIRkEzODR4X1JJRF9DRklBQ1RSQU5HRVNfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyQnVpbGRTZXF1ZW5jZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQlVJTERTRVEsIEhGQTM4NHhfUklEX0JVSUxEU0VRX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlByaW1hcnlGV0lELAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9md2lkIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJTZWNvbmRhcnlGV0lELAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9md2lkIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJUZXJ0aWFyeUZXSUQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9md2lkIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJOSUNTZXJpYWxOdW1iZXIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUiwgSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyTklDSWRlbnRpdHksCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX05JQ0lERU5USVRZLCBIRkEzODR4X1JJRF9OSUNJREVOVElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJNRklTdXBSYW5nZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTUZJU1VQUkFOR0UsIEhGQTM4NHhfUklEX01GSVNVUFJBTkdFX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkNGSVN1cFJhbmdlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DRklTVVBSQU5HRSwgSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0VfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyQ2hhbm5lbExpc3QsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NIQU5ORUxMSVNULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlJlZ3VsYXRvcnlEb21haW5zLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOUywgSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlNfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9yZWd1bGF0b3J5ZG9tYWlucyB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyVGVtcFR5cGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1RFTVBUWVBFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlNUQUlkZW50aXR5LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVEFJREVOVElUWSwgSEZBMzg0eF9SSURfU1RBSURFTlRJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyU1RBU3VwUmFuZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NUQVNVUFJBTkdFLCBIRkEzODR4X1JJRF9TVEFTVVBSQU5HRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJNRklBY3RSYW5nZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NUQV9NRklBQ1RSQU5HRVMsIEhGQTM4NHhfUklEX01GSUFDVFJBTkdFU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJTVEFDRklBY3RSYW5nZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NUQV9DRklBQ1RSQU5HRVMsIEhGQTM4NHhfUklEX0NGSUFDVFJBTkdFUzJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorCisgICAgLyogcDJNQUMgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyTUFDX3AyUG9ydFN0YXR1cywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRTU0lELAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudEJTU0lELAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lEX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eUNRLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlBU0wsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAxLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eUFOTCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDIsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMmRibUNvbW1zUXVhbGl0eUNRLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlBU0wsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAxLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMmRibUNvbW1zUXVhbGl0eUFOTCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDIsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRCZWFjb25JbnRlcnZhbCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJDTklOVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJTdGFDdXJyZW50U2NhbGVUaHJlc2hvbGRzLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTQ0FMRVRIUkVTSCwgSEZBMzg0eF9SSURfU1RBQ1VSU0NBTEVUSFJFU0hfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQVBDdXJyZW50U2NhbGVUaHJlc2hvbGRzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNDQUxFVEhSRVNILCBIRkEzODR4X1JJRF9BUENVUlNDQUxFVEhSRVNIX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMlByb3RvY29sUnNwVGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJPVE9DT0xSU1BUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMlNob3J0UmV0cnlMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkxvbmdSZXRyeUxpbWl0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9MT05HUkVUUllMSU1JVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJNYXhUcmFuc21pdExpZmV0aW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMk1heFJlY2VpdmVMaWZldGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDRlBvbGxhYmxlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NGUE9MTEFCTEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQXV0aGVudGljYXRpb25BbGdvcml0aG1zLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNUywgSEZBMzg0eF9SSURfQVVUSEFMR09SSVRITVNfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUxLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTIsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlMywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlNiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMk93bk1BQ0FkZHJlc3MsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9PV05NQUNBRERSRVNTLCBIRkEzODR4X1JJRF9PV05NQUNBRERSRVNTX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorCisgICAgLyogcDJNb2RlbSBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJNb2RlbV9wMlBIWVR5cGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BIWVRZUEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTW9kZW1fcDJDdXJyZW50Q2hhbm5lbCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTW9kZW1fcDJDdXJyZW50UG93ZXJTdGF0ZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFBPV0VSU1RBVEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTW9kZW1fcDJDQ0FNb2RlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DQ0FNT0RFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyVHhQb3dlck1heCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUE9XRVJNQVgsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUE9XRVJNQVgsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTW9kZW1fcDJTdXBwb3J0ZWREYXRhUmF0ZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NVUFBPUlRFRERBVEFSQVRFUywgSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisKKyAgICAvKiBBbmQgZmluYWxseSwgbG54IG1pYnMgKi8KKyAgICB7IERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGVfbG54UlNOQUlFLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyAwLCAwLCAwLCAwLCAwLCBOVUxMfX07CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlc2UgTUlCJ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lOgorCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMUNoYW5uZWxBZ2lsaXR5UHJlc2VudAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDaGFubmVsQWdpbGl0eUVuYWJsZWQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMVBCQ0NPcHRpb25JbXBsZW1lbnRlZAorRElEbWliX2RvdDExcGh5X2RvdDExUmVnRG9tYWluc1N1cHBvcnRlZFRhYmxlX2RvdDExUmVnRG9tYWluc1N1cHBvcnRJbmRleAorRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFZhbHVlCitESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhJbmRleAorRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4VmFsdWUKKworRElEbWliX2RvdDExcGh5X2RvdDExUmVnRG9tYWluc1N1cHBvcnRlZFRhYmxlX2RvdDExUmVnRG9tYWluc1N1cHBvcnRWYWx1ZQorVE9ETzogbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aHkgd2xhbiBoYXMgdGhpcyBhcyBlbnVtZXJhdGVkIGFuZCBQcmlzbTIgaGFzIHRoaXMKKyAgICAgIGFzIGJ0eWUgc3RyLgorCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFTaG9ydFByZWFtYmxlT3B0aW9uSW1wbGVtZW50ZWQKK1RPRE86IEZpbmQgb3V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlcihzKSBmb3IgaWRlbnRpZnlpbmcKKyAgICAgIHdoZXRoZXIgdGhlIGZpcm13YXJlIGlzIGNhcGFibGUgb2Ygc2hvcnQgcHJlYW1ibGUuIFRSVUUgb3IgRkFMU0UKKyAgICAgIHdpbGwgYmUgcmV0dXJuZWQgYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgdGhlIGZpcm13YXJlLgorCitXRVAgS2V5IG1hcHBpbmdzIGFyZW4ndCBzdXBwb3J0ZWQgaW4gdGhlIGYvdy4KK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nSW5kZXgKK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nQWRkcmVzcworRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdXRVBPbgorRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdWYWx1ZQorRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0xlbmd0aAorCitUT0RPOiBpbXBsZW1lbnQgY291bnRlcnMuCitESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBJQ1ZFcnJvckNvdW50CitESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBFeGNsdWRlZENvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExRmFpbGVkQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSZXRyeUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGlwbGVSZXRyeUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExRnJhbWVEdXBsaWNhdGVDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJUU1N1Y2Nlc3NDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJUU0ZhaWx1cmVDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUFDS0ZhaWx1cmVDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZDU0Vycm9yQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFUcmFuc21pdHRlZEZyYW1lQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQKKworVE9ETzogaW1wbGVtZW50IHNhbmUgdmFsdWVzIGZvciB0aGVzZS4KK0RJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWFudWZhY3R1cmVySUQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUHJvZHVjdElECisKK05vdCB0b28gd29ycmllZCBhYm91dCB0aGVzZSBhdCB0aGUgbW9tZW50LgorRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlX2RvdDExQ3VycmVudFR4QW50ZW5uYQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlX2RvdDExRGl2ZXJzaXR5U3VwcG9ydAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlX2RvdDExQ3VycmVudFJ4QW50ZW5uYQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExTnVtYmVyU3VwcG9ydGVkUG93ZXJMZXZlbHMKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDEKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDIKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDMKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDUKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDYKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDcKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwKKworVW1tbSwgRkggYW5kIElSIGRvbid0IGFwcGx5CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFIb3BUaW1lCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbE51bWJlcgorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExTWF4RHdlbGxUaW1lCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50RHdlbGxUaW1lCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50U2V0CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50UGF0dGVybgorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudEluZGV4CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDQ0FNb2RlU3VwcG9ydGVkCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFFRFRocmVzaG9sZAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nVGltZXJNYXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ0NvdW50TWF4CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dUaW1lck1pbgorRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nQ291bnRNaW4KKworV2UganVzdCBkb24ndCBoYXZlIGVub3VnaCBhbnRlbm5hcyByaWdodCBub3cgdG8gd29ycnkgYWJvdXQgdGhpcy4KK0RJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExQW50ZW5uYUxpc3RJbmRleAorRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFTdXBwb3J0ZWRUeEFudGVubmEKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExU3VwcG9ydGVkUnhBbnRlbm5hCitESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMURpdmVyc2l0eVNlbGVjdGlvblJ4CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0CisqCisqIFNldCB0aGUgdmFsdWUgb2YgYSBtaWIgaXRlbS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCWludAkJCXJlc3VsdCwgaXNnZXQ7CisJbWlicmVjX3QJCSptaWI7CisJVUlOVDE2CQkJd2hpY2g7CisKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJKm1zZyA9IG1zZ3A7CisJcDgwMjExaXRlbWRfdAkJCSptaWJpdGVtOworCisJREJGRU5URVI7CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwkvKgorCSoqIERldGVybWluZSBpZiB0aGlzIGlzIGFuIEFjY2VzcyBQb2ludCBvciBhIHN0YXRpb24uCisJKi8KKworCXdoaWNoID0gaHctPmFwID8gRl9BUCA6IEZfU1RBOworCisJLyoKKwkqKiBGaW5kIHRoZSBNSUIgaW4gdGhlIE1JQiB0YWJsZS4gIE5vdGUgdGhhdCBhIE1JQiBtYXkgYmUgaW4gdGhlCisJKiogdGFibGUgdHdpY2UuLi5vbmNlIGZvciBhbiBBUCBhbmQgb25jZSBmb3IgYSBzdGF0aW9uLiAgTWFrZSBzdXJlCisJKiogdG8gZ2V0IHRoZSBjb3JyZWN0IG9uZS4gIE5vdGUgdGhhdCBESUQ9MCBtYXJrcyB0aGUgZW5kIG9mIHRoZQorCSoqIE1JQiB0YWJsZS4KKwkqLworCisJbWliaXRlbSA9IChwODAyMTFpdGVtZF90ICopIG1zZy0+bWliYXR0cmlidXRlLmRhdGE7CisKKwlmb3IgKG1pYiA9IG1pYnRhYjsgbWliLT5kaWQgIT0gMDsgbWliKyspCisJCWlmIChtaWItPmRpZCA9PSBtaWJpdGVtLT5kaWQgJiYgKG1pYi0+ZmxhZyAmIHdoaWNoKSkKKwkJCWJyZWFrOworCisJaWYgKG1pYi0+ZGlkID09IDApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJKiogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSAibWliZ2V0IiBvciBhICJtaWJzZXQiLiAgSWYgdGhpcyBpcyBhCisJKiogIm1pYmdldCIsIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgcmVhZC4gIE90aGVyd2lzZSwKKwkqKiB0aGlzIGlzIGEgIm1pYnNldCIgc28gbWFrZSBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSB3cml0dGVuLgorCSovCisKKwlpc2dldCA9IChtc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2RvdDExcmVxX21pYmdldCk7CisKKwlpZiAoaXNnZXQpIHsKKwkJaWYgKCEobWliLT5mbGFnICYgRl9SRUFEKSkgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X2dldF93cml0ZW9ubHlfbWliOworCQkJZ290byBkb25lOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEobWliLT5mbGFnICYgRl9XUklURSkpIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9zZXRfcmVhZG9ubHlfbWliOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJLyoKKwkqKiBFeGVjdXRlIHRoZSBNSUIgZnVuY3Rpb24uICBJZiB0aGluZ3Mgd29ya2VkIG9rYXksIHRoZW4gbWFrZQorCSoqIHN1cmUgdGhhdCB0aGUgTUlCIGZ1bmN0aW9uIGFsc28gd29ya2VkIG9rYXkuICBJZiBzbywgYW5kIHRoaXMKKwkqKiBpcyBhICJtaWJnZXQiLCB0aGVuIHRoZSBzdGF0dXMgdmFsdWUgbXVzdCBiZSBzZXQgZm9yIGJvdGggdGhlCisJKiogIm1pYmF0dHJpYnV0ZSIgcGFyYW1ldGVyIGFuZCB0aGUgbWliIGl0ZW0gd2l0aGluIHRoZSBkYXRhCisJKiogcG9ydGlvbiBvZiB0aGUgIm1pYmF0dHJpYnV0ZSIuCisJKi8KKworCXJlc3VsdCA9IG1pYi0+ZnVuYyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLAorCQkJICAgKHZvaWQgKikgbWliaXRlbS0+ZGF0YSk7CisKKwlpZiAobXNnLT5yZXN1bHRjb2RlLmRhdGEgPT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKKwkJaWYgKHJlc3VsdCAhPSAwKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLCAiZ2V0L3NldCBmYWlsdXJlLCByZXN1bHQ9JWRcbiIsCisJCQkJCXJlc3VsdCk7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQl9IGVsc2UgeworCQkJaWYgKGlzZ2V0KSB7CisJCQkJbXNnLT5taWJhdHRyaWJ1dGUuc3RhdHVzID0KKwkJCQkJUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJCW1pYml0ZW0tPnN0YXR1cyA9CisJCQkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCX0KKwkJfQorCX0KKworZG9uZToKKwlEQkZFWElUOworCisJcmV0dXJuKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2J5dGVzdHIycHN0cgorKgorKiBHZXQvc2V0IHBzdHIgZGF0YSB0by9mcm9tIGEgYnl0ZSBzdHJpbmcuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAgICAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJVUlOVDggICAgICAgICAgICAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCWhmYTM4NHhfYnl0ZXN0cl90ICAqcDJieXRlc3RyID0gKGhmYTM4NHhfYnl0ZXN0cl90KikgYnl0ZWJ1ZjsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOworCQlwcmlzbTJtZ210X2J5dGVzdHIycHN0cihwMmJ5dGVzdHIsIHBzdHIpOworCX0gZWxzZSB7CisJCW1lbXNldChieXRlYnVmLCAwLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIocDJieXRlc3RyLCBwc3RyKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyCisqCisqIEdldC9zZXQgcHN0ciBkYXRhIHRvL2Zyb20gYSBieXRlIGFyZWEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKKwlVSU5UOCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOworCQlwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIoYnl0ZWJ1ZiwgcHN0ciwJbWliLT5wYXJtMik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGJ5dGVidWYsIDAsIG1pYi0+cGFybTIpOworCQlwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEoYnl0ZWJ1ZiwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfdWludDMyCisqCisqIEdldC9zZXQgdWludDMyIGRhdGEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlVSU5UOCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CisJCSp1aW50MzIgPSAqd29yZGJ1ZjsKKwkJLyogW01TTV0gUmVtb3ZlZCwgZ2V0Y29uZmlnMTYgcmV0dXJucyB0aGUgdmFsdWUgaW4gaG9zdCBvcmRlci4KKwkJICogcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYsIHVpbnQzMik7CisJCSAqLworCX0gZWxzZSB7CisJCS8qIFtNU01dIFJlbW92ZWQsIHNldGNvbmZpZzE2IGV4cGVjdHMgaG9zdCBvcmRlci4KKwkJICogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHdvcmRidWYsIHVpbnQzMik7CisJCSAqLworCQkqd29yZGJ1ZiA9ICp1aW50MzI7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfdWludDMyYXJyYXkKKyoKKyogR2V0L3NldCBhbiBhcnJheSBvZiB1aW50MzIgZGF0YS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzJhcnJheSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIgKikgZGF0YTsKKwlVSU5UOCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKwlpbnQgICAgIGksIGNudDsKKworCURCRkVOVEVSOworCisJY250ID0gbWliLT5wYXJtMiAvIHNpemVvZihVSU5UMTYpOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYsIG1pYi0+cGFybTIpOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCQlwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZitpLCB1aW50MzIraSk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQkJcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHdvcmRidWYraSwgdWludDMyK2kpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwkJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl91aW50MzJvZmZzZXQKKyoKKyogR2V0L3NldCBhIHNpbmdsZSBlbGVtZW50IGluIGFuIGFycmF5IG9mIHVpbnQzMiBkYXRhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgRWxlbWVudCBpbmRleC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyb2Zmc2V0KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisJVUlOVDE2ICBjbnQ7CisKKwlEQkZFTlRFUjsKKworCWNudCA9IG1pYi0+cGFybTIgLyBzaXplb2YoVUlOVDE2KTsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYsIG1pYi0+cGFybTIpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlpZiAoaXNnZXQpIHsKKwkJCWlmIChtaWItPnBhcm0zIDwgY250KQorCQkJCXByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmK21pYi0+cGFybTMsIHVpbnQzMik7CisJCQllbHNlCisJCQkJKnVpbnQzMiA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAobWliLT5wYXJtMyA8IGNudCkgeworCQkJCXByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludCh3b3JkYnVmK21pYi0+cGFybTMsIHVpbnQzMik7CisJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgd29yZGJ1ZiwgbWliLT5wYXJtMik7CisJCQl9CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3RydXRoCisqCisqIEdldC9zZXQgdHJ1dGggZGF0YS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3RydXRoKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOworCQkqdWludDMyID0gKCp3b3JkYnVmKSA/CisJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlIDogUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwl9IGVsc2UgeworCQkqd29yZGJ1ZiA9ICgoKnVpbnQzMikgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSA/IDEgOiAwOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2ZsYWcKKyoKKyogR2V0L3NldCBhIGZsYWcuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgQml0IHRvIGdldC9zZXQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9mbGFnKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisJVUlOVDMyICBmbGFnczsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJLyogW01TTV0gUmVtb3ZlZCwgZ2V0Y29uZmlnMTYgcmV0dXJucyB0aGUgdmFsdWUgaW4gaG9zdCBvcmRlci4KKwkJICogcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYsICZmbGFncyk7CisJCSAqLworCQlmbGFncyA9ICp3b3JkYnVmOworCQlpZiAoaXNnZXQpIHsKKwkJCSp1aW50MzIgPSAoZmxhZ3MgJiBtaWItPnBhcm0yKSA/CisJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlIDogUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoKnVpbnQzMikgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJCWZsYWdzIHw9IG1pYi0+cGFybTI7CisJCQllbHNlCisJCQkJZmxhZ3MgJj0gfm1pYi0+cGFybTI7CisJCQkvKiBbTVNNXSBSZW1vdmVkLCBzZXRjb25maWcxNiBleHBlY3RzIGhvc3Qgb3JkZXIuCisJCQkgKiBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZiwgJmZsYWdzKTsKKwkJCSAqLworCQkJKndvcmRidWYgPSBmbGFnczsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9hcHBjZmluZm9mbGFnCisqCisqIEdldC9zZXQgYSBzaW5nbGUgZmxhZyBpbiB0aGUgQVBQQ0ZJTkZPIHJlY29yZC4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBCaXQgdG8gZ2V0L3NldC4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9hcHBjZmluZm9mbGFnKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisJVUlOVDE2ICB3b3JkOworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sCisJCQkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4pOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlpZiAoaXNnZXQpIHsKKwkJCSp1aW50MzIgPSAoaGZhMzg0eDJob3N0XzE2KHdvcmRidWZbM10pICYgbWliLT5wYXJtMSkgPworCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQl3b3JkID0gaGZhMzg0eDJob3N0XzE2KHdvcmRidWZbM10pOworCQkJd29yZCA9ICgoKnVpbnQzMikgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSA/CisJCQkJKHdvcmQgfCBtaWItPnBhcm0xKSA6ICh3b3JkICYgfm1pYi0+cGFybTEpOworCQkJd29yZGJ1ZlszXSA9IGhvc3QyaGZhMzg0eF8xNih3b3JkKTsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywKKwkJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTik7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3JlZ3VsYXRvcnlkb21haW5zCisqCisqIEdldCByZWd1bGF0b3J5IGRvbWFpbiBkYXRhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3JlZ3VsYXRvcnlkb21haW5zKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgcmVzdWx0OworCVVJTlQzMiAgICAgICAgIGNudDsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKKwlVSU5UOCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICAgICAgICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSAwOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYsIG1pYi0+cGFybTIpOworCQlwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZiwgJmNudCk7CisJCXBzdHItPmxlbiA9IChVSU5UOCkgY250OworCQltZW1jcHkocHN0ci0+ZGF0YSwgJndvcmRidWZbMV0sIHBzdHItPmxlbik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5CisqCisqIEdldC9zZXQgV0VQIGRlZmF1bHQga2V5cy4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCVVJTlQ4ICAgICAgICAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgICAgICAgIGxlbjsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IDA7ICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4uICovCisJfSBlbHNlIHsKKwkJbGVuID0gKHBzdHItPmxlbiA+IDUpID8gSEZBMzg0eF9SSURfQ05GV0VQMTI4REVGQVVMVEtFWV9MRU4gOgorCQkJCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZX0xFTjsKKwkJbWVtc2V0KGJ5dGVidWYsIDAsIGxlbik7CisJCXByaXNtMm1nbXRfcHN0cjJieXRlYXJlYShieXRlYnVmLCBwc3RyKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbGVuKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3Bvd2VybWFuYWdlbWVudAorKgorKiBHZXQvc2V0IDgwMi4xMSBwb3dlciBtYW5hZ2VtZW50IHZhbHVlLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGVmaW5lZCBkaWZmZXJlbnRseQorKiBieSA4MDIuMTEgYW5kIFByaXNtMjoKKyoKKyogICAgICAgTWVhbmluZyAgICAgODAyLjExICAgICAgIFByaXNtMgorKiAgICAgICAgYWN0aXZlICAgICAgIDEgICAgICAgICAgIGZhbHNlCisqICAgICAgcG93ZXJzYXZlICAgICAgMiAgICAgICAgICAgdHJ1ZQorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfcG93ZXJtYW5hZ2VtZW50KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDMyICB2YWx1ZTsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IHByaXNtMm1pYl91aW50MzIobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywgJnZhbHVlKTsKKwkJKnVpbnQzMiA9ICh2YWx1ZSA9PSAwKSA/IDEgOiAyOworCX0gZWxzZSB7CisJCXZhbHVlID0gKCgqdWludDMyKSA9PSAxKSA/IDAgOiAxOworCQlyZXN1bHQgPSBwcmlzbTJtaWJfdWludDMyKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csICZ2YWx1ZSk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcmVhbWJsZQorKgorKiBHZXQvc2V0IFByaXNtMiBzaG9ydCBwcmVhbWJsZQorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJlYW1ibGUoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlVSU5UOCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CisJCSp1aW50MzIgPSAqd29yZGJ1ZjsKKwl9IGVsc2UgeworCQkqd29yZGJ1ZiA9ICp1aW50MzI7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQKKyoKKyogR2V0L3NldCB0aGUgZG90MTFQcml2YWN5SW52b2tlZCB2YWx1ZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBCaXQgdmFsdWUgZm9yIFByaXZhY3lJbnZva2VkIGZsYWcuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVDUllQVCkgeworCQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVDUllQVCkKKwkJCW1pYi0+cGFybTIgfD0gSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQ7CisJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FTkNSWVBUKQorCQkJbWliLT5wYXJtMiB8PSBIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfVFhDUllQVDsKKwl9CisKKwlyZXN1bHQgPSBwcmlzbTJtaWJfZmxhZyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCBkYXRhKTsKKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkCisqCisqIEdldC9zZXQgdGhlIGRvdDExRXhjbHVkZVVuZW5jcnlwdGVkIHZhbHVlLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIEJpdCB2YWx1ZSBmb3IgRXhjbHVkZVVuZW5jcnlwdGVkIGZsYWcuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gcHJpc20ybWliX2ZsYWcobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywgZGF0YSk7CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQKKyoKKyogR2V0L3NldCB0aGUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisKKwlEQkZFTlRFUjsKKworCWlmICghaXNnZXQpCisJCWlmICgoKnVpbnQzMikgJSAyKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCJBdHRlbXB0IHRvIHNldCBvZGQgbnVtYmVyICIKKwkJCQkJICAiRnJhZ21lbnRhdGlvblRocmVzaG9sZFxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQkJcmV0dXJuKDApOworCQl9CisKKwlyZXN1bHQgPSBwcmlzbTJtaWJfdWludDMyKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOworCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9vcGVyYXRpb25hbHJhdGVzZXQKKyoKKyogR2V0L3NldCB0aGUgb3BlcmF0aW9uYWwgcmF0ZSBzZXQuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9vcGVyYXRpb25hbHJhdGVzZXQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSBkYXRhOworCVVJTlQ4ICAgICAgICAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgICAgICAgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOworCQlwcmlzbTJtZ210X2dldF9vcHJhdGVzZXQod29yZGJ1ZiwgcHN0cik7CisJfSBlbHNlIHsKKwkJcHJpc20ybWdtdF9zZXRfb3ByYXRlc2V0KHdvcmRidWYsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMsICp3b3JkYnVmKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2dyb3VwYWRkcmVzcworKgorKiBHZXQvc2V0IHRoZSBkb3QxMUdyb3VwQWRkcmVzc2VzVGFibGUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgZGF0YTsKKwlVSU5UOCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICAgICAgICBsZW47CisKKwlEQkZFTlRFUjsKKworCS8qIFRPRE86IGZpeCB0aGlzLiAgZi93IGRvZXNuJ3Qgc3VwcG9ydCBtY2FzdCBmaWx0ZXJzICovCisKKwlpZiAoaXNnZXQpIHsKKwkJcHJpc20ybWdtdF9nZXRfZ3JwYWRkcihtaWItPmRpZCwgcHN0ciwgaHcpOworCQlyZXR1cm4oMCk7CisJfQorCisJcmVzdWx0ID0gcHJpc20ybWdtdF9zZXRfZ3JwYWRkcihtaWItPmRpZCwgYnl0ZWJ1ZiwgcHN0ciwgaHcpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlyZXR1cm4ocmVzdWx0KTsKKwl9CisKKwlpZiAoaHctPmRvdDExX2dycGNudCA8PSBNQVhfUFJJU00yX0dSUF9BRERSKSB7CisJCWxlbiA9IGh3LT5kb3QxMV9ncnBjbnQgKiBXTEFOX0FERFJfTEVOOworCQltZW1jcHkoYnl0ZWJ1ZiwgaHctPmRvdDExX2dycF9hZGRyWzBdLCBsZW4pOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9HUk9VUEFERFIsIGJ5dGVidWYsIGxlbik7CisKKwkJLyoKKwkJKiogVHVybiBvZmYgcHJvbWlzY3VvdXMgbW9kZSBpZiBjb3VudCBpcyBlcXVhbCB0byBNQVguICBXZSBtYXkKKwkJKiogaGF2ZSBiZWVuIGF0IGEgaGlnaGVyIGNvdW50IGluIHByb21pc2N1b3VzIG1vZGUgYW5kIG5lZWQgdG8KKwkJKiogdHVybiBpdCBvZmYuCisJCSovCisKKwkJLyogYnV0IG9ubHkgaWYgd2UncmUgbm90IGFscmVhZHkgaW4gcHJvbWlzYyBtb2RlLiA6KSAqLworCQlpZiAoKGh3LT5kb3QxMV9ncnBjbnQgPT0gTUFYX1BSSVNNMl9HUlBfQUREUikgJiYKKwkJICAgICEoIHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpIHsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQkJICAgICBIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwgMCk7CisJCX0KKwl9IGVsc2UgeworCisJCS8qCisJCSoqIENsZWFyIGdyb3VwIGFkZHJlc3NlcyBpbiBjYXJkIGFuZCBzZXQgdG8gcHJvbWlzY3VvdXMgbW9kZS4KKwkJKi8KKworCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgc2l6ZW9mKGJ5dGVidWYpKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfR1JPVVBBRERSLAorCQkJCQkJYnl0ZWJ1ZiwgMCk7CisJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCQlIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwgMSk7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2Z3aWQKKyoKKyogR2V0IHRoZSBmaXJtd2FyZSBJRC4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9md2lkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSBkYXRhOworCWhmYTM4NHhfRldJRF90ICBmd2lkOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfRldJRCwKKwkJCQkJCSZmd2lkLCBIRkEzODR4X1JJRF9GV0lEX0xFTik7CisJCWlmIChtaWItPmRpZCA9PSBESURtaWJfcDJfcDJOSUNfcDJQcmltYXJ5RldJRCkgeworCQkJZndpZC5wcmltYXJ5W0hGQTM4NHhfRldJRF9MRU4gLSAxXSA9ICdcMCc7CisJCQlwc3RyLT5sZW4gPSBzdHJsZW4oZndpZC5wcmltYXJ5KTsKKwkJCW1lbWNweShwc3RyLT5kYXRhLCBmd2lkLnByaW1hcnksIHBzdHItPmxlbik7CisJCX0gZWxzZSB7CisJCQlmd2lkLnNlY29uZGFyeVtIRkEzODR4X0ZXSURfTEVOIC0gMV0gPSAnXDAnOworCQkJcHN0ci0+bGVuID0gc3RybGVuKGZ3aWQuc2Vjb25kYXJ5KTsKKwkJCW1lbWNweShwc3RyLT5kYXRhLCBmd2lkLnNlY29uZGFyeSwgcHN0ci0+bGVuKTsKKwkJfQorCX0gZWxzZQorCQlyZXN1bHQgPSAwOyAgICAgLyogU2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfYXV0aGFsZworKgorKiBHZXQgdmFsdWVzIGZyb20gdGhlIEF1aHRlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFRhYmxlIGluZGV4ICgxLTYpLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2F1dGhhbGcoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKworCURCRkVOVEVSOworCisJLyogTVNNOiBwa3ggc3VwcGxpZWQgY29kZSB0aGF0ICBjb2RlIHF1ZXJpZXMgUklEIEZENEQuLi4uYnV0IHRoZSBmL3cncworICAgICAgICAgKiAgcmVzdWx0cyBhcmUgYm9ndXMuIFRoZXJlZm9yZSwgd2UgaGF2ZSB0byBzaW11bGF0ZSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICogIHJlc3VsdHMgaGVyZSBpbiB0aGUgZHJpdmVyIGJhc2VkIG9uIG91ciBrbm93bGVkZ2Ugb2YgZXhpc3RpbmcgTUFDCisgICAgICAgICAqICBmZWF0dXJlcy4gIFRoYXQncyB0aGUgd2hvbGUgcG9pbnQgYmVoaW5kIHRoaXMgdWdseSBmdW5jdGlvbi4KKyAgICAgICAgICovCisKKwlpZiAoaXNnZXQpIHsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJc3dpdGNoIChtaWItPnBhcm0xKSB7CisJCQljYXNlIDE6IC8qIE9wZW4gU3lzdGVtICovCisJCQkJKnVpbnQzMiA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOworCQkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiBTaGFyZWRLZXkgKi8KKwkJCQkqdWludDMyID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJKnVpbnQzMiA9IDA7CisJCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJCQlicmVhazsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2F1dGhhbGdlbmFibGUKKyoKKyogR2V0L3NldCB0aGUgZW5hYmxlIHZhbHVlcyBmcm9tIHRoZSBBdWh0ZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBUYWJsZSBpbmRleCAoMS02KS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisKKwlpbnQgICAgIGluZGV4OworCVVJTlQxNiAgY25mX2F1dGg7CisJVUlOVDE2CW1hc2s7CisKKwlEQkZFTlRFUjsKKworCWluZGV4ID0gbWliLT5wYXJtMSAtIDE7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoIGh3LAorCQkJSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sICZjbmZfYXV0aCk7CisJV0xBTl9MT0dfREVCVUcoMiwiY25mQXV0aGVudGljYXRpb24wPSVkLCBpbmRleD0lZFxuIiwgY25mX2F1dGgsIGluZGV4KTsKKworCWlmIChpc2dldCkgeworCQlpZiAoIGluZGV4ID09IDAgfHwgaW5kZXggPT0gMSApIHsKKwkJCSp1aW50MzIgPSAoY25mX2F1dGggJiAoMTw8aW5kZXgpKSA/CisJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJKnVpbnQzMiA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCBpbmRleCA9PSAwIHx8IGluZGV4ID09IDEgKSB7CisJCQltYXNrID0gMSA8PCBpbmRleDsKKwkJCWlmICgqdWludDMyPT1QODAyMTFFTlVNX3RydXRoX3RydWUgKSB7CisJCQkJY25mX2F1dGggfD0gbWFzazsKKwkJCX0gZWxzZSB7CisJCQkJY25mX2F1dGggJj0gfm1hc2s7CisJCQl9CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoIGh3LAorCQkJCQlIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTiwgY25mX2F1dGgpOworCQkJV0xBTl9MT0dfREVCVUcoMiwiY25mQXV0aGVudGljYXRpb246PSVkXG4iLCBjbmZfYXV0aCk7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLCJVbmFibGUgdG8gc2V0IHAyY25mQXV0aGVudGljYXRpb24gdG8gJWRcbiIsIGNuZl9hdXRoKTsKKwkJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJfQorCQl9IGVsc2UgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdgorKgorKiBHZXQvc2V0IHZhbHVlcyBpbiB0aGUgInByaXYiIGRhdGEgc3RydWN0dXJlLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlVSU5UMzIgICAgICAgICAgICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJcDgwMjExcHN0cmRfdCAgICAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJcDgwMjExbWFjYXJyYXlfdCAgKm1hY2FycmF5ID0gKHA4MDIxMW1hY2FycmF5X3QgKikgZGF0YTsKKworCWludCAgaSwgY250LCByZXN1bHQsIGRvbmU7CisKKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCAgb2xkOworCisJLyoKKwkqKiAidGVzdCIgaXMgYSBsb3QgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5IGJ1dCB3aG8gY2FyZXM/ICAuLi5hcyBsb25nIGFzCisJKiogaXQgaXMgbG9uZyBlbm91Z2ghCisJKi8KKworCVVJTlQ4ICB0ZXN0W3NpemVvZih3bGFuZGV2LT5yeCkgKyBzaXplb2YoaHctPnRhbGxpZXMpXTsKKworCURCRkVOVEVSOworCisJc3dpdGNoIChtaWItPmRpZCkgeworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJSZWNlaXZlZEZyYW1lU3RhdGlzdGljczoKKworCQkvKgorCQkqKiBOb3RlOiBUaGUgdmFsdWVzIGluIHRoaXMgcmVjb3JkIGFyZSBjaGFuZ2VkIGJ5IHRoZQorCQkqKiBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBndWFyYW50ZWVkCisJCSoqIHRvIGJlIHN0YWJsZSB3aGlsZSB0aGV5IGFyZSBiZWluZyBjb3BpZWQuICBIb3dldmVyLAorCQkqKiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCB0YWtlIHByaW9yaXR5IG92ZXIgdGhpcworCQkqKiBjb2RlLiAgSGVuY2UsIGlmIHRoZSBzYW1lIHZhbHVlcyBhcmUgY29waWVkIHR3aWNlLAorCQkqKiB0aGVuIHdlIGFyZSBlbnN1cmVkIHRoYXQgdGhlIHZhbHVlcyBoYXZlIG5vdCBiZWVuCisJCSoqIGNoYW5nZWQuICBJZiB0aGV5IGhhdmUsIHRoZW4ganVzdCB0cnkgYWdhaW4uICBEb24ndAorCQkqKiB0cnkgbW9yZSB0aGFuIDEwIHRpbWVzLi4uaWYgd2Ugc3RpbGwgaGF2ZW4ndCBnb3QgaXQsCisJCSoqIHRoZW4gdGhlIHZhbHVlcyB3ZSBkbyBoYXZlIGFyZSBwcm9iYWJseSBnb29kIGVub3VnaC4KKwkJKiogVGhpcyBzY2hlbWUgZm9yIGNvcHlpbmcgdmFsdWVzIGlzIHVzZWQgaW4gb3JkZXIgdG8KKwkJKiogcHJldmVudCBoYXZpbmcgdG8gYmxvY2sgdGhlIGludGVycnVwdCBoYW5kbGVyIHdoaWxlCisJCSoqIHdlIGNvcHkgdGhlIHZhbHVlcy4KKwkJKi8KKworCQlpZiAoaXNnZXQpCisJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJCW1lbWNweShkYXRhLCAmd2xhbmRldi0+cngsIHNpemVvZih3bGFuZGV2LT5yeCkpOworCQkJCW1lbWNweSh0ZXN0LCAmd2xhbmRldi0+cngsIHNpemVvZih3bGFuZGV2LT5yeCkpOworCQkJCWlmIChtZW1jbXAoZGF0YSwgdGVzdCwgc2l6ZW9mKHdsYW5kZXYtPnJ4KSkgPT0gMCkgYnJlYWs7CisJCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQ29tbXVuaWNhdGlvblRhbGxpZXM6CisKKwkJLyoKKwkJKiogTm90ZTogVGhlIHZhbHVlcyBpbiB0aGlzIHJlY29yZCBhcmUgY2hhbmdlZCBieSB0aGUKKwkJKiogaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgZ3VhcmFudGVlZAorCQkqKiB0byBiZSBzdGFibGUgd2hpbGUgdGhleSBhcmUgYmVpbmcgY29waWVkLiAgU2VlIHRoZQorCQkqKiBub3RlIGFib3ZlIGFib3V0IGNvcHlpbmcgdmFsdWVzLgorCQkqLworCisJCWlmIChpc2dldCkgeworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKGh3KTsKKworCQkJLyogPz8/Pz8/IFdlIG5lZWQgdG8gd2FpdCBhIGJpdCBoZXJlIGZvciB0aGUgKi8KKwkJCS8qICAgdGFsbGllcyB0byBnZXQgdXBkYXRlZC4gPz8/Pz8/ICovCisJCQkvKiBNU006IFRPRE86IFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyBpcyB0bworCQkJICogICAgICBhZGQgYSAiY29tbXRhbGxpZSIgd2FpdCBxdWV1ZSB0byB0aGUKKwkJCSAqICAgICAgcHJpdiBzdHJ1Y3R1cmUgdGhhdCBnZXRzIHJ1biBldmVyeSB0aW1lCisJCQkgKiAgICAgIHdlIHJlY2VpdmUgYSBjb21tdGFsbHkgaW5mbyBmcmFtZS4KKwkJCSAqICAgICAgVGhpcyBwcm9jZXNzIHdvdWxkIHNsZWVwIG9uIHRoYXQKKwkJCSAqICAgICAgcXVldWUgYW5kIGdldCBhd2FrZW5lZCB3aGVuIHRoZQorCQkJICogICAgICB0aGUgcmVxdWVzdGVkIGluZm8gZnJhbWUgYXJyaXZlcy4KKwkJCSAqICAgICAgRG9uJ3QgaGF2ZSB0aW1lIHRvIGRvIGFuZCB0ZXN0IHRoaXMKKwkJCSAqICAgICAgcmlnaHQgbm93LgorCQkJICovCisKKwkJCS8qIFVnaCwgdGhpcyBpcyBuYXN0eS4gKi8KKwkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJbWVtY3B5KGRhdGEsCisJCQkJICAgICAgICZody0+dGFsbGllcywKKwkJCQkgICAgICAgc2l6ZW9mKGh3LT50YWxsaWVzKSk7CisJCQkJbWVtY3B5KHRlc3QsCisJCQkJICAgICAgICZody0+dGFsbGllcywKKwkJCQkgICAgICAgc2l6ZW9mKGh3LT50YWxsaWVzKSk7CisJCQkJaWYgKCBtZW1jbXAoZGF0YSwKKwkJCQkJICAgIHRlc3QsCisJCQkJCSAgICBzaXplb2YoaHctPnRhbGxpZXMpKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkF1dGhlbnRpY2F0ZWQ6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQlwcmlzbTJtaWJfcHJpdl9hdXRobGlzdChodywgJm9sZCk7CisKKwkJCW1hY2FycmF5LT5jbnQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IG9sZC5jbnQ7IGkrKykgeworCQkJCWlmICghb2xkLmFzc29jW2ldKSB7CisJCQkJCW1lbWNweShtYWNhcnJheS0+ZGF0YVttYWNhcnJheS0+Y250XSwgb2xkLmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pOworCQkJCQltYWNhcnJheS0+Y250Kys7CisJCQkJfQorCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQXNzb2NpYXRlZDoKKworCQlpZiAoaXNnZXQpIHsKKwkJCXByaXNtMm1pYl9wcml2X2F1dGhsaXN0KGh3LCAmb2xkKTsKKworCQkJbWFjYXJyYXktPmNudCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgb2xkLmNudDsgaSsrKSB7CisJCQkJaWYgKG9sZC5hc3NvY1tpXSkgeworCQkJCQltZW1jcHkobWFjYXJyYXktPmRhdGFbbWFjYXJyYXktPmNudF0sIG9sZC5hZGRyW2ldLCBXTEFOX0FERFJfTEVOKTsKKwkJCQkJbWFjYXJyYXktPmNudCsrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMlBvd2VyU2F2ZVVzZXJDb3VudDoKKworCQlpZiAoaXNnZXQpCisJCQkqdWludDMyID0gaHctPnBzdXNlcmNvdW50OworCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW1lbnQ6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQlwc3RyLT5sZW4gPSBzdHJsZW4oaHctPmNvbW1lbnQpOworCQkJbWVtY3B5KHBzdHItPmRhdGEsIGh3LT5jb21tZW50LCBwc3RyLT5sZW4pOworCQl9IGVsc2UgeworCQkJY250ID0gcHN0ci0+bGVuOworCQkJaWYgKGNudCA8IDApIGNudCA9IDA7CisJCQlpZiAoY250ID49IHNpemVvZihody0+Y29tbWVudCkpCisJCQkJY250ID0gc2l6ZW9mKGh3LT5jb21tZW50KS0xOworCQkJbWVtY3B5KGh3LT5jb21tZW50LCBwc3RyLT5kYXRhLCBjbnQpOworCQkJcHN0ci0+ZGF0YVtjbnRdID0gJ1wwJzsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc01vZGU6CisKKwkJaWYgKGlzZ2V0KQorCQkJKnVpbnQzMiA9IGh3LT5hY2Nlc3Ntb2RlOworCQllbHNlCisJCQlwcmlzbTJtaWJfcHJpdl9hY2Nlc3Ntb2RlKGh3LCAqdWludDMyKTsKKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NBbGxvdzoKKworCQlpZiAoaXNnZXQpIHsKKwkJCW1hY2FycmF5LT5jbnQgPSBody0+YWxsb3cuY250OworCQkJbWVtY3B5KG1hY2FycmF5LT5kYXRhLCBody0+YWxsb3cuYWRkciwKKwkJCSAgICAgICBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCQl9IGVsc2UgeworCQkJcHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3coaHcsIG1hY2FycmF5KTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0Rlbnk6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQltYWNhcnJheS0+Y250ID0gaHctPmRlbnkuY250OworCQkJbWVtY3B5KG1hY2FycmF5LT5kYXRhLCBody0+ZGVueS5hZGRyLAorCQkJICAgICAgIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisJCX0gZWxzZSB7CisJCQlwcmlzbTJtaWJfcHJpdl9hY2Nlc3NkZW55KGh3LCBtYWNhcnJheSk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJDaGFubmVsSW5mb1Jlc3VsdHM6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQlkb25lID0gYXRvbWljX3JlYWQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSk7CisJCQlpZiAoZG9uZSA9PSAwKSB7CisJCQkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZG9uZSA9PSAxKSB7CisJCQkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW5jb21wbGV0ZV9pdGVtZGF0YTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZm9yIChpID0gMDsgaSA8IDE0OyBpKyssIHVpbnQzMiArPSA1KSB7CisJCQkJdWludDMyWzBdID0gaSsxOworCQkJCXVpbnQzMlsxXSA9IGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbaV0uYW5sOworCQkJCXVpbnQzMlsyXSA9IGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbaV0ucG5sOworCQkJCXVpbnQzMlszXSA9IChody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2ldLmFjdGl2ZSAmIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRSkgPyAxIDogMDsKKwkJCQl1aW50MzJbNF0gPSAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtpXS5hY3RpdmUgJiBIRkEzODR4X0NISU5GT1JFU1VMVF9QQ0ZBQ1RJVkUpID8gMSA6IDA7CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRGVzaXJlZEJTU1R5cGU6CisKKwkJaWYgKGlzZ2V0KQorCQkJKnVpbnQzMiA9IGh3LT5kb3QxMV9kZXNpcmVkX2Jzc190eXBlOworCQllbHNlCisJCQlody0+ZG90MTFfZGVzaXJlZF9ic3NfdHlwZSA9ICp1aW50MzI7CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGVfbG54UlNOQUlFOiB7CisJCWhmYTM4NHhfV1BBRGF0YV90IHdwYTsKKwkJaWYgKGlzZ2V0KSB7CisJCQloZmEzODR4X2RydnJfZ2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKKwkJCQkJCShVSU5UOCAqKSAmd3BhLCBzaXplb2Yod3BhKSk7CisJCQlwc3RyLT5sZW4gPSBoZmEzODR4Mmhvc3RfMTYod3BhLmRhdGFsZW4pOworCQkJbWVtY3B5KHBzdHItPmRhdGEsIHdwYS5kYXRhLCBwc3RyLT5sZW4pOworCQl9IGVsc2UgeworCQkJd3BhLmRhdGFsZW4gPSBob3N0MmhmYTM4NHhfMTYocHN0ci0+bGVuKTsKKwkJCW1lbWNweSh3cGEuZGF0YSwgcHN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKKworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKKwkJCQkoVUlOVDggKikgJndwYSwgc2l6ZW9mKHdwYSkpOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlXTEFOX0xPR19FUlJPUigiVW5oYW5kbGVkIERJRCAweCUwOHhcbiIsIG1pYi0+ZGlkKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybigwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2X2F1dGhsaXN0CisqCisqIEdldCBhIGNvcHkgb2YgdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBsaXN0ICAgICBMaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hdXRobGlzdCgKK2hmYTM4NHhfdCAgICAgICAgICAgICAqaHcsCitwcmlzbTJzdGFfYXV0aGxpc3RfdCAgKmxpc3QpCit7CisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIHRlc3Q7CisJaW50ICAgICAgICAgICAgICAgICAgIGk7CisKKwlEQkZFTlRFUjsKKworCS8qCisJKiogTm90ZTogVGhlIHZhbHVlcyBpbiB0aGlzIHJlY29yZCBhcmUgY2hhbmdlZCBieSB0aGUgaW50ZXJydXB0CisJKiogaGFuZGxlciBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZSB3aGlsZQorCSoqIHRoZXkgYXJlIGJlaW5nIGNvcGllZC4gIEhvd2V2ZXIsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsCisJKiogdGFrZSBwcmlvcml0eSBvdmVyIHRoaXMgY29kZS4gIEhlbmNlLCBpZiB0aGUgc2FtZSB2YWx1ZXMgYXJlCisJKiogY29waWVkIHR3aWNlLCB0aGVuIHdlIGFyZSBlbnN1cmVkIHRoYXQgdGhlIHZhbHVlcyBoYXZlIG5vdAorCSoqIGJlZW4gY2hhbmdlZC4gIElmIHRoZXkgaGF2ZSwgdGhlbiBqdXN0IHRyeSBhZ2Fpbi4gIERvbid0IHRyeQorCSoqIG1vcmUgdGhhbiAxMCB0aW1lcy4uLnRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMgaXMKKwkqKiB1bmxpa2VseSB0byBiZSBjaGFuZ2luZyBmcmVxdWVudGx5IGVub3VnaCB0aGF0IHdlIGNhbid0IGdldAorCSoqIGEgc25hcHNob3QgaW4gMTAgdHJpZXMuICBEb24ndCB0cnkgbW9yZSB0aGFuIHRoaXMgc28gdGhhdCB3ZQorCSoqIGRvbid0IHJpc2sgbG9ja2luZy11cCBmb3IgbG9uZyBwZXJpb2RzIG9mIHRpbWUuICBJZiB3ZSBzdGlsbAorCSoqIGhhdmVuJ3QgZ290IHRoZSBzbmFwc2hvdCwgdGhlbiBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlIGFuZAorCSoqIHJldHVybiBhbiBlbXB0eSBsaXN0IChzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHZhbGlkIGxpc3QgdGhhdAorCSoqIHdlIGNhbiBndWFyZW50ZWUpLiAgVGhpcyBzY2hlbWUgZm9yIGNvcHlpbmcgdmFsdWVzIGlzIHVzZWQgaW4KKwkqKiBvcmRlciB0byBwcmV2ZW50IGhhdmluZyB0byBibG9jayB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2hpbGUKKwkqKiB3ZSBjb3B5IHRoZSB2YWx1ZXMuCisJKi8KKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCW1lbWNweShsaXN0LCAmaHctPmF1dGhsaXN0LCBzaXplb2YocHJpc20yc3RhX2F1dGhsaXN0X3QpKTsKKwkJbWVtY3B5KCZ0ZXN0LCAmaHctPmF1dGhsaXN0LCBzaXplb2YocHJpc20yc3RhX2F1dGhsaXN0X3QpKTsKKwkJaWYgKG1lbWNtcChsaXN0LCAmdGVzdCwgc2l6ZW9mKHByaXNtMnN0YV9hdXRobGlzdF90KSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID49IDEwKSB7CisJCWxpc3QtPmNudCA9IDA7CisJCVdMQU5fTE9HX0VSUk9SKCJDb3VsZCBub3Qgb2J0YWluIHNuYXBzaG90IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuXG4iKTsKKwkJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdl9hY2Nlc3Ntb2RlCisqCisqIFNldCB0aGUgQWNjZXNzIE1vZGUuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1vZGUgICAgIE5ldyBhY2Nlc3MgbW9kZS4KKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc21vZGUoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitVSU5UMzIgICAgICAgICAgICBtb2RlKQoreworCXByaXNtMnN0YV9hdXRobGlzdF90ICBvbGQ7CisJaW50ICAgICAgICAgICAgICAgICAgIGksIGosIGRlYXV0aDsKKwlVSU5UOCAgICAgICAgICAgICAgICAgKmFkZHI7CisKKwlEQkZFTlRFUjsKKworCS8qCisJKiogSWYgdGhlIG1vZGUgaXMgbm90IGNoYW5naW5nIG9yIGl0IGlzIGNoYW5naW5nIHRvICJBbGwiLCB0aGVuIGl0J3MKKwkqKiBva2F5IHRvIGdvIGFoZWFkIHdpdGhvdXQgYSBsb3Qgb2YgbWVzc2luZyBhcm91bmQuICBPdGhlcndpc2UsIHRoZQorCSoqIGFjY2VzcyBtb2RlIGlzIGNoYW5naW5nIGluIGEgd2F5IHRoYXQgbWF5IGxlYXZlIHNvbWUgc3RhdGlvbnMKKwkqKiBhdXRoZW50aWNhdGVkIHdoaWNoIHNob3VsZCBub3QgYmUgYXV0aGVudGljYXRlZC4gIEl0IHdpbGwgYmUKKwkqKiBuZWNlc3NhcnkgdG8gZGUtYXV0aGVudGljYXRlIHRoZXNlIHN0YXRpb25zLgorCSovCisKKwlpZiAobW9kZSA9PSBXTEFOX0FDQ0VTU19BTEwgfHwgbW9kZSA9PSBody0+YWNjZXNzbW9kZSkgeworCQlody0+YWNjZXNzbW9kZSA9IG1vZGU7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSoqIFN3aXRjaCB0byB0aGUgbmV3IGFjY2VzcyBtb2RlLiAgT25jZSB0aGlzIGlzIGRvbmUsIHRoZW4gdGhlIGludGVycnVwdAorCSoqIGhhbmRsZXIgKHdoaWNoIHVzZXMgdGhpcyB2YWx1ZSkgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBhdXRoZW50aWNhdGluZworCSoqIEFERElUSU9OQUwgc3RhdGlvbnMgd2hpY2ggc2hvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkLiAgVGhlbiBnZXQgYQorCSoqIGNvcHkgb2YgdGhlIGN1cnJlbnQgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLgorCSovCisKKwlody0+YWNjZXNzbW9kZSA9IG1vZGU7CisKKwlwcmlzbTJtaWJfcHJpdl9hdXRobGlzdChodywgJm9sZCk7CisKKwkvKgorCSoqIE5vdyBnbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHByZXZpb3VzbHkgYXV0aGVudGljYXRlZCBzdGF0aW9ucyAoc29tZQorCSoqIG9mIHdoaWNoIG1pZ2h0IGRlLWF1dGhlbnRpY2F0ZSB0aGVtc2VsdmVzIHdoaWxlIHdlIGFyZSBwcm9jZXNzaW5nIGl0CisJKiogYnV0IHRoYXQgaXMgb2theSkuICBBbnkgc3RhdGlvbiB3aGljaCBubyBsb25nZXIgbWF0Y2hlcyB0aGUgYWNjZXNzCisJKiogbW9kZSwgbXVzdCBiZSBkZS1hdXRoZW50aWNhdGVkLgorCSovCisKKwlmb3IgKGkgPSAwOyBpIDwgb2xkLmNudDsgaSsrKSB7CisJCWFkZHIgPSBvbGQuYWRkcltpXTsKKworCQlpZiAobW9kZSA9PSBXTEFOX0FDQ0VTU19OT05FKQorCQkJZGVhdXRoID0gMTsKKwkJZWxzZSB7CisJCQlpZiAobW9kZSA9PSBXTEFOX0FDQ0VTU19BTExPVykgeworCQkJCWZvciAoaiA9IDA7IGogPCBody0+YWxsb3cuY250OyBqKyspCisJCQkJCWlmIChtZW1jbXAoYWRkciwgaHctPmFsbG93LmFkZHJbal0sCisJCQkJCQkJV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCWRlYXV0aCA9IChqID49IGh3LT5hbGxvdy5jbnQpOworCQkJfSBlbHNlIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgaHctPmRlbnkuY250OyBqKyspCisJCQkJCWlmIChtZW1jbXAoYWRkciwgaHctPmRlbnkuYWRkcltqXSwKKwkJCQkJCQlXTEFOX0FERFJfTEVOKSA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJZGVhdXRoID0gKGogPCBody0+ZGVueS5jbnQpOworCQkJfQorCQl9CisKKwkJaWYgKGRlYXV0aCkgcHJpc20ybWliX3ByaXZfZGVhdXRoZW50aWNhdGUoaHcsIGFkZHIpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3cKKyoKKyogQ2hhbmdlIHRoZSBsaXN0IG9mIGFsbG93ZWQgTUFDIGFkZHJlc3Nlcy4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBwcml2ICAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtYWNhcnJheSAgTmV3IGFycmF5IG9mIE1BQyBhZGRyZXNzZXMuCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygKK2hmYTM4NHhfdCAgICAgICAgICpodywKK3A4MDIxMW1hY2FycmF5X3QgICptYWNhcnJheSkKK3sKKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCAgb2xkOworCWludCAgICAgICAgICAgICAgICAgICBpLCBqOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIENoYW5nZSB0aGUgYWNjZXNzIGxpc3QuICBOb3RlIHRoYXQgdGhlIGludGVycnVwdCBoYW5kbGVyIG1heSBiZSBpbgorCSoqIHRoZSBtaWRkbGUgb2YgdXNpbmcgdGhlIGFjY2VzcyBsaXN0ISEhICBTaW5jZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKwkqKiB3aWxsCWFsd2F5cyBoYXZlIHByaW9yaXR5IG92ZXIgdGhpcyBwcm9jZXNzIGFuZCB0aGlzIGlzIHRoZSBvbmx5CisJKiogcHJvY2VzcyB0aGF0IHdpbGwgbW9kaWZ5IHRoZSBsaXN0LCB0aGlzIHByb2JsZW0gY2FuIGJlIGhhbmRsZWQgYXMKKwkqKiBmb2xsb3dzOgorCSoqCisJKiogICAgMS4gU2V0IHRoZSAibW9kaWZ5IiBmbGFnLgorCSoqICAgIDIuIENoYW5nZSB0aGUgZmlyc3QgY29weSBvZiB0aGUgbGlzdC4KKwkqKiAgICAzLiBDbGVhciB0aGUgIm1vZGlmeSIgZmxhZy4KKwkqKiAgICA0LiBDaGFuZ2UgdGhlIGJhY2t1cCBjb3B5IG9mIHRoZSBsaXN0LgorCSoqCisJKiogVGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgY2hlY2sgdGhlICJtb2RpZnkiIGZsYWcuICBJZiBOT1Qgc2V0LCB0aGVuCisJKiogdGhlIGZpcnN0IGNvcHkgb2YgdGhlIGxpc3QgaXMgdmFsaWQgYW5kIG1heSBiZSB1c2VkLiAgT3RoZXJ3aXNlLCB0aGUKKwkqKiBmaXJzdCBjb3B5IGlzIGJlaW5nIGNoYW5nZWQgYnV0IHRoZSBiYWNrdXAgY29weSBpcyB2YWxpZCBhbmQgbWF5IGJlCisJKiogdXNlZC4gIERvaW5nIHRoaW5ncyB0aGlzIHdheSBwcmV2ZW50cyBoYXZpbmcgdG8gaGF2ZSB0aGUgaW50ZXJydXB0CisJKiogaGFuZGxlciBibG9jayB3aGlsZSB0aGUgbGlzdCBpcyBiZWluZyB1cGRhdGVkLgorCSovCisKKwlody0+YWxsb3cubW9kaWZ5ID0gMTsKKworCWh3LT5hbGxvdy5jbnQgPSBtYWNhcnJheS0+Y250OworCW1lbWNweShody0+YWxsb3cuYWRkciwgbWFjYXJyYXktPmRhdGEsIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisKKwlody0+YWxsb3cubW9kaWZ5ID0gMDsKKworCWh3LT5hbGxvdy5jbnQxID0gbWFjYXJyYXktPmNudDsKKwltZW1jcHkoaHctPmFsbG93LmFkZHIxLCBtYWNhcnJheS0+ZGF0YSwgbWFjYXJyYXktPmNudCpXTEFOX0FERFJfTEVOKTsKKworCS8qCisJKiogSWYgdGhlIGN1cnJlbnQgYWNjZXNzIG1vZGUgaXMgIkFsbG93IiwgdGhlbiBjaGFuZ2luZyB0aGUgYWNjZXNzCisJKiogbGlzdCBtYXkgbGVhdmUgc29tZSBzdGF0aW9ucyBhdXRoZW50aWNhdGVkIHdoaWNoIHNob3VsZCBub3QgYmUKKwkqKiBhdXRoZW50aWNhdGVkLiAgSXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gZGUtYXV0aGVudGljYXRlIHRoZXNlCisJKiogc3RhdGlvbnMuICBPdGhlcndpc2UsIHRoZSBsaXN0IGNhbiBiZSBjaGFuZ2VkIHdpdGhvdXQgYSBsb3Qgb2YgZnVzcy4KKwkqLworCisJaWYgKGh3LT5hY2Nlc3Ntb2RlID09IFdMQU5fQUNDRVNTX0FMTE9XKSB7CisKKwkJLyoKKwkJKiogR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zIChzb21lIG9mCisJCSoqIHdoaWNoIG1pZ2h0IGRlLWF1dGhlbnRpY2F0ZSB0aGVtc2VsdmVzIHdoaWxlIHdlIGFyZQorCQkqKiBwcm9jZXNzaW5nIGl0IGJ1dCB0aGF0IGlzIG9rYXkpLiAgQW55IHN0YXRpb24gd2hpY2ggaXMKKwkJKiogbm8gbG9uZ2VyIGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgc3RhdGlvbnMsIG11c3QgYmUKKwkJKiogZGUtYXV0aGVudGljYXRlZC4KKwkJKi8KKworCQlwcmlzbTJtaWJfcHJpdl9hdXRobGlzdChodywgJm9sZCk7CisKKwkJZm9yIChpID0gMDsgaSA8IG9sZC5jbnQ7IGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IGh3LT5hbGxvdy5jbnQ7IGorKykKKwkJCQlpZiAobWVtY21wKG9sZC5hZGRyW2ldLCBody0+YWxsb3cuYWRkcltqXSwKKwkJCQkJCQlXTEFOX0FERFJfTEVOKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCWlmIChqID49IGh3LT5hbGxvdy5jbnQpCisJCQkJcHJpc20ybWliX3ByaXZfZGVhdXRoZW50aWNhdGUoaHcsIG9sZC5hZGRyW2ldKTsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZfYWNjZXNzZGVueQorKgorKiBDaGFuZ2UgdGhlIGxpc3Qgb2YgZGVuaWVkIE1BQyBhZGRyZXNzZXMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgcHJpdiAgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbWFjYXJyYXkgIE5ldyBhcnJheSBvZiBNQUMgYWRkcmVzc2VzLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzZGVueSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK3A4MDIxMW1hY2FycmF5X3QgICptYWNhcnJheSkKK3sKKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCAgb2xkOworCWludCAgICAgICAgICAgICAgICAgICBpLCBqOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIENoYW5nZSB0aGUgYWNjZXNzIGxpc3QuICBOb3RlIHRoYXQgdGhlIGludGVycnVwdCBoYW5kbGVyIG1heSBiZSBpbgorCSoqIHRoZSBtaWRkbGUgb2YgdXNpbmcgdGhlIGFjY2VzcyBsaXN0ISEhICBTaW5jZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKwkqKiB3aWxsIGFsd2F5cyBoYXZlIHByaW9yaXR5IG92ZXIgdGhpcyBwcm9jZXNzIGFuZCB0aGlzIGlzIHRoZSBvbmx5CisJKiogcHJvY2VzcyB0aGF0IHdpbGwgbW9kaWZ5IHRoZSBsaXN0LCB0aGlzIHByb2JsZW0gY2FuIGJlIGhhbmRsZWQgYXMKKwkqKiBmb2xsb3dzOgorCSoqCisJKiogICAgMS4gU2V0IHRoZSAibW9kaWZ5IiBmbGFnLgorCSoqICAgIDIuIENoYW5nZSB0aGUgZmlyc3QgY29weSBvZiB0aGUgbGlzdC4KKwkqKiAgICAzLiBDbGVhciB0aGUgIm1vZGlmeSIgZmxhZy4KKwkqKiAgICA0LiBDaGFuZ2UgdGhlIGJhY2t1cCBjb3B5IG9mIHRoZSBsaXN0LgorCSoqCisJKiogVGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgY2hlY2sgdGhlICJtb2RpZnkiIGZsYWcuICBJZiBOT1Qgc2V0LCB0aGVuCisJKiogdGhlIGZpcnN0IGNvcHkgb2YgdGhlIGxpc3QgaXMgdmFsaWQgYW5kIG1heSBiZSB1c2VkLiAgT3RoZXJ3aXNlLCB0aGUKKwkqKiBmaXJzdCBjb3B5IGlzIGJlaW5nIGNoYW5nZWQgYnV0IHRoZSBiYWNrdXAgY29weSBpcyB2YWxpZCBhbmQgbWF5IGJlCisJKiogdXNlZC4gIERvaW5nIHRoaW5ncyB0aGlzIHdheSBwcmV2ZW50cyBoYXZpbmcgdG8gaGF2ZSB0aGUgaW50ZXJydXB0CisJKiogaGFuZGxlciBibG9jayB3aGlsZSB0aGUgbGlzdCBpcyBiZWluZyB1cGRhdGVkLgorCSovCisKKwlody0+ZGVueS5tb2RpZnkgPSAxOworCisJaHctPmRlbnkuY250ID0gbWFjYXJyYXktPmNudDsKKwltZW1jcHkoaHctPmRlbnkuYWRkciwgbWFjYXJyYXktPmRhdGEsIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisKKwlody0+ZGVueS5tb2RpZnkgPSAwOworCisJaHctPmRlbnkuY250MSA9IG1hY2FycmF5LT5jbnQ7CisJbWVtY3B5KGh3LT5kZW55LmFkZHIxLCBtYWNhcnJheS0+ZGF0YSwgbWFjYXJyYXktPmNudCpXTEFOX0FERFJfTEVOKTsKKworCS8qCisJKiogSWYgdGhlIGN1cnJlbnQgYWNjZXNzIG1vZGUgaXMgIkRlbnkiLCB0aGVuIGNoYW5naW5nIHRoZSBhY2Nlc3MKKwkqKiBsaXN0IG1heSBsZWF2ZSBzb21lIHN0YXRpb25zIGF1dGhlbnRpY2F0ZWQgd2hpY2ggc2hvdWxkIG5vdCBiZQorCSoqIGF1dGhlbnRpY2F0ZWQuICBJdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byBkZS1hdXRoZW50aWNhdGUgdGhlc2UKKwkqKiBzdGF0aW9ucy4gIE90aGVyd2lzZSwgdGhlIGxpc3QgY2FuIGJlIGNoYW5nZWQgd2l0aG91dCBhIGxvdCBvZiBmdXNzLgorCSovCisKKwlpZiAoaHctPmFjY2Vzc21vZGUgPT0gV0xBTl9BQ0NFU1NfREVOWSkgeworCisJCS8qCisJCSoqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucyAoc29tZSBvZgorCQkqKiB3aGljaCBtaWdodCBkZS1hdXRoZW50aWNhdGUgdGhlbXNlbHZlcyB3aGlsZSB3ZSBhcmUKKwkJKiogcHJvY2Vzc2luZyBpdCBidXQgdGhhdCBpcyBva2F5KS4gIEFueSBzdGF0aW9uIHdoaWNoIGlzCisJCSoqIG5vdyBpbiB0aGUgbGlzdCBvZiBkZW5pZWQgc3RhdGlvbnMsIG11c3QgYmUgZGUtYXV0aGVudGljYXRlZC4KKwkJKi8KKworCQlwcmlzbTJtaWJfcHJpdl9hdXRobGlzdChodywgJm9sZCk7CisKKwkJZm9yIChpID0gMDsgaSA8IG9sZC5jbnQ7IGkrKykKKwkJCWZvciAoaiA9IDA7IGogPCBody0+ZGVueS5jbnQ7IGorKykKKwkJCQlpZiAobWVtY21wKG9sZC5hZGRyW2ldLCBody0+ZGVueS5hZGRyW2pdLAorCQkJCQkJCSBXTEFOX0FERFJfTEVOKSA9PSAwKSB7CisJCQkJCXByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlKGh3LCBvbGQuYWRkcltpXSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlCisqCisqIERlLWF1dGhlbnRpY2F0ZSBhIHN0YXRpb24uICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyBhIEhhbmRvdmVyQWRkcmVzcworKiBpbmZvcm1hdGlvbiBmcmFtZSB0byB0aGUgZmlybXdhcmUuICBUaGlzIHNob3VsZCB3b3JrLCBhY2NvcmRpbmcgdG8KKyogSW50ZXJzaWwuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIGFkZHIgICAgIE1BQyBhZGRyZXNzIG9mIHN0YXRpb24gdG8gYmUgZGUtYXV0aGVudGljYXRlZC4KKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlKAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorVUlOVDggICAgICAgICAgICAgKmFkZHIpCit7CisJREJGRU5URVI7CisJaGZhMzg0eF9kcnZyX2hhbmRvdmVyKGh3LCBhZGRyKTsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIKKyoKKyogQ29udmVydCB0aGUgcHN0ciBkYXRhIGluIHRoZSBXTEFOIG1lc3NhZ2Ugc3RydWN0dXJlIGludG8gYW4gaGZhMzg0eAorKiBieXRlIHN0cmluZyBmb3JtYXQuCisqCisqIEFyZ3VtZW50czoKKyoJYnl0ZXN0cgkJaGZhMzg0eCBieXRlIHN0cmluZyBkYXRhIHR5cGUKKyoJcHN0cgkJd2xhbiBtZXNzYWdlIGRhdGEKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCit7CisJREJGRU5URVI7CisKKwlieXRlc3RyLT5sZW4gPSBob3N0MmhmYTM4NHhfMTYoKFVJTlQxNikocHN0ci0+bGVuKSk7CisJbWVtY3B5KGJ5dGVzdHItPmRhdGEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhCisqCisqIENvbnZlcnQgdGhlIHBzdHIgZGF0YSBpbiB0aGUgV0xBTiBtZXNzYWdlIHN0cnVjdHVyZSBpbnRvIGFuIGhmYTM4NHgKKyogYnl0ZSBhcmVhIGZvcm1hdC4KKyoKKyogQXJndW1lbnRzOgorKglieXRlYXJlYQloZmEzODR4IGJ5dGUgYXJlYSBkYXRhIHR5cGUKKyoJcHN0cgkJd2xhbiBtZXNzYWdlIGRhdGEKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKFVJTlQ4ICpieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqcHN0cikKK3sKKwlEQkZFTlRFUjsKKworCW1lbWNweShieXRlYXJlYSwgcHN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2J5dGVzdHIycHN0cgorKgorKiBDb252ZXJ0IHRoZSBkYXRhIGluIGFuIGhmYTM4NHggYnl0ZSBzdHJpbmcgZm9ybWF0IGludG8gYQorKiBwc3RyIGluIHRoZSBXTEFOIG1lc3NhZ2UuCisqCisqIEFyZ3VtZW50czoKKyoJYnl0ZXN0cgkJaGZhMzg0eCBieXRlIHN0cmluZyBkYXRhIHR5cGUKKyoJbXNnCQl3bGFuIG1lc3NhZ2UKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCit7CisJREJGRU5URVI7CisKKwlwc3RyLT5sZW4gPSAoVUlOVDgpKGhmYTM4NHgyaG9zdF8xNigoVUlOVDE2KShieXRlc3RyLT5sZW4pKSk7CisJbWVtY3B5KHBzdHItPmRhdGEsIGJ5dGVzdHItPmRhdGEsIHBzdHItPmxlbik7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyCisqCisqIENvbnZlcnQgdGhlIGRhdGEgaW4gYW4gaGZhMzg0eCBieXRlIGFyZWEgZm9ybWF0IGludG8gYSBwc3RyCisqIGluIHRoZSBXTEFOIG1lc3NhZ2UuCisqCisqIEFyZ3VtZW50czoKKyoJYnl0ZWFyZWEJaGZhMzg0eCBieXRlIGFyZWEgZGF0YSB0eXBlCisqCW1zZwkJd2xhbiBtZXNzYWdlCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cihVSU5UOCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGludCBsZW4pCit7CisJREJGRU5URVI7CisKKwlwc3RyLT5sZW4gPSAoVUlOVDgpbGVuOworCW1lbWNweShwc3RyLT5kYXRhLCBieXRlYXJlYSwgbGVuKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQKKyoKKyogQ29udmVydCBhbiBoZmEzODR4IGludGVnZXIgaW50byBhIHdsYW4gaW50ZWdlcgorKgorKiBBcmd1bWVudHM6CisqCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKKyoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQoVUlOVDE2ICpwcmlzbTJpbnQsIFVJTlQzMiAqd2xhbmludCkKK3sKKwlEQkZFTlRFUjsKKworCSp3bGFuaW50ID0gKFVJTlQzMiloZmEzODR4Mmhvc3RfMTYoKnByaXNtMmludCk7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50CisqCisqIENvbnZlcnQgYSB3bGFuIGludGVnZXIgaW50byBhbiBoZmEzODR4IGludGVnZXIKKyoKKyogQXJndW1lbnRzOgorKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCisqCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KFVJTlQxNiAqcHJpc20yaW50LCBVSU5UMzIgKndsYW5pbnQpCit7CisJREJGRU5URVI7CisKKwkqcHJpc20yaW50ID0gaG9zdDJoZmEzODR4XzE2KChVSU5UMTYpKCp3bGFuaW50KSk7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wcmlzbTJlbnVtMnA4MDIxMWVudW0KKyoKKyogQ29udmVydCB0aGUgaGZhMzg0eCBlbnVtZXJhdGVkIGludCBpbnRvIGEgcDgwMjExIGVudW1lcmF0ZWQgaW50CisqCisqIEFyZ3VtZW50czoKKyoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgorKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCisqCXJpZAkJaGZhMzg0eCByZWNvcmQgaWQKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMm1nbXRfcHJpc20yZW51bTJwODAyMTFlbnVtKFVJTlQxNiAqcHJpc20yZW51bSwgVUlOVDMyICp3bGFuZW51bSwgVUlOVDE2IHJpZCkKK3sKKwlEQkZFTlRFUjsKKworCS8qIEF0IHRoZSBtb21lbnQsIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzbid0CisJcHJlc2VudGVkIGl0c2VsZi4gQWxsIHRoZSB3bGFuIGVudW1lcmF0ZWQgdmFsdWVzIGFyZQorCWEgMS10by0xIG1hdGNoIGFnYWluc3QgdGhlIFByaXNtMiBlbnVtZXJhdGVkIHZhbHVlcyovCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcDgwMjExZW51bTJwcmlzbTJlbnVtCisqCisqIENvbnZlcnQgdGhlIHA4MDIxMSBlbnVtZXJhdGVkIGludCBpbnRvIGFuIGhmYTM4NHggZW51bWVyYXRlZCBpbnQKKyoKKyogQXJndW1lbnRzOgorKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCisqCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKKyoJcmlkCQloZmEzODR4IHJlY29yZCBpZAorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20ybWdtdF9wODAyMTFlbnVtMnByaXNtMmVudW0oVUlOVDE2ICpwcmlzbTJlbnVtLCBVSU5UMzIgKndsYW5lbnVtLCBVSU5UMTYgcmlkKQoreworCURCRkVOVEVSOworCisJLyogQXQgdGhlIG1vbWVudCwgdGhlIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXNuJ3QKKwlwcmVzZW50ZWQgaXRzZWxmLiBBbGwgdGhlIHdsYW4gZW51bWVyYXRlZCB2YWx1ZXMgYXJlCisJYSAxLXRvLTEgbWF0Y2ggYWdhaW5zdCB0aGUgUHJpc20yIGVudW1lcmF0ZWQgdmFsdWVzKi8KKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2dldF9vcHJhdGVzZXQKKyoKKyogQ29udmVydCB0aGUgaGZhMzg0eCBiaXQgYXJlYSBpbnRvIGEgd2xhbiBvY3RldCBzdHJpbmcuCisqCisqIEFyZ3VtZW50czoKKyoJcmF0ZQkJUHJpc20yIGJpdCBhcmVhCisqCXBzdHIJCXdsYW4gb2N0ZXQgc3RyaW5nCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJtZ210X2dldF9vcHJhdGVzZXQoVUlOVDE2ICpyYXRlLCBwODAyMTFwc3RyZF90ICpwc3RyKQoreworCVVJTlQ4CWxlbjsKKwlVSU5UOAkqZGF0YXJhdGU7CisKKwlEQkZFTlRFUjsKKworCWxlbiA9IDA7CisJZGF0YXJhdGUgPSBwc3RyLT5kYXRhOworCisgCS8qIDEgTWJwcyAqLworCWlmICggQklUMCAmICgqcmF0ZSkgKSB7CisJCWxlbiArPSAoVUlOVDgpMTsKKwkJKmRhdGFyYXRlID0gKFVJTlQ4KTI7CisJCWRhdGFyYXRlKys7CisJfQorCisgCS8qIDIgTWJwcyAqLworCWlmICggQklUMSAmICgqcmF0ZSkgKSB7CisJCWxlbiArPSAoVUlOVDgpMTsKKwkJKmRhdGFyYXRlID0gKFVJTlQ4KTQ7CisJCWRhdGFyYXRlKys7CisJfQorCisgCS8qIDUuNSBNYnBzICovCisJaWYgKCBCSVQyICYgKCpyYXRlKSApIHsKKwkJbGVuICs9IChVSU5UOCkxOworCQkqZGF0YXJhdGUgPSAoVUlOVDgpMTE7CisJCWRhdGFyYXRlKys7CisJfQorCisgCS8qIDExIE1icHMgKi8KKwlpZiAoIEJJVDMgJiAoKnJhdGUpICkgeworCQlsZW4gKz0gKFVJTlQ4KTE7CisJCSpkYXRhcmF0ZSA9IChVSU5UOCkyMjsKKwkJZGF0YXJhdGUrKzsKKwl9CisKKwlwc3RyLT5sZW4gPSBsZW47CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3NldF9vcHJhdGVzZXQKKyoKKyogQ29udmVydCB0aGUgd2xhbiBvY3RldCBzdHJpbmcgaW50byBhbiBoZmEzODR4IGJpdCBhcmVhLgorKgorKiBBcmd1bWVudHM6CisqCXJhdGUJCVByaXNtMiBiaXQgYXJlYQorKglwc3RyCQl3bGFuIG9jdGV0IHN0cmluZworKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20ybWdtdF9zZXRfb3ByYXRlc2V0KFVJTlQxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cikKK3sKKwlVSU5UOAkqZGF0YXJhdGU7CisJaW50CWk7CisKKwlEQkZFTlRFUjsKKworCSpyYXRlID0gMDsKKworCWRhdGFyYXRlID0gcHN0ci0+ZGF0YTsKKworCWZvciAoIGk9MDsgaSA8IHBzdHItPmxlbjsgaSsrLCBkYXRhcmF0ZSsrICkgeworCQlzd2l0Y2ggKCpkYXRhcmF0ZSkgeworCQljYXNlIDI6IC8qIDEgTWJwcyAqLworCQkJKnJhdGUgfD0gQklUMDsKKwkJCWJyZWFrOworCQljYXNlIDQ6IC8qIDIgTWJwcyAqLworCQkJKnJhdGUgfD0gQklUMTsKKwkJCWJyZWFrOworCQljYXNlIDExOiAvKiA1LjUgTWJwcyAqLworCQkJKnJhdGUgfD0gQklUMjsKKwkJCWJyZWFrOworCQljYXNlIDIyOiAvKiAxMSBNYnBzICovCisJCQkqcmF0ZSB8PSBCSVQzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXTEFOX0xPR19ERUJVRygxLCAiVW5yZWNvZ2luemVkIFJhdGUgb2YgJWRcbiIsCisJCQkJKmRhdGFyYXRlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9nZXRfZ3JwYWRkcgorKgorKiBSZXRyaWV2ZXMgYSBwYXJ0aWN1bGFyIGdyb3VwIGFkZHJlc3MgZnJvbSB0aGUgbGlzdCBvZgorKiBncm91cCBhZGRyZXNzZXMuCisqCisqIEFyZ3VtZW50czoKKyoJZGlkCQltaWJpdGVtIGRpZAorKglwc3RyCQl3bGFuIG9jdGV0IHN0cmluZworKglwcml2CQlwcmlzbTIgZHJpdmVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMm1nbXRfZ2V0X2dycGFkZHIoVUlOVDMyIGRpZCwgcDgwMjExcHN0cmRfdCAqcHN0ciwKKwloZmEzODR4X3QgKmh3ICkKK3sKKwlpbnQJaW5kZXg7CisKKwlEQkZFTlRFUjsKKworCWluZGV4ID0gcHJpc20ybWdtdF9nZXRfZ3JwYWRkcl9pbmRleChkaWQpOworCisJaWYgKCBpbmRleCA+PSAwICkgeworCQlwc3RyLT5sZW4gPSBXTEFOX0FERFJfTEVOOworCQltZW1jcHkocHN0ci0+ZGF0YSwgaHctPmRvdDExX2dycF9hZGRyW2luZGV4XSwKKwkJCVdMQU5fQUREUl9MRU4pOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfc2V0X2dycGFkZHIKKyoKKyogQ29udmVydCB0aGUgd2xhbiBvY3RldCBzdHJpbmcgaW50byBhbiBoZmEzODR4IGJpdCBhcmVhLgorKgorKiBBcmd1bWVudHM6CisqCWRpZAkJbWliaXRlbSBkaWQKKyoJYnVmCisqCWdyb3VwcworKgorKiBSZXR1cm5zOgorKgkwCVN1Y2Nlc3MKKyoJITAJRXJyb3IKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfc2V0X2dycGFkZHIoVUlOVDMyIGRpZCwgVUlOVDggKnByaXNtMmJ1ZiwKKwlwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKmh3ICkKK3sKKwlVSU5UOAlub19hZGRyW1dMQU5fQUREUl9MRU5dOworCWludAlpbmRleDsKKworCURCRkVOVEVSOworCisJbWVtc2V0KG5vX2FkZHIsIDAsIFdMQU5fQUREUl9MRU4pOworCWlmIChtZW1jbXAobm9fYWRkciwgcHN0ci0+ZGF0YSwgV0xBTl9BRERSX0xFTikgIT0gMCkgeworCisJCS8qCisJCSoqIFRoZSBhZGRyZXNzIGlzIE5PVCAwIHNvIHdlIGFyZSAiYWRkaW5nIiBhbiBhZGRyZXNzIHRvIHRoZQorCQkqKiBncm91cCBhZGRyZXNzIGxpc3QuICBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlbid0IHRyeWluZworCQkqKiB0byBhZGQgbW9yZSB0aGFuIHRoZSBtYXhpbXVtIGFsbG93ZWQgbnVtYmVyIG9mIGdyb3VwCisJCSoqIGFkZHJlc3NlcyBpbiB0aGUgbGlzdC4gIFRoZSBuZXcgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUKKwkJKiogZW5kIG9mIHRoZSBsaXN0IHJlZ2FyZGxlc3Mgb2YgdGhlIERJRCB1c2VkIHRvIGFkZCB0aGUKKwkJKiogYWRkcmVzcy4KKwkJKi8KKworCQlpZiAoaHctPmRvdDExX2dycGNudCA+PSBNQVhfR1JQX0FERFIpIHJldHVybigtMSk7CisKKwkJbWVtY3B5KGh3LT5kb3QxMV9ncnBfYWRkcltody0+ZG90MTFfZ3JwY250XSwgcHN0ci0+ZGF0YSwKKwkJCQkJCQkJIFdMQU5fQUREUl9MRU4pOworCQlody0+ZG90MTFfZ3JwY250ICs9IDE7CisJfSBlbHNlIHsKKworCQkvKgorCQkqKiBUaGUgYWRkcmVzcyBpcyAwLiAgSW50ZXJwcmV0IHRoaXMgYXMgImRlbGV0aW5nIiBhbiBhZGRyZXNzCisJCSoqIGZyb20gdGhlIGdyb3VwIGFkZHJlc3MgbGlzdC4gIEdldCB0aGUgYWRkcmVzcyBpbmRleCBmcm9tCisJCSoqIHRoZSBESUQuICBJZiB0aGlzIGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdXNlZCBhZGRyZXNzZXMsCisJCSoqIHRoZW4gZGVsZXRlIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBieSBzaGlmdGluZyBhbGwgZm9sbG93aW5nCisJCSoqIGFkZHJlc3NlcyBkb3duLiAgVGhlbiBjbGVhciB0aGUgbGFzdCBhZGRyZXNzICh3aGljaCBzaG91bGQKKwkJKiogbm93IGJlIHVudXNlZCkuICBJZiB0aGUgYWRkcmVzcyBpbmRleCBpcyBOT1Qgd2l0aGluIHRoZQorCQkqKiByYW5nZSBvZiB1c2VkIGFkZHJlc3NlcywgdGhlbiBqdXN0IGlnbm9yZSB0aGUgYWRkcmVzcy4KKwkJKi8KKworCQlpbmRleCA9IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgoZGlkKTsKKwkJaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBody0+ZG90MTFfZ3JwY250KSB7CisJCQlody0+ZG90MTFfZ3JwY250IC09IDE7CisJCQltZW1tb3ZlKGh3LT5kb3QxMV9ncnBfYWRkcltpbmRleF0sCisJCQkJaHctPmRvdDExX2dycF9hZGRyW2luZGV4ICsgMV0sCisJCQkJKChody0+ZG90MTFfZ3JwY250KS1pbmRleCkgKiBXTEFOX0FERFJfTEVOKTsKKwkJCW1lbXNldChody0+ZG90MTFfZ3JwX2FkZHJbaHctPmRvdDExX2dycGNudF0sIDAsCisJCQkJCQkJCSBXTEFOX0FERFJfTEVOKTsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKDApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4CisqCisqIEdldHMgdGhlIGluZGV4IGluIHRoZSBncm91cCBhZGRyZXNzIGxpc3QgYmFzZWQgb24gdGhlIGRpZC4KKyoKKyogQXJndW1lbnRzOgorKglkaWQJCW1pYml0ZW0gZGlkCisqCisqIFJldHVybnM6CisqCT49IDAJSWYgdmFsaWQgZGlkCisqCTwgMAlJZiBub3QgdmFsaWQgZGlkCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KCBVSU5UMzIgZGlkICkKK3sKKwlpbnQJaW5kZXg7CisKKwlEQkZFTlRFUjsKKworCWluZGV4ID0gLTE7CisKKwlzd2l0Y2ggKGRpZCkgeworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxOgorCQlpbmRleCA9IDA7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOgorCQlpbmRleCA9IDE7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzOgorCQlpbmRleCA9IDI7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M0OgorCQlpbmRleCA9IDM7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M1OgorCQlpbmRleCA9IDQ7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M2OgorCQlpbmRleCA9IDU7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M3OgorCQlpbmRleCA9IDY7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M4OgorCQlpbmRleCA9IDc7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M5OgorCQlpbmRleCA9IDg7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMDoKKwkJaW5kZXggPSA5OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTE6CisJCWluZGV4ID0gMTA7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMjoKKwkJaW5kZXggPSAxMTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEzOgorCQlpbmRleCA9IDEyOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTQ6CisJCWluZGV4ID0gMTM7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNToKKwkJaW5kZXggPSAxNDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE2OgorCQlpbmRleCA9IDE1OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTc6CisJCWluZGV4ID0gMTY7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxODoKKwkJaW5kZXggPSAxNzsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE5OgorCQlpbmRleCA9IDE4OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjA6CisJCWluZGV4ID0gMTk7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMToKKwkJaW5kZXggPSAyMDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIyOgorCQlpbmRleCA9IDIxOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjM6CisJCWluZGV4ID0gMjI7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNDoKKwkJaW5kZXggPSAyMzsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI1OgorCQlpbmRleCA9IDI0OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjY6CisJCWluZGV4ID0gMjU7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNzoKKwkJaW5kZXggPSAyNjsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI4OgorCQlpbmRleCA9IDI3OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjk6CisJCWluZGV4ID0gMjg7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMDoKKwkJaW5kZXggPSAyOTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMxOgorCQlpbmRleCA9IDMwOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzI6CisJCWluZGV4ID0gMzE7CisJCWJyZWFrOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIGluZGV4OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFhMTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKQEAgLTAsMCArMSwyNTAyIEBACisvKiBzcmMvcHJpc20yL2RyaXZlci9wcmlzbTJzdGEuYworKgorKiBJbXBsZW1lbnRzIHRoZSBzdGF0aW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHByaXNtMgorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgbW9kdWxlIGFuZCBsaW51eCBwY21jaWEgcm91dGluZXMgZm9yIHRoZQorKiBwcmlzbTIgZHJpdmVyLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwyNSkpCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisjaW5jbHVkZSA8bGludXgvdHF1ZXVlLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKyNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgorI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpKQorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKKyNpbmNsdWRlICJoZmEzODR4LmgiCisjaW5jbHVkZSAicHJpc20ybWdtdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKyNkZWZpbmUgRFJJVkVSX1NVRkZJWAkiX2NzIgorI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUExYKQorI2RlZmluZSBEUklWRVJfU1VGRklYCSJfcGx4IgordHlwZWRlZiBjaGFyKiBkZXZfaW5mb190OworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorI2RlZmluZSBEUklWRVJfU1VGRklYCSJfcGNpIgordHlwZWRlZiBjaGFyKiBkZXZfaW5mb190OworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorI2RlZmluZSBEUklWRVJfU1VGRklYCSJfdXNiIgordHlwZWRlZiBjaGFyKiBkZXZfaW5mb190OworI2Vsc2UKKyNlcnJvciAiSE9TVElGIHVuc3VwcG9ydGVkIG9yIHVuZGVmaW5lZCEiCisjZW5kaWYKKworc3RhdGljIGNoYXIJCSp2ZXJzaW9uID0gInByaXNtMiIgRFJJVkVSX1NVRkZJWCAiLm86ICIgV0xBTl9SRUxFQVNFOworc3RhdGljIGRldl9pbmZvX3QJZGV2X2luZm8gPSAicHJpc20yIiBEUklWRVJfU1VGRklYOworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUExYIHx8IFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwcmlzbTJzdGFfc3VzcGVuZF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IHByaXNtMnN0YV9yZXN1bWVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisKKyNlbmRpZiAvKiBXTEFOX1BDSSAqLworCitzdGF0aWMgd2xhbmRldmljZV90ICpjcmVhdGVfd2xhbih2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIC0tTW9kdWxlIFBhcmFtZXRlcnMgKi8KKworaW50ICAgICAgcHJpc20yX3Jlc2V0X2hvbGR0aW1lPTMwOwkvKiBSZXNldCBob2xkIHRpbWUgaW4gbXMgKi8KK2ludAkgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWU9MTAwOwkvKiBSZXNldCBzZXR0bGUgdGltZSBpbiBtcyAqLworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorc3RhdGljIGludAlwcmlzbTJfZG9yZXNldD0wOwkJLyogRG8gYSByZXNldCBhdCBpbml0PyAqLworI2Vsc2UKK3N0YXRpYyBpbnQgICAgICBwcmlzbTJfZG9yZXNldD0xOwkJLyogRG8gYSByZXNldCBhdCBpbml0PyAqLworaW50ICAgICAgICAgICAgIHByaXNtMl9iYXBfdGltZW91dD0xMDAwOyAgICAgICAgLyogQkFQIHRpbWVvdXQgKi8KK2ludAkJcHJpc20yX2lycV9ldnJlYWRfbWF4PTIwOwkvKiBNYXhpbXVtIG51bWJlciBvZgorCQkJCQkJICogZXZfcmVhZHMgKGxvb3BzKQorCQkJCQkJICogaW4gaXJxIGhhbmRsZXIKKwkJCQkJCSAqLworI2VuZGlmCisKKyNpZmRlZiBXTEFOX0lOQ0xVREVfREVCVUcKK2ludCBwcmlzbTJfZGVidWc9MDsKK21vZHVsZV9wYXJhbSggcHJpc20yX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfZGVidWcsICJwcmlzbTIgZGVidWdnaW5nIik7CisjZW5kaWYKKworbW9kdWxlX3BhcmFtKCBwcmlzbTJfZG9yZXNldCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocHJpc20yX2RvcmVzZXQsICJJc3N1ZSBhIHJlc2V0IG9uIGluaXRpYWxpemF0aW9uIik7CisKK21vZHVsZV9wYXJhbSggcHJpc20yX3Jlc2V0X2hvbGR0aW1lLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyggcHJpc20yX3Jlc2V0X2hvbGR0aW1lLCAicmVzZXQgaG9sZCB0aW1lIGluIG1zIik7Cittb2R1bGVfcGFyYW0oIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyggcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsICJyZXNldCBzZXR0bGUgdGltZSBpbiBtcyIpOworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorbW9kdWxlX3BhcmFtKCBwcmlzbTJfYmFwX3RpbWVvdXQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9iYXBfdGltZW91dCwgIkJ1ZmZlckFjY2Vzc1BhdGggVGltZW91dCBpbiAxMCpuIHVzIik7Cittb2R1bGVfcGFyYW0oIHByaXNtMl9pcnFfZXZyZWFkX21heCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9pcnFfZXZyZWFkX21heCwgIk1heGltaW0gbnVtYmVyIG9mIGV2ZW50IHJlYWRzIGluIGludGVycnVwdCBoYW5kbGVyIik7CisjZW5kaWYKKworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3N0YXRpYyBpbnQJcHJpc20yc3RhX29wZW4od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQJcHJpc20yc3RhX2Nsb3NlKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2ICk7CitzdGF0aWMgaW50ICAgICAgcHJpc20yc3RhX3R4ZnJhbWUod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOworc3RhdGljIGludAlwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKK3N0YXRpYyBpbnQJcHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgaW50CXByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludCAgICAgIHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgICBuZXRkZXZpY2VfdCAqZGV2KTsKKworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9oYW5kb3ZlcigKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl90YWxsaWVzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCAgICAgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2F1dGhyZXEoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXV0aHJlcV9kZWZlcigKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9wc3VzZXJjbnQoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgaW50CitwcmlzbTJzdGFfcHJvY19yZWFkKAorCWNoYXIJKnBhZ2UsCisJY2hhcgkqKnN0YXJ0LAorCW9mZl90CW9mZnNldCwKKwlpbnQJY291bnQsCisJaW50CSplb2YsCisJdm9pZAkqZGF0YSk7CisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBkbXBtZW0KKyoKKyogRGVidWcgdXRpbGl0eSBmdW5jdGlvbiB0byBkdW1wIG1lbW9yeSB0byB0aGUga2VybmVsIGRlYnVnIGxvZy4KKyoKKyogQXJndW1lbnRzOgorKglidWYJcHRyIGRhdGEgd2Ugd2FudCBkdW1wZWQKKyoJbGVuCWxlbmd0aCBvZiBkYXRhCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbmxpbmUgdm9pZCBkbXBtZW0odm9pZCAqYnVmLCBpbnQgbikKK3sKKwlpbnQgYzsKKwlmb3IgKCBjPSAwOyBjIDwgbjsgYysrKSB7CisJCWlmICggKGMgJSAxNikgPT0gMCApIHByaW50ayhLRVJOX0RFQlVHImRtcFslZF06ICIsIGMpOworCQlwcmludGsoIiUwMnggIiwgKChVSU5UOCopYnVmKVtjXSk7CisJCWlmICggKGMgJSAxNikgPT0gMTUgKSBwcmludGsoIlxuIik7CisJfQorCWlmICggKGMgJSAxNikgIT0gMCApIHByaW50aygiXG4iKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX29wZW4KKyoKKyogV0xBTiBkZXZpY2Ugb3BlbiBtZXRob2QuICBDYWxsZWQgZnJvbSBwODAyMTFuZXRkZXYgd2hlbiBrZXJuZWwKKyogZGV2aWNlIG9wZW4gKHN0YXJ0KSBtZXRob2QgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZQorKiBTSU9DU0lJRkZMQUdTIGlvY3RsIGNoYW5naW5nIHRoZSBmbGFncyBiaXQgSUZGX1VQCisqIGZyb20gY2xlYXIgdG8gc2V0LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MKKyoJPjAJZi93IHJlcG9ydGVkIGVycm9yCisqCTwwCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwcmlzbTJzdGFfb3Blbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKyNpZmRlZiBBTkNJRU5UX01PRFVMRV9DT0RFCisJTU9EX0lOQ19VU0VfQ09VTlQ7CisjZW5kaWYKKworCS8qIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIHRvIGRvIGFueXRoaW5nIGVsc2UuCisJICogVGhlIHNldHVwIG9mIHRoZSBNQUMgc2hvdWxkIGJlIHN1YnNlcXVlbnRseSBjb21wbGV0ZWQgdmlhCisJICogdGhlIG1sbWUgY29tbWFuZHMuCisJICogSGlnaGVyIGxheWVycyBrbm93IHdlJ3JlIHJlYWR5IGZyb20gZGV2LT5zdGFydD09MSBhbmQKKwkgKiBkZXYtPnRidXN5PT0wLiAgT3VyIHJ4IHBhdGgga25vd3MgdG8gcGFzcyB1cCByZWNlaXZlZC8KKwkgKiBmcmFtZXMgYmVjYXVzZSBvZiBkZXYtPmZsYWdzJklGRl9VUCBpcyB0cnVlLgorCSAqLworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2Nsb3NlCisqCisqIFdMQU4gZGV2aWNlIGNsb3NlIG1ldGhvZC4gIENhbGxlZCBmcm9tIHA4MDIxMW5ldGRldiB3aGVuIGtlcm5lbAorKiBkZXZpY2UgY2xvc2UgbWV0aG9kIGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUKKyogU0lPQ1NJSUZGTEFHUyBpb2N0bCBjaGFuZ2luZyB0aGUgZmxhZ3MgYml0IElGRl9VUAorKiBmcm9tIHNldCB0byBjbGVhci4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzCisqCT4wCWYvdyByZXBvcnRlZCBlcnJvcgorKgk8MAlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX2Nsb3NlKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKworI2lmZGVmIEFOQ0lFTlRfTU9EVUxFX0NPREUKKwlNT0RfREVDX1VTRV9DT1VOVDsKKyNlbmRpZgorCisJLyogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgZWxzZS4KKwkgKiBIaWdoZXIgbGF5ZXJzIGtub3cgd2UncmUgbm90IHJlYWR5IGZyb20gZGV2LT5zdGFydD09MCBhbmQKKwkgKiBkZXYtPnRidXN5PT0xLiAgT3VyIHJ4IHBhdGgga25vd3MgdG8gbm90IHBhc3MgdXAgcmVjZWl2ZWQKKwkgKiBmcmFtZXMgYmVjYXVzZSBvZiBkZXYtPmZsYWdzJklGRl9VUCBpcyBmYWxzZS4KKwkgKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9yZXNldAorKgorKiBOb3QgY3VycmVudGx5IGltcGxlbnRlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2ICkKK3sKKwlEQkZFTlRFUjsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX3R4ZnJhbWUKKyoKKyogVGFrZXMgYSBmcmFtZSBmcm9tIHA4MDIxMSBhbmQgcXVldWVzIGl0IGZvciB0cmFuc21pc3Npb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCXBiCQlwYWNrZXQgYnVmZmVyIHN0cnVjdC4gIENvbnRhaW5zIGFuIDgwMi4xMQorKgkJCWRhdGEgZnJhbWUuCisqICAgICAgIHA4MDIxMV9oZHIgICAgICBwb2ludHMgdG8gdGhlIDgwMi4xMSBoZWFkZXIgZm9yIHRoZSBwYWNrZXQuCisqIFJldHVybnM6CisqCTAJCVN1Y2Nlc3MgYW5kIG1vcmUgYnVmZnMgYXZhaWxhYmxlCisqCTEJCVN1Y2Nlc3MgYnV0IG5vIG1vcmUgYnVmZnMKKyoJMgkJQWxsb2NhdGlvbiBmYWlsdXJlCisqCTQJCUJ1ZmZlciBmdWxsIG9yIHF1ZXVlIGJ1c3kKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX3R4ZnJhbWUod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCisJCQkgICAgIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCit7CisJaGZhMzg0eF90CQkqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlpbnQJCQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwkvKiBJZiBuZWNlc3NhcnksIHNldCB0aGUgODAyLjExIFdFUCBiaXQgKi8KKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiAoSE9TVFdFUF9QUklWQUNZSU5WT0tFRCB8IEhPU1RXRVBfRU5DUllQVCkpID09IEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpIHsKKwkJcDgwMjExX2hkci0+YTMuZmMgfD0gaG9zdDJpZWVlMTYoV0xBTl9TRVRfRkNfSVNXRVAoMSkpOworCX0KKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl90eGZyYW1lKGh3LCBza2IsIHA4MDIxMV9oZHIsIHA4MDIxMV93ZXApOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfbWxtZXJlcXVlc3QKKyoKKyogd2xhbiBjb21tYW5kIG1lc3NhZ2UgaGFuZGxlci4gIEFsbCB3ZSBkbyBoZXJlIGlzIHBhc3MgdGhlIG1lc3NhZ2UKKyogb3ZlciB0byB0aGUgcHJpc20yc3RhX21nbXRfaGFuZGxlci4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNnCQl3bGFuIGNvbW1hbmQgbWVzc2FnZQorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCTwwCQlzdWNjZXNzZnVsIGFjY2VwdGFuY2Ugb2YgbWVzc2FnZSwgYnV0IHdlJ3JlCisqCQkJd2FpdGluZyBmb3IgYW4gYXN5bmMgcHJvY2VzcyB0byBmaW5pc2ggYmVmb3JlCisqCQkJd2UncmUgZG9uZSB3aXRoIHRoZSBtc2cuICBXaGVuIHRoZSBhc3luY2gKKyoJCQlwcm9jZXNzIGlzIGRvbmUsIHdlJ2xsIGNhbGwgdGhlIHA4MDIxMQorKgkJCWZ1bmN0aW9uIHA4MDIxMXJlcV9jb25maXJtKCkgLgorKgk+MAkJQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZSBoYW5kbGluZworKgkJCXRoZSBtZXNzYWdlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKworCWludCByZXN1bHQgPSAwOworCURCRkVOVEVSOworCisJc3dpdGNoKCBtc2ctPm1zZ2NvZGUgKQorCXsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJnZXQgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtaWJnZXQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtaWJzZXQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9wb3dlcm1nbXQgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBwb3dlcm1nbXQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcG93ZXJtZ210KHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW4gOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBzY2FuIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3NjYW4od2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgc2Nhbl9yZXN1bHRzIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3NjYW5fcmVzdWx0cyh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9qb2luIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgam9pbiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9qb2luKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIGF1dGhlbnRpY2F0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXRoZW50aWNhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGRlYXV0aGVudGljYXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2RlYXV0aGVudGljYXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgYXNzb2NpYXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2Fzc29jaWF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmVhc3NvY2lhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmVhc3NvY2lhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBkaXNhc3NvY2lhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfZGlzYXNzb2NpYXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3Jlc2V0IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByZXNldCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yZXNldCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9zdGFydCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgc3RhcnQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfc3RhcnQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJLyoKKwkgKiBQcmlzbTIgc3BlY2lmaWMgbWVzc2FnZXMKKwkgKi8KKwljYXNlIERJRG1zZ19wMnJlcV9qb2luIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgcDIgam9pbiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9wMl9qb2luKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworICAgICAgIAljYXNlIERJRG1zZ19wMnJlcV9yZWFkcGRhIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByZWFkcGRhIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfcmVhZGNpcyA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmVhZGNpcyByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yZWFkY2lzKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2F1eHBvcnRfc3RhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGF1eHBvcnRfc3RhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV4cG9ydF9zdGF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWQgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGF1eHBvcnRfcmVhZCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXhwb3J0X3JlYWQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfYXV4cG9ydF93cml0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgYXV4cG9ydF93cml0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXhwb3J0X3dyaXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2xvd19sZXZlbCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgbG93X2xldmVsIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2xvd19sZXZlbCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKyAgICAgICAgY2FzZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kIDoKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHRlc3RfY29tbWFuZCByZXF1ZXN0XG4iKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJtZ210X3Rlc3RfY29tbWFuZCh3bGFuZGV2LCBtc2cpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERJRG1zZ19wMnJlcV9tbWlfcmVhZCA6CisgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBtbWlfcmVhZCByZXF1ZXN0XG4iKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJtZ210X21taV9yZWFkKHdsYW5kZXYsIG1zZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRElEbXNnX3AycmVxX21taV93cml0ZSA6CisgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBtbWlfd3JpdGUgcmVxdWVzdFxuIik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20ybWdtdF9tbWlfd3JpdGUod2xhbmRldiwgbXNnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmFtZGxfc3RhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJhbWRsX3dyaXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3dyaXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGZsYXNoZGxfc3RhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3dyaXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfZHVtcF9zdGF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZHVtcF9zdGF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9kdW1wX3N0YXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mbyA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgY2hhbm5lbF9pbmZvIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2NoYW5uZWxfaW5mbyh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0cyA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgY2hhbm5lbF9pbmZvX3Jlc3VsdHMgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvX3Jlc3VsdHMod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJLyoKKwkgKiBMaW51eCBzcGVjaWZpYyBtZXNzYWdlcworCSAqLworCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwIDoKKwkJYnJlYWs7ICAgLy8gaWdub3JlIG1lLgorICAgICAgICBjYXNlIERJRG1zZ19sbnhyZXFfaWZzdGF0ZSA6CisJCXsKKwkJcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3QJKmlmc3RhdGVtc2c7CisgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBpZnN0YXRlIHJlcXVlc3RcbiIpOworCQlpZnN0YXRlbXNnID0gKHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90Kiltc2c7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgaWZzdGF0ZW1zZy0+aWZzdGF0ZS5kYXRhKTsKKwkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPQorCQkJUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlpZnN0YXRlbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSByZXN1bHQ7CisJCXJlc3VsdCA9IDA7CisJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZiA6CisgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSB3bGFuc25pZmYgcmVxdWVzdFxuIik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldiwgbXNnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwljYXNlIERJRG1zZ19sbnhyZXFfYXV0b2pvaW4gOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGF1dG9qb2luIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2F1dG9qb2luKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2VuYWJsZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZW5hYmxlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2VuYWJsZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OiB7CisJCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgKnF1YWxtc2c7CisKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgY29tbXNxdWFsaXR5IHJlcXVlc3RcbiIpOworCisJCWlmIChody0+YXApCisJCQlicmVhazsKKworCQlxdWFsbXNnID0gKHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QqKSBtc2c7CisKKwkJcXVhbG1zZy0+bGluay5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCXF1YWxtc2ctPmxldmVsLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJcXVhbG1zZy0+bm9pc2Uuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisKKwkJcXVhbG1zZy0+bGluay5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkNRX2N1cnJCU1MpOworCQlxdWFsbXNnLT5sZXZlbC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFTTF9jdXJyQlNTKTsKKwkJcXVhbG1zZy0+bm9pc2UuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BTkxfY3VyckZDKTsKKworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfV0FSTklORygiVW5rbm93biBtZ210IHJlcXVlc3QgbWVzc2FnZSAweCUwOHgiLCBtc2ctPm1zZ2NvZGUpOworCQlicmVhazsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pZnN0YXRlCisqCisqIEludGVyZmFjZSBzdGF0ZS4gIFRoaXMgaXMgdGhlIHByaW1hcnkgV0xBTiBpbnRlcmZhY2UgZW5hYmxlL2Rpc2FibGUKKyogaGFuZGxlci4gIEZvbGxvd2luZyB0aGUgZHJpdmVyL2xvYWQvZGV2aWNlcHJvYmUgc2VxdWVuY2UsIHRoaXMKKyogZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN0YXRlIG9mICJlbmFibGUiIGJlZm9yZSBhbnkgb3RoZXIKKyogY29tbWFuZHMgd2lsbCBiZSBhY2NlcHRlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyogCUEgcDgwMjExIG1lc3NhZ2UgcmVzdWx0Y29kZSB2YWx1ZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK1VJTlQzMiBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQzMiBpZnN0YXRlKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlVSU5UMzIgCQkJcmVzdWx0OworCURCRkVOVEVSOworCisJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisKKwlXTEFOX0xPR19ERUJVRygyLCAiQ3VycmVudCBNU0Qgc3RhdGUoJWQpLCByZXF1ZXN0aW5nKCVkKVxuIiwKKwkgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5tc2RzdGF0ZSwgaWZzdGF0ZSk7CisJc3dpdGNoIChpZnN0YXRlKQorCXsKKwljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQ6CisJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKKwkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6CisJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0ZXTE9BRF9QRU5ESU5HOworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgdGhlIGRldmljZStkcml2ZXIgc3VmZmljaWVudGx5CisJCQkgKiBmb3IgZmlybXdhcmUgbG9hZGluZy4KKwkJCSAqLworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKwkJCXJlc3VsdD1oZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKKyNlbHNlCisJCQlpZiAoKHJlc3VsdD1oZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKKwkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJCXJlc3VsdCA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfRldMT0FEOworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9GV0xPQUQ6CisJCQloZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfUlVOTklORzoKKwkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIkNhbm5vdCBlbnRlciBmd2xvYWQgc3RhdGUgZnJvbSBlbmFibGUgc3RhdGUsIgorCQkJCSJ5b3UgbXVzdCBkaXNhYmxlIGZpcnN0LlxuIik7CisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfSFdGQUlMOgorCQlkZWZhdWx0OgorCQkJLyogcHJvYmUoKSBoYWQgYSBwcm9ibGVtIG9yIHRoZSBtc2RzdGF0ZSBjb250YWlucworCQkJICogYW4gdW5yZWNvZ25pemVkIHZhbHVlLCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLgorCQkJICovCisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9pZnN0YXRlX2VuYWJsZToKKwkJc3dpdGNoICh3bGFuZGV2LT5tc2RzdGF0ZSkgeworCQljYXNlIFdMQU5fTVNEX0hXUFJFU0VOVDoKKwkJY2FzZSBXTEFOX01TRF9GV0xPQUQ6CisJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX1JVTk5JTkdfUEVORElORzsKKwkJCS8qIEluaXRpYWxpemUgdGhlIGRldmljZStkcml2ZXIgZm9yIGZ1bGwKKwkJCSAqIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWlnaHQgbWUgYW4gRldMT0FEIHRvCisJCQkgKiB0byBSVU5OSU5HIHRyYW5zaXRpb24gc28gd2UgbXVzdCBub3QgZG8gYSBjaGlwCisJCQkgKiBvciBib2FyZCBsZXZlbCByZXNldC4gIE5vdGUgdGhhdCBvbiBmYWlsdXJlLAorCQkJICogdGhlIE1TRCBzdGF0ZSBpcyBzZXQgdG8gSFdQUkVTRU5UIGJlY2F1c2Ugd2UKKwkJCSAqIGNhbid0IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IHRoZSBzdGF0ZQorCQkJICogb2YgdGhlIGhhcmR3YXJlIG9yIGEgcHJldmlvdXMgZmlybXdhcmUgbG9hZC4KKwkJCSAqLworCQkJaWYgKChyZXN1bHQ9aGZhMzg0eF9kcnZyX3N0YXJ0KGh3KSkpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkJImhmYTM4NHhfZHJ2cl9zdGFydCgpIGZhaWxlZCwiCisJCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCQlyZXN1bHQgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoKHJlc3VsdD1wcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldikpKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJCSJwcmlzbTJzdGFfZ2V0Y2FyZGluZm8oKSBmYWlsZWQsIgorCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQkJcmVzdWx0ID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCQloZmEzODR4X2RydnJfc3RvcChodyk7CisJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKHJlc3VsdD1wcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldikpKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJCSJwcmlzbTJzdGFfZ2xvYmFsc2V0dXAoKSBmYWlsZWQsIgorCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQkJcmVzdWx0ID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCQloZmEzODR4X2RydnJfc3RvcChodyk7CisJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX1JVTk5JTkc7CisJCQlody0+am9pbl9hcCA9IDA7CisJCQlody0+am9pbl9yZXRyaWVzID0gNjA7CisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6CisJCQkvKiBEbyBub3RoaW5nLCB3ZSdyZSBhbHJlYWR5IGluIHRoaXMgc3RhdGUuKi8KKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfSFdGQUlMOgorCQlkZWZhdWx0OgorCQkJLyogcHJvYmUoKSBoYWQgYSBwcm9ibGVtIG9yIHRoZSBtc2RzdGF0ZSBjb250YWlucworCQkJICogYW4gdW5yZWNvZ25pemVkIHZhbHVlLCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLgorCQkJICovCisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGU6CisJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKKwkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6CisJCQkvKiBEbyBub3RoaW5nLCB3ZSdyZSBhbHJlYWR5IGluIHRoaXMgc3RhdGUuKi8KKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfRldMT0FEOgorCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6CisJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVF9QRU5ESU5HOworCQkJLyoKKwkJCSAqIFRPRE86IFNodXQgZG93biB0aGUgTUFDIGNvbXBsZXRlbHkuIEhlcmUgYSBjaGlwCisJCQkgKiBvciBib2FyZCBsZXZlbCByZXNldCBpcyBwcm9iYWJseSBjYWxsZWQgZm9yLgorCQkJICogQWZ0ZXIgYSAiZGlzYWJsZSIgX2FsbF8gcmVzdWx0cyBhcmUgbG9zdCwgZXZlbgorCQkJICogdGhvc2UgZnJvbSBhIGZ3bG9hZC4KKwkJCSAqLworCQkJaWYgKCF3bGFuZGV2LT5od3JlbW92ZWQpCisJCQkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCisJCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfSFdGQUlMOgorCQlkZWZhdWx0OgorCQkJLyogcHJvYmUoKSBoYWQgYSBwcm9ibGVtIG9yIHRoZSBtc2RzdGF0ZSBjb250YWlucworCQkJICogYW4gdW5yZWNvZ25pemVkIHZhbHVlLCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLgorCQkJICovCisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCWJyZWFrOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2dldGNhcmRpbmZvCisqCisqIENvbGxlY3QgdGhlIE5JQ0lELCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBhbnkgb3RoZXIgaWRlbnRpZmllcnMKKyogd2UnZCBsaWtlIHRvIGhhdmUgaW4gaG9zdC1zaWRlIGRhdGEgc3RydWN0dXJlcy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzCisqCT4wCWYvdyByZXBvcnRlZCBlcnJvcgorKgk8MAlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUVpdGhlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWludCAJCQlyZXN1bHQgPSAwOworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYgICAgICAgICAgICAgICAgICB0ZW1wOworCVVJTlQ4CQkJc251bVtIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOXTsKKwljaGFyCQkJcHN0clsoSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTiAqIDQpICsgMV07CisKKwlEQkZFTlRFUjsKKworCS8qIENvbGxlY3QgdmVyc2lvbiBhbmQgY29tcGF0aWJpbGl0eSBpbmZvICovCisJLyogIFNvbWUgYXJlIGNyaXRpY2FsLCBzb21lIGFyZSBub3QgKi8KKwkvKiBOSUMgaWRlbnRpdHkgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9OSUNJREVOVElUWSwKKwkJCSZody0+aWRlbnRfbmljLCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIE5JQ0lERU5USVRZXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgbmljIGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KKwlody0+aWRlbnRfbmljLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMuaWQpOworCWh3LT5pZGVudF9uaWMudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLnZhcmlhbnQpOworCWh3LT5pZGVudF9uaWMubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy5tYWpvcik7CisJaHctPmlkZW50X25pYy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLm1pbm9yKTsKKworCVdMQU5fTE9HX0lORk8oICJpZGVudDogbmljIGgvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkJaHctPmlkZW50X25pYy5pZCwgaHctPmlkZW50X25pYy5tYWpvciwKKwkJCWh3LT5pZGVudF9uaWMubWlub3IsIGh3LT5pZGVudF9uaWMudmFyaWFudCk7CisKKwkvKiBQcmltYXJ5IGYvdyBpZGVudGl0eSAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1BSSUlERU5USVRZLAorCQkJJmh3LT5pZGVudF9wcmlfZncsIHNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgUFJJSURFTlRJVFlcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBwcml2YXRlIGZ3IGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KKwlody0+aWRlbnRfcHJpX2Z3LmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncuaWQpOworCWh3LT5pZGVudF9wcmlfZncudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCWh3LT5pZGVudF9wcmlfZncubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy5tYWpvcik7CisJaHctPmlkZW50X3ByaV9mdy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3Lm1pbm9yKTsKKworCVdMQU5fTE9HX0lORk8oICJpZGVudDogcHJpIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkJaHctPmlkZW50X3ByaV9mdy5pZCwgaHctPmlkZW50X3ByaV9mdy5tYWpvciwKKwkJCWh3LT5pZGVudF9wcmlfZncubWlub3IsIGh3LT5pZGVudF9wcmlfZncudmFyaWFudCk7CisKKwkvKiBTdGF0aW9uIChTZWNvbmRhcnk/KSBmL3cgaWRlbnRpdHkgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFJREVOVElUWSwKKwkJCSZody0+aWRlbnRfc3RhX2Z3LCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQUlERU5USVRZXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWYgKGh3LT5pZGVudF9uaWMuaWQgPCAweDgwMDApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZBVEFMOiBDYXJkIGlzIG5vdCBhbiBJbnRlcnNpbCBQcmlzbTIvMi41LzNcbiIpOworCQlyZXN1bHQgPSAtMTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgc3RhdGlvbiBmdyBpZCBmaWVsZHMgaW4gaG9zdCBieXRlIG9yZGVyICovCisJaHctPmlkZW50X3N0YV9mdy5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3LmlkKTsKKwlody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwlody0+aWRlbnRfc3RhX2Z3Lm1ham9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncubWFqb3IpOworCWh3LT5pZGVudF9zdGFfZncubWlub3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy5taW5vcik7CisKKwkvKiBzdHJpcCBvdXQgdGhlICdzcGVjaWFsJyB2YXJpYW50IGJpdHMgKi8KKwlody0+bW1fbW9kcyA9IGh3LT5pZGVudF9zdGFfZncudmFyaWFudCAmIChCSVQxNCB8IEJJVDE1KTsKKwlody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgJj0gfigoVUlOVDE2KShCSVQxNCB8IEJJVDE1KSk7CisKKwlpZiAgKCBody0+aWRlbnRfc3RhX2Z3LmlkID09IDB4MWYgKSB7CisJCWh3LT5hcCA9IDA7CisJCVdMQU5fTE9HX0lORk8oCisJCQkiaWRlbnQ6IHN0YSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCWh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQlody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOworCX0gZWxzZSB7CisJCWh3LT5hcCA9IDE7CisJCVdMQU5fTE9HX0lORk8oCisJCQkiaWRlbnQ6ICBhcCBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCWh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQlody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOworCX0KKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIE1vZGVtIHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfTUZJU1VQUkFOR0UsCisJCQkmaHctPmNhcF9zdXBfbWZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgTUZJU1VQUkFOR0VcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBtb2RlbSBpbnRlcmZhY2Ugc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfc3VwX21maS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS5yb2xlKTsKKwlody0+Y2FwX3N1cF9tZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLmlkKTsKKwlody0+Y2FwX3N1cF9tZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkudmFyaWFudCk7CisJaHctPmNhcF9zdXBfbWZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9tZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS50b3ApOworCisJV0xBTl9MT0dfSU5GTygKKwkJIk1GSTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX3N1cF9tZmkucm9sZSwgaHctPmNhcF9zdXBfbWZpLmlkLAorCQlody0+Y2FwX3N1cF9tZmkudmFyaWFudCwgaHctPmNhcF9zdXBfbWZpLmJvdHRvbSwKKwkJaHctPmNhcF9zdXBfbWZpLnRvcCk7CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBDb250cm9sbGVyIHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0UsCisJCQkmaHctPmNhcF9zdXBfY2ZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgQ0ZJU1VQUkFOR0VcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBjb250cm9sbGVyIGludGVyZmFjZSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLnJvbGUpOworCWh3LT5jYXBfc3VwX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkuaWQpOworCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS5ib3R0b20pOworCWh3LT5jYXBfc3VwX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiQ0ZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfc3VwX2NmaS5yb2xlLCBody0+Y2FwX3N1cF9jZmkuaWQsCisJCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50LCBody0+Y2FwX3N1cF9jZmkuYm90dG9tLAorCQlody0+Y2FwX3N1cF9jZmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIFByaW1hcnkgZi93IHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfUFJJU1VQUkFOR0UsCisJCQkmaHctPmNhcF9zdXBfcHJpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgUFJJU1VQUkFOR0VcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBwcmltYXJ5IGZpcm13YXJlIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9wcmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkucm9sZSk7CisJaHctPmNhcF9zdXBfcHJpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS5pZCk7CisJaHctPmNhcF9zdXBfcHJpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX3ByaS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfcHJpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkudG9wKTsKKworCVdMQU5fTE9HX0lORk8oCisJCSJQUkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9zdXBfcHJpLnJvbGUsIGh3LT5jYXBfc3VwX3ByaS5pZCwKKwkJaHctPmNhcF9zdXBfcHJpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3ByaS5ib3R0b20sCisJCWh3LT5jYXBfc3VwX3ByaS50b3ApOworCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgU3RhdGlvbiBmL3cgc3VwcGxpZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFTVVBSQU5HRSwKKwkJCSZody0+Y2FwX3N1cF9zdGEsIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFTVVBSQU5HRVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YXRpb24gZmlybXdhcmUgc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfc3VwX3N0YS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS5yb2xlKTsKKwlody0+Y2FwX3N1cF9zdGEuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLmlkKTsKKwlody0+Y2FwX3N1cF9zdGEudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEudmFyaWFudCk7CisJaHctPmNhcF9zdXBfc3RhLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9zdGEudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS50b3ApOworCisJaWYgKCBody0+Y2FwX3N1cF9zdGEuaWQgPT0gMHgwNCApIHsKKwkJV0xBTl9MT0dfSU5GTygKKwkJIlNUQTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX3N1cF9zdGEucm9sZSwgaHctPmNhcF9zdXBfc3RhLmlkLAorCQlody0+Y2FwX3N1cF9zdGEudmFyaWFudCwgaHctPmNhcF9zdXBfc3RhLmJvdHRvbSwKKwkJaHctPmNhcF9zdXBfc3RhLnRvcCk7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfSU5GTygKKwkJIkFQOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfc3VwX3N0YS5yb2xlLCBody0+Y2FwX3N1cF9zdGEuaWQsCisJCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAorCQlody0+Y2FwX3N1cF9zdGEudG9wKTsKKwl9CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBwcmltYXJ5IGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfUFJJX0NGSUFDVFJBTkdFUywKKwkJCSZody0+Y2FwX2FjdF9wcmlfY2ZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgUFJJX0NGSUFDVFJBTkdFU1xuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHByaW1hcnkgZi93IGFjdG9yLCBDRkkgc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLnJvbGUpOworCWh3LT5jYXBfYWN0X3ByaV9jZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS5pZCk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20pOworCWh3LT5jYXBfYWN0X3ByaV9jZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkudG9wKTsKKworCVdMQU5fTE9HX0lORk8oCisJCSJQUkktQ0ZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSwgaHctPmNhcF9hY3RfcHJpX2NmaS5pZCwKKwkJaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50LCBody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSwKKwkJaHctPmNhcF9hY3RfcHJpX2NmaS50b3ApOworCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhIGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBX0NGSUFDVFJBTkdFUywKKwkJCSZody0+Y2FwX2FjdF9zdGFfY2ZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgU1RBX0NGSUFDVFJBTkdFU1xuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YXRpb24gZi93IGFjdG9yLCBDRkkgc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfYWN0X3N0YV9jZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS5pZCk7CisJaHctPmNhcF9hY3Rfc3RhX2NmaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCk7CisJaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20pOworCWh3LT5jYXBfYWN0X3N0YV9jZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkudG9wKTsKKworCVdMQU5fTE9HX0lORk8oCisJCSJTVEEtQ0ZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfYWN0X3N0YV9jZmkucm9sZSwgaHctPmNhcF9hY3Rfc3RhX2NmaS5pZCwKKwkJaHctPmNhcF9hY3Rfc3RhX2NmaS52YXJpYW50LCBody0+Y2FwX2FjdF9zdGFfY2ZpLmJvdHRvbSwKKwkJaHctPmNhcF9hY3Rfc3RhX2NmaS50b3ApOworCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhIGYvdyBhY3RvciwgTUZJIHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBX01GSUFDVFJBTkdFUywKKwkJCSZody0+Y2FwX2FjdF9zdGFfbWZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgU1RBX01GSUFDVFJBTkdFU1xuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YXRpb24gZi93IGFjdG9yLCBNRkkgc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5pZCk7CisJaHctPmNhcF9hY3Rfc3RhX21maS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCk7CisJaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20pOworCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKKworCVdMQU5fTE9HX0lORk8oCisJCSJTVEEtTUZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSwgaHctPmNhcF9hY3Rfc3RhX21maS5pZCwKKwkJaHctPmNhcF9hY3Rfc3RhX21maS52YXJpYW50LCBody0+Y2FwX2FjdF9zdGFfbWZpLmJvdHRvbSwKKwkJaHctPmNhcF9hY3Rfc3RhX21maS50b3ApOworCisJLyogU2VyaWFsIE51bWJlciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUiwKKwkJCXNudW0sIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4pOworCWlmICggIXJlc3VsdCApIHsKKwkJd2xhbl9ta3ByaW50c3RyKHNudW0sIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4sCisJCQkJcHN0ciwgc2l6ZW9mKHBzdHIpKTsKKwkJV0xBTl9MT0dfSU5GTygiUHJpc20yIGNhcmQgU046ICVzXG4iLCBwc3RyKTsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFByaXNtMiBDYXJkIFNOXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogQ29sbGVjdCB0aGUgTUFDIGFkZHJlc3MgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSLAorCQl3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKKwlpZiAoIHJlc3VsdCAhPSAwICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIG1hYyBhZGRyZXNzXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogc2hvcnQgcHJlYW1ibGUgaXMgYWx3YXlzIGltcGxlbWVudGVkICovCisJd2xhbmRldi0+bnNkY2FwcyB8PSBQODAyMTFfTlNEQ0FQX1NIT1JUX1BSRUFNQkxFOworCisJLyogZmluZCBvdXQgaWYgaGFyZHdhcmUgd2VwIGlzIGltcGxlbWVudGVkICovCisJaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QLCAmdGVtcCk7CisJaWYgKHRlbXApCisJCXdsYW5kZXYtPm5zZGNhcHMgfD0gUDgwMjExX05TRENBUF9IQVJEV0FSRVdFUDsKKworCS8qIGdldCB0aGUgZEJtIFNjYWxpbmcgY29uc3RhbnQgKi8KKwloZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkRCTUFESlVTVCwgJnRlbXApOworCWh3LT5kYm1hZGp1c3QgPSB0ZW1wOworCisJLyogT25seSBlbmFibGUgc2NhbiBieSBkZWZhdWx0IG9uIG5ld2VyIGZpcm13YXJlICovCisgICAgICAgIGlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAorCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSw1LDUpKSB7CisJCXdsYW5kZXYtPm5zZGNhcHMgfD0gUDgwMjExX05TRENBUF9OT1NDQU47CisJfQorCisJLyogVE9ETzogU2V0IGFueSBpbnRlcm5hbGx5IG1hbmFnZWQgY29uZmlnIGl0ZW1zICovCisKKwlnb3RvIGRvbmU7CitmYWlsZWQ6CisJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9nbG9iYWxzZXR1cAorKgorKiBTZXQgYW55IGdsb2JhbCBSSURzIHRoYXQgd2Ugd2FudCB0byBzZXQgYXQgZGV2aWNlIGFjdGl2YXRpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcworKgk+MAlmL3cgcmVwb3J0ZWQgZXJyb3IKKyoJPDAJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisKKwkvKiBTZXQgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSAqLworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9EQVRBX01BWExFTik7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yc3RhX3NldG11bHRpY2FzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIG5ldGRldmljZV90ICpkZXYpCit7CisJaW50IHJlc3VsdCA9IDA7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisKKwlVSU5UMTYgIHByb21pc2M7CisKKwlEQkZFTlRFUjsKKworCS8qIElmIHdlJ3JlIG5vdCByZWFkeSwgd2hhdCdzIHRoZSBwb2ludD8gKi8KKwlpZiAoIGh3LT5zdGF0ZSAhPSBIRkEzODR4X1NUQVRFX1JVTk5JTkcgKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBJZiB3ZSdyZSBhbiBBUCwgZG8gbm90aGluZyBoZXJlICovCisJaWYgKGh3LT5hcCkKKwkJZ290byBleGl0OworCisJaWYgKCAoZGV2LT5mbGFncyAmIChJRkZfUFJPTUlTQyB8IElGRl9BTExNVUxUSSkpICE9IDAgKQorCQlwcm9taXNjID0gUDgwMjExRU5VTV90cnV0aF90cnVlOworCWVsc2UKKwkJcHJvbWlzYyA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaHcsIEhGQTM4NHhfUklEX1BST01JU0NNT0RFLCBwcm9taXNjKTsKKworCS8qIFhYWCBUT0RPOiBjb25maWd1cmUgdGhlIG11bHRpY2FzdCBsaXN0ICovCisJLy8gQ0xFQVJfSFdfTVVMVElDQVNUX0xJU1QKKwkvLyBzdHJ1Y3QgZGV2X21jX2xpc3QgZWxlbWVudCA9IGRldi0+bWNfbGlzdDsKKwkvLyB3aGlsZSAoZWxlbWVudCAhPSBudWxsKSB7CisJLy8gIEhXX0FERF9NVUxUSUNBU1RfQUREUihlbGVtZW50LT5kbWlfYWRkciwgZG1pX2FkZHJsZW4pCisJLy8gIGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0OworCS8vIH0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9oYW5kb3ZlcgorKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGEgSGFuZG92ZXIgaW5mbyBmcmFtZS4gU2hvdWxkIG9ubHkgYmUgcHJlc2VudAorKiBpbiBBUHMgb25seS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRygyLCJyZWNlaXZlZCBpbmZvZnJhbWU6SEFORE9WRVIgKHVuaGFuZGxlZClcbiIpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX3RhbGxpZXMKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIENvbW1UYWxsaWVzIGluZm8gZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJVUlOVDE2CQkJKnNyYzE2OworCVVJTlQzMgkJCSpkc3Q7CisJVUlOVDMyCQkJKnNyYzMyOworCWludAkJCWk7CisJaW50CQkJY250OworCisJREJGRU5URVI7CisKKwkvKgorCSoqIERldGVybWluZSBpZiB0aGVzZSBhcmUgMTYtYml0IG9yIDMyLWJpdCB0YWxsaWVzLCBiYXNlZCBvbiB0aGUKKwkqKiByZWNvcmQgbGVuZ3RoIG9mIHRoZSBpbmZvIHJlY29yZC4KKwkqLworCisJY250ID0gc2l6ZW9mKGhmYTM4NHhfQ29tbVRhbGxpZXMzMl90KSAvIHNpemVvZihVSU5UMzIpOworCWlmIChpbmYtPmZyYW1lbGVuID4gMjIpIHsKKwkJZHN0ICAgPSAoVUlOVDMyICopICZody0+dGFsbGllczsKKwkJc3JjMzIgPSAoVUlOVDMyICopICZpbmYtPmluZm8uY29tbXRhbGxpZXMzMjsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBkc3QrKywgc3JjMzIrKykKKwkJCSpkc3QgKz0gaGZhMzg0eDJob3N0XzMyKCpzcmMzMik7CisJfSBlbHNlIHsKKwkJZHN0ICAgPSAoVUlOVDMyICopICZody0+dGFsbGllczsKKwkJc3JjMTYgPSAoVUlOVDE2ICopICZpbmYtPmluZm8uY29tbXRhbGxpZXMxNjsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBkc3QrKywgc3JjMTYrKykKKwkJCSpkc3QgKz0gaGZhMzg0eDJob3N0XzE2KCpzcmMxNik7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIFNjYW4gUmVzdWx0cyBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9zY2FucmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaW50CQkJbmJzczsKKwloZmEzODR4X1NjYW5SZXN1bHRfdAkqc3IgPSAmKGluZi0+aW5mby5zY2FucmVzdWx0KTsKKwlpbnQJCQlpOworCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90CWpvaW5yZXE7CisJaW50CQkJcmVzdWx0OworCURCRkVOVEVSOworCisJLyogR2V0IHRoZSBudW1iZXIgb2YgcmVzdWx0cywgZmlyc3QgaW4gYnl0ZXMsIHRoZW4gaW4gcmVzdWx0cyAqLworCW5ic3MgPSAoaW5mLT5mcmFtZWxlbiAqIHNpemVvZihVSU5UMTYpKSAtCisJCXNpemVvZihpbmYtPmluZm90eXBlKSAtCisJCXNpemVvZihpbmYtPmluZm8uc2NhbnJlc3VsdC5zY2FucmVhc29uKTsKKwluYnNzIC89IHNpemVvZihoZmEzODR4X1NjYW5SZXN1bHRTdWJfdCk7CisKKwkvKiBQcmludCBlbSAqLworCVdMQU5fTE9HX0RFQlVHKDEsInJ4IHNjYW5yZXN1bHRzLCByZWFzb249JWQsIG5ic3M9JWQ6XG4iLAorCQlpbmYtPmluZm8uc2NhbnJlc3VsdC5zY2FucmVhc29uLCBuYnNzKTsKKwlmb3IgKCBpID0gMDsgaSA8IG5ic3M7IGkrKykgeworCQlXTEFOX0xPR19ERUJVRygxLCAiY2hpZD0lZCBhbmw9JWQgc2w9JWQgYmNuaW50PSVkXG4iLAorCQkJc3ItPnJlc3VsdFtpXS5jaGlkLAorCQkJc3ItPnJlc3VsdFtpXS5hbmwsCisJCQlzci0+cmVzdWx0W2ldLnNsLAorCQkJc3ItPnJlc3VsdFtpXS5iY25pbnQpOworCQlXTEFOX0xPR19ERUJVRygxLCAiICBjYXBpbmZvPTB4JTA0eCBwcm9iZXJlc3BfcmF0ZT0lZFxuIiwKKwkJCXNyLT5yZXN1bHRbaV0uY2FwaW5mbywKKwkJCXNyLT5yZXN1bHRbaV0ucHJvYmVyZXNwX3JhdGUpOworCX0KKwkvKiBpc3N1ZSBhIGpvaW4gcmVxdWVzdCAqLworCWpvaW5yZXEuY2hhbm5lbCA9IHNyLT5yZXN1bHRbMF0uY2hpZDsKKwltZW1jcHkoIGpvaW5yZXEuYnNzaWQsIHNyLT5yZXN1bHRbMF0uYnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywKKwkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJJmpvaW5yZXEsIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNUX0xFTik7CisJaWYgKHJlc3VsdCkgeworCQlXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKGpvaW5yZXEpIGZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIFNjYW4gUmVzdWx0cyBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlpbnQJCQluYnNzOworCURCRkVOVEVSOworCisJbmJzcyA9IChpbmYtPmZyYW1lbGVuIC0gMykgLyAzMjsKKwlXTEFOX0xPR19ERUJVRygxLCAiUmVjZWl2ZWQgJWQgaG9zdHNjYW4gcmVzdWx0c1xuIiwgbmJzcyk7CisKKwlpZiAobmJzcyA+IDMyKQorCQluYnNzID0gMzI7CisKKwlpZiAoaHctPnNjYW5yZXN1bHRzKQorCQlrZnJlZShody0+c2NhbnJlc3VsdHMpOworCisJaHctPnNjYW5yZXN1bHRzID0ga21hbGxvYyhzaXplb2YoaGZhMzg0eF9JbmZGcmFtZV90KSwgR0ZQX0FUT01JQyk7CisJbWVtY3B5KGh3LT5zY2FucmVzdWx0cywgaW5mLCBzaXplb2YoaGZhMzg0eF9JbmZGcmFtZV90KSk7CisKKwlpZiAobmJzcyA9PSAwKQorCQluYnNzID0gLTE7CisKKyAgICAgICAgLyogTm90aWZ5L3dha2UgdGhlIHNsZWVwaW5nIGNhbGxlci4gKi8KKyAgICAgICAgaHctPnNjYW5mbGFnID0gbmJzczsKKyAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZody0+Y21kcSk7CisKKwlEQkZFWElUOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cworKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGEgQ2hhbm5lbCBJbmZvIFJlc3VsdHMgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQJCWksIG47CisKKwlEQkZFTlRFUjsKKwlody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMuc2NhbmNoYW5uZWxzID0KKwkJaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQuc2NhbmNoYW5uZWxzKTsKKyNpZiAwCisJbWVtY3B5KCZpbmYtPmluZm8uY2hpbmZvcmVzdWx0LCAmaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLCBzaXplb2YoaGZhMzg0eF9DaEluZm9SZXN1bHRfdCkpOworI2VuZGlmCisKKwlmb3IgKGk9MCwgbj0wOyBpPEhGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWDsgaSsrKSB7CisJCWlmIChody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMuc2NhbmNoYW5uZWxzICYgKDE8PGkpKSB7CisJCQlpbnQgCWNoYW5uZWw9aGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLmNoaWQpLTE7CisJCQloZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90ICpjaGluZm9yZXN1bHQ9Jmh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbY2hhbm5lbF07CisJCQljaGluZm9yZXN1bHQtPmNoaWQgICA9IGNoYW5uZWw7CisJCQljaGluZm9yZXN1bHQtPmFubCAgICA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5hbmwpOworCQkJY2hpbmZvcmVzdWx0LT5wbmwgICAgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0ucG5sKTsKKwkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLmFjdGl2ZSk7CisJCQlXTEFOX0xPR19ERUJVRygyLCAiY2hpbmZvOiBjaGFubmVsICVkLCAlcyBsZXZlbCAoYXZnL3BlYWspPSVkLyVkIGRCLCBwY2YgJWRcbiIsCisJCQkJCWNoYW5uZWwrMSwKKwkJCQkJY2hpbmZvcmVzdWx0LT5hY3RpdmUgJgorCQkJCQlIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUgPyAic2lnbmFsIiA6ICJub2lzZSIsCisJCQkJCWNoaW5mb3Jlc3VsdC0+YW5sLCBjaGluZm9yZXN1bHQtPnBubCwKKwkJCQkJY2hpbmZvcmVzdWx0LT5hY3RpdmUgJiBIRkEzODR4X0NISU5GT1JFU1VMVF9QQ0ZBQ1RJVkUgPyAxIDogMAorCQkJKTsKKwkJCW4rKzsKKwkJfQorCX0KKwlhdG9taWNfc2V0KCZody0+Y2hhbm5lbF9pbmZvLmRvbmUsIDIpOworCisJaHctPmNoYW5uZWxfaW5mby5jb3VudCA9IG47CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKK3ZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCWhmYTM4NHhfdAkJKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCBsaW5rX2JoKTsKKwl3bGFuZGV2aWNlX3QgICAgICAgICAgICAqd2xhbmRldiA9IGh3LT53bGFuZGV2OworCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKKwlpbnQJCQlyZXN1bHQ7CisKKwlEQkZFTlRFUjsKKwkvKiBGaXJzdCBsZXQncyBwcm9jZXNzIHRoZSBhdXRoIGZyYW1lcyAqLworCXsKKwkJc3RydWN0IHNrX2J1ZmYgICAgICAgICAgKnNrYjsKKwkJaGZhMzg0eF9JbmZGcmFtZV90ICppbmY7CisKKwkJd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJmh3LT5hdXRocSkpICkgeworCQkJaW5mID0gKGhmYTM4NHhfSW5mRnJhbWVfdCAqKSBza2ItPmRhdGE7CisJCQlwcmlzbTJzdGFfaW5mX2F1dGhyZXFfZGVmZXIod2xhbmRldiwgaW5mKTsKKwkJfQorCisJfQorCisJLyogTm93IGxldCdzIGhhbmRsZSB0aGUgbGlua3N0YXR1cyBzdHVmZiAqLworCWlmIChody0+bGlua19zdGF0dXMgPT0gaHctPmxpbmtfc3RhdHVzX25ldykKKwkJZ290byBmYWlsZWQ7CisKKwlody0+bGlua19zdGF0dXMgPSBody0+bGlua19zdGF0dXNfbmV3OworCisJc3dpdGNoKGh3LT5saW5rX3N0YXR1cykgeworCWNhc2UgSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDoKKwkJLyogSSdtIGN1cnJlbnRseSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgdGhlIGluaXRpYWwgbGluaworCQkgKiBzdGF0ZS4gIEl0IHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGltbWVkaWF0ZWx5CisJCSAqIGZvbGxvd2luZyBhbiBFbmFibGUgY29tbWFuZC4KKwkJICogUmVzcG9uc2U6CisJCSAqIEJsb2NrIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCisJCSAqLworCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOworCisJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9Tk9UQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19DT05ORUNURUQ6CisJCS8qIFRoaXMgb25lIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwgc2Nhbi9qb2luL2F1dGgvYXNzb2MuCisJCSAqIFdoZW4gd2UgaGF2ZSB0aGUgZnVsbCBNTE1FIGNvbXBsZW1lbnQsIHRoaXMgZXZlbnQgd2lsbAorCQkgKiBzaWduaWZ5IHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBib3RoIG1sbWVfYXV0aGVudGljYXRlCisJCSAqIGFuZCBtbG1lX2Fzc29jaWF0ZS4gIFN0YXRlIG1hbmFnZW1lbnQgd2lsbCBnZXQgYSBsaXR0bGUKKwkJICogdWdseSBoZXJlLgorCQkgKiBSZXNwb25zZToKKwkJICogSW5kaWNhdGUgYXV0aGVudGljYXRpb24gYW5kL29yIGFzc29jaWF0aW9uCisJCSAqIEVuYWJsZSBUcmFuc21pdHMsIFJlY2VpdmVzIGFuZCBwYXNzIHVwIGRhdGEgZnJhbWVzCisJCSAqLworCisJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKKworCQkvKiBJZiB3ZSBhcmUgam9pbmluZyBhIHNwZWNpZmljIEFQLCBzZXQgb3VyIHN0YXRlIGFuZCByZXNldCByZXRyaWVzICovCisJCWlmKGh3LT5qb2luX2FwID09IDEpCisJCQlody0+am9pbl9hcCA9IDI7CisJCWh3LT5qb2luX3JldHJpZXMgPSA2MDsKKworCQkvKiBEb24ndCBjYWxsIHRoaXMgaW4gbW9uaXRvciBtb2RlICovCisJCWlmICggd2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUiApIHsKKwkJCVVJTlQxNgkJCXBvcnRzdGF0dXM7CisKKwkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9Q09OTkVDVEVEXG4iKTsKKworCQkJLyogRm9yIG5vbi11c2IgZGV2aWNlcywgd2UgY2FuIHVzZSB0aGUgc3luYyB2ZXJzaW9ucyAqLworCQkJLyogQ29sbGVjdCB0aGUgQlNTSUQsIGFuZCBzZXQgc3RhdGUgdG8gYWxsb3cgdHggKi8KKworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsCisJCQkJCQkJd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKKwkJCWlmICggcmVzdWx0ICkgeworCQkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwKKwkJCQkJCQkmc3NpZCwgc2l6ZW9mKHNzaWQpKTsKKwkJCWlmICggcmVzdWx0ICkgeworCQkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCisJCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CisKKwkJCS8qIENvbGxlY3QgdGhlIHBvcnQgc3RhdHVzICovCisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCisJCQkJCQkJICBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCAmcG9ydHN0YXR1cyk7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCByZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQkJd2xhbmRldi0+bWFjbW9kZSA9CisJCQkJKHBvcnRzdGF0dXMgPT0gSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUykgPworCQkJCVdMQU5fTUFDTU9ERV9JQlNTX1NUQSA6IFdMQU5fTUFDTU9ERV9FU1NfU1RBOworCisJCQkvKiBHZXQgdGhlIGJhbGwgcm9sbGluZyBvbiB0aGUgY29tbXMgcXVhbGl0eSBzdHVmZiAqLworCQkJcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcigmaHctPmNvbW1zcXVhbF9iaCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19ESVNDT05ORUNURUQ6CisJCS8qIFRoaXMgb25lIGluZGljYXRlcyB0aGF0IG91ciBhc3NvY2lhdGlvbiBpcyBnb25lLiAgV2UndmUKKwkJICogbG9zdCBjb25uZWN0aW9uIHdpdGggdGhlIEFQIGFuZC9vciBiZWVuIGRpc2Fzc29jaWF0ZWQuCisJCSAqIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIE1BQyBoYXMgY29tcGxldGVseSBjbGVhcmVkIGl0J3MKKwkJICogYXNzb2NpYXRlZCBzdGF0ZS4gIFdlICogc2hvdWxkIHNlbmQgYSBkZWF1dGggaW5kaWNhdGlvbgorCQkgKiAoaW1wbHlpbmcgZGlzYXNzb2MpIHVwICogdG8gdGhlIE1MTUUuCisJCSAqIFJlc3BvbnNlOgorCQkgKiBJbmRpY2F0ZSBEZWF1dGhlbnRpY2F0aW9uCisJCSAqIEJsb2NrIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCisJCSAqLworCQlpZihody0+am9pbl9hcCA9PSAyKQorCQl7CisJCQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCAgICAgIGpvaW5yZXE7CisJCQlqb2lucmVxID0gaHctPmpvaW5yZXE7CisJCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KKwkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAorCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOworCQl9IGVsc2UgeworCQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpCisJCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOworCQl9CisJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKworCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOworCisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfQVBfQ0hBTkdFOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgdGhhdCB0aGUgTUFDIGhhcyBkZWNpZGVkIHRvIGFuZAorCQkgKiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIGEgY2hhbmdlIHRvIGFub3RoZXIgQVAuICBXZQorCQkgKiBzaG91bGQgcHJvYmFibHkgaW1wbGVtZW50IGEgcmVhc3NvY2lhdGlvbiBpbmRpY2F0aW9uCisJCSAqIGluIHJlc3BvbnNlIHRvIHRoaXMgb25lLiAgSSdtIHRoaW5raW5nIHRoYXQgdGhlIHRoZQorCQkgKiBwODAyMTEgbGF5ZXIgbmVlZHMgdG8gYmUgbm90aWZpZWQgaW4gY2FzZSBvZgorCQkgKiBidWZmZXJpbmcvcXVldWVpbmcgaXNzdWVzLiAgVXNlciBtb2RlIGFsc28gbmVlZHMgdG8gYmUKKwkJICogbm90aWZpZWQgc28gdGhhdCBhbnkgQlNTIGRlcGVuZGVudCBlbGVtZW50cyBjYW4gYmUKKwkJICogdXBkYXRlZC4KKwkJICogYXNzb2NpYXRlZCBzdGF0ZS4gIFdlICogc2hvdWxkIHNlbmQgYSBkZWF1dGggaW5kaWNhdGlvbgorCQkgKiAoaW1wbHlpbmcgZGlzYXNzb2MpIHVwICogdG8gdGhlIE1MTUUuCisJCSAqIFJlc3BvbnNlOgorCQkgKiBJbmRpY2F0ZSBSZWFzc29jaWF0aW9uCisJCSAqIEVuYWJsZSBUcmFuc21pdHMsIFJlY2VpdmVzIGFuZCBwYXNzIHVwIGRhdGEgZnJhbWVzCisJCSAqLworCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX0NIQU5HRVxuIik7CisKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwKKwkJCQkJCXdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAorCQkJCQkJJnNzaWQsIHNpemVvZihzc2lkKSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCisJCQkJCShwODAyMTFwc3RyZF90ICopICZ3bGFuZGV2LT5zc2lkKTsKKworCisJCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19DT05ORUNURUQ7CisJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9MSU5LX0FQX09VVE9GUkFOR0U6CisJCS8qIFRoaXMgb25lIGluZGljYXRlcyB0aGF0IHRoZSBNQUMgaGFzIGRlY2lkZWQgdGhhdCB0aGUKKwkJICogQVAgaXMgb3V0IG9mIHJhbmdlLCBidXQgaGFzbid0IGZvdW5kIGEgYmV0dGVyIGNhbmRpZGF0ZQorCQkgKiBzbyB0aGUgTUFDIG1haW50YWlucyBpdHMgImFzc29jaWF0ZWQiIHN0YXRlIGluIGNhc2UKKwkJICogd2UgZ2V0IGJhY2sgaW4gcmFuZ2UuICBXZSBzaG91bGQgYmxvY2sgdHJhbnNtaXRzIGFuZAorCQkgKiByZWNlaXZlcyBpbiB0aGlzIHN0YXRlLiAgRG8gd2UgbmVlZCBhbiBpbmRpY2F0aW9uIGhlcmU/CisJCSAqIFByb2JhYmx5IG5vdCBzaW5jZSBhIHBvbGxpbmcgdXNlci1tb2RlIGVsZW1lbnQgd291bGQKKwkJICogZ2V0IHRoaXMgc3RhdHVzIGZyb20gZnJvbSBwMlBvcnRTdGF0dXMoRkQ0MCkuIFdoYXQgYWJvdXQKKwkJICogcDgwMjExPworCQkgKiBSZXNwb25zZToKKwkJICogQmxvY2sgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKKwkJICovCisJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVBfT1VUT0ZSQU5HRSAodW5oYW5kbGVkKVxuIik7CisKKwkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9MSU5LX0FQX0lOUkFOR0U6CisJCS8qIFRoaXMgb25lIGluZGljYXRlcyB0aGF0IHRoZSBNQUMgaGFzIGRlY2lkZWQgdGhhdCB0aGUKKwkJICogQVAgaXMgYmFjayBpbiByYW5nZS4gIFdlIGNvbnRpbnVlIHdvcmtpbmcgd2l0aCBvdXIKKwkJICogZXhpc3RpbmcgYXNzb2NpYXRpb24uCisJCSAqIFJlc3BvbnNlOgorCQkgKiBFbmFibGUgVHJhbnNtaXRzLCBSZWNlaXZlcyBhbmQgcGFzcyB1cCBkYXRhIGZyYW1lcworCQkgKi8KKwkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BUF9JTlJBTkdFXG4iKTsKKworCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOworCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CisKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19BU1NPQ0ZBSUw6CisJCS8qIFRoaXMgb25lIGlzIGFjdHVhbGx5IGEgcGVlciB0byBDT05ORUNURUQuICBXZSd2ZQorCQkgKiByZXF1ZXN0ZWQgYSBqb2luIGZvciBhIGdpdmVuIFNTSUQgYW5kIG9wdGlvbmFsbHkgQlNTSUQuCisJCSAqIFdlIGNhbiB1c2UgdGhpcyBvbmUgdG8gaW5kaWNhdGUgYXV0aGVudGljYXRpb24gYW5kCisJCSAqIGFzc29jaWF0aW9uIGZhaWx1cmVzLiAgVGhlIHRyaWNrIGlzIGdvaW5nIHRvIGJlCisJCSAqIDEpIGlkZW50aWZ5aW5nIHRoZSBmYWlsdXJlLCBhbmQgMikgc3RhdGUgbWFuYWdlbWVudC4KKwkJICogUmVzcG9uc2U6CisJCSAqIERpc2FibGUgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKKwkJICovCisJCWlmKGh3LT5qb2luX2FwICYmIC0taHctPmpvaW5fcmV0cmllcyA+IDApCisJCXsKKwkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90ICAgICAgam9pbnJlcTsKKwkJCWpvaW5yZXEgPSBody0+am9pbnJlcTsKKwkJCS8qIFNlbmQgdGhlIGpvaW4gcmVxdWVzdCAqLworCQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisJCQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QsCisJCQkJJmpvaW5yZXEsIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNUX0xFTik7CisJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFTU09DRkFJTCAocmUtc3VibWl0dGluZyBqb2luKVxuIik7CisJCX0gZWxzZSB7CisJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFTU09DRkFJTCAodW5oYW5kbGVkKVxuIik7CisJCX0KKworCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogVGhpcyBpcyBiYWQsIElPIHBvcnQgcHJvYmxlbXM/ICovCisJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkidW5rbm93biBsaW5rc3RhdHVzPTB4JTAyeFxuIiwgaHctPmxpbmtfc3RhdHVzKTsKKwkJZ290byBmYWlsZWQ7CisJCWJyZWFrOworCX0KKworCXdsYW5kZXYtPmxpbmtzdGF0dXMgPSAoaHctPmxpbmtfc3RhdHVzID09IEhGQTM4NHhfTElOS19DT05ORUNURUQpOworI2lmZGVmIFdJUkVMRVNTX0VYVAorCXA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZCh3bGFuZGV2LCB3bGFuZGV2LT5saW5rc3RhdHVzKTsKKyNlbmRpZgorCisgZmFpbGVkOgorCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIExpbmsgU3RhdHVzIGluZm8gZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCisJREJGRU5URVI7CisKKwlody0+bGlua19zdGF0dXNfbmV3ID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5saW5rc3RhdHVzLmxpbmtzdGF0dXMpOworCisJc2NoZWR1bGVfd29yaygmaHctPmxpbmtfYmgpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYW4gQXNzb2NpYXRpb24gU3RhdHVzIGluZm8gZnJhbWUuIFNob3VsZAorKiBiZSBwcmVzZW50IGluIEFQcyBvbmx5LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfQXNzb2NTdGF0dXNfdAlyZWM7CisJaW50CQkJaTsKKworCURCRkVOVEVSOworCisJbWVtY3B5KCZyZWMsICZpbmYtPmluZm8uYXNzb2NzdGF0dXMsIHNpemVvZihyZWMpKTsKKwlyZWMuYXNzb2NzdGF0dXMgPSBoZmEzODR4Mmhvc3RfMTYocmVjLmFzc29jc3RhdHVzKTsKKwlyZWMucmVhc29uICAgICAgPSBoZmEzODR4Mmhvc3RfMTYocmVjLnJlYXNvbik7CisKKwkvKgorCSoqIEZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gIElmIGl0IHdhc24ndAorCSoqIGZvdW5kLCB0aGVuIHRoaXMgYWRkcmVzcyBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBhdXRoZW50aWNhdGVkIGFuZAorCSoqIHNvbWV0aGluZyB3ZWlyZCBoYXMgaGFwcGVuZWQgaWYgdGhpcyBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuCisJKiogImF1dGhlbnRpY2F0aW9uIGZhaWxlZCIgbWVzc2FnZS4gIElmIHRoZSBhZGRyZXNzIHdhcyBmb3VuZCwgdGhlbgorCSoqIHNldCB0aGUgImFzc29jaWF0ZWQiIGZsYWcgZm9yIHRoYXQgc3RhdGlvbiwgYmFzZWQgb24gd2hldGhlciB0aGUKKwkqKiBzdGF0aW9uIGlzIGFzc29jaWF0aW5nIG9yIGxvc2luZyBpdHMgYXNzb2NpYXRpb24uICBTb21ldGhpbmcgd2VpcmQKKwkqKiBoYXMgYWxzbyBoYXBwZW5lZCBpZiB3ZSBmaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQKKwkqKiBzdGF0aW9ucyBidXQgd2UgYXJlIGdldHRpbmcgYW4gImF1dGhlbnRpY2F0aW9uIGZhaWxlZCIgbWVzc2FnZS4KKwkqLworCisJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKKwkJaWYgKG1lbWNtcChyZWMuc3RhX2FkZHIsIGh3LT5hdXRobGlzdC5hZGRyW2ldLCBXTEFOX0FERFJfTEVOKSA9PSAwKQorCQkJYnJlYWs7CisKKwlpZiAoaSA+PSBody0+YXV0aGxpc3QuY250KSB7CisJCWlmIChyZWMuYXNzb2NzdGF0dXMgIT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTCkKKwkJCVdMQU5fTE9HX1dBUk5JTkcoImFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIG5vbi1hdXRoZW50aWNhdGVkIHN0YXRpb24uXG4iKTsKKwl9IGVsc2UgeworCQlody0+YXV0aGxpc3QuYXNzb2NbaV0gPQorCQkJKHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1NUQUFTU09DIHx8CisJCQkgcmVjLmFzc29jc3RhdHVzID09IEhGQTM4NHhfQVNTT0NTVEFUVVNfUkVBU1NPQyk7CisKKwkJaWYgKHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX0FVVEhGQUlMKQorCQkJV0xBTl9MT0dfV0FSTklORygiYXV0aGZhaWwgYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3IgYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfYXV0aHJlcQorKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGFuIEF1dGhlbnRpY2F0aW9uIFJlcXVlc3QgaW5mbyBmcmFtZS4gU2hvdWxkCisqIGJlIHByZXNlbnQgaW4gQVBzIG9ubHkuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2F1dGhyZXEod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlEQkZFTlRFUjsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCppbmYpKTsKKwlpZiAoc2tiKSB7CisJCXNrYl9wdXQoc2tiLCBzaXplb2YoKmluZikpOworCQltZW1jcHkoc2tiLT5kYXRhLCBpbmYsIHNpemVvZigqaW5mKSk7CisJCXNrYl9xdWV1ZV90YWlsKCZody0+YXV0aHEsIHNrYik7CisJCXNjaGVkdWxlX3dvcmsoJmh3LT5saW5rX2JoKTsKKwl9CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2F1dGhyZXFfZGVmZXIod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQloZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdCAgcmVjOworCisJaW50ICAgIGksIGFkZGVkLCByZXN1bHQsIGNudDsKKwlVSU5UOCAgKmFkZHI7CisKKwlEQkZFTlRFUjsKKworCS8qCisJKiogQnVpbGQgdGhlIEF1dGhlbnRpY2F0ZVN0YXRpb24gcmVjb3JkLiAgSW5pdGlhbGl6ZSBpdCBmb3IgZGVueWluZworCSoqIGF1dGhlbnRpY2F0aW9uLgorCSovCisKKwltZW1jcHkocmVjLmFkZHJlc3MsIGluZi0+aW5mby5hdXRocmVxLnN0YV9hZGRyLCBXTEFOX0FERFJfTEVOKTsKKwlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmU7CisKKwkvKgorCSoqIEF1dGhlbnRpY2F0ZSBiYXNlZCBvbiB0aGUgYWNjZXNzIG1vZGUuCisJKi8KKworCXN3aXRjaCAoaHctPmFjY2Vzc21vZGUpIHsKKwkJY2FzZSBXTEFOX0FDQ0VTU19OT05FOgorCisJCQkvKgorCQkJKiogRGVueSBhbGwgbmV3IGF1dGhlbnRpY2F0aW9ucy4gIEhvd2V2ZXIsIGlmIGEgc3RhdGlvbgorCQkJKiogaXMgQUxSRUFEWSBhdXRoZW50aWNhdGVkLCB0aGVuIGFjY2VwdCBpdC4KKwkJCSovCisKKwkJCWZvciAoaSA9IDA7IGkgPCBody0+YXV0aGxpc3QuY250OyBpKyspCisJCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sCisJCQkJCQlXTEFOX0FERFJfTEVOKSA9PSAwKSB7CisJCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9BQ0NFU1NfQUxMOgorCisJCQkvKgorCQkJKiogQWxsb3cgYWxsIGF1dGhlbnRpY2F0aW9ucy4KKwkJCSovCisKKwkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0FDQ0VTU19BTExPVzoKKworCQkJLyoKKwkJCSoqIE9ubHkgYWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIGlmIHRoZSBNQUMgYWRkcmVzcworCQkJKiogaXMgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBhZGRyZXNzZXMuCisJCQkqKgorCQkJKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCisJCQkqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZworCQkJKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KKwkJCSoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3coKSIgZm9yIGRldGFpbHMuCisJCQkqLworCisJCQlpZiAoaHctPmFsbG93Lm1vZGlmeSA9PSAwKSB7CisJCQkJY250ICA9IGh3LT5hbGxvdy5jbnQ7CisJCQkJYWRkciA9IGh3LT5hbGxvdy5hZGRyWzBdOworCQkJfSBlbHNlIHsKKwkJCQljbnQgID0gaHctPmFsbG93LmNudDE7CisJCQkJYWRkciA9IGh3LT5hbGxvdy5hZGRyMVswXTsKKwkJCX0KKworCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBhZGRyICs9IFdMQU5fQUREUl9MRU4pCisJCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgYWRkciwgV0xBTl9BRERSX0xFTikgPT0gMCkgeworCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFdMQU5fQUNDRVNTX0RFTlk6CisKKwkJCS8qCisJCQkqKiBBbGxvdyB0aGUgYXV0aGVudGljYXRpb24gVU5MRVNTIHRoZSBNQUMgYWRkcmVzcyBpcworCQkJKiogaW4gdGhlIGxpc3Qgb2YgZGVuaWVkIGFkZHJlc3Nlcy4KKwkJCSoqCisJCQkqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKKwkJCSoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCisJCQkqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgorCQkJKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NkZW55KCkiIGZvciBkZXRhaWxzLgorCQkJKi8KKworCQkJaWYgKGh3LT5kZW55Lm1vZGlmeSA9PSAwKSB7CisJCQkJY250ICA9IGh3LT5kZW55LmNudDsKKwkJCQlhZGRyID0gaHctPmRlbnkuYWRkclswXTsKKwkJCX0gZWxzZSB7CisJCQkJY250ICA9IGh3LT5kZW55LmNudDE7CisJCQkJYWRkciA9IGh3LT5kZW55LmFkZHIxWzBdOworCQkJfQorCisJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKworCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBhZGRyICs9IFdMQU5fQUREUl9MRU4pCisJCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgYWRkciwgV0xBTl9BRERSX0xFTikgPT0gMCkgeworCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmU7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJYnJlYWs7CisJfQorCisJLyoKKwkqKiBJZiB0aGUgYXV0aGVudGljYXRpb24gaXMgb2theSwgdGhlbiBhZGQgdGhlIE1BQyBhZGRyZXNzIHRvIHRoZSBsaXN0CisJKiogb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gIERvbid0IGFkZCB0aGUgYWRkcmVzcyBpZiBpdCBpcyBhbHJlYWR5IGluCisJKiogdGhlIGxpc3QuICAoODAyLjExYiBkb2VzIG5vdCBzZWVtIHRvIGRpc2FsbG93IGEgc3RhdGlvbiBmcm9tIGlzc3VpbmcKKwkqKiBhbiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHdoZW4gdGhlIHN0YXRpb24gaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkLgorCSoqIERvZXMgdGhpcyBzb3J0IG9mIHRoaW5nIGV2ZXIgaGFwcGVuPyAgV2UgbWlnaHQgYXMgd2VsbCBkbyB0aGUgY2hlY2sKKwkqKiBqdXN0IGluIGNhc2UuKQorCSovCisKKwlhZGRlZCA9IDA7CisKKwlpZiAocmVjLnN0YXR1cyA9PSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsKSB7CisJCWZvciAoaSA9IDA7IGkgPCBody0+YXV0aGxpc3QuY250OyBpKyspCisJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBody0+YXV0aGxpc3QuYWRkcltpXSwgV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCQlicmVhazsKKworCQlpZiAoaSA+PSBody0+YXV0aGxpc3QuY250KSB7CisJCQlpZiAoaHctPmF1dGhsaXN0LmNudCA+PSBXTEFOX0FVVEhfTUFYKSB7CisJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX2FwX2Z1bGw7CisJCQl9IGVsc2UgeworCQkJCW1lbWNweShody0+YXV0aGxpc3QuYWRkcltody0+YXV0aGxpc3QuY250XSwKKwkJCQkJcmVjLmFkZHJlc3MsIFdMQU5fQUREUl9MRU4pOworCQkJCWh3LT5hdXRobGlzdC5jbnQrKzsKKwkJCQlhZGRlZCA9IDE7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSoqIFNlbmQgYmFjayB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0aGVudGljYXRpb24uICBJZiB0aGlzIGRvZXNuJ3Qgd29yaywKKwkqKiB0aGVuIG1ha2Ugc3VyZSB0byByZW1vdmUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgYXV0aGVudGljYXRlZCBsaXN0IGlmCisJKiogaXQgd2FzIGFkZGVkLgorCSovCisKKwlyZWMuc3RhdHVzID0gaG9zdDJoZmEzODR4XzE2KHJlYy5zdGF0dXMpOworCXJlYy5hbGdvcml0aG0gPSBpbmYtPmluZm8uYXV0aHJlcS5hbGdvcml0aG07CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9BVVRIRU5USUNBVEVTVEEsCisJCQkJCQkJJnJlYywgc2l6ZW9mKHJlYykpOworCWlmIChyZXN1bHQpIHsKKwkJaWYgKGFkZGVkKSBody0+YXV0aGxpc3QuY250LS07CisJCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoYXV0aGVudGljYXRlc3RhdGlvbikgZmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9wc3VzZXJjbnQKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIFBvd2VyU2F2ZVVzZXJDb3VudCBpbmZvIGZyYW1lLiBTaG91bGQKKyogYmUgcHJlc2VudCBpbiBBUHMgb25seS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfcHN1c2VyY250KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCisJREJGRU5URVI7CisKKwlody0+cHN1c2VyY291bnQgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLnBzdXNlcmNudC51c2VyY250KTsKKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZXZfZHRpbQorKgorKiBIYW5kbGVzIHRoZSBEVElNIGVhcmx5IHdhcm5pbmcgZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl9kdGltKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKyNpZiAwCisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworI2VuZGlmCisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoMywgIkRUSU0gZXZlbnQsIGN1cnJlbnRseSB1bmhhbmRsZWQuXG4iKTsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X2luZmRyb3AKKyoKKyogSGFuZGxlcyB0aGUgSW5mRHJvcCBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X2luZmRyb3Aod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworI2lmIDAKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisjZW5kaWYKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRygzLCAiSW5mbyBmcmFtZSBkcm9wcGVkIGR1ZSB0byBjYXJkIG1lbSBsb3cuXG4iKTsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X2luZm8KKyoKKyogSGFuZGxlcyB0aGUgSW5mbyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gYSBnZW5lcmljIGluZm8gZnJhbWUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKwlEQkZFTlRFUjsKKwlpbmYtPmluZm90eXBlID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mb3R5cGUpOworCS8qIERpc3BhdGNoICovCisJc3dpdGNoICggaW5mLT5pbmZvdHlwZSApIHsKKwkJY2FzZSBIRkEzODR4X0lUX0hBTkRPVkVSQUREUjoKKwkJCXByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfQ09NTVRBTExJRVM6CisJCQlwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworICAgICAgICAgICAgICAgY2FzZSBIRkEzODR4X0lUX0hPU1RTQ0FOUkVTVUxUUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzKHdsYW5kZXYsIGluZik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX1NDQU5SRVNVTFRTOgorCQkJcHJpc20yc3RhX2luZl9zY2FucmVzdWx0cyh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9DSElORk9SRVNVTFRTOgorCQkJcHJpc20yc3RhX2luZl9jaGluZm9yZXN1bHRzKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX0xJTktTVEFUVVM6CisJCQlwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfQVNTT0NTVEFUVVM6CisJCQlwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX0FVVEhSRVE6CisJCQlwcmlzbTJzdGFfaW5mX2F1dGhyZXEod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfUFNVU0VSQ05UOgorCQkJcHJpc20yc3RhX2luZl9wc3VzZXJjbnQod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCSAgICAgICAgY2FzZSBIRkEzODR4X0lUX0tFWUlEQ0hBTkdFRDoKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIlVuaGFuZGxlZCBJVF9LRVlJRENIQU5HRURcbiIpOworCQkJYnJlYWs7CisJICAgICAgICBjYXNlIEhGQTM4NHhfSVRfQVNTT0NSRVE6CisJCQlXTEFOX0xPR19XQVJOSU5HKCJVbmhhbmRsZWQgSVRfQVNTT0NSRVFcbiIpOworCQkJYnJlYWs7CisJICAgICAgICBjYXNlIEhGQTM4NHhfSVRfTUlDRkFJTFVSRToKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIlVuaGFuZGxlZCBJVF9NSUNGQUlMVVJFXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0xBTl9MT0dfV0FSTklORygKKwkJCQkiVW5rbm93biBpbmZvIHR5cGU9MHglMDJ4XG4iLCBpbmYtPmluZm90eXBlKTsKKwkJCWJyZWFrOworCX0KKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X3R4ZXhjCisqCisqIEhhbmRsZXMgdGhlIFR4RXhjIGV2ZW50LiAgQSBUcmFuc21pdCBFeGNlcHRpb24gZXZlbnQgaW5kaWNhdGVzCisqIHRoYXQgdGhlIE1BQydzIFRYIHByb2Nlc3Mgd2FzIHVuc3VjY2Vzc2Z1bCAtIHNvIHRoZSBwYWNrZXQgZGlkCisqIG5vdCBnZXQgdHJhbnNtaXR0ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCXN0YXR1cwkJdHggZnJhbWUgc3RhdHVzIHdvcmQKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHN0YXR1cykKK3sKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX0RFQlVHKDMsICJUeEV4YyBzdGF0dXM9MHgleC5cbiIsIHN0YXR1cyk7CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X3R4CisqCisqIEhhbmRsZXMgdGhlIFR4IGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglzdGF0dXMJCXR4IGZyYW1lIHN0YXR1cyB3b3JkCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBzdGF0dXMpCit7CisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoNCwgIlR4IENvbXBsZXRlLCBzdGF0dXM9MHglMDR4XG4iLCBzdGF0dXMpOworCS8qIHVwZGF0ZSBsaW51eCBuZXR3b3JrIHN0YXRzICovCisJd2xhbmRldi0+bGludXhfc3RhdHMudHhfcGFja2V0cysrOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZXZfcngKKyoKKyogSGFuZGxlcyB0aGUgUnggZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJREJGRU5URVI7CisKKwlwODAyMTFuZXRkZXZfcngod2xhbmRldiwgc2tiKTsKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X2FsbG9jCisqCisqIEhhbmRsZXMgdGhlIEFsbG9jIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisJcDgwMjExbmV0ZGV2X3dha2VfcXVldWUod2xhbmRldik7CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCB8fCBXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcHJpc20yc3RhX3N1c3BlbmRfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisgICAgICAgCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisKKwl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiByZXNldCBoYXJkd2FyZSAqLworCWlmICh3bGFuZGV2KSB7CisJCXByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlKTsKKwkJcDgwMjExX3N1c3BlbmQod2xhbmRldik7CisJfQorCisJLy8gY2FsbCBhIG5ldGlmX2RldmljZV9kZXRhY2god2xhbmRldi0+bmV0ZGV2KSA/CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmlzbTJzdGFfcmVzdW1lX3BjaSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisgICAgICAgCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisKKwl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAod2xhbmRldikgeworCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisJCXA4MDIxMV9yZXN1bWUod2xhbmRldik7CisJfQorCisgICAgICAgIHJldHVybiAwOworfQorI2VuZGlmCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGNyZWF0ZV93bGFuCisqCisqIENhbGxlZCBhdCBtb2R1bGUgaW5pdCB0aW1lLiAgVGhpcyBjcmVhdGVzIHRoZSB3bGFuZGV2aWNlX3Qgc3RydWN0dXJlCisqIGFuZCBpbml0aWFsaXplcyBpdCB3aXRoIHJlbGV2YW50IGJpdHMuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKgl0aGUgY3JlYXRlZCB3bGFuZGV2aWNlX3Qgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqIAlhbHNvIGFsbG9jYXRlcyB0aGUgcHJpdi9odyBzdHJ1Y3R1cmVzLgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB3bGFuZGV2aWNlX3QgKmNyZWF0ZV93bGFuKHZvaWQpCit7CisgICAgICAgIHdsYW5kZXZpY2VfdCAgICAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90CSpodyA9IE5VTEw7CisKKyAgICAgIAkvKiBBbGxvYyBvdXIgc3RydWN0dXJlcyAqLworCXdsYW5kZXYgPQlrbWFsbG9jKHNpemVvZih3bGFuZGV2aWNlX3QpLCBHRlBfS0VSTkVMKTsKKwlodyA9CQlrbWFsbG9jKHNpemVvZihoZmEzODR4X3QpLCBHRlBfS0VSTkVMKTsKKworCWlmICghd2xhbmRldiB8fCAhaHcpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgZGV2X2luZm8pOworCQlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7CisJCWlmIChodykJCWtmcmVlKGh3KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogQ2xlYXIgYWxsIHRoZSBzdHJ1Y3RzICovCisJbWVtc2V0KHdsYW5kZXYsIDAsIHNpemVvZih3bGFuZGV2aWNlX3QpKTsKKwltZW1zZXQoaHcsIDAsIHNpemVvZihoZmEzODR4X3QpKTsKKworCS8qIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgZGV2aWNlIG9iamVjdC4gKi8KKwl3bGFuZGV2LT5uc2RuYW1lID0gZGV2X2luZm87CisJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlRfUEVORElORzsKKwl3bGFuZGV2LT5wcml2ID0gaHc7CisJd2xhbmRldi0+b3BlbiA9IHByaXNtMnN0YV9vcGVuOworCXdsYW5kZXYtPmNsb3NlID0gcHJpc20yc3RhX2Nsb3NlOworCXdsYW5kZXYtPnJlc2V0ID0gcHJpc20yc3RhX3Jlc2V0OworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJd2xhbmRldi0+bnNkX3Byb2NfcmVhZCA9IHByaXNtMnN0YV9wcm9jX3JlYWQ7CisjZW5kaWYKKwl3bGFuZGV2LT50eGZyYW1lID0gcHJpc20yc3RhX3R4ZnJhbWU7CisJd2xhbmRldi0+bWxtZXJlcXVlc3QgPSBwcmlzbTJzdGFfbWxtZXJlcXVlc3Q7CisJd2xhbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcHJpc20yc3RhX3NldG11bHRpY2FzdDsKKwl3bGFuZGV2LT50eF90aW1lb3V0ID0gaGZhMzg0eF90eF90aW1lb3V0OworCisJd2xhbmRldi0+bnNkY2FwcyA9IFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCB8CisJICAgICAgICAgICAgICAgICAgIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU47CisKKwkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0dWN0dXJlLiAqLworICAgICAgICBody0+ZG90MTFfZGVzaXJlZF9ic3NfdHlwZSA9IDE7CisKKwlyZXR1cm4gd2xhbmRldjsKK30KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgaW50CitwcmlzbTJzdGFfcHJvY19yZWFkKAorCWNoYXIJKnBhZ2UsCisJY2hhcgkqKnN0YXJ0LAorCW9mZl90CW9mZnNldCwKKwlpbnQJY291bnQsCisJaW50CSplb2YsCisJdm9pZAkqZGF0YSkKK3sKKwljaGFyCSAqcCA9IHBhZ2U7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSBkYXRhOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisKKwlVSU5UMTYgaHd0eXBlID0gMDsKKworCURCRkVOVEVSOworCWlmIChvZmZzZXQgIT0gMCkgeworCQkqZW9mID0gMTsKKwkJZ290byBleGl0OworCX0KKworCS8vIFhYWCAweDAwMDEgZm9yIHByaXNtMi41LzMsIDB4MDAwMCBmb3IgcHJpc20yLgorCWh3dHlwZSA9IEJJVDA7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJaWYgKGh3LT5pc3JhbTE2KQorCQlod3R5cGUgfD0gQklUMTsKKyNlbmRpZgorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCWh3dHlwZSB8PSBCSVQyOworI2VuZGlmCisKKyNkZWZpbmUgUFJJU00yX0NWU19JRCAiJElkOiBwcmlzbTJzdGEuYyAxODI2IDIwMDctMDMtMTkgMTU6Mzc6MDBaIHBpenphICQiCisKKwlwICs9IHNwcmludGYocCwgIiMgJXMgdmVyc2lvbiAlcyAoJXMpICclcydcblxuIiwKKwkJICAgICBkZXZfaW5mbywKKwkJICAgICBXTEFOX1JFTEVBU0UsIFdMQU5fQlVJTERfREFURSwgUFJJU00yX0NWU19JRCk7CisKKwlwICs9IHNwcmludGYocCwgIiMgbmljIGgvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkgICAgIGh3LT5pZGVudF9uaWMuaWQsIGh3LT5pZGVudF9uaWMubWFqb3IsCisJCSAgICAgaHctPmlkZW50X25pYy5taW5vciwgaHctPmlkZW50X25pYy52YXJpYW50KTsKKworCXAgKz0gc3ByaW50ZihwLCAiIyBwcmkgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCSAgICAgaHctPmlkZW50X3ByaV9mdy5pZCwgaHctPmlkZW50X3ByaV9mdy5tYWpvciwKKwkJICAgICBody0+aWRlbnRfcHJpX2Z3Lm1pbm9yLCBody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCisJaWYgKGh3LT5pZGVudF9zdGFfZncuaWQgPT0gMHgxZikgeworCQlwICs9IHNwcmludGYocCwgIiMgc3RhIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkJICAgICBody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOworCX0gZWxzZSB7CisJCXAgKz0gc3ByaW50ZihwLCAiIyBhcCBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwl9CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJcCArPSBzcHJpbnRmKHAsICIjIGluaXRpYWwgbmljIGh3IHR5cGUsIG5lZWRlZCBmb3IgU1NGIHJhbWRsXG4iKTsKKwlwICs9IHNwcmludGYocCwgImluaXRuaWNodz0lMDR4XG4iLCBod3R5cGUpOworI2VuZGlmCisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIChwIC0gcGFnZSk7Cit9CisjZW5kaWYKKwordm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3sKKwloZmEzODR4X3QJCSpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgY29tbXNxdWFsX2JoKTsKKyAgICAgICAgd2xhbmRldmljZV90ICAgICAgICAgICAgKndsYW5kZXYgPSBody0+d2xhbmRldjsKKwloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7CisJaW50IHJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKQorCQlnb3RvIGRvbmU7CisKKwkvKiB3ZSBkb24ndCBjYXJlIGlmIHdlJ3JlIGluIEFQIG1vZGUgKi8KKwlpZiAoKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX05PTkUpIHx8CisJICAgICh3bGFuZGV2LT5tYWNtb2RlID09IFdMQU5fTUFDTU9ERV9FU1NfQVApKSB7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIHBvbGwgdGhlc2UgaW4gbm9uLUlCU1MgKi8KKwlpZiAod2xhbmRldi0+bWFjbW9kZSAhPSBXTEFOX01BQ01PREVfSUJTU19TVEEpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZLAorCQkJCQkJJmh3LT5xdWFsLAorCQkJCQkJSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZX0xFTik7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJV0xBTl9MT0dfRVJST1IoImVycm9yIGZldGNoaW5nIGNvbW1zcXVhbFxuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvLyBxdWFsLkNRX2N1cnJCU1M7IC8vIGxpbmsKKwkJLy8gQVNMX2N1cnJCU1M7ICAvLyBsZXZlbAorCQkvLyBxdWFsLkFOTF9jdXJyRkM7IC8vIG5vaXNlCisKKwkJV0xBTl9MT0dfREVCVUcoMywgImNvbW1zcXVhbCAlZCAlZCAlZFxuIiwKKwkJCSAgICAgICBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQ1FfY3VyckJTUyksCisJCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFTTF9jdXJyQlNTKSwKKwkJCSAgICAgICBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQU5MX2N1cnJGQykpOworCX0KKworCS8qIExhc3RseSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEJTU0lEIGRpZG4ndCBjaGFuZ2Ugb24gdXMgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsCisJCQkJCXdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCQlnb3RvIGRvbmU7CisJfQorCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsCisJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCQlnb3RvIGRvbmU7CisJfQorCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAorCQkJCShwODAyMTFwc3RyZF90ICopICZ3bGFuZGV2LT5zc2lkKTsKKworCisJLyogUmVzY2hlZHVsZSB0aW1lciAqLworCW1vZF90aW1lcigmaHctPmNvbW1zcXVhbF90aW1lciwgamlmZmllcyArIEhaKTsKKworIGRvbmU6CisJREJGRVhJVDsKK30KKwordm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOworCisJREJGRU5URVI7CisKKwlzY2hlZHVsZV93b3JrKCZody0+Y29tbXNxdWFsX2JoKTsKKworCURCRkVYSVQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy92ZXJzaW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy92ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1Zjg4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ZlcnNpb24uaApAQCAtMCwwICsxLDY0IEBACisvKiBzcmMvaW5jbHVkZS93bGFuL3ZlcnNpb24uaAorKgorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKyNpZm5kZWYgX1dMQU5fVkVSU0lPTl9ICisjZGVmaW5lIF9XTEFOX1ZFUlNJT05fSAorI2lmbmRlZiBLRVJORUxfVkVSU0lPTgorI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKKyNlbmRpZgorCisvKiBXTEFOX0hPU1RJRiAoZ2VuZXJhbGx5IHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLCBub3QgZGV0ZWN0ZWQpICovCisjZGVmaW5lIFdMQU5fTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTEFOX1BDTUNJQSAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV0xBTl9JU0EgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdMQU5fUENJICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBXTEFOX1VTQiAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV0xBTl9QTFggICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdMQU5fU0xBVkUgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBXTEFOX1JFTEVBU0UJIjAuMi44IgorI2RlZmluZSBXTEFOX1JFTEVBU0VfQ09ERSAweDAwMDIwOAorI2RlZmluZSBXTEFOX0JVSUxEX0RBVEUgIlRodSBPY3QgIDIgMTE6MDQ6NDIgUERUIDIwMDgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvd2xhbl9jb21wYXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3dsYW5fY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkZmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3dsYW5fY29tcGF0LmgKQEAgLTAsMCArMSw3NTcgQEAKKy8qIHdsYW5fY29tcGF0LmgKKyoKKyogVHlwZXMgYW5kIG1hY3JvcyB0byBhaWQgaW4gcG9ydGFiaWxpdHkKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKKyNkZWZpbmUgX1dMQU5fQ09NUEFUX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIEVzdGFibGlzaCBQbGF0Zm9ybSBJZGVudGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogS2V5IG1hY3JvczogKi8KKy8qIFdMQU5fQ1BVX0ZBTUlMWSAqLworCSNkZWZpbmUgV0xBTl9JeDg2CQkJMQorCSNkZWZpbmUgV0xBTl9QUEMJCQkyCisJI2RlZmluZSBXTEFOX0l4OTYJCQkzCisJI2RlZmluZSBXTEFOX0FSTQkJCTQKKwkjZGVmaW5lIFdMQU5fQUxQSEEJCQk1CisJI2RlZmluZSBXTEFOX01JUFMJCQk2CisJI2RlZmluZSBXTEFOX0hQUEEJCQk3CisJI2RlZmluZSBXTEFOX1NQQVJDCQkJOAorCSNkZWZpbmUgV0xBTl9TSCAgICAJCQk5CisJI2RlZmluZSBXTEFOX3g4Nl82NCAgICAgICAgICAgICAgICAgICAgIDEwCisvKiBXTEFOX1NZU0FSQ0ggKi8KKwkjZGVmaW5lIFdMQU5fUENBVAkJCTEKKwkjZGVmaW5lIFdMQU5fTUJYCQkJMgorCSNkZWZpbmUgV0xBTl9SUFgJCQkzCisJI2RlZmluZSBXTEFOX0xXQVJDSAkJCTQKKwkjZGVmaW5lIFdMQU5fUE1BQwkJCTUKKwkjZGVmaW5lIFdMQU5fU0tJRkYJCQk2CisJI2RlZmluZSBXTEFOX0JJVFNZCQkJNworCSNkZWZpbmUgV0xBTl9BTFBIQUFSQ0gJCQk3CisJI2RlZmluZSBXTEFOX01JUFNBUkNICQkJOQorCSNkZWZpbmUgV0xBTl9IUFBBQVJDSAkJCTEwCisJI2RlZmluZSBXTEFOX1NQQVJDQVJDSAkJCTExCisJI2RlZmluZSBXTEFOX1NIQVJDSCAgIAkJCTEyCisKKy8qIE5vdGU6IHRoZSBQTFggSE9TVElGIGFib3ZlIHJlZmVycyB0byBzb21lIHZlbmRvcnMgaW1wbGVtZW50YXRpb25zIGZvciAqLworLyogICAgICAgUENJLiAgSXQncyBhIFBMWCBjaGlwIHRoYXQgaXMgYSBQQ0kgdG8gUENNQ0lBIGFkYXB0ZXIsIGJ1dCBpdCAgICovCisvKiAgICAgICBpc24ndCBhIHJlYWwgUENNQ0lBIGhvc3QgaW50ZXJmYWNlIGFkYXB0ZXIgcHJvdmlkaW5nIGFsbCB0aGUgICAgKi8KKy8qICAgICAgIGNhcmQmc29ja2V0IHNlcnZpY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWYgKGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSkKKyNpZm5kZWYgX19wcGNfXworI2RlZmluZSBfX3BwY19fCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorCisjaWZuZGVmIEFVVE9DT05GX0lOQ0xVREVECisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX194ODZfNjRfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl94ODZfNjQKKwkjZGVmaW5lIFdMQU5fU1lTQVJDSAkJV0xBTl9QQ0FUCisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTQ4Nl9fKSB8fCBkZWZpbmVkKF9faTU4Nl9fKSB8fCBkZWZpbmVkKF9faTY4Nl9fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX0l4ODYKKwkjZGVmaW5lIFdMQU5fU1lTQVJDSAkJV0xBTl9QQ0FUCisjZWxpZiBkZWZpbmVkKF9fcHBjX18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5fUFBDCisJI2lmIGRlZmluZWQoQ09ORklHX01CWCkKKwkJI2RlZmluZSBXTEFOX1NZU0FSQ0gJV0xBTl9NQlgKKwkjZWxpZiBkZWZpbmVkKENPTkZJR19SUFhMSVRFKQorCQkjZGVmaW5lIFdMQU5fU1lTQVJDSAlXTEFOX1JQWAorCSNlbGlmIGRlZmluZWQoQ09ORklHX1JQWENMQVNTSUMpCisJCSNkZWZpbmUgV0xBTl9TWVNBUkNICVdMQU5fUlBYCisJI2Vsc2UKKwkJI2RlZmluZSBXTEFOX1NZU0FSQ0gJV0xBTl9QTUFDCisJI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fYXJtX18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5fQVJNCisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fU0tJRkYKKyNlbGlmIGRlZmluZWQoX19hbHBoYV9fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX0FMUEhBCisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fQUxQSEFBUkNICisjZWxpZiBkZWZpbmVkKF9fbWlwc19fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX01JUFMKKwkjZGVmaW5lIFdMQU5fU1lTQVJDSAkJV0xBTl9NSVBTQVJDSAorI2VsaWYgZGVmaW5lZChfX2hwcGFfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9IUFBBCisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fSFBQQUFSQ0gKKyNlbGlmIGRlZmluZWQoX19zcGFyY19fKQorICAgICAgICAjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWSAgICAgICAgIFdMQU5fU1BBUkMKKyAgICAgICAgI2RlZmluZSBXTEFOX1NZU0FSQ0ggICAgICAgICAgICBXTEFOX1NQQVJDCisjZWxpZiBkZWZpbmVkKF9fc2hfXykKKyAgICAgICAgI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkgICAgICAgICBXTEFOX1NICisgICAgICAgICNkZWZpbmUgV0xBTl9TWVNBUkNIICAgICAgICAgICAgV0xBTl9TSEFSQ0gKKyAgICAgICAgI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgICAgICAjZGVmaW5lIF9fTElUVExFX0VORElBTl9fCisgICAgICAgICNlbmRpZgorI2Vsc2UKKwkjZXJyb3IgIk5vIENQVSBpZGVudGlmaWVkISIKKyNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyoKKyAgIFNvbWUgYmlnIGVuZGlhbiBtYWNoaW5lcyBpbXBsaWNpdGx5IGRvIGFsbCBJL08gaW4gbGl0dGxlIGVuZGlhbiBtb2RlLgorCisgICBJbiBwYXJ0aWN1bGFyOgorICAgICAgICAgIExpbnV4L1BQQyBvbiBQb3dlck1hY3MgKFBDSSkKKwkgIEFybS9JbnRlbCBYc2NhbGUgKFBDSSkKKworICAgVGhpcyBtYXkgYWxzbyBhZmZlY3QgUExYIGJvYXJkcyBhbmQgb3RoZXIgQkUgJnwgUFBDIHBsYXRmb3JtczsKKyAgIGFzIG5ldyBvbmVzIGFyZSBkaXNjb3ZlcmVkLCBhZGQgdGhlbSBiZWxvdy4KKyovCisKKyNpZiBkZWZpbmVkKFdMQU5fSE9TVElGKQorI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkpCisjaWYgKChXTEFOX1NZU0FSQ0ggPT0gV0xBTl9TS0lGRikgfHwgKFdMQU5fU1lTQVJDSCA9PSBXTEFOX1BNQUMpIHx8IChXTEFOX1NZU0FSQ0ggPT0gV0xBTl9TUEFSQykpCisjZGVmaW5lIFJFVkVSU0VfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBCaXQgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBCSVQwCTB4MDAwMDAwMDEKKyNkZWZpbmUgQklUMQkweDAwMDAwMDAyCisjZGVmaW5lIEJJVDIJMHgwMDAwMDAwNAorI2RlZmluZSBCSVQzCTB4MDAwMDAwMDgKKyNkZWZpbmUgQklUNAkweDAwMDAwMDEwCisjZGVmaW5lIEJJVDUJMHgwMDAwMDAyMAorI2RlZmluZSBCSVQ2CTB4MDAwMDAwNDAKKyNkZWZpbmUgQklUNwkweDAwMDAwMDgwCisjZGVmaW5lIEJJVDgJMHgwMDAwMDEwMAorI2RlZmluZSBCSVQ5CTB4MDAwMDAyMDAKKyNkZWZpbmUgQklUMTAJMHgwMDAwMDQwMAorI2RlZmluZSBCSVQxMQkweDAwMDAwODAwCisjZGVmaW5lIEJJVDEyCTB4MDAwMDEwMDAKKyNkZWZpbmUgQklUMTMJMHgwMDAwMjAwMAorI2RlZmluZSBCSVQxNAkweDAwMDA0MDAwCisjZGVmaW5lIEJJVDE1CTB4MDAwMDgwMDAKKyNkZWZpbmUgQklUMTYJMHgwMDAxMDAwMAorI2RlZmluZSBCSVQxNwkweDAwMDIwMDAwCisjZGVmaW5lIEJJVDE4CTB4MDAwNDAwMDAKKyNkZWZpbmUgQklUMTkJMHgwMDA4MDAwMAorI2RlZmluZSBCSVQyMAkweDAwMTAwMDAwCisjZGVmaW5lIEJJVDIxCTB4MDAyMDAwMDAKKyNkZWZpbmUgQklUMjIJMHgwMDQwMDAwMAorI2RlZmluZSBCSVQyMwkweDAwODAwMDAwCisjZGVmaW5lIEJJVDI0CTB4MDEwMDAwMDAKKyNkZWZpbmUgQklUMjUJMHgwMjAwMDAwMAorI2RlZmluZSBCSVQyNgkweDA0MDAwMDAwCisjZGVmaW5lIEJJVDI3CTB4MDgwMDAwMDAKKyNkZWZpbmUgQklUMjgJMHgxMDAwMDAwMAorI2RlZmluZSBCSVQyOQkweDIwMDAwMDAwCisjZGVmaW5lIEJJVDMwCTB4NDAwMDAwMDAKKyNkZWZpbmUgQklUMzEJMHg4MDAwMDAwMAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB1X2ludDhfdAlVSU5UODsKK3R5cGVkZWYgdV9pbnQxNl90CVVJTlQxNjsKK3R5cGVkZWYgdV9pbnQzMl90CVVJTlQzMjsKKwordHlwZWRlZiBpbnQ4X3QJCUlOVDg7Cit0eXBlZGVmIGludDE2X3QJCUlOVDE2OwordHlwZWRlZiBpbnQzMl90CQlJTlQzMjsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgVUlOVDsKK3R5cGVkZWYgc2lnbmVkIGludCAgICAgIElOVDsKKwordHlwZWRlZiB1X2ludDY0X3QJVUlOVDY0OwordHlwZWRlZiBpbnQ2NF90CQlJTlQ2NDsKKworI2RlZmluZSBVSU5UOF9NQVgJKDB4ZmZVTCkKKyNkZWZpbmUgVUlOVDE2X01BWAkoMHhmZmZmVUwpCisjZGVmaW5lIFVJTlQzMl9NQVgJKDB4ZmZmZmZmZmZVTCkKKworI2RlZmluZSBJTlQ4X01BWAkoMHg3ZkwpCisjZGVmaW5lIElOVDE2X01BWAkoMHg3ZmZmTCkKKyNkZWZpbmUgSU5UMzJfTUFYCSgweDdmZmZmZmZmTCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIENvbXBpbGVyIFBvcnRhYmlsaXR5IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBfX1dMQU5fQVRUUklCX1BBQ0tfXwkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBPUyBQb3J0YWJpbGl0eSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmbmRlZiBXTEFOX0RCVkFSCisjZGVmaW5lIFdMQU5fREJWQVIJd2xhbl9kZWJ1ZworI2VuZGlmCisKKyNpZm5kZWYgS0VSTkVMX1ZFUlNJT04KKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorIyAgaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiw4KSkKKyMgICAgaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxhc20vaGFyZGlycS5oPgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19LRVJORUxfXykKKyMgIGRlZmluZSBQUkVFTVBUX01BU0sgICgweDAwMDAwMEZGVUwpCisjICBkZWZpbmUgcHJlZW1wdF9jb3VudCgpICgwVUwpCisjZW5kaWYKKworI2RlZmluZSBXTEFOX0xPR19FUlJPUih4LGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgeCAsIF9fZnVuY19fICwgIyNhcmdzKTsKKworI2RlZmluZSBXTEFOX0xPR19XQVJOSU5HKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgeCAsIF9fZnVuY19fICwgIyNhcmdzKTsKKworI2RlZmluZSBXTEFOX0xPR19OT1RJQ0UoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIHggLCBfX2Z1bmNfXyAsICMjYXJncyk7CisKKyNkZWZpbmUgV0xBTl9MT0dfSU5GTyhhcmdzLi4uICkgcHJpbnRrKEtFUk5fSU5GTyBhcmdzKQorCisjaWYgZGVmaW5lZChXTEFOX0lOQ0xVREVfREVCVUcpCisJI2RlZmluZSBXTEFOX0FTU0VSVChjKSBpZiAoKCEoYykpICYmIFdMQU5fREJWQVIgPj0gMSkgeyBcCisJCVdMQU5fTE9HX0RFQlVHKDEsICJBc3NlcnRpb24gZmFpbHVyZSFcbiIpOyB9CisJI2RlZmluZSBXTEFOX0hFWF9EVU1QKCBsLCB4LCBwLCBuKQlpZiggV0xBTl9EQlZBUiA+PSAobCkgKXsgXAorCQlpbnQgX19pX187IFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgeCAiOiIpOyBcCisJCWZvciggX19pX189MDsgX19pX18gPCAobik7IF9faV9fKyspIFwKKwkJCXByaW50ayggIiAlMDJ4IiwgKChVSU5UOCopKHApKVtfX2lfX10pOyBcCisJCXByaW50aygiXG4iKTsgfQorCSNkZWZpbmUgREJGRU5URVIgeyBpZiAoIFdMQU5fREJWQVIgPj0gNSApeyBXTEFOX0xPR19ERUJVRygzLCItLS0tPlxuIik7IH0gfQorCSNkZWZpbmUgREJGRVhJVCAgeyBpZiAoIFdMQU5fREJWQVIgPj0gNSApeyBXTEFOX0xPR19ERUJVRygzLCI8LS0tLVxuIik7IH0gfQorCisJI2RlZmluZSBXTEFOX0xPR19ERUJVRyhsLHgsYXJncy4uLikgaWYgKCBXTEFOX0RCVkFSID49IChsKSkgcHJpbnRrKEtFUk5fREVCVUcgIiVzKCVsdSk6ICIgeCAsICBfX2Z1bmNfXywgKHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfTUFTSyksICMjYXJncyApOworI2Vsc2UKKwkjZGVmaW5lIFdMQU5fQVNTRVJUKGMpCisJI2RlZmluZSBXTEFOX0hFWF9EVU1QKCBsLCBzLCBwLCBuKQorCSNkZWZpbmUgREJGRU5URVIKKwkjZGVmaW5lIERCRkVYSVQKKworCSNkZWZpbmUgV0xBTl9MT0dfREVCVUcobCwgcywgYXJncy4uLikKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBfX1NNUF9fCQkJMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKyNpZiAoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkgfHwgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTkpKSkKKyNkZWZpbmUgVVJCX09OTFlfQ0FMTEJBQ0sKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxOSkpCisjZGVmaW5lIFBUX1JFR1MgICAgLCBzdHJ1Y3QgcHRfcmVncyAqcmVncworI2Vsc2UKKyNkZWZpbmUgUFRfUkVHUworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDcpKQorIyAgZGVmaW5lIGRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoYSkgIGRlbF90aW1lcl9zeW5jKGEpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw0LDE3KSkKKyNkZWZpbmUgQ09ORklHX05FVExJTksJCTEKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIGtmcmVlX3MoYSwgYikJa2ZyZWUoKGEpKQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwyLDE4KSkKKyNpZm5kZWYgaW5pdF93YWl0cXVldWVfaGVhZAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDAsMTYpKQorI2RlZmluZSBpbml0X3dhaXRxdWV1ZV9oZWFkKHApICAoKihwKSA9IE5VTEwpCisjZWxzZQorI2RlZmluZSBpbml0X3dhaXRxdWV1ZV9oZWFkKHApICBpbml0X3dhaXRxdWV1ZShwKQorI2VuZGlmCit0eXBlZGVmIHN0cnVjdCB3YWl0X3F1ZXVlICp3YWl0X3F1ZXVlX2hlYWRfdDsKK3R5cGVkZWYgc3RydWN0IHdhaXRfcXVldWUgd2FpdF9xdWV1ZV90OworI2RlZmluZSBzZXRfY3VycmVudF9zdGF0ZShiKSAgeyBjdXJyZW50LT5zdGF0ZSA9IChiKTsgbWIoKTsgfQorI2RlZmluZSBpbml0X3dhaXRxdWV1ZV9lbnRyeShhLCBiKSB7IChhKS0+dGFzayA9IGN1cnJlbnQ7IH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKKy8vIHJldHZhbCA9PSAwOyBzaWduYWwgbWV0OyB3ZSdyZSBnb29kLgorLy8gcmV0dmFsIDwgMDsgaW50ZXJydXB0ZWQgYnkgc2lnbmFsLgorLy8gcmV0dmFsID4gMDsgdGltZWQgb3V0LgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMCkpICAvLyBmaXhtZT8KKworI2RlZmluZSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHJldCkgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3YWl0X3F1ZXVlX3QgX193YWl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGFkZF93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZm9yICg7OykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzY2hlZHVsZV90aW1lb3V0KHJldCkgICAgOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisjZWxzZSAvLyAyLjIKKworCisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KSAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0cnVjdCB3YWl0X3F1ZXVlIF9fd2FpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fd2FpdC50YXNrID0gY3VycmVudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFkZF93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZvciAoOzspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzY2hlZHVsZV90aW1lb3V0KHJldCk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisjZW5kaWYgIC8vIHZlcnNpb24gPj0gMi40CisKKyNkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJICBcCisoewkJCQkJCQkJCSAgXAorCWxvbmcgX19yZXQgPSB0aW1lb3V0OwkJCQkJCSAgXAorCWlmICghKGNvbmRpdGlvbikpCQkJCQkJICBcCisJCV9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgX19yZXQpOyBcCisJX19yZXQ7CQkJCQkJCQkgIFwKK30pCisKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkpCisjaWZkZWYgX0xJTlVYX0xJU1RfSAorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKyAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworICAgICAgICBfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworICAgICAgICBsaXN0X2FkZF90YWlsKGxpc3QsIGhlYWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X3NwbGljZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0LT5uZXh0OworICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGFzdCA9IGxpc3QtPnByZXY7CisgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICphdCA9IGhlYWQtPm5leHQ7CisKKyAgICAgIGZpcnN0LT5wcmV2ID0gaGVhZDsKKyAgICAgIGhlYWQtPm5leHQgPSBmaXJzdDsKKworICAgICAgbGFzdC0+bmV4dCA9IGF0OworICAgICAgYXQtPnByZXYgPSBsYXN0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisgICAgICBfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworICAgICAgbGlzdF9hZGQobGlzdCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3NwbGljZV9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWlmICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQpOworCQlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwl9Cit9CisKKworI2VuZGlmICAvLyBMSVNUX0gKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMSw5MCkpCisjZGVmaW5lIHNwaW5fbG9jayhsKSAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3Bpbl91bmxvY2sobCkgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZShsLGYpICBkbyB7IHNhdmVfZmxhZ3MoZik7IGNsaSgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX3VubG9ja19pcnFyZXN0b3JlKGwsZikgZG8geyByZXN0b3JlX2ZsYWdzKGYpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX2xvY2tfaW5pdChzKSAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fdHJ5bG9jayhsKSAgICAgICAgICgxKQordHlwZWRlZiBpbnQgc3BpbmxvY2tfdDsKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkgLy8gWFhYID8/PworI2RlZmluZSBzcGluX2xvY2tfYmggICAgICAgICBzcGluX2xvY2sKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKHgpICAgICAgICgqKHZvbGF0aWxlIGNoYXIgKikoJih4KS0+bG9jaykgPD0gMCkKKyNlbHNlCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKGwpICAgICAgICgwKQorI2VuZGlmCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMjgpKQorI2RlZmluZSBfX3VzZXIKKyNkZWZpbmUgX19pb21lbQorI2VuZGlmCisKKyNpZmRlZiBfTElOVVhfUFJPQ19GU19ICisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywyNSkpCisKK2V4dGVybiBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICoKK2NyZWF0ZV9wcm9jX3JlYWRfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9wcm9jX3QgKnJlYWRfcHJvYywgdm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJlcyA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIG1vZGUsIGJhc2UpOworICAgIGlmIChyZXMpIHsKKyAgICAgICAgcmVzLT5yZWFkX3Byb2MgPSByZWFkX3Byb2M7CisgICAgICAgIHJlcy0+ZGF0YSA9IGRhdGE7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMjkpKQorI2lmbmRlZiBwcm9jX21rZGlyCisjZGVmaW5lIHByb2NfbWtkaXIobmFtZSwgcm9vdCkgY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRkRJUiwgcm9vdCkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogX0xJTlVYX1BST0NfRlNfSCAqLworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyNpZm5kZWYgSU5JVF9UUVVFVUUKKyNkZWZpbmUgUFJFUEFSRV9UUVVFVUUoX3RxLCBfcm91dGluZSwgX2RhdGEpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfdHEpLT5yb3V0aW5lID0gX3JvdXRpbmU7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX3RxKS0+ZGF0YSA9IF9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIElOSVRfVFFVRVVFKF90cSwgX3JvdXRpbmUsIF9kYXRhKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBJTklUX0xJU1RfSEVBRCgmKF90cSktPmxpc3QpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKF90cSktPnN5bmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFBSRVBBUkVfVFFVRVVFKChfdHEpLCAoX3JvdXRpbmUpLCAoX2RhdGEpKTsgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGNvbnRhaW5lcl9vZgorI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7CQkJXAorICAgICAgICBjb25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKKyAgICAgICAgKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkKKyNlbmRpZgorCisjaWZuZGVmIElOSVRfV09SSworI2RlZmluZSB3b3JrX3N0cnVjdCB0cV9zdHJ1Y3QKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIHNjaGVkdWxlX3dvcmsoYSkgICBxdWV1ZV90YXNrKGEsICZ0cV9zY2hlZHVsZXIpCisjZWxzZQorI2RlZmluZSBzY2hlZHVsZV93b3JrKGEpICBzY2hlZHVsZV90YXNrKGEpCisjZW5kaWYKKworI2RlZmluZSBmbHVzaF9zY2hlZHVsZWRfd29yayAgZmx1c2hfc2NoZWR1bGVkX3Rhc2tzCisjZGVmaW5lIElOSVRfV09SSzIoX3dxLCBfcm91dGluZSkgIElOSVRfVFFVRVVFKF93cSwgKHZvaWQgKCopKHZvaWQgKikpX3JvdXRpbmUsIF93cSkKKyNlbmRpZgorCisjZWxzZSAvLyA+PSAyLjUga2VybmVsCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCisjZGVmaW5lIElOSVRfV09SSzIoX3dxLCBfcm91dGluZSkJSU5JVF9XT1JLKF93cSwgKHZvaWQgKCopKHZvaWQgKikpX3JvdXRpbmUsIF93cSkKKyNlbHNlCisjZGVmaW5lIElOSVRfV09SSzIoX3dxLCBfcm91dGluZSkJSU5JVF9XT1JLKF93cSwgX3JvdXRpbmUpCisjZW5kaWYKKworI2VuZGlmIC8vID49IDIuNSBrZXJuZWwKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpKQordHlwZWRlZiBzdHJ1Y3QgZGV2aWNlIG5ldGRldmljZV90OworI2VsaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCw0KSkKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZWxzZQorI3VuZGVmIG5ldGRldmljZV90Cit0eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlIG5ldGRldmljZV90OworI2VuZGlmCisKKyNpZmRlZiBXSVJFTEVTU19FWFQKKyNpZiAoV0lSRUxFU1NfRVhUIDwgMTMpCitzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvCit7CisgICAgICAgIF9fdTE2ICAgICAgICAgICBjbWQ7ICAgICAgICAgICAgLyogV2lyZWxlc3MgRXh0ZW5zaW9uIGNvbW1hbmQgKi8KKyAgICAgICAgX191MTYgICAgICAgICAgIGZsYWdzOyAgICAgICAgICAvKiBNb3JlIHRvIGNvbWUgOy0pICovCit9OworI2VuZGlmCisjZW5kaWYKKworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMSwxOCkpCisjZGVmaW5lIE1PRFVMRV9QQVJNKGEsYikgICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIE1PRFVMRV9BVVRIT1IoYSkgICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIE1PRFVMRV9ERVNDUklQVElPTihhKSAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKGEpIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjdW5kZWYgIEdFVF9VU0VfQ09VTlQKKyNkZWZpbmUgR0VUX1VTRV9DT1VOVChtKSAgICAgICAgbW9kX3VzZV9jb3VudF8KKyNlbmRpZgorCisjaWZuZGVmIE1PRFVMRV9PV05FUgorI2RlZmluZSBNT0RVTEVfT1dORVIoYSkgICAgICAgICBleHRlcm4gaW50IF9fYm9ndXNfZGVjbAorI2RlZmluZSBBTkNJRU5UX01PRFVMRV9DT0RFCisjZW5kaWYKKworI2lmbmRlZiBNT0RVTEVfTElDRU5TRQorI2RlZmluZSBNT0RVTEVfTElDRU5TRShtKSAgICAgICBleHRlcm4gaW50IF9fYm9ndXNfZGVjbAorI2VuZGlmCisKKy8qIFRPRE86ICBEbyB3ZSBjYXJlIGFib3V0IHRoaXM/ICovCisjaWZuZGVmIE1PRFVMRV9ERVZJQ0VfVEFCTEUKKyNkZWZpbmUgTU9EVUxFX0RFVklDRV9UQUJMRShmb28sYmFyKQorI2VuZGlmCisKKyNkZWZpbmUgd2xhbl9taW51dGVzMnRpY2tzKGEpICgoYSkqKHdsYW5fdGlja3NfcGVyX3NlYyAqICA2MCkpCisjZGVmaW5lIHdsYW5fc2Vjb25kczJ0aWNrcyhhKSAoKGEpKih3bGFuX3RpY2tzX3Blcl9zZWMpKQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSw0NykpCisjZGVmaW5lIE5FV19NT0RVTEVfQ09ERQorI2lmZGVmIEFOQ0lFTlRfTU9EVUxFX0NPREUKKyN1bmRlZiBBTkNJRU5UX01PRFVMRV9DT0RFCisjZW5kaWYKKyNlbGlmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMjUpKQorI2RlZmluZSBtb2R1bGVfcGFyYW0obmFtZSwgdHlwZSwgcGVybSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBpbmxpbmUgdm9pZCAqX19jaGVja19leGlzdGVuY2VfIyNuYW1lKHZvaWQpIHsgcmV0dXJuICZuYW1lOyB9IFwKKyAgICAgICAgTU9EVUxFX1BBUk0obmFtZSwgX01PRFVMRV9QQVJNX1NUUklOR18gIyMgdHlwZSkKKworI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX2J5dGUgImIiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfc2hvcnQgImgiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfdXNob3J0ICJoIgorI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX2ludCAiaSIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR191aW50ICJpIgorI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX2xvbmcgImwiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfdWxvbmcgImwiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfYm9vbCAiaSIKKyNlbmRpZgorCisvKiBsaW51eCA8IDIuNS42OSAqLworI2lmbmRlZiBJUlFfTk9ORQordHlwZWRlZiB2b2lkIGlycXJldHVybl90OworI2RlZmluZSBJUlFfTk9ORQorI2RlZmluZSBJUlFfSEFORExFRAorI2RlZmluZSBJUlFfUkVUVkFMKHgpCisjZW5kaWYKKworI2lmbmRlZiBpbl9hdG9taWMKKyNkZWZpbmUgaW5fYXRvbWljKCkgIDAKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykpCisjZGVmaW5lIFVSQl9BU1lOQ19VTkxJTksgMAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDcpKQorI2RlZmluZSBVUkJfQVNZTkNfVU5MSU5LICBVU0JfQVNZTkNfVU5MSU5LCisjZGVmaW5lIHVzYl9maWxsX2J1bGtfdXJiICBGSUxMX0JVTEtfVVJCCisjZGVmaW5lIHVzYl9raWxsX3VyYiAgdXNiX3VubGlua191cmIKKyNlbHNlCisjZGVmaW5lIFVTQl9RVUVVRV9CVUxLIDAKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkpCit0eXBlZGVmIHUzMiBwbV9tZXNzYWdlX3Q7CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsOSkpCisjZGVmaW5lIGhvdHBsdWdfcGF0aCAgIi9ldGMvaG90cGx1Zy93bGFuLmFnZW50IgorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorI2RlZmluZSBmcmVlX25ldGRldih4KSAgICAgICBrZnJlZSh4KQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDkpKQorI2RlZmluZSBldGhfaGRyKHgpICAgICAgICAgICAoeCktPm1hYy5ldGhlcm5ldAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorI2RlZmluZSBkZWxfdGltZXJfc3luYyhhKSAgICAgICBkZWxfdGltZXIoYSkKKyNlbmRpZgorCisjaWZuZGVmIG1pZ2h0X3NsZWVwCisjZGVmaW5lIG1pZ2h0X3NsZWVwKGEpICAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEFwcGFyZW50bHkgMi40LjIgZXRodG9vbCBpcyBxdWl0ZSBkaWZmZXJlbnQsIG1heWJlIG5ld2VyIHRvbz8gKi8KKyNpZiAoZGVmaW5lZChTSU9FVEhUT09MKSAmJiAhZGVmaW5lZChFVEhUT09MX0dEUlZJTkZPKSkKKyN1bmRlZiBTSU9FVEhUT09MCisjZW5kaWYKKworLy8gcGNtY2lhLWNzIHN0dWZmCisjaWYgKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjgpKSAmJiBcCisgICAgICFkZWZpbmVkKHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcikpCisjZGVmaW5lIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihoYW5kbGUsIHJlZykgXAorICAgICAgICBDYXJkU2VydmljZXMoQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBoYW5kbGUsIHJlZykKKyNkZWZpbmUgcGNtY2lhX3JlZ2lzdGVyX2NsaWVudChoYW5kbGUsIHJlZykgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVnaXN0ZXJDbGllbnQsIGhhbmRsZSwgcmVnKQorI2RlZmluZSBwY21jaWFfZGVyZWdpc3Rlcl9jbGllbnQoaGFuZGxlKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhEZXJlZ2lzdGVyQ2xpZW50LCBoYW5kbGUpCisjZGVmaW5lIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0Rmlyc3RUdXBsZSwgaGFuZGxlLCB0dXBsZSkKKyNkZWZpbmUgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldE5leHRUdXBsZSwgaGFuZGxlLCB0dXBsZSkKKyNkZWZpbmUgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldFR1cGxlRGF0YSwgaGFuZGxlLCB0dXBsZSkKKyNkZWZpbmUgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhQYXJzZVR1cGxlLCBoYW5kbGUsIHR1cGxlLCBwYXJzZSkKKyNkZWZpbmUgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCBjb25maWcpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldENvbmZpZ3VyYXRpb25JbmZvLCBoYW5kbGUsIGNvbmZpZykKKyNkZWZpbmUgcGNtY2lhX3JlcXVlc3RfaW8oaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlcXVlc3RJTywgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVxdWVzdElSUSwgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlcXVlc3RDb25maWd1cmF0aW9uLCBoYW5kbGUsIHJlcSkKKyNkZWZpbmUgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihoYW5kbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VDb25maWd1cmF0aW9uLCBoYW5kbGUpCisjZGVmaW5lIHBjbWNpYV9yZWxlYXNlX2lvKGhhbmRsZSwgcmVxKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZWxlYXNlSU8sIGhhbmRsZSwgcmVxKQorI2RlZmluZSBwY21jaWFfcmVsZWFzZV9pcnEoaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VJUlEsIGhhbmRsZSwgcmVxKQorI2RlZmluZSBwY21jaWFfcmVsZWFzZV93aW5kb3cod2luKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZWxlYXNlV2luZG93LCB3aW4pCisjZGVmaW5lIHBjbWNpYV9nZXRfY2FyZF9zZXJ2aWNlc19pbmZvKGluZm8pIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldENhcmRTZXJ2aWNlc0luZm8sIGluZm8pCisjZGVmaW5lIHBjbWNpYV9yZXBvcnRfZXJyb3IoaGFuZGxlLCBlcnIpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlcG9ydEVycm9yLCBoYW5kbGUsIGVycikKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gSGFyZHdhcmUgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgaWVlZTJob3N0MTYobikJX19sZTE2X3RvX2NwdShuKQorI2RlZmluZSBpZWVlMmhvc3QzMihuKQlfX2xlMzJfdG9fY3B1KG4pCisjZGVmaW5lIGhvc3QyaWVlZTE2KG4pCV9fY3B1X3RvX2xlMTYobikKKyNkZWZpbmUgaG9zdDJpZWVlMzIobikJX19jcHVfdG9fbGUzMihuKQorCisjaWYgKFdMQU5fQ1BVX0ZBTUlMWSAhPSBXTEFOX01JUFMpCit0eXBlZGVmIFVJTlQzMiBwaHlzX3Q7CisjZW5kaWYKKworI2lmIChXTEFOX0NQVV9GQU1JTFkgPT0gV0xBTl9QUEMpCisgICAgICAgI2RlZmluZSB3bGFuX2ludyhhKSAgICAgICAgICAgICAgICAgICAgIGluX2JlMTYoKHVuc2lnbmVkIHNob3J0ICopKChhKStfSU9fQkFTRSkpCisgICAgICAgI2RlZmluZSB3bGFuX2lud19sZTE2X3RvX2NwdShhKSAgICAgICAgIGludygoYSkpCisgICAgICAgI2RlZmluZSB3bGFuX291dHcodixhKSAgICAgICAgICAgICAgICAgIG91dF9iZTE2KCh1bnNpZ25lZCBzaG9ydCAqKSgoYSkrX0lPX0JBU0UpLCAodikpCisgICAgICAgI2RlZmluZSB3bGFuX291dHdfY3B1X3RvX2xlMTYodixhKSAgICAgIG91dHcoKHYpLChhKSkKKyNlbHNlCisgICAgICAgI2RlZmluZSB3bGFuX2ludyhhKSAgICAgICAgICAgICAgICAgICAgIGludygoYSkpCisgICAgICAgI2RlZmluZSB3bGFuX2lud19sZTE2X3RvX2NwdShhKSAgICAgICAgIF9fY3B1X3RvX2xlMTYoaW53KChhKSkpCisgICAgICAgI2RlZmluZSB3bGFuX291dHcodixhKSAgICAgICAgICAgICAgICAgIG91dHcoKHYpLChhKSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0d19jcHVfdG9fbGUxNih2LGEpICAgICAgb3V0dyhfX2NwdV90b19sZTE2KCh2KSksKGEpKQorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBHZW5lcmFsIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSB3bGFuX21heChhLCBiKSAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCisjZGVmaW5lIHdsYW5fbWluKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworI2RlZmluZSB3bGFuX2lzcHJpbnQoYykJKCgoYykgPiAoMHgxOSkpICYmICgoYykgPCAoMHg3ZikpKQorCisjZGVmaW5lIHdsYW5faGV4Y2hhcih4KSAoKCh4KSA8IDB4MGEpID8gKCcwJyArICh4KSkgOiAoJ2EnICsgKCh4KSAtIDB4MGEpKSkKKworLyogQ3JlYXRlIGEgc3RyaW5nIG9mIHByaW50YWJsZSBjaGFycyBmcm9tIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSAqLworLyogSXQncyByZWNvbW1lbmRlZCB0aGF0IHRoZSBzdHIgYmUgNCpsZW4gKyAxIGJ5dGVzIGxvbmcgKi8KKyNkZWZpbmUgd2xhbl9ta3ByaW50c3RyKGJ1ZiwgYnVmbGVuLCBzdHIsIHN0cmxlbikgXAoreyBcCisJaW50IGkgPSAwOyBcCisJaW50IGogPSAwOyBcCisJbWVtc2V0KHN0ciwgMCwgKHN0cmxlbikpOyBcCisJZm9yIChpID0gMDsgaSA8IChidWZsZW4pOyBpKyspIHsgXAorCQlpZiAoIHdsYW5faXNwcmludCgoYnVmKVtpXSkgKSB7IFwKKwkJCShzdHIpW2pdID0gKGJ1ZilbaV07IFwKKwkJCWorKzsgXAorCQl9IGVsc2UgeyBcCisJCQkoc3RyKVtqXSA9ICdcXCc7IFwKKwkJCShzdHIpW2orMV0gPSAneCc7IFwKKwkJCShzdHIpW2orMl0gPSB3bGFuX2hleGNoYXIoKChidWYpW2ldICYgMHhmMCkgPj4gNCk7IFwKKwkJCShzdHIpW2orM10gPSB3bGFuX2hleGNoYXIoKChidWYpW2ldICYgMHgwZikpOyBcCisJCQlqICs9IDQ7IFwKKwkJfSBcCisJfSBcCit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmZGVmIFdMQU5fSU5DTFVERV9ERUJVRworZXh0ZXJuIGludCB3bGFuX2RlYnVnOworI2VuZGlmCisKK2V4dGVybiBpbnQgd2xhbl9ldGhjb252OwkJLyogV2hhdCdzIHRoZSBkZWZhdWx0IGV0aGNvbnY/ICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNlbmRpZiAvKiBfV0xBTl9DT01QQVRfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jIGIvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYwppbmRleCA0ZDc0YmEzLi4zN2NhZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L3Bob25lZGV2LmMKQEAgLTU0LDcgKzU0LDYgQEAKIAlpZiAobWlub3IgPj0gUEhPTkVfTlVNX0RFVklDRVMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZwaG9uZV9sb2NrKTsKIAlwID0gcGhvbmVfZGV2aWNlW21pbm9yXTsKIAlpZiAocCkKQEAgLTgxLDcgKzgwLDYgQEAKIAlmb3BzX3B1dChvbGRfZm9wcyk7CiBlbmQ6CiAJbXV0ZXhfdW5sb2NrKCZwaG9uZV9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCA1ZGNjZjA1Li5mOWI0NjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtNDcsNiArNDcsOSBAQAogCXN0cnVjdCBjbGFzcyAqY2xhc3M7CiB9ICp1aW9fY2xhc3M7CiAKKy8qIFByb3RlY3QgaWRyIGFjY2Vzc2VzICovCitzdGF0aWMgREVGSU5FX01VVEVYKG1pbm9yX2xvY2spOworCiAvKgogICogYXR0cmlidXRlcwogICovCkBAIC0yMzksNyArMjQyLDYgQEAKIAogc3RhdGljIGludCB1aW9fZ2V0X21pbm9yKHN0cnVjdCB1aW9fZGV2aWNlICppZGV2KQogewotCXN0YXRpYyBERUZJTkVfTVVURVgobWlub3JfbG9jayk7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAJaW50IGlkOwogCkBAIC0yNjEsNyArMjYzLDkgQEAKIAogc3RhdGljIHZvaWQgdWlvX2ZyZWVfbWlub3Ioc3RydWN0IHVpb19kZXZpY2UgKmlkZXYpCiB7CisJbXV0ZXhfbG9jaygmbWlub3JfbG9jayk7CiAJaWRyX3JlbW92ZSgmdWlvX2lkciwgaWRldi0+bWlub3IpOworCW11dGV4X3VubG9jaygmbWlub3JfbG9jayk7CiB9CiAKIC8qKgpAQCAtMzA1LDggKzMwOSw5IEBACiAJc3RydWN0IHVpb19saXN0ZW5lciAqbGlzdGVuZXI7CiAJaW50IHJldCA9IDA7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJm1pbm9yX2xvY2spOwogCWlkZXYgPSBpZHJfZmluZCgmdWlvX2lkciwgaW1pbm9yKGlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZtaW5vcl9sb2NrKTsKIAlpZiAoIWlkZXYpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CkBAIC0zMzIsMTggKzMzNywxNSBAQAogCQlpZiAocmV0KQogCQkJZ290byBlcnJfaW5mb29wZW47CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIAogZXJyX2luZm9vcGVuOgotCiAJa2ZyZWUobGlzdGVuZXIpOwotZXJyX2FsbG9jX2xpc3RlbmVyOgogCitlcnJfYWxsb2NfbGlzdGVuZXI6CiAJbW9kdWxlX3B1dChpZGV2LT5vd25lcik7CiAKIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKaW5kZXggYmNlZmJkZC4uMjg5ZDgxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC0zNiw3ICszNiw4IEBACiAJZGVmYXVsdCB5IGlmIFBYQTN4eAogCWRlZmF1bHQgeSBpZiBBUkNIX0VQOTNYWAogCWRlZmF1bHQgeSBpZiBBUkNIX0FUOTEKLQlkZWZhdWx0IHkgaWYgQVJDSF9QTlg0MDA4CisJZGVmYXVsdCB5IGlmIEFSQ0hfUE5YNDAwOCAmJiBJMkMKKwlkZWZhdWx0IHkgaWYgTUZEX1RDNjM5M1hCCiAJIyBQUEM6CiAJZGVmYXVsdCB5IGlmIFNUQjAzeHh4CiAJZGVmYXVsdCB5IGlmIFBQQ19NUEM1Mnh4CkBAIC05Nyw2ICs5OCw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy91c2IvbW9uL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy91c2Ivd3VzYmNvcmUvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL3VzYi9ob3N0L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCBhNDE5YzQyLi44YjdjNDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtMTYsOSArMTYsMTIgQEAKIG9iai0kKENPTkZJR19VU0JfU0w4MTFfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9VMTMyX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfUjhBNjY1OTdfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSBob3N0LwogCiBvYmotJChDT05GSUdfVVNCX0M2N1gwMF9IQ0QpCSs9IGM2N3gwMC8KIAorb2JqLSQoQ09ORklHX1VTQl9XVVNCKQkJKz0gd3VzYmNvcmUvCisKIG9iai0kKENPTkZJR19VU0JfQUNNKQkJKz0gY2xhc3MvCiBvYmotJChDT05GSUdfVVNCX1BSSU5URVIpCSs9IGNsYXNzLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYyBiL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCmluZGV4IDc2ZmNlNDQuLjNlODYyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCkBAIC03MjIsNiArNzIyLDE2IEBACiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIH0KIAorc3RhdGljIGludCBzcGVlZHRjaF9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3BlZWR0Y2hfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gMDsKK30KKwogCiAvKioqKioqKioqKgogKiogIFVTQiAgKioKQEAgLTc0MCw2ICs3NTAsOCBAQAogCS5uYW1lCQk9IHNwZWVkdGNoX2RyaXZlcl9uYW1lLAogCS5wcm9iZQkJPSBzcGVlZHRjaF91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2JhdG1fdXNiX2Rpc2Nvbm5lY3QsCisJLnByZV9yZXNldAk9IHNwZWVkdGNoX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldAk9IHNwZWVkdGNoX3Bvc3RfcmVzZXQsCiAJLmlkX3RhYmxlCT0gc3BlZWR0Y2hfdXNiX2lkcwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCmluZGV4IDBkYTJjMjUuLjA2ZGQxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogCQkJCV9fZnVuY19fLCBzYXJiLT5sZW4sIHZjYyk7CiAJCS8qIGRpc2NhcmQgY2VsbHMgYWxyZWFkeSByZWNlaXZlZCAqLwogCQlza2JfdHJpbShzYXJiLCAwKTsKLQkJVURTTF9BU1NFUlQoc2FyYi0+dGFpbCArIEFUTV9DRUxMX1BBWUxPQUQgPD0gc2FyYi0+ZW5kKTsKKwkJVURTTF9BU1NFUlQoaW5zdGFuY2UsIHNhcmItPnRhaWwgKyBBVE1fQ0VMTF9QQVlMT0FEIDw9IHNhcmItPmVuZCk7CiAJfQogCiAJbWVtY3B5KHNrYl90YWlsX3BvaW50ZXIoc2FyYiksIHNvdXJjZSArIEFUTV9DRUxMX0hFQURFUiwgQVRNX0NFTExfUEFZTE9BRCk7CkBAIC00MzIsNyArNDMyLDcgQEAKIAkJdW5zaWduZWQgY2hhciAqY2VsbF9idWYgPSBpbnN0YW5jZS0+Y2VsbF9idWY7CiAJCXVuc2lnbmVkIGludCBzcGFjZV9sZWZ0ID0gc3RyaWRlIC0gYnVmX3VzYWdlOwogCi0JCVVEU0xfQVNTRVJUKGJ1Zl91c2FnZSA8PSBzdHJpZGUpOworCQlVRFNMX0FTU0VSVChpbnN0YW5jZSwgYnVmX3VzYWdlIDw9IHN0cmlkZSk7CiAKIAkJaWYgKGF2YWlsX2RhdGEgPj0gc3BhY2VfbGVmdCkgewogCQkJLyogYWRkIG5ldyBkYXRhIGFuZCBwcm9jZXNzIGNlbGwgKi8KQEAgLTQ3NSw3ICs0NzUsNyBAQAogCXVuc2lnbmVkIGludCBzdHJpZGUgPSBpbnN0YW5jZS0+dHhfY2hhbm5lbC5zdHJpZGU7CiAKIAl2ZGJnKCIlczogc2tiLT5sZW49JWQsIGF2YWlsX3NwYWNlPSV1IiwgX19mdW5jX18sIHNrYi0+bGVuLCBhdmFpbF9zcGFjZSk7Ci0JVURTTF9BU1NFUlQoIShhdmFpbF9zcGFjZSAlIHN0cmlkZSkpOworCVVEU0xfQVNTRVJUKGluc3RhbmNlLCAhKGF2YWlsX3NwYWNlICUgc3RyaWRlKSk7CiAKIAlmb3IgKGJ5dGVzX3dyaXR0ZW4gPSAwOyBieXRlc193cml0dGVuIDwgYXZhaWxfc3BhY2UgJiYgY3RybC0+bGVuOwogCSAgICAgYnl0ZXNfd3JpdHRlbiArPSBzdHJpZGUsIHRhcmdldCArPSBzdHJpZGUpIHsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCQkJCWlmICghdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKIAkJCQkJdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGggPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CiAKLQkJCQkJVURTTF9BU1NFUlQoYWN0dWFsX2xlbmd0aCA8PSBwYWNrZXRfc2l6ZSk7CisJCQkJCVVEU0xfQVNTRVJUKGluc3RhbmNlLCBhY3R1YWxfbGVuZ3RoIDw9IHBhY2tldF9zaXplKTsKIAogCQkJCQlpZiAoIW1lcmdlX2xlbmd0aCkKIAkJCQkJCW1lcmdlX3N0YXJ0ID0gKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwpAQCAtMTE4OCw3ICsxMTg4LDcgQEAKIAkJc3RydWN0IHVyYiAqdXJiOwogCQl1bnNpZ25lZCBpbnQgaXNvX3BhY2tldHMgPSB1c2JfcGlwZWlzb2MoY2hhbm5lbC0+ZW5kcG9pbnQpID8gY2hhbm5lbC0+YnVmX3NpemUgLyBjaGFubmVsLT5wYWNrZXRfc2l6ZSA6IDA7CiAKLQkJVURTTF9BU1NFUlQoIXVzYl9waXBlaXNvYyhjaGFubmVsLT5lbmRwb2ludCkgfHwgdXNiX3BpcGVpbihjaGFubmVsLT5lbmRwb2ludCkpOworCQlVRFNMX0FTU0VSVChpbnN0YW5jZSwgIXVzYl9waXBlaXNvYyhjaGFubmVsLT5lbmRwb2ludCkgfHwgdXNiX3BpcGVpbihjaGFubmVsLT5lbmRwb2ludCkpOwogCiAJCXVyYiA9IHVzYl9hbGxvY191cmIoaXNvX3BhY2tldHMsIEdGUF9LRVJORUwpOwogCQlpZiAoIXVyYikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCmluZGV4IGU2ODg3YzYuLmY2ZjQ1MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaAorKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKQEAgLTQwLDkgKzQwLDE1IEBACiAqLwogCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgVURTTF9BU1NFUlQoeCkJQlVHX09OKCEoeCkpCisjZGVmaW5lIFVEU0xfQVNTRVJUKGluc3RhbmNlLCB4KQlCVUdfT04oISh4KSkKICNlbHNlCi0jZGVmaW5lIFVEU0xfQVNTRVJUKHgpCWRvIHsgaWYgKCEoeCkpIHdhcm4oImZhaWxlZCBhc3NlcnRpb24gJyVzJyBhdCBsaW5lICVkIiwgX19zdHJpbmdpZnkoeCksIF9fTElORV9fKTsgfSB3aGlsZSgwKQorI2RlZmluZSBVRFNMX0FTU0VSVChpbnN0YW5jZSwgeCkJCQkJCVwKKwlkbyB7CVwKKwkJaWYgKCEoeCkpCQkJCQkJXAorCQkJZGV2X3dhcm4oJihpbnN0YW5jZSktPnVzYl9pbnRmLT5kZXYsCQlcCisJCQkJICJmYWlsZWQgYXNzZXJ0aW9uICclcycgYXQgbGluZSAlZCIsCVwKKwkJCQkgX19zdHJpbmdpZnkoeCksIF9fTElORV9fKTsJCVwKKwl9IHdoaWxlKDApCiAjZW5kaWYKIAogI2RlZmluZSB1c2JfZXJyKGluc3RhbmNlLCBmb3JtYXQsIGFyZy4uLikJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKaW5kZXggODQ3MjU0My4uMTdkMTY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkgICAgbnVtX3ZlbmRvciAhPSBudW1fcHJvZHVjdCB8fAogCSAgICBudW1fdmVuZG9yICE9IG51bV9yeF9lbmRwb2ludCB8fAogCSAgICBudW1fdmVuZG9yICE9IG51bV90eF9lbmRwb2ludCkgewotCQl3YXJuKCJtYWxmb3JtZWQgbW9kdWxlIHBhcmFtZXRlcnMiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAieHVzYmF0bTogbWFsZm9ybWVkIG1vZHVsZSBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnIGIvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZwppbmRleCA2NmYxN2VkLi4yNTE5ZTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcKQEAgLTQwLDMgKzQwLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjZGMtd2RtLgogCitjb25maWcgVVNCX1RNQworCXRyaXN0YXRlICJVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFVTQiBkZXZpY2UgdGhhdCBmb2xsb3dzCisJICB0aGUgVVNCLm9yZyBzcGVjaWZpY2F0aW9uIGZvciBVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgZGV2aWNlcworCSAgdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2J0bWMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCmluZGV4IDUzNWQ1OWEuLjMyZTg1MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjZGMtYWNtLm8KIG9iai0kKENPTkZJR19VU0JfUFJJTlRFUikJKz0gdXNibHAubwogb2JqLSQoQ09ORklHX1VTQl9XRE0pCQkrPSBjZGMtd2RtLm8KK29iai0kKENPTkZJR19VU0JfVE1DKQkJKz0gdXNidG1jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBjMjU3NDUzLi4yMDEwNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0zMjYsOCArMzI2LDggQEAKIAl1c2JfbWFya19sYXN0X2J1c3koYWNtLT5kZXYpOwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggIgorCQkJInJlc3VsdCAlZCIsIF9fZnVuY19fLCByZXR2YWwpOwogfQogCiAvKiBkYXRhIGludGVyZmFjZSByZXR1cm5zIGluY29taW5nIGJ5dGVzLCBvciB3ZSBnb3QgdW50aHJvdHRsZWQgKi8KQEAgLTUxNCw3ICs1MTQsNyBAQAogCiAJcnYgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKIAlpZiAocnYgPCAwKSB7Ci0JCWVycigiQXV0b3BtIGZhaWx1cmUgaW4gJXMiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmFjbS0+ZGV2LT5kZXYsICJBdXRvcG0gZmFpbHVyZSBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWlmIChhY20tPmRlbGF5ZWRfd2IpIHsKQEAgLTg0OSw5ICs4NDksMTAgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYWNtX3diICp3YjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoYWNtLT5jb250cm9sKTsKIAogCWZvciAod2IgPSAmYWNtLT53YlswXSwgaSA9IDA7IGkgPCBBQ01fTlc7IGkrKywgd2IrKykgewotCQl1c2JfYnVmZmVyX2ZyZWUoYWNtLT5kZXYsIGFjbS0+d3JpdGVzaXplLCB3Yi0+YnVmLCB3Yi0+ZG1haCk7CisJCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPndyaXRlc2l6ZSwgd2ItPmJ1Ziwgd2ItPmRtYWgpOwogCX0KIH0KIApAQCAtOTI0LDcgKzkyNSw3IEBACiAJCiAJLyogbm9ybWFsIHByb2JpbmcqLwogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiV2VpcmQgZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiV2VpcmQgZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MzQsMjEgKzkzNSwyNCBAQAogCQkJYnVmbGVuID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYWxlbjsKIAkJCWJ1ZmZlciA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludC0+ZXh0cmE7CiAJCX0gZWxzZSB7Ci0JCQllcnIoIlplcm8gbGVuZ3RoIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJIlplcm8gbGVuZ3RoIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAogCXdoaWxlIChidWZsZW4gPiAwKSB7CiAJCWlmIChidWZmZXIgWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKLQkJCWVycigic2tpcHBpbmcgZ2FyYmFnZVxuIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJza2lwcGluZyBnYXJiYWdlXG4iKTsKIAkJCWdvdG8gbmV4dF9kZXNjOwogCQl9CiAKIAkJc3dpdGNoIChidWZmZXIgWzJdKSB7CiAJCQljYXNlIFVTQl9DRENfVU5JT05fVFlQRTogLyogd2UndmUgZm91bmQgaXQgKi8KIAkJCQlpZiAodW5pb25faGVhZGVyKSB7Ci0JCQkJCWVycigiTW9yZSB0aGFuIG9uZSB1bmlvbiBkZXNjcmlwdG9yLCBza2lwcGluZyAuLi4iKTsKKwkJCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiTW9yZSB0aGFuIG9uZSAiCisJCQkJCQkidW5pb24gZGVzY3JpcHRvciwgIgorCQkJCQkJInNraXBwaW5nIC4uLlxuIik7CiAJCQkJCWdvdG8gbmV4dF9kZXNjOwogCQkJCX0KIAkJCQl1bmlvbl9oZWFkZXIgPSAoc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyAqKQpAQCAtOTY2LDcgKzk3MCw5IEBACiAJCQkJY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gYnVmZmVyWzNdOwogCQkJCWNhbGxfaW50ZXJmYWNlX251bSA9IGJ1ZmZlcls0XTsKIAkJCQlpZiAoKGNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiAmIDMpICE9IDMpCi0JCQkJCWVycigiVGhpcyBkZXZpY2UgY2Fubm90IGRvIGNhbGxzIG9uIGl0cyBvd24uIEl0IGlzIG5vIG1vZGVtLiIpOworCQkJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJUaGlzIGRldmljZSAiCisJCQkJCQkiY2Fubm90IGRvIGNhbGxzIG9uIGl0cyBvd24uICIKKwkJCQkJCSJJdCBpcyBubyBtb2RlbS5cbiIpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiB0aGVyZSBhcmUgTE9UUyBtb3JlIENEQyBkZXNjcmlwdG9ycyB0aGF0CkBAIC0xMDUxLDcgKzEwNTcsNyBAQAogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEFDTV9UVFlfTUlOT1JTICYmIGFjbV90YWJsZVttaW5vcl07IG1pbm9yKyspOwogCiAJaWYgKG1pbm9yID09IEFDTV9UVFlfTUlOT1JTKSB7Ci0JCWVycigibm8gbW9yZSBmcmVlIGFjbSBkZXZpY2VzIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgIm5vIG1vcmUgZnJlZSBhY20gZGV2aWNlc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTQ1NCw3ICsxNDYwLDggQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCmluZGV4IDdlOGUxMjMuLjVhOGVjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKQEAgLTQyLDYgKzQyLDggQEAKIAl7IH0KIH07CiAKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgd2RtX2lkcyk7CisKICNkZWZpbmUgV0RNX01JTk9SX0JBU0UJMTc2CiAKIApAQCAtMTMyLDEwICsxMzQsMTIgQEAKIAkJCQkibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAtRVNIVVRET1dOIik7CiAJCQlicmVhazsKIAkJY2FzZSAtRVBJUEU6Ci0JCQllcnIoIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogLUVQSVBFIik7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogLUVQSVBFXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJVbmV4cGVjdGVkIGVycm9yICVkIiwgc3RhdHVzKTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkiVW5leHBlY3RlZCBlcnJvciAlZFxuIiwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTcwLDE2ICsxNzQsMTggQEAKIAkJCXJldHVybjsgLyogdW5wbHVnICovCiAJCWNhc2UgLUVQSVBFOgogCQkJc2V0X2JpdChXRE1fSU5UX1NUQUxMLCAmZGVzYy0+ZmxhZ3MpOwotCQkJZXJyKCJTdGFsbCBvbiBpbnQgZW5kcG9pbnQiKTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIlN0YWxsIG9uIGludCBlbmRwb2ludFxuIik7CiAJCQlnb3RvIHN3OyAvKiBoYWx0IGlzIGNsZWFyZWQgaW4gd29yayAqLwogCQlkZWZhdWx0OgotCQkJZXJyKCJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgc3RhdHVzKTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24pKSB7Ci0JCWVycigid2RtX2ludF9jYWxsYmFjayAtICVkIGJ5dGVzIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAid2RtX2ludF9jYWxsYmFjayAtICVkIGJ5dGVzXG4iLAorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTk4LDcgKzIwNCw4IEBACiAJCWdvdG8gZXhpdDsKIAlkZWZhdWx0OgogCQljbGVhcl9iaXQoV0RNX1BPTExfUlVOTklORywgJmRlc2MtPmZsYWdzKTsKLQkJZXJyKCJ1bmtub3duIG5vdGlmaWNhdGlvbiAlZCByZWNlaXZlZDogaW5kZXggJWQgbGVuICVkIiwKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJInVua25vd24gbm90aWZpY2F0aW9uICVkIHJlY2VpdmVkOiBpbmRleCAlZCBsZW4gJWRcbiIsCiAJCQlkci0+Yk5vdGlmaWNhdGlvblR5cGUsIGRyLT53SW5kZXgsIGRyLT53TGVuZ3RoKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTIzNiwxNCArMjQzLDE2IEBACiBzdzoKIAkJCXJ2ID0gc2NoZWR1bGVfd29yaygmZGVzYy0+cnh3b3JrKTsKIAkJCWlmIChydikKLQkJCQllcnIoIkNhbm5vdCBzY2hlZHVsZSB3b3JrIik7CisJCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCQkiQ2Fubm90IHNjaGVkdWxlIHdvcmtcbiIpOwogCQl9CiAJfQogZXhpdDoKIAlydiA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJ2KQotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgcnYpOworCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQlfX2Z1bmNfXywgcnYpOwogCiB9CiAKQEAgLTM1Myw3ICszNjIsNyBAQAogCWlmIChydiA8IDApIHsKIAkJa2ZyZWUoYnVmKTsKIAkJY2xlYXJfYml0KFdETV9JTl9VU0UsICZkZXNjLT5mbGFncyk7Ci0JCWVycigiVHggVVJCIGVycm9yOiAlZCIsIHJ2KTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAiVHggVVJCIGVycm9yOiAlZFxuIiwgcnYpOwogCX0gZWxzZSB7CiAJCWRldl9kYmcoJmRlc2MtPmludGYtPmRldiwgIlR4IFVSQiBoYXMgYmVlbiBzdWJtaXR0ZWQgaW5kZXg9JWQiLAogCQkJcmVxLT53SW5kZXgpOwpAQCAtNDAxLDcgKzQxMCw4IEBACiAJCQlpbnQgdCA9IGRlc2MtPnJlcnI7CiAJCQlkZXNjLT5yZXJyID0gMDsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+aXVzcGluKTsKLQkJCWVycigicmVhZGluZyBoYWQgcmVzdWx0ZWQgaW4gJWQiLCB0KTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkicmVhZGluZyBoYWQgcmVzdWx0ZWQgaW4gJWRcbiIsIHQpOwogCQkJcnYgPSAtRUlPOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTQ0MCw3ICs0NTAsNyBAQAogZXJyOgogCW11dGV4X3VubG9jaygmZGVzYy0+cmxvY2spOwogCWlmIChydiA8IDApCi0JCWVycigid2RtX3JlYWQ6IGV4aXQgZXJyb3IiKTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAid2RtX3JlYWQ6IGV4aXQgZXJyb3JcbiIpOwogCXJldHVybiBydjsKIH0KIApAQCAtNDUwLDcgKzQ2MCw4IEBACiAKIAl3YWl0X2V2ZW50KGRlc2MtPndhaXQsICF0ZXN0X2JpdChXRE1fSU5fVVNFLCAmZGVzYy0+ZmxhZ3MpKTsKIAlpZiAoZGVzYy0+d2VyciA8IDApCi0JCWVycigiRXJyb3IgaW4gZmx1c2ggcGF0aDogJWQiLCBkZXNjLT53ZXJyKTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAiRXJyb3IgaW4gZmx1c2ggcGF0aDogJWRcbiIsCisJCQlkZXNjLT53ZXJyKTsKIAogCXJldHVybiBkZXNjLT53ZXJyOwogfQpAQCAtNTAyLDcgKzUxMyw3IEBACiAKIAlydiA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXNjLT5pbnRmKTsKIAlpZiAocnYgPCAwKSB7Ci0JCWVycigiRXJyb3IgYXV0b3BtIC0gJWQiLCBydik7CisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIkVycm9yIGF1dG9wbSAtICVkXG4iLCBydik7CiAJCWdvdG8gb3V0OwogCX0KIAlpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKQEAgLTUxMiw3ICs1MjMsOCBAQAogCQlydiA9IHVzYl9zdWJtaXRfdXJiKGRlc2MtPnZhbGlkaXR5LCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJ2IDwgMCkgewogCQkJZGVzYy0+Y291bnQtLTsKLQkJCWVycigiRXJyb3Igc3VibWl0dGluZyBpbnQgdXJiIC0gJWQiLCBydik7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIkVycm9yIHN1Ym1pdHRpbmcgaW50IHVyYiAtICVkXG4iLCBydik7CiAJCX0KIAl9IGVsc2UgewogCQlydiA9IDA7CkBAIC02MDAsNyArNjEyLDcgQEAKIAogCXdoaWxlIChidWZsZW4gPiAwKSB7CiAJCWlmIChidWZmZXIgWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKLQkJCWVycigic2tpcHBpbmcgZ2FyYmFnZSIpOworCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAic2tpcHBpbmcgZ2FyYmFnZVxuIik7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQogCkBAIC02MTQsNyArNjI2LDggQEAKIAkJCQkiRmluZGluZyBtYXhpbXVtIGJ1ZmZlciBsZW5ndGg6ICVkIiwgbWF4Y29tKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJJZ25vcmluZyBleHRyYSBoZWFkZXIsIHR5cGUgJWQsIGxlbmd0aCAlZCIsCisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJIklnbm9yaW5nIGV4dHJhIGhlYWRlciwgdHlwZSAlZCwgbGVuZ3RoICVkXG4iLAogCQkJCWJ1ZmZlclsyXSwgYnVmZmVyWzBdKTsKIAkJCWJyZWFrOwogCQl9CkBAIC03NzIsNyArNzg1LDggQEAKIAlpZiAoZGVzYy0+Y291bnQpIHsKIAkJcnYgPSB1c2Jfc3VibWl0X3VyYihkZXNjLT52YWxpZGl0eSwgR0ZQX05PSU8pOwogCQlpZiAocnYgPCAwKQotCQkJZXJyKCJFcnJvciByZXN1bWUgc3VibWl0dGluZyBpbnQgdXJiIC0gJWQiLCBydik7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIkVycm9yIHJlc3VtZSBzdWJtaXR0aW5nIGludCB1cmIgLSAlZFxuIiwgcnYpOwogCX0KIAlyZXR1cm4gcnY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCAwNjQ3MTY0Li5iNTc3NWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTU5Myw4ICs1OTMsOSBAQAogCQkJCWVyciA9IHVzYmxwX2hwX2NoYW5uZWxfY2hhbmdlX3JlcXVlc3QodXNibHAsCiAJCQkJCWFyZywgJm5ld0NoYW5uZWwpOwogCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWVycigidXNibHAlZDogZXJyb3IgPSAlZCBzZXR0aW5nICIKLQkJCQkJCSJIUCBjaGFubmVsIiwKKwkJCQkJZGV2X2VycigmdXNibHAtPmRldi0+ZGV2LAorCQkJCQkJInVzYmxwJWQ6IGVycm9yID0gJWQgc2V0dGluZyAiCisJCQkJCQkiSFAgY2hhbm5lbFxuIiwKIAkJCQkJCXVzYmxwLT5taW5vciwgZXJyKTsKIAkJCQkJcmV0dmFsID0gLUVJTzsKIAkJCQkJZ290byBkb25lOwpAQCAtMTA3NiwxNSArMTA3NywxNiBAQAogCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKLQlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gTlVMTDsKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwOwogCWludCBwcm90b2NvbDsKIAlpbnQgcmV0dmFsOwogCiAJLyogTWFsbG9jIGFuZCBzdGFydCBpbml0aWFsaXppbmcgdXNibHAgc3RydWN0dXJlIHNvIHdlIGNhbiB1c2UgaXQKIAkgKiBkaXJlY3RseS4gKi8KLQlpZiAoISh1c2JscCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JscCksIEdGUF9LRVJORUwpKSkgeworCXVzYmxwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmxwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1c2JscCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGFib3J0OworCQlnb3RvIGFib3J0X3JldDsKIAl9CiAJdXNibHAtPmRldiA9IGRldjsKIAltdXRleF9pbml0KCZ1c2JscC0+d211dCk7CkBAIC0xMTc5LDEyICsxMTgxLDExIEBACiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pZWVlMTI4NF9pZCk7CiBhYm9ydDoKLQlpZiAodXNibHApIHsKLQkJa2ZyZWUodXNibHAtPnJlYWRidWYpOwotCQlrZnJlZSh1c2JscC0+c3RhdHVzYnVmKTsKLQkJa2ZyZWUodXNibHAtPmRldmljZV9pZF9zdHJpbmcpOwotCQlrZnJlZSh1c2JscCk7Ci0JfQorCWtmcmVlKHVzYmxwLT5yZWFkYnVmKTsKKwlrZnJlZSh1c2JscC0+c3RhdHVzYnVmKTsKKwlrZnJlZSh1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyk7CisJa2ZyZWUodXNibHApOworYWJvcnRfcmV0OgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEzNDUsNyArMTM0Niw3IEBACiAJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JscF9jbGFzcyk7CiAKIAlpZiAoIXVzYmxwIHx8ICF1c2JscC0+ZGV2KSB7Ci0JCWVycigiYm9ndXMgZGlzY29ubmVjdCIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJib2d1cyBkaXNjb25uZWN0XG4iKTsKIAkJQlVHICgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDM4MTFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKQEAgLTAsMCArMSwxMDg3IEBACisvKioKKyAqIGRyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIC0gVVNCIFRlc3QgJiBNZWFzdXJtZW50IGNsYXNzIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGVmYW4gS29wcCwgR2VjaGluZ2VuLCBHZXJtYW55CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm92ZWxsLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3RtYy5oPgorCisKKyNkZWZpbmUgVVNCVE1DX01JTk9SX0JBU0UJMTc2CisKKy8qCisgKiBTaXplIG9mIGRyaXZlciBpbnRlcm5hbCBJTyBidWZmZXIuIE11c3QgYmUgbXVsdGlwbGUgb2YgNCBhbmQgYXQgbGVhc3QgYXMKKyAqIGxhcmdlIGFzIHdNYXhQYWNrZXRTaXplICh3aGljaCBpcyB1c3VhbGx5IDUxMiBieXRlcykuCisgKi8KKyNkZWZpbmUgVVNCVE1DX1NJWkVfSU9CVUZGRVIJMjA0OAorCisvKiBEZWZhdWx0IFVTQiB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpICovCisjZGVmaW5lIFVTQlRNQ19USU1FT1VUCQkxMAorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgcmVhZCBjeWNsZXMgdG8gZW1wdHkgYnVsayBpbiBlbmRwb2ludCBkdXJpbmcgQ0xFQVIgYW5kCisgKiBBQk9SVF9CVUxLX0lOIHJlcXVlc3RzLiBFbmRzIHRoZSBsb29wIGlmIChmb3Igd2hhdGV2ZXIgcmVhc29uKSBhIHNob3J0CisgKiBwYWNrZXQgaXMgbmV2ZXIgcmVhZC4KKyAqLworI2RlZmluZSBVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4JMTAwCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J0bWNfZGV2aWNlc1tdID0geworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19BUFBfU1BFQywgMywgMCksIH0sCisJeyAwLCB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGNhcGFiaWxpdGllcyBmb3IgdGhlIGRldmljZQorICogU2VlIHNlY3Rpb24gNC4yLjEuOCBvZiB0aGUgVVNCVE1DIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgKi8KK3N0cnVjdCB1c2J0bWNfZGV2X2NhcGFiaWxpdGllcyB7CisJX191OCBpbnRlcmZhY2VfY2FwYWJpbGl0aWVzOworCV9fdTggZGV2aWNlX2NhcGFiaWxpdGllczsKKwlfX3U4IHVzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzOworCV9fdTggdXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXM7Cit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggVVNCVE1DIGRldmljZS4gT25lIGNvcHkgaXMKKyAqIGFsbG9jYXRlZCBmb3IgZWFjaCBVU0JUTUMgZGV2aWNlIGluIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbi4KKyAqLworc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCisJdW5zaWduZWQgaW50IGJ1bGtfaW47CisJdW5zaWduZWQgaW50IGJ1bGtfb3V0OworCisJdTggYlRhZzsKKwl1OCBiVGFnX2xhc3Rfd3JpdGU7CS8qIG5lZWRlZCBmb3IgYWJvcnQgKi8KKwl1OCBiVGFnX2xhc3RfcmVhZDsJLyogbmVlZGVkIGZvciBhYm9ydCAqLworCisJLyogYXR0cmlidXRlcyBmcm9tIHRoZSBVU0IgVE1DIHNwZWMgZm9yIHRoaXMgZGV2aWNlICovCisJdTggVGVybUNoYXI7CisJYm9vbCBUZXJtQ2hhckVuYWJsZWQ7CisJYm9vbCBhdXRvX2Fib3J0OworCisJc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzCWNhcGFiaWxpdGllczsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXN0cnVjdCBtdXRleCBpb19tdXRleDsJLyogb25seSBvbmUgaS9vIGZ1bmN0aW9uIHJ1bm5pbmcgYXQgYSB0aW1lICovCit9OworI2RlZmluZSB0b191c2J0bWNfZGF0YShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSwga3JlZikKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0bWNfZHJpdmVyOworCitzdGF0aWMgdm9pZCB1c2J0bWNfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB0b191c2J0bWNfZGF0YShrcmVmKTsKKworCXVzYl9wdXRfZGV2KGRhdGEtPnVzYl9kZXYpOworCWtmcmVlKGRhdGEpOworfQorCitzdGF0aWMgaW50IHVzYnRtY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisKKwlpbnRmID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZ1c2J0bWNfZHJpdmVyLCBpbWlub3IoaW5vZGUpKTsKKwlpZiAoIWludGYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBjYW4gbm90IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsIGltaW5vcihpbm9kZSkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJa3JlZl9nZXQoJmRhdGEtPmtyZWYpOworCisJLyogU3RvcmUgcG9pbnRlciBpbiBmaWxlIHN0cnVjdHVyZSdzIHByaXZhdGUgZGF0YSBmaWVsZCAqLworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRhdGE7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB1c2J0bWNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJa3JlZl9wdXQoJmRhdGEtPmtyZWYsIHVzYnRtY19kZWxldGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9hYm9ydF9idWxrX2luKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJY2hhciAqYnVmZmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgcnY7CisJaW50IG47CisJaW50IGFjdHVhbDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpjdXJyZW50X3NldHRpbmc7CisJaW50IG1heF9zaXplOworCisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKwlidWZmZXIgPSBrbWFsbG9jKFVTQlRNQ19TSVpFX0lPQlVGRkVSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfSU4sCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgZGF0YS0+YlRhZ19sYXN0X3JlYWQsIGRhdGEtPmJ1bGtfaW4sCisJCQkgICAgIGJ1ZmZlciwgMiwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX0lOIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX0ZBSUxFRCkgeworCQlydiA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGRldiwgIklOSVRJQVRFX0FCT1JUX0JVTEtfSU4gcmV0dXJuZWQgJXhcbiIsCisJCQlidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCW1heF9zaXplID0gMDsKKwljdXJyZW50X3NldHRpbmcgPSBkYXRhLT5pbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKG4gPSAwOyBuIDwgY3VycmVudF9zZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykKKwkJaWYgKGN1cnJlbnRfc2V0dGluZy0+ZW5kcG9pbnRbbl0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzID09CisJCQlkYXRhLT5idWxrX2luKQorCQkJbWF4X3NpemUgPSBsZTE2X3RvX2NwdShjdXJyZW50X3NldHRpbmctPmVuZHBvaW50W25dLgorCQkJCQkJZGVzYy53TWF4UGFja2V0U2l6ZSk7CisKKwlpZiAobWF4X3NpemUgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGdldCB3TWF4UGFja2V0U2l6ZVxuIik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZygmZGF0YS0+aW50Zi0+ZGV2LCAid01heFBhY2tldFNpemUgaXMgJWRcbiIsIG1heF9zaXplKTsKKworCW4gPSAwOworCisJZG8geworCQlkZXZfZGJnKGRldiwgIlJlYWRpbmcgZnJvbSBidWxrIGluIEVQXG4iKTsKKworCQlydiA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkgIGRhdGEtPmJ1bGtfaW4pLAorCQkJCSAgYnVmZmVyLCBVU0JUTUNfU0laRV9JT0JVRkZFUiwKKwkJCQkgICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQluKys7CisKKwkJaWYgKHJ2IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJ1c2JfYnVsa19tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0gd2hpbGUgKChhY3R1YWwgPT0gbWF4X3NpemUpICYmCisJCSAobiA8IFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTikpOworCisJaWYgKGFjdHVhbCA9PSBtYXhfc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGNsZWFyIGRldmljZSBidWZmZXIgd2l0aGluICVkIGN5Y2xlc1xuIiwKKwkJCVVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJbiA9IDA7CisKK3VzYnRtY19hYm9ydF9idWxrX2luX3N0YXR1czoKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfSU5fU1RBVFVTLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIDAsIGRhdGEtPmJ1bGtfaW4sIGJ1ZmZlciwgMHgwOCwKKwkJCSAgICAgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX0lOIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcnYgPSAwOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1BFTkRJTkcpIHsKKwkJZGV2X2VycihkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX0lOIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChidWZmZXJbMV0gPT0gMSkKKwkJZG8geworCQkJZGV2X2RiZyhkZXYsICJSZWFkaW5nIGZyb20gYnVsayBpbiBFUFxuIik7CisKKwkJCXJ2ID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkJICBkYXRhLT5idWxrX2luKSwKKwkJCQkJICBidWZmZXIsIFVTQlRNQ19TSVpFX0lPQlVGRkVSLAorCQkJCQkgICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQkJbisrOworCisJCQlpZiAocnYgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJ1c2JfYnVsa19tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0gd2hpbGUgKChhY3R1YWwgPSBtYXhfc2l6ZSkgJiYKKwkJCSAobiA8IFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTikpOworCisJaWYgKGFjdHVhbCA9PSBtYXhfc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGNsZWFyIGRldmljZSBidWZmZXIgd2l0aGluICVkIGN5Y2xlc1xuIiwKKwkJCVVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZ290byB1c2J0bWNfYWJvcnRfYnVsa19pbl9zdGF0dXM7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcnY7CisKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19vdXQoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdTggKmJ1ZmZlcjsKKwlpbnQgcnY7CisJaW50IG47CisKKwlkZXYgPSAmZGF0YS0+aW50Zi0+ZGV2OworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfT1VULAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIGRhdGEtPmJUYWdfbGFzdF93cml0ZSwgZGF0YS0+YnVsa19vdXQsCisJCQkgICAgIGJ1ZmZlciwgMiwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX09VVCByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCWRldl9lcnIoZGV2LCAiSU5JVElBVEVfQUJPUlRfQlVMS19PVVQgcmV0dXJuZWQgJXhcbiIsCisJCQlidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCW4gPSAwOworCit1c2J0bWNfYWJvcnRfYnVsa19vdXRfY2hlY2tfc3RhdHVzOgorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQUJPUlRfQlVMS19PVVRfU1RBVFVTLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIDAsIGRhdGEtPmJ1bGtfb3V0LCBidWZmZXIsIDB4MDgsCisJCQkgICAgIFVTQlRNQ19USU1FT1VUKTsKKwluKys7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJDSEVDS19BQk9SVF9CVUxLX09VVCByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gPT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIHVzYnRtY19hYm9ydF9idWxrX291dF9jbGVhcl9oYWx0OworCisJaWYgKChidWZmZXJbMF0gPT0gVVNCVE1DX1NUQVRVU19QRU5ESU5HKSAmJgorCSAgICAobiA8IFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTikpCisJCWdvdG8gdXNidG1jX2Fib3J0X2J1bGtfb3V0X2NoZWNrX3N0YXR1czsKKworCXJ2ID0gLUVQRVJNOworCWdvdG8gZXhpdDsKKwordXNidG1jX2Fib3J0X2J1bGtfb3V0X2NsZWFyX2hhbHQ6CisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCisJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJICAgICBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIFVTQl9FTkRQT0lOVF9IQUxULCBkYXRhLT5idWxrX291dCwgYnVmZmVyLAorCQkJICAgICAwLCBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgc3NpemVfdCB1c2J0bWNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGludCBuX2NoYXJhY3RlcnM7CisJdTggKmJ1ZmZlcjsKKwlpbnQgYWN0dWFsOworCWludCBkb25lOworCWludCByZW1haW5pbmc7CisJaW50IHJldHZhbDsKKwlpbnQgdGhpc19wYXJ0OworCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCWRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKworCWJ1ZmZlciA9IGttYWxsb2MoVVNCVE1DX1NJWkVfSU9CVUZGRVIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKworCXJlbWFpbmluZyA9IGNvdW50OworCWRvbmUgPSAwOworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKKwkJaWYgKHJlbWFpbmluZyA+IFVTQlRNQ19TSVpFX0lPQlVGRkVSIC0gMTIgLSAzKQorCQkJdGhpc19wYXJ0ID0gVVNCVE1DX1NJWkVfSU9CVUZGRVIgLSAxMiAtIDM7CisJCWVsc2UKKwkJCXRoaXNfcGFydCA9IHJlbWFpbmluZzsKKworCQkvKiBTZXR1cCBJTyBidWZmZXIgZm9yIERFVl9ERVBfTVNHX0lOIG1lc3NhZ2UKKwkJICogUmVmZXIgdG8gY2xhc3Mgc3BlY3MgZm9yIGRldGFpbHMKKwkJICovCisJCWJ1ZmZlclswXSA9IDI7CisJCWJ1ZmZlclsxXSA9IGRhdGEtPmJUYWc7CisJCWJ1ZmZlclsyXSA9IH4oZGF0YS0+YlRhZyk7CisJCWJ1ZmZlclszXSA9IDA7IC8qIFJlc2VydmVkICovCisJCWJ1ZmZlcls0XSA9ICh0aGlzX3BhcnQgLSAxMiAtIDMpICYgMjU1OworCQlidWZmZXJbNV0gPSAoKHRoaXNfcGFydCAtIDEyIC0gMykgPj4gOCkgJiAyNTU7CisJCWJ1ZmZlcls2XSA9ICgodGhpc19wYXJ0IC0gMTIgLSAzKSA+PiAxNikgJiAyNTU7CisJCWJ1ZmZlcls3XSA9ICgodGhpc19wYXJ0IC0gMTIgLSAzKSA+PiAyNCkgJiAyNTU7CisJCWJ1ZmZlcls4XSA9IGRhdGEtPlRlcm1DaGFyRW5hYmxlZCAqIDI7CisJCS8qIFVzZSB0ZXJtIGNoYXJhY3Rlcj8gKi8KKwkJYnVmZmVyWzldID0gZGF0YS0+VGVybUNoYXI7CisJCWJ1ZmZlclsxMF0gPSAwOyAvKiBSZXNlcnZlZCAqLworCQlidWZmZXJbMTFdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKworCQkvKiBTZW5kIGJ1bGsgVVJCICovCisJCXJldHZhbCA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJICAgICAgZGF0YS0+YnVsa19vdXQpLAorCQkJCSAgICAgIGJ1ZmZlciwgMTIsICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQkvKiBTdG9yZSBiVGFnIChpbiBjYXNlIHdlIG5lZWQgdG8gYWJvcnQpICovCisJCWRhdGEtPmJUYWdfbGFzdF93cml0ZSA9IGRhdGEtPmJUYWc7CisKKwkJLyogSW5jcmVtZW50IGJUYWcgLS0gYW5kIGluY3JlbWVudCBhZ2FpbiBpZiB6ZXJvICovCisJCWRhdGEtPmJUYWcrKzsKKwkJaWYgKCFkYXRhLT5iVGFnKQorCQkJKGRhdGEtPmJUYWcpKys7CisKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAidXNiX2J1bGtfbXNnIHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCQkJaWYgKGRhdGEtPmF1dG9fYWJvcnQpCisJCQkJdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfb3V0KGRhdGEpOworCQkJZ290byBleGl0OworCQl9CisKKwkJLyogU2VuZCBidWxrIFVSQiAqLworCQlyZXR2YWwgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCSAgICAgIGRhdGEtPmJ1bGtfaW4pLAorCQkJCSAgICAgIGJ1ZmZlciwgVVNCVE1DX1NJWkVfSU9CVUZGRVIsICZhY3R1YWwsCisJCQkJICAgICAgVVNCVE1DX1RJTUVPVVQpOworCisJCS8qIFN0b3JlIGJUYWcgKGluIGNhc2Ugd2UgbmVlZCB0byBhYm9ydCkgKi8KKwkJZGF0YS0+YlRhZ19sYXN0X3JlYWQgPSBkYXRhLT5iVGFnOworCisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWFkIGRhdGEsIGVycm9yICVkXG4iLCByZXR2YWwpOworCQkJaWYgKGRhdGEtPmF1dG9fYWJvcnQpCisJCQkJdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfaW4oZGF0YSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQkvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIGRpZCB0aGUgaW5zdHJ1bWVudCBzZW5kPyAqLworCQluX2NoYXJhY3RlcnMgPSBidWZmZXJbNF0gKworCQkJICAgICAgIChidWZmZXJbNV0gPDwgOCkgKworCQkJICAgICAgIChidWZmZXJbNl0gPDwgMTYpICsKKwkJCSAgICAgICAoYnVmZmVyWzddIDw8IDI0KTsKKworCQkvKiBDb3B5IGJ1ZmZlciB0byB1c2VyIHNwYWNlICovCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsgZG9uZSwgJmJ1ZmZlclsxMl0sIG5fY2hhcmFjdGVycykpIHsKKwkJCS8qIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGFuIGFkZHJlc3NpbmcgcHJvYmxlbSAqLworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWRvbmUgKz0gbl9jaGFyYWN0ZXJzOworCQlpZiAobl9jaGFyYWN0ZXJzIDwgVVNCVE1DX1NJWkVfSU9CVUZGRVIpCisJCQlyZW1haW5pbmcgPSAwOworCX0KKworCS8qIFVwZGF0ZSBmaWxlIHBvc2l0aW9uIHZhbHVlICovCisJKmZfcG9zID0gKmZfcG9zICsgZG9uZTsKKwlyZXR2YWwgPSBkb25lOworCitleGl0OgorCW11dGV4X3VubG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgdXNidG1jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCXU4ICpidWZmZXI7CisJaW50IHJldHZhbDsKKwlpbnQgYWN0dWFsOworCXVuc2lnbmVkIGxvbmcgaW50IG5fYnl0ZXM7CisJaW50IG47CisJaW50IHJlbWFpbmluZzsKKwlpbnQgZG9uZTsKKwlpbnQgdGhpc19wYXJ0OworCisJZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWJ1ZmZlciA9IGttYWxsb2MoVVNCVE1DX1NJWkVfSU9CVUZGRVIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKworCXJlbWFpbmluZyA9IGNvdW50OworCWRvbmUgPSAwOworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKKwkJaWYgKHJlbWFpbmluZyA+IFVTQlRNQ19TSVpFX0lPQlVGRkVSIC0gMTIpIHsKKwkJCXRoaXNfcGFydCA9IFVTQlRNQ19TSVpFX0lPQlVGRkVSIC0gMTI7CisJCQlidWZmZXJbOF0gPSAwOworCQl9IGVsc2UgeworCQkJdGhpc19wYXJ0ID0gcmVtYWluaW5nOworCQkJYnVmZmVyWzhdID0gMTsKKwkJfQorCisJCS8qIFNldHVwIElPIGJ1ZmZlciBmb3IgREVWX0RFUF9NU0dfT1VUIG1lc3NhZ2UgKi8KKwkJYnVmZmVyWzBdID0gMTsKKwkJYnVmZmVyWzFdID0gZGF0YS0+YlRhZzsKKwkJYnVmZmVyWzJdID0gfihkYXRhLT5iVGFnKTsKKwkJYnVmZmVyWzNdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKwkJYnVmZmVyWzRdID0gdGhpc19wYXJ0ICYgMjU1OworCQlidWZmZXJbNV0gPSAodGhpc19wYXJ0ID4+IDgpICYgMjU1OworCQlidWZmZXJbNl0gPSAodGhpc19wYXJ0ID4+IDE2KSAmIDI1NTsKKwkJYnVmZmVyWzddID0gKHRoaXNfcGFydCA+PiAyNCkgJiAyNTU7CisJCS8qIGJ1ZmZlcls4XSBpcyBzZXQgYWJvdmUuLi4gKi8KKwkJYnVmZmVyWzldID0gMDsgLyogUmVzZXJ2ZWQgKi8KKwkJYnVmZmVyWzEwXSA9IDA7IC8qIFJlc2VydmVkICovCisJCWJ1ZmZlclsxMV0gPSAwOyAvKiBSZXNlcnZlZCAqLworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmZmVyWzEyXSwgYnVmICsgZG9uZSwgdGhpc19wYXJ0KSkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCW5fYnl0ZXMgPSAxMiArIHRoaXNfcGFydDsKKwkJaWYgKHRoaXNfcGFydCAlIDQpCisJCQluX2J5dGVzICs9IDQgLSB0aGlzX3BhcnQgJSA0OworCQkJZm9yIChuID0gMTIgKyB0aGlzX3BhcnQ7IG4gPCBuX2J5dGVzOyBuKyspCisJCQkJYnVmZmVyW25dID0gMDsKKworCQlyZXR2YWwgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCSAgICAgIGRhdGEtPmJ1bGtfb3V0KSwKKwkJCQkgICAgICBidWZmZXIsIG5fYnl0ZXMsICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQlkYXRhLT5iVGFnX2xhc3Rfd3JpdGUgPSBkYXRhLT5iVGFnOworCQlkYXRhLT5iVGFnKys7CisKKwkJaWYgKCFkYXRhLT5iVGFnKQorCQkJZGF0YS0+YlRhZysrOworCisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlkZXZfZXJyKCZkYXRhLT5pbnRmLT5kZXYsCisJCQkJIlVuYWJsZSB0byBzZW5kIGRhdGEsIGVycm9yICVkXG4iLCByZXR2YWwpOworCQkJaWYgKGRhdGEtPmF1dG9fYWJvcnQpCisJCQkJdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfb3V0KGRhdGEpOworCQkJZ290byBleGl0OworCQl9CisKKwkJcmVtYWluaW5nIC09IHRoaXNfcGFydDsKKwkJZG9uZSArPSB0aGlzX3BhcnQ7CisJfQorCisJcmV0dmFsID0gY291bnQ7CitleGl0OgorCW11dGV4X3VubG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfY2xlYXIoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpjdXJyZW50X3NldHRpbmc7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1OCAqYnVmZmVyOworCWludCBydjsKKwlpbnQgbjsKKwlpbnQgYWN0dWFsOworCWludCBtYXhfc2l6ZTsKKworCWRldiA9ICZkYXRhLT5pbnRmLT5kZXY7CisKKwlkZXZfZGJnKGRldiwgIlNlbmRpbmcgSU5JVElBVEVfQ0xFQVIgcmVxdWVzdFxuIik7CisKKwlidWZmZXIgPSBrbWFsbG9jKFVTQlRNQ19TSVpFX0lPQlVGRkVSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0NMRUFSLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAwLCAwLCBidWZmZXIsIDEsIFVTQlRNQ19USU1FT1VUKTsKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIklOSVRJQVRFX0NMRUFSIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycihkZXYsICJJTklUSUFURV9DTEVBUiByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwltYXhfc2l6ZSA9IDA7CisJY3VycmVudF9zZXR0aW5nID0gZGF0YS0+aW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChuID0gMDsgbiA8IGN1cnJlbnRfc2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBuKyspIHsKKwkJZGVzYyA9ICZjdXJyZW50X3NldHRpbmctPmVuZHBvaW50W25dLmRlc2M7CisJCWlmIChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzID09IGRhdGEtPmJ1bGtfaW4pCisJCQltYXhfc2l6ZSA9IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwl9CisKKwlpZiAobWF4X3NpemUgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGdldCB3TWF4UGFja2V0U2l6ZVxuIik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJ3TWF4UGFja2V0U2l6ZSBpcyAlZFxuIiwgbWF4X3NpemUpOworCisJbiA9IDA7CisKK3VzYnRtY19jbGVhcl9jaGVja19zdGF0dXM6CisKKwlkZXZfZGJnKGRldiwgIlNlbmRpbmcgQ0hFQ0tfQ0xFQVJfU1RBVFVTIHJlcXVlc3RcbiIpOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9DSEVDS19DTEVBUl9TVEFUVVMsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgIDAsIDAsIGJ1ZmZlciwgMiwgVVNCVE1DX1RJTUVPVVQpOworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiQ0hFQ0tfQ0xFQVJfU1RBVFVTIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gdXNidG1jX2NsZWFyX2J1bGtfb3V0X2hhbHQ7CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfUEVORElORykgeworCQlkZXZfZXJyKGRldiwgIkNIRUNLX0NMRUFSX1NUQVRVUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYnVmZmVyWzFdID09IDEpCisJCWRvIHsKKwkJCWRldl9kYmcoZGV2LCAiUmVhZGluZyBmcm9tIGJ1bGsgaW4gRVBcbiIpOworCisJCQlydiA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCQkgIHVzYl9yY3ZidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJCSAgZGF0YS0+YnVsa19pbiksCisJCQkJCSAgYnVmZmVyLCBVU0JUTUNfU0laRV9JT0JVRkZFUiwKKwkJCQkJICAmYWN0dWFsLCBVU0JUTUNfVElNRU9VVCk7CisJCQluKys7CisKKwkJCWlmIChydiA8IDApIHsKKwkJCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwKKwkJCQkJcnYpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfSB3aGlsZSAoKGFjdHVhbCA9PSBtYXhfc2l6ZSkgJiYKKwkJCSAgKG4gPCBVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pKTsKKworCWlmIChhY3R1YWwgPT0gbWF4X3NpemUpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBjbGVhciBkZXZpY2UgYnVmZmVyIHdpdGhpbiAlZCBjeWNsZXNcbiIsCisJCQlVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWdvdG8gdXNidG1jX2NsZWFyX2NoZWNrX3N0YXR1czsKKwordXNidG1jX2NsZWFyX2J1bGtfb3V0X2hhbHQ6CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgVVNCX0VORFBPSU5UX0hBTFQsCisJCQkgICAgIGRhdGEtPmJ1bGtfb3V0LCBidWZmZXIsIDAsCisJCQkgICAgIFVTQlRNQ19USU1FT1VUKTsKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9jbGVhcl9vdXRfaGFsdChzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCisJYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgVVNCX0VORFBPSU5UX0hBTFQsIGRhdGEtPmJ1bGtfb3V0LAorCQkJICAgICBidWZmZXIsIDAsIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycigmZGF0YS0+dXNiX2Rldi0+ZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkJcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCXJ2ID0gMDsKKworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfY2xlYXJfaW5faGFsdChzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCisJYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgVVNCX0VORFBPSU5UX0hBTFQsIGRhdGEtPmJ1bGtfaW4sIGJ1ZmZlciwgMCwKKwkJCSAgICAgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKCZkYXRhLT51c2JfZGV2LT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCisJCQlydik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IGdldF9jYXBhYmlsaXRpZXMoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+dXNiX2Rldi0+ZGV2OworCWNoYXIgKmJ1ZmZlcjsKKwlpbnQgcnY7CisKKwlidWZmZXIgPSBrbWFsbG9jKDB4MTgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfR0VUX0NBUEFCSUxJVElFUywKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgMCwgMCwgYnVmZmVyLCAweDE4LCBVU0JUTUNfVElNRU9VVCk7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlyZXR1cm4gcnY7CisJfQorCisJZGV2X2RiZyhkZXYsICJHRVRfQ0FQQUJJTElUSUVTIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCWRldl9kYmcoZGV2LCAiSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlcls0XSk7CisJZGV2X2RiZyhkZXYsICJEZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzVdKTsKKwlkZXZfZGJnKGRldiwgIlVTQjQ4OCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzE0XSk7CisJZGV2X2RiZyhkZXYsICJVU0I0ODggZGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlclsxNV0pOworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCWRldl9lcnIoZGV2LCAiR0VUX0NBUEFCSUxJVElFUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlkYXRhLT5jYXBhYmlsaXRpZXMuaW50ZXJmYWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlcls0XTsKKwlkYXRhLT5jYXBhYmlsaXRpZXMuZGV2aWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlcls1XTsKKwlkYXRhLT5jYXBhYmlsaXRpZXMudXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbMTRdOworCWRhdGEtPmNhcGFiaWxpdGllcy51c2I0ODhfZGV2aWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlclsxNV07CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIGNhcGFiaWxpdHlfYXR0cmlidXRlKG5hbWUpCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+Y2FwYWJpbGl0aWVzLm5hbWUpOwkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93XyMjbmFtZSwgTlVMTCkKKworY2FwYWJpbGl0eV9hdHRyaWJ1dGUoaW50ZXJmYWNlX2NhcGFiaWxpdGllcyk7CitjYXBhYmlsaXR5X2F0dHJpYnV0ZShkZXZpY2VfY2FwYWJpbGl0aWVzKTsKK2NhcGFiaWxpdHlfYXR0cmlidXRlKHVzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzKTsKK2NhcGFiaWxpdHlfYXR0cmlidXRlKHVzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmNhcGFiaWxpdHlfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfaW50ZXJmYWNlX2NhcGFiaWxpdGllcy5hdHRyLAorCSZkZXZfYXR0cl9kZXZpY2VfY2FwYWJpbGl0aWVzLmF0dHIsCisJJmRldl9hdHRyX3VzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzLmF0dHIsCisJJmRldl9hdHRyX3VzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcGFiaWxpdHlfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gY2FwYWJpbGl0eV9hdHRycywKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfVGVybUNoYXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWNcbiIsIGRhdGEtPlRlcm1DaGFyKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfVGVybUNoYXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChjb3VudCA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCWRhdGEtPlRlcm1DaGFyID0gYnVmWzBdOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihUZXJtQ2hhciwgU19JUlVHTywgc2hvd19UZXJtQ2hhciwgc3RvcmVfVGVybUNoYXIpOworCisjZGVmaW5lIGRhdGFfYXR0cmlidXRlKG5hbWUpCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPm5hbWUpOwkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzdG9yZV8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCQlcCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJc3NpemVfdCByZXN1bHQ7CQkJCQkJCVwKKwl1bnNpZ25lZCB2YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWwpOwkJCQlcCisJaWYgKHJlc3VsdCAhPSAxKQkJCQkJCVwKKwkJcmVzdWx0ID0gLUVJTlZBTDsJCQkJCVwKKwlkYXRhLT5uYW1lID0gdmFsOwkJCQkJCVwKKwlpZiAocmVzdWx0IDwgMCkJCQkJCQkJXAorCQlyZXR1cm4gcmVzdWx0OwkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCXJldHVybiBjb3VudDsJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfIyNuYW1lLCBzdG9yZV8jI25hbWUpCisKK2RhdGFfYXR0cmlidXRlKFRlcm1DaGFyRW5hYmxlZCk7CitkYXRhX2F0dHJpYnV0ZShhdXRvX2Fib3J0KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhdGFfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfVGVybUNoYXIuYXR0ciwKKwkmZGV2X2F0dHJfVGVybUNoYXJFbmFibGVkLmF0dHIsCisJJmRldl9hdHRyX2F1dG9fYWJvcnQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGF0YV9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBkYXRhX2F0dHJzLAorfTsKKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfaW5kaWNhdG9yX3B1bHNlKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKworCWJ1ZmZlciA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9JTkRJQ0FUT1JfUFVMU0UsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgIDAsIDAsIGJ1ZmZlciwgMHgwMSwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTkRJQ0FUT1JfUFVMU0UgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGRldiwgIklORElDQVRPUl9QVUxTRSByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgbG9uZyB1c2J0bWNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldHZhbCA9IC1FQkFEUlFDOworCisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwltdXRleF9sb2NrKCZkYXRhLT5pb19tdXRleCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVVNCVE1DX0lPQ1RMX0NMRUFSX09VVF9IQUxUOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfY2xlYXJfb3V0X2hhbHQoZGF0YSk7CisKKwljYXNlIFVTQlRNQ19JT0NUTF9DTEVBUl9JTl9IQUxUOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfY2xlYXJfaW5faGFsdChkYXRhKTsKKworCWNhc2UgVVNCVE1DX0lPQ1RMX0lORElDQVRPUl9QVUxTRToKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2luZGljYXRvcl9wdWxzZShkYXRhKTsKKworCWNhc2UgVVNCVE1DX0lPQ1RMX0NMRUFSOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfY2xlYXIoZGF0YSk7CisKKwljYXNlIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX09VVDoKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfb3V0KGRhdGEpOworCisJY2FzZSBVU0JUTUNfSU9DVExfQUJPUlRfQlVMS19JTjoKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfaW4oZGF0YSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5pb19tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gdXNidG1jX3JlYWQsCisJLndyaXRlCQk9IHVzYnRtY193cml0ZSwKKwkub3BlbgkJPSB1c2J0bWNfb3BlbiwKKwkucmVsZWFzZQk9IHVzYnRtY19yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bAk9IHVzYnRtY19pb2N0bCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2J0bWNfY2xhc3MgPSB7CisJLm5hbWUgPQkJInVzYnRtYyVkIiwKKwkuZm9wcyA9CQkmZm9wcywKKwkubWlub3JfYmFzZSA9CVVTQlRNQ19NSU5PUl9CQVNFLAorfTsKKworCitzdGF0aWMgaW50IHVzYnRtY19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlpbnQgbjsKKwlpbnQgcmV0Y29kZTsKKworCWRldl9kYmcoJmludGYtPmRldiwgIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIGtlcm5lbCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkYXRhLT5pbnRmID0gaW50ZjsKKwlkYXRhLT5pZCA9IGlkOworCWRhdGEtPnVzYl9kZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEpOworCWtyZWZfaW5pdCgmZGF0YS0+a3JlZik7CisJbXV0ZXhfaW5pdCgmZGF0YS0+aW9fbXV0ZXgpOworCisJLyogSW5pdGlhbGl6ZSBVU0JUTUMgYlRhZyBhbmQgb3RoZXIgZmllbGRzICovCisJZGF0YS0+YlRhZwk9IDE7CisJZGF0YS0+VGVybUNoYXJFbmFibGVkID0gMDsKKwlkYXRhLT5UZXJtQ2hhciA9ICdcbic7CisKKwkvKiBVU0JUTUMgZGV2aWNlcyBoYXZlIG9ubHkgb25lIHNldHRpbmcsIHNvIHVzZSB0aGF0ICovCisJaWZhY2VfZGVzYyA9IGRhdGEtPmludGYtPmN1cl9hbHRzZXR0aW5nOworCisJLyogRmluZCBidWxrIGluIGVuZHBvaW50ICovCisJZm9yIChuID0gMDsgbiA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgbisrKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W25dLmRlc2M7CisKKwkJaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkgeworCQkJZGF0YS0+YnVsa19pbiA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiRm91bmQgYnVsayBpbiBlbmRwb2ludCBhdCAldVxuIiwKKwkJCQlkYXRhLT5idWxrX2luKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRmluZCBidWxrIG91dCBlbmRwb2ludCAqLworCWZvciAobiA9IDA7IG4gPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtuXS5kZXNjOworCisJCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKSB7CisJCQlkYXRhLT5idWxrX291dCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiRm91bmQgQnVsayBvdXQgZW5kcG9pbnQgYXQgJXVcbiIsCisJCQkJZGF0YS0+YnVsa19vdXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXRjb2RlID0gZ2V0X2NhcGFiaWxpdGllcyhkYXRhKTsKKwlpZiAocmV0Y29kZSkKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiY2FuJ3QgcmVhZCBjYXBhYmlsaXRpZXNcbiIpOworCWVsc2UKKwkJcmV0Y29kZSA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosCisJCQkJCSAgICAgJmNhcGFiaWxpdHlfYXR0cl9ncnApOworCisJcmV0Y29kZSA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZkYXRhX2F0dHJfZ3JwKTsKKworCXJldGNvZGUgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2J0bWNfY2xhc3MpOworCWlmIChyZXRjb2RlKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIgorCQkJIiAoYmFzZSAldSwgc2xpY2UgZGVmYXVsdCk6ICVkXG4iLCBVU0JUTUNfTUlOT1JfQkFTRSwKKwkJCXJldGNvZGUpOworCQlnb3RvIGVycm9yX3JlZ2lzdGVyOworCX0KKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJVc2luZyBtaW5vciBudW1iZXIgJWRcbiIsIGludGYtPm1pbm9yKTsKKworCXJldHVybiAwOworCitlcnJvcl9yZWdpc3RlcjoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmY2FwYWJpbGl0eV9hdHRyX2dycCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmRhdGFfYXR0cl9ncnApOworCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCB1c2J0bWNfZGVsZXRlKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KKworc3RhdGljIHZvaWQgdXNidG1jX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKKworCWRldl9kYmcoJmludGYtPmRldiwgInVzYnRtY19kaXNjb25uZWN0IGNhbGxlZFxuIik7CisKKwlkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYnRtY19jbGFzcyk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmNhcGFiaWxpdHlfYXR0cl9ncnApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZkYXRhX2F0dHJfZ3JwKTsKKwlrcmVmX3B1dCgmZGF0YS0+a3JlZiwgdXNidG1jX2RlbGV0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0bWNfZHJpdmVyID0geworCS5uYW1lCQk9ICJ1c2J0bWMiLAorCS5pZF90YWJsZQk9IHVzYnRtY19kZXZpY2VzLAorCS5wcm9iZQkJPSB1c2J0bWNfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB1c2J0bWNfZGlzY29ubmVjdAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNidG1jX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0Y29kZTsKKworCXJldGNvZGUgPSB1c2JfcmVnaXN0ZXIoJnVzYnRtY19kcml2ZXIpOworCWlmIChyZXRjb2RlKQorCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUiOiBVbmFibGUgdG8gcmVnaXN0ZXIgZHJpdmVyXG4iKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK21vZHVsZV9pbml0KHVzYnRtY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHVzYnRtY19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYnRtY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodXNidG1jX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKaW5kZXggY2M5ZjM5Ny4uZTE3NTlkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwpAQCAtMTM0LDUgKzEzNCw1IEBACiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiBMaW51eCB3aWxsIHJlZnVzZSB0byBlbnVtZXJhdGUKIAkgIGV4dGVybmFsIGh1YnMuICBPVEcgaG9zdHMgYXJlIGFsbG93ZWQgdG8gcmVkdWNlIGhhcmR3YXJlCiAJICBhbmQgc29mdHdhcmUgY29zdHMgYnkgbm90IHN1cHBvcnRpbmcgZXh0ZXJuYWwgaHVicy4gIFNvCi0JICBhcmUgIkVtZWRkZWQgSG9zdHMiIHRoYXQgZG9uJ3Qgb2ZmZXIgT1RHIHN1cHBvcnQuCisJICBhcmUgIkVtYmVkZGVkIEhvc3RzIiB0aGF0IGRvbid0IG9mZmVyIE9URyBzdXBwb3J0LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggN2E0ZmE3OS4uMmJjY2VmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtNDEzLDcgKzQxMyw4IEBACiAJaWYgKGxpa2VseShpZm51bSA8IDgqc2l6ZW9mKHBzLT5pZmNsYWltZWQpKSkKIAkJY2xlYXJfYml0KGlmbnVtLCAmcHMtPmlmY2xhaW1lZCk7CiAJZWxzZQotCQl3YXJuKCJpbnRlcmZhY2UgbnVtYmVyICV1IG91dCBvZiByYW5nZSIsIGlmbnVtKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImludGVyZmFjZSBudW1iZXIgJXUgb3V0IG9mIHJhbmdlXG4iLAorCQkJIGlmbnVtKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKQEAgLTYyNCw2ICs2MjUsOCBAQAogCXNtcF93bWIoKTsKIAlsaXN0X2FkZF90YWlsKCZwcy0+bGlzdCwgJmRldi0+ZmlsZWxpc3QpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHBzOworCXNub29wKCZkZXYtPmRldiwgIm9wZW5lZCBieSBwcm9jZXNzICVkOiAlc1xuIiwgdGFza19waWRfbnIoY3VycmVudCksCisJCQljdXJyZW50LT5jb21tKTsKICBvdXQ6CiAJaWYgKHJldCkgewogCQlrZnJlZShwcyk7CkBAIC0xNzc0LDE5ICsxNzc3LDIwIEBACiAJcmV0dmFsID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihVU0JfREVWSUNFX0RFViwgVVNCX0RFVklDRV9NQVgsCiAJCQkJCSJ1c2JfZGV2aWNlIik7CiAJaWYgKHJldHZhbCkgewotCQllcnIoInVuYWJsZSB0byByZWdpc3RlciBtaW5vcnMgZm9yIHVzYl9kZXZpY2UiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgbWlub3JzIGZvciB1c2JfZGV2aWNlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCWNkZXZfaW5pdCgmdXNiX2RldmljZV9jZGV2LCAmdXNiZGV2X2ZpbGVfb3BlcmF0aW9ucyk7CiAJcmV0dmFsID0gY2Rldl9hZGQoJnVzYl9kZXZpY2VfY2RldiwgVVNCX0RFVklDRV9ERVYsIFVTQl9ERVZJQ0VfTUFYKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidW5hYmxlIHRvIGdldCB1c2JfZGV2aWNlIG1ham9yICVkIiwgVVNCX0RFVklDRV9NQUpPUik7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCB1c2JfZGV2aWNlIG1ham9yICVkXG4iLAorCQkgICAgICAgVVNCX0RFVklDRV9NQUpPUik7CiAJCWdvdG8gZXJyb3JfY2RldjsKIAl9CiAjaWZkZWYgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MKIAl1c2JfY2xhc3NkZXZfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ1c2JfZGV2aWNlIik7CiAJaWYgKElTX0VSUih1c2JfY2xhc3NkZXZfY2xhc3MpKSB7Ci0JCWVycigidW5hYmxlIHRvIHJlZ2lzdGVyIHVzYl9kZXZpY2UgY2xhc3MiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgdXNiX2RldmljZSBjbGFzc1xuIik7CiAJCXJldHZhbCA9IFBUUl9FUlIodXNiX2NsYXNzZGV2X2NsYXNzKTsKIAkJY2Rldl9kZWwoJnVzYl9kZXZpY2VfY2Rldik7CiAJCXVzYl9jbGFzc2Rldl9jbGFzcyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCA1YTdmYTZmLi4zZDc3OTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTEwNzAsNyArMTA3MCw4IEBACiAJCQkJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKIAogCQkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7Ci0JCQkJaWYgKCFkcml2ZXItPnJlc2V0X3Jlc3VtZSkKKwkJCQlpZiAoIWRyaXZlci0+cmVzZXRfcmVzdW1lIHx8CisJCQkJICAgIGludGYtPm5lZWRzX3JlbW90ZV93YWtldXApCiAJCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJCX0KIAkJfQpAQCAtMTYwOSw3ICsxNjEwLDggQEAKIAlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldik7CiAJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKIAl1c2JfcG1fdW5sb2NrKHVkZXYpOwotCWRvX3VuYmluZF9yZWJpbmQodWRldiwgRE9fUkVCSU5EKTsKKwlpZiAoc3RhdHVzID09IDApCisJCWRvX3VuYmluZF9yZWJpbmQodWRldiwgRE9fUkVCSU5EKTsKIAogCS8qIE5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgYXdha2UsIHdlIGNhbiBzdGFydCB0cnlpbmcgdG8gYXV0b3N1c3BlbmQKIAkgKiBpdCBhZ2Fpbi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCAyMjkxMjEzLi45NDZmYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC0xNjksNyArMTY5LDggQEAKIAllcnJvciA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgMCwgTUFYX0VORFBPSU5UX01JTk9SUywKIAkJCQkgICAgInVzYl9lbmRwb2ludCIpOwogCWlmIChlcnJvcikgewotCQllcnIoInVuYWJsZSB0byBnZXQgYSBkeW5hbWljIG1ham9yIGZvciB1c2IgZW5kcG9pbnRzIik7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCBhIGR5bmFtaWMgbWFqb3IgZm9yICIKKwkJICAgICAgICJ1c2IgZW5kcG9pbnRzLlxuIik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAJdXNiX2VuZHBvaW50X21ham9yID0gTUFKT1IoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKaW5kZXggNTVmN2YzMS4uOTk3ZTY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAl1c2JfY2xhc3MtPmNsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAidXNiIik7CiAJaWYgKElTX0VSUih1c2JfY2xhc3MtPmNsYXNzKSkgewogCQlyZXN1bHQgPSBJU19FUlIodXNiX2NsYXNzLT5jbGFzcyk7Ci0JCWVycigiY2xhc3NfY3JlYXRlIGZhaWxlZCBmb3IgdXNiIGRldmljZXMiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbGFzc19jcmVhdGUgZmFpbGVkIGZvciB1c2IgZGV2aWNlc1xuIik7CiAJCWtmcmVlKHVzYl9jbGFzcyk7CiAJCXVzYl9jbGFzcyA9IE5VTEw7CiAJfQpAQCAtMTE1LDcgKzExNSw4IEBACiAKIAllcnJvciA9IHJlZ2lzdGVyX2NocmRldihVU0JfTUFKT1IsICJ1c2IiLCAmdXNiX2ZvcHMpOwogCWlmIChlcnJvcikKLQkJZXJyKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciB1c2IgZGV2aWNlcyIsIFVTQl9NQUpPUik7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgdXNiIGRldmljZXNcbiIsCisJCSAgICAgICBVU0JfTUFKT1IpOwogCiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggYzgwMzVhOC4uZmM5MDE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC04MSw2ICs4MSwxMCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBLZWVwIHRyYWNrIG9mIHdoaWNoIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIGFyZSBsb2FkZWQgKi8KK3Vuc2lnbmVkIGxvbmcgdXNiX2hjZHNfbG9hZGVkOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZHNfbG9hZGVkKTsKKwogLyogaG9zdCBjb250cm9sbGVycyB3ZSBtYW5hZ2UgKi8KIExJU1RfSEVBRCAodXNiX2J1c19saXN0KTsKIEVYUE9SVF9TWU1CT0xfR1BMICh1c2JfYnVzX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggZTcxMGNlMC4uMmRjZGU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC00ODIsNCArNDgyLDEwIEBACiAgKi8KIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGVoY2lfY2ZfcG9ydF9yZXNldF9yd3NlbTsKIAorLyogS2VlcCB0cmFjayBvZiB3aGljaCBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgbG9hZGVkICovCisjZGVmaW5lIFVTQl9VSENJX0xPQURFRAkJMAorI2RlZmluZSBVU0JfT0hDSV9MT0FERUQJCTEKKyNkZWZpbmUgVVNCX0VIQ0lfTE9BREVECQkyCitleHRlcm4gdW5zaWduZWQgbG9uZyB1c2JfaGNkc19sb2FkZWQ7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBkOTk5NjM4Li45YjNmMTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTc3LDYgKzc3LDcgQEAKIAl1bnNpZ25lZAkJaGFzX2luZGljYXRvcnM6MTsKIAl1OAkJCWluZGljYXRvcltVU0JfTUFYQ0hJTERSRU5dOwogCXN0cnVjdCBkZWxheWVkX3dvcmsJbGVkczsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWluaXRfd29yazsKIH07CiAKIApAQCAtMTAwLDYgKzEwMSwxNSBAQAogTU9EVUxFX1BBUk1fREVTQyAoYmxpbmtlbmxpZ2h0cywgInRydWUgdG8gY3ljbGUgbGVkcyBvbiBodWJzIik7CiAKIC8qCisgKiBEZXZpY2UgU0FUQTgwMDAgRlcxLjAgZnJvbSBEQVRBU1QwUiBUZWNobm9sb2d5IENvcnAgcmVxdWlyZXMgYWJvdXQKKyAqIDEwIHNlY29uZHMgdG8gc2VuZCByZXBseSBmb3IgdGhlIGluaXRpYWwgNjQtYnl0ZSBkZXNjcmlwdG9yIHJlcXVlc3QuCisgKi8KKy8qIGRlZmluZSBpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCitzdGF0aWMgaW50IGluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0ID0gVVNCX0NUUkxfR0VUX1RJTUVPVVQ7Cittb2R1bGVfcGFyYW0oaW5pdGlhbF9kZXNjcmlwdG9yX3RpbWVvdXQsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdGlhbF9kZXNjcmlwdG9yX3RpbWVvdXQsICJpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0IDUwMDAgLSA1LjAgc2Vjb25kcykiKTsKKworLyoKICAqIEFzIG9mIDIuNi4xMCB3ZSBpbnRyb2R1Y2UgYSBuZXcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUgd2hpY2gKICAqIGNsb3NlbHkgcmVzZW1ibGVzIHRoZSB3YXkgV2luZG93cyB3b3Jrcy4gIEhvcGVmdWxseSBpdCB3aWxsIGJlIGNvbXBhdGlibGUKICAqIHdpdGggYSB3aWRlciByYW5nZSBvZiBkZXZpY2VzIHRoYW4gdGhlIG9sZCBzY2hlbWUuICBIb3dldmVyIHNvbWUgcHJldmlvdXNseQpAQCAtNTE1LDEwICs1MjUsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9odWJfdHRfY2xlYXJfYnVmZmVyKTsKIAotc3RhdGljIHZvaWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIpCisvKiBJZiBkb19kZWxheSBpcyBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoZSBjYWxsZXIKKyAqIG5lZWRzIHRvIGRlbGF5LgorICovCitzdGF0aWMgdW5zaWduZWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIsIGJvb2wgZG9fZGVsYXkpCiB7CiAJaW50IHBvcnQxOwogCXVuc2lnbmVkIHBnb29kX2RlbGF5ID0gaHViLT5kZXNjcmlwdG9yLT5iUHdyT24yUHdyR29vZCAqIDI7CisJdW5zaWduZWQgZGVsYXk7CiAJdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3MgPQogCQkJbGUxNl90b19jcHUoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKIApAQCAtNTM3LDcgKzU1MSwxMCBAQAogCQlzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogCiAJLyogV2FpdCBhdCBsZWFzdCAxMDAgbXNlYyBmb3IgcG93ZXIgdG8gYmVjb21lIHN0YWJsZSAqLwotCW1zbGVlcChtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKSk7CisJZGVsYXkgPSBtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKTsKKwlpZiAoZG9fZGVsYXkpCisJCW1zbGVlcChkZWxheSk7CisJcmV0dXJuIGRlbGF5OwogfQogCiBzdGF0aWMgaW50IGh1Yl9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaHViICpodWIsCkBAIC01OTksMjEgKzYxNiw1NSBAQAogfQogCiBlbnVtIGh1Yl9hY3RpdmF0aW9uX3R5cGUgewotCUhVQl9JTklULCBIVUJfUE9TVF9SRVNFVCwgSFVCX1JFU1VNRSwgSFVCX1JFU0VUX1JFU1VNRQorCUhVQl9JTklULCBIVUJfSU5JVDIsIEhVQl9JTklUMywKKwlIVUJfUE9TVF9SRVNFVCwgSFVCX1JFU1VNRSwgSFVCX1JFU0VUX1JFU1VNRSwKIH07CiAKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpOworc3RhdGljIHZvaWQgaHViX2luaXRfZnVuYzMoc3RydWN0IHdvcmtfc3RydWN0ICp3cyk7CisKIHN0YXRpYyB2b2lkIGh1Yl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBlbnVtIGh1Yl9hY3RpdmF0aW9uX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlpbnQgcG9ydDE7CiAJaW50IHN0YXR1czsKIAlib29sIG5lZWRfZGVib3VuY2VfZGVsYXkgPSBmYWxzZTsKKwl1bnNpZ25lZCBkZWxheTsKKworCS8qIENvbnRpbnVlIGEgcGFydGlhbCBpbml0aWFsaXphdGlvbiAqLworCWlmICh0eXBlID09IEhVQl9JTklUMikKKwkJZ290byBpbml0MjsKKwlpZiAodHlwZSA9PSBIVUJfSU5JVDMpCisJCWdvdG8gaW5pdDM7CiAKIAkvKiBBZnRlciBhIHJlc3VtZSwgcG9ydCBwb3dlciBzaG91bGQgc3RpbGwgYmUgb24uCiAJICogRm9yIGFueSBvdGhlciB0eXBlIG9mIGFjdGl2YXRpb24sIHR1cm4gaXQgb24uCiAJICovCi0JaWYgKHR5cGUgIT0gSFVCX1JFU1VNRSkKLQkJaHViX3Bvd2VyX29uKGh1Yik7CisJaWYgKHR5cGUgIT0gSFVCX1JFU1VNRSkgeworCisJCS8qIFNwZWVkIHVwIHN5c3RlbSBib290IGJ5IHVzaW5nIGEgZGVsYXllZF93b3JrIGZvciB0aGUKKwkJICogaHViJ3MgaW5pdGlhbCBwb3dlci11cCBkZWxheXMuICBUaGlzIGlzIHByZXR0eSBhd2t3YXJkCisJCSAqIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZSBhIGhvbWUtYnJld2VkIHNvcnQgb2YKKwkJICogc2V0am1wL2xvbmdqbXAsIGJ1dCBpdCBzYXZlcyBhdCBsZWFzdCAxMDAgbXMgZm9yIGVhY2gKKwkJICogcm9vdCBodWIgKGFzc3VtaW5nIHVzYmNvcmUgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsCisJCSAqIHJhdGhlciB0aGFuIGFzIGEgbW9kdWxlKS4gIEl0IGFkZHMgdXAuCisJCSAqCisJCSAqIFRoaXMgY2FuJ3QgYmUgZG9uZSBmb3IgSFVCX1JFU1VNRSBvciBIVUJfUkVTRVRfUkVTVU1FCisJCSAqIGJlY2F1c2UgZm9yIHRob3NlIGFjdGl2YXRpb24gdHlwZXMgdGhlIHBvcnRzIGhhdmUgdG8gYmUKKwkJICogb3BlcmF0aW9uYWwgd2hlbiB3ZSByZXR1cm4uICBJbiB0aGVvcnkgdGhpcyBjb3VsZCBiZSBkb25lCisJCSAqIGZvciBIVUJfUE9TVF9SRVNFVCwgYnV0IGl0J3MgZWFzaWVyIG5vdCB0by4KKwkJICovCisJCWlmICh0eXBlID09IEhVQl9JTklUKSB7CisJCQlkZWxheSA9IGh1Yl9wb3dlcl9vbihodWIsIGZhbHNlKTsKKwkJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgaHViX2luaXRfZnVuYzIpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZodWItPmluaXRfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCQkJcmV0dXJuOwkJLyogQ29udGludWVzIGF0IGluaXQyOiBiZWxvdyAqLworCQl9IGVsc2UgeworCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CisJCX0KKwl9CisgaW5pdDI6CiAKIAkvKiBDaGVjayBlYWNoIHBvcnQgYW5kIHNldCBodWItPmNoYW5nZV9iaXRzIHRvIGxldCBraHViZCBrbm93CiAJICogd2hpY2ggcG9ydHMgbmVlZCBhdHRlbnRpb24uCkBAIC02OTIsOSArNzQzLDIwIEBACiAJICogSWYgYW55IHBvcnQtc3RhdHVzIGNoYW5nZXMgZG8gb2NjdXIgZHVyaW5nIHRoaXMgZGVsYXksIGtodWJkCiAJICogd2lsbCBzZWUgdGhlbSBsYXRlciBhbmQgaGFuZGxlIHRoZW0gbm9ybWFsbHkuCiAJICovCi0JaWYgKG5lZWRfZGVib3VuY2VfZGVsYXkpCi0JCW1zbGVlcChIVUJfREVCT1VOQ0VfU1RBQkxFKTsKKwlpZiAobmVlZF9kZWJvdW5jZV9kZWxheSkgeworCQlkZWxheSA9IEhVQl9ERUJPVU5DRV9TVEFCTEU7CiAKKwkJLyogRG9uJ3QgZG8gYSBsb25nIHNsZWVwIGluc2lkZSBhIHdvcmtxdWV1ZSByb3V0aW5lICovCisJCWlmICh0eXBlID09IEhVQl9JTklUMikgeworCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmh1Yi0+aW5pdF93b3JrLCBodWJfaW5pdF9mdW5jMyk7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmh1Yi0+aW5pdF93b3JrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CisJCQlyZXR1cm47CQkvKiBDb250aW51ZXMgYXQgaW5pdDM6IGJlbG93ICovCisJCX0gZWxzZSB7CisJCQltc2xlZXAoZGVsYXkpOworCQl9CisJfQorIGluaXQzOgogCWh1Yi0+cXVpZXNjaW5nID0gMDsKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGh1Yi0+dXJiLCBHRlBfTk9JTyk7CkBAIC03MDcsNiArNzY5LDIxIEBACiAJa2lja19raHViZChodWIpOwogfQogCisvKiBJbXBsZW1lbnQgdGhlIGNvbnRpbnVhdGlvbnMgZm9yIHRoZSBkZWxheXMgYWJvdmUgKi8KK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IHVzYl9odWIsIGluaXRfd29yay53b3JrKTsKKworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9JTklUMik7Cit9CisKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IHVzYl9odWIsIGluaXRfd29yay53b3JrKTsKKworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9JTklUMyk7Cit9CisKIGVudW0gaHViX3F1aWVzY2luZ190eXBlIHsKIAlIVUJfRElTQ09OTkVDVCwgSFVCX1BSRV9SRVNFVCwgSFVCX1NVU1BFTkQKIH07CkBAIC03MTYsNiArNzkzLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlpbnQgaTsKIAorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaHViLT5pbml0X3dvcmspOworCiAJLyoga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgd29uJ3QgcmUtdHJpZ2dlciAqLwogCWh1Yi0+cXVpZXNjaW5nID0gMTsKIApAQCAtMTA5OSw2ICsxMTc4LDcgQEAKIAlodWItPmludGZkZXYgPSAmaW50Zi0+ZGV2OwogCWh1Yi0+aGRldiA9IGhkZXY7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmh1Yi0+bGVkcywgbGVkX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgTlVMTCk7CiAJdXNiX2dldF9pbnRmKGludGYpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgaHViKTsKQEAgLTI0NjcsNyArMjU0Nyw3IEBACiAJCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCiAJCQkJCVVTQl9EVF9ERVZJQ0UgPDwgOCwgMCwKIAkJCQkJYnVmLCBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFLAotCQkJCQlVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCQkJCWluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0KTsKIAkJCQlzd2l0Y2ggKGJ1Zi0+Yk1heFBhY2tldFNpemUwKSB7CiAJCQkJY2FzZSA4OiBjYXNlIDE2OiBjYXNlIDMyOiBjYXNlIDY0OiBjYXNlIDI1NToKIAkJCQkJaWYgKGJ1Zi0+YkRlc2NyaXB0b3JUeXBlID09CkBAIC0zMDM1LDcgKzMxMTUsNyBAQAogCQkJCQlpKTsKIAkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKIAkJCQkJVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVCk7Ci0JCQkJaHViX3Bvd2VyX29uKGh1Yik7CisJCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCQl9CiAKIAkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX1JFU0VUKSB7CkBAIC0zMDcwLDcgKzMxNTAsNyBAQAogCQkJCWRldl9kYmcgKGh1Yl9kZXYsICJvdmVyY3VycmVudCBjaGFuZ2VcbiIpOwogCQkJCW1zbGVlcCg1MDApOwkvKiBDb29sIGRvd24gKi8KIAkJCQljbGVhcl9odWJfZmVhdHVyZShoZGV2LCBDX0hVQl9PVkVSX0NVUlJFTlQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIpOworICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQkJfQogCQl9CiAKQEAgLTM0MjQsNyArMzUwNCw3IEBACiAJCQkJCQlVU0JfSU5URVJGQUNFX0JPVU5EKQogCQkJCQlyZWJpbmQgPSAxOwogCQkJfQotCQkJaWYgKHJlYmluZCkKKwkJCWlmIChyZXQgPT0gMCAmJiByZWJpbmQpCiAJCQkJdXNiX3JlYmluZF9pbnRmKGNpbnRmKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwppbmRleCA3N2ZhN2EwLi45NDYzMjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC0xODAsOCArMTgwLDggQEAKIAkJCWxpc3Rtb2RlID0gb3B0aW9uICYgU19JUldYVUdPOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoInVzYmZzOiB1bnJlY29nbmlzZWQgbW91bnQgb3B0aW9uIFwiJXNcIiAiCi0JCQkgICAgIm9yIG1pc3NpbmcgdmFsdWVcbiIsIHApOworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JmczogdW5yZWNvZ25pc2VkIG1vdW50IG9wdGlvbiAiCisJCQkgICAgICAgIlwiJXNcIiBvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMjQwLDcgKzI0MCw5IEBACiAJCQkJdXBkYXRlX3NwZWNpYWwoYnVzKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJd2FybigiVW5rbm93biBub2RlICVzIG1vZGUgJXggZm91bmQgb24gcmVtb3VudCFcbiIsYnVzLT5kX25hbWUubmFtZSxidXMtPmRfaW5vZGUtPmlfbW9kZSk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiZnM6IFVua25vd24gbm9kZSAlcyAiCisJCQkJICAgICAgICJtb2RlICV4IGZvdW5kIG9uIHJlbW91bnQhXG4iLAorCQkJCSAgICAgICBidXMtPmRfbmFtZS5uYW1lLCBidXMtPmRfaW5vZGUtPmlfbW9kZSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTI1OSw3ICsyNjEsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChwYXJzZV9vcHRpb25zKHNiLCBkYXRhKSkgewotCQl3YXJuKCJ1c2JmczogbW91bnQgcGFyYW1ldGVyIGVycm9yOiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JmczogbW91bnQgcGFyYW1ldGVyIGVycm9yLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTk5LDcgKzYwMSw3IEBACiAJLyogY3JlYXRlIHRoZSBkZXZpY2VzIHNwZWNpYWwgZmlsZSAqLwogCXJldHZhbCA9IHNpbXBsZV9waW5fZnMoJnVzYl9mc190eXBlLCAmdXNiZnNfbW91bnQsICZ1c2Jmc19tb3VudF9jb3VudCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIgKCJVbmFibGUgdG8gZ2V0IHVzYmZzIG1vdW50Iik7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCB1c2JmcyBtb3VudFxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTYxMSw3ICs2MTMsNyBAQAogCQkJCQkgICAgICAgTlVMTCwgJnVzYmZzX2RldmljZXNfZm9wcywKIAkJCQkJICAgICAgIGxpc3R1aWQsIGxpc3RnaWQpOwogCWlmIChkZXZpY2VzX3VzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoIlVuYWJsZSB0byBjcmVhdGUgZGV2aWNlcyB1c2JmcyBmaWxlIik7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSBkZXZpY2VzIHVzYmZzIGZpbGVcbiIpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycm9yX2NsZWFuX21vdW50czsKIAl9CkBAIC02NjMsNyArNjY1LDcgQEAKIAlidXMtPnVzYmZzX2RlbnRyeSA9IGZzX2NyZWF0ZV9maWxlIChuYW1lLCBidXNtb2RlIHwgU19JRkRJUiwgcGFyZW50LAogCQkJCQkgICAgYnVzLCBOVUxMLCBidXN1aWQsIGJ1c2dpZCk7CiAJaWYgKGJ1cy0+dXNiZnNfZGVudHJ5ID09IE5VTEwpIHsKLQkJZXJyICgiZXJyb3IgY3JlYXRpbmcgdXNiZnMgYnVzIGVudHJ5Iik7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgY3JlYXRpbmcgdXNiZnMgYnVzIGVudHJ5XG4iKTsKIAkJcmV0dXJuOwogCX0KIH0KQEAgLTY5NCw3ICs2OTYsNyBAQAogCQkJCQkgICAgJnVzYmRldl9maWxlX29wZXJhdGlvbnMsCiAJCQkJCSAgICBkZXZ1aWQsIGRldmdpZCk7CiAJaWYgKGRldi0+dXNiZnNfZGVudHJ5ID09IE5VTEwpIHsKLQkJZXJyICgiZXJyb3IgY3JlYXRpbmcgdXNiZnMgZGV2aWNlIGVudHJ5Iik7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgY3JlYXRpbmcgdXNiZnMgZGV2aWNlIGVudHJ5XG4iKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCAyODZiNDQzLi44ODc3Mzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtMTIwNCw3ICsxMjA0LDggQEAKIAogCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgYWx0ZXJuYXRlKTsKIAlpZiAoIWFsdCkgewotCQl3YXJuKCJzZWxlY3RpbmcgaW52YWxpZCBhbHRzZXR0aW5nICVkIiwgYWx0ZXJuYXRlKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAic2VsZWN0aW5nIGludmFsaWQgYWx0c2V0dGluZyAlZCIsCisJCQkgYWx0ZXJuYXRlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKaW5kZXggNWUxZjVkNS4uZjY2ZmJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtNzQzLDYgKzc0MywyOSBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKG1vZGFsaWFzLCBTX0lSVUdPLCBzaG93X21vZGFsaWFzLCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3Qgc2hvd19zdXBwb3J0c19hdXRvc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJaW50IHJldDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwl1c2JfbG9ja19kZXZpY2UodWRldik7CisJLyogRGV2aWNlcyB3aWxsIGJlIGF1dG9zdXNwZW5kZWQgZXZlbiB3aGVuIGFuIGludGVyZmFjZSBpc24ndCBjbGFpbWVkICovCisJaWYgKCFpbnRmLT5kZXYuZHJpdmVyIHx8CisJCQl0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpLT5zdXBwb3J0c19hdXRvc3VzcGVuZCkKKwkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgMSk7CisJZWxzZQorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAwKTsKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc3VwcG9ydHNfYXV0b3N1c3BlbmQsIFNfSVJVR08sIHNob3dfc3VwcG9ydHNfYXV0b3N1c3BlbmQsIE5VTEwpOworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaW50Zl9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9iSW50ZXJmYWNlTnVtYmVyLmF0dHIsCiAJJmRldl9hdHRyX2JBbHRlcm5hdGVTZXR0aW5nLmF0dHIsCkBAIC03NTEsNiArNzc0LDcgQEAKIAkmZGV2X2F0dHJfYkludGVyZmFjZVN1YkNsYXNzLmF0dHIsCiAJJmRldl9hdHRyX2JJbnRlcmZhY2VQcm90b2NvbC5hdHRyLAogCSZkZXZfYXR0cl9tb2RhbGlhcy5hdHRyLAorCSZkZXZfYXR0cl9zdXBwb3J0c19hdXRvc3VzcGVuZC5hdHRyLAogCU5VTEwsCiB9Owogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaW50Zl9hdHRyX2dycCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCmluZGV4IDQ3MTExZTguLmYyNjM4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtMTAsNiArMTAsOCBAQAogCiAjZGVmaW5lIHRvX3VyYihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVyYiwga3JlZikKIAorc3RhdGljIERFRklORV9TUElOTE9DSyh1c2JfcmVqZWN0X2xvY2spOworCiBzdGF0aWMgdm9pZCB1cmJfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgdXJiICp1cmIgPSB0b191cmIoa3JlZik7CkBAIC02OCw3ICs3MCw3IEBACiAJCWlzb19wYWNrZXRzICogc2l6ZW9mKHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yKSwKIAkJbWVtX2ZsYWdzKTsKIAlpZiAoIXVyYikgewotCQllcnIoImFsbG9jX3VyYjoga21hbGxvYyBmYWlsZWQiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY191cmI6IGttYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXVzYl9pbml0X3VyYih1cmIpOwpAQCAtMTI3LDYgKzEyOSwxMyBAQAogCXVzYl9nZXRfdXJiKHVyYik7CiAJbGlzdF9hZGRfdGFpbCgmdXJiLT5hbmNob3JfbGlzdCwgJmFuY2hvci0+dXJiX2xpc3QpOwogCXVyYi0+YW5jaG9yID0gYW5jaG9yOworCisJaWYgKHVubGlrZWx5KGFuY2hvci0+cG9pc29uZWQpKSB7CisJCXNwaW5fbG9jaygmdXNiX3JlamVjdF9sb2NrKTsKKwkJdXJiLT5yZWplY3QrKzsKKwkJc3Bpbl91bmxvY2soJnVzYl9yZWplY3RfbG9jayk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYW5jaG9yX3VyYik7CkBAIC0zOTgsNyArNDA3LDcgQEAKIAogCS8qIGZhaWwgaWYgc3VibWl0dGVyIGdhdmUgYm9ndXMgZmxhZ3MgKi8KIAlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAhPSBvcmlnX2ZsYWdzKSB7Ci0JCWVycigiQk9HVVMgdXJiIGZsYWdzLCAleCAtLT4gJXgiLAorCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJPR1VTIHVyYiBmbGFncywgJXggLS0+ICV4XG4iLAogCQkJb3JpZ19mbGFncywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU0NCwyNSArNTUzLDcwIEBACiAgKi8KIHZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdGF0aWMgREVGSU5FX01VVEVYKHJlamVjdF9tdXRleCk7Ci0KIAltaWdodF9zbGVlcCgpOwogCWlmICghKHVyYiAmJiB1cmItPmRldiAmJiB1cmItPmVwKSkKIAkJcmV0dXJuOwotCW11dGV4X2xvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKIAkrK3VyYi0+cmVqZWN0OwotCW11dGV4X3VubG9jaygmcmVqZWN0X211dGV4KTsKKwlzcGluX3VubG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAKIAl1c2JfaGNkX3VubGlua191cmIodXJiLCAtRU5PRU5UKTsKIAl3YWl0X2V2ZW50KHVzYl9raWxsX3VyYl9xdWV1ZSwgYXRvbWljX3JlYWQoJnVyYi0+dXNlX2NvdW50KSA9PSAwKTsKIAotCW11dGV4X2xvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKIAktLXVyYi0+cmVqZWN0OwotCW11dGV4X3VubG9jaygmcmVqZWN0X211dGV4KTsKKwlzcGluX3VubG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfa2lsbF91cmIpOwogCiAvKioKKyAqIHVzYl9wb2lzb25fdXJiIC0gcmVsaWFibHkga2lsbCBhIHRyYW5zZmVyIGFuZCBwcmV2ZW50IGZ1cnRoZXIgdXNlIG9mIGFuIFVSQgorICogQHVyYjogcG9pbnRlciB0byBVUkIgZGVzY3JpYmluZyBhIHByZXZpb3VzbHkgc3VibWl0dGVkIHJlcXVlc3QsCisgKgltYXkgYmUgTlVMTAorICoKKyAqIFRoaXMgcm91dGluZSBjYW5jZWxzIGFuIGluLXByb2dyZXNzIHJlcXVlc3QuICBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKyAqIHVwb24gcmV0dXJuIGFsbCBjb21wbGV0aW9uIGhhbmRsZXJzIHdpbGwgaGF2ZSBmaW5pc2hlZCBhbmQgdGhlIFVSQgorICogd2lsbCBiZSB0b3RhbGx5IGlkbGUgYW5kIGNhbm5vdCBiZSByZXVzZWQuICBUaGVzZSBmZWF0dXJlcyBtYWtlCisgKiB0aGlzIGFuIGlkZWFsIHdheSB0byBzdG9wIEkvTyBpbiBhIGRpc2Nvbm5lY3QoKSBjYWxsYmFjay4KKyAqIElmIHRoZSByZXF1ZXN0IGhhcyBub3QgYWxyZWFkeSBmaW5pc2hlZCBvciBiZWVuIHVubGlua2VkCisgKiB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwgc2VlIHVyYi0+c3RhdHVzID09IC1FTk9FTlQuCisgKgorICogQWZ0ZXIgYW5kIHdoaWxlIHRoZSByb3V0aW5lIHJ1bnMsIGF0dGVtcHRzIHRvIHJlc3VibWl0IHRoZSBVUkIgd2lsbCBmYWlsCisgKiB3aXRoIGVycm9yIC1FUEVSTS4gIFRodXMgZXZlbiBpZiB0aGUgVVJCJ3MgY29tcGxldGlvbiBoYW5kbGVyIGFsd2F5cworICogdHJpZXMgdG8gcmVzdWJtaXQsIGl0IHdpbGwgbm90IHN1Y2NlZWQgYW5kIHRoZSBVUkIgd2lsbCBiZWNvbWUgaWRsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0IChzdWNoIGFzIGEgYm90dG9tCisgKiBoYWxmIG9yIGEgY29tcGxldGlvbiBoYW5kbGVyKSwgb3Igd2hlbiBob2xkaW5nIGEgc3BpbmxvY2ssIG9yIGluIG90aGVyCisgKiBzaXR1YXRpb25zIHdoZXJlIHRoZSBjYWxsZXIgY2FuJ3Qgc2NoZWR1bGUoKS4KKyAqLwordm9pZCB1c2JfcG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAoISh1cmIgJiYgdXJiLT5kZXYgJiYgdXJiLT5lcCkpCisJCXJldHVybjsKKwlzcGluX2xvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOworCSsrdXJiLT5yZWplY3Q7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOworCisJdXNiX2hjZF91bmxpbmtfdXJiKHVyYiwgLUVOT0VOVCk7CisJd2FpdF9ldmVudCh1c2Jfa2lsbF91cmJfcXVldWUsIGF0b21pY19yZWFkKCZ1cmItPnVzZV9jb3VudCkgPT0gMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcG9pc29uX3VyYik7CisKK3ZvaWQgdXNiX3VucG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiX3JlamVjdF9sb2NrLCBmbGFncyk7CisJLS11cmItPnJlamVjdDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JfcmVqZWN0X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl91bnBvaXNvbl91cmIpOworCisvKioKICAqIHVzYl9raWxsX2FuY2hvcmVkX3VyYnMgLSBjYW5jZWwgdHJhbnNmZXIgcmVxdWVzdHMgZW4gbWFzc2UKICAqIEBhbmNob3I6IGFuY2hvciB0aGUgcmVxdWVzdHMgYXJlIGJvdW5kIHRvCiAgKgpAQCAtNTg5LDYgKzY0MywzNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2tpbGxfYW5jaG9yZWRfdXJicyk7CiAKKworLyoqCisgKiB1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMgLSBjZWFzZSBhbGwgdHJhZmZpYyBmcm9tIGFuIGFuY2hvcgorICogQGFuY2hvcjogYW5jaG9yIHRoZSByZXF1ZXN0cyBhcmUgYm91bmQgdG8KKyAqCisgKiB0aGlzIGFsbG93cyBhbGwgb3V0c3RhbmRpbmcgVVJCcyB0byBiZSBwb2lzb25lZCBzdGFydGluZworICogZnJvbSB0aGUgYmFjayBvZiB0aGUgcXVldWUuIE5ld2x5IGFkZGVkIFVSQnMgd2lsbCBhbHNvIGJlCisgKiBwb2lzb25lZAorICovCit2b2lkIHVzYl9wb2lzb25fYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKQoreworCXN0cnVjdCB1cmIgKnZpY3RpbTsKKworCXNwaW5fbG9ja19pcnEoJmFuY2hvci0+bG9jayk7CisJYW5jaG9yLT5wb2lzb25lZCA9IDE7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkgeworCQl2aWN0aW0gPSBsaXN0X2VudHJ5KGFuY2hvci0+dXJiX2xpc3QucHJldiwgc3RydWN0IHVyYiwKKwkJCQkgICAgYW5jaG9yX2xpc3QpOworCQkvKiB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGUgVVJCIGlzbid0IGZyZWVkIGJlZm9yZSB3ZSBraWxsIGl0Ki8KKwkJdXNiX2dldF91cmIodmljdGltKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZhbmNob3ItPmxvY2spOworCQkvKiB0aGlzIHdpbGwgdW5hbmNob3IgdGhlIFVSQiAqLworCQl1c2JfcG9pc29uX3VyYih2aWN0aW0pOworCQl1c2JfcHV0X3VyYih2aWN0aW0pOworCQlzcGluX2xvY2tfaXJxKCZhbmNob3ItPmxvY2spOworCX0KKwlzcGluX3VubG9ja19pcnEoJmFuY2hvci0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMpOwogLyoqCiAgKiB1c2JfdW5saW5rX2FuY2hvcmVkX3VyYnMgLSBhc3luY2hyb25vdXNseSBjYW5jZWwgdHJhbnNmZXIgcmVxdWVzdHMgZW4gbWFzc2UKICAqIEBhbmNob3I6IGFuY2hvciB0aGUgcmVxdWVzdHMgYXJlIGJvdW5kIHRvCkBAIC02MzMsMyArNzE2LDczIEBACiAJCQkJICBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KTsKKworLyoqCisgKiB1c2JfZ2V0X2Zyb21fYW5jaG9yIC0gZ2V0IGFuIGFuY2hvcidzIG9sZGVzdCB1cmIKKyAqIEBhbmNob3I6IHRoZSBhbmNob3Igd2hvc2UgdXJiIHlvdSB3YW50CisgKgorICogdGhpcyB3aWxsIHRha2UgdGhlIG9sZGVzdCB1cmIgZnJvbSBhbiBhbmNob3IsCisgKiB1bmFuY2hvciBhbmQgcmV0dXJuIGl0CisgKi8KK3N0cnVjdCB1cmIgKnVzYl9nZXRfZnJvbV9hbmNob3Ioc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpKSB7CisJCXZpY3RpbSA9IGxpc3RfZW50cnkoYW5jaG9yLT51cmJfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiLAorCQkJCSAgICBhbmNob3JfbGlzdCk7CisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQl1c2JfdW5hbmNob3JfdXJiKHZpY3RpbSk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJCXZpY3RpbSA9IE5VTEw7CisJfQorCisJcmV0dXJuIHZpY3RpbTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2dldF9mcm9tX2FuY2hvcik7CisKKy8qKgorICogdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicyAtIHVuYW5jaG9yIGFsbCBhbiBhbmNob3IncyB1cmJzCisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHdob3NlIHVyYnMgeW91IHdhbnQgdG8gdW5hbmNob3IKKyAqCisgKiB1c2UgdGhpcyB0byBnZXQgcmlkIG9mIGFsbCBhbiBhbmNob3IncyB1cmJzCisgKi8KK3ZvaWQgdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKQoreworCXN0cnVjdCB1cmIgKnZpY3RpbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmYW5jaG9yLT51cmJfbGlzdCkpIHsKKwkJdmljdGltID0gbGlzdF9lbnRyeShhbmNob3ItPnVyYl9saXN0LnByZXYsIHN0cnVjdCB1cmIsCisJCQkJICAgIGFuY2hvcl9saXN0KTsKKwkJdXNiX2dldF91cmIodmljdGltKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJCS8qIHRoaXMgbWF5IGZyZWUgdGhlIFVSQiAqLworCQl1c2JfdW5hbmNob3JfdXJiKHZpY3RpbSk7CisJCXVzYl9wdXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMpOworCisvKioKKyAqIHVzYl9hbmNob3JfZW1wdHkgLSBpcyBhbiBhbmNob3IgZW1wdHkKKyAqIEBhbmNob3I6IHRoZSBhbmNob3IgeW91IHdhbnQgdG8gcXVlcnkKKyAqCisgKiByZXR1cm5zIDEgaWYgdGhlIGFuY2hvciBoYXMgbm8gdXJicyBhc3NvY2lhdGVkIHdpdGggaXQKKyAqLworaW50IHVzYl9hbmNob3JfZW1wdHkoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmYW5jaG9yLT51cmJfbGlzdCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9hbmNob3JfZW1wdHkpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IGFjYzk1YjIuLmRkNGNkNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC00NSw3ICs0NSw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHCiAJYm9vbGVhbiAiRGVidWdnaW5nIG1lc3NhZ2VzIChERVZFTE9QTUVOVCkiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUICYmIERFQlVHX0tFUk5FTAorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJaGVscAogCSAgIE1hbnkgY29udHJvbGxlciBhbmQgZ2FkZ2V0IGRyaXZlcnMgd2lsbCBwcmludCBzb21lIGRlYnVnZ2luZwogCSAgIG1lc3NhZ2VzIGlmIHlvdSB1c2UgdGhpcyBvcHRpb24gdG8gYXNrIGZvciB0aG9zZSBtZXNzYWdlcy4KQEAgLTU5LDcgKzU5LDcgQEAKIAogY29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVMKIAlib29sZWFuICJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgKERFVkVMT1BNRU5UKSIKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVQgJiYgUFJPQ19GUworCWRlcGVuZHMgb24gUFJPQ19GUwogCWhlbHAKIAkgICBTb21lIG9mIHRoZSBkcml2ZXJzIGluIHRoZSAiZ2FkZ2V0IiBmcmFtZXdvcmsgY2FuIGV4cG9zZQogCSAgIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBmaWxlcyBzdWNoIGFzIC9wcm9jL2RyaXZlci91ZGMKQEAgLTcwLDcgKzcwLDcgQEAKIAogY29uZmlnIFVTQl9HQURHRVRfREVCVUdfRlMKIAlib29sZWFuICJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgaW4gZGVidWdmcyAoREVWRUxPUE1FTlQpIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVCAmJiBERUJVR19GUworCWRlcGVuZHMgb24gREVCVUdfRlMKIAloZWxwCiAJICAgU29tZSBvZiB0aGUgZHJpdmVycyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGNhbiBleHBvc2UKIAkgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZmlsZXMgdW5kZXIgL3N5cy9rZXJuZWwvZGVidWcvLgpAQCAtNzksMTIgKzc5LDM2IEBACiAJICAgRW5hYmxlIHRoZXNlIGZpbGVzIGJ5IGNob29zaW5nICJZIiBoZXJlLiAgSWYgaW4gZG91YnQsIG9yCiAJICAgdG8gY29uc2VydmUga2VybmVsIG1lbW9yeSwgc2F5ICJOIi4KIAorY29uZmlnIFVTQl9HQURHRVRfVkJVU19EUkFXCisJaW50ICJNYXhpbXVtIFZCVVMgUG93ZXIgdXNhZ2UgKDItNTAwIG1BKSIKKwlyYW5nZSAyIDUwMAorCWRlZmF1bHQgMgorCWhlbHAKKwkgICBTb21lIGRldmljZXMgbmVlZCB0byBkcmF3IHBvd2VyIGZyb20gVVNCIHdoZW4gdGhleSBhcmUKKwkgICBjb25maWd1cmVkLCBwZXJoYXBzIHRvIG9wZXJhdGUgY2lyY3VpdHJ5IG9yIHRvIHJlY2hhcmdlCisJICAgYmF0dGVyaWVzLiAgVGhpcyBpcyBpbiBhZGRpdGlvbiB0byBhbnkgbG9jYWwgcG93ZXIgc3VwcGx5LAorCSAgIHN1Y2ggYXMgYW4gQUMgYWRhcHRlciBvciBiYXR0ZXJpZXMuCisKKwkgICBFbnRlciB0aGUgbWF4aW11bSBwb3dlciB5b3VyIGRldmljZSBkcmF3cyB0aHJvdWdoIFVTQiwgaW4KKwkgICBtaWxsaUFtcGVyZXMuICBUaGUgcGVybWl0dGVkIHJhbmdlIG9mIHZhbHVlcyBpcyAyIC0gNTAwIG1BOworCSAgIDAgbUEgd291bGQgYmUgbGVnYWwsIGJ1dCBjYW4gbWFrZSBzb21lIGhvc3RzIG1pc2JlaGF2ZS4KKworCSAgIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGV4Y2VwdCBmb3Igc3lzdGVtLXNwZWNpZmljIGdhZGdldAorCSAgIGRyaXZlcnMgdGhhdCBoYXZlIG1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24uCisKIGNvbmZpZwlVU0JfR0FER0VUX1NFTEVDVEVECiAJYm9vbGVhbgogCiAjCiAjIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIgU3VwcG9ydAogIworIyBUaGUgb3JkZXIgaGVyZSBpcyBhbHBoYWJldGljYWwsIGV4Y2VwdCB0aGF0IGludGVncmF0ZWQgY29udHJvbGxlcnMgZ28KKyMgYmVmb3JlIGRpc2NyZXRlIG9uZXMgc28gdGhleSB3aWxsIGJlIHRoZSBpbml0aWFsL2RlZmF1bHQgdmFsdWU6CisjICAgLSBpbnRlZ3JhdGVkL1NPQyBjb250cm9sbGVycyBmaXJzdAorIyAgIC0gbGljZW5zZWQgSVAgdXNlZCBpbiBib3RoIFNPQyBhbmQgZGlzY3JldGUgdmVyc2lvbnMKKyMgICAtIGRpc2NyZXRlIG9uZXMgKGluY2x1ZGluZyBhbGwgUENJLW9ubHkgY29udHJvbGxlcnMpCisjICAgLSBkZWJ1Zy9kdW1teSBnYWRnZXQraGNkIGlzIGxhc3QuCisjCiBjaG9pY2UKIAlwcm9tcHQgIlVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBVU0JfR0FER0VUCkBAIC05NCwyNiArMTE4LDI3IEBACiAJICAgTWFueSBjb250cm9sbGVyIGRyaXZlcnMgYXJlIHBsYXRmb3JtLXNwZWNpZmljOyB0aGVzZQogCSAgIG9mdGVuIG5lZWQgYm9hcmQtc3BlY2lmaWMgaG9va3MuCiAKLWNvbmZpZyBVU0JfR0FER0VUX0FNRDU1MzZVREMKLQlib29sZWFuICJBTUQ1NTM2IFVEQyIKLQlkZXBlbmRzIG9uIFBDSQotCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAorIworIyBJbnRlZ3JhdGVkIGNvbnRyb2xsZXJzCisjCisKK2NvbmZpZyBVU0JfR0FER0VUX0FUOTEKKwlib29sZWFuICJBdG1lbCBBVDkxIFVTQiBEZXZpY2UgUG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSAmJiAhQVJDSF9BVDkxU0FNOVJMICYmICFBUkNIX0FUOTFDQVA5CisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKIAloZWxwCi0JICAgVGhlIEFNRDU1MzYgVURDIGlzIHBhcnQgb2YgdGhlIEFNRCBHZW9kZSBDUzU1MzYsIGFuIHg4NiBzb3V0aGJyaWRnZS4KLQkgICBJdCBpcyBhIFVTQiBIaWdoc3BlZWQgRE1BIGNhcGFibGUgVVNCIGRldmljZSBjb250cm9sbGVyLiBCZXNpZGUgZXAwCi0JICAgaXQgcHJvdmlkZXMgNCBJTiBhbmQgNCBPVVQgZW5kcG9pbnRzIChidWxrIG9yIGludGVycnVwdCB0eXBlKS4KLQkgICBUaGUgVURDIHBvcnQgc3VwcG9ydHMgT1RHIG9wZXJhdGlvbiwgYW5kIG1heSBiZSB1c2VkIGFzIGEgaG9zdCBwb3J0Ci0JICAgaWYgaXQncyBub3QgYmVpbmcgdXNlZCB0byBpbXBsZW1lbnQgcGVyaXBoZXJhbCBvciBPVEcgcm9sZXMuCisJICAgTWFueSBBdG1lbCBBVDkxIHByb2Nlc3NvcnMgKHN1Y2ggYXMgdGhlIEFUOTFSTTIwMDApIGhhdmUgYQorCSAgIGZ1bGwgc3BlZWQgVVNCIERldmljZSBQb3J0IHdpdGggc3VwcG9ydCBmb3IgZml2ZSBjb25maWd1cmFibGUKKwkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuCiAKIAkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQotCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhbWQ1NTM2dWRjIiBhbmQgZm9yY2UgYWxsCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImF0OTFfdWRjIiBhbmQgZm9yY2UgYWxsCiAJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCiAKLWNvbmZpZyBVU0JfQU1ENTUzNlVEQworY29uZmlnIFVTQl9BVDkxCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWRlcGVuZHMgb24gVVNCX0dBREdFVF9BVDkxCiAJZGVmYXVsdCBVU0JfR0FER0VUCi0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKIAogY29uZmlnIFVTQl9HQURHRVRfQVRNRUxfVVNCQQogCWJvb2xlYW4gIkF0bWVsIFVTQkEiCkBAIC0xNTAsMjggKzE3NSw1MCBAQAogCWRlZmF1bHQgVVNCX0dBREdFVAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKLWNvbmZpZyBVU0JfR0FER0VUX05FVDIyODAKLQlib29sZWFuICJOZXRDaGlwIDIyOHgiCi0JZGVwZW5kcyBvbiBQQ0kKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKK2NvbmZpZyBVU0JfR0FER0VUX0xIN0E0MFgKKwlib29sZWFuICJMSDdBNDBYIgorCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYCiAJaGVscAotCSAgIE5ldENoaXAgMjI4MCAvIDIyODIgaXMgYSBQQ0kgYmFzZWQgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAotCSAgIHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLiAgCi0JICAgCi0JICAgSXQgaGFzIHNpeCBjb25maWd1cmFibGUgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8KLQkgICAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKSBhbmQgc2V2ZXJhbCBlbmRwb2ludHMgd2l0aCBkZWRpY2F0ZWQKLQkgICBmdW5jdGlvbnMuCisJICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlciBmb3IgTEg3QTQweAogCi0JICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAibmV0MjI4MCIgYW5kIGZvcmNlIGFsbAotCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgotCi1jb25maWcgVVNCX05FVDIyODAKK2NvbmZpZyBVU0JfTEg3QTQwWAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX05FVDIyODAKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfTEg3QTQwWAogCWRlZmF1bHQgVVNCX0dBREdFVAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKK2NvbmZpZyBVU0JfR0FER0VUX09NQVAKKwlib29sZWFuICJPTUFQIFVTQiBEZXZpY2UgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUAorCXNlbGVjdCBJU1AxMzAxX09NQVAgaWYgTUFDSF9PTUFQX0gyIHx8IE1BQ0hfT01BUF9IMyB8fCBNQUNIX09NQVBfSDRfT1RHCisJaGVscAorCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAorCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKKwkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKKwkgICBjb250cm9sbGVyIGluIHRoZSBPTUFQIDE2MTEsIGFuZCBzaG91bGQgd29yayB3aXRoIGNvbnRyb2xsZXJzCisJICAgaW4gb3RoZXIgT01BUCBwcm9jZXNzb3JzIHRvbywgZ2l2ZW4gbWlub3IgdHdlYWtzLgorCisJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAib21hcF91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9PTUFQCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfT01BUAorCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfT1RHCisJYm9vbGVhbiAiT1RHIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAgJiYgQVJDSF9PTUFQX09URyAmJiBVU0JfT0hDSV9IQ0QKKwloZWxwCisJICAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIG9mIFVTQiBPVEcgaXMgc3VwcG9ydCBmb3IgYQorCSAgICJEdWFsLVJvbGUiIGRldmljZSwgd2hpY2ggY2FuIGFjdCBhcyBlaXRoZXIgYSBkZXZpY2UKKwkgICBvciBhIGhvc3QuICBUaGUgaW5pdGlhbCByb2xlIGNob2ljZSBjYW4gYmUgY2hhbmdlZAorCSAgIGxhdGVyLCB3aGVuIHR3byBkdWFsLXJvbGUgZGV2aWNlcyB0YWxrIHRvIGVhY2ggb3RoZXIuCisKKwkgICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIgT01BUCBib2FyZCBoYXMgYSBNaW5pLUFCIGNvbm5lY3Rvci4KKwogY29uZmlnIFVTQl9HQURHRVRfUFhBMjVYCiAJYm9vbGVhbiAiUFhBIDI1eCBvciBJWFAgNHh4IgogCWRlcGVuZHMgb24gKEFSQ0hfUFhBICYmIFBYQTI1eCkgfHwgQVJDSF9JWFA0WFgKQEAgLTIwMyw2ICsyNTAsNjEgQEAKIAlkZWZhdWx0IHkgaWYgVVNCX0VUSAogCWRlZmF1bHQgeSBpZiBVU0JfR19TRVJJQUwKIAorY29uZmlnIFVTQl9HQURHRVRfUFhBMjdYCisJYm9vbGVhbiAiUFhBIDI3eCIKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBICYmIFBYQTI3eAorCWhlbHAKKwkgICBJbnRlbCdzIFBYQSAyN3ggc2VyaWVzIFhTY2FsZSBBUk0gdjVURSBwcm9jZXNzb3JzIGluY2x1ZGUKKwkgICBhbiBpbnRlZ3JhdGVkIGZ1bGwgc3BlZWQgVVNCIDEuMSBkZXZpY2UgY29udHJvbGxlci4KKworCSAgIEl0IGhhcyB1cCB0byAyMyBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yCisJICAgY29udHJvbCB0cmFuc2ZlcnMpLgorCisJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMjd4X3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX1BYQTI3WAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1BYQTI3WAorCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfR0FER0VUX1MzQzI0MTAKKwlib29sZWFuICJTM0MyNDEwIFVTQiBEZXZpY2UgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCWhlbHAKKwkgIFNhbXN1bmcncyBTM0MyNDEwIGlzIGFuIEFSTS00IHByb2Nlc3NvciB3aXRoIGFuIGludGVncmF0ZWQKKwkgIGZ1bGwgc3BlZWQgVVNCIDEuMSBkZXZpY2UgY29udHJvbGxlci4gIEl0IGhhcyA0IGNvbmZpZ3VyYWJsZQorCSAgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8gKGZvciBjb250cm9sIHRyYW5zZmVycykuCisKKwkgIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgUzNDMjQxMCwgUzNDMjQxMiwgYW5kCisJICBTM0MyNDQwIHByb2Nlc3NvcnMuCisKK2NvbmZpZyBVU0JfUzNDMjQxMAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1MzQzI0MTAKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX1MzQzI0MTBfREVCVUcKKwlib29sZWFuICJTM0MyNDEwIHVkYyBkZWJ1ZyBtZXNzYWdlcyIKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDMjQxMAorCisjCisjIENvbnRyb2xsZXJzIGF2YWlsYWJsZSBpbiBib3RoIGludGVncmF0ZWQgYW5kIGRpc2NyZXRlIHZlcnNpb25zCisjCisKKyMgbXVzYiBidWlsZHMgaW4gLi4vbXVzYiBhbG9uZyB3aXRoIGhvc3Qgc3VwcG9ydAorY29uZmlnIFVTQl9HQURHRVRfTVVTQl9IRFJDCisJYm9vbGVhbiAiSW52ZW50cmEgSERSQyBVU0IgUGVyaXBoZXJhbCAoVEksIC4uLikiCisJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIChVU0JfTVVTQl9QRVJJUEhFUkFMIHx8IFVTQl9NVVNCX09URykKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCWhlbHAKKwkgIFRoaXMgT1RHLWNhcGFibGUgc2lsaWNvbiBJUCBpcyB1c2VkIGluIGR1YWwgZGVzaWducyBpbmNsdWRpbmcKKwkgIHRoZSBUSSBEYVZpbmNpLCBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KKwogY29uZmlnIFVTQl9HQURHRVRfTTY2NTkyCiAJYm9vbGVhbiAiUmVuZXNhcyBNNjY1OTIgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlciIKIAlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKQEAgLTIzMSwyMyArMzMzLDY5IEBACiAJICAgSG93ZXZlciwgdGhpcyBwcm9ibGVtIGlzIGltcHJvdmVkIGlmIGNoYW5nZSBhIHZhbHVlIG9mCiAJICAgTkVUX0lQX0FMSUdOIHRvIDQuCiAKLWNvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAotCWJvb2xlYW4gIlBYQSAyN3giCi0JZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBQWEEyN3gKLQloZWxwCi0JICAgSW50ZWwncyBQWEEgMjd4IHNlcmllcyBYU2NhbGUgQVJNIHY1VEUgcHJvY2Vzc29ycyBpbmNsdWRlCi0JICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuCisjCisjIENvbnRyb2xsZXJzIGF2YWlsYWJsZSBvbmx5IGluIGRpc2NyZXRlIGZvcm0gKGFuZCBhbGwgUENJIGNvbnRyb2xsZXJzKQorIwogCi0JICAgSXQgaGFzIHVwIHRvIDIzIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvIChmb3IKLQkgICBjb250cm9sIHRyYW5zZmVycykuCitjb25maWcgVVNCX0dBREdFVF9BTUQ1NTM2VURDCisJYm9vbGVhbiAiQU1ENTUzNiBVREMiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloZWxwCisJICAgVGhlIEFNRDU1MzYgVURDIGlzIHBhcnQgb2YgdGhlIEFNRCBHZW9kZSBDUzU1MzYsIGFuIHg4NiBzb3V0aGJyaWRnZS4KKwkgICBJdCBpcyBhIFVTQiBIaWdoc3BlZWQgRE1BIGNhcGFibGUgVVNCIGRldmljZSBjb250cm9sbGVyLiBCZXNpZGUgZXAwCisJICAgaXQgcHJvdmlkZXMgNCBJTiBhbmQgNCBPVVQgZW5kcG9pbnRzIChidWxrIG9yIGludGVycnVwdCB0eXBlKS4KKwkgICBUaGUgVURDIHBvcnQgc3VwcG9ydHMgT1RHIG9wZXJhdGlvbiwgYW5kIG1heSBiZSB1c2VkIGFzIGEgaG9zdCBwb3J0CisJICAgaWYgaXQncyBub3QgYmVpbmcgdXNlZCB0byBpbXBsZW1lbnQgcGVyaXBoZXJhbCBvciBPVEcgcm9sZXMuCiAKIAkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQotCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJweGEyN3hfdWRjIiBhbmQgZm9yY2UgYWxsCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImFtZDU1MzZ1ZGMiIGFuZCBmb3JjZSBhbGwKIAkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KIAotY29uZmlnIFVTQl9QWEEyN1gKK2NvbmZpZyBVU0JfQU1ENTUzNlVEQwogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX1BYQTI3WAorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9BTUQ1NTM2VURDCisJZGVmYXVsdCBVU0JfR0FER0VUCisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKworY29uZmlnIFVTQl9HQURHRVRfRlNMX1FFCisJYm9vbGVhbiAiRnJlZXNjYWxlIFFFL0NQTSBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBGU0xfU09DICYmIChRVUlDQ19FTkdJTkUgfHwgQ1BNKQorCWhlbHAKKwkgICBTb21lIG9mIEZyZWVzY2FsZSBQb3dlclBDIHByb2Nlc3NvcnMgaGF2ZSBhIEZ1bGwgU3BlZWQKKwkgICBRRS9DUE0yIFVTQiBjb250cm9sbGVyLCB3aGljaCBzdXBwb3J0IGRldmljZSBtb2RlIHdpdGggNAorCSAgIHByb2dyYW1tYWJsZSBlbmRwb2ludHMuIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZQorCSAgIGNvbnRyb2xsZXIgaW4gdGhlIE1QQzgzNjAgYW5kIE1QQzgyNzIsIGFuZCBzaG91bGQgd29yayB3aXRoCisJICAgY29udHJvbGxlcnMgaGF2aW5nIFFFIG9yIENQTTIsIGdpdmVuIG1pbm9yIHR3ZWFrcy4KKworCSAgIFNldCBDT05GSUdfVVNCX0dBREdFVCB0byAibSIgdG8gYnVpbGQgdGhpcyBkcml2ZXIgYXMgYQorCSAgIGR5bm1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImZzbF9xZV91ZGMiLgorCitjb25maWcgVVNCX0ZTTF9RRQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0ZTTF9RRQorCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfR0FER0VUX05FVDIyODAKKwlib29sZWFuICJOZXRDaGlwIDIyOHgiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloZWxwCisJICAgTmV0Q2hpcCAyMjgwIC8gMjI4MiBpcyBhIFBDSSBiYXNlZCBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIHdoaWNoCisJICAgc3VwcG9ydHMgYm90aCBmdWxsIGFuZCBoaWdoIHNwZWVkIFVTQiAyLjAgZGF0YSB0cmFuc2ZlcnMuCisKKwkgICBJdCBoYXMgc2l4IGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybworCSAgIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpIGFuZCBzZXZlcmFsIGVuZHBvaW50cyB3aXRoIGRlZGljYXRlZAorCSAgIGZ1bmN0aW9ucy4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm5ldDIyODAiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9ORVQyMjgwCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfTkVUMjI4MAogCWRlZmF1bHQgVVNCX0dBREdFVAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKQEAgLTI1Nyw3ICs0MDUsNyBAQAogCWhlbHAKIAkgICBUaGUgVG9zaGliYSBUQzg2QzAwMSBpcyBhIFBDSSBkZXZpY2Ugd2hpY2ggaW5jbHVkZXMgY29udHJvbGxlcnMKIAkgICBmb3IgZnVsbCBzcGVlZCBVU0IgZGV2aWNlcywgSURFLCBJMkMsIFNJTywgcGx1cyBhIFVTQiBob3N0IChPSENJKS4KLQkgICAKKwogCSAgIFRoZSBkZXZpY2UgY29udHJvbGxlciBoYXMgdGhyZWUgY29uZmlndXJhYmxlIChidWxrIG9yIGludGVycnVwdCkKIAkgICBlbmRwb2ludHMsIHBsdXMgZW5kcG9pbnQgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KIApAQCAtMjcyLDk4ICs0MjAsOSBAQAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKIAotY29uZmlnIFVTQl9HQURHRVRfTEg3QTQwWAotCWJvb2xlYW4gIkxIN0E0MFgiCi0JZGVwZW5kcyBvbiBBUkNIX0xIN0E0MFgKLQloZWxwCi0gICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlciBmb3IgTEg3QTQweAotCi1jb25maWcgVVNCX0xIN0E0MFgKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9MSDdBNDBYCi0JZGVmYXVsdCBVU0JfR0FER0VUCi0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKLQotIyBidWlsdCBpbiAuLi9tdXNiIGFsb25nIHdpdGggaG9zdCBzdXBwb3J0Ci1jb25maWcgVVNCX0dBREdFVF9NVVNCX0hEUkMKLQlib29sZWFuICJJbnZlbnRyYSBIRFJDIFVTQiBQZXJpcGhlcmFsIChUSSwgLi4uKSIKLQlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgKFVTQl9NVVNCX1BFUklQSEVSQUwgfHwgVVNCX01VU0JfT1RHKQotCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0JaGVscAotCSAgVGhpcyBPVEctY2FwYWJsZSBzaWxpY29uIElQIGlzIHVzZWQgaW4gZHVhbCBkZXNpZ25zIGluY2x1ZGluZwotCSAgdGhlIFRJIERhVmluY2ksIE9NQVAgMjQzeCwgT01BUCAzNDN4LCBhbmQgVFVTQiA2MDEwLgotCi1jb25maWcgVVNCX0dBREdFVF9PTUFQCi0JYm9vbGVhbiAiT01BUCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAKLQlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKLQloZWxwCi0JICAgTWFueSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIHByb2Nlc3NvcnMgaGF2ZSBmbGV4aWJsZSBmdWxsCi0JICAgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycywgd2l0aCBzdXBwb3J0IGZvciB1cCB0byAzMAotCSAgIGVuZHBvaW50cyAocGx1cyBlbmRwb2ludCB6ZXJvKS4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZQotCSAgIGNvbnRyb2xsZXIgaW4gdGhlIE9NQVAgMTYxMSwgYW5kIHNob3VsZCB3b3JrIHdpdGggY29udHJvbGxlcnMKLQkgICBpbiBvdGhlciBPTUFQIHByb2Nlc3NvcnMgdG9vLCBnaXZlbiBtaW5vciB0d2Vha3MuCi0KLQkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQotCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJvbWFwX3VkYyIgYW5kIGZvcmNlIGFsbAotCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgotCi1jb25maWcgVVNCX09NQVAKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQCi0JZGVmYXVsdCBVU0JfR0FER0VUCi0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKLQotY29uZmlnIFVTQl9PVEcKLQlib29sZWFuICJPVEcgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfT01BUCAmJiBBUkNIX09NQVBfT1RHICYmIFVTQl9PSENJX0hDRAotCWhlbHAKLQkgICBUaGUgbW9zdCBub3RhYmxlIGZlYXR1cmUgb2YgVVNCIE9URyBpcyBzdXBwb3J0IGZvciBhCi0JICAgIkR1YWwtUm9sZSIgZGV2aWNlLCB3aGljaCBjYW4gYWN0IGFzIGVpdGhlciBhIGRldmljZQotCSAgIG9yIGEgaG9zdC4gIFRoZSBpbml0aWFsIHJvbGUgY2hvaWNlIGNhbiBiZSBjaGFuZ2VkCi0JICAgbGF0ZXIsIHdoZW4gdHdvIGR1YWwtcm9sZSBkZXZpY2VzIHRhbGsgdG8gZWFjaCBvdGhlci4KLQotCSAgIFNlbGVjdCB0aGlzIG9ubHkgaWYgeW91ciBPTUFQIGJvYXJkIGhhcyBhIE1pbmktQUIgY29ubmVjdG9yLgotCi1jb25maWcgVVNCX0dBREdFVF9TM0MyNDEwCi0JYm9vbGVhbiAiUzNDMjQxMCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKLQloZWxwCi0JICBTYW1zdW5nJ3MgUzNDMjQxMCBpcyBhbiBBUk0tNCBwcm9jZXNzb3Igd2l0aCBhbiBpbnRlZ3JhdGVkCi0JICBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBJdCBoYXMgNCBjb25maWd1cmFibGUKLQkgIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpLgotCi0JICBUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIFMzQzI0MTAsIFMzQzI0MTIsIGFuZAotCSAgUzNDMjQ0MCBwcm9jZXNzb3JzLgotCi1jb25maWcgVVNCX1MzQzI0MTAKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCi0JZGVmYXVsdCBVU0JfR0FER0VUCi0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKLQotY29uZmlnIFVTQl9TM0MyNDEwX0RFQlVHCi0JYm9vbGVhbiAiUzNDMjQxMCB1ZGMgZGVidWcgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX1MzQzI0MTAKLQotY29uZmlnIFVTQl9HQURHRVRfQVQ5MQotCWJvb2xlYW4gIkFUOTEgVVNCIERldmljZSBQb3J0IgotCWRlcGVuZHMgb24gQVJDSF9BVDkxICYmICFBUkNIX0FUOTFTQU05UkwgJiYgIUFSQ0hfQVQ5MUNBUDkKLQlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAotCWhlbHAKLQkgICBNYW55IEF0bWVsIEFUOTEgcHJvY2Vzc29ycyAoc3VjaCBhcyB0aGUgQVQ5MVJNMjAwMCkgaGF2ZSBhCi0JICAgZnVsbCBzcGVlZCBVU0IgRGV2aWNlIFBvcnQgd2l0aCBzdXBwb3J0IGZvciBmaXZlIGNvbmZpZ3VyYWJsZQotCSAgIGVuZHBvaW50cyAocGx1cyBlbmRwb2ludCB6ZXJvKS4KLQotCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCi0JICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImF0OTFfdWRjIiBhbmQgZm9yY2UgYWxsCi0JICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCi0KLWNvbmZpZyBVU0JfQVQ5MQotCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX0FUOTEKLQlkZWZhdWx0IFVTQl9HQURHRVQKKyMKKyMgTEFTVCAtLSBkdW1teS9lbXVsYXRlZCBjb250cm9sbGVyCisjCiAKIGNvbmZpZyBVU0JfR0FER0VUX0RVTU1ZX0hDRAogCWJvb2xlYW4gIkR1bW15IEhDRCAoREVWRUxPUE1FTlQpIgpAQCAtNTUzLDE5ICs2MTIsMjMgQEAKIAkgIG5vcm1hbCBvcGVyYXRpb24uCiAKIGNvbmZpZyBVU0JfR19TRVJJQUwKLQl0cmlzdGF0ZSAiU2VyaWFsIEdhZGdldCAod2l0aCBDREMgQUNNIHN1cHBvcnQpIgorCXRyaXN0YXRlICJTZXJpYWwgR2FkZ2V0ICh3aXRoIENEQyBBQ00gYW5kIENEQyBPQkVYIHN1cHBvcnQpIgogCWhlbHAKIAkgIFRoZSBTZXJpYWwgR2FkZ2V0IHRhbGtzIHRvIHRoZSBMaW51eC1VU0IgZ2VuZXJpYyBzZXJpYWwgZHJpdmVyLgogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBDREMtQUNNIG1vZHVsZSBvcHRpb24sIHdoaWNoIGNhbiBiZSB1c2VkCiAJICB0byBpbnRlcm9wZXJhdGUgd2l0aCBNUy1XaW5kb3dzIGhvc3RzIG9yIHdpdGggdGhlIExpbnV4LVVTQgogCSAgImNkYy1hY20iIGRyaXZlci4KIAorCSAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBhIENEQy1PQkVYIG9wdGlvbi4gIFlvdSB3aWxsIG5lZWQgYQorCSAgdXNlciBzcGFjZSBPQkVYIHNlcnZlciB0YWxraW5nIHRvIC9kZXYvdHR5R1MqLCBzaW5jZSB0aGUga2VybmVsCisJICBpdHNlbGYgZG9lc24ndCBpbXBsZW1lbnQgdGhlIE9CRVggcHJvdG9jb2wuCisKIAkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCiAJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZ19zZXJpYWwiLgogCiAJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0CiAJICB3aGljaCBpbmNsdWRlcyBpbnN0cnVjdGlvbnMgYW5kIGEgImRyaXZlciBpbmZvIGZpbGUiIG5lZWRlZCB0bwotCSAgbWFrZSBNUy1XaW5kb3dzIHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KKwkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggQ0RDIEFDTS4KIAogY29uZmlnIFVTQl9NSURJX0dBREdFVAogCXRyaXN0YXRlICJNSURJIEdhZGdldCAoRVhQRVJJTUVOVEFMKSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQppbmRleCAyMjY3ZmEwLi5iZDQwNDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBACiBvYmotJChDT05GSUdfVVNCX0FUTUVMX1VTQkEpCSs9IGF0bWVsX3VzYmFfdWRjLm8KIG9iai0kKENPTkZJR19VU0JfRlNMX1VTQjIpCSs9IGZzbF91c2IyX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX002NjU5MikJKz0gbTY2NTkyLXVkYy5vCitvYmotJChDT05GSUdfVVNCX0ZTTF9RRSkJKz0gZnNsX3FlX3VkYy5vCiAKICMKICMgVVNCIGdhZGdldCBkcml2ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwppbmRleCBhNzI0ZmMxLi41NDk1YjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKQEAgLTE1NSw3ICsxNTUsNiBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMSwKIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgkJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IDg1Yzg3NmMuLmYyZGEwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTEyOCw2ICsxMjgsNzAgQEAKIH0KIAogLyoqCisgKiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSAtIHByZXZlbnQgZnVuY3Rpb24gYW5kIGdhZGdldCBlbnVtZXJhdGlvbgorICogQGZ1bmN0aW9uOiB0aGUgZnVuY3Rpb24gdGhhdCBpc24ndCB5ZXQgcmVhZHkgdG8gcmVzcG9uZAorICoKKyAqIEJsb2NrcyByZXNwb25zZSBvZiB0aGUgZ2FkZ2V0IGRyaXZlciB0byBob3N0IGVudW1lcmF0aW9uIGJ5CisgKiBwcmV2ZW50aW5nIHRoZSBkYXRhIGxpbmUgcHVsbHVwIGZyb20gYmVpbmcgYWN0aXZhdGVkLiAgVGhpcyBpcworICogbm9ybWFsbHkgY2FsbGVkIGR1cmluZyBAYmluZCgpIHByb2Nlc3NpbmcgdG8gY2hhbmdlIGZyb20gdGhlCisgKiBpbml0aWFsICJyZWFkeSB0byByZXNwb25kIiBzdGF0ZSwgb3Igd2hlbiBhIHJlcXVpcmVkIHJlc291cmNlCisgKiBiZWNvbWVzIGF2YWlsYWJsZS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgZHJpdmVycyB0aGF0IHNlcnZlIGFzIGEgcGFzc3Rocm91Z2ggdG8gYSB1c2Vyc3BhY2UKKyAqIGRhZW1vbiBjYW4gYmxvY2sgZW51bWVyYXRpb24gdW5sZXNzIHRoYXQgZGFlbW9uIChzdWNoIGFzIGFuIE9CRVgsCisgKiBNVFAsIG9yIHByaW50IHNlcnZlcikgaXMgcmVhZHkgdG8gaGFuZGxlIGhvc3QgcmVxdWVzdHMuCisgKgorICogTm90IGFsbCBzeXN0ZW1zIHN1cHBvcnQgc29mdHdhcmUgY29udHJvbCBvZiB0aGVpciBVU0IgcGVyaXBoZXJhbAorICogZGF0YSBwdWxsdXBzLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZnVuY3Rpb24tPmNvbmZpZy0+Y2RldjsKKwlpbnQJCQkJc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY2Rldi0+bG9jayk7CisKKwlpZiAoY2Rldi0+ZGVhY3RpdmF0aW9ucyA9PSAwKQorCQlzdGF0dXMgPSB1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QoY2Rldi0+Z2FkZ2V0KTsKKwlpZiAoc3RhdHVzID09IDApCisJCWNkZXYtPmRlYWN0aXZhdGlvbnMrKzsKKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9mdW5jdGlvbl9hY3RpdmF0ZSAtIGFsbG93IGZ1bmN0aW9uIGFuZCBnYWRnZXQgZW51bWVyYXRpb24KKyAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gd2hpY2ggdXNiX2Z1bmN0aW9uX2FjdGl2YXRlKCkgd2FzIGNhbGxlZAorICoKKyAqIFJldmVyc2VzIGVmZmVjdCBvZiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSgpLiAgSWYgbm8gbW9yZSBmdW5jdGlvbnMKKyAqIGFyZSBkZWxheWluZyB0aGVpciBhY3RpdmF0aW9uLCB0aGUgZ2FkZ2V0IGRyaXZlciB3aWxsIHJlc3BvbmQgdG8KKyAqIGhvc3QgZW51bWVyYXRpb24gcHJvY2VkdXJlcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IHVzYl9mdW5jdGlvbl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmdW5jdGlvbikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBmdW5jdGlvbi0+Y29uZmlnLT5jZGV2OworCWludAkJCQlzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjZGV2LT5sb2NrKTsKKworCWlmIChXQVJOX09OKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkpCisJCXN0YXR1cyA9IC1FSU5WQUw7CisJZWxzZSB7CisJCWNkZXYtPmRlYWN0aXZhdGlvbnMtLTsKKwkJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKKwkJCXN0YXR1cyA9IHVzYl9nYWRnZXRfY29ubmVjdChjZGV2LT5nYWRnZXQpOworCX0KKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIHVzYl9pbnRlcmZhY2VfaWQoKSAtIGFsbG9jYXRlIGFuIHVudXNlZCBpbnRlcmZhY2UgSUQKICAqIEBjb25maWc6IGNvbmZpZ3VyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlcmZhY2UKICAqIEBmdW5jdGlvbjogZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGludGVyZmFjZQpAQCAtMTgxLDcgKzI0NSw3IEBACiAJYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9IGNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZTsKIAljLT5pQ29uZmlndXJhdGlvbiA9IGNvbmZpZy0+aUNvbmZpZ3VyYXRpb247CiAJYy0+Ym1BdHRyaWJ1dGVzID0gVVNCX0NPTkZJR19BVFRfT05FIHwgY29uZmlnLT5ibUF0dHJpYnV0ZXM7Ci0JYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXI7CisJYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXIgPyA6IChDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyKTsKIAogCS8qIFRoZXJlIG1heSBiZSBlLmcuIE9URyBkZXNjcmlwdG9ycyAqLwogCWlmIChjb25maWctPmRlc2NyaXB0b3JzKSB7CkBAIC0zNjgsNyArNDMyLDcgQEAKIAl9CiAKIAkvKiB3aGVuIHdlIHJldHVybiwgYmUgc3VyZSBvdXIgcG93ZXIgdXNhZ2UgaXMgdmFsaWQgKi8KLQlwb3dlciA9IDIgKiBjLT5iTWF4UG93ZXI7CisJcG93ZXIgPSBjLT5iTWF4UG93ZXIgPyAoMiAqIGMtPmJNYXhQb3dlcikgOiBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc7CiBkb25lOgogCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgcG93ZXIpOwogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMKaW5kZXggMWNhMWMzMi4uZTExOTFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb25maWcuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgKiB1c2JfZmluZF9lbmRwb2ludCAtIGZpbmQgYSBjb3B5IG9mIGFuIGVuZHBvaW50IGRlc2NyaXB0b3IKICAqIEBzcmM6IG9yaWdpbmFsIHZlY3RvciBvZiBkZXNjcmlwdG9ycwogICogQGNvcHk6IGNvcHkgb2YgQHNyYwotICogQGVwOiBlbmRwb2ludCBkZXNjcmlwdG9yIGZvdW5kIGluIEBzcmMKKyAqIEBtYXRjaDogZW5kcG9pbnQgZGVzY3JpcHRvciBmb3VuZCBpbiBAc3JjCiAgKgogICogVGhpcyByZXR1cm5zIHRoZSBjb3B5IG9mIHRoZSBAbWF0Y2ggZGVzY3JpcHRvciBtYWRlIGZvciBAY29weS4gIEl0cwogICogaW50ZW5kZWQgdXNlIGlzIHRvIGhlbHAgcmVtZW1iZXJpbmcgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3IgdG8gdXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggNzYwMGEwYy4uOTA2NDY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtODIsNiArODIsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKIAlzdHJ1Y3QgdXNiX2VwCQkJZXA7CiAJdW5zaWduZWQJCQloYWx0ZWQgOiAxOworCXVuc2lnbmVkCQkJd2VkZ2VkIDogMTsKIAl1bnNpZ25lZAkJCWFscmVhZHlfc2VlbiA6IDE7CiAJdW5zaWduZWQJCQlzZXR1cF9zdGFnZSA6IDE7CiB9OwpAQCAtNDM2LDYgKzQzNyw3IEBACiAJLyogYXQgdGhpcyBwb2ludCByZWFsIGhhcmR3YXJlIHNob3VsZCBiZSBOQUtpbmcgdHJhbnNmZXJzCiAJICogdG8gdGhhdCBlbmRwb2ludCwgdW50aWwgYSBidWZmZXIgaXMgcXVldWVkIHRvIGl0LgogCSAqLworCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gMDsKIAlyZXR2YWwgPSAwOwogZG9uZToKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTk3LDcgKzU5OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWR1bW15X3NldF9oYWx0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK2R1bW15X3NldF9oYWx0X2FuZF93ZWRnZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSwgaW50IHdlZGdlZCkKIHsKIAlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKIAlzdHJ1Y3QgZHVtbXkJCSpkdW07CkBAIC02MDksMTYgKzYxMSwzMiBAQAogCWlmICghZHVtLT5kcml2ZXIpCiAJCXJldHVybiAtRVNIVVRET1dOOwogCWlmICghdmFsdWUpCi0JCWVwLT5oYWx0ZWQgPSAwOworCQllcC0+aGFsdGVkID0gZXAtPndlZGdlZCA9IDA7CiAJZWxzZSBpZiAoZXAtPmRlc2MgJiYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKIAkJCSFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JZWxzZQorCWVsc2UgewogCQllcC0+aGFsdGVkID0gMTsKKwkJaWYgKHdlZGdlZCkKKwkJCWVwLT53ZWRnZWQgPSAxOworCX0KIAkvKiBGSVhNRSBjbGVhciBlbXVsYXRlZCBkYXRhIHRvZ2dsZSB0b28gKi8KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorZHVtbXlfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIGR1bW15X3NldF9oYWx0X2FuZF93ZWRnZShfZXAsIHZhbHVlLCAwKTsKK30KKworc3RhdGljIGludCBkdW1teV9zZXRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCWlmICghX2VwIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZHVtbXlfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBkdW1teV9lcF9vcHMgPSB7CiAJLmVuYWJsZQkJPSBkdW1teV9lbmFibGUsCiAJLmRpc2FibGUJPSBkdW1teV9kaXNhYmxlLApAQCAtNjMwLDYgKzY0OCw3IEBACiAJLmRlcXVldWUJPSBkdW1teV9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gZHVtbXlfc2V0X2hhbHQsCisJLnNldF93ZWRnZQk9IGR1bW15X3NldF93ZWRnZSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03NjAsNyArNzc5LDggQEAKIAkJZXAtPmVwLm5hbWUgPSBlcF9uYW1lIFtpXTsKIAkJZXAtPmVwLm9wcyA9ICZkdW1teV9lcF9vcHM7CiAJCWxpc3RfYWRkX3RhaWwgKCZlcC0+ZXAuZXBfbGlzdCwgJmR1bS0+Z2FkZ2V0LmVwX2xpc3QpOwotCQllcC0+aGFsdGVkID0gZXAtPmFscmVhZHlfc2VlbiA9IGVwLT5zZXR1cF9zdGFnZSA9IDA7CisJCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gZXAtPmFscmVhZHlfc2VlbiA9CisJCQkJZXAtPnNldHVwX3N0YWdlID0gMDsKIAkJZXAtPmVwLm1heHBhY2tldCA9IH4wOwogCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CiAJCWVwLT5nYWRnZXQgPSAmZHVtLT5nYWRnZXQ7CkBAIC0xMzUxLDcgKzEzNzEsNyBAQAogCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKIAkJCQkJLy8gZW5kcG9pbnQgaGFsdAogCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sIHdfaW5kZXgpOwotCQkJCQlpZiAoIWVwMikgeworCQkJCQlpZiAoIWVwMiB8fCBlcDItPmVwLm5hbWUgPT0gZXAwbmFtZSkgewogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CkBAIC0xMzgwLDcgKzE0MDAsOCBAQAogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJCWVwMi0+aGFsdGVkID0gMDsKKwkJCQkJaWYgKCFlcDItPndlZGdlZCkKKwkJCQkJCWVwMi0+aGFsdGVkID0gMDsKIAkJCQkJdmFsdWUgPSAwOwogCQkJCQlzdGF0dXMgPSAwOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggOTQ0YzhlOC4uMzcyNTJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTI0Miw3ICsyNDIsNiBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMiwKIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgkJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjcxLDcgKzI3MCw2IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwppbmRleCA4N2RkZTAxLi44YWZmZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKQEAgLTM1Miw3ICszNTIsNiBAQAogCS5iaW5kCQk9IGxvb3BiYWNrX2JpbmRfY29uZmlnLAogCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMiwKIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYzJlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKQEAgLTAsMCArMSw0OTMgQEAKKy8qCisgKiBmX29iZXguYyAtLSBVU0IgQ0RDIE9CRVggZnVuY3Rpb24gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb250YWN0OiBGZWxpcGUgQmFsYmkgPGZlbGlwZS5iYWxiaUBub2tpYS5jb20+CisgKgorICogQmFzZWQgb24gZl9hY20uYyBieSBBbCBCb3JjaGVycyBhbmQgRGF2aWQgQnJvd25lbGwuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiAjZGVmaW5lIFZFUkJPU0VfREVCVUcgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgInVfc2VyaWFsLmgiCisjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCisKKworLyoKKyAqIFRoaXMgQ0RDIE9CRVggZnVuY3Rpb24gc3VwcG9ydCBqdXN0IHBhY2thZ2VzIGEgVFRZLWlzaCBieXRlIHN0cmVhbS4KKyAqIEEgdXNlciBtb2RlIHNlcnZlciB3aWxsIHB1dCBpdCBpbnRvICJyYXciIG1vZGUgYW5kIGhhbmRsZSBhbGwgdGhlCisgKiByZWxldmFudCBwcm90b2NvbCBkZXRhaWxzIC4uLiB0aGlzIGlzIGp1c3QgYSBrZXJuZWwgcGFzc3Rocm91Z2guCisgKiBXaGVuIHBvc3NpYmxlLCB3ZSBwcmV2ZW50IGdhZGdldCBlbnVtZXJhdGlvbiB1bnRpbCB0aGF0IHNlcnZlciBpcworICogcmVhZHkgdG8gaGFuZGxlIHRoZSBjb21tYW5kcy4KKyAqLworCitzdHJ1Y3Qgb2JleF9lcF9kZXNjcyB7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpvYmV4X2luOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb2JleF9vdXQ7Cit9OworCitzdHJ1Y3QgZl9vYmV4IHsKKwlzdHJ1Y3QgZ3NlcmlhbAkJCXBvcnQ7CisJdTgJCQkJY3RybF9pZDsKKwl1OAkJCQlkYXRhX2lkOworCXU4CQkJCXBvcnRfbnVtOworCXU4CQkJCWNhbl9hY3RpdmF0ZTsKKworCXN0cnVjdCBvYmV4X2VwX2Rlc2NzCQlmczsKKwlzdHJ1Y3Qgb2JleF9lcF9kZXNjcwkJaHM7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmX29iZXggKmZ1bmNfdG9fb2JleChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfb2JleCwgcG9ydC5mdW5jKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9vYmV4ICpwb3J0X3RvX29iZXgoc3RydWN0IGdzZXJpYWwgKnApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgZl9vYmV4LCBwb3J0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBPQkVYX0NUUkxfSURYCTAKKyNkZWZpbmUgT0JFWF9EQVRBX0lEWAkxCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBvYmV4X3N0cmluZ19kZWZzW10gPSB7CisJW09CRVhfQ1RSTF9JRFhdLnMJPSAiQ0RDIE9iamVjdCBFeGNoYW5nZSAoT0JFWCkiLAorCVtPQkVYX0RBVEFfSURYXS5zCT0gIkNEQyBPQkVYIERhdGEiLAorCXsgIH0sCS8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBvYmV4X3N0cmluZ190YWJsZSA9IHsKKwkubGFuZ3VhZ2UJCT0gMHgwNDA5LAkvKiBlbi1VUyAqLworCS5zdHJpbmdzCQk9IG9iZXhfc3RyaW5nX2RlZnMsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqb2JleF9zdHJpbmdzW10gPSB7CisJJm9iZXhfc3RyaW5nX3RhYmxlLAorCU5VTEwsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBvYmV4X2NvbnRyb2xfaW50ZiBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2NvbnRyb2xfaW50ZiksCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9JTlRFUkZBQ0UsCisJLmJJbnRlcmZhY2VOdW1iZXIJPSAwLAorCisJLmJBbHRlcm5hdGVTZXR0aW5nCT0gMCwKKwkuYk51bUVuZHBvaW50cwkJPSAwLAorCS5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfQ09NTSwKKwkuYkludGVyZmFjZVN1YkNsYXNzCT0gVVNCX0NEQ19TVUJDTEFTU19PQkVYLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igb2JleF9kYXRhX25vcF9pbnRmIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfZGF0YV9ub3BfaW50ZiksCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9JTlRFUkZBQ0UsCisJLmJJbnRlcmZhY2VOdW1iZXIJPSAxLAorCisJLmJBbHRlcm5hdGVTZXR0aW5nCT0gMCwKKwkuYk51bUVuZHBvaW50cwkJPSAwLAorCS5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfQ0RDX0RBVEEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBvYmV4X2RhdGFfaW50ZiBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2RhdGFfaW50ZiksCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9JTlRFUkZBQ0UsCisJLmJJbnRlcmZhY2VOdW1iZXIJPSAyLAorCisJLmJBbHRlcm5hdGVTZXR0aW5nCT0gMSwKKwkuYk51bUVuZHBvaW50cwkJPSAyLAorCS5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfQ0RDX0RBVEEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2Mgb2JleF9jZGNfaGVhZGVyX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9jZGNfaGVhZGVyX2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX0hFQURFUl9UWVBFLAorCS5iY2RDREMJCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTIwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIG9iZXhfY2RjX3VuaW9uX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9jZGNfdW5pb25fZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVTQl9DRENfVU5JT05fVFlQRSwKKwkuYk1hc3RlckludGVyZmFjZTAJPSAxLAorCS5iU2xhdmVJbnRlcmZhY2UwCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY19vYmV4X2Rlc2Mgb2JleF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVTQl9DRENfT0JFWF9UWVBFLAorCS5iY2RWZXJzaW9uCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKK307CisKKy8qIEhpZ2gtU3BlZWQgU3VwcG9ydCAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfaHNfZXBfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MJPSBVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Igb2JleF9oc19lcF9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2NkY19oZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2NkY191bmlvbl9kZXNjLAorCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGF0YV9ub3BfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9kYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfaHNfZXBfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9oc19lcF9vdXRfZGVzYywKKwlOVUxMLAorfTsKKworLyogRnVsbC1TcGVlZCBTdXBwb3J0ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Igb2JleF9mc19lcF9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfZnNfZXBfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MJPSBVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2NvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfdW5pb25fZGVzYywKKworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2RhdGFfbm9wX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2ZzX2VwX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZnNfZXBfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2JleF9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKK3sKKwlzdHJ1Y3QgZl9vYmV4CQkqb2JleCA9IGZ1bmNfdG9fb2JleChmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlpZiAoaW50ZiA9PSBvYmV4LT5jdHJsX2lkKSB7CisJCWlmIChhbHQgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKwkJLyogTk9QICovCisJCURCRyhjZGV2LCAicmVzZXQgb2JleCB0dHlHUyVkIGNvbnRyb2xcbiIsIG9iZXgtPnBvcnRfbnVtKTsKKworCX0gZWxzZSBpZiAoaW50ZiA9PSBvYmV4LT5kYXRhX2lkKSB7CisJCWlmIChhbHQgPiAxKQorCQkJZ290byBmYWlsOworCisJCWlmIChvYmV4LT5wb3J0LmluLT5kcml2ZXJfZGF0YSkgeworCQkJREJHKGNkZXYsICJyZXNldCBvYmV4IHR0eUdTJWRcbiIsIG9iZXgtPnBvcnRfbnVtKTsKKwkJCWdzZXJpYWxfZGlzY29ubmVjdCgmb2JleC0+cG9ydCk7CisJCX0KKworCQlpZiAoIW9iZXgtPnBvcnQuaW5fZGVzYykgeworCQkJREJHKGNkZXYsICJpbml0IG9iZXggdHR5R1MlZFxuIiwgb2JleC0+cG9ydF9udW0pOworCQkJb2JleC0+cG9ydC5pbl9kZXNjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCQkJb2JleC0+aHMub2JleF9pbiwgb2JleC0+ZnMub2JleF9pbik7CisJCQlvYmV4LT5wb3J0Lm91dF9kZXNjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCQkJb2JleC0+aHMub2JleF9vdXQsIG9iZXgtPmZzLm9iZXhfb3V0KTsKKwkJfQorCisJCWlmIChhbHQgPT0gMSkgeworCQkJREJHKGNkZXYsICJhY3RpdmF0ZSBvYmV4IHR0eUdTJWRcbiIsIG9iZXgtPnBvcnRfbnVtKTsKKwkJCWdzZXJpYWxfY29ubmVjdCgmb2JleC0+cG9ydCwgb2JleC0+cG9ydF9udW0pOworCQl9CisKKwl9IGVsc2UKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgb2JleF9nZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBmdW5jX3RvX29iZXgoZik7CisKKwlpZiAoaW50ZiA9PSBvYmV4LT5jdHJsX2lkKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBvYmV4LT5wb3J0LmluLT5kcml2ZXJfZGF0YSA/IDEgOiAwOworfQorCitzdGF0aWMgdm9pZCBvYmV4X2Rpc2FibGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9vYmV4CSpvYmV4ID0gZnVuY190b19vYmV4KGYpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKKworCURCRyhjZGV2LCAib2JleCB0dHlHUyVkIGRpc2FibGVcbiIsIG9iZXgtPnBvcnRfbnVtKTsKKwlnc2VyaWFsX2Rpc2Nvbm5lY3QoJm9iZXgtPnBvcnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBvYmV4X2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKmcpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBwb3J0X3RvX29iZXgoZyk7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZy0+ZnVuYy5jb25maWctPmNkZXY7CisJaW50CQkJc3RhdHVzOworCisJaWYgKCFvYmV4LT5jYW5fYWN0aXZhdGUpCisJCXJldHVybjsKKworCXN0YXR1cyA9IHVzYl9mdW5jdGlvbl9hY3RpdmF0ZSgmZy0+ZnVuYyk7CisJaWYgKHN0YXR1cykKKwkJREJHKGNkZXYsICJvYmV4IHR0eUdTJWQgZnVuY3Rpb24gYWN0aXZhdGUgLS0+ICVkXG4iLAorCQkJb2JleC0+cG9ydF9udW0sIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIG9iZXhfZGlzY29ubmVjdChzdHJ1Y3QgZ3NlcmlhbCAqZykKK3sKKwlzdHJ1Y3QgZl9vYmV4CQkqb2JleCA9IHBvcnRfdG9fb2JleChnKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBnLT5mdW5jLmNvbmZpZy0+Y2RldjsKKwlpbnQJCQlzdGF0dXM7CisKKwlpZiAoIW9iZXgtPmNhbl9hY3RpdmF0ZSkKKwkJcmV0dXJuOworCisJc3RhdHVzID0gdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoJmctPmZ1bmMpOworCWlmIChzdGF0dXMpCisJCURCRyhjZGV2LCAib2JleCB0dHlHUyVkIGZ1bmN0aW9uIGRlYWN0aXZhdGUgLS0+ICVkXG4iLAorCQkJb2JleC0+cG9ydF9udW0sIHN0YXR1cyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0CitvYmV4X2JpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGMtPmNkZXY7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBmdW5jX3RvX29iZXgoZik7CisJaW50CQkJc3RhdHVzOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKworCS8qIGFsbG9jYXRlIGluc3RhbmNlLXNwZWNpZmljIGludGVyZmFjZSBJRHMsIGFuZCBwYXRjaCBkZXNjcmlwdG9ycyAqLworCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCW9iZXgtPmN0cmxfaWQgPSBzdGF0dXM7CisKKwlvYmV4X2NvbnRyb2xfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCW9iZXhfY2RjX3VuaW9uX2Rlc2MuYk1hc3RlckludGVyZmFjZTAgPSBzdGF0dXM7CisKKwlzdGF0dXMgPSB1c2JfaW50ZXJmYWNlX2lkKGMsIGYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CisJb2JleC0+ZGF0YV9pZCA9IHN0YXR1czsKKworCW9iZXhfZGF0YV9ub3BfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCW9iZXhfZGF0YV9pbnRmLmJJbnRlcmZhY2VOdW1iZXIgPSBzdGF0dXM7CisJb2JleF9jZGNfdW5pb25fZGVzYy5iU2xhdmVJbnRlcmZhY2UwID0gc3RhdHVzOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJm9iZXhfZnNfZXBfaW5fZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCW9iZXgtPnBvcnQuaW4gPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZvYmV4X2ZzX2VwX291dF9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJb2JleC0+cG9ydC5vdXQgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCWYtPmRlc2NyaXB0b3JzID0gdXNiX2NvcHlfZGVzY3JpcHRvcnMoZnNfZnVuY3Rpb24pOworCisJb2JleC0+ZnMub2JleF9pbiA9IHVzYl9maW5kX2VuZHBvaW50KGZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2ZzX2VwX2luX2Rlc2MpOworCW9iZXgtPmZzLm9iZXhfb3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJm9iZXhfZnNfZXBfb3V0X2Rlc2MpOworCisJLyogc3VwcG9ydCBhbGwgcmVsZXZhbnQgaGFyZHdhcmUgc3BlZWRzLi4uIHdlIGV4cGVjdCB0aGF0IHdoZW4KKwkgKiBoYXJkd2FyZSBpcyBkdWFsIHNwZWVkLCBhbGwgYnVsay1jYXBhYmxlIGVuZHBvaW50cyB3b3JrIGF0CisJICogYm90aCBzcGVlZHMKKwkgKi8KKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7CisKKwkJb2JleF9oc19lcF9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCW9iZXhfZnNfZXBfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQlvYmV4X2hzX2VwX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCW9iZXhfZnNfZXBfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKworCQkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJCWYtPmhzX2Rlc2NyaXB0b3JzID0gdXNiX2NvcHlfZGVzY3JpcHRvcnMoaHNfZnVuY3Rpb24pOworCisJCW9iZXgtPmhzLm9iZXhfaW4gPSB1c2JfZmluZF9lbmRwb2ludChoc19mdW5jdGlvbiwKKwkJCQlmLT5kZXNjcmlwdG9ycywgJm9iZXhfaHNfZXBfaW5fZGVzYyk7CisJCW9iZXgtPmhzLm9iZXhfb3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZnVuY3Rpb24sCisJCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2hzX2VwX291dF9kZXNjKTsKKwl9CisKKwkvKiBBdm9pZCBsZXR0aW5nIHRoaXMgZ2FkZ2V0IGVudW1lcmF0ZSB1bnRpbCB0aGUgdXNlcnNwYWNlCisJICogT0JFWCBzZXJ2ZXIgaXMgYWN0aXZlLgorCSAqLworCXN0YXR1cyA9IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKGYpOworCWlmIChzdGF0dXMgPCAwKQorCQlXQVJOSU5HKGNkZXYsICJvYmV4IHR0eUdTJWQ6IGNhbid0IHByZXZlbnQgZW51bWVyYXRpb24sICVkXG4iLAorCQkJb2JleC0+cG9ydF9udW0sIHN0YXR1cyk7CisJZWxzZQorCQlvYmV4LT5jYW5fYWN0aXZhdGUgPSB0cnVlOworCisKKwlEQkcoY2RldiwgIm9iZXggdHR5R1MlZDogJXMgc3BlZWQgSU4vJXMgT1VULyVzXG4iLAorCQkJb2JleC0+cG9ydF9udW0sCisJCQlnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkgPyAiZHVhbCIgOiAiZnVsbCIsCisJCQlvYmV4LT5wb3J0LmluLT5uYW1lLCBvYmV4LT5wb3J0Lm91dC0+bmFtZSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwkvKiB3ZSBtaWdodCBhcyB3ZWxsIHJlbGVhc2Ugb3VyIGNsYWltcyBvbiBlbmRwb2ludHMgKi8KKwlpZiAob2JleC0+cG9ydC5vdXQpCisJCW9iZXgtPnBvcnQub3V0LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJaWYgKG9iZXgtPnBvcnQuaW4pCisJCW9iZXgtPnBvcnQuaW4tPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCUVSUk9SKGNkZXYsICIlcy8lcDogY2FuJ3QgYmluZCwgZXJyICVkXG4iLCBmLT5uYW1lLCBmLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQKK29iZXhfdW5iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKQorCQl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5oc19kZXNjcmlwdG9ycyk7CisJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCWtmcmVlKGZ1bmNfdG9fb2JleChmKSk7Cit9CisKKy8qIFNvbWUgY29udHJvbGxlcnMgY2FuJ3Qgc3VwcG9ydCBDREMgT0JFWCAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3VwcG9ydF9vYmV4KHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKK3sKKwkvKiBTaW5jZSB0aGUgZmlyc3QgaW50ZXJmYWNlIGlzIGEgTk9QLCB3ZSBjYW4gaWdub3JlIHRoZQorCSAqIGlzc3VlIG9mIG11bHRpLWludGVyZmFjZSBzdXBwb3J0IG9uIG1vc3QgY29udHJvbGxlcnMuCisJICoKKwkgKiBBbHRzZXR0aW5ncyBhcmUgbWFuZGF0b3J5LCBob3dldmVyLi4uCisJICovCisJaWYgKCFnYWRnZXRfc3VwcG9ydHNfYWx0c2V0dGluZ3MoYy0+Y2Rldi0+Z2FkZ2V0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogZXZlcnl0aGluZyBlbHNlIGlzICpwcm9iYWJseSogZmluZSAuLi4gKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBvYmV4X2JpbmRfY29uZmlnIC0gYWRkIGEgQ0RDIE9CRVggZnVuY3Rpb24gdG8gYSBjb25maWd1cmF0aW9uCisgKiBAYzogdGhlIGNvbmZpZ3VyYXRpb24gdG8gc3VwcG9ydCB0aGUgQ0RDIE9CRVggaW5zdGFuY2UKKyAqIEBwb3J0X251bTogL2Rldi90dHlHUyogcG9ydCB0aGlzIGludGVyZmFjZSB3aWxsIHVzZQorICogQ29udGV4dDogc2luZ2xlIHRocmVhZGVkIGR1cmluZyBnYWRnZXQgc2V0dXAKKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIGNhbGxlZCBAZ3NlcmlhbF9zZXR1cCgpIHdpdGggZW5vdWdoIHBvcnRzIHRvCisgKiBoYW5kbGUgYWxsIHRoZSBvbmVzIGl0IGJpbmRzLiAgQ2FsbGVyIGlzIGFsc28gcmVzcG9uc2libGUKKyAqIGZvciBjYWxsaW5nIEBnc2VyaWFsX2NsZWFudXAoKSBiZWZvcmUgbW9kdWxlIHVubG9hZC4KKyAqLworaW50IF9faW5pdCBvYmV4X2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pCit7CisJc3RydWN0IGZfb2JleAkqb2JleDsKKwlpbnQJCXN0YXR1czsKKworCWlmICghY2FuX3N1cHBvcnRfb2JleChjKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBtYXliZSBhbGxvY2F0ZSBkZXZpY2UtZ2xvYmFsIHN0cmluZyBJRHMsIGFuZCBwYXRjaCBkZXNjcmlwdG9ycyAqLworCWlmIChvYmV4X3N0cmluZ19kZWZzW09CRVhfQ1RSTF9JRFhdLmlkID09IDApIHsKKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlvYmV4X3N0cmluZ19kZWZzW09CRVhfQ1RSTF9JRFhdLmlkID0gc3RhdHVzOworCisJCW9iZXhfY29udHJvbF9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisKKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlvYmV4X3N0cmluZ19kZWZzW09CRVhfREFUQV9JRFhdLmlkID0gc3RhdHVzOworCisJCW9iZXhfZGF0YV9ub3BfaW50Zi5pSW50ZXJmYWNlID0KKwkJCW9iZXhfZGF0YV9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisJfQorCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIG5ldyBpbnN0YW5jZSAqLworCW9iZXggPSBremFsbG9jKHNpemVvZiAqb2JleCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmV4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9iZXgtPnBvcnRfbnVtID0gcG9ydF9udW07CisKKwlvYmV4LT5wb3J0LmNvbm5lY3QgPSBvYmV4X2Nvbm5lY3Q7CisJb2JleC0+cG9ydC5kaXNjb25uZWN0ID0gb2JleF9kaXNjb25uZWN0OworCisJb2JleC0+cG9ydC5mdW5jLm5hbWUgPSAib2JleCI7CisJb2JleC0+cG9ydC5mdW5jLnN0cmluZ3MgPSBvYmV4X3N0cmluZ3M7CisJLyogZGVzY3JpcHRvcnMgYXJlIHBlci1pbnN0YW5jZSBjb3BpZXMgKi8KKwlvYmV4LT5wb3J0LmZ1bmMuYmluZCA9IG9iZXhfYmluZDsKKwlvYmV4LT5wb3J0LmZ1bmMudW5iaW5kID0gb2JleF91bmJpbmQ7CisJb2JleC0+cG9ydC5mdW5jLnNldF9hbHQgPSBvYmV4X3NldF9hbHQ7CisJb2JleC0+cG9ydC5mdW5jLmdldF9hbHQgPSBvYmV4X2dldF9hbHQ7CisJb2JleC0+cG9ydC5mdW5jLmRpc2FibGUgPSBvYmV4X2Rpc2FibGU7CisKKwlzdGF0dXMgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZvYmV4LT5wb3J0LmZ1bmMpOworCWlmIChzdGF0dXMpCisJCWtmcmVlKG9iZXgpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworTU9EVUxFX0FVVEhPUigiRmVsaXBlIEJhbGJpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKaW5kZXggZjE4YzNhMS4uZGM4NGQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYwpAQCAtNTUyLDcgKzU1Miw2IEBACiAJLnNldHVwCQk9IHNvdXJjZXNpbmtfc2V0dXAsCiAJLmJDb25maWd1cmF0aW9uVmFsdWUgPSAzLAogCS5ibUF0dHJpYnV0ZXMJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggMGM2MzJkMi4uYzRlNjJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtODUxLDcgKzg1MSw3IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlDT05GSUdfVkFMVUUsCiAJLmlDb25maWd1cmF0aW9uID0JU1RSSU5HX0NPTkZJRywKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyID0JCTEsCS8vIHNlbGYtcG93ZXJlZAorCS5iTWF4UG93ZXIgPQkJQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXIC8gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yCkBAIC0yNjc2LDExICsyNjc2LDI0IEBACiAJLyogVmVyaWZ5IHRoZSBsZW5ndGggb2YgdGhlIGNvbW1hbmQgaXRzZWxmICovCiAJaWYgKGNtbmRfc2l6ZSAhPSBmc2ctPmNtbmRfc2l6ZSkgewogCi0JCS8qIFNwZWNpYWwgY2FzZSB3b3JrYXJvdW5kOiBNUy1XaW5kb3dzIGlzc3VlcyBSRVFVRVNUIFNFTlNFCi0JCSAqIHdpdGggY2J3LT5MZW5ndGggPT0gMTIgKGl0IHNob3VsZCBiZSA2KS4gKi8KLQkJaWYgKGZzZy0+Y21uZFswXSA9PSBTQ19SRVFVRVNUX1NFTlNFICYmIGZzZy0+Y21uZF9zaXplID09IDEyKQorCQkvKiBTcGVjaWFsIGNhc2Ugd29ya2Fyb3VuZDogVGhlcmUgYXJlIHBsZW50eSBvZiBidWdneSBTQ1NJCisJCSAqIGltcGxlbWVudGF0aW9ucy4gTWFueSBoYXZlIGlzc3VlcyB3aXRoIGNidy0+TGVuZ3RoCisJCSAqIGZpZWxkIHBhc3NpbmcgYSB3cm9uZyBjb21tYW5kIHNpemUuIEZvciB0aG9zZSBjYXNlcyB3ZQorCQkgKiBhbHdheXMgdHJ5IHRvIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIGJ5IHVzaW5nIHRoZSBsZW5ndGgKKwkJICogc2VudCBieSB0aGUgaG9zdCBzaWRlIHByb3ZpZGVkIGl0IGlzIGF0IGxlYXN0IGFzIGxhcmdlCisJCSAqIGFzIHRoZSBjb3JyZWN0IGNvbW1hbmQgbGVuZ3RoLgorCQkgKiBFeGFtcGxlcyBvZiBzdWNoIGNhc2VzIHdvdWxkIGJlIE1TLVdpbmRvd3MsIHdoaWNoIGlzc3VlcworCQkgKiBSRVFVRVNUIFNFTlNFIHdpdGggY2J3LT5MZW5ndGggPT0gMTIgd2hlcmUgaXQgc2hvdWxkCisJCSAqIGJlIDYsIGFuZCB4Ym94MzYwIGlzc3VpbmcgSU5RVUlSWSwgVEVTVCBVTklUIFJFQURZIGFuZAorCQkgKiBSRVFVRVNUIFNFTlNFIHdpdGggY2J3LT5MZW5ndGggPT0gMTAgd2hlcmUgaXQgc2hvdWxkCisJCSAqIGJlIDYgYXMgd2VsbC4KKwkJICovCisJCWlmIChjbW5kX3NpemUgPD0gZnNnLT5jbW5kX3NpemUpIHsKKwkJCURCRyhmc2csICIlcyBpcyBidWdneSEgRXhwZWN0ZWQgbGVuZ3RoICVkICIKKwkJCQkJImJ1dCB3ZSBnb3QgJWRcbiIsIG5hbWUsCisJCQkJCWNtbmRfc2l6ZSwgZnNnLT5jbW5kX3NpemUpOwogCQkJY21uZF9zaXplID0gZnNnLT5jbW5kX3NpemU7Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJZnNnLT5waGFzZV9lcnJvciA9IDE7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlOGI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKQEAgLTAsMCArMSwyNzYwIEBACisvKgorICogZHJpdmVyL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAJWGllIFhpYW9ibyA8WC5YaWVAZnJlZXNjYWxlLmNvbT4KKyAqIAlMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgorICogCUJhc2VkIG9uIGJhcmVib2FyZCBjb2RlIGZyb20gU2hsb21pIEdyaWRpc2guCisgKgorICogRGVzY3JpcHRpb246CisgKiBGcmVlc2NsZSBRRS9DUE0gVVNCIFBoZXJpcGhlcmFsIENvbnRyb2xsZXIgRHJpdmVyCisgKiBUaGUgY29udHJvbGxlciBjYW4gYmUgZm91bmQgb24gTVBDODM2MCwgTVBDODI3MiwgYW5kIGV0Yy4KKyAqIE1QQzgzNjAgUmV2IDEuMSBtYXkgbmVlZCBRRSBtaXJjb2NvZGUgdXBkYXRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI3VuZGVmIFVTQl9UUkFDRQorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8YXNtL3FlLmg+CisjaW5jbHVkZSA8YXNtL2NwbS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSAiZnNsX3FlX3VkYy5oIgorCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICAiRnJlZXNjYWxlIFFFL0NQTSBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICAgIlhpZSBYaWFvQm8iCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICAiMS4wIgorCisjZGVmaW5lIERNQV9BRERSX0lOVkFMSUQgICAgICAgICh+KGRtYV9hZGRyX3QpMCkKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJmc2xfcWVfdWRjIjsKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjW10gPSBEUklWRVJfREVTQzsKKworLyplcCBuYW1lIGlzIGltcG9ydGFudCBpbiBnYWRnZXQsIGl0IHNob3VsZCBvYmV5IHRoZSBjb252ZW50aW9uIG9mIGVwX21hdGNoKCkqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVwX25hbWVbXSA9IHsKKwkiZXAwLWNvbnRyb2wiLCAvKiBldmVyeW9uZSBoYXMgZXAwICovCisJLyogMyBjb25maWd1cmFibGUgZW5kcG9pbnRzICovCisJImVwMSIsCisJImVwMiIsCisJImVwMyIsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIHFlX2VwMF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CTAsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAorCS53TWF4UGFja2V0U2l6ZSA9CVVTQl9NQVhfQ1RSTF9QQVlMT0FELAorfTsKKworLyogaXQgaXMgaW5pdGlhbGl6ZWQgaW4gcHJvYmUoKSAgKi8KK3N0YXRpYyBzdHJ1Y3QgcWVfdWRjICp1ZGNfY29udHJvbGxlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgIEludGVybmFsIFVzZWQgRnVuY3Rpb24gU3RhcnQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZG9uZSgpIC0gcmV0aXJlIGEgcmVxdWVzdDsgY2FsbGVyIGJsb2NrZWQgaXJxcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9yZXEgKnJlcSwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCXVuc2lnbmVkIGNoYXIgc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJLyogdGhlIHJlcS0+cXVldWUgcG9pbnRlciBpcyB1c2VkIGJ5IGVwX3F1ZXVlKCkgZnVuYywgaW4gd2hpY2gKKwkgKiB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIGludG8gYSB1ZGNfZXAtPnF1ZXVlICdkIHRhaWwKKwkgKiBzbyBoZXJlIHRoZSByZXEgd2lsbCBiZSBkcm9wcGVkIGZyb20gdGhlIGVwLT5xdWV1ZQorCSAqLworCWxpc3RfZGVsX2luaXQoJnJlcS0+cXVldWUpOworCisJLyogcmVxLnN0YXR1cyBzaG91bGQgYmUgc2V0IGFzIC1FSU5QUk9HUkVTUyBpbiBlcF9xdWV1ZSgpICovCisJaWYgKHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKwllbHNlCisJCXN0YXR1cyA9IHJlcS0+cmVxLnN0YXR1czsKKworCWlmIChyZXEtPm1hcHBlZCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCWVwX2lzX2luKGVwKQorCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCTogRE1BX0ZST01fREVWSUNFKTsKKwkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJcmVxLT5tYXBwZWQgPSAwOworCX0gZWxzZQorCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh1ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQllcF9pc19pbihlcCkKKwkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAoc3RhdHVzICYmIChzdGF0dXMgIT0gLUVTSFVURE9XTikpCisJCWRldl92ZGJnKHVkYy0+ZGV2LCAiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgc3RhdHVzLAorCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCisJLyogdGhpcyBjb21wbGV0ZSgpIHNob3VsZCBhIGZ1bmMgaW1wbGVtZW50ZWQgYnkgZ2FkZ2V0IGxheWVyLAorCSAqIGVnIGZzZy0+YnVsa19pbl9jb21wbGV0ZSgpICovCisJaWYgKHJlcS0+cmVxLmNvbXBsZXRlKQorCQlyZXEtPnJlcS5jb21wbGV0ZSgmZXAtPmVwLCAmcmVxLT5yZXEpOworCisJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBudWtlKCk6IGRlbGV0ZSBhbGwgcmVxdWVzdHMgcmVsYXRlZCB0byB0aGlzIGVwCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIG51a2Uoc3RydWN0IHFlX2VwICplcCwgaW50IHN0YXR1cykKK3sKKwkvKiBXaGV0aGVyIHRoaXMgZXEgaGFzIHJlcXVlc3QgbGlua2VkICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXN0cnVjdCBxZV9yZXEgKnJlcSA9IE5VTEw7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBxZV9yZXEsIHF1ZXVlKTsKKworCQlkb25lKGVwLCByZXEsIHN0YXR1cyk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIFVTQiBhbmQgRW5kcG9pbnQgbWFuaXB1bGF0ZSBwcm9jZXNzLCBpbmNsdWRlIHBhcmFtZXRlciBhbmQgcmVnaXN0ZXIgICAgICAgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQHZhbHVlOiAxLS1zZXQgc3RhbGwgMC0tY2xlYW4gc3RhbGwgKi8KK3N0YXRpYyBpbnQgcWVfZXByeF9zdGFsbF9jaGFuZ2Uoc3RydWN0IHFlX2VwICplcCwgaW50IHZhbHVlKQoreworCXUxNiB0ZW1fdXNlcDsKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJdGVtX3VzZXAgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcG51bV0pOworCXRlbV91c2VwID0gdGVtX3VzZXAgJiB+VVNCX1JIU19NQVNLOworCWlmICh2YWx1ZSA9PSAxKQorCQl0ZW1fdXNlcCB8PSBVU0JfUkhTX1NUQUxMOworCWVsc2UgaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9JTikKKwkJdGVtX3VzZXAgfD0gVVNCX1JIU19JR05PUkVfT1VUOworCisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSwgdGVtX3VzZXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwdHhfc3RhbGxfY2hhbmdlKHN0cnVjdCBxZV9lcCAqZXAsIGludCB2YWx1ZSkKK3sKKwl1MTYgdGVtX3VzZXA7CisJdTggZXBudW0gPSBlcC0+ZXBudW07CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCXRlbV91c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dKTsKKwl0ZW1fdXNlcCA9IHRlbV91c2VwICYgflVTQl9USFNfTUFTSzsKKwlpZiAodmFsdWUgPT0gMSkKKwkJdGVtX3VzZXAgfD0gVVNCX1RIU19TVEFMTDsKKwllbHNlIGlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQl0ZW1fdXNlcCB8PSBVU0JfVEhTX0lHTk9SRV9JTjsKKworCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcG51bV0sIHRlbV91c2VwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwMF9zdGFsbChzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJcWVfZXB0eF9zdGFsbF9jaGFuZ2UoJnVkYy0+ZXBzWzBdLCAxKTsKKwlxZV9lcHJ4X3N0YWxsX2NoYW5nZSgmdWRjLT5lcHNbMF0sIDEpOworCXVkY19jb250cm9sbGVyLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl1ZGNfY29udHJvbGxlci0+ZXAwX2RpciA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXByeF9uYWNrKHN0cnVjdCBxZV9lcCAqZXApCit7CisJdTggZXBudW0gPSBlcC0+ZXBudW07CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCWlmIChlcC0+c3RhdGUgPT0gRVBfU1RBVEVfSURMRSkgeworCQkvKiBTZXQgdGhlIGVwJ3MgbmFjayAqLworCQljbHJzZXRiaXRzX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSwKKwkJCQlVU0JfUkhTX01BU0ssIFVTQl9SSFNfTkFDSyk7CisKKwkJLyogTWFzayBSeCBhbmQgQnVzeSBpbnRlcnJ1cHRzICovCisJCWNscmJpdHMxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLAorCQkJCShVU0JfRV9SWEJfTUFTSyB8IFVTQl9FX0JTWV9NQVNLKSk7CisKKwkJZXAtPnN0YXRlID0gRVBfU1RBVEVfTkFDSzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXByeF9ub3JtYWwoc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJaWYgKGVwLT5zdGF0ZSA9PSBFUF9TVEFURV9OQUNLKSB7CisJCWNscnNldGJpdHNfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXAtPmVwbnVtXSwKKwkJCQlVU0JfUlRIU19NQVNLLCBVU0JfVEhTX0lHTk9SRV9JTik7CisKKwkJLyogVW5tYXNrIFJYIGludGVycnVwdHMgKi8KKwkJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlciwKKwkJCQlVU0JfRV9CU1lfTUFTSyB8IFVTQl9FX1JYQl9NQVNLKTsKKwkJc2V0Yml0czE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIsCisJCQkJKFVTQl9FX1JYQl9NQVNLIHwgVVNCX0VfQlNZX01BU0spKTsKKworCQllcC0+c3RhdGUgPSBFUF9TVEFURV9JRExFOworCQllcC0+aGFzX2RhdGEgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2NtZF9zdG9wdHgoc3RydWN0IHFlX2VwICplcCkKK3sKKwlpZiAoZXAtPnVkYy0+c29jX3R5cGUgPT0gUE9SVF9DUE0pCisJCWNwbV9jb21tYW5kKENQTV9VU0JfU1RPUF9UWCB8IChlcC0+ZXBudW0gPDwgQ1BNX1VTQl9FUF9TSElGVCksCisJCQkJQ1BNX1VTQl9TVE9QX1RYX09QQ09ERSk7CisJZWxzZQorCQlxZV9pc3N1ZV9jbWQoUUVfVVNCX1NUT1BfVFgsIFFFX0NSX1NVQkJMT0NLX1VTQiwKKwkJCQllcC0+ZXBudW0sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfY21kX3Jlc3RhcnR0eChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWlmIChlcC0+dWRjLT5zb2NfdHlwZSA9PSBQT1JUX0NQTSkKKwkJY3BtX2NvbW1hbmQoQ1BNX1VTQl9SRVNUQVJUX1RYIHwgKGVwLT5lcG51bSA8PAorCQkJCUNQTV9VU0JfRVBfU0hJRlQpLCBDUE1fVVNCX1JFU1RBUlRfVFhfT1BDT0RFKTsKKwllbHNlCisJCXFlX2lzc3VlX2NtZChRRV9VU0JfUkVTVEFSVF9UWCwgUUVfQ1JfU1VCQkxPQ0tfVVNCLAorCQkJCWVwLT5lcG51bSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9mbHVzaHR4ZmlmbyhzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisJaW50IGk7CisKKwlpID0gKGludCllcC0+ZXBudW07CisKKwlxZV9lcF9jbWRfc3RvcHR4KGVwKTsKKwlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzY29tLAorCQlVU0JfQ01EX0ZMVVNIX0ZJRk8gfCAoVVNCX0NNRF9FUF9NQVNLICYgKGVwLT5lcG51bSkpKTsKKwlvdXRfYmUxNigmdWRjLT5lcF9wYXJhbVtpXS0+dGJwdHIsIGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1baV0tPnRiYXNlKSk7CisJb3V0X2JlMzIoJnVkYy0+ZXBfcGFyYW1baV0tPnRzdGF0ZSwgMCk7CisJb3V0X2JlMTYoJnVkYy0+ZXBfcGFyYW1baV0tPnRiY250LCAwKTsKKworCWVwLT5jX3R4YmQgPSBlcC0+dHhiYXNlOworCWVwLT5uX3R4YmQgPSBlcC0+dHhiYXNlOworCXFlX2VwX2NtZF9yZXN0YXJ0dHgoZXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2ZpbGx0eGZpZm8oc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJb3V0XzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2NvbSwKKwkJCVVTQl9DTURfU1RSX0ZJRk8gfCAoVVNCX0NNRF9FUF9NQVNLICYgKGVwLT5lcG51bSkpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcGJkc19yZXNldChzdHJ1Y3QgcWVfdWRjICp1ZGMsIGludCBwaXBlX251bSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXUzMiBiZHJpbmdfbGVuOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgaTsKKworCWVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU5fUlg7CisJZWxzZQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU47CisKKwliZCA9IGVwLT5yeGJhc2U7CisJZm9yIChpID0gMDsgaSA8IChiZHJpbmdfbGVuIC0gMSk7IGkrKykgeworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgUl9FIHwgUl9JKTsKKwkJYmQrKzsKKwl9CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFJfRSB8IFJfSSB8IFJfVyk7CisKKwliZCA9IGVwLT50eGJhc2U7CisJZm9yIChpID0gMDsgaSA8IFVTQl9CRFJJTkdfTEVOX1RYIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIDApOworCQliZCsrOworCX0KKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgVF9XKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3Jlc2V0KHN0cnVjdCBxZV91ZGMgKnVkYywgaW50IHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJdTE2IHRtcHVzZXA7CisKKwllcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisJdG1wdXNlcCA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW3BpcGVfbnVtXSk7CisJdG1wdXNlcCAmPSB+VVNCX1JUSFNfTUFTSzsKKworCXN3aXRjaCAoZXAtPmRpcikgeworCWNhc2UgVVNCX0RJUl9CT1RIOgorCQlxZV9lcF9mbHVzaHR4ZmlmbyhlcCk7CisJCWJyZWFrOworCWNhc2UgVVNCX0RJUl9PVVQ6CisJCXRtcHVzZXAgfD0gVVNCX1RIU19JR05PUkVfSU47CisJCWJyZWFrOworCWNhc2UgVVNCX0RJUl9JTjoKKwkJcWVfZXBfZmx1c2h0eGZpZm8oZXApOworCQl0bXB1c2VwIHw9IFVTQl9SSFNfSUdOT1JFX09VVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtwaXBlX251bV0sIHRtcHVzZXApOworCisJcWVfZXBiZHNfcmVzZXQodWRjLCBwaXBlX251bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF90b2dnbGVkYXRhMDEoc3RydWN0IHFlX2VwICplcCkKK3sKKwllcC0+ZGF0YTAxIF49IDB4MTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9iZF9pbml0KHN0cnVjdCBxZV91ZGMgKnVkYywgdW5zaWduZWQgY2hhciBwaXBlX251bSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKwl1bnNpZ25lZCBsb25nIHRtcF9hZGRyID0gMDsKKwlzdHJ1Y3QgdXNiX2VwX3BhcmEgX19pb21lbSAqZXBwYXJhbTsKKwlpbnQgaTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJaW50IGJkcmluZ19sZW47CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOX1JYOworCWVsc2UKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOOworCisJZXBwYXJhbSA9IHVkYy0+ZXBfcGFyYW1bcGlwZV9udW1dOworCS8qIGFsbG9jIG11bHRpLXJhbSBmb3IgQkQgcmluZ3MgYW5kIHNldCB0aGUgZXAgcGFyYW1ldGVycyAqLworCXRtcF9hZGRyID0gY3BtX211cmFtX2FsbG9jKHNpemVvZihzdHJ1Y3QgcWVfYmQpICogKGJkcmluZ19sZW4gKworCQkJCVVTQl9CRFJJTkdfTEVOX1RYKSwgUUVfQUxJR05NRU5UX09GX0JEKTsKKwlvdXRfYmUxNigmZXBwYXJhbS0+cmJhc2UsICh1MTYpdG1wX2FkZHIpOworCW91dF9iZTE2KCZlcHBhcmFtLT50YmFzZSwgKHUxNikodG1wX2FkZHIgKworCQkJCShzaXplb2Yoc3RydWN0IHFlX2JkKSAqIGJkcmluZ19sZW4pKSk7CisKKwlvdXRfYmUxNigmZXBwYXJhbS0+cmJwdHIsIGluX2JlMTYoJmVwcGFyYW0tPnJiYXNlKSk7CisJb3V0X2JlMTYoJmVwcGFyYW0tPnRicHRyLCBpbl9iZTE2KCZlcHBhcmFtLT50YmFzZSkpOworCisJZXAtPnJ4YmFzZSA9IGNwbV9tdXJhbV9hZGRyKHRtcF9hZGRyKTsKKwllcC0+dHhiYXNlID0gY3BtX211cmFtX2FkZHIodG1wX2FkZHIgKyAoc2l6ZW9mKHN0cnVjdCBxZV9iZCkKKwkJCQkqIGJkcmluZ19sZW4pKTsKKwllcC0+bl9yeGJkID0gZXAtPnJ4YmFzZTsKKwllcC0+ZV9yeGJkID0gZXAtPnJ4YmFzZTsKKwllcC0+bl90eGJkID0gZXAtPnR4YmFzZTsKKwllcC0+Y190eGJkID0gZXAtPnR4YmFzZTsKKwllcC0+ZGF0YTAxID0gMDsgLyogZGF0YTAgKi8KKworCS8qIEluaXQgVFggYW5kIFJYIGJkcyAqLworCWJkID0gZXAtPnJ4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgYmRyaW5nX2xlbiAtIDE7IGkrKykgeworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCAwKTsKKwkJYmQrKzsKKwl9CisJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBSX1cpOworCisJYmQgPSBlcC0+dHhiYXNlOworCWZvciAoaSA9IDA7IGkgPCBVU0JfQkRSSU5HX0xFTl9UWCAtIDE7IGkrKykgeworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCAwKTsKKwkJYmQrKzsKKwl9CisJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBUX1cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfcnhiZF91cGRhdGUoc3RydWN0IHFlX2VwICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgdG1wOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1bnNpZ25lZCBpbnQgYmRyaW5nX2xlbjsKKworCWlmIChlcC0+cnhiYXNlID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJYmQgPSBlcC0+cnhiYXNlOworCisJZXAtPnJ4ZnJhbWUgPSBrbWFsbG9jKHNpemVvZigqZXAtPnJ4ZnJhbWUpLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXAtPnJ4ZnJhbWUgPT0gTlVMTCkgeworCQlkZXZfZXJyKGVwLT51ZGMtPmRldiwgIm1hbGxvYyByeGZyYW1lIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXFlX2ZyYW1lX2luaXQoZXAtPnJ4ZnJhbWUpOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTl9SWDsKKwllbHNlCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTjsKKworCXNpemUgPSAoZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSArIDIpICogKGJkcmluZ19sZW4gKyAxKTsKKwllcC0+cnhidWZmZXIgPSBremFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCWlmIChlcC0+cnhidWZmZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKGVwLT51ZGMtPmRldiwgIm1hbGxvYyByeGJ1ZmZlciBmYWlsZWQsc2l6ZT0lZFxuIiwKKwkJCQlzaXplKTsKKwkJa2ZyZWUoZXAtPnJ4ZnJhbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwllcC0+cnhidWZfZCA9IHZpcnRfdG9fcGh5cygodm9pZCAqKWVwLT5yeGJ1ZmZlcik7CisJaWYgKGVwLT5yeGJ1Zl9kID09IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJZXAtPnJ4YnVmX2QgPSBkbWFfbWFwX3NpbmdsZSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCWVwLT5yeGJ1ZmZlciwKKwkJCQkJc2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJZXAtPnJ4YnVmbWFwID0gMTsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQllcC0+cnhidWZtYXAgPSAwOworCX0KKworCXNpemUgPSBlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMjsKKwl0bXAgPSBlcC0+cnhidWZfZDsKKwl0bXAgPSAodTMyKSgoKHRtcCA+PiAyKSA8PCAyKSArIDQpOworCisJZm9yIChpID0gMDsgaSA8IGJkcmluZ19sZW4gLSAxOyBpKyspIHsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIHRtcCk7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCAoUl9FIHwgUl9JKSk7CisJCXRtcCA9IHRtcCArIHNpemU7CisJCWJkKys7CisJfQorCW91dF9iZTMyKCZiZC0+YnVmLCB0bXApOworCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCAoUl9FIHwgUl9JIHwgUl9XKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9yZWdpc3Rlcl9pbml0KHN0cnVjdCBxZV91ZGMgKnVkYywgdW5zaWduZWQgY2hhciBwaXBlX251bSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKwlzdHJ1Y3QgdXNiX2VwX3BhcmEgX19pb21lbSAqZXBwYXJhbTsKKwl1MTYgdXNlcCwgbG9nZXBudW07CisJdTE2IHRtcDsKKwl1OCBydGZjciA9IDA7CisKKwllcHBhcmFtID0gdWRjLT5lcF9wYXJhbVtwaXBlX251bV07CisKKwl1c2VwID0gMDsKKwlsb2dlcG51bSA9IChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJdXNlcCB8PSAobG9nZXBudW0gPDwgVVNCX0VQTlVNX1NISUZUKTsKKworCXN3aXRjaCAoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIDB4MDMpIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCXVzZXAgfD0gVVNCX1RSQU5TX0JVTEs7CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJdXNlcCB8PSAgVVNCX1RSQU5TX0lTTzsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCXVzZXAgfD0gVVNCX1RSQU5TX0lOVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXNlcCB8PSBVU0JfVFJBTlNfQ1RSOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGVwLT5kaXIpIHsKKwljYXNlIFVTQl9ESVJfT1VUOgorCQl1c2VwIHw9IFVTQl9USFNfSUdOT1JFX0lOOworCQlicmVhazsKKwljYXNlIFVTQl9ESVJfSU46CisJCXVzZXAgfD0gVVNCX1JIU19JR05PUkVfT1VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW3BpcGVfbnVtXSwgdXNlcCk7CisKKwlydGZjciA9IDB4MzA7CisJb3V0XzgoJmVwcGFyYW0tPnJibXIsIHJ0ZmNyKTsKKwlvdXRfOCgmZXBwYXJhbS0+dGJtciwgcnRmY3IpOworCisJdG1wID0gKHUxNikoZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSk7CisJLyogTVJCTFIgbXVzdCBiZSBkaXZpc2JsZSBieSA0ICovCisJdG1wID0gKHUxNikoKCh0bXAgPj4gMikgPDwgMikgKyA0KTsKKwlvdXRfYmUxNigmZXBwYXJhbS0+bXJibHIsIHRtcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9pbml0KHN0cnVjdCBxZV91ZGMgKnVkYywKKwkJICAgICAgdW5zaWduZWQgY2hhciBwaXBlX251bSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldmFsID0gMDsKKwl1MTYgbWF4ID0gMDsKKworCW1heCA9IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKworCS8qIGNoZWNrIHRoZSBtYXggcGFja2FnZSBzaXplIHZhbGlkYXRlIGZvciB0aGlzIGVuZHBvaW50ICovCisJLyogUmVmZXIgdG8gVVNCMi4wIHNwZWMgdGFibGUgOS0xMywKKwkqLworCWlmIChwaXBlX251bSAhPSAwKSB7CisJCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQkJaWYgKHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pc28iKQorCQkJCQl8fCBzdHJzdHIoZXAtPmVwLm5hbWUsICItaW50IikpCisJCQkJZ290byBlbl9kb25lOworCQkJc3dpdGNoICh1ZGMtPmdhZGdldC5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCWlmICgobWF4ID09IDEyOCkgfHwgKG1heCA9PSAyNTYpIHx8IChtYXggPT0gNTEyKSkKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3dpdGNoIChtYXgpIHsKKwkJCQljYXNlIDQ6CisJCQkJY2FzZSA4OgorCQkJCWNhc2UgMTY6CisJCQkJY2FzZSAzMjoKKwkJCQljYXNlIDY0OgorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJCQkJZ290byBlbl9kb25lOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItaXNvIikpCS8qIGJ1bGsgaXMgb2sgKi8KKwkJCQlnb3RvIGVuX2RvbmU7CisJCQlzd2l0Y2ggKHVkYy0+Z2FkZ2V0LnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJCWlmIChtYXggPD0gMTAyNCkKKwkJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkJCWlmIChtYXggPD0gNjQpCisJCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAobWF4IDw9IDgpCisJCQkJCWJyZWFrOworCQkJCWdvdG8gZW5fZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCQlpZiAoc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWJ1bGsiKQorCQkJCXx8IHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pbnQiKSkKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQlzd2l0Y2ggKHVkYy0+Z2FkZ2V0LnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJCWlmIChtYXggPD0gMTAyNCkKKwkJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkJCWlmIChtYXggPD0gMTAyMykKKwkJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CisJCQlpZiAoc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWlzbyIpCisJCQkJfHwgc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWludCIpKQorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkJCXN3aXRjaCAobWF4KSB7CisJCQkJY2FzZSAxOgorCQkJCWNhc2UgMjoKKwkJCQljYXNlIDQ6CisJCQkJY2FzZSA4OgorCQkJCWNhc2UgMTY6CisJCQkJY2FzZSAzMjoKKwkJCQljYXNlIDY0OgorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlnb3RvIGVuX2RvbmU7CisJCQkJfQorCQkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCXN3aXRjaCAobWF4KSB7CisJCQkJY2FzZSAxOgorCQkJCWNhc2UgMjoKKwkJCQljYXNlIDQ6CisJCQkJY2FzZSA4OgorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlnb3RvIGVuX2RvbmU7CisJCQkJfQorCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZ290byBlbl9kb25lOworCQl9CisJfSAvKiBpZiBlcDAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogaW5pdGlhbGl6ZSBlcCBzdHJ1Y3R1cmUgKi8KKwllcC0+ZXAubWF4cGFja2V0ID0gbWF4OworCWVwLT50bSA9ICh1OCkoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spOworCWVwLT5kZXNjID0gZGVzYzsKKwllcC0+c3RvcHBlZCA9IDA7CisJZXAtPmluaXQgPSAxOworCisJaWYgKHBpcGVfbnVtID09IDApIHsKKwkJZXAtPmRpciA9IFVTQl9ESVJfQk9USDsKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJfSBlbHNlCXsKKwkJc3dpdGNoIChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSB7CisJCWNhc2UgVVNCX0RJUl9PVVQ6CisJCQllcC0+ZGlyID0gVVNCX0RJUl9PVVQ7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRElSX0lOOgorCQkJZXAtPmRpciA9IFVTQl9ESVJfSU47CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGhhcmR3YXJlIHNwZWNpYWwgb3BlcmF0aW9uICovCisJcWVfZXBfYmRfaW5pdCh1ZGMsIHBpcGVfbnVtKTsKKwlpZiAoKGVwLT50bSA9PSBVU0JQX1RNX0NUTCkgfHwgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpKSB7CisJCXJldmFsID0gcWVfZXBfcnhiZF91cGRhdGUoZXApOworCQlpZiAocmV2YWwpCisJCQlnb3RvIGVuX2RvbmUxOworCX0KKworCWlmICgoZXAtPnRtID09IFVTQlBfVE1fQ1RMKSB8fCAoZXAtPmRpciA9PSBVU0JfRElSX0lOKSkgeworCQllcC0+dHhmcmFtZSA9IGttYWxsb2Moc2l6ZW9mKCplcC0+dHhmcmFtZSksIEdGUF9BVE9NSUMpOworCQlpZiAoZXAtPnR4ZnJhbWUgPT0gTlVMTCkgeworCQkJZGV2X2Vycih1ZGMtPmRldiwgIm1hbGxvYyB0eGZyYW1lIGZhaWxlZFxuIik7CisJCQlnb3RvIGVuX2RvbmUyOworCQl9CisJCXFlX2ZyYW1lX2luaXQoZXAtPnR4ZnJhbWUpOworCX0KKworCXFlX2VwX3JlZ2lzdGVyX2luaXQodWRjLCBwaXBlX251bSk7CisKKwkvKiBOb3cgSFcgd2lsbCBiZSBOQUtpbmcgdHJhbnNmZXJzIHRvIHRoYXQgRVAsCisJICogdW50aWwgYSBidWZmZXIgaXMgcXVldWVkIHRvIGl0LiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Citlbl9kb25lMjoKKwlrZnJlZShlcC0+cnhidWZmZXIpOworCWtmcmVlKGVwLT5yeGZyYW1lKTsKK2VuX2RvbmUxOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworZW5fZG9uZToKKwlkZXZfZGJnKHVkYy0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgJXNcbiIsIGVwLT5lcC5uYW1lKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHFlX3VzYl9lbmFibGUodm9pZCkKK3sKKwlzZXRiaXRzOCgmdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzLT51c2JfdXNtb2QsIFVTQl9NT0RFX0VOKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHFlX3VzYl9kaXNhYmxlKHZvaWQpCit7CisJY2xyYml0czgoJnVkY19jb250cm9sbGVyLT51c2JfcmVncy0+dXNiX3VzbW9kLCBVU0JfTU9ERV9FTik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqCQlVU0IgYW5kIEVQIGJhc2ljIG1hbmlwdWxhdGUgZnVuY3Rpb24gZW5kCQkgICAgICAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJVURDIHRyYW5zbWl0IGFuZCByZWNlaXZlIHByb2Nlc3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCByZWN5Y2xlX29uZV9yeGJkKHN0cnVjdCBxZV9lcCAqZXApCit7CisJdTMyIGJkc3RhdHVzOworCisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWVwLT5lX3J4YmQpOworCWJkc3RhdHVzID0gUl9JIHwgUl9FIHwgKGJkc3RhdHVzICYgUl9XKTsKKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKillcC0+ZV9yeGJkLCBiZHN0YXR1cyk7CisKKwlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCWVwLT5lX3J4YmQgPSBlcC0+cnhiYXNlOworCWVsc2UKKwkJZXAtPmVfcnhiZCsrOworfQorCitzdGF0aWMgdm9pZCByZWN5Y2xlX3J4YmRzKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgc3RvcGF0bmV4dCkKK3sKKwl1MzIgYmRzdGF0dXM7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkLCAqbmV4dGJkOworCXVuc2lnbmVkIGNoYXIgc3RvcCA9IDA7CisKKwluZXh0YmQgPSBlcC0+bl9yeGJkOworCWJkID0gZXAtPmVfcnhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCisJd2hpbGUgKCEoYmRzdGF0dXMgJiBSX0UpICYmICEoYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSykgJiYgIXN0b3ApIHsKKwkJYmRzdGF0dXMgPSBSX0UgfCBSX0kgfCAoYmRzdGF0dXMgJiBSX1cpOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMpOworCisJCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJZWxzZQorCQkJYmQrKzsKKworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQlpZiAoc3RvcGF0bmV4dCAmJiAoYmQgPT0gbmV4dGJkKSkKKwkJCXN0b3AgPSAxOworCX0KKworCWVwLT5lX3J4YmQgPSBiZDsKK30KKworc3RhdGljIHZvaWQgZXBfcmVjeWNsZV9yeGJkcyhzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZCA9IGVwLT5uX3J4YmQ7CisJdTMyIGJkc3RhdHVzOworCXU4IGVwbnVtID0gZXAtPmVwbnVtOworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCWlmICghKGJkc3RhdHVzICYgUl9FKSAmJiAhKGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0spKSB7CisJCWJkID0gZXAtPnJ4YmFzZSArCisJCQkJKChpbl9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2VwbnVtXS0+cmJwdHIpIC0KKwkJCQkgIGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXBudW1dLT5yYmFzZSkpCisJCQkJID4+IDMpOworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCisJCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJZWxzZQorCQkJYmQrKzsKKworCQllcC0+ZV9yeGJkID0gYmQ7CisJCXJlY3ljbGVfcnhiZHMoZXAsIDApOworCQllcC0+ZV9yeGJkID0gZXAtPm5fcnhiZDsKKwl9IGVsc2UKKwkJcmVjeWNsZV9yeGJkcyhlcCwgMSk7CisKKwlpZiAoaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYmVyKSAmIFVTQl9FX0JTWV9NQVNLKQorCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYmVyLCBVU0JfRV9CU1lfTUFTSyk7CisKKwlpZiAoZXAtPmhhc19kYXRhIDw9IDAgJiYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSkKKwkJcWVfZXByeF9ub3JtYWwoZXApOworCisJZXAtPmxvY2FsbmFjayA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3JlY2VpdmVkX2hhbmRsZShzdHJ1Y3QgcWVfdWRjICp1ZGMsCisJCQkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKTsKK3N0YXRpYyBpbnQgcWVfZXBfcnhmcmFtZV9oYW5kbGUoc3RydWN0IHFlX2VwICplcCk7CitzdGF0aWMgdm9pZCBlcDBfcmVxX2NvbXBsZXRlKHN0cnVjdCBxZV91ZGMgKnVkYywgc3RydWN0IHFlX3JlcSAqcmVxKTsKKy8qIHdoZW4gQkQgUElEIGlzIHNldHVwLCBoYW5kbGUgdGhlIHBhY2tldCAqLworc3RhdGljIGludCBlcDBfc2V0dXBfaGFuZGxlKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXVuc2lnbmVkIGludCBmc2l6ZTsKKwl1OCAqY3A7CisKKwlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKwlpZiAoKGZyYW1lX2dldF9pbmZvKHBmcmFtZSkgJiBQSURfU0VUVVApCisJCQkmJiAodWRjLT5lcDBfc3RhdGUgPT0gV0FJVF9GT1JfU0VUVVApKSB7CisJCWZzaXplID0gZnJhbWVfZ2V0X2xlbmd0aChwZnJhbWUpOworCQlpZiAodW5saWtlbHkoZnNpemUgIT0gOCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY3AgPSAodTggKikmdWRjLT5sb2NhbF9zZXR1cF9idWZmOworCQltZW1jcHkoY3AsIHBmcmFtZS0+ZGF0YSwgZnNpemUpOworCQllcC0+ZGF0YTAxID0gMTsKKworCQkvKiBoYW5kbGUgdGhlIHVzYiBjb21tYW5kIGJhc2Ugb24gdGhlIHVzYl9jdHJscmVxdWVzdCAqLworCQlzZXR1cF9yZWNlaXZlZF9oYW5kbGUodWRjLCAmdWRjLT5sb2NhbF9zZXR1cF9idWZmKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHFlX2VwMF9yeChzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1swXTsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTMyIGJkc3RhdHVzLCBsZW5ndGg7CisJdTMyIHZhZGRyOworCisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOKSB7CisJCWRldl9lcnIodWRjLT5kZXYsICJlcDAgbm90IGEgY29udHJvbCBlbmRwb2ludFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJkID0gZXAtPm5fcnhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFJfRSkgJiYgbGVuZ3RoKSB7CisJCWlmICgoYmRzdGF0dXMgJiBSX0YpICYmIChiZHN0YXR1cyAmIFJfTCkKKwkJCSYmICEoYmRzdGF0dXMgJiBSX0VSUk9SKSkgeworCQkJaWYgKGxlbmd0aCA9PSBVU0JfQ1JDX1NJWkUpIHsKKwkJCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQkJCWRldl92ZGJnKHVkYy0+ZGV2LAorCQkJCQkicmVjZWl2ZSBhIFpMUCBpbiBzdGF0dXMgcGhhc2VcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlxZV9mcmFtZV9jbGVhbihwZnJhbWUpOworCQkJCXZhZGRyID0gKHUzMilwaHlzX3RvX3ZpcnQoaW5fYmUzMigmYmQtPmJ1ZikpOworCQkJCWZyYW1lX3NldF9kYXRhKHBmcmFtZSwgKHU4ICopdmFkZHIpOworCQkJCWZyYW1lX3NldF9sZW5ndGgocGZyYW1lLAorCQkJCQkJKGxlbmd0aCAtIFVTQl9DUkNfU0laRSkpOworCQkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9PSyk7CisJCQkJc3dpdGNoIChiZHN0YXR1cyAmIFJfUElEKSB7CisJCQkJY2FzZSBSX1BJRF9TRVRVUDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfU0VUVVApOworCQkJCQlicmVhazsKKwkJCQljYXNlIFJfUElEX0RBVEExOgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEEwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKChiZHN0YXR1cyAmIFJfUElEKSA9PSBSX1BJRF9TRVRVUCkKKwkJCQkJZXAwX3NldHVwX2hhbmRsZSh1ZGMpOworCQkJCWVsc2UKKwkJCQkJcWVfZXBfcnhmcmFtZV9oYW5kbGUoZXApOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X2Vycih1ZGMtPmRldiwgIlRoZSByZWNlaXZlIGZyYW1lIHdpdGggZXJyb3IhXG4iKTsKKwkJfQorCisJCS8qIG5vdGU6IGRvbid0IGNsZWFyIHRoZSByeGJkJ3MgYnVmZmVyIGFkZHJlc3MgKi8KKwkJcmVjeWNsZV9vbmVfcnhiZChlcCk7CisKKwkJLyogR2V0IG5leHQgQkQgKi8KKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisKKwl9CisKKwllcC0+bl9yeGJkID0gYmQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9yeGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXU4IGZyYW1lcGlkID0gMDsKKwl1bnNpZ25lZCBpbnQgZnNpemU7CisJdTggKmNwOworCXN0cnVjdCBxZV9yZXEgKnJlcTsKKworCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCisJaWYgKGZyYW1lX2dldF9pbmZvKHBmcmFtZSkgJiBQSURfREFUQTEpCisJCWZyYW1lcGlkID0gMHgxOworCisJaWYgKGZyYW1lcGlkICE9IGVwLT5kYXRhMDEpIHsKKwkJZGV2X2VycihlcC0+dWRjLT5kZXYsICJ0aGUgZGF0YTAxIGVycm9yIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWZzaXplID0gZnJhbWVfZ2V0X2xlbmd0aChwZnJhbWUpOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAidGhlICVzIGhhdmUgbm8gcmVxdWV1ZSFcbiIsIGVwLT5uYW1lKTsKKwl9IGVsc2UgeworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcWVfcmVxLCBxdWV1ZSk7CisKKwkJY3AgPSAodTggKikocmVxLT5yZXEuYnVmKSArIHJlcS0+cmVxLmFjdHVhbDsKKwkJaWYgKGNwKSB7CisJCQltZW1jcHkoY3AsIHBmcmFtZS0+ZGF0YSwgZnNpemUpOworCQkJcmVxLT5yZXEuYWN0dWFsICs9IGZzaXplOworCQkJaWYgKChmc2l6ZSA8IGVwLT5lcC5tYXhwYWNrZXQpIHx8CisJCQkJCShyZXEtPnJlcS5hY3R1YWwgPj0gcmVxLT5yZXEubGVuZ3RoKSkgeworCQkJCWlmIChlcC0+ZXBudW0gPT0gMCkKKwkJCQkJZXAwX3JlcV9jb21wbGV0ZShlcC0+dWRjLCByZXEpOworCQkJCWVsc2UKKwkJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSAmJiBlcC0+ZXBudW0gIT0gMCkKKwkJCQkJcWVfZXByeF9uYWNrKGVwKTsKKwkJCX0KKwkJfQorCX0KKworCXFlX2VwX3RvZ2dsZWRhdGEwMShlcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXBfcnhfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gKHN0cnVjdCBxZV91ZGMgKilkYXRhOworCXN0cnVjdCBxZV9lcCAqZXA7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJkc3RhdHVzLCBsZW5ndGg7CisJdTMyIHZhZGRyLCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMTsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBpKyspIHsKKwkJZXAgPSAmdWRjLT5lcHNbaV07CisKKwkJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9JTiB8fCBlcC0+ZW5hYmxlX3Rhc2tsZXQgPT0gMCkgeworCQkJZGV2X2RiZyh1ZGMtPmRldiwKKwkJCQkiVGhpcyBpcyBhIHRyYW5zbWl0IGVwIG9yIGRpc2FibGUgdGFza2xldCFcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKwkJYmQgPSBlcC0+bl9yeGJkOworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCisJCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiBsZW5ndGgpIHsKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJcWVfZXByeF9uYWNrKGVwKTsKKwkJCQlkZXZfZGJnKHVkYy0+ZGV2LAorCQkJCQkiVGhlIHJ4ZXAgaGF2ZSBub3JlcSAlZFxuIiwKKwkJCQkJZXAtPmhhc19kYXRhKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKChiZHN0YXR1cyAmIFJfRikgJiYgKGJkc3RhdHVzICYgUl9MKQorCQkJCSYmICEoYmRzdGF0dXMgJiBSX0VSUk9SKSkgeworCQkJCXFlX2ZyYW1lX2NsZWFuKHBmcmFtZSk7CisJCQkJdmFkZHIgPSAodTMyKXBoeXNfdG9fdmlydChpbl9iZTMyKCZiZC0+YnVmKSk7CisJCQkJZnJhbWVfc2V0X2RhdGEocGZyYW1lLCAodTggKil2YWRkcik7CisJCQkJZnJhbWVfc2V0X2xlbmd0aChwZnJhbWUsCisJCQkJCQkobGVuZ3RoIC0gVVNCX0NSQ19TSVpFKSk7CisJCQkJZnJhbWVfc2V0X3N0YXR1cyhwZnJhbWUsIEZSQU1FX09LKTsKKwkJCQlzd2l0Y2ggKGJkc3RhdHVzICYgUl9QSUQpIHsKKwkJCQljYXNlIFJfUElEX0RBVEExOgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUl9QSURfU0VUVVA6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX1NFVFVQKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogaGFuZGxlIHRoZSByeCBmcmFtZSAqLworCQkJCXFlX2VwX3J4ZnJhbWVfaGFuZGxlKGVwKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2Vycih1ZGMtPmRldiwKKwkJCQkJImVycm9yIGluIHJlY2VpdmVkIGZyYW1lXG4iKTsKKwkJCX0KKwkJCS8qIG5vdGU6IGRvbid0IGNsZWFyIHRoZSByeGJkJ3MgYnVmZmVyIGFkZHJlc3MgKi8KKwkJCS8qY2xlYXIgdGhlIGxlbmd0aCAqLworCQkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIGJkc3RhdHVzICYgQkRfU1RBVFVTX01BU0spOworCQkJZXAtPmhhc19kYXRhLS07CisJCQlpZiAoIShlcC0+bG9jYWxuYWNrKSkKKwkJCQlyZWN5Y2xlX29uZV9yeGJkKGVwKTsKKworCQkJLyogR2V0IG5leHQgQkQgKi8KKwkJCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJCQliZCA9IGVwLT5yeGJhc2U7CisJCQllbHNlCisJCQkJYmQrKzsKKworCQkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwkJCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisJCX0KKworCQllcC0+bl9yeGJkID0gYmQ7CisKKwkJaWYgKGVwLT5sb2NhbG5hY2spCisJCQllcF9yZWN5Y2xlX3J4YmRzKGVwKTsKKworCQllcC0+ZW5hYmxlX3Rhc2tsZXQgPSAwOworCX0gLyogZm9yIGk9MSAqLworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfcngoc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXUxNiBzd29mZnMsIHVjb2ZmcywgZW1wdHliZHM7CisKKwl1ZGMgPSBlcC0+dWRjOworCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9JTikgeworCQlkZXZfZXJyKHVkYy0+ZGV2LCAidHJhbnNtaXQgZXAgaW4gcnggZnVuY3Rpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliZCA9IGVwLT5uX3J4YmQ7CisKKwlzd29mZnMgPSAodTE2KShiZCAtIGVwLT5yeGJhc2UpOworCXVjb2ZmcyA9ICh1MTYpKChpbl9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2VwLT5lcG51bV0tPnJicHRyKSAtCisJCQlpbl9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2VwLT5lcG51bV0tPnJiYXNlKSkgPj4gMyk7CisJaWYgKHN3b2ZmcyA8IHVjb2ZmcykKKwkJZW1wdHliZHMgPSBVU0JfQkRSSU5HX0xFTl9SWCAtIHVjb2ZmcyArIHN3b2ZmczsKKwllbHNlCisJCWVtcHR5YmRzID0gc3dvZmZzIC0gdWNvZmZzOworCisJaWYgKGVtcHR5YmRzIDwgTUlOX0VNUFRZX0JEUykgeworCQlxZV9lcHJ4X25hY2soZXApOworCQllcC0+bG9jYWxuYWNrID0gMTsKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICIlZCBlbXB0eSBiZHMsIHNlbmQgTkFDS1xuIiwgZW1wdHliZHMpOworCX0KKwllcC0+aGFzX2RhdGEgPSBVU0JfQkRSSU5HX0xFTl9SWCAtIGVtcHR5YmRzOworCisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJcWVfZXByeF9uYWNrKGVwKTsKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJUaGUgcnhlcCBoYXZlIG5vIHJlcSBxdWV1ZWQgd2l0aCAlZCBCRHNcbiIsCisJCQkJZXAtPmhhc19kYXRhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdGFza2xldF9zY2hlZHVsZSgmdWRjLT5yeF90YXNrbGV0KTsKKwllcC0+ZW5hYmxlX3Rhc2tsZXQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHNlbmQgZGF0YSBmcm9tIGEgZnJhbWUsIG5vIG1hdHRlciB3aGF0IHR4X3JlcSAqLworc3RhdGljIGludCBxZV9lcF90eChzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXUxNiBzYXZldXNibXI7CisJdTMyIGJkc3RhdHVzLCBwaWRtYXNrOworCXUzMiBwYWRkcjsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKSB7CisJCWRldl9lcnIodWRjLT5kZXYsICJyZWNlaXZlIGVwIHBhc3NlZCB0byB0eCBmdW5jdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIERpc2FibGUgdGhlIFR4IGludGVycnVwdCAqLworCXNhdmV1c2JtciA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2Jtcik7CisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JtciwKKwkJCXNhdmV1c2JtciAmIH4oVVNCX0VfVFhCX01BU0sgfCBVU0JfRV9UWEVfTUFTSykpOworCisJYmQgPSBlcC0+bl90eGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisKKwlpZiAoIShiZHN0YXR1cyAmIChUX1IgfCBCRF9MRU5HVEhfTUFTSykpKSB7CisJCWlmIChmcmFtZV9nZXRfbGVuZ3RoKGZyYW1lKSA9PSAwKSB7CisJCQlmcmFtZV9zZXRfZGF0YShmcmFtZSwgdWRjLT5udWxsYnVmKTsKKwkJCWZyYW1lX3NldF9sZW5ndGgoZnJhbWUsIDIpOworCQkJZnJhbWUtPmluZm8gfD0gKFpMUCB8IE5PX0NSQyk7CisJCQlkZXZfdmRiZyh1ZGMtPmRldiwgInRoZSBmcmFtZSBzaXplID0gMFxuIik7CisJCX0KKwkJcGFkZHIgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilmcmFtZS0+ZGF0YSk7CisJCW91dF9iZTMyKCZiZC0+YnVmLCBwYWRkcik7CisJCWJkc3RhdHVzID0gKGJkc3RhdHVzJlRfVyk7CisJCWlmICghKGZyYW1lX2dldF9pbmZvKGZyYW1lKSAmIE5PX0NSQykpCisJCQliZHN0YXR1cyB8PSBUX1IgfCBUX0kgfCBUX0wgfCBUX1RDCisJCQkJCXwgZnJhbWVfZ2V0X2xlbmd0aChmcmFtZSk7CisJCWVsc2UKKwkJCWJkc3RhdHVzIHw9IFRfUiB8IFRfSSB8IFRfTCB8IGZyYW1lX2dldF9sZW5ndGgoZnJhbWUpOworCisJCS8qIGlmIHRoZSBwYWNrZXQgaXMgYSBaTFAgaW4gc3RhdHVzIHBoYXNlICovCisJCWlmICgoZXAtPmVwbnVtID09IDApICYmICh1ZGMtPmVwMF9zdGF0ZSA9PSBEQVRBX1NUQVRFX05FRURfWkxQKSkKKwkJCWVwLT5kYXRhMDEgPSAweDE7CisKKwkJaWYgKGVwLT5kYXRhMDEpIHsKKwkJCXBpZG1hc2sgPSBUX1BJRF9EQVRBMTsKKwkJCWZyYW1lLT5pbmZvIHw9IFBJRF9EQVRBMTsKKwkJfSBlbHNlIHsKKwkJCXBpZG1hc2sgPSBUX1BJRF9EQVRBMDsKKwkJCWZyYW1lLT5pbmZvIHw9IFBJRF9EQVRBMDsKKwkJfQorCQliZHN0YXR1cyB8PSBUX0NORjsKKwkJYmRzdGF0dXMgfD0gcGlkbWFzazsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIGJkc3RhdHVzKTsKKwkJcWVfZXBfZmlsbHR4ZmlmbyhlcCk7CisKKwkJLyogZW5hYmxlIHRoZSBUWCBpbnRlcnJ1cHQgKi8KKwkJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2Jtciwgc2F2ZXVzYm1yKTsKKworCQlxZV9lcF90b2dnbGVkYXRhMDEoZXApOworCQlpZiAoYmRzdGF0dXMgJiBUX1cpCisJCQllcC0+bl90eGJkID0gZXAtPnR4YmFzZTsKKwkJZWxzZQorCQkJZXAtPm5fdHhiZCsrOworCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIsIHNhdmV1c2Jtcik7CisJCWRldl92ZGJnKHVkYy0+ZGV2LCAiVGhlIHR4IGJkIGlzIG5vdCByZWFkeSFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KK30KKworLyogd2hlbiBhIGJkIHdhcyB0cmFuc21pdHRlZCwgdGhlIGZ1bmN0aW9uIGNhbgorICogaGFuZGxlIHRoZSB0eF9yZXEsIG5vdCBpbmNsdWRlIGVwMCAgICAgICAgICAgKi8KK3N0YXRpYyBpbnQgdHhjb21wbGV0ZShzdHJ1Y3QgcWVfZXAgKmVwLCB1bnNpZ25lZCBjaGFyIHJlc3RhcnQpCit7CisJaWYgKGVwLT50eF9yZXEgIT0gTlVMTCkgeworCQlpZiAoIXJlc3RhcnQpIHsKKwkJCWludCBhc2VudCA9IGVwLT5sYXN0OworCQkJZXAtPnNlbnQgKz0gYXNlbnQ7CisJCQllcC0+bGFzdCAtPSBhc2VudDsKKwkJfSBlbHNlIHsKKwkJCWVwLT5sYXN0ID0gMDsKKwkJfQorCisJCS8qIGEgcmVxdWVzdCBhbHJlYWR5IHdlcmUgdHJhbnNtaXR0ZWQgY29tcGxldGVseSAqLworCQlpZiAoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgeworCQkJZXAtPnR4X3JlcS0+cmVxLmFjdHVhbCA9ICh1bnNpZ25lZCBpbnQpZXAtPnNlbnQ7CisJCQlkb25lKGVwLCBlcC0+dHhfcmVxLCAwKTsKKwkJCWVwLT50eF9yZXEgPSBOVUxMOworCQkJZXAtPmxhc3QgPSAwOworCQkJZXAtPnNlbnQgPSAwOworCQl9CisJfQorCisJLyogd2Ugc2hvdWxkIGdhaW4gYSBuZXcgdHhfcmVxIGZvdCB0aGlzIGVuZHBvaW50ICovCisJaWYgKGVwLT50eF9yZXEgPT0gTlVMTCkgeworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCWVwLT50eF9yZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LAlzdHJ1Y3QgcWVfcmVxLAorCQkJCQkJCXF1ZXVlKTsKKwkJCWVwLT5sYXN0ID0gMDsKKwkJCWVwLT5zZW50ID0gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBnaXZlIGEgZnJhbWUgYW5kIGEgdHhfcmVxLCBzZW5kIHNvbWUgZGF0YSAqLworc3RhdGljIGludCBxZV91c2Jfc2VuZGRhdGEoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX2ZyYW1lICpmcmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1OCAqYnVmOworCisJcWVfZnJhbWVfY2xlYW4oZnJhbWUpOworCXNpemUgPSBtaW5fdCh1MzIsIChlcC0+dHhfcmVxLT5yZXEubGVuZ3RoIC0gZXAtPnNlbnQpLAorCQkJCWVwLT5lcC5tYXhwYWNrZXQpOworCWJ1ZiA9ICh1OCAqKWVwLT50eF9yZXEtPnJlcS5idWYgKyBlcC0+c2VudDsKKwlpZiAoYnVmICYmIHNpemUpIHsKKwkJZXAtPmxhc3QgPSBzaXplOworCQlmcmFtZV9zZXRfZGF0YShmcmFtZSwgYnVmKTsKKwkJZnJhbWVfc2V0X2xlbmd0aChmcmFtZSwgc2l6ZSk7CisJCWZyYW1lX3NldF9zdGF0dXMoZnJhbWUsIEZSQU1FX09LKTsKKwkJZnJhbWVfc2V0X2luZm8oZnJhbWUsIDApOworCQlyZXR1cm4gcWVfZXBfdHgoZXAsIGZyYW1lKTsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisKKy8qIGdpdmUgYSBmcmFtZSBzdHJ1Y3Qsc2VuZCBhIFpMUCAqLworc3RhdGljIGludCBzZW5kbnVsbGRhdGEoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX2ZyYW1lICpmcmFtZSwgdWludCBpbmZvcikKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJaWYgKGZyYW1lID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJcWVfZnJhbWVfY2xlYW4oZnJhbWUpOworCWZyYW1lX3NldF9kYXRhKGZyYW1lLCAodTggKil1ZGMtPm51bGxidWYpOworCWZyYW1lX3NldF9sZW5ndGgoZnJhbWUsIDIpOworCWZyYW1lX3NldF9zdGF0dXMoZnJhbWUsIEZSQU1FX09LKTsKKwlmcmFtZV9zZXRfaW5mbyhmcmFtZSwgKFpMUCB8IE5PX0NSQyB8IGluZm9yKSk7CisKKwlyZXR1cm4gcWVfZXBfdHgoZXAsIGZyYW1lKTsKK30KKworc3RhdGljIGludCBmcmFtZV9jcmVhdGVfdHgoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX2ZyYW1lICpmcmFtZSkKK3sKKwlzdHJ1Y3QgcWVfcmVxICpyZXEgPSBlcC0+dHhfcmVxOworCWludCByZXZhbDsKKworCWlmIChyZXEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKHJlcS0+cmVxLmxlbmd0aCAtIGVwLT5zZW50KSA+IDApCisJCXJldmFsID0gcWVfdXNiX3NlbmRkYXRhKGVwLCBmcmFtZSk7CisJZWxzZQorCQlyZXZhbCA9IHNlbmRudWxsZGF0YShlcCwgZnJhbWUsIDApOworCisJcmV0dXJuIHJldmFsOworfQorCisvKiBpZiBkaXJlY3Rpb24gaXMgRElSX0lOLCB0aGUgc3RhdHVzIGlzIERldmljZS0+SG9zdAorICogaWYgZGlyZWN0aW9uIGlzIERJUl9PVVQsIHRoZSBzdGF0dXMgdHJhbnNhY3Rpb24gaXMgRGV2aWNlPC1Ib3N0CisgKiBpbiBzdGF0dXMgcGhhc2UsIHVkYyBjcmVhdGUgYSByZXF1ZXN0IGFuZCBnYWluIHN0YXR1cyAqLworc3RhdGljIGludCBlcDBfcHJpbWVfc3RhdHVzKHN0cnVjdCBxZV91ZGMgKnVkYywgaW50IGRpcmVjdGlvbikKK3sKKworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbMF07CisKKwlpZiAoZGlyZWN0aW9uID09IFVTQl9ESVJfSU4pIHsKKwkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX05FRURfWkxQOworCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX0lOOworCQlzZW5kbnVsbGRhdGEoZXAsIGVwLT50eGZyYW1lLCBTRVRVUF9TVEFUVVMgfCBOT19SRVEpOworCX0gZWxzZSB7CisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX09VVF9TVEFUVVM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGEgcmVxdWVzdCBjb21wbGV0ZSBpbiBlcDAsIHdoZXRoZXIgZ2FkZ2V0IHJlcXVlc3Qgb3IgdWRjIHJlcXVlc3QgKi8KK3N0YXRpYyB2b2lkIGVwMF9yZXFfY29tcGxldGUoc3RydWN0IHFlX3VkYyAqdWRjLCBzdHJ1Y3QgcWVfcmVxICpyZXEpCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1swXTsKKwkvKiBiZWNhdXNlIHVzYiBhbmQgZXAncyBzdGF0dXMgYWxyZWFkeSBiZWVuIHNldCBpbiBjaDlzZXRhZGRyZXNzKCkgKi8KKworCXN3aXRjaCAodWRjLT5lcDBfc3RhdGUpIHsKKwljYXNlIERBVEFfU1RBVEVfWE1JVDoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJLyogcmVjZWl2ZSBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKGVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX09VVCkpCisJCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJYnJlYWs7CisKKwljYXNlIERBVEFfU1RBVEVfTkVFRF9aTFA6CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCWJyZWFrOworCisJY2FzZSBEQVRBX1NUQVRFX1JFQ1Y6CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCS8qIHNlbmQgc3RhdHVzIHBoYXNlICovCisJCWlmIChlcDBfcHJpbWVfc3RhdHVzKHVkYywgVVNCX0RJUl9JTikpCisJCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJYnJlYWs7CisKKwljYXNlIFdBSVRfRk9SX09VVF9TVEFUVVM6CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCWJyZWFrOworCisJY2FzZSBXQUlUX0ZPUl9TRVRVUDoKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJVbmV4cGVjdGVkIGludGVycnVwdFxuIik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcWVfZXAwX3N0YWxsKHVkYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBlcDBfdHhjb21wbGV0ZShzdHJ1Y3QgcWVfZXAgKmVwLCB1bnNpZ25lZCBjaGFyIHJlc3RhcnQpCit7CisJc3RydWN0IHFlX3JlcSAqdHhfcmVxID0gTlVMTDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lID0gZXAtPnR4ZnJhbWU7CisKKwlpZiAoKGZyYW1lX2dldF9pbmZvKGZyYW1lKSAmIChaTFAgfCBOT19SRVEpKSA9PSAoWkxQIHwgTk9fUkVRKSkgeworCQlpZiAoIXJlc3RhcnQpCisJCQllcC0+dWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJZWxzZQorCQkJc2VuZG51bGxkYXRhKGVwLCBlcC0+dHhmcmFtZSwgU0VUVVBfU1RBVFVTIHwgTk9fUkVRKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdHhfcmVxID0gZXAtPnR4X3JlcTsKKwlpZiAodHhfcmVxICE9IE5VTEwpIHsKKwkJaWYgKCFyZXN0YXJ0KSB7CisJCQlpbnQgYXNlbnQgPSBlcC0+bGFzdDsKKwkJCWVwLT5zZW50ICs9IGFzZW50OworCQkJZXAtPmxhc3QgLT0gYXNlbnQ7CisJCX0gZWxzZSB7CisJCQllcC0+bGFzdCA9IDA7CisJCX0KKworCQkvKiBhIHJlcXVlc3QgYWxyZWFkeSB3ZXJlIHRyYW5zbWl0dGVkIGNvbXBsZXRlbHkgKi8KKwkJaWYgKChlcC0+dHhfcmVxLT5yZXEubGVuZ3RoIC0gZXAtPnNlbnQpIDw9IDApIHsKKwkJCWVwLT50eF9yZXEtPnJlcS5hY3R1YWwgPSAodW5zaWduZWQgaW50KWVwLT5zZW50OworCQkJZXAwX3JlcV9jb21wbGV0ZShlcC0+dWRjLCBlcC0+dHhfcmVxKTsKKwkJCWVwLT50eF9yZXEgPSBOVUxMOworCQkJZXAtPmxhc3QgPSAwOworCQkJZXAtPnNlbnQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X3ZkYmcoZXAtPnVkYy0+ZGV2LCAidGhlIGVwMF9jb250cm9sbGVyIGhhdmUgbm8gcmVxXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcDBfdHhmcmFtZV9oYW5kbGUoc3RydWN0IHFlX2VwICplcCkKK3sKKwkvKiBpZiBoYXZlIGVycm9yLCB0cmFuc21pdCBhZ2FpbiAqLworCWlmIChmcmFtZV9nZXRfc3RhdHVzKGVwLT50eGZyYW1lKSAmIEZSQU1FX0VSUk9SKSB7CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJZGV2X3ZkYmcoZXAtPnVkYy0+ZGV2LCAiVGhlIEVQMCB0cmFuc21pdCBkYXRhIGhhdmUgZXJyb3IhXG4iKTsKKwkJaWYgKGZyYW1lX2dldF9pbmZvKGVwLT50eGZyYW1lKSAmIFBJRF9EQVRBMCkKKwkJCWVwLT5kYXRhMDEgPSAwOworCQllbHNlCisJCQllcC0+ZGF0YTAxID0gMTsKKworCQllcDBfdHhjb21wbGV0ZShlcCwgMSk7CisJfSBlbHNlCisJCWVwMF90eGNvbXBsZXRlKGVwLCAwKTsKKworCWZyYW1lX2NyZWF0ZV90eChlcCwgZXAtPnR4ZnJhbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwMF90eGNvbmYoc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJdTMyIGJkc3RhdHVzOworCisJYmQgPSBlcC0+Y190eGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJd2hpbGUgKCEoYmRzdGF0dXMgJiBUX1IpICYmIChiZHN0YXR1cyAmIH5UX1cpKSB7CisJCXBmcmFtZSA9IGVwLT50eGZyYW1lOworCisJCS8qIGNsZWFyIGFuZCByZWN5Y2xlIHRoZSBCRCAqLworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMgJiBUX1cpOworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJCWlmIChiZHN0YXR1cyAmIFRfVykKKwkJCWVwLT5jX3R4YmQgPSBlcC0+dHhiYXNlOworCQllbHNlCisJCQllcC0+Y190eGJkKys7CisKKwkJaWYgKGVwLT5jX3R4YmQgPT0gZXAtPm5fdHhiZCkgeworCQkJaWYgKGJkc3RhdHVzICYgREVWSUNFX1RfRVJST1IpIHsKKwkJCQlmcmFtZV9zZXRfc3RhdHVzKHBmcmFtZSwgRlJBTUVfRVJST1IpOworCQkJCWlmIChiZHN0YXR1cyAmIFRfVE8pCisJCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1RJTUVPVVQ7CisJCQkJaWYgKGJkc3RhdHVzICYgVF9VTikKKwkJCQkJcGZyYW1lLT5zdGF0dXMgfD0gVFhfRVJfVU5ERVJVTjsKKwkJCX0KKwkJCWVwMF90eGZyYW1lX2hhbmRsZShlcCk7CisJCX0KKworCQliZCA9IGVwLT5jX3R4YmQ7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXBfdHhmcmFtZV9oYW5kbGUoc3RydWN0IHFlX2VwICplcCkKK3sKKwlpZiAoZnJhbWVfZ2V0X3N0YXR1cyhlcC0+dHhmcmFtZSkgJiBGUkFNRV9FUlJPUikgeworCQlxZV9lcF9mbHVzaHR4ZmlmbyhlcCk7CisJCWRldl92ZGJnKGVwLT51ZGMtPmRldiwgIlRoZSBFUDAgdHJhbnNtaXQgZGF0YSBoYXZlIGVycm9yIVxuIik7CisJCWlmIChmcmFtZV9nZXRfaW5mbyhlcC0+dHhmcmFtZSkgJiBQSURfREFUQTApCisJCQllcC0+ZGF0YTAxID0gMDsKKwkJZWxzZQorCQkJZXAtPmRhdGEwMSA9IDE7CisKKwkJdHhjb21wbGV0ZShlcCwgMSk7CisJfSBlbHNlCisJCXR4Y29tcGxldGUoZXAsIDApOworCisJZnJhbWVfY3JlYXRlX3R4KGVwLCBlcC0+dHhmcmFtZSk7IC8qIHNlbmQgdGhlIGRhdGEgKi8KKwlyZXR1cm4gMDsKK30KKworLyogY29uZmlybSB0aGUgYWxyZWFkeSB0cmFpbnNtaXRlZCBiZCAqLworc3RhdGljIGludCBxZV9lcF90eGNvbmYoc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWUgPSBOVUxMOworCXUzMiBiZHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyIGJyZWFrb25yeGludGVycnVwdCA9IDA7CisKKwliZCA9IGVwLT5jX3R4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFRfUikgJiYgKGJkc3RhdHVzICYgflRfVykpIHsKKwkJcGZyYW1lID0gZXAtPnR4ZnJhbWU7CisJCWlmIChiZHN0YXR1cyAmIERFVklDRV9UX0VSUk9SKSB7CisJCQlmcmFtZV9zZXRfc3RhdHVzKHBmcmFtZSwgRlJBTUVfRVJST1IpOworCQkJaWYgKGJkc3RhdHVzICYgVF9UTykKKwkJCQlwZnJhbWUtPnN0YXR1cyB8PSBUWF9FUl9USU1FT1VUOworCQkJaWYgKGJkc3RhdHVzICYgVF9VTikKKwkJCQlwZnJhbWUtPnN0YXR1cyB8PSBUWF9FUl9VTkRFUlVOOworCQl9CisKKwkJLyogY2xlYXIgYW5kIHJlY3ljbGUgdGhlIEJEICovCisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyAmIFRfVyk7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJaWYgKGJkc3RhdHVzICYgVF9XKQorCQkJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJCWVsc2UKKwkJCWVwLT5jX3R4YmQrKzsKKworCQkvKiBoYW5kbGUgdGhlIHR4IGZyYW1lICovCisJCWVwX3R4ZnJhbWVfaGFuZGxlKGVwKTsKKwkJYmQgPSBlcC0+Y190eGJkOworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCX0KKwlpZiAoYnJlYWtvbnJ4aW50ZXJydXB0KQorCQlyZXR1cm4gLUVJTzsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKiBBZGQgYSByZXF1ZXN0IGluIHF1ZXVlLCBhbmQgdHJ5IHRvIHRyYW5zbWl0IGEgcGFja2V0ICovCitzdGF0aWMgaW50IGVwX3JlcV9zZW5kKHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlpbnQgcmV2YWwgPSAwOworCisJaWYgKGVwLT50eF9yZXEgPT0gTlVMTCkgeworCQllcC0+c2VudCA9IDA7CisJCWVwLT5sYXN0ID0gMDsKKwkJdHhjb21wbGV0ZShlcCwgMCk7IC8qIGNhbiBnYWluIGEgbmV3IHR4X3JlcSAqLworCQlyZXZhbCA9IGZyYW1lX2NyZWF0ZV90eChlcCwgZXAtPnR4ZnJhbWUpOworCX0KKwlyZXR1cm4gcmV2YWw7Cit9CisKKy8qIE1heWJlIHRoaXMgaXMgYSBnb29kIGlkZWFsICovCitzdGF0aWMgaW50IGVwX3JlcV9yeChzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfcmVxICpyZXEpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZSA9IE5VTEw7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXUzMiBiZHN0YXR1cywgbGVuZ3RoOworCXUzMiB2YWRkciwgZnNpemU7CisJdTggKmNwOworCXU4IGZpbmlzaF9yZXEgPSAwOworCXU4IGZyYW1lcGlkOworCisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJ0aGUgcmVxIGFscmVhZHkgZmluaXNoIVxuIik7CisJCXJldHVybiAwOworCX0KKwlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKworCWJkID0gZXAtPm5fcnhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFJfRSkgJiYgbGVuZ3RoKSB7CisJCWlmIChmaW5pc2hfcmVxKQorCQkJYnJlYWs7CisJCWlmICgoYmRzdGF0dXMgJiBSX0YpICYmIChiZHN0YXR1cyAmIFJfTCkKKwkJCQkJJiYgIShiZHN0YXR1cyAmIFJfRVJST1IpKSB7CisJCQlxZV9mcmFtZV9jbGVhbihwZnJhbWUpOworCQkJdmFkZHIgPSAodTMyKXBoeXNfdG9fdmlydChpbl9iZTMyKCZiZC0+YnVmKSk7CisJCQlmcmFtZV9zZXRfZGF0YShwZnJhbWUsICh1OCAqKXZhZGRyKTsKKwkJCWZyYW1lX3NldF9sZW5ndGgocGZyYW1lLCAobGVuZ3RoIC0gVVNCX0NSQ19TSVpFKSk7CisJCQlmcmFtZV9zZXRfc3RhdHVzKHBmcmFtZSwgRlJBTUVfT0spOworCQkJc3dpdGNoIChiZHN0YXR1cyAmIFJfUElEKSB7CisJCQljYXNlIFJfUElEX0RBVEExOgorCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEExKTsgYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEEwKTsgYnJlYWs7CisJCQl9CisJCQkvKiBoYW5kbGUgdGhlIHJ4IGZyYW1lICovCisKKwkJCWlmIChmcmFtZV9nZXRfaW5mbyhwZnJhbWUpICYgUElEX0RBVEExKQorCQkJCWZyYW1lcGlkID0gMHgxOworCQkJZWxzZQorCQkJCWZyYW1lcGlkID0gMDsKKworCQkJaWYgKGZyYW1lcGlkICE9IGVwLT5kYXRhMDEpIHsKKwkJCQlkZXZfdmRiZyh1ZGMtPmRldiwgInRoZSBkYXRhMDEgZXJyb3IhXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJZnNpemUgPSBmcmFtZV9nZXRfbGVuZ3RoKHBmcmFtZSk7CisKKwkJCQljcCA9ICh1OCAqKShyZXEtPnJlcS5idWYpICsgcmVxLT5yZXEuYWN0dWFsOworCQkJCWlmIChjcCkgeworCQkJCQltZW1jcHkoY3AsIHBmcmFtZS0+ZGF0YSwgZnNpemUpOworCQkJCQlyZXEtPnJlcS5hY3R1YWwgKz0gZnNpemU7CisJCQkJCWlmICgoZnNpemUgPCBlcC0+ZXAubWF4cGFja2V0KQorCQkJCQkJfHwgKHJlcS0+cmVxLmFjdHVhbCA+PQorCQkJCQkJCXJlcS0+cmVxLmxlbmd0aCkpIHsKKwkJCQkJCWZpbmlzaF9yZXEgPSAxOworCQkJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJCQkJCXFlX2VwcnhfbmFjayhlcCk7CisJCQkJCX0KKwkJCQl9CisJCQkJcWVfZXBfdG9nZ2xlZGF0YTAxKGVwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIodWRjLT5kZXYsICJUaGUgcmVjZWl2ZSBmcmFtZSB3aXRoIGVycm9yIVxuIik7CisJCX0KKworCQkvKiBub3RlOiBkb24ndCBjbGVhciB0aGUgcnhiZCdzIGJ1ZmZlciBhZGRyZXNzICoKKwkJICogb25seSBDbGVhciB0aGUgbGVuZ3RoICovCisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCAoYmRzdGF0dXMgJiBCRF9TVEFUVVNfTUFTSykpOworCQllcC0+aGFzX2RhdGEtLTsKKworCQkvKiBHZXQgbmV4dCBCRCAqLworCQlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCQliZCA9IGVwLT5yeGJhc2U7CisJCWVsc2UKKwkJCWJkKys7CisKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKwl9CisKKwllcC0+bl9yeGJkID0gYmQ7CisJZXBfcmVjeWNsZV9yeGJkcyhlcCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogb25seSBhZGQgdGhlIHJlcXVlc3QgaW4gcXVldWUgKi8KK3N0YXRpYyBpbnQgZXBfcmVxX3JlY2VpdmUoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxKQoreworCWlmIChlcC0+c3RhdGUgPT0gRVBfU1RBVEVfTkFDSykgeworCQlpZiAoZXAtPmhhc19kYXRhIDw9IDApIHsKKwkJCS8qIEVuYWJsZSByeCBhbmQgdW5tYXNrIHJ4IGludGVycnVwdCAqLworCQkJcWVfZXByeF9ub3JtYWwoZXApOworCQl9IGVsc2UgeworCQkJLyogQ29weSB0aGUgZXhpc3QgQkQgZGF0YSAqLworCQkJZXBfcmVxX3J4KGVwLCByZXEpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCUludGVybmFsIFVzZWQgRnVuY3Rpb24gRW5kCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUVuZHBvaW50IE1hbmFnZW1lbnQgRnVuY3Rpb25zIEZvciBHYWRnZXQKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHFlX2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXAsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGNoYXIgZXBudW07CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCisJLyogY2F0Y2ggdmFyaW91cyBib2d1cyBwYXJhbWV0ZXJzICovCisJaWYgKCFfZXAgfHwgIWRlc2MgfHwgZXAtPmRlc2MgfHwgX2VwLT5uYW1lID09IGVwX25hbWVbMF0gfHwKKwkJCShkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1ZGMgPSBlcC0+dWRjOworCWlmICghdWRjLT5kcml2ZXIgfHwgKHVkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwllcG51bSA9ICh1OClkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgMHhGOworCisJcmV0dmFsID0gcWVfZXBfaW5pdCh1ZGMsIGVwbnVtLCBkZXNjKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+cnhiYXNlKSk7CisJCWRldl9kYmcodWRjLT5kZXYsICJlbmFibGUgZXAlZCBmYWlsZWRcbiIsIGVwLT5lcG51bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfZGJnKHVkYy0+ZGV2LCAiZW5hYmxlIGVwJWQgc3VjY2Vzc2Z1bFxuIiwgZXAtPmVwbnVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBzaXplOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwl1ZGMgPSBlcC0+dWRjOworCisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjKSB7CisJCWRldl9kYmcodWRjLT5kZXYsICIlcyBub3QgZW5hYmxlZFxuIiwgX2VwID8gZXAtPmVwLm5hbWUgOiBOVUxMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCS8qIE51a2UgYWxsIHBlbmRpbmcgcmVxdWVzdHMgKGRvZXMgZmx1c2gpICovCisJbnVrZShlcCwgLUVTSFVURE9XTik7CisJZXAtPmRlc2MgPSBOVUxMOworCWVwLT5zdG9wcGVkID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQoZXAtPnJ4YmFzZSkpOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCXNpemUgPSAoZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSArIDIpICoKKwkJCQkoVVNCX0JEUklOR19MRU5fUlggKyAxKTsKKwllbHNlCisJCXNpemUgPSAoZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSArIDIpICoKKwkJCQkoVVNCX0JEUklOR19MRU4gKyAxKTsKKworCWlmIChlcC0+ZGlyICE9IFVTQl9ESVJfSU4pIHsKKwkJa2ZyZWUoZXAtPnJ4ZnJhbWUpOworCQlpZiAoZXAtPnJ4YnVmbWFwKSB7CisJCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmX2QsIHNpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCQllcC0+cnhidWZfZCA9IERNQV9BRERSX0lOVkFMSUQ7CisJCX0gZWxzZSB7CisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgKKwkJCQkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJfQorCQlrZnJlZShlcC0+cnhidWZmZXIpOworCX0KKworCWlmIChlcC0+ZGlyICE9IFVTQl9ESVJfT1VUKQorCQlrZnJlZShlcC0+dHhmcmFtZSk7CisKKwlkZXZfZGJnKHVkYy0+ZGV2LCAiZGlzYWJsZWQgJXMgT0tcbiIsIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnFlX2FsbG9jX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqX2VwLAlnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCisJcmVxID0ga3phbGxvYyhzaXplb2YoKnJlcSksIGdmcF9mbGFncyk7CisJaWYgKCFyZXEpCisJCXJldHVybiBOVUxMOworCisJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKworCUlOSVRfTElTVF9IRUFEKCZyZXEtPnF1ZXVlKTsKKworCXJldHVybiAmcmVxLT5yZXE7Cit9CisKK3N0YXRpYyB2b2lkIHFlX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisKKwlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHFlX3JlcSwgcmVxKTsKKworCWlmIChfcmVxKQorCQlrZnJlZShyZXEpOworfQorCisvKiBxdWV1ZXMgKHN1Ym1pdHMpIGFuIEkvTyByZXF1ZXN0IHRvIGFuIGVuZHBvaW50ICovCitzdGF0aWMgaW50IHFlX2VwX3F1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxLAorCQkJCWdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHFlX2VwLCBlcCk7CisJc3RydWN0IHFlX3JlcSAqcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBxZV9yZXEsIHJlcSk7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldmFsOworCisJdWRjID0gZXAtPnVkYzsKKwkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KKwlpZiAoIV9yZXEgfHwgIXJlcS0+cmVxLmNvbXBsZXRlIHx8ICFyZXEtPnJlcS5idWYKKwkJCXx8ICFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkgeworCQlkZXZfZGJnKHVkYy0+ZGV2LCAiYmFkIHBhcmFtc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwX2luZGV4KGVwKSkpIHsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgImJhZCBlcFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghdWRjLT5kcml2ZXIgfHwgdWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRVNIVVRET1dOOworCisJcmVxLT5lcCA9IGVwOworCisJLyogbWFwIHZpcnR1YWwgYWRkcmVzcyB0byBoYXJkd2FyZSAqLworCWlmIChyZXEtPnJlcS5kbWEgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQlyZXEtPnJlcS5kbWEgPSBkbWFfbWFwX3NpbmdsZShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJcmVxLT5yZXEuYnVmLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsCisJCQkJCWVwX2lzX2luKGVwKQorCQkJCQk/IERNQV9UT19ERVZJQ0UgOgorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDE7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZXAtPnVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJCQllcF9pc19pbihlcCkKKwkJCQkJPyBETUFfVE9fREVWSUNFIDoKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJcmVxLT5tYXBwZWQgPSAwOworCX0KKworCXJlcS0+cmVxLnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlyZXEtPnJlcS5hY3R1YWwgPSAwOworCisJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CisJZGV2X3ZkYmcodWRjLT5kZXYsICJnYWRnZXQgaGF2ZSByZXF1ZXN0IGluICVzISAlZFxuIiwKKwkJCWVwLT5uYW1lLCByZXEtPnJlcS5sZW5ndGgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwkvKiBwdXNoIHRoZSByZXF1ZXN0IHRvIGRldmljZSAqLworCWlmIChlcF9pc19pbihlcCkpCisJCXJldmFsID0gZXBfcmVxX3NlbmQoZXAsIHJlcSk7CisKKwkvKiBFUDAgKi8KKwlpZiAoZXBfaW5kZXgoZXApID09IDAgJiYgcmVxLT5yZXEubGVuZ3RoID4gMCkgeworCQlpZiAoZXBfaXNfaW4oZXApKQorCQkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1hNSVQ7CisJCWVsc2UKKwkJCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9SRUNWOworCX0KKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQlyZXZhbCA9IGVwX3JlcV9yZWNlaXZlKGVwLCByZXEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZGVxdWV1ZXMgKGNhbmNlbHMsIHVubGlua3MpIGFuIEkvTyByZXF1ZXN0IGZyb20gYW4gZW5kcG9pbnQgKi8KK3N0YXRpYyBpbnQgcWVfZXBfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHFlX2VwLCBlcCk7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIV9lcCB8fCAhX3JlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCZyZXEtPnJlcSAhPSBfcmVxKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG1vZGlmeSB0aGUgZW5kcG9pbnQgaGFsdCBmZWF0dXJlCisgKiBAZXA6IHRoZSBub24taXNvY2hyb25vdXMgZW5kcG9pbnQgYmVpbmcgc3RhbGxlZAorICogQHZhbHVlOiAxLS1zZXQgaGFsdCAgMC0tY2xlYXIgaGFsdAorICogUmV0dXJucyB6ZXJvLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHFlX2VwX3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJdWRjID0gZXAtPnVkYzsKKwkvKiBBdHRlbXB0IHRvIGhhbHQgSU4gZXAgd2lsbCBmYWlsIGlmIGFueSB0cmFuc2ZlciByZXF1ZXN0cworCSAqIGFyZSBzdGlsbCBxdWV1ZSAqLworCWlmICh2YWx1ZSAmJiBlcF9pc19pbihlcCkgJiYgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJc3RhdHVzID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJc3RhdHVzID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCXFlX2VwdHhfc3RhbGxfY2hhbmdlKGVwLCB2YWx1ZSk7CisJcWVfZXByeF9zdGFsbF9jaGFuZ2UoZXAsIHZhbHVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXAtPmVwbnVtID09IDApIHsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJdWRjLT5lcDBfZGlyID0gMDsKKwl9CisKKwkvKiBzZXQgZGF0YSB0b2dnbGUgdG8gREFUQTAgb24gY2xlYXIgaGFsdCAqLworCWlmICh2YWx1ZSA9PSAwKQorCQllcC0+ZGF0YTAxID0gMDsKK291dDoKKwlkZXZfdmRiZyh1ZGMtPmRldiwgIiVzICVzIGhhbHQgc3RhdCAlZFxuIiwgZXAtPmVwLm5hbWUsCisJCQl2YWx1ZSA/ICAic2V0IiA6ICJjbGVhciIsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgcWVfZXBfb3BzID0geworCS5lbmFibGUgPSBxZV9lcF9lbmFibGUsCisJLmRpc2FibGUgPSBxZV9lcF9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QgPSBxZV9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QgPSBxZV9mcmVlX3JlcXVlc3QsCisKKwkucXVldWUgPSBxZV9lcF9xdWV1ZSwKKwkuZGVxdWV1ZSA9IHFlX2VwX2RlcXVldWUsCisKKwkuc2V0X2hhbHQgPSBxZV9lcF9zZXRfaGFsdCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJR2FkZ2V0IERyaXZlciBMYXllciBPcGVyYXRpb25zCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR2V0IHRoZSBjdXJyZW50IGZyYW1lIG51bWJlciAqLworc3RhdGljIGludCBxZV9nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwl1MTYgdG1wOworCisJdG1wID0gaW5fYmUxNigmdWRjX2NvbnRyb2xsZXItPnVzYl9wYXJhbS0+ZnJhbWVfbik7CisJaWYgKHRtcCAmIDB4ODAwMCkKKwkJdG1wID0gdG1wICYgMHgwN2ZmOworCWVsc2UKKwkJdG1wID0gLUVJTlZBTDsKKworCXJldHVybiAoaW50KXRtcDsKK30KKworLyogVHJpZXMgdG8gd2FrZSB1cCB0aGUgaG9zdCBjb25uZWN0ZWQgdG8gdGhpcyBnYWRnZXQKKyAqCisgKiBSZXR1cm4gOiAwLXN1Y2Nlc3MKKyAqIE5lZ2F0aXZlLXRoaXMgZmVhdHVyZSBub3QgZW5hYmxlZCBieSBob3N0IG9yIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlIGh3CisgKi8KK3N0YXRpYyBpbnQgcWVfd2FrZXVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogTm90aWZ5IGNvbnRyb2xsZXIgdGhhdCBWQlVTIGlzIHBvd2VyZWQsIENhbGxlZCBieSB3aGF0ZXZlcgorICAgZGV0ZWN0cyBWQlVTIHNlc3Npb25zICovCitzdGF0aWMgaW50IHFlX3ZidXNfc2Vzc2lvbihzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKy8qIGNvbnN0cmFpbiBjb250cm9sbGVyJ3MgVkJVUyBwb3dlciB1c2FnZQorICogVGhpcyBjYWxsIGlzIHVzZWQgYnkgZ2FkZ2V0IGRyaXZlcnMgZHVyaW5nIFNFVF9DT05GSUdVUkFUSU9OIGNhbGxzLAorICogcmVwb3J0aW5nIGhvdyBtdWNoIHBvd2VyIHRoZSBkZXZpY2UgbWF5IGNvbnN1bWUuICBGb3IgZXhhbXBsZSwgdGhpcworICogY291bGQgYWZmZWN0IGhvdyBxdWlja2x5IGJhdHRlcmllcyBhcmUgcmVjaGFyZ2VkLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IHFlX3ZidXNfZHJhdyhzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCB1bnNpZ25lZCBtQSkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCisvKiBDaGFuZ2UgRGF0YSsgcHVsbHVwIHN0YXR1cworICogdGhpcyBmdW5jIGlzIHVzZWQgYnkgdXNiX2dhZGdldF9jb25uZWN0L2Rpc2Nvbm5lY3QKKyAqLworc3RhdGljIGludCBxZV9wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX29uKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKy8qIGRlZmluZWQgaW4gdXNiX2dhZGdldC5oICovCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHFlX2dhZGdldF9vcHMgPSB7CisJLmdldF9mcmFtZSA9IHFlX2dldF9mcmFtZSwKKwkud2FrZXVwID0gcWVfd2FrZXVwLAorLyoJLnNldF9zZWxmcG93ZXJlZCA9IHFlX3NldF9zZWxmcG93ZXJlZCwqLyAvKiBhbHdheXMgc2VsZnBvd2VyZWQgKi8KKwkudmJ1c19zZXNzaW9uID0gcWVfdmJ1c19zZXNzaW9uLAorCS52YnVzX2RyYXcgPSBxZV92YnVzX2RyYXcsCisJLnB1bGx1cCA9IHFlX3B1bGx1cCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVTQiBlcDAgU2V0dXAgcHJvY2VzcyBpbiBCVVMgRW51bWVyYXRpb24KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdWRjX3Jlc2V0X2VwX3F1ZXVlKHN0cnVjdCBxZV91ZGMgKnVkYywgdTggcGlwZSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzW3BpcGVdOworCisJbnVrZShlcCwgLUVDT05OUkVTRVQpOworCWVwLT50eF9yZXEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlc2V0X3F1ZXVlcyhzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdTggcGlwZTsKKworCWZvciAocGlwZSA9IDA7IHBpcGUgPCBVU0JfTUFYX0VORFBPSU5UUzsgcGlwZSsrKQorCQl1ZGNfcmVzZXRfZXBfcXVldWUodWRjLCBwaXBlKTsKKworCS8qIHJlcG9ydCBkaXNjb25uZWN0OyB0aGUgZHJpdmVyIGlzIGFscmVhZHkgcXVpZXNjZWQgKi8KKwlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwl1ZGMtPmRyaXZlci0+ZGlzY29ubmVjdCgmdWRjLT5nYWRnZXQpOworCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaDlzZXRhZGRyZXNzKHN0cnVjdCBxZV91ZGMgKnVkYywgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCQl1MTYgbGVuZ3RoKQoreworCS8qIFNhdmUgdGhlIG5ldyBhZGRyZXNzIHRvIGRldmljZSBzdHJ1Y3QgKi8KKwl1ZGMtPmRldmljZV9hZGRyZXNzID0gKHU4KSB2YWx1ZTsKKwkvKiBVcGRhdGUgdXNiIHN0YXRlICovCisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQUREUkVTUzsKKworCS8qIFN0YXR1cyBwaGFzZSAsIHNlbmQgYSBaTFAgKi8KKwlpZiAoZXAwX3ByaW1lX3N0YXR1cyh1ZGMsIFVTQl9ESVJfSU4pKQorCQlxZV9lcDBfc3RhbGwodWRjKTsKK30KKworc3RhdGljIHZvaWQgb3duZXJjb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgcWVfcmVxICpyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHFlX3JlcSwgcmVxKTsKKworCXJlcS0+cmVxLmJ1ZiA9IE5VTEw7CisJa2ZyZWUocmVxKTsKK30KKworc3RhdGljIHZvaWQgY2g5Z2V0c3RhdHVzKHN0cnVjdCBxZV91ZGMgKnVkYywgdTggcmVxdWVzdF90eXBlLCB1MTYgdmFsdWUsCisJCQl1MTYgaW5kZXgsIHUxNiBsZW5ndGgpCit7CisJdTE2IHVzYl9zdGF0dXMgPSAwOworCXN0cnVjdCBxZV9yZXEgKnJlcTsKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCWludCBzdGF0dXMgPSAwOworCisJZXAgPSAmdWRjLT5lcHNbMF07CisJaWYgKChyZXF1ZXN0X3R5cGUgJiBVU0JfUkVDSVBfTUFTSykgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQkvKiBHZXQgZGV2aWNlIHN0YXR1cyAqLworCQl1c2Jfc3RhdHVzID0gMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRDsKKwl9IGVsc2UgaWYgKChyZXF1ZXN0X3R5cGUgJiBVU0JfUkVDSVBfTUFTSykgPT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSkgeworCQkvKiBHZXQgaW50ZXJmYWNlIHN0YXR1cyAqLworCQkvKiBXZSBkb24ndCBoYXZlIGludGVyZmFjZSBpbmZvcm1hdGlvbiBpbiB1ZGMgZHJpdmVyICovCisJCXVzYl9zdGF0dXMgPSAwOworCX0gZWxzZSBpZiAoKHJlcXVlc3RfdHlwZSAmIFVTQl9SRUNJUF9NQVNLKSA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKKwkJLyogR2V0IGVuZHBvaW50IHN0YXR1cyAqLworCQlpbnQgcGlwZSA9IGluZGV4ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCQlzdHJ1Y3QgcWVfZXAgKnRhcmdldF9lcCA9ICZ1ZGMtPmVwc1twaXBlXTsKKwkJdTE2IHVzZXA7CisKKwkJLyogc3RhbGwgaWYgZW5kcG9pbnQgZG9lc24ndCBleGlzdCAqLworCQlpZiAoIXRhcmdldF9lcC0+ZGVzYykKKwkJCWdvdG8gc3RhbGw7CisKKwkJdXNlcCA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW3BpcGVdKTsKKwkJaWYgKGluZGV4ICYgVVNCX0RJUl9JTikgeworCQkJaWYgKHRhcmdldF9lcC0+ZGlyICE9IFVTQl9ESVJfSU4pCisJCQkJZ290byBzdGFsbDsKKwkJCWlmICgodXNlcCAmIFVTQl9USFNfTUFTSykgPT0gVVNCX1RIU19TVEFMTCkKKwkJCQl1c2Jfc3RhdHVzID0gMSA8PCBVU0JfRU5EUE9JTlRfSEFMVDsKKwkJfSBlbHNlIHsKKwkJCWlmICh0YXJnZXRfZXAtPmRpciAhPSBVU0JfRElSX09VVCkKKwkJCQlnb3RvIHN0YWxsOworCQkJaWYgKCh1c2VwICYgVVNCX1JIU19NQVNLKSA9PSBVU0JfUkhTX1NUQUxMKQorCQkJCXVzYl9zdGF0dXMgPSAxIDw8IFVTQl9FTkRQT0lOVF9IQUxUOworCQl9CisJfQorCisJcmVxID0gY29udGFpbmVyX29mKHFlX2FsbG9jX3JlcXVlc3QoJmVwLT5lcCwgR0ZQX0tFUk5FTCksCisJCQkJCXN0cnVjdCBxZV9yZXEsIHJlcSk7CisJcmVxLT5yZXEubGVuZ3RoID0gMjsKKwlyZXEtPnJlcS5idWYgPSB1ZGMtPnN0YXR1c2J1ZjsKKwkqKHUxNiAqKXJlcS0+cmVxLmJ1ZiA9IGNwdV90b19sZTE2KHVzYl9zdGF0dXMpOworCXJlcS0+cmVxLnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlyZXEtPnJlcS5hY3R1YWwgPSAwOworCXJlcS0+cmVxLmNvbXBsZXRlID0gb3duZXJjb21wbGV0ZTsKKworCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisKKwkvKiBkYXRhIHBoYXNlICovCisJc3RhdHVzID0gcWVfZXBfcXVldWUoJmVwLT5lcCwgJnJlcS0+cmVxLCBHRlBfQVRPTUlDKTsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuOworc3RhbGw6CisJZGV2X2Vycih1ZGMtPmRldiwgIkNhbid0IHJlc3BvbmQgdG8gZ2V0c3RhdHVzIHJlcXVlc3QgXG4iKTsKKwlxZV9lcDBfc3RhbGwodWRjKTsKK30KKworLyogb25seSBoYW5kbGUgdGhlIHNldHVwIHJlcXVlc3QsIHN1cHBvc2UgdGhlIGRldmljZSBpbiBub3JtYWwgc3RhdHVzICovCitzdGF0aWMgdm9pZCBzZXR1cF9yZWNlaXZlZF9oYW5kbGUoc3RydWN0IHFlX3VkYyAqdWRjLAorCQkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQoreworCS8qIEZpeCBFbmRpYW4gKHVkYy0+bG9jYWxfc2V0dXBfYnVmZiBpcyBjcHUgRW5kaWFuIG5vdykqLworCXUxNiB3VmFsdWUgPSBsZTE2X3RvX2NwdShzZXR1cC0+d1ZhbHVlKTsKKwl1MTYgd0luZGV4ID0gbGUxNl90b19jcHUoc2V0dXAtPndJbmRleCk7CisJdTE2IHdMZW5ndGggPSBsZTE2X3RvX2NwdShzZXR1cC0+d0xlbmd0aCk7CisKKwkvKiBjbGVhciB0aGUgcHJldmlvdXMgcmVxdWVzdCBpbiB0aGUgZXAwICovCisJdWRjX3Jlc2V0X2VwX3F1ZXVlKHVkYywgMCk7CisKKwlpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pCisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJZWxzZQorCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKworCXN3aXRjaCAoc2V0dXAtPmJSZXF1ZXN0KSB7CisJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCS8qIERhdGErU3RhdHVzIHBoYXNlIGZvcm0gdWRjICovCisJCWlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIChVU0JfRElSX0lOIHwgVVNCX1RZUEVfTUFTSykpCisJCQkJCSE9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfU1RBTkRBUkQpKQorCQkJYnJlYWs7CisJCWNoOWdldHN0YXR1cyh1ZGMsIHNldHVwLT5iUmVxdWVzdFR5cGUsIHdWYWx1ZSwgd0luZGV4LAorCQkJCQl3TGVuZ3RoKTsKKwkJcmV0dXJuOworCisJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQkvKiBTdGF0dXMgcGhhc2UgZnJvbSB1ZGMgKi8KKwkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJCQkJVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKwkJY2g5c2V0YWRkcmVzcyh1ZGMsIHdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoKTsKKwkJcmV0dXJuOworCisJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQkvKiBSZXF1ZXN0cyB3aXRoIG5vIGRhdGEgcGhhc2UsIHN0YXR1cyBwaGFzZSBmcm9tIHVkYyAqLworCQlpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKQorCQkJCQkhPSBVU0JfVFlQRV9TVEFOREFSRCkKKwkJCWJyZWFrOworCisJCWlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9SRUNJUF9NQVNLKQorCQkJCT09IFVTQl9SRUNJUF9FTkRQT0lOVCkgeworCQkJaW50IHBpcGUgPSB3SW5kZXggJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCQlzdHJ1Y3QgcWVfZXAgKmVwOworCisJCQlpZiAod1ZhbHVlICE9IDAgfHwgd0xlbmd0aCAhPSAwCisJCQkJfHwgcGlwZSA+IFVTQl9NQVhfRU5EUE9JTlRTKQorCQkJCWJyZWFrOworCQkJZXAgPSAmdWRjLT5lcHNbcGlwZV07CisKKwkJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQkJcWVfZXBfc2V0X2hhbHQoJmVwLT5lcCwKKwkJCQkJKHNldHVwLT5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9GRUFUVVJFKQorCQkJCQkJPyAxIDogMCk7CisJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCX0KKworCQllcDBfcHJpbWVfc3RhdHVzKHVkYywgVVNCX0RJUl9JTik7CisKKwkJcmV0dXJuOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHdMZW5ndGgpIHsKKwkJLyogRGF0YSBwaGFzZSBmcm9tIGdhZGdldCwgc3RhdHVzIHBoYXNlIGZyb20gdWRjICovCisJCWlmIChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgeworCQkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1hNSVQ7CisJCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX0lOOworCQl9IGVsc2UgeworCQkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1JFQ1Y7CisJCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKwkJfQorCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJaWYgKHVkYy0+ZHJpdmVyLT5zZXR1cCgmdWRjLT5nYWRnZXQsCisJCQkJCSZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmYpIDwgMCkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJfSBlbHNlIHsKKwkJLyogTm8gZGF0YSBwaGFzZSwgSU4gc3RhdHVzIGZyb20gZ2FkZ2V0ICovCisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQlpZiAodWRjLT5kcml2ZXItPnNldHVwKCZ1ZGMtPmdhZGdldCwKKwkJCQkJJnVkYy0+bG9jYWxfc2V0dXBfYnVmZikgPCAwKQorCQkJcWVfZXAwX3N0YWxsKHVkYyk7CisJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX05FRURfWkxQOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVVNCIEludGVycnVwdCBoYW5kbGVycworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgc3VzcGVuZF9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXVkYy0+cmVzdW1lX3N0YXRlID0gdWRjLT51c2Jfc3RhdGU7CisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfU1VTUEVOREVEOworCisJLyogcmVwb3J0IHN1c3BlbmQgdG8gdGhlIGRyaXZlciAsc2VyaWFsLmMgbm90IHN1cHBvcnQgdGhpcyovCisJaWYgKHVkYy0+ZHJpdmVyLT5zdXNwZW5kKQorCQl1ZGMtPmRyaXZlci0+c3VzcGVuZCgmdWRjLT5nYWRnZXQpOworfQorCitzdGF0aWMgdm9pZCByZXN1bWVfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwl1ZGMtPnVzYl9zdGF0ZSA9IHVkYy0+cmVzdW1lX3N0YXRlOworCXVkYy0+cmVzdW1lX3N0YXRlID0gMDsKKworCS8qIHJlcG9ydCByZXN1bWUgdG8gdGhlIGRyaXZlciAsIHNlcmlhbC5jIG5vdCBzdXBwb3J0IHRoaXMqLworCWlmICh1ZGMtPmRyaXZlci0+cmVzdW1lKQorCQl1ZGMtPmRyaXZlci0+cmVzdW1lKCZ1ZGMtPmdhZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwl1OCB1c2JzOworCisJdXNicyA9IGluXzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JzKTsKKwlpZiAodXNicyAmIFVTQl9JRExFX1NUQVRVU19NQVNLKSB7CisJCWlmICgodWRjLT51c2Jfc3RhdGUpICE9IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCQlzdXNwZW5kX2lycSh1ZGMpOworCX0gZWxzZSB7CisJCWlmICh1ZGMtPnVzYl9zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQkJcmVzdW1lX2lycSh1ZGMpOworCX0KK30KKworc3RhdGljIGludCByZXNldF9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXVuc2lnbmVkIGNoYXIgaTsKKworCXFlX3VzYl9kaXNhYmxlKCk7CisJb3V0XzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2FkciwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQlpZiAodWRjLT5lcHNbaV0uaW5pdCkKKwkJCXFlX2VwX3Jlc2V0KHVkYywgaSk7CisJfQorCisJcmVzZXRfcXVldWVzKHVkYyk7CisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfREVGQVVMVDsKKwl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCXFlX3VzYl9lbmFibGUoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBic3lfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0eGVfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlyZXR1cm4gMDsKK30KKworLyogZXAwIHR4IGludGVycnVwdCBhbHNvIGluIGhlcmUgKi8KK3N0YXRpYyBpbnQgdHhfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgaSwgcmVzID0gMDsKKworCWlmICgodWRjLT51c2Jfc3RhdGUgPT0gVVNCX1NUQVRFX0FERFJFU1MpCisJCSYmIChpbl84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNhZHIpID09IDApKQorCQlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYWRyLCB1ZGMtPmRldmljZV9hZGRyZXNzKTsKKworCWZvciAoaSA9IChVU0JfTUFYX0VORFBPSU5UUy0xKTsgKChpID49IDApICYmIChyZXMgPT0gMCkpOyBpLS0pIHsKKwkJZXAgPSAmdWRjLT5lcHNbaV07CisJCWlmIChlcCAmJiBlcC0+aW5pdCAmJiAoZXAtPmRpciAhPSBVU0JfRElSX09VVCkpIHsKKwkJCWJkID0gZXAtPmNfdHhiZDsKKwkJCWlmICghKGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpICYgVF9SKQorCQkJCQkJJiYgKGluX2JlMzIoJmJkLT5idWYpKSkgeworCQkJCS8qIGNvbmZpcm0gdGhlIHRyYW5zbWl0dGVkIGJkICovCisJCQkJaWYgKGVwLT5lcG51bSA9PSAwKQorCQkJCQlyZXMgPSBxZV9lcDBfdHhjb25mKGVwKTsKKwkJCQllbHNlCisJCQkJCXJlcyA9IHFlX2VwX3R4Y29uZihlcCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlczsKK30KKworCisvKiBzZXR1cCBwYWNrZWN0J3MgcnggaXMgaGFuZGxlIGluIHRoZSBmdW5jdGlvbiB0b28gKi8KK3N0YXRpYyB2b2lkIHJ4X2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJc3RydWN0IHFlX2VwICplcDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKwkJaWYgKGVwICYmIGVwLT5pbml0ICYmIChlcC0+ZGlyICE9IFVTQl9ESVJfSU4pKSB7CisJCQliZCA9IGVwLT5uX3J4YmQ7CisJCQlpZiAoIShpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKSAmIFJfRSkKKwkJCQkJCSYmIChpbl9iZTMyKCZiZC0+YnVmKSkpIHsKKwkJCQlpZiAoZXAtPmVwbnVtID09IDApIHsKKwkJCQkJcWVfZXAwX3J4KHVkYyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLypub24tc2V0dXAgcGFja2FnZSByZWNlaXZlKi8KKwkJCQkJcWVfZXBfcngoZXApOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHFlX3VkY19pcnEoaW50IGlycSwgdm9pZCAqX3VkYykKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSAoc3RydWN0IHFlX3VkYyAqKV91ZGM7CisJdTE2IGlycV9zcmM7CisJaXJxcmV0dXJuX3Qgc3RhdHVzID0gSVJRX05PTkU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCWlycV9zcmMgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIpICYKKwkJaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yKTsKKwkvKiBDbGVhciBub3RpZmljYXRpb24gYml0cyAqLworCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIsIGlycV9zcmMpOworCS8qIFVTQiBJbnRlcnJ1cHQgKi8KKwlpZiAoaXJxX3NyYyAmIFVTQl9FX0lETEVfTUFTSykgeworCQlpZGxlX2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9JRExFX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfVFhCX01BU0spIHsKKwkJdHhfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1RYQl9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaXJxX3NyYyAmIFVTQl9FX1JYQl9NQVNLKSB7CisJCXJ4X2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9SWEJfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9SRVNFVF9NQVNLKSB7CisJCXJlc2V0X2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9SRVNFVF9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaXJxX3NyYyAmIFVTQl9FX0JTWV9NQVNLKSB7CisJCWJzeV9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfQlNZX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfVFhFX01BU0spIHsKKwkJdHhlX2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9UWEVfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlHYWRnZXQgZHJpdmVyIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJLyogc3RhbmRhcmQgb3BlcmF0aW9ucyAqLworCWlmICghdWRjX2NvbnRyb2xsZXIpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkcml2ZXIgfHwgKGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0ZVTEwKKwkJCSYmIGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpCisJCQl8fCAhZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPmRpc2Nvbm5lY3QKKwkJCXx8ICFkcml2ZXItPnNldHVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1ZGNfY29udHJvbGxlci0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogbG9jayBpcyBuZWVkZWQgYnV0IHdoZXRoZXIgc2hvdWxkIHVzZSB0aGlzIGxvY2sgb3IgYW5vdGhlciAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJZHJpdmVyLT5kcml2ZXIuYnVzID0gTlVMTDsKKwkvKiBob29rIHVwIHRoZSBkcml2ZXIgKi8KKwl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gZHJpdmVyOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LnNwZWVkID0gKGVudW0gdXNiX2RldmljZV9zcGVlZCkoZHJpdmVyLT5zcGVlZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKworCXJldHZhbCA9IGRyaXZlci0+YmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKHVkY19jb250cm9sbGVyLT5kZXYsICJiaW5kIHRvICVzIC0tPiAlZCIsCisJCQkJZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKKwkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogRW5hYmxlIElSUSByZWcgYW5kIFNldCB1c2JjbWQgcmVnIEVOIGJpdCAqLworCXFlX3VzYl9lbmFibGUoKTsKKworCW91dF9iZTE2KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c2JlciwgMHhmZmZmKTsKKwlvdXRfYmUxNigmdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzLT51c2JfdXNibXIsIFVTQl9FX0RFRkFVTFRfREVWSUNFKTsKKwl1ZGNfY29udHJvbGxlci0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX0FUVEFDSEVEOworCXVkY19jb250cm9sbGVyLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl1ZGNfY29udHJvbGxlci0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCWRldl9pbmZvKHVkY19jb250cm9sbGVyLT5kZXYsICIlcyBiaW5kIHRvIGRyaXZlciAlcyBcbiIsCisJCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IHFlX2VwICpsb29wX2VwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVkY19jb250cm9sbGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSB1ZGNfY29udHJvbGxlci0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHN0b3AgdXNiIGNvbnRyb2xsZXIsIGRpc2FibGUgaW50ciAqLworCXFlX3VzYl9kaXNhYmxlKCk7CisKKwkvKiBpbiBmYWN0LCBubyBuZWVkZWQgKi8KKwl1ZGNfY29udHJvbGxlci0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX0FUVEFDSEVEOworCXVkY19jb250cm9sbGVyLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl1ZGNfY29udHJvbGxlci0+ZXAwX2RpciA9IDA7CisKKwkvKiBzdGFuZCBvcGVyYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJbnVrZSgmdWRjX2NvbnRyb2xsZXItPmVwc1swXSwgLUVTSFVURE9XTik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb29wX2VwLCAmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5lcF9saXN0LAorCQkJCWVwLmVwX2xpc3QpCisJCW51a2UobG9vcF9lcCwgLUVTSFVURE9XTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKworCS8qIHVuYmluZCBnYWRnZXQgYW5kIHVuaG9vayBkcml2ZXIuICovCisJZHJpdmVyLT51bmJpbmQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CisKKwlkZXZfaW5mbyh1ZGNfY29udHJvbGxlci0+ZGV2LCAidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xyXG4iLAorCQkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisvKiB1ZGMgc3RydWN0dXJlJ3MgYWxsb2MgYW5kIHNldHVwLCBpbmNsdWRlIGVwLXBhcmFtIGFsbG9jICovCitzdGF0aWMgc3RydWN0IHFlX3VkYyBfX2RldmluaXQgKnFlX3VkY19jb25maWcoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKKwl1bnNpZ25lZCBpbnQgdG1wX2FkZHIgPSAwOworCXN0cnVjdCB1c2JfZGV2aWNlX3BhcmEgX19pb21lbSAqdXNicHJhbTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1NjQgc2l6ZTsKKwl1MzIgb2Zmc2V0OworCisJdWRjID0ga3phbGxvYyhzaXplb2YoKnVkYyksIEdGUF9LRVJORUwpOworCWlmICh1ZGMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAibWFsbG9jIHVkYyBmYWlsZWRcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJdWRjLT5kZXYgPSAmb2ZkZXYtPmRldjsKKworCS8qIGdldCBkZWZhdWx0IGFkZHJlc3Mgb2YgdXNiIHBhcmFtZXRlciBpbiBNVVJBTSBmcm9tIGRldmljZSB0cmVlICovCisJb2Zmc2V0ID0gKm9mX2dldF9hZGRyZXNzKG5wLCAxLCAmc2l6ZSwgTlVMTCk7CisJdWRjLT51c2JfcGFyYW0gPSBjcG1fbXVyYW1fYWRkcihvZmZzZXQpOworCW1lbXNldF9pbyh1ZGMtPnVzYl9wYXJhbSwgMCwgc2l6ZSk7CisKKwl1c2JwcmFtID0gdWRjLT51c2JfcGFyYW07CisJb3V0X2JlMTYoJnVzYnByYW0tPmZyYW1lX24sIDApOworCW91dF9iZTMyKCZ1c2JwcmFtLT5yc3RhdGUsIDApOworCisJdG1wX2FkZHIgPSBjcG1fbXVyYW1fYWxsb2MoKFVTQl9NQVhfRU5EUE9JTlRTICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfZXBfcGFyYSkpLAorCQkJCQkgICBVU0JfRVBfUEFSQV9BTElHTk1FTlQpOworCisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBpKyspIHsKKwkJb3V0X2JlMTYoJnVzYnByYW0tPmVwcHRyW2ldLCAodTE2KXRtcF9hZGRyKTsKKwkJdWRjLT5lcF9wYXJhbVtpXSA9IGNwbV9tdXJhbV9hZGRyKHRtcF9hZGRyKTsKKwkJdG1wX2FkZHIgKz0gMzI7CisJfQorCisJbWVtc2V0X2lvKHVkYy0+ZXBfcGFyYW1bMF0sIDAsCisJCQlVU0JfTUFYX0VORFBPSU5UUyAqIHNpemVvZihzdHJ1Y3QgdXNiX2VwX3BhcmEpKTsKKworCXVkYy0+cmVzdW1lX3N0YXRlID0gVVNCX1NUQVRFX05PVEFUVEFDSEVEOworCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX1BPV0VSRUQ7CisJdWRjLT5lcDBfZGlyID0gMDsKKworCXNwaW5fbG9ja19pbml0KCZ1ZGMtPmxvY2spOworCXJldHVybiB1ZGM7CisKK2NsZWFudXA6CisJa2ZyZWUodWRjKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVVNCIENvbnRyb2xsZXIgcmVnaXN0ZXIgaW5pdCAqLworc3RhdGljIGludCBfX2RldmluaXQgcWVfdWRjX3JlZ19pbml0KHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgdXNiX2N0bHIgX19pb21lbSAqcWVfdXNicmVnczsKKwlxZV91c2JyZWdzID0gdWRjLT51c2JfcmVnczsKKworCS8qIEluaXQgdGhlIHVzYiByZWdpc3RlciAqLworCW91dF84KCZxZV91c2JyZWdzLT51c2JfdXNtb2QsIDB4MDEpOworCW91dF9iZTE2KCZxZV91c2JyZWdzLT51c2JfdXNibXIsIDApOworCW91dF84KCZxZV91c2JyZWdzLT51c2JfdXNjb20sIDApOworCW91dF9iZTE2KCZxZV91c2JyZWdzLT51c2JfdXNiZXIsIFVTQkVSX0FMTF9DTEVBUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcWVfZXBfY29uZmlnKHN0cnVjdCBxZV91ZGMgKnVkYywgdW5zaWduZWQgY2hhciBwaXBlX251bSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKworCWVwLT51ZGMgPSB1ZGM7CisJc3RyY3B5KGVwLT5uYW1lLCBlcF9uYW1lW3BpcGVfbnVtXSk7CisJZXAtPmVwLm5hbWUgPSBlcF9uYW1lW3BpcGVfbnVtXTsKKworCWVwLT5lcC5vcHMgPSAmcWVfZXBfb3BzOworCWVwLT5zdG9wcGVkID0gMTsKKwllcC0+ZXAubWF4cGFja2V0ID0gKHVuc2lnbmVkIHNob3J0KSB+MDsKKwllcC0+ZGVzYyA9IE5VTEw7CisJZXAtPmRpciA9IDB4ZmY7CisJZXAtPmVwbnVtID0gKHU4KXBpcGVfbnVtOworCWVwLT5zZW50ID0gMDsKKwllcC0+bGFzdCA9IDA7CisJZXAtPmluaXQgPSAwOworCWVwLT5yeGZyYW1lID0gTlVMTDsKKwllcC0+dHhmcmFtZSA9IE5VTEw7CisJZXAtPnR4X3JlcSA9IE5VTEw7CisJZXAtPnN0YXRlID0gRVBfU1RBVEVfSURMRTsKKwllcC0+aGFzX2RhdGEgPSAwOworCisJLyogdGhlIHF1ZXVlIGxpc3RzIGFueSByZXEgZm9yIHRoaXMgZXAgKi8KKwlJTklUX0xJU1RfSEVBRCgmZXAtPnF1ZXVlKTsKKworCS8qIGdhZ2RldC5lcF9saXN0IHVzZWQgZm9yIGVwX2F1dG9jb25maWcgc28gbm8gZXAwKi8KKwlpZiAocGlwZV9udW0gIT0gMCkKKwkJbGlzdF9hZGRfdGFpbCgmZXAtPmVwLmVwX2xpc3QsICZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKKworCWVwLT5nYWRnZXQgPSAmdWRjLT5nYWRnZXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJVURDIGRldmljZSBEcml2ZXIgb3BlcmF0aW9uIGZ1bmN0aW9ucwkJCQkqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcWVfdWRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBpID0gMDsKKworCWNvbXBsZXRlKHVkY19jb250cm9sbGVyLT5kb25lKTsKKwljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KHVkY19jb250cm9sbGVyLT5lcF9wYXJhbVswXSkpOworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKQorCQl1ZGNfY29udHJvbGxlci0+ZXBfcGFyYW1baV0gPSBOVUxMOworCisJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOworCXVkY19jb250cm9sbGVyID0gTlVMTDsKK30KKworLyogRHJpdmVyIHByb2JlIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBfX2RldmluaXQgcWVfdWRjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCBxZV9lcCAqZXA7CisJdW5zaWduZWQgaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3Qgdm9pZCAqcHJvcDsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJtb2RlIiwgTlVMTCk7CisJaWYgKCFwcm9wIHx8IHN0cmNtcChwcm9wLCAicGVyaXBoZXJhbCIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEluaXRpYWxpemUgdGhlIHVkYyBzdHJ1Y3R1cmUgaW5jbHVkaW5nIFFIIG1lbWJlciBhbmQgb3RoZXIgbWVtYmVyICovCisJdWRjX2NvbnRyb2xsZXIgPSBxZV91ZGNfY29uZmlnKG9mZGV2KTsKKwlpZiAoIXVkY19jb250cm9sbGVyKSB7CisJCWRldl9kYmcoJm9mZGV2LT5kZXYsICJ1ZGNfY29udHJvbGwgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVkY19jb250cm9sbGVyLT5zb2NfdHlwZSA9ICh1bnNpZ25lZCBsb25nKW1hdGNoLT5kYXRhOworCXVkY19jb250cm9sbGVyLT51c2JfcmVncyA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoIXVkY19jb250cm9sbGVyLT51c2JfcmVncykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCisJLyogaW5pdGlhbGl6ZSB1c2IgaHcgcmVnIGV4Y2VwdCBmb3IgcmVncyBmb3IgRVAsCisJICogbGVhdmUgdXNiaW50ciByZWcgdW50b3VjaGVkKi8KKwlxZV91ZGNfcmVnX2luaXQodWRjX2NvbnRyb2xsZXIpOworCisJLyogaGVyZSBjb21lcyB0aGUgc3RhbmQgb3BlcmF0aW9ucyBmb3IgcHJvYmUKKwkgKiBzZXQgdGhlIHFlX3VkYy0+Z2FkZ2V0Lnh4eCAqLworCXVkY19jb250cm9sbGVyLT5nYWRnZXQub3BzID0gJnFlX2dhZGdldF9vcHM7CisKKwkvKiBnYWRnZXQuZXAwIGlzIGEgcG9pbnRlciAqLworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZXAwID0gJnVkY19jb250cm9sbGVyLT5lcHNbMF0uZXA7CisKKwlJTklUX0xJU1RfSEVBRCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5lcF9saXN0KTsKKworCS8qIG1vZGlmeSBpbiByZWdpc3RlciBnYWRnZXQgcHJvY2VzcyAqLworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworCS8qIG5hbWU6IElkZW50aWZpZXMgdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUgdHlwZS4gKi8KKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsKKworCWRldmljZV9pbml0aWFsaXplKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7CisKKwlzdHJjcHkodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5yZWxlYXNlID0gcWVfdWRjX3JlbGVhc2U7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50ID0gJm9mZGV2LT5kZXY7CisKKwkvKiBpbml0aWFsaXplIHFlX2VwIHN0cnVjdCAqLworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUyA7IGkrKykgeworCQkvKiBiZWNhdXNlIHRoZSBlcCB0eXBlIGlzbid0IGRlY2lkZSBoZXJlIHNvCisJCSAqIHFlX2VwX2luaXQoKSBzaG91bGQgYmUgY2FsbGVkIGluIGVwX2VuYWJsZSgpICovCisKKwkJLyogc2V0dXAgdGhlIHFlX2VwIHN0cnVjdCBhbmQgbGluayBlcC5lcC5saXN0CisJCSAqIGludG8gZ2FkZ2V0LmVwX2xpc3QgKi8KKwkJcWVfZXBfY29uZmlnKHVkY19jb250cm9sbGVyLCAodW5zaWduZWQgY2hhcilpKTsKKwl9CisKKwkvKiBlcDAgaW5pdGlhbGl6YXRpb24gaW4gaGVyZSAqLworCXJldCA9IHFlX2VwX2luaXQodWRjX2NvbnRyb2xsZXIsIDAsICZxZV9lcDBfZGVzYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJLyogY3JlYXRlIGEgYnVmIGZvciBaTFAgc2VuZCwgbmVlZCB0byByZW1haW4gemVyb2VkICovCisJdWRjX2NvbnRyb2xsZXItPm51bGxidWYgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkY19jb250cm9sbGVyLT5udWxsYnVmID09IE5VTEwpIHsKKwkJZGV2X2RiZyh1ZGNfY29udHJvbGxlci0+ZGV2LCAiY2Fubm90IGFsbG9jIG51bGxidWZcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjM7CisJfQorCisJLyogYnVmZmVyIGZvciBkYXRhIG9mIGdldF9zdGF0dXMgcmVxdWVzdCAqLworCXVkY19jb250cm9sbGVyLT5zdGF0dXNidWYgPSBremFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICh1ZGNfY29udHJvbGxlci0+c3RhdHVzYnVmID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI0OworCX0KKworCXVkY19jb250cm9sbGVyLT5udWxscCA9IHZpcnRfdG9fcGh5cygodm9pZCAqKXVkY19jb250cm9sbGVyLT5udWxsYnVmKTsKKwlpZiAodWRjX2NvbnRyb2xsZXItPm51bGxwID09IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gZG1hX21hcF9zaW5nbGUoCisJCQkJCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJdWRjX2NvbnRyb2xsZXItPm51bGxidWYsCisJCQkJCTI1NiwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJCXVkY19jb250cm9sbGVyLT5udWxsbWFwID0gMTsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwl9CisKKwl0YXNrbGV0X2luaXQoJnVkY19jb250cm9sbGVyLT5yeF90YXNrbGV0LCBlcF9yeF90YXNrbGV0LAorCQkJKHVuc2lnbmVkIGxvbmcpdWRjX2NvbnRyb2xsZXIpOworCS8qIHJlcXVlc3QgaXJxIGFuZCBkaXNhYmxlIERSICAqLworCXVkY19jb250cm9sbGVyLT51c2JfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCisJcmV0ID0gcmVxdWVzdF9pcnEodWRjX2NvbnRyb2xsZXItPnVzYl9pcnEsIHFlX3VkY19pcnEsIDAsCisJCQkJZHJpdmVyX25hbWUsIHVkY19jb250cm9sbGVyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIodWRjX2NvbnRyb2xsZXItPmRldiwgImNhbm5vdCByZXF1ZXN0IGlycSAlZCBlcnIgJWQgXG4iLAorCQkJdWRjX2NvbnRyb2xsZXItPnVzYl9pcnEsIHJldCk7CisJCWdvdG8gZXJyNTsKKwl9CisKKwlyZXQgPSBkZXZpY2VfYWRkKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnI2OworCisJZGV2X2luZm8odWRjX2NvbnRyb2xsZXItPmRldiwKKwkJCSIlcyBVU0IgY29udHJvbGxlciBpbml0aWFsaXplZCBhcyBkZXZpY2VcbiIsCisJCQkodWRjX2NvbnRyb2xsZXItPnNvY190eXBlID09IFBPUlRfUUUpID8gIlFFIiA6ICJDUE0iKTsKKwlyZXR1cm4gMDsKKworZXJyNjoKKwlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgdWRjX2NvbnRyb2xsZXIpOworZXJyNToKKwlpZiAodWRjX2NvbnRyb2xsZXItPm51bGxtYXApIHsKKwkJZG1hX3VubWFwX3NpbmdsZSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAsIDI1NiwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCA9IERNQV9BRERSX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJfQorCWtmcmVlKHVkY19jb250cm9sbGVyLT5zdGF0dXNidWYpOworZXJyNDoKKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+bnVsbGJ1Zik7CitlcnIzOgorCWVwID0gJnVkY19jb250cm9sbGVyLT5lcHNbMF07CisJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+cnhiYXNlKSk7CisJa2ZyZWUoZXAtPnJ4ZnJhbWUpOworCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJa2ZyZWUoZXAtPnR4ZnJhbWUpOworZXJyMjoKKwlpb3VubWFwKHVkY19jb250cm9sbGVyLT51c2JfcmVncyk7CitlcnIxOgorCWtmcmVlKHVkY19jb250cm9sbGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcWVfdWRjX3N1c3BlbmQoc3RydWN0IG9mX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworc3RhdGljIGludCBxZV91ZGNfcmVzdW1lKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHFlX3VkY19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKworCWlmICghdWRjX2NvbnRyb2xsZXIpCisJCXJldHVybiAtRU5PREVWOworCisJdWRjX2NvbnRyb2xsZXItPmRvbmUgPSAmZG9uZTsKKwl0YXNrbGV0X2Rpc2FibGUoJnVkY19jb250cm9sbGVyLT5yeF90YXNrbGV0KTsKKworCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbG1hcCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gRE1BX0FERFJfSU5WQUxJRDsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAsIDI1NiwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwl9CisJa2ZyZWUodWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1Zik7CisJa2ZyZWUodWRjX2NvbnRyb2xsZXItPm51bGxidWYpOworCisJZXAgPSAmdWRjX2NvbnRyb2xsZXItPmVwc1swXTsKKwljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKwlzaXplID0gKGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUgKyAyKSAqIChVU0JfQkRSSU5HX0xFTiArIDEpOworCisJa2ZyZWUoZXAtPnJ4ZnJhbWUpOworCWlmIChlcC0+cnhidWZtYXApIHsKKwkJZG1hX3VubWFwX3NpbmdsZSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJZXAtPnJ4YnVmX2QsIHNpemUsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJZXAtPnJ4YnVmX2QgPSBETUFfQUREUl9JTlZBTElEOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCX0KKworCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJa2ZyZWUoZXAtPnR4ZnJhbWUpOworCisJZnJlZV9pcnEodWRjX2NvbnRyb2xsZXItPnVzYl9pcnEsIHVkY19jb250cm9sbGVyKTsKKworCXRhc2tsZXRfa2lsbCgmdWRjX2NvbnRyb2xsZXItPnJ4X3Rhc2tsZXQpOworCisJaW91bm1hcCh1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MpOworCisJZGV2aWNlX3VucmVnaXN0ZXIoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKKwkvKiB3YWl0IGZvciByZWxlYXNlKCkgb2YgZ2FkZ2V0LmRldiB0byBmcmVlIHVkYyAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2RldmluaXRkYXRhIHFlX3VkY19tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtcWUtdXNiIiwKKwkJLmRhdGEgPSAodm9pZCAqKVBPUlRfUUUsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM4MjcyLWNwbS11c2IiLAorCQkuZGF0YSA9ICh2b2lkICopUE9SVF9DUE0sCisJfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHFlX3VkY19tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHVkY19kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgICAgID0gKGNoYXIgKilkcml2ZXJfbmFtZSwKKwkubWF0Y2hfdGFibGUgICAgPSBxZV91ZGNfbWF0Y2gsCisJLnByb2JlICAgICAgICAgID0gcWVfdWRjX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKHFlX3VkY19yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICAgICAgICA9IHFlX3VkY19zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgICA9IHFlX3VkY19yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFlX3VkY19pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzLCAlc1xuIiwgZHJpdmVyX25hbWUsIGRyaXZlcl9kZXNjLAorCQkJRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVkY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcWVfdWRjX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHFlX3VkY19pbml0KTsKK21vZHVsZV9leGl0KHFlX3VkY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYjI3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oCkBAIC0wLDAgKzEsNDM3IEBACisvKgorICogZHJpdmVycy91c2IvZ2FkZ2V0L3FlX3VkYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAJWGlhb2JvIFhpZSA8WC5YaWVAZnJlZXNjYWxlLmNvbT4KKyAqIAlMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogRnJlZXNjYWxlIFVTQiBkZXZpY2UvZW5kcG9pbnQgbWFuYWdlbWVudCByZWdpc3RlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19GU0xfUUVfVURDX0gKKyNkZWZpbmUgX19GU0xfUUVfVURDX0gKKworLyogU29DIHR5cGUgKi8KKyNkZWZpbmUgUE9SVF9DUE0JMAorI2RlZmluZSBQT1JUX1FFCQkxCisKKyNkZWZpbmUgVVNCX01BWF9FTkRQT0lOVFMgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVTQl9NQVhfUElQRVMgICAgICAgICAgICAgICAgICAgVVNCX01BWF9FTkRQT0lOVFMKKyNkZWZpbmUgVVNCX0VQMF9NQVhfU0laRQkJNjQKKyNkZWZpbmUgVVNCX01BWF9DVFJMX1BBWUxPQUQgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgVVNCX0JEUklOR19MRU4JCQkxNgorI2RlZmluZSBVU0JfQkRSSU5HX0xFTl9SWAkJMjU2CisjZGVmaW5lIFVTQl9CRFJJTkdfTEVOX1RYCQkxNgorI2RlZmluZSBNSU5fRU1QVFlfQkRTCQkJMTI4CisjZGVmaW5lIE1BWF9EQVRBX0JEUwkJCTgKKyNkZWZpbmUgVVNCX0NSQ19TSVpFCQkJMgorI2RlZmluZSBVU0JfRElSX0JPVEgJCQkweDg4CisjZGVmaW5lIFJfQlVGX01BWFNJWkUJCQkweDgwMAorI2RlZmluZSBVU0JfRVBfUEFSQV9BTElHTk1FTlQJCTMyCisKKy8qIFVTQiBNb2RlIFJlZ2lzdGVyIGJpdCBkZWZpbmUgKi8KKyNkZWZpbmUgVVNCX01PREVfRU4JCTB4MDEKKyNkZWZpbmUgVVNCX01PREVfSE9TVAkJMHgwMgorI2RlZmluZSBVU0JfTU9ERV9URVNUCQkweDA0CisjZGVmaW5lIFVTQl9NT0RFX1NGVEUJCTB4MDgKKyNkZWZpbmUgVVNCX01PREVfUkVTVU1FCQkweDQwCisjZGVmaW5lIFVTQl9NT0RFX0xTUwkJMHg4MAorCisvKiBVU0IgU2xhdmUgQWRkcmVzcyBSZWdpc3RlciBNYXNrICovCisjZGVmaW5lIFVTQl9TTFZBRERSX01BU0sJMHg3RgorCisvKiBVU0IgRW5kcG9pbnQgcmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9FUE5VTV9NQVNLCQkweEYwMDAKKyNkZWZpbmUgVVNCX0VQTlVNX1NISUZUCQkxMgorCisjZGVmaW5lIFVTQl9UUkFOU19NT0RFX1NISUZUCTgKKyNkZWZpbmUgVVNCX1RSQU5TX0NUUgkJMHgwMDAwCisjZGVmaW5lIFVTQl9UUkFOU19JTlQJCTB4MDEwMAorI2RlZmluZSBVU0JfVFJBTlNfQlVMSwkJMHgwMjAwCisjZGVmaW5lIFVTQl9UUkFOU19JU08JCTB4MDMwMAorCisjZGVmaW5lIFVTQl9FUF9NRgkJMHgwMDIwCisjZGVmaW5lIFVTQl9FUF9SVEUJCTB4MDAxMAorCisjZGVmaW5lIFVTQl9USFNfU0hJRlQJCTIKKyNkZWZpbmUgVVNCX1RIU19NQVNLCQkweDAwMGMKKyNkZWZpbmUgVVNCX1RIU19OT1JNQUwJCTB4MAorI2RlZmluZSBVU0JfVEhTX0lHTk9SRV9JTgkweDAwMDQKKyNkZWZpbmUgVVNCX1RIU19OQUNLCQkweDAwMDgKKyNkZWZpbmUgVVNCX1RIU19TVEFMTAkJMHgwMDBjCisKKyNkZWZpbmUgVVNCX1JIU19TSElGVCAgIAkwCisjZGVmaW5lIFVTQl9SSFNfTUFTSwkJMHgwMDAzCisjZGVmaW5lIFVTQl9SSFNfTk9STUFMICAJMHgwCisjZGVmaW5lIFVTQl9SSFNfSUdOT1JFX09VVAkweDAwMDEKKyNkZWZpbmUgVVNCX1JIU19OQUNLCQkweDAwMDIKKyNkZWZpbmUgVVNCX1JIU19TVEFMTAkJMHgwMDAzCisKKyNkZWZpbmUgVVNCX1JUSFNfTUFTSwkJMHgwMDBmCisKKy8qIFVTQiBDb21tYW5kIFJlZ2lzdGVyIGRlZmluZSAqLworI2RlZmluZSBVU0JfQ01EX1NUUl9GSUZPCTB4ODAKKyNkZWZpbmUgVVNCX0NNRF9GTFVTSF9GSUZPCTB4NDAKKyNkZWZpbmUgVVNCX0NNRF9JU0ZUCQkweDIwCisjZGVmaW5lIFVTQl9DTURfRFNGVAkJMHgxMAorI2RlZmluZSBVU0JfQ01EX0VQX01BU0sJCTB4MDMKKworLyogVVNCIEV2ZW50IGFuZCBNYXNrIFJlZ2lzdGVyIGRlZmluZSAqLworI2RlZmluZSBVU0JfRV9NU0ZfTUFTSwkJMHgwODAwCisjZGVmaW5lIFVTQl9FX1NGVF9NQVNLCQkweDA0MDAKKyNkZWZpbmUgVVNCX0VfUkVTRVRfTUFTSwkweDAyMDAKKyNkZWZpbmUgVVNCX0VfSURMRV9NQVNLCQkweDAxMDAKKyNkZWZpbmUgVVNCX0VfVFhFNF9NQVNLCQkweDAwODAKKyNkZWZpbmUgVVNCX0VfVFhFM19NQVNLCQkweDAwNDAKKyNkZWZpbmUgVVNCX0VfVFhFMl9NQVNLCQkweDAwMjAKKyNkZWZpbmUgVVNCX0VfVFhFMV9NQVNLCQkweDAwMTAKKyNkZWZpbmUgVVNCX0VfU09GX01BU0sJCTB4MDAwOAorI2RlZmluZSBVU0JfRV9CU1lfTUFTSwkJMHgwMDA0CisjZGVmaW5lIFVTQl9FX1RYQl9NQVNLCQkweDAwMDIKKyNkZWZpbmUgVVNCX0VfUlhCX01BU0sJCTB4MDAwMQorI2RlZmluZSBVU0JFUl9BTExfQ0xFQVIgCTB4MGZmZgorCisjZGVmaW5lIFVTQl9FX0RFRkFVTFRfREVWSUNFICAgKFVTQl9FX1JFU0VUX01BU0sgfCBVU0JfRV9UWEU0X01BU0sgfCBcCisJCQkJVVNCX0VfVFhFM19NQVNLIHwgVVNCX0VfVFhFMl9NQVNLIHwgXAorCQkJCVVTQl9FX1RYRTFfTUFTSyB8IFVTQl9FX0JTWV9NQVNLIHwgXAorCQkJCVVTQl9FX1RYQl9NQVNLIHwgVVNCX0VfUlhCX01BU0spCisKKyNkZWZpbmUgVVNCX0VfVFhFX01BU0sgICAgICAgICAoVVNCX0VfVFhFNF9NQVNLIHwgVVNCX0VfVFhFM19NQVNLfFwKKwkJCQkgVVNCX0VfVFhFMl9NQVNLIHwgVVNCX0VfVFhFMV9NQVNLKQorLyogVVNCIFN0YXR1cyBSZWdpc3RlciBkZWZpbmUgKi8KKyNkZWZpbmUgVVNCX0lETEVfU1RBVFVTX01BU0sJMHgwMQorCisvKiBVU0IgU3RhcnQgb2YgRnJhbWUgVGltZXIgKi8KKyNkZWZpbmUgVVNCX1VTU0ZUX01BU0sJCTB4M0ZGRgorCisvKiBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVTQl9VU0ZSTl9NQVNLCQkweEZGRkYKKworc3RydWN0IHVzYl9kZXZpY2VfcGFyYXsKKwl1MTYJZXBwdHJbNF07CisJdTMyCXJzdGF0ZTsKKwl1MzIJcnB0cjsKKwl1MTYJZnJhbWVfbjsKKwl1MTYJcmJjbnQ7CisJdTMyCXJ0ZW1wOworCXUzMglyeHVzYl9kYXRhOworCXUxNglyeHVwdHI7CisJdTgJcmVzb1syXTsKKwl1MzIJc29mdGJsOworCXU4CXNvZnVjcmN0ZW1wOworfTsKKworc3RydWN0IHVzYl9lcF9wYXJheworCXUxNglyYmFzZTsKKwl1MTYJdGJhc2U7CisJdTgJcmJtcjsKKwl1OAl0Ym1yOworCXUxNgltcmJscjsKKwl1MTYJcmJwdHI7CisJdTE2CXRicHRyOworCXUzMgl0c3RhdGU7CisJdTMyCXRwdHI7CisJdTE2CXRjcmM7CisJdTE2CXRiY250OworCXUzMgl0dGVtcDsKKwl1MTYJdHh1c2J1X3B0cjsKKwl1OAlyZXNlcnZlWzJdOworfTsKKworI2RlZmluZSBVU0JfQlVTTU9ERV9HQkwJCTB4MjAKKyNkZWZpbmUgVVNCX0JVU01PREVfQk9fTUFTSwkweDE4CisjZGVmaW5lIFVTQl9CVVNNT0RFX0JPX1NISUZUCTB4MworI2RlZmluZSBVU0JfQlVTTU9ERV9CRQkJMHgyCisjZGVmaW5lIFVTQl9CVVNNT0RFX0NFVE0JMHgwNAorI2RlZmluZSBVU0JfQlVTTU9ERV9EVEIJCTB4MDIKKworLyogRW5kcG9pbnQgYmFzaWMgaGFuZGxlICovCisjZGVmaW5lIGVwX2luZGV4KEVQKQkJKChFUCktPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiAweEYpCisjZGVmaW5lIGVwX21heHBhY2tldChFUCkJKChFUCktPmVwLm1heHBhY2tldCkKKyNkZWZpbmUgZXBfaXNfaW4oRVApCSgoZXBfaW5kZXgoRVApID09IDApID8gKEVQLT51ZGMtPmVwMF9kaXIgPT0gXAorCQkJVVNCX0RJUl9JTikgOiAoKEVQKS0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyBcCisJCQkmIFVTQl9ESVJfSU4pID09IFVTQl9ESVJfSU4pCisKKy8qIGVwMCB0cmFuc2ZlciBzdGF0ZSAqLworI2RlZmluZSBXQUlUX0ZPUl9TRVRVUCAgICAgICAgICAwCisjZGVmaW5lIERBVEFfU1RBVEVfWE1JVCAgICAgICAgIDEKKyNkZWZpbmUgREFUQV9TVEFURV9ORUVEX1pMUCAgICAgMgorI2RlZmluZSBXQUlUX0ZPUl9PVVRfU1RBVFVTICAgICAzCisjZGVmaW5lIERBVEFfU1RBVEVfUkVDViAgICAgICAgIDQKKworLyogZXAgdHJhbXNmZXIgbW9kZSAqLworI2RlZmluZSBVU0JQX1RNX0NUTAkwCisjZGVmaW5lIFVTQlBfVE1fSVNPCTEKKyNkZWZpbmUgVVNCUF9UTV9CVUxLCTIKKyNkZWZpbmUgVVNCUF9UTV9JTlQJMworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVVNCIFJYIEFuZCBUWCBEQVRBIEZyYW1lCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RydWN0IHFlX2ZyYW1leworCXU4ICpkYXRhOworCXUzMiBsZW47CisJdTMyIHN0YXR1czsKKwl1MzIgaW5mbzsKKworCXZvaWQgKnByaXZkYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKKy8qIEZyYW1lIHN0cnVjdHVyZSwgaW5mbyBmaWVsZC4gKi8KKyNkZWZpbmUgUElEX0RBVEEwICAgICAgICAgICAgICAweDgwMDAwMDAwIC8qIERhdGEgdG9nZ2xlIHplcm8gKi8KKyNkZWZpbmUgUElEX0RBVEExICAgICAgICAgICAgICAweDQwMDAwMDAwIC8qIERhdGEgdG9nZ2xlIG9uZSAgKi8KKyNkZWZpbmUgUElEX1NFVFVQICAgICAgICAgICAgICAweDIwMDAwMDAwIC8qIHNldHVwIGJpdCAqLworI2RlZmluZSBTRVRVUF9TVEFUVVMgICAgICAgICAgIDB4MTAwMDAwMDAgLyogc2V0dXAgc3RhdHVzIGJpdCAqLworI2RlZmluZSBTRVRBRERSX1NUQVRVUyAgICAgICAgIDB4MDgwMDAwMDAgLyogc2V0dXB1cCBhZGRyZXNzIHN0YXR1cyBiaXQgKi8KKyNkZWZpbmUgTk9fUkVRICAgICAgICAgICAgICAgICAweDA0MDAwMDAwIC8qIEZyYW1lIHdpdGhvdXQgcmVxdWVzdCAqLworI2RlZmluZSBIT1NUX0RBVEEgICAgICAgICAgICAgIDB4MDIwMDAwMDAgLyogSG9zdCBkYXRhIGZyYW1lICovCisjZGVmaW5lIEZJUlNUX1BBQ0tFVF9JTl9GUkFNRSAgMHgwMTAwMDAwMCAvKiBmaXJzdCBwYWNrZXQgaW4gdGhlIGZyYW1lICovCisjZGVmaW5lIFRPS0VOX0ZSQU1FICAgICAgICAgICAgMHgwMDgwMDAwMCAvKiBIb3N0IHRva2VuIGZyYW1lICovCisjZGVmaW5lIFpMUCAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMCAvKiBaZXJvIGxlbmd0aCBwYWNrZXQgKi8KKyNkZWZpbmUgSU5fVE9LRU5fRlJBTUUgICAgICAgICAweDAwMjAwMDAwIC8qIEluIHRva2VuIHBhY2thZ2UgKi8KKyNkZWZpbmUgT1VUX1RPS0VOX0ZSQU1FICAgICAgICAweDAwMTAwMDAwIC8qIE91dCB0b2tlbiBwYWNrYWdlICovCisjZGVmaW5lIFNFVFVQX1RPS0VOX0ZSQU1FICAgICAgMHgwMDA4MDAwMCAvKiBTZXR1cCB0b2tlbiBwYWNrYWdlICovCisjZGVmaW5lIFNUQUxMX0ZSQU1FICAgICAgICAgICAgMHgwMDA0MDAwMCAvKiBTdGFsbCBoYW5kc2hha2UgKi8KKyNkZWZpbmUgTkFDS19GUkFNRSAgICAgICAgICAgICAweDAwMDIwMDAwIC8qIE5hY2sgaGFuZHNoYWtlICovCisjZGVmaW5lIE5PX1BJRCAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMCAvKiBObyBzZW5kIFBJRCAqLworI2RlZmluZSBOT19DUkMgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAgLyogTm8gc2VuZCBDUkMgKi8KKyNkZWZpbmUgSE9TVF9DT01NQU5EICAgICAgICAgICAweDAwMDA0MDAwIC8qIEhvc3QgY29tbWFuZCBmcmFtZSAgICovCisKKy8qIEZyYW1lIHN0YXR1cyBmaWVsZCAqLworLyogUmVjZWl2ZSBzaWRlICovCisjZGVmaW5lIEZSQU1FX09LICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBGcmFtZSB0cmFubWl0dGVkIG9yIHJlY2VpdmVkIE9LICovCisjZGVmaW5lIEZSQU1FX0VSUk9SICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBFcnJvciBvY2N1cmVkIG9uIGZyYW1lICovCisjZGVmaW5lIFNUQVJUX0ZSQU1FX0xPU1QgICAgICAgMHg0MDAwMDAwMCAvKiBTVEFSVF9GUkFNRV9MT1NUICovCisjZGVmaW5lIEVORF9GUkFNRV9MT1NUICAgICAgICAgMHgyMDAwMDAwMCAvKiBFTkRfRlJBTUVfTE9TVCAqLworI2RlZmluZSBSWF9FUl9OT05PQ1QgICAgICAgICAgIDB4MTAwMDAwMDAgLyogUnggTm9uIE9jdGV0IEFsaWduZWQgUGFja2V0ICovCisjZGVmaW5lIFJYX0VSX0JJVFNUVUZGICAgICAgICAgMHgwODAwMDAwMCAvKiBGcmFtZSBBYm9ydGVkIC0tUmVjZWl2ZWQgcGFja2V0CisJCQkJCSAgICAgd2l0aCBiaXQgc3R1ZmYgZXJyb3IgKi8KKyNkZWZpbmUgUlhfRVJfQ1JDICAgICAgICAgICAgICAweDA0MDAwMDAwIC8qIFJlY2VpdmVkIHBhY2tldCB3aXRoIENSQyBlcnJvciAqLworI2RlZmluZSBSWF9FUl9PVkVSVU4gICAgICAgICAgIDB4MDIwMDAwMDAgLyogT3Zlci1ydW4gb2NjdXJlZCBvbiByZWNlcHRpb24gKi8KKyNkZWZpbmUgUlhfRVJfUElEICAgICAgICAgICAgICAweDAxMDAwMDAwIC8qIFdyb25nIFBJRCByZWNlaXZlZCAqLworLyogVHJhbm1pdCBzaWRlICovCisjZGVmaW5lIFRYX0VSX05BSyAgICAgICAgICAgICAgMHgwMDgwMDAwMCAvKiBSZWNlaXZlZCBOQUsgaGFuZHNoYWtlICovCisjZGVmaW5lIFRYX0VSX1NUQUxMICAgICAgICAgICAgMHgwMDQwMDAwMCAvKiBSZWNlaXZlZCBTVEFMTCBoYW5kc2hha2UgKi8KKyNkZWZpbmUgVFhfRVJfVElNRU9VVCAgICAgICAgICAweDAwMjAwMDAwIC8qIFRyYW5zbWl0IHRpbWUgb3V0ICovCisjZGVmaW5lIFRYX0VSX1VOREVSVU4gICAgICAgICAgMHgwMDEwMDAwMCAvKiBUcmFuc21pdCB1bmRlcnJ1biAqLworI2RlZmluZSBGUkFNRV9JTlBST0dSRVNTICAgICAgIDB4MDAwODAwMDAgLyogRnJhbWUgaXMgYmVpbmcgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgRVJfREFUQV9VTkRFUlVOICAgICAgICAweDAwMDQwMDAwIC8qIEZyYW1lIGlzIHNob3J0ZXIgdGhlbiBleHBlY3RlZCAqLworI2RlZmluZSBFUl9EQVRBX09WRVJVTiAgICAgICAgIDB4MDAwMjAwMDAgLyogRnJhbWUgaXMgbG9uZ2VyIHRoZW4gZXhwZWN0ZWQgKi8KKworLyogUUUgVVNCIGZyYW1lIG9wZXJhdGlvbiBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgZnJhbWVfZ2V0X2xlbmd0aChmcm0pIChmcm0tPmxlbikKKyNkZWZpbmUgZnJhbWVfc2V0X2xlbmd0aChmcm0sIGxlbmcpIChmcm0tPmxlbiA9IGxlbmcpCisjZGVmaW5lIGZyYW1lX2dldF9kYXRhKGZybSkgKGZybS0+ZGF0YSkKKyNkZWZpbmUgZnJhbWVfc2V0X2RhdGEoZnJtLCBkYXQpIChmcm0tPmRhdGEgPSBkYXQpCisjZGVmaW5lIGZyYW1lX2dldF9pbmZvKGZybSkgKGZybS0+aW5mbykKKyNkZWZpbmUgZnJhbWVfc2V0X2luZm8oZnJtLCBpbmYpIChmcm0tPmluZm8gPSBpbmYpCisjZGVmaW5lIGZyYW1lX2dldF9zdGF0dXMoZnJtKSAoZnJtLT5zdGF0dXMpCisjZGVmaW5lIGZyYW1lX3NldF9zdGF0dXMoZnJtLCBzdGF0KSAoZnJtLT5zdGF0dXMgPSBzdGF0KQorI2RlZmluZSBmcmFtZV9nZXRfcHJpdmRhdGEoZnJtKSAoZnJtLT5wcml2ZGF0YSkKKyNkZWZpbmUgZnJhbWVfc2V0X3ByaXZkYXRhKGZybSwgZGF0KSAoZnJtLT5wcml2ZGF0YSA9IGRhdCkKKworc3RhdGljIGlubGluZSB2b2lkIHFlX2ZyYW1lX2NsZWFuKHN0cnVjdCBxZV9mcmFtZSAqZnJtKQoreworCWZyYW1lX3NldF9kYXRhKGZybSwgTlVMTCk7CisJZnJhbWVfc2V0X2xlbmd0aChmcm0sIDApOworCWZyYW1lX3NldF9zdGF0dXMoZnJtLCBGUkFNRV9PSyk7CisJZnJhbWVfc2V0X2luZm8oZnJtLCAwKTsKKwlmcmFtZV9zZXRfcHJpdmRhdGEoZnJtLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHFlX2ZyYW1lX2luaXQoc3RydWN0IHFlX2ZyYW1lICpmcm0pCit7CisJcWVfZnJhbWVfY2xlYW4oZnJtKTsKKwlJTklUX0xJU1RfSEVBRCgmKGZybS0+bm9kZSkpOworfQorCitzdHJ1Y3QgcWVfcmVxIHsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgcmVxOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJLyogZXBfcXVldWUoKSBmdW5jIHdpbGwgYWRkCisJIGEgcmVxdWVzdC0+cXVldWUgaW50byBhIHVkY19lcC0+cXVldWUgJ2QgdGFpbCAqLworCXN0cnVjdCBxZV9lcCAqZXA7CisJdW5zaWduZWQgbWFwcGVkOjE7Cit9OworCitzdHJ1Y3QgcWVfZXAgeworCXN0cnVjdCB1c2JfZXAgZXA7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQ7CisKKwl1OCBzdGF0ZTsKKworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpyeGJhc2U7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKm5fcnhiZDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqZV9yeGJkOworCisJc3RydWN0IHFlX2JkIF9faW9tZW0gKnR4YmFzZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqbl90eGJkOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpjX3R4YmQ7CisKKwlzdHJ1Y3QgcWVfZnJhbWUgKnJ4ZnJhbWU7CisJdTggKnJ4YnVmZmVyOworCWRtYV9hZGRyX3QgcnhidWZfZDsKKwl1OCByeGJ1Zm1hcDsKKwl1bnNpZ25lZCBjaGFyIGxvY2FsbmFjazsKKwlpbnQgaGFzX2RhdGE7CisKKwlzdHJ1Y3QgcWVfZnJhbWUgKnR4ZnJhbWU7CisJc3RydWN0IHFlX3JlcSAqdHhfcmVxOworCWludCBzZW50OyAgLypkYXRhIGFscmVhZHkgc2VudCAqLworCWludCBsYXN0OyAgLypkYXRhIHNlbnQgaW4gdGhlIGxhc3QgdGltZSovCisKKwl1OCBkaXI7CisJdTggZXBudW07CisJdTggdG07IC8qIHRyYW5zZmVyIG1vZGUgKi8KKwl1OCBkYXRhMDE7CisJdTggaW5pdDsKKworCXU4IGFscmVhZHlfc2VlbjsKKwl1OCBlbmFibGVfdGFza2xldDsKKwl1OCBzZXR1cF9zdGFnZTsKKwl1MzIgbGFzdF9pbzsgICAgICAgICAgICAvKiB0aW1lc3RhbXAgKi8KKworCWNoYXIgbmFtZVsxNF07CisKKwl1bnNpZ25lZCBkb3VibGVfYnVmOjE7CisJdW5zaWduZWQgc3RvcHBlZDoxOworCXVuc2lnbmVkIGZuZjoxOworCXVuc2lnbmVkIGhhc19kbWE6MTsKKworCXU4IGFja3dhaXQ7CisJdTggZG1hX2NoYW5uZWw7CisJdTE2IGRtYV9jb3VudGVyOworCWludCBsY2g7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKK3N0cnVjdCBxZV91ZGMgeworCXN0cnVjdCB1c2JfZ2FkZ2V0IGdhZGdldDsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHFlX2VwIGVwc1tVU0JfTUFYX0VORFBPSU5UU107CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBsb2NhbF9zZXR1cF9idWZmOworCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayBmb3Igc2V0L2NvbmZpZyBxZV91ZGMgKi8KKwl1bnNpZ25lZCBsb25nIHNvY190eXBlOwkJLyogUUUgb3IgQ1BNIHNvYyAqLworCisJc3RydWN0IHFlX3JlcSAqc3RhdHVzX3JlcTsJLyogZXAwIHN0YXR1cyByZXF1ZXN0ICovCisKKwkvKiBVU0IgYW5kIEVQIFBhcmFtZXRlciBCbG9jayBwb2ludGVyICovCisJc3RydWN0IHVzYl9kZXZpY2VfcGFyYSBfX2lvbWVtICp1c2JfcGFyYW07CisJc3RydWN0IHVzYl9lcF9wYXJhIF9faW9tZW0gKmVwX3BhcmFtWzRdOworCisJdTMyIG1heF9waXBlczsgICAgICAgICAgLyogRGV2aWNlIG1heCBwaXBlcyAqLworCXUzMiBtYXhfdXNlX2VuZHB0czsgICAgIC8qIE1heCBlbmRwb2ludGVzIHRvIGJlIHVzZWQgKi8KKwl1MzIgYnVzX3Jlc2V0OyAgICAgICAgICAvKiBEZXZpY2UgaXMgYnVzIHJlc2V0aW5nICovCisJdTMyIHJlc3VtZV9zdGF0ZTsgICAgICAgLyogVVNCIHN0YXRlIHRvIHJlc3VtZSovCisJdTMyIHVzYl9zdGF0ZTsgICAgICAgICAgLyogVVNCIGN1cnJlbnQgc3RhdGUgKi8KKwl1MzIgdXNiX25leHRfc3RhdGU7ICAgICAvKiBVU0IgbmV4dCBzdGF0ZSAqLworCXUzMiBlcDBfc3RhdGU7ICAgICAgICAgIC8qIEVucG9pbnQgemVybyBzdGF0ZSAqLworCXUzMiBlcDBfZGlyOyAgICAgICAgICAgIC8qIEVucG9pbnQgemVybyBkaXJlY3Rpb246IGNhbiBiZQorCQkJCVVTQl9ESVJfSU4gb3IgVVNCX0RJUl9PVVQqLworCXUzMiB1c2Jfc29mX2NvdW50OyAgICAgIC8qIFNPRiBjb3VudCAqLworCXUzMiBlcnJvcnM7ICAgICAgICAgICAgIC8qIFVTQiBFUlJPUnMgY291bnQgKi8KKworCXU4ICp0bXBidWY7CisJdTMyIGNfc3RhcnQ7CisJdTMyIGNfZW5kOworCisJdTggKm51bGxidWY7CisJdTggKnN0YXR1c2J1ZjsKKwlkbWFfYWRkcl90IG51bGxwOworCXU4IG51bGxtYXA7CisJdTggZGV2aWNlX2FkZHJlc3M7CS8qIERldmljZSBVU0IgYWRkcmVzcyAqLworCisJdW5zaWduZWQgaW50IHVzYl9jbG9jazsKKwl1bnNpZ25lZCBpbnQgdXNiX2lycTsKKwlzdHJ1Y3QgdXNiX2N0bHIgX19pb21lbSAqdXNiX3JlZ3M7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKworCXN0cnVjdCBjb21wbGV0aW9uICpkb25lOwkvKiB0byBtYWtlIHN1cmUgcmVsZWFzZSgpIGlzIGRvbmUgKi8KK307CisKKyNkZWZpbmUgRVBfU1RBVEVfSURMRQkwCisjZGVmaW5lIEVQX1NUQVRFX05BQ0sJMQorI2RlZmluZSBFUF9TVEFURV9TVEFMTAkyCisKKy8qCisgKiB0cmFuc21pdCBCRCdzIHN0YXR1cworICovCisjZGVmaW5lIFRfUiAgICAgICAgICAgMHg4MDAwMDAwMCAgICAgICAgIC8qIHJlYWR5IGJpdCAqLworI2RlZmluZSBUX1cgICAgICAgICAgIDB4MjAwMDAwMDAgICAgICAgICAvKiB3cmFwIGJpdCAqLworI2RlZmluZSBUX0kgICAgICAgICAgIDB4MTAwMDAwMDAgICAgICAgICAvKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLworI2RlZmluZSBUX0wgICAgICAgICAgIDB4MDgwMDAwMDAgICAgICAgICAvKiBsYXN0ICovCisjZGVmaW5lIFRfVEMgICAgICAgICAgMHgwNDAwMDAwMCAgICAgICAgIC8qIHRyYW5zbWl0IENSQyAqLworI2RlZmluZSBUX0NORiAgICAgICAgIDB4MDIwMDAwMDAgICAgICAgICAvKiB3YWl0IGZvciAgdHJhbnNtaXQgY29uZmlybSAqLworI2RlZmluZSBUX0xTUCAgICAgICAgIDB4MDEwMDAwMDAgICAgICAgICAvKiBMb3ctc3BlZWQgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgVF9QSUQgICAgICAgICAweDAwYzAwMDAwICAgICAgICAgLyogcGFja2V0IGlkICovCisjZGVmaW5lIFRfTkFLICAgICAgICAgMHgwMDEwMDAwMCAgICAgICAgIC8qIE5vIGFjay4gKi8KKyNkZWZpbmUgVF9TVEFMICAgICAgICAweDAwMDgwMDAwICAgICAgICAgLyogU3RhbGwgcmVjaWV2ZWQgKi8KKyNkZWZpbmUgVF9UTyAgICAgICAgICAweDAwMDQwMDAwICAgICAgICAgLyogdGltZSBvdXQgKi8KKyNkZWZpbmUgVF9VTiAgICAgICAgICAweDAwMDIwMDAwICAgICAgICAgLyogdW5kZXJydW4gKi8KKworI2RlZmluZSBERVZJQ0VfVF9FUlJPUiAgICAoVF9VTiB8IFRfVE8pCisjZGVmaW5lIEhPU1RfVF9FUlJPUiAgICAgIChUX1VOIHwgVF9UTyB8IFRfTkFLIHwgVF9TVEFMKQorI2RlZmluZSBERVZJQ0VfVF9CRF9NQVNLICBERVZJQ0VfVF9FUlJPUgorI2RlZmluZSBIT1NUX1RfQkRfTUFTSyAgICBIT1NUX1RfRVJST1IKKworI2RlZmluZSBUX1BJRF9TSElGVCAgIDYKKyNkZWZpbmUgVF9QSURfREFUQTAgICAweDAwODAwMDAwICAgICAgICAgLyogRGF0YSAwIHRvZ2dsZSAqLworI2RlZmluZSBUX1BJRF9EQVRBMSAgIDB4MDBjMDAwMDAgICAgICAgICAvKiBEYXRhIDEgdG9nZ2xlICovCisKKy8qCisgKiByZWNlaXZlIEJEJ3Mgc3RhdHVzCisgKi8KKyNkZWZpbmUgUl9FICAgICAgICAgICAweDgwMDAwMDAwICAgICAgICAgLyogYnVmZmVyIGVtcHR5ICovCisjZGVmaW5lIFJfVyAgICAgICAgICAgMHgyMDAwMDAwMCAgICAgICAgIC8qIHdyYXAgYml0ICovCisjZGVmaW5lIFJfSSAgICAgICAgICAgMHgxMDAwMDAwMCAgICAgICAgIC8qIGludGVycnVwdCBvbiByZWNlcHRpb24gKi8KKyNkZWZpbmUgUl9MICAgICAgICAgICAweDA4MDAwMDAwICAgICAgICAgLyogbGFzdCAqLworI2RlZmluZSBSX0YgICAgICAgICAgIDB4MDQwMDAwMDAgICAgICAgICAvKiBmaXJzdCAqLworI2RlZmluZSBSX1BJRCAgICAgICAgIDB4MDBjMDAwMDAgICAgICAgICAvKiBwYWNrZXQgaWQgKi8KKyNkZWZpbmUgUl9OTyAgICAgICAgICAweDAwMTAwMDAwICAgICAgICAgLyogUnggTm9uIE9jdGV0IEFsaWduZWQgUGFja2V0ICovCisjZGVmaW5lIFJfQUIgICAgICAgICAgMHgwMDA4MDAwMCAgICAgICAgIC8qIEZyYW1lIEFib3J0ZWQgKi8KKyNkZWZpbmUgUl9DUiAgICAgICAgICAweDAwMDQwMDAwICAgICAgICAgLyogQ1JDIEVycm9yICovCisjZGVmaW5lIFJfT1YgICAgICAgICAgMHgwMDAyMDAwMCAgICAgICAgIC8qIE92ZXJydW4gKi8KKworI2RlZmluZSBSX0VSUk9SICAgICAgIChSX05PIHwgUl9BQiB8IFJfQ1IgfCBSX09WKQorI2RlZmluZSBSX0JEX01BU0sgICAgIFJfRVJST1IKKworI2RlZmluZSBSX1BJRF9EQVRBMCAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl9QSURfREFUQTEgICAweDAwNDAwMDAwCisjZGVmaW5lIFJfUElEX1NFVFVQICAgMHgwMDgwMDAwMAorCisjZGVmaW5lIENQTV9VU0JfU1RPUF9UWCAweDJlNjAwMDAwCisjZGVmaW5lIENQTV9VU0JfUkVTVEFSVF9UWCAweDJlNjAwMDAwCisjZGVmaW5lIENQTV9VU0JfU1RPUF9UWF9PUENPREUgMHgwYQorI2RlZmluZSBDUE1fVVNCX1JFU1RBUlRfVFhfT1BDT0RFIDB4MGIKKyNkZWZpbmUgQ1BNX1VTQl9FUF9TSElGVCA1CisKKyNpZm5kZWYgQ09ORklHX0NQTQoraW5saW5lIGludCBjcG1fY29tbWFuZCh1MzIgY29tbWFuZCwgdTggb3Bjb2RlKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19RVUlDQ19FTkdJTkUKK2lubGluZSBpbnQgcWVfaXNzdWVfY21kKHUzMiBjbWQsIHUzMiBkZXZpY2UsIHU4IG1jbl9wcm90b2NvbCwKKwl1MzIgY21kX2lucHV0KQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9fRlNMX1FFX1VEQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKaW5kZXggNDVhZDU1Ni4uMDkxYmI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwpAQCAtMjMsMTEgKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpAQCAtNDQsMTEgKzQxLDkgQEAKIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgImZzbF91c2IyX3VkYy5oIgogCkBAIC02MSw4ICs1Niw4IEBACiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImZzbC11c2IyLXVkYyI7CiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzY1tdID0gRFJJVkVSX0RFU0M7CiAKLXZvbGF0aWxlIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyX2RldmljZSAqZHJfcmVncyA9IE5VTEw7Ci12b2xhdGlsZSBzdGF0aWMgc3RydWN0IHVzYl9zeXNfaW50ZXJmYWNlICp1c2Jfc3lzX3JlZ3MgPSBOVUxMOworc3RhdGljIHN0cnVjdCB1c2JfZHJfZGV2aWNlICpkcl9yZWdzOworc3RhdGljIHN0cnVjdCB1c2Jfc3lzX2ludGVyZmFjZSAqdXNiX3N5c19yZWdzOwogCiAvKiBpdCBpcyBpbml0aWFsaXplZCBpbiBwcm9iZSgpICAqLwogc3RhdGljIHN0cnVjdCBmc2xfdWRjICp1ZGNfY29udHJvbGxlciA9IE5VTEw7CkBAIC03NiwxNiArNzEsMTQgQEAKIAkud01heFBhY2tldFNpemUgPQlVU0JfTUFYX0NUUkxfUEFZTE9BRCwKIH07CiAKLXN0YXRpYyBpbnQgZnNsX3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1zdGF0aWMgaW50IGZzbF91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogc3RhdGljIHZvaWQgZnNsX2VwX2ZpZm9fZmx1c2goc3RydWN0IHVzYl9lcCAqX2VwKTsKIAogI2lmZGVmIENPTkZJR19QUEMzMgogI2RlZmluZSBmc2xfcmVhZGwoYWRkcikJCWluX2xlMzIoYWRkcikKLSNkZWZpbmUgZnNsX3dyaXRlbChhZGRyLCB2YWwzMikgb3V0X2xlMzIodmFsMzIsIGFkZHIpCisjZGVmaW5lIGZzbF93cml0ZWwodmFsMzIsIGFkZHIpIG91dF9sZTMyKGFkZHIsIHZhbDMyKQogI2Vsc2UKICNkZWZpbmUgZnNsX3JlYWRsKGFkZHIpCQlyZWFkbChhZGRyKQotI2RlZmluZSBmc2xfd3JpdGVsKGFkZHIsIHZhbDMyKSB3cml0ZWwoYWRkciwgdmFsMzIpCisjZGVmaW5lIGZzbF93cml0ZWwodmFsMzIsIGFkZHIpIHdyaXRlbCh2YWwzMiwgYWRkcikKICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE4NSwxMCArMTc4LDYgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAjZGVmaW5lIEZTTF9VRENfUkVTRVRfVElNRU9VVCAxMDAwCiAKLQkvKiBiZWZvcmUgaGVyZSwgbWFrZSBzdXJlIGRyX3JlZ3MgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KLQlpZiAoIXVkYykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBTdG9wIGFuZCByZXNldCB0aGUgdXNiIGNvbnRyb2xsZXIgKi8KIAl0bXAgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYmNtZCk7CiAJdG1wICY9IH5VU0JfQ01EX1JVTl9TVE9QOwpAQCAtMjAyLDcgKzE5MSw3IEBACiAJdGltZW91dCA9IGppZmZpZXMgKyBGU0xfVURDX1JFU0VUX1RJTUVPVVQ7CiAJd2hpbGUgKGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiY21kKSAmIFVTQl9DTURfQ1RSTF9SRVNFVCkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJRVJSKCJ1ZGMgcmVzZXQgdGltZW91dCEgXG4iKTsKKwkJCUVSUigidWRjIHJlc2V0IHRpbWVvdXQhXG4iKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJCWNwdV9yZWxheCgpOwpAQCAtMzE1LDcgKzMwNCw4IEBACiAJcmV0dXJuOwogfQogCi12b2lkIGRyX2VwX3NldHVwKHVuc2lnbmVkIGNoYXIgZXBfbnVtLCB1bnNpZ25lZCBjaGFyIGRpciwgdW5zaWduZWQgY2hhciBlcF90eXBlKQorc3RhdGljIHZvaWQgZHJfZXBfc2V0dXAodW5zaWduZWQgY2hhciBlcF9udW0sIHVuc2lnbmVkIGNoYXIgZGlyLAorCQkJdW5zaWduZWQgY2hhciBlcF90eXBlKQogewogCXVuc2lnbmVkIGludCB0bXBfZXBjdHJsID0gMDsKIApAQCAtNTYzLDcgKzU1Myw3IEBACiAJLyogbnVrZSBhbGwgcGVuZGluZyByZXF1ZXN0cyAoZG9lcyBmbHVzaCkgKi8KIAludWtlKGVwLCAtRVNIVVRET1dOKTsKIAotCWVwLT5kZXNjID0gMDsKKwllcC0+ZGVzYyA9IE5VTEw7CiAJZXAtPnN0b3BwZWQgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCkBAIC02MDIsNyArNTkyLDcgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgZnNsX3F1ZXVlX3RkKHN0cnVjdCBmc2xfZXAgKmVwLCBzdHJ1Y3QgZnNsX3JlcSAqcmVxKQorc3RhdGljIHZvaWQgZnNsX3F1ZXVlX3RkKHN0cnVjdCBmc2xfZXAgKmVwLCBzdHJ1Y3QgZnNsX3JlcSAqcmVxKQogewogCWludCBpID0gZXBfaW5kZXgoZXApICogMiArIGVwX2lzX2luKGVwKTsKIAl1MzIgdGVtcCwgYml0bWFzaywgdG1wX3N0YXQ7CkBAIC02NTMsMTMgKzY0MywxNiBAQAogCQkJfCBFUF9RVUVVRV9IRUFEX1NUQVRVU19IQUxUKSk7CiAJZFFILT5zaXplX2lvY19pbnRfc3RzICY9IHRlbXA7CiAKKwkvKiBFbnN1cmUgdGhhdCB1cGRhdGVzIHRvIHRoZSBRSCB3aWxsIG9jY3VyZSBiZWZvcmUgcHJpbWluZy4gKi8KKwl3bWIoKTsKKwogCS8qIFByaW1lIGVuZHBvaW50IGJ5IHdyaXRpbmcgMSB0byBFTkRQVFBSSU1FICovCiAJdGVtcCA9IGVwX2lzX2luKGVwKQogCQk/ICgxIDw8IChlcF9pbmRleChlcCkgKyAxNikpCiAJCTogKDEgPDwgKGVwX2luZGV4KGVwKSkpOwogCWZzbF93cml0ZWwodGVtcCwgJmRyX3JlZ3MtPmVuZHBvaW50cHJpbWUpOwogb3V0OgotCXJldHVybiAwOworCXJldHVybjsKIH0KIAogLyogRmlsbCBpbiB0aGUgZFREIHN0cnVjdHVyZQpAQCAtNzEwLDcgKzcwMyw3IEBACiAJCSppc19sYXN0ID0gMDsKIAogCWlmICgoKmlzX2xhc3QpID09IDApCi0JCVZEQkcoIm11bHRpLWR0ZCByZXF1ZXN0IVxuIik7CisJCVZEQkcoIm11bHRpLWR0ZCByZXF1ZXN0ISIpOwogCS8qIEZpbGwgaW4gdGhlIHRyYW5zZmVyIHNpemU7IHNldCBhY3RpdmUgYml0ICovCiAJc3dhcF90ZW1wID0gKCgqbGVuZ3RoIDw8IERURF9MRU5HVEhfQklUX1BPUykgfCBEVERfU1RBVFVTX0FDVElWRSk7CiAKQEAgLTc3MywxMSArNzY2LDExIEBACiAJLyogY2F0Y2ggdmFyaW91cyBib2d1cyBwYXJhbWV0ZXJzICovCiAJaWYgKCFfcmVxIHx8ICFyZXEtPnJlcS5jb21wbGV0ZSB8fCAhcmVxLT5yZXEuYnVmCiAJCQl8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpIHsKLQkJVkRCRygiJXMsIGJhZCBwYXJhbXNcbiIsIF9fZnVuY19fKTsKKwkJVkRCRygiJXMsIGJhZCBwYXJhbXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAodW5saWtlbHkoIV9lcCB8fCAhZXAtPmRlc2MpKSB7Ci0JCVZEQkcoIiVzLCBiYWQgZXBcbiIsIF9fZnVuY19fKTsKKwkJVkRCRygiJXMsIGJhZCBlcCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKQEAgLTEwNjksNyArMTA2Miw3IEBACiAKIAl1ZGMgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3QgZnNsX3VkYywgZ2FkZ2V0KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7Ci0JVkRCRygiVkJVUyAlc1xuIiwgaXNfYWN0aXZlID8gIm9uIiA6ICJvZmYiKTsKKwlWREJHKCJWQlVTICVzIiwgaXNfYWN0aXZlID8gIm9uIiA6ICJvZmYiKTsKIAl1ZGMtPnZidXNfYWN0aXZlID0gKGlzX2FjdGl2ZSAhPSAwKTsKIAlpZiAoY2FuX3B1bGx1cCh1ZGMpKQogCQlmc2xfd3JpdGVsKChmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYmNtZCkgfCBVU0JfQ01EX1JVTl9TVE9QKSwKQEAgLTExNDYsNyArMTEzOSw2IEBACiB7CiAJc3RydWN0IGZzbF9yZXEgKnJlcSA9IHVkYy0+c3RhdHVzX3JlcTsKIAlzdHJ1Y3QgZnNsX2VwICplcDsKLQlpbnQgc3RhdHVzID0gMDsKIAogCWlmIChkaXJlY3Rpb24gPT0gRVBfRElSX0lOKQogCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX0lOOwpAQCAtMTE2NCwyNyArMTE1NiwyMSBAQAogCXJlcS0+ZHRkX2NvdW50ID0gMDsKIAogCWlmIChmc2xfcmVxX3RvX2R0ZChyZXEpID09IDApCi0JCXN0YXR1cyA9IGZzbF9xdWV1ZV90ZChlcCwgcmVxKTsKKwkJZnNsX3F1ZXVlX3RkKGVwLCByZXEpOwogCWVsc2UKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoc3RhdHVzKQotCQlFUlIoIkNhbid0IHF1ZXVlIGVwMCBzdGF0dXMgcmVxdWVzdCBcbiIpOwogCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOwogCi0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdWRjX3Jlc2V0X2VwX3F1ZXVlKHN0cnVjdCBmc2xfdWRjICp1ZGMsIHU4IHBpcGUpCitzdGF0aWMgdm9pZCB1ZGNfcmVzZXRfZXBfcXVldWUoc3RydWN0IGZzbF91ZGMgKnVkYywgdTggcGlwZSkKIHsKIAlzdHJ1Y3QgZnNsX2VwICplcCA9IGdldF9lcF9ieV9waXBlKHVkYywgcGlwZSk7CiAKLQlpZiAoIWVwLT5uYW1lKQotCQlyZXR1cm4gMDsKLQotCW51a2UoZXAsIC1FU0hVVERPV04pOwotCi0JcmV0dXJuIDA7CisJaWYgKGVwLT5uYW1lKQorCQludWtlKGVwLCAtRVNIVVRET1dOKTsKIH0KIAogLyoKQEAgLTEyMDgsMTAgKzExOTQsOCBAQAogCQl1MTYgaW5kZXgsIHUxNiBsZW5ndGgpCiB7CiAJdTE2IHRtcCA9IDA7CQkvKiBTdGF0dXMsIGNwdSBlbmRpYW4gKi8KLQogCXN0cnVjdCBmc2xfcmVxICpyZXE7CiAJc3RydWN0IGZzbF9lcCAqZXA7Ci0JaW50IHN0YXR1cyA9IDA7CiAKIAllcCA9ICZ1ZGMtPmVwc1swXTsKIApAQCAtMTI1MCwxNCArMTIzNCwxMCBAQAogCiAJLyogcHJpbWUgdGhlIGRhdGEgcGhhc2UgKi8KIAlpZiAoKGZzbF9yZXFfdG9fZHRkKHJlcSkgPT0gMCkpCi0JCXN0YXR1cyA9IGZzbF9xdWV1ZV90ZChlcCwgcmVxKTsKKwkJZnNsX3F1ZXVlX3RkKGVwLCByZXEpOwogCWVsc2UJCQkvKiBubyBtZW0gKi8KIAkJZ290byBzdGFsbDsKIAotCWlmIChzdGF0dXMpIHsKLQkJRVJSKCJDYW4ndCByZXNwb25kIHRvIGdldHN0YXR1cyByZXF1ZXN0IFxuIik7Ci0JCWdvdG8gc3RhbGw7Ci0JfQogCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOwogCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9YTUlUOwogCXJldHVybjsKQEAgLTEzOTcsNyArMTM3Nyw3IEBACiAJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CiAJCWJyZWFrOwogCWNhc2UgV0FJVF9GT1JfU0VUVVA6Ci0JCUVSUigiVW5leHBlY3QgZXAwIHBhY2tldHMgXG4iKTsKKwkJRVJSKCJVbmV4cGVjdCBlcDAgcGFja2V0c1xuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVwMHN0YWxsKHVkYyk7CkBAIC0xNDc2LDcgKzE0NTYsNyBAQAogCQkJCXN0YXR1cyA9IC1FSUxTRVE7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UKLQkJCQlFUlIoIlVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQgKDB4JXgpIVxyXG4iLAorCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCAoMHgleCkhXG4iLAogCQkJCQllcnJvcnMpOwogCiAJCX0gZWxzZSBpZiAobGUzMl90b19jcHUoY3Vycl90ZC0+c2l6ZV9pb2Nfc3RzKQpAQCAtMTQ5NSw3ICsxNDc1LDcgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXRkX2NvbXBsZXRlKys7Ci0JCQlWREJHKCJkVEQgdHJhbnNtaXR0ZWQgc3VjY2Vzc2Z1bCAiKTsKKwkJCVZEQkcoImRURCB0cmFuc21pdHRlZCBzdWNjZXNzZnVsIik7CiAJCX0KIAogCQlpZiAoaiAhPSBjdXJyX3JlcS0+ZHRkX2NvdW50IC0gMSkKQEAgLTE1NjgsOSArMTU0OCw2IEBACiB7CiAJdTMyIHNwZWVkOwogCi0JaWYgKHVkYy0+YnVzX3Jlc2V0KQotCQl1ZGMtPmJ1c19yZXNldCA9IDA7Ci0KIAkvKiBCdXMgcmVzZXR0aW5nIGlzIGZpbmlzaGVkICovCiAJaWYgKCEoZnNsX3JlYWRsKCZkcl9yZWdzLT5wb3J0c2MxKSAmIFBPUlRTQ1hfUE9SVF9SRVNFVCkpIHsKIAkJLyogR2V0IHRoZSBzcGVlZCAqLwpAQCAtMTY3OCw4ICsxNjU1LDYgQEAKIAogCWlmIChmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpICYgUE9SVFNDWF9QT1JUX1JFU0VUKSB7CiAJCVZEQkcoIkJ1cyByZXNldCIpOwotCQkvKiBCdXMgaXMgcmVzZXRpbmcgKi8KLQkJdWRjLT5idXNfcmVzZXQgPSAxOwogCQkvKiBSZXNldCBhbGwgdGhlIHF1ZXVlcywgaW5jbHVkZSBYRCwgZFRELCBFUCBxdWV1ZQogCQkgKiBoZWFkIGFuZCBUUiBRdWV1ZSAqLwogCQlyZXNldF9xdWV1ZXModWRjKTsKQEAgLTE3NjgsNyArMTc0Myw3IEBACiAJfQogCiAJaWYgKGlycV9zcmMgJiAoVVNCX1NUU19FUlIgfCBVU0JfU1RTX1NZU19FUlIpKSB7Ci0JCVZEQkcoIkVycm9yIElSUSAleCAiLCBpcnFfc3JjKTsKKwkJVkRCRygiRXJyb3IgSVJRICV4IiwgaXJxX3NyYyk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CkBAIC0xNzk5LDcgKzE3NzQsNyBAQAogCS8qIGxvY2sgaXMgbmVlZGVkIGJ1dCB3aGV0aGVyIHNob3VsZCB1c2UgdGhpcyBsb2NrIG9yIGFub3RoZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKIAotCWRyaXZlci0+ZHJpdmVyLmJ1cyA9IDA7CisJZHJpdmVyLT5kcml2ZXIuYnVzID0gTlVMTDsKIAkvKiBob29rIHVwIHRoZSBkcml2ZXIgKi8KIAl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gZHJpdmVyOwogCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKQEAgLTE4MDksOCArMTc4NCw4IEBACiAJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKIAlpZiAocmV0dmFsKSB7CiAJCVZEQkcoImJpbmQgdG8gJXMgLS0+ICVkIiwgZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKLQkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKLQkJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IDA7CisJCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE4MTksMTIgKzE3OTQsMTIgQEAKIAl1ZGNfY29udHJvbGxlci0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX0FUVEFDSEVEOwogCXVkY19jb250cm9sbGVyLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKIAl1ZGNfY29udHJvbGxlci0+ZXAwX2RpciA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpbmQgdG8gZHJpdmVyICVzIFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogYmluZCB0byBkcml2ZXIgJXNcbiIsCiAJCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiBvdXQ6CiAJaWYgKHJldHZhbCkKLQkJcHJpbnRrKCJyZXR2YWwgJWQgXG4iLCByZXR2YWwpOworCQlwcmludGsoImdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTE4NDIsNyArMTgxNyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlcikKLQkJKHZvaWQpb3RnX3NldF9wZXJpcGhlcmFsKHVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlciwgMCk7CisJCW90Z19zZXRfcGVyaXBoZXJhbCh1ZGNfY29udHJvbGxlci0+dHJhbnNjZWl2ZXIsIE5VTEwpOwogCiAJLyogc3RvcCBEUiwgZGlzYWJsZSBpbnRyICovCiAJZHJfY29udHJvbGxlcl9zdG9wKHVkY19jb250cm9sbGVyKTsKQEAgLTE4NjMsMTAgKzE4MzgsMTAgQEAKIAogCS8qIHVuYmluZCBnYWRnZXQgYW5kIHVuaG9vayBkcml2ZXIuICovCiAJZHJpdmVyLT51bmJpbmQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOwotCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IDA7Ci0JdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IDA7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKIAotCXByaW50aygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xyXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlwcmludGsoInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTE5MjIsNyArMTg5Nyw3IEBACiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNic3RzKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCiAJCQkiVVNCIFN0YXR1cyBSZWc6XG4iCi0JCQkiRHIgU3VzcGVuZDogJWQiICJSZXNldCBSZWNlaXZlZDogJWQiICJTeXN0ZW0gRXJyb3I6ICVzIgorCQkJIkRyIFN1c3BlbmQ6ICVkIFJlc2V0IFJlY2VpdmVkOiAlZCBTeXN0ZW0gRXJyb3I6ICVzICIKIAkJCSJVU0IgRXJyb3IgSW50ZXJydXB0OiAlc1xuXG4iLAogCQkJKHRtcF9yZWcgJiBVU0JfU1RTX1NVU1BFTkQpID8gMSA6IDAsCiAJCQkodG1wX3JlZyAmIFVTQl9TVFNfUkVTRVQpID8gMSA6IDAsCkBAIC0xOTM0LDExICsxOTA5LDExIEBACiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiaW50cik7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAogCQkJIlVTQiBJbnRycnVwdCBFbmFibGUgUmVnOlxuIgotCQkJIlNsZWVwIEVuYWJsZTogJWQiICJTT0YgUmVjZWl2ZWQgRW5hYmxlOiAlZCIKKwkJCSJTbGVlcCBFbmFibGU6ICVkIFNPRiBSZWNlaXZlZCBFbmFibGU6ICVkICIKIAkJCSJSZXNldCBFbmFibGU6ICVkXG4iCi0JCQkiU3lzdGVtIEVycm9yIEVuYWJsZTogJWQiCisJCQkiU3lzdGVtIEVycm9yIEVuYWJsZTogJWQgIgogCQkJIlBvcnQgQ2hhbmdlIERlY3RlY3RlZCBFbmFibGU6ICVkXG4iCi0JCQkiVVNCIEVycm9yIEludHIgRW5hYmxlOiAlZCIgIlVTQiBJbnRyIEVuYWJsZTogJWRcblxuIiwKKwkJCSJVU0IgRXJyb3IgSW50ciBFbmFibGU6ICVkIFVTQiBJbnRyIEVuYWJsZTogJWRcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0lOVFJfREVWSUNFX1NVU1BFTkQpID8gMSA6IDAsCiAJCQkodG1wX3JlZyAmIFVTQl9JTlRSX1NPRl9FTikgPyAxIDogMCwKIAkJCSh0bXBfcmVnICYgVVNCX0lOVFJfUkVTRVRfRU4pID8gMSA6IDAsCkBAIC0xOTUxLDIxICsxOTI2LDIxIEBACiAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5mcmluZGV4KTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCi0JCQkiVVNCIEZyYW1lIEluZGV4IFJlZzoiICJGcmFtZSBOdW1iZXIgaXMgMHgleFxuXG4iLAorCQkJIlVTQiBGcmFtZSBJbmRleCBSZWc6IEZyYW1lIE51bWJlciBpcyAweCV4XG5cbiIsCiAJCQkodG1wX3JlZyAmIFVTQl9GUklOREVYX01BU0tTKSk7CiAJc2l6ZSAtPSB0OwogCW5leHQgKz0gdDsKIAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmRldmljZWFkZHIpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJVU0IgRGV2aWNlIEFkZHJlc3MgUmVnOiIgIkRldmljZSBBZGRyIGlzIDB4JXhcblxuIiwKKwkJCSJVU0IgRGV2aWNlIEFkZHJlc3MgUmVnOiBEZXZpY2UgQWRkciBpcyAweCV4XG5cbiIsCiAJCQkodG1wX3JlZyAmIFVTQl9ERVZJQ0VfQUREUkVTU19NQVNLKSk7CiAJc2l6ZSAtPSB0OwogCW5leHQgKz0gdDsKIAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmVuZHBvaW50bGlzdGFkZHIpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJVU0IgRW5kcG9pbnQgTGlzdCBBZGRyZXNzIFJlZzoiCisJCQkiVVNCIEVuZHBvaW50IExpc3QgQWRkcmVzcyBSZWc6ICIKIAkJCSJEZXZpY2UgQWRkciBpcyAweCV4XG5cbiIsCiAJCQkodG1wX3JlZyAmIFVTQl9FUF9MSVNUX0FERFJFU1NfTUFTSykpOwogCXNpemUgLT0gdDsKQEAgLTE5NzQsMTEgKzE5NDksMTIgQEAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5wb3J0c2MxKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCiAJCSJVU0IgUG9ydCBTdGF0dXMmQ29udHJvbCBSZWc6XG4iCi0JCSJQb3J0IFRyYW5zY2VpdmVyIFR5cGUgOiAlcyIgIlBvcnQgU3BlZWQ6ICVzIFxuIgotCQkiUEhZIExvdyBQb3dlciBTdXNwZW5kOiAlcyIgIlBvcnQgUmVzZXQ6ICVzIgotCQkiUG9ydCBTdXNwZW5kIE1vZGU6ICVzIFxuIiAiT3Zlci1jdXJyZW50IENoYW5nZTogJXMiCisJCSJQb3J0IFRyYW5zY2VpdmVyIFR5cGUgOiAlcyBQb3J0IFNwZWVkOiAlc1xuIgorCQkiUEhZIExvdyBQb3dlciBTdXNwZW5kOiAlcyBQb3J0IFJlc2V0OiAlcyAiCisJCSJQb3J0IFN1c3BlbmQgTW9kZTogJXNcbiIKKwkJIk92ZXItY3VycmVudCBDaGFuZ2U6ICVzICIKIAkJIlBvcnQgRW5hYmxlL0Rpc2FibGUgQ2hhbmdlOiAlc1xuIgotCQkiUG9ydCBFbmFibGVkL0Rpc2FibGVkOiAlcyIKKwkJIlBvcnQgRW5hYmxlZC9EaXNhYmxlZDogJXMgIgogCQkiQ3VycmVudCBDb25uZWN0IFN0YXR1czogJXNcblxuIiwgKCB7CiAJCQljaGFyICpzOwogCQkJc3dpdGNoICh0bXBfcmVnICYgUE9SVFNDWF9QVFNfRlNMUykgewpAQCAtMjAyMyw3ICsxOTk5LDcgQEAKIAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYm1vZGUpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJVU0IgTW9kZSBSZWc6IiAiQ29udHJvbGxlciBNb2RlIGlzIDogJXNcblxuIiwgKCB7CisJCQkiVVNCIE1vZGUgUmVnOiBDb250cm9sbGVyIE1vZGUgaXM6ICVzXG5cbiIsICggewogCQkJCWNoYXIgKnM7CiAJCQkJc3dpdGNoICh0bXBfcmVnICYgVVNCX01PREVfQ1RSTF9NT0RFX0hPU1QpIHsKIAkJCQljYXNlIFVTQl9NT0RFX0NUUkxfTU9ERV9JRExFOgpAQCAtMjA0Miw3ICsyMDE4LDcgQEAKIAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmVuZHB0c2V0dXBzdGF0KTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCi0JCQkiRW5kcG9pbnQgU2V0dXAgU3RhdHVzIFJlZzoiICJTRVRVUCBvbiBlcCAweCV4XG5cbiIsCisJCQkiRW5kcG9pbnQgU2V0dXAgU3RhdHVzIFJlZzogU0VUVVAgb24gZXAgMHgleFxuXG4iLAogCQkJKHRtcF9yZWcgJiBFUF9TRVRVUF9TVEFUVVNfTUFTSykpOwogCXNpemUgLT0gdDsKIAluZXh0ICs9IHQ7CkBAIC0yMDU1LDEyICsyMDMxLDEyIEBACiAJCW5leHQgKz0gdDsKIAl9CiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcG9pbnRwcmltZSk7Ci0JdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiRVAgUHJpbWUgUmVnID0gWzB4JXhdXG4iLCB0bXBfcmVnKTsKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJFUCBQcmltZSBSZWcgPSBbMHgleF1cblxuIiwgdG1wX3JlZyk7CiAJc2l6ZSAtPSB0OwogCW5leHQgKz0gdDsKIAogCXRtcF9yZWcgPSB1c2Jfc3lzX3JlZ3MtPnNub29wMTsKLQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJcblNub29wMSBSZWcgOiA9IFsweCV4XVxuXG4iLCB0bXBfcmVnKTsKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJTbm9vcDEgUmVnIDogPSBbMHgleF1cblxuIiwgdG1wX3JlZyk7CiAJc2l6ZSAtPSB0OwogCW5leHQgKz0gdDsKIApAQCAtMjA4NCw3ICsyMDYwLDcgQEAKIAl9IGVsc2UgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKIAkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCAweCV4ICBidWYgJXBcbiIsCisJCQkJInJlcSAlcCBhY3R1YWwgMHgleCBsZW5ndGggMHgleCBidWYgJXBcbiIsCiAJCQkJJnJlcS0+cmVxLCByZXEtPnJlcS5hY3R1YWwsCiAJCQkJcmVxLT5yZXEubGVuZ3RoLCByZXEtPnJlcS5idWYpOwogCQkJc2l6ZSAtPSB0OwpAQCAtMjExMCw3ICsyMDg2LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CiAJCQkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCQkJCSJyZXEgJXAgYWN0dWFsIDB4JXggbGVuZ3RoIgorCQkJCQkJInJlcSAlcCBhY3R1YWwgMHgleCBsZW5ndGggIgogCQkJCQkJIjB4JXggIGJ1ZiAlcFxuIiwKIAkJCQkJCSZyZXEtPnJlcSwgcmVxLT5yZXEuYWN0dWFsLAogCQkJCQkJcmVxLT5yZXEubGVuZ3RoLCByZXEtPnJlcS5idWYpOwpAQCAtMjIwMiw3ICsyMTc4LDYgQEAKIAl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9QT1dFUkVEOwogCXVkYy0+ZXAwX2RpciA9IDA7CiAJdWRjLT5yZW1vdGVfd2FrZXVwID0gMDsJLyogZGVmYXVsdCB0byAwIG9uIHJlc2V0ICovCi0Jc3Bpbl9sb2NrX2luaXQoJnVkYy0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyNTQsNyArMjIyOSw3IEBACiAJdTMyIGRjY3BhcmFtczsKIAogCWlmIChzdHJjbXAocGRldi0+bmFtZSwgZHJpdmVyX25hbWUpKSB7Ci0JCVZEQkcoIldyb25nIGRldmljZVxuIik7CisJCVZEQkcoIldyb25nIGRldmljZSIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTIyNjQsMjMgKzIyMzksMjYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJnVkY19jb250cm9sbGVyLT5sb2NrKTsKKwl1ZGNfY29udHJvbGxlci0+c3RvcHBlZCA9IDE7CisKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7Ci0JCWtmcmVlKHVkY19jb250cm9sbGVyKTsKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAogCQkJCWRyaXZlcl9uYW1lKSkgewotCQlFUlIoInJlcXVlc3QgbWVtIHJlZ2lvbiBmb3IgJXMgZmFpbGVkIFxuIiwgcGRldi0+bmFtZSk7Ci0JCWtmcmVlKHVkY19jb250cm9sbGVyKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJRVJSKCJyZXF1ZXN0IG1lbSByZWdpb24gZm9yICVzIGZhaWxlZFxuIiwgcGRldi0+bmFtZSk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfa2ZyZWU7CiAJfQogCiAJZHJfcmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAJaWYgKCFkcl9yZWdzKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOwogCX0KIAogCXVzYl9zeXNfcmVncyA9IChzdHJ1Y3QgdXNiX3N5c19pbnRlcmZhY2UgKikKQEAgLTIyOTEsNyArMjI2OSw3IEBACiAJaWYgKCEoZGNjcGFyYW1zICYgRENDUEFSQU1TX0RDKSkgewogCQlFUlIoIlRoaXMgU09DIGRvZXNuJ3Qgc3VwcG9ydCBkZXZpY2Ugcm9sZVxuIik7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnJfaW91bm1hcDsKIAl9CiAJLyogR2V0IG1heCBkZXZpY2UgZW5kcG9pbnRzICovCiAJLyogREVOIGlzIGJpZGlyZWN0aW9uYWwgZXAgbnVtYmVyLCBtYXhfZXAgZG91YmxlcyB0aGUgbnVtYmVyICovCkBAIC0yMzAwLDIyICsyMjc4LDIyIEBACiAJdWRjX2NvbnRyb2xsZXItPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKCF1ZGNfY29udHJvbGxlci0+aXJxKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnJfaW91bm1hcDsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycSh1ZGNfY29udHJvbGxlci0+aXJxLCBmc2xfdWRjX2lycSwgSVJRRl9TSEFSRUQsCiAJCQlkcml2ZXJfbmFtZSwgdWRjX2NvbnRyb2xsZXIpOwogCWlmIChyZXQgIT0gMCkgewotCQlFUlIoImNhbm5vdCByZXF1ZXN0IGlycSAlZCBlcnIgJWQgXG4iLAorCQlFUlIoImNhbm5vdCByZXF1ZXN0IGlycSAlZCBlcnIgJWRcbiIsCiAJCQkJdWRjX2NvbnRyb2xsZXItPmlycSwgcmV0KTsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIHVkYyBzdHJ1Y3R1cmUgaW5jbHVkaW5nIFFIIG1lbWJlciBhbmQgb3RoZXIgbWVtYmVyICovCiAJaWYgKHN0cnVjdF91ZGNfc2V0dXAodWRjX2NvbnRyb2xsZXIsIHBkZXYpKSB7CiAJCUVSUigiQ2FuJ3QgaW5pdGlhbGl6ZSB1ZGMgZGF0YSBzdHJ1Y3R1cmVcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjM7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAogCS8qIGluaXRpYWxpemUgdXNiIGh3IHJlZyBleGNlcHQgZm9yIHJlZ3MgZm9yIEVQLApAQCAtMjMzNiw3ICsyMzE0LDcgQEAKIAl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycjM7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCiAJLyogc2V0dXAgUUggYW5kIGVwY3RybCBmb3IgZXAwICovCiAJZXAwX3NldHVwKHVkY19jb250cm9sbGVyKTsKQEAgLTIzNjYsMjAgKzIzNDQsMjIgQEAKIAkJCURURF9BTElHTk1FTlQsIFVEQ19ETUFfQk9VTkRBUlkpOwogCWlmICh1ZGNfY29udHJvbGxlci0+dGRfcG9vbCA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyNDsKKwkJZ290byBlcnJfdW5yZWdpc3RlcjsKIAl9CiAJY3JlYXRlX3Byb2NfZmlsZSgpOwogCXJldHVybiAwOwogCi1lcnI0OgorZXJyX3VucmVnaXN0ZXI6CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKLWVycjM6CitlcnJfZnJlZV9pcnE6CiAJZnJlZV9pcnEodWRjX2NvbnRyb2xsZXItPmlycSwgdWRjX2NvbnRyb2xsZXIpOwotZXJyMjoKK2Vycl9pb3VubWFwOgogCWlvdW5tYXAoZHJfcmVncyk7Ci1lcnIxOgorZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CitlcnJfa2ZyZWU6CiAJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOworCXVkY19jb250cm9sbGVyID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDY5LDcgKzI0NDksNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOwotCXByaW50aygiJXMgdW5yZWdpc3RlcmVkIFxuIiwgZHJpdmVyX2Rlc2MpOworCXByaW50aygiJXMgdW5yZWdpc3RlcmVkXG4iLCBkcml2ZXJfZGVzYyk7CiB9CiAKIG1vZHVsZV9leGl0KHVkY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaAppbmRleCA2MTMxNzUyLi5lNjNlZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCkBAIC00MjQsMTYgKzQyNCw2IEBACiAvKiBDb250cm9sbGVyIGRtYSBib3VuZGFyeSAqLwogI2RlZmluZSBVRENfRE1BX0JPVU5EQVJZCQkJMHgxMDAwCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICMjIyMjIGVudW0gZGF0YQotKi8KLXR5cGVkZWYgZW51bSB7Ci0JZV9VTFBJLAotCWVfVVRNSV84QklULAotCWVfVVRNSV8xNkJJVCwKLQllX1NFUklBTAotfSBlX1BoeUludGVyZmFjZTsKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogIyMjIGRyaXZlciBwcml2YXRlIGRhdGEKQEAgLTQ2OSw5ICs0NTksOSBAQAogI2RlZmluZSBFUF9ESVJfT1VUCTAKIAogc3RydWN0IGZzbF91ZGMgewotCiAJc3RydWN0IHVzYl9nYWRnZXQgZ2FkZ2V0OwogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBjb21wbGV0aW9uICpkb25lOwkvKiB0byBtYWtlIHN1cmUgcmVsZWFzZSgpIGlzIGRvbmUgKi8KIAlzdHJ1Y3QgZnNsX2VwICplcHM7CiAJdW5zaWduZWQgaW50IG1heF9lcDsKIAl1bnNpZ25lZCBpbnQgaXJxOwpAQCAtNDkyLDIwICs0ODIsMTMgQEAKIAlzaXplX3QgZXBfcWhfc2l6ZTsJCS8qIHNpemUgYWZ0ZXIgYWxpZ25tZW50IGFkanVzdG1lbnQqLwogCWRtYV9hZGRyX3QgZXBfcWhfZG1hOwkJLyogZG1hIGFkZHJlc3Mgb2YgUUggKi8KIAotCXUzMiBtYXhfcGlwZXM7CQkvKiBEZXZpY2UgbWF4IHBpcGVzICovCi0JdTMyIG1heF91c2VfZW5kcHRzOwkvKiBNYXggZW5kcG9pbnRlcyB0byBiZSB1c2VkICovCi0JdTMyIGJ1c19yZXNldDsJCS8qIERldmljZSBpcyBidXMgcmVzZXRpbmcgKi8KKwl1MzIgbWF4X3BpcGVzOyAgICAgICAgICAvKiBEZXZpY2UgbWF4IHBpcGVzICovCiAJdTMyIHJlc3VtZV9zdGF0ZTsJLyogVVNCIHN0YXRlIHRvIHJlc3VtZSAqLwogCXUzMiB1c2Jfc3RhdGU7CQkvKiBVU0IgY3VycmVudCBzdGF0ZSAqLwotCXUzMiB1c2JfbmV4dF9zdGF0ZTsJLyogVVNCIG5leHQgc3RhdGUgKi8KIAl1MzIgZXAwX3N0YXRlOwkJLyogRW5kcG9pbnQgemVybyBzdGF0ZSAqLwogCXUzMiBlcDBfZGlyOwkJLyogRW5kcG9pbnQgemVybyBkaXJlY3Rpb246IGNhbiBiZQogCQkJCSAgIFVTQl9ESVJfSU4gb3IgVVNCX0RJUl9PVVQgKi8KLQl1MzIgdXNiX3NvZl9jb3VudDsJLyogU09GIGNvdW50ICovCi0JdTMyIGVycm9yczsJCS8qIFVTQiBFUlJPUnMgY291bnQgKi8KIAl1OCBkZXZpY2VfYWRkcmVzczsJLyogRGV2aWNlIFVTQiBhZGRyZXNzICovCi0KLQlzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZTsJLyogdG8gbWFrZSBzdXJlIHJlbGVhc2UoKSBpcyBkb25lICovCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCmluZGV4IDE3ZDk5MDUuLjRlMzEwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKQEAgLTE1MSw2ICsxNTEsMTMgQEAKICNkZWZpbmUJZ2FkZ2V0X2lzX202NjU5MihnKQkwCiAjZW5kaWYKIAorLyogRnJlZXNjYWxlIENQTS9RRSBVREMgU1VQUE9SVCAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRQorI2RlZmluZSBnYWRnZXRfaXNfZnNsX3FlKGcpCSFzdHJjbXAoImZzbF9xZV91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZSBnYWRnZXRfaXNfZnNsX3FlKGcpCTAKKyNlbmRpZgorCiAKIC8vIENPTkZJR19VU0JfR0FER0VUX1NYMgogLy8gQ09ORklHX1VTQl9HQURHRVRfQVUxWDAwCkBAIC0yMTYsNiArMjIzLDggQEAKIAkJcmV0dXJuIDB4MjA7CiAJZWxzZSBpZiAoZ2FkZ2V0X2lzX202NjU5MihnYWRnZXQpKQogCQlyZXR1cm4gMHgyMTsKKwllbHNlIGlmIChnYWRnZXRfaXNfZnNsX3FlKGdhZGdldCkpCisJCXJldHVybiAweDIyOwogCXJldHVybiAtRU5PRU5UOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IDZlZWU3NjAuLjYwZDNmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkgKiBwb3dlciBwcm9wZXJ0aWVzIG9mIHRoZSBkZXZpY2UuIElzIGl0IHNlbGZwb3dlcmVkPwogCSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FLAotCS5iTWF4UG93ZXIgPQkJMSwKKwkuYk1heFBvd2VyID0JCUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVyAvIDIsCiB9OwogCiAvKiBCLjMuMSAgU3RhbmRhcmQgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDVjZmI1ZWIuLjhhZTcwZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMTc4LDYgKzE3OCw3IEBACiAKIAkvKiBlcF9yZXNldCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkICovCiAJZXAtPnN0b3BwZWQgPSAwOworCWVwLT53ZWRnZWQgPSAwOwogCWVwLT5vdXRfb3ZlcmZsb3cgPSAwOwogCiAJLyogc2V0IHNwZWVkLWRlcGVuZGVudCBtYXggcGFja2V0OyBtYXkga2ljayBpbiBoaWdoIGJhbmR3aWR0aCAqLwpAQCAtMTIxOCw3ICsxMjE5LDcgQEAKIHN0YXRpYyBpbnQgbmV0MjI4MF9maWZvX3N0YXR1cyAoc3RydWN0IHVzYl9lcCAqX2VwKTsKIAogc3RhdGljIGludAotbmV0MjI4MF9zZXRfaGFsdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCituZXQyMjgwX3NldF9oYWx0X2FuZF93ZWRnZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSwgaW50IHdlZGdlZCkKIHsKIAlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CkBAIC0xMjM5LDE2ICsxMjQwLDIxIEBACiAJZWxzZSBpZiAoZXAtPmlzX2luICYmIHZhbHVlICYmIG5ldDIyODBfZmlmb19zdGF0dXMgKF9lcCkgIT0gMCkKIAkJcmV0dmFsID0gLUVBR0FJTjsKIAllbHNlIHsKLQkJVkRFQlVHIChlcC0+ZGV2LCAiJXMgJXMgaGFsdFxuIiwgX2VwLT5uYW1lLAotCQkJCXZhbHVlID8gInNldCIgOiAiY2xlYXIiKTsKKwkJVkRFQlVHIChlcC0+ZGV2LCAiJXMgJXMgJXNcbiIsIF9lcC0+bmFtZSwKKwkJCQl2YWx1ZSA/ICJzZXQiIDogImNsZWFyIiwKKwkJCQl3ZWRnZWQgPyAid2VkZ2UiIDogImhhbHQiKTsKIAkJLyogc2V0L2NsZWFyLCB0aGVuIHN5bmNoIG1lbW9yeSB2aWV3cyB3aXRoIHRoZSBkZXZpY2UgKi8KIAkJaWYgKHZhbHVlKSB7CiAJCQlpZiAoZXAtPm51bSA9PSAwKQogCQkJCWVwLT5kZXYtPnByb3RvY29sX3N0YWxsID0gMTsKIAkJCWVsc2UKIAkJCQlzZXRfaGFsdCAoZXApOwotCQl9IGVsc2UKKwkJCWlmICh3ZWRnZWQpCisJCQkJZXAtPndlZGdlZCA9IDE7CisJCX0gZWxzZSB7CiAJCQljbGVhcl9oYWx0IChlcCk7CisJCQllcC0+d2VkZ2VkID0gMDsKKwkJfQogCQkodm9pZCkgcmVhZGwgKCZlcC0+cmVncy0+ZXBfcnNwKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKQEAgLTEyNTcsNiArMTI2MywyMCBAQAogfQogCiBzdGF0aWMgaW50CituZXQyMjgwX3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXJldHVybiBuZXQyMjgwX3NldF9oYWx0X2FuZF93ZWRnZShfZXAsIHZhbHVlLCAwKTsKK30KKworc3RhdGljIGludAorbmV0MjI4MF9zZXRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCWlmICghX2VwIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2UoX2VwLCAxLCAxKTsKK30KKworc3RhdGljIGludAogbmV0MjI4MF9maWZvX3N0YXR1cyAoc3RydWN0IHVzYl9lcCAqX2VwKQogewogCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKQEAgLTEzMDIsNiArMTMyMiw3IEBACiAJLmRlcXVldWUJPSBuZXQyMjgwX2RlcXVldWUsCiAKIAkuc2V0X2hhbHQJPSBuZXQyMjgwX3NldF9oYWx0LAorCS5zZXRfd2VkZ2UJPSBuZXQyMjgwX3NldF93ZWRnZSwKIAkuZmlmb19zdGF0dXMJPSBuZXQyMjgwX2ZpZm9fc3RhdHVzLAogCS5maWZvX2ZsdXNoCT0gbmV0MjI4MF9maWZvX2ZsdXNoLAogfTsKQEAgLTI0MTAsOSArMjQzMSwxNCBAQAogCQkJCWdvdG8gZG9fc3RhbGw7CiAJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB3X2luZGV4KSkgPT0gMCkKIAkJCQlnb3RvIGRvX3N0YWxsOwotCQkJY2xlYXJfaGFsdCAoZSk7CisJCQlpZiAoZS0+d2VkZ2VkKSB7CisJCQkJVkRFQlVHKGRldiwgIiVzIHdlZGdlZCwgaGFsdCBub3QgY2xlYXJlZFxuIiwKKwkJCQkJCWVwLT5lcC5uYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJVkRFQlVHKGRldiwgIiVzIGNsZWFyIGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKKwkJCQljbGVhcl9oYWx0KGUpOworCQkJfQogCQkJYWxsb3dfc3RhdHVzIChlcCk7Ci0JCQlWREVCVUcgKGRldiwgIiVzIGNsZWFyIGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKIAkJCWdvdG8gbmV4dF9lbmRwb2ludHM7CiAJCQl9CiAJCQlicmVhazsKQEAgLTI0MjcsNiArMjQ1Myw4IEBACiAJCQkJZ290byBkb19zdGFsbDsKIAkJCWlmICgoZSA9IGdldF9lcF9ieV9hZGRyIChkZXYsIHdfaW5kZXgpKSA9PSAwKQogCQkJCWdvdG8gZG9fc3RhbGw7CisJCQlpZiAoZS0+ZXAubmFtZSA9PSBlcDBuYW1lKQorCQkJCWdvdG8gZG9fc3RhbGw7CiAJCQlzZXRfaGFsdCAoZSk7CiAJCQlhbGxvd19zdGF0dXMgKGVwKTsKIAkJCVZERUJVRyAoZGV2LCAiJXMgc2V0IGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCmluZGV4IDgxYTcxZGIuLmMzNjg1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaApAQCAtMTA5LDYgKzEwOSw3IEBACiAJCQkJCQlpbl9maWZvX3ZhbGlkYXRlIDogMSwKIAkJCQkJCW91dF9vdmVyZmxvdyA6IDEsCiAJCQkJCQlzdG9wcGVkIDogMSwKKwkJCQkJCXdlZGdlZCA6IDEsCiAJCQkJCQlpc19pbiA6IDEsCiAJCQkJCQlpc19pc28gOiAxLAogCQkJCQkJcmVzcG9uZGVkIDogMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKaW5kZXggYmI1NGNjYS4uMzRlOWUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTIzMTMsNiArMjMxMywxMyBAQAogCiAJdG1wID0gb21hcF9yZWFkbChPVEdfUkVWKTsKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJLyoKKwkJICogUkVWSVNJVDogTm90IGNsZWFyIGhvdyB0aGlzIHdvcmtzIG9uIE9NQVAyLiAgdHJhbnMKKwkJICogaXMgQU5EZWQgdG8gcHJvZHVjZSBiaXRzIDcgYW5kIDgsIHdoaWNoIG1pZ2h0IG1ha2UKKwkJICogc2Vuc2UgZm9yIFVTQl9UUkFOU0NFSVZFUl9DVFJMIG9uIE9NQVAxLAorCQkgKiBidXQgd2l0aCBDT05UUk9MX0RFVkNPTkYsIHRoZXNlIGJpdHMgaGF2ZSBzb21ldGhpbmcgdG8KKwkJICogZG8gd2l0aCB0aGUgZnJhbWUgYWRqdXN0bWVudCBjb3VudGVyIGFuZCBNY0JTUDIuCisJCSAqLwogCQljdHJsX25hbWUgPSAiY29udHJvbF9kZXZjb25mIjsKIAkJdHJhbnMgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDJiM2I5ZTEuLjVhMzAzNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlERVZfQ09ORklHX1ZBTFVFLAogCS5pQ29uZmlndXJhdGlvbiA9CTAsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlciA9CQkxCS8qIFNlbGYtUG93ZXJlZCAqLworCS5iTWF4UG93ZXIgPQkJQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXIC8gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGludGZfZGVzYyA9IHsKQEAgLTEyNzgsOCArMTI3OCw3IEBACiAJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KIAlpZiAodmFsdWUgPj0gMCkgewogCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwotCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGgKLQkJCQkmJiAodmFsdWUgJSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0KSA9PSAwOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGg7CiAJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAodmFsdWUgPCAwKSB7CiAJCQlEQkcoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CkBAIC0xNDc3LDcgKzE0NzYsNiBAQAogCWlmIChnYWRnZXQtPmlzX290ZykgewogCQlvdGdfZGVzYy5ibUF0dHJpYnV0ZXMgfD0gVVNCX09UR19ITlAsCiAJCWNvbmZpZ19kZXNjLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7Ci0JCWNvbmZpZ19kZXNjLmJNYXhQb3dlciA9IDQ7CiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCA3Y2JjNzhhLi5jYWEzN2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC02NTEsNyArNjUwLDcgQEAKIAlzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcTsKIAogCXJlcSA9IGt6YWxsb2Moc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7Ci0JaWYgKCFyZXEgfHwgIV9lcCkKKwlpZiAoIXJlcSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlJTklUX0xJU1RfSEVBRCgmcmVxLT5xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCmluZGV4IDI5ZDEzZWIuLjAwYmEwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCkBAIC0xNjUxLDcgKzE2NTEsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKCFkcml2ZXItPmJpbmQgfHwgIWRyaXZlci0+c2V0dXAKLQkJCXx8IGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0ZVTEwpIHsKKwkJCXx8IGRyaXZlci0+c3BlZWQgPCBVU0JfU1BFRURfRlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgZHJpdmVyOiBiaW5kICVwIHNldHVwICVwIHNwZWVkICVkXG4iLAogCQkJZHJpdmVyLT5iaW5kLCBkcml2ZXItPnNldHVwLCBkcml2ZXItPnNwZWVkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODk0LDExICsxODk0LDggQEAKIAkJdWRjLT5yZWdzX2luZm8gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVUdPLAogCQkJCXMzYzI0MTBfdWRjX2RlYnVnZnNfcm9vdCwKIAkJCQl1ZGMsICZzM2MyNDEwX3VkY19kZWJ1Z2ZzX2ZvcHMpOwotCQlpZiAoSVNfRVJSKHVkYy0+cmVnc19pbmZvKSkgewotCQkJZGV2X3dhcm4oZGV2LCAiZGVidWdmcyBmaWxlIGNyZWF0aW9uIGZhaWxlZCAlbGRcbiIsCi0JCQkJIFBUUl9FUlIodWRjLT5yZWdzX2luZm8pKTsKLQkJCXVkYy0+cmVnc19pbmZvID0gTlVMTDsKLQkJfQorCQlpZiAoIXVkYy0+cmVnc19pbmZvKQorCQkJZGV2X3dhcm4oZGV2LCAiZGVidWdmcyBmaWxlIGNyZWF0aW9uIGZhaWxlZFxuIik7CiAJfQogCiAJZGV2X2RiZyhkZXYsICJwcm9iZSBva1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggM2ZhYTdhNy4uMzc4NzlhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKIAogI2luY2x1ZGUgImZfYWNtLmMiCisjaW5jbHVkZSAiZl9vYmV4LmMiCiAjaW5jbHVkZSAiZl9zZXJpYWwuYyIKICNpbmNsdWRlICJ1X3NlcmlhbC5jIgogCkBAIC01Niw2ICs1Nyw3IEBACiAjZGVmaW5lIEdTX1ZFTkRPUl9JRAkJCTB4MDUyNQkvKiBOZXRDaGlwICovCiAjZGVmaW5lIEdTX1BST0RVQ1RfSUQJCQkweGE0YTYJLyogTGludXgtVVNCIFNlcmlhbCBHYWRnZXQgKi8KICNkZWZpbmUgR1NfQ0RDX1BST0RVQ1RfSUQJCTB4YTRhNwkvKiAuLi4gYXMgQ0RDLUFDTSAqLworI2RlZmluZSBHU19DRENfT0JFWF9QUk9EVUNUX0lECQkweGE0YTkJLyogLi4uIGFzIENEQy1PQkVYICovCiAKIC8qIHN0cmluZyBJRHMgYXJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5ICovCiAKQEAgLTEyNSw2ICsxMjcsMTAgQEAKIG1vZHVsZV9wYXJhbSh1c2VfYWNtLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModXNlX2FjbSwgIlVzZSBDREMgQUNNLCBkZWZhdWx0PXllcyIpOwogCitzdGF0aWMgaW50IHVzZV9vYmV4ID0gZmFsc2U7Cittb2R1bGVfcGFyYW0odXNlX29iZXgsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyh1c2Vfb2JleCwgIlVzZSBDREMgT0JFWCwgZGVmYXVsdD1ubyIpOworCiBzdGF0aWMgdW5zaWduZWQgbl9wb3J0cyA9IDE7CiBtb2R1bGVfcGFyYW0obl9wb3J0cywgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5fcG9ydHMsICJudW1iZXIgb2YgcG9ydHMgdG8gY3JlYXRlLCBkZWZhdWx0PTEiKTsKQEAgLTEzOSw2ICsxNDUsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBuX3BvcnRzICYmIHN0YXR1cyA9PSAwOyBpKyspIHsKIAkJaWYgKHVzZV9hY20pCiAJCQlzdGF0dXMgPSBhY21fYmluZF9jb25maWcoYywgaSk7CisJCWVsc2UgaWYgKHVzZV9vYmV4KQorCQkJc3RhdHVzID0gb2JleF9iaW5kX2NvbmZpZyhjLCBpKTsKIAkJZWxzZQogCQkJc3RhdHVzID0gZ3Nlcl9iaW5kX2NvbmZpZyhjLCBpKTsKIAl9CkBAIC0xNTEsNyArMTU5LDYgQEAKIAkvKiAuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IGYodXNlX2FjbSkgKi8KIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiAJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLwogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ3NfYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCkBAIC0yNDksNiArMjU2LDEyIEBACiAJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19DT01NOwogCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQogCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfQ0RDX1BST0RVQ1RfSUQpOworCX0gZWxzZSBpZiAodXNlX29iZXgpIHsKKwkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiQ0RDIE9CRVggY29uZmlnIjsKKwkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDM7CisJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19DT01NOworCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfT0JFWF9QUk9EVUNUX0lEKTsKIAl9IGVsc2UgewogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJHZW5lcmljIFNlcmlhbCBjb25maWciOwogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCmluZGV4IGRiZDU3NWEuLjY2OTQ4YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwpAQCAtODczLDYgKzg3MywxMyBAQAogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CiAJCWRldi0+cG9ydF91c2IgPSBsaW5rOwogCQlsaW5rLT5pb3BvcnQgPSBkZXY7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldi0+bmV0KSkgeworCQkJaWYgKGxpbmstPm9wZW4pCisJCQkJbGluay0+b3BlbihsaW5rKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsaW5rLT5jbG9zZSkKKwkJCQlsaW5rLT5jbG9zZShsaW5rKTsKKwkJfQogCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKIAogCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKaW5kZXggYWYzOTEwZC4uMzAwZjBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKQEAgLTYyLDUgKzYyLDYgQEAKIC8qIGZ1bmN0aW9ucyBhcmUgYm91bmQgdG8gY29uZmlndXJhdGlvbnMgYnkgYSBjb25maWcgb3IgZ2FkZ2V0IGRyaXZlciAqLwogaW50IGFjbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKTsKIGludCBnc2VyX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pOworaW50IG9iZXhfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBwb3J0X251bSk7CiAKICNlbmRpZiAvKiBfX1VfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyMjg3OTdlLi41NmY1OTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0xMzgsNyArMTM4LDYgQEAKIAl0cmlzdGF0ZSAiT0hDSSBIQ0Qgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQiAmJiBVU0JfQVJDSF9IQVNfT0hDSQogCXNlbGVjdCBJU1AxMzAxX09NQVAgaWYgTUFDSF9PTUFQX0gyIHx8IE1BQ0hfT01BUF9IMwotCXNlbGVjdCBJMkMgaWYgQVJDSF9QTlg0MDA4CiAJLS0taGVscC0tLQogCSAgVGhlIE9wZW4gSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoT0hDSSkgaXMgYSBzdGFuZGFyZCBmb3IgYWNjZXNzaW5nCiAJICBVU0IgMS4xIGhvc3QgY29udHJvbGxlciBoYXJkd2FyZS4gIEl0IGRvZXMgbW9yZSBpbiBoYXJkd2FyZSB0aGFuIEludGVsJ3MKQEAgLTMwNSwzICszMDQsMzEgQEAKIAloZWxwCiAJICAgVGhpcyBkcml2ZXIgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgb24tY2hpcCBSOEE2NjU5NyBpbiB0aGUKIAkgICBTSDczNjYgYW5kIFNINzcyMyBwcm9jZXNzb3JzLgorCitjb25maWcgVVNCX1dIQ0lfSENECisJdHJpc3RhdGUgIldpcmVsZXNzIFVTQiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChXSENJKSBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFBDSSAmJiBVU0IKKwlzZWxlY3QgVVNCX1dVU0IKKwlzZWxlY3QgVVdCX1dIQ0kKKwloZWxwCisJICBBIGRyaXZlciBmb3IgUENJLWJhc2VkIFdpcmVsZXNzIFVTQiBIb3N0IENvbnRyb2xsZXJzIHRoYXQgYXJlCisJICBjb21wbGlhbnQgd2l0aCB0aGUgV0hDSSBzcGVjaWZpY2F0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCAid2hjaS1oY2QiLgorCitjb25maWcgVVNCX0hXQV9IQ0QKKwl0cmlzdGF0ZSAiSG9zdCBXaXJlIEFkYXB0ZXIgKEhXQSkgZHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBVU0IKKwlzZWxlY3QgVVNCX1dVU0IKKwlzZWxlY3QgVVdCX0hXQQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgeW91IHRvIGNvbm5lY3QgV2lyZWxlc3MgVVNCIGRldmljZXMgdG8KKwkgIHlvdXIgc3lzdGVtIHVzaW5nIGEgSG9zdCBXaXJlIEFkYXB0b3IgVVNCIGRvbmdsZS4gVGhpcyBpcyBhbgorCSAgVVdCIFJhZGlvIENvbnRyb2xsZXIgYW5kIFdVU0IgSG9zdCBDb250cm9sbGVyIGNvbm5lY3RlZCB0bworCSAgeW91ciBtYWNoaW5lIHZpYSBVU0IgKHNwZWNpZmllZCBpbiBXVVNCMS4wKS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgImh3YS1oYyIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQppbmRleCBmMWVkZGEyLi4yM2JlMjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKQEAgLTgsNiArOCw4IEBACiAKIGlzcDE3NjAtb2JqcyA6PSBpc3AxNzYwLWhjZC5vIGlzcDE3NjAtaWYubwogCitvYmotJChDT05GSUdfVVNCX1dIQ0lfSENEKQkrPSB3aGNpLworCiBvYmotJChDT05GSUdfUENJKQkJKz0gcGNpLXF1aXJrcy5vCiAKIG9iai0kKENPTkZJR19VU0JfRUhDSV9IQ0QpCSs9IGVoY2ktaGNkLm8KQEAgLTE5LDMgKzIxLDQgQEAKIG9iai0kKENPTkZJR19VU0JfVTEzMl9IQ0QpCSs9IHUxMzItaGNkLm8KIG9iai0kKENPTkZJR19VU0JfUjhBNjY1OTdfSENEKQkrPSByOGE2NjU5Ny1oY2Qubwogb2JqLSQoQ09ORklHX1VTQl9JU1AxNzYwX0hDRCkJKz0gaXNwMTc2MC5vCitvYmotJChDT05GSUdfVVNCX0hXQV9IQ0QpCSs9IGh3YS1oYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKaW5kZXggYjBmOGVkNS4uMGNiNTNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwpAQCAtMzU4LDcgKzM1OCw4IEBACiAJc3RydWN0IHVzYl9idXMgKmJ1czsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CS8qIHByb3RlY3QgZmlsbGluZyBvZiBidWZmZXIgKi8KIAlzaXplX3QgY291bnQ7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBmaWxsZWQgaW50byBidWZmZXIgKi8KLQljaGFyICpwYWdlOworCWNoYXIgKm91dHB1dF9idWY7CisJc2l6ZV90IGFsbG9jX3NpemU7CiB9OwogCiAjZGVmaW5lIHNwZWVkX2NoYXIoaW5mbzEpICh7IGNoYXIgdG1wOyBcCkBAIC00ODgsOCArNDg5LDggQEAKIAogCWhjZCA9IGJ1c190b19oY2QoYnVmLT5idXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKLQluZXh0ID0gYnVmLT5wYWdlOwotCXNpemUgPSBQQUdFX1NJWkU7CisJbmV4dCA9IGJ1Zi0+b3V0cHV0X2J1ZjsKKwlzaXplID0gYnVmLT5hbGxvY19zaXplOwogCiAJKm5leHQgPSAwOwogCkBAIC01MTAsNyArNTExLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiBzdHJsZW4oYnVmLT5wYWdlKTsKKwlyZXR1cm4gc3RybGVuKGJ1Zi0+b3V0cHV0X2J1Zik7CiB9CiAKICNkZWZpbmUgREJHX1NDSEVEX0xJTUlUIDY0CkBAIC01MzEsOCArNTMyLDggQEAKIAogCWhjZCA9IGJ1c190b19oY2QoYnVmLT5idXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKLQluZXh0ID0gYnVmLT5wYWdlOwotCXNpemUgPSBQQUdFX1NJWkU7CisJbmV4dCA9IGJ1Zi0+b3V0cHV0X2J1ZjsKKwlzaXplID0gYnVmLT5hbGxvY19zaXplOwogCiAJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInNpemUgPSAlZFxuIiwgZWhjaS0+cGVyaW9kaWNfc2l6ZSk7CiAJc2l6ZSAtPSB0ZW1wOwpAQCAtNTY4LDE0ICs1NjksMTYgQEAKIAkJCQlmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgc2Vlbl9jb3VudDsgdGVtcCsrKSB7CiAJCQkJCWlmIChzZWVuIFt0ZW1wXS5wdHIgIT0gcC5wdHIpCiAJCQkJCQljb250aW51ZTsKLQkJCQkJaWYgKHAucWgtPnFoX25leHQucHRyKQorCQkJCQlpZiAocC5xaC0+cWhfbmV4dC5wdHIpIHsKIAkJCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCiAJCQkJCQkJIiAuLi4iKTsKLQkJCQkJcC5wdHIgPSBOVUxMOworCQkJCQkJc2l6ZSAtPSB0ZW1wOworCQkJCQkJbmV4dCArPSB0ZW1wOworCQkJCQl9CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKiBzaG93IG1vcmUgaW5mbyB0aGUgZmlyc3QgdGltZSBhcm91bmQgKi8KLQkJCQlpZiAodGVtcCA9PSBzZWVuX2NvdW50ICYmIHAucHRyKSB7CisJCQkJaWYgKHRlbXAgPT0gc2Vlbl9jb3VudCkgewogCQkJCQl1MzIJc2NyYXRjaCA9IGhjMzJfdG9fY3B1cChlaGNpLAogCQkJCQkJCSZwLnFoLT5od19pbmZvMSk7CiAJCQkJCXN0cnVjdCBlaGNpX3F0ZAkqcXRkOwpAQCAtNjQ5LDcgKzY1Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAlrZnJlZSAoc2Vlbik7CiAKLQlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKKwlyZXR1cm4gYnVmLT5hbGxvY19zaXplIC0gc2l6ZTsKIH0KICN1bmRlZiBEQkdfU0NIRURfTElNSVQKIApAQCAtNjY1LDE0ICs2NjgsMTQgQEAKIAogCWhjZCA9IGJ1c190b19oY2QoYnVmLT5idXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKLQluZXh0ID0gYnVmLT5wYWdlOwotCXNpemUgPSBQQUdFX1NJWkU7CisJbmV4dCA9IGJ1Zi0+b3V0cHV0X2J1ZjsKKwlzaXplID0gYnVmLT5hbGxvY19zaXplOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkgewogCQlzaXplID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAotCQkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkJImJ1cyAlcywgZGV2aWNlICVzXG4iCiAJCQkiJXNcbiIKIAkJCSJTVVNQRU5ERUQgKG5vIHJlZ2lzdGVyIGFjY2VzcylcbiIsCiAJCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLApAQCAtNjg0LDcgKzY4Nyw3IEBACiAJLyogQ2FwYWJpbGl0eSBSZWdpc3RlcnMgKi8KIAlpID0gSENfVkVSU0lPTihlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKLQkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJIiVzXG4iCiAJCSJFSENJICV4LiUwMngsIGhjZCBzdGF0ZSAlZFxuIiwKIAkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cy0+bmFtZSwKQEAgLTgwOCw3ICs4MTEsNyBAQAogZG9uZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7CisJcmV0dXJuIGJ1Zi0+YWxsb2Nfc2l6ZSAtIHNpemU7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IHVzYl9idXMgKmJ1cywKQEAgLTgyMiw2ICs4MjUsNyBAQAogCQlidWYtPmJ1cyA9IGJ1czsKIAkJYnVmLT5maWxsX2Z1bmMgPSBmaWxsX2Z1bmM7CiAJCW11dGV4X2luaXQoJmJ1Zi0+bXV0ZXgpOworCQlidWYtPmFsbG9jX3NpemUgPSBQQUdFX1NJWkU7CiAJfQogCiAJcmV0dXJuIGJ1ZjsKQEAgLTgzMSwxMCArODM1LDEwIEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIWJ1Zi0+cGFnZSkKLQkJYnVmLT5wYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPm91dHB1dF9idWYpCisJCWJ1Zi0+b3V0cHV0X2J1ZiA9IChjaGFyICopdm1hbGxvYyhidWYtPmFsbG9jX3NpemUpOwogCi0JaWYgKCFidWYtPnBhZ2UpIHsKKwlpZiAoIWJ1Zi0+b3V0cHV0X2J1ZikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC04NjcsNyArODcxLDcgQEAKIAltdXRleF91bmxvY2soJmJ1Zi0+bXV0ZXgpOwogCiAJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGxlbiwgb2Zmc2V0LAotCQkJCSAgICAgIGJ1Zi0+cGFnZSwgYnVmLT5jb3VudCk7CisJCQkJICAgICAgYnVmLT5vdXRwdXRfYnVmLCBidWYtPmNvdW50KTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC04NzksOCArODgzLDggQEAKIAlzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoYnVmKSB7Ci0JCWlmIChidWYtPnBhZ2UpCi0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLT5wYWdlKTsKKwkJaWYgKGJ1Zi0+b3V0cHV0X2J1ZikKKwkJCXZmcmVlKGJ1Zi0+b3V0cHV0X2J1Zik7CiAJCWtmcmVlKGJ1Zik7CiAJfQogCkBAIC04OTUsMTAgKzg5OSwxNCBAQAogCiBzdGF0aWMgaW50IGRlYnVnX3BlcmlvZGljX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLT5pX3ByaXZhdGUsCi0JCQkJCSAgZmlsbF9wZXJpb2RpY19idWZmZXIpOworCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZjsKKwlidWYgPSBhbGxvY19idWZmZXIoaW5vZGUtPmlfcHJpdmF0ZSwgZmlsbF9wZXJpb2RpY19idWZmZXIpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTsKKwlidWYtPmFsbG9jX3NpemUgPSAoc2l6ZW9mKHZvaWQgKikgPT0gNCA/IDYgOiA4KSpQQUdFX1NJWkU7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYnVmOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRlYnVnX3JlZ2lzdGVyc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IDg0MDllMDcuLjE1YTgwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KQEAgLTU5LDcgKzYwLDYgQEAKICAqIHByb3ZpZGluZyBlYXJseSBkZXZpY2VzIGZvciB0aG9zZSBob3N0IGNvbnRyb2xsZXJzIHRvIHRhbGsgdG8hCiAgKi8KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMTAgRGVjIDIwMDQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkRhdmlkIEJyb3duZWxsIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIDIuMCAnRW5oYW5jZWQnIEhvc3QgQ29udHJvbGxlciAoRUhDSSkgRHJpdmVyIgogCkBAIC02MjAsOSArNjIwLDkgQEAKIAogCXRlbXAgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAllaGNpX2luZm8gKGVoY2ksCi0JCSJVU0IgJXguJXggc3RhcnRlZCwgRUhDSSAleC4lMDJ4LCBkcml2ZXIgJXMlc1xuIiwKKwkJIlVTQiAleC4leCBzdGFydGVkLCBFSENJICV4LiUwMnglc1xuIiwKIAkJKChlaGNpLT5zYnJuICYgMHhmMCk+PjQpLCAoZWhjaS0+c2JybiAmIDB4MGYpLAotCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLCBEUklWRVJfVkVSU0lPTiwKKwkJdGVtcCA+PiA4LCB0ZW1wICYgMHhmZiwKIAkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7CiAKIAllaGNpX3dyaXRlbChlaGNpLCBJTlRSX01BU0ssCkBAIC03MDYsNyArNzA2LDcgQEAKIAkJcGNkX3N0YXR1cyA9IHN0YXR1czsKIAogCQkvKiByZXN1bWUgcm9vdCBodWI/ICovCi0JCWlmICghKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpICYgQ01EX1JVTikpCisJCWlmICghKGNtZCAmIENNRF9SVU4pKQogCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAogCQl3aGlsZSAoaS0tKSB7CkBAIC03MTUsOCArNzE1LDExIEBACiAKIAkJCWlmIChwc3RhdHVzICYgUE9SVF9PV05FUikKIAkJCQljb250aW51ZTsKLQkJCWlmICghKHBzdGF0dXMgJiBQT1JUX1JFU1VNRSkKLQkJCQkJfHwgZWhjaS0+cmVzZXRfZG9uZSBbaV0gIT0gMCkKKwkJCWlmICghKHRlc3RfYml0KGksICZlaGNpLT5zdXNwZW5kZWRfcG9ydHMpICYmCisJCQkJCSgocHN0YXR1cyAmIFBPUlRfUkVTVU1FKSB8fAorCQkJCQkJIShwc3RhdHVzICYgUE9SVF9TVVNQRU5EKSkgJiYKKwkJCQkJKHBzdGF0dXMgJiBQT1JUX1BFKSAmJgorCQkJCQllaGNpLT5yZXNldF9kb25lW2ldID09IDApKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiBzdGFydCAyMCBtc2VjIHJlc3VtZSBzaWduYWxpbmcgZnJvbSB0aGlzIHBvcnQsCkBAIC03MzEsOSArNzM0LDggQEAKIAogCS8qIFBDSSBlcnJvcnMgWzQuMTUuMi40XSAqLwogCWlmICh1bmxpa2VseSAoKHN0YXR1cyAmIFNUU19GQVRBTCkgIT0gMCkpIHsKLQkJZGJnX2NtZCAoZWhjaSwgImZhdGFsIiwgZWhjaV9yZWFkbChlaGNpLAotCQkJCQkJICAgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpKTsKLQkJZGJnX3N0YXR1cyAoZWhjaSwgImZhdGFsIiwgc3RhdHVzKTsKKwkJZGJnX2NtZChlaGNpLCAiZmF0YWwiLCBjbWQpOworCQlkYmdfc3RhdHVzKGVoY2ksICJmYXRhbCIsIHN0YXR1cyk7CiAJCWlmIChzdGF0dXMgJiBTVFNfSEFMVCkgewogCQkJZWhjaV9lcnIgKGVoY2ksICJmYXRhbCBlcnJvclxuIik7CiBkZWFkOgpAQCAtOTk0LDkgKzk5Niw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUgRFJJVkVSX0lORk8gRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9ERVNDCi0KLU1PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0lORk8pOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9BVVRIT1IgKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKIApAQCAtMTAyMCwxMSArMTAyMCw2IEBACiAjZGVmaW5lCVBTM19TWVNURU1fQlVTX0RSSVZFUglwczNfZWhjaV9kcml2ZXIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotI2luY2x1ZGUgImVoY2ktcHBjLXNvYy5jIgotI2RlZmluZQlQTEFURk9STV9EUklWRVIJCWVoY2lfcHBjX3NvY19kcml2ZXIKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YKICNpbmNsdWRlICJlaGNpLXBwYy1vZi5jIgogI2RlZmluZSBPRl9QTEFURk9STV9EUklWRVIJZWhjaV9oY2RfcHBjX29mX2RyaXZlcgpAQCAtMTA0OSw2ICsxMDQ0LDE2IEBACiB7CiAJaW50IHJldHZhbCA9IDA7CiAKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgRFJJVkVSX0RFU0MgIlxuIiwgaGNkX25hbWUpOworCXNldF9iaXQoVVNCX0VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKKwlpZiAodGVzdF9iaXQoVVNCX1VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKSB8fAorCQkJdGVzdF9iaXQoVVNCX09IQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyEgZWhjaV9oY2Qgc2hvdWxkIGFsd2F5cyBiZSBsb2FkZWQiCisJCQkJIiBiZWZvcmUgdWhjaV9oY2QgYW5kIG9oY2lfaGNkLCBub3QgYWZ0ZXJcbiIpOworCiAJcHJfZGVidWcoIiVzOiBibG9jayBzaXplczogcWggJVpkIHF0ZCAlWmQgaXRkICVaZCBzaXRkICVaZFxuIiwKIAkJIGhjZF9uYW1lLAogCQkgc2l6ZW9mKHN0cnVjdCBlaGNpX3FoKSwgc2l6ZW9mKHN0cnVjdCBlaGNpX3F0ZCksCkBAIC0xMDU2LDggKzEwNjEsMTAgQEAKIAogI2lmZGVmIERFQlVHCiAJZWhjaV9kZWJ1Z19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJlaGNpIiwgTlVMTCk7Ci0JaWYgKCFlaGNpX2RlYnVnX3Jvb3QpCi0JCXJldHVybiAtRU5PRU5UOworCWlmICghZWhjaV9kZWJ1Z19yb290KSB7CisJCXJldHZhbCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2RlYnVnOworCX0KICNlbmRpZgogCiAjaWZkZWYgUExBVEZPUk1fRFJJVkVSCkBAIC0xMTA0LDcgKzExMTEsOSBAQAogI2lmZGVmIERFQlVHCiAJZGVidWdmc19yZW1vdmUoZWhjaV9kZWJ1Z19yb290KTsKIAllaGNpX2RlYnVnX3Jvb3QgPSBOVUxMOworZXJyX2RlYnVnOgogI2VuZGlmCisJY2xlYXJfYml0KFVTQl9FSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KGVoY2lfaGNkX2luaXQpOwpAQCAtMTEyNiw2ICsxMTM1LDcgQEAKICNpZmRlZiBERUJVRwogCWRlYnVnZnNfcmVtb3ZlKGVoY2lfZGVidWdfcm9vdCk7CiAjZW5kaWYKKwljbGVhcl9iaXQoVVNCX0VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKIH0KIG1vZHVsZV9leGl0KGVoY2lfaGNkX2NsZWFudXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggNzQwODM1Yi4uMjE4Zjk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMjM2LDEwICsyMzYsOCBAQAogCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKIAkJdGVtcCAmPSB+KFBPUlRfUldDX0JJVFMgfCBQT1JUX1dBS0VfQklUUyk7CiAJCWlmICh0ZXN0X2JpdChpLCAmZWhjaS0+YnVzX3N1c3BlbmRlZCkgJiYKLQkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpIHsKLQkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpCiAJCQl0ZW1wIHw9IFBPUlRfUkVTVU1FOwotCQl9CiAJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOwogCX0KIAlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOwpAQCAtNDgyLDEwICs0ODAsOSBAQAogCQkgKiBjb250cm9sbGVyIGJ5IHRoZSB1c2VyLgogCQkgKi8KIAotCQlpZiAoKHRlbXAgJiBtYXNrKSAhPSAwCi0JCQkJfHwgKCh0ZW1wICYgUE9SVF9SRVNVTUUpICE9IDAKLQkJCQkJJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLAotCQkJCQkJZWhjaS0+cmVzZXRfZG9uZVtpXSkpKSB7CisJCWlmICgodGVtcCAmIG1hc2spICE9IDAgfHwgdGVzdF9iaXQoaSwgJmVoY2ktPnBvcnRfY19zdXNwZW5kKQorCQkJCXx8IChlaGNpLT5yZXNldF9kb25lW2ldICYmIHRpbWVfYWZ0ZXJfZXEoCisJCQkJCWppZmZpZXMsIGVoY2ktPnJlc2V0X2RvbmVbaV0pKSkgewogCQkJaWYgKGkgPCA3KQogCQkJICAgIGJ1ZiBbMF0gfD0gMSA8PCAoaSArIDEpOwogCQkJZWxzZQpAQCAtNjg4LDYgKzY4NSw3IEBACiAJCQkvKiByZXN1bWUgY29tcGxldGVkPyAqLwogCQkJZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0pKSB7CisJCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CiAJCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5wb3J0X2Nfc3VzcGVuZCk7CiAJCQkJZWhjaS0+cmVzZXRfZG9uZVt3SW5kZXhdID0gMDsKIApAQCAtNzM0LDYgKzczMiw5IEBACiAJCQkJCWVoY2lfcmVhZGwoZWhjaSwgc3RhdHVzX3JlZykpOwogCQl9CiAKKwkJaWYgKCEodGVtcCAmIChQT1JUX1JFU1VNRXxQT1JUX1JFU0VUKSkpCisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCiAJCS8qIHRyYW5zZmVyIGRlZGljYXRlZCBwb3J0cyB0byB0aGUgY29tcGFuaW9uIGhjICovCiAJCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYKIAkJCQl0ZXN0X2JpdCh3SW5kZXgsICZlaGNpLT5jb21wYW5pb25fcG9ydHMpKSB7CkBAIC03NTcsOCArNzU4LDE3IEBACiAJCX0KIAkJaWYgKHRlbXAgJiBQT1JUX1BFKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEU7Ci0JCWlmICh0ZW1wICYgKFBPUlRfU1VTUEVORHxQT1JUX1JFU1VNRSkpCisKKwkJLyogbWF5YmUgdGhlIHBvcnQgd2FzIHVuc3VzcGVuZGVkIHdpdGhvdXQgb3VyIGtub3dsZWRnZSAqLworCQlpZiAodGVtcCAmIChQT1JUX1NVU1BFTkR8UE9SVF9SRVNVTUUpKSB7CiAJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisJCX0gZWxzZSBpZiAodGVzdF9iaXQod0luZGV4LCAmZWhjaS0+c3VzcGVuZGVkX3BvcnRzKSkgeworCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCQkJaWYgKHRlbXAgJiBQT1JUX1BFKQorCQkJCXNldF9iaXQod0luZGV4LCAmZWhjaS0+cG9ydF9jX3N1c3BlbmQpOworCQl9CisKIAkJaWYgKHRlbXAgJiBQT1JUX09DKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQ7CiAJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKQEAgLTgwMyw2ICs4MTMsNyBAQAogCQkJCQl8fCAodGVtcCAmIFBPUlRfUkVTRVQpICE9IDApCiAJCQkJZ290byBlcnJvcjsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsIHN0YXR1c19yZWcpOworCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5zdXNwZW5kZWRfcG9ydHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKIAkJCWlmIChIQ1NfUFBDIChlaGNpLT5oY3NfcGFyYW1zKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLXNvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjk1OTBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoKLSAqIEVIQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA3IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKLSAqCi0gKiBCdXMgR2x1ZSBmb3IgUFBDIE9uLUNoaXAgRUhDSSBkcml2ZXIKLSAqIFRlc3RlZCBvbiBBTUNDIDQ0MEVQeAotICoKLSAqIEJhc2VkIG9uICJlaGNpLWF1MXh4eC5jIiBieSBLLkJvZ2UgPGthcnN0ZW4uYm9nZUBhbWQuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7Ci0KLS8qIGNhbGxlZCBkdXJpbmcgcHJvYmUoKSBhZnRlciBjaGlwIHJlc2V0IGNvbXBsZXRlcyAqLwotc3RhdGljIGludCBlaGNpX3BwY19zb2Nfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsKLQlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwotCWludAkJcmV0dmFsOwotCi0JcmV0dmFsID0gZWhjaV9oYWx0KGVoY2kpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR2YWwgPSBlaGNpX2luaXQoaGNkKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JZWhjaS0+c2JybiA9IDB4MjA7Ci0JcmV0dXJuIGVoY2lfcmVzZXQoZWhjaSk7Ci19Ci0KLS8qKgotICogdXNiX2VoY2lfcHBjX3NvY19wcm9iZSAtIGluaXRpYWxpemUgUFBDLVNvQy1iYXNlZCBIQ0RzCi0gKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKLSAqCi0gKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAotICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKLSAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KLSAqCi0gKi8KLWludCB1c2JfZWhjaV9wcGNfc29jX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJCSAgIHN0cnVjdCB1c2JfaGNkICoqaGNkX291dCwKLQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCB1c2JfaGNkICpoY2Q7Ci0Jc3RydWN0IGVoY2lfaGNkICplaGNpOwotCi0JaWYgKGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKLQkJcHJfZGVidWcoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCX0KLQloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZkZXYtPmRldiwgIlBQQy1TT0MgRUhDSSIpOwotCWlmICghaGNkKQotCQlyZXR1cm4gLUVOT01FTTsKLQloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKLQkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKLQkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZCIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZWhjaSA9IGhjZF90b19laGNpKGhjZCk7Ci0JZWhjaS0+YmlnX2VuZGlhbl9tbWlvID0gMTsKLQllaGNpLT5iaWdfZW5kaWFuX2Rlc2MgPSAxOwotCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7Ci0JZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7Ci0KLQkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KLQllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpCi0JLyoKLQkgKiA0NDBFUHggRXJyYXRhIFVTQkhfMwotCSAqIEZpeDogRW5hYmxlIEJyZWFrIE1lbW9yeSBUcmFuc2ZlciAoQk1UKSBpbiBJTlNOUkVHMwotCSAqLwotCW91dF9iZTMyKCh2b2lkICopKCh1bG9uZykoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpICsgMHg4YyksICgxIDw8IDApKTsKLQllaGNpX2RiZyhlaGNpLCAiQnJlYWsgTWVtb3J5IFRyYW5zZmVyIChCTVQpIGhhcyBiZWVkIGVuYWJsZWQhXG4iKTsKLSNlbmRpZgotCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBJUlFGX0RJU0FCTEVEKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpb3VubWFwKGhjZC0+cmVncyk7Ci1lcnIyOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotZXJyMToKLQl1c2JfcHV0X2hjZChoY2QpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCi0vKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KLQotLyoqCi0gKiB1c2JfZWhjaV9oY2RfcHBjX3NvY19yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBQUEMtU29DLWJhc2VkIEhDRHMKLSAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAotICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCi0gKgotICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfZWhjaV9oY2RfcHBjX3NvY19wcm9iZSgpLCBmaXJzdCBpbnZva2luZwotICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKLSAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCi0gKgotICovCi12b2lkIHVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQl1c2JfcmVtb3ZlX2hjZChoY2QpOwotCWlvdW5tYXAoaGNkLT5yZWdzKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKLQl1c2JfcHV0X2hjZChoY2QpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX3BwY19zb2NfaGNfZHJpdmVyID0gewotCS5kZXNjcmlwdGlvbiA9IGhjZF9uYW1lLAotCS5wcm9kdWN0X2Rlc2MgPSAiUFBDLVNPQyBFSENJIiwKLQkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAotCi0JLyoKLQkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKLQkgKi8KLQkuaXJxID0gZWhjaV9pcnEsCi0JLmZsYWdzID0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAotCi0JLyoKLQkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucwotCSAqLwotCS5yZXNldCA9IGVoY2lfcHBjX3NvY19zZXR1cCwKLQkuc3RhcnQgPSBlaGNpX3J1biwKLQkuc3RvcCA9IGVoY2lfc3RvcCwKLQkuc2h1dGRvd24gPSBlaGNpX3NodXRkb3duLAotCi0JLyoKLQkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwotCSAqLwotCS51cmJfZW5xdWV1ZSA9IGVoY2lfdXJiX2VucXVldWUsCi0JLnVyYl9kZXF1ZXVlID0gZWhjaV91cmJfZGVxdWV1ZSwKLQkuZW5kcG9pbnRfZGlzYWJsZSA9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKLQotCS8qCi0JICogc2NoZWR1bGluZyBzdXBwb3J0Ci0JICovCi0JLmdldF9mcmFtZV9udW1iZXIgPSBlaGNpX2dldF9mcmFtZSwKLQotCS8qCi0JICogcm9vdCBodWIgc3VwcG9ydAotCSAqLwotCS5odWJfc3RhdHVzX2RhdGEgPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKLQkuaHViX2NvbnRyb2wgPSBlaGNpX2h1Yl9jb250cm9sLAotCS5idXNfc3VzcGVuZCA9IGVoY2lfYnVzX3N1c3BlbmQsCi0JLmJ1c19yZXN1bWUgPSBlaGNpX2J1c19yZXN1bWUsCi0JLnJlbGlucXVpc2hfcG9ydCA9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAotCS5wb3J0X2hhbmRlZF9vdmVyID0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAotfTsKLQotc3RhdGljIGludCBlaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiSW4gZWhjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmVcbiIpOwotCi0JaWYgKHVzYl9kaXNhYmxlZCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEZJWE1FIHdlIG9ubHkgd2FudCBvbmUgb25lIHByb2JlKCkgbm90IHR3byAqLwotCXJldCA9IHVzYl9laGNpX3BwY19zb2NfcHJvYmUoJmVoY2lfcHBjX3NvY19oY19kcml2ZXIsICZoY2QsIHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZWhjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JLyogRklYTUUgd2Ugb25seSB3YW50IG9uZSBvbmUgcmVtb3ZlKCkgbm90IHR3byAqLwotCXVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKGhjZCwgcGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLU1PRFVMRV9BTElBUygicGxhdGZvcm06cHBjLXNvYy1laGNpIik7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX3BwY19zb2NfZHJpdmVyID0gewotCS5wcm9iZSA9IGVoY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAotCS5yZW1vdmUgPSBlaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUsCi0JLnNodXRkb3duID0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJwcGMtc29jLWVoY2kiLAotCX0KLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IGI2OTdhMTMuLmIxMTc5OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC05OSw2ICs5OSw4IEBACiAJCQlvd25lZCBieSB0aGUgY29tcGFuaW9uIGR1cmluZyBhIGJ1cyBzdXNwZW5kICovCiAJdW5zaWduZWQgbG9uZwkJcG9ydF9jX3N1c3BlbmQ7CQkvKiB3aGljaCBwb3J0cyBoYXZlCiAJCQl0aGUgY2hhbmdlLXN1c3BlbmQgZmVhdHVyZSB0dXJuZWQgb24gKi8KKwl1bnNpZ25lZCBsb25nCQlzdXNwZW5kZWRfcG9ydHM7CS8qIHdoaWNoIHBvcnRzIGFyZQorCQkJc3VzcGVuZGVkICovCiAKIAkvKiBwZXItSEMgbWVtb3J5IHBvb2xzIChjb3VsZCBiZSBwZXItYnVzLCBidXQgLi4uKSAqLwogCXN0cnVjdCBkbWFfcG9vbAkJKnFoX3Bvb2w7CS8qIHFoIHBlciBhY3RpdmUgdXJiICovCkBAIC0xODEsMTQgKzE4MywxNiBAQAogCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQogCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQotCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQotCQkJCSYgZWhjaS0+YWN0aW9ucykpCi0JCXJldHVybjsKKwllbnVtIGVoY2lfdGltZXJfYWN0aW9uIG9sZGFjdGlvbnMgPSBlaGNpLT5hY3Rpb25zOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgewogCQl1bnNpZ25lZCBsb25nIHQ7CiAKKwkJaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQorCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQorCQkJCSYgb2xkYWN0aW9ucykpCisJCQlyZXR1cm47CisKIAkJc3dpdGNoIChhY3Rpb24pIHsKIAkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKIAkJCXQgPSBFSENJX0lPX0pJRkZJRVM7CkBAIC0yMDQsNyArMjA4LDcgQEAKIAkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKIAkJCWJyZWFrOwogCQl9Ci0JCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKKwkJbW9kX3RpbWVyKCZlaGNpLT53YXRjaGRvZywgcm91bmRfamlmZmllcyh0ICsgamlmZmllcykpOwogCX0KIH0KIApAQCAtNjA0LDE2ICs2MDgsNyBAQAogLyoKICAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCiAgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCi0gKgotICogUkVWSVNJVDogYXJjaC9wb3dlcnBjIG5vdyBoYXMgcmVhZGwvd3JpdGVsX2JlLCBzbyB0aGUKLSAqIGRlZmluaXRpb24gYmVsb3cgY2FuIGRpZSBvbmNlIHRoZSA0eHggc3VwcG9ydCBpcwotICogZmluYWxseSBwb3J0ZWQgb3Zlci4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLSNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCWluX2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQotI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQlvdXRfYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIsIHZhbCkKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQVJNKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lYUDRYWCkKICNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCV9fcmF3X3JlYWRsKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkcikKICNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJX19yYXdfd3JpdGVsKHZhbCwgKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiZTRkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKQEAgLTAsMCArMSw5MjUgQEAKKy8qCisgKiBIb3N0IFdpcmUgQWRhcHRlcjoKKyAqIERyaXZlciBnbHVlLCBIV0Etc3BlY2lmaWMgZnVuY3Rpb25zLCBicmlkZ2VzIHRvIFdBSEMgYW5kIFdVU0JIQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogVGhlIEhXQSBkcml2ZXIgaXMgYSBzaW1wbGUgbGF5ZXIgdGhhdCBmb3J3YXJkcyByZXF1ZXN0cyB0byB0aGUgV0FIQworICogKFdpcmUgQWRhdGVyIEhvc3QgQ29udHJvbGxlcikgb3IgV1VTQkhDIChXaXJlbGVzcyBVU0IgSG9zdAorICogQ29udHJvbGxlcikgbGF5ZXJzLgorICoKKyAqIEhvc3QgV2lyZSBBZGFwdGVyIGlzIHRoZSAnV1VTQiAxLjAgc3RhbmRhcmQnIG5hbWUgZm9yIFdpcmVsZXNzLVVTQgorICogSG9zdCBDb250cm9sbGVyIHRoYXQgaXMgY29ubmVjdGVkIHRvIHlvdXIgc3lzdGVtIHZpYSBVU0IgKGEgVVNCCisgKiBkb25nbGUgdGhhdCBpbXBsZW1lbnRzIGEgVVNCIGhvc3QuLi4pLiBUaGVyZSBpcyBhbHNvIGEgRGV2aWNlIFdpcmVkCisgKiBBZGFwdG9yLCBEV0EgKFdpcmVsZXNzIFVTQiBodWIpIHRoYXQgdXNlcyB0aGUgc2FtZSBtZWNoYW5pc20gZm9yCisgKiB0cmFuc2ZlcnJpbmcgZGF0YSAoaXQgaXMgYWZ0ZXIgYWxsIGEgVVNCIGhvc3QgY29ubmVjdGVkIHZpYQorICogV2lyZWxlc3MgVVNCKSwgd2UgaGF2ZSBhIGNvbW1vbiBsYXllciBjYWxsZWQgV2lyZSBBZGFwdGVyIEhvc3QKKyAqIENvbnRyb2xsZXIgdGhhdCBkb2VzIGFsbCB0aGUgaGFyZCB3b3JrLiBUaGUgV1VTQkhDIChXaXJlbGVzcyBVU0IKKyAqIEhvc3QgQ29udHJvbGxlcikgaXMgdGhlIHBhcnQgY29tbW9uIHRvIFdVU0IgSG9zdCBDb250cm9sbGVycywgdGhlCisgKiBIV0EgYW5kIHRoZSBQQ0ktYmFzZWQgb25lLCB0aGF0IGlzIGltcGxlbWVudGVkIGZvbGxvd2luZyB0aGUgV0hDSQorICogc3BlYy4gQWxsIHRoZXNlIGxheWVycyBhcmUgaW1wbGVtZW50ZWQgaW4gLi4vd3VzYmNvcmUuCisgKgorICogVGhlIG1haW4gZnVuY3Rpb25zIGFyZSBod2FoY19vcF91cmJfe2VuLGRlfXF1ZXVlKCksIHRoYXQgcGFzcyB0aGUKKyAqIGpvYiBvZiBjb252ZXJ0aW5nIGEgVVJCIHRvIGEgV2lyZSBBZGFwdGVyCisgKgorICogRW50cnkgcG9pbnRzOgorICoKKyAqICAgaHdhaGNfZHJpdmVyXyooKSAgIERyaXZlciBpbml0aWFsaXphdGlvbiwgcmVnaXN0cmF0aW9uIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uCisgKgorICogICBod2FoY19wcm9iZSgpCU5ldyBkZXZpY2UgY2FtZSB1cCwgY3JlYXRlIGFuIGluc3RhbmNlIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgaXQgW2Zyb20gZGV2aWNlIGVudW1lcmF0aW9uXS4KKyAqCisgKiAgIGh3YWhjX2Rpc2Nvbm5lY3QoKQlSZW1vdmUgZGV2aWNlIGluc3RhbmNlIFtmcm9tIGRldmljZQorICogICAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRpb25dLgorICoKKyAqICAgW19fXWh3YWhjX29wXyooKSAgIEhvc3QtV2lyZS1BZGFwdG9yIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nL3N0b3BwaW5nL2V0YyAoc29tZSBtaWdodCBiZSBtYWRlIGFsc28KKyAqICAgICAgICAgICAgICAgICAgICAgIERXQSkuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSAiLi4vd3VzYmNvcmUvd2EtaGMuaCIKKyNpbmNsdWRlICIuLi93dXNiY29yZS93dXNiaGMuaCIKKworI2RlZmluZSBEX0xPQ0FMIDAKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworc3RydWN0IGh3YWhjIHsKKwlzdHJ1Y3Qgd3VzYmhjIHd1c2JoYzsJLyogaGFzIHRvIGJlIDFzdCAqLworCXN0cnVjdCB3YWhjIHdhOworCXU4IGJ1ZmZlclsxNl07CQkvKiBmb3IgbWlzYyB1c2IgdHJhbnNhY3Rpb25zICovCit9OworCisvKioKKyAqIEZJWE1FIHNob3VsZCBiZSB3dXNiaGMKKyAqCisgKiBOT1RFOiB3ZSBuZWVkIHRvIGNhY2hlIHRoZSBDbHVzdGVyIElEIGJlY2F1c2UgbGF0ZXIuLi50aGVyZSBpcyBubworICogICAgICAgd2F5IHRvIGdldCBpdCA6KQorICovCitzdGF0aWMgaW50IF9faHdhaGNfc2V0X2NsdXN0ZXJfaWQoc3RydWN0IGh3YWhjICpod2FoYywgdTggY2x1c3Rlcl9pZCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9ICZod2FoYy0+d3VzYmhjOworCXN0cnVjdCB3YWhjICp3YSA9ICZod2FoYy0+d2E7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyh3YS0+dXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHdhLT51c2JfZGV2LCAwKSwKKwkJCVdVU0JfUkVRX1NFVF9DTFVTVEVSX0lELAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQljbHVzdGVyX2lkLAorCQkJd2EtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCU5VTEwsIDAsIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHNldCBXVVNCIENsdXN0ZXIgSUQgdG8gMHglMDJ4OiAlZFxuIiwKKwkJCWNsdXN0ZXJfaWQsIHJlc3VsdCk7CisJZWxzZQorCQl3dXNiaGMtPmNsdXN0ZXJfaWQgPSBjbHVzdGVyX2lkOworCWRldl9pbmZvKGRldiwgIldpcmVsZXNzIFVTQiBDbHVzdGVyIElEIHNldCB0byAweCUwMnhcbiIsIGNsdXN0ZXJfaWQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgX19od2FoY19vcF9zZXRfbnVtX2RudHMoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBpbnRlcnZhbCwgdTggc2xvdHMpCit7CisJc3RydWN0IGh3YWhjICpod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKKwlzdHJ1Y3Qgd2FoYyAqd2EgPSAmaHdhaGMtPndhOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh3YS0+dXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHdhLT51c2JfZGV2LCAwKSwKKwkJCVdVU0JfUkVRX1NFVF9OVU1fRE5UUywKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJaW50ZXJ2YWwgPDwgOCB8IHNsb3RzLAorCQkJd2EtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCU5VTEwsIDAsIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7Cit9CisKKy8qCisgKiBSZXNldCBhIFdVU0IgaG9zdCBjb250cm9sbGVyIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZSBkb2luZyBpdC4KKyAqCisgKiBAdXNiX2hjZDoJUG9pbnRlciB0byBXVVNCIEhvc3QgQ29udHJvbGxlciBpbnN0YW5jZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgaHdhaGNfb3BfcmVzZXQoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjID0gY29udGFpbmVyX29mKHd1c2JoYywgc3RydWN0IGh3YWhjLCB3dXNiaGMpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZod2FoYy0+d2EudXNiX2lmYWNlLT5kZXY7CisKKwlkX2Zuc3RhcnQoNCwgZGV2LCAiKGh3YWhjICVwKVxuIiwgaHdhaGMpOworCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOworCXdhX25lcF9kaXNhcm0oJmh3YWhjLT53YSk7CisJcmVzdWx0ID0gX193YV9zZXRfZmVhdHVyZSgmaHdhaGMtPndhLCBXQV9SRVNFVCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJlcnJvciBjb21tYW5kaW5nIEhDIHRvIHJlc2V0OiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl91bmxvY2s7CisJfQorCWRfcHJpbnRmKDMsIGRldiwgInJlc2V0OiB3YWl0aW5nIGZvciBkZXZpY2UgdG8gY2hhbmdlIHN0YXRlXG4iKTsKKwlyZXN1bHQgPSBfX3dhX3dhaXRfc3RhdHVzKCZod2FoYy0+d2EsIFdBX1NUQVRVU19SRVNFVFRJTkcsIDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3Igd2FpdGluZyBmb3IgSEMgdG8gcmVzZXQ6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3VubG9jazsKKwl9CitlcnJvcl91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwlkX2ZuZW5kKDQsIGRldiwgIihod2FoYyAlcCkgPSAlZFxuIiwgaHdhaGMsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEZJWE1FOiBicmVhayB0aGlzIGZ1bmN0aW9uIHVwCisgKi8KK3N0YXRpYyBpbnQgaHdhaGNfb3Bfc3RhcnQoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QpCit7CisJdTggYWRkcjsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCXN0cnVjdCBod2FoYyAqaHdhaGMgPSBjb250YWluZXJfb2Yod3VzYmhjLCBzdHJ1Y3QgaHdhaGMsIHd1c2JoYyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmh3YWhjLT53YS51c2JfaWZhY2UtPmRldjsKKworCS8qIFNldCB1cCBhIEhvc3QgSW5mbyBXVVNCIEluZm9ybWF0aW9uIEVsZW1lbnQgKi8KKwlkX2Zuc3RhcnQoNCwgZGV2LCAiKGh3YWhjICVwKVxuIiwgaHdhaGMpOworCXJlc3VsdCA9IC1FTk9TUEM7CisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJLyogU3RhcnQgdGhlIG51bWJlcmluZyBmcm9tIHRoZSB0b3Agc28gdGhhdCB0aGUgYm90dG9tCisJICogcmFuZ2Ugb2YgdGhlIHVuYXV0aCBhZGRyIHNwYWNlIGlzIHVzZWQgZm9yIGRldmljZXMsCisJICogdGhlIHRvcCBmb3IgSENzOyB1c2UgMHhmZSAtIFJDIyAqLworCWFkZHIgPSB3dXNiX2NsdXN0ZXJfaWRfZ2V0KCk7CisJaWYgKGFkZHIgPT0gMCkKKwkJZ290byBlcnJvcl9jbHVzdGVyX2lkX2dldDsKKwlyZXN1bHQgPSBfX2h3YWhjX3NldF9jbHVzdGVyX2lkKGh3YWhjLCBhZGRyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9zZXRfY2x1c3Rlcl9pZDsKKworCXJlc3VsdCA9IHdhX25lcF9hcm0oJmh3YWhjLT53YSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgbGlzdGVuIHRvIG5vdGlmaWNhdGlvbnM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3N0b3A7CisJfQorCXVzYl9oY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOworCXVzYl9oY2QtPnBvbGxfcmggPSAxOworCXVzYl9oY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwlyZXN1bHQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJZF9mbmVuZCg0LCBkZXYsICIoaHdhaGMgJXApID0gJWRcbiIsIGh3YWhjLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7CisKK2Vycm9yX3N0b3A6CisJX193YV9zdG9wKCZod2FoYy0+d2EpOworZXJyb3Jfc2V0X2NsdXN0ZXJfaWQ6CisJd3VzYl9jbHVzdGVyX2lkX3B1dCh3dXNiaGMtPmNsdXN0ZXJfaWQpOworZXJyb3JfY2x1c3Rlcl9pZF9nZXQ6CisJZ290byBvdXQ7CisKK30KKworLyoKKyAqIEZJWE1FOiBicmVhayB0aGlzIGZ1bmN0aW9uIHVwCisgKi8KK3N0YXRpYyBpbnQgX19od2FoY19vcF93dXNiaGNfc3RhcnQoc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGh3YWhjICpod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaHdhaGMtPndhLnVzYl9pZmFjZS0+ZGV2OworCisJLyogU2V0IHVwIGEgSG9zdCBJbmZvIFdVU0IgSW5mb3JtYXRpb24gRWxlbWVudCAqLworCWRfZm5zdGFydCg0LCBkZXYsICIoaHdhaGMgJXApXG4iLCBod2FoYyk7CisJcmVzdWx0ID0gLUVOT1NQQzsKKworCXJlc3VsdCA9IF9fd2Ffc2V0X2ZlYXR1cmUoJmh3YWhjLT53YSwgV0FfRU5BQkxFKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIGNvbW1hbmRpbmcgSEMgdG8gc3RhcnQ6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3N0b3A7CisJfQorCXJlc3VsdCA9IF9fd2Ffd2FpdF9zdGF0dXMoJmh3YWhjLT53YSwgV0FfRU5BQkxFLCBXQV9FTkFCTEUpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3Igd2FpdGluZyBmb3IgSEMgdG8gc3RhcnQ6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3N0b3A7CisJfQorCXJlc3VsdCA9IDA7CitvdXQ6CisJZF9mbmVuZCg0LCBkZXYsICIoaHdhaGMgJXApID0gJWRcbiIsIGh3YWhjLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7CisKK2Vycm9yX3N0b3A6CisJcmVzdWx0ID0gX193YV9jbGVhcl9mZWF0dXJlKCZod2FoYy0+d2EsIFdBX0VOQUJMRSk7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgaHdhaGNfb3Bfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjID0gY29udGFpbmVyX29mKHd1c2JoYywgc3RydWN0IGh3YWhjLCB3dXNiaGMpOworCWRldl9lcnIod3VzYmhjLT5kZXYsICIlcyAoJXAgWyVwXSwgMHglbHgpIFVOSU1QTEVNRU5URURcbiIsIF9fZnVuY19fLAorCQl1c2JfaGNkLCBod2FoYywgKih1bnNpZ25lZCBsb25nICopICZtc2cpOworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IGh3YWhjX29wX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCkKK3sKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjID0gY29udGFpbmVyX29mKHd1c2JoYywgc3RydWN0IGh3YWhjLCB3dXNiaGMpOworCisJZGV2X2Vycih3dXNiaGMtPmRldiwgIiVzICglcCBbJXBdKSBVTklNUExFTUVOVEVEXG4iLCBfX2Z1bmNfXywKKwkJdXNiX2hjZCwgaHdhaGMpOworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgdm9pZCBfX2h3YWhjX29wX3d1c2JoY19zdG9wKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBod2FoYyAqaHdhaGMgPSBjb250YWluZXJfb2Yod3VzYmhjLCBzdHJ1Y3QgaHdhaGMsIHd1c2JoYyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmh3YWhjLT53YS51c2JfaWZhY2UtPmRldjsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoaHdhaGMgJXApXG4iLCBod2FoYyk7CisJLyogTm90aGluZyBmb3Igbm93ICovCisJZF9mbmVuZCg0LCBkZXYsICIoaHdhaGMgJXApID0gJWRcbiIsIGh3YWhjLCByZXN1bHQpOworCXJldHVybjsKK30KKworLyoKKyAqIE5vIG5lZWQgdG8gYWJvcnQgcGlwZXMsIGFzIHdoZW4gdGhpcyBpcyBjYWxsZWQsIGFsbCB0aGUgY2hpbGRyZW4KKyAqIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgdGhhdCBoYXMgZG9uZSBpdCBbdGhyb3VnaAorICogdXNiX2Rpc2FibGVfaW50ZXJmYWNlKCkgLT4gdXNiX2Rpc2FibGVfZW5kcG9pbnQoKSAtPgorICogaHdhaGNfb3BfZXBfZGlzYWJsZSgpIC0gPnJwaXBlX2VwX2Rpc2FibGUoKV0uCisgKi8KK3N0YXRpYyB2b2lkIGh3YWhjX29wX3N0b3Aoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjID0gY29udGFpbmVyX29mKHd1c2JoYywgc3RydWN0IGh3YWhjLCB3dXNiaGMpOworCXN0cnVjdCB3YWhjICp3YSA9ICZod2FoYy0+d2E7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoaHdhaGMgJXApXG4iLCBod2FoYyk7CisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJd3VzYmhjX3N0b3Aod3VzYmhjKTsKKwl3YV9uZXBfZGlzYXJtKCZod2FoYy0+d2EpOworCXJlc3VsdCA9IF9fd2Ffc3RvcCgmaHdhaGMtPndhKTsKKwl3dXNiX2NsdXN0ZXJfaWRfcHV0KHd1c2JoYy0+Y2x1c3Rlcl9pZCk7CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwlkX2ZuZW5kKDQsIGRldiwgIihod2FoYyAlcCkgPSAlZFxuIiwgaHdhaGMsIHJlc3VsdCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGh3YWhjX29wX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJc3RydWN0IGh3YWhjICpod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKKworCWRldl9lcnIod3VzYmhjLT5kZXYsICIlcyAoJXAgWyVwXSkgVU5JTVBMRU1FTlRFRFxuIiwgX19mdW5jX18sCisJCXVzYl9oY2QsIGh3YWhjKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCBod2FoY19vcF91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCwgc3RydWN0IHVyYiAqdXJiLAorCQkJCWdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjID0gY29udGFpbmVyX29mKHd1c2JoYywgc3RydWN0IGh3YWhjLCB3dXNiaGMpOworCisJcmV0dXJuIHdhX3VyYl9lbnF1ZXVlKCZod2FoYy0+d2EsIHVyYi0+ZXAsIHVyYiwgZ2ZwKTsKK30KKworc3RhdGljIGludCBod2FoY19vcF91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCwgc3RydWN0IHVyYiAqdXJiLAorCQkJCWludCBzdGF0dXMpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJc3RydWN0IGh3YWhjICpod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKKworCXJldHVybiB3YV91cmJfZGVxdWV1ZSgmaHdhaGMtPndhLCB1cmIpOworfQorCisvKgorICogUmVsZWFzZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBhbiBlbmRwb2ludAorICoKKyAqIElmIHRoZXJlIGlzIGFuIGFzc29jaWF0ZWQgcnBpcGUgdG8gdGhpcyBlbmRwb2ludCwgZ28gYWhlYWQgYW5kIHB1dCBpdC4KKyAqLworc3RhdGljIHZvaWQgaHdhaGNfb3BfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCwKKwkJCQkgICAgICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCXN0cnVjdCBod2FoYyAqaHdhaGMgPSBjb250YWluZXJfb2Yod3VzYmhjLCBzdHJ1Y3QgaHdhaGMsIHd1c2JoYyk7CisKKwlycGlwZV9lcF9kaXNhYmxlKCZod2FoYy0+d2EsIGVwKTsKK30KKworLyoKKyAqIFNldCB0aGUgVVdCIE1BUyBhbGxvY2F0aW9uIGZvciB0aGUgV1VTQiBjbHVzdGVyCisgKgorICogQHN0cmVhbV9pbmRleDogc3RyZWFtIHRvIHVzZSAoLTEgZm9yIGNhbmNlbGxpbmcgdGhlIGFsbG9jYXRpb24pCisgKiBAbWFzOiBtYXMgYml0bWFwIHRvIHVzZQorICovCitzdGF0aWMgaW50IF9faHdhaGNfb3BfYndhX3NldChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHM4IHN0cmVhbV9pbmRleCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1d2JfbWFzX2JtICptYXMpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjID0gY29udGFpbmVyX29mKHd1c2JoYywgc3RydWN0IGh3YWhjLCB3dXNiaGMpOworCXN0cnVjdCB3YWhjICp3YSA9ICZod2FoYy0+d2E7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwl1OCBtYXNfbGVbVVdCX05VTV9NQVMvOF07CisKKwkvKiBTZXQgdGhlIHN0cmVhbSBpbmRleCAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyh3YS0+dXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHdhLT51c2JfZGV2LCAwKSwKKwkJCVdVU0JfUkVRX1NFVF9TVFJFQU1fSURYLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQlzdHJlYW1faW5kZXgsCisJCQl3YS0+dXNiX2lmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJTlVMTCwgMCwgMTAwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBzZXQgV1VTQiBzdHJlYW0gaW5kZXg6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIG91dDsKKwl9CisJdXdiX21hc19ibV9jb3B5X2xlKG1hc19sZSwgbWFzKTsKKwkvKiBTZXQgdGhlIE1BUyBhbGxvY2F0aW9uICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHdhLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUod2EtPnVzYl9kZXYsIDApLAorCQkJV1VTQl9SRVFfU0VUX1dVU0JfTUFTLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkwLCB3YS0+dXNiX2lmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJbWFzX2xlLCAzMiwgMTAwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycihkZXYsICJDYW5ub3Qgc2V0IFdVU0IgTUFTIGFsbG9jYXRpb246ICVkXG4iLCByZXN1bHQpOworb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBBZGQgYW4gSUUgdG8gdGhlIGhvc3QncyBNTUMKKyAqCisgKiBAaW50ZXJ2YWw6ICAgIFNlZSBXVVNCMS4wWzguNS4zLjFdCisgKiBAcmVwZWF0X2NudDogIFNlZSBXVVNCMS4wWzguNS4zLjFdCisgKiBAaGFuZGxlOiAgICAgIFNlZSBXVVNCMS4wWzguNS4zLjFdCisgKiBAd3VpZTogICAgICAgIFBvaW50ZXIgdG8gdGhlIGhlYWRlciBvZiB0aGUgV1VTQiBJRSBkYXRhIHRvIGFkZC4KKyAqICAgICAgICAgICAgICAgTVVTVCBCRSBhbGxvY2F0ZWQgaW4gYSBrbWFsbG9jIGJ1ZmZlciAobm8gc3RhY2sgb3IKKyAqICAgICAgICAgICAgICAgdm1hbGxvYykuCisgKgorICogTk9URTogdGhlIGZvcm1hdCBvZiB0aGUgV1VTQiBJRXMgZm9yIE1NQ3MgYXJlIGRpZmZlcmVudCB0byB0aGUKKyAqICAgICAgIG5vcm1hbCBNQk9BIE1BQyBJRXMgKElFIElkICsgTGVuZ3RoIGluIE1CT0EgTUFDIHZzLiBMZW5ndGggKworICogICAgICAgSWQgaW4gV1VTQiBJRXMpLiBTdGFuZGFyZHMuLi55b3UgZ290dGEgbG92ZSdlbS4KKyAqLworc3RhdGljIGludCBfX2h3YWhjX29wX21tY2llX2FkZChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IGludGVydmFsLAorCQkJCXU4IHJlcGVhdF9jbnQsIHU4IGhhbmRsZSwKKwkJCQlzdHJ1Y3Qgd3VpZV9oZHIgKnd1aWUpCit7CisJc3RydWN0IGh3YWhjICpod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKKwlzdHJ1Y3Qgd2FoYyAqd2EgPSAmaHdhaGMtPndhOworCXU4IGlmYWNlX25vID0gd2EtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCXJldHVybiB1c2JfY29udHJvbF9tc2cod2EtPnVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh3YS0+dXNiX2RldiwgMCksCisJCQlXVVNCX1JFUV9BRERfTU1DX0lFLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQlpbnRlcnZhbCA8PCA4IHwgcmVwZWF0X2NudCwKKwkJCWhhbmRsZSA8PCA4IHwgaWZhY2Vfbm8sCisJCQl3dWllLCB3dWllLT5iTGVuZ3RoLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworfQorCisvKgorICogUmVtb3ZlIGFuIElFIHRvIHRoZSBob3N0J3MgTU1DCisgKgorICogQGhhbmRsZTogICAgICBTZWUgV1VTQjEuMFs4LjUuMy4xXQorICovCitzdGF0aWMgaW50IF9faHdhaGNfb3BfbW1jaWVfcm0oc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBoYW5kbGUpCit7CisJc3RydWN0IGh3YWhjICpod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKKwlzdHJ1Y3Qgd2FoYyAqd2EgPSAmaHdhaGMtPndhOworCXU4IGlmYWNlX25vID0gd2EtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHdhLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUod2EtPnVzYl9kZXYsIDApLAorCQkJV1VTQl9SRVFfUkVNT1ZFX01NQ19JRSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMCwgaGFuZGxlIDw8IDggfCBpZmFjZV9ubywKKwkJCU5VTEwsIDAsIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7Cit9CisKKy8qCisgKiBVcGRhdGUgZGV2aWNlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGZha2UgcG9ydAorICoKKyAqIEBwb3J0X2lkeDogRmFrZSBwb3J0IHRvIHdoaWNoIGRldmljZSBpcyBjb25uZWN0ZWQgKHd1c2JoYyBpbmRleCwgbm90CisgKiAgICAgICAgICAgIFVTQiBwb3J0IG51bWJlcikuCisgKi8KK3N0YXRpYyBpbnQgX19od2FoY19vcF9kZXZfaW5mb19zZXQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLAorCQkJCSAgIHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJc3RydWN0IGh3YWhjICpod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKKwlzdHJ1Y3Qgd2FoYyAqd2EgPSAmaHdhaGMtPndhOworCXU4IGlmYWNlX25vID0gd2EtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlzdHJ1Y3QgaHdhX2Rldl9pbmZvICpkZXZfaW5mbzsKKwlpbnQgcmV0OworCisJLyogZmlsbCBvdXQgdGhlIERldmljZSBJbmZvIGJ1ZmZlciBhbmQgc2VuZCBpdCAqLworCWRldl9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh3YV9kZXZfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghZGV2X2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCXV3Yl9tYXNfYm1fY29weV9sZShkZXZfaW5mby0+Ym1EZXZpY2VBdmFpbGFiaWxpdHksCisJCQkgICAmd3VzYl9kZXYtPmF2YWlsYWJpbGl0eSk7CisJZGV2X2luZm8tPmJEZXZpY2VBZGRyZXNzID0gd3VzYl9kZXYtPmFkZHI7CisKKwkvKgorCSAqIElmIHRoZSBkZXNjcmlwdG9ycyBoYXZlbid0IGJlZW4gcmVhZCB5ZXQsIHVzZSBhIGRlZmF1bHQgUEhZCisJICogcmF0ZSBvZiA1My4zIE1iaXQvcyBvbmx5LiAgVGhlIGNvcnJlY3QgdmFsdWUgd2lsbCBiZSB1c2VkCisJICogd2hlbiB0aGlzIHdpbGwgYmUgY2FsbGVkIGFnYWluIGFzIHBhcnQgb2YgdGhlCisJICogYXV0aGVudGljYXRpb24gcHJvY2VzcyAod2hpY2ggb2NjdXJzIGFmdGVyIHRoZSBkZXNjcmlwdG9ycworCSAqIGhhdmUgYmVlbiByZWFkKS4KKwkgKi8KKwlpZiAod3VzYl9kZXYtPnd1c2JfY2FwX2Rlc2NyKQorCQlkZXZfaW5mby0+d1BIWVJhdGVzID0gd3VzYl9kZXYtPnd1c2JfY2FwX2Rlc2NyLT53UEhZUmF0ZXM7CisJZWxzZQorCQlkZXZfaW5mby0+d1BIWVJhdGVzID0gY3B1X3RvX2xlMTYoVVNCX1dJUkVMRVNTX1BIWV81Myk7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2cod2EtPnVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh3YS0+dXNiX2RldiwgMCksCisJCQlXVVNCX1JFUV9TRVRfREVWX0lORk8sCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTAsIHd1c2JfZGV2LT5wb3J0X2lkeCA8PCA4IHwgaWZhY2Vfbm8sCisJCQlkZXZfaW5mbywgc2l6ZW9mKHN0cnVjdCBod2FfZGV2X2luZm8pLAorCQkJMTAwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKKwlrZnJlZShkZXZfaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCBob3N0J3MgaWRlYSBvZiB3aGljaCBlbmNyeXB0aW9uIChhbmQga2V5KSBtZXRob2QgdG8gdXNlIHdoZW4KKyAqIHRhbGtpbmcgdG8gYWQgZXZpY2Ugb24gYSBnaXZlbiBwb3J0LgorICoKKyAqIElmIGtleSBpcyBOVUxMLCBpdCBtZWFucyBkaXNhYmxlIGVuY3J5cHRpb24gZm9yIHRoYXQgInZpcnR1YWwgcG9ydCIKKyAqICh1c2VkIHdoZW4gd2UgZGlzY29ubmVjdCkuCisgKi8KK3N0YXRpYyBpbnQgX19od2FoY19kZXZfc2V0X2tleShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IHBvcnRfaWR4LCB1MzIgdGtpZCwKKwkJCSAgICAgICBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlfc2l6ZSwKKwkJCSAgICAgICB1OCBrZXlfaWR4KQoreworCWludCByZXN1bHQgPSAtRU5PTUVNOworCXN0cnVjdCBod2FoYyAqaHdhaGMgPSBjb250YWluZXJfb2Yod3VzYmhjLCBzdHJ1Y3QgaHdhaGMsIHd1c2JoYyk7CisJc3RydWN0IHdhaGMgKndhID0gJmh3YWhjLT53YTsKKwl1OCBpZmFjZV9ubyA9IHdhLT51c2JfaWZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJc3RydWN0IHVzYl9rZXlfZGVzY3JpcHRvciAqa2V5ZDsKKwlzaXplX3Qga2V5ZF9sZW47CisKKwlrZXlkX2xlbiA9IHNpemVvZigqa2V5ZCkgKyBrZXlfc2l6ZTsKKwlrZXlkID0ga3phbGxvYyhrZXlkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGtleWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlrZXlkLT5iTGVuZ3RoID0ga2V5ZF9sZW47CisJa2V5ZC0+YkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0tFWTsKKwlrZXlkLT50VEtJRFswXSA9ICh0a2lkID4+ICAwKSAmIDB4ZmY7CisJa2V5ZC0+dFRLSURbMV0gPSAodGtpZCA+PiAgOCkgJiAweGZmOworCWtleWQtPnRUS0lEWzJdID0gKHRraWQgPj4gMTYpICYgMHhmZjsKKwltZW1jcHkoa2V5ZC0+YktleURhdGEsIGtleSwga2V5X3NpemUpOworCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHdhLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUod2EtPnVzYl9kZXYsIDApLAorCQkJVVNCX1JFUV9TRVRfREVTQ1JJUFRPUiwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJVVNCX0RUX0tFWSA8PCA4IHwga2V5X2lkeCwKKwkJCXBvcnRfaWR4IDw8IDggfCBpZmFjZV9ubywKKwkJCWtleWQsIGtleWRfbGVuLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworCisJbWVtc2V0KGtleWQsIDAsIHNpemVvZigqa2V5ZCkpOwkvKiBjbGVhciBrZXlzIGV0Yy4gKi8KKwlrZnJlZShrZXlkKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogU2V0IGhvc3QncyBpZGVhIG9mIHdoaWNoIGVuY3J5cHRpb24gKGFuZCBrZXkpIG1ldGhvZCB0byB1c2Ugd2hlbgorICogdGFsa2luZyB0byBhZCBldmljZSBvbiBhIGdpdmVuIHBvcnQuCisgKgorICogSWYga2V5IGlzIE5VTEwsIGl0IG1lYW5zIGRpc2FibGUgZW5jcnlwdGlvbiBmb3IgdGhhdCAidmlydHVhbCBwb3J0IgorICogKHVzZWQgd2hlbiB3ZSBkaXNjb25uZWN0KS4KKyAqLworc3RhdGljIGludCBfX2h3YWhjX29wX3NldF9wdGsoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBwb3J0X2lkeCwgdTMyIHRraWQsCisJCQkgICAgICBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlfc2l6ZSkKK3sKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjID0gY29udGFpbmVyX29mKHd1c2JoYywgc3RydWN0IGh3YWhjLCB3dXNiaGMpOworCXN0cnVjdCB3YWhjICp3YSA9ICZod2FoYy0+d2E7CisJdTggaWZhY2Vfbm8gPSB3YS0+dXNiX2lmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCXU4IGVuY3J5cHRpb25fdmFsdWU7CisKKwkvKiBUZWxsIHRoZSBob3N0IHdoaWNoIGtleSB0byB1c2UgdG8gdGFsayB0byB0aGUgZGV2aWNlICovCisJaWYgKGtleSkgeworCQl1OCBrZXlfaWR4ID0gd3VzYl9rZXlfaW5kZXgoMCwgV1VTQl9LRVlfSU5ERVhfVFlQRV9QVEssCisJCQkJCSAgICBXVVNCX0tFWV9JTkRFWF9PUklHSU5BVE9SX0hPU1QpOworCisJCXJlc3VsdCA9IF9faHdhaGNfZGV2X3NldF9rZXkod3VzYmhjLCBwb3J0X2lkeCwgdGtpZCwKKwkJCQkJICAgICBrZXksIGtleV9zaXplLCBrZXlfaWR4KTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlnb3RvIGVycm9yX3NldF9rZXk7CisJCWVuY3J5cHRpb25fdmFsdWUgPSB3dXNiaGMtPmNjbTFfZXRkLT5iRW5jcnlwdGlvblZhbHVlOworCX0gZWxzZSB7CisJCS8qIEZJWE1FOiB0aGlzIHNob3VsZCBjb21lIGZyb20gd3VzYmhjLT5ldGRbVU5TRUNVUkVdLnZhbHVlICovCisJCWVuY3J5cHRpb25fdmFsdWUgPSAwOworCX0KKworCS8qIFNldCB0aGUgZW5jcnlwdGlvbiB0eXBlIGZvciBjb21tbXVuaWNhdGluZyB3aXRoIHRoZSBkZXZpY2UgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cod2EtPnVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh3YS0+dXNiX2RldiwgMCksCisJCQlVU0JfUkVRX1NFVF9FTkNSWVBUSU9OLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQllbmNyeXB0aW9uX3ZhbHVlLCBwb3J0X2lkeCA8PCA4IHwgaWZhY2Vfbm8sCisJCQlOVUxMLCAwLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKHd1c2JoYy0+ZGV2LCAiQ2FuJ3Qgc2V0IGhvc3QncyBXVVNCIGVuY3J5cHRpb24gZm9yICIKKwkJCSJwb3J0IGluZGV4ICV1IHRvICVzICh2YWx1ZSAlZCk6ICVkXG4iLCBwb3J0X2lkeCwKKwkJCXd1c2JfZXRfbmFtZSh3dXNiaGMtPmNjbTFfZXRkLT5iRW5jcnlwdGlvblR5cGUpLAorCQkJd3VzYmhjLT5jY20xX2V0ZC0+YkVuY3J5cHRpb25WYWx1ZSwgcmVzdWx0KTsKK2Vycm9yX3NldF9rZXk6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFNldCBob3N0J3MgR1RLIGtleQorICovCitzdGF0aWMgaW50IF9faHdhaGNfb3Bfc2V0X2d0ayhzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHUzMiB0a2lkLAorCQkJICAgICAgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5X3NpemUpCit7CisJdTgga2V5X2lkeCA9IHd1c2Jfa2V5X2luZGV4KDAsIFdVU0JfS0VZX0lOREVYX1RZUEVfR1RLLAorCQkJCSAgICBXVVNCX0tFWV9JTkRFWF9PUklHSU5BVE9SX0hPU1QpOworCisJcmV0dXJuIF9faHdhaGNfZGV2X3NldF9rZXkod3VzYmhjLCAwLCB0a2lkLCBrZXksIGtleV9zaXplLCBrZXlfaWR4KTsKK30KKworLyoKKyAqIEdldCB0aGUgV2lyZSBBZGFwdGVyIGNsYXNzLXNwZWNpZmljIGRlc2NyaXB0b3IKKyAqCisgKiBOT1RFOiB0aGlzIGRlc2NyaXB0b3IgY29tZXMgd2l0aCB0aGUgYmlnIGJ1bmRsZWQgY29uZmlndXJhdGlvbgorICogICAgICAgZGVzY3JpcHRvciB0aGF0IGluY2x1ZGVzIHRoZSBpbnRlcmZhY2VzJyBhbmQgZW5kcG9pbnRzJywgc28KKyAqICAgICAgIHdlIGp1c3QgbG9vayBmb3IgaXQgaW4gdGhlIGNhY2hlZCBjb3B5IGtlcHQgYnkgdGhlIFVTQiBzdGFjay4KKyAqCisgKiBOT1RFMjogV2UgY29udmVydCBMRSBmaWVsZHMgdG8gQ1BVIG9yZGVyLgorICovCitzdGF0aWMgaW50IHdhX2ZpbGxfZGVzY3Ioc3RydWN0IHdhaGMgKndhKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwljaGFyICppdHI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB3YS0+dXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoZHI7CisJc3RydWN0IHVzYl93YV9kZXNjcmlwdG9yICp3YV9kZXNjcjsKKwlzaXplX3QgaXRyX3NpemUsIGFjdGNvbmZpZ19pZHg7CisKKwlhY3Rjb25maWdfaWR4ID0gKHVzYl9kZXYtPmFjdGNvbmZpZyAtIHVzYl9kZXYtPmNvbmZpZykgLworCQkJc2l6ZW9mKHVzYl9kZXYtPmNvbmZpZ1swXSk7CisJaXRyID0gdXNiX2Rldi0+cmF3ZGVzY3JpcHRvcnNbYWN0Y29uZmlnX2lkeF07CisJaXRyX3NpemUgPSBsZTE2X3RvX2NwdSh1c2JfZGV2LT5hY3Rjb25maWctPmRlc2Mud1RvdGFsTGVuZ3RoKTsKKwl3aGlsZSAoaXRyX3NpemUgPj0gc2l6ZW9mKCpoZHIpKSB7CisJCWhkciA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopIGl0cjsKKwkJZF9wcmludGYoMywgZGV2LCAiRXh0cmEgZGV2aWNlIGRlc2NyaXB0b3I6ICIKKwkJCSAidHlwZSAlMDJ4LyV1IGJ5dGVzIEAgJXp1ICglenUgbGVmdClcbiIsCisJCQkgaGRyLT5iRGVzY3JpcHRvclR5cGUsIGhkci0+Ykxlbmd0aCwKKwkJCSAoaXRyIC0gdXNiX2Rldi0+cmF3ZGVzY3JpcHRvcnNbYWN0Y29uZmlnX2lkeF0pLAorCQkJIGl0cl9zaXplKTsKKwkJaWYgKGhkci0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9XSVJFX0FEQVBURVIpCisJCQlnb3RvIGZvdW5kOworCQlpdHIgKz0gaGRyLT5iTGVuZ3RoOworCQlpdHJfc2l6ZSAtPSBoZHItPmJMZW5ndGg7CisJfQorCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgV2lyZSBBZGFwdGVyIENsYXNzIGRlc2NyaXB0b3JcbiIpOworCXJldHVybiAtRU5PREVWOworCitmb3VuZDoKKwlyZXN1bHQgPSAtRUlOVkFMOworCWlmIChoZHItPmJMZW5ndGggPiBpdHJfc2l6ZSkgewkvKiBpcyBpdCBhdmFpbGFibGU/ICovCisJCWRldl9lcnIoZGV2LCAiaW5jb21wbGV0ZSBXaXJlIEFkYXB0ZXIgQ2xhc3MgZGVzY3JpcHRvciAiCisJCQkiKCV6dSBieXRlcyBsZWZ0LCAldSBuZWVkZWQpXG4iLAorCQkJaXRyX3NpemUsIGhkci0+Ykxlbmd0aCk7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChoZHItPmJMZW5ndGggPCBzaXplb2YoKndhLT53YV9kZXNjcikpIHsKKwkJZGV2X2VycihkZXYsICJzaG9ydCBXaXJlIEFkYXB0ZXIgQ2xhc3MgZGVzY3JpcHRvclxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXdhLT53YV9kZXNjciA9IHdhX2Rlc2NyID0gKHN0cnVjdCB1c2Jfd2FfZGVzY3JpcHRvciAqKSBoZHI7CisJLyogTWFrZSBMRSBmaWVsZHMgQ1BVIG9yZGVyICovCisJd2FfZGVzY3ItPmJjZFdBVmVyc2lvbiA9IGxlMTZfdG9fY3B1KHdhX2Rlc2NyLT5iY2RXQVZlcnNpb24pOworCXdhX2Rlc2NyLT53TnVtUlBpcGVzID0gbGUxNl90b19jcHUod2FfZGVzY3ItPndOdW1SUGlwZXMpOworCXdhX2Rlc2NyLT53UlBpcGVNYXhCbG9jayA9IGxlMTZfdG9fY3B1KHdhX2Rlc2NyLT53UlBpcGVNYXhCbG9jayk7CisJaWYgKHdhX2Rlc2NyLT5iY2RXQVZlcnNpb24gPiAweDAxMDApCisJCWRldl93YXJuKGRldiwgIldpcmUgQWRhcHRlciB2JWQuJWQgbmV3ZXIgdGhhbiBncm9rZWQgdjEuMFxuIiwKKwkJCSB3YV9kZXNjci0+YmNkV0FWZXJzaW9uICYgMHhmZjAwID4+IDgsCisJCQkgd2FfZGVzY3ItPmJjZFdBVmVyc2lvbiAmIDB4MDBmZik7CisJcmVzdWx0ID0gMDsKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIGh3YWhjX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPSAiaHdhLWhjZCIsCisJLnByb2R1Y3RfZGVzYyA9ICJXaXJlbGVzcyBVU0IgSFdBIGhvc3QgY29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGh3YWhjKSAtIHNpemVvZihzdHJ1Y3QgdXNiX2hjZCksCisJLmlycSA9IE5VTEwsCQkJLyogRklYTUUgKi8KKwkuZmxhZ3MgPSBIQ0RfVVNCMiwJCS8qIEZJWE1FICovCisJLnJlc2V0ID0gaHdhaGNfb3BfcmVzZXQsCisJLnN0YXJ0ID0gaHdhaGNfb3Bfc3RhcnQsCisJLnBjaV9zdXNwZW5kID0gaHdhaGNfb3Bfc3VzcGVuZCwKKwkucGNpX3Jlc3VtZSA9IGh3YWhjX29wX3Jlc3VtZSwKKwkuc3RvcCA9IGh3YWhjX29wX3N0b3AsCisJLmdldF9mcmFtZV9udW1iZXIgPSBod2FoY19vcF9nZXRfZnJhbWVfbnVtYmVyLAorCS51cmJfZW5xdWV1ZSA9IGh3YWhjX29wX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9IGh3YWhjX29wX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0gaHdhaGNfb3BfZW5kcG9pbnRfZGlzYWJsZSwKKworCS5odWJfc3RhdHVzX2RhdGEgPSB3dXNiaGNfcmhfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0gd3VzYmhjX3JoX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kID0gd3VzYmhjX3JoX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPSB3dXNiaGNfcmhfcmVzdW1lLAorCS5zdGFydF9wb3J0X3Jlc2V0ID0gd3VzYmhjX3JoX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCitzdGF0aWMgaW50IGh3YWhjX3NlY3VyaXR5X2NyZWF0ZShzdHJ1Y3QgaHdhaGMgKmh3YWhjKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gJmh3YWhjLT53dXNiaGM7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBod2FoYy0+d2EudXNiX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXNiX2Rldi0+ZGV2OworCXN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciAqc2VjZDsKKwlzdHJ1Y3QgdXNiX2VuY3J5cHRpb25fZGVzY3JpcHRvciAqZXRkOworCXZvaWQgKml0ciwgKnRvcDsKKwlzaXplX3QgaXRyX3NpemUsIG5lZWRlZCwgYnl0ZXM7CisJdTggaW5kZXg7CisJY2hhciBidWZbNjRdOworCisJLyogRmluZCB0aGUgaG9zdCdzIHNlY3VyaXR5IGRlc2NyaXB0b3JzIGluIHRoZSBjb25maWcgZGVzY3IgYnVuZGxlICovCisJaW5kZXggPSAodXNiX2Rldi0+YWN0Y29uZmlnIC0gdXNiX2Rldi0+Y29uZmlnKSAvCisJCXNpemVvZih1c2JfZGV2LT5jb25maWdbMF0pOworCWl0ciA9IHVzYl9kZXYtPnJhd2Rlc2NyaXB0b3JzW2luZGV4XTsKKwlpdHJfc2l6ZSA9IGxlMTZfdG9fY3B1KHVzYl9kZXYtPmFjdGNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGgpOworCXRvcCA9IGl0ciArIGl0cl9zaXplOworCXJlc3VsdCA9IF9fdXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKHVzYl9kZXYtPnJhd2Rlc2NyaXB0b3JzW2luZGV4XSwKKwkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmFjdGNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGgpLAorCQkJVVNCX0RUX1NFQ1VSSVRZLCAodm9pZCAqKikgJnNlY2QpOworCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJZGV2X3dhcm4oZGV2LCAiQlVHPyBXVVNCIGhvc3QgaGFzIG5vIHNlY3VyaXR5IGRlc2NyaXB0b3JzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCW5lZWRlZCA9IHNpemVvZigqc2VjZCk7CisJaWYgKHRvcCAtICh2b2lkICopc2VjZCA8IG5lZWRlZCkgeworCQlkZXZfZXJyKGRldiwgIkJVRz8gTm90IGVub3VnaCBkYXRhIHRvIHByb2Nlc3Mgc2VjdXJpdHkgIgorCQkJImRlc2NyaXB0b3IgaGVhZGVyICglenUgYnl0ZXMgbGVmdCB2cyAlenUgbmVlZGVkKVxuIiwKKwkJCXRvcCAtICh2b2lkICopIHNlY2QsIG5lZWRlZCk7CisJCXJldHVybiAwOworCX0KKwluZWVkZWQgPSBsZTE2X3RvX2NwdShzZWNkLT53VG90YWxMZW5ndGgpOworCWlmICh0b3AgLSAodm9pZCAqKXNlY2QgPCBuZWVkZWQpIHsKKwkJZGV2X2VycihkZXYsICJCVUc/IE5vdCBlbm91Z2ggZGF0YSB0byBwcm9jZXNzIHNlY3VyaXR5ICIKKwkJCSJkZXNjcmlwdG9ycyAoJXp1IGJ5dGVzIGxlZnQgdnMgJXp1IG5lZWRlZClcbiIsCisJCQl0b3AgLSAodm9pZCAqKSBzZWNkLCBuZWVkZWQpOworCQlyZXR1cm4gMDsKKwl9CisJLyogV2FsayBvdmVyIHRoZSBzZWMgZGVzY3JpcHRvcnMgYW5kIHN0b3JlIENDTTEncyBvbiB3dXNiaGMgKi8KKwlpdHIgPSAodm9pZCAqKSBzZWNkICsgc2l6ZW9mKCpzZWNkKTsKKwl0b3AgPSAodm9pZCAqKSBzZWNkICsgbGUxNl90b19jcHUoc2VjZC0+d1RvdGFsTGVuZ3RoKTsKKwlpbmRleCA9IDA7CisJYnl0ZXMgPSAwOworCXdoaWxlIChpdHIgPCB0b3ApIHsKKwkJZXRkID0gaXRyOworCQlpZiAodG9wIC0gaXRyIDwgc2l6ZW9mKCpldGQpKSB7CisJCQlkZXZfZXJyKGRldiwgIkJVRzogYmFkIGhvc3Qgc2VjdXJpdHkgZGVzY3JpcHRvcjsgIgorCQkJCSJub3QgZW5vdWdoIGRhdGEgKCV6dSB2cyAlenUgbGVmdClcbiIsCisJCQkJdG9wIC0gaXRyLCBzaXplb2YoKmV0ZCkpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGV0ZC0+Ykxlbmd0aCA8IHNpemVvZigqZXRkKSkgeworCQkJZGV2X2VycihkZXYsICJCVUc6IGJhZCBob3N0IGVuY3J5cHRpb24gZGVzY3JpcHRvcjsgIgorCQkJCSJkZXNjcmlwdG9yIGlzIHRvbyBzaG9ydCAiCisJCQkJIiglenUgdnMgJXp1IG5lZWRlZClcbiIsCisJCQkJKHNpemVfdClldGQtPmJMZW5ndGgsIHNpemVvZigqZXRkKSk7CisJCQlicmVhazsKKwkJfQorCQlpdHIgKz0gZXRkLT5iTGVuZ3RoOworCQlieXRlcyArPSBzbnByaW50ZihidWYgKyBieXRlcywgc2l6ZW9mKGJ1ZikgLSBieXRlcywKKwkJCQkgICIlcyAoMHglMDJ4KSAiLAorCQkJCSAgd3VzYl9ldF9uYW1lKGV0ZC0+YkVuY3J5cHRpb25UeXBlKSwKKwkJCQkgIGV0ZC0+YkVuY3J5cHRpb25WYWx1ZSk7CisJCXd1c2JoYy0+Y2NtMV9ldGQgPSBldGQ7CisJfQorCWRldl9pbmZvKGRldiwgInN1cHBvcnRlZCBlbmNyeXB0aW9uIHR5cGVzOiAlc1xuIiwgYnVmKTsKKwlpZiAod3VzYmhjLT5jY20xX2V0ZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiRTogaG9zdCBkb2Vzbid0IHN1cHBvcnQgQ0NNLTEgY3J5cHRvXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIFByZXR0eSBwcmludCB3aGF0IHdlIHN1cHBvcnQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHdhaGNfc2VjdXJpdHlfcmVsZWFzZShzdHJ1Y3QgaHdhaGMgKmh3YWhjKQoreworCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSBzbyBmYXIuLi4gKi8KK30KKworc3RhdGljIGludCBod2FoY19jcmVhdGUoc3RydWN0IGh3YWhjICpod2FoYywgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gJmh3YWhjLT53dXNiaGM7CisJc3RydWN0IHdhaGMgKndhID0gJmh3YWhjLT53YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaWZhY2UpOworCisJd2EtPnVzYl9kZXYgPSB1c2JfZ2V0X2Rldih1c2JfZGV2KTsJLyogYmluZCB0aGUgVVNCIGRldmljZSAqLworCXdhLT51c2JfaWZhY2UgPSB1c2JfZ2V0X2ludGYoaWZhY2UpOworCXd1c2JoYy0+ZGV2ID0gZGV2OworCXd1c2JoYy0+dXdiX3JjID0gdXdiX3JjX2dldF9ieV9ncmFuZHBhKGlmYWNlLT5kZXYucGFyZW50KTsKKwlpZiAod3VzYmhjLT51d2JfcmMgPT0gTlVMTCkgeworCQlyZXN1bHQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBnZXQgYXNzb2NpYXRlZCBVV0IgSG9zdCBDb250cm9sbGVyXG4iKTsKKwkJZ290byBlcnJvcl9yY19nZXQ7CisJfQorCXJlc3VsdCA9IHdhX2ZpbGxfZGVzY3Iod2EpOwkvKiBHZXQgdGhlIGRldmljZSBkZXNjcmlwdG9yICovCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfZmlsbF9kZXNjcmlwdG9yOworCWlmICh3YS0+d2FfZGVzY3ItPmJOdW1Qb3J0cyA+IFVTQl9NQVhDSElMRFJFTikgeworCQlkZXZfZXJyKGRldiwgIkZJWE1FOiBVU0JfTUFYQ0hJTERSRU4gdG9vIGxvdyBmb3IgV1VTQiAiCisJCQkiYWRhcHRlciAoJXUgcG9ydHMpXG4iLCB3YS0+d2FfZGVzY3ItPmJOdW1Qb3J0cyk7CisJCXd1c2JoYy0+cG9ydHNfbWF4ID0gVVNCX01BWENISUxEUkVOOworCX0gZWxzZSB7CisJCXd1c2JoYy0+cG9ydHNfbWF4ID0gd2EtPndhX2Rlc2NyLT5iTnVtUG9ydHM7CisJfQorCXd1c2JoYy0+bW1jaWVzX21heCA9IHdhLT53YV9kZXNjci0+Yk51bU1NQ0lFczsKKwl3dXNiaGMtPnN0YXJ0ID0gX19od2FoY19vcF93dXNiaGNfc3RhcnQ7CisJd3VzYmhjLT5zdG9wID0gX19od2FoY19vcF93dXNiaGNfc3RvcDsKKwl3dXNiaGMtPm1tY2llX2FkZCA9IF9faHdhaGNfb3BfbW1jaWVfYWRkOworCXd1c2JoYy0+bW1jaWVfcm0gPSBfX2h3YWhjX29wX21tY2llX3JtOworCXd1c2JoYy0+ZGV2X2luZm9fc2V0ID0gX19od2FoY19vcF9kZXZfaW5mb19zZXQ7CisJd3VzYmhjLT5id2Ffc2V0ID0gX19od2FoY19vcF9id2Ffc2V0OworCXd1c2JoYy0+c2V0X251bV9kbnRzID0gX19od2FoY19vcF9zZXRfbnVtX2RudHM7CisJd3VzYmhjLT5zZXRfcHRrID0gX19od2FoY19vcF9zZXRfcHRrOworCXd1c2JoYy0+c2V0X2d0ayA9IF9faHdhaGNfb3Bfc2V0X2d0azsKKwlyZXN1bHQgPSBod2FoY19zZWN1cml0eV9jcmVhdGUoaHdhaGMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgaW5pdGlhbGl6ZSBzZWN1cml0eTogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc2VjdXJpdHlfY3JlYXRlOworCX0KKwl3YS0+d3VzYiA9IHd1c2JoYzsJLyogRklYTUU6IHVnbHksIG5lZWQgdG8gZml4ICovCisJcmVzdWx0ID0gd3VzYmhjX2NyZWF0ZSgmaHdhaGMtPnd1c2JoYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDYW4ndCBjcmVhdGUgV1VTQiBIQyBzdHJ1Y3R1cmVzOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl93dXNiaGNfY3JlYXRlOworCX0KKwlyZXN1bHQgPSB3YV9jcmVhdGUoJmh3YWhjLT53YSwgaWZhY2UpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX3dhX2NyZWF0ZTsKKwlyZXR1cm4gMDsKKworZXJyb3Jfd2FfY3JlYXRlOgorCXd1c2JoY19kZXN0cm95KCZod2FoYy0+d3VzYmhjKTsKK2Vycm9yX3d1c2JoY19jcmVhdGU6CisJLyogV0EgRGVzY3IgZmlsbCBhbGxvY3Mgbm8gcmVzb3VyY2VzICovCitlcnJvcl9zZWN1cml0eV9jcmVhdGU6CitlcnJvcl9maWxsX2Rlc2NyaXB0b3I6CisJdXdiX3JjX3B1dCh3dXNiaGMtPnV3Yl9yYyk7CitlcnJvcl9yY19nZXQ6CisJdXNiX3B1dF9pbnRmKGlmYWNlKTsKKwl1c2JfcHV0X2Rldih1c2JfZGV2KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBod2FoY19kZXN0cm95KHN0cnVjdCBod2FoYyAqaHdhaGMpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gJmh3YWhjLT53dXNiaGM7CisKKwlkX2Zuc3RhcnQoMSwgTlVMTCwgIihod2FoYyAlcClcbiIsIGh3YWhjKTsKKwltdXRleF9sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwlfX3dhX2Rlc3Ryb3koJmh3YWhjLT53YSk7CisJd3VzYmhjX2Rlc3Ryb3koJmh3YWhjLT53dXNiaGMpOworCWh3YWhjX3NlY3VyaXR5X3JlbGVhc2UoaHdhaGMpOworCWh3YWhjLT53dXNiaGMuZGV2ID0gTlVMTDsKKwl1d2JfcmNfcHV0KHd1c2JoYy0+dXdiX3JjKTsKKwl1c2JfcHV0X2ludGYoaHdhaGMtPndhLnVzYl9pZmFjZSk7CisJdXNiX3B1dF9kZXYoaHdhaGMtPndhLnVzYl9kZXYpOworCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJZF9mbmVuZCgxLCBOVUxMLCAiKGh3YWhjICVwKSA9IHZvaWRcbiIsIGh3YWhjKTsKK30KKworc3RhdGljIHZvaWQgaHdhaGNfaW5pdChzdHJ1Y3QgaHdhaGMgKmh3YWhjKQoreworCXdhX2luaXQoJmh3YWhjLT53YSk7Cit9CisKK3N0YXRpYyBpbnQgaHdhaGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB1c2JfaGNkICp1c2JfaGNkOworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYzsKKwlzdHJ1Y3QgaHdhaGMgKmh3YWhjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfaWZhY2UtPmRldjsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoJXAsICVwKVxuIiwgdXNiX2lmYWNlLCBpZCk7CisJcmVzdWx0ID0gLUVOT01FTTsKKwl1c2JfaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmh3YWhjX2hjX2RyaXZlciwgJnVzYl9pZmFjZS0+ZGV2LCAid3VzYi1od2EiKTsKKwlpZiAodXNiX2hjZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIGluc3RhbmNlXG4iKTsKKwkJZ290byBlcnJvcl9hbGxvYzsKKwl9CisJdXNiX2hjZC0+d2lyZWxlc3MgPSAxOworCXVzYl9oY2QtPmZsYWdzIHw9IEhDRF9GTEFHX1NBV19JUlE7CisJd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJaHdhaGMgPSBjb250YWluZXJfb2Yod3VzYmhjLCBzdHJ1Y3QgaHdhaGMsIHd1c2JoYyk7CisJaHdhaGNfaW5pdChod2FoYyk7CisJcmVzdWx0ID0gaHdhaGNfY3JlYXRlKGh3YWhjLCB1c2JfaWZhY2UpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGluaXRpYWxpemUgaW50ZXJuYWxzOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9od2FoY19jcmVhdGU7CisJfQorCXJlc3VsdCA9IHVzYl9hZGRfaGNkKHVzYl9oY2QsIDAsIDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGFkZCBIQ0Q6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX2FkZF9oY2Q7CisJfQorCXJlc3VsdCA9IHd1c2JoY19iX2NyZWF0ZSgmaHdhaGMtPnd1c2JoYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3Qgc2V0dXAgcGhhc2UgQiBvZiBXVVNCSEM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3d1c2JoY19iX2NyZWF0ZTsKKwl9CisJZF9mbmVuZCg0LCBkZXYsICIoJXAsICVwKSA9IDBcbiIsIHVzYl9pZmFjZSwgaWQpOworCXJldHVybiAwOworCitlcnJvcl93dXNiaGNfYl9jcmVhdGU6CisJdXNiX3JlbW92ZV9oY2QodXNiX2hjZCk7CitlcnJvcl9hZGRfaGNkOgorCWh3YWhjX2Rlc3Ryb3koaHdhaGMpOworZXJyb3JfaHdhaGNfY3JlYXRlOgorCXVzYl9wdXRfaGNkKHVzYl9oY2QpOworZXJyb3JfYWxsb2M6CisJZF9mbmVuZCg0LCBkZXYsICIoJXAsICVwKSA9ICVkXG4iLCB1c2JfaWZhY2UsIGlkLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGh3YWhjX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZDsKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGM7CisJc3RydWN0IGh3YWhjICpod2FoYzsKKworCXVzYl9oY2QgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYl9pZmFjZSk7CisJd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJaHdhaGMgPSBjb250YWluZXJfb2Yod3VzYmhjLCBzdHJ1Y3QgaHdhaGMsIHd1c2JoYyk7CisKKwlkX2Zuc3RhcnQoMSwgTlVMTCwgIihod2FoYyAlcCBbdXNiX2lmYWNlICVwXSlcbiIsIGh3YWhjLCB1c2JfaWZhY2UpOworCXd1c2JoY19iX2Rlc3Ryb3koJmh3YWhjLT53dXNiaGMpOworCXVzYl9yZW1vdmVfaGNkKHVzYl9oY2QpOworCWh3YWhjX2Rlc3Ryb3koaHdhaGMpOworCXVzYl9wdXRfaGNkKHVzYl9oY2QpOworCWRfZm5lbmQoMSwgTlVMTCwgIihod2FoYyAlcCBbdXNiX2lmYWNlICVwXSkgPSB2b2lkXG4iLCBod2FoYywKKwkJdXNiX2lmYWNlKTsKK30KKworLyoqIFVTQiBkZXZpY2UgSUQncyB0aGF0IHdlIGhhbmRsZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGh3YWhjX2lkX3RhYmxlW10gPSB7CisJLyogRklYTUU6IHVzZSBjbGFzcyBsYWJlbHMgZm9yIHRoaXMgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTygweGUwLCAweDAyLCAweDAxKSwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaHdhaGNfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaHdhaGNfZHJpdmVyID0geworCS5uYW1lID0JCSJod2EtaGMiLAorCS5wcm9iZSA9CWh3YWhjX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JaHdhaGNfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlod2FoY19pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGh3YWhjX2RyaXZlcl9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmh3YWhjX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQS1DRFM6IENhbm5vdCByZWdpc3RlciBVU0IgZHJpdmVyOiAlZFxuIiwKKwkJICAgICAgIHJlc3VsdCk7CisJCWdvdG8gZXJyb3JfdXNiX3JlZ2lzdGVyOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3JfdXNiX3JlZ2lzdGVyOgorCXJldHVybiByZXN1bHQ7CisKK30KK21vZHVsZV9pbml0KGh3YWhjX2RyaXZlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGh3YWhjX2RyaXZlcl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmh3YWhjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChod2FoY19kcml2ZXJfZXhpdCk7CisKKworTU9EVUxFX0FVVEhPUigiSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSG9zdCBXaXJlZCBBZGFwdGVyIFVTQiBIb3N0IENvbnRyb2wgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggY2UxY2EwYi4uNGRkYTMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtMTU2MiwxMSArMTU2MiwxMiBAQAogewogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IGlzcDExNnggKmlzcDExNng7Ci0Jc3RydWN0IHJlc291cmNlICphZGRyLCAqZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmFkZHIsICpkYXRhLCAqaXJlczsKIAl2b2lkIF9faW9tZW0gKmFkZHJfcmVnOwogCXZvaWQgX19pb21lbSAqZGF0YV9yZWc7CiAJaW50IGlycTsKIAlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPCAzKSB7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC0xNTc1LDEyICsxNTc2LDE2IEBACiAKIAlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlhZGRyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghYWRkciB8fCAhZGF0YSB8fCBpcnEgPCAwKSB7CisJaXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisKKwlpZiAoIWFkZHIgfHwgIWRhdGEgfHwgIWlyZXMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnIxOwogCX0KIAorCWlycSA9IGlyZXMtPnN0YXJ0OworCWlycWZsYWdzID0gaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKwogCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJREJHKCJETUEgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xNjM0LDcgKzE2MzksNyBAQAogCQlnb3RvIGVycjY7CiAJfQogCi0JcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQpOworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBpcnFmbGFncyB8IElSUUZfRElTQUJMRUQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyNjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwppbmRleCAwNTFlZjdiLi5hZjg0OWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJICogYW5kIHJlYWRpbmcgYmFjayBhbmQgY2hlY2tpbmcgdGhlIGNvbnRlbnRzIGFyZSBzYW1lIG9yIG5vdAogCSAqLwogCWlmIChyZWdfZGF0YSAhPSAweEZBQ0UpIHsKLQkJZXJyKCJzY3JhdGNoIHJlZ2lzdGVyIG1pc21hdGNoICV4IiwgcmVnX2RhdGEpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInNjcmF0Y2ggcmVnaXN0ZXIgbWlzbWF0Y2ggJXhcbiIsIHJlZ19kYXRhKTsKIAkJZ290byBjbGVhbjsKIAl9CiAKQEAgLTIzMiw5ICsyMzIsMTAgQEAKIAloY2QgPSBpc3AxNzYwX3JlZ2lzdGVyKHBjaV9tZW1fcGh5MCwgbGVuZ3RoLCBkZXYtPmlycSwKIAkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAmZGV2LT5kZXYsIGRldl9uYW1lKCZkZXYtPmRldiksCiAJCWRldmZsYWdzKTsKLQlwY2lfc2V0X2RydmRhdGEoZGV2LCBoY2QpOwotCWlmICghaGNkKQorCWlmICghSVNfRVJSKGhjZCkpIHsKKwkJcGNpX3NldF9kcnZkYXRhKGRldiwgaGNkKTsKIAkJcmV0dXJuIDA7CisJfQogY2xlYW46CiAJc3RhdHVzID0gLUVOT0RFVjsKIAlpb3VubWFwKGlvYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKaW5kZXggN2NlZjFkMi4uZDMyNjk2NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKQEAgLTY0OSw3ICs2NDksNyBAQAogCW9oY2lfZGJnX3N3IChvaGNpLCAmbmV4dCwgJnNpemUsCiAJCSJidXMgJXMsIGRldmljZSAlc1xuIgogCQkiJXNcbiIKLQkJIiVzIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iLAorCQkiJXNcbiIsCiAJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCiAJCWRldl9uYW1lKGhjZC0+c2VsZi5jb250cm9sbGVyKSwKIAkJaGNkLT5wcm9kdWN0X2Rlc2MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggODk5MDE5Ni4uOGFhM2Y0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtNDYsNyArNDYsNiBAQAogCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMjAwNiBBdWd1c3QgMDQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlJvbWFuIFdlaXNzZ2FlcmJlciwgRGF2aWQgQnJvd25lbGwiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMS4xICdPcGVuJyBIb3N0IENvbnRyb2xsZXIgKE9IQ0kpIERyaXZlciIKIApAQCAtOTg0LDEwICs5ODMsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIERSSVZFUl9JTkZPIERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQwotCiBNT0RVTEVfQVVUSE9SIChEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0lORk8pOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC0xMDc4LDEyICsxMDc1LDE4IEBACiAjZGVmaW5lIFNNNTAxX09IQ0lfRFJJVkVSCW9oY2lfaGNkX3NtNTAxX2RyaXZlcgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUZEX1RDNjM5M1hCCisjaW5jbHVkZSAib2hjaS10bWlvLmMiCisjZGVmaW5lIFRNSU9fT0hDSV9EUklWRVIJb2hjaV9oY2RfdG1pb19kcml2ZXIKKyNlbmRpZgorCiAjaWYJIWRlZmluZWQoUENJX0RSSVZFUikgJiYJCVwKIAkhZGVmaW5lZChQTEFURk9STV9EUklWRVIpICYmCVwKIAkhZGVmaW5lZChPRl9QTEFURk9STV9EUklWRVIpICYmCVwKIAkhZGVmaW5lZChTQTExMTFfRFJJVkVSKSAmJglcCiAJIWRlZmluZWQoUFMzX1NZU1RFTV9CVVNfRFJJVkVSKSAmJiBcCiAJIWRlZmluZWQoU001MDFfT0hDSV9EUklWRVIpICYmIFwKKwkhZGVmaW5lZChUTUlPX09IQ0lfRFJJVkVSKSAmJiBcCiAJIWRlZmluZWQoU1NCX09IQ0lfRFJJVkVSKQogI2Vycm9yICJtaXNzaW5nIGJ1cyBnbHVlIGZvciBvaGNpLWhjZCIKICNlbmRpZgpAQCAtMTA5NSw5ICsxMDk4LDEwIEBACiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX0lORk8gIlxuIiwgaGNkX25hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIERSSVZFUl9ERVNDICJcbiIsIGhjZF9uYW1lKTsKIAlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogZWQgJVpkIHRkICVaZFxuIiwgaGNkX25hbWUsCiAJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKwlzZXRfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAKICNpZmRlZiBERUJVRwogCW9oY2lfZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigib2hjaSIsIE5VTEwpOwpAQCAtMTE0OSwxMyArMTE1MywyNSBAQAogCQlnb3RvIGVycm9yX3NtNTAxOwogI2VuZGlmCiAKKyNpZmRlZiBUTUlPX09IQ0lfRFJJVkVSCisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZUTUlPX09IQ0lfRFJJVkVSKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnJvcl90bWlvOworI2VuZGlmCisKIAlyZXR1cm4gcmV0dmFsOwogCiAJLyogRXJyb3IgcGF0aCAqLworI2lmZGVmIFRNSU9fT0hDSV9EUklWRVIKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmVE1JT19PSENJX0RSSVZFUik7CisgZXJyb3JfdG1pbzoKKyNlbmRpZgogI2lmZGVmIFNNNTAxX09IQ0lfRFJJVkVSCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJlNNNTAxX09IQ0lfRFJJVkVSKTsKICBlcnJvcl9zbTUwMToKICNlbmRpZgogI2lmZGVmIFNTQl9PSENJX0RSSVZFUgorCXNzYl9kcml2ZXJfdW5yZWdpc3RlcigmU1NCX09IQ0lfRFJJVkVSKTsKICBlcnJvcl9zc2I6CiAjZW5kaWYKICNpZmRlZiBQQ0lfRFJJVkVSCkBAIC0xMTg0LDEyICsxMjAwLDE2IEBACiAgZXJyb3JfZGVidWc6CiAjZW5kaWYKIAorCWNsZWFyX2JpdChVU0JfT0hDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOwogCXJldHVybiByZXR2YWw7CiB9CiBtb2R1bGVfaW5pdChvaGNpX2hjZF9tb2RfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9tb2RfZXhpdCh2b2lkKQogeworI2lmZGVmIFRNSU9fT0hDSV9EUklWRVIKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmVE1JT19PSENJX0RSSVZFUik7CisjZW5kaWYKICNpZmRlZiBTTTUwMV9PSENJX0RSSVZFUgogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZTTTUwMV9PSENJX0RSSVZFUik7CiAjZW5kaWYKQEAgLTEyMTQsNiArMTIzNCw3IEBACiAjaWZkZWYgREVCVUcKIAlkZWJ1Z2ZzX3JlbW92ZShvaGNpX2RlYnVnX3Jvb3QpOwogI2VuZGlmCisJY2xlYXJfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiB9CiBtb2R1bGVfZXhpdChvaGNpX2hjZF9tb2RfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA3ZWE5YTdiLi4zMmJiY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0zNTksMjEgKzM1OSwyNCBAQAogCiAvKiBDYXJyeSBvdXQgcG9sbGluZy0sIGF1dG9zdG9wLSwgYW5kIGF1dG9yZXN1bWUtcmVsYXRlZCBzdGF0ZSBjaGFuZ2VzICovCiBzdGF0aWMgaW50IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBjaGFuZ2VkLAotCQlpbnQgYW55X2Nvbm5lY3RlZCkKKwkJaW50IGFueV9jb25uZWN0ZWQsIGludCByaHNjX3N0YXR1cykKIHsKIAlpbnQJcG9sbF9yaCA9IDE7Ci0JaW50CXJoc2M7CisJaW50CXJoc2NfZW5hYmxlOwogCi0JcmhzYyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpICYgT0hDSV9JTlRSX1JIU0M7CisJLyogU29tZSBicm9rZW4gY29udHJvbGxlcnMgbmV2ZXIgdHVybiBvZmYgUkhDUyBpbiB0aGUgaW50ZXJydXB0CisJICogc3RhdHVzIHJlZ2lzdGVyLiAgRm9yIHRoZWlyIHNha2Ugd2Ugd29uJ3QgcmUtZW5hYmxlIFJIU0MKKwkgKiBpbnRlcnJ1cHRzIGlmIHRoZSBpbnRlcnJ1cHQgYml0IGlzIGFscmVhZHkgYWN0aXZlLgorCSAqLworCXJoc2NfZW5hYmxlID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSkgJgorCQkJT0hDSV9JTlRSX1JIU0M7CisKIAlzd2l0Y2ggKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgewotCiAJY2FzZSBPSENJX1VTQl9PUEVSOgotCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIHN0YXR1cy1jaGFuZ2UKLQkJICogaW50ZXJydXB0cy4KLQkJICovCi0JCWlmICghcmhzYyAmJiAhY2hhbmdlZCkgewotCQkJcmhzYyA9IE9IQ0lfSU5UUl9SSFNDOwotCQkJb2hjaV93cml0ZWwob2hjaSwgcmhzYywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIFJIU0MgaW50ZXJydXB0cy4gKi8KKwkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMgJiYgIWNoYW5nZWQpIHsKKwkJCXJoc2NfZW5hYmxlID0gT0hDSV9JTlRSX1JIU0M7CisJCQlvaGNpX3dyaXRlbChvaGNpLCByaHNjX2VuYWJsZSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOwogCQl9CiAKIAkJLyogS2VlcCBvbiBwb2xsaW5nIHVudGlsIHdlIGtub3cgYSBkZXZpY2UgaXMgY29ubmVjdGVkCkBAIC0zODMsNyArMzg2LDcgQEAKIAkJCWlmIChhbnlfY29ubmVjdGVkIHx8CiAJCQkJCSFkZXZpY2VfbWF5X3dha2V1cCgmb2hjaV90b19oY2Qob2hjaSkKIAkJCQkJCS0+c2VsZi5yb290X2h1Yi0+ZGV2KSkgewotCQkJCWlmIChyaHNjKQorCQkJCWlmIChyaHNjX2VuYWJsZSkKIAkJCQkJcG9sbF9yaCA9IDA7CiAJCQl9IGVsc2UgewogCQkJCW9oY2ktPmF1dG9zdG9wID0gMTsKQEAgLTM5NiwzNCArMzk5LDQ1IEBACiAJCQkJb2hjaS0+YXV0b3N0b3AgPSAwOwogCQkJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsKIAkJCQkJCVNUQVRFQ0hBTkdFX0RFTEFZOwotCQkJfSBlbHNlIGlmIChyaHNjICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKKwkJCX0gZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQkJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkKIAkJCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QKIAkJCQkJJiYgIShvaGNpLT5oY19jb250cm9sICYKIAkJCQkJCU9IQ0lfU0NIRURfRU5BQkxFUykpIHsKIAkJCQlvaGNpX3JoX3N1c3BlbmQob2hjaSwgMSk7Ci0JCQkJcG9sbF9yaCA9IDA7CisJCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCQlwb2xsX3JoID0gMDsKIAkJCX0KIAkJfQogCQlicmVhazsKIAotCS8qIGlmIHRoZXJlIGlzIGEgcG9ydCBjaGFuZ2UsIGF1dG9zdGFydCBvciBhc2sgdG8gYmUgcmVzdW1lZCAqLwogCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKIAljYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJLyogaWYgdGhlcmUgaXMgYSBwb3J0IGNoYW5nZSwgYXV0b3N0YXJ0IG9yIGFzayB0byBiZSByZXN1bWVkICovCiAJCWlmIChjaGFuZ2VkKSB7CiAJCQlpZiAob2hjaS0+YXV0b3N0b3ApCiAJCQkJb2hjaV9yaF9yZXN1bWUob2hjaSk7CiAJCQllbHNlCiAJCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIob2hjaV90b19oY2Qob2hjaSkpOwotCQl9IGVsc2UgewotCQkJaWYgKCFyaHNjICYmIChvaGNpLT5hdXRvc3RvcCB8fAotCQkJCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+Ci0JCQkJCQlkb19yZW1vdGVfd2FrZXVwKSkKLQkJCQlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywKLQkJCQkJCSZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKIAotCQkJLyogZXZlcnl0aGluZyBpcyBpZGxlLCBubyBuZWVkIGZvciBwb2xsaW5nICovCisJCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZGlzYWJsZWQsIHN0b3AgcG9sbGluZyAqLworCQl9IGVsc2UgaWYgKCFvaGNpLT5hdXRvc3RvcCAmJgorCQkJCSFvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+CisJCQkJCWRvX3JlbW90ZV93YWtldXApIHsKIAkJCXBvbGxfcmggPSAwOworCisJCX0gZWxzZSB7CisJCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywKKwkJCSAqIGVuYWJsZSBSSFNDIGludGVycnVwdHMKKwkJCSAqLworCQkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMpIHsKKwkJCQlyaHNjX2VuYWJsZSA9IE9IQ0lfSU5UUl9SSFNDOworCQkJCW9oY2lfd3JpdGVsKG9oY2ksIHJoc2NfZW5hYmxlLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkJfQorCQkJLyogS2VlcCBwb2xsaW5nIHVudGlsIFJIU0MgaXMgZW5hYmxlZCAqLworCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCXBvbGxfcmggPSAwOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTQ0MSwxOCArNDU1LDIyIEBACiAgKiBhdXRvc3RvcCBpc24ndCB1c2VkIHdoZW4gQ09ORklHX1BNIGlzIHR1cm5lZCBvZmYuCiAgKi8KIHN0YXRpYyBpbnQgb2hjaV9yb290X2h1Yl9zdGF0ZV9jaGFuZ2VzKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IGNoYW5nZWQsCi0JCWludCBhbnlfY29ubmVjdGVkKQorCQlpbnQgYW55X2Nvbm5lY3RlZCwgaW50IHJoc2Nfc3RhdHVzKQogewogCS8qIElmIFJIU0MgaXMgZW5hYmxlZCwgZG9uJ3QgcG9sbCAqLwogCWlmIChvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKSAmIE9IQ0lfSU5UUl9SSFNDKQogCQlyZXR1cm4gMDsKIAotCS8qIElmIG5vIHN0YXR1cyBjaGFuZ2VzIGFyZSBwZW5kaW5nLCBlbmFibGUgc3RhdHVzLWNoYW5nZSBpbnRlcnJ1cHRzICovCi0JaWYgKCFjaGFuZ2VkKSB7Ci0JCW9oY2lfd3JpdGVsKG9oY2ksIE9IQ0lfSU5UUl9SSFNDLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKKwkvKiBJZiBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgY29udGludWUgcG9sbGluZy4KKwkgKiBDb252ZXJzZWx5LCBpZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZyBidXQgdGhlIFJIU0MKKwkgKiBzdGF0dXMgYml0IHdhcyBzZXQsIHRoZW4gUkhTQyBtYXkgYmUgYnJva2VuIHNvIGNvbnRpbnVlIHBvbGxpbmcuCisJICovCisJaWYgKGNoYW5nZWQgfHwgcmhzY19zdGF0dXMpCisJCXJldHVybiAxOworCisJLyogSXQncyBzYWZlIHRvIHJlLWVuYWJsZSBSSFNDIGludGVycnVwdHMgKi8KKwlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCXJldHVybiAwOwogfQogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCkBAIC00NjcsNiArNDg1LDcgQEAKIAlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAlpbnQJCWksIGNoYW5nZWQgPSAwLCBsZW5ndGggPSAxOwogCWludAkJYW55X2Nvbm5lY3RlZCA9IDA7CisJaW50CQlyaHNjX3N0YXR1czsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CkBAIC00OTIsMTIgKzUxMSwxMCBAQAogCQlsZW5ndGgrKzsKIAl9CiAKLQkvKiBTb21lIGJyb2tlbiBjb250cm9sbGVycyBuZXZlciB0dXJuIG9mZiBSSENTIGluIHRoZSBpbnRlcnJ1cHQKLQkgKiBzdGF0dXMgcmVnaXN0ZXIuICBGb3IgdGhlaXIgc2FrZSB3ZSB3b24ndCByZS1lbmFibGUgUkhTQwotCSAqIGludGVycnVwdHMgaWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBzZXQuCi0JICovCi0JaWYgKG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYgT0hDSV9JTlRSX1JIU0MpCi0JCWNoYW5nZWQgPSAxOworCS8qIENsZWFyIHRoZSBSSFNDIHN0YXR1cyBmbGFnIGJlZm9yZSByZWFkaW5nIHRoZSBwb3J0IHN0YXR1c2VzICovCisJb2hjaV93cml0ZWwob2hjaSwgT0hDSV9JTlRSX1JIU0MsICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKwlyaHNjX3N0YXR1cyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYKKwkJCU9IQ0lfSU5UUl9SSFNDOwogCiAJLyogbG9vayBhdCBlYWNoIHBvcnQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgb2hjaS0+bnVtX3BvcnRzOyBpKyspIHsKQEAgLTUxNyw3ICs1MzQsNyBAQAogCX0KIAogCWhjZC0+cG9sbF9yaCA9IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhvaGNpLCBjaGFuZ2VkLAotCQkJYW55X2Nvbm5lY3RlZCk7CisJCQlhbnlfY29ubmVjdGVkLCByaHNjX3N0YXR1cyk7CiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IDUyMjE4NTYuLjkxNjk3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19wb3dlcigxKTsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19pbml0KCk7CiAJfQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCiAJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKIAotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJdXNiX2RjX2NrID0gY2xrX2dldCgwLCAidXNiX2RjX2NrIik7CiAJZWxzZQogCQl1c2JfZGNfY2sgPSBjbGtfZ2V0KDAsICJsYl9jayIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKaW5kZXggNjU4YTJhOS4uZTMwNmNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCkBAIC0zMzEsNyArMzMxLDcgQEAKIAogCWludCByZXQgPSAwLCBpcnE7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICIlczogIiBEUklWRVJfSU5GTyAiIChwbng0MDA4KVxuIiwgaGNkX25hbWUpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiAiIERSSVZFUl9ERVNDICIgKHBueDQwMDgpXG4iLCBoY2RfbmFtZSk7CiAJaWYgKHVzYl9kaXNhYmxlZCgpKSB7CiAJCWVycigiVVNCIGlzIGRpc2FibGVkIik7CiAJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktdG1pby5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXRtaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWYxMzRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXRtaW8uYwpAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIE9IQ0kgSENEKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICooQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICooQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogQnVzIGdsdWUgZm9yIFRvc2hpYmEgTW9iaWxlIElPKFRNSU8pIENvbnRyb2xsZXIncyBPSENJIGNvcmUKKyAqIChDKSBDb3B5cmlnaHQgMjAwNSBDaHJpcyBIdW1iZXJ0IDxtYWhhZHJpLXVzYkBkcmlnb24uY29tPgorICogKEMpIENvcHlyaWdodCAyMDA3LCAyMDA4IERtaXRyeSBCYXJ5c2hrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgorICoKKyAqIFRoaXMgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcgdmFyaWFudHM6CisgKglUQzYzOTNYQiByZXZpc2lvbiAzCSgzMmtCIFNSQU0pCisgKgorICogVGhlIFRNSU8ncyBPSENJIGNvcmUgRE1BcyB0aHJvdWdoIGEgc21hbGwgaW50ZXJuYWwgYnVmZmVyIHRoYXQKKyAqIGlzIGRpcmVjdGx5IGFkZHJlc3NhYmxlIGJ5IHRoZSBDUFUuCisgKgorICogV3JpdHRlbiBmcm9tIHNwYXJzZSBkb2N1bWVudGF0aW9uIGZyb20gVG9zaGliYSBhbmQgU2hhcnAncyBkcml2ZXIKKyAqIGZvciB0aGUgMi40IGtlcm5lbCwKKyAqCXVzYi1vaGNpLXRjNjM5My5jKEMpIENvcHlyaWdodCAyMDA0IExpbmVvIFNvbHV0aW9ucywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyojaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBVU0IgSG9zdCBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBDQ1JfUkVWSUQJMHgwOAkvKiBiIFJldmlzaW9uIElECQkJCSovCisjZGVmaW5lIENDUl9CQVNFCTB4MTAJLyogbCBVU0IgQ29udHJvbCBSZWdpc3RlciBCYXNlIEFkZHJlc3MgTG93CSovCisjZGVmaW5lIENDUl9JTE1FCTB4NDAJLyogYiBJbnRlcm5hbCBMb2NhbCBNZW1vcnkgRW5hYmxlCQkqLworI2RlZmluZSBDQ1JfUE0JCTB4NGMJLyogdyBQb3dlciBNYW5hZ2VtZW50CQkJKi8KKyNkZWZpbmUgQ0NSX0lOVEMJMHg1MAkvKiBiIElOVCBDb250cm9sCQkJCSovCisjZGVmaW5lIENDUl9MTVcxTAkweDU0CS8qIHcgTG9jYWwgTWVtb3J5IFdpbmRvdyAxIExNQURSUyBMb3cJKi8KKyNkZWZpbmUgQ0NSX0xNVzFICTB4NTYJLyogdyBMb2NhbCBNZW1vcnkgV2luZG93IDEgTE1BRFJTIEhpZ2gJKi8KKyNkZWZpbmUgQ0NSX0xNVzFCTAkweDU4CS8qIHcgTG9jYWwgTWVtb3J5IFdpbmRvdyAxIEJhc2UgQWRkcmVzcyBMb3cJKi8KKyNkZWZpbmUgQ0NSX0xNVzFCSAkweDVBCS8qIHcgTG9jYWwgTWVtb3J5IFdpbmRvdyAxIEJhc2UgQWRkcmVzcyBIaWdoCSovCisjZGVmaW5lIENDUl9MTVcyTAkweDVDCS8qIHcgTG9jYWwgTWVtb3J5IFdpbmRvdyAyIExNQURSUyBMb3cJKi8KKyNkZWZpbmUgQ0NSX0xNVzJICTB4NUUJLyogdyBMb2NhbCBNZW1vcnkgV2luZG93IDIgTE1BRFJTIEhpZ2gJKi8KKyNkZWZpbmUgQ0NSX0xNVzJCTAkweDYwCS8qIHcgTG9jYWwgTWVtb3J5IFdpbmRvdyAyIEJhc2UgQWRkcmVzcyBMb3cJKi8KKyNkZWZpbmUgQ0NSX0xNVzJCSAkweDYyCS8qIHcgTG9jYWwgTWVtb3J5IFdpbmRvdyAyIEJhc2UgQWRkcmVzcyBIaWdoCSovCisjZGVmaW5lIENDUl9NSVNDCTB4RkMJLyogYiBNSVNDCQkJCQkqLworCisjZGVmaW5lIENDUl9QTV9HS0VOICAgICAgMHgwMDAxCisjZGVmaW5lIENDUl9QTV9DS1JORU4gICAgMHgwMDAyCisjZGVmaW5lIENDUl9QTV9VU0JQVzEgICAgMHgwMDA0CisjZGVmaW5lIENDUl9QTV9VU0JQVzIgICAgMHgwMDA4CisjZGVmaW5lIENDUl9QTV9VU0JQVzMgICAgMHgwMDA4CisjZGVmaW5lIENDUl9QTV9QTUVFICAgICAgMHgwMTAwCisjZGVmaW5lIENDUl9QTV9QTUVTICAgICAgMHg4MDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCB0bWlvX2hjZCB7CisJdm9pZCBfX2lvbWVtCQkqY2NyOworCXNwaW5sb2NrX3QJCWxvY2s7IC8qIHByb3RlY3RzIFJNVyBjeWNsZXMgKi8KK307CisKKyNkZWZpbmUgaGNkX3RvX3RtaW8oaGNkKQkoKHN0cnVjdCB0bWlvX2hjZCAqKShoY2RfdG9fb2hjaShoY2QpICsgMSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHRtaW9fd3JpdGVfcG0oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0bWlvX2hjZCAqdG1pbyA9IGhjZF90b190bWlvKGhjZCk7CisJdTE2IHBtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1pby0+bG9jaywgZmxhZ3MpOworCisJcG0gPSBDQ1JfUE1fR0tFTiB8IENDUl9QTV9DS1JORU4gfAorCSAgICAgQ0NSX1BNX1BNRUUgfCBDQ1JfUE1fUE1FUzsKKworCXRtaW9faW93cml0ZTE2KHBtLCB0bWlvLT5jY3IgKyBDQ1JfUE0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtaW8tPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdG1pb19zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCXN0cnVjdCB0bWlvX2hjZCAqdG1pbyA9IGhjZF90b190bWlvKGhjZCk7CisJdTE2IHBtOworCisJcG0gPSBDQ1JfUE1fR0tFTiB8IENDUl9QTV9DS1JORU47CisJc3dpdGNoIChvaGNpLT5udW1fcG9ydHMpIHsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgYW1vdW50IG9mIHBvcnRzOiAlZFxuIiwgb2hjaS0+bnVtX3BvcnRzKTsKKwkJY2FzZSAzOgorCQkJcG0gfD0gQ0NSX1BNX1VTQlBXMzsKKwkJY2FzZSAyOgorCQkJcG0gfD0gQ0NSX1BNX1VTQlBXMjsKKwkJY2FzZSAxOgorCQkJcG0gfD0gQ0NSX1BNX1VTQlBXMTsKKwl9CisJdG1pb19pb3dyaXRlOCgwLCB0bWlvLT5jY3IgKyBDQ1JfSU5UQyk7CisJdG1pb19pb3dyaXRlOCgwLCB0bWlvLT5jY3IgKyBDQ1JfSUxNRSk7CisJdG1pb19pb3dyaXRlMTYoMCwgdG1pby0+Y2NyICsgQ0NSX0JBU0UpOworCXRtaW9faW93cml0ZTE2KDAsIHRtaW8tPmNjciArIENDUl9CQVNFICsgMik7CisJdG1pb19pb3dyaXRlMTYocG0sIHRtaW8tPmNjciArIENDUl9QTSk7Cit9CisKK3N0YXRpYyB2b2lkIHRtaW9fc3RhcnRfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0bWlvX2hjZCAqdG1pbyA9IGhjZF90b190bWlvKGhjZCk7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gaGNkLT5yc3JjX3N0YXJ0OworCisJdG1pb193cml0ZV9wbShkZXYpOworCXRtaW9faW93cml0ZTE2KGJhc2UsIHRtaW8tPmNjciArIENDUl9CQVNFKTsKKwl0bWlvX2lvd3JpdGUxNihiYXNlID4+IDE2LCB0bWlvLT5jY3IgKyBDQ1JfQkFTRSArIDIpOworCXRtaW9faW93cml0ZTgoMSwgdG1pby0+Y2NyICsgQ0NSX0lMTUUpOworCXRtaW9faW93cml0ZTgoMiwgdG1pby0+Y2NyICsgQ0NSX0lOVEMpOworCisJZGV2X2luZm8oJmRldi0+ZGV2LCAicmV2aXNpb24gJWQgQCAweCUwOGxseCwgaXJxICVkXG4iLAorCQkJdG1pb19pb3JlYWQ4KHRtaW8tPmNjciArIENDUl9SRVZJRCksIGhjZC0+cnNyY19zdGFydCwgaGNkLT5pcnEpOworfQorCitzdGF0aWMgaW50IG9oY2lfdG1pb19zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZCAqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJaW50IHJldDsKKworCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfcnVuKG9oY2kpKSA8IDApIHsKKwkJZXJyKCJjYW4ndCBzdGFydCAlcyIsIGhjZC0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX3RtaW9faGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJUTUlPIE9IQ0kgVVNCIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSArIHNpemVvZiAoc3RydWN0IHRtaW9faGNkKSwKKworCS8qIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZIHwgSENEX0xPQ0FMX01FTSwKKworCS8qIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zICovCisJLnN0YXJ0ID0JCW9oY2lfdG1pb19zdGFydCwKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCS5zaHV0ZG93biA9CQlvaGNpX3NodXRkb3duLAorCisJLyogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qIHNjaGVkdWxpbmcgc3VwcG9ydCAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKiByb290IGh1YiBzdXBwb3J0ICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmCUNPTkZJR19QTQorCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKKyNlbmRpZgorCS5zdGFydF9wb3J0X3Jlc2V0ID0Jb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3RtaW9fZHJpdmVyOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvaGNpX2hjZF90bWlvX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IHJlc291cmNlICpjb25maWcgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJc3RydWN0IHJlc291cmNlICpzcmFtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisJc3RydWN0IHRtaW9faGNkICp0bWlvOworCXN0cnVjdCBvaGNpX2hjZCAqb2hjaTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCWludCByZXQ7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFjZWxsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZvaGNpX3RtaW9faGNfZHJpdmVyLCAmZGV2LT5kZXYsIGRldi0+ZGV2LmJ1c19pZCk7CisJaWYgKCFoY2QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfdXNiX2NyZWF0ZV9oY2Q7CisJfQorCisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVncy0+c3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMTsKKworCXRtaW8gPSBoY2RfdG9fdG1pbyhoY2QpOworCisJc3Bpbl9sb2NrX2luaXQoJnRtaW8tPmxvY2spOworCisJdG1pby0+Y2NyID0gaW9yZW1hcChjb25maWctPnN0YXJ0LCBjb25maWctPmVuZCAtIGNvbmZpZy0+c3RhcnQgKyAxKTsKKwlpZiAoIXRtaW8tPmNjcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwX2NjcjsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcF9yZWdzOworCX0KKworCWlmICghZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KCZkZXYtPmRldiwgc3JhbS0+c3RhcnQsCisJCQkJc3JhbS0+c3RhcnQsCisJCQkJc3JhbS0+ZW5kIC0gc3JhbS0+c3RhcnQgKyAxLAorCQkJCURNQV9NRU1PUllfTUFQIHwgRE1BX01FTU9SWV9FWENMVVNJVkUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfZG1hX2RlY2xhcmU7CisJfQorCisJaWYgKGNlbGwtPmVuYWJsZSkgeworCQlyZXQgPSBjZWxsLT5lbmFibGUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwl0bWlvX3N0YXJ0X2hjKGRldik7CisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJb2hjaV9oY2RfaW5pdChvaGNpKTsKKworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZGRfaGNkOworCisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gcmV0OworCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKworZXJyX2FkZF9oY2Q6CisJdG1pb19zdG9wX2hjKGRldik7CisJaWYgKGNlbGwtPmRpc2FibGUpCisJCWNlbGwtPmRpc2FibGUoZGV2KTsKK2Vycl9lbmFibGU6CisJZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KCZkZXYtPmRldik7CitlcnJfZG1hX2RlY2xhcmU6CisJaW91bm1hcChoY2QtPnJlZ3MpOworZXJyX2lvcmVtYXBfcmVnczoKKwlpb3VubWFwKHRtaW8tPmNjcik7CitlcnJfaW9yZW1hcF9jY3I6CisJdXNiX3B1dF9oY2QoaGNkKTsKK2Vycl91c2JfY3JlYXRlX2hjZDoKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9oY2lfaGNkX3RtaW9fZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRtaW9faGNkICp0bWlvID0gaGNkX3RvX3RtaW8oaGNkKTsKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwl0bWlvX3N0b3BfaGMoZGV2KTsKKwlpZiAoY2VsbC0+ZGlzYWJsZSkKKwkJY2VsbC0+ZGlzYWJsZShkZXYpOworCWRtYV9yZWxlYXNlX2RlY2xhcmVkX21lbW9yeSgmZGV2LT5kZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlpb3VubWFwKHRtaW8tPmNjcik7CisJdXNiX3B1dF9oY2QoaGNkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBvaGNpX2hjZF90bWlvX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG9oY2lfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwlzdHJ1Y3QgdG1pb19oY2QgKnRtaW8gPSBoY2RfdG9fdG1pbyhoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggbWlzYzsKKwlpbnQgcmV0OworCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoNSk7CisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1pby0+bG9jaywgZmxhZ3MpOworCisJbWlzYyA9IHRtaW9faW9yZWFkOCh0bWlvLT5jY3IgKyBDQ1JfTUlTQyk7CisJbWlzYyB8PSAxIDw8IDM7IC8qIFVTU1VTUCAqLworCXRtaW9faW93cml0ZTgobWlzYywgdG1pby0+Y2NyICsgQ0NSX01JU0MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1pby0+bG9jaywgZmxhZ3MpOworCisJaWYgKGNlbGwtPnN1c3BlbmQpIHsKKwkJcmV0ID0gY2VsbC0+c3VzcGVuZChkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfdG1pb19kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvaGNpX2hjZCAqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJc3RydWN0IHRtaW9faGNkICp0bWlvID0gaGNkX3RvX3RtaW8oaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IG1pc2M7CisJaW50IHJldDsKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCisJaWYgKGNlbGwtPnJlc3VtZSkgeworCQlyZXQgPSBjZWxsLT5yZXN1bWUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJdG1pb19zdGFydF9oYyhkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRtaW8tPmxvY2ssIGZsYWdzKTsKKworCW1pc2MgPSB0bWlvX2lvcmVhZDgodG1pby0+Y2NyICsgQ0NSX01JU0MpOworCW1pc2MgJj0gfigxIDw8IDMpOyAvKiBVU1NVU1AgKi8KKwl0bWlvX2lvd3JpdGU4KG1pc2MsIHRtaW8tPmNjciArIENDUl9NSVNDKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtaW8tPmxvY2ssIGZsYWdzKTsKKworCW9oY2lfZmluaXNoX2NvbnRyb2xsZXJfcmVzdW1lKGhjZCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG9oY2lfaGNkX3RtaW9fZHJ2X3N1c3BlbmQgTlVMTAorI2RlZmluZSBvaGNpX2hjZF90bWlvX2Rydl9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3RtaW9fZHJpdmVyID0geworCS5wcm9iZQkJPSBvaGNpX2hjZF90bWlvX2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9oY2lfaGNkX3RtaW9fZHJ2X3JlbW92ZSksCisJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKKwkuc3VzcGVuZAk9IG9oY2lfaGNkX3RtaW9fZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX2hjZF90bWlvX2Rydl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInRtaW8tb2hjaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAppbmRleCBmYWY2MjJlLi4yMjIwMTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaApAQCAtNTQwLDE1ICs1NDAsNyBAQAogICogQmlnLWVuZGlhbiByZWFkL3dyaXRlIGZ1bmN0aW9ucyBhcmUgYXJjaC1zcGVjaWZpYy4KICAqIE90aGVyIGFyY2hlcyBjYW4gYmUgYWRkZWQgaWYvd2hlbiB0aGV5J3JlIG5lZWRlZC4KICAqCi0gKiBSRVZJU0lUOiBhcmNoL3Bvd2VycGMgbm93IGhhcyByZWFkbC93cml0ZWxfYmUsIHNvIHRoZQotICogZGVmaW5pdGlvbiBiZWxvdyBjYW4gZGllIG9uY2UgdGhlIFNUQjA0eHh4IHN1cHBvcnQgaXMKLSAqIGZpbmFsbHkgcG9ydGVkIG92ZXIuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUEMpICYmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0jZGVmaW5lIHJlYWRsX2JlKGFkZHIpCQlpbl9iZTMyKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkcikKLSNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJb3V0X2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyLCB2YWwpCi0jZW5kaWYKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX29oY2lfcmVhZGwgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwKIAkJCQkJX19oYzMyIF9faW9tZW0gKiByZWdzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKaW5kZXggZWE3MTI2Zi4uYzE4ZDg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC02Niw3ICs2Niw3IEBACiBtb2R1bGVfcGFyYW0oZW5kaWFuLCB1c2hvcnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmRpYW4sICJkYXRhIGVuZGlhbjogYmlnPTI1NiwgbGl0dGxlPTAgKGRlZmF1bHQ9MCkiKTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlycV9zZW5zZSA9IElOVEw7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaXJxX3NlbnNlID0gMHhmZjsKIG1vZHVsZV9wYXJhbShpcnFfc2Vuc2UsIHVzaG9ydCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycV9zZW5zZSwgIklSUSBzZW5zZTogbG93IGxldmVsPTMyLCBmYWxsaW5nIGVkZ2U9MCAiCiAJCSIoZGVmYXVsdD0zMikiKTsKQEAgLTExOCw3ICsxMTgsNyBAQAogCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgU0NLRSwgU1lTQ0ZHMCk7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIFNZU0NGRzApOwogCQlpZiAoaSsrID4gMTAwMCkgewotCQkJZXJyKCJyZWdpc3RlciBhY2Nlc3MgZmFpbC4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IHJlZ2lzdGVyIGFjY2VzcyBmYWlsLlxuIik7CiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAJfSB3aGlsZSAoKHRtcCAmIFNDS0UpICE9IFNDS0UpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCBVU0JFLCBTWVNDRkcwKTsKIAkJdG1wID0gcjhhNjY1OTdfcmVhZChyOGE2NjU5NywgU1lTQ0ZHMCk7CiAJCWlmIChpKysgPiAxMDAwKSB7Ci0JCQllcnIoInJlZ2lzdGVyIGFjY2VzcyBmYWlsLiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogcmVnaXN0ZXIgYWNjZXNzIGZhaWwuXG4iKTsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KIAl9IHdoaWxlICgodG1wICYgVVNCRSkgIT0gVVNCRSk7CkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJbXNsZWVwKDEpOwogCQl0bXAgPSByOGE2NjU5N19yZWFkKHI4YTY2NTk3LCBTWVNDRkcwKTsKIAkJaWYgKGkrKyA+IDUwMCkgewotCQkJZXJyKCJyZWdpc3RlciBhY2Nlc3MgZmFpbC4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IHJlZ2lzdGVyIGFjY2VzcyBmYWlsLlxuIik7CiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAJfSB3aGlsZSAoKHRtcCAmIFNDS0UpICE9IFNDS0UpOwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJaWYgKHJvb3RfcG9ydCkgewogCQkqcm9vdF9wb3J0ID0gKGRldnBhdGhbMF0gJiAweDBGKSAtIDE7CiAJCWlmICgqcm9vdF9wb3J0ID49IFI4QTY2NTk3X01BWF9ST09UX0hVQikKLQkJCWVycigiaWxsZWdhbCByb290IHBvcnQgbnVtYmVyIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBJbGxlZ2FsIHJvb3QgcG9ydCBudW1iZXIuXG4iKTsKIAl9CiAJaWYgKGh1Yl9wb3J0KQogCQkqaHViX3BvcnQgPSBkZXZwYXRoWzJdICYgMHgwRjsKQEAgLTI4Niw3ICsyODYsNyBAQAogCQl1c2JzcGQgPSBIU01PREU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigidW5rbm93biBzcGVlZCIpOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiB1bmtub3duIHNwZWVkXG4iKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zODUsNyArMzg1LDcgQEAKIAlzdHJ1Y3QgcjhhNjY1OTdfZGV2aWNlICpkZXY7CiAKIAlpZiAoaXNfaHViX2xpbWl0KHVyYi0+ZGV2LT5kZXZwYXRoKSkgewotCQllcnIoIkV4dGVybmVsIGh1YiBsaW1pdCByZWFjaGVkLiIpOworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiRXh0ZXJuYWwgaHViIGxpbWl0IHJlYWNoZWQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00MDYsOCArNDA2LDkgQEAKIAkJcmV0dXJuIGFkZHI7CiAJfQogCi0JZXJyKCJjYW5ub3QgY29tbXVuaWNhdGUgd2l0aCBhIFVTQiBkZXZpY2UgbW9yZSB0aGFuIDEwLigleCkiLAotCSAgICByOGE2NjU5Ny0+YWRkcmVzc19tYXApOworCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCSJjYW5ub3QgY29tbXVuaWNhdGUgd2l0aCBhIFVTQiBkZXZpY2UgbW9yZSB0aGFuIDEwLigleClcbiIsCisJCXI4YTY2NTk3LT5hZGRyZXNzX21hcCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0Nyw3ICs0NDgsOCBAQAogCWRvIHsKIAkJdG1wID0gcjhhNjY1OTdfcmVhZChyOGE2NjU5NywgcmVnKTsKIAkJaWYgKGkrKyA+IDEwMDAwMDApIHsKLQkJCWVycigicmVnaXN0ZXIlbHgsIGxvb3AgJXggaXMgdGltZW91dCIsIHJlZywgbG9vcCk7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciVseCwgbG9vcCAleCAiCisJCQkgICAgICAgImlzIHRpbWVvdXRcbiIsIHJlZywgbG9vcCk7CiAJCQlicmVhazsKIAkJfQogCQluZGVsYXkoMSk7CkBAIC02NzUsNyArNjc3LDcgQEAKIAkJCWFycmF5W2krK10gPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIklsbGVnYWwgdHlwZSIpOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBJbGxlZ2FsIHR5cGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTcwNSw3ICs3MDcsNyBAQAogCQlyOGE2NjU5N190eXBlID0gUjhBNjY1OTdfSVNPOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIklsbGVnYWwgdHlwZSIpOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBJbGxlZ2FsIHR5cGVcbiIpOwogCQlyOGE2NjU5N190eXBlID0gMHgwMDAwOwogCQlicmVhazsKIAl9CkBAIC03MjQsNyArNzI2LDcgQEAKIAllbHNlIGlmIChjaGVja19pbnRlcnJ1cHQocGlwZW51bSkpCiAJCWJ1Zm51bSA9IDQgKyAocGlwZW51bSAtIDYpOwogCWVsc2UKLQkJZXJyKCJJbGxlZ2FsIHBpcGVudW0gKCVkKSIsIHBpcGVudW0pOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBJbGxlZ2FsIHBpcGVudW0gKCVkKVxuIiwgcGlwZW51bSk7CiAKIAlyZXR1cm4gYnVmbnVtOwogfQpAQCAtNzQwLDcgKzc0Miw3IEBACiAJZWxzZSBpZiAoY2hlY2tfaW50ZXJydXB0KHBpcGVudW0pKQogCQlidWZfYnNpemUgPSAwOwogCWVsc2UKLQkJZXJyKCJJbGxlZ2FsIHBpcGVudW0gKCVkKSIsIHBpcGVudW0pOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBJbGxlZ2FsIHBpcGVudW0gKCVkKVxuIiwgcGlwZW51bSk7CiAKIAlyZXR1cm4gYnVmX2JzaXplOwogfQpAQCAtNzYwLDEwICs3NjIsMTIgQEAKIAkJCWlmICgocjhhNjY1OTctPmRtYV9tYXAgJiAoMSA8PCBpKSkgIT0gMCkKIAkJCQljb250aW51ZTsKIAotCQkJaW5mbygiYWRkcmVzcyAlZCwgRW5kcG9pbnRBZGRyZXNzIDB4JTAyeCB1c2UgRE1BIEZJRk8iLAotCQkJICAgICB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLAotCQkJICAgICBpbmZvLT5kaXJfaW4gPyBVU0JfRU5EUE9JTlRfRElSX01BU0sgKyBpbmZvLT5lcG51bQotCQkJCQkgICAgOiBpbmZvLT5lcG51bSk7CisJCQlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsCisJCQkJICJhZGRyZXNzICVkLCBFbmRwb2ludEFkZHJlc3MgMHglMDJ4IHVzZSAiCisJCQkJICJETUEgRklGT1xuIiwgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKKwkJCQkgaW5mby0+ZGlyX2luID8KKwkJCQkgCVVTQl9FTkRQT0lOVF9ESVJfTUFTSyArIGluZm8tPmVwbnVtCisJCQkJCTogaW5mby0+ZXBudW0pOwogCiAJCQlyOGE2NjU5Ny0+ZG1hX21hcCB8PSAxIDw8IGk7CiAJCQlkZXYtPmRtYV9tYXAgfD0gMSA8PCBpOwpAQCAtMTE4Nyw3ICsxMTkxLDcgQEAKIAkJcHJlcGFyZV9zdGF0dXNfcGFja2V0KHI4YTY2NTk3LCB0ZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiaW52YWxpZCB0eXBlLiIpOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBpbnZhbGlkIHR5cGUuXG4iKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMjk1LDcgKzEyOTksNyBAQAogCWlmICh1bmxpa2VseSgodG1wICYgRlJEWSkgPT0gMCkpIHsKIAkJcGlwZV9zdG9wKHI4YTY2NTk3LCB0ZC0+cGlwZSk7CiAJCXBpcGVfaXJxX2Rpc2FibGUocjhhNjY1OTcsIHBpcGVudW0pOwotCQllcnIoImluIGZpZm8gbm90IHJlYWR5ICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogaW4gZmlmbyBub3QgcmVhZHkgKCVkKVxuIiwgcGlwZW51bSk7CiAJCWZpbmlzaF9yZXF1ZXN0KHI4YTY2NTk3LCB0ZCwgcGlwZW51bSwgdGQtPnVyYiwgLUVQSVBFKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEzNzAsNyArMTM3NCw3IEBACiAJaWYgKHVubGlrZWx5KCh0bXAgJiBGUkRZKSA9PSAwKSkgewogCQlwaXBlX3N0b3AocjhhNjY1OTcsIHRkLT5waXBlKTsKIAkJcGlwZV9pcnFfZGlzYWJsZShyOGE2NjU5NywgcGlwZW51bSk7Ci0JCWVycigib3V0IHdyaXRlIGZpZm8gbm90IHJlYWR5LiAoJWQpIiwgcGlwZW51bSk7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IG91dCBmaWZvIG5vdCByZWFkeSAoJWQpXG4iLCBwaXBlbnVtKTsKIAkJZmluaXNoX3JlcXVlc3QocjhhNjY1OTcsIHRkLCBwaXBlbnVtLCB1cmIsIC1FUElQRSk7CiAJCXJldHVybjsKIAl9CkBAIC0yMDA1LDcgKzIwMDksNyBAQAogCQlyZXR1cm4gZGV2OwogCX0KIAotCWVycigiZ2V0X3I4YTY2NTk3X2RldmljZSBmYWlsLiglZClcbiIsIGFkZHIpOworCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IGdldF9yOGE2NjU5N19kZXZpY2UgZmFpbC4oJWQpXG4iLCBhZGRyKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjI2Myw3ICsyMjY3LDcgQEAKICNkZWZpbmUgcmVzb3VyY2VfbGVuKHIpICgoKHIpLT5lbmQgLSAociktPnN0YXJ0KSArIDEpCiBzdGF0aWMgaW50IF9faW5pdCByOGE2NjU5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEwsICppcmVzOwogCWludCBpcnEgPSAtMTsKIAl2b2lkIF9faW9tZW0gKnJlZyA9IE5VTEw7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IE5VTEw7CkBAIC0yMjc0LDcgKzIyNzgsNyBAQAogCiAJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgewogCQlyZXQgPSAtRUlOVkFMOwotCQllcnIoImRtYSBub3Qgc3VwcG9ydCIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJkbWEgbm90IHN1cHBvcnRlZFxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCkBAIC0yMjgyLDIxICsyMjg2LDI1IEBACiAJCQkJCSAgIChjaGFyICopaGNkX25hbWUpOwogCWlmICghcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWVycigicGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZSBlcnJvci4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZSBlcnJvci5cbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIAotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKGlycSA8IDApIHsKKwlpcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIWlyZXMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZXJyKCJwbGF0Zm9ybV9nZXRfaXJxIGVycm9yLiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkicGxhdGZvcm1fZ2V0X3Jlc291cmNlIElPUkVTT1VSQ0VfSVJRIGVycm9yLlxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCisJaXJxID0gaXJlcy0+c3RhcnQ7CisJaXJxX3RyaWdnZXIgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCiAJcmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9sZW4ocmVzKSk7CiAJaWYgKHJlZyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWVycigiaW9yZW1hcCBlcnJvci4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBlcnJvci5cbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIApAQCAtMjMwNCw3ICsyMzEyLDcgQEAKIAloY2QgPSB1c2JfY3JlYXRlX2hjZCgmcjhhNjY1OTdfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LCAoY2hhciAqKWhjZF9uYW1lKTsKIAlpZiAoIWhjZCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQllcnIoIkZhaWxlZCB0byBjcmVhdGUgaGNkIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgaGNkXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAJcjhhNjY1OTcgPSBoY2RfdG9fcjhhNjY1OTcoaGNkKTsKQEAgLTIzMjksMTMgKzIzMzcsMzMgQEAKIAlJTklUX0xJU1RfSEVBRCgmcjhhNjY1OTctPmNoaWxkX2RldmljZSk7CiAKIAloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OwotCWlmIChpcnFfc2Vuc2UgPT0gSU5UTCkKLQkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfTE9XOwotCWVsc2UKLQkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfRkFMTElORzsKKworCS8qIGlycV9zZW5zZSBzZXR0aW5nIG9uIGNtZGxpbmUgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHJlc291cmNlCisJICogc2V0dGluZ3MsIHNvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgaXJxZmxhZ3MgaW4gSVJRIHJlc291cnNlCisJICogd29uJ3QgZGlzdHVyYiBleGlzdGluZyBzZXR1cHMgKi8KKwlzd2l0Y2ggKGlycV9zZW5zZSkgeworCQljYXNlIElOVEw6CisJCQlpcnFfdHJpZ2dlciA9IElSUUZfVFJJR0dFUl9MT1c7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfRkFMTElORzsKKwkJCWJyZWFrOworCQljYXNlIDB4ZmY6CisJCQlpZiAoaXJxX3RyaWdnZXIpCisJCQkJaXJxX3NlbnNlID0gKGlycV90cmlnZ2VyICYgSVJRRl9UUklHR0VSX0xPVykgPworCQkJCQkgICAgSU5UTCA6IDA7CisJCQllbHNlIHsKKwkJCQlpcnFfc2Vuc2UgPSBJTlRMOworCQkJCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0xPVzsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5rbm93biBpcnFfc2Vuc2UgdmFsdWUuXG4iKTsKKwl9CisKIAlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IGlycV90cmlnZ2VyKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZXJyKCJGYWlsZWQgdG8gYWRkIGhjZCIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIGhjZFxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCkBAIC0yMzY0LDcgKzIzOTIsOCBAQAogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpbmZvKCJkcml2ZXIgJXMsICVzIiwgaGNkX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IGRyaXZlciAlcywgJXNcbiIsIGhjZF9uYW1lLAorCSAgICAgICBEUklWRVJfVkVSU0lPTik7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcjhhNjY1OTdfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHI4YTY2NTk3X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggOGE3NGJiYi4uZTEwNmU5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0xNjIwLDIyICsxNjIwLDI2IEBACiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAJc3RydWN0IHNsODExCQkqc2w4MTE7Ci0Jc3RydWN0IHJlc291cmNlCQkqYWRkciwgKmRhdGE7CisJc3RydWN0IHJlc291cmNlCQkqYWRkciwgKmRhdGEsICppcmVzOwogCWludAkJCWlycTsKIAl2b2lkIF9faW9tZW0JCSphZGRyX3JlZzsKIAl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKIAlpbnQJCQlyZXR2YWw7CiAJdTgJCQl0bXAsIGlvYWRkciA9IDA7CisJdW5zaWduZWQgbG9uZwkJaXJxZmxhZ3M7CiAKIAkvKiBiYXNpYyBzYW5pdHkgY2hlY2tzIGZpcnN0LiAgYm9hcmQtc3BlY2lmaWMgaW5pdCBsb2dpYyBzaG91bGQKIAkgKiBoYXZlIGluaXRpYWxpemVkIHRoZXNlIHRocmVlIHJlc291cmNlcyBhbmQgcHJvYmFibHkgYm9hcmQKIAkgKiBzcGVjaWZpYyBwbGF0Zm9ybV9kYXRhLiAgd2UgZG9uJ3QgcHJvYmUgZm9yIElSUXMsIGFuZCBkbyBvbmx5CiAJICogbWluaW1hbCBzYW5pdHkgY2hlY2tpbmcuCiAJICovCi0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwotCWlmIChkZXYtPm51bV9yZXNvdXJjZXMgPCAzIHx8IGlycSA8IDApCisJaXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoZGV2LT5udW1fcmVzb3VyY2VzIDwgMyB8fCAhaXJlcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpcnEgPSBpcmVzLT5zdGFydDsKKwlpcnFmbGFncyA9IGlyZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CisKIAkvKiByZWZ1c2UgdG8gY29uZnVzZSB1c2Jjb3JlICovCiAJaWYgKGRldi0+ZGV2LmRtYV9tYXNrKSB7CiAJCURCRygibm8gd2Ugd29uJ3QgZG1hXG4iKTsKQEAgLTE3MTcsOCArMTcyMSwxMSBAQAogCSAqIHRyaWdnZXJzIChlLmcuIG1vc3QgQVJNIENQVXMpLiAgSW5pdGlhbCBkcml2ZXIgc3RyZXNzIHRlc3RpbmcKIAkgKiB3YXMgb24gYSBzeXN0ZW0gd2l0aCBzaW5nbGUgZWRnZSB0cmlnZ2VyaW5nLCBzbyBtb3N0IHNvcnRzIG9mCiAJICogdHJpZ2dlcmluZyBhcnJhbmdlbWVudCBzaG91bGQgd29yay4KKwkgKgorCSAqIFVzZSByZXNvdXJjZSBJUlEgZmxhZ3MgaWYgc2V0IGJ5IHBsYXRmb3JtIGRldmljZSBzZXR1cC4KIAkgKi8KLQlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKKwlpcnFmbGFncyB8PSBJUlFGX1NIQVJFRDsKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IGlycWZsYWdzKTsKIAlpZiAocmV0dmFsICE9IDApCiAJCWdvdG8gZXJyNjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCmluZGV4IDNhN2JmZTcuLmNmNWU0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKQEAgLTUzLDcgKzUzLDYgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYzLjAiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkxpbnVzICdGcm9kbyBSYWJiaXQnIFRvcnZhbGRzLCBKb2hhbm5lcyBFcmRmZWx0LCBcCiBSYW5keSBEdW5sYXAsIEdlb3JnIEFjaGVyLCBEZXRpIEZsaWVnbCwgVGhvbWFzIFNhaWxlciwgUm9tYW4gV2Vpc3NnYWVyYmVyLCBcCiBBbGFuIFN0ZXJuIgpAQCAtOTUxLDEyICs5NTAsMTMgQEAKIHsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIlc1xuIiwKLQkJCWlnbm9yZV9vYyA/ICIsIG92ZXJjdXJyZW50IGlnbm9yZWQiIDogIiIpOwotCiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXByaW50ayhLRVJOX0lORk8gInVoY2lfaGNkOiAiIERSSVZFUl9ERVNDICIlc1xuIiwKKwkJCWlnbm9yZV9vYyA/ICIsIG92ZXJjdXJyZW50IGlnbm9yZWQiIDogIiIpOworCXNldF9iaXQoVVNCX1VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKKwogCWlmIChERUJVR19DT05GSUdVUkVEKSB7CiAJCWVycmJ1ZiA9IGttYWxsb2MoRVJSQlVGX0xFTiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZXJyYnVmKQpAQCAtOTg4LDYgKzk4OCw3IEBACiAKIGVycmJ1Zl9mYWlsZWQ6CiAKKwljbGVhcl9iaXQoVVNCX1VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC05OTcsNiArOTk4LDcgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kodWhjaV91cF9jYWNoZXApOwogCWRlYnVnZnNfcmVtb3ZlKHVoY2lfZGVidWdmc19yb290KTsKIAlrZnJlZShlcnJidWYpOworCWNsZWFyX2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOwogfQogCiBtb2R1bGVfaW5pdCh1aGNpX2hjZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCmluZGV4IDFmMGMyY2YuLjU2MzFkODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtMTA2NSwxMyArMTA2NSwxOCBAQAogCQl9CiAJCWlmIChleHBvbmVudCA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcWgtPnBlcmlvZCA9IDEgPDwgZXhwb25lbnQ7Ci0JCXFoLT5za2VsID0gU0tFTF9JTkRFWChleHBvbmVudCk7CiAKLQkJLyogRm9yIG5vdywgaW50ZXJydXB0IHBoYXNlIGlzIGZpeGVkIGJ5IHRoZSBsYXlvdXQKLQkJICogb2YgdGhlIFFIIGxpc3RzLiAqLwotCQlxaC0+cGhhc2UgPSAocWgtPnBlcmlvZCAvIDIpICYgKE1BWF9QSEFTRSAtIDEpOwotCQlyZXQgPSB1aGNpX2NoZWNrX2JhbmR3aWR0aCh1aGNpLCBxaCk7CisJCS8qIElmIHRoZSBzbG90IGlzIGZ1bGwsIHRyeSBhIGxvd2VyIHBlcmlvZCAqLworCQlkbyB7CisJCQlxaC0+cGVyaW9kID0gMSA8PCBleHBvbmVudDsKKwkJCXFoLT5za2VsID0gU0tFTF9JTkRFWChleHBvbmVudCk7CisKKwkJCS8qIEZvciBub3csIGludGVycnVwdCBwaGFzZSBpcyBmaXhlZCBieSB0aGUgbGF5b3V0CisJCQkgKiBvZiB0aGUgUUggbGlzdHMuCisJCQkgKi8KKwkJCXFoLT5waGFzZSA9IChxaC0+cGVyaW9kIC8gMikgJiAoTUFYX1BIQVNFIC0gMSk7CisJCQlyZXQgPSB1aGNpX2NoZWNrX2JhbmR3aWR0aCh1aGNpLCBxaCk7CisJCX0gd2hpbGUgKHJldCAhPSAwICYmIC0tZXhwb25lbnQgPj0gMCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSBpZiAocWgtPnBlcmlvZCA+IHVyYi0+aW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvS2J1aWxkIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL0tidWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmEzODcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL0tidWlsZApAQCAtMCwwICsxLDExIEBACitvYmotJChDT05GSUdfVVNCX1dIQ0lfSENEKSArPSB3aGNpLWhjZC5vCisKK3doY2ktaGNkLXkgOj0gXAorCWFzbC5vCVwKKwloY2QubyAJXAorCWh3Lm8JXAorCWluaXQubwlcCisJaW50Lm8JXAorCXB6bC5vCVwKKwlxc2V0Lm8JXAorCXd1c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNzA3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiBXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgKFdIQykgYXN5bmNocm9ub3VzIHNjaGVkdWxlIG1hbmFnZW1lbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IvdW1jLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjZGVmaW5lIERfTE9DQUwgMAorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCisjaW5jbHVkZSAiLi4vLi4vd3VzYmNvcmUvd3VzYmhjLmgiCisKKyNpbmNsdWRlICJ3aGNkLmgiCisKKyNpZiBEX0xPQ0FMID49IDQKK3N0YXRpYyB2b2lkIGR1bXBfYXNsKHN0cnVjdCB3aGMgKndoYywgY29uc3QgY2hhciAqdGFnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3aGMtPnVtYy0+ZGV2OworCXN0cnVjdCB3aGNfcXNldCAqcXNldDsKKworCWRfcHJpbnRmKDQsIGRldiwgIkFTTCAlc1xuIiwgdGFnKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocXNldCwgJndoYy0+YXN5bmNfbGlzdCwgbGlzdF9ub2RlKSB7CisJCWR1bXBfcXNldChxc2V0LCBkZXYpOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9hc2woc3RydWN0IHdoYyAqd2hjLCBjb25zdCBjaGFyICp0YWcpCit7Cit9CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCBxc2V0X2dldF9uZXh0X3ByZXYoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQsCisJCQkgICAgICAgc3RydWN0IHdoY19xc2V0ICoqbmV4dCwgc3RydWN0IHdoY19xc2V0ICoqcHJldikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuLCAqcDsKKworCUJVR19PTihsaXN0X2VtcHR5KCZ3aGMtPmFzeW5jX2xpc3QpKTsKKworCW4gPSBxc2V0LT5saXN0X25vZGUubmV4dDsKKwlpZiAobiA9PSAmd2hjLT5hc3luY19saXN0KQorCQluID0gbi0+bmV4dDsKKwlwID0gcXNldC0+bGlzdF9ub2RlLnByZXY7CisJaWYgKHAgPT0gJndoYy0+YXN5bmNfbGlzdCkKKwkJcCA9IHAtPnByZXY7CisKKwkqbmV4dCA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3Qgd2hjX3FzZXQsIGxpc3Rfbm9kZSk7CisJKnByZXYgPSBjb250YWluZXJfb2YocCwgc3RydWN0IHdoY19xc2V0LCBsaXN0X25vZGUpOworCit9CisKK3N0YXRpYyB2b2lkIGFzbF9xc2V0X2luc2VydF9iZWdpbihzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKK3sKKwlsaXN0X21vdmUoJnFzZXQtPmxpc3Rfbm9kZSwgJndoYy0+YXN5bmNfbGlzdCk7CisJcXNldC0+aW5fc3dfbGlzdCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGFzbF9xc2V0X2luc2VydChzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKK3sKKwlzdHJ1Y3Qgd2hjX3FzZXQgKm5leHQsICpwcmV2OworCisJcXNldF9jbGVhcih3aGMsIHFzZXQpOworCisJLyogTGluayBpbnRvIEFTTC4gKi8KKwlxc2V0X2dldF9uZXh0X3ByZXYod2hjLCBxc2V0LCAmbmV4dCwgJnByZXYpOworCXdoY19xc2V0X3NldF9saW5rX3B0cigmcXNldC0+cWgubGluaywgbmV4dC0+cXNldF9kbWEpOworCXdoY19xc2V0X3NldF9saW5rX3B0cigmcHJldi0+cWgubGluaywgcXNldC0+cXNldF9kbWEpOworCXFzZXQtPmluX2h3X2xpc3QgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBhc2xfcXNldF9yZW1vdmUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCit7CisJc3RydWN0IHdoY19xc2V0ICpwcmV2LCAqbmV4dDsKKworCXFzZXRfZ2V0X25leHRfcHJldih3aGMsIHFzZXQsICZuZXh0LCAmcHJldik7CisKKwlsaXN0X21vdmUoJnFzZXQtPmxpc3Rfbm9kZSwgJndoYy0+YXN5bmNfcmVtb3ZlZF9saXN0KTsKKwlxc2V0LT5pbl9zd19saXN0ID0gZmFsc2U7CisKKwkvKgorCSAqIE5vIG1vcmUgcXNldHMgaW4gdGhlIEFTTD8gIFRoZSBjYWxsZXIgbXVzdCBzdG9wIHRoZSBBU0wgYXMKKwkgKiBpdCdzIG5vIGxvbmdlciB2YWxpZC4KKwkgKi8KKwlpZiAobGlzdF9lbXB0eSgmd2hjLT5hc3luY19saXN0KSkKKwkJcmV0dXJuOworCisJLyogUmVtb3ZlIGZyb20gQVNMLiAqLworCXdoY19xc2V0X3NldF9saW5rX3B0cigmcHJldi0+cWgubGluaywgbmV4dC0+cXNldF9kbWEpOworCXFzZXQtPmluX2h3X2xpc3QgPSBmYWxzZTsKK30KKworLyoqCisgKiBwcm9jZXNzX3FzZXQgLSBwcm9jZXNzIGFueSByZWNlbnRseSBpbmFjdGl2YXRlZCBvciBoYWx0ZWQgcVREcyBpbiBhCisgKiBxc2V0LgorICoKKyAqIEFmdGVyIGluYWN0aXZlIHFURHMgYXJlIHJlbW92ZWQsIG5ldyBxVERzIGNhbiBiZSBhZGRlZCBpZiB0aGUKKyAqIHVyYiBxdWV1ZSBzdGlsbCBjb250YWlucyBVUkJzLgorICoKKyAqIFJldHVybnMgYW55IGFkZGl0aW9uYWwgV1VTQkNNRCBiaXRzIGZvciB0aGUgQVNMIHN5bmMgY29tbWFuZCAoaS5lLiwKKyAqIFdVU0JDTURfQVNZTkNfUVNFVF9STSBpZiBhIGhhbHRlZCBxc2V0IHdhcyByZW1vdmVkKS4KKyAqLworc3RhdGljIHVpbnQzMl90IHByb2Nlc3NfcXNldChzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKK3sKKwllbnVtIHdoY191cGRhdGUgdXBkYXRlID0gMDsKKwl1aW50MzJfdCBzdGF0dXMgPSAwOworCisJd2hpbGUgKHFzZXQtPm50ZHMpIHsKKwkJc3RydWN0IHdoY19xdGQgKnRkOworCQlpbnQgdDsKKworCQl0ID0gcXNldC0+dGRfc3RhcnQ7CisJCXRkID0gJnFzZXQtPnF0ZFtxc2V0LT50ZF9zdGFydF07CisJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHRkLT5zdGF0dXMpOworCisJCS8qCisJCSAqIE5vdGhpbmcgdG8gZG8gd2l0aCBhIHN0aWxsIGFjdGl2ZSBxVEQuCisJCSAqLworCQlpZiAoc3RhdHVzICYgUVREX1NUU19BQ1RJVkUpCisJCQlicmVhazsKKworCQlpZiAoc3RhdHVzICYgUVREX1NUU19IQUxURUQpIHsKKwkJCS8qIFVnLCBhbiBlcnJvci4gKi8KKwkJCXByb2Nlc3NfaGFsdGVkX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIE1tbSwgYSBjb21wbGV0ZWQgcVRELiAqLworCQlwcm9jZXNzX2luYWN0aXZlX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwl9CisKKwl1cGRhdGUgfD0gcXNldF9hZGRfcXRkcyh3aGMsIHFzZXQpOworCitkb25lOgorCS8qCisJICogUmVtb3ZlIHRoaXMgcXNldCBmcm9tIHRoZSBBU0wgaWYgcmVxdWVzdGVkLCBidXQgb25seSBpZiBoYXMKKwkgKiBubyBxVERzLgorCSAqLworCWlmIChxc2V0LT5yZW1vdmUgJiYgcXNldC0+bnRkcyA9PSAwKSB7CisJCWFzbF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOworCQl1cGRhdGUgfD0gV0hDX1VQREFURV9SRU1PVkVEOworCX0KKwlyZXR1cm4gdXBkYXRlOworfQorCit2b2lkIGFzbF9zdGFydChzdHJ1Y3Qgd2hjICp3aGMpCit7CisJc3RydWN0IHdoY19xc2V0ICpxc2V0OworCisJcXNldCA9IGxpc3RfZmlyc3RfZW50cnkoJndoYy0+YXN5bmNfbGlzdCwgc3RydWN0IHdoY19xc2V0LCBsaXN0X25vZGUpOworCisJbGVfd3JpdGVxKHFzZXQtPnFzZXRfZG1hIHwgUUhfTElOS19OVERTKDgpLCB3aGMtPmJhc2UgKyBXVVNCQVNZTkNMSVNUQUREUik7CisKKwl3aGNfd3JpdGVfd3VzYmNtZCh3aGMsIFdVU0JDTURfQVNZTkNfRU4sIFdVU0JDTURfQVNZTkNfRU4pOworCXdoY2lfd2FpdF9mb3IoJndoYy0+dW1jLT5kZXYsIHdoYy0+YmFzZSArIFdVU0JTVFMsCisJCSAgICAgIFdVU0JTVFNfQVNZTkNfU0NIRUQsIFdVU0JTVFNfQVNZTkNfU0NIRUQsCisJCSAgICAgIDEwMDAsICJzdGFydCBBU0wiKTsKK30KKwordm9pZCBhc2xfc3RvcChzdHJ1Y3Qgd2hjICp3aGMpCit7CisJd2hjX3dyaXRlX3d1c2JjbWQod2hjLCBXVVNCQ01EX0FTWU5DX0VOLCAwKTsKKwl3aGNpX3dhaXRfZm9yKCZ3aGMtPnVtYy0+ZGV2LCB3aGMtPmJhc2UgKyBXVVNCU1RTLAorCQkgICAgICBXVVNCU1RTX0FTWU5DX1NDSEVELCAwLAorCQkgICAgICAxMDAwLCAic3RvcCBBU0wiKTsKK30KKwordm9pZCBhc2xfdXBkYXRlKHN0cnVjdCB3aGMgKndoYywgdWludDMyX3Qgd3VzYmNtZCkKK3sKKwl3aGNfd3JpdGVfd3VzYmNtZCh3aGMsIHd1c2JjbWQsIHd1c2JjbWQpOworCXdhaXRfZXZlbnQod2hjLT5hc3luY19saXN0X3dxLAorCQkgICAobGVfcmVhZGwod2hjLT5iYXNlICsgV1VTQkNNRCkgJiBXVVNCQ01EX0FTWU5DX1VQREFURUQpID09IDApOworfQorCisvKioKKyAqIHNjYW5fYXN5bmNfd29yayAtIHNjYW4gdGhlIEFTTCBmb3IgcXNldHMgdG8gcHJvY2Vzcy4KKyAqCisgKiBQcm9jZXNzIGVhY2ggcXNldCBpbiB0aGUgQVNMIGluIHR1cm4gYW5kIHRoZW4gc2lnbmFsIHRoZSBXSEMgdGhhdAorICogdGhlIEFTTCBoYXMgYmVlbiB1cGRhdGVkLgorICoKKyAqIFRoZW4gc3RhcnQsIHN0b3Agb3IgdXBkYXRlIHRoZSBhc3luY2hyb25vdXMgc2NoZWR1bGUgYXMgcmVxdWlyZWQuCisgKi8KK3ZvaWQgc2Nhbl9hc3luY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2hjICp3aGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdoYywgYXN5bmNfd29yayk7CisJc3RydWN0IHdoY19xc2V0ICpxc2V0LCAqdDsKKwllbnVtIHdoY191cGRhdGUgdXBkYXRlID0gMDsKKworCXNwaW5fbG9ja19pcnEoJndoYy0+bG9jayk7CisKKwlkdW1wX2FzbCh3aGMsICJiZWZvcmUgcHJvY2Vzc2luZyIpOworCisJLyoKKwkgKiBUcmFuc2VydmUgdGhlIHNvZnR3YXJlIGxpc3QgYmFja3dhcmRzIHNvIG5ldyBxc2V0cyBjYW4gYmUKKwkgKiBzYWZlbHkgaW5zZXJ0ZWQgaW50byB0aGUgQVNMIHdpdGhvdXQgbWFraW5nIGl0IG5vbi1jaXJjdWxhci4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShxc2V0LCB0LCAmd2hjLT5hc3luY19saXN0LCBsaXN0X25vZGUpIHsKKwkJaWYgKCFxc2V0LT5pbl9od19saXN0KSB7CisJCQlhc2xfcXNldF9pbnNlcnQod2hjLCBxc2V0KTsKKwkJCXVwZGF0ZSB8PSBXSENfVVBEQVRFX0FEREVEOworCQl9CisKKwkJdXBkYXRlIHw9IHByb2Nlc3NfcXNldCh3aGMsIHFzZXQpOworCX0KKworCWR1bXBfYXNsKHdoYywgImFmdGVyIHByb2Nlc3NpbmciKTsKKworCXNwaW5fdW5sb2NrX2lycSgmd2hjLT5sb2NrKTsKKworCWlmICh1cGRhdGUpIHsKKwkJdWludDMyX3Qgd3VzYmNtZCA9IFdVU0JDTURfQVNZTkNfVVBEQVRFRCB8IFdVU0JDTURfQVNZTkNfU1lOQ0VEX0RCOworCQlpZiAodXBkYXRlICYgV0hDX1VQREFURV9SRU1PVkVEKQorCQkJd3VzYmNtZCB8PSBXVVNCQ01EX0FTWU5DX1FTRVRfUk07CisJCWFzbF91cGRhdGUod2hjLCB3dXNiY21kKTsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHRoZSBBU0wgaXMgdXBkYXRlZCwgY29tcGxldGUgdGhlIHJlbW92YWwgb2YgYW55CisJICogcmVtb3ZlZCBxc2V0cy4KKwkgKi8KKwlzcGluX2xvY2soJndoYy0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocXNldCwgdCwgJndoYy0+YXN5bmNfcmVtb3ZlZF9saXN0LCBsaXN0X25vZGUpIHsKKwkJcXNldF9yZW1vdmVfY29tcGxldGUod2hjLCBxc2V0KTsKKwl9CisKKwlzcGluX3VubG9jaygmd2hjLT5sb2NrKTsKK30KKworLyoqCisgKiBhc2xfdXJiX2VucXVldWUgLSBxdWV1ZSBhbiBVUkIgb250byB0aGUgYXN5bmNocm9ub3VzIGxpc3QgKEFTTCkuCisgKiBAd2hjOiB0aGUgV0hDSSBob3N0IGNvbnRyb2xsZXIKKyAqIEB1cmI6IHRoZSBVUkIgdG8gZW5xdWV1ZQorICogQG1lbV9mbGFnczogZmxhZ3MgZm9yIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMKKyAqCisgKiBUaGUgcXNldCBmb3IgdGhlIGVuZHBvaW50IGlzIG9idGFpbmVkIGFuZCB0aGUgdXJiIHF1ZXVlZCBvbiB0byBpdC4KKyAqCisgKiBXb3JrIGlzIHNjaGVkdWxlZCB0byB1cGRhdGUgdGhlIGhhcmR3YXJlJ3MgdmlldyBvZiB0aGUgQVNMLgorICovCitpbnQgYXNsX3VyYl9lbnF1ZXVlKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IHdoY19xc2V0ICpxc2V0OworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKKworCXFzZXQgPSBnZXRfcXNldCh3aGMsIHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHFzZXQgPT0gTlVMTCkKKwkJZXJyID0gLUVOT01FTTsKKwllbHNlCisJCWVyciA9IHFzZXRfYWRkX3VyYih3aGMsIHFzZXQsIHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFlcnIpIHsKKwkJdXNiX2hjZF9saW5rX3VyYl90b19lcCgmd2hjLT53dXNiaGMudXNiX2hjZCwgdXJiKTsKKwkJaWYgKCFxc2V0LT5pbl9zd19saXN0KQorCQkJYXNsX3FzZXRfaW5zZXJ0X2JlZ2luKHdoYywgcXNldCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWVycikKKwkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJndoYy0+YXN5bmNfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhc2xfdXJiX2RlcXVldWUgLSByZW1vdmUgYW4gVVJCIChxc2V0KSBmcm9tIHRoZSBhc3luYyBsaXN0LgorICogQHdoYzogdGhlIFdIQ0kgaG9zdCBjb250cm9sbGVyCisgKiBAdXJiOiB0aGUgVVJCIHRvIGRlcXVldWUKKyAqIEBzdGF0dXM6IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgVVJCCisgKgorICogVVJCcyB0aGF0IGRvIHlldCBoYXZlIHFURHMgY2FuIHNpbXBseSBiZSByZW1vdmVkIGZyb20gdGhlIHNvZnR3YXJlCisgKiBxdWV1ZSwgb3RoZXJ3aXNlIHRoZSBxc2V0IG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBBU0wgc28gdGhlIHFURHMKKyAqIGNhbiBiZSByZW1vdmVkLgorICovCitpbnQgYXNsX3VyYl9kZXF1ZXVlKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCB3aGNfdXJiICp3dXJiID0gdXJiLT5oY3ByaXY7CisJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKKwlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2hjLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSB1c2JfaGNkX2NoZWNrX3VubGlua191cmIoJndoYy0+d3VzYmhjLnVzYl9oY2QsIHVyYiwgc3RhdHVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RkLCB0LCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7CisJCWlmIChzdGQtPnVyYiA9PSB1cmIpCisJCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKKwkJZWxzZQorCQkJc3RkLT5xdGQgPSBOVUxMOyAvKiBzbyB0aGlzIHN0ZCBpcyByZS1hZGRlZCB3aGVuIHRoZSBxc2V0IGlzICovCisJfQorCisJYXNsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7CisJd3VyYi0+c3RhdHVzID0gc3RhdHVzOworCXd1cmItPmlzX2FzeW5jID0gdHJ1ZTsKKwlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBhc2xfcXNldF9kZWxldGUgLSBkZWxldGUgYSBxc2V0IGZyb20gdGhlIEFTTAorICovCit2b2lkIGFzbF9xc2V0X2RlbGV0ZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKK3sKKwlxc2V0LT5yZW1vdmUgPSAxOworCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3aGMtPmFzeW5jX3dvcmspOworCXFzZXRfZGVsZXRlKHdoYywgcXNldCk7Cit9CisKKy8qKgorICogYXNsX2luaXQgLSBpbml0aWFsaXplIHRoZSBhc3luY2hyb25vdXMgc2NoZWR1bGUgbGlzdAorICoKKyAqIEEgZHVtbXkgcXNldCB3aXRoIG5vIHFURHMgaXMgYWRkZWQgdG8gdGhlIEFTTCB0byBzaW1wbGlmeSByZW1vdmluZworICogcXNldHMgKG5vIG5lZWQgdG8gc3RvcCB0aGUgQVNMIHdoZW4gdGhlIGxhc3QgcXNldCBpcyByZW1vdmVkKS4KKyAqLworaW50IGFzbF9pbml0KHN0cnVjdCB3aGMgKndoYykKK3sKKwlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQ7CisKKwlxc2V0ID0gcXNldF9hbGxvYyh3aGMsIEdGUF9LRVJORUwpOworCWlmIChxc2V0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYXNsX3FzZXRfaW5zZXJ0X2JlZ2luKHdoYywgcXNldCk7CisJYXNsX3FzZXRfaW5zZXJ0KHdoYywgcXNldCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhc2xfY2xlYW5fdXAgLSBmcmVlIEFTTCByZXNvdXJjZXMKKyAqCisgKiBUaGUgQVNMIGlzIHN0b3BwZWQgYW5kIGVtcHR5IGV4Y2VwdCBmb3IgdGhlIGR1bW15IHFzZXQuCisgKi8KK3ZvaWQgYXNsX2NsZWFuX3VwKHN0cnVjdCB3aGMgKndoYykKK3sKKwlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQ7CisKKwlpZiAoIWxpc3RfZW1wdHkoJndoYy0+YXN5bmNfbGlzdCkpIHsKKwkJcXNldCA9IGxpc3RfZmlyc3RfZW50cnkoJndoYy0+YXN5bmNfbGlzdCwgc3RydWN0IHdoY19xc2V0LCBsaXN0X25vZGUpOworCQlsaXN0X2RlbCgmcXNldC0+bGlzdF9ub2RlKTsKKwkJcXNldF9mcmVlKHdoYywgcXNldCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2hjZC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2hjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmM2FkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaGNkLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgKFdIQykgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXdiL3VtYy5oPgorCisjaW5jbHVkZSAiLi4vLi4vd3VzYmNvcmUvd3VzYmhjLmgiCisKKyNpbmNsdWRlICJ3aGNkLmgiCisKKy8qCisgKiBPbmUgdGltZSBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBOb3RoaW5nIHRvIGRvIGhlcmUuCisgKi8KK3N0YXRpYyBpbnQgd2hjX3Jlc2V0KHN0cnVjdCB1c2JfaGNkICp1c2JfaGNkKQoreworCXJldHVybiAwOworfQorCisvKgorICogU3RhcnQgdGhlIHdpcmVsZXNzIGhvc3QgY29udHJvbGxlci4KKyAqCisgKiBTdGFydCBkZXZpY2Ugbm90aWZpY2F0aW9uLgorICoKKyAqIFB1dCBoYyBpbnRvIHJ1biBzdGF0ZSwgc2V0IEROVFMgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIGludCB3aGNfc3RhcnQoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCXU4IGJjaWQ7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOworCisJbGVfd3JpdGVsKFdVU0JJTlRSX0dFTl9DTURfRE9ORQorCQkgIHwgV1VTQklOVFJfSE9TVF9FUlIKKwkJICB8IFdVU0JJTlRSX0FTWU5DX1NDSEVEX1NZTkNFRAorCQkgIHwgV1VTQklOVFJfRE5UU19JTlQKKwkJICB8IFdVU0JJTlRSX0VSUl9JTlQKKwkJICB8IFdVU0JJTlRSX0lOVCwKKwkJICB3aGMtPmJhc2UgKyBXVVNCSU5UUik7CisKKwkvKiBzZXQgY2x1c3RlciBJRCAqLworCWJjaWQgPSB3dXNiX2NsdXN0ZXJfaWRfZ2V0KCk7CisJcmV0ID0gd2hjX3NldF9jbHVzdGVyX2lkKHdoYywgYmNpZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXd1c2JoYy0+Y2x1c3Rlcl9pZCA9IGJjaWQ7CisKKwkvKiBzdGFydCBIQyAqLworCXdoY193cml0ZV93dXNiY21kKHdoYywgV1VTQkNNRF9SVU4sIFdVU0JDTURfUlVOKTsKKworCXVzYl9oY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOworCXVzYl9oY2QtPnBvbGxfcmggPSAxOworCXVzYl9oY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKworb3V0OgorCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogU3RvcCB0aGUgd2lyZWxlc3MgaG9zdCBjb250cm9sbGVyLgorICoKKyAqIFN0b3AgZGV2aWNlIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBXYWl0IGZvciBwZW5kaW5nIHRyYW5zZmVyIHRvIHN0b3A/IFB1dCBoYyBpbnRvIHN0b3Agc3RhdGU/CisgKi8KK3N0YXRpYyB2b2lkIHdoY19zdG9wKHN0cnVjdCB1c2JfaGNkICp1c2JfaGNkKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCXN0cnVjdCB3aGMgKndoYyA9IHd1c2JoY190b193aGMod3VzYmhjKTsKKworCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOworCisJd3VzYmhjX3N0b3Aod3VzYmhjKTsKKworCS8qIHN0b3AgSEMgKi8KKwlsZV93cml0ZWwoMCwgd2hjLT5iYXNlICsgV1VTQklOVFIpOworCXdoY193cml0ZV93dXNiY21kKHdoYywgV1VTQkNNRF9SVU4sIDApOworCXdoY2lfd2FpdF9mb3IoJndoYy0+dW1jLT5kZXYsIHdoYy0+YmFzZSArIFdVU0JTVFMsCisJCSAgICAgIFdVU0JTVFNfSENIQUxURUQsIFdVU0JTVFNfSENIQUxURUQsCisJCSAgICAgIDEwMCwgIkhDIHRvIGhhbHQiKTsKKworCXd1c2JfY2x1c3Rlcl9pZF9wdXQod3VzYmhjLT5jbHVzdGVyX2lkKTsKKworCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2hjX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QpCit7CisJLyogRnJhbWUgbnVtYmVycyBhcmUgbm90IGFwcGxpY2FibGUgdG8gV1VTQi4gKi8KKwlyZXR1cm4gLUVOT1NZUzsKK30KKworCisvKgorICogUXVldWUgYW4gVVJCIHRvIHRoZSBBU0wgb3IgUFpMCisgKi8KK3N0YXRpYyBpbnQgd2hjX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICp1c2JfaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkgICBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJcmV0ID0gcHpsX3VyYl9lbnF1ZXVlKHdoYywgdXJiLCBtZW1fZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWRldl9lcnIoJndoYy0+dW1jLT5kZXYsICJpc29jaHJvbm91cyB0cmFuc2ZlcnMgdW5zdXBwb3J0ZWRcbiIpOworCQlyZXQgPSAtRU5PVFNVUFA7CisJCWJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgorCWNhc2UgUElQRV9CVUxLOgorCWRlZmF1bHQ6CisJCXJldCA9IGFzbF91cmJfZW5xdWV1ZSh3aGMsIHVyYiwgbWVtX2ZsYWdzKTsKKwkJYnJlYWs7CisJfTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBxdWV1ZWQgVVJCIGZyb20gdGhlIEFTTCBvciBQWkwuCisgKi8KK3N0YXRpYyBpbnQgd2hjX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICp1c2JfaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJcmV0ID0gcHpsX3VyYl9kZXF1ZXVlKHdoYywgdXJiLCBzdGF0dXMpOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJY2FzZSBQSVBFX0JVTEs6CisJZGVmYXVsdDoKKwkJcmV0ID0gYXNsX3VyYl9kZXF1ZXVlKHdoYywgdXJiLCBzdGF0dXMpOworCQlicmVhazsKKwl9OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdhaXQgZm9yIGFsbCBVUkJzIHRvIHRoZSBlbmRwb2ludCB0byBiZSBjb21wbGV0ZWQsIHRoZW4gZGVsZXRlIHRoZQorICogcXNldC4KKyAqLworc3RhdGljIHZvaWQgd2hjX2VuZHBvaW50X2Rpc2FibGUoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QsCisJCQkJIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCXN0cnVjdCB3aGNfcXNldCAqcXNldDsKKworCXFzZXQgPSBlcC0+aGNwcml2OworCWlmIChxc2V0KSB7CisJCWVwLT5oY3ByaXYgPSBOVUxMOworCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmZXAtPmRlc2MpCisJCSAgICB8fCB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZlcC0+ZGVzYykpCisJCQlhc2xfcXNldF9kZWxldGUod2hjLCBxc2V0KTsKKwkJZWxzZQorCQkJcHpsX3FzZXRfZGVsZXRlKHdoYywgcXNldCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGhjX2RyaXZlciB3aGNfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9ICJ3aGNpLWhjZCIsCisJLnByb2R1Y3RfZGVzYyA9ICJXaXJlbGVzcyBob3N0IGNvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCB3aGMpIC0gc2l6ZW9mKHN0cnVjdCB1c2JfaGNkKSwKKwkuaXJxID0gd2hjX2ludF9oYW5kbGVyLAorCS5mbGFncyA9IEhDRF9VU0IyLAorCisJLnJlc2V0ID0gd2hjX3Jlc2V0LAorCS5zdGFydCA9IHdoY19zdGFydCwKKwkuc3RvcCA9IHdoY19zdG9wLAorCS5nZXRfZnJhbWVfbnVtYmVyID0gd2hjX2dldF9mcmFtZV9udW1iZXIsCisJLnVyYl9lbnF1ZXVlID0gd2hjX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9IHdoY191cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9IHdoY19lbmRwb2ludF9kaXNhYmxlLAorCisJLmh1Yl9zdGF0dXNfZGF0YSA9IHd1c2JoY19yaF9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPSB3dXNiaGNfcmhfY29udHJvbCwKKwkuYnVzX3N1c3BlbmQgPSB3dXNiaGNfcmhfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9IHd1c2JoY19yaF9yZXN1bWUsCisJLnN0YXJ0X3BvcnRfcmVzZXQgPSB3dXNiaGNfcmhfc3RhcnRfcG9ydF9yZXNldCwKK307CisKK3N0YXRpYyBpbnQgd2hjX3Byb2JlKHN0cnVjdCB1bWNfZGV2ICp1bWMpCit7CisJaW50IHJldCA9IC1FTk9NRU07CisJc3RydWN0IHVzYl9oY2QgKnVzYl9oY2Q7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gTlVMTDsKKwlzdHJ1Y3Qgd2hjICp3aGMgPSBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1bWMtPmRldjsKKworCXVzYl9oY2QgPSB1c2JfY3JlYXRlX2hjZCgmd2hjX2hjX2RyaXZlciwgZGV2LCAid2hjaSIpOworCWlmICh1c2JfaGNkID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gY3JlYXRlIGhjZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdXNiX2hjZC0+d2lyZWxlc3MgPSAxOworCisJd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CisJd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCXdoYy0+dW1jID0gdW1jOworCisJcmV0ID0gd2hjX2luaXQod2hjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJd3VzYmhjLT5kZXYgPSBkZXY7CisJd3VzYmhjLT51d2JfcmMgPSB1d2JfcmNfZ2V0X2J5X2dyYW5kcGEodW1jLT5kZXYucGFyZW50KTsKKwlpZiAoIXd1c2JoYy0+dXdiX3JjKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCByYWRpbyBjb250cm9sbGVyXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAod2hjLT5uX2RldmljZXMgPiBVU0JfTUFYQ0hJTERSRU4pIHsKKwkJZGV2X3dhcm4oZGV2LCAiVVNCX01BWENISUxEUkVOIHRvbyBsb3cgZm9yIFdVU0IgYWRhcHRlciAoJXUgcG9ydHMpXG4iLAorCQkJIHdoYy0+bl9kZXZpY2VzKTsKKwkJd3VzYmhjLT5wb3J0c19tYXggPSBVU0JfTUFYQ0hJTERSRU47CisJfSBlbHNlCisJCXd1c2JoYy0+cG9ydHNfbWF4ID0gd2hjLT5uX2RldmljZXM7CisJd3VzYmhjLT5tbWNpZXNfbWF4ICAgICAgPSB3aGMtPm5fbW1jX2llczsKKwl3dXNiaGMtPnN0YXJ0ICAgICAgICAgICA9IHdoY193dXNiaGNfc3RhcnQ7CisJd3VzYmhjLT5zdG9wICAgICAgICAgICAgPSB3aGNfd3VzYmhjX3N0b3A7CisJd3VzYmhjLT5tbWNpZV9hZGQgICAgICAgPSB3aGNfbW1jaWVfYWRkOworCXd1c2JoYy0+bW1jaWVfcm0gICAgICAgID0gd2hjX21tY2llX3JtOworCXd1c2JoYy0+ZGV2X2luZm9fc2V0ICAgID0gd2hjX2Rldl9pbmZvX3NldDsKKwl3dXNiaGMtPmJ3YV9zZXQgICAgICAgICA9IHdoY19id2Ffc2V0OworCXd1c2JoYy0+c2V0X251bV9kbnRzICAgID0gd2hjX3NldF9udW1fZG50czsKKwl3dXNiaGMtPnNldF9wdGsgICAgICAgICA9IHdoY19zZXRfcHRrOworCXd1c2JoYy0+c2V0X2d0ayAgICAgICAgID0gd2hjX3NldF9ndGs7CisKKwlyZXQgPSB3dXNiaGNfY3JlYXRlKHd1c2JoYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl93dXNiaGNfY3JlYXRlOworCisJcmV0ID0gdXNiX2FkZF9oY2QodXNiX2hjZCwgd2hjLT51bWMtPmlycSwgSVJRRl9TSEFSRUQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgYWRkIEhDRDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3JfdXNiX2FkZF9oY2Q7CisJfQorCisJcmV0ID0gd3VzYmhjX2JfY3JlYXRlKHd1c2JoYyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIldVU0JIQyBwaGFzZSBCIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3Jfd3VzYmhjX2JfY3JlYXRlOworCX0KKworCXJldHVybiAwOworCitlcnJvcl93dXNiaGNfYl9jcmVhdGU6CisJdXNiX3JlbW92ZV9oY2QodXNiX2hjZCk7CitlcnJvcl91c2JfYWRkX2hjZDoKKwl3dXNiaGNfZGVzdHJveSh3dXNiaGMpOworZXJyb3Jfd3VzYmhjX2NyZWF0ZToKKwl1d2JfcmNfcHV0KHd1c2JoYy0+dXdiX3JjKTsKK2Vycm9yOgorCXdoY19jbGVhbl91cCh3aGMpOworCWlmICh1c2JfaGNkKQorCQl1c2JfcHV0X2hjZCh1c2JfaGNkKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIHdoY19yZW1vdmUoc3RydWN0IHVtY19kZXYgKnVtYykKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmdW1jLT5kZXYpOworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCXN0cnVjdCB3aGMgKndoYyA9IHd1c2JoY190b193aGMod3VzYmhjKTsKKworCWlmICh1c2JfaGNkKSB7CisJCXd1c2JoY19iX2Rlc3Ryb3kod3VzYmhjKTsKKwkJdXNiX3JlbW92ZV9oY2QodXNiX2hjZCk7CisJCXd1c2JoY19kZXN0cm95KHd1c2JoYyk7CisJCXV3Yl9yY19wdXQod3VzYmhjLT51d2JfcmMpOworCQl3aGNfY2xlYW5fdXAod2hjKTsKKwkJdXNiX3B1dF9oY2QodXNiX2hjZCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVtY19kcml2ZXIgd2hjaV9oY19kcml2ZXIgPSB7CisJLm5hbWUgPQkJIndoY2ktaGNkIiwKKwkuY2FwX2lkID0gICAgICAgVU1DX0NBUF9JRF9XSENJX1dVU0JfSEMsCisJLnByb2JlID0Jd2hjX3Byb2JlLAorCS5yZW1vdmUgPQl3aGNfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2hjaV9oY19kcml2ZXJfaW5pdCh2b2lkKQoreworCXJldHVybiB1bWNfZHJpdmVyX3JlZ2lzdGVyKCZ3aGNpX2hjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3aGNpX2hjX2RyaXZlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdoY2lfaGNfZHJpdmVyX2V4aXQodm9pZCkKK3sKKwl1bWNfZHJpdmVyX3VucmVnaXN0ZXIoJndoY2lfaGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdoY2lfaGNfZHJpdmVyX2V4aXQpOworCisvKiBQQ0kgZGV2aWNlIElEJ3MgdGhhdCB3ZSBoYW5kbGUgKHNvIGl0IGdldHMgbG9hZGVkKSAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHdoY2lfaGNkX2lkX3RhYmxlW10gPSB7CisJeyBQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19XSVJFTEVTU19XSENJLCB+MCkgfSwKKwl7IC8qIGVtcHR5IGxhc3QgZW50cnkgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB3aGNpX2hjZF9pZF90YWJsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiV0hDSSBXaXJlbGVzcyBVU0IgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2h3LmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzg2ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2h3LmMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIFdpcmVsZXNzIEhvc3QgQ29udHJvbGxlciAoV0hDKSBoYXJkd2FyZSBhY2Nlc3MgaGVscGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi91bWMuaD4KKworI2luY2x1ZGUgIi4uLy4uL3d1c2Jjb3JlL3d1c2JoYy5oIgorCisjaW5jbHVkZSAid2hjZC5oIgorCit2b2lkIHdoY193cml0ZV93dXNiY21kKHN0cnVjdCB3aGMgKndoYywgdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY21kOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndoYy0+bG9jaywgZmxhZ3MpOworCisJY21kID0gbGVfcmVhZGwod2hjLT5iYXNlICsgV1VTQkNNRCk7CisJY21kID0gKGNtZCAmIH5tYXNrKSB8IHZhbDsKKwlsZV93cml0ZWwoY21kLCB3aGMtPmJhc2UgKyBXVVNCQ01EKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHdoY19kb19nZW5jbWQgLSBzdGFydCBhIGdlbmVyaWMgY29tbWFuZCB2aWEgdGhlIFdVU0JHRU5DTURTVFMgcmVnaXN0ZXIKKyAqIEB3aGM6ICAgIHRoZSBXSENJIEhDCisgKiBAY21kOiAgICBjb21tYW5kIHRvIHN0YXJ0LgorICogQHBhcmFtczogcGFyYW1ldGVycyBmb3IgdGhlIGNvbW1hbmQgKHRoZSBXVVNCR0VOQ01EUEFSQU1TIHJlZ2lzdGVyIHZhbHVlKS4KKyAqIEBhZGRyOiAgIHBvaW50ZXIgdG8gYW55IGRhdGEgZm9yIHRoZSBjb21tYW5kIChtYXkgYmUgTlVMTCkuCisgKiBAbGVuOiAgICBsZW5ndGggb2YgdGhlIGRhdGEgKGlmIGFueSkuCisgKi8KK2ludCB3aGNfZG9fZ2VuY21kKHN0cnVjdCB3aGMgKndoYywgdTMyIGNtZCwgdTMyIHBhcmFtcywgdm9pZCAqYWRkciwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJaW50IHQ7CisKKwltdXRleF9sb2NrKCZ3aGMtPm11dGV4KTsKKworCS8qIFdhaXQgZm9yIHByZXZpb3VzIGNvbW1hbmQgdG8gY29tcGxldGUuICovCisJdCA9IHdhaXRfZXZlbnRfdGltZW91dCh3aGMtPmNtZF93cSwKKwkJCSAgICAgICAobGVfcmVhZGwod2hjLT5iYXNlICsgV1VTQkdFTkNNRFNUUykgJiBXVVNCR0VOQ01EU1RTX0FDVElWRSkgPT0gMCwKKwkJCSAgICAgICBXSENfR0VOQ01EX1RJTUVPVVRfTVMpOworCWlmICh0ID09IDApIHsKKwkJZGV2X2Vycigmd2hjLT51bWMtPmRldiwgImdlbmVyaWMgY29tbWFuZCB0aW1lb3V0ICglMDR4LyUwNHgpXG4iLAorCQkJbGVfcmVhZGwod2hjLT5iYXNlICsgV1VTQkdFTkNNRFNUUyksCisJCQlsZV9yZWFkbCh3aGMtPmJhc2UgKyBXVVNCR0VOQ01EUEFSQU1TKSk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmIChhZGRyKSB7CisJCW1lbWNweSh3aGMtPmdlbl9jbWRfYnVmLCBhZGRyLCBsZW4pOworCQlkbWFfYWRkciA9IHdoYy0+Z2VuX2NtZF9idWZfZG1hOworCX0gZWxzZQorCQlkbWFfYWRkciA9IDA7CisKKwkvKiBQb2tlIHJlZ2lzdGVycyB0byBzdGFydCBjbWQuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJndoYy0+bG9jaywgZmxhZ3MpOworCisJbGVfd3JpdGVsKHBhcmFtcywgd2hjLT5iYXNlICsgV1VTQkdFTkNNRFBBUkFNUyk7CisJbGVfd3JpdGVxKGRtYV9hZGRyLCB3aGMtPmJhc2UgKyBXVVNCR0VOQUREUik7CisKKwlsZV93cml0ZWwoV1VTQkdFTkNNRFNUU19BQ1RJVkUgfCBXVVNCR0VOQ01EU1RTX0lPQyB8IGNtZCwKKwkJICB3aGMtPmJhc2UgKyBXVVNCR0VOQ01EU1RTKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOworCisJbXV0ZXhfdW5sb2NrKCZ3aGMtPm11dGV4KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2luaXQuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhNzgzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9pbml0LmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgKFdIQykgaW5pdGlhbGl6YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IvdW1jLmg+CisKKyNpbmNsdWRlICIuLi8uLi93dXNiY29yZS93dXNiaGMuaCIKKworI2luY2x1ZGUgIndoY2QuaCIKKworLyoKKyAqIFJlc2V0IHRoZSBob3N0IGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyB2b2lkIHdoY19od19yZXNldChzdHJ1Y3Qgd2hjICp3aGMpCit7CisJbGVfd3JpdGVsKFdVU0JDTURfV0hDUkVTRVQsIHdoYy0+YmFzZSArIFdVU0JDTUQpOworCXdoY2lfd2FpdF9mb3IoJndoYy0+dW1jLT5kZXYsIHdoYy0+YmFzZSArIFdVU0JDTUQsIFdVU0JDTURfV0hDUkVTRVQsIDAsCisJCSAgICAgIDEwMCwgInJlc2V0Iik7Cit9CisKK3N0YXRpYyB2b2lkIHdoY19od19pbml0X2RpX2J1ZihzdHJ1Y3Qgd2hjICp3aGMpCit7CisJaW50IGQ7CisKKwkvKiBEaXNhYmxlIGFsbCBlbnRyaWVzIGluIHRoZSBEZXZpY2UgSW5mb3JtYXRpb24gYnVmZmVyLiAqLworCWZvciAoZCA9IDA7IGQgPCB3aGMtPm5fZGV2aWNlczsgZCsrKQorCQl3aGMtPmRpX2J1ZltkXS5hZGRyX3NlY19pbmZvID0gV0hDX0RJX0RJU0FCTEU7CisKKwlsZV93cml0ZXEod2hjLT5kaV9idWZfZG1hLCB3aGMtPmJhc2UgKyBXVVNCREVWSUNFSU5GT0FERFIpOworfQorCitzdGF0aWMgdm9pZCB3aGNfaHdfaW5pdF9kbl9idWYoc3RydWN0IHdoYyAqd2hjKQoreworCS8qIENsZWFyIHRoZSBEZXZpY2UgTm90aWZpY2F0aW9uIGJ1ZmZlciB0byBlbnN1cmUgdGhlIFYgKHZhbGlkKQorCSAqIGJpdHMgYXJlIGNsZWFyLiAgKi8KKwltZW1zZXQod2hjLT5kbl9idWYsIDAsIDQwOTYpOworCisJbGVfd3JpdGVxKHdoYy0+ZG5fYnVmX2RtYSwgd2hjLT5iYXNlICsgV1VTQkROVFNCVUZBRERSKTsKK30KKworaW50IHdoY19pbml0KHN0cnVjdCB3aGMgKndoYykKK3sKKwl1MzIgd2hjc3BhcmFtczsKKwlpbnQgcmV0LCBpOworCXJlc291cmNlX3NpemVfdCBzdGFydCwgbGVuOworCisJc3Bpbl9sb2NrX2luaXQoJndoYy0+bG9jayk7CisJbXV0ZXhfaW5pdCgmd2hjLT5tdXRleCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmd2hjLT5jbWRfd3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndoYy0+YXN5bmNfbGlzdF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmd2hjLT5wZXJpb2RpY19saXN0X3dxKTsKKwl3aGMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldl9uYW1lKCZ3aGMtPnVtYy0+ZGV2KSk7CisJaWYgKHdoYy0+d29ya3F1ZXVlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJSU5JVF9XT1JLKCZ3aGMtPmRuX3dvcmssIHdoY19kbl93b3JrKTsKKworCUlOSVRfV09SSygmd2hjLT5hc3luY193b3JrLCBzY2FuX2FzeW5jX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZ3aGMtPmFzeW5jX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ3aGMtPmFzeW5jX3JlbW92ZWRfbGlzdCk7CisKKwlJTklUX1dPUksoJndoYy0+cGVyaW9kaWNfd29yaywgc2Nhbl9wZXJpb2RpY193b3JrKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmd2hjLT5wZXJpb2RpY19saXN0W2ldKTsKKwlJTklUX0xJU1RfSEVBRCgmd2hjLT5wZXJpb2RpY19yZW1vdmVkX2xpc3QpOworCisJLyogTWFwIEhDIHJlZ2lzdGVycy4gKi8KKwlzdGFydCA9IHdoYy0+dW1jLT5yZXNvdXJjZS5zdGFydDsKKwlsZW4gICA9IHdoYy0+dW1jLT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgIndoY2ktaGMiKSkgeworCQlkZXZfZXJyKCZ3aGMtPnVtYy0+ZGV2LCAiY2FuJ3QgcmVxdWVzdCBIQyByZWdpb25cbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3I7CisJfQorCXdoYy0+YmFzZV9waHlzID0gc3RhcnQ7CisJd2hjLT5iYXNlID0gaW9yZW1hcChzdGFydCwgbGVuKTsKKwlpZiAoIXdoYy0+YmFzZSkgeworCQlkZXZfZXJyKCZ3aGMtPnVtYy0+ZGV2LCAiaW9yZW1hcFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJd2hjX2h3X3Jlc2V0KHdoYyk7CisKKwkvKiBSZWFkIG1heGltdW0gbnVtYmVyIG9mIGRldmljZXMsIGtleXMgYW5kIE1NQyBJRXMuICovCisJd2hjc3BhcmFtcyA9IGxlX3JlYWRsKHdoYy0+YmFzZSArIFdIQ1NQQVJBTVMpOworCXdoYy0+bl9kZXZpY2VzID0gV0hDU1BBUkFNU19UT19OX0RFVklDRVMod2hjc3BhcmFtcyk7CisJd2hjLT5uX2tleXMgICAgPSBXSENTUEFSQU1TX1RPX05fS0VZUyh3aGNzcGFyYW1zKTsKKwl3aGMtPm5fbW1jX2llcyA9IFdIQ1NQQVJBTVNfVE9fTl9NTUNfSUVTKHdoY3NwYXJhbXMpOworCisJZGV2X2RiZygmd2hjLT51bWMtPmRldiwgIk5fREVWSUNFUyA9ICVkLCBOX0tFWVMgPSAlZCwgTl9NTUNfSUVTID0gJWRcbiIsCisJCXdoYy0+bl9kZXZpY2VzLCB3aGMtPm5fa2V5cywgd2hjLT5uX21tY19pZXMpOworCisJd2hjLT5xc2V0X3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInFzZXQiLCAmd2hjLT51bWMtPmRldiwKKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd2hjX3FzZXQpLCA2NCwgMCk7CisJaWYgKHdoYy0+cXNldF9wb29sID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXQgPSBhc2xfaW5pdCh3aGMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCXJldCA9IHB6bF9pbml0KHdoYyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGJ1ZmZlciBmb3IgZ2VuZXJpYyBjb21tYW5kcywgdGhlCisJICAgRGV2aWNlIEluZm9ybWF0aW9uIGJ1ZmZlciwgYW5kIHRoZSBEZXZpY2UgTm90aWZpY2F0aW9uCisJICAgYnVmZmVyLiAqLworCisJd2hjLT5nZW5fY21kX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmd2hjLT51bWMtPmRldiwgV0hDX0dFTl9DTURfREFUQV9MRU4sCisJCQkJCSAgICAgICZ3aGMtPmdlbl9jbWRfYnVmX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdoYy0+Z2VuX2NtZF9idWYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXdoYy0+ZG5fYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KCZ3aGMtPnVtYy0+ZGV2LAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBkbl9idWZfZW50cnkpICogV0hDX05fRE5fRU5UUklFUywKKwkJCQkJICZ3aGMtPmRuX2J1Zl9kbWEsIEdGUF9LRVJORUwpOworCWlmICghd2hjLT5kbl9idWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJd2hjX2h3X2luaXRfZG5fYnVmKHdoYyk7CisKKwl3aGMtPmRpX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmd2hjLT51bWMtPmRldiwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgZGlfYnVmX2VudHJ5KSAqIHdoYy0+bl9kZXZpY2VzLAorCQkJCQkgJndoYy0+ZGlfYnVmX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3aGMtPmRpX2J1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwl3aGNfaHdfaW5pdF9kaV9idWYod2hjKTsKKworCXJldHVybiAwOworCitlcnJvcjoKKwl3aGNfY2xlYW5fdXAod2hjKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdoY19jbGVhbl91cChzdHJ1Y3Qgd2hjICp3aGMpCit7CisJcmVzb3VyY2Vfc2l6ZV90IGxlbjsKKworCWlmICh3aGMtPmRpX2J1ZikKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJndoYy0+dW1jLT5kZXYsIHNpemVvZihzdHJ1Y3QgZGlfYnVmX2VudHJ5KSAqIHdoYy0+bl9kZXZpY2VzLAorCQkJCSAgd2hjLT5kaV9idWYsIHdoYy0+ZGlfYnVmX2RtYSk7CisJaWYgKHdoYy0+ZG5fYnVmKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmd2hjLT51bWMtPmRldiwgc2l6ZW9mKHN0cnVjdCBkbl9idWZfZW50cnkpICogV0hDX05fRE5fRU5UUklFUywKKwkJCQkgIHdoYy0+ZG5fYnVmLCB3aGMtPmRuX2J1Zl9kbWEpOworCWlmICh3aGMtPmdlbl9jbWRfYnVmKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmd2hjLT51bWMtPmRldiwgV0hDX0dFTl9DTURfREFUQV9MRU4sCisJCQkJICB3aGMtPmdlbl9jbWRfYnVmLCB3aGMtPmdlbl9jbWRfYnVmX2RtYSk7CisKKwlwemxfY2xlYW5fdXAod2hjKTsKKwlhc2xfY2xlYW5fdXAod2hjKTsKKworCWlmICh3aGMtPnFzZXRfcG9vbCkKKwkJZG1hX3Bvb2xfZGVzdHJveSh3aGMtPnFzZXRfcG9vbCk7CisKKwlsZW4gICA9IHdoYy0+dW1jLT5yZXNvdXJjZS5lbmQgLSB3aGMtPnVtYy0+cmVzb3VyY2Uuc3RhcnQgKyAxOworCWlmICh3aGMtPmJhc2UpCisJCWlvdW5tYXAod2hjLT5iYXNlKTsKKwlpZiAod2hjLT5iYXNlX3BoeXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbih3aGMtPmJhc2VfcGh5cywgbGVuKTsKKworCWlmICh3aGMtPndvcmtxdWV1ZSkKKwkJZGVzdHJveV93b3JrcXVldWUod2hjLT53b3JrcXVldWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2ludC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZTAxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaW50LmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIFdpcmVsZXNzIEhvc3QgQ29udHJvbGxlciAoV0hDKSBpbnRlcnJ1cHQgaGFuZGxpbmcuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IvdW1jLmg+CisKKyNpbmNsdWRlICIuLi8uLi93dXNiY29yZS93dXNiaGMuaCIKKworI2luY2x1ZGUgIndoY2QuaCIKKworc3RhdGljIHZvaWQgdHJhbnNmZXJfZG9uZShzdHJ1Y3Qgd2hjICp3aGMpCit7CisJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJndoYy0+YXN5bmNfd29yayk7CisJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJndoYy0+cGVyaW9kaWNfd29yayk7Cit9CisKK2lycXJldHVybl90IHdoY19pbnRfaGFuZGxlcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKGhjZCk7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCXUzMiBzdHM7CisKKwlzdHMgPSBsZV9yZWFkbCh3aGMtPmJhc2UgKyBXVVNCU1RTKTsKKwlpZiAoIShzdHMgJiBXVVNCU1RTX0lOVF9NQVNLKSkKKwkJcmV0dXJuIElSUV9OT05FOworCWxlX3dyaXRlbChzdHMgJiBXVVNCU1RTX0lOVF9NQVNLLCB3aGMtPmJhc2UgKyBXVVNCU1RTKTsKKworCWlmIChzdHMgJiBXVVNCU1RTX0dFTl9DTURfRE9ORSkKKwkJd2FrZV91cCgmd2hjLT5jbWRfd3EpOworCisJaWYgKHN0cyAmIFdVU0JTVFNfSE9TVF9FUlIpCisJCWRldl9lcnIoJndoYy0+dW1jLT5kZXYsICJGSVhNRTogaG9zdCBzeXN0ZW0gZXJyb3JcbiIpOworCisJaWYgKHN0cyAmIFdVU0JTVFNfQVNZTkNfU0NIRURfU1lOQ0VEKQorCQl3YWtlX3VwKCZ3aGMtPmFzeW5jX2xpc3Rfd3EpOworCisJaWYgKHN0cyAmIFdVU0JTVFNfUEVSSU9ESUNfU0NIRURfU1lOQ0VEKQorCQl3YWtlX3VwKCZ3aGMtPnBlcmlvZGljX2xpc3Rfd3EpOworCisJaWYgKHN0cyAmIFdVU0JTVFNfRE5UU19JTlQpCisJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3aGMtPmRuX3dvcmspOworCisJLyoKKwkgKiBBIHRyYW5zZmVyIGNvbXBsZXRlZCAoc2VlIFtXSENJXSBzZWN0aW9uIDQuNy4xLjIgZm9yIHdoZW4KKwkgKiB0aGlzIG9jY3VycykuCisJICovCisJaWYgKHN0cyAmIChXVVNCU1RTX0lOVCB8IFdVU0JTVFNfRVJSX0lOVCkpCisJCXRyYW5zZmVyX2RvbmUod2hjKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2RuX2J1ZihzdHJ1Y3Qgd2hjICp3aGMpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gJndoYy0+d3VzYmhjOworCXN0cnVjdCBkbl9idWZfZW50cnkgKmRuOworCWludCBwcm9jZXNzZWQgPSAwOworCisJZm9yIChkbiA9IHdoYy0+ZG5fYnVmOyBkbiA8IHdoYy0+ZG5fYnVmICsgV0hDX05fRE5fRU5UUklFUzsgZG4rKykgeworCQlpZiAoZG4tPnN0YXR1cyAmIFdIQ19ETl9TVEFUVVNfVkFMSUQpIHsKKwkJCXd1c2JoY19oYW5kbGVfZG4od3VzYmhjLCBkbi0+c3JjX2FkZHIsCisJCQkJCSAoc3RydWN0IHd1c2JfZG5faGRyICopZG4tPmRuX2RhdGEsCisJCQkJCSBkbi0+bXNnX3NpemUpOworCQkJZG4tPnN0YXR1cyAmPSB+V0hDX0ROX1NUQVRVU19WQUxJRDsKKwkJCXByb2Nlc3NlZCsrOworCQl9CisJfQorCXJldHVybiBwcm9jZXNzZWQ7Cit9CisKK3ZvaWQgd2hjX2RuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3aGMgKndoYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2hjLCBkbl93b3JrKTsKKwlpbnQgcHJvY2Vzc2VkOworCisJZG8geworCQlwcm9jZXNzZWQgPSBwcm9jZXNzX2RuX2J1Zih3aGMpOworCX0gd2hpbGUgKHByb2Nlc3NlZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2MmRmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIFdpcmVsZXNzIEhvc3QgQ29udHJvbGxlciAoV0hDKSBwZXJpb2RpYyBzY2hlZHVsZSBtYW5hZ2VtZW50LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL3VtYy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2RlZmluZSBEX0xPQ0FMIDAKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworI2luY2x1ZGUgIi4uLy4uL3d1c2Jjb3JlL3d1c2JoYy5oIgorCisjaW5jbHVkZSAid2hjZC5oIgorCisjaWYgRF9MT0NBTCA+PSA0CitzdGF0aWMgdm9pZCBkdW1wX3B6bChzdHJ1Y3Qgd2hjICp3aGMsIGNvbnN0IGNoYXIgKnRhZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2hjLT51bWMtPmRldjsKKwlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQ7CisJaW50IHBlcmlvZCA9IDA7CisKKwlkX3ByaW50Zig0LCBkZXYsICJQWkwgJXNcbiIsIHRhZyk7CisKKwlmb3IgKHBlcmlvZCA9IDA7IHBlcmlvZCA8IDU7IHBlcmlvZCsrKSB7CisJCWRfcHJpbnRmKDQsIGRldiwgIlBlcmlvZCAlZFxuIiwgcGVyaW9kKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShxc2V0LCAmd2hjLT5wZXJpb2RpY19saXN0W3BlcmlvZF0sIGxpc3Rfbm9kZSkgeworCQkJZHVtcF9xc2V0KHFzZXQsIGRldik7CisJCX0KKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcHpsKHN0cnVjdCB3aGMgKndoYywgY29uc3QgY2hhciAqdGFnKQoreworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9wemxfcG9pbnRlcnMoc3RydWN0IHdoYyAqd2hjLCBpbnQgcGVyaW9kLCB1NjQgYWRkcikKK3sKKwlzd2l0Y2ggKHBlcmlvZCkgeworCWNhc2UgMDoKKwkJd2hjX3FzZXRfc2V0X2xpbmtfcHRyKCZ3aGMtPnB6X2xpc3RbMF0sIGFkZHIpOworCQl3aGNfcXNldF9zZXRfbGlua19wdHIoJndoYy0+cHpfbGlzdFsyXSwgYWRkcik7CisJCXdoY19xc2V0X3NldF9saW5rX3B0cigmd2hjLT5wel9saXN0WzRdLCBhZGRyKTsKKwkJd2hjX3FzZXRfc2V0X2xpbmtfcHRyKCZ3aGMtPnB6X2xpc3RbNl0sIGFkZHIpOworCQl3aGNfcXNldF9zZXRfbGlua19wdHIoJndoYy0+cHpfbGlzdFs4XSwgYWRkcik7CisJCXdoY19xc2V0X3NldF9saW5rX3B0cigmd2hjLT5wel9saXN0WzEwXSwgYWRkcik7CisJCXdoY19xc2V0X3NldF9saW5rX3B0cigmd2hjLT5wel9saXN0WzEyXSwgYWRkcik7CisJCXdoY19xc2V0X3NldF9saW5rX3B0cigmd2hjLT5wel9saXN0WzE0XSwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJd2hjX3FzZXRfc2V0X2xpbmtfcHRyKCZ3aGMtPnB6X2xpc3RbMV0sIGFkZHIpOworCQl3aGNfcXNldF9zZXRfbGlua19wdHIoJndoYy0+cHpfbGlzdFs1XSwgYWRkcik7CisJCXdoY19xc2V0X3NldF9saW5rX3B0cigmd2hjLT5wel9saXN0WzldLCBhZGRyKTsKKwkJd2hjX3FzZXRfc2V0X2xpbmtfcHRyKCZ3aGMtPnB6X2xpc3RbMTNdLCBhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3aGNfcXNldF9zZXRfbGlua19wdHIoJndoYy0+cHpfbGlzdFszXSwgYWRkcik7CisJCXdoY19xc2V0X3NldF9saW5rX3B0cigmd2hjLT5wel9saXN0WzExXSwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJd2hjX3FzZXRfc2V0X2xpbmtfcHRyKCZ3aGMtPnB6X2xpc3RbN10sIGFkZHIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXdoY19xc2V0X3NldF9saW5rX3B0cigmd2hjLT5wel9saXN0WzE1XSwgYWRkcik7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFJldHVybiB0aGUgJ3BlcmlvZCcgdG8gdXNlIGZvciB0aGlzIHFzZXQuICBUaGUgbWluaW11bSBpbnRlcnZhbCBmb3IKKyAqIHRoZSBlbmRwb2ludCBpcyB1c2VkIHNvIHdoYXRldmVyIHVyYnMgYXJlIHN1Ym1pdHRlZCB0aGUgZGV2aWNlIGlzCisgKiBwb2xsZWQgb2Z0ZW4gZW5vdWdoLgorICovCitzdGF0aWMgaW50IHFzZXRfZ2V0X3BlcmlvZChzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKK3sKKwl1aW50OF90IGJJbnRlcnZhbCA9IHFzZXQtPmVwLT5kZXNjLmJJbnRlcnZhbDsKKworCWlmIChiSW50ZXJ2YWwgPCA2KQorCQliSW50ZXJ2YWwgPSA2OworCWlmIChiSW50ZXJ2YWwgPiAxMCkKKwkJYkludGVydmFsID0gMTA7CisJcmV0dXJuIGJJbnRlcnZhbCAtIDY7Cit9CisKK3N0YXRpYyB2b2lkIHFzZXRfaW5zZXJ0X2luX3N3X2xpc3Qoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCit7CisJaW50IHBlcmlvZDsKKworCXBlcmlvZCA9IHFzZXRfZ2V0X3BlcmlvZCh3aGMsIHFzZXQpOworCisJcXNldF9jbGVhcih3aGMsIHFzZXQpOworCWxpc3RfbW92ZSgmcXNldC0+bGlzdF9ub2RlLCAmd2hjLT5wZXJpb2RpY19saXN0W3BlcmlvZF0pOworCXFzZXQtPmluX3N3X2xpc3QgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBwemxfcXNldF9yZW1vdmUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCit7CisJbGlzdF9tb3ZlKCZxc2V0LT5saXN0X25vZGUsICZ3aGMtPnBlcmlvZGljX3JlbW92ZWRfbGlzdCk7CisJcXNldC0+aW5faHdfbGlzdCA9IGZhbHNlOworCXFzZXQtPmluX3N3X2xpc3QgPSBmYWxzZTsKK30KKworLyoqCisgKiBwemxfcHJvY2Vzc19xc2V0IC0gcHJvY2VzcyBhbnkgcmVjZW50bHkgaW5hY3RpdmF0ZWQgb3IgaGFsdGVkIHFURHMKKyAqIGluIGEgcXNldC4KKyAqCisgKiBBZnRlciBpbmFjdGl2ZSBxVERzIGFyZSByZW1vdmVkLCBuZXcgcVREcyBjYW4gYmUgYWRkZWQgaWYgdGhlCisgKiB1cmIgcXVldWUgc3RpbGwgY29udGFpbnMgVVJCcy4KKyAqCisgKiBSZXR1cm5zIHRoZSBzY2hlZHVsZSB1cGRhdGVzIHJlcXVpcmVkLgorICovCitzdGF0aWMgZW51bSB3aGNfdXBkYXRlIHB6bF9wcm9jZXNzX3FzZXQoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCit7CisJZW51bSB3aGNfdXBkYXRlIHVwZGF0ZSA9IDA7CisJdWludDMyX3Qgc3RhdHVzID0gMDsKKworCXdoaWxlIChxc2V0LT5udGRzKSB7CisJCXN0cnVjdCB3aGNfcXRkICp0ZDsKKwkJaW50IHQ7CisKKwkJdCA9IHFzZXQtPnRkX3N0YXJ0OworCQl0ZCA9ICZxc2V0LT5xdGRbcXNldC0+dGRfc3RhcnRdOworCQlzdGF0dXMgPSBsZTMyX3RvX2NwdSh0ZC0+c3RhdHVzKTsKKworCQkvKgorCQkgKiBOb3RoaW5nIHRvIGRvIHdpdGggYSBzdGlsbCBhY3RpdmUgcVRELgorCQkgKi8KKwkJaWYgKHN0YXR1cyAmIFFURF9TVFNfQUNUSVZFKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0YXR1cyAmIFFURF9TVFNfSEFMVEVEKSB7CisJCQkvKiBVZywgYW4gZXJyb3IuICovCisJCQlwcm9jZXNzX2hhbHRlZF9xdGQod2hjLCBxc2V0LCB0ZCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBNbW0sIGEgY29tcGxldGVkIHFURC4gKi8KKwkJcHJvY2Vzc19pbmFjdGl2ZV9xdGQod2hjLCBxc2V0LCB0ZCk7CisJfQorCisJdXBkYXRlIHw9IHFzZXRfYWRkX3F0ZHMod2hjLCBxc2V0KTsKKworZG9uZToKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBxVERzIGluIHRoaXMgcXNldCwgcmVtb3ZlIGl0IGZyb20gdGhlIFBaTC4KKwkgKi8KKwlpZiAocXNldC0+cmVtb3ZlICYmIHFzZXQtPm50ZHMgPT0gMCkgeworCQlwemxfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJdXBkYXRlIHw9IFdIQ19VUERBVEVfUkVNT1ZFRDsKKwl9CisKKwlyZXR1cm4gdXBkYXRlOworfQorCisvKioKKyAqIHB6bF9zdGFydCAtIHN0YXJ0IHRoZSBwZXJpb2RpYyBzY2hlZHVsZQorICogQHdoYzogdGhlIFdIQ0kgaG9zdCBjb250cm9sbGVyCisgKgorICogVGhlIFBaTCBtdXN0IGJlIHZhbGlkIChlLmcuLCBhbGwgZW50cmllcyBpbiB0aGUgbGlzdCBzaG91bGQgaGF2ZQorICogdGhlIFQgYml0IHNldCkuCisgKi8KK3ZvaWQgcHpsX3N0YXJ0KHN0cnVjdCB3aGMgKndoYykKK3sKKwlsZV93cml0ZXEod2hjLT5wel9saXN0X2RtYSwgd2hjLT5iYXNlICsgV1VTQlBFUklPRElDTElTVEJBU0UpOworCisJd2hjX3dyaXRlX3d1c2JjbWQod2hjLCBXVVNCQ01EX1BFUklPRElDX0VOLCBXVVNCQ01EX1BFUklPRElDX0VOKTsKKwl3aGNpX3dhaXRfZm9yKCZ3aGMtPnVtYy0+ZGV2LCB3aGMtPmJhc2UgKyBXVVNCU1RTLAorCQkgICAgICBXVVNCU1RTX1BFUklPRElDX1NDSEVELCBXVVNCU1RTX1BFUklPRElDX1NDSEVELAorCQkgICAgICAxMDAwLCAic3RhcnQgUFpMIik7Cit9CisKKy8qKgorICogcHpsX3N0b3AgLSBzdG9wIHRoZSBwZXJpb2RpYyBzY2hlZHVsZQorICogQHdoYzogdGhlIFdIQ0kgaG9zdCBjb250cm9sbGVyCisgKi8KK3ZvaWQgcHpsX3N0b3Aoc3RydWN0IHdoYyAqd2hjKQoreworCXdoY193cml0ZV93dXNiY21kKHdoYywgV1VTQkNNRF9QRVJJT0RJQ19FTiwgMCk7CisJd2hjaV93YWl0X2Zvcigmd2hjLT51bWMtPmRldiwgd2hjLT5iYXNlICsgV1VTQlNUUywKKwkJICAgICAgV1VTQlNUU19QRVJJT0RJQ19TQ0hFRCwgMCwKKwkJICAgICAgMTAwMCwgInN0b3AgUFpMIik7Cit9CisKK3ZvaWQgcHpsX3VwZGF0ZShzdHJ1Y3Qgd2hjICp3aGMsIHVpbnQzMl90IHd1c2JjbWQpCit7CisJd2hjX3dyaXRlX3d1c2JjbWQod2hjLCB3dXNiY21kLCB3dXNiY21kKTsKKwl3YWl0X2V2ZW50KHdoYy0+cGVyaW9kaWNfbGlzdF93cSwKKwkJICAgKGxlX3JlYWRsKHdoYy0+YmFzZSArIFdVU0JDTUQpICYgV1VTQkNNRF9QRVJJT0RJQ19VUERBVEVEKSA9PSAwKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3B6bF9od192aWV3KHN0cnVjdCB3aGMgKndoYykKK3sKKwlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQsICp0OworCWludCBwZXJpb2Q7CisJdTY0IHRtcF9xaCA9IDA7CisKKwlmb3IgKHBlcmlvZCA9IDA7IHBlcmlvZCA8IDU7IHBlcmlvZCsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxc2V0LCB0LCAmd2hjLT5wZXJpb2RpY19saXN0W3BlcmlvZF0sIGxpc3Rfbm9kZSkgeworCQkJd2hjX3FzZXRfc2V0X2xpbmtfcHRyKCZxc2V0LT5xaC5saW5rLCB0bXBfcWgpOworCQkJdG1wX3FoID0gcXNldC0+cXNldF9kbWE7CisJCQlxc2V0LT5pbl9od19saXN0ID0gdHJ1ZTsKKwkJfQorCQl1cGRhdGVfcHpsX3BvaW50ZXJzKHdoYywgcGVyaW9kLCB0bXBfcWgpOworCX0KK30KKworLyoqCisgKiBzY2FuX3BlcmlvZGljX3dvcmsgLSBzY2FuIHRoZSBQWkwgZm9yIHFzZXRzIHRvIHByb2Nlc3MuCisgKgorICogUHJvY2VzcyBlYWNoIHFzZXQgaW4gdGhlIFBaTCBpbiB0dXJuIGFuZCB0aGVuIHNpZ25hbCB0aGUgV0hDIHRoYXQKKyAqIHRoZSBQWkwgaGFzIGJlZW4gdXBkYXRlZC4KKyAqCisgKiBUaGVuIHN0YXJ0LCBzdG9wIG9yIHVwZGF0ZSB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgYXMgcmVxdWlyZWQuCisgKi8KK3ZvaWQgc2Nhbl9wZXJpb2RpY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2hjICp3aGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdoYywgcGVyaW9kaWNfd29yayk7CisJc3RydWN0IHdoY19xc2V0ICpxc2V0LCAqdDsKKwllbnVtIHdoY191cGRhdGUgdXBkYXRlID0gMDsKKwlpbnQgcGVyaW9kOworCisJc3Bpbl9sb2NrX2lycSgmd2hjLT5sb2NrKTsKKworCWR1bXBfcHpsKHdoYywgImJlZm9yZSBwcm9jZXNzaW5nIik7CisKKwlmb3IgKHBlcmlvZCA9IDQ7IHBlcmlvZCA+PSAwOyBwZXJpb2QtLSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocXNldCwgdCwgJndoYy0+cGVyaW9kaWNfbGlzdFtwZXJpb2RdLCBsaXN0X25vZGUpIHsKKwkJCWlmICghcXNldC0+aW5faHdfbGlzdCkKKwkJCQl1cGRhdGUgfD0gV0hDX1VQREFURV9BRERFRDsKKwkJCXVwZGF0ZSB8PSBwemxfcHJvY2Vzc19xc2V0KHdoYywgcXNldCk7CisJCX0KKwl9CisKKwlpZiAodXBkYXRlICYgKFdIQ19VUERBVEVfQURERUQgfCBXSENfVVBEQVRFX1JFTU9WRUQpKQorCQl1cGRhdGVfcHpsX2h3X3ZpZXcod2hjKTsKKworCWR1bXBfcHpsKHdoYywgImFmdGVyIHByb2Nlc3NpbmciKTsKKworCXNwaW5fdW5sb2NrX2lycSgmd2hjLT5sb2NrKTsKKworCWlmICh1cGRhdGUpIHsKKwkJdWludDMyX3Qgd3VzYmNtZCA9IFdVU0JDTURfUEVSSU9ESUNfVVBEQVRFRCB8IFdVU0JDTURfUEVSSU9ESUNfU1lOQ0VEX0RCOworCQlpZiAodXBkYXRlICYgV0hDX1VQREFURV9SRU1PVkVEKQorCQkJd3VzYmNtZCB8PSBXVVNCQ01EX1BFUklPRElDX1FTRVRfUk07CisJCXB6bF91cGRhdGUod2hjLCB3dXNiY21kKTsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHRoZSBQWkwgaXMgdXBkYXRlZCwgY29tcGxldGUgdGhlIHJlbW92YWwgb2YgYW55CisJICogcmVtb3ZlZCBxc2V0cy4KKwkgKi8KKwlzcGluX2xvY2soJndoYy0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocXNldCwgdCwgJndoYy0+cGVyaW9kaWNfcmVtb3ZlZF9saXN0LCBsaXN0X25vZGUpIHsKKwkJcXNldF9yZW1vdmVfY29tcGxldGUod2hjLCBxc2V0KTsKKwl9CisKKwlzcGluX3VubG9jaygmd2hjLT5sb2NrKTsKK30KKworLyoqCisgKiBwemxfdXJiX2VucXVldWUgLSBxdWV1ZSBhbiBVUkIgb250byB0aGUgcGVyaW9kaWMgbGlzdCAoUFpMKQorICogQHdoYzogdGhlIFdIQ0kgaG9zdCBjb250cm9sbGVyCisgKiBAdXJiOiB0aGUgVVJCIHRvIGVucXVldWUKKyAqIEBtZW1fZmxhZ3M6IGZsYWdzIGZvciBhbnkgbWVtb3J5IGFsbG9jYXRpb25zCisgKgorICogVGhlIHFzZXQgZm9yIHRoZSBlbmRwb2ludCBpcyBvYnRhaW5lZCBhbmQgdGhlIHVyYiBxdWV1ZWQgb24gdG8gaXQuCisgKgorICogV29yayBpcyBzY2hlZHVsZWQgdG8gdXBkYXRlIHRoZSBoYXJkd2FyZSdzIHZpZXcgb2YgdGhlIFBaTC4KKyAqLworaW50IHB6bF91cmJfZW5xdWV1ZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCB3aGNfcXNldCAqcXNldDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2hjLT5sb2NrLCBmbGFncyk7CisKKwlxc2V0ID0gZ2V0X3FzZXQod2hjLCB1cmIsIEdGUF9BVE9NSUMpOworCWlmIChxc2V0ID09IE5VTEwpCisJCWVyciA9IC1FTk9NRU07CisJZWxzZQorCQllcnIgPSBxc2V0X2FkZF91cmIod2hjLCBxc2V0LCB1cmIsIEdGUF9BVE9NSUMpOworCWlmICghZXJyKSB7CisJCXVzYl9oY2RfbGlua191cmJfdG9fZXAoJndoYy0+d3VzYmhjLnVzYl9oY2QsIHVyYik7CisJCWlmICghcXNldC0+aW5fc3dfbGlzdCkKKwkJCXFzZXRfaW5zZXJ0X2luX3N3X2xpc3Qod2hjLCBxc2V0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKKworCWlmICghZXJyKQorCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd2hjLT5wZXJpb2RpY193b3JrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHB6bF91cmJfZGVxdWV1ZSAtIHJlbW92ZSBhbiBVUkIgKHFzZXQpIGZyb20gdGhlIHBlcmlvZGljIGxpc3QKKyAqIEB3aGM6IHRoZSBXSENJIGhvc3QgY29udHJvbGxlcgorICogQHVyYjogdGhlIFVSQiB0byBkZXF1ZXVlCisgKiBAc3RhdHVzOiB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIFVSQgorICoKKyAqIFVSQnMgdGhhdCBkbyB5ZXQgaGF2ZSBxVERzIGNhbiBzaW1wbHkgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzb2Z0d2FyZQorICogcXVldWUsIG90aGVyd2lzZSB0aGUgcXNldCBtdXN0IGJlIHJlbW92ZWQgc28gdGhlIHFURHMgY2FuIGJlIHNhZmVseQorICogcmVtb3ZlZC4KKyAqLworaW50IHB6bF91cmJfZGVxdWV1ZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgd2hjX3VyYiAqd3VyYiA9IHVyYi0+aGNwcml2OworCXN0cnVjdCB3aGNfcXNldCAqcXNldCA9IHd1cmItPnFzZXQ7CisJc3RydWN0IHdoY19zdGQgKnN0ZCwgKnQ7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndoYy0+bG9jaywgZmxhZ3MpOworCisJcmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKCZ3aGMtPnd1c2JoYy51c2JfaGNkLCB1cmIsIHN0YXR1cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0ZCwgdCwgJnFzZXQtPnN0ZHMsIGxpc3Rfbm9kZSkgeworCQlpZiAoc3RkLT51cmIgPT0gdXJiKQorCQkJcXNldF9mcmVlX3N0ZCh3aGMsIHN0ZCk7CisJCWVsc2UKKwkJCXN0ZC0+cXRkID0gTlVMTDsgLyogc28gdGhpcyBzdGQgaXMgcmUtYWRkZWQgd2hlbiB0aGUgcXNldCBpcyAqLworCX0KKworCXB6bF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOworCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKKwl3dXJiLT5pc19hc3luYyA9IGZhbHNlOworCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB6bF9xc2V0X2RlbGV0ZSAtIGRlbGV0ZSBhIHFzZXQgZnJvbSB0aGUgUFpMCisgKi8KK3ZvaWQgcHpsX3FzZXRfZGVsZXRlKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0KQoreworCXFzZXQtPnJlbW92ZSA9IDE7CisJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJndoYy0+cGVyaW9kaWNfd29yayk7CisJcXNldF9kZWxldGUod2hjLCBxc2V0KTsKK30KKworCisvKioKKyAqIHB6bF9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgcGVyaW9kaWMgem9uZSBsaXN0CisgKiBAd2hjOiB0aGUgV0hDSSBob3N0IGNvbnRyb2xsZXIKKyAqLworaW50IHB6bF9pbml0KHN0cnVjdCB3aGMgKndoYykKK3sKKwlpbnQgaTsKKworCXdoYy0+cHpfbGlzdCA9IGRtYV9hbGxvY19jb2hlcmVudCgmd2hjLT51bWMtPmRldiwgc2l6ZW9mKHU2NCkgKiAxNiwKKwkJCQkJICAmd2hjLT5wel9saXN0X2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdoYy0+cHpfbGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFNldCBUIGJpdCBvbiBhbGwgZWxlbWVudHMgaW4gUFpMLiAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQl3aGMtPnB6X2xpc3RbaV0gPSBjcHVfdG9fbGU2NChRSF9MSU5LX05URFMoOCkgfCBRSF9MSU5LX1QpOworCisJbGVfd3JpdGVxKHdoYy0+cHpfbGlzdF9kbWEsIHdoYy0+YmFzZSArIFdVU0JQRVJJT0RJQ0xJU1RCQVNFKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHB6bF9jbGVhbl91cCAtIGZyZWUgUFpMIHJlc291cmNlcworICogQHdoYzogdGhlIFdIQ0kgaG9zdCBjb250cm9sbGVyCisgKgorICogVGhlIFBaTCBpcyBzdG9wcGVkIGFuZCBlbXB0eS4KKyAqLwordm9pZCBwemxfY2xlYW5fdXAoc3RydWN0IHdoYyAqd2hjKQoreworCWlmICh3aGMtPnB6X2xpc3QpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZ3aGMtPnVtYy0+ZGV2LCAgc2l6ZW9mKHU2NCkgKiAxNiwgd2hjLT5wel9saXN0LAorCQkJCSAgd2hjLT5wel9saXN0X2RtYSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIwMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYwpAQCAtMCwwICsxLDU2NyBAQAorLyoKKyAqIFdpcmVsZXNzIEhvc3QgQ29udHJvbGxlciAoV0hDKSBxc2V0IG1hbmFnZW1lbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IvdW1jLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICIuLi8uLi93dXNiY29yZS93dXNiaGMuaCIKKworI2luY2x1ZGUgIndoY2QuaCIKKwordm9pZCBkdW1wX3FzZXQoc3RydWN0IHdoY19xc2V0ICpxc2V0LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdoY19zdGQgKnN0ZDsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCWludCBpOworCisJZGV2X2RiZyhkZXYsICJxc2V0ICUwOHhcbiIsICh1MzIpcXNldC0+cXNldF9kbWEpOworCWRldl9kYmcoZGV2LCAiICAtPiAlMDh4XG4iLCAodTMyKXFzZXQtPnFoLmxpbmspOworCWRldl9kYmcoZGV2LCAiICBpbmZvOiAlMDh4ICUwOHggJTA4eFxuIiwKKwkJcXNldC0+cWguaW5mbzEsIHFzZXQtPnFoLmluZm8yLCAgcXNldC0+cWguaW5mbzMpOworCWRldl9kYmcoZGV2LCAiICBzdHM6ICUwNHggZXJyczogJWRcbiIsIHFzZXQtPnFoLnN0YXR1cywgcXNldC0+cWguZXJyX2NvdW50KTsKKwlkZXZfZGJnKGRldiwgIiAgVEQ6IHN0czogJTA4eCBvcHRzOiAlMDh4XG4iLAorCQlxc2V0LT5xaC5vdmVybGF5LnF0ZC5zdGF0dXMsIHFzZXQtPnFoLm92ZXJsYXkucXRkLm9wdGlvbnMpOworCisJZm9yIChpID0gMDsgaSA8IFdIQ0lfUVNFVF9URF9NQVg7IGkrKykgeworCQlkZXZfZGJnKGRldiwgIiAgJWMlYyBURFslZF06IHN0czogJTA4eCBvcHRzOiAlMDh4IHB0cjogJTA4eFxuIiwKKwkJCWkgPT0gcXNldC0+dGRfc3RhcnQgPyAnUycgOiAnICcsCisJCQlpID09IHFzZXQtPnRkX2VuZCA/ICdFJyA6ICcgJywKKwkJCWksIHFzZXQtPnF0ZFtpXS5zdGF0dXMsIHFzZXQtPnF0ZFtpXS5vcHRpb25zLAorCQkJKHUzMilxc2V0LT5xdGRbaV0ucGFnZV9saXN0X3B0cik7CisJfQorCWRldl9kYmcoZGV2LCAiICBudGRzOiAlZFxuIiwgcXNldC0+bnRkcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGQsICZxc2V0LT5zdGRzLCBsaXN0X25vZGUpIHsKKwkJaWYgKHVyYiAhPSBzdGQtPnVyYikgeworCQkJdXJiID0gc3RkLT51cmI7CisJCQlkZXZfZGJnKGRldiwgIiAgdXJiICVwIHRyYW5zZmVycmVkOiAlZCBieXRlc1xuIiwgdXJiLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCX0KKwkJaWYgKHN0ZC0+cXRkKQorCQkJZGV2X2RiZyhkZXYsICIgICAgc1REWyV0ZF06ICV6dSBieXRlcyBAICUwOHhcbiIsCisJCQkJc3RkLT5xdGQgLSAmcXNldC0+cXRkWzBdLAorCQkJCXN0ZC0+bGVuLCBzdGQtPm51bV9wb2ludGVycyA/CisJCQkJKHUzMikoc3RkLT5wbF92aXJ0WzBdLmJ1Zl9wdHIpIDogKHUzMilzdGQtPmRtYV9hZGRyKTsKKwkJZWxzZQorCQkJZGV2X2RiZyhkZXYsICIgICAgc1REWy1dOiAlemQgYnl0ZXMgQCAlMDh4XG4iLAorCQkJCXN0ZC0+bGVuLCBzdGQtPm51bV9wb2ludGVycyA/CisJCQkJKHUzMikoc3RkLT5wbF92aXJ0WzBdLmJ1Zl9wdHIpIDogKHUzMilzdGQtPmRtYV9hZGRyKTsKKwl9Cit9CisKK3N0cnVjdCB3aGNfcXNldCAqcXNldF9hbGxvYyhzdHJ1Y3Qgd2hjICp3aGMsIGdmcF90IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQ7CisJZG1hX2FkZHJfdCBkbWE7CisKKwlxc2V0ID0gZG1hX3Bvb2xfYWxsb2Mod2hjLT5xc2V0X3Bvb2wsIG1lbV9mbGFncywgJmRtYSk7CisJaWYgKHFzZXQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KHFzZXQsIDAsIHNpemVvZihzdHJ1Y3Qgd2hjX3FzZXQpKTsKKworCXFzZXQtPnFzZXRfZG1hID0gZG1hOworCXFzZXQtPndoYyA9IHdoYzsKKworCUlOSVRfTElTVF9IRUFEKCZxc2V0LT5saXN0X25vZGUpOworCUlOSVRfTElTVF9IRUFEKCZxc2V0LT5zdGRzKTsKKworCXJldHVybiBxc2V0OworfQorCisvKioKKyAqIHFzZXRfZmlsbF9xaCAtIGZpbGwgdGhlIHN0YXRpYyBlbmRwb2ludCBzdGF0ZSBpbiBhIHFzZXQncyBRSGVhZAorICogQHFzZXQ6IHRoZSBxc2V0IHdob3NlIFFIIG5lZWRzIGluaXRpYWxpemluZyB3aXRoIHN0YXRpYyBlbmRwb2ludAorICogICAgICAgIHN0YXRlCisgKiBAdXJiOiAgYW4gdXJiIGZvciBhIHRyYW5zZmVyIHRvIHRoaXMgZW5kcG9pbnQKKyAqLworc3RhdGljIHZvaWQgcXNldF9maWxsX3FoKHN0cnVjdCB3aGNfcXNldCAqcXNldCwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdXJiLT5kZXY7CisJc3RydWN0IHVzYl93aXJlbGVzc19lcF9jb21wX2Rlc2NyaXB0b3IgKmVwY2Q7CisJYm9vbCBpc19vdXQ7CisKKwlpc19vdXQgPSB1c2JfcGlwZW91dCh1cmItPnBpcGUpOworCisJZXBjZCA9IChzdHJ1Y3QgdXNiX3dpcmVsZXNzX2VwX2NvbXBfZGVzY3JpcHRvciAqKXFzZXQtPmVwLT5leHRyYTsKKworCWlmIChlcGNkKSB7CisJCXFzZXQtPm1heF9zZXEgPSBlcGNkLT5iTWF4U2VxdWVuY2U7CisJCXFzZXQtPm1heF9idXJzdCA9IGVwY2QtPmJNYXhCdXJzdDsKKwl9IGVsc2UgeworCQlxc2V0LT5tYXhfc2VxID0gMjsKKwkJcXNldC0+bWF4X2J1cnN0ID0gMTsKKwl9CisKKwlxc2V0LT5xaC5pbmZvMSA9IGNwdV90b19sZTMyKAorCQlRSF9JTkZPMV9FUCh1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSkpCisJCXwgKGlzX291dCA/IFFIX0lORk8xX0RJUl9PVVQgOiBRSF9JTkZPMV9ESVJfSU4pCisJCXwgdXNiX3BpcGVfdG9fcWhfdHlwZSh1cmItPnBpcGUpCisJCXwgUUhfSU5GTzFfREVWX0lORk9fSURYKHd1c2JfcG9ydF9ub190b19pZHgodXNiX2Rldi0+cG9ydG51bSkpCisJCXwgUUhfSU5GTzFfTUFYX1BLVF9MRU4odXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCBpc19vdXQpKQorCQkpOworCXFzZXQtPnFoLmluZm8yID0gY3B1X3RvX2xlMzIoCisJCVFIX0lORk8yX0JVUlNUKHFzZXQtPm1heF9idXJzdCkKKwkJfCBRSF9JTkZPMl9EQlAoMCkKKwkJfCBRSF9JTkZPMl9NQVhfQ09VTlQoMykKKwkJfCBRSF9JTkZPMl9NQVhfUkVUUlkoMykKKwkJfCBRSF9JTkZPMl9NQVhfU0VRKHFzZXQtPm1heF9zZXEgLSAxKQorCQkpOworCS8qIEZJWE1FOiB3aGVyZSBjYW4gd2Ugb2J0YWluIHRoZXNlIFR4IHBhcmFtZXRlcnMgZnJvbT8gIFdoeQorCSAqIGRvZXNuJ3QgdGhlIGNoaXAga25vdyB3aGF0IFR4IHBvd2VyIHRvIHVzZT8gSXQga25vd3MgdGhlIFJ4CisJICogc3RyZW5ndGggYW5kIGNhbiBwcmVzdW1hYmx5IGd1ZXNzIHRoZSBUeCBwb3dlciByZXF1aXJlZAorCSAqIGZyb20gdGhhdD8gKi8KKwlxc2V0LT5xaC5pbmZvMyA9IGNwdV90b19sZTMyKAorCQlRSF9JTkZPM19UWF9SQVRFXzUzXzMKKwkJfCBRSF9JTkZPM19UWF9QV1IoMCkgLyogMCA9PSBtYXggcG93ZXIgKi8KKwkJKTsKK30KKworLyoqCisgKiBxc2V0X2NsZWFyIC0gY2xlYXIgZmllbGRzIGluIGEgcXNldCBzbyBpdCBtYXkgYmUgcmVpbnNlcnRlZCBpbnRvIGEKKyAqIHNjaGVkdWxlCisgKi8KK3ZvaWQgcXNldF9jbGVhcihzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKK3sKKwlxc2V0LT50ZF9zdGFydCA9IHFzZXQtPnRkX2VuZCA9IHFzZXQtPm50ZHMgPSAwOworCXFzZXQtPnJlbW92ZSA9IDA7CisKKwlxc2V0LT5xaC5saW5rID0gY3B1X3RvX2xlMzIoUUhfTElOS19OVERTKDgpIHwgUUhfTElOS19UKTsKKwlxc2V0LT5xaC5zdGF0dXMgPSBjcHVfdG9fbGUxNihRSF9TVEFUVVNfSUNVUihxc2V0LT50ZF9zdGFydCkpOworCXFzZXQtPnFoLmVycl9jb3VudCA9IDA7CisJcXNldC0+cWguY3VyX3dpbmRvdyA9IGNwdV90b19sZTMyKCgxIDw8IHFzZXQtPm1heF9idXJzdCkgLSAxKTsKKwlxc2V0LT5xaC5zY3JhdGNoWzBdID0gMDsKKwlxc2V0LT5xaC5zY3JhdGNoWzFdID0gMDsKKwlxc2V0LT5xaC5zY3JhdGNoWzJdID0gMDsKKworCW1lbXNldCgmcXNldC0+cWgub3ZlcmxheSwgMCwgc2l6ZW9mKHFzZXQtPnFoLm92ZXJsYXkpKTsKKworCWluaXRfY29tcGxldGlvbigmcXNldC0+cmVtb3ZlX2NvbXBsZXRlKTsKK30KKworLyoqCisgKiBnZXRfcXNldCAtIGdldCB0aGUgcXNldCBmb3IgYW4gYXN5bmMgZW5kcG9pbnQKKyAqCisgKiBBIG5ldyBxc2V0IGlzIGNyZWF0ZWQgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgKi8KK3N0cnVjdCB3aGNfcXNldCAqZ2V0X3FzZXQoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJIGdmcF90IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQ7CisKKwlxc2V0ID0gdXJiLT5lcC0+aGNwcml2OworCWlmIChxc2V0ID09IE5VTEwpIHsKKwkJcXNldCA9IHFzZXRfYWxsb2Mod2hjLCBtZW1fZmxhZ3MpOworCQlpZiAocXNldCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJcXNldC0+ZXAgPSB1cmItPmVwOworCQl1cmItPmVwLT5oY3ByaXYgPSBxc2V0OworCQlxc2V0X2ZpbGxfcWgocXNldCwgdXJiKTsKKwl9CisJcmV0dXJuIHFzZXQ7Cit9CisKK3ZvaWQgcXNldF9yZW1vdmVfY29tcGxldGUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCit7CisJbGlzdF9kZWxfaW5pdCgmcXNldC0+bGlzdF9ub2RlKTsKKwljb21wbGV0ZSgmcXNldC0+cmVtb3ZlX2NvbXBsZXRlKTsKK30KKworLyoqCisgKiBxc2V0X2FkZF9xdGRzIC0gYWRkIHFURHMgZm9yIGFuIFVSQiB0byBhIHFzZXQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGxpc3QgKEFTTC9QWkwpIG11c3QgYmUgdXBkYXRlZCBiZWNhdXNlIChmb3IgYQorICogV0hDSSAwLjk1IGNvbnRyb2xsZXIpIGFuIGFjdGl2YXRlZCBxVEQgd2FzIHBvaW50ZWQgdG8gYmUgaUN1ci4KKyAqLworZW51bSB3aGNfdXBkYXRlIHFzZXRfYWRkX3F0ZHMoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCit7CisJc3RydWN0IHdoY19zdGQgKnN0ZDsKKwllbnVtIHdoY191cGRhdGUgdXBkYXRlID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RkLCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7CisJCXN0cnVjdCB3aGNfcXRkICpxdGQ7CisJCXVpbnQzMl90IHN0YXR1czsKKworCQlpZiAocXNldC0+bnRkcyA+PSBXSENJX1FTRVRfVERfTUFYCisJCSAgICB8fCAocXNldC0+cGF1c2VfYWZ0ZXJfdXJiICYmIHN0ZC0+dXJiICE9IHFzZXQtPnBhdXNlX2FmdGVyX3VyYikpCisJCQlicmVhazsKKworCQlpZiAoc3RkLT5xdGQpCisJCQljb250aW51ZTsgLyogYWxyZWFkeSBoYXMgYSBxVEQgKi8KKworCQlxdGQgPSBzdGQtPnF0ZCA9ICZxc2V0LT5xdGRbcXNldC0+dGRfZW5kXTsKKworCQkvKiBGaWxsIGluIHNldHVwIGJ5dGVzIGZvciBjb250cm9sIHRyYW5zZmVycy4gKi8KKwkJaWYgKHVzYl9waXBlY29udHJvbChzdGQtPnVyYi0+cGlwZSkpCisJCQltZW1jcHkocXRkLT5zZXR1cCwgc3RkLT51cmItPnNldHVwX3BhY2tldCwgOCk7CisKKwkJc3RhdHVzID0gUVREX1NUU19BQ1RJVkUgfCBRVERfU1RTX0xFTihzdGQtPmxlbik7CisKKwkJaWYgKHdoY19zdGRfbGFzdChzdGQpICYmIHVzYl9waXBlb3V0KHN0ZC0+dXJiLT5waXBlKSkKKwkJCXN0YXR1cyB8PSBRVERfU1RTX0xBU1RfUEtUOworCisJCS8qCisJCSAqIEZvciBhbiBJTiB0cmFuc2ZlciB0aGUgaUFsdCBmaWVsZCBzaG91bGQgYmUgc2V0IHNvCisJCSAqIHRoZSBoL3cgd2lsbCBhdXRvbWF0aWNhbGx5IGFkdmFuY2UgdG8gdGhlIG5leHQKKwkJICogdHJhbnNmZXIuIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSA4IG9yIG1vcmUgVERzCisJCSAqIHJlbWFpbmluZyBpbiB0aGlzIHRyYW5zZmVyIHRoZW4gaUFsdCBjYW5ub3QgYmUgc2V0CisJCSAqIGFzIGl0IGNvdWxkIHBvaW50IHRvIHNvbWV3aGVyZSBpbiB0aGlzIHRyYW5zZmVyLgorCQkgKi8KKwkJaWYgKHN0ZC0+bnRkc19yZW1haW5pbmcgPCBXSENJX1FTRVRfVERfTUFYKSB7CisJCQlpbnQgaWFsdDsKKwkJCWlhbHQgPSAocXNldC0+dGRfZW5kICsgc3RkLT5udGRzX3JlbWFpbmluZykgJSBXSENJX1FTRVRfVERfTUFYOworCQkJc3RhdHVzIHw9IFFURF9TVFNfSUFMVChpYWx0KTsKKwkJfSBlbHNlIGlmICh1c2JfcGlwZWluKHN0ZC0+dXJiLT5waXBlKSkKKwkJCXFzZXQtPnBhdXNlX2FmdGVyX3VyYiA9IHN0ZC0+dXJiOworCisJCWlmIChzdGQtPm51bV9wb2ludGVycykKKwkJCXF0ZC0+b3B0aW9ucyA9IGNwdV90b19sZTMyKFFURF9PUFRfSU9DKTsKKwkJZWxzZQorCQkJcXRkLT5vcHRpb25zID0gY3B1X3RvX2xlMzIoUVREX09QVF9JT0MgfCBRVERfT1BUX1NNQUxMKTsKKwkJcXRkLT5wYWdlX2xpc3RfcHRyID0gY3B1X3RvX2xlNjQoc3RkLT5kbWFfYWRkcik7CisKKwkJcXRkLT5zdGF0dXMgPSBjcHVfdG9fbGUzMihzdGF0dXMpOworCisJCWlmIChRSF9TVEFUVVNfVE9fSUNVUihxc2V0LT5xaC5zdGF0dXMpID09IHFzZXQtPnRkX2VuZCkKKwkJCXVwZGF0ZSA9IFdIQ19VUERBVEVfVVBEQVRFRDsKKworCQlpZiAoKytxc2V0LT50ZF9lbmQgPj0gV0hDSV9RU0VUX1REX01BWCkKKwkJCXFzZXQtPnRkX2VuZCA9IDA7CisJCXFzZXQtPm50ZHMrKzsKKwl9CisKKwlyZXR1cm4gdXBkYXRlOworfQorCisvKioKKyAqIHFzZXRfcmVtb3ZlX3F0ZCAtIHJlbW92ZSB0aGUgZmlyc3QgcVREIGZyb20gYSBxc2V0LgorICoKKyAqIFRoZSBxVEQgbWlnaHQgYmUgc3RpbGwgYWN0aXZlIChpZiBpdCdzIHBhcnQgb2YgYSBJTiBVUkIgdGhhdAorICogcmVzdWx0ZWQgaW4gYSBzaG9ydCByZWFkKSBzbyBlbnN1cmUgaXQncyBkZWFjdGl2YXRlZC4KKyAqLworc3RhdGljIHZvaWQgcXNldF9yZW1vdmVfcXRkKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0KQoreworCXFzZXQtPnF0ZFtxc2V0LT50ZF9zdGFydF0uc3RhdHVzID0gMDsKKworCWlmICgrK3FzZXQtPnRkX3N0YXJ0ID49IFdIQ0lfUVNFVF9URF9NQVgpCisJCXFzZXQtPnRkX3N0YXJ0ID0gMDsKKwlxc2V0LT5udGRzLS07Cit9CisKKy8qKgorICogcXNldF9mcmVlX3N0ZCAtIHJlbW92ZSBhbiBzVEQgYW5kIGZyZWUgaXQuCisgKiBAd2hjOiB0aGUgV0hDSSBob3N0IGNvbnRyb2xsZXIKKyAqIEBzdGQ6IHRoZSBzVEQgdG8gcmVtb3ZlIGFuZCBmcmVlLgorICovCit2b2lkIHFzZXRfZnJlZV9zdGQoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3N0ZCAqc3RkKQoreworCWxpc3RfZGVsKCZzdGQtPmxpc3Rfbm9kZSk7CisJaWYgKHN0ZC0+bnVtX3BvaW50ZXJzKSB7CisJCWRtYV91bm1hcF9zaW5nbGUod2hjLT53dXNiaGMuZGV2LCBzdGQtPmRtYV9hZGRyLAorCQkJCSBzdGQtPm51bV9wb2ludGVycyAqIHNpemVvZihzdHJ1Y3Qgd2hjX3BhZ2VfbGlzdF9lbnRyeSksCisJCQkJIERNQV9UT19ERVZJQ0UpOworCQlrZnJlZShzdGQtPnBsX3ZpcnQpOworCX0KKworCWtmcmVlKHN0ZCk7Cit9CisKKy8qKgorICogcXNldF9yZW1vdmVfcXRkcyAtIHJlbW92ZSBhbiBVUkIncyBxVERzIChhbmQgc1REcykuCisgKi8KK3N0YXRpYyB2b2lkIHFzZXRfcmVtb3ZlX3F0ZHMoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQsCisJCQkgICAgIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGQsIHQsICZxc2V0LT5zdGRzLCBsaXN0X25vZGUpIHsKKwkJaWYgKHN0ZC0+dXJiICE9IHVyYikKKwkJCWJyZWFrOworCQlpZiAoc3RkLT5xdGQgIT0gTlVMTCkKKwkJCXFzZXRfcmVtb3ZlX3F0ZCh3aGMsIHFzZXQpOworCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKKwl9Cit9CisKKy8qKgorICogcXNldF9mcmVlX3N0ZHMgLSBmcmVlIGFueSByZW1haW5pbmcgc1REcyBmb3IgYW4gVVJCLgorICovCitzdGF0aWMgdm9pZCBxc2V0X2ZyZWVfc3RkcyhzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGQsIHQsICZxc2V0LT5zdGRzLCBsaXN0X25vZGUpIHsKKwkJaWYgKHN0ZC0+dXJiID09IHVyYikKKwkJCXFzZXRfZnJlZV9zdGQocXNldC0+d2hjLCBzdGQpOworCX0KK30KKworc3RhdGljIGludCBxc2V0X2ZpbGxfcGFnZV9saXN0KHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19zdGQgKnN0ZCwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCWRtYV9hZGRyX3QgZG1hX2FkZHIgPSBzdGQtPmRtYV9hZGRyOworCWRtYV9hZGRyX3Qgc3AsIGVwOworCXNpemVfdCBzdGRfbGVuID0gc3RkLT5sZW47CisJc2l6ZV90IHBsX2xlbjsKKwlpbnQgcDsKKworCXNwID0gQUxJR04oZG1hX2FkZHIsIFdIQ0lfUEFHRV9TSVpFKTsKKwllcCA9IGRtYV9hZGRyICsgc3RkX2xlbjsKKwlzdGQtPm51bV9wb2ludGVycyA9IERJVl9ST1VORF9VUChlcCAtIHNwLCBXSENJX1BBR0VfU0laRSk7CisKKwlwbF9sZW4gPSBzdGQtPm51bV9wb2ludGVycyAqIHNpemVvZihzdHJ1Y3Qgd2hjX3BhZ2VfbGlzdF9lbnRyeSk7CisJc3RkLT5wbF92aXJ0ID0ga21hbGxvYyhwbF9sZW4sIG1lbV9mbGFncyk7CisJaWYgKHN0ZC0+cGxfdmlydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzdGQtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUod2hjLT53dXNiaGMuZGV2LCBzdGQtPnBsX3ZpcnQsIHBsX2xlbiwgRE1BX1RPX0RFVklDRSk7CisKKwlmb3IgKHAgPSAwOyBwIDwgc3RkLT5udW1fcG9pbnRlcnM7IHArKykgeworCQlzdGQtPnBsX3ZpcnRbcF0uYnVmX3B0ciA9IGNwdV90b19sZTY0KGRtYV9hZGRyKTsKKwkJZG1hX2FkZHIgPSBBTElHTihkbWFfYWRkciArIFdIQ0lfUEFHRV9TSVpFLCBXSENJX1BBR0VfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXJiX2RlcXVldWVfd29yayAtIGV4ZWN1dGVzIGFzbC9wemwgdXBkYXRlIGFuZCBnaXZlcyBiYWNrIHRoZSB1cmIgdG8gdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIHZvaWQgdXJiX2RlcXVldWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdoY191cmIgKnd1cmIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdoY191cmIsIGRlcXVldWVfd29yayk7CisJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKKwlzdHJ1Y3Qgd2hjICp3aGMgPSBxc2V0LT53aGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh3dXJiLT5pc19hc3luYyA9PSB0cnVlKQorCQlhc2xfdXBkYXRlKHdoYywgV1VTQkNNRF9BU1lOQ19VUERBVEVECisJCQkgICB8IFdVU0JDTURfQVNZTkNfU1lOQ0VEX0RCCisJCQkgICB8IFdVU0JDTURfQVNZTkNfUVNFVF9STSk7CisJZWxzZQorCQlwemxfdXBkYXRlKHdoYywgV1VTQkNNRF9QRVJJT0RJQ19VUERBVEVECisJCQkgICB8IFdVU0JDTURfUEVSSU9ESUNfU1lOQ0VEX0RCCisJCQkgICB8IFdVU0JDTURfUEVSSU9ESUNfUVNFVF9STSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2hjLT5sb2NrLCBmbGFncyk7CisJcXNldF9yZW1vdmVfdXJiKHdoYywgcXNldCwgd3VyYi0+dXJiLCB3dXJiLT5zdGF0dXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHFzZXRfYWRkX3VyYiAtIGFkZCBhbiB1cmIgdG8gdGhlIHFzZXQncyBxdWV1ZS4KKyAqCisgKiBUaGUgVVJCIGlzIGNob3BwZWQgaW50byBzVERzLCBvbmUgZm9yIGVhY2ggcVREIHRoYXQgd2lsbCByZXF1aXJlZC4KKyAqIEF0IGxlYXN0IG9uZSBxVEQgKGFuZCBzVEQpIGlzIHJlcXVpcmVkIGV2ZW4gaWYgdGhlIHRyYW5zZmVyIGhhcyBubworICogZGF0YSAoZS5nLiwgZm9yIHNvbWUgY29udHJvbCB0cmFuc2ZlcnMpLgorICovCitpbnQgcXNldF9hZGRfdXJiKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0LCBzdHJ1Y3QgdXJiICp1cmIsCisJZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCB3aGNfdXJiICp3dXJiOworCWludCByZW1haW5pbmcgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJdTY0IHRyYW5zZmVyX2RtYSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCWludCBudGRzX3JlbWFpbmluZzsKKworCW50ZHNfcmVtYWluaW5nID0gRElWX1JPVU5EX1VQKHJlbWFpbmluZywgUVREX01BWF9YRkVSX1NJWkUpOworCWlmIChudGRzX3JlbWFpbmluZyA9PSAwKQorCQludGRzX3JlbWFpbmluZyA9IDE7CisKKwl3dXJiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdoY191cmIpLCBtZW1fZmxhZ3MpOworCWlmICh3dXJiID09IE5VTEwpCisJCWdvdG8gZXJyX25vX21lbTsKKwl1cmItPmhjcHJpdiA9IHd1cmI7CisJd3VyYi0+cXNldCA9IHFzZXQ7CisJd3VyYi0+dXJiID0gdXJiOworCUlOSVRfV09SSygmd3VyYi0+ZGVxdWV1ZV93b3JrLCB1cmJfZGVxdWV1ZV93b3JrKTsKKworCXdoaWxlIChudGRzX3JlbWFpbmluZykgeworCQlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkOworCQlzaXplX3Qgc3RkX2xlbjsKKworCQlzdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2hjX3N0ZCksIG1lbV9mbGFncyk7CisJCWlmIChzdGQgPT0gTlVMTCkKKwkJCWdvdG8gZXJyX25vX21lbTsKKworCQlzdGRfbGVuID0gcmVtYWluaW5nOworCQlpZiAoc3RkX2xlbiA+IFFURF9NQVhfWEZFUl9TSVpFKQorCQkJc3RkX2xlbiA9IFFURF9NQVhfWEZFUl9TSVpFOworCisJCXN0ZC0+dXJiID0gdXJiOworCQlzdGQtPmRtYV9hZGRyID0gdHJhbnNmZXJfZG1hOworCQlzdGQtPmxlbiA9IHN0ZF9sZW47CisJCXN0ZC0+bnRkc19yZW1haW5pbmcgPSBudGRzX3JlbWFpbmluZzsKKwkJc3RkLT5xdGQgPSBOVUxMOworCisJCUlOSVRfTElTVF9IRUFEKCZzdGQtPmxpc3Rfbm9kZSk7CisJCWxpc3RfYWRkX3RhaWwoJnN0ZC0+bGlzdF9ub2RlLCAmcXNldC0+c3Rkcyk7CisKKwkJaWYgKHN0ZF9sZW4gPiBXSENJX1BBR0VfU0laRSkgeworCQkJaWYgKHFzZXRfZmlsbF9wYWdlX2xpc3Qod2hjLCBzdGQsIG1lbV9mbGFncykgPCAwKQorCQkJCWdvdG8gZXJyX25vX21lbTsKKwkJfSBlbHNlCisJCQlzdGQtPm51bV9wb2ludGVycyA9IDA7CisKKwkJbnRkc19yZW1haW5pbmctLTsKKwkJcmVtYWluaW5nIC09IHN0ZF9sZW47CisJCXRyYW5zZmVyX2RtYSArPSBzdGRfbGVuOworCX0KKworCXJldHVybiAwOworCitlcnJfbm9fbWVtOgorCXFzZXRfZnJlZV9zdGRzKHFzZXQsIHVyYik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogcXNldF9yZW1vdmVfdXJiIC0gcmVtb3ZlIGFuIFVSQiBmcm9tIHRoZSB1cmIgcXVldWUuCisgKgorICogVGhlIFVSQiBpcyByZXR1cm5lZCB0byB0aGUgVVNCIHN1YnN5c3RlbS4KKyAqLwordm9pZCBxc2V0X3JlbW92ZV91cmIoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQsCisJCQkgICAgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9ICZ3aGMtPnd1c2JoYzsKKwlzdHJ1Y3Qgd2hjX3VyYiAqd3VyYiA9IHVyYi0+aGNwcml2OworCisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoJnd1c2JoYy0+dXNiX2hjZCwgdXJiKTsKKwkvKiBEcm9wIHRoZSBsb2NrIGFzIHVyYi0+Y29tcGxldGUoKSBtYXkgZW5xdWV1ZSBhbm90aGVyIHVyYi4gKi8KKwlzcGluX3VubG9jaygmd2hjLT5sb2NrKTsKKwl3dXNiaGNfZ2l2ZWJhY2tfdXJiKHd1c2JoYywgdXJiLCBzdGF0dXMpOworCXNwaW5fbG9jaygmd2hjLT5sb2NrKTsKKworCWtmcmVlKHd1cmIpOworfQorCisvKioKKyAqIGdldF91cmJfc3RhdHVzX2Zyb21fcXRkIC0gZ2V0IHRoZSBjb21wbGV0ZWQgdXJiIHN0YXR1cyBmcm9tIHFURCBzdGF0dXMKKyAqIEB1cmI6ICAgIGNvbXBsZXRlZCB1cmIKKyAqIEBzdGF0dXM6IHFURCBzdGF0dXMKKyAqLworc3RhdGljIGludCBnZXRfdXJiX3N0YXR1c19mcm9tX3F0ZChzdHJ1Y3QgdXJiICp1cmIsIHUzMiBzdGF0dXMpCit7CisJaWYgKHN0YXR1cyAmIFFURF9TVFNfSEFMVEVEKSB7CisJCWlmIChzdGF0dXMgJiBRVERfU1RTX0RCRSkKKwkJCXJldHVybiB1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAtRU5PU1IgOiAtRUNPTU07CisJCWVsc2UgaWYgKHN0YXR1cyAmIFFURF9TVFNfQkFCQkxFKQorCQkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJCWVsc2UgaWYgKHN0YXR1cyAmIFFURF9TVFNfUkNFKQorCQkJcmV0dXJuIC1FVElNRTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKQorCSAgICAmJiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJICAgICYmIHVyYi0+YWN0dWFsX2xlbmd0aCA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHJvY2Vzc19pbmFjdGl2ZV9xdGQgLSBwcm9jZXNzIGFuIGluYWN0aXZlIChidXQgbm90IGhhbHRlZCkgcVRELgorICoKKyAqIFVwZGF0ZSB0aGUgdXJiIHdpdGggdGhlIHRyYW5zZmVyIGJ5dGVzIGZyb20gdGhlIHFURCwgaWYgdGhlIHVyYiBpcworICogY29tcGxldGVseSB0cmFuc2ZlcmVkIG9yIChpbiB0aGUgY2FzZSBvZiBhbiBJTiBvbmx5KSB0aGUgTFBGIGlzCisgKiBzZXQsIHRoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlIGFuZCB0aGUgdXJiIHNob3VsZCBiZSByZXR1cm5lZAorICogdG8gdGhlIHN5c3RlbS4KKyAqLwordm9pZCBwcm9jZXNzX2luYWN0aXZlX3F0ZChzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCwKKwkJCQkgc3RydWN0IHdoY19xdGQgKnF0ZCkKK3sKKwlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkID0gbGlzdF9maXJzdF9lbnRyeSgmcXNldC0+c3Rkcywgc3RydWN0IHdoY19zdGQsIGxpc3Rfbm9kZSk7CisJc3RydWN0IHVyYiAqdXJiID0gc3RkLT51cmI7CisJdWludDMyX3Qgc3RhdHVzOworCWJvb2wgY29tcGxldGU7CisKKwlzdGF0dXMgPSBsZTMyX3RvX2NwdShxdGQtPnN0YXR1cyk7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggKz0gc3RkLT5sZW4gLSBRVERfU1RTX1RPX0xFTihzdGF0dXMpOworCisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJiAoc3RhdHVzICYgUVREX1NUU19MQVNUX1BLVCkpCisJCWNvbXBsZXRlID0gdHJ1ZTsKKwllbHNlCisJCWNvbXBsZXRlID0gd2hjX3N0ZF9sYXN0KHN0ZCk7CisKKwlxc2V0X3JlbW92ZV9xdGQod2hjLCBxc2V0KTsKKwlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKKworCS8qCisJICogVHJhbnNmZXJzIGZvciB0aGlzIFVSQiBhcmUgY29tcGxldGU/ICBUaGVuIHJldHVybiBpdCB0byB0aGUKKwkgKiBVU0Igc3Vic3lzdGVtLgorCSAqLworCWlmIChjb21wbGV0ZSkgeworCQlxc2V0X3JlbW92ZV9xdGRzKHdoYywgcXNldCwgdXJiKTsKKwkJcXNldF9yZW1vdmVfdXJiKHdoYywgcXNldCwgdXJiLCBnZXRfdXJiX3N0YXR1c19mcm9tX3F0ZCh1cmIsIHN0YXR1cykpOworCisJCS8qCisJCSAqIElmIGlBbHQgaXNuJ3QgdmFsaWQgdGhlbiB0aGUgaGFyZHdhcmUgZGlkbid0CisJCSAqIGFkdmFuY2UgaUN1ci4gQWRqdXN0IHRoZSBzdGFydCBhbmQgZW5kIHBvaW50ZXJzIHRvCisJCSAqIG1hdGNoIGlDdXIuCisJCSAqLworCQlpZiAoIShzdGF0dXMgJiBRVERfU1RTX0lBTFRfVkFMSUQpKQorCQkJcXNldC0+dGRfc3RhcnQgPSBxc2V0LT50ZF9lbmQKKwkJCQk9IFFIX1NUQVRVU19UT19JQ1VSKGxlMTZfdG9fY3B1KHFzZXQtPnFoLnN0YXR1cykpOworCQlxc2V0LT5wYXVzZV9hZnRlcl91cmIgPSBOVUxMOworCX0KK30KKworLyoqCisgKiBwcm9jZXNzX2hhbHRlZF9xdGQgLSBwcm9jZXNzIGEgcXNldCB3aXRoIGEgaGFsdGVkIHF0ZAorICoKKyAqIFJlbW92ZSBhbGwgdGhlIHFURHMgZm9yIHRoZSBmYWlsZWQgVVJCIGFuZCByZXR1cm4gdGhlIGZhaWxlZCBVUkIgdG8KKyAqIHRoZSBVU0Igc3Vic3lzdGVtLiAgVGhlbiByZW1vdmUgYWxsIG90aGVyIHFURHMgc28gdGhlIHFzZXQgY2FuIGJlCisgKiByZW1vdmVkLgorICoKKyAqIEZJWE1FOiB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSByYXRlIGFkYXB0YXRpb24gY2FuIGJlIGRvbmUuICBJZiBhCisgKiB0cmFuc2ZlciBmYWlsZWQgYmVjYXVzZSBpdCBleGNlZWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcworICogdGhlbiBpdCBjb3VsZCBiZSByZWFjdGl2YXRlZCB3aXRoIGEgc2xvd2VyIHJhdGUgd2l0aG91dCBoYXZpbmcgdG8KKyAqIHJlbW92ZSB0aGUgcXNldC4KKyAqLwordm9pZCBwcm9jZXNzX2hhbHRlZF9xdGQoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQsCisJCQkgICAgICAgc3RydWN0IHdoY19xdGQgKnF0ZCkKK3sKKwlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkID0gbGlzdF9maXJzdF9lbnRyeSgmcXNldC0+c3Rkcywgc3RydWN0IHdoY19zdGQsIGxpc3Rfbm9kZSk7CisJc3RydWN0IHVyYiAqdXJiID0gc3RkLT51cmI7CisJaW50IHVyYl9zdGF0dXM7CisKKwl1cmJfc3RhdHVzID0gZ2V0X3VyYl9zdGF0dXNfZnJvbV9xdGQodXJiLCBsZTMyX3RvX2NwdShxdGQtPnN0YXR1cykpOworCisJcXNldF9yZW1vdmVfcXRkcyh3aGMsIHFzZXQsIHVyYik7CisJcXNldF9yZW1vdmVfdXJiKHdoYywgcXNldCwgdXJiLCB1cmJfc3RhdHVzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RkLCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7CisJCWlmIChxc2V0LT5udGRzID09IDApCisJCQlicmVhazsKKwkJcXNldF9yZW1vdmVfcXRkKHdoYywgcXNldCk7CisJCXN0ZC0+cXRkID0gTlVMTDsKKwl9CisKKwlxc2V0LT5yZW1vdmUgPSAxOworfQorCit2b2lkIHFzZXRfZnJlZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCkKK3sKKwlkbWFfcG9vbF9mcmVlKHdoYy0+cXNldF9wb29sLCBxc2V0LCBxc2V0LT5xc2V0X2RtYSk7Cit9CisKKy8qKgorICogcXNldF9kZWxldGUgLSB3YWl0IGZvciBhIHFzZXQgdG8gYmUgdW51c2VkLCB0aGVuIGZyZWUgaXQuCisgKi8KK3ZvaWQgcXNldF9kZWxldGUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCit7CisJd2FpdF9mb3JfY29tcGxldGlvbigmcXNldC0+cmVtb3ZlX2NvbXBsZXRlKTsKKwlxc2V0X2ZyZWUod2hjLCBxc2V0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS93aGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvd2hjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMmE1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvd2hjZC5oCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogV2lyZWxlc3MgSG9zdCBDb250cm9sbGVyIChXSEMpIHByaXZhdGUgaGVhZGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisjaWZuZGVmIF9fV0hDRF9ICisjZGVmaW5lIF9fV0hDRF9ICisKKyNpbmNsdWRlIDxsaW51eC91d2Ivd2hjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSAid2hjaS1oYy5oIgorCisvKiBHZW5lcmljIGNvbW1hbmQgdGltZW91dC4gKi8KKyNkZWZpbmUgV0hDX0dFTkNNRF9USU1FT1VUX01TIDEwMAorCisKK3N0cnVjdCB3aGMgeworCXN0cnVjdCB3dXNiaGMgd3VzYmhjOworCXN0cnVjdCB1bWNfZGV2ICp1bWM7CisKKwlyZXNvdXJjZV9zaXplX3QgYmFzZV9waHlzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaXJxOworCisJdTggbl9kZXZpY2VzOworCXU4IG5fa2V5czsKKwl1OCBuX21tY19pZXM7CisKKwl1NjQgKnB6X2xpc3Q7CisJc3RydWN0IGRuX2J1Zl9lbnRyeSAqZG5fYnVmOworCXN0cnVjdCBkaV9idWZfZW50cnkgKmRpX2J1ZjsKKwlkbWFfYWRkcl90IHB6X2xpc3RfZG1hOworCWRtYV9hZGRyX3QgZG5fYnVmX2RtYTsKKwlkbWFfYWRkcl90IGRpX2J1Zl9kbWE7CisKKwlzcGlubG9ja190ICAgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwl2b2lkICogICAgICAgICAgICBnZW5fY21kX2J1ZjsKKwlkbWFfYWRkcl90ICAgICAgICBnZW5fY21kX2J1Zl9kbWE7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY21kX3dxOworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgZG5fd29yazsKKworCXN0cnVjdCBkbWFfcG9vbCAqcXNldF9wb29sOworCisJc3RydWN0IGxpc3RfaGVhZCBhc3luY19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNfcmVtb3ZlZF9saXN0OworCXdhaXRfcXVldWVfaGVhZF90IGFzeW5jX2xpc3Rfd3E7CisJc3RydWN0IHdvcmtfc3RydWN0IGFzeW5jX3dvcms7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBlcmlvZGljX2xpc3RbNV07CisJc3RydWN0IGxpc3RfaGVhZCBwZXJpb2RpY19yZW1vdmVkX2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcGVyaW9kaWNfbGlzdF93cTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGVyaW9kaWNfd29yazsKK307CisKKyNkZWZpbmUgd3VzYmhjX3RvX3doYyh3KSAoY29udGFpbmVyX29mKCh3KSwgc3RydWN0IHdoYywgd3VzYmhjKSkKKworLyoqCisgKiBzdHJ1Y3Qgd2hjX3N0ZCAtIGEgc29mdHdhcmUgVEQuCisgKiBAdXJiOiB0aGUgVVJCIHRoaXMgc1REIGlzIGZvci4KKyAqIEBvZmZzZXQ6IHN0YXJ0IG9mIHRoZSBVUkIncyBkYXRhIGZvciB0aGlzIFRELgorICogQGxlbjogdGhlIGxlbmd0aCBvZiBkYXRhIGluIHRoZSBhc3NvY2lhdGVkIFRELgorICogQG50ZHNfcmVtYWluaW5nOiBudW1iZXIgb2YgVERzIChzdGFydGluZyBmcm9tIHRoaXMgb25lKSBpbiB0aGlzIHRyYW5zZmVyLgorICoKKyAqIFF1ZXVlZCBVUkJzIG1heSByZXF1aXJlIG1vcmUgVERzIHRoYW4gYXJlIGF2YWlsYWJsZSBpbiBhIHFzZXQgc28gd2UKKyAqIHVzZSBhIGxpc3Qgb2YgdGhlc2UgInNvZnR3YXJlIFREcyIgKHNURHMpIHRvIGhvbGQgcGVyLVREIGRhdGEuCisgKi8KK3N0cnVjdCB3aGNfc3RkIHsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc2l6ZV90IGxlbjsKKwlpbnQgICAgbnRkc19yZW1haW5pbmc7CisJc3RydWN0IHdoY19xdGQgKnF0ZDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOworCWludCBudW1fcG9pbnRlcnM7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3Qgd2hjX3BhZ2VfbGlzdF9lbnRyeSAqcGxfdmlydDsKK307CisKKy8qKgorICogc3RydWN0IHdoY191cmIgLSBwZXIgVVJCIGhvc3QgY29udHJvbGxlciBzdHJ1Y3R1cmUuCisgKiBAdXJiOiB0aGUgVVJCIHRoaXMgc3RydWN0IGlzIGZvci4KKyAqIEBxc2V0OiB0aGUgcXNldCBhc3NvY2lhdGVkIHRvIHRoZSBVUkIuCisgKiBAZGVxdWV1ZV93b3JrOiB0aGUgd29yayB0byByZW1vdmUgdGhlIFVSQiB3aGVuIGRlcXVldWVkLgorICogQGlzX2FzeW5jOiB0aGUgVVJCIGJlbG9uZ3MgdG8gYXN5bmMgc2hlZHVsZXIgb3Igbm90LgorICogQHN0YXR1czogdGhlIHN0YXR1cyB0byBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgd3VzYmhjX2dpdmViYWNrX3VyYi4KKyAqLworc3RydWN0IHdoY191cmIgeworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQ7CisJc3RydWN0IHdvcmtfc3RydWN0IGRlcXVldWVfd29yazsKKwlib29sIGlzX2FzeW5jOworCWludCBzdGF0dXM7Cit9OworCisvKioKKyAqIHdoY19zdGRfbGFzdCAtIGlzIHRoaXMgc1REIHRoZSBVUkIncyBsYXN0PworICogQHN0ZDogdGhlIHNURCB0byBjaGVjay4KKyAqLworc3RhdGljIGlubGluZSBib29sIHdoY19zdGRfbGFzdChzdHJ1Y3Qgd2hjX3N0ZCAqc3RkKQoreworCXJldHVybiBzdGQtPm50ZHNfcmVtYWluaW5nIDw9IDE7Cit9CisKK2VudW0gd2hjX3VwZGF0ZSB7CisJV0hDX1VQREFURV9BRERFRCAgID0gMHgwMSwKKwlXSENfVVBEQVRFX1JFTU9WRUQgPSAweDAyLAorCVdIQ19VUERBVEVfVVBEQVRFRCA9IDB4MDQsCit9OworCisvKiBpbml0LmMgKi8KK2ludCB3aGNfaW5pdChzdHJ1Y3Qgd2hjICp3aGMpOwordm9pZCB3aGNfY2xlYW5fdXAoc3RydWN0IHdoYyAqd2hjKTsKKworLyogaHcuYyAqLwordm9pZCB3aGNfd3JpdGVfd3VzYmNtZChzdHJ1Y3Qgd2hjICp3aGMsIHUzMiBtYXNrLCB1MzIgdmFsKTsKK2ludCB3aGNfZG9fZ2VuY21kKHN0cnVjdCB3aGMgKndoYywgdTMyIGNtZCwgdTMyIHBhcmFtcywgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7CisKKy8qIHd1c2IuYyAqLworaW50IHdoY193dXNiaGNfc3RhcnQoc3RydWN0IHd1c2JoYyAqd3VzYmhjKTsKK3ZvaWQgd2hjX3d1c2JoY19zdG9wKHN0cnVjdCB3dXNiaGMgKnd1c2JoYyk7CitpbnQgd2hjX21tY2llX2FkZChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IGludGVydmFsLCB1OCByZXBlYXRfY250LAorCQkgIHU4IGhhbmRsZSwgc3RydWN0IHd1aWVfaGRyICp3dWllKTsKK2ludCB3aGNfbW1jaWVfcm0oc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBoYW5kbGUpOworaW50IHdoY19id2Ffc2V0KHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgczggc3RyZWFtX2luZGV4LCBjb25zdCBzdHJ1Y3QgdXdiX21hc19ibSAqbWFzX2JtKTsKK2ludCB3aGNfZGV2X2luZm9fc2V0KHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2Rldik7CitpbnQgd2hjX3NldF9udW1fZG50cyhzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IGludGVydmFsLCB1OCBzbG90cyk7CitpbnQgd2hjX3NldF9wdGsoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBwb3J0X2lkeCwgdTMyIHRraWQsCisJCWNvbnN0IHZvaWQgKnB0aywgc2l6ZV90IGtleV9zaXplKTsKK2ludCB3aGNfc2V0X2d0ayhzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHUzMiB0a2lkLAorCQljb25zdCB2b2lkICpndGssIHNpemVfdCBrZXlfc2l6ZSk7CitpbnQgd2hjX3NldF9jbHVzdGVyX2lkKHN0cnVjdCB3aGMgKndoYywgdTggYmNpZCk7CisKKy8qIGludC5jICovCitpcnFyZXR1cm5fdCB3aGNfaW50X2hhbmRsZXIoc3RydWN0IHVzYl9oY2QgKmhjZCk7Cit2b2lkIHdoY19kbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qIGFzbC5jICovCit2b2lkIGFzbF9zdGFydChzdHJ1Y3Qgd2hjICp3aGMpOwordm9pZCBhc2xfc3RvcChzdHJ1Y3Qgd2hjICp3aGMpOworaW50ICBhc2xfaW5pdChzdHJ1Y3Qgd2hjICp3aGMpOwordm9pZCBhc2xfY2xlYW5fdXAoc3RydWN0IHdoYyAqd2hjKTsKK2ludCAgYXNsX3VyYl9lbnF1ZXVlKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpOworaW50ICBhc2xfdXJiX2RlcXVldWUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOwordm9pZCBhc2xfcXNldF9kZWxldGUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpOwordm9pZCBzY2FuX2FzeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworLyogcHpsLmMgKi8KK2ludCAgcHpsX2luaXQoc3RydWN0IHdoYyAqd2hjKTsKK3ZvaWQgcHpsX2NsZWFuX3VwKHN0cnVjdCB3aGMgKndoYyk7Cit2b2lkIHB6bF9zdGFydChzdHJ1Y3Qgd2hjICp3aGMpOwordm9pZCBwemxfc3RvcChzdHJ1Y3Qgd2hjICp3aGMpOworaW50ICBwemxfdXJiX2VucXVldWUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IG1lbV9mbGFncyk7CitpbnQgIHB6bF91cmJfZGVxdWV1ZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7Cit2b2lkIHB6bF9xc2V0X2RlbGV0ZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCk7Cit2b2lkIHNjYW5fcGVyaW9kaWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisvKiBxc2V0LmMgKi8KK3N0cnVjdCB3aGNfcXNldCAqcXNldF9hbGxvYyhzdHJ1Y3Qgd2hjICp3aGMsIGdmcF90IG1lbV9mbGFncyk7Cit2b2lkIHFzZXRfZnJlZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCk7CitzdHJ1Y3Qgd2hjX3FzZXQgKmdldF9xc2V0KHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpOwordm9pZCBxc2V0X2RlbGV0ZShzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCk7Cit2b2lkIHFzZXRfY2xlYXIoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpOworaW50IHFzZXRfYWRkX3VyYihzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCwgc3RydWN0IHVyYiAqdXJiLAorCQkgZ2ZwX3QgbWVtX2ZsYWdzKTsKK3ZvaWQgcXNldF9mcmVlX3N0ZChzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfc3RkICpzdGQpOwordm9pZCBxc2V0X3JlbW92ZV91cmIoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQsCisJCQkgICAgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3ZvaWQgcHJvY2Vzc19oYWx0ZWRfcXRkKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0LAorCQkJICAgICAgIHN0cnVjdCB3aGNfcXRkICpxdGQpOwordm9pZCBwcm9jZXNzX2luYWN0aXZlX3F0ZChzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCwKKwkJCQkgc3RydWN0IHdoY19xdGQgKnF0ZCk7CitlbnVtIHdoY191cGRhdGUgcXNldF9hZGRfcXRkcyhzdHJ1Y3Qgd2hjICp3aGMsIHN0cnVjdCB3aGNfcXNldCAqcXNldCk7Cit2b2lkIHFzZXRfcmVtb3ZlX2NvbXBsZXRlKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0KTsKK3ZvaWQgZHVtcF9xc2V0KHN0cnVjdCB3aGNfcXNldCAqcXNldCwgc3RydWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgcHpsX3VwZGF0ZShzdHJ1Y3Qgd2hjICp3aGMsIHVpbnQzMl90IHd1c2JjbWQpOwordm9pZCBhc2xfdXBkYXRlKHN0cnVjdCB3aGMgKndoYywgdWludDMyX3Qgd3VzYmNtZCk7CisKKyNlbmRpZiAvKiAjaWZuZGVmIF9fV0hDRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvd2hjaS1oYy5oIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3doY2ktaGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmYxZWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3doY2ktaGMuaApAQCAtMCwwICsxLDQxNiBAQAorLyoKKyAqIFdpcmVsZXNzIEhvc3QgQ29udHJvbGxlciAoV0hDKSBkYXRhIHN0cnVjdHVyZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZm5kZWYgX1dIQ0lfV0hDSV9IQ19ICisjZGVmaW5lIF9XSENJX1dIQ0lfSENfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisvKioKKyAqIFdIQ0lfUEFHRV9TSVpFIC0gcGFnZSBzaXplIHVzZSBieSBXSENJCisgKgorICogV0hDSSBhc3N1bWVzIHRoYXQgaG9zdCBzeXN0ZW0gdXNlcyBwYWdlcyBvZiA0MDk2IG9jdGV0cy4KKyAqLworI2RlZmluZSBXSENJX1BBR0VfU0laRSA0MDk2CisKKworLyoqCisgKiBRVERfTUFYX1RYRkVSX1NJWkUgLSBtYXggbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIHdpdGggYSBzaW5nbGUKKyAqIHF0ZC4KKyAqCisgKiBUaGlzIGlzIDJeMjAgLSAxLgorICovCisjZGVmaW5lIFFURF9NQVhfWEZFUl9TSVpFIDEwNDg1NzUKKworCisvKioKKyAqIHN0cnVjdCB3aGNfcXRkIC0gUXVldWUgRWxlbWVudCBUcmFuc2ZlciBEZXNjcmlwdG9ycyAocVREKQorICoKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBkYXRhIGZvciBhIGJ1bGssIGNvbnRyb2wgb3IgaW50ZXJydXB0IHRyYW5zZmVyLgorICoKKyAqIFtXSENJXSBzZWN0aW9uIDMuMi40CisgKi8KK3N0cnVjdCB3aGNfcXRkIHsKKwlfX2xlMzIgc3RhdHVzOyAvKjwgcmVtYWluaW5nIHRyYW5zZmVyIGxlbiBhbmQgdHJhbnNmZXIgc3RhdHVzICovCisJX19sZTMyIG9wdGlvbnM7CisJX19sZTY0IHBhZ2VfbGlzdF9wdHI7IC8qPCBwaHlzaWNhbCBwb2ludGVyIHRvIGRhdGEgYnVmZmVyIHBhZ2UgbGlzdCovCisJX191OCAgIHNldHVwWzhdOyAgICAgIC8qPCBzZXR1cCBkYXRhIGZvciBjb250cm9sIHRyYW5zZmVycyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBRVERfU1RTX0FDVElWRSAgICAgKDEgPDwgMzEpICAvKiBlbmFibGUgZXhlY3V0aW9uIG9mIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIFFURF9TVFNfSEFMVEVEICAgICAoMSA8PCAzMCkgIC8qIHRyYW5zZmVyIGhhbHRlZCAqLworI2RlZmluZSBRVERfU1RTX0RCRSAgICAgICAgKDEgPDwgMjkpICAvKiBkYXRhIGJ1ZmZlciBlcnJvciAqLworI2RlZmluZSBRVERfU1RTX0JBQkJMRSAgICAgKDEgPDwgMjgpICAvKiBiYWJibGUgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUVREX1NUU19SQ0UgICAgICAgICgxIDw8IDI3KSAgLyogcmV0cnkgY291bnQgZXhjZWVkZWQgKi8KKyNkZWZpbmUgUVREX1NUU19MQVNUX1BLVCAgICgxIDw8IDI2KSAgLyogc2V0IExhc3QgUGFja2V0IEZsYWcgaW4gV1VTQiBoZWFkZXIgKi8KKyNkZWZpbmUgUVREX1NUU19JTkFDVElWRSAgICgxIDw8IDI1KSAgLyogcXVldWUgc2V0IGlzIG1hcmtlZCBpbmFjdGl2ZSAqLworI2RlZmluZSBRVERfU1RTX0lBTFRfVkFMSUQgKDEgPDwgMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpQWx0IGZpZWxkIGlzIHZhbGlkICovCisjZGVmaW5lIFFURF9TVFNfSUFMVChpKSAgICAoUVREX1NUU19JQUxUX1ZBTElEIHwgKChpKSA8PCAyMCkpIC8qIGlBbHQgZmllbGQgKi8KKyNkZWZpbmUgUVREX1NUU19MRU4obCkgICAgICgobCkgPDwgMCkgLyogdHJhbnNmZXIgbGVuZ3RoICovCisjZGVmaW5lIFFURF9TVFNfVE9fTEVOKHMpICAoKHMpICYgMHgwMDBmZmZmZikKKworI2RlZmluZSBRVERfT1BUX0lPQyAgICAgICgxIDw8IDEpIC8qIHBhZ2VfbGlzdF9wdHIgcG9pbnRzIHRvIGJ1ZmZlciBkaXJlY3RseSAqLworI2RlZmluZSBRVERfT1BUX1NNQUxMICAgICgxIDw8IDApIC8qIGludGVycnVwdCBvbiBjb21wbGV0ZSAqLworCisvKioKKyAqIHN0cnVjdCB3aGNfaXRkIC0gSXNvY2hyb25vdXMgUXVldWUgRWxlbWVudCBUcmFuc2ZlciBEZXNjcmlwdG9ycyAoaVREKQorICoKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBkYXRhIGFuZCBvdGhlciBwYXJhbWV0ZXJzIGZvciBhbiBpc29jaHJvbm91cworICogdHJhbnNmZXIuCisgKgorICogW1dIQ0ldIHNlY3Rpb24gMy4yLjUKKyAqLworc3RydWN0IHdoY19pdGQgeworCV9fbGUxNiBwcmVzZW50YXRpb25fdGltZTsgICAgLyo8IHByZXNlbnRhdGlvbiB0aW1lIGZvciBPVVQgdHJhbnNmZXJzICovCisJX191OCAgIG51bV9zZWdtZW50czsgICAgICAgICAvKjwgbnVtYmVyIG9mIGRhdGEgc2VnbWVudHMgaW4gc2VnbWVudCBsaXN0ICovCisJX191OCAgIHN0YXR1czsgICAgICAgICAgICAgICAvKjwgY29tbWFuZCBleGVjdXRpb24gc3RhdHVzICovCisJX19sZTMyIG9wdGlvbnM7ICAgICAgICAgICAgICAvKjwgbWlzYyB0cmFuc2ZlciBvcHRpb25zICovCisJX19sZTY0IHBhZ2VfbGlzdF9wdHI7ICAgICAgICAvKjwgcGh5c2ljYWwgcG9pbnRlciB0byBkYXRhIGJ1ZmZlciBwYWdlIGxpc3QgKi8KKwlfX2xlNjQgc2VnX2xpc3RfcHRyOyAgICAgICAgIC8qPCBwaHlzaWNhbCBwb2ludGVyIHRvIHNlZ21lbnQgbGlzdCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBJVERfU1RTX0FDVElWRSAgICgxIDw8IDcpIC8qIGVuYWJsZSBleGVjdXRpb24gb2YgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgSVREX1NUU19EQkUgICAgICAoMSA8PCA1KSAvKiBkYXRhIGJ1ZmZlciBlcnJvciAqLworI2RlZmluZSBJVERfU1RTX0JBQkJMRSAgICgxIDw8IDQpIC8qIGJhYmJsZSBkZXRlY3RlZCAqLworI2RlZmluZSBJVERfU1RTX0lOQUNUSVZFICgxIDw8IDEpIC8qIHF1ZXVlIHNldCBpcyBtYXJrZWQgaW5hY3RpdmUgKi8KKworI2RlZmluZSBJVERfT1BUX0lPQyAgICAgICgxIDw8IDEpIC8qIGludGVycnVwdCBvbiBjb21wbGV0ZSAqLworI2RlZmluZSBJVERfT1BUX1NNQUxMICAgICgxIDw8IDApIC8qIHBhZ2VfbGlzdF9wdHIgcG9pbnRzIHRvIGJ1ZmZlciBkaXJlY3RseSAqLworCisvKioKKyAqIFBhZ2UgbGlzdCBlbnRyeS4KKyAqCisgKiBBIFREJ3MgcGFnZSBsaXN0IG11c3QgY29udGFpbiBzdWZmaWNpZW50IHBhZ2UgbGlzdCBlbnRyaWVzIGZvciB0aGUKKyAqIHRvdGFsIGRhdGEgbGVuZ3RoIGluIHRoZSBURC4KKyAqCisgKiBbV0hDSV0gc2VjdGlvbiAzLjIuNC4zCisgKi8KK3N0cnVjdCB3aGNfcGFnZV9saXN0X2VudHJ5IHsKKwlfX2xlNjQgYnVmX3B0cjsgLyo8IHBoeXNpY2FsIHBvaW50ZXIgdG8gYnVmZmVyICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIHN0cnVjdCB3aGNfc2VnX2xpc3RfZW50cnkgLSBTZWdtZW50IGxpc3QgZW50cnkuCisgKgorICogRGVzY3JpYmVzIGEgcG9ydGlvbiBvZiB0aGUgZGF0YSBidWZmZXIgZGVzY3JpYmVkIGluIHRoZSBjb250YWluaW5nCisgKiBxVEQncyBwYWdlIGxpc3QuCisgKgorICogc2VnX3B0ciA9IHF0ZC0+cGFnZV9saXN0X3B0cltxdGQtPnNlZ19saXN0X3B0cltzZWddLmlkeF0uYnVmX3B0cgorICogICAgICAgICAgICsgcXRkLT5zZWdfbGlzdF9wdHJbc2VnXS5vZmZzZXQ7CisgKgorICogU2VnbWVudHMgY2FuJ3QgY3Jvc3MgcGFnZSBib3VuZHJpZXMuCisgKgorICogW1dIQ0ldIHNlY3Rpb24gMy4yLjUuNQorICovCitzdHJ1Y3Qgd2hjX3NlZ19saXN0X2VudHJ5IHsKKwlfX2xlMTYgbGVuOyAgICAvKjwgc2VnbWVudCBsZW5ndGggKi8KKwlfX3U4ICAgaWR4OyAgICAvKjwgaW5kZXggaW50byBwYWdlIGxpc3QgKi8KKwlfX3U4ICAgc3RhdHVzOyAvKjwgc2VnbWVudCBzdGF0dXMgKi8KKwlfX2xlMTYgb2Zmc2V0OyAvKjwgMTIgYml0IG9mZnNldCBpbnRvIHBhZ2UgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IHdoY19xaGVhZCAtIGVuZHBvaW50IGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIGEgcXNldC4KKyAqCisgKiBbV0hDSV0gc2VjdGlvbiAzLjIuNgorICovCitzdHJ1Y3Qgd2hjX3FoZWFkIHsKKwlfX2xlNjQgbGluazsgLyo8IG5leHQgcXNldCBpbiBsaXN0ICovCisJX19sZTMyIGluZm8xOworCV9fbGUzMiBpbmZvMjsKKwlfX2xlMzIgaW5mbzM7CisJX19sZTE2IHN0YXR1czsKKwlfX2xlMTYgZXJyX2NvdW50OyAgLyo8IHRyYW5zYWN0aW9uIGVycm9yIGNvdW50ICovCisJX19sZTMyIGN1cl93aW5kb3c7CisJX19sZTMyIHNjcmF0Y2hbM107IC8qPCBoL3cgc2NyYXRjaCBhcmVhICovCisJdW5pb24geworCQlzdHJ1Y3Qgd2hjX3F0ZCBxdGQ7CisJCXN0cnVjdCB3aGNfaXRkIGl0ZDsKKwl9IG92ZXJsYXk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFFIX0xJTktfUFRSX01BU0sgKH4weDAzRnVsbCkKKyNkZWZpbmUgUUhfTElOS19QVFIocHRyKSAoKHB0cikgJiBRSF9MSU5LX1BUUl9NQVNLKQorI2RlZmluZSBRSF9MSU5LX0lRUyAgICAgICgxIDw8IDQpIC8qIGlzb2Nocm9ub3VzIHF1ZXVlIHNldCAqLworI2RlZmluZSBRSF9MSU5LX05URFMobikgICgoKG4pIC0gMSkgPDwgMSkgLyogbnVtYmVyIG9mIFREcyBpbiBxdWV1ZSBzZXQgKi8KKyNkZWZpbmUgUUhfTElOS19UICAgICAgICAoMSA8PCAwKSAvKiBsYXN0IHF1ZXVlIHNldCBpbiBwZXJpb2RpYyBzY2hlZHVsZSBsaXN0ICovCisKKyNkZWZpbmUgUUhfSU5GTzFfRVAoZSkgICAgICAgICAgICgoZSkgPDwgMCkgIC8qIGVuZHBvaW50IG51bWJlciAqLworI2RlZmluZSBRSF9JTkZPMV9ESVJfSU4gICAgICAgICAgKDEgPDwgNCkgICAgLyogSU4gdHJhbnNmZXIgKi8KKyNkZWZpbmUgUUhfSU5GTzFfRElSX09VVCAgICAgICAgICgwIDw8IDQpICAgIC8qIE9VVCB0cmFuc2ZlciAqLworI2RlZmluZSBRSF9JTkZPMV9UUl9UWVBFX0NUUkwgICAgKDB4MCA8PCA1KSAgLyogY29udHJvbCB0cmFuc2ZlciAqLworI2RlZmluZSBRSF9JTkZPMV9UUl9UWVBFX0lTT0MgICAgKDB4MSA8PCA1KSAgLyogaXNvY2hyb25vdXMgdHJhbnNmZXIgKi8KKyNkZWZpbmUgUUhfSU5GTzFfVFJfVFlQRV9CVUxLICAgICgweDIgPDwgNSkgIC8qIGJ1bGsgdHJhbnNmZXIgKi8KKyNkZWZpbmUgUUhfSU5GTzFfVFJfVFlQRV9JTlQgICAgICgweDMgPDwgNSkgIC8qIGludGVycnVwdCAqLworI2RlZmluZSBRSF9JTkZPMV9UUl9UWVBFX0xQX0lOVCAgKDB4NyA8PCA1KSAgLyogbG93IHBvd2VyIGludGVycnVwdCAqLworI2RlZmluZSBRSF9JTkZPMV9ERVZfSU5GT19JRFgoaSkgKChpKSA8PCA4KSAgLyogaW5kZXggaW50byBkZXZpY2UgaW5mbyBidWZmZXIgKi8KKyNkZWZpbmUgUUhfSU5GTzFfU0VUX0lOQUNUSVZFICAgICgxIDw8IDE1KSAgIC8qIHNldCBpbmFjdGl2ZSBhZnRlciB0cmFuc2ZlciAqLworI2RlZmluZSBRSF9JTkZPMV9NQVhfUEtUX0xFTihsKSAgKChsKSA8PCAxNikgLyogbWF4aW11bSBwYWNrZXQgbGVuZ3RoICovCisKKyNkZWZpbmUgUUhfSU5GTzJfQlVSU1QoYikgICAgICAgICgoYikgPDwgMCkgIC8qIG1heGltdW0gYnVyc3QgbGVuZ3RoICovCisjZGVmaW5lIFFIX0lORk8yX0RCUChwKSAgICAgICAgICAoKHApIDw8IDUpICAvKiBkYXRhIGJ1cnN0IHBvbGljeSAoc2VlIFtXVVNCXSB0YWJsZSA1LTcpICovCisjZGVmaW5lIFFIX0lORk8yX01BWF9DT1VOVChjKSAgICAoKGMpIDw8IDgpICAvKiBtYXggaXNvYy9pbnQgcGt0cyBwZXIgem9uZSAqLworI2RlZmluZSBRSF9JTkZPMl9SUVMgICAgICAgICAgICAgKDEgPDwgMTUpICAgLyogcmVhY3RpdmF0ZSBxdWV1ZSBzZXQgKi8KKyNkZWZpbmUgUUhfSU5GTzJfTUFYX1JFVFJZKHIpICAgICgocikgPDwgMTYpIC8qIG1heGltdW0gdHJhbnNhY3Rpb24gcmV0cmllcyAqLworI2RlZmluZSBRSF9JTkZPMl9NQVhfU0VRKHMpICAgICAgKChzKSA8PCAyMCkgLyogbWF4aW11bSBzZXF1ZW5jZSBudW1iZXIgKi8KKyNkZWZpbmUgUUhfSU5GTzNfTUFYX0RFTEFZKGQpICAgICgoZCkgPDwgMCkgIC8qIG1heGltdW0gc3RyZWFtIGRlbGF5IGluIDEyNSB1cyB1bml0cyAoaXNvYyBvbmx5KSAqLworI2RlZmluZSBRSF9JTkZPM19JTlRFUlZBTChpKSAgICAgKChpKSA8PCAxNikgLyogc2VnbWVudCBpbnRlcnZhbCBpbiAxMjUgdXMgdW5pdHMgKGlzb2Mgb25seSkgKi8KKworI2RlZmluZSBRSF9JTkZPM19UWF9SQVRFXzUzXzMgICAgKDAgPDwgMjQpCisjZGVmaW5lIFFIX0lORk8zX1RYX1JBVEVfODAgICAgICAoMSA8PCAyNCkKKyNkZWZpbmUgUUhfSU5GTzNfVFhfUkFURV8xMDZfNyAgICgyIDw8IDI0KQorI2RlZmluZSBRSF9JTkZPM19UWF9SQVRFXzE2MCAgICAgKDMgPDwgMjQpCisjZGVmaW5lIFFIX0lORk8zX1RYX1JBVEVfMjAwICAgICAoNCA8PCAyNCkKKyNkZWZpbmUgUUhfSU5GTzNfVFhfUkFURV8zMjAgICAgICg1IDw8IDI0KQorI2RlZmluZSBRSF9JTkZPM19UWF9SQVRFXzQwMCAgICAgKDYgPDwgMjQpCisjZGVmaW5lIFFIX0lORk8zX1RYX1JBVEVfNDgwICAgICAoNyA8PCAyNCkKKyNkZWZpbmUgUUhfSU5GTzNfVFhfUFdSKHApICAgICAgICgocCkgPDwgMjkpIC8qIHRyYW5zbWl0IHBvd2VyIChzZWUgW1dVU0JdIHNlY3Rpb24gNS4yLjEuMikgKi8KKworI2RlZmluZSBRSF9TVEFUVVNfRkxPV19DVFJMICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIFFIX1NUQVRVU19JQ1VSKGkpICAgICAgICAoKGkpIDw8IDUpCisjZGVmaW5lIFFIX1NUQVRVU19UT19JQ1VSKHMpICAgICAoKChzKSA+PiA1KSAmIDB4NykKKworLyoqCisgKiB1c2JfcGlwZV90b19xaF90eXBlIC0gVVNCIGNvcmUgcGlwZSB0eXBlIHRvIFFIIHRyYW5zZmVyIHR5cGUKKyAqCisgKiBSZXR1cm5zIHRoZSBRSCB0eXBlIGZpZWxkIGZvciBhIFVTQiBjb3JlIHBpcGUgdHlwZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCB1c2JfcGlwZV90b19xaF90eXBlKHVuc2lnbmVkIHBpcGUpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHR5cGVbXSA9IHsKKwkJW1BJUEVfSVNPQ0hST05PVVNdID0gUUhfSU5GTzFfVFJfVFlQRV9JU09DLAorCQlbUElQRV9JTlRFUlJVUFRdICAgPSBRSF9JTkZPMV9UUl9UWVBFX0lOVCwKKwkJW1BJUEVfQ09OVFJPTF0gICAgID0gUUhfSU5GTzFfVFJfVFlQRV9DVFJMLAorCQlbUElQRV9CVUxLXSAgICAgICAgPSBRSF9JTkZPMV9UUl9UWVBFX0JVTEssCisJfTsKKwlyZXR1cm4gdHlwZVt1c2JfcGlwZXR5cGUocGlwZSldOworfQorCisvKioKKyAqIE1heGl1bXVtIG51bWJlciBvZiBURHMgaW4gYSBxc2V0LgorICovCisjZGVmaW5lIFdIQ0lfUVNFVF9URF9NQVggOAorCisvKioKKyAqIHN0cnVjdCB3aGNfcXNldCAtIFdVU0IgZGF0YSB0cmFuc2ZlcnMgdG8gYSBzcGVjaWZpYyBlbmRwb2ludAorICogQHFoOiB0aGUgUUhlYWQgb2YgdGhpcyBxc2V0CisgKiBAcXRkOiB1cCB0byA4IHFURHMgKGZvciBxc2V0cyBmb3IgY29udHJvbCwgYnVsayBhbmQgaW50ZXJydXB0CisgKiB0cmFuc2ZlcnMpCisgKiBAaXRkOiB1cCB0byA4IGlURHMgKGZvciBxc2V0cyBmb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzKQorICogQHFzZXRfZG1hOiBETUEgYWRkcmVzcyBmb3IgdGhpcyBxc2V0CisgKiBAd2hjOiBXSENJIEhDIHRoaXMgcXNldCBpcyBmb3IKKyAqIEBlcDogZW5kcG9pbnQKKyAqIEBzdGRzOiBsaXN0IG9mIHNURHMgcXVldWVkIHRvIHRoaXMgcXNldAorICogQG50ZHM6IG51bWJlciBvZiBxVERzIHF1ZXVlZCAobm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIG5URHMKKyAqIGZpZWxkIGluIHRoZSBRSCkKKyAqIEB0ZF9zdGFydDogaW5kZXggb2YgdGhlIGZpcnN0IHFURCBpbiB0aGUgbGlzdAorICogQHRkX2VuZDogaW5kZXggb2YgbmV4dCBmcmVlIHFURCBpbiB0aGUgbGlzdCAocHJvdmlkZWQKKyAqICAgICAgICAgIG50ZHMgPCBXSENJX1FTRVRfVERfTUFYKQorICoKKyAqIFF1ZXVlIFNldHMgKHFzZXRzKSBhcmUgYWRkZWQgdG8gdGhlIGFzeW5jaHJvbm91cyBzY2hlZHVsZSBsaXN0CisgKiAoQVNMKSBvciB0aGUgcGVyaW9kaWMgem9uZSBsaXN0IChQWkwpLgorICoKKyAqIHFzZXRzIG1heSBjb250YWluIHVwIHRvIDggVERzIChlaXRoZXIgcVREcyBvciBpVERzIGFzIGFwcHJvcHJpYXRlKS4KKyAqIEVhY2ggVEQgbWF5IHJlZmVyIHRvIGF0IG1vc3QgMSBNaUIgb2YgZGF0YS4gSWYgYSBzaW5nbGUgdHJhbnNmZXIKKyAqIGhhcyA+IDhNaUIgb2YgZGF0YSwgVERzIGNhbiBiZSByZXVzZWQgYXMgdGhleSBhcmUgY29tcGxldGVkIHNpbmNlCisgKiB0aGUgVEQgbGlzdCBpcyB1c2VkIGFzIGEgY2lyY3VsYXIgYnVmZmVyLiAgU2ltaWxhcmx5LCBzZXZlcmFsCisgKiAoc21hbGxlcikgdHJhbnNmZXJzIG1heSBiZSBxdWV1ZWQgaW4gYSBxc2V0LgorICoKKyAqIFdIQ0kgY29udHJvbGxlcnMgbWF5IGNhY2hlIHBvcnRpb25zIG9mIHRoZSBxc2V0cyBpbiB0aGUgQVNMIGFuZAorICogUFpMLCByZXF1aXJpbmcgdGhlIFdIQ0QgdG8gaW5mb3JtIHRoZSBXSEMgdGhhdCB0aGUgbGlzdHMgaGF2ZSBiZWVuCisgKiB1cGRhdGVkIChmaWVsZHMgY2hhbmdlZCBvciBxc2V0cyBpbnNlcnRlZCBvciByZW1vdmVkKS4gIEZvciBzYWZlCisgKiBpbnNlcnRpb24gYW5kIHJlbW92YWwgb2YgcXNldHMgZnJvbSB0aGUgbGlzdHMgdGhlIHNjaGVkdWxlIG11c3QgYmUKKyAqIHN0b3BwZWQgdG8gYXZvaWQgcmFjZXMgaW4gdXBkYXRpbmcgdGhlIFFIIGxpbmsgcG9pbnRlcnMuCisgKgorICogU2luY2UgdGhlIEhDIGlzIGZyZWUgdG8gZXhlY3V0ZSBxc2V0cyBpbiBhbnkgb3JkZXIsIGFsbCB0cmFuc2ZlcnMKKyAqIHRvIGFuIGVuZHBvaW50IHNob3VsZCB1c2UgdGhlIHNhbWUgcXNldCB0byBlbnN1cmUgdHJhbnNmZXJzIGFyZQorICogZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRoZXkncmUgc3VibWl0dGVkLgorICoKKyAqIFtXSENJXSBzZWN0aW9uIDMuMi4zCisgKi8KK3N0cnVjdCB3aGNfcXNldCB7CisJc3RydWN0IHdoY19xaGVhZCBxaDsKKwl1bmlvbiB7CisJCXN0cnVjdCB3aGNfcXRkIHF0ZFtXSENJX1FTRVRfVERfTUFYXTsKKwkJc3RydWN0IHdoY19pdGQgaXRkW1dIQ0lfUVNFVF9URF9NQVhdOworCX07CisKKwkvKiBwcml2YXRlIGRhdGEgZm9yIFdIQ0QgKi8KKwlkbWFfYWRkcl90IHFzZXRfZG1hOworCXN0cnVjdCB3aGMgKndoYzsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCBsaXN0X2hlYWQgc3RkczsKKwlpbnQgbnRkczsKKwlpbnQgdGRfc3RhcnQ7CisJaW50IHRkX2VuZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsKKwl1bnNpZ25lZCBpbl9zd19saXN0OjE7CisJdW5zaWduZWQgaW5faHdfbGlzdDoxOworCXVuc2lnbmVkIHJlbW92ZToxOworCXN0cnVjdCB1cmIgKnBhdXNlX2FmdGVyX3VyYjsKKwlzdHJ1Y3QgY29tcGxldGlvbiByZW1vdmVfY29tcGxldGU7CisJaW50IG1heF9idXJzdDsKKwlpbnQgbWF4X3NlcTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3aGNfcXNldF9zZXRfbGlua19wdHIodTY0ICpwdHIsIHU2NCB0YXJnZXQpCit7CisJaWYgKHRhcmdldCkKKwkJKnB0ciA9ICgqcHRyICYgfihRSF9MSU5LX1BUUl9NQVNLIHwgUUhfTElOS19UKSkgfCBRSF9MSU5LX1BUUih0YXJnZXQpOworCWVsc2UKKwkJKnB0ciA9IFFIX0xJTktfVDsKK30KKworLyoqCisgKiBzdHJ1Y3QgZGlfYnVmX2VudHJ5IC0gRGV2aWNlIEluZm9ybWF0aW9uIChESSkgYnVmZmVyIGVudHJ5LgorICoKKyAqIFRoZXJlJ3Mgb25lIG9mIHRoZXNlIHBlciBjb25uZWN0ZWQgZGV2aWNlLgorICovCitzdHJ1Y3QgZGlfYnVmX2VudHJ5IHsKKwlfX2xlMzIgYXZhaWxhYmlsaXR5X2luZm9bOF07IC8qPCBNQVMgYXZhaWxhYmlsaXR5IGluZm9ybWF0aW9uLCBvbmUgTUFTIHBlciBiaXQgKi8KKwlfX2xlMzIgYWRkcl9zZWNfaW5mbzsgICAgICAgIC8qPCBhZGRyZXNzaW5nIGFuZCBzZWN1cml0eSBpbmZvICovCisJX19sZTMyIHJlc2VydmVkWzddOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBXSENfRElfU0VDVVJFICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgV0hDX0RJX0RJU0FCTEUgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIFdIQ19ESV9LRVlfSURYKGspICAgICAgICgoaykgPDwgOCkKKyNkZWZpbmUgV0hDX0RJX0tFWV9JRFhfTUFTSyAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBXSENfRElfREVWX0FERFIoYSkgICAgICAoKGEpIDw8IDApCisjZGVmaW5lIFdIQ19ESV9ERVZfQUREUl9NQVNLICAgIDB4MDAwMDAwZmYKKworLyoqCisgKiBzdHJ1Y3QgZG5fYnVmX2VudHJ5IC0gRGV2aWNlIE5vdGlmaWNhdGlvbiAoRE4pIGJ1ZmZlciBlbnRyeS4KKyAqCisgKiBbV0hDSV0gc2VjdGlvbiAzLjIuOAorICovCitzdHJ1Y3QgZG5fYnVmX2VudHJ5IHsKKwlfX3U4ICAgbXNnX3NpemU7ICAgIC8qPCBudW1iZXIgb2Ygb2N0ZXRzIG9mIHZhbGlkIEROIGRhdGEgKi8KKwlfX3U4ICAgcmVzZXJ2ZWQxOworCV9fdTggICBzcmNfYWRkcjsgICAgLyo8IHNvdXJjZSBhZGRyZXNzICovCisJX191OCAgIHN0YXR1czsgICAgICAvKjwgYnVmZmVyIGVudHJ5IHN0YXR1cyAqLworCV9fbGUzMiB0a2lkOyAgICAgICAgLyo8IFRLSUQgZm9yIHNvdXJjZSBkZXZpY2UsIHZhbGlkIGlmIHNlY3VyZSBiaXQgaXMgc2V0ICovCisJX191OCAgIGRuX2RhdGFbNTZdOyAvKjwgdXAgdG8gNTYgb2N0ZXRzIG9mIEROIGRhdGEgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgV0hDX0ROX1NUQVRVU19WQUxJRCAgKDEgPDwgNykgLyogYnVmZmVyIGVudHJ5IGlzIHZhbGlkICovCisjZGVmaW5lIFdIQ19ETl9TVEFUVVNfU0VDVVJFICgxIDw8IDYpIC8qIG5vdGlmaWNhdGlvbiByZWNlaXZlZCB1c2luZyBzZWN1cmUgZnJhbWUgKi8KKworI2RlZmluZSBXSENfTl9ETl9FTlRSSUVTICg0MDk2IC8gc2l6ZW9mKHN0cnVjdCBkbl9idWZfZW50cnkpKQorCisvKiBUaGUgQWRkIE1NQyBJRSBXVVNCIEdlbmVyaWMgQ29tbWFuZCBtYXkgdGFrZSB1cCB0byAyNTYgYnl0ZXMgb2YKKyAgIGRhdGEuIFtXSENJXSBzZWN0aW9uIDIuNC43LiAqLworI2RlZmluZSBXSENfR0VOX0NNRF9EQVRBX0xFTiAyNTYKKworLyoKKyAqIEhDIHJlZ2lzdGVycy4KKyAqCisgKiBbV0hDSV0gc2VjdGlvbiAyLjQKKyAqLworCisjZGVmaW5lIFdIQ0lWRVJTSU9OICAgICAgICAgIDB4MDAKKworI2RlZmluZSBXSENTUEFSQU1TICAgICAgICAgICAweDA0CisjICBkZWZpbmUgV0hDU1BBUkFNU19UT19OX01NQ19JRVMocCkgKCgocCkgPj4gMTYpICYgMHhmZikKKyMgIGRlZmluZSBXSENTUEFSQU1TX1RPX05fS0VZUyhwKSAgICAoKChwKSA+PiA4KSAmIDB4ZmYpCisjICBkZWZpbmUgV0hDU1BBUkFNU19UT19OX0RFVklDRVMocCkgKCgocCkgPj4gMCkgJiAweDdmKQorCisjZGVmaW5lIFdVU0JDTUQgICAgICAgICAgICAgIDB4MDgKKyMgIGRlZmluZSBXVVNCQ01EX0JDSUQoYikgICAgICAgICAgICAoKGIpIDw8IDE2KQorIyAgZGVmaW5lIFdVU0JDTURfQkNJRF9NQVNLICAgICAgICAgICgweGZmIDw8IDE2KQorIyAgZGVmaW5lIFdVU0JDTURfQVNZTkNfUVNFVF9STSAgICAgICgxIDw8IDEyKQorIyAgZGVmaW5lIFdVU0JDTURfUEVSSU9ESUNfUVNFVF9STSAgICgxIDw8IDExKQorIyAgZGVmaW5lIFdVU0JDTURfV1VTQlNJKHMpICAgICAgICAgICgocykgPDwgOCkKKyMgIGRlZmluZSBXVVNCQ01EX1dVU0JTSV9NQVNLICAgICAgICAoMHg3IDw8IDgpCisjICBkZWZpbmUgV1VTQkNNRF9BU1lOQ19TWU5DRURfREIgICAgKDEgPDwgNykKKyMgIGRlZmluZSBXVVNCQ01EX1BFUklPRElDX1NZTkNFRF9EQiAoMSA8PCA2KQorIyAgZGVmaW5lIFdVU0JDTURfQVNZTkNfVVBEQVRFRCAgICAgICgxIDw8IDUpCisjICBkZWZpbmUgV1VTQkNNRF9QRVJJT0RJQ19VUERBVEVEICAgKDEgPDwgNCkKKyMgIGRlZmluZSBXVVNCQ01EX0FTWU5DX0VOICAgICAgICAgICAoMSA8PCAzKQorIyAgZGVmaW5lIFdVU0JDTURfUEVSSU9ESUNfRU4gICAgICAgICgxIDw8IDIpCisjICBkZWZpbmUgV1VTQkNNRF9XSENSRVNFVCAgICAgICAgICAgKDEgPDwgMSkKKyMgIGRlZmluZSBXVVNCQ01EX1JVTiAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisjZGVmaW5lIFdVU0JTVFMgICAgICAgICAgICAgIDB4MGMKKyMgIGRlZmluZSBXVVNCU1RTX0FTWU5DX1NDSEVEICAgICAgICAgICAgICgxIDw8IDE1KQorIyAgZGVmaW5lIFdVU0JTVFNfUEVSSU9ESUNfU0NIRUQgICAgICAgICAgKDEgPDwgMTQpCisjICBkZWZpbmUgV1VTQlNUU19ETlRTX1NDSEVEICAgICAgICAgICAgICAoMSA8PCAxMykKKyMgIGRlZmluZSBXVVNCU1RTX0hDSEFMVEVEICAgICAgICAgICAgICAgICgxIDw8IDEyKQorIyAgZGVmaW5lIFdVU0JTVFNfR0VOX0NNRF9ET05FICAgICAgICAgICAgKDEgPDwgOSkKKyMgIGRlZmluZSBXVVNCU1RTX0NIQU5fVElNRV9ST0xMT1ZFUiAgICAgICgxIDw8IDgpCisjICBkZWZpbmUgV1VTQlNUU19ETlRTX09WRVJGTE9XICAgICAgICAgICAoMSA8PCA3KQorIyAgZGVmaW5lIFdVU0JTVFNfQlBTVF9BREpVU1RNRU5UX0NIQU5HRUQgKDEgPDwgNikKKyMgIGRlZmluZSBXVVNCU1RTX0hPU1RfRVJSICAgICAgICAgICAgICAgICgxIDw8IDUpCisjICBkZWZpbmUgV1VTQlNUU19BU1lOQ19TQ0hFRF9TWU5DRUQgICAgICAoMSA8PCA0KQorIyAgZGVmaW5lIFdVU0JTVFNfUEVSSU9ESUNfU0NIRURfU1lOQ0VEICAgKDEgPDwgMykKKyMgIGRlZmluZSBXVVNCU1RTX0ROVFNfSU5UICAgICAgICAgICAgICAgICgxIDw8IDIpCisjICBkZWZpbmUgV1VTQlNUU19FUlJfSU5UICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgZGVmaW5lIFdVU0JTVFNfSU5UICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgIGRlZmluZSBXVVNCU1RTX0lOVF9NQVNLICAgICAgICAgICAgICAgIDB4M2ZmCisKKyNkZWZpbmUgV1VTQklOVFIgICAgICAgICAgICAgMHgxMAorIyAgZGVmaW5lIFdVU0JJTlRSX0dFTl9DTURfRE9ORSAgICAgICAgICAgICAoMSA8PCA5KQorIyAgZGVmaW5lIFdVU0JJTlRSX0NIQU5fVElNRV9ST0xMT1ZFUiAgICAgICAoMSA8PCA4KQorIyAgZGVmaW5lIFdVU0JJTlRSX0ROVFNfT1ZFUkZMT1cgICAgICAgICAgICAoMSA8PCA3KQorIyAgZGVmaW5lIFdVU0JJTlRSX0JQU1RfQURKVVNUTUVOVF9DSEFOR0VEICAoMSA8PCA2KQorIyAgZGVmaW5lIFdVU0JJTlRSX0hPU1RfRVJSICAgICAgICAgICAgICAgICAoMSA8PCA1KQorIyAgZGVmaW5lIFdVU0JJTlRSX0FTWU5DX1NDSEVEX1NZTkNFRCAgICAgICAoMSA8PCA0KQorIyAgZGVmaW5lIFdVU0JJTlRSX1BFUklPRElDX1NDSEVEX1NZTkNFRCAgICAoMSA8PCAzKQorIyAgZGVmaW5lIFdVU0JJTlRSX0ROVFNfSU5UICAgICAgICAgICAgICAgICAoMSA8PCAyKQorIyAgZGVmaW5lIFdVU0JJTlRSX0VSUl9JTlQgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgZGVmaW5lIFdVU0JJTlRSX0lOVCAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgZGVmaW5lIFdVU0JJTlRSX0FMTCAweDNmZgorCisjZGVmaW5lIFdVU0JHRU5DTURTVFMgICAgICAgIDB4MTQKKyMgIGRlZmluZSBXVVNCR0VOQ01EU1RTX0FDVElWRSAoMSA8PCAzMSkKKyMgIGRlZmluZSBXVVNCR0VOQ01EU1RTX0VSUk9SICAoMSA8PCAyNCkKKyMgIGRlZmluZSBXVVNCR0VOQ01EU1RTX0lPQyAgICAoMSA8PCAyMykKKyMgIGRlZmluZSBXVVNCR0VOQ01EU1RTX01NQ0lFX0FERCAweDAxCisjICBkZWZpbmUgV1VTQkdFTkNNRFNUU19NTUNJRV9STSAgMHgwMgorIyAgZGVmaW5lIFdVU0JHRU5DTURTVFNfU0VUX01BUyAgIDB4MDMKKyMgIGRlZmluZSBXVVNCR0VOQ01EU1RTX0NIQU5fU1RPUCAweDA0CisjICBkZWZpbmUgV1VTQkdFTkNNRFNUU19SV1BfRU4gICAgMHgwNQorCisjZGVmaW5lIFdVU0JHRU5DTURQQVJBTVMgICAgIDB4MTgKKyNkZWZpbmUgV1VTQkdFTkFERFIgICAgICAgICAgMHgyMAorI2RlZmluZSBXVVNCQVNZTkNMSVNUQUREUiAgICAweDI4CisjZGVmaW5lIFdVU0JETlRTQlVGQUREUiAgICAgIDB4MzAKKyNkZWZpbmUgV1VTQkRFVklDRUlORk9BRERSICAgMHgzOAorCisjZGVmaW5lIFdVU0JTRVRTRUNLRVlDTUQgICAgIDB4NDAKKyMgIGRlZmluZSBXVVNCU0VUU0VDS0VZQ01EX1NFVCAgICAoMSA8PCAzMSkKKyMgIGRlZmluZSBXVVNCU0VUU0VDS0VZQ01EX0VSQVNFICAoMSA8PCAzMCkKKyMgIGRlZmluZSBXVVNCU0VUU0VDS0VZQ01EX0dUSyAgICAoMSA8PCA4KQorIyAgZGVmaW5lIFdVU0JTRVRTRUNLRVlDTURfSURYKGkpICgoaSkgPDwgMCkKKworI2RlZmluZSBXVVNCVEtJRCAgICAgICAgICAgICAweDQ0CisjZGVmaW5lIFdVU0JTRUNLRVkgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgV1VTQlBFUklPRElDTElTVEJBU0UgMHg1OAorI2RlZmluZSBXVVNCTUFTSU5ERVggICAgICAgICAweDYwCisKKyNkZWZpbmUgV1VTQkROVFNDVFJMICAgICAgICAgMHg2NAorIyAgZGVmaW5lIFdVU0JETlRTQ1RSTF9BQ1RJVkUgICAgICAoMSA8PCAzMSkKKyMgIGRlZmluZSBXVVNCRE5UU0NUUkxfSU5URVJWQUwoaSkgKChpKSA8PCA4KQorIyAgZGVmaW5lIFdVU0JETlRTQ1RSTF9TTE9UUyhzKSAgICAoKHMpIDw8IDApCisKKyNkZWZpbmUgV1VTQlRJTUUgICAgICAgICAgICAgMHg2OAorI2RlZmluZSBXVVNCQlBTVCAgICAgICAgICAgICAweDZjCisjZGVmaW5lIFdVU0JESUJVUERBVEVEICAgICAgIDB4NzAKKworI2VuZGlmIC8qICNpZm5kZWYgX1dIQ0lfV0hDSV9IQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvd3VzYi5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3d1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU0ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3d1c2IuYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIFdpcmVsZXNzIEhvc3QgQ29udHJvbGxlciAoV0hDKSBXVVNCIG9wZXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IvdW1jLmg+CisjZGVmaW5lIERfTE9DQUwgMQorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCisjaW5jbHVkZSAiLi4vLi4vd3VzYmNvcmUvd3VzYmhjLmgiCisKKyNpbmNsdWRlICJ3aGNkLmgiCisKKyNpZiBEX0xPQ0FMID49IDEKK3N0YXRpYyB2b2lkIGR1bXBfZGkoc3RydWN0IHdoYyAqd2hjLCBpbnQgaWR4KQoreworCXN0cnVjdCBkaV9idWZfZW50cnkgKmRpID0gJndoYy0+ZGlfYnVmW2lkeF07CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndoYy0+dW1jLT5kZXY7CisJY2hhciBidWZbMTI4XTsKKworCWJpdG1hcF9zY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgKHVuc2lnbmVkIGxvbmcgKilkaS0+YXZhaWxhYmlsaXR5X2luZm8sIFVXQl9OVU1fTUFTKTsKKworCWRfcHJpbnRmKDEsIGRldiwgIkRJWyVkXVxuIiwgaWR4KTsKKwlkX3ByaW50ZigxLCBkZXYsICIgIGF2YWlsYWJpbGl0eTogJXNcbiIsIGJ1Zik7CisJZF9wcmludGYoMSwgZGV2LCAiICAlYyVjIGtleSBpZHg6ICVkIGRldiBhZGRyOiAlZFxuIiwKKwkJIChkaS0+YWRkcl9zZWNfaW5mbyAmIFdIQ19ESV9TRUNVUkUpID8gJ1MnIDogJyAnLAorCQkgKGRpLT5hZGRyX3NlY19pbmZvICYgV0hDX0RJX0RJU0FCTEUpID8gJ0QnIDogJyAnLAorCQkgKGRpLT5hZGRyX3NlY19pbmZvICYgV0hDX0RJX0tFWV9JRFhfTUFTSykgPj4gOCwKKwkJIChkaS0+YWRkcl9zZWNfaW5mbyAmIFdIQ19ESV9ERVZfQUREUl9NQVNLKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGR1bXBfZGkoc3RydWN0IHdoYyAqd2hjLCBpbnQgaWR4KQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgd2hjX3VwZGF0ZV9kaShzdHJ1Y3Qgd2hjICp3aGMsIGludCBpZHgpCit7CisJaW50IG9mZnNldCA9IGlkeCAvIDMyOworCXUzMiBiaXQgPSAxIDw8IChpZHggJSAzMik7CisKKwlkdW1wX2RpKHdoYywgaWR4KTsKKworCWxlX3dyaXRlbChiaXQsIHdoYy0+YmFzZSArIFdVU0JESUJVUERBVEVEICsgb2Zmc2V0KTsKKworCXJldHVybiB3aGNpX3dhaXRfZm9yKCZ3aGMtPnVtYy0+ZGV2LAorCQkJICAgICB3aGMtPmJhc2UgKyBXVVNCRElCVVBEQVRFRCArIG9mZnNldCwgYml0LCAwLAorCQkJICAgICAxMDAsICJESSB1cGRhdGUiKTsKK30KKworLyoKKyAqIFdIQ0kgc3RhcnRzIGFuZCBzdG9wcyBNTUNzIGJhc2VkIG9uIHRoZXJlIGJlaW5nIGEgdmFsaWQgR1RLIHNvCisgKiB0aGVzZSBuZWVkIG9ubHkgc3RhcnQvc3RvcCB0aGUgYXN5bmNocm9ub3VzIGFuZCBwZXJpb2RpYyBzY2hlZHVsZXMuCisgKi8KKworaW50IHdoY193dXNiaGNfc3RhcnQoc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCXN0cnVjdCB3aGMgKndoYyA9IHd1c2JoY190b193aGMod3VzYmhjKTsKKworCWFzbF9zdGFydCh3aGMpOworCXB6bF9zdGFydCh3aGMpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2hjX3d1c2JoY19zdG9wKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlzdHJ1Y3Qgd2hjICp3aGMgPSB3dXNiaGNfdG9fd2hjKHd1c2JoYyk7CisKKwlwemxfc3RvcCh3aGMpOworCWFzbF9zdG9wKHdoYyk7Cit9CisKK2ludCB3aGNfbW1jaWVfYWRkKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggaW50ZXJ2YWwsIHU4IHJlcGVhdF9jbnQsCisJCSAgdTggaGFuZGxlLCBzdHJ1Y3Qgd3VpZV9oZHIgKnd1aWUpCit7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCXUzMiBwYXJhbXM7CisKKwlwYXJhbXMgPSAoaW50ZXJ2YWwgPDwgMjQpCisJCXwgKHJlcGVhdF9jbnQgPDwgMTYpCisJCXwgKHd1aWUtPmJMZW5ndGggPDwgOCkKKwkJfCBoYW5kbGU7CisKKwlyZXR1cm4gd2hjX2RvX2dlbmNtZCh3aGMsIFdVU0JHRU5DTURTVFNfTU1DSUVfQURELCBwYXJhbXMsIHd1aWUsIHd1aWUtPmJMZW5ndGgpOworfQorCitpbnQgd2hjX21tY2llX3JtKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggaGFuZGxlKQoreworCXN0cnVjdCB3aGMgKndoYyA9IHd1c2JoY190b193aGMod3VzYmhjKTsKKwl1MzIgcGFyYW1zOworCisJcGFyYW1zID0gaGFuZGxlOworCisJcmV0dXJuIHdoY19kb19nZW5jbWQod2hjLCBXVVNCR0VOQ01EU1RTX01NQ0lFX1JNLCBwYXJhbXMsIE5VTEwsIDApOworfQorCitpbnQgd2hjX2J3YV9zZXQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBzOCBzdHJlYW1faW5kZXgsIGNvbnN0IHN0cnVjdCB1d2JfbWFzX2JtICptYXNfYm0pCit7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCisJaWYgKHN0cmVhbV9pbmRleCA+PSAwKQorCQl3aGNfd3JpdGVfd3VzYmNtZCh3aGMsIFdVU0JDTURfV1VTQlNJX01BU0ssIFdVU0JDTURfV1VTQlNJKHN0cmVhbV9pbmRleCkpOworCisJcmV0dXJuIHdoY19kb19nZW5jbWQod2hjLCBXVVNCR0VOQ01EU1RTX1NFVF9NQVMsIDAsICh2b2lkICopbWFzX2JtLCBzaXplb2YoKm1hc19ibSkpOworfQorCitpbnQgd2hjX2Rldl9pbmZvX3NldChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCWludCBpZHggPSB3dXNiX2Rldi0+cG9ydF9pZHg7CisJc3RydWN0IGRpX2J1Zl9lbnRyeSAqZGkgPSAmd2hjLT5kaV9idWZbaWR4XTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2hjLT5tdXRleCk7CisKKwl1d2JfbWFzX2JtX2NvcHlfbGUoZGktPmF2YWlsYWJpbGl0eV9pbmZvLCAmd3VzYl9kZXYtPmF2YWlsYWJpbGl0eSk7CisJZGktPmFkZHJfc2VjX2luZm8gJj0gfihXSENfRElfRElTQUJMRSB8IFdIQ19ESV9ERVZfQUREUl9NQVNLKTsKKwlkaS0+YWRkcl9zZWNfaW5mbyB8PSBXSENfRElfREVWX0FERFIod3VzYl9kZXYtPmFkZHIpOworCisJcmV0ID0gd2hjX3VwZGF0ZV9kaSh3aGMsIGlkeCk7CisKKwltdXRleF91bmxvY2soJndoYy0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCB0aGUgbnVtYmVyIG9mIERldmljZSBOb3RpZmljYXRpb24gVGltZSBTbG90cyAoRE5UUykgYW5kIGVuYWJsZQorICogZGV2aWNlIG5vdGlmaWNhdGlvbnMuCisgKi8KK2ludCB3aGNfc2V0X251bV9kbnRzKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggaW50ZXJ2YWwsIHU4IHNsb3RzKQoreworCXN0cnVjdCB3aGMgKndoYyA9IHd1c2JoY190b193aGMod3VzYmhjKTsKKwl1MzIgZG50c2N0cmw7CisKKwlkbnRzY3RybCA9IFdVU0JETlRTQ1RSTF9BQ1RJVkUKKwkJfCBXVVNCRE5UU0NUUkxfSU5URVJWQUwoaW50ZXJ2YWwpCisJCXwgV1VTQkROVFNDVFJMX1NMT1RTKHNsb3RzKTsKKworCWxlX3dyaXRlbChkbnRzY3RybCwgd2hjLT5iYXNlICsgV1VTQkROVFNDVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdoY19zZXRfa2V5KHN0cnVjdCB3aGMgKndoYywgdTgga2V5X2luZGV4LCB1aW50MzJfdCB0a2lkLAorCQkgICAgICAgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5X3NpemUsIGJvb2wgaXNfZ3RrKQoreworCXVpbnQzMl90IHNldGtleWNtZDsKKwl1aW50MzJfdCBzZWNrZXlbNF07CisJaW50IGk7CisJaW50IHJldDsKKworCW1lbWNweShzZWNrZXksIGtleSwga2V5X3NpemUpOworCXNldGtleWNtZCA9IFdVU0JTRVRTRUNLRVlDTURfU0VUIHwgV1VTQlNFVFNFQ0tFWUNNRF9JRFgoa2V5X2luZGV4KTsKKwlpZiAoaXNfZ3RrKQorCQlzZXRrZXljbWQgfD0gV1VTQlNFVFNFQ0tFWUNNRF9HVEs7CisKKwlsZV93cml0ZWwodGtpZCwgd2hjLT5iYXNlICsgV1VTQlRLSUQpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWxlX3dyaXRlbChzZWNrZXlbaV0sIHdoYy0+YmFzZSArIFdVU0JTRUNLRVkgKyA0KmkpOworCWxlX3dyaXRlbChzZXRrZXljbWQsIHdoYy0+YmFzZSArIFdVU0JTRVRTRUNLRVlDTUQpOworCisJcmV0ID0gd2hjaV93YWl0X2Zvcigmd2hjLT51bWMtPmRldiwgd2hjLT5iYXNlICsgV1VTQlNFVFNFQ0tFWUNNRCwKKwkJCSAgICBXVVNCU0VUU0VDS0VZQ01EX1NFVCwgMCwgMTAwLCAic2V0IGtleSIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB3aGNfc2V0X3B0ayAtIHNldCB0aGUgUFRLIHRvIHVzZSBmb3IgYSBkZXZpY2UuCisgKgorICogVGhlIGluZGV4IGludG8gdGhlIGtleSB0YWJsZSBmb3IgdGhpcyBQVEsgaXMgdGhlIHNhbWUgYXMgdGhlCisgKiBkZXZpY2UncyBwb3J0IGluZGV4LgorICovCitpbnQgd2hjX3NldF9wdGsoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBwb3J0X2lkeCwgdTMyIHRraWQsCisJCWNvbnN0IHZvaWQgKnB0aywgc2l6ZV90IGtleV9zaXplKQoreworCXN0cnVjdCB3aGMgKndoYyA9IHd1c2JoY190b193aGMod3VzYmhjKTsKKwlzdHJ1Y3QgZGlfYnVmX2VudHJ5ICpkaSA9ICZ3aGMtPmRpX2J1Zltwb3J0X2lkeF07CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndoYy0+bXV0ZXgpOworCisJaWYgKHB0aykgeworCQlyZXQgPSB3aGNfc2V0X2tleSh3aGMsIHBvcnRfaWR4LCB0a2lkLCBwdGssIGtleV9zaXplLCBmYWxzZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlkaS0+YWRkcl9zZWNfaW5mbyAmPSB+V0hDX0RJX0tFWV9JRFhfTUFTSzsKKwkJZGktPmFkZHJfc2VjX2luZm8gfD0gV0hDX0RJX1NFQ1VSRSB8IFdIQ19ESV9LRVlfSURYKHBvcnRfaWR4KTsKKwl9IGVsc2UKKwkJZGktPmFkZHJfc2VjX2luZm8gJj0gfldIQ19ESV9TRUNVUkU7CisKKwlyZXQgPSB3aGNfdXBkYXRlX2RpKHdoYywgcG9ydF9pZHgpOworb3V0OgorCW11dGV4X3VubG9jaygmd2hjLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB3aGNfc2V0X2d0ayAtIHNldCB0aGUgR1RLIGZvciBzdWJzZXF1ZW50IGJyb2FkY2FzdCBwYWNrZXRzCisgKgorICogVGhlIEdUSyBpcyBzdG9yZWQgaW4gdGhlIGxhc3QgZW50cnkgaW4gdGhlIGtleSB0YWJsZSAodGhlIHByZXZpb3VzCisgKiBOX0RFVklDRVMgZW50cmllcyBhcmUgZm9yIHRoZSBwZXItZGV2aWNlIFBUS3MpLgorICovCitpbnQgd2hjX3NldF9ndGsoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1MzIgdGtpZCwKKwkJY29uc3Qgdm9pZCAqZ3RrLCBzaXplX3Qga2V5X3NpemUpCit7CisJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3aGMtPm11dGV4KTsKKworCXJldCA9IHdoY19zZXRfa2V5KHdoYywgd2hjLT5uX2RldmljZXMsIHRraWQsIGd0aywga2V5X3NpemUsIHRydWUpOworCisJbXV0ZXhfdW5sb2NrKCZ3aGMtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB3aGNfc2V0X2NsdXN0ZXJfaWQoc3RydWN0IHdoYyAqd2hjLCB1OCBiY2lkKQoreworCXdoY193cml0ZV93dXNiY21kKHdoYywgV1VTQkNNRF9CQ0lEX01BU0ssIFdVU0JDTURfQkNJRChiY2lkKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IDBmYjExNGMuLjg3OGM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0zNTUsMTMgKzM1NSwxNCBAQAogCWlmIChtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PjApCiAJewogCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7Ci0JCWVyciAoInRpbWVvdXQgd2FpdGluZyBmb3IgY2FtZXJhLiIpOworCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBjYW1lcmEuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkKIAlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQogCXsKLQkJd2FybiAoIkNhbWVyYSBnZXRzIGRpc2Nvbm5lY3RlZCBkdXJpbmcgd2FpdGluZyBmb3IgaXJxLiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZGM4MDA6IENhbWVyYSBnZXRzIGRpc2Nvbm5lY3RlZCAiCisJCSAgICAgICAiZHVyaW5nIHdhaXRpbmcgZm9yIGlycS5cbiIpOwogCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7CiAJCXJldHVybiAtMjsKIAl9CkBAIC0zNzksNyArMzgwLDggQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAlpZiAoc3RhdHVzICE9IDApCi0JCWVyciAoIndyaXRpbmcgY29tbWFuZCBmYWlscyAoc3RhdHVzPSVpKSIsIHN0YXR1cyk7CisJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkid3JpdGluZyBjb21tYW5kIGZhaWxzIChzdGF0dXM9JWkpXG4iLCBzdGF0dXMpOwogCWVsc2UKIAkJbWRjODAwLT5zdGF0ZT1SRUFEWTsKIAltZGM4MDAtPndyaXR0ZW4gPSAxOwpAQCAtNDA2LDcgKzQwOCw4IEBACiAJCQltZGM4MDAtPnN0YXRlPVJFQURZOwogCQl9CiAJfSBlbHNlIHsKLQkJZXJyICgicmVxdWVzdCBieXRlcyBmYWlscyAoc3RhdHVzOiVpKSIsIHN0YXR1cyk7CisJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkicmVxdWVzdCBieXRlcyBmYWlscyAoc3RhdHVzOiVpKVxuIiwgc3RhdHVzKTsKIAl9CiAJbWRjODAwLT5kb3dubG9hZGVkID0gMTsKIAl3YWtlX3VwICgmbWRjODAwLT5kb3dubG9hZF93YWl0KTsKQEAgLTQ0MywxMyArNDQ2LDE0IEBACiAKIAlpZiAobWRjODAwLT5kZXYgIT0gTlVMTCkKIAl7Ci0JCXdhcm4gKCJvbmx5IG9uZSBNdXN0ZWsgTURDODAwIGlzIHN1cHBvcnRlZC4iKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgIm9ubHkgb25lIE11c3RlayBNREM4MDAgaXMgc3VwcG9ydGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCiAJewotCQllcnIgKCJwcm9iZSBmYWlscyAtPiB3cm9uZyBOdW1iZXIgb2YgQ29uZmlndXJhdGlvbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkicHJvYmUgZmFpbHMgLT4gd3JvbmcgTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaW50Zl9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CkBAIC00NjEsNyArNDY1LDcgQEAKIAkJfHwgKCBpbnRmX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50cyAhPSA0KQogCSkKIAl7Ci0JCWVyciAoInByb2JlIGZhaWxzIC0+IHdyb25nIEludGVyZmFjZSIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJwcm9iZSBmYWlscyAtPiB3cm9uZyBJbnRlcmZhY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQ4MiwxOSArNDg2LDE5IEBACiAJCX0KIAkJaWYgKG1kYzgwMC0+ZW5kcG9pbnRbaV0gPT0gLTEpCiAJCXsKLQkJCWVyciAoInByb2JlIGZhaWxzIC0+IFdyb25nIEVuZHBvaW50cy4iKTsKKwkJCWRldl9lcnIoJmludGYtPmRldiwgInByb2JlIGZhaWxzIC0+IFdyb25nIEVuZHBvaW50cy5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKIAotCWluZm8gKCJGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi4iKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRm91bmQgTXVzdGVrIE1EQzgwMCBvbiBVU0IuXG4iKTsKIAogCW11dGV4X2xvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZtZGM4MDBfY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01NzAsNyArNTc0LDcgQEAKIAkJbWRjODAwLT5kZXYgPSBOVUxMOwogCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCX0KLQlpbmZvICgiTXVzdGVrIE1EQzgwMCBkaXNjb25uZWN0ZWQgZnJvbSBVU0IuIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIk11c3RlayBNREM4MDAgZGlzY29ubmVjdGVkIGZyb20gVVNCLlxuIik7CiB9CiAKIApAQCAtNjQ0LDcgKzY0OCw4IEBACiAJbWRjODAwLT5pcnFfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLT5pcnFfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVyciAoInJlcXVlc3QgVVNCIGlycSBmYWlscyAoc3VibWl0X3JldHZhbD0laSkuIiwgcmV0dmFsKTsKKwkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCSJyZXF1ZXN0IFVTQiBpcnEgZmFpbHMgKHN1Ym1pdF9yZXR2YWw9JWkpLlxuIiwgcmV0dmFsKTsKIAkJZXJybiA9IC1FSU87CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KQEAgLTcwMSw3ICs3MDYsOCBAQAogCX0KIAlpZiAobWRjODAwLT5zdGF0ZSA9PSBXT1JLSU5HKQogCXsKLQkJd2FybiAoIklsbGVnYWwgU3RhdGUgXCJ3b3JraW5nXCIgcmVhY2hlZCBkdXJpbmcgcmVhZCA/ISIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZGM4MDA6IElsbGVnYWwgU3RhdGUgXCJ3b3JraW5nXCIiCisJCSAgICAgICAicmVhY2hlZCBkdXJpbmcgcmVhZCA/IVxuIik7CiAJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC03MzMsNyArNzM5LDkgQEAKIAkJCQltZGM4MDAtPmRvd25sb2FkX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CiAJCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKG1kYzgwMC0+ZG93bmxvYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAocmV0dmFsKSB7Ci0JCQkJCWVyciAoIkNhbid0IHN1Ym1pdCBkb3dubG9hZCB1cmIgKHJldHZhbD0laSkiLHJldHZhbCk7CisJCQkJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkJCQkiQ2FuJ3Qgc3VibWl0IGRvd25sb2FkIHVyYiAiCisJCQkJCQkiKHJldHZhbD0laSlcbiIsIHJldHZhbCk7CiAJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJcmV0dXJuIGxlbi1sZWZ0OwogCQkJCX0KQEAgLTc0Miw3ICs3NTAsMTAgQEAKIAkJCQltZGM4MDAtPmRvd25sb2FkZWQgPSAwOwogCQkJCWlmIChtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzICE9IDApCiAJCQkJewotCQkJCQllcnIgKCJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzIChzdGF0dXM9JWkpIixtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzKTsKKwkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJCSJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzICIKKwkJCQkJCSIoc3RhdHVzPSVpKVxuIiwKKwkJCQkJCW1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMpOwogCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCXJldHVybiBsZW4tbGVmdDsKIAkJCQl9CkBAIC04MzksNyArODUwLDggQEAKIAogCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKQogCQkJewotCQkJCWVyciAoIkNhbWVyYSBkaWRuJ3QgZ2V0IHJlYWR5LlxuIik7CisJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJIkNhbWVyYSBkaWRuJ3QgZ2V0IHJlYWR5LlxuIik7CiAJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtODUxLDcgKzg2Myw5IEBACiAJCQltZGM4MDAtPndyaXRlX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CiAJCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLT53cml0ZV91cmIsIEdGUF9LRVJORUwpOwogCQkJaWYgKHJldHZhbCkgewotCQkJCWVyciAoInN1Ym1pdHRpbmcgd3JpdGUgdXJiIGZhaWxzIChyZXR2YWw9JWkpIiwgcmV0dmFsKTsKKwkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkic3VibWl0dGluZyB3cml0ZSB1cmIgZmFpbHMgIgorCQkJCQkiKHJldHZhbD0laSlcbiIsIHJldHZhbCk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtODcwLDcgKzg4NCw5IEBACiAJCQkJY2FzZSAweDNlOiAvKiBUYWtlIHNob3QgaW4gRmluZSBNb2RlIChXQ2FtIE1vZGUpICovCiAJCQkJCWlmIChtZGM4MDAtPnBpY19sZW4gPCAwKQogCQkJCQl7Ci0JCQkJCQllcnIgKCJjYWxsIDB4MDcgYmVmb3JlIDB4MDUsMHgzZSIpOworCQkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJCQkiY2FsbCAweDA3IGJlZm9yZSAiCisJCQkJCQkJIjB4MDUsMHgzZVxuIik7CiAJCQkJCQltZGM4MDAtPnN0YXRlPVJFQURZOwogCQkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQkJcmV0dXJuIC1FSU87CkBAIC04OTAsNyArOTA2LDcgQEAKIAogCQkJCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMSxUT19SRUFEX0ZST01fSVJRKSkKIAkJCQkJCXsKLQkJCQkJCQllcnIgKCJyZXF1ZXN0aW5nIGFuc3dlciBmcm9tIGlycSBmYWlscyIpOworCQkJCQkJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsICJyZXF1ZXN0aW5nIGFuc3dlciBmcm9tIGlycSBmYWlsc1xuIik7CiAJCQkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQkJCXJldHVybiAtRUlPOwogCQkJCQkJfQpAQCAtOTE4LDcgKzkzNCw3IEBACiAJCQkJCXsKIAkJCQkJCWlmIChtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKDAsVE9fREVGQVVMVF9DT01NQU5EKSkKIAkJCQkJCXsKLQkJCQkJCQllcnIgKCJDb21tYW5kIFRpbWVvdXQuIik7CisJCQkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwgIkNvbW1hbmQgVGltZW91dC5cbiIpOwogCQkJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQkJCX0KQEAgLTEwMTgsNyArMTAzNCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBjbGVhbnVwX29uX2ZhaWw7CiAKLQlpbmZvIChEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTAyOCw3ICsxMDQ1LDcgQEAKIAogCWlmIChtZGM4MDAgIT0gTlVMTCkKIAl7Ci0JCWVyciAoImNhbid0IGFsbG9jIG1lbW9yeSEiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGM4MDA6IGNhbid0IGFsbG9jIG1lbW9yeSFcbiIpOwogCiAJCWtmcmVlKG1kYzgwMC0+ZG93bmxvYWRfdXJiX2J1ZmZlcik7CiAJCWtmcmVlKG1kYzgwMC0+d3JpdGVfdXJiX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKaW5kZXggNGVhNTBlMC4uZTQ2M2RiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwpAQCAtNDIsNiArNDIsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhZHV0dXguCiAKK2NvbmZpZyBVU0JfU0VWU0VHCisJdHJpc3RhdGUgIlVTQiA3LVNlZ21lbnQgTEVEIERpc3BsYXkiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgVVNCIDctU2VnbWVudCBEaXNwbGF5IGJ5IERlbGNvbQorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JzZXZzZWcuCisKIGNvbmZpZyBVU0JfUklPNTAwCiAJdHJpc3RhdGUgIlVTQiBEaWFtb25kIFJpbzUwMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCkBAIC0yNzEsMyArMjgwLDE4IEBACiAJICBUaGUgZmlybXdhcmUgZm9yIHRoaXMgZHJpdmVyIG11c3QgYmUgZXh0cmFjdGVkIGZyb20gdGhlIE1hY09TCiAJICBkcml2ZXIgYmVmb3JlaGFuZC4gVG9vbHMgZm9yIGRvaW5nIHNvIGFyZSBhdmFpbGFibGUgYXQKIAkgIGh0dHA6Ly9iZXJzYWNlMDMuZnJlZS5mcgorCitjb25maWcgVVNCX1ZTVAorCXRyaXN0YXRlICJVU0IgVlNUIGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciBWZXJuaWVyIFNvZnR3YXJlIFRlY2hub2xvZ2llcworCSAgYnVsayB1c2IgZGV2aWNlcyBzdWNoIGFzIHRoZWlyIE9jZWFuLU9wdGljcyBzcGVjdHJvbWV0ZXJzIG9yCisJICBMYWJxdWVzdC4KKwkgIEl0IGlzIGEgYnVsayBjaGFubmVsIGRyaXZlciB3aXRoIGNvbmZpZ3VyYWJsZSByZWFkIGFuZCB3cml0ZQorCSAgdGltZW91dHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZzdHVzYi4KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQppbmRleCA0NWI0ZTEyLi4xMzM0ZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDggQEAKIG9iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IHVzYnRlc3Qubwogb2JqLSQoQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUikJKz0gdHJhbmNldmlicmF0b3Iubwogb2JqLSQoQ09ORklHX1VTQl9VU1M3MjApCSs9IHVzczcyMC5vCitvYmotJChDT05GSUdfVVNCX1NFVlNFRykJKz0gdXNic2V2c2VnLm8KK29iai0kKENPTkZJR19VU0JfVlNUKQkJKz0gdnN0dXNiLm8KIAogb2JqLSQoQ09ORklHX1VTQl9TSVNVU0JWR0EpCSs9IHNpc3VzYnZnYS8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKaW5kZXggOTY1ZjZlYS4uN2I2OTIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCkBAIC0yODMsOCArMjgzLDggQEAKIAogCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmYWR1X2RyaXZlciwgc3VibWlub3IpOwogCWlmICghaW50ZXJmYWNlKSB7Ci0JCWVycigiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdWJtaW5vcik7CisJCXByaW50ayhLRVJOX0VSUiAiYWR1dHV4OiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgIgorCQkgICAgICAgIm1pbm9yICVkXG4iLCBfX2Z1bmNfXywgc3VibWlub3IpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGV4aXRfbm9fZGV2aWNlOwogCX0KQEAgLTQxNiw3ICs0MTYsOCBAQAogCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwogCWlmIChkZXYtPnVkZXYgPT0gTlVMTCkgewogCQlyZXR2YWwgPSAtRU5PREVWOwotCQllcnIoIk5vIGRldmljZSBvciBkZXZpY2UgdW5wbHVnZ2VkICVkIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhZHV0dXg6IE5vIGRldmljZSBvciBkZXZpY2UgdW5wbHVnZ2VkICVkXG4iLAorCQkgICAgICAgcmV0dmFsKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtNTc2LDcgKzU3Nyw4IEBACiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCiAJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWQiLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgImFkdXR1eDogTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWRcbiIsCisJCSAgICAgICByZXR2YWwpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC02NDUsNyArNjQ3LDggQEAKIAkJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X291dF91cmIsIEdGUF9LRVJORUwpOwogCQkJaWYgKHJldHZhbCA8IDApIHsKIAkJCQlkZXYtPm91dF91cmJfZmluaXNoZWQgPSAxOwotCQkJCWVycigiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9vdXRfdXJiICVkIiwgcmV0dmFsKTsKKwkJCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIkNvdWxkbid0IHN1Ym1pdCAiCisJCQkJCSJpbnRlcnJ1cHRfb3V0X3VyYiAlZFxuIiwgcmV0dmFsKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAKQEAgLTg5MCwxMyArODkzLDE0IEBACiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYWR1X2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuICIKLQkJICAgICJFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCQlwcmludGsoS0VSTl9FUlIgInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18KKwkJICAgICAgICIgZHJpdmVyLiBFcnJvciBudW1iZXIgJWRcbiIsIHJlc3VsdCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpbmZvKCJhZHV0dXggIiBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOwotCWluZm8oImFkdXR1eCBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyLiBVc2UgYXQgeW91ciBvd24gcmlzayIpOworCXByaW50ayhLRVJOX0lORk8gImFkdXR1eCAiIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJhZHV0dXggaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlci4gIgorCSAgICAgICAiVXNlIGF0IHlvdXIgb3duIHJpc2tcbiIpOwogCiBleGl0OgogCWRiZygyLCIgJXMgOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwppbmRleCBhMDc2YzI0Li4xZDhlMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKQEAgLTEzMCw3ICsxMzAsOCBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwZGF0YS0+dXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQlkZXZfZXJyKCZwZGF0YS0+dWRldi0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAogCQkJX19mdW5jX18sIHJldHZhbCk7CiAJfQogfQpAQCAtMjIwLDcgKzIyMSw3IEBACiAJCX0KIAl9CiAJaWYgKCFpbnRfaW5fZW5kcG9pbnRBZGRyKSB7Ci0JCWVycigiQ291bGQgbm90IGZpbmQgaW50LWluIGVuZHBvaW50Iik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJDb3VsZCBub3QgZmluZCBpbnQtaW4gZW5kcG9pbnRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTIyOCw3ICsyMjksNyBAQAogCXBkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFwcGxlZGlzcGxheSksIEdGUF9LRVJORUwpOwogCWlmICghcGRhdGEpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI0MSw4ICsyNDIsOCBAQAogCXBkYXRhLT5tc2dkYXRhID0ga21hbGxvYyhBQ0RfTVNHX0JVRkZFUl9MRU4sIEdGUF9LRVJORUwpOwogCWlmICghcGRhdGEtPm1zZ2RhdGEpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEFsbG9jYXRpbmcgYnVmZmVyIGZvciBjb250cm9sIG1lc3NhZ2VzICIKLQkJCSJmYWlsZWQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwKKwkJCSJBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgY29udHJvbCBtZXNzYWdlcyBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjUwLDcgKzI1MSw3IEBACiAJcGRhdGEtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YS0+dXJiKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBBbGxvY2F0aW5nIFVSQiBmYWlsZWQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIkFsbG9jYXRpbmcgVVJCIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNTksNyArMjYwLDcgQEAKIAkJR0ZQX0tFUk5FTCwgJnBkYXRhLT51cmItPnRyYW5zZmVyX2RtYSk7CiAJaWYgKCFwZGF0YS0+dXJiZGF0YSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQllcnIoImFwcGxlZGlzcGxheTogQWxsb2NhdGluZyBVUkIgYnVmZmVyIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LCAiQWxsb2NhdGluZyBVUkIgYnVmZmVyIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNzAsNyArMjcxLDcgQEAKIAkJcGRhdGEsIDEpOwogCWlmICh1c2Jfc3VibWl0X3VyYihwZGF0YS0+dXJiLCBHRlBfS0VSTkVMKSkgewogCQlyZXR2YWwgPSAtRUlPOwotCQllcnIoImFwcGxlZGlzcGxheTogU3VibWl0dGluZyBVUkIgZmFpbGVkIik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJTdWJtaXR0aW5nIFVSQiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjgwLDcgKzI4MSw3IEBACiAJcGRhdGEtPmJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihibF9uYW1lLCBOVUxMLCBwZGF0YSwKIAkJCQkJCSZhcHBsZWRpc3BsYXlfYmxfZGF0YSk7CiAJaWYgKElTX0VSUihwZGF0YS0+YmQpKSB7Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LCAiQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjkxLDcgKzI5Miw4IEBACiAKIAlpZiAoYnJpZ2h0bmVzcyA8IDApIHsKIAkJcmV0dmFsID0gYnJpZ2h0bmVzczsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEVycm9yIHdoaWxlIGdldHRpbmcgaW5pdGlhbCBicmlnaHRuZXNzOiAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsCisJCQkiRXJyb3Igd2hpbGUgZ2V0dGluZyBpbml0aWFsIGJyaWdodG5lc3M6ICVkXG4iLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMzE0LDcgKzMxNiw3IEBACiAJCQkJCXBkYXRhLT51cmJkYXRhLCBwZGF0YS0+dXJiLT50cmFuc2Zlcl9kbWEpOwogCQkJdXNiX2ZyZWVfdXJiKHBkYXRhLT51cmIpOwogCQl9Ci0JCWlmIChwZGF0YS0+YmQpCisJCWlmIChwZGF0YS0+YmQgJiYgIUlTX0VSUihwZGF0YS0+YmQpKQogCQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5iZCk7CiAJCWtmcmVlKHBkYXRhLT5tc2dkYXRhKTsKIAl9CkBAIC0zNTIsNyArMzU0LDcgQEAKIHsKIAl3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJhcHBsZWRpc3BsYXkiKTsKIAlpZiAoIXdxKSB7Ci0JCWVycigiQ291bGQgbm90IGNyZWF0ZSB3b3JrIHF1ZXVlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhcHBsZWRpc3BsYXk6IENvdWxkIG5vdCBjcmVhdGUgd29yayBxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jIGIvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCmluZGV4IDkzNzk0MDQuLjU3MjBiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMKQEAgLTI3OCw5ICsyNzgsOSBAQAogCiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOwotCWlmIChyZXN1bHQpIHsKLQkJZXJyKCJGdW5jdGlvbiB1c2JfcmVnaXN0ZXIgZmFpbGVkISBFcnJvciBudW1iZXI6ICVkXG4iLCByZXN1bHQpOwotCX0KKwlpZiAocmVzdWx0KQorCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCEgIgorCQkgICAgICAgIkVycm9yIG51bWJlcjogJWRcbiIsIHJlc3VsdCk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwppbmRleCAxY2Q5ZTdlLi40ZmIzYzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwpAQCAtNDIyLDEzICs0MjIsMTQgQEAKIAlpbnQgcmVzdWx0OwogCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjeXRoZXJtX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCkgCi0JewkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IHVzYl9yZWdpc3RlciBmYWlsZWQhICIKKwkJICAgICAgICJFcnJvciBudW1iZXI6ICVkXG4iLCByZXN1bHQpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKaW5kZXggNGI5OTRhMC4uZTc2MmJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwpAQCAtNTAsNyArNTAsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9ICBrbWVtZHVwKGRhdGEsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWJ1ZmZlcikgewotCQllcnIoImVtaTI2OiBrbWFsbG9jKCVkKSBmYWlsZWQuIiwgbGVuZ3RoKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBsZW5ndGgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogTm90ZTogdXNiX2NvbnRyb2xfbXNnIHJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3Igb3IgbGVuZ3RoIG9mIHRoZQpAQCAtNjQsMTEgKzY0LDExIEBACiBzdGF0aWMgaW50IGVtaTI2X3NldF9yZXNldCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpCiB7CiAJaW50IHJlc3BvbnNlOwotCWluZm8oIiVzIC0gJWQiLCBfX2Z1bmNfXywgcmVzZXRfYml0KTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICIlcyAtICVkXG4iLCBfX2Z1bmNfXywgcmVzZXRfYml0KTsKIAkvKiBwcmludGsoS0VSTl9ERUJVRyAiJXMgLSAlZCIsIF9fZnVuY19fLCByZXNldF9iaXQpOyAqLwogCXJlc3BvbnNlID0gZW1pMjZfd3JpdGVtZW1vcnkgKGRldiwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKIAlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCWVycigiZW1pMjY6IHNldF9yZXNldCAoJWQpIGZhaWxlZCIsIHJlc2V0X2JpdCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAic2V0X3Jlc2V0ICglZCkgZmFpbGVkXG4iLCByZXNldF9iaXQpOwogCX0KIAlyZXR1cm4gcmVzcG9uc2U7CiB9CkBAIC04OCw3ICs4OCw4IEBACiAKIAlidWYgPSBrbWFsbG9jKEZXX0xPQURfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJZXJyKCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19mdW5jX18sIC1FTk9NRU0pOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCAtRU5PTUVNKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byB3cmFwZXJyOwogCX0KQEAgLTEwNiwxNCArMTA3LDE2IEBACiAJCQkJICAgICZkZXYtPmRldik7CiAJaWYgKGVycikgewogCW5vZnc6Ci0JCWVyciggIiVzIC0gcmVxdWVzdF9maXJtd2FyZSgpIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIHJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gd3JhcGVycjsKIAl9CiAKIAkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLwogCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMSk7CiAJaWYgKGVyciA8IDApIHsKLQkJZXJyKCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19mdW5jX18sIGVycik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKIAkJZ290byB3cmFwZXJyOwogCX0KIApAQCAtMjU0LDcgKzI1Nyw3IEBACiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKLQlpbmZvKCIlcyBzdGFydCIsIF9fZnVuY19fKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMgc3RhcnRcbiIsIF9fZnVuY19fKTsKIAogCWVtaTI2X2xvYWRfZmlybXdhcmUoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCmluZGV4IDVkODU5ZGUuLjYwMmVlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKQEAgLTczLDcgKzczLDcgQEAKIHN0YXRpYyBpbnQgZW1pNjJfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKIHsKIAlpbnQgcmVzcG9uc2U7Ci0JaW5mbygiJXMgLSAlZCIsIF9fZnVuY19fLCByZXNldF9iaXQpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIC0gJWRcbiIsIF9fZnVuY19fLCByZXNldF9iaXQpOwogCQogCXJlc3BvbnNlID0gZW1pNjJfd3JpdGVtZW1vcnkgKGRldiwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKIAlpZiAocmVzcG9uc2UgPCAwKSB7CkBAIC0yNzEsNyArMjcxLDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlkZXZfZGJnKCZpbnRmLT5kZXYsICJlbWk2Ml9wcm9iZVxuIik7CiAKLQlpbmZvKCIlcyBzdGFydCIsIF9fZnVuY19fKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMgc3RhcnRcbiIsIF9fZnVuY19fKTsKIAogCWVtaTYyX2xvYWRfZmlybXdhcmUoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggOTdjMjgwOS4uNzlhNzY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC02OTgsNyArNjk4LDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDUwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCA1MCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGVmdCA9IHBhY2tldF9ieXRlcyAtIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2xhc3QgPSAxOwpAQCAtOTYwLDcgKzk2MCw3IEBACiAgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDUwMCk7CiAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07CiAgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7CiAgICAgICAgICAgICAgICAgaW50IG0gPSBwYWNrZXRfYnl0ZXM7CkBAIC0xODgwLDcgKzE4ODAsNyBAQAogICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZidWxrcGlwZShmdGRpLT51ZGV2LCBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIsIGZ0ZGktPmJ1bGtfaW5fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCAxMDApOwogICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwpAQCAtMjA2Nyw3ICsyMDY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIsIGZ0ZGktPmJ1bGtfaW5fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgNTAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlhZ1szMCAqMyArIDRdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKQEAgLTIxNzYsNyArMjE3Niw3IEBACiAgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCAxMDAwKTsKICAgICAgICAgICAgICAgICBpZiAocGFja2V0X2J5dGVzID4gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKaW5kZXggNGJjZjdmYi4uNmRhODg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKQEAgLTQwMywxNCArNDAzLDE1IEBACiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAl9CiAKLQlpbmZvKCIlcyBkaXNjb25uZWN0ZWQiLCBEUklWRVJfREVTQyk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgdXNiX2lkbW91c2VfaW5pdCh2b2lkKQogewogCWludCByZXN1bHQ7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmlkbW91c2VfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCmluZGV4IDkzNzAzMjYuLmFiMGYzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtODUxLDkgKzg1MSw4IEBACiAKIAlkYmcoMiwgIiVzOiBlbnRlciIsIF9fZnVuY19fKTsKIAotCWlmICh1ZGV2ID09IE5VTEwpIHsKLQkJaW5mbyAoInVkZXYgaXMgTlVMTC4iKTsKLQl9CisJaWYgKHVkZXYgPT0gTlVMTCkKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAidWRldiBpcyBOVUxMLlxuIik7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KIApAQCAtOTU0LDcgKzk1Myw5IEBACiAJZGV2LT5taW5vciA9IGludGVyZmFjZS0+bWlub3I7CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JaW5mbyAoIkxFR08gVVNCIFRvd2VyICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWQiLCAoZGV2LT5taW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGRldi0+bWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgIgorCQkgIiVkIG1pbm9yICVkXG4iLCAoZGV2LT5taW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpLAorCQkgVVNCX01BSk9SLCBkZXYtPm1pbm9yKTsKIAogCS8qIGdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiBhbmQgbG9nIGl0ICovCiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LApAQCAtOTcxLDEwICs5NzIsMTAgQEAKIAkJcmV0dmFsID0gcmVzdWx0OwogCQlnb3RvIGVycm9yOwogCX0KLQlpbmZvKCJMRUdPIFVTQiBUb3dlciBmaXJtd2FyZSB2ZXJzaW9uIGlzICVkLiVkIGJ1aWxkICVkIiwKLQkgICAgIGdldF92ZXJzaW9uX3JlcGx5Lm1ham9yLAotCSAgICAgZ2V0X3ZlcnNpb25fcmVwbHkubWlub3IsCi0JICAgICBsZTE2X3RvX2NwdShnZXRfdmVyc2lvbl9yZXBseS5idWlsZF9ubykpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyIGZpcm13YXJlIHZlcnNpb24gaXMgJWQuJWQgIgorCQkgImJ1aWxkICVkXG4iLCBnZXRfdmVyc2lvbl9yZXBseS5tYWpvciwKKwkJIGdldF92ZXJzaW9uX3JlcGx5Lm1pbm9yLAorCQkgbGUxNl90b19jcHUoZ2V0X3ZlcnNpb25fcmVwbHkuYnVpbGRfbm8pKTsKIAogCiBleGl0OgpAQCAtMTAyMSw3ICsxMDIyLDggQEAKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCX0KIAotCWluZm8oIkxFR08gVVNCIFRvd2VyICMlZCBub3cgZGlzY29ubmVjdGVkIiwgKG1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSkpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLAorCQkgKG1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSkpOwogCiAJZGJnKDIsICIlczogbGVhdmUiLCBfX2Z1bmNfXyk7CiB9CkBAIC0xMDQ2LDcgKzEwNDgsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIGV4aXQ6CiAJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fZnVuY19fLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKaW5kZXggMjQ4YTEyYS4uZGViOTViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCkBAIC04OSw3ICs4OSw3IEBACiAKIAltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKIAotCWluZm8oIlJpbyBvcGVuZWQuIik7CisJZGV2X2luZm8oJnJpby0+cmlvX2Rldi0+ZGV2LCAiUmlvIG9wZW5lZC5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogCXJpby0+aXNvcGVuID0gMDsKIAotCWluZm8oIlJpbyBjbG9zZWQuIik7CisJZGV2X2luZm8oJnJpby0+cmlvX2Rldi0+ZGV2LCAiUmlvIGNsb3NlZC5cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00NTEsNyArNDUxLDcgQEAKIAlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOwogCWludCByZXR2YWw7CiAKLQlpbmZvKCJVU0IgUmlvIGZvdW5kIGF0IGFkZHJlc3MgJWQiLCBkZXYtPmRldm51bSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiBSaW8gZm91bmQgYXQgYWRkcmVzcyAlZFxuIiwgZGV2LT5kZXZudW0pOwogCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CiAJaWYgKHJldHZhbCkgewpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCWtmcmVlKHJpby0+aWJ1Zik7CiAJCWtmcmVlKHJpby0+b2J1Zik7CiAKLQkJaW5mbygiVVNCIFJpbyBkaXNjb25uZWN0ZWQuIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUmlvIGRpc2Nvbm5lY3RlZC5cbiIpOwogCiAJCXJpby0+cHJlc2VudCA9IDA7CiAJCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOwpAQCAtNTMxLDcgKzUzMSw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogb3V0OgogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMgYi9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKaW5kZXggMDMzNjhlZC4uMmUxNDEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYwpAQCAtMTQ0LDcgKzE0NCw4IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCmluZGV4IDJkYjQyMjguLmUwZmY5Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiAKIAlpZiAobGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHgwMDAxKSB7Ci0JCXdhcm4oS0VSTl9JTkZPICJVU0JMQ0QgbW9kZWwgbm90IHN1cHBvcnRlZC4iKTsKKwkJZGV2X3dhcm4oJmludGVyZmFjZS0+ZGV2LCAiVVNCTENEIG1vZGVsIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCQpAQCAtMzU5LDEyICszNTksMTMgQEAKIAogCWkgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKIAotCWluZm8oIlVTQkxDRCBWZXJzaW9uICUxZCUxZC4lMWQlMWQgZm91bmQgYXQgYWRkcmVzcyAlZCIsCi0JCShpICYgMHhGMDAwKT4+MTIsKGkgJiAweEYwMCk+PjgsKGkgJiAweEYwKT4+NCwoaSAmIDB4RiksCi0JCWRldi0+dWRldi0+ZGV2bnVtKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0JMQ0QgVmVyc2lvbiAlMWQlMWQuJTFkJTFkIGZvdW5kICIKKwkJICJhdCBhZGRyZXNzICVkXG4iLCAoaSAmIDB4RjAwMCk+PjEyLCAoaSAmIDB4RjAwKT4+OCwKKwkJIChpICYgMHhGMCk+PjQsKGkgJiAweEYpLCBkZXYtPnVkZXYtPmRldm51bSk7CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JaW5mbygiVVNCIExDRCBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQkxDRC0lZCIsIGludGVyZmFjZS0+bWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBMQ0QgZGV2aWNlIG5vdyBhdHRhY2hlZCB0byBVU0JMQ0QtJWRcbiIsCisJCSBpbnRlcmZhY2UtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC00MTMsNyArNDE0LDcgQEAKIAkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgbGNkX2RlbGV0ZSk7CiAKLQlpbmZvKCJVU0IgTENEICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBMQ0QgIyVkIG5vdyBkaXNjb25uZWN0ZWRcbiIsIG1pbm9yKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxjZF9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE2YTNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYwpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIFVTQiA3IFNlZ21lbnQgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CisgKiBCYXNlZCBvbiB1c2JsZWQuYyBieSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgNyBTZWdtZW50IERyaXZlciIKKworI2RlZmluZSBWRU5ET1JfSUQJMHgwZmM1CisjZGVmaW5lIFBST0RVQ1RfSUQJMHgxMjI3CisjZGVmaW5lIE1BWExFTgkJNgorCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCisvKiB0aGUgZGlmZmVyZW50IHRleHQgZGlzcGxheSBtb2RlcyB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YgKi8KK3N0YXRpYyBjaGFyICpkaXNwbGF5X3RleHRtb2Rlc1tdID0geyJyYXciLCAiaGV4IiwgImFzY2lpIiwgTlVMTH07CisKK3N0cnVjdCB1c2Jfc2V2c2VnZGV2IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCXU4IHBvd2VyZWQ7CisJdTggbW9kZV9tc2I7CisJdTggbW9kZV9sc2I7CisJdTggZGVjaW1hbHNbTUFYTEVOXTsKKwl1OCB0ZXh0bW9kZTsKKwl1OCB0ZXh0W01BWExFTl07CisJdTE2IHRleHRsZW5ndGg7Cit9OworCisvKiBzeXNmc19zdHJlcSBjYW4ndCByZXBsYWNlIHRoaXMgY29tcGxldGVseQorICogSWYgdGhlIGRldmljZSB3YXMgaW4gaGV4IG1vZGUsIGFuZCB0aGUgdXNlciB3YW50ZWQgYSAwLAorICogaWYgc3RyIGNvbW1hbmRzIGFyZSB1c2VkLCB3ZSB3b3VsZCBhc3N1bWUgdGhlIGVuZCBvZiBzdHJpbmcKKyAqIHNvIG1lbSBjb21tYW5kcyBhcmUgdXNlZC4KKyAqLworaW5saW5lIHNpemVfdCBteV9tZW1sZW4oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaWYgKGNvdW50ID4gMCAmJiBidWZbY291bnQtMV0gPT0gJ1xuJykKKwkJcmV0dXJuIGNvdW50IC0gMTsKKwllbHNlCisJCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2Rpc3BsYXlfcG93ZXJlZChzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYpCit7CisJaW50IHJjOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODAgKiAweDEwMCkgKyAxMCwgLyogIChwb3dlciBtb2RlKSAqLworCQkJKDB4MDAgKiAweDEwMCkgKyAobXlkZXYtPnBvd2VyZWQgPyAxIDogMCksCisJCQlOVUxMLAorCQkJMCwKKwkJCTIwMDApOworCWlmIChyYyA8IDApCisJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJwb3dlciByZXR2YWwgPSAlZFxuIiwgcmMpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZGlzcGxheV9tb2RlKHN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhteWRldi0+dWRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShteWRldi0+dWRldiwgMCksCisJCQkweDEyLAorCQkJMHg0OCwKKwkJCSg4MiAqIDB4MTAwKSArIDEwLCAvKiAoc2V0IG1vZGUpICovCisJCQkobXlkZXYtPm1vZGVfbXNiICogMHgxMDApICsgbXlkZXYtPm1vZGVfbHNiLAorCQkJTlVMTCwKKwkJCTAsCisJCQkyMDAwKTsKKworCWlmIChyYyA8IDApCisJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJtb2RlIHJldHZhbCA9ICVkXG4iLCByYyk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYpCit7CisJaW50IHJjOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1OCBkZWNpbWFscyA9IDA7CisKKwlidWZmZXIgPSBremFsbG9jKE1BWExFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmbXlkZXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogVGhlIGRldmljZSBpcyByaWdodCB0byBsZWZ0LCB3aGVyZSBhcyB5b3Ugd3JpdGUgbGVmdCB0byByaWdodCAqLworCWZvciAoaSA9IDA7IGkgPCBteWRldi0+dGV4dGxlbmd0aDsgaSsrKQorCQlidWZmZXJbaV0gPSBteWRldi0+dGV4dFtteWRldi0+dGV4dGxlbmd0aC0xLWldOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODUgKiAweDEwMCkgKyAxMCwgLyogKHdyaXRlIHRleHQpICovCisJCQkoMCAqIDB4MTAwKSArIG15ZGV2LT50ZXh0bW9kZSwgLyogbW9kZSAgKi8KKwkJCWJ1ZmZlciwKKwkJCW15ZGV2LT50ZXh0bGVuZ3RoLAorCQkJMjAwMCk7CisKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAid3JpdGUgcmV0dmFsID0gJWRcbiIsIHJjKTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwkvKiBUaGUgZGV2aWNlIGlzIHJpZ2h0IHRvIGxlZnQsIHdoZXJlIGFzIHlvdSB3cml0ZSBsZWZ0IHRvIHJpZ2h0ICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihteWRldi0+ZGVjaW1hbHMpOyBpKyspCisJCWRlY2ltYWxzIHw9IG15ZGV2LT5kZWNpbWFsc1tpXSA8PCBpOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODYgKiAweDEwMCkgKyAxMCwgLyogKHNldCBkZWNpbWFsKSAqLworCQkJKDAgKiAweDEwMCkgKyBkZWNpbWFscywgLyogZGVjaW1hbHMgKi8KKwkJCU5VTEwsCisJCQkwLAorCQkJMjAwMCk7CisKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAiZGVjaW1hbCByZXR2YWwgPSAlZFxuIiwgcmMpOworfQorCisjZGVmaW5lIE1ZREVWX0FUVFJfU0lNUExFX1VOU0lHTkVEKG5hbWUsIHVwZGF0ZV9mY24pCQlcCitzdGF0aWMgc3NpemVfdCBzaG93X2F0dHJfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgCQlcCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgCQlcCit7CQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CVwKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbXlkZXYtPm5hbWUpOwkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCAJCVwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3sJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJXAorCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJXAorCW15ZGV2LT5uYW1lID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQlcCisJdXBkYXRlX2ZjbihteWRldik7IFwKKwkJCQkJCQkJXAorCXJldHVybiBjb3VudDsJCQkJCQlcCit9CQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfYXR0cl8jI25hbWUsIHNldF9hdHRyXyMjbmFtZSk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXR0cl90ZXh0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBteWRldi0+dGV4dGxlbmd0aCwgIiVzXG4iLCBteWRldi0+dGV4dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9hdHRyX3RleHQoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXNpemVfdCBlbmQgPSBteV9tZW1sZW4oYnVmLCBjb3VudCk7CisKKwlpZiAoZW5kID4gc2l6ZW9mKG15ZGV2LT50ZXh0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQobXlkZXYtPnRleHQsIDAsIHNpemVvZihteWRldi0+dGV4dCkpOworCW15ZGV2LT50ZXh0bGVuZ3RoID0gZW5kOworCisJaWYgKGVuZCA+IDApCisJCW1lbWNweShteWRldi0+dGV4dCwgYnVmLCBlbmQpOworCisJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZXh0LCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd19hdHRyX3RleHQsIHNldF9hdHRyX3RleHQpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2F0dHJfZGVjaW1hbHMoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgaTsKKwlpbnQgcG9zOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihteWRldi0+ZGVjaW1hbHMpOyBpKyspIHsKKwkJcG9zID0gc2l6ZW9mKG15ZGV2LT5kZWNpbWFscykgLSAxIC0gaTsKKwkJaWYgKG15ZGV2LT5kZWNpbWFsc1tpXSA9PSAwKQorCQkJYnVmW3Bvc10gPSAnMCc7CisJCWVsc2UgaWYgKG15ZGV2LT5kZWNpbWFsc1tpXSA9PSAxKQorCQkJYnVmW3Bvc10gPSAnMSc7CisJCWVsc2UKKwkJCWJ1Zltwb3NdID0gJ3gnOworCX0KKworCWJ1ZltzaXplb2YobXlkZXYtPmRlY2ltYWxzKV0gPSAnXG4nOworCXJldHVybiBzaXplb2YobXlkZXYtPmRlY2ltYWxzKSArIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9hdHRyX2RlY2ltYWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzaXplX3QgZW5kID0gbXlfbWVtbGVuKGJ1ZiwgY291bnQpOworCWludCBpOworCisJaWYgKGVuZCA+IHNpemVvZihteWRldi0+ZGVjaW1hbHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBlbmQ7IGkrKykKKwkJaWYgKGJ1ZltpXSAhPSAnMCcgJiYgYnVmW2ldICE9ICcxJykKKwkJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KG15ZGV2LT5kZWNpbWFscywgMCwgc2l6ZW9mKG15ZGV2LT5kZWNpbWFscykpOworCWZvciAoaSA9IDA7IGkgPCBlbmQ7IGkrKykKKwkJaWYgKGJ1ZltpXSA9PSAnMScpCisJCQlteWRldi0+ZGVjaW1hbHNbZW5kLTEtaV0gPSAxOworCisJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGRlY2ltYWxzLCBTX0lXVUdPIHwgU19JUlVHTywKKwlzaG93X2F0dHJfZGVjaW1hbHMsIHNldF9hdHRyX2RlY2ltYWxzKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyX3RleHRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGk7CisKKwlidWZbMF0gPSAwOworCisJZm9yIChpID0gMDsgZGlzcGxheV90ZXh0bW9kZXNbaV07IGkrKykgeworCQlpZiAobXlkZXYtPnRleHRtb2RlID09IGkpIHsKKwkJCXN0cmNhdChidWYsICIgWyIpOworCQkJc3RyY2F0KGJ1ZiwgZGlzcGxheV90ZXh0bW9kZXNbaV0pOworCQkJc3RyY2F0KGJ1ZiwgIl0gIik7CisJCX0gZWxzZSB7CisJCQlzdHJjYXQoYnVmLCAiICIpOworCQkJc3RyY2F0KGJ1ZiwgZGlzcGxheV90ZXh0bW9kZXNbaV0pOworCQkJc3RyY2F0KGJ1ZiwgIiAiKTsKKwkJfQorCX0KKwlzdHJjYXQoYnVmLCAiXG4iKTsKKworCisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl90ZXh0bW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBkaXNwbGF5X3RleHRtb2Rlc1tpXTsgaSsrKSB7CisJCWlmIChzeXNmc19zdHJlcShkaXNwbGF5X3RleHRtb2Rlc1tpXSwgYnVmKSkgeworCQkJbXlkZXYtPnRleHRtb2RlID0gaTsKKwkJCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHRleHRtb2RlLCBTX0lXVUdPIHwgU19JUlVHTywKKwlzaG93X2F0dHJfdGV4dG1vZGUsIHNldF9hdHRyX3RleHRtb2RlKTsKKworCitNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChwb3dlcmVkLCB1cGRhdGVfZGlzcGxheV9wb3dlcmVkKTsKK01ZREVWX0FUVFJfU0lNUExFX1VOU0lHTkVEKG1vZGVfbXNiLCB1cGRhdGVfZGlzcGxheV9tb2RlKTsKK01ZREVWX0FUVFJfU0lNUExFX1VOU0lHTkVEKG1vZGVfbHNiLCB1cGRhdGVfZGlzcGxheV9tb2RlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9wb3dlcmVkLmF0dHIsCisJJmRldl9hdHRyX3RleHQuYXR0ciwKKwkmZGV2X2F0dHJfdGV4dG1vZGUuYXR0ciwKKwkmZGV2X2F0dHJfZGVjaW1hbHMuYXR0ciwKKwkmZGV2X2F0dHJfbW9kZV9tc2IuYXR0ciwKKwkmZGV2X2F0dHJfbW9kZV9sc2IuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gZGV2X2F0dHJzLAorfTsKKworc3RhdGljIGludCBzZXZzZWdfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gTlVMTDsKKwlpbnQgcmMgPSAtRU5PTUVNOworCisJbXlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3NldnNlZ2RldiksIEdGUF9LRVJORUwpOworCWlmIChteWRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3JfbWVtOworCX0KKworCW15ZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIG15ZGV2KTsKKworCS8qc2V0IGRlZmF1bHRzICovCisJbXlkZXYtPnRleHRtb2RlID0gMHgwMjsgLyogYXNjaWkgbW9kZSAqLworCW15ZGV2LT5tb2RlX21zYiA9IDB4MDY7IC8qIDYgY2hhcmFjdGVycyAqLworCW15ZGV2LT5tb2RlX2xzYiA9IDB4M2Y7IC8qIHNjYW5tb2RlIGZvciA2IGNoYXJzICovCisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50ZXJmYWNlLT5kZXYua29iaiwgJmRldl9hdHRyX2dycCk7CisJaWYgKHJjKQorCQlnb3RvIGVycm9yOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIDcgU2VnbWVudCBkZXZpY2Ugbm93IGF0dGFjaGVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCXVzYl9wdXRfZGV2KG15ZGV2LT51ZGV2KTsKKwlrZnJlZShteWRldik7CitlcnJvcl9tZW06CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBzZXZzZWdfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldjsKKworCW15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50ZXJmYWNlLT5kZXYua29iaiwgJmRldl9hdHRyX2dycCk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCXVzYl9wdXRfZGV2KG15ZGV2LT51ZGV2KTsKKwlrZnJlZShteWRldik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIDcgU2VnbWVudCBub3cgZGlzY29ubmVjdGVkXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNldnNlZ19kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVzYnNldnNlZyIsCisJLnByb2JlID0Jc2V2c2VnX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jc2V2c2VnX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2V2c2VnX2luaXQodm9pZCkKK3sKKwlpbnQgcmMgPSAwOworCisJcmMgPSB1c2JfcmVnaXN0ZXIoJnNldnNlZ19kcml2ZXIpOworCWlmIChyYykKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NldnNlZ19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNldnNlZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2Jfc2V2c2VnX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3NldnNlZ19leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCmluZGV4IGIzNThjNGUuLjQ0NGM2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCkBAIC0xNTYxLDggKzE1NjEsNyBAQAogCWlmIChjb2RlICE9IFVTQlRFU1RfUkVRVUVTVCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKHBhcmFtLT5pdGVyYXRpb25zIDw9IDAgfHwgcGFyYW0tPmxlbmd0aCA8IDAKLQkJCXx8IHBhcmFtLT5zZ2xlbiA8IDAgfHwgcGFyYW0tPnZhcnkgPCAwKQorCWlmIChwYXJhbS0+aXRlcmF0aW9ucyA8PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+bG9jaykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwppbmRleCBmMTI1NWIwLi45YTZjMjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKQEAgLTIyOCwxMSArMjI4LDEyIEBACiAJCXJldCA9IHJxLT51cmItPnN0YXR1czsKIAkJKnZhbCA9IHByaXYtPnJlZ1socmVnID49IDkpID8gMCA6IHJlZ2luZGV4W3JlZ11dOwogCQlpZiAocmV0KQotCQkJd2FybigiZ2V0XzEyODRfcmVnaXN0ZXI6IHVzYiBlcnJvciAlZCIsIHJldCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJnZXRfMTI4NF9yZWdpc3RlcjogIgorCQkJICAgICAgICJ1c2IgZXJyb3IgJWRcbiIsIHJldCk7CiAJCWtyZWZfcHV0KCZycS0+cmVmX2NvdW50LCBkZXN0cm95X2FzeW5jKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0Jd2FybigiZ2V0XzEyODRfcmVnaXN0ZXIgdGltZW91dCIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgImdldF8xMjg0X3JlZ2lzdGVyIHRpbWVvdXRcbiIpOwogCWtpbGxfYWxsX2FzeW5jX3JlcXVlc3RzX3ByaXYocHJpdik7CiAJcmV0dXJuIC1FSU87CiB9CkBAIC03MTYsNyArNzE3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+YXN5bmNsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YXN5bmNsaXN0KTsKIAlpZiAoIShwcCA9IHBhcnBvcnRfcmVnaXN0ZXJfcG9ydCgwLCBQQVJQT1JUX0lSUV9OT05FLCBQQVJQT1JUX0RNQV9OT05FLCAmcGFycG9ydF91c3M3MjBfb3BzKSkpIHsKLQkJd2FybigiY291bGQgbm90IHJlZ2lzdGVyIHBhcnBvcnQiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNzNzIwOiBjb3VsZCBub3QgcmVnaXN0ZXIgcGFycG9ydFxuIik7CiAJCWdvdG8gcHJvYmVfYWJvcnQ7CiAJfQogCkBAIC04MDAsMTAgKzgwMSwxNCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOwotCWluZm8oIk5PVEU6IHRoaXMgaXMgYSBzcGVjaWFsIHB1cnBvc2UgZHJpdmVyIHRvIGFsbG93IG5vbnN0YW5kYXJkIik7Ci0JaW5mbygicHJvdG9jb2xzIChlZy4gYml0YmFuZykgb3ZlciBVU1M3MjAgdXNiIHRvIHBhcmFsbGVsIGNhYmxlcyIpOwotCWluZm8oIklmIHlvdSBqdXN0IHdhbnQgdG8gY29ubmVjdCB0byBhIHByaW50ZXIsIHVzZSB1c2JscCBpbnN0ZWFkIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IE5PVEU6IHRoaXMgaXMgYSBzcGVjaWFsIHB1cnBvc2UgIgorCSAgICAgICAiZHJpdmVyIHRvIGFsbG93IG5vbnN0YW5kYXJkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IHByb3RvY29scyAoZWcuIGJpdGJhbmcpIG92ZXIgIgorCSAgICAgICAiVVNTNzIwIHVzYiB0byBwYXJhbGxlbCBjYWJsZXNcbiIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogSWYgeW91IGp1c3Qgd2FudCB0byBjb25uZWN0IHRvIGEgIgorCSAgICAgICAicHJpbnRlciwgdXNlIHVzYmxwIGluc3RlYWRcbiIpOwogb3V0OgogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjQ4NDcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwpAQCAtMCwwICsxLDc4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRmlsZTogZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYworICoKKyAqICBQdXJwb3NlOiBTdXBwb3J0IGZvciB0aGUgYnVsayBVU0IgVmVybmllciBTcGVjdHJvcGhvdG9tZXRlcnMKKyAqCisgKiAgQXV0aG9yOiAgICAgSm9obm5pZSBQZXRlcnMKKyAqICAgICAgICAgICAgICBBeGlhbiBDb25zdWx0aW5nCisgKiAgICAgICAgICAgICAgQmVhdmVydG9uLCBPUiwgVVNBIDk3MDA1CisgKgorICogIE1vZGlmaWVkIGJ5OiAgICAgRVF3YXJlIEVuZ2luZWVyaW5nLCBJbmMuCisgKiAgICAgICAgICAgICAgICAgICBPcmVnb24gQ2l0eSwgT1IsIFVTQSA5NzA0NQorICoKKyAqICBDb3B5cmlnaHQ6ICAyMDA3LCAyMDA4CisgKiAgICAgICAgICAgICAgVmVybmllciBTb2Z0d2FyZSAmIFRlY2hub2xvZ3kKKyAqICAgICAgICAgICAgICBCZWF2ZXJ0b24sIE9SLCBVU0EgOTcwMDUKKyAqCisgKiAgV2ViOiAgICAgICAgd3d3LnZlcm5pZXIuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiL3ZzdHVzYi5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJWU1QgVVNCIERyaXZlciBWZXJzaW9uIDEuNSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlZlcm5pZXIgU29mdHdhcmUgVGVjaG5vbG9neSBCdWxrIFVTQiBEcml2ZXIiCisKKyNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCisJI2RlZmluZSBWU1RVU0JfTUlOT1JfQkFTRQkwCisjZWxzZQorCSNkZWZpbmUgVlNUVVNCX01JTk9SX0JBU0UJMTk5CisjZW5kaWYKKworI2RlZmluZSBVU0JfVkVORE9SX09DRUFOT1BUSUNTCTB4MjQ1NworI2RlZmluZSBVU0JfVkVORE9SX1ZFUk5JRVIJMHgwOEY3CS8qIFZlcm5pZXIgU29mdHdhcmUgJiBUZWNobm9sb2d5ICovCisKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCMjAwMAkweDEwMDIKKyNkZWZpbmUgVVNCX1BST0RVQ1RfQURDMTAwMF9GVwkweDEwMDMJLyogZmlybXdhcmUgZG93bmxvYWQgKHJlbnVtZXJhdGVzKSAqLworI2RlZmluZSBVU0JfUFJPRFVDVF9BREMxMDAwCTB4MTAwNAorI2RlZmluZSBVU0JfUFJPRFVDVF9IUjIwMDBfRlcJMHgxMDA5CS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFIyMDAwCTB4MTAwQQorI2RlZmluZSBVU0JfUFJPRFVDVF9IUjQwMDBfRlcJMHgxMDExCS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFI0MDAwCTB4MTAxMgorI2RlZmluZSBVU0JfUFJPRFVDVF9VU0I2NTAJMHgxMDE0CS8qICJSZWQgVGlkZSIgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfUUU2NTAwMAkweDEwMTgKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCNDAwMAkweDEwMjIKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCMzI1CTB4MTAyNAkvKiAiVmVybmllciBTcGVjdHJvbWV0ZXIiICovCisKKyNkZWZpbmUgVVNCX1BST0RVQ1RfTEFCUFJPCTB4MDAwMQorI2RlZmluZSBVU0JfUFJPRFVDVF9MQUJRVUVTVAkweDAwMDUKKworI2RlZmluZSBWU1RfTUFYQlVGRkVSCQkoNjQqMTAyNCkKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX1VTQjIwMDApfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfSFI0MDAwKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX1VTQjY1MCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0I0MDAwKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX1VTQjMyNSl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX1ZFUk5JRVIsIFVTQl9QUk9EVUNUX0xBQlFVRVNUKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfVkVSTklFUiwgVVNCX1BST0RVQ1RfTEFCUFJPKX0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdHJ1Y3QgdnN0dXNiX2RldmljZSB7CisJc3RydWN0IGtyZWYJCQkJa3JlZjsKKwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBsb2NrOworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICp1c2JfZGV2OworCWNoYXIgICAgICAgICAgICAgICAgICAgIHByZXNlbnQ7CisJY2hhciAgICAgICAgICAgICAgICAgICAgaXNvcGVuOworCXN0cnVjdCB1c2JfYW5jaG9yICAgICAgIHN1Ym1pdHRlZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByZF9waXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHJkX3RpbWVvdXRfbXM7CisJaW50ICAgICAgICAgICAgICAgICAgICAgd3JfcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB3cl90aW1lb3V0X21zOworfTsKKyNkZWZpbmUgdG9fdnN0X2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHZzdHVzYl9kZXZpY2UsIGtyZWYpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2c3R1c2JfZHJpdmVyOworCitzdGF0aWMgdm9pZCB2c3R1c2JfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXYgPSB0b192c3RfZGV2KGtyZWYpOworCisJdXNiX3B1dF9kZXYodnN0ZGV2LT51c2JfZGV2KTsKKwlrZnJlZSh2c3RkZXYpOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKworCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmdnN0dXNiX2RyaXZlciwgaW1pbm9yKGlub2RlKSk7CisKKwlpZiAoIWludGVyZmFjZSkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6ICVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBpbWlub3IoaW5vZGUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdnN0ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKCF2c3RkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogbG9jayB0aGlzIGRldmljZSAqLworCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7CisKKwkvKiBjYW4gb25seSBvcGVuIG9uZSB0aW1lICovCisJaWYgKCghdnN0ZGV2LT5wcmVzZW50KSB8fCAodnN0ZGV2LT5pc29wZW4pKSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBpbmNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCisJa3JlZl9nZXQoJnZzdGRldi0+a3JlZik7CisKKwl2c3RkZXYtPmlzb3BlbiA9IDE7CisKKwkvKiBzYXZlIGRldmljZSBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdnN0ZGV2OworCisJZGV2X2RiZygmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogb3BlbmVkXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c3R1c2JfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCisJdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZzdGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7CisKKwl2c3RkZXYtPmlzb3BlbiA9IDA7CisKKwlkZXZfZGJnKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiByZWxlYXNlZFxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJa3JlZl9wdXQoJnZzdGRldi0+a3JlZiwgdnN0dXNiX2RlbGV0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGVpdCA9IHVyYi0+Y29udGV4dDsKKworCWNvbXBsZXRlKGNvbXBsZXRlaXQpOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYihzdHJ1Y3QgdXJiICp1cmIsCisJCQkJICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcGlwZSwgdm9pZCAqZGF0YSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUpCit7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKipob3N0ZXA7CisJdW5zaWduZWQgaW50IHBpcGVuZDsKKworCWludCBzdGF0dXM7CisKKwlob3N0ZXAgPSB1c2JfcGlwZWluKHBpcGUpID8gdXNiX2Rldi0+ZXBfaW4gOiB1c2JfZGV2LT5lcF9vdXQ7CisJcGlwZW5kID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKwllcCA9IGhvc3RlcFtwaXBlbmRdOworCisJaWYgKCFlcCB8fCAobGVuID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQlwaXBlID0gKHBpcGUgJiB+KDMgPDwgMzApKSB8IChQSVBFX0lOVEVSUlVQVCA8PCAzMCk7CisJCXVzYl9maWxsX2ludF91cmIodXJiLCB1c2JfZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQkJICh1c2JfY29tcGxldGVfdCl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sCisJCQkJIE5VTEwsIGVwLT5kZXNjLmJJbnRlcnZhbCk7CisJfSBlbHNlCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJCSAgKHVzYl9jb21wbGV0ZV90KXVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwKKwkJCQkgIE5VTEwpOworCisJaW5pdF9jb21wbGV0aW9uKGRvbmUpOworCXVyYi0+Y29udGV4dCA9IGRvbmU7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCB2c3R1c2JfY29tcGxldGVfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsCisJCQkgICAgICAgaW50IHRpbWVvdXQsIGludCAqYWN0dWFsX2xlbmd0aCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlpbnQgc3RhdHVzOworCisJZXhwaXJlID0gdGltZW91dCA/IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCkgOiBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KGRvbmUsIGV4cGlyZSkpIHsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJCXN0YXR1cyA9IHVyYi0+c3RhdHVzID09IC1FTk9FTlQgPyAtRVRJTUVET1VUIDogdXJiLT5zdGF0dXM7CisKKwkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0lZC8lZCwgdXJiIHN0YXR1cyA9ICVkXG4iLAorCQkJY3VycmVudC0+Y29tbSwKKwkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVyYi0+c3RhdHVzKTsKKworCX0gZWxzZSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJLyogaWYgcmVhbGx5IGFuIGVycm9yICovCisJCQlpZiAodXJiLT5zdGF0dXMgJiYgISgodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkgICAgIHx8CisJCQkJCSAgICAgKHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUKSB8fAorCQkJCQkgICAgICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkpIHsKKwkJCQlzdGF0dXMgPSAtRUlOVFI7CisJCQkJdXNiX2tpbGxfdXJiKHVyYik7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IDA7CisJCQl9CisKKwkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCisJCQkJIiVzOiBzaWduYWwgcGVuZGluZyBvbiBlcCVkJXMgbGVuPSVkLyVkLCIKKwkJCQkidXJiIHN0YXR1cyA9ICVkXG4iLAorCQkJCWN1cnJlbnQtPmNvbW0sCisJCQkJdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXVyYi0+c3RhdHVzKTsKKworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJCX0KKwl9CisKKwlpZiAoYWN0dWFsX2xlbmd0aCkKKwkJKmFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3NpemVfdCB2c3R1c2JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJaW50IGNudCA9IC0xOworCXZvaWQgKmJ1ZjsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmI7CisJc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKmRldjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwaXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKKworCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSB3YW50IHRvIHJlYWQgc29tZSBkYXRhICovCisJaWYgKChjb3VudCA9PSAwKSB8fCAoY291bnQgPiBWU1RfTUFYQlVGRkVSKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnN0ZGV2LT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGFueW9uZSBob21lICovCisJaWYgKCF2c3RkZXYtPnByZXNlbnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6ICVzOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogcHVsbCBvdXQgdGhlIG5lY2Vzc2FyeSBkYXRhICovCisJZGV2ID0gICAgIHZzdGRldi0+dXNiX2RldjsKKwlwaXBlID0gICAgdXNiX3JjdmJ1bGtwaXBlKGRldiwgdnN0ZGV2LT5yZF9waXBlKTsKKwl0aW1lb3V0ID0gdnN0ZGV2LT5yZF90aW1lb3V0X21zOworCisJYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlrZnJlZShidWYpOworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKKwlyZXR2YWwgPSB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIodXJiLCBkZXYsIHBpcGUsIGJ1ZiwgY291bnQsICZkb25lKTsKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJaWYgKHJldHZhbCkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGZpbGxpbmcgYW5kIHNlbmRpbmcgdXJiICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgY29tcGxldGluZyB1cmIgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBidWYsIGNudCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gY250OworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiByZWFkICVkIGJ5dGVzIGZyb20gcGlwZSAlZFxuIiwKKwkJCV9fZnVuY19fLCBjbnQsIHBpcGUpOworCX0KKworZXhpdDoKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZzdHVzYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCWludCBjbnQgPSAtMTsKKwl2b2lkICpidWY7CisJaW50IHJldHZhbCA9IDA7CisKKwlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiOworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisKKwl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIGRhdGEgdG8gd3JpdGUgKi8KKwlpZiAoKGNvdW50ID09IDApIHx8IChjb3VudCA+IFZTVF9NQVhCVUZGRVIpKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogbG9jayB0aGlzIG9iamVjdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZzdGRldi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBhbnlvbmUgaG9tZSAqLworCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiAlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHB1bGwgb3V0IHRoZSBuZWNlc3NhcnkgZGF0YSAqLworCWRldiA9ICAgICB2c3RkZXYtPnVzYl9kZXY7CisJcGlwZSA9ICAgIHVzYl9zbmRidWxrcGlwZShkZXYsIHZzdGRldi0+d3JfcGlwZSk7CisJdGltZW91dCA9IHZzdGRldi0+d3JfdGltZW91dF9tczsKKworCWJ1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X2Zyb21fdXNlclxuIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmLCBjb3VudCwgJmRvbmUpOworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQlnb3RvIGV4aXQ7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gY250OworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzZW50ICVkIGJ5dGVzIHRvIHBpcGUgJWRcbiIsCisJCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKKwl9CisKK2V4aXQ6CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgbG9uZyB2c3R1c2JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXR2YWwgPSAwOworCWludCBjbnQgPSAtMTsKKwl2b2lkIF9fdXNlciAqZGF0YSA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgdnN0dXNiX2FyZ3MgdXNiX2RhdGE7CisKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCXZvaWQgKmJ1ZmZlciA9IE5VTEw7IC8qIG11c3QgYmUgaW5pdGlhbGl6ZWQuIGJ1ZmZlciBpcworCQkJICAgICAgKglyZWZlcmVuY2VkIG9uIGV4aXQgYnV0IG5vdCBhbGwKKwkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCisKKwlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiID0gTlVMTDsgLyogbXVzdCBiZSBpbml0aWFsaXplZC4gdXJiIGlzCisJCQkJCSAgICAgICoJcmVmZXJlbmNlZCBvbiBleGl0IGJ1dCBub3QgYWxsCisJCQkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCisJc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKmRldjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwaXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKKworCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoY21kKSAhPSBWU1RfSU9DX01BR0lDKSB7CisJCWRldl93YXJuKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwKKwkJCSAiJXM6IGlvY3RsIGNvbW1hbmQgJXgsIGJhZCBpb2N0bCBtYWdpYyAleCwgIgorCQkJICJleHBlY3RlZCAleFxuIiwgX19mdW5jX18sIGNtZCwKKwkJCSBfSU9DX1RZUEUoY21kKSwgVlNUX0lPQ19NQUdJQyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnVzYl9kYXRhLCBkYXRhLCBzaXplb2Yoc3RydWN0IHZzdHVzYl9hcmdzKSkpIHsKKwkJZGV2X2VycigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKSB7CisJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBleGl0OworCX0KKworCS8qIGFueW9uZSBob21lICovCisJaWYgKCF2c3RkZXYtPnByZXNlbnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlkZXZfZXJyKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KKwlkZXYgPSB2c3RkZXYtPnVzYl9kZXY7CisKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBJT0NUTF9WU1RVU0JfQ09ORklHX1JXOgorCisJCXZzdGRldi0+cmRfcGlwZSA9IHVzYl9kYXRhLnJkX3BpcGU7CisJCXZzdGRldi0+cmRfdGltZW91dF9tcyA9IHVzYl9kYXRhLnJkX3RpbWVvdXRfbXM7CisJCXZzdGRldi0+d3JfcGlwZSA9IHVzYl9kYXRhLndyX3BpcGU7CisJCXZzdGRldi0+d3JfdGltZW91dF9tcyA9IHVzYl9kYXRhLndyX3RpbWVvdXRfbXM7CisKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IHNldHRpbmcgcGlwZXMvdGltZW91dHMsICIKKwkJCSJyZHBpcGUgPSAlZCwgcmR0aW1lb3V0ID0gJWQsICIKKwkJCSJ3cnBpcGUgPSAlZCwgd3J0aW1lb3V0ID0gJWRcbiIsIF9fZnVuY19fLAorCQkJdnN0ZGV2LT5yZF9waXBlLCB2c3RkZXYtPnJkX3RpbWVvdXRfbXMsCisJCQl2c3RkZXYtPndyX3BpcGUsIHZzdGRldi0+d3JfdGltZW91dF9tcyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NUTF9WU1RVU0JfU0VORF9QSVBFOgorCisJCWlmICgodXNiX2RhdGEuY291bnQgPT0gMCkgfHwgKHVzYl9kYXRhLmNvdW50ID4gVlNUX01BWEJVRkZFUikpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlidWZmZXIgPSBrbWFsbG9jKHVzYl9kYXRhLmNvdW50LCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl0aW1lb3V0ID0gdXNiX2RhdGEudGltZW91dF9tczsKKworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwgdXNiX2RhdGEucGlwZSk7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgdXNiX2RhdGEuYnVmZmVyLCB1c2JfZGF0YS5jb3VudCkpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfZnJvbV91c2VyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmZmVyLAorCQkJCQkJICB1c2JfZGF0YS5jb3VudCwgJmRvbmUpOworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCSIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgSU9DVExfVlNUVVNCX1JFQ1ZfUElQRToKKworCQlpZiAoKHVzYl9kYXRhLmNvdW50ID09IDApIHx8ICh1c2JfZGF0YS5jb3VudCA+IFZTVF9NQVhCVUZGRVIpKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisKKwkJYnVmZmVyID0ga21hbGxvYyh1c2JfZGF0YS5jb3VudCwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKKwkJdGltZW91dCA9IHVzYl9kYXRhLnRpbWVvdXRfbXM7CisKKwkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXYsIHVzYl9kYXRhLnBpcGUpOworCisJCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKKwkJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWZmZXIsCisJCQkJCQkgIHVzYl9kYXRhLmNvdW50LCAmZG9uZSk7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQkJZ290byBleGl0OworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2JfZGF0YS5idWZmZXIsIGJ1ZmZlciwgY250KSkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1c2JfZGF0YS5jb3VudCA9IGNudDsKKwkJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCAmdXNiX2RhdGEsIHNpemVvZihzdHJ1Y3QgdnN0dXNiX2FyZ3MpKSkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiByZWN2ICVkIGJ5dGVzIGZyb20gcGlwZSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgdXNiX2RhdGEuY291bnQsIHVzYl9kYXRhLnBpcGUpOworCQl9CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCWRldl93YXJuKCZkZXYtPmRldiwgImlvY3RsX3ZzdHVzYjogaW52YWxpZCBpb2N0bCBjbWQgJXhcbiIsCisJCQkgY21kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KK2V4aXQ6CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2c3R1c2JfZm9wcyA9IHsKKwkub3duZXIgPSAgICAgICAgICAgICAgICBUSElTX01PRFVMRSwKKwkucmVhZCA9ICAgICAgICAgICAgICAgICB2c3R1c2JfcmVhZCwKKwkud3JpdGUgPSAgICAgICAgICAgICAgICB2c3R1c2Jfd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsID0gICAgICAgdnN0dXNiX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSAgICAgICAgIHZzdHVzYl9pb2N0bCwKKwkub3BlbiA9ICAgICAgICAgICAgICAgICB2c3R1c2Jfb3BlbiwKKwkucmVsZWFzZSA9ICAgICAgICAgICAgICB2c3R1c2JfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JfdnN0dXNiX2NsYXNzID0geworCS5uYW1lID0gICAgICAgICAidXNiL3ZzdHVzYiVkIiwKKwkuZm9wcyA9ICAgICAgICAgJnZzdHVzYl9mb3BzLAorCS5taW5vcl9iYXNlID0gICBWU1RVU0JfTUlOT1JfQkFTRSwKK307CisKK3N0YXRpYyBpbnQgdnN0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLworCisJdnN0ZGV2ID0ga3phbGxvYyhzaXplb2YoKnZzdGRldiksIEdGUF9LRVJORUwpOworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBtdXN0IGRvIHVzYl9nZXRfZGV2KCkgcHJpb3IgdG8ga3JlZl9pbml0KCkgc2luY2UgdGhlIGtyZWZfcHV0KCkKKwkgKiByZWxlYXNlIGZ1bmN0aW9uIHdpbGwgZG8gYSB1c2JfcHV0X2RldigpICovCisJdXNiX2dldF9kZXYoZGV2KTsKKwlrcmVmX2luaXQoJnZzdGRldi0+a3JlZik7CisJbXV0ZXhfaW5pdCgmdnN0ZGV2LT5sb2NrKTsKKworCWkgPSBkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlOworCisJZGV2X2RiZygmaW50Zi0+ZGV2LCAiVmVyc2lvbiAlMWQlMWQuJTFkJTFkIGZvdW5kIGF0IGFkZHJlc3MgJWRcbiIsCisJCShpICYgMHhGMDAwKSA+PiAxMiwgKGkgJiAweEYwMCkgPj4gOCwKKwkJKGkgJiAweEYwKSA+PiA0LCAoaSAmIDB4RiksIGRldi0+ZGV2bnVtKTsKKworCXZzdGRldi0+cHJlc2VudCA9IDE7CisJdnN0ZGV2LT5pc29wZW4gPSAwOworCXZzdGRldi0+dXNiX2RldiA9IGRldjsKKwlpbml0X3VzYl9hbmNob3IoJnZzdGRldi0+c3VibWl0dGVkKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdnN0ZGV2KTsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdnN0dXNiX2NsYXNzKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSIlczogTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuIiwKKwkJCV9fZnVuY19fKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwkJa3JlZl9wdXQoJnZzdGRldi0+a3JlZiwgdnN0dXNiX2RlbGV0ZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCWRldl9pbmZvKCZpbnRmLT5kZXYsCisJCSAiVlNUIFVTQiBEZXZpY2UgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAlZCBtaW5vciAlZFxuIiwKKwkJIChpbnRmLT5taW5vciAtIFZTVFVTQl9NSU5PUl9CQVNFKSwgVVNCX01BSk9SLCBpbnRmLT5taW5vcik7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMsICVzXG4iLCBEUklWRVJfREVTQywgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgdnN0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl92c3R1c2JfY2xhc3MpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKwlpZiAodnN0ZGV2KSB7CisKKwkJbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJdnN0ZGV2LT5wcmVzZW50ID0gMDsKKworCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOworCX0KKworfQorCitzdGF0aWMgaW50IHZzdHVzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgdGltZTsKKwlpZiAoIXZzdGRldikKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOworCXRpbWUgPSB1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCgmdnN0ZGV2LT5zdWJtaXR0ZWQsIDEwMDApOworCWlmICghdGltZSkKKwkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2c3R1c2JfZHJpdmVyID0geworCS5uYW1lID0gICAgICAgICAidnN0dXNiIiwKKwkucHJvYmUgPSAgICAgICAgdnN0dXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gICB2c3R1c2JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9ICAgICAgdnN0dXNiX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgICAgIHZzdHVzYl9yZXN1bWUsCisJLmlkX3RhYmxlID0gaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2c3R1c2JfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gdXNiX3JlZ2lzdGVyKCZ2c3R1c2JfZHJpdmVyKTsKKwlpZiAocmMpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciAoJWQpIiwgX19mdW5jX18sIHJjKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZzdHVzYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnZzdHVzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2c3R1c2JfaW5pdCk7Cittb2R1bGVfZXhpdCh2c3R1c2JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRlbm5pcyBPJ0JyaWVuL1N0ZXBoZW4gV2FyZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKaW5kZXggNDQyZDgwNy4uNWUwYWI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKQEAgLTM2MSwxMiArMzYxLDEyIEBACiAJfQogCS8vIE1PRF9JTkNfVVNFX0NPVU5UKHdoaWNoX21vZHVsZT8pOwogCi0JdXNiX3JlZ2lzdGVyX25vdGlmeSgmbW9uX25iKTsKIAogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1YnVzLCAmdXNiX2J1c19saXN0LCBidXNfbGlzdCkgewogCQltb25fYnVzX2luaXQodWJ1cyk7CiAJfQorCXVzYl9yZWdpc3Rlcl9ub3RpZnkoJm1vbl9uYik7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA1OGIyYjhmLi40Yjk1NDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0zMywxMCArMzMsNiBAQAogCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0kKIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMjQzMAogCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzNFhYCi0JaGVscAotCSAgVXNlIGEgc3RhdGljIDxhc20vYXJjaC9oZHJjX2NuZi5oPiBmaWxlIHRvIGRlc2NyaWJlIGhvdyB0aGUKLQkgIGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCAoZW5kcG9pbnRzLCBtZWNoYW5pc21zLCBldGMpIG9uIHRoZQotCSAgY3VycmVudCBpdGVyYXRpb24gb2YgYSBnaXZlbiBzeXN0ZW0tb24tY2hpcC4KIAogY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX0RBVklOQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaCBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaAppbmRleCBmYzUyMTZiLi43MjliNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5oCkBAIC0xMTksOCArMTE5LDggQEAKIAl2b2lkIF9faW9tZW0JCQkqbXJlZ3M7CQkvKiBNZW50b3IgcmVncyAqLwogCXZvaWQgX19pb21lbQkJCSp0aWJhc2U7CS8qIFRJL0NQUEkgcmVncyAqLwogCi0Jc3RydWN0IGNwcGlfY2hhbm5lbAkJdHhbTVVTQl9DX05VTV9FUFQgLSAxXTsKLQlzdHJ1Y3QgY3BwaV9jaGFubmVsCQlyeFtNVVNCX0NfTlVNX0VQUiAtIDFdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXR4WzRdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXJ4WzRdOwogCiAJc3RydWN0IGRtYV9wb29sCQkJKnBvb2w7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggNzViYWYxOC4uZGZiM2JjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KQEAgLTM5LDcgKzQwLDcgQEAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKIAogI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCi0jaW5jbHVkZSA8YXNtL2FyY2gvaTJjLWNsaWVudC5oPgorI2RlZmluZSBHUElPX25WQlVTX0RSVgkJODcKICNlbmRpZgogCiAjaW5jbHVkZSAiZGF2aW5jaS5oIgpAQCAtMTM4LDcgKzEzOSw2IEBACiAvKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAqLwogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KLSNpZm5kZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk1fT1RHCiAKIC8qIEkyQyBvcGVyYXRpb25zIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGFuZCByZXF1aXJlIGEgdGFzayBjb250ZXh0LgogICogV2l0aCB1bmxvYWRlZCBzeXN0ZW1zLCB1c2luZyB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBzZWVtcyB0byBzdWZmaWNlCkBAIC0xNDYsMTIgKzE0NiwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7Ci0JZGF2aW5jaV9pMmNfZXhwYW5kZXJfb3AoMHgzYSwgVVNCX0RSVlZCVVMsIHZidXNfc3RhdGUpOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAl2YnVzX3N0YXRlID0gIXZidXNfc3RhdGU7CiB9CiBzdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKIAotI2VuZGlmCS8qIG1vZGlmaWVkIGJvYXJkICovCiAjZW5kaWYJLyogRVZNICovCiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc291cmNlX3Bvd2VyKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24sIGludCBpbW1lZGlhdGUpCkBAIC0xNjUsMjEgKzE2NCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAlpZiAobWFjaGluZV9pc19kYXZpbmNpX2V2bSgpKSB7Ci0jaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk1fT1RHCi0JCS8qIG1vZGlmaWVkIEVWTSBib2FyZCBzd2l0Y2hpbmcgVkJVUyB3aXRoIEdQSU8oNikgbm90IEkyQwotCQkgKiBOT1RFOiAgUElOTVVYMC5SR0I4ODggKGJpdDIzKSBtdXN0IGJlIGNsZWFyCi0JCSAqLwotCQlpZiAoaXNfb24pCi0JCQlncGlvX3NldChHUElPKDYpKTsKLQkJZWxzZQotCQkJZ3Bpb19jbGVhcihHUElPKDYpKTsKLQkJaW1tZWRpYXRlID0gMTsKLSNlbHNlCiAJCWlmIChpbW1lZGlhdGUpCi0JCQlkYXZpbmNpX2kyY19leHBhbmRlcl9vcCgweDNhLCBVU0JfRFJWVkJVUywgIWlzX29uKTsKKwkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmZXZtX3ZidXNfd29yayk7Ci0jZW5kaWYKIAl9CiAjZW5kaWYKIAlpZiAoaW1tZWRpYXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggMTI4ZTk0OS4uNGEzNTc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC04Miw5ICs4Miw5IEBACiAvKgogICogVGhpcyBnZXRzIG1hbnkga2luZHMgb2YgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbjoKICAqCS0gS2NvbmZpZyBmb3IgZXZlcnl0aGluZyB1c2VyLWNvbmZpZ3VyYWJsZQotICoJLSA8YXNtL2FyY2gvaGRyY19jbmYuaD4gZm9yIFNPQyBvciBmYW1pbHkgZGV0YWlscwogICoJLSBwbGF0Zm9ybV9kZXZpY2UgZm9yIGFkZHJlc3NpbmcsIGlycSwgYW5kIHBsYXRmb3JtX2RhdGEKICAqCS0gcGxhdGZvcm1fZGF0YSBpcyBtb3N0bHkgZm9yIGJvYXJkLXNwZWNpZmljIGluZm9ybWFyaW9uCisgKgkgIChwbHVzIHJlY2VudHJseSwgU09DIG9yIGZhbWlseSBkZXRhaWxzKQogICoKICAqIE1vc3Qgb2YgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgKHNvbWVkYXkpIHZhbmlzaC4KICAqLwpAQCAtOTc0LDkgKzk3NCw5IEBACiAvKgogICogVGhlIHNpbGljb24gZWl0aGVyIGhhcyBoYXJkLXdpcmVkIGVuZHBvaW50IGNvbmZpZ3VyYXRpb25zLCBvciBlbHNlCiAgKiAiZHluYW1pYyBmaWZvIiBzaXppbmcuICBUaGUgZHJpdmVyIGhhcyBzdXBwb3J0IGZvciBib3RoLCB0aG91Z2ggYXQgdGhpcwotICogd3JpdGluZyBvbmx5IHRoZSBkeW5hbWljIHNpemluZyBpcyB2ZXJ5IHdlbGwgdGVzdGVkLiAgIFdlIHVzZSBub3JtYWwKLSAqIGlkaW9tcyB0byBzbyBib3RoIG1vZGVzIGFyZSBjb21waWxlLXRlc3RlZCwgYnV0IGRlYWQgY29kZSBlbGltaW5hdGlvbgotICogbGVhdmVzIG9ubHkgdGhlIHJlbGV2YW50IG9uZSBpbiB0aGUgb2JqZWN0IGZpbGUuCisgKiB3cml0aW5nIG9ubHkgdGhlIGR5bmFtaWMgc2l6aW5nIGlzIHZlcnkgd2VsbCB0ZXN0ZWQuICAgU2luY2Ugd2Ugc3dpdGNoZWQKKyAqIGF3YXkgZnJvbSBjb21waWxlLXRpbWUgaGFyZHdhcmUgcGFyYW1ldGVycywgd2UgY2FuIG5vIGxvbmdlciByZWx5IG9uCisgKiBkZWFkIGNvZGUgZWxpbWluYXRpb24gdG8gbGVhdmUgb25seSB0aGUgcmVsZXZhbnQgb25lIGluIHRoZSBvYmplY3QgZmlsZS4KICAqCiAgKiBXZSBkb24ndCBjdXJyZW50bHkgdXNlIGR5bmFtaWMgZmlmbyBzZXR1cCBjYXBhYmlsaXR5IHRvIGRvIGFueXRoaW5nCiAgKiBtb3JlIHRoYW4gc2VsZWN0aW5nIG9uZSBvZiBhIGJ1bmNoIG9mIHByZWRlZmluZWQgY29uZmlndXJhdGlvbnMuCkBAIC0xODA2LDYgKzE4MDYsNyBAQAogCW11c2ItPmN0cmxfYmFzZSA9IG1iYXNlOwogCW11c2ItPm5JcnEgPSAtRU5PREVWOwogCW11c2ItPmNvbmZpZyA9IGNvbmZpZzsKKwlCVUdfT04obXVzYi0+Y29uZmlnLT5udW1fZXBzID4gTVVTQl9DX05VTV9FUFMpOwogCWZvciAoZXBudW0gPSAwLCBlcCA9IG11c2ItPmVuZHBvaW50czsKIAkJCWVwbnVtIDwgbXVzYi0+Y29uZmlnLT5udW1fZXBzOwogCQkJZXBudW0rKywgZXArKykgewpAQCAtMjA1NCwxNSArMjA1NSw2IEBACiAKIAl9CiAKLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlpZiAobXVzYi0+Y2xvY2spCi0JCWNsa19wdXQobXVzYi0+Y2xvY2spOwotCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOwotCW11c2JfZnJlZShtdXNiKTsKLQlyZXR1cm4gc3RhdHVzOwotCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZGUpOwogCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92YnVzKTsKQEAgLTIwNzEsMTIgKzIwNjMsMzEgQEAKICNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgKi8KIAlzdGF0dXMgPSAwOwogI2VuZGlmCisJaWYgKHN0YXR1cykKKwkJZ290byBmYWlsMjsKKworCXJldHVybiAwOworCitmYWlsMjoKKyNpZmRlZiBDT05GSUdfU1lTRlMKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfdmJ1cyk7CisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URworCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfc3JwKTsKKyNlbmRpZgorI2VuZGlmCisJbXVzYl9wbGF0Zm9ybV9leGl0KG11c2IpOworZmFpbDoKKwlkZXZfZXJyKG11c2ItPmNvbnRyb2xsZXIsCisJCSJtdXNiX2luaXRfY29udHJvbGxlciBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisKKwlpZiAobXVzYi0+Y2xvY2spCisJCWNsa19wdXQobXVzYi0+Y2xvY2spOworCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOworCW11c2JfZnJlZShtdXNiKTsKIAogCXJldHVybiBzdGF0dXM7CiAKLWZhaWwyOgotCW11c2JfcGxhdGZvcm1fZXhpdChtdXNiKTsKLQlnb3RvIGZhaWw7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYwppbmRleCBhNTc2NTJmLi4zZjVlMzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogewogCXZvaWQgX19pb21lbQkJKnJlZ3MgPSBtdXNiLT5jb250cm9sX2VwLT5yZWdzOwogCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwotCXUxNgkJCXRtcDsKKwl1MTYJCQljb3VudCwgY3NyOwogCiAJcmVxID0gbmV4dF9lcDBfcmVxdWVzdChtdXNiKTsKIApAQCAtNDQ5LDM1ICs0NDksMzUgQEAKIAkJdW5zaWduZWQJbGVuID0gcmVxLT5sZW5ndGggLSByZXEtPmFjdHVhbDsKIAogCQkvKiByZWFkIHRoZSBidWZmZXIgKi8KLQkJdG1wID0gbXVzYl9yZWFkYihyZWdzLCBNVVNCX0NPVU5UMCk7Ci0JCWlmICh0bXAgPiBsZW4pIHsKKwkJY291bnQgPSBtdXNiX3JlYWRiKHJlZ3MsIE1VU0JfQ09VTlQwKTsKKwkJaWYgKGNvdW50ID4gbGVuKSB7CiAJCQlyZXEtPnN0YXR1cyA9IC1FT1ZFUkZMT1c7Ci0JCQl0bXAgPSBsZW47CisJCQljb3VudCA9IGxlbjsKIAkJfQotCQltdXNiX3JlYWRfZmlmbygmbXVzYi0+ZW5kcG9pbnRzWzBdLCB0bXAsIGJ1Zik7Ci0JCXJlcS0+YWN0dWFsICs9IHRtcDsKLQkJdG1wID0gTVVTQl9DU1IwX1BfU1ZEUlhQS1RSRFk7Ci0JCWlmICh0bXAgPCA2NCB8fCByZXEtPmFjdHVhbCA9PSByZXEtPmxlbmd0aCkgeworCQltdXNiX3JlYWRfZmlmbygmbXVzYi0+ZW5kcG9pbnRzWzBdLCBjb3VudCwgYnVmKTsKKwkJcmVxLT5hY3R1YWwgKz0gY291bnQ7CisJCWNzciA9IE1VU0JfQ1NSMF9QX1NWRFJYUEtUUkRZOworCQlpZiAoY291bnQgPCA2NCB8fCByZXEtPmFjdHVhbCA9PSByZXEtPmxlbmd0aCkgewogCQkJbXVzYi0+ZXAwX3N0YXRlID0gTVVTQl9FUDBfU1RBR0VfU1RBVFVTSU47Ci0JCQl0bXAgfD0gTVVTQl9DU1IwX1BfREFUQUVORDsKKwkJCWNzciB8PSBNVVNCX0NTUjBfUF9EQVRBRU5EOwogCQl9IGVsc2UKIAkJCXJlcSA9IE5VTEw7CiAJfSBlbHNlCi0JCXRtcCA9IE1VU0JfQ1NSMF9QX1NWRFJYUEtUUkRZIHwgTVVTQl9DU1IwX1BfU0VORFNUQUxMOworCQljc3IgPSBNVVNCX0NTUjBfUF9TVkRSWFBLVFJEWSB8IE1VU0JfQ1NSMF9QX1NFTkRTVEFMTDsKIAogCiAJLyogQ29tcGxldGlvbiBoYW5kbGVyIG1heSBjaG9vc2UgdG8gc3RhbGwsIGUuZy4gYmVjYXVzZSB0aGUKIAkgKiBtZXNzYWdlIGp1c3QgcmVjZWl2ZWQgaG9sZHMgaW52YWxpZCBkYXRhLgogCSAqLwogCWlmIChyZXEpIHsKLQkJbXVzYi0+YWNrcGVuZCA9IHRtcDsKKwkJbXVzYi0+YWNrcGVuZCA9IGNzcjsKIAkJbXVzYl9nX2VwMF9naXZlYmFjayhtdXNiLCByZXEpOwogCQlpZiAoIW11c2ItPmFja3BlbmQpCiAJCQlyZXR1cm47CiAJCW11c2ItPmFja3BlbmQgPSAwOwogCX0KIAltdXNiX2VwX3NlbGVjdChtdXNiLT5tcmVncywgMCk7Ci0JbXVzYl93cml0ZXcocmVncywgTVVTQl9DU1IwLCB0bXApOworCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfQ1NSMCwgY3NyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IDhiNGJlMDEuLjMxMzM5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAvKgogICogQ2xlYXIgVFggZmlmby4gTmVlZGVkIHRvIGF2b2lkIEJBQkJMRSBlcnJvcnMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX2hfdHhfZmx1c2hfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqZXApCitzdGF0aWMgdm9pZCBtdXNiX2hfdHhfZmx1c2hfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqZXApCiB7CiAJdm9pZCBfX2lvbWVtCSplcGlvID0gZXAtPnJlZ3M7CiAJdTE2CQljc3I7CkBAIC0yOTEsNiArMjkxLDcgQEAKIAkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCiAJCQkpOwogCisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAobXVzYl90b19oY2QobXVzYiksIHVyYik7CiAJc3Bpbl91bmxvY2soJm11c2ItPmxvY2spOwogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKG11c2JfdG9faGNkKG11c2IpLCB1cmIsIHN0YXR1cyk7CiAJc3Bpbl9sb2NrKCZtdXNiLT5sb2NrKTsKQEAgLTM1Myw4ICszNTQsNiBAQAogCQlicmVhazsKIAl9CiAKLQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChtdXNiX3RvX2hjZChtdXNiKSwgdXJiKTsKLQogCXFoLT5pc19yZWFkeSA9IDA7CiAJX19tdXNiX2dpdmViYWNrKG11c2IsIHVyYiwgc3RhdHVzKTsKIAlxaC0+aXNfcmVhZHkgPSByZWFkeTsKQEAgLTQzNiw3ICs0MzUsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB1MTYgbXVzYl9oX2ZsdXNoX3J4ZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBjc3IpCitzdGF0aWMgdTE2IG11c2JfaF9mbHVzaF9yeGZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgY3NyKQogewogCS8qIHdlIGRvbid0IHdhbnQgZmlmbyB0byBmaWxsIGl0c2VsZiBhZ2FpbjsKIAkgKiBpZ25vcmUgZG1hICh2YXJpb3VzIG1vZGVscyksCkBAIC0xMDA1LDcgKzEwMDQsNyBAQAogCiAvKgogICogSGFuZGxlIGRlZmF1bHQgZW5kcG9pbnQgaW50ZXJydXB0IGFzIGhvc3QuIE9ubHkgY2FsbGVkIGluIElSUSB0aW1lCi0gKiBmcm9tIHRoZSBMaW51eElzcigpIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKiBmcm9tIG11c2JfaW50ZXJydXB0KCkuCiAgKgogICogY2FsbGVkIHdpdGggY29udHJvbGxlciBpcnFsb2NrZWQKICAqLwpAQCAtMTc5MSw3ICsxNzkwLDkgQEAKIAkgKi8KIAlxaCA9IGt6YWxsb2Moc2l6ZW9mICpxaCwgbWVtX2ZsYWdzKTsKIAlpZiAoIXFoKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE4NzMsNyArMTg3NCwxMSBAQAogCQkJLyogc2V0IHVwIHR0IGluZm8gaWYgbmVlZGVkICovCiAJCQlpZiAodXJiLT5kZXYtPnR0KSB7CiAJCQkJcWgtPmhfcG9ydF9yZWcgPSAodTgpIHVyYi0+ZGV2LT50dHBvcnQ7Ci0JCQkJcWgtPmhfYWRkcl9yZWcgfD0gMHg4MDsKKwkJCQlpZiAodXJiLT5kZXYtPnR0LT5odWIpCisJCQkJCXFoLT5oX2FkZHJfcmVnID0KKwkJCQkJCSh1OCkgdXJiLT5kZXYtPnR0LT5odWItPmRldm51bTsKKwkJCQlpZiAodXJiLT5kZXYtPnR0LT5tdWx0aSkKKwkJCQkJcWgtPmhfYWRkcl9yZWcgfD0gMHg4MDsKIAkJCX0KIAkJfQogCX0KQEAgLTE5MDMsNyArMTkwOCw5IEBACiAKIGRvbmU6CiAJaWYgKHJldCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlrZnJlZShxaCk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCmluZGV4IDZiYmVkYWUuLjIyM2YwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCkBAIC0zNyw3ICszNyw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaWZuZGVmCUNPTkZJR19BUk0KKyNpZiAhZGVmaW5lZChDT05GSUdfQVJNKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJIKSBcCisJJiYgIWRlZmluZWQoQ09ORklHX0FWUjMyKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDMzIpIFwKKwkmJiAhZGVmaW5lZChDT05GSUdfUFBDNjQpCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQogCXsgaW5zbCgodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwppbmRleCA5YmE4ZmI3Li44YzczNGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKQEAgLTQ1LDggKzQ1LDggQEAKICNkZWZpbmUgTVVTQl9IU0RNQV9BRERSRVNTCQkweDgKICNkZWZpbmUgTVVTQl9IU0RNQV9DT1VOVAkJMHhjCiAKLSNkZWZpbmUgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChfYkNoYW5uZWwsIF9vZmZzZXQpCQlcCi0JCShNVVNCX0hTRE1BX0JBU0UgKyAoX2JDaGFubmVsIDw8IDQpICsgX29mZnNldCkKKyNkZWZpbmUgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChfYmNoYW5uZWwsIF9vZmZzZXQpCQlcCisJCShNVVNCX0hTRE1BX0JBU0UgKyAoX2JjaGFubmVsIDw8IDQpICsgX29mZnNldCkKIAogLyogY29udHJvbCByZWdpc3RlciAoMTYtYml0KTogKi8KICNkZWZpbmUgTVVTQl9IU0RNQV9FTkFCTEVfU0hJRlQJCTAKQEAgLTY3LDIzICs2NywyMyBAQAogc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXI7CiAKIHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsIHsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwJCUNoYW5uZWw7CisJc3RydWN0IGRtYV9jaGFubmVsCQljaGFubmVsOwogCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyCSpjb250cm9sbGVyOwotCXUzMgkJCQlkd1N0YXJ0QWRkcmVzczsKKwl1MzIJCQkJc3RhcnRfYWRkcjsKIAl1MzIJCQkJbGVuOwotCXUxNgkJCQl3TWF4UGFja2V0U2l6ZTsKLQl1OAkJCQliSW5kZXg7CisJdTE2CQkJCW1heF9wYWNrZXRfc3o7CisJdTgJCQkJaWR4OwogCXU4CQkJCWVwbnVtOwogCXU4CQkJCXRyYW5zbWl0OwogfTsKIAogc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgewotCXN0cnVjdCBkbWFfY29udHJvbGxlcgkJQ29udHJvbGxlcjsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbAkJYUNoYW5uZWxbTVVTQl9IU0RNQV9DSEFOTkVMU107Ci0Jdm9pZAkJCQkqcERtYVByaXZhdGU7Ci0Jdm9pZCBfX2lvbWVtCQkJKnBDb3JlQmFzZTsKLQl1OAkJCQliQ2hhbm5lbENvdW50OwotCXU4CQkJCWJtVXNlZENoYW5uZWxzOworCXN0cnVjdCBkbWFfY29udHJvbGxlcgkJY29udHJvbGxlcjsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbAkJY2hhbm5lbFtNVVNCX0hTRE1BX0NIQU5ORUxTXTsKKwl2b2lkCQkJCSpwcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtCQkJKmJhc2U7CisJdTgJCQkJY2hhbm5lbF9jb3VudDsKKwl1OAkJCQl1c2VkX2NoYW5uZWxzOwogCXU4CQkJCWlycTsKIH07CiAKQEAgLTkzLDkxICs5Myw5MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9yZWxlYXNlKHN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWwpOworc3RhdGljIHZvaWQgZG1hX2NoYW5uZWxfcmVsZWFzZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwpOwogCiBzdGF0aWMgaW50IGRtYV9jb250cm9sbGVyX3N0b3Aoc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0KLQkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBDb250cm9sbGVyKTsKLQlzdHJ1Y3QgbXVzYiAqbXVzYiA9IChzdHJ1Y3QgbXVzYiAqKSBjb250cm9sbGVyLT5wRG1hUHJpdmF0ZTsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsOwotCXU4IGJCaXQ7CisJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjb250YWluZXJfb2YoYywKKwkJCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBjb250cm9sbGVyKTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CisJdTggYml0OwogCi0JaWYgKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICE9IDApIHsKKwlpZiAoY29udHJvbGxlci0+dXNlZF9jaGFubmVscyAhPSAwKSB7CiAJCWRldl9lcnIobXVzYi0+Y29udHJvbGxlciwKIAkJCSJTdG9wcGluZyBETUEgY29udHJvbGxlciB3aGlsZSBjaGFubmVsIGFjdGl2ZVxuIik7CiAKLQkJZm9yIChiQml0ID0gMDsgYkJpdCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJCaXQrKykgewotCQkJaWYgKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICYgKDEgPDwgYkJpdCkpIHsKLQkJCQlwQ2hhbm5lbCA9ICZjb250cm9sbGVyLT5hQ2hhbm5lbFtiQml0XS5DaGFubmVsOwotCQkJCWRtYV9jaGFubmVsX3JlbGVhc2UocENoYW5uZWwpOworCQlmb3IgKGJpdCA9IDA7IGJpdCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJpdCsrKSB7CisJCQlpZiAoY29udHJvbGxlci0+dXNlZF9jaGFubmVscyAmICgxIDw8IGJpdCkpIHsKKwkJCQljaGFubmVsID0gJmNvbnRyb2xsZXItPmNoYW5uZWxbYml0XS5jaGFubmVsOworCQkJCWRtYV9jaGFubmVsX3JlbGVhc2UoY2hhbm5lbCk7CiAKLQkJCQlpZiAoIWNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzKQorCQkJCWlmICghY29udHJvbGxlci0+dXNlZF9jaGFubmVscykKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCAqZG1hX2NoYW5uZWxfYWxsb2NhdGUoc3RydWN0IGRtYV9jb250cm9sbGVyICpjLAogCQkJCXN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTggdHJhbnNtaXQpCiB7Ci0JdTggYkJpdDsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsID0gTlVMTDsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqcEltcGxDaGFubmVsID0gTlVMTDsKLQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9Ci0JCQljb250YWluZXJfb2YoYywgc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIsIENvbnRyb2xsZXIpOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbCA9IE5VTEw7CisJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gTlVMTDsKKwl1OCBiaXQ7CiAKLQlmb3IgKGJCaXQgPSAwOyBiQml0IDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYkJpdCsrKSB7Ci0JCWlmICghKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICYgKDEgPDwgYkJpdCkpKSB7Ci0JCQljb250cm9sbGVyLT5ibVVzZWRDaGFubmVscyB8PSAoMSA8PCBiQml0KTsKLQkJCXBJbXBsQ2hhbm5lbCA9ICYoY29udHJvbGxlci0+YUNoYW5uZWxbYkJpdF0pOwotCQkJcEltcGxDaGFubmVsLT5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLQkJCXBJbXBsQ2hhbm5lbC0+YkluZGV4ID0gYkJpdDsKLQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0gPSBod19lcC0+ZXBudW07Ci0JCQlwSW1wbENoYW5uZWwtPnRyYW5zbWl0ID0gdHJhbnNtaXQ7Ci0JCQlwQ2hhbm5lbCA9ICYocEltcGxDaGFubmVsLT5DaGFubmVsKTsKLQkJCXBDaGFubmVsLT5wcml2YXRlX2RhdGEgPSBwSW1wbENoYW5uZWw7Ci0JCQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7Ci0JCQlwQ2hhbm5lbC0+bWF4X2xlbiA9IDB4MTAwMDA7CisJZm9yIChiaXQgPSAwOyBiaXQgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiaXQrKykgeworCQlpZiAoIShjb250cm9sbGVyLT51c2VkX2NoYW5uZWxzICYgKDEgPDwgYml0KSkpIHsKKwkJCWNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgfD0gKDEgPDwgYml0KTsKKwkJCW11c2JfY2hhbm5lbCA9ICYoY29udHJvbGxlci0+Y2hhbm5lbFtiaXRdKTsKKwkJCW11c2JfY2hhbm5lbC0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisJCQltdXNiX2NoYW5uZWwtPmlkeCA9IGJpdDsKKwkJCW11c2JfY2hhbm5lbC0+ZXBudW0gPSBod19lcC0+ZXBudW07CisJCQltdXNiX2NoYW5uZWwtPnRyYW5zbWl0ID0gdHJhbnNtaXQ7CisJCQljaGFubmVsID0gJihtdXNiX2NoYW5uZWwtPmNoYW5uZWwpOworCQkJY2hhbm5lbC0+cHJpdmF0ZV9kYXRhID0gbXVzYl9jaGFubmVsOworCQkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCQljaGFubmVsLT5tYXhfbGVuID0gMHgxMDAwMDsKIAkJCS8qIFR4ID0+IG1vZGUgMTsgUnggPT4gbW9kZSAwICovCi0JCQlwQ2hhbm5lbC0+ZGVzaXJlZF9tb2RlID0gdHJhbnNtaXQ7Ci0JCQlwQ2hhbm5lbC0+YWN0dWFsX2xlbiA9IDA7CisJCQljaGFubmVsLT5kZXNpcmVkX21vZGUgPSB0cmFuc21pdDsKKwkJCWNoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHBDaGFubmVsOworCisJcmV0dXJuIGNoYW5uZWw7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCkKK3N0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwogCi0JcENoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwotCXBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MgPSAwOwotCXBJbXBsQ2hhbm5lbC0+bGVuID0gMDsKKwljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKKwltdXNiX2NoYW5uZWwtPnN0YXJ0X2FkZHIgPSAwOworCW11c2JfY2hhbm5lbC0+bGVuID0gMDsKIAotCXBJbXBsQ2hhbm5lbC0+Y29udHJvbGxlci0+Ym1Vc2VkQ2hhbm5lbHMgJj0KLQkJfigxIDw8IHBJbXBsQ2hhbm5lbC0+YkluZGV4KTsKKwltdXNiX2NoYW5uZWwtPmNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgJj0KKwkJfigxIDw8IG11c2JfY2hhbm5lbC0+aWR4KTsKIAotCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTjsKKwljaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTjsKIH0KIAotc3RhdGljIHZvaWQgY29uZmlndXJlX2NoYW5uZWwoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCwKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAogCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCiB7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKnBJbXBsQ2hhbm5lbCA9Ci0JCShzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKSBwQ2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gcEltcGxDaGFubmVsLT5jb250cm9sbGVyOwotCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5wQ29yZUJhc2U7Ci0JdTggYkNoYW5uZWwgPSBwSW1wbENoYW5uZWwtPmJJbmRleDsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gbXVzYl9jaGFubmVsLT5jb250cm9sbGVyOworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5iYXNlOworCXU4IGJjaGFubmVsID0gbXVzYl9jaGFubmVsLT5pZHg7CiAJdTE2IGNzciA9IDA7CiAKIAlEQkcoNCwgIiVwLCBwa3Rfc3ogJWQsIGFkZHIgMHgleCwgbGVuICVkLCBtb2RlICVkXG4iLAotCQkJcENoYW5uZWwsIHBhY2tldF9zeiwgZG1hX2FkZHIsIGxlbiwgbW9kZSk7CisJCQljaGFubmVsLCBwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOwogCiAJaWYgKG1vZGUpIHsKIAkJY3NyIHw9IDEgPDwgTVVTQl9IU0RNQV9NT0RFMV9TSElGVDsKQEAgLTE5NSwxODAgKzE5NSwxODMgQEAKIAkJfQogCX0KIAotCWNzciB8PSAocEltcGxDaGFubmVsLT5lcG51bSA8PCBNVVNCX0hTRE1BX0VORFBPSU5UX1NISUZUKQorCWNzciB8PSAobXVzYl9jaGFubmVsLT5lcG51bSA8PCBNVVNCX0hTRE1BX0VORFBPSU5UX1NISUZUKQogCQl8ICgxIDw8IE1VU0JfSFNETUFfRU5BQkxFX1NISUZUKQogCQl8ICgxIDw8IE1VU0JfSFNETUFfSVJRRU5BQkxFX1NISUZUKQotCQl8IChwSW1wbENoYW5uZWwtPnRyYW5zbWl0CisJCXwgKG11c2JfY2hhbm5lbC0+dHJhbnNtaXQKIAkJCQk/ICgxIDw8IE1VU0JfSFNETUFfVFJBTlNNSVRfU0hJRlQpCiAJCQkJOiAwKTsKIAogCS8qIGFkZHJlc3MvY291bnQgKi8KIAltdXNiX3dyaXRlbChtYmFzZSwKLQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwKKwkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwKIAkJZG1hX2FkZHIpOwogCW11c2Jfd3JpdGVsKG1iYXNlLAotCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UKSwKKwkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCiAJCWxlbik7CiAKIAkvKiBjb250cm9sICh0aGlzIHNob3VsZCBzdGFydCB0aGluZ3MpICovCiAJbXVzYl93cml0ZXcobWJhc2UsCi0JCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQ09OVFJPTCksCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09OVFJPTCksCiAJCWNzcik7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2NoYW5uZWxfcHJvZ3JhbShzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsLAorc3RhdGljIGludCBkbWFfY2hhbm5lbF9wcm9ncmFtKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAogCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCiB7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKnBJbXBsQ2hhbm5lbCA9Ci0JCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwogCiAJREJHKDIsICJlcCVkLSVzIHBrdF9zeiAlZCwgZG1hX2FkZHIgMHgleCBsZW5ndGggJWQsIG1vZGUgJWRcbiIsCi0JCXBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCXBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQgPyAiVHgiIDogIlJ4IiwKKwkJbXVzYl9jaGFubmVsLT5lcG51bSwKKwkJbXVzYl9jaGFubmVsLT50cmFuc21pdCA/ICJUeCIgOiAiUngiLAogCQlwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOwogCi0JQlVHX09OKHBDaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV04gfHwKLQkJcENoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSk7CisJQlVHX09OKGNoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTiB8fAorCQljaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpOwogCi0JcENoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwotCXBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MgPSBkbWFfYWRkcjsKLQlwSW1wbENoYW5uZWwtPmxlbiA9IGxlbjsKLQlwSW1wbENoYW5uZWwtPndNYXhQYWNrZXRTaXplID0gcGFja2V0X3N6OwotCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfQlVTWTsKKwljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKKwltdXNiX2NoYW5uZWwtPnN0YXJ0X2FkZHIgPSBkbWFfYWRkcjsKKwltdXNiX2NoYW5uZWwtPmxlbiA9IGxlbjsKKwltdXNiX2NoYW5uZWwtPm1heF9wYWNrZXRfc3ogPSBwYWNrZXRfc3o7CisJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0JVU1k7CiAKIAlpZiAoKG1vZGUgPT0gMSkgJiYgKGxlbiA+PSBwYWNrZXRfc3opKQotCQljb25maWd1cmVfY2hhbm5lbChwQ2hhbm5lbCwgcGFja2V0X3N6LCAxLCBkbWFfYWRkciwgbGVuKTsKKwkJY29uZmlndXJlX2NoYW5uZWwoY2hhbm5lbCwgcGFja2V0X3N6LCAxLCBkbWFfYWRkciwgbGVuKTsKIAllbHNlCi0JCWNvbmZpZ3VyZV9jaGFubmVsKHBDaGFubmVsLCBwYWNrZXRfc3osIDAsIGRtYV9hZGRyLCBsZW4pOworCQljb25maWd1cmVfY2hhbm5lbChjaGFubmVsLCBwYWNrZXRfc3osIDAsIGRtYV9hZGRyLCBsZW4pOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCkKK3N0YXRpYyBpbnQgZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKLQl1OCBiQ2hhbm5lbCA9IHBJbXBsQ2hhbm5lbC0+YkluZGV4OwotCXZvaWQgX19pb21lbSAqbWJhc2UgPSBwSW1wbENoYW5uZWwtPmNvbnRyb2xsZXItPnBDb3JlQmFzZTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBtdXNiX2NoYW5uZWwtPmNvbnRyb2xsZXItPmJhc2U7CisKKwl1OCBiY2hhbm5lbCA9IG11c2JfY2hhbm5lbC0+aWR4OwogCXUxNiBjc3I7CiAKLQlpZiAocENoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgewotCQlpZiAocEltcGxDaGFubmVsLT50cmFuc21pdCkgeworCWlmIChjaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKKwkJaWYgKG11c2JfY2hhbm5lbC0+dHJhbnNtaXQpIHsKIAogCQkJY3NyID0gbXVzYl9yZWFkdyhtYmFzZSwKLQkJCQlNVVNCX0VQX09GRlNFVChwSW1wbENoYW5uZWwtPmVwbnVtLAorCQkJCU1VU0JfRVBfT0ZGU0VUKG11c2JfY2hhbm5lbC0+ZXBudW0sCiAJCQkJCQlNVVNCX1RYQ1NSKSk7CiAJCQljc3IgJj0gfihNVVNCX1RYQ1NSX0FVVE9TRVQgfAogCQkJCSBNVVNCX1RYQ1NSX0RNQUVOQUIgfAogCQkJCSBNVVNCX1RYQ1NSX0RNQU1PREUpOwogCQkJbXVzYl93cml0ZXcobWJhc2UsCi0JCQkJTVVTQl9FUF9PRkZTRVQocEltcGxDaGFubmVsLT5lcG51bSwKLQkJCQkJCU1VU0JfVFhDU1IpLAorCQkJCU1VU0JfRVBfT0ZGU0VUKG11c2JfY2hhbm5lbC0+ZXBudW0sIE1VU0JfVFhDU1IpLAogCQkJCWNzcik7CiAJCX0gZWxzZSB7CiAJCQljc3IgPSBtdXNiX3JlYWR3KG1iYXNlLAotCQkJCU1VU0JfRVBfT0ZGU0VUKHBJbXBsQ2hhbm5lbC0+ZXBudW0sCisJCQkJTVVTQl9FUF9PRkZTRVQobXVzYl9jaGFubmVsLT5lcG51bSwKIAkJCQkJCU1VU0JfUlhDU1IpKTsKIAkJCWNzciAmPSB+KE1VU0JfUlhDU1JfQVVUT0NMRUFSIHwKIAkJCQkgTVVTQl9SWENTUl9ETUFFTkFCIHwKIAkJCQkgTVVTQl9SWENTUl9ETUFNT0RFKTsKIAkJCW11c2Jfd3JpdGV3KG1iYXNlLAotCQkJCU1VU0JfRVBfT0ZGU0VUKHBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCQkJCQlNVVNCX1JYQ1NSKSwKKwkJCQlNVVNCX0VQX09GRlNFVChtdXNiX2NoYW5uZWwtPmVwbnVtLCBNVVNCX1JYQ1NSKSwKIAkJCQljc3IpOwogCQl9CiAKIAkJbXVzYl93cml0ZXcobWJhc2UsCi0JCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0NPTlRST0wpLAorCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT05UUk9MKSwKIAkJCTApOwogCQltdXNiX3dyaXRlbChtYmFzZSwKLQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQUREUkVTUyksCisJCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0FERFJFU1MpLAogCQkJMCk7CiAJCW11c2Jfd3JpdGVsKG1iYXNlLAotCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCisJCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UKSwKIAkJCTApOwogCi0JCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfRlJFRTsKKwkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfY29udHJvbGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJpdmF0ZV9kYXRhKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0KLQkJKHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICopcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWw7Ci0Jc3RydWN0IG11c2IgKm11c2IgPSBjb250cm9sbGVyLT5wRG1hUHJpdmF0ZTsKLQl2b2lkIF9faW9tZW0gKm1iYXNlID0gY29udHJvbGxlci0+cENvcmVCYXNlOwotCXN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWw7Ci0JdTggYkNoYW5uZWw7Ci0JdTE2IGNzcjsKLQl1MzIgZHdBZGRyZXNzOwotCXU4IGludF9oc2RtYTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IHByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKKworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5iYXNlOworCiAJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CisKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdTggYmNoYW5uZWw7CisJdTggaW50X2hzZG1hOworCisJdTMyIGFkZHI7CisJdTE2IGNzcjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAlpbnRfaHNkbWEgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIpOwogCWlmICghaW50X2hzZG1hKQogCQlnb3RvIGRvbmU7CiAKLQlmb3IgKGJDaGFubmVsID0gMDsgYkNoYW5uZWwgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiQ2hhbm5lbCsrKSB7Ci0JCWlmIChpbnRfaHNkbWEgJiAoMSA8PCBiQ2hhbm5lbCkpIHsKLQkJCXBJbXBsQ2hhbm5lbCA9IChzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKQotCQkJCQkmKGNvbnRyb2xsZXItPmFDaGFubmVsW2JDaGFubmVsXSk7Ci0JCQlwQ2hhbm5lbCA9ICZwSW1wbENoYW5uZWwtPkNoYW5uZWw7CisJZm9yIChiY2hhbm5lbCA9IDA7IGJjaGFubmVsIDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYmNoYW5uZWwrKykgeworCQlpZiAoaW50X2hzZG1hICYgKDEgPDwgYmNoYW5uZWwpKSB7CisJCQltdXNiX2NoYW5uZWwgPSAoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikKKwkJCQkJJihjb250cm9sbGVyLT5jaGFubmVsW2JjaGFubmVsXSk7CisJCQljaGFubmVsID0gJm11c2JfY2hhbm5lbC0+Y2hhbm5lbDsKIAogCQkJY3NyID0gbXVzYl9yZWFkdyhtYmFzZSwKLQkJCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwKKwkJCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwKIAkJCQkJCQlNVVNCX0hTRE1BX0NPTlRST0wpKTsKIAotCQkJaWYgKGNzciAmICgxIDw8IE1VU0JfSFNETUFfQlVTRVJST1JfU0hJRlQpKQotCQkJCXBJbXBsQ2hhbm5lbC0+Q2hhbm5lbC5zdGF0dXMgPQorCQkJaWYgKGNzciAmICgxIDw8IE1VU0JfSFNETUFfQlVTRVJST1JfU0hJRlQpKSB7CisJCQkJbXVzYl9jaGFubmVsLT5jaGFubmVsLnN0YXR1cyA9CiAJCQkJCU1VU0JfRE1BX1NUQVRVU19CVVNfQUJPUlQ7Ci0JCQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJdTggZGV2Y3RsOwogCi0JCQkJZHdBZGRyZXNzID0gbXVzYl9yZWFkbChtYmFzZSwKKwkJCQlhZGRyID0gbXVzYl9yZWFkbChtYmFzZSwKIAkJCQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoCi0JCQkJCQkJYkNoYW5uZWwsCisJCQkJCQkJYmNoYW5uZWwsCiAJCQkJCQkJTVVTQl9IU0RNQV9BRERSRVNTKSk7Ci0JCQkJcENoYW5uZWwtPmFjdHVhbF9sZW4gPSBkd0FkZHJlc3MKLQkJCQkJLSBwSW1wbENoYW5uZWwtPmR3U3RhcnRBZGRyZXNzOworCQkJCWNoYW5uZWwtPmFjdHVhbF9sZW4gPSBhZGRyCisJCQkJCS0gbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyOwogCiAJCQkJREJHKDIsICJjaCAlcCwgMHgleCAtPiAweCV4ICglZCAvICVkKSAlc1xuIiwKLQkJCQkJcENoYW5uZWwsIHBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MsCi0JCQkJCWR3QWRkcmVzcywgcENoYW5uZWwtPmFjdHVhbF9sZW4sCi0JCQkJCXBJbXBsQ2hhbm5lbC0+bGVuLAotCQkJCQkocENoYW5uZWwtPmFjdHVhbF9sZW4KLQkJCQkJCTwgcEltcGxDaGFubmVsLT5sZW4pID8KKwkJCQkJY2hhbm5lbCwgbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyLAorCQkJCQlhZGRyLCBjaGFubmVsLT5hY3R1YWxfbGVuLAorCQkJCQltdXNiX2NoYW5uZWwtPmxlbiwKKwkJCQkJKGNoYW5uZWwtPmFjdHVhbF9sZW4KKwkJCQkJCTwgbXVzYl9jaGFubmVsLT5sZW4pID8KIAkJCQkJIj0+IHJlY29uZmlnIDAiIDogIj0+IGNvbXBsZXRlIik7CiAKIAkJCQlkZXZjdGwgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0RFVkNUTCk7CiAKLQkJCQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCQkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CiAKIAkJCQkvKiBjb21wbGV0ZWQgKi8KIAkJCQlpZiAoKGRldmN0bCAmIE1VU0JfREVWQ1RMX0hNKQotCQkJCQkmJiAocEltcGxDaGFubmVsLT50cmFuc21pdCkKLQkJCQkJJiYgKChwQ2hhbm5lbC0+ZGVzaXJlZF9tb2RlID09IDApCi0JCQkJCSAgICB8fCAocENoYW5uZWwtPmFjdHVhbF9sZW4gJgotCQkJCQkgICAgKHBJbXBsQ2hhbm5lbC0+d01heFBhY2tldFNpemUgLSAxKSkpCisJCQkJCSYmIChtdXNiX2NoYW5uZWwtPnRyYW5zbWl0KQorCQkJCQkmJiAoKGNoYW5uZWwtPmRlc2lyZWRfbW9kZSA9PSAwKQorCQkJCQkgICAgfHwgKGNoYW5uZWwtPmFjdHVhbF9sZW4gJgorCQkJCQkgICAgKG11c2JfY2hhbm5lbC0+bWF4X3BhY2tldF9zeiAtIDEpKSkKIAkJCQkJICkgewogCQkJCQkvKiBTZW5kIG91dCB0aGUgcGFja2V0ICovCiAJCQkJCW11c2JfZXBfc2VsZWN0KG1iYXNlLAotCQkJCQkJcEltcGxDaGFubmVsLT5lcG51bSk7CisJCQkJCQltdXNiX2NoYW5uZWwtPmVwbnVtKTsKIAkJCQkJbXVzYl93cml0ZXcobWJhc2UsIE1VU0JfRVBfT0ZGU0VUKAotCQkJCQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0sCisJCQkJCQkJbXVzYl9jaGFubmVsLT5lcG51bSwKIAkJCQkJCQlNVVNCX1RYQ1NSKSwKIAkJCQkJCU1VU0JfVFhDU1JfVFhQS1RSRFkpOwotCQkJCX0gZWxzZQorCQkJCX0gZWxzZSB7CiAJCQkJCW11c2JfZG1hX2NvbXBsZXRpb24oCiAJCQkJCQltdXNiLAotCQkJCQkJcEltcGxDaGFubmVsLT5lcG51bSwKLQkJCQkJCXBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQpOworCQkJCQkJbXVzYl9jaGFubmVsLT5lcG51bSwKKwkJCQkJCW11c2JfY2hhbm5lbC0+dHJhbnNtaXQpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTM4MCw5ICszODMsOSBAQAogCiB2b2lkIGRtYV9jb250cm9sbGVyX2Rlc3Ryb3koc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CiAKLQljb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBDb250cm9sbGVyKTsKIAlpZiAoIWNvbnRyb2xsZXIpCiAJCXJldHVybjsKIApAQCAtMzkzLDcgKzM5Niw3IEBACiB9CiAKIHN0cnVjdCBkbWFfY29udHJvbGxlciAqX19pbml0Ci1kbWFfY29udHJvbGxlcl9jcmVhdGUoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19pb21lbSAqcENvcmVCYXNlKQorZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7CiAJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKQEAgLTQwNSwyOSArNDA4LDMwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciksIEdGUF9LRVJORUwpOworCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZigqY29udHJvbGxlciksIEdGUF9LRVJORUwpOwogCWlmICghY29udHJvbGxlcikKIAkJcmV0dXJuIE5VTEw7CiAKLQljb250cm9sbGVyLT5iQ2hhbm5lbENvdW50ID0gTVVTQl9IU0RNQV9DSEFOTkVMUzsKLQljb250cm9sbGVyLT5wRG1hUHJpdmF0ZSA9IG11c2I7Ci0JY29udHJvbGxlci0+cENvcmVCYXNlID0gcENvcmVCYXNlOworCWNvbnRyb2xsZXItPmNoYW5uZWxfY291bnQgPSBNVVNCX0hTRE1BX0NIQU5ORUxTOworCWNvbnRyb2xsZXItPnByaXZhdGVfZGF0YSA9IG11c2I7CisJY29udHJvbGxlci0+YmFzZSA9IGJhc2U7CiAKLQljb250cm9sbGVyLT5Db250cm9sbGVyLnN0YXJ0ID0gZG1hX2NvbnRyb2xsZXJfc3RhcnQ7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5zdG9wID0gZG1hX2NvbnRyb2xsZXJfc3RvcDsKLQljb250cm9sbGVyLT5Db250cm9sbGVyLmNoYW5uZWxfYWxsb2MgPSBkbWFfY2hhbm5lbF9hbGxvY2F0ZTsKLQljb250cm9sbGVyLT5Db250cm9sbGVyLmNoYW5uZWxfcmVsZWFzZSA9IGRtYV9jaGFubmVsX3JlbGVhc2U7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5jaGFubmVsX3Byb2dyYW0gPSBkbWFfY2hhbm5lbF9wcm9ncmFtOwotCWNvbnRyb2xsZXItPkNvbnRyb2xsZXIuY2hhbm5lbF9hYm9ydCA9IGRtYV9jaGFubmVsX2Fib3J0OworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuc3RhcnQgPSBkbWFfY29udHJvbGxlcl9zdGFydDsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLnN0b3AgPSBkbWFfY29udHJvbGxlcl9zdG9wOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9hbGxvYyA9IGRtYV9jaGFubmVsX2FsbG9jYXRlOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9yZWxlYXNlID0gZG1hX2NoYW5uZWxfcmVsZWFzZTsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLmNoYW5uZWxfcHJvZ3JhbSA9IGRtYV9jaGFubmVsX3Byb2dyYW07CisJY29udHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVsX2Fib3J0ID0gZG1hX2NoYW5uZWxfYWJvcnQ7CiAKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCBkbWFfY29udHJvbGxlcl9pcnEsIElSUUZfRElTQUJMRUQsCi0JCQltdXNiLT5jb250cm9sbGVyLT5idXNfaWQsICZjb250cm9sbGVyLT5Db250cm9sbGVyKSkgeworCQkJbXVzYi0+Y29udHJvbGxlci0+YnVzX2lkLCAmY29udHJvbGxlci0+Y29udHJvbGxlcikpIHsKIAkJZGV2X2VycihkZXYsICJyZXF1ZXN0X2lycSAlZCBmYWlsZWQhXG4iLCBpcnEpOwotCQlkbWFfY29udHJvbGxlcl9kZXN0cm95KCZjb250cm9sbGVyLT5Db250cm9sbGVyKTsKKwkJZG1hX2NvbnRyb2xsZXJfZGVzdHJveSgmY29udHJvbGxlci0+Y29udHJvbGxlcik7CisKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJY29udHJvbGxlci0+aXJxID0gaXJxOwogCi0JcmV0dXJuICZjb250cm9sbGVyLT5Db250cm9sbGVyOworCXJldHVybiAmY29udHJvbGxlci0+Y29udHJvbGxlcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKaW5kZXggOTlmYjdkYy4uNTM3Zjk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKQEAgLTIyMCw4ICsyMjAsOCBAQAogCiAJYnVmID0ga3phbGxvYyhjb3VudCArIEhDSV9IRUFERVJfTEVOR1RILCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZikgewotCQllcnIoIiVzLSBremFsbG9jKCVkKSBmYWlsZWQuIiwgX19mdW5jX18sCi0JCSAgICBjb3VudCArIEhDSV9IRUFERVJfTEVOR1RIKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMtIGt6YWxsb2MoJWQpIGZhaWxlZC5cbiIsCisJCQlfX2Z1bmNfXywgY291bnQgKyBIQ0lfSEVBREVSX0xFTkdUSCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiAJaWYgKCF0dHkpIHsKIAkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7Ci0JCWVycigiJXMgLSBObyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vIHR0eSBhdmFpbGFibGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDsKIAl9CiAKQEAgLTMzNiw3ICszMzYsNyBAQAogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhaXJjYWJsZV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KSB7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sCiAJCQlzaXplb2Yoc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCmluZGV4IDE5MTNiYzcuLmI3ZWFjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCS8qIHNlZSBjb21tZW50cyBhdCB0b3Agb2YgZmlsZSAqLwogCXByaXYtPmJhZF9mbG93X2NvbnRyb2wgPQogCQkobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPD0gMHgwMjA2KSA/IDEgOiAwOwotCWluZm8oImJjZERldmljZTogJTA0eCwgYmZjOiAlZCIsCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiYmNkRGV2aWNlOiAlMDR4LCBiZmM6ICVkXG4iLAogCQkJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKIAkJCQkJcHJpdi0+YmFkX2Zsb3dfY29udHJvbCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMjM2LDcgKzIzNiw3IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewogCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWRcbiIpOwogCX0KIAogZXhpdDoKQEAgLTM0Miw4ICszNDIsOCBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICIKKwkJCSJyZXN1bHQgJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTM4MiwxMiArMzgyLDEyIEBACiAJCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCQljb250cm9sX3N0YXRlIHw9IChUSU9DTV9EVFJ8VElPQ01fUlRTKTsKIAkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCAxKSA8IDApCi0JCQkJZXJyKCJTZXQgRFRSIGVycm9yIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IERUUiBlcnJvclxuIik7CiAJCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwogCQkJaWYgKCEob2xkX2NmbGFnICYgQ1JUU0NUUykpCiAJCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QKIAkJCQkJCQkJLCAxKSA8IDApCi0JCQkJCWVycigiU2V0IFJUUyBlcnJvciIpOworCQkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgUlRTIGVycm9yXG4iKTsKIAkJfQogCX0KIApAQCAtNDAzLDE4ICs0MDMsMTggQEAKIAkJLyogUmVwb3J0IHRoZSBhY3R1YWwgYmF1ZCByYXRlIGJhY2sgdG8gdGhlIGNhbGxlciAqLwogCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CQVVEUkFURV9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGJhdWRyYXRlIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgYmF1ZHJhdGUgZXJyb3JcbiIpOwogCX0gZWxzZSB7CiAJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJCQkJQkVMS0lOX1NBX0ZMT1dfTk9ORSkgPCAwKQotCQkJZXJyKCJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yXG4iKTsKIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwogCQljb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIDApIDwgMCkKLQkJCWVycigiRFRSIExPVyBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRFRSIExPVyBlcnJvclxuIik7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCAwKSA8IDApCi0JCQllcnIoIlJUUyBMT1cgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlJUUyBMT1cgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgcGFyaXR5ICovCkBAIC00MjUsNyArNDI1LDcgQEAKIAkJZWxzZQogCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX1BBUklUWV9OT05FOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9QQVJJVFlfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBwYXJpdHkgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBwYXJpdHkgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyAqLwpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EQVRBX0JJVFNfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBkYXRhIGJpdHMgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBkYXRhIGJpdHMgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyAqLwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCQkJCQk6IEJFTEtJTl9TQV9TVE9QX0JJVFMoMSk7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1NUT1BfQklUU19SRVFVRVNULAogCQkJCQkJCXVyYl92YWx1ZSkgPCAwKQotCQkJZXJyKCJTZXQgc3RvcCBiaXRzIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgc3RvcCBiaXRzIGVycm9yXG4iKTsKIAl9CiAKIAkvKiBTZXQgZmxvdyBjb250cm9sICovCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJCXVyYl92YWx1ZSAmPSB+KEJFTEtJTl9TQV9GTE9XX0lSVFMpOwogCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGZsb3cgY29udHJvbCBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGZsb3cgY29udHJvbCBlcnJvclxuIik7CiAJfQogCiAJLyogc2F2ZSBvZmYgdGhlIG1vZGlmaWVkIHBvcnQgc2V0dGluZ3MgKi8KQEAgLTQ5NCw3ICs0OTQsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKIAlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CUkVBS19SRVFVRVNULCBicmVha19zdGF0ZSA/IDEgOiAwKSA8IDApCi0JCWVycigiU2V0IGJyZWFrX2N0bCAlZCIsIGJyZWFrX3N0YXRlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGJyZWFrX2N0bCAlZFxuIiwgYnJlYWtfc3RhdGUpOwogfQogCiAKQEAgLTU1NCwxMyArNTU0LDEzIEBACiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCBydHMpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IFJUUyBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBSVFMgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCBkdHIpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IERUUiBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBEVFIgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiBleGl0OgpAQCAtNTc3LDcgKzU3Nyw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZiZWxraW5fZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYmVsa2luX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKaW5kZXggMTI3OTU1My4uODAwOGQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpAQCAtNzUzLDcgKzc1Myw4IEBACiAJfQogCiAJLyogU3VjY2VzcyAqLwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKaW5kZXggOTRlZjM2Yy4uODU4YmRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpAQCAtMTQxLDcgKzE0MSw4IEBACiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYiwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCSJ1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkXG4iKTsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19mdW5jX18pOwogCX0KIApAQCAtMjc0LDggKzI3NSw5IEBACiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJLyogVGhyb3cgYXdheSBkYXRhLiBObyBiZXR0ZXIgaWRlYSB3aGF0IHRvIGRvIHdpdGggaXQuICovCiAJCQlwcml2LT53cmZpbGxlZCA9IDA7CiAJCQlwcml2LT53cnNlbnQgPSAwOwpAQCAtMzUxLDcgKzM1Myw5IEBACiAJCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAocmVzdWx0KQotCQkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyAiCisJCQkJCSJyZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fZnVuY19fKTsKIAkJfQogCX0KQEAgLTM2MCw3ICszNjQsNyBAQAogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQiKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZFxuIik7CiAJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19mdW5jX18pOwogfQogCkBAIC00MTQsOCArNDE4LDggQEAKIAkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgIgorCQkJCSJ1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fZnVuY19fKTsKIAl9CiB9CkBAIC00NjIsOCArNDY2LDkgQEAKIAkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQkvKiBUaHJvdyBhd2F5IGRhdGEuIE5vIGJldHRlciBpZGVhIHdoYXQgdG8gZG8gd2l0aCBpdC4gKi8KIAkJCXByaXYtPndyZmlsbGVkID0gMDsKIAkJCXByaXYtPndyc2VudCA9IDA7CkBAIC00OTksOCArNTA0LDkgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIiAiCisJICAgICAgIERSSVZFUl9BVVRIT1IgIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggZjM1MTRhOS4uZWFlNDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC00MDQsOCArNDA0LDggQEAKIAkJCSByZXR2YWwgIT0gLUVOT0RFVik7CiAKIAkJaWYgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpKSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzZW5kaW5nIHNlcmlhbCAiCisJCQkJImxpbmUgc2V0dGluZ3MgLSAlZFxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwogCQl9IGVsc2UgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTQ0Myw3ICs0NDMsOCBAQAogCQkJCQkJJiYgcmV0dmFsICE9IC1FTk9ERVYpOwogCiAJCWlmIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgIgorCQkJCSJsaW5lIHNldHRpbmdzIC0gJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSB7CkBAIC00NzYsOCArNDc3LDggQEAKIAlwcml2LT5jb21tX2lzX29rID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQllcnIoImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSBpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnQiLAotCSAgICBwb3J0LT5udW1iZXIpOworCWRldl9lcnIoJnBvcnQtPmRldiwgImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSAiCisJCSJpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnRcbiIsIHBvcnQtPm51bWJlcik7CiB9CiAKIApAQCAtNjc5LDcgKzY4MCw4IEBACiAKIAkvKiBzZXR1cCB0aGUgcG9ydCBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlpZiAoIXBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKLQkJZXJyKCIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMTA3LDggKzExMDksOCBAQAogCQlkYXRhX2JpdHMgPSAzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4IiwKLQkJCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4XG4iLAorCQkJX19mdW5jX18pOwogCQlkYXRhX2JpdHMgPSAzOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTY1OCw3ICsxNjYwLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIAogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCA1NzU2YWM2Li42OWY4NGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC02NjEsNyArNjYxLDggQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkIiwgX19mdW5jX18sIHJldCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiAKIH0KQEAgLTc0Myw3ICs3NDQsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldCkKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkXG4iLAogCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwogCXJldHVybiByZXQ7CiB9CkBAIC04MTIsNyArODE0LDggQEAKIAlzcGluX3VubG9jaygmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAlpZiAocmV0KQotCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCIsIF9fZnVuY19fLCByZXQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05MDcsNyArOTEwLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIH0KIApAQCAtMTIxNCw3ICsxMjE4LDggQEAKIAkvKiByZXR1cm4gbGVuZ3RoIG9mIG5ldyBkYXRhIHdyaXR0ZW4sIG9yIGVycm9yICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAJaWYgKHJldCA8IDApCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAlkYmcoImRpZ2lfd3JpdGU6IHJldHVybmluZyAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTEyMzUsMTQgKzEyNDAsMTYgQEAKIAogCS8qIHBvcnQgYW5kIHNlcmlhbCBzYW5pdHkgY2hlY2sgKi8KIAlpZiAocG9ydCA9PSBOVUxMIHx8IChwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogcG9ydCBvciBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlpZiAoc2VyaWFsID09IE5VTEwgfHwgKHNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHNlcmlhbCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHNlcmlhbCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyODQsNyArMTI5MSw4IEBACiAKIAlzcGluX3VubG9jaygmcHJpdi0+ZHBfcG9ydF9sb2NrKTsKIAlpZiAocmV0KQotCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CiB9CiAKQEAgLTE1MTgsOCArMTUyNiw5IEBACiAJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJldCAhPSAwKSB7Ci0JCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCi0JCQkJCV9fZnVuY19fLCByZXQsIGkpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCisJCQkJX19mdW5jX18sIHJldCwgaSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE2MTgsMjIgKzE2MjcsMjYgQEAKIAlkYmcoImRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrOiBUT1AiKTsKIAogCS8qIHBvcnQgc2FuaXR5IGNoZWNrLCBkbyBub3QgcmVzdWJtaXQgaWYgcG9ydCBpcyBub3QgdmFsaWQgKi8KLQlpZiAocG9ydCA9PSBOVUxMIHx8IChwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocG9ydC0+c2VyaWFsID09IE5VTEwgfHwKIAkJKHNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHNlcmlhbCBpcyBiYWQgb3Igc2VyaWFsLT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXM6IHNlcmlhbCBpcyBiYWQgb3Igc2VyaWFsLT5wcml2YXRlICIKKwkJCSJpcyBOVUxMLCBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAJLyogZG8gbm90IHJlc3VibWl0IHVyYiBpZiBpdCBoYXMgYW55IHN0YXR1cyBlcnJvciAqLwogCWlmIChzdGF0dXMpIHsKLQkJZXJyKCIlczogbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzOiBzdGF0dXM9JWQsIHBvcnQ9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IG5vbnplcm8gcmVhZCBidWxrIHN0YXR1czogc3RhdHVzPSVkLCBwb3J0PSVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjUwLDggKzE2NjMsOSBAQAogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZXJyKCIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZCIsCi0JCSAgICBfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAl9CiAKIH0KQEAgLTE2ODcsMTAgKzE3MDEsMTEgQEAKIAogCS8qIHNob3J0L211bHRpcGxlIHBhY2tldCBjaGVjayAqLwogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gbGVuICsgMikgewotCQllcnIoIiVzOiBJTkNPTVBMRVRFIE9SIE1VTFRJUExFIFBBQ0tFVCwgdXJiLT5zdGF0dXM9JWQsICIKLQkJICAgICJwb3J0PSVkLCBvcGNvZGU9JWQsIGxlbj0lZCwgYWN0dWFsX2xlbmd0aD0lZCwgIgotCQkgICAgInN0YXR1cz0lZCIsIF9fZnVuY19fLCBzdGF0dXMsIHByaXYtPmRwX3BvcnRfbnVtLAotCQkgICAgb3Bjb2RlLCBsZW4sIHVyYi0+YWN0dWFsX2xlbmd0aCwgcG9ydF9zdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogSU5DT01QTEVURSBPUiBNVUxUSVBMRSBQQUNLRVQsICIKKwkJCSJ1cmItPnN0YXR1cz0lZCwgcG9ydD0lZCwgb3Bjb2RlPSVkLCBsZW49JWQsICIKKwkJCSJhY3R1YWxfbGVuZ3RoPSVkLCBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMsCisJCQlwcml2LT5kcF9wb3J0X251bSwgb3Bjb2RlLCBsZW4sIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCXBvcnRfc3RhdHVzKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTg1NCw3ICsxODY5LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRpZ2lfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggMTA3MmU4NC4uOGE2OWNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKLQkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz9cbiIsCiAJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00OTksMTUgKzQ5OSwxNSBAQAogCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQl3cml0ZV91cmJfcG9vbFtpXSA9IHVyYjsKIAkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJlbXBlZzogTm8gbW9yZSB1cmJzPz8/XG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwKIAkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCWVycigiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLAotCQkJICAgIF9fZnVuY19fKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZW1wZWc6ICVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiICIKKwkJCSAgICAgICAiYnVmZmVycy4iLCBfX2Z1bmNfXyk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTUxOSw3ICs1MTksOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwppbmRleCA3MTFlODRmLi4zY2ZjNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwpAQCAtMjgsNyArMjgsOCBAQAogCiAJLyogZGJnKCJlenVzYl93cml0ZW1lbW9yeSAleCwgJWQiLCBhZGRyZXNzLCBsZW5ndGgpOyAqLwogCWlmICghc2VyaWFsLT5kZXYpIHsKLQkJZXJyKCIlcyAtIG5vIHBoeXNpY2FsIGRldmljZSBwcmVzZW50LCBmYWlsaW5nLiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJlenVzYjogJXMgLSBubyBwaHlzaWNhbCBkZXZpY2UgcHJlc2VudCwgIgorCQkgICAgICAgImZhaWxpbmcuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBjMmFjMTI5Li41MWQ3YmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNTc4LDYgKzU3OCw3IEBACiAJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9TQU1CQV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PQ0VBTklDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVFRJX1ZJRCwgVFRJX1FMMzU1UF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JNX0NBTlZJRVdfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQpIH0sCkBAIC0xMTUzLDcgKzExNTQsNyBAQAogCQkvKiBBc3N1bWUgaXRzIGFuIEZUMjMyUiAgKi8KIAkJcHJpdi0+Y2hpcF90eXBlID0gRlQyMzJSTDsKIAl9Ci0JaW5mbygiRGV0ZWN0ZWQgJXMiLCBmdGRpX2NoaXBfbmFtZVtwcml2LT5jaGlwX3R5cGVdKTsKKwlkZXZfaW5mbygmdWRldi0+ZGV2LCAiRGV0ZWN0ZWQgJXNcbiIsIGZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOwogfQogCiAKQEAgLTEzMjYsNyArMTMyNyw3IEBACiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikgewotCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsIF9fZnVuY19fLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLAogCQkJCQlzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNDA5LDcgKzE0MTAsOCBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoaW50ZXJmYWNlID09IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdKSB7Ci0JCWluZm8oIklnbm9yaW5nIHNlcmlhbCBwb3J0IHJlc2VydmVkIGZvciBKVEFHIik7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCQkgIklnbm9yaW5nIHNlcmlhbCBwb3J0IHJlc2VydmVkIGZvciBKVEFHXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xNDI3LDcgKzE0MjksOCBAQAogCiAJaWYgKGVwLT5lbmFibGVkICYmIGVwX2Rlc2MtPndNYXhQYWNrZXRTaXplID09IDApIHsKIAkJZXBfZGVzYy0+d01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNigweDQwKTsKLQkJaW5mbygiRml4aW5nIGludmFsaWQgd01heFBhY2tldFNpemUgb24gcmVhZCBwaXBlIik7CisJCWRldl9pbmZvKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJICJGaXhpbmcgaW52YWxpZCB3TWF4UGFja2V0U2l6ZSBvbiByZWFkIHBpcGVcbiIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTUyMSw4ICsxNTI0LDkgQEAKIAkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTU1Niw3ICsxNTYwLDcgQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgYnVmLCAwLAogCQkJCSAgICBXRFJfVElNRU9VVCkgPCAwKSB7Ci0JCQllcnIoImVycm9yIGZyb20gZmxvd2NvbnRyb2wgdXJiIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJlcnJvciBmcm9tIGZsb3djb250cm9sIHVyYlxuIik7CiAJCX0KIAogCQkvKiBkcm9wIFJUUyBhbmQgRFRSICovCkBAIC0xNjIxLDE0ICsxNjI1LDE1IEBACiAKIAlidWZmZXIgPSBrbWFsbG9jKHRyYW5zZmVyX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uXG4iLCBfX2Z1bmNfXyk7CiAJCWNvdW50ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9ub19idWZmZXI7CiAJfQogCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXVyYikgewotCQllcnIoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnNcbiIsIF9fZnVuY19fKTsKIAkJY291bnQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX25vX3VyYjsKIAl9CkBAIC0xNjcyLDggKzE2NzcsOSBAQAogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQljb3VudCA9IHN0YXR1czsKIAkJZ290byBlcnJvcjsKIAl9IGVsc2UgewpAQCAtMTc4MCw3ICsxNzg2LDggQEAKIAlidWZmZXJlZCA9IChpbnQpcHJpdi0+dHhfb3V0c3RhbmRpbmdfYnl0ZXM7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCWlmIChidWZmZXJlZCA8IDApIHsKLQkJZXJyKCIlcyBvdXRzdGFuZGluZyB0eCBieXRlcyBpcyBuZWdhdGl2ZSEiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG91dHN0YW5kaW5nIHR4IGJ5dGVzIGlzIG5lZ2F0aXZlIVxuIiwKKwkJCV9fZnVuY19fKTsKIAkJYnVmZmVyZWQgPSAwOwogCX0KIAlyZXR1cm4gYnVmZmVyZWQ7CkBAIC0xNzk2LDExICsxODAzLDEyIEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPiAwKSB7Ci0JCWVycigiJXMgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlZCBhY3R1YWxfbGVuZ3RoICVkIG51bWJlciBvZiBwYWNrZXRzICVkIiwKLQkJCQlfX2Z1bmNfXywKLQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKLQkJZXJyKCIlcyB0cmFuc2Zlcl9mbGFncyAleCAiLCBfX2Z1bmNfXywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJWQgIgorCQkJImFjdHVhbF9sZW5ndGggJWQgbnVtYmVyIG9mIHBhY2tldHMgJWRcbiIsIF9fZnVuY19fLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgdHJhbnNmZXJfZmxhZ3MgJXhcbiIsIF9fZnVuY19fLAorCQkJdXJiLT50cmFuc2Zlcl9mbGFncyk7CiAJfQogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTE4MjEsNyArMTgyOSw3IEBACiAJfQogCiAJaWYgKHVyYiAhPSBwb3J0LT5yZWFkX3VyYikKLQkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc3RhdHVzKSB7CiAJCS8qIFRoaXMgd2lsbCBoYXBwZW4gYXQgY2xvc2UgZXZlcnkgdGltZSBzbyBpdCBpcyBhIGRiZyBub3QgYW4KQEAgLTE5MjQsNyArMTkzMiw4IEBACiAKIAkJbGVuZ3RoID0gbWluKFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKIAkJaWYgKGxlbmd0aCA8IDApIHsKLQkJCWVycigiJXMgLSBiYWQgcGFja2V0IGxlbmd0aDogJWQiLCBfX2Z1bmNfXywgbGVuZ3RoKzIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgcGFja2V0IGxlbmd0aDogJWRcbiIsCisJCQkJX19mdW5jX18sIGxlbmd0aCsyKTsKIAkJCWxlbmd0aCA9IDA7CiAJCX0KIApAQCAtMjAzOSw4ICsyMDQ4LDkgQEAKIAogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0KIG91dDoKIAl0dHlfa3JlZl9wdXQodHR5KTsKQEAgLTIwNjksOCArMjA3OSw4IEBACiAJCQlGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUsCiAJCQl1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCiAJCQlidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJZXJyKCIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgKHN0YXRlIHdhcyAlZCkiLAotCQkJCQkJCV9fZnVuY19fLCBicmVha19zdGF0ZSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIEZBSUxFRCB0byBlbmFibGUvZGlzYWJsZSBicmVhayBzdGF0ZSAiCisJCQkiKHN0YXRlIHdhcyAlZClcbiIsIF9fZnVuY19fLCBicmVha19zdGF0ZSk7CiAJfQogCiAJZGJnKCIlcyBicmVhayBzdGF0ZSBpcyAlZCAtIHVyYiBpcyAlZCIsIF9fZnVuY19fLApAQCAtMjE0Miw3ICsyMTUyLDcgQEAKIAkJY2FzZSBDUzc6IHVyYl92YWx1ZSB8PSA3OyBkYmcoIlNldHRpbmcgQ1M3Iik7IGJyZWFrOwogCQljYXNlIENTODogdXJiX3ZhbHVlIHw9IDg7IGRiZygiU2V0dGluZyBDUzgiKTsgYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJDU0laRSB3YXMgc2V0IGJ1dCBub3QgQ1M1LUNTOFxuIik7CiAJCX0KIAl9CiAKQEAgLTIxNTUsNyArMjE2NSw4IEBACiAJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAogCQkJICAgIHVyYl92YWx1ZSAsIHByaXYtPmludGVyZmFjZSwKIAkJCSAgICBidWYsIDAsIFdEUl9TSE9SVF9USU1FT1VUKSA8IDApIHsKLQkJZXJyKCIlcyBGQUlMRUQgdG8gc2V0IGRhdGFiaXRzL3N0b3BiaXRzL3Bhcml0eSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgRkFJTEVEIHRvIHNldCAiCisJCQkiZGF0YWJpdHMvc3RvcGJpdHMvcGFyaXR5XG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJLyogTm93IGRvIHRoZSBiYXVkcmF0ZSAqLwpAQCAtMjE2NiwxNCArMjE3NywxNyBAQAogCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLAogCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJCWVycigiJXMgZXJyb3IgZnJvbSBkaXNhYmxlIGZsb3djb250cm9sIHVyYiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgZXJyb3IgZnJvbSBkaXNhYmxlIGZsb3djb250cm9sIHVyYlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCX0KIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwogCQljbGVhcl9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0aGUgYmF1ZHJhdGUgZGV0ZXJtaW5lZCBiZWZvcmUgKi8KIAkJaWYgKGNoYW5nZV9zcGVlZCh0dHksIHBvcnQpKQotCQkJZXJyKCIlcyB1cmIgZmFpbGVkIHRvIHNldCBiYXVkcmF0ZSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHVyYiBmYWlsZWQgdG8gc2V0IGJhdWRyYXRlXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJLyogRW5zdXJlIFJUUyBhbmQgRFRSIGFyZSByYWlzZWQgd2hlbiBiYXVkcmF0ZSBjaGFuZ2VkIGZyb20gMCAqLwogCQlpZiAoIW9sZF90ZXJtaW9zIHx8IChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSA9PSBCMCkKIAkJCXNldF9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwpAQCAtMjE4OSw3ICsyMjAzLDggQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAgLCAoRlRESV9TSU9fUlRTX0NUU19IUyB8IHByaXYtPmludGVyZmFjZSksCiAJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJZXJyKCJ1cmIgZmFpbGVkIHRvIHNldCB0byBydHMvY3RzIGZsb3cgY29udHJvbCIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSJ1cmIgZmFpbGVkIHRvIHNldCB0byBydHMvY3RzIGZsb3cgY29udHJvbFxuIik7CiAJCX0KIAogCX0gZWxzZSB7CkBAIC0yMjIwLDcgKzIyMzUsOCBAQAogCQkJCQkgICAgdXJiX3ZhbHVlICwgKEZURElfU0lPX1hPTl9YT0ZGX0hTCiAJCQkJCQkJIHwgcHJpdi0+aW50ZXJmYWNlKSwKIAkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJCWVycigidXJiIGZhaWxlZCB0byBzZXQgdG8geG9uL3hvZmYgZmxvdyBjb250cm9sIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXJiIGZhaWxlZCB0byBzZXQgdG8gIgorCQkJCQkieG9uL3hvZmYgZmxvdyBjb250cm9sXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIGVsc2UgY2xhdXNlIHRvIG9ubHkgcnVuIGlmIGNmbGFnICEgQ1JUU0NUUyBhbmQgaWZsYWcKQEAgLTIyMzMsNyArMjI0OSw4IEBACiAJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwKIAkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJCWVycigidXJiIGZhaWxlZCB0byBjbGVhciBmbG93IGNvbnRyb2wiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJ1cmIgZmFpbGVkIHRvIGNsZWFyIGZsb3cgY29udHJvbFxuIik7CiAJCQl9CiAJCX0KIApAQCAtMjQyNSw3ICsyNDQyLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX3Npb19kZXZpY2UpOwpAQCAtMjQ1OCw1ICsyNDc2LDUgQEAKIE1PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgdmVuZG9yIElEIChkZWZhdWx0PSIKIAkJX19NT0RVTEVfU1RSSU5HKEZURElfVklEKSIpIik7CiBtb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgcHJvZHVjdCBJRCIpOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0LCAiVXNlciBzcGVjaWZpZWQgcHJvZHVjdCBJRCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDhhNWI2ZGYuLjA3YTM5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC02MjgsNiArNjI4LDExIEBACiAjZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLwogCiAvKgorICogT2NlYW5pYyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfT0NFQU5JQ19QSUQJMHhGNDYwICAvKiBPY2VhbmljIGRpdmUgaW5zdHJ1bWVudCAqLworCisvKgogICogVFRpIChUaHVybGJ5IFRoYW5kYXIgSW5zdHJ1bWVudHMpCiAgKi8KICNkZWZpbmUgVFRJX1ZJRAkJCTB4MTAzRQkvKiBWZW5kb3IgSWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDJhZDA1NjkuLjhlNmE2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMTU4NSw3ICsxNTg1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmdhcm1pbl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCmluZGV4IGFiOTA1ODYuLjQzMTMyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwpAQCAtNjMsNyArNjMsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaHA0OWdwX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmhwNDlncF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCA2MTFmOTdmLi5lODVjOGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMzEwOSwxMyArMzEwOSwxMyBAQAogCQkJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIgPQogCQkJCQkJdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KIAkJCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlciA9CiAJCQkJCWttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXVzYl9mcmVlX3VyYihlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiKTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQpAQCAtMzE0NiwxMyArMzE0NiwxMyBAQAogCQkJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiA9CiAJCQkJCQl1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPnJlYWRfdXJiKSB7Ci0JCQkJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CiAJCQkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fYnVmZmVyID0KIAkJCQkJa21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFlZGdlX3NlcmlhbC0+YnVsa19pbl9idWZmZXIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXVzYl9mcmVlX3VyYihlZGdlX3NlcmlhbC0+cmVhZF91cmIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CkBAIC0zMTgxLDcgKzMxODEsOCBAQAogCQl9CiAKIAkJaWYgKCFpbnRlcnJ1cHRfaW5fZm91bmQgfHwgIWJ1bGtfaW5fZm91bmQgfHwgIWJ1bGtfb3V0X2ZvdW5kKSB7Ci0JCQllcnIoIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgd2VyZSBub3QgZm91bmQhIik7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgIgorCQkJCSJ3ZXJlIG5vdCBmb3VuZCFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMzE5MCw4ICszMTkxLDkgQEAKIAkJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYihlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKHJlc3BvbnNlKQotCQkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLAotCQkJCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CiAJfQogCXJldHVybiByZXNwb25zZTsKIH0KQEAgLTMyNTMsNyArMzI1NSw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCWF0b21pY19zZXQoJkNtZFVyYnMsIDApOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogCiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwppbmRleCA1NDFkZDhlLi5jM2NkZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpAQCAtMjk3OCw3ICsyOTc4LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlvX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAyYWZmYTljLi4xMzJiZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTYwOCw3ICs2MDgsNyBAQAogCWJ5dGVzX291dCA9IDA7CiAJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKQEAgLTY5Myw4ICs2OTMsNyBAQAogCX0KIAogCWlmICghcmV0cmllcyAmJiByZXN1bHQpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBkb2luZyBjb250cm9sIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZFxuIiwJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTcwNyw4ICs3MDYsOSBAQAogCiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC03MTYsNyArNzE2LDcgQEAKIAogZW5vbWVtOgogCXJlc3VsdCA9IC1FTk9NRU07Ci0JZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiBlcnJvcjoKIAlpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CiAJa2ZyZWUocHJpdik7CkBAIC03ODEsOCArNzgxLDkgQEAKIAkgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybjsKIH0KIApAQCAtODQ3LDcgKzg0OCw4IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05MDksOCArOTExLDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+YWN0aXZlID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05NTcsNyArOTYwLDcgQEAKIHsKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewotCQllcnIoImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz8iLAorCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTk3Niw3ICs5NzksNiBAQAogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKIAlpZiAodmVuZG9yKSB7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRWZW5kb3IgPSB2ZW5kb3I7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKQEAgLTk4NSw2ICs5ODcsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAorCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCmluZGV4IDQ4MGNhYzIuLjNhYzU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKQEAgLTQ4NSw3ICs0ODUsOCBAQAogCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwd19kZXZpY2UpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDQ1ZDQwNDMuLmI2NzlhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTYwMiw3ICs2MDIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggNTM3MTBhYS4uZTMyMDk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKQEAgLTExODUsNyArMTE4NSw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpdXVfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXV1X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCAxNTQ0N2FmLi45ODc4YzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTIxNyw3ICsyMTcsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCA5OWU5YTE0Li5iZjFhZTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNzQyLDExICs3NDIsMTMgQEAKIAkJZndfbmFtZSA9ICJrZXlzcGFuX3BkYS94aXJjb21fcGdzLmZ3IjsKICNlbmRpZgogCWVsc2UgewotCQllcnIoIiVzOiB1bmtub3duIHZlbmRvciwgYWJvcnRpbmcuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IHVua25vd24gdmVuZG9yLCBhYm9ydGluZy5cbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAocmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJnNlcmlhbC0+ZGV2LT5kZXYpKSB7Ci0JCWVycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLCBmd19uYW1lKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgImZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCWZ3X25hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJcmVjb3JkID0gKGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqKWZ3LT5kYXRhOwpAQCAtNzU2LDEwICs3NTgsMTAgQEAKIAkJCQkJICAgICAodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwKIAkJCQkJICAgICBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbiksIDB4YTApOwogCQlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCQllcnIoImV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgS2V5c3BhbiBQREEgIgotCQkJICAgICJmaXJtd2FyZSAoJWQgJTA0WCAlcCAlZCkiLAotCQkJICAgIHJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAotCQkJICAgIHJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgIgorCQkJCSJmb3IgS2V5c3BhbiBQREEgZmlybXdhcmUgKCVkICUwNFggJXAgJWQpXG4iLAorCQkJCXJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAorCQkJCXJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJlY29yZCA9IGloZXhfbmV4dF9iaW5yZWMocmVjb3JkKTsKQEAgLTg3NCw3ICs4NzYsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2V5c3Bhbl9wZGFfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogI2lmZGVmIFhJUkNPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKaW5kZXggZmYzYTA3Zi4uZGMzNmEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCkBAIC0xODIsMTIgKzE4MiwxMiBAQAogCQkJc2l6ZW9mKHN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzKSwKIAkJCUtMU0lfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJDaGFuZ2UgcG9ydCBzZXR0aW5ncyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOwotCWluZm8oIiVzIC0gJWQgYnl0ZSBibG9jaywgYmF1ZHJhdGUgJXgsIGRhdGFiaXRzICVkLCB1MSAlZCwgdTIgJWQiLAotCSAgICBfX2Z1bmNfXywKLQkgICAgc2V0dGluZ3MtPnBrdGxlbiwKLQkgICAgc2V0dGluZ3MtPmJhdWRyYXRlLCBzZXR0aW5ncy0+ZGF0YWJpdHMsCi0JICAgIHNldHRpbmdzLT51bmtub3duMSwgc2V0dGluZ3MtPnVua25vd24yKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIkNoYW5nZSBwb3J0IHNldHRpbmdzIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJjKTsKKwlkZXZfaW5mbygmcG9ydC0+c2VyaWFsLT5kZXYtPmRldiwKKwkJICIlZCBieXRlIGJsb2NrLCBiYXVkcmF0ZSAleCwgZGF0YWJpdHMgJWQsIHUxICVkLCB1MiAlZFxuIiwKKwkJIHNldHRpbmdzLT5wa3RsZW4sIHNldHRpbmdzLT5iYXVkcmF0ZSwgc2V0dGluZ3MtPmRhdGFiaXRzLAorCQkgc2V0dGluZ3MtPnVua25vd24xLCBzZXR0aW5ncy0+dW5rbm93bjIpOwogCXJldHVybiByYzsKIH0gLyoga2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MgKi8KIApAQCAtMjE1LDcgKzIxNSw3IEBACiAJX191OCBzdGF0dXNfYnVmW0tMU0lfU1RBVFVTQlVGX0xFTl0gPSB7IC0xLCAtMX07CiAJX191MTYgc3RhdHVzOwogCi0JaW5mbygiJXMgLSBzZW5kaW5nIFNJTyBQb2xsIHJlcXVlc3QiLCBfX2Z1bmNfXyk7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsICJzZW5kaW5nIFNJTyBQb2xsIHJlcXVlc3RcbiIpOwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJICAgICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fUE9MTCwKQEAgLTIyNiwxMiArMjI2LDEzIEBACiAJCQkgICAgIDEwMDAwCiAJCQkgICAgICk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJSZWFkaW5nIGxpbmUgc3RhdHVzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlJlYWRpbmcgbGluZSBzdGF0dXMgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKKwkJCXJjKTsKIAllbHNlIHsKIAkJc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHN0YXR1c19idWYpOwogCi0JCWluZm8oIiVzIC0gcmVhZCBzdGF0dXMgJXggJXgiLCBfX2Z1bmNfXywKLQkJICAgICBzdGF0dXNfYnVmWzBdLCBzdGF0dXNfYnVmWzFdKTsKKwkJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsICJyZWFkIHN0YXR1cyAleCAleCIsCisJCQkgc3RhdHVzX2J1ZlswXSwgc3RhdHVzX2J1ZlsxXSk7CiAKIAkJKmxpbmVfc3RhdGVfcCA9IGtsc2lfMTA1X3N0YXR1czJsaW5lc3RhdGUoc3RhdHVzKTsKIAl9CkBAIC0yODAsMTUgKzI4MSwxNiBAQAogCiAJCQlwcml2LT53cml0ZV91cmJfcG9vbFtqXSA9IHVyYjsKIAkJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJCWVycigiTm8gbW9yZSB1cmJzPz8/Iik7CisJCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIk5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQkJZ290byBlcnJfY2xlYW51cDsKIAkJCX0KIAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQogCQkJCWttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwKLQkJCQkJCQkJX19mdW5jX18pOworCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCSIlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLlxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWdvdG8gZXJyX2NsZWFudXA7CiAJCQl9CiAJCX0KQEAgLTQwOSw3ICs0MTEsOCBAQAogCiAJcmMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCAiCisJCQkiZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByYyk7CiAJCXJldHZhbCA9IHJjOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNDI0LDcgKzQyNyw3IEBACiAJCQkgICAgIDAsCiAJCQkgICAgIEtMU0lfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkgewotCQllcnIoIkVuYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRW5hYmxpbmcgcmVhZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCXJldHZhbCA9IHJjOwogCX0gZWxzZQogCQlkYmcoIiVzIC0gZW5hYmxlZCByZWFkaW5nIiwgX19mdW5jX18pOwpAQCAtNDY0LDcgKzQ2Nyw4IEBACiAJCQkJICAgICBOVUxMLCAwLAogCQkJCSAgICAgS0xTSV9USU1FT1VUKTsKIAkJaWYgKHJjIDwgMCkKLQkJCWVycigiRGlzYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiRGlzYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCX0KIAltdXRleF91bmxvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7CiAKQEAgLTQ3NSw4ICs0NzksOSBAQAogCS8qIEZJWE1FICovCiAJLyogd2dnIC0gZG8gSSBuZWVkIHRoaXM/IEkgdGhpbmsgc28uICovCiAJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwotCWluZm8oImtsNWt1c2IxMDUgcG9ydCBzdGF0czogJWxkIGJ5dGVzIGluLCAlbGQgYnl0ZXMgb3V0IiwKLQkJCQkJcHJpdi0+Ynl0ZXNfaW4sIHByaXYtPmJ5dGVzX291dCk7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCSAicG9ydCBzdGF0czogJWxkIGJ5dGVzIGluLCAlbGQgYnl0ZXMgb3V0XG4iLAorCQkgcHJpdi0+Ynl0ZXNfaW4sIHByaXYtPmJ5dGVzX291dCk7CiB9IC8qIGtsc2lfMTA1X2Nsb3NlICovCiAKIApAQCAtNTIyLDcgKzUyNyw5IEBACiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9CiAJCQkJa21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCQllcnIoIiVzIC0gbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uIiwgX19mdW5jX18pOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIiVzIC0gbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uXG4iLAorCQkJCQlfX2Z1bmNfXyk7CiAJCQkJZ290byBleGl0OwogCQkJfQogCQl9CkBAIC01NDksOCArNTU2LDkgQEAKIAkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlidWYgKz0gc2l6ZTsKQEAgLTY5NCw4ICs3MDIsOSBAQAogCQkgICAgICBwb3J0KTsKIAlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmMpCi0JCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmMpOwogfSAvKiBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KIAogCkBAIC03OTksNyArODA4LDggQEAKIAkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4XG4iKTsKIAkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OwogCQkJYnJlYWs7CiAJCX0KQEAgLTg4Niw3ICs4OTYsOCBAQAogCiAJcmMgPSBrbHNpXzEwNV9nZXRfbGluZV9zdGF0ZShwb3J0LCAmbGluZV9zdGF0ZSk7CiAJaWYgKHJjIDwgMCkgewotCQllcnIoIlJlYWRpbmcgbGluZSBjb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJSZWFkaW5nIGxpbmUgY29udHJvbCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCS8qIGJldHRlciByZXR1cm4gdmFsdWU/IEVBR0FJTj8gKi8KIAkJcmV0dXJuIHJjOwogCX0KQEAgLTk0NCw4ICs5NTUsOSBAQAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLAotCQkgICAgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKIApAQCAtOTYwLDcgKzk3Miw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2w1a3VzYjEwNWRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwppbmRleCBjZmNmMzdjLi42Mjg2YmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCkBAIC03NDQsOCArNzQ0LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCA5YjJjZWY4Li4wNzcxMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtMjQ2LDcgKzI0Niw4IEBACiAJCQkJMCwgMCwgJmRpdmlzb3IsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKIAkJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkJLypGSVhNRTogV2hhdCB2YWx1ZSBzcGVlZCByZXN1bHRzICovCi0JCWVycigiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgdmFsdWUsIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLAorCQkJdmFsdWUsIHJjKTsKIAllbHNlCiAJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgc3BlZWQsIHNwZWVkKTsKIAlkYmcoInNldF9iYXVkX3JhdGU6IHZhbHVlOiAweCV4LCBkaXZpc29yOiAweCV4IiwgdmFsdWUsIGRpdmlzb3IpOwpAQCAtMjc0LDggKzI3NSw5IEBACiAJCQkJMCwgMCwgJnplcm9fYnl0ZSwgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUsCiAJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwKLQkJICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgorCQkJImZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULAorCQkJcmMpOwogCiAJaWYgKHBvcnQgJiYgQ19DUlRTQ1RTKHR0eSkpCiAJICAgY3RzX2VuYWJsZV9ieXRlID0gMTsKQEAgLTI4OCw4ICsyOTAsOCBAQAogCQkJMCwgMCwgJmN0c19lbmFibGVfYnl0ZSwgTUNUX1UyMzJfU0VUX0NUU19TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwKLQkJCQkJTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNULCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgorCQkJImZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIE1DVF9VMjMyX1NFVF9DVFNfUkVRVUVTVCwgcmMpOwogCiAJcmV0dXJuIHJjOwogfSAvKiBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlICovCkBAIC0zMDMsNyArMzA1LDggQEAKIAkJCTAsIDAsICZsY3IsIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQotCQllcnIoIlNldCBMSU5FIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpIiwgbGNyLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiU2V0IExJTkUgQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIGxjciwgcmMpOwogCWRiZygic2V0X2xpbmVfY3RybDogMHgleCIsIGxjcik7CiAJcmV0dXJuIHJjOwogfSAvKiBtY3RfdTIzMl9zZXRfbGluZV9jdHJsICovCkBAIC0zMjUsNyArMzI4LDggQEAKIAkJCTAsIDAsICZtY3IsIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJTZXQgTU9ERU0gQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZCkiLCBtY3IsIHJjKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSJTZXQgTU9ERU0gQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIG1jciwgcmMpOwogCWRiZygic2V0X21vZGVtX2N0cmw6IHN0YXRlPTB4JXggPT0+IG1jcj0weCV4IiwgY29udHJvbF9zdGF0ZSwgbWNyKTsKIAogCXJldHVybiByYzsKQEAgLTM0MSw3ICszNDUsOCBAQAogCQkJMCwgMCwgbXNyLCBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJHZXQgTU9ERU0gU1RBVHVzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCSptc3IgPSAwOwogCX0KIAlkYmcoImdldF9tb2RlbV9zdGF0OiAweCV4IiwgKm1zcik7CkBAIC00NzAsOCArNDc1LDkgQEAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCBwaXBlIDB4JXggZXJyICVkIiwKLQkJICAgIHBvcnQtPnJlYWRfdXJiLT5waXBlLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZFxuIiwKKwkJCXBvcnQtPnJlYWRfdXJiLT5waXBlLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNDc5LDggKzQ4NSw5IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewogCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWQiLAotCQkgICAgcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+cGlwZSwgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJInVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5waXBlLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYxMiw4ICs2MTksOSBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIH0gLyogbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2sgKi8KIAogc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTY4MCw3ICs2ODgsOCBAQAogCWNhc2UgQ1M4OgogCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfODsgYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDhcbiIpOwogCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfODsKIAkJYnJlYWs7CiAJfQpAQCAtODE3LDcgKzgyNiw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZtY3RfdTIzMl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZtY3RfdTIzMl9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKaW5kZXggN2I1MzhjYS4uZTc3MmNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCkBAIC0zNTUsMTQgKzM1NSwxNiBAQAogCQltb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOwogCiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsCiAJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewotCQkJZXJyKCIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzLW91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQl1c2JfZnJlZV91cmIobW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSk7CiAJCQltb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gTlVMTDsKIAkJCWNvbnRpbnVlOwpAQCAtNjk0LDcgKzY5Niw4IEBACiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsCiAJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCWVycigiJXMgbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KQEAgLTcxNCw4ICs3MTcsOCBAQAogCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLwogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cykgewotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICIKKwkJCSJ3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJYnl0ZXNfc2VudCA9IHN0YXR1czsKIAkJZ290byBleGl0OwogCX0KQEAgLTk3NSw3ICs5NzgsNyBAQAogCS8qIENhbGN1bGF0ZSB0aGUgRGl2aXNvciAqLwogCXN0YXR1cyA9IGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoYmF1ZHJhdGUsICZkaXZpc29yKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWVycigiJXMgLSBiYWQgYmF1ZCByYXRlIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBiYXVkIHJhdGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTE0NzgsNyArMTQ4MSw3IEBACiAJLyogY3JlYXRlIG91ciBwcml2YXRlIHNlcmlhbCBzdHJ1Y3R1cmUgKi8KIAltb3M3NzIwX3NlcmlhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3NlcmlhbCksIEdGUF9LRVJORUwpOwogCWlmIChtb3M3NzIwX3NlcmlhbCA9PSBOVUxMKSB7Ci0JCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE0OTEsNyArMTQ5NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJbW9zNzcyMF9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vc2NoaXBfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAobW9zNzcyMF9wb3J0ID09IE5VTEwpIHsKLQkJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKIAkJCWtmcmVlKG1vczc3MjBfc2VyaWFsKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTU4NSw3ICsxNTg4LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF9wb3J0X2RldmljZV9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdXNiICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCmluZGV4IDYwNTQzZDcuLmZkYTRhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAJCW1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0gPSB1cmI7CiAKIAkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTm8gbW9yZSB1cmJzPz8/XG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTg1Myw3ICs4NTMsOSBAQAogCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CiAJCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJCW1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0gPSBOVUxMOwotCQkJZXJyKCIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzLW91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTEwMjEsOCArMTAyMyw4IEBACiAJCQkgICAgdXNiX3N1Ym1pdF91cmIoc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiLAogCQkJCQkgICBHRlBfS0VSTkVMKTsKIAkJCWlmIChyZXNwb25zZSkgewotCQkJCWVycigiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLAotCQkJCSAgICBfX2Z1bmNfXywgcmVzcG9uc2UpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyAiCisJCQkJCSJpbnRlcnJ1cHQgdXJiXG4iLCBfX2Z1bmNfXywgcmVzcG9uc2UpOwogCQkJfQogCiAJCX0KQEAgLTEwNTUsOCArMTA1Nyw4IEBACiAJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKIAlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKG1vczc4NDBfcG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXNwb25zZSkgewotCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYiIsIF9fZnVuY19fLAotCQkgICAgcmVzcG9uc2UpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmJcbiIsCisJCQlfX2Z1bmNfXywgcmVzcG9uc2UpOwogCX0KIAogCS8qIGluaXRpYWxpemUgb3VyIHdhaXQgcXVldWVzICovCkBAIC0xNDkyLDcgKzE0OTQsOCBAQAogCQkgICAga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwogCiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0xNTE3LDggKzE1MjAsOCBAQAogCiAJaWYgKHN0YXR1cykgewogCQltb3M3ODQwX3BvcnQtPmJ1c3lbaV0gPSAwOwotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICIKKwkJCSJ3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJYnl0ZXNfc2VudCA9IHN0YXR1czsKIAkJZ290byBleGl0OwogCX0KQEAgLTE4NTYsOCArMTg1OSw3IEBACiAJCS8qIENhbGN1bGF0ZSB0aGUgRGl2aXNvciAqLwogCiAJCWlmIChzdGF0dXMpIHsKLQkJCWVycigiJXMgLSBiYWQgYmF1ZCByYXRlIiwgX19mdW5jX18pOwotCQkJZGJnKCIlc1xuIiwgImJhZCBiYXVkIHJhdGUiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIGJhdWQgcmF0ZVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCQkvKiBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KQEAgLTI0NDYsNyArMjQ0OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJbW9zNzg0MF9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vc2NoaXBfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpIHsKLQkJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXN0YXR1cyA9IC1FTk9NRU07CiAJCQlpLS07IC8qIGRvbid0IGZvbGxvdyBOVUxMIHBvaW50ZXIgY2xlYW5pbmcgdXAgKi8KIAkJCWdvdG8gZXJyb3I7CkBAIC0yNzQzLDcgKzI3NDUsOCBAQAogCQlnb3RvIGZhaWxlZF9wb3J0X2RldmljZV9yZWdpc3RlcjsKIAogCWRiZygiJXNcbiIsICJFbnRyaW5nLi4uIik7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSB1c2IgKi8KIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlvX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwppbmRleCBjNGQ3MGIwLi5kZjY1Mzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKQEAgLTE1NCw4ICsxNTQsOCBAQAogCiAJb2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvZCkgewotCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsCi0JCQkJX19mdW5jX18sIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwKKwkJCV9fZnVuY19fLCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIG9kKTsKQEAgLTE4Myw4ICsxODMsOSBAQAogCQkJb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjQ0LDggKzI0NSw5IEBACiAJCQlvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAKIAlyZXR1cm47CiB9CkBAIC0yOTgsOCArMzAwLDkgQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3cG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KSB7CiAJCXdwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0gZWxzZQogCQlyZXN1bHQgPSBjb3VudDsKIApAQCAtMzY0LDcgKzM2Nyw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZvbW5pbmV0X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA2YjE3MjdlLi5iZDA3ZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC03OSwzOCArNzksMzYgQEAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfVklQRVIJCQkweDY2MDAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfVklQRVJfQlVTCQkweDY2MDEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RfTUFYX1JFQURZCQkweDY3MDEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RfTUFYCQkJMHg2NzExCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fTElHSFQJCTB4NjcyMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0dUCQkweDY3NDEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9FWAkJMHg2NzYxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19MSUdIVAkweDY3MzEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0dUCQkweDY3NTEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0VYCQkweDY3NzEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfS09JX01PREVNCQkweDY4MDAKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfS09JX05FVFdPUksJCTB4NjgxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9NT0RFTQkJMHg2OTAxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX1NDT1JQSU9OX05FVFdPUksJCTB4NjkxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNCQkweDcwMDEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLCQkweDcwMTEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9MSVRFCQkweDcwMjEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9HVAkJMHg3MDQxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fRVgJCTB4NzA2MQotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfTElURQkweDcwMzEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0dUCQkweDcwNTEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0VYCQkweDcwNzEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTU9ERU0JCTB4NzEwMAotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9ORVRXT1JLCQkweDcxMTEKIAogI2RlZmluZSBIVUFXRUlfVkVORE9SX0lECQkJMHgxMkQxCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0U2MDAJCQkweDEwMDEKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTIyMAkJCTB4MTAwMwogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMjIwQklTCQkJMHgxMDA0CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDAxCQkJMHgxNDAxCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDAyCQkJMHgxNDAyCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDAzCQkJMHgxNDAzCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA0CQkJMHgxNDA0CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA1CQkJMHgxNDA1CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA2CQkJMHgxNDA2CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA3CQkJMHgxNDA3CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA4CQkJMHgxNDA4CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA5CQkJMHgxNDA5CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDBBCQkJMHgxNDBBCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDBCCQkJMHgxNDBCCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDBDCQkJMHgxNDBDCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDBECQkJMHgxNDBECisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDBFCQkJMHgxNDBFCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDBGCQkJMHgxNDBGCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDEwCQkJMHgxNDEwCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDExCQkJMHgxNDExCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDEyCQkJMHgxNDEyCkBAIC0xMjEsNiArMTE5LDQ0IEBACiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE3CQkJMHgxNDE3CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE4CQkJMHgxNDE4CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE5CQkJMHgxNDE5CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDFBCQkJMHgxNDFBCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDFCCQkJMHgxNDFCCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDFDCQkJMHgxNDFDCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDFECQkJMHgxNDFECisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDFFCQkJMHgxNDFFCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDFGCQkJMHgxNDFGCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDIwCQkJMHgxNDIwCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDIxCQkJMHgxNDIxCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDIyCQkJMHgxNDIyCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDIzCQkJMHgxNDIzCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDI0CQkJMHgxNDI0CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDI1CQkJMHgxNDI1CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDI2CQkJMHgxNDI2CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDI3CQkJMHgxNDI3CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDI4CQkJMHgxNDI4CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDI5CQkJMHgxNDI5CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDJBCQkJMHgxNDJBCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDJCCQkJMHgxNDJCCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDJDCQkJMHgxNDJDCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDJECQkJMHgxNDJECisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDJFCQkJMHgxNDJFCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDJGCQkJMHgxNDJGCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDMwCQkJMHgxNDMwCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDMxCQkJMHgxNDMxCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDMyCQkJMHgxNDMyCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDMzCQkJMHgxNDMzCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDM0CQkJMHgxNDM0CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDM1CQkJMHgxNDM1CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDM2CQkJMHgxNDM2CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDM3CQkJMHgxNDM3CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDM4CQkJMHgxNDM4CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDM5CQkJMHgxNDM5CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNBCQkJMHgxNDNBCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNCCQkJMHgxNDNCCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNDCQkJMHgxNDNDCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNECQkJMHgxNDNECisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNFCQkJMHgxNDNFCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNGCQkJMHgxNDNGCiAKICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRAkJMHgxNDEwCiAKQEAgLTIxOCw4ICsyNTQsMTkgQEAKIC8qIFpURSBQUk9EVUNUUyAqLwogI2RlZmluZSBaVEVfVkVORE9SX0lECQkJCTB4MTlkMgogI2RlZmluZSBaVEVfUFJPRFVDVF9NRjYyOAkJCTB4MDAxNQorI2RlZmluZSBaVEVfUFJPRFVDVF9NRjYyNgkJCTB4MDAzMQogI2RlZmluZSBaVEVfUFJPRFVDVF9DRE1BX1RFQ0gJCQkweGZmZmUKIAorLyogRXJpY3Nzb24gcHJvZHVjdHMgKi8KKyNkZWZpbmUgRVJJQ1NTT05fVkVORE9SX0lECQkJMHgwYmRiCisjZGVmaW5lIEVSSUNTU09OX1BST0RVQ1RfRjM1MDdHCQkJMHgxOTAwCisKKy8qIFBhbnRlY2ggcHJvZHVjdHMgKi8KKyNkZWZpbmUgUEFOVEVDSF9WRU5ET1JfSUQJCQkweDEwNmMKKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1BDNTc0MAkJCTB4MzcwMQorI2RlZmluZSBQQU5URUNIX1BST0RVQ1RfUEM1NzUwCQkJMHgzNzAyICAvKiBQWC01MDAgKi8KKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1VNMTUwCQkJMHgzNzExCisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKQEAgLTIzNSwzNiArMjgyLDM0IEBACiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1ZJUEVSKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9WSVBFUl9CVVMpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0dUX01BWF9SRUFEWSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfR1RfTUFYKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0xJR0hUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0dUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0VYKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX05FVFdPUktfTElHSFQpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19HVCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0VYKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9LT0lfTU9ERU0pIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0tPSV9ORVRXT1JLKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9NT0RFTSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfU0NPUlBJT05fTkVUV09SSykgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0xJVEUpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fR1QpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fRVgpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19MSVRFKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfR1QpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19FWCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTU9ERU0pIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfS09JX05FVFdPUkspIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FNjAwLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTIyMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UyMjBCSVMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQwMSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDAyLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MDMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQwNCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDA1LCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MDYsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQwNywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDA4LCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MDksIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQwQSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDBCLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MEMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQwRCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDBFLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MEYsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQxMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDExLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MTIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCkBAIC0yNzUsNiArMzIwLDQ0IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQxNywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDE4LCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MTksIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQxQSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDFCLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MUMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQxRCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDFFLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MUYsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQyMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDIxLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MjIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQyMywgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDI0LCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MjUsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDI3LCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MjgsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQyOSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDJBLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MkIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQyQywgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDJELCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MkUsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQyRiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDMwLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MzEsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzMiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDMzLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MzQsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzNSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDM2LCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MzcsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzOCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDM5LCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0EsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzQiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNDLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0QsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzRSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNGLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUXzk1MDgpIH0sCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y2NDApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFY2NDAvWFY2MjAgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjYyMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gVjYyMC9TNjIwICovCkBAIC0zMTgsNyArNDAxLDggQEAKIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIDB4ODEzNikgfSwJLyogRGVsbCBXaXJlbGVzcyBIU0RQQSA1NTIwID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NjBEICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMzcpIH0sCS8qIERlbGwgV2lyZWxlc3MgSFNEUEEgNTUyMCAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTM4KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU1MjAgVm9kYSBJIE1vYmlsZSBCcm9hZGJhbmQgKDNHIEhTRFBBKSBNaW5pY2FyZCAqLwotCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0FEVV9FMTAwQSkgfSwKKwl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIDB4ODE0NykgfSwJLyogRGVsbCBXaXJlbGVzcyA1NTMwIE1vYmlsZSBCcm9hZGJhbmQgKDNHIEhTUEEpIE1pbmktQ2FyZCAqLworCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0FEVV9FMTAwQSkgfSwJLyogQURVLUUxMDAsIEFEVS0zMTAgKi8KIAl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9BRFVfNTAwQSkgfSwKIAl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9BRFVfNjIwVVcpIH0sCiAJeyBVU0JfREVWSUNFKEFYRVNTVEVMX1ZFTkRPUl9JRCwgQVhFU1NURUxfUFJPRFVDVF9NVjExMEgpIH0sCkBAIC0zNDcsOCArNDMxLDEzIEBACiAJeyBVU0JfREVWSUNFKFFVQUxDT01NX1ZFTkRPUl9JRCwgMHg2NjEzKX0sIC8qIE9uZGEgSDYwMC9aVEUgTUYzMzAgKi8KIAl7IFVTQl9ERVZJQ0UoTUFYT05fVkVORE9SX0lELCAweDYyODApIH0sIC8qIEJQMy1VU0IgJiBCUDMtRVhUIEhTRFBBICovCiAJeyBVU0JfREVWSUNFKFRFTElUX1ZFTkRPUl9JRCwgVEVMSVRfUFJPRFVDVF9VQzg2NEUpIH0sCisJeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX01GNjI2KSB9LAogCXsgVVNCX0RFVklDRShaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9NRjYyOCkgfSwKIAl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQ0RNQV9URUNIKSB9LAorCXsgVVNCX0RFVklDRShFUklDU1NPTl9WRU5ET1JfSUQsIEVSSUNTU09OX1BST0RVQ1RfRjM1MDdHKSB9LAorCXsgVVNCX0RFVklDRShQQU5URUNIX1ZFTkRPUl9JRCwgUEFOVEVDSF9QUk9EVUNUX1BDNTc0MCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFOVEVDSF9WRU5ET1JfSUQsIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NTApIH0sCisJeyBVU0JfREVWSUNFKFBBTlRFQ0hfVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfVU0xNTApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpAQCAtNDI3LDcgKzUxNiw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfZHJpdmVyX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiOiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCA5MDg0Mzc4Li40OTFjODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC0xMTQ3LDcgKzExNDcsNyBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmcGwyMzAzX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZwbDIzMDNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKaW5kZXggNzI5MDNhYy4uNGI0NjNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKQEAgLTI1MCwxNyArMjUwLDE4IEBACiAJCWlmICghZmNzKSB7CiAJCQlpbnQgYWN0dWFsX2xlbmd0aCA9IGRhdGFbbGVuZ3RoIC0gMl0gPj4gMjsKIAkJCWlmIChhY3R1YWxfbGVuZ3RoIDw9IChsZW5ndGggLSAyKSkgewotCQkJCWluZm8oIiVzIC0gYWN0dWFsOiAlZCIsIF9fZnVuY19fLAotCQkJCQkJCWFjdHVhbF9sZW5ndGgpOworCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBhY3R1YWw6ICVkXG4iLAorCQkJCQkgX19mdW5jX18sIGFjdHVhbF9sZW5ndGgpOwogCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LAogCQkJCQkJCWRhdGEsIGFjdHVhbF9sZW5ndGgpOwogCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCQl9IGVsc2UgewotCQkJCWVycigiJXMgLSBpbmNvbnNpc3RlbnQgbGVuZ3RocyAlZDolZCIsCisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiJXMgLSBpbmNvbnNpc3RlbnQgbGVuZ3RocyAlZDolZFxuIiwKIAkJCQkJX19mdW5jX18sIGFjdHVhbF9sZW5ndGgsIGxlbmd0aCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQllcnIoIiVzIC0gYmFkIENSQyAleCIsIF9fZnVuY19fLCBmY3MpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgQ1JDICV4XG4iLCBfX2Z1bmNfXywgZmNzKTsKIAkJfQogCX0gZWxzZSB7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBsZW5ndGgpOwpAQCAtMjc3LDggKzI3OCw5IEBACiAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCS8qIEZJWE1FOiBOZWVkIGEgbWVjaGFuaXNtIHRvIHJldHJ5IGxhdGVyIGlmIHRoaXMgaGFwcGVucyAqLwogfQogCkBAIC0zNjksOCArMzcxLDkgQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpIHsKIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJcmV0dXJuIDA7CiAJfQogCWRiZygiJXMgdXJiOiAlcCBzdWJtaXR0ZWQiLCBfX2Z1bmNfXywgcG9ydC0+d3JpdGVfdXJiKTsKQEAgLTQyOCwxNCArNDMxLDEzIEBACiB7CiAJaW50IGksIHJldHZhbDsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9BVVRIT1IpOwotCWluZm8oRFJJVkVSX0RFU0MpOwotCWluZm8oInZlbmRvcjogJXggcHJvZHVjdDogJXggc2FmZTogJWQgcGFkZGVkOiAlZFxuIiwKLQkJCQkJdmVuZG9yLCBwcm9kdWN0LCBzYWZlLCBwYWRkZWQpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAkvKiBpZiB3ZSBoYXZlIHZlbmRvciAvIHByb2R1Y3QgcGFyYW1ldGVycyBwYXRjaCB0aGVtIGludG8gaWQgbGlzdCAqLwogCWlmICh2ZW5kb3IgfHwgcHJvZHVjdCkgewotCQlpbmZvKCJ2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4XG4iLCB2ZW5kb3IsIHByb2R1Y3QpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IHZlbmRvcjogJXggcHJvZHVjdDogJXhcbiIsCisJCSAgICAgICB2ZW5kb3IsIHByb2R1Y3QpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkX3RhYmxlKTsgaSsrKSB7CiAJCQlpZiAoIWlkX3RhYmxlW2ldLmlkVmVuZG9yICYmICFpZF90YWJsZVtpXS5pZFByb2R1Y3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCA4YjllYWYzLi4wZjJiNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJX191MTYgaW50ZXJmYWNlID0gMDsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIApAQCAtMjg0LDcgKzI4NCw3IEBACiBzdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCXR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7CiAJc2llcnJhX3NlbmRfc2V0dXAodHR5LCBwb3J0KTsKIH0KQEAgLTI5NSw2ICsyOTUsNyBAQAogCXVuc2lnbmVkIGludCB2YWx1ZTsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCXZhbHVlID0gKChwb3J0ZGF0YS0+cnRzX3N0YXRlKSA/IFRJT0NNX1JUUyA6IDApIHwKQEAgLTMzNCwxNCArMzM1LDE0IEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCiAJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJaWYgKHN0YXR1cykKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgIgorCQkgICAgInJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CiAJLS1wb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJiczsKQEAgLTM2MywxMiArMzY0LDEyIEBACiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCWRiZygiJXM6IHdyaXRlICglZCBjaGFycykiLCBfX2Z1bmNfXywgY291bnQpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB3cml0ZSAoJWQgY2hhcnMpIiwgX19mdW5jX18sIGNvdW50KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmIChwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyA+IE5fT1VUX1VSQikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicysrOwpAQCAtNDM3LDggKzQzOCw4IEBACiAJcG9ydCA9ICB1cmItPmNvbnRleHQ7CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCWRiZygiJXM6IG5vbnplcm8gc3RhdHVzOiAlZCBvbiBlbmRwb2ludCAlMDJ4LiIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzLCBlbmRwb2ludCk7CisJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBub256ZXJvIHN0YXR1czogJWQgb24iCisJCSAgICAiIGVuZHBvaW50ICUwMnguIiwgX19mdW5jX18sIHN0YXR1cywgZW5kcG9pbnQpOwogCX0gZWxzZSB7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CkBAIC00NDcsNyArNDQ4LDggQEAKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJfSBlbHNlCi0JCQlkYmcoIiVzOiBlbXB0eSByZWFkIHVyYiByZWNlaXZlZCIsIF9fZnVuY19fKTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBlbXB0eSByZWFkIHVyYiIKKwkJCQkiIHJlY2VpdmVkIiwgX19mdW5jX18pOwogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAkJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pIHsKQEAgLTQ2OCwxNSArNDcwLDE3IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOwotCWRiZygiJXM6IHVyYiAlcCBwb3J0ICVwIGhhcyBkYXRhICVwIiwgX19mdW5jX18sIHVyYiwgcG9ydCwgcG9ydGRhdGEpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB1cmIgJXAgcG9ydCAlcCBoYXMgZGF0YSAlcCIsIF9fZnVuY19fLAorCQl1cmIsIHBvcnQsIHBvcnRkYXRhKTsKIAogCWlmIChzdGF0dXMgPT0gMCkgewogCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXFfcGt0ID0KIAkJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCiAJCWlmICghcmVxX3BrdCkgewotCQkJZGJnKCIlczogTlVMTCByZXFfcGt0XG4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogTlVMTCByZXFfcGt0XG4iLAorCQkJCV9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAoKHJlcV9wa3QtPmJSZXF1ZXN0VHlwZSA9PSAweEExKSAmJgpAQCAtNDg3LDcgKzQ5MSw4IEBACiAJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSk7CiAJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JCQlkYmcoIiVzOiBzaWduYWwgeCV4IiwgX19mdW5jX18sIHNpZ25hbHMpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHNpZ25hbCB4JXgiLCBfX2Z1bmNfXywKKwkJCQlzaWduYWxzKTsKIAogCQkJb2xkX2RjZF9zdGF0ZSA9IHBvcnRkYXRhLT5kY2Rfc3RhdGU7CiAJCQlwb3J0ZGF0YS0+Y3RzX3N0YXRlID0gMTsKQEAgLTUwMSwxOSArNTA2LDIwIEBACiAJCQkJdHR5X2hhbmd1cCh0dHkpOwogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0gZWxzZSB7Ci0JCQlkYmcoIiVzOiB0eXBlICV4IHJlcSAleCIsIF9fZnVuY19fLAotCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwgcmVxX3BrdC0+YlJlcXVlc3QpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHR5cGUgJXggcmVxICV4IiwKKwkJCQlfX2Z1bmNfXywgcmVxX3BrdC0+YlJlcXVlc3RUeXBlLAorCQkJCXJlcV9wa3QtPmJSZXF1ZXN0KTsKIAkJfQogCX0gZWxzZQotCQlkYmcoIiVzOiBlcnJvciAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgSVJRIGRhdGEgKi8KIAlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pIHsKIAkJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVycikKLQkJCWRiZygiJXM6IHJlc3VibWl0IGludHIgdXJiIGZhaWxlZC4gKCVkKSIsCi0JCQkJX19mdW5jX18sIGVycik7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogcmVzdWJtaXQgaW50ciB1cmIgIgorCQkJCSJmYWlsZWQuICglZCkiLAlfX2Z1bmNfXywgZXJyKTsKIAl9CiB9CiAKQEAgLTUyMywxNCArNTI5LDE0IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogdHJ5IHRvIGdpdmUgYSBnb29kIG51bWJlciBiYWNrIGJhc2VkIG9uIGlmIHdlIGhhdmUgYW55IGZyZWUgdXJicyBhdAogCSAqIHRoaXMgcG9pbnQgaW4gdGltZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmIChwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyA+IE5fT1VUX1VSQiAqIDIgLyAzKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7Ci0JCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CkBAIC01NDksNyArNTU1LDcgQEAKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAogCS8qIFNldCBzb21lIHNhbmUgZGVmYXVsdHMgKi8KIAlwb3J0ZGF0YS0+cnRzX3N0YXRlID0gMTsKQEAgLTU2MSw4ICs1NjcsOCBAQAogCQlpZiAoIXVyYikKIAkJCWNvbnRpbnVlOwogCQlpZiAodXJiLT5kZXYgIT0gc2VyaWFsLT5kZXYpIHsKLQkJCWRiZygiJXM6IGRldiAlcCAhPSAlcCIsIF9fZnVuY19fLAotCQkJCXVyYi0+ZGV2LCBzZXJpYWwtPmRldik7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZGV2ICVwICE9ICVwIiwKKwkJCQkgX19mdW5jX18sIHVyYi0+ZGV2LCBzZXJpYWwtPmRldik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC02MDEsNyArNjA3LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlwb3J0ZGF0YS0+cnRzX3N0YXRlID0gMDsKQEAgLTYzMCw3ICs2MzYsNyBAQAogCWludCBpOwogCWludCBqOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBTZXQgRGV2aWNlIG1vZGUgdG8gRDAgKi8KIAlzaWVycmFfc2V0X3Bvd2VyX3N0YXRlKHNlcmlhbC0+ZGV2LCAweDAwMDApOwpAQCAtNjQ0LDggKzY1MCw5IEBACiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCXBvcnRkYXRhID0ga3phbGxvYyhzaXplb2YoKnBvcnRkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcG9ydGRhdGEpIHsKLQkJCWRiZygiJXM6IGttYWxsb2MgZm9yIHNpZXJyYV9wb3J0X3ByaXZhdGUgKCVkKSBmYWlsZWQhLiIsCi0JCQkJCV9fZnVuY19fLCBpKTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBrbWFsbG9jIGZvciAiCisJCQkJInNpZXJyYV9wb3J0X3ByaXZhdGUgKCVkKSBmYWlsZWQhLiIsCisJCQkJX19mdW5jX18sIGkpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnRkYXRhLT5sb2NrKTsKQEAgLTY2NSw4ICs2NzIsOCBAQAogCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7ICsraikgewogCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJCWRiZygiJXM6IGFsbG9jIGZvciBpbiBwb3J0IGZhaWxlZC4iLAotCQkJCSAgICBfX2Z1bmNfXyk7CisJCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGFsbG9jIGZvciBpbiAiCisJCQkJCSJwb3J0IGZhaWxlZC4iLCBfX2Z1bmNfXyk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQkvKiBGaWxsIFVSQiB1c2luZyBzdXBwbGllZCBkYXRhLiAqLwpAQCAtNjg4LDcgKzY5NSw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CkBAIC03NDMsNyArNzUwLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF9kcml2ZXJfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICI6ICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggMTUzM2Q2ZS4uYTY1YmMyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCkBAIC01ODksOCArNTg5LDggQEAKIAljYXNlIDEwMDAwMDA6CiAJCQlidWZbMF0gPSAweDBiOwlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInNwY3A4MjUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJhdWRyYXRlICIKLQkJICAgICJyZXF1ZXN0ZWQsIHVzaW5nIGRlZmF1bHQgb2YgOTYwMC4iKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAic3BjcDgyNSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgIgorCQkJImJhdWRyYXRlIHJlcXVlc3RlZCwgdXNpbmcgZGVmYXVsdCBvZiA5NjAwLlxuIik7CiAJfQogCiAJLyogU2V0IERhdGEgTGVuZ3RoIDogMDA6NWJpdCwgMDE6NmJpdCwgMTA6N2JpdCwgMTE6OGJpdCAqLwpAQCAtNjI5LDcgKzYyOSw4IEBACiAJCQkgICAgU0VUX1VBUlRfRk9STUFUX1RZUEUsIFNFVF9VQVJUX0ZPUk1BVCwKIAkJCSAgICB1YXJ0ZGF0YSwgMCwgTlVMTCwgMCwgMTAwKTsKIAlpZiAoaSA8IDApCi0JCWVycigiU2V0IFVBUlQgZm9ybWF0ICUjeCBmYWlsZWQgKGVycm9yID0gJWQpIiwgdWFydGRhdGEsIGkpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgVUFSVCBmb3JtYXQgJSN4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsCisJCQl1YXJ0ZGF0YSwgaSk7CiAJZGJnKCIweDIxOjB4NDA6MDowICAlZFxuIiwgaSk7CiAKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CkBAIC0xMDU0LDcgKzEwNTUsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc3BjcDh4NV9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZzcGNwOHg1X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCBjOTAyMzdkLi4zMWM0MmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTg1LDcgKzg1LDYgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJ0aV91c2JfMzQxMF81MDUyLmgiCiAKQEAgLTM4Myw3ICszODIsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3VzYjsKIAotCWluZm8oVElfRFJJVkVSX0RFU0MgIiAiIFRJX0RSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgVElfRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIFRJX0RSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IGU3ZDQyNDYuLjhiZTNmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMTEyMSw3ICsxMTIxLDggQEAKIAogCXJlc3VsdCA9IGJ1c19yZWdpc3RlcigmdXNiX3NlcmlhbF9idXNfdHlwZSk7CiAJaWYgKHJlc3VsdCkgewotCQllcnIoIiVzIC0gcmVnaXN0ZXJpbmcgYnVzIGRyaXZlciBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX0VSUiAidXNiLXNlcmlhbDogJXMgLSByZWdpc3RlcmluZyBidXMgZHJpdmVyICIKKwkJICAgICAgICJmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBleGl0X2J1czsKIAl9CiAKQEAgLTExNDIsMjUgKzExNDMsMjggQEAKIAl0dHlfc2V0X29wZXJhdGlvbnModXNiX3NlcmlhbF90dHlfZHJpdmVyLCAmc2VyaWFsX29wcyk7CiAJcmVzdWx0ID0gdHR5X3JlZ2lzdGVyX2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOwogCWlmIChyZXN1bHQpIHsKLQkJZXJyKCIlcyAtIHR0eV9yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gdHR5X3JlZ2lzdGVyX2RyaXZlciBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWdvdG8gZXhpdF9yZWdfZHJpdmVyOwogCX0KIAogCS8qIHJlZ2lzdGVyIHRoZSBVU0IgZHJpdmVyICovCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2Jfc2VyaWFsX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZXJyKCIlcyAtIHVzYl9yZWdpc3RlciBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX0VSUiAidXNiLXNlcmlhbDogJXMgLSB1c2JfcmVnaXN0ZXIgZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIGV4aXRfdHR5OwogCX0KIAogCS8qIHJlZ2lzdGVyIHRoZSBnZW5lcmljIGRyaXZlciwgaWYgd2Ugc2hvdWxkICovCiAJcmVzdWx0ID0gdXNiX3NlcmlhbF9nZW5lcmljX3JlZ2lzdGVyKGRlYnVnKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQllcnIoIiVzIC0gcmVnaXN0ZXJpbmcgZ2VuZXJpYyBkcml2ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gcmVnaXN0ZXJpbmcgZ2VuZXJpYyAiCisJCSAgICAgICAiZHJpdmVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGV4aXRfZ2VuZXJpYzsKIAl9CiAKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gcmVzdWx0OwogCkBAIC0xMTc0LDcgKzExNzgsOCBAQAogCWJ1c191bnJlZ2lzdGVyKCZ1c2Jfc2VyaWFsX2J1c190eXBlKTsKIAogZXhpdF9idXM6Ci0JZXJyKCIlcyAtIHJldHVybmluZyB3aXRoIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJcHJpbnRrKEtFUk5fRVJSICJ1c2Itc2VyaWFsOiAlcyAtIHJldHVybmluZyB3aXRoIGVycm9yICVkXG4iLAorCSAgICAgICBfX2Z1bmNfXywgcmVzdWx0KTsKIAlwdXRfdHR5X2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xMjMzLDExICsxMjM4LDExIEBACiAKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX2J1c19yZWdpc3Rlcihkcml2ZXIpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJwcm9ibGVtICVkIHdoZW4gcmVnaXN0ZXJpbmcgZHJpdmVyICVzIiwKLQkJCQkJCXJldHZhbCwgZHJpdmVyLT5kZXNjcmlwdGlvbik7CisJCXByaW50ayhLRVJOX0VSUiAidXNiLXNlcmlhbDogcHJvYmxlbSAlZCB3aGVuIHJlZ2lzdGVyaW5nICIKKwkJICAgICAgICJkcml2ZXIgJXNcbiIsIHJldHZhbCwgZHJpdmVyLT5kZXNjcmlwdGlvbik7CiAJCWxpc3RfZGVsKCZkcml2ZXItPmRyaXZlcl9saXN0KTsKIAl9IGVsc2UKLQkJaW5mbygiVVNCIFNlcmlhbCBzdXBwb3J0IHJlZ2lzdGVyZWQgZm9yICVzIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCIFNlcmlhbCBzdXBwb3J0IHJlZ2lzdGVyZWQgZm9yICVzXG4iLAogCQkJCQkJZHJpdmVyLT5kZXNjcmlwdGlvbik7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTI0OCw3ICsxMjUzLDggQEAKIHZvaWQgdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZGV2aWNlKQogewogCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KLQlpbmZvKCJVU0IgU2VyaWFsIGRlcmVnaXN0ZXJpbmcgZHJpdmVyICVzIiwgZGV2aWNlLT5kZXNjcmlwdGlvbik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwKKwkgICAgICAgZGV2aWNlLT5kZXNjcmlwdGlvbik7CiAJbGlzdF9kZWwoJmRldmljZS0+ZHJpdmVyX2xpc3QpOwogCXVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIoZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggYTZkMWM3NS4uNGZhY2NlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTc2OCw3ICs3NjgsNyBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKLQkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz9cbiIsCiAJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC05NzEsMTEgKzk3MSwxNCBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWluZm8oCi0JCSAgIlVudGVzdGVkIFVTQiBkZXZpY2Ugc3BlY2lmaWVkIGF0IHRpbWUgb2YgbW9kdWxlIGluc2VydGlvbiIpOwotCQlpbmZvKCJXYXJuaW5nOiBUaGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsiKTsKLQkJaW5mbygiVXNpbmcgYSBuZXdlciBrZXJuZWwgaXMgcHJlZmVycmVkIHRvIHRoaXMgbWV0aG9kIik7Ci0JCWluZm8oIkFkZGluZyBQYWxtIE9TIHByb3RvY29sIDQueCBzdXBwb3J0IGZvciB1bmtub3duIGRldmljZTogMHgleC8weCV4IiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogVW50ZXN0ZWQgVVNCIGRldmljZSBzcGVjaWZpZWQgYXQgdGltZSBvZiBtb2R1bGUgaW5zZXJ0aW9uXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogV2FybmluZzogVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogVXNpbmcgYSBuZXdlciBrZXJuZWwgaXMgcHJlZmVycmVkIHRvIHRoaXMgbWV0aG9kXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogQWRkaW5nIFBhbG0gT1MgcHJvdG9jb2wgNC54IHN1cHBvcnQgZm9yIHVua25vd24gZGV2aWNlOiAweCV4LzB4JXhcbiIsCiAJCQl2ZW5kb3IsIHByb2R1Y3QpOwogCX0KIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZoYW5kc3ByaW5nX2RldmljZSk7CkBAIC05OTAsNyArOTkzLDcgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnZpc29yX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwppbmRleCAxMWM4Yjk3Li41MzM1ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC0zMDMsMTIgKzMwMywxNSBAQAogCiAJaWYgKHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZmlybXdhcmVfZncsICJ3aGl0ZWhlYXQuZnciLAogCQkJCSAgJnNlcmlhbC0+ZGV2LT5kZXYpKSB7Ci0JCWVycigiJXMgLSByZXF1ZXN0IFwid2hpdGVoZWF0LmZ3XCIgZmFpbGVkIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIiVzIC0gcmVxdWVzdCBcIndoaXRlaGVhdC5md1wiIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKHJlcXVlc3RfaWhleF9maXJtd2FyZSgmbG9hZGVyX2Z3LCAid2hpdGVoZWF0X2xvYWRlci5mdyIsCiAJCQkgICAgICZzZXJpYWwtPmRldi0+ZGV2KSkgewotCQllcnIoIiVzIC0gcmVxdWVzdCBcIndoaXRlaGVhdF9sb2FkZXIuZndcIiBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiJXMgLSByZXF1ZXN0IFwid2hpdGVoZWF0X2xvYWRlci5md1wiIGZhaWxlZFxuIiwKKwkJCV9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IDA7CkBAIC0zMjAsOSArMzIzLDEwIEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAogCQkJCQkgICAgICBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbiksIDB4YTApOwogCQlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCQllcnIoIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBsb2FkZXIgKCVkICUwNFggJXAgJWQpIiwKLQkJCSAgICBfX2Z1bmNfXywgcmVzcG9uc2UsIGJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksCi0JCQkgICAgcmVjb3JkLT5kYXRhLCBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgIgorCQkJCSJmYWlsZWQgZm9yIGxvYWRlciAoJWQgJTA0WCAlcCAlZClcbiIsCisJCQkJX19mdW5jX18sIHJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAorCQkJCXJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJlY29yZCA9IGloZXhfbmV4dF9iaW5yZWMocmVjb3JkKTsKQEAgLTMzOCw5ICszNDIsMTEgQEAKIAkJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCiAJCQkJCSAgICAgIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSwgMHhhMyk7CiAJCWlmIChyZXNwb25zZSA8IDApIHsKLQkJCWVycigiJXMgLSBlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIGZpcnN0IGZpcm13YXJlIHN0ZXAgKCVkICUwNFggJXAgJWQpIiwgCi0JCQkgICAgX19mdW5jX18sIHJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAotCQkJICAgIHJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5ICIKKwkJCQkiZmFpbGVkIGZvciBmaXJzdCBmaXJtd2FyZSBzdGVwICIKKwkJCQkiKCVkICUwNFggJXAgJWQpXG4iLCBfX2Z1bmNfXywgcmVzcG9uc2UsCisJCQkJYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwgcmVjb3JkLT5kYXRhLAorCQkJCWJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQkrK3JlY29yZDsKQEAgLTM1NCw5ICszNjAsMTEgQEAKIAkJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCiAJCQkJCSAgICAgIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSwgMHhhMCk7CiAJCWlmIChyZXNwb25zZSA8IDApIHsKLQkJCWVycigiJXMgLSBlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIHNlY29uZCBmaXJtd2FyZSBzdGVwICglZCAlMDRYICVwICVkKSIsIAotCQkJICAgIF9fZnVuY19fLCByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKLQkJCSAgICByZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBlenVzYl93cml0ZW1lbW9yeSAiCisJCQkJImZhaWxlZCBmb3Igc2Vjb25kIGZpcm13YXJlIHN0ZXAgIgorCQkJCSIoJWQgJTA0WCAlcCAlZClcbiIsIF9fZnVuY19fLCByZXNwb25zZSwKKwkJCQliZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLCByZWNvcmQtPmRhdGEsCisJCQkJYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKIAkJCWJyZWFrOwogCQl9CiAJCSsrcmVjb3JkOwpAQCAtNDIxLDEyICs0MjksMTIgQEAKIAlyZXQgPSB1c2JfYnVsa19tc2coc2VyaWFsLT5kZXYsIHBpcGUsIGNvbW1hbmQsIDIsCiAJCQkJCQkmYWxlbiwgQ09NTUFORF9USU1FT1VUX01TKTsKIAlpZiAocmV0KSB7Ci0JCWVycigiJXM6IENvdWxkbid0IHNlbmQgY29tbWFuZCBbJWRdIiwKLQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IENvdWxkbid0IHNlbmQgY29tbWFuZCBbJWRdXG4iLAorCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmV0KTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9IGVsc2UgaWYgKGFsZW4gIT0gMikgewotCQllcnIoIiVzOiBTZW5kIGNvbW1hbmQgaW5jb21wbGV0ZSBbJWRdIiwKLQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBhbGVuKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiBTZW5kIGNvbW1hbmQgaW5jb21wbGV0ZSBbJWRdXG4iLAorCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfQogCkBAIC00MzcsMzEgKzQ0NSwzMyBAQAogCXJldCA9IHVzYl9idWxrX21zZyhzZXJpYWwtPmRldiwgcGlwZSwgcmVzdWx0LAogCQkJc2l6ZW9mKCpod19pbmZvKSArIDEsICZhbGVuLCBDT01NQU5EX1RJTUVPVVRfTVMpOwogCWlmIChyZXQpIHsKLQkJZXJyKCIlczogQ291bGRuJ3QgZ2V0IHJlc3VsdHMgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmV0KTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiBDb3VsZG4ndCBnZXQgcmVzdWx0cyBbJWRdXG4iLAorCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmV0KTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9IGVsc2UgaWYgKGFsZW4gIT0gc2l6ZW9mKCpod19pbmZvKSArIDEpIHsKLQkJZXJyKCIlczogR2V0IHJlc3VsdHMgaW5jb21wbGV0ZSBbJWRdIiwKLQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBhbGVuKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiBHZXQgcmVzdWx0cyBpbmNvbXBsZXRlIFslZF1cbiIsCisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBhbGVuKTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9IGVsc2UgaWYgKHJlc3VsdFswXSAhPSBjb21tYW5kWzBdKSB7Ci0JCWVycigiJXM6IENvbW1hbmQgZmFpbGVkIFslZF0iLAotCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJlc3VsdFswXSk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogQ29tbWFuZCBmYWlsZWQgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJlc3VsdFswXSk7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfQogCiAJaHdfaW5mbyA9IChzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2luZm8gKikmcmVzdWx0WzFdOwogCi0JaW5mbygiJXM6IERyaXZlciAlczogRmlybXdhcmUgdiVkLiUwMmQiLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLAotCSAgICAgRFJJVkVSX1ZFUlNJT04sIGh3X2luZm8tPnN3X21ham9yX3JldiwgaHdfaW5mby0+c3dfbWlub3JfcmV2KTsKKwlkZXZfaW5mbygmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiBEcml2ZXIgJXM6IEZpcm13YXJlIHYlZC4lMDJkXG4iLAorCQkgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgRFJJVkVSX1ZFUlNJT04sCisJCSBod19pbmZvLT5zd19tYWpvcl9yZXYsIGh3X2luZm8tPnN3X21pbm9yX3Jldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCiAJCWluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGluZm8gPT0gTlVMTCkgewotCQkJZXJyKCIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLAotCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKKwkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAkJCWdvdG8gbm9fcHJpdmF0ZTsKIAkJfQogCkBAIC00ODEsMTggKzQ5MSwyMCBAQAogCQlmb3IgKGogPSAwOyBqIDwgdXJiX3Bvb2xfc2l6ZTsgaisrKSB7CiAJCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJaWYgKCF1cmIpIHsKLQkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJObyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJCQlnb3RvIG5vX3J4X3VyYjsKIAkJCX0KIAkJCWJ1Zl9zaXplID0gcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCQkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewotCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIGJ1ZmZlciIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIkNvdWxkbid0IGFsbG9jYXRlIHVyYiBidWZmZXJcbiIpOwogCQkJCWdvdG8gbm9fcnhfYnVmOwogCQkJfQogCQkJd3JhcCA9IGttYWxsb2Moc2l6ZW9mKCp3cmFwKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXdyYXApIHsKLQkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiB3cmFwcGVyIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXJcbiIpOwogCQkJCWdvdG8gbm9fcnhfd3JhcDsKIAkJCX0KIAkJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCkBAIC01MDUsMTggKzUxNywyMCBAQAogCiAJCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJaWYgKCF1cmIpIHsKLQkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJObyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJCQlnb3RvIG5vX3R4X3VyYjsKIAkJCX0KIAkJCWJ1Zl9zaXplID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiBidWZmZXIiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyXG4iKTsKIAkJCQlnb3RvIG5vX3R4X2J1ZjsKIAkJCX0KIAkJCXdyYXAgPSBrbWFsbG9jKHNpemVvZigqd3JhcCksIEdGUF9LRVJORUwpOwogCQkJaWYgKCF3cmFwKSB7Ci0JCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlciIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIkNvdWxkbid0IGFsbG9jYXRlIHVyYiB3cmFwcGVyXG4iKTsKIAkJCQlnb3RvIG5vX3R4X3dyYXA7CiAJCQl9CiAJCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LApAQCAtNTM0LDggKzU0OCw5IEBACiAJY29tbWFuZF9pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUpLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoY29tbWFuZF9pbmZvID09IE5VTEwpIHsKLQkJZXJyKCIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLAotCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLAorCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJCWdvdG8gbm9fY29tbWFuZF9wcml2YXRlOwogCX0KIApAQCAtNTUyLDEyICs1NjcsMTUgQEAKIAogbm9fZmlybXdhcmU6CiAJLyogRmlybXdhcmUgbGlrZWx5IG5vdCBydW5uaW5nICovCi0JZXJyKCIlczogVW5hYmxlIHRvIHJldHJpZXZlIGZpcm13YXJlIHZlcnNpb24sIHRyeSByZXBsdWdnaW5nXG4iLAotCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKLQllcnIoIiVzOiBJZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgKHN0YXR1cyBsZWQgbm90IGJsaW5raW5nKVxuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7Ci0JZXJyKCIlczogcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBjb25uZWN0dGVjaC5jb21cbiIsCi0JCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOworCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCSIlczogVW5hYmxlIHRvIHJldHJpZXZlIGZpcm13YXJlIHZlcnNpb24sIHRyeSByZXBsdWdnaW5nXG4iLAorCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkiJXM6IElmIHRoZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyAoc3RhdHVzIGxlZCBub3QgYmxpbmtpbmcpXG4iLAorCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkiJXM6IHBsZWFzZSBjb250YWN0IHN1cHBvcnRAY29ubmVjdHRlY2guY29tXG4iLAorCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAlrZnJlZShyZXN1bHQpOwogCXJldHVybiAtRU5PREVWOwogCkBAIC02ODAsOCArNjk4LDkgQEAKIAkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwogCXJldHZhbCA9IHN0YXJ0X3BvcnRfcmVhZChwb3J0KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCV9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIAkJZmlybV9jbG9zZShwb3J0KTsKIAkJc3RvcF9jb21tYW5kX3BvcnQocG9ydC0+c2VyaWFsKTsKIAkJZ290byBleGl0OwpAQCAtODA2LDggKzgyNSw5IEBACiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCXNlbnQgPSByZXN1bHQ7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+dHhfdXJic19mcmVlKTsKQEAgLTEwNzUsNyArMTA5NSw3IEBACiAJd3JhcCA9IHVyYl90b193cmFwKHVyYiwgJmluZm8tPnJ4X3VyYnNfc3VibWl0dGVkKTsKIAlpZiAoIXdyYXApIHsKIAkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCQllcnIoIiVzIC0gTm90IG15IHVyYiEiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gTm90IG15IHVyYiFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlsaXN0X2RlbCgmd3JhcC0+bGlzdCk7CkBAIC0xMTE5LDcgKzExMzksNyBAQAogCXdyYXAgPSB1cmJfdG9fd3JhcCh1cmIsICZpbmZvLT50eF91cmJzX3N1Ym1pdHRlZCk7CiAJaWYgKCF3cmFwKSB7CiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJbGlzdF9tb3ZlKCZ3cmFwLT5saXN0LCAmaW5mby0+dHhfdXJic19mcmVlKTsKQEAgLTEzODMsOCArMTQwMyw5IEBACiAJCWNvbW1hbmRfcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihjb21tYW5kX3BvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJldHZhbCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KQEAgLTE1MjIsNyArMTU0Myw4IEBACiAJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKQEAgLTE1NTYsNyArMTU3OCw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ3aGl0ZWhlYXRfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmd2hpdGVoZWF0X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYwppbmRleCA0OTk1YmI1Li4yZGQ5YmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMKQEAgLTk1LDExICs5NSwxMCBAQAogewogCWludCByZXN1bHQ7CiAKLQl1cy0+aW9idWZbMF0gPSAweDE7CiAJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKIAkJCQkgICAgICBVU0JfUkVRX1NFVF9GRUFUVVJFLAogCQkJCSAgICAgIFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCQkgICAgICAweDAxLCAweDAsIHVzLT5pb2J1ZiwgMHgxLCAxMDAwKTsKKwkJCQkgICAgICAweDAxLCAweDAsIE5VTEwsIDB4MCwgMTAwMCk7CiAJVVNfREVCVUdQKCJ1c2JfY29udHJvbF9tc2cgcGVyZm9ybWluZyByZXN1bHQgaXMgJWRcbiIsIHJlc3VsdCk7CiAJcmV0dXJuIChyZXN1bHQgPyAwIDogLTEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCmluZGV4IDk4Yjg5ZWEuLmM3YmY4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKQEAgLTc4LDggKzc4LDggQEAKIHJlc3VibWl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgcmV0dmFsICVkIiwKLQkJCW9uZXRvdWNoLT51ZGV2LT5idXMtPmJ1c19uYW1lLAorCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgIgorCQkJInJldHZhbCAlZFxuIiwgb25ldG91Y2gtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCiAJCQlvbmV0b3VjaC0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKIH0KIApAQCAtOTAsNyArOTAsNyBAQAogCW9uZXRvdWNoLT5pc19vcGVuID0gMTsKIAlvbmV0b3VjaC0+aXJxLT5kZXYgPSBvbmV0b3VjaC0+dWRldjsKIAlpZiAodXNiX3N1Ym1pdF91cmIob25ldG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkpIHsKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJ1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTExNyw3ICsxMTcsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVVNfUkVTVU1FOgogCQkJaWYgKHVzYl9zdWJtaXRfdXJiKG9uZXRvdWNoLT5pcnEsIEdGUF9LRVJORUwpICE9IDApCi0JCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQiKTsKKwkJCQlkZXZfZXJyKCZvbmV0b3VjaC0+aXJxLT5kZXYtPmRldiwKKwkJCQkJInVzYl9zdWJtaXRfdXJiIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMzUyM2EwYi4uNzkxMDhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAl9CiAKIAkvKiBEaWQgd2UgdHJhbnNmZXIgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIGFtb3VudCByZXF1aXJlZD8gKi8KLQlpZiAoc3JiLT5yZXN1bHQgPT0gU0FNX1NUQVRfR09PRCAmJgorCWlmICgoc3JiLT5yZXN1bHQgPT0gU0FNX1NUQVRfR09PRCB8fCBzcmItPnNlbnNlX2J1ZmZlclsyXSA9PSAwKSAmJgogCQkJc2NzaV9idWZmbGVuKHNyYikgLSBzY3NpX2dldF9yZXNpZChzcmIpIDwgc3JiLT51bmRlcmZsb3cpCiAJCXNyYi0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNikgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGNkMTU1NDcuLmEyYjllYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTYyOCw5NyArMTYyOCwzMzIgQEAKIC8qIFJlcG9ydGVkIGJ5IGZhbmd4aWFvemhpIDxodWFuYW5odUBodWF3ZWkuY29tPgogICogVGhpcyBicmluZ3MgdGhlIEhVQVdFSSBkYXRhIGNhcmQgZGV2aWNlcyBpbnRvIG11bHRpLXBvcnQgbW9kZQogICovCi1VTlVTVUFMX0RFViggMHgxMmQxLCAweDEwMDEsIDB4MDAwMCwgMHgwMDAwLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTAwMSwgMHgwMDAwLCAweDAwMDAsCiAJCSJIVUFXRUkgTU9CSUxFIiwKIAkJIk1hc3MgU3RvcmFnZSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAogCQkwKSwKLVVOVVNVQUxfREVWKCAweDEyZDEsIDB4MTAwMywgMHgwMDAwLCAweDAwMDAsCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxMDAzLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhVQVdFSSBNT0JJTEUiLAogCQkiTWFzcyBTdG9yYWdlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCiAJCTApLAotVU5VU1VBTF9ERVYoIDB4MTJkMSwgMHgxMDA0LCAweDAwMDAsIDB4MDAwMCwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDEwMDQsIDB4MDAwMCwgMHgwMDAwLAogCQkiSFVBV0VJIE1PQklMRSIsCiAJCSJNYXNzIFN0b3JhZ2UiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKIAkJMCksCi1VTlVTVUFMX0RFViggMHgxMmQxLCAweDE0MDEsIDB4MDAwMCwgMHgwMDAwLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQwMSwgMHgwMDAwLCAweDAwMDAsCiAJCSJIVUFXRUkgTU9CSUxFIiwKIAkJIk1hc3MgU3RvcmFnZSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAogCQkwKSwKLVVOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwMywgMHgwMDAwLCAweDAwMDAsCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDAyLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhVQVdFSSBNT0JJTEUiLAogCQkiTWFzcyBTdG9yYWdlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCiAJCTApLAotVU5VU1VBTF9ERVYoIDB4MTJkMSwgMHgxNDA1LCAweDAwMDAsIDB4MDAwMCwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MDMsIDB4MDAwMCwgMHgwMDAwLAogCQkiSFVBV0VJIE1PQklMRSIsCiAJCSJNYXNzIFN0b3JhZ2UiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKIAkJMCksCi1VTlVTVUFMX0RFViggMHgxMmQxLCAweDE0MDYsIDB4MDAwMCwgMHgwMDAwLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQwNCwgMHgwMDAwLCAweDAwMDAsCiAJCSJIVUFXRUkgTU9CSUxFIiwKIAkJIk1hc3MgU3RvcmFnZSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAogCQkwKSwKLVVOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwOCwgMHgwMDAwLCAweDAwMDAsCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDA1LCAweDAwMDAsIDB4MDAwMCwKIAkJIkhVQVdFSSBNT0JJTEUiLAogCQkiTWFzcyBTdG9yYWdlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCiAJCTApLAotVU5VU1VBTF9ERVYoIDB4MTJkMSwgMHgxNDA5LCAweDAwMDAsIDB4MDAwMCwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MDYsIDB4MDAwMCwgMHgwMDAwLAogCQkiSFVBV0VJIE1PQklMRSIsCiAJCSJNYXNzIFN0b3JhZ2UiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKIAkJMCksCi1VTlVTVUFMX0RFViggMHgxMmQxLCAweDE0MTAsIDB4MDAwMCwgMHgwMDAwLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQwNywgMHgwMDAwLCAweDAwMDAsCiAJCSJIVUFXRUkgTU9CSUxFIiwKIAkJIk1hc3MgU3RvcmFnZSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAogCQkwKSwKLVVOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxMSwgMHgwMDAwLCAweDAwMDAsCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDA4LCAweDAwMDAsIDB4MDAwMCwKIAkJIkhVQVdFSSBNT0JJTEUiLAogCQkiTWFzcyBTdG9yYWdlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCiAJCTApLAotVU5VU1VBTF9ERVYoIDB4MTJkMSwgMHgxNDEyLCAweDAwMDAsIDB4MDAwMCwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MDksIDB4MDAwMCwgMHgwMDAwLAogCQkiSFVBV0VJIE1PQklMRSIsCiAJCSJNYXNzIFN0b3JhZ2UiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKIAkJMCksCi1VTlVTVUFMX0RFViggMHgxMmQxLCAweDE0MTMsIDB4MDAwMCwgMHgwMDAwLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQwQSwgMHgwMDAwLCAweDAwMDAsCiAJCSJIVUFXRUkgTU9CSUxFIiwKIAkJIk1hc3MgU3RvcmFnZSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAogCQkwKSwKLVVOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxNCwgMHgwMDAwLCAweDAwMDAsCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDBCLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhVQVdFSSBNT0JJTEUiLAogCQkiTWFzcyBTdG9yYWdlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCiAJCTApLAotVU5VU1VBTF9ERVYoIDB4MTJkMSwgMHgxNDE1LCAweDAwMDAsIDB4MDAwMCwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MEMsIDB4MDAwMCwgMHgwMDAwLAogCQkiSFVBV0VJIE1PQklMRSIsCiAJCSJNYXNzIFN0b3JhZ2UiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKIAkJMCksCi1VTlVTVUFMX0RFViggMHgxMmQxLCAweDE0MTYsIDB4MDAwMCwgMHgwMDAwLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQwRCwgMHgwMDAwLCAweDAwMDAsCiAJCSJIVUFXRUkgTU9CSUxFIiwKIAkJIk1hc3MgU3RvcmFnZSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAogCQkwKSwKLVVOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxNywgMHgwMDAwLCAweDAwMDAsCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDBFLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhVQVdFSSBNT0JJTEUiLAogCQkiTWFzcyBTdG9yYWdlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCiAJCTApLAotVU5VU1VBTF9ERVYoIDB4MTJkMSwgMHgxNDE4LCAweDAwMDAsIDB4MDAwMCwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MEYsIDB4MDAwMCwgMHgwMDAwLAogCQkiSFVBV0VJIE1PQklMRSIsCiAJCSJNYXNzIFN0b3JhZ2UiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKIAkJMCksCi1VTlVTVUFMX0RFViggMHgxMmQxLCAweDE0MTksIDB4MDAwMCwgMHgwMDAwLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQxMCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MTEsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDEyLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQxMywgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MTQsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDE1LCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQxNiwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MTcsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDE4LCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQxOSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MUEsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDFCLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQxQywgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MUQsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDFFLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQxRiwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MjAsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDIxLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQyMiwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MjMsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDI0LCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQyNSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MjYsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDI3LCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQyOCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MjksIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDJBLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQyQiwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MkMsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDJELCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQyRSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MkYsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDMwLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQzMSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MzIsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDMzLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQzNCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MzUsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDM2LCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQzNywgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0MzgsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDM5LCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQzQSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0M0IsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDNDLCAweDAwMDAsIDB4MDAwMCwKKwkJIkhVQVdFSSBNT0JJTEUiLAorCQkiTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCisJCTApLAorVU5VU1VBTF9ERVYoICAweDEyZDEsIDB4MTQzRCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAgMHgxMmQxLCAweDE0M0UsIDB4MDAwMCwgMHgwMDAwLAorCQkiSFVBV0VJIE1PQklMRSIsCisJCSJNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfaHVhd2VpX2UyMjBfaW5pdCwKKwkJMCksCitVTlVTVUFMX0RFViggIDB4MTJkMSwgMHgxNDNGLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhVQVdFSSBNT0JJTEUiLAogCQkiTWFzcyBTdG9yYWdlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2h1YXdlaV9lMjIwX2luaXQsCkBAIC0xNzQ1LDYgKzE5ODAsMTUgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKKy8qIFJlcG9ydGVkIGJ5IEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CisgKiBKTWljcm9uIHJlc3BvbmRzIHRvIFVTTiBhbmQgc2V2ZXJhbCBvdGhlciBTQ1NJIGlvY3RscyB3aXRoIGEKKyAqIHJlc2lkdWUgdGhhdCBjYXVzZXMgc3Vic2VxdWVudCBJL08gcmVxdWVzdHMgdG8gZmFpbC4gICovCitVTlVTVUFMX0RFViggIDB4MTUyZCwgMHgyMzI5LCAweDAxMDAsIDB4MDEwMCwKKwkgICAgICAgICJKTWljcm9uIiwKKwkgICAgICAgICJVU0IgdG8gQVRBL0FUQVBJIEJyaWRnZSIsCisJICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkgICAgICAgIFVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKIC8qIFJlcG9ydGVkIGJ5IFJvYmVydCBTY2hlZGVsIDxyLnNjaGVkZWxAeWFob28uZGU+CiAgKiBOb3RlOiB0aGlzIGlzIGEgJ3N1cGVyIHRvcCcgZGV2aWNlIGxpa2UgdGhlIGFib3ZlIDE0Y2QvNjYwMCBkZXZpY2UgKi8KIFVOVVNVQUxfREVWKCAgMHgxNjUyLCAweDY2MDAsIDB4MDIwMSwgMHgwMjAxLApAQCAtMTgxOCw2ICsyMDYyLDE1IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKIAorLyogUmVwb3J0ZWQgYnkgRnJlZGVyaWMgTWFyY2hhbCA8ZnJlZGVyaWMubWFyY2hhbEB3b3djb21wYW55LmNvbT4KKyAqIE1pbyBNb292IDMzMAorICovCitVTlVTVUFMX0RFViggIDB4MzM0MCwgMHhmZmZmLCAweDAwMDAsIDB4MDAwMCwKKwkJIk1pdGFjIiwKKwkJIk1pbyBEaWdpV2Fsa2VyIFVTQiBTeW5jIiwKKwkJVVNfU0NfREVWSUNFLFVTX1BSX0RFVklDRSxOVUxMLAorCQlVU19GTF9NQVhfU0VDVE9SU182NCApLAorCiAvKiBSZXBvcnRlZCBieSBBbmRyZXkgUmFobWF0dWxsaW4gPHdyYXJAYWx0bGludXgub3JnPiAqLwogVU5VU1VBTF9ERVYoICAweDQxMDIsIDB4MTAyMCwgMHgwMTAwLCAgMHgwMTAwLAogCQkiaVJpdmVyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL0tjb25maWcgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDlhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9LY29uZmlnCkBAIC0wLDAgKzEsNDEgQEAKKyMKKyMgV2lyZWxlc3MgVVNCIENvcmUgY29uZmlndXJhdGlvbgorIworY29uZmlnIFVTQl9XVVNCCisJdHJpc3RhdGUgIkVuYWJsZSBXaXJlbGVzcyBVU0IgZXh0ZW5zaW9ucyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gVVNCCisgICAgICAgIHNlbGVjdCBVV0IKKyAgICAgICAgc2VsZWN0IENSWVBUTworICAgICAgICBzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorICAgICAgICBzZWxlY3QgQ1JZUFRPX0NCQworICAgICAgICBzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKyAgICAgICAgc2VsZWN0IENSWVBUT19BRVMKKwloZWxwCisJICBFbmFibGUgdGhlIGhvc3Qtc2lkZSBzdXBwb3J0IGZvciBXaXJlbGVzcyBVU0IuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBzZWxlY3QgWSAoYnVpbHQgaW4pLiBJdCBpcyBzYWZlIHRvCisJICBzZWxlY3QgZXZlbiBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgaGFyZHdhcmUuCisKK2NvbmZpZyBVU0JfV1VTQl9DQkFGCisJdHJpc3RhdGUgIlN1cHBvcnQgV1VTQiBDYWJsZSBCYXNlZCBBc3NvY2lhdGlvbiAoQ0JBKSIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNvbWUgV1VTQiBkZXZpY2VzIHN1cHBvcnQgQ2FibGUgQmFzZWQgQXNzb2NpYXRpb24uIEl0J3MgdXNlZCB0bworCSAgZW5hYmxlIHRoZSBzZWN1cmUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUKKwkgIGRldmljZS4KKworCSAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdXIgV1VTQiBkZXZpY2UgbXVzdCB0byBiZSBjb25uZWN0ZWQKKwkgIHZpYSB3aXJlZCBVU0IgYmVmb3JlIGVzdGFibGlzaGluZyBhIHdpcmVsZXNzIGxpbmsuCisKKwkgIEl0IGlzIHNhZmUgdG8gc2VsZWN0IGV2ZW4gaWYgeW91IGRvbid0IGhhdmUgYSBjb21wYXRpYmxlCisJICBoYXJkd2FyZS4KKworY29uZmlnIFVTQl9XVVNCX0NCQUZfREVCVUcKKwlib29sICJFbmFibGUgQ0JBIGRlYnVnIG1lc3NhZ2VzIgorCWRlcGVuZHMgb24gVVNCX1dVU0JfQ0JBRgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIENCQSB0byBwcm9kdWNlIGEgYnVuY2ggb2YgZGVidWcgbWVzc2FnZXMKKwkgIHRvIHRoZSBzeXN0ZW0gbG9nLiBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIGhhdmluZyBhIHByb2JsZW0gd2l0aAorCSAgQ0JBIHN1cHBvcnQgYW5kIHdhbnQgdG8gc2VlIG1vcmUgb2Ygd2hhdCBpcyBnb2luZyBvbi4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWYxYWRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorb2JqLSQoQ09ORklHX1VTQl9XVVNCKQkJKz0gd3VzYmNvcmUubworb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSB3dXNiLXdhLm8KK29iai0kKENPTkZJR19VU0JfV1VTQl9DQkFGKQkrPSB3dXNiLWNiYWYubworCisKK3d1c2Jjb3JlLW9ianMgOj0gCVwKKwljcnlwdG8ubwlcCisJZGV2Y29ubmVjdC5vCVwKKwlkZXYtc3lzZnMubwlcCisJbW1jLm8JCVwKKwlwYWwubwkJXAorCXJoLm8JCVwKKwlyZXNlcnZhdGlvbi5vCVwKKwlzZWN1cml0eS5vCVwKKwl3dXNiaGMubworCit3dXNiLWNiYWYtb2JqcyA6PSBjYmFmLm8KKword3VzYi13YS1vYmpzIDo9CXdhLWhjLm8JCVwKKwkJd2EtbmVwLm8JXAorCQl3YS1ycGlwZS5vCVwKKwkJd2EteGZlci5vCisKK2lmZXEgKCQoQ09ORklHX1VTQl9XVVNCX0NCQUZfREVCVUcpLHkpCitFWFRSQV9DRkxBR1MgKz0gLURERUJVRworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ3ODhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCkBAIC0wLDAgKzEsNjczIEBACisvKgorICogV2lyZWxlc3MgVVNCIC0gQ2FibGUgQmFzZWQgQXNzb2NpYXRpb24KKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIFdVU0IgZGV2aWNlcyBoYXZlIHRvIGJlIHBhaXJlZCAoYXNzb2NpYXRlZCBpbiBXVVNCIGxpbmdvKSBzbworICogdGhhdCB0aGV5IGNhbiBjb25uZWN0IHRvIHRoZSBzeXN0ZW0uCisgKgorICogT25lIHdheSBvZiBwYWlyaW5nIGlzIHVzaW5nIENCQS1DYWJsZSBCYXNlZCBBc3NvY2lhdGlvbi4gRmlyc3QKKyAqIHRpbWUgeW91IHBsdWcgdGhlIGRldmljZSB3aXRoIGEgY2FibGUsIGFzc29jaWF0aW9uIGlzIGRvbmUgYmV0d2VlbgorICogaG9zdCBhbmQgZGV2aWNlIGFuZCBzdWJzZXF1ZW50IHRpbWVzLCB5b3UgY2FuIGNvbm5lY3Qgd2lyZWxlc3NseQorICogd2l0aG91dCBoYXZpbmcgdG8gYXNzb2NpYXRlIGFnYWluLiBUaGF0J3MgdGhlIGlkZWEuCisgKgorICogVGhpcyBkcml2ZXIgZG9lcyBub3RoaW5nIEVhcnRoIHNoYXR0ZXJpbmcuIEl0IGp1c3QgcHJvdmlkZXMgYW4KKyAqIGludGVyZmFjZSB0byBjaGF0IHdpdGggdGhlIHdpcmUtY29ubmVjdGVkIGRldmljZSBzbyB3ZSBjYW4gZ2V0IGEKKyAqIENESUQgKGRldmljZSBJRCkgdGhhdCBtaWdodCBoYXZlIGJlZW4gcHJldmlvdXNseSBhc3NvY2lhdGVkIHRvIGEKKyAqIENISUQgKGhvc3QgSUQpIGFuZCB0byBzZXQgdXAgYSBuZXcgPENISUQsQ0RJRCxDSz4gdHJpcGxldAorICogKGNvbm5lY3Rpb24gY29udGV4dCksIHdpdGggdGhlIENLIGJlaW5nIHRoZSBzZWNyZXQsIG9yIGNvbm5lY3Rpb24KKyAqIGtleS4gVGhpcyBpcyB0aGUgcGFpcmluZyBkYXRhLgorICoKKyAqIFdoZW4gYSBkZXZpY2Ugd2l0aCB0aGUgQ0JBIGNhcGFiaWxpdHkgY29ubmVjdHMsIHRoZSBwcm9iZSByb3V0aW5lCisgKiBqdXN0IGNyZWF0ZXMgYSBidW5jaCBvZiBzeXNmcyBmaWxlcyB0aGF0IGEgdXNlciBzcGFjZSBlbnVtZXJhdGlvbgorICogbWFuYWdlciB1c2VzIHRvIGFsbG93IGl0IHRvIGNvbm5lY3Qgd2lyZWxlc3NseSB0byB0aGUgc3lzdGVtIG9yIG5vdC4KKyAqCisgKiBUaGUgcHJvY2VzcyBnb2VzIGxpa2UgdGhpczoKKyAqCisgKiAxLiBEZXZpY2UgcGx1Z3MsIGNiYWYgaXMgbG9hZGVkLCBub3RpZmljYXRpb25zIGhhcHBlbi4KKyAqCisgKiAyLiBUaGUgY29ubmVjdGlvbiBtYW5hZ2VyIChDTSkgc2VlcyBhIGRldmljZSB3aXRoIENCQUYgY2FwYWJpbGl0eQorICogICAgKHRoZSB3dXNiX2NoaWQgZXRjLiBmaWxlcyBpbiAvc3lzL2RldmljZXMvYmxhaC9PVVJERVZJQ0UpLgorICoKKyAqIDMuIFRoZSBDTSB3cml0ZXMgdGhlIGhvc3QgbmFtZSwgc3VwcG9ydGVkIGJhbmQgZ3JvdXBzLCBhbmQgdGhlIENISUQKKyAqICAgIChob3N0IElEKSBpbnRvIHRoZSB3dXNiX2hvc3RfbmFtZSwgd3VzYl9ob3N0X2JhbmRfZ3JvdXBzIGFuZAorICogICAgd3VzYl9jaGlkIGZpbGVzLiBUaGVzZSBnZXQgc2VudCB0byB0aGUgZGV2aWNlIGFuZCB0aGUgQ0RJRCAoaWYKKyAqICAgIGFueSkgZm9yIHRoaXMgaG9zdCBpcyByZXF1ZXN0ZWQuCisgKgorICogNC4gVGhlIENNIGNhbiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlJ3Mgc3VwcG9ydGVkIGJhbmQgZ3JvdXBzCisgKiAgICAod3VzYl9kZXZpY2VfYmFuZF9ncm91cHMpIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIGhvc3QuCisgKgorICogNS4gVGhlIENNIHJlYWRzIHRoZSB3dXNiX2NkaWQgZmlsZS4KKyAqCisgKiA2LiBUaGUgQ00gbG9va3MgdXAgaXRzIGRhdGFiYXNlCisgKgorICogNi4xIElmIGl0IGhhcyBhIG1hdGNoaW5nIENISUQsQ0RJRCBlbnRyeSwgdGhlIGRldmljZSBoYXMgYmVlbgorICogICAgIGF1dGhvcml6ZWQgYmVmb3JlIChwYWlyZWQpIGFuZCBub3RoaW5nIGZ1cnRoZXIgbmVlZHMgdG8gYmUKKyAqICAgICBkb25lLgorICoKKyAqIDYuMiBJZiB0aGUgQ0RJRCBpcyB6ZXJvIChvciB0aGUgQ00gZG9lc24ndCBmaW5kIGEgbWF0Y2hpbmcgQ0RJRCBpbgorICogICAgIGl0cyBkYXRhYmFzZSksIHRoZSBkZXZpY2UgaXMgYXNzdW1lZCB0byBiZSBub3Qga25vd24uICBUaGUgQ00KKyAqICAgICBtYXkgYXNzb2NpYXRlIHRoZSBob3N0IHdpdGggZGV2aWNlIGJ5OiB3cml0aW5nIGEgcmFuZG9tbHkKKyAqICAgICBnZW5lcmF0ZWQgQ0RJRCB0byB3dXNiX2NkaWQgYW5kIHRoZW4gYSByYW5kb20gQ0sgdG8gd3VzYl9jaworICogICAgICh0aGlzIHVwbG9hZHMgdGhlIG5ldyBDQyB0byB0aGUgZGV2aWNlKS4KKyAqCisgKiAgICAgQ01EIG1heSBjaG9vc2UgdG8gcHJvbXB0IHRoZSB1c2VyIGJlZm9yZSBhc3NvY2lhdGluZyB3aXRoIGEgbmV3CisgKiAgICAgZGV2aWNlLgorICoKKyAqIDcuIERldmljZSBpcyB1bnBsdWdnZWQuCisgKgorICogV2hlbiB0aGUgZGV2aWNlIHRyaWVzIHRvIGNvbm5lY3Qgd2lyZWxlc3NseSwgaXQgd2lsbCBwcmVzZW50IGl0cworICogQ0RJRCB0byB0aGUgV1VTQiBob3N0IGNvbnRyb2xsZXIuICBUaGUgQ00gd2lsbCBxdWVyeSB0aGUKKyAqIGRhdGFiYXNlLiBJZiB0aGUgQ0hJRC9DRElEIHBhaXIgZm91bmQsIGl0IHdpbGwgKHdpdGggYSA0LXdheQorICogaGFuZHNoYWtlKSBjaGFsbGVuZ2UgdGhlIGRldmljZSB0byBkZW1vbnN0cmF0ZSBpdCBoYXMgdGhlIENLIHNlY3JldAorICoga2V5IChmcm9tIG91ciBkYXRhYmFzZSkgd2l0aG91dCBhY3R1YWxseSBleGNoYW5naW5nIGl0LiBPbmNlCisgKiBzYXRpc2ZpZWQsIGNyeXB0byBrZXlzIGFyZSBkZXJpdmVkIGZyb20gdGhlIENLLCB0aGUgZGV2aWNlIGlzCisgKiBjb25uZWN0ZWQgYW5kIGFsbCBjb21tdW5pY2F0aW9uIGlzIGVuY3J5cHRlZC4KKyAqCisgKiBSZWZlcmVuY2VzOgorICogICBbV1VTQi1BTV0gQXNzb2NpYXRpb24gTW9kZWxzIFN1cHBsZW1lbnQgdG8gdGhlIENlcnRpZmllZCBXaXJlbGVzcworICogICAgICAgICAgICAgVW5pdmVyc2FsIFNlcmlhbCBCdXMgU3BlY2lmaWNhdGlvbiwgdmVyc2lvbiAxLjAuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdXdiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3d1c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXNzb2NpYXRpb24uaD4KKworI2RlZmluZSBDQkFfTkFNRV9MRU4gMHg0MCAvKiBbV1VTQi1BTV0gdGFibGUgNC03ICovCisKKy8qIEFuIGluc3RhbmNlIG9mIGEgQ2FibGUtQmFzZWQtQXNzb2NpYXRpb24tRnJhbWV3b3JrIGRldmljZSAqLworc3RydWN0IGNiYWYgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZhY2U7CisJdm9pZCAqYnVmZmVyOworCXNpemVfdCBidWZmZXJfc2l6ZTsKKworCXN0cnVjdCB3dXNiX2NraGRpZCBjaGlkOworCWNoYXIgaG9zdF9uYW1lW0NCQV9OQU1FX0xFTl07CisJdTE2IGhvc3RfYmFuZF9ncm91cHM7CisKKwlzdHJ1Y3Qgd3VzYl9ja2hkaWQgY2RpZDsKKwljaGFyIGRldmljZV9uYW1lW0NCQV9OQU1FX0xFTl07CisJdTE2IGRldmljZV9iYW5kX2dyb3VwczsKKworCXN0cnVjdCB3dXNiX2NraGRpZCBjazsKK307CisKKy8qCisgKiBWZXJpZnkgdGhhdCBhIENCQUYgVVNCLWludGVyZmFjZSBoYXMgd2hhdCB3ZSBuZWVkCisgKgorICogQWNjb3JkaW5nIHRvIFtXVVNCLUFNXSwgQ0JBIGRldmljZXMgc2hvdWxkIHByb3ZpZGUgYXQgbGVhc3QgdHdvCisgKiBpbnRlcmZhY2VzOgorICogIC0gUkVUUklFVkVfSE9TVF9JTkZPCisgKiAgLSBBU1NPQ0lBVEUKKyAqCisgKiBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgcHJvdmlkZSB0aGVzZSBpbnRlcmZhY2VzLCB3ZSBkbyBub3Qga25vdyBob3cKKyAqIHRvIGRlYWwgd2l0aCBpdC4KKyAqLworc3RhdGljIGludCBjYmFmX2NoZWNrKHN0cnVjdCBjYmFmICpjYmFmKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNiYWYtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCB3dXNiX2NiYWZfYXNzb2NfaW5mbyAqYXNzb2NfaW5mbzsKKwlzdHJ1Y3Qgd3VzYl9jYmFmX2Fzc29jX3JlcXVlc3QgKmFzc29jX3JlcXVlc3Q7CisJc2l6ZV90IGFzc29jX3NpemU7CisJdm9pZCAqaXRyLCAqdG9wOworCWludCBhcl9yaGkgPSAwLCBhcl9hc3NvYyA9IDA7CisKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCWNiYWYtPnVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZShjYmFmLT51c2JfZGV2LCAwKSwKKwkJQ0JBRl9SRVFfR0VUX0FTU09DSUFUSU9OX0lORk9STUFUSU9OLAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkwLCBjYmFmLT51c2JfaWZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCWNiYWYtPmJ1ZmZlciwgY2JhZi0+YnVmZmVyX3NpemUsIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgZ2V0IGF2YWlsYWJsZSBhc3NvY2lhdGlvbiB0eXBlczogJWRcbiIsCisJCQlyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWFzc29jX2luZm8gPSBjYmFmLT5idWZmZXI7CisJaWYgKHJlc3VsdCA8IHNpemVvZigqYXNzb2NfaW5mbykpIHsKKwkJZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjb2RlIGFzc29jaWF0aW9uIGluZm8gIgorCQkJImhlYWRlciAoJXp1IHZzICV6dSBieXRlcyByZXF1aXJlZClcbiIsCisJCQkoc2l6ZV90KXJlc3VsdCwgc2l6ZW9mKCphc3NvY19pbmZvKSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJYXNzb2Nfc2l6ZSA9IGxlMTZfdG9fY3B1KGFzc29jX2luZm8tPkxlbmd0aCk7CisJaWYgKHJlc3VsdCA8IGFzc29jX3NpemUpIHsKKwkJZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjb2RlIGFzc29jaWF0aW9uIGluZm8gIgorCQkJIiglenUgdnMgJXp1IGJ5dGVzIHJlcXVpcmVkKVxuIiwKKwkJCShzaXplX3QpYXNzb2Nfc2l6ZSwgc2l6ZW9mKCphc3NvY19pbmZvKSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qCisJICogRnJvbSBub3cgb24sIHdlIGp1c3QgdmVyaWZ5LCBidXQgd29uJ3QgZXJyb3Igb3V0IHVubGVzcyB3ZQorCSAqIGRvbid0IGZpbmQgdGhlIEFSX1RZUEVfV1VTQl97UkVUUklFVkVfSE9TVF9JTkZPLEFTU09DSUFURX0KKwkgKiB0eXBlcy4KKwkgKi8KKwlpdHIgPSBjYmFmLT5idWZmZXIgKyBzaXplb2YoKmFzc29jX2luZm8pOworCXRvcCA9IGNiYWYtPmJ1ZmZlciArIGFzc29jX3NpemU7CisJZGV2X2RiZyhkZXYsICJGb3VuZCAldSBhc3NvY2lhdGlvbiByZXF1ZXN0cyAoJXp1IGJ5dGVzKVxuIiwKKwkJIGFzc29jX2luZm8tPk51bUFzc29jaWF0aW9uUmVxdWVzdHMsIGFzc29jX3NpemUpOworCisJd2hpbGUgKGl0ciA8IHRvcCkgeworCQl1MTYgYXJfdHlwZSwgYXJfc3VidHlwZTsKKwkJdTMyIGFyX3NpemU7CisJCWNvbnN0IGNoYXIgKmFyX25hbWU7CisKKwkJYXNzb2NfcmVxdWVzdCA9IGl0cjsKKworCQlpZiAodG9wIC0gaXRyIDwgc2l6ZW9mKCphc3NvY19yZXF1ZXN0KSkgeworCQkJZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjb2RlIGFzc29jaWF0b24gIgorCQkJCSJyZXF1ZXN0ICglenUgdnMgJXp1IGJ5dGVzIG5lZWRlZClcbiIsCisJCQkJdG9wIC0gaXRyLCBzaXplb2YoKmFzc29jX3JlcXVlc3QpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYXJfdHlwZSA9IGxlMTZfdG9fY3B1KGFzc29jX3JlcXVlc3QtPkFzc29jaWF0aW9uVHlwZUlkKTsKKwkJYXJfc3VidHlwZSA9IGxlMTZfdG9fY3B1KGFzc29jX3JlcXVlc3QtPkFzc29jaWF0aW9uU3ViVHlwZUlkKTsKKwkJYXJfc2l6ZSA9IGxlMzJfdG9fY3B1KGFzc29jX3JlcXVlc3QtPkFzc29jaWF0aW9uVHlwZUluZm9TaXplKTsKKwkJYXJfbmFtZSA9ICJ1bmtub3duIjsKKworCQlzd2l0Y2ggKGFyX3R5cGUpIHsKKwkJY2FzZSBBUl9UWVBFX1dVU0I6CisJCQkvKiBWZXJpZnkgd2UgaGF2ZSB3aGF0IGlzIG1hbmRhdGVkIGJ5IFtXVVNCLUFNXS4gKi8KKwkJCXN3aXRjaCAoYXJfc3VidHlwZSkgeworCQkJY2FzZSBBUl9UWVBFX1dVU0JfUkVUUklFVkVfSE9TVF9JTkZPOgorCQkJCWFyX25hbWUgPSAiUkVUUklFVkVfSE9TVF9JTkZPIjsKKwkJCQlhcl9yaGkgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBBUl9UWVBFX1dVU0JfQVNTT0NJQVRFOgorCQkJCS8qIHNlbmQgYXNzb2MgZGF0YSAqLworCQkJCWFyX25hbWUgPSAiQVNTT0NJQVRFIjsKKwkJCQlhcl9hc3NvYyA9IDE7CisJCQkJYnJlYWs7CisJCQl9OworCQkJYnJlYWs7CisJCX07CisKKwkJZGV2X2RiZyhkZXYsICJBc3NvY2lhdGlvbiByZXF1ZXN0ICMlMDJ1OiAweCUwNHgvJTA0eCAiCisJCQkgIiglenUgYnl0ZXMpOiAlc1xuIiwKKwkJCSBhc3NvY19yZXF1ZXN0LT5Bc3NvY2lhdGlvbkRhdGFJbmRleCwgYXJfdHlwZSwKKwkJCSBhcl9zdWJ0eXBlLCAoc2l6ZV90KWFyX3NpemUsIGFyX25hbWUpOworCisJCWl0ciArPSBzaXplb2YoKmFzc29jX3JlcXVlc3QpOworCX0KKworCWlmICghYXJfcmhpKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBSRVRSSUVWRV9IT1NUX0lORk8gYXNzb2NpYXRpb24gIgorCQkJInJlcXVlc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKCFhcl9hc3NvYykgeworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgQVNTT0NJQVRFIGFzc29jaWF0aW9uIHJlcXVlc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB3dXNiX2NiYWZfaG9zdF9pbmZvIGNiYWZfaG9zdF9pbmZvX2RlZmF1bHRzID0geworCS5Bc3NvY2lhdGlvblR5cGVJZF9oZHIgICAgPSBXVVNCX0FSX0Fzc29jaWF0aW9uVHlwZUlkLAorCS5Bc3NvY2lhdGlvblR5cGVJZCAgICAJICA9IGNwdV90b19sZTE2KEFSX1RZUEVfV1VTQiksCisJLkFzc29jaWF0aW9uU3ViVHlwZUlkX2hkciA9IFdVU0JfQVJfQXNzb2NpYXRpb25TdWJUeXBlSWQsCisJLkFzc29jaWF0aW9uU3ViVHlwZUlkID0gY3B1X3RvX2xlMTYoQVJfVFlQRV9XVVNCX1JFVFJJRVZFX0hPU1RfSU5GTyksCisJLkNISURfaGRyICAgICAgICAgICAgICAgICA9IFdVU0JfQVJfQ0hJRCwKKwkuTGFuZ0lEX2hkciAgICAgICAgICAgICAgID0gV1VTQl9BUl9MYW5nSUQsCisJLkhvc3RGcmllbmRseU5hbWVfaGRyICAgICA9IFdVU0JfQVJfSG9zdEZyaWVuZGx5TmFtZSwKK307CisKKy8qIFNlbmQgV1VTQiBob3N0IGluZm9ybWF0aW9uIChDSElEIGFuZCBuYW1lKSB0byBhIENCQUYgZGV2aWNlICovCitzdGF0aWMgaW50IGNiYWZfc2VuZF9ob3N0X2luZm8oc3RydWN0IGNiYWYgKmNiYWYpCit7CisJc3RydWN0IHd1c2JfY2JhZl9ob3N0X2luZm8gKmhpOworCXNpemVfdCBuYW1lX2xlbjsKKwlzaXplX3QgaGlfc2l6ZTsKKworCWhpID0gY2JhZi0+YnVmZmVyOworCW1lbXNldChoaSwgMCwgc2l6ZW9mKCpoaSkpOworCSpoaSA9IGNiYWZfaG9zdF9pbmZvX2RlZmF1bHRzOworCWhpLT5DSElEID0gY2JhZi0+Y2hpZDsKKwloaS0+TGFuZ0lEID0gMDsJLyogRklYTUU6IEkgZ3Vlc3MuLi4gKi8KKwlzdHJsY3B5KGhpLT5Ib3N0RnJpZW5kbHlOYW1lLCBjYmFmLT5ob3N0X25hbWUsIENCQV9OQU1FX0xFTik7CisJbmFtZV9sZW4gPSBzdHJsZW4oY2JhZi0+aG9zdF9uYW1lKTsKKwloaS0+SG9zdEZyaWVuZGx5TmFtZV9oZHIubGVuID0gY3B1X3RvX2xlMTYobmFtZV9sZW4pOworCWhpX3NpemUgPSBzaXplb2YoKmhpKSArIG5hbWVfbGVuOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhjYmFmLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUoY2JhZi0+dXNiX2RldiwgMCksCisJCQlDQkFGX1JFUV9TRVRfQVNTT0NJQVRJT05fUkVTUE9OU0UsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTB4MDEwMSwKKwkJCWNiYWYtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCWhpLCBoaV9zaXplLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworfQorCisvKgorICogR2V0IGRldmljZSdzIGluZm9ybWF0aW9uIChDRElEKSBhc3NvY2lhdGVkIHRvIENISUQKKyAqCisgKiBUaGUgZGV2aWNlIHdpbGwgcmV0dXJuIGl0J3MgaW5mb3JtYXRpb24gKENESUQsIG5hbWUsIGJhbmRncm91cHMpCisgKiBhc3NvY2lhdGVkIHRvIHRoZSBDSElEIHdlIGhhdmUgc2V0IGJlZm9yZSwgb3IgMCBDRElEIGFuZCBkZWZhdWx0CisgKiBuYW1lIGFuZCBiYW5kZ3JvdXAgaWYgbm8gQ0hJRCBzZXQgb3IgdW5rbm93bi4KKyAqLworc3RhdGljIGludCBjYmFmX2NkaWRfZ2V0KHN0cnVjdCBjYmFmICpjYmFmKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNiYWYtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCB3dXNiX2NiYWZfZGV2aWNlX2luZm8gKmRpOworCXNpemVfdCBuZWVkZWQ7CisKKwlkaSA9IGNiYWYtPmJ1ZmZlcjsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCWNiYWYtPnVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZShjYmFmLT51c2JfZGV2LCAwKSwKKwkJQ0JBRl9SRVFfR0VUX0FTU09DSUFUSU9OX1JFUVVFU1QsCisJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCTB4MDIwMCwgY2JhZi0+dXNiX2lmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQlkaSwgY2JhZi0+YnVmZmVyX3NpemUsIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgcmVxdWVzdCBkZXZpY2UgaW5mb3JtYXRpb246ICVkXG4iLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCW5lZWRlZCA9IHJlc3VsdCA8IHNpemVvZigqZGkpID8gc2l6ZW9mKCpkaSkgOiBsZTMyX3RvX2NwdShkaS0+TGVuZ3RoKTsKKwlpZiAocmVzdWx0IDwgbmVlZGVkKSB7CisJCWRldl9lcnIoZGV2LCAiTm90IGVub3VnaCBkYXRhIGluIERFVklDRV9JTkZPIHJlcGx5ICglenUgdnMgIgorCQkJIiV6dSBieXRlcyBuZWVkZWQpXG4iLCAoc2l6ZV90KXJlc3VsdCwgbmVlZGVkKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlzdHJsY3B5KGNiYWYtPmRldmljZV9uYW1lLCBkaS0+RGV2aWNlRnJpZW5kbHlOYW1lLCBDQkFfTkFNRV9MRU4pOworCWNiYWYtPmNkaWQgPSBkaS0+Q0RJRDsKKwljYmFmLT5kZXZpY2VfYmFuZF9ncm91cHMgPSBsZTE2X3RvX2NwdShkaS0+QmFuZEdyb3Vwcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY2JhZl93dXNiX2NoaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCBjYmFmICpjYmFmID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisJY2hhciBwcl9jaGlkW1dVU0JfQ0tIRElEX1NUUlNJWkVdOworCisJY2toZGlkX3ByaW50Zihwcl9jaGlkLCBzaXplb2YocHJfY2hpZCksICZjYmFmLT5jaGlkKTsKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHByX2NoaWQpOworfQorCitzdGF0aWMgc3NpemVfdCBjYmFmX3d1c2JfY2hpZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCBjYmFmICpjYmFmID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLAorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICIKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCIsCisJCQkmY2JhZi0+Y2hpZC5kYXRhWzBdICwgJmNiYWYtPmNoaWQuZGF0YVsxXSwKKwkJCSZjYmFmLT5jaGlkLmRhdGFbMl0gLCAmY2JhZi0+Y2hpZC5kYXRhWzNdLAorCQkJJmNiYWYtPmNoaWQuZGF0YVs0XSAsICZjYmFmLT5jaGlkLmRhdGFbNV0sCisJCQkmY2JhZi0+Y2hpZC5kYXRhWzZdICwgJmNiYWYtPmNoaWQuZGF0YVs3XSwKKwkJCSZjYmFmLT5jaGlkLmRhdGFbOF0gLCAmY2JhZi0+Y2hpZC5kYXRhWzldLAorCQkJJmNiYWYtPmNoaWQuZGF0YVsxMF0sICZjYmFmLT5jaGlkLmRhdGFbMTFdLAorCQkJJmNiYWYtPmNoaWQuZGF0YVsxMl0sICZjYmFmLT5jaGlkLmRhdGFbMTNdLAorCQkJJmNiYWYtPmNoaWQuZGF0YVsxNF0sICZjYmFmLT5jaGlkLmRhdGFbMTVdKTsKKworCWlmIChyZXN1bHQgIT0gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzdWx0ID0gY2JhZl9zZW5kX2hvc3RfaW5mbyhjYmFmKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSBjYmFmX2NkaWRfZ2V0KGNiYWYpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gLXJlc3VsdDsKKwlyZXR1cm4gc2l6ZTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih3dXNiX2NoaWQsIDA2MDAsIGNiYWZfd3VzYl9jaGlkX3Nob3csIGNiYWZfd3VzYl9jaGlkX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgY2JhZl93dXNiX2hvc3RfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IGNiYWYgKmNiYWYgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgY2JhZi0+aG9zdF9uYW1lKTsKK30KKworc3RhdGljIHNzaXplX3QgY2JhZl93dXNiX2hvc3RfbmFtZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCBjYmFmICpjYmFmID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJTYzcyIsIGNiYWYtPmhvc3RfbmFtZSk7CisJaWYgKHJlc3VsdCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSKHd1c2JfaG9zdF9uYW1lLCAwNjAwLCBjYmFmX3d1c2JfaG9zdF9uYW1lX3Nob3csCisJCQkJCSBjYmFmX3d1c2JfaG9zdF9uYW1lX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgY2JhZl93dXNiX2hvc3RfYmFuZF9ncm91cHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IGNiYWYgKmNiYWYgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGNiYWYtPmhvc3RfYmFuZF9ncm91cHMpOworfQorCitzdGF0aWMgc3NpemVfdCBjYmFmX3d1c2JfaG9zdF9iYW5kX2dyb3Vwc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCBjYmFmICpjYmFmID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisJdTE2IGJhbmRfZ3JvdXBzID0gMDsKKworCXJlc3VsdCA9IHNzY2FuZihidWYsICIlMDRoeCIsICZiYW5kX2dyb3Vwcyk7CisJaWYgKHJlc3VsdCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNiYWYtPmhvc3RfYmFuZF9ncm91cHMgPSBiYW5kX2dyb3VwczsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIod3VzYl9ob3N0X2JhbmRfZ3JvdXBzLCAwNjAwLAorCQkgICBjYmFmX3d1c2JfaG9zdF9iYW5kX2dyb3Vwc19zaG93LAorCQkgICBjYmFmX3d1c2JfaG9zdF9iYW5kX2dyb3Vwc19zdG9yZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd3VzYl9jYmFmX2RldmljZV9pbmZvIGNiYWZfZGV2aWNlX2luZm9fZGVmYXVsdHMgPSB7CisJLkxlbmd0aF9oZHIgICAgICAgICAgICAgICA9IFdVU0JfQVJfTGVuZ3RoLAorCS5DRElEX2hkciAgICAgICAgICAgICAgICAgPSBXVVNCX0FSX0NESUQsCisJLkJhbmRHcm91cHNfaGRyICAgICAgICAgICA9IFdVU0JfQVJfQmFuZEdyb3VwcywKKwkuTGFuZ0lEX2hkciAgICAgICAgICAgICAgID0gV1VTQl9BUl9MYW5nSUQsCisJLkRldmljZUZyaWVuZGx5TmFtZV9oZHIgICA9IFdVU0JfQVJfRGV2aWNlRnJpZW5kbHlOYW1lLAorfTsKKworc3RhdGljIHNzaXplX3QgY2JhZl93dXNiX2NkaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IGNiYWYgKmNiYWYgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKKwljaGFyIHByX2NkaWRbV1VTQl9DS0hESURfU1RSU0laRV07CisKKwlja2hkaWRfcHJpbnRmKHByX2NkaWQsIHNpemVvZihwcl9jZGlkKSwgJmNiYWYtPmNkaWQpOworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcHJfY2RpZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNiYWZfd3VzYl9jZGlkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgY2JhZiAqY2JhZiA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOworCXN0cnVjdCB3dXNiX2NraGRpZCBjZGlkOworCisJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICIKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHgiLAorCQkJJmNkaWQuZGF0YVswXSAsICZjZGlkLmRhdGFbMV0sCisJCQkmY2RpZC5kYXRhWzJdICwgJmNkaWQuZGF0YVszXSwKKwkJCSZjZGlkLmRhdGFbNF0gLCAmY2RpZC5kYXRhWzVdLAorCQkJJmNkaWQuZGF0YVs2XSAsICZjZGlkLmRhdGFbN10sCisJCQkmY2RpZC5kYXRhWzhdICwgJmNkaWQuZGF0YVs5XSwKKwkJCSZjZGlkLmRhdGFbMTBdLCAmY2RpZC5kYXRhWzExXSwKKwkJCSZjZGlkLmRhdGFbMTJdLCAmY2RpZC5kYXRhWzEzXSwKKwkJCSZjZGlkLmRhdGFbMTRdLCAmY2RpZC5kYXRhWzE1XSk7CisJaWYgKHJlc3VsdCAhPSAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYmFmLT5jZGlkID0gY2RpZDsKKworCXJldHVybiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSKHd1c2JfY2RpZCwgMDYwMCwgY2JhZl93dXNiX2NkaWRfc2hvdywgY2JhZl93dXNiX2NkaWRfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBjYmFmX3d1c2JfZGV2aWNlX2JhbmRfZ3JvdXBzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IGNiYWYgKmNiYWYgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGNiYWYtPmRldmljZV9iYW5kX2dyb3Vwcyk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih3dXNiX2RldmljZV9iYW5kX2dyb3VwcywgMDYwMCwKKwkJICAgY2JhZl93dXNiX2RldmljZV9iYW5kX2dyb3Vwc19zaG93LAorCQkgICBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgY2JhZl93dXNiX2RldmljZV9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgY2JhZiAqY2JhZiA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBjYmFmLT5kZXZpY2VfbmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIod3VzYl9kZXZpY2VfbmFtZSwgMDYwMCwgY2JhZl93dXNiX2RldmljZV9uYW1lX3Nob3csIE5VTEwpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHd1c2JfY2JhZl9jY19kYXRhIGNiYWZfY2NfZGF0YV9kZWZhdWx0cyA9IHsKKwkuQXNzb2NpYXRpb25UeXBlSWRfaGRyICAgID0gV1VTQl9BUl9Bc3NvY2lhdGlvblR5cGVJZCwKKwkuQXNzb2NpYXRpb25UeXBlSWQgICAgCSAgPSBjcHVfdG9fbGUxNihBUl9UWVBFX1dVU0IpLAorCS5Bc3NvY2lhdGlvblN1YlR5cGVJZF9oZHIgPSBXVVNCX0FSX0Fzc29jaWF0aW9uU3ViVHlwZUlkLAorCS5Bc3NvY2lhdGlvblN1YlR5cGVJZCAgICAgPSBjcHVfdG9fbGUxNihBUl9UWVBFX1dVU0JfQVNTT0NJQVRFKSwKKwkuTGVuZ3RoX2hkciAgICAgICAgICAgICAgID0gV1VTQl9BUl9MZW5ndGgsCisJLkxlbmd0aCAgICAgICAgICAgICAgIAkgID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCB3dXNiX2NiYWZfY2NfZGF0YSkpLAorCS5Db25uZWN0aW9uQ29udGV4dF9oZHIgICAgPSBXVVNCX0FSX0Nvbm5lY3Rpb25Db250ZXh0LAorCS5CYW5kR3JvdXBzX2hkciAgICAgICAgICAgPSBXVVNCX0FSX0JhbmRHcm91cHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHd1c2JfY2JhZl9jY19kYXRhX2ZhaWwgY2JhZl9jY19kYXRhX2ZhaWxfZGVmYXVsdHMgPSB7CisJLkFzc29jaWF0aW9uVHlwZUlkX2hkciAgICA9IFdVU0JfQVJfQXNzb2NpYXRpb25UeXBlSWQsCisJLkFzc29jaWF0aW9uU3ViVHlwZUlkX2hkciA9IFdVU0JfQVJfQXNzb2NpYXRpb25TdWJUeXBlSWQsCisJLkxlbmd0aF9oZHIgICAgICAgICAgICAgICA9IFdVU0JfQVJfTGVuZ3RoLAorCS5Bc3NvY2lhdGlvblN0YXR1c19oZHIgICAgPSBXVVNCX0FSX0Fzc29jaWF0aW9uU3RhdHVzLAorfTsKKworLyoKKyAqIFNlbmQgYSBuZXcgQ0MgdG8gdGhlIGRldmljZS4KKyAqLworc3RhdGljIGludCBjYmFmX2NjX3VwbG9hZChzdHJ1Y3QgY2JhZiAqY2JhZikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjYmFmLT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3Qgd3VzYl9jYmFmX2NjX2RhdGEgKmNjZDsKKwljaGFyIHByX2NkaWRbV1VTQl9DS0hESURfU1RSU0laRV07CisKKwljY2QgPSAgY2JhZi0+YnVmZmVyOworCSpjY2QgPSBjYmFmX2NjX2RhdGFfZGVmYXVsdHM7CisJY2NkLT5DSElEID0gY2JhZi0+Y2hpZDsKKwljY2QtPkNESUQgPSBjYmFmLT5jZGlkOworCWNjZC0+Q0sgPSBjYmFmLT5jazsKKwljY2QtPkJhbmRHcm91cHMgPSBjcHVfdG9fbGUxNihjYmFmLT5ob3N0X2JhbmRfZ3JvdXBzKTsKKworCWRldl9kYmcoZGV2LCAiVHJ5aW5nIHRvIHVwbG9hZCBDQzpcbiIpOworCWNraGRpZF9wcmludGYocHJfY2RpZCwgc2l6ZW9mKHByX2NkaWQpLCAmY2NkLT5DSElEKTsKKwlkZXZfZGJnKGRldiwgIiAgQ0hJRCAgICAgICAlc1xuIiwgcHJfY2RpZCk7CisJY2toZGlkX3ByaW50Zihwcl9jZGlkLCBzaXplb2YocHJfY2RpZCksICZjY2QtPkNESUQpOworCWRldl9kYmcoZGV2LCAiICBDRElEICAgICAgICVzXG4iLCBwcl9jZGlkKTsKKwlkZXZfZGJnKGRldiwgIiAgQmFuZGdyb3VwcyAweCUwNHhcbiIsIGNiYWYtPmhvc3RfYmFuZF9ncm91cHMpOworCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKAorCQljYmFmLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUoY2JhZi0+dXNiX2RldiwgMCksCisJCUNCQUZfUkVRX1NFVF9BU1NPQ0lBVElPTl9SRVNQT05TRSwKKwkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCTB4MDIwMSwgY2JhZi0+dXNiX2lmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQljY2QsIHNpemVvZigqY2NkKSwgMTAwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNiYWZfd3VzYl9ja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCBjYmFmICpjYmFmID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLAorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICIKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCIsCisJCQkmY2JhZi0+Y2suZGF0YVswXSAsICZjYmFmLT5jay5kYXRhWzFdLAorCQkJJmNiYWYtPmNrLmRhdGFbMl0gLCAmY2JhZi0+Y2suZGF0YVszXSwKKwkJCSZjYmFmLT5jay5kYXRhWzRdICwgJmNiYWYtPmNrLmRhdGFbNV0sCisJCQkmY2JhZi0+Y2suZGF0YVs2XSAsICZjYmFmLT5jay5kYXRhWzddLAorCQkJJmNiYWYtPmNrLmRhdGFbOF0gLCAmY2JhZi0+Y2suZGF0YVs5XSwKKwkJCSZjYmFmLT5jay5kYXRhWzEwXSwgJmNiYWYtPmNrLmRhdGFbMTFdLAorCQkJJmNiYWYtPmNrLmRhdGFbMTJdLCAmY2JhZi0+Y2suZGF0YVsxM10sCisJCQkmY2JhZi0+Y2suZGF0YVsxNF0sICZjYmFmLT5jay5kYXRhWzE1XSk7CisJaWYgKHJlc3VsdCAhPSAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXN1bHQgPSBjYmFmX2NjX3VwbG9hZChjYmFmKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSKHd1c2JfY2ssIDA2MDAsIE5VTEwsIGNiYWZfd3VzYl9ja19zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjYmFmX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl93dXNiX2hvc3RfbmFtZS5hdHRyLAorCSZkZXZfYXR0cl93dXNiX2hvc3RfYmFuZF9ncm91cHMuYXR0ciwKKwkmZGV2X2F0dHJfd3VzYl9jaGlkLmF0dHIsCisJJmRldl9hdHRyX3d1c2JfY2RpZC5hdHRyLAorCSZkZXZfYXR0cl93dXNiX2RldmljZV9uYW1lLmF0dHIsCisJJmRldl9hdHRyX3d1c2JfZGV2aWNlX2JhbmRfZ3JvdXBzLmF0dHIsCisJJmRldl9hdHRyX3d1c2JfY2suYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY2JhZl9kZXZfYXR0cl9ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCS8qIHdlIHdhbnQgdGhlbSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKi8KKwkuYXR0cnMgPSBjYmFmX2Rldl9hdHRycywKK307CisKK3N0YXRpYyBpbnQgY2JhZl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2JhZiAqY2JhZjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWZhY2UtPmRldjsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKworCWNiYWYgPSBremFsbG9jKHNpemVvZigqY2JhZiksIEdGUF9LRVJORUwpOworCWlmIChjYmFmID09IE5VTEwpCisJCWdvdG8gZXJyb3Jfa3phbGxvYzsKKwljYmFmLT5idWZmZXIgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CisJaWYgKGNiYWYtPmJ1ZmZlciA9PSBOVUxMKQorCQlnb3RvIGVycm9yX2ttYWxsb2NfYnVmZmVyOworCisJY2JhZi0+YnVmZmVyX3NpemUgPSA1MTI7CisJY2JhZi0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaWZhY2UpKTsKKwljYmFmLT51c2JfaWZhY2UgPSB1c2JfZ2V0X2ludGYoaWZhY2UpOworCXJlc3VsdCA9IGNiYWZfY2hlY2soY2JhZik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJUaGlzIGRldmljZSBpcyBub3QgV1VTQi1DQkFGIGNvbXBsaWFudCIKKwkJCSJhbmQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuXG4iKTsKKwkJZ290byBlcnJvcl9jaGVjazsKKwl9CisKKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmNiYWZfZGV2X2F0dHJfZ3JvdXApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgc3lzZnMgYXR0ciBncm91cDogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3JfY3JlYXRlX2dyb3VwOworCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBjYmFmKTsKKwlyZXR1cm4gMDsKKworZXJyb3JfY3JlYXRlX2dyb3VwOgorZXJyb3JfY2hlY2s6CisJa2ZyZWUoY2JhZi0+YnVmZmVyKTsKK2Vycm9yX2ttYWxsb2NfYnVmZmVyOgorCWtmcmVlKGNiYWYpOworZXJyb3Jfa3phbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjYmFmX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoreworCXN0cnVjdCBjYmFmICpjYmFmID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZjYmFmX2Rldl9hdHRyX2dyb3VwKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2ludGYoaWZhY2UpOworCWtmcmVlKGNiYWYtPmJ1ZmZlcik7CisJLyogcGFyYW5vaWE6IGNsZWFuIHVwIGNyeXB0byBrZXlzICovCisJbWVtc2V0KGNiYWYsIDAsIHNpemVvZigqY2JhZikpOworCWtmcmVlKGNiYWYpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2JhZl9pZF90YWJsZVtdID0geworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDB4ZWYsIDB4MDMsIDB4MDEpLCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2JhZl9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjYmFmX2RyaXZlciA9IHsKKwkubmFtZSA9CQkid3VzYi1jYmFmIiwKKwkuaWRfdGFibGUgPQljYmFmX2lkX3RhYmxlLAorCS5wcm9iZSA9CWNiYWZfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQljYmFmX2Rpc2Nvbm5lY3QsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjYmFmX2RyaXZlcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmY2JhZl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoY2JhZl9kcml2ZXJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYmFmX2RyaXZlcl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmNiYWZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGNiYWZfZHJpdmVyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXaXJlbGVzcyBVU0IgQ2FibGUgQmFzZWQgQXNzb2NpYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NyeXB0by5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2YzQzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NyeXB0by5jCkBAIC0wLDAgKzEsNTM4IEBACisvKgorICogVWx0cmEgV2lkZSBCYW5kCisgKiBBRVMtMTI4IENDTSBFbmNyeXB0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogV2UgZG9uJ3QgZG8gYW55IGVuY3J5cHRpb24gaGVyZTsgd2UgdXNlIHRoZSBMaW51eCBLZXJuZWwncyBBRVMtMTI4CisgKiBjcnlwdG8gbW9kdWxlcyB0byBjb25zdHJ1Y3Qga2V5cyBhbmQgcGF5bG9hZCBibG9ja3MgaW4gYSB3YXkKKyAqIGRlZmluZWQgYnkgV1VTQjEuMFs2XS4gQ2hlY2sgdGhlIGVycmF0YXMsIGFzIHR5cG9zIGFyZSBhcmUgcGF0Y2hlZAorICogdGhlcmUuCisgKgorICogVGhhbmtzIGEgemlsbGlvbiB0byBKb2huIEtleXMgZm9yIGhpcyBoZWxwIGFuZCBjbGFyaWZpY2F0aW9ucyBvdmVyCisgKiB0aGUgZGVzaWduZWQtYnktYS1jb21taXR0ZWUgdGV4dC4KKyAqCisgKiBTbyB0aGUgaWRlYSBpcyB0aGF0IHRoZXJlIGlzIHRoaXMgYmFzaWMgUHNldWRvLVJhbmRvbS1GdW5jdGlvbgorICogZGVmaW5lZCBpbiBXVVNCMS4wWzYuNV0gd2hpY2ggaXMgdGhlIGNvcmUgb2YgZXZlcnl0aGluZy4gSXQgd29ya3MKKyAqIGJ5IHR3ZWFraW5nIHNvbWUgYmxvY2tzLCBBRVMgY3J5cHRpbmcgdGhlbSBhbmQgdGhlbiB4b3JpbmcKKyAqIHNvbWV0aGluZyBlbHNlIHdpdGggdGhlbSAodGhpcyBzZWVtcyB0byBiZSBjYWxsZWQgQ0JDKEFFUykgLS0gY2FuCisgKiB5b3UgdGVsbCBJIGtub3cgamFjayBhYm91dCBjcnlwdG8/KS4gU28gd2UganVzdCBmdW5uZWwgaXQgaW50byB0aGUKKyAqIExpbnV4IENyeXB0byBBUEkuCisgKgorICogV2UgbGVhdmUgYSBjcnlwdG8gdGVzdCBtb2R1bGUgc28gd2UgY2FuIHZlcmlmeSB0aGF0IHZlY3RvcnMgbWF0Y2gsCisgKiBldmVyeSBub3cgYW5kIHRoZW4uCisgKgorICogQmxvY2sgc2l6ZTogMTYgYnl0ZXMgLS0gQUVTIHNlZW1zIHRvIGRvIHRoaW5ncyBpbiAnYmxvY2sgc2l6ZXMnLiBJCisgKiAgICAgICAgICAgICBhbSBsZWFybmluZyBhIGxvdC4uLgorICoKKyAqICAgICAgICAgICAgIENvbnZlbmllbnRseSwgc29tZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBuZWVkIHRvIGJlCisgKiAgICAgICAgICAgICBmdW5uZWxlZCB0aHJvdWdoIEFFUyBhcmUuLi4xNiBieXRlcyBpbiBzaXplIQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivd3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjZGVmaW5lIERfTE9DQUwgMAorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCisKKy8qCisgKiBCbG9jayBvZiBkYXRhLCBhcyB1bmRlcnN0b29kIGJ5IEFFUy1DQ00KKyAqCisgKiBUaGUgY29kZSBhc3N1bWVzIHRoaXMgc3RydWN0dXJlIGlzIG5vdGhpbmcgYnV0IGEgMTYgYnl0ZSBhcnJheQorICogKHBhY2tlZCBpbiBhIHN0cnVjdCB0byBhdm9pZCBjb21tb24gbWVzcyB1cHMgdGhhdCBJIHVzdWFsbHkgZG8gd2l0aAorICogYXJyYXlzIGFuZCBlbmZvcmNpbmcgdHlwZSBjaGVja2luZykuCisgKi8KK3N0cnVjdCBhZXNfY2NtX2Jsb2NrIHsKKwl1OCBkYXRhWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBDb3VudGVyLW1vZGUgQmxvY2tzIChXVVNCMS4wWzYuNF0pCisgKgorICogQWNjb3JkaW5nIHRvIENDTSAob3Igc28gaXQgc2VlbXMpLCBmb3IgdGhlIHB1cnBvc2Ugb2YgY2FsY3VsYXRpbmcKKyAqIHRoZSBNSUMsIHRoZSBtZXNzYWdlIGlzIGJyb2tlbiBpbiBOIGNvdW50ZXItbW9kZSBibG9ja3MsIEIwLCBCMSwKKyAqIC4uLiBCTi4KKyAqCisgKiBCMCBjb250YWlucyBmbGFncywgdGhlIENDTSBub25jZSBhbmQgbChtKS4KKyAqCisgKiBCMSBjb250YWlucyBsKGEpLCB0aGUgTUFDIGhlYWRlciwgdGhlIGVuY3J5cHRpb24gb2Zmc2V0IGFuZCBwYWRkaW5nLgorICoKKyAqIElmIEVPIGlzIG5vbnplcm8sIGFkZGl0aW9uYWwgYmxvY2tzIGFyZSBidWlsdCBmcm9tIHBheWxvYWQgYnl0ZXMKKyAqIHVudGlsIEVPIGlzIGV4YWh1c3RlZCAoRklYTUU6IHBhZGRpbmcgdG8gMTYgYnl0ZXMsIEkgZ3Vlc3MpLiBUaGUKKyAqIHBhZGRpbmcgaXMgbm90IHhtaXR0ZWQuCisgKi8KKworLyogV1VTQjEuMFtUNi40XSAqLworc3RydWN0IGFlc19jY21fYjAgeworCXU4IGZsYWdzOwkvKiAweDU5LCBwZXIgQ0NNIHNwZWMgKi8KKwlzdHJ1Y3QgYWVzX2NjbV9ub25jZSBjY21fbm9uY2U7CisJX19iZTE2IGxtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogV1VTQjEuMFtUNi41XSAqLworc3RydWN0IGFlc19jY21fYjEgeworCV9fYmUxNiBsYTsKKwl1OCBtYWNfaGVhZGVyWzEwXTsKKwlfX2xlMTYgZW87CisJdTggc2VjdXJpdHlfcmVzZXJ2ZWQ7CS8qIFRoaXMgaXMgYWx3YXlzIHplcm8gKi8KKwl1OCBwYWRkaW5nOwkJLyogMCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEVuY3J5cHRpb24gQmxvY2tzIChXVVNCMS4wWzYuNC40XSkKKyAqCisgKiBDQ00gdXNlcyBBeCBibG9ja3MgdG8gZ2VuZXJhdGUgYSBrZXlzdHJlYW0gd2l0aCB3aGljaCB0aGUgTUlDIGFuZAorICogdGhlIG1lc3NhZ2UncyBwYXlsb2FkIGFyZSBlbmNvZGVkLiBBMCBhbHdheXMgZW5jcnlwdHMvZGVjcnlwdHMgdGhlCisgKiBNSUMuIEF4ICh4PjApIGFyZSB1c2VkIGZvciB0aGUgc3VjZXNpdmUgcGF5bG9hZCBibG9ja3MuCisgKgorICogVGhlIHggaXMgdGhlIGNvdW50ZXIsIGFuZCBpcyBpbmNyZWFzZWQgZm9yIGVhY2ggYmxvY2suCisgKi8KK3N0cnVjdCBhZXNfY2NtX2EgeworCXU4IGZsYWdzOwkvKiAweDAxLCBwZXIgQ0NNIHNwZWMgKi8KKwlzdHJ1Y3QgYWVzX2NjbV9ub25jZSBjY21fbm9uY2U7CisJX19iZTE2IGNvdW50ZXI7CS8qIFZhbHVlIG9mIHggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyB2b2lkIGJ5dGV3aXNlX3hvcih2b2lkICpfYm8sIGNvbnN0IHZvaWQgKl9iaTEsIGNvbnN0IHZvaWQgKl9iaTIsCisJCQkgc2l6ZV90IHNpemUpCit7CisJdTggKmJvID0gX2JvOworCWNvbnN0IHU4ICpiaTEgPSBfYmkxLCAqYmkyID0gX2JpMjsKKwlzaXplX3QgaXRyOworCWZvciAoaXRyID0gMDsgaXRyIDwgc2l6ZTsgaXRyKyspCisJCWJvW2l0cl0gPSBiaTFbaXRyXSBeIGJpMltpdHJdOworfQorCisvKgorICogQ0MtTUFDIGZ1bmN0aW9uIFdVU0IxLjBbNi41XQorICoKKyAqIFRha2UgYSBkYXRhIHN0cmluZyBhbmQgcHJvZHVjZSB0aGUgZW5jcnlwdGVkIENCQyBDb3VudGVyLW1vZGUgTUlDCisgKgorICogTm90ZSB0aGUgbmFtZXMgZm9yIG1vc3QgZnVuY3Rpb24gYXJndW1lbnRzIGFyZSBtYWRlIHRvIChtb3JlIG9yCisgKiBsZXNzKSBtYXRjaCB0aG9zZSB1c2VkIGluIHRoZSBwc2V1ZG8tZnVuY3Rpb24gZGVmaW5pdGlvbiBnaXZlbiBpbgorICogV1VTQjEuMFs2LjVdLgorICoKKyAqIEB0Zm1fY2JjOiBDQkMoQUVTKSBibGtjaXBoZXIgaGFuZGxlIChpbml0aWFsaXplZCkKKyAqCisgKiBAdGZtX2FlczogQUVTIGNpcGhlciBoYW5kbGUgKGluaXRpYWxpemVkKQorICoKKyAqIEBtaWM6IGJ1ZmZlciBmb3IgcGxhY2luZyB0aGUgY29tcHV0ZWQgTUlDIChNZXNzYWdlIEludGVncml0eQorICogICAgICAgQ29kZSkuIFRoaXMgaXMgZXhhY3RseSA4IGJ5dGVzLCBhbmQgd2UgZXhwZWN0IHRoZSBidWZmZXIgdG8KKyAqICAgICAgIGJlIGF0IGxlYXN0IGVpZ2h0IGJ5dGVzIGluIGxlbmd0aC4KKyAqCisgKiBAa2V5OiAxMjggYml0IHN5bW1ldHJpYyBrZXkKKyAqCisgKiBAbjogQ0NNIG5vbmNlCisgKgorICogQGE6IEFTQ0lJIHN0cmluZywgMTQgYnl0ZXMgbG9uZyAoSSBndWVzcyB6ZXJvIHBhZGRlZCBpZiBuZWVkZWQ7CisgKiAgICAgd2UgdXNlIGV4YWN0bHkgMTQgYnl0ZXMpLgorICoKKyAqIEBiOiBkYXRhIHN0cmVhbSB0byBiZSBwcm9jZXNzZWQ7IGNhbm5vdCBiZSBhIGdsb2JhbCBvciBjb25zdCBsb2NhbAorICogICAgICh3aWxsIGNvbmZ1c2UgdGhlIHNjYXR0ZXJsaXN0cykKKyAqCisgKiBAYmxlbjogc2l6ZSBvZiBiLi4uCisgKgorICogU3RpbGwgbm90IHZlcnkgY2xlYXIgaG93IHRoaXMgaXMgZG9uZSwgYnV0IGxvb2tzIGxpa2UgdGhpczogd2UKKyAqIGNyZWF0ZSBibG9jayBCMCAoYXMgV1VTQjEuMFs2LjVdIHNheXMpLCB0aGVuIHdlIEFFUy1jcnlwdCBpdCB3aXRoCisgKiBAa2V5LiBXZSBieXRld2lzZSB4b3IgQjAgd2l0aCBCMSAoMSkgYW5kIEFFUy1jcnlwdCB0aGF0LiBUaGVuIHdlCisgKiB0YWtlIHRoZSBwYXlsb2FkIGFuZCBkaXZpZGUgaXQgaW4gYmxvY2tzICgxNiBieXRlcyksIHhvciB0aGVtIHdpdGgKKyAqIHRoZSBwcmV2aW91cyBjcnlwdG8gcmVzdWx0ICgxNiBieXRlcykgYW5kIGNyeXB0IGl0LCByZXBlYXQgdGhlIG5leHQKKyAqIGJsb2NrIHdpdGggdGhlIG91dHB1dCBvZiB0aGUgcHJldmlvdXMgb25lLCByaW5zZSB3YXNoIChJIGd1ZXNzIHRoaXMKKyAqIGlzIHdoYXQgQUVTIENCQyBtb2RlIG1lYW5zLi4uYnV0IEkgdHJ1bHkgaGF2ZSBubyBpZGVhKS4gU28gd2UgdXNlCisgKiB0aGUgQ0JDKEFFUykgYmxrY2lwaGVyLCB0aGF0IGRvZXMgcHJlY2lzZWx5IHRoYXQuIFRoZSBJViAoSW5pdGlhbAorICogVmVjdG9yKSBpcyAxNiBieXRlcyBhbmQgaXMgc2V0IHRvIHplcm8sIHNvCisgKgorICogU2VlIHJmYzM2MTAuIExpbnV4IGNyeXB0byBoYXMgYSBDQkMgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGUKKyAqIGRvY3VtZW50YXRpb24gaXMgc2NhcmNlLCB0byBzYXkgdGhlIGxlYXN0LCBhbmQgdGhlIGV4YW1wbGUgY29kZSBpcworICogc28gaW50cmljYXRlZCB0aGF0IGlzIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kIGhvdyB0aGluZ3Mgd29yay4gTW9zdAorICogb2YgdGhpcyBpcyBndWVzcyB3b3JrIC0tIGJpdGUgbWUuCisgKgorICogKDEpIENyZWF0ZWQgYXMgNi41IHNheXMsIGFnYWluLCB1c2luZyBhcyBsKGEpICdCbGVuICsgMTQnLCBhbmQKKyAqICAgICB1c2luZyB0aGUgMTQgYnl0ZXMgb2YgQGEgdG8gZmlsbCB1cAorICogICAgIGIxLnttYWNfaGVhZGVyLGUwLHNlY3VyaXR5X3Jlc2VydmVkLHBhZGRpbmd9LgorICoKKyAqIE5PVEU6IFRoZSBkZWZpbml0b24gb2YgbChhKSBpbiBXVVNCMS4wWzYuNV0gdnMgdGhlIGRlZmluaXRpb24gb2YKKyAqICAgICAgIGwobSkgaXMgb3J0aG9nb25hbCwgdGhleSBiZWFyIG5vIHJlbGF0aW9uc2hpcCwgc28gaXQgaXMgbm90CisgKiAgICAgICBpbiBjb25mbGljdCB3aXRoIHRoZSBwYXJhbWV0ZXIncyByZWxhdGlvbiB0aGF0CisgKiAgICAgICBXVVNCMS4wWzYuNC4yXSkgZGVmaW5lcy4KKyAqCisgKiBOT1RFOiBXVVNCMS4wW0EuMV06IEhvc3QgTm9uY2UgaXMgbWlzc2luZyBhIG5pYmJsZT8gKDFlKTsgZml4ZWQgaW4KKyAqICAgICAgIGZpcnN0IGVycmF0YSByZWxlYXNlZCBvbiAyMDA1LzA3LgorICoKKyAqIE5PVEU6IHdlIG5lZWQgdG8gY2xlYW4gSVYgdG8gemVybyBhdCBlYWNoIGludm9jYXRpb24gdG8gbWFrZSBzdXJlCisgKiAgICAgICB3ZSBzdGFydCB3aXRoIGEgZnJlc2ggZW1wdHkgSW5pdGlhbCBWZWN0b3IsIHNvIHRoYXQgdGhlIENCQworICogICAgICAgd29ya3Mgb2suCisgKgorICogTk9URTogYmxlbiBpcyBub3QgYWxpZ25lZCB0byBhIGJsb2NrIHNpemUsIHdlJ2xsIHBhZCB6ZXJvcywgdGhhdCdzCisgKiAgICAgICB3aGF0IHNnWzRdIGlzIGZvci4gTWF5YmUgdGhlcmUgaXMgYSBzbWFydGVyIHdheSB0byBkbyB0aGlzLgorICovCitzdGF0aWMgaW50IHd1c2JfY2NtX21hYyhzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtX2NiYywKKwkJCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm1fYWVzLCB2b2lkICptaWMsCisJCQljb25zdCBzdHJ1Y3QgYWVzX2NjbV9ub25jZSAqbiwKKwkJCWNvbnN0IHN0cnVjdCBhZXNfY2NtX2xhYmVsICphLCBjb25zdCB2b2lkICpiLAorCQkJc2l6ZV90IGJsZW4pCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CisJc3RydWN0IGFlc19jY21fYjAgYjA7CisJc3RydWN0IGFlc19jY21fYjEgYjE7CisJc3RydWN0IGFlc19jY21fYSBheDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbNF0sIHNnX2RzdDsKKwl2b2lkICppdiwgKmRzdF9idWY7CisJc2l6ZV90IGl2c2l6ZSwgZHN0X3NpemU7CisJY29uc3QgdTggYnplcm9bMTZdID0geyAwIH07CisJc2l6ZV90IHplcm9fcGFkZGluZzsKKworCWRfZm5zdGFydCgzLCBOVUxMLCAiKHRmbV9jYmMgJXAsIHRmbV9hZXMgJXAsIG1pYyAlcCwgIgorCQkgICJuICVwLCBhICVwLCBiICVwLCBibGVuICV6dSlcbiIsCisJCSAgdGZtX2NiYywgdGZtX2FlcywgbWljLCBuLCBhLCBiLCBibGVuKTsKKwkvKgorCSAqIFRoZXNlIGNoZWNrcyBzaG91bGQgYmUgY29tcGlsZSB0aW1lIG9wdGltaXplZCBvdXQKKwkgKiBlbnN1cmUgQGEgZmlsbHMgYjEncyBtYWNfaGVhZGVyIGFuZCBmb2xsb3dpbmcgZmllbGRzCisJICovCisJV0FSTl9PTihzaXplb2YoKmEpICE9IHNpemVvZihiMSkgLSBzaXplb2YoYjEubGEpKTsKKwlXQVJOX09OKHNpemVvZihiMCkgIT0gc2l6ZW9mKHN0cnVjdCBhZXNfY2NtX2Jsb2NrKSk7CisJV0FSTl9PTihzaXplb2YoYjEpICE9IHNpemVvZihzdHJ1Y3QgYWVzX2NjbV9ibG9jaykpOworCVdBUk5fT04oc2l6ZW9mKGF4KSAhPSBzaXplb2Yoc3RydWN0IGFlc19jY21fYmxvY2spKTsKKworCXJlc3VsdCA9IC1FTk9NRU07CisJemVyb19wYWRkaW5nID0gc2l6ZW9mKHN0cnVjdCBhZXNfY2NtX2Jsb2NrKQorCQktIGJsZW4gJSBzaXplb2Yoc3RydWN0IGFlc19jY21fYmxvY2spOworCXplcm9fcGFkZGluZyA9IGJsZW4gJSBzaXplb2Yoc3RydWN0IGFlc19jY21fYmxvY2spOworCWlmICh6ZXJvX3BhZGRpbmcpCisJCXplcm9fcGFkZGluZyA9IHNpemVvZihzdHJ1Y3QgYWVzX2NjbV9ibG9jaykgLSB6ZXJvX3BhZGRpbmc7CisJZHN0X3NpemUgPSBibGVuICsgc2l6ZW9mKGIwKSArIHNpemVvZihiMSkgKyB6ZXJvX3BhZGRpbmc7CisJZHN0X2J1ZiA9IGt6YWxsb2MoZHN0X3NpemUsIEdGUF9LRVJORUwpOworCWlmIChkc3RfYnVmID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFOiBjYW4ndCBhbGxvYyBkZXN0aW5hdGlvbiBidWZmZXJcbiIpOworCQlnb3RvIGVycm9yX2RzdF9idWY7CisJfQorCisJaXYgPSBjcnlwdG9fYmxrY2lwaGVyX2NydCh0Zm1fY2JjKS0+aXY7CisJaXZzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtX2NiYyk7CisJbWVtc2V0KGl2LCAwLCBpdnNpemUpOworCisJLyogU2V0dXAgQjAgKi8KKwliMC5mbGFncyA9IDB4NTk7CS8qIEZvcm1hdCBCMCAqLworCWIwLmNjbV9ub25jZSA9ICpuOworCWIwLmxtID0gY3B1X3RvX2JlMTYoMCk7CS8qIFdVU0IxLjBbNi41XSBzZXogbChtKSBpcyAwICovCisKKwkvKiBTZXR1cCBCMQorCSAqCisJICogVGhlIFdVU0Igc3BlYyBpcyBhbnl0aGluZyBidXQgY2xlYXIhIFdVU0IxLjBbNi41XQorCSAqIHNheXMgdGhhdCB0byBpbml0aWFsaXplIEIxIGZyb20gQSB3aXRoICdsKGEpID0gYmxlbiArCisJICogMTQnLS1hZnRlciBjbGFyaWZpY2F0aW9uLCBpdCBtZWFucyB0byB1c2UgQSdzIGNvbnRlbnRzCisJICogZm9yIE1BQyBIZWFkZXIsIEVPLCBzZWMgcmVzZXJ2ZWQgYW5kIHBhZGRpbmcuCisJICovCisJYjEubGEgPSBjcHVfdG9fYmUxNihibGVuICsgMTQpOworCW1lbWNweSgmYjEubWFjX2hlYWRlciwgYSwgc2l6ZW9mKCphKSk7CisKKwlkX3ByaW50Zig0LCBOVUxMLCAiSTogQjAgKCV6dSBieXRlcylcbiIsIHNpemVvZihiMCkpOworCWRfZHVtcCg0LCBOVUxMLCAmYjAsIHNpemVvZihiMCkpOworCWRfcHJpbnRmKDQsIE5VTEwsICJJOiBCMSAoJXp1IGJ5dGVzKVxuIiwgc2l6ZW9mKGIxKSk7CisJZF9kdW1wKDQsIE5VTEwsICZiMSwgc2l6ZW9mKGIxKSk7CisJZF9wcmludGYoNCwgTlVMTCwgIkk6IEIgKCV6dSBieXRlcylcbiIsIGJsZW4pOworCWRfZHVtcCg0LCBOVUxMLCBiLCBibGVuKTsKKwlkX3ByaW50Zig0LCBOVUxMLCAiSTogQiAwLXBhZGRpbmcgKCV6dSBieXRlcylcbiIsIHplcm9fcGFkZGluZyk7CisJZF9wcmludGYoNCwgTlVMTCwgIkQ6IElWIGJlZm9yZSBjcnlwdG8gKCV6dSlcbiIsIGl2c2l6ZSk7CisJZF9kdW1wKDQsIE5VTEwsIGl2LCBpdnNpemUpOworCisJc2dfaW5pdF90YWJsZShzZywgQVJSQVlfU0laRShzZykpOworCXNnX3NldF9idWYoJnNnWzBdLCAmYjAsIHNpemVvZihiMCkpOworCXNnX3NldF9idWYoJnNnWzFdLCAmYjEsIHNpemVvZihiMSkpOworCXNnX3NldF9idWYoJnNnWzJdLCBiLCBibGVuKTsKKwkvKiAwIGlmIHdlbGwgYmVoYXZlZCA6KSAqLworCXNnX3NldF9idWYoJnNnWzNdLCBiemVybywgemVyb19wYWRkaW5nKTsKKwlzZ19pbml0X29uZSgmc2dfZHN0LCBkc3RfYnVmLCBkc3Rfc2l6ZSk7CisKKwlkZXNjLnRmbSA9IHRmbV9jYmM7CisJZGVzYy5mbGFncyA9IDA7CisJcmVzdWx0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KCZkZXNjLCAmc2dfZHN0LCBzZywgZHN0X3NpemUpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRTogY2FuJ3QgY29tcHV0ZSBDQkMtTUFDIHRhZyAoTUlDKTogJWRcbiIsCisJCSAgICAgICByZXN1bHQpOworCQlnb3RvIGVycm9yX2NiY19jcnlwdDsKKwl9CisJZF9wcmludGYoNCwgTlVMTCwgIkQ6IE1JQyB0YWdcbiIpOworCWRfZHVtcCg0LCBOVUxMLCBpdiwgaXZzaXplKTsKKworCS8qIE5vdyB3ZSBjcnlwdCB0aGUgTUlDIFRhZyAoKml2KSB3aXRoIEF4IC0tIHZhbHVlcyBwZXIgV1VTQjEuMFs2LjVdCisJICogVGhlIHByb2NlZHVyZSBpcyB0byBBRVMgY3J5cHQgdGhlIEEwIGJsb2NrIGFuZCBYT1IgdGhlIE1JQworCSAqIFRhZyBhZ2FpbnMgaXQ7IHdlIG9ubHkgZG8gdGhlIGZpcnN0IDggYnl0ZXMgYW5kIHBsYWNlIGl0CisJICogZGlyZWN0bHkgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKwkgKgorCSAqIFBPUyBDcnlwdG8gQVBJOiBzaXplIGlzIGFzc3VtZWQgdG8gYmUgQUVTJ3MgYmxvY2sgc2l6ZS4KKwkgKiBUaGFua3MgZm9yIGRvY3VtZW50aW5nIGl0IC0tIHRpcCB0YWtlbiBmcm9tIGFpcm8uYworCSAqLworCWF4LmZsYWdzID0gMHgwMTsJCS8qIGFzIHBlciBXVVNCIDEuMCBzcGVjICovCisJYXguY2NtX25vbmNlID0gKm47CisJYXguY291bnRlciA9IDA7CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm1fYWVzLCAodm9pZCAqKSZheCwgKHZvaWQgKikmYXgpOworCWJ5dGV3aXNlX3hvcihtaWMsICZheCwgaXYsIDgpOworCWRfcHJpbnRmKDQsIE5VTEwsICJEOiBDVFJbTUlDXVxuIik7CisJZF9kdW1wKDQsIE5VTEwsICZheCwgOCk7CisJZF9wcmludGYoNCwgTlVMTCwgIkQ6IENDTS1NSUMgdGFnXG4iKTsKKwlkX2R1bXAoNCwgTlVMTCwgbWljLCA4KTsKKwlyZXN1bHQgPSA4OworZXJyb3JfY2JjX2NyeXB0OgorCWtmcmVlKGRzdF9idWYpOworZXJyb3JfZHN0X2J1ZjoKKwlkX2ZuZW5kKDMsIE5VTEwsICIodGZtX2NiYyAlcCwgdGZtX2FlcyAlcCwgbWljICVwLCAiCisJCSJuICVwLCBhICVwLCBiICVwLCBibGVuICV6dSlcbiIsCisJCXRmbV9jYmMsIHRmbV9hZXMsIG1pYywgbiwgYSwgYiwgYmxlbik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdVU0IgUHNldWRvIFJhbmRvbSBGdW5jdGlvbiAoV1VTQjEuMFs2LjVdKQorICoKKyAqIEBiOiBidWZmZXIgdG8gdGhlIHNvdXJjZSBkYXRhOyBjYW5ub3QgYmUgYSBnbG9iYWwgb3IgY29uc3QgbG9jYWwKKyAqICAgICAod2lsbCBjb25mdXNlIHRoZSBzY2F0dGVybGlzdHMpCisgKi8KK3NzaXplX3Qgd3VzYl9wcmYodm9pZCAqb3V0LCBzaXplX3Qgb3V0X3NpemUsCisJCSBjb25zdCB1OCBrZXlbMTZdLCBjb25zdCBzdHJ1Y3QgYWVzX2NjbV9ub25jZSAqX24sCisJCSBjb25zdCBzdHJ1Y3QgYWVzX2NjbV9sYWJlbCAqYSwKKwkJIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBibGVuLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgcmVzdWx0LCBieXRlcyA9IDAsIGJpdHI7CisJc3RydWN0IGFlc19jY21fbm9uY2UgbiA9ICpfbjsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtX2NiYzsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtX2FlczsKKwl1NjQgc2ZuID0gMDsKKwlfX2xlNjQgc2ZuX2xlOworCisJZF9mbnN0YXJ0KDMsIE5VTEwsICIob3V0ICVwLCBvdXRfc2l6ZSAlenUsIGtleSAlcCwgX24gJXAsICIKKwkJICAiYSAlcCwgYiAlcCwgYmxlbiAlenUsIGxlbiAlenUpXG4iLCBvdXQsIG91dF9zaXplLAorCQkgIGtleSwgX24sIGEsIGIsIGJsZW4sIGxlbik7CisKKwl0Zm1fY2JjID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiY2JjKGFlcykiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbV9jYmMpKSB7CisJCXJlc3VsdCA9IFBUUl9FUlIodGZtX2NiYyk7CisJCXByaW50ayhLRVJOX0VSUiAiRTogY2FuJ3QgbG9hZCBDQkMoQUVTKTogJWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJZ290byBlcnJvcl9hbGxvY19jYmM7CisJfQorCXJlc3VsdCA9IGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbV9jYmMsIGtleSwgMTYpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRTogY2FuJ3Qgc2V0IENCQyBrZXk6ICVkXG4iLCAoaW50KXJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc2V0a2V5X2NiYzsKKwl9CisKKwl0Zm1fYWVzID0gY3J5cHRvX2FsbG9jX2NpcGhlcigiYWVzIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm1fYWVzKSkgeworCQlyZXN1bHQgPSBQVFJfRVJSKHRmbV9hZXMpOworCQlwcmludGsoS0VSTl9FUlIgIkU6IGNhbid0IGxvYWQgQUVTOiAlZFxuIiwgKGludClyZXN1bHQpOworCQlnb3RvIGVycm9yX2FsbG9jX2FlczsKKwl9CisJcmVzdWx0ID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtX2Flcywga2V5LCAxNik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFOiBjYW4ndCBzZXQgQUVTIGtleTogJWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJZ290byBlcnJvcl9zZXRrZXlfYWVzOworCX0KKworCWZvciAoYml0ciA9IDA7IGJpdHIgPCAobGVuICsgNjMpIC8gNjQ7IGJpdHIrKykgeworCQlzZm5fbGUgPSBjcHVfdG9fbGU2NChzZm4rKyk7CisJCW1lbWNweSgmbi5zZm4sICZzZm5fbGUsIHNpemVvZihuLnNmbikpOwkvKiBuLnNmbisrLi4uICovCisJCXJlc3VsdCA9IHd1c2JfY2NtX21hYyh0Zm1fY2JjLCB0Zm1fYWVzLCBvdXQgKyBieXRlcywKKwkJCQkgICAgICAmbiwgYSwgYiwgYmxlbik7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBlcnJvcl9jY21fbWFjOworCQlieXRlcyArPSByZXN1bHQ7CisJfQorCXJlc3VsdCA9IGJ5dGVzOworZXJyb3JfY2NtX21hYzoKK2Vycm9yX3NldGtleV9hZXM6CisJY3J5cHRvX2ZyZWVfY2lwaGVyKHRmbV9hZXMpOworZXJyb3JfYWxsb2NfYWVzOgorZXJyb3Jfc2V0a2V5X2NiYzoKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIodGZtX2NiYyk7CitlcnJvcl9hbGxvY19jYmM6CisJZF9mbmVuZCgzLCBOVUxMLCAiKG91dCAlcCwgb3V0X3NpemUgJXp1LCBrZXkgJXAsIF9uICVwLCAiCisJCSJhICVwLCBiICVwLCBibGVuICV6dSwgbGVuICV6dSkgPSAlZFxuIiwgb3V0LCBvdXRfc2l6ZSwKKwkJa2V5LCBfbiwgYSwgYiwgYmxlbiwgbGVuLCAoaW50KWJ5dGVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBXVVNCMS4wW0EuMl0gdGVzdCB2ZWN0b3JzICovCitzdGF0aWMgY29uc3QgdTggc3R2X2hzbWljX2tleVsxNl0gPSB7CisJMHg0YiwgMHg3OSwgMHhhMywgMHhjZiwgMHhlNSwgMHg1MywgMHgyMywgMHg5ZCwKKwkweGQ3LCAweGMxLCAweDZkLCAweDFjLCAweDJkLCAweGFiLCAweDZkLCAweDNmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFlc19jY21fbm9uY2Ugc3R2X2hzbWljX24gPSB7CisJLnNmbiA9IHsgMCB9LAorCS50a2lkID0geyAweDc2LCAweDk4LCAweDAxLCAgfSwKKwkuZGVzdF9hZGRyID0geyAuZGF0YSA9IHsgMHhiZSwgMHgwMCB9IH0sCisJCS5zcmNfYWRkciA9IHsgLmRhdGEgPSB7IDB4NzYsIDB4OTggfSB9LAorfTsKKworLyoKKyAqIE91dC1vZi1iYW5kIE1JQyBHZW5lcmF0aW9uIHZlcmlmaWNhdGlvbiBjb2RlCisgKgorICovCitzdGF0aWMgaW50IHd1c2Jfb29iX21pY192ZXJpZnkodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCXU4IG1pY1s4XTsKKwkvKiBXVVNCMS4wW0EuMl0gdGVzdCB2ZWN0b3JzCisJICoKKwkgKiBOZWVkIHRvIGtlZXAgaXQgaW4gdGhlIGxvY2FsIHN0YWNrIGFzIEdDQyA0LjEuM3NvbWV0aGluZworCSAqIG1lc3NlcyB1cCBhbmQgZ2VuZXJhdGVzIG5vaXNlLgorCSAqLworCXN0cnVjdCB1c2JfaGFuZHNoYWtlIHN0dl9oc21pY19ocyA9IHsKKwkJLmJNZXNzYWdlTnVtYmVyID0gMiwKKwkJLmJTdGF0dXMgCT0gMDAsCisJCS50VEtJRCAJCT0geyAweDc2LCAweDk4LCAweDAxIH0sCisJCS5iUmVzZXJ2ZWQgCT0gMDAsCisJCS5DRElEIAkJPSB7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsCisJCQkJICAgIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsCisJCQkJICAgIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YgfSwKKwkJLm5vbmNlCSAJPSB7IDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsCisJCQkJICAgIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsCisJCQkJICAgIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYgfSwKKwkJLk1JQwkgCT0geyAweDc1LCAweDZhLCAweDk3LCAweDUxLCAweDBjLCAweDhjLAorCQkJCSAgICAweDE0LCAweDdiIH0gLAorCX07CisJc2l6ZV90IGhzX3NpemU7CisKKwlyZXN1bHQgPSB3dXNiX29vYl9taWMobWljLCBzdHZfaHNtaWNfa2V5LCAmc3R2X2hzbWljX24sICZzdHZfaHNtaWNfaHMpOworCWlmIChyZXN1bHQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIkU6IFdVU0IgT09CIE1JQyB0ZXN0OiBmYWlsZWQ6ICVkXG4iLCByZXN1bHQpOworCWVsc2UgaWYgKG1lbWNtcChzdHZfaHNtaWNfaHMuTUlDLCBtaWMsIHNpemVvZihtaWMpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkU6IE9PQiBNSUMgdGVzdDogIgorCQkgICAgICAgIm1pc21hdGNoIGJldHdlZW4gTUlDIHJlc3VsdCBhbmQgV1VTQjEuMFtBMl1cbiIpOworCQloc19zaXplID0gc2l6ZW9mKHN0dl9oc21pY19ocykgLSBzaXplb2Yoc3R2X2hzbWljX2hzLk1JQyk7CisJCXByaW50ayhLRVJOX0VSUiAiRTogSGFuZHNoYWtlMiBpbjogKCV6dSBieXRlcylcbiIsIGhzX3NpemUpOworCQlkdW1wX2J5dGVzKE5VTEwsICZzdHZfaHNtaWNfaHMsIGhzX3NpemUpOworCQlwcmludGsoS0VSTl9FUlIgIkU6IENDTSBOb25jZSBpbjogKCV6dSBieXRlcylcbiIsCisJCSAgICAgICBzaXplb2Yoc3R2X2hzbWljX24pKTsKKwkJZHVtcF9ieXRlcyhOVUxMLCAmc3R2X2hzbWljX24sIHNpemVvZihzdHZfaHNtaWNfbikpOworCQlwcmludGsoS0VSTl9FUlIgIkU6IE1JQyBvdXQ6XG4iKTsKKwkJZHVtcF9ieXRlcyhOVUxMLCBtaWMsIHNpemVvZihtaWMpKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFOiBNSUMgb3V0IChmcm9tIFdVU0IxLjBbQS4yXSk6XG4iKTsKKwkJZHVtcF9ieXRlcyhOVUxMLCBzdHZfaHNtaWNfaHMuTUlDLCBzaXplb2Yoc3R2X2hzbWljX2hzLk1JQykpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZQorCQlyZXN1bHQgPSAwOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUZXN0IHZlY3RvcnMgZm9yIEtleSBkZXJpdmF0aW9uCisgKgorICogVGhlc2UgY29tZSBmcm9tIFdVU0IxLjBbNi41LjFdLCB0aGUgdmVjdG9ycyBpbiBXVVNCMS4wW0EuMV0KKyAqIChlcnJhdGEgY29ycmVjdGVkIGluIDIwMDUvMDcpLgorICovCitzdGF0aWMgY29uc3QgdTggc3R2X2tleV9hMVsxNl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDQpKSkgPSB7CisJMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NywKKwkweDc4LCAweDY5LCAweDVhLCAweDRiLCAweDNjLCAweDJkLCAweDFlLCAweDBmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFlc19jY21fbm9uY2Ugc3R2X2tleWR2dF9uX2ExID0geworCS5zZm4gPSB7IDAgfSwKKwkudGtpZCA9IHsgMHg3NiwgMHg5OCwgMHgwMSwgIH0sCisJLmRlc3RfYWRkciA9IHsgLmRhdGEgPSB7IDB4YmUsIDB4MDAgfSB9LAorCS5zcmNfYWRkciA9IHsgLmRhdGEgPSB7IDB4NzYsIDB4OTggfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3dXNiX2tleWR2dF9vdXQgc3R2X2tleWR2dF9vdXRfYTEgPSB7CisJLmtjayA9IHsKKwkJMHg0YiwgMHg3OSwgMHhhMywgMHhjZiwgMHhlNSwgMHg1MywgMHgyMywgMHg5ZCwKKwkJMHhkNywgMHhjMSwgMHg2ZCwgMHgxYywgMHgyZCwgMHhhYiwgMHg2ZCwgMHgzZgorCX0sCisJLnB0ayA9IHsKKwkJMHhjOCwgMHg3MCwgMHg2MiwgMHg4MiwgMHhiNiwgMHg3YywgMHhlOSwgMHgwNiwKKwkJMHg3YiwgMHhjNSwgMHgyNSwgMHg2OSwgMHhmMiwgMHgzNiwgMHg2MSwgMHgyZAorCX0KK307CisKKy8qCisgKiBQZXJmb3JtYSBhIHRlc3QgdG8gbWFrZSBzdXJlIHdlIG1hdGNoIHRoZSB2ZWN0b3JzIGRlZmluZWQgaW4KKyAqIFdVU0IxLjBbQS4xXShFcnJhdGEyMDA2LzEyKQorICovCitzdGF0aWMgaW50IHd1c2Jfa2V5X2Rlcml2ZV92ZXJpZnkodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgd3VzYl9rZXlkdnRfb3V0IGtleWR2dF9vdXQ7CisJLyogVGhlc2UgY29tZSBmcm9tIFdVU0IxLjBbQS4xXSArIDIwMDYvMTIgZXJyYXRhCisJICogTk9URTogY2FuJ3QgbWFrZSB0aGlzIGNvbnN0IG9yIGdsb2JhbCAtLSBzb21laG93IGl0IHNlZW1zCisJICogICAgICAgdGhlIHNjYXR0ZXJsaXN0cyBmb3IgY3J5cHRvIGdldCBjb25mdXNlZCBhbmQgd2UgZ2V0CisJICogICAgICAgYmFkIGRhdGEuIFRoZXJlIGlzIG5vIGRvYyBvbiB0aGlzLi4uICovCisJc3RydWN0IHd1c2Jfa2V5ZHZ0X2luIHN0dl9rZXlkdnRfaW5fYTEgPSB7CisJCS5obm9uY2UgPSB7CisJCQkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorCQkJMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZgorCQl9LAorCQkuZG5vbmNlID0geworCQkJMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywKKwkJCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYKKwkJfQorCX07CisKKwlyZXN1bHQgPSB3dXNiX2tleV9kZXJpdmUoJmtleWR2dF9vdXQsIHN0dl9rZXlfYTEsICZzdHZfa2V5ZHZ0X25fYTEsCisJCQkJICZzdHZfa2V5ZHZ0X2luX2ExKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJFOiBXVVNCIGtleSBkZXJpdmF0aW9uIHRlc3Q6ICIKKwkJICAgICAgICJkZXJpdmF0aW9uIGZhaWxlZDogJWRcbiIsIHJlc3VsdCk7CisJaWYgKG1lbWNtcCgmc3R2X2tleWR2dF9vdXRfYTEsICZrZXlkdnRfb3V0LCBzaXplb2Yoa2V5ZHZ0X291dCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRTogV1VTQiBrZXkgZGVyaXZhdGlvbiB0ZXN0OiAiCisJCSAgICAgICAibWlzbWF0Y2ggYmV0d2VlbiBrZXkgZGVyaXZhdGlvbiByZXN1bHQgIgorCQkgICAgICAgImFuZCBXVVNCMS4wW0ExXSBFcnJhdGEgMjAwNi8xMlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiRToga2V5ZHZ0IGluOiBrZXkgKCV6dSBieXRlcylcbiIsCisJCSAgICAgICBzaXplb2Yoc3R2X2tleV9hMSkpOworCQlkdW1wX2J5dGVzKE5VTEwsIHN0dl9rZXlfYTEsIHNpemVvZihzdHZfa2V5X2ExKSk7CisJCXByaW50ayhLRVJOX0VSUiAiRToga2V5ZHZ0IGluOiBub25jZSAoJXp1IGJ5dGVzKVxuIiwKKwkJICAgICAgIHNpemVvZihzdHZfa2V5ZHZ0X25fYTEpKTsKKwkJZHVtcF9ieXRlcyhOVUxMLCAmc3R2X2tleWR2dF9uX2ExLCBzaXplb2Yoc3R2X2tleWR2dF9uX2ExKSk7CisJCXByaW50ayhLRVJOX0VSUiAiRToga2V5ZHZ0IGluOiBobm9uY2UgJiBkbm9uY2UgKCV6dSBieXRlcylcbiIsCisJCSAgICAgICBzaXplb2Yoc3R2X2tleWR2dF9pbl9hMSkpOworCQlkdW1wX2J5dGVzKE5VTEwsICZzdHZfa2V5ZHZ0X2luX2ExLCBzaXplb2Yoc3R2X2tleWR2dF9pbl9hMSkpOworCQlwcmludGsoS0VSTl9FUlIgIkU6IGtleWR2dCBvdXQ6IEtDS1xuIik7CisJCWR1bXBfYnl0ZXMoTlVMTCwgJmtleWR2dF9vdXQua2NrLCBzaXplb2Yoa2V5ZHZ0X291dC5rY2spKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFOiBrZXlkdnQgb3V0OiBQVEtcbiIpOworCQlkdW1wX2J5dGVzKE5VTEwsICZrZXlkdnRfb3V0LnB0aywgc2l6ZW9mKGtleWR2dF9vdXQucHRrKSk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlCisJCXJlc3VsdCA9IDA7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY3J5cHRvIHN5c3RlbQorICoKKyAqIEZJWE1FOiB3ZSBkbyBub3RoaW5nIG5vdywgb3RoZXIgdGhhbiB2ZXJpZnlpbmcuIExhdGVyIG9uIHdlJ2xsCisgKiBjYWNoZSB0aGUgZW5jcnlwdGlvbiBzdHVmZiwgc28gdGhhdCdzIHdoeSB3ZSBoYXZlIGEgc2VwYXJhdGUgaW5pdC4KKyAqLworaW50IHd1c2JfY3J5cHRvX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gd3VzYl9rZXlfZGVyaXZlX3ZlcmlmeSgpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJldHVybiB3dXNiX29vYl9taWNfdmVyaWZ5KCk7Cit9CisKK3ZvaWQgd3VzYl9jcnlwdG9fZXhpdCh2b2lkKQoreworCS8qIEZJWE1FOiBmcmVlIGNhY2hlZCBjcnlwdG8gdHJhbnNmb3JtcyAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2LXN5c2ZzLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXYtc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODk3YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2LXN5c2ZzLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBXVVNCIGRldmljZXMKKyAqIHN5c2ZzIGJpbmRpbmdzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogR2V0IHRoZW0gb3V0IG9mIHRoZSB3YXkuLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSAid3VzYmhjLmgiCisKKyN1bmRlZiBEX0xPQ0FMCisjZGVmaW5lIERfTE9DQUwgNAorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCitzdGF0aWMgc3NpemVfdCB3dXNiX2Rpc2Nvbm5lY3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYzsKKwl1bnNpZ25lZCBjb21tYW5kOworCXU4IHBvcnRfaWR4OworCisJaWYgKHNzY2FuZihidWYsICIldSIsICZjb21tYW5kKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY29tbWFuZCA9PSAwKQorCQlyZXR1cm4gc2l6ZTsKKwl1c2JfZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCXd1c2JoYyA9IHd1c2JoY19nZXRfYnlfdXNiX2Rldih1c2JfZGV2KTsKKwlpZiAod3VzYmhjID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJcG9ydF9pZHggPSB3dXNiX3BvcnRfbm9fdG9faWR4KHVzYl9kZXYtPnBvcnRudW0pOworCV9fd3VzYmhjX2Rldl9kaXNhYmxlKHd1c2JoYywgcG9ydF9pZHgpOworCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJd3VzYmhjX3B1dCh3dXNiaGMpOworCXJldHVybiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSKHd1c2JfZGlzY29ubmVjdCwgMDIwMCwgTlVMTCwgd3VzYl9kaXNjb25uZWN0X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3Qgd3VzYl9jZGlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCisJd3VzYl9kZXYgPSB3dXNiX2Rldl9nZXRfYnlfdXNiX2Rldih0b191c2JfZGV2aWNlKGRldikpOworCWlmICh3dXNiX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXN1bHQgPSBja2hkaWRfcHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAmd3VzYl9kZXYtPmNkaWQpOworCXN0cmNhdChidWYsICJcbiIpOworCXd1c2JfZGV2X3B1dCh3dXNiX2Rldik7CisJcmV0dXJuIHJlc3VsdCArIDE7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIod3VzYl9jZGlkLCAwNDQ0LCB3dXNiX2NkaWRfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHd1c2JfY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYzsKKwlzdHJ1Y3Qgd3VzYl9ja2hkaWQgY2s7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLAorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICIKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeFxuIiwKKwkJCSZjay5kYXRhWzBdICwgJmNrLmRhdGFbMV0sCisJCQkmY2suZGF0YVsyXSAsICZjay5kYXRhWzNdLAorCQkJJmNrLmRhdGFbNF0gLCAmY2suZGF0YVs1XSwKKwkJCSZjay5kYXRhWzZdICwgJmNrLmRhdGFbN10sCisJCQkmY2suZGF0YVs4XSAsICZjay5kYXRhWzldLAorCQkJJmNrLmRhdGFbMTBdLCAmY2suZGF0YVsxMV0sCisJCQkmY2suZGF0YVsxMl0sICZjay5kYXRhWzEzXSwKKwkJCSZjay5kYXRhWzE0XSwgJmNrLmRhdGFbMTVdKTsKKwlpZiAocmVzdWx0ICE9IDE2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVzYl9kZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJd3VzYmhjID0gd3VzYmhjX2dldF9ieV91c2JfZGV2KHVzYl9kZXYpOworCWlmICh3dXNiaGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmVzdWx0ID0gd3VzYl9kZXZfNHdheV9oYW5kc2hha2Uod3VzYmhjLCB1c2JfZGV2LT53dXNiX2RldiwgJmNrKTsKKwltZW1zZXQoJmNrLCAwLCBzaXplb2YoY2spKTsKKwl3dXNiaGNfcHV0KHd1c2JoYyk7CisJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSKHd1c2JfY2ssIDAyMDAsIE5VTEwsIHd1c2JfY2tfc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqd3VzYl9kZXZfYXR0cnNbXSA9IHsKKwkJJmRldl9hdHRyX3d1c2JfZGlzY29ubmVjdC5hdHRyLAorCQkmZGV2X2F0dHJfd3VzYl9jZGlkLmF0dHIsCisJCSZkZXZfYXR0cl93dXNiX2NrLmF0dHIsCisJCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB3dXNiX2Rldl9hdHRyX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwJLyogd2Ugd2FudCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IHd1c2JfZGV2X2F0dHJzLAorfTsKKworaW50IHd1c2JfZGV2X3N5c2ZzX2FkZChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQkgICAgICAgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwlpbnQgcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ1c2JfZGV2LT5kZXYua29iaiwKKwkJCQkJJnd1c2JfZGV2X2F0dHJfZ3JvdXApOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIFdVU0ItZGV2IGF0dHJpYnV0ZXM6ICVkXG4iLAorCQkJcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHd1c2JfZGV2X3N5c2ZzX3JtKHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB3dXNiX2Rldi0+dXNiX2RldjsKKwlpZiAodXNiX2RldikKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZ1c2JfZGV2LT5kZXYua29iaiwgJnd1c2JfZGV2X2F0dHJfZ3JvdXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NWQ3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKQEAgLTAsMCArMSwxMjk3IEBACisvKgorICogV1VTQiBXaXJlIEFkYXB0ZXI6IENvbnRyb2wvRGF0YSBTdHJlYW1pbmcgSW50ZXJmYWNlIChXVVNCWzhdKQorICogRGV2aWNlIENvbm5lY3QgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICogRklYTUU6IHRoaXMgZmlsZSBuZWVkcyB0byBiZSBicm9rZW4gdXAsIGl0J3MgZ3Jvd24gdG9vIGJpZworICoKKyAqCisgKiBXVVNCMS4wWzcuMSwgNy41LjEsIF0KKyAqCisgKiBXVVNCIGRldmljZSBjb25uZWN0aW9uIGlzIGtpbmQgb2YgbWVzc3kuIFNvbWUgYmFja2dyb3VuZDoKKyAqCisgKiAgICAgV2hlbiBhIGRldmljZSB3YW50cyB0byBjb25uZWN0IGl0IHNjYW5zIHRoZSBVV0IgcmFkaW8gY2hhbm5lbHMKKyAqICAgICBsb29raW5nIGZvciBhIFdVU0IgQ2hhbm5lbDsgYSBXVVNCIGNoYW5uZWwgaXMgZGVmaW5lZCBieSBNTUNzCisgKiAgICAgKE1pY3JvIE1hbmFnZWQgQ29tbWFuZHMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCkgW3NlZQorICogICAgIERlc2lnbi1vdmVydmlldyBmb3IgbW9yZSBvbiB0aGlzXSAuCisgKgorICogU28sIGRldmljZSBzY2FucyB0aGUgcmFkaW8sIGZpbmRzIE1NQ3MgYW5kIHRodXMgYSBob3N0IGFuZCBjaGVja3MKKyAqIHdoZW4gdGhlIG5leHQgRE5UUyBpcy4gSXQgc2VuZHMgYSBEZXZpY2UgTm90aWZpY2F0aW9uIENvbm5lY3QKKyAqIChETl9Db25uZWN0KTsgdGhlIGhvc3QgcGlja3MgaXQgdXAgKHRocm91Z2ggbmVwLmMgYW5kIG5vdGlmLmMsIGVuZHMKKyAqIHVwIGluIHd1c2JfZGV2Y29ubmVjdF9hY2soKSwgd2hpY2ggY3JlYXRlcyBhIHd1c2JfZGV2IHN0cnVjdHVyZSBpbgorICogd3VzYmhjLT5wb3J0W3BvcnRfbnVtYmVyXS53dXNiX2RldiksIGFzc2lnbnMgYW4gdW5hdXRoIGFkZHJlc3MKKyAqIHRvIHRoZSBkZXZpY2UgKHRoaXMgbWVhbnMgZnJvbSAweDgwIHRvIDB4ZmUpIGFuZCBzZW5kcywgaW4gdGhlIE1NQworICogYSBDb25uZWN0IEFjayBJbmZvcm1hdGlvbiBFbGVtZW50IChDb25uQWNrIElFKS4KKyAqCisgKiBTbyBub3cgdGhlIGRldmljZSBub3cgaGFzIGEgV1VTQiBhZGRyZXNzLiBGcm9tIG5vdyBvbiwgd2UgdXNlCisgKiB0aGF0IHRvIHRhbGsgdG8gaXQgaW4gdGhlIFJQaXBlcy4KKyAqCisgKiBBU1NVTVBUSU9OUzoKKyAqCisgKiAgLSBXZSB1c2UgdGhlIHRoZSBhcyBkZXZpY2UgYWRkcmVzcyB0aGUgcG9ydCBudW1iZXIgd2hlcmUgaXQgaXMKKyAqICAgIGNvbm5lY3RlZCAocG9ydCAwIGRvZXNuJ3QgZXhpc3QpLiBGb3IgdW5hdXRoLCBpdCBpcyAxMjggKyB0aGF0LgorICoKKyAqIFJPQURNQVA6CisgKgorICogICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxvZ2ljIGZvciBkb2luZyB0aGF0LS1lbnRyeSBwb2ludHM6CisgKgorICogICB3dXNiX2RldmNvbm5lY3RfYWNrKCkgICAgICBBY2sgYSBkZXZpY2UgdW50aWwgX2Fja2VkKCkgY2FsbGVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgYnkgbm90aWYuYzp3dXNiX2hhbmRsZV9kbl9jb25uZWN0KCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBhIEROX0Nvbm5lY3QgaXMgcmVjZWl2ZWQuCisgKgorICogICB3dXNiaGNfZGV2Y29ubmVjdF9hdXRoKCkgICBDYWxsZWQgYnkgcmguYzp3dXNiaGNfcmhfcG9ydF9yZXNldCgpIHdoZW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9pbmcgdGhlIGRldmljZSBjb25uZWN0IHNlcXVlbmNlLgorICoKKyAqICAgICB3dXNiX2RldmNvbm5lY3RfYWNrZWQoKSAgQWNrIGRvbmUsIHJlbGVhc2UgcmVzb3VyY2VzLgorICoKKyAqICAgd3VzYl9oYW5kbGVfZG5fYWxpdmUoKSAgICAgQ2FsbGVkIGJ5IG5vdGlmLmM6d3VzYl9oYW5kbGVfZG4oKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvY2Vzc2luZyBhIEROX0FsaXZlIHBvbmcgZnJvbSBhIGRldmljZS4KKyAqCisgKiAgIHd1c2JfaGFuZGxlX2RuX2Rpc2Nvbm5lY3QoKUNhbGxlZCBieSBub3RpZi5jOnd1c2JfaGFuZGxlX2RuKCkgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhIGRpc2NvbmVuY3QgcmVxdWVzdCBmcm9tIGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLgorICoKKyAqICAgd3VzYl9kZXZfcmVzZXQoKSAgICAgICAgICAgQ2FsbGVkIGJ5IHJoLmM6d3VzYmhjX3JoX3BvcnRfcmVzZXQoKSB3aGVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0dGluZyBhIGRldmljZS4KKyAqCisgKiAgIF9fd3VzYl9kZXZfZGlzYWJsZSgpICAgICAgIENhbGxlZCBieSByaC5jOnd1c2JoY19yaF9jbGVhcl9wb3J0X2ZlYXQoKSB3aGVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGluZyBhIHBvcnQuCisgKgorICogICB3dXNiX2RldmNvbm5lY3RfY3JlYXRlKCkgICBDYWxsZWQgd2hlbiBjcmVhdGluZyB0aGUgaG9zdCBieQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYy5jOnd1c2JoY19jcmVhdGUoKS4KKyAqCisgKiAgIHd1c2JfZGV2Y29ubmVjdF9kZXN0cm95KCkgIENsZWFudXAgY2FsbGVkIHJlbW92aW5nIHRoZSBob3N0LiBDYWxsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgbGMuYzp3dXNiaGNfZGVzdHJveSgpLgorICoKKyAqICAgRWFjaCBXaXJlbGVzcyBVU0IgaG9zdCBtYWludGFpbnMgYSBsaXN0IG9mIEROX0Nvbm5lY3QgcmVxdWVzdHMKKyAqICAgKGFjdHVhbGx5IHdlIG1haW50YWluIGEgbGlzdCBvZiBwZW5kaW5nIENvbm5lY3QgQWNrcywgdGhlCisgKiAgIHd1c2JoYy0+Y2FfbGlzdCkuCisgKgorICogTElGRSBDWUNMRSBPRiBwb3J0LT53dXNiX2RldgorICoKKyAqICAgQmVmb3JlIHRoZSBAd3VzYmhjIHN0cnVjdHVyZSBwdXQoKXMgdGhlIHJlZmVyZW5jZSBpdCBvd25zIGZvcgorICogICBwb3J0LT53dXNiX2RldiBbYW5kIGNsZWFuIHRoZSB3dXNiX2RldiBwb2ludGVyXSwgaXQgbmVlZHMgdG8KKyAqICAgbG9jayBAd3VzYmhjLT5tdXRleC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSAid3VzYmhjLmgiCisKKyN1bmRlZiBEX0xPQ0FMCisjZGVmaW5lIERfTE9DQUwgMQorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCitzdGF0aWMgdm9pZCB3dXNiaGNfZGV2Y29ubmVjdF9hY2tlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3N0YXRpYyB2b2lkIHd1c2JfZGV2X2ZyZWUoc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwlpZiAod3VzYl9kZXYpIHsKKwkJa2ZyZWUod3VzYl9kZXYtPnNldF9ndGtfcmVxKTsKKwkJdXNiX2ZyZWVfdXJiKHd1c2JfZGV2LT5zZXRfZ3RrX3VyYik7CisJCWtmcmVlKHd1c2JfZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2X2FsbG9jKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisKKwl3dXNiX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCp3dXNiX2RldiksIEdGUF9LRVJORUwpOworCWlmICh3dXNiX2RldiA9PSBOVUxMKQorCQlnb3RvIGVycjsKKworCXd1c2JfZGV2LT53dXNiaGMgPSB3dXNiaGM7CisKKwlJTklUX1dPUksoJnd1c2JfZGV2LT5kZXZjb25uZWN0X2Fja2VkX3dvcmssIHd1c2JoY19kZXZjb25uZWN0X2Fja2VkX3dvcmspOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAodXJiID09IE5VTEwpCisJCWdvdG8gZXJyOworCisJcmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmIChyZXEgPT0gTlVMTCkKKwkJZ290byBlcnI7CisKKwlyZXEtPmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFOworCXJlcS0+YlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9ERVNDUklQVE9SOworCXJlcS0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0RUX0tFWSA8PCA4IHwgd3VzYmhjLT5ndGtfaW5kZXgpOworCXJlcS0+d0luZGV4ID0gMDsKKwlyZXEtPndMZW5ndGggPSBjcHVfdG9fbGUxNih3dXNiaGMtPmd0ay5kZXNjci5iTGVuZ3RoKTsKKworCXd1c2JfZGV2LT5zZXRfZ3RrX3VyYiA9IHVyYjsKKwl3dXNiX2Rldi0+c2V0X2d0a19yZXEgPSByZXE7CisKKwlyZXR1cm4gd3VzYl9kZXY7CitlcnI6CisJd3VzYl9kZXZfZnJlZSh3dXNiX2Rldik7CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoKKyAqIFVzaW5nIHRoZSBDb25uZWN0LUFjayBsaXN0LCBmaWxsIG91dCB0aGUgQHd1c2JoYyBDb25uZWN0LUFjayBXVVNCIElFCisgKiBwcm9wZXJseSBzbyB0aGF0IGl0IGNhbiBiZSBhZGRlZCB0byB0aGUgTU1DLgorICoKKyAqIFdlIGp1c3QgZ2V0IHRoZSBAd3VzYmhjLT5jYV9saXN0IGFuZCBmaWxsIG91dCB0aGUgZmlyc3QgZm91ciBvbmVzIG9yCisgKiBsZXNzIChwZXItc3BlYyBXVVNCMS4wWzcuNSwgYmVmb3JlIFQ3LTM4KS4gSWYgdGhlIENvbm5lY3RBY2sgV1VTQgorICogSUUgaXMgbm90IGFsbG9jYXRlZCwgd2UgYWxsb2MgaXQuCisgKgorICogQHd1c2JoYy0+bXV0ZXggbXVzdCBiZSB0YWtlbgorICovCitzdGF0aWMgdm9pZCB3dXNiaGNfZmlsbF9jYWNrX2llKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwl1bnNpZ25lZCBjbnQ7CisJc3RydWN0IHd1c2JfZGV2ICpkZXZfaXRyOworCXN0cnVjdCB3dWllX2Nvbm5lY3RfYWNrICpjYWNrX2llOworCisJY2Fja19pZSA9ICZ3dXNiaGMtPmNhY2tfaWU7CisJY250ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldl9pdHIsICZ3dXNiaGMtPmNhY2tfbGlzdCwgY2Fja19ub2RlKSB7CisJCWNhY2tfaWUtPmJsa1tjbnRdLkNESUQgPSBkZXZfaXRyLT5jZGlkOworCQljYWNrX2llLT5ibGtbY250XS5iRGV2aWNlQWRkcmVzcyA9IGRldl9pdHItPmFkZHI7CisJCWlmICgrK2NudCA+PSBXVUlFX0VMVF9NQVgpCisJCQlicmVhazsKKwl9CisJY2Fja19pZS0+aGRyLmJMZW5ndGggPSBzaXplb2YoY2Fja19pZS0+aGRyKQorCQkrIGNudCAqIHNpemVvZihjYWNrX2llLT5ibGtbMF0pOworfQorCisvKgorICogUmVnaXN0ZXIgYSBuZXcgZGV2aWNlIHRoYXQgd2FudHMgdG8gY29ubmVjdAorICoKKyAqIEEgbmV3IGRldmljZSB3YW50cyB0byBjb25uZWN0LCBzbyB3ZSBhZGQgaXQgdG8gdGhlIENvbm5lY3QtQWNrCisgKiBsaXN0LiBXZSBnaXZlIGl0IGFuIGFkZHJlc3MgaW4gdGhlIHVuYXV0aG9yaXplZCByYW5nZSAoYml0IDggc2V0KTsKKyAqIHVzZXIgc3BhY2Ugd2lsbCBoYXZlIHRvIGRyaXZlIGF1dGhvcml6YXRpb24gZnVydGhlciBvbi4KKyAqCisgKiBAZGV2X2FkZHI6IGFkZHJlc3MgdG8gdXNlIGZvciB0aGUgZGV2aWNlICh3aGljaCBpcyBhbHNvIHRoZSBwb3J0CisgKiAgICAgICAgICAgIG51bWJlcikuCisgKgorICogQHd1c2JoYy0+bXV0ZXggbXVzdCBiZSB0YWtlbgorICovCitzdGF0aWMgc3RydWN0IHd1c2JfZGV2ICp3dXNiaGNfY2Fja19hZGQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLAorCQkJCQlzdHJ1Y3Qgd3VzYl9kbl9jb25uZWN0ICpkbmMsCisJCQkJCWNvbnN0IGNoYXIgKnByX2NkaWQsIHU4IHBvcnRfaWR4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHd1c2JoYy0+ZGV2OworCXN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXY7CisJaW50IG5ld19jb25uZWN0aW9uID0gd3VzYl9kbl9jb25uZWN0X25ld19jb25uZWN0aW9uKGRuYyk7CisJdTggZGV2X2FkZHI7CisJaW50IHJlc3VsdDsKKworCS8qIElzIGl0IHJlZ2lzdGVyZWQgYWxyZWFkeT8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHd1c2JfZGV2LCAmd3VzYmhjLT5jYWNrX2xpc3QsIGNhY2tfbm9kZSkKKwkJaWYgKCFtZW1jbXAoJnd1c2JfZGV2LT5jZGlkLCAmZG5jLT5DRElELAorCQkJICAgIHNpemVvZih3dXNiX2Rldi0+Y2RpZCkpKQorCQkJcmV0dXJuIHd1c2JfZGV2OworCS8qIFdlIGRvbid0IGhhdmUgaXQsIGNyZWF0ZSBhbiBlbnRyeSwgcmVnaXN0ZXIgaXQgKi8KKwl3dXNiX2RldiA9IHd1c2JfZGV2X2FsbG9jKHd1c2JoYyk7CisJaWYgKHd1c2JfZGV2ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXd1c2JfZGV2X2luaXQod3VzYl9kZXYpOworCXd1c2JfZGV2LT5jZGlkID0gZG5jLT5DRElEOworCXd1c2JfZGV2LT5wb3J0X2lkeCA9IHBvcnRfaWR4OworCisJLyoKKwkgKiBEZXZpY2VzIGFyZSBhbHdheXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgY2x1c3RlciByZXNlcnZhdGlvbgorCSAqIGFuZCBzaW5jZSB0aGUgaGFyZHdhcmUgd2lsbCB0YWtlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCisJICogcGVyLWRldmljZSBhdmFpbGFiaWxpdHkgYW5kIHRoZSBjbHVzdGVyIHJlc2VydmF0aW9uLCB0aGUKKwkgKiBwZXItZGV2aWNlIGF2YWlsYWJpbGl0eSBjYW4gc2ltcGx5IGJlIHNldCB0byBhbHdheXMKKwkgKiBhdmFpbGFibGUuCisJICovCisJYml0bWFwX2ZpbGwod3VzYl9kZXYtPmF2YWlsYWJpbGl0eS5ibSwgVVdCX05VTV9NQVMpOworCisJLyogRklYTUU6IGhhbmRsZSByZWNvbm5lY3RzIGluc3RlYWQgb2YgYXNzdW1pbmcgY29ubmVjdHMgYXJlCisJICAgYWx3YXlzIG5ldy4gKi8KKwlpZiAoMSAmJiBuZXdfY29ubmVjdGlvbiA9PSAwKQorCQluZXdfY29ubmVjdGlvbiA9IDE7CisJaWYgKG5ld19jb25uZWN0aW9uKSB7CisJCWRldl9hZGRyID0gKHBvcnRfaWR4ICsgMikgfCBXVVNCX0RFVl9BRERSX1VOQVVUSDsKKworCQlkZXZfaW5mbyhkZXYsICJDb25uZWN0aW5nIG5ldyBXVVNCIGRldmljZSB0byBhZGRyZXNzICV1LCAiCisJCQkicG9ydCAldVxuIiwgZGV2X2FkZHIsIHBvcnRfaWR4KTsKKworCQlyZXN1bHQgPSB3dXNiX3NldF9kZXZfYWRkcih3dXNiaGMsIHd1c2JfZGV2LCBkZXZfYWRkcik7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXd1c2JfZGV2LT5lbnRyeV90cyA9IGppZmZpZXM7CisJbGlzdF9hZGRfdGFpbCgmd3VzYl9kZXYtPmNhY2tfbm9kZSwgJnd1c2JoYy0+Y2Fja19saXN0KTsKKwl3dXNiaGMtPmNhY2tfY291bnQrKzsKKwl3dXNiaGNfZmlsbF9jYWNrX2llKHd1c2JoYyk7CisJcmV0dXJuIHd1c2JfZGV2OworfQorCisvKgorICogUmVtb3ZlIGEgQ29ubmVjdC1BY2sgY29udGV4dCBlbnRyeSBmcm9tIHRoZSBIQ3MgdmlldworICoKKyAqIEB3dXNiaGMtPm11dGV4IG11c3QgYmUgdGFrZW4KKyAqLworc3RhdGljIHZvaWQgd3VzYmhjX2NhY2tfcm0oc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHd1c2JoYy0+ZGV2OworCWRfZm5zdGFydCgzLCBkZXYsICIod3VzYmhjICVwIHd1c2JfZGV2ICVwKVxuIiwgd3VzYmhjLCB3dXNiX2Rldik7CisJbGlzdF9kZWxfaW5pdCgmd3VzYl9kZXYtPmNhY2tfbm9kZSk7CisJd3VzYmhjLT5jYWNrX2NvdW50LS07CisJd3VzYmhjX2ZpbGxfY2Fja19pZSh3dXNiaGMpOworCWRfZm5lbmQoMywgZGV2LCAiKHd1c2JoYyAlcCB3dXNiX2RldiAlcCkgPSB2b2lkXG4iLCB3dXNiaGMsIHd1c2JfZGV2KTsKK30KKworLyoKKyAqIEB3dXNiaGMtPm11dGV4IG11c3QgYmUgdGFrZW4gKi8KK3N0YXRpYwordm9pZCB3dXNiaGNfZGV2Y29ubmVjdF9hY2tlZChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gd3VzYmhjLT5kZXY7CisJZF9mbnN0YXJ0KDMsIGRldiwgIih3dXNiaGMgJXAgd3VzYl9kZXYgJXApXG4iLCB3dXNiaGMsIHd1c2JfZGV2KTsKKwl3dXNiaGNfY2Fja19ybSh3dXNiaGMsIHd1c2JfZGV2KTsKKwlpZiAod3VzYmhjLT5jYWNrX2NvdW50KQorCQl3dXNiaGNfbW1jaWVfc2V0KHd1c2JoYywgMCwgMCwgJnd1c2JoYy0+Y2Fja19pZS5oZHIpOworCWVsc2UKKwkJd3VzYmhjX21tY2llX3JtKHd1c2JoYywgJnd1c2JoYy0+Y2Fja19pZS5oZHIpOworCWRfZm5lbmQoMywgZGV2LCAiKHd1c2JoYyAlcCB3dXNiX2RldiAlcCkgPSB2b2lkXG4iLCB3dXNiaGMsIHd1c2JfZGV2KTsKK30KKworc3RhdGljIHZvaWQgd3VzYmhjX2RldmNvbm5lY3RfYWNrZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3VzYl9kZXYsCisJCQkJCQkgZGV2Y29ubmVjdF9hY2tlZF93b3JrKTsKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB3dXNiX2Rldi0+d3VzYmhjOworCisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJd3VzYmhjX2RldmNvbm5lY3RfYWNrZWQod3VzYmhjLCB3dXNiX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKK30KKworLyoKKyAqIEFjayBhIGRldmljZSBmb3IgY29ubmVjdGlvbgorICoKKyAqIEZJWE1FOiBkb2NzCisgKgorICogQHByX2NkaWQ6CVByaW50YWJsZSBDRElELi4uaGV4IFVzZSBAZG5jLT5jZGlkIGZvciB0aGUgcmVhbCBkZWFsLgorICoKKyAqIFNvIHdlIGdldCB0aGUgY29ubmVjdCBhY2sgSUUgKG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkIGFscmVhZHkpLAorICogZmluZCBhbiBlbXB0eSBjb25uZWN0IGJsb2NrLCBhbiBlbXB0eSB2aXJ0dWFsIHBvcnQsIGNyZWF0ZSBhbgorICogYWRkcmVzcyB3aXRoIGl0IChzZWUgYmVsb3cpLCBtYWtlIGl0IGFuIHVuYXV0aCBhZGRyIFtiaXQgNyBzZXRdIGFuZAorICogc2V0IHRoZSBNTUMuCisgKgorICogQWRkcmVzc2VzOiBiZWNhdXNlIFdVU0IgaG9zdHMgaGF2ZSBubyBkb3duc3RyZWFtIGh1YnMsIHdlIGNhbiBkbyBhCisgKiAgICAgICAgICAgIDE6MSBtYXBwaW5nIGJldHdlZW4gJ3BvcnQgbnVtYmVyJyBhbmQgZGV2aWNlCisgKiAgICAgICAgICAgIGFkZHJlc3MuIFRoaXMgc2ltcGxpZmllcyBtYW55IHRoaW5ncywgYXMgZHVyaW5nIHRoaXMKKyAqICAgICAgICAgICAgaW5pdGlhbCBjb25uZWN0IHBoYXNlIHRoZSBVU0Igc3RhY2sgaGFzIG5vIGtub2xlZGdlIG9mCisgKiAgICAgICAgICAgIHRoZSBkZXZpY2UgYW5kIGhhc24ndCBhc3NpZ25lZCBhbiBhZGRyZXNzIHlldC0td2Uga25vdworICogICAgICAgICAgICBVU0IncyBjaG9vc2VfYWRkcmVzcygpIHdpbGwgdXNlIHRoZSBzYW1lIGV1cmlzdGljcyB3ZQorICogICAgICAgICAgICB1c2UgaGVyZSwgc28gd2UgY2FuIGFzc3VtZSB3aGljaCBhZGRyZXNzIHdpbGwgYmUgYXNzaWduZWQuCisgKgorICogICAgICAgICAgICBVU0Igc3RhY2sgYWx3YXlzIGFzc2lnbnMgYWRkcmVzcyAxIHRvIHRoZSByb290IGh1Yiwgc28KKyAqICAgICAgICAgICAgdG8gdGhlIHBvcnQgbnVtYmVyIHdlIGFkZCAyICh0aHVzIHZpcnR1YWwgcG9ydCAjMCBpcworICogICAgICAgICAgICBhZGRyICMyKS4KKyAqCisgKiBAd3VzYmhjIHNoYWxsIGJlIHJlZmVyZW5jZWQKKyAqLworc3RhdGljCit2b2lkIHd1c2JoY19kZXZjb25uZWN0X2FjayhzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHN0cnVjdCB3dXNiX2RuX2Nvbm5lY3QgKmRuYywKKwkJCSAgIGNvbnN0IGNoYXIgKnByX2NkaWQpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCXN0cnVjdCB3dXNiX3BvcnQgKnBvcnQ7CisJdW5zaWduZWQgaWR4LCBkZXZudW07CisKKwlkX2Zuc3RhcnQoMywgZGV2LCAiKCVwLCAlcCwgJXMpXG4iLCB3dXNiaGMsIGRuYywgcHJfY2RpZCk7CisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisKKwkvKiBDaGVjayB3ZSBhcmUgbm90IGhhbmRsaW5nIGl0IGFscmVhZHkgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHd1c2JoYy0+cG9ydHNfbWF4OyBpZHgrKykgeworCQlwb3J0ID0gd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIGlkeCk7CisJCWlmIChwb3J0LT53dXNiX2RldgorCQkgICAgJiYgbWVtY21wKCZkbmMtPkNESUQsICZwb3J0LT53dXNiX2Rldi0+Y2RpZCwgc2l6ZW9mKGRuYy0+Q0RJRCkpID09IDApCisJCQlnb3RvIGVycm9yX3VubG9jazsKKwl9CisJLyogTG9vayB1cCB0aG9zZSBmYWtlIHBvcnRzIHdlIGhhdmUgZm9yIGEgZnJlZSBvbmUgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHd1c2JoYy0+cG9ydHNfbWF4OyBpZHgrKykgeworCQlwb3J0ID0gd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIGlkeCk7CisJCWlmICgocG9ydC0+c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9QT1dFUikKKwkJICAgICYmICEocG9ydC0+c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaWR4ID49IHd1c2JoYy0+cG9ydHNfbWF4KSB7CisJCWRldl9lcnIoZGV2LCAiSG9zdCBjb250cm9sbGVyIGNhbid0IGNvbm5lY3QgbW9yZSBkZXZpY2VzICIKKwkJCSIoJXUgYWxyZWFkeSBjb25uZWN0ZWQpOyBkZXZpY2UgJXMgcmVqZWN0ZWRcbiIsCisJCQl3dXNiaGMtPnBvcnRzX21heCwgcHJfY2RpZCk7CisJCS8qIE5PVEU6IHdlIGNvdWxkIHNlbmQgYSBXVUlFX0Rpc2Nvbm5lY3QgaGVyZSwgYnV0IHdlIGhhdmVuJ3QKKwkJICogICAgICAgZXZlbnQgYWNrZWQsIHNvIHRoZSBkZXZpY2Ugd2lsbCBldmVudHVhbGx5IHRpbWVvdXQgdGhlCisJCSAqICAgICAgIGNvbm5lY3Rpb24sIHJpZ2h0PyAqLworCQlnb3RvIGVycm9yX3VubG9jazsKKwl9CisKKwlkZXZudW0gPSBpZHggKyAyOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSB1c2luZyBubyBjcnlwdG8gb24gdGhhdCAidmlydHVhbCBwb3J0IiAqLworCXd1c2JoYy0+c2V0X3B0ayh3dXNiaGMsIGlkeCwgMCwgTlVMTCwgMCk7CisKKwkvKiBHcmFiIGEgZmlsbGVkIGluIENvbm5lY3QtQWNrIGNvbnRleHQsIGZpbGwgb3V0IHRoZQorCSAqIENvbm5lY3QtQWNrIFdpcmVsZXNzIFVTQiBJRSwgc2V0IHRoZSBNTUMgKi8KKwl3dXNiX2RldiA9IHd1c2JoY19jYWNrX2FkZCh3dXNiaGMsIGRuYywgcHJfY2RpZCwgaWR4KTsKKwlpZiAod3VzYl9kZXYgPT0gTlVMTCkKKwkJZ290byBlcnJvcl91bmxvY2s7CisJcmVzdWx0ID0gd3VzYmhjX21tY2llX3NldCh3dXNiaGMsIDAsIDAsICZ3dXNiaGMtPmNhY2tfaWUuaGRyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl91bmxvY2s7CisJLyogR2l2ZSB0aGUgZGV2aWNlIGF0IGxlYXN0IDJtcyAoV1VTQjEuMFs3LjUuMXAzXSksIGxldCdzIGRvCisJICogdGhyZWUgZm9yIGEgZ29vZCBtZWFzdXJlICovCisJbXNsZWVwKDMpOworCXBvcnQtPnd1c2JfZGV2ID0gd3VzYl9kZXY7CisJcG9ydC0+c3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTjsKKwlwb3J0LT5jaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT047CisJcG9ydC0+cmVzZXRfY291bnQgPSAwOworCS8qIE5vdyB0aGUgcG9ydCBzdGF0dXMgY2hhbmdlZCB0byBjb25uZWN0ZWQ7IGtodWJkIHdpbGwKKwkgKiBwaWNrIHRoZSBjaGFuZ2UgdXAgYW5kIHRyeSB0byByZXNldCB0aGUgcG9ydCB0byBicmluZyBpdCB0bworCSAqIHRoZSBlbmFibGVkIHN0YXRlLS1zbyB0aGlzIHByb2Nlc3MgcmV0dXJucyB1cCB0byB0aGUgc3RhY2sKKwkgKiBhbmQgaXQgY2FsbHMgYmFjayBpbnRvIHd1c2JoY19yaF9wb3J0X3Jlc2V0KCkgd2hvIHdpbGwgY2FsbAorCSAqIGRldmNvbm5lY3RfYXV0aCgpLgorCSAqLworZXJyb3JfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJZF9mbmVuZCgzLCBkZXYsICIoJXAsICVwLCAlcykgPSB2b2lkXG4iLCB3dXNiaGMsIGRuYywgcHJfY2RpZCk7CisJcmV0dXJuOworCit9CisKKy8qCisgKiBEaXNjb25uZWN0IGEgV2lyZWxlc3MgVVNCIGRldmljZSBmcm9tIGl0cyBmYWtlIHBvcnQKKyAqCisgKiBNYXJrcyB0aGUgcG9ydCBhcyBkaXNjb25uZWN0ZWQgc28gdGhhdCBraHViZCBjYW4gcGljayB1cCB0aGUgY2hhbmdlCisgKiBhbmQgZHJvcHMgb3VyIGtub3dsZWRnZSBhYm91dCB0aGUgZGV2aWNlLgorICoKKyAqIEFzc3VtZXMgdGhlcmUgaXMgYSBkZXZpY2UgY29ubmVjdGVkCisgKgorICogQHBvcnRfaW5kZXg6IHplcm8gYmFzZWQgcG9ydCBudW1iZXIKKyAqCisgKiBOT1RFOiBAd3VzYmhjLT5tdXRleCBpcyBsb2NrZWQKKyAqCisgKiBXQVJOSU5HOiBGcm9tIGhlcmUgaXQgaXMgbm90IHZlcnkgc2FmZSB0byBhY2Nlc3MgYW55dGhpbmcgaGFuZ2luZyBvZmYKKyAqCSAgICB3dXNiX2RldgorICovCitzdGF0aWMgdm9pZCBfX3d1c2JoY19kZXZfZGlzY29ubmVjdChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsCisJCQkJICAgIHN0cnVjdCB3dXNiX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gd3VzYmhjLT5kZXY7CisJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldiA9IHBvcnQtPnd1c2JfZGV2OworCisJZF9mbnN0YXJ0KDMsIGRldiwgIih3dXNiaGMgJXAsIHBvcnQgJXApXG4iLCB3dXNiaGMsIHBvcnQpOworCXBvcnQtPnN0YXR1cyAmPSB+KFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiB8IFVTQl9QT1JUX1NUQVRfRU5BQkxFCisJCQkgIHwgVVNCX1BPUlRfU1RBVF9TVVNQRU5EIHwgVVNCX1BPUlRfU1RBVF9SRVNFVAorCQkJICB8IFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEIHwgVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEKTsKKwlwb3J0LT5jaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04gfCBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFOworCWlmICh3dXNiX2RldikgeworCQlpZiAoIWxpc3RfZW1wdHkoJnd1c2JfZGV2LT5jYWNrX25vZGUpKQorCQkJbGlzdF9kZWxfaW5pdCgmd3VzYl9kZXYtPmNhY2tfbm9kZSk7CisJCS8qIEZvciB0aGUgb25lIGluIGNhY2tfYWRkKCkgKi8KKwkJd3VzYl9kZXZfcHV0KHd1c2JfZGV2KTsKKwl9CisJcG9ydC0+d3VzYl9kZXYgPSBOVUxMOworCS8qIGRvbid0IHJlc2V0IHRoZSByZXNldF9jb3VudCB0byB6ZXJvIG9yIHd1c2JoY19yaF9wb3J0X3Jlc2V0IHdpbGwgZ2V0CisJICogY29uZnVzZWQhIFdlIG9ubHkgcmVzZXQgdG8gemVybyB3aGVuIHdlIGNvbm5lY3QgYSBuZXcgZGV2aWNlLgorCSAqLworCisJLyogQWZ0ZXIgYSBkZXZpY2UgZGlzY29ubmVjdHMsIGNoYW5nZSB0aGUgR1RLIChzZWUgW1dVU0JdCisJICogc2VjdGlvbiA2LjIuMTEuMikuICovCisJd3VzYmhjX2d0a19yZWtleSh3dXNiaGMpOworCisJZF9mbmVuZCgzLCBkZXYsICIod3VzYmhjICVwLCBwb3J0ICVwKSA9IHZvaWRcbiIsIHd1c2JoYywgcG9ydCk7CisJLyogVGhlIFdpcmVsZXNzIFVTQiBwYXJ0IGhhcyBmb3Jnb3R0ZW4gYWJvdXQgdGhlIGRldmljZSBhbHJlYWR5OyBub3cKKwkgKiBraHViZCdzIHRpbWVyIHdpbGwgcGljayB1cCB0aGUgZGlzY29ubmVjdGlvbiBhbmQgcmVtb3ZlIHRoZSBVU0IKKwkgKiBkZXZpY2UgZnJvbSB0aGUgc3lzdGVtCisJICovCit9CisKKy8qCisgKiBBdXRoZW50aWNhdGUgYSBkZXZpY2UgaW50byB0aGUgV1VTQiBDbHVzdGVyCisgKgorICogQ2FsbGVkIGZyb20gdGhlIFJvb3QgSHViIGNvZGUgKHJoLmM6d3VzYmhjX3JoX3BvcnRfcmVzZXQoKSkgd2hlbgorICogYXNraW5nIGZvciBhIHJlc2V0IG9uIGEgcG9ydCB0aGF0IGlzIG5vdCBlbmFibGVkIChpZTogZmlyc3QgY29ubmVjdAorICogb24gdGhlIHBvcnQpLgorICoKKyAqIFBlcmZvcm1zIHRoZSA0d2F5IGhhbmRzaGFrZSB0byBhbGxvdyB0aGUgZGV2aWNlIHRvIGNvbXVuaWNhdGUgdy8gdGhlCisgKiBXVVNCIENsdXN0ZXIgc2VjdXJlbHk7IG9uY2UgZG9uZSwgaXNzdWUgYSByZXF1ZXN0IHRvIHRoZSBkZXZpY2UgZm9yCisgKiBpdCB0byBjaGFuZ2UgdG8gYWRkcmVzcyAwLgorICoKKyAqIFRoaXMgbWltaWNzIHRoZSByZXNldCBzdGVwIG9mIFdpcmVkIFVTQiB0aGF0IG9uY2UgcmVzZXR0aW5nIGEKKyAqIGRldmljZSwgbGVhdmVzIHRoZSBwb3J0IGluIGVuYWJsZWQgc3RhdGUgYW5kIHRoZSBkZXYgd2l0aCB0aGUKKyAqIGRlZmF1bHQgYWRkcmVzcyAoMCkuCisgKgorICogV1VTQjEuMFs3LjEuMl0KKyAqCisgKiBAcG9ydF9pZHg6IHBvcnQgd2hlcmUgdGhlIGNoYW5nZSBoYXBwZW5lZC0tVGhpcyBpcyB0aGUgaW5kZXggaW50bworICogICAgICAgICAgICB0aGUgd3VzYmhjIHBvcnQgYXJyYXksIG5vdCB0aGUgVVNCIHBvcnQgbnVtYmVyLgorICovCitpbnQgd3VzYmhjX2RldmNvbm5lY3RfYXV0aChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IHBvcnRfaWR4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHd1c2JoYy0+ZGV2OworCXN0cnVjdCB3dXNiX3BvcnQgKnBvcnQgPSB3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgcG9ydF9pZHgpOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIiglcCwgJXUpXG4iLCB3dXNiaGMsIHBvcnRfaWR4KTsKKwlwb3J0LT5zdGF0dXMgJj0gflVTQl9QT1JUX1NUQVRfUkVTRVQ7CisJcG9ydC0+c3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfRU5BQkxFOworCXBvcnQtPmNoYW5nZSB8PSBVU0JfUE9SVF9TVEFUX0NfUkVTRVQgfCBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFOworCWRfZm5lbmQoMywgZGV2LCAiKCVwLCAldSkgPSAwXG4iLCB3dXNiaGMsIHBvcnRfaWR4KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlZnJlc2ggdGhlIGxpc3Qgb2Yga2VlcCBhbGl2ZXMgdG8gZW1pdCBpbiB0aGUgTU1DCisgKgorICogU29tZSBkZXZpY2VzIGRvbid0IHJlc3BvbmQgdG8ga2VlcCBhbGl2ZXMgdW5sZXNzIHRoZXkndmUgYmVlbgorICogYXV0aGVudGljYXRlZCwgc28gc2tpcCB1bmF1dGhlbnRpY2F0ZWQgZGV2aWNlcy4KKyAqCisgKiBXZSBvbmx5IHB1Ymxpc2ggdGhlIGZpcnN0IGZvdXIgZGV2aWNlcyB0aGF0IGhhdmUgYSBjb21pbmcgdGltZW91dAorICogY29uZGl0aW9uLiBUaGVuIHdoZW4gd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyB0aG9zZSwgd2UgZ28gZm9yIHRoZQorICogbmV4dCBvbmVzLiBXZSBpZ25vcmUgdGhlIG9uZXMgdGhhdCBoYXZlIHRpbWVkIG91dCBhbHJlYWR5ICh0aGV5J2xsCisgKiBiZSBwdXJnZWQpLgorICoKKyAqIFRoaXMgbWlnaHQgY2F1c2UgdGhlIGZpcnN0IGRldmljZXMgdG8gdGltZW91dCB0aGUgbGFzdCBkZXZpY2VzIGluCisgKiB0aGUgcG9ydCBhcnJheS4uLkZJWE1FOiBjb21lIHVwIHdpdGggYSBiZXR0ZXIgYWxnb3JpdGhtPworICoKKyAqIE5vdGUgd2UgY2FuJ3QgZG8gbXVjaCBhYm91dCBNTUMncyBvcHMgZXJyb3JzOyB3ZSBob3BlIG5leHQgcmVmcmVzaAorICogd2lsbCBraW5kIG9mIGhhbmRsZSBpdC4KKyAqCisgKiBOT1RFOiBAd3VzYmhjLT5tdXRleCBpcyBsb2NrZWQKKyAqLworc3RhdGljIHZvaWQgX193dXNiaGNfa2VlcF9hbGl2ZShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gd3VzYmhjLT5kZXY7CisJdW5zaWduZWQgY250OworCXN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXY7CisJc3RydWN0IHd1c2JfcG9ydCAqd3VzYl9wb3J0OworCXN0cnVjdCB3dWllX2tlZXBfYWxpdmUgKmllID0gJnd1c2JoYy0+a2VlcF9hbGl2ZV9pZTsKKwl1bnNpZ25lZCBrZWVwX2FsaXZlcywgb2xkX2tlZXBfYWxpdmVzOworCisJb2xkX2tlZXBfYWxpdmVzID0gaWUtPmhkci5iTGVuZ3RoIC0gc2l6ZW9mKGllLT5oZHIpOworCWtlZXBfYWxpdmVzID0gMDsKKwlmb3IgKGNudCA9IDA7CisJICAgICBrZWVwX2FsaXZlcyA8PSBXVUlFX0VMVF9NQVggJiYgY250IDwgd3VzYmhjLT5wb3J0c19tYXg7CisJICAgICBjbnQrKykgeworCQl1bnNpZ25lZCB0dCA9IG1zZWNzX3RvX2ppZmZpZXMod3VzYmhjLT50cnVzdF90aW1lb3V0KTsKKworCQl3dXNiX3BvcnQgPSB3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgY250KTsKKwkJd3VzYl9kZXYgPSB3dXNiX3BvcnQtPnd1c2JfZGV2OworCisJCWlmICh3dXNiX2RldiA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmICh3dXNiX2Rldi0+dXNiX2RldiA9PSBOVUxMIHx8ICF3dXNiX2Rldi0+dXNiX2Rldi0+YXV0aGVudGljYXRlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHd1c2JfZGV2LT5lbnRyeV90cyArIHR0KSkgeworCQkJZGV2X2VycihkZXYsICJLRUVQQUxJVkU6IGRldmljZSAldSB0aW1lZCBvdXRcbiIsCisJCQkJd3VzYl9kZXYtPmFkZHIpOworCQkJX193dXNiaGNfZGV2X2Rpc2Nvbm5lY3Qod3VzYmhjLCB3dXNiX3BvcnQpOworCQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgd3VzYl9kZXYtPmVudHJ5X3RzICsgdHQvMikpIHsKKwkJCS8qIEFwcHJvYWNoaW5nIHRpbWVvdXQgY3V0IG91dCwgbmVlZCB0byByZWZyZXNoICovCisJCQlpZS0+YkRldmljZUFkZHJlc3Nba2VlcF9hbGl2ZXMrK10gPSB3dXNiX2Rldi0+YWRkcjsKKwkJfQorCX0KKwlpZiAoa2VlcF9hbGl2ZXMgJiAweDEpCS8qIHBhZCB0byBldmVuIG51bWJlciAoW1dVU0JdIHNlY3Rpb24gNy41LjkpICovCisJCWllLT5iRGV2aWNlQWRkcmVzc1trZWVwX2FsaXZlcysrXSA9IDB4N2Y7CisJaWUtPmhkci5iTGVuZ3RoID0gc2l6ZW9mKGllLT5oZHIpICsKKwkJa2VlcF9hbGl2ZXMqc2l6ZW9mKGllLT5iRGV2aWNlQWRkcmVzc1swXSk7CisJaWYgKGtlZXBfYWxpdmVzID4gMCkKKwkJd3VzYmhjX21tY2llX3NldCh3dXNiaGMsIDEwLCA1LCAmaWUtPmhkcik7CisJZWxzZSBpZiAob2xkX2tlZXBfYWxpdmVzICE9IDApCisJCXd1c2JoY19tbWNpZV9ybSh3dXNiaGMsICZpZS0+aGRyKTsKK30KKworLyoKKyAqIERvIGEgcnVuIHRocm91Z2ggYWxsIGRldmljZXMgY2hlY2tpbmcgZm9yIHRpbWVvdXRzCisgKi8KK3N0YXRpYyB2b2lkIHd1c2JoY19rZWVwX2FsaXZlX3J1bihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0KKwkJY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPQorCQljb250YWluZXJfb2YoZHcsIHN0cnVjdCB3dXNiaGMsIGtlZXBfYWxpdmVfdGltZXIpOworCisJZF9mbnN0YXJ0KDUsIHd1c2JoYy0+ZGV2LCAiKHd1c2JoYyAlcClcbiIsIHd1c2JoYyk7CisJaWYgKHd1c2JoYy0+YWN0aXZlKSB7CisJCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOworCQlfX3d1c2JoY19rZWVwX2FsaXZlKHd1c2JoYyk7CisJCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayh3dXNiZCwgJnd1c2JoYy0+a2VlcF9hbGl2ZV90aW1lciwKKwkJCQkgICAod3VzYmhjLT50cnVzdF90aW1lb3V0ICogQ09ORklHX0haKS8xMDAwLzIpOworCX0KKwlkX2ZuZW5kKDUsIHd1c2JoYy0+ZGV2LCAiKHd1c2JoYyAlcCkgPSB2b2lkXG4iLCB3dXNiaGMpOworCXJldHVybjsKK30KKworLyoKKyAqIEZpbmQgdGhlIHd1c2JfZGV2IGZyb20gaXRzIGRldmljZSBhZGRyZXNzLgorICoKKyAqIFRoZSBkZXZpY2UgY2FuIGJlIGZvdW5kIGRpcmVjdGx5IGZyb20gdGhlIGFkZHJlc3MgKHNlZQorICogd3VzYl9jYWNrX2FkZCgpIGZvciB3aGVyZSB0aGUgZGV2aWNlIGFkZHJlc3MgaXMgc2V0IHRvIHBvcnRfaWR4CisgKiArMiksIGV4Y2VwdCB3aGVuIHRoZSBhZGRyZXNzIGlzIHplcm8uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JoY19maW5kX2Rldl9ieV9hZGRyKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggYWRkcikKK3sKKwlpbnQgcDsKKworCWlmIChhZGRyID09IDB4ZmYpIC8qIHVuY29ubmVjdGVkICovCisJCXJldHVybiBOVUxMOworCisJaWYgKGFkZHIgPiAwKSB7CisJCWludCBwb3J0ID0gKGFkZHIgJiB+MHg4MCkgLSAyOworCQlpZiAocG9ydCA8IDAgfHwgcG9ydCA+PSB3dXNiaGMtPnBvcnRzX21heCkKKwkJCXJldHVybiBOVUxMOworCQlyZXR1cm4gd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHBvcnQpLT53dXNiX2RldjsKKwl9CisKKwkvKiBMb29rIGZvciB0aGUgZGV2aWNlIHdpdGggYWRkcmVzcyAwLiAqLworCWZvciAocCA9IDA7IHAgPCB3dXNiaGMtPnBvcnRzX21heDsgcCsrKSB7CisJCXN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYgPSB3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgcCktPnd1c2JfZGV2OworCQlpZiAod3VzYl9kZXYgJiYgd3VzYl9kZXYtPmFkZHIgPT0gYWRkcikKKwkJCXJldHVybiB3dXNiX2RldjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBETl9BbGl2ZSBub3RpZmljYXRpb24gKFdVU0IxLjBbNy42LjFdKQorICoKKyAqIFRoaXMganVzdCB1cGRhdGVzIHRoZSBkZXZpY2UgYWN0aXZpdHkgdGltZXN0YW1wIGFuZCB0aGVuIHJlZnJlc2hlcworICogdGhlIGtlZXAgYWxpdmUgSUUuCisgKgorICogQHd1c2JoYyBzaGFsbCBiZSByZWZlcmVuY2VkIGFuZCB1bmxvY2tlZAorICovCitzdGF0aWMgdm9pZCB3dXNiaGNfaGFuZGxlX2RuX2FsaXZlKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKworCWRfcHJpbnRmKDIsIGRldiwgIkROIEFMSVZFOiBkZXZpY2UgMHglMDJ4IHBvbmdcbiIsIHd1c2JfZGV2LT5hZGRyKTsKKworCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOworCXd1c2JfZGV2LT5lbnRyeV90cyA9IGppZmZpZXM7CisJX193dXNiaGNfa2VlcF9hbGl2ZSh3dXNiaGMpOworCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBETl9Db25uZWN0IG5vdGlmaWNhdGlvbiAoV1VTQjEuMFs3LjYuMV0pCisgKgorICogQHd1c2JoYworICogQHBrdF9oZHIKKyAqIEBzaXplOiAgICBTaXplIG9mIHRoZSBidWZmZXIgd2hlcmUgdGhlIG5vdGlmaWNhdGlvbiByZXNpZGVzOyBpZiB0aGUKKyAqICAgICAgICAgICBub3RpZmljYXRpb24gZGF0YSBzdWdnZXN0cyB0aGVyZSBzaG91bGQgYmUgbW9yZSBkYXRhIHRoYW4KKyAqICAgICAgICAgICBhdmFpbGFibGUsIGFuIGVycm9yIHdpbGwgYmUgc2lnbmFsZWQgYW5kIHRoZSB3aG9sZSBidWZmZXIKKyAqICAgICAgICAgICBjb25zdW1lZC4KKyAqCisgKiBAd3VzYmhjLT5tdXRleCBzaGFsbCBiZSBoZWxkCisgKi8KK3N0YXRpYyB2b2lkIHd1c2JoY19oYW5kbGVfZG5fY29ubmVjdChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsCisJCQkJICAgICBzdHJ1Y3Qgd3VzYl9kbl9oZHIgKmRuX2hkciwKKwkJCQkgICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHd1c2JoYy0+ZGV2OworCXN0cnVjdCB3dXNiX2RuX2Nvbm5lY3QgKmRuYzsKKwljaGFyIHByX2NkaWRbV1VTQl9DS0hESURfU1RSU0laRV07CisJc3RhdGljIGNvbnN0IGNoYXIgKmJlYWNvbl9iZWhhdmlvdXJbXSA9IHsKKwkJInJlc2VydmVkIiwKKwkJInNlbGYtYmVhY29uIiwKKwkJImRpcmVjdGVkLWJlYWNvbiIsCisJCSJuby1iZWFjb24iCisJfTsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoJXAsICVwLCAlenUpXG4iLCB3dXNiaGMsIGRuX2hkciwgc2l6ZSk7CisJaWYgKHNpemUgPCBzaXplb2YoKmRuYykpIHsKKwkJZGV2X2VycihkZXYsICJETiBDT05ORUNUOiBzaG9ydCBub3RpZmljYXRpb24gKCV6dSA8ICV6dSlcbiIsCisJCQlzaXplLCBzaXplb2YoKmRuYykpOworCQlnb3RvIG91dDsKKwl9CisKKwlkbmMgPSBjb250YWluZXJfb2YoZG5faGRyLCBzdHJ1Y3Qgd3VzYl9kbl9jb25uZWN0LCBoZHIpOworCWNraGRpZF9wcmludGYocHJfY2RpZCwgc2l6ZW9mKHByX2NkaWQpLCAmZG5jLT5DRElEKTsKKwlkZXZfaW5mbyhkZXYsICJETiBDT05ORUNUOiBkZXZpY2UgJXMgQCAleCAoJXMpIHdhbnRzIHRvICVzXG4iLAorCQkgcHJfY2RpZCwKKwkJIHd1c2JfZG5fY29ubmVjdF9wcmV2X2Rldl9hZGRyKGRuYyksCisJCSBiZWFjb25fYmVoYXZpb3VyW3d1c2JfZG5fY29ubmVjdF9iZWFjb25fYmVoYXZpb3IoZG5jKV0sCisJCSB3dXNiX2RuX2Nvbm5lY3RfbmV3X2Nvbm5lY3Rpb24oZG5jKSA/ICJjb25uZWN0IiA6ICJyZWNvbm5lY3QiKTsKKwkvKiBBQ0sgdGhlIGNvbm5lY3QgKi8KKwl3dXNiaGNfZGV2Y29ubmVjdF9hY2sod3VzYmhjLCBkbmMsIHByX2NkaWQpOworb3V0OgorCWRfZm5lbmQoMywgZGV2LCAiKCVwLCAlcCwgJXp1KSA9IHZvaWRcbiIsCisJCXd1c2JoYywgZG5faGRyLCBzaXplKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBIYW5kbGUgYSBETl9EaXNjb25uZWN0IG5vdGlmaWNhdGlvbiAoV1VTQjEuMFs3LjYuMV0pCisgKgorICogRGV2aWNlIGlzIGdvaW5nIGRvd24gLS0gZG8gdGhlIGRpc2Nvbm5lY3QuCisgKgorICogQHd1c2JoYyBzaGFsbCBiZSByZWZlcmVuY2VkIGFuZCB1bmxvY2tlZAorICovCitzdGF0aWMgdm9pZCB3dXNiaGNfaGFuZGxlX2RuX2Rpc2Nvbm5lY3Qoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHd1c2JoYy0+ZGV2OworCisJZGV2X2luZm8oZGV2LCAiRE4gRElTQ09OTkVDVDogZGV2aWNlIDB4JTAyeCBnb2luZyBkb3duXG4iLCB3dXNiX2Rldi0+YWRkcik7CisKKwltdXRleF9sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwlfX3d1c2JoY19kZXZfZGlzY29ubmVjdCh3dXNiaGMsIHd1c2JfcG9ydF9ieV9pZHgod3VzYmhjLCB3dXNiX2Rldi0+cG9ydF9pZHgpKTsKKwltdXRleF91bmxvY2soJnd1c2JoYy0+bXV0ZXgpOworfQorCisvKgorICogUmVzZXQgYSBXVVNCIGRldmljZSBvbiBhIEhXQQorICoKKyAqIEB3dXNiaGMKKyAqIEBwb3J0X2lkeCAgIEluZGV4IG9mIHRoZSBwb3J0IHdoZXJlIHRoZSBkZXZpY2UgaXMKKyAqCisgKiBJbiBXaXJlbGVzcyBVU0IsIGEgcmVzZXQgaXMgbW9yZSBvciBsZXNzIGVxdWl2YWxlbnQgdG8gYSBmdWxsCisgKiBkaXNjb25uZWN0OyBzbyB3ZSBqdXN0IGRvIGEgZnVsbCBkaXNjb25uZWN0IGFuZCBzZW5kIHRoZSBkZXZpY2UgYQorICogRGV2aWNlIFJlc2V0IElFIChXVVNCMS4wWzcuNS4xMV0pIGdpdmluZyBpdCBhIGZldyBtaWxsaXNlY3MgKDYgTU1DcykuCisgKgorICogQHd1c2JoYyBzaG91bGQgYmUgcmVmY291bnRlZCBhbmQgdW5sb2NrZWQKKyAqLworaW50IHd1c2JoY19kZXZfcmVzZXQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBwb3J0X2lkeCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHd1c2JoYy0+ZGV2OworCXN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXY7CisJc3RydWN0IHd1aWVfcmVzZXQgKmllOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIiglcCwgJXUpXG4iLCB3dXNiaGMsIHBvcnRfaWR4KTsKKwltdXRleF9sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwlyZXN1bHQgPSAwOworCXd1c2JfZGV2ID0gd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHBvcnRfaWR4KS0+d3VzYl9kZXY7CisJaWYgKHd1c2JfZGV2ID09IE5VTEwpIHsKKwkJLyogcmVzZXQgbm8gZGV2aWNlPyBpZ25vcmUgKi8KKwkJZGV2X2RiZyhkZXYsICJSRVNFVDogbm8gZGV2aWNlIGF0IHBvcnQgJXUsIGlnbm9yaW5nXG4iLAorCQkJcG9ydF9pZHgpOworCQlnb3RvIGVycm9yX3VubG9jazsKKwl9CisJcmVzdWx0ID0gLUVOT01FTTsKKwlpZSA9IGt6YWxsb2Moc2l6ZW9mKCppZSksIEdGUF9LRVJORUwpOworCWlmIChpZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yX3VubG9jazsKKwlpZS0+aGRyLmJMZW5ndGggPSBzaXplb2YoaWUtPmhkcikgKyBzaXplb2YoaWUtPkNESUQpOworCWllLT5oZHIuYklFSWRlbnRpZmllciA9IFdVSUVfSURfUkVTRVRfREVWSUNFOworCWllLT5DRElEID0gd3VzYl9kZXYtPmNkaWQ7CisJcmVzdWx0ID0gd3VzYmhjX21tY2llX3NldCh3dXNiaGMsIDB4ZmYsIDYsICZpZS0+aGRyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlJFU0VUOiBjYW50J3Mgc2V0IE1NQzogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfa2ZyZWU7CisJfQorCV9fd3VzYmhjX2Rldl9kaXNjb25uZWN0KHd1c2JoYywgd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHBvcnRfaWR4KSk7CisKKwkvKiAxMjBtcywgaG9wZWZ1bGx5IDYgTU1DcyAoRklYTUUpICovCisJbXNsZWVwKDEyMCk7CisJd3VzYmhjX21tY2llX3JtKHd1c2JoYywgJmllLT5oZHIpOworZXJyb3Jfa2ZyZWU6CisJa2ZyZWUoaWUpOworZXJyb3JfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJZF9mbmVuZCgzLCBkZXYsICIoJXAsICV1KSA9ICVkXG4iLCB3dXNiaGMsIHBvcnRfaWR4LCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBEZXZpY2UgTm90aWZpY2F0aW9uIGNvbWluZyBhIGhvc3QKKyAqCisgKiBUaGUgRGV2aWNlIE5vdGlmaWNhdGlvbiBjb21lcyBmcm9tIGEgaG9zdCAoSFdBLCBEV0Egb3IgV0hDSSkKKyAqIHdyYXBwZWQgaW4gYSBzZXQgb2YgaGVhZGVycy4gU29tZWJvZHkgZWxzZSBoYXMgcGVlbGVkIG9mZiB0aG9zZQorICogaGVhZGVycyBmb3IgdXMgYW5kIHdlIGp1c3QgZ2V0IG9uZSBEZXZpY2UgTm90aWZpY2F0aW9ucy4KKyAqCisgKiBJbnZhbGlkIEROcyAoZS5nLiwgdG9vIHNob3J0KSBhcmUgZGlzY2FyZGVkLgorICoKKyAqIEB3dXNiaGMgc2hhbGwgYmUgcmVmZXJlbmNlZAorICoKKyAqIEZJWE1FUzoKKyAqICAtIGltcGxlbWVudCBwcmlvcml0aWVzIGFzIGluIFdVU0IxLjBbVGFibGUgNy01NV0/CisgKi8KK3ZvaWQgd3VzYmhjX2hhbmRsZV9kbihzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IHNyY2FkZHIsCisJCSAgICAgIHN0cnVjdCB3dXNiX2RuX2hkciAqZG5faGRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCisJZF9mbnN0YXJ0KDMsIGRldiwgIiglcCwgJXApXG4iLCB3dXNiaGMsIGRuX2hkcik7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgd3VzYl9kbl9oZHIpKSB7CisJCWRldl9lcnIoZGV2LCAiRE4gZGF0YSBzaG9ydGVyIHRoYW4gRE4gaGVhZGVyICglZCA8ICVkKVxuIiwKKwkJCShpbnQpc2l6ZSwgKGludClzaXplb2Yoc3RydWN0IHd1c2JfZG5faGRyKSk7CisJCWdvdG8gb3V0OworCX0KKworCXd1c2JfZGV2ID0gd3VzYmhjX2ZpbmRfZGV2X2J5X2FkZHIod3VzYmhjLCBzcmNhZGRyKTsKKwlpZiAod3VzYl9kZXYgPT0gTlVMTCAmJiBkbl9oZHItPmJUeXBlICE9IFdVU0JfRE5fQ09OTkVDVCkgeworCQlkZXZfZGJnKGRldiwgImlnbm9yaW5nIEROICVkIGZyb20gdW5jb25uZWN0ZWQgZGV2aWNlICUwMnhcbiIsCisJCQlkbl9oZHItPmJUeXBlLCBzcmNhZGRyKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChkbl9oZHItPmJUeXBlKSB7CisJY2FzZSBXVVNCX0ROX0NPTk5FQ1Q6CisJCXd1c2JoY19oYW5kbGVfZG5fY29ubmVjdCh3dXNiaGMsIGRuX2hkciwgc2l6ZSk7CisJCWJyZWFrOworCWNhc2UgV1VTQl9ETl9BTElWRToKKwkJd3VzYmhjX2hhbmRsZV9kbl9hbGl2ZSh3dXNiaGMsIHd1c2JfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBXVVNCX0ROX0RJU0NPTk5FQ1Q6CisJCXd1c2JoY19oYW5kbGVfZG5fZGlzY29ubmVjdCh3dXNiaGMsIHd1c2JfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBXVVNCX0ROX01BU0FWQUlMQ0hBTkdFRDoKKwljYXNlIFdVU0JfRE5fUldBS0U6CisJY2FzZSBXVVNCX0ROX1NMRUVQOgorCQkvKiBGSVhNRTogaGFuZGxlIHRoZXNlIEROcy4gKi8KKwkJYnJlYWs7CisJY2FzZSBXVVNCX0ROX0VQUkRZOgorCQkvKiBUaGUgaGFyZHdhcmUgaGFuZGxlcyB0aGVzZS4gKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oZGV2LCAidW5rbm93biBETiAldSAoJWQgb2N0ZXRzKSBmcm9tICV1XG4iLAorCQkJIGRuX2hkci0+YlR5cGUsIChpbnQpc2l6ZSwgc3JjYWRkcik7CisJfQorb3V0OgorCWRfZm5lbmQoMywgZGV2LCAiKCVwLCAlcCkgPSB2b2lkXG4iLCB3dXNiaGMsIGRuX2hkcik7CisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYmhjX2hhbmRsZV9kbik7CisKKy8qCisgKiBEaXNjb25uZWN0IGEgV1VTQiBkZXZpY2UgZnJvbSBhIHRoZSBjbHVzdGVyCisgKgorICogQHd1c2JoYworICogQHBvcnQgICAgIEZha2UgcG9ydCB3aGVyZSB0aGUgZGV2aWNlIGlzICh3dXNiaGMgaW5kZXgsIG5vdCBVU0IgcG9ydCBudW1iZXIpLgorICoKKyAqIEluIFdpcmVsZXNzIFVTQiwgYSBkaXNjb25uZWN0IGlzIGJhc2ljYWxseSB0ZWxsaW5nIHRoZSBkZXZpY2UgaGUgaXMKKyAqIGJlaW5nIGRpc2Nvbm5lY3RlZCBhbmQgZm9yZ2V0dGluZyBhYm91dCBoaW0uCisgKgorICogV2Ugc2VuZCB0aGUgZGV2aWNlIGEgRGV2aWNlIERpc2Nvbm5lY3QgSUUgKFdVU0IxLjBbNy41LjExXSkgZm9yIDEwMAorICogbXMgYW5kIHRoZW4ga2VlcCBnb2luZy4KKyAqCisgKiBXZSBkb24ndCBkbyBtdWNoIGluIGNhc2Ugb2YgZXJyb3I7IHdlIGFsd2F5cyBwcmV0ZW5kIHdlIGRpc2FibGVkCisgKiB0aGUgcG9ydCBhbmQgZGlzY29ubmVjdGVkIHRoZSBkZXZpY2UuIElmIHBoeXNpY2FsbHkgdGhlIHJlcXVlc3QKKyAqIGRpZG4ndCBnZXQgdGhlcmUgKG1hbnkgdGhpbmdzIGNhbiBmYWlsIGluIHRoZSB3YXkgdGhlcmUpLCB0aGUgc3RhY2sKKyAqIHdpbGwgcmVqZWN0IHRoZSBkZXZpY2UncyBjb21tdW5pY2F0aW9uIGF0dGVtcHRzLgorICoKKyAqIEB3dXNiaGMgc2hvdWxkIGJlIHJlZmNvdW50ZWQgYW5kIGxvY2tlZAorICovCit2b2lkIF9fd3VzYmhjX2Rldl9kaXNhYmxlKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggcG9ydF9pZHgpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCXN0cnVjdCB3dWllX2Rpc2Nvbm5lY3QgKmllOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIiglcCwgJXUpXG4iLCB3dXNiaGMsIHBvcnRfaWR4KTsKKwlyZXN1bHQgPSAwOworCXd1c2JfZGV2ID0gd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHBvcnRfaWR4KS0+d3VzYl9kZXY7CisJaWYgKHd1c2JfZGV2ID09IE5VTEwpIHsKKwkJLyogcmVzZXQgbm8gZGV2aWNlPyBpZ25vcmUgKi8KKwkJZGV2X2RiZyhkZXYsICJESVNDT05ORUNUOiBubyBkZXZpY2UgYXQgcG9ydCAldSwgaWdub3JpbmdcbiIsCisJCQlwb3J0X2lkeCk7CisJCWdvdG8gZXJyb3I7CisJfQorCV9fd3VzYmhjX2Rldl9kaXNjb25uZWN0KHd1c2JoYywgd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHBvcnRfaWR4KSk7CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCWllID0ga3phbGxvYyhzaXplb2YoKmllKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGllID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisJaWUtPmhkci5iTGVuZ3RoID0gc2l6ZW9mKCppZSk7CisJaWUtPmhkci5iSUVJZGVudGlmaWVyID0gV1VJRV9JRF9ERVZJQ0VfRElTQ09OTkVDVDsKKwlpZS0+YkRldmljZUFkZHJlc3MgPSB3dXNiX2Rldi0+YWRkcjsKKwlyZXN1bHQgPSB3dXNiaGNfbW1jaWVfc2V0KHd1c2JoYywgMCwgMCwgJmllLT5oZHIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRElTQ09OTkVDVDogY2FuJ3Qgc2V0IE1NQzogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfa2ZyZWU7CisJfQorCisJLyogMTIwbXMsIGhvcGVmdWxseSA2IE1NQ3MgKi8KKwltc2xlZXAoMTAwKTsKKwl3dXNiaGNfbW1jaWVfcm0od3VzYmhjLCAmaWUtPmhkcik7CitlcnJvcl9rZnJlZToKKwlrZnJlZShpZSk7CitlcnJvcjoKKwlkX2ZuZW5kKDMsIGRldiwgIiglcCwgJXUpID0gJWRcbiIsIHd1c2JoYywgcG9ydF9pZHgsIHJlc3VsdCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB3dXNiX2NhcF9kZXNjcl9wcmludGYoY29uc3QgdW5zaWduZWQgbGV2ZWwsIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCB1c2Jfd2lyZWxlc3NfY2FwX2Rlc2NyaXB0b3IgKndjZCkKK3sKKwlkX3ByaW50ZihsZXZlbCwgZGV2LAorCQkgIldVU0IgQ2FwYWJpbGl0eSBEZXNjcmlwdG9yXG4iCisJCSAiICBiRGV2Q2FwYWJpbGl0eVR5cGUgICAgICAgICAgMHglMDJ4XG4iCisJCSAiICBibUF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgMHglMDJ4XG4iCisJCSAiICB3UGh5UmF0ZXMgICAgICAgICAgICAgICAgICAgMHglMDR4XG4iCisJCSAiICBibVRGSVRYUG93ZXJJbmZvICAgICAgICAgICAgMHglMDJ4XG4iCisJCSAiICBibUZGSVRYUG93ZXJJbmZvICAgICAgICAgICAgMHglMDJ4XG4iCisJCSAiICBibUJhbmRHcm91cCAgICAgICAgICAgICAgICAgMHglMDR4XG4iCisJCSAiICBiUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgMHglMDJ4XG4iLAorCQkgd2NkLT5iRGV2Q2FwYWJpbGl0eVR5cGUsCisJCSB3Y2QtPmJtQXR0cmlidXRlcywKKwkJIGxlMTZfdG9fY3B1KHdjZC0+d1BIWVJhdGVzKSwKKwkJIHdjZC0+Ym1URklUWFBvd2VySW5mbywKKwkJIHdjZC0+Ym1GRklUWFBvd2VySW5mbywKKwkJIHdjZC0+Ym1CYW5kR3JvdXAsCisJCSB3Y2QtPmJSZXNlcnZlZCk7Cit9CisKKy8qCisgKiBXYWxrIG92ZXIgdGhlIEJPUyBkZXNjcmlwdG9yLCB2ZXJpZnkgYW5kIGdyb2sgaXQKKyAqCisgKiBAdXNiX2RldjogcmVmZXJlbmNlZAorICogQHd1c2JfZGV2OiByZWZlcmVuY2VkIGFuZCB1bmxvY2tlZAorICoKKyAqIFRoZSBCT1MgZGVzY3JpcHRvciBpcyBkZWZpbmVkIGF0IFdVU0IxLjBbNy40LjFdLCBhbmQgaXQgZGVmaW5lcyBhCisgKiAiZmxleGlibGUiIHdheSB0byB3cmFwIGFsbCBraW5kcyBvZiBkZXNjcmlwdG9ycyBpbnNpZGUgYW4gc3RhbmRhcmQKKyAqIGRlc2NyaXB0b3IgKHdvbmRlciB3aHkgdGhleSBkaWRuJ3QgdXNlIG5vcm1hbCBkZXNjcmlwdG9ycywKKyAqIGJ0dykuIE5vdCBsaWtlIHRoZXkgbGFjayBjb2RlLgorICoKKyAqIEF0IHRoZSBlbmQgd2UgZ28gdG8gbG9vayBmb3IgdGhlIFdVU0IgRGV2aWNlIENhcGFiaWxpdGllcworICogKFdVU0IxLjBbNy40LjEuMV0pIHRoYXQgaXMgd3JhcHBlZCBpbiBhIGRldmljZSBjYXBhYmlsaXR5IGRlc2NyaXB0b3IKKyAqIHRoYXQgaXMgcGFydCBvZiB0aGUgQk9TIGRlc2NyaXB0b3Igc2V0LiBUaGF0IHRlbGxzIHVzIHdoYXQgZG9lcyB0aGUKKyAqIGRldmljZSBzdXBwb3J0IChkdWFsIHJvbGUsIGJlYWNvbiB0eXBlLCBVV0IgUEhZIHJhdGVzKS4KKyAqLworc3RhdGljIGludCB3dXNiX2Rldl9ib3NfZ3JvayhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJCSAgICAgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldiwKKwkJCSAgICAgc3RydWN0IHVzYl9ib3NfZGVzY3JpcHRvciAqYm9zLCBzaXplX3QgZGVzY19zaXplKQoreworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7CisJdm9pZCAqaXRyLCAqdG9wOworCisJLyogV2FsayBvdmVyIEJPUyBjYXBhYmlsaXRpZXMsIHZlcmlmeSB0aGVtICovCisJaXRyID0gKHZvaWQgKilib3MgKyBzaXplb2YoKmJvcyk7CisJdG9wID0gaXRyICsgZGVzY19zaXplIC0gc2l6ZW9mKCpib3MpOworCXdoaWxlIChpdHIgPCB0b3ApIHsKKwkJc3RydWN0IHVzYl9kZXZfY2FwX2hlYWRlciAqY2FwX2hkciA9IGl0cjsKKwkJc2l6ZV90IGNhcF9zaXplOworCQl1OCBjYXBfdHlwZTsKKwkJaWYgKHRvcCAtIGl0ciA8IHNpemVvZigqY2FwX2hkcikpIHsKKwkJCWRldl9lcnIoZGV2LCAiRGV2aWNlIEJVRz8gcHJlbWF0dXJlIGVuZCBvZiBCT1MgaGVhZGVyICIKKwkJCQkiZGF0YSBbb2Zmc2V0IDB4JTAyeF06IG9ubHkgJXp1IGJ5dGVzIGxlZnRcbiIsCisJCQkJKGludCkoaXRyIC0gKHZvaWQgKilib3MpLCB0b3AgLSBpdHIpOworCQkJcmVzdWx0ID0gLUVOT1NQQzsKKwkJCWdvdG8gZXJyb3JfYmFkX2NhcDsKKwkJfQorCQljYXBfc2l6ZSA9IGNhcF9oZHItPmJMZW5ndGg7CisJCWNhcF90eXBlID0gY2FwX2hkci0+YkRldkNhcGFiaWxpdHlUeXBlOworCQlkX3ByaW50Zig0LCBkZXYsICJCT1MgQ2FwYWJpbGl0eTogMHglMDJ4ICglenUgYnl0ZXMpXG4iLAorCQkJIGNhcF90eXBlLCBjYXBfc2l6ZSk7CisJCWlmIChjYXBfc2l6ZSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChjYXBfc2l6ZSA+IHRvcCAtIGl0cikgeworCQkJZGV2X2VycihkZXYsICJEZXZpY2UgQlVHPyBwcmVtYXR1cmUgZW5kIG9mIEJPUyBkYXRhICIKKwkJCQkiW29mZnNldCAweCUwMnggY2FwICUwMnggJXp1IGJ5dGVzXTogIgorCQkJCSJvbmx5ICV6dSBieXRlcyBsZWZ0XG4iLAorCQkJCShpbnQpKGl0ciAtICh2b2lkICopYm9zKSwKKwkJCQljYXBfdHlwZSwgY2FwX3NpemUsIHRvcCAtIGl0cik7CisJCQlyZXN1bHQgPSAtRUJBREY7CisJCQlnb3RvIGVycm9yX2JhZF9jYXA7CisJCX0KKwkJZF9kdW1wKDMsIGRldiwgaXRyLCBjYXBfc2l6ZSk7CisJCXN3aXRjaCAoY2FwX3R5cGUpIHsKKwkJY2FzZSBVU0JfQ0FQX1RZUEVfV0lSRUxFU1NfVVNCOgorCQkJaWYgKGNhcF9zaXplICE9IHNpemVvZigqd3VzYl9kZXYtPnd1c2JfY2FwX2Rlc2NyKSkKKwkJCQlkZXZfZXJyKGRldiwgIkRldmljZSBCVUc/IFdVU0IgQ2FwYWJpbGl0eSAiCisJCQkJCSJkZXNjcmlwdG9yIGlzICV6dSBieXRlcyB2cyAlenUgIgorCQkJCQkibmVlZGVkXG4iLCBjYXBfc2l6ZSwKKwkJCQkJc2l6ZW9mKCp3dXNiX2Rldi0+d3VzYl9jYXBfZGVzY3IpKTsKKwkJCWVsc2UgeworCQkJCXd1c2JfZGV2LT53dXNiX2NhcF9kZXNjciA9IGl0cjsKKwkJCQl3dXNiX2NhcF9kZXNjcl9wcmludGYoMywgZGV2LCBpdHIpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGRldiwgIkJVRz8gVW5rbm93biBCT1MgY2FwYWJpbGl0eSAweCUwMnggIgorCQkJCSIoJXp1IGJ5dGVzKSBhdCBvZmZzZXQgMHglMDJ4XG4iLCBjYXBfdHlwZSwKKwkJCQljYXBfc2l6ZSwgKGludCkoaXRyIC0gKHZvaWQgKilib3MpKTsKKwkJfQorCQlpdHIgKz0gY2FwX3NpemU7CisJfQorCXJlc3VsdCA9IDA7CitlcnJvcl9iYWRfY2FwOgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBBZGQgaW5mb3JtYXRpb24gZnJvbSB0aGUgQk9TIGRlc2NyaXB0b3JzIHRvIHRoZSBkZXZpY2UKKyAqCisgKiBAdXNiX2RldjogcmVmZXJlbmNlZAorICogQHd1c2JfZGV2OiByZWZlcmVuY2VkIGFuZCB1bmxvY2tlZAorICoKKyAqIFNvIHdoYXQgd2UgZG8gaXMgd2UgYWxsb2MgYSBzcGFjZSBmb3IgdGhlIEJPUyBkZXNjcmlwdG9yIG9mIDY0CisgKiBieXRlczsgcmVhZCB0aGUgZmlyc3QgZm91ciBieXRlcyB3aGljaCBpbmNsdWRlIHRoZSB3VG90YWxMZW5ndGgKKyAqIGZpZWxkIChXVVNCMS4wW1Q3LTI2XSkgYW5kIGlmIGl0IGZpdHMgaW4gdGhvc2UgNjQgYnl0ZXMsIHJlYWQgdGhlCisgKiB3aG9sZSB0aGluZy4gSWYgbm90IHdlIHJlYWxsb2MgdG8gdGhhdCBzaXplLgorICoKKyAqIFRoZW4gd2UgY2FsbCB0aGUgZ3Jva2luZyBmdW5jdGlvbiwgdGhhdCB3aWxsIGZpbGwgdXAKKyAqIHd1c2JfZGV2LT53dXNiX2NhcF9kZXNjciwgd2hpY2ggaXMgd2hhdCB3ZSdsbCBuZWVkIGxhdGVyIG9uLgorICovCitzdGF0aWMgaW50IHd1c2JfZGV2X2Jvc19hZGQoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCQkgICAgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXNiX2Rldi0+ZGV2OworCXN0cnVjdCB1c2JfYm9zX2Rlc2NyaXB0b3IgKmJvczsKKwlzaXplX3QgYWxsb2Nfc2l6ZSA9IDMyLCBkZXNjX3NpemUgPSA0OworCisJYm9zID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYm9zID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfQk9TLCAwLCBib3MsIGRlc2Nfc2l6ZSk7CisJaWYgKHJlc3VsdCA8IDQpIHsKKwkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgQk9TIGRlc2NyaXB0b3Igb3IgdG9vIHNob3J0OiAlemRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX2dldF9kZXNjcmlwdG9yOworCX0KKwlkZXNjX3NpemUgPSBsZTE2X3RvX2NwdShib3MtPndUb3RhbExlbmd0aCk7CisJaWYgKGRlc2Nfc2l6ZSA+PSBhbGxvY19zaXplKSB7CisJCWtmcmVlKGJvcyk7CisJCWFsbG9jX3NpemUgPSBkZXNjX3NpemU7CisJCWJvcyA9IGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChib3MgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX0JPUywgMCwgYm9zLCBkZXNjX3NpemUpOworCWlmIChyZXN1bHQgPCAwIHx8IHJlc3VsdCAhPSBkZXNjX3NpemUpIHsKKwkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgIEJPUyBkZXNjcmlwdG9yIG9yIHRvbyBzaG9ydCAobmVlZCAiCisJCQkiJXp1IGJ5dGVzKTogJXpkXG4iLCBkZXNjX3NpemUsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3JfZ2V0X2Rlc2NyaXB0b3I7CisJfQorCWlmIChyZXN1bHQgPCBzaXplb2YoKmJvcykKKwkgICAgfHwgbGUxNl90b19jcHUoYm9zLT53VG90YWxMZW5ndGgpICE9IGRlc2Nfc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IGdldCAgQk9TIGRlc2NyaXB0b3Igb3IgdG9vIHNob3J0IChuZWVkICIKKwkJCSIlenUgYnl0ZXMpOiAlemRcbiIsIGRlc2Nfc2l6ZSwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9nZXRfZGVzY3JpcHRvcjsKKwl9CisJZF9wcmludGYoMiwgZGV2LCAiR290IEJPUyBkZXNjcmlwdG9yICV6ZCBieXRlcywgJXUgY2FwYWJpbGl0aWVzXG4iLAorCQkgcmVzdWx0LCBib3MtPmJOdW1EZXZpY2VDYXBzKTsKKwlkX2R1bXAoMiwgZGV2LCBib3MsIHJlc3VsdCk7CisJcmVzdWx0ID0gd3VzYl9kZXZfYm9zX2dyb2sodXNiX2Rldiwgd3VzYl9kZXYsIGJvcywgcmVzdWx0KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9iYWRfYm9zOworCXd1c2JfZGV2LT5ib3MgPSBib3M7CisJcmV0dXJuIDA7CisKK2Vycm9yX2JhZF9ib3M6CitlcnJvcl9nZXRfZGVzY3JpcHRvcjoKKwlrZnJlZShib3MpOworCXd1c2JfZGV2LT53dXNiX2NhcF9kZXNjciA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgd3VzYl9kZXZfYm9zX3JtKHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJa2ZyZWUod3VzYl9kZXYtPmJvcyk7CisJd3VzYl9kZXYtPnd1c2JfY2FwX2Rlc2NyID0gTlVMTDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3dpcmVsZXNzX2NhcF9kZXNjcmlwdG9yIHd1c2JfY2FwX2Rlc2NyX2RlZmF1bHQgPSB7CisJLmJMZW5ndGggPSBzaXplb2Yod3VzYl9jYXBfZGVzY3JfZGVmYXVsdCksCisJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9ERVZJQ0VfQ0FQQUJJTElUWSwKKwkuYkRldkNhcGFiaWxpdHlUeXBlID0gVVNCX0NBUF9UWVBFX1dJUkVMRVNTX1VTQiwKKworCS5ibUF0dHJpYnV0ZXMgPSBVU0JfV0lSRUxFU1NfQkVBQ09OX05PTkUsCisJLndQSFlSYXRlcyA9IGNwdV90b19sZTE2KFVTQl9XSVJFTEVTU19QSFlfNTMpLAorCS5ibVRGSVRYUG93ZXJJbmZvID0gMCwKKwkuYm1GRklUWFBvd2VySW5mbyA9IDAsCisJLmJtQmFuZEdyb3VwID0gY3B1X3RvX2xlMTYoMHgwMDAxKSwJLyogV1VTQjEuMFs3LjQuMV0gYm90dG9tICovCisJLmJSZXNlcnZlZCA9IDAKK307CisKKy8qCisgKiBVU0Igc3RhY2sncyBkZXZpY2UgYWRkaXRpb24gTm90aWZpZXIgQ2FsbGJhY2sKKyAqCisgKiBDYWxsZWQgZnJvbSBkcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGFkZGVkOyB3ZQorICogdXNlIHRoaXMgaG9vayB0byBwZXJmb3JtIGNlcnRhaW4gV1VTQiBzcGVjaWZpYyBzZXR1cCB3b3JrIG9uIHRoZQorICogbmV3IGRldmljZS4gQXMgd2VsbCwgaXQgaXMgdGhlIGZpcnN0IHRpbWUgd2UgY2FuIGNvbm5lY3QgdGhlCisgKiB3dXNiX2RldiBhbmQgdGhlIHVzYl9kZXYuIFNvIHdlIG5vdGUgaXQgZG93biBpbiB3dXNiX2RldiBhbmQgdGFrZSBhCisgKiByZWZlcmVuY2UgdGhhdCB3ZSdsbCBkcm9wLgorICoKKyAqIEZpcnN0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgaXMgYSBXVVNCIGRldmljZSAoZWxzZSB3ZQorICogaWdub3JlIGl0KS4gRm9yIHRoYXQgd2UgdXNlIHRoZSBzcGVlZCBzZXR0aW5nIChVU0JfU1BFRURfVkFSSUFCTEUpCisgKiBbRklYTUU6IG1heWJlIHdlJ2QgbmVlZCBzb21ldGhpbmcgbW9yZSBkZWZpbml0aXZlXS4gSWYgc28sIHdlIHRyYWNrCisgKiBpdCdzIHVzYl9idXNkIGFuZCBmcm9tIHRoZXJlLCB0aGUgV1VTQiBIQy4KKyAqCisgKiBCZWNhdXNlIGFsbCBXVVNCIEhDcyBhcmUgY29udGFpbmVkIGluIGEgJ3N0cnVjdCB3dXNiaGMnLCB2b2lsYSwgd2UKKyAqIGdldCB0aGUgd3VzYmhjIGZvciB0aGUgZGV2aWNlLgorICoKKyAqIFdlIGhhdmUgYSByZWZlcmVuY2Ugb24gQHVzYl9kZXYgKGFzIHdlIGFyZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBpdHMKKyAqIGVudW1lcmF0aW9uKS4KKyAqCisgKiBOT1RFOiBAdXNiX2RldiBsb2NrZWQKKyAqLworc3RhdGljIHZvaWQgd3VzYl9kZXZfYWRkX25jYihzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXNiX2Rldi0+ZGV2OworCXU4IHBvcnRfaWR4OworCisJaWYgKHVzYl9kZXYtPnd1c2IgPT0gMCB8fCB1c2JfZGV2LT5kZXZudW0gPT0gMSkKKwkJcmV0dXJuOwkJLyogc2tpcCBub24gd3VzYiBhbmQgd3VzYiBSSHMgKi8KKworCWRfZm5zdGFydCgzLCBkZXYsICIodXNiX2RldiAlcClcbiIsIHVzYl9kZXYpOworCisJd3VzYmhjID0gd3VzYmhjX2dldF9ieV91c2JfZGV2KHVzYl9kZXYpOworCWlmICh3dXNiaGMgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9ub2RldjsKKwltdXRleF9sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwl3dXNiX2RldiA9IF9fd3VzYl9kZXZfZ2V0X2J5X3VzYl9kZXYod3VzYmhjLCB1c2JfZGV2KTsKKwlwb3J0X2lkeCA9IHd1c2JfcG9ydF9ub190b19pZHgodXNiX2Rldi0+cG9ydG51bSk7CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwlpZiAod3VzYl9kZXYgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9ub2RldjsKKwl3dXNiX2Rldi0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KHVzYl9kZXYpOworCXVzYl9kZXYtPnd1c2JfZGV2ID0gd3VzYl9kZXZfZ2V0KHd1c2JfZGV2KTsKKwlyZXN1bHQgPSB3dXNiX2Rldl9zZWNfYWRkKHd1c2JoYywgdXNiX2Rldiwgd3VzYl9kZXYpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGVuYWJsZSBzZWN1cml0eTogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc2VjX2FkZDsKKwl9CisJLyogTm93IHF1ZXJ5IHRoZSBkZXZpY2UgZm9yIGl0J3MgQk9TIGFuZCBhdHRhY2ggaXQgdG8gd3VzYl9kZXYgKi8KKwlyZXN1bHQgPSB3dXNiX2Rldl9ib3NfYWRkKHVzYl9kZXYsIHd1c2JfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBnZXQgQk9TIGRlc2NyaXB0b3JzOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9ib3NfYWRkOworCX0KKwlyZXN1bHQgPSB3dXNiX2Rldl9zeXNmc19hZGQod3VzYmhjLCB1c2JfZGV2LCB3dXNiX2Rldik7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfYWRkX3N5c2ZzOworb3V0OgorCXd1c2JfZGV2X3B1dCh3dXNiX2Rldik7CisJd3VzYmhjX3B1dCh3dXNiaGMpOworZXJyb3Jfbm9kZXY6CisJZF9mbmVuZCgzLCBkZXYsICIodXNiX2RldiAlcCkgPSB2b2lkXG4iLCB1c2JfZGV2KTsKKwlyZXR1cm47CisKKwl3dXNiX2Rldl9zeXNmc19ybSh3dXNiX2Rldik7CitlcnJvcl9hZGRfc3lzZnM6CisJd3VzYl9kZXZfYm9zX3JtKHd1c2JfZGV2KTsKK2Vycm9yX2Jvc19hZGQ6CisJd3VzYl9kZXZfc2VjX3JtKHd1c2JfZGV2KTsKK2Vycm9yX3NlY19hZGQ6CisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJX193dXNiaGNfZGV2X2Rpc2Nvbm5lY3Qod3VzYmhjLCB3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgcG9ydF9pZHgpKTsKKwltdXRleF91bmxvY2soJnd1c2JoYy0+bXV0ZXgpOworCWdvdG8gb3V0OworfQorCisvKgorICogVW5kbyBhbGwgdGhlIHN0ZXBzIGRvbmUgYXQgY29ubmVjdGlvbiBieSB0aGUgbm90aWZpZXIgY2FsbGJhY2sKKyAqCisgKiBOT1RFOiBAdXNiX2RldiBsb2NrZWQKKyAqLworc3RhdGljIHZvaWQgd3VzYl9kZXZfcm1fbmNiKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQoreworCXN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYgPSB1c2JfZGV2LT53dXNiX2RldjsKKworCWlmICh1c2JfZGV2LT53dXNiID09IDAgfHwgdXNiX2Rldi0+ZGV2bnVtID09IDEpCisJCXJldHVybjsJCS8qIHNraXAgbm9uIHd1c2IgYW5kIHd1c2IgUkhzICovCisKKwl3dXNiX2Rldl9zeXNmc19ybSh3dXNiX2Rldik7CisJd3VzYl9kZXZfYm9zX3JtKHd1c2JfZGV2KTsKKwl3dXNiX2Rldl9zZWNfcm0od3VzYl9kZXYpOworCXd1c2JfZGV2LT51c2JfZGV2ID0gTlVMTDsKKwl1c2JfZGV2LT53dXNiX2RldiA9IE5VTEw7CisJd3VzYl9kZXZfcHV0KHd1c2JfZGV2KTsKKwl1c2JfcHV0X2Rldih1c2JfZGV2KTsKK30KKworLyoKKyAqIEhhbmRsZSBub3RpZmljYXRpb25zIGZyb20gdGhlIFVTQiBzdGFjayAobm90aWZpZXIgY2FsbCBiYWNrKQorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIFVTQiBzdGFjayBkb2VzIGEKKyAqIHVzYl97YnVzLGRldmljZX1fe2FkZCxyZW1vdmV9KCkgc28gd2UgY2FuIGRvIFdVU0Igc3BlY2lmaWMKKyAqIGhhbmRsaW5nLiBJdCBpcyBjYWxsZWQgd2l0aCBbZm9yIHRoZSBjYXNlIG9mCisgKiBVU0JfREVWSUNFX3tBREQsUkVNT1ZFfSB3aXRoIHRoZSB1c2JfZGV2IGxvY2tlZC4KKyAqLworaW50IHd1c2JfdXNiX25jYihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJIHZvaWQgKnByaXYpCit7CisJaW50IHJlc3VsdCA9IE5PVElGWV9PSzsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBVU0JfREVWSUNFX0FERDoKKwkJd3VzYl9kZXZfYWRkX25jYihwcml2KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfREVWSUNFX1JFTU9WRToKKwkJd3VzYl9kZXZfcm1fbmNiKHByaXYpOworCQlicmVhazsKKwljYXNlIFVTQl9CVVNfQUREOgorCQkvKiBpZ25vcmUgKGZvciBub3cpICovCisJY2FzZSBVU0JfQlVTX1JFTU9WRToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmVzdWx0ID0gTk9USUZZX0JBRDsKKwl9OworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gYSByZWZlcmVuY2VkIHd1c2JfZGV2IGdpdmVuIGEgQHd1c2JoYyBhbmQgQHVzYl9kZXYKKyAqLworc3RydWN0IHd1c2JfZGV2ICpfX3d1c2JfZGV2X2dldF9ieV91c2JfZGV2KHN0cnVjdCB3dXNiaGMgKnd1c2JoYywKKwkJCQkJICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpCit7CisJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldjsKKwl1OCBwb3J0X2lkeDsKKworCXBvcnRfaWR4ID0gd3VzYl9wb3J0X25vX3RvX2lkeCh1c2JfZGV2LT5wb3J0bnVtKTsKKwlCVUdfT04ocG9ydF9pZHggPiB3dXNiaGMtPnBvcnRzX21heCk7CisJd3VzYl9kZXYgPSB3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgcG9ydF9pZHgpLT53dXNiX2RldjsKKwlpZiAod3VzYl9kZXYgIT0gTlVMTCkJCS8qIG9wcywgZGV2aWNlIGlzIGdvbmUgKi8KKwkJd3VzYl9kZXZfZ2V0KHd1c2JfZGV2KTsKKwlyZXR1cm4gd3VzYl9kZXY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3d1c2JfZGV2X2dldF9ieV91c2JfZGV2KTsKKwordm9pZCB3dXNiX2Rldl9kZXN0cm95KHN0cnVjdCBrcmVmICpfd3VzYl9kZXYpCit7CisJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldgorCQk9IGNvbnRhaW5lcl9vZihfd3VzYl9kZXYsIHN0cnVjdCB3dXNiX2RldiwgcmVmY250KTsKKwlsaXN0X2RlbF9pbml0KCZ3dXNiX2Rldi0+Y2Fja19ub2RlKTsKKwl3dXNiX2Rldl9mcmVlKHd1c2JfZGV2KTsKKwlkX2ZuZW5kKDEsIE5VTEwsICIlcyAod3VzYl9kZXYgJXApID0gdm9pZFxuIiwgX19mdW5jX18sIHd1c2JfZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JfZGV2X2Rlc3Ryb3kpOworCisvKgorICogQ3JlYXRlIGFsbCB0aGUgZGV2aWNlIGNvbm5lY3QgaGFuZGxpbmcgaW5mcmFzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZGV2aWNlIGluZm8gYXJyYXksIENvbm5lY3QgQWNrbm93bGVkZ2VtZW50CisgKiAoY2FjaykgbGlzdHMsIGtlZXAtYWxpdmUgdGltZXJzIChhbmQgZGVsYXllZCB3b3JrIHRocmVhZCkuCisgKi8KK2ludCB3dXNiaGNfZGV2Y29ubmVjdF9jcmVhdGUoc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCWRfZm5zdGFydCgzLCB3dXNiaGMtPmRldiwgIih3dXNiaGMgJXApXG4iLCB3dXNiaGMpOworCisJd3VzYmhjLT5rZWVwX2FsaXZlX2llLmhkci5iSUVJZGVudGlmaWVyID0gV1VJRV9JRF9LRUVQX0FMSVZFOworCXd1c2JoYy0+a2VlcF9hbGl2ZV9pZS5oZHIuYkxlbmd0aCA9IHNpemVvZih3dXNiaGMtPmtlZXBfYWxpdmVfaWUuaGRyKTsKKwlJTklUX0RFTEFZRURfV09SSygmd3VzYmhjLT5rZWVwX2FsaXZlX3RpbWVyLCB3dXNiaGNfa2VlcF9hbGl2ZV9ydW4pOworCisJd3VzYmhjLT5jYWNrX2llLmhkci5iSUVJZGVudGlmaWVyID0gV1VJRV9JRF9DT05ORUNUQUNLOworCXd1c2JoYy0+Y2Fja19pZS5oZHIuYkxlbmd0aCA9IHNpemVvZih3dXNiaGMtPmNhY2tfaWUuaGRyKTsKKwlJTklUX0xJU1RfSEVBRCgmd3VzYmhjLT5jYWNrX2xpc3QpOworCisJZF9mbmVuZCgzLCB3dXNiaGMtPmRldiwgIih3dXNiaGMgJXApID0gdm9pZFxuIiwgd3VzYmhjKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyB0YWtlbiBieSB0aGUgZGV2Y29ubmVjdCBzdHVmZgorICovCit2b2lkIHd1c2JoY19kZXZjb25uZWN0X2Rlc3Ryb3koc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCWRfZm5zdGFydCgzLCB3dXNiaGMtPmRldiwgIih3dXNiaGMgJXApXG4iLCB3dXNiaGMpOworCWRfZm5lbmQoMywgd3VzYmhjLT5kZXYsICIod3VzYmhjICVwKSA9IHZvaWRcbiIsIHd1c2JoYyk7Cit9CisKKy8qCisgKiB3dXNiaGNfZGV2Y29ubmVjdF9zdGFydCAtIHN0YXJ0IGFjY2VwdGluZyBkZXZpY2UgY29ubmVjdGlvbnMKKyAqIEB3dXNiaGM6IHRoZSBXVVNCIEhDCisgKgorICogU2V0cyB0aGUgSG9zdCBJbmZvIElFIHRvIGFjY2VwdCBhbGwgbmV3IGNvbm5lY3Rpb25zLgorICoKKyAqIEZJWE1FOiBUaGlzIGFsc28gZW5hYmxlcyB0aGUga2VlcCBhbGl2ZXMgYnV0IHRoaXMgaXMgbm90IG5lY2Vzc2FyeQorICogdW50aWwgdGhlcmUgYXJlIGNvbm5lY3RlZCBhbmQgYXV0aGVudGljYXRlZCBkZXZpY2VzLgorICovCitpbnQgd3VzYmhjX2RldmNvbm5lY3Rfc3RhcnQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLAorCQkJICAgIGNvbnN0IHN0cnVjdCB3dXNiX2NraGRpZCAqY2hpZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKwlzdHJ1Y3Qgd3VpZV9ob3N0X2luZm8gKmhpOworCWludCByZXN1bHQ7CisKKwloaSA9IGt6YWxsb2Moc2l6ZW9mKCpoaSksIEdGUF9LRVJORUwpOworCWlmIChoaSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhpLT5oZHIuYkxlbmd0aCAgICAgICA9IHNpemVvZigqaGkpOworCWhpLT5oZHIuYklFSWRlbnRpZmllciA9IFdVSUVfSURfSE9TVF9JTkZPOworCWhpLT5hdHRyaWJ1dGVzICAgICAgICA9IGNwdV90b19sZTE2KCh3dXNiaGMtPnJzdi0+c3RyZWFtIDw8IDMpIHwgV1VJRV9ISV9DQVBfQUxMKTsKKwloaS0+Q0hJRCAgICAgICAgICAgICAgPSAqY2hpZDsKKwlyZXN1bHQgPSB3dXNiaGNfbW1jaWVfc2V0KHd1c2JoYywgMCwgMCwgJmhpLT5oZHIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGFkZCBIb3N0IEluZm8gTU1DSUU6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX21tY2llX3NldDsKKwl9CisJd3VzYmhjLT53dWllX2hvc3RfaW5mbyA9IGhpOworCisJcXVldWVfZGVsYXllZF93b3JrKHd1c2JkLCAmd3VzYmhjLT5rZWVwX2FsaXZlX3RpbWVyLAorCQkJICAgKHd1c2JoYy0+dHJ1c3RfdGltZW91dCpDT05GSUdfSFopLzEwMDAvMik7CisKKwlyZXR1cm4gMDsKKworZXJyb3JfbW1jaWVfc2V0OgorCWtmcmVlKGhpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogd3VzYmhjX2RldmNvbm5lY3Rfc3RvcCAtIHN0b3AgbWFuYWdpbmcgY29ubmVjdGVkIGRldmljZXMKKyAqIEB3dXNiaGM6IHRoZSBXVVNCIEhDCisgKgorICogUmVtb3ZlcyB0aGUgSG9zdCBJbmZvIElFIGFuZCBzdG9wcyB0aGUga2VlcCBhbGl2ZXMuCisgKgorICogRklYTUU6IHNob3VsZCB0aGlzIGRpc2Nvbm5lY3QgYWxsIGRldmljZXM/CisgKi8KK3ZvaWQgd3VzYmhjX2RldmNvbm5lY3Rfc3RvcChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dXNiaGMtPmtlZXBfYWxpdmVfdGltZXIpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnd1c2JoYy0+Y2Fja19saXN0KSk7CisKKwl3dXNiaGNfbW1jaWVfcm0od3VzYmhjLCAmd3VzYmhjLT53dWllX2hvc3RfaW5mby0+aGRyKTsKKwlrZnJlZSh3dXNiaGMtPnd1aWVfaG9zdF9pbmZvKTsKKwl3dXNiaGMtPnd1aWVfaG9zdF9pbmZvID0gTlVMTDsKK30KKworLyoKKyAqIHd1c2Jfc2V0X2Rldl9hZGRyIC0gc2V0IHRoZSBXVVNCIGRldmljZSBhZGRyZXNzIHVzZWQgYnkgdGhlIGhvc3QKKyAqIEB3dXNiaGM6IHRoZSBXVVNCIEhDIHRoZSBkZXZpY2UgaXMgY29ubmVjdCB0bworICogQHd1c2JfZGV2OiB0aGUgV1VTQiBkZXZpY2UKKyAqIEBhZGRyOiBuZXcgZGV2aWNlIGFkZHJlc3MKKyAqLworaW50IHd1c2Jfc2V0X2Rldl9hZGRyKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldiwgdTggYWRkcikKK3sKKwlpbnQgcmVzdWx0OworCisJd3VzYl9kZXYtPmFkZHIgPSBhZGRyOworCXJlc3VsdCA9IHd1c2JoYy0+ZGV2X2luZm9fc2V0KHd1c2JoYywgd3VzYl9kZXYpOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKHd1c2JoYy0+ZGV2LCAiZGV2aWNlICVkOiBmYWlsZWQgdG8gc2V0IGRldmljZSAiCisJCQkiYWRkcmVzc1xuIiwgd3VzYl9kZXYtPnBvcnRfaWR4KTsKKwllbHNlCisJCWRldl9pbmZvKHd1c2JoYy0+ZGV2LCAiZGV2aWNlICVkOiAlcyBhZGRyICV1XG4iLAorCQkJIHd1c2JfZGV2LT5wb3J0X2lkeCwKKwkJCSAoYWRkciAmIFdVU0JfREVWX0FERFJfVU5BVVRIKSA/ICJ1bmF1dGgiIDogImF1dGgiLAorCQkJIHd1c2JfZGV2LT5hZGRyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9tbWMuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL21tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTc3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9tbWMuYwpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIFdVU0IgV2lyZSBBZGFwdGVyOiBDb250cm9sL0RhdGEgU3RyZWFtaW5nIEludGVyZmFjZSAoV1VTQls4XSkKKyAqIE1NQyAoTWljcm9zY2hlZHVsZWQgTWFuYWdlbWVudCBDb21tYW5kKSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogV1VJRXMgYW5kIE1NQyBJRXMuLi53ZWxsLCB0aGV5IGFyZSBhbG1vc3QgdGhlIHNhbWUgYXQgdGhlIGVuZC4gTU1DCisgKiBJRXMgYXJlIFdpcmVsZXNzIFVTQiBJRXMgdGhhdCBnbyBpbnRvIHRoZSBNTUMgcGVyaW9kLi4uW3doYXQgaXMKKyAqIHRoYXQ/IGxvb2sgaW4gRGVzaWduLW92ZXJ2aWV3LnR4dF0uCisgKgorICoKKyAqIFRoaXMgaXMgYSBzaW1wbGUgc3Vic3lzdGVtIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggSUVzIGFyZSBiZWluZworICogc2VudCBieSB0aGUgaG9zdCBpbiB0aGUgTU1DIHBlcmlvZC4KKyAqCisgKiBGb3IgZWFjaCBXVUlFIHdlIGFzayB0byBzZW5kLCB3ZSBrZWVwIGl0IGluIGFuIGFycmF5LCBzbyB3ZSBjYW4KKyAqIHJlcXVlc3QgaXRzIHJlbW92YWwgbGF0ZXIsIG9yIHJlcGxhY2UgdGhlIGNvbnRlbnQuIFRoZXkgYXJlIHRyYWNrZWQKKyAqIGJ5IHBvaW50ZXIsIHNvIGJlIHN1cmUgdG8gdXNlIHRoZSBzYW1lIHBvaW50ZXIgaWYgeW91IHdhbnQgdG8KKyAqIHJlbW92ZSBpdCBvciB1cGRhdGUgdGhlIGNvbnRlbnRzLgorICoKKyAqIEZJWE1FOgorICogIC0gYWRkIHRpbWVycyB0aGF0IGF1dG9yZW1vdmUgaW50ZXJ2YWxsZWQgSUVzPworICovCisjaW5jbHVkZSA8bGludXgvdXNiL3d1c2IuaD4KKyNpbmNsdWRlICJ3dXNiaGMuaCIKKworLyogSW5pdGlhbGl6ZSB0aGUgTU1DSUVzIGhhbmRsaW5nIG1lY2hhbmlzbSAqLworaW50IHd1c2JoY19tbWNpZV9jcmVhdGUoc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCXU4IG1tY2llcyA9IHd1c2JoYy0+bW1jaWVzX21heDsKKwl3dXNiaGMtPm1tY2llID0ga2NhbGxvYyhtbWNpZXMsIHNpemVvZih3dXNiaGMtPm1tY2llWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHd1c2JoYy0+bW1jaWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbXV0ZXhfaW5pdCgmd3VzYmhjLT5tbWNpZV9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbGVhc2UgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIE1NQ0lFcyBoYW5kbGluZyBtZWNoYW5pc20gKi8KK3ZvaWQgd3VzYmhjX21tY2llX2Rlc3Ryb3koc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCWtmcmVlKHd1c2JoYy0+bW1jaWUpOworfQorCisvKgorICogQWRkIG9yIHJlcGxhY2UgYW4gTU1DIFdpcmVsZXNzIFVTQiBJRS4KKyAqCisgKiBAaW50ZXJ2YWw6ICAgIFNlZSBXVVNCMS4wWzguNS4zLjFdCisgKiBAcmVwZWF0X2NudDogIFNlZSBXVVNCMS4wWzguNS4zLjFdCisgKiBAaGFuZGxlOiAgICAgIFNlZSBXVVNCMS4wWzguNS4zLjFdCisgKiBAd3VpZTogICAgICAgIFBvaW50ZXIgdG8gdGhlIGhlYWRlciBvZiB0aGUgV1VTQiBJRSBkYXRhIHRvIGFkZC4KKyAqICAgICAgICAgICAgICAgTVVTVCBCRSBhbGxvY2F0ZWQgaW4gYSBrbWFsbG9jIGJ1ZmZlciAobm8gc3RhY2sgb3IKKyAqICAgICAgICAgICAgICAgdm1hbGxvYykuCisgKiAgICAgICAgICAgICAgIFRIRSBDQUxMRVIgQUxXQVlTIE9XTlMgVEhFIFBPSU5URVIgKHdlIGRvbid0IGZyZWUgaXQKKyAqICAgICAgICAgICAgICAgb24gcmVtb3ZlLCB3ZSBqdXN0IGZvcmdldCBhYm91dCBpdCkuCisgKiBAcmV0dXJuczogICAgIDAgaWYgb2ssIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yLgorICoKKyAqIEdvZXMgb3ZlciB0aGUgKndob2xlKiBAd3VzYmhjLT5tbWNpZSBhcnJheSBsb29raW5nIGZvciAoYSkgdGhlCisgKiBmaXJzdCBmcmVlIHNwb3QgYW5kIChiKSBpZiBAd3VpZSBpcyBhbHJlYWR5IGluIHRoZSBhcnJheSAoYWthOgorICogdHJhbnNtaXR0ZWQgaW4gdGhlIE1NQ3MpIHRoZSBzcG90IHdlcmUgaXQgaXMuCisgKgorICogSWYgcHJlc2VudCwgd2UgIm92ZXJ3cml0ZSBpdCIgKHVwZGF0ZSkuCisgKgorICoKKyAqIE5PVEU6IE5lZWQgc3BlY2lhbCBvcmRlcmluZyBydWxlcyAtLSBzZWUgYmVsb3cgV1VTQjEuMCBUYWJsZSA3LTM4LgorICogICAgICAgVGhlIGhvc3QgdXNlcyB0aGUgaGFuZGxlIGFzIHRoZSAnc29ydCcgaW5kZXguIFdlCisgKiAgICAgICBhbGxvY2F0ZSB0aGUgbGFzdCBvbmUgYWx3YXlzIGZvciB0aGUgV1VJRV9JRF9IT1NUX0lORk8sIGFuZAorICogICAgICAgdGhlIHJlc3QsIGZpcnN0IGNvbWUgZmlyc3Qgc2VydmUgaW4gaW52ZXJzZSBvcmRlci4KKyAqCisgKiAgICAgICBIb3N0IHNvZnR3YXJlIG11c3QgbWFrZSBzdXJlIHRoYXQgaXQgYWRkcyB0aGUgb3RoZXIgSUVzIGluCisgKiAgICAgICB0aGUgcmlnaHQgb3JkZXIuLi4gdGhlIGhvc3QgaGFyZHdhcmUgaXMgcmVzcG9uc2libGUgZm9yCisgKiAgICAgICBwbGFjaW5nIHRoZSBXQ1RBIElFcyBpbiB0aGUgcmlnaHQgcGxhY2Ugd2l0aCB0aGUgb3RoZXIgSUVzCisgKiAgICAgICBzZXQgYnkgaG9zdCBzb2Z0d2FyZS4KKyAqCisgKiBOT1RFOiB3ZSBjYW4gYWNjZXNzIHd1c2JoYy0+d2FfZGVzY3Igd2l0aG91dCBsb2NraW5nIGJlY2F1c2UgaXQgaXMKKyAqICAgICAgIHJlYWQgb25seS4KKyAqLworaW50IHd1c2JoY19tbWNpZV9zZXQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBpbnRlcnZhbCwgdTggcmVwZWF0X2NudCwKKwkJICAgICBzdHJ1Y3Qgd3VpZV9oZHIgKnd1aWUpCit7CisJaW50IHJlc3VsdCA9IC1FTk9CVUZTOworCXVuc2lnbmVkIGhhbmRsZSwgaXRyOworCisJLyogU2VhcmNoIGEgaGFuZGxlLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBvcmRlcmluZyAqLworCW11dGV4X2xvY2soJnd1c2JoYy0+bW1jaWVfbXV0ZXgpOworCXN3aXRjaCAod3VpZS0+YklFSWRlbnRpZmllcikgeworCWNhc2UgV1VJRV9JRF9IT1NUX0lORk86CisJCS8qIEFsd2F5cyBsYXN0ICovCisJCWhhbmRsZSA9IHd1c2JoYy0+bW1jaWVzX21heCAtIDE7CisJCWJyZWFrOworCWNhc2UgV1VJRV9JRF9JU09DSF9ESVNDQVJEOgorCQlkZXZfZXJyKHd1c2JoYy0+ZGV2LCAiU3BlY2lhbCBvcmRlcmluZyBjYXNlIGZvciBXVUlFIElEIDB4JXggIgorCQkJInVuaW1wbGVtZW50ZWRcbiIsIHd1aWUtPmJJRUlkZW50aWZpZXIpOworCQlyZXN1bHQgPSAtRU5PU1lTOworCQlnb3RvIGVycm9yX3VubG9jazsKKwlkZWZhdWx0OgorCQkvKiBzZWFyY2ggZm9yIGl0IG9yIGZpbmQgdGhlIGxhc3QgZW1wdHkgc2xvdCAqLworCQloYW5kbGUgPSB+MDsKKwkJZm9yIChpdHIgPSAwOyBpdHIgPCB3dXNiaGMtPm1tY2llc19tYXggLSAxOyBpdHIrKykgeworCQkJaWYgKHd1c2JoYy0+bW1jaWVbaXRyXSA9PSB3dWllKSB7CisJCQkJaGFuZGxlID0gaXRyOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHd1c2JoYy0+bW1jaWVbaXRyXSA9PSBOVUxMKQorCQkJCWhhbmRsZSA9IGl0cjsKKwkJfQorCQlpZiAoaGFuZGxlID09IH4wKQorCQkJZ290byBlcnJvcl91bmxvY2s7CisJfQorCXJlc3VsdCA9ICh3dXNiaGMtPm1tY2llX2FkZCkod3VzYmhjLCBpbnRlcnZhbCwgcmVwZWF0X2NudCwgaGFuZGxlLAorCQkJCSAgICAgd3VpZSk7CisJaWYgKHJlc3VsdCA+PSAwKQorCQl3dXNiaGMtPm1tY2llW2hhbmRsZV0gPSB3dWllOworZXJyb3JfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd3VzYmhjLT5tbWNpZV9tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JoY19tbWNpZV9zZXQpOworCisvKgorICogUmVtb3ZlIGFuIE1NQyBJRSBwcmV2aW91c2x5IGFkZGVkIHdpdGggd3VzYmhjX21tY2llX3NldCgpCisgKgorICogQHd1aWUJUG9pbnRlciB1c2VkIHRvIGFkZCB0aGUgV1VJRQorICovCit2b2lkIHd1c2JoY19tbWNpZV9ybShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHN0cnVjdCB3dWllX2hkciAqd3VpZSkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGhhbmRsZSwgaXRyOworCisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tbWNpZV9tdXRleCk7CisJZm9yIChpdHIgPSAwOyBpdHIgPCB3dXNiaGMtPm1tY2llc19tYXg7IGl0cisrKSB7CisJCWlmICh3dXNiaGMtPm1tY2llW2l0cl0gPT0gd3VpZSkgeworCQkJaGFuZGxlID0gaXRyOworCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnd1c2JoYy0+bW1jaWVfbXV0ZXgpOworCXJldHVybjsKKworZm91bmQ6CisJcmVzdWx0ID0gKHd1c2JoYy0+bW1jaWVfcm0pKHd1c2JoYywgaGFuZGxlKTsKKwlpZiAocmVzdWx0ID09IDApCisJCXd1c2JoYy0+bW1jaWVbaXRyXSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm1tY2llX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JoY19tbWNpZV9ybSk7CisKKy8qCisgKiB3dXNiaGNfc3RhcnQgLSBzdGFydCB0cmFuc21pdHRpbmcgTU1DcyBhbmQgYWNjZXB0aW5nIGNvbm5lY3Rpb25zCisgKiBAd3VzYmhjOiB0aGUgSEMgdG8gc3RhcnQKKyAqIEBjaGlkOiB0aGUgQ0hJRCB0byB1c2UgZm9yIHRoaXMgaG9zdAorICoKKyAqIEVzdGFibGlzaGVzIGEgY2x1c3RlciByZXNlcnZhdGlvbiwgZW5hYmxlcyBkZXZpY2UgY29ubmVjdGlvbnMsIGFuZAorICogc3RhcnRzIE1NQ3Mgd2l0aCBhcHByb3ByaWF0ZSBETlRTIHBhcmFtZXRlcnMuCisgKi8KK2ludCB3dXNiaGNfc3RhcnQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBjb25zdCBzdHJ1Y3Qgd3VzYl9ja2hkaWQgKmNoaWQpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKworCVdBUk5fT04od3VzYmhjLT53dWllX2hvc3RfaW5mbyAhPSBOVUxMKTsKKworCXJlc3VsdCA9IHd1c2JoY19yc3ZfZXN0YWJsaXNoKHd1c2JoYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZXN0YWJsaXNoIGNsdXN0ZXIgcmVzZXJ2YXRpb246ICVkXG4iLAorCQkJcmVzdWx0KTsKKwkJZ290byBlcnJvcl9yc3ZfZXN0YWJsaXNoOworCX0KKworCXJlc3VsdCA9IHd1c2JoY19kZXZjb25uZWN0X3N0YXJ0KHd1c2JoYywgY2hpZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJlcnJvciBlbmFibGluZyBkZXZpY2UgY29ubmVjdGlvbnM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX2RldmNvbm5lY3Rfc3RhcnQ7CisJfQorCisJcmVzdWx0ID0gd3VzYmhjX3NlY19zdGFydCh3dXNiaGMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3Igc3RhcnRpbmcgc2VjdXJpdHkgaW4gdGhlIEhDOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9zZWNfc3RhcnQ7CisJfQorCS8qIEZJWE1FOiB0aGUgY2hvaWNlIG9mIHRoZSBETlRTIHBhcmFtZXRlcnMgaXMgc29tZXdoYXQKKwkgKiBhcmJpdHJhcnkgKi8KKwlyZXN1bHQgPSB3dXNiaGMtPnNldF9udW1fZG50cyh3dXNiaGMsIDAsIDE1KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBzZXQgRE5UUyBwYXJhbWV0ZXJzOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9zZXRfbnVtX2RudHM7CisJfQorCXJlc3VsdCA9IHd1c2JoYy0+c3RhcnQod3VzYmhjKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIHN0YXJ0aW5nIHd1c2JjaDogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfd3VzYmhjX3N0YXJ0OworCX0KKwl3dXNiaGMtPmFjdGl2ZSA9IDE7CisJcmV0dXJuIDA7CisKK2Vycm9yX3d1c2JoY19zdGFydDoKKwl3dXNiaGNfc2VjX3N0b3Aod3VzYmhjKTsKK2Vycm9yX3NldF9udW1fZG50czoKK2Vycm9yX3NlY19zdGFydDoKKwl3dXNiaGNfZGV2Y29ubmVjdF9zdG9wKHd1c2JoYyk7CitlcnJvcl9kZXZjb25uZWN0X3N0YXJ0OgorCXd1c2JoY19yc3ZfdGVybWluYXRlKHd1c2JoYyk7CitlcnJvcl9yc3ZfZXN0YWJsaXNoOgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBEaXNjb25uZWN0IGFsbCBmcm9tIHRoZSBXVVNCIENoYW5uZWwKKyAqCisgKiBTZW5kIGEgSG9zdCBEaXNjb25uZWN0IElFIGluIHRoZSBNTUMsIHdhaXQsIGRvbid0IHNlbmQgaXQgYW55IG1vcmUKKyAqLworc3RhdGljIGludCBfX3d1c2JoY19ob3N0X2Rpc2Nvbm5lY3RfaWUoc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCWludCByZXN1bHQgPSAtRU5PTUVNOworCXN0cnVjdCB3dWllX2hvc3RfZGlzY29ubmVjdCAqaG9zdF9kaXNjb25uZWN0X2llOworCW1pZ2h0X3NsZWVwKCk7CisJaG9zdF9kaXNjb25uZWN0X2llID0ga21hbGxvYyhzaXplb2YoKmhvc3RfZGlzY29ubmVjdF9pZSksIEdGUF9LRVJORUwpOworCWlmIChob3N0X2Rpc2Nvbm5lY3RfaWUgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9hbGxvYzsKKwlob3N0X2Rpc2Nvbm5lY3RfaWUtPmhkci5iTGVuZ3RoICAgICAgID0gc2l6ZW9mKCpob3N0X2Rpc2Nvbm5lY3RfaWUpOworCWhvc3RfZGlzY29ubmVjdF9pZS0+aGRyLmJJRUlkZW50aWZpZXIgPSBXVUlFX0lEX0hPU1RfRElTQ09OTkVDVDsKKwlyZXN1bHQgPSB3dXNiaGNfbW1jaWVfc2V0KHd1c2JoYywgMCwgMCwgJmhvc3RfZGlzY29ubmVjdF9pZS0+aGRyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9tbWNpZV9zZXQ7CisKKwkvKiBXVVNCMS4wWzguNS4zLjEgJiA3LjUuMl0gKi8KKwltc2xlZXAoMTAwKTsKKwl3dXNiaGNfbW1jaWVfcm0od3VzYmhjLCAmaG9zdF9kaXNjb25uZWN0X2llLT5oZHIpOworZXJyb3JfbW1jaWVfc2V0OgorCWtmcmVlKGhvc3RfZGlzY29ubmVjdF9pZSk7CitlcnJvcl9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogd3VzYmhjX3N0b3AgLSBzdG9wIHRyYW5zbWl0dGluZyBNTUNzCisgKiBAd3VzYmhjOiB0aGUgSEMgdG8gc3RvcAorICoKKyAqIFNlbmQgYSBIb3N0IERpc2Nvbm5lY3QgSUUsIHdhaXQsIHJlbW92ZSBhbGwgdGhlIE1NQ3MgKHN0b3Agc2VuZGluZyBNTUNzKS4KKyAqCisgKiBJZiB3ZSBjYW4ndCBhbGxvY2F0ZSBhIEhvc3QgU3RvcCBJRSwgc2NyZXcgaXQsIHdlIGRvbid0IG5vdGlmeSB0aGUKKyAqIGRldmljZXMgd2UgYXJlIGRpc2Nvbm5lY3RpbmcuLi4KKyAqLwordm9pZCB3dXNiaGNfc3RvcChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJaWYgKHd1c2JoYy0+YWN0aXZlKSB7CisJCXd1c2JoYy0+YWN0aXZlID0gMDsKKwkJd3VzYmhjLT5zdG9wKHd1c2JoYyk7CisJCXd1c2JoY19zZWNfc3RvcCh3dXNiaGMpOworCQlfX3d1c2JoY19ob3N0X2Rpc2Nvbm5lY3RfaWUod3VzYmhjKTsKKwkJd3VzYmhjX2RldmNvbm5lY3Rfc3RvcCh3dXNiaGMpOworCQl3dXNiaGNfcnN2X3Rlcm1pbmF0ZSh3dXNiaGMpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JoY19zdG9wKTsKKworLyoKKyAqIENoYW5nZSB0aGUgQ0hJRCBpbiBhIFdVU0IgQ2hhbm5lbAorICoKKyAqIElmIGl0IGlzIGp1c3QgYSBuZXcgQ0hJRCwgc2VuZCBhIEhvc3QgRGlzY29ubmVjdCBJRSBhbmQgdGhlbiBjaGFuZ2UKKyAqIHRoZSBDSElEIElFLgorICovCitzdGF0aWMgaW50IF9fd3VzYmhjX2NoaWRfY2hhbmdlKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywKKwkJCQljb25zdCBzdHJ1Y3Qgd3VzYl9ja2hkaWQgKmNoaWQpCit7CisJaW50IHJlc3VsdCA9IC1FTk9TWVM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gd3VzYmhjLT5kZXY7CisJZGV2X2VycihkZXYsICIlcygpIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gcmVzdWx0OworCisJQlVHX09OKHd1c2JoYy0+d3VpZV9ob3N0X2luZm8gPT0gTlVMTCk7CisJX193dXNiaGNfaG9zdF9kaXNjb25uZWN0X2llKHd1c2JoYyk7CisJd3VzYmhjLT53dWllX2hvc3RfaW5mby0+Q0hJRCA9ICpjaGlkOworCXJlc3VsdCA9IHd1c2JoY19tbWNpZV9zZXQod3VzYmhjLCAwLCAwLCAmd3VzYmhjLT53dWllX2hvc3RfaW5mby0+aGRyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycihkZXYsICJDYW4ndCB1cGRhdGUgSG9zdCBJbmZvIFdVU0IgSUU6ICVkXG4iLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTZXQvcmVzZXQvdXBkYXRlIGEgbmV3IENISUQKKyAqCisgKiBEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzIHN0YXRlIG9mIHRoZSBNTUNzLCBzdGFydCwgc3RvcCBvciBjaGFuZ2UKKyAqIHRoZSBzZW50IE1NQy4gVGhpcyBlZmZlY3RpdmVseSBzd2l0Y2hlcyB0aGUgaG9zdCBjb250cm9sbGVyIG9uIGFuZAorICogb2ZmIChyYWRpbyB3aXNlKS4KKyAqLworaW50IHd1c2JoY19jaGlkX3NldChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIGNvbnN0IHN0cnVjdCB3dXNiX2NraGRpZCAqY2hpZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmIChtZW1jbXAoY2hpZCwgJnd1c2JfY2toZGlkX3plcm8sIHNpemVvZihjaGlkKSkgPT0gMCkKKwkJY2hpZCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwlpZiAod3VzYmhjLT5hY3RpdmUpIHsKKwkJaWYgKGNoaWQpCisJCQlyZXN1bHQgPSBfX3d1c2JoY19jaGlkX2NoYW5nZSh3dXNiaGMsIGNoaWQpOworCQllbHNlCisJCQl3dXNiaGNfc3RvcCh3dXNiaGMpOworCX0gZWxzZSB7CisJCWlmIChjaGlkKQorCQkJd3VzYmhjX3N0YXJ0KHd1c2JoYywgY2hpZCk7CisJfQorCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JoY19jaGlkX3NldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9wYWwuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3BhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYzUxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9wYWwuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogV2lyZWxlc3MgVVNCIEhvc3QgQ29udHJvbGxlcgorICogVVdCIFByb3RvY29sIEFkYXB0YXRpb24gTGF5ZXIgKFBBTCkgZ2x1ZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlICJ3dXNiaGMuaCIKKworLyoqCisgKiB3dXNiaGNfcGFsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIFdVU0IgSEMgYXMgYSBVV0IgUEFMCisgKiBAd3VzYmhjOiB0aGUgV1VTQiBIQworICovCitpbnQgd3VzYmhjX3BhbF9yZWdpc3RlcihzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJdXdiX3BhbF9pbml0KCZ3dXNiaGMtPnBhbCk7CisKKwl3dXNiaGMtPnBhbC5uYW1lICAgPSAid3VzYmhjIjsKKwl3dXNiaGMtPnBhbC5kZXZpY2UgPSB3dXNiaGMtPnVzYl9oY2Quc2VsZi5jb250cm9sbGVyOworCisJcmV0dXJuIHV3Yl9wYWxfcmVnaXN0ZXIod3VzYmhjLT51d2JfcmMsICZ3dXNiaGMtPnBhbCk7Cit9CisKKy8qKgorICogd3VzYmhjX3BhbF9yZWdpc3RlciAtIHVucmVnaXN0ZXIgdGhlIFdVU0IgSEMgYXMgYSBVV0IgUEFMCisgKiBAd3VzYmhjOiB0aGUgV1VTQiBIQworICovCit2b2lkIHd1c2JoY19wYWxfdW5yZWdpc3RlcihzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJdXdiX3BhbF91bnJlZ2lzdGVyKHd1c2JoYy0+dXdiX3JjLCAmd3VzYmhjLT5wYWwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvcmVzZXJ2YXRpb24uYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3Jlc2VydmF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2M2U3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3Jlc2VydmF0aW9uLmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBXVVNCIGNsdXN0ZXIgcmVzZXJ2YXRpb24gbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi5oPgorCisjaW5jbHVkZSAid3VzYmhjLmgiCisKKy8qCisgKiBXVVNCIGNsdXN0ZXIgcmVzZXJ2YXRpb25zIGFyZSBtdWx0aWNhc3QgcmVzZXJ2YXRpb25zIHdpdGggdGhlCisgKiBicm9hZGNhc3QgY2x1c3RlciBJRCAoQkNJRCkgYXMgdGhlIHRhcmdldCBEZXZBZGRyLgorICoKKyAqIEZJWE1FOiBjb25zaWRlciBhZGp1c3RpbmcgdGhlIHJlc2VydmF0aW9uIGRlcGVuZGluZyBvbiB3aGF0IGRldmljZXMKKyAqIGFyZSBhdHRhY2hlZC4KKyAqLworCitzdGF0aWMgaW50IHd1c2JoY19id2Ffc2V0KHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggc3RyZWFtLAorCWNvbnN0IHN0cnVjdCB1d2JfbWFzX2JtICptYXMpCit7CisJaWYgKG1hcyA9PSBOVUxMKQorCQltYXMgPSAmdXdiX21hc19ibV96ZXJvOworCXJldHVybiB3dXNiaGMtPmJ3YV9zZXQod3VzYmhjLCBzdHJlYW0sIG1hcyk7Cit9CisKKy8qKgorICogd3VzYmhjX3Jzdl9jb21wbGV0ZV9jYiAtIFdVU0IgSEMgcmVzZXJ2YXRpb24gY29tcGxldGUgY2FsbGJhY2sKKyAqIEByc3Y6ICAgIHRoZSByZXNlcnZhdGlvbgorICoKKyAqIEVpdGhlciBzZXQgb3IgY2xlYXIgdGhlIEhDJ3MgdmlldyBvZiB0aGUgcmVzZXJ2YXRpb24uCisgKgorICogRklYTUU6IHdoZW4gYSByZXNlcnZhdGlvbiBpcyBkZW5pZWQgdGhlIEhDIHNob3VsZCBiZSBzdG9wcGVkLgorICovCitzdGF0aWMgdm9pZCB3dXNiaGNfcnN2X2NvbXBsZXRlX2NiKHN0cnVjdCB1d2JfcnN2ICpyc3YpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gcnN2LT5wYWxfcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKwljaGFyIGJ1Zls3Ml07CisKKwlzd2l0Y2ggKHJzdi0+c3RhdGUpIHsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19FU1RBQkxJU0hFRDoKKwkJYml0bWFwX3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCByc3YtPm1hcy5ibSwgVVdCX05VTV9NQVMpOworCQlkZXZfZGJnKGRldiwgImVzdGFibGlzaGVkIHJlc2VydmF0aW9uOiAlc1xuIiwgYnVmKTsKKwkJd3VzYmhjX2J3YV9zZXQod3VzYmhjLCByc3YtPnN0cmVhbSwgJnJzdi0+bWFzKTsKKwkJYnJlYWs7CisJY2FzZSBVV0JfUlNWX1NUQVRFX05PTkU6CisJCWRldl9kYmcoZGV2LCAicmVtb3ZlZCByZXNlcnZhdGlvblxuIik7CisJCXd1c2JoY19id2Ffc2V0KHd1c2JoYywgMCwgTlVMTCk7CisJCXd1c2JoYy0+cnN2ID0gTlVMTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJ1bmV4cGVjdGVkIHJlc2VydmF0aW9uIHN0YXRlOiAlZFxuIiwgcnN2LT5zdGF0ZSk7CisJCWJyZWFrOworCX0KK30KKworCisvKioKKyAqIHd1c2JoY19yc3ZfZXN0YWJsaXNoIC0gZXN0YWJsaXNoIGEgcmVzZXJ2YXRpb24gZm9yIHRoZSBjbHVzdGVyCisgKiBAd3VzYmhjOiB0aGUgV1VTQiBIQyByZXF1ZXN0aW5nIGEgYmFuZHdpdGggcmVzZXJ2YXRpb24KKyAqLworaW50IHd1c2JoY19yc3ZfZXN0YWJsaXNoKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHd1c2JoYy0+dXdiX3JjOworCXN0cnVjdCB1d2JfcnN2ICpyc3Y7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBiY2lkOworCWludCByZXQ7CisKKwlyc3YgPSB1d2JfcnN2X2NyZWF0ZShyYywgd3VzYmhjX3Jzdl9jb21wbGV0ZV9jYiwgd3VzYmhjKTsKKwlpZiAocnN2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYmNpZC5kYXRhWzBdID0gd3VzYmhjLT5jbHVzdGVyX2lkOworCWJjaWQuZGF0YVsxXSA9IDA7CisKKwlyc3YtPm93bmVyID0gJnJjLT51d2JfZGV2OworCXJzdi0+dGFyZ2V0LnR5cGUgPSBVV0JfUlNWX1RBUkdFVF9ERVZBRERSOworCXJzdi0+dGFyZ2V0LmRldmFkZHIgPSBiY2lkOworCXJzdi0+dHlwZSA9IFVXQl9EUlBfVFlQRV9QUklWQVRFOworCXJzdi0+bWF4X21hcyA9IDI1NjsKKwlyc3YtPm1pbl9tYXMgPSAxNjsgIC8qIG9uZSBNQVMgcGVyIHpvbmU/ICovCisJcnN2LT5zcGFyc2l0eSA9IDE2OyAvKiBhdCBsZWFzdCBvbmUgTUFTIGluIGVhY2ggem9uZT8gKi8KKwlyc3YtPmlzX211bHRpY2FzdCA9IHRydWU7CisKKwlyZXQgPSB1d2JfcnN2X2VzdGFibGlzaChyc3YpOworCWlmIChyZXQgPT0gMCkKKwkJd3VzYmhjLT5yc3YgPSByc3Y7CisJZWxzZQorCQl1d2JfcnN2X2Rlc3Ryb3kocnN2KTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogd3VzYmhjX3Jzdl90ZXJtaW5hdGUgLSB0ZXJtaW5hdGUgYW55IGNsdXN0ZXIgcmVzZXJ2YXRpb24KKyAqIEB3dXNiaGM6IHRoZSBXVVNCIGhvc3Qgd2hvc2UgcmVzZXJ2YXRpb24gaXMgdG8gYmUgdGVybWluYXRlZAorICovCit2b2lkIHd1c2JoY19yc3ZfdGVybWluYXRlKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlpZiAod3VzYmhjLT5yc3YpCisJCXV3Yl9yc3ZfdGVybWluYXRlKHd1c2JoYy0+cnN2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3JoLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9yaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2E2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9yaC5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogV2lyZWxlc3MgVVNCIEhvc3QgQ29udHJvbGxlcgorICogUm9vdCBIdWIgb3BlcmF0aW9ucworICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIFdlIGZha2UgYSByb290IGh1YiB0aGF0IGhhcyBmYWtlIHBvcnRzIChhcyBtYW55IGFzIHNpbXVsdGFuZW91cworICogZGV2aWNlcyB0aGUgV2lyZWxlc3MgVVNCIEhvc3QgQ29udHJvbGxlciBjYW4gZGVhbCB3aXRoKS4gRm9yIGVhY2gKKyAqIHBvcnQgd2Uga2VlcCBhbiBzdGF0ZSBpbiBAd3VzYmhjLT5wb3J0W2luZGV4XSBpZGVudGljYWwgdG8gdGhlIG9uZQorICogc3BlY2lmaWVkIGluIHRoZSBVU0IyLjBbY2gxMV0gc3BlYyBhbmQgc29tZSBleHRyYSBkZXZpY2UKKyAqIGluZm9ybWF0aW9uIHRoYXQgY29tcGxlbWVudHMgdGhlIG9uZSBpbiAnc3RydWN0IHVzYl9kZXZpY2UnIChhcworICogdGhpcyBsYWNzIGEgaGNwcml2IHBvaW50ZXIpLgorICoKKyAqIE5vdGUgdGhpcyBpcyBjb21tb24gdG8gV0hDSSBhbmQgSFdBIGhvc3QgY29udHJvbGxlcnMuCisgKgorICogVGhyb3VnaCBoZXJlIHdlIGVuYWJsZSBtb3N0IG9mIHRoZSBzdGF0ZSBjaGFuZ2VzIHRoYXQgdGhlIFVTQiBzdGFjaworICogd2lsbCB1c2UgdG8gY29ubmVjdCBvciBkaXNjb25uZWN0IGRldmljZXMuIFdlIG5lZWQgdG8gZG8gc29tZQorICogZm9yY2VkIGFkYXB0YXRpb24gb2YgV2lyZWxlc3MgVVNCIGRldmljZSBzdGF0ZXMgdnMuIHdpcmVkOgorICoKKyAqICAgICAgICBVU0I6ICAgICAgICAgICAgICAgICBXVVNCOgorICoKKyAqIFBvcnQgICBQb3dlcmVkLW9mZiAgICAgICAgICBwb3J0IHNsb3Qgbi9hCisgKiAgICAgICAgUG93ZXJlZC1vbiAgICAgICAgICAgcG9ydCBzbG90IGF2YWlsYWJsZQorICogICAgICAgIERpc2Nvbm5lY3RlZCAgICAgICAgIHBvcnQgc2xvdCBhdmFpbGFibGUKKyAqICAgICAgICBDb25uZWN0ZWQgICAgICAgICAgICBwb3J0IHNsb3QgYXNzaWduZWQgZGV2aWNlCisgKiAgICAgICAgCQkgICAgICAgZGV2aWNlIHNlbnQgRE5fQ29ubmVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB3YXMgYXV0aGVudGljYXRlZAorICogICAgICAgIEVuYWJsZWQgICAgICAgICAgICAgIGRldmljZSBpcyBhdXRoZW50aWNhdGVkLCB0cmFuc2l0aW9uZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHVuYXV0aCAtPiBhdXRoIC0+IGRlZmF1bHQgYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGVuYWJsZWQKKyAqICAgICAgICBSZXNldCAgICAgICAgICAgICAgICBkaXNjb25uZWN0CisgKiAgICAgICAgRGlzYWJsZSAgICAgICAgICAgICAgZGlzY29ubmVjdAorICoKKyAqIFRoaXMgbWFwcyB0aGUgc3RhbmRhcmQgVVNCIHBvcnQgc3RhdGVzIHdpdGggdGhlIFdVU0IgZGV2aWNlIHN0YXRlcworICogc28gd2UgY2FuIGZha2UgcG9ydHMgd2l0aG91dCBoYXZpbmcgdG8gbW9kaWZ5IHRoZSBVU0Igc3RhY2suCisgKgorICogRklYTUU6IHRoaXMgcHJvY2VzcyB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlCisgKgorICoKKyAqIEVOVFJZIFBPSU5UUworICoKKyAqIE91ciBlbnRyeSBwb2ludHMgaW50byBoZXJlIGFyZSwgYXMgaW4gaGNkLmMsIHRoZSBVU0Igc3RhY2sgcm9vdCBodWIKKyAqIG9wcyBkZWZpbmVkIGluIHRoZSB1c2JfaGNkIHN0cnVjdDoKKyAqCisgKiB3dXNiaGNfcmhfc3RhdHVzX2RhdGEoKQlQcm92aWRlIGh1YiBhbmQgcG9ydCBzdGF0dXMgZGF0YSBiaXRtYXAKKyAqCisgKiB3dXNiaGNfcmhfY29udHJvbCgpICAgICAgICAgIEV4ZWN1dGlvbiBvZiBhbGwgdGhlIG1ham9yIHJlcXVlc3RzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gZG8gdG8gYSBodWIgKFNldHxDbGVhcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcywgZ2V0IGRlc2NyaXB0b3JzLCBzdGF0dXMsIGV0YykuCisgKgorICogd3VzYmhjX3JoX1tzdXNwZW5kfHJlc3VtZV0oKSBUaGF0CisgKgorICogd3VzYmhjX3JoX3N0YXJ0X3BvcnRfcmVzZXQoKSA/Pz8gdW5pbXBsZW1lbnRlZAorICovCisjaW5jbHVkZSAid3VzYmhjLmgiCisKKyNkZWZpbmUgRF9MT0NBTCAwCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKy8qCisgKiBSZXNldCBhIGZha2UgcG9ydAorICoKKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCB0byByZXNldCBhIHBvcnQgZnJvbSBhbnkgb3RoZXIgc3RhdGUgb3IgdG8gcmVzZXQKKyAqIGl0IHdoZW4gY29ubmVjdGluZy4gSW4gV2lyZWxlc3MgVVNCIHRoZXkgYXJlIGRpZmZlcmVudDsgd2hlbiBkb2luZworICogYSBuZXcgY29ubmVjdCB0aGF0IGludm9sdmVzIGdvaW5nIG92ZXIgdGhlIGF1dGhlbnRpY2F0aW9uLiBXaGVuCisgKiBqdXN0IHJlc2V0aW5nLCBpdHMgYSBkaWZmZXJlbnQgc3RvcnkuCisgKgorICogVGhlIExpbnV4IFVTQiBzdGFjayByZXNldHMgYSBwb3J0IHR3aWNlIGJlZm9yZSBpdCBjb25zaWRlcnMgaXQKKyAqIGVuYWJsZWQsIHNvIHdlIGhhdmUgdG8gZGV0ZWN0IGFuZCBpZ25vcmUgdGhhdC4KKyAqCisgKiBAd3VzYmhjIGlzIGFzc3VtZWQgcmVmZXJlbmNlZCBhbmQgQHd1c2JoYy0+bXV0ZXggdW5sb2NrZWQuCisgKgorICogU3VwcG9zZWRseSB3ZSBhcmUgdGhlIG9ubHkgdGhyZWFkIGFjY2VzaW5nIEB3dXNiaGMtPnBvcnQ7IGluIGFueQorICogY2FzZSwgbWF5YmUgd2Ugc2hvdWxkIG1vdmUgdGhlIG11dGV4IGxvY2tpbmcgZnJvbQorICogd3VzYmhjX2RldmNvbm5lY3RfYXV0aCgpIHRvIGhlcmUuCisgKgorICogQHBvcnRfaWR4IHJlZmVycyB0byB0aGUgd3VzYmhjJ3MgcG9ydCBpbmRleCwgbm90IHRoZSBVU0IgcG9ydCBudW1iZXIKKyAqLworc3RhdGljIGludCB3dXNiaGNfcmhfcG9ydF9yZXNldChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IHBvcnRfaWR4KQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCB3dXNiX3BvcnQgKnBvcnQgPSB3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgcG9ydF9pZHgpOworCisJZF9mbnN0YXJ0KDMsIHd1c2JoYy0+ZGV2LCAiKHd1c2JoYyAlcCBwb3J0X2lkeCAldSlcbiIsCisJCSAgd3VzYmhjLCBwb3J0X2lkeCk7CisJaWYgKHBvcnQtPnJlc2V0X2NvdW50ID09IDApIHsKKwkJd3VzYmhjX2RldmNvbm5lY3RfYXV0aCh3dXNiaGMsIHBvcnRfaWR4KTsKKwkJcG9ydC0+cmVzZXRfY291bnQrKzsKKwl9IGVsc2UgaWYgKHBvcnQtPnJlc2V0X2NvdW50ID09IDEpCisJCS8qIHNlZSBoZWFkZXIgKi8KKwkJZF9wcmludGYoMiwgd3VzYmhjLT5kZXYsICJJZ25vcmluZyBzZWNvbmQgcmVzZXQgb24gcG9ydF9pZHggIgorCQkJIiV1XG4iLCBwb3J0X2lkeCk7CisJZWxzZQorCQlyZXN1bHQgPSB3dXNiaGNfZGV2X3Jlc2V0KHd1c2JoYywgcG9ydF9pZHgpOworCWRfZm5lbmQoMywgd3VzYmhjLT5kZXYsICIod3VzYmhjICVwIHBvcnRfaWR4ICV1KSA9ICVkXG4iLAorCQl3dXNiaGMsIHBvcnRfaWR4LCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGh1YiBjaGFuZ2Ugc3RhdHVzIGJpdG1hcAorICoKKyAqIFRoZSBiaXRzIGluIHRoZSBjaGFuZ2Ugc3RhdHVzIGJpdG1hcCBhcmUgY2xlYXJlZCB3aGVuIGEKKyAqIENsZWFyUG9ydEZlYXR1cmUgcmVxdWVzdCBpcyBpc3N1ZWQgKFVTQjIuMFsxMS4xMi4zLDExLjEyLjRdLgorICoKKyAqIEB3dXNiaGMgaXMgYXNzdW1lZCByZWZlcmVuY2VkIGFuZCBAd3VzYmhjLT5tdXRleCB1bmxvY2tlZC4KKyAqCisgKiBXQVJOSU5HISEgVGhpcyBnZXRzIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0OyB3ZSBjYW5ub3QgZ2V0IHRoZQorICogICAgICAgICAgIG11dGV4LS10aGUgb25seSByYWNlIGNvbmRpdGlvbiB3ZSBjYW4gZmluZCBpcyBzb21lIGJpdAorICogICAgICAgICAgIGNoYW5naW5nIGp1c3QgYWZ0ZXIgd2UgY29weSBpdCwgd2hpY2ggc2hvdWxkbid0IGJlIHRvbworICogICAgICAgICAgIGJpZyBvZiBhIHByb2JsZW0gW2FuZCB3ZSBjYW4ndCBtYWtlIGl0IGFuIHNwaW5sb2NrCisgKiAgICAgICAgICAgYmVjYXVzZSBvdGhlciBwYXJ0cyBuZWVkIHRvIHRha2UgaXQgYW5kIHNsZWVwXSAuCisgKgorICogICAgICAgICAgIEB1c2JfaGNkIGlzIHJlZmNvdW50ZWQsIHNvIGl0IHdvbid0IGRpc3NhcGVhciB1bmRlciB1cworICogICAgICAgICAgIGFuZCBiZWZvcmUga2lsbGluZyBhIGhvc3QsIHRoZSBwb2xsaW5nIG9mIHRoZSByb290IGh1YgorICogICAgICAgICAgIHdvdWxkIGJlIHN0b3BwZWQgYW55d2F5LgorICovCitpbnQgd3VzYmhjX3JoX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICp1c2JfaGNkLCBjaGFyICpfYnVmKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCXNpemVfdCBjbnQsIHNpemU7CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikgX2J1ZjsKKworCWRfZm5zdGFydCgxLCB3dXNiaGMtPmRldiwgIih3dXNiaGMgJXApXG4iLCB3dXNiaGMpOworCS8qIFdFIERPTidUIExPQ0ssIHNlZSBjb21tZW50ICovCisJc2l6ZSA9IHd1c2JoYy0+cG9ydHNfbWF4ICsgMSAvKiBodWIgYml0ICovOworCXNpemUgPSAoc2l6ZSArIDggLSAxKSAvIDg7CS8qIHJvdW5kIHRvIGJ5dGVzICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCB3dXNiaGMtPnBvcnRzX21heDsgY250KyspCisJCWlmICh3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgY250KS0+Y2hhbmdlKQorCQkJc2V0X2JpdChjbnQgKyAxLCBidWYpOworCQllbHNlCisJCQljbGVhcl9iaXQoY250ICsgMSwgYnVmKTsKKwlkX2ZuZW5kKDEsIHd1c2JoYy0+ZGV2LCAiKHd1c2JoYyAlcCkgJXUsIGJ1ZmZlcjpcbiIsIHd1c2JoYywgKGludClzaXplKTsKKwlkX2R1bXAoMSwgd3VzYmhjLT5kZXYsIF9idWYsIHNpemUpOworCXJldHVybiBzaXplOworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYmhjX3JoX3N0YXR1c19kYXRhKTsKKworLyoKKyAqIFJldHVybiB0aGUgaHViJ3MgZGVzY2lwdG9yCisgKgorICogTk9URTogYWxtb3N0IGN1dCBhbmQgcGFzdGUgZnJvbSBlaGNpLWh1Yi5jCisgKgorICogQHd1c2JoYyBpcyBhc3N1bWVkIHJlZmVyZW5jZWQgYW5kIEB3dXNiaGMtPm11dGV4IHVubG9ja2VkCisgKi8KK3N0YXRpYyBpbnQgd3VzYmhjX3JoX2dldF9odWJfZGVzY3Ioc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1MTYgd1ZhbHVlLAorCQkJCSAgIHUxNiB3SW5kZXgsCisJCQkJICAgc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzY3IsCisJCQkJICAgdTE2IHdMZW5ndGgpCit7CisJdTE2IHRlbXAgPSAxICsgKHd1c2JoYy0+cG9ydHNfbWF4IC8gOCk7CisJdTggbGVuZ3RoID0gNyArIDIgKiB0ZW1wOworCisJaWYgKHdMZW5ndGggPCBsZW5ndGgpCisJCXJldHVybiAtRU5PU1BDOworCWRlc2NyLT5iRGVzY0xlbmd0aCA9IDcgKyAyICogdGVtcDsKKwlkZXNjci0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsJLyogSFVCIHR5cGUgKi8KKwlkZXNjci0+Yk5iclBvcnRzID0gd3VzYmhjLT5wb3J0c19tYXg7CisJZGVzY3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBjcHVfdG9fbGUxNigKKwkJMHgwMAkJCS8qIEFsbCBwb3J0cyBwb3dlciBhdCBvbmNlICovCisJCXwgMHgwMAkJCS8qIG5vdCBwYXJ0IG9mIGNvbXBvdW5kIGRldmljZSAqLworCQl8IDB4MTAJCQkvKiBObyBvdmVyY3VycmVudCBwcm90ZWN0aW9uICovCisJCXwgMHgwMAkJCS8qIDggRlMgdGhpbmsgdGltZSBGSVhNRSA/PyAqLworCQl8IDB4MDApOwkJLyogTm8gcG9ydCBpbmRpY2F0b3JzICovCisJZGVzY3ItPmJQd3JPbjJQd3JHb29kID0gMDsKKwlkZXNjci0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisJLyogdHdvIGJpdG1hcHM6ICBwb3J0cyByZW1vdmFibGUsIGFuZCB1c2IgMS4wIGxlZ2FjeSBQb3J0UHdyQ3RybE1hc2sgKi8KKwltZW1zZXQoJmRlc2NyLT5iaXRtYXBbMF0sIDAsIHRlbXApOworCW1lbXNldCgmZGVzY3ItPmJpdG1hcFt0ZW1wXSwgMHhmZiwgdGVtcCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDbGVhciBhIGh1YiBmZWF0dXJlCisgKgorICogQHd1c2JoYyBpcyBhc3N1bWVkIHJlZmVyZW5jZWQgYW5kIEB3dXNiaGMtPm11dGV4IHVubG9ja2VkLgorICoKKyAqIE5vdGhpbmcgdG8gZG8sIHNvIG5vIGxvY2tpbmcgbmVlZGVkIDspCisgKi8KK3N0YXRpYyBpbnQgd3VzYmhjX3JoX2NsZWFyX2h1Yl9mZWF0KHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTE2IGZlYXR1cmUpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoJXAsIGZlYXR1cmUgMHglMDR1KVxuIiwgd3VzYmhjLCBmZWF0dXJlKTsKKwlzd2l0Y2ggKGZlYXR1cmUpIHsKKwljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkvKiBGSVhNRTogbWF5YmUgcGx1ZyBiaXQgMCB0byB0aGUgcG93ZXIgaW5wdXQgc3RhdHVzLAorCQkgKiBpZiBhbnk/CisJCSAqIHNlZSB3dXNiaGNfcmhfZ2V0X2h1Yl9zdGF0dXMoKSAqLworCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQlyZXN1bHQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSAtRVBJUEU7CisJfQorCWRfZm5lbmQoNCwgZGV2LCAiKCVwLCBmZWF0dXJlIDB4JTA0dSksICVkXG4iLCB3dXNiaGMsIGZlYXR1cmUsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybiBodWIgc3RhdHVzIChpdCBpcyBhbHdheXMgemVyby4uLikKKyAqCisgKiBAd3VzYmhjIGlzIGFzc3VtZWQgcmVmZXJlbmNlZCBhbmQgQHd1c2JoYy0+bXV0ZXggdW5sb2NrZWQuCisgKgorICogTm90aGluZyB0byBkbywgc28gbm8gbG9ja2luZyBuZWVkZWQgOykKKyAqLworc3RhdGljIGludCB3dXNiaGNfcmhfZ2V0X2h1Yl9zdGF0dXMoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1MzIgKmJ1ZiwKKwkJCQkgICAgdTE2IHdMZW5ndGgpCit7CisJLyogRklYTUU6IG1heWJlIHBsdWcgYml0IDAgdG8gdGhlIHBvd2VyIGlucHV0IHN0YXR1cyAoaWYgYW55KT8gKi8KKwkqYnVmID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBhIHBvcnQgZmVhdHVyZQorICoKKyAqIEB3dXNiaGMgaXMgYXNzdW1lZCByZWZlcmVuY2VkIGFuZCBAd3VzYmhjLT5tdXRleCB1bmxvY2tlZC4KKyAqLworc3RhdGljIGludCB3dXNiaGNfcmhfc2V0X3BvcnRfZmVhdChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHUxNiBmZWF0dXJlLAorCQkJCSAgIHU4IHNlbGVjdG9yLCB1OCBwb3J0X2lkeCkKK3sKKwlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPmRldjsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoZmVhdCAweCUwNHUsIHNlbGVjdG9yIDB4JXUsIHBvcnRfaWR4ICVkKVxuIiwKKwkJICBmZWF0dXJlLCBzZWxlY3RvciwgcG9ydF9pZHgpOworCisJaWYgKHBvcnRfaWR4ID4gd3VzYmhjLT5wb3J0c19tYXgpCisJCWdvdG8gZXJyb3I7CisKKwlzd2l0Y2ggKGZlYXR1cmUpIHsKKwkJLyogQWNjb3JkaW5nIHRvIFVTQjIuMFsxMS4yNC4yLjEzXXAyLCB0aGVzZSBmZWF0dXJlcworCQkgKiBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGltcGxlbWVudGVkLiAqLworCWNhc2UgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDoKKwljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgorCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQlyZXN1bHQgPSAwOworCQlicmVhazsKKworCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJLyogTm8gc3VjaCB0aGluZywgYnV0IHdlIGZha2UgaXQgd29ya3MgKi8KKwkJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJCXd1c2JfcG9ydF9ieV9pZHgod3VzYmhjLCBwb3J0X2lkeCktPnN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1BPV0VSOworCQltdXRleF91bmxvY2soJnd1c2JoYy0+bXV0ZXgpOworCQlyZXN1bHQgPSAwOworCQlicmVhazsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCXJlc3VsdCA9IHd1c2JoY19yaF9wb3J0X3Jlc2V0KHd1c2JoYywgcG9ydF9pZHgpOworCQlicmVhazsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxFOgorCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQlkZXZfZXJyKGRldiwgIihwb3J0X2lkeCAlZCkgc2V0IGZlYXQgJWQvJWQgVU5JTVBMRU1FTlRFRFxuIiwKKwkJCXBvcnRfaWR4LCBmZWF0dXJlLCBzZWxlY3Rvcik7CisJCXJlc3VsdCA9IC1FTk9TWVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiKHBvcnRfaWR4ICVkKSBzZXQgZmVhdCAlZC8lZCBVTktOT1dOXG4iLAorCQkJcG9ydF9pZHgsIGZlYXR1cmUsIHNlbGVjdG9yKTsKKwkJcmVzdWx0ID0gLUVQSVBFOworCQlicmVhazsKKwl9CitlcnJvcjoKKwlkX2ZuZW5kKDQsIGRldiwgIihmZWF0IDB4JTA0dSwgc2VsZWN0b3IgMHgldSwgcG9ydF9pZHggJWQpID0gJWRcbiIsCisJCWZlYXR1cmUsIHNlbGVjdG9yLCBwb3J0X2lkeCwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2xlYXIgYSBwb3J0IGZlYXR1cmUuLi4KKyAqCisgKiBAd3VzYmhjIGlzIGFzc3VtZWQgcmVmZXJlbmNlZCBhbmQgQHd1c2JoYy0+bXV0ZXggdW5sb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQgd3VzYmhjX3JoX2NsZWFyX3BvcnRfZmVhdChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHUxNiBmZWF0dXJlLAorCQkJCSAgICAgdTggc2VsZWN0b3IsIHU4IHBvcnRfaWR4KQoreworCWludCByZXN1bHQgPSAtRUlOVkFMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHd1c2JoYy0+ZGV2OworCisJZF9mbnN0YXJ0KDQsIGRldiwgIih3dXNiaGMgJXAgZmVhdCAweCUwNHggc2VsZWN0b3IgJWQgcG9ydF9pZHggJWQpXG4iLAorCQkgIHd1c2JoYywgZmVhdHVyZSwgc2VsZWN0b3IsIHBvcnRfaWR4KTsKKworCWlmIChwb3J0X2lkeCA+IHd1c2JoYy0+cG9ydHNfbWF4KQorCQlnb3RvIGVycm9yOworCisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJcmVzdWx0ID0gMDsKKwlzd2l0Y2ggKGZlYXR1cmUpIHsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CS8qIGZha2UgcG9ydCBhbHdheXMgb24gKi8KKwkJLyogQWNjb3JkaW5nIHRvIFVTQjIuMFsxMS4yNC4yLjcuMS40XSwgbm8gbmVlZCB0byBpbXBsZW1lbnQ/ICovCisJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQlicmVhazsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHBvcnRfaWR4KS0+Y2hhbmdlICY9IH5VU0JfUE9SVF9TVEFUX0NfUkVTRVQ7CisJCWJyZWFrOworCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT046CisJCXd1c2JfcG9ydF9ieV9pZHgod3VzYmhjLCBwb3J0X2lkeCktPmNoYW5nZSAmPSB+VVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT047CisJCWJyZWFrOworCWNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6CisJCV9fd3VzYmhjX2Rldl9kaXNhYmxlKHd1c2JoYywgcG9ydF9pZHgpOworCQlicmVhazsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCXd1c2JfcG9ydF9ieV9pZHgod3VzYmhjLCBwb3J0X2lkeCktPmNoYW5nZSAmPSB+VVNCX1BPUlRfU1RBVF9DX0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwljYXNlIDB4ZmZmZjoJCS8qID8/PyBGSVhNRSAqLworCQlkZXZfZXJyKGRldiwgIihwb3J0X2lkeCAlZCkgQ2xlYXIgZmVhdCAlZC8lZCBVTklNUExFTUVOVEVEXG4iLAorCQkJcG9ydF9pZHgsIGZlYXR1cmUsIHNlbGVjdG9yKTsKKwkJLyogZHVtcF9zdGFjaygpOyAqLworCQlyZXN1bHQgPSAtRU5PU1lTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIihwb3J0X2lkeCAlZCkgQ2xlYXIgZmVhdCAlZC8lZCBVTktOT1dOXG4iLAorCQkJcG9ydF9pZHgsIGZlYXR1cmUsIHNlbGVjdG9yKTsKKwkJcmVzdWx0ID0gLUVQSVBFOworCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKK2Vycm9yOgorCWRfZm5lbmQoNCwgZGV2LCAiKHd1c2JoYyAlcCBmZWF0IDB4JTA0eCBzZWxlY3RvciAlZCBwb3J0X2lkeCAlZCkgPSAiCisJCSIlZFxuIiwgd3VzYmhjLCBmZWF0dXJlLCBzZWxlY3RvciwgcG9ydF9pZHgsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcG9ydCdzIHN0YXR1cworICoKKyAqIEB3dXNiaGMgaXMgYXNzdW1lZCByZWZlcmVuY2VkIGFuZCBAd3VzYmhjLT5tdXRleCB1bmxvY2tlZC4KKyAqLworc3RhdGljIGludCB3dXNiaGNfcmhfZ2V0X3BvcnRfc3RhdHVzKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTE2IHBvcnRfaWR4LAorCQkJCSAgICAgdTMyICpfYnVmLCB1MTYgd0xlbmd0aCkKK3sKKwlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKKwl1MTYgKmJ1ZiA9ICh1MTYgKikgX2J1ZjsKKworCWRfZm5zdGFydCgxLCB3dXNiaGMtPmRldiwgIih3dXNiaGMgJXAgcG9ydF9pZHggJXUgd0xlbmd0aCAldSlcbiIsCisJCSAgd3VzYmhjLCBwb3J0X2lkeCwgd0xlbmd0aCk7CisJaWYgKHBvcnRfaWR4ID4gd3VzYmhjLT5wb3J0c19tYXgpCisJCWdvdG8gZXJyb3I7CisJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CisJYnVmWzBdID0gY3B1X3RvX2xlMTYod3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHBvcnRfaWR4KS0+c3RhdHVzKTsKKwlidWZbMV0gPSBjcHVfdG9fbGUxNih3dXNiX3BvcnRfYnlfaWR4KHd1c2JoYywgcG9ydF9pZHgpLT5jaGFuZ2UpOworCXJlc3VsdCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKK2Vycm9yOgorCWRfZm5lbmQoMSwgd3VzYmhjLT5kZXYsICIod3VzYmhjICVwKSA9ICVkLCBidWZmZXI6XG4iLCB3dXNiaGMsIHJlc3VsdCk7CisJZF9kdW1wKDEsIHd1c2JoYy0+ZGV2LCBfYnVmLCB3TGVuZ3RoKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogRW50cnkgcG9pbnQgZm9yIFJvb3QgSHViIG9wZXJhdGlvbnMKKyAqCisgKiBAd3VzYmhjIGlzIGFzc3VtZWQgcmVmZXJlbmNlZCBhbmQgQHd1c2JoYy0+bXV0ZXggdW5sb2NrZWQuCisgKi8KK2ludCB3dXNiaGNfcmhfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCwgdTE2IHJlcW50eXBlLCB1MTYgd1ZhbHVlLAorCQkgICAgICB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworCWludCByZXN1bHQgPSAtRU5PU1lTOworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCisJc3dpdGNoIChyZXFudHlwZSkgeworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJcmVzdWx0ID0gd3VzYmhjX3JoX2dldF9odWJfZGVzY3IoCisJCQl3dXNiaGMsIHdWYWx1ZSwgd0luZGV4LAorCQkJKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmLCB3TGVuZ3RoKTsKKwkJYnJlYWs7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCXJlc3VsdCA9IHd1c2JoY19yaF9jbGVhcl9odWJfZmVhdCh3dXNiaGMsIHdWYWx1ZSk7CisJCWJyZWFrOworCWNhc2UgR2V0SHViU3RhdHVzOgorCQlyZXN1bHQgPSB3dXNiaGNfcmhfZ2V0X2h1Yl9zdGF0dXMod3VzYmhjLCAodTMyICopYnVmLCB3TGVuZ3RoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNldFBvcnRGZWF0dXJlOgorCQlyZXN1bHQgPSB3dXNiaGNfcmhfc2V0X3BvcnRfZmVhdCh3dXNiaGMsIHdWYWx1ZSwgd0luZGV4ID4+IDgsCisJCQkJCQkgKHdJbmRleCAmIDB4ZmYpIC0gMSk7CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJcmVzdWx0ID0gd3VzYmhjX3JoX2NsZWFyX3BvcnRfZmVhdCh3dXNiaGMsIHdWYWx1ZSwgd0luZGV4ID4+IDgsCisJCQkJCQkgICAod0luZGV4ICYgMHhmZikgLSAxKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlyZXN1bHQgPSB3dXNiaGNfcmhfZ2V0X3BvcnRfc3RhdHVzKHd1c2JoYywgd0luZGV4IC0gMSwKKwkJCQkJCSAgICh1MzIgKilidWYsIHdMZW5ndGgpOworCQlicmVhazsKKworCWNhc2UgU2V0SHViRmVhdHVyZToKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHd1c2JoYy0+ZGV2LCAiJXMgKCVwIFslcF0sICV4LCAleCwgJXgsICVwLCAleCkgIgorCQkJIlVOSU1QTEVNRU5URURcbiIsIF9fZnVuY19fLCB1c2JfaGNkLCB3dXNiaGMsIHJlcW50eXBlLAorCQkJd1ZhbHVlLCB3SW5kZXgsIGJ1Ziwgd0xlbmd0aCk7CisJCS8qIGR1bXBfc3RhY2soKTsgKi8KKwkJcmVzdWx0ID0gLUVOT1NZUzsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JoY19yaF9jb250cm9sKTsKKworaW50IHd1c2JoY19yaF9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICp1c2JfaGNkKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCWRldl9lcnIod3VzYmhjLT5kZXYsICIlcyAoJXAgWyVwXSkgVU5JTVBMRU1FTlRFRFxuIiwgX19mdW5jX18sCisJCXVzYl9oY2QsIHd1c2JoYyk7CisJLyogZHVtcF9zdGFjaygpOyAqLworCXJldHVybiAtRU5PU1lTOworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYmhjX3JoX3N1c3BlbmQpOworCitpbnQgd3VzYmhjX3JoX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCkKK3sKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKKwlkZXZfZXJyKHd1c2JoYy0+ZGV2LCAiJXMgKCVwIFslcF0pIFVOSU1QTEVNRU5URURcbiIsIF9fZnVuY19fLAorCQl1c2JfaGNkLCB3dXNiaGMpOworCS8qIGR1bXBfc3RhY2soKTsgKi8KKwlyZXR1cm4gLUVOT1NZUzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JoY19yaF9yZXN1bWUpOworCitpbnQgd3VzYmhjX3JoX3N0YXJ0X3BvcnRfcmVzZXQoc3RydWN0IHVzYl9oY2QgKnVzYl9oY2QsIHVuc2lnbmVkIHBvcnRfaWR4KQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworCWRldl9lcnIod3VzYmhjLT5kZXYsICIlcyAoJXAgWyVwXSwgcG9ydF9pZHggJXUpIFVOSU1QTEVNRU5URURcbiIsCisJCV9fZnVuY19fLCB1c2JfaGNkLCB3dXNiaGMsIHBvcnRfaWR4KTsKKwlXQVJOX09OKDEpOworCXJldHVybiAtRU5PU1lTOworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYmhjX3JoX3N0YXJ0X3BvcnRfcmVzZXQpOworCitzdGF0aWMgdm9pZCB3dXNiX3BvcnRfaW5pdChzdHJ1Y3Qgd3VzYl9wb3J0ICpwb3J0KQoreworCXBvcnQtPnN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7Cit9CisKKy8qCisgKiBBbGxvYyBmYWtlIHBvcnQgc3BlY2lmaWMgZmllbGRzIGFuZCBzdGF0dXMuCisgKi8KK2ludCB3dXNiaGNfcmhfY3JlYXRlKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwlzaXplX3QgcG9ydF9zaXplLCBpdHI7CisJcG9ydF9zaXplID0gd3VzYmhjLT5wb3J0c19tYXggKiBzaXplb2Yod3VzYmhjLT5wb3J0WzBdKTsKKwl3dXNiaGMtPnBvcnQgPSBremFsbG9jKHBvcnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHd1c2JoYy0+cG9ydCA9PSBOVUxMKQorCQlnb3RvIGVycm9yX3BvcnRfYWxsb2M7CisJZm9yIChpdHIgPSAwOyBpdHIgPCB3dXNiaGMtPnBvcnRzX21heDsgaXRyKyspCisJCXd1c2JfcG9ydF9pbml0KCZ3dXNiaGMtPnBvcnRbaXRyXSk7CisJcmVzdWx0ID0gMDsKK2Vycm9yX3BvcnRfYWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3dXNiaGNfcmhfZGVzdHJveShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJa2ZyZWUod3VzYmhjLT5wb3J0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMDFjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC0wLDAgKzEsNjQyIEBACisvKgorICogV2lyZWxlc3MgVVNCIEhvc3QgQ29udHJvbGxlcgorICogU2VjdXJpdHkgc3VwcG9ydDogZW5jcnlwdGlvbiBlbmFibGVtZW50LCBldGMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSAid3VzYmhjLmgiCisKKy8qCisgKiBERUJVRyAmIFNFQ1VSSVRZIFdBUk5JTkchISEhCisgKgorICogSWYgeW91IGVuYWJsZSB0aGlzIHBhc3QgMSwgdGhlIGRlYnVnIGNvZGUgd2lsbCB3ZWFrZW4gdGhlCisgKiBjcnlwdG9ncmFwaGljIHNhZmV0eSBvZiB0aGUgc3lzdGVtIChvbiBwdXJwb3NlLCBmb3IgZGVidWdnaW5nKS4KKyAqCisgKiBXZWFrZW4gbWVhbnM6CisgKiAgIHdlIHByaW50IHNlY3JldCBrZXlzIGFuZCBpbnRlcm1lZGlhdGUgdmFsdWVzIGFsbCB0aGUgd2F5LAorICovCisjdW5kZWYgRF9MT0NBTAorI2RlZmluZSBEX0xPQ0FMIDIKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworc3RhdGljIHZvaWQgd3VzYmhjX3NldF9ndGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIHd1c2JoY19ndGtfcmVrZXlfZG9uZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK2ludCB3dXNiaGNfc2VjX2NyZWF0ZShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJd3VzYmhjLT5ndGsuZGVzY3IuYkxlbmd0aCA9IHNpemVvZih3dXNiaGMtPmd0ay5kZXNjcikgKyBzaXplb2Yod3VzYmhjLT5ndGsuZGF0YSk7CisJd3VzYmhjLT5ndGsuZGVzY3IuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0tFWTsKKwl3dXNiaGMtPmd0ay5kZXNjci5iUmVzZXJ2ZWQgPSAwOworCisJd3VzYmhjLT5ndGtfaW5kZXggPSB3dXNiX2tleV9pbmRleCgwLCBXVVNCX0tFWV9JTkRFWF9UWVBFX0dUSywKKwkJCQkJICAgV1VTQl9LRVlfSU5ERVhfT1JJR0lOQVRPUl9IT1NUKTsKKworCUlOSVRfV09SSygmd3VzYmhjLT5ndGtfcmVrZXlfZG9uZV93b3JrLCB3dXNiaGNfZ3RrX3Jla2V5X2RvbmVfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBDYWxsZWQgd2hlbiB0aGUgSEMgaXMgZGVzdHJveWVkICovCit2b2lkIHd1c2JoY19zZWNfZGVzdHJveShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7Cit9CisKKworLyoqCisgKiB3dXNiaGNfbmV4dF90a2lkIC0gZ2VuZXJhdGUgYSBuZXcsIGN1cnJlbnRseSB1bnVzZWQsIFRLSUQKKyAqIEB3dXNiaGM6ICAgdGhlIFdVU0IgaG9zdCBjb250cm9sbGVyCisgKiBAd3VzYl9kZXY6IHRoZSBkZXZpY2Ugd2hvc2UgUFRLIHRoZSBUS0lEIGlzIGZvcgorICogICAgICAgICAgICAob3IgTlVMTCBmb3IgYSBUS0lEIGZvciBhIEdUSykKKyAqCisgKiBUaGUgZ2VuZXJhdGVkIFRLSUQgY29uc2lzdCBvZiB0d28gcGFydHM6IHRoZSBkZXZpY2UncyBhdXRoZW5pY2F0ZWQKKyAqIGFkZHJlc3MgKG9yIDAgb3IgYSBHVEspOyBhbmQgYW4gaW5jcmVtZW50aW5nIG51bWJlci4gIFRoaXMgZW5zdXJlcworICogdGhhdCBUS0lEcyBjYW5ub3QgYmUgc2hhcmVkIGJldHdlZW4gZGV2aWNlcyBhbmQgYnkgdGhlIHRpbWUgdGhlCisgKiBpbmNyZW1lbnRpbmcgbnVtYmVyIHdyYXBzIGFyb3VuZCB0aGUgb2xkZXIgVEtJRHMgd2lsbCBubyBsb25nZXIgYmUKKyAqIGluIHVzZSAoYSBtYXhpbXVtIG9mIHR3byBrZXlzIG1heSBiZSBhY3RpdmUgYXQgYW55IG9uZSB0aW1lKS4KKyAqLworc3RhdGljIHUzMiB3dXNiaGNfbmV4dF90a2lkKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwl1MzIgKnRraWQ7CisJdTMyIGFkZHI7CisKKwlpZiAod3VzYl9kZXYgPT0gTlVMTCkgeworCQl0a2lkID0gJnd1c2JoYy0+Z3RrX3RraWQ7CisJCWFkZHIgPSAwOworCX0gZWxzZSB7CisJCXRraWQgPSAmd3VzYl9wb3J0X2J5X2lkeCh3dXNiaGMsIHd1c2JfZGV2LT5wb3J0X2lkeCktPnB0a190a2lkOworCQlhZGRyID0gd3VzYl9kZXYtPmFkZHIgJiAweDdmOworCX0KKworCSp0a2lkID0gKGFkZHIgPDwgOCkgfCAoKCp0a2lkICsgMSkgJiAweGZmKTsKKworCXJldHVybiAqdGtpZDsKK30KKworc3RhdGljIHZvaWQgd3VzYmhjX2dlbmVyYXRlX2d0ayhzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJY29uc3Qgc2l6ZV90IGtleV9zaXplID0gc2l6ZW9mKHd1c2JoYy0+Z3RrLmRhdGEpOworCXUzMiB0a2lkOworCisJdGtpZCA9IHd1c2JoY19uZXh0X3RraWQod3VzYmhjLCBOVUxMKTsKKworCXd1c2JoYy0+Z3RrLmRlc2NyLnRUS0lEWzBdID0gKHRraWQgPj4gIDApICYgMHhmZjsKKwl3dXNiaGMtPmd0ay5kZXNjci50VEtJRFsxXSA9ICh0a2lkID4+ICA4KSAmIDB4ZmY7CisJd3VzYmhjLT5ndGsuZGVzY3IudFRLSURbMl0gPSAodGtpZCA+PiAxNikgJiAweGZmOworCisJZ2V0X3JhbmRvbV9ieXRlcyh3dXNiaGMtPmd0ay5kZXNjci5iS2V5RGF0YSwga2V5X3NpemUpOworfQorCisvKioKKyAqIHd1c2JoY19zZWNfc3RhcnQgLSBzdGFydCB0aGUgc2VjdXJpdHkgbWFuYWdlbWVudCBwcm9jZXNzCisgKiBAd3VzYmhjOiB0aGUgV1VTQiBob3N0IGNvbnRyb2xsZXIKKyAqCisgKiBHZW5lcmF0ZSBhbmQgc2V0IGFuIGluaXRpYWwgR1RLIG9uIHRoZSBob3N0IGNvbnRyb2xsZXIuCisgKgorICogQ2FsbGVkIHdoZW4gdGhlIEhDIGlzIHN0YXJ0ZWQuCisgKi8KK2ludCB3dXNiaGNfc2VjX3N0YXJ0KHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwljb25zdCBzaXplX3Qga2V5X3NpemUgPSBzaXplb2Yod3VzYmhjLT5ndGsuZGF0YSk7CisJaW50IHJlc3VsdDsKKworCXd1c2JoY19nZW5lcmF0ZV9ndGsod3VzYmhjKTsKKworCXJlc3VsdCA9IHd1c2JoYy0+c2V0X2d0ayh3dXNiaGMsIHd1c2JoYy0+Z3RrX3RraWQsCisJCQkJICZ3dXNiaGMtPmd0ay5kZXNjci5iS2V5RGF0YSwga2V5X3NpemUpOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKHd1c2JoYy0+ZGV2LCAiY2Fubm90IHNldCBHVEsgZm9yIHRoZSBob3N0OiAlZFxuIiwKKwkJCXJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIHd1c2JoY19zZWNfc3RvcCAtIHN0b3AgdGhlIHNlY3VyaXR5IG1hbmFnZW1lbnQgcHJvY2VzcworICogQHd1c2JoYzogdGhlIFdVU0IgaG9zdCBjb250cm9sbGVyCisgKgorICogV2FpdCBmb3IgYW55IHBlbmRpbmcgR1RLIHJla2V5cyB0byBzdG9wLgorICovCit2b2lkIHd1c2JoY19zZWNfc3RvcChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJY2FuY2VsX3dvcmtfc3luYygmd3VzYmhjLT5ndGtfcmVrZXlfZG9uZV93b3JrKTsKK30KKworCisvKiogQHJldHVybnMgZW5jcnlwdGlvbiB0eXBlIG5hbWUgKi8KK2NvbnN0IGNoYXIgKnd1c2JfZXRfbmFtZSh1OCB4KQoreworCXN3aXRjaCAoeCkgeworCWNhc2UgVVNCX0VOQ19UWVBFX1VOU0VDVVJFOglyZXR1cm4gInVuc2VjdXJlIjsKKwljYXNlIFVTQl9FTkNfVFlQRV9XSVJFRDoJcmV0dXJuICJ3aXJlZCI7CisJY2FzZSBVU0JfRU5DX1RZUEVfQ0NNXzE6CXJldHVybiAiQ0NNLTEiOworCWNhc2UgVVNCX0VOQ19UWVBFX1JTQV8xOglyZXR1cm4gIlJTQS0xIjsKKwlkZWZhdWx0OiAJCQlyZXR1cm4gInVua25vd24iOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JfZXRfbmFtZSk7CisKKy8qCisgKiBTZXQgdGhlIGRldmljZSBlbmNyeXB0aW9uIG1ldGhvZAorICoKKyAqIFdlIHRlbGwgdGhlIGRldmljZSB3aGljaCBlbmNyeXB0aW9uIG1ldGhvZCB0byB1c2U7IHdlIGRvIHRoaXMgd2hlbgorICogc2V0dGluZyB1cCB0aGUgZGV2aWNlJ3Mgc2VjdXJpdHkuCisgKi8KK3N0YXRpYyBpbnQgd3VzYl9kZXZfc2V0X2VuY3J5cHRpb24oc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIGludCB2YWx1ZSkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7CisJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldiA9IHVzYl9kZXYtPnd1c2JfZGV2OworCisJaWYgKHZhbHVlKSB7CisJCXZhbHVlID0gd3VzYl9kZXYtPmNjbTFfZXRkLmJFbmNyeXB0aW9uVmFsdWU7CisJfSBlbHNlIHsKKwkJLyogRklYTUU6IHNob3VsZCBiZSB3dXNiX2Rldi0+ZXRkW1VOU0VDVVJFXS5iRW5jcnlwdGlvblZhbHVlICovCisJCXZhbHVlID0gMDsKKwl9CisJLyogU2V0IGRldmljZSdzICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKKwkJCVVTQl9SRVFfU0VUX0VOQ1JZUFRJT04sCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLCAwLCBOVUxMLCAwLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgIkNhbid0IHNldCBkZXZpY2UncyBXVVNCIGVuY3J5cHRpb24gdG8gIgorCQkJIiVzICh2YWx1ZSAlZCk6ICVkXG4iLAorCQkJd3VzYl9ldF9uYW1lKHd1c2JfZGV2LT5jY20xX2V0ZC5iRW5jcnlwdGlvblR5cGUpLAorCQkJd3VzYl9kZXYtPmNjbTFfZXRkLmJFbmNyeXB0aW9uVmFsdWUsICByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTZXQgdGhlIEdUSyB0byBiZSB1c2VkIGJ5IGEgZGV2aWNlLgorICoKKyAqIFRoZSBkZXZpY2UgbXVzdCBiZSBhdXRoZW50aWNhdGVkLgorICovCitzdGF0aWMgaW50IHd1c2JfZGV2X3NldF9ndGsoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gd3VzYl9kZXYtPnVzYl9kZXY7CisKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKAorCQl1c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiX2RldiwgMCksCisJCVVTQl9SRVFfU0VUX0RFU0NSSVBUT1IsCisJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQlVU0JfRFRfS0VZIDw8IDggfCB3dXNiaGMtPmd0a19pbmRleCwgMCwKKwkJJnd1c2JoYy0+Z3RrLmRlc2NyLCB3dXNiaGMtPmd0ay5kZXNjci5iTGVuZ3RoLAorCQkxMDAwKTsKK30KKworCisvKiBGSVhNRTogcHJvdG90eXBlIGZvciBhZGRpbmcgc2VjdXJpdHkgKi8KK2ludCB3dXNiX2Rldl9zZWNfYWRkKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywKKwkJICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldiwgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwlpbnQgcmVzdWx0LCBieXRlcywgc2VjZF9zaXplOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7CisJc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yIHNlY2Q7CisJY29uc3Qgc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgKmV0ZCwgKmNjbTFfZXRkID0gTlVMTDsKKwl2b2lkICpzZWNkX2J1ZjsKKwljb25zdCB2b2lkICppdHIsICp0b3A7CisJY2hhciBidWZbNjRdOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIih1c2JfZGV2ICVwLCB3dXNiX2RldiAlcClcbiIsIHVzYl9kZXYsIHd1c2JfZGV2KTsKKwlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX1NFQ1VSSVRZLAorCQkJCSAgICAwLCAmc2VjZCwgc2l6ZW9mKHNlY2QpKTsKKwlpZiAocmVzdWx0IDwgc2l6ZW9mKHNlY2QpKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKKwkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3NlY2Q7CisJfQorCXNlY2Rfc2l6ZSA9IGxlMTZfdG9fY3B1KHNlY2Qud1RvdGFsTGVuZ3RoKTsKKwlkX3ByaW50Zig1LCBkZXYsICJnb3QgJWQgYnl0ZXMgb2Ygc2VjIGRlc2NyaXB0b3IsIHRvdGFsIGlzICVkXG4iLAorCQkgcmVzdWx0LCBzZWNkX3NpemUpOworCXNlY2RfYnVmID0ga21hbGxvYyhzZWNkX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzZWNkX2J1ZiA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIHNlY3VyaXR5IGRlc2NyaXB0b3JzXG4iKTsKKwkJZ290byBlcnJvcl9zZWNkX2FsbG9jOworCX0KKwlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX1NFQ1VSSVRZLAorCQkJCSAgICAwLCBzZWNkX2J1Ziwgc2VjZF9zaXplKTsKKwlpZiAocmVzdWx0IDwgc2VjZF9zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKKwkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3NlY2RfYWxsOworCX0KKwlkX3ByaW50Zig1LCBkZXYsICJnb3QgJWQgYnl0ZXMgb2Ygc2VjIGRlc2NyaXB0b3JzXG4iLCByZXN1bHQpOworCWJ5dGVzID0gMDsKKwlpdHIgPSBzZWNkX2J1ZiArIHNpemVvZihzZWNkKTsKKwl0b3AgPSBzZWNkX2J1ZiArIHJlc3VsdDsKKwl3aGlsZSAoaXRyIDwgdG9wKSB7CisJCWV0ZCA9IGl0cjsKKwkJaWYgKHRvcCAtIGl0ciA8IHNpemVvZigqZXRkKSkgeworCQkJZGV2X2VycihkZXYsICJCVUc6IGJhZCBkZXZpY2Ugc2VjdXJpdHkgZGVzY3JpcHRvcjsgIgorCQkJCSJub3QgZW5vdWdoIGRhdGEgKCV6dSB2cyAlenUgYnl0ZXMgbGVmdClcbiIsCisJCQkJdG9wIC0gaXRyLCBzaXplb2YoKmV0ZCkpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGV0ZC0+Ykxlbmd0aCA8IHNpemVvZigqZXRkKSkgeworCQkJZGV2X2VycihkZXYsICJCVUc6IGJhZCBkZXZpY2UgZW5jcnlwdGlvbiBkZXNjcmlwdG9yOyAiCisJCQkJImRlc2NyaXB0b3IgaXMgdG9vIHNob3J0ICIKKwkJCQkiKCV1IHZzICV6dSBuZWVkZWQpXG4iLAorCQkJCWV0ZC0+Ykxlbmd0aCwgc2l6ZW9mKCpldGQpKTsKKwkJCWJyZWFrOworCQl9CisJCWl0ciArPSBldGQtPmJMZW5ndGg7CisJCWJ5dGVzICs9IHNucHJpbnRmKGJ1ZiArIGJ5dGVzLCBzaXplb2YoYnVmKSAtIGJ5dGVzLAorCQkJCSAgIiVzICgweCUwMngvJTAyeCkgIiwKKwkJCQkgIHd1c2JfZXRfbmFtZShldGQtPmJFbmNyeXB0aW9uVHlwZSksCisJCQkJICBldGQtPmJFbmNyeXB0aW9uVmFsdWUsIGV0ZC0+YkF1dGhLZXlJbmRleCk7CisJCWlmIChldGQtPmJFbmNyeXB0aW9uVHlwZSA9PSBVU0JfRU5DX1RZUEVfQ0NNXzEpCisJCQljY20xX2V0ZCA9IGV0ZDsKKwl9CisJLyogVGhpcyBjb2RlIG9ubHkgc3VwcG9ydHMgQ0NNMSBhcyBvZiBub3cuICovCisJLyogRklYTUU6IHVzZXIgaGFzIHRvIGNob29zZSB3aGljaCBzZWMgbW9kZSB0byB1c2U/CisJICogSW4gdGhlb3J5IHdlIHdhbnQgQ0NNICovCisJaWYgKGNjbTFfZXRkID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJXVVNCIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgQ0NNMSBlbmNyeXB0aW9uLCAiCisJCQkiY2FuJ3QgdXNlIVxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3Jfbm9fY2NtMTsKKwl9CisJd3VzYl9kZXYtPmNjbTFfZXRkID0gKmNjbTFfZXRkOworCWRldl9pbmZvKGRldiwgInN1cHBvcnRlZCBlbmNyeXB0aW9uOiAlczsgdXNpbmcgJXMgKDB4JTAyeC8lMDJ4KVxuIiwKKwkJIGJ1Ziwgd3VzYl9ldF9uYW1lKGNjbTFfZXRkLT5iRW5jcnlwdGlvblR5cGUpLAorCQkgY2NtMV9ldGQtPmJFbmNyeXB0aW9uVmFsdWUsIGNjbTFfZXRkLT5iQXV0aEtleUluZGV4KTsKKwlyZXN1bHQgPSAwOworCWtmcmVlKHNlY2RfYnVmKTsKK291dDoKKwlkX2ZuZW5kKDMsIGRldiwgIih1c2JfZGV2ICVwLCB3dXNiX2RldiAlcCkgPSAlZFxuIiwKKwkJdXNiX2Rldiwgd3VzYl9kZXYsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKKworCitlcnJvcl9ub19jY20xOgorZXJyb3Jfc2VjZF9hbGw6CisJa2ZyZWUoc2VjZF9idWYpOworZXJyb3Jfc2VjZF9hbGxvYzoKK2Vycm9yX3NlY2Q6CisJZ290byBvdXQ7Cit9CisKK3ZvaWQgd3VzYl9kZXZfc2VjX3JtKHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJLyogTm90aGluZyBzbyBmYXIgKi8KK30KKworc3RhdGljIHZvaWQgaHNfcHJpbnRrKHVuc2lnbmVkIGxldmVsLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCB1c2JfaGFuZHNoYWtlICpocykKK3sKKwlkX3ByaW50ZihsZXZlbCwgZGV2LAorCQkgIiAgYk1lc3NhZ2VOdW1iZXI6ICV1XG4iCisJCSAiICBiU3RhdHVzOiAgICAgICAgJXVcbiIKKwkJICIgIHRUS0lEOiAgICAgICAgICAlMDJ4ICUwMnggJTAyeFxuIgorCQkgIiAgQ0RJRDogICAgICAgICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIgorCQkgIiAgICAgICAgICAgICAgICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIgorCQkgIiAgbm9uY2U6ICAgICAgICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIgorCQkgIiAgICAgICAgICAgICAgICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIgorCQkgIiAgTUlDOiAgICAgICAgICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJIGhzLT5iTWVzc2FnZU51bWJlciwgaHMtPmJTdGF0dXMsCisJCSBocy0+dFRLSURbMl0sIGhzLT50VEtJRFsxXSwgaHMtPnRUS0lEWzBdLAorCQkgaHMtPkNESURbMF0sIGhzLT5DRElEWzFdLCBocy0+Q0RJRFsyXSwgaHMtPkNESURbM10sCisJCSBocy0+Q0RJRFs0XSwgaHMtPkNESURbNV0sIGhzLT5DRElEWzZdLCBocy0+Q0RJRFs3XSwKKwkJIGhzLT5DRElEWzhdLCBocy0+Q0RJRFs5XSwgaHMtPkNESURbMTBdLCBocy0+Q0RJRFsxMV0sCisJCSBocy0+Q0RJRFsxMl0sIGhzLT5DRElEWzEzXSwgaHMtPkNESURbMTRdLCBocy0+Q0RJRFsxNV0sCisJCSBocy0+bm9uY2VbMF0sIGhzLT5ub25jZVsxXSwgaHMtPm5vbmNlWzJdLCBocy0+bm9uY2VbM10sCisJCSBocy0+bm9uY2VbNF0sIGhzLT5ub25jZVs1XSwgaHMtPm5vbmNlWzZdLCBocy0+bm9uY2VbN10sCisJCSBocy0+bm9uY2VbOF0sIGhzLT5ub25jZVs5XSwgaHMtPm5vbmNlWzEwXSwgaHMtPm5vbmNlWzExXSwKKwkJIGhzLT5ub25jZVsxMl0sIGhzLT5ub25jZVsxM10sIGhzLT5ub25jZVsxNF0sIGhzLT5ub25jZVsxNV0sCisJCSBocy0+TUlDWzBdLCBocy0+TUlDWzFdLCBocy0+TUlDWzJdLCBocy0+TUlDWzNdLAorCQkgaHMtPk1JQ1s0XSwgaHMtPk1JQ1s1XSwgaHMtPk1JQ1s2XSwgaHMtPk1JQ1s3XSk7Cit9CisKKy8qKgorICogVXBkYXRlIHRoZSBhZGRyZXNzIG9mIGFuIHVuYXV0aGVudGljYXRlZCBXVVNCIGRldmljZQorICoKKyAqIE9uY2Ugd2UgaGF2ZSBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZCwgd2UgdGFrZSBpdCB0byBhZGRyMCBzdGF0ZQorICogYW5kIHRoZW4gdG8gYSBub3JtYWwgYWRkcmVzcy4KKyAqCisgKiBCZWZvcmUgdGhlIGRldmljZSdzIGFkZHJlc3MgKGFzIGtub3duIGJ5IGl0KSB3YXMgdXNiX2Rldi0+ZGV2bnVtIHwKKyAqIDB4ODAgKHVuYXV0aGVudGljYXRlZCBhZGRyZXNzKS4gV2l0aCB0aGlzIHdlIHVwZGF0ZSBpdCB0byB1c2JfZGV2LT5kZXZudW0uCisgKi8KK3N0YXRpYyBpbnQgd3VzYl9kZXZfdXBkYXRlX2FkZHJlc3Moc3RydWN0IHd1c2JoYyAqd3VzYmhjLAorCQkJCSAgIHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB3dXNiX2Rldi0+dXNiX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXNiX2Rldi0+ZGV2OworCXU4IG5ld19hZGRyZXNzID0gd3VzYl9kZXYtPmFkZHIgJiAweDdGOworCisJLyogU2V0IGFkZHJlc3MgMCAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiX2RldiwgMCksCisJCQkJIFVTQl9SRVFfU0VUX0FERFJFU1MsIDAsCisJCQkJIDAsIDAsIE5VTEwsIDAsIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJhdXRoIGZhaWxlZDogY2FuJ3Qgc2V0IGFkZHJlc3MgMDogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX2FkZHIwOworCX0KKwlyZXN1bHQgPSB3dXNiX3NldF9kZXZfYWRkcih3dXNiaGMsIHd1c2JfZGV2LCAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9hZGRyMDsKKwl1c2JfZXAwX3JlaW5pdCh1c2JfZGV2KTsKKworCS8qIFNldCBuZXcgKGF1dGhlbnRpY2F0ZWQpIGFkZHJlc3MuICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKKwkJCQkgVVNCX1JFUV9TRVRfQUREUkVTUywgMCwKKwkJCQkgbmV3X2FkZHJlc3MsIDAsIE5VTEwsIDAsCisJCQkJIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJhdXRoIGZhaWxlZDogY2FuJ3Qgc2V0IGFkZHJlc3MgJXU6ICVkXG4iLAorCQkJbmV3X2FkZHJlc3MsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3JfYWRkcjsKKwl9CisJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgbmV3X2FkZHJlc3MpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2FkZHI7CisJdXNiX2VwMF9yZWluaXQodXNiX2Rldik7CisJdXNiX2Rldi0+YXV0aGVudGljYXRlZCA9IDE7CitlcnJvcl9hZGRyOgorZXJyb3JfYWRkcjA6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqCisgKgorICovCisvKiBGSVhNRTogc3BsaXQgYW5kIGNsZWFudXAgKi8KK2ludCB3dXNiX2Rldl80d2F5X2hhbmRzaGFrZShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYsCisJCQkgICAgc3RydWN0IHd1c2JfY2toZGlkICpjaykKK3sKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHd1c2JfZGV2LT51c2JfZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7CisJdTMyIHRraWQ7CisJX19sZTMyIHRraWRfbGU7CisJc3RydWN0IHVzYl9oYW5kc2hha2UgKmhzOworCXN0cnVjdCBhZXNfY2NtX25vbmNlIGNjbV9uOworCXU4IG1pY1s4XTsKKwlzdHJ1Y3Qgd3VzYl9rZXlkdnRfaW4ga2V5ZHZ0X2luOworCXN0cnVjdCB3dXNiX2tleWR2dF9vdXQga2V5ZHZ0X291dDsKKworCWhzID0ga3phbGxvYygzKnNpemVvZihoc1swXSksIEdGUF9LRVJORUwpOworCWlmIChocyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgYWxsb2NhdGUgaGFuZHNoYWtlIGRhdGFcbiIpOworCQlnb3RvIGVycm9yX2t6YWxsb2M7CisJfQorCisJLyogV2UgbmVlZCB0byB0dXJuIGVuY3J5cHRpb24gYmVmb3JlIGJlZ2lubmluZyB0aGUgNHdheQorCSAqIGhzaGFrZSAoV1VTQjEuMFsuMy4yLjJdKSAqLworCXJlc3VsdCA9IHd1c2JfZGV2X3NldF9lbmNyeXB0aW9uKHVzYl9kZXYsIDEpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2Rldl9zZXRfZW5jcnlwdGlvbjsKKworCXRraWQgPSB3dXNiaGNfbmV4dF90a2lkKHd1c2JoYywgd3VzYl9kZXYpOworCXRraWRfbGUgPSBjcHVfdG9fbGUzMih0a2lkKTsKKworCWhzWzBdLmJNZXNzYWdlTnVtYmVyID0gMTsKKwloc1swXS5iU3RhdHVzID0gMDsKKwltZW1jcHkoaHNbMF0udFRLSUQsICZ0a2lkX2xlLCBzaXplb2YoaHNbMF0udFRLSUQpKTsKKwloc1swXS5iUmVzZXJ2ZWQgPSAwOworCW1lbWNweShoc1swXS5DRElELCAmd3VzYl9kZXYtPmNkaWQsIHNpemVvZihoc1swXS5DRElEKSk7CisJZ2V0X3JhbmRvbV9ieXRlcygmaHNbMF0ubm9uY2UsIHNpemVvZihoc1swXS5ub25jZSkpOworCW1lbXNldChoc1swXS5NSUMsIDAsIHNpemVvZihoc1swXS5NSUMpKTsJLyogUGVyIFdVU0IxLjBbVDctMjJdICovCisKKwlkX3ByaW50ZigxLCBkZXYsICJJOiBzZW5kaW5nIGhzMTpcbiIpOworCWhzX3ByaW50aygyLCBkZXYsICZoc1swXSk7CisKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCXVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKKwkJVVNCX1JFUV9TRVRfSEFORFNIQUtFLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJMSwgMCwgJmhzWzBdLCBzaXplb2YoaHNbMF0pLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiSGFuZHNoYWtlMTogcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX2hzMTsKKwl9CisKKwkvKiBIYW5kc2hha2UgMiwgZnJvbSB0aGUgZGV2aWNlIC0tIG5lZWQgdG8gdmVyaWZ5IGZpZWxkcyAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZygKKwkJdXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKHVzYl9kZXYsIDApLAorCQlVU0JfUkVRX0dFVF9IQU5EU0hBS0UsCisJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCTIsIDAsICZoc1sxXSwgc2l6ZW9mKGhzWzFdKSwgMTAwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkhhbmRzaGFrZTI6IHJlcXVlc3QgZmFpbGVkOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9oczI7CisJfQorCWRfcHJpbnRmKDEsIGRldiwgImdvdCBIUzI6XG4iKTsKKwloc19wcmludGsoMiwgZGV2LCAmaHNbMV0pOworCisJcmVzdWx0ID0gLUVJTlZBTDsKKwlpZiAoaHNbMV0uYk1lc3NhZ2VOdW1iZXIgIT0gMikgeworCQlkZXZfZXJyKGRldiwgIkhhbmRzaGFrZTIgZmFpbGVkOiBiYWQgbWVzc2FnZSBudW1iZXIgJXVcbiIsCisJCQloc1sxXS5iTWVzc2FnZU51bWJlcik7CisJCWdvdG8gZXJyb3JfaHMyOworCX0KKwlpZiAoaHNbMV0uYlN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiSGFuZHNoYWtlMiBmYWlsZWQ6IGJhZCBzdGF0dXMgJXVcbiIsCisJCQloc1sxXS5iU3RhdHVzKTsKKwkJZ290byBlcnJvcl9oczI7CisJfQorCWlmIChtZW1jbXAoaHNbMF0udFRLSUQsIGhzWzFdLnRUS0lELCBzaXplb2YoaHNbMF0udFRLSUQpKSkgeworCQlkZXZfZXJyKGRldiwgIkhhbmRzaGFrZTIgZmFpbGVkOiBUS0lEIG1pc21hdGNoICIKKwkJCSIoIzEgMHglMDJ4JTAyeCUwMnggdnMgIzIgMHglMDJ4JTAyeCUwMngpXG4iLAorCQkJaHNbMF0udFRLSURbMF0sIGhzWzBdLnRUS0lEWzFdLCBoc1swXS50VEtJRFsyXSwKKwkJCWhzWzFdLnRUS0lEWzBdLCBoc1sxXS50VEtJRFsxXSwgaHNbMV0udFRLSURbMl0pOworCQlnb3RvIGVycm9yX2hzMjsKKwl9CisJaWYgKG1lbWNtcChoc1swXS5DRElELCBoc1sxXS5DRElELCBzaXplb2YoaHNbMF0uQ0RJRCkpKSB7CisJCWRldl9lcnIoZGV2LCAiSGFuZHNoYWtlMiBmYWlsZWQ6IENESUQgbWlzbWF0Y2hcbiIpOworCQlnb3RvIGVycm9yX2hzMjsKKwl9CisKKwkvKiBTZXR1cCB0aGUgQ0NNIG5vbmNlICovCisJbWVtc2V0KCZjY21fbi5zZm4sIDAsIHNpemVvZihjY21fbi5zZm4pKTsJLyogUGVyIFdVU0IxLjBbNi41LjJdICovCisJbWVtY3B5KGNjbV9uLnRraWQsICZ0a2lkX2xlLCBzaXplb2YoY2NtX24udGtpZCkpOworCWNjbV9uLnNyY19hZGRyID0gd3VzYmhjLT51d2JfcmMtPnV3Yl9kZXYuZGV2X2FkZHI7CisJY2NtX24uZGVzdF9hZGRyLmRhdGFbMF0gPSB3dXNiX2Rldi0+YWRkcjsKKwljY21fbi5kZXN0X2FkZHIuZGF0YVsxXSA9IDA7CisKKwkvKiBEZXJpdmUgdGhlIEtDSyBhbmQgUFRLIGZyb20gQ0ssIHRoZSBDQ00sIEggYW5kIEQgbm9uY2VzICovCisJbWVtY3B5KGtleWR2dF9pbi5obm9uY2UsIGhzWzBdLm5vbmNlLCBzaXplb2Yoa2V5ZHZ0X2luLmhub25jZSkpOworCW1lbWNweShrZXlkdnRfaW4uZG5vbmNlLCBoc1sxXS5ub25jZSwgc2l6ZW9mKGtleWR2dF9pbi5kbm9uY2UpKTsKKwlyZXN1bHQgPSB3dXNiX2tleV9kZXJpdmUoJmtleWR2dF9vdXQsIGNrLT5kYXRhLCAmY2NtX24sICZrZXlkdnRfaW4pOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiSGFuZHNoYWtlMiBmYWlsZWQ6IGNhbm5vdCBkZXJpdmUga2V5czogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX2hzMjsKKwl9CisJZF9wcmludGYoMiwgZGV2LCAiS0NLOlxuIik7CisJZF9kdW1wKDIsIGRldiwga2V5ZHZ0X291dC5rY2ssIHNpemVvZihrZXlkdnRfb3V0LmtjaykpOworCWRfcHJpbnRmKDIsIGRldiwgIlBUSzpcbiIpOworCWRfZHVtcCgyLCBkZXYsIGtleWR2dF9vdXQucHRrLCBzaXplb2Yoa2V5ZHZ0X291dC5wdGspKTsKKworCS8qIENvbXB1dGUgTUlDIGFuZCB2ZXJpZnkgaXQgKi8KKwlyZXN1bHQgPSB3dXNiX29vYl9taWMobWljLCBrZXlkdnRfb3V0LmtjaywgJmNjbV9uLCAmaHNbMV0pOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiSGFuZHNoYWtlMiBmYWlsZWQ6IGNhbm5vdCBjb21wdXRlIE1JQzogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX2hzMjsKKwl9CisKKwlkX3ByaW50ZigyLCBkZXYsICJNSUM6XG4iKTsKKwlkX2R1bXAoMiwgZGV2LCBtaWMsIHNpemVvZihtaWMpKTsKKwlpZiAobWVtY21wKGhzWzFdLk1JQywgbWljLCBzaXplb2YoaHNbMV0uTUlDKSkpIHsKKwkJZGV2X2VycihkZXYsICJIYW5kc2hha2UyIGZhaWxlZDogTUlDIG1pc21hdGNoXG4iKTsKKwkJZ290byBlcnJvcl9oczI7CisJfQorCisJLyogU2VuZCBIYW5kc2hha2UzICovCisJaHNbMl0uYk1lc3NhZ2VOdW1iZXIgPSAzOworCWhzWzJdLmJTdGF0dXMgPSAwOworCW1lbWNweShoc1syXS50VEtJRCwgJnRraWRfbGUsIHNpemVvZihoc1syXS50VEtJRCkpOworCWhzWzJdLmJSZXNlcnZlZCA9IDA7CisJbWVtY3B5KGhzWzJdLkNESUQsICZ3dXNiX2Rldi0+Y2RpZCwgc2l6ZW9mKGhzWzJdLkNESUQpKTsKKwltZW1jcHkoaHNbMl0ubm9uY2UsIGhzWzBdLm5vbmNlLCBzaXplb2YoaHNbMl0ubm9uY2UpKTsKKwlyZXN1bHQgPSB3dXNiX29vYl9taWMoaHNbMl0uTUlDLCBrZXlkdnRfb3V0LmtjaywgJmNjbV9uLCAmaHNbMl0pOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiSGFuZHNoYWtlMyBmYWlsZWQ6IGNhbm5vdCBjb21wdXRlIE1JQzogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX2hzMjsKKwl9CisKKwlkX3ByaW50ZigxLCBkZXYsICJJOiBzZW5kaW5nIGhzMzpcbiIpOworCWhzX3ByaW50aygyLCBkZXYsICZoc1syXSk7CisKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCXVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKKwkJVVNCX1JFUV9TRVRfSEFORFNIQUtFLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJMywgMCwgJmhzWzJdLCBzaXplb2YoaHNbMl0pLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiSGFuZHNoYWtlMzogcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX2hzMzsKKwl9CisKKwlkX3ByaW50ZigxLCBkZXYsICJJOiB0dXJuaW5nIG9uIGVuY3J5cHRpb24gb24gaG9zdCBmb3IgZGV2aWNlXG4iKTsKKwlkX2R1bXAoMiwgZGV2LCBrZXlkdnRfb3V0LnB0aywgc2l6ZW9mKGtleWR2dF9vdXQucHRrKSk7CisJcmVzdWx0ID0gd3VzYmhjLT5zZXRfcHRrKHd1c2JoYywgd3VzYl9kZXYtPnBvcnRfaWR4LCB0a2lkLAorCQkJCSBrZXlkdnRfb3V0LnB0aywgc2l6ZW9mKGtleWR2dF9vdXQucHRrKSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3Jfd3VzYmhjX3NldF9wdGs7CisKKwlkX3ByaW50ZigxLCBkZXYsICJJOiBzZXR0aW5nIGEgR1RLXG4iKTsKKwlyZXN1bHQgPSB3dXNiX2Rldl9zZXRfZ3RrKHd1c2JoYywgd3VzYl9kZXYpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiU2V0IEdUSyBmb3IgZGV2aWNlOiByZXF1ZXN0IGZhaWxlZDogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX3d1c2JoY19zZXRfZ3RrOworCX0KKworCS8qIFVwZGF0ZSB0aGUgZGV2aWNlJ3MgYWRkcmVzcyBmcm9tIHVuYXV0aCB0byBhdXRoICovCisJaWYgKHVzYl9kZXYtPmF1dGhlbnRpY2F0ZWQgPT0gMCkgeworCQlkX3ByaW50ZigxLCBkZXYsICJJOiB1cGRhdGluZyBhZGRyZXMgdG8gYXV0aCBmcm9tIG5vbi1hdXRoXG4iKTsKKwkJcmVzdWx0ID0gd3VzYl9kZXZfdXBkYXRlX2FkZHJlc3Mod3VzYmhjLCB3dXNiX2Rldik7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBlcnJvcl9kZXZfdXBkYXRlX2FkZHJlc3M7CisJfQorCXJlc3VsdCA9IDA7CisJZF9wcmludGYoMSwgZGV2LCAiSTogNHdheSBoYW5kc2hrZSBkb25lLCBkZXZpY2UgYXV0aGVudGljYXRlZFxuIik7CisKK2Vycm9yX2Rldl91cGRhdGVfYWRkcmVzczoKK2Vycm9yX3d1c2JoY19zZXRfZ3RrOgorZXJyb3Jfd3VzYmhjX3NldF9wdGs6CitlcnJvcl9oczM6CitlcnJvcl9oczI6CitlcnJvcl9oczE6CisJbWVtc2V0KGhzLCAwLCAzKnNpemVvZihoc1swXSkpOworCW1lbXNldCgma2V5ZHZ0X291dCwgMCwgc2l6ZW9mKGtleWR2dF9vdXQpKTsKKwltZW1zZXQoJmtleWR2dF9pbiwgMCwgc2l6ZW9mKGtleWR2dF9pbikpOworCW1lbXNldCgmY2NtX24sIDAsIHNpemVvZihjY21fbikpOworCW1lbXNldChtaWMsIDAsIHNpemVvZihtaWMpKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQkvKiBlcnJvciBwYXRoICovCisJCXd1c2JfZGV2X3NldF9lbmNyeXB0aW9uKHVzYl9kZXYsIDApOworCX0KK2Vycm9yX2Rldl9zZXRfZW5jcnlwdGlvbjoKKwlrZnJlZShocyk7CitlcnJvcl9remFsbG9jOgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBPbmNlIGFsbCBjb25uZWN0ZWQgYW5kIGF1dGhlbnRpY2F0ZWQgZGV2aWNlcyBoYXZlIHJlY2VpdmVkIHRoZSBuZXcKKyAqIEdUSywgc3dpdGNoIHRoZSBob3N0IHRvIHVzaW5nIGl0LgorICovCitzdGF0aWMgdm9pZCB3dXNiaGNfZ3RrX3Jla2V5X2RvbmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3dXNiaGMsIGd0a19yZWtleV9kb25lX3dvcmspOworCXNpemVfdCBrZXlfc2l6ZSA9IHNpemVvZih3dXNiaGMtPmd0ay5kYXRhKTsKKworCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOworCisJaWYgKC0td3VzYmhjLT5wZW5kaW5nX3NldF9ndGtzID09IDApCisJCXd1c2JoYy0+c2V0X2d0ayh3dXNiaGMsIHd1c2JoYy0+Z3RrX3RraWQsICZ3dXNiaGMtPmd0ay5kZXNjci5iS2V5RGF0YSwga2V5X3NpemUpOworCisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgd3VzYmhjX3NldF9ndGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVyYi0+Y29udGV4dDsKKworCXF1ZXVlX3dvcmsod3VzYmQsICZ3dXNiaGMtPmd0a19yZWtleV9kb25lX3dvcmspOworfQorCisvKioKKyAqIHd1c2JoY19ndGtfcmVrZXkgLSBnZW5lcmF0ZSBhbmQgZGlzdHJpYnV0ZSBhIG5ldyBHVEsKKyAqIEB3dXNiaGM6IHRoZSBXVVNCIGhvc3QgY29udHJvbGxlcgorICoKKyAqIEdlbmVyYXRlIGEgbmV3IEdUSyBhbmQgZGlzdHJpYnV0ZSBpdCB0byBhbGwgY29ubmVjdGVkIGFuZAorICogYXV0aGVudGljYXRlZCBkZXZpY2VzLiAgV2hlbiBhbGwgZGV2aWNlcyBoYXZlIHRoZSBuZXcgR1RLLCB0aGUgaG9zdAorICogc3RhcnRzIHVzaW5nIGl0LgorICoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZXZlcnkgZGV2aWNlIGRpc2Nvbm5lY3QgKHNlZSBbV1VTQl0KKyAqIHNlY3Rpb24gNi4yLjExLjIpLgorICovCit2b2lkIHd1c2JoY19ndGtfcmVrZXkoc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCXN0YXRpYyBjb25zdCBzaXplX3Qga2V5X3NpemUgPSBzaXplb2Yod3VzYmhjLT5ndGsuZGF0YSk7CisJaW50IHA7CisKKwl3dXNiaGNfZ2VuZXJhdGVfZ3RrKHd1c2JoYyk7CisKKwlmb3IgKHAgPSAwOyBwIDwgd3VzYmhjLT5wb3J0c19tYXg7IHArKykgeworCQlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCisJCXd1c2JfZGV2ID0gd3VzYmhjLT5wb3J0W3BdLnd1c2JfZGV2OworCQlpZiAoIXd1c2JfZGV2IHx8ICF3dXNiX2Rldi0+dXNiX2RldiB8ICF3dXNiX2Rldi0+dXNiX2Rldi0+YXV0aGVudGljYXRlZCkKKwkJCWNvbnRpbnVlOworCisJCXVzYl9maWxsX2NvbnRyb2xfdXJiKHd1c2JfZGV2LT5zZXRfZ3RrX3VyYiwgd3VzYl9kZXYtPnVzYl9kZXYsCisJCQkJICAgICB1c2Jfc25kY3RybHBpcGUod3VzYl9kZXYtPnVzYl9kZXYsIDApLAorCQkJCSAgICAgKHZvaWQgKil3dXNiX2Rldi0+c2V0X2d0a19yZXEsCisJCQkJICAgICAmd3VzYmhjLT5ndGsuZGVzY3IsIHd1c2JoYy0+Z3RrLmRlc2NyLmJMZW5ndGgsCisJCQkJICAgICB3dXNiaGNfc2V0X2d0a19jYWxsYmFjaywgd3VzYmhjKTsKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHd1c2JfZGV2LT5zZXRfZ3RrX3VyYiwgR0ZQX0tFUk5FTCkgPT0gMCkKKwkJCXd1c2JoYy0+cGVuZGluZ19zZXRfZ3RrcysrOworCX0KKwlpZiAod3VzYmhjLT5wZW5kaW5nX3NldF9ndGtzID09IDApCisJCXd1c2JoYy0+c2V0X2d0ayh3dXNiaGMsIHd1c2JoYy0+Z3RrX3RraWQsICZ3dXNiaGMtPmd0ay5kZXNjci5iS2V5RGF0YSwga2V5X3NpemUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtaGMuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLWhjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNDcyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLWhjLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIFdpcmUgQWRhcHRlciBIb3N0IENvbnRyb2xsZXIgRHJpdmVyCisgKiBDb21tb24gaXRlbXMgdG8gSFdBIGFuZCBEV0EgYmFzZWQgSENEcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogRklYTUU6IGRvY3MKKyAqLworI2luY2x1ZGUgInd1c2JoYy5oIgorI2luY2x1ZGUgIndhLWhjLmgiCisKKy8qKgorICogQXNzdW1lcworICoKKyAqIHdhLT51c2JfZGV2IGFuZCB3YS0+dXNiX2lmYWNlIGluaXRpYWxpemVkIGFuZCByZWZjb3VudGVkLAorICogd2EtPndhX2Rlc2NyIGluaXRpYWxpemVkLgorICovCitpbnQgd2FfY3JlYXRlKHN0cnVjdCB3YWhjICp3YSwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisKKwlyZXN1bHQgPSB3YV9ycGlwZXNfY3JlYXRlKHdhKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9ycGlwZXNfY3JlYXRlOworCS8qIEZpbGwgdXAgRGF0YSBUcmFuc2ZlciBFUCBwb2ludGVycyAqLworCXdhLT5kdGlfZXBkID0gJmlmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVzYzsKKwl3YS0+ZHRvX2VwZCA9ICZpZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzJdLmRlc2M7CisJd2EtPnhmZXJfcmVzdWx0X3NpemUgPSBsZTE2X3RvX2NwdSh3YS0+ZHRpX2VwZC0+d01heFBhY2tldFNpemUpOworCXdhLT54ZmVyX3Jlc3VsdCA9IGttYWxsb2Mod2EtPnhmZXJfcmVzdWx0X3NpemUsIEdGUF9LRVJORUwpOworCWlmICh3YS0+eGZlcl9yZXN1bHQgPT0gTlVMTCkKKwkJZ290byBlcnJvcl94ZmVyX3Jlc3VsdF9hbGxvYzsKKwlyZXN1bHQgPSB3YV9uZXBfY3JlYXRlKHdhLCBpZmFjZSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXQS1DRFM6IGNhbid0IGluaXRpYWxpemUgbm90aWYgZW5kcG9pbnQ6ICVkXG4iLAorCQkJcmVzdWx0KTsKKwkJZ290byBlcnJvcl9uZXBfY3JlYXRlOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3JfbmVwX2NyZWF0ZToKKwlrZnJlZSh3YS0+eGZlcl9yZXN1bHQpOworZXJyb3JfeGZlcl9yZXN1bHRfYWxsb2M6CisJd2FfcnBpcGVzX2Rlc3Ryb3kod2EpOworZXJyb3JfcnBpcGVzX2NyZWF0ZToKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod2FfY3JlYXRlKTsKKworCit2b2lkIF9fd2FfZGVzdHJveShzdHJ1Y3Qgd2FoYyAqd2EpCit7CisJaWYgKHdhLT5kdGlfdXJiKSB7CisJCXVzYl9raWxsX3VyYih3YS0+ZHRpX3VyYik7CisJCXVzYl9wdXRfdXJiKHdhLT5kdGlfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHdhLT5idWZfaW5fdXJiKTsKKwkJdXNiX3B1dF91cmIod2EtPmJ1Zl9pbl91cmIpOworCX0KKwlrZnJlZSh3YS0+eGZlcl9yZXN1bHQpOworCXdhX25lcF9kZXN0cm95KHdhKTsKKwl3YV9ycGlwZXNfZGVzdHJveSh3YSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3dhX2Rlc3Ryb3kpOworCisvKioKKyAqIHdhX3Jlc2V0X2FsbCAtIHJlc2V0IHRoZSBXQSBkZXZpY2UKKyAqIEB3YTogdGhlIFdBIHRvIGJlIHJlc2V0CisgKgorICogRm9yIEhXQXMgdGhlIHJhZGlvIGNvbnRyb2xsZXIgYW5kIGFsbCBvdGhlciBQQUxzIGFyZSBhbHNvIHJlc2V0LgorICovCit2b2lkIHdhX3Jlc2V0X2FsbChzdHJ1Y3Qgd2FoYyAqd2EpCit7CisJLyogRklYTUU6IGFzc3VtaW5nIEhXQS4gKi8KKwl3dXNiaGNfcmVzZXRfYWxsKHdhLT53dXNiKTsKK30KKworTU9EVUxFX0FVVEhPUigiSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV2lyZWxlc3MgVVNCIFdpcmUgQWRhcHRlciBjb3JlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1oYy5oIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtaGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODZkMzUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtaGMuaApAQCAtMCwwICsxLDQxNyBAQAorLyoKKyAqIEhXQSBIb3N0IENvbnRyb2xsZXIgRHJpdmVyCisgKiBXaXJlIEFkYXB0ZXIgQ29udHJvbC9EYXRhIFN0cmVhbWluZyBJZmFjZSAoV1VTQjEuMFs4XSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBVU0IgSG9zdCBDb250cm9sbGVyIChzdHJ1Y3QgdXNiX2hjZCkgZm9yIGEKKyAqIFdpcmVsZXNzIFVTQiBIb3N0IENvbnRyb2xsZXIgYmFzZWQgb24gdGhlIFdpcmVsZXNzIFVTQiAxLjAKKyAqIEhvc3QtV2lyZS1BZGFwdGVyIHNwZWNpZmljYXRpb24gKGluIGxheW1hbiB0ZXJtcywgYSBVU0ItZG9uZ2xlIHRoYXQKKyAqIGltcGxlbWVudHMgYSBXaXJlbGVzcyBVU0IgaG9zdCkuCisgKgorICogQ2hlY2sgb3V0IHRoZSBEZXNpZ24tb3ZlcnZpZXcudHh0IGZpbGUgaW4gdGhlIHNvdXJjZSBkb2N1bWVudGF0aW9uCisgKiBmb3Igb3RoZXIgZGV0YWlscyBvbiB0aGUgaW1wbGVtZW50YXRpb24uCisgKgorICogTWFpbiBibG9ja3M6CisgKgorICogIGRyaXZlciAgICAgZ2x1ZSB3aXRoIHRoZSBkcml2ZXIgQVBJLCB3b3JrcXVldWUgZGFlbW9uCisgKgorICogIGxjICAgICAgICAgUkMgaW5zdGFuY2UgbGlmZSBjeWNsZSBtYW5hZ2VtZW50IChjcmVhdGUsIGRlc3Ryb3kuLi4pCisgKgorICogIGhjZCAgICAgICAgZ2x1ZSB3aXRoIHRoZSBVU0IgQVBJIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgQVBJLgorICoKKyAqICBuZXAgICAgICAgIE5vdGlmaWNhdGlvbiBFbmRQb2ludCBtYW5hZ2VudDogY29sbGVjdCBub3RpZmljYXRpb25zCisgKiAgICAgICAgICAgICBhbmQgcXVldWUgdGhlbSB3aXRoIHRoZSB3b3JrcXVldWUgZGFlbW9uLgorICoKKyAqICAgICAgICAgICAgIEhhbmRsZSBub3RpZmljYXRpb25zIGFzIGNvbWluZyBmcm9tIHRoZSBORVAuIFNlbmRzIHRoZW0KKyAqICAgICAgICAgICAgIG9mZiBvdGhlcnMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBtb2R1bGVzIChlZzogY29ubmVjdCwKKyAqICAgICAgICAgICAgIGRpc2Nvbm5lY3QgYW5kIHJlc2V0IGdvIHRvIGRldmNvbm5lY3QpLgorICoKKyAqICBycGlwZSAgICAgIFJlbW90ZSBQaXBlIG1hbmFnZW1lbnQ7IHJwaXBlIGlzIHdoYXQgd2UgdXNlIHRvIHdyaXRlCisgKiAgICAgICAgICAgICB0byBhbiBlbmRwb2ludCBvbiBhIFdVU0IgZGV2aWNlIHRoYXQgaXMgY29ubmVjdGVkIHRvIGEKKyAqICAgICAgICAgICAgIEhXQSBSQy4KKyAqCisgKiAgeGZlciAgICAgICBUcmFuc2ZlciBtYW5hZ21lbnQgLS0gdGhpcyBpcyBhbGwgdGhlIGNvZGUgdGhhdCBnZXRzIGEKKyAqICAgICAgICAgICAgIGJ1ZmZlciBhbmQgcHVzaGVzIGl0IHRvIGEgZGV2aWNlIChvciB2aWNldmVyc2EpLiAqCisgKgorICogU29tZSBkYXkgYSBsb3Qgb2YgdGhpcyBjb2RlIHdpbGwgYmUgc2hhcmVkIGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kCisgKiB0aGUgZHJpdmVycyBmb3IgRFdBICh4ZmVyLCBycGlwZSkuCisgKgorICogQWxsIHN0YXJ0cyBhdCBkcml2ZXIuYzpod2FoY19wcm9iZSgpLCB3aGVuIG9uZSBvZiB0aGlzIGd1eXMgaXMKKyAqIGNvbm5lY3RlZC4gaHdhaGNfZGlzY29ubmVjdCgpIHN0b3BzIGl0LgorICoKKyAqIER1cmluZyBvcGVyYXRpb24sIHRoZSBtYWluIGRyaXZlciBpcyBkZXZpY2VzIGNvbm5lY3Rpbmcgb3IKKyAqIGRpc2Nvbm5lY3RpbmcuIFRoZXkgY2F1c2UgdGhlIEhXQSBSQyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaW50bworICogbmVwLmM6aHdhaGNfbmVwX2NiKCkgdGhhdCB3aWxsIGRpc3BhdGNoIHRoZW0gdG8KKyAqIG5vdGlmLmM6d2Ffbm90aWZfZGlzcGF0Y2goKS4gRnJvbSB0aGVyZSB0aGV5IHdpbGwgZmFuIHRvIGNhdXNlCisgKiBkZXZpY2UgY29ubmVjdHMsIGRpc2Nvbm5lY3RzLCBldGMuCisgKgorICogTm90ZSBtdWNoIG9mIHRoZSBhY3Rpdml0eSBpcyBkaWZmaWN1bHQgdG8gZm9sbG93LiBGb3IgZXhhbXBsZSBhCisgKiBkZXZpY2UgY29ubmVjdCBnb2VzIHRvIGRldmNvbm5lY3QsIHdoaWNoIHdpbGwgY2F1c2UgdGhlICJmYWtlIiByb290CisgKiBodWIgcG9ydCB0byBzaG93IGEgY29ubmVjdCBhbmQgc3RvcCB0aGVyZS4gVGhlbiBraHViZCB3aWxsIG5vdGljZQorICogYW5kIGNhbGwgaW50byB0aGUgcmguYzpod2FoY19yY19wb3J0X3Jlc2V0KCkgY29kZSB0byBhdXRoZW50aWNhdGUKKyAqIHRoZSBkZXZpY2UgKGFuZCB0aGlzIG1pZ2h0IHJlcXVpcmUgdXNlciBpbnRlcnZlbnRpb24pIGFuZCBlbmFibGUKKyAqIHRoZSBwb3J0LgorICoKKyAqIFdlIGFsc28gaGF2ZSBhIHRpbWVyIHdvcmtxdWV1ZSBnb2luZyBmcm9tIGRldmNvbm5lY3QuYyB0aGF0CisgKiBzY2hlZHVsZXMgaW4gaHdhaGNfZGV2Y29ubmVjdF9jcmVhdGUoKS4KKyAqCisgKiBUaGUgcmVzdCBvZiB0aGUgdHJhZmZpYyBpcyBpbiB0aGUgdXN1YWwgZW50cnkgcG9pbnRzIG9mIGEgVVNCIEhDRCwKKyAqIHdoaWNoIGFyZSBob29rZWQgdXAgaW4gZHJpdmVyLmM6aHdhaGNfcmNfZHJpdmVyLCBhbmQgZGVmaW5lZCBpbgorICogaGNkLmMuCisgKi8KKworI2lmbmRlZiBfX0hXQUhDX0lOVEVSTkFMX0hfXworI2RlZmluZSBfX0hXQUhDX0lOVEVSTkFMX0hfXworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivd3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi93dXNiLXdhLmg+CisKK3N0cnVjdCB3dXNiaGM7CitzdHJ1Y3Qgd2FoYzsKK2V4dGVybiB2b2lkIHdhX3VyYl9lbnF1ZXVlX3J1bihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKTsKKworLyoqCisgKiBSUGlwZSBpbnN0YW5jZQorICoKKyAqIEBkZXNjcidzIGZpZWxkcyBhcmUga2VwdCBpbiBMRSwgYXMgd2UgbmVlZCB0byBzZW5kIGl0IGJhY2sgYW5kCisgKiBmb3J0aC4KKyAqCisgKiBAd2EgaXMgcmVmZXJlbmNlZCB3aGVuIHNldAorICoKKyAqIEBzZWdzX2F2YWlsYWJsZSBpcyB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHNlZ21lbnRzIHRoYXQgc3RpbGwgY2FuCisgKiAgICAgICAgICAgICAgICAgYmUgc3VibWl0dGVkIHRvIHRoZSBjb250cm9sbGVyIHdpdGhvdXQgb3ZlcmxvYWRpbmcKKyAqICAgICAgICAgICAgICAgICBpdC4gSXQgaXMgaW5pdGlhbGl6ZWQgdG8gZGVzY3ItPndSZXF1ZXN0cyB3aGVuCisgKiAgICAgICAgICAgICAgICAgYWltaW5nLgorICoKKyAqIEEgcnBpcGUgc3VwcG9ydHMgYSBtYXggb2YgZGVzY3ItPndSZXF1ZXN0cyBhdCB0aGUgc2FtZSB0aW1lOyBiZWZvcmUKKyAqIHN1Ym1pdHRpbmcgc2VnX2xvY2sgaGFzIHRvIGJlIHRha2VuLiBJZiBzZWdzX2F2YWlsID4gMCwgdGhlbiB3ZSBjYW4KKyAqIHN1Ym1pdDsgaWYgbm90LCB3ZSBoYXZlIHRvIHF1ZXVlIHRoZW0uCisgKi8KK3N0cnVjdCB3YV9ycGlwZSB7CisJc3RydWN0IGtyZWYgcmVmY250OworCXN0cnVjdCB1c2JfcnBpcGVfZGVzY3JpcHRvciBkZXNjcjsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCB3YWhjICp3YTsKKwlzcGlubG9ja190IHNlZ19sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgc2VnX2xpc3Q7CisJYXRvbWljX3Qgc2Vnc19hdmFpbGFibGU7CisJdTggYnVmZmVyWzFdOwkvKiBGb3IgcmVhZHMvd3JpdGVzIG9uIFVTQiAqLworfTsKKworCisvKioKKyAqIEluc3RhbmNlIG9mIGEgSFdBIEhvc3QgQ29udHJvbGxlcgorICoKKyAqIEV4Y2VwdCB3aGVyZSBhIG1vcmUgc3BlY2lmaWMgbG9jay9tdXRleCBhcHBsaWVzIG9yIGF0b21pYywgYWxsCisgKiBmaWVsZHMgcHJvdGVjdGVkIGJ5IEBtdXRleC4KKyAqCisgKiBAd2FfZGVzY3IgIENhbiBiZSBhY2Nlc3NlZCB3aXRob3V0IGxvY2tpbmcgYmVjYXVzZSBpdCBpcyBpbgorICogICAgICAgICAgICB0aGUgc2FtZSBhcmVhIHdoZXJlIHRoZSBkZXZpY2UgZGVzY3JpcHRvcnMgd2VyZQorICogICAgICAgICAgICByZWFkLCBzbyBpdCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHVtb2RpZmllZCB3aGlsZQorICogICAgICAgICAgICB0aGUgZGV2aWNlIGV4aXN0cy4KKyAqCisgKiAgICAgICAgICAgIEVuZGlhbmVzcyBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gQ1BVJ3MuCisgKgorICogQG5lcF8qIGNhbiBiZSBhY2Nlc3NlZCB3aXRob3V0IGxvY2tpbmcgYXMgaXRzIHByb2Nlc3NpbmcgaXMKKyAqICAgICAgICBzZXJpYWxpemVkOyB3ZSBzdWJtaXQgYSBORVAgVVJCIGFuZCBpdCBjb21lcyB0bworICogICAgICAgIGh3YWhjX25lcF9jYigpLCB3aGljaCB3b24ndCBpc3N1ZSBhbm90aGVyIFVSQiB1bnRpbCBpdCBpcworICogICAgICAgIGRvbmUgcHJvY2Vzc2luZyBpdC4KKyAqCisgKiBAeGZlcl9saXN0OgorICoKKyAqICAgTGlzdCBvZiBhY3RpdmUgdHJhbnNmZXJzIHRvIHZlcmlmeSBleGlzdGVuY2UgZnJvbSBhIHhmZXIgaWQKKyAqICAgZ290dGVuIGZyb20gdGhlIHhmZXIgcmVzdWx0IG1lc3NhZ2UuIENhbid0IHVzZSB1cmItPmxpc3QgYmVjYXVzZQorICogICBpdCBnb2VzIGJ5IGVuZHBvaW50LCBhbmQgd2UgZG9uJ3Qga25vdyB0aGUgZW5kcG9pbnQgYXQgdGhlIHRpbWUKKyAqICAgd2hlbiB3ZSBnZXQgdGhlIHhmZXIgcmVzdWx0IG1lc3NhZ2UuIFdlIGNhbid0IHJlYWxseSByZWx5IG9uIHRoZQorICogICBwb2ludGVyICh3aWxsIGhhdmUgdG8gY2hhbmdlIGZvciA2NCBiaXRzKSBhcyB0aGUgeGZlciBpZCBpcyAzMiBiaXRzLgorICoKKyAqIEB4ZmVyX2RlbGF5ZWRfbGlzdDogICBMaXN0IG9mIHRyYW5zZmVycyB0aGF0IG5lZWQgdG8gYmUgc3RhcnRlZAorICogICAgICAgICAgICAgICAgICAgICAgICh3aXRoIGEgd29ya3F1ZXVlLCBiZWNhdXNlIHRoZXkgd2VyZQorICogICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCBmcm9tIGFuIGF0b21pYyBjb250ZXh0KS4KKyAqCisgKiBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSBsYXllcmVkIHVwOiBhIHd1c2JoYyBsYXllciAoZm9yIHNoYXJpbmcKKyAqICAgICAgICBjb21vbmFsaXRpZXMgd2l0aCBXSENJKSwgYSB3YSBsYXllciAoZm9yIHNoYXJpbmcKKyAqICAgICAgICBjb21vbmFsaXRpZXMgd2l0aCBEV0EtUkMpLgorICovCitzdHJ1Y3Qgd2FoYyB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pZmFjZTsKKworCS8qIEhDIHRvIGRlbGl2ZXIgbm90aWZpY2F0aW9ucyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHd1c2JoYyAqd3VzYjsKKwkJc3RydWN0IGR3YWhjICpkd2E7CisJfTsKKworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZHRvX2VwZCwgKmR0aV9lcGQ7CisJY29uc3Qgc3RydWN0IHVzYl93YV9kZXNjcmlwdG9yICp3YV9kZXNjcjsKKworCXN0cnVjdCB1cmIgKm5lcF91cmI7CQkvKiBOb3RpZmljYXRpb24gRW5kUG9pbnQgW2xvY2tsZXNzXSAqLworCXN0cnVjdCBlZGMgbmVwX2VkYzsKKwl2b2lkICpuZXBfYnVmZmVyOworCXNpemVfdCBuZXBfYnVmZmVyX3NpemU7CisKKwlhdG9taWNfdCBub3RpZnNfcXVldWVkOworCisJdTE2IHJwaXBlczsKKwl1bnNpZ25lZCBsb25nICpycGlwZV9ibTsJLyogcnBpcGUgdXNhZ2UgYml0bWFwICovCisJc3BpbmxvY2tfdCBycGlwZV9ibV9sb2NrOwkvKiBwcm90ZWN0IHJwaXBlX2JtICovCisJc3RydWN0IG11dGV4IHJwaXBlX211dGV4OwkvKiBhc3NpZ25pbmcgcmVzb3VyY2VzIHRvIGVuZHBvaW50cyAqLworCisJc3RydWN0IHVyYiAqZHRpX3VyYjsJCS8qIFVSQiBmb3IgcmVhZGluZyB4ZmVyIHJlc3VsdHMgKi8KKwlzdHJ1Y3QgdXJiICpidWZfaW5fdXJiOwkJLyogVVJCIGZvciByZWFkaW5nIGRhdGEgaW4gKi8KKwlzdHJ1Y3QgZWRjIGR0aV9lZGM7CQkvKiBEVEkgZXJyb3IgZGVuc2l0eSBjb3VudGVyICovCisJc3RydWN0IHdhX3hmZXJfcmVzdWx0ICp4ZmVyX3Jlc3VsdDsgLyogcmVhbCBzaXplID0gZHRpX2VwIG1heHBrdHNpemUgKi8KKwlzaXplX3QgeGZlcl9yZXN1bHRfc2l6ZTsKKworCXMzMiBzdGF0dXM7CQkJLyogRm9yIHJlYWRpbmcgc3RhdHVzICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHhmZXJfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHhmZXJfZGVsYXllZF9saXN0OworCXNwaW5sb2NrX3QgeGZlcl9saXN0X2xvY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHhmZXJfd29yazsKKwlhdG9taWNfdCB4ZmVyX2lkX2NvdW50OworfTsKKworCitleHRlcm4gaW50IHdhX2NyZWF0ZShzdHJ1Y3Qgd2FoYyAqd2EsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gdm9pZCBfX3dhX2Rlc3Ryb3koc3RydWN0IHdhaGMgKndhKTsKK3ZvaWQgd2FfcmVzZXRfYWxsKHN0cnVjdCB3YWhjICp3YSk7CisKKworLyogTWlzY2VsbGFuZW91cyBjb25zdGFudHMgKi8KK2VudW0geworCS8qKiBNYXggbnVtYmVyIG9mIEVQUk9UTyBlcnJvcnMgd2UgdG9sZXJhdGUgb24gdGhlIE5FUCBpbiBhCisJICogcGVyaW9kIG9mIHRpbWUgKi8KKwlIV0FIQ19FUFJPVE9fTUFYID0gMTYsCisJLyoqIFBlcmlvZCBvZiB0aW1lIGZvciBFUFJPVE8gZXJyb3JzIChpbiBqaWZmaWVzKSAqLworCUhXQUhDX0VQUk9UT19QRVJJT0QgPSA0ICogSFosCit9OworCisKKy8qIE5vdGlmaWNhdGlvbiBlbmRwb2ludCBoYW5kbGluZyAqLworZXh0ZXJuIGludCB3YV9uZXBfY3JlYXRlKHN0cnVjdCB3YWhjICosIHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOworZXh0ZXJuIHZvaWQgd2FfbmVwX2Rlc3Ryb3koc3RydWN0IHdhaGMgKik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHdhX25lcF9hcm0oc3RydWN0IHdhaGMgKndhLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSB3YS0+bmVwX3VyYjsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHdhLT5uZXBfYnVmZmVyOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHdhLT5uZXBfYnVmZmVyX3NpemU7CisJcmV0dXJuIHVzYl9zdWJtaXRfdXJiKHVyYiwgZ2ZwX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FfbmVwX2Rpc2FybShzdHJ1Y3Qgd2FoYyAqd2EpCit7CisJdXNiX2tpbGxfdXJiKHdhLT5uZXBfdXJiKTsKK30KKworCisvKiBSUGlwZXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YV9ycGlwZV9pbml0KHN0cnVjdCB3YWhjICp3YSkKK3sKKwlzcGluX2xvY2tfaW5pdCgmd2EtPnJwaXBlX2JtX2xvY2spOworCW11dGV4X2luaXQoJndhLT5ycGlwZV9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YV9pbml0KHN0cnVjdCB3YWhjICp3YSkKK3sKKwllZGNfaW5pdCgmd2EtPm5lcF9lZGMpOworCWF0b21pY19zZXQoJndhLT5ub3RpZnNfcXVldWVkLCAwKTsKKwl3YV9ycGlwZV9pbml0KHdhKTsKKwllZGNfaW5pdCgmd2EtPmR0aV9lZGMpOworCUlOSVRfTElTVF9IRUFEKCZ3YS0+eGZlcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmd2EtPnhmZXJfZGVsYXllZF9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmd2EtPnhmZXJfbGlzdF9sb2NrKTsKKwlJTklUX1dPUksoJndhLT54ZmVyX3dvcmssIHdhX3VyYl9lbnF1ZXVlX3J1bik7CisJYXRvbWljX3NldCgmd2EtPnhmZXJfaWRfY291bnQsIDEpOworfQorCisvKioKKyAqIERlc3Ryb3kgYSBwaXBlICh3aGVuIHJlZmNvdW50IGRyb3BzIHRvIHplcm8pCisgKgorICogQXNzdW1lcyBpdCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgIlFVSUVTQ0lORyIgc3RhdGUuCisgKi8KK3N0cnVjdCB3YV94ZmVyOworZXh0ZXJuIHZvaWQgcnBpcGVfZGVzdHJveShzdHJ1Y3Qga3JlZiAqX3JwaXBlKTsKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgX19ycGlwZV9nZXQoc3RydWN0IHdhX3JwaXBlICpycGlwZSkKK3sKKwlrcmVmX2dldCgmcnBpcGUtPnJlZmNudCk7Cit9CitleHRlcm4gaW50IHJwaXBlX2dldF9ieV9lcChzdHJ1Y3Qgd2FoYyAqLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKiwKKwkJCSAgIHN0cnVjdCB1cmIgKiwgZ2ZwX3QpOworc3RhdGljIGlubGluZSB2b2lkIHJwaXBlX3B1dChzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlKQoreworCWtyZWZfcHV0KCZycGlwZS0+cmVmY250LCBycGlwZV9kZXN0cm95KTsKKworfQorZXh0ZXJuIHZvaWQgcnBpcGVfZXBfZGlzYWJsZShzdHJ1Y3Qgd2FoYyAqLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKik7CitleHRlcm4gaW50IHdhX3JwaXBlc19jcmVhdGUoc3RydWN0IHdhaGMgKik7CitleHRlcm4gdm9pZCB3YV9ycGlwZXNfZGVzdHJveShzdHJ1Y3Qgd2FoYyAqKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBycGlwZV9hdmFpbF9kZWMoc3RydWN0IHdhX3JwaXBlICpycGlwZSkKK3sKKwlhdG9taWNfZGVjKCZycGlwZS0+c2Vnc19hdmFpbGFibGUpOworfQorCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcnBpcGUgaXMgcmVhZHkgdG8gc3VibWl0IG1vcmUgc2VnbWVudHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJwaXBlX2F2YWlsX2luYyhzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlKQoreworCXJldHVybiBhdG9taWNfaW5jX3JldHVybigmcnBpcGUtPnNlZ3NfYXZhaWxhYmxlKSA+IDAKKwkJJiYgIWxpc3RfZW1wdHkoJnJwaXBlLT5zZWdfbGlzdCk7Cit9CisKKworLyogVHJhbnNmZXJyaW5nIGRhdGEgKi8KK2V4dGVybiBpbnQgd2FfdXJiX2VucXVldWUoc3RydWN0IHdhaGMgKiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICosCisJCQkgIHN0cnVjdCB1cmIgKiwgZ2ZwX3QpOworZXh0ZXJuIGludCB3YV91cmJfZGVxdWV1ZShzdHJ1Y3Qgd2FoYyAqLCBzdHJ1Y3QgdXJiICopOworZXh0ZXJuIHZvaWQgd2FfaGFuZGxlX25vdGlmX3hmZXIoc3RydWN0IHdhaGMgKiwgc3RydWN0IHdhX25vdGlmX2hkciAqKTsKKworCisvKiBNaXNjCisgKgorICogRklYTUU6IFJlZmNvdW50aW5nIGZvciB0aGUgYWN0dWFsIEBod2FoYyBvYmplY3QgaXMgbm90IGNvcnJlY3Q7IEkKKyAqICAgICAgICBtZWFuLCB0aGlzIHNob3VsZCBiZSByZWZjb3VudGluZyBvbiB0aGUgSENEIHVuZGVybmVhdGgsIGJ1dAorICogICAgICAgIGl0IGlzIG5vdC4gSW4gYW55IGNhc2UsIHRoZSBzZW1hbnRpY3MgZm9yIEhDRCByZWZjb3VudGluZworICogICAgICAgIGFyZSAqd2VpcmQqLi4ub24gcmVmY291bnQgcmVhY2hpbmcgemVybyBpdCBqdXN0IGZyZWVzCisgKiAgICAgICAgaXQuLi5ubyBSQyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBjYWxsZWQuLi51bmxlc3MgSSBtaXNzCisgKiAgICAgICAgc29tZXRoaW5nLgorICoKKyAqIEZJWE1FOiBoYXMgdG8gZ28gYXdheSBpbiBmYXZvdXIgb2YgYW4gJ3N0cnVjdCcgaGNkIGJhc2VkIHNvbGx1dGlvbgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3YWhjICp3YV9nZXQoc3RydWN0IHdhaGMgKndhKQoreworCXVzYl9nZXRfaW50Zih3YS0+dXNiX2lmYWNlKTsKKwlyZXR1cm4gd2E7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YV9wdXQoc3RydWN0IHdhaGMgKndhKQoreworCXVzYl9wdXRfaW50Zih3YS0+dXNiX2lmYWNlKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBfX3dhX2ZlYXR1cmUoc3RydWN0IHdhaGMgKndhLCB1bnNpZ25lZCBvcCwgdTE2IGZlYXR1cmUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh3YS0+dXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHdhLT51c2JfZGV2LCAwKSwKKwkJCW9wID8gVVNCX1JFUV9TRVRfRkVBVFVSRSA6IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJZmVhdHVyZSwKKwkJCXdhLT51c2JfaWZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQlOVUxMLCAwLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fd2Ffc2V0X2ZlYXR1cmUoc3RydWN0IHdhaGMgKndhLCB1MTYgZmVhdHVyZSkKK3sKKwlyZXR1cm4gIF9fd2FfZmVhdHVyZSh3YSwgMSwgZmVhdHVyZSk7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgX193YV9jbGVhcl9mZWF0dXJlKHN0cnVjdCB3YWhjICp3YSwgdTE2IGZlYXR1cmUpCit7CisJcmV0dXJuIF9fd2FfZmVhdHVyZSh3YSwgMCwgZmVhdHVyZSk7Cit9CisKKworLyoqCisgKiBSZXR1cm4gdGhlIHN0YXR1cyBvZiBhIFdpcmUgQWRhcHRlcgorICoKKyAqIEB3YToJCVdpcmUgQWRhcHRlciBpbnN0YW5jZQorICogQHJldHVybnMgICAgIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yLCBvciBzdGF0dXMgYml0bWFwIGFzIGRlc2NyaWJlZAorICogICAgICAgICAgICAgIGluIFdVU0IxLjBbOC4zLjEuNl0uCisgKgorICogTk9URTogbmVlZCBtYWxsb2MsIHNvbWUgYXJjaGVzIGRvbid0IHRha2UgVVNCIGZyb20gdGhlIHN0YWNrCisgKi8KK3N0YXRpYyBpbmxpbmUKK3MzMiBfX3dhX2dldF9zdGF0dXMoc3RydWN0IHdhaGMgKndhKQoreworCXMzMiByZXN1bHQ7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKAorCQl3YS0+dXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKHdhLT51c2JfZGV2LCAwKSwKKwkJVVNCX1JFUV9HRVRfU1RBVFVTLAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkwLCB3YS0+dXNiX2lmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkmd2EtPnN0YXR1cywgc2l6ZW9mKHdhLT5zdGF0dXMpLAorCQkxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworCWlmIChyZXN1bHQgPj0gMCkKKwkJcmVzdWx0ID0gd2EtPnN0YXR1czsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogV2FpdHMgdW50aWwgdGhlIFdpcmUgQWRhcHRlcidzIHN0YXR1cyBtYXRjaGVzIEBtYXNrL0B2YWx1ZQorICoKKyAqIEB3YToJCVdpcmUgQWRhcHRlciBpbnN0YW5jZS4KKyAqIEByZXR1cm5zICAgICA8IDAgZXJybm8gY29kZSBvbiBlcnJvciwgb3RoZXJ3aXNlIHN0YXR1cy4KKyAqCisgKiBMb29wIHVudGlsIHRoZSBXQXMgc3RhdHVzIG1hdGNoZXMgdGhlIG1hc2sgYW5kIHZhbHVlIChzdGF0dXMgJiBtYXNrCisgKiA9PSB2YWx1ZSkuIFRpbWVvdXQgaWYgaXQgZG9lc24ndCBoYXBwZW4uCisgKgorICogRklYTUU6IGlzIHRoZXJlIGFuIG9mZmljaWFsIHNwZWNpZmljYXRpb24gb24gaG93IGxvbmcgc3RhdHVzCisgKiAgICAgICAgY2hhbmdlcyBjYW4gdGFrZT8KKyAqLworc3RhdGljIGlubGluZSBzMzIgX193YV93YWl0X3N0YXR1cyhzdHJ1Y3Qgd2FoYyAqd2EsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJczMyIHJlc3VsdDsKKwl1bnNpZ25lZCBsb29wcyA9IDEwOworCWRvIHsKKwkJbXNsZWVwKDUwKTsKKwkJcmVzdWx0ID0gX193YV9nZXRfc3RhdHVzKHdhKTsKKwkJaWYgKChyZXN1bHQgJiBtYXNrKSA9PSB2YWx1ZSkKKwkJCWJyZWFrOworCQlpZiAobG9vcHMtLSA9PSAwKSB7CisJCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChyZXN1bHQgPj0gMCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiogQ29tbWFuZCBAaHdhaGMgdG8gc3RvcCwgQHJldHVybnMgMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fd2Ffc3RvcChzdHJ1Y3Qgd2FoYyAqd2EpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCisJcmVzdWx0ID0gX193YV9jbGVhcl9mZWF0dXJlKHdhLCBXQV9FTkFCTEUpOworCWlmIChyZXN1bHQgPCAwICYmIHJlc3VsdCAhPSAtRU5PREVWKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgY29tbWFuZGluZyBIQyB0byBzdG9wOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBvdXQ7CisJfQorCXJlc3VsdCA9IF9fd2Ffd2FpdF9zdGF0dXMod2EsIFdBX0VOQUJMRSwgMCk7CisJaWYgKHJlc3VsdCA8IDAgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCisJCWRldl9lcnIoZGV2LCAiZXJyb3Igd2FpdGluZyBmb3IgSEMgdG8gc3RvcDogJWRcbiIsIHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKKworI2VuZGlmIC8qICNpZm5kZWYgX19IV0FIQ19JTlRFUk5BTF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLW5lcC5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtbmVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NDI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLW5lcC5jCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogV1VTQiBXaXJlIEFkYXB0ZXI6IENvbnRyb2wvRGF0YSBTdHJlYW1pbmcgSW50ZXJmYWNlIChXVVNCWzhdKQorICogTm90aWZpY2F0aW9uIEVuZFBvaW50IHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBUaGlzIHBhcnQgdGFrZXMgY2FyZSBvZiBnZXR0aW5nIHRoZSBub3RpZmljYXRpb24gZnJvbSB0aGUgaHcKKyAqIG9ubHkgYW5kIGRpc3BhdGNoaW5nIHRocm91Z2ggd3VzYndhZCBpbnRvCisgKiB3YV9ub3RpZl9kaXNwYXRjaC4gSGFuZGxpbmcgaXMgZG9uZSB0aGVyZS4KKyAqCisgKiBXQSBub3RpZmljYXRpb25zIGFyZSBsaW1pdGVkIGluIHNpemU7IG1vc3Qgb2YgdGhlbSBhcmUgdGhyZWUgb3IKKyAqIGZvdXIgYnl0ZXMgbG9uZywgYW5kIHRoZSBsb25nZXN0IGlzIHRoZSBIV0EgRGV2aWNlIE5vdGlmaWNhdGlvbiwKKyAqIHdoaWNoIHdvdWxkIG5vdCBleGNlZWQgMzggYnl0ZXMgKEROcyBhcmUgbGltaXRlZCBpbiBwYXlsb2FkIHRvIDMyCisgKiBieXRlcyBwbHVzIDMgYnl0ZXMgaGVhZGVyIChXVVNCMS4wWzcuNnAyXSksIHBsdXMgMyBieXRlcyBIV0EKKyAqIGhlYWRlciAoV1VTQjEuMFs4LjUuNC4yXSkuCisgKgorICogSXQgaXMgbm90IGNsZWFyIGlmIG1vcmUgdGhhbiBvbmUgRGV2aWNlIE5vdGlmaWNhdGlvbiBjYW4gYmUgcGFja2VkCisgKiBpbiBhIEhXQSBOb3RpZmljYXRpb24sIEkgYXNzdW1lIG5vIGJlY2F1c2Ugb2YgdGhlIHdvcmRpbmcgaW4KKyAqIFdVU0IxLjBbOC41LjQuMl0uIEluIGFueSBjYXNlLCB0aGUgYmlnZ2VyIGFueSBub3RpZmljYXRpb24gY291bGQKKyAqIGdldCBpcyAyNTYgYnl0ZXMgKGFzIHRoZSBiTGVuZ3RoIGZpZWxkIGlzIGEgYnl0ZSkuCisgKgorICogU28gd2hhdCB3ZSBkbyBpcyB3ZSBoYXZlIHRoaXMgYnVmZmVyIGFuZCByZWFkIGludG8gaXQ7IHdoZW4gYQorICogbm90aWZpY2F0aW9uIGFycml2ZXMgd2Ugc2NoZWR1bGUgd29yayB0byBhIHNwZWNpZmljLCBzaW5nbGUgdGhyZWFkCisgKiB3b3JrcXVldWUgKHNvIG5vdGlmaWNhdGlvbnMgYXJlIHNlcmlhbGl6ZWQpIGFuZCBjb3B5IHRoZQorICogbm90aWZpY2F0aW9uIGRhdGEuIEFmdGVyIHNjaGVkdWxpbmcgdGhlIHdvcmssIHdlIHJlYXJtIHRoZSByZWFkIGZyb20KKyAqIHRoZSBub3RpZmljYXRpb24gZW5kcG9pbnQuCisgKgorICogRW50cnkgcG9pbnRzIGhlcmUgYXJlOgorICoKKyAqIHdhX25lcF9bY3JlYXRlfGRlc3Ryb3ldKCkgICBUbyBpbml0aWFsaXplL3JlbGVhc2UgdGhpcyBzdWJzeXN0ZW0KKyAqCisgKiB3YV9uZXBfY2IoKSAgICAgICAgICAgICAgICAgQ2FsbGJhY2sgZm9yIHRoZSBub3RpZmljYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludDsgd2hlbiBkYXRhIGlzIHJlYWR5LCB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyB0aGUgZGlzcGF0Y2hpbmcuCisgKi8KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorI2luY2x1ZGUgIndhLWhjLmgiCisjaW5jbHVkZSAid3VzYmhjLmgiCisKKy8qIFN0cnVjdHVyZSBmb3IgcXVldWVpbmcgbm90aWZpY2F0aW9ucyB0byB0aGUgd29ya3F1ZXVlICovCitzdHJ1Y3Qgd2Ffbm90aWZfd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdhaGMgKndhOworCXNpemVfdCBzaXplOworCXU4IGRhdGFbXTsKK307CisKKy8qCisgKiBQcm9jZXNzIGluY29taW5nIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgV0EncyBOb3RpZmljYXRpb24gRW5kUG9pbnQKKyAqIFt0aGUgd3Vzd2FkIGRhZW1vbiwgYmFzaWNhbGx5XQorICoKKyAqIEBfbnc6CVBvaW50ZXIgdG8gYSBkZXNjcmlwdG9yIHdoaWNoIGhhcyB0aGUgcG9pbnRlciB0byB0aGUKKyAqIAkJQHdhLCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCB0aGUgd29yayBxdWV1ZQorICogCQlzdHJ1Y3R1cmUgKHNvIHdlIGNhbiBmcmVlIGFsbCB3aGVuIGRvbmUpLgorICogQHJldHVybnMgICAgIDAgaWYgb2ssIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yLgorICoKKyAqIEFsbCBub3RpZmljYXRpb25zIGZvbGxvdyB0aGUgc2FtZSBmb3JtYXQ7IHRoZXkgbmVlZCB0byBzdGFydCB3aXRoIGEKKyAqICdzdHJ1Y3Qgd2Ffbm90aWZfaGRyJyBoZWFkZXIsIHNvIGl0IGlzIGVhc3kgdG8gcGFyc2UgdGhyb3VnaAorICogdGhlbS4gV2UganVzdCBicmVhayB0aGUgYnVmZmVyIGluIGluZGl2aWR1YWwgbm90aWZpY2F0aW9ucyAodGhlCisgKiBzdGFuZGFyZCBkb2Vzbid0IHNheSBpZiBpdCBjYW4gYmUgZG9uZSBvciBpcyBmb3JiaWRkZW4sIHNvIHdlIGFyZQorICogY2F1dGlvdXMpIGFuZCBkaXNwYXRjaCBlYWNoLgorICoKKyAqIFNvIHRoZSBoYW5kbGluZyBsYXllcnMgYXJlIGlzOgorICoKKyAqICAgV0Egc3BlY2lmaWMgbm90aWZpY2F0aW9uIChmcm9tIE5FUCkKKyAqICAgICAgRGV2aWNlIE5vdGlmaWNhdGlvbiBSZWNlaXZlZCAtPiB3YV9oYW5kbGVfbm90aWZfZG4oKQorICogICAgICAgIFdVU0IgRGV2aWNlIG5vdGlmaWNhdGlvbiBnZW5lcmljIGhhbmRsaW5nCisgKiAgICAgIEJQU1QgQWRqdXN0bWVudCAtPiB3YV9oYW5kbGVfbm90aWZfYnBzdF9hZGooKQorICogICAgICAuLi4gLT4gLi4uCisgKgorICogQHdhIGhhcyB0byBiZSByZWZlcmVuY2VkCisgKi8KK3N0YXRpYyB2b2lkIHdhX25vdGlmX2Rpc3BhdGNoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJdm9pZCAqaXRyOworCXU4IG1pc3NpbmcgPSAwOworCXN0cnVjdCB3YV9ub3RpZl93b3JrICpudyA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IHdhX25vdGlmX3dvcmssIHdvcmspOworCXN0cnVjdCB3YWhjICp3YSA9IG53LT53YTsKKwlzdHJ1Y3Qgd2Ffbm90aWZfaGRyICpub3RpZl9oZHI7CisJc2l6ZV90IHNpemU7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCisjaWYgMAorCS8qIEZJWE1FOiBuZWVkIHRvIGNoZWNrIGZvciB0aGlzPz8/ICovCisJaWYgKHVzYl9oY2QtPnN0YXRlID09IEhDX1NUQVRFX1FVSUVTQ0lORykJLyogR29pbmcgZG93bj8gKi8KKwkJZ290byBvdXQ7CQkJCS8qIHNjcmV3IGl0ICovCisjZW5kaWYKKwlhdG9taWNfZGVjKCZ3YS0+bm90aWZzX3F1ZXVlZCk7CQkvKiBUaHJvdHRsaW5nIGN0bCAqLworCWRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJc2l6ZSA9IG53LT5zaXplOworCWl0ciA9IG53LT5kYXRhOworCisJd2hpbGUgKHNpemUpIHsKKwkJaWYgKHNpemUgPCBzaXplb2YoKm5vdGlmX2hkcikpIHsKKwkJCW1pc3NpbmcgPSBzaXplb2YoKm5vdGlmX2hkcikgLSBzaXplOworCQkJZ290byBleGhhdXN0ZWRfYnVmZmVyOworCQl9CisJCW5vdGlmX2hkciA9IGl0cjsKKwkJaWYgKHNpemUgPCBub3RpZl9oZHItPmJMZW5ndGgpCisJCQlnb3RvIGV4aGF1c3RlZF9idWZmZXI7CisJCWl0ciArPSBub3RpZl9oZHItPmJMZW5ndGg7CisJCXNpemUgLT0gbm90aWZfaGRyLT5iTGVuZ3RoOworCQkvKiBEaXNwYXRjaCB0aGUgbm90aWZpY2F0aW9uIFtkb24ndCB1c2UgaXRyIG9yIHNpemUhXSAqLworCQlzd2l0Y2ggKG5vdGlmX2hkci0+Yk5vdGlmeVR5cGUpIHsKKwkJY2FzZSBIV0FfTk9USUZfRE46IHsKKwkJCXN0cnVjdCBod2Ffbm90aWZfZG4gKmh3YV9kbjsKKwkJCWh3YV9kbiA9IGNvbnRhaW5lcl9vZihub3RpZl9oZHIsIHN0cnVjdCBod2Ffbm90aWZfZG4sCisJCQkJCSAgICAgIGhkcik7CisJCQl3dXNiaGNfaGFuZGxlX2RuKHdhLT53dXNiLCBod2FfZG4tPmJTb3VyY2VEZXZpY2VBZGRyLAorCQkJCQkgaHdhX2RuLT5kbmRhdGEsCisJCQkJCSBub3RpZl9oZHItPmJMZW5ndGggLSBzaXplb2YoKmh3YV9kbikpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBXQV9OT1RJRl9UUkFOU0ZFUjoKKwkJCXdhX2hhbmRsZV9ub3RpZl94ZmVyKHdhLCBub3RpZl9oZHIpOworCQkJYnJlYWs7CisJCWNhc2UgRFdBX05PVElGX1JXQUtFOgorCQljYXNlIERXQV9OT1RJRl9QT1JUU1RBVFVTOgorCQljYXNlIEhXQV9OT1RJRl9CUFNUX0FESjoKKwkJCS8qIEZJWE1FOiB1bmltcGxlbWVudGVkIFdBIE5PVElGcyAqLworCQkJLyogZmFsbHRocnUgKi8KKwkJZGVmYXVsdDoKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJCQlkZXZfZXJyKGRldiwgIkhXQTogdW5rbm93biBub3RpZmljYXRpb24gMHgleCwgIgorCQkJCQkiJXp1IGJ5dGVzOyBkaXNjYXJkaW5nXG4iLAorCQkJCQlub3RpZl9oZHItPmJOb3RpZnlUeXBlLAorCQkJCQkoc2l6ZV90KW5vdGlmX2hkci0+Ykxlbmd0aCk7CisJCQkJZHVtcF9ieXRlcyhkZXYsIG5vdGlmX2hkciwgMTYpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CitvdXQ6CisJd2FfcHV0KHdhKTsKKwlrZnJlZShudyk7CisJcmV0dXJuOworCisJLyogVEhJUyBTSE9VTEQgTk9UIEhBUFBFTgorCSAqCisJICogQnVmZmVyIGV4YWh1c3RlZCB3aXRoIHBhcnRpYWwgZGF0YSByZW1haW5pbmc7IGp1c3Qgd2FybiBhbmQKKwkgKiBkaXNjYXJkIHRoZSBkYXRhLCBhcyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLgorCSAqLworZXhoYXVzdGVkX2J1ZmZlcjoKKwlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJZ290byBvdXQ7CisJZGV2X3dhcm4oZGV2LCAiSFdBOiBkZXZpY2Ugc2VudCBzaG9ydCBub3RpZmljYXRpb24sICIKKwkJICIlZCBieXRlcyBtaXNzaW5nOyBkaXNjYXJkaW5nICVkIGJ5dGVzLlxuIiwKKwkJIG1pc3NpbmcsIChpbnQpc2l6ZSk7CisJZHVtcF9ieXRlcyhkZXYsIGl0ciwgc2l6ZSk7CisJZ290byBvdXQ7Cit9CisKKy8qCisgKiBEZWxpdmVyIGluY29taW5nIFdBIG5vdGlmaWNhdGlvbnMgdG8gdGhlIHd1c2J3YSB3b3JrcXVldWUKKyAqCisgKiBAd2E6CVBvaW50ZXIgdGhlIFdpcmUgQWRhcHRlciBDb250cm9sbGVyIERhdGEgU3RyZWFtaW5nCisgKiAgICAgICAgICAgICAgaW5zdGFuY2UgKHBhcnQgb2YgYW4gJ3N0cnVjdCB1c2JfaGNkJykuCisgKiBAc2l6ZTogICAgICAgU2l6ZSBvZiB0aGUgcmVjZWl2ZWQgYnVmZmVyCisgKiBAcmV0dXJucyAgICAgMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKgorICogVGhlIGlucHV0IGJ1ZmZlciBpcyBAd2EtPm5lcF9idWZmZXIsIHdpdGggQHNpemUgYnl0ZXMKKyAqIChndWFyYW50ZWVkIHRvIGZpdCBpbiB0aGUgYWxsb2NhdGVkIHNwYWNlLAorICogQHdhLT5uZXBfYnVmZmVyX3NpemUpLgorICovCitzdGF0aWMgaW50IHdhX25lcF9xdWV1ZShzdHJ1Y3Qgd2FoYyAqd2EsIHNpemVfdCBzaXplKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJc3RydWN0IHdhX25vdGlmX3dvcmsgKm53OworCisJLyogZGV2X2Zuc3RhcnQoZGV2LCAiKHdhICVwLCBzaXplICV6dSlcbiIsIHdhLCBzaXplKTsgKi8KKwlCVUdfT04oc2l6ZSA+IHdhLT5uZXBfYnVmZmVyX3NpemUpOworCWlmIChzaXplID09IDApCisJCWdvdG8gb3V0OworCWlmIChhdG9taWNfcmVhZCgmd2EtPm5vdGlmc19xdWV1ZWQpID4gMjAwKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKGRldiwgIlRvbyBtYW55IG5vdGlmaWNhdGlvbnMgcXVldWVkLCAiCisJCQkJInRocm90dGxpbmcgYmFja1xuIik7CisJCWdvdG8gb3V0OworCX0KKwludyA9IGt6YWxsb2Moc2l6ZW9mKCpudykgKyBzaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAobncgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJObyBtZW1vcnkgdG8gcXVldWUgbm90aWZpY2F0aW9uXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCUlOSVRfV09SSygmbnctPndvcmssIHdhX25vdGlmX2Rpc3BhdGNoKTsKKwludy0+d2EgPSB3YV9nZXQod2EpOworCW53LT5zaXplID0gc2l6ZTsKKwltZW1jcHkobnctPmRhdGEsIHdhLT5uZXBfYnVmZmVyLCBzaXplKTsKKwlhdG9taWNfaW5jKCZ3YS0+bm90aWZzX3F1ZXVlZCk7CQkvKiBUaHJvdHRsaW5nIGN0bCAqLworCXF1ZXVlX3dvcmsod3VzYmQsICZudy0+d29yayk7CitvdXQ6CisJLyogZGV2X2ZuZW5kKGRldiwgIih3YSAlcCwgc2l6ZSAlenUpID0gcmVzdWx0XG4iLCB3YSwgc2l6ZSwgcmVzdWx0KTsgKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2FsbGJhY2sgZm9yIHRoZSBub3RpZmljYXRpb24gZXZlbnQgZW5kcG9pbnQKKyAqCisgKiBDaGVjaydzIHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIGFuZCB0aGVuIHBhc3NlcyB0aGUgZGF0YSB0byBiZQorICogcXVldWVkIHRvIHRoZSB3b3JrcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIHdhX25lcF9jYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3Qgd2FoYyAqd2EgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKworCXN3aXRjaCAocmVzdWx0ID0gdXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCXJlc3VsdCA9IHdhX25lcF9xdWV1ZSh3YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlkZXZfZXJyKGRldiwgIk5FUDogdW5hYmxlIHRvIHByb2Nlc3Mgbm90aWZpY2F0aW9uKHMpOiAiCisJCQkJIiVkXG4iLCByZXN1bHQpOworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiBOb3QgYW4gZXJyb3IsIGJ1dCBhIGNvbnRyb2xsZWQgc2l0dWF0aW9uOyAqLworCWNhc2UgLUVOT0VOVDoJCS8qICh3ZSBraWxsZWQgdGhlIFVSQikuLi5zbywgbm8gYnJvYWRjYXN0ICovCisJY2FzZSAtRVNIVVRET1dOOgorCQlkZXZfZGJnKGRldiwgIk5FUDogZ29pbmcgZG93biAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlnb3RvIG91dDsKKwlkZWZhdWx0OgkvKiBPbiBnZW5lcmFsIGVycm9ycywgd2UgcmV0cnkgdW5sZXNzIGl0IGdldHMgdWdseSAqLworCQlpZiAoZWRjX2luYygmd2EtPm5lcF9lZGMsIEVEQ19NQVhfRVJST1JTLAorCQkJICAgIEVEQ19FUlJPUl9USU1FRlJBTUUpKSB7CisJCQlkZXZfZXJyKGRldiwgIk5FUDogVVJCIG1heCBhY2NlcHRhYmxlIGVycm9ycyAiCisJCQkJImV4Y2VlZGVkLCByZXNldHRpbmcgZGV2aWNlXG4iKTsKKwkJCXdhX3Jlc2V0X2FsbCh3YSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlkZXZfZXJyKGRldiwgIk5FUDogVVJCIGVycm9yICVkXG4iLCB1cmItPnN0YXR1cyk7CisJfQorCXJlc3VsdCA9IHdhX25lcF9hcm0od2EsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiTkVQOiBjYW5ub3Qgc3VibWl0IFVSQjogJWRcbiIsIHJlc3VsdCk7CisJCXdhX3Jlc2V0X2FsbCh3YSk7CisJfQorb3V0OgorCXJldHVybjsKK30KKworLyoKKyAqIEluaXRpYWxpemUgQHdhJ3Mgbm90aWZpY2F0aW9uIGFuZCBldmVudCdzIGVuZHBvaW50IHN0dWZmCisgKgorICogVGhpcyBpbmNsdWRlcyB0aGUgYWxsb2NhdGluZyB0aGUgcmVhZCBidWZmZXIsIHRoZSBjb250ZXh0IElECisgKiBhbGxvY2F0aW9uIGJpdG1hcCwgdGhlIFVSQiBhbmQgc3VibWl0dGluZyB0aGUgVVJCLgorICovCitpbnQgd2FfbmVwX2NyZWF0ZShzdHJ1Y3Qgd2FoYyAqd2EsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpZmFjZSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisKKwllZGNfaW5pdCgmd2EtPm5lcF9lZGMpOworCWVwZCA9ICZpZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisJd2EtPm5lcF9idWZmZXJfc2l6ZSA9IDEwMjQ7CisJd2EtPm5lcF9idWZmZXIgPSBrbWFsbG9jKHdhLT5uZXBfYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICh3YS0+bmVwX2J1ZmZlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG5vdGlmaWNhdGlvbidzIHJlYWQgYnVmZmVyXG4iKTsKKwkJZ290byBlcnJvcl9uZXBfYnVmZmVyOworCX0KKwl3YS0+bmVwX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHdhLT5uZXBfdXJiID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbm90aWZpY2F0aW9uIFVSQlxuIik7CisJCWdvdG8gZXJyb3JfdXJiX2FsbG9jOworCX0KKwl1c2JfZmlsbF9pbnRfdXJiKHdhLT5uZXBfdXJiLCB1c2JfZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKHVzYl9kZXYsIGVwZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgd2EtPm5lcF9idWZmZXIsIHdhLT5uZXBfYnVmZmVyX3NpemUsCisJCQkgd2FfbmVwX2NiLCB3YSwgZXBkLT5iSW50ZXJ2YWwpOworCXJlc3VsdCA9IHdhX25lcF9hcm0od2EsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHN1Ym1pdCBub3RpZmljYXRpb24gVVJCOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9uZXBfYXJtOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3JfbmVwX2FybToKKwl1c2JfZnJlZV91cmIod2EtPm5lcF91cmIpOworZXJyb3JfdXJiX2FsbG9jOgorCWtmcmVlKHdhLT5uZXBfYnVmZmVyKTsKK2Vycm9yX25lcF9idWZmZXI6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgd2FfbmVwX2Rlc3Ryb3koc3RydWN0IHdhaGMgKndhKQoreworCXdhX25lcF9kaXNhcm0od2EpOworCXVzYl9mcmVlX3VyYih3YS0+bmVwX3VyYik7CisJa2ZyZWUod2EtPm5lcF9idWZmZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtcnBpcGUuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXJwaXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4ZTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXJwaXBlLmMKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiBXVVNCIFdpcmUgQWRhcHRlcgorICogcnBpcGUgbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogRklYTUU6IGRvY3MKKyAqCisgKiBSUElQRQorICoKKyAqICAgVGFyZ2V0dGVkIGF0IGRpZmZlcmVudCBkb3duc3RyZWFtIGVuZHBvaW50cworICoKKyAqICAgRGVzY3JpcHRvcjogdXNlIHRvIGNvbmZpZyB0aGUgcmVtb3RlIHBpcGUuCisgKgorICogICBUaGUgbnVtYmVyIG9mIGJsb2NrcyBjb3VsZCBiZSBkeW5hbWljICh3QmxvY2tzIGluIGRlc2NyaXB0b3IgaXMKKyAqICAgMCktLW5lZWQgdG8gc2NoZWR1bGUgdGhlbSB0aGVuLgorICoKKyAqIEVhY2ggYml0IGluIHdhLT5ycGlwZV9ibSByZXByZXNlbnRzIGlmIGFuIHJwaXBlIGlzIGJlaW5nIHVzZWQgb3IKKyAqIG5vdC4gUnBpcGVzIGFyZSByZXByZXNlbnRlZCB3aXRoIGEgJ3N0cnVjdCB3YV9ycGlwZScgdGhhdCBpcworICogYXR0YWNoZWQgdG8gdGhlIGhjcHJpdiBtZW1iZXIgb2YgYSAnc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50Jy4KKyAqCisgKiBXaGVuIHlvdSBuZWVkIHRvIHhmZXIgZGF0YSB0byBhbiBlbmRwb2ludCwgeW91IGdldCBhbiBycGlwZSBmb3IgaXQKKyAqIHdpdGggd2FfZXBfcnBpcGVfZ2V0KCksIHdoaWNoIGdpdmVzIHlvdSBhIHJlZmVyZW5jZSB0byB0aGUgcnBpcGUKKyAqIGFuZCBrZWVwcyBhIHNpbmdsZSBvbmUgKHRoZSBmaXJzdCBvbmUpIHdpdGggdGhlIGVuZHBvaW50LiBXaGVuIHlvdQorICogYXJlIGRvbmUgdHJhbnNmZXJyaW5nLCB5b3UgZHJvcCB0aGF0IHJlZmVyZW5jZS4gQXQgdGhlIGVuZCB0aGUKKyAqIHJwaXBlIGlzIGFsd2F5cyBhbGxvY2F0ZWQgYW5kIGJvdW5kIHRvIHRoZSBlbmRwb2ludC4gVGhlcmUgaXQgbWlnaHQKKyAqIGJlIHJlY3ljbGVkIHdoZW4gbm90IHVzZWQuCisgKgorICogQWRkcmVzc2VzOgorICoKKyAqICBXZSB1c2UgYSAxOjEgbWFwcGluZyBtZWNoYW5pc20gYmV0d2VlbiBwb3J0IGFkZHJlc3MgKDAgYmFzZWQKKyAqICBpbmRleCwgYWN0dWFsbHkpIGFuZCB0aGUgYWRkcmVzcy4gVGhlIFVTQiBzdGFjayBrbm93cyBhYm91dCB0aGlzLgorICoKKyAqICBVU0IgU3RhY2sgcG9ydCBudW1iZXIgICAgNCAoMSBiYXNlZCkKKyAqICBXVVNCIGNvZGUgcG9ydCBpbmRleCAgICAgMyAoMCBiYXNlZCkKKyAqICBVU0IgQWRkcmVzc3MgICAgICAgICAgICAgNSAoMiBiYXNlZCAtLSAwIGlzIGZvciBkZWZhdWx0LCAxIGZvciByb290IGh1YikKKyAqCisgKiAgTm93LCBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGUgY29uY2VwdCBhcyBkZWZhdWx0IGFkZHJlc3MgZXhhY3RseQorICogIGxpa2UgdGhlICh3aXJlZCkgVVNCIGNvZGUgZG9lcywgd2UgbmVlZCB0byBraW5kIG9mIHNraXAgaXQuIFNvIHdlCisgKiAgbmV2ZXIgdGFrZSBhZGRyZXNzZXMgZnJvbSB0aGUgdXJiLT5waXBlLCBidXQgZnJvbSB0aGUKKyAqICB1cmItPmRldi0+ZGV2bnVtLCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSB0aGUgcmlnaHQKKyAqICBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlICJ3dXNiaGMuaCIKKyNpbmNsdWRlICJ3YS1oYy5oIgorCisjZGVmaW5lIERfTE9DQUwgMAorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCisKK3N0YXRpYyBpbnQgX19ycGlwZV9nZXRfZGVzY3Ioc3RydWN0IHdhaGMgKndhLAorCQkJICAgICBzdHJ1Y3QgdXNiX3JwaXBlX2Rlc2NyaXB0b3IgKmRlc2NyLCB1MTYgaW5kZXgpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKworCS8qIEdldCB0aGUgUlBJUEUgZGVzY3JpcHRvciAtLSB3ZSBjYW5ub3QgdXNlIHRoZSB1c2JfZ2V0X2Rlc2NyaXB0b3IoKQorCSAqIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGFyZ3VtZW50cyBhcmUgZGlmZmVyZW50LgorCSAqLworCWRfcHJpbnRmKDEsIGRldiwgInJwaXBlICV1OiBnZXQgZGVzY3JcbiIsIGluZGV4KTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCXdhLT51c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUod2EtPnVzYl9kZXYsIDApLAorCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfUlBJUEUsCisJCVVTQl9EVF9SUElQRTw8OCwgaW5kZXgsIGRlc2NyLCBzaXplb2YoKmRlc2NyKSwKKwkJMTAwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInJwaXBlICV1OiBnZXQgZGVzY3JpcHRvciBmYWlsZWQ6ICVkXG4iLAorCQkJaW5kZXgsIChpbnQpcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKHJlc3VsdCA8IHNpemVvZigqZGVzY3IpKSB7CisJCWRldl9lcnIoZGV2LCAicnBpcGUgJXU6IGdvdCBzaG9ydCBkZXNjcmlwdG9yICIKKwkJCSIoJXpkIHZzICV6ZCBieXRlcyBuZWVkZWQpXG4iLAorCQkJaW5kZXgsIHJlc3VsdCwgc2l6ZW9mKCpkZXNjcikpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKwlyZXN1bHQgPSAwOworCitlcnJvcjoKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICoKKyAqIFRoZSBkZXNjcmlwdG9yIGlzIGFzc3VtZWQgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGllOiB5b3UgZ290CisgKiBpdCB0aHJvdWdoIF9fcnBpcGVfZ2V0X2Rlc2NyKCkpLgorICovCitzdGF0aWMgaW50IF9fcnBpcGVfc2V0X2Rlc2NyKHN0cnVjdCB3YWhjICp3YSwKKwkJCSAgICAgc3RydWN0IHVzYl9ycGlwZV9kZXNjcmlwdG9yICpkZXNjciwgdTE2IGluZGV4KQoreworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisKKwkvKiB3ZSBjYW5ub3QgdXNlIHRoZSB1c2JfZ2V0X2Rlc2NyaXB0b3IoKSBmdW5jdGlvbiBiZWNhdXNlIHRoZQorCSAqIGFyZ3VtZW50cyBhcmUgZGlmZmVyZW50LgorCSAqLworCWRfcHJpbnRmKDEsIGRldiwgInJwaXBlICV1OiBzZXQgZGVzY3JcbiIsIGluZGV4KTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCXdhLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUod2EtPnVzYl9kZXYsIDApLAorCQlVU0JfUkVRX1NFVF9ERVNDUklQVE9SLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX1JQSVBFLAorCQlVU0JfRFRfUlBJUEU8PDgsIGluZGV4LCBkZXNjciwgc2l6ZW9mKCpkZXNjciksCisJCUhaIC8gMTApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicnBpcGUgJXU6IHNldCBkZXNjcmlwdG9yIGZhaWxlZDogJWRcbiIsCisJCQlpbmRleCwgKGludClyZXN1bHQpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAocmVzdWx0IDwgc2l6ZW9mKCpkZXNjcikpIHsKKwkJZGV2X2VycihkZXYsICJycGlwZSAldTogc2VudCBzaG9ydCBkZXNjcmlwdG9yICIKKwkJCSIoJXpkIHZzICV6ZCBieXRlcyByZXF1aXJlZClcbiIsCisJCQlpbmRleCwgcmVzdWx0LCBzaXplb2YoKmRlc2NyKSk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCXJlc3VsdCA9IDA7CisKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgcnBpcGVfaW5pdChzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlKQoreworCWtyZWZfaW5pdCgmcnBpcGUtPnJlZmNudCk7CisJc3Bpbl9sb2NrX2luaXQoJnJwaXBlLT5zZWdfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnJwaXBlLT5zZWdfbGlzdCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBycGlwZV9nZXRfaWR4KHN0cnVjdCB3YWhjICp3YSwgdW5zaWduZWQgcnBpcGVfaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2EtPnJwaXBlX2JtX2xvY2ssIGZsYWdzKTsKKwlycGlwZV9pZHggPSBmaW5kX25leHRfemVyb19iaXQod2EtPnJwaXBlX2JtLCB3YS0+cnBpcGVzLCBycGlwZV9pZHgpOworCWlmIChycGlwZV9pZHggPCB3YS0+cnBpcGVzKQorCQlzZXRfYml0KHJwaXBlX2lkeCwgd2EtPnJwaXBlX2JtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YS0+cnBpcGVfYm1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJwaXBlX2lkeDsKK30KKworc3RhdGljIHZvaWQgcnBpcGVfcHV0X2lkeChzdHJ1Y3Qgd2FoYyAqd2EsIHVuc2lnbmVkIHJwaXBlX2lkeCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndhLT5ycGlwZV9ibV9sb2NrLCBmbGFncyk7CisJY2xlYXJfYml0KHJwaXBlX2lkeCwgd2EtPnJwaXBlX2JtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YS0+cnBpcGVfYm1fbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHJwaXBlX2Rlc3Ryb3koc3RydWN0IGtyZWYgKl9ycGlwZSkKK3sKKwlzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlID0gY29udGFpbmVyX29mKF9ycGlwZSwgc3RydWN0IHdhX3JwaXBlLCByZWZjbnQpOworCXU4IGluZGV4ID0gbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndSUGlwZUluZGV4KTsKKwlkX2Zuc3RhcnQoMSwgTlVMTCwgIihycGlwZSAlcCAldSlcbiIsIHJwaXBlLCBpbmRleCk7CisJaWYgKHJwaXBlLT5lcCkKKwkJcnBpcGUtPmVwLT5oY3ByaXYgPSBOVUxMOworCXJwaXBlX3B1dF9pZHgocnBpcGUtPndhLCBpbmRleCk7CisJd2FfcHV0KHJwaXBlLT53YSk7CisJa2ZyZWUocnBpcGUpOworCWRfZm5lbmQoMSwgTlVMTCwgIihycGlwZSAlcCAldSlcbiIsIHJwaXBlLCBpbmRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChycGlwZV9kZXN0cm95KTsKKworLyoKKyAqIExvY2F0ZSBhbiBpZGxlIHJwaXBlLCBjcmVhdGUgYW4gc3RydWN0dXJlIGZvciBpdCBhbmQgcmV0dXJuIGl0CisgKgorICogQHdhIAkgIGlzIHJlZmVyZW5jZWQgYW5kIHVubG9ja2VkCisgKiBAY3JzICAgZW51bSBycGlwZV9hdHRyLCByZXF1aXJlZCBlbmRwb2ludCBjaGFyYWN0ZXJpc3RpY3MKKyAqCisgKiBUaGUgcnBpcGUgY2FuIGJlIHVzZWQgb25seSBzZXF1ZW50aWFsbHkgKG5vdCBpbiBwYXJhbGxlbCkuCisgKgorICogVGhlIHJwaXBlIGlzIG1vdmVkIGludG8gdGhlICJyZWFkeSIgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgcnBpcGVfZ2V0X2lkbGUoc3RydWN0IHdhX3JwaXBlICoqcHJwaXBlLCBzdHJ1Y3Qgd2FoYyAqd2EsIHU4IGNycywKKwkJCSAgZ2ZwX3QgZ2ZwKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgcnBpcGVfaWR4OworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKworCWRfZm5zdGFydCgzLCBkZXYsICIod2EgJXAgY3JzIDB4JTAyeClcbiIsIHdhLCBjcnMpOworCXJwaXBlID0ga3phbGxvYyhzaXplb2YoKnJwaXBlKSwgZ2ZwKTsKKwlpZiAocnBpcGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcnBpcGVfaW5pdChycGlwZSk7CisKKwkvKiBMb29rIGZvciBhbiBpZGxlIHBpcGUgKi8KKwlmb3IgKHJwaXBlX2lkeCA9IDA7IHJwaXBlX2lkeCA8IHdhLT5ycGlwZXM7IHJwaXBlX2lkeCsrKSB7CisJCXJwaXBlX2lkeCA9IHJwaXBlX2dldF9pZHgod2EsIHJwaXBlX2lkeCk7CisJCWlmIChycGlwZV9pZHggPj0gd2EtPnJwaXBlcykJLyogbm8gbW9yZSBwaXBlcyA6KCAqLworCQkJYnJlYWs7CisJCXJlc3VsdCA9ICBfX3JwaXBlX2dldF9kZXNjcih3YSwgJnJwaXBlLT5kZXNjciwgcnBpcGVfaWR4KTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlkZXZfZXJyKGRldiwgIkNhbid0IGdldCBkZXNjcmlwdG9yIGZvciBycGlwZSAldTogJWRcbiIsCisJCQkJcnBpcGVfaWR4LCByZXN1bHQpOworCQllbHNlIGlmICgocnBpcGUtPmRlc2NyLmJtQ2hhcmFjdGVyaXN0aWNzICYgY3JzKSAhPSAwKQorCQkJZ290byBmb3VuZDsKKwkJcnBpcGVfcHV0X2lkeCh3YSwgcnBpcGVfaWR4KTsKKwl9CisJKnBycGlwZSA9IE5VTEw7CisJa2ZyZWUocnBpcGUpOworCWRfZm5lbmQoMywgZGV2LCAiKHdhICVwIGNycyAweCUwMngpID0gLUVOWElPXG4iLCB3YSwgY3JzKTsKKwlyZXR1cm4gLUVOWElPOworCitmb3VuZDoKKwlzZXRfYml0KHJwaXBlX2lkeCwgd2EtPnJwaXBlX2JtKTsKKwlycGlwZS0+d2EgPSB3YV9nZXQod2EpOworCSpwcnBpcGUgPSBycGlwZTsKKwlkX2Zuc3RhcnQoMywgZGV2LCAiKHdhICVwIGNycyAweCUwMngpID0gMFxuIiwgd2EsIGNycyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19ycGlwZV9yZXNldChzdHJ1Y3Qgd2FoYyAqd2EsIHVuc2lnbmVkIGluZGV4KQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKworCWRfcHJpbnRmKDEsIGRldiwgInJwaXBlICV1OiByZXNldFxuIiwgaW5kZXgpOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZygKKwkJd2EtPnVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh3YS0+dXNiX2RldiwgMCksCisJCVVTQl9SRVFfUlBJUEVfUkVTRVQsCisJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfUlBJUEUsCisJCTAsIGluZGV4LCBOVUxMLCAwLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgInJwaXBlICV1OiByZXNldCBmYWlsZWQ6ICVkXG4iLAorCQkJaW5kZXgsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEZha2UgY29tcGFuaW9uIGRlc2NyaXB0b3IgZm9yIGVwMAorICoKKyAqIFNlZSBXVVNCMS4wWzcuNC40XSwgbW9zdCBvZiB0aGlzIGlzIHplcm8gZm9yIGJ1bGsvaW50L2N0bAorICovCitzdGF0aWMgc3RydWN0IHVzYl93aXJlbGVzc19lcF9jb21wX2Rlc2NyaXB0b3IgZXBjMCA9IHsKKwkuYkxlbmd0aCA9IHNpemVvZihlcGMwKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX1dJUkVMRVNTX0VORFBPSU5UX0NPTVAsCisvKgkuYk1heEJ1cnN0ID0gMSwgKi8KKwkuYk1heFNlcXVlbmNlID0gMzEsCit9OworCisvKgorICogTG9vayBmb3IgRVAgY29tcGFuaW9uIGRlc2NyaXB0b3IKKyAqCisgKiBHZXQgdGhlcmUsIGxvb2sgZm9yIEluYXJhIGluIHRoZSBlbmRwb2ludCdzIGV4dHJhIGRlc2NyaXB0b3JzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3dpcmVsZXNzX2VwX2NvbXBfZGVzY3JpcHRvciAqcnBpcGVfZXBjX2ZpbmQoCisJCXN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwl2b2lkICppdHI7CisJc2l6ZV90IGl0cl9zaXplOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhkcjsKKwlzdHJ1Y3QgdXNiX3dpcmVsZXNzX2VwX2NvbXBfZGVzY3JpcHRvciAqZXBjZDsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoZXAgJXApXG4iLCBlcCk7CisJaWYgKGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgPT0gMCkgeworCQllcGNkID0gJmVwYzA7CisJCWdvdG8gb3V0OworCX0KKwlpdHIgPSBlcC0+ZXh0cmE7CisJaXRyX3NpemUgPSBlcC0+ZXh0cmFsZW47CisJZXBjZCA9IE5VTEw7CisJd2hpbGUgKGl0cl9zaXplID4gMCkgeworCQlpZiAoaXRyX3NpemUgPCBzaXplb2YoKmhkcikpIHsKKwkJCWRldl9lcnIoZGV2LCAiSFcgQnVnPyBlcCAweCUwMng6IGV4dHJhIGRlc2NyaXB0b3JzICIKKwkJCQkiYXQgb2Zmc2V0ICV6dTogb25seSAlenUgYnl0ZXMgbGVmdFxuIiwKKwkJCQllcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAorCQkJCWl0ciAtICh2b2lkICopIGVwLT5leHRyYSwgaXRyX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJaGRyID0gaXRyOworCQlpZiAoaGRyLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX1dJUkVMRVNTX0VORFBPSU5UX0NPTVApIHsKKwkJCWVwY2QgPSBpdHI7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaGRyLT5iTGVuZ3RoID4gaXRyX3NpemUpIHsKKwkJCWRldl9lcnIoZGV2LCAiSFcgQnVnPyBlcCAweCUwMng6IGV4dHJhIGRlc2NyaXB0b3IgIgorCQkJCSJhdCBvZmZzZXQgJXp1ICh0eXBlIDB4JTAyeCkgIgorCQkJCSJsZW5ndGggJWQgYnV0IG9ubHkgJXp1IGJ5dGVzIGxlZnRcbiIsCisJCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKKwkJCQlpdHIgLSAodm9pZCAqKSBlcC0+ZXh0cmEsIGhkci0+YkRlc2NyaXB0b3JUeXBlLAorCQkJCWhkci0+Ykxlbmd0aCwgaXRyX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJaXRyICs9IGhkci0+Ykxlbmd0aDsKKwkJaXRyX3NpemUgLT0gaGRyLT5iRGVzY3JpcHRvclR5cGU7CisJfQorb3V0OgorCWRfZm5lbmQoMywgZGV2LCAiKGVwICVwKSA9ICVwXG4iLCBlcCwgZXBjZCk7CisJcmV0dXJuIGVwY2Q7Cit9CisKKy8qCisgKiBBaW0gYW4gcnBpcGUgdG8gaXRzIGRldmljZSAmIGVuZHBvaW50IGRlc3RpbmF0aW9uCisgKgorICogTWFrZSBzdXJlIHdlIGNoYW5nZSB0aGUgYWRkcmVzcyB0byB1bmF1dGhlbnRpY2F0aGVkIGlmIHRoZSBkZXZpY2UKKyAqIGlzIFdVU0IgYW5kIGl0IGlzIG5vdCBhdXRoZW50aWNhdGVkLgorICovCitzdGF0aWMgaW50IHJwaXBlX2FpbShzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlLCBzdHJ1Y3Qgd2FoYyAqd2EsCisJCSAgICAgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBnZnApCit7CisJaW50IHJlc3VsdCA9IC1FTk9NU0c7CS8qIGJldHRlciBjb2RlIGZvciBsYWNrIG9mIGNvbXBhbmlvbj8gKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdXJiLT5kZXY7CisJc3RydWN0IHVzYl93aXJlbGVzc19lcF9jb21wX2Rlc2NyaXB0b3IgKmVwY2Q7CisJdTggdW5hdXRoOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIihycGlwZSAlcCB3YSAlcCBlcCAlcCwgdXJiICVwKVxuIiwKKwkJICAgIHJwaXBlLCB3YSwgZXAsIHVyYik7CisJZXBjZCA9IHJwaXBlX2VwY19maW5kKGRldiwgZXApOworCWlmIChlcGNkID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJlcCAweCUwMng6IGNhbid0IGZpbmQgY29tcGFuaW9uIGRlc2NyaXB0b3JcbiIsCisJCQllcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJZ290byBlcnJvcjsKKwl9CisJdW5hdXRoID0gdXNiX2Rldi0+d3VzYiAmJiAhdXNiX2Rldi0+YXV0aGVudGljYXRlZCA/IDB4ODAgOiAwOworCV9fcnBpcGVfcmVzZXQod2EsIGxlMTZfdG9fY3B1KHJwaXBlLT5kZXNjci53UlBpcGVJbmRleCkpOworCWF0b21pY19zZXQoJnJwaXBlLT5zZWdzX2F2YWlsYWJsZSwgbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndSZXF1ZXN0cykpOworCS8qIEZJWE1FOiBibG9jayBhbGxvY2F0aW9uIHN5c3RlbTsgcmVxdWVzdCB3aXRoIHF1ZXVpbmcgYW5kIHRpbWVvdXQgKi8KKwkvKiBGSVhNRTogY29tcHV0ZSBzbyBzZWdfc2l6ZSA+IGVwLT5tYXhwa3RzaXplICovCisJcnBpcGUtPmRlc2NyLndCbG9ja3MgPSBjcHVfdG9fbGUxNigxNik7CQkvKiBnaXZlbiAqLworCS8qIGVwMCBtYXhwa3RzaXplIGlzIDB4MjAwIChXVVNCMS4wWzQuOC4xXSkgKi8KKwlycGlwZS0+ZGVzY3Iud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNihlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CisJcnBpcGUtPmRlc2NyLmJIU0h1YkFkZHJlc3MgPSAwOwkJCS8qIHJlc2VydmVkOiB6ZXJvICovCisJcnBpcGUtPmRlc2NyLmJIU0h1YlBvcnQgPSB3dXNiX3BvcnRfbm9fdG9faWR4KHVyYi0+ZGV2LT5wb3J0bnVtKTsKKwkvKiBGSVhNRTogdXNlIG1heGltdW0gc3BlZWQgYXMgc3VwcG9ydGVkIG9yIHJlY29tbWVuZGVkIGJ5IGRldmljZSAqLworCXJwaXBlLT5kZXNjci5iU3BlZWQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSkgPT0gMCA/CisJCVVXQl9QSFlfUkFURV81MyA6IFVXQl9QSFlfUkFURV8yMDA7CisJZF9wcmludGYoMiwgZGV2LCAiYWRkciAldSAoMHglMDJ4KSBycGlwZSAjJXUgZXAjICV1IHNwZWVkICVkXG4iLAorCQkgdXJiLT5kZXYtPmRldm51bSwgdXJiLT5kZXYtPmRldm51bSB8IHVuYXV0aCwKKwkJIGxlMTZfdG9fY3B1KHJwaXBlLT5kZXNjci53UlBpcGVJbmRleCksCisJCSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksIHJwaXBlLT5kZXNjci5iU3BlZWQpOworCS8qIHNlZSBzZWN1cml0eS5jOnd1c2JfdXBkYXRlX2FkZHJlc3MoKSAqLworCWlmICh1bmxpa2VseSh1cmItPmRldi0+ZGV2bnVtID09IDB4ODApKQorCQlycGlwZS0+ZGVzY3IuYkRldmljZUFkZHJlc3MgPSAwOworCWVsc2UKKwkJcnBpcGUtPmRlc2NyLmJEZXZpY2VBZGRyZXNzID0gdXJiLT5kZXYtPmRldm51bSB8IHVuYXV0aDsKKwlycGlwZS0+ZGVzY3IuYkVuZHBvaW50QWRkcmVzcyA9IGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJLyogRklYTUU6IGJEYXRhU2VxdWVuY2UgKi8KKwlycGlwZS0+ZGVzY3IuYkRhdGFTZXF1ZW5jZSA9IDA7CisJLyogRklYTUU6IGR3Q3VycmVudFdpbmRvdyAqLworCXJwaXBlLT5kZXNjci5kd0N1cnJlbnRXaW5kb3cgPSBjcHVfdG9fbGUzMigxKTsKKwkvKiBGSVhNRTogYk1heERhdGFTZXF1ZW5jZSAqLworCXJwaXBlLT5kZXNjci5iTWF4RGF0YVNlcXVlbmNlID0gZXBjZC0+Yk1heFNlcXVlbmNlIC0gMTsKKwlycGlwZS0+ZGVzY3IuYkludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOworCS8qIEZJWE1FOiBiT3ZlclRoZUFpckludGVydmFsICovCisJcnBpcGUtPmRlc2NyLmJPdmVyVGhlQWlySW50ZXJ2YWwgPSAwOwkvKiAwIGlmIG5vdCBpc29jICovCisJLyogRklYTUU6IHhtaXQgcG93ZXIgJiBwcmVhbWJsZSBibGFoIGJsYWggKi8KKwlycGlwZS0+ZGVzY3IuYm1BdHRyaWJ1dGUgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzOworCS8qIHJwaXBlLT5kZXNjci5ibUNoYXJhY3RlcmlzdGljcyBSTyAqLworCS8qIEZJWE1FOiBibVJldHJ5T3B0aW9ucyAqLworCXJwaXBlLT5kZXNjci5ibVJldHJ5T3B0aW9ucyA9IDE1OworCS8qIEZJWE1FOiB1c2UgZm9yIGFzc2Vzc2luZyBsaW5rIHF1YWxpdHk/ICovCisJcnBpcGUtPmRlc2NyLndOdW1UcmFuc2FjdGlvbkVycm9ycyA9IDA7CisJcmVzdWx0ID0gX19ycGlwZV9zZXRfZGVzY3Iod2EsICZycGlwZS0+ZGVzY3IsCisJCQkJICAgbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndSUGlwZUluZGV4KSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgYWltIHJwaXBlOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJcmVzdWx0ID0gMDsKK2Vycm9yOgorCWRfZm5lbmQoMywgZGV2LCAiKHJwaXBlICVwIHdhICVwIGVwICVwIHVyYiAlcCkgPSAlZFxuIiwKKwkJICBycGlwZSwgd2EsIGVwLCB1cmIsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIGFuIGFpbWVkIHJwaXBlIHRvIG1ha2Ugc3VyZSBpdCBwb2ludHMgdG8gd2hlcmUgd2Ugd2FudAorICoKKyAqIFdlIHVzZSBiaXQgMTkgb2YgdGhlIExpbnV4IFVTQiBwaXBlIGJpdG1hcCBmb3IgdW5hdXRoIHZzIGF1dGgKKyAqIHNwYWNlOyB3aGVuIGl0IGlzIGxpa2UgdGhhdCwgd2Ugb3IgMHg4MCB0byBtYWtlIGFuIHVuYXV0aCBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHJwaXBlX2NoZWNrX2FpbShjb25zdCBzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlLCBjb25zdCBzdHJ1Y3Qgd2FoYyAqd2EsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCQkJICAgY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBnZnApCit7CisJaW50IHJlc3VsdCA9IDA7CQkvKiBiZXR0ZXIgY29kZSBmb3IgbGFjayBvZiBjb21wYW5pb24/ICovCisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHVyYi0+ZGV2OworCXU4IHVuYXV0aCA9ICh1c2JfZGV2LT53dXNiICYmICF1c2JfZGV2LT5hdXRoZW50aWNhdGVkKSA/IDB4ODAgOiAwOworCXU4IHBvcnRudW0gPSB3dXNiX3BvcnRfbm9fdG9faWR4KHVyYi0+ZGV2LT5wb3J0bnVtKTsKKworCWRfZm5zdGFydCgzLCBkZXYsICIocnBpcGUgJXAgd2EgJXAgZXAgJXAsIHVyYiAlcClcbiIsCisJCSAgICBycGlwZSwgd2EsIGVwLCB1cmIpOworI2RlZmluZSBBSU1fQ0hFQ0socmRmLCB2YWwsIHRleHQpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAocnBpcGUtPmRlc2NyLnJkZiAhPSAodmFsKSkgewkJCVwKKwkJCWRldl9lcnIoZGV2LAkJCQkJXAorCQkJCSJycGlwZSBhaW0gZGlzY3JlcGFuY3k6ICIgI3JkZiAiICIgdGV4dCAiXG4iLCBcCisJCQkJcnBpcGUtPmRlc2NyLnJkZiwgKHZhbCkpOwkJXAorCQkJcmVzdWx0ID0gLUVJTlZBTDsJCQkJXAorCQkJV0FSTl9PTigxKTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKwlBSU1fQ0hFQ0sod01heFBhY2tldFNpemUsIGNwdV90b19sZTE2KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSwKKwkJICAiKCV1IHZzICV1KSIpOworCUFJTV9DSEVDSyhiSFNIdWJQb3J0LCBwb3J0bnVtLCAiKCV1IHZzICV1KSIpOworCUFJTV9DSEVDSyhiU3BlZWQsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSA9PSAwID8KKwkJCVVXQl9QSFlfUkFURV81MyA6IFVXQl9QSFlfUkFURV8yMDAsCisJCSAgIigldSB2cyAldSkiKTsKKwlBSU1fQ0hFQ0soYkRldmljZUFkZHJlc3MsIHVyYi0+ZGV2LT5kZXZudW0gfCB1bmF1dGgsICIoJXUgdnMgJXUpIik7CisJQUlNX0NIRUNLKGJFbmRwb2ludEFkZHJlc3MsIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsICIoJXUgdnMgJXUpIik7CisJQUlNX0NIRUNLKGJJbnRlcnZhbCwgZXAtPmRlc2MuYkludGVydmFsLCAiKCV1IHZzICV1KSIpOworCUFJTV9DSEVDSyhibUF0dHJpYnV0ZSwgZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgMHgwMywgIigldSB2cyAldSkiKTsKKyN1bmRlZiBBSU1fQ0hFQ0sKKwlyZXR1cm4gcmVzdWx0OworfQorCisjaWZuZGVmIENPTkZJR19CVUcKKyNkZWZpbmUgQ09ORklHX0JVRyAwCisjZW5kaWYKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhbiBycGlwZSBhbGxvY2F0ZWQgZm9yIGFuIGVuZHBvaW50CisgKgorICogSWYgYWxyZWFkeSBhbGxvY2F0ZWQsIHdlIGp1c3QgcmVmY291bnQgaXQ7IGlmIG5vdCwgd2UgZ2V0IGFuCisgKiBpZGxlIG9uZSwgYWltIGl0IHRvIHRoZSByaWdodCBsb2NhdGlvbiBhbmQgdGFrZSBpdC4KKyAqCisgKiBBdHRhY2hlcyB0byBlcC0+aGNwcml2IGFuZCBycGlwZS0+ZXAgdG8gZXAuCisgKi8KK2ludCBycGlwZV9nZXRfYnlfZXAoc3RydWN0IHdhaGMgKndhLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCQkgICAgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBnZnApCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlOworCXU4IGVwdHlwZTsKKworCWRfZm5zdGFydCgzLCBkZXYsICIod2EgJXAgZXAgJXAgdXJiICVwIGdmcCAweCUwOHgpXG4iLCB3YSwgZXAsIHVyYiwKKwkJICBnZnApOworCW11dGV4X2xvY2soJndhLT5ycGlwZV9tdXRleCk7CisJcnBpcGUgPSBlcC0+aGNwcml2OworCWlmIChycGlwZSAhPSBOVUxMKSB7CisJCWlmIChDT05GSUdfQlVHID09IDEpIHsKKwkJCXJlc3VsdCA9IHJwaXBlX2NoZWNrX2FpbShycGlwZSwgd2EsIGVwLCB1cmIsIGdmcCk7CisJCQlpZiAocmVzdWx0IDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCV9fcnBpcGVfZ2V0KHJwaXBlKTsKKwkJZF9wcmludGYoMiwgZGV2LCAiZXAgMHglMDJ4OiByZXVzaW5nIHJwaXBlICV1XG4iLAorCQkJIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCisJCQkgbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndSUGlwZUluZGV4KSk7CisJfSBlbHNlIHsKKwkJLyogaG1tLCBhc3NpZ24gaWRsZSBycGlwZSwgYWltIGl0ICovCisJCXJlc3VsdCA9IC1FTk9CVUZTOworCQllcHR5cGUgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzOworCQlyZXN1bHQgPSBycGlwZV9nZXRfaWRsZSgmcnBpcGUsIHdhLCAxIDw8IGVwdHlwZSwgZ2ZwKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlnb3RvIGVycm9yOworCQlyZXN1bHQgPSBycGlwZV9haW0ocnBpcGUsIHdhLCBlcCwgdXJiLCBnZnApOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJcnBpcGVfcHV0KHJwaXBlKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZXAtPmhjcHJpdiA9IHJwaXBlOworCQlycGlwZS0+ZXAgPSBlcDsKKwkJX19ycGlwZV9nZXQocnBpcGUpOwkvKiBmb3IgY2FjaGluZyBpbnRvIGVwLT5oY3ByaXYgKi8KKwkJZF9wcmludGYoMiwgZGV2LCAiZXAgMHglMDJ4OiB1c2luZyBycGlwZSAldVxuIiwKKwkJCSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAorCQkJIGxlMTZfdG9fY3B1KHJwaXBlLT5kZXNjci53UlBpcGVJbmRleCkpOworCX0KKwlkX2R1bXAoNCwgZGV2LCAmcnBpcGUtPmRlc2NyLCBzaXplb2YocnBpcGUtPmRlc2NyKSk7CitlcnJvcjoKKwltdXRleF91bmxvY2soJndhLT5ycGlwZV9tdXRleCk7CisJZF9mbmVuZCgzLCBkZXYsICIod2EgJXAgZXAgJXAgdXJiICVwIGdmcCAweCUwOHgpXG4iLCB3YSwgZXAsIHVyYiwgZ2ZwKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQWxsb2NhdGUgdGhlIGJpdG1hcCBmb3IgZWFjaCBycGlwZS4KKyAqLworaW50IHdhX3JwaXBlc19jcmVhdGUoc3RydWN0IHdhaGMgKndhKQoreworCXdhLT5ycGlwZXMgPSB3YS0+d2FfZGVzY3ItPndOdW1SUGlwZXM7CisJd2EtPnJwaXBlX2JtID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKHdhLT5ycGlwZXMpKnNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAod2EtPnJwaXBlX2JtID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCit2b2lkIHdhX3JwaXBlc19kZXN0cm95KHN0cnVjdCB3YWhjICp3YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCWRfZm5zdGFydCgzLCBkZXYsICIod2EgJXApXG4iLCB3YSk7CisJaWYgKCFiaXRtYXBfZW1wdHkod2EtPnJwaXBlX2JtLCB3YS0+cnBpcGVzKSkgeworCQljaGFyIGJ1ZlsyNTZdOworCQlXQVJOX09OKDEpOworCQliaXRtYXBfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHdhLT5ycGlwZV9ibSwgd2EtPnJwaXBlcyk7CisJCWRldl9lcnIoZGV2LCAiQlVHOiBwaXBlcyBub3QgcmVsZWFzZWQgb24gZXhpdDogJXNcbiIsIGJ1Zik7CisJfQorCWtmcmVlKHdhLT5ycGlwZV9ibSk7CisJZF9mbmVuZCgzLCBkZXYsICIod2EgJXApXG4iLCB3YSk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGFuIGVuZHBvaW50CisgKgorICogSWYgdGhlcmUgaXMgYW4gYXNzb2NpYXRlZCBycGlwZSB0byB0aGlzIGVuZHBvaW50LCBBYm9ydCBhbnkgcGVuZGluZworICogdHJhbnNmZXJzIGFuZCBwdXQgaXQuIElmIHRoZSBycGlwZSBlbmRzIHVwIGJlaW5nIGRlc3Ryb3llZCwKKyAqIF9fcnBpcGVfZGVzdHJveSgpIHdpbGwgY2xlYW51cCBlcC0+aGNwcml2LgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGhjZC0+c3RvcCgpLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkbworICogYW55dGhpbmcgZWxzZSBpbiB0aGVyZS4KKyAqLwordm9pZCBycGlwZV9lcF9kaXNhYmxlKHN0cnVjdCB3YWhjICp3YSwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGU7CisJZF9mbnN0YXJ0KDIsIGRldiwgIih3YSAlcCBlcCAlcClcbiIsIHdhLCBlcCk7CisJbXV0ZXhfbG9jaygmd2EtPnJwaXBlX211dGV4KTsKKwlycGlwZSA9IGVwLT5oY3ByaXY7CisJaWYgKHJwaXBlICE9IE5VTEwpIHsKKwkJdW5zaWduZWQgcmMgPSBhdG9taWNfcmVhZCgmcnBpcGUtPnJlZmNudC5yZWZjb3VudCk7CisJCWludCByZXN1bHQ7CisJCXUxNiBpbmRleCA9IGxlMTZfdG9fY3B1KHJwaXBlLT5kZXNjci53UlBpcGVJbmRleCk7CisKKwkJaWYgKHJjICE9IDEpCisJCQlkX3ByaW50ZigxLCBkZXYsICIod2EgJXAgZXAgJXApIHJwaXBlICVwIHJlZmNudCAldVxuIiwKKwkJCQkgd2EsIGVwLCBycGlwZSwgcmMpOworCisJCWRfcHJpbnRmKDEsIGRldiwgInJwaXBlICV1OiBhYm9ydFxuIiwgaW5kZXgpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCQl3YS0+dXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKHdhLT51c2JfZGV2LCAwKSwKKwkJCVVTQl9SRVFfUlBJUEVfQUJPUlQsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX1JQSVBFLAorCQkJMCwgaW5kZXgsIE5VTEwsIDAsIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CisJCWlmIChyZXN1bHQgPCAwICYmIHJlc3VsdCAhPSAtRU5PREVWIC8qIGRldiBpcyBnb25lICovKQorCQkJZF9wcmludGYoMSwgZGV2LCAiKHdhICVwIHJwaXBlICV1KTogYWJvcnQgZmFpbGVkOiAlZFxuIiwKKwkJCQkgd2EsIGluZGV4LCByZXN1bHQpOworCQlycGlwZV9wdXQocnBpcGUpOworCX0KKwltdXRleF91bmxvY2soJndhLT5ycGlwZV9tdXRleCk7CisJZF9mbmVuZCgyLCBkZXYsICIod2EgJXAgZXAgJXApXG4iLCB3YSwgZXApOworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJwaXBlX2VwX2Rpc2FibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EteGZlci5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EteGZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzg2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93YS14ZmVyLmMKQEAgLTAsMCArMSwxNzA5IEBACisvKgorICogV1VTQiBXaXJlIEFkYXB0ZXIKKyAqIERhdGEgdHJhbnNmZXIgYW5kIFVSQiBlbnF1ZWluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogSG93IHRyYW5zZmVycyB3b3JrOiBnZXQgYSBidWZmZXIsIGJyZWFrIGl0IHVwIGluIHNlZ21lbnRzIChzZWdtZW50CisgKiBzaXplIGlzIGEgbXVsdGlwbGUgb2YgdGhlIG1heHBhY2tldCBzaXplKS4gRm9yIGVhY2ggc2VnbWVudCBpc3N1ZSBhCisgKiBzZWdtZW50IHJlcXVlc3QgKHN0cnVjdCB3YV94ZmVyXyopLCB0aGVuIHNlbmQgdGhlIGRhdGEgYnVmZmVyIGlmCisgKiBvdXQgb3Igbm90aGluZyBpZiBpbiAoYWxsIG92ZXIgdGhlIERUTyBlbmRwb2ludCkuCisgKgorICogRm9yIGVhY2ggc3VibWl0dGVkIHNlZ21lbnQgcmVxdWVzdCwgYSBub3RpZmljYXRpb24gd2lsbCBjb21lIG92ZXIKKyAqIHRoZSBORVAgZW5kcG9pbnQgYW5kIGEgdHJhbnNmZXIgcmVzdWx0IChzdHJ1Y3QgeGZlcl9yZXN1bHQpIHdpbGwKKyAqIGFycml2ZSBpbiB0aGUgRFRJIFVSQi4gUmVhZCBpdCwgZ2V0IHRoZSB4ZmVyIElELCBzZWUgaWYgdGhlcmUgaXMKKyAqIGRhdGEgY29taW5nIChpbmJvdW5kIHRyYW5zZmVyKSwgc2NoZWR1bGUgYSByZWFkIGFuZCBoYW5kbGUgaXQuCisgKgorICogU291bmRzIHNpbXBsZSwgaXQgaXMgYSBwYWluIHRvIGltcGxlbWVudC4KKyAqCisgKgorICogRU5UUlkgUE9JTlRTCisgKgorICogICBGSVhNRQorICoKKyAqIExJRkUgQ1lDTEUgLyBTVEFURSBESUFHUkFNCisgKgorICogICBGSVhNRQorICoKKyAqIFRISVMgQ09ERSBJUyBESVNHVVNUSU5HCisgKgorICogICBXYXJuZWQgeW91IGFyZTsgaXQncyBteSBzZWNvbmQgdHJ5IGFuZCBzdGlsbCBub3QgaGFwcHkgd2l0aCBpdC4KKyAqCisgKiBOT1RFUzoKKyAqCisgKiAgIC0gTm8gaXNvCisgKgorICogICAtIFN1cHBvcnRzIERNQSB4ZmVycywgY29udHJvbCwgYnVsayBhbmQgbWF5YmUgaW50ZXJydXB0CisgKgorICogICAtIERvZXMgbm90IHJlY3ljbGUgdW51c2VkIHJwaXBlcworICoKKyAqICAgICBBbiBycGlwZSBpcyBhc3NpZ25lZCB0byBhbiBlbmRwb2ludCB0aGUgZmlyc3QgdGltZSBpdCBpcyB1c2VkLAorICogICAgIGFuZCB0aGVuIGl0J3MgdGhlcmUsIGFzc2lnbmVkLCB1bnRpbCB0aGUgZW5kcG9pbnQgaXMgZGlzYWJsZWQKKyAqICAgICAoZGVzdHJveWVkIFt7aCxkfXdhaGNfb3BfZXBfZGlzYWJsZSgpXS4gVGhlIGFzc2lnbm1lbnQgb2YgdGhlCisgKiAgICAgcnBpcGUgdG8gdGhlIGVuZHBvaW50IGlzIGRvbmUgdW5kZXIgdGhlIHdhLT5ycGlwZV9zZW0gc2VtYXBob3JlCisgKiAgICAgKHNob3VsZCBiZSBhIG11dGV4KS4KKyAqCisgKiAgICAgVHdvIG1ldGhvZHMgaXQgY291bGQgYmUgZG9uZToKKyAqCisgKiAgICAgKGEpIHNldCB1cCBhIHRpbWVyIGV2ZXJ5dGltZSBhbiBycGlwZSdzIHVzZSBjb3VudCBkcm9wcyB0byAxCisgKiAgICAgICAgICh3aGljaCBtZWFucyB1bnVzZWQpIG9yIHdoZW4gYSB0cmFuc2ZlciBlbmRzLiBSZXNldCB0aGUKKyAqICAgICAgICAgdGltZXIgd2hlbiBhIHhmZXIgaXMgcXVldWVkLiBJZiB0aGUgdGltZXIgZXhwaXJlcywgcmVsZWFzZQorICogICAgICAgICB0aGUgcnBpcGUgW3NlZSBycGlwZV9lcF9kaXNhYmxlKCldLgorICoKKyAqICAgICAoYikgd2hlbiBsb29raW5nIGZvciBmcmVlIHJwaXBlcyB0byBhdHRhY2ggW3JwaXBlX2dldF9ieV9lcCgpXSwKKyAqICAgICAgICAgd2hlbiBub25lIGFyZSBmb3VuZCBnbyBvdmVyIHRoZSBsaXN0LCBjaGVjayB0aGVpciBlbmRwb2ludAorICogICAgICAgICBhbmQgdGhlaXIgYWN0aXZpdHkgcmVjb3JkIChpZiBubyBsYXN0LXhmZXItZG9uZS10cyBpbiB0aGUKKyAqICAgICAgICAgbGFzdCB4IHNlY29uZHMpIHRha2UgaXQKKyAqCisgKiAgICAgSG93ZXZlciwgZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBhIHNldCBvZiBsaW1pdGVkCisgKiAgICAgcmVzb3VyY2VzIChtYXgtc2VnbWVudHMtYXQtdGhlLXNhbWUtdGltZSBwZXIgeGZlciwKKyAqICAgICB4ZmVycy1wZXItcmlwZSwgYmxvY2tzLXBlci1ycGlwZSwgcnBpcGVzLXBlci1ob3N0KSwgYXQgdGhlIGVuZAorICogICAgIHdlIGFyZSBnb2luZyB0byBoYXZlIHRvIHJlYnVpbGQgYWxsIHRoaXMgYmFzZWQgb24gYW4gc2NoZWR1bGVyLAorICogICAgIHRvIHdoZXJlIHdlIGhhdmUgYSBsaXN0IG9mIHRyYW5zYWN0aW9ucyB0byBkbyBhbmQgYmFzZWQgb24gdGhlCisgKiAgICAgYXZhaWxhYmlsaXR5IG9mIHRoZSBkaWZmZXJlbnQgcmVxdXJpZWQgY29tcG9uZW50cyAoYmxvY2tzLAorICogICAgIHJwaXBlcywgc2VnbWVudCBzbG90cywgZXRjKSwgd2UgZ28gc2NoZWR1bGluZyB0aGVtLiBQYWluZnVsLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgIndhLWhjLmgiCisjaW5jbHVkZSAid3VzYmhjLmgiCisKKyN1bmRlZiBEX0xPQ0FMCisjZGVmaW5lIERfTE9DQUwgMCAvKiAwIGRpc2FibGVkLCA+IDAgZGlmZmVyZW50IGxldmVscy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCitlbnVtIHsKKwlXQV9TRUdTX01BWCA9IDI1NSwKK307CisKK2VudW0gd2Ffc2VnX3N0YXR1cyB7CisJV0FfU0VHX05PVFJFQURZLAorCVdBX1NFR19SRUFEWSwKKwlXQV9TRUdfREVMQVlFRCwKKwlXQV9TRUdfU1VCTUlUVEVELAorCVdBX1NFR19QRU5ESU5HLAorCVdBX1NFR19EVElfUEVORElORywKKwlXQV9TRUdfRE9ORSwKKwlXQV9TRUdfRVJST1IsCisJV0FfU0VHX0FCT1JURUQsCit9OworCitzdGF0aWMgdm9pZCB3YV94ZmVyX2RlbGF5ZWRfcnVuKHN0cnVjdCB3YV9ycGlwZSAqKTsKKworLyoKKyAqIExpZmUgY3ljbGUgZ292ZXJuZWQgYnkgJ3N0cnVjdCB1cmInICh0aGUgcmVmY291bnQgb2YgdGhlIHN0cnVjdCBpcworICogdGhhdCBvZiB0aGUgJ3N0cnVjdCB1cmInIGFuZCB1c2JfZnJlZV91cmIoKSB3b3VsZCBmcmVlIHRoZSB3aG9sZQorICogc3RydWN0KS4KKyAqLworc3RydWN0IHdhX3NlZyB7CisJc3RydWN0IHVyYiB1cmI7CisJc3RydWN0IHVyYiAqZHRvX3VyYjsJCS8qIGZvciBkYXRhIG91dHB1dD8gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsJLyogZm9yIHJwaXBlLT5yZXFfbGlzdCAqLworCXN0cnVjdCB3YV94ZmVyICp4ZmVyOwkJLyogb3V0IHhmZXIgKi8KKwl1OCBpbmRleDsJCQkvKiB3aGljaCBzZWdtZW50IHdlIGFyZSAqLworCWVudW0gd2Ffc2VnX3N0YXR1cyBzdGF0dXM7CisJc3NpemVfdCByZXN1bHQ7CQkJLyogYnl0ZXMgeGZlcmVkIG9yIGVycm9yICovCisJc3RydWN0IHdhX3hmZXJfaGRyIHhmZXJfaGRyOworCXU4IHhmZXJfZXh0cmFbXTsJCS8qIHh0cmEgc3BhY2UgZm9yIHhmZXJfaGRyX2N0bCAqLworfTsKKworc3RhdGljIHZvaWQgd2Ffc2VnX2luaXQoc3RydWN0IHdhX3NlZyAqc2VnKQoreworCS8qIHVzYl9pbml0X3VyYigpIHJlcGVhdHMgYSBsb3Qgb2Ygd29yaywgc28gd2UgZG8gaXQgaGVyZSAqLworCWtyZWZfaW5pdCgmc2VnLT51cmIua3JlZik7Cit9CisKKy8qCisgKiBQcm90ZWN0ZWQgYnkgeGZlci0+bG9jaworICoKKyAqLworc3RydWN0IHdhX3hmZXIgeworCXN0cnVjdCBrcmVmIHJlZmNudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsKKwlzcGlubG9ja190IGxvY2s7CisJdTMyIGlkOworCisJc3RydWN0IHdhaGMgKndhOwkJLyogV2lyZSBhZGFwdGVyIHdlIGFyZSBwbHVnZ2VkIHRvICovCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CQkvKiBVUkIgd2UgYXJlIHRyYW5zZmVyaW5nIGZvciAqLworCXN0cnVjdCB3YV9zZWcgKipzZWc7CQkvKiB0cmFuc2ZlciBzZWdtZW50cyAqLworCXU4IHNlZ3MsIHNlZ3Nfc3VibWl0dGVkLCBzZWdzX2RvbmU7CisJdW5zaWduZWQgaXNfaW5ib3VuZDoxOworCXVuc2lnbmVkIGlzX2RtYToxOworCXNpemVfdCBzZWdfc2l6ZTsKKwlpbnQgcmVzdWx0OworCisJZ2ZwX3QgZ2ZwOwkJCS8qIGFsbG9jYXRpb24gbWFzayAqLworCisJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldjsJLyogZm9yIGFjdGl2aXR5IHRpbWVzdGFtcHMgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YV94ZmVyX2luaXQoc3RydWN0IHdhX3hmZXIgKnhmZXIpCit7CisJa3JlZl9pbml0KCZ4ZmVyLT5yZWZjbnQpOworCUlOSVRfTElTVF9IRUFEKCZ4ZmVyLT5saXN0X25vZGUpOworCXNwaW5fbG9ja19pbml0KCZ4ZmVyLT5sb2NrKTsKK30KKworLyoKKyAqIERlc3RvcnkgYSB0cmFuc2ZlciBzdHJ1Y3R1cmUKKyAqCisgKiBOb3RlIHRoYXQgdGhlIHhmZXItPnNlZ1tpbmRleF0gdGhpbmdpZXMgZm9sbG93IHRoZSBVUkIgbGlmZSBjeWNsZSwKKyAqIHNvIHdlIG5lZWQgdG8gcHV0IHRoZW0sIG5vdCBmcmVlIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkIHdhX3hmZXJfZGVzdHJveShzdHJ1Y3Qga3JlZiAqX3hmZXIpCit7CisJc3RydWN0IHdhX3hmZXIgKnhmZXIgPSBjb250YWluZXJfb2YoX3hmZXIsIHN0cnVjdCB3YV94ZmVyLCByZWZjbnQpOworCWlmICh4ZmVyLT5zZWcpIHsKKwkJdW5zaWduZWQgY250OworCQlmb3IgKGNudCA9IDA7IGNudCA8IHhmZXItPnNlZ3M7IGNudCsrKSB7CisJCQlpZiAoeGZlci0+aXNfaW5ib3VuZCkKKwkJCQl1c2JfcHV0X3VyYih4ZmVyLT5zZWdbY250XS0+ZHRvX3VyYik7CisJCQl1c2JfcHV0X3VyYigmeGZlci0+c2VnW2NudF0tPnVyYik7CisJCX0KKwl9CisJa2ZyZWUoeGZlcik7CisJZF9wcmludGYoMiwgTlVMTCwgInhmZXIgJXAgZGVzdHJveWVkXG4iLCB4ZmVyKTsKK30KKworc3RhdGljIHZvaWQgd2FfeGZlcl9nZXQoc3RydWN0IHdhX3hmZXIgKnhmZXIpCit7CisJa3JlZl9nZXQoJnhmZXItPnJlZmNudCk7Cit9CisKK3N0YXRpYyB2b2lkIHdhX3hmZXJfcHV0KHN0cnVjdCB3YV94ZmVyICp4ZmVyKQoreworCWRfZm5zdGFydCgzLCBOVUxMLCAiKHhmZXIgJXApIC0tIHJlZiBjb3VudCBiZWYgcHV0ICVkXG4iLAorCQkgICAgeGZlciwgYXRvbWljX3JlYWQoJnhmZXItPnJlZmNudC5yZWZjb3VudCkpOworCWtyZWZfcHV0KCZ4ZmVyLT5yZWZjbnQsIHdhX3hmZXJfZGVzdHJveSk7CisJZF9mbmVuZCgzLCBOVUxMLCAiKHhmZXIgJXApID0gdm9pZFxuIiwgeGZlcik7Cit9CisKKy8qCisgKiB4ZmVyIGlzIHJlZmVyZW5jZWQKKyAqCisgKiB4ZmVyLT5sb2NrIGhhcyB0byBiZSB1bmxvY2tlZAorICoKKyAqIFdlIHRha2UgeGZlci0+bG9jayBmb3Igc2V0dGluZyB0aGUgcmVzdWx0OyB0aGlzIGlzIGEgYmFycmllcgorICogYWdhaW5zdCBkcml2ZXJzL3VzYi9jb3JlL2hjZC5jOnVubGluazEoKSBiZWluZyBjYWxsZWQgYWZ0ZXIgd2UgY2FsbAorICogdXNiX2hjZF9naXZlYmFja191cmIoKSBhbmQgd2FfdXJiX2RlcXVldWUoKSB0cnlpbmcgdG8gZ2V0IGEKKyAqIHJlZmVyZW5jZSB0byB0aGUgdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB2b2lkIHdhX3hmZXJfZ2l2ZWJhY2soc3RydWN0IHdhX3hmZXIgKnhmZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkX2Zuc3RhcnQoMywgTlVMTCwgIih4ZmVyICVwKVxuIiwgeGZlcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnhmZXItPndhLT54ZmVyX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJnhmZXItPmxpc3Rfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+d2EtPnhmZXJfbGlzdF9sb2NrLCBmbGFncyk7CisJLyogRklYTUU6IHNlZ21lbnRhdGlvbiBicm9rZW4gLS0ga2lsbHMgRFdBICovCisJd3VzYmhjX2dpdmViYWNrX3VyYih4ZmVyLT53YS0+d3VzYiwgeGZlci0+dXJiLCB4ZmVyLT5yZXN1bHQpOworCXdhX3B1dCh4ZmVyLT53YSk7CisJd2FfeGZlcl9wdXQoeGZlcik7CisJZF9mbmVuZCgzLCBOVUxMLCAiKHhmZXIgJXApID0gdm9pZFxuIiwgeGZlcik7Cit9CisKKy8qCisgKiB4ZmVyIGlzIHJlZmVyZW5jZWQKKyAqCisgKiB4ZmVyLT5sb2NrIGhhcyB0byBiZSB1bmxvY2tlZAorICovCitzdGF0aWMgdm9pZCB3YV94ZmVyX2NvbXBsZXRpb24oc3RydWN0IHdhX3hmZXIgKnhmZXIpCit7CisJZF9mbnN0YXJ0KDMsIE5VTEwsICIoeGZlciAlcClcbiIsIHhmZXIpOworCWlmICh4ZmVyLT53dXNiX2RldikKKwkJd3VzYl9kZXZfcHV0KHhmZXItPnd1c2JfZGV2KTsKKwlycGlwZV9wdXQoeGZlci0+ZXAtPmhjcHJpdik7CisJd2FfeGZlcl9naXZlYmFjayh4ZmVyKTsKKwlkX2ZuZW5kKDMsIE5VTEwsICIoeGZlciAlcCkgPSB2b2lkXG4iLCB4ZmVyKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBJZiB0cmFuc2ZlciBpcyBkb25lLCB3cmFwIGl0IHVwIGFuZCByZXR1cm4gdHJ1ZQorICoKKyAqIHhmZXItPmxvY2sgaGFzIHRvIGJlIGxvY2tlZAorICovCitzdGF0aWMgdW5zaWduZWQgX193YV94ZmVyX2lzX2RvbmUoc3RydWN0IHdhX3hmZXIgKnhmZXIpCit7CisJdW5zaWduZWQgcmVzdWx0LCBjbnQ7CisJc3RydWN0IHdhX3NlZyAqc2VnOworCXN0cnVjdCB1cmIgKnVyYiA9IHhmZXItPnVyYjsKKwl1bnNpZ25lZCBmb3VuZF9zaG9ydCA9IDA7CisKKwlkX2Zuc3RhcnQoMywgTlVMTCwgIih4ZmVyICVwKVxuIiwgeGZlcik7CisJcmVzdWx0ID0geGZlci0+c2Vnc19kb25lID09IHhmZXItPnNlZ3Nfc3VibWl0dGVkOworCWlmIChyZXN1bHQgPT0gMCkKKwkJZ290byBvdXQ7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHhmZXItPnNlZ3M7IGNudCsrKSB7CisJCXNlZyA9IHhmZXItPnNlZ1tjbnRdOworCQlzd2l0Y2ggKHNlZy0+c3RhdHVzKSB7CisJCWNhc2UgV0FfU0VHX0RPTkU6CisJCQlpZiAoZm91bmRfc2hvcnQgJiYgc2VnLT5yZXN1bHQgPiAwKSB7CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJ4ZmVyICVwIyV1OiBiYWQgc2hvcnQgIgorCQkJCQkgICAgICAgInNlZ21lbnRzICglenUpXG4iLCB4ZmVyLCBjbnQsCisJCQkJCSAgICAgICBzZWctPnJlc3VsdCk7CisJCQkJdXJiLT5zdGF0dXMgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IHNlZy0+cmVzdWx0OworCQkJaWYgKHNlZy0+cmVzdWx0IDwgeGZlci0+c2VnX3NpemUKKwkJCSAgICAmJiBjbnQgIT0geGZlci0+c2Vncy0xKQorCQkJCWZvdW5kX3Nob3J0ID0gMTsKKwkJCWRfcHJpbnRmKDIsIE5VTEwsICJ4ZmVyICVwIyV1OiBET05FIHNob3J0ICVkICIKKwkJCQkgInJlc3VsdCAlenUgdXJiLT5hY3R1YWxfbGVuZ3RoICVkXG4iLAorCQkJCSB4ZmVyLCBzZWctPmluZGV4LCBmb3VuZF9zaG9ydCwgc2VnLT5yZXN1bHQsCisJCQkJIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQlicmVhazsKKwkJY2FzZSBXQV9TRUdfRVJST1I6CisJCQl4ZmVyLT5yZXN1bHQgPSBzZWctPnJlc3VsdDsKKwkJCWRfcHJpbnRmKDIsIE5VTEwsICJ4ZmVyICVwIyV1OiBFUlJPUiByZXN1bHQgJXp1XG4iLAorCQkJCSB4ZmVyLCBzZWctPmluZGV4LCBzZWctPnJlc3VsdCk7CisJCQlnb3RvIG91dDsKKwkJY2FzZSBXQV9TRUdfQUJPUlRFRDoKKwkJCVdBUk5fT04odXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQKKwkJCQkmJiB1cmItPnN0YXR1cyAhPSAtRU5PRU5UKTsKKwkJCWRfcHJpbnRmKDIsIE5VTEwsICJ4ZmVyICVwIyV1IEFCT1JURUQ6IHJlc3VsdCAlZFxuIiwKKwkJCQkgeGZlciwgc2VnLT5pbmRleCwgdXJiLT5zdGF0dXMpOworCQkJeGZlci0+cmVzdWx0ID0gdXJiLT5zdGF0dXM7CisJCQlnb3RvIG91dDsKKwkJZGVmYXVsdDoKKwkJCS8qIGlmIChwcmludGtfcmF0ZWxpbWl0KCkpICovCisJCQkJcHJpbnRrKEtFUk5fRVJSICJ4ZmVyICVwIyV1OiAiCisJCQkJICAgICAgICJpc19kb25lIGJhZCBzdGF0ZSAlZFxuIiwKKwkJCQkgICAgICAgeGZlciwgY250LCBzZWctPnN0YXR1cyk7CisJCQl4ZmVyLT5yZXN1bHQgPSAtRUlOVkFMOworCQkJV0FSTl9PTigxKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXhmZXItPnJlc3VsdCA9IDA7CitvdXQ6CisJZF9mbmVuZCgzLCBOVUxMLCAiKHhmZXIgJXApID0gdm9pZFxuIiwgeGZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSB0cmFuc2ZlcidzIElECisgKgorICogV2UgbmVlZCB0byB1c2UgYSBzZXF1ZW50aWFsIG51bWJlcjsgaWYgd2UgdXNlIHRoZSBwb2ludGVyIG9yIHRoZQorICogaGFzaCBvZiB0aGUgcG9pbnRlciwgaXQgY2FuIHJlcGVhdCBvdmVyIHNlcXVlbnRpYWwgdHJhbnNmZXJzIGFuZAorICogdGhlbiBpdCB3aWxsIGNvbmZ1c2UgdGhlIEhXQS4uLi53b25kZXIgd2h5IGluIGhlbGwgdGhleSBwdXQgYSAzMgorICogYml0IGhhbmRsZSBpbiB0aGVyZSB0aGVuLgorICovCitzdGF0aWMgdm9pZCB3YV94ZmVyX2lkX2luaXQoc3RydWN0IHdhX3hmZXIgKnhmZXIpCit7CisJeGZlci0+aWQgPSBhdG9taWNfYWRkX3JldHVybigxLCAmeGZlci0+d2EtPnhmZXJfaWRfY291bnQpOworfQorCisvKgorICogUmV0dXJuIHRoZSB4ZmVyJ3MgSUQgYXNzb2NpYXRlZCB3aXRoIHhmZXIKKyAqCisgKiBOZWVkIHRvIGdlbmVyYXRlIGEKKyAqLworc3RhdGljIHUzMiB3YV94ZmVyX2lkKHN0cnVjdCB3YV94ZmVyICp4ZmVyKQoreworCXJldHVybiB4ZmVyLT5pZDsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSB0cmFuc2ZlciBsaXN0IElEIG9uIHRoZSBIQ0QncyBVUkIgbGlzdAorICoKKyAqIEZvciAzMiBiaXQgYXJjaGl0ZWN0dXJlcywgd2UgdXNlIHRoZSBwb2ludGVyIGl0c2VsZjsgZm9yIDY0IGJpdHMsIGEKKyAqIDMyLWJpdCBoYXNoIG9mIHRoZSBwb2ludGVyLgorICoKKyAqIEByZXR1cm5zIE5VTEwgaWYgbm90IGZvdW5kLgorICovCitzdGF0aWMgc3RydWN0IHdhX3hmZXIgKndhX3hmZXJfZ2V0X2J5X2lkKHN0cnVjdCB3YWhjICp3YSwgdTMyIGlkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHdhX3hmZXIgKnhmZXJfaXRyOworCXNwaW5fbG9ja19pcnFzYXZlKCZ3YS0+eGZlcl9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXJfaXRyLCAmd2EtPnhmZXJfbGlzdCwgbGlzdF9ub2RlKSB7CisJCWlmIChpZCA9PSB4ZmVyX2l0ci0+aWQpIHsKKwkJCXdhX3hmZXJfZ2V0KHhmZXJfaXRyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXhmZXJfaXRyID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YS0+eGZlcl9saXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4geGZlcl9pdHI7Cit9CisKK3N0cnVjdCB3YV94ZmVyX2Fib3J0X2J1ZmZlciB7CisJc3RydWN0IHVyYiB1cmI7CisJc3RydWN0IHdhX3hmZXJfYWJvcnQgY21kOworfTsKKworc3RhdGljIHZvaWQgX193YV94ZmVyX2Fib3J0X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgd2FfeGZlcl9hYm9ydF9idWZmZXIgKmIgPSB1cmItPmNvbnRleHQ7CisJdXNiX3B1dF91cmIoJmItPnVyYik7Cit9CisKKy8qCisgKiBBYm9ydHMgYW4gb25nb2luZyB0cmFuc2FjdGlvbgorICoKKyAqIEFzc3VtZXMgdGhlIHRyYW5zZmVyIGlzIHJlZmVyZW5jZWQgYW5kIGxvY2tlZCBhbmQgaW4gYSBzdWJtaXR0ZWQKKyAqIHN0YXRlIChtYWlubHkgdGhhdCB0aGVyZSBpcyBhbiBlbmRwb2ludC9ycGlwZSBhc3NpZ25lZCkuCisgKgorICogVGhlIGNhbGxiYWNrIChzZWUgYWJvdmUpIGRvZXMgbm90aGluZyBidXQgZnJlZWluZyB1cCB0aGUgZGF0YSBieQorICogcHV0dGluZyB0aGUgVVJCLiBCZWNhdXNlIHRoZSBVUkIgaXMgYWxsb2NhdGVkIGF0IHRoZSBoZWFkIG9mIHRoZQorICogc3RydWN0LCB0aGUgd2hvbGUgc3BhY2Ugd2UgYWxsb2NhdGVkIGlzIGtmcmVlZC4KKyAqCisgKiBXZSdsbCBnZXQgYW4gJ2Fib3J0ZWQgdHJhbnNhY3Rpb24nIHhmZXIgcmVzdWx0IG9uIERUSSwgdGhhdCdsbAorICogcG9saXRlbHkgaWdub3JlIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4KKyAqIG1hcmtlZCBhcyBhYm9ydGVkIGFscmVhZHkuCisgKi8KK3N0YXRpYyB2b2lkIF9fd2FfeGZlcl9hYm9ydChzdHJ1Y3Qgd2FfeGZlciAqeGZlcikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ4ZmVyLT53YS0+dXNiX2lmYWNlLT5kZXY7CisJc3RydWN0IHdhX3hmZXJfYWJvcnRfYnVmZmVyICpiOworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGUgPSB4ZmVyLT5lcC0+aGNwcml2OworCisJYiA9IGttYWxsb2Moc2l6ZW9mKCpiKSwgR0ZQX0FUT01JQyk7CisJaWYgKGIgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9rbWFsbG9jOworCWItPmNtZC5iTGVuZ3RoID0gIHNpemVvZihiLT5jbWQpOworCWItPmNtZC5iUmVxdWVzdFR5cGUgPSBXQV9YRkVSX0FCT1JUOworCWItPmNtZC53UlBpcGUgPSBycGlwZS0+ZGVzY3Iud1JQaXBlSW5kZXg7CisJYi0+Y21kLmR3VHJhbnNmZXJJRCA9IHdhX3hmZXJfaWQoeGZlcik7CisKKwl1c2JfaW5pdF91cmIoJmItPnVyYik7CisJdXNiX2ZpbGxfYnVsa191cmIoJmItPnVyYiwgeGZlci0+d2EtPnVzYl9kZXYsCisJCXVzYl9zbmRidWxrcGlwZSh4ZmVyLT53YS0+dXNiX2RldiwKKwkJCQl4ZmVyLT53YS0+ZHRvX2VwZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCSZiLT5jbWQsIHNpemVvZihiLT5jbWQpLCBfX3dhX3hmZXJfYWJvcnRfY2IsIGIpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKCZiLT51cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX3N1Ym1pdDsKKwlyZXR1cm47CQkJCS8qIGNhbGxiYWNrIGZyZWVzISAqLworCisKK2Vycm9yX3N1Ym1pdDoKKwlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQlkZXZfZXJyKGRldiwgInhmZXIgJXA6IENhbid0IHN1Ym1pdCBhYm9ydCByZXF1ZXN0OiAlZFxuIiwKKwkJCXhmZXIsIHJlc3VsdCk7CisJa2ZyZWUoYik7CitlcnJvcl9rbWFsbG9jOgorCXJldHVybjsKKworfQorCisvKgorICoKKyAqIEByZXR1cm5zIDwgMCBvbiBlcnJvciwgdHJhbnNmZXIgc2VnbWVudCByZXF1ZXN0IHNpemUgaWYgb2sKKyAqLworc3RhdGljIHNzaXplX3QgX193YV94ZmVyX3NldHVwX3NpemVzKHN0cnVjdCB3YV94ZmVyICp4ZmVyLAorCQkJCSAgICAgZW51bSB3YV94ZmVyX3R5cGUgKnB4ZmVyX3R5cGUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnhmZXItPndhLT51c2JfaWZhY2UtPmRldjsKKwlzaXplX3QgbWF4cGt0c2l6ZTsKKwlzdHJ1Y3QgdXJiICp1cmIgPSB4ZmVyLT51cmI7CisJc3RydWN0IHdhX3JwaXBlICpycGlwZSA9IHhmZXItPmVwLT5oY3ByaXY7CisKKwlkX2Zuc3RhcnQoMywgZGV2LCAiKHhmZXIgJXAgW3JwaXBlICVwXSB1cmIgJXApXG4iLAorCQkgIHhmZXIsIHJwaXBlLCB1cmIpOworCXN3aXRjaCAocnBpcGUtPmRlc2NyLmJtQXR0cmlidXRlICYgMHgzKSB7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQkqcHhmZXJfdHlwZSA9IFdBX1hGRVJfVFlQRV9DVEw7CisJCXJlc3VsdCA9IHNpemVvZihzdHJ1Y3Qgd2FfeGZlcl9jdGwpOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCSpweGZlcl90eXBlID0gV0FfWEZFUl9UWVBFX0JJOworCQlyZXN1bHQgPSBzaXplb2Yoc3RydWN0IHdhX3hmZXJfYmkpOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCWRldl9lcnIoZGV2LCAiRklYTUU6IElTT0Mgbm90IGltcGxlbWVudGVkXG4iKTsKKwkJcmVzdWx0ID0gLUVOT1NZUzsKKwkJZ290byBlcnJvcjsKKwlkZWZhdWx0OgorCQkvKiBuZXZlciBoYXBwZW5zICovCisJCUJVRygpOworCQlyZXN1bHQgPSAtRUlOVkFMOwkvKiBzaHV0IGdjYyB1cCAqLworCX07CisJeGZlci0+aXNfaW5ib3VuZCA9IHVyYi0+cGlwZSAmIFVTQl9ESVJfSU4gPyAxIDogMDsKKwl4ZmVyLT5pc19kbWEgPSB1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgPyAxIDogMDsKKwl4ZmVyLT5zZWdfc2l6ZSA9IGxlMTZfdG9fY3B1KHJwaXBlLT5kZXNjci53QmxvY2tzKQorCQkqIDEgPDwgKHhmZXItPndhLT53YV9kZXNjci0+YlJQaXBlQmxvY2tTaXplIC0gMSk7CisJLyogQ29tcHV0ZSB0aGUgc2VnbWVudCBzaXplIGFuZCBtYWtlIHN1cmUgaXQgaXMgYSBtdWx0aXBsZSBvZgorCSAqIHRoZSBtYXhwa3RzaXplIChXVVNCMS4wWzguMy4zLjFdKS4uLm5vdCByZWFsbHkgdG9vIG11Y2ggb2YKKwkgKiBhIGNoZWNrIChGSVhNRSkgKi8KKwltYXhwa3RzaXplID0gbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndNYXhQYWNrZXRTaXplKTsKKwlpZiAoeGZlci0+c2VnX3NpemUgPCBtYXhwa3RzaXplKSB7CisJCWRldl9lcnIoZGV2LCAiSFcgQlVHPyBzZWdfc2l6ZSAlenUgc21hbGxlciB0aGFuIG1heHBrdHNpemUgIgorCQkJIiV6dVxuIiwgeGZlci0+c2VnX3NpemUsIG1heHBrdHNpemUpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKwl4ZmVyLT5zZWdfc2l6ZSA9ICh4ZmVyLT5zZWdfc2l6ZSAvIG1heHBrdHNpemUpICogbWF4cGt0c2l6ZTsKKwl4ZmVyLT5zZWdzID0gKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCArIHhmZXItPnNlZ19zaXplIC0gMSkKKwkJLyB4ZmVyLT5zZWdfc2l6ZTsKKwlpZiAoeGZlci0+c2VncyA+PSBXQV9TRUdTX01BWCkgeworCQlkZXZfZXJyKGRldiwgIkJVRz8gb3BzLCBudW1iZXIgb2Ygc2VnbWVudHMgJWQgYmlnZ2VyIHRoYW4gJWRcbiIsCisJCQkoaW50KSh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLyB4ZmVyLT5zZWdfc2l6ZSksCisJCQlXQV9TRUdTX01BWCk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICh4ZmVyLT5zZWdzID09IDAgJiYgKnB4ZmVyX3R5cGUgPT0gV0FfWEZFUl9UWVBFX0NUTCkKKwkJeGZlci0+c2VncyA9IDE7CitlcnJvcjoKKwlkX2ZuZW5kKDMsIGRldiwgIih4ZmVyICVwIFtycGlwZSAlcF0gdXJiICVwKSA9ICVkXG4iLAorCQl4ZmVyLCBycGlwZSwgdXJiLCAoaW50KXJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqIEZpbGwgaW4gdGhlIGNvbW1vbiByZXF1ZXN0IGhlYWRlciBhbmQgeGZlci10eXBlIHNwZWNpZmljIGRhdGEuICovCitzdGF0aWMgdm9pZCBfX3dhX3hmZXJfc2V0dXBfaGRyMChzdHJ1Y3Qgd2FfeGZlciAqeGZlciwKKwkJCQkgc3RydWN0IHdhX3hmZXJfaGRyICp4ZmVyX2hkcjAsCisJCQkJIGVudW0gd2FfeGZlcl90eXBlIHhmZXJfdHlwZSwKKwkJCQkgc2l6ZV90IHhmZXJfaGRyX3NpemUpCit7CisJc3RydWN0IHdhX3JwaXBlICpycGlwZSA9IHhmZXItPmVwLT5oY3ByaXY7CisKKwl4ZmVyX2hkcjAgPSAmeGZlci0+c2VnWzBdLT54ZmVyX2hkcjsKKwl4ZmVyX2hkcjAtPmJMZW5ndGggPSB4ZmVyX2hkcl9zaXplOworCXhmZXJfaGRyMC0+YlJlcXVlc3RUeXBlID0geGZlcl90eXBlOworCXhmZXJfaGRyMC0+d1JQaXBlID0gcnBpcGUtPmRlc2NyLndSUGlwZUluZGV4OworCXhmZXJfaGRyMC0+ZHdUcmFuc2ZlcklEID0gd2FfeGZlcl9pZCh4ZmVyKTsKKwl4ZmVyX2hkcjAtPmJUcmFuc2ZlclNlZ21lbnQgPSAwOworCXN3aXRjaCAoeGZlcl90eXBlKSB7CisJY2FzZSBXQV9YRkVSX1RZUEVfQ1RMOiB7CisJCXN0cnVjdCB3YV94ZmVyX2N0bCAqeGZlcl9jdGwgPQorCQkJY29udGFpbmVyX29mKHhmZXJfaGRyMCwgc3RydWN0IHdhX3hmZXJfY3RsLCBoZHIpOworCQl4ZmVyX2N0bC0+Ym1BdHRyaWJ1dGUgPSB4ZmVyLT5pc19pbmJvdW5kID8gMSA6IDA7CisJCUJVR19PTih4ZmVyLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1NFVFVQX0RNQV9NQVAKKwkJICAgICAgICYmIHhmZXItPnVyYi0+c2V0dXBfcGFja2V0ID09IE5VTEwpOworCQltZW1jcHkoJnhmZXJfY3RsLT5iYVNldHVwRGF0YSwgeGZlci0+dXJiLT5zZXR1cF9wYWNrZXQsCisJCSAgICAgICBzaXplb2YoeGZlcl9jdGwtPmJhU2V0dXBEYXRhKSk7CisJCWJyZWFrOworCX0KKwljYXNlIFdBX1hGRVJfVFlQRV9CSToKKwkJYnJlYWs7CisJY2FzZSBXQV9YRkVSX1RZUEVfSVNPOgorCQlwcmludGsoS0VSTl9FUlIgIkZJWE1FOiBJU09DIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfTsKK30KKworLyoKKyAqIENhbGxiYWNrIGZvciB0aGUgT1VUIGRhdGEgcGhhc2Ugb2YgdGhlIHNlZ21lbnQgcmVxdWVzdAorICoKKyAqIENoZWNrIHdhX3NlZ19jYigpOyBtb3N0IGNvbW1lbnRzIGFsc28gYXBwbHkgaGVyZSBiZWNhdXNlIHRoaXMKKyAqIGZ1bmN0aW9uIGRvZXMgYWxtb3N0IHRoZSBzYW1lIHRoaW5nIGFuZCB0aGV5IHdvcmsgY2xvc2VseQorICogdG9nZXRoZXIuCisgKgorICogSWYgdGhlIHNlZyByZXF1ZXN0IGhhcyBmYWlsZWQgYnV0IHRoaXMgRFRPIHBoYXNlIGhhcyBzdWNlZWRlZCwKKyAqIHdhX3NlZ19jYigpIGhhcyBhbHJlYWR5IGZhaWxlZCB0aGUgc2VnbWVudCBhbmQgbW92ZWQgdGhlCisgKiBzdGF0dXMgdG8gV0FfU0VHX0VSUk9SLCBzbyB0aGlzIHdpbGwgZ28gdGhyb3VnaCAnY2FzZSAwJyBhbmQKKyAqIGVmZmVjdGl2ZWx5IGRvIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHdhX3NlZ19kdG9fY2Ioc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB3YV9zZWcgKnNlZyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgd2FfeGZlciAqeGZlciA9IHNlZy0+eGZlcjsKKwlzdHJ1Y3Qgd2FoYyAqd2E7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBycGlwZV9yZWFkeSA9IDA7CisJdTggZG9uZSA9IDA7CisKKwlkX2Zuc3RhcnQoMywgTlVMTCwgIih1cmIgJXAgWyVkXSlcbiIsIHVyYiwgdXJiLT5zdGF0dXMpOworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJCXdhID0geGZlci0+d2E7CisJCWRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJCWRfcHJpbnRmKDIsIGRldiwgInhmZXIgJXAjJXU6IGRhdGEgb3V0IGRvbmUgKCVkIGJ5dGVzKVxuIiwKKwkJCSAgIHhmZXIsIHNlZy0+aW5kZXgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWlmIChzZWctPnN0YXR1cyA8IFdBX1NFR19QRU5ESU5HKQorCQkJc2VnLT5zdGF0dXMgPSBXQV9TRUdfUEVORElORzsKKwkJc2VnLT5yZXN1bHQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhmZXItPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogVVJCIHVubGlua2VkOyBubyBuZWVkIHRvIGRvIGFueXRoaW5nICovCisJY2FzZSAtRU5PRU5UOgkJLyogYXMgaXQgd2FzIGRvbmUgYnkgdGhlIHdobyB1bmxpbmtlZCB1cyAqLworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogT3RoZXIgZXJyb3JzIC4uLiAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCQl3YSA9IHhmZXItPndhOworCQlkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCQlycGlwZSA9IHhmZXItPmVwLT5oY3ByaXY7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKGRldiwgInhmZXIgJXAjJXU6IGRhdGEgb3V0IGVycm9yICVkXG4iLAorCQkJCXhmZXIsIHNlZy0+aW5kZXgsIHVyYi0+c3RhdHVzKTsKKwkJaWYgKGVkY19pbmMoJndhLT5uZXBfZWRjLCBFRENfTUFYX0VSUk9SUywKKwkJCSAgICBFRENfRVJST1JfVElNRUZSQU1FKSl7CisJCQlkZXZfZXJyKGRldiwgIkRUTzogVVJCIG1heCBhY2NlcHRhYmxlIGVycm9ycyAiCisJCQkJImV4Y2VlZGVkLCByZXNldHRpbmcgZGV2aWNlXG4iKTsKKwkJCXdhX3Jlc2V0X2FsbCh3YSk7CisJCX0KKwkJaWYgKHNlZy0+c3RhdHVzICE9IFdBX1NFR19FUlJPUikgeworCQkJc2VnLT5zdGF0dXMgPSBXQV9TRUdfRVJST1I7CisJCQlzZWctPnJlc3VsdCA9IHVyYi0+c3RhdHVzOworCQkJeGZlci0+c2Vnc19kb25lKys7CisJCQlfX3dhX3hmZXJfYWJvcnQoeGZlcik7CisJCQlycGlwZV9yZWFkeSA9IHJwaXBlX2F2YWlsX2luYyhycGlwZSk7CisJCQlkb25lID0gX193YV94ZmVyX2lzX2RvbmUoeGZlcik7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCQlpZiAoZG9uZSkKKwkJCXdhX3hmZXJfY29tcGxldGlvbih4ZmVyKTsKKwkJaWYgKHJwaXBlX3JlYWR5KQorCQkJd2FfeGZlcl9kZWxheWVkX3J1bihycGlwZSk7CisJfQorCWRfZm5lbmQoMywgTlVMTCwgIih1cmIgJXAgWyVkXSkgPSB2b2lkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKK30KKworLyoKKyAqIENhbGxiYWNrIGZvciB0aGUgc2VnbWVudCByZXF1ZXN0CisgKgorICogSWYgc3VjY2VzZnVsIHRyYW5zaXRpb24gc3RhdGUgKHVubGVzcyBhbHJlYWR5IHRyYW5zaXRpb25lZCBvcgorICogb3V0Ym91bmQgdHJhbnNmZXIpOyBvdGhlcndpc2UsIHRha2UgYSBub3RlIG9mIHRoZSBlcnJvciwgbWFyayB0aGlzCisgKiBzZWdtZW50IGRvbmUgYW5kIHRyeSBjb21wbGV0aW9uLgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgYWNjZXNzIHVudGlsIHdlIGFyZSBzdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGhhc24ndAorICogYmVlbiBjYW5jZWxsZWQgKEVDT05OUkVTRVQsIEVOT0VOVCksIHdoaWNoIGNvdWxkIG1lYW4gdGhhdAorICogc2VnLT54ZmVyIGNvdWxkIGJlIGFscmVhZHkgZ29uZS4KKyAqCisgKiBXZSBoYXZlIHRvIGNoZWNrIGJlZm9yZSBzZXR0aW5nIHRoZSBzdGF0dXMgdG8gV0FfU0VHX1BFTkRJTkcKKyAqIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSB4ZmVyIHJlc3VsdCBjYWxsYmFjayBhcnJpdmVzIGJlZm9yZSB0aGlzCisgKiBjYWxsYmFjayAoZ2VlZWVlZXplKSwgc28gaXQgbWlnaHQgaGFwcGVuIHRoYXQgd2UgYXJlIGFscmVhZHkgaW4KKyAqIGFub3RoZXIgc3RhdGUuIEFzIHdlbGwsIHdlIGRvbid0IHNldCBpdCBpZiB0aGUgdHJhbnNmZXIgaXMgaW5ib3VuZCwKKyAqIGFzIGluIHRoYXQgY2FzZSwgd2Ffc2VnX2R0b19jYiB3aWxsIGRvIGl0IHdoZW4gdGhlIE9VVCBkYXRhIHBoYXNlCisgKiBmaW5pc2hlcy4KKyAqLworc3RhdGljIHZvaWQgd2Ffc2VnX2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgd2Ffc2VnICpzZWcgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHdhX3hmZXIgKnhmZXIgPSBzZWctPnhmZXI7CisJc3RydWN0IHdhaGMgKndhOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgd2FfcnBpcGUgKnJwaXBlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgcnBpcGVfcmVhZHk7CisJdTggZG9uZSA9IDA7CisKKwlkX2Zuc3RhcnQoMywgTlVMTCwgIih1cmIgJXAgWyVkXSlcbiIsIHVyYiwgdXJiLT5zdGF0dXMpOworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJCXdhID0geGZlci0+d2E7CisJCWRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJCWRfcHJpbnRmKDIsIGRldiwgInhmZXIgJXAjJXU6IHJlcXVlc3QgZG9uZVxuIiwKKwkJCSAgIHhmZXIsIHNlZy0+aW5kZXgpOworCQlpZiAoeGZlci0+aXNfaW5ib3VuZCAmJiBzZWctPnN0YXR1cyA8IFdBX1NFR19QRU5ESU5HKQorCQkJc2VnLT5zdGF0dXMgPSBXQV9TRUdfUEVORElORzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiBVUkIgdW5saW5rZWQ7IG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KKwljYXNlIC1FTk9FTlQ6CQkvKiBhcyBpdCB3YXMgZG9uZSBieSB0aGUgd2hvIHVubGlua2VkIHVzICovCisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiBPdGhlciBlcnJvcnMgLi4uICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJCXdhID0geGZlci0+d2E7CisJCWRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJCXJwaXBlID0geGZlci0+ZXAtPmhjcHJpdjsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAieGZlciAlcCMldTogcmVxdWVzdCBlcnJvciAlZFxuIiwKKwkJCQl4ZmVyLCBzZWctPmluZGV4LCB1cmItPnN0YXR1cyk7CisJCWlmIChlZGNfaW5jKCZ3YS0+bmVwX2VkYywgRURDX01BWF9FUlJPUlMsCisJCQkgICAgRURDX0VSUk9SX1RJTUVGUkFNRSkpeworCQkJZGV2X2VycihkZXYsICJEVE86IFVSQiBtYXggYWNjZXB0YWJsZSBlcnJvcnMgIgorCQkJCSJleGNlZWRlZCwgcmVzZXR0aW5nIGRldmljZVxuIik7CisJCQl3YV9yZXNldF9hbGwod2EpOworCQl9CisJCXVzYl91bmxpbmtfdXJiKHNlZy0+ZHRvX3VyYik7CisJCXNlZy0+c3RhdHVzID0gV0FfU0VHX0VSUk9SOworCQlzZWctPnJlc3VsdCA9IHVyYi0+c3RhdHVzOworCQl4ZmVyLT5zZWdzX2RvbmUrKzsKKwkJX193YV94ZmVyX2Fib3J0KHhmZXIpOworCQlycGlwZV9yZWFkeSA9IHJwaXBlX2F2YWlsX2luYyhycGlwZSk7CisJCWRvbmUgPSBfX3dhX3hmZXJfaXNfZG9uZSh4ZmVyKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCQlpZiAoZG9uZSkKKwkJCXdhX3hmZXJfY29tcGxldGlvbih4ZmVyKTsKKwkJaWYgKHJwaXBlX3JlYWR5KQorCQkJd2FfeGZlcl9kZWxheWVkX3J1bihycGlwZSk7CisJfQorCWRfZm5lbmQoMywgTlVMTCwgIih1cmIgJXAgWyVkXSkgPSB2b2lkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzZWdzIGFycmF5IGFuZCBpbml0aWFsaXplIGVhY2ggb2YgdGhlbQorICoKKyAqIFRoZSBzZWdtZW50cyBhcmUgZnJlZWQgYnkgd2FfeGZlcl9kZXN0cm95KCkgd2hlbiB0aGUgeGZlciB1c2UgY291bnQKKyAqIGRyb3BzIHRvIHplcm87IGhvd2V2ZXIsIGJlY2F1c2UgZWFjaCBzZWdtZW50IGlzIGdpdmVuIHRoZSBzYW1lIGxpZmUKKyAqIGN5Y2xlIGFzIHRoZSBVU0IgVVJCIGl0IGNvbnRhaW5zLCBpdCBpcyBhY3R1YWxseSBmcmVlZCBieQorICogdXNiX3B1dF91cmIoKSBvbiB0aGUgY29udGFpbmVkIFVTQiBVUkIgKHR3aXN0ZWQsIGVoPykuCisgKi8KK3N0YXRpYyBpbnQgX193YV94ZmVyX3NldHVwX3NlZ3Moc3RydWN0IHdhX3hmZXIgKnhmZXIsIHNpemVfdCB4ZmVyX2hkcl9zaXplKQoreworCWludCByZXN1bHQsIGNudDsKKwlzaXplX3QgYWxsb2Nfc2l6ZSA9IHNpemVvZigqeGZlci0+c2VnWzBdKQorCQktIHNpemVvZih4ZmVyLT5zZWdbMF0tPnhmZXJfaGRyKSArIHhmZXJfaGRyX3NpemU7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB4ZmVyLT53YS0+dXNiX2RldjsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmR0b19lcGQgPSB4ZmVyLT53YS0+ZHRvX2VwZDsKKwlzdHJ1Y3Qgd2Ffc2VnICpzZWc7CisJc2l6ZV90IGJ1Zl9pdHIsIGJ1Zl9zaXplLCBidWZfaXRyX3NpemU7CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCXhmZXItPnNlZyA9IGtjYWxsb2MoeGZlci0+c2Vncywgc2l6ZW9mKHhmZXItPnNlZ1swXSksIEdGUF9BVE9NSUMpOworCWlmICh4ZmVyLT5zZWcgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9zZWdzX2t6YWxsb2M7CisJYnVmX2l0ciA9IDA7CisJYnVmX3NpemUgPSB4ZmVyLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJZm9yIChjbnQgPSAwOyBjbnQgPCB4ZmVyLT5zZWdzOyBjbnQrKykgeworCQlzZWcgPSB4ZmVyLT5zZWdbY250XSA9IGt6YWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmIChzZWcgPT0gTlVMTCkKKwkJCWdvdG8gZXJyb3Jfc2VnX2t6YWxsb2M7CisJCXdhX3NlZ19pbml0KHNlZyk7CisJCXNlZy0+eGZlciA9IHhmZXI7CisJCXNlZy0+aW5kZXggPSBjbnQ7CisJCXVzYl9maWxsX2J1bGtfdXJiKCZzZWctPnVyYiwgdXNiX2RldiwKKwkJCQkgIHVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LAorCQkJCQkJICBkdG9fZXBkLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgICZzZWctPnhmZXJfaGRyLCB4ZmVyX2hkcl9zaXplLAorCQkJCSAgd2Ffc2VnX2NiLCBzZWcpOworCQlidWZfaXRyX3NpemUgPSBidWZfc2l6ZSA+IHhmZXItPnNlZ19zaXplID8KKwkJCXhmZXItPnNlZ19zaXplIDogYnVmX3NpemU7CisJCWlmICh4ZmVyLT5pc19pbmJvdW5kID09IDAgJiYgYnVmX3NpemUgPiAwKSB7CisJCQlzZWctPmR0b191cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCQkJaWYgKHNlZy0+ZHRvX3VyYiA9PSBOVUxMKQorCQkJCWdvdG8gZXJyb3JfZHRvX2FsbG9jOworCQkJdXNiX2ZpbGxfYnVsa191cmIoCisJCQkJc2VnLT5kdG9fdXJiLCB1c2JfZGV2LAorCQkJCXVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LAorCQkJCQkJZHRvX2VwZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJTlVMTCwgMCwgd2Ffc2VnX2R0b19jYiwgc2VnKTsKKwkJCWlmICh4ZmVyLT5pc19kbWEpIHsKKwkJCQlzZWctPmR0b191cmItPnRyYW5zZmVyX2RtYSA9CisJCQkJCXhmZXItPnVyYi0+dHJhbnNmZXJfZG1hICsgYnVmX2l0cjsKKwkJCQlzZWctPmR0b191cmItPnRyYW5zZmVyX2ZsYWdzIHw9CisJCQkJCVVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQkJfSBlbHNlCisJCQkJc2VnLT5kdG9fdXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCQl4ZmVyLT51cmItPnRyYW5zZmVyX2J1ZmZlciArIGJ1Zl9pdHI7CisJCQlzZWctPmR0b191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZfaXRyX3NpemU7CisJCX0KKwkJc2VnLT5zdGF0dXMgPSBXQV9TRUdfUkVBRFk7CisJCWJ1Zl9pdHIgKz0gYnVmX2l0cl9zaXplOworCQlidWZfc2l6ZSAtPSBidWZfaXRyX3NpemU7CisJfQorCXJldHVybiAwOworCitlcnJvcl9kdG9fYWxsb2M6CisJa2ZyZWUoeGZlci0+c2VnW2NudF0pOworCWNudC0tOworZXJyb3Jfc2VnX2t6YWxsb2M6CisJLyogdXNlIHRoZSBmYWN0IHRoYXQgY250IGlzIGxlZnQgYXQgd2VyZSBpdCBmYWlsZWQgKi8KKwlmb3IgKDsgY250ID4gMDsgY250LS0pIHsKKwkJaWYgKHhmZXItPmlzX2luYm91bmQgPT0gMCkKKwkJCWtmcmVlKHhmZXItPnNlZ1tjbnRdLT5kdG9fdXJiKTsKKwkJa2ZyZWUoeGZlci0+c2VnW2NudF0pOworCX0KK2Vycm9yX3NlZ3Nfa3phbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQWxsb2NhdGVzIGFsbCB0aGUgc3R1ZmYgbmVlZGVkIHRvIHN1Ym1pdCBhIHRyYW5zZmVyCisgKgorICogQnJlYWtzIHRoZSB3aG9sZSBkYXRhIGJ1ZmZlciBpbiBhIGxpc3Qgb2Ygc2VnbWVudHMsIGVhY2ggb25lIGhhcyBhCisgKiBzdHJ1Y3R1cmUgYWxsb2NhdGVkIHRvIGl0IGFuZCBsaW5rZWQgaW4geGZlci0+c2VnW2luZGV4XQorICoKKyAqIEZJWE1FOiBtZXJnZSBzZXR1cF9zZWdzKCkgYW5kIHRoZSBsYXN0IHBhcnQgb2YgdGhpcyBmdW5jdGlvbiwgbm8KKyAqICAgICAgICBuZWVkIHRvIGRvIHR3byBmb3IgbG9vcHMgd2hlbiB3ZSBjb3VsZCBydW4gZXZlcnl0aGluZyBpbiBhCisgKiAgICAgICAgc2luZ2xlIG9uZQorICovCitzdGF0aWMgaW50IF9fd2FfeGZlcl9zZXR1cChzdHJ1Y3Qgd2FfeGZlciAqeGZlciwgc3RydWN0IHVyYiAqdXJiKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnhmZXItPndhLT51c2JfaWZhY2UtPmRldjsKKwllbnVtIHdhX3hmZXJfdHlwZSB4ZmVyX3R5cGUgPSAwOyAvKiBzaHV0IHVwIEdDQyAqLworCXNpemVfdCB4ZmVyX2hkcl9zaXplLCBjbnQsIHRyYW5zZmVyX3NpemU7CisJc3RydWN0IHdhX3hmZXJfaGRyICp4ZmVyX2hkcjAsICp4ZmVyX2hkcjsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoeGZlciAlcCBbcnBpcGUgJXBdIHVyYiAlcClcbiIsCisJCSAgeGZlciwgeGZlci0+ZXAtPmhjcHJpdiwgdXJiKTsKKworCXJlc3VsdCA9IF9fd2FfeGZlcl9zZXR1cF9zaXplcyh4ZmVyLCAmeGZlcl90eXBlKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9zZXR1cF9zaXplczsKKwl4ZmVyX2hkcl9zaXplID0gcmVzdWx0OworCXJlc3VsdCA9IF9fd2FfeGZlcl9zZXR1cF9zZWdzKHhmZXIsIHhmZXJfaGRyX3NpemUpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAieGZlciAlcDogRmFpbGVkIHRvIGFsbG9jYXRlICVkIHNlZ21lbnRzOiAlZFxuIiwKKwkJCXhmZXIsIHhmZXItPnNlZ3MsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc2V0dXBfc2VnczsKKwl9CisJLyogRmlsbCB0aGUgZmlyc3QgaGVhZGVyICovCisJeGZlcl9oZHIwID0gJnhmZXItPnNlZ1swXS0+eGZlcl9oZHI7CisJd2FfeGZlcl9pZF9pbml0KHhmZXIpOworCV9fd2FfeGZlcl9zZXR1cF9oZHIwKHhmZXIsIHhmZXJfaGRyMCwgeGZlcl90eXBlLCB4ZmVyX2hkcl9zaXplKTsKKworCS8qIEZpbGwgcmVtYWluaWcgaGVhZGVycyAqLworCXhmZXJfaGRyID0geGZlcl9oZHIwOworCXRyYW5zZmVyX3NpemUgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJeGZlcl9oZHIwLT5kd1RyYW5zZmVyTGVuZ3RoID0gdHJhbnNmZXJfc2l6ZSA+IHhmZXItPnNlZ19zaXplID8KKwkJeGZlci0+c2VnX3NpemUgOiB0cmFuc2Zlcl9zaXplOworCXRyYW5zZmVyX3NpemUgLT0gIHhmZXItPnNlZ19zaXplOworCWZvciAoY250ID0gMTsgY250IDwgeGZlci0+c2VnczsgY250KyspIHsKKwkJeGZlcl9oZHIgPSAmeGZlci0+c2VnW2NudF0tPnhmZXJfaGRyOworCQltZW1jcHkoeGZlcl9oZHIsIHhmZXJfaGRyMCwgeGZlcl9oZHJfc2l6ZSk7CisJCXhmZXJfaGRyLT5iVHJhbnNmZXJTZWdtZW50ID0gY250OworCQl4ZmVyX2hkci0+ZHdUcmFuc2Zlckxlbmd0aCA9IHRyYW5zZmVyX3NpemUgPiB4ZmVyLT5zZWdfc2l6ZSA/CisJCQljcHVfdG9fbGUzMih4ZmVyLT5zZWdfc2l6ZSkKKwkJCTogY3B1X3RvX2xlMzIodHJhbnNmZXJfc2l6ZSk7CisJCXhmZXItPnNlZ1tjbnRdLT5zdGF0dXMgPSBXQV9TRUdfUkVBRFk7CisJCXRyYW5zZmVyX3NpemUgLT0gIHhmZXItPnNlZ19zaXplOworCX0KKwl4ZmVyX2hkci0+YlRyYW5zZmVyU2VnbWVudCB8PSAweDgwOwkvKiB0aGlzIGlzIHRoZSBsYXN0IHNlZ21lbnQgKi8KKwlyZXN1bHQgPSAwOworZXJyb3Jfc2V0dXBfc2VnczoKK2Vycm9yX3NldHVwX3NpemVzOgorCWRfZm5lbmQoMywgZGV2LCAiKHhmZXIgJXAgW3JwaXBlICVwXSB1cmIgJXApID0gJWRcbiIsCisJCXhmZXIsIHhmZXItPmVwLT5oY3ByaXYsIHVyYiwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICoKKyAqCisgKiBycGlwZS0+c2VnX2xvY2sgaXMgaGVsZCEKKyAqLworc3RhdGljIGludCBfX3dhX3NlZ19zdWJtaXQoc3RydWN0IHdhX3JwaXBlICpycGlwZSwgc3RydWN0IHdhX3hmZXIgKnhmZXIsCisJCQkgICBzdHJ1Y3Qgd2Ffc2VnICpzZWcpCit7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYigmc2VnLT51cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAieGZlciAlcCMldTogUkVRIHN1Ym1pdCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgeGZlciwgc2VnLT5pbmRleCwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9zZWdfc3VibWl0OworCX0KKwlpZiAoc2VnLT5kdG9fdXJiKSB7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlZy0+ZHRvX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInhmZXIgJXAjJXU6IERUTyBzdWJtaXQgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICAgICB4ZmVyLCBzZWctPmluZGV4LCByZXN1bHQpOworCQkJZ290byBlcnJvcl9kdG9fc3VibWl0OworCQl9CisJfQorCXNlZy0+c3RhdHVzID0gV0FfU0VHX1NVQk1JVFRFRDsKKwlycGlwZV9hdmFpbF9kZWMocnBpcGUpOworCXJldHVybiAwOworCitlcnJvcl9kdG9fc3VibWl0OgorCXVzYl91bmxpbmtfdXJiKCZzZWctPnVyYik7CitlcnJvcl9zZWdfc3VibWl0OgorCXNlZy0+c3RhdHVzID0gV0FfU0VHX0VSUk9SOworCXNlZy0+cmVzdWx0ID0gcmVzdWx0OworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBFeGVjdXRlIG1vcmUgcXVldWVkIHJlcXVlc3Qgc2VnbWVudHMgdW50aWwgdGhlIG1heGltdW0gY29uY3VycmVudCBhbGxvd2VkCisgKgorICogVGhlIHVnbHkgdW5sb2NrL2xvY2sgc2VxdWVuY2Ugb24gdGhlIGVycm9yIHBhdGggaXMgbmVlZGVkIGFzIHRoZQorICogeGZlci0+bG9jayBub3JtYWxseSBuZXN0cyB0aGUgc2VnX2xvY2sgYW5kIG5vdCB2aWNldmVyc2EuCisgKgorICovCitzdGF0aWMgdm9pZCB3YV94ZmVyX2RlbGF5ZWRfcnVuKHN0cnVjdCB3YV9ycGlwZSAqcnBpcGUpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcnBpcGUtPndhLT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3Qgd2Ffc2VnICpzZWc7CisJc3RydWN0IHdhX3hmZXIgKnhmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRfZm5zdGFydCgxLCBkZXYsICIocnBpcGUgIyVkKSAlZCBzZWdtZW50cyBhdmFpbGFibGVcbiIsCisJCSAgbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndSUGlwZUluZGV4KSwKKwkJICBhdG9taWNfcmVhZCgmcnBpcGUtPnNlZ3NfYXZhaWxhYmxlKSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJwaXBlLT5zZWdfbG9jaywgZmxhZ3MpOworCXdoaWxlIChhdG9taWNfcmVhZCgmcnBpcGUtPnNlZ3NfYXZhaWxhYmxlKSA+IDAKKwkgICAgICAmJiAhbGlzdF9lbXB0eSgmcnBpcGUtPnNlZ19saXN0KSkgeworCQlzZWcgPSBsaXN0X2VudHJ5KHJwaXBlLT5zZWdfbGlzdC5uZXh0LCBzdHJ1Y3Qgd2Ffc2VnLAorCQkJCSBsaXN0X25vZGUpOworCQlsaXN0X2RlbCgmc2VnLT5saXN0X25vZGUpOworCQl4ZmVyID0gc2VnLT54ZmVyOworCQlyZXN1bHQgPSBfX3dhX3NlZ19zdWJtaXQocnBpcGUsIHhmZXIsIHNlZyk7CisJCWRfcHJpbnRmKDEsIGRldiwgInhmZXIgJXAjJXUgc3VibWl0dGVkIGZyb20gZGVsYXllZCAiCisJCQkgIlslZCBzZWdtZW50cyBhdmFpbGFibGVdICVkXG4iLAorCQkJIHhmZXIsIHNlZy0+aW5kZXgsCisJCQkgYXRvbWljX3JlYWQoJnJwaXBlLT5zZWdzX2F2YWlsYWJsZSksIHJlc3VsdCk7CisJCWlmICh1bmxpa2VseShyZXN1bHQgPCAwKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBpcGUtPnNlZ19sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCQkJX193YV94ZmVyX2Fib3J0KHhmZXIpOworCQkJeGZlci0+c2Vnc19kb25lKys7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnBpcGUtPnNlZ19sb2NrLCBmbGFncyk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBpcGUtPnNlZ19sb2NrLCBmbGFncyk7CisJZF9mbmVuZCgxLCBkZXYsICIocnBpcGUgIyVkKSA9IHZvaWQsICVkIHNlZ21lbnRzIGF2YWlsYWJsZVxuIiwKKwkJbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndSUGlwZUluZGV4KSwKKwkJYXRvbWljX3JlYWQoJnJwaXBlLT5zZWdzX2F2YWlsYWJsZSkpOworCit9CisKKy8qCisgKgorICogeGZlci0+bG9jayBpcyB0YWtlbgorICoKKyAqIE9uIGZhaWx1cmUgc3VibWl0dGluZyB3ZSBqdXN0IHN0b3Agc3VibWl0dGluZyBhbmQgcmV0dXJuIGVycm9yOworICogd2FfdXJiX2VucXVldWVfYigpIHdpbGwgZXhlY3V0ZSB0aGUgY29tcGxldGlvbiBwYXRoCisgKi8KK3N0YXRpYyBpbnQgX193YV94ZmVyX3N1Ym1pdChzdHJ1Y3Qgd2FfeGZlciAqeGZlcikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB3YWhjICp3YSA9IHhmZXItPndhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJdW5zaWduZWQgY250OworCXN0cnVjdCB3YV9zZWcgKnNlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGUgPSB4ZmVyLT5lcC0+aGNwcml2OworCXNpemVfdCBtYXhyZXF1ZXN0cyA9IGxlMTZfdG9fY3B1KHJwaXBlLT5kZXNjci53UmVxdWVzdHMpOworCXU4IGF2YWlsYWJsZTsKKwl1OCBlbXB0eTsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoeGZlciAlcCBbcnBpcGUgJXBdKVxuIiwKKwkJICB4ZmVyLCB4ZmVyLT5lcC0+aGNwcml2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3YS0+eGZlcl9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZ4ZmVyLT5saXN0X25vZGUsICZ3YS0+eGZlcl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YS0+eGZlcl9saXN0X2xvY2ssIGZsYWdzKTsKKworCUJVR19PTihhdG9taWNfcmVhZCgmcnBpcGUtPnNlZ3NfYXZhaWxhYmxlKSA+IG1heHJlcXVlc3RzKTsKKwlyZXN1bHQgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZycGlwZS0+c2VnX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHhmZXItPnNlZ3M7IGNudCsrKSB7CisJCWF2YWlsYWJsZSA9IGF0b21pY19yZWFkKCZycGlwZS0+c2Vnc19hdmFpbGFibGUpOworCQllbXB0eSA9IGxpc3RfZW1wdHkoJnJwaXBlLT5zZWdfbGlzdCk7CisJCXNlZyA9IHhmZXItPnNlZ1tjbnRdOworCQlkX3ByaW50ZigyLCBkZXYsICJ4ZmVyICVwIyV1OiBhdmFpbGFibGUgJXUgZW1wdHkgJXUgKCVzKVxuIiwKKwkJCSB4ZmVyLCBjbnQsIGF2YWlsYWJsZSwgZW1wdHksCisJCQkgYXZhaWxhYmxlID09IDAgfHwgIWVtcHR5ID8gImRlbGF5ZWQiIDogInN1Ym1pdHRlZCIpOworCQlpZiAoYXZhaWxhYmxlID09IDAgfHwgIWVtcHR5KSB7CisJCQlkX3ByaW50ZigxLCBkZXYsICJ4ZmVyICVwIyV1OiBkZWxheWVkXG4iLCB4ZmVyLCBjbnQpOworCQkJc2VnLT5zdGF0dXMgPSBXQV9TRUdfREVMQVlFRDsKKwkJCWxpc3RfYWRkX3RhaWwoJnNlZy0+bGlzdF9ub2RlLCAmcnBpcGUtPnNlZ19saXN0KTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9IF9fd2Ffc2VnX3N1Ym1pdChycGlwZSwgeGZlciwgc2VnKTsKKwkJCWlmIChyZXN1bHQgPCAwKQorCQkJCWdvdG8gZXJyb3Jfc2VnX3N1Ym1pdDsKKwkJfQorCQl4ZmVyLT5zZWdzX3N1Ym1pdHRlZCsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycGlwZS0+c2VnX2xvY2ssIGZsYWdzKTsKKwlkX2ZuZW5kKDMsIGRldiwgIih4ZmVyICVwIFtycGlwZSAlcF0pID0gdm9pZFxuIiwgeGZlciwKKwkJeGZlci0+ZXAtPmhjcHJpdik7CisJcmV0dXJuIHJlc3VsdDsKKworZXJyb3Jfc2VnX3N1Ym1pdDoKKwlfX3dhX3hmZXJfYWJvcnQoeGZlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBpcGUtPnNlZ19sb2NrLCBmbGFncyk7CisJZF9mbmVuZCgzLCBkZXYsICIoeGZlciAlcCBbcnBpcGUgJXBdKSA9IHZvaWRcbiIsIHhmZXIsCisJCXhmZXItPmVwLT5oY3ByaXYpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTZWNvbmQgcGFydCBvZiBhIFVSQi90cmFuc2ZlciBlbnF1ZXVlbWVudAorICoKKyAqIEFzc3VtZXMgdGhpcyBjb21lcyBmcm9tIHdhX3VyYl9lbnF1ZXVlKCkgW21heWJlIHRocm91Z2gKKyAqIHdhX3VyYl9lbnF1ZXVlX3J1bigpXS4gQXQgdGhpcyBwb2ludDoKKyAqCisgKiB4ZmVyLT53YQlmaWxsZWQgYW5kIHJlZmNvdW50ZWQKKyAqIHhmZXItPmVwCWZpbGxlZCB3aXRoIHJwaXBlIHJlZmNvdW50ZWQgaWYKKyAqICAgICAgICAgICAgICBkZWxheWVkID09IDAKKyAqIHhmZXItPnVyYiAJZmlsbGVkIGFuZCByZWZjb3VudGVkICh0aGlzIGlzIHRoZSBjYXNlIHdoZW4gY2FsbGVkCisgKiAgICAgICAgICAgICAgZnJvbSB3YV91cmJfZW5xdWV1ZSgpIGFzIHdlIGNvbWUgZnJvbSB1c2Jfc3VibWl0X3VyYigpCisgKiAgICAgICAgICAgICAgYW5kIHdoZW4gY2FsbGVkIGJ5IHdhX3VyYl9lbnF1ZXVlX3J1bigpLCBhcyB3ZSB0b29rIGFuCisgKiAgICAgICAgICAgICAgZXh0cmEgcmVmIGRyb3BwZWQgYnkgX3J1bigpIGFmdGVyIHdlIHJldHVybikuCisgKiB4ZmVyLT5nZnAJZmlsbGVkCisgKgorICogSWYgd2UgZmFpbCBhdCBfX3dhX3hmZXJfc3VibWl0KCksIHRoZW4gd2UganVzdCBjaGVjayBpZiB3ZSBhcmUgZG9uZQorICogYW5kIGlmIHNvLCB3ZSBydW4gdGhlIGNvbXBsZXRpb24gcHJvY2VkdXJlLiBIb3dldmVyLCBpZiB3ZSBhcmUgbm90CisgKiB5ZXQgZG9uZSwgd2UgZG8gbm90aGluZyBhbmQgd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgZnJvbQorICogdGhlIHN1Ym1pdHRlZCBVUkJzIG9yIGZyb20gdGhlIHhmZXItcmVzdWx0IHBhdGggdG8ga2ljayBpbi4gSWYgeGZlcgorICogcmVzdWx0IG5ldmVyIGtpY2tzIGluLCB0aGUgeGZlciB3aWxsIHRpbWVvdXQgZnJvbSB0aGUgVVNCIGNvZGUgYW5kCisgKiBkZXF1ZXVlKCkgd2lsbCBiZSBjYWxsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHdhX3VyYl9lbnF1ZXVlX2Ioc3RydWN0IHdhX3hmZXIgKnhmZXIpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1cmIgKnVyYiA9IHhmZXItPnVyYjsKKwlzdHJ1Y3Qgd2FoYyAqd2EgPSB4ZmVyLT53YTsKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB3YS0+d3VzYjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXY7CisJdW5zaWduZWQgZG9uZTsKKworCWRfZm5zdGFydCgzLCBkZXYsICIod2EgJXAgdXJiICVwKVxuIiwgd2EsIHVyYik7CisJcmVzdWx0ID0gcnBpcGVfZ2V0X2J5X2VwKHdhLCB4ZmVyLT5lcCwgdXJiLCB4ZmVyLT5nZnApOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX3JwaXBlX2dldDsKKwlyZXN1bHQgPSAtRU5PREVWOworCS8qIEZJWE1FOiBzZWdtZW50YXRpb24gYnJva2VuIC0tIGtpbGxzIERXQSAqLworCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOwkJLyogZ2V0IGEgV1VTQiBkZXYgKi8KKwlpZiAodXJiLT5kZXYgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9kZXZfZ29uZTsKKwl3dXNiX2RldiA9IF9fd3VzYl9kZXZfZ2V0X2J5X3VzYl9kZXYod3VzYmhjLCB1cmItPmRldik7CisJaWYgKHd1c2JfZGV2ID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKwkJZ290byBlcnJvcl9kZXZfZ29uZTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3dXNiaGMtPm11dGV4KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJeGZlci0+d3VzYl9kZXYgPSB3dXNiX2RldjsKKwlyZXN1bHQgPSB1cmItPnN0YXR1czsKKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlnb3RvIGVycm9yX2RlcXVldWVkOworCisJcmVzdWx0ID0gX193YV94ZmVyX3NldHVwKHhmZXIsIHVyYik7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfeGZlcl9zZXR1cDsKKwlyZXN1bHQgPSBfX3dhX3hmZXJfc3VibWl0KHhmZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX3hmZXJfc3VibWl0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhmZXItPmxvY2ssIGZsYWdzKTsKKwlkX2ZuZW5kKDMsIGRldiwgIih3YSAlcCB1cmIgJXApID0gdm9pZFxuIiwgd2EsIHVyYik7CisJcmV0dXJuOworCisJLyogdGhpcyBpcyBiYXNpY2FsbHkgd2FfeGZlcl9jb21wbGV0aW9uKCkgYnJva2VuIHVwIHdhX3hmZXJfZ2l2ZWJhY2soKQorCSAqIGRvZXMgYSB3YV94ZmVyX3B1dCgpIHRoYXQgd2lsbCBjYWxsIHdhX3hmZXJfZGVzdHJveSgpIGFuZCBjbGVhbgorCSAqIHVwdW5kbyBzZXR1cCgpLgorCSAqLworZXJyb3JfeGZlcl9zZXR1cDoKK2Vycm9yX2RlcXVldWVkOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhmZXItPmxvY2ssIGZsYWdzKTsKKwkvKiBGSVhNRTogc2VnbWVudGF0aW9uIGJyb2tlbiwga2lsbHMgRFdBICovCisJaWYgKHd1c2JfZGV2KQorCQl3dXNiX2Rldl9wdXQod3VzYl9kZXYpOworZXJyb3JfZGV2X2dvbmU6CisJcnBpcGVfcHV0KHhmZXItPmVwLT5oY3ByaXYpOworZXJyb3JfcnBpcGVfZ2V0OgorCXhmZXItPnJlc3VsdCA9IHJlc3VsdDsKKwl3YV94ZmVyX2dpdmViYWNrKHhmZXIpOworCWRfZm5lbmQoMywgZGV2LCAiKHdhICVwIHVyYiAlcCkgPSAodm9pZCkgJWRcbiIsIHdhLCB1cmIsIHJlc3VsdCk7CisJcmV0dXJuOworCitlcnJvcl94ZmVyX3N1Ym1pdDoKKwlkb25lID0gX193YV94ZmVyX2lzX2RvbmUoeGZlcik7CisJeGZlci0+cmVzdWx0ID0gcmVzdWx0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhmZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAoZG9uZSkKKwkJd2FfeGZlcl9jb21wbGV0aW9uKHhmZXIpOworCWRfZm5lbmQoMywgZGV2LCAiKHdhICVwIHVyYiAlcCkgPSAodm9pZCkgJWRcbiIsIHdhLCB1cmIsIHJlc3VsdCk7CisJcmV0dXJuOworfQorCisvKgorICogRXhlY3V0ZSB0aGUgZGVsYXllZCB0cmFuc2ZlcnMgaW4gdGhlIFdpcmUgQWRhcHRlciBAd2EKKyAqCisgKiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSwgYXMgZGVxdWV1ZSgpIGNvdWxkIGJlIGNhbGxlZCBpbiB0aGUKKyAqIG1pZGRsZS4gIFRoYXQncyB3aHkgd2UgZG8gdGhlIHdob2xlIHRoaW5nIHVuZGVyIHRoZQorICogd2EtPnhmZXJfbGlzdF9sb2NrLiBJZiBkZXF1ZXVlKCkganVtcHMgaW4sIGl0IGZpcnN0IGxvY2tzIHVyYi0+bG9jaworICogYW5kIHRoZW4gY2hlY2tzIHRoZSBsaXN0IC0tIHNvIGFzIHdlIHdvdWxkIGJlIGFjcXVpcmluZyBpbiBpbnZlcnNlCisgKiBvcmRlciwgd2UganVzdCBkcm9wIHRoZSBsb2NrIG9uY2Ugd2UgaGF2ZSB0aGUgeGZlciBhbmQgcmVhY3F1aXJlIGl0CisgKiBsYXRlci4KKyAqLwordm9pZCB3YV91cmJfZW5xdWV1ZV9ydW4oc3RydWN0IHdvcmtfc3RydWN0ICp3cykKK3sKKwlzdHJ1Y3Qgd2FoYyAqd2EgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCB3YWhjLCB4ZmVyX3dvcmspOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJc3RydWN0IHdhX3hmZXIgKnhmZXIsICpuZXh0OworCXN0cnVjdCB1cmIgKnVyYjsKKworCWRfZm5zdGFydCgzLCBkZXYsICIod2EgJXApXG4iLCB3YSk7CisJc3Bpbl9sb2NrX2lycSgmd2EtPnhmZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeGZlciwgbmV4dCwgJndhLT54ZmVyX2RlbGF5ZWRfbGlzdCwKKwkJCQkgbGlzdF9ub2RlKSB7CisJCWxpc3RfZGVsX2luaXQoJnhmZXItPmxpc3Rfbm9kZSk7CisJCXNwaW5fdW5sb2NrX2lycSgmd2EtPnhmZXJfbGlzdF9sb2NrKTsKKworCQl1cmIgPSB4ZmVyLT51cmI7CisJCXdhX3VyYl9lbnF1ZXVlX2IoeGZlcik7CisJCXVzYl9wdXRfdXJiKHVyYik7CS8qIHRha2VuIHdoZW4gcXVldWluZyAqLworCisJCXNwaW5fbG9ja19pcnEoJndhLT54ZmVyX2xpc3RfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmd2EtPnhmZXJfbGlzdF9sb2NrKTsKKwlkX2ZuZW5kKDMsIGRldiwgIih3YSAlcCkgPSB2b2lkXG4iLCB3YSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3YV91cmJfZW5xdWV1ZV9ydW4pOworCisvKgorICogU3VibWl0IGEgdHJhbnNmZXIgdG8gdGhlIFdpcmUgQWRhcHRlciBpbiBhIGRlbGF5ZWQgd2F5CisgKgorICogVGhlIHByb2Nlc3Mgb2YgZW5xdWV1aW5nIGludm9sdmVzIHBvc3NpYmxlIHNsZWVwcygpIFtzZWUKKyAqIGVucXVldWVfYigpLCBmb3IgdGhlIHJwaXBlX2dldCgpIGFuZCB0aGUgbXV0ZXhfbG9jaygpXS4gSWYgd2UgYXJlCisgKiBpbiBhbiBhdG9taWMgc2VjdGlvbiwgd2UgZGVmZXIgdGhlIGVucXVldWVfYigpIGNhbGwtLWVsc2Ugd2UgY2FsbCBkaXJlY3QuCisgKgorICogQHVyYjogV2Ugb3duIGEgcmVmZXJlbmNlIHRvIGl0IGRvbmUgYnkgdGhlIEhDSSBMaW51eCBVU0Igc3RhY2sgdGhhdAorICogICAgICAgd2lsbCBiZSBnaXZlbiB1cCBieSBjYWxsaW5nIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKCkgb3IgYnkKKyAqICAgICAgIHJldHVybmluZyBlcnJvciBmcm9tIHRoaXMgZnVuY3Rpb24gLT4gZXJnbyB3ZSBkb24ndCBoYXZlIHRvCisgKiAgICAgICByZWZjb3VudCBpdC4KKyAqLworaW50IHdhX3VyYl9lbnF1ZXVlKHN0cnVjdCB3YWhjICp3YSwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwkJICAgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBnZnApCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCB3YV94ZmVyICp4ZmVyOworCXVuc2lnbmVkIGxvbmcgbXlfZmxhZ3M7CisJdW5zaWduZWQgY2FudF9zbGVlcCA9IGlycXNfZGlzYWJsZWQoKSB8IGluX2F0b21pYygpOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIih3YSAlcCBlcCAlcCB1cmIgJXAgWyVkXSBnZnAgMHgleClcbiIsCisJCSAgd2EsIGVwLCB1cmIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgZ2ZwKTsKKworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMCisJICAgICYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKQorCSAgICAmJiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggIT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkJVRz8gdXJiICVwOiBOVUxMIHhmZXIgYnVmZmVyICYgTk9ETUFcbiIsIHVyYik7CisJCWR1bXBfc3RhY2soKTsKKwl9CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCXhmZXIgPSBremFsbG9jKHNpemVvZigqeGZlciksIGdmcCk7CisJaWYgKHhmZXIgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9rbWFsbG9jOworCisJcmVzdWx0ID0gLUVOT0VOVDsKKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQkvKiBjYW5jZWxsZWQgKi8KKwkJZ290byBlcnJvcl9kZXF1ZXVlZDsJCS8qIGJlZm9yZSBzdGFydGluZz8gKi8KKwl3YV94ZmVyX2luaXQoeGZlcik7CisJeGZlci0+d2EgPSB3YV9nZXQod2EpOworCXhmZXItPnVyYiA9IHVyYjsKKwl4ZmVyLT5nZnAgPSBnZnA7CisJeGZlci0+ZXAgPSBlcDsKKwl1cmItPmhjcHJpdiA9IHhmZXI7CisJZF9wcmludGYoMiwgZGV2LCAieGZlciAlcCB1cmIgJXAgcGlwZSAweCUwMnggWyVkIGJ5dGVzXSAlcyAlcyAlc1xuIiwKKwkJIHhmZXIsIHVyYiwgdXJiLT5waXBlLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSB1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgPyAiZG1hIiA6ICJub2RtYSIsCisJCSB1cmItPnBpcGUgJiBVU0JfRElSX0lOID8gImluYm91bmQiIDogIm91dGJvdW5kIiwKKwkJIGNhbnRfc2xlZXAgPyAiZGVmZXJyZWQiIDogImlubGluZSIpOworCWlmIChjYW50X3NsZWVwKSB7CisJCXVzYl9nZXRfdXJiKHVyYik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3YS0+eGZlcl9saXN0X2xvY2ssIG15X2ZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmeGZlci0+bGlzdF9ub2RlLCAmd2EtPnhmZXJfZGVsYXllZF9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2EtPnhmZXJfbGlzdF9sb2NrLCBteV9mbGFncyk7CisJCXF1ZXVlX3dvcmsod3VzYmQsICZ3YS0+eGZlcl93b3JrKTsKKwl9IGVsc2UgeworCQl3YV91cmJfZW5xdWV1ZV9iKHhmZXIpOworCX0KKwlkX2ZuZW5kKDMsIGRldiwgIih3YSAlcCBlcCAlcCB1cmIgJXAgWyVkXSBnZnAgMHgleCkgPSAwXG4iLAorCQl3YSwgZXAsIHVyYiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBnZnApOworCXJldHVybiAwOworCitlcnJvcl9kZXF1ZXVlZDoKKwlrZnJlZSh4ZmVyKTsKK2Vycm9yX2ttYWxsb2M6CisJZF9mbmVuZCgzLCBkZXYsICIod2EgJXAgZXAgJXAgdXJiICVwIFslZF0gZ2ZwIDB4JXgpID0gJWRcbiIsCisJCXdhLCBlcCwgdXJiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIGdmcCwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod2FfdXJiX2VucXVldWUpOworCisvKgorICogRGVxdWV1ZSBhIFVSQiBhbmQgbWFrZSBzdXJlIHV3Yl9oY2RfZ2l2ZWJhY2tfdXJiKCkgW2NvbXBsZXRpb24KKyAqIGhhbmRsZXJdIGlzIGNhbGxlZC4KKyAqCisgKiBVbnRpbCBhIHRyYW5zZmVyIGdvZXMgc3VjY2Vzc2Z1bGx5IHRocm91Z2ggd2FfdXJiX2VucXVldWUoKSBpdAorICogbmVlZHMgdG8gYmUgZGVxdWV1ZWQgd2l0aCBjb21wbGV0aW9uIGNhbGxpbmc7IHdoZW4gc3R1Y2sgaW4gZGVsYXllZAorICogb3IgYmVmb3JlIHdhX3hmZXJfc2V0dXAoKSBpcyBjYWxsZWQsIHdlIG5lZWQgdG8gZG8gY29tcGxldGlvbi4KKyAqCisgKiAgbm90IHNldHVwICBJZiB0aGVyZSBpcyBubyBoY3ByaXYgeWV0LCB0aGF0IG1lYW5zIHRoYXQgdGhhdCBlbnF1ZXVlCisgKiAgICAgICAgICAgICBzdGlsbCBoYWQgbm8gdGltZSB0byBzZXQgdGhlIHhmZXIgdXAuIEJlY2F1c2UKKyAqICAgICAgICAgICAgIHVyYi0+c3RhdHVzIHNob3VsZCBiZSBvdGhlciB0aGFuIC1FSU5QUk9HUkVTUywKKyAqICAgICAgICAgICAgIGVucXVldWUoKSB3aWxsIGNhdGNoIHRoYXQgYW5kIGJhaWwgb3V0LgorICoKKyAqIElmIHRoZSB0cmFuc2ZlciBoYXMgZ29uZSB0aHJvdWdoIHNldHVwLCB3ZSBqdXN0IG5lZWQgdG8gY2xlYW4gaXQKKyAqIHVwLiBJZiBpdCBoYXMgZ29uZSB0aHJvdWdoIHN1Ym1pdCgpLCB3ZSBoYXZlIHRvIGFib3J0IGl0IFt3aXRoIGFuCisgKiBhc3luY2ggcmVxdWVzdF0gYW5kIHRoZW4gbWFrZSBzdXJlIHdlIGNhbmNlbCBlYWNoIHNlZ21lbnQuCisgKgorICovCitpbnQgd2FfdXJiX2RlcXVldWUoc3RydWN0IHdhaGMgKndhLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBmbGFnczI7CisJc3RydWN0IHdhX3hmZXIgKnhmZXI7CisJc3RydWN0IHdhX3NlZyAqc2VnOworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGU7CisJdW5zaWduZWQgY250OworCXVuc2lnbmVkIHJwaXBlX3JlYWR5ID0gMDsKKworCWRfZm5zdGFydCgzLCBkZXYsICIod2EgJXAsIHVyYiAlcClcbiIsIHdhLCB1cmIpOworCisJZF9wcmludGYoMSwgZGV2LCAieGZlciAlcCB1cmIgJXA6IGFib3J0aW5nXG4iLCB1cmItPmhjcHJpdiwgdXJiKTsKKwl4ZmVyID0gdXJiLT5oY3ByaXY7CisJaWYgKHhmZXIgPT0gTlVMTCkgeworCQkvKiBOT3RoaW5nIHNldHVwIHlldCBlbnF1ZXVlIHdpbGwgc2VlIHVyYi0+c3RhdHVzICE9CisJCSAqIC1FSU5QUk9HUkVTUyAoYnkgaGNkIGxheWVyKSBhbmQgYmFpbCBvdXQgd2l0aAorCQkgKiBlcnJvciwgbm8gbmVlZCB0byBkbyBjb21wbGV0aW9uCisJCSAqLworCQlCVUdfT04odXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKTsKKwkJZ290byBvdXQ7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJcnBpcGUgPSB4ZmVyLT5lcC0+aGNwcml2OworCS8qIENoZWNrIHRoZSBkZWxheWVkIGxpc3QgLT4gaWYgdGhlcmUsIHJlbGVhc2UgYW5kIGNvbXBsZXRlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJndhLT54ZmVyX2xpc3RfbG9jaywgZmxhZ3MyKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnhmZXItPmxpc3Rfbm9kZSkgJiYgeGZlci0+c2VnID09IE5VTEwpCisJCWdvdG8gZGVxdWV1ZV9kZWxheWVkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndhLT54ZmVyX2xpc3RfbG9jaywgZmxhZ3MyKTsKKwlpZiAoeGZlci0+c2VnID09IE5VTEwpICAJLyogc3RpbGwgaGFzbid0IHJlYWNoZWQgKi8KKwkJZ290byBvdXRfdW5sb2NrOwkvKiBzZXR1cCgpLCBlbnF1ZXVlX2IoKSBjb21wbGV0ZXMgKi8KKwkvKiBPaywgdGhlIHhmZXIgaXMgaW4gZmxpZ2h0IGFscmVhZHksIGl0J3MgYmVlbiBzZXR1cCBhbmQgc3VibWl0dGVkLiovCisJX193YV94ZmVyX2Fib3J0KHhmZXIpOworCWZvciAoY250ID0gMDsgY250IDwgeGZlci0+c2VnczsgY250KyspIHsKKwkJc2VnID0geGZlci0+c2VnW2NudF07CisJCXN3aXRjaCAoc2VnLT5zdGF0dXMpIHsKKwkJY2FzZSBXQV9TRUdfTk9UUkVBRFk6CisJCWNhc2UgV0FfU0VHX1JFQURZOgorCQkJcHJpbnRrKEtFUk5fRVJSICJ4ZmVyICVwIyV1OiBkZXF1ZXVlIGJhZCBzdGF0ZSAldVxuIiwKKwkJCSAgICAgICB4ZmVyLCBjbnQsIHNlZy0+c3RhdHVzKTsKKwkJCVdBUk5fT04oMSk7CisJCQlicmVhazsKKwkJY2FzZSBXQV9TRUdfREVMQVlFRDoKKwkJCXNlZy0+c3RhdHVzID0gV0FfU0VHX0FCT1JURUQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnBpcGUtPnNlZ19sb2NrLCBmbGFnczIpOworCQkJbGlzdF9kZWwoJnNlZy0+bGlzdF9ub2RlKTsKKwkJCXhmZXItPnNlZ3NfZG9uZSsrOworCQkJcnBpcGVfcmVhZHkgPSBycGlwZV9hdmFpbF9pbmMocnBpcGUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBpcGUtPnNlZ19sb2NrLCBmbGFnczIpOworCQkJYnJlYWs7CisJCWNhc2UgV0FfU0VHX1NVQk1JVFRFRDoKKwkJCXNlZy0+c3RhdHVzID0gV0FfU0VHX0FCT1JURUQ7CisJCQl1c2JfdW5saW5rX3VyYigmc2VnLT51cmIpOworCQkJaWYgKHhmZXItPmlzX2luYm91bmQgPT0gMCkKKwkJCQl1c2JfdW5saW5rX3VyYihzZWctPmR0b191cmIpOworCQkJeGZlci0+c2Vnc19kb25lKys7CisJCQlycGlwZV9yZWFkeSA9IHJwaXBlX2F2YWlsX2luYyhycGlwZSk7CisJCQlicmVhazsKKwkJY2FzZSBXQV9TRUdfUEVORElORzoKKwkJCXNlZy0+c3RhdHVzID0gV0FfU0VHX0FCT1JURUQ7CisJCQl4ZmVyLT5zZWdzX2RvbmUrKzsKKwkJCXJwaXBlX3JlYWR5ID0gcnBpcGVfYXZhaWxfaW5jKHJwaXBlKTsKKwkJCWJyZWFrOworCQljYXNlIFdBX1NFR19EVElfUEVORElORzoKKwkJCXVzYl91bmxpbmtfdXJiKHdhLT5kdGlfdXJiKTsKKwkJCXNlZy0+c3RhdHVzID0gV0FfU0VHX0FCT1JURUQ7CisJCQl4ZmVyLT5zZWdzX2RvbmUrKzsKKwkJCXJwaXBlX3JlYWR5ID0gcnBpcGVfYXZhaWxfaW5jKHJwaXBlKTsKKwkJCWJyZWFrOworCQljYXNlIFdBX1NFR19ET05FOgorCQljYXNlIFdBX1NFR19FUlJPUjoKKwkJY2FzZSBXQV9TRUdfQUJPUlRFRDoKKwkJCWJyZWFrOworCQl9CisJfQorCXhmZXItPnJlc3VsdCA9IHVyYi0+c3RhdHVzOwkvKiAtRU5PRU5UIG9yIC1FQ09OTlJFU0VUICovCisJX193YV94ZmVyX2lzX2RvbmUoeGZlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCXdhX3hmZXJfY29tcGxldGlvbih4ZmVyKTsKKwlpZiAocnBpcGVfcmVhZHkpCisJCXdhX3hmZXJfZGVsYXllZF9ydW4ocnBpcGUpOworCWRfZm5lbmQoMywgZGV2LCAiKHdhICVwLCB1cmIgJXApID0gMFxuIiwgd2EsIHVyYik7CisJcmV0dXJuIDA7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworb3V0OgorCWRfZm5lbmQoMywgZGV2LCAiKHdhICVwLCB1cmIgJXApID0gMFxuIiwgd2EsIHVyYik7CisJcmV0dXJuIDA7CisKK2RlcXVldWVfZGVsYXllZDoKKwlsaXN0X2RlbF9pbml0KCZ4ZmVyLT5saXN0X25vZGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndhLT54ZmVyX2xpc3RfbG9jaywgZmxhZ3MyKTsKKwl4ZmVyLT5yZXN1bHQgPSB1cmItPnN0YXR1czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJd2FfeGZlcl9naXZlYmFjayh4ZmVyKTsKKwl1c2JfcHV0X3VyYih1cmIpOwkJLyogd2UgZ290IGEgcmVmIGluIGVucXVldWUoKSAqLworCWRfZm5lbmQoMywgZGV2LCAiKHdhICVwLCB1cmIgJXApID0gMFxuIiwgd2EsIHVyYik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3YV91cmJfZGVxdWV1ZSk7CisKKy8qCisgKiBUcmFuc2xhdGlvbiBmcm9tIFdBIHN0YXR1cyBjb2RlcyAoV1VTQjEuMCBUYWJsZSA4LjE1KSB0byBlcnJubworICogY29kZXMKKyAqCisgKiBQb3NpdGl2ZSBlcnJubyB2YWx1ZXMgYXJlIGludGVybmFsIGluY29uc2lzdGVuY2llcyBhbmQgc2hvdWxkIGJlCisgKiBmbGFnZ2VkIGxvdWRlci4gTmVnYXRpdmUgYXJlIHRvIGJlIHBhc3NlZCB1cCB0byB0aGUgdXNlciBpbiB0aGUKKyAqIG5vcm1hbCB3YXkuCisgKgorICogQHN0YXR1czogVVNCIFdBIHN0YXR1cyBjb2RlIC0tIGhpZ2ggdHdvIGJpdHMgYXJlIHN0cmlwcGVkLgorICovCitzdGF0aWMgaW50IHdhX3hmZXJfc3RhdHVzX3RvX2Vycm5vKHU4IHN0YXR1cykKK3sKKwlpbnQgZXJybm87CisJdTggcmVhbF9zdGF0dXMgPSBzdGF0dXM7CisJc3RhdGljIGludCB4bGF0W10gPSB7CisJCVtXQV9YRkVSX1NUQVRVU19TVUNDRVNTXSA9IAkJMCwKKwkJW1dBX1hGRVJfU1RBVFVTX0hBTFRFRF0gPSAJCS1FUElQRSwKKwkJW1dBX1hGRVJfU1RBVFVTX0RBVEFfQlVGRkVSX0VSUk9SXSA9IAktRU5PQlVGUywKKwkJW1dBX1hGRVJfU1RBVFVTX0JBQkJMRV0gPSAJCS1FT1ZFUkZMT1csCisJCVtXQV9YRkVSX1JFU0VSVkVEXSA9IAkJCUVJTlZBTCwKKwkJW1dBX1hGRVJfU1RBVFVTX05PVF9GT1VORF0gPQkJMCwKKwkJW1dBX1hGRVJfU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRV0gPSAtRU5PTUVNLAorCQlbV0FfWEZFUl9TVEFUVVNfVFJBTlNBQ1RJT05fRVJST1JdID0gCS1FSUxTRVEsCisJCVtXQV9YRkVSX1NUQVRVU19BQk9SVEVEXSA9IAkJLUVJTlRSLAorCQlbV0FfWEZFUl9TVEFUVVNfUlBJUEVfTk9UX1JFQURZXSA9IAlFSU5WQUwsCisJCVtXQV9YRkVSX0lOVkFMSURfRk9STUFUXSA9IAkJRUlOVkFMLAorCQlbV0FfWEZFUl9VTkVYUEVDVEVEX1NFR01FTlRfTlVNQkVSXSA9IAlFSU5WQUwsCisJCVtXQV9YRkVSX1NUQVRVU19SUElQRV9UWVBFX01JU01BVENIXSA9IAlFSU5WQUwsCisJfTsKKwlzdGF0dXMgJj0gMHgzZjsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXR1cyA+PSBBUlJBWV9TSVpFKHhsYXQpKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IEJVRz8gIgorCQkJICAgICAgICJVbmtub3duIFdBIHRyYW5zZmVyIHN0YXR1cyAweCUwMnhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHJlYWxfc3RhdHVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVycm5vID0geGxhdFtzdGF0dXNdOworCWlmICh1bmxpa2VseShlcnJubyA+IDApKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IEJVRz8gIgorCQkJICAgICAgICJJbmNvbnNpc3RlbnQgV0Egc3RhdHVzOiAweCUwMnhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHJlYWxfc3RhdHVzKTsKKwkJZXJybm8gPSAtZXJybm87CisJfQorCXJldHVybiBlcnJubzsKK30KKworLyoKKyAqIFByb2Nlc3MgYSB4ZmVyIHJlc3VsdCBjb21wbGV0aW9uIG1lc3NhZ2UKKyAqCisgKiBpbmJvdW5kIHRyYW5zZmVyczogbmVlZCB0byBzY2hlZHVsZSBhIERUSSByZWFkCisgKgorICogRklYTUU6IHRoaXMgZnVuY3RpbyBuZWVkcyB0byBiZSBicm9rZW4gdXAgaW4gcGFydHMKKyAqLworc3RhdGljIHZvaWQgd2FfeGZlcl9yZXN1bHRfY2hldyhzdHJ1Y3Qgd2FoYyAqd2EsIHN0cnVjdCB3YV94ZmVyICp4ZmVyKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHNlZ19pZHg7CisJc3RydWN0IHdhX3NlZyAqc2VnOworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGU7CisJc3RydWN0IHdhX3hmZXJfcmVzdWx0ICp4ZmVyX3Jlc3VsdCA9IHdhLT54ZmVyX3Jlc3VsdDsKKwl1OCBkb25lID0gMDsKKwl1OCB1c2Jfc3RhdHVzOworCXVuc2lnbmVkIHJwaXBlX3JlYWR5ID0gMDsKKworCWRfZm5zdGFydCgzLCBkZXYsICIod2EgJXAgeGZlciAlcClcbiIsIHdhLCB4ZmVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCXNlZ19pZHggPSB4ZmVyX3Jlc3VsdC0+YlRyYW5zZmVyU2VnbWVudCAmIDB4N2Y7CisJaWYgKHVubGlrZWx5KHNlZ19pZHggPj0geGZlci0+c2VncykpCisJCWdvdG8gZXJyb3JfYmFkX3NlZzsKKwlzZWcgPSB4ZmVyLT5zZWdbc2VnX2lkeF07CisJcnBpcGUgPSB4ZmVyLT5lcC0+aGNwcml2OworCXVzYl9zdGF0dXMgPSB4ZmVyX3Jlc3VsdC0+YlRyYW5zZmVyU3RhdHVzOworCWRfcHJpbnRmKDIsIGRldiwgInhmZXIgJXAjJXU6IGJUcmFuc2ZlclN0YXR1cyAweCUwMnggKHNlZyAldSlcbiIsCisJCSB4ZmVyLCBzZWdfaWR4LCB1c2Jfc3RhdHVzLCBzZWctPnN0YXR1cyk7CisJaWYgKHNlZy0+c3RhdHVzID09IFdBX1NFR19BQk9SVEVECisJICAgIHx8IHNlZy0+c3RhdHVzID09IFdBX1NFR19FUlJPUikJLyogYWxyZWFkeSBoYW5kbGVkICovCisJCWdvdG8gc2VnbWVudF9hYm9ydGVkOworCWlmIChzZWctPnN0YXR1cyA9PSBXQV9TRUdfU1VCTUlUVEVEKQkvKiBvcHMsIGdvdCBoZXJlICovCisJCXNlZy0+c3RhdHVzID0gV0FfU0VHX1BFTkRJTkc7CS8qIGJlZm9yZSB3YV9zZWd7X2R0b31fY2IoKSAqLworCWlmIChzZWctPnN0YXR1cyAhPSBXQV9TRUdfUEVORElORykgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJ4ZmVyICVwIyV1OiBCYWQgc2VnbWVudCBzdGF0ZSAldVxuIiwKKwkJCQl4ZmVyLCBzZWdfaWR4LCBzZWctPnN0YXR1cyk7CisJCXNlZy0+c3RhdHVzID0gV0FfU0VHX1BFTkRJTkc7CS8qIHdvcmthcm91bmQvImZpeCIgaXQgKi8KKwl9CisJaWYgKHVzYl9zdGF0dXMgJiAweDgwKSB7CisJCXNlZy0+cmVzdWx0ID0gd2FfeGZlcl9zdGF0dXNfdG9fZXJybm8odXNiX3N0YXR1cyk7CisJCWRldl9lcnIoZGV2LCAiRFRJOiB4ZmVyICVwIyV1IGZhaWxlZCAoMHglMDJ4KVxuIiwKKwkJCXhmZXIsIHNlZy0+aW5kZXgsIHVzYl9zdGF0dXMpOworCQlnb3RvIGVycm9yX2NvbXBsZXRlOworCX0KKwkvKiBGSVhNRTogd2UgaWdub3JlIHdhcm5pbmdzLCB0YWxseSB0aGVtIGZvciBzdGF0cyAqLworCWlmICh1c2Jfc3RhdHVzICYgMHg0MCkgCQkvKiBXYXJuaW5nPy4uLiAqLworCQl1c2Jfc3RhdHVzID0gMDsJCS8qIC4uLiBwYXNzICovCisJaWYgKHhmZXItPmlzX2luYm91bmQpIHsJLyogSU4gZGF0YSBwaGFzZTogcmVhZCB0byBidWZmZXIgKi8KKwkJc2VnLT5zdGF0dXMgPSBXQV9TRUdfRFRJX1BFTkRJTkc7CisJCUJVR19PTih3YS0+YnVmX2luX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUyk7CisJCWlmICh4ZmVyLT5pc19kbWEpIHsKKwkJCXdhLT5idWZfaW5fdXJiLT50cmFuc2Zlcl9kbWEgPQorCQkJCXhmZXItPnVyYi0+dHJhbnNmZXJfZG1hCisJCQkJKyBzZWdfaWR4ICogeGZlci0+c2VnX3NpemU7CisJCQl3YS0+YnVmX2luX3VyYi0+dHJhbnNmZXJfZmxhZ3MKKwkJCQl8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJfSBlbHNlIHsKKwkJCXdhLT5idWZfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCXhmZXItPnVyYi0+dHJhbnNmZXJfYnVmZmVyCisJCQkJKyBzZWdfaWR4ICogeGZlci0+c2VnX3NpemU7CisJCQl3YS0+YnVmX2luX3VyYi0+dHJhbnNmZXJfZmxhZ3MKKwkJCQkmPSB+VVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCX0KKwkJd2EtPmJ1Zl9pbl91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPQorCQkJbGUzMl90b19jcHUoeGZlcl9yZXN1bHQtPmR3VHJhbnNmZXJMZW5ndGgpOworCQl3YS0+YnVmX2luX3VyYi0+Y29udGV4dCA9IHNlZzsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIod2EtPmJ1Zl9pbl91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWdvdG8gZXJyb3Jfc3VibWl0X2J1Zl9pbjsKKwl9IGVsc2UgeworCQkvKiBPVVQgZGF0YSBwaGFzZSwgY29tcGxldGUgaXQgLS0gKi8KKwkJc2VnLT5zdGF0dXMgPSBXQV9TRUdfRE9ORTsKKwkJc2VnLT5yZXN1bHQgPSBsZTMyX3RvX2NwdSh4ZmVyX3Jlc3VsdC0+ZHdUcmFuc2Zlckxlbmd0aCk7CisJCXhmZXItPnNlZ3NfZG9uZSsrOworCQlycGlwZV9yZWFkeSA9IHJwaXBlX2F2YWlsX2luYyhycGlwZSk7CisJCWRvbmUgPSBfX3dhX3hmZXJfaXNfZG9uZSh4ZmVyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCWlmIChkb25lKQorCQl3YV94ZmVyX2NvbXBsZXRpb24oeGZlcik7CisJaWYgKHJwaXBlX3JlYWR5KQorCQl3YV94ZmVyX2RlbGF5ZWRfcnVuKHJwaXBlKTsKKwlkX2ZuZW5kKDMsIGRldiwgIih3YSAlcCB4ZmVyICVwKSA9IHZvaWRcbiIsIHdhLCB4ZmVyKTsKKwlyZXR1cm47CisKKworZXJyb3Jfc3VibWl0X2J1Zl9pbjoKKwlpZiAoZWRjX2luYygmd2EtPmR0aV9lZGMsIEVEQ19NQVhfRVJST1JTLCBFRENfRVJST1JfVElNRUZSQU1FKSkgeworCQlkZXZfZXJyKGRldiwgIkRUSTogVVJCIG1heCBhY2NlcHRhYmxlIGVycm9ycyAiCisJCQkiZXhjZWVkZWQsIHJlc2V0dGluZyBkZXZpY2VcbiIpOworCQl3YV9yZXNldF9hbGwod2EpOworCX0KKwlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQlkZXZfZXJyKGRldiwgInhmZXIgJXAjJXU6IGNhbid0IHN1Ym1pdCBEVEkgZGF0YSBwaGFzZTogJWRcbiIsCisJCQl4ZmVyLCBzZWdfaWR4LCByZXN1bHQpOworCXNlZy0+cmVzdWx0ID0gcmVzdWx0OworZXJyb3JfY29tcGxldGU6CisJc2VnLT5zdGF0dXMgPSBXQV9TRUdfRVJST1I7CisJeGZlci0+c2Vnc19kb25lKys7CisJcnBpcGVfcmVhZHkgPSBycGlwZV9hdmFpbF9pbmMocnBpcGUpOworCV9fd2FfeGZlcl9hYm9ydCh4ZmVyKTsKKwlkb25lID0gX193YV94ZmVyX2lzX2RvbmUoeGZlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCWlmIChkb25lKQorCQl3YV94ZmVyX2NvbXBsZXRpb24oeGZlcik7CisJaWYgKHJwaXBlX3JlYWR5KQorCQl3YV94ZmVyX2RlbGF5ZWRfcnVuKHJwaXBlKTsKKwlkX2ZuZW5kKDMsIGRldiwgIih3YSAlcCB4ZmVyICVwKSA9IHZvaWQgW3NlZ21lbnQvRFRJLXN1Ym1pdCBlcnJvcl1cbiIsCisJCXdhLCB4ZmVyKTsKKwlyZXR1cm47CisKKworZXJyb3JfYmFkX3NlZzoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJd2FfdXJiX2RlcXVldWUod2EsIHhmZXItPnVyYik7CisJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJZGV2X2VycihkZXYsICJ4ZmVyICVwIyV1OiBiYWQgc2VnbWVudFxuIiwgeGZlciwgc2VnX2lkeCk7CisJaWYgKGVkY19pbmMoJndhLT5kdGlfZWRjLCBFRENfTUFYX0VSUk9SUywgRURDX0VSUk9SX1RJTUVGUkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJEVEk6IFVSQiBtYXggYWNjZXB0YWJsZSBlcnJvcnMgIgorCQkJImV4Y2VlZGVkLCByZXNldHRpbmcgZGV2aWNlXG4iKTsKKwkJd2FfcmVzZXRfYWxsKHdhKTsKKwl9CisJZF9mbmVuZCgzLCBkZXYsICIod2EgJXAgeGZlciAlcCkgPSB2b2lkIFtiYWQgc2VnXVxuIiwgd2EsIHhmZXIpOworCXJldHVybjsKKworCitzZWdtZW50X2Fib3J0ZWQ6CisJLyogbm90aGluZyB0byBkbywgYXMgdGhlIGFib3J0ZXIgZGlkIHRoZSBjb21wbGV0aW9uICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCWRfZm5lbmQoMywgZGV2LCAiKHdhICVwIHhmZXIgJXApID0gdm9pZCBbc2VnbWVudCBhYm9ydGVkXVxuIiwKKwkJd2EsIHhmZXIpOworCXJldHVybjsKKworfQorCisvKgorICogQ2FsbGJhY2sgZm9yIHRoZSBJTiBkYXRhIHBoYXNlCisgKgorICogSWYgc3VjY2VzZnVsIHRyYW5zaXRpb24gc3RhdGU7IG90aGVyd2lzZSwgdGFrZSBhIG5vdGUgb2YgdGhlCisgKiBlcnJvciwgbWFyayB0aGlzIHNlZ21lbnQgZG9uZSBhbmQgdHJ5IGNvbXBsZXRpb24uCisgKgorICogTm90ZSB3ZSBkb24ndCBhY2Nlc3MgdW50aWwgd2UgYXJlIHN1cmUgdGhhdCB0aGUgdHJhbnNmZXIgaGFzbid0CisgKiBiZWVuIGNhbmNlbGxlZCAoRUNPTk5SRVNFVCwgRU5PRU5UKSwgd2hpY2ggY291bGQgbWVhbiB0aGF0CisgKiBzZWctPnhmZXIgY291bGQgYmUgYWxyZWFkeSBnb25lLgorICovCitzdGF0aWMgdm9pZCB3YV9idWZfaW5fY2Ioc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB3YV9zZWcgKnNlZyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgd2FfeGZlciAqeGZlciA9IHNlZy0+eGZlcjsKKwlzdHJ1Y3Qgd2FoYyAqd2E7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB3YV9ycGlwZSAqcnBpcGU7CisJdW5zaWduZWQgcnBpcGVfcmVhZHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBkb25lID0gMDsKKworCWRfZm5zdGFydCgzLCBOVUxMLCAiKHVyYiAlcCBbJWRdKVxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnhmZXItPmxvY2ssIGZsYWdzKTsKKwkJd2EgPSB4ZmVyLT53YTsKKwkJZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwkJcnBpcGUgPSB4ZmVyLT5lcC0+aGNwcml2OworCQlkX3ByaW50ZigyLCBkZXYsICJ4ZmVyICVwIyV1OiBkYXRhIGluIGRvbmUgKCV6dSBieXRlcylcbiIsCisJCQkgICB4ZmVyLCBzZWctPmluZGV4LCAoc2l6ZV90KXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCXNlZy0+c3RhdHVzID0gV0FfU0VHX0RPTkU7CisJCXNlZy0+cmVzdWx0ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl4ZmVyLT5zZWdzX2RvbmUrKzsKKwkJcnBpcGVfcmVhZHkgPSBycGlwZV9hdmFpbF9pbmMocnBpcGUpOworCQlkb25lID0gX193YV94ZmVyX2lzX2RvbmUoeGZlcik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhmZXItPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGRvbmUpCisJCQl3YV94ZmVyX2NvbXBsZXRpb24oeGZlcik7CisJCWlmIChycGlwZV9yZWFkeSkKKwkJCXdhX3hmZXJfZGVsYXllZF9ydW4ocnBpcGUpOworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiBVUkIgdW5saW5rZWQ7IG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KKwljYXNlIC1FTk9FTlQ6CQkvKiBhcyBpdCB3YXMgZG9uZSBieSB0aGUgd2hvIHVubGlua2VkIHVzICovCisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiBPdGhlciBlcnJvcnMgLi4uICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ4ZmVyLT5sb2NrLCBmbGFncyk7CisJCXdhID0geGZlci0+d2E7CisJCWRldiA9ICZ3YS0+dXNiX2lmYWNlLT5kZXY7CisJCXJwaXBlID0geGZlci0+ZXAtPmhjcHJpdjsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAieGZlciAlcCMldTogZGF0YSBpbiBlcnJvciAlZFxuIiwKKwkJCQl4ZmVyLCBzZWctPmluZGV4LCB1cmItPnN0YXR1cyk7CisJCWlmIChlZGNfaW5jKCZ3YS0+bmVwX2VkYywgRURDX01BWF9FUlJPUlMsCisJCQkgICAgRURDX0VSUk9SX1RJTUVGUkFNRSkpeworCQkJZGV2X2VycihkZXYsICJEVE86IFVSQiBtYXggYWNjZXB0YWJsZSBlcnJvcnMgIgorCQkJCSJleGNlZWRlZCwgcmVzZXR0aW5nIGRldmljZVxuIik7CisJCQl3YV9yZXNldF9hbGwod2EpOworCQl9CisJCXNlZy0+c3RhdHVzID0gV0FfU0VHX0VSUk9SOworCQlzZWctPnJlc3VsdCA9IHVyYi0+c3RhdHVzOworCQl4ZmVyLT5zZWdzX2RvbmUrKzsKKwkJcnBpcGVfcmVhZHkgPSBycGlwZV9hdmFpbF9pbmMocnBpcGUpOworCQlfX3dhX3hmZXJfYWJvcnQoeGZlcik7CisJCWRvbmUgPSBfX3dhX3hmZXJfaXNfZG9uZSh4ZmVyKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGZlci0+bG9jaywgZmxhZ3MpOworCQlpZiAoZG9uZSkKKwkJCXdhX3hmZXJfY29tcGxldGlvbih4ZmVyKTsKKwkJaWYgKHJwaXBlX3JlYWR5KQorCQkJd2FfeGZlcl9kZWxheWVkX3J1bihycGlwZSk7CisJfQorCWRfZm5lbmQoMywgTlVMTCwgIih1cmIgJXAgWyVkXSkgPSB2b2lkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKK30KKworLyoKKyAqIEhhbmRsZSBhbiBpbmNvbWluZyB0cmFuc2ZlciByZXN1bHQgYnVmZmVyCisgKgorICogR2l2ZW4gYSB0cmFuc2ZlciByZXN1bHQgYnVmZmVyLCBpdCBjb21wbGV0ZXMgdGhlIHRyYW5zZmVyIChwb3NzaWJseQorICogc2NoZWR1bGluZyBhbmQgYnVmZmVyIGluIHJlYWQpIGFuZCB0aGVuIHJlc3VibWl0cyB0aGUgRFRJIFVSQiBmb3IgYQorICogbmV3IHRyYW5zZmVyIHJlc3VsdCByZWFkLgorICoKKyAqCisgKiBUaGUgeGZlcl9yZXN1bHQgRFRJIFVSQiBzdGF0ZSBtYWNoaW5lCisgKgorICogU3RhdGVzOiBPRkYgfCBSWFIgKFJlYWQtWGZlci1SZXN1bHQpIHwgUkJJIChSZWFkLUJ1ZmZlci1JbikKKyAqCisgKiBXZSBzdGFydCBpbiBPRkYgbW9kZSwgdGhlIGZpcnN0IHhmZXJfcmVzdWx0IG5vdGlmaWNhdGlvbiBbdGhyb3VnaAorICogd2FfaGFuZGxlX25vdGlmX3hmZXIoKV0gbW92ZXMgdXMgdG8gUlhSIGJ5IHBvc3RpbmcgdGhlIERUSS1VUkIgdG8KKyAqIHJlYWQuCisgKgorICogV2UgcmVjZWl2ZSBhIGJ1ZmZlciAtLSBpZiBpdCBpcyBub3QgYSB4ZmVyX3Jlc3VsdCwgd2UgY29tcGxhaW4gYW5kCisgKiByZXBvc3QgdGhlIERUSS1VUkIuIElmIGl0IGlzIGEgeGZlcl9yZXN1bHQgdGhlbiBkbyB0aGUgeGZlciBzZWcKKyAqIHJlcXVlc3QgYWNjb3VudGluZy4gSWYgaXQgaXMgYW4gSU4gc2VnbWVudCwgd2UgbW92ZSB0byBSQkkgYW5kIHBvc3QKKyAqIGEgQlVGLUlOLVVSQiB0byB0aGUgcmlnaHQgYnVmZmVyLiBUaGUgQlVGLUlOLVVSQiBjYWxsYmFjayB3aWxsCisgKiByZXBvc3QgdGhlIERUSS1VUkIgYW5kIG1vdmUgdG8gUlhSIHN0YXRlLiBpZiB0aGVyZSB3YXMgbm8gSU4KKyAqIHNlZ21lbnQsIGl0IHdpbGwgcmVwb3N0IHRoZSBEVEktVVJCLgorICoKKyAqIFdlIGdvIGJhY2sgdG8gT0ZGIHdoZW4gd2UgZGV0ZWN0IGEgRU5PRU5UIG9yIEVTSFVURE9XTiAob3IgdG9vIG1hbnkKKyAqIGVycm9ycykgaW4gdGhlIFVSQnMuCisgKi8KK3N0YXRpYyB2b2lkIHdhX3hmZXJfcmVzdWx0X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB3YWhjICp3YSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2EtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCB3YV94ZmVyX3Jlc3VsdCAqeGZlcl9yZXN1bHQ7CisJdTMyIHhmZXJfaWQ7CisJc3RydWN0IHdhX3hmZXIgKnhmZXI7CisJdTggdXNiX3N0YXR1czsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoJXApXG4iLCB3YSk7CisJQlVHX09OKHdhLT5kdGlfdXJiICE9IHVyYik7CisJc3dpdGNoICh3YS0+ZHRpX3VyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBXZSBoYXZlIGEgeGZlciByZXN1bHQgYnVmZmVyOyBjaGVjayBpdCAqLworCQlkX3ByaW50ZigyLCBkZXYsICJEVEk6IHhmZXIgcmVzdWx0ICVkIGJ5dGVzIGF0ICVwXG4iLAorCQkJICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCWRfZHVtcCgzLCBkZXYsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlpZiAod2EtPmR0aV91cmItPmFjdHVhbF9sZW5ndGggIT0gc2l6ZW9mKCp4ZmVyX3Jlc3VsdCkpIHsKKwkJCWRldl9lcnIoZGV2LCAiRFRJIEVycm9yOiB4ZmVyIHJlc3VsdC0tYmFkIHNpemUgIgorCQkJCSJ4ZmVyIHJlc3VsdCAoJWQgYnl0ZXMgdnMgJXp1IG5lZWRlZClcbiIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBzaXplb2YoKnhmZXJfcmVzdWx0KSk7CisJCQlicmVhazsKKwkJfQorCQl4ZmVyX3Jlc3VsdCA9IHdhLT54ZmVyX3Jlc3VsdDsKKwkJaWYgKHhmZXJfcmVzdWx0LT5oZHIuYkxlbmd0aCAhPSBzaXplb2YoKnhmZXJfcmVzdWx0KSkgeworCQkJZGV2X2VycihkZXYsICJEVEkgRXJyb3I6IHhmZXIgcmVzdWx0LS0iCisJCQkJImJhZCBoZWFkZXIgbGVuZ3RoICV1XG4iLAorCQkJCXhmZXJfcmVzdWx0LT5oZHIuYkxlbmd0aCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoeGZlcl9yZXN1bHQtPmhkci5iTm90aWZ5VHlwZSAhPSBXQV9YRkVSX1JFU1VMVCkgeworCQkJZGV2X2VycihkZXYsICJEVEkgRXJyb3I6IHhmZXIgcmVzdWx0LS0iCisJCQkJImJhZCBoZWFkZXIgdHlwZSAweCUwMnhcbiIsCisJCQkJeGZlcl9yZXN1bHQtPmhkci5iTm90aWZ5VHlwZSk7CisJCQlicmVhazsKKwkJfQorCQl1c2Jfc3RhdHVzID0geGZlcl9yZXN1bHQtPmJUcmFuc2ZlclN0YXR1cyAmIDB4M2Y7CisJCWlmICh1c2Jfc3RhdHVzID09IFdBX1hGRVJfU1RBVFVTX0FCT1JURUQKKwkJICAgIHx8IHVzYl9zdGF0dXMgPT0gV0FfWEZFUl9TVEFUVVNfTk9UX0ZPVU5EKQorCQkJLyogdGFrZW4gY2FyZSBvZiBhbHJlYWR5ICovCisJCQlicmVhazsKKwkJeGZlcl9pZCA9IHhmZXJfcmVzdWx0LT5kd1RyYW5zZmVySUQ7CisJCXhmZXIgPSB3YV94ZmVyX2dldF9ieV9pZCh3YSwgeGZlcl9pZCk7CisJCWlmICh4ZmVyID09IE5VTEwpIHsKKwkJCS8qIEZJWE1FOiB0cmFuc2FjdGlvbiBtaWdodCBoYXZlIGJlZW4gY2FuY2VsbGVkICovCisJCQlkZXZfZXJyKGRldiwgIkRUSSBFcnJvcjogeGZlciByZXN1bHQtLSIKKwkJCQkidW5rbm93biB4ZmVyIDB4JTA4eCAoc3RhdHVzIDB4JTAyeClcbiIsCisJCQkJeGZlcl9pZCwgdXNiX3N0YXR1cyk7CisJCQlicmVhazsKKwkJfQorCQl3YV94ZmVyX3Jlc3VsdF9jaGV3KHdhLCB4ZmVyKTsKKwkJd2FfeGZlcl9wdXQoeGZlcik7CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoJCS8qICh3ZSBraWxsZWQgdGhlIFVSQikuLi5zbywgbm8gYnJvYWRjYXN0ICovCisJY2FzZSAtRVNIVVRET1dOOgkvKiBnb2luZyBhd2F5ISAqLworCQlkZXZfZGJnKGRldiwgIkRUSTogZ29pbmcgZG93biEgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBvdXQ7CisJZGVmYXVsdDoKKwkJLyogVW5rbm93biBlcnJvciAqLworCQlpZiAoZWRjX2luYygmd2EtPmR0aV9lZGMsIEVEQ19NQVhfRVJST1JTLAorCQkJICAgIEVEQ19FUlJPUl9USU1FRlJBTUUpKSB7CisJCQlkZXZfZXJyKGRldiwgIkRUSTogVVJCIG1heCBhY2NlcHRhYmxlIGVycm9ycyAiCisJCQkJImV4Y2VlZGVkLCByZXNldHRpbmcgZGV2aWNlXG4iKTsKKwkJCXdhX3Jlc2V0X2FsbCh3YSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJEVEk6IFVSQiBlcnJvciAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisJLyogUmVzdWJtaXQgdGhlIERUSSBVUkIgKi8KKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3YS0+ZHRpX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJEVEkgRXJyb3I6IENvdWxkIG5vdCBzdWJtaXQgRFRJIFVSQiAoJWQpLCAiCisJCQkicmVzZXR0aW5nXG4iLCByZXN1bHQpOworCQl3YV9yZXNldF9hbGwod2EpOworCX0KK291dDoKKwlkX2ZuZW5kKDMsIGRldiwgIiglcCkgPSB2b2lkXG4iLCB3YSk7CisJcmV0dXJuOworfQorCisvKgorICogVHJhbnNmZXIgY29tcGxldGUgbm90aWZpY2F0aW9uCisgKgorICogQ2FsbGVkIGZyb20gdGhlIG5vdGlmLmMgY29kZS4gV2UgZ2V0IGEgbm90aWZpY2F0aW9uIG9uIEVQMiBzYXlpbmcKKyAqIHRoYXQgc29tZSBlbmRwb2ludCBoYXMgc29tZSB0cmFuc2ZlciByZXN1bHQgZGF0YSBhdmFpbGFibGUuIFdlIGFyZQorICogYWJvdXQgdG8gcmVhZCBpdC4KKyAqCisgKiBUbyBzcGVlZCB1cCB0aGluZ3MsIHdlIGFsd2F5cyBoYXZlIGEgVVJCIHJlYWRpbmcgdGhlIERUSSBVUkI7IHdlCisgKiBkb24ndCByZWFsbHkgc2V0IGl0IHVwIGFuZCBzdGFydCBpdCB1bnRpbCB0aGUgZmlyc3QgeGZlciBjb21wbGV0ZQorICogbm90aWZpY2F0aW9uIGFycml2ZXMsIHdoaWNoIGlzIHdoYXQgd2UgZG8gaGVyZS4KKyAqCisgKiBGb2xsb3cgdXAgaW4gd2FfeGZlcl9yZXN1bHRfY2IoKSwgYXMgdGhhdCdzIHdoZXJlIHRoZSB3aG9sZSBzdGF0ZQorICogbWFjaGluZSBzdGFydHMuCisgKgorICogU28gaGVyZSB3ZSBqdXN0IGluaXRpYWxpemUgdGhlIERUSSBVUkIgZm9yIHJlYWRpbmcgdHJhbnNmZXIgcmVzdWx0CisgKiBub3RpZmljYXRpb25zIGFuZCBhbHNvIHRoZSBidWZmZXItaW4gVVJCLCBmb3IgcmVhZGluZyBidWZmZXJzLiBUaGVuCisgKiB3ZSBqdXN0IHN1Ym1pdCB0aGUgRFRJIFVSQi4KKyAqCisgKiBAd2Egc2hhbGwgYmUgcmVmZXJlbmNlZAorICovCit2b2lkIHdhX2hhbmRsZV9ub3RpZl94ZmVyKHN0cnVjdCB3YWhjICp3YSwgc3RydWN0IHdhX25vdGlmX2hkciAqbm90aWZfaGRyKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndhLT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3Qgd2Ffbm90aWZfeGZlciAqbm90aWZfeGZlcjsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmR0aV9lcGQgPSB3YS0+ZHRpX2VwZDsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoJXAsICVwKVxuIiwgd2EsIG5vdGlmX2hkcik7CisJbm90aWZfeGZlciA9IGNvbnRhaW5lcl9vZihub3RpZl9oZHIsIHN0cnVjdCB3YV9ub3RpZl94ZmVyLCBoZHIpOworCUJVR19PTihub3RpZl9oZHItPmJOb3RpZnlUeXBlICE9IFdBX05PVElGX1RSQU5TRkVSKTsKKworCWlmICgoMHg4MCB8IG5vdGlmX3hmZXItPmJFbmRwb2ludCkgIT0gZHRpX2VwZC0+YkVuZHBvaW50QWRkcmVzcykgeworCQkvKiBGSVhNRTogaGFyZGNvZGVkIGxpbWl0YXRpb24sIGFkYXB0ICovCisJCWRldl9lcnIoZGV2LCAiQlVHOiBEVEkgZXAgaXMgJXUsIG5vdCAldSAoaGFjayBtZSlcbiIsCisJCQlub3RpZl94ZmVyLT5iRW5kcG9pbnQsIGR0aV9lcGQtPmJFbmRwb2ludEFkZHJlc3MpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAod2EtPmR0aV91cmIgIT0gTlVMTCkJLyogRFRJIFVSQiBhbHJlYWR5IHN0YXJ0ZWQgKi8KKwkJZ290byBvdXQ7CisKKwl3YS0+ZHRpX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHdhLT5kdGlfdXJiID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSBEVEkgVVJCXG4iKTsKKwkJZ290byBlcnJvcl9kdGlfdXJiX2FsbG9jOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYigKKwkJd2EtPmR0aV91cmIsIHdhLT51c2JfZGV2LAorCQl1c2JfcmN2YnVsa3BpcGUod2EtPnVzYl9kZXYsIDB4ODAgfCBub3RpZl94ZmVyLT5iRW5kcG9pbnQpLAorCQl3YS0+eGZlcl9yZXN1bHQsIHdhLT54ZmVyX3Jlc3VsdF9zaXplLAorCQl3YV94ZmVyX3Jlc3VsdF9jYiwgd2EpOworCisJd2EtPmJ1Zl9pbl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICh3YS0+YnVmX2luX3VyYiA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgQlVGLUlOIFVSQlxuIik7CisJCWdvdG8gZXJyb3JfYnVmX2luX3VyYl9hbGxvYzsKKwl9CisJdXNiX2ZpbGxfYnVsa191cmIoCisJCXdhLT5idWZfaW5fdXJiLCB3YS0+dXNiX2RldiwKKwkJdXNiX3JjdmJ1bGtwaXBlKHdhLT51c2JfZGV2LCAweDgwIHwgbm90aWZfeGZlci0+YkVuZHBvaW50KSwKKwkJTlVMTCwgMCwgd2FfYnVmX2luX2NiLCB3YSk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIod2EtPmR0aV91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRFRJIEVycm9yOiBDb3VsZCBub3Qgc3VibWl0IERUSSBVUkIgKCVkKSwgIgorCQkJInJlc2V0dGluZ1xuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9kdGlfdXJiX3N1Ym1pdDsKKwl9CitvdXQ6CisJZF9mbmVuZCg0LCBkZXYsICIoJXAsICVwKSA9IHZvaWRcbiIsIHdhLCBub3RpZl9oZHIpOworCXJldHVybjsKKworZXJyb3JfZHRpX3VyYl9zdWJtaXQ6CisJdXNiX3B1dF91cmIod2EtPmJ1Zl9pbl91cmIpOworZXJyb3JfYnVmX2luX3VyYl9hbGxvYzoKKwl1c2JfcHV0X3VyYih3YS0+ZHRpX3VyYik7CisJd2EtPmR0aV91cmIgPSBOVUxMOworZXJyb3JfZHRpX3VyYl9hbGxvYzoKK2Vycm9yOgorCXdhX3Jlc2V0X2FsbCh3YSk7CisJZF9mbmVuZCg0LCBkZXYsICIoJXAsICVwKSA9IHZvaWRcbiIsIHdhLCBub3RpZl9oZHIpOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd3VzYmhjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNjNhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5jCkBAIC0wLDAgKzEsNDE4IEBACisvKgorICogV2lyZWxlc3MgVVNCIEhvc3QgQ29udHJvbGxlcgorICogc3lzZnMgZ2x1ZSwgd3VzYmNvcmUgbW9kdWxlIHN1cHBvcnQgYW5kIGxpZmUgY3ljbGUgbWFuYWdlbWVudAorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIENyZWF0aW9uL2Rlc3RydWN0aW9uIG9mIHd1c2JoYyBpcyBzcGxpdCBpbiB0d28gcGFydHM7IHRoYXQgdGhhdAorICogZG9lc24ndCByZXF1aXJlIHRoZSBIQ0QgdG8gYmUgYWRkZWQgKHd1c2JoY197Y3JlYXRlLGRlc3Ryb3l9KSBhbmQKKyAqIHRoZSBvbmUgdGhhdCByZXF1aXJlcyAocGhhc2UgQiwgd3VzYmhjX2Jfe2NyZWF0ZSxkZXN0cm95fSkuCisgKgorICogVGhpcyBpcyBzbyBiZWNhdXNlIHVzYl9hZGRfaGNkKCkgd2lsbCBzdGFydCB0aGUgSEMsIGFuZCB0aHVzLCBhbGwKKyAqIHRoZSBIQyBzcGVjaWZpYyBzdHVmZiBoYXMgdG8gYmUgYWxyZWFkeSBpbml0aWFsaWF6ZWQgKGxpa2Ugc3lzZnMKKyAqIHRoaW5naWVzKS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgInd1c2JoYy5oIgorCisvKioKKyAqIEV4dHJhY3QgdGhlIHd1c2JoYyB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgVVNCIEhvc3QgQ29udHJvbGxlciBjbGFzcyBkZXZpY2UKKyAqCisgKiBXQVJOSU5HISBBcHBseSBvbmx5IGlmIEBkZXYgaXMgdGhhdCBvZiBhCisgKiAgICAgICAgICB3dXNiaGMudXNiX2hjZC5zZWxmLT5jbGFzc19kZXY7IG90aGVyd2lzZSwgeW91IGxvb3NlLgorICovCitzdGF0aWMgc3RydWN0IHd1c2JoYyAqdXNiaGNfZGV2X3RvX3d1c2JoYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9idXMgKnVzYl9idXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqdXNiX2hjZCA9IGJ1c190b19oY2QodXNiX2J1cyk7CisJcmV0dXJuIHVzYl9oY2RfdG9fd3VzYmhjKHVzYl9oY2QpOworfQorCisvKgorICogU2hvdyAmIHN0b3JlIHRoZSBjdXJyZW50IFdVU0IgdHJ1c3QgdGltZW91dAorICoKKyAqIFdlIGRvbid0IGRvIGxvY2tpbmctLWl0IGlzIGFuICdhdG9taWMnIHZhbHVlLgorICoKKyAqIFRoZSB1bml0cyB0aGF0IHdlIHN0b3JlL3Nob3cgYXJlIGFsd2F5cyBNSUxMSVNFQ09ORFMuIEhvd2V2ZXIsIHRoZQorICogdmFsdWUgb2YgdHJ1c3RfdGltZW91dCBpcyBqaWZmaWVzLgorICovCitzdGF0aWMgc3NpemVfdCB3dXNiX3RydXN0X3RpbWVvdXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiaGNfZGV2X3RvX3d1c2JoYyhkZXYpOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB3dXNiaGMtPnRydXN0X3RpbWVvdXQpOworfQorCitzdGF0aWMgc3NpemVfdCB3dXNiX3RydXN0X3RpbWVvdXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPSB1c2JoY19kZXZfdG9fd3VzYmhjKGRldik7CisJc3NpemVfdCByZXN1bHQgPSAtRU5PU1lTOworCXVuc2lnbmVkIHRydXN0X3RpbWVvdXQ7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmdHJ1c3RfdGltZW91dCk7CisJaWYgKHJlc3VsdCAhPSAxKSB7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwkvKiBGSVhNRTogbWF5YmUgd2Ugc2hvdWxkIGNoZWNrIGZvciByYW5nZSB2YWxpZGl0eT8gKi8KKwl3dXNiaGMtPnRydXN0X3RpbWVvdXQgPSB0cnVzdF90aW1lb3V0OworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnd1c2JoYy0+a2VlcF9hbGl2ZV90aW1lcik7CisJZmx1c2hfd29ya3F1ZXVlKHd1c2JkKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsod3VzYmQsICZ3dXNiaGMtPmtlZXBfYWxpdmVfdGltZXIsCisJCQkgICAodHJ1c3RfdGltZW91dCAqIENPTkZJR19IWikvMTAwMC8yKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IHNpemU7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIod3VzYl90cnVzdF90aW1lb3V0LCAwNjQ0LCB3dXNiX3RydXN0X3RpbWVvdXRfc2hvdywKKwkJCQkJICAgICB3dXNiX3RydXN0X3RpbWVvdXRfc3RvcmUpOworCisvKgorICogU2hvdyAmIHN0b3JlIHRoZSBjdXJyZW50IFdVU0IgQ0hJRAorICovCitzdGF0aWMgc3NpemVfdCB3dXNiX2NoaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYmhjX2Rldl90b193dXNiaGMoZGV2KTsKKwlzc2l6ZV90IHJlc3VsdCA9IDA7CisKKwlpZiAod3VzYmhjLT53dWllX2hvc3RfaW5mbyAhPSBOVUxMKQorCQlyZXN1bHQgKz0gY2toZGlkX3ByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJCQkJJnd1c2JoYy0+d3VpZV9ob3N0X2luZm8tPkNISUQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTdG9yZSBhIG5ldyBDSElECisgKgorICogVGhpcyB3aWxsIChGSVhNRSkgdHJpZ2dlciBtYW55IGNoYW5nZXMuCisgKgorICogLSBTZW5kIGFuIGFsbCB6ZXJvcyBDSElEIGFuZCBpdCB3aWxsIHN0b3AgdGhlIGNvbnRyb2xsZXIKKyAqIC0gU2VuZCBhIG5vbi16ZXJvIENISUQgYW5kIGl0IHdpbGwgc3RhcnQgaXQKKyAqICAgKHVubGVzcyBpdCB3YXMgc3RhcnRlZCwgaXQgd2lsbCBqdXN0IGNoYW5nZSB0aGUgQ0hJRCwKKyAqICAgZGljb25uZWN0aW5nIGFsbCBkZXZpY2VzIGZpcnN0KS4KKyAqCisgKiBTbyBmaXJzdCB3ZSBzY2FuIHRoZSBNTUMgd2UgYXJlIHNlbnQgYW5kIHRoZW4gd2UgYWN0IG9uIGl0LiAgV2UKKyAqIHJlYWQgaXQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHdlIHByaW50IGl0LCBhbiBBU0NJSSBzdHJpbmcgb2YgMTYKKyAqIGhleCBieXRlcy4KKyAqCisgKiBTZWUgd3VzYmhjX2NoaWRfc2V0KCkgZm9yIG1vcmUgaW5mby4KKyAqLworc3RhdGljIHNzaXplX3Qgd3VzYl9jaGlkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IHVzYmhjX2Rldl90b193dXNiaGMoZGV2KTsKKwlzdHJ1Y3Qgd3VzYl9ja2hkaWQgY2hpZDsKKwlzc2l6ZV90IHJlc3VsdDsKKworCXJlc3VsdCA9IHNzY2FuZihidWYsCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICIKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4XG4iLAorCQkJJmNoaWQuZGF0YVswXSAsICZjaGlkLmRhdGFbMV0gLAorCQkJJmNoaWQuZGF0YVsyXSAsICZjaGlkLmRhdGFbM10gLAorCQkJJmNoaWQuZGF0YVs0XSAsICZjaGlkLmRhdGFbNV0gLAorCQkJJmNoaWQuZGF0YVs2XSAsICZjaGlkLmRhdGFbN10gLAorCQkJJmNoaWQuZGF0YVs4XSAsICZjaGlkLmRhdGFbOV0gLAorCQkJJmNoaWQuZGF0YVsxMF0sICZjaGlkLmRhdGFbMTFdLAorCQkJJmNoaWQuZGF0YVsxMl0sICZjaGlkLmRhdGFbMTNdLAorCQkJJmNoaWQuZGF0YVsxNF0sICZjaGlkLmRhdGFbMTVdKTsKKwlpZiAocmVzdWx0ICE9IDE2KSB7CisJCWRldl9lcnIoZGV2LCAiVW5yZWNvZ25pemVkIENISUQgKG5lZWQgMTYgOC1iaXQgaGV4IGRpZ2l0cyk6ICIKKwkJCSIlZFxuIiwgKGludClyZXN1bHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmVzdWx0ID0gd3VzYmhjX2NoaWRfc2V0KHd1c2JoYywgJmNoaWQpOworCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogc2l6ZTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih3dXNiX2NoaWQsIDA2NDQsIHd1c2JfY2hpZF9zaG93LCB3dXNiX2NoaWRfc3RvcmUpOworCisvKiBHcm91cCBhbGwgdGhlIFdVU0JIQyBhdHRyaWJ1dGVzICovCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqd3VzYmhjX2F0dHJzW10gPSB7CisJCSZkZXZfYXR0cl93dXNiX3RydXN0X3RpbWVvdXQuYXR0ciwKKwkJJmRldl9hdHRyX3d1c2JfY2hpZC5hdHRyLAorCQlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgd3VzYmhjX2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkvKiB3ZSB3YW50IHRoZW0gaW4gdGhlIHNhbWUgZGlyZWN0b3J5ICovCisJLmF0dHJzID0gd3VzYmhjX2F0dHJzLAorfTsKKworLyoKKyAqIENyZWF0ZSBhIHd1c2JoYyBpbnN0YW5jZQorICoKKyAqIE5PVEVzOgorICoKKyAqICAtIGFzc3VtZXMgKnd1c2JoYyBoYXMgYmVlbiB6ZXJvZWQgYW5kIHd1c2JoYy0+dXNiX2hjZCBoYXMgYmVlbgorICogICAgaW5pdGlhbGl6ZWQgYnV0IG5vdCBhZGRlZC4KKyAqCisgKiAgLSBmaWxsIG91dCBwb3J0c19tYXgsIG1tY2llc19tYXggYW5kIG1tY2llX3thZGQscm19IGJlZm9yZSBjYWxsaW5nLgorICoKKyAqICAtIGZpbGwgb3V0IHd1c2JoYy0+dXdiX3JjIGFuZCByZWZjb3VudCBpdCBiZWZvcmUgY2FsbGluZworICogIC0gZmlsbCBvdXQgdGhlIHd1c2JoYy0+c2VjX21vZGVzIGFycmF5CisgKi8KK2ludCB3dXNiaGNfY3JlYXRlKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCXd1c2JoYy0+dHJ1c3RfdGltZW91dCA9IFdVU0JfVFJVU1RfVElNRU9VVF9NUzsKKwltdXRleF9pbml0KCZ3dXNiaGMtPm11dGV4KTsKKwlyZXN1bHQgPSB3dXNiaGNfbW1jaWVfY3JlYXRlKHd1c2JoYyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfbW1jaWVfY3JlYXRlOworCXJlc3VsdCA9IHd1c2JoY19kZXZjb25uZWN0X2NyZWF0ZSh3dXNiaGMpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2RldmNvbm5lY3RfY3JlYXRlOworCXJlc3VsdCA9IHd1c2JoY19yaF9jcmVhdGUod3VzYmhjKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9yaF9jcmVhdGU7CisJcmVzdWx0ID0gd3VzYmhjX3NlY19jcmVhdGUod3VzYmhjKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9zZWNfY3JlYXRlOworCXJldHVybiAwOworCitlcnJvcl9zZWNfY3JlYXRlOgorCXd1c2JoY19yaF9kZXN0cm95KHd1c2JoYyk7CitlcnJvcl9yaF9jcmVhdGU6CisJd3VzYmhjX2RldmNvbm5lY3RfZGVzdHJveSh3dXNiaGMpOworZXJyb3JfZGV2Y29ubmVjdF9jcmVhdGU6CisJd3VzYmhjX21tY2llX2Rlc3Ryb3kod3VzYmhjKTsKK2Vycm9yX21tY2llX2NyZWF0ZToKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYmhjX2NyZWF0ZSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGtvYmplY3QgKnd1c2JoY19rb2JqKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlyZXR1cm4gJnd1c2JoYy0+dXNiX2hjZC5zZWxmLmNvbnRyb2xsZXItPmtvYmo7Cit9CisKKy8qCisgKiBQaGFzZSBCIG9mIGEgd3VzYmhjIGluc3RhbmNlIGNyZWF0aW9uCisgKgorICogQ3JlYXRlcyBmaWVsZHMgdGhhdCBkZXBlbmQgb24gd3VzYmhjLT51c2JfaGNkIGhhdmluZyBiZWVuCisgKiBhZGRlZC4gVGhpcyBpcyB3aGVyZSB3ZSBjcmVhdGUgdGhlIHN5c2ZzIGZpbGVzIGluCisgKiAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0WC8uCisgKgorICogTk9URTogQXNzdW1lcyB3dXNiaGMtPnVzYl9oY2QgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZCBieSB0aGUgdXBwZXIKKyAqICAgICAgIGxheWVyIChod2FoYyBvciB3aGNpKQorICovCitpbnQgd3VzYmhjX2JfY3JlYXRlKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3dXNiaGMtPnVzYl9oY2Quc2VsZi5jb250cm9sbGVyOworCisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKHd1c2JoY19rb2JqKHd1c2JoYyksICZ3dXNiaGNfYXR0cl9ncm91cCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgcmVnaXN0ZXIgV1VTQkhDIGF0dHJpYnV0ZXM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX2NyZWF0ZV9hdHRyX2dyb3VwOworCX0KKworCXJlc3VsdCA9IHd1c2JoY19wYWxfcmVnaXN0ZXIod3VzYmhjKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9wYWxfcmVnaXN0ZXI7CisJcmV0dXJuIDA7CisKK2Vycm9yX3BhbF9yZWdpc3RlcjoKKwlzeXNmc19yZW1vdmVfZ3JvdXAod3VzYmhjX2tvYmood3VzYmhjKSwgJnd1c2JoY19hdHRyX2dyb3VwKTsKK2Vycm9yX2NyZWF0ZV9hdHRyX2dyb3VwOgorCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3dXNiaGNfYl9jcmVhdGUpOworCit2b2lkIHd1c2JoY19iX2Rlc3Ryb3koc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCXd1c2JoY19wYWxfdW5yZWdpc3Rlcih3dXNiaGMpOworCXN5c2ZzX3JlbW92ZV9ncm91cCh3dXNiaGNfa29iaih3dXNiaGMpLCAmd3VzYmhjX2F0dHJfZ3JvdXApOworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYmhjX2JfZGVzdHJveSk7CisKK3ZvaWQgd3VzYmhjX2Rlc3Ryb3koc3RydWN0IHd1c2JoYyAqd3VzYmhjKQoreworCXd1c2JoY19zZWNfZGVzdHJveSh3dXNiaGMpOworCXd1c2JoY19yaF9kZXN0cm95KHd1c2JoYyk7CisJd3VzYmhjX2RldmNvbm5lY3RfZGVzdHJveSh3dXNiaGMpOworCXd1c2JoY19tbWNpZV9kZXN0cm95KHd1c2JoYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3dXNiaGNfZGVzdHJveSk7CisKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3dXNiZDsKK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JkKTsKKworLyoKKyAqIFdVU0IgQ2x1c3RlciBJRCBhbGxvY2F0aW9uIG1hcAorICoKKyAqIEVhY2ggV1VTQiBidXMgaW4gYSBjaGFubmVsIGlzIGlkZW50aWZpZWQgd2l0aCBhIENsdXN0ZXIgSWQgaW4gdGhlCisgKiB1bmF1dGggYWRkcmVzcyBwYWNlIChXVVNCMS4wWzQuM10pLiBXZSB0YWtlIHRoZSByYW5nZSAweGUwIHRvIDB4ZmYKKyAqICh0aGF0J3Mgc3BhY2UgZm9yIDMxIFdVU0IgY29udHJvbGxlcnMsIGFzIDB4ZmYgY2FuJ3QgYmUgdGFrZW4pLiBXZQorICogc3RhcnQgdGFraW5nIGZyb20gMHhmZiwgMHhmZSwgMHhmZC4uLiAoaGVuY2UgdGhlICs9IG9yIC09IDB4ZmYpLgorICoKKyAqIEZvciBlYWNoIG9uZSB3ZSB0YWtlbiwgd2UgcGluIGl0IGluIHRoZSBiaXRhcAorICovCisjZGVmaW5lIENMVVNURVJfSURTIDMyCitzdGF0aWMgREVDTEFSRV9CSVRNQVAod3VzYl9jbHVzdGVyX2lkX3RhYmxlLCBDTFVTVEVSX0lEUyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHd1c2JfY2x1c3Rlcl9pZHNfbG9jayk7CisKKy8qCisgKiBHZXQgYSBXVVNCIENsdXN0ZXIgSUQKKyAqCisgKiBOZWVkIHRvIHJlbGVhc2Ugd2l0aCB3dXNiX2NsdXN0ZXJfaWRfcHV0KCkgd2hlbiBkb25lIHcvIGl0LgorICovCisvKiBGSVhNRTogY29vcmRpbmF0ZSB3aXRoIHRoZSBjaG9vc2VfYWRkcmVzKCkgZnJvbSB0aGUgVVNCIHN0YWNrICovCisvKiB3ZSB3YW50IHRvIGxlYXZlIHRoZSB0b3Agb2YgdGhlIDEyOCByYW5nZSBmb3IgY2x1c3RlciBhZGRyZXNzZXMgYW5kCisgKiB0aGUgYm90dG9tIGZvciBkZXZpY2UgYWRkcmVzc2VzIChhcyB3ZSBtYXAgdGhlbSBvbmUgb24gb25lIHdpdGgKKyAqIHBvcnRzKS4gKi8KK3U4IHd1c2JfY2x1c3Rlcl9pZF9nZXQodm9pZCkKK3sKKwl1OCBpZDsKKwlzcGluX2xvY2soJnd1c2JfY2x1c3Rlcl9pZHNfbG9jayk7CisJaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHd1c2JfY2x1c3Rlcl9pZF90YWJsZSwgQ0xVU1RFUl9JRFMpOworCWlmIChpZCA+IENMVVNURVJfSURTKSB7CisJCWlkID0gMDsKKwkJZ290byBvdXQ7CisJfQorCXNldF9iaXQoaWQsIHd1c2JfY2x1c3Rlcl9pZF90YWJsZSk7CisJaWQgPSAodTgpIDB4ZmYgLSBpZDsKK291dDoKKwlzcGluX3VubG9jaygmd3VzYl9jbHVzdGVyX2lkc19sb2NrKTsKKwlyZXR1cm4gaWQ7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHd1c2JfY2x1c3Rlcl9pZF9nZXQpOworCisvKgorICogUmVsZWFzZSBhIFdVU0IgQ2x1c3RlciBJRAorICoKKyAqIE9idGFpbmVkIGl0IHdpdGggd3VzYl9jbHVzdGVyX2lkX2dldCgpCisgKi8KK3ZvaWQgd3VzYl9jbHVzdGVyX2lkX3B1dCh1OCBpZCkKK3sKKwlpZCA9IDB4ZmYgLSBpZDsKKwlCVUdfT04oaWQgPj0gQ0xVU1RFUl9JRFMpOworCXNwaW5fbG9jaygmd3VzYl9jbHVzdGVyX2lkc19sb2NrKTsKKwlXQVJOX09OKCF0ZXN0X2JpdChpZCwgd3VzYl9jbHVzdGVyX2lkX3RhYmxlKSk7CisJY2xlYXJfYml0KGlkLCB3dXNiX2NsdXN0ZXJfaWRfdGFibGUpOworCXNwaW5fdW5sb2NrKCZ3dXNiX2NsdXN0ZXJfaWRzX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYl9jbHVzdGVyX2lkX3B1dCk7CisKKy8qKgorICogd3VzYmhjX2dpdmViYWNrX3VyYiAtIHJldHVybiBhbiBVUkIgdG8gdGhlIFVTQiBjb3JlCisgKiBAd3VzYmhjOiB0aGUgaG9zdCBjb250cm9sbGVyIHRoZSBVUkIgaXMgZnJvbS4KKyAqIEB1cmI6ICAgIHRoZSBVUkIuCisgKiBAc3RhdHVzOiB0aGUgVVJCJ3Mgc3RhdHVzLgorICoKKyAqIFJldHVybiBhbiBVUkIgdG8gdGhlIFVTQiBjb3JlIGRvaW5nIHNvbWUgYWRkaXRpb25hbCBXVVNCIHNwZWNpZmljCisgKiBwcm9jZXNzaW5nLgorICoKKyAqICAtIEFmdGVyIGEgc3VjY2Vzc2Z1bCB0cmFuc2ZlciwgdXBkYXRlIHRoZSB0cnVzdCB0aW1lb3V0IHRpbWVzdGFtcAorICogICAgZm9yIHRoZSBXVVNCIGRldmljZS4KKyAqCisgKiAgLSBbV1VTQl0gc2VjdGlvbnMgNC4xMyBhbmQgNy41LjEgc3BlY2lmaWVzIHRoZSBzdG9wIHJldHJhc21pdHRpb24KKyAqICAgIGNvbmRpdGlvbiBmb3IgdGhlIFdDT05ORUNUQUNLX0lFIGlzIHRoYXQgdGhlIGhvc3QgaGFzIG9ic2VydmVkCisgKiAgICB0aGUgYXNzb2NpYXRlZCBkZXZpY2UgcmVzcG9uZGluZyB0byBhIGNvbnRyb2wgdHJhbnNmZXIuCisgKi8KK3ZvaWQgd3VzYmhjX2dpdmViYWNrX3VyYihzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2ID0gX193dXNiX2Rldl9nZXRfYnlfdXNiX2Rldih3dXNiaGMsIHVyYi0+ZGV2KTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQl3dXNiX2Rldi0+ZW50cnlfdHMgPSBqaWZmaWVzOworCisJCS8qIHd1c2JoY19kZXZjb25uZWN0X2Fja2VkKCkgY2FuJ3QgYmUgY2FsbGVkIGZyb20gZnJvbQorCQkgICBhdG9taWMgY29udGV4dCBzbyBkZWZlciBpdCB0byBhIHdvcmsgcXVldWUuICovCisJCWlmICghbGlzdF9lbXB0eSgmd3VzYl9kZXYtPmNhY2tfbm9kZSkpCisJCQlxdWV1ZV93b3JrKHd1c2JkLCAmd3VzYl9kZXYtPmRldmNvbm5lY3RfYWNrZWRfd29yayk7CisJfQorCisJdXNiX2hjZF9naXZlYmFja191cmIoJnd1c2JoYy0+dXNiX2hjZCwgdXJiLCBzdGF0dXMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod3VzYmhjX2dpdmViYWNrX3VyYik7CisKKy8qKgorICogd3VzYmhjX3Jlc2V0X2FsbCAtIHJlc2V0IHRoZSBIQyBoYXJkd2FyZQorICogQHd1c2JoYzogdGhlIGhvc3QgY29udHJvbGxlciB0byByZXNldC4KKyAqCisgKiBSZXF1ZXN0IGEgZnVsbCBoYXJkd2FyZSByZXNldCBvZiB0aGUgY2hpcC4gIFRoaXMgd2lsbCBhbHNvIHJlc2V0CisgKiB0aGUgcmFkaW8gY29udHJvbGxlciBhbmQgYW55IG90aGVyIFBBTHMuCisgKi8KK3ZvaWQgd3VzYmhjX3Jlc2V0X2FsbChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJdXdiX3JjX3Jlc2V0X2FsbCh3dXNiaGMtPnV3Yl9yYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3dXNiaGNfcmVzZXRfYWxsKTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB3dXNiX3VzYl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHd1c2JfdXNiX25jYiwKKwkucHJpb3JpdHkgPSBJTlRfTUFYCS8qIE5lZWQgdG8gYmUgY2FsbGVkIGZpcnN0IG9mIGFsbCAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgd3VzYmNvcmVfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisJcmVzdWx0ID0gd3VzYl9jcnlwdG9faW5pdCgpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2NyeXB0b19pbml0OworCS8qIFdRIGlzIHNpbmdsZXRocmVhZCBiZWNhdXNlIHdlIG5lZWQgdG8gc2VyaWFsaXplIG5vdGlmaWNhdGlvbnMgKi8KKwl3dXNiZCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJ3dXNiZCIpOworCWlmICh3dXNiZCA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiAiV1VTQi1jb3JlOiBDYW5ub3QgY3JlYXRlIHd1c2JkIHdvcmtxdWV1ZVxuIik7CisJCWdvdG8gZXJyb3Jfd3VzYmRfY3JlYXRlOworCX0KKwl1c2JfcmVnaXN0ZXJfbm90aWZ5KCZ3dXNiX3VzYl9ub3RpZmllcik7CisJYml0bWFwX3plcm8od3VzYl9jbHVzdGVyX2lkX3RhYmxlLCBDTFVTVEVSX0lEUyk7CisJc2V0X2JpdCgwLCB3dXNiX2NsdXN0ZXJfaWRfdGFibGUpOwkvKiByZXNlcnZlIENsdXN0ZXIgSUQgMHhmZiAqLworCXJldHVybiAwOworCitlcnJvcl93dXNiZF9jcmVhdGU6CisJd3VzYl9jcnlwdG9fZXhpdCgpOworZXJyb3JfY3J5cHRvX2luaXQ6CisJcmV0dXJuIHJlc3VsdDsKKworfQorbW9kdWxlX2luaXQod3VzYmNvcmVfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3dXNiY29yZV9leGl0KHZvaWQpCit7CisJY2xlYXJfYml0KDAsIHd1c2JfY2x1c3Rlcl9pZF90YWJsZSk7CisJaWYgKCFiaXRtYXBfZW1wdHkod3VzYl9jbHVzdGVyX2lkX3RhYmxlLCBDTFVTVEVSX0lEUykpIHsKKwkJY2hhciBidWZbMjU2XTsKKwkJYml0bWFwX3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCB3dXNiX2NsdXN0ZXJfaWRfdGFibGUsCisJCQkJIENMVVNURVJfSURTKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IFdVU0IgQ2x1c3RlciBJRHMgbm90IHJlbGVhc2VkICIKKwkJICAgICAgICJvbiBleGl0OiAlc1xuIiwgYnVmKTsKKwkJV0FSTl9PTigxKTsKKwl9CisJdXNiX3VucmVnaXN0ZXJfbm90aWZ5KCZ3dXNiX3VzYl9ub3RpZmllcik7CisJZGVzdHJveV93b3JrcXVldWUod3VzYmQpOworCXd1c2JfY3J5cHRvX2V4aXQoKTsKK30KK21vZHVsZV9leGl0KHd1c2Jjb3JlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXaXJlbGVzcyBVU0IgY29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd3VzYmhjLmggYi9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMxMzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd3VzYmhjLmgKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBXaXJlbGVzcyBVU0IgSG9zdCBDb250cm9sbGVyCisgKiBDb21tb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIFdIQ0kgYW5kIEhXQSBXVVNCLUhDIGRyaXZlcnMKKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHBhcnRzIGNvbW1vbiB0byBhbGwgV2lyZWxlc3MgVVNCIEhvc3QKKyAqIENvbnRyb2xsZXJzIChzdHJ1Y3Qgd3VzYmhjLCBlbWJlZGRpbmcgYSBzdHJ1Y3QgdXNiX2hjZCkgYW5kIGlzIHVzZWQKKyAqIGJ5OgorICoKKyAqICAgLSBod2FoYzogSFdBLCBVU0ItZG9uZ2xlIHRoYXQgaW1wbGVtZW50cyBhIFdpcmVsZXNzIFVTQiBob3N0CisgKiAgICAgY29udHJvbGxlciwgKFdpcmVsZXNzIFVTQiAxLjAgSG9zdC1XaXJlLUFkYXB0ZXIgc3BlY2lmaWNhdGlvbikuCisgKgorICogICAtIHdoY2k6IFdIQ0ksIGEgUENJIGNhcmQgd2l0aCBhIHdpcmVsZXNzIGhvc3QgY29udHJvbGxlcgorICogICAgIChXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIDEuMCBzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDaGVjayBvdXQgdGhlIERlc2lnbi1vdmVydmlldy50eHQgZmlsZSBpbiB0aGUgc291cmNlIGRvY3VtZW50YXRpb24KKyAqIGZvciBvdGhlciBkZXRhaWxzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBNYWluIGJsb2NrczoKKyAqCisgKiAgcmggICAgICAgICBSb290IEh1YiBlbXVsYXRpb24gKHBhcnQgb2YgdGhlIEhDRCBnbHVlKQorICoKKyAqICBkZXZjb25uZWN0IEhhbmRsZSBhbGwgdGhlIGlzc3VlcyByZWxhdGVkIHRvIGRldmljZSBjb25uZWN0aW9uLAorICogICAgICAgICAgICAgYXV0aGVudGljYXRpb24sIGRpc2Nvbm5lY3Rpb24sIHRpbWVvdXQsIHJlc2V0aW5nLAorICogICAgICAgICAgICAga2VlcGFsaXZlcywgZXRjLgorICoKKyAqICBtbWMgICAgICAgIE1NQyBJRSBicm9hZGNhc3RpbmcgaGFuZGxpbmcKKyAqCisgKiBBIGhvc3QgY29udHJvbGxlciBkcml2ZXIganVzdCBpbml0aWFsaXplcyBpdHMgc3R1ZmYgYW5kIGFzIHBhcnQgb2YKKyAqIHRoYXQsIGNyZWF0ZXMgYSAnc3RydWN0IHd1c2JoYycgaW5zdGFuY2UgdGhhdCBoYW5kbGVzIGFsbCB0aGUKKyAqIGNvbW1vbiBXVVNCIG1lY2hhbmlzbXMuIExpbmtzIGluIHRoZSBmdW5jdGlvbiBvcHMgdGhhdCBhcmUgc3BlY2lmaWMKKyAqIHRvIGl0IGFuZCB0aGVuIHJlZ2lzdGVycyB0aGUgaG9zdCBjb250cm9sbGVyLiBSZWFkeSB0byBydW4uCisgKi8KKworI2lmbmRlZiBfX1dVU0JIQ19IX18KKyNkZWZpbmUgX19XVVNCSENfSF9fCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisvKiBGSVhNRTogWWVzLCBJIGtub3c6IEJBRC0taXQncyBub3QgbXkgZmF1bHQgdGhlIFVTQiBIQyBpZmFjZSBpcyBub3QKKyAqICAgICAgICBwdWJsaWMgKi8KKyNpbmNsdWRlIDxsaW51eC8uLi8uLi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi93dXNiLmg+CisKKworLyoqCisgKiBXaXJlbGVzcyBVU0IgZGV2aWNlCisgKgorICogRGVzY3JpYmUgYSBXVVNCIGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIGNsdXN0ZXIuIFRoaXMgc3RydWN0CisgKiBiZWxvbmdzIHRvIHRoZSAnc3RydWN0IHd1c2JfcG9ydCcgaXQgaXMgYXR0YWNoZWQgdG8gYW5kIGl0IGlzCisgKiByZXNwb25zaWJsZSBmb3IgcHV0dGluZyBhbmQgY2xlYXJpbmcgdGhlIHBvaW50ZXIgdG8gaXQuCisgKgorICogTm90ZSB0aGlzICJjb21wbGVtZW50cyIgdGhlICdzdHJ1Y3QgdXNiX2RldmljZScgdGhhdCB0aGUgdXNiX2hjZAorICoga2VlcHMgZm9yIGVhY2ggY29ubmVjdGVkIFVTQiBkZXZpY2UuIEhvd2V2ZXIsIGl0IGV4dGVuZHMgc29tZQorICogaW5mb3JtYXRpb24gdGhhdCBpcyBub3QgYXZhaWxhYmxlICh0aGVyZSBpcyBubyBoY3ByaXYgcHRyIGluIGl0ISkKKyAqICphbmQqIG1vc3QgaW1wb3J0YW50bHksIGl0J3MgbGlmZSBjeWNsZSBpcyBkaWZmZXJlbnQuIEl0IGlzIGNyZWF0ZWQKKyAqIGFzIHNvb24gYXMgd2UgZ2V0IGEgRE5fQ29ubmVjdCAoY29ubmVjdCByZXF1ZXN0IG5vdGlmaWNhdGlvbikgZnJvbQorICogdGhlIGRldmljZSB0aHJvdWdoIHRoZSBXVVNCIGhvc3QgY29udHJvbGxlcjsgdGhlIFVTQiBzdGFjayBkb2Vzbid0CisgKiBjcmVhdGUgdGhlIGRldmljZSB1bnRpbCB3ZSBhdXRoZW50aWNhdGUgaXQuIEZJWE1FOiB0aGlzIHdpbGwKKyAqIGNoYW5nZS4KKyAqCisgKiBAYm9zOiAgICBUaGlzIGlzIGFsbG9jYXRlZCB3aGVuIHRoZSBCT1MgZGVzY3JpcHRvcnMgYXJlIHJlYWQgZnJvbQorICogICAgICAgICAgdGhlIGRldmljZSBhbmQgZnJlZWQgdXBvbiB0aGUgd3VzYl9kZXYgc3RydWN0IGR5aW5nLgorICogQHd1c2JfY2FwX2Rlc2NyOiBwb2ludHMgaW50byBAYm9zLCBhbmQgaGFzIGJlZW4gdmVyaWZpZWQgdG8gYmUgc2l6ZQorICogICAgICAgICAgICAgICAgICBzYWZlLgorICovCitzdHJ1Y3Qgd3VzYl9kZXYgeworCXN0cnVjdCBrcmVmIHJlZmNudDsKKwlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGM7CisJc3RydWN0IGxpc3RfaGVhZCBjYWNrX25vZGU7CS8qIENvbm5lY3QtQWNrIGxpc3QgKi8KKwl1OCBwb3J0X2lkeDsKKwl1OCBhZGRyOworCXU4IGJlYWNvbl90eXBlOjQ7CisJc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgY2NtMV9ldGQ7CisJc3RydWN0IHd1c2JfY2toZGlkIGNkaWQ7CisJdW5zaWduZWQgbG9uZyBlbnRyeV90czsKKwlzdHJ1Y3QgdXNiX2Jvc19kZXNjcmlwdG9yICpib3M7CisJc3RydWN0IHVzYl93aXJlbGVzc19jYXBfZGVzY3JpcHRvciAqd3VzYl9jYXBfZGVzY3I7CisJc3RydWN0IHV3Yl9tYXNfYm0gYXZhaWxhYmlsaXR5OworCXN0cnVjdCB3b3JrX3N0cnVjdCBkZXZjb25uZWN0X2Fja2VkX3dvcms7CisJc3RydWN0IHVyYiAqc2V0X2d0a191cmI7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0X2d0a19yZXE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7Cit9OworCisjZGVmaW5lIFdVU0JfREVWX0FERFJfVU5BVVRIIDB4ODAKKworc3RhdGljIGlubGluZSB2b2lkIHd1c2JfZGV2X2luaXQoc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwlrcmVmX2luaXQoJnd1c2JfZGV2LT5yZWZjbnQpOworCS8qIG5vIG5lZWQgdG8gaW5pdCB0aGUgY2Fja19ub2RlICovCit9CisKK2V4dGVybiB2b2lkIHd1c2JfZGV2X2Rlc3Ryb3koc3RydWN0IGtyZWYgKl93dXNiX2Rldik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2Rldl9nZXQoc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKK3sKKwlrcmVmX2dldCgmd3VzYl9kZXYtPnJlZmNudCk7CisJcmV0dXJuIHd1c2JfZGV2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3VzYl9kZXZfcHV0KHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCit7CisJa3JlZl9wdXQoJnd1c2JfZGV2LT5yZWZjbnQsIHd1c2JfZGV2X2Rlc3Ryb3kpOworfQorCisvKioKKyAqIFdpcmVsZXNzIFVTQiBIb3N0IENvbnRyb2xsbGVyIHJvb3QgaHViICJmYWtlIiBwb3J0cworICogKHN0YXRlIGFuZCBkZXZpY2UgaW5mb3JtYXRpb24pCisgKgorICogV2lyZWxlc3MgVVNCIGlzIHdpcmVsZXNzLCBzbyB0aGVyZSBhcmUgbm8gcG9ydHM7IGJ1dCB3ZQorICogZmFrZSdlbS4gRWFjaCBSQyBjYW4gY29ubmVjdCBhIG1heCBvZiBkZXZpY2VzIGF0IHRoZSBzYW1lIHRpbWUKKyAqIChnaXZlbiBpbiB0aGUgV2lyZWxlc3MgQWRhcHRlciBkZXNjcmlwdG9yLCBiTnVtUG9ydHMgb3IgV0hDSSdzCisgKiBjYXBzKSwgcmVmZXJyZWQgdG8gaW4gd3VzYmhjLT5wb3J0c19tYXguCisgKgorICogU2VlIHJoLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogVGhlIEBzdGF0dXMgYW5kIEBjaGFuZ2UgdXNlIHRoZSBzYW1lIGJpdHMgYXMgaW4gVVNCMi4wWzExLjI0LjIuN10sCisgKiBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIG11Y2ggd2hlbiBnZXR0aW5nIHRoZSBwb3J0J3Mgc3RhdHVzLgorICoKKyAqIFdVU0IxLjBbNy4xXSwgVVNCMi4wWzExLjI0LjIuNy4xLGZpZyAxMS0xMF0sCisgKiBpbmNsdWRlL2xpbnV4L3VzYl9jaDkuaCAoI2RlZmluZSBVU0JfUE9SVF9TVEFUXyopCisgKi8KK3N0cnVjdCB3dXNiX3BvcnQgeworCXUxNiBzdGF0dXM7CisJdTE2IGNoYW5nZTsKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OwkvKiBjb25uZWN0ZWQgZGV2aWNlJ3MgaW5mbyAqLworCXVuc2lnbmVkIHJlc2V0X2NvdW50OworCXUzMiBwdGtfdGtpZDsKK307CisKKy8qKgorICogV1VTQiBIb3N0IENvbnRyb2xsZXIgc3BlY2lmaWNzCisgKgorICogQWxsIGZpZWxkcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIFdpcmVsZXNzIFVTQiBjb250cm9sbGVyIHR5cGVzCisgKiAoSFdBIGFuZCBXSENJKSBhcmUgZ3JvdXBlZCBoZXJlLiBIb3N0IENvbnRyb2xsZXIKKyAqIGZ1bmN0aW9ucy9vcGVyYXRpb25zIHRoYXQgb25seSBkZWFsIHdpdGggZ2VuZXJhbCBXaXJlbGVzcyBVU0IgSEMKKyAqIGlzc3VlcyB1c2UgdGhpcyBkYXRhIHR5cGUgdG8gcmVmZXIgdG8gdGhlIGhvc3QuCisgKgorICogQHVzYl9oY2QgCSAgIEluc3RhbnRpYXRpb24gb2YgYSBVU0IgaG9zdCBjb250cm9sbGVyCisgKiAgICAgICAgICAgICAgICAgKGluaXRpYWxpemVkIGJ5IHVwcGVyIGxheWVyIFtIV0E9SEMgb3IgV0hDSV0uCisgKgorICogQGRldgkJICAgRGV2aWNlIHRoYXQgaW1wbGVtZW50cyB0aGlzOyBpbml0aWFsaXplZCBieSB0aGUKKyAqICAgICAgICAgICAgICAgICB1cHBlciBsYXllciAoSFdBLUhDLCBXSENJLi4uKTsgdGhpcyBkZXZpY2Ugc2hvdWxkCisgKiAgICAgICAgICAgICAgICAgaGF2ZSBhIHJlZmNvdW50LgorICoKKyAqIEB0cnVzdF90aW1lb3V0ICBBZnRlciB0aGlzIHRpbWUgd2l0aG91dCBoZWFyaW5nIGZvciBkZXZpY2UKKyAqICAgICAgICAgICAgICAgICBhY3Rpdml0eSwgd2UgY29uc2lkZXIgdGhlIGRldmljZSBnb25lIGFuZCB3ZSBoYXZlIHRvCisgKiAgICAgICAgICAgICAgICAgcmUtYXV0aGVudGljYXRlLgorICoKKyAqICAgICAgICAgICAgICAgICBDYW4gYmUgYWNjZXNzZWQgdy9vIGxvY2tpbmctLWhvd2V2ZXIsIHJlYWQgdG8gYQorICogICAgICAgICAgICAgICAgIGxvY2FsIHZhcmlhYmxlIHRoZW4gdXNlLgorICoKKyAqIEBjaGlkICAgICAgICAgICBXVVNCIENsdXN0ZXIgSG9zdCBJRDogdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBhCisgKiAgICAgICAgICAgICAgICAgdW5pcXVlIHZhbHVlIHRoYXQgZG9lc24ndCBjaGFuZ2UgYWNyb3NzIHJlYm9vdHMgKHNvCisgKiAgICAgICAgICAgICAgICAgdGhhdCB5b3VyIGRldmljZXMgZG8gbm90IHJlcXVpcmUgcmUtYXNzb2NpYXRpb24pLgorICoKKyAqICAgICAgICAgICAgICAgICBSZWFkL1dyaXRlIHByb3RlY3RlZCBieSBAbXV0ZXgKKyAqCisgKiBAZGV2X2luZm8gICAgICAgVGhpcyBhcnJheSBoYXMgcG9ydHNfbWF4IGVsZW1lbnRzLiBJdCBpcyB1c2VkIHRvCisgKiAgICAgICAgICAgICAgICAgZ2l2ZSB0aGUgSEMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFdVU0IgZGV2aWNlcyAoc2VlCisgKiAgICAgICAgICAgICAgICAgJ3N0cnVjdCB3dXNiX2Rldl9pbmZvJykuCisgKgorICoJICAgICAgICAgICBGb3IgSFdBIHdlIG5lZWQgdG8gYWxsb2NhdGUgaXQgaW4gaGVhcDsgZm9yIFdIQ0kgaXQKKyAqICAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSBwZXJtYW5lbnRseSBtYXBwZWQsIHNvIHdlIGtlZXAgaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgYm90aCBhbmQgbWFrZSBpdCBlYXN5LiBDYWxsIHd1c2JoYy0+ZGV2X2luZm9fc2V0KCkKKyAqICAgICAgICAgICAgICAgICB0byB1cGRhdGUgYW4gZW50cnkuCisgKgorICogQHBvcnRzX21heAkgICBOdW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGRldmljZSBjb25uZWN0aW9ucyAoZmFrZQorICogICAgICAgICAgICAgICAgIHBvcnRzKSB0aGlzIEhDIHdpbGwgdGFrZS4gUmVhZC1vbmx5LgorICoKKyAqIEBwb3J0ICAgICAgCSAgIEFycmF5IG9mIHBvcnQgc3RhdHVzIGZvciBlYWNoIGZha2Ugcm9vdCBwb3J0LiBHdWFyYW50ZWVkIHRvCisgKiAgICAgICAgICAgICAgICAgYWx3YXlzIGJlIHRoZSBzYW1lIGxlbmdodCBkdXJpbmcgZGV2aWNlIGV4aXN0ZW5jZQorICogICAgICAgICAgICAgICAgIFt0aGlzIGFsbG93cyBmb3Igc29tZSB1bmxvY2tlZCBidXQgcmVmZXJlbmNlZCByZWFkaW5nXS4KKyAqCisgKiBAbW1jaWVzX21heAkgICBNYXggbnVtYmVyIG9mIEluZm9ybWF0aW9uIEVsZW1lbnRzIHRoaXMgSEMgY2FuIHNlbmQKKyAqICAgICAgICAgICAgICAgICBpbiBpdHMgTU1DLiBSZWFkLW9ubHkuCisgKgorICogQG1tY2llX2FkZAkgICBIQyBzcGVjaWZpYyBvcGVyYXRpb24gKFdIQ0kgb3IgSFdBKSBmb3IgYWRkaW5nIGFuCisgKiAgICAgICAgICAgICAgICAgTU1DSUUuCisgKgorICogQG1tY2llX3JtCSAgIEhDIHNwZWNpZmljIG9wZXJhdGlvbiAoV0hDSSBvciBIV0EpIGZvciByZW1vdmluZyBhbgorICogICAgICAgICAgICAgICAgIE1NQ0lFLgorICoKKyAqIEBlbmNfdHlwZXMJICAgQXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBlbmNyeXB0aW9ucyBtZXRob2RzCisgKiAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IGFzIGRlc2NyaWJlZCBpbiBXVVNCMS4wIC0tCisgKiAgICAgICAgICAgICAgICAgb25lIGVudHJ5IHBlciBzdXBwb3J0ZWQgbWV0aG9kLiBBcyBvZiBXVVNCMS4wIHRoZXJlCisgKiAgICAgICAgICAgICAgICAgaXMgb25seSBmb3VyIG1ldGhvZHMsIHdlIG1ha2Ugc3BhY2UgZm9yIGVpZ2h0IGp1c3QgaW4KKyAqICAgICAgICAgICAgICAgICBjYXNlIHRoZXkgZGVjaWRlIHRvIGFkZCBzb21lIG1vcmUgKGFuZCBwcmF5IHRoZXkgZG8KKyAqICAgICAgICAgICAgICAgICBpdCBpbiBzZXF1ZW50aWFsIG9yZGVyKS4gaWYgJ2VuY190eXBlc1tlbmNfbWV0aG9kXQorICogICAgICAgICAgICAgICAgICE9IDAnLCB0aGVuIGl0IGlzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gZW5jX21ldGhvZAorICogICAgICAgICAgICAgICAgIGlzIFVTQl9FTkNfVFlQRSouCisgKgorICogQHNldF9wdGs6ICAgICAgIFNldCB0aGUgUFRLIGFuZCBlbmFibGUgZW5jcnlwdGlvbiBmb3IgYSBkZXZpY2UuIE9yLCBpZgorICogICAgICAgICAgICAgICAgIHRoZSBzdXBwbGllZCBrZXkgaXMgTlVMTCwgZGlzYWJsZSBlbmNyeXB0aW9uIGZvciB0aGF0CisgKiAgICAgICAgICAgICAgICAgZGV2aWNlLgorICoKKyAqIEBzZXRfZ3RrOiAgICAgICBTZXQgdGhlIEdUSyB0byBiZSB1c2VkIGZvciBhbGwgZnV0dXJlIGJyb2FkY2FzdCBwYWNrZXRzCisgKiAgICAgICAgICAgICAgICAgKGkuZS4sIE1NQ3MpLiAgV2l0aCBzb21lIGhhcmR3YXJlLCBzZXR0aW5nIHRoZSBHVEsgbWF5IHN0YXJ0CisgKiAgICAgICAgICAgICAgICAgTU1DIHRyYW5zbWlzc2lvbi4KKyAqCisgKiBOT1RFOgorICoKKyAqICAtIElmIHd1c2JfZGV2LT51c2JfZGV2IGlzIG5vdCBOVUxMLCB0aGVuIHVzYl9kZXYgaXMgdmFsaWQKKyAqICAgICh3dXNiX2RldiBoYXMgYSByZWZjb3VudCBvbiBpdCkuIExpa2V3aXNlLCBpZiB1c2JfZGV2LT53dXNiX2RldgorICogICAgaXMgbm90IE5VTEwsIHVzYl9kZXYtPnd1c2JfZGV2IGlzIHZhbGlkICh1c2JfZGV2IGtlZXBzIGEKKyAqICAgIHJlZmNvdW50IG9uIGl0KS4KKyAqCisgKiAgICBNb3N0IG9mIHRoZSB0aW1lcyB3aGVuIHlvdSBuZWVkIHRvIHVzZSBpdCwgaXQgd2lsbCBiZSBub24tTlVMTCwKKyAqICAgIHNvIHRoZXJlIGlzIG5vIHJlYWwgbmVlZCB0byBjaGVjayBmb3IgaXQgKHd1c2JfZGV2IHdpbGwKKyAqICAgIGRpc3NhcGVhciBiZWZvcmUgdXNiX2RldikuCisgKgorICogIC0gVGhlIGZvbGxvd2luZyBmaWVsZHMgbmVlZCB0byBiZSBmaWxsZWQgb3V0IGJlZm9yZSBjYWxsaW5nCisgKiAgICB3dXNiaGNfY3JlYXRlKCk6IHBvcnRzX21heCwgbW1jaWVzX21heCwgbW1jaWVfe2FkZCxybX0uCisgKgorICogIC0gdGhlcmUgaXMgbm8gd3VzYmhjX2luaXQoKSBtZXRob2QsIHdlIGRvIGV2ZXJ5dGhpbmcgaW4KKyAqICAgIHd1c2JoY19jcmVhdGUoKS4KKyAqCisgKiAgLSBDcmVhdGlvbiBpcyBkb25lIGluIHR3byBwaGFzZXMsIHd1c2JoY19jcmVhdGUoKSBhbmQKKyAqICAgIHd1c2JoY19jcmVhdGVfYigpOyBiIGFyZSB0aGUgcGFydHMgdGhhdCBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlcgorICogICAgY2FsbGluZyB1c2JfaGNkX2FkZCgmd3VzYmhjLT51c2JfaGNkKS4KKyAqLworc3RydWN0IHd1c2JoYyB7CisJc3RydWN0IHVzYl9oY2QgdXNiX2hjZDsJCS8qIEhBUyBUTyBCRSAxc3QgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHV3Yl9yYyAqdXdiX3JjOworCXN0cnVjdCB1d2JfcGFsIHBhbDsKKworCXVuc2lnbmVkIHRydXN0X3RpbWVvdXQ7CQkJLyogaW4gamlmZmllcyAqLworCXN0cnVjdCB3dWllX2hvc3RfaW5mbyAqd3VpZV9ob3N0X2luZm87CS8qIEluY2x1ZGVzIENISUQgKi8KKworCXN0cnVjdCBtdXRleCBtdXRleDsJCQkvKiBsb2NrcyBldmVyeXRoaW5nIGVsc2UgKi8KKwl1MTYgY2x1c3Rlcl9pZDsJCQkJLyogV2lyZWxlc3MgVVNCIENsdXN0ZXIgSUQgKi8KKwlzdHJ1Y3Qgd3VzYl9wb3J0ICpwb3J0OwkJCS8qIEZha2UgcG9ydCBzdGF0dXMgaGFuZGxpbmcgKi8KKwlzdHJ1Y3Qgd3VzYl9kZXZfaW5mbyAqZGV2X2luZm87CQkvKiBmb3IgU2V0IERldmljZSBJbmZvIG1nbXQgKi8KKwl1OCBwb3J0c19tYXg7CisJdW5zaWduZWQgYWN0aXZlOjE7CQkJLyogY3VycmVudGx5IHhtaXQnaW5nIE1NQ3MgKi8KKwlzdHJ1Y3Qgd3VpZV9rZWVwX2FsaXZlIGtlZXBfYWxpdmVfaWU7CS8qIHByb3RlY3RlZCBieSBtdXRleCAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsga2VlcF9hbGl2ZV90aW1lcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNhY2tfbGlzdDsJCS8qIENvbm5lY3QgYWNrbm93bGVkZ2luZyAqLworCXNpemVfdCBjYWNrX2NvdW50OwkJCS8qIHByb3RlY3RlZCBieSAnbXV0ZXgnICovCisJc3RydWN0IHd1aWVfY29ubmVjdF9hY2sgY2Fja19pZTsKKwlzdHJ1Y3QgdXdiX3JzdiAqcnN2OwkJLyogY2x1c3RlciBiYW5kd2lkdGggcmVzZXJ2YXRpb24gKi8KKworCXN0cnVjdCBtdXRleCBtbWNpZV9tdXRleDsJCS8qIE1NQyBXVUlFIGhhbmRsaW5nICovCisJc3RydWN0IHd1aWVfaGRyICoqbW1jaWU7CQkvKiBXVUlFIGFycmF5ICovCisJdTggbW1jaWVzX21heDsKKwkvKiBGSVhNRTogbWFrZSB3dXNiaGNfb3BzPyAqLworCWludCAoKnN0YXJ0KShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpOworCXZvaWQgKCpzdG9wKShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpOworCWludCAoKm1tY2llX2FkZCkoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBpbnRlcnZhbCwgdTggcmVwZWF0X2NudCwKKwkJCSB1OCBoYW5kbGUsIHN0cnVjdCB3dWllX2hkciAqd3VpZSk7CisJaW50ICgqbW1jaWVfcm0pKHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggaGFuZGxlKTsKKwlpbnQgKCpkZXZfaW5mb19zZXQpKHN0cnVjdCB3dXNiaGMgKiwgc3RydWN0IHd1c2JfZGV2ICp3dXNiX2Rldik7CisJaW50ICgqYndhX3NldCkoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBzOCBzdHJlYW1faW5kZXgsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXdiX21hc19ibSAqKTsKKwlpbnQgKCpzZXRfcHRrKShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IHBvcnRfaWR4LAorCQkgICAgICAgdTMyIHRraWQsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleV9zaXplKTsKKwlpbnQgKCpzZXRfZ3RrKShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsCisJCSAgICAgICB1MzIgdGtpZCwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5X3NpemUpOworCWludCAoKnNldF9udW1fZG50cykoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCB1OCBpbnRlcnZhbCwgdTggc2xvdHMpOworCisJc3RydWN0IHsKKwkJc3RydWN0IHVzYl9rZXlfZGVzY3JpcHRvciBkZXNjcjsKKwkJdTggZGF0YVsxNl07CQkJCS8qIEdUSyBrZXkgZGF0YSAqLworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ3RrOworCXU4IGd0a19pbmRleDsKKwl1MzIgZ3RrX3RraWQ7CisJc3RydWN0IHdvcmtfc3RydWN0IGd0a19yZWtleV9kb25lX3dvcms7CisJaW50IHBlbmRpbmdfc2V0X2d0a3M7CisKKwlzdHJ1Y3QgdXNiX2VuY3J5cHRpb25fZGVzY3JpcHRvciAqY2NtMV9ldGQ7Cit9OworCisjZGVmaW5lIHVzYl9oY2RfdG9fd3VzYmhjKHUpIGNvbnRhaW5lcl9vZigodSksIHN0cnVjdCB3dXNiaGMsIHVzYl9oY2QpCisKKworZXh0ZXJuIGludCB3dXNiaGNfY3JlYXRlKHN0cnVjdCB3dXNiaGMgKik7CitleHRlcm4gaW50IHd1c2JoY19iX2NyZWF0ZShzdHJ1Y3Qgd3VzYmhjICopOworZXh0ZXJuIHZvaWQgd3VzYmhjX2JfZGVzdHJveShzdHJ1Y3Qgd3VzYmhjICopOworZXh0ZXJuIHZvaWQgd3VzYmhjX2Rlc3Ryb3koc3RydWN0IHd1c2JoYyAqKTsKK2V4dGVybiBpbnQgd3VzYl9kZXZfc3lzZnNfYWRkKHN0cnVjdCB3dXNiaGMgKiwgc3RydWN0IHVzYl9kZXZpY2UgKiwKKwkJCSAgICAgIHN0cnVjdCB3dXNiX2RldiAqKTsKK2V4dGVybiB2b2lkIHd1c2JfZGV2X3N5c2ZzX3JtKHN0cnVjdCB3dXNiX2RldiAqKTsKK2V4dGVybiBpbnQgd3VzYmhjX3NlY19jcmVhdGUoc3RydWN0IHd1c2JoYyAqKTsKK2V4dGVybiBpbnQgd3VzYmhjX3NlY19zdGFydChzdHJ1Y3Qgd3VzYmhjICopOworZXh0ZXJuIHZvaWQgd3VzYmhjX3NlY19zdG9wKHN0cnVjdCB3dXNiaGMgKik7CitleHRlcm4gdm9pZCB3dXNiaGNfc2VjX2Rlc3Ryb3koc3RydWN0IHd1c2JoYyAqKTsKK2V4dGVybiB2b2lkIHd1c2JoY19naXZlYmFja191cmIoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJaW50IHN0YXR1cyk7Cit2b2lkIHd1c2JoY19yZXNldF9hbGwoc3RydWN0IHd1c2JoYyAqd3VzYmhjKTsKKworaW50IHd1c2JoY19wYWxfcmVnaXN0ZXIoc3RydWN0IHd1c2JoYyAqd3VzYmhjKTsKK3ZvaWQgd3VzYmhjX3BhbF91bnJlZ2lzdGVyKHN0cnVjdCB3dXNiaGMgKnd1c2JoYyk7CisKKy8qCisgKiBSZXR1cm4gQHVzYl9kZXYncyBAdXNiX2hjZCAocHJvcGVybHkgcmVmZXJlbmNlZCkgb3IgTlVMTCBpZiBnb25lCisgKgorICogQHVzYl9kZXY6IFVTQiBkZXZpY2UsIFVOTE9DS0VEIGFuZCByZWZlcmVuY2VkIChvciBvdGhlcndpc2UsIHNhZmUgcHRyKQorICoKKyAqIFRoaXMgaXMgYSBzYWZlIGFzc3VtcHRpb24gYXMgQHVzYl9kZXYtPmJ1cyBpcyByZWZlcmVuY2VkIGFsbCB0aGUKKyAqIHRpbWUgZHVyaW5nIHRoZSBAdXNiX2RldiBsaWZlIGN5Y2xlLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICp1c2JfaGNkX2dldF9ieV91c2JfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICp1c2JfaGNkOworCXVzYl9oY2QgPSBjb250YWluZXJfb2YodXNiX2Rldi0+YnVzLCBzdHJ1Y3QgdXNiX2hjZCwgc2VsZik7CisJcmV0dXJuIHVzYl9nZXRfaGNkKHVzYl9oY2QpOworfQorCisvKgorICogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gYSB3dXNiaGMuCisgKgorICogQHd1c2JoYydzIGxpZmUgY3ljbGUgaXMgaWRlbnRpY2FsIHRvIHRoYXQgb2YgdGhlIHVuZGVybHlpbmcgdXNiX2hjZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgd3VzYmhjICp3dXNiaGNfZ2V0KHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKK3sKKwlyZXR1cm4gdXNiX2dldF9oY2QoJnd1c2JoYy0+dXNiX2hjZCkgPyB3dXNiaGMgOiBOVUxMOworfQorCisvKgorICogUmV0dXJuIHRoZSB3dXNiaGMgYXNzb2NpYXRlZCB0byBhIEB1c2JfZGV2CisgKgorICogQHVzYl9kZXY6IFVTQiBkZXZpY2UsIFVOTE9DS0VEIGFuZCByZWZlcmVuY2VkIChvciBvdGhlcndpc2UsIHNhZmUgcHRyKQorICoKKyAqIEByZXR1cm5zOiB3dXNiaGMgZm9yIEB1c2JfZGV2OyBOVUxMIGlmIHRoZSBAdXNiX2RldiBpcyBiZWluZyB0b3JuIGRvd24uCisgKiAgICAgICAgICAgV0FSTklORzogcmVmZXJlbmNlZCBhdCB0aGUgdXNiX2hjZCBsZXZlbCwgdW5sb2NrZWQKKyAqCisgKiBGSVhNRTogbW92ZSBvZmZsaW5lCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHd1c2JoYyAqd3VzYmhjX2dldF9ieV91c2JfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9IE5VTEw7CisJc3RydWN0IHVzYl9oY2QgKnVzYl9oY2Q7CisJaWYgKHVzYl9kZXYtPmRldm51bSA+IDEgJiYgIXVzYl9kZXYtPnd1c2IpIHsKKwkJLyogYnV0IHJvb3QgaHVicyAqLworCQlkZXZfZXJyKCZ1c2JfZGV2LT5kZXYsICJkZXZudW0gJWQgd3VzYiAlZFxuIiwgdXNiX2Rldi0+ZGV2bnVtLAorCQkJdXNiX2Rldi0+d3VzYik7CisJCUJVR19PTih1c2JfZGV2LT5kZXZudW0gPiAxICYmICF1c2JfZGV2LT53dXNiKTsKKwl9CisJdXNiX2hjZCA9IHVzYl9oY2RfZ2V0X2J5X3VzYl9kZXYodXNiX2Rldik7CisJaWYgKHVzYl9oY2QgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJQlVHX09OKHVzYl9oY2QtPndpcmVsZXNzID09IDApOworCXJldHVybiB3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgd3VzYmhjX3B1dChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCit7CisJdXNiX3B1dF9oY2QoJnd1c2JoYy0+dXNiX2hjZCk7Cit9CisKK2ludCB3dXNiaGNfc3RhcnQoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBjb25zdCBzdHJ1Y3Qgd3VzYl9ja2hkaWQgKmNoaWQpOwordm9pZCB3dXNiaGNfc3RvcChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpOworZXh0ZXJuIGludCB3dXNiaGNfY2hpZF9zZXQoc3RydWN0IHd1c2JoYyAqLCBjb25zdCBzdHJ1Y3Qgd3VzYl9ja2hkaWQgKik7CisKKy8qIERldmljZSBjb25uZWN0IGhhbmRsaW5nICovCitleHRlcm4gaW50IHd1c2JoY19kZXZjb25uZWN0X2NyZWF0ZShzdHJ1Y3Qgd3VzYmhjICopOworZXh0ZXJuIHZvaWQgd3VzYmhjX2RldmNvbm5lY3RfZGVzdHJveShzdHJ1Y3Qgd3VzYmhjICopOworZXh0ZXJuIGludCB3dXNiaGNfZGV2Y29ubmVjdF9zdGFydChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsCisJCQkJICAgY29uc3Qgc3RydWN0IHd1c2JfY2toZGlkICpjaGlkKTsKK2V4dGVybiB2b2lkIHd1c2JoY19kZXZjb25uZWN0X3N0b3Aoc3RydWN0IHd1c2JoYyAqd3VzYmhjKTsKK2V4dGVybiBpbnQgd3VzYmhjX2RldmNvbm5lY3RfYXV0aChzdHJ1Y3Qgd3VzYmhjICosIHU4KTsKK2V4dGVybiB2b2lkIHd1c2JoY19oYW5kbGVfZG4oc3RydWN0IHd1c2JoYyAqLCB1OCBzcmNhZGRyLAorCQkJICAgICBzdHJ1Y3Qgd3VzYl9kbl9oZHIgKmRuX2hkciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCB3dXNiaGNfZGV2X3Jlc2V0KHN0cnVjdCB3dXNiaGMgKnd1c2JoYywgdTggcG9ydCk7CitleHRlcm4gdm9pZCBfX3d1c2JoY19kZXZfZGlzYWJsZShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMsIHU4IHBvcnQpOworZXh0ZXJuIGludCB3dXNiX3VzYl9uY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQl2b2lkICpwcml2KTsKK2V4dGVybiBpbnQgd3VzYl9zZXRfZGV2X2FkZHIoc3RydWN0IHd1c2JoYyAqd3VzYmhjLCBzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2LAorCQkJICAgICB1OCBhZGRyKTsKKworLyogV2lyZWxlc3MgVVNCIGZha2UgUm9vdCBIdWIgbWV0aG9kcyAqLworZXh0ZXJuIGludCB3dXNiaGNfcmhfY3JlYXRlKHN0cnVjdCB3dXNiaGMgKik7CitleHRlcm4gdm9pZCB3dXNiaGNfcmhfZGVzdHJveShzdHJ1Y3Qgd3VzYmhjICopOworCitleHRlcm4gaW50IHd1c2JoY19yaF9zdGF0dXNfZGF0YShzdHJ1Y3QgdXNiX2hjZCAqLCBjaGFyICopOworZXh0ZXJuIGludCB3dXNiaGNfcmhfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqLCB1MTYsIHUxNiwgdTE2LCBjaGFyICosIHUxNik7CitleHRlcm4gaW50IHd1c2JoY19yaF9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICopOworZXh0ZXJuIGludCB3dXNiaGNfcmhfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICopOworZXh0ZXJuIGludCB3dXNiaGNfcmhfc3RhcnRfcG9ydF9yZXNldChzdHJ1Y3QgdXNiX2hjZCAqLCB1bnNpZ25lZCk7CisKKy8qIE1NQyBoYW5kbGluZyAqLworZXh0ZXJuIGludCB3dXNiaGNfbW1jaWVfY3JlYXRlKHN0cnVjdCB3dXNiaGMgKik7CitleHRlcm4gdm9pZCB3dXNiaGNfbW1jaWVfZGVzdHJveShzdHJ1Y3Qgd3VzYmhjICopOworZXh0ZXJuIGludCB3dXNiaGNfbW1jaWVfc2V0KHN0cnVjdCB3dXNiaGMgKiwgdTggaW50ZXJ2YWwsIHU4IHJlcGVhdF9jbnQsCisJCQkgICAgc3RydWN0IHd1aWVfaGRyICopOworZXh0ZXJuIHZvaWQgd3VzYmhjX21tY2llX3JtKHN0cnVjdCB3dXNiaGMgKiwgc3RydWN0IHd1aWVfaGRyICopOworCisvKiBCYW5kd2lkdGggcmVzZXJ2YXRpb24gKi8KK2ludCB3dXNiaGNfcnN2X2VzdGFibGlzaChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpOwordm9pZCB3dXNiaGNfcnN2X3Rlcm1pbmF0ZShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpOworCisvKgorICogSSd2ZSBhbHdheXMgc2FpZAorICogSSB3YW50ZWQgYSB3ZWRkaW5nIGluIGEgY2h1cmNoLi4uCisgKgorICogYnV0IGxhdGVseSBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQKKyAqIHRoZSBCb3RhbmljYWwgR2FyZGVucy4KKyAqCisgKiBXZSBjb3VsZCBkbyBpdCBieSB0aGUgdHVsaXBzLgorICogSXQnbGwgYmUgYmVhdXRpZnVsCisgKgorICogLS1TZWN1cml0eSEKKyAqLworZXh0ZXJuIGludCB3dXNiX2Rldl9zZWNfYWRkKHN0cnVjdCB3dXNiaGMgKiwgc3RydWN0IHVzYl9kZXZpY2UgKiwKKwkJCQlzdHJ1Y3Qgd3VzYl9kZXYgKik7CitleHRlcm4gdm9pZCB3dXNiX2Rldl9zZWNfcm0oc3RydWN0IHd1c2JfZGV2ICopIDsKK2V4dGVybiBpbnQgd3VzYl9kZXZfNHdheV9oYW5kc2hha2Uoc3RydWN0IHd1c2JoYyAqLCBzdHJ1Y3Qgd3VzYl9kZXYgKiwKKwkJCQkgICBzdHJ1Y3Qgd3VzYl9ja2hkaWQgKmNrKTsKK3ZvaWQgd3VzYmhjX2d0a19yZWtleShzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpOworCisKKy8qIFdVU0IgQ2x1c3RlciBJRCBoYW5kbGluZyAqLworZXh0ZXJuIHU4IHd1c2JfY2x1c3Rlcl9pZF9nZXQodm9pZCk7CitleHRlcm4gdm9pZCB3dXNiX2NsdXN0ZXJfaWRfcHV0KHU4KTsKKworLyoKKyAqIHd1c2JfcG9ydF9ieV9pZHggLSByZXR1cm4gdGhlIHBvcnQgYXNzb2NpYXRlZCB0byBhIHplcm8tYmFzZWQgcG9ydCBpbmRleAorICoKKyAqIE5PVEU6IHZhbGlkIHdpdGhvdXQgbG9ja2luZyBhcyBsb25nIGFzIHd1c2JoYyBpcyByZWZlcmVuY2VkIChhcyB0aGUKKyAqICAgICAgIG51bWJlciBvZiBwb3J0cyBkb2Vzbid0IGNoYW5nZSkuIFRoZSBkYXRhIHBvaW50ZWQgdG8gaGFzIHRvCisgKiAgICAgICBiZSB2ZXJpZmllZCB0aG91Z2ggOikKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgd3VzYl9wb3J0ICp3dXNiX3BvcnRfYnlfaWR4KHN0cnVjdCB3dXNiaGMgKnd1c2JoYywKKwkJCQkJCSB1OCBwb3J0X2lkeCkKK3sKKwlyZXR1cm4gJnd1c2JoYy0+cG9ydFtwb3J0X2lkeF07Cit9CisKKy8qCisgKiB3dXNiX3BvcnRfbm9fdG9faWR4IC0gQ29udmVydCBwb3J0IG51bWJlciAocGVyIHVzYl9kZXYtPnBvcnRudW0pIHRvCisgKiBhIHBvcnRfaWR4LgorICoKKyAqIFVTQiBzdGFjayBVU0IgcG9ydHMgYXJlIDEgYmFzZWQhIQorICoKKyAqIE5PVEU6IG9ubHkgdmFsaWQgZm9yIFdVU0IgZGV2aWNlcyEhIQorICovCitzdGF0aWMgaW5saW5lIHU4IHd1c2JfcG9ydF9ub190b19pZHgodTggcG9ydF9ubykKK3sKKwlyZXR1cm4gcG9ydF9ubyAtIDE7Cit9CisKK2V4dGVybiBzdHJ1Y3Qgd3VzYl9kZXYgKl9fd3VzYl9kZXZfZ2V0X2J5X3VzYl9kZXYoc3RydWN0IHd1c2JoYyAqLAorCQkJCQkJICBzdHJ1Y3QgdXNiX2RldmljZSAqKTsKKworLyoKKyAqIFJldHVybiBhIHJlZmVyZW5jZWQgd3VzYl9kZXYgZ2l2ZW4gYSBAdXNiX2RldgorICoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgdXNiX2RldiBpcyBiZWluZyB0b3JuIGRvd24uCisgKgorICogRklYTUU6IG1vdmUgb2ZmbGluZQorICovCitzdGF0aWMgaW5saW5lCitzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2X2dldF9ieV91c2JfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQoreworCXN0cnVjdCB3dXNiaGMgKnd1c2JoYzsKKwlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OworCXd1c2JoYyA9IHd1c2JoY19nZXRfYnlfdXNiX2Rldih1c2JfZGV2KTsKKwlpZiAod3VzYmhjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOworCXd1c2JfZGV2ID0gX193dXNiX2Rldl9nZXRfYnlfdXNiX2Rldih3dXNiaGMsIHVzYl9kZXYpOworCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CisJd3VzYmhjX3B1dCh3dXNiaGMpOworCXJldHVybiB3dXNiX2RldjsKK30KKworLyogTWlzYyAqLworCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnd1c2JkOworI2VuZGlmIC8qICNpZm5kZWYgX19XVVNCSENfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9LY29uZmlnIGIvZHJpdmVycy91d2IvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTc4MzEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvS2NvbmZpZwpAQCAtMCwwICsxLDkwIEBACisjCisjIFVXQiBkZXZpY2UgY29uZmlndXJhdGlvbgorIworCittZW51Y29uZmlnIFVXQgorCXRyaXN0YXRlICJVbHRyYSBXaWRlYmFuZCBkZXZpY2VzIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQQ0kKKwlkZWZhdWx0IG4KKwloZWxwCisJICBVV0IgaXMgYSBoaWdoLWJhbmR3aWR0aCwgbG93LXBvd2VyLCBwb2ludC10by1wb2ludCByYWRpbworCSAgdGVjaG5vbG9neSB1c2luZyBhIHdpZGUgc3BlY3RydW0gKDMuMS0xMC42R0h6KS4gSXQgaXMKKwkgIG9wdGltaXplZCBmb3IgaW4tcm9vbSB1c2UgKDQ4ME1icHMgYXQgMiBtZXRlcnMsIDExME1icHMgYXQKKwkgIDEwbSkuIEl0IHNlcnZlcyBhcyB0aGUgdHJhbnNwb3J0IGxheWVyIGZvciBvdGhlciBwcm90b2NvbHMsCisJICBzdWNoIGFzIFdpcmVsZXNzIFVTQiAoV1VTQiksIElQIChXTFApIGFuZCB1cGNvbWluZworCSAgQmx1ZXRvb3RoIGFuZCAxMzk0CisKKwkgIFRoZSB0b3BvbG9neSBpcyBwZWVyIHRvIHBlZXI7IGhvd2V2ZXIsIGhpZ2hlciBsZXZlbAorCSAgcHJvdG9jb2xzIChzdWNoIGFzIFdVU0IpIG1pZ2h0IGltcG9zZSBhIG1hc3Rlci9zbGF2ZQorCSAgcmVsYXRpb25zaGlwLgorCisJICBTYXkgWSBoZXJlIGlmIHlvdXIgY29tcHV0ZXIgaGFzIFVXQiByYWRpbyBjb250cm9sbGVycyAoVVNCIG9yIFBDSSkKKwkgIGJhc2VkLiBZb3Ugd2lsbCBuZWVkIHRvIGVuYWJsZSB0aGUgcmFkaW8gY29udHJvbGxlcnMKKwkgIGJlbG93LiAgSXQgaXMgb2sgdG8gc2VsZWN0IGFsbCBvZiB0aGVtLCBubyBoYXJtIGRvbmUuCisKKwkgIEZvciBtb3JlIGhlbHAgY2hlY2sgdGhlIFVXQiBhbmQgV1VTQiByZWxhdGVkIGZpbGVzIGluCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi8+LgorCisJICBUbyBjb21waWxlIHRoZSBVV0Igc3RhY2sgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisKK2lmIFVXQgorCitjb25maWcgVVdCX0hXQQorCXRyaXN0YXRlICJVV0IgUmFkaW8gQ29udHJvbCBkcml2ZXIgZm9yIFdVU0ItY29tcGxpYW50IFVTQiBkb25nbGVzIChIV0EpIgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgVGhpcyBkcml2ZXIgZW5hYmxlcyB0aGUgcmFkaW8gY29udHJvbGxlciBmb3IgSFdBIFVTQgorCSAgZGV2aWNlcy4gSFdBIHN0YW5kcyBmb3IgSG9zdCBXaXJlIEFkYXB0ZXIsIGFuZCBpdCBpcyBhIFVXQgorCSAgUmFkaW8gQ29udHJvbGxlciBjb25uZWN0ZWQgdG8geW91ciBzeXN0ZW0gdmlhIFVTQi4gTW9zdCBvZgorCSAgdGhlbSBjb21lIHdpdGggYSBXaXJlbGVzcyBVU0IgaG9zdCBjb250cm9sbGVyIGFsc28uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgc2VsZWN0IFkgKGJ1aWx0IGluKSBvciBNIChtb2R1bGUpLiBJdAorCSAgaXMgc2FmZSB0byBzZWxlY3QgYW55IGV2ZW4gaWYgeW91IGRvIG5vdCBoYXZlIHRoZSBoYXJkd2FyZS4KKworY29uZmlnIFVXQl9XSENJCisgICAgICAgIHRyaXN0YXRlICJVV0IgUmFkaW8gQ29udHJvbCBkcml2ZXIgZm9yIFdIQ0ktY29tcGxpYW50IGNhcmRzIgorICAgICAgICBkZXBlbmRzIG9uIFBDSQorICAgICAgICBoZWxwCisgICAgICAgICAgVGhpcyBkcml2ZXIgZW5hYmxlcyB0aGUgcmFkaW8gY29udHJvbGxlciBmb3IgV0hDSSBjYXJkcy4KKworICAgICAgICAgIFdIQ0kgaXMgYW4gc3BlY2lmaWNhdGlvbiBkZXZlbG9wZWQgYnkgSW50ZWwKKyAgICAgICAgICAoaHR0cDovL3d3dy5pbnRlbC5jb20vdGVjaG5vbG9neS9jb21tcy93dXNiL3doY2kuaHRtKSBtdWNoCisgICAgICAgICAgaW4gdGhlIHNwaXJpdCBvZiBVU0IncyBFSENJLCBidXQgZm9yIFVXQiBhbmQgV2lyZWxlc3MgVVNCCisgICAgICAgICAgcmFkaW8vaG9zdCBjb250cm9sbGVycyBjb25uZWN0ZWQgdmlhIG1lbW1vcnkgbWFwcGluZyAoZWc6CisgICAgICAgICAgUENJKS4gTW9zdCBvZiB0aGVzZSBjYXJkcyBjb21lIGFsc28gd2l0aCBhIFdpcmVsZXNzIFVTQiBob3N0CisgICAgICAgICAgY29udHJvbGxlci4KKworICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgc2VsZWN0IFkgKGJ1aWx0IGluKSBvciBNIChtb2R1bGUpLiBJdAorICAgICAgICAgIGlzIHNhZmUgdG8gc2VsZWN0IGFueSBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZSB0aGUgaGFyZHdhcmUuCisKK2NvbmZpZyBVV0JfV0xQCisJdHJpc3RhdGUgIlN1cHBvcnQgV2lNZWRpYSBMaW5rIFByb3RvY29sIChFdGhlcm5ldC9JUCBvdmVyIFVXQikiCisJZGVwZW5kcyBvbiBVV0IgJiYgTkVUCisJaGVscAorCSAgVGhpcyBpcyBhIGNvbW1vbiBsaWJyYXJ5IGZvciBkcml2ZXJzIHRoYXQgaW1wbGVtZW50CisJICBuZXR3b3JraW5nIG92ZXIgVVdCLgorCitjb25maWcgVVdCX0kxNDgwVQorICAgICAgICB0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgSW50ZWwgV2lyZWxlc3MgVVdCIExpbmsgMTQ4MCBIV0EiCisgICAgICAgIGRlcGVuZHMgb24gVVdCX0hXQQorICAgICAgICBzZWxlY3QgRldfTE9BREVSCisgICAgICAgIGhlbHAKKyAgICAgICAgIFRoaXMgZHJpdmVyIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGkxNDgwIHdoZW4gY29ubmVjdGVkIHZpYQorICAgICAgICAgVVNCLiBJdCBjb25zaXN0cyBvZiBhIGZpcm13YXJlIHVwbG9hZGVyIHRoYXQgd2lsbCBlbmFibGUgaXQKKyAgICAgICAgIHRvIGJlaGF2ZSBhcyBhbiBIV0EgZGV2aWNlLgorCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIHNlbGVjdCBZIChidWlsdCBpbikgb3IgTSAobW9kdWxlKS4gSXQKKyAgICAgICAgIGlzIHNhZmUgdG8gc2VsZWN0IGFueSBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZSB0aGUgaGFyZHdhcmUuCisKK2NvbmZpZyBVV0JfSTE0ODBVX1dMUAorICAgICAgICB0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgSW50ZWwgV2lyZWxlc3MgVVdCIExpbmsgMTQ4MCBIV0EncyBXTFAgaW50ZXJmYWNlIgorICAgICAgICBkZXBlbmRzIG9uIFVXQl9JMTQ4MFUgJiYgIFVXQl9XTFAgJiYgTkVUCisgICAgICAgIGhlbHAKKyAgICAgICAgIFRoaXMgZHJpdmVyIGVuYWJsZXMgV0xQIHN1cHBvcnQgZm9yIHRoZSBpMTQ4MCB3aGVuIGNvbm5lY3RlZCB2aWEKKyAgICAgICAgIFVTQi4gV0xQIGlzIHRoZSBXaU1lZGlhIExpbmsgUHJvdG9jb2wsIG9yIElQIG92ZXIgVVdCLgorCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIHNlbGVjdCBZIChidWlsdCBpbikgb3IgTSAobW9kdWxlKS4gSXQKKyAgICAgICAgIGlzIHNhZmUgdG8gc2VsZWN0IGFueSBldmVuIGlmIHlvdSBkb24ndCBoYXZlIHRoZSBoYXJkd2FyZS4KKworZW5kaWYgIyBVV0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL01ha2VmaWxlIGIvZHJpdmVycy91d2IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3ZTY5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL01ha2VmaWxlCkBAIC0wLDAgKzEsMjkgQEAKK29iai0kKENPTkZJR19VV0IpCQkrPSB1d2Iubworb2JqLSQoQ09ORklHX1VXQl9XTFApCQkrPSB3bHAvCitvYmotJChDT05GSUdfVVdCX1dIQ0kpCQkrPSB1bWMubyB3aGNpLm8gd2hjLXJjLm8KK29iai0kKENPTkZJR19VV0JfSFdBKQkJKz0gaHdhLXJjLm8KK29iai0kKENPTkZJR19VV0JfSTE0ODBVKQkrPSBpMTQ4MC8KKwordXdiLW9ianMgOj0JCVwKKwlhZGRyZXNzLm8JXAorCWJlYWNvbi5vCVwKKwlkcml2ZXIubwlcCisJZHJwLm8JCVwKKwlkcnAtYXZhaWwubwlcCisJZHJwLWllLm8JXAorCWVzdC5vCQlcCisJaWUubwkJXAorCWxjLWRldi5vCVwKKwlsYy1yYy5vCQlcCisJbmVoLm8JCVwKKwlwYWwubwkJXAorCXJlc2V0Lm8JCVwKKwlyc3YubwkJXAorCXNjYW4ubwkJXAorCXV3Yi1kZWJ1Zy5vCVwKKwl1d2JkLm8KKwordW1jLW9ianMgOj0JCVwKKwl1bWMtYnVzLm8JXAorCXVtYy1kZXYubwlcCisJdW1jLWRydi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9hZGRyZXNzLmMgYi9kcml2ZXJzL3V3Yi9hZGRyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NGFlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2FkZHJlc3MuYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogQWRkcmVzcyBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisjaW5jbHVkZSAidXdiLWludGVybmFsLmgiCisKKworLyoqIERldmljZSBBZGRyZXNzIE1hbmFnZW1lbnQgY29tbWFuZCAqLworc3RydWN0IHV3Yl9yY19jbWRfZGV2X2FkZHJfbWdtdCB7CisJc3RydWN0IHV3Yl9yY2NiIHJjY2I7CisJdTggYm1PcGVyYXRpb25UeXBlOworCXU4IGJhQWRkcls2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqCisgKiBMb3cgbGV2ZWwgY29tbWFuZCBmb3Igc2V0dGluZy9nZXR0aW5nIFVXQiByYWRpbydzIGFkZHJlc3NlcworICoKKyAqIEBod2FyYzoJSFdBIFJhZGlvIENvbnRyb2wgaW50ZXJmYWNlIGluc3RhbmNlCisgKiBAYm1PcGVyYXRpb25UeXBlOgorICogCQlTZXQvZ2V0LCBNQUMvREVWIChzZWUgV1VTQjEuMFs4LjYuMi4yXSkKKyAqIEBiYUFkZHI6CWFkZHJlc3MgYnVmZmVyLS1hc3N1bWVkIHRvIGhhdmUgZW5vdWdoIGRhdGEgdG8gaG9sZAorICogICAgICAgICAgICAgIHRoZSBhZGRyZXNzIHR5cGUgcmVxdWVzdGVkLgorICogQHJlcGx5OglQb2ludGVyIHRvIHJlcGx5IGJ1ZmZlciAoY2FuIGJlIHN0YWNrIGFsbG9jYXRlZCkKKyAqIEByZXR1cm5zOgkwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqCisgKiBAY21kIGhhcyB0byBiZSBhbGxvY2F0ZWQgYmVjYXVzZSBVU0IgY2Fubm90IGdyb2sgVVNCIG9yIHZtYWxsb2MKKyAqIGJ1ZmZlcnMgZGVwZW5kaW5nIG9uIHlvdXIgY29tYmluYXRpb24gb2YgaG9zdCBhcmNoaXRlY3R1cmUuCisgKi8KK3N0YXRpYworaW50IHV3Yl9yY19kZXZfYWRkcl9tZ210KHN0cnVjdCB1d2JfcmMgKnJjLAorCQkJIHU4IGJtT3BlcmF0aW9uVHlwZSwgY29uc3QgdTggKmJhQWRkciwKKwkJCSBzdHJ1Y3QgdXdiX3JjX2V2dF9kZXZfYWRkcl9tZ210ICpyZXBseSkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB1d2JfcmNfY21kX2Rldl9hZGRyX21nbXQgKmNtZDsKKworCXJlc3VsdCA9IC1FTk9NRU07CisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9remFsbG9jOworCWNtZC0+cmNjYi5iQ29tbWFuZFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJY21kLT5yY2NiLndDb21tYW5kID0gY3B1X3RvX2xlMTYoVVdCX1JDX0NNRF9ERVZfQUREUl9NR01UKTsKKwljbWQtPmJtT3BlcmF0aW9uVHlwZSA9IGJtT3BlcmF0aW9uVHlwZTsKKwlpZiAoYmFBZGRyKSB7CisJCXNpemVfdCBzaXplID0gMDsKKwkJc3dpdGNoIChibU9wZXJhdGlvblR5cGUgPj4gMSkgeworCQljYXNlIDA6CXNpemUgPSAyOyBicmVhazsKKwkJY2FzZSAxOglzaXplID0gNjsgYnJlYWs7CisJCWRlZmF1bHQ6IEJVRygpOworCQl9CisJCW1lbWNweShjbWQtPmJhQWRkciwgYmFBZGRyLCBzaXplKTsKKwl9CisJcmVwbHktPnJjZWIuYkV2ZW50VHlwZSA9IFVXQl9SQ19DRVRfR0VORVJBTDsKKwlyZXBseS0+cmNlYi53RXZlbnQgPSBVV0JfUkNfQ01EX0RFVl9BRERSX01HTVQ7CisJcmVzdWx0ID0gdXdiX3JjX2NtZChyYywgIkRFVi1BRERSLU1HTVQiLAorCQkJICAgICZjbWQtPnJjY2IsIHNpemVvZigqY21kKSwKKwkJCSAgICAmcmVwbHktPnJjZWIsIHNpemVvZigqcmVwbHkpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJaWYgKHJlc3VsdCA8IHNpemVvZigqcmVwbHkpKSB7CisJCWRldl9lcnIoJnJjLT51d2JfZGV2LmRldiwKKwkJCSJERVYtQUREUi1NR01UOiBub3QgZW5vdWdoIGRhdGEgcmVwbGllZDogIgorCQkJIiVkIHZzICV6dSBieXRlcyBuZWVkZWRcbiIsIHJlc3VsdCwgc2l6ZW9mKCpyZXBseSkpOworCQlyZXN1bHQgPSAtRU5PTVNHOworCX0gZWxzZSBpZiAocmVwbHktPmJSZXN1bHRDb2RlICE9IFVXQl9SQ19SRVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKCZyYy0+dXdiX2Rldi5kZXYsCisJCQkiREVWLUFERFItTUdNVDogY29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyAoJWQpXG4iLAorCQkJdXdiX3JjX3N0cmVycm9yKHJlcGx5LT5iUmVzdWx0Q29kZSksCisJCQlyZXBseS0+YlJlc3VsdENvZGUpOworCQlyZXN1bHQgPSAtRUlPOworCX0gZWxzZQorCQlyZXN1bHQgPSAwOworZXJyb3JfY21kOgorCWtmcmVlKGNtZCk7CitlcnJvcl9remFsbG9jOgorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBTZXQgdGhlIFVXQiBSQyBNQUMgb3IgZGV2aWNlIGFkZHJlc3MuCisgKgorICogQHJjOiAgICAgIFVXQiBSYWRpbyBDb250cm9sbGVyCisgKiBAX2FkZHI6ICAgUG9pbnRlciB0byBhZGRyZXNzIHRvIHdyaXRlIFthc3N1bWVkIHRvIGJlIGVpdGhlciBhCisgKiAgICAgICAgICAgJ3N0cnVjdCB1d2JfbWFjX2FkZHIgKicgb3IgYSAnc3RydWN0IHV3Yl9kZXZfYWRkciAqJ10uCisgKiBAdHlwZTogICAgVHlwZSBvZiBhZGRyZXNzIHRvIHNldCAoVVdCX0FERFJfREVWIG9yIFVXQl9BRERSX01BQykuCisgKiBAcmV0dXJuczogMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKgorICogU29tZSBhbmFsIHJldGVudGl2aXR5IGhlcmU6IGV2ZW4gaWYgYm90aCAnc3RydWN0CisgKiB1d2Jfe2RldixtYWN9X2FkZHInIGhhdmUgdGhlIGFjdHVhbCBieXRlIGFycmF5IGluIHRoZSBzYW1lIG9mZnNldAorICogYW5kIEkgY291bGQganVzdCBwYXNzIF9hZGRyIHRvIGh3YXJjX2NtZF9kZXZfYWRkcl9tZ210KCksIEkgcHJlZmVyCisgKiB0byB1c2Ugc29tZSBzeW50YXRpYyBzdWdhciBpbiBjYXNlIHNvbWVkYXkgd2UgZGVjaWRlIHRvIGNoYW5nZSB0aGUKKyAqIGZvcm1hdCBvZiB0aGUgc3RydWN0cy4gVGhlIGNvbXBpbGVyIHdpbGwgb3B0aW1pemUgaXQgb3V0IGFueXdheS4KKyAqLworc3RhdGljIGludCB1d2JfcmNfYWRkcl9zZXQoc3RydWN0IHV3Yl9yYyAqcmMsCisJCSAgICBjb25zdCB2b2lkICpfYWRkciwgZW51bSB1d2JfYWRkcl90eXBlIHR5cGUpCit7CisJaW50IHJlc3VsdDsKKwl1OCBibU9wZXJhdGlvblR5cGUgPSAweDE7IAkJLyogU2V0IGFkZHJlc3MgKi8KKwljb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciA9IF9hZGRyOworCWNvbnN0IHN0cnVjdCB1d2JfbWFjX2FkZHIgKm1hY19hZGRyID0gX2FkZHI7CisJc3RydWN0IHV3Yl9yY19ldnRfZGV2X2FkZHJfbWdtdCByZXBseTsKKwljb25zdCB1OCAqYmFBZGRyOworCisJcmVzdWx0ID0gLUVJTlZBTDsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFVXQl9BRERSX0RFVjoKKwkJYmFBZGRyID0gZGV2X2FkZHItPmRhdGE7CisJCWJyZWFrOworCWNhc2UgVVdCX0FERFJfTUFDOgorCQliYUFkZHIgPSBtYWNfYWRkci0+ZGF0YTsKKwkJYm1PcGVyYXRpb25UeXBlIHw9IDB4MjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJcmV0dXJuIHV3Yl9yY19kZXZfYWRkcl9tZ210KHJjLCBibU9wZXJhdGlvblR5cGUsIGJhQWRkciwgJnJlcGx5KTsKK30KKworCisvKioKKyAqIEdldCB0aGUgVVdCIHJhZGlvJ3MgTUFDIG9yIGRldmljZSBhZGRyZXNzLgorICoKKyAqIEByYzogICAgICBVV0IgUmFkaW8gQ29udHJvbGxlcgorICogQF9hZGRyOiAgIFdoZXJlIHRvIHdyaXRlIHRoZSBhZGRyZXNzIGRhdGEgW2Fzc3VtZWQgdG8gYmUgZWl0aGVyIGEKKyAqICAgICAgICAgICAnc3RydWN0IHV3Yl9tYWNfYWRkciAqJyBvciBhICdzdHJ1Y3QgdXdiX2Rldl9hZGRyIConXS4KKyAqIEB0eXBlOiAgICBUeXBlIG9mIGFkZHJlc3MgdG8gZ2V0IChVV0JfQUREUl9ERVYgb3IgVVdCX0FERFJfTUFDKS4KKyAqIEByZXR1cm5zOiAwIGlmIG9rIChhbmQgKl9hZGRyIHNldCksIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yLgorICoKKyAqIFNlZSBjb21tZW50IGluIHV3Yl9yY19hZGRyX3NldCgpIGFib3V0IGFuYWwgcmV0ZW50aXZpdHkgaW4gdGhlCisgKiB0eXBlIGhhbmRsaW5nIG9mIHRoZSBhZGRyZXNzIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGludCB1d2JfcmNfYWRkcl9nZXQoc3RydWN0IHV3Yl9yYyAqcmMsCisJCSAgICB2b2lkICpfYWRkciwgZW51bSB1d2JfYWRkcl90eXBlIHR5cGUpCit7CisJaW50IHJlc3VsdDsKKwl1OCBibU9wZXJhdGlvblR5cGUgPSAweDA7IAkJLyogR2V0IGFkZHJlc3MgKi8KKwlzdHJ1Y3QgdXdiX3JjX2V2dF9kZXZfYWRkcl9tZ210IGV2dDsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciA9IF9hZGRyOworCXN0cnVjdCB1d2JfbWFjX2FkZHIgKm1hY19hZGRyID0gX2FkZHI7CisJdTggKmJhQWRkcjsKKworCXJlc3VsdCA9IC1FSU5WQUw7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBVV0JfQUREUl9ERVY6CisJCWJhQWRkciA9IGRldl9hZGRyLT5kYXRhOworCQlicmVhazsKKwljYXNlIFVXQl9BRERSX01BQzoKKwkJYm1PcGVyYXRpb25UeXBlIHw9IDB4MjsKKwkJYmFBZGRyID0gbWFjX2FkZHItPmRhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiByZXN1bHQ7CisJfQorCXJlc3VsdCA9IHV3Yl9yY19kZXZfYWRkcl9tZ210KHJjLCBibU9wZXJhdGlvblR5cGUsIGJhQWRkciwgJmV2dCk7CisJaWYgKHJlc3VsdCA9PSAwKQorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBVV0JfQUREUl9ERVY6CisJCQltZW1jcHkoJmRldl9hZGRyLT5kYXRhLCBldnQuYmFBZGRyLAorCQkJICAgICAgIHNpemVvZihkZXZfYWRkci0+ZGF0YSkpOworCQkJYnJlYWs7CisJCWNhc2UgVVdCX0FERFJfTUFDOgorCQkJbWVtY3B5KCZtYWNfYWRkci0+ZGF0YSwgZXZ0LmJhQWRkciwKKwkJCSAgICAgICBzaXplb2YobWFjX2FkZHItPmRhdGEpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkJLyogc2h1dCBnY2MgdXAgKi8KKwkJCUJVRygpOworCQl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiogR2V0IEByYydzIE1BQyBhZGRyZXNzIHRvIEBhZGRyICovCitpbnQgdXdiX3JjX21hY19hZGRyX2dldChzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCXN0cnVjdCB1d2JfbWFjX2FkZHIgKmFkZHIpIHsKKwlyZXR1cm4gdXdiX3JjX2FkZHJfZ2V0KHJjLCBhZGRyLCBVV0JfQUREUl9NQUMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3JjX21hY19hZGRyX2dldCk7CisKKworLyoqIEdldCBAcmMncyBkZXZpY2UgYWRkcmVzcyB0byBAYWRkciAqLworaW50IHV3Yl9yY19kZXZfYWRkcl9nZXQoc3RydWN0IHV3Yl9yYyAqcmMsCisJCQlzdHJ1Y3QgdXdiX2Rldl9hZGRyICphZGRyKSB7CisJcmV0dXJuIHV3Yl9yY19hZGRyX2dldChyYywgYWRkciwgVVdCX0FERFJfREVWKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yY19kZXZfYWRkcl9nZXQpOworCisKKy8qKiBTZXQgQHJjJ3MgYWRkcmVzcyB0byBAYWRkciAqLworaW50IHV3Yl9yY19tYWNfYWRkcl9zZXQoc3RydWN0IHV3Yl9yYyAqcmMsCisJCQljb25zdCBzdHJ1Y3QgdXdiX21hY19hZGRyICphZGRyKQoreworCWludCByZXN1bHQgPSAtRUlOVkFMOworCW11dGV4X2xvY2soJnJjLT51d2JfZGV2Lm11dGV4KTsKKwlyZXN1bHQgPSB1d2JfcmNfYWRkcl9zZXQocmMsIGFkZHIsIFVXQl9BRERSX01BQyk7CisJbXV0ZXhfdW5sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiogU2V0IEByYydzIGFkZHJlc3MgdG8gQGFkZHIgKi8KK2ludCB1d2JfcmNfZGV2X2FkZHJfc2V0KHN0cnVjdCB1d2JfcmMgKnJjLAorCQkJY29uc3Qgc3RydWN0IHV3Yl9kZXZfYWRkciAqYWRkcikKK3sKKwlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJcmVzdWx0ID0gdXdiX3JjX2FkZHJfc2V0KHJjLCBhZGRyLCBVV0JfQUREUl9ERVYpOworCXJjLT51d2JfZGV2LmRldl9hZGRyID0gKmFkZHI7CisJbXV0ZXhfdW5sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogUmV0dXJucyAhMCBpZiBnaXZlbiBhZGRyZXNzIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gZGV2aWNlLiAqLworaW50IF9fdXdiX21hY19hZGRyX2Fzc2lnbmVkX2NoZWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqX2FkZHIpCit7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYgPSB0b191d2JfZGV2KGRldik7CisJc3RydWN0IHV3Yl9tYWNfYWRkciAqYWRkciA9IF9hZGRyOworCisJaWYgKCF1d2JfbWFjX2FkZHJfY21wKGFkZHIsICZ1d2JfZGV2LT5tYWNfYWRkcikpCisJCXJldHVybiAhMDsKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJucyAhMCBpZiBnaXZlbiBhZGRyZXNzIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gZGV2aWNlLiAqLworaW50IF9fdXdiX2Rldl9hZGRyX2Fzc2lnbmVkX2NoZWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqX2FkZHIpCit7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYgPSB0b191d2JfZGV2KGRldik7CisJc3RydWN0IHV3Yl9kZXZfYWRkciAqYWRkciA9IF9hZGRyOworCWlmICghdXdiX2Rldl9hZGRyX2NtcChhZGRyLCAmdXdiX2Rldi0+ZGV2X2FkZHIpKQorCQlyZXR1cm4gITA7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXdiX2Rldl9hZGRyX2Fzc2lnbiAtIGFzc2lnbmVkIGEgZ2VuZXJhdGVkIERldkFkZHIgdG8gYSByYWRpbyBjb250cm9sbGVyCisgKiBAcmM6ICAgICAgdGhlIChsb2NhbCkgcmFkaW8gY29udHJvbGxlciBkZXZpY2UgcmVxdWlyaW5nIGEgbmV3IERldkFkZHIKKyAqCisgKiBBIG5ldyBEZXZBZGRyIGlzIHJlcXVpcmVkIHdoZW46CisgKiAgICAtIGZpcnN0IHNldHRpbmcgdXAgYSByYWRpbyBjb250cm9sbGVyCisgKiAgICAtIGlmIHRoZSBoYXJkd2FyZSByZXBvcnRzIGEgRGV2QWRkciBjb25mbGljdAorICoKKyAqIFRoZSBEZXZBZGRyIGlzIHJhbmRvbWx5IGdlbmVyYXRlZCBpbiB0aGUgZ2VuZXJhdGVkIERldkFkZHIgcmFuZ2UKKyAqIFsweDEwMCwgMHhmZWZmXS4gVGhlIG51bWJlciBvZiBkZXZpY2VzIGluIGEgYmVhY29uIGdyb3VwIGlzIGxpbWl0ZWQKKyAqIGJ5IG1NYXhCUExlbmd0aCAoOTYpIHNvIHRoaXMgYWRkcmVzcyBzcGFjZSB3aWxsIG5ldmVyIGJlIGV4aGF1c3RlZC4KKyAqCisgKiBbRUNNQS0zNjhdIDE3LjEuMSwgMTcuMTYuCisgKi8KK2ludCB1d2JfcmNfZGV2X2FkZHJfYXNzaWduKHN0cnVjdCB1d2JfcmMgKnJjKQoreworCXN0cnVjdCB1d2JfZGV2X2FkZHIgbmV3X2FkZHI7CisKKwlkbyB7CisJCWdldF9yYW5kb21fYnl0ZXMobmV3X2FkZHIuZGF0YSwgc2l6ZW9mKG5ld19hZGRyLmRhdGEpKTsKKwl9IHdoaWxlIChuZXdfYWRkci5kYXRhWzBdID09IDB4MDAgfHwgbmV3X2FkZHIuZGF0YVswXSA9PSAweGZmCisJCSB8fCBfX3V3Yl9kZXZfYWRkcl9hc3NpZ25lZChyYywgJm5ld19hZGRyKSk7CisKKwlyZXR1cm4gdXdiX3JjX2Rldl9hZGRyX3NldChyYywgJm5ld19hZGRyKTsKK30KKworLyoqCisgKiB1d2JkX2V2dF9oYW5kbGVfcmNfZGV2X2FkZHJfY29uZmxpY3QgLSBoYW5kbGUgYSBERVZfQUREUl9DT05GTElDVCBldmVudAorICogQGV2dDogdGhlIERFVl9BRERSX0NPTkZMSUNUIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSByYWRpbyBjb250cm9sbGVyCisgKgorICogQSBuZXcgKG5vbi1jb25mbGljdGluZykgRGV2QWRkciBpcyBhc3NpZ25lZCB0byB0aGUgcmFkaW8gY29udHJvbGxlci4KKyAqCisgKiBbRUNNQS0zNjhdIDE3LjEuMS4xLgorICovCitpbnQgdXdiZF9ldnRfaGFuZGxlX3JjX2Rldl9hZGRyX2NvbmZsaWN0KHN0cnVjdCB1d2JfZXZlbnQgKmV2dCkKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IGV2dC0+cmM7CisKKwlyZXR1cm4gdXdiX3JjX2Rldl9hZGRyX2Fzc2lnbihyYyk7Cit9CisKKy8qCisgKiBQcmludCB0aGUgNDgtYml0IEVVSSBNQUMgYWRkcmVzcyBvZiB0aGUgcmFkaW8gY29udHJvbGxlciB3aGVuCisgKiByZWFkaW5nIC9zeXMvY2xhc3MvdXdiX3JjL1hYL21hY19hZGRyZXNzCisgKi8KK3N0YXRpYyBzc2l6ZV90IHV3Yl9yY19tYWNfYWRkcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiA9IHRvX3V3Yl9kZXYoZGV2KTsKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHV3Yl9kZXYtPnJjOworCXN0cnVjdCB1d2JfbWFjX2FkZHIgYWRkcjsKKwlzc2l6ZV90IHJlc3VsdDsKKworCW11dGV4X2xvY2soJnJjLT51d2JfZGV2Lm11dGV4KTsKKwlyZXN1bHQgPSB1d2JfcmNfYWRkcl9nZXQocmMsICZhZGRyLCBVV0JfQUREUl9NQUMpOworCW11dGV4X3VubG9jaygmcmMtPnV3Yl9kZXYubXV0ZXgpOworCWlmIChyZXN1bHQgPj0gMCkgeworCQlyZXN1bHQgPSB1d2JfbWFjX2FkZHJfcHJpbnQoYnVmLCBVV0JfQUREUl9TVFJTSVpFLCAmYWRkcik7CisJCWJ1ZltyZXN1bHQrK10gPSAnXG4nOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUGFyc2UgYSA0OCBiaXQgYWRkcmVzcyB3cml0dGVuIHRvIC9zeXMvY2xhc3MvdXdiX3JjL1hYL21hY19hZGRyZXNzCisgKiBhbmQgaWYgY29ycmVjdCwgc2V0IGl0LgorICovCitzdGF0aWMgc3NpemVfdCB1d2JfcmNfbWFjX2FkZHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCXN0cnVjdCB1d2JfcmMgKnJjID0gdXdiX2Rldi0+cmM7CisJc3RydWN0IHV3Yl9tYWNfYWRkciBhZGRyOworCXNzaXplX3QgcmVzdWx0OworCisJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwgIiVoaHg6JWhoeDolaGh4OiVoaHg6JWhoeDolaGh4XG4iLAorCQkJJmFkZHIuZGF0YVswXSwgJmFkZHIuZGF0YVsxXSwgJmFkZHIuZGF0YVsyXSwKKwkJCSZhZGRyLmRhdGFbM10sICZhZGRyLmRhdGFbNF0sICZhZGRyLmRhdGFbNV0pOworCWlmIChyZXN1bHQgIT0gNikgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGFkZHIuZGF0YSkpIHsKKwkJZGV2X2VycigmcmMtPnV3Yl9kZXYuZGV2LCAicmVmdXNpbmcgdG8gc2V0IG11bHRpY2FzdCAiCisJCQkiTUFDIGFkZHJlc3MgJXNcbiIsIGJ1Zik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlyZXN1bHQgPSB1d2JfcmNfbWFjX2FkZHJfc2V0KHJjLCAmYWRkcik7CisJaWYgKHJlc3VsdCA9PSAwKQorCQlyYy0+dXdiX2Rldi5tYWNfYWRkciA9IGFkZHI7CitvdXQ6CisJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiBzaXplOworfQorREVWSUNFX0FUVFIobWFjX2FkZHJlc3MsIFNfSVJVR08gfCBTX0lXVVNSLCB1d2JfcmNfbWFjX2FkZHJfc2hvdywgdXdiX3JjX21hY19hZGRyX3N0b3JlKTsKKworLyoqIFByaW50IEBhZGRyIHRvIEBidWYsIEByZXR1cm4gYnl0ZXMgd3JpdHRlbiAqLworc2l6ZV90IF9fdXdiX2FkZHJfcHJpbnQoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQlpbnQgdHlwZSkKK3sKKwlzaXplX3QgcmVzdWx0OworCWlmICh0eXBlKQorCQlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBidWZfc2l6ZSwKKwkJCQkgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCisJCQkJICBhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLAorCQkJCSAgYWRkclszXSwgYWRkcls0XSwgYWRkcls1XSk7CisJZWxzZQorCQlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBidWZfc2l6ZSwgIiUwMng6JTAyeCIsCisJCQkJICBhZGRyWzFdLCBhZGRyWzBdKTsKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoX191d2JfYWRkcl9wcmludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9iZWFjb24uYyBiL2RyaXZlcnMvdXdiL2JlYWNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjE4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9iZWFjb24uYwpAQCAtMCwwICsxLDY0MiBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogQmVhY29uIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBkb2NzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKworI2RlZmluZSBEX0xPQ0FMIDAKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworLyoqIFN0YXJ0IEJlYWNvbmluZyBjb21tYW5kIHN0cnVjdHVyZSAqLworc3RydWN0IHV3Yl9yY19jbWRfc3RhcnRfYmVhY29uIHsKKwlzdHJ1Y3QgdXdiX3JjY2IgcmNjYjsKKwlfX2xlMTYgd0JQU1RPZmZzZXQ7CisJdTggYkNoYW5uZWxOdW1iZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0YXRpYyBpbnQgdXdiX3JjX3N0YXJ0X2JlYWNvbihzdHJ1Y3QgdXdiX3JjICpyYywgdTE2IGJwc3Rfb2Zmc2V0LCB1OCBjaGFubmVsKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHV3Yl9yY19jbWRfc3RhcnRfYmVhY29uICpjbWQ7CisJc3RydWN0IHV3Yl9yY19ldnRfY29uZmlybSByZXBseTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWNtZC0+cmNjYi5iQ29tbWFuZFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJY21kLT5yY2NiLndDb21tYW5kID0gY3B1X3RvX2xlMTYoVVdCX1JDX0NNRF9TVEFSVF9CRUFDT04pOworCWNtZC0+d0JQU1RPZmZzZXQgPSBjcHVfdG9fbGUxNihicHN0X29mZnNldCk7CisJY21kLT5iQ2hhbm5lbE51bWJlciA9IGNoYW5uZWw7CisJcmVwbHkucmNlYi5iRXZlbnRUeXBlID0gVVdCX1JDX0NFVF9HRU5FUkFMOworCXJlcGx5LnJjZWIud0V2ZW50ID0gVVdCX1JDX0NNRF9TVEFSVF9CRUFDT047CisJcmVzdWx0ID0gdXdiX3JjX2NtZChyYywgIlNUQVJULUJFQUNPTiIsICZjbWQtPnJjY2IsIHNpemVvZigqY21kKSwKKwkJCSAgICAmcmVwbHkucmNlYiwgc2l6ZW9mKHJlcGx5KSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfY21kOworCWlmIChyZXBseS5iUmVzdWx0Q29kZSAhPSBVV0JfUkNfUkVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycigmcmMtPnV3Yl9kZXYuZGV2LAorCQkJIlNUQVJULUJFQUNPTjogY29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyAoJWQpXG4iLAorCQkJdXdiX3JjX3N0cmVycm9yKHJlcGx5LmJSZXN1bHRDb2RlKSwgcmVwbHkuYlJlc3VsdENvZGUpOworCQlyZXN1bHQgPSAtRUlPOworCX0KK2Vycm9yX2NtZDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgdXdiX3JjX3N0b3BfYmVhY29uKHN0cnVjdCB1d2JfcmMgKnJjKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHV3Yl9yY2NiICpjbWQ7CisJc3RydWN0IHV3Yl9yY19ldnRfY29uZmlybSByZXBseTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWNtZC0+YkNvbW1hbmRUeXBlID0gVVdCX1JDX0NFVF9HRU5FUkFMOworCWNtZC0+d0NvbW1hbmQgPSBjcHVfdG9fbGUxNihVV0JfUkNfQ01EX1NUT1BfQkVBQ09OKTsKKwlyZXBseS5yY2ViLmJFdmVudFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJcmVwbHkucmNlYi53RXZlbnQgPSBVV0JfUkNfQ01EX1NUT1BfQkVBQ09OOworCXJlc3VsdCA9IHV3Yl9yY19jbWQocmMsICJTVE9QLUJFQUNPTiIsIGNtZCwgc2l6ZW9mKCpjbWQpLAorCQkJICAgICZyZXBseS5yY2ViLCBzaXplb2YocmVwbHkpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJaWYgKHJlcGx5LmJSZXN1bHRDb2RlICE9IFVXQl9SQ19SRVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKCZyYy0+dXdiX2Rldi5kZXYsCisJCQkiU1RPUC1CRUFDT046IGNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMgKCVkKVxuIiwKKwkJCXV3Yl9yY19zdHJlcnJvcihyZXBseS5iUmVzdWx0Q29kZSksIHJlcGx5LmJSZXN1bHRDb2RlKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9CitlcnJvcl9jbWQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogU3RhcnQvc3RvcCBiZWFjb25zCisgKgorICogQHJjOiAgICAgICAgICBVV0IgUmFkaW8gQ29udHJvbGxlciB0byBvcGVyYXRlIG9uCisgKiBAY2hhbm5lbDogICAgIFVXQiBjaGFubmVsIG9uIHdoaWNoIHRvIGJlYWNvbiAoV1VTQlt0YWJsZQorICogICAgICAgICAgICAgICA1LTEyXSkuIElmIC0xLCBzdG9wIGJlYWNvbmluZy4KKyAqIEBicHN0X29mZnNldDogQmVhY29uIFBlcmlvZCBTdGFydCBUaW1lIG9mZnNldDsgRklYTUUtZG8gemVybworICoKKyAqIEFjY29yZGluZyB0byBXSENJIDAuOTUgWzQuMTMuNl0gdGhlIGRyaXZlciB3aWxsIG9ubHkgcmVjZWl2ZSB0aGUgUkNFQgorICogb2YgYSBTRVQgSUUgY29tbWFuZCBhZnRlciB0aGUgZGV2aWNlIHNlbnQgdGhlIGZpcnN0IGJlYWNvbiB0aGF0IGluY2x1ZGVzCisgKiB0aGUgSUVzIHNwZWNpZmllZCBpbiB0aGUgU0VUIElFIGNvbW1hbmQuIFNvLCBhZnRlciB3ZSBzdGFydCBiZWFjb25pbmcgd2UKKyAqIGNoZWNrIGlmIHRoZXJlIGlzIGFueXRoaW5nIGluIHRoZSBJRSBjYWNoZSBhbmQgY2FsbCB0aGUgU0VUIElFIGNvbW1hbmQKKyAqIGlmIG5lZWRlZC4KKyAqLworaW50IHV3Yl9yY19iZWFjb24oc3RydWN0IHV3Yl9yYyAqcmMsIGludCBjaGFubmVsLCB1bnNpZ25lZCBicHN0X29mZnNldCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisKKwltdXRleF9sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJaWYgKGNoYW5uZWwgPCAwKQorCQljaGFubmVsID0gLTE7CisJaWYgKGNoYW5uZWwgPT0gLTEpCisJCXJlc3VsdCA9IHV3Yl9yY19zdG9wX2JlYWNvbihyYyk7CisJZWxzZSB7CisJCS8qIGNoYW5uZWwgPj0gMC4uLmRhaCAqLworCQlyZXN1bHQgPSB1d2JfcmNfc3RhcnRfYmVhY29uKHJjLCBicHN0X29mZnNldCwgY2hhbm5lbCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBvdXRfdXA7CisJCWlmIChsZTE2X3RvX2NwdShyYy0+aWVzLT53SUVMZW5ndGgpID4gMCkgeworCQkJcmVzdWx0ID0gdXdiX3JjX3NldF9pZShyYywgcmMtPmllcyk7CisJCQlpZiAocmVzdWx0IDwgMCkgeworCQkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHNldCBuZXcgSUUgb24gZGV2aWNlOiAiCisJCQkJCSIlZFxuIiwgcmVzdWx0KTsKKwkJCQlyZXN1bHQgPSB1d2JfcmNfc3RvcF9iZWFjb24ocmMpOworCQkJCWNoYW5uZWwgPSAtMTsKKwkJCQlicHN0X29mZnNldCA9IDA7CisJCQl9IGVsc2UKKwkJCQlyZXN1bHQgPSAwOworCQl9CisJfQorCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0X3VwOworCXJjLT5iZWFjb25pbmcgPSBjaGFubmVsOworCisJdXdiX25vdGlmeShyYywgTlVMTCwgdXdiX2JnX2pvaW5lZChyYykgPyBVV0JfTk9USUZfQkdfSk9JTiA6IFVXQl9OT1RJRl9CR19MRUFWRSk7CisKK291dF91cDoKKwltdXRleF91bmxvY2soJnJjLT51d2JfZGV2Lm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQmVhY29uIGNhY2hlCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBzcGVlZCB1cCB0aGUgbG9va3VwIG9mIGJlY29uIGluZm9ybWF0aW9uCisgKiB3aGVuIGEgbmV3IGJlYWNvbiBhcnJpdmVzLiBUaGUgVVdCIERhZW1vbiB1c2VzIGl0IGFsc28gdG8ga2VlcCBhCisgKiB0YWIgb2Ygd2hpY2ggZGV2aWNlcyBhcmUgaW4gcmFkaW8gZGlzdGFuY2UgYW5kIHdoaWNoIG5vdC4gV2hlbiBhCisgKiBkZXZpY2UncyBiZWFjb24gc3RheXMgcHJlc2VudCBmb3IgbW9yZSB0aGFuIGEgY2VydGFpbiBhbW91bnQgb2YKKyAqIHRpbWUsIGl0IGlzIGNvbnNpZGVyZWQgYSBuZXcsIHVzYWJsZSBkZXZpY2UuIFdoZW4gYSBiZWFjb24gY2Vhc2VzCisgKiB0byBiZSByZWNlaXZlZCBmb3IgYSBjZXJ0YWluIGFtb3VudCBvZiB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQKKyAqIHRoZSBkZXZpY2UgaXMgZ29uZS4KKyAqCisgKiBGSVhNRTogdXNlIGFuIGFsbG9jYXRvciBmb3IgdGhlIGVudHJpZXMKKyAqIEZJWE1FOiB1c2Ugc29tZXRoaW5nIGZhc3RlciBmb3Igc2VhcmNoIHRoYW4gYSBsaXN0CisgKi8KKworc3RydWN0IHV3Yl9iZWNhIHV3Yl9iZWNhID0geworCS5saXN0ID0gTElTVF9IRUFEX0lOSVQodXdiX2JlY2EubGlzdCksCisJLm11dGV4ID0gX19NVVRFWF9JTklUSUFMSVpFUih1d2JfYmVjYS5tdXRleCkKK307CisKKwordm9pZCB1d2JfYmNlX2tmcmVlKHN0cnVjdCBrcmVmICpfYmNlKQoreworCXN0cnVjdCB1d2JfYmVjYV9lICpiY2UgPSBjb250YWluZXJfb2YoX2JjZSwgc3RydWN0IHV3Yl9iZWNhX2UsIHJlZmNudCk7CisKKwlrZnJlZShiY2UtPmJlKTsKKwlrZnJlZShiY2UpOworfQorCisKKy8qIEZpbmQgYSBiZWFjb24gYnkgZGV2IGFkZHIgaW4gdGhlIGNhY2hlICovCitzdGF0aWMKK3N0cnVjdCB1d2JfYmVjYV9lICpfX3V3Yl9iZWNhX2ZpbmRfYnlkZXYoY29uc3Qgc3RydWN0IHV3Yl9kZXZfYWRkciAqZGV2X2FkZHIpCit7CisJc3RydWN0IHV3Yl9iZWNhX2UgKmJjZSwgKm5leHQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJjZSwgbmV4dCwgJnV3Yl9iZWNhLmxpc3QsIG5vZGUpIHsKKwkJZF9wcmludGYoNiwgTlVMTCwgImxvb2tpbmcgZm9yIGFkZHIgJTAyeDolMDJ4IGluICUwMng6JTAyeFxuIiwKKwkJCSBkZXZfYWRkci0+ZGF0YVswXSwgZGV2X2FkZHItPmRhdGFbMV0sCisJCQkgYmNlLT5kZXZfYWRkci5kYXRhWzBdLCBiY2UtPmRldl9hZGRyLmRhdGFbMV0pOworCQlpZiAoIW1lbWNtcCgmYmNlLT5kZXZfYWRkciwgZGV2X2FkZHIsIHNpemVvZihiY2UtPmRldl9hZGRyKSkpCisJCQlnb3RvIG91dDsKKwl9CisJYmNlID0gTlVMTDsKK291dDoKKwlyZXR1cm4gYmNlOworfQorCisvKiBGaW5kIGEgYmVhY29uIGJ5IGRldiBhZGRyIGluIHRoZSBjYWNoZSAqLworc3RhdGljCitzdHJ1Y3QgdXdiX2JlY2FfZSAqX191d2JfYmVjYV9maW5kX2J5bWFjKGNvbnN0IHN0cnVjdCB1d2JfbWFjX2FkZHIgKm1hY19hZGRyKQoreworCXN0cnVjdCB1d2JfYmVjYV9lICpiY2UsICpuZXh0OworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiY2UsIG5leHQsICZ1d2JfYmVjYS5saXN0LCBub2RlKSB7CisJCWlmICghbWVtY21wKGJjZS0+bWFjX2FkZHIsIG1hY19hZGRyLT5kYXRhLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgdXdiX21hY19hZGRyKSkpCisJCQlnb3RvIG91dDsKKwl9CisJYmNlID0gTlVMTDsKK291dDoKKwlyZXR1cm4gYmNlOworfQorCisvKioKKyAqIHV3Yl9kZXZfZ2V0X2J5X2RldmFkZHIgLSBnZXQgYSBVV0IgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyBEZXZBZGRyCisgKiBAcmM6ICAgICAgdGhlIHJhZGlvIGNvbnRyb2xsZXIgdGhhdCBzYXcgdGhlIGRldmljZQorICogQGRldmFkZHI6IERldkFkZHIgb2YgdGhlIFVXQiBkZXZpY2UgdG8gZmluZAorICoKKyAqIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIGRldmljZSAoaW4gdGhlIGNhc2Ugb2YgYQorICogRGV2QWRkciBjb25mbGljdCksIGJ1dCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB1d2JfZGV2ICp1d2JfZGV2X2dldF9ieV9kZXZhZGRyKHN0cnVjdCB1d2JfcmMgKnJjLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZhZGRyKQoreworCXN0cnVjdCB1d2JfZGV2ICpmb3VuZCA9IE5VTEw7CisJc3RydWN0IHV3Yl9iZWNhX2UgKmJjZTsKKworCW11dGV4X2xvY2soJnV3Yl9iZWNhLm11dGV4KTsKKwliY2UgPSBfX3V3Yl9iZWNhX2ZpbmRfYnlkZXYoZGV2YWRkcik7CisJaWYgKGJjZSkKKwkJZm91bmQgPSB1d2JfZGV2X3RyeV9nZXQocmMsIGJjZS0+dXdiX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZ1d2JfYmVjYS5tdXRleCk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogdXdiX2Rldl9nZXRfYnlfbWFjYWRkciAtIGdldCBhIFVXQiBkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIEVVSS00OAorICogQHJjOiAgICAgIHRoZSByYWRpbyBjb250cm9sbGVyIHRoYXQgc2F3IHRoZSBkZXZpY2UKKyAqIEBkZXZhZGRyOiBFVUktNDggb2YgdGhlIFVXQiBkZXZpY2UgdG8gZmluZAorICovCitzdHJ1Y3QgdXdiX2RldiAqdXdiX2Rldl9nZXRfYnlfbWFjYWRkcihzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHV3Yl9tYWNfYWRkciAqbWFjYWRkcikKK3sKKwlzdHJ1Y3QgdXdiX2RldiAqZm91bmQgPSBOVUxMOworCXN0cnVjdCB1d2JfYmVjYV9lICpiY2U7CisKKwltdXRleF9sb2NrKCZ1d2JfYmVjYS5tdXRleCk7CisJYmNlID0gX191d2JfYmVjYV9maW5kX2J5bWFjKG1hY2FkZHIpOworCWlmIChiY2UpCisJCWZvdW5kID0gdXdiX2Rldl90cnlfZ2V0KHJjLCBiY2UtPnV3Yl9kZXYpOworCW11dGV4X3VubG9jaygmdXdiX2JlY2EubXV0ZXgpOworCisJcmV0dXJuIGZvdW5kOworfQorCisvKiBJbml0aWFsaXplIGEgYmVhY29uIGNhY2hlIGVudHJ5ICovCitzdGF0aWMgdm9pZCB1d2JfYmVjYV9lX2luaXQoc3RydWN0IHV3Yl9iZWNhX2UgKmJjZSkKK3sKKwltdXRleF9pbml0KCZiY2UtPm11dGV4KTsKKwlrcmVmX2luaXQoJmJjZS0+cmVmY250KTsKKwlzdGF0c19pbml0KCZiY2UtPmxxZV9zdGF0cyk7CisJc3RhdHNfaW5pdCgmYmNlLT5yc3NpX3N0YXRzKTsKK30KKworLyoKKyAqIEFkZCBhIGJlYWNvbiB0byB0aGUgY2FjaGUKKyAqCisgKiBAYmU6ICAgICAgICAgQmVhY29uIGV2ZW50IGluZm9ybWF0aW9uCisgKiBAYmY6ICAgICAgICAgQmVhY29uIGZyYW1lIChwYXJ0IG9mIGIsIHJlYWxseSkKKyAqIEB0c19qaWZmaWVzOiBUaW1lc3RhbXAgKGluIGppZmZpZXMpIHdoZW4gdGhlIGJlYWNvbiB3YXMgcmVjZWl2ZWQKKyAqLworc3RydWN0IHV3Yl9iZWNhX2UgKl9fdXdiX2JlY2FfYWRkKHN0cnVjdCB1d2JfcmNfZXZ0X2JlYWNvbiAqYmUsCisJCQkJICBzdHJ1Y3QgdXdiX2JlYWNvbl9mcmFtZSAqYmYsCisJCQkJICB1bnNpZ25lZCBsb25nIHRzX2ppZmZpZXMpCit7CisJc3RydWN0IHV3Yl9iZWNhX2UgKmJjZTsKKworCWJjZSA9IGt6YWxsb2Moc2l6ZW9mKCpiY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYmNlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXV3Yl9iZWNhX2VfaW5pdChiY2UpOworCWJjZS0+dHNfamlmZmllcyA9IHRzX2ppZmZpZXM7CisJYmNlLT51d2JfZGV2ID0gTlVMTDsKKwlsaXN0X2FkZCgmYmNlLT5ub2RlLCAmdXdiX2JlY2EubGlzdCk7CisJcmV0dXJuIGJjZTsKK30KKworLyoKKyAqIFdpcGUgb3V0IGJlYWNvbiBlbnRyaWVzIHRoYXQgYmVjYW1lIHN0YWxlCisgKgorICogUmVtb3ZlIGFzc29jaWF0ZWQgZGV2aWNlc3QgdG9vLgorICovCit2b2lkIHV3Yl9iZWNhX3B1cmdlKHZvaWQpCit7CisJc3RydWN0IHV3Yl9iZWNhX2UgKmJjZSwgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzOworCisJbXV0ZXhfbG9jaygmdXdiX2JlY2EubXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiY2UsIG5leHQsICZ1d2JfYmVjYS5saXN0LCBub2RlKSB7CisJCWV4cGlyZXMgPSBiY2UtPnRzX2ppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJlYWNvbl90aW1lb3V0X21zKTsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZXhwaXJlcykpIHsKKwkJCXV3YmRfZGV2X29mZmFpcihiY2UpOworCQkJbGlzdF9kZWwoJmJjZS0+bm9kZSk7CisJCQl1d2JfYmNlX3B1dChiY2UpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdXdiX2JlY2EubXV0ZXgpOworfQorCisvKiBDbGVhbiB1cCB0aGUgd2hvbGUgYmVhY29uIGNhY2hlLiBDYWxsZWQgb24gc2h1dGRvd24gKi8KK3ZvaWQgdXdiX2JlY2FfcmVsZWFzZSh2b2lkKQoreworCXN0cnVjdCB1d2JfYmVjYV9lICpiY2UsICpuZXh0OworCW11dGV4X2xvY2soJnV3Yl9iZWNhLm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmNlLCBuZXh0LCAmdXdiX2JlY2EubGlzdCwgbm9kZSkgeworCQlsaXN0X2RlbCgmYmNlLT5ub2RlKTsKKwkJdXdiX2JjZV9wdXQoYmNlKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ1d2JfYmVjYS5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHV3Yl9iZWFjb25fcHJpbnQoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfcmNfZXZ0X2JlYWNvbiAqYmUsCisJCQkgICAgIHN0cnVjdCB1d2JfYmVhY29uX2ZyYW1lICpiZikKK3sKKwljaGFyIG1hY2J1ZltVV0JfQUREUl9TVFJTSVpFXTsKKwljaGFyIGRldmJ1ZltVV0JfQUREUl9TVFJTSVpFXTsKKwljaGFyIGRzdGJ1ZltVV0JfQUREUl9TVFJTSVpFXTsKKworCXV3Yl9tYWNfYWRkcl9wcmludChtYWNidWYsIHNpemVvZihtYWNidWYpLCAmYmYtPkRldmljZV9JZGVudGlmaWVyKTsKKwl1d2JfZGV2X2FkZHJfcHJpbnQoZGV2YnVmLCBzaXplb2YoZGV2YnVmKSwgJmJmLT5oZHIuU3JjQWRkcik7CisJdXdiX2Rldl9hZGRyX3ByaW50KGRzdGJ1Ziwgc2l6ZW9mKGRzdGJ1ZiksICZiZi0+aGRyLkRlc3RBZGRyKTsKKwlkZXZfaW5mbygmcmMtPnV3Yl9kZXYuZGV2LAorCQkgIkJFQUNPTiBmcm9tICVzIHRvICVzIChjaCV1IG9mZnNldCAldSBzbG90ICV1IE1BQyAlcylcbiIsCisJCSBkZXZidWYsIGRzdGJ1ZiwgYmUtPmJDaGFubmVsTnVtYmVyLCBiZS0+d0JQU1RPZmZzZXQsCisJCSBiZi0+QmVhY29uX1Nsb3RfTnVtYmVyLCBtYWNidWYpOworfQorCisvKgorICogQGJjZTogYmVhY29uIGNhY2hlIGVudHJ5LCByZWZlcmVuY2VkCisgKi8KK3NzaXplX3QgdXdiX2JjZV9wcmludF9JRXMoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYsIHN0cnVjdCB1d2JfYmVjYV9lICpiY2UsCisJCQkgIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQgPSAwOworCXN0cnVjdCB1d2JfcmNfZXZ0X2JlYWNvbiAqYmU7CisJc3RydWN0IHV3Yl9iZWFjb25fZnJhbWUgKmJmOworCXN0cnVjdCB1d2JfYnVmX2N0eCBjdHggPSB7CisJCS5idWYgPSBidWYsCisJCS5ieXRlcyA9IDAsCisJCS5zaXplID0gc2l6ZQorCX07CisKKwltdXRleF9sb2NrKCZiY2UtPm11dGV4KTsKKwliZSA9IGJjZS0+YmU7CisJaWYgKGJlID09IE5VTEwpCisJCWdvdG8gb3V0OworCWJmID0gKHZvaWQgKikgYmUtPkJlYWNvbkluZm87CisJdXdiX2llX2Zvcl9lYWNoKHV3Yl9kZXYsIHV3Yl9pZV9kdW1wX2hleCwgJmN0eCwKKwkJCWJmLT5JRURhdGEsIGJlLT53QmVhY29uSW5mb0xlbmd0aCAtIHNpemVvZigqYmYpKTsKKwlyZXN1bHQgPSBjdHguYnl0ZXM7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZiY2UtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVmVyaWZ5IHRoYXQgdGhlIGJlYWNvbiBldmVudCwgZnJhbWUgYW5kIElFcyBhcmUgb2sKKyAqLworc3RhdGljIGludCB1d2JfdmVyaWZ5X2JlYWNvbihzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9ldmVudCAqZXZ0LAorCQkJICAgICBzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb24gKmJlKQoreworCWludCByZXN1bHQgPSAtRUlOVkFMOworCXN0cnVjdCB1d2JfYmVhY29uX2ZyYW1lICpiZjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCisJLyogSXMgdGhlcmUgZW5vdWdoIGRhdGEgdG8gZGVjb2RlIGEgYmVhY29uIGZyYW1lPyAqLworCWlmIChldnQtPm5vdGlmLnNpemUgPCBzaXplb2YoKmJlKSArIHNpemVvZigqYmYpKSB7CisJCWRldl9lcnIoZGV2LCAiQkVBQ09OIGV2ZW50OiBOb3QgZW5vdWdoIGRhdGEgdG8gZGVjb2RlICIKKwkJCSIoJXp1IHZzICV6dSBieXRlcyBuZWVkZWQpXG4iLCBldnQtPm5vdGlmLnNpemUsCisJCQlzaXplb2YoKmJlKSArIHNpemVvZigqYmYpKTsKKwkJZ290byBlcnJvcjsKKwl9CisJLyogRklYTUU6IG1ha2Ugc3VyZSBiZWFjb24gZnJhbWUgSUVzIGFyZSBmaW5lIGFuZCB0aGF0IHRoZSB3aG9sZSB0aGluZworCSAqIGlzIGNvbnNpc3RlbnQgKi8KKwlyZXN1bHQgPSAwOworZXJyb3I6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEhhbmRsZSBVV0JfUkNfRVZUX0JFQUNPTiBldmVudHMKKyAqCisgKiBXZSBjaGVjayB0aGUgYmVhY29uIGNhY2hlIHRvIHNlZSBob3cgdGhlIHJlY2VpdmVkIGJlYWNvbiBmYXJlcy4gSWYKKyAqIGlzIHRoZXJlIGFscmVhZHkgd2UgcmVmcmVzaCB0aGUgdGltZXN0YW1wLiBJZiBub3Qgd2UgY3JlYXRlIGEgbmV3CisgKiBlbnRyeS4KKyAqCisgKiBBY2NvcmRpbmcgdG8gdGhlIFdIQ0kgYW5kIFdVU0Igc3BlY3MsIG9ubHkgb25lIGJlYWNvbiBmcmFtZSBpcworICogYWxsb3dlZCBwZXIgbm90aWZpY2F0aW9uIGJsb2NrLCBzbyB3ZSBkb24ndCBib3RoZXIgYWJvdXQgc2Nhbm5pbmcKKyAqIGZvciBtb3JlLgorICovCitpbnQgdXdiZF9ldnRfaGFuZGxlX3JjX2JlYWNvbihzdHJ1Y3QgdXdiX2V2ZW50ICpldnQpCit7CisJaW50IHJlc3VsdCA9IC1FSU5WQUw7CisJc3RydWN0IHV3Yl9yYyAqcmM7CisJc3RydWN0IHV3Yl9yY19ldnRfYmVhY29uICpiZTsKKwlzdHJ1Y3QgdXdiX2JlYWNvbl9mcmFtZSAqYmY7CisJc3RydWN0IHV3Yl9iZWNhX2UgKmJjZTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdHM7CisKKwlyYyA9IGV2dC0+cmM7CisJYmUgPSBjb250YWluZXJfb2YoZXZ0LT5ub3RpZi5yY2ViLCBzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb24sIHJjZWIpOworCXJlc3VsdCA9IHV3Yl92ZXJpZnlfYmVhY29uKHJjLCBldnQsIGJlKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIEZJWE1FOiBoYW5kbGUgYWxpZW4gYmVhY29ucy4gKi8KKwlpZiAoYmUtPmJCZWFjb25UeXBlID09IFVXQl9SQ19CRUFDT05fVFlQRV9PTF9BTElFTiB8fAorCSAgICBiZS0+YkJlYWNvblR5cGUgPT0gVVdCX1JDX0JFQUNPTl9UWVBFX05PTF9BTElFTikgeworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwliZiA9IChzdHJ1Y3QgdXdiX2JlYWNvbl9mcmFtZSAqKSBiZS0+QmVhY29uSW5mbzsKKworCS8qCisJICogRHJvcCBiZWFjb25zIGZyb20gZGV2aWNlcyB3aXRoIGEgTlVMTCBFVUktNDggLS0gdGhleSBjYW5ub3QKKwkgKiBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgorCSAqCisJICogSXQncyBleHBlY3RlZCB0aGF0IHRoZXNlIHdpbGwgYWxsIGJlIFdVU0IgZGV2aWNlcyBhbmQgdGhleQorCSAqIGhhdmUgYSBXVVNCIHNwZWNpZmljIGNvbm5lY3Rpb24gbWV0aG9kIHNvIGlnbm9yaW5nIHRoZW0KKwkgKiBoZXJlIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uCisJICovCisJaWYgKHV3Yl9tYWNfYWRkcl9iY2FzdCgmYmYtPkRldmljZV9JZGVudGlmaWVyKSkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZ1d2JfYmVjYS5tdXRleCk7CisJYmNlID0gX191d2JfYmVjYV9maW5kX2J5bWFjKCZiZi0+RGV2aWNlX0lkZW50aWZpZXIpOworCWlmIChiY2UgPT0gTlVMTCkgeworCQkvKiBOb3QgaW4gdGhlcmUsIGEgbmV3IGRldmljZSBpcyBwaW5naW5nICovCisJCXV3Yl9iZWFjb25fcHJpbnQoZXZ0LT5yYywgYmUsIGJmKTsKKwkJYmNlID0gX191d2JfYmVjYV9hZGQoYmUsIGJmLCBldnQtPnRzX2ppZmZpZXMpOworCQlpZiAoYmNlID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmdXdiX2JlY2EubXV0ZXgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZ1d2JfYmVjYS5tdXRleCk7CisKKwltdXRleF9sb2NrKCZiY2UtPm11dGV4KTsKKwkvKiBwdXJnZSBvbGQgYmVhY29uIGRhdGEgKi8KKwlrZnJlZShiY2UtPmJlKTsKKworCWxhc3RfdHMgPSBiY2UtPnRzX2ppZmZpZXM7CisKKwkvKiBVcGRhdGUgY29tbW9ubHkgdXNlZCBmaWVsZHMgKi8KKwliY2UtPnRzX2ppZmZpZXMgPSBldnQtPnRzX2ppZmZpZXM7CisJYmNlLT5iZSA9IGJlOworCWJjZS0+ZGV2X2FkZHIgPSBiZi0+aGRyLlNyY0FkZHI7CisJYmNlLT5tYWNfYWRkciA9ICZiZi0+RGV2aWNlX0lkZW50aWZpZXI7CisJYmUtPndCUFNUT2Zmc2V0ID0gbGUxNl90b19jcHUoYmUtPndCUFNUT2Zmc2V0KTsKKwliZS0+d0JlYWNvbkluZm9MZW5ndGggPSBsZTE2X3RvX2NwdShiZS0+d0JlYWNvbkluZm9MZW5ndGgpOworCXN0YXRzX2FkZF9zYW1wbGUoJmJjZS0+bHFlX3N0YXRzLCBiZS0+YkxRSSAtIDcpOworCXN0YXRzX2FkZF9zYW1wbGUoJmJjZS0+cnNzaV9zdGF0cywgYmUtPmJSU1NJICsgMTgpOworCisJLyoKKwkgKiBUaGlzIG1pZ2h0IGJlIGEgYmVhY29uIGZyb20gYSBuZXcgZGV2aWNlLgorCSAqLworCWlmIChiY2UtPnV3Yl9kZXYgPT0gTlVMTCkKKwkJdXdiZF9kZXZfb25haXIoZXZ0LT5yYywgYmNlKTsKKworCW11dGV4X3VubG9jaygmYmNlLT5tdXRleCk7CisKKwlyZXR1cm4gMTsgLyogd2Uga2VlcCB0aGUgZXZlbnQgZGF0YSAqLworfQorCisvKgorICogSGFuZGxlIFVXQl9SQ19FVlRfQkVBQ09OX1NJWkUgZXZlbnRzCisgKgorICogWFhYWFgKKyAqLworaW50IHV3YmRfZXZ0X2hhbmRsZV9yY19iZWFjb25fc2l6ZShzdHJ1Y3QgdXdiX2V2ZW50ICpldnQpCit7CisJaW50IHJlc3VsdCA9IC1FSU5WQUw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmV2dC0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfcmNfZXZ0X2JlYWNvbl9zaXplICpiczsKKworCS8qIElzIHRoZXJlIGVub3VnaCBkYXRhIHRvIGRlY29kZSB0aGUgZXZlbnQ/ICovCisJaWYgKGV2dC0+bm90aWYuc2l6ZSA8IHNpemVvZigqYnMpKSB7CisJCWRldl9lcnIoZGV2LCAiQkVBQ09OIFNJWkUgbm90aWZpY2F0aW9uOiBOb3QgZW5vdWdoIGRhdGEgdG8gIgorCQkJImRlY29kZSAoJXp1IHZzICV6dSBieXRlcyBuZWVkZWQpXG4iLAorCQkJZXZ0LT5ub3RpZi5zaXplLCBzaXplb2YoKmJzKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCWJzID0gY29udGFpbmVyX29mKGV2dC0+bm90aWYucmNlYiwgc3RydWN0IHV3Yl9yY19ldnRfYmVhY29uX3NpemUsIHJjZWIpOworCWlmICgwKQorCQlkZXZfaW5mbyhkZXYsICJCZWFjb24gc2l6ZSBjaGFuZ2VkIHRvICV1IGJ5dGVzICIKKwkJCSIoRklYTUU6IGFjdGlvbj8pXG4iLCBsZTE2X3RvX2NwdShicy0+d05ld0JlYWNvblNpemUpKTsKKwllbHNlIHsKKwkJLyogdGVtcG9yYXJ5IGhhY2sgdW50aWwgd2UgZG8gc29tZXRoaW5nIHdpdGggdGhpcyBtZXNzYWdlLi4uICovCisJCXN0YXRpYyB1bnNpZ25lZCBjb3VudDsKKwkJaWYgKCsrY291bnQgJSAxMDAwID09IDApCisJCQlkZXZfaW5mbyhkZXYsICJCZWFjb24gc2l6ZSBjaGFuZ2VkICV1IHRpbWVzICIKKwkJCQkiKEZJWE1FOiBhY3Rpb24/KVxuIiwgY291bnQpOworCX0KKwlyZXN1bHQgPSAwOworZXJyb3I6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiB1d2JkX2V2dF9oYW5kbGVfcmNfYnBfc2xvdF9jaGFuZ2UgLSBoYW5kbGUgYSBCUF9TTE9UX0NIQU5HRSBldmVudAorICogQGV2dDogdGhlIEJQX1NMT1RfQ0hBTkdFIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSByYWRpbyBjb250cm9sbGVyCisgKgorICogSWYgdGhlIGV2ZW50IGluZGljYXRlcyB0aGF0IG5vIGJlYWNvbiBwZXJpb2Qgc2xvdHMgd2VyZSBhdmFpbGFibGUKKyAqIHRoZW4gcmFkaW8gY29udHJvbGxlciBoYXMgdHJhbnNpdGlvbmVkIHRvIGEgbm9uLWJlYWNvbmluZyBzdGF0ZS4KKyAqIE90aGVyd2lzZSwgc2ltcGx5IHNhdmUgdGhlIGN1cnJlbnQgYmVhY29uIHNsb3QuCisgKi8KK2ludCB1d2JkX2V2dF9oYW5kbGVfcmNfYnBfc2xvdF9jaGFuZ2Uoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KQoreworCXN0cnVjdCB1d2JfcmMgKnJjID0gZXZ0LT5yYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfcmNfZXZ0X2JwX3Nsb3RfY2hhbmdlICpicHNjOworCisJaWYgKGV2dC0+bm90aWYuc2l6ZSA8IHNpemVvZigqYnBzYykpIHsKKwkJZGV2X2VycihkZXYsICJCUCBTTE9UIENIQU5HRSBldmVudDogTm90IGVub3VnaCBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWJwc2MgPSBjb250YWluZXJfb2YoZXZ0LT5ub3RpZi5yY2ViLCBzdHJ1Y3QgdXdiX3JjX2V2dF9icF9zbG90X2NoYW5nZSwgcmNlYik7CisKKwltdXRleF9sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJaWYgKHV3Yl9yY19ldnRfYnBfc2xvdF9jaGFuZ2Vfbm9fc2xvdChicHNjKSkgeworCQlkZXZfaW5mbyhkZXYsICJzdG9wcGVkIGJlYWNvbmluZzogTm8gZnJlZSBzbG90cyBpbiBCUFxuIik7CisJCXJjLT5iZWFjb25pbmcgPSAtMTsKKwl9IGVsc2UKKwkJcmMtPnV3Yl9kZXYuYmVhY29uX3Nsb3QgPSB1d2JfcmNfZXZ0X2JwX3Nsb3RfY2hhbmdlX3Nsb3RfbnVtKGJwc2MpOworCW11dGV4X3VubG9jaygmcmMtPnV3Yl9kZXYubXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogSGFuZGxlIFVXQl9SQ19FVlRfQlBPSUVfQ0hBTkdFIGV2ZW50cworICoKKyAqIFhYWFhYCisgKi8KK3N0cnVjdCB1d2JfaWVfYnBvIHsKKwlzdHJ1Y3QgdXdiX2llX2hkciBoZHI7CisJdTggICAgICAgICAgICAgICAgYnBfbGVuZ3RoOworCXU4ICAgICAgICAgICAgICAgIGRhdGFbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK2ludCB1d2JkX2V2dF9oYW5kbGVfcmNfYnBvaWVfY2hhbmdlKHN0cnVjdCB1d2JfZXZlbnQgKmV2dCkKK3sKKwlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZXZ0LT5yYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9yY19ldnRfYnBvaWVfY2hhbmdlICpicG9pZWM7CisJc3RydWN0IHV3Yl9pZV9icG8gKmJwb2llOworCXN0YXRpYyB1bnNpZ25lZCBjb3VudDsJLyogRklYTUU6IHRoaXMgaXMgYSB0ZW1wIGhhY2sgKi8KKwlzaXplX3QgaWVzaXplOworCisJLyogSXMgdGhlcmUgZW5vdWdoIGRhdGEgdG8gZGVjb2RlIGl0PyAqLworCWlmIChldnQtPm5vdGlmLnNpemUgPCBzaXplb2YoKmJwb2llYykpIHsKKwkJZGV2X2VycihkZXYsICJCUE9JRUMgbm90aWZpY2F0aW9uOiBOb3QgZW5vdWdoIGRhdGEgdG8gIgorCQkJImRlY29kZSAoJXp1IHZzICV6dSBieXRlcyBuZWVkZWQpXG4iLAorCQkJZXZ0LT5ub3RpZi5zaXplLCBzaXplb2YoKmJwb2llYykpOworCQlnb3RvIGVycm9yOworCX0KKwlicG9pZWMgPSBjb250YWluZXJfb2YoZXZ0LT5ub3RpZi5yY2ViLCBzdHJ1Y3QgdXdiX3JjX2V2dF9icG9pZV9jaGFuZ2UsIHJjZWIpOworCWllc2l6ZSA9IGxlMTZfdG9fY3B1KGJwb2llYy0+d0JQT0lFTGVuZ3RoKTsKKwlpZiAoaWVzaXplIDwgc2l6ZW9mKCpicG9pZSkpIHsKKwkJZGV2X2VycihkZXYsICJCUE9JRUMgbm90aWZpY2F0aW9uOiBOb3QgZW5vdWdoIElFIGRhdGEgdG8gIgorCQkJImRlY29kZSAoJXp1IHZzICV6dSBieXRlcyBuZWVkZWQpXG4iLAorCQkJaWVzaXplLCBzaXplb2YoKmJwb2llKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICgrK2NvdW50ICUgMTAwMCA9PSAwKQkvKiBMYW1lIHBsYWNlaG9sZGVyICovCisJCWRldl9pbmZvKGRldiwgIkJQT0lFOiAldSBjaGFuZ2VzIHJlY2VpdmVkXG4iLCBjb3VudCk7CisJLyoKKwkgKiBGSVhNRTogQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgZ28gb3ZlciBhbGwgdGhlIElFcyBpbiB0aGUKKwkgKiAgICAgICAgYnBvaWVjLT5CUE9JRSBhcnJheSBhbmQgYWN0IG9uIGVhY2guCisJICovCisJcmVzdWx0ID0gMDsKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogdXdiX2JnX2pvaW5lZCAtIGlzIHRoZSBSQyBpbiBhIGJlYWNvbiBncm91cD8KKyAqIEByYzogdGhlIHJhZGlvIGNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJhZGlvIGNvbnRyb2xsZXIgaXMgaW4gYSBiZWFjb24gZ3JvdXAgKGV2ZW4gaWYKKyAqIGl0J3MgdGhlIHNvbGUgbWVtYmVyKS4KKyAqLworaW50IHV3Yl9iZ19qb2luZWQoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJcmV0dXJuIHJjLT5iZWFjb25pbmcgIT0gLTE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfYmdfam9pbmVkKTsKKworLyoKKyAqIFByaW50IGJlYWNvbmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHNzaXplX3QgdXdiX3JjX2JlYWNvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYgPSB0b191d2JfZGV2KGRldik7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSB1d2JfZGV2LT5yYzsKKwlzc2l6ZV90IHJlc3VsdDsKKworCW11dGV4X2xvY2soJnJjLT51d2JfZGV2Lm11dGV4KTsKKwlyZXN1bHQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCByYy0+YmVhY29uaW5nKTsKKwltdXRleF91bmxvY2soJnJjLT51d2JfZGV2Lm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogU3RhcnQgYmVhY29uaW5nIG9uIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCwgb3Igc3RvcCBiZWFjb25pbmcuCisgKgorICogVGhlIEJQU1Qgb2Zmc2V0IG9mIHdoZW4gdG8gc3RhcnQgc2VhcmNoaW5nIGZvciBhIGJlYWNvbiBncm91cCB0bworICogam9pbiBtYXkgYmUgc3BlY2lmaWVkLgorICovCitzdGF0aWMgc3NpemVfdCB1d2JfcmNfYmVhY29uX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCXN0cnVjdCB1d2JfcmMgKnJjID0gdXdiX2Rldi0+cmM7CisJaW50IGNoYW5uZWw7CisJdW5zaWduZWQgYnBzdF9vZmZzZXQgPSAwOworCXNzaXplX3QgcmVzdWx0ID0gLUVJTlZBTDsKKworCXJlc3VsdCA9IHNzY2FuZihidWYsICIlZCAldVxuIiwgJmNoYW5uZWwsICZicHN0X29mZnNldCk7CisJaWYgKHJlc3VsdCA+PSAxKQorCQlyZXN1bHQgPSB1d2JfcmNfYmVhY29uKHJjLCBjaGFubmVsLCBicHN0X29mZnNldCk7CisKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IHNpemU7Cit9CitERVZJQ0VfQVRUUihiZWFjb24sIFNfSVJVR08gfCBTX0lXVVNSLCB1d2JfcmNfYmVhY29uX3Nob3csIHV3Yl9yY19iZWFjb25fc3RvcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvZHJpdmVyLmMgYi9kcml2ZXJzL3V3Yi9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjFjZGViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvZHJpdmVyLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBVbHRyYSBXaWRlIEJhbmQKKyAqIERyaXZlciBpbml0aWFsaXphdGlvbiwgZXRjCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICoKKyAqIExpZmUgY3ljbGU6IEZJWE1FOiBleHBsYWluCisgKgorICogIFVXQiByYWRpbyBjb250cm9sbGVyOgorICoKKyAqICAgIDEuIGFsbG9jIGEgdXdiX3JjLCB6ZXJvIGl0CisgKiAgICAyLiBjYWxsIHV3Yl9yY19pbml0KCkgb24gaXQgdG8gc2V0IGl0IHVwICsgb3BzICh3b24ndCBkbyBhbnkKKyAqICAgICAgIGtpbmQgb2YgYWxsb2NhdGlvbikKKyAqICAgIDMuIHJlZ2lzdGVyIChub3cgaXQgaXMgb3duZWQgYnkgdGhlIFVXQiBzdGFjay0tZGVyZWdpc3RlciBiZWZvcmUKKyAqICAgICAgIGZyZWVpbmcvZGVzdHJveWluZykuCisgKiAgICA0LiBJdCBsaXZlcyBvbiBpdCdzIG93biBub3cgKFVXQiBzdGFjayBoYW5kbGVzKS0td2hlbiBpdAorICogICAgICAgZGlzY29ubmVjdHMsIGNhbGwgdW5yZWdpc3RlcigpCisgKiAgICA1LiBmcmVlIGl0LgorICoKKyAqICAgIE1ha2Ugc3VyZSB5b3UgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgdXdiX3JjIGJlZm9yZSBjYWxsaW5nCisgKiAgICBhbnkgb2YgdGhlIFVXQiBBUEkgZnVuY3Rpb25zLgorICoKKyAqIFRPRE86CisgKgorICogMS4gTG9ja2luZyBhbmQgbGlmZSBjeWNsZSBtYW5hZ2VtZW50IGlzIGNyYXBweSBzdGlsbC4gQWxsIGVudHJ5CisgKiAgICBwb2ludHMgdG8gdGhlIFVXQiBIQ0QgQVBJIGFzc3VtZSB5b3UgaGF2ZSBhIHJlZmVyZW5jZSBvbiB0aGUKKyAqICAgIHV3Yl9yYyBzdHJ1Y3R1cmUgYW5kIHRoYXQgaXQgd29uJ3QgZ28gYXdheS4gVGhleSBtdXRleCBsb2NrIGl0CisgKiAgICBiZWZvcmUgZG9pbmcgYW55dGhpbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKworCisvKiBVV0Igc3RhY2sgYXR0cmlidXRlcyAob3IgJ2dsb2JhbCcgY29uc3RhbnRzKSAqLworCisKKy8qKgorICogSWYgYSBiZWFjb24gZGlzc2FwZWFycyBmb3IgbG9uZ2VyIHRoYW4gdGhpcywgdGhlbiB3ZSBjb25zaWRlciB0aGUKKyAqIGRldmljZSB3aG8gd2FzIHJlcHJlc2VudGVkIGJ5IHRoYXQgYmVhY29uIHRvIGJlIGdvbmUuCisgKgorICogRUNNQS0zNjhbMTcuMi4zLCBsYXN0IHBhcmFdIGVzdGFibGlzaGVzIHRoYXQgYSBkZXZpY2UgbXVzdCBub3QKKyAqIGNvbnNpZGVyIGEgZGV2aWNlIHRvIGJlIGl0cyBuZWlnaGJvdXIgaWYgaGUgZG9lc24ndCByZWNlaXZlIGEgYmVhY29uCisgKiBmb3IgbW9yZSB0aGFuIG1NYXhMb3N0QmVhY29ucy4gbU1heExvc3RCZWFjb25zIGlzIGRlZmluZWQgaW4KKyAqIEVDTUEtMzY4WzE3LjE2XSBhcyAzOyBiZWNhdXNlIHdlIGNhbiBnZXQgb25seSBvbmUgYmVhY29uIHBlcgorICogc3VwZXJmcmFtZSwgdGhhdCdkIGJlIDMgKiA2NW1zID0gMTk1IH4gMjAwIG1zLiBMZXQncyBnaXZlIGl0IHRpbWUKKyAqIGZvciBqaXR0ZXIgYW5kIHN0dWZmIGFuZCBtYWtlIGl0IDUwMCBtcy4KKyAqLwordW5zaWduZWQgbG9uZyBiZWFjb25fdGltZW91dF9tcyA9IDUwMDsKKworc3RhdGljCitzc2l6ZV90IGJlYWNvbl90aW1lb3V0X21zX3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKQoreworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbHVcbiIsIGJlYWNvbl90aW1lb3V0X21zKTsKK30KKworc3RhdGljCitzc2l6ZV90IGJlYWNvbl90aW1lb3V0X21zX3N0b3JlKHN0cnVjdCBjbGFzcyAqY2xhc3MsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJ0OworCXNzaXplX3QgcmVzdWx0OworCXJlc3VsdCA9IHNzY2FuZihidWYsICIlbHUiLCAmYnQpOworCWlmIChyZXN1bHQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmVhY29uX3RpbWVvdXRfbXMgPSBidDsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgdXdiX2NsYXNzX2F0dHJzW10gPSB7CisJX19BVFRSKGJlYWNvbl90aW1lb3V0X21zLCBTX0lXVVNSIHwgU19JUlVHTywKKwkgICAgICAgYmVhY29uX3RpbWVvdXRfbXNfc2hvdywgYmVhY29uX3RpbWVvdXRfbXNfc3RvcmUpLAorCV9fQVRUUl9OVUxMLAorfTsKKworLyoqIERldmljZSBtb2RlbCBjbGFzc2VzICovCitzdHJ1Y3QgY2xhc3MgdXdiX3JjX2NsYXNzID0geworCS5uYW1lICAgICAgICA9ICJ1d2JfcmMiLAorCS5jbGFzc19hdHRycyA9IHV3Yl9jbGFzc19hdHRycywKK307CisKKworc3RhdGljIGludCBfX2luaXQgdXdiX3N1YnN5c19pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlyZXN1bHQgPSB1d2JfZXN0X2NyZWF0ZSgpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXdiOiBDYW4ndCBpbml0aWFsaXplIEVTVCBzdWJzeXN0ZW1cbiIpOworCQlnb3RvIGVycm9yX2VzdF9pbml0OworCX0KKworCXJlc3VsdCA9IGNsYXNzX3JlZ2lzdGVyKCZ1d2JfcmNfY2xhc3MpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX3V3Yl9yY19jbGFzc19yZWdpc3RlcjsKKwl1d2JkX3N0YXJ0KCk7CisJdXdiX2RiZ19pbml0KCk7CisJcmV0dXJuIDA7CisKK2Vycm9yX3V3Yl9yY19jbGFzc19yZWdpc3RlcjoKKwl1d2JfZXN0X2Rlc3Ryb3koKTsKK2Vycm9yX2VzdF9pbml0OgorCXJldHVybiByZXN1bHQ7Cit9Cittb2R1bGVfaW5pdCh1d2Jfc3Vic3lzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXdiX3N1YnN5c19leGl0KHZvaWQpCit7CisJdXdiX2RiZ19leGl0KCk7CisJdXdiZF9zdG9wKCk7CisJY2xhc3NfdW5yZWdpc3RlcigmdXdiX3JjX2NsYXNzKTsKKwl1d2JfZXN0X2Rlc3Ryb3koKTsKKwlyZXR1cm47Cit9Cittb2R1bGVfZXhpdCh1d2Jfc3Vic3lzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVbHRyYSBXaWRlIEJhbmQgY29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvZHJwLWF2YWlsLmMgYi9kcml2ZXJzL3V3Yi9kcnAtYXZhaWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmViZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvZHJwLWF2YWlsLmMKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBVbHRyYSBXaWRlIEJhbmQKKyAqIERSUCBhdmFpbGFiaWxpdHkgbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICoKKyAqIE1hbmFnZSBEUlAgQXZhaWxhYmlsaXR5ICh0aGUgTUFTIGF2YWlsYWJsZSBmb3IgRFJQCisgKiByZXNlcnZhdGlvbnMpLiBUaHVzOgorICoKKyAqIC0gSGFuZGxlIERSUCBBdmFpbGFiaWxpdHkgQ2hhbmdlIG5vdGlmaWNhdGlvbnMKKyAqCisgKiAtIEFsbG93IHRoZSByZXNlcnZhdGlvbiBtYW5hZ2VyIHRvIGluZGljYXRlIE1BUyByZXNlcnZlZC9yZWxlYXNlZAorICogICBieSBsb2NhbCAob3duZWQgYnkvdGFyZ2V0ZWQgYXQgdGhlIHJhZGlvIGNvbnRyb2xsZXIpCisgKiAgIHJlc2VydmF0aW9ucy4KKyAqCisgKiAtIEJhc2VkIG9uIHRoZSB0d28gc291cmNlcyBhYm92ZSwgZ2VuZXJhdGUgYSBEUlAgQXZhaWxhYmlsaXR5IElFIHRvCisgKiAgIGJlIGluY2x1ZGVkIGluIHRoZSBiZWFjb24uCisgKgorICogU2VlIGFsc28gdGhlIGRvY3VtZW50YXRpb24gZm9yIHN0cnVjdCB1d2JfZHJwX2F2YWlsLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgInV3Yi1pbnRlcm5hbC5oIgorCisvKioKKyAqIHV3Yl9kcnBfYXZhaWxfaW5pdCAtIGluaXRpYWxpemUgYW4gUkMncyBNQVMgYXZhaWxhYmlsaXR5CisgKgorICogQWxsIE1BUyBhcmUgYXZhaWxhYmxlIGluaXRpYWxseS4gIFRoZSBSQyB3aWxsIGluZm9ybSB1c2Ugd2hpY2gKKyAqIHNsb3RzIGFyZSB1c2VkIGZvciB0aGUgQlAgKGl0IG1heSBjaGFuZ2UgaW4gc2l6ZSkuCisgKi8KK3ZvaWQgdXdiX2RycF9hdmFpbF9pbml0KHN0cnVjdCB1d2JfcmMgKnJjKQoreworCWJpdG1hcF9maWxsKHJjLT5kcnBfYXZhaWwuZ2xvYmFsLCBVV0JfTlVNX01BUyk7CisJYml0bWFwX2ZpbGwocmMtPmRycF9hdmFpbC5sb2NhbCwgVVdCX05VTV9NQVMpOworCWJpdG1hcF9maWxsKHJjLT5kcnBfYXZhaWwucGVuZGluZywgVVdCX05VTV9NQVMpOworfQorCisvKgorICogRGV0ZXJtaW5lIE1BUyBhdmFpbGFibGUgZm9yIG5ldyBsb2NhbCByZXNlcnZhdGlvbnMuCisgKgorICogYXZhaWwgPSBnbG9iYWwgJiBsb2NhbCAmIHBlbmRpbmcKKyAqLworc3RhdGljIHZvaWQgdXdiX2RycF9hdmFpbGFibGUoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfbWFzX2JtICphdmFpbCkKK3sKKwliaXRtYXBfYW5kKGF2YWlsLT5ibSwgcmMtPmRycF9hdmFpbC5nbG9iYWwsIHJjLT5kcnBfYXZhaWwubG9jYWwsIFVXQl9OVU1fTUFTKTsKKwliaXRtYXBfYW5kKGF2YWlsLT5ibSwgYXZhaWwtPmJtLCByYy0+ZHJwX2F2YWlsLnBlbmRpbmcsIFVXQl9OVU1fTUFTKTsKK30KKworLyoqCisgKiB1d2JfZHJwX2F2YWlsX3Jlc2VydmVfcGVuZGluZyAtIHJlc2VydmUgTUFTIGZvciBhIG5ldyByZXNlcnZhdGlvbgorICogQHJjOiB0aGUgcmFkaW8gY29udHJvbGxlcgorICogQG1hczogdGhlIE1BUyB0byByZXNlcnZlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC1FQlVTWSBpZiB0aGUgTUFTIHJlcXVlc3RlZCBhcmVuJ3QgYXZhaWxhYmxlLgorICovCitpbnQgdXdiX2RycF9hdmFpbF9yZXNlcnZlX3BlbmRpbmcoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfbWFzX2JtICptYXMpCit7CisJc3RydWN0IHV3Yl9tYXNfYm0gYXZhaWw7CisKKwl1d2JfZHJwX2F2YWlsYWJsZShyYywgJmF2YWlsKTsKKwlpZiAoIWJpdG1hcF9zdWJzZXQobWFzLT5ibSwgYXZhaWwuYm0sIFVXQl9OVU1fTUFTKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWJpdG1hcF9hbmRub3QocmMtPmRycF9hdmFpbC5wZW5kaW5nLCByYy0+ZHJwX2F2YWlsLnBlbmRpbmcsIG1hcy0+Ym0sIFVXQl9OVU1fTUFTKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB1d2JfZHJwX2F2YWlsX3Jlc2VydmUgLSByZXNlcnZlIE1BUyBmb3IgYW4gZXN0YWJsaXNoZWQgcmVzZXJ2YXRpb24KKyAqIEByYzogdGhlIHJhZGlvIGNvbnRyb2xsZXIKKyAqIEBtYXM6IHRoZSBNQVMgdG8gcmVzZXJ2ZQorICovCit2b2lkIHV3Yl9kcnBfYXZhaWxfcmVzZXJ2ZShzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9tYXNfYm0gKm1hcykKK3sKKwliaXRtYXBfb3IocmMtPmRycF9hdmFpbC5wZW5kaW5nLCByYy0+ZHJwX2F2YWlsLnBlbmRpbmcsIG1hcy0+Ym0sIFVXQl9OVU1fTUFTKTsKKwliaXRtYXBfYW5kbm90KHJjLT5kcnBfYXZhaWwubG9jYWwsIHJjLT5kcnBfYXZhaWwubG9jYWwsIG1hcy0+Ym0sIFVXQl9OVU1fTUFTKTsKKwlyYy0+ZHJwX2F2YWlsLmllX3ZhbGlkID0gZmFsc2U7Cit9CisKKy8qKgorICogdXdiX2RycF9hdmFpbF9yZWxlYXNlIC0gcmVsZWFzZSBNQVMgZnJvbSBhIHBlbmRpbmcgb3IgZXN0YWJsaXNoZWQgcmVzZXJ2YXRpb24KKyAqIEByYzogdGhlIHJhZGlvIGNvbnRyb2xsZXIKKyAqIEBtYXM6IHRoZSBNQVMgdG8gcmVsZWFzZQorICovCit2b2lkIHV3Yl9kcnBfYXZhaWxfcmVsZWFzZShzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9tYXNfYm0gKm1hcykKK3sKKwliaXRtYXBfb3IocmMtPmRycF9hdmFpbC5sb2NhbCwgcmMtPmRycF9hdmFpbC5sb2NhbCwgbWFzLT5ibSwgVVdCX05VTV9NQVMpOworCWJpdG1hcF9vcihyYy0+ZHJwX2F2YWlsLnBlbmRpbmcsIHJjLT5kcnBfYXZhaWwucGVuZGluZywgbWFzLT5ibSwgVVdCX05VTV9NQVMpOworCXJjLT5kcnBfYXZhaWwuaWVfdmFsaWQgPSBmYWxzZTsKK30KKworLyoqCisgKiB1d2JfZHJwX2F2YWlsX2llX3VwZGF0ZSAtIHVwZGF0ZSB0aGUgRFJQIEF2YWlsYWJpbGl0eSBJRQorICogQHJjOiB0aGUgcmFkaW8gY29udHJvbGxlcgorICoKKyAqIGF2YWlsID0gZ2xvYmFsICYgbG9jYWwKKyAqLwordm9pZCB1d2JfZHJwX2F2YWlsX2llX3VwZGF0ZShzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlzdHJ1Y3QgdXdiX21hc19ibSBhdmFpbDsKKworCWJpdG1hcF9hbmQoYXZhaWwuYm0sIHJjLT5kcnBfYXZhaWwuZ2xvYmFsLCByYy0+ZHJwX2F2YWlsLmxvY2FsLCBVV0JfTlVNX01BUyk7CisKKwlyYy0+ZHJwX2F2YWlsLmllLmhkci5lbGVtZW50X2lkID0gVVdCX0lFX0RSUF9BVkFJTEFCSUxJVFk7CisJcmMtPmRycF9hdmFpbC5pZS5oZHIubGVuZ3RoID0gVVdCX05VTV9NQVMgLyA4OworCXV3Yl9tYXNfYm1fY29weV9sZShyYy0+ZHJwX2F2YWlsLmllLmJtcCwgJmF2YWlsKTsKKwlyYy0+ZHJwX2F2YWlsLmllX3ZhbGlkID0gdHJ1ZTsKK30KKworLyoqCisgKiBDcmVhdGUgYW4gdW5zaWduZWQgbG9uZyBmcm9tIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBieXRlIHN0cmVhbS4KKyAqCisgKiBAYXJyYXk6IHBvaW50ZXIgdG8gYnVmZmVyCisgKiBAaXRyOiAgIGluZGV4IG9mIGJ1ZmZlciBmcm9tIHdoZXJlIHdlIHN0YXJ0CisgKiBAbGVuOiAgIHRoZSBidWZmZXIncyByZW1haW5pbmcgc2l6ZSBtYXkgbm90IGJlIGV4YWN0IG11bHRpcGxlIG9mCisgKiAgICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwgQGxlbiBpcyB0aGUgbGVuZ3RoIG9mIGJ1ZmZlciB0aGF0IG5lZWRzCisgKiAgICAgICAgIHRvIGJlIGNvbnZlcnRlZC4gVGhpcyB3aWxsIGJlIHNpemVvZih1bnNpZ25lZCBsb25nKSBvciBzbWFsbGVyCisgKiAgICAgICAgIChCVUcgaWYgbm90KS4gSWYgaXQgaXMgc21hbGxlciB0aGVuIHdlIHdpbGwgcGFkIHRoZSByZW1haW5pbmcKKyAqICAgICAgICAgc3BhY2Ugb2YgdGhlIHJlc3VsdCB3aXRoIHplcm9lcy4KKyAqLworc3RhdGljCit1bnNpZ25lZCBsb25nIGdldF92YWwodTggKmFycmF5LCBzaXplX3QgaXRyLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKKwlzaXplX3QgdG9wID0gaXRyICsgbGVuOworCisJQlVHX09OKGxlbiA+IHNpemVvZih2YWwpKTsKKworCXdoaWxlIChpdHIgPCB0b3ApIHsKKwkJdmFsIDw8PSA4OworCQl2YWwgfD0gYXJyYXlbdG9wIC0gMV07CisJCXRvcC0tOworCX0KKwl2YWwgPDw9IDggKiAoc2l6ZW9mKHZhbCkgLSBsZW4pOyAvKiBwYWRkaW5nICovCisJcmV0dXJuIHZhbDsKK30KKworLyoqCisgKiBJbml0aWFsaXplIGJpdG1hcCBmcm9tIGRhdGEgYnVmZmVyLgorICoKKyAqIFRoZSBiaXRtYXAgdG8gYmUgY29udmVydGVkIGNvdWxkIGNvbWUgZnJvbSBhIElFLCBmb3IgZXhhbXBsZSBhCisgKiBEUlAgQXZhaWxhYmlsaXR5IElFLgorICogRnJvbSBFQ01BLTM2OCAxLjAgWzE2LjguN106ICIKKyAqIG9jdGV0czogMSAgICAgICAgICAgIDEgICAgICAgICAgICAgICBOICogKDAgdG8gMzIpCisgKiAgICAgICAgIEVsZW1lbnQgSUQgICBMZW5ndGggKD1OKSAgICAgRFJQIEF2YWlsYWJpbGl0eSBCaXRtYXAKKyAqCisgKiBUaGUgRFJQIEF2YWlsYWJpbGl0eSBCaXRtYXAgZmllbGQgaXMgdXAgdG8gMjU2IGJpdHMgbG9uZywgb25lCisgKiBiaXQgZm9yIGVhY2ggTUFTIGluIHRoZSBzdXBlcmZyYW1lLCB3aGVyZSB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQKKyAqIGJpdCBvZiB0aGUgZmllbGQgY29ycmVzcG9uZHMgdG8gdGhlIGZpcnN0IE1BUyBpbiB0aGUgc3VwZXJmcmFtZQorICogYW5kIHN1Y2Nlc3NpdmUgYml0cyBjb3JyZXNwb25kIHRvIHN1Y2Nlc3NpdmUgTUFTcy4iCisgKgorICogVGhlIERSUCBBdmFpbGFiaWxpdHkgYml0bWFwIGlzIGluIG9jdGV0cyBmcm9tIDAgdG8gMzIsIHNvIG9jdGV0CisgKiAzMiBjb250YWlucyBiaXRzIGZvciBNQVMgMS04LCBldGMuIElmIHRoZSBiaXRtYXAgaXMgc21hbGxlciB0aGFuIDMyCisgKiBvY3RldHMsIHRoZSBiaXRzIGluIG9jdGV0cyBub3QgaW5jbHVkZWQgYXQgdGhlIGVuZCBvZiB0aGUgYml0bWFwIGFyZQorICogdHJlYXRlZCBhcyB6ZXJvLiBJbiB0aGlzIGNhc2UgKHdoZW4gdGhlIGJpdG1hcCBpcyBzbWFsbGVyIHRoYW4gMzIKKyAqIG9jdGV0cykgdGhlIE1BUyByZXByZXNlbnRlZCByYW5nZSBmcm9tIE1BUyAxIHRvIE1BUyAoc2l6ZSBvZiBiaXRtYXApCisgKiB3aXRoIHRoZSBsYXN0IG9jdGV0IHN0aWxsIGNvbnRhaW5pbmcgYml0cyBmb3IgTUFTIDEtOCwgZXRjLgorICoKKyAqIEZvciBleGFtcGxlOgorICogRjAwRjAxMDIgMDMwNDA1MDYgMDcwODA5MEEgMEIwQzBEMEUgMEYwMTAyMDMKKyAqIF5eXl4KKyAqIHx8fHwKKyAqIHx8fHwKKyAqIHx8fFxMU0Igb2YgYnl0ZSBpcyBNQVMgOQorICogfHxcTVNCIG9mIGJ5dGUgaXMgTUFTIDE2CisgKiB8XExTQiBvZiBmaXJzdCBieXRlIGlzIE1BUyAxCisgKiBcIE1TQiBvZiBieXRlIGlzIE1BUyA4CisgKgorICogQW4gZXhhbXBsZSBvZiB0aGlzIGVuY29kaW5nIGNhbiBiZSBmb3VuZCBpbiBFQ01BLTM2OCBBbm5leC1EIFtUYWJsZSBELjExXQorICoKKyAqIFRoZSByZXN1bHRpbmcgYml0bWFwIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIG1hcHBpbmc6CisgKgliaXQgcG9zaXRpb24gMCA9PSBNQVMgMQorICoJYml0IHBvc2l0aW9uIDEgPT0gTUFTIDIKKyAqCS4uLgorICoJYml0IHBvc2l0aW9uIChVV0JfTlVNX01BUyAtIDEpID09IE1BUyBVV0JfTlVNX01BUworICoKKyAqIEBibXBfaXRyOglwb2ludGVyIHRvIGJpdG1hcCAoY2FuIGJlIGRlY2xhcmVkIHdpdGggREVDTEFSRV9CSVRNQVApCisgKiBAYnVmZmVyOglwb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIGJpdG1hcCBkYXRhIGluIGJpZyBlbmRpYW4KKyAqICAgICAgICAgICAgICBmb3JtYXQgKE1TQiBmaXJzdCkKKyAqIEBidWZmZXJfc2l6ZTpudW1iZXIgb2YgYnl0ZXMgd2l0aCB3aGljaCBiaXRtYXAgc2hvdWxkIGJlIGluaXRpYWxpemVkCisgKi8KK3N0YXRpYwordm9pZCBidWZmZXJfdG9fYm1wKHVuc2lnbmVkIGxvbmcgKmJtcF9pdHIsIHZvaWQgKl9idWZmZXIsCisJCSAgIHNpemVfdCBidWZmZXJfc2l6ZSkKK3sKKwl1OCAqYnVmZmVyID0gX2J1ZmZlcjsKKwlzaXplX3QgaXRyLCBsZW47CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpdHIgPSAwOworCXdoaWxlIChpdHIgPCBidWZmZXJfc2l6ZSkgeworCQlsZW4gPSBidWZmZXJfc2l6ZSAtIGl0ciA+PSBzaXplb2YodmFsKSA/CisJCQlzaXplb2YodmFsKSA6IGJ1ZmZlcl9zaXplIC0gaXRyOworCQl2YWwgPSBnZXRfdmFsKGJ1ZmZlciwgaXRyLCBsZW4pOworCQlibXBfaXRyW2l0ciAvIHNpemVvZih2YWwpXSA9IHZhbDsKKwkJaXRyICs9IHNpemVvZih2YWwpOworCX0KK30KKworCisvKioKKyAqIEV4dHJhY3QgRFJQIEF2YWlsYWJpbGl0eSBiaXRtYXAgZnJvbSB0aGUgbm90aWZpY2F0aW9uLgorICoKKyAqIFRoZSBub3RpZmljYXRpb24gdGhhdCBjb21lcyBpbiBjb250YWlucyBhIGJpdG1hcCBvZiAoVVdCX05VTV9NQVMgLyA4KSBieXRlcworICogV2UgY29udmVydCB0aGF0IHRvIG91ciBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4KKyAqLworc3RhdGljCitpbnQgdXdiZF9ldnRfZ2V0X2RycF9hdmFpbChzdHJ1Y3QgdXdiX2V2ZW50ICpldnQsIHVuc2lnbmVkIGxvbmcgKmJtcCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZXZ0LT5yYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9yY19ldnRfZHJwX2F2YWlsICpkcnBfZXZ0OworCWludCByZXN1bHQgPSAtRUlOVkFMOworCisJLyogSXMgdGhlcmUgZW5vdWdoIGRhdGEgdG8gZGVjb2RlIHRoZSBldmVudD8gKi8KKwlpZiAoZXZ0LT5ub3RpZi5zaXplIDwgc2l6ZW9mKCpkcnBfZXZ0KSkgeworCQlkZXZfZXJyKGRldiwgIkRSUCBBdmFpbGFiaWxpdHkgQ2hhbmdlOiBOb3QgZW5vdWdoICIKKwkJCSJkYXRhIHRvIGRlY29kZSBldmVudCBbJXp1IGJ5dGVzLCAlenUgIgorCQkJIm5lZWRlZF1cbiIsIGV2dC0+bm90aWYuc2l6ZSwgc2l6ZW9mKCpkcnBfZXZ0KSk7CisJCWdvdG8gZXJyb3I7CisJfQorCWRycF9ldnQgPSBjb250YWluZXJfb2YoZXZ0LT5ub3RpZi5yY2ViLCBzdHJ1Y3QgdXdiX3JjX2V2dF9kcnBfYXZhaWwsIHJjZWIpOworCWJ1ZmZlcl90b19ibXAoYm1wLCBkcnBfZXZ0LT5ibXAsIFVXQl9OVU1fTUFTLzgpOworCXJlc3VsdCA9IDA7CitlcnJvcjoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogUHJvY2VzcyBhbiBpbmNvbWluZyBEUlAgQXZhaWxhYmlsaXR5IG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAZXZ0OglFdmVudCBpbmZvcm1hdGlvbiAocGFja3MgdGhlIGFjdHVhbCBldmVudCBkYXRhLCB3aGljaAorICogICAgICAgICAgICAgIHJhZGlvIGNvbnRyb2xsZXIgaXQgY2FtZSB0bywgZXRjKS4KKyAqCisgKiBAcmV0dXJuczogICAgMCBvbiBzdWNjZXNzIChzbyB1d2JkKCkgZnJlZXMgdGhlIGV2ZW50IGJ1ZmZlciksIDwgMAorICogICAgICAgICAgICAgIG9uIGVycm9yLgorICoKKyAqIEFjY29yZGluZyB0byBFQ01BLTM2OCAxLjAgWzE2LjguN10sIGJpdHMgc2V0IHRvIE9ORSBpbmRpY2F0ZSB0aGF0CisgKiB0aGUgTUFTIHNsb3QgaXMgYXZhaWxhYmxlLCBiaXRzIHNldCB0byBaRVJPIGluZGljYXRlIHRoYXQgdGhlIHNsb3QKKyAqIGlzIGJ1c3kuCisgKgorICogU28gd2UgY2xlYXIgYXZhaWxhYmxlIHNsb3RzLCB3ZSBzZXQgdXNlZCBzbG90cyA6KQorICoKKyAqIFRoZSBub3RpZmljYXRpb24gb25seSBtYXJrcyBub24tYXZhaWxhYmlsaXR5IGJhc2VkIG9uIHRoZSBCUCBhbmQKKyAqIHJlY2VpdmVkIERSUCBJRXMgdGhhdCBhcmUgbm90IGZvciB0aGlzIHJhZGlvIGNvbnRyb2xsZXIuICBBIGNvcHkgb2YKKyAqIHRoaXMgYml0bWFwIGlzIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGUgcmVhbCBhdmFpbGFiaWxpdHkgKHdoaWNoCisgKiBpbmNsdWRlcyBsb2NhbCBhbmQgcGVuZGluZyByZXNlcnZhdGlvbnMpLgorICoKKyAqIFRoZSBEUlAgQXZhaWxhYmlsaXR5IElFIHRoYXQgdGhpcyByYWRpbyBjb250cm9sbGVyIGVtaXRzIHdpbGwgbmVlZAorICogdG8gYmUgdXBkYXRlZC4KKyAqLworaW50IHV3YmRfZXZ0X2hhbmRsZV9yY19kcnBfYXZhaWwoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSBldnQtPnJjOworCURFQ0xBUkVfQklUTUFQKGJtcCwgVVdCX05VTV9NQVMpOworCisJcmVzdWx0ID0gdXdiZF9ldnRfZ2V0X2RycF9hdmFpbChldnQsIGJtcCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwltdXRleF9sb2NrKCZyYy0+cnN2c19tdXRleCk7CisJYml0bWFwX2NvcHkocmMtPmRycF9hdmFpbC5nbG9iYWwsIGJtcCwgVVdCX05VTV9NQVMpOworCXJjLT5kcnBfYXZhaWwuaWVfdmFsaWQgPSBmYWxzZTsKKwltdXRleF91bmxvY2soJnJjLT5yc3ZzX211dGV4KTsKKworCXV3Yl9yc3Zfc2NoZWRfdXBkYXRlKHJjKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvZHJwLWllLmMgYi9kcml2ZXJzL3V3Yi9kcnAtaWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI3MjRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvZHJwLWllLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBVV0IgRFJQIElFIG1hbmFnZW1lbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKworI2luY2x1ZGUgInV3Yi1pbnRlcm5hbC5oIgorCisvKgorICogQWxsb2NhdGUgYSBEUlAgSUUuCisgKgorICogVG8gc2F2ZSBoYXZpbmcgdG8gZnJlZS9hbGxvY2F0ZSBhIERSUCBJRSB3aGVuIGl0cyBNQVMgY2hhbmdlcywKKyAqIGVub3VnaCBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGUgbWF4aXVtdW0gbnVtYmVyIG9mIERSUAorICogYWxsb2NhdGlvbiBmaWVsZHMuICBUaGlzIGdpdmVzIGFuIG92ZXJoZWFkIHBlciByZXNlcnZhdGlvbiBvZiB1cCB0bworICogKFVXQl9OVU1fWk9ORVMgLSAxKSAqIDQgPSA2MCBvY3RldHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXdiX2llX2RycCAqdXdiX2RycF9pZV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWU7CisJdW5zaWduZWQgdGllYnJlYWtlcjsKKworCWRycF9pZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1d2JfaWVfZHJwKSArCisJCQlVV0JfTlVNX1pPTkVTICogc2l6ZW9mKHN0cnVjdCB1d2JfZHJwX2FsbG9jKSwKKwkJCUdGUF9LRVJORUwpOworCWlmIChkcnBfaWUpIHsKKwkJZHJwX2llLT5oZHIuZWxlbWVudF9pZCA9IFVXQl9JRV9EUlA7CisKKwkJZ2V0X3JhbmRvbV9ieXRlcygmdGllYnJlYWtlciwgc2l6ZW9mKHVuc2lnbmVkKSk7CisJCXV3Yl9pZV9kcnBfc2V0X3RpZWJyZWFrZXIoZHJwX2llLCB0aWVicmVha2VyICYgMSk7CisJfQorCXJldHVybiBkcnBfaWU7Cit9CisKKworLyoKKyAqIEZpbGwgYSBEUlAgSUUncyBhbGxvY2F0aW9uIGZpZWxkcyBmcm9tIGEgTUFTIGJpdG1hcC4KKyAqLworc3RhdGljIHZvaWQgdXdiX2RycF9pZV9mcm9tX2JtKHN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWUsCisJCQkgICAgICAgc3RydWN0IHV3Yl9tYXNfYm0gKm1hcykKK3sKKwlpbnQgeiwgaSwgbnVtX2ZpZWxkcyA9IDAsIG5leHQgPSAwOworCXN0cnVjdCB1d2JfZHJwX2FsbG9jICp6b25lczsKKwlfX2xlMTYgY3VycmVudF9ibXA7CisJREVDTEFSRV9CSVRNQVAodG1wX2JtcCwgVVdCX05VTV9NQVMpOworCURFQ0xBUkVfQklUTUFQKHRtcF9tYXNfYm0sIFVXQl9NQVNfUEVSX1pPTkUpOworCisJem9uZXMgPSBkcnBfaWUtPmFsbG9jczsKKworCWJpdG1hcF9jb3B5KHRtcF9ibXAsIG1hcy0+Ym0sIFVXQl9OVU1fTUFTKTsKKworCS8qIERldGVybWluZSB1bmlxdWUgTUFTIGJpdG1hcHMgaW4gem9uZXMgZnJvbSBiaXRtYXAuICovCisJZm9yICh6ID0gMDsgeiA8IFVXQl9OVU1fWk9ORVM7IHorKykgeworCQliaXRtYXBfY29weSh0bXBfbWFzX2JtLCB0bXBfYm1wLCBVV0JfTUFTX1BFUl9aT05FKTsKKwkJaWYgKGJpdG1hcF93ZWlnaHQodG1wX21hc19ibSwgVVdCX01BU19QRVJfWk9ORSkgPiAwKSB7CisJCQlib29sIGZvdW5kID0gZmFsc2U7CisJCQljdXJyZW50X2JtcCA9IChfX2xlMTYpICp0bXBfbWFzX2JtOworCQkJZm9yIChpID0gMDsgaSA8IG5leHQ7IGkrKykgeworCQkJCWlmIChjdXJyZW50X2JtcCA9PSB6b25lc1tpXS5tYXNfYm0pIHsKKwkJCQkJem9uZXNbaV0uem9uZV9ibSB8PSAxIDw8IHo7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKCFmb3VuZCkgIHsKKwkJCQludW1fZmllbGRzKys7CisJCQkJem9uZXNbbmV4dF0uem9uZV9ibSA9IDEgPDwgejsKKwkJCQl6b25lc1tuZXh0XS5tYXNfYm0gPSBjdXJyZW50X2JtcDsKKwkJCQluZXh0Kys7CisJCQl9CisJCX0KKwkJYml0bWFwX3NoaWZ0X3JpZ2h0KHRtcF9ibXAsIHRtcF9ibXAsIFVXQl9NQVNfUEVSX1pPTkUsIFVXQl9OVU1fTUFTKTsKKwl9CisKKwkvKiBTdG9yZSBpbiBmb3JtYXQgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbiAobGUxNikuICovCisJZm9yIChpID0gMDsgaSA8IG51bV9maWVsZHM7IGkrKykgeworCQlkcnBfaWUtPmFsbG9jc1tpXS56b25lX2JtID0gY3B1X3RvX2xlMTYoem9uZXNbaV0uem9uZV9ibSk7CisJCWRycF9pZS0+YWxsb2NzW2ldLm1hc19ibSA9IGNwdV90b19sZTE2KHpvbmVzW2ldLm1hc19ibSk7CisJfQorCisJZHJwX2llLT5oZHIubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCB1d2JfaWVfZHJwKSAtIHNpemVvZihzdHJ1Y3QgdXdiX2llX2hkcikKKwkJKyBudW1fZmllbGRzICogc2l6ZW9mKHN0cnVjdCB1d2JfZHJwX2FsbG9jKTsKK30KKworLyoqCisgKiB1d2JfZHJwX2llX3VwZGF0ZSAtIHVwZGF0ZSBhIHJlc2VydmF0aW9uJ3MgRFJQIElFCisgKiBAcnN2OiB0aGUgcmVzZXJ2YXRpb24KKyAqLworaW50IHV3Yl9kcnBfaWVfdXBkYXRlKHN0cnVjdCB1d2JfcnN2ICpyc3YpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJzdi0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWU7CisJaW50IHJlYXNvbl9jb2RlLCBzdGF0dXM7CisKKwlzd2l0Y2ggKHJzdi0+c3RhdGUpIHsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfTk9ORToKKwkJa2ZyZWUocnN2LT5kcnBfaWUpOworCQlyc3YtPmRycF9pZSA9IE5VTEw7CisJCXJldHVybiAwOworCWNhc2UgVVdCX1JTVl9TVEFURV9PX0lOSVRJQVRFRDoKKwkJcmVhc29uX2NvZGUgPSBVV0JfRFJQX1JFQVNPTl9BQ0NFUFRFRDsKKwkJc3RhdHVzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBVV0JfUlNWX1NUQVRFX09fUEVORElORzoKKwkJcmVhc29uX2NvZGUgPSBVV0JfRFJQX1JFQVNPTl9BQ0NFUFRFRDsKKwkJc3RhdHVzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBVV0JfUlNWX1NUQVRFX09fTU9ESUZJRUQ6CisJCXJlYXNvbl9jb2RlID0gVVdCX0RSUF9SRUFTT05fTU9ESUZJRUQ7CisJCXN0YXR1cyA9IDE7CisJCWJyZWFrOworCWNhc2UgVVdCX1JTVl9TVEFURV9PX0VTVEFCTElTSEVEOgorCQlyZWFzb25fY29kZSA9IFVXQl9EUlBfUkVBU09OX0FDQ0VQVEVEOworCQlzdGF0dXMgPSAxOworCQlicmVhazsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfVF9BQ0NFUFRFRDoKKwkJcmVhc29uX2NvZGUgPSBVV0JfRFJQX1JFQVNPTl9BQ0NFUFRFRDsKKwkJc3RhdHVzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBVV0JfUlNWX1NUQVRFX1RfREVOSUVEOgorCQlyZWFzb25fY29kZSA9IFVXQl9EUlBfUkVBU09OX0RFTklFRDsKKwkJc3RhdHVzID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJyc3Ygd2l0aCB1bmhhbmRsZWQgc3RhdGUgKCVkKVxuIiwgcnN2LT5zdGF0ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyc3YtPmRycF9pZSA9PSBOVUxMKSB7CisJCXJzdi0+ZHJwX2llID0gdXdiX2RycF9pZV9hbGxvYygpOworCQlpZiAocnN2LT5kcnBfaWUgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlkcnBfaWUgPSByc3YtPmRycF9pZTsKKworCXV3Yl9pZV9kcnBfc2V0X293bmVyKGRycF9pZSwgICAgICAgIHV3Yl9yc3ZfaXNfb3duZXIocnN2KSk7CisJdXdiX2llX2RycF9zZXRfc3RhdHVzKGRycF9pZSwgICAgICAgc3RhdHVzKTsKKwl1d2JfaWVfZHJwX3NldF9yZWFzb25fY29kZShkcnBfaWUsICByZWFzb25fY29kZSk7CisJdXdiX2llX2RycF9zZXRfc3RyZWFtX2luZGV4KGRycF9pZSwgcnN2LT5zdHJlYW0pOworCXV3Yl9pZV9kcnBfc2V0X3R5cGUoZHJwX2llLCAgICAgICAgIHJzdi0+dHlwZSk7CisKKwlpZiAodXdiX3Jzdl9pc19vd25lcihyc3YpKSB7CisJCXN3aXRjaCAocnN2LT50YXJnZXQudHlwZSkgeworCQljYXNlIFVXQl9SU1ZfVEFSR0VUX0RFVjoKKwkJCWRycF9pZS0+ZGV2X2FkZHIgPSByc3YtPnRhcmdldC5kZXYtPmRldl9hZGRyOworCQkJYnJlYWs7CisJCWNhc2UgVVdCX1JTVl9UQVJHRVRfREVWQUREUjoKKwkJCWRycF9pZS0+ZGV2X2FkZHIgPSByc3YtPnRhcmdldC5kZXZhZGRyOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJZHJwX2llLT5kZXZfYWRkciA9IHJzdi0+b3duZXItPmRldl9hZGRyOworCisJdXdiX2RycF9pZV9mcm9tX2JtKGRycF9pZSwgJnJzdi0+bWFzKTsKKworCXJzdi0+aWVfdmFsaWQgPSB0cnVlOworCXJldHVybiAwOworfQorCisvKgorICogU2V0IE1BUyBiaXRzIGZyb20gZ2l2ZW4gTUFTIGJpdG1hcCBpbiBhIHNpbmdsZSB6b25lIG9mIGxhcmdlIGJpdG1hcC4KKyAqCisgKiBXZSBhcmUgZ2l2ZW4gYSB6b25lIGlkIGFuZCB0aGUgTUFTIGJpdG1hcCBvZiBiaXRzIHRoYXQgbmVlZCB0byBiZSBzZXQgaW4KKyAqIHRoaXMgem9uZS4gTm90ZSB0aGF0IHRoaXMgem9uZSBtYXkgYWxyZWFkeSBoYXZlIGJpdHMgc2V0IGFuZCB0aGlzIG9ubHkKKyAqIGFkZHMgc2V0dGluZ3MgLSB3ZSBjYW5ub3Qgc2ltcGx5IGFzc2lnbiB0aGUgTUFTIGJpdG1hcCBjb250ZW50cyB0byB0aGUKKyAqIHpvbmUgY29udGVudHMuIFdlIGl0ZXJhdGUgb3ZlciB0aGUgdGhlIGJpdHMgKE1BUykgaW4gdGhlIHpvbmUgYW5kIHNldCB0aGUKKyAqIGJpdHMgdGhhdCBhcmUgc2V0IGluIHRoZSBnaXZlbiBNQVMgYml0bWFwLgorICovCitzdGF0aWMKK3ZvaWQgdXdiX2RycF9pZV9zaW5nbGVfem9uZV90b19ibShzdHJ1Y3QgdXdiX21hc19ibSAqYm0sIHU4IHpvbmUsIHUxNiBtYXNfYm0pCit7CisJaW50IG1hczsKKwl1MTYgbWFzX21hc2s7CisKKwlmb3IgKG1hcyA9IDA7IG1hcyA8IFVXQl9NQVNfUEVSX1pPTkU7IG1hcysrKSB7CisJCW1hc19tYXNrID0gMSA8PCBtYXM7CisJCWlmIChtYXNfYm0gJiBtYXNfbWFzaykKKwkJCXNldF9iaXQoem9uZSAqIFVXQl9OVU1fWk9ORVMgKyBtYXMsIGJtLT5ibSk7CisJfQorfQorCisvKioKKyAqIHV3Yl9kcnBfaWVfem9uZXNfdG9fYm0gLSBjb252ZXJ0IERSUCBhbGxvY2F0aW9uIGZpZWxkcyB0byBhIGJpdG1hcAorICogQG1hczogICAgTUFTIGJpdG1hcCB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIHRvIGNvcnJlc3BvbmQgdG8gdGhlCisgKiAgICAgICAgICBhbGxvY2F0aW9uIGZpZWxkcyBpbiB0aGUgRFJQIElFCisgKiBAZHJwX2llOiB0aGUgRFJQIElFIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRpb24gZmllbGRzLgorICoKKyAqIFRoZSBpbnB1dCBmb3JtYXQgaXMgYW4gYXJyYXkgb2YgTUFTIGFsbG9jYXRpb24gZmllbGRzICgxNiBiaXQgWm9uZQorICogYml0bWFwLCAxNiBiaXQgTUFTIGJpdG1hcCkgYXMgZGVzY3JpYmVkIGluIFtFQ01BLTM2OF0gc2VjdGlvbgorICogMTYuOC42LiBUaGUgb3V0cHV0IGlzIGEgZnVsbCAyNTYgYml0IE1BUyBiaXRtYXAuCisgKgorICogV2UgZ28gb3ZlciBhbGwgdGhlIGFsbG9jYXRpb24gZmllbGRzLCBmb3IgZWFjaCBhbGxvY2F0aW9uIGZpZWxkIHdlCisgKiBrbm93IHdoaWNoIHpvbmVzIGFyZSBpbXBhY3RlZC4gV2UgaXRlcmF0ZSBvdmVyIGFsbCB0aGUgem9uZXMKKyAqIGltcGFjdGVkIGFuZCBjYWxsIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHNldCB0aGUgY29ycmVjdCBNQVMgYml0cyBpbgorICogZWFjaCB6b25lLgorICovCit2b2lkIHV3Yl9kcnBfaWVfdG9fYm0oc3RydWN0IHV3Yl9tYXNfYm0gKmJtLCBjb25zdCBzdHJ1Y3QgdXdiX2llX2RycCAqZHJwX2llKQoreworCWludCBudW1hbGxvY3MgPSAoZHJwX2llLT5oZHIubGVuZ3RoIC0gNCkgLyA0OworCWNvbnN0IHN0cnVjdCB1d2JfZHJwX2FsbG9jICphbGxvYzsKKwlpbnQgY250OworCXUxNiB6b25lX2JtLCBtYXNfYm07CisJdTggem9uZTsKKwl1MTYgem9uZV9tYXNrOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBudW1hbGxvY3M7IGNudCsrKSB7CisJCWFsbG9jID0gJmRycF9pZS0+YWxsb2NzW2NudF07CisJCXpvbmVfYm0gPSBsZTE2X3RvX2NwdShhbGxvYy0+em9uZV9ibSk7CisJCW1hc19ibSA9IGxlMTZfdG9fY3B1KGFsbG9jLT5tYXNfYm0pOworCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgVVdCX05VTV9aT05FUzsgem9uZSsrKSAgIHsKKwkJCXpvbmVfbWFzayA9IDEgPDwgem9uZTsKKwkJCWlmICh6b25lX2JtICYgem9uZV9tYXNrKQorCQkJCXV3Yl9kcnBfaWVfc2luZ2xlX3pvbmVfdG9fYm0oYm0sIHpvbmUsIG1hc19ibSk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9kcnAuYyBiL2RyaXZlcnMvdXdiL2RycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjFlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9kcnAuYwpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogRHluYW1pYyBSZXNlcnZhdGlvbiBQcm90b2NvbCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgInV3Yi1pbnRlcm5hbC5oIgorCisvKioKKyAqIENvbnN0cnVjdCBhbmQgc2VuZCB0aGUgU0VUIERSUCBJRQorICoKKyAqIEByYzogICAgICAgICBVV0IgSG9zdCBjb250cm9sbGVyCisgKiBAcmV0dXJuczogICAgPj0gMCBudW1iZXIgb2YgYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoZSBiZWFjb24KKyAqICAgICAgICAgICAgICA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqCisgKiBTZWUgV1VTQls4LjYuMi43XTogVGhlIGhvc3QgbXVzdCBzZXQgYWxsIHRoZSBEUlAgSUVzIHRoYXQgaXQgd2FudHMgdGhlCisgKiBkZXZpY2UgdG8gaW5jbHVkZSBpbiBpdHMgYmVhY29uIGF0IHRoZSBzYW1lIHRpbWUuIFdlIHRodXMgaGF2ZSB0bworICogdHJhdmVyc2UgYWxsIHJlc2VydmF0aW9ucyBhbmQgaW5jbHVkZSB0aGUgRFJQIElFcyBvZiBhbGwgUEVORElORworICogYW5kIE5FR09USUFURUQgcmVzZXJ2YXRpb25zIGluIGEgU0VUIERSUCBjb21tYW5kIGZvciB0cmFuc21pc3Npb24uCisgKgorICogQSBEUlAgQXZhaWxhYmlsaXR5IElFIGlzIGFwcGVuZGVkLgorICoKKyAqIHJjLT51d2JfZGV2Lm11dGV4IGlzIGhlbGQKKyAqCisgKiBGSVhNRSBXZSBjdXJyZW50bHkgaWdub3JlIHRoZSByZXR1cm5lZCB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZW1haW5pbmcgc3BhY2UKKyAqIGluIGJlYWNvbi4gVGhpcyBjb3VsZCBiZSB1c2VkIHRvIGRlbnkgcmVzZXJ2YXRpb24gcmVxdWVzdHMgZWFybGllciBpZgorICogZGV0ZXJtaW5lZCB0aGF0IHRoZXkgd291bGQgY2F1c2UgdGhlIGJlYWNvbiBzcGFjZSB0byBiZSBleGNlZWRlZC4KKyAqLworc3RhdGljCitpbnQgdXdiX3JjX2dlbl9zZW5kX2RycF9pZShzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9yY19jbWRfc2V0X2RycF9pZSAqY21kOworCXN0cnVjdCB1d2JfcmNfZXZ0X3NldF9kcnBfaWUgcmVwbHk7CisJc3RydWN0IHV3Yl9yc3YgKnJzdjsKKwlpbnQgbnVtX2J5dGVzID0gMDsKKwl1OCAqSUVEYXRhcHRyOworCisJcmVzdWx0ID0gLUVOT01FTTsKKwkvKiBGaXJzdCB0cmF2ZXJzZSBhbGwgcmVzZXJ2YXRpb25zIHRvIGRldGVybWluZSBtZW1vcnkgbmVlZGVkLiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocnN2LCAmcmMtPnJlc2VydmF0aW9ucywgcmNfbm9kZSkgeworCQlpZiAocnN2LT5kcnBfaWUgIT0gTlVMTCkKKwkJCW51bV9ieXRlcyArPSByc3YtPmRycF9pZS0+aGRyLmxlbmd0aCArIDI7CisJfQorCW51bV9ieXRlcyArPSBzaXplb2YocmMtPmRycF9hdmFpbC5pZSk7CisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCkgKyBudW1fYnl0ZXMsIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwljbWQtPnJjY2IuYkNvbW1hbmRUeXBlID0gVVdCX1JDX0NFVF9HRU5FUkFMOworCWNtZC0+cmNjYi53Q29tbWFuZCA9IGNwdV90b19sZTE2KFVXQl9SQ19DTURfU0VUX0RSUF9JRSk7CisJY21kLT53SUVMZW5ndGggPSBudW1fYnl0ZXM7CisJSUVEYXRhcHRyID0gKHU4ICopJmNtZC0+SUVEYXRhWzBdOworCisJLyogTmV4dCB0cmF2ZXJzZSBhbGwgcmVzZXJ2YXRpb25zIHRvIHBsYWNlIElFcyBpbiBhbGxvY2F0ZWQgbWVtb3J5LiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocnN2LCAmcmMtPnJlc2VydmF0aW9ucywgcmNfbm9kZSkgeworCQlpZiAocnN2LT5kcnBfaWUgIT0gTlVMTCkgeworCQkJbWVtY3B5KElFRGF0YXB0ciwgcnN2LT5kcnBfaWUsCisJCQkgICAgICAgcnN2LT5kcnBfaWUtPmhkci5sZW5ndGggKyAyKTsKKwkJCUlFRGF0YXB0ciArPSByc3YtPmRycF9pZS0+aGRyLmxlbmd0aCArIDI7CisJCX0KKwl9CisJbWVtY3B5KElFRGF0YXB0ciwgJnJjLT5kcnBfYXZhaWwuaWUsIHNpemVvZihyYy0+ZHJwX2F2YWlsLmllKSk7CisKKwlyZXBseS5yY2ViLmJFdmVudFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJcmVwbHkucmNlYi53RXZlbnQgPSBVV0JfUkNfQ01EX1NFVF9EUlBfSUU7CisJcmVzdWx0ID0gdXdiX3JjX2NtZChyYywgIlNFVC1EUlAtSUUiLCAmY21kLT5yY2NiLAorCQkJc2l6ZW9mKCpjbWQpICsgbnVtX2J5dGVzLCAmcmVwbHkucmNlYiwKKwkJCXNpemVvZihyZXBseSkpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2NtZDsKKwlyZXN1bHQgPSBsZTE2X3RvX2NwdShyZXBseS53UmVtYWluaW5nU3BhY2UpOworCWlmIChyZXBseS5iUmVzdWx0Q29kZSAhPSBVV0JfUkNfUkVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycigmcmMtPnV3Yl9kZXYuZGV2LCAiU0VULURSUC1JRTogY29tbWFuZCBleGVjdXRpb24gIgorCQkJCSJmYWlsZWQ6ICVzICglZCkuIFJlbWFpbmluZ1NwYWNlIGluIGJlYWNvbiAiCisJCQkJIj0gJWRcbiIsIHV3Yl9yY19zdHJlcnJvcihyZXBseS5iUmVzdWx0Q29kZSksCisJCQkJcmVwbHkuYlJlc3VsdENvZGUsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhkZXYsICJTRVQtRFJQLUlFIHNlbnQuIFJlbWFpbmluZ1NwYWNlIGluIGJlYWNvbiAiCisJCQkgICAgICI9ICVkLlxuIiwgcmVzdWx0KTsKKwkJcmVzdWx0ID0gMDsKKwl9CitlcnJvcl9jbWQ6CisJa2ZyZWUoY21kKTsKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7CisKK30KKy8qKgorICogU2VuZCBhbGwgRFJQIElFcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBob3N0CisgKgorICogQHJldHVybnM6ICAgID49IDAgbnVtYmVyIG9mIGJ5dGVzIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGUgYmVhY29uCisgKiAgICAgICAgICAgICAgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKgorICogQXMgcGVyIHRoZSBwcm90b2NvbCB3ZSBvYnRhaW4gdGhlIGhvc3QgY29udHJvbGxlciBkZXZpY2UgbG9jayB0byBhY2Nlc3MKKyAqIGJhbmR3aWR0aCBzdHJ1Y3R1cmVzLgorICovCitpbnQgdXdiX3JjX3NlbmRfYWxsX2RycF9pZShzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlpbnQgcmVzdWx0OworCisJbXV0ZXhfbG9jaygmcmMtPnV3Yl9kZXYubXV0ZXgpOworCXJlc3VsdCA9IHV3Yl9yY19nZW5fc2VuZF9kcnBfaWUocmMpOworCW11dGV4X3VubG9jaygmcmMtPnV3Yl9kZXYubXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgdXdiX2RycF9oYW5kbGVfdGltZW91dChzdHJ1Y3QgdXdiX3JzdiAqcnN2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyc3YtPnJjLT51d2JfZGV2LmRldjsKKworCWRldl9kYmcoZGV2LCAicmVzZXJ2YXRpb24gdGltZW91dCBpbiBzdGF0ZSAlcyAoJWQpXG4iLAorCQl1d2JfcnN2X3N0YXRlX3N0cihyc3YtPnN0YXRlKSwgcnN2LT5zdGF0ZSk7CisKKwlzd2l0Y2ggKHJzdi0+c3RhdGUpIHsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19JTklUSUFURUQ6CisJCWlmIChyc3YtPmlzX211bHRpY2FzdCkgeworCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWNhc2UgVVdCX1JTVl9TVEFURV9PX0VTVEFCTElTSEVEOgorCQlpZiAocnN2LT5pc19tdWx0aWNhc3QpCisJCQlyZXR1cm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwl1d2JfcnN2X3JlbW92ZShyc3YpOworfQorCisvKgorICogQmFzZWQgb24gdGhlIERSUCBJRSwgdHJhbnNpdGlvbiBhIHRhcmdldCByZXNlcnZhdGlvbiB0byBhIG5ldworICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIHV3Yl9kcnBfcHJvY2Vzc190YXJnZXQoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfcnN2ICpyc3YsCisJCQkJICAgc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCWludCBzdGF0dXM7CisJZW51bSB1d2JfZHJwX3JlYXNvbiByZWFzb25fY29kZTsKKworCXN0YXR1cyA9IHV3Yl9pZV9kcnBfc3RhdHVzKGRycF9pZSk7CisJcmVhc29uX2NvZGUgPSB1d2JfaWVfZHJwX3JlYXNvbl9jb2RlKGRycF9pZSk7CisKKwlpZiAoc3RhdHVzKSB7CisJCXN3aXRjaCAocmVhc29uX2NvZGUpIHsKKwkJY2FzZSBVV0JfRFJQX1JFQVNPTl9BQ0NFUFRFRDoKKwkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9UX0FDQ0VQVEVEKTsKKwkJCWJyZWFrOworCQljYXNlIFVXQl9EUlBfUkVBU09OX01PRElGSUVEOgorCQkJZGV2X2VycihkZXYsICJGSVhNRTogdW5oYW5kbGVkIHJlYXNvbiBjb2RlICglZC8lZClcbiIsCisJCQkJcmVhc29uX2NvZGUsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKGRldiwgImlnbm9yaW5nIGludmFsaWQgRFJQIElFIHN0YXRlICglZC8lZClcbiIsCisJCQkJIHJlYXNvbl9jb2RlLCBzdGF0dXMpOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChyZWFzb25fY29kZSkgeworCQljYXNlIFVXQl9EUlBfUkVBU09OX0FDQ0VQVEVEOgorCQkJLyogTmV3IHJlc2VydmF0aW9ucyBhcmUgaGFuZGxlZCBpbiB1d2JfcnN2X2ZpbmQoKS4gKi8KKwkJCWJyZWFrOworCQljYXNlIFVXQl9EUlBfUkVBU09OX0RFTklFRDoKKwkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9OT05FKTsKKwkJCWJyZWFrOworCQljYXNlIFVXQl9EUlBfUkVBU09OX0NPTkZMSUNUOgorCQljYXNlIFVXQl9EUlBfUkVBU09OX01PRElGSUVEOgorCQkJZGV2X2VycihkZXYsICJGSVhNRTogdW5oYW5kbGVkIHJlYXNvbiBjb2RlICglZC8lZClcbiIsCisJCQkJcmVhc29uX2NvZGUsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKGRldiwgImlnbm9yaW5nIGludmFsaWQgRFJQIElFIHN0YXRlICglZC8lZClcbiIsCisJCQkJIHJlYXNvbl9jb2RlLCBzdGF0dXMpOworCQl9CisJfQorfQorCisvKgorICogQmFzZWQgb24gdGhlIERSUCBJRSwgdHJhbnNpdGlvbiBhbiBvd25lciByZXNlcnZhdGlvbiB0byBhIG5ldworICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIHV3Yl9kcnBfcHJvY2Vzc19vd25lcihzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yc3YgKnJzdiwKKwkJCQkgIHN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJjLT51d2JfZGV2LmRldjsKKwlpbnQgc3RhdHVzOworCWVudW0gdXdiX2RycF9yZWFzb24gcmVhc29uX2NvZGU7CisKKwlzdGF0dXMgPSB1d2JfaWVfZHJwX3N0YXR1cyhkcnBfaWUpOworCXJlYXNvbl9jb2RlID0gdXdiX2llX2RycF9yZWFzb25fY29kZShkcnBfaWUpOworCisJaWYgKHN0YXR1cykgeworCQlzd2l0Y2ggKHJlYXNvbl9jb2RlKSB7CisJCWNhc2UgVVdCX0RSUF9SRUFTT05fQUNDRVBURUQ6CisJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19FU1RBQkxJU0hFRCk7CisJCQlicmVhazsKKwkJY2FzZSBVV0JfRFJQX1JFQVNPTl9NT0RJRklFRDoKKwkJCWRldl9lcnIoZGV2LCAiRklYTUU6IHVuaGFuZGxlZCByZWFzb24gY29kZSAoJWQvJWQpXG4iLAorCQkJCXJlYXNvbl9jb2RlLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfd2FybihkZXYsICJpZ25vcmluZyBpbnZhbGlkIERSUCBJRSBzdGF0ZSAoJWQvJWQpXG4iLAorCQkJCSByZWFzb25fY29kZSwgc3RhdHVzKTsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAocmVhc29uX2NvZGUpIHsKKwkJY2FzZSBVV0JfRFJQX1JFQVNPTl9QRU5ESU5HOgorCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fUEVORElORyk7CisJCQlicmVhazsKKwkJY2FzZSBVV0JfRFJQX1JFQVNPTl9ERU5JRUQ6CisJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfTk9ORSk7CisJCQlicmVhazsKKwkJY2FzZSBVV0JfRFJQX1JFQVNPTl9DT05GTElDVDoKKwkJY2FzZSBVV0JfRFJQX1JFQVNPTl9NT0RJRklFRDoKKwkJCWRldl9lcnIoZGV2LCAiRklYTUU6IHVuaGFuZGxlZCByZWFzb24gY29kZSAoJWQvJWQpXG4iLAorCQkJCXJlYXNvbl9jb2RlLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfd2FybihkZXYsICJpZ25vcmluZyBpbnZhbGlkIERSUCBJRSBzdGF0ZSAoJWQvJWQpXG4iLAorCQkJCSByZWFzb25fY29kZSwgc3RhdHVzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFByb2Nlc3MgYSByZWNlaXZlZCBEUlAgSUUsIGl0J3MgZWl0aGVyIGZvciBhIHJlc2VydmF0aW9uIG93bmVkIGJ5CisgKiB0aGUgUkMgb3IgdGFyZ2V0ZWQgYXQgaXQgKG9yIGl0J3MgZm9yIGEgV1VTQiBjbHVzdGVyIHJlc2VydmF0aW9uKS4KKyAqLworc3RhdGljIHZvaWQgdXdiX2RycF9wcm9jZXNzKHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX2RldiAqc3JjLAorCQkgICAgIHN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWUpCit7CisJc3RydWN0IHV3Yl9yc3YgKnJzdjsKKworCXJzdiA9IHV3Yl9yc3ZfZmluZChyYywgc3JjLCBkcnBfaWUpOworCWlmICghcnN2KSB7CisJCS8qCisJCSAqIE5vIHJlc2VydmF0aW9uPyBJdCdzIGVpdGhlciBmb3IgYSByZWNlbnRseQorCQkgKiB0ZXJtaW5hdGVkIHJlc2VydmF0aW9uOyBvciB0aGUgRFJQIElFIGNvdWxkbid0IGJlCisJCSAqIHByb2Nlc3NlZCAoZS5nLiwgYW4gaW52YWxpZCBJRSBvciBvdXQgb2YgbWVtb3J5KS4KKwkJICovCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIERvIG5vdGhpbmcgd2l0aCBEUlAgSUVzIGZvciByZXNlcnZhdGlvbnMgdGhhdCBoYXZlIGJlZW4KKwkgKiB0ZXJtaW5hdGVkLgorCSAqLworCWlmIChyc3YtPnN0YXRlID09IFVXQl9SU1ZfU1RBVEVfTk9ORSkgeworCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfTk9ORSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXdiX2llX2RycF9vd25lcihkcnBfaWUpKQorCQl1d2JfZHJwX3Byb2Nlc3NfdGFyZ2V0KHJjLCByc3YsIGRycF9pZSk7CisJZWxzZQorCQl1d2JfZHJwX3Byb2Nlc3Nfb3duZXIocmMsIHJzdiwgZHJwX2llKTsKK30KKworCisvKgorICogUHJvY2VzcyBhbGwgdGhlIERSUCBJRXMgKGJvdGggRFJQIElFcyBhbmQgdGhlIERSUCBBdmFpbGFiaWxpdHkgSUUpCisgKiBmcm9tIGEgZGV2aWNlLgorICovCitzdGF0aWMKK3ZvaWQgdXdiX2RycF9wcm9jZXNzX2FsbChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY19ldnRfZHJwICpkcnBfZXZ0LAorCQkJIHNpemVfdCBpZWxlbiwgc3RydWN0IHV3Yl9kZXYgKnNyY19kZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3QgdXdiX2llX2hkciAqaWVfaGRyOworCXZvaWQgKnB0cjsKKworCXB0ciA9IGRycF9ldnQtPmllX2RhdGE7CisJZm9yICg7OykgeworCQlpZV9oZHIgPSB1d2JfaWVfbmV4dCgmcHRyLCAmaWVsZW4pOworCQlpZiAoIWllX2hkcikKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoaWVfaGRyLT5lbGVtZW50X2lkKSB7CisJCWNhc2UgVVdCX0lFX0RSUF9BVkFJTEFCSUxJVFk6CisJCQkvKiBGSVhNRTogZG9lcyBzb21ldGhpbmcgbmVlZCB0byBiZSBkb25lIHdpdGggdGhpcz8gKi8KKwkJCWJyZWFrOworCQljYXNlIFVXQl9JRV9EUlA6CisJCQl1d2JfZHJwX3Byb2Nlc3MocmMsIHNyY19kZXYsIChzdHJ1Y3QgdXdiX2llX2RycCAqKWllX2hkcik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKGRldiwgInVuZXhwZWN0ZWQgSUUgaW4gRFJQIG5vdGlmaWNhdGlvblxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpZWxlbiA+IDApCisJCWRldl93YXJuKGRldiwgIiVkIG9jdGV0cyByZW1haW5pbmcgaW4gRFJQIG5vdGlmaWNhdGlvblxuIiwKKwkJCSAoaW50KWllbGVuKTsKK30KKworCisvKgorICogR28gdGhyb3VnaCBhbGwgdGhlIERSUCBJRXMgYW5kIGZpbmQgdGhlIG9uZXMgdGhhdCBjb25mbGljdCB3aXRoIG91cgorICogcmVzZXJ2YXRpb25zLgorICoKKyAqIEZJWE1FOiBtdXN0IHJlc29sdmUgdGhlIGNvbmZsaWN0IGFjY29yZGluZyB0aGUgdGhlIHJ1bGVzIGluCisgKiBbRUNNQS0zNjhdLgorICovCitzdGF0aWMKK3ZvaWQgdXdiX2RycF9wcm9jZXNzX2NvbmZsaWN0X2FsbChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY19ldnRfZHJwICpkcnBfZXZ0LAorCQkJCSAgc2l6ZV90IGllbGVuLCBzdHJ1Y3QgdXdiX2RldiAqc3JjX2RldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfaWVfaGRyICppZV9oZHI7CisJc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZTsKKwl2b2lkICpwdHI7CisKKwlwdHIgPSBkcnBfZXZ0LT5pZV9kYXRhOworCWZvciAoOzspIHsKKwkJaWVfaGRyID0gdXdiX2llX25leHQoJnB0ciwgJmllbGVuKTsKKwkJaWYgKCFpZV9oZHIpCisJCQlicmVhazsKKworCQlkcnBfaWUgPSBjb250YWluZXJfb2YoaWVfaGRyLCBzdHJ1Y3QgdXdiX2llX2RycCwgaGRyKTsKKworCQkvKiBGSVhNRTogY2hlY2sgaWYgdGhpcyBEUlAgSUUgY29uZmxpY3RzLiAqLworCX0KKworCWlmIChpZWxlbiA+IDApCisJCWRldl93YXJuKGRldiwgIiVkIG9jdGV0cyByZW1haW5pbmcgaW4gRFJQIG5vdGlmaWNhdGlvblxuIiwKKwkJCSAoaW50KWllbGVuKTsKK30KKworCisvKgorICogVGVybWluYXRlIGFsbCByZXNlcnZhdGlvbnMgb3duZWQgYnksIG9yIHRhcmdldGVkIGF0LCAndXdiX2RldicuCisgKi8KK3N0YXRpYyB2b2lkIHV3Yl9kcnBfdGVybWluYXRlX2FsbChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYpCit7CisJc3RydWN0IHV3Yl9yc3YgKnJzdjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnN2LCAmcmMtPnJlc2VydmF0aW9ucywgcmNfbm9kZSkgeworCQlpZiAocnN2LT5vd25lciA9PSB1d2JfZGV2CisJCSAgICB8fCAocnN2LT50YXJnZXQudHlwZSA9PSBVV0JfUlNWX1RBUkdFVF9ERVYgJiYgcnN2LT50YXJnZXQuZGV2ID09IHV3Yl9kZXYpKQorCQkJdXdiX3Jzdl9yZW1vdmUocnN2KTsKKwl9Cit9CisKKworLyoqCisgKiB1d2JkX2V2dF9oYW5kbGVfcmNfZHJwIC0gaGFuZGxlIGEgRFJQX0lFIGV2ZW50CisgKiBAZXZ0OiB0aGUgRFJQX0lFIGV2ZW50IGZyb20gdGhlIHJhZGlvIGNvbnRyb2xsZXIKKyAqCisgKiBUaGlzIHByb2Nlc3NlcyBEUlAgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSByYWRpbyBjb250cm9sbGVyLCBlaXRoZXIKKyAqIGluaXRpYXRpbmcgYSBuZXcgcmVzZXJ2YXRpb24gb3IgdHJhbnNpdGlvbmluZyBhbiBleGlzdGluZworICogcmVzZXJ2YXRpb24gaW50byBhIGRpZmZlcmVudCBzdGF0ZS4KKyAqCisgKiBEUlAgbm90aWZpY2F0aW9ucyBjYW4gb2NjdXIgZm9yIHRocmVlIGRpZmZlcmVudCByZWFzb25zOgorICoKKyAqIC0gVVdCX0RSUF9OT1RJRl9EUlBfSUVfUkVDVkQ6IG9uZSBvciBtb3JlIERSUCBJRXMgd2l0aCB0aGUgUkMgYXMKKyAqICAgdGhlIHRhcmdldCBvciBzb3VyY2UgaGF2ZSBiZWVuIHJlY2lldmVkLgorICoKKyAqICAgVGhlc2UgRFJQIElFcyBjb3VsZCBiZSBuZXcgb3IgZm9yIGFuIGV4aXN0aW5nIHJlc2VydmF0aW9uLgorICoKKyAqICAgSWYgdGhlIERSUCBJRSBmb3IgYW4gZXhpc3RpbmcgcmVzZXJ2YXRpb24gY2Vhc2VzIHRvIGJlIHRvCisgKiAgIHJlY2lldmVkIGZvciBhdCBsZWFzdCBtTWF4TG9zdEJlYWNvbnMsIHRoZSByZXNlcnZhdGlvbiBzaG91bGQgYmUKKyAqICAgY29uc2lkZXJlZCB0byBiZSB0ZXJtaW5hdGVkLiAgTm90ZSB0aGF0IHRoZSBURVJNSU5BVEUgcmVhc29uIChzZWUKKyAqICAgYmVsb3cpIG1heSBub3QgYWx3YXlzIGJlIHNpZ25hbGxlZCAoZS5nLiwgdGhlIHJlbW90ZSBkZXZpY2UgaGFzCisgKiAgIHR3byBvciBtb3JlIHJlc2VydmF0aW9ucyBlc3RhYmxpc2hlZCB3aXRoIHRoZSBSQykuCisgKgorICogLSBVV0JfRFJQX05PVElGX0NPTkZMSUNUOiBEUlAgSUVzIGZyb20gYW55IGRldmljZSBpbiB0aGUgYmVhY29uCisgKiAgIGdyb3VwIGNvbmZsaWN0IHdpdGggdGhlIFJDJ3MgcmVzZXJ2YXRpb25zLgorICoKKyAqIC0gVVdCX0RSUF9OT1RJRl9URVJNSU5BVEU6IERSUCBJRXMgYXJlIG5vIGxvbmdlciBiZWluZyByZWNlaXZlZAorICogICBmcm9tIGEgZGV2aWNlIChpLmUuLCBpdCdzIHRlcm1pbmF0ZWQgYWxsIHJlc2VydmF0aW9ucykuCisgKgorICogT25seSB0aGUgc29mdHdhcmUgc3RhdGUgb2YgdGhlIHJlc2VydmF0aW9ucyBpcyBjaGFuZ2VkOyB0aGUgc2V0dGluZworICogb2YgdGhlIHJhZGlvIGNvbnRyb2xsZXIncyBEUlAgSUVzIGlzIGRvbmUgYWZ0ZXIgYWxsIHRoZSBldmVudHMgaW4KKyAqIGFuIGV2ZW50IGJ1ZmZlciBhcmUgcHJvY2Vzc2VkLiAgVGhpcyBzYXZlcyB3YWl0aW5nIG11bHRpcGxlIHRpbWVzCisgKiBmb3IgdGhlIFNFVF9EUlBfSUUgY29tbWFuZCB0byBjb21wbGV0ZS4KKyAqLworaW50IHV3YmRfZXZ0X2hhbmRsZV9yY19kcnAoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZldnQtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IGV2dC0+cmM7CisJc3RydWN0IHV3Yl9yY19ldnRfZHJwICpkcnBfZXZ0OworCXNpemVfdCBpZWxlbmd0aCwgYnl0ZXNfbGVmdDsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIHNyY19hZGRyOworCXN0cnVjdCB1d2JfZGV2ICpzcmNfZGV2OworCWludCByZWFzb247CisKKwkvKiBJcyB0aGVyZSBlbm91Z2ggZGF0YSB0byBkZWNvZGUgdGhlIGV2ZW50IChhbmQgYW55IElFcyBpbgorCSAgIGl0cyBwYXlsb2FkKT8gKi8KKwlpZiAoZXZ0LT5ub3RpZi5zaXplIDwgc2l6ZW9mKCpkcnBfZXZ0KSkgeworCQlkZXZfZXJyKGRldiwgIkRSUCBldmVudDogTm90IGVub3VnaCBkYXRhIHRvIGRlY29kZSBldmVudCAiCisJCQkiWyV6dSBieXRlcyBsZWZ0LCAlenUgbmVlZGVkXVxuIiwKKwkJCWV2dC0+bm90aWYuc2l6ZSwgc2l6ZW9mKCpkcnBfZXZ0KSk7CisJCXJldHVybiAwOworCX0KKwlieXRlc19sZWZ0ID0gZXZ0LT5ub3RpZi5zaXplIC0gc2l6ZW9mKCpkcnBfZXZ0KTsKKwlkcnBfZXZ0ID0gY29udGFpbmVyX29mKGV2dC0+bm90aWYucmNlYiwgc3RydWN0IHV3Yl9yY19ldnRfZHJwLCByY2ViKTsKKwlpZWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRycF9ldnQtPmllX2xlbmd0aCk7CisJaWYgKGJ5dGVzX2xlZnQgIT0gaWVsZW5ndGgpIHsKKwkJZGV2X2VycihkZXYsICJEUlAgZXZlbnQ6IE5vdCBlbm91Z2ggZGF0YSBpbiBwYXlsb2FkIFslenUiCisJCQkiYnl0ZXMgbGVmdCwgJXp1IGRlY2xhcmVkIGluIHRoZSBldmVudF1cbiIsCisJCQlieXRlc19sZWZ0LCBpZWxlbmd0aCk7CisJCXJldHVybiAwOworCX0KKworCW1lbWNweShzcmNfYWRkci5kYXRhLCAmZHJwX2V2dC0+c3JjX2FkZHIsIHNpemVvZihzcmNfYWRkcikpOworCXNyY19kZXYgPSB1d2JfZGV2X2dldF9ieV9kZXZhZGRyKHJjLCAmc3JjX2FkZHIpOworCWlmICghc3JjX2RldikgeworCQkvKgorCQkgKiBBIERSUCBub3RpZmljYXRpb24gZnJvbSBhbiB1bnJlY29nbml6ZWQgZGV2aWNlLgorCQkgKgorCQkgKiBUaGlzIGlzIHByb2JhYmx5IGZyb20gYSBXVVNCIGRldmljZSB0aGF0IGRvZXNuJ3QKKwkJICogaGF2ZSBhbiBFVUktNDggYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHNob3cgdXAgaW4gdGhlCisJCSAqIFVXQiBkZXZpY2UgZGF0YWJhc2UuICBJdCdzIHNhZmUgdG8gc2ltcGx5IGlnbm9yZQorCQkgKiB0aGVzZS4KKwkJICovCisJCXJldHVybiAwOworCX0KKworCW11dGV4X2xvY2soJnJjLT5yc3ZzX211dGV4KTsKKworCXJlYXNvbiA9IHV3Yl9yY19ldnRfZHJwX3JlYXNvbihkcnBfZXZ0KTsKKworCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBVV0JfRFJQX05PVElGX0RSUF9JRV9SQ1ZEOgorCQl1d2JfZHJwX3Byb2Nlc3NfYWxsKHJjLCBkcnBfZXZ0LCBpZWxlbmd0aCwgc3JjX2Rldik7CisJCWJyZWFrOworCWNhc2UgVVdCX0RSUF9OT1RJRl9DT05GTElDVDoKKwkJdXdiX2RycF9wcm9jZXNzX2NvbmZsaWN0X2FsbChyYywgZHJwX2V2dCwgaWVsZW5ndGgsIHNyY19kZXYpOworCQlicmVhazsKKwljYXNlIFVXQl9EUlBfTk9USUZfVEVSTUlOQVRFOgorCQl1d2JfZHJwX3Rlcm1pbmF0ZV9hbGwocmMsIHNyY19kZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihkZXYsICJpZ25vcmVkIERSUCBldmVudCB3aXRoIHJlYXNvbiBjb2RlOiAlZFxuIiwgcmVhc29uKTsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyYy0+cnN2c19tdXRleCk7CisKKwl1d2JfZGV2X3B1dChzcmNfZGV2KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2VzdC5jIGIvZHJpdmVycy91d2IvZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlNTY2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2VzdC5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogVWx0cmEgV2lkZSBCYW5kIFJhZGlvIENvbnRyb2wKKyAqIEV2ZW50IFNpemUgVGFibGVzIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBkb2NzCisgKgorICogSW5mcmFzdHJ1Y3R1cmUsIGNvZGUgYW5kIGRhdGEgdGFibGVzIGZvciBndWVzc2luZyB0aGUgc2l6ZSBvZgorICogZXZlbnRzIHJlY2VpdmVkIG9uIHRoZSBub3RpZmljYXRpb24gZW5kcG9pbnRzIG9mIFVXQiByYWRpbworICogY29udHJvbGxlcnMuCisgKgorICogWW91IGRlZmluZSBhIHRhYmxlIG9mIGV2ZW50cyBhbmQgZm9yIGVhY2gsIGl0cyBzaXplIGFuZCBob3cgdG8gZ2V0CisgKiB0aGUgZXh0cmEgc2l6ZS4KKyAqCisgKiBFTlRSWSBQT0lOVFM6CisgKgorICogdXdiX2VzdF97aW5pdC9kZXN0cm95fSgpOiBUbyBpbml0aWFsaXplL3JlbGVhc2UgdGhlIEVTVCBzdWJzeXN0ZW0uCisgKgorICogdXdiX2VzdF9bdV1yZWdpc3RlcigpOiBUbyB1bi9yZWdpc3RlciBldmVudCBzaXplIHRhYmxlcworICogICB1d2JfZXN0X2dyb3coKQorICoKKyAqIHV3Yl9lc3RfZmluZF9zaXplKCk6IEdldCB0aGUgc2l6ZSBvZiBhbiBldmVudAorICogICB1d2JfZXN0X2dldF9zaXplKCkKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjZGVmaW5lIERfTE9DQUwgMAorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorI2luY2x1ZGUgInV3Yi1pbnRlcm5hbC5oIgorCisKK3N0cnVjdCB1d2JfZXN0IHsKKwl1MTYgdHlwZV9ldmVudF9oaWdoOworCXUxNiB2ZW5kb3IsIHByb2R1Y3Q7CisJdTggZW50cmllczsKKwljb25zdCBzdHJ1Y3QgdXdiX2VzdF9lbnRyeSAqZW50cnk7Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXdiX2VzdCAqdXdiX2VzdDsKK3N0YXRpYyB1OCB1d2JfZXN0X3NpemU7CitzdGF0aWMgdTggdXdiX2VzdF91c2VkOworc3RhdGljIERFRklORV9SV0xPQ0sodXdiX2VzdF9sb2NrKTsKKworLyoqCisgKiBXVVNCIFN0YW5kYXJkIEV2ZW50IFNpemUgVGFibGUsIEhXQS1SQyBpbnRlcmZhY2UKKyAqCisgKiBTaXplcyBmb3IgZXZlbnRzIGFuZCBub3RpZmljYXRpb25zIHR5cGUgMCAoZ2VuZXJhbCksIGhpZ2ggbmliYmxlIDAuCisgKi8KK3N0YXRpYworc3RydWN0IHV3Yl9lc3RfZW50cnkgdXdiX2VzdF8wMF8wMHh4W10gPSB7CisJW1VXQl9SQ19FVlRfSUVfUkNWXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHV3Yl9yY19ldnRfaWVfcmN2KSwKKwkJLm9mZnNldCA9IDEgKyBvZmZzZXRvZihzdHJ1Y3QgdXdiX3JjX2V2dF9pZV9yY3YsIHdJRUxlbmd0aCksCisJfSwKKwlbVVdCX1JDX0VWVF9CRUFDT05dID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb24pLAorCQkub2Zmc2V0ID0gMSArIG9mZnNldG9mKHN0cnVjdCB1d2JfcmNfZXZ0X2JlYWNvbiwgd0JlYWNvbkluZm9MZW5ndGgpLAorCX0sCisJW1VXQl9SQ19FVlRfQkVBQ09OX1NJWkVdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb25fc2l6ZSksCisJfSwKKwlbVVdCX1JDX0VWVF9CUE9JRV9DSEFOR0VdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9icG9pZV9jaGFuZ2UpLAorCQkub2Zmc2V0ID0gMSArIG9mZnNldG9mKHN0cnVjdCB1d2JfcmNfZXZ0X2Jwb2llX2NoYW5nZSwKKwkJCQkgICAgICAgd0JQT0lFTGVuZ3RoKSwKKwl9LAorCVtVV0JfUkNfRVZUX0JQX1NMT1RfQ0hBTkdFXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHV3Yl9yY19ldnRfYnBfc2xvdF9jaGFuZ2UpLAorCX0sCisJW1VXQl9SQ19FVlRfQlBfU1dJVENIX0lFX1JDVl0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2JwX3N3aXRjaF9pZV9yY3YpLAorCQkub2Zmc2V0ID0gMSArIG9mZnNldG9mKHN0cnVjdCB1d2JfcmNfZXZ0X2JwX3N3aXRjaF9pZV9yY3YsIHdJRUxlbmd0aCksCisJfSwKKwlbVVdCX1JDX0VWVF9ERVZfQUREUl9DT05GTElDVF0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2Rldl9hZGRyX2NvbmZsaWN0KSwKKwl9LAorCVtVV0JfUkNfRVZUX0RSUF9BVkFJTF0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2RycF9hdmFpbCkKKwl9LAorCVtVV0JfUkNfRVZUX0RSUF0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2RycCksCisJCS5vZmZzZXQgPSAxICsgb2Zmc2V0b2Yoc3RydWN0IHV3Yl9yY19ldnRfZHJwLCBpZV9sZW5ndGgpLAorCX0sCisJW1VXQl9SQ19FVlRfQlBfU1dJVENIX1NUQVRVU10gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2JwX3N3aXRjaF9zdGF0dXMpLAorCX0sCisJW1VXQl9SQ19FVlRfQ01EX0ZSQU1FX1JDVl0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NtZF9mcmFtZV9yY3YpLAorCQkub2Zmc2V0ID0gMSArIG9mZnNldG9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NtZF9mcmFtZV9yY3YsIGRhdGFMZW5ndGgpLAorCX0sCisJW1VXQl9SQ19FVlRfQ0hBTk5FTF9DSEFOR0VfSUVfUkNWXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHV3Yl9yY19ldnRfY2hhbm5lbF9jaGFuZ2VfaWVfcmN2KSwKKwkJLm9mZnNldCA9IDEgKyBvZmZzZXRvZihzdHJ1Y3QgdXdiX3JjX2V2dF9jaGFubmVsX2NoYW5nZV9pZV9yY3YsIHdJRUxlbmd0aCksCisJfSwKKwlbVVdCX1JDX0NNRF9DSEFOTkVMX0NIQU5HRV0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0pLAorCX0sCisJW1VXQl9SQ19DTURfREVWX0FERFJfTUdNVF0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2Rldl9hZGRyX21nbXQpIH0sCisJW1VXQl9SQ19DTURfR0VUX0lFXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHV3Yl9yY19ldnRfZ2V0X2llKSwKKwkJLm9mZnNldCA9IDEgKyBvZmZzZXRvZihzdHJ1Y3QgdXdiX3JjX2V2dF9nZXRfaWUsIHdJRUxlbmd0aCksCisJfSwKKwlbVVdCX1JDX0NNRF9SRVNFVF0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0pLAorCX0sCisJW1VXQl9SQ19DTURfU0NBTl0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0pLAorCX0sCisJW1VXQl9SQ19DTURfU0VUX0JFQUNPTl9GSUxURVJdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9jb25maXJtKSwKKwl9LAorCVtVV0JfUkNfQ01EX1NFVF9EUlBfSUVdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9zZXRfZHJwX2llKSwKKwl9LAorCVtVV0JfUkNfQ01EX1NFVF9JRV0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X3NldF9pZSksCisJfSwKKwlbVVdCX1JDX0NNRF9TRVRfTk9USUZJQ0FUSU9OX0ZJTFRFUl0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0pLAorCX0sCisJW1VXQl9SQ19DTURfU0VUX1RYX1BPV0VSXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHV3Yl9yY19ldnRfY29uZmlybSksCisJfSwKKwlbVVdCX1JDX0NNRF9TTEVFUF0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0pLAorCX0sCisJW1VXQl9SQ19DTURfU1RBUlRfQkVBQ09OXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHV3Yl9yY19ldnRfY29uZmlybSksCisJfSwKKwlbVVdCX1JDX0NNRF9TVE9QX0JFQUNPTl0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0pLAorCX0sCisJW1VXQl9SQ19DTURfQlBfTUVSR0VdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9jb25maXJtKSwKKwl9LAorCVtVV0JfUkNfQ01EX1NFTkRfQ09NTUFORF9GUkFNRV0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0pLAorCX0sCisJW1VXQl9SQ19DTURfU0VUX0FTSUVfTk9USUZdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9jb25maXJtKSwKKwl9LAorfTsKKworc3RhdGljCitzdHJ1Y3QgdXdiX2VzdF9lbnRyeSB1d2JfZXN0XzAxXzAweHhbXSA9IHsKKwlbVVdCX1JDX0RBQV9FTkVSR1lfREVURUNURURdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9kYWFfZW5lcmd5X2RldGVjdGVkKSwKKwl9LAorCVtVV0JfUkNfU0VUX0RBQV9FTkVSR1lfTUFTS10gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X3NldF9kYWFfZW5lcmd5X21hc2spLAorCX0sCisJW1VXQl9SQ19TRVRfTk9USUZJQ0FUSU9OX0ZJTFRFUl9FWF0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X3NldF9ub3RpZmljYXRpb25fZmlsdGVyX2V4KSwKKwl9LAorfTsKKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBFU1Qgc3Vic3lzdGVtCisgKgorICogUmVnaXN0ZXIgdGhlIHN0YW5kYXJkIHRhYmxlcyBhbHNvLgorICoKKyAqIEZJWE1FOiB0YWcgaW5pdAorICovCitpbnQgdXdiX2VzdF9jcmVhdGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJdXdiX2VzdF9zaXplID0gMjsKKwl1d2JfZXN0X3VzZWQgPSAwOworCXV3Yl9lc3QgPSBremFsbG9jKHV3Yl9lc3Rfc2l6ZSAqIHNpemVvZih1d2JfZXN0WzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHV3Yl9lc3QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXN1bHQgPSB1d2JfZXN0X3JlZ2lzdGVyKFVXQl9SQ19DRVRfR0VORVJBTCwgMCwgMHhmZmZmLCAweGZmZmYsCisJCQkJICB1d2JfZXN0XzAwXzAweHgsIEFSUkFZX1NJWkUodXdiX2VzdF8wMF8wMHh4KSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0OworCXJlc3VsdCA9IHV3Yl9lc3RfcmVnaXN0ZXIoVVdCX1JDX0NFVF9FWF9UWVBFXzEsIDAsIDB4ZmZmZiwgMHhmZmZmLAorCQkJCSAgdXdiX2VzdF8wMV8wMHh4LCBBUlJBWV9TSVpFKHV3Yl9lc3RfMDFfMDB4eCkpOworb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqIENsZWFuIGl0IHVwICovCit2b2lkIHV3Yl9lc3RfZGVzdHJveSh2b2lkKQoreworCWtmcmVlKHV3Yl9lc3QpOworCXV3Yl9lc3QgPSBOVUxMOworCXV3Yl9lc3Rfc2l6ZSA9IHV3Yl9lc3RfdXNlZCA9IDA7Cit9CisKKworLyoqCisgKiBEb3VibGUgdGhlIGNhcGFjaXR5IG9mIHRoZSBFU1QgdGFibGUKKyAqCisgKiBAcmV0dXJucyAwIGlmIG9rLCA8IDAgZXJybm8gbm8gZXJyb3IuCisgKi8KK3N0YXRpYworaW50IHV3Yl9lc3RfZ3Jvdyh2b2lkKQoreworCXNpemVfdCBhY3R1YWxfc2l6ZSA9IHV3Yl9lc3Rfc2l6ZSAqIHNpemVvZih1d2JfZXN0WzBdKTsKKwl2b2lkICpuZXcgPSBrbWFsbG9jKDIgKiBhY3R1YWxfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKG5ldyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkobmV3LCB1d2JfZXN0LCBhY3R1YWxfc2l6ZSk7CisJbWVtc2V0KG5ldyArIGFjdHVhbF9zaXplLCAwLCBhY3R1YWxfc2l6ZSk7CisJa2ZyZWUodXdiX2VzdCk7CisJdXdiX2VzdCA9IG5ldzsKKwl1d2JfZXN0X3NpemUgKj0gMjsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIFJlZ2lzdGVyIGFuIGV2ZW50IHNpemUgdGFibGUKKyAqCisgKiBNYWtlcyByb29tIGZvciBpdCBpZiB0aGUgdGFibGUgaXMgZnVsbCwgYW5kIHRoZW4gaW5zZXJ0cyAgaXQgaW4gdGhlCisgKiByaWdodCBwb3NpdGlvbiAoZW50cmllcyBhcmUgc29ydGVkIGJ5IHR5cGUsIGV2ZW50X2hpZ2gsIHZlbmRvciBhbmQKKyAqIHRoZW4gcHJvZHVjdCkuCisgKgorICogQHZlbmRvcjogIHZlbmRvciBjb2RlIGZvciBtYXRjaGluZyBhZ2FpbnN0IHRoZSBkZXZpY2UgKDB4MDAwMCBhbmQKKyAqICAgICAgICAgICAweGZmZmYgbWVhbiBhbnkpOyB1c2UgMHgwMDAwIHRvIGZvcmNlIGFsbCB0byBtYXRjaCB3aXRob3V0CisgKiAgICAgICAgICAgY2hlY2tpbmcgcG9zc2libGUgdmVuZG9yIHNwZWNpZmljIG9uZXMsIDB4ZmZmZmYgdG8gbWF0Y2gKKyAqICAgICAgICAgICBhZnRlciBjaGVja2luZyB2ZW5kb3Igc3BlY2lmaWMgb25lcy4KKyAqCisgKiBAcHJvZHVjdDogcHJvZHVjdCBjb2RlIGZyb20gdGhhdCB2ZW5kb3I7IHNhbWUgbWF0Y2hpbmcgcnVsZXMsIHVzZQorICogICAgICAgICAgIDB4MDAwMCBmb3Igbm90IGFsbG93aW5nIHZlbmRvciBzcGVjaWZpYyBtYXRjaGVzLCAweGZmZmYKKyAqICAgICAgICAgICBmb3IgYWxsb3dpbmcuCisgKgorICogVGhpcyBhcnJhZ2VtZW50IGp1c3QgbWFrZXMgdGhlIHRhYmxlcyBzb3J0IGRpZmZlcmVudHkuIEJlY2F1c2UgdGhlCisgKiB0YWJsZSBpcyBzb3J0ZWQgYnkgZ3Jvd2luZyB0eXBlLWV2ZW50X2hpZ2gtdmVuZG9yLXByb2R1Y3QsIGEgemVybworICogdmVuZG9yIHdpbGwgbWF0Y2ggYmVmb3JlIHRoYW4gYSAweDQ1NmEgdmVuZG9yLCB0aGF0IHdpbGwgbWF0Y2gKKyAqIGJlZm9yZSBhIDB4ZmZmZmYgdmVuZG9yLgorICoKKyAqIEByZXR1cm5zIDAgaWYgb2ssIDwgMCBlcnJubyBvbiBlcnJvciAoLUVOT0VOVCBpZiBub3QgZm91bmQpLgorICovCisvKiBGSVhNRTogYWRkIGJ1cyB0eXBlIHRvIHZlbmRvci9wcm9kdWN0IGNvZGUgKi8KK2ludCB1d2JfZXN0X3JlZ2lzdGVyKHU4IHR5cGUsIHU4IGV2ZW50X2hpZ2gsIHUxNiB2ZW5kb3IsIHUxNiBwcm9kdWN0LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1d2JfZXN0X2VudHJ5ICplbnRyeSwgc2l6ZV90IGVudHJpZXMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpdHI7CisJdTE2IHR5cGVfZXZlbnRfaGlnaDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmdXdiX2VzdF9sb2NrLCBmbGFncyk7CisJaWYgKHV3Yl9lc3RfdXNlZCA9PSB1d2JfZXN0X3NpemUpIHsKKwkJcmVzdWx0ID0gdXdiX2VzdF9ncm93KCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCS8qIEZpbmQgdGhlIHJpZ2h0IHNwb3QgdG8gaW5zZXJ0IGl0IGluICovCisJdHlwZV9ldmVudF9oaWdoID0gdHlwZSA8PCA4IHwgZXZlbnRfaGlnaDsKKwlmb3IgKGl0ciA9IDA7IGl0ciA8IHV3Yl9lc3RfdXNlZDsgaXRyKyspCisJCWlmICh1d2JfZXN0W2l0cl0udHlwZV9ldmVudF9oaWdoIDwgdHlwZQorCQkgICAgJiYgdXdiX2VzdFtpdHJdLnZlbmRvciA8IHZlbmRvcgorCQkgICAgJiYgdXdiX2VzdFtpdHJdLnByb2R1Y3QgPCBwcm9kdWN0KQorCQkJYnJlYWs7CisKKwkvKiBTaGlmdCBvdGhlcnMgdG8gbWFrZSByb29tIGZvciB0aGUgbmV3IG9uZT8gKi8KKwlpZiAoaXRyIDwgdXdiX2VzdF91c2VkKQorCQltZW1tb3ZlKCZ1d2JfZXN0W2l0cisxXSwgJnV3Yl9lc3RbaXRyXSwgdXdiX2VzdF91c2VkIC0gaXRyKTsKKwl1d2JfZXN0W2l0cl0udHlwZV9ldmVudF9oaWdoID0gdHlwZSA8PCA4IHwgZXZlbnRfaGlnaDsKKwl1d2JfZXN0W2l0cl0udmVuZG9yID0gdmVuZG9yOworCXV3Yl9lc3RbaXRyXS5wcm9kdWN0ID0gcHJvZHVjdDsKKwl1d2JfZXN0W2l0cl0uZW50cnkgPSBlbnRyeTsKKwl1d2JfZXN0W2l0cl0uZW50cmllcyA9IGVudHJpZXM7CisJdXdiX2VzdF91c2VkKys7CitvdXQ6CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnV3Yl9lc3RfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfZXN0X3JlZ2lzdGVyKTsKKworCisvKioKKyAqIFVucmVnaXN0ZXIgYW4gZXZlbnQgc2l6ZSB0YWJsZQorICoKKyAqIFRoaXMganVzdCByZW1vdmVzIHRoZSBzcGVjaWZpZWQgZW50cnkgYW5kIG1vdmVzIHRoZSBvbmVzIGFmdGVyIGl0CisgKiB0byBmaWxsIGluIHRoZSBnYXAuIFRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIGxpc3Qgc29ydGVkOyBubworICogcmVhbGxvY2F0aW9uIGlzIGRvbmUgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSB0YWJsZS4KKyAqCisgKiBXZSB1bnJlZ2lzdGVyIGJ5IGFsbCB0aGUgZGF0YSB3ZSB1c2VkIHRvIHJlZ2lzdGVyIGluc3RlYWQgb2YgYnkKKyAqIHBvaW50ZXIgdG8gdGhlIEBlbnRyeSBhcnJheSBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdXNlZCB0aGUgc2FtZQorICogdGFibGUgZm9yIGEgYnVuY2ggb2YgSURzIChmb3IgZXhhbXBsZSkuCisgKgorICogQHJldHVybnMgMCBpZiBvaywgPCAwIGVycm5vIG9uIGVycm9yICgtRU5PRU5UIGlmIG5vdCBmb3VuZCkuCisgKi8KK2ludCB1d2JfZXN0X3VucmVnaXN0ZXIodTggdHlwZSwgdTggZXZlbnRfaGlnaCwgdTE2IHZlbmRvciwgdTE2IHByb2R1Y3QsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXdiX2VzdF9lbnRyeSAqZW50cnksIHNpemVfdCBlbnRyaWVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaXRyOworCXN0cnVjdCB1d2JfZXN0IGVzdF9jbXAgPSB7CisJCS50eXBlX2V2ZW50X2hpZ2ggPSB0eXBlIDw8IDggfCBldmVudF9oaWdoLAorCQkudmVuZG9yID0gdmVuZG9yLAorCQkucHJvZHVjdCA9IHByb2R1Y3QsCisJCS5lbnRyeSA9IGVudHJ5LAorCQkuZW50cmllcyA9IGVudHJpZXMKKwl9OworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmdXdiX2VzdF9sb2NrLCBmbGFncyk7CisJZm9yIChpdHIgPSAwOyBpdHIgPCB1d2JfZXN0X3VzZWQ7IGl0cisrKQorCQlpZiAoIW1lbWNtcCgmdXdiX2VzdFtpdHJdLCAmZXN0X2NtcCwgc2l6ZW9mKGVzdF9jbXApKSkKKwkJCWdvdG8gZm91bmQ7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnV3Yl9lc3RfbG9jaywgZmxhZ3MpOworCXJldHVybiAtRU5PRU5UOworCitmb3VuZDoKKwlpZiAoaXRyIDwgdXdiX2VzdF91c2VkIC0gMSkJLyogTm90IGxhc3Qgb25lPyBtb3ZlIG9uZXMgYWJvdmUgKi8KKwkJbWVtbW92ZSgmdXdiX2VzdFtpdHJdLCAmdXdiX2VzdFtpdHIrMV0sIHV3Yl9lc3RfdXNlZCAtIGl0ciAtIDEpOworCXV3Yl9lc3RfdXNlZC0tOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZ1d2JfZXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9lc3RfdW5yZWdpc3Rlcik7CisKKworLyoqCisgKiBHZXQgdGhlIHNpemUgb2YgYW4gZXZlbnQgZnJvbSBhIHRhYmxlCisgKgorICogQHJjZWI6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aXRoIHRoZSBldmVudAorICogQHJjZWJfc2l6ZTogc2l6ZSBvZiB0aGUgYXJlYSBwb2ludGVkIHRvIGJ5IEByY2ViIGluIGJ5dGVzLgorICogQHJldHVybnM6ID4gMCAgICAgIFNpemUgb2YgdGhlIGV2ZW50CisgKgkgICAgIC1FTk9TUEMgIEFuIGFyZWEgYmlnIGVub3VnaCB3YXMgbm90IHByb3ZpZGVkIHRvIGxvb2sKKyAqCQkgICAgICBhaGVhZCBpbnRvIHRoZSBldmVudCdzIGd1dHMgYW5kIGd1ZXNzIHRoZSBzaXplLgorICoJICAgICAtRUlOVkFMICBVbmtub3duIGV2ZW50IGNvZGUgKHdFdmVudCkuCisgKgorICogVGhpcyB3aWxsIGxvb2sgYXQgdGhlIHJlY2VpdmVkIFJDRUIgYW5kIGd1ZXNzIHdoYXQgaXMgdGhlIHRvdGFsCisgKiBzaXplLiBGb3IgdmFyaWFibGUgc2l6ZWQgZXZlbnRzLCBpdCB3aWxsIGxvb2sgZnVydGhlciBhaGVhZCBpbnRvCisgKiB0aGVpciBsZW5ndGggZmllbGQgdG8gc2VlIGhvdyBtdWNoIGRhdGEgc2hvdWxkIGJlIHJlYWQuCisgKgorICogTm90ZSB0aGlzIHNpemUgaXMgKm5vdCogZmluYWwtLXRoZSBuZWggKE5vdGlmaWNhdGlvbi9FdmVudCBIYW5kbGUpCisgKiBtaWdodCBzcGVjaWZpY3kgYW4gZXh0cmEgc2l6ZSB0byBhZGQuCisgKi8KK3N0YXRpYworc3NpemVfdCB1d2JfZXN0X2dldF9zaXplKHN0cnVjdCB1d2JfcmMgKnV3Yl9yYywgc3RydWN0IHV3Yl9lc3QgKmVzdCwKKwkJCSB1OCBldmVudF9sb3csIGNvbnN0IHN0cnVjdCB1d2JfcmNlYiAqcmNlYiwKKwkJCSBzaXplX3QgcmNlYl9zaXplKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzc2l6ZV90IHNpemU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnV3Yl9yYy0+dXdiX2Rldi5kZXY7CisJY29uc3Qgc3RydWN0IHV3Yl9lc3RfZW50cnkgKmVudHJ5OworCisJc2l6ZSA9IC1FTk9FTlQ7CisJaWYgKGV2ZW50X2xvdyA+PSBlc3QtPmVudHJpZXMpIHsJLyogaW4gcmFuZ2U/ICovCisJCWRldl9lcnIoZGV2LCAiRVNUICVwIDB4JTA0eC8lMDR4LyUwNHhbJXVdOiBldmVudCAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQllc3QsIGVzdC0+dHlwZV9ldmVudF9oaWdoLCBlc3QtPnZlbmRvciwgZXN0LT5wcm9kdWN0LAorCQkJZXN0LT5lbnRyaWVzLCBldmVudF9sb3cpOworCQlnb3RvIG91dDsKKwl9CisJc2l6ZSA9IC1FTk9FTlQ7CisJZW50cnkgPSAmZXN0LT5lbnRyeVtldmVudF9sb3ddOworCWlmIChlbnRyeS0+c2l6ZSA9PSAwICYmIGVudHJ5LT5vZmZzZXQgPT0gMCkgewkvKiB1bmtub3duPyAqLworCQlkZXZfZXJyKGRldiwgIkVTVCAlcCAweCUwNHgvJTA0eC8lMDR4WyV1XTogZXZlbnQgJXUgdW5rbm93blxuIiwKKwkJCWVzdCwgZXN0LT50eXBlX2V2ZW50X2hpZ2gsIGVzdC0+dmVuZG9yLAllc3QtPnByb2R1Y3QsCisJCQllc3QtPmVudHJpZXMsIGV2ZW50X2xvdyk7CisJCWdvdG8gb3V0OworCX0KKwlvZmZzZXQgPSBlbnRyeS0+b2Zmc2V0OwkvKiBleHRyYSBmcmllcyB3aXRoIHRoYXQ/ICovCisJaWYgKG9mZnNldCA9PSAwKQorCQlzaXplID0gZW50cnktPnNpemU7CisJZWxzZSB7CisJCS8qIE9wcywgZ290IGFuIGV4dHJhIHNpemUgZmllbGQgYXQgJ29mZnNldCctLXJlYWQgaXQgKi8KKwkJY29uc3Qgdm9pZCAqcHRyID0gcmNlYjsKKwkJc2l6ZV90IHR5cGVfc2l6ZSA9IDA7CisJCW9mZnNldC0tOworCQlzaXplID0gLUVOT1NQQzsJCQkvKiBlbm91Z2ggZGF0YSBmb3IgbW9yZT8gKi8KKwkJc3dpdGNoIChlbnRyeS0+dHlwZSkgeworCQljYXNlIFVXQl9FU1RfMTY6ICB0eXBlX3NpemUgPSBzaXplb2YoX19sZTE2KTsgYnJlYWs7CisJCWNhc2UgVVdCX0VTVF84OiAgIHR5cGVfc2l6ZSA9IHNpemVvZih1OCk7ICAgICBicmVhazsKKwkJZGVmYXVsdDogCSBCVUcoKTsKKwkJfQorCQlpZiAob2Zmc2V0ICsgdHlwZV9zaXplID4gcmNlYl9zaXplKSB7CisJCQlkZXZfZXJyKGRldiwgIkVTVCAlcCAweCUwNHgvJTA0eC8lMDR4WyV1XTogIgorCQkJCSJub3QgZW5vdWdoIGRhdGEgdG8gcmVhZCBleHRyYSBzaXplXG4iLAorCQkJCWVzdCwgZXN0LT50eXBlX2V2ZW50X2hpZ2gsIGVzdC0+dmVuZG9yLAorCQkJCWVzdC0+cHJvZHVjdCwgZXN0LT5lbnRyaWVzKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNpemUgPSBlbnRyeS0+c2l6ZTsKKwkJcHRyICs9IG9mZnNldDsKKwkJc3dpdGNoIChlbnRyeS0+dHlwZSkgeworCQljYXNlIFVXQl9FU1RfMTY6ICBzaXplICs9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopcHRyKTsgYnJlYWs7CisJCWNhc2UgVVdCX0VTVF84OiAgIHNpemUgKz0gKih1OCAqKXB0cjsgICAgICAgICAgICAgICAgICBicmVhazsKKwkJZGVmYXVsdDogCSBCVUcoKTsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gc2l6ZTsKK30KKworCisvKioKKyAqIEd1ZXNzZXMgdGhlIHNpemUgb2YgYSBXQSBldmVudAorICoKKyAqIEByY2ViOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2l0aCB0aGUgZXZlbnQKKyAqIEByY2ViX3NpemU6IHNpemUgb2YgdGhlIGFyZWEgcG9pbnRlZCB0byBieSBAcmNlYiBpbiBieXRlcy4KKyAqIEByZXR1cm5zOiA+IDAgICAgICBTaXplIG9mIHRoZSBldmVudAorICoJICAgICAtRU5PU1BDICBBbiBhcmVhIGJpZyBlbm91Z2ggd2FzIG5vdCBwcm92aWRlZCB0byBsb29rCisgKgkJICAgICAgYWhlYWQgaW50byB0aGUgZXZlbnQncyBndXRzIGFuZCBndWVzcyB0aGUgc2l6ZS4KKyAqCSAgICAgLUVJTlZBTCAgVW5rbm93biBldmVudCBjb2RlICh3RXZlbnQpLgorICoKKyAqIFRoaXMgd2lsbCBsb29rIGF0IHRoZSByZWNlaXZlZCBSQ0VCIGFuZCBndWVzcyB3aGF0IGlzIHRoZSB0b3RhbAorICogc2l6ZSBieSBjaGVja2luZyBhbGwgdGhlIHRhYmxlcyByZWdpc3RlcmVkIHdpdGgKKyAqIHV3Yl9lc3RfcmVnaXN0ZXIoKS4gRm9yIHZhcmlhYmxlIHNpemVkIGV2ZW50cywgaXQgd2lsbCBsb29rIGZ1cnRoZXIKKyAqIGFoZWFkIGludG8gdGhlaXIgbGVuZ3RoIGZpZWxkIHRvIHNlZSBob3cgbXVjaCBkYXRhIHNob3VsZCBiZSByZWFkLgorICoKKyAqIE5vdGUgdGhpcyBzaXplIGlzICpub3QqIGZpbmFsLS10aGUgbmVoIChOb3RpZmljYXRpb24vRXZlbnQgSGFuZGxlKQorICogbWlnaHQgc3BlY2lmaWN5IGFuIGV4dHJhIHNpemUgdG8gYWRkIG9yIHJlcGxhY2UuCisgKi8KK3NzaXplX3QgdXdiX2VzdF9maW5kX3NpemUoc3RydWN0IHV3Yl9yYyAqcmMsIGNvbnN0IHN0cnVjdCB1d2JfcmNlYiAqcmNlYiwKKwkJCSAgc2l6ZV90IHJjZWJfc2l6ZSkKK3sKKwkvKiBGSVhNRTogYWRkIHZlbmRvci9wcm9kdWN0IGRhdGEgKi8KKwlzc2l6ZV90IHNpemU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJjLT51d2JfZGV2LmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGl0cjsKKwl1MTYgdHlwZV9ldmVudF9oaWdoLCBldmVudDsKKwl1OCAqcHRyID0gKHU4ICopIHJjZWI7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmdXdiX2VzdF9sb2NrLCBmbGFncyk7CisJZF9wcmludGYoMiwgZGV2LCAiU2l6ZSBxdWVyeSBmb3IgZXZlbnQgMHglMDJ4LyUwNHgvJTAyeCwiCisJCSAiIGJ1ZmZlciBzaXplICVsZFxuIiwKKwkJICh1bnNpZ25lZCkgcmNlYi0+YkV2ZW50VHlwZSwKKwkJICh1bnNpZ25lZCkgbGUxNl90b19jcHUocmNlYi0+d0V2ZW50KSwKKwkJICh1bnNpZ25lZCkgcmNlYi0+YkV2ZW50Q29udGV4dCwKKwkJIChsb25nKSByY2ViX3NpemUpOworCXNpemUgPSAtRU5PU1BDOworCWlmIChyY2ViX3NpemUgPCBzaXplb2YoKnJjZWIpKQorCQlnb3RvIG91dDsKKwlldmVudCA9IGxlMTZfdG9fY3B1KHJjZWItPndFdmVudCk7CisJdHlwZV9ldmVudF9oaWdoID0gcmNlYi0+YkV2ZW50VHlwZSA8PCA4IHwgKGV2ZW50ICYgMHhmZjAwKSA+PiA4OworCWZvciAoaXRyID0gMDsgaXRyIDwgdXdiX2VzdF91c2VkOyBpdHIrKykgeworCQlkX3ByaW50ZigzLCBkZXYsICJDaGVja2luZyBFU1QgMHglMDR4LyUwNHgvJTA0eFxuIiwKKwkJCXV3Yl9lc3RbaXRyXS50eXBlX2V2ZW50X2hpZ2gsIHV3Yl9lc3RbaXRyXS52ZW5kb3IsCisJCQl1d2JfZXN0W2l0cl0ucHJvZHVjdCk7CisJCWlmICh1d2JfZXN0W2l0cl0udHlwZV9ldmVudF9oaWdoICE9IHR5cGVfZXZlbnRfaGlnaCkKKwkJCWNvbnRpbnVlOworCQlzaXplID0gdXdiX2VzdF9nZXRfc2l6ZShyYywgJnV3Yl9lc3RbaXRyXSwKKwkJCQkJZXZlbnQgJiAweDAwZmYsIHJjZWIsIHJjZWJfc2l6ZSk7CisJCS8qIHRyeSBtb3JlIHRhYmxlcyB0aGF0IG1pZ2h0IGhhbmRsZSB0aGUgc2FtZSB0eXBlICovCisJCWlmIChzaXplICE9IC1FTk9FTlQpCisJCQlnb3RvIG91dDsKKwl9CisJZGV2X2RiZyhkZXYsICJldmVudCAweCUwMngvJTA0eC8lMDJ4OiBubyBoYW5kbGVycyBhdmFpbGFibGU7ICIKKwkJIlJDRUIgJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJKHVuc2lnbmVkKSByY2ViLT5iRXZlbnRUeXBlLAorCQkodW5zaWduZWQpIGxlMTZfdG9fY3B1KHJjZWItPndFdmVudCksCisJCSh1bnNpZ25lZCkgcmNlYi0+YkV2ZW50Q29udGV4dCwKKwkJcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdKTsKKwlzaXplID0gLUVOT0VOVDsKK291dDoKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ1d2JfZXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc2l6ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9lc3RfZmluZF9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2h3YS1yYy5jIGIvZHJpdmVycy91d2IvaHdhLXJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyNmZhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2h3YS1yYy5jCkBAIC0wLDAgKzEsOTI2IEBACisvKgorICogV1VTQiBIb3N0IFdpcmUgQWRhcHRlcjogUmFkaW8gQ29udHJvbCBJbnRlcmZhY2UgKFdVU0JbOC42XSkKKyAqIFJhZGlvIENvbnRyb2wgY29tbWFuZC9ldmVudCB0cmFuc3BvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEluaXRpYWxpemUgdGhlIFJhZGlvIENvbnRyb2wgaW50ZXJmYWNlIERyaXZlci4KKyAqCisgKiBGb3IgZWFjaCBkZXZpY2UgcHJvYmVkLCBjcmVhdGVzIGFuICdzdHJ1Y3QgaHdhcmMnIHdoaWNoIGNvbnRhaW5zCisgKiBqdXN0IHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVdCIFJhZGlvIENvbnRyb2xsZXIsIGFuZCB0aGUgbG9naWMKKyAqIGZvciByZWFkaW5nIG5vdGlmaWNhdGlvbnMgYW5kIHBhc3NpbmcgdGhlbSB0byB0aGUgVVdCIENvcmUuCisgKgorICogU28gd2UgaW5pdGlhbGl6ZSBhbGwgb2YgdGhvc2UsIHJlZ2lzdGVyIHRoZSBVV0IgUmFkaW8gQ29udHJvbGxlcgorICogYW5kIHNldHVwIHRoZSBub3RpZmljYXRpb24vZXZlbnQgaGFuZGxlIHRvIHBpcGUgdGhlIG5vdGlmaWNhdGlvbnMKKyAqIHRvIHRoZSBVV0IgbWFuYWdlbWVudCBEYWVtb24uCisgKgorICogQ29tbWFuZCBhbmQgZXZlbnQgZmlsdGVyaW5nLgorICoKKyAqIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFJhZGlvIENvbnRyb2wgSW50ZXJmYWNlIGRlc2NyaWJlZCBpbiBXVVNCCisgKiAxLjAuIFRoZSBjb3JlIFVXQiBtb2R1bGUgYXNzdW1lcyB0aGF0IGFsbCBkcml2ZXJzIGFyZSBjb21wbGlhbnQgdG8gdGhlCisgKiBXSENJIDAuOTUgc3BlY2lmaWNhdGlvbi4gV2UgdGh1cyBjcmVhdGUgYSBmaWx0ZXIgdGhhdCBwYXJzZXMgYWxsCisgKiBpbmNvbWluZyBtZXNzYWdlcyBmcm9tIHRoZSAoV1VTQiAxLjApIGRldmljZSBhbmQgbWFuaXB1bGF0ZSB0aGVtIHRvCisgKiBjb25mb3JtIHRvIHRoZSBXSENJIDAuOTUgc3BlY2lmaWNhdGlvbi4gU2ltaWxhcmx5LCBvdXRnb2luZyBtZXNzYWdlcworICogYXJlIHBhcnNlZCBhbmQgbWFuaXB1bGF0ZWQgdG8gY29uZm9ybSB0byB0aGUgV1VTQiAxLjAgY29tcGxpYW50IG1lc3NhZ2VzCisgKiB0aGF0IHRoZSBkZXZpY2UgZXhwZWN0cy4gT25seSBhIGZldyBtZXNzYWdlcyBhcmUgYWZmZWN0ZWQ6CisgKiBBZmZlY3RlZCBldmVudHM6CisgKiAgICBVV0JfUkNfRVZUX0JFQUNPTgorICogICAgVVdCX1JDX0VWVF9CUF9TTE9UX0NIQU5HRQorICogICAgVVdCX1JDX0VWVF9EUlBfQVZBSUwKKyAqICAgIFVXQl9SQ19FVlRfRFJQCisgKiBBZmZlY3RlZCBjb21tYW5kczoKKyAqICAgIFVXQl9SQ19DTURfU0NBTgorICogICAgVVdCX1JDX0NNRF9TRVRfRFJQX0lFCisgKgorICoKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi93dXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3d1c2Itd2EuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKyNkZWZpbmUgRF9MT0NBTCAxCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKy8qIFRoZSBkZXZpY2UgdXNlcyBjb21tYW5kcyBhbmQgZXZlbnRzIGZyb20gdGhlIFdIQ0kgc3BlY2lmaWNhdGlvbiwgYWx0aG91Z2gKKyAqIHJlcG9ydGluZyBpdHNlbGYgYXMgV1VTQiBjb21wbGlhbnQuICovCisjZGVmaW5lIFdVU0JfUVVJUktfV0hDSV9DTURfRVZUCQkweDAxCisKKy8qKgorICogRGVzY3JpcHRvciBmb3IgYW4gaW5zdGFuY2Ugb2YgdGhlIFVXQiBSYWRpbyBDb250cm9sIERyaXZlciB0aGF0CisgKiBhdHRhY2hlcyB0byB0aGUgUkNJIGludGVyZmFjZSBvZiB0aGUgSG9zdCBXaXJlZCBBZGFwdGVyLgorICoKKyAqIFVubGVzcyB0aGVyZSBpcyBhIGxvY2sgc3BlY2lmaWMgdG8gdGhlICdkYXRhIG1lbWJlcnMnLCBhbGwgYWNjZXNzCisgKiBpcyBwcm90ZWN0ZWQgYnkgdXdiX3JjLT5tdXRleC4KKyAqCisgKiBUaGUgTkVFUCAoTm90aWZpY2F0aW9uL0V2ZW50IEVuZFBvaW50KSBVUkIgKEBuZWVwX3VyYikgd3JpdGVzIHRvCisgKiBAcmRfYnVmZmVyLiBOb3RlIHRoZXJlIGlzIG5vIGxvY2tpbmcgYmVjYXVzZSBpdCBpcyBwZXJmZWN0bHkgKGhlaCEpCisgKiBzZXJpYWxpemVkLS1wcm9iZSgpIHN1Ym1pdHMgYW4gVVJCLCBjYWxsYmFjayBpcyBjYWxsZWQsIHByb2Nlc3NlcworICogdGhlIGRhdGEgKHN5bmNocm9ub3VzbHkpLCBzdWJtaXRzIGFub3RoZXIgVVJCLCBhbmQgc28gb24uIFRoZXJlIGlzCisgKiBubyBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYnVmZmVyLgorICovCitzdHJ1Y3QgaHdhcmMgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZhY2U7CisJc3RydWN0IHV3Yl9yYyAqdXdiX3JjOwkJLyogVVdCIGhvc3QgY29udHJvbGxlciAqLworCXN0cnVjdCB1cmIgKm5lZXBfdXJiOwkJLyogTm90aWZpY2F0aW9uIGVuZHBvaW50IGhhbmRsaW5nICovCisJc3RydWN0IGVkYyBuZWVwX2VkYzsKKwl2b2lkICpyZF9idWZmZXI7CQkvKiBORUVQIHJlYWQgYnVmZmVyICovCit9OworCisKKy8qIEJlYWNvbiByZWNlaXZlZCBub3RpZmljYXRpb24gKFdVU0IgMS4wIFs4LjYuMy4yXSkgKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2JlYWNvbl9XVVNCXzAxMDAgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCXU4CWJDaGFubmVsTnVtYmVyOworCV9fbGUxNgl3QlBTVE9mZnNldDsKKwl1OAliTFFJOworCXU4CWJSU1NJOworCV9fbGUxNgl3QmVhY29uSW5mb0xlbmd0aDsKKwl1OAlCZWFjb25JbmZvW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIEZpbHRlciBXVVNCIDEuMCBCRUFDT04gUkNWIG5vdGlmaWNhdGlvbiB0byBiZSBXSENJIDAuOTUKKyAqCisgKiBAaGVhZGVyOiB0aGUgaW5jb21pbmcgZXZlbnQKKyAqIEBidWZfc2l6ZTogc2l6ZSBvZiBidWZmZXIgY29udGFpbmluZyBpbmNvbWluZyBldmVudAorICogQG5ld19zaXplOiBzaXplIG9mIGV2ZW50IGFmdGVyIGZpbHRlcmluZyBjb21wbGV0ZWQKKyAqCisgKiBUaGUgV0hDSSAwLjk1IHNwZWMgaGFzIGEgIkJlYWNvbiBUeXBlIiBmaWVsZC4gVGhpcyB2YWx1ZSBpcyB1bmtub3duIGF0CisgKiB0aGUgdGltZSB3ZSByZWNlaXZlIHRoZSBiZWFjb24gZnJvbSBXVVNCIHNvIHdlIGp1c3Qgc2V0IGl0IHRvCisgKiBVV0JfUkNfQkVBQ09OX1RZUEVfTkVJR0hCT1IgYXMgYSBkZWZhdWx0LgorICogVGhlIHNvbHV0aW9uIGJlbG93IGFsbG9jYXRlcyBtZW1vcnkgdXBvbiByZWNlaXB0IG9mIGV2ZXJ5IGJlYWNvbiBmcm9tIGEKKyAqIFdVU0IgZGV2aWNlLiBUaGlzIHdpbGwgZGV0ZXJpb3JhdGUgcGVyZm9ybWFuY2UuIFdoYXQgaXMgdGhlIHJpZ2h0IHdheSB0bworICogZG8gdGhpcz8KKyAqLworc3RhdGljCitpbnQgaHdhcmNfZmlsdGVyX2V2dF9iZWFjb25fV1VTQl8wMTAwKHN0cnVjdCB1d2JfcmMgKnJjLAorCQkJCSAgICAgIHN0cnVjdCB1d2JfcmNlYiAqKmhlYWRlciwKKwkJCQkgICAgICBjb25zdCBzaXplX3QgYnVmX3NpemUsCisJCQkJICAgICAgc2l6ZV90ICpuZXdfc2l6ZSkKK3sKKwlzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb25fV1VTQl8wMTAwICpiZTsKKwlzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb24gKm5ld2JlOworCXNpemVfdCBieXRlc19sZWZ0LCBpZWxlbmd0aDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCisJYmUgPSBjb250YWluZXJfb2YoKmhlYWRlciwgc3RydWN0IHV3Yl9yY19ldnRfYmVhY29uX1dVU0JfMDEwMCwgcmNlYik7CisJYnl0ZXNfbGVmdCA9IGJ1Zl9zaXplOworCWlmIChieXRlc19sZWZ0IDwgc2l6ZW9mKCpiZSkpIHsKKwkJZGV2X2VycihkZXYsICJCZWFjb24gUmVjZWl2ZWQgTm90aWZpY2F0aW9uOiBOb3QgZW5vdWdoIGRhdGEgIgorCQkJInRvIGRlY29kZSBmb3IgZmlsdGVyaW5nICglenUgdnMgJXp1IGJ5dGVzIG5lZWRlZClcbiIsCisJCQlieXRlc19sZWZ0LCBzaXplb2YoKmJlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlieXRlc19sZWZ0IC09IHNpemVvZigqYmUpOworCWllbGVuZ3RoID0gbGUxNl90b19jcHUoYmUtPndCZWFjb25JbmZvTGVuZ3RoKTsKKwlpZiAoYnl0ZXNfbGVmdCA8IGllbGVuZ3RoKSB7CisJCWRldl9lcnIoZGV2LCAiQmVhY29uIFJlY2VpdmVkIE5vdGlmaWNhdGlvbjogTm90IGVub3VnaCBkYXRhICIKKwkJCSJ0byBkZWNvZGUgSUVzICglenUgdnMgJXp1IGJ5dGVzIG5lZWRlZClcbiIsCisJCQlieXRlc19sZWZ0LCBpZWxlbmd0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwluZXdiZSA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdiZSkgKyBpZWxlbmd0aCwgR0ZQX0FUT01JQyk7CisJaWYgKG5ld2JlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ld2JlLT5yY2ViID0gYmUtPnJjZWI7CisJbmV3YmUtPmJDaGFubmVsTnVtYmVyID0gYmUtPmJDaGFubmVsTnVtYmVyOworCW5ld2JlLT5iQmVhY29uVHlwZSA9IFVXQl9SQ19CRUFDT05fVFlQRV9ORUlHSEJPUjsKKwluZXdiZS0+d0JQU1RPZmZzZXQgPSBiZS0+d0JQU1RPZmZzZXQ7CisJbmV3YmUtPmJMUUkgPSBiZS0+YkxRSTsKKwluZXdiZS0+YlJTU0kgPSBiZS0+YlJTU0k7CisJbmV3YmUtPndCZWFjb25JbmZvTGVuZ3RoID0gYmUtPndCZWFjb25JbmZvTGVuZ3RoOworCW1lbWNweShuZXdiZS0+QmVhY29uSW5mbywgYmUtPkJlYWNvbkluZm8sIGllbGVuZ3RoKTsKKwkqaGVhZGVyID0gJm5ld2JlLT5yY2ViOworCSpuZXdfc2l6ZSA9IHNpemVvZigqbmV3YmUpICsgaWVsZW5ndGg7CisJcmV0dXJuIDE7ICAvKiBjYWxsaW5nIGZ1bmN0aW9uIHdpbGwgZnJlZSBtZW1vcnkgKi8KK30KKworCisvKiBEUlAgQXZhaWxhYmlsaXR5IGNoYW5nZSBub3RpZmljYXRpb24gKFdVU0IgMS4wIFs4LjYuMy44XSkgKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2RycF9hdmFpbF9XVVNCXzAxMDAgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCV9fbGUxNiB3SUVMZW5ndGg7CisJdTggSUVEYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIEZpbHRlciBXVVNCIDEuMCBEUlAgQVZBSUxBQklMSVRZIENIQU5HRSBub3RpZmljYXRpb24gdG8gYmUgV0hDSSAwLjk1CisgKgorICogQGhlYWRlcjogdGhlIGluY29taW5nIGV2ZW50CisgKiBAYnVmX3NpemU6IHNpemUgb2YgYnVmZmVyIGNvbnRhaW5pbmcgaW5jb21pbmcgZXZlbnQKKyAqIEBuZXdfc2l6ZTogc2l6ZSBvZiBldmVudCBhZnRlciBmaWx0ZXJpbmcgY29tcGxldGVkCisgKi8KK3N0YXRpYworaW50IGh3YXJjX2ZpbHRlcl9ldnRfZHJwX2F2YWlsX1dVU0JfMDEwMChzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCQkJIHN0cnVjdCB1d2JfcmNlYiAqKmhlYWRlciwKKwkJCQkJIGNvbnN0IHNpemVfdCBidWZfc2l6ZSwKKwkJCQkJIHNpemVfdCAqbmV3X3NpemUpCit7CisJc3RydWN0IHV3Yl9yY19ldnRfZHJwX2F2YWlsX1dVU0JfMDEwMCAqZGE7CisJc3RydWN0IHV3Yl9yY19ldnRfZHJwX2F2YWlsICpuZXdkYTsKKwlzdHJ1Y3QgdXdiX2llX2hkciAqaWVfaGRyOworCXNpemVfdCBieXRlc19sZWZ0LCBpZWxlbmd0aDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCisKKwlkYSA9IGNvbnRhaW5lcl9vZigqaGVhZGVyLCBzdHJ1Y3QgdXdiX3JjX2V2dF9kcnBfYXZhaWxfV1VTQl8wMTAwLCByY2ViKTsKKwlieXRlc19sZWZ0ID0gYnVmX3NpemU7CisJaWYgKGJ5dGVzX2xlZnQgPCBzaXplb2YoKmRhKSkgeworCQlkZXZfZXJyKGRldiwgIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNvZGUgRFJQIEF2YWlsICIKKwkJCSJOb3RpZmljYXRpb24gZm9yIGZpbHRlcmluZy4gRXhwZWN0ZWQgJXp1LCAiCisJCQkicmVjZWl2ZWQgJXp1LlxuIiwgKHNpemVfdClzaXplb2YoKmRhKSwgYnl0ZXNfbGVmdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlieXRlc19sZWZ0IC09IHNpemVvZigqZGEpOworCWllbGVuZ3RoID0gbGUxNl90b19jcHUoZGEtPndJRUxlbmd0aCk7CisJaWYgKGJ5dGVzX2xlZnQgPCBpZWxlbmd0aCkgeworCQlkZXZfZXJyKGRldiwgIkRSUCBBdmFpbCBOb3RpZmljYXRpb24gZmlsdGVyOiBJRSBsZW5ndGggIgorCQkJIlslenUgYnl0ZXNdIGRvZXMgbm90IG1hdGNoIGFjdHVhbCBsZW5ndGggIgorCQkJIlslenUgYnl0ZXNdLlxuIiwgaWVsZW5ndGgsIGJ5dGVzX2xlZnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGllbGVuZ3RoIDwgc2l6ZW9mKCppZV9oZHIpKSB7CisJCWRldl9lcnIoZGV2LCAiRFJQIEF2YWlsIE5vdGlmaWNhdGlvbiBmaWx0ZXI6IE5vdCBlbm91Z2ggIgorCQkJImRhdGEgdG8gZGVjb2RlIElFIFslenUgYnl0ZXMsICV6dSBuZWVkZWRdXG4iLAorCQkJaWVsZW5ndGgsIHNpemVvZigqaWVfaGRyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZV9oZHIgPSAodm9pZCAqKSBkYS0+SUVEYXRhOworCWlmIChpZV9oZHItPmxlbmd0aCA+IDMyKSB7CisJCWRldl9lcnIoZGV2LCAiRFJQIEF2YWlsYWJpbGl0eSBDaGFuZ2UgZXZlbnQgaGFzIHVuZXhwZWN0ZWQgIgorCQkJImxlbmd0aCBmb3IgZmlsdGVyaW5nLiBFeHBlY3RlZCA8IDMyIGJ5dGVzLCAiCisJCQkiZ290ICV6dSBieXRlcy5cbiIsIChzaXplX3QpaWVfaGRyLT5sZW5ndGgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbmV3ZGEgPSBremFsbG9jKHNpemVvZigqbmV3ZGEpLCBHRlBfQVRPTUlDKTsKKwlpZiAobmV3ZGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbmV3ZGEtPnJjZWIgPSBkYS0+cmNlYjsKKwltZW1jcHkobmV3ZGEtPmJtcCwgKHU4ICopIGllX2hkciArIHNpemVvZigqaWVfaGRyKSwgaWVfaGRyLT5sZW5ndGgpOworCSpoZWFkZXIgPSAmbmV3ZGEtPnJjZWI7CisJKm5ld19zaXplID0gc2l6ZW9mKCpuZXdkYSk7CisJcmV0dXJuIDE7IC8qIGNhbGxpbmcgZnVuY3Rpb24gd2lsbCBmcmVlIG1lbW9yeSAqLworfQorCisKKy8qIERSUCBub3RpZmljYXRpb24gKFdVU0IgMS4wIFs4LjYuMy45XSkgKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2RycF9XVVNCXzAxMDAgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgd1NyY0FkZHI7CisJdTggYkV4cGxpY2l0OworCV9fbGUxNiB3SUVMZW5ndGg7CisJdTggSUVEYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIEZpbHRlciBXVVNCIDEuMCBEUlAgTm90aWZpY2F0aW9uIHRvIGJlIFdIQ0kgMC45NQorICoKKyAqIEBoZWFkZXI6IHRoZSBpbmNvbWluZyBldmVudAorICogQGJ1Zl9zaXplOiBzaXplIG9mIGJ1ZmZlciBjb250YWluaW5nIGluY29taW5nIGV2ZW50CisgKiBAbmV3X3NpemU6IHNpemUgb2YgZXZlbnQgYWZ0ZXIgZmlsdGVyaW5nIGNvbXBsZXRlZAorICoKKyAqIEl0IGlzIGhhcmQgdG8gbWFuYWdlIERSUCByZXNlcnZhdGlvbnMgd2l0aG91dCBoYXZpbmcgYSBSZWFzb24gY29kZS4KKyAqIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm9uZSBpbiB0aGUgV1VTQiBzcGVjLiBXZSBqdXN0IHNldCB0aGUgZGVmYXVsdCB0bworICogRFJQIElFIFJFQ0VJVkVELgorICogV2UgZG8gbm90IGN1cnJlbnRseSB1c2UgdGhlIGJCZWFjb25TbG90TnVtYmVyIHZhbHVlLCBzbyB3ZSBzZXQgdGhpcyB0bworICogemVybyBmb3Igbm93LgorICovCitzdGF0aWMKK2ludCBod2FyY19maWx0ZXJfZXZ0X2RycF9XVVNCXzAxMDAoc3RydWN0IHV3Yl9yYyAqcmMsCisJCQkJICAgc3RydWN0IHV3Yl9yY2ViICoqaGVhZGVyLAorCQkJCSAgIGNvbnN0IHNpemVfdCBidWZfc2l6ZSwKKwkJCQkgICBzaXplX3QgKm5ld19zaXplKQoreworCXN0cnVjdCB1d2JfcmNfZXZ0X2RycF9XVVNCXzAxMDAgKmRycGV2OworCXN0cnVjdCB1d2JfcmNfZXZ0X2RycCAqbmV3ZHJwZXY7CisJc2l6ZV90IGJ5dGVzX2xlZnQsIGllbGVuZ3RoOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisKKwlkcnBldiA9IGNvbnRhaW5lcl9vZigqaGVhZGVyLCBzdHJ1Y3QgdXdiX3JjX2V2dF9kcnBfV1VTQl8wMTAwLCByY2ViKTsKKwlieXRlc19sZWZ0ID0gYnVmX3NpemU7CisJaWYgKGJ5dGVzX2xlZnQgPCBzaXplb2YoKmRycGV2KSkgeworCQlkZXZfZXJyKGRldiwgIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNvZGUgRFJQIE5vdGlmaWNhdGlvbiAiCisJCQkiZm9yIGZpbHRlcmluZy4gRXhwZWN0ZWQgJXp1LCByZWNlaXZlZCAlenUuXG4iLAorCQkJKHNpemVfdClzaXplb2YoKmRycGV2KSwgYnl0ZXNfbGVmdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRycGV2LT53SUVMZW5ndGgpOworCWJ5dGVzX2xlZnQgLT0gc2l6ZW9mKCpkcnBldik7CisJaWYgKGJ5dGVzX2xlZnQgPCBpZWxlbmd0aCkgeworCQlkZXZfZXJyKGRldiwgIkRSUCBOb3RpZmljYXRpb24gZmlsdGVyOiBoZWFkZXIgbGVuZ3RoIFslenUgIgorCQkJImJ5dGVzXSBkb2VzIG5vdCBtYXRjaCBhY3R1YWwgbGVuZ3RoIFslenUgIgorCQkJImJ5dGVzXS5cbiIsIGllbGVuZ3RoLCBieXRlc19sZWZ0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW5ld2RycGV2ID0ga3phbGxvYyhzaXplb2YoKm5ld2RycGV2KSArIGllbGVuZ3RoLCBHRlBfQVRPTUlDKTsKKwlpZiAobmV3ZHJwZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbmV3ZHJwZXYtPnJjZWIgPSBkcnBldi0+cmNlYjsKKwluZXdkcnBldi0+c3JjX2FkZHIgPSBkcnBldi0+d1NyY0FkZHI7CisJbmV3ZHJwZXYtPnJlYXNvbiA9IFVXQl9EUlBfTk9USUZfRFJQX0lFX1JDVkQ7CisJbmV3ZHJwZXYtPmJlYWNvbl9zbG90X251bWJlciA9IDA7CisJbmV3ZHJwZXYtPmllX2xlbmd0aCA9IGRycGV2LT53SUVMZW5ndGg7CisJbWVtY3B5KG5ld2RycGV2LT5pZV9kYXRhLCBkcnBldi0+SUVEYXRhLCBpZWxlbmd0aCk7CisJKmhlYWRlciA9ICZuZXdkcnBldi0+cmNlYjsKKwkqbmV3X3NpemUgPSBzaXplb2YoKm5ld2RycGV2KSArIGllbGVuZ3RoOworCXJldHVybiAxOyAvKiBjYWxsaW5nIGZ1bmN0aW9uIHdpbGwgZnJlZSBtZW1vcnkgKi8KK30KKworCisvKiBTY2FuIENvbW1hbmQgKFdVU0IgMS4wIFs4LjYuMi41XSkgKi8KK3N0cnVjdCB1d2JfcmNfY21kX3NjYW5fV1VTQl8wMTAwIHsKKwlzdHJ1Y3QgdXdiX3JjY2IgcmNjYjsKKwl1OCBiQ2hhbm5lbE51bWJlcjsKKwl1OCBiU2NhblN0YXRlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBGaWx0ZXIgV0hDSSAwLjk1IFNDQU4gY29tbWFuZCB0byBiZSBXVVNCIDEuMCBTQ0FOIGNvbW1hbmQKKyAqCisgKiBAaGVhZGVyOiAgIGNvbW1hbmQgc2VudCB0byBkZXZpY2UgKGNvbXBsaWFudCB0byBXSENJIDAuOTUpCisgKiBAc2l6ZTogICAgIHNpemUgb2YgY29tbWFuZCBzZW50IHRvIGRldmljZQorICoKKyAqIFdlIG9ubHkgcmVkdWNlIHRoZSBzaXplIGJ5IHR3byBieXRlcyBiZWNhdXNlIHRoZSBXVVNCIDEuMCBzY2FuIGNvbW1hbmQKKyAqIGRvZXMgbm90IGhhdmUgdGhlIGxhc3QgZmllbGQgKHdTdGFydHRpbWUpLiBBbHNvLCBtYWtlIHN1cmUgd2UgZG9uJ3Qgc2VuZAorICogdGhlIGRldmljZSBhbiB1bmV4cGVjdGVkIHNjYW4gdHlwZS4KKyAqLworc3RhdGljCitpbnQgaHdhcmNfZmlsdGVyX2NtZF9zY2FuX1dVU0JfMDEwMChzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCQkgICAgc3RydWN0IHV3Yl9yY2NiICoqaGVhZGVyLAorCQkJCSAgICBzaXplX3QgKnNpemUpCit7CisJc3RydWN0IHV3Yl9yY19jbWRfc2NhbiAqc2M7CisKKwlzYyA9IGNvbnRhaW5lcl9vZigqaGVhZGVyLCBzdHJ1Y3QgdXdiX3JjX2NtZF9zY2FuLCByY2NiKTsKKworCWlmIChzYy0+YlNjYW5TdGF0ZSA9PSBVV0JfU0NBTl9PTkxZX1NUQVJUVElNRSkKKwkJc2MtPmJTY2FuU3RhdGUgPSBVV0JfU0NBTl9PTkxZOworCS8qIERvbid0IHNlbmQgdGhlIGxhc3QgdHdvIGJ5dGVzLiAqLworCSpzaXplIC09IDI7CisJcmV0dXJuIDA7Cit9CisKKworLyogU0VUIERSUCBJRSBjb21tYW5kIChXVVNCIDEuMCBbOC42LjIuN10pICovCitzdHJ1Y3QgdXdiX3JjX2NtZF9zZXRfZHJwX2llX1dVU0JfMDEwMCB7CisJc3RydWN0IHV3Yl9yY2NiIHJjY2I7CisJdTggYkV4cGxpY2l0OworCV9fbGUxNiB3SUVMZW5ndGg7CisJc3RydWN0IHV3Yl9pZV9kcnAgSUVEYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIEZpbHRlciBXSENJIDAuOTUgU0VUIERSUCBJRSBjb21tYW5kIHRvIGJlIFdVU0IgMS4wIFNFVCBEUlAgSUUgY29tbWFuZAorICoKKyAqIEBoZWFkZXI6ICAgY29tbWFuZCBzZW50IHRvIGRldmljZSAoY29tcGxpYW50IHRvIFdIQ0kgMC45NSkKKyAqIEBzaXplOiAgICAgc2l6ZSBvZiBjb21tYW5kIHNlbnQgdG8gZGV2aWNlCisgKgorICogV1VTQiBoYXMgYW4gZXh0cmEgYkV4cGxpY2l0IGZpZWxkIC0gd2UgYXNzdW1lIGFsd2F5cyBleHBsaWNpdAorICogbmVnb3RpYXRpb24gc28gdGhpcyBmaWVsZCBpcyBzZXQuIFRoZSBjb21tYW5kIGV4cGVjdGVkIGJ5IHRoZSBkZXZpY2UgaXMKKyAqIHRodXMgbGFyZ2VyIHRoYW4gdGhlIG9uZSBwcmVwYXJlZCBieSB0aGUgZHJpdmVyIHNvIHdlIG5lZWQgdG8KKyAqIHJlYWxsb2NhdGUgbWVtb3J5IHRvIGFjY29tbW9kYXRlIHRoaXMuCisgKiBXZSB0cnVzdCB0aGUgZHJpdmVyIHRvIHNlbmQgdXMgdGhlIGNvcnJlY3QgZGF0YSBzbyBubyBjaGVja2luZyBpcyBkb25lCisgKiBvbiBpbmNvbWluZyBkYXRhIC0gZXZuIHRob3VnaCBpdCBpcyB2YXJpYWJsZSBsZW5ndGguCisgKi8KK3N0YXRpYworaW50IGh3YXJjX2ZpbHRlcl9jbWRfc2V0X2RycF9pZV9XVVNCXzAxMDAoc3RydWN0IHV3Yl9yYyAqcmMsCisJCQkJCSAgc3RydWN0IHV3Yl9yY2NiICoqaGVhZGVyLAorCQkJCQkgIHNpemVfdCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgdXdiX3JjX2NtZF9zZXRfZHJwX2llICpvcmdjbWQ7CisJc3RydWN0IHV3Yl9yY19jbWRfc2V0X2RycF9pZV9XVVNCXzAxMDAgKmNtZDsKKwlzaXplX3QgaWVsZW5ndGg7CisKKwlvcmdjbWQgPSBjb250YWluZXJfb2YoKmhlYWRlciwgc3RydWN0IHV3Yl9yY19jbWRfc2V0X2RycF9pZSwgcmNjYik7CisJaWVsZW5ndGggPSBsZTE2X3RvX2NwdShvcmdjbWQtPndJRUxlbmd0aCk7CisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCkgKyBpZWxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwljbWQtPnJjY2IgPSBvcmdjbWQtPnJjY2I7CisJY21kLT5iRXhwbGljaXQgPSAwOworCWNtZC0+d0lFTGVuZ3RoID0gb3JnY21kLT53SUVMZW5ndGg7CisJbWVtY3B5KGNtZC0+SUVEYXRhLCBvcmdjbWQtPklFRGF0YSwgaWVsZW5ndGgpOworCSpoZWFkZXIgPSAmY21kLT5yY2NiOworCSpzaXplID0gc2l6ZW9mKCpjbWQpICsgaWVsZW5ndGg7CisJcmV0dXJuIDE7IC8qIGNhbGxpbmcgZnVuY3Rpb24gd2lsbCBmcmVlIG1lbW9yeSAqLworfQorCisKKy8qKgorICogRmlsdGVyIGRhdGEgZnJvbSBXSENJIGRyaXZlciB0byBXVVNCIGRldmljZQorICoKKyAqIEBoZWFkZXI6IFdIQ0kgMC45NSBjb21wbGlhbnQgY29tbWFuZCBmcm9tIGRyaXZlcgorICogQHNpemU6ICAgbGVuZ3RoIG9mIGNvbW1hbmQKKyAqCisgKiBUaGUgcm91dGluZSBtYW5hZ2luZyBjb21tYW5kcyB0byB0aGUgZGV2aWNlICh1d2JfcmNfY21kKCkpIHdpbGwgY2FsbCB0aGUKKyAqIGZpbHRlcmluZyBmdW5jdGlvbiBwb2ludGVyIChpZiBpdCBleGlzdHMpIGJlZm9yZSBpdCBwYXNzZXMgYW55IGRhdGEgdG8KKyAqIHRoZSBkZXZpY2UuIEF0IHRoaXMgdGltZSB0aGUgY29tbWFuZCBoYXMgYmVlbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvCisgKiBXSENJIDAuOTUgYW5kIGlzIHJlYWR5IHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZS4KKyAqCisgKiBUaGUgZmlsdGVyIGZ1bmN0aW9uIHdpbGwgYmUgcHJvdmlkZWQgd2l0aCB0aGUgY3VycmVudCBjb21tYW5kIGFuZCBpdHMKKyAqIGxlbmd0aC4gVGhlIGZ1bmN0aW9uIHdpbGwgbWFuaXB1bGF0ZSB0aGUgY29tbWFuZCBpZiBuZWNlc3NhcnkgYW5kCisgKiBwb3RlbnRpYWxseSByZWFsbG9jYXRlIG1lbW9yeSBmb3IgYSBjb21tYW5kIHRoYXQgbmVlZGVkIG1vcmUgbWVtb3J5IHRoYXQKKyAqIHRoZSBnaXZlbiBjb21tYW5kLiBJZiBuZXcgbWVtb3J5IHdhcyBjcmVhdGVkIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxCisgKiB0byBpbmRpY2F0ZSB0byB0aGUgY2FsbGluZyBmdW5jdGlvbiB0aGF0IHRoZSBtZW1vcnkgbmVlZCB0byBiZSBmcmVlZAorICogd2hlbiBub3QgbmVlZGVkIGFueSBtb3JlLiBUaGUgc2l6ZSB3aWxsIGNvbnRhaW4gdGhlIG5ldyBsZW5ndGggb2YgdGhlCisgKiBjb21tYW5kLgorICogSWYgbWVtb3J5IGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgd2UgcmVseSBvbiB0aGUgb3JpZ2luYWwgbWVjaGFuaXNtcyB0bworICogZnJlZSB0aGUgbWVtb3J5IG9mIHRoZSBjb21tYW5kIC0gZXZlbiB3aGVuIHdlIHJlZHVjZSB0aGUgdmFsdWUgb2Ygc2l6ZS4KKyAqLworc3RhdGljCitpbnQgaHdhcmNfZmlsdGVyX2NtZF9XVVNCXzAxMDAoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfcmNjYiAqKmhlYWRlciwKKwkJCSAgICAgICBzaXplX3QgKnNpemUpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdXdiX3JjY2IgKnJjY2IgPSAqaGVhZGVyOworCWludCBjbWQgPSBsZTE2X3RvX2NwdShyY2NiLT53Q29tbWFuZCk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFVXQl9SQ19DTURfU0NBTjoKKwkJcmVzdWx0ID0gaHdhcmNfZmlsdGVyX2NtZF9zY2FuX1dVU0JfMDEwMChyYywgaGVhZGVyLCBzaXplKTsKKwkJYnJlYWs7CisJY2FzZSBVV0JfUkNfQ01EX1NFVF9EUlBfSUU6CisJCXJlc3VsdCA9IGh3YXJjX2ZpbHRlcl9jbWRfc2V0X2RycF9pZV9XVVNCXzAxMDAocmMsIGhlYWRlciwgc2l6ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IC1FTk9BTk87CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogRmlsdGVyIGRhdGEgZnJvbSBXSENJIGRyaXZlciB0byBXVVNCIGRldmljZQorICoKKyAqIEBoZWFkZXI6IFdIQ0kgMC45NSBjb21wbGlhbnQgY29tbWFuZCBmcm9tIGRyaXZlcgorICogQHNpemU6ICAgbGVuZ3RoIG9mIGNvbW1hbmQKKyAqCisgKiBGaWx0ZXIgY29tbWFuZHMgYmFzZWQgb24gd2hpY2ggcHJvdG9jb2wgdGhlIGRldmljZSBzdXBwb3J0cy4gVGhlIFdVU0IKKyAqIGVycmF0YSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgV0hDSSAwLjk1IHNvIHdlIGRvIG5vdCBmaWx0ZXIgdGhhdCBoZXJlIC0KKyAqIG9ubHkgV1VTQiAxLjAuCisgKi8KK3N0YXRpYworaW50IGh3YXJjX2ZpbHRlcl9jbWQoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfcmNjYiAqKmhlYWRlciwKKwkJICAgICBzaXplX3QgKnNpemUpCit7CisJaW50IHJlc3VsdCA9IC1FTk9BTk87CisJaWYgKHJjLT52ZXJzaW9uID09IDB4MDEwMCkKKwkJcmVzdWx0ID0gaHdhcmNfZmlsdGVyX2NtZF9XVVNCXzAxMDAocmMsIGhlYWRlciwgc2l6ZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIENvbXB1dGUgcmV0dXJuIHZhbHVlIGFzIHN1bSBvZiBpbmNvbWluZyB2YWx1ZSBhbmQgdmFsdWUgYXQgZ2l2ZW4gb2Zmc2V0CisgKgorICogQHJjZWI6ICAgICAgZXZlbnQgZm9yIHdoaWNoIHdlIGNvbXB1dGUgdGhlIHNpemUsIGl0IGNvbnRhaW5zIGEgdmFyaWFibGUKKyAqCSAgICAgICBsZW5ndGggZmllbGQuCisgKiBAY29yZV9zaXplOiBzaXplIG9mIHRoZSAibm9uIHZhcmlhYmxlIiBwYXJ0IG9mIHRoZSBldmVudAorICogQG9mZnNldDogICAgcGxhY2UgaW4gZXZlbnQgd2hlcmUgdGhlIGxlbmd0aCBvZiB0aGUgdmFyaWFibGUgcGFydCBpcyBzdG9yZWQKKyAqIEBidWZfc2l6ZTogdG90YWwgbGVuZ3RoIG9mIGJ1ZmZlciBpbiB3aGljaCBldmVudCBhcnJpdmVkIC0gd2UgbmVlZCB0byBtYWtlCisgKgkgICAgICAgc3VyZSB3ZSByZWFkIHRoZSBvZmZzZXQgaW4gbWVtb3J5IHRoYXQgaXMgc3RpbGwgcGFydCBvZiB0aGUgZXZlbnQKKyAqLworc3RhdGljCitzc2l6ZV90IGh3YXJjX2dldF9ldmVudF9zaXplKHN0cnVjdCB1d2JfcmMgKnJjLCBjb25zdCBzdHJ1Y3QgdXdiX3JjZWIgKnJjZWIsCisJCQkgICAgIHNpemVfdCBjb3JlX3NpemUsIHNpemVfdCBvZmZzZXQsCisJCQkgICAgIGNvbnN0IHNpemVfdCBidWZfc2l6ZSkKK3sKKwlzc2l6ZV90IHNpemUgPSAtRU5PU1BDOworCWNvbnN0IHZvaWQgKnB0ciA9IHJjZWI7CisJc2l6ZV90IHR5cGVfc2l6ZSA9IHNpemVvZihfX2xlMTYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisKKwlpZiAob2Zmc2V0ICsgdHlwZV9zaXplID49IGJ1Zl9zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiTm90IGVub3VnaCBkYXRhIHRvIHJlYWQgZXh0cmEgc2l6ZSBvZiBldmVudCAiCisJCQkiMHglMDJ4LyUwNHgvJTAyeCwgb25seSBnb3QgJXp1IGJ5dGVzLlxuIiwKKwkJCXJjZWItPmJFdmVudFR5cGUsIGxlMTZfdG9fY3B1KHJjZWItPndFdmVudCksCisJCQlyY2ViLT5iRXZlbnRDb250ZXh0LCBidWZfc2l6ZSk7CisJCWdvdG8gb3V0OworCX0KKwlwdHIgKz0gb2Zmc2V0OworCXNpemUgPSBjb3JlX3NpemUgKyBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKXB0cik7CitvdXQ6CisJcmV0dXJuIHNpemU7Cit9CisKKworLyogQmVhY29uIHNsb3QgY2hhbmdlIG5vdGlmaWNhdGlvbiAoV1VTQiAxLjAgWzguNi4zLjVdKSAqLworc3RydWN0IHV3Yl9yY19ldnRfYnBfc2xvdF9jaGFuZ2VfV1VTQl8wMTAwIHsKKwlzdHJ1Y3QgdXdiX3JjZWIgcmNlYjsKKwl1OCBiU2xvdE51bWJlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqCisgKiBGaWx0ZXIgZGF0YSBmcm9tIFdVU0IgZGV2aWNlIHRvIFdIQ0kgZHJpdmVyCisgKgorICogQGhlYWRlcjoJIGluY29taW5nIGV2ZW50CisgKiBAYnVmX3NpemU6CSBzaXplIG9mIGJ1ZmZlciBpbiB3aGljaCBldmVudCBhcnJpdmVkCisgKiBAX2V2ZW50X3NpemU6IGFjdHVhbCBzaXplIG9mIGV2ZW50IGluIHRoZSBidWZmZXIKKyAqIEBuZXdfc2l6ZToJIHNpemUgb2YgZXZlbnQgYWZ0ZXIgZmlsdGVyZWQKKyAqCisgKiBXZSBkb24ndCBrbm93IGhvdyB0aGUgYnVmZmVyIGlzIGNvbnN0cnVjdGVkIC0gdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUKKyAqIGV2ZW50IGluIGl0IHNvIGJ1ZmZlciBsZW5ndGggZG9lcyBub3QgZGV0ZXJtaW5lIGV2ZW50IGxlbmd0aC4gV2UgZmlyc3QKKyAqIGRldGVybWluZSB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgaW5jb21pbmcgZXZlbnQuIFRoaXMgdmFsdWUgaXMgcGFzc2VkCisgKiBiYWNrIG9ubHkgaWYgdGhlIGFjdHVhbCBmaWx0ZXJpbmcgc3VjY2VlZGVkIChzbyB3ZSBrbm93IHRoZSBjb21wdXRlZAorICogZXhwZWN0ZWQgc2l6ZSBpcyBjb3JyZWN0KS4gVGhpcyB2YWx1ZSB3aWxsIGJlIHplcm8gaWYKKyAqIHRoZSBldmVudCBkaWQgbm90IG5lZWQgYW55IGZpbHRlcmluZy4KKyAqCisgKiBXSENJIGludGVycHJldHMgdGhlIEJQIFNsb3QgQ2hhbmdlIGV2ZW50J3MgZGF0YSBkaWZmZXJlbnRseSB0aGFuCisgKiBXVVNCLiBUaGUgZXZlbnQgc2l6ZXMgYXJlIGV4YWN0bHkgdGhlIHNhbWUuIFRoZSBkYXRhIGZpZWxkCisgKiBpbmRpY2F0ZXMgdGhlIG5ldyBiZWFjb24gc2xvdCBpbiB3aGljaCBhIFJDIGlzIHRyYW5zbWl0dGluZyBpdHMKKyAqIGJlYWNvbi4gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhpcyBpcyA5NiAod01hY0JQTGVuZ3RoIEVDTUEtMzY4CisgKiAxNy4xNiAoVGFibGUgMTE3KSkuIFdlIHRodXMga25vdyB0aGF0IHRoZSBXVVNCIHZhbHVlIHdpbGwgbm90IHNldAorICogdGhlIGJpdCBiTm9TbG90LCBzbyB3ZSBkb24ndCByZWFsbHkgZG8gYW55dGhpbmcgKHBsYWNlaG9sZGVyKS4KKyAqLworc3RhdGljCitpbnQgaHdhcmNfZmlsdGVyX2V2ZW50X1dVU0JfMDEwMChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY2ViICoqaGVhZGVyLAorCQkJCSBjb25zdCBzaXplX3QgYnVmX3NpemUsIHNpemVfdCAqX3JlYWxfc2l6ZSwKKwkJCQkgc2l6ZV90ICpfbmV3X3NpemUpCit7CisJaW50IHJlc3VsdCA9IC1FTk9BTk87CisJc3RydWN0IHV3Yl9yY2ViICpyY2ViID0gKmhlYWRlcjsKKwlpbnQgZXZlbnQgPSBsZTE2X3RvX2NwdShyY2ViLT53RXZlbnQpOworCXNpemVfdCBldmVudF9zaXplOworCXNpemVfdCBjb3JlX3NpemUsIG9mZnNldDsKKworCWlmIChyY2ViLT5iRXZlbnRUeXBlICE9IFVXQl9SQ19DRVRfR0VORVJBTCkKKwkJZ290byBvdXQ7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgVVdCX1JDX0VWVF9CRUFDT046CisJCWNvcmVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb25fV1VTQl8wMTAwKTsKKwkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHV3Yl9yY19ldnRfYmVhY29uX1dVU0JfMDEwMCwKKwkJCQkgIHdCZWFjb25JbmZvTGVuZ3RoKTsKKwkJZXZlbnRfc2l6ZSA9IGh3YXJjX2dldF9ldmVudF9zaXplKHJjLCByY2ViLCBjb3JlX3NpemUsCisJCQkJCQkgIG9mZnNldCwgYnVmX3NpemUpOworCQlpZiAoZXZlbnRfc2l6ZSA8IDApCisJCQlnb3RvIG91dDsKKwkJKl9yZWFsX3NpemUgPSBldmVudF9zaXplOworCQlyZXN1bHQgPSBod2FyY19maWx0ZXJfZXZ0X2JlYWNvbl9XVVNCXzAxMDAocmMsIGhlYWRlciwKKwkJCQkJCQkgICBidWZfc2l6ZSwgX25ld19zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBVV0JfUkNfRVZUX0JQX1NMT1RfQ0hBTkdFOgorCQkqX25ld19zaXplID0gKl9yZWFsX3NpemUgPQorCQkJc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2JwX3Nsb3RfY2hhbmdlX1dVU0JfMDEwMCk7CisJCXJlc3VsdCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBVV0JfUkNfRVZUX0RSUF9BVkFJTDoKKwkJY29yZV9zaXplID0gc2l6ZW9mKHN0cnVjdCB1d2JfcmNfZXZ0X2RycF9hdmFpbF9XVVNCXzAxMDApOworCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdXdiX3JjX2V2dF9kcnBfYXZhaWxfV1VTQl8wMTAwLAorCQkJCSAgd0lFTGVuZ3RoKTsKKwkJZXZlbnRfc2l6ZSA9IGh3YXJjX2dldF9ldmVudF9zaXplKHJjLCByY2ViLCBjb3JlX3NpemUsCisJCQkJCQkgIG9mZnNldCwgYnVmX3NpemUpOworCQlpZiAoZXZlbnRfc2l6ZSA8IDApCisJCQlnb3RvIG91dDsKKwkJKl9yZWFsX3NpemUgPSBldmVudF9zaXplOworCQlyZXN1bHQgPSBod2FyY19maWx0ZXJfZXZ0X2RycF9hdmFpbF9XVVNCXzAxMDAoCisJCQlyYywgaGVhZGVyLCBidWZfc2l6ZSwgX25ld19zaXplKTsKKwkJYnJlYWs7CisKKwljYXNlIFVXQl9SQ19FVlRfRFJQOgorCQljb3JlX3NpemUgPSBzaXplb2Yoc3RydWN0IHV3Yl9yY19ldnRfZHJwX1dVU0JfMDEwMCk7CisJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1d2JfcmNfZXZ0X2RycF9XVVNCXzAxMDAsIHdJRUxlbmd0aCk7CisJCWV2ZW50X3NpemUgPSBod2FyY19nZXRfZXZlbnRfc2l6ZShyYywgcmNlYiwgY29yZV9zaXplLAorCQkJCQkJICBvZmZzZXQsIGJ1Zl9zaXplKTsKKwkJaWYgKGV2ZW50X3NpemUgPCAwKQorCQkJZ290byBvdXQ7CisJCSpfcmVhbF9zaXplID0gZXZlbnRfc2l6ZTsKKwkJcmVzdWx0ID0gaHdhcmNfZmlsdGVyX2V2dF9kcnBfV1VTQl8wMTAwKHJjLCBoZWFkZXIsCisJCQkJCQkJYnVmX3NpemUsIF9uZXdfc2l6ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogRmlsdGVyIGRhdGEgZnJvbSBXVVNCIGRldmljZSB0byBXSENJIGRyaXZlcgorICoKKyAqIEBoZWFkZXI6CSBpbmNvbWluZyBldmVudAorICogQGJ1Zl9zaXplOgkgc2l6ZSBvZiBidWZmZXIgaW4gd2hpY2ggZXZlbnQgYXJyaXZlZAorICogQF9ldmVudF9zaXplOiBhY3R1YWwgc2l6ZSBvZiBldmVudCBpbiB0aGUgYnVmZmVyCisgKiBAX25ld19zaXplOgkgc2l6ZSBvZiBldmVudCBhZnRlciBmaWx0ZXJlZAorICoKKyAqIEZpbHRlciBldmVudHMgYmFzZWQgb24gd2hpY2ggcHJvdG9jb2wgdGhlIGRldmljZSBzdXBwb3J0cy4gVGhlIFdVU0IKKyAqIGVycmF0YSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgV0hDSSAwLjk1IHNvIHdlIGRvIG5vdCBmaWx0ZXIgdGhhdCBoZXJlIC0KKyAqIG9ubHkgV1VTQiAxLjAuCisgKgorICogSWYgd2UgZG9uJ3QgaGFuZGxlIGl0LCB3ZSByZXR1cm4gLUVOT0FOTyAod2h5IHRoZSB3ZWlyZCBlcnJvciBjb2RlPworICogd2VsbCwgc28gaWYgSSBnZXQgaXQsIEkgY2FuIHBpbnBvaW50IGluIHRoZSBjb2RlIHRoYXQgcmFpc2VkCisgKiBpdC4uLmFmdGVyIGFsbCwgbm90IHRvbyBtYW55IHBsYWNlcyB1c2UgdGhlIGhpZ2hlciBlcnJvciBjb2RlcykuCisgKi8KK3N0YXRpYworaW50IGh3YXJjX2ZpbHRlcl9ldmVudChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY2ViICoqaGVhZGVyLAorCQkgICAgICAgY29uc3Qgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QgKl9yZWFsX3NpemUsCisJCSAgICAgICBzaXplX3QgKl9uZXdfc2l6ZSkKK3sKKwlpbnQgcmVzdWx0ID0gLUVOT0FOTzsKKwlpZiAocmMtPnZlcnNpb24gPT0gMHgwMTAwKQorCQlyZXN1bHQgPSAgaHdhcmNfZmlsdGVyX2V2ZW50X1dVU0JfMDEwMCgKKwkJCXJjLCBoZWFkZXIsIGJ1Zl9zaXplLCBfcmVhbF9zaXplLCBfbmV3X3NpemUpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBFeGVjdXRlIGFuIFVXQiBSQyBjb21tYW5kIG9uIEhXQQorICoKKyAqIEByYzoJICAgICAgSW5zdGFuY2Ugb2YgYSBSYWRpbyBDb250cm9sbGVyIHRoYXQgaXMgYSBIV0EKKyAqIEBjbWQ6ICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIFJDQ0IgYW5kIHBheWxvYWQgdG8gZXhlY3V0ZQorICogQGNtZF9zaXplOiBTaXplIG9mIHRoZSBjb21tYW5kIGJ1ZmZlci4KKyAqCisgKiBOT1RFOiByYydzIG11dGV4IGhhcyB0byBiZSBsb2NrZWQKKyAqLworc3RhdGljCitpbnQgaHdhcmNfY21kKHN0cnVjdCB1d2JfcmMgKnV3Yl9yYywgY29uc3Qgc3RydWN0IHV3Yl9yY2NiICpjbWQsIHNpemVfdCBjbWRfc2l6ZSkKK3sKKwlzdHJ1Y3QgaHdhcmMgKmh3YXJjID0gdXdiX3JjLT5wcml2OworCXJldHVybiB1c2JfY29udHJvbF9tc2coCisJCWh3YXJjLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUoaHdhcmMtPnVzYl9kZXYsIDApLAorCQlXQV9FWEVDX1JDX0NNRCwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCTAsIGh3YXJjLT51c2JfaWZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCSh2b2lkICopIGNtZCwgY21kX3NpemUsIDEwMCAvKiBGSVhNRTogdGhpcyBpcyB0b3RhbGx5IGFyYml0cmFyeSAqLyk7Cit9CisKK3N0YXRpYworaW50IGh3YXJjX3Jlc2V0KHN0cnVjdCB1d2JfcmMgKnV3Yl9yYykKK3sKKwlzdHJ1Y3QgaHdhcmMgKmh3YXJjID0gdXdiX3JjLT5wcml2OworCXJldHVybiB1c2JfcmVzZXRfZGV2aWNlKGh3YXJjLT51c2JfZGV2KTsKK30KKworLyoqCisgKiBDYWxsYmFjayBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhbmQgZXZlbnQgZW5kcG9pbnQKKyAqCisgKiBDaGVjaydzIHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIGFuZCB0aGVuIHBhc3NlcyB0aGUgcmVhZCBkYXRhIHRvCisgKiB0aGUgbm90aWZpY2F0aW9uL2V2ZW50IGhhbmRsaW5nIG1lY2hhbmlzbSAobmVoKS4KKyAqLworc3RhdGljCit2b2lkIGh3YXJjX25lZXBfY2Ioc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBod2FyYyAqaHdhcmMgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pZmFjZSA9IGh3YXJjLT51c2JfaWZhY2U7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVzYl9pZmFjZS0+ZGV2OworCWludCByZXN1bHQ7CisKKwlzd2l0Y2ggKHJlc3VsdCA9IHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlkX3ByaW50ZigzLCBkZXYsICJORUVQOiByZWNlaXZlIHN0YXQgJWQsICV6dSBieXRlc1xuIiwKKwkJCSB1cmItPnN0YXR1cywgKHNpemVfdCl1cmItPmFjdHVhbF9sZW5ndGgpOworCQl1d2JfcmNfbmVoX2dyb2soaHdhcmMtPnV3Yl9yYywgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogTm90IGFuIGVycm9yLCBidXQgYSBjb250cm9sbGVkIHNpdHVhdGlvbjsgKi8KKwljYXNlIC1FTk9FTlQ6CQkvKiAod2Uga2lsbGVkIHRoZSBVUkIpLi4uc28sIG5vIGJyb2FkY2FzdCAqLworCQlkX3ByaW50ZigyLCBkZXYsICJORUVQOiBVUkIgcmVzZXQvbm9lbnQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBvdXQ7CisJY2FzZSAtRVNIVVRET1dOOgkvKiBnb2luZyBhd2F5ISAqLworCQlkX3ByaW50ZigyLCBkZXYsICJORUVQOiBVUkIgZG93biAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlnb3RvIG91dDsKKwlkZWZhdWx0OgkJLyogT24gZ2VuZXJhbCBlcnJvcnMsIHJldHJ5IHVubGVzcyBpdCBnZXRzIHVnbHkgKi8KKwkJaWYgKGVkY19pbmMoJmh3YXJjLT5uZWVwX2VkYywgRURDX01BWF9FUlJPUlMsCisJCQkgICAgRURDX0VSUk9SX1RJTUVGUkFNRSkpCisJCQlnb3RvIGVycm9yX2V4Y2VlZGVkOworCQlkZXZfZXJyKGRldiwgIk5FRVA6IFVSQiBlcnJvciAlZFxuIiwgdXJiLT5zdGF0dXMpOworCX0KKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWRfcHJpbnRmKDMsIGRldiwgIk5FRVA6IHN1Ym1pdCAlZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIk5FRVA6IENhbid0IHJlc3VibWl0IFVSQiAoJWQpIHJlc2V0dGluZyBkZXZpY2VcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yOworCX0KK291dDoKKwlyZXR1cm47CisKK2Vycm9yX2V4Y2VlZGVkOgorCWRldl9lcnIoZGV2LCAiTkVFUDogVVJCIG1heCBhY2NlcHRhYmxlIGVycm9ycyAiCisJCSJleGNlZWRlZCwgcmVzZXR0aW5nIGRldmljZVxuIik7CitlcnJvcjoKKwl1d2JfcmNfbmVoX2Vycm9yKGh3YXJjLT51d2JfcmMsIHJlc3VsdCk7CisJdXdiX3JjX3Jlc2V0X2FsbChod2FyYy0+dXdiX3JjKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGh3YXJjX2luaXQoc3RydWN0IGh3YXJjICpod2FyYykKK3sKKwllZGNfaW5pdCgmaHdhcmMtPm5lZXBfZWRjKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBub3RpZmljYXRpb24vZXZlbnQgZW5kcG9pbnQgc3R1ZmYKKyAqCisgKiBOb3RlIHRoaXMgaXMgZWZmZWN0aXZlbHkgYSBwYXJhbGxlbCB0aHJlYWQ7IGl0IGtub3dzIHRoYXQKKyAqIGh3YXJjLT51d2JfcmMgYWx3YXlzIGV4aXN0cyBiZWNhdXNlIHRoZSBleGlzdGVuY2Ugb2YgYSAnaHdhcmMnCisgKiBtZWFucyB0aGF0IHRoZXJlIGlzIGEgcmV2ZXJlbmNlIG9uIHRoZSBod2FyYy0+dXdiX3JjIChzZWUKKyAqIF9wcm9iZSgpKSwgYW5kIHRodXMgX25lZXBfY2IoKSBjYW4gZXhlY3V0ZSBzYWZlbHkuCisgKi8KK3N0YXRpYyBpbnQgaHdhcmNfbmVlcF9pbml0KHN0cnVjdCB1d2JfcmMgKnJjKQoreworCXN0cnVjdCBod2FyYyAqaHdhcmMgPSByYy0+cHJpdjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UgPSBod2FyYy0+dXNiX2lmYWNlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpZmFjZSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZDsKKworCWVwZCA9ICZpZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisJaHdhcmMtPnJkX2J1ZmZlciA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoaHdhcmMtPnJkX2J1ZmZlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG5vdGlmaWNhdGlvbidzIHJlYWQgYnVmZmVyXG4iKTsKKwkJZ290byBlcnJvcl9yZF9idWZmZXI7CisJfQorCWh3YXJjLT5uZWVwX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGh3YXJjLT5uZWVwX3VyYiA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG5vdGlmaWNhdGlvbiBVUkJcbiIpOworCQlnb3RvIGVycm9yX3VyYl9hbGxvYzsKKwl9CisJdXNiX2ZpbGxfaW50X3VyYihod2FyYy0+bmVlcF91cmIsIHVzYl9kZXYsCisJCQkgdXNiX3JjdmludHBpcGUodXNiX2RldiwgZXBkLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBod2FyYy0+cmRfYnVmZmVyLCBQQUdFX1NJWkUsCisJCQkgaHdhcmNfbmVlcF9jYiwgaHdhcmMsIGVwZC0+YkludGVydmFsKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihod2FyYy0+bmVlcF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHN1Ym1pdCBub3RpZmljYXRpb24gVVJCOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9uZWVwX3N1Ym1pdDsKKwl9CisJcmV0dXJuIDA7CisKK2Vycm9yX25lZXBfc3VibWl0OgorCXVzYl9mcmVlX3VyYihod2FyYy0+bmVlcF91cmIpOworZXJyb3JfdXJiX2FsbG9jOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylod2FyYy0+cmRfYnVmZmVyKTsKK2Vycm9yX3JkX2J1ZmZlcjoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCisvKiogQ2xlYW4gdXAgYWxsIHRoZSBub3RpZmljYXRpb24gZW5kcG9pbnQgcmVzb3VyY2VzICovCitzdGF0aWMgdm9pZCBod2FyY19uZWVwX3JlbGVhc2Uoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3RydWN0IGh3YXJjICpod2FyYyA9IHJjLT5wcml2OworCisJdXNiX2tpbGxfdXJiKGh3YXJjLT5uZWVwX3VyYik7CisJdXNiX2ZyZWVfdXJiKGh3YXJjLT5uZWVwX3VyYik7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWh3YXJjLT5yZF9idWZmZXIpOworfQorCisvKioKKyAqIEdldCB0aGUgdmVyc2lvbiBmcm9tIGNsYXNzLXNwZWNpZmljIGRlc2NyaXB0b3IKKyAqCisgKiBOT1RFOiB0aGlzIGRlc2NyaXB0b3IgY29tZXMgd2l0aCB0aGUgYmlnIGJ1bmRsZWQgY29uZmlndXJhdGlvbgorICoJIGRlc2NyaXB0b3IgdGhhdCBpbmNsdWRlcyB0aGUgaW50ZXJmYWNlcycgYW5kIGVuZHBvaW50cycsIHNvCisgKgkgd2UganVzdCBsb29rIGZvciBpdCBpbiB0aGUgY2FjaGVkIGNvcHkga2VwdCBieSB0aGUgVVNCIHN0YWNrLgorICoKKyAqIE5PVEUyOiBXZSBjb252ZXJ0IExFIGZpZWxkcyB0byBDUFUgb3JkZXIuCisgKi8KK3N0YXRpYyBpbnQgaHdhcmNfZ2V0X3ZlcnNpb24oc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJaW50IHJlc3VsdDsKKworCXN0cnVjdCBod2FyYyAqaHdhcmMgPSByYy0+cHJpdjsKKwlzdHJ1Y3QgdXdiX3JjX2NvbnRyb2xfaW50Zl9jbGFzc19kZXNjICpkZXNjcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaHdhcmMtPnVzYl9kZXY7CisJY2hhciAqaXRyOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhkcjsKKwlzaXplX3QgaXRyX3NpemUsIGFjdGNvbmZpZ19pZHg7CisJdTE2IHZlcnNpb247CisKKwlhY3Rjb25maWdfaWR4ID0gKHVzYl9kZXYtPmFjdGNvbmZpZyAtIHVzYl9kZXYtPmNvbmZpZykgLworCQlzaXplb2YodXNiX2Rldi0+Y29uZmlnWzBdKTsKKwlpdHIgPSB1c2JfZGV2LT5yYXdkZXNjcmlwdG9yc1thY3Rjb25maWdfaWR4XTsKKwlpdHJfc2l6ZSA9IGxlMTZfdG9fY3B1KHVzYl9kZXYtPmFjdGNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGgpOworCXdoaWxlIChpdHJfc2l6ZSA+PSBzaXplb2YoKmhkcikpIHsKKwkJaGRyID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgaXRyOworCQlkX3ByaW50ZigzLCBkZXYsICJFeHRyYSBkZXZpY2UgZGVzY3JpcHRvcjogIgorCQkJICJ0eXBlICUwMngvJXUgYnl0ZXMgQCAlenUgKCV6dSBsZWZ0KVxuIiwKKwkJCSBoZHItPmJEZXNjcmlwdG9yVHlwZSwgaGRyLT5iTGVuZ3RoLAorCQkJIChpdHIgLSB1c2JfZGV2LT5yYXdkZXNjcmlwdG9yc1thY3Rjb25maWdfaWR4XSksCisJCQkgaXRyX3NpemUpOworCQlpZiAoaGRyLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX0NTX1JBRElPX0NPTlRST0wpCisJCQlnb3RvIGZvdW5kOworCQlpdHIgKz0gaGRyLT5iTGVuZ3RoOworCQlpdHJfc2l6ZSAtPSBoZHItPmJMZW5ndGg7CisJfQorCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgUmFkaW8gQ29udHJvbCBJbnRlcmZhY2UgQ2xhc3MgZGVzY3JpcHRvclxuIik7CisJcmV0dXJuIC1FTk9ERVY7CisKK2ZvdW5kOgorCXJlc3VsdCA9IC1FSU5WQUw7CisJaWYgKGhkci0+Ykxlbmd0aCA+IGl0cl9zaXplKSB7CS8qIGlzIGl0IGF2YWlsYWJsZT8gKi8KKwkJZGV2X2VycihkZXYsICJpbmNvbXBsZXRlIFJhZGlvIENvbnRyb2wgSW50ZXJmYWNlIENsYXNzICIKKwkJCSJkZXNjcmlwdG9yICglenUgYnl0ZXMgbGVmdCwgJXUgbmVlZGVkKVxuIiwKKwkJCWl0cl9zaXplLCBoZHItPmJMZW5ndGgpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoaGRyLT5iTGVuZ3RoIDwgc2l6ZW9mKCpkZXNjcikpIHsKKwkJZGV2X2VycihkZXYsICJzaG9ydCBSYWRpbyBDb250cm9sIEludGVyZmFjZSBDbGFzcyAiCisJCQkiZGVzY3JpcHRvclxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRlc2NyID0gKHN0cnVjdCB1d2JfcmNfY29udHJvbF9pbnRmX2NsYXNzX2Rlc2MgKikgaGRyOworCS8qIE1ha2UgTEUgZmllbGRzIENQVSBvcmRlciAqLworCXZlcnNpb24gPSBfX2xlMTZfdG9fY3B1KGRlc2NyLT5iY2RSQ0lWZXJzaW9uKTsKKwlpZiAodmVyc2lvbiAhPSAweDAxMDApIHsKKwkJZGV2X2VycihkZXYsICJEZXZpY2UgcmVwb3J0cyBwcm90b2NvbCB2ZXJzaW9uIDB4JTA0eC4gV2UgIgorCQkJImRvIG5vdCBzdXBwb3J0IHRoYXQuIFxuIiwgdmVyc2lvbik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCXJjLT52ZXJzaW9uID0gdmVyc2lvbjsKKwlkX3ByaW50ZigzLCBkZXYsICJEZXZpY2Ugc3VwcG9ydHMgV1VTQiBwcm90b2NvbCB2ZXJzaW9uIDB4JTA0eCBcbiIsCisJCSByYy0+dmVyc2lvbik7CisJcmVzdWx0ID0gMDsKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBCeSBjcmVhdGluZyBhICd1d2JfcmMnLCB3ZSBoYXZlIGEgcmVmZXJlbmNlIG9uIGl0IC0tIHRoYXQgcmVmZXJlbmNlCisgKiBpcyB0aGUgb25lIHdlIGRyb3Agd2hlbiB3ZSBkaXNjb25uZWN0LgorICoKKyAqIE5vIG5lZWQgdG8gc3dpdGNoIGFsdHNldHRpbmdzOyBhY2NvcmRpbmcgdG8gV1VTQjEuMFs4LjYuMS4xXSwgdGhlcmUKKyAqIGlzIG9ubHkgb25lIGFsdHNldHRpbmcgYWxsb3dlZC4KKyAqLworc3RhdGljIGludCBod2FyY19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdXdiX3JjICp1d2JfcmM7CisJc3RydWN0IGh3YXJjICpod2FyYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWZhY2UtPmRldjsKKworCXJlc3VsdCA9IC1FTk9NRU07CisJdXdiX3JjID0gdXdiX3JjX2FsbG9jKCk7CisJaWYgKHV3Yl9yYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIFJDIGluc3RhbmNlXG4iKTsKKwkJZ290byBlcnJvcl9yY19hbGxvYzsKKwl9CisJaHdhcmMgPSBremFsbG9jKHNpemVvZigqaHdhcmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaHdhcmMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBIV0EgUkMgaW5zdGFuY2VcbiIpOworCQlnb3RvIGVycm9yX2FsbG9jOworCX0KKwlod2FyY19pbml0KGh3YXJjKTsKKwlod2FyYy0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaWZhY2UpKTsKKwlod2FyYy0+dXNiX2lmYWNlID0gdXNiX2dldF9pbnRmKGlmYWNlKTsKKwlod2FyYy0+dXdiX3JjID0gdXdiX3JjOworCisJdXdiX3JjLT5vd25lciA9IFRISVNfTU9EVUxFOworCXV3Yl9yYy0+c3RhcnQgPSBod2FyY19uZWVwX2luaXQ7CisJdXdiX3JjLT5zdG9wICA9IGh3YXJjX25lZXBfcmVsZWFzZTsKKwl1d2JfcmMtPmNtZCAgID0gaHdhcmNfY21kOworCXV3Yl9yYy0+cmVzZXQgPSBod2FyY19yZXNldDsKKwlpZiAoaWQtPmRyaXZlcl9pbmZvICYgV1VTQl9RVUlSS19XSENJX0NNRF9FVlQpIHsKKwkJdXdiX3JjLT5maWx0ZXJfY21kICAgPSBOVUxMOworCQl1d2JfcmMtPmZpbHRlcl9ldmVudCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJdXdiX3JjLT5maWx0ZXJfY21kICAgPSBod2FyY19maWx0ZXJfY21kOworCQl1d2JfcmMtPmZpbHRlcl9ldmVudCA9IGh3YXJjX2ZpbHRlcl9ldmVudDsKKwl9CisKKwlyZXN1bHQgPSB1d2JfcmNfYWRkKHV3Yl9yYywgZGV2LCBod2FyYyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfcmNfYWRkOworCXJlc3VsdCA9IGh3YXJjX2dldF92ZXJzaW9uKHV3Yl9yYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcmV0cmlldmUgdmVyc2lvbiBvZiBSQyBcbiIpOworCQlnb3RvIGVycm9yX2dldF92ZXJzaW9uOworCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBod2FyYyk7CisJcmV0dXJuIDA7CisKK2Vycm9yX2dldF92ZXJzaW9uOgorCXV3Yl9yY19ybSh1d2JfcmMpOworZXJyb3JfcmNfYWRkOgorCXVzYl9wdXRfaW50ZihpZmFjZSk7CisJdXNiX3B1dF9kZXYoaHdhcmMtPnVzYl9kZXYpOworZXJyb3JfYWxsb2M6CisJdXdiX3JjX3B1dCh1d2JfcmMpOworZXJyb3JfcmNfYWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaHdhcmNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IGh3YXJjICpod2FyYyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOworCXN0cnVjdCB1d2JfcmMgKnV3Yl9yYyA9IGh3YXJjLT51d2JfcmM7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGh3YXJjLT51c2JfaWZhY2UsIE5VTEwpOworCXV3Yl9yY19ybSh1d2JfcmMpOworCXVzYl9wdXRfaW50Zihod2FyYy0+dXNiX2lmYWNlKTsKKwl1c2JfcHV0X2Rldihod2FyYy0+dXNiX2Rldik7CisJZF9wcmludGYoMSwgJmh3YXJjLT51c2JfaWZhY2UtPmRldiwgImZyZWVkIGh3YXJjICVwXG4iLCBod2FyYyk7CisJa2ZyZWUoaHdhcmMpOworCXV3Yl9yY19wdXQodXdiX3JjKTsJLyogd2hlbiBjcmVhdGluZyB0aGUgZGV2aWNlLCByZWZjb3VudCA9IDEgKi8KK30KKworLyoqIFVTQiBkZXZpY2UgSUQncyB0aGF0IHdlIGhhbmRsZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGh3YXJjX2lkX3RhYmxlW10gPSB7CisJLyogRC1MaW5rIERVQi0xMjEwICovCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDA3ZDEsIDB4M2QwMiwgMHhlMCwgMHgwMSwgMHgwMiksCisJICAuZHJpdmVyX2luZm8gPSBXVVNCX1FVSVJLX1dIQ0lfQ01EX0VWVCB9LAorCS8qIEludGVsIGkxNDgwICh1c2luZyBmaXJtd2FyZSAxLjNQQTItMjAwNzA4MjgpICovCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDgwODYsIDB4MGMzYiwgMHhlMCwgMHgwMSwgMHgwMiksCisJICAuZHJpdmVyX2luZm8gPSBXVVNCX1FVSVJLX1dIQ0lfQ01EX0VWVCB9LAorCS8qIEdlbmVyaWMgbWF0Y2ggZm9yIHRoZSBSYWRpbyBDb250cm9sIGludGVyZmFjZSAqLworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDB4ZTAsIDB4MDEsIDB4MDIpLCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaHdhcmNfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaHdhcmNfZHJpdmVyID0geworCS5uYW1lID0JCSJod2EtcmMiLAorCS5wcm9iZSA9CWh3YXJjX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JaHdhcmNfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlod2FyY19pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGh3YXJjX2RyaXZlcl9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmh3YXJjX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiSFdBLVJDOiBDYW5ub3QgcmVnaXN0ZXIgVVNCIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXN1bHQpOworCXJldHVybiByZXN1bHQ7CisKK30KK21vZHVsZV9pbml0KGh3YXJjX2RyaXZlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGh3YXJjX2RyaXZlcl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmh3YXJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChod2FyY19kcml2ZXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3QgV2lyZWxlc3MgQWRhcHRlciBSYWRpbyBDb250cm9sIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvTWFrZWZpbGUgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJiYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvaTE0ODAvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfVVdCX0kxNDgwVSkJKz0gZGZ1LyBpMTQ4MC1lc3Qubworb2JqLSQoQ09ORklHX1VXQl9JMTQ4MFVfV0xQKQkrPSBpMTQ4MHUtd2xwLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvZGZ1L01ha2VmaWxlIGIvZHJpdmVycy91d2IvaTE0ODAvZGZ1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWI5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitvYmotJChDT05GSUdfVVdCX0kxNDgwVSkJKz0gaTE0ODAtZGZ1LXVzYi5vCisKK2kxNDgwLWRmdS11c2Itb2JqcyA6PSBcCisJZGZ1Lm8gCVwKKwltYWMubwlcCisJcGh5Lm8JXAorCXVzYi5vCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvZGZ1L2RmdS5jIGIvZHJpdmVycy91d2IvaTE0ODAvZGZ1L2RmdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOTdiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvZGZ1LmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBJbnRlbCBXaXJlbGVzcyBVV0IgTGluayAxNDgwCisgKiBNYWluIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogQ29tbW9uIGNvZGUgZm9yIGZpcm13YXJlIHVwbG9hZCB1c2VkIGJ5IHRoZSBVU0IgYW5kIFBDSSB2ZXJzaW9uOworICogaTE0ODBfZndfdXBsb2FkKCkgdGFrZXMgYSBkZXZpY2UgZGVzY3JpcHRvciBhbmQgdXNlcyB0aGUgZnVuY3Rpb24KKyAqIHBvaW50ZXJzIGl0IHByb3ZpZGVzIHRvIHVwbG9hZCBmaXJtd2FyZSBhbmQgcHJlcGFyZSB0aGUgUEhZLgorICoKKyAqIEFzIHdlbGwsIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbnMgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKyAqLworI2luY2x1ZGUgImkxNDgwLWRmdS5oIgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2RlZmluZSBEX0xPQ0FMIDAKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworLyoqCisgKiBpMTQ4MF9yY2ViX2NoZWNrIC0gQ2hlY2sgUkNFQiBmb3IgZXhwZWN0ZWQgZmllbGQgdmFsdWVzCisgKiBAaTE0ODA6IHBvaW50ZXIgdG8gZGV2aWNlIGZvciB3aGljaCBSQ0VCIGlzIGJlaW5nIGNoZWNrZWQKKyAqIEByY2ViOiBSQ0VCIGJlaW5nIGNoZWNrZWQKKyAqIEBjbWQ6IHdoaWNoIGNvbW1hbmQgdGhlIFJDRUIgaXMgcmVsYXRlZCB0bworICogQGNvbnRleHQ6IGV4cGVjdGVkIGNvbnRleHQKKyAqIEBleHBlY3RlZF90eXBlOiBleHBlY3RlZCBldmVudCB0eXBlCisgKiBAZXhwZWN0ZWRfZXZlbnQ6IGV4cGVjdGVkIGV2ZW50CisgKgorICogSWYgQGNtZCBpcyBOVUxMLCBkbyBub3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMsIGJ1dCBzdGlsbCByZXR1cm4gYW4gZXJyb3IKKyAqIGNvZGUuCisgKgorICogUmV0dXJuIDAgaWYgQHJjZWIgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmFsdWVzLCAtRUlOVkFMIG90aGVyd2lzZS4KKyAqLworaW50IGkxNDgwX3JjZWJfY2hlY2soY29uc3Qgc3RydWN0IGkxNDgwICppMTQ4MCwgY29uc3Qgc3RydWN0IHV3Yl9yY2ViICpyY2ViLAorCQkgICAgIGNvbnN0IGNoYXIgKmNtZCwgdTggY29udGV4dCwgdTggZXhwZWN0ZWRfdHlwZSwKKwkJICAgICB1bnNpZ25lZCBleHBlY3RlZF9ldmVudCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMTQ4MC0+ZGV2OworCWlmIChyY2ViLT5iRXZlbnRDb250ZXh0ICE9IGNvbnRleHQpIHsKKwkJaWYgKGNtZCkKKwkJCWRldl9lcnIoZGV2LCAiJXM6IHVuZXhwZWN0ZWQgY29udGV4dCBpZCAweCUwMnggIgorCQkJCSIoZXhwZWN0ZWQgMHglMDJ4KVxuIiwgY21kLAorCQkJCXJjZWItPmJFdmVudENvbnRleHQsIGNvbnRleHQpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0KKwlpZiAocmNlYi0+YkV2ZW50VHlwZSAhPSBleHBlY3RlZF90eXBlKSB7CisJCWlmIChjbWQpCisJCQlkZXZfZXJyKGRldiwgIiVzOiB1bmV4cGVjdGVkIGV2ZW50IHR5cGUgMHglMDJ4ICIKKwkJCQkiKGV4cGVjdGVkIDB4JTAyeClcbiIsIGNtZCwKKwkJCQlyY2ViLT5iRXZlbnRUeXBlLCBleHBlY3RlZF90eXBlKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisJaWYgKGxlMTZfdG9fY3B1KHJjZWItPndFdmVudCkgIT0gZXhwZWN0ZWRfZXZlbnQpIHsKKwkJaWYgKGNtZCkKKwkJCWRldl9lcnIoZGV2LCAiJXM6IHVuZXhwZWN0ZWQgZXZlbnQgMHglMDR4ICIKKwkJCQkiKGV4cGVjdGVkIDB4JTA0eClcbiIsIGNtZCwKKwkJCQlsZTE2X3RvX2NwdShyY2ViLT53RXZlbnQpLCBleHBlY3RlZF9ldmVudCk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMTQ4MF9yY2ViX2NoZWNrKTsKKworCisvKioKKyAqIEV4ZWN1dGUgYSBSYWRpbyBDb250cm9sIENvbW1hbmQKKyAqCisgKiBDb21tYW5kIGRhdGEgaGFzIHRvIGJlIGluIGkxNDgwLT5jbWRfYnVmLgorICoKKyAqIEByZXR1cm5zIHNpemUgb2YgdGhlIHJlcGx5IGRhdGEgZmlsbGVkIGluIGkxNDgwLT5ldnRfYnVmIG9yIDwgMCBlcnJubworICogICAgICAgICAgY29kZSBvbiBlcnJvci4KKyAqLworc3NpemVfdCBpMTQ4MF9jbWQoc3RydWN0IGkxNDgwICppMTQ4MCwgY29uc3QgY2hhciAqY21kX25hbWUsIHNpemVfdCBjbWRfc2l6ZSwKKwkJICBzaXplX3QgcmVwbHlfc2l6ZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwlzdHJ1Y3QgdXdiX3JjZWIgKnJlcGx5ID0gaTE0ODAtPmV2dF9idWY7CisJc3RydWN0IHV3Yl9yY2NiICpjbWQgPSBpMTQ4MC0+Y21kX2J1ZjsKKwl1MTYgZXhwZWN0ZWRfZXZlbnQgPSByZXBseS0+d0V2ZW50OworCXU4IGV4cGVjdGVkX3R5cGUgPSByZXBseS0+YkV2ZW50VHlwZTsKKwl1OCBjb250ZXh0OworCisJZF9mbnN0YXJ0KDMsIGkxNDgwLT5kZXYsICIoJXAsICVzLCAlenUpXG4iLCBpMTQ4MCwgY21kX25hbWUsIGNtZF9zaXplKTsKKwlpbml0X2NvbXBsZXRpb24oJmkxNDgwLT5ldnRfY29tcGxldGUpOworCWkxNDgwLT5ldnRfcmVzdWx0ID0gLUVJTlBST0dSRVNTOworCWRvIHsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmY29udGV4dCwgMSk7CisJfSB3aGlsZSAoY29udGV4dCA9PSAweDAwIHx8IGNvbnRleHQgPT0gMHhmZik7CisJY21kLT5iQ29tbWFuZENvbnRleHQgPSBjb250ZXh0OworCXJlc3VsdCA9IGkxNDgwLT5jbWQoaTE0ODAsIGNtZF9uYW1lLCBjbWRfc2l6ZSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3I7CisJLyogd2FpdCBmb3IgdGhlIGNhbGxiYWNrIHRvIHJlcG9ydCBhIGV2ZW50IHdhcyByZWNlaXZlZCAqLworCXJlc3VsdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkmaTE0ODAtPmV2dF9jb21wbGV0ZSwgSFopOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcjsKKwlyZXN1bHQgPSBpMTQ4MC0+ZXZ0X3Jlc3VsdDsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICIlczogY29tbWFuZCByZXBseSByZWNlcHRpb24gZmFpbGVkOiAlemRcbiIsCisJCQljbWRfbmFtZSwgcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJLyoKKwkgKiBGaXJtd2FyZSB2ZXJzaW9ucyA+PSAxLjQuMTIyMjQgZm9yIElPR2VhciBHVVdBMTAwVSBnZW5lcmF0ZSBhCisJICogc3B1cmlvdXMgbm90aWZpY2F0aW9uIGFmdGVyIGZpcm13YXJlIGlzIGRvd25sb2FkZWQuIFNvIGNoZWNrIHdoZXRoZXIKKwkgKiB0aGUgcmVjZWliZWQgUkNFQiBpcyBzdWNoIG5vdGlmaWNhdGlvbiBiZWZvcmUgYXNzdW1pbmcgdGhhdCB0aGUKKwkgKiBjb21tYW5kIGhhcyBmYWlsZWQuCisJICovCisJaWYgKGkxNDgwX3JjZWJfY2hlY2soaTE0ODAsIGkxNDgwLT5ldnRfYnVmLCBOVUxMLAorCQkJICAgICAwLCAweGZkLCAweDAwMjIpID09IDApIHsKKwkJLyogTm93IHdhaXQgZm9yIHRoZSBhY3R1YWwgUkNFQiBmb3IgdGhpcyBjb21tYW5kLiAqLworCQlyZXN1bHQgPSBpMTQ4MC0+d2FpdF9pbml0X2RvbmUoaTE0ODApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXJlc3VsdCA9IGkxNDgwLT5ldnRfcmVzdWx0OworCX0KKwlpZiAocmVzdWx0ICE9IHJlcGx5X3NpemUpIHsKKwkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiJXMgcmV0dXJuZWQgb25seSAlenUgYnl0ZXMsICV6dSBleHBlY3RlZFxuIiwKKwkJCWNtZF9uYW1lLCByZXN1bHQsIHJlcGx5X3NpemUpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKwkvKiBWZXJpZnkgd2UgZ290IHRoZSByaWdodCBldmVudCBpbiByZXNwb25zZSAqLworCXJlc3VsdCA9IGkxNDgwX3JjZWJfY2hlY2soaTE0ODAsIGkxNDgwLT5ldnRfYnVmLCBjbWRfbmFtZSwgY29udGV4dCwKKwkJCQkgIGV4cGVjdGVkX3R5cGUsIGV4cGVjdGVkX2V2ZW50KTsKK2Vycm9yOgorCWRfZm5lbmQoMywgaTE0ODAtPmRldiwgIiglcCwgJXMsICV6dSkgPSAlemRcbiIsCisJCWkxNDgwLCBjbWRfbmFtZSwgY21kX3NpemUsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkxNDgwX2NtZCk7CisKKworc3RhdGljCitpbnQgaTE0ODBfcHJpbnRfc3RhdGUoc3RydWN0IGkxNDgwICppMTQ4MCkKK3sKKwlpbnQgcmVzdWx0OworCXUzMiAqYnVmID0gKHUzMiAqKSBpMTQ4MC0+Y21kX2J1ZjsKKworCXJlc3VsdCA9IGkxNDgwLT5yZWFkKGkxNDgwLCAweDgwMDgwMDAwLCAyICogc2l6ZW9mKCpidWYpKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJjYW5ub3QgcmVhZCBVICYgTCBzdGF0ZXM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXZfaW5mbyhpMTQ4MC0+ZGV2LCAic3RhdGUgVSAweCUwOHgsIEwgMHglMDh4XG4iLCBidWZbMF0sIGJ1ZlsxXSk7CitlcnJvcjoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qCisgKiBQQ0kgcHJvYmUsIGZpcm13YXJlIHVwbG9hZGVyCisgKgorICogX21hY19md191cGxvYWQoKSB3aWxsIGNhbGwgcmNfc2V0dXAoKSwgd2hpY2ggbmVlZHMgYW4gcmNfcmVsZWFzZSgpLgorICovCitpbnQgaTE0ODBfZndfdXBsb2FkKHN0cnVjdCBpMTQ4MCAqaTE0ODApCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IGkxNDgwX3ByZV9md191cGxvYWQoaTE0ODApOwkvKiBQSFkgcHJlIGZ3ICovCisJaWYgKHJlc3VsdCA8IDAgJiYgcmVzdWx0ICE9IC1FTk9FTlQpIHsKKwkJaTE0ODBfcHJpbnRfc3RhdGUoaTE0ODApOworCQlnb3RvIGVycm9yOworCX0KKwlyZXN1bHQgPSBpMTQ4MF9tYWNfZndfdXBsb2FkKGkxNDgwKTsJLyogTUFDIGZ3ICovCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJaWYgKHJlc3VsdCA9PSAtRU5PRU5UKQorCQkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiQ2Fubm90IGxvY2F0ZSBNQUMgRlcgZmlsZSAnJXMnXG4iLAorCQkJCWkxNDgwLT5tYWNfZndfbmFtZSk7CisJCWVsc2UKKwkJCWkxNDgwX3ByaW50X3N0YXRlKGkxNDgwKTsKKwkJZ290byBlcnJvcjsKKwl9CisJcmVzdWx0ID0gaTE0ODBfcGh5X2Z3X3VwbG9hZChpMTQ4MCk7CS8qIFBIWSBmdyAqLworCWlmIChyZXN1bHQgPCAwICYmIHJlc3VsdCAhPSAtRU5PRU5UKSB7CisJCWkxNDgwX3ByaW50X3N0YXRlKGkxNDgwKTsKKwkJZ290byBlcnJvcl9yY19yZWxlYXNlOworCX0KKwkvKgorCSAqIEZJWE1FOiBmaW5kIHNvbWUgcmVsaWFibGUgd2F5IHRvIGNoZWNrIHdoZXRoZXIgZmlybXdhcmUgaXMgcnVubmluZworCSAqIHByb3Blcmx5LiBNYXliZSB1c2Ugc29tZSBzdGFuZGFyZCByZXF1ZXN0IHRoYXQgaGFzIG5vIHNpZGUgZWZmZWN0cz8KKwkgKi8KKwlkZXZfaW5mbyhpMTQ4MC0+ZGV2LCAiZmlybXdhcmUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKK2Vycm9yX3JjX3JlbGVhc2U6CisJaWYgKGkxNDgwLT5yY19yZWxlYXNlKQorCQlpMTQ4MC0+cmNfcmVsZWFzZShpMTQ4MCk7CisJcmVzdWx0ID0gMDsKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMTQ4MF9md191cGxvYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvZGZ1L2kxNDgwLWRmdS5oIGIvZHJpdmVycy91d2IvaTE0ODAvZGZ1L2kxNDgwLWRmdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZjQ1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvaTE0ODAtZGZ1LmgKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBpMTQ4MCBEZXZpY2UgRmlybXdhcmUgVXBsb2FkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBUaGlzIGRyaXZlciBpcyB0aGUgZmlybXdhcmUgdXBsb2FkZXIgZm9yIHRoZSBJbnRlbCBXaXJlbGVzcyBVV0IKKyAqIExpbmsgMTQ4MCBkZXZpY2UgKGJvdGggaW4gdGhlIFVTQiBhbmQgUENJIGluY2FybmF0aW9ucykuCisgKgorICogVGhlIHByb2Nlc3MgaXMgcXVpdGUgc2ltcGxlOiB3ZSBzdG9wIHRoZSBkZXZpY2UsIHdyaXRlIHRoZSBmaXJtd2FyZQorICogdG8gaXRzIG1lbW9yeSBhbmQgdGhlbiByZXN0YXJ0IGl0LiBXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGxldCB1cworICoga25vdyBpdCBpcyBkb25lIGJvb3RpbmcgZmlybXdhcmUuIFJlYWR5LgorICoKKyAqIFdlIG1pZ2h0IGhhdmUgdG8gdXBsb2FkIGJlZm9yZSBvciBhZnRlciBhIHBoeSBmaXJtd2FyZSAod2hpY2ggbWlnaHQKKyAqIGJlIGRvbmUgaW4gdHdvIG1ldGhvZHMsIHVzaW5nIGEgbm9ybWFsIGZpcm13YXJlIGltYWdlIG9yIHRocm91Z2gKKyAqIHRoZSBNUEkgcG9ydCkuCisgKgorICogQmVjYXVzZSBVU0IgYW5kIFBDSSB1c2UgY29tbW9uIG1ldGhvZHMsIHdlIGp1c3QgbWFrZSBvcHMgb3V0IG9mIHRoZQorICogY29tbW9uIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCB3YWl0X2luaXRfZG9uZSBhbmQgY21kKSBhbmQKKyAqIGltcGxlbWVudCB0aGVtIGluIHVzYi5jIGFuZCBwY2kuYy4KKyAqCisgKiBUaGUgZmxvdyBpcyAoc29tZSBwYXJ0cyBvbWl0dGVkKToKKyAqCisgKiBpMTQ4MF97dXNiLHBjaX1fcHJvYmUoKQkgIE9uIGVudW1lcmF0ZS9kaXNjb3ZlcnkKKyAqICAgaTE0ODBfZndfdXBsb2FkKCkKKyAqICAgICBpMTQ4MF9wcmVfZndfdXBsb2FkKCkKKyAqICAgICAgIF9fbWFjX2Z3X3VwbG9hZCgpCisgKiAgICAgICAgIGZ3X2hkcnNfbG9hZCgpCisgKiAgICAgICAgIG1hY19md19oZHJzX3B1c2goKQorICogICAgICAgICAgIGkxNDgwLT53cml0ZSgpICAgICAgIFtpMTQ4MF97dXNiLHBjaX1fd3JpdGUoKV0KKyAqICAgICAgICAgICBpMTQ4MF9md19jbXAoKQorICogICAgICAgICAgICAgaTE0ODAtPnJlYWQoKSAgICAgIFtpMTQ4MF97dXNiLHBjaX1fcmVhZCgpXQorICogICAgIGkxNDgwX21hY19md191cGxvYWQoKQorICogICAgICAgX19tYWNfZndfdXBsb2FkKCkKKyAqICAgICAgIGkxNDgwLT5zZXR1cCgoKQorICogICAgICAgaTE0ODAtPndhaXRfaW5pdF9kb25lKCkKKyAqICAgICAgIGkxNDgwX2NtZF9yZXNldCgpCisgKiAgICAgICAgIGkxNDgwLT5jbWQoKSAgICAgICAgICAgW2kxNDgwX3t1c2IscGNpfV9jbWQoKV0KKyAqICAgICAgICAgLi4uCisgKiAgICAgaTE0ODBfcGh5X2Z3X3VwbG9hZCgpCisgKiAgICAgICByZXF1ZXN0X2Zpcm13YXJlKCkKKyAqICAgICAgIGkxNDgwX21waV93cml0ZSgpCisgKiAgICAgICAgIGkxNDgwLT5jbWQoKSAgICAgICAgICAgW2kxNDgwX3t1c2IscGNpfV9jbWQoKV0KKyAqCisgKiBPbmNlIHRoZSBwcm9iZSBmdW5jdGlvbiBlbnVtZXJhdGVzIHRoZSBkZXZpY2UgYW5kIHVwbG9hZHMgdGhlCisgKiBmaXJtd2FyZSwgd2UganVzdCBleGl0IHdpdGggLUVOT0RFViwgYXMgd2UgZG9uJ3QgcmVhbGx5IHdhbnQgdG8KKyAqIGF0dGFjaCB0byB0aGUgZGV2aWNlLgorICovCisjaWZuZGVmIF9faTE0ODBfREZVX0hfXworI2RlZmluZSBfX2kxNDgwX0RGVV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3V3Yi9zcGVjLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKKyNkZWZpbmUgaTE0ODBfRldfVVBMT0FEX01PREVfTUFTSyAoY3B1X3RvX2xlMzIoMHgwMDAwMDAxOCkpCisKKyNpZiBpMTQ4MF9GVyA+IDB4MDAwMDAzMDIKKyNkZWZpbmUgaTE0ODBfUkNFQl9FWFRFTkRFRAorI2VuZGlmCisKK3N0cnVjdCB1d2JfcmNjYjsKK3N0cnVjdCB1d2JfcmNlYjsKKworLyoKKyAqIENvbW1vbiBmaXJtd2FyZSB1cGxvYWQgaGFuZGxlcnMKKyAqCisgKiBOb3JtYWxseSB5b3UgZW1iZWQgdGhpcyBzdHJ1Y3QgaW4gYW5vdGhlciBvbmUgc3BlY2lmaWMgdG8geW91ciBody4KKyAqCisgKiBAd3JpdGUJV3JpdGUgdG8gZGV2aWNlJ3MgbWVtb3J5IGZyb20gYnVmZmVyLgorICogQHJlYWQJUmVhZCBmcm9tIGRldmljZSdzIG1lbW9yeSB0byBpMTQ4MC0+ZXZ0X2J1Zi4KKyAqIEBzZXR1cAlTZXR1cCBkZXZpY2UgYWZ0ZXIgYmFzaWMgZmlybXdhcmUgaXMgdXBsb2FkZWQKKyAqIEB3YWl0X2luaXRfZG9uZQorICogICAgICAgICAgICAgIFdhaXQgZm9yIHRoZSBkZXZpY2UgdG8gc2VuZCBhIG5vdGlmaWNhdGlvbiBzYXlpbmcgaW5pdAorICogICAgICAgICAgICAgIGlzIGRvbmUuCisgKiBAY21kICAgICAgICAgRk9QIGZvciBpc3N1aW5nIHRoZSBjb21tYW5kIHRvIHRoZSBoYXJkd2FyZS4gVGhlCisgKiAgICAgICAgICAgICAgY29tbWFuZCBkYXRhIGlzIGNvbnRhaW5lZCBpbiBpMTQ4MC0+Y21kX2J1ZiBhbmQgdGhlIHNpemUKKyAqICAgICAgICAgICAgICBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudC4gVGhlIGNvbW1hbmQgcmVwbGllZCBpcyBwdXQKKyAqICAgICAgICAgICAgICBpbiBpMTQ4MC0+ZXZ0X2J1ZiBhbmQgdGhlIHNpemUgaW4gaTE0ODAtPmV2dF9yZXN1bHQgKG9yIGlmCisgKiAgICAgICAgICAgICAgYW4gZXJyb3IsIGEgPCAwIGVycm5vIGNvZGUpLgorICoKKyAqIEBjbWRfYnVmCU1lbW9yeSBidWZmZXIgdXNlZCB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UuCisgKiAgICAgICAgICAgICAgQWxsb2NhdGVkIGJ5IHRoZSB1cHBlciBsYXllcnMgaTE0ODBfZndfdXBsb2FkKCkuCisgKiAgICAgICAgICAgICAgU2l6ZSBoYXMgdG8gYmUgQGJ1Zl9zaXplLgorICogQGV2dF9idWYJTWVtb3J5IGJ1ZmZlciB1c2VkIHRvIHBsYWNlIHRoZSBhc3luYyBub3RpZmljYXRpb25zCisgKiAgICAgICAgICAgICAgcmVjZWl2ZWQgYnkgdGhlIGh3LiBBbGxvY2F0ZWQgYnkgdGhlIHVwcGVyIGxheWVycworICogICAgICAgICAgICAgIGkxNDgwX2Z3X3VwbG9hZCgpLgorICogICAgICAgICAgICAgIFNpemUgaGFzIHRvIGJlIEBidWZfc2l6ZS4KKyAqIEBjbWRfY29tcGxldGUKKyAqICAgICAgICAgICAgICBMb3cgbGV2ZWwgZHJpdmVyIHVzZXMgdGhpcyB0byBub3RpZnkgY29kZSB3YWl0aW5nIGFmb3IKKyAqICAgICAgICAgICAgICBhbiBldmVudCB0aGF0IHRoZSBldmVudCBoYXMgYXJyaXZlZCBhbmQgZGF0YSBpcyBpbgorICogICAgICAgICAgICAgIGkxNDgwLT5ldnRfYnVmIChhbmQgc2l6ZS9yZXN1bHQgaW4gaTE0ODAtPmV2dF9yZXN1bHQpLgorICogQGh3X3JldgorICogICAgICAgICAgICAgIFVzZSB0aGlzIHZhbHVlIHRvIGFjdGl2YXRlIGRmdSBjb2RlIHRvIHN1cHBvcnQgbmV3IHJldmlzaW9ucworICogICAgICAgICAgICAgIG9mIGhhcmR3YXJlLiAgaTE0ODBfaW5pdCgpIHNldHMgdGhpcyB0byBhIGRlZmF1bHQgdmFsdWUuCisgKiAgICAgICAgICAgICAgSXQgc2hvdWxkIGJlIHVwZGF0ZWQgYnkgdGhlIFVTQiBhbmQgUENJIGNvZGUuCisgKi8KK3N0cnVjdCBpMTQ4MCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJaW50ICgqd3JpdGUpKHN0cnVjdCBpMTQ4MCAqLCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworCWludCAoKnJlYWQpKHN0cnVjdCBpMTQ4MCAqLCB1MzIgYWRkciwgc2l6ZV90KTsKKwlpbnQgKCpyY19zZXR1cCkoc3RydWN0IGkxNDgwICopOworCXZvaWQgKCpyY19yZWxlYXNlKShzdHJ1Y3QgaTE0ODAgKik7CisJaW50ICgqd2FpdF9pbml0X2RvbmUpKHN0cnVjdCBpMTQ4MCAqKTsKKwlpbnQgKCpjbWQpKHN0cnVjdCBpMTQ4MCAqLCBjb25zdCBjaGFyICpjbWRfbmFtZSwgc2l6ZV90IGNtZF9zaXplKTsKKwljb25zdCBjaGFyICpwcmVfZndfbmFtZTsKKwljb25zdCBjaGFyICptYWNfZndfbmFtZTsKKwljb25zdCBjaGFyICptYWNfZndfbmFtZV9kZXByZWNhdGU7CS8qIEZJWE1FOiBXaWxsIGdvIGF3YXkgKi8KKwljb25zdCBjaGFyICpwaHlfZndfbmFtZTsKKwl1OCBod19yZXY7CisKKwlzaXplX3QgYnVmX3NpemU7CS8qIHNpemUgb2YgYm90aCBldnRfYnVmIGFuZCBjbWRfYnVmICovCisJdm9pZCAqZXZ0X2J1ZiwgKmNtZF9idWY7CisJc3NpemVfdCBldnRfcmVzdWx0OworCXN0cnVjdCBjb21wbGV0aW9uIGV2dF9jb21wbGV0ZTsKK307CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgaTE0ODBfaW5pdChzdHJ1Y3QgaTE0ODAgKmkxNDgwKQoreworCWkxNDgwLT5od19yZXYgPSAxOworCWluaXRfY29tcGxldGlvbigmaTE0ODAtPmV2dF9jb21wbGV0ZSk7Cit9CisKK2V4dGVybiBpbnQgaTE0ODBfZndfdXBsb2FkKHN0cnVjdCBpMTQ4MCAqKTsKK2V4dGVybiBpbnQgaTE0ODBfcHJlX2Z3X3VwbG9hZChzdHJ1Y3QgaTE0ODAgKik7CitleHRlcm4gaW50IGkxNDgwX21hY19md191cGxvYWQoc3RydWN0IGkxNDgwICopOworZXh0ZXJuIGludCBpMTQ4MF9waHlfZndfdXBsb2FkKHN0cnVjdCBpMTQ4MCAqKTsKK2V4dGVybiBzc2l6ZV90IGkxNDgwX2NtZChzdHJ1Y3QgaTE0ODAgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCk7CitleHRlcm4gaW50IGkxNDgwX3JjZWJfY2hlY2soY29uc3Qgc3RydWN0IGkxNDgwICosCisJCQkgICAgY29uc3Qgc3RydWN0IHV3Yl9yY2ViICosIGNvbnN0IGNoYXIgKiwgdTgsCisJCQkgICAgdTgsIHVuc2lnbmVkKTsKKworZW51bSB7CisJLyogVmVuZG9yIHNwZWNpZmljIGNvbW1hbmQgdHlwZSAqLworCWkxNDgwX0NFVF9WUzEgPSAJCTB4ZmQsCisJLyogaTE0ODAgY29tbWFuZHMgKi8KKwlpMTQ4MF9DTURfU0VUX0lQX01BUyA9IAkJMHgwMDBlLAorCWkxNDgwX0NNRF9HRVRfTUFDX1BIWV9JTkZPID0gCTB4MDAwMywKKwlpMTQ4MF9DTURfTVBJX1dSSVRFID0JCTB4MDAwZiwKKwlpMTQ4MF9DTURfTVBJX1JFQUQgPSAJCTB4MDAxMCwKKwkvKiBpMTQ4MCBldmVudHMgKi8KKyNpZiBpMTQ4MF9GVyA+IDB4MDAwMDAzMDIKKwlpMTQ4MF9FVlRfQ09ORklSTSA9IAkJMHgwMDAyLAorCWkxNDgwX0VWVF9STV9JTklUX0RPTkUgPSAJMHgwMTAxLAorCWkxNDgwX0VWVF9ERVZfQUREID0gCQkweDAxMDMsCisJaTE0ODBfRVZUX0RFVl9STSA9IAkJMHgwMTA0LAorCWkxNDgwX0VWVF9ERVZfSURfQ0hBTkdFID0gCTB4MDEwNSwKKwlpMTQ4MF9FVlRfR0VUX01BQ19QSFlfSU5GTyA9CWkxNDgwX0NNRF9HRVRfTUFDX1BIWV9JTkZPLAorI2Vsc2UKKwlpMTQ4MF9FVlRfQ09ORklSTSA9IAkJMHgwMDAyLAorCWkxNDgwX0VWVF9STV9JTklUX0RPTkUgPSAJMHgwMTAxLAorCWkxNDgwX0VWVF9ERVZfQUREID0gCQkweDAxMDMsCisJaTE0ODBfRVZUX0RFVl9STSA9IAkJMHgwMTA0LAorCWkxNDgwX0VWVF9ERVZfSURfQ0hBTkdFID0gCTB4MDEwNSwKKwlpMTQ4MF9FVlRfR0VUX01BQ19QSFlfSU5GTyA9CWkxNDgwX0VWVF9DT05GSVJNLAorI2VuZGlmCit9OworCisKK3N0cnVjdCBpMTQ4MF9ldnRfY29uZmlybSB7CisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7CisjaWZkZWYgaTE0ODBfUkNFQl9FWFRFTkRFRAorCV9fbGUxNiB3UGFyYW1MZW5ndGg7CisjZW5kaWYKKwl1OCBiUmVzdWx0Q29kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IGkxNDgwX3JjZWIgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworI2lmZGVmIGkxNDgwX1JDRUJfRVhURU5ERUQKKwlfX2xlMTYgd1BhcmFtTGVuZ3RoOworI2VuZGlmCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qKgorICogR2V0IE1BQyAmIFBIWSBJbmZvcm1hdGlvbiBjb25maXJtIGV2ZW50IHN0cnVjdHVyZQorICoKKyAqIENvbmZpcm0gZXZlbnQgcmV0dXJuZWQgYnkgdGhlIGNvbW1hbmQuCisgKi8KK3N0cnVjdCBpMTQ4MF9ldnRfY29uZmlybV9HTVBJIHsKKyNpZiBpMTQ4MF9GVyA+IDB4MDAwMDAzMDIKKwlzdHJ1Y3QgdXdiX3JjZWIgcmNlYjsKKwlfX2xlMTYgd1BhcmFtTGVuZ3RoOworCV9fbGUxNiBzdGF0dXM7CisJdTggbWFjX2FkZHJbNl07CQkvKiBFVUktNjQgYml0IElFRUUgYWRkcmVzcyBbc3RpbGwgOCBieXRlcz9dICovCisJdTggZGV2X2FkZHJbMl07CisJX19sZTE2IG1hY19md19yZXY7CS8qIG1ham9yID0gdiA+PiA4OyBtaW5vciA9IHYgJiAweGZmICovCisJdTggaHdfcmV2OworCXU4IHBoeV92ZW5kb3I7CisJdTggcGh5X3JldjsJCS8qIG1ham9yIHYgPSA+PiA4OyBtaW5vciA9IHYgJiAweGZmICovCisJX19sZTE2IG1hY19jYXBzOworCXU4IHBoeV9jYXBzWzNdOworCXU4IGtleV9zdG9yZXM7CisJX19sZTE2IG1jYXN0X2FkZHJfc3RvcmVzOworCXU4IHNlY19tb2RlX3N1cHBvcnRlZDsKKyNlbHNlCisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7CisJdTggc3RhdHVzOworCXU4IG1hY19hZGRyWzhdOyAgICAgICAgIC8qIEVVSS02NCBiaXQgSUVFRSBhZGRyZXNzIFtzdGlsbCA4IGJ5dGVzP10gKi8KKwl1OCBkZXZfYWRkclsyXTsKKwlfX2xlMTYgbWFjX2Z3X3JldjsgICAgICAvKiBtYWpvciA9IHYgPj4gODsgbWlub3IgPSB2ICYgMHhmZiAqLworCV9fbGUxNiBwaHlfZndfcmV2OyAgICAgIC8qIG1ham9yIHYgPSA+PiA4OyBtaW5vciA9IHYgJiAweGZmICovCisJX19sZTE2IG1hY19jYXBzOworCXU4IHBoeV9jYXBzOworCXU4IGtleV9zdG9yZXM7CisJX19sZTE2IG1jYXN0X2FkZHJfc3RvcmVzOworCXU4IHNlY19tb2RlX3N1cHBvcnRlZDsKKyNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgaTE0ODBfY21kX21waV93cml0ZSB7CisJc3RydWN0IHV3Yl9yY2NiIHJjY2I7CisJX19sZTE2IHNpemU7CisJdTggZGF0YVtdOworfTsKKworCitzdHJ1Y3QgaTE0ODBfY21kX21waV9yZWFkIHsKKwlzdHJ1Y3QgdXdiX3JjY2IgcmNjYjsKKwlfX2xlMTYgc2l6ZTsKKwlzdHJ1Y3QgeworCQl1OCBwYWdlLCBvZmZzZXQ7CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBkYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCBpMTQ4MF9ldnRfbXBpX3JlYWQgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworI2lmZGVmIGkxNDgwX1JDRUJfRVhURU5ERUQKKwlfX2xlMTYgd1BhcmFtTGVuZ3RoOworI2VuZGlmCisJdTggYlJlc3VsdENvZGU7CisJX19sZTE2IHNpemU7CisJc3RydWN0IHsKKwkJdTggcGFnZSwgb2Zmc2V0LCB2YWx1ZTsKKwl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGRhdGFbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworI2VuZGlmIC8qICNpZm5kZWYgX19pMTQ4MF9ERlVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvbWFjLmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0ZDhmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2RmdS9tYWMuYwpAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqIEludGVsIFdpcmVsZXNzIFVXQiBMaW5rIDE0ODAKKyAqIE1BQyBGaXJtd2FyZSB1cGxvYWQgaW1wbGVtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBjb2RlIGZvciBwYXJzaW5nIHRoZSBmaXJtd2FyZSBmaWxlIChleHRyYWN0CisgKiB0aGUgaGVhZGVycyBhbmQgYmluYXJ5IGNvZGUgY2h1bmtzKSBpbiB0aGUgZndfKigpIGZ1bmN0aW9ucy4gVGhlCisgKiBjb2RlIHRvIHVwbG9hZCBwcmUgYW5kIG1hYyBmaXJtd2FyZXMgaXMgdGhlIHNhbWUsIHNvIGl0IHVzZXMgYQorICogY29tbW9uIGVudHJ5IHBvaW50IGluIF9fbWFjX2Z3X3VwbG9hZCgpLCB3aGljaCB1c2VzIHRoZSBpMTQ4MAorICogZnVuY3Rpb24gcG9pbnRlcnMgdG8gcHVzaCB0aGUgZmlybXdhcmUgdG8gdGhlIGRldmljZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlICJpMTQ4MC1kZnUuaCIKKworI2RlZmluZSBEX0xPQ0FMIDAKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworLyoKKyAqIERlc2NyaXB0b3IgZm9yIGEgY29udGludW91cyBzZWdtZW50IG9mIE1BQyBmdyBkYXRhCisgKi8KK3N0cnVjdCBmd19oZHIgeworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwlzaXplX3QgbGVuZ3RoOworCWNvbnN0IHUzMiAqYmluOworCXN0cnVjdCBmd19oZHIgKm5leHQ7Cit9OworCisKKy8qIEZyZWUgYSBjaGFpbiBvZiBmaXJtd2FyZSBoZWFkZXJzICovCitzdGF0aWMKK3ZvaWQgZndfaGRyc19mcmVlKHN0cnVjdCBmd19oZHIgKmhkcikKK3sKKwlzdHJ1Y3QgZndfaGRyICpuZXh0OworCisJd2hpbGUgKGhkcikgeworCQluZXh0ID0gaGRyLT5uZXh0OworCQlrZnJlZShoZHIpOworCQloZHIgPSBuZXh0OworCX0KK30KKworCisvKiBGaWxsIGEgZmlybXdhcmUgaGVhZGVyIGRlc2NyaXB0b3IgZnJvbSBhIG1lbW9yeSBidWZmZXIgKi8KK3N0YXRpYworaW50IGZ3X2hkcl9sb2FkKHN0cnVjdCBpMTQ4MCAqaTE0ODAsIHN0cnVjdCBmd19oZHIgKmhkciwgdW5zaWduZWQgaGRyX2NudCwKKwkJY29uc3QgY2hhciAqX2RhdGEsIGNvbnN0IHUzMiAqZGF0YV9pdHIsIGNvbnN0IHUzMiAqZGF0YV90b3ApCit7CisJc2l6ZV90IGhkcl9vZmZzZXQgPSAgKGNvbnN0IGNoYXIgKikgZGF0YV9pdHIgLSBfZGF0YTsKKwlzaXplX3QgcmVtYWluaW5nX3NpemUgPSAodm9pZCAqKSBkYXRhX3RvcCAtICh2b2lkICopIGRhdGFfaXRyOworCWlmIChkYXRhX2l0ciArIDIgPiBkYXRhX3RvcCkgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJmdyBoZHIgIyV1LyV6dTogRU9GIHJlYWNoZWQgaW4gaGVhZGVyIGF0ICIKKwkJICAgICAgICJvZmZzZXQgJXp1LCBsaW1pdCAlenVcbiIsCisJCSAgICAgICBoZHJfY250LCBoZHJfb2Zmc2V0LAorCQkgICAgICAgKGNvbnN0IGNoYXIgKikgZGF0YV9pdHIgKyAyIC0gX2RhdGEsCisJCSAgICAgICAoY29uc3QgY2hhciAqKSBkYXRhX3RvcCAtIF9kYXRhKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWhkci0+bmV4dCA9IE5VTEw7CisJaGRyLT5hZGRyZXNzID0gbGUzMl90b19jcHUoKmRhdGFfaXRyKyspOworCWhkci0+bGVuZ3RoID0gbGUzMl90b19jcHUoKmRhdGFfaXRyKyspOworCWhkci0+YmluID0gZGF0YV9pdHI7CisJaWYgKGhkci0+bGVuZ3RoID4gcmVtYWluaW5nX3NpemUpIHsKKwkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiZncgaGRyICMldS8lenU6IEVPRiByZWFjaGVkIGluIGRhdGE7ICIKKwkJICAgICAgICJjaHVuayB0b28gbG9uZyAoJXp1IGJ5dGVzKSwgb25seSAlenUgbGVmdFxuIiwKKwkJICAgICAgIGhkcl9jbnQsIGhkcl9vZmZzZXQsIGhkci0+bGVuZ3RoLCByZW1haW5pbmdfc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIEdldCBhIGJ1ZmZlciB3aGVyZSB0aGUgZmlybXdhcmUgaXMgc3VwcG9zZWQgdG8gYmUgYW5kIGNyZWF0ZSBhCisgKiBjaGFpbiBvZiBoZWFkZXJzIGxpbmtpbmcgdGhlbSB0b2dldGhlci4KKyAqCisgKiBAcGhkcjogd2hlcmUgdG8gcGxhY2UgdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGhlYWRlciAoaGVhZGVycyBsaW5rCisgKiAgICAgICAgdG8gdGhlIG5leHQgdmlhIHRoZSBAaGRyLT5uZXh0IHB0cik7IG5lZWQgdG8gZnJlZSB0aGUgd2hvbGUKKyAqICAgICAgICBjaGFpbiB3aGVuIGRvbmUuCisgKgorICogQF9kYXRhOiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlci4KKyAqCisgKiBAX2RhdGFfc2l6ZTogU2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgKGJ5dGVzKTsgZGF0YSBzaXplIGhhcyB0byBiZSBhCisgKiAgICAgICAgICAgICAgbXVsdGlwbGUgb2YgNC4gRnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vdC4KKyAqCisgKiBHb2VzIG92ZXIgdGhlIHdob2xlIGJpbmFyeSBibG9iOyByZWFkcyB0aGUgZmlyc3QgY2h1bmsgYW5kIGNyZWF0ZXMKKyAqIGEgZncgaGRyIGZyb20gaXQgKHdoaWNoIHBvaW50cyB0byB3aGVyZSB0aGUgZGF0YSBpcyBpbiBAX2RhdGEgYW5kCisgKiB0aGUgbGVuZ3RoIG9mIHRoZSBjaHVuayk7IHRoZW4gZ29lcyBvbiB0byB0aGUgbmV4dCBjaHVuayB1bnRpbAorICogZG9uZS4gRWFjaCBoZWFkZXIgaXMgbGlua2VkIHRvIHRoZSBuZXh0LgorICovCitzdGF0aWMKK2ludCBmd19oZHJzX2xvYWQoc3RydWN0IGkxNDgwICppMTQ4MCwgc3RydWN0IGZ3X2hkciAqKnBoZHIsCisJCSBjb25zdCBjaGFyICpfZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGhkcl9jbnQgPSAwOworCXUzMiAqZGF0YSA9ICh1MzIgKikgX2RhdGEsICpkYXRhX2l0ciwgKmRhdGFfdG9wOworCXN0cnVjdCBmd19oZHIgKmhkciwgKipwcmV2X2hkciA9IHBoZHI7CisKKwlyZXN1bHQgPSAtRUlOVkFMOworCS8qIENoZWNrIHNpemUgaXMgb2sgYW5kIHBvaW50ZXIgaXMgYWxpZ25lZCAqLworCWlmIChkYXRhX3NpemUgJSBzaXplb2YodTMyKSAhPSAwKQorCQlnb3RvIGVycm9yOworCWlmICgodW5zaWduZWQgbG9uZykgX2RhdGEgJSBzaXplb2YodTE2KSAhPSAwKQorCQlnb3RvIGVycm9yOworCSpwaGRyID0gTlVMTDsKKwlkYXRhX2l0ciA9IGRhdGE7CisJZGF0YV90b3AgPSAodTMyICopIChfZGF0YSArIGRhdGFfc2l6ZSk7CisJd2hpbGUgKGRhdGFfaXRyIDwgZGF0YV90b3ApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJaGRyID0ga21hbGxvYyhzaXplb2YoKmhkciksIEdGUF9LRVJORUwpOworCQlpZiAoaGRyID09IE5VTEwpIHsKKwkJCWRldl9lcnIoaTE0ODAtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBmdyBoZWFkZXIgIgorCQkJICAgICAgICJmb3IgY2h1bmsgIyV1XG4iLCBoZHJfY250KTsKKwkJCWdvdG8gZXJyb3JfYWxsb2M7CisJCX0KKwkJcmVzdWx0ID0gZndfaGRyX2xvYWQoaTE0ODAsIGhkciwgaGRyX2NudCwKKwkJCQkgICAgIF9kYXRhLCBkYXRhX2l0ciwgZGF0YV90b3ApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWdvdG8gZXJyb3JfbG9hZDsKKwkJZGF0YV9pdHIgKz0gMiArIGhkci0+bGVuZ3RoOworCQkqcHJldl9oZHIgPSBoZHI7CisJCXByZXZfaGRyID0gJmhkci0+bmV4dDsKKwkJaGRyX2NudCsrOworCX07CisJKnByZXZfaGRyID0gTlVMTDsKKwlyZXR1cm4gMDsKKworZXJyb3JfbG9hZDoKKwlrZnJlZShoZHIpOworZXJyb3JfYWxsb2M6CisJZndfaGRyc19mcmVlKCpwaGRyKTsKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBDb21wYXJlcyBhIGNodW5rIG9mIGZ3IHdpdGggb25lIGluIHRoZSBkZXZpY2VzJ3MgbWVtb3J5CisgKgorICogQGkxNDgwOiAgICAgRGV2aWNlIGluc3RhbmNlCisgKiBAaGRyOiAgICAgUG9pbnRlciB0byB0aGUgZmlybXdhcmUgY2h1bmsKKyAqIEByZXR1cm5zOiAwIGlmIGVxdWFsLCA8IDAgZXJybm8gb24gZXJyb3IuIElmID4gMCwgaXQgaXMgdGhlIG9mZnNldAorICogICAgICAgICAgIHdoZXJlIHRoZSBkaWZmZXJlbmNlIHdhcyBmb3VuZCAocGx1cyBvbmUpLgorICoKKyAqIEtpbmQgb2YgZGlydHkgYW5kIHNpbXBsaXN0aWMsIGJ1dCBkb2VzIHRoZSB0cmljayBpbiBib3RoIHRoZSBQQ0kKKyAqIGFuZCBVU0IgdmVyc2lvbi4gV2UgZG8gYSBxdWlja1tlcl0gbWVtY21wKCksIGFuZCBpZiBpdCBmYWlscywgd2UgZG8KKyAqIGEgYnl0ZS1ieS1ieXRlIHRvIGZpbmQgdGhlIG9mZnNldC4KKyAqLworc3RhdGljCitzc2l6ZV90IGkxNDgwX2Z3X2NtcChzdHJ1Y3QgaTE0ODAgKmkxNDgwLCBzdHJ1Y3QgZndfaGRyICpoZHIpCit7CisJc3NpemVfdCByZXN1bHQgPSAwOworCXUzMiBzcmNfaXRyID0gMCwgY250OworCXNpemVfdCBzaXplID0gaGRyLT5sZW5ndGgqc2l6ZW9mKGhkci0+YmluWzBdKTsKKwlzaXplX3QgY2h1bmtfc2l6ZTsKKwl1OCAqYmluID0gKHU4ICopIGhkci0+YmluOworCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWNodW5rX3NpemUgPSBzaXplIDwgaTE0ODAtPmJ1Zl9zaXplID8gc2l6ZSA6IGkxNDgwLT5idWZfc2l6ZTsKKwkJcmVzdWx0ID0gaTE0ODAtPnJlYWQoaTE0ODAsIGhkci0+YWRkcmVzcyArIHNyY19pdHIsIGNodW5rX3NpemUpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiZXJyb3IgcmVhZGluZyBmb3IgdmVyaWZpY2F0aW9uOiAiCisJCQkJIiV6ZFxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJaWYgKG1lbWNtcChpMTQ4MC0+Y21kX2J1ZiwgYmluICsgc3JjX2l0ciwgcmVzdWx0KSkgeworCQkJdTggKmJ1ZiA9IGkxNDgwLT5jbWRfYnVmOworCQkJZF9wcmludGYoMiwgaTE0ODAtPmRldiwKKwkJCQkgIm9yaWdpbmFsIGRhdGEgQCAlcCArICV1LCAlenUgYnl0ZXNcbiIsCisJCQkJIGJpbiwgc3JjX2l0ciwgcmVzdWx0KTsKKwkJCWRfZHVtcCg0LCBpMTQ4MC0+ZGV2LCBiaW4gKyBzcmNfaXRyLCByZXN1bHQpOworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCByZXN1bHQ7IGNudCsrKQorCQkJCWlmIChiaW5bc3JjX2l0ciArIGNudF0gIT0gYnVmW2NudF0pIHsKKwkJCQkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiYnl0ZSBmYWlsZWQgYXQgIgorCQkJCQkJInNyY19pdHIgJXUgY250ICV1IFsweCUwMnggIgorCQkJCQkJInZzIDB4JTAyeF1cbiIsIHNyY19pdHIsIGNudCwKKwkJCQkJCWJpbltzcmNfaXRyICsgY250XSwgYnVmW2NudF0pOworCQkJCQlyZXN1bHQgPSBzcmNfaXRyICsgY250ICsgMTsKKwkJCQkJZ290byBjbXBfZmFpbGVkOworCQkJCX0KKwkJfQorCQlzcmNfaXRyICs9IHJlc3VsdDsKKwkJc2l6ZSAtPSByZXN1bHQ7CisJfQorCXJlc3VsdCA9IDA7CitlcnJvcjoKK2NtcF9mYWlsZWQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIFdyaXRlcyBmaXJtd2FyZSBoZWFkZXJzIHRvIHRoZSBkZXZpY2UuCisgKgorICogQHByZDogICAgIFBSRCBpbnN0YW5jZQorICogQGhkcjogICAgIFByb2Nlc3NlZCBmaXJtd2FyZQorICogQHJldHVybnM6IDAgaWYgb2ssIDwgMCBlcnJubyBvbiBlcnJvci4KKyAqLworc3RhdGljCitpbnQgbWFjX2Z3X2hkcnNfcHVzaChzdHJ1Y3QgaTE0ODAgKmkxNDgwLCBzdHJ1Y3QgZndfaGRyICpoZHIsCisJCSAgICAgY29uc3QgY2hhciAqZndfbmFtZSwgY29uc3QgY2hhciAqZndfdGFnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkxNDgwLT5kZXY7CisJc3NpemVfdCByZXN1bHQgPSAwOworCXN0cnVjdCBmd19oZHIgKmhkcl9pdHI7CisJaW50IHZlcmlmX3JldHJ5X2NvdW50OworCisJZF9mbnN0YXJ0KDMsIGRldiwgIiglcCwgJXApXG4iLCBpMTQ4MCwgaGRyKTsKKwkvKiBOb3csIGhlYWRlciBieSBoZWFkZXIsIHB1c2ggdGhlbSB0byB0aGUgaHcgKi8KKwlmb3IgKGhkcl9pdHIgPSBoZHI7IGhkcl9pdHIgIT0gTlVMTDsgaGRyX2l0ciA9IGhkcl9pdHItPm5leHQpIHsKKwkJdmVyaWZfcmV0cnlfY291bnQgPSAwOworcmV0cnk6CisJCWRldl9kYmcoZGV2LCAiZncgY2h1bmsgKCV6dSBAIDB4JTA4bHgpXG4iLAorCQkJaGRyX2l0ci0+bGVuZ3RoICogc2l6ZW9mKGhkcl9pdHItPmJpblswXSksCisJCQloZHJfaXRyLT5hZGRyZXNzKTsKKwkJcmVzdWx0ID0gaTE0ODAtPndyaXRlKGkxNDgwLCBoZHJfaXRyLT5hZGRyZXNzLCBoZHJfaXRyLT5iaW4sCisJCQkJICAgIGhkcl9pdHItPmxlbmd0aCpzaXplb2YoaGRyX2l0ci0+YmluWzBdKSk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzIGZ3ICclcyc6IHdyaXRlIGZhaWxlZCAoJXp1QiBAIDB4JWx4KToiCisJCQkJIiAlemRcbiIsIGZ3X3RhZywgZndfbmFtZSwKKwkJCQloZHJfaXRyLT5sZW5ndGggKiBzaXplb2YoaGRyX2l0ci0+YmluWzBdKSwKKwkJCQloZHJfaXRyLT5hZGRyZXNzLCByZXN1bHQpOworCQkJYnJlYWs7CisJCX0KKwkJcmVzdWx0ID0gaTE0ODBfZndfY21wKGkxNDgwLCBoZHJfaXRyKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiJXMgZncgJyVzJzogdmVyaWZpY2F0aW9uIHJlYWQgIgorCQkJCSJmYWlsZWQgKCV6dUIgQCAweCVseCk6ICV6ZFxuIiwKKwkJCQlmd190YWcsIGZ3X25hbWUsCisJCQkJaGRyX2l0ci0+bGVuZ3RoICogc2l6ZW9mKGhkcl9pdHItPmJpblswXSksCisJCQkJaGRyX2l0ci0+YWRkcmVzcywgcmVzdWx0KTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXN1bHQgPiAwKSB7CS8qIE9mZnNldCB3aGVyZSBpdCBmYWlsZWQgKyAxICovCisJCQlyZXN1bHQtLTsKKwkJCWRldl9lcnIoZGV2LCAiJXMgZncgJyVzJzogV0FSTklORzogdmVyaWZpY2F0aW9uICIKKwkJCQkiZmFpbGVkIGF0IDB4JWx4OiByZXRyeWluZ1xuIiwKKwkJCQlmd190YWcsIGZ3X25hbWUsIGhkcl9pdHItPmFkZHJlc3MgKyByZXN1bHQpOworCQkJaWYgKCsrdmVyaWZfcmV0cnlfY291bnQgPCAzKQorCQkJCWdvdG8gcmV0cnk7CS8qIHdyaXRlIHRoaXMgYmxvY2sgYWdhaW4hICovCisJCQlkZXZfZXJyKGRldiwgIiVzIGZ3ICclcyc6IHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgMHglbHg6ICIKKwkJCQkidHJpZWQgJWQgdGltZXNcbiIsIGZ3X3RhZywgZndfbmFtZSwKKwkJCQloZHJfaXRyLT5hZGRyZXNzICsgcmVzdWx0LCB2ZXJpZl9yZXRyeV9jb3VudCk7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisJZF9mbmVuZCgzLCBkZXYsICIoJXpkKVxuIiwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKiBQdXRzIHRoZSBkZXZpY2UgaW4gZmlybXdhcmUgdXBsb2FkIG1vZGUuKi8KK3N0YXRpYworaW50IG1hY19md191cGxvYWRfZW5hYmxlKHN0cnVjdCBpMTQ4MCAqaTE0ODApCit7CisJaW50IHJlc3VsdDsKKwl1MzIgcmVnID0gMHg4MDAwMDBjMDsKKwl1MzIgKmJ1ZmZlciA9ICh1MzIgKilpMTQ4MC0+Y21kX2J1ZjsKKworCWlmIChpMTQ4MC0+aHdfcmV2ID4gMSkKKwkJcmVnID0gMHg4MDAwZDBkNDsKKwlyZXN1bHQgPSBpMTQ4MC0+cmVhZChpMTQ4MCwgcmVnLCBzaXplb2YodTMyKSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfY21kOworCSpidWZmZXIgJj0gfmkxNDgwX0ZXX1VQTE9BRF9NT0RFX01BU0s7CisJcmVzdWx0ID0gaTE0ODAtPndyaXRlKGkxNDgwLCByZWcsIGJ1ZmZlciwgc2l6ZW9mKHUzMikpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2NtZDsKKwlyZXR1cm4gMDsKK2Vycm9yX2NtZDoKKwlkZXZfZXJyKGkxNDgwLT5kZXYsICJjYW4ndCBlbmFibGUgZncgdXBsb2FkIG1vZGU6ICVkXG4iLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqIEdldHMgdGhlIGRldmljZSBvdXQgb2YgZmlybXdhcmUgdXBsb2FkIG1vZGUuICovCitzdGF0aWMKK2ludCBtYWNfZndfdXBsb2FkX2Rpc2FibGUoc3RydWN0IGkxNDgwICppMTQ4MCkKK3sKKwlpbnQgcmVzdWx0OworCXUzMiByZWcgPSAweDgwMDAwMGMwOworCXUzMiAqYnVmZmVyID0gKHUzMiAqKWkxNDgwLT5jbWRfYnVmOworCisJaWYgKGkxNDgwLT5od19yZXYgPiAxKQorCQlyZWcgPSAweDgwMDBkMGQ0OworCXJlc3VsdCA9IGkxNDgwLT5yZWFkKGkxNDgwLCByZWcsIHNpemVvZih1MzIpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJKmJ1ZmZlciB8PSBpMTQ4MF9GV19VUExPQURfTU9ERV9NQVNLOworCXJlc3VsdCA9IGkxNDgwLT53cml0ZShpMTQ4MCwgcmVnLCBidWZmZXIsIHNpemVvZih1MzIpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJcmV0dXJuIDA7CitlcnJvcl9jbWQ6CisJZGV2X2VycihpMTQ4MC0+ZGV2LCAiY2FuJ3QgZGlzYWJsZSBmdyB1cGxvYWQgbW9kZTogJWRcbiIsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisKKy8qKgorICogR2VuZXJpYyBmdW5jdGlvbiBmb3IgdXBsb2FkaW5nIGEgTUFDIGZpcm13YXJlLgorICoKKyAqIEBpMTQ4MDogICAgIERldmljZSBpbnN0YW5jZQorICogQGZ3X25hbWU6IE5hbWUgb2YgZmlybXdhcmUgZmlsZSB0byB1cGxvYWQuCisgKiBAZndfdGFnOiAgTmFtZSBvZiB0aGUgZmlybXdhcmUgdHlwZSAoZm9yIG1lc3NhZ2VzKQorICogICAgICAgICAgIFtlZzogTUFDLCBQUkVdCisgKiBAZG9fd2FpdDogV2FpdCBmb3IgZGV2aWNlIHRvIGVtaXQgaW5pdGlhbGl6YXRpb24gZG9uZSBtZXNzYWdlICgwCisgKiAgICAgICAgICAgZm9yIFBSRSBmd3MsIDEgZm9yIE1BQyBmd3MpLgorICogQHJldHVybnM6IDAgaWYgb2ssIDwgMCBlcnJubyBvbiBlcnJvci4KKyAqLworc3RhdGljCitpbnQgX19tYWNfZndfdXBsb2FkKHN0cnVjdCBpMTQ4MCAqaTE0ODAsIGNvbnN0IGNoYXIgKmZ3X25hbWUsCisJCSAgICBjb25zdCBjaGFyICpmd190YWcpCit7CisJaW50IHJlc3VsdDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCXN0cnVjdCBmd19oZHIgKmZ3X2hkcnM7CisKKwlkX2Zuc3RhcnQoMywgaTE0ODAtPmRldiwgIiglcCwgJXMsICVzKVxuIiwgaTE0ODAsIGZ3X25hbWUsIGZ3X3RhZyk7CisJcmVzdWx0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsIGkxNDgwLT5kZXYpOworCWlmIChyZXN1bHQgPCAwKQkvKiBVcCB0byBjYWxsZXIgdG8gY29tcGxhaW4gb24gLUVOT0VOVCAqLworCQlnb3RvIG91dDsKKwlkX3ByaW50ZigzLCBpMTQ4MC0+ZGV2LCAiJXMgZncgJyVzJzogdXBsb2FkaW5nXG4iLCBmd190YWcsIGZ3X25hbWUpOworCXJlc3VsdCA9IGZ3X2hkcnNfbG9hZChpMTQ4MCwgJmZ3X2hkcnMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiJXMgZncgJyVzJzogZmFpbGVkIHRvIHBhcnNlIGZpcm13YXJlICIKKwkJCSJmaWxlOiAlZFxuIiwgZndfdGFnLCBmd19uYW1lLCByZXN1bHQpOworCQlnb3RvIG91dF9yZWxlYXNlOworCX0KKwlyZXN1bHQgPSBtYWNfZndfdXBsb2FkX2VuYWJsZShpMTQ4MCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0X2hkcnNfcmVsZWFzZTsKKwlyZXN1bHQgPSBtYWNfZndfaGRyc19wdXNoKGkxNDgwLCBmd19oZHJzLCBmd19uYW1lLCBmd190YWcpOworCW1hY19md191cGxvYWRfZGlzYWJsZShpMTQ4MCk7CitvdXRfaGRyc19yZWxlYXNlOgorCWlmIChyZXN1bHQgPj0gMCkKKwkJZGV2X2luZm8oaTE0ODAtPmRldiwgIiVzIGZ3ICclcyc6IHVwbG9hZGVkXG4iLCBmd190YWcsIGZ3X25hbWUpOworCWVsc2UKKwkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiJXMgZncgJyVzJzogZmFpbGVkIHRvIHVwbG9hZCAoJWQpLCAiCisJCQkicG93ZXIgY3ljbGUgZGV2aWNlXG4iLCBmd190YWcsIGZ3X25hbWUsIHJlc3VsdCk7CisJZndfaGRyc19mcmVlKGZ3X2hkcnMpOworb3V0X3JlbGVhc2U6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CitvdXQ6CisJZF9mbmVuZCgzLCBpMTQ4MC0+ZGV2LCAiKCVwLCAlcywgJXMpID0gJWRcbiIsIGkxNDgwLCBmd19uYW1lLCBmd190YWcsCisJCXJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIFVwbG9hZCBhIHByZS1QSFkgZmlybXdhcmUKKyAqCisgKi8KK2ludCBpMTQ4MF9wcmVfZndfdXBsb2FkKHN0cnVjdCBpMTQ4MCAqaTE0ODApCit7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSBfX21hY19md191cGxvYWQoaTE0ODAsIGkxNDgwLT5wcmVfZndfbmFtZSwgIlBSRSIpOworCWlmIChyZXN1bHQgPT0gMCkKKwkJbXNsZWVwKDQwMCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIFJlc2V0IGEgdGhlIE1BQyBhbmQgUEhZCisgKgorICogQGkxNDgwOiAgICAgRGV2aWNlJ3MgaW5zdGFuY2UKKyAqIEByZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvcgorICoKKyAqIFdlIHB1dCB0aGUgY29tbWFuZCBvbiBrbWFsbG9jJ2VkIG1lbW9yeSBhcyBzb21lIGFyY2hlcyBjYW5ub3QgZG8KKyAqIFVTQiBmcm9tIHRoZSBzdGFjay4gVGhlIHJlcGx5IGV2ZW50IGlzIGNvcGllZCBmcm9tIGFuIHN0YWdlIGJ1ZmZlciwKKyAqIHNvIGl0IGNhbiBiZSBpbiB0aGUgc3RhY2suIFNlZSBXVVNCMS4wWzguNi4yLjRdIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV2UgaXNzdWUgdGhlIHJlc2V0IHRvIG1ha2Ugc3VyZSB0aGUgVVdCIGNvbnRyb2xsZXIgcmVpbml0cyB0aGUgUEhZOworICogdGhpcyB3YXkgd2UgY2FuIG5vdyBpZiB0aGUgUEhZIGluaXQgd2VudCBvay4KKyAqLworc3RhdGljCitpbnQgaTE0ODBfY21kX3Jlc2V0KHN0cnVjdCBpMTQ4MCAqaTE0ODApCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdXdiX3JjY2IgKmNtZCA9ICh2b2lkICopIGkxNDgwLT5jbWRfYnVmOworCXN0cnVjdCBpMTQ4MF9ldnRfcmVzZXQgeworCQlzdHJ1Y3QgdXdiX3JjZWIgcmNlYjsKKwkJdTggYlJlc3VsdENvZGU7CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqcmVwbHkgPSAodm9pZCAqKSBpMTQ4MC0+ZXZ0X2J1ZjsKKworCXJlc3VsdCA9IC1FTk9NRU07CisJY21kLT5iQ29tbWFuZFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJY21kLT53Q29tbWFuZCA9IGNwdV90b19sZTE2KFVXQl9SQ19DTURfUkVTRVQpOworCXJlcGx5LT5yY2ViLmJFdmVudFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJcmVwbHktPnJjZWIud0V2ZW50ID0gVVdCX1JDX0NNRF9SRVNFVDsKKwlyZXN1bHQgPSBpMTQ4MF9jbWQoaTE0ODAsICJSRVNFVCIsIHNpemVvZigqY21kKSwgc2l6ZW9mKCpyZXBseSkpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAocmVwbHktPmJSZXN1bHRDb2RlICE9IFVXQl9SQ19SRVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJSRVNFVDogY29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAldVxuIiwKKwkJCXJlcGx5LT5iUmVzdWx0Q29kZSk7CisJCXJlc3VsdCA9IC1FSU87CisJfQorb3V0OgorCXJldHVybiByZXN1bHQ7CisKK30KKworCisvKiBXYWl0IGZvciB0aGUgTUFDIEZXIHRvIHN0YXJ0IHJ1bm5pbmcgKi8KK3N0YXRpYworaW50IGkxNDgwX2Z3X2lzX3J1bm5pbmdfcShzdHJ1Y3QgaTE0ODAgKmkxNDgwKQoreworCWludCBjbnQgPSAwOworCWludCByZXN1bHQ7CisJdTMyICp2YWwgPSAodTMyICopIGkxNDgwLT5jbWRfYnVmOworCisJZF9mbnN0YXJ0KDMsIGkxNDgwLT5kZXYsICIoaTE0ODAgJXApXG4iLCBpMTQ4MCk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDsgY250KyspIHsKKwkJbXNsZWVwKDEwMCk7CisJCXJlc3VsdCA9IGkxNDgwLT5yZWFkKGkxNDgwLCAweDgwMDgwMDAwLCA0KTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoaTE0ODAtPmRldiwgIkNhbid0IHJlYWQgMHg4MDA4MDAwOiAlZFxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICgqdmFsID09IDB4NTU1NTU1NTVVTCkJLyogZncgcnVubmluZz8gY29vbCAqLworCQkJZ290byBvdXQ7CisJfQorCWRldl9lcnIoaTE0ODAtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBmdyB0byBzdGFydFxuIik7CisJcmVzdWx0ID0gLUVUSU1FRE9VVDsKK291dDoKKwlkX2ZuZW5kKDMsIGkxNDgwLT5kZXYsICIoaTE0ODAgJXApID0gJWRcbiIsIGkxNDgwLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7CisKK30KKworCisvKioKKyAqIFVwbG9hZCBNQUMgZmlybXdhcmUsIHdhaXQgZm9yIGl0IHRvIHN0YXJ0CisgKgorICogQGkxNDgwOiAgICAgRGV2aWNlIGluc3RhbmNlCisgKiBAZndfbmFtZTogTmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBmaXJtd2FyZQorICoKKyAqIFRoaXMgaGFzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgcHJlIGZ3IGhhcyBiZWVuIHVwbG9hZGVkIChpZgorICogdGhlcmUgaXMgYW55KS4KKyAqLworaW50IGkxNDgwX21hY19md191cGxvYWQoc3RydWN0IGkxNDgwICppMTQ4MCkKK3sKKwlpbnQgcmVzdWx0ID0gMCwgZGVwcmVjYXRlZF9uYW1lID0gMDsKKwlzdHJ1Y3QgaTE0ODBfcmNlYiAqcmNlYmUgPSAodm9pZCAqKSBpMTQ4MC0+ZXZ0X2J1ZjsKKworCWRfZm5zdGFydCgzLCBpMTQ4MC0+ZGV2LCAiKCVwKVxuIiwgaTE0ODApOworCXJlc3VsdCA9IF9fbWFjX2Z3X3VwbG9hZChpMTQ4MCwgaTE0ODAtPm1hY19md19uYW1lLCAiTUFDIik7CisJaWYgKHJlc3VsdCA9PSAtRU5PRU5UKSB7CisJCXJlc3VsdCA9IF9fbWFjX2Z3X3VwbG9hZChpMTQ4MCwgaTE0ODAtPm1hY19md19uYW1lX2RlcHJlY2F0ZSwKKwkJCQkJICJNQUMiKTsKKwkJZGVwcmVjYXRlZF9uYW1lID0gMTsKKwl9CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJaWYgKGRlcHJlY2F0ZWRfbmFtZSA9PSAxKQorCQlkZXZfd2FybihpMTQ4MC0+ZGV2LAorCQkJICJXQVJOSU5HOiBmaXJtd2FyZSBmaWxlIG5hbWUgJXMgaXMgZGVwcmVjYXRlZCwgIgorCQkJICJwbGVhc2UgcmVuYW1lIHRvICVzXG4iLAorCQkJIGkxNDgwLT5tYWNfZndfbmFtZV9kZXByZWNhdGUsIGkxNDgwLT5tYWNfZndfbmFtZSk7CisJcmVzdWx0ID0gaTE0ODBfZndfaXNfcnVubmluZ19xKGkxNDgwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9md19ub3RfcnVubmluZzsKKwlyZXN1bHQgPSBpMTQ4MC0+cmNfc2V0dXAgPyBpMTQ4MC0+cmNfc2V0dXAoaTE0ODApIDogMDsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJDYW5ub3Qgc2V0dXAgYWZ0ZXIgTUFDIGZ3IHVwbG9hZDogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX3NldHVwOworCX0KKwlyZXN1bHQgPSBpMTQ4MC0+d2FpdF9pbml0X2RvbmUoaTE0ODApOwkvKiB3YWl0IGluaXQnb24gKi8KKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJNQUMgZncgJyVzJzogSW5pdGlhbGl6YXRpb24gdGltZWQgb3V0ICIKKwkJCSIoJWQpXG4iLCBpMTQ4MC0+bWFjX2Z3X25hbWUsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3JfaW5pdF90aW1lb3V0OworCX0KKwkvKiB2ZXJpZnkgd2UgZ290IHRoZSByaWdodCBpbml0aWFsaXphdGlvbiBkb25lIGV2ZW50ICovCisJaWYgKGkxNDgwLT5ldnRfcmVzdWx0ICE9IHNpemVvZigqcmNlYmUpKSB7CisJCWRldl9lcnIoaTE0ODAtPmRldiwgIk1BQyBmdyAnJXMnOiBpbml0aWFsaXphdGlvbiBldmVudCByZXR1cm5zICIKKwkJCSJ3cm9uZyBzaXplICglenUgYnl0ZXMgdnMgJXp1IG5lZWRlZClcbiIsCisJCQlpMTQ4MC0+bWFjX2Z3X25hbWUsIGkxNDgwLT5ldnRfcmVzdWx0LCBzaXplb2YoKnJjZWJlKSk7CisJCWR1bXBfYnl0ZXMoaTE0ODAtPmRldiwgcmNlYmUsIG1pbihpMTQ4MC0+ZXZ0X3Jlc3VsdCwgKHNzaXplX3QpMzIpKTsKKwkJZ290byBlcnJvcl9zaXplOworCX0KKwlyZXN1bHQgPSAtRUlPOworCWlmIChpMTQ4MF9yY2ViX2NoZWNrKGkxNDgwLCAmcmNlYmUtPnJjZWIsIE5VTEwsIDAsIGkxNDgwX0NFVF9WUzEsCisJCQkgICAgIGkxNDgwX0VWVF9STV9JTklUX0RPTkUpIDwgMCkgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJ3cm9uZyBpbml0aWFsaXphdGlvbiBldmVudCAweCUwMngvJTA0eC8lMDJ4ICIKKwkJCSJyZWNlaXZlZDsgZXhwZWN0ZWQgMHglMDJ4LyUwNHgvMDBcbiIsCisJCQlyY2ViZS0+cmNlYi5iRXZlbnRUeXBlLCBsZTE2X3RvX2NwdShyY2ViZS0+cmNlYi53RXZlbnQpLAorCQkJcmNlYmUtPnJjZWIuYkV2ZW50Q29udGV4dCwgaTE0ODBfQ0VUX1ZTMSwKKwkJCWkxNDgwX0VWVF9STV9JTklUX0RPTkUpOworCQlnb3RvIGVycm9yX2luaXRfdGltZW91dDsKKwl9CisJcmVzdWx0ID0gaTE0ODBfY21kX3Jlc2V0KGkxNDgwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycihpMTQ4MC0+ZGV2LCAiTUFDIGZ3ICclcyc6IE1CT0EgcmVzZXQgZmFpbGVkICglZClcbiIsCisJCQlpMTQ4MC0+bWFjX2Z3X25hbWUsIHJlc3VsdCk7CitlcnJvcl9md19ub3RfcnVubmluZzoKK2Vycm9yX2luaXRfdGltZW91dDoKK2Vycm9yX3NpemU6CitlcnJvcl9zZXR1cDoKKwlkX2ZuZW5kKDMsIGkxNDgwLT5kZXYsICIoaTE0ODAgJXApID0gJWRcbiIsIGkxNDgwLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvcGh5LmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxYTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2RmdS9waHkuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIEludGVsIFdpcmVsZXNzIFVXQiBMaW5rIDE0ODAKKyAqIFBIWSBwYXJhbWV0ZXJzIHVwbG9hZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogQ29kZSBmb3IgdXBsb2FkaW5nIHRoZSBQSFkgcGFyYW1ldGVycyB0byB0aGUgUEhZIHRocm91Z2ggdGhlIFVXQgorICogUmFkaW8gQ29udHJvbCBpbnRlcmZhY2UuCisgKgorICogV2UganVzdCBzZW5kIHRoZSBkYXRhIHRocm91Z2ggdGhlIE1QSSBpbnRlcmZhY2UgdXNpbmcgSFdBLWxpa2UKKyAqIGNvbW1hbmRzIGFuZCB0aGVuIHJlc2V0IHRoZSBQSFkgdG8gbWFrZSBzdXJlIGl0IGlzIG9rLgorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi93dXNiLmg+CisjaW5jbHVkZSAiaTE0ODAtZGZ1LmgiCisKKworLyoqCisgKiBXcml0ZSBhIHZhbHVlIGFycmF5IHRvIGFuIGFkZHJlc3Mgb2YgdGhlIE1QSSBpbnRlcmZhY2UKKyAqCisgKiBAaTE0ODA6CURldmljZSBkZXNjcmlwdG9yCisgKiBAZGF0YToJRGF0YSBhcnJheSB0byB3cml0ZQorICogQHNpemU6CVNpemUgb2YgdGhlIGRhdGEgYXJyYXkKKyAqIEByZXR1cm5zOgkwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqCisgKiBUaGUgZGF0YSBhcnJheSBpcyBvcmdhbml6ZWQgaW50byBwYWlyczoKKyAqCisgKiBBRERSRVNTIFZBTFVFCisgKgorICogQUREUkVTUyBpcyBCRSAxNiBiaXQgdW5zaWduZWQsIFZBTFVFIDggYml0IHVuc2lnbmVkLiBTaXplIHRodXMgaGFzCisgKiB0byBiZSBhIG11bHRpcGxlIG9mIHRocmVlLgorICovCitzdGF0aWMKK2ludCBpMTQ4MF9tcGlfd3JpdGUoc3RydWN0IGkxNDgwICppMTQ4MCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgaTE0ODBfY21kX21waV93cml0ZSAqY21kID0gaTE0ODAtPmNtZF9idWY7CisJc3RydWN0IGkxNDgwX2V2dF9jb25maXJtICpyZXBseSA9IGkxNDgwLT5ldnRfYnVmOworCisJQlVHX09OKHNpemUgPiA0ODApOworCXJlc3VsdCA9IC1FTk9NRU07CisJY21kLT5yY2NiLmJDb21tYW5kVHlwZSA9IGkxNDgwX0NFVF9WUzE7CisJY21kLT5yY2NiLndDb21tYW5kID0gY3B1X3RvX2xlMTYoaTE0ODBfQ01EX01QSV9XUklURSk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJbWVtY3B5KGNtZC0+ZGF0YSwgZGF0YSwgc2l6ZSk7CisJcmVwbHktPnJjZWIuYkV2ZW50VHlwZSA9IGkxNDgwX0NFVF9WUzE7CisJcmVwbHktPnJjZWIud0V2ZW50ID0gaTE0ODBfQ01EX01QSV9XUklURTsKKwlyZXN1bHQgPSBpMTQ4MF9jbWQoaTE0ODAsICJNUEktV1JJVEUiLCBzaXplb2YoKmNtZCkgKyBzaXplLCBzaXplb2YoKnJlcGx5KSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0OworCWlmIChyZXBseS0+YlJlc3VsdENvZGUgIT0gVVdCX1JDX1JFU19TVUNDRVNTKSB7CisJCWRldl9lcnIoaTE0ODAtPmRldiwgIk1QSS1XUklURTogY29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCXJlcGx5LT5iUmVzdWx0Q29kZSk7CisJCXJlc3VsdCA9IC1FSU87CisJfQorb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBSZWFkIGEgdmFsdWUgYXJyYXkgdG8gZnJvbSBhbiBhZGRyZXNzIG9mIHRoZSBNUEkgaW50ZXJmYWNlCisgKgorICogQGkxNDgwOglEZXZpY2UgZGVzY3JpcHRvcgorICogQGRhdGE6CXdoZXJlIHRvIHBsYWNlIHRoZSByZWFkIGFycmF5CisgKiBAc3JjYWRkcjoJV2hlcmUgdG8gcmVhZCBmcm9tCisgKiBAc2l6ZToJU2l6ZSBvZiB0aGUgZGF0YSByZWFkIGFycmF5CisgKiBAcmV0dXJuczoJMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKgorICogVGhlIGNvbW1hbmQgZGF0YSBhcnJheSBpcyBvcmdhbml6ZWQgaW50byBwYWlycyBBRERSMCBBRERSMS4uLiwgYW5kCisgKiB0aGUgcmV0dXJuZWQgZGF0YSBpbiBBRERSMCBWQUxVRTAgQUREUjEgVkFMVUUxLi4uCisgKgorICogV2UgZ2VuZXJhdGUgdGhlIGNvbW1hbmQgYXJyYXkgdG8gYmUgYSBzZXF1ZW50aWFsIHJlYWQgYW5kIHRoZW4KKyAqIHJlYXJyYW5nZSB0aGUgcmVzdWx0LgorICoKKyAqIFdlIHVzZSB0aGUgaTE0ODAtPmNtZF9idWYgZm9yIHRoZSBjb21tYW5kLCBpMTQ4MC0+ZXZ0X2J1ZiBmb3IgdGhlIHJlcGx5LgorICoKKyAqIEFzIHRoZSByZXBseSBoYXMgdG8gZml0IGluIDUxMiBieXRlcyAoaTE0ODAtPmV2dF9idWZmZXIpLCB0aGUgbWF4IGFtb3VudAorICogb2YgdmFsdWVzIHdlIGNhbiByZWFkIGlzICg1MTIgLSBzaXplb2YoKnJlcGx5KSkgLyAzCisgKi8KK3N0YXRpYworaW50IGkxNDgwX21waV9yZWFkKHN0cnVjdCBpMTQ4MCAqaTE0ODAsIHU4ICpkYXRhLCB1MTYgc3JjYWRkciwgc2l6ZV90IHNpemUpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgaTE0ODBfY21kX21waV9yZWFkICpjbWQgPSBpMTQ4MC0+Y21kX2J1ZjsKKwlzdHJ1Y3QgaTE0ODBfZXZ0X21waV9yZWFkICpyZXBseSA9IGkxNDgwLT5ldnRfYnVmOworCXVuc2lnbmVkIGNudDsKKworCW1lbXNldChpMTQ4MC0+Y21kX2J1ZiwgMHg2OSwgNTEyKTsKKwltZW1zZXQoaTE0ODAtPmV2dF9idWYsIDB4NjksIDUxMik7CisKKwlCVUdfT04oc2l6ZSA+IChpMTQ4MC0+YnVmX3NpemUgLSBzaXplb2YoKnJlcGx5KSkgLyAzKTsKKwlyZXN1bHQgPSAtRU5PTUVNOworCWNtZC0+cmNjYi5iQ29tbWFuZFR5cGUgPSBpMTQ4MF9DRVRfVlMxOworCWNtZC0+cmNjYi53Q29tbWFuZCA9IGNwdV90b19sZTE2KGkxNDgwX0NNRF9NUElfUkVBRCk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoMypzaXplKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHNpemU7IGNudCsrKSB7CisJCWNtZC0+ZGF0YVtjbnRdLnBhZ2UgPSAoc3JjYWRkciArIGNudCkgPj4gODsKKwkJY21kLT5kYXRhW2NudF0ub2Zmc2V0ID0gKHNyY2FkZHIgKyBjbnQpICYgMHhmZjsKKwl9CisJcmVwbHktPnJjZWIuYkV2ZW50VHlwZSA9IGkxNDgwX0NFVF9WUzE7CisJcmVwbHktPnJjZWIud0V2ZW50ID0gaTE0ODBfQ01EX01QSV9SRUFEOworCXJlc3VsdCA9IGkxNDgwX2NtZChpMTQ4MCwgIk1QSS1SRUFEIiwgc2l6ZW9mKCpjbWQpICsgMipzaXplLAorCQkJc2l6ZW9mKCpyZXBseSkgKyAzKnNpemUpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAocmVwbHktPmJSZXN1bHRDb2RlICE9IFVXQl9SQ19SRVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJNUEktUkVBRDogY29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCXJlcGx5LT5iUmVzdWx0Q29kZSk7CisJCXJlc3VsdCA9IC1FSU87CisJfQorCWZvciAoY250ID0gMDsgY250IDwgc2l6ZTsgY250KyspIHsKKwkJaWYgKHJlcGx5LT5kYXRhW2NudF0ucGFnZSAhPSAoc3JjYWRkciArIGNudCkgPj4gOCkKKwkJCWRldl9lcnIoaTE0ODAtPmRldiwgIk1QSS1SRUFEOiBwYWdlIGluY29uc2lzdGVuY3kgYXQgIgorCQkJCSJpbmRleCAldTogZXhwZWN0ZWQgMHglMDJ4LCBnb3QgMHglMDJ4XG4iLCBjbnQsCisJCQkJKHNyY2FkZHIgKyBjbnQpID4+IDgsIHJlcGx5LT5kYXRhW2NudF0ucGFnZSk7CisJCWlmIChyZXBseS0+ZGF0YVtjbnRdLm9mZnNldCAhPSAoKHNyY2FkZHIgKyBjbnQpICYgMHgwMGZmKSkKKwkJCWRldl9lcnIoaTE0ODAtPmRldiwgIk1QSS1SRUFEOiBvZmZzZXQgaW5jb25zaXN0ZW5jeSBhdCAiCisJCQkJImluZGV4ICV1OiBleHBlY3RlZCAweCUwMngsIGdvdCAweCUwMnhcbiIsIGNudCwKKwkJCQkoc3JjYWRkciArIGNudCkgJiAweDAwZmYsCisJCQkJcmVwbHktPmRhdGFbY250XS5vZmZzZXQpOworCQlkYXRhW2NudF0gPSByZXBseS0+ZGF0YVtjbnRdLnZhbHVlOworCX0KKwlyZXN1bHQgPSAwOworb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBVcGxvYWQgYSBQSFkgZmlybXdhcmUsIHdhaXQgZm9yIGl0IHRvIHN0YXJ0CisgKgorICogQGkxNDgwOiAgICAgRGV2aWNlIGluc3RhbmNlCisgKiBAZndfbmFtZTogTmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBmaXJtd2FyZQorICoKKyAqIFdlIGFzc3VtZSB0aGUgTUFDIGZ3IGlzIHVwIGFuZCBydW5uaW5nLiBUaGlzIG1lYW5zIHdlIGNhbiB1c2UgdGhlCisgKiBNUEkgaW50ZXJmYWNlIHRvIHdyaXRlIHRoZSBQSFkgZmlybXdhcmUuIE9uY2UgZG9uZSwgd2UgaXNzdWUgYW4KKyAqIE1CT0EgUmVzZXQsIHdoaWNoIHdpbGwgZm9yY2UgdGhlIE1BQyB0byByZXNldCBhbmQgcmVpbml0aWFsaXplIHRoZQorICogUEhZLiBJZiB0aGF0IHdvcmtzLCB3ZSBhcmUgcmVhZHkgdG8gZ28uCisgKgorICogTWF4IHBhY2tldCBzaXplIGZvciB0aGUgTVBJIHdyaXRlIGlzIDUxMiwgc28gdGhlIG1heCBidWZmZXIgaXMgNDgwCisgKiAod2hpY2ggZ2l2ZXMgdXMgMTYwIGJ5dGUgdHJpYWRzIG9mIE1TQiwgTFNCIGFuZCBWQUwgZm9yIHRoZSBkYXRhKS4KKyAqLworaW50IGkxNDgwX3BoeV9md191cGxvYWQoc3RydWN0IGkxNDgwICppMTQ4MCkKK3sKKwlpbnQgcmVzdWx0OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgY2hhciAqZGF0YV9pdHIsICpkYXRhX3RvcDsKKwljb25zdCBzaXplX3QgTUFYX0JMS19TSVpFID0gNDgwOwkvKiAxNjAgdHJpYWRzICovCisJc2l6ZV90IGRhdGFfc2l6ZTsKKwl1OCBwaHlfc3RhdDsKKworCXJlc3VsdCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBpMTQ4MC0+cGh5X2Z3X25hbWUsIGkxNDgwLT5kZXYpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIG91dDsKKwkvKiBMb29wIHdyaXRpbmcgZGF0YSBpbiBjaHVua3MgYXMgYmlnIGFzIHBvc3NpYmxlIHVudGlsIGRvbmUuICovCisJZm9yIChkYXRhX2l0ciA9IGZ3LT5kYXRhLCBkYXRhX3RvcCA9IGRhdGFfaXRyICsgZnctPnNpemU7CisJICAgICBkYXRhX2l0ciA8IGRhdGFfdG9wOyBkYXRhX2l0ciArPSBNQVhfQkxLX1NJWkUpIHsKKwkJZGF0YV9zaXplID0gbWluKE1BWF9CTEtfU0laRSwgKHNpemVfdCkgKGRhdGFfdG9wIC0gZGF0YV9pdHIpKTsKKwkJcmVzdWx0ID0gaTE0ODBfbXBpX3dyaXRlKGkxNDgwLCBkYXRhX2l0ciwgZGF0YV9zaXplKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlnb3RvIGVycm9yX21waV93cml0ZTsKKwl9CisJLyogUmVhZCBNUEkgcGFnZSAwLCBvZmZzZXQgNjsgaWYgMCwgUEhZIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuICovCisJcmVzdWx0ID0gaTE0ODBfbXBpX3JlYWQoaTE0ODAsICZwaHlfc3RhdCwgMHgwMDA2LCAxKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkxNDgwLT5kZXYsICJQSFk6IGNhbid0IGdldCBzdGF0dXM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX21waV9zdGF0dXM7CisJfQorCWlmIChwaHlfc3RhdCAhPSAwKSB7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCWRldl9pbmZvKGkxNDgwLT5kZXYsICJlcnJvciwgUEhZIG5vdCByZWFkeTogJXVcbiIsIHBoeV9zdGF0KTsKKwkJZ290byBlcnJvcl9waHlfc3RhdHVzOworCX0KKwlkZXZfaW5mbyhpMTQ4MC0+ZGV2LCAiUEhZIGZ3ICclcyc6IHVwbG9hZGVkXG4iLCBpMTQ4MC0+cGh5X2Z3X25hbWUpOworZXJyb3JfcGh5X3N0YXR1czoKK2Vycm9yX21waV9zdGF0dXM6CitlcnJvcl9tcGlfd3JpdGU6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoaTE0ODAtPmRldiwgIlBIWSBmdyAnJXMnOiBmYWlsZWQgdG8gdXBsb2FkICglZCksICIKKwkJCSJwb3dlciBjeWNsZSBkZXZpY2VcbiIsIGkxNDgwLT5waHlfZndfbmFtZSwgcmVzdWx0KTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvZGZ1L3VzYi5jIGIvZHJpdmVycy91d2IvaTE0ODAvZGZ1L3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZWVlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9kZnUvdXNiLmMKQEAgLTAsMCArMSw1MDAgQEAKKy8qCisgKiBJbnRlbCBXaXJlbGVzcyBVV0IgTGluayAxNDgwCisgKiBVU0IgU0tVIGZpcm13YXJlIHVwbG9hZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogVGhpcyBkcml2ZXIgd2lsbCBwcmVwYXJlIHRoZSBpMTQ4MCBkZXZpY2UgdG8gYmVoYXZlIGFzIGEgcmVhbAorICogV2lyZWxlc3MgVVNCIEhXQSBhZGFwdG9yIGJ5IHVwbG9hZGluZyB0aGUgZmlybXdhcmUuCisgKgorICogV2hlbiB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCBvciBkcml2ZXIgaXMgbG9hZGVkLCBpMTQ4MF91c2JfcHJvYmUoKQorICogaXMgY2FsbGVkLS10aGlzIHdpbGwgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUsCisgKiBmaWxsIGluIHRoZSBwb2ludGVycyB0byB0aGUgY29tbW9uIGZ1bmN0aW9ucyAocmVhZCwgd3JpdGUsCisgKiB3YWl0X2luaXRfZG9uZSBhbmQgY21kIGZvciBIV0EgY29tbWFuZCBleGVjdXRpb24pIGFuZCBvbmNlIHRoYXQgaXMKKyAqIGRvbmUsIGNhbGwgdGhlIGNvbW1vbiBmaXJtd2FyZSB1cGxvYWRpbmcgcm91dGluZS4gVGhlbiBjbGVhbiB1cCBhbmQKKyAqIHJldHVybiAtRU5PREVWLCBhcyB3ZSBkb24ndCBhdHRhY2ggdG8gdGhlIGRldmljZS4KKyAqCisgKiBUaGUgcmVzdCBhcmUgdGhlIGJhc2ljIG9wcyB3ZSBpbXBsZW1lbnQgdGhhdCB0aGUgZncgdXBsb2FkIGNvZGUKKyAqIHVzZXMgdG8gZG8gaXRzIGpvYi4gQWxsIHRoZSBvcHMgaW4gdGhlIGNvbW1vbiBjb2RlIGFyZSBpMTQ4MC0+TkFNRSwKKyAqIHRoZSBmdW5jdGlvbnMgYXJlIGkxNDgwX3VzYl9OQU1FKCkuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivd3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi93dXNiLXdhLmg+CisjaW5jbHVkZSAiaTE0ODAtZGZ1LmgiCisKKyNkZWZpbmUgRF9MT0NBTCAwCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKworc3RydWN0IGkxNDgwX3VzYiB7CisJc3RydWN0IGkxNDgwIGkxNDgwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZhY2U7CisJc3RydWN0IHVyYiAqbmVlcF91cmI7CS8qIFVSQiBmb3IgcmVhZGluZyBmcm9tIEVQMSAqLworfTsKKworCitzdGF0aWMKK3ZvaWQgaTE0ODBfdXNiX2luaXQoc3RydWN0IGkxNDgwX3VzYiAqaTE0ODBfdXNiKQoreworCWkxNDgwX2luaXQoJmkxNDgwX3VzYi0+aTE0ODApOworfQorCisKK3N0YXRpYworaW50IGkxNDgwX3VzYl9jcmVhdGUoc3RydWN0IGkxNDgwX3VzYiAqaTE0ODBfdXNiLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGlmYWNlKTsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKworCWkxNDgwX3VzYi0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KHVzYl9kZXYpOwkvKiBiaW5kIHRoZSBVU0IgZGV2aWNlICovCisJaTE0ODBfdXNiLT51c2JfaWZhY2UgPSB1c2JfZ2V0X2ludGYoaWZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaWZhY2UsIGkxNDgwX3VzYik7CQkvKiBCaW5kIHRoZSBkcml2ZXIgdG8gaWZhY2UwICovCisJaTE0ODBfdXNiLT5uZWVwX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGkxNDgwX3VzYi0+bmVlcF91cmIgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgTlVMTCk7CisJdXNiX3B1dF9pbnRmKGlmYWNlKTsKKwl1c2JfcHV0X2Rldih1c2JfZGV2KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYwordm9pZCBpMTQ4MF91c2JfZGVzdHJveShzdHJ1Y3QgaTE0ODBfdXNiICppMTQ4MF91c2IpCit7CisJdXNiX2tpbGxfdXJiKGkxNDgwX3VzYi0+bmVlcF91cmIpOworCXVzYl9mcmVlX3VyYihpMTQ4MF91c2ItPm5lZXBfdXJiKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGkxNDgwX3VzYi0+dXNiX2lmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2ludGYoaTE0ODBfdXNiLT51c2JfaWZhY2UpOworCXVzYl9wdXRfZGV2KGkxNDgwX3VzYi0+dXNiX2Rldik7Cit9CisKKworLyoqCisgKiBXcml0ZSBhIGJ1ZmZlciB0byBhIG1lbW9yeSBhZGRyZXNzIGluIHRoZSBpMTQ4MCBkZXZpY2UKKyAqCisgKiBAaTE0ODA6ICBpMTQ4MCBpbnN0YW5jZQorICogQG1lbW9yeV9hZGRyZXNzOgorICogICAgICAgICAgQWRkcmVzcyB3aGVyZSB0byB3cml0ZSB0aGUgZGF0YSBidWZmZXIgdG8uCisgKiBAYnVmZmVyOiBCdWZmZXIgdG8gdGhlIGRhdGEKKyAqIEBzaXplOiAgIFNpemUgb2YgdGhlIGJ1ZmZlciBbaGFzIHRvIGJlIDwgNTEyXS4KKyAqIEByZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqCisgKiBEYXRhIGJ1ZmZlcnMgdG8gVVNCIGNhbm5vdCBiZSBvbiB0aGUgc3RhY2sgb3IgaW4gdm1hbGxvYydlZCBhcmVhcywKKyAqIHNvIHdlIGNvcHkgaXQgdG8gdGhlIGxvY2FsIGkxNDgwIGJ1ZmZlciBiZWZvcmUgcHJvY2VlZGluZy4gSW4gYW55CisgKiBjYXNlLCB3ZSBoYXZlIGEgbWF4IHNpemUgd2UgY2FuIHNlbmQsIHNvb29vLgorICovCitzdGF0aWMKK2ludCBpMTQ4MF91c2Jfd3JpdGUoc3RydWN0IGkxNDgwICppMTQ4MCwgdTMyIG1lbW9yeV9hZGRyZXNzLAorCQkgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgaTE0ODBfdXNiICppMTQ4MF91c2IgPSBjb250YWluZXJfb2YoaTE0ODAsIHN0cnVjdCBpMTQ4MF91c2IsIGkxNDgwKTsKKwlzaXplX3QgYnVmZmVyX3NpemUsIGl0ciA9IDA7CisKKwlkX2Zuc3RhcnQoMywgaTE0ODAtPmRldiwgIiglcCwgMHglMDh4LCAlcCwgJXp1KVxuIiwKKwkJICBpMTQ4MCwgbWVtb3J5X2FkZHJlc3MsIGJ1ZmZlciwgc2l6ZSk7CisJQlVHX09OKHNpemUgJiAweDMpOyAvKiBOZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQgKi8KKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJYnVmZmVyX3NpemUgPSBzaXplIDwgaTE0ODAtPmJ1Zl9zaXplID8gc2l6ZSA6IGkxNDgwLT5idWZfc2l6ZTsKKwkJbWVtY3B5KGkxNDgwLT5jbWRfYnVmLCBidWZmZXIgKyBpdHIsIGJ1ZmZlcl9zaXplKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKAorCQkJaTE0ODBfdXNiLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUoaTE0ODBfdXNiLT51c2JfZGV2LCAwKSwKKwkJCTB4ZjAsIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCWNwdV90b19sZTE2KG1lbW9yeV9hZGRyZXNzICYgMHhmZmZmKSwKKwkJCWNwdV90b19sZTE2KChtZW1vcnlfYWRkcmVzcyA+PiAxNikgJiAweGZmZmYpLAorCQkJaTE0ODAtPmNtZF9idWYsIGJ1ZmZlcl9zaXplLCAxMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJYnJlYWs7CisJCWRfcHJpbnRmKDMsIGkxNDgwLT5kZXYsCisJCQkgIndyb3RlIEAgMHglMDh4ICV1IGJ5dGVzIChvZiAlenUgYnl0ZXMgcmVxdWVzdGVkKVxuIiwKKwkJCSBtZW1vcnlfYWRkcmVzcywgcmVzdWx0LCBidWZmZXJfc2l6ZSk7CisJCWRfZHVtcCg0LCBpMTQ4MC0+ZGV2LCBpMTQ4MC0+Y21kX2J1ZiwgcmVzdWx0KTsKKwkJaXRyICs9IHJlc3VsdDsKKwkJbWVtb3J5X2FkZHJlc3MgKz0gcmVzdWx0OworCQlzaXplIC09IHJlc3VsdDsKKwl9CisJZF9mbmVuZCgzLCBpMTQ4MC0+ZGV2LCAiKCVwLCAweCUwOHgsICVwLCAlenUpID0gJWRcbiIsCisJCWkxNDgwLCBtZW1vcnlfYWRkcmVzcywgYnVmZmVyLCBzaXplLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBSZWFkIGEgYmxvY2sgW21heCBzaXplIDUxMl0gb2YgdGhlIGRldmljZSdzIG1lbW9yeSB0byBAaTE0ODAncyBidWZmZXIuCisgKgorICogQGkxNDgwOiBpMTQ4MCBpbnN0YW5jZQorICogQG1lbW9yeV9hZGRyZXNzOgorICogICAgICAgICBBZGRyZXNzIHdoZXJlIHRvIHJlYWQgZnJvbS4KKyAqIEBzaXplOiAgU2l6ZSB0byByZWFkLiBTbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gNTEyLgorICogQHJldHVybnM6ID49IDAgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaWYgb2ssIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yLgorICoKKyAqIE5PVEU6IGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBvciBibG9jayBpcyBpbmNvcnJlY3QsIHlvdSBtaWdodCBnZXQgYQorICogICAgICAgc3RhbGwgb3IgYSBkaWZmZXJlbnQgbWVtb3J5IHJlYWQuIENhbGxlciBoYXMgdG8gdmVyaWZ5IHRoZQorICogICAgICAgbWVtb3J5IGFkZHJlc3MgYW5kIHNpemUgcGFzc2VkIGJhY2sgaW4gdGhlIEBuZWggc3RydWN0dXJlLgorICovCitzdGF0aWMKK2ludCBpMTQ4MF91c2JfcmVhZChzdHJ1Y3QgaTE0ODAgKmkxNDgwLCB1MzIgYWRkciwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQgPSAwLCBieXRlcyA9IDA7CisJc2l6ZV90IGl0ciwgcmVhZF9zaXplID0gaTE0ODAtPmJ1Zl9zaXplOworCXN0cnVjdCBpMTQ4MF91c2IgKmkxNDgwX3VzYiA9IGNvbnRhaW5lcl9vZihpMTQ4MCwgc3RydWN0IGkxNDgwX3VzYiwgaTE0ODApOworCisJZF9mbnN0YXJ0KDMsIGkxNDgwLT5kZXYsICIoJXAsIDB4JTA4eCwgJXp1KVxuIiwKKwkJICBpMTQ4MCwgYWRkciwgc2l6ZSk7CisJQlVHX09OKHNpemUgPiBpMTQ4MC0+YnVmX3NpemUpOworCUJVR19PTihzaXplICYgMHgzKTsgLyogTmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0ICovCisJQlVHX09OKHJlYWRfc2l6ZSA+IDUxMik7CisKKwlpZiAoYWRkciA+PSAweDgwMDBkMjAwICYmIGFkZHIgPCAweDgwMDBkNDAwKQkvKiBZZWFoLCBIVyBxdWlyayAqLworCQlyZWFkX3NpemUgPSA0OworCisJZm9yIChpdHIgPSAwOyBpdHIgPCBzaXplOyBpdHIgKz0gcmVhZF9zaXplKSB7CisJCXNpemVfdCBpdHJfYWRkciA9IGFkZHIgKyBpdHI7CisJCXNpemVfdCBpdHJfc2l6ZSA9IG1pbihyZWFkX3NpemUsIHNpemUgLSBpdHIpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCQlpMTQ4MF91c2ItPnVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZShpMTQ4MF91c2ItPnVzYl9kZXYsIDApLAorCQkJMHhmMCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQljcHVfdG9fbGUxNihpdHJfYWRkciAmIDB4ZmZmZiksCisJCQljcHVfdG9fbGUxNigoaXRyX2FkZHIgPj4gMTYpICYgMHhmZmZmKSwKKwkJCWkxNDgwLT5jbWRfYnVmICsgaXRyLCBpdHJfc2l6ZSwKKwkJCTEwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoaTE0ODAtPmRldiwgIiVzOiBVU0IgcmVhZCBlcnJvcjogJXpkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHJlc3VsdCAhPSBpdHJfc2l6ZSkgeworCQkJcmVzdWx0ID0gLUVJTzsKKwkJCWRldl9lcnIoaTE0ODAtPmRldiwKKwkJCQkiJXM6IHBhcnRpYWwgcmVhZCBnb3Qgb25seSAlenUgYnl0ZXMgdnMgJXp1IGV4cGVjdGVkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQsIGl0cl9zaXplKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJ5dGVzICs9IHJlc3VsdDsKKwl9CisJcmVzdWx0ID0gYnl0ZXM7CitvdXQ6CisJZF9mbmVuZCgzLCBpMTQ4MC0+ZGV2LCAiKCVwLCAweCUwOHgsICV6dSkgPSAlemRcbiIsCisJCWkxNDgwLCBhZGRyLCBzaXplLCByZXN1bHQpOworCWlmIChyZXN1bHQgPiAwKQorCQlkX2R1bXAoNCwgaTE0ODAtPmRldiwgaTE0ODAtPmNtZF9idWYsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIENhbGxiYWNrIGZvciByZWFkcyBvbiB0aGUgbm90aWZpY2F0aW9uL2V2ZW50IGVuZHBvaW50CisgKgorICogSnVzdCBlbmFibGVzIHRoZSBjb21wbGV0aW9uIHJlYWQgaGFuZGxlci4KKyAqLworc3RhdGljCit2b2lkIGkxNDgwX3VzYl9uZWVwX2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgaTE0ODAgKmkxNDgwID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkxNDgwLT5kZXY7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiBOb3QgYW4gZXJyb3IsIGJ1dCBhIGNvbnRyb2xsZWQgc2l0dWF0aW9uOyAqLworCWNhc2UgLUVOT0VOVDoJCS8qICh3ZSBraWxsZWQgdGhlIFVSQikuLi5zbywgbm8gYnJvYWRjYXN0ICovCisJCWRldl9kYmcoZGV2LCAiTkVFUDogcmVzZXQvbm9lbnQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSAtRVNIVVRET1dOOgkvKiBnb2luZyBhd2F5ISAqLworCQlkZXZfZGJnKGRldiwgIk5FRVA6IGRvd24gJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJORUVQOiB1bmtub3duIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisJaTE0ODAtPmV2dF9yZXN1bHQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJY29tcGxldGUoJmkxNDgwLT5ldnRfY29tcGxldGUpOworCXJldHVybjsKK30KKworCisvKioKKyAqIFdhaXQgZm9yIHRoZSBNQUMgRlcgdG8gaW5pdGlhbGl6ZQorICoKKyAqIE1BQyBGVyBzZW5kcyBhIDB4ZmQvMDEwMS8wMCBub3RpZmljYXRpb24gdG8gRVAxIHdoZW4gZG9uZQorICogaW5pdGlhbGl6aW5nLiBHZXQgdGhhdCBub3RpZmljYXRpb24gaW50byBpMTQ4MC0+ZXZ0X2J1ZjsgdXBwZXIgbGF5ZXIKKyAqIHdpbGwgdmVyaWZ5IGl0LgorICoKKyAqIFNldCBpMTQ4MC0+ZXZ0X3Jlc3VsdCB3aXRoIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgZXZlbnQgb3IgaXRzCisgKiBzaXplIChpZiBzdWNjZXNmdWwpLgorICoKKyAqIERlbGl2ZXJzIHRoZSBkYXRhIGRpcmVjdGx5IHRvIGkxNDgwLT5ldnRfYnVmCisgKi8KK3N0YXRpYworaW50IGkxNDgwX3VzYl93YWl0X2luaXRfZG9uZShzdHJ1Y3QgaTE0ODAgKmkxNDgwKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTE0ODAtPmRldjsKKwlzdHJ1Y3QgaTE0ODBfdXNiICppMTQ4MF91c2IgPSBjb250YWluZXJfb2YoaTE0ODAsIHN0cnVjdCBpMTQ4MF91c2IsIGkxNDgwKTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZDsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoJXApXG4iLCBpMTQ4MCk7CisJaW5pdF9jb21wbGV0aW9uKCZpMTQ4MC0+ZXZ0X2NvbXBsZXRlKTsKKwlpMTQ4MC0+ZXZ0X3Jlc3VsdCA9IC1FSU5QUk9HUkVTUzsKKwllcGQgPSAmaTE0ODBfdXNiLT51c2JfaWZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOworCXVzYl9maWxsX2ludF91cmIoaTE0ODBfdXNiLT5uZWVwX3VyYiwgaTE0ODBfdXNiLT51c2JfZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKGkxNDgwX3VzYi0+dXNiX2RldiwgZXBkLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBpMTQ4MC0+ZXZ0X2J1ZiwgaTE0ODAtPmJ1Zl9zaXplLAorCQkJIGkxNDgwX3VzYl9uZWVwX2NiLCBpMTQ4MCwgZXBkLT5iSW50ZXJ2YWwpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGkxNDgwX3VzYi0+bmVlcF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiaW5pdCBkb25lOiBjYW5ub3Qgc3VibWl0IE5FRVAgcmVhZDogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX3N1Ym1pdDsKKwl9CisJLyogV2FpdCBmb3IgdGhlIFVTQiBjYWxsYmFjayB0byBnZXQgdGhlIGRhdGEgKi8KKwlyZXN1bHQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJJmkxNDgwLT5ldnRfY29tcGxldGUsIEhaKTsKKwlpZiAocmVzdWx0IDw9IDApIHsKKwkJcmVzdWx0ID0gcmVzdWx0ID09IDAgPyAtRVRJTUVET1VUIDogcmVzdWx0OworCQlnb3RvIGVycm9yX3dhaXQ7CisJfQorCXVzYl9raWxsX3VyYihpMTQ4MF91c2ItPm5lZXBfdXJiKTsKKwlkX2ZuZW5kKDMsIGRldiwgIiglcCkgPSAwXG4iLCBpMTQ4MCk7CisJcmV0dXJuIDA7CisKK2Vycm9yX3dhaXQ6CisJdXNiX2tpbGxfdXJiKGkxNDgwX3VzYi0+bmVlcF91cmIpOworZXJyb3Jfc3VibWl0OgorCWkxNDgwLT5ldnRfcmVzdWx0ID0gcmVzdWx0OworCWRfZm5lbmQoMywgZGV2LCAiKCVwKSA9ICVkXG4iLCBpMTQ4MCwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogR2VuZXJpYyBmdW5jdGlvbiBmb3IgaXNzdWluZyBjb21tYW5kcyB0byB0aGUgaTE0ODAKKyAqCisgKiBAaTE0ODA6ICAgICAgaTE0ODAgaW5zdGFuY2UKKyAqIEBjbWRfbmFtZTogICBOYW1lIG9mIHRoZSBjb21tYW5kIChmb3IgZXJyb3IgbWVzc2FnZXMpCisgKiBAY21kOiAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIGJ1ZmZlcgorICogQGNtZF9zaXplOiAgIFNpemUgb2YgdGhlIGNvbW1hbmQgYnVmZmVyCisgKiBAcmVwbHk6ICAgICAgQnVmZmVyIGZvciB0aGUgcmVwbHkgZXZlbnQKKyAqIEByZXBseV9zaXplOiBFeHBlY3RlZCBzaXplIGJhY2sgKGluY2x1ZGluZyBSQ0VCKTsgdGhlIHJlcGx5IGJ1ZmZlcgorICogICAgICAgICAgICAgIGlzIGFzc3VtZWQgdG8gYmUgYXMgYmlnIGFzIHRoaXMuCisgKiBAcmV0dXJuczogICAgPj0gMCBzaXplIG9mIHRoZSByZXR1cm5lZCBldmVudCBkYXRhIGlmIG9rLAorICogICAgICAgICAgICAgIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yLgorICoKKyAqIEFybXMgdGhlIE5FIGhhbmRsZSwgaXNzdWVzIHRoZSBjb21tYW5kIHRvIHRoZSBkZXZpY2UgYW5kIGNoZWNrcyB0aGUKKyAqIGJhc2ljcyBvZiB0aGUgcmVwbHkgZXZlbnQuCisgKi8KK3N0YXRpYworaW50IGkxNDgwX3VzYl9jbWQoc3RydWN0IGkxNDgwICppMTQ4MCwgY29uc3QgY2hhciAqY21kX25hbWUsIHNpemVfdCBjbWRfc2l6ZSkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkxNDgwLT5kZXY7CisJc3RydWN0IGkxNDgwX3VzYiAqaTE0ODBfdXNiID0gY29udGFpbmVyX29mKGkxNDgwLCBzdHJ1Y3QgaTE0ODBfdXNiLCBpMTQ4MCk7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQ7CisJc3RydWN0IHV3Yl9yY2NiICpjbWQgPSBpMTQ4MC0+Y21kX2J1ZjsKKwl1OCBpZmFjZV9ubzsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoJXAsICVzLCAlenUpXG4iLCBpMTQ4MCwgY21kX25hbWUsIGNtZF9zaXplKTsKKwkvKiBQb3N0IGEgcmVhZCBvbiB0aGUgbm90aWZpY2F0aW9uICYgZXZlbnQgZW5kcG9pbnQgKi8KKwlpZmFjZV9ubyA9IGkxNDgwX3VzYi0+dXNiX2lmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWVwZCA9ICZpMTQ4MF91c2ItPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisJdXNiX2ZpbGxfaW50X3VyYigKKwkJaTE0ODBfdXNiLT5uZWVwX3VyYiwgaTE0ODBfdXNiLT51c2JfZGV2LAorCQl1c2JfcmN2aW50cGlwZShpMTQ4MF91c2ItPnVzYl9kZXYsIGVwZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCWkxNDgwLT5ldnRfYnVmLCBpMTQ4MC0+YnVmX3NpemUsCisJCWkxNDgwX3VzYl9uZWVwX2NiLCBpMTQ4MCwgZXBkLT5iSW50ZXJ2YWwpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGkxNDgwX3VzYi0+bmVlcF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGNhbm5vdCBzdWJtaXQgTkVFUCByZWFkOiAlZFxuIiwKKwkJCWNtZF9uYW1lLCByZXN1bHQpOworCQkJZ290byBlcnJvcl9zdWJtaXRfZXAxOworCX0KKwkvKiBOb3cgcG9zdCB0aGUgY29tbWFuZCBvbiBFUDAgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coCisJCWkxNDgwX3VzYi0+dXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKGkxNDgwX3VzYi0+dXNiX2RldiwgMCksCisJCVdBX0VYRUNfUkNfQ01ELAorCQlVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUywKKwkJMCwgaWZhY2Vfbm8sCisJCWNtZCwgY21kX3NpemUsCisJCTEwMCAvKiBGSVhNRTogdGhpcyBpcyB0b3RhbGx5IGFyYml0cmFyeSAqLyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICIlczogY29udHJvbCByZXF1ZXN0IGZhaWxlZDogJWRcbiIsCisJCQljbWRfbmFtZSwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9zdWJtaXRfZXAwOworCX0KKwlkX2ZuZW5kKDMsIGRldiwgIiglcCwgJXMsICV6dSkgPSAlZFxuIiwKKwkJaTE0ODAsIGNtZF9uYW1lLCBjbWRfc2l6ZSwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworCitlcnJvcl9zdWJtaXRfZXAwOgorCXVzYl9raWxsX3VyYihpMTQ4MF91c2ItPm5lZXBfdXJiKTsKK2Vycm9yX3N1Ym1pdF9lcDE6CisJZF9mbmVuZCgzLCBkZXYsICIoJXAsICVzLCAlenUpID0gJWRcbiIsCisJCWkxNDgwLCBjbWRfbmFtZSwgY21kX3NpemUsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKgorICogUHJvYmUgYSBpMTQ4MCBkZXZpY2UgZm9yIHVwbG9hZGluZyBmaXJtd2FyZS4KKyAqCisgKiBXZSBhdHRhY2ggb25seSB0byBpbnRlcmZhY2UgIzAsIHdoaWNoIGlzIHRoZSByYWRpbyBjb250cm9sIGludGVyZmFjZS4KKyAqLworc3RhdGljCitpbnQgaTE0ODBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpMTQ4MF91c2IgKmkxNDgwX3VzYjsKKwlzdHJ1Y3QgaTE0ODAgKmkxNDgwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpZmFjZS0+ZGV2OworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSAtRU5PREVWOworCWlmIChpZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKSB7CisJCWRldl9kYmcoZGV2LCAibm90IGF0dGFjaGluZyB0byBpZmFjZSAlZFxuIiwKKwkJCWlmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGlmYWNlLT5udW1fYWx0c2V0dGluZyA+IDEKKwkgICAgJiYgaW50ZXJmYWNlX3RvX3VzYmRldihpZmFjZSktPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IDB4YmFiZSkgeworCQkvKiBOZWVkIGFsdHNldHRpbmcgIzEgW0hXIFFVSVJLXSBvciBFUDEgd29uJ3Qgd29yayAqLworCQlyZXN1bHQgPSB1c2Jfc2V0X2ludGVyZmFjZShpbnRlcmZhY2VfdG9fdXNiZGV2KGlmYWNlKSwgMCwgMSk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZGV2X3dhcm4oZGV2LAorCQkJCSAiY2FuJ3Qgc2V0IGFsdHNldHRpbmcgMSBvbiBpZmFjZSAwOiAlZFxuIiwKKwkJCQkgcmVzdWx0KTsKKwl9CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCWkxNDgwX3VzYiA9IGt6YWxsb2Moc2l6ZW9mKCppMTQ4MF91c2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaTE0ODBfdXNiID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgaW5zdGFuY2VcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwlpMTQ4MF91c2JfaW5pdChpMTQ4MF91c2IpOworCisJaTE0ODAgPSAmaTE0ODBfdXNiLT5pMTQ4MDsKKwlpMTQ4MC0+YnVmX3NpemUgPSA1MTI7CisJaTE0ODAtPmNtZF9idWYgPSBrbWFsbG9jKDIgKiBpMTQ4MC0+YnVmX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChpMTQ4MC0+Y21kX2J1ZiA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHRyYW5zZmVyIGJ1ZmZlcnNcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2J1Zl9hbGxvYzsKKwl9CisJaTE0ODAtPmV2dF9idWYgPSBpMTQ4MC0+Y21kX2J1ZiArIGkxNDgwLT5idWZfc2l6ZTsKKworCXJlc3VsdCA9IGkxNDgwX3VzYl9jcmVhdGUoaTE0ODBfdXNiLCBpZmFjZSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgY3JlYXRlIGluc3RhbmNlOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9jcmVhdGU7CisJfQorCisJLyogc2V0dXAgdGhlIGZvcHMgYW5kIHVwbG9hZCB0aGUgZmlybWFyZSAqLworCWkxNDgwLT5wcmVfZndfbmFtZSA9ICJpMTQ4MC1wcmUtcGh5LTAuMC5iaW4iOworCWkxNDgwLT5tYWNfZndfbmFtZSA9ICJpMTQ4MC11c2ItMC4wLmJpbiI7CisJaTE0ODAtPm1hY19md19uYW1lX2RlcHJlY2F0ZSA9ICJwdGMtMC4wLmJpbiI7CisJaTE0ODAtPnBoeV9md19uYW1lID0gImkxNDgwLXBoeS0wLjAuYmluIjsKKwlpMTQ4MC0+ZGV2ID0gJmlmYWNlLT5kZXY7CisJaTE0ODAtPndyaXRlID0gaTE0ODBfdXNiX3dyaXRlOworCWkxNDgwLT5yZWFkID0gaTE0ODBfdXNiX3JlYWQ7CisJaTE0ODAtPnJjX3NldHVwID0gTlVMTDsKKwlpMTQ4MC0+d2FpdF9pbml0X2RvbmUgPSBpMTQ4MF91c2Jfd2FpdF9pbml0X2RvbmU7CisJaTE0ODAtPmNtZCA9IGkxNDgwX3VzYl9jbWQ7CisKKwlyZXN1bHQgPSBpMTQ4MF9md191cGxvYWQoJmkxNDgwX3VzYi0+aTE0ODApOwkvKiB0aGUgcmVhbCB0aGluZyAqLworCWlmIChyZXN1bHQgPj0gMCkgeworCQl1c2JfcmVzZXRfZGV2aWNlKGkxNDgwX3VzYi0+dXNiX2Rldik7CisJCXJlc3VsdCA9IC1FTk9ERVY7CS8qIHdlIGRvbid0IHdhbnQgdG8gYmluZCB0byB0aGUgaWZhY2UgKi8KKwl9CisJaTE0ODBfdXNiX2Rlc3Ryb3koaTE0ODBfdXNiKTsKK2Vycm9yX2NyZWF0ZToKKwlrZnJlZShpMTQ4MC0+Y21kX2J1Zik7CitlcnJvcl9idWZfYWxsb2M6CisJa2ZyZWUoaTE0ODBfdXNiKTsKK2Vycm9yOgorCXJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgaTE0ODBfVVNCX0RFVih2LCBwKQkJCQlcCit7CQkJCQkJCVwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQlcCisJCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0lORk8JCVwKKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywJXAorCS5pZFZlbmRvciA9ICh2KSwJCQkJXAorCS5pZFByb2R1Y3QgPSAocCksCQkJCVwKKwkuYkRldmljZUNsYXNzID0gMHhmZiwJCQkJXAorCS5iRGV2aWNlU3ViQ2xhc3MgPSAweGZmLAkJCVwKKwkuYkRldmljZVByb3RvY29sID0gMHhmZiwJCQlcCisJLmJJbnRlcmZhY2VDbGFzcyA9IDB4ZmYsCQkJXAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAweGZmLAkJCVwKKwkuYkludGVyZmFjZVByb3RvY29sID0gMHhmZiwJCQlcCit9CisKKworLyoqIFVTQiBkZXZpY2UgSUQncyB0aGF0IHdlIGhhbmRsZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGkxNDgwX3VzYl9pZF90YWJsZVtdID0geworCWkxNDgwX1VTQl9ERVYoMHg4MDg2LCAweGRmM2IpLAorCWkxNDgwX1VTQl9ERVYoMHgxNWE5LCAweDAwMDUpLAorCWkxNDgwX1VTQl9ERVYoMHgwN2QxLCAweDM4MDIpLAorCWkxNDgwX1VTQl9ERVYoMHgwNTBkLCAweDMwNWEpLAorCWkxNDgwX1VTQl9ERVYoMHgzNDk1LCAweDMwMDcpLAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpMTQ4MF91c2JfaWRfdGFibGUpOworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpMTQ4MF9kZnVfZHJpdmVyID0geworCS5uYW1lID0JCSJpMTQ4MC1kZnUtdXNiIiwKKwkuaWRfdGFibGUgPQlpMTQ4MF91c2JfaWRfdGFibGUsCisJLnByb2JlID0JaTE0ODBfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JTlVMTCwKK307CisKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGkxNDgwIERGVSBkcml2ZXIuCisgKgorICogV2UgYWxzbyBuZWVkIHRvIHJlZ2lzdGVyIG91ciBmdW5jdGlvbiBmb3IgZ3Vlc3NpbmcgZXZlbnQgc2l6ZXMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGkxNDgwX2RmdV9kcml2ZXJfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmkxNDgwX2RmdV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoaTE0ODBfZGZ1X2RyaXZlcl9pbml0KTsKKworCitzdGF0aWMgdm9pZCBfX2V4aXQgaTE0ODBfZGZ1X2RyaXZlcl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmkxNDgwX2RmdV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoaTE0ODBfZGZ1X2RyaXZlcl9leGl0KTsKKworCitNT0RVTEVfQVVUSE9SKCJJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBXaXJlbGVzcyBVV0IgTGluayAxNDgwIGZpcm13YXJlIHVwbG9hZGVyIGZvciBVU0IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLWVzdC5jIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODAtZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmOGM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLWVzdC5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBJbnRlbCBXaXJlbGVzcyBVV0IgTGluayAxNDgwCisgKiBFdmVudCBTaXplIHRhYmxlcyBmb3IgV2lyZWQgQWRhcHRvcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBkb2NzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlICJkZnUvaTE0ODAtZGZ1LmgiCisKKworLyoqIEV2ZW50IHNpemUgdGFibGUgZm9yIHdFdmVudHMgMHgwMFhYICovCitzdGF0aWMgc3RydWN0IHV3Yl9lc3RfZW50cnkgaTE0ODBfZXN0X2ZkMDBbXSA9IHsKKwkvKiBBbnlib2R5IGV4cGVjdGluZyB0aGlzIHJlc3BvbnNlIGhhcyB0byB1c2UKKwkgKiBuZWgtPmV4dHJhX3NpemUgdG8gc3BlY2lmeSB0aGUgcmVhbCBzaXplIHRoYXQgd2lsbAorCSAqIGNvbWUgYmFjay4gKi8KKwlbaTE0ODBfRVZUX0NPTkZJUk1dID0geyAuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaTE0ODBfZXZ0X2NvbmZpcm0pIH0sCisJW2kxNDgwX0NNRF9TRVRfSVBfTUFTXSA9IHsgLnNpemUgPSBzaXplb2Yoc3RydWN0IGkxNDgwX2V2dF9jb25maXJtKSB9LAorI2lmZGVmIGkxNDgwX1JDRUJfRVhURU5ERUQKKwlbMHgwOV0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpMTQ4MF9yY2ViKSwKKwkJLm9mZnNldCA9IDEgKyBvZmZzZXRvZihzdHJ1Y3QgaTE0ODBfcmNlYiwgd1BhcmFtTGVuZ3RoKSwKKwl9LAorI2VuZGlmCit9OworCisvKiogRXZlbnQgc2l6ZSB0YWJsZSBmb3Igd0V2ZW50cyAweDAxWFggKi8KK3N0YXRpYyBzdHJ1Y3QgdXdiX2VzdF9lbnRyeSBpMTQ4MF9lc3RfZmQwMVtdID0geworCVsweGZmICYgaTE0ODBfRVZUX1JNX0lOSVRfRE9ORV0gPSB7IC5zaXplID0gc2l6ZW9mKHN0cnVjdCBpMTQ4MF9yY2ViKSB9LAorCVsweGZmICYgaTE0ODBfRVZUX0RFVl9BRERdID0geyAuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaTE0ODBfcmNlYikgKyA5IH0sCisJWzB4ZmYgJiBpMTQ4MF9FVlRfREVWX1JNXSA9IHsgLnNpemUgPSBzaXplb2Yoc3RydWN0IGkxNDgwX3JjZWIpICsgOSB9LAorCVsweGZmICYgaTE0ODBfRVZUX0RFVl9JRF9DSEFOR0VdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaTE0ODBfcmNlYikgKyAyIH0sCit9OworCitzdGF0aWMgaW50IGkxNDgwX2VzdF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHV3Yl9lc3RfcmVnaXN0ZXIoaTE0ODBfQ0VUX1ZTMSwgMHgwMCwgMHg4MDg2LCAweDBjM2IsCisJCQkJICAgICAgaTE0ODBfZXN0X2ZkMDAsCisJCQkJICAgICAgQVJSQVlfU0laRShpMTQ4MF9lc3RfZmQwMCkpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgcmVnaXN0ZXIgRVNUIHRhYmxlIGZkMDA6ICVkXG4iLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlyZXN1bHQgPSB1d2JfZXN0X3JlZ2lzdGVyKGkxNDgwX0NFVF9WUzEsIDB4MDEsIDB4ODA4NiwgMHgwYzNiLAorCQkJCSAgaTE0ODBfZXN0X2ZkMDEsIEFSUkFZX1NJWkUoaTE0ODBfZXN0X2ZkMDEpKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHJlZ2lzdGVyIEVTVCB0YWJsZSBmZDAxOiAlZFxuIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChpMTQ4MF9lc3RfaW5pdCk7CisKK3N0YXRpYyB2b2lkIGkxNDgwX2VzdF9leGl0KHZvaWQpCit7CisJdXdiX2VzdF91bnJlZ2lzdGVyKGkxNDgwX0NFVF9WUzEsIDB4MDAsIDB4ODA4NiwgMHgwYzNiLAorCQkJICAgaTE0ODBfZXN0X2ZkMDAsIEFSUkFZX1NJWkUoaTE0ODBfZXN0X2ZkMDApKTsKKwl1d2JfZXN0X3VucmVnaXN0ZXIoaTE0ODBfQ0VUX1ZTMSwgMHgwMSwgMHg4MDg2LCAweDBjM2IsCisJCQkgICBpMTQ4MF9lc3RfZmQwMSwgQVJSQVlfU0laRShpMTQ4MF9lc3RfZmQwMSkpOworfQorbW9kdWxlX2V4aXQoaTE0ODBfZXN0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJpMTQ4MCdzIFZlbmRvciBTcGVjaWZpYyBFdmVudCBTaXplIFRhYmxlcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKioKKyAqIFVTQiBkZXZpY2UgSUQncyB0aGF0IHdlIGhhbmRsZQorICoKKyAqIFtzbyB3ZSBhcmUgbG9hZGVkIHdoZW4gdGhpcyBraW5kIGRldmljZSBpcyBjb25uZWN0ZWRdCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpMTQ4MF9lc3RfaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHg4MDg2LCAweGRmM2IpLCB9LAorCXsgVVNCX0RFVklDRSgweDgwODYsIDB4MGMzYiksIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpMTQ4MF9lc3RfaWRfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvaTE0ODAtd2xwLmggYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MC13bHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGE4YjBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODAtd2xwLmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBJbnRlbCAxNDgwIFdpcmVsZXNzIFVXQiBMaW5rCisgKiBXTFAgc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICovCisKKyNpZm5kZWYgX19pMTQ4MF93bHBfaF9fCisjZGVmaW5lIF9faTE0ODBfd2xwX2hfXworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdXdiLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qIE5ldyBzaW1wbGlmaWVkIGhlYWRlciBmb3JtYXQ/ICovCisjdW5kZWYgV0xQX0hEUl9GTVRfMiAJCS8qIEZJWE1FOiByZW5hbWUgKi8KKworLyoqCisgKiBWYWx1ZXMgb2YgdGhlIERlbGl2ZXJ5IElEICYgVHlwZSBmaWVsZCB3aGVuIFBDQSBvciBEUlAKKyAqCisgKiBUaGUgRGVsaXZlcnkgSUQgJiBUeXBlIGZpZWxkIGluIHRoZSBXTFAgVFggaGVhZGVyIGluZGljYXRlcyB3aGV0aGVyCisgKiB0aGUgZnJhbWUgaXMgUENBIG9yIERSUC4gVGhpcyBpcyBkb25lIGJhc2VkIG9uIHRoZSBoaWdoIGxldmVsIGJpdCBvZgorICogdGhpcyBmaWVsZC4KKyAqIFdlIHVzZSB0aGlzIGNvbnN0YW50IHRvIHRlc3QgaWYgdGhlIHRyYWZmaWMgaXMgUENBIG9yIERSUCBhcyBmb2xsb3dzOgorICogaWYgKHdscF90eF9oZHJfZGVsaXZlcnlfaWRfdHlwZSh3bHBfdHhfaGRyKSAmIFdMUF9EUlApCisgKiAJdGhpcyBpcyBEUlAgdHJhZmZpYworICogZWxzZQorICogCXRoaXMgaXMgUENBIHRyYWZmaWMKKyAqLworZW51bSBkZWxpdmVyX2lkX3R5cGVfYml0IHsKKwlXTFBfRFJQID0gOCwKK307CisKKy8qKgorICogV0xQIFRYIGhlYWRlcgorICoKKyAqIEluZGljYXRlcyBVV0IvV0xQLXNwZWNpZmljIHRyYW5zbWlzc2lvbiBwYXJhbWV0ZXJzIGZvciBhIG5ldHdvcmsKKyAqIHBhY2tldC4KKyAqLworc3RydWN0IHdscF90eF9oZHIgeworCS8qIGR3b3JkIDAgKi8KKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIGRzdGFkZHI7CisJdTggICAgICAgICAgICAgICAgICBrZXlfaW5kZXg7CisJdTggICAgICAgICAgICAgICAgICBtYWNfcGFyYW1zOworCS8qIGR3b3JkIDEgKi8KKwl1OCAgICAgICAgICAgICAgICAgIHBoeV9wYXJhbXM7CisjaWZuZGVmIFdMUF9IRFJfRk1UXzIKKwl1OCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOworCV9fbGUxNiAgICAgICAgICAgICAgb3VpMDE7ICAgICAgICAgICAgICAvKiBGSVhNRTogbm90IHNvIHN1cmUgaWYgX19sZTE2IG9yIHU4WzJdICovCisJLyogZHdvcmQgMiAqLworCXU4ICAgICAgICAgICAgICAgICAgb3VpMjsgICAgICAgICAgICAgICAvKiAgICAgICAgaWYgYWxsIExFLCBpdCBjb3VsZCBiZSBtZXJnZWQgKi8KKwlfX2xlMTYgICAgICAgICAgICAgIHByaWQ7CisjZW5kaWYKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHdscF90eF9oZHJfZGVsaXZlcnlfaWRfdHlwZShjb25zdCBzdHJ1Y3Qgd2xwX3R4X2hkciAqaGRyKQoreworCXJldHVybiBoZHItPm1hY19wYXJhbXMgJiAweDBmOworfQorCitzdGF0aWMgaW5saW5lIGludCB3bHBfdHhfaGRyX2Fja19wb2xpY3koY29uc3Qgc3RydWN0IHdscF90eF9oZHIgKmhkcikKK3sKKwlyZXR1cm4gKGhkci0+bWFjX3BhcmFtcyA+PiA0KSAmIDB4MDc7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdscF90eF9oZHJfcnRzX2N0cyhjb25zdCBzdHJ1Y3Qgd2xwX3R4X2hkciAqaGRyKQoreworCXJldHVybiAoaGRyLT5tYWNfcGFyYW1zID4+IDcpICYgMHgwMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdscF90eF9oZHJfc2V0X2RlbGl2ZXJ5X2lkX3R5cGUoc3RydWN0IHdscF90eF9oZHIgKmhkciwgaW50IGlkKQoreworCWhkci0+bWFjX3BhcmFtcyA9IChoZHItPm1hY19wYXJhbXMgJiB+MHgwZikgfCBpZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdscF90eF9oZHJfc2V0X2Fja19wb2xpY3koc3RydWN0IHdscF90eF9oZHIgKmhkciwKKwkJCQkJICAgICBlbnVtIHV3Yl9hY2tfcG9sIHBvbGljeSkKK3sKKwloZHItPm1hY19wYXJhbXMgPSAoaGRyLT5tYWNfcGFyYW1zICYgfjB4NzApIHwgKHBvbGljeSA8PCA0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdscF90eF9oZHJfc2V0X3J0c19jdHMoc3RydWN0IHdscF90eF9oZHIgKmhkciwgaW50IHJ0c19jdHMpCit7CisJaGRyLT5tYWNfcGFyYW1zID0gKGhkci0+bWFjX3BhcmFtcyAmIH4weDgwKSB8IChydHNfY3RzIDw8IDcpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gdXdiX3BoeV9yYXRlIHdscF90eF9oZHJfcGh5X3JhdGUoY29uc3Qgc3RydWN0IHdscF90eF9oZHIgKmhkcikKK3sKKwlyZXR1cm4gaGRyLT5waHlfcGFyYW1zICYgMHgwZjsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2xwX3R4X2hkcl90eF9wb3dlcihjb25zdCBzdHJ1Y3Qgd2xwX3R4X2hkciAqaGRyKQoreworCXJldHVybiAoaGRyLT5waHlfcGFyYW1zID4+IDQpICYgMHgwZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdscF90eF9oZHJfc2V0X3BoeV9yYXRlKHN0cnVjdCB3bHBfdHhfaGRyICpoZHIsIGVudW0gdXdiX3BoeV9yYXRlIHJhdGUpCit7CisJaGRyLT5waHlfcGFyYW1zID0gKGhkci0+cGh5X3BhcmFtcyAmIH4weDBmKSB8IHJhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bHBfdHhfaGRyX3NldF90eF9wb3dlcihzdHJ1Y3Qgd2xwX3R4X2hkciAqaGRyLCBpbnQgcHdyKQoreworCWhkci0+cGh5X3BhcmFtcyA9IChoZHItPnBoeV9wYXJhbXMgJiB+MHhmMCkgfCAocHdyIDw8IDQpOworfQorCisKKy8qKgorICogV0xQIFJYIGhlYWRlcgorICoKKyAqIFByb3ZpZGVzIFVXQi9XTFAtc3BlY2lmaWMgdHJhbnNtaXNzaW9uIGRhdGEgZm9yIGEgcmVjZWl2ZWQKKyAqIG5ldHdvcmsgcGFja2V0LgorICovCitzdHJ1Y3Qgd2xwX3J4X2hkciB7CisJLyogZHdvcmQgMCAqLworCXN0cnVjdCB1d2JfZGV2X2FkZHIgZHN0YWRkcjsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIHNyY2FkZHI7CisJLyogZHdvcmQgMSAqLworCXU4IAkJICAgIExRSTsKKwlzOAkJICAgIFJTU0k7CisJdTgJCSAgICByZXNlcnZlZDM7CisjaWZuZGVmIFdMUF9IRFJfRk1UXzIKKwl1OCAJCSAgICBvdWkwOworCS8qIGR3b3JkIDIgKi8KKwlfX2xlMTYJCSAgICBvdWkxMjsKKwlfX2xlMTYJCSAgICBwcmlkOworI2VuZGlmCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qKiBVc2VyIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciBXTFAgKi8KK3N0cnVjdCB3bHBfb3B0aW9ucyB7CisJc3RydWN0IG11dGV4IG11dGV4OyAvKiBhY2Nlc3MgdG8gdXNlciBjb25maWd1cmFibGUgb3B0aW9ucyovCisJc3RydWN0IHdscF90eF9oZHIgZGVmX3R4X2hkcjsJLyogZGVmYXVsdCB0eCBoZHIgKi8KKwl1OCBwY2FfYmFzZV9wcmlvcml0eTsKKwl1OCBid19hbGxvYzsgLyppbmRleCBpbnRvIGJ3X2FsbG9jc1tdIGZvciBQQ0EvRFJQIHJlc2VydmF0aW9ucyovCit9OworCisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgd2xwX29wdGlvbnNfaW5pdChzdHJ1Y3Qgd2xwX29wdGlvbnMgKm9wdGlvbnMpCit7CisJbXV0ZXhfaW5pdCgmb3B0aW9ucy0+bXV0ZXgpOworCXdscF90eF9oZHJfc2V0X2Fja19wb2xpY3koJm9wdGlvbnMtPmRlZl90eF9oZHIsIFVXQl9BQ0tfSU5NKTsKKwl3bHBfdHhfaGRyX3NldF9ydHNfY3RzKCZvcHRpb25zLT5kZWZfdHhfaGRyLCAxKTsKKwkvKiBGSVhNRTogZGVmYXVsdCB0byBwaHkgY2FwcyAqLworCXdscF90eF9oZHJfc2V0X3BoeV9yYXRlKCZvcHRpb25zLT5kZWZfdHhfaGRyLCBVV0JfUEhZX1JBVEVfNDgwKTsKKyNpZm5kZWYgV0xQX0hEUl9GTVRfMgorCW9wdGlvbnMtPmRlZl90eF9oZHIucHJpZCA9IGNwdV90b19sZTE2KDB4MDAwMCk7CisjZW5kaWYKK30KKworCisvKiBzeXNmcyBoZWxwZXJzICovCisKK2V4dGVybiBzc2l6ZV90IHV3Yl9wY2FfYmFzZV9wcmlvcml0eV9zdG9yZShzdHJ1Y3Qgd2xwX29wdGlvbnMgKiwKKwkJCQkJICAgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3QgdXdiX3BjYV9iYXNlX3ByaW9yaXR5X3Nob3coY29uc3Qgc3RydWN0IHdscF9vcHRpb25zICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB1d2JfYndfYWxsb2Nfc3RvcmUoc3RydWN0IHdscF9vcHRpb25zICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IHV3Yl9id19hbGxvY19zaG93KGNvbnN0IHN0cnVjdCB3bHBfb3B0aW9ucyAqLCBjaGFyICopOworZXh0ZXJuIHNzaXplX3QgdXdiX2Fja19wb2xpY3lfc3RvcmUoc3RydWN0IHdscF9vcHRpb25zICosCisJCQkJICAgIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IHV3Yl9hY2tfcG9saWN5X3Nob3coY29uc3Qgc3RydWN0IHdscF9vcHRpb25zICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB1d2JfcnRzX2N0c19zdG9yZShzdHJ1Y3Qgd2xwX29wdGlvbnMgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3QgdXdiX3J0c19jdHNfc2hvdyhjb25zdCBzdHJ1Y3Qgd2xwX29wdGlvbnMgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHV3Yl9waHlfcmF0ZV9zdG9yZShzdHJ1Y3Qgd2xwX29wdGlvbnMgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3QgdXdiX3BoeV9yYXRlX3Nob3coY29uc3Qgc3RydWN0IHdscF9vcHRpb25zICosIGNoYXIgKik7CisKKworLyoqIFNpbXBsZSBiYW5kd2lkdGggYWxsb2NhdGlvbiAodGVtcG9yYXJ5IGFuZCB0b28gc2ltcGxlKSAqLworc3RydWN0IHdscF9id19hbGxvY3MgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHsKKwkJdTggbWFzaywgc3RyZWFtOworCX0gdHgsIHJ4OworfTsKKworCisjZW5kaWYgLyogI2lmbmRlZiBfX2kxNDgwX3dscF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvTWFrZWZpbGUgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjcwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorb2JqLSQoQ09ORklHX1VXQl9JMTQ4MFVfV0xQKSArPSBpMTQ4MHUtd2xwLm8KKworaTE0ODB1LXdscC1vYmpzIDo9CVwKKwlsYy5vCQlcCisJbmV0ZGV2Lm8JXAorCXJ4Lm8JCVwKKwlzeXNmcy5vCQlcCisJdHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC9pMTQ4MHUtd2xwLmggYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL2kxNDgwdS13bHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjFiMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC9pMTQ4MHUtd2xwLmgKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBJbnRlbCAxNDgwIFdpcmVsZXNzIFVXQiBMaW5rIFVTQgorICogSGVhZGVyIGZvcm1hdHMsIGNvbnN0YW50cywgZ2VuZXJhbCBpbnRlcm5hbCBpbnRlcmZhY2VzCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogVGhpcyBpcyBub3QgYW4gc3RhbmRhcmQgaW50ZXJmYWNlLgorICoKKyAqIEZJWE1FOiBkb2NzCisgKgorICogaTE0ODB1LXdscCBpcyBwcmV0dHkgc2ltcGxlOiB0d28gZW5kcG9pbnRzLCBvbmUgZm9yIHR4LCBvbmUgZm9yCisgKiByeC4gcnggaXMgcG9sbGVkLiBOZXR3b3JrIHBhY2tldHMgKGV0aGVybmV0LCB3aGF0ZXZlcikgYXJlIHdyYXBwZWQKKyAqIGluIGkxNDgwIFRYIG9yIFJYIGhlYWRlcnMgKGZvciBzZW5kaW5nIG92ZXIgdGhlIGFpciksIGFuZCB0aGVzZQorICogcGFja2V0cyBhcmUgd3JhcHBlZCBpbiBVTlREIGhlYWRlcnMgKGZvciBzZW5kaW5nIHRvIHRoZSBXTFAgVVdCCisgKiBjb250cm9sbGVyKS4KKyAqCisgKiBVTlREIHBhY2tldHMgKFVOVEQgaGRyICsgaTE0ODAgaGRyICsgbmV0d29yayBwYWNrZXQpIHBhY2tldHMKKyAqIGNhbm5vdCBiZSBiaWdnZXIgdGhhbiBpMTQ4MHVfTUFYX0ZSR19TSVpFLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlCisgKiBpMTQ4MCBwYWNrZXQgaXMgYnJva2VuIGluIGNodW5rcy9wYWNrZXRzOgorICoKKyAqIFVOVEQtMXN0LmhkciArIGkxNDgwLmhkciArIHBheWxvYWQKKyAqIFVOVEQtbmV4dC5oZHIgKyBwYXlsb2FkCisgKiAuLi4KKyAqIFVOVEQtbGFzdC5oZHIgKyBwYXlsb2FkCisgKgorICogc28gdGhhdCBlYWNoIHBhY2tldCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRoYW4gaTE0ODB1X01BWF9GUkdfU0laRS4KKyAqCisgKiBBbGwgSFcgc3RydWN0dXJlcyBhbmQgYml0bWFwcyBhcmUgbGl0dGxlIGVuZGlhbiwgc28gd2UgbmVlZCB0byBwbGF5CisgKiB1Z2x5IHRyaWNrcyB3aGVuIGRlZmluaW5nIGJpdGZpZWxkcy4gSG9waW5nIGZvciB0aGUgZGF5IEdDQworICogaW1wbGVtZW50cyBfX2F0dHJpYnV0ZV9fKChlbmRpYW4oMTIzNCkpKS4KKyAqCisgKiBGSVhNRTogUk9BRE1BUCB0byB0aGUgd2hvbGUgaW1wbGVtZW50YXRpb24KKyAqLworCisjaWZuZGVmIF9faTE0ODB1X3dscF9oX18KKyNkZWZpbmUgX19pMTQ4MHVfd2xwX2hfXworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXdiLmg+CQkvKiBzdHJ1Y3QgdXdiX3JjLCBzdHJ1Y3QgdXdiX25vdGlmc19oYW5kbGVyICovCisjaW5jbHVkZSA8bGludXgvd2xwLmg+CisjaW5jbHVkZSAiLi4vaTE0ODAtd2xwLmgiCisKKyN1bmRlZiBpMTQ4MHVfRkxPV19DT05UUk9MCS8qIEVuYWJsZSBmbG93IGNvbnRyb2wgY29kZSAqLworCisvKioKKyAqIEJhc2ljIGZsb3cgY29udHJvbAorICovCitlbnVtIHsKKwlpMTQ4MHVfVFhfSU5GTElHSFRfTUFYID0gMTAwMCwKKwlpMTQ4MHVfVFhfSU5GTElHSFRfVEhSRVNIT0xEID0gMTAwLAorfTsKKworLyoqIE1heGltdW0gc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIHRoYXQgd2UgY2FuIHR4L3J4ICovCitlbnVtIHsKKwkvKiBNYXhpbXVtIHBhY2tldCBzaXplIGNvbXB1dGVkIGFzIGZvbGxvd3M6IG1heCBVTlREIGhlYWRlciAoOCkgKworCSAqIGkxNDgwIFJYIGhlYWRlciAoOCkgKyBtYXggRXRoZXJuZXQgaGVhZGVyIGFuZCBwYXlsb2FkICg0MDk2KSArCisJICogUGFkZGluZyBhZGRlZCBieSBza2JfcmVzZXJ2ZSAoMikgdG8gbWFrZSBwb3N0IEV0aGVybmV0IHBheWxvYWQKKwkgKiBzdGFydCBvbiAxNiBieXRlIGJvdW5kYXJ5Ki8KKwlpMTQ4MHVfTUFYX1JYX1BLVF9TSVpFID0gNDExNCwKKwlpMTQ4MHVfTUFYX0ZSR19TSVpFID0gNTEyLAorCWkxNDgwdV9SWF9CVUZTID0gOSwKK307CisKKworLyoqCisgKiBVTlREIHBhY2tldCB0eXBlCisgKgorICogV2UgbmVlZCB0byBmcmFnbWVudCBhbnkgcGF5bG9hZCB3aG9zZSBVTlREIHBhY2tldCBpcyBnb2luZyB0byBiZQorICogYmlnZ2VyIHRoYW4gaTE0ODB1X01BWF9GUkdfU0laRS4KKyAqLworZW51bSBpMTQ4MHVfcGt0X3R5cGUgeworCWkxNDgwdV9QS1RfRlJBR18xU1QgPSAweDEsCisJaTE0ODB1X1BLVF9GUkFHX05YVCA9IDB4MCwKKwlpMTQ4MHVfUEtUX0ZSQUdfTFNUID0gMHgyLAorCWkxNDgwdV9QS1RfRlJBR19DTVAgPSAweDMKK307CitlbnVtIHsKKwlpMTQ4MHVfUEtUX05PTkUgPSAweDQsCit9OworCisvKiogVVNCIE5ldHdvcmsgVHJhbnNmZXIgRGVzY3JpcHRvciAtIGNvbW1vbiAqLworc3RydWN0IHVudGRfaGRyIHsKKwl1OCAgICAgdHlwZTsKKwlfX2xlMTYgbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSBlbnVtIGkxNDgwdV9wa3RfdHlwZSB1bnRkX2hkcl90eXBlKGNvbnN0IHN0cnVjdCB1bnRkX2hkciAqaGRyKQoreworCXJldHVybiBoZHItPnR5cGUgJiAweDAzOworfQorCitzdGF0aWMgaW5saW5lIGludCB1bnRkX2hkcl9yeF90eChjb25zdCBzdHJ1Y3QgdW50ZF9oZHIgKmhkcikKK3sKKwlyZXR1cm4gKGhkci0+dHlwZSA+PiAyKSAmIDB4MDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnRkX2hkcl9zZXRfdHlwZShzdHJ1Y3QgdW50ZF9oZHIgKmhkciwgZW51bSBpMTQ4MHVfcGt0X3R5cGUgdHlwZSkKK3sKKwloZHItPnR5cGUgPSAoaGRyLT50eXBlICYgfjB4MDMpIHwgdHlwZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVudGRfaGRyX3NldF9yeF90eChzdHJ1Y3QgdW50ZF9oZHIgKmhkciwgaW50IHJ4X3R4KQoreworCWhkci0+dHlwZSA9IChoZHItPnR5cGUgJiB+MHgwNCkgfCAocnhfdHggPDwgMik7Cit9CisKKworLyoqCisgKiBVU0IgTmV0d29yayBUcmFuc2ZlciBEZXNjcmlwdG9yIC0gQ29tcGxldGUgUGFja2V0CisgKgorICogVGhpcyBpcyBmb3IgYSBwYWNrZXQgdGhhdCBpcyBzbWFsbGVyIChoZWFkZXIgKyBwYXlsb2FkKSB0aGFuCisgKiBpMTQ4MHVfTUFYX0ZSR19TSVpFLgorICoKKyAqIEBoZHIudG90YWxfbGVuIGlzIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkOyB0aGUgcGF5bG9hZCBkb2Vzbid0CisgKiBjb3VudCB0aGlzIGhlYWRlciBub3IgdGhlIHBhZGRpbmcsIGJ1dCBpbmNsdWRlcyB0aGUgc2l6ZSBvZiBpMTQ4MAorICogaGVhZGVyLgorICovCitzdHJ1Y3QgdW50ZF9oZHJfY21wIHsKKwlzdHJ1Y3QgdW50ZF9oZHIJaGRyOworCXU4CQlwYWRkaW5nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKioKKyAqIFVTQiBOZXR3b3JrIFRyYW5zZmVyIERlc2NyaXB0b3IgLSBGaXJzdCBmcmFnbWVudAorICoKKyAqIEBoZHIubGVuIGlzIHRoZSBzaXplIG9mIHRoZSAqd2hvbGUgcGFja2V0KiAoZXhjbHVkaW5nIFVOVEQKKyAqIGhlYWRlcnMpOyBAZnJhZ21lbnRfbGVuIGlzIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIChleGNsdWRpbmcgVU5URAorICogaGVhZGVycywgYnV0IGluY2x1ZGluZyBpMTQ4MCBoZWFkZXJzKS4KKyAqLworc3RydWN0IHVudGRfaGRyXzFzdCB7CisJc3RydWN0IHVudGRfaGRyCWhkcjsKKwlfX2xlMTYJCWZyYWdtZW50X2xlbjsKKwl1OAkJcGFkZGluZ1szXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqCisgKiBVU0IgTmV0d29yayBUcmFuc2ZlciBEZXNjcmlwdG9yIC0gTmV4dCAvIExhc3QgW1Jlc3RdCisgKgorICogQGhkci5sZW4gaXMgdGhlIHNpemUgb2YgdGhlIHBheWxvYWQsIG5vdCBpbmNsdWRpbmcgaGVhZHJzLgorICovCitzdHJ1Y3QgdW50ZF9oZHJfcnN0IHsKKwlzdHJ1Y3QgdW50ZF9oZHIJaGRyOworCXU4CQlwYWRkaW5nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKioKKyAqIFRyYW5zbWlzc2lvbiBjb250ZXh0CisgKgorICogV3JhcHMgYWxsIHRoZSBzdHVmZiBuZWVkZWQgdG8gdHJhY2sgYSBwZW5kaW5nL2FjdGl2ZSB0eAorICogb3BlcmF0aW9uLgorICovCitzdHJ1Y3QgaTE0ODB1X3R4IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsKKwlzdHJ1Y3QgaTE0ODB1ICppMTQ4MHU7CisJc3RydWN0IHVyYiAqdXJiOworCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgd2xwX3R4X2hkciAqd2xwX3R4X2hkcjsKKworCXZvaWQgKmJ1ZjsJLyogaWYgTlVMTCwgbm8gbmV3IGJ1ZiB3YXMgdXNlZCAqLworCXNpemVfdCBidWZfc2l6ZTsKK307CisKKy8qKgorICogQmFzaWMgZmxvdyBjb250cm9sCisgKgorICogV2UgbWFpbnRhaW4gYSBiYXNpYyBmbG93IGNvbnRyb2wgY291bnRlci4gImNvdW50IiBob3cgbWFueSBUWCBVUkJzIGFyZQorICogb3V0c3RhbmRpbmcuIE9ubHkgYWxsb3cgIm1heCIKKyAqIFRYIFVSQnMgdG8gYmUgb3V0c3RhbmRpbmcuIElmIHRoaXMgdmFsdWUgaXMgcmVhY2hlZCB0aGUgcXVldWUgd2lsbCBiZQorICogc3RvcHBlZC4gVGhlIHF1ZXVlIHdpbGwgYmUgcmVzdGFydGVkIHdoZW4gdGhlcmUgYXJlCisgKiAidGhyZXNob2xkIiBVUkJzIG91dHN0YW5kaW5nLgorICogTWFpbnRhaW4gYSBjb3VudGVyIG9mIGhvdyBtYW55IHRpbWUgdGhlIFRYIHF1ZXVlIG5lZWRlZCB0byBiZSByZXN0YXJ0ZWQKKyAqIGR1ZSB0byB0aGUgIm1heCIgYmVpbmcgZXhjZWVkZWQgYW5kIHRoZSAidGhyZXNob2xkIiByZWFjaGVkIGFnYWluLiBUaGUKKyAqIHRpbWVzdGFtcCAicmVzdGFydF90cyIgaXMgdG8ga2VlcCB0cmFjayBmcm9tIHdoZW4gdGhlIGNvdW50ZXIgd2FzIGxhc3QKKyAqIHF1ZXJpZWQgKHNlZSBzeXNmcyBoYW5kbGluZyBvZiBmaWxlIHdscF90eF9pbmZsaWdodCkuCisgKi8KK3N0cnVjdCBpMTQ4MHVfdHhfaW5mbGlnaHQgeworCWF0b21pY190IGNvdW50OworCXVuc2lnbmVkIGxvbmcgbWF4OworCXVuc2lnbmVkIGxvbmcgdGhyZXNob2xkOworCXVuc2lnbmVkIGxvbmcgcmVzdGFydF90czsKKwlhdG9taWNfdCByZXN0YXJ0X2NvdW50OworfTsKKworLyoqCisgKiBJbnN0YW5jZSBvZiBhIGkxNDgwdSBXTFAgaW50ZXJmYWNlCisgKgorICogS2VlcHMgcmVmZXJlbmNlcyB0byB0aGUgVVNCIGRldmljZSB0aGF0IHdyYXBzIGl0LCBhcyB3ZWxsIGFzIGl0J3MKKyAqIGludGVyZmFjZSBhbmQgYXNzb2NpYXRlZCBVV0IgaG9zdCBjb250cm9sbGVyLiBBcyB3ZWxsLCBpdCBhbHNvCisgKiBrZWVwcyBhIGxpbmsgdG8gdGhlIG5ldGRldmljZSBmb3IgaW50ZWdyYXRpb24gaW50byB0aGUgbmV0d29ya2luZworICogc3RhY2suCisgKiBXZSBtYWludGlhbiBzZXBhcmF0ZSBlcnJvciBoaXN0b3J5IGZvciB0aGUgdHggYW5kIHJ4IGVuZHBvaW50cyBiZWNhdXNlCisgKiB0aGUgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmVseSBvbiBsb2NraW5nIC0gaGF2aW5nIG9uZSBzaGFyZWQKKyAqIHN0cnVjdHVyZSBiZXR3ZWVuIGVuZHBvaW50cyBtYXkgY2F1c2UgcHJvYmxlbXMuIEFkZGluZyBsb2NraW5nIHRvIHRoZQorICogaW1wbGVtZW50YXRpb24gd2lsbCBoYXZlIGhpZ2hlciBjb3N0IHRoYW4gYWRkaW5nIGEgc2VwYXJhdGUgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgaTE0ODB1IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2lmYWNlOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OworCisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCisJLyogUlggY29udGV4dCBoYW5kbGluZyAqLworCXN0cnVjdCBza19idWZmICpyeF9za2I7CisJc3RydWN0IHV3Yl9kZXZfYWRkciByeF9zcmNhZGRyOworCXNpemVfdCByeF91bnRkX3BrdF9zaXplOworCXN0cnVjdCBpMTQ4MHVfcnhfYnVmIHsKKwkJc3RydWN0IGkxNDgwdSAqaTE0ODB1OwkvKiBiYWNrIHBvaW50ZXIgKi8KKwkJc3RydWN0IHVyYiAqdXJiOworCQlzdHJ1Y3Qgc2tfYnVmZiAqZGF0YTsJLyogaTE0ODB1X01BWF9SWF9QS1RfU0laRSBlYWNoICovCisJfSByeF9idWZbaTE0ODB1X1JYX0JVRlNdOwkvKiBOIGJ1ZnMgKi8KKworCXNwaW5sb2NrX3QgdHhfbGlzdF9sb2NrOwkvKiBUWCBjb250ZXh0ICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OworCXU4IHR4X3N0cmVhbTsKKworCXN0cnVjdCBzdGF0cyBscWVfc3RhdHMsIHJzc2lfc3RhdHM7CS8qIHJhZGlvIHN0YXRpc3RpY3MgKi8KKworCS8qIE9wdGlvbnMgd2UgY2FuIHNldCBmcm9tIHN5c2ZzICovCisJc3RydWN0IHdscF9vcHRpb25zIG9wdGlvbnM7CisJc3RydWN0IHV3Yl9ub3RpZnNfaGFuZGxlciB1d2Jfbm90aWZzX2hhbmRsZXI7CisJc3RydWN0IGVkYyB0eF9lcnJvcnM7CisJc3RydWN0IGVkYyByeF9lcnJvcnM7CisJc3RydWN0IHdscCB3bHA7CisjaWZkZWYgaTE0ODB1X0ZMT1dfQ09OVFJPTAorCXN0cnVjdCB1cmIgKm5vdGlmX3VyYjsKKwlzdHJ1Y3QgZWRjIG5vdGlmX2VkYzsJCS8qIGVycm9yIGRlbnNpdHkgY291bnRlciAqLworCXU4IG5vdGlmX2J1ZmZlclsxXTsKKyNlbmRpZgorCXN0cnVjdCBpMTQ4MHVfdHhfaW5mbGlnaHQgdHhfaW5mbGlnaHQ7Cit9OworCisvKiBJbnRlcm5hbCBpbnRlcmZhY2VzICovCitleHRlcm4gdm9pZCBpMTQ4MHVfcnhfY2Ioc3RydWN0IHVyYiAqdXJiKTsKK2V4dGVybiBpbnQgaTE0ODB1X3J4X3NldHVwKHN0cnVjdCBpMTQ4MHUgKik7CitleHRlcm4gdm9pZCBpMTQ4MHVfcnhfcmVsZWFzZShzdHJ1Y3QgaTE0ODB1ICopOworZXh0ZXJuIHZvaWQgaTE0ODB1X3R4X3JlbGVhc2Uoc3RydWN0IGkxNDgwdSAqKTsKK2V4dGVybiBpbnQgaTE0ODB1X3htaXRfZnJhbWUoc3RydWN0IHdscCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJICAgICBzdHJ1Y3QgdXdiX2Rldl9hZGRyICopOworZXh0ZXJuIHZvaWQgaTE0ODB1X3N0b3BfcXVldWUoc3RydWN0IHdscCAqKTsKK2V4dGVybiB2b2lkIGkxNDgwdV9zdGFydF9xdWV1ZShzdHJ1Y3Qgd2xwICopOworZXh0ZXJuIGludCBpMTQ4MHVfc3lzZnNfc2V0dXAoc3RydWN0IGkxNDgwdSAqKTsKK2V4dGVybiB2b2lkIGkxNDgwdV9zeXNmc19yZWxlYXNlKHN0cnVjdCBpMTQ4MHUgKik7CisKKy8qIG5ldGRldiBpbnRlcmZhY2UgKi8KK2V4dGVybiBpbnQgaTE0ODB1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gaW50IGkxNDgwdV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIGludCBpMTQ4MHVfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgaTE0ODB1X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gaW50IGkxNDgwdV9zZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZm1hcCAqKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaTE0ODB1X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiBpbnQgaTE0ODB1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKK2V4dGVybiB2b2lkIGkxNDgwdV91d2Jfbm90aWZzX2NiKHZvaWQgKiwgc3RydWN0IHV3Yl9kZXYgKiwgZW51bSB1d2Jfbm90aWZzKTsKKworLyogYmFuZHdpZHRoIGFsbG9jYXRpb24gY2FsbGJhY2sgKi8KK2V4dGVybiB2b2lkICBpMTQ4MHVfYndfYWxsb2NfY2Ioc3RydWN0IHV3Yl9yc3YgKik7CisKKy8qIFN5cyBGUyAqLworZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTE0ODB1X3dscF9hdHRyX2dyb3VwOworCisjZW5kaWYgLyogI2lmbmRlZiBfX2kxNDgwdV93bHBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL2xjLmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL2xjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3ZDYwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvbGMuYwpAQCAtMCwwICsxLDQyMSBAQAorLyoKKyAqIFdVU0IgV2lyZSBBZGFwdGVyOiBXTFAgaW50ZXJmYWNlCisgKiBEcml2ZXIgZm9yIHRoZSBMaW51eCBOZXR3b3JrIHN0YWNrLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogRklYTUU6IGRvY3MKKyAqCisgKiBUaGlzIGltcGxlbWVudHMgYSB2ZXJ5IHNpbXBsZSBuZXR3b3JrIGRyaXZlciBmb3IgdGhlIFdMUCBVU0IKKyAqIGRldmljZSB0aGF0IGlzIGFzc29jaWF0ZWQgdG8gYSBVV0IgKFVsdHJhIFdpZGUgQmFuZCkgaG9zdC4KKyAqCisgKiBUaGlzIGlzIHNlZW4gYXMgYW4gaW50ZXJmYWNlIG9mIGEgY29tcG9zaXRlIGRldmljZS4gT25jZSB0aGUgVVdCCisgKiBob3N0IGhhcyBhbiBhc3NvY2lhdGlvbiB0byBhbm90aGVyIFdMUCBjYXBhYmxlIGRldmljZSwgdGhlCisgKiBuZXR3b3JraW5nIGludGVyZmFjZSAoYWthIFdMUCkgY2FuIHN0YXJ0IHRvIHNlbmQgcGFja2V0cyBiYWNrIGFuZAorICogZm9ydGguCisgKgorICogTGltaXRhdGlvbnM6CisgKgorICogIC0gSGFuZCBjcmFua2VkOyBjYW4ndCBpZnVwIHRoZSBpbnRlcmZhY2UgdW50aWwgdGhlcmUgaXMgYW4gYXNzb2NpYXRpb24KKyAqCisgKiAgLSBCVyBhbGxvY2F0aW9uIHZlcnkgc2ltcGxpc3RpYyBbc2VlIGkxNDgwdV9tYXNfc2V0KCkgYW5kIGNhbGxlZXNdLgorICoKKyAqCisgKiBST0FETUFQOgorICoKKyAqICAgRU5UUlkgUE9JTlRTIChkcml2ZXIgbW9kZWwpOgorICoKKyAqICAgICBpMTQ4MHVfZHJpdmVyX3tleGl0LGluaXR9KCk6IGluaXRpYWxpemF0aW9uIG9mIHRoZSBkcml2ZXIuCisgKgorICogICAgIGkxNDgwdV9wcm9iZSgpOiBjYWxsZWQgYnkgdGhlIGRyaXZlciBjb2RlIHdoZW4gYSBkZXZpY2UKKyAqICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgJ2kxNDgwdV9pZF90YWJsZScgaXMgY29ubmVjdGVkLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvY3MgYSBuZXRkZXYgaW5zdGFuY2UsIGluaXRzIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgaTE0ODB1X2FkZCgpLCB0aGVuIHJlZ2lzdGVyc19uZXRkZXYoKS4KKyAqICAgICAgICAgaTE0ODB1X2luaXQoKQorICogICAgICAgICBpMTQ4MHVfYWRkKCkKKyAqCisgKiAgICAgaTE0ODB1X2Rpc2Nvbm5lY3QoKTogZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZC9tb2R1bGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBiZWluZyByZW1vdmVkLgorICogICAgICAgICBpMTQ4MHVfcm0oKQorICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisjaW5jbHVkZSAiaTE0ODB1LXdscC5oIgorCisKKworc3RhdGljIGlubGluZQordm9pZCBpMTQ4MHVfaW5pdChzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUpCit7CisJLyogbm90aGluZyBzbyBmYXIuLi4gZG9lc24ndCBpdCBzdWNrPyAqLworCXNwaW5fbG9ja19pbml0KCZpMTQ4MHUtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZpMTQ4MHUtPnR4X2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZpMTQ4MHUtPnR4X2xpc3RfbG9jayk7CisJd2xwX29wdGlvbnNfaW5pdCgmaTE0ODB1LT5vcHRpb25zKTsKKwllZGNfaW5pdCgmaTE0ODB1LT50eF9lcnJvcnMpOworCWVkY19pbml0KCZpMTQ4MHUtPnJ4X2Vycm9ycyk7CisjaWZkZWYgaTE0ODB1X0ZMT1dfQ09OVFJPTAorCWVkY19pbml0KCZpMTQ4MHUtPm5vdGlmX2VkYyk7CisjZW5kaWYKKwlzdGF0c19pbml0KCZpMTQ4MHUtPmxxZV9zdGF0cyk7CisJc3RhdHNfaW5pdCgmaTE0ODB1LT5yc3NpX3N0YXRzKTsKKwl3bHBfaW5pdCgmaTE0ODB1LT53bHApOworfQorCisvKioKKyAqIEZpbGwgV0xQIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgc3RydWN0dXJlIHdpbGwgY29udGFpbiBhIGZldyBjaGFyYWN0ZXIgYXJyYXlzLCBlYWNoIGVuZGluZyB3aXRoIGEKKyAqIG51bGwgdGVybWluYXRlZCBzdHJpbmcuIEVhY2ggc3RyaW5nIGhhcyB0byBmaXQgKGV4Y2x1ZGluZyB0ZXJtaW5hdGluZworICogY2hhcmFjdGVyKSBpbnRvIGEgc3BlY2lmaWVkIHJhbmdlIG9idGFpbmVkIGZyb20gdGhlIFdMUCBzdWJzdGFjay4KKyAqCisgKiBJdCBpcyBzdGlsbCBub3QgY2xlYXIgZXhhY3RseSBob3cgdGhpcyBkZXZpY2UgaW5mb3JtYXRpb24gc2hvdWxkIGJlCisgKiBvYnRhaW5lZC4gVW50aWwgd2UgZmluZCBvdXQgd2UgdXNlIHRoZSBVU0IgZGV2aWNlIGRlc2NyaXB0b3IgYXMgYmFja3VwLCBzb21lCisgKiBpbmZvcm1hdGlvbiBlbGVtZW50cyBoYXZlIGludHVpdGl2ZSBtYXBwaW5ncywgb3RoZXIgbm90LgorICovCitzdGF0aWMKK3ZvaWQgaTE0ODB1X2ZpbGxfZGV2aWNlX2luZm8oc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX2RldmljZV9pbmZvICpkZXZfaW5mbykKK3sKKwlzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUgPSBjb250YWluZXJfb2Yod2xwLCBzdHJ1Y3QgaTE0ODB1LCB3bHApOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaTE0ODB1LT51c2JfZGV2OworCS8qIFRyZWF0IGRldmljZSBuYW1lIGFuZCBtb2RlbCBuYW1lIHRoZSBzYW1lICovCisJaWYgKHVzYl9kZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QpIHsKKwkJdXNiX3N0cmluZyh1c2JfZGV2LCB1c2JfZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0LAorCQkJICAgZGV2X2luZm8tPm5hbWUsIHNpemVvZihkZXZfaW5mby0+bmFtZSkpOworCQl1c2Jfc3RyaW5nKHVzYl9kZXYsIHVzYl9kZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCisJCQkgICBkZXZfaW5mby0+bW9kZWxfbmFtZSwgc2l6ZW9mKGRldl9pbmZvLT5tb2RlbF9uYW1lKSk7CisJfQorCWlmICh1c2JfZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIpCisJCXVzYl9zdHJpbmcodXNiX2RldiwgdXNiX2Rldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAorCQkJICAgZGV2X2luZm8tPm1hbnVmYWN0dXJlciwKKwkJCSAgIHNpemVvZihkZXZfaW5mby0+bWFudWZhY3R1cmVyKSk7CisJc2NucHJpbnRmKGRldl9pbmZvLT5tb2RlbF9uciwgc2l6ZW9mKGRldl9pbmZvLT5tb2RlbF9uciksICIlMDR4IiwKKwkJICBfX2xlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CisJaWYgKHVzYl9kZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcikKKwkJdXNiX3N0cmluZyh1c2JfZGV2LCB1c2JfZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsCisJCQkgICBkZXZfaW5mby0+c2VyaWFsLCBzaXplb2YoZGV2X2luZm8tPnNlcmlhbCkpOworCS8qIEZJWE1FOiB3aGVyZSBzaG91bGQgd2Ugb2J0YWluIGNhdGVnb3J5PyAqLworCWRldl9pbmZvLT5wcmltX2Rldl90eXBlLmNhdGVnb3J5ID0gY3B1X3RvX2xlMTYoV0xQX0RFVl9DQVRfT1RIRVIpOworCS8qIEZJWE1FOiBDb21wbGV0ZSBPVUkgYW5kIE9VSXN1YmRpdiBhdHRyaWJ1dGVzICovCit9CisKKyNpZmRlZiBpMTQ4MHVfRkxPV19DT05UUk9MCisvKioKKyAqIENhbGxiYWNrIGZvciB0aGUgbm90aWZpY2F0aW9uIGVuZHBvaW50CisgKgorICogVGhpcyBtb3N0bHkgY29udHJvbHMgdGhlIHhvbi94b2ZmIHByb3RvY29sLiBJbiBjYXNlIG9mIGhhcmQgZXJyb3IsCisgKiB3ZSBzdG9wIHRoZSBxdWV1ZS4gSWYgbm90LCB3ZSBhbHdheXMgcmV0cnkuCisgKi8KK3N0YXRpYwordm9pZCBpMTQ4MHVfbm90aWZfY2Ioc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pZmFjZSA9IGkxNDgwdS0+dXNiX2lmYWNlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfaWZhY2UtPmRldjsKKwlpbnQgcmVzdWx0OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoJCQkJLyogR290IHZhbGlkIGRhdGEsIGRvIHhvbi94b2ZmICovCisJCXN3aXRjaCAoaTE0ODB1LT5ub3RpZl9idWZmZXJbMF0pIHsKKwkJY2FzZSAnTic6CisJCQlkZXZfZXJyKGRldiwgIlhPRkYgU1RPUFBJTkcgcXVldWUgYXQgJWx1XG4iLCBqaWZmaWVzKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoaTE0ODB1LT5uZXRfZGV2KTsKKwkJCWJyZWFrOworCQljYXNlICdBJzoKKwkJCWRldl9lcnIoZGV2LCAiWE9OIFNUQVJUSU5HIHF1ZXVlIGF0ICVsdVxuIiwgamlmZmllcyk7CisJCQluZXRpZl9zdGFydF9xdWV1ZShpMTQ4MHUtPm5ldF9kZXYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGRldiwgIk5FUDogdW5rbm93biBkYXRhIDB4JTAyaGh4XG4iLAorCQkJCWkxNDgwdS0+bm90aWZfYnVmZmVyWzBdKTsKKwkJfQorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogQ29udHJvbGxlZCBzaXR1YXRpb24gLi4uICovCisJY2FzZSAtRU5PRU5UOgkJCS8qIHdlIGtpbGxlZCB0aGUgVVJCLi4uICovCisJCWRldl9lcnIoZGV2LCAiTkVQOiBVUkIgcmVzZXQvbm9lbnQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBlcnJvcjsKKwljYXNlIC1FU0hVVERPV046CQkvKiBnb2luZyBhd2F5ISAqLworCQlkZXZfZXJyKGRldiwgIk5FUDogVVJCIGRvd24gJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBlcnJvcjsKKwlkZWZhdWx0OgkJCS8qIFJldHJ5IHVubGVzcyBpdCBnZXRzIHVnbHkgKi8KKwkJaWYgKGVkY19pbmMoJmkxNDgwdS0+bm90aWZfZWRjLCBFRENfTUFYX0VSUk9SUywKKwkJCSAgICBFRENfRVJST1JfVElNRUZSQU1FKSkgeworCQkJZGV2X2VycihkZXYsICJORVA6IFVSQiBtYXggYWNjZXB0YWJsZSBlcnJvcnMgIgorCQkJCSJleGNlZWRlZDsgcmVzZXR0aW5nIGRldmljZVxuIik7CisJCQlnb3RvIGVycm9yX3Jlc2V0OworCQl9CisJCWRldl9lcnIoZGV2LCAiTkVQOiBVUkIgZXJyb3IgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJORVA6IENhbid0IHJlc3VibWl0IFVSQjogJWQ7IHJlc2V0dGluZyBkZXZpY2VcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX3Jlc2V0OworCX0KKwlyZXR1cm47CisKK2Vycm9yX3Jlc2V0OgorCXdscF9yZXNldF9hbGwoJmkxNDgwLXdscCk7CitlcnJvcjoKKwluZXRpZl9zdG9wX3F1ZXVlKGkxNDgwdS0+bmV0X2Rldik7CisJcmV0dXJuOworfQorI2VuZGlmCisKK3N0YXRpYworaW50IGkxNDgwdV9hZGQoc3RydWN0IGkxNDgwdSAqaTE0ODB1LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJaW50IHJlc3VsdCA9IC1FTk9ERVY7CisJc3RydWN0IHdscCAqd2xwID0gJmkxNDgwdS0+d2xwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpZmFjZSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBpMTQ4MHUtPm5ldF9kZXY7CisJc3RydWN0IHV3Yl9yYyAqcmM7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXY7CisjaWZkZWYgaTE0ODB1X0ZMT1dfQ09OVFJPTAorCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkOworI2VuZGlmCisKKwlpMTQ4MHUtPnVzYl9kZXYgPSB1c2JfZ2V0X2Rldih1c2JfZGV2KTsKKwlpMTQ4MHUtPnVzYl9pZmFjZSA9IGlmYWNlOworCXJjID0gdXdiX3JjX2dldF9ieV9ncmFuZHBhKCZpMTQ4MHUtPnVzYl9kZXYtPmRldik7CisJaWYgKHJjID09IE5VTEwpIHsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIkNhbm5vdCBnZXQgYXNzb2NpYXRlZCBVV0IgUmFkaW8gIgorCQkJIkNvbnRyb2xsZXJcbiIpOworCQlnb3RvIG91dDsKKwl9CisJd2xwLT54bWl0X2ZyYW1lID0gaTE0ODB1X3htaXRfZnJhbWU7CisJd2xwLT5maWxsX2RldmljZV9pbmZvID0gaTE0ODB1X2ZpbGxfZGV2aWNlX2luZm87CisJd2xwLT5zdG9wX3F1ZXVlID0gaTE0ODB1X3N0b3BfcXVldWU7CisJd2xwLT5zdGFydF9xdWV1ZSA9IGkxNDgwdV9zdGFydF9xdWV1ZTsKKwlyZXN1bHQgPSB3bHBfc2V0dXAod2xwLCByYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIkNhbm5vdCBzZXR1cCBXTFBcbiIpOworCQlnb3RvIGVycm9yX3dscF9zZXR1cDsKKwl9CisJcmVzdWx0ID0gMDsKKwlldGhlcl9zZXR1cChuZXRfZGV2KTsJCQkvKiBtYWtlIGl0IGFuIGV0aGVyZGV2aWNlICovCisJdXdiX2RldiA9ICZyYy0+dXdiX2RldjsKKwkvKiBGSVhNRTogaG9va3VwIGFkZHJlc3MgY2hhbmdlIG5vdGlmaWNhdGlvbnM/ICovCisKKwltZW1jcHkobmV0X2Rldi0+ZGV2X2FkZHIsIHV3Yl9kZXYtPm1hY19hZGRyLmRhdGEsCisJICAgICAgIHNpemVvZihuZXRfZGV2LT5kZXZfYWRkcikpOworCisJbmV0X2Rldi0+aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCB1bnRkX2hkcl9jbXApCisJCSsgc2l6ZW9mKHN0cnVjdCB3bHBfdHhfaGRyKQorCQkrIFdMUF9EQVRBX0hMRU4KKwkJKyBFVEhfSExFTjsKKwluZXRfZGV2LT5tdHUgPSAzNTAwOworCW5ldF9kZXYtPnR4X3F1ZXVlX2xlbiA9IDIwOwkJLyogRklYTUU6IG1heWJlIHVzZSAxMDAwPyAqLworCisvKgluZXRfZGV2LT5mbGFncyAmPSB+SUZGX0JST0FEQ0FTVDsJRklYTUU6IEJVRyBpbiBmaXJtd2FyZSAqLworCS8qIEZJWE1FOiBtdWx0aWNhc3QgZGlzYWJsZWQgKi8KKwluZXRfZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsKKwluZXRfZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKKwluZXRfZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9GUkFHTElTVDsKKwkvKiBBbGwgTkVUSUZfRl8qX0NTVU0gZGlzYWJsZWQgKi8KKwluZXRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJbmV0X2Rldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwkJLyogRklYTUU6IGEgYmV0dGVyIGRlZmF1bHQ/ICovCisKKwluZXRfZGV2LT5vcGVuID0gaTE0ODB1X29wZW47CisJbmV0X2Rldi0+c3RvcCA9IGkxNDgwdV9zdG9wOworCW5ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGkxNDgwdV9oYXJkX3N0YXJ0X3htaXQ7CisJbmV0X2Rldi0+dHhfdGltZW91dCA9IGkxNDgwdV90eF90aW1lb3V0OworCW5ldF9kZXYtPmdldF9zdGF0cyA9IGkxNDgwdV9nZXRfc3RhdHM7CisJbmV0X2Rldi0+c2V0X2NvbmZpZyA9IGkxNDgwdV9zZXRfY29uZmlnOworCW5ldF9kZXYtPmNoYW5nZV9tdHUgPSBpMTQ4MHVfY2hhbmdlX210dTsKKworI2lmZGVmIGkxNDgwdV9GTE9XX0NPTlRST0wKKwkvKiBOb3RpZmljYXRpb24gZW5kcG9pbnQgc2V0dXAgKHN1Ym1pdHRlZCB3aGVuIHdlIG9wZW4gdGhlIGRldmljZSkgKi8KKwlpMTQ4MHUtPm5vdGlmX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGkxNDgwdS0+bm90aWZfdXJiID09IE5VTEwpIHsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBub3RpZmljYXRpb24gVVJCXG4iKTsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl91cmJfYWxsb2M7CisJfQorCWVwZCA9ICZpZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisJdXNiX2ZpbGxfaW50X3VyYihpMTQ4MHUtPm5vdGlmX3VyYiwgdXNiX2RldiwKKwkJCSB1c2JfcmN2aW50cGlwZSh1c2JfZGV2LCBlcGQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJIGkxNDgwdS0+bm90aWZfYnVmZmVyLCBzaXplb2YoaTE0ODB1LT5ub3RpZl9idWZmZXIpLAorCQkJIGkxNDgwdV9ub3RpZl9jYiwgaTE0ODB1LCBlcGQtPmJJbnRlcnZhbCk7CisKKyNlbmRpZgorCisJaTE0ODB1LT50eF9pbmZsaWdodC5tYXggPSBpMTQ4MHVfVFhfSU5GTElHSFRfTUFYOworCWkxNDgwdS0+dHhfaW5mbGlnaHQudGhyZXNob2xkID0gaTE0ODB1X1RYX0lORkxJR0hUX1RIUkVTSE9MRDsKKwlpMTQ4MHUtPnR4X2luZmxpZ2h0LnJlc3RhcnRfdHMgPSBqaWZmaWVzOworCXVzYl9zZXRfaW50ZmRhdGEoaWZhY2UsIGkxNDgwdSk7CisJcmV0dXJuIHJlc3VsdDsKKworI2lmZGVmIGkxNDgwdV9GTE9XX0NPTlRST0wKK2Vycm9yX3VyYl9hbGxvYzoKKyNlbmRpZgorCXdscF9yZW1vdmUod2xwKTsKK2Vycm9yX3dscF9zZXR1cDoKKwl1d2JfcmNfcHV0KHJjKTsKK291dDoKKwl1c2JfcHV0X2RldihpMTQ4MHUtPnVzYl9kZXYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGkxNDgwdV9ybShzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUpCit7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSBpMTQ4MHUtPndscC5yYzsKKwl1c2Jfc2V0X2ludGZkYXRhKGkxNDgwdS0+dXNiX2lmYWNlLCBOVUxMKTsKKyNpZmRlZiBpMTQ4MHVfRkxPV19DT05UUk9MCisJdXNiX2tpbGxfdXJiKGkxNDgwdS0+bm90aWZfdXJiKTsKKwl1c2JfZnJlZV91cmIoaTE0ODB1LT5ub3RpZl91cmIpOworI2VuZGlmCisJd2xwX3JlbW92ZSgmaTE0ODB1LT53bHApOworCXV3Yl9yY19wdXQocmMpOworCXVzYl9wdXRfZGV2KGkxNDgwdS0+dXNiX2Rldik7Cit9CisKKy8qKiBKdXN0IHNldHVwIEBuZXRfZGV2J3MgaTE0ODB1IHByaXZhdGUgZGF0YSAqLworc3RhdGljIHZvaWQgaTE0ODB1X25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKK3sKKwlzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwkvKiBJbml0aWFsaXplIEBpMTQ4MHUgKi8KKwltZW1zZXQoaTE0ODB1LCAwLCBzaXplb2YoKmkxNDgwdSkpOworCWkxNDgwdV9pbml0KGkxNDgwdSk7Cit9CisKKy8qKgorICogUHJvYmUgYSBpMTQ4MHUgaW50ZXJmYWNlIGFuZCByZWdpc3RlciBpdAorICoKKyAqIEBpZmFjZTogICBVU0IgaW50ZXJmYWNlIHRvIGxpbmsgdG8KKyAqIEBpZDogICAgICBVU0IgY2xhc3Mvc3ViY2xhc3MvcHJvdG9jb2wgaWQKKyAqIEByZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqCisgKiBEb2VzIGJhc2ljIGhvdXNla2VlcGluZyBzdHVmZiBhbmQgdGhlbiBhbGxvY3MgYSBuZXRkZXYgd2l0aCBzcGFjZQorICogZm9yIHRoZSBpMTQ4MHUgIGRhdGEuIEluaXRpYWxpemVzLCByZWdpc3RlcnMgaW4gaTE0ODB1LCByZWdpc3RlcnMgaW4KKyAqIG5ldGRldiwgcmVhZHkgdG8gZ28uCisgKi8KK3N0YXRpYyBpbnQgaTE0ODB1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpZmFjZS0+ZGV2OworCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdTsKKworCS8qIEFsbG9jYXRlIGluc3RhbmNlIFtjYWxscyBpMTQ4MHVfbmV0ZGV2X3NldHVwKCkgb24gaXRdICovCisJcmVzdWx0ID0gLUVOT01FTTsKKwluZXRfZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqaTE0ODB1KSwgIndscCVkIiwgaTE0ODB1X25ldGRldl9zZXR1cCk7CisJaWYgKG5ldF9kZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIm5vIG1lbW9yeSBmb3IgbmV0d29yayBkZXZpY2UgaW5zdGFuY2VcbiIpOworCQlnb3RvIGVycm9yX2FsbG9jX25ldGRldjsKKwl9CisJU0VUX05FVERFVl9ERVYobmV0X2RldiwgZGV2KTsKKwlpMTQ4MHUgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlpMTQ4MHUtPm5ldF9kZXYgPSBuZXRfZGV2OworCXJlc3VsdCA9IGkxNDgwdV9hZGQoaTE0ODB1LCBpZmFjZSk7CS8qIE5vdyBzZXR1cCBhbGwgdGhlIHdscCBzdHVmZiAqLworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGFkZCBpMTQ4MHUgZGV2aWNlOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9pMTQ4MHVfYWRkOworCX0KKwlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXYobmV0X2Rldik7CS8qIE9rZXkgZG9rZXksIGJyaW5nIGl0IHVwICovCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2U6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3JlZ2lzdGVyX25ldGRldjsKKwl9CisJaTE0ODB1X3N5c2ZzX3NldHVwKGkxNDgwdSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3Jfc3lzZnNfaW5pdDsKKwlyZXR1cm4gMDsKKworZXJyb3Jfc3lzZnNfaW5pdDoKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRfZGV2KTsKK2Vycm9yX3JlZ2lzdGVyX25ldGRldjoKKwlpMTQ4MHVfcm0oaTE0ODB1KTsKK2Vycm9yX2kxNDgwdV9hZGQ6CisJZnJlZV9uZXRkZXYobmV0X2Rldik7CitlcnJvcl9hbGxvY19uZXRkZXY6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIERpc2NvbmVjdCBhIGkxNDgwdSBmcm9tIHRoZSBzeXN0ZW0uCisgKgorICogaTE0ODB1X3N0b3AoKSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCBzbyBhbCB0aGUgcnggYW5kIHR4IGNvbnRleHRzCisgKiBoYXZlIGJlZW4gdGFrZW4gZG93biBhbHJlYWR5LiBNYWtlIHN1cmUgdGhlIHF1ZXVlIGlzIHN0b3BwZWQsCisgKiB1bnJlZ2lzdGVyIG5ldGRldiBhbmQgaTE0ODB1LCBmcmVlIGFuZCBraWxsLgorICovCitzdGF0aWMgdm9pZCBpMTQ4MHVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IGkxNDgwdSAqaTE0ODB1OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OworCisJaTE0ODB1ID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisJbmV0X2RldiA9IGkxNDgwdS0+bmV0X2RldjsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOworI2lmZGVmIGkxNDgwdV9GTE9XX0NPTlRST0wKKwl1c2Jfa2lsbF91cmIoaTE0ODB1LT5ub3RpZl91cmIpOworI2VuZGlmCisJaTE0ODB1X3N5c2ZzX3JlbGVhc2UoaTE0ODB1KTsKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRfZGV2KTsKKwlpMTQ4MHVfcm0oaTE0ODB1KTsKKwlmcmVlX25ldGRldihuZXRfZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGkxNDgwdV9pZF90YWJsZVtdID0geworCXsKKwkJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgXAorCQkJCXwgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0lORk8gXAorCQkJCXwgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJCS5pZFZlbmRvciA9IDB4ODA4NiwKKwkJLmlkUHJvZHVjdCA9IDB4MGMzYiwKKwkJLmJEZXZpY2VDbGFzcyA9IDB4ZWYsCisJCS5iRGV2aWNlU3ViQ2xhc3MgPSAweDAyLAorCQkuYkRldmljZVByb3RvY29sID0gMHgwMiwKKwkJLmJJbnRlcmZhY2VDbGFzcyA9IDB4ZmYsCisJCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAweGZmLAorCQkuYkludGVyZmFjZVByb3RvY29sID0gMHhmZiwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpMTQ4MHVfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaTE0ODB1X2RyaXZlciA9IHsKKwkubmFtZSA9CQlLQlVJTERfTU9ETkFNRSwKKwkucHJvYmUgPQlpMTQ4MHVfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlpMTQ4MHVfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpMTQ4MHVfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpMTQ4MHVfZHJpdmVyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZpMTQ4MHVfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGkxNDgwdV9kcml2ZXJfaW5pdCk7CisKKworc3RhdGljIHZvaWQgX19leGl0IGkxNDgwdV9kcml2ZXJfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZpMTQ4MHVfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGkxNDgwdV9kcml2ZXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImkxNDgwIFdpcmVsZXNzIFVXQiBMaW5rIFdMUCBuZXR3b3JraW5nIGZvciBVU0IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvbmV0ZGV2LmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL25ldGRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDJhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL25ldGRldi5jCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogV1VTQiBXaXJlIEFkYXB0ZXI6IFdMUCBpbnRlcmZhY2UKKyAqIERyaXZlciBmb3IgdGhlIExpbnV4IE5ldHdvcmsgc3RhY2suCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXRkZXZpY2UgbGlua2FnZSAoZXhjZXB0IHR4IGFuZCByeCByZWxhdGVkIHN0dWZmKS4KKyAqCisgKiBST0FETUFQOgorICoKKyAqICAgRU5UUlkgUE9JTlRTIChOZXQgZGV2aWNlKToKKyAqCisgKiAgICAgaTE0ODB1X29wZW4oKTogQ2FsbGVkIHdoZW4gd2UgaWZjb25maWcgdXAgdGhlIGludGVyZmFjZTsKKyAqICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVzIHRvIGEgVVdCIGhvc3QgY29udHJvbGxlciwgcmVzZXJ2ZXMKKyAqICAgICAgICAgICAgICAgICAgICBiYW5kd2lkdGggKE1BUyksIHNldHMgdXAgUlggVVNCIFVSQiBhbmQgc3RhcnRzCisgKiAgICAgICAgICAgICAgICAgICAgdGhlIHF1ZXVlLgorICoKKyAqICAgICBpMTQ4MHVfc3RvcCgpOiBDYWxsZWQgd2hlbiB3ZSBpZmNvbmZpZyBkb3duIGEgaW50ZXJmYWNlOworICogICAgICAgICAgICAgICAgICAgIHJldmVyc2VzIF9vcGVuKCkuCisgKgorICogICAgIGkxNDgwdV9zZXRfY29uZmlnKCk6CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisjaW5jbHVkZSAiaTE0ODB1LXdscC5oIgorCitzdHJ1Y3QgaTE0ODB1X2NtZF9zZXRfaXBfbWFzIHsKKwlzdHJ1Y3QgdXdiX3JjY2IgICAgIHJjY2I7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBhZGRyOworCXU4ICAgICAgICAgICAgICAgICAgc3RyZWFtOworCXU4ICAgICAgICAgICAgICAgICAgb3duZXI7CisJdTggICAgICAgICAgICAgICAgICB0eXBlOwkvKiBlbnVtIHV3Yl9kcnBfdHlwZSAqLworCXU4ICAgICAgICAgICAgICAgICAgYmFNQVNbMzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdGF0aWMKK2ludCBpMTQ4MHVfc2V0X2lwX21hcygKKwlzdHJ1Y3QgdXdiX3JjICpyYywKKwljb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkc3RhZGRyLAorCXU4IHN0cmVhbSwgdTggb3duZXIsIHU4IHR5cGUsIHVuc2lnbmVkIGxvbmcgKm1hcykKK3sKKworCWludCByZXN1bHQ7CisJc3RydWN0IGkxNDgwdV9jbWRfc2V0X2lwX21hcyAqY21kOworCXN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0gcmVwbHk7CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCWdvdG8gZXJyb3Jfa3phbGxvYzsKKwljbWQtPnJjY2IuYkNvbW1hbmRUeXBlID0gMHhmZDsKKwljbWQtPnJjY2Iud0NvbW1hbmQgPSBjcHVfdG9fbGUxNigweDAwMGUpOworCWNtZC0+YWRkciA9ICpkc3RhZGRyOworCWNtZC0+c3RyZWFtID0gc3RyZWFtOworCWNtZC0+b3duZXIgPSBvd25lcjsKKwljbWQtPnR5cGUgPSB0eXBlOworCWlmIChtYXMgPT0gTlVMTCkKKwkJbWVtc2V0KGNtZC0+YmFNQVMsIDB4MDAsIHNpemVvZihjbWQtPmJhTUFTKSk7CisJZWxzZQorCQltZW1jcHkoY21kLT5iYU1BUywgbWFzLCBzaXplb2YoY21kLT5iYU1BUykpOworCXJlcGx5LnJjZWIuYkV2ZW50VHlwZSA9IDB4ZmQ7CisJcmVwbHkucmNlYi53RXZlbnQgPSBjcHVfdG9fbGUxNigweDAwMGUpOworCXJlc3VsdCA9IHV3Yl9yY19jbWQocmMsICJTRVQtSVAtTUFTIiwgJmNtZC0+cmNjYiwgc2l6ZW9mKCpjbWQpLAorCQkJICAgICZyZXBseS5yY2ViLCBzaXplb2YocmVwbHkpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJaWYgKHJlcGx5LmJSZXN1bHRDb2RlICE9IFVXQl9SQ19SRVNfRkFJTCkgeworCQlkZXZfZXJyKCZyYy0+dXdiX2Rldi5kZXYsCisJCQkiU0VULUlQLU1BUzogY29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCXJlcGx5LmJSZXN1bHRDb2RlKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9CitlcnJvcl9jbWQ6CisJa2ZyZWUoY21kKTsKK2Vycm9yX2t6YWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEluZm9ybSBhIFdMUCBpbnRlcmZhY2Ugb2YgYSBNQVMgcmVzZXJ2YXRpb24KKyAqCisgKiBAcmMgaXMgYXNzdW1lZCByZWZjbnRlZC4KKyAqLworLyogRklYTUU6IGRldGVjdCBpZiByZW1vdGUgZGV2aWNlIGlzIFdMUCBjYXBhYmxlPyAqLworc3RhdGljIGludCBpMTQ4MHVfbWFzX3NldF9kZXYoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYsIHN0cnVjdCB1d2JfcmMgKnJjLAorCQkJICAgICAgdTggc3RyZWFtLCB1OCBvd25lciwgdTggdHlwZSwgdW5zaWduZWQgbG9uZyAqbWFzKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisKKwlyZXN1bHQgPSBpMTQ4MHVfc2V0X2lwX21hcyhyYywgJnV3Yl9kZXYtPmRldl9hZGRyLCBzdHJlYW0sIG93bmVyLAorCQkJCSAgIHR5cGUsIG1hcyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJY2hhciByY2FkZHJidWZbVVdCX0FERFJfU1RSU0laRV0sIGRldmFkZHJidWZbVVdCX0FERFJfU1RSU0laRV07CisJCXV3Yl9kZXZfYWRkcl9wcmludChyY2FkZHJidWYsIHNpemVvZihyY2FkZHJidWYpLAorCQkJCSAgICZyYy0+dXdiX2Rldi5kZXZfYWRkcik7CisJCXV3Yl9kZXZfYWRkcl9wcmludChkZXZhZGRyYnVmLCBzaXplb2YoZGV2YWRkcmJ1ZiksCisJCQkJICAgJnV3Yl9kZXYtPmRldl9hZGRyKTsKKwkJZGV2X2VycihkZXYsICJTZXQgSVAgTUFTICglcyB0byAlcykgZmFpbGVkOiAlZFxuIiwKKwkJCXJjYWRkcmJ1ZiwgZGV2YWRkcmJ1ZiwgcmVzdWx0KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYmFuZHdpZHRoIGFsbG9jYXRvciB3aGVuIGNoYW5nZSBvY2N1cnMgaW4gcmVzZXJ2YXRpb24uCisgKgorICogQHJzdjogICAgIFRoZSByZXNlcnZhdGlvbiB0aGF0IGlzIGJlaW5nIGVzdGFibGlzaGVkLCBtb2RpZmllZCwgb3IKKyAqICAgICAgICAgICB0ZXJtaW5hdGVkLgorICoKKyAqIFdoZW4gYSByZXNlcnZhdGlvbiBpcyBlc3RhYmxpc2hlZCwgbW9kaWZpZWQsIG9yIHRlcm1pbmF0ZWQgdGhlIHVwcGVyIGxheWVyCisgKiAoV0xQIGhlcmUpIG5lZWRzIHNldC91cGRhdGUgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgTWVkaWEgQWNjZXNzIFNsb3RzCisgKiB0aGF0IGNhbiBiZSB1c2UgZm9yIElQIHRyYWZmaWMuCisgKgorICogT3VyIGFjdGlvbiB0YWtlbiBkdXJpbmcgZmFpbHVyZSBkZXBlbmRzIG9uIGhvdyB0aGUgcmVzZXJ2YXRpb24gaXMgYmVpbmcKKyAqIGNoYW5nZWQ6CisgKiAtIGlmIHJlc2VydmF0aW9uIGlzIGJlaW5nIGVzdGFibGlzaGVkIHdlIGRvIG5vdGhpbmcgaWYgd2UgY2Fubm90IHNldCB0aGUKKyAqICAgbmV3IE1BUyB0byBiZSB1c2VkCisgKiAtIGlmIHJlc2VydmF0aW9uIGlzIGJlaW5nIHRlcm1pbmF0ZWQgd2UgcmV2ZXJ0IGJhY2sgdG8gUENBIHdoZXRoZXIgdGhlCisgKiAgIFNFVCBJUCBNQVMgY29tbWFuZCBzdWNjZWVkcyBvciBub3QuCisgKi8KK3ZvaWQgaTE0ODB1X2J3X2FsbG9jX2NiKHN0cnVjdCB1d2JfcnN2ICpyc3YpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGkxNDgwdSAqaTE0ODB1ID0gcnN2LT5wYWxfcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTE0ODB1LT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3QgdXdiX2RldiAqdGFyZ2V0X2RldiA9IHJzdi0+dGFyZ2V0LmRldjsKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IGkxNDgwdS0+d2xwLnJjOworCXU4IHN0cmVhbSA9IHJzdi0+c3RyZWFtOworCWludCB0eXBlID0gcnN2LT50eXBlOworCWludCBpc19vd25lciA9IHJzdi0+b3duZXIgPT0gJnJjLT51d2JfZGV2OworCXVuc2lnbmVkIGxvbmcgKmJtcCA9IHJzdi0+bWFzLmJtOworCisJZGV2X2VycihkZXYsICJXTFAgY2FsbGJhY2sgY2FsbGVkIC0gc2VuZGluZyBzZXQgaXAgbWFzXG4iKTsKKwkvKnVzZXIgY2Fubm90IGNoYW5nZSBvcHRpb25zIHdoaWxlIHNldHRpbmcgY29uZmlndXJhdGlvbiovCisJbXV0ZXhfbG9jaygmaTE0ODB1LT5vcHRpb25zLm11dGV4KTsKKwlzd2l0Y2ggKHJzdi0+c3RhdGUpIHsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfVF9BQ0NFUFRFRDoKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19FU1RBQkxJU0hFRDoKKwkJcmVzdWx0ID0gaTE0ODB1X21hc19zZXRfZGV2KHRhcmdldF9kZXYsIHJjLCBzdHJlYW0sIGlzX293bmVyLAorCQkJCQl0eXBlLCBibXApOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJNQVMgcmVzZXJ2YXRpb24gZmFpbGVkOiAlZFxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChpc19vd25lcikgeworCQkJd2xwX3R4X2hkcl9zZXRfZGVsaXZlcnlfaWRfdHlwZSgmaTE0ODB1LT5vcHRpb25zLmRlZl90eF9oZHIsCisJCQkJCQkJV0xQX0RSUCB8IHN0cmVhbSk7CisJCQl3bHBfdHhfaGRyX3NldF9ydHNfY3RzKCZpMTQ4MHUtPm9wdGlvbnMuZGVmX3R4X2hkciwgMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVV0JfUlNWX1NUQVRFX05PTkU6CisJCS8qIHJldmVydCBiYWNrIHRvIFBDQSAqLworCQlyZXN1bHQgPSBpMTQ4MHVfbWFzX3NldF9kZXYodGFyZ2V0X2RldiwgcmMsIHN0cmVhbSwgaXNfb3duZXIsCisJCQkJCSAgICB0eXBlLCBibXApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWRldl9lcnIoZGV2LCAiTUFTIHJlc2VydmF0aW9uIGZhaWxlZDogJWRcbiIsIHJlc3VsdCk7CisJCS8qIFJldmVydCB0byBQQ0EgZXZlbiB0aG91Z2ggU0VUIElQIE1BUyBmYWlsZWQuICovCisJCXdscF90eF9oZHJfc2V0X2RlbGl2ZXJ5X2lkX3R5cGUoJmkxNDgwdS0+b3B0aW9ucy5kZWZfdHhfaGRyLAorCQkJCQkJaTE0ODB1LT5vcHRpb25zLnBjYV9iYXNlX3ByaW9yaXR5KTsKKwkJd2xwX3R4X2hkcl9zZXRfcnRzX2N0cygmaTE0ODB1LT5vcHRpb25zLmRlZl90eF9oZHIsIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInVuZXhwZWN0ZWQgV0xQIHJlc2VydmF0aW9uIHN0YXRlOiAlcyAoJWQpLlxuIiwKKwkJCXV3Yl9yc3Zfc3RhdGVfc3RyKHJzdi0+c3RhdGUpLCByc3YtPnN0YXRlKTsKKwkJYnJlYWs7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmaTE0ODB1LT5vcHRpb25zLm11dGV4KTsKKwlyZXR1cm47Cit9CisKKy8qKgorICoKKyAqIENhbGxlZCBvbiAnaWZjb25maWcgdXAnCisgKi8KK2ludCBpMTQ4MHVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCXN0cnVjdCB3bHAgKndscCA9ICZpMTQ4MHUtPndscDsKKwlzdHJ1Y3QgdXdiX3JjICpyYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTE0ODB1LT51c2JfaWZhY2UtPmRldjsKKworCXJjID0gd2xwLT5yYzsKKwlyZXN1bHQgPSBpMTQ4MHVfcnhfc2V0dXAoaTE0ODB1KTsJCS8qIEFsbG9jIFJYIHN0dWZmICovCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3Jfcnhfc2V0dXA7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKKyNpZmRlZiBpMTQ4MHVfRkxPV19DT05UUk9MCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoaTE0ODB1LT5ub3RpZl91cmIsIEdGUF9LRVJORUwpOzsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IHN1Ym1pdCBub3RpZmljYXRpb24gVVJCOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9ub3RpZl91cmJfc3VibWl0OworCX0KKyNlbmRpZgorCWkxNDgwdS0+dXdiX25vdGlmc19oYW5kbGVyLmNiID0gaTE0ODB1X3V3Yl9ub3RpZnNfY2I7CisJaTE0ODB1LT51d2Jfbm90aWZzX2hhbmRsZXIuZGF0YSA9IGkxNDgwdTsKKwlpZiAodXdiX2JnX2pvaW5lZChyYykpCisJCW5ldGlmX2NhcnJpZXJfb24obmV0X2Rldik7CisJZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihuZXRfZGV2KTsKKwl1d2Jfbm90aWZzX3JlZ2lzdGVyKHJjLCAmaTE0ODB1LT51d2Jfbm90aWZzX2hhbmRsZXIpOworCS8qIEludGVyZmFjZSBpcyB1cCB3aXRoIGFuIGFkZHJlc3MsIG5vdyB3ZSBjYW4gY3JlYXRlIFdTUyAqLworCXJlc3VsdCA9IHdscF93c3Nfc2V0dXAobmV0X2RldiwgJndscC0+d3NzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IGNyZWF0ZSBXU1M6ICVkLiBcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfbm90aWZfZGVyZWdpc3RlcjsKKwl9CisJcmV0dXJuIDA7CitlcnJvcl9ub3RpZl9kZXJlZ2lzdGVyOgorCXV3Yl9ub3RpZnNfZGVyZWdpc3RlcihyYywgJmkxNDgwdS0+dXdiX25vdGlmc19oYW5kbGVyKTsKKyNpZmRlZiBpMTQ4MHVfRkxPV19DT05UUk9MCitlcnJvcl9ub3RpZl91cmJfc3VibWl0OgorI2VuZGlmCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRfZGV2KTsKKwlpMTQ4MHVfcnhfcmVsZWFzZShpMTQ4MHUpOworZXJyb3Jfcnhfc2V0dXA6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIENhbGxlZCBvbiAnaWZjb25maWcgZG93bicKKyAqLworaW50IGkxNDgwdV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCXN0cnVjdCB3bHAgKndscCA9ICZpMTQ4MHUtPndscDsKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHdscC0+cmM7CisKKwlCVUdfT04od2xwLT5yYyA9PSBOVUxMKTsKKwl3bHBfd3NzX3JlbW92ZSgmd2xwLT53c3MpOworCXV3Yl9ub3RpZnNfZGVyZWdpc3RlcihyYywgJmkxNDgwdS0+dXdiX25vdGlmc19oYW5kbGVyKTsKKwluZXRpZl9jYXJyaWVyX29mZihuZXRfZGV2KTsKKyNpZmRlZiBpMTQ4MHVfRkxPV19DT05UUk9MCisJdXNiX2tpbGxfdXJiKGkxNDgwdS0+bm90aWZfdXJiKTsKKyNlbmRpZgorCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CisJaTE0ODB1X3J4X3JlbGVhc2UoaTE0ODB1KTsKKwlpMTQ4MHVfdHhfcmVsZWFzZShpMTQ4MHUpOworCXJldHVybiAwOworfQorCisKKy8qKiBSZXBvcnQgc3RhdGlzdGljcyAqLworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmkxNDgwdV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJc3RydWN0IGkxNDgwdSAqaTE0ODB1ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJcmV0dXJuICZpMTQ4MHUtPnN0YXRzOworfQorCisKKy8qKgorICoKKyAqIENoYW5nZSB0aGUgaW50ZXJmYWNlIGNvbmZpZy0td2UgcHJvYmFibHkgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAqLworaW50IGkxNDgwdV9zZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCUJVR19PTihpMTQ4MHUtPndscC5yYyA9PSBOVUxMKTsKKwlyZXN1bHQgPSAwOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ2hhbmdlIHRoZSBNVFUgb2YgdGhlIGludGVyZmFjZQorICovCitpbnQgaTE0ODB1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIGludCBtdHUpCit7CisJc3RhdGljIHVuaW9uIHsKKwkJc3RydWN0IHdscF90eF9oZHIgdHg7CisJCXN0cnVjdCB3bHBfcnhfaGRyIHJ4OworCX0gaTE0ODB1X2FsbF9oZHJzOworCisJaWYgKG10dSA8IEVUSF9ITEVOKQkvKiBXZSBlbmNhcCBldGggZnJhbWVzICovCisJCXJldHVybiAtRVJBTkdFOworCWlmIChtdHUgPiA0MDAwIC0gc2l6ZW9mKGkxNDgwdV9hbGxfaGRycykpCisJCXJldHVybiAtRVJBTkdFOworCW5ldF9kZXYtPm10dSA9IG10dTsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBldmVudHMgZnJvbSBVV0IKKyAqIFdoZW4gd2Ugc2VlIG90aGVyIGRldmljZXMgd2Uga25vdyB0aGUgY2FycmllciBpcyBvaywKKyAqIGlmIHdlIGFyZSB0aGUgb25seSBkZXZpY2UgaW4gdGhlIGJlYWNvbiBncm91cCB3ZSBzZXQgdGhlIGNhcnJpZXIKKyAqIHN0YXRlIHRvIG9mZi4KKyAqICovCit2b2lkIGkxNDgwdV91d2Jfbm90aWZzX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2LAorCQkJICBlbnVtIHV3Yl9ub3RpZnMgZXZlbnQpCit7CisJc3RydWN0IGkxNDgwdSAqaTE0ODB1ID0gZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGkxNDgwdS0+bmV0X2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTE0ODB1LT51c2JfaWZhY2UtPmRldjsKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBVV0JfTk9USUZfQkdfSk9JTjoKKwkJbmV0aWZfY2Fycmllcl9vbihuZXRfZGV2KTsKKwkJZGV2X2luZm8oZGV2LCAiTGluayBpcyB1cFxuIik7CisJCWJyZWFrOworCWNhc2UgVVdCX05PVElGX0JHX0xFQVZFOgorCQluZXRpZl9jYXJyaWVyX29mZihuZXRfZGV2KTsKKwkJZGV2X2luZm8oZGV2LCAiTGluayBpcyBkb3duXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgZXZlbnQgJWQgZnJvbSB1d2JcbiIsCisJCQkJZXZlbnQpOworCX0KK30KKworLyoqCisgKiBTdG9wIHRoZSBuZXR3b3JrIHF1ZXVlCisgKgorICogRW5hYmxlIFdMUCBzdWJzdGFjayB0byBzdG9wIG5ldHdvcmsgcXVldWUuIFdlIGFsc28gc2V0IHRoZSBmbG93IGNvbnRyb2wKKyAqIHRocmVzaG9sZCBhdCB0aGlzIHRpbWUgdG8gcHJldmVudCB0aGUgZmxvdyBjb250cm9sIGZyb20gcmVzdGFydGluZyB0aGUKKyAqIHF1ZXVlLgorICoKKyAqIHdlIGFyZSBsb29zaW5nIHRoZSBjdXJyZW50IHRocmVzaG9sZCB2YWx1ZSBoZXJlIC4uLiBGSVhNRT8KKyAqLwordm9pZCBpMTQ4MHVfc3RvcF9xdWV1ZShzdHJ1Y3Qgd2xwICp3bHApCit7CisJc3RydWN0IGkxNDgwdSAqaTE0ODB1ID0gY29udGFpbmVyX29mKHdscCwgc3RydWN0IGkxNDgwdSwgd2xwKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGkxNDgwdS0+bmV0X2RldjsKKwlpMTQ4MHUtPnR4X2luZmxpZ2h0LnRocmVzaG9sZCA9IDA7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRfZGV2KTsKK30KKworLyoqCisgKiBTdGFydCB0aGUgbmV0d29yayBxdWV1ZQorICoKKyAqIEVuYWJsZSBXTFAgc3Vic3RhY2sgdG8gc3RhcnQgbmV0d29yayBxdWV1ZS4gQWxzbyByZS1lbmFibGUgdGhlIGZsb3cKKyAqIGNvbnRyb2wgdG8gbWFuYWdlIHRoZSBxdWV1ZSBhZ2Fpbi4KKyAqCisgKiBXZSByZS1lbmFibGUgdGhlIGZsb3cgY29udHJvbCBieSBzdG9yaW5nIHRoZSBkZWZhdWx0IHRocmVzaG9sZCBpbiB0aGUKKyAqIGZsb3cgY29udHJvbCB0aHJlc2hvbGQuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgdXNlciBtb2RpZmllZCB0aGUKKyAqIHRocmVzaG9sZCBiZWZvcmUgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQgdGhhdCBpbmZvcm1hdGlvbgorICogd2lsbCBiZSBsb3N0LiBGSVhNRT8KKyAqLwordm9pZCBpMTQ4MHVfc3RhcnRfcXVldWUoc3RydWN0IHdscCAqd2xwKQoreworCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IGNvbnRhaW5lcl9vZih3bHAsIHN0cnVjdCBpMTQ4MHUsIHdscCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBpMTQ4MHUtPm5ldF9kZXY7CisJaTE0ODB1LT50eF9pbmZsaWdodC50aHJlc2hvbGQgPSBpMTQ4MHVfVFhfSU5GTElHSFRfVEhSRVNIT0xEOworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldF9kZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC9yeC5jIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzAzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL3J4LmMKQEAgLTAsMCArMSw0ODYgQEAKKy8qCisgKiBXVVNCIFdpcmUgQWRhcHRlcjogV0xQIGludGVyZmFjZQorICogRHJpdmVyIGZvciB0aGUgTGludXggTmV0d29yayBzdGFjay4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIGkxNDgwdSdzIFJYIGhhbmRsaW5nIGlzIHNpbXBsZS4gaTE0ODB1IHdpbGwgc2VuZCB0aGUgcmVjZWl2ZWQKKyAqIG5ldHdvcmsgcGFja2V0cyBicm9rZW4gdXAgaW4gZnJhZ21lbnRzOyAxIHRvIE4gZnJhZ21lbnRzIG1ha2UgYQorICogcGFja2V0LCB3ZSBhc3NlbWJsZSB0aGVtIHRvZ2V0aGVyIGFuZCBkZWxpdmVyIHRoZSBwYWNrZXQgd2l0aCBuZXRpZl9yeCgpLgorICoKKyAqIEJlYWN1c2UgZWFjaCBVU0IgdHJhbnNmZXIgaXMgYSAqc2luZ2xlKiBmcmFnbWVudCAoZXhjZXB0IHdoZW4gdGhlCisgKiB0cmFuc2ZlciBjb250YWlucyBhIGZpcnN0IGZyYWdtZW50KSwgZWFjaCBVUkIgY2FsbGVkIHRodXMKKyAqIGJhY2sgY29udGFpbnMgb25lIG9yIHR3byBmcmFnbWVudHMuIFNvIHdlIHF1ZXVlIE4gVVJCcywgZWFjaCB3aXRoIGl0cyBvd24KKyAqIGZyYWdtZW50IGJ1ZmZlci4gV2hlbiBhIFVSQiBpcyBkb25lLCB3ZSBwcm9jZXNzIGl0IChhZGRpbmcgdG8gdGhlCisgKiBjdXJyZW50IHNrYiBmcm9tIHRoZSBmcmFnbWVudCBidWZmZXIgdW50aWwgY29tcGxldGUpLiBPbmNlCisgKiBwcm9jZXNzZWQsIHdlIHJlcXVldWUgdGhlIFVSQi4gVGhlcmUgaXMgYWx3YXlzIGEgYnVuY2ggb2YgVVJCcworICogcmVhZHkgdG8gdGFrZSBkYXRhLCBzbyB0aGUgaW50ZXJnYXAgc2hvdWxkIGJlIG1pbmltYWwuCisgKgorICogQW4gVVJCJ3MgdHJhbnNmZXIgYnVmZmVyIGlzIHRoZSBkYXRhIGZpZWxkIG9mIGEgc29ja2V0IGJ1ZmZlci4gVGhpcworICogcmVkdWNlcyBjb3B5aW5nIGFzIGRhdGEgY2FuIGJlIHBhc3NlZCBkaXJlY3RseSB0byBuZXR3b3JrIGxheWVyLiBJZiBhCisgKiBjb21wbGV0ZSBwYWNrZXQgb3IgMXN0IGZyYWdtZW50IGlzIHJlY2VpdmVkIHRoZSBVUkIncyB0cmFuc2ZlciBidWZmZXIgaXMKKyAqIHRha2VuIGF3YXkgZnJvbSBpdCBhbmQgdXNlZCB0byBzZW5kIGRhdGEgdG8gdGhlIG5ldHdvcmsgbGF5ZXIuIEluIHRoaXMKKyAqIGNhc2UgYSBuZXcgdHJhbnNmZXIgYnVmZmVyIGlzIGFsbG9jYXRlZCB0byB0aGUgVVJCIGJlZm9yZSBiZWluZyByZXF1ZXVlZC4KKyAqIElmIGEgIk5FWFQiIG9yICJMQVNUIiBmcmFnbWVudCBpcyByZWNlaXZlZCwgdGhlIGZyYWdtZW50IGNvbnRlbnRzIGlzCisgKiBhcHBlbmRlZCB0byB0aGUgUlggcGFja2V0IHVuZGVyIGNvbnN0cnVjdGlvbiBhbmQgdGhlIHRyYW5zZmVyIGJ1ZmZlcgorICogaXMgcmV1c2VkLiBUbyBiZSBhYmxlIHRvIHVzZSB0aGlzIGJ1ZmZlciB0byBhc3NlbWJsZSBjb21wbGV0ZSBwYWNrZXRzCisgKiB3ZSBzZXQgZWFjaCBidWZmZXIncyBzaXplIHRvIHRoYXQgb2YgdGhlIE1BWCBldGhlcm5ldCBwYWNrZXQgdGhhdCBjYW4KKyAqIGJlIHJlY2VpdmVkLiBUaGVyZSBpcyB0aHVzIHJvb20gZm9yIGltcHJvdmVtZW50IGluIG1lbW9yeSB1c2FnZS4KKyAqCisgKiBXaGVuIHRoZSBtYXggdHggZnJhZ21lbnQgc2l6ZSBpbmNyZWFzZXMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlYWQKKyAqIGRhdGEgaW50byB0aGUgc2ticyBkaXJlY3RseSB3aXRoIHZlcnkgc2ltcGxlIGNvZGUuCisgKgorICogUk9BRE1BUDoKKyAqCisgKiAgIEVOVFJZIFBPSU5UUzoKKyAqCisgKiAgICAgaTE0ODB1X3J4X3NldHVwKCk6IHNldHVwIFJYIGNvbnRleHQgW2Zyb20gaTE0ODB1X29wZW4oKV0KKyAqCisgKiAgICAgaTE0ODB1X3J4X3JlbGVhc2UoKTogcmVsZWFzZSBSWCBjb250ZXh0IFtmcm9tIGkxNDgwdV9zdG9wKCldCisgKgorICogICAgIGkxNDgwdV9yeF9jYigpOiBjYWxsZWQgd2hlbiB0aGUgUlggVVNCIFVSQiByZWNlaXZlcyBhCisgKiAgICAgICAgICAgICAgICAgICAgIHBhY2tldC4gSXQgcmVtb3ZlcyB0aGUgaGVhZGVyIGFuZCBwdXNoZXMgaXQgdXAKKyAqICAgICAgICAgICAgICAgICAgICAgdGhlIExpbnV4IG5ldGRldiBzdGFjayB3aXRoIG5ldGlmX3J4KCkuCisgKgorICogICAgICAgaTE0ODB1X3J4X2J1ZmZlcigpCisgKiAgICAgICAgIGkxNDgwdV9kcm9wKCkgYW5kIGkxNDgwdV9maXgoKQorICogICAgICAgICBpMTQ4MHVfc2tiX2RlbGl2ZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSAiaTE0ODB1LXdscC5oIgorCisjZGVmaW5lIERfTE9DQUwgMAorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorCisKKy8qKgorICogU2V0dXAgdGhlIFJYIGNvbnRleHQKKyAqCisgKiBFYWNoIFVSQiBpcyBwcm92aWRlZCB3aXRoIGEgdHJhbnNmZXJfYnVmZmVyIHRoYXQgaXMgdGhlIGRhdGEgZmllbGQKKyAqIG9mIGEgbmV3IHNvY2tldCBidWZmZXIuCisgKi8KK2ludCBpMTQ4MHVfcnhfc2V0dXAoc3RydWN0IGkxNDgwdSAqaTE0ODB1KQoreworCWludCByZXN1bHQsIGNudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTE0ODB1LT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGkxNDgwdS0+bmV0X2RldjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyogQWxsb2MgUlggc3R1ZmYgKi8KKwlpMTQ4MHUtPnJ4X3NrYiA9IE5VTEw7CS8qIG5vdCBpbiBwcm9jZXNzIG9mIHJlY2VpdmluZyBwYWNrZXQgKi8KKwlyZXN1bHQgPSAtRU5PTUVNOworCWVwZCA9ICZpMTQ4MHUtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzFdLmRlc2M7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBpMTQ4MHVfUlhfQlVGUzsgY250KyspIHsKKwkJc3RydWN0IGkxNDgwdV9yeF9idWYgKnJ4X2J1ZiA9ICZpMTQ4MHUtPnJ4X2J1ZltjbnRdOworCQlyeF9idWYtPmkxNDgwdSA9IGkxNDgwdTsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihpMTQ4MHVfTUFYX1JYX1BLVF9TSVpFKTsKKwkJaWYgKCFza2IpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJSWDogY2Fubm90IGFsbG9jYXRlIFJYIGJ1ZmZlciAlZFxuIiwgY250KTsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yOworCQl9CisJCXNrYi0+ZGV2ID0gbmV0X2RldjsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQlyeF9idWYtPmRhdGEgPSBza2I7CisJCXJ4X2J1Zi0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVubGlrZWx5KHJ4X2J1Zi0+dXJiID09IE5VTEwpKSB7CisJCQlkZXZfZXJyKGRldiwgIlJYOiBjYW5ub3QgYWxsb2NhdGUgVVJCICVkXG4iLCBjbnQpOworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJdXNiX2ZpbGxfYnVsa191cmIocnhfYnVmLT51cmIsIGkxNDgwdS0+dXNiX2RldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKGkxNDgwdS0+dXNiX2RldiwgZXBkLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgcnhfYnVmLT5kYXRhLT5kYXRhLCBpMTQ4MHVfTUFYX1JYX1BLVF9TSVpFIC0gMiwKKwkJCSAgaTE0ODB1X3J4X2NiLCByeF9idWYpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihyeF9idWYtPnVyYiwgR0ZQX05PSU8pOworCQlpZiAodW5saWtlbHkocmVzdWx0IDwgMCkpIHsKKwkJCWRldl9lcnIoZGV2LCAiUlg6IGNhbm5vdCBzdWJtaXQgVVJCICVkOiAlZFxuIiwKKwkJCQljbnQsIHJlc3VsdCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCXJldHVybiAwOworCitlcnJvcjoKKwlpMTQ4MHVfcnhfcmVsZWFzZShpMTQ4MHUpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqIFJlbGVhc2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIHJ4IGNvbnRleHQgKi8KK3ZvaWQgaTE0ODB1X3J4X3JlbGVhc2Uoc3RydWN0IGkxNDgwdSAqaTE0ODB1KQoreworCWludCBjbnQ7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBpMTQ4MHVfUlhfQlVGUzsgY250KyspIHsKKwkJaWYgKGkxNDgwdS0+cnhfYnVmW2NudF0uZGF0YSkKKwkJCWRldl9rZnJlZV9za2IoaTE0ODB1LT5yeF9idWZbY250XS5kYXRhKTsKKwkJaWYgKGkxNDgwdS0+cnhfYnVmW2NudF0udXJiKSB7CisJCQl1c2Jfa2lsbF91cmIoaTE0ODB1LT5yeF9idWZbY250XS51cmIpOworCQkJdXNiX2ZyZWVfdXJiKGkxNDgwdS0+cnhfYnVmW2NudF0udXJiKTsKKwkJfQorCX0KKwlpZiAoaTE0ODB1LT5yeF9za2IgIT0gTlVMTCkKKwkJZGV2X2tmcmVlX3NrYihpMTQ4MHUtPnJ4X3NrYik7Cit9CisKK3N0YXRpYwordm9pZCBpMTQ4MHVfcnhfdW5saW5rX3VyYnMoc3RydWN0IGkxNDgwdSAqaTE0ODB1KQoreworCWludCBjbnQ7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBpMTQ4MHVfUlhfQlVGUzsgY250KyspIHsKKwkJaWYgKGkxNDgwdS0+cnhfYnVmW2NudF0udXJiKQorCQkJdXNiX3VubGlua191cmIoaTE0ODB1LT5yeF9idWZbY250XS51cmIpOworCX0KK30KKworLyoqIEZpeCBhbiBvdXQtb2Ytc2VxdWVuY2UgcGFja2V0ICovCisjZGVmaW5lIGkxNDgwdV9maXgoaTE0ODB1LCBtc2cuLi4pCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKHByaW50a19yYXRlbGltaXQoKSkJCQkJXAorCQlkZXZfZXJyKCZpMTQ4MHUtPnVzYl9pZmFjZS0+ZGV2LCBtc2cpOwlcCisJZGV2X2tmcmVlX3NrYl9pcnEoaTE0ODB1LT5yeF9za2IpOwkJXAorCWkxNDgwdS0+cnhfc2tiID0gTlVMTDsJCQkJXAorCWkxNDgwdS0+cnhfdW50ZF9wa3Rfc2l6ZSA9IDA7CQkJXAorfSB3aGlsZSAoMCkKKworCisvKiogRHJvcCBhbiBvdXQtb2Ytc2VxdWVuY2UgcGFja2V0ICovCisjZGVmaW5lIGkxNDgwdV9kcm9wKGkxNDgwdSwgbXNnLi4uKQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCQkJCVwKKwkJZGV2X2VycigmaTE0ODB1LT51c2JfaWZhY2UtPmRldiwgbXNnKTsJXAorCWkxNDgwdS0+c3RhdHMucnhfZHJvcHBlZCsrOwkJCVwKK30gd2hpbGUgKDApCisKKworCisKKy8qKiBGaW5hbGl6ZXMgc2V0dGluZyB1cCB0aGUgU0tCIGFuZCBkZWxpdmVycyBpdAorICoKKyAqIFdlIGZpcnN0IHBhc3MgdGhlIGluY29taW5nIGZyYW1lIHRvIFdMUCBzdWJzdGFjayBmb3IgdmVyaWZpY2F0aW9uLiBJdAorICogbWF5IGFsc28gYmUgYSBXTFAgYXNzb2NpYXRpb24gZnJhbWUgaW4gd2hpY2ggY2FzZSBXTFAgd2lsbCB0YWtlIG92ZXIgdGhlCisgKiBwcm9jZXNzaW5nLiBJZiBXTFAgZG9lcyBub3QgdGFrZSBpdCBvdmVyIGl0IHdpbGwgc3RpbGwgdmVyaWZ5IGl0LCBpZiB0aGUKKyAqIGZyYW1lIGlzIGludmFsaWQgdGhlIHNrYiB3aWxsIGJlIGZyZWVkIGJ5IFdMUCBhbmQgd2Ugd2lsbCBub3QgY29udGludWUKKyAqIHBhcnNpbmcuCisgKiAqLworc3RhdGljCit2b2lkIGkxNDgwdV9za2JfZGVsaXZlcihzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUpCit7CisJaW50IHNob3VsZF9wYXJzZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGkxNDgwdS0+bmV0X2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTE0ODB1LT51c2JfaWZhY2UtPmRldjsKKworCWRfcHJpbnRmKDYsIGRldiwgIlJYIGRlbGl2ZXJlZCBwcmUgc2tiKCVwKSwgJXUgYnl0ZXNcbiIsCisJCSBpMTQ4MHUtPnJ4X3NrYiwgaTE0ODB1LT5yeF9za2ItPmxlbik7CisJZF9kdW1wKDcsIGRldiwgaTE0ODB1LT5yeF9za2ItPmRhdGEsIGkxNDgwdS0+cnhfc2tiLT5sZW4pOworCXNob3VsZF9wYXJzZSA9IHdscF9yZWNlaXZlX2ZyYW1lKGRldiwgJmkxNDgwdS0+d2xwLCBpMTQ4MHUtPnJ4X3NrYiwKKwkJCQkJICZpMTQ4MHUtPnJ4X3NyY2FkZHIpOworCWlmICghc2hvdWxkX3BhcnNlKQorCQlnb3RvIG91dDsKKwlpMTQ4MHUtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhpMTQ4MHUtPnJ4X3NrYiwgbmV0X2Rldik7CisJZF9wcmludGYoNSwgZGV2LCAiUlggZGVsaXZlcmVkIHNrYiglcCksICV1IGJ5dGVzXG4iLAorCQkgaTE0ODB1LT5yeF9za2IsIGkxNDgwdS0+cnhfc2tiLT5sZW4pOworCWRfZHVtcCg3LCBkZXYsIGkxNDgwdS0+cnhfc2tiLT5kYXRhLAorCSAgICAgICBpMTQ4MHUtPnJ4X3NrYi0+bGVuID4gNzIgPyA3MiA6IGkxNDgwdS0+cnhfc2tiLT5sZW4pOworCWkxNDgwdS0+c3RhdHMucnhfcGFja2V0cysrOworCWkxNDgwdS0+c3RhdHMucnhfYnl0ZXMgKz0gaTE0ODB1LT5yeF91bnRkX3BrdF9zaXplOworCW5ldF9kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCS8qIEZJWE1FOiBmbG93IGNvbnRyb2w6IGNoZWNrIG5ldGlmX3J4KCkgcmV0dmFsICovCisKKwluZXRpZl9yeChpMTQ4MHUtPnJ4X3NrYik7CQkvKiBkZWxpdmVyICovCitvdXQ6CisJaTE0ODB1LT5yeF9za2IgPSBOVUxMOworCWkxNDgwdS0+cnhfdW50ZF9wa3Rfc2l6ZSA9IDA7Cit9CisKKworLyoqCisgKiBQcm9jZXNzIGEgYnVmZmVyIG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgVVNCIFJYIGVuZHBvaW50CisgKgorICogRmlyc3QgZnJhZ21lbnQgYXJyaXZlcyB3aXRoIG5leHQgb3IgbGFzdCBmcmFnbWVudC4gQWxsIG90aGVyIGZyYWdtZW50cworICogYXJyaXZlIGFsb25lLgorICoKKyAqIC9tZSBoYXRlcyBsb25nIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljCit2b2lkIGkxNDgwdV9yeF9idWZmZXIoc3RydWN0IGkxNDgwdV9yeF9idWYgKnJ4X2J1ZikKK3sKKwl1bnNpZ25lZCBwa3RfY29tcGxldGVkID0gMDsJLyogITAgd2hlbiB3ZSBnb3QgYWxsIHBrdCBmcmFnbWVudHMgKi8KKwlzaXplX3QgdW50ZF9oZHJfc2l6ZSwgdW50ZF9mcmdfc2l6ZTsKKwlzaXplX3QgaTE0ODB1X2hkcl9zaXplOworCXN0cnVjdCB3bHBfcnhfaGRyICppMTQ4MHVfaGRyID0gTlVMTDsKKworCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IHJ4X2J1Zi0+aTE0ODB1OworCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPmRhdGE7CisJaW50IHNpemVfbGVmdCA9IHJ4X2J1Zi0+dXJiLT5hY3R1YWxfbGVuZ3RoOworCXZvaWQgKnB0ciA9IHJ4X2J1Zi0+dXJiLT50cmFuc2Zlcl9idWZmZXI7IC8qIGFsc28gcnhfYnVmLT5kYXRhLT5kYXRhICovCisJc3RydWN0IHVudGRfaGRyICp1bnRkX2hkcjsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTE0ODB1LT5uZXRfZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpMTQ4MHUtPnVzYl9pZmFjZS0+ZGV2OworCXN0cnVjdCBza19idWZmICpuZXdfc2tiOworCisjaWYgMAorCWRldl9mbnN0YXJ0KGRldiwKKwkJICAgICIoaTE0ODB1ICVwIHB0ciAlcCBzaXplX2xlZnQgJXp1KVxuIiwgaTE0ODB1LCBwdHIsIHNpemVfbGVmdCk7CisJZGV2X2VycihkZXYsICJSWCBwYWNrZXQsICV6dSBieXRlc1xuIiwgc2l6ZV9sZWZ0KTsKKwlkdW1wX2J5dGVzKGRldiwgcHRyLCBzaXplX2xlZnQpOworI2VuZGlmCisJaTE0ODB1X2hkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCB3bHBfcnhfaGRyKTsKKworCXdoaWxlIChzaXplX2xlZnQgPiAwKSB7CisJCWlmIChwa3RfY29tcGxldGVkKSB7CisJCQlpMTQ4MHVfZHJvcChpMTQ4MHUsICJSWDogZnJhZ21lbnQgZm9sbG93cyBjb21wbGV0ZWQiCisJCQkJCSAicGFja2V0IGluIHNhbWUgYnVmZmVyLiBEcm9wcGluZ1xuIik7CisJCQlicmVhazsKKwkJfQorCQl1bnRkX2hkciA9IHB0cjsKKwkJaWYgKHNpemVfbGVmdCA8IHNpemVvZigqdW50ZF9oZHIpKSB7CS8qICBDaGVjayB0aGUgVU5URCBoZWFkZXIgKi8KKwkJCWkxNDgwdV9kcm9wKGkxNDgwdSwgIlJYOiBzaG9ydCBVTlREIGhlYWRlciEgRHJvcHBpbmdcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KHVudGRfaGRyX3J4X3R4KHVudGRfaGRyKSA9PSAwKSkgewkvKiBQYXJhbm9pYTogVFggc2V0PyAqLworCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LCAiUlg6IFRYIGJpdCBzZXQhIERyb3BwaW5nXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXN3aXRjaCAodW50ZF9oZHJfdHlwZSh1bnRkX2hkcikpIHsJLyogQ2hlY2sgdGhlIFVOVEQgaGVhZGVyIHR5cGUgKi8KKwkJY2FzZSBpMTQ4MHVfUEtUX0ZSQUdfMVNUOiB7CisJCQlzdHJ1Y3QgdW50ZF9oZHJfMXN0ICp1bnRkX2hkcl8xc3QgPSAodm9pZCAqKSB1bnRkX2hkcjsKKwkJCWRldl9kYmcoZGV2LCAiMXN0IGZyYWdtZW50XG4iKTsKKwkJCXVudGRfaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IHVudGRfaGRyXzFzdCk7CisJCQlpZiAoaTE0ODB1LT5yeF9za2IgIT0gTlVMTCkKKwkJCQlpMTQ4MHVfZml4KGkxNDgwdSwgIlJYOiAxc3QgZnJhZ21lbnQgb3V0IG9mICIKKwkJCQkJInNlcXVlbmNlISBGaXhpbmdcbiIpOworCQkJaWYgKHNpemVfbGVmdCA8IHVudGRfaGRyX3NpemUgKyBpMTQ4MHVfaGRyX3NpemUpIHsKKwkJCQlpMTQ4MHVfZHJvcChpMTQ4MHUsICJSWDogc2hvcnQgMXN0IGZyYWdtZW50ISAiCisJCQkJCSJEcm9wcGluZ1xuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpMTQ4MHUtPnJ4X3VudGRfcGt0X3NpemUgPSBsZTE2X3RvX2NwdSh1bnRkX2hkci0+bGVuKQorCQkJCQkJIC0gaTE0ODB1X2hkcl9zaXplOworCQkJdW50ZF9mcmdfc2l6ZSA9IGxlMTZfdG9fY3B1KHVudGRfaGRyXzFzdC0+ZnJhZ21lbnRfbGVuKTsKKwkJCWlmIChzaXplX2xlZnQgPCB1bnRkX2hkcl9zaXplICsgdW50ZF9mcmdfc2l6ZSkgeworCQkJCWkxNDgwdV9kcm9wKGkxNDgwdSwKKwkJCQkJICAgICJSWDogc2hvcnQgcGF5bG9hZCEgRHJvcHBpbmdcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaTE0ODB1LT5yeF9za2IgPSBza2I7CisJCQlpMTQ4MHVfaGRyID0gKHZvaWQgKikgdW50ZF9oZHJfMXN0ICsgdW50ZF9oZHJfc2l6ZTsKKwkJCWkxNDgwdS0+cnhfc3JjYWRkciA9IGkxNDgwdV9oZHItPnNyY2FkZHI7CisJCQlza2JfcHV0KGkxNDgwdS0+cnhfc2tiLCB1bnRkX2hkcl9zaXplICsgdW50ZF9mcmdfc2l6ZSk7CisJCQlza2JfcHVsbChpMTQ4MHUtPnJ4X3NrYiwgdW50ZF9oZHJfc2l6ZSArIGkxNDgwdV9oZHJfc2l6ZSk7CisJCQlzdGF0c19hZGRfc2FtcGxlKCZpMTQ4MHUtPmxxZV9zdGF0cywgKHM4KSBpMTQ4MHVfaGRyLT5MUUkgLSA3KTsKKwkJCXN0YXRzX2FkZF9zYW1wbGUoJmkxNDgwdS0+cnNzaV9zdGF0cywgaTE0ODB1X2hkci0+UlNTSSArIDE4KTsKKwkJCXJ4X2J1Zi0+ZGF0YSA9IE5VTEw7IC8qIG5lZWQgdG8gY3JlYXRlIG5ldyBidWZmZXIgKi8KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgaTE0ODB1X1BLVF9GUkFHX05YVDogeworCQkJZGV2X2RiZyhkZXYsICJueHQgZnJhZ21lbnRcbiIpOworCQkJdW50ZF9oZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdW50ZF9oZHJfcnN0KTsKKwkJCWlmIChpMTQ4MHUtPnJ4X3NrYiA9PSBOVUxMKSB7CisJCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LCAiUlg6IG5leHQgZnJhZ21lbnQgb3V0IG9mICIKKwkJCQkJICAgICJzZXF1ZW5jZSEgRHJvcHBpbmdcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaWYgKHNpemVfbGVmdCA8IHVudGRfaGRyX3NpemUpIHsKKwkJCQlpMTQ4MHVfZHJvcChpMTQ4MHUsICJSWDogc2hvcnQgTlhUIGZyYWdtZW50ISAiCisJCQkJCSAgICAiRHJvcHBpbmdcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJdW50ZF9mcmdfc2l6ZSA9IGxlMTZfdG9fY3B1KHVudGRfaGRyLT5sZW4pOworCQkJaWYgKHNpemVfbGVmdCA8IHVudGRfaGRyX3NpemUgKyB1bnRkX2ZyZ19zaXplKSB7CisJCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LAorCQkJCQkgICAgIlJYOiBzaG9ydCBwYXlsb2FkISBEcm9wcGluZ1xuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQltZW1tb3ZlKHNrYl9wdXQoaTE0ODB1LT5yeF9za2IsIHVudGRfZnJnX3NpemUpLAorCQkJCQlwdHIgKyB1bnRkX2hkcl9zaXplLCB1bnRkX2ZyZ19zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgaTE0ODB1X1BLVF9GUkFHX0xTVDogeworCQkJZGV2X2RiZyhkZXYsICJMc3QgZnJhZ21lbnRcbiIpOworCQkJdW50ZF9oZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdW50ZF9oZHJfcnN0KTsKKwkJCWlmIChpMTQ4MHUtPnJ4X3NrYiA9PSBOVUxMKSB7CisJCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LCAiUlg6IGxhc3QgZnJhZ21lbnQgb3V0IG9mICIKKwkJCQkJICAgICJzZXF1ZW5jZSEgRHJvcHBpbmdcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaWYgKHNpemVfbGVmdCA8IHVudGRfaGRyX3NpemUpIHsKKwkJCQlpMTQ4MHVfZHJvcChpMTQ4MHUsICJSWDogc2hvcnQgTFNUIGZyYWdtZW50ISAiCisJCQkJCSAgICAiRHJvcHBpbmdcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJdW50ZF9mcmdfc2l6ZSA9IGxlMTZfdG9fY3B1KHVudGRfaGRyLT5sZW4pOworCQkJaWYgKHNpemVfbGVmdCA8IHVudGRfZnJnX3NpemUgKyB1bnRkX2hkcl9zaXplKSB7CisJCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LAorCQkJCQkgICAgIlJYOiBzaG9ydCBwYXlsb2FkISBEcm9wcGluZ1xuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQltZW1tb3ZlKHNrYl9wdXQoaTE0ODB1LT5yeF9za2IsIHVudGRfZnJnX3NpemUpLAorCQkJCQlwdHIgKyB1bnRkX2hkcl9zaXplLCB1bnRkX2ZyZ19zaXplKTsKKwkJCXBrdF9jb21wbGV0ZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBpMTQ4MHVfUEtUX0ZSQUdfQ01QOiB7CisJCQlkZXZfZGJnKGRldiwgImNtcCBmcmFnbWVudFxuIik7CisJCQl1bnRkX2hkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCB1bnRkX2hkcl9jbXApOworCQkJaWYgKGkxNDgwdS0+cnhfc2tiICE9IE5VTEwpCisJCQkJaTE0ODB1X2ZpeChpMTQ4MHUsICJSWDogZml4IG91dC1vZi1zZXF1ZW5jZSBDTVAiCisJCQkJCSAgICIgZnJhZ21lbnQhXG4iKTsKKwkJCWlmIChzaXplX2xlZnQgPCB1bnRkX2hkcl9zaXplICsgaTE0ODB1X2hkcl9zaXplKSB7CisJCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LCAiUlg6IHNob3J0IENNUCBmcmFnbWVudCEgIgorCQkJCQkgICAgIkRyb3BwaW5nXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWkxNDgwdS0+cnhfdW50ZF9wa3Rfc2l6ZSA9IGxlMTZfdG9fY3B1KHVudGRfaGRyLT5sZW4pOworCQkJdW50ZF9mcmdfc2l6ZSA9IGkxNDgwdS0+cnhfdW50ZF9wa3Rfc2l6ZTsKKwkJCWlmIChzaXplX2xlZnQgPCBpMTQ4MHUtPnJ4X3VudGRfcGt0X3NpemUgKyB1bnRkX2hkcl9zaXplKSB7CisJCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LAorCQkJCQkgICAgIlJYOiBzaG9ydCBwYXlsb2FkISBEcm9wcGluZ1xuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpMTQ4MHUtPnJ4X3NrYiA9IHNrYjsKKwkJCWkxNDgwdV9oZHIgPSAodm9pZCAqKSB1bnRkX2hkciArIHVudGRfaGRyX3NpemU7CisJCQlpMTQ4MHUtPnJ4X3NyY2FkZHIgPSBpMTQ4MHVfaGRyLT5zcmNhZGRyOworCQkJc3RhdHNfYWRkX3NhbXBsZSgmaTE0ODB1LT5scWVfc3RhdHMsIChzOCkgaTE0ODB1X2hkci0+TFFJIC0gNyk7CisJCQlzdGF0c19hZGRfc2FtcGxlKCZpMTQ4MHUtPnJzc2lfc3RhdHMsIGkxNDgwdV9oZHItPlJTU0kgKyAxOCk7CisJCQlza2JfcHV0KGkxNDgwdS0+cnhfc2tiLCB1bnRkX2hkcl9zaXplICsgaTE0ODB1LT5yeF91bnRkX3BrdF9zaXplKTsKKwkJCXNrYl9wdWxsKGkxNDgwdS0+cnhfc2tiLCB1bnRkX2hkcl9zaXplICsgaTE0ODB1X2hkcl9zaXplKTsKKwkJCXJ4X2J1Zi0+ZGF0YSA9IE5VTEw7CS8qIGZvciBoYW5kIG9mZiBza2IgdG8gbmV0d29yayBzdGFjayAqLworCQkJcGt0X2NvbXBsZXRlZCA9IDE7CisJCQlpMTQ4MHUtPnJ4X3VudGRfcGt0X3NpemUgLT0gaTE0ODB1X2hkcl9zaXplOyAvKiBhY2N1cmF0ZSBzdGF0ICovCisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJaTE0ODB1X2Ryb3AoaTE0ODB1LCAiUlg6IHVua25vd24gcGFja2V0IHR5cGUgJXUhICIKKwkJCQkgICAgIkRyb3BwaW5nXG4iLCB1bnRkX2hkcl90eXBlKHVudGRfaGRyKSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzaXplX2xlZnQgLT0gdW50ZF9oZHJfc2l6ZSArIHVudGRfZnJnX3NpemU7CisJCWlmIChzaXplX2xlZnQgPiAwKQorCQkJcHRyICs9IHVudGRfaGRyX3NpemUgKyB1bnRkX2ZyZ19zaXplOworCX0KKwlpZiAocGt0X2NvbXBsZXRlZCkKKwkJaTE0ODB1X3NrYl9kZWxpdmVyKGkxNDgwdSk7CitvdXQ6CisJLyogcmVjcmVhdGUgbmVlZGVkIFJYIGJ1ZmZlcnMqLworCWlmIChyeF9idWYtPmRhdGEgPT0gTlVMTCkgeworCQkvKiBidWZmZXIgaXMgYmVpbmcgdXNlZCB0byByZWNlaXZlIHBhY2tldCwgY3JlYXRlIG5ldyAqLworCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihpMTQ4MHVfTUFYX1JYX1BLVF9TSVpFKTsKKwkJaWYgKCFuZXdfc2tiKSB7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoZGV2LAorCQkJCSJSWDogY2Fubm90IGFsbG9jYXRlIFJYIGJ1ZmZlclxuIik7CisJCX0gZWxzZSB7CisJCQluZXdfc2tiLT5kZXYgPSBuZXRfZGV2OworCQkJbmV3X3NrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCXNrYl9yZXNlcnZlKG5ld19za2IsIDIpOworCQkJcnhfYnVmLT5kYXRhID0gbmV3X3NrYjsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKworLyoqCisgKiBDYWxsZWQgd2hlbiBhbiBSWCBVUkIgaGFzIGZpbmlzaGVkIHJlY2VpdmluZyBvciBoYXMgZm91bmQgc29tZSBraW5kCisgKiBvZiBlcnJvciBjb25kaXRpb24uCisgKgorICogTElNSVRBVElPTlM6CisgKgorICogIC0gV2UgcmVhZCBVU0ItdHJhbnNmZXJzLCBlYWNoIHRyYW5zZmVyIGNvbnRhaW5zIGEgU0lOR0xFIGZyYWdtZW50CisgKiAgICAoY2FuIGNvbnRhaW4gYSBjb21wbGV0ZSBwYWNrZXQsIG9yIGEgMXN0LCBuZXh0LCBvciBsYXN0IGZyYWdtZW50CisgKiAgICBvZiBhIHBhY2tldCkuCisgKiAgICBMb29rcyBsaWtlIGEgdHJhbnNmZXIgY2FuIGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFnbWVudCAoMDcvMTgvMDYpCisgKgorICogIC0gRWFjaCB0cmFuc2ZlciBidWZmZXIgaXMgdGhlIHNpemUgb2YgdGhlIG1heGltdW0gcGFja2V0IHNpemUgKG1pbnVzCisgKiAgICBoZWFkcm9vbSksIGkxNDgwdV9NQVhfUEtUX1NJWkUgLSAyCisgKgorICogIC0gV2UgYWx3YXlzIHJlYWQgdGhlIGZ1bGwgVVNCLXRyYW5zZmVyLCBubyBwYXJ0aWFscy4KKyAqCisgKiAgLSBFYWNoIHRyYW5zZmVyIGlzIHJlYWQgZGlyZWN0bHkgaW50byBhIHNrYi4gVGhpcyBza2Igd2lsbCBiZSB1c2VkIHRvCisgKiAgICBzZW5kIGRhdGEgdG8gdGhlIHVwcGVyIGxheWVycyBpZiBpdCBpcyB0aGUgZmlyc3QgZnJhZ21lbnQgb3IgYSBjb21wbGV0ZQorICogICAgcGFja2V0LiBJbiB0aGUgb3RoZXIgY2FzZXMgdGhlIGRhdGEgd2lsbCBiZSBjb3BpZWQgZnJvbSB0aGUgc2tiIHRvCisgKiAgICBhbm90aGVyIHNrYiB0aGF0IGlzIGJlaW5nIHByZXBhcmVkIGZvciB0aGUgdXBwZXIgbGF5ZXJzIGZyb20gYSBwcmV2CisgKiAgICBmaXJzdCBmcmFnbWVudC4KKyAqCisgKiBJdCBpcyBzaW1wbHkgdG9vIG11Y2ggb2YgYSBwYWluLiBHb3NoLCB0aGVyZSBzaG91bGQgYmUgYSB1bmlmaWVkCisgKiBTRyBpbmZyYXN0cnVjdHVyZSBmb3IgKmV2ZXJ5dGhpbmcqIFtzbyB0aGF0IEkgY291bGQgZGVjbGFyZSBhIFNHCisgKiBidWZmZXIsIHBhc3MgaXQgdG8gVVNCIGZvciByZWNlaXZpbmcsIGFwcGVuZCBzb21lIHNwYWNlIHRvIGl0IGlmCisgKiBJIHdpc2gsIHJlY2VpdmUgbW9yZSB1bnRpbCBJIGhhdmUgdGhlIHdob2xlIGNodW5rLCBhZGFwdAorICogcG9pbnRlcnMgb24gZWFjaCBmcmFnbWVudCB0byByZW1vdmUgaGFyZHdhcmUgaGVhZGVycyBhbmQgdGhlbgorICogYXR0YWNoIHRoYXQgdG8gYW4gc2tidWZmIGFuZCBuZXRpZl9yeCgpXS4KKyAqLwordm9pZCBpMTQ4MHVfcnhfY2Ioc3RydWN0IHVyYiAqdXJiKQoreworCWludCByZXN1bHQ7CisJaW50IGRvX3BhcnNlX2J1ZmZlciA9IDE7CisJc3RydWN0IGkxNDgwdV9yeF9idWYgKnJ4X2J1ZiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUgPSByeF9idWYtPmkxNDgwdTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTE0ODB1LT51c2JfaWZhY2UtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHJ4X2J1Zl9pZHggPSByeF9idWYgLSBpMTQ4MHUtPnJ4X2J1ZjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIE5vdCBhbiBlcnJvciwgYnV0IGEgY29udHJvbGxlZCBzaXR1YXRpb247ICovCisJY2FzZSAtRU5PRU5UOgkJLyogKHdlIGtpbGxlZCB0aGUgVVJCKS4uLnNvLCBubyBicm9hZGNhc3QgKi8KKwljYXNlIC1FU0hVVERPV046CS8qIGdvaW5nIGF3YXkhICovCisJCWRldl9lcnIoZGV2LCAiUlggVVJCWyV1XTogZ29pbmQgZG93biAlZFxuIiwKKwkJCXJ4X2J1Zl9pZHgsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBlcnJvcjsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIlJYIFVSQlsldV06IHVua25vd24gc3RhdHVzICVkXG4iLAorCQkJcnhfYnVmX2lkeCwgdXJiLT5zdGF0dXMpOworCQlpZiAoZWRjX2luYygmaTE0ODB1LT5yeF9lcnJvcnMsIEVEQ19NQVhfRVJST1JTLAorCQkJCQlFRENfRVJST1JfVElNRUZSQU1FKSkgeworCQkJZGV2X2VycihkZXYsICJSWDogbWF4IGFjY2VwdGFibGUgZXJyb3JzIGV4Y2VlZGVkLCIKKwkJCQkJIiByZXNldHRpbmcgZGV2aWNlLlxuIik7CisJCQlpMTQ4MHVfcnhfdW5saW5rX3VyYnMoaTE0ODB1KTsKKwkJCXdscF9yZXNldF9hbGwoJmkxNDgwdS0+d2xwKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZG9fcGFyc2VfYnVmZmVyID0gMDsKKwkJYnJlYWs7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZpMTQ4MHUtPmxvY2ssIGZsYWdzKTsKKwkvKiBjaGV3IHRoZSBkYXRhIGZyYWdtZW50cywgZXh0cmFjdCBuZXR3b3JrIHBhY2tldHMgKi8KKwlpZiAoZG9fcGFyc2VfYnVmZmVyKSB7CisJCWkxNDgwdV9yeF9idWZmZXIocnhfYnVmKTsKKwkJaWYgKHJ4X2J1Zi0+ZGF0YSkgeworCQkJcnhfYnVmLT51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHJ4X2J1Zi0+ZGF0YS0+ZGF0YTsKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHJ4X2J1Zi0+dXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyZXN1bHQgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJSWCBVUkJbJXVdOiBjYW5ub3Qgc3VibWl0ICVkXG4iLAorCQkJCQlyeF9idWZfaWR4LCByZXN1bHQpOworCQkJfQorCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmkxNDgwdS0+bG9jaywgZmxhZ3MpOworZXJyb3I6CisJcmV0dXJuOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL3N5c2ZzLmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkOGNhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvc3lzZnMuYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIFdVU0IgV2lyZSBBZGFwdGVyOiBXTFAgaW50ZXJmYWNlCisgKiBTeXNmcyBpbnRlcmZhY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgImkxNDgwdS13bHAuaCIKKworCisvKioKKyAqCisgKiBAZGV2OiBDbGFzcyBkZXZpY2UgZnJvbSB0aGUgbmV0X2RldmljZTsgYXNzdW1lZCByZWZjbnRlZC4KKyAqCisgKiBZZXMsIEkgZG9uJ3QgbG9jay0td2UgYXNzdW1lIGl0IGlzIHJlZmNvdW50ZWQgYW5kIEkgYW0gZ2V0dGluZyBhCisgKiBzaW5nbGUgYnl0ZSB2YWx1ZSB0aGF0IGlzIGtpbmQgb2YgYXRvbWljIHRvIHJlYWQuCisgKi8KK3NzaXplX3QgdXdiX3BoeV9yYXRlX3Nob3coY29uc3Qgc3RydWN0IHdscF9vcHRpb25zICpvcHRpb25zLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCisJCSAgICAgICB3bHBfdHhfaGRyX3BoeV9yYXRlKCZvcHRpb25zLT5kZWZfdHhfaGRyKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcGh5X3JhdGVfc2hvdyk7CisKKworc3NpemVfdCB1d2JfcGh5X3JhdGVfc3RvcmUoc3RydWN0IHdscF9vcHRpb25zICpvcHRpb25zLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwl1bnNpZ25lZCByYXRlOworCisJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwgIiV1XG4iLCAmcmF0ZSk7CisJaWYgKHJlc3VsdCAhPSAxKSB7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlyZXN1bHQgPSAtRUlOVkFMOworCWlmIChyYXRlID49IFVXQl9QSFlfUkFURV9JTlZBTElEKQorCQlnb3RvIG91dDsKKwl3bHBfdHhfaGRyX3NldF9waHlfcmF0ZSgmb3B0aW9ucy0+ZGVmX3R4X2hkciwgcmF0ZSk7CisJcmVzdWx0ID0gMDsKK291dDoKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcGh5X3JhdGVfc3RvcmUpOworCisKK3NzaXplX3QgdXdiX3J0c19jdHNfc2hvdyhjb25zdCBzdHJ1Y3Qgd2xwX29wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJICAgICAgIHdscF90eF9oZHJfcnRzX2N0cygmb3B0aW9ucy0+ZGVmX3R4X2hkcikpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3J0c19jdHNfc2hvdyk7CisKKworc3NpemVfdCB1d2JfcnRzX2N0c19zdG9yZShzdHJ1Y3Qgd2xwX29wdGlvbnMgKm9wdGlvbnMsCisJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJdW5zaWduZWQgdmFsdWU7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWx1ZSk7CisJaWYgKHJlc3VsdCAhPSAxKSB7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlyZXN1bHQgPSAtRUlOVkFMOworCXdscF90eF9oZHJfc2V0X3J0c19jdHMoJm9wdGlvbnMtPmRlZl90eF9oZHIsICEhdmFsdWUpOworCXJlc3VsdCA9IDA7CitvdXQ6CisJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiBzaXplOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3J0c19jdHNfc3RvcmUpOworCisKK3NzaXplX3QgdXdiX2Fja19wb2xpY3lfc2hvdyhjb25zdCBzdHJ1Y3Qgd2xwX29wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJICAgICAgIHdscF90eF9oZHJfYWNrX3BvbGljeSgmb3B0aW9ucy0+ZGVmX3R4X2hkcikpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX2Fja19wb2xpY3lfc2hvdyk7CisKKworc3NpemVfdCB1d2JfYWNrX3BvbGljeV9zdG9yZShzdHJ1Y3Qgd2xwX29wdGlvbnMgKm9wdGlvbnMsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJdW5zaWduZWQgdmFsdWU7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWx1ZSk7CisJaWYgKHJlc3VsdCAhPSAxIHx8IHZhbHVlID4gVVdCX0FDS19CX1JFUSkgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJd2xwX3R4X2hkcl9zZXRfYWNrX3BvbGljeSgmb3B0aW9ucy0+ZGVmX3R4X2hkciwgdmFsdWUpOworCXJlc3VsdCA9IDA7CitvdXQ6CisJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiBzaXplOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX2Fja19wb2xpY3lfc3RvcmUpOworCisKKy8qKgorICogU2hvdyB0aGUgUENBIGJhc2UgcHJpb3JpdHkuCisgKgorICogV2UgY2FuIGFjY2VzcyB3aXRob3V0IGxvY2tpbmcsIGFzIHRoZSB2YWx1ZSBpcyAoZm9yIG5vdykgb3J0aG9nb25hbAorICogdG8gb3RoZXIgdmFsdWVzLgorICovCitzc2l6ZV90IHV3Yl9wY2FfYmFzZV9wcmlvcml0eV9zaG93KGNvbnN0IHN0cnVjdCB3bHBfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCisJCSAgICAgICBvcHRpb25zLT5wY2FfYmFzZV9wcmlvcml0eSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcGNhX2Jhc2VfcHJpb3JpdHlfc2hvdyk7CisKKworLyoqCisgKiBTZXQgdGhlIFBDQSBiYXNlIHByaW9yaXR5LgorICoKKyAqIFdlIGNhbiBhY2Nlc3Mgd2l0aG91dCBsb2NraW5nLCBhcyB0aGUgdmFsdWUgaXMgKGZvciBub3cpIG9ydGhvZ29uYWwKKyAqIHRvIG90aGVyIHZhbHVlcy4KKyAqLworc3NpemVfdCB1d2JfcGNhX2Jhc2VfcHJpb3JpdHlfc3RvcmUoc3RydWN0IHdscF9vcHRpb25zICpvcHRpb25zLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcmVzdWx0ID0gLUVJTlZBTDsKKwl1OCBwY2FfYmFzZV9wcmlvcml0eTsKKworCXJlc3VsdCA9IHNzY2FuZihidWYsICIlaGh1XG4iLCAmcGNhX2Jhc2VfcHJpb3JpdHkpOworCWlmIChyZXN1bHQgIT0gMSkgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJcmVzdWx0ID0gLUVJTlZBTDsKKwlpZiAocGNhX2Jhc2VfcHJpb3JpdHkgPj0gOCkKKwkJZ290byBvdXQ7CisJb3B0aW9ucy0+cGNhX2Jhc2VfcHJpb3JpdHkgPSBwY2FfYmFzZV9wcmlvcml0eTsKKwkvKiBVcGRhdGUgVFggaGVhZGVyIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgUENBLiAqLworCWlmIChyZXN1bHQgPj0gMCAmJiAod2xwX3R4X2hkcl9kZWxpdmVyeV9pZF90eXBlKCZvcHRpb25zLT5kZWZfdHhfaGRyKSAmIFdMUF9EUlApID09IDApCisJCXdscF90eF9oZHJfc2V0X2RlbGl2ZXJ5X2lkX3R5cGUoJm9wdGlvbnMtPmRlZl90eF9oZHIsIG9wdGlvbnMtPnBjYV9iYXNlX3ByaW9yaXR5KTsKKwlyZXN1bHQgPSAwOworb3V0OgorCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogc2l6ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9wY2FfYmFzZV9wcmlvcml0eV9zdG9yZSk7CisKKy8qKgorICogU2hvdyBjdXJyZW50IGluZmxpZ2h0IHZhbHVlcworICoKKyAqIFdpbGwgcHJpbnQgdGhlIGN1cnJlbnQgTUFYIGFuZCBUSFJFU0hPTEQgdmFsdWVzIGZvciB0aGUgYmFzaWMgZmxvdworICogY29udHJvbC4gSW4gYWRkaXRpb24gaXQgd2lsbCByZXBvcnQgaG93IG1hbnkgdGltZXMgdGhlIFRYIHF1ZXVlIG5lZWRlZAorICogdG8gYmUgcmVzdGFydGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhpcyBxdWVyeSB3YXMgbWFkZS4KKyAqLworc3RhdGljIHNzaXplX3Qgd2xwX3R4X2luZmxpZ2h0X3Nob3coc3RydWN0IGkxNDgwdV90eF9pbmZsaWdodCAqaW5mbGlnaHQsCisJCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHNlY19lbGFwc2VkID0gKGppZmZpZXMgLSBpbmZsaWdodC0+cmVzdGFydF90cykvSFo7CisJdW5zaWduZWQgbG9uZyByZXN0YXJ0X2NvdW50ID0gYXRvbWljX3JlYWQoJmluZmxpZ2h0LT5yZXN0YXJ0X2NvdW50KTsKKworCXJlc3VsdCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsdSAlbHUgJWQgJWx1ICVsdSAlbHVcbiIKKwkJCSAgICIjcmVhZDogdGhyZXNob2xkIG1heCBpbmZsaWdodF9jb3VudCByZXN0YXJ0cyAiCisJCQkgICAic2Vjb25kcyByZXN0YXJ0cy9zZWNcbiIKKwkJCSAgICIjd3JpdGU6IHRocmVzaG9sZCBtYXhcbiIsCisJCQkgICBpbmZsaWdodC0+dGhyZXNob2xkLCBpbmZsaWdodC0+bWF4LAorCQkJICAgYXRvbWljX3JlYWQoJmluZmxpZ2h0LT5jb3VudCksCisJCQkgICByZXN0YXJ0X2NvdW50LCBzZWNfZWxhcHNlZCwKKwkJCSAgIHNlY19lbGFwc2VkID09IDAgPyAwIDogcmVzdGFydF9jb3VudC9zZWNfZWxhcHNlZCk7CisJaW5mbGlnaHQtPnJlc3RhcnRfdHMgPSBqaWZmaWVzOworCWF0b21pY19zZXQoJmluZmxpZ2h0LT5yZXN0YXJ0X2NvdW50LCAwKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMKK3NzaXplX3Qgd2xwX3R4X2luZmxpZ2h0X3N0b3JlKHN0cnVjdCBpMTQ4MHVfdHhfaW5mbGlnaHQgKmluZmxpZ2h0LAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBpbl90aHJlc2hvbGQsIGluX21heDsKKwlzc2l6ZV90IHJlc3VsdDsKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJWx1ICVsdSIsICZpbl90aHJlc2hvbGQsICZpbl9tYXgpOworCWlmIChyZXN1bHQgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGluX21heCA8PSBpbl90aHJlc2hvbGQpCisJCXJldHVybiAtRUlOVkFMOworCWluZmxpZ2h0LT5tYXggPSBpbl9tYXg7CisJaW5mbGlnaHQtPnRocmVzaG9sZCA9IGluX3RocmVzaG9sZDsKKwlyZXR1cm4gc2l6ZTsKK30KKy8qCisgKiBHbHVlIChvciBmdW5jdGlvbiBhZGFwdG9ycykgZm9yIGFjY2VzaW5nIGluZm8gb24gc3lzZnMKKyAqCisgKiBbd2UgbmVlZCB0aGlzIGluZGlyZWN0aW9uIGJlY2F1c2UgdGhlIFBDSSBkcml2ZXIgZG9lcyBhbG1vc3QgdGhlCisgKiBzYW1lXQorICoKKyAqIExpbnV4IDIuNi4yMSBjaGFuZ2VkIGhvdyAnc3RydWN0IG5ldGRldmljZScgZG9lcyBhdHRyaWJ1dGVzIChmcm9tCisgKiBoYXZpbmcgYSAnc3RydWN0IGNsYXNzX2RldicgdG8gaGF2aW5nIGEgJ3N0cnVjdCBkZXZpY2UnKS4gVGhhdCBpcworICogcXVpdGUgb2YgYSBwYWluLgorICoKKyAqIFNvIHdlIHRyeSB0byBhYnN0cmFjdCB0aGF0IGhlcmUuIGkxNDgwdV9TSE9XKCkgYW5kIGkxNDgwdV9TVE9SRSgpCisgKiBjcmVhdGUgYWRhcHRvcnMgZm9yIGV4dHJhY3RpbmcgdGhlICdzdHJ1Y3QgaTE0ODB1JyBmcm9tIGEgJ3N0cnVjdAorICogZGV2JyBhbmQgY2FsbGluZyBhIGZ1bmN0aW9uIGZvciBkb2luZyBhIHN5c2ZzIG9wZXJhdGlvbiAoYXMgd2UgaGF2ZQorICogdGhlbSBmYWN0b3JpemVkIGFscmVhZHkpLiBpMTQ4MHVfQVRUUiBjcmVhdGVzIHRoZSBhdHRyaWJ1dGUgZmlsZQorICogKENMQVNTX0RFVklDRV9BVFRSIG9yIERFVklDRV9BVFRSKSBhbmQgaTE0ODB1X0FUVFJfTkFNRSBwcm9kdWNlcyBhCisgKiBjbGFzc19kZXZpY2VfYXR0cl9OQU1FIG9yIGRldmljZV9hdHRyX05BTUUgKGZvciBncm91cCByZWdpc3RyYXRpb24pLgorICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjZGVmaW5lIGkxNDgwdV9TSE9XKG5hbWUsIGZuLCBwYXJhbSkJCQkJXAorc3RhdGljIHNzaXplX3QgaTE0ODB1X3Nob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwJCVwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFwKKwkJCQkgIGNoYXIgKmJ1ZikJCQlcCit7CQkJCQkJCQlcCisJc3RydWN0IGkxNDgwdSAqaTE0ODB1ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsJXAorCXJldHVybiBmbigmaTE0ODB1LT5wYXJhbSwgYnVmKTsJCQkJXAorfQorCisjZGVmaW5lIGkxNDgwdV9TVE9SRShuYW1lLCBmbiwgcGFyYW0pCQkJCVwKK3N0YXRpYyBzc2l6ZV90IGkxNDgwdV9zdG9yZV8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LAkJXAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFwKKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVwKK3sJCQkJCQkJCVwKKwlzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOwlcCisJcmV0dXJuIGZuKCZpMTQ4MHUtPnBhcmFtLCBidWYsIHNpemUpOwkJCVwKK30KKworI2RlZmluZSBpMTQ4MHVfQVRUUihuYW1lLCBwZXJtKSBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgcGVybSwgIFwKKwkJCQkJICAgICBpMTQ4MHVfc2hvd18jI25hbWUsXAorCQkJCQkgICAgIGkxNDgwdV9zdG9yZV8jI25hbWUpCisKKyNkZWZpbmUgaTE0ODB1X0FUVFJfU0hPVyhuYW1lKSBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwJCVwKKwkJCQkJU19JUlVHTywJCVwKKwkJCQkJaTE0ODB1X3Nob3dfIyNuYW1lLCBOVUxMKQorCisjZGVmaW5lIGkxNDgwdV9BVFRSX05BTUUoYSkgKGRldl9hdHRyXyMjYSkKKworCisvKgorICogU3lzZnMgYWRhcHRvcnMKKyAqLworaTE0ODB1X1NIT1codXdiX3BoeV9yYXRlLCB1d2JfcGh5X3JhdGVfc2hvdywgb3B0aW9ucyk7CitpMTQ4MHVfU1RPUkUodXdiX3BoeV9yYXRlLCB1d2JfcGh5X3JhdGVfc3RvcmUsIG9wdGlvbnMpOworaTE0ODB1X0FUVFIodXdiX3BoeV9yYXRlLCBTX0lSVUdPIHwgU19JV1VTUik7CisKK2kxNDgwdV9TSE9XKHV3Yl9ydHNfY3RzLCB1d2JfcnRzX2N0c19zaG93LCBvcHRpb25zKTsKK2kxNDgwdV9TVE9SRSh1d2JfcnRzX2N0cywgdXdiX3J0c19jdHNfc3RvcmUsIG9wdGlvbnMpOworaTE0ODB1X0FUVFIodXdiX3J0c19jdHMsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1codXdiX2Fja19wb2xpY3ksIHV3Yl9hY2tfcG9saWN5X3Nob3csIG9wdGlvbnMpOworaTE0ODB1X1NUT1JFKHV3Yl9hY2tfcG9saWN5LCB1d2JfYWNrX3BvbGljeV9zdG9yZSwgb3B0aW9ucyk7CitpMTQ4MHVfQVRUUih1d2JfYWNrX3BvbGljeSwgU19JUlVHTyB8IFNfSVdVU1IpOworCitpMTQ4MHVfU0hPVyh1d2JfcGNhX2Jhc2VfcHJpb3JpdHksIHV3Yl9wY2FfYmFzZV9wcmlvcml0eV9zaG93LCBvcHRpb25zKTsKK2kxNDgwdV9TVE9SRSh1d2JfcGNhX2Jhc2VfcHJpb3JpdHksIHV3Yl9wY2FfYmFzZV9wcmlvcml0eV9zdG9yZSwgb3B0aW9ucyk7CitpMTQ4MHVfQVRUUih1d2JfcGNhX2Jhc2VfcHJpb3JpdHksIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1cod2xwX2VkYSwgd2xwX2VkYV9zaG93LCB3bHApOworaTE0ODB1X1NUT1JFKHdscF9lZGEsIHdscF9lZGFfc3RvcmUsIHdscCk7CitpMTQ4MHVfQVRUUih3bHBfZWRhLCBTX0lSVUdPIHwgU19JV1VTUik7CisKK2kxNDgwdV9TSE9XKHdscF91dWlkLCB3bHBfdXVpZF9zaG93LCB3bHApOworaTE0ODB1X1NUT1JFKHdscF91dWlkLCB3bHBfdXVpZF9zdG9yZSwgd2xwKTsKK2kxNDgwdV9BVFRSKHdscF91dWlkLCBTX0lSVUdPIHwgU19JV1VTUik7CisKK2kxNDgwdV9TSE9XKHdscF9kZXZfbmFtZSwgd2xwX2Rldl9uYW1lX3Nob3csIHdscCk7CitpMTQ4MHVfU1RPUkUod2xwX2Rldl9uYW1lLCB3bHBfZGV2X25hbWVfc3RvcmUsIHdscCk7CitpMTQ4MHVfQVRUUih3bHBfZGV2X25hbWUsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1cod2xwX2Rldl9tYW51ZmFjdHVyZXIsIHdscF9kZXZfbWFudWZhY3R1cmVyX3Nob3csIHdscCk7CitpMTQ4MHVfU1RPUkUod2xwX2Rldl9tYW51ZmFjdHVyZXIsIHdscF9kZXZfbWFudWZhY3R1cmVyX3N0b3JlLCB3bHApOworaTE0ODB1X0FUVFIod2xwX2Rldl9tYW51ZmFjdHVyZXIsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1cod2xwX2Rldl9tb2RlbF9uYW1lLCB3bHBfZGV2X21vZGVsX25hbWVfc2hvdywgd2xwKTsKK2kxNDgwdV9TVE9SRSh3bHBfZGV2X21vZGVsX25hbWUsIHdscF9kZXZfbW9kZWxfbmFtZV9zdG9yZSwgd2xwKTsKK2kxNDgwdV9BVFRSKHdscF9kZXZfbW9kZWxfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IpOworCitpMTQ4MHVfU0hPVyh3bHBfZGV2X21vZGVsX25yLCB3bHBfZGV2X21vZGVsX25yX3Nob3csIHdscCk7CitpMTQ4MHVfU1RPUkUod2xwX2Rldl9tb2RlbF9uciwgd2xwX2Rldl9tb2RlbF9ucl9zdG9yZSwgd2xwKTsKK2kxNDgwdV9BVFRSKHdscF9kZXZfbW9kZWxfbnIsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1cod2xwX2Rldl9zZXJpYWwsIHdscF9kZXZfc2VyaWFsX3Nob3csIHdscCk7CitpMTQ4MHVfU1RPUkUod2xwX2Rldl9zZXJpYWwsIHdscF9kZXZfc2VyaWFsX3N0b3JlLCB3bHApOworaTE0ODB1X0FUVFIod2xwX2Rldl9zZXJpYWwsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1cod2xwX2Rldl9wcmltX2NhdGVnb3J5LCB3bHBfZGV2X3ByaW1fY2F0ZWdvcnlfc2hvdywgd2xwKTsKK2kxNDgwdV9TVE9SRSh3bHBfZGV2X3ByaW1fY2F0ZWdvcnksIHdscF9kZXZfcHJpbV9jYXRlZ29yeV9zdG9yZSwgd2xwKTsKK2kxNDgwdV9BVFRSKHdscF9kZXZfcHJpbV9jYXRlZ29yeSwgU19JUlVHTyB8IFNfSVdVU1IpOworCitpMTQ4MHVfU0hPVyh3bHBfZGV2X3ByaW1fT1VJLCB3bHBfZGV2X3ByaW1fT1VJX3Nob3csIHdscCk7CitpMTQ4MHVfU1RPUkUod2xwX2Rldl9wcmltX09VSSwgd2xwX2Rldl9wcmltX09VSV9zdG9yZSwgd2xwKTsKK2kxNDgwdV9BVFRSKHdscF9kZXZfcHJpbV9PVUksIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1cod2xwX2Rldl9wcmltX09VSV9zdWIsIHdscF9kZXZfcHJpbV9PVUlfc3ViX3Nob3csIHdscCk7CitpMTQ4MHVfU1RPUkUod2xwX2Rldl9wcmltX09VSV9zdWIsIHdscF9kZXZfcHJpbV9PVUlfc3ViX3N0b3JlLCB3bHApOworaTE0ODB1X0FUVFIod2xwX2Rldl9wcmltX09VSV9zdWIsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworaTE0ODB1X1NIT1cod2xwX2Rldl9wcmltX3N1YmNhdCwgd2xwX2Rldl9wcmltX3N1YmNhdF9zaG93LCB3bHApOworaTE0ODB1X1NUT1JFKHdscF9kZXZfcHJpbV9zdWJjYXQsIHdscF9kZXZfcHJpbV9zdWJjYXRfc3RvcmUsIHdscCk7CitpMTQ4MHVfQVRUUih3bHBfZGV2X3ByaW1fc3ViY2F0LCBTX0lSVUdPIHwgU19JV1VTUik7CisKK2kxNDgwdV9TSE9XKHdscF9uZWlnaGJvcmhvb2QsIHdscF9uZWlnaGJvcmhvb2Rfc2hvdywgd2xwKTsKK2kxNDgwdV9BVFRSX1NIT1cod2xwX25laWdoYm9yaG9vZCk7CisKK2kxNDgwdV9TSE9XKHdzc19hY3RpdmF0ZSwgd2xwX3dzc19hY3RpdmF0ZV9zaG93LCB3bHAud3NzKTsKK2kxNDgwdV9TVE9SRSh3c3NfYWN0aXZhdGUsIHdscF93c3NfYWN0aXZhdGVfc3RvcmUsIHdscC53c3MpOworaTE0ODB1X0FUVFIod3NzX2FjdGl2YXRlLCBTX0lSVUdPIHwgU19JV1VTUik7CisKKy8qCisgKiBTaG93IHRoZSAobWluLCBtYXgsIGF2ZykgTGluZSBRdWFsaXR5IEVzdGltYXRlIChMUUUsIGluIGRCKSBhcyBvdmVyCisgKiB0aGUgbGFzdCAyNTYgcmVjZWl2ZWQgV0xQIGZyYW1lcyAoRUNNQS0zNjggMTMuMykuCisgKgorICogW3RoZSAtN2RCIHRoYXQgaGF2ZSB0byBiZSBzdWJzdHJhY3RlZCBmcm9tIHRoZSBMUUkgdG8gbWFrZSB0aGUgTFFFCisgKiBhcmUgYWxyZWFkeSB0YWtlbiBpbnRvIGFjY291bnRdLgorICovCitpMTQ4MHVfU0hPVyh3bHBfbHFlLCBzdGF0c19zaG93LCBscWVfc3RhdHMpOworaTE0ODB1X1NUT1JFKHdscF9scWUsIHN0YXRzX3N0b3JlLCBscWVfc3RhdHMpOworaTE0ODB1X0FUVFIod2xwX2xxZSwgU19JUlVHTyB8IFNfSVdVU1IpOworCisvKgorICogU2hvdyB0aGUgUmVjZWl2ZSBTaWduYWwgU3RyZW5ndGggSW5kaWNhdG9yIGF2ZXJhZ2VkIG92ZXIgYWxsIHRoZQorICogcmVjZWl2ZWQgV0xQIGZyYW1lcyAoRUNNQS0zNjggMTMuMykuIFN0aWxsIGlzIG5vdCBjbGVhciB3aGF0CisgKiB0aGlzIHZhbHVlIGlzLCBidXQgaXMga2luZCBvZiBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHNpZ25hbCBzdHJlbmd0aAorICogYXQgdGhlIGFudGVubmEuCisgKi8KK2kxNDgwdV9TSE9XKHdscF9yc3NpLCBzdGF0c19zaG93LCByc3NpX3N0YXRzKTsKK2kxNDgwdV9TVE9SRSh3bHBfcnNzaSwgc3RhdHNfc3RvcmUsIHJzc2lfc3RhdHMpOworaTE0ODB1X0FUVFIod2xwX3Jzc2ksIFNfSVJVR08gfCBTX0lXVVNSKTsKKworLyoqCisgKiBXZSBtYWludGFpbiBhIGJhc2ljIGZsb3cgY29udHJvbCBjb3VudGVyLiAiY291bnQiIGhvdyBtYW55IFRYIFVSQnMgYXJlCisgKiBvdXRzdGFuZGluZy4gT25seSBhbGxvdyAibWF4IgorICogVFggVVJCcyB0byBiZSBvdXRzdGFuZGluZy4gSWYgdGhpcyB2YWx1ZSBpcyByZWFjaGVkIHRoZSBxdWV1ZSB3aWxsIGJlCisgKiBzdG9wcGVkLiBUaGUgcXVldWUgd2lsbCBiZSByZXN0YXJ0ZWQgd2hlbiB0aGVyZSBhcmUKKyAqICJ0aHJlc2hvbGQiIFVSQnMgb3V0c3RhbmRpbmcuCisgKi8KK2kxNDgwdV9TSE9XKHdscF90eF9pbmZsaWdodCwgd2xwX3R4X2luZmxpZ2h0X3Nob3csIHR4X2luZmxpZ2h0KTsKK2kxNDgwdV9TVE9SRSh3bHBfdHhfaW5mbGlnaHQsIHdscF90eF9pbmZsaWdodF9zdG9yZSwgdHhfaW5mbGlnaHQpOworaTE0ODB1X0FUVFIod2xwX3R4X2luZmxpZ2h0LCBTX0lSVUdPIHwgU19JV1VTUik7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppMTQ4MHVfYXR0cnNbXSA9IHsKKwkmaTE0ODB1X0FUVFJfTkFNRSh1d2JfcGh5X3JhdGUpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUodXdiX3J0c19jdHMpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUodXdiX2Fja19wb2xpY3kpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUodXdiX3BjYV9iYXNlX3ByaW9yaXR5KS5hdHRyLAorCSZpMTQ4MHVfQVRUUl9OQU1FKHdscF9scWUpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX3Jzc2kpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX2VkYSkuYXR0ciwKKwkmaTE0ODB1X0FUVFJfTkFNRSh3bHBfdXVpZCkuYXR0ciwKKwkmaTE0ODB1X0FUVFJfTkFNRSh3bHBfZGV2X25hbWUpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX2Rldl9tYW51ZmFjdHVyZXIpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX2Rldl9tb2RlbF9uYW1lKS5hdHRyLAorCSZpMTQ4MHVfQVRUUl9OQU1FKHdscF9kZXZfbW9kZWxfbnIpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX2Rldl9zZXJpYWwpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX2Rldl9wcmltX2NhdGVnb3J5KS5hdHRyLAorCSZpMTQ4MHVfQVRUUl9OQU1FKHdscF9kZXZfcHJpbV9PVUkpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX2Rldl9wcmltX09VSV9zdWIpLmF0dHIsCisJJmkxNDgwdV9BVFRSX05BTUUod2xwX2Rldl9wcmltX3N1YmNhdCkuYXR0ciwKKwkmaTE0ODB1X0FUVFJfTkFNRSh3bHBfbmVpZ2hib3Job29kKS5hdHRyLAorCSZpMTQ4MHVfQVRUUl9OQU1FKHdzc19hY3RpdmF0ZSkuYXR0ciwKKwkmaTE0ODB1X0FUVFJfTkFNRSh3bHBfdHhfaW5mbGlnaHQpLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGkxNDgwdV9hdHRyX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwJLyogd2Ugd2FudCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IGkxNDgwdV9hdHRycywKK307CisKK2ludCBpMTQ4MHVfc3lzZnNfc2V0dXAoc3RydWN0IGkxNDgwdSAqaTE0ODB1KQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmkxNDgwdS0+dXNiX2lmYWNlLT5kZXY7CisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpMTQ4MHUtPm5ldF9kZXYtPmRldi5rb2JqLAorCQkJCSAgICAmaTE0ODB1X2F0dHJfZ3JvdXApOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgImNhbm5vdCBpbml0aWFsaXplIHN5c2ZzIGF0dHJpYnV0ZXM6ICVkXG4iLAorCQkJcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQgaTE0ODB1X3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGkxNDgwdSAqaTE0ODB1KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaTE0ODB1LT5uZXRfZGV2LT5kZXYua29iaiwKKwkJCSAgICZpMTQ4MHVfYXR0cl9ncm91cCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL3R4LmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyNmJmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvdHguYwpAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIFdVU0IgV2lyZSBBZGFwdGVyOiBXTFAgaW50ZXJmYWNlCisgKiBEZWFsIHdpdGggVFggKG1hc3NhZ2luZyBkYXRhIHRvIHRyYW5zbWl0LCBoYW5kbGluZyBpdCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIFRyYW5zbWlzc2lvbiBlbmdpbmUuIEdldCBhbiBza2IsIGNyZWF0ZSBmcm9tIHRoYXQgYSBXTFAgdHJhbnNtaXQKKyAqIGNvbnRleHQsIGFkZCBhIFdMUCBUWCBoZWFkZXIgKHdoaWNoIHdlIGtlZXAgcHJlZmlsbGVkIGluIHRoZQorICogZGV2aWNlJ3MgaW5zdGFuY2UpLCBmaWxsIG91dCB0aGUgdGFyZ2V0LXNwZWNpZmljIGZpZWxkcyBhbmQKKyAqIGZpcmUgaXQuCisgKgorICogUk9BRE1BUDoKKyAqCisgKiAgIEVudHJ5IHBvaW50czoKKyAqCisgKiAgICAgaTE0ODB1X3R4X3JlbGVhc2UoKTogY2FsbGVkIGJ5IGkxNDgwdV9kaXNjb25uZWN0KCkgdG8gcmVsZWFzZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcgdHggY29udGV4dHMuCisgKgorICogICAgIGkxNDgwdV90eF9jYigpOiBjYWxsYmFjayBmb3IgVFggY29udGV4dHMgKFVTQiBVUkJzKQorICogICAgICAgaTE0ODB1X3R4X2Rlc3Ryb3koKToKKyAqCisgKiAgICAgaTE0ODB1X3R4X3RpbWVvdXQoKTogY2FsbGVkIGZvciB0aW1lb3V0IGhhbmRsaW5nIGZyb20gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayBzdGFjay4KKyAqCisgKiAgICAgaTE0ODB1X2hhcmRfc3RhcnRfeG1pdCgpOiBjYWxsZWQgZm9yIHRyYW5zbWl0dGluZyBhbiBza2IgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5ldHdvcmsgc3RhY2suIFdpbGwgaW50ZXJhY3Qgd2l0aCBXTFAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0YWNrIHRvIHZlcmlmeSBhbmQgcHJlcGFyZSBmcmFtZS4KKyAqICAgICAgIGkxNDgwdV94bWl0X2ZyYW1lKCk6IGFjdHVhbCB0cmFuc21pc3Npb24gb24gaGFyZHdhcmUKKyAqCisgKiAgICAgICAgIGkxNDgwdV90eF9jcmVhdGUoKQkgICAgQ3JlYXRlcyBUWCBjb250ZXh0CisgKiAgICAgICAgICAgIGkxNDgwdV90eF9jcmVhdGVfMSgpICAgIEZvciBwYWNrZXRzIGluIDEgZnJhZ21lbnQKKyAqICAgICAgICAgICAgaTE0ODB1X3R4X2NyZWF0ZV9uKCkgICAgRm9yIHBhY2tldHMgaW4gPjEgZnJhZ21lbnRzCisgKgorICogVE9ETzoKKyAqCisgKiAtIEZJWE1FOiByZXdyaXRlIHVzaW5nIHVzYl9zZ18qKCksIGFkZCBhc3luY2ggc3VwcG9ydCB0bworICogICAgICAgICAgdXNiX3NnXyooKS4gSXQgbWlnaHQgbm90IG1ha2UgdG9vIG11Y2ggc2Vuc2UgYXMgbW9zdCBvZgorICogICAgICAgICAgdGhlIHRpbWVzIHRoZSBNVFUgd2lsbCBiZSBzbWFsbGVyIHRoYW4gb25lIHBhZ2UuLi4KKyAqLworCisjaW5jbHVkZSAiaTE0ODB1LXdscC5oIgorI2RlZmluZSBEX0xPQ0FMIDUKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworZW51bSB7CisJLyogVGhpcyBpcyBvbmx5IGZvciBOZXh0IGFuZCBMYXN0IFRYIHBhY2tldHMgKi8KKwlpMTQ4MHVfTUFYX1BMX1NJWkUgPSBpMTQ4MHVfTUFYX0ZSR19TSVpFCisJCS0gc2l6ZW9mKHN0cnVjdCB1bnRkX2hkcl9yc3QpLAorfTsKKworLyoqIEZyZWUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhIGkxNDgwdSB0eCBjb250ZXh0LiAqLworc3RhdGljCit2b2lkIGkxNDgwdV90eF9mcmVlKHN0cnVjdCBpMTQ4MHVfdHggKnd0eCkKK3sKKwlrZnJlZSh3dHgtPmJ1Zik7CisJaWYgKHd0eC0+c2tiKQorCQlkZXZfa2ZyZWVfc2tiX2lycSh3dHgtPnNrYik7CisJdXNiX2ZyZWVfdXJiKHd0eC0+dXJiKTsKKwlrZnJlZSh3dHgpOworfQorCitzdGF0aWMKK3ZvaWQgaTE0ODB1X3R4X2Rlc3Ryb3koc3RydWN0IGkxNDgwdSAqaTE0ODB1LCBzdHJ1Y3QgaTE0ODB1X3R4ICp3dHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTE0ODB1LT50eF9saXN0X2xvY2ssIGZsYWdzKTsJLyogbm90IGFjdGl2ZSBhbnkgbW9yZSAqLworCWxpc3RfZGVsKCZ3dHgtPmxpc3Rfbm9kZSk7CisJaTE0ODB1X3R4X2ZyZWUod3R4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMTQ4MHUtPnR4X2xpc3RfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMKK3ZvaWQgaTE0ODB1X3R4X3VubGlua191cmJzKHN0cnVjdCBpMTQ4MHUgKmkxNDgwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpMTQ4MHVfdHggKnd0eCwgKm5leHQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTE0ODB1LT50eF9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod3R4LCBuZXh0LCAmaTE0ODB1LT50eF9saXN0LCBsaXN0X25vZGUpIHsKKwkJdXNiX3VubGlua191cmIod3R4LT51cmIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMTQ4MHUtPnR4X2xpc3RfbG9jaywgZmxhZ3MpOworfQorCisKKy8qKgorICogQ2FsbGJhY2sgZm9yIGEgY29tcGxldGVkIHR4IFVTQiBVUkIuCisgKgorICogVE9ETzoKKyAqCisgKiAtIEZJWE1FOiByZWNvdmVyIGVycm9ycyBtb3JlIGdyYWNlZnVsbHkKKyAqIC0gRklYTUU6IGhhbmRsZSBOQUtzIChJIGRvbnQgdGhpbmsgdGhleSBjb21lIGhlcmUpIGZvciBmbG93IGN0bAorICovCitzdGF0aWMKK3ZvaWQgaTE0ODB1X3R4X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgaTE0ODB1X3R4ICp3dHggPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGkxNDgwdSAqaTE0ODB1ID0gd3R4LT5pMTQ4MHU7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBpMTQ4MHUtPm5ldF9kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmkxNDgwdS0+dXNiX2lmYWNlLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpMTQ4MHUtPmxvY2ssIGZsYWdzKTsKKwkJaTE0ODB1LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWkxNDgwdS0+c3RhdHMudHhfYnl0ZXMgKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMTQ4MHUtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogTm90IGFuIGVycm9yLCBidXQgYSBjb250cm9sbGVkIHNpdHVhdGlvbjsgKi8KKwljYXNlIC1FTk9FTlQ6CQkvKiAod2Uga2lsbGVkIHRoZSBVUkIpLi4uc28sIG5vIGJyb2FkY2FzdCAqLworCQlkZXZfZGJnKGRldiwgIm5vdGlmIGVuZHA6IHJlc2V0L25vZW50ICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CisJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoJLyogZ29pbmcgYXdheSEgKi8KKwkJZGV2X2RiZyhkZXYsICJub3RpZiBlbmRwOiBkb3duICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiVFg6IHVua25vd24gVVJCIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlpZiAoZWRjX2luYygmaTE0ODB1LT50eF9lcnJvcnMsIEVEQ19NQVhfRVJST1JTLAorCQkJCQlFRENfRVJST1JfVElNRUZSQU1FKSkgeworCQkJZGV2X2VycihkZXYsICJUWDogbWF4IGFjY2VwdGFibGUgZXJyb3JzIGV4Y2VlZGVkLiIKKwkJCQkJIlJlc2V0IGRldmljZS5cbiIpOworCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRfZGV2KTsKKwkJCWkxNDgwdV90eF91bmxpbmtfdXJicyhpMTQ4MHUpOworCQkJd2xwX3Jlc2V0X2FsbCgmaTE0ODB1LT53bHApOworCQl9CisJCWJyZWFrOworCX0KKwlpMTQ4MHVfdHhfZGVzdHJveShpMTQ4MHUsIHd0eCk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZpMTQ4MHUtPnR4X2luZmxpZ2h0LmNvdW50KQorCSAgICA8PSBpMTQ4MHUtPnR4X2luZmxpZ2h0LnRocmVzaG9sZAorCSAgICAmJiBuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldF9kZXYpCisJICAgICYmIGkxNDgwdS0+dHhfaW5mbGlnaHQudGhyZXNob2xkICE9IDApIHsKKwkJaWYgKGRfdGVzdCgyKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkX3ByaW50ZigyLCBkZXYsICJSZXN0YXJ0IHF1ZXVlLiBcbiIpOworCQluZXRpZl9zdGFydF9xdWV1ZShuZXRfZGV2KTsKKwkJYXRvbWljX2luYygmaTE0ODB1LT50eF9pbmZsaWdodC5yZXN0YXJ0X2NvdW50KTsKKwl9CisJcmV0dXJuOworfQorCisKKy8qKgorICogR2l2ZW4gYSBidWZmZXIgdGhhdCBkb2Vzbid0IGZpdCBpbiBhIHNpbmdsZSBmcmFnbWVudCwgY3JlYXRlIGFuCisgKiBzY2F0dGVyL2dhdGhlciBzdHJ1Y3R1cmUgZm9yIGRlbGl2ZXJ5IHRvIHRoZSBVU0IgcGlwZS4KKyAqCisgKiBJbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgb2YgaTE0ODB1X3R4X2NyZWF0ZSgpLgorICoKKyAqIEB3dHg6CXR4IGRlc2NyaXB0b3IKKyAqIEBza2I6CXNrYiB0byBzZW5kCisgKiBAZ2ZwX21hc2s6CWdmcCBhbGxvY2F0aW9uIG1hc2sKKyAqIEByZXR1cm5zOiAgICBQb2ludGVyIHRvIEB3dHggaWYgb2ssIE5VTEwgb24gZXJyb3IuCisgKgorICogU29ycnksIFRPTyBMT05HIGEgZnVuY3Rpb24sIGJ1dCBicmVha2luZyBpdCB1cCBpcyBraW5kIG9mIGhhcmQKKyAqCisgKiBUaGlzIHdpbGwgYnJlYWsgdGhlIGJ1ZmZlciBpbiBjaHVua3Mgc21hbGxlciB0aGFuCisgKiBpMTQ4MHVfTUFYX0ZSR19TSVpFIChpbmNsdWRpbmcgdGhlIGhlYWRlcikgYW5kIGFkZCBwcm9wZXIgaGVhZGVycworICogdG8gZWFjaDoKKyAqCisgKiAgIDFzdCBoZWFkZXIgICAgICAgICAgIFwKKyAqICAgaTE0ODAgdHggaGVhZGVyICAgICAgfCAgZnJhZ21lbnQgMQorICogICBmcmFnbWVudCBkYXRhICAgICAgICAvCisgKiAgIG54dCBoZWFkZXIgICAgICAgICAgIFwgIGZyYWdtZW50IDIKKyAqICAgZnJhZ21lbnQgZGF0YSAgICAgICAgLworICogICAuLgorICogICAuLgorICogICBsYXN0IGhlYWRlciAgICAgICAgICBcICBmcmFnbWVudCAzCisgKiAgIGxhc3QgZnJhZ21lbnQgZGF0YSAgIC8KKyAqCisgKiBUaGlzIGRvZXMgbm90IGZpbGwgdGhlIGkxNDgwIFRYIGhlYWRlciwgaXQgaXMgbGVmdCB1cCB0byB0aGUKKyAqIGNhbGxlciB0byBkbyB0aGF0OyB5b3UgY2FuIGdldCBpdCBmcm9tIEB3dHgtPndscF90eF9oZHIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25zdW1lcyB0aGUgc2tiIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvci4KKyAqLworc3RhdGljCitpbnQgaTE0ODB1X3R4X2NyZWF0ZV9uKHN0cnVjdCBpMTQ4MHVfdHggKnd0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIGdmcF90IGdmcF9tYXNrKQoreworCWludCByZXN1bHQ7CisJdm9pZCAqcGw7CisJc2l6ZV90IHBsX3NpemU7CisKKwl2b2lkICpwbF9pdHIsICpidWZfaXRyOworCXNpemVfdCBwbF9zaXplX2xlZnQsIGZyZ3MsIHBsX3NpemVfMXN0LCBmcmdfcGxfc2l6ZSA9IDA7CisJc3RydWN0IHVudGRfaGRyXzFzdCAqdW50ZF9oZHJfMXN0OworCXN0cnVjdCB3bHBfdHhfaGRyICp3bHBfdHhfaGRyOworCXN0cnVjdCB1bnRkX2hkcl9yc3QgKnVudGRfaGRyX3JzdDsKKworCXd0eC0+c2tiID0gTlVMTDsKKwlwbCA9IHNrYi0+ZGF0YTsKKwlwbF9pdHIgPSBwbDsKKwlwbF9zaXplID0gc2tiLT5sZW47CisJcGxfc2l6ZV9sZWZ0ID0gcGxfc2l6ZTsJLyogcGF5bG9hZCBzaXplICovCisJLyogRmlyc3QgZnJhZ21lbnQ7IGZpdHMgYXMgbXVjaCBhcyBpMTQ4MHVfTUFYX0ZSR19TSVpFIG1pbnVzCisJICogdGhlIGhlYWRlcnMgKi8KKwlwbF9zaXplXzFzdCA9IGkxNDgwdV9NQVhfRlJHX1NJWkUKKwkJLSBzaXplb2Yoc3RydWN0IHVudGRfaGRyXzFzdCkgLSBzaXplb2Yoc3RydWN0IHdscF90eF9oZHIpOworCUJVR19PTihwbF9zaXplXzFzdCA+IHBsX3NpemUpOworCXBsX3NpemVfbGVmdCAtPSBwbF9zaXplXzFzdDsKKwkvKiBUaGUgcmVzdCBoYXZlIGFuIHNtYWxsZXIgaGVhZGVyIChubyBpMTQ4MCBUWCBoZWFkZXIpLiBXZQorCSAqIG5lZWQgdG8gYnJlYWsgdXAgdGhlIHBheWxvYWQgaW4gYmxvY2tzIHNtYWxsZXIgdGhhbgorCSAqIGkxNDgwdV9NQVhfUExfU0laRSAocGF5bG9hZCBleGNsdWRpbmcgaGVhZGVyKS4gKi8KKwlmcmdzID0gKHBsX3NpemVfbGVmdCArIGkxNDgwdV9NQVhfUExfU0laRSAtIDEpIC8gaTE0ODB1X01BWF9QTF9TSVpFOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbmV3IGJ1ZmZlci4gSW4gdGhpcyBuZXcgYnVmZmVyIHdlJ2xsCisJICogcGxhY2UgdGhlIGhlYWRlcnMgZm9sbG93ZWQgYnkgdGhlIGRhdGEgZnJhZ21lbnQsIGhlYWRlcnMsCisJICogZGF0YSBmcmFnbWVudHMsIGV0Yy4uCisJICovCisJcmVzdWx0ID0gLUVOT01FTTsKKwl3dHgtPmJ1Zl9zaXplID0gc2l6ZW9mKCp1bnRkX2hkcl8xc3QpCisJCSsgc2l6ZW9mKCp3bHBfdHhfaGRyKQorCQkrIGZyZ3MgKiBzaXplb2YoKnVudGRfaGRyX3JzdCkKKwkJKyBwbF9zaXplOworCXd0eC0+YnVmID0ga21hbGxvYyh3dHgtPmJ1Zl9zaXplLCBnZnBfbWFzayk7CisJaWYgKHd0eC0+YnVmID09IE5VTEwpCisJCWdvdG8gZXJyb3JfYnVmX2FsbG9jOworCisJYnVmX2l0ciA9IHd0eC0+YnVmOwkJLyogV2UgZ290IHRoZSBzcGFjZSwgbGV0J3MgZmlsbCBpdCB1cCAqLworCS8qIEZpbGwgMXN0IGZyYWdtZW50ICovCisJdW50ZF9oZHJfMXN0ID0gYnVmX2l0cjsKKwlidWZfaXRyICs9IHNpemVvZigqdW50ZF9oZHJfMXN0KTsKKwl1bnRkX2hkcl9zZXRfdHlwZSgmdW50ZF9oZHJfMXN0LT5oZHIsIGkxNDgwdV9QS1RfRlJBR18xU1QpOworCXVudGRfaGRyX3NldF9yeF90eCgmdW50ZF9oZHJfMXN0LT5oZHIsIDApOworCXVudGRfaGRyXzFzdC0+aGRyLmxlbiA9IGNwdV90b19sZTE2KHBsX3NpemUgKyBzaXplb2YoKndscF90eF9oZHIpKTsKKwl1bnRkX2hkcl8xc3QtPmZyYWdtZW50X2xlbiA9CisJCWNwdV90b19sZTE2KHBsX3NpemVfMXN0ICsgc2l6ZW9mKCp3bHBfdHhfaGRyKSk7CisJbWVtc2V0KHVudGRfaGRyXzFzdC0+cGFkZGluZywgMCwgc2l6ZW9mKHVudGRfaGRyXzFzdC0+cGFkZGluZykpOworCS8qIFNldCB1cCBpMTQ4MCBoZWFkZXIgaW5mbyAqLworCXdscF90eF9oZHIgPSB3dHgtPndscF90eF9oZHIgPSBidWZfaXRyOworCWJ1Zl9pdHIgKz0gc2l6ZW9mKCp3bHBfdHhfaGRyKTsKKwkvKiBDb3B5IHRoZSBmaXJzdCBmcmFnbWVudCAqLworCW1lbWNweShidWZfaXRyLCBwbF9pdHIsIHBsX3NpemVfMXN0KTsKKwlwbF9pdHIgKz0gcGxfc2l6ZV8xc3Q7CisJYnVmX2l0ciArPSBwbF9zaXplXzFzdDsKKworCS8qIE5vdyBkbyBlYWNoIHJlbWFpbmluZyBmcmFnbWVudCAqLworCXJlc3VsdCA9IC1FSU5WQUw7CisJd2hpbGUgKHBsX3NpemVfbGVmdCA+IDApIHsKKwkJZF9wcmludGYoNSwgTlVMTCwgIklUUiBIRFI6IHBsX3NpemVfbGVmdCAlenUgYnVmX2l0ciAlenVcbiIsCisJCQkgcGxfc2l6ZV9sZWZ0LCBidWZfaXRyIC0gd3R4LT5idWYpOworCQlpZiAoYnVmX2l0ciArIHNpemVvZigqdW50ZF9oZHJfcnN0KSAtIHd0eC0+YnVmCisJCSAgICA+IHd0eC0+YnVmX3NpemUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBubyBzcGFjZSBmb3IgaGVhZGVyXG4iKTsKKwkJCWdvdG8gZXJyb3JfYnVnOworCQl9CisJCWRfcHJpbnRmKDUsIE5VTEwsICJJVFIgSERSIDI6IHBsX3NpemVfbGVmdCAlenUgYnVmX2l0ciAlenVcbiIsCisJCQkgcGxfc2l6ZV9sZWZ0LCBidWZfaXRyIC0gd3R4LT5idWYpOworCQl1bnRkX2hkcl9yc3QgPSBidWZfaXRyOworCQlidWZfaXRyICs9IHNpemVvZigqdW50ZF9oZHJfcnN0KTsKKwkJaWYgKHBsX3NpemVfbGVmdCA+IGkxNDgwdV9NQVhfUExfU0laRSkgeworCQkJZnJnX3BsX3NpemUgPSBpMTQ4MHVfTUFYX1BMX1NJWkU7CisJCQl1bnRkX2hkcl9zZXRfdHlwZSgmdW50ZF9oZHJfcnN0LT5oZHIsIGkxNDgwdV9QS1RfRlJBR19OWFQpOworCQl9IGVsc2UgeworCQkJZnJnX3BsX3NpemUgPSBwbF9zaXplX2xlZnQ7CisJCQl1bnRkX2hkcl9zZXRfdHlwZSgmdW50ZF9oZHJfcnN0LT5oZHIsIGkxNDgwdV9QS1RfRlJBR19MU1QpOworCQl9CisJCWRfcHJpbnRmKDUsIE5VTEwsCisJCQkgIklUUiBQTDogcGxfc2l6ZV9sZWZ0ICV6dSBidWZfaXRyICV6dSBmcmdfcGxfc2l6ZSAlenVcbiIsCisJCQkgcGxfc2l6ZV9sZWZ0LCBidWZfaXRyIC0gd3R4LT5idWYsIGZyZ19wbF9zaXplKTsKKwkJdW50ZF9oZHJfc2V0X3J4X3R4KCZ1bnRkX2hkcl9yc3QtPmhkciwgMCk7CisJCXVudGRfaGRyX3JzdC0+aGRyLmxlbiA9IGNwdV90b19sZTE2KGZyZ19wbF9zaXplKTsKKwkJdW50ZF9oZHJfcnN0LT5wYWRkaW5nID0gMDsKKwkJaWYgKGJ1Zl9pdHIgKyBmcmdfcGxfc2l6ZSAtIHd0eC0+YnVmCisJCSAgICA+IHd0eC0+YnVmX3NpemUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBubyBzcGFjZSBmb3IgcGF5bG9hZFxuIik7CisJCQlnb3RvIGVycm9yX2J1ZzsKKwkJfQorCQltZW1jcHkoYnVmX2l0ciwgcGxfaXRyLCBmcmdfcGxfc2l6ZSk7CisJCWJ1Zl9pdHIgKz0gZnJnX3BsX3NpemU7CisJCXBsX2l0ciArPSBmcmdfcGxfc2l6ZTsKKwkJcGxfc2l6ZV9sZWZ0IC09IGZyZ19wbF9zaXplOworCQlkX3ByaW50Zig1LCBOVUxMLAorCQkJICJJVFIgUEwgMjogcGxfc2l6ZV9sZWZ0ICV6dSBidWZfaXRyICV6dSBmcmdfcGxfc2l6ZSAlenVcbiIsCisJCQkgcGxfc2l6ZV9sZWZ0LCBidWZfaXRyIC0gd3R4LT5idWYsIGZyZ19wbF9zaXplKTsKKwl9CisJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwlyZXR1cm4gMDsKKworZXJyb3JfYnVnOgorCXByaW50ayhLRVJOX0VSUgorCSAgICAgICAiQlVHOiBza2IgJXUgYnl0ZXNcbiIKKwkgICAgICAgIkJVRzogZnJnX3BsX3NpemUgJXpkIGkxNDgwdV9NQVhfRlJHX1NJWkUgJXVcbiIKKwkgICAgICAgIkJVRzogYnVmX2l0ciAlenUgYnVmX3NpemUgJXp1IHBsX3NpemVfbGVmdCAlenVcbiIsCisJICAgICAgIHNrYi0+bGVuLAorCSAgICAgICBmcmdfcGxfc2l6ZSwgaTE0ODB1X01BWF9GUkdfU0laRSwKKwkgICAgICAgYnVmX2l0ciAtIHd0eC0+YnVmLCB3dHgtPmJ1Zl9zaXplLCBwbF9zaXplX2xlZnQpOworCisJa2ZyZWUod3R4LT5idWYpOworZXJyb3JfYnVmX2FsbG9jOgorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBHaXZlbiBhIGJ1ZmZlciB0aGF0IGZpdHMgaW4gYSBzaW5nbGUgZnJhZ21lbnQsIGZpbGwgb3V0IGEgQHd0eAorICogc3RydWN0IGZvciB0cmFuc21pdHRpbmcgaXQgZG93biB0aGUgVVNCIHBpcGUuCisgKgorICogVXNlcyB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgc3BhY2UgcmVzZXJ2ZWQgaW4gZnJvbnQgb2YgdGhlIHNrYnVmZgorICogZm9yIGhhcmR3YXJlIGhlYWRlcnMgOl0KKyAqCisgKiBUaGlzIGRvZXMgbm90IGZpbGwgdGhlIGkxNDgwIFRYIGhlYWRlciwgaXQgaXMgbGVmdCB1cCB0byB0aGUKKyAqIGNhbGxlciB0byBkbyB0aGF0OyB5b3UgY2FuIGdldCBpdCBmcm9tIEB3dHgtPndscF90eF9oZHIuCisgKgorICogQHBsOgkJcG9pbnRlciB0byBwYXlsb2FkIGRhdGEKKyAqIEBwbF9zaXplOiAgICBzaXplIG9mIHRoZSBwYXl1bG9hZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY29uc3VtZSB0aGUgQHNrYi4KKyAqLworc3RhdGljCitpbnQgaTE0ODB1X3R4X2NyZWF0ZV8xKHN0cnVjdCBpMTQ4MHVfdHggKnd0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCB1bnRkX2hkcl9jbXAgKnVudGRfaGRyX2NtcDsKKwlzdHJ1Y3Qgd2xwX3R4X2hkciAqd2xwX3R4X2hkcjsKKworCXd0eC0+YnVmID0gTlVMTDsKKwl3dHgtPnNrYiA9IHNrYjsKKwlCVUdfT04oc2tiX2hlYWRyb29tKHNrYikgPCBzaXplb2YoKndscF90eF9oZHIpKTsKKwl3bHBfdHhfaGRyID0gKHZvaWQgKikgX19za2JfcHVzaChza2IsIHNpemVvZigqd2xwX3R4X2hkcikpOworCXd0eC0+d2xwX3R4X2hkciA9IHdscF90eF9oZHI7CisJQlVHX09OKHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKCp1bnRkX2hkcl9jbXApKTsKKwl1bnRkX2hkcl9jbXAgPSAodm9pZCAqKSBfX3NrYl9wdXNoKHNrYiwgc2l6ZW9mKCp1bnRkX2hkcl9jbXApKTsKKworCXVudGRfaGRyX3NldF90eXBlKCZ1bnRkX2hkcl9jbXAtPmhkciwgaTE0ODB1X1BLVF9GUkFHX0NNUCk7CisJdW50ZF9oZHJfc2V0X3J4X3R4KCZ1bnRkX2hkcl9jbXAtPmhkciwgMCk7CisJdW50ZF9oZHJfY21wLT5oZHIubGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4gLSBzaXplb2YoKnVudGRfaGRyX2NtcCkpOworCXVudGRfaGRyX2NtcC0+cGFkZGluZyA9IDA7CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBHaXZlbiBhIHNrYiB0byB0cmFuc21pdCwgbWFzc2FnZSBpdCB0byBiZWNvbWUgcGFsYXRhYmxlIGZvciB0aGUgVFggcGlwZQorICoKKyAqIFRoaXMgd2lsbCBicmVhayB0aGUgYnVmZmVyIGluIGNodW5rcyBzbWFsbGVyIHRoYW4KKyAqIGkxNDgwdV9NQVhfRlJHX1NJWkUgYW5kIGFkZCBwcm9wZXIgaGVhZGVycyB0byBlYWNoLgorICoKKyAqICAgMXN0IGhlYWRlciAgICAgICAgICAgXAorICogICBpMTQ4MCB0eCBoZWFkZXIgICAgICB8ICBmcmFnbWVudCAxCisgKiAgIGZyYWdtZW50IGRhdGEgICAgICAgIC8KKyAqICAgbnh0IGhlYWRlciAgICAgICAgICAgXCAgZnJhZ21lbnQgMgorICogICBmcmFnbWVudCBkYXRhICAgICAgICAvCisgKiAgIC4uCisgKiAgIC4uCisgKiAgIGxhc3QgaGVhZGVyICAgICAgICAgIFwgIGZyYWdtZW50IDMKKyAqICAgbGFzdCBmcmFnbWVudCBkYXRhICAgLworICoKKyAqIEVhY2ggZnJhZ21lbnQgd2lsbCBiZSBhbHdheXMgc21hbGxlciBvciBlcXVhbCB0byBpMTQ4MHVfTUFYX0ZSR19TSVpFLgorICoKKyAqIElmIHRoZSBmaXJzdCBmcmFnbWVudCBpcyBzbWFsbGVyIHRoYW4gaTE0ODB1X01BWF9GUkdfU0laRSwgdGhlbiB0aGUKKyAqIGZvbGxvd2luZyBpcyBjb21wb3NlZDoKKyAqCisgKiAgIGNvbXBsZXRlIGhlYWRlciAgICAgIFwKKyAqICAgaTE0ODAgdHggaGVhZGVyICAgICAgfCBzaW5nbGUgZnJhZ21lbnQKKyAqICAgcGFja2V0IGRhdGEgICAgICAgICAgLworICoKKyAqIFdlIHdlcmUgZ29pbmcgdG8gdXNlIHMvZyBzdXBwb3J0LCBidXQgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIGlzCisgKiBzeW5jaCBhbmQgYXQgdGhlIGVuZCB0aGVyZSBpcyBwbGVudHkgb2Ygb3ZlcmhlYWQgdG8gZG8gaXQsIGl0CisgKiBkaWRuJ3Qgc2VlbSB0aGF0IHdvcnRoIGZvciBkYXRhIHRoYXQgaXMgZ29pbmcgdG8gYmUgc21hbGxlciB0aGFuCisgKiBvbmUgcGFnZS4KKyAqLworc3RhdGljCitzdHJ1Y3QgaTE0ODB1X3R4ICppMTQ4MHVfdHhfY3JlYXRlKHN0cnVjdCBpMTQ4MHUgKmkxNDgwdSwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkOworCWludCB1c2JfcGlwZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IGkxNDgwdV90eCAqd3R4OworCWNvbnN0IHNpemVfdCBwbF9tYXhfc2l6ZSA9CisJCWkxNDgwdV9NQVhfRlJHX1NJWkUgLSBzaXplb2Yoc3RydWN0IHVudGRfaGRyX2NtcCkKKwkJLSBzaXplb2Yoc3RydWN0IHdscF90eF9oZHIpOworCisJd3R4ID0ga21hbGxvYyhzaXplb2YoKnd0eCksIGdmcF9tYXNrKTsKKwlpZiAod3R4ID09IE5VTEwpCisJCWdvdG8gZXJyb3Jfd3R4X2FsbG9jOworCXd0eC0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBnZnBfbWFzayk7CisJaWYgKHd0eC0+dXJiID09IE5VTEwpCisJCWdvdG8gZXJyb3JfdXJiX2FsbG9jOworCWVwZCA9ICZpMTQ4MHUtPnVzYl9pZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzJdLmRlc2M7CisJdXNiX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUoaTE0ODB1LT51c2JfZGV2LCBlcGQtPmJFbmRwb2ludEFkZHJlc3MpOworCS8qIEZpdHMgaW4gYSBzaW5nbGUgY29tcGxldGUgcGFja2V0IG9yIG5lZWQgdG8gc3BsaXQ/ICovCisJaWYgKHNrYi0+bGVuID4gcGxfbWF4X3NpemUpIHsKKwkJcmVzdWx0ID0gaTE0ODB1X3R4X2NyZWF0ZV9uKHd0eCwgc2tiLCBnZnBfbWFzayk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBlcnJvcl9jcmVhdGU7CisJCXVzYl9maWxsX2J1bGtfdXJiKHd0eC0+dXJiLCBpMTQ4MHUtPnVzYl9kZXYsIHVzYl9waXBlLAorCQkJCSAgd3R4LT5idWYsIHd0eC0+YnVmX3NpemUsIGkxNDgwdV90eF9jYiwgd3R4KTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBpMTQ4MHVfdHhfY3JlYXRlXzEod3R4LCBza2IsIGdmcF9tYXNrKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlnb3RvIGVycm9yX2NyZWF0ZTsKKwkJdXNiX2ZpbGxfYnVsa191cmIod3R4LT51cmIsIGkxNDgwdS0+dXNiX2RldiwgdXNiX3BpcGUsCisJCQkJICBza2ItPmRhdGEsIHNrYi0+bGVuLCBpMTQ4MHVfdHhfY2IsIHd0eCk7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZpMTQ4MHUtPnR4X2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZ3dHgtPmxpc3Rfbm9kZSwgJmkxNDgwdS0+dHhfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTE0ODB1LT50eF9saXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gd3R4OworCitlcnJvcl9jcmVhdGU6CisJa2ZyZWUod3R4LT51cmIpOworZXJyb3JfdXJiX2FsbG9jOgorCWtmcmVlKHd0eCk7CitlcnJvcl93dHhfYWxsb2M6CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogQWN0dWFsIGZyYWdtZW50YXRpb24gYW5kIHRyYW5zbWlzc2lvbiBvZiBmcmFtZQorICoKKyAqIEB3bHA6ICBXTFAgc3Vic3RhY2sgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBza2I6ICBUbyBiZSB0cmFuc21pdHRlZAorICogQGRzdDogIERldmljZSBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uCisgKiBAcmV0dXJuczogMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSBjYWxsZWQgZGlyZWN0bHkgKG5vdCBqdXN0IGZyb20KKyAqIGhhcmRfc3RhcnRfeG1pdCksIHNvIHdlIGFsc28gY2hlY2sgaGVyZSBpZiB0aGUgaW50ZXJmYWNlIGlzIHVwIGJlZm9yZQorICogdGFraW5nIHNlbmRpbmcgYW55dGhpbmcuCisgKi8KK2ludCBpMTQ4MHVfeG1pdF9mcmFtZShzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKmRzdCkKK3sKKwlpbnQgcmVzdWx0ID0gLUVOWElPOworCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IGNvbnRhaW5lcl9vZih3bHAsIHN0cnVjdCBpMTQ4MHUsIHdscCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmkxNDgwdS0+dXNiX2lmYWNlLT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBpMTQ4MHUtPm5ldF9kZXY7CisJc3RydWN0IGkxNDgwdV90eCAqd3R4OworCXN0cnVjdCB3bHBfdHhfaGRyICp3bHBfdHhfaGRyOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRldl9iY2FzdFsyXSA9IHsgMHhmZiwgMHhmZiB9OworI2lmIDAKKwlpbnQgbG9ja3VwID0gNTA7CisjZW5kaWYKKworCWRfZm5zdGFydCg2LCBkZXYsICIoc2tiICVwICgldSksIG5ldF9kZXYgJXApXG4iLCBza2IsIHNrYi0+bGVuLAorCQkgIG5ldF9kZXYpOworCUJVR19PTihpMTQ4MHUtPndscC5yYyA9PSBOVUxMKTsKKwlpZiAoKG5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQlnb3RvIG91dDsKKwlyZXN1bHQgPSAtRUJVU1k7CisJaWYgKGF0b21pY19yZWFkKCZpMTQ4MHUtPnR4X2luZmxpZ2h0LmNvdW50KSA+PSBpMTQ4MHUtPnR4X2luZmxpZ2h0Lm1heCkgeworCQlpZiAoZF90ZXN0KDIpICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRfcHJpbnRmKDIsIGRldiwgIk1heCBmcmFtZXMgaW4gZmxpZ2h0ICIKKwkJCQkgInN0b3BwaW5nIHF1ZXVlLlxuIik7CisJCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CisJCWdvdG8gZXJyb3JfbWF4X2luZmxpZ2h0OworCX0KKwlyZXN1bHQgPSAtRU5PTUVNOworCXd0eCA9IGkxNDgwdV90eF9jcmVhdGUoaTE0ODB1LCBza2IsIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSh3dHggPT0gTlVMTCkpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAiVFg6IG5vIG1lbW9yeSBmb3IgV0xQIFRYIFVSQiwiCisJCQkJImRyb3BwaW5nIHBhY2tldCAoaW4gZmxpZ2h0ICVkKVxuIiwKKwkJCQlhdG9taWNfcmVhZCgmaTE0ODB1LT50eF9pbmZsaWdodC5jb3VudCkpOworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOworCQlnb3RvIGVycm9yX3d0eF9hbGxvYzsKKwl9CisJd3R4LT5pMTQ4MHUgPSBpMTQ4MHU7CisJLyogRmlsbCBvdXQgdGhlIGkxNDgwIGhlYWRlcjsgQGkxNDgwdS0+ZGVmX3R4X2hkciByZWFkIHdpdGhvdXQKKwkgKiBsb2NraW5nLiBXZSBkbyBzbyBiZWNhdXNlIHRoZXkgYXJlIGtpbmQgb2Ygb3J0aG9nb25hbCB0bworCSAqIGVhY2ggb3RoZXIgKGFuZCB0aHVzIG5vdCBjaGFuZ2VkIGluIGFuIGF0b21pYyBiYXRjaCkuCisJICogVGhlIEVUSCBoZWFkZXIgaXMgcmlnaHQgYWZ0ZXIgdGhlIFdMUCBUWCBoZWFkZXIuICovCisJd2xwX3R4X2hkciA9IHd0eC0+d2xwX3R4X2hkcjsKKwkqd2xwX3R4X2hkciA9IGkxNDgwdS0+b3B0aW9ucy5kZWZfdHhfaGRyOworCXdscF90eF9oZHItPmRzdGFkZHIgPSAqZHN0OworCWlmICghbWVtY21wKCZ3bHBfdHhfaGRyLT5kc3RhZGRyLCBkZXZfYmNhc3QsIHNpemVvZihkZXZfYmNhc3QpKQorCSAgICAmJiAod2xwX3R4X2hkcl9kZWxpdmVyeV9pZF90eXBlKHdscF90eF9oZHIpICYgV0xQX0RSUCkpIHsKKwkJLypCcm9hZGNhc3QgbWVzc2FnZSBkaXJlY3RlZCB0byBEUlAgaG9zdC4gU2VuZCBhcyBiZXN0IGVmZm9ydAorCQkgKiBvbiBQQ0EuICovCisJCXdscF90eF9oZHJfc2V0X2RlbGl2ZXJ5X2lkX3R5cGUod2xwX3R4X2hkciwgaTE0ODB1LT5vcHRpb25zLnBjYV9iYXNlX3ByaW9yaXR5KTsKKwl9CisKKyNpZiAwCisJZGV2X2luZm8oZGV2LCAiVFggZGVsaXZlcmluZyBza2IgLT4gVVNCLCAlenUgYnl0ZXNcbiIsIHNrYi0+bGVuKTsKKwlkdW1wX2J5dGVzKGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiA+IDcyID8gNzIgOiBza2ItPmxlbik7CisjZW5kaWYKKyNpZiAwCisJLyogc2ltdWxhdGVzIGEgZGV2aWNlIGxvY2t1cCBhZnRlciBldmVyeSBsb2NrdXAjIHBhY2tldHMgKi8KKwlpZiAobG9ja3VwICYmICgoaTE0ODB1LT5zdGF0cy50eF9wYWNrZXRzICsgMSkgJSBsb2NrdXApID09IDApIHsKKwkJLyogU2ltdWxhdGUgYSBkcm9wcGVkIHRyYW5zbWl0IGludGVycnVwdCAqLworCQluZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CisJCWRldl9lcnIoZGV2LCAiU2ltdWxhdGUgbG9ja3VwIGF0ICVsZFxuIiwgamlmZmllcyk7CisJCXJldHVybiByZXN1bHQ7CisJfQorI2VuZGlmCisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3dHgtPnVyYiwgR0ZQX0FUT01JQyk7CQkvKiBHbyBiYWJ5ICovCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJUWDogY2Fubm90IHN1Ym1pdCBVUkI6ICVkXG4iLCByZXN1bHQpOworCQkvKiBXZSBsZWF2ZSB0aGUgZnJlZWluZyBvZiBza2IgdG8gY2FsbGluZyBmdW5jdGlvbiAqLworCQl3dHgtPnNrYiA9IE5VTEw7CisJCWdvdG8gZXJyb3JfdHhfdXJiX3N1Ym1pdDsKKwl9CisJYXRvbWljX2luYygmaTE0ODB1LT50eF9pbmZsaWdodC5jb3VudCk7CisJbmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWRfZm5lbmQoNiwgZGV2LCAiKHNrYiAlcCAoJXUpLCBuZXRfZGV2ICVwKSA9ICVkXG4iLCBza2IsIHNrYi0+bGVuLAorCQluZXRfZGV2LCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7CisKK2Vycm9yX3R4X3VyYl9zdWJtaXQ6CisJaTE0ODB1X3R4X2Rlc3Ryb3koaTE0ODB1LCB3dHgpOworZXJyb3Jfd3R4X2FsbG9jOgorZXJyb3JfbWF4X2luZmxpZ2h0Ogorb3V0OgorCWRfZm5lbmQoNiwgZGV2LCAiKHNrYiAlcCAoJXUpLCBuZXRfZGV2ICVwKSA9ICVkXG4iLCBza2IsIHNrYi0+bGVuLAorCQluZXRfZGV2LCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBUcmFuc21pdCBhbiBza2IgIENhbGxlZCB3aGVuIGFuIHNrYnVmIGhhcyB0byBiZSB0cmFuc21pdHRlZAorICoKKyAqIFRoZSBza2IgaXMgZmlyc3QgcGFzc2VkIHRvIFdMUCBzdWJzdGFjayB0byBlbnN1cmUgdGhpcyBpcyBhIHZhbGlkCisgKiBmcmFtZS4gSWYgdmFsaWQgdGhlIGRldmljZSBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uIHdpbGwgYmUgZmlsbGVkIGFuZAorICogdGhlIFdMUCBoZWFkZXIgcHJlcGVuZGVkIHRvIHRoZSBza2IuIElmIHRoaXMgc3RlcCBmYWlscyB3ZSBmYWtlIHNlbmRpbmcKKyAqIHRoZSBmcmFtZSwgaWYgd2UgcmV0dXJuIGFuIGVycm9yIHRoZSBuZXR3b3JrIHN0YWNrIHdpbGwganVzdCBrZWVwIHRyeWluZy4KKyAqCisgKiBCcm9hZGNhc3QgZnJhbWVzIGluc2lkZSBhIFdTUyBuZWVkcyB0byBiZSB0cmVhdGVkIHNwZWNpYWwgYXMgbXVsdGljYXN0IGlzCisgKiBub3Qgc3VwcG9ydGVkLiBBIGJyb2FkY2FzdCBmcmFtZSBpcyBzZW50IGFzIHVuaWNhc3QgdG8gZWFjaCBtZW1iZXIgb2YgdGhlCisgKiBXU1MgLSB0aGlzIGlzIGRvbmUgYnkgdGhlIFdMUCBzdWJzdGFjayB3aGVuIGl0IGZpbmRzIGEgYnJvYWRjYXN0IGZyYW1lLgorICogU28sIHdlIHRlc3QgaWYgdGhlIFdMUCBzdWJzdGFjayB0b29rIG92ZXIgdGhlIHNrYiBhbmQgb25seSB0cmFuc21pdCBpdAorICogaWYgaXQgaGFzIG5vdCAoYmVlbiB0YWtlbiBvdmVyKS4KKyAqCisgKiBAbmV0X2Rldi0+eG1pdF9sb2NrIGlzIGhlbGQKKyAqLworaW50IGkxNDgwdV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTE0ODB1LT51c2JfaWZhY2UtPmRldjsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIGRzdDsKKworCWRfZm5zdGFydCg2LCBkZXYsICIoc2tiICVwICgldSksIG5ldF9kZXYgJXApXG4iLCBza2IsIHNrYi0+bGVuLAorCQkgIG5ldF9kZXYpOworCUJVR19PTihpMTQ4MHUtPndscC5yYyA9PSBOVUxMKTsKKwlpZiAoKG5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQlnb3RvIGVycm9yOworCXJlc3VsdCA9IHdscF9wcmVwYXJlX3R4X2ZyYW1lKGRldiwgJmkxNDgwdS0+d2xwLCBza2IsICZkc3QpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQIHZlcmlmaWNhdGlvbiBvZiBUWCBmcmFtZSBmYWlsZWQgKCVkKS4gIgorCQkJIkRyb3BwaW5nIHBhY2tldC5cbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3I7CisJfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeworCQlkX3ByaW50Zig2LCBkZXYsICJXTFAgd2lsbCB0cmFuc21pdCBmcmFtZS4gXG4iKTsKKwkJLyogdHJhbnNfc3RhcnQgdGltZSB3aWxsIGJlIHNldCB3aGVuIFdMUCBhY3R1YWxseSB0cmFuc21pdHMKKwkJICogdGhlIGZyYW1lICovCisJCWdvdG8gb3V0OworCX0KKwlkX3ByaW50Zig2LCBkZXYsICJUcmFuc21pdHRpbmcgZnJhbWUuIFxuIik7CisJcmVzdWx0ID0gaTE0ODB1X3htaXRfZnJhbWUoJmkxNDgwdS0+d2xwLCBza2IsICZkc3QpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRnJhbWUgVFggZmFpbGVkICglZCkuXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yOworCX0KKwlkX2ZuZW5kKDYsIGRldiwgIihza2IgJXAgKCV1KSwgbmV0X2RldiAlcCkgPSAlZFxuIiwgc2tiLCBza2ItPmxlbiwKKwkJbmV0X2RldiwgcmVzdWx0KTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworZXJyb3I6CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlpMTQ4MHUtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKK291dDoKKwlkX2ZuZW5kKDYsIGRldiwgIihza2IgJXAgKCV1KSwgbmV0X2RldiAlcCkgPSAlZFxuIiwgc2tiLCBza2ItPmxlbiwKKwkJbmV0X2RldiwgcmVzdWx0KTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisKKy8qKgorICogQ2FsbGVkIHdoZW4gYSBwa3QgdHJhbnNtaXNzaW9uIGRvZXNuJ3QgY29tcGxldGUgaW4gYSByZWFzb25hYmxlIHBlcmlvZAorICogRGV2aWNlIHJlc2V0IG1heSBzbGVlcCAtIGRvIGl0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgKGRlbGF5ZWQpCisgKi8KK3ZvaWQgaTE0ODB1X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJc3RydWN0IGkxNDgwdSAqaTE0ODB1ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisKKwl3bHBfcmVzZXRfYWxsKCZpMTQ4MHUtPndscCk7Cit9CisKKwordm9pZCBpMTQ4MHVfdHhfcmVsZWFzZShzdHJ1Y3QgaTE0ODB1ICppMTQ4MHUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaTE0ODB1X3R4ICp3dHgsICpuZXh0OworCWludCBjb3VudCA9IDAsIGVtcHR5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmkxNDgwdS0+dHhfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHd0eCwgbmV4dCwgJmkxNDgwdS0+dHhfbGlzdCwgbGlzdF9ub2RlKSB7CisJCWNvdW50Kys7CisJCXVzYl91bmxpbmtfdXJiKHd0eC0+dXJiKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTE0ODB1LT50eF9saXN0X2xvY2ssIGZsYWdzKTsKKwljb3VudCA9IGNvdW50KjEwOyAvKiBpMTQ4MHV0IDIwMG1zIHBlciB1bmxpbmtlZCB1cmIgKGludGVydmFscyBvZiAyMG1zKSAqLworCS8qCisJICogV2UgZG9uJ3QgbGlrZSB0aGlzIHNvbGx1dGlvbiB0b28gbXVjaCAoZGlydHkgYXMgaXQgaXMpLCBidXQKKwkgKiBpdCBpcyBjaGVhcGVyIHRoYW4gcHV0dGluZyBhIHJlZmNvdW50IG9uIGVhY2ggaTE0ODB1X3R4IGFuZAorCSAqIGkxNDgwdXRpbmcgZm9yIGFsbCBvZiB0aGVtIHRvIGdvIGF3YXkuLi4KKwkgKgorCSAqIENhbGxlZCB3aGVuIG5vIG1vcmUgcGFja2V0cyBjYW4gYmUgYWRkZWQgdG8gdHhfbGlzdAorCSAqIHNvIGNhbiBpMTQ4MHV0IGZvciBpdCB0byBiZSBlbXB0eS4KKwkgKi8KKwl3aGlsZSAoMSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaTE0ODB1LT50eF9saXN0X2xvY2ssIGZsYWdzKTsKKwkJZW1wdHkgPSBsaXN0X2VtcHR5KCZpMTQ4MHUtPnR4X2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMTQ4MHUtPnR4X2xpc3RfbG9jaywgZmxhZ3MpOworCQlpZiAoZW1wdHkpCisJCQlicmVhazsKKwkJY291bnQtLTsKKwkJQlVHX09OKGNvdW50ID09IDApOworCQltc2xlZXAoMjApOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2llLmMgYi9kcml2ZXJzL3V3Yi9pZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNmYzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi9pZS5jCkBAIC0wLDAgKzEsNTQxIEBACisvKgorICogVWx0cmEgV2lkZSBCYW5kCisgKiBJbmZvcm1hdGlvbiBFbGVtZW50IEhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKiBSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICovCisKKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKyNkZWZpbmUgRF9MT0NBTCAwCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKy8qKgorICogdXdiX2llX25leHQgLSBnZXQgdGhlIG5leHQgSUUgaW4gYSBidWZmZXIKKyAqIEBwdHI6IHN0YXJ0IG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgSUUgZGF0YQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqCisgKiBCb3RoIEBwdHIgYW5kIEBsZW4gYXJlIHVwZGF0ZWQgc28gc3Vic2VxdWVudCBjYWxscyB0byB1d2JfaWVfbmV4dCgpCisgKiB3aWxsIGdldCB0aGUgbmV4dCBJRS4KKyAqCisgKiBOVUxMIGlzIHJldHVybmVkIChhbmQgQHB0ciBhbmQgQGxlbiB3aWxsIG5vdCBiZSB1cGRhdGVkKSBpZiB0aGVyZQorICogYXJlIG5vIG1vcmUgSUVzIGluIHRoZSBidWZmZXIgb3IgdGhlIGJ1ZmZlciBpcyB0b28gc2hvcnQuCisgKi8KK3N0cnVjdCB1d2JfaWVfaGRyICp1d2JfaWVfbmV4dCh2b2lkICoqcHRyLCBzaXplX3QgKmxlbikKK3sKKwlzdHJ1Y3QgdXdiX2llX2hkciAqaGRyOworCXNpemVfdCBpZV9sZW47CisKKwlpZiAoKmxlbiA8IHNpemVvZihzdHJ1Y3QgdXdiX2llX2hkcikpCisJCXJldHVybiBOVUxMOworCisJaGRyID0gKnB0cjsKKwlpZV9sZW4gPSBzaXplb2Yoc3RydWN0IHV3Yl9pZV9oZHIpICsgaGRyLT5sZW5ndGg7CisKKwlpZiAoKmxlbiA8IGllX2xlbikKKwkJcmV0dXJuIE5VTEw7CisKKwkqcHRyICs9IGllX2xlbjsKKwkqbGVuIC09IGllX2xlbjsKKworCXJldHVybiBoZHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfaWVfbmV4dCk7CisKKy8qKgorICogR2V0IHRoZSBJRXMgdGhhdCBhIHJhZGlvIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBpbiBpdHMgYmVhY29uCisgKgorICogQHV3Yl9yYzogIFVXQiBSYWRpbyBDb250cm9sbGVyCisgKiBAcmV0dXJuczogU2l6ZSByZWFkIGZyb20gdGhlIHN5c3RlbQorICoKKyAqIFdlIGRvbid0IG5lZWQgdG8gbG9jayB0aGUgdXdiX3JjJ3MgbXV0ZXggYmVjYXVzZSB3ZSBkb24ndCBtb2RpZnkKKyAqIGFueXRoaW5nLiBPbmNlIGRvbmUgd2l0aCB0aGUgaWVkYXRhIGJ1ZmZlciwgY2FsbAorICogdXdiX3JjX2llX3JlbGVhc2UoaWVkYXRhKS4gRG9uJ3QgY2FsbCBrZnJlZSBvbiBpdC4KKyAqLworc3NpemVfdCB1d2JfcmNfZ2V0X2llKHN0cnVjdCB1d2JfcmMgKnV3Yl9yYywgc3RydWN0IHV3Yl9yY19ldnRfZ2V0X2llICoqcGdldF9pZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXdiX3JjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3QgdXdiX3JjY2IgKmNtZCA9IE5VTEw7CisJc3RydWN0IHV3Yl9yY2ViICpyZXBseSA9IE5VTEw7CisJc3RydWN0IHV3Yl9yY19ldnRfZ2V0X2llICpnZXRfaWU7CisKKwlkX2Zuc3RhcnQoMywgZGV2LCAiKCVwLCAlcClcbiIsIHV3Yl9yYywgcGdldF9pZSk7CisJcmVzdWx0ID0gLUVOT01FTTsKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlnb3RvIGVycm9yX2t6YWxsb2M7CisJY21kLT5iQ29tbWFuZFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJY21kLT53Q29tbWFuZCA9IGNwdV90b19sZTE2KFVXQl9SQ19DTURfR0VUX0lFKTsKKwlyZXN1bHQgPSB1d2JfcmNfdmNtZCh1d2JfcmMsICJHRVRfSUUiLCBjbWQsIHNpemVvZigqY21kKSwKKwkJCSAgICAgVVdCX1JDX0NFVF9HRU5FUkFMLCBVV0JfUkNfQ01EX0dFVF9JRSwKKwkJCSAgICAgJnJlcGx5KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJZ2V0X2llID0gY29udGFpbmVyX29mKHJlcGx5LCBzdHJ1Y3QgdXdiX3JjX2V2dF9nZXRfaWUsIHJjZWIpOworCWlmIChyZXN1bHQgPCBzaXplb2YoKmdldF9pZSkpIHsKKwkJZGV2X2VycihkZXYsICJub3QgZW5vdWdoIGRhdGEgcmV0dXJuZWQgZm9yIGRlY29kaW5nIEdFVCBJRSAiCisJCQkiKCV6dSBieXRlcyByZWNlaXZlZCB2cyAlenUgbmVlZGVkKVxuIiwKKwkJCXJlc3VsdCwgc2l6ZW9mKCpnZXRfaWUpKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKHJlc3VsdCA8IHNpemVvZigqZ2V0X2llKSArIGxlMTZfdG9fY3B1KGdldF9pZS0+d0lFTGVuZ3RoKSkgeworCQlkZXZfZXJyKGRldiwgIm5vdCBlbm91Z2ggZGF0YSByZXR1cm5lZCBmb3IgZGVjb2RpbmcgR0VUIElFICIKKwkJCSJwYXlsb2FkICglenUgYnl0ZXMgcmVjZWl2ZWQgdnMgJXp1IG5lZWRlZClcbiIsIHJlc3VsdCwKKwkJCXNpemVvZigqZ2V0X2llKSArIGxlMTZfdG9fY3B1KGdldF9pZS0+d0lFTGVuZ3RoKSk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlCisJCSpwZ2V0X2llID0gZ2V0X2llOworZXJyb3JfY21kOgorCWtmcmVlKGNtZCk7CitlcnJvcl9remFsbG9jOgorCWRfZm5lbmQoMywgZGV2LCAiKCVwLCAlcCkgPSAlZFxuIiwgdXdiX3JjLCBwZ2V0X2llLCAoaW50KXJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yY19nZXRfaWUpOworCisKKy8qCisgKiBHaXZlbiBhIHBvaW50ZXIgdG8gYW4gSUUsIHByaW50IGl0IGluIEFTQ0lJL2hleCBmb2xsb3dlZCBieSBhIG5ldyBsaW5lCisgKgorICogQGllX2hkcjogcG9pbnRlciB0byB0aGUgSUUgaGVhZGVyLiBMZW5ndGggaXMgaW4gdGhlcmUsIGFuZCBpdCBpcworICogICAgICAgICAgZ3VhcmFudGVlZCB0aGF0IHRoZSBpZV9oZHItPmxlbmd0aCBieXRlcyBmb2xsb3dpbmcgaXQgYXJlCisgKiAgICAgICAgICBzYWZlbHkgYWNjZXNpYmxlLgorICoKKyAqIEBfZGF0YTogY29udGV4dCBkYXRhIHBhc3NlZCBmcm9tIHV3Yl9pZV9mb3JfZWFjaCgpLCBhbiBzdHJ1Y3Qgb3V0cHV0X2N0eAorICovCitpbnQgdXdiX2llX2R1bXBfaGV4KHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2LCBjb25zdCBzdHJ1Y3QgdXdiX2llX2hkciAqaWVfaGRyLAorCQkgICAgc2l6ZV90IG9mZnNldCwgdm9pZCAqX2N0eCkKK3sKKwlzdHJ1Y3QgdXdiX2J1Zl9jdHggKmN0eCA9IF9jdHg7CisJY29uc3QgdTggKnBsID0gKHZvaWQgKikoaWVfaGRyICsgMSk7CisJdTggcGxfaXRyOworCisJY3R4LT5ieXRlcyArPSBzY25wcmludGYoY3R4LT5idWYgKyBjdHgtPmJ5dGVzLCBjdHgtPnNpemUgLSBjdHgtPmJ5dGVzLAorCQkJCSIlMDJ4ICUwMnggIiwgKHVuc2lnbmVkKSBpZV9oZHItPmVsZW1lbnRfaWQsCisJCQkJKHVuc2lnbmVkKSBpZV9oZHItPmxlbmd0aCk7CisJcGxfaXRyID0gMDsKKwl3aGlsZSAocGxfaXRyIDwgaWVfaGRyLT5sZW5ndGggJiYgY3R4LT5ieXRlcyA8IGN0eC0+c2l6ZSkKKwkJY3R4LT5ieXRlcyArPSBzY25wcmludGYoY3R4LT5idWYgKyBjdHgtPmJ5dGVzLAorCQkJCQljdHgtPnNpemUgLSBjdHgtPmJ5dGVzLAorCQkJCQkiJTAyeCAiLCAodW5zaWduZWQpIHBsW3BsX2l0cisrXSk7CisJaWYgKGN0eC0+Ynl0ZXMgPCBjdHgtPnNpemUpCisJCWN0eC0+YnVmW2N0eC0+Ynl0ZXMrK10gPSAnXG4nOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX2llX2R1bXBfaGV4KTsKKworCisvKioKKyAqIFZlcmlmeSB0aGF0IGEgcG9pbnRlciBpbiBhIGJ1ZmZlciBwb2ludHMgdG8gdmFsaWQgSUUKKyAqCisgKiBAc3RhcnQ6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYnVmZmVyIGluIHdoaWNoIElFIGFwcGVhcnMKKyAqIEBpdHI6ICAgcG9pbnRlciB0byBJRSBpbnNpZGUgYnVmZmVyIHRoYXQgd2lsbCBiZSB2ZXJpZmllZAorICogQHRvcDogICBwb2ludGVyIHRvIGVuZCBvZiBidWZmZXIKKyAqCisgKiBAcmV0dXJuczogMCBpZiBJRSBpcyB2YWxpZCwgPDAgb3RoZXJ3aXNlCisgKgorICogVmVyaWZpY2F0aW9uIGludm9sdmVzIGNoZWNraW5nIHRoYXQgdGhlIGJ1ZmZlciBjYW4gY29udGFpbiBhCisgKiBoZWFkZXIgYW5kIHRoZSBhbW91bnQgb2YgZGF0YSByZXBvcnRlZCBpbiB0aGUgSUUgaGVhZGVyIGNhbiBiZSBmb3VuZCBpbgorICogdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljCitpbnQgdXdiX3JjX2llX3ZlcmlmeShzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiwgY29uc3Qgdm9pZCAqc3RhcnQsCisJCSAgICAgY29uc3Qgdm9pZCAqaXRyLCBjb25zdCB2b2lkICp0b3ApCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnV3Yl9kZXYtPmRldjsKKwljb25zdCBzdHJ1Y3QgdXdiX2llX2hkciAqaWVfaGRyOworCisJaWYgKHRvcCAtIGl0ciA8IHNpemVvZigqaWVfaGRyKSkgeworCQlkZXZfZXJyKGRldiwgIkJhZCBJRTogbm8gZGF0YSB0byBkZWNvZGUgaGVhZGVyICIKKwkJCSIoJXp1IGJ5dGVzIGxlZnQgdnMgJXp1IG5lZWRlZCkgYXQgb2Zmc2V0ICV6dVxuIiwKKwkJCXRvcCAtIGl0ciwgc2l6ZW9mKCppZV9oZHIpLCBpdHIgLSBzdGFydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZV9oZHIgPSBpdHI7CisJaXRyICs9IHNpemVvZigqaWVfaGRyKTsKKwlpZiAodG9wIC0gaXRyIDwgaWVfaGRyLT5sZW5ndGgpIHsKKwkJZGV2X2VycihkZXYsICJCYWQgSUU6IG5vdCBlbm91Z2ggZGF0YSBmb3IgcGF5bG9hZCAiCisJCQkiKCV6dSBieXRlcyBsZWZ0IHZzICV6dSBuZWVkZWQpIGF0IG9mZnNldCAlenVcbiIsCisJCQl0b3AgLSBpdHIsIChzaXplX3QpaWVfaGRyLT5sZW5ndGgsCisJCQkodm9pZCAqKWllX2hkciAtIHN0YXJ0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisKKy8qKgorICogV2FsayBhIGJ1ZmZlciBmaWxsZWQgd2l0aCBjb25zZWN1dGl2ZSBJRSdzIGEgYnVmZmVyCisgKgorICogQHV3Yl9kZXY6IFVXQiBkZXZpY2UgdGhpcyBJRXMgYmVsb25nIHRvIChmb3IgZXJyIG1lc3NhZ2VzIG1haW5seSkKKyAqCisgKiBAZm46IGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBlYWNoIElFOyBpZiBpdCByZXR1cm5zIDAsIHdlIGtlZXAKKyAqICAgICAgdHJhdmVyc2luZyB0aGUgYnVmZmVyLiBJZiBpdCByZXR1cm5zICEwLCB3ZSdsbCBzdG9wIGFuZCByZXR1cm4KKyAqICAgICAgdGhhdCB2YWx1ZS4KKyAqCisgKiBAZGF0YTogcG9pbnRlciBwYXNzZWQgdG8gQGZuCisgKgorICogQGJ1ZjogYnVmZmVyIHdoZXJlIHRoZSBjb25zZWN1dGl2ZSBJRXMgYXJlIGxvY2F0ZWQKKyAqCisgKiBAc2l6ZTogc2l6ZSBvZiBAYnVmCisgKgorICogRWFjaCBJRSBpcyBjaGVja2VkIGZvciBiYXNpYyBjb3JyZWN0bmVzcyAodGhlcmUgaXMgc3BhY2UgbGVmdCBmb3IKKyAqIHRoZSBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkKS4gSWYgdGhhdCB0ZXN0IGlzIGZhaWxlZCwgd2Ugc3RvcAorICogcHJvY2Vzc2luZy4gRm9yIGV2ZXJ5IGdvb2QgSUUsIEBmbiBpcyBjYWxsZWQuCisgKi8KK3NzaXplX3QgdXdiX2llX2Zvcl9lYWNoKHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2LCB1d2JfaWVfZiBmbiwgdm9pZCAqZGF0YSwKKwkJCWNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQgPSAwOworCWNvbnN0IHN0cnVjdCB1d2JfaWVfaGRyICppZV9oZHI7CisJY29uc3Qgdm9pZCAqaXRyID0gYnVmLCAqdG9wID0gaXRyICsgc2l6ZTsKKworCXdoaWxlIChpdHIgPCB0b3ApIHsKKwkJaWYgKHV3Yl9yY19pZV92ZXJpZnkodXdiX2RldiwgYnVmLCBpdHIsIHRvcCkgIT0gMCkKKwkJCWJyZWFrOworCQlpZV9oZHIgPSBpdHI7CisJCWl0ciArPSBzaXplb2YoKmllX2hkcikgKyBpZV9oZHItPmxlbmd0aDsKKwkJcmVzdWx0ID0gZm4odXdiX2RldiwgaWVfaGRyLCBpdHIgLSBidWYsIGRhdGEpOworCQlpZiAocmVzdWx0ICE9IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9pZV9mb3JfZWFjaCk7CisKKworLyoqCisgKiBSZXBsYWNlIGFsbCBJRXMgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkIGJ5IGEgZGV2aWNlCisgKgorICogQGNtZDogICAgcG9pbnRlciB0byB0aGUgU0VULUlFIGNvbW1hbmQgd2l0aCB0aGUgSUVzIHRvIHNldAorICogQHNpemU6ICAgc2l6ZSBvZiBAYnVmCisgKi8KK2ludCB1d2JfcmNfc2V0X2llKHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX3JjX2NtZF9zZXRfaWUgKmNtZCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9yY19ldnRfc2V0X2llIHJlcGx5OworCisJcmVwbHkucmNlYi5iRXZlbnRUeXBlID0gVVdCX1JDX0NFVF9HRU5FUkFMOworCXJlcGx5LnJjZWIud0V2ZW50ID0gVVdCX1JDX0NNRF9TRVRfSUU7CisJcmVzdWx0ID0gdXdiX3JjX2NtZChyYywgIlNFVC1JRSIsICZjbWQtPnJjY2IsCisJCQkgICAgc2l6ZW9mKCpjbWQpICsgbGUxNl90b19jcHUoY21kLT53SUVMZW5ndGgpLAorCQkJICAgICZyZXBseS5yY2ViLCBzaXplb2YocmVwbHkpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJZWxzZSBpZiAocmVzdWx0ICE9IHNpemVvZihyZXBseSkpIHsKKwkJZGV2X2VycihkZXYsICJTRVQtSUU6IG5vdCBlbm91Z2ggZGF0YSB0byBkZWNvZGUgcmVwbHkgIgorCQkJIiglZCBieXRlcyByZWNlaXZlZCB2cyAlenUgbmVlZGVkKVxuIiwKKwkJCXJlc3VsdCwgc2l6ZW9mKHJlcGx5KSk7CisJCXJlc3VsdCA9IC1FSU87CisJfSBlbHNlIGlmIChyZXBseS5iUmVzdWx0Q29kZSAhPSBVV0JfUkNfUkVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycihkZXYsICJTRVQtSUU6IGNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMgKCVkKVxuIiwKKwkJCXV3Yl9yY19zdHJlcnJvcihyZXBseS5iUmVzdWx0Q29kZSksIHJlcGx5LmJSZXN1bHRDb2RlKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9IGVsc2UKKwkJcmVzdWx0ID0gMDsKK2Vycm9yX2NtZDoKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIERldGVybWluZSBieSBJRSBpZCBpZiBJRSBpcyBob3N0IHNldHRhYmxlCisgKiBXVVNCIDEuMCBbOC42LjIuOCBUYWJsZSA4Ljg1XQorICoKKyAqIEVYQ0VQVElPTjoKKyAqIEFsbCBidXQgVVdCX0lFX1dMUCBhcHBlYXJzIGluIFRhYmxlIDguODUgZnJvbSBXVVNCIDEuMC4gU2V0dGluZyB0aGlzIElFCisgKiBpcyByZXF1aXJlZCBmb3IgdGhlIFdMUCBzdWJzdGFjayB0byBwZXJmb3JtIGFzc29jaWF0aW9uIHdpdGggaXRzIFdTUyBzbworICogd2UgaG9wZSB0aGF0IHRoZSBXVVNCIHNwZWMgd2lsbCBiZSBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhpcy4KKyAqLworc3RhdGljCitpbnQgdXdiX3JjX2llX2lzX2hvc3Rfc2V0dGFibGUoZW51bSB1d2JfaWUgZWxlbWVudF9pZCkKK3sKKwlpZiAoZWxlbWVudF9pZCA9PSBVV0JfUENBX0FWQUlMQUJJTElUWSB8fAorCSAgICBlbGVtZW50X2lkID09IFVXQl9CUF9TV0lUQ0hfSUUgfHwKKwkgICAgZWxlbWVudF9pZCA9PSBVV0JfTUFDX0NBUEFCSUxJVElFU19JRSB8fAorCSAgICBlbGVtZW50X2lkID09IFVXQl9QSFlfQ0FQQUJJTElUSUVTX0lFIHx8CisJICAgIGVsZW1lbnRfaWQgPT0gVVdCX0FQUF9TUEVDX1BST0JFX0lFIHx8CisJICAgIGVsZW1lbnRfaWQgPT0gVVdCX0lERU5USUZJQ0FUSU9OX0lFIHx8CisJICAgIGVsZW1lbnRfaWQgPT0gVVdCX01BU1RFUl9LRVlfSURfSUUgfHwKKwkgICAgZWxlbWVudF9pZCA9PSBVV0JfSUVfV0xQIHx8CisJICAgIGVsZW1lbnRfaWQgPT0gVVdCX0FQUF9TUEVDX0lFKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIEV4dHJhY3QgSG9zdCBTZXR0YWJsZSBJRXMgZnJvbSBJRQorICoKKyAqIEBpZV9kYXRhOiBwb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIGFsbCBJRXMKKyAqIEBzaXplOiAgICBzaXplIG9mIGJ1ZmZlcgorICoKKyAqIEByZXR1cm5zOiBsZW5ndGggb2YgYnVmZmVyIHRoYXQgb25seSBpbmNsdWRlcyBob3N0IHNldHRhYmxlIElFcworICoKKyAqIEdpdmVuIGEgYnVmZmVyIG9mIElFcyB3ZSBtb3ZlIGFsbCBIb3N0IFNldHRhYmxlIElFcyB0byBmcm9udCBvZiBidWZmZXIKKyAqIGJ5IG92ZXJ3cml0aW5nIHRoZSBJRXMgdGhhdCBhcmUgbm90IEhvc3QgU2V0dGFibGUuCisgKiBCdWZmZXIgbGVuZ3RoIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMKK3NzaXplX3QgdXdiX3JjX3BhcnNlX2hvc3Rfc2V0dGFibGVfaWUoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYsCisJCQkJICAgICAgdm9pZCAqaWVfZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IG5ld19sZW4gPSBzaXplOworCXN0cnVjdCB1d2JfaWVfaGRyICppZV9oZHI7CisJc2l6ZV90IGllX2xlbmd0aDsKKwl2b2lkICppdHIgPSBpZV9kYXRhLCAqdG9wID0gaXRyICsgc2l6ZTsKKworCXdoaWxlIChpdHIgPCB0b3ApIHsKKwkJaWYgKHV3Yl9yY19pZV92ZXJpZnkodXdiX2RldiwgaWVfZGF0YSwgaXRyLCB0b3ApICE9IDApCisJCQlicmVhazsKKwkJaWVfaGRyID0gaXRyOworCQlpZV9sZW5ndGggPSBzaXplb2YoKmllX2hkcikgKyBpZV9oZHItPmxlbmd0aDsKKwkJaWYgKHV3Yl9yY19pZV9pc19ob3N0X3NldHRhYmxlKGllX2hkci0+ZWxlbWVudF9pZCkpIHsKKwkJCWl0ciArPSBpZV9sZW5ndGg7CisJCX0gZWxzZSB7CisJCQltZW1tb3ZlKGl0ciwgaXRyICsgaWVfbGVuZ3RoLCB0b3AgLSAoaXRyICsgaWVfbGVuZ3RoKSk7CisJCQluZXdfbGVuIC09IGllX2xlbmd0aDsKKwkJCXRvcCAtPSBpZV9sZW5ndGg7CisJCX0KKwl9CisJcmV0dXJuIG5ld19sZW47Cit9CisKKworLyogQ2xlYW51cCB0aGUgd2hvbGUgSUUgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKi8KK3ZvaWQgdXdiX3JjX2llX2luaXQoc3RydWN0IHV3Yl9yYyAqdXdiX3JjKQoreworCW11dGV4X2luaXQoJnV3Yl9yYy0+aWVzX211dGV4KTsKK30KKworCisvKioKKyAqIFNldCB1cCBjYWNoZSBmb3IgaG9zdCBzZXR0YWJsZSBJRXMgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkCisgKgorICogRmlyc3Qgd2UganVzdCBjYWxsIEdFVC1JRSB0byBnZXQgdGhlIGN1cnJlbnQgSUVzIGJlaW5nIHRyYW5zbWl0dGVkCisgKiAob3Igd2Ugd29ya2Fyb3VuZCBhbmQgcHJldGVuZCB3ZSBkaWQpIGFuZCAoYmVjYXVzZSB0aGUgZm9ybWF0IGlzCisgKiB0aGUgc2FtZSkgcmV1c2UgdGhhdCBhcyB0aGUgSUUgY2FjaGUgKHdpdGggdGhlIGNvbW1hbmQgcHJlZml4LCBhcworICogZXhwbGFpbmVkIGluICdzdHJ1Y3QgdXdiX3JjJykuCisgKgorICogQHJldHVybnM6IHNpemUgb2YgY2FjaGUgY3JlYXRlZAorICovCitzc2l6ZV90IHV3Yl9yY19pZV9zZXR1cChzdHJ1Y3QgdXdiX3JjICp1d2JfcmMpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnV3Yl9yYy0+dXdiX2Rldi5kZXY7CisJc3NpemVfdCByZXN1bHQ7CisJc2l6ZV90IGNhcGFjaXR5OworCXN0cnVjdCB1d2JfcmNfZXZ0X2dldF9pZSAqaWVfaW5mbzsKKworCWRfZm5zdGFydCgzLCBkZXYsICIoJXApXG4iLCB1d2JfcmMpOworCW11dGV4X2xvY2soJnV3Yl9yYy0+aWVzX211dGV4KTsKKwlyZXN1bHQgPSB1d2JfcmNfZ2V0X2llKHV3Yl9yYywgJmllX2luZm8pOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2dldF9pZTsKKwljYXBhY2l0eSA9IHJlc3VsdDsKKwlkX3ByaW50Zig1LCBkZXYsICJHb3QgSUVzICV6dSBieXRlcyAoJXp1IGxvbmcgYXQgJXApXG4iLCByZXN1bHQsCisJCSAoc2l6ZV90KWxlMTZfdG9fY3B1KGllX2luZm8tPndJRUxlbmd0aCksIGllX2luZm8pOworCisJLyogUmVtb3ZlIElFcyB0aGF0IGhvc3Qgc2hvdWxkIG5vdCBzZXQuICovCisJcmVzdWx0ID0gdXdiX3JjX3BhcnNlX2hvc3Rfc2V0dGFibGVfaWUoJnV3Yl9yYy0+dXdiX2RldiwKKwkJCWllX2luZm8tPklFRGF0YSwgbGUxNl90b19jcHUoaWVfaW5mby0+d0lFTGVuZ3RoKSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfcGFyc2U7CisJZF9wcmludGYoNSwgZGV2LCAicHVyZ2VkIG5vbi1zZXR0YWJsZSBJRXMgdG8gJXp1IGJ5dGVzXG4iLCByZXN1bHQpOworCXV3Yl9yYy0+aWVzID0gKHZvaWQgKikgaWVfaW5mbzsKKwl1d2JfcmMtPmllcy0+cmNjYi5iQ29tbWFuZFR5cGUgPSBVV0JfUkNfQ0VUX0dFTkVSQUw7CisJdXdiX3JjLT5pZXMtPnJjY2Iud0NvbW1hbmQgPSBjcHVfdG9fbGUxNihVV0JfUkNfQ01EX1NFVF9JRSk7CisJdXdiX3JjLT5pZXNfY2FwYWNpdHkgPSBjYXBhY2l0eTsKKwlkX3ByaW50Zig1LCBkZXYsICJJRSBjYWNoZSBhdCAlcCAlenUgYnl0ZXMsICV6dSBjYXBhY2l0eVxuIiwKKwkJIGllX2luZm8sIHJlc3VsdCwgY2FwYWNpdHkpOworCXJlc3VsdCA9IDA7CitlcnJvcl9wYXJzZToKK2Vycm9yX2dldF9pZToKKwltdXRleF91bmxvY2soJnV3Yl9yYy0+aWVzX211dGV4KTsKKwlkX2ZuZW5kKDMsIGRldiwgIiglcCkgPSAlenVcbiIsIHV3Yl9yYywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIENsZWFudXAgdGhlIHdob2xlIElFIG1hbmFnZW1lbnQgc3Vic3lzdGVtICovCit2b2lkIHV3Yl9yY19pZV9yZWxlYXNlKHN0cnVjdCB1d2JfcmMgKnV3Yl9yYykKK3sKKwlrZnJlZSh1d2JfcmMtPmllcyk7CisJdXdiX3JjLT5pZXMgPSBOVUxMOworCXV3Yl9yYy0+aWVzX2NhcGFjaXR5ID0gMDsKK30KKworCitzdGF0aWMKK2ludCBfX2FjY19zaXplKHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2LCBjb25zdCBzdHJ1Y3QgdXdiX2llX2hkciAqaWVfaGRyLAorCSAgICAgICBzaXplX3Qgb2Zmc2V0LCB2b2lkICpfY3R4KQoreworCXNpemVfdCAqYWNjX3NpemUgPSBfY3R4OworCSphY2Nfc2l6ZSArPSBzaXplb2YoKmllX2hkcikgKyBpZV9oZHItPmxlbmd0aDsKKwlkX3ByaW50Zig2LCAmdXdiX2Rldi0+ZGV2LCAibmV3IGFjYyBzaXplICV6dVxuIiwgKmFjY19zaXplKTsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIEFkZCBhIG5ldyBJRSB0byBJRXMgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkIGJ5IGRldmljZQorICoKKyAqIEBpZXM6IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgbmV3IElFIG9yIElFcyB0byBiZSBhZGRlZCB0bworICogICAgICAgdGhlIGRldmljZSdzIGJlYWNvbi4gVGhlIGJ1ZmZlciB3aWxsIGJlIHZlcmlmaWVkIGZvcgorICogICAgICAgY29uc2lzdGVuY2UgKG1lYW5pbmcgdGhlIGhlYWRlcnMgc2hvdWxkIGJlIHJpZ2h0KSBhbmQKKyAqICAgICAgIGNvbnNpc3RlbnQgd2l0aCB0aGUgYnVmZmVyIHNpemUuCisgKiBAc2l6ZTogc2l6ZSBvZiBAaWVzIChpbiBieXRlcywgdG90YWwgYnVmZmVyIHNpemUpCisgKiBAcmV0dXJuczogMCBpZiBvaywgPDAgZXJybm8gY29kZSBvbiBlcnJvcgorICoKKyAqIEFjY29yZGluZyB0byBXSENJIDAuOTUgWzQuMTMuNl0gdGhlIGRyaXZlciB3aWxsIG9ubHkgcmVjZWl2ZSB0aGUgUkNFQgorICogYWZ0ZXIgdGhlIGRldmljZSBzZW50IHRoZSBmaXJzdCBiZWFjb24gdGhhdCBpbmNsdWRlcyB0aGUgSUVzIHNwZWNpZmllZAorICogaW4gdGhlIFNFVCBJRSBjb21tYW5kLiBXZSB0aHVzIGNhbm5vdCBzZW5kIHRoaXMgY29tbWFuZCBpZiB0aGUgZGV2aWNlIGlzCisgKiBub3QgYmVhY29uaW5nLiBJbnN0ZWFkLCBhIFNFVCBJRSBjb21tYW5kIHdpbGwgYmUgc2VudCBsYXRlciByaWdodCBhZnRlcgorICogd2Ugc3RhcnQgYmVhY29uaW5nLgorICoKKyAqIFNldHRpbmcgYW4gSUUgb24gdGhlIGRldmljZSB3aWxsIG92ZXJ3cml0ZSBhbGwgY3VycmVudCBJRXMgaW4gZGV2aWNlLiBTbworICogd2UgdGFrZSB0aGUgY3VycmVudCBJRXMgYmVpbmcgdHJhbnNtaXR0ZWQgYnkgdGhlIGRldmljZSwgYXBwZW5kIHRoZQorICogbmV3IG9uZSwgYW5kIGNhbGwgU0VUIElFIHdpdGggYWxsIHRoZSBJRXMgbmVlZGVkLgorICoKKyAqIFRoZSBsb2NhbCBJRSBjYWNoZSB3aWxsIG9ubHkgYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgSUUgaWYgU0VUIElFCisgKiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICovCitpbnQgdXdiX3JjX2llX2FkZChzdHJ1Y3QgdXdiX3JjICp1d2JfcmMsCisJCSAgY29uc3Qgc3RydWN0IHV3Yl9pZV9oZHIgKmllcywgc2l6ZV90IHNpemUpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnV3Yl9yYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9yY19jbWRfc2V0X2llICpuZXdfaWVzOworCXNpemVfdCBpZXNfc2l6ZSwgdG90YWxfc2l6ZSwgYWNjX3NpemUgPSAwOworCisJaWYgKHV3Yl9yYy0+aWVzID09IE5VTEwpCisJCXJldHVybiAtRVNIVVRET1dOOworCXV3Yl9pZV9mb3JfZWFjaCgmdXdiX3JjLT51d2JfZGV2LCBfX2FjY19zaXplLCAmYWNjX3NpemUsIGllcywgc2l6ZSk7CisJaWYgKGFjY19zaXplICE9IHNpemUpIHsKKwkJZGV2X2VycihkZXYsICJCVUc6IGJhZCBJRXMsIG1pc2NvbnN0cnVjdGVkIGhlYWRlcnMgIgorCQkJIlslenUgYnl0ZXMgcmVwb3J0ZWQgdnMgJXp1IGNhbGN1bGF0ZWRdXG4iLAorCQkJc2l6ZSwgYWNjX3NpemUpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbXV0ZXhfbG9jaygmdXdiX3JjLT5pZXNfbXV0ZXgpOworCWllc19zaXplID0gbGUxNl90b19jcHUodXdiX3JjLT5pZXMtPndJRUxlbmd0aCk7CisJdG90YWxfc2l6ZSA9IHNpemVvZigqdXdiX3JjLT5pZXMpICsgaWVzX3NpemU7CisJaWYgKHRvdGFsX3NpemUgKyBzaXplID4gdXdiX3JjLT5pZXNfY2FwYWNpdHkpIHsKKwkJZF9wcmludGYoNCwgZGV2LCAiUmVhbGxvY2F0aW5nIElFIGNhY2hlIGZyb20gJXAgY2FwYWNpdHkgJXp1ICIKKwkJCSAidG8gY2FwYWNpdHkgJXp1XG4iLCB1d2JfcmMtPmllcywgdXdiX3JjLT5pZXNfY2FwYWNpdHksCisJCQkgdG90YWxfc2l6ZSArIHNpemUpOworCQluZXdfaWVzID0ga3phbGxvYyh0b3RhbF9zaXplICsgc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChuZXdfaWVzID09IE5VTEwpIHsKKwkJCWRldl9lcnIoZGV2LCAiTm8gbWVtb3J5IGZvciBhZGRpbmcgbmV3IElFXG4iKTsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yX2FsbG9jOworCQl9CisJCW1lbWNweShuZXdfaWVzLCB1d2JfcmMtPmllcywgdG90YWxfc2l6ZSk7CisJCXV3Yl9yYy0+aWVzX2NhcGFjaXR5ID0gdG90YWxfc2l6ZSArIHNpemU7CisJCWtmcmVlKHV3Yl9yYy0+aWVzKTsKKwkJdXdiX3JjLT5pZXMgPSBuZXdfaWVzOworCQlkX3ByaW50Zig0LCBkZXYsICJOZXcgSUUgY2FjaGUgYXQgJXAgY2FwYWNpdHkgJXp1XG4iLAorCQkJIHV3Yl9yYy0+aWVzLCB1d2JfcmMtPmllc19jYXBhY2l0eSk7CisJfQorCW1lbWNweSgodm9pZCAqKXV3Yl9yYy0+aWVzICsgdG90YWxfc2l6ZSwgaWVzLCBzaXplKTsKKwl1d2JfcmMtPmllcy0+d0lFTGVuZ3RoID0gY3B1X3RvX2xlMTYoaWVzX3NpemUgKyBzaXplKTsKKwlpZiAodXdiX3JjLT5iZWFjb25pbmcgIT0gLTEpIHsKKwkJcmVzdWx0ID0gdXdiX3JjX3NldF9pZSh1d2JfcmMsIHV3Yl9yYy0+aWVzKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHNldCBuZXcgSUUgb24gZGV2aWNlOiAlZFxuIiwKKwkJCQlyZXN1bHQpOworCQkJdXdiX3JjLT5pZXMtPndJRUxlbmd0aCA9IGNwdV90b19sZTE2KGllc19zaXplKTsKKwkJfSBlbHNlCisJCQlyZXN1bHQgPSAwOworCX0KKwlkX3ByaW50Zig0LCBkZXYsICJJRXMgbm93IG9jY3VweSAlaHUgYnl0ZXMgb2YgJXp1IGNhcGFjaXR5IGF0ICVwXG4iLAorCQkgbGUxNl90b19jcHUodXdiX3JjLT5pZXMtPndJRUxlbmd0aCksIHV3Yl9yYy0+aWVzX2NhcGFjaXR5LAorCQkgdXdiX3JjLT5pZXMpOworZXJyb3JfYWxsb2M6CisJbXV0ZXhfdW5sb2NrKCZ1d2JfcmMtPmllc19tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yY19pZV9hZGQpOworCisKKy8qCisgKiBSZW1vdmUgYW4gSUUgZnJvbSBpbnRlcm5hbCBjYWNoZQorICoKKyAqIFdlIGFyZSBkZWFsaW5nIHdpdGggb3VyIGludGVybmFsIElFIGNhY2hlIHNvIG5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlCisgKiBJRXMgYXJlIHZhbGlkIChpdCBoYXMgYmVlbiBkb25lIGFscmVhZHkpLgorICoKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBpZXNfbXV0ZXggaGVsZAorICoKKyAqIFdlIGRvIG5vdCBicmVhayBvdXQgb25jZSBhbiBJRSBpcyBmb3VuZCBpbiB0aGUgY2FjaGUuIEl0IGlzIGN1cnJlbnRseQorICogcG9zc2libGUgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIElFIHdpdGggdGhlIHNhbWUgSUQgaW5jbHVkZWQgaW4gdGhlCisgKiBiZWFjb24uIFdlIGRvbid0IHJlYWxsb2NhdGUsIHdlIGp1c3QgbWFyayB0aGUgc2l6ZSBzbWFsbGVyLgorICovCitzdGF0aWMKK2ludCB1d2JfcmNfaWVfY2FjaGVfcm0oc3RydWN0IHV3Yl9yYyAqdXdiX3JjLCBlbnVtIHV3Yl9pZSB0b19yZW1vdmUpCit7CisJc3RydWN0IHV3Yl9pZV9oZHIgKmllX2hkcjsKKwlzaXplX3QgbmV3X2xlbiA9IGxlMTZfdG9fY3B1KHV3Yl9yYy0+aWVzLT53SUVMZW5ndGgpOworCXZvaWQgKml0ciA9IHV3Yl9yYy0+aWVzLT5JRURhdGE7CisJdm9pZCAqdG9wID0gaXRyICsgbmV3X2xlbjsKKworCXdoaWxlIChpdHIgPCB0b3ApIHsKKwkJaWVfaGRyID0gaXRyOworCQlpZiAoaWVfaGRyLT5lbGVtZW50X2lkICE9IHRvX3JlbW92ZSkgeworCQkJaXRyICs9IHNpemVvZigqaWVfaGRyKSArIGllX2hkci0+bGVuZ3RoOworCQl9IGVsc2UgeworCQkJaW50IGllX2xlbmd0aDsKKwkJCWllX2xlbmd0aCA9IHNpemVvZigqaWVfaGRyKSArIGllX2hkci0+bGVuZ3RoOworCQkJaWYgKHRvcCAtIGl0ciAhPSBpZV9sZW5ndGgpCisJCQkJbWVtbW92ZShpdHIsIGl0ciArIGllX2xlbmd0aCwgdG9wIC0gaXRyICsgaWVfbGVuZ3RoKTsKKwkJCXRvcCAtPSBpZV9sZW5ndGg7CisJCQluZXdfbGVuIC09IGllX2xlbmd0aDsKKwkJfQorCX0KKwl1d2JfcmMtPmllcy0+d0lFTGVuZ3RoID0gY3B1X3RvX2xlMTYobmV3X2xlbik7CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBSZW1vdmUgYW4gSUUgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkIGJ5IGRldmljZQorICoKKyAqIEBlbGVtZW50X2lkOiBpZCBvZiBJRSB0byBiZSByZW1vdmVkIGZyb20gZGV2aWNlJ3MgYmVhY29uCisgKi8KK2ludCB1d2JfcmNfaWVfcm0oc3RydWN0IHV3Yl9yYyAqdXdiX3JjLCBlbnVtIHV3Yl9pZSBlbGVtZW50X2lkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1d2JfcmMtPnV3Yl9kZXYuZGV2OworCWludCByZXN1bHQ7CisKKwlpZiAodXdiX3JjLT5pZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FU0hVVERPV047CisJbXV0ZXhfbG9jaygmdXdiX3JjLT5pZXNfbXV0ZXgpOworCXJlc3VsdCA9IHV3Yl9yY19pZV9jYWNoZV9ybSh1d2JfcmMsIGVsZW1lbnRfaWQpOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgIkNhbm5vdCByZW1vdmUgSUUgZnJvbSBjYWNoZS5cbiIpOworCWlmICh1d2JfcmMtPmJlYWNvbmluZyAhPSAtMSkgeworCQlyZXN1bHQgPSB1d2JfcmNfc2V0X2llKHV3Yl9yYywgdXdiX3JjLT5pZXMpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHNldCBuZXcgSUUgb24gZGV2aWNlLlxuIik7CisJfQorCW11dGV4X3VubG9jaygmdXdiX3JjLT5pZXNfbXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmNfaWVfcm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvbGMtZGV2LmMgYi9kcml2ZXJzL3V3Yi9sYy1kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWY4NTZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvbGMtZGV2LmMKQEAgLTAsMCArMSw0OTIgQEAKKy8qCisgKiBVbHRyYSBXaWRlIEJhbmQKKyAqIExpZmUgY3ljbGUgb2YgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogRklYTUU6IGRvY3MKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSAidXdiLWludGVybmFsLmgiCisKKyNkZWZpbmUgRF9MT0NBTCAxCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKworLyogV2UgaW5pdGlhbGl6ZSBhZGRyZXNzZXMgdG8gMHhmZiAoaW52YWxpZCwgYXMgaXQgaXMgYmNhc3QpICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2Rldl9hZGRyX2luaXQoc3RydWN0IHV3Yl9kZXZfYWRkciAqYWRkcikKK3sKKwltZW1zZXQoJmFkZHItPmRhdGEsIDB4ZmYsIHNpemVvZihhZGRyLT5kYXRhKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1d2JfbWFjX2FkZHJfaW5pdChzdHJ1Y3QgdXdiX21hY19hZGRyICphZGRyKQoreworCW1lbXNldCgmYWRkci0+ZGF0YSwgMHhmZiwgc2l6ZW9mKGFkZHItPmRhdGEpKTsKK30KKworLyogQHJldHVybnMgITAgaWYgYSBkZXZpY2UgQGFkZHIgaXMgYSBicm9hZGNhc3QgYWRkcmVzcyAqLworc3RhdGljIGlubGluZSBpbnQgdXdiX2Rldl9hZGRyX2JjYXN0KGNvbnN0IHN0cnVjdCB1d2JfZGV2X2FkZHIgKmFkZHIpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB1d2JfZGV2X2FkZHIgYmNhc3QgPSB7IC5kYXRhID0geyAweGZmLCAweGZmIH0gfTsKKwlyZXR1cm4gIXV3Yl9kZXZfYWRkcl9jbXAoYWRkciwgJmJjYXN0KTsKK30KKworLyoKKyAqIEFkZCBjYWxsYmFjayBAbmV3IHRvIGJlIGNhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3VycyBpbiBAcmMuCisgKi8KK2ludCB1d2Jfbm90aWZzX3JlZ2lzdGVyKHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX25vdGlmc19oYW5kbGVyICpuZXcpCit7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmMtPm5vdGlmc19jaGFpbi5tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJbGlzdF9hZGQoJm5ldy0+bGlzdF9ub2RlLCAmcmMtPm5vdGlmc19jaGFpbi5saXN0KTsKKwltdXRleF91bmxvY2soJnJjLT5ub3RpZnNfY2hhaW4ubXV0ZXgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX25vdGlmc19yZWdpc3Rlcik7CisKKy8qCisgKiBSZW1vdmUgZXZlbnQgaGFuZGxlciAoY2FsbGJhY2spCisgKi8KK2ludCB1d2Jfbm90aWZzX2RlcmVnaXN0ZXIoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2Jfbm90aWZzX2hhbmRsZXIgKmVudHJ5KQoreworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJjLT5ub3RpZnNfY2hhaW4ubXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWxpc3RfZGVsKCZlbnRyeS0+bGlzdF9ub2RlKTsKKwltdXRleF91bmxvY2soJnJjLT5ub3RpZnNfY2hhaW4ubXV0ZXgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX25vdGlmc19kZXJlZ2lzdGVyKTsKKworLyoKKyAqIE5vdGlmeSBhbGwgZXZlbnQgaGFuZGxlcnMgb2YgYSBnaXZlbiBldmVudCBvbiBAcmMKKyAqCisgKiBXZSBhcmUgY2FsbGVkIHdpdGggYSB2YWxpZCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSwgb3IgTlVMTCBpZiB0aGUKKyAqIGV2ZW50IGlzIG5vdCBmb3IgYSBwYXJ0aWN1bGFyIGV2ZW50IChlLmcuLCBhIEJHIGpvaW4gZXZlbnQpLgorICovCit2b2lkIHV3Yl9ub3RpZnkoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2LCBlbnVtIHV3Yl9ub3RpZnMgZXZlbnQpCit7CisJc3RydWN0IHV3Yl9ub3RpZnNfaGFuZGxlciAqaGFuZGxlcjsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZyYy0+bm90aWZzX2NoYWluLm11dGV4KSkKKwkJcmV0dXJuOworCWlmICghbGlzdF9lbXB0eSgmcmMtPm5vdGlmc19jaGFpbi5saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZyYy0+bm90aWZzX2NoYWluLmxpc3QsIGxpc3Rfbm9kZSkgeworCQkJaGFuZGxlci0+Y2IoaGFuZGxlci0+ZGF0YSwgdXdiX2RldiwgZXZlbnQpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcmMtPm5vdGlmc19jaGFpbi5tdXRleCk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBiYWNraW5nIGRldmljZSBvZiBhIHV3Yl9kZXYgdGhhdCBoYXMgYmVlbiBkeW5hbWljYWxseSBhbGxvY2F0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHV3Yl9kZXZfc3lzX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCisJZF9mbnN0YXJ0KDQsIE5VTEwsICIoZGV2ICVwIHV3Yl9kZXYgJXApXG4iLCBkZXYsIHV3Yl9kZXYpOworCXV3Yl9iY2VfcHV0KHV3Yl9kZXYtPmJjZSk7CisJZF9wcmludGYoMCwgJnV3Yl9kZXYtPmRldiwgInV3Yl9kZXYgJXAgZnJlZWRcbiIsIHV3Yl9kZXYpOworCW1lbXNldCh1d2JfZGV2LCAweDY5LCBzaXplb2YoKnV3Yl9kZXYpKTsKKwlrZnJlZSh1d2JfZGV2KTsKKwlkX2ZuZW5kKDQsIE5VTEwsICIoZGV2ICVwIHV3Yl9kZXYgJXApID0gdm9pZFxuIiwgZGV2LCB1d2JfZGV2KTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBVV0IgZGV2aWNlIGluc3RhbmNlCisgKgorICogQWxsb2MsIHplcm8gYW5kIGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZCB1d2JfZGV2X2luaXQoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYpCit7CisJbXV0ZXhfaW5pdCgmdXdiX2Rldi0+bXV0ZXgpOworCWRldmljZV9pbml0aWFsaXplKCZ1d2JfZGV2LT5kZXYpOworCXV3Yl9kZXYtPmRldi5yZWxlYXNlID0gdXdiX2Rldl9zeXNfcmVsZWFzZTsKKwl1d2JfZGV2X2FkZHJfaW5pdCgmdXdiX2Rldi0+ZGV2X2FkZHIpOworCXV3Yl9tYWNfYWRkcl9pbml0KCZ1d2JfZGV2LT5tYWNfYWRkcik7CisJYml0bWFwX2ZpbGwodXdiX2Rldi0+c3RyZWFtcywgVVdCX05VTV9HTE9CQUxfU1RSRUFNUyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHV3Yl9kZXZfRVVJXzQ4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYgPSB0b191d2JfZGV2KGRldik7CisJY2hhciBhZGRyW1VXQl9BRERSX1NUUlNJWkVdOworCisJdXdiX21hY19hZGRyX3ByaW50KGFkZHIsIHNpemVvZihhZGRyKSwgJnV3Yl9kZXYtPm1hY19hZGRyKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYWRkcik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoRVVJXzQ4LCBTX0lSVUdPLCB1d2JfZGV2X0VVSV80OF9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgdXdiX2Rldl9EZXZBZGRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCWNoYXIgYWRkcltVV0JfQUREUl9TVFJTSVpFXTsKKworCXV3Yl9kZXZfYWRkcl9wcmludChhZGRyLCBzaXplb2YoYWRkciksICZ1d2JfZGV2LT5kZXZfYWRkcik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGFkZHIpOworfQorc3RhdGljIERFVklDRV9BVFRSKERldkFkZHIsIFNfSVJVR08sIHV3Yl9kZXZfRGV2QWRkcl9zaG93LCBOVUxMKTsKKworLyoKKyAqIFNob3cgdGhlIEJQU1Qgb2YgdGhpcyBkZXZpY2UuCisgKgorICogQ2FsY3VsYXRlZCBmcm9tIHRoZSByZWNlaXZlIHRpbWUgb2YgdGhlIGRldmljZSdzIGJlYWNvbiBhbmQgaXQncworICogc2xvdCBudW1iZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHV3Yl9kZXZfQlBTVF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiA9IHRvX3V3Yl9kZXYoZGV2KTsKKwlzdHJ1Y3QgdXdiX2JlY2FfZSAqYmNlOworCXN0cnVjdCB1d2JfYmVhY29uX2ZyYW1lICpiZjsKKwl1MTYgYnBzdDsKKworCWJjZSA9IHV3Yl9kZXYtPmJjZTsKKwltdXRleF9sb2NrKCZiY2UtPm11dGV4KTsKKwliZiA9IChzdHJ1Y3QgdXdiX2JlYWNvbl9mcmFtZSAqKWJjZS0+YmUtPkJlYWNvbkluZm87CisJYnBzdCA9IGJjZS0+YmUtPndCUFNUT2Zmc2V0CisJCS0gKHUxNikoYmYtPkJlYWNvbl9TbG90X051bWJlciAqIFVXQl9CRUFDT05fU0xPVF9MRU5HVEhfVVMpOworCW11dGV4X3VubG9jaygmYmNlLT5tdXRleCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYnBzdCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoQlBTVCwgU19JUlVHTywgdXdiX2Rldl9CUFNUX3Nob3csIE5VTEwpOworCisvKgorICogU2hvdyB0aGUgSUVzIGEgZGV2aWNlIGlzIGJlYWNvbmluZworICoKKyAqIFdlIG5lZWQgdG8gYWNjZXNzIHRoZSBiZWFjb24gY2FjaGUsIHNvIHdlIGp1c3QgbG9jayBpdCByZWFsbHkKKyAqIHF1aWNrLCBwcmludCB0aGUgSUVzIGFuZCB1bmxvY2suCisgKgorICogV2UgaGF2ZSBhIHJlZmVyZW5jZSBvbiB0aGUgY2FjaGUgZW50cnksIHNvIHRoYXQgc2hvdWxkIGJlCisgKiBxdWl0ZSBzYWZlLgorICovCitzdGF0aWMgc3NpemVfdCB1d2JfZGV2X0lFc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCisJcmV0dXJuIHV3Yl9iY2VfcHJpbnRfSUVzKHV3Yl9kZXYsIHV3Yl9kZXYtPmJjZSwgYnVmLCBQQUdFX1NJWkUpOworfQorc3RhdGljIERFVklDRV9BVFRSKElFcywgU19JUlVHTyB8IFNfSVdVU1IsIHV3Yl9kZXZfSUVzX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCB1d2JfZGV2X0xRRV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCXN0cnVjdCB1d2JfYmVjYV9lICpiY2UgPSB1d2JfZGV2LT5iY2U7CisJc2l6ZV90IHJlc3VsdDsKKworCW11dGV4X2xvY2soJmJjZS0+bXV0ZXgpOworCXJlc3VsdCA9IHN0YXRzX3Nob3coJnV3Yl9kZXYtPmJjZS0+bHFlX3N0YXRzLCBidWYpOworCW11dGV4X3VubG9jaygmYmNlLT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHNzaXplX3QgdXdiX2Rldl9MUUVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiA9IHRvX3V3Yl9kZXYoZGV2KTsKKwlzdHJ1Y3QgdXdiX2JlY2FfZSAqYmNlID0gdXdiX2Rldi0+YmNlOworCXNzaXplX3QgcmVzdWx0OworCisJbXV0ZXhfbG9jaygmYmNlLT5tdXRleCk7CisJcmVzdWx0ID0gc3RhdHNfc3RvcmUoJnV3Yl9kZXYtPmJjZS0+bHFlX3N0YXRzLCBidWYsIHNpemUpOworCW11dGV4X3VubG9jaygmYmNlLT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihMUUUsIFNfSVJVR08gfCBTX0lXVVNSLCB1d2JfZGV2X0xRRV9zaG93LCB1d2JfZGV2X0xRRV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHV3Yl9kZXZfUlNTSV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiA9IHRvX3V3Yl9kZXYoZGV2KTsKKwlzdHJ1Y3QgdXdiX2JlY2FfZSAqYmNlID0gdXdiX2Rldi0+YmNlOworCXNpemVfdCByZXN1bHQ7CisKKwltdXRleF9sb2NrKCZiY2UtPm11dGV4KTsKKwlyZXN1bHQgPSBzdGF0c19zaG93KCZ1d2JfZGV2LT5iY2UtPnJzc2lfc3RhdHMsIGJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZiY2UtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3NpemVfdCB1d2JfZGV2X1JTU0lfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCXN0cnVjdCB1d2JfYmVjYV9lICpiY2UgPSB1d2JfZGV2LT5iY2U7CisJc3NpemVfdCByZXN1bHQ7CisKKwltdXRleF9sb2NrKCZiY2UtPm11dGV4KTsKKwlyZXN1bHQgPSBzdGF0c19zdG9yZSgmdXdiX2Rldi0+YmNlLT5yc3NpX3N0YXRzLCBidWYsIHNpemUpOworCW11dGV4X3VubG9jaygmYmNlLT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihSU1NJLCBTX0lSVUdPIHwgU19JV1VTUiwgdXdiX2Rldl9SU1NJX3Nob3csIHV3Yl9kZXZfUlNTSV9zdG9yZSk7CisKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9FVUlfNDguYXR0ciwKKwkmZGV2X2F0dHJfRGV2QWRkci5hdHRyLAorCSZkZXZfYXR0cl9CUFNULmF0dHIsCisJJmRldl9hdHRyX0lFcy5hdHRyLAorCSZkZXZfYXR0cl9MUUUuYXR0ciwKKwkmZGV2X2F0dHJfUlNTSS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBkZXZfYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXBzW10gPSB7CisJJmRldl9hdHRyX2dyb3VwLAorCU5VTEwsCit9OworCisvKioKKyAqIERldmljZSBTWVNGUyByZWdpc3RyYXRpb24KKyAqCisgKgorICovCitzdGF0aWMgaW50IF9fdXdiX2Rldl9zeXNfYWRkKHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2LCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnRfZGV2KQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJZF9mbnN0YXJ0KDQsIE5VTEwsICIodXdiX2RldiAlcCBwYXJlbnRfZGV2ICVwKVxuIiwgdXdiX2RldiwgcGFyZW50X2Rldik7CisJQlVHX09OKHBhcmVudF9kZXYgPT0gTlVMTCk7CisKKwlkZXYgPSAmdXdiX2Rldi0+ZGV2OworCS8qIERldmljZSBzeXNmcyBmaWxlcyBhcmUgb25seSB1c2VmdWwgZm9yIG5laWdoYm9yIGRldmljZXMgbm90CisJICAgbG9jYWwgcmFkaW8gY29udHJvbGxlcnMuICovCisJaWYgKCZ1d2JfZGV2LT5yYy0+dXdiX2RldiAhPSB1d2JfZGV2KQorCQlkZXYtPmdyb3VwcyA9IGdyb3VwczsKKwlkZXYtPnBhcmVudCA9IHBhcmVudF9kZXY7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgdXdiX2Rldik7CisKKwlyZXN1bHQgPSBkZXZpY2VfYWRkKGRldik7CisJZF9mbmVuZCg0LCBOVUxMLCAiKHV3Yl9kZXYgJXAgcGFyZW50X2RldiAlcCkgPSAlZFxuIiwgdXdiX2RldiwgcGFyZW50X2RldiwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkIF9fdXdiX2Rldl9zeXNfcm0oc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYpCit7CisJZF9mbnN0YXJ0KDQsIE5VTEwsICIodXdiX2RldiAlcClcbiIsIHV3Yl9kZXYpOworCWRldl9zZXRfZHJ2ZGF0YSgmdXdiX2Rldi0+ZGV2LCBOVUxMKTsKKwlkZXZpY2VfZGVsKCZ1d2JfZGV2LT5kZXYpOworCWRfZm5lbmQoNCwgTlVMTCwgIih1d2JfZGV2ICVwKSA9IHZvaWRcbiIsIHV3Yl9kZXYpOworfQorCisKKy8qKgorICogUmVnaXN0ZXIgYW5kIGluaXRpYWxpemUgYSBuZXcgVVdCIGRldmljZQorICoKKyAqIERpZCB5b3UgY2FsbCB1d2JfZGV2X2luaXQoKSBvbiBpdD8KKyAqCisgKiBAcGFyZW50X3JjOiBpcyB0aGUgcGFyZW50IHJhZGlvIGNvbnRyb2xsZXIgd2hvIGhhcyB0aGUgbGluayB0byB0aGUKKyAqICAgICAgICAgICAgIGRldmljZS4gV2hlbiByZWdpc3RlcmluZyB0aGUgVVdCIGRldmljZSB0aGF0IGlzIGEgVVdCCisgKiAgICAgICAgICAgICBSYWRpbyBDb250cm9sbGVyLCB3ZSBwb2ludCBiYWNrIHRvIGl0LgorICoKKyAqIElmIHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UgdGhhdCBpcyBwYXJ0IG9mIGEgcmFkaW8sIGNhbGxlciBoYXMgc2V0CisgKiByYy0+dXdiX2Rldi0+ZGV2LiBPdGhlcndpc2UgaXQgaXMgdG8gYmUgbGVmdCBOVUxMLS1hIG5ldyBvbmUgd2lsbAorICogYmUgYWxsb2NhdGVkLgorICovCitpbnQgdXdiX2Rldl9hZGQoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYsCisJCXN0cnVjdCB1d2JfcmMgKnBhcmVudF9yYykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCUJVR19PTih1d2JfZGV2ID09IE5VTEwpOworCUJVR19PTihwYXJlbnRfZGV2ID09IE5VTEwpOworCUJVR19PTihwYXJlbnRfcmMgPT0gTlVMTCk7CisKKwltdXRleF9sb2NrKCZ1d2JfZGV2LT5tdXRleCk7CisJZGV2ID0gJnV3Yl9kZXYtPmRldjsKKwl1d2JfZGV2LT5yYyA9IHBhcmVudF9yYzsKKwlyZXN1bHQgPSBfX3V3Yl9kZXZfc3lzX2FkZCh1d2JfZGV2LCBwYXJlbnRfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJVV0I6IHVuYWJsZSB0byByZWdpc3RlciBkZXYgJXMgd2l0aCBzeXNmczogJWRcbiIsCisJCSAgICAgICBkZXZfbmFtZShkZXYpLCByZXN1bHQpOworCW11dGV4X3VubG9jaygmdXdiX2Rldi0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZCB1d2JfZGV2X3JtKHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2KQoreworCW11dGV4X2xvY2soJnV3Yl9kZXYtPm11dGV4KTsKKwlfX3V3Yl9kZXZfc3lzX3JtKHV3Yl9kZXYpOworCW11dGV4X3VubG9jaygmdXdiX2Rldi0+bXV0ZXgpOworfQorCisKK3N0YXRpYworaW50IF9fdXdiX2Rldl90cnlfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqX190YXJnZXRfdXdiX2RldikKK3sKKwlzdHJ1Y3QgdXdiX2RldiAqdGFyZ2V0X3V3Yl9kZXYgPSBfX3RhcmdldF91d2JfZGV2OworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCWlmICh1d2JfZGV2ID09IHRhcmdldF91d2JfZGV2KSB7CisJCXV3Yl9kZXZfZ2V0KHV3Yl9kZXYpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBHaXZlbiBhIFVXQiBkZXZpY2UgZGVzY3JpcHRvciwgdmFsaWRhdGUgYW5kIHJlZmNvdW50IGl0CisgKgorICogQHJldHVybnMgTlVMTCBpZiB0aGUgZGV2aWNlIGRvZXMgbm90IGV4aXN0IG9yIGlzIHF1aWVzY2luZzsgdGhlIHB0ciB0bworICogICAgICAgICAgICAgICBpdCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB1d2JfZGV2ICp1d2JfZGV2X3RyeV9nZXQoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2KQoreworCWlmICh1d2JfZGV2X2Zvcl9lYWNoKHJjLCBfX3V3Yl9kZXZfdHJ5X2dldCwgdXdiX2RldikpCisJCXJldHVybiB1d2JfZGV2OworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfZGV2X3RyeV9nZXQpOworCisKKy8qKgorICogUmVtb3ZlIGEgZGV2aWNlIGZyb20gdGhlIHN5c3RlbSBbZ3J1bnQgZm9yIG90aGVyIGZ1bmN0aW9uc10KKyAqLworaW50IF9fdXdiX2Rldl9vZmZhaXIoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYsIHN0cnVjdCB1d2JfcmMgKnJjKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1d2JfZGV2LT5kZXY7CisJY2hhciBtYWNidWZbVVdCX0FERFJfU1RSU0laRV0sIGRldmJ1ZltVV0JfQUREUl9TVFJTSVpFXTsKKworCWRfZm5zdGFydCgzLCBOVUxMLCAiKGRldiAlcCBbdXdiX2RldiAlcF0sIHV3Yl9yYyAlcClcbiIsIGRldiwgdXdiX2RldiwgcmMpOworCXV3Yl9tYWNfYWRkcl9wcmludChtYWNidWYsIHNpemVvZihtYWNidWYpLCAmdXdiX2Rldi0+bWFjX2FkZHIpOworCXV3Yl9kZXZfYWRkcl9wcmludChkZXZidWYsIHNpemVvZihkZXZidWYpLCAmdXdiX2Rldi0+ZGV2X2FkZHIpOworCWRldl9pbmZvKGRldiwgInV3YiBkZXZpY2UgKG1hYyAlcyBkZXYgJXMpIGRpc2Nvbm5lY3RlZCBmcm9tICVzICVzXG4iLAorCQkgbWFjYnVmLCBkZXZidWYsCisJCSByYyA/IHJjLT51d2JfZGV2LmRldi5wYXJlbnQtPmJ1cy0+bmFtZSA6ICJuL2EiLAorCQkgcmMgPyBkZXZfbmFtZShyYy0+dXdiX2Rldi5kZXYucGFyZW50KSA6ICIiKTsKKwl1d2JfZGV2X3JtKHV3Yl9kZXYpOworCXV3Yl9kZXZfcHV0KHV3Yl9kZXYpOwkvKiBmb3IgdGhlIGNyZWF0aW9uIGluIF9vbmFpcigpICovCisJZF9mbmVuZCgzLCBOVUxMLCAiKGRldiAlcCBbdXdiX2RldiAlcF0sIHV3Yl9yYyAlcCkgPSAwXG4iLCBkZXYsIHV3Yl9kZXYsIHJjKTsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIEEgZGV2aWNlIHdlbnQgb2ZmIHRoZSBhaXIsIGNsZWFuIHVwIGFmdGVyIGl0IQorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBVV0IgRGFlbW9uICh0aHJvdWdoIHRoZSBiZWFjb24gcHVyZ2UgZnVuY3Rpb24KKyAqIHV3Yl9iY25fY2FjaGVfcHVyZ2UpIHdoZW4gaXQgaXMgZGV0ZWN0ZWQgdGhhdCBhIGRldmljZSBoYXMgYmVlbiBpbgorICogcmFkaW8gc2lsZW5jZSBmb3IgYSB3aGlsZS4KKyAqCisgKiBJZiB0aGlzIGRldmljZSBpcyBhY3R1YWxseSBhIGxvY2FsIHJhZGlvIGNvbnRyb2xsZXIgd2UgZG9uJ3QgbmVlZAorICogdG8gZ28gdGhyb3VnaCB0aGUgb2ZmYWlyIHByb2Nlc3MsIGFzIGl0IGlzIG5vdCByZWdpc3RlcmVkIGFzIHRoYXQuCisgKgorICogTk9URTogdXdiX2Jjbl9jYWNoZS5tdXRleCBpcyBoZWxkIQorICovCit2b2lkIHV3YmRfZGV2X29mZmFpcihzdHJ1Y3QgdXdiX2JlY2FfZSAqYmNlKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2OworCisJdXdiX2RldiA9IGJjZS0+dXdiX2RldjsKKwlpZiAodXdiX2RldikgeworCQl1d2Jfbm90aWZ5KHV3Yl9kZXYtPnJjLCB1d2JfZGV2LCBVV0JfTk9USUZfT0ZGQUlSKTsKKwkJX191d2JfZGV2X29mZmFpcih1d2JfZGV2LCB1d2JfZGV2LT5yYyk7CisJfQorfQorCisKKy8qKgorICogQSBkZXZpY2Ugd2VudCBvbiB0aGUgYWlyLCBzdGFydCBpdCB1cCEKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgVVdCIERhZW1vbiB3aGVuIGl0IGlzIGRldGVjdGVkIHRoYXQgYSBkZXZpY2UKKyAqIGhhcyBwb3BwZWQgdXAgaW4gdGhlIHJhZGlvIHJhbmdlIG9mIHRoZSByYWRpbyBjb250cm9sbGVyLgorICoKKyAqIEl0IHdpbGwganVzdCBjcmVhdGUgdGhlIGZyZWFraW5nIGRldmljZSwgcmVnaXN0ZXIgdGhlIGJlYWNvbiBhbmQKKyAqIHN0dWZmIGFuZCB5YXRsYSwgZG9uZS4KKyAqCisgKgorICogTk9URTogdXdiX2JlY2EubXV0ZXggaXMgaGVsZCwgYmNlLT5tdXRleCBpcyBoZWxkCisgKi8KK3ZvaWQgdXdiZF9kZXZfb25haXIoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfYmVjYV9lICpiY2UpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2OworCWNoYXIgbWFjYnVmW1VXQl9BRERSX1NUUlNJWkVdLCBkZXZidWZbVVdCX0FERFJfU1RSU0laRV07CisKKwl1d2JfbWFjX2FkZHJfcHJpbnQobWFjYnVmLCBzaXplb2YobWFjYnVmKSwgYmNlLT5tYWNfYWRkcik7CisJdXdiX2Rldl9hZGRyX3ByaW50KGRldmJ1Ziwgc2l6ZW9mKGRldmJ1ZiksICZiY2UtPmRldl9hZGRyKTsKKwl1d2JfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHV3Yl9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodXdiX2RldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAibmV3IGRldmljZSAlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwKKwkJCW1hY2J1Zik7CisJCXJldHVybjsKKwl9CisJdXdiX2Rldl9pbml0KHV3Yl9kZXYpOwkJLyogVGhpcyBzZXRzIHJlZmNudCB0byBvbmUsIHdlIG93biBpdCAqLworCXV3Yl9kZXYtPm1hY19hZGRyID0gKmJjZS0+bWFjX2FkZHI7CisJdXdiX2Rldi0+ZGV2X2FkZHIgPSBiY2UtPmRldl9hZGRyOworCWRldl9zZXRfbmFtZSgmdXdiX2Rldi0+ZGV2LCBtYWNidWYpOworCXJlc3VsdCA9IHV3Yl9kZXZfYWRkKHV3Yl9kZXYsICZyYy0+dXdiX2Rldi5kZXYsIHJjKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIm5ldyBkZXZpY2UgJXM6IGNhbm5vdCBpbnN0YW50aWF0ZSBkZXZpY2VcbiIsCisJCQltYWNidWYpOworCQlnb3RvIGVycm9yX2Rldl9hZGQ7CisJfQorCS8qIHBsdWcgdGhlIGJlYWNvbiBjYWNoZSAqLworCWJjZS0+dXdiX2RldiA9IHV3Yl9kZXY7CisJdXdiX2Rldi0+YmNlID0gYmNlOworCXV3Yl9iY2VfZ2V0KGJjZSk7CQkvKiByZWxlYXNlZCBpbiB1d2JfZGV2X3N5c19yZWxlYXNlKCkgKi8KKwlkZXZfaW5mbyhkZXYsICJ1d2IgZGV2aWNlIChtYWMgJXMgZGV2ICVzKSBjb25uZWN0ZWQgdG8gJXMgJXNcbiIsCisJCSBtYWNidWYsIGRldmJ1ZiwgcmMtPnV3Yl9kZXYuZGV2LnBhcmVudC0+YnVzLT5uYW1lLAorCQkgZGV2X25hbWUocmMtPnV3Yl9kZXYuZGV2LnBhcmVudCkpOworCXV3Yl9ub3RpZnkocmMsIHV3Yl9kZXYsIFVXQl9OT1RJRl9PTkFJUik7CisJcmV0dXJuOworCitlcnJvcl9kZXZfYWRkOgorCWtmcmVlKHV3Yl9kZXYpOworCXJldHVybjsKK30KKworLyoqCisgKiBJdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgVVdCIGRldmljZXMsIGNhbGxpbmcgYSBAZnVuY3Rpb24gb24gZWFjaAorICoKKyAqIFNlZSBkb2NzIGZvciBidXNfZm9yX2VhY2goKS4uLi4KKyAqCisgKiBAcmM6ICAgICAgIHJhZGlvIGNvbnRyb2xsZXIgZm9yIHRoZSBkZXZpY2VzLgorICogQGZ1bmN0aW9uOiBmdW5jdGlvbiB0byBjYWxsLgorICogQHByaXY6ICAgICBkYXRhIHRvIHBhc3MgdG8gQGZ1bmN0aW9uLgorICogQHJldHVybnM6ICAwIGlmIG5vIGludm9jYXRpb24gb2YgZnVuY3Rpb24oKSByZXR1cm5lZCBhIHZhbHVlCisgKiAgICAgICAgICAgIGRpZmZlcmVudCB0byB6ZXJvLiBUaGF0IHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHV3Yl9kZXZfZm9yX2VhY2goc3RydWN0IHV3Yl9yYyAqcmMsIHV3Yl9kZXZfZm9yX2VhY2hfZiBmdW5jdGlvbiwgdm9pZCAqcHJpdikKK3sKKwlyZXR1cm4gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZyYy0+dXdiX2Rldi5kZXYsIHByaXYsIGZ1bmN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9kZXZfZm9yX2VhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvbGMtcmMuYyBiL2RyaXZlcnMvdXdiL2xjLXJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1NzcyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL2xjLXJjLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBVbHRyYSBXaWRlIEJhbmQKKyAqIExpZmUgY3ljbGUgb2YgcmFkaW8gY29udHJvbGxlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBkb2NzCisgKgorICogQSBVV0IgcmFkaW8gY29udHJvbGxlciBpcyBhbHNvIGEgVVdCIGRldmljZSwgc28gaXQgZW1iZWRzIG9uZS4uLgorICoKKyAqIExpc3Qgb2YgUkNzIGNvbWVzIGZyb20gdGhlICdzdHJ1Y3QgY2xhc3MgdXdiX3JjX2NsYXNzJy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBEX0xPQ0FMIDEKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKworc3RhdGljIGludCB1d2JfcmNfaW5kZXhfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWludCAqaW5kZXggPSBkYXRhOworCXN0cnVjdCB1d2JfcmMgKnJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAocmMtPmluZGV4ID09ICppbmRleCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXdiX3JjICp1d2JfcmNfZmluZF9ieV9pbmRleChpbnQgaW5kZXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB1d2JfcmMgKnJjID0gTlVMTDsKKworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZ1d2JfcmNfY2xhc3MsIE5VTEwsICZpbmRleCwgdXdiX3JjX2luZGV4X21hdGNoKTsKKwlpZiAoZGV2KQorCQlyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB1d2JfcmNfbmV3X2luZGV4KHZvaWQpCit7CisJaW50IGluZGV4ID0gMDsKKworCWZvciAoOzspIHsKKwkJaWYgKCF1d2JfcmNfZmluZF9ieV9pbmRleChpbmRleCkpCisJCQlyZXR1cm4gaW5kZXg7CisJCWlmICgrK2luZGV4IDwgMCkKKwkJCWluZGV4ID0gMDsKKwl9Cit9CisKKy8qKgorICogUmVsZWFzZSB0aGUgYmFja2luZyBkZXZpY2Ugb2YgYSB1d2JfcmMgdGhhdCBoYXMgYmVlbiBkeW5hbWljYWxseSBhbGxvY2F0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHV3Yl9yY19zeXNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdXdiX2RldiwgZGV2KTsKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IGNvbnRhaW5lcl9vZih1d2JfZGV2LCBzdHJ1Y3QgdXdiX3JjLCB1d2JfZGV2KTsKKworCXV3Yl9yY19uZWhfZGVzdHJveShyYyk7CisJdXdiX3JjX2llX3JlbGVhc2UocmMpOworCWRfcHJpbnRmKDEsIGRldiwgImZyZWVkIHV3Yl9yYyAlcFxuIiwgcmMpOworCWtmcmVlKHJjKTsKK30KKworCit2b2lkIHV3Yl9yY19pbml0KHN0cnVjdCB1d2JfcmMgKnJjKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gJnJjLT51d2JfZGV2OworCisJdXdiX2Rldl9pbml0KHV3Yl9kZXYpOworCXJjLT51d2JfZGV2LmRldi5jbGFzcyA9ICZ1d2JfcmNfY2xhc3M7CisJcmMtPnV3Yl9kZXYuZGV2LnJlbGVhc2UgPSB1d2JfcmNfc3lzX3JlbGVhc2U7CisJdXdiX3JjX25laF9jcmVhdGUocmMpOworCXJjLT5iZWFjb25pbmcgPSAtMTsKKwlyYy0+c2Nhbl90eXBlID0gVVdCX1NDQU5fRElTQUJMRUQ7CisJSU5JVF9MSVNUX0hFQUQoJnJjLT5ub3RpZnNfY2hhaW4ubGlzdCk7CisJbXV0ZXhfaW5pdCgmcmMtPm5vdGlmc19jaGFpbi5tdXRleCk7CisJdXdiX2RycF9hdmFpbF9pbml0KHJjKTsKKwl1d2JfcmNfaWVfaW5pdChyYyk7CisJdXdiX3Jzdl9pbml0KHJjKTsKKwl1d2JfcmNfcGFsX2luaXQocmMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3JjX2luaXQpOworCisKK3N0cnVjdCB1d2JfcmMgKnV3Yl9yY19hbGxvYyh2b2lkKQoreworCXN0cnVjdCB1d2JfcmMgKnJjOworCXJjID0ga3phbGxvYyhzaXplb2YoKnJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXV3Yl9yY19pbml0KHJjKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmNfYWxsb2MpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcmNfYXR0cnNbXSA9IHsKKwkJJmRldl9hdHRyX21hY19hZGRyZXNzLmF0dHIsCisJCSZkZXZfYXR0cl9zY2FuLmF0dHIsCisJCSZkZXZfYXR0cl9iZWFjb24uYXR0ciwKKwkJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJjX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcmNfYXR0cnMsCit9OworCisvKgorICogUmVnaXN0cmF0aW9uIG9mIHN5c2ZzIHNwZWNpZmljIHN0dWZmCisgKi8KK3N0YXRpYyBpbnQgdXdiX3JjX3N5c19hZGQoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmMtPnV3Yl9kZXYuZGV2LmtvYmosICZyY19hdHRyX2dyb3VwKTsKK30KKworCitzdGF0aWMgdm9pZCBfX3V3Yl9yY19zeXNfcm0oc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZyYy0+dXdiX2Rldi5kZXYua29iaiwgJnJjX2F0dHJfZ3JvdXApOworfQorCisvKioKKyAqIHV3Yl9yY19tYWNfYWRkcl9zZXR1cCAtIGdldCBhbiBSQydzIEVVSS00OCBhZGRyZXNzIG9yIHNldCBpdAorICogQHJjOiAgdGhlIHJhZGlvIGNvbnRyb2xsZXIuCisgKgorICogSWYgdGhlIEVVSS00OCBhZGRyZXNzIGlzIDAwOjAwOjAwOjAwOjAwOjAwIG9yIEZGOkZGOkZGOkZGOkZGOkZGCisgKiB0aGVuIGEgcmFuZG9tIGxvY2FsbHkgYWRtaW5pc3RlcmVkIEVVSS00OCBpcyBnZW5lcmF0ZWQgYW5kIHNldCBvbgorICogdGhlIGRldmljZS4gIFRoZSBwcm9iYWJpbGl0eSBvZiBhZGRyZXNzIGNvbGxpc2lvbnMgaXMgc3VmZmljaWVudGx5CisgKiB1bmxpa2VseSAoMS8yXjQwID0gOS4xZS0xMykgdGhhdCB0aGV5J3JlIG5vdCBjaGVja2VkIGZvci4KKyAqLworc3RhdGljCitpbnQgdXdiX3JjX21hY19hZGRyX3NldHVwKHN0cnVjdCB1d2JfcmMgKnJjKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiA9ICZyYy0+dXdiX2RldjsKKwljaGFyIGRldm5hbWVbVVdCX0FERFJfU1RSU0laRV07CisJc3RydWN0IHV3Yl9tYWNfYWRkciBhZGRyOworCisJcmVzdWx0ID0gdXdiX3JjX21hY19hZGRyX2dldChyYywgJmFkZHIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJldHJpZXZlIFVXQiBFVUktNDggYWRkcmVzczogJWRcbiIsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJaWYgKHV3Yl9tYWNfYWRkcl91bnNldCgmYWRkcikgfHwgdXdiX21hY19hZGRyX2JjYXN0KCZhZGRyKSkgeworCQlhZGRyLmRhdGFbMF0gPSAweDAyOyAvKiBsb2NhbGx5IGFkbWluc3RlcmVkIGFuZCB1bmljYXN0ICovCisJCWdldF9yYW5kb21fYnl0ZXMoJmFkZHIuZGF0YVsxXSwgc2l6ZW9mKGFkZHIuZGF0YSktMSk7CisKKwkJcmVzdWx0ID0gdXdiX3JjX21hY19hZGRyX3NldChyYywgJmFkZHIpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJdXdiX21hY19hZGRyX3ByaW50KGRldm5hbWUsIHNpemVvZihkZXZuYW1lKSwgJmFkZHIpOworCQkJZGV2X2VycihkZXYsICJjYW5ub3Qgc2V0IEVVSS00OCBhZGRyZXNzICVzOiAlZFxuIiwKKwkJCQlkZXZuYW1lLCByZXN1bHQpOworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKwl1d2JfZGV2LT5tYWNfYWRkciA9IGFkZHI7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHV3Yl9yY19zZXR1cChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisKKwlyZXN1bHQgPSB1d2JfcmNfcmVzZXQocmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlc2V0IFVXQiByYWRpbzogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCXJlc3VsdCA9IHV3Yl9yY19tYWNfYWRkcl9zZXR1cChyYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3Qgc2V0dXAgVVdCIE1BQyBhZGRyZXNzOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJcmVzdWx0ID0gdXdiX3JjX2Rldl9hZGRyX2Fzc2lnbihyYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgYXNzaWduIFVXQiBEZXZBZGRyOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJcmVzdWx0ID0gdXdiX3JjX2llX3NldHVwKHJjKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBJRSBzdWJzeXN0ZW06ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX2llX3NldHVwOworCX0KKwlyZXN1bHQgPSB1d2JfcnN2X3NldHVwKHJjKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCByZXNlcnZhdGlvbiBzdWJzeXN0ZW06ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3Jzdl9zZXR1cDsKKwl9CisJdXdiX2RiZ19hZGRfcmMocmMpOworCXJldHVybiAwOworCitlcnJvcl9yc3Zfc2V0dXA6CisJdXdiX3JjX2llX3JlbGVhc2UocmMpOworZXJyb3JfaWVfc2V0dXA6CitlcnJvcjoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogUmVnaXN0ZXIgYSBuZXcgVVdCIHJhZGlvIGNvbnRyb2xsZXIKKyAqCisgKiBEaWQgeW91IGNhbGwgdXdiX3JjX2luaXQoKSBvbiB5b3VyIHJjPworICoKKyAqIFdlIGFzc3VtZSB0aGF0IHRoaXMgaXMgYmVpbmcgY2FsbGVkIHdpdGggYSA+IDAgcmVmY291bnQgb24KKyAqIGl0IFt0aHJvdWdoIG9wcy0+e2dldHxwdXR9X2RldmljZSgpLiBXZSdsbCB0YWtlIG91ciBvd24sIHRob3VnaC4KKyAqCisgKiBAcGFyZW50X2RldiBpcyBvdXIgcmVhbCBkZXZpY2UsIHRoZSBvbmUgdGhhdCBwcm92aWRlcyB0aGUgYWN0dWFsIFVXQiBkZXZpY2UKKyAqLworaW50IHV3Yl9yY19hZGQoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYsIHZvaWQgKnByaXYpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJY2hhciBtYWNidWZbVVdCX0FERFJfU1RSU0laRV0sIGRldmJ1ZltVV0JfQUREUl9TVFJTSVpFXTsKKworCXJjLT5pbmRleCA9IHV3Yl9yY19uZXdfaW5kZXgoKTsKKworCWRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisJZGV2X3NldF9uYW1lKGRldiwgInV3YiVkIiwgcmMtPmluZGV4KTsKKworCXJjLT5wcml2ID0gcHJpdjsKKworCXJlc3VsdCA9IHJjLT5zdGFydChyYyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfcmNfc3RhcnQ7CisKKwlyZXN1bHQgPSB1d2JfcmNfc2V0dXAocmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHNldHVwIFVXQiByYWRpbyBjb250cm9sbGVyOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9yY19zZXR1cDsKKwl9CisKKwlyZXN1bHQgPSB1d2JfZGV2X2FkZCgmcmMtPnV3Yl9kZXYsIHBhcmVudF9kZXYsIHJjKTsKKwlpZiAocmVzdWx0IDwgMCAmJiByZXN1bHQgIT0gLUVBRERSTk9UQVZBSUwpCisJCWdvdG8gZXJyb3JfZGV2X2FkZDsKKworCXJlc3VsdCA9IHV3Yl9yY19zeXNfYWRkKHJjKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKHBhcmVudF9kZXYsICJjYW5ub3QgcmVnaXN0ZXIgVVdCIHJhZGlvIGNvbnRyb2xsZXIgIgorCQkJImRldiBhdHRyaWJ1dGVzOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9zeXNfYWRkOworCX0KKworCXV3Yl9tYWNfYWRkcl9wcmludChtYWNidWYsIHNpemVvZihtYWNidWYpLCAmcmMtPnV3Yl9kZXYubWFjX2FkZHIpOworCXV3Yl9kZXZfYWRkcl9wcmludChkZXZidWYsIHNpemVvZihkZXZidWYpLCAmcmMtPnV3Yl9kZXYuZGV2X2FkZHIpOworCWRldl9pbmZvKGRldiwKKwkJICJuZXcgdXdiIHJhZGlvIGNvbnRyb2xsZXIgKG1hYyAlcyBkZXYgJXMpIG9uICVzICVzXG4iLAorCQkgbWFjYnVmLCBkZXZidWYsIHBhcmVudF9kZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUocGFyZW50X2RldikpOworCXJjLT5yZWFkeSA9IDE7CisJcmV0dXJuIDA7CisKK2Vycm9yX3N5c19hZGQ6CisJdXdiX2Rldl9ybSgmcmMtPnV3Yl9kZXYpOworZXJyb3JfZGV2X2FkZDoKK2Vycm9yX3JjX3NldHVwOgorCXJjLT5zdG9wKHJjKTsKKwl1d2JkX2ZsdXNoKHJjKTsKK2Vycm9yX3JjX3N0YXJ0OgorCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmNfYWRkKTsKKworCitzdGF0aWMgaW50IHV3Yl9kZXZfb2ZmYWlyX2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYgPSB0b191d2JfZGV2KGRldik7CisKKwlyZXR1cm4gX191d2JfZGV2X29mZmFpcih1d2JfZGV2LCB1d2JfZGV2LT5yYyk7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBSYWRpbyBDb250cm9sbGVyOyBzdG9wIGJlYWNvbmluZy9zY2FubmluZywgZGlzY29ubmVjdCBhbGwgY2hpbGRyZW4KKyAqLwordm9pZCB1d2JfcmNfcm0oc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJcmMtPnJlYWR5ID0gMDsKKworCXV3Yl9kYmdfZGVsX3JjKHJjKTsKKwl1d2JfcnN2X2NsZWFudXAocmMpOworCXV3Yl9yY19pZV9ybShyYywgVVdCX0lERU5USUZJQ0FUSU9OX0lFKTsKKwlpZiAocmMtPmJlYWNvbmluZyA+PSAwKQorCQl1d2JfcmNfYmVhY29uKHJjLCAtMSwgMCk7CisJaWYgKHJjLT5zY2FuX3R5cGUgIT0gVVdCX1NDQU5fRElTQUJMRUQpCisJCXV3Yl9yY19zY2FuKHJjLCByYy0+c2Nhbm5pbmcsIFVXQl9TQ0FOX0RJU0FCTEVELCAwKTsKKwl1d2JfcmNfcmVzZXQocmMpOworCisJcmMtPnN0b3AocmMpOworCXV3YmRfZmx1c2gocmMpOworCisJdXdiX2Rldl9sb2NrKCZyYy0+dXdiX2Rldik7CisJcmMtPnByaXYgPSBOVUxMOworCXJjLT5jbWQgPSBOVUxMOworCXV3Yl9kZXZfdW5sb2NrKCZyYy0+dXdiX2Rldik7CisJbXV0ZXhfbG9jaygmdXdiX2JlY2EubXV0ZXgpOworCXV3Yl9kZXZfZm9yX2VhY2gocmMsIHV3Yl9kZXZfb2ZmYWlyX2hlbHBlciwgTlVMTCk7CisJX191d2JfcmNfc3lzX3JtKHJjKTsKKwltdXRleF91bmxvY2soJnV3Yl9iZWNhLm11dGV4KTsKKwl1d2JfZGV2X3JtKCZyYy0+dXdiX2Rldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmNfcm0pOworCitzdGF0aWMgaW50IGZpbmRfcmNfdHJ5X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHV3Yl9yYyAqdGFyZ2V0X3JjID0gZGF0YTsKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKHJjID09IE5VTEwpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyYyA9PSB0YXJnZXRfcmMpIHsKKwkJaWYgKHJjLT5yZWFkeSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHaXZlbiBhIHJhZGlvIGNvbnRyb2xsZXIgZGVzY3JpcHRvciwgdmFsaWRhdGUgYW5kIHJlZmNvdW50IGl0CisgKgorICogQHJldHVybnMgTlVMTCBpZiB0aGUgcmMgZG9lcyBub3QgZXhpc3Qgb3IgaXMgcXVpZXNjaW5nOyB0aGUgcHRyIHRvCisgKiAgICAgICAgICAgICAgIGl0IG90aGVyd2lzZS4KKyAqLworc3RydWN0IHV3Yl9yYyAqX191d2JfcmNfdHJ5X2dldChzdHJ1Y3QgdXdiX3JjICp0YXJnZXRfcmMpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB1d2JfcmMgKnJjID0gTlVMTDsKKworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZ1d2JfcmNfY2xhc3MsIE5VTEwsIHRhcmdldF9yYywKKwkJCQlmaW5kX3JjX3RyeV9nZXQpOworCWlmIChkZXYpIHsKKwkJcmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwkJX191d2JfcmNfZ2V0KHJjKTsKKwl9CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX191d2JfcmNfdHJ5X2dldCk7CisKKy8qCisgKiBSQyBnZXQgZm9yIGV4dGVybmFsIHJlZmNvdW50IGFjcXVpcmVycy4uLgorICoKKyAqIEluY3JlbWVudHMgdGhlIHJlZmNvdW50IG9mIHRoZSBkZXZpY2UgYW5kIGl0J3MgYmFja2VuZCBtb2R1bGVzCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHV3Yl9yYyAqdXdiX3JjX2dldChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlpZiAocmMtPnJlYWR5ID09IDApCisJCXJldHVybiBOVUxMOworCXV3Yl9kZXZfZ2V0KCZyYy0+dXdiX2Rldik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGZpbmRfcmNfZ3JhbmRwYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZ3JhbmRwYV9kZXYgPSBkYXRhOworCXN0cnVjdCB1d2JfcmMgKnJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAocmMtPnV3Yl9kZXYuZGV2LnBhcmVudC0+cGFyZW50ID09IGdyYW5kcGFfZGV2KSB7CisJCXJjID0gdXdiX3JjX2dldChyYyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBMb2NhdGUgYW5kIHJlZmNvdW50IGEgcmFkaW8gY29udHJvbGxlciBnaXZlbiBhIGNvbW1vbiBncmFuZC1wYXJlbnQKKyAqCisgKiBAZ3JhbmRwYV9kZXYgIFBvaW50ZXIgdG8gdGhlICdncmFuZHBhcmVudCcgZGV2aWNlIHN0cnVjdHVyZS4KKyAqIEByZXR1cm5zIE5VTEwgSWYgdGhlIHJjIGRvZXMgbm90IGV4aXN0IG9yIGlzIHF1aWVzY2luZzsgdGhlIHB0ciB0bworICogICAgICAgICAgICAgICBpdCBvdGhlcndpc2UsIHByb3Blcmx5IHJlZmVyZW5jZWQuCisgKgorICogVGhlIFJhZGlvIENvbnRyb2wgaW50ZXJmYWNlIChvciB0aGUgVVdCIFJhZGlvIENvbnRyb2xsZXIpIGlzIGFsd2F5cworICogYW4gaW50ZXJmYWNlIG9mIGEgZGV2aWNlLiBUaGUgcGFyZW50IGlzIHRoZSBpbnRlcmZhY2UsIHRoZQorICogZ3JhbmRwYXJlbnQgaXMgdGhlIGRldmljZSB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUgaW50ZXJmYWNlLgorICoKKyAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gbG9jayBhcm91bmQgYXMgdGhlICJncmFuZHBhIiB3b3VsZCBiZQorICogcmVmY291bnRlZCBieSB0aGUgdGFyZ2V0LCBhbmQgdG8gcmVtb3ZlIHRoZSByZWZlcmVtZXMsIHRoZQorICogdXdiX3JjX2NsYXNzLT5zZW0gd291bGQgaGF2ZSB0byBiZSB0YWtlbi0td2UgaG9sZCBpdCwgZXJnbyB3ZQorICogc2hvdWxkIGJlIHNhZmUuCisgKi8KK3N0cnVjdCB1d2JfcmMgKnV3Yl9yY19nZXRfYnlfZ3JhbmRwYShjb25zdCBzdHJ1Y3QgZGV2aWNlICpncmFuZHBhX2RldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSBOVUxMOworCisJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJnV3Yl9yY19jbGFzcywgTlVMTCwgKHZvaWQgKilncmFuZHBhX2RldiwKKwkJCQlmaW5kX3JjX2dyYW5kcGEpOworCWlmIChkZXYpCisJCXJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3JjX2dldF9ieV9ncmFuZHBhKTsKKworLyoqCisgKiBGaW5kIGEgcmFkaW8gY29udHJvbGxlciBieSBkZXZpY2UgYWRkcmVzcworICoKKyAqIEByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSByYWRpbyBjb250cm9sbGVyLCBwcm9wZXJseSByZWZlcmVuY2VkCisgKi8KK3N0YXRpYyBpbnQgZmluZF9yY19kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB1d2JfZGV2X2FkZHIgKmFkZHIgPSBkYXRhOworCXN0cnVjdCB1d2JfcmMgKnJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAocmMgPT0gTlVMTCkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCF1d2JfZGV2X2FkZHJfY21wKCZyYy0+dXdiX2Rldi5kZXZfYWRkciwgYWRkcikpIHsKKwkJcmMgPSB1d2JfcmNfZ2V0KHJjKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgdXdiX3JjICp1d2JfcmNfZ2V0X2J5X2Rldihjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICphZGRyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IE5VTEw7CisKKwlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmdXdiX3JjX2NsYXNzLCBOVUxMLCAodm9pZCAqKWFkZHIsCisJCQkJZmluZF9yY19kZXYpOworCWlmIChkZXYpCisJCXJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmNfZ2V0X2J5X2Rldik7CisKKy8qKgorICogRHJvcCBhIHJlZmVyZW5jZSBvbiBhIHJhZGlvIGNvbnRyb2xsZXIKKyAqCisgKiBUaGlzIGlzIHRoZSB2ZXJzaW9uIHRoYXQgc2hvdWxkIGJlIGRvbmUgYnkgZW50aXRpZXMgZXh0ZXJuYWwgdG8gdGhlCisgKiBVV0IgUmFkaW8gQ29udHJvbCBzdGFjayAoaWU6IGNsaWVudHMgb2YgdGhlIEFQSSkuCisgKi8KK3ZvaWQgdXdiX3JjX3B1dChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlfX3V3Yl9yY19wdXQocmMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3JjX3B1dCk7CisKKy8qCisgKgorICoKKyAqLworc3NpemVfdCB1d2JfcmNfcHJpbnRfSUVzKHN0cnVjdCB1d2JfcmMgKnV3Yl9yYywgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwlzdHJ1Y3QgdXdiX3JjX2V2dF9nZXRfaWUgKmllX2luZm87CisJc3RydWN0IHV3Yl9idWZfY3R4IGN0eDsKKworCXJlc3VsdCA9IHV3Yl9yY19nZXRfaWUodXdiX3JjLCAmaWVfaW5mbyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfZ2V0X2llOworCWN0eC5idWYgPSBidWY7CisJY3R4LnNpemUgPSBzaXplOworCWN0eC5ieXRlcyA9IDA7CisJdXdiX2llX2Zvcl9lYWNoKCZ1d2JfcmMtPnV3Yl9kZXYsIHV3Yl9pZV9kdW1wX2hleCwgJmN0eCwKKwkJCWllX2luZm8tPklFRGF0YSwgcmVzdWx0IC0gc2l6ZW9mKCppZV9pbmZvKSk7CisJcmVzdWx0ID0gY3R4LmJ5dGVzOworCWtmcmVlKGllX2luZm8pOworZXJyb3JfZ2V0X2llOgorCXJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL25laC5jIGIvZHJpdmVycy91d2IvbmVoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0ZWI2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL25laC5jCkBAIC0wLDAgKzEsNjE2IEBACisvKgorICogV1VTQiBXaXJlIEFkYXB0ZXI6IFJhZGlvIENvbnRyb2wgSW50ZXJmYWNlIChXVVNCWzhdKQorICogTm90aWZpY2F0aW9uIGFuZCBFdmVudCBIYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogVGhlIFJDIGludGVyZmFjZSBvZiB0aGUgSG9zdCBXaXJlIEFkYXB0ZXIgKFVTQiBkb25nbGUpIG9yIFdIQ0kgUENJCisgKiBjYXJkIGRlbGl2ZXJzIGEgc3RyZWFtIG9mIG5vdGlmaWNhdGlvbnMgYW5kIGV2ZW50cyB0byB0aGUKKyAqIG5vdGlmaWNhdGlvbiBlbmQgZXZlbnQgZW5kcG9pbnQgb3IgYXJlYS4gVGhpcyBjb2RlIHRha2VzIGNhcmUgb2YKKyAqIGdldHRpbmcgYSBidWZmZXIgd2l0aCB0aGF0IGRhdGEsIGJyZWFraW5nIGl0IHVwIGluIHNlcGFyYXRlCisgKiBub3RpZmljYXRpb25zIGFuZCBldmVudHMgYW5kIHRoZW4gZGVsaXZlciB0aG9zZS4KKyAqCisgKiBFdmVudHMgYXJlIGFuc3dlcnMgdG8gY29tbWFuZHMgYW5kIHRoZXkgY2FycnkgYSBjb250ZXh0IElEIHRoYXQKKyAqIGFzc29jaWF0ZXMgdGhlbSB0byB0aGUgY29tbWFuZC4gTm90aWZpY2F0aW9ucyBhcmUgdGhhdCwKKyAqIG5vdGlmaWNhdGlvbnMsIHRoZXkgY29tZSBvdXQgb2YgdGhlIGJsdWUgYW5kIGhhdmUgYSBjb250ZXh0IElEIG9mCisgKiB6ZXJvLiBUaGluayBvZiB0aGUgY29udGV4dCBJRCBraW5kIG9mIGxpa2UgYSBoYW5kbGVyLiBUaGUKKyAqIHV3Yl9yY19uZWhfKiBjb2RlIGRlYWxzIHdpdGggbWFuYWdpbmcgY29udGV4dCBJRHMuCisgKgorICogVGhpcyBpcyB3aHkgeW91IHJlcXVpcmUgYSBoYW5kbGUgdG8gb3BlcmF0ZSBvbiBhIFVXQiBob3N0LiBXaGVuIHlvdQorICogb3BlbiBhIGhhbmRsZSBhIGNvbnRleHQgSUQgaXMgYXNzaWduZWQgdG8geW91LgorICoKKyAqIFNvLCBhcyBpdCBpcyBkb25lIGlzOgorICoKKyAqIDEuIEFkZCBhbiBldmVudCBoYW5kbGVyIFt1d2JfcmNfbmVoX2FkZCgpXSAoYXNzaWducyBhIGN0eCBpZCkKKyAqIDIuIElzc3VlIGNvbW1hbmQgW3JjLT5jbWQocmMsIC4uLildCisgKiAzLiBBcm0gdGhlIHRpbWVvdXQgdGltZXIgW3V3Yl9yY19uZWhfYXJtKCldCisgKiA0LCBSZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5laCBbdXdiX3JjX25laF9wdXQoKV0KKyAqIDUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjaworICogNi4gQ29tbWFuZCByZXN1bHQgKFJDRUIpIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAqCisgKiBJZiAoMikgZmFpbHMsIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBoYW5kbGUgW3V3Yl9yY19uZWhfcm0oKV0KKyAqIGluc3RlYWQgb2YgYXJtaW5nIHRoZSB0aW1lci4KKyAqCisgKiBIYW5kbGVzIGFyZSBmb3IgdXNpbmcgaW4gKnNlcmlhbGl6ZWQqIGNvZGUsIHNpbmdsZSB0aHJlYWQuCisgKgorICogV2hlbiB0aGUgbm90aWZpY2F0aW9uL2V2ZW50IGNvbWVzLCB0aGUgSVJRIGhhbmRsZXIvZW5kcG9pbnQKKyAqIGNhbGxiYWNrIHBhc3NlcyB0aGUgZGF0YSByZWFkIHRvIHV3Yl9yY19uZWhfZ3JvaygpIHdoaWNoIHdpbGwgYnJlYWsKKyAqIGl0IHVwIGluIGEgZGlzY3JldGUgc2VyaWVzIG9mIGV2ZW50cywgbG9vayB1cCB3aG8gaXMgbGlzdGVuaW5nIGZvcgorICogdGhlbSBhbmQgZXhlY3V0ZSB0aGUgcGVydGluZW50IGNhbGxiYWNrcy4KKyAqCisgKiBJZiB0aGUgcmVhZGVyIGRldGVjdHMgYW4gZXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgZGF0YSBzdHJlYW0sIGNhbGwKKyAqIHV3Yl9yY19uZWhfZXJyb3IoKS4KKyAqCisgKiBDT05TVFJBSU5UUy9BU1NVTVBUSU9OUzoKKyAqCisgKiAtIE1vc3Qgbm90aWZpY2F0aW9ucy9ldmVudHMgYXJlIHNtYWxsIChsZXNzIHRoYW5rIC41ayksIGNvcHlpbmcKKyAqICAgYXJvdW5kIGlzIG9rLgorICoKKyAqIC0gTm90aWZpY2F0aW9ucy9ldmVudHMgYXJlIEFMV0FZUyBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFCisgKgorICogLSBOb3RpZmljYXRpb25zL2V2ZW50cyBhbHdheXMgY29tZSBpbiBhIHNpbmdsZSBwaWVjZSAoaWU6IGEgYnVmZmVyCisgKiAgIHdpbGwgYWx3YXlzIGNvbnRhaW4gZW50aXJlIG5vdGlmaWNhdGlvbnMvZXZlbnRzKS4KKyAqCisgKiAtIHdlIGNhbm5vdCBrbm93IGluIGFkdmFuY2UgaG93IGxvbmcgZWFjaCBldmVudCBpcyAoYmVjYXVzZSB0aGV5CisgKiAgIGxhY2sgYSBsZW5ndGggZmllbGQgaW4gdGhlaXIgaGVhZGVyLS1zbWFydCBtb3ZlIGJ5IHRoZSBzdGFuZGFyZHMKKyAqICAgYm9keSwgYnR3KS4gU28gd2UgbmVlZCBhIGZhY2lsaXR5IHRvIGdldCB0aGUgZXZlbnQgc2l6ZSBnaXZlbiB0aGUKKyAqICAgaGVhZGVyLiBUaGlzIGlzIHdoYXQgdGhlIEVTVCBjb2RlIGRvZXMgKG5vdGlmL0V2ZW50IFNpemUKKyAqICAgVGFibGVzKSwgY2hlY2sgbmVzdC5jLS1hcyB3ZWxsLCB5b3UgY2FuIGFzc29jaWF0ZSB0aGUgc2l6ZSB0bworICogICB0aGUgaGFuZGxlIFt3LyBuZWgtPmV4dHJhX3NpemUoKV0uCisgKgorICogLSBNb3N0IG5vdGlmaWNhdGlvbnMvZXZlbnRzIGFyZSBmaXhlZCBzaXplOyBvbmx5IGEgZmV3IGFyZSB2YXJpYWJsZQorICogICBzaXplIChORVNUIHRha2VzIGNhcmUgb2YgdGhhdCkuCisgKgorICogLSBMaXN0ZW5lcnMgb2YgZXZlbnRzIGV4cGVjdCB0aGVtLCBzbyB0aGV5IHVzdWFsbHkgcHJvdmlkZSBhCisgKiAgIGJ1ZmZlciwgYXMgdGhleSBrbm93IHRoZSBzaXplLiBMaXN0ZW5lcnMgdG8gbm90aWZpY2F0aW9ucyBkb24ndCwKKyAqICAgc28gd2UgYWxsb2NhdGUgdGhlaXIgYnVmZmVycyBkeW5hbWljYWxseS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKyNkZWZpbmUgRF9MT0NBTCAwCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKy8qCisgKiBVV0IgUmFkaW8gQ29udHJvbGxlciBOb3RpZmljYXRpb24vRXZlbnQgSGFuZGxlCisgKgorICogUmVwcmVzZW50cyBhbiBlbnRpdHkgd2FpdGluZyBmb3IgYW4gZXZlbnQgY29taW5nIGZyb20gdGhlIFVXQiBSYWRpbworICogQ29udHJvbGxlciB3aXRoIGEgZ2l2ZW4gY29udGV4dCBpZCAoY29udGV4dCkgYW5kIHR5cGUgKGV2dF90eXBlIGFuZAorICogZXZ0KS4gT24gcmVjZXB0aW9uIG9mIHRoZSBub3RpZmljYXRpb24vZXZlbnQsIHRoZSBjYWxsYmFjayAoY2IpIGlzCisgKiBjYWxsZWQgd2l0aCB0aGUgZXZlbnQuCisgKgorICogSWYgdGhlIHRpbWVyIGV4cGlyZXMgYmVmb3JlIHRoZSBldmVudCBpcyByZWNlaXZlZCwgdGhlIGNhbGxiYWNrIGlzCisgKiBjYWxsZWQgd2l0aCAtRVRJTUVET1VUIGFzIHRoZSBldmVudCBzaXplLgorICovCitzdHJ1Y3QgdXdiX3JjX25laCB7CisJc3RydWN0IGtyZWYga3JlZjsKKworCXN0cnVjdCB1d2JfcmMgKnJjOworCXU4IGV2dF90eXBlOworCV9fbGUxNiBldnQ7CisJdTggY29udGV4dDsKKwl1d2JfcmNfY21kX2NiX2YgY2I7CisJdm9pZCAqYXJnOworCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7Cit9OworCitzdGF0aWMgdm9pZCB1d2JfcmNfbmVoX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKTsKKworc3RhdGljIHZvaWQgdXdiX3JjX25laF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1d2JfcmNfbmVoICpuZWggPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHV3Yl9yY19uZWgsIGtyZWYpOworCisJa2ZyZWUobmVoKTsKK30KKworc3RhdGljIHZvaWQgdXdiX3JjX25laF9nZXQoc3RydWN0IHV3Yl9yY19uZWggKm5laCkKK3sKKwlrcmVmX2dldCgmbmVoLT5rcmVmKTsKK30KKworLyoqCisgKiB1d2JfcmNfbmVoX3B1dCAtIHJlbGVhc2UgcmVmZXJlbmNlIHRvIGEgbmVoCisgKiBAbmVoOiB0aGUgbmVoCisgKi8KK3ZvaWQgdXdiX3JjX25laF9wdXQoc3RydWN0IHV3Yl9yY19uZWggKm5laCkKK3sKKwlrcmVmX3B1dCgmbmVoLT5rcmVmLCB1d2JfcmNfbmVoX3JlbGVhc2UpOworfQorCisKKy8qKgorICogQXNzaWducyBAbmVoIGEgY29udGV4dCBpZCBmcm9tIEByYydzIHBvb2wKKyAqCisgKiBAcmM6CSAgICBVV0IgUmFkaW8gQ29udHJvbGxlciBkZXNjcmlwdG9yOyBAcmMtPm5laF9sb2NrIHRha2VuCisgKiBAbmVoOiAgICBOb3RpZmljYXRpb24vRXZlbnQgSGFuZGxlCisgKiBAcmV0dXJucyAwIGlmIGNvbnRleHQgaWQgd2FzIGFzc2lnbmVkIG9rOyA8IDAgZXJybm8gb24gZXJyb3IgKGlmCisgKgkgICAgYWxsIHRoZSBjb250ZXh0IElEcyBhcmUgdGFrZW4pLgorICoKKyAqIChhc3N1bWVzIEB3YSBpcyBsb2NrZWQpLgorICoKKyAqIE5PVEU6IFdVU0Igc3BlYyByZXNlcnZlcyBjb250ZXh0IGlkcyAweDAwIGZvciBub3RpZmljYXRpb25zIGFuZAorICoJIDB4ZmYgaXMgaW52YWxpZCwgc28gdGhleSBtdXN0IG5vdCBiZSB1c2VkLiBJbml0aWFsaXphdGlvbgorICoJIGZpbGxzIHVwIHRob3NlIHR3byBpbiB0aGUgYml0bWFwIHNvIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQuCisgKgorICogV2Ugc3ByZWFkIHRoZSBhbGxvY2F0aW9uIGFyb3VuZCB0byByZWR1Y2UgdGhlIHBvc2libGl0eSBvZiB0d28KKyAqIGNvbnNlY3V0aXZlIG9wZW5lZCBAbmVoJ3MgZ2V0dGluZyB0aGUgc2FtZSBjb250ZXh0IElEIGFzc2lnbmVkICh0bworICogYXZvaWQgc3VycHJpc2VzIHdpdGggbGF0ZSBldmVudHMgdGhhdCB0aW1lZCBvdXQgbG9uZyB0aW1lIGFnbykuIFNvCisgKiBmaXJzdCB3ZSBzZWFyY2ggZnJvbSB3aGVyZSBAcmMtPmN0eF9yb2xsIGlzLCBpZiBub3QgZm91bmQsIHdlCisgKiBzZWFyY2ggZnJvbSB6ZXJvLgorICovCitzdGF0aWMKK2ludCBfX3V3Yl9yY19jdHhfZ2V0KHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX3JjX25laCAqbmVoKQoreworCWludCByZXN1bHQ7CisJcmVzdWx0ID0gZmluZF9uZXh0X3plcm9fYml0KHJjLT5jdHhfYm0sIFVXQl9SQ19DVFhfTUFYLAorCQkJCSAgICByYy0+Y3R4X3JvbGwrKyk7CisJaWYgKHJlc3VsdCA8IFVXQl9SQ19DVFhfTUFYKQorCQlnb3RvIGZvdW5kOworCXJlc3VsdCA9IGZpbmRfZmlyc3RfemVyb19iaXQocmMtPmN0eF9ibSwgVVdCX1JDX0NUWF9NQVgpOworCWlmIChyZXN1bHQgPCBVV0JfUkNfQ1RYX01BWCkKKwkJZ290byBmb3VuZDsKKwlyZXR1cm4gLUVORklMRTsKK2ZvdW5kOgorCXNldF9iaXQocmVzdWx0LCByYy0+Y3R4X2JtKTsKKwluZWgtPmNvbnRleHQgPSByZXN1bHQ7CisJcmV0dXJuIDA7Cit9CisKKworLyoqIFJlbGVhc2VzIEBuZWgncyBjb250ZXh0IElEIGJhY2sgdG8gQHJjIChAcmMtPm5laF9sb2NrIGlzIGxvY2tlZCkuICovCitzdGF0aWMKK3ZvaWQgX191d2JfcmNfY3R4X3B1dChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY19uZWggKm5laCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCWlmIChuZWgtPmNvbnRleHQgPT0gMCkKKwkJcmV0dXJuOworCWlmICh0ZXN0X2JpdChuZWgtPmNvbnRleHQsIHJjLT5jdHhfYm0pID09IDApIHsKKwkJZGV2X2VycihkZXYsICJjb250ZXh0ICV1IG5vdCBzZXQgaW4gYml0bWFwXG4iLAorCQkJbmVoLT5jb250ZXh0KTsKKwkJV0FSTl9PTigxKTsKKwl9CisJY2xlYXJfYml0KG5laC0+Y29udGV4dCwgcmMtPmN0eF9ibSk7CisJbmVoLT5jb250ZXh0ID0gMDsKK30KKworLyoqCisgKiB1d2JfcmNfbmVoX2FkZCAtIGFkZCBhIG5laCBmb3IgYSByYWRpbyBjb250cm9sbGVyIGNvbW1hbmQKKyAqIEByYzogICAgICAgICAgICAgdGhlIHJhZGlvIGNvbnRyb2xsZXIKKyAqIEBjbWQ6ICAgICAgICAgICAgdGhlIHJhZGlvIGNvbnRyb2xsZXIgY29tbWFuZAorICogQGV4cGVjdGVkX3R5cGU6ICB0aGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgZXZlbnQKKyAqIEBleHBlY3RlZF9ldmVudDogdGhlIGV4cGVjdGVkIGV2ZW50IElECisgKiBAY2I6ICAgICAgICAgICAgIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBldmVudCBpcyByZWNlaXZlZAorICogQGFyZzogICAgICAgICAgICBhcmd1bWVudCBmb3IgdGhlIGNhbGxiYWNrCisgKgorICogQ3JlYXRlcyBhIG5laCBhbmQgYWRkcyBpdCB0byB0aGUgbGlzdCBvZiB0aG9zZSB3YWl0aW5nIGZvciBhbgorICogZXZlbnQuICBBIGNvbnRleHQgSUQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgY29tbWFuZC4KKyAqLworc3RydWN0IHV3Yl9yY19uZWggKnV3Yl9yY19uZWhfYWRkKHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX3JjY2IgKmNtZCwKKwkJCQkgIHU4IGV4cGVjdGVkX3R5cGUsIHUxNiBleHBlY3RlZF9ldmVudCwKKwkJCQkgIHV3Yl9yY19jbWRfY2JfZiBjYiwgdm9pZCAqYXJnKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfcmNfbmVoICpuZWg7CisKKwluZWggPSBremFsbG9jKHNpemVvZigqbmVoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5laCA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfa3phbGxvYzsKKwl9CisKKwlrcmVmX2luaXQoJm5laC0+a3JlZik7CisJSU5JVF9MSVNUX0hFQUQoJm5laC0+bGlzdF9ub2RlKTsKKwlpbml0X3RpbWVyKCZuZWgtPnRpbWVyKTsKKwluZWgtPnRpbWVyLmZ1bmN0aW9uID0gdXdiX3JjX25laF90aW1lcjsKKwluZWgtPnRpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpbmVoOworCisJbmVoLT5yYyA9IHJjOworCW5laC0+ZXZ0X3R5cGUgPSBleHBlY3RlZF90eXBlOworCW5laC0+ZXZ0ID0gY3B1X3RvX2xlMTYoZXhwZWN0ZWRfZXZlbnQpOworCW5laC0+Y2IgPSBjYjsKKwluZWgtPmFyZyA9IGFyZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyYy0+bmVoX2xvY2ssIGZsYWdzKTsKKwlyZXN1bHQgPSBfX3V3Yl9yY19jdHhfZ2V0KHJjLCBuZWgpOworCWlmIChyZXN1bHQgPj0gMCkgeworCQljbWQtPmJDb21tYW5kQ29udGV4dCA9IG5laC0+Y29udGV4dDsKKwkJbGlzdF9hZGRfdGFpbCgmbmVoLT5saXN0X25vZGUsICZyYy0+bmVoX2xpc3QpOworCQl1d2JfcmNfbmVoX2dldChuZWgpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyYy0+bmVoX2xvY2ssIGZsYWdzKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jdHhfZ2V0OworCisJcmV0dXJuIG5laDsKKworZXJyb3JfY3R4X2dldDoKKwlrZnJlZShuZWgpOworZXJyb3Jfa3phbGxvYzoKKwlkZXZfZXJyKGRldiwgImNhbm5vdCBvcGVuIGhhbmRsZSB0byByYWRpbyBjb250cm9sbGVyOiAlZFxuIiwgcmVzdWx0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCBfX3V3Yl9yY19uZWhfcm0oc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfcmNfbmVoICpuZWgpCit7CisJZGVsX3RpbWVyKCZuZWgtPnRpbWVyKTsKKwlfX3V3Yl9yY19jdHhfcHV0KHJjLCBuZWgpOworCWxpc3RfZGVsKCZuZWgtPmxpc3Rfbm9kZSk7Cit9CisKKy8qKgorICogdXdiX3JjX25laF9ybSAtIHJlbW92ZSBhIG5laC4KKyAqIEByYzogIHRoZSByYWRpbyBjb250cm9sbGVyCisgKiBAbmVoOiB0aGUgbmVoIHRvIHJlbW92ZQorICoKKyAqIFJlbW92ZSBhbiBhY3RpdmUgbmVoIGltbWVkaWF0ZWx5IGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGV2ZW50CisgKiAob3IgYSB0aW1lIG91dCkuCisgKi8KK3ZvaWQgdXdiX3JjX25laF9ybShzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY19uZWggKm5laCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJjLT5uZWhfbG9jaywgZmxhZ3MpOworCV9fdXdiX3JjX25laF9ybShyYywgbmVoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyYy0+bmVoX2xvY2ssIGZsYWdzKTsKKworCXV3Yl9yY19uZWhfcHV0KG5laCk7Cit9CisKKy8qKgorICogdXdiX3JjX25laF9hcm0gLSBhcm0gYW4gZXZlbnQgaGFuZGxlciB0aW1lb3V0IHRpbWVyCisgKgorICogQHJjOiAgICAgVVdCIFJhZGlvIENvbnRyb2xsZXIKKyAqIEBuZWg6ICAgIE5vdGlmaWNhdGlvbi9ldmVudCBoYW5kbGVyIGZvciBAcmMKKyAqCisgKiBUaGUgdGltZXIgaXMgb25seSBhcm1lZCBpZiB0aGUgbmVoIGlzIGFjdGl2ZS4KKyAqLwordm9pZCB1d2JfcmNfbmVoX2FybShzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY19uZWggKm5laCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJjLT5uZWhfbG9jaywgZmxhZ3MpOworCWlmIChuZWgtPmNvbnRleHQpCisJCW1vZF90aW1lcigmbmVoLT50aW1lciwKKwkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVVdCX1JDX0NNRF9USU1FT1VUX01TKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmMtPm5laF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHV3Yl9yY19uZWhfY2Ioc3RydWN0IHV3Yl9yY19uZWggKm5laCwgc3RydWN0IHV3Yl9yY2ViICpyY2ViLCBzaXplX3Qgc2l6ZSkKK3sKKwkoKm5laC0+Y2IpKG5laC0+cmMsIG5laC0+YXJnLCByY2ViLCBzaXplKTsKKwl1d2JfcmNfbmVoX3B1dChuZWgpOworfQorCitzdGF0aWMgYm9vbCB1d2JfcmNfbmVoX21hdGNoKHN0cnVjdCB1d2JfcmNfbmVoICpuZWgsIGNvbnN0IHN0cnVjdCB1d2JfcmNlYiAqcmNlYikKK3sKKwlyZXR1cm4gbmVoLT5ldnRfdHlwZSA9PSByY2ViLT5iRXZlbnRUeXBlCisJCSYmIG5laC0+ZXZ0ID09IHJjZWItPndFdmVudAorCQkmJiBuZWgtPmNvbnRleHQgPT0gcmNlYi0+YkV2ZW50Q29udGV4dDsKK30KKworLyoqCisgKiBGaW5kIHRoZSBoYW5kbGUgd2FpdGluZyBmb3IgYSBSQyBSYWRpbyBDb250cm9sIEV2ZW50CisgKgorICogQHJjOiAgICAgICAgIFVXQiBSYWRpbyBDb250cm9sbGVyCisgKiBAcmNlYjogICAgICAgUG9pbnRlciB0byB0aGUgUkNFQiBidWZmZXIKKyAqIEBldmVudF9zaXplOiBQb2ludGVyIHRvIHRoZSBzaXplIG9mIHRoZSBSQ0VCIGJ1ZmZlci4gTWlnaHQgYmUKKyAqICAgICAgICAgICAgICBhZGp1c3RlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgQG5laC0+ZXh0cmFfc2l6ZQorICogICAgICAgICAgICAgIHNldHRpbmdzLgorICoKKyAqIElmIHRoZSBsaXN0ZW5lciBoYXMgbm8gYnVmZmVyIChOVUxMIGJ1ZmZlciksIG9uZSBpcyBhbGxvY2F0ZWQgZm9yCisgKiB0aGUgcmlnaHQgc2l6ZSAodGhlIGFtb3VudCBvZiBkYXRhIHJlY2VpdmVkKS4gQG5laC0+cHRyIHdpbGwgcG9pbnQKKyAqIHRvIHRoZSBldmVudCBwYXlsb2FkLCB3aGljaCBhbHdheXMgc3RhcnRzIHdpdGggYSAnc3RydWN0CisgKiB1d2JfcmNlYicuIGtmcmVlKCkgaXQgd2hlbiBkb25lLgorICovCitzdGF0aWMKK3N0cnVjdCB1d2JfcmNfbmVoICp1d2JfcmNfbmVoX2xvb2t1cChzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB1d2JfcmNlYiAqcmNlYikKK3sKKwlzdHJ1Y3QgdXdiX3JjX25laCAqbmVoID0gTlVMTCwgKmg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyYy0+bmVoX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJnJjLT5uZWhfbGlzdCwgbGlzdF9ub2RlKSB7CisJCWlmICh1d2JfcmNfbmVoX21hdGNoKGgsIHJjZWIpKSB7CisJCQluZWggPSBoOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobmVoKQorCQlfX3V3Yl9yY19uZWhfcm0ocmMsIG5laCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyYy0+bmVoX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBuZWg7Cit9CisKKworLyoqCisgKiBQcm9jZXNzIG5vdGlmaWNhdGlvbnMgY29taW5nIGZyb20gdGhlIHJhZGlvIGNvbnRyb2wgaW50ZXJmYWNlCisgKgorICogQHJjOiAgICBVV0IgUmFkaW8gQ29udHJvbCBJbnRlcmZhY2UgZGVzY3JpcHRvcgorICogQG5laDogICBOb3RpZmljYXRpb24vRXZlbnQgSGFuZGxlciBAbmVoLT5wdHIgcG9pbnRzIHRvCisgKiAgICAgICAgIEB1d2JfZXZ0LT5idWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGV2ZW50L25vdGlmIGhhbmRsaW5nIHN1YnN5c3RlbSB3aGVuCisgKiBub3RpZmljYXRpb25zIGFycml2ZSAoaHdhcmNfcHJvYmUoKSBhcm1zIGEgbm90aWZpY2F0aW9uL2V2ZW50IGhhbmRsZQorICogdGhhdCBjYWxscyBiYWNrIHRoaXMgZnVuY3Rpb24gZm9yIGV2ZXJ5IHJlY2VpdmVkIG5vdGlmaWNhdGlvbjsgdGhpcworICogZnVuY3Rpb24gdGhlbiB3aWxsIHJlYXJtIGl0c2VsZikuCisgKgorICogTm90aWZpY2F0aW9uIGRhdGEgYnVmZmVycyBhcmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ5IHRoZSBORUgKKyAqIGhhbmRsaW5nIGNvZGUgaW4gbmVoLmMgW3V3Yl9yY19uZWhfbG9va3VwKCldLiBXaGF0IGlzIGFjdHVhbGx5CisgKiBhbGxvY2F0ZWQgaXMgc3BhY2UgdG8gY29udGFpbiB0aGUgbm90aWZpY2F0aW9uIGRhdGEuCisgKgorICogQnVmZmVycyBhcmUgcHJlZml4ZWQgd2l0aCBhIFJhZGlvIENvbnRyb2wgRXZlbnQgQmxvY2sgKFJDRUIpIGFzCisgKiBkZWZpbmVkIGJ5IHRoZSBXVVNCIFdpcmVkLUFkYXB0ZXIgUmFkaW8gQ29udHJvbCBpbnRlcmZhY2UuIFdlCisgKiBqdXN0IHVzZSBpdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBjb2RlLgorICoKKyAqIE9uIGVhY2ggY2FzZSBzdGF0ZW1lbnQgd2UganVzdCB0cmFuc2NvZGUgZW5kaWFuZXNzIG9mIHRoZSBkaWZmZXJlbnQKKyAqIGZpZWxkcy4gV2UgZGVjbGFyZSBhIHBvaW50ZXIgdG8gYSBSQ0kgZGVmaW5pdGlvbiBvZiBhbiBldmVudCwgYW5kCisgKiB0aGVuIHRvIGEgVVdCIGRlZmluaXRpb24gb2YgdGhlIHNhbWUgZXZlbnQgKHdoaWNoIGFyZSB0aGUgc2FtZSwKKyAqIHJlbWVtYmVyKS4gRXZlbnQgaWYgd2UgdXNlIGRpZmZlcmVudCBwb2ludGVycworICovCitzdGF0aWMKK3ZvaWQgdXdiX3JjX25vdGlmKHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX3JjZWIgKnJjZWIsIHNzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfZXZlbnQgKnV3Yl9ldnQ7CisKKwlpZiAoc2l6ZSA9PSAtRVNIVVRET1dOKQorCQlyZXR1cm47CisJaWYgKHNpemUgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiaWdub3JpbmcgZXZlbnQgd2l0aCBlcnJvciBjb2RlICV6dVxuIiwKKwkJCXNpemUpOworCQlyZXR1cm47CisJfQorCisJdXdiX2V2dCA9IGt6YWxsb2Moc2l6ZW9mKCp1d2JfZXZ0KSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KHV3Yl9ldnQgPT0gTlVMTCkpIHsKKwkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgdG8gcXVldWUgZXZlbnQgMHglMDJ4LyUwNHgvJTAyeFxuIiwKKwkJCXJjZWItPmJFdmVudFR5cGUsIGxlMTZfdG9fY3B1KHJjZWItPndFdmVudCksCisJCQlyY2ViLT5iRXZlbnRDb250ZXh0KTsKKwkJcmV0dXJuOworCX0KKwl1d2JfZXZ0LT5yYyA9IF9fdXdiX3JjX2dldChyYyk7CS8qIHdpbGwgYmUgcHV0IGJ5IHV3YmQncyB1d2JkX2V2ZW50X2hhbmRsZSgpICovCisJdXdiX2V2dC0+dHNfamlmZmllcyA9IGppZmZpZXM7CisJdXdiX2V2dC0+dHlwZSA9IFVXQl9FVlRfVFlQRV9OT1RJRjsKKwl1d2JfZXZ0LT5ub3RpZi5zaXplID0gc2l6ZTsKKwl1d2JfZXZ0LT5ub3RpZi5yY2ViID0gcmNlYjsKKworCXN3aXRjaCAobGUxNl90b19jcHUocmNlYi0+d0V2ZW50KSkgeworCQkvKiBUcmFwIHNvbWUgdmVuZG9yIHNwZWNpZmljIGV2ZW50cworCQkgKgorCQkgKiBGSVhNRTogbW92ZSB0aGlzIHRvIGhhbmRsaW5nIGluIHB0Yy1lc3QsIHdoZXJlIHdlCisJCSAqIHJlZ2lzdGVyIGEgTlVMTCBldmVudCBoYW5kbGVyIGZvciB0aGVzZSB0d28gZ3V5cworCQkgKiB1c2luZyB0aGUgSW50ZWwgSURzLgorCQkgKi8KKwljYXNlIDB4MDEwMzoKKwkJZGV2X2luZm8oZGV2LCAiRklYTUU6IERFVklDRSBBRERcbiIpOworCQlyZXR1cm47CisJY2FzZSAweDAxMDQ6CisJCWRldl9pbmZvKGRldiwgIkZJWE1FOiBERVZJQ0UgUk1cbiIpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdXdiZF9ldmVudF9xdWV1ZSh1d2JfZXZ0KTsKK30KKworc3RhdGljIHZvaWQgdXdiX3JjX25laF9ncm9rX2V2ZW50KHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX3JjZWIgKnJjZWIsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9yY19uZWggKm5laDsKKwlzdHJ1Y3QgdXdiX3JjZWIgKm5vdGlmOworCisJaWYgKHJjZWItPmJFdmVudENvbnRleHQgPT0gMCkgeworCQlub3RpZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmIChub3RpZikgeworCQkJbWVtY3B5KG5vdGlmLCByY2ViLCBzaXplKTsKKwkJCXV3Yl9yY19ub3RpZihyYywgbm90aWYsIHNpemUpOworCQl9IGVsc2UKKwkJCWRldl9lcnIoZGV2LCAiZXZlbnQgMHglMDJ4LyUwNHgvJTAyeCAoJXp1IGJ5dGVzKTogbm8gbWVtb3J5XG4iLAorCQkJCXJjZWItPmJFdmVudFR5cGUsIGxlMTZfdG9fY3B1KHJjZWItPndFdmVudCksCisJCQkJcmNlYi0+YkV2ZW50Q29udGV4dCwgc2l6ZSk7CisJfSBlbHNlIHsKKwkJbmVoID0gdXdiX3JjX25laF9sb29rdXAocmMsIHJjZWIpOworCQlpZiAobmVoKQorCQkJdXdiX3JjX25laF9jYihuZWgsIHJjZWIsIHNpemUpOworCQllbHNlCisJCQlkZXZfd2FybihkZXYsICJldmVudCAweCUwMngvJTA0eC8lMDJ4ICglenUgYnl0ZXMpOiBub2JvZHkgY2FyZWRcbiIsCisJCQkJIHJjZWItPmJFdmVudFR5cGUsIGxlMTZfdG9fY3B1KHJjZWItPndFdmVudCksCisJCQkJIHJjZWItPmJFdmVudENvbnRleHQsIHNpemUpOworCX0KK30KKworLyoqCisgKiBHaXZlbiBhIGJ1ZmZlciB3aXRoIG9uZSBvciBtb3JlIFVXQiBSQyBldmVudHMvbm90aWZpY2F0aW9ucywgYnJlYWsKKyAqIHRoZW0gdXAgYW5kIGRpc3BhdGNoIHRoZW0uCisgKgorICogQHJjOgkgICAgICBVV0IgUmFkaW8gQ29udHJvbGxlcgorICogQGJ1ZjogICAgICBCdWZmZXIgd2l0aCB0aGUgc3RyZWFtIG9mIG5vdGlmaWNhdGlvbnMvZXZlbnRzCisgKiBAYnVmX3NpemU6IEFtb3VudCBvZiBkYXRhIGluIHRoZSBidWZmZXIKKyAqCisgKiBOb3RlIGVhY2ggbm90aWZpY2F0aW9uL2V2ZW50IHN0YXJ0cyBhbHdheXMgd2l0aCBhICdzdHJ1Y3QKKyAqIHV3Yl9yY2ViJywgc28gdGhlIG1pbmltdW0gc2l6ZSBpZiA0IGJ5dGVzLgorICoKKyAqIFRoZSBkZXZpY2UgbWF5IHBhc3MgdXMgZXZlbnRzIGZvcm1hdHRlZCBkaWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLgorICogVGhlc2UgYXJlIGZpcnN0IGZpbHRlcmVkLCBwb3RlbnRpYWxseSBjcmVhdGluZyBhIG5ldyBldmVudCBpbiBhIG5ldworICogbWVtb3J5IGxvY2F0aW9uLiBJZiBhIG5ldyBldmVudCBpcyBjcmVhdGVkIGJ5IHRoZSBmaWx0ZXIgaXQgaXMgYWxzbworICogZnJlZWQgaGVyZS4KKyAqCisgKiBGb3IgZWFjaCBub3RpZi9ldmVudCwgdHJpZXMgdG8gZ3Vlc3MgdGhlIHNpemUgbG9va2luZyBhdCB0aGUgRVNUCisgKiB0YWJsZXMsIHRoZW4gbG9va3MgZm9yIGEgbmVoIHRoYXQgaXMgd2FpdGluZyBmb3IgdGhhdCBldmVudCBhbmQgaWYKKyAqIGZvdW5kLCBjb3BpZXMgdGhlIHBheWxvYWQgdG8gdGhlIG5laCdzIGJ1ZmZlciBhbmQgY2FsbHMgaXQgYmFjay4gSWYKKyAqIG5vdCwgdGhlIGRhdGEgaXMgaWdub3JlZC4KKyAqCisgKiBOb3RlIHRoYXQgaWYgd2UgY2FuJ3QgZmluZCBhIHNpemUgZGVzY3JpcHRpb24gaW4gdGhlIEVTVCB0YWJsZXMsIHdlCisgKiBzdGlsbCBtaWdodCBmaW5kIGEgc2l6ZSBpbiB0aGUgJ25laCcgaGFuZGxlIGluIHV3Yl9yY19uZWhfbG9va3VwKCkuCisgKgorICogQXNzdW1wdGlvbnM6CisgKgorICogICBAcmMtPm5laF9sb2NrIGlzIE5PVCB0YWtlbgorICoKKyAqIFdlIGtlZXAgdHJhY2sgb2YgdmFyaW91cyBzaXplcyBoZXJlOgorICogc2l6ZTogICAgICBjb250YWlucyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRoYXQgaXMgcHJvY2Vzc2VkIGZvciB0aGUKKyAqICAgICAgICAgICAgaW5jb21pbmcgZXZlbnQuIHRoaXMgYnVmZmVyIG1heSBjb250YWluIGV2ZW50cyB0aGF0IGFyZSBub3QKKyAqICAgICAgICAgICAgZm9ybWF0dGVkIGFzIFdIQ0kuCisgKiByZWFsX3NpemU6IHRoZSBhY3R1YWwgc3BhY2UgdGFrZW4gYnkgdGhpcyBldmVudCBpbiB0aGUgYnVmZmVyLgorICogICAgICAgICAgICBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJlYWwgc2l6ZSBvZiBhbiBldmVudCB0byBiZSBhYmxlIHRvCisgKiAgICAgICAgICAgIGFkdmFuY2UgdGhlIGJ1ZmZlciBjb3JyZWN0bHkuCisgKiBldmVudF9zaXplOiB0aGUgc2l6ZSBvZiB0aGUgZXZlbnQgYXMgZXhwZWN0ZWQgYnkgdGhlIGNvcmUgbGF5ZXIKKyAqICAgICAgICAgICAgW09SXSB0aGUgc2l6ZSBvZiB0aGUgZXZlbnQgYWZ0ZXIgZmlsdGVyaW5nLiBpZiB0aGUgZmlsdGVyaW5nCisgKiAgICAgICAgICAgIGNyZWF0ZWQgYSBuZXcgZXZlbnQgaW4gYSBuZXcgbWVtb3J5IGxvY2F0aW9uIHRoZW4gdGhpcyBpcworICogICAgICAgICAgICBlZmZlY3RpdmVseSB0aGUgc2l6ZSBvZiBhIG5ldyBldmVudCBidWZmZXIKKyAqLwordm9pZCB1d2JfcmNfbmVoX2dyb2soc3RydWN0IHV3Yl9yYyAqcmMsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisJdm9pZCAqaXRyOworCXN0cnVjdCB1d2JfcmNlYiAqcmNlYjsKKwlzaXplX3Qgc2l6ZSwgcmVhbF9zaXplLCBldmVudF9zaXplOworCWludCBuZWVkdG9mcmVlOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIihyYyAlcCBidWYgJXAgJXp1IGJ1Zl9zaXplKVxuIiwgcmMsIGJ1ZiwgYnVmX3NpemUpOworCWRfcHJpbnRmKDIsIGRldiwgImdyb2tpbmcgZXZlbnQgYmxvY2s6ICV6dSBieXRlc1xuIiwgYnVmX3NpemUpOworCWl0ciA9IGJ1ZjsKKwlzaXplID0gYnVmX3NpemU7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWlmIChzaXplIDwgc2l6ZW9mKCpyY2ViKSkgeworCQkJZGV2X2VycihkZXYsICJub3QgZW5vdWdoIGRhdGEgaW4gZXZlbnQgYnVmZmVyIHRvICIKKwkJCQkicHJvY2VzcyBpbmNvbWluZyBldmVudHMgKCV6dSBsZWZ0LCBtaW5pbXVtIGlzICIKKwkJCQkiJXp1KVxuIiwgc2l6ZSwgc2l6ZW9mKCpyY2ViKSk7CisJCQlicmVhazsKKwkJfQorCisJCXJjZWIgPSBpdHI7CisJCWlmIChyYy0+ZmlsdGVyX2V2ZW50KSB7CisJCQluZWVkdG9mcmVlID0gcmMtPmZpbHRlcl9ldmVudChyYywgJnJjZWIsIHNpemUsCisJCQkJCQkgICAgICAmcmVhbF9zaXplLCAmZXZlbnRfc2l6ZSk7CisJCQlpZiAobmVlZHRvZnJlZSA8IDAgJiYgbmVlZHRvZnJlZSAhPSAtRU5PQU5PKSB7CisJCQkJZGV2X2VycihkZXYsICJCVUc6IFVuYWJsZSB0byBmaWx0ZXIgZXZlbnQgIgorCQkJCQkiKDB4JTAyeC8lMDR4LyUwMngpIGZyb20gIgorCQkJCQkiZGV2aWNlLiBcbiIsIHJjZWItPmJFdmVudFR5cGUsCisJCQkJCWxlMTZfdG9fY3B1KHJjZWItPndFdmVudCksCisJCQkJCXJjZWItPmJFdmVudENvbnRleHQpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UKKwkJCW5lZWR0b2ZyZWUgPSAtRU5PQU5POworCQkvKiBkbyByZWFsIHByb2Nlc3NpbmcgaWYgdGhlcmUgd2FzIG5vIGZpbHRlcmluZyBvciB0aGUKKwkJICogZmlsdGVyaW5nIGRpZG4ndCBhY3QgKi8KKwkJaWYgKG5lZWR0b2ZyZWUgPT0gLUVOT0FOTykgeworCQkJc3NpemVfdCByZXQgPSB1d2JfZXN0X2ZpbmRfc2l6ZShyYywgcmNlYiwgc2l6ZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKwkJCWlmIChyZXQgPiBzaXplKSB7CisJCQkJZGV2X2VycihkZXYsICJCVUc6IGh3IHNlbnQgaW5jb21wbGV0ZSBldmVudCAiCisJCQkJCSIweCUwMngvJTA0eC8lMDJ4ICglemQgYnl0ZXMpLCBvbmx5IGdvdCAiCisJCQkJCSIlenUgYnl0ZXMuIFdlIGRvbid0IGhhbmRsZSB0aGF0LlxuIiwKKwkJCQkJcmNlYi0+YkV2ZW50VHlwZSwgbGUxNl90b19jcHUocmNlYi0+d0V2ZW50KSwKKwkJCQkJcmNlYi0+YkV2ZW50Q29udGV4dCwgcmV0LCBzaXplKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJlYWxfc2l6ZSA9IGV2ZW50X3NpemUgPSByZXQ7CisJCX0KKwkJdXdiX3JjX25laF9ncm9rX2V2ZW50KHJjLCByY2ViLCBldmVudF9zaXplKTsKKworCQlpZiAobmVlZHRvZnJlZSA9PSAxKQorCQkJa2ZyZWUocmNlYik7CisKKwkJaXRyICs9IHJlYWxfc2l6ZTsKKwkJc2l6ZSAtPSByZWFsX3NpemU7CisJCWRfcHJpbnRmKDIsIGRldiwgImNvbnN1bWVkICV6ZCBieXRlcywgJXp1IGxlZnRcbiIsCisJCQkgZXZlbnRfc2l6ZSwgc2l6ZSk7CisJfQorCWRfZm5lbmQoMywgZGV2LCAiKHJjICVwIGJ1ZiAlcCAlenUgYnVmX3NpemUpID0gdm9pZFxuIiwgcmMsIGJ1ZiwgYnVmX3NpemUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3JjX25laF9ncm9rKTsKKworCisvKioKKyAqIFRoZSBlbnRpdHkgdGhhdCByZWFkcyBmcm9tIHRoZSBkZXZpY2Ugbm90aWZpY2F0aW9uL2V2ZW50IGNoYW5uZWwgaGFzCisgKiBkZXRlY3RlZCBhbiBlcnJvci4KKyAqCisgKiBAcmM6ICAgIFVXQiBSYWRpbyBDb250cm9sbGVyCisgKiBAZXJyb3I6IEVycm5vIGVycm9yIGNvZGUKKyAqCisgKi8KK3ZvaWQgdXdiX3JjX25laF9lcnJvcihzdHJ1Y3QgdXdiX3JjICpyYywgaW50IGVycm9yKQoreworCXN0cnVjdCB1d2JfcmNfbmVoICpuZWgsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oZXJyb3IgPj0gMCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJjLT5uZWhfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZWgsIG5leHQsICZyYy0+bmVoX2xpc3QsIGxpc3Rfbm9kZSkgeworCQlfX3V3Yl9yY19uZWhfcm0ocmMsIG5laCk7CisJCXV3Yl9yY19uZWhfY2IobmVoLCBOVUxMLCBlcnJvcik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjLT5uZWhfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3JjX25laF9lcnJvcik7CisKKworc3RhdGljIHZvaWQgdXdiX3JjX25laF90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXdiX3JjX25laCAqbmVoID0gKHN0cnVjdCB1d2JfcmNfbmVoICopYXJnOworCXN0cnVjdCB1d2JfcmMgKnJjID0gbmVoLT5yYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJjLT5uZWhfbG9jaywgZmxhZ3MpOworCV9fdXdiX3JjX25laF9ybShyYywgbmVoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyYy0+bmVoX2xvY2ssIGZsYWdzKTsKKworCXV3Yl9yY19uZWhfY2IobmVoLCBOVUxMLCAtRVRJTUVET1VUKTsKK30KKworLyoqIEluaXRpYWxpemVzIHRoZSBAcmMncyBuZWggc3Vic3lzdGVtCisgKi8KK3ZvaWQgdXdiX3JjX25laF9jcmVhdGUoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3Bpbl9sb2NrX2luaXQoJnJjLT5uZWhfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnJjLT5uZWhfbGlzdCk7CisJc2V0X2JpdCgwLCByYy0+Y3R4X2JtKTsJCS8qIDAgaXMgcmVzZXJ2ZWQgKHNlZSBbV1VTQl0gdGFibGUgOC02NSkgKi8KKwlzZXRfYml0KDB4ZmYsIHJjLT5jdHhfYm0pOwkvKiBhbmQgMHhmZiBpcyBpbnZhbGlkICovCisJcmMtPmN0eF9yb2xsID0gMTsKK30KKworCisvKiogUmVsZWFzZSdzIHRoZSBAcmMncyBuZWggc3Vic3lzdGVtICovCit2b2lkIHV3Yl9yY19uZWhfZGVzdHJveShzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1d2JfcmNfbmVoICpuZWgsICpuZXh0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJjLT5uZWhfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZWgsIG5leHQsICZyYy0+bmVoX2xpc3QsIGxpc3Rfbm9kZSkgeworCQlfX3V3Yl9yY19uZWhfcm0ocmMsIG5laCk7CisJCXV3Yl9yY19uZWhfcHV0KG5laCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjLT5uZWhfbG9jaywgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvcGFsLmMgYi9kcml2ZXJzL3V3Yi9wYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWZiMzhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvcGFsLmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIFVXQiBQQUwgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKworI2luY2x1ZGUgInV3Yi1pbnRlcm5hbC5oIgorCisvKioKKyAqIHV3Yl9wYWxfaW5pdCAtIGluaXRpYWxpemUgYSBVV0IgUEFMCisgKiBAcGFsOiB0aGUgUEFMIHRvIGluaXRpYWxpemUKKyAqLwordm9pZCB1d2JfcGFsX2luaXQoc3RydWN0IHV3Yl9wYWwgKnBhbCkKK3sKKwlJTklUX0xJU1RfSEVBRCgmcGFsLT5ub2RlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9wYWxfaW5pdCk7CisKKy8qKgorICogdXdiX3BhbF9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgVVdCIFBBTAorICogQHJjOiB0aGUgcmFkaW8gY29udHJvbGxlciB0aGUgUEFMIHdpbGwgYmUgdXNpbmcKKyAqIEBwYWw6IHRoZSBQQUwKKyAqCisgKiBUaGUgUEFMIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB1d2JfcGFsX2luaXQoKS4KKyAqLworaW50IHV3Yl9wYWxfcmVnaXN0ZXIoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfcGFsICpwYWwpCit7CisJaW50IHJldDsKKworCWlmIChwYWwtPmRldmljZSkgeworCQlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmcGFsLT5kZXZpY2UtPmtvYmosCisJCQkJCSZyYy0+dXdiX2Rldi5kZXYua29iaiwgInV3Yl9yYyIpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZyYy0+dXdiX2Rldi5kZXYua29iaiwKKwkJCQkJJnBhbC0+ZGV2aWNlLT5rb2JqLCBwYWwtPm5hbWUpOworCQlpZiAocmV0IDwgMCkgeworCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJnBhbC0+ZGV2aWNlLT5rb2JqLCAidXdiX3JjIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJc3Bpbl9sb2NrKCZyYy0+cGFsX2xvY2spOworCWxpc3RfYWRkKCZwYWwtPm5vZGUsICZyYy0+cGFscyk7CisJc3Bpbl91bmxvY2soJnJjLT5wYWxfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9wYWxfcmVnaXN0ZXIpOworCisvKioKKyAqIHV3Yl9wYWxfcmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgVVdCIFBBTAorICogQHJjOiB0aGUgcmFkaW8gY29udHJvbGxlciB0aGUgUEFMIHdhcyB1c2luZworICogQHBhbDogdGhlIFBBTAorICovCit2b2lkIHV3Yl9wYWxfdW5yZWdpc3RlcihzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9wYWwgKnBhbCkKK3sKKwlzcGluX2xvY2soJnJjLT5wYWxfbG9jayk7CisJbGlzdF9kZWwoJnBhbC0+bm9kZSk7CisJc3Bpbl91bmxvY2soJnJjLT5wYWxfbG9jayk7CisKKwlpZiAocGFsLT5kZXZpY2UpIHsKKwkJc3lzZnNfcmVtb3ZlX2xpbmsoJnJjLT51d2JfZGV2LmRldi5rb2JqLCBwYWwtPm5hbWUpOworCQlzeXNmc19yZW1vdmVfbGluaygmcGFsLT5kZXZpY2UtPmtvYmosICJ1d2JfcmMiKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcGFsX3VucmVnaXN0ZXIpOworCisvKioKKyAqIHV3Yl9yY19wYWxfaW5pdCAtIGluaXRpYWxpemUgdGhlIFBBTCByZWxhdGVkIHBhcnRzIG9mIGEgcmFkaW8gY29udHJvbGxlcgorICogQHJjOiB0aGUgcmFkaW8gY29udHJvbGxlcgorICovCit2b2lkIHV3Yl9yY19wYWxfaW5pdChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlzcGluX2xvY2tfaW5pdCgmcmMtPnBhbF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcmMtPnBhbHMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvcmVzZXQuYyBiL2RyaXZlcnMvdXdiL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlODU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3Jlc2V0LmMKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBVbHRyYSBXaWRlIEJhbmQKKyAqIFVXQiBiYXNpYyBjb21tYW5kIHN1cHBvcnQgYW5kIHJhZGlvIHJlc2V0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRToKKyAqCisgKiAgLSBkb2NzCisgKgorICogIC0gTm93IHdlIGFyZSBzZXJpYWxpemluZyAodXNpbmcgdGhlIHV3Yl9kZXYtPm11dGV4KSB0aGUgY29tbWFuZAorICogICAgZXhlY3V0aW9uOyBpdCBzaG91bGQgYmUgcGFyYWxsZWxpemVkIGFzIG11Y2ggYXMgcG9zc2libGUgc29tZQorICogICAgZGF5LgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKyNkZWZpbmUgRF9MT0NBTCAwCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKy8qKgorICogQ29tbWFuZCByZXN1bHQgY29kZXMgKFdVU0IxLjBbVDgtNjldKQorICovCitzdGF0aWMKK2NvbnN0IGNoYXIgKl9fc3RyZXJyb3JbXSA9IHsKKwkic3VjY2VzcyIsCisJImZhaWx1cmUiLAorCSJoYXJkd2FyZSBmYWlsdXJlIiwKKwkibm8gbW9yZSBzbG90cyIsCisJImJlYWNvbiBpcyB0b28gbGFyZ2UiLAorCSJpbnZhbGlkIHBhcmFtZXRlciIsCisJInVuc3VwcG9ydGVkIHBvd2VyIGxldmVsIiwKKwkidGltZSBvdXQgKHdhKSBvciBpbnZhbGlkIGllIGRhdGEgKHdoY2kpIiwKKwkiYmVhY29uIHNpemUgZXhjZWVkZWQiLAorCSJjYW5jZWxsZWQiLAorCSJpbnZhbGlkIHN0YXRlIiwKKwkiaW52YWxpZCBzaXplIiwKKwkiYWNrIG5vdCByZWNpZXZlZCIsCisJIm5vIG1vcmUgYXNpZSBub3RpZmljYXRpb24iLAorfTsKKworCisvKiogUmV0dXJuIGEgc3RyaW5nIG1hdGNoaW5nIHRoZSBnaXZlbiBlcnJvciBjb2RlICovCitjb25zdCBjaGFyICp1d2JfcmNfc3RyZXJyb3IodW5zaWduZWQgY29kZSkKK3sKKwlpZiAoY29kZSA9PSAyNTUpCisJCXJldHVybiAidGltZSBvdXQiOworCWlmIChjb2RlID49IEFSUkFZX1NJWkUoX19zdHJlcnJvcikpCisJCXJldHVybiAidW5rbm93biBlcnJvciI7CisJcmV0dXJuIF9fc3RyZXJyb3JbY29kZV07Cit9CisKK2ludCB1d2JfcmNfY21kX2FzeW5jKHN0cnVjdCB1d2JfcmMgKnJjLCBjb25zdCBjaGFyICpjbWRfbmFtZSwKKwkJICAgICBzdHJ1Y3QgdXdiX3JjY2IgKmNtZCwgc2l6ZV90IGNtZF9zaXplLAorCQkgICAgIHU4IGV4cGVjdGVkX3R5cGUsIHUxNiBleHBlY3RlZF9ldmVudCwKKwkJICAgICB1d2JfcmNfY21kX2NiX2YgY2IsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfcmNfbmVoICpuZWg7CisJaW50IG5lZWR0b2ZyZWUgPSAwOworCWludCByZXN1bHQ7CisKKwl1d2JfZGV2X2xvY2soJnJjLT51d2JfZGV2KTsJLyogUHJvdGVjdCBhZ2FpbnN0IHJjLT5wcml2IGJlaW5nIHJlbW92ZWQgKi8KKwlpZiAocmMtPnByaXYgPT0gTlVMTCkgeworCQl1d2JfZGV2X3VubG9jaygmcmMtPnV3Yl9kZXYpOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwlpZiAocmMtPmZpbHRlcl9jbWQpIHsKKwkJbmVlZHRvZnJlZSA9IHJjLT5maWx0ZXJfY21kKHJjLCAmY21kLCAmY21kX3NpemUpOworCQlpZiAobmVlZHRvZnJlZSA8IDAgJiYgbmVlZHRvZnJlZSAhPSAtRU5PQU5PKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBmaWx0ZXIgZXJyb3I6ICVkXG4iLAorCQkJCWNtZF9uYW1lLCBuZWVkdG9mcmVlKTsKKwkJCXV3Yl9kZXZfdW5sb2NrKCZyYy0+dXdiX2Rldik7CisJCQlyZXR1cm4gbmVlZHRvZnJlZTsKKwkJfQorCX0KKworCW5laCA9IHV3Yl9yY19uZWhfYWRkKHJjLCBjbWQsIGV4cGVjdGVkX3R5cGUsIGV4cGVjdGVkX2V2ZW50LCBjYiwgYXJnKTsKKwlpZiAoSVNfRVJSKG5laCkpIHsKKwkJcmVzdWx0ID0gUFRSX0VSUihuZWgpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXN1bHQgPSByYy0+Y21kKHJjLCBjbWQsIGNtZF9zaXplKTsKKwl1d2JfZGV2X3VubG9jaygmcmMtPnV3Yl9kZXYpOworCWlmIChyZXN1bHQgPCAwKQorCQl1d2JfcmNfbmVoX3JtKHJjLCBuZWgpOworCWVsc2UKKwkJdXdiX3JjX25laF9hcm0ocmMsIG5laCk7CisJdXdiX3JjX25laF9wdXQobmVoKTsKK291dDoKKwlpZiAobmVlZHRvZnJlZSA9PSAxKQorCQlrZnJlZShjbWQpOworCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yY19jbWRfYXN5bmMpOworCitzdHJ1Y3QgdXdiX3JjX2NtZF9kb25lX3BhcmFtcyB7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKKwlzdHJ1Y3QgdXdiX3JjZWIgKnJlcGx5OworCXNzaXplX3QgcmVwbHlfc2l6ZTsKK307CisKK3N0YXRpYyB2b2lkIHV3Yl9yY19jbWRfZG9uZShzdHJ1Y3QgdXdiX3JjICpyYywgdm9pZCAqYXJnLAorCQkJICAgIHN0cnVjdCB1d2JfcmNlYiAqcmVwbHksIHNzaXplX3QgcmVwbHlfc2l6ZSkKK3sKKwlzdHJ1Y3QgdXdiX3JjX2NtZF9kb25lX3BhcmFtcyAqcCA9IChzdHJ1Y3QgdXdiX3JjX2NtZF9kb25lX3BhcmFtcyAqKWFyZzsKKworCWlmIChyZXBseV9zaXplID4gMCkgeworCQlpZiAocC0+cmVwbHkpCisJCQlyZXBseV9zaXplID0gbWluKHAtPnJlcGx5X3NpemUsIHJlcGx5X3NpemUpOworCQllbHNlCisJCQlwLT5yZXBseSA9IGttYWxsb2MocmVwbHlfc2l6ZSwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHAtPnJlcGx5KQorCQkJbWVtY3B5KHAtPnJlcGx5LCByZXBseSwgcmVwbHlfc2l6ZSk7CisJCWVsc2UKKwkJCXJlcGx5X3NpemUgPSAtRU5PTUVNOworCX0KKwlwLT5yZXBseV9zaXplID0gcmVwbHlfc2l6ZTsKKwljb21wbGV0ZSgmcC0+Y29tcGxldGlvbik7Cit9CisKKworLyoqCisgKiBHZW5lcmljIGZ1bmN0aW9uIGZvciBpc3N1aW5nIGNvbW1hbmRzIHRvIHRoZSBSYWRpbyBDb250cm9sIEludGVyZmFjZQorICoKKyAqIEByYzogICAgICAgVVdCIFJhZGlvIENvbnRyb2wgZGVzY3JpcHRvcgorICogQGNtZF9uYW1lOiBOYW1lIG9mIHRoZSBjb21tYW5kIGJlaW5nIGlzc3VlZCAoZm9yIGVycm9yIG1lc3NhZ2VzKQorICogQGNtZDogICAgICBQb2ludGVyIHRvIHJjY2Igc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQ7CisgKiAgICAgICAgICAgIG5vcm1hbGx5IHlvdSBlbWJlZCB0aGlzIHN0cnVjdHVyZSBhcyB0aGUgZmlyc3QgbWVtYmVyIG9mCisgKiAgICAgICAgICAgIHRoZSBmdWxsIGNvbW1hbmQgc3RydWN0dXJlLgorICogQGNtZF9zaXplOiBTaXplIG9mIHRoZSB3aG9sZSBjb21tYW5kIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBjbWQuCisgKiBAcmVwbHk6ICAgIFBvaW50ZXIgdG8gd2hlcmUgdG8gc3RvcmUgdGhlIHJlcGx5CisgKiBAcmVwbHlfc2l6ZTogQHJlcGx5J3Mgc2l6ZQorICogQGV4cGVjdGVkX3R5cGU6IEV4cGVjdGVkIHR5cGUgaW4gdGhlIHJldHVybiBldmVudAorICogQGV4cGVjdGVkX2V2ZW50OiBFeHBlY3RlZCBldmVudCBjb2RlIGluIHRoZSByZXR1cm4gZXZlbnQKKyAqIEBwcmVwbHk6ICAgSGVyZSBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGV2ZW50IGRhdGEgaXMgcmVjZWl2ZWQgd2lsbAorICogICAgICAgICAgICBiZSBzdG9yZWQuIE9uY2UgZG9uZSB3aXRoIHRoZSBkYXRhLCBmcmVlIHdpdGgga2ZyZWUoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGdlbmVyaWM7IGl0IHdvcmtzIGZvciBjb21tYW5kcyB0aGF0IHJldHVybiBhIGZpeGVkCisgKiBhbmQga25vd24gc2l6ZSBvciBmb3IgY29tbWFuZHMgdGhhdCByZXR1cm4gYSB2YXJpYWJsZSBhbW91bnQgb2YgZGF0YS4KKyAqCisgKiBJZiBhIGJ1ZmZlciBpcyBwcm92aWRlZCwgdGhhdCBpcyB1c2VkLCBhbHRob3VnaCBpdCBjb3VsZCBiZSBjaG9wcGVkCisgKiB0byB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIuIElmIHRoZSBidWZmZXIgaXMgTlVMTCwgdGhlbiBvbmUKKyAqIGJlIGFsbG9jYXRlZCBpbiAqcHJlcGx5IHdpdGggdGhlIHdob2xlIGNvbnRlbnRzIG9mIHRoZSByZXBseS4KKyAqCisgKiBAcmMgbmVlZHMgdG8gYmUgcmVmZXJlbmNlZAorICovCitzdGF0aWMKK3NzaXplX3QgX191d2JfcmNfY21kKHN0cnVjdCB1d2JfcmMgKnJjLCBjb25zdCBjaGFyICpjbWRfbmFtZSwKKwkJICAgICBzdHJ1Y3QgdXdiX3JjY2IgKmNtZCwgc2l6ZV90IGNtZF9zaXplLAorCQkgICAgIHN0cnVjdCB1d2JfcmNlYiAqcmVwbHksIHNpemVfdCByZXBseV9zaXplLAorCQkgICAgIHU4IGV4cGVjdGVkX3R5cGUsIHUxNiBleHBlY3RlZF9ldmVudCwKKwkJICAgICBzdHJ1Y3QgdXdiX3JjZWIgKipwcmVwbHkpCit7CisJc3NpemVfdCByZXN1bHQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9yY19jbWRfZG9uZV9wYXJhbXMgcGFyYW1zOworCisJaW5pdF9jb21wbGV0aW9uKCZwYXJhbXMuY29tcGxldGlvbik7CisJcGFyYW1zLnJlcGx5ID0gcmVwbHk7CisJcGFyYW1zLnJlcGx5X3NpemUgPSByZXBseV9zaXplOworCisJcmVzdWx0ID0gdXdiX3JjX2NtZF9hc3luYyhyYywgY21kX25hbWUsIGNtZCwgY21kX3NpemUsCisJCQkJICBleHBlY3RlZF90eXBlLCBleHBlY3RlZF9ldmVudCwKKwkJCQkgIHV3Yl9yY19jbWRfZG9uZSwgJnBhcmFtcyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBhcmFtcy5jb21wbGV0aW9uKTsKKworCWlmIChwcmVwbHkpCisJCSpwcmVwbHkgPSBwYXJhbXMucmVwbHk7CisKKwlpZiAocGFyYW1zLnJlcGx5X3NpemUgPCAwKQorCQlkZXZfZXJyKGRldiwgIiVzOiBjb25maXJtYXRpb24gZXZlbnQgMHglMDJ4LyUwNHgvJTAyeCAiCisJCQkicmVjZXB0aW9uIGZhaWxlZDogJWRcbiIsIGNtZF9uYW1lLAorCQkJZXhwZWN0ZWRfdHlwZSwgZXhwZWN0ZWRfZXZlbnQsIGNtZC0+YkNvbW1hbmRDb250ZXh0LAorCQkJKGludClwYXJhbXMucmVwbHlfc2l6ZSk7CisJcmV0dXJuIHBhcmFtcy5yZXBseV9zaXplOworfQorCisKKy8qKgorICogR2VuZXJpYyBmdW5jdGlvbiBmb3IgaXNzdWluZyBjb21tYW5kcyB0byB0aGUgUmFkaW8gQ29udHJvbCBJbnRlcmZhY2UKKyAqCisgKiBAcmM6ICAgICAgIFVXQiBSYWRpbyBDb250cm9sIGRlc2NyaXB0b3IKKyAqIEBjbWRfbmFtZTogTmFtZSBvZiB0aGUgY29tbWFuZCBiZWluZyBpc3N1ZWQgKGZvciBlcnJvciBtZXNzYWdlcykKKyAqIEBjbWQ6ICAgICAgUG9pbnRlciB0byByY2NiIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBjb21tYW5kOworICogICAgICAgICAgICBub3JtYWxseSB5b3UgZW1iZWQgdGhpcyBzdHJ1Y3R1cmUgYXMgdGhlIGZpcnN0IG1lbWJlciBvZgorICogICAgICAgICAgICB0aGUgZnVsbCBjb21tYW5kIHN0cnVjdHVyZS4KKyAqIEBjbWRfc2l6ZTogU2l6ZSBvZiB0aGUgd2hvbGUgY29tbWFuZCBidWZmZXIgcG9pbnRlZCB0byBieSBAY21kLgorICogQHJlcGx5OiAgICBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpcm1hdGlvbiBldmVudAorICogICAgICAgICAgICBidWZmZXIuIE5vcm1hbGx5IGJpZ2dlciB0aGFuIGFuICdzdHJ1Y3QgaHdhcmNfcmNlYicuCisgKiAgICAgICAgICAgIFlvdSBuZWVkIHRvIGZpbGwgb3V0IHJlcGx5LT5iRXZlbnRUeXBlIGFuZCByZXBseS0+d0V2ZW50IChpbgorICogICAgICAgICAgICBjcHUgb3JkZXIpIGFzIHRoZSBmdW5jdGlvbiB3aWxsIHVzZSB0aGVtIHRvIHZlcmlmeSB0aGUKKyAqICAgICAgICAgICAgY29uZmlybWF0aW9uIGV2ZW50LgorICogQHJlcGx5X3NpemU6IFNpemUgb2YgdGhlIHJlcGx5IGJ1ZmZlcgorICoKKyAqIFRoZSBmdW5jdGlvbiBjaGVja3MgdGhhdCB0aGUgbGVuZ3RoIHJldHVybmVkIGluIHRoZSByZXBseSBpcyBhdAorICogbGVhc3QgYXMgYmlnIGFzIEByZXBseV9zaXplOyBpZiBub3QsIGl0IHdpbGwgYmUgZGVlbWVkIGFuIGVycm9yIGFuZAorICogLUVJTyByZXR1cm5lZC4KKyAqCisgKiBAcmMgbmVlZHMgdG8gYmUgcmVmZXJlbmNlZAorICovCitzc2l6ZV90IHV3Yl9yY19jbWQoc3RydWN0IHV3Yl9yYyAqcmMsIGNvbnN0IGNoYXIgKmNtZF9uYW1lLAorCQkgICBzdHJ1Y3QgdXdiX3JjY2IgKmNtZCwgc2l6ZV90IGNtZF9zaXplLAorCQkgICBzdHJ1Y3QgdXdiX3JjZWIgKnJlcGx5LCBzaXplX3QgcmVwbHlfc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmMtPnV3Yl9kZXYuZGV2OworCXNzaXplX3QgcmVzdWx0OworCisJcmVzdWx0ID0gX191d2JfcmNfY21kKHJjLCBjbWRfbmFtZSwKKwkJCSAgICAgIGNtZCwgY21kX3NpemUsIHJlcGx5LCByZXBseV9zaXplLAorCQkJICAgICAgcmVwbHktPmJFdmVudFR5cGUsIHJlcGx5LT53RXZlbnQsIE5VTEwpOworCisJaWYgKHJlc3VsdCA+IDAgJiYgcmVzdWx0IDwgcmVwbHlfc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBub3QgZW5vdWdoIGRhdGEgcmV0dXJuZWQgZm9yIGRlY29kaW5nIHJlcGx5ICIKKwkJCSIoJXp1IGJ5dGVzIHJlY2VpdmVkIHZzIGF0IGxlYXN0ICV6dSBuZWVkZWQpXG4iLAorCQkJY21kX25hbWUsIHJlc3VsdCwgcmVwbHlfc2l6ZSk7CisJCXJlc3VsdCA9IC1FSU87CisJfQorCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmNfY21kKTsKKworCisvKioKKyAqIEdlbmVyaWMgZnVuY3Rpb24gZm9yIGlzc3VpbmcgY29tbWFuZHMgdG8gdGhlIFJhZGlvIENvbnRyb2wKKyAqIEludGVyZmFjZSB0aGF0IHJldHVybiBhbiB1bmtub3duIGFtb3VudCBvZiBkYXRhCisgKgorICogQHJjOiAgICAgICBVV0IgUmFkaW8gQ29udHJvbCBkZXNjcmlwdG9yCisgKiBAY21kX25hbWU6IE5hbWUgb2YgdGhlIGNvbW1hbmQgYmVpbmcgaXNzdWVkIChmb3IgZXJyb3IgbWVzc2FnZXMpCisgKiBAY21kOiAgICAgIFBvaW50ZXIgdG8gcmNjYiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgY29tbWFuZDsKKyAqICAgICAgICAgICAgbm9ybWFsbHkgeW91IGVtYmVkIHRoaXMgc3RydWN0dXJlIGFzIHRoZSBmaXJzdCBtZW1iZXIgb2YKKyAqICAgICAgICAgICAgdGhlIGZ1bGwgY29tbWFuZCBzdHJ1Y3R1cmUuCisgKiBAY21kX3NpemU6IFNpemUgb2YgdGhlIHdob2xlIGNvbW1hbmQgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGNtZC4KKyAqIEBleHBlY3RlZF90eXBlOiBFeHBlY3RlZCB0eXBlIGluIHRoZSByZXR1cm4gZXZlbnQKKyAqIEBleHBlY3RlZF9ldmVudDogRXhwZWN0ZWQgZXZlbnQgY29kZSBpbiB0aGUgcmV0dXJuIGV2ZW50CisgKiBAcHJlcGx5OiAgIEhlcmUgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBldmVudCBkYXRhIGlzIHJlY2VpdmVkIHdpbGwKKyAqICAgICAgICAgICAgYmUgc3RvcmVkLiBPbmNlIGRvbmUgd2l0aCB0aGUgZGF0YSwgZnJlZSB3aXRoIGtmcmVlKCkuCisgKgorICogVGhlIGZ1bmN0aW9uIGNoZWNrcyB0aGF0IHRoZSBsZW5ndGggcmV0dXJuZWQgaW4gdGhlIHJlcGx5IGlzIGF0CisgKiBsZWFzdCBhcyBiaWcgYXMgYSAnc3RydWN0IHV3Yl9yY2ViIConOyBpZiBub3QsIGl0IHdpbGwgYmUgZGVlbWVkIGFuCisgKiBlcnJvciBhbmQgLUVJTyByZXR1cm5lZC4KKyAqCisgKiBAcmMgbmVlZHMgdG8gYmUgcmVmZXJlbmNlZAorICovCitzc2l6ZV90IHV3Yl9yY192Y21kKHN0cnVjdCB1d2JfcmMgKnJjLCBjb25zdCBjaGFyICpjbWRfbmFtZSwKKwkJICAgIHN0cnVjdCB1d2JfcmNjYiAqY21kLCBzaXplX3QgY21kX3NpemUsCisJCSAgICB1OCBleHBlY3RlZF90eXBlLCB1MTYgZXhwZWN0ZWRfZXZlbnQsCisJCSAgICBzdHJ1Y3QgdXdiX3JjZWIgKipwcmVwbHkpCit7CisJcmV0dXJuIF9fdXdiX3JjX2NtZChyYywgY21kX25hbWUsIGNtZCwgY21kX3NpemUsIE5VTEwsIDAsCisJCQkgICAgZXhwZWN0ZWRfdHlwZSwgZXhwZWN0ZWRfZXZlbnQsIHByZXBseSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmNfdmNtZCk7CisKKworLyoqCisgKiBSZXNldCBhIFVXQiBIb3N0IENvbnRyb2xsZXIgKGFuZCBhbGwgcmFkaW8gc2V0dGluZ3MpCisgKgorICogQHJjOiAgICAgIEhvc3QgQ29udHJvbGxlciBkZXNjcmlwdG9yCisgKiBAcmV0dXJuczogMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IKKyAqCisgKiBXZSBwdXQgdGhlIGNvbW1hbmQgb24ga21hbGxvYydlZCBtZW1vcnkgYXMgc29tZSBhcmNoZXMgY2Fubm90IGRvCisgKiBVU0IgZnJvbSB0aGUgc3RhY2suIFRoZSByZXBseSBldmVudCBpcyBjb3BpZWQgZnJvbSBhbiBzdGFnZSBidWZmZXIsCisgKiBzbyBpdCBjYW4gYmUgaW4gdGhlIHN0YWNrLiBTZWUgV1VTQjEuMFs4LjYuMi40XSBmb3IgbW9yZSBkZXRhaWxzLgorICovCitpbnQgdXdiX3JjX3Jlc2V0KHN0cnVjdCB1d2JfcmMgKnJjKQoreworCWludCByZXN1bHQgPSAtRU5PTUVNOworCXN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0gcmVwbHk7CisJc3RydWN0IHV3Yl9yY2NiICpjbWQ7CisJc2l6ZV90IGNtZF9zaXplID0gc2l6ZW9mKCpjbWQpOworCisJbXV0ZXhfbG9jaygmcmMtPnV3Yl9kZXYubXV0ZXgpOworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCWdvdG8gZXJyb3Jfa3phbGxvYzsKKwljbWQtPmJDb21tYW5kVHlwZSA9IFVXQl9SQ19DRVRfR0VORVJBTDsKKwljbWQtPndDb21tYW5kID0gY3B1X3RvX2xlMTYoVVdCX1JDX0NNRF9SRVNFVCk7CisJcmVwbHkucmNlYi5iRXZlbnRUeXBlID0gVVdCX1JDX0NFVF9HRU5FUkFMOworCXJlcGx5LnJjZWIud0V2ZW50ID0gVVdCX1JDX0NNRF9SRVNFVDsKKwlyZXN1bHQgPSB1d2JfcmNfY21kKHJjLCAiUkVTRVQiLCBjbWQsIGNtZF9zaXplLAorCQkJICAgICZyZXBseS5yY2ViLCBzaXplb2YocmVwbHkpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBlcnJvcl9jbWQ7CisJaWYgKHJlcGx5LmJSZXN1bHRDb2RlICE9IFVXQl9SQ19SRVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKCZyYy0+dXdiX2Rldi5kZXYsCisJCQkiUkVTRVQ6IGNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMgKCVkKVxuIiwKKwkJCXV3Yl9yY19zdHJlcnJvcihyZXBseS5iUmVzdWx0Q29kZSksIHJlcGx5LmJSZXN1bHRDb2RlKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9CitlcnJvcl9jbWQ6CisJa2ZyZWUoY21kKTsKK2Vycm9yX2t6YWxsb2M6CisJbXV0ZXhfdW5sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHV3YmRfbXNnX2hhbmRsZV9yZXNldChzdHJ1Y3QgdXdiX2V2ZW50ICpldnQpCit7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSBldnQtPnJjOworCWludCByZXQ7CisKKwkvKiBOZWVkIHRvIHByZXZlbnQgdGhlIFJDIGhhcmR3YXJlIG1vZHVsZSBnb2luZyBhd2F5IHdoaWxlIGluCisJICAgdGhlIHJjLT5yZXNldCgpIGNhbGwuICovCisJaWYgKCF0cnlfbW9kdWxlX2dldChyYy0+b3duZXIpKQorCQlyZXR1cm4gMDsKKworCWRldl9pbmZvKCZyYy0+dXdiX2Rldi5kZXYsICJyZXNldHRpbmcgcmFkaW8gY29udHJvbGxlclxuIik7CisJcmV0ID0gcmMtPnJlc2V0KHJjKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZyYy0+dXdiX2Rldi5kZXYsICJmYWlsZWQgdG8gcmVzZXQgaGFyZHdhcmU6ICVkXG4iLCByZXQpOworCisJbW9kdWxlX3B1dChyYy0+b3duZXIpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdXdiX3JjX3Jlc2V0X2FsbCAtIHJlcXVlc3QgYSByZXNldCBvZiB0aGUgcmFkaW8gY29udHJvbGxlciBhbmQgUEFMcworICogQHJjOiB0aGUgcmFkaW8gY29udHJvbGxlciBvZiB0aGUgaGFyZHdhcmUgZGV2aWNlIHRvIGJlIHJlc2V0LgorICoKKyAqIFRoZSBmdWxsIGhhcmR3YXJlIHJlc2V0IG9mIHRoZSByYWRpbyBjb250cm9sbGVyIGFuZCBhbGwgdGhlIFBBTHMKKyAqIHdpbGwgYmUgc2NoZWR1bGVkLgorICovCit2b2lkIHV3Yl9yY19yZXNldF9hbGwoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3RydWN0IHV3Yl9ldmVudCAqZXZ0OworCisJZXZ0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHV3Yl9ldmVudCksIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseShldnQgPT0gTlVMTCkpCisJCXJldHVybjsKKworCWV2dC0+cmMgPSBfX3V3Yl9yY19nZXQocmMpOwkvKiB3aWxsIGJlIHB1dCBieSB1d2JkJ3MgdXdiZF9ldmVudF9oYW5kbGUoKSAqLworCWV2dC0+dHNfamlmZmllcyA9IGppZmZpZXM7CisJZXZ0LT50eXBlID0gVVdCX0VWVF9UWVBFX01TRzsKKwlldnQtPm1lc3NhZ2UgPSBVV0JfRVZUX01TR19SRVNFVDsKKworCXV3YmRfZXZlbnRfcXVldWUoZXZ0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yY19yZXNldF9hbGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvcnN2LmMgYi9kcml2ZXJzL3V3Yi9yc3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWUxNjIwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3Jzdi5jCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogVVdCIHJlc2VydmF0aW9uIG1hbmFnZW1lbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi5oPgorCisjaW5jbHVkZSAidXdiLWludGVybmFsLmgiCisKK3N0YXRpYyB2b2lkIHV3Yl9yc3ZfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpOworCitzdGF0aWMgY29uc3QgY2hhciAqcnN2X3N0YXRlc1tdID0geworCVtVV0JfUlNWX1NUQVRFX05PTkVdICAgICAgICAgID0gIm5vbmUiLAorCVtVV0JfUlNWX1NUQVRFX09fSU5JVElBVEVEXSAgID0gImluaXRpYXRlZCIsCisJW1VXQl9SU1ZfU1RBVEVfT19QRU5ESU5HXSAgICAgPSAicGVuZGluZyIsCisJW1VXQl9SU1ZfU1RBVEVfT19NT0RJRklFRF0gICAgPSAibW9kaWZpZWQiLAorCVtVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRURdID0gImVzdGFibGlzaGVkIiwKKwlbVVdCX1JTVl9TVEFURV9UX0FDQ0VQVEVEXSAgICA9ICJhY2NlcHRlZCIsCisJW1VXQl9SU1ZfU1RBVEVfVF9ERU5JRURdICAgICAgPSAiZGVuaWVkIiwKKwlbVVdCX1JTVl9TVEFURV9UX1BFTkRJTkddICAgICA9ICJwZW5kaW5nIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpyc3ZfdHlwZXNbXSA9IHsKKwlbVVdCX0RSUF9UWVBFX0FMSUVOX0JQXSA9ICJhbGllbi1icCIsCisJW1VXQl9EUlBfVFlQRV9IQVJEXSAgICAgPSAiaGFyZCIsCisJW1VXQl9EUlBfVFlQRV9TT0ZUXSAgICAgPSAic29mdCIsCisJW1VXQl9EUlBfVFlQRV9QUklWQVRFXSAgPSAicHJpdmF0ZSIsCisJW1VXQl9EUlBfVFlQRV9QQ0FdICAgICAgPSAicGNhIiwKK307CisKKy8qKgorICogdXdiX3Jzdl9zdGF0ZV9zdHIgLSByZXR1cm4gYSBzdHJpbmcgZm9yIGEgcmVzZXJ2YXRpb24gc3RhdGUKKyAqIEBzdGF0ZTogdGhlIHJlc2VydmF0aW9uIHN0YXRlLgorICovCitjb25zdCBjaGFyICp1d2JfcnN2X3N0YXRlX3N0cihlbnVtIHV3Yl9yc3Zfc3RhdGUgc3RhdGUpCit7CisJaWYgKHN0YXRlIDwgVVdCX1JTVl9TVEFURV9OT05FIHx8IHN0YXRlID49IFVXQl9SU1ZfU1RBVEVfTEFTVCkKKwkJcmV0dXJuICJ1bmtub3duIjsKKwlyZXR1cm4gcnN2X3N0YXRlc1tzdGF0ZV07Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcnN2X3N0YXRlX3N0cik7CisKKy8qKgorICogdXdiX3Jzdl90eXBlX3N0ciAtIHJldHVybiBhIHN0cmluZyBmb3IgYSByZXNlcnZhdGlvbiB0eXBlCisgKiBAdHlwZTogdGhlIHJlc2VydmF0aW9uIHR5cGUKKyAqLworY29uc3QgY2hhciAqdXdiX3Jzdl90eXBlX3N0cihlbnVtIHV3Yl9kcnBfdHlwZSB0eXBlKQoreworCWlmICh0eXBlIDwgVVdCX0RSUF9UWVBFX0FMSUVOX0JQIHx8IHR5cGUgPiBVV0JfRFJQX1RZUEVfUENBKQorCQlyZXR1cm4gImludmFsaWQiOworCXJldHVybiByc3ZfdHlwZXNbdHlwZV07Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcnN2X3R5cGVfc3RyKTsKKworc3RhdGljIHZvaWQgdXdiX3Jzdl9kdW1wKHN0cnVjdCB1d2JfcnN2ICpyc3YpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJzdi0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfZGV2X2FkZHIgZGV2YWRkcjsKKwljaGFyIG93bmVyW1VXQl9BRERSX1NUUlNJWkVdLCB0YXJnZXRbVVdCX0FERFJfU1RSU0laRV07CisKKwl1d2JfZGV2X2FkZHJfcHJpbnQob3duZXIsIHNpemVvZihvd25lciksICZyc3YtPm93bmVyLT5kZXZfYWRkcik7CisJaWYgKHJzdi0+dGFyZ2V0LnR5cGUgPT0gVVdCX1JTVl9UQVJHRVRfREVWKQorCQlkZXZhZGRyID0gcnN2LT50YXJnZXQuZGV2LT5kZXZfYWRkcjsKKwllbHNlCisJCWRldmFkZHIgPSByc3YtPnRhcmdldC5kZXZhZGRyOworCXV3Yl9kZXZfYWRkcl9wcmludCh0YXJnZXQsIHNpemVvZih0YXJnZXQpLCAmZGV2YWRkcik7CisKKwlkZXZfZGJnKGRldiwgInJzdiAlcyAtPiAlczogJXNcbiIsIG93bmVyLCB0YXJnZXQsIHV3Yl9yc3Zfc3RhdGVfc3RyKHJzdi0+c3RhdGUpKTsKK30KKworLyoKKyAqIEdldCBhIGZyZWUgc3RyZWFtIGluZGV4IGZvciBhIHJlc2VydmF0aW9uLgorICoKKyAqIElmIHRoZSB0YXJnZXQgaXMgYSBEZXZBZGRyIChlLmcuLCBhIFdVU0IgY2x1c3RlciByZXNlcnZhdGlvbikgdGhlbgorICogdGhlIHN0cmVhbSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHBvb2wgb2YgcGVyLVJDIHN0cmVhbSBpbmRleGVzLAorICogb3RoZXJ3aXNlIGEgdW5pcXVlIHN0cmVhbSBpbmRleCBmb3IgdGhlIHRhcmdldCBpcyBzZWxlY3RlZC4KKyAqLworc3RhdGljIGludCB1d2JfcnN2X2dldF9zdHJlYW0oc3RydWN0IHV3Yl9yc3YgKnJzdikKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHJzdi0+cmM7CisJdW5zaWduZWQgbG9uZyAqc3RyZWFtc19ibTsKKwlpbnQgc3RyZWFtOworCisJc3dpdGNoIChyc3YtPnRhcmdldC50eXBlKSB7CisJY2FzZSBVV0JfUlNWX1RBUkdFVF9ERVY6CisJCXN0cmVhbXNfYm0gPSByc3YtPnRhcmdldC5kZXYtPnN0cmVhbXM7CisJCWJyZWFrOworCWNhc2UgVVdCX1JTVl9UQVJHRVRfREVWQUREUjoKKwkJc3RyZWFtc19ibSA9IHJjLT51d2JfZGV2LnN0cmVhbXM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN0cmVhbSA9IGZpbmRfZmlyc3RfemVyb19iaXQoc3RyZWFtc19ibSwgVVdCX05VTV9TVFJFQU1TKTsKKwlpZiAoc3RyZWFtID49IFVXQl9OVU1fU1RSRUFNUykKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJzdi0+c3RyZWFtID0gc3RyZWFtOworCXNldF9iaXQoc3RyZWFtLCBzdHJlYW1zX2JtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1d2JfcnN2X3B1dF9zdHJlYW0oc3RydWN0IHV3Yl9yc3YgKnJzdikKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHJzdi0+cmM7CisJdW5zaWduZWQgbG9uZyAqc3RyZWFtc19ibTsKKworCXN3aXRjaCAocnN2LT50YXJnZXQudHlwZSkgeworCWNhc2UgVVdCX1JTVl9UQVJHRVRfREVWOgorCQlzdHJlYW1zX2JtID0gcnN2LT50YXJnZXQuZGV2LT5zdHJlYW1zOworCQlicmVhazsKKwljYXNlIFVXQl9SU1ZfVEFSR0VUX0RFVkFERFI6CisJCXN0cmVhbXNfYm0gPSByYy0+dXdiX2Rldi5zdHJlYW1zOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJY2xlYXJfYml0KHJzdi0+c3RyZWFtLCBzdHJlYW1zX2JtKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIGEgTUFTIGFsbG9jYXRpb24gd2l0aCBhIHNpbmdsZSByb3cgY29tcG9uZW50LgorICovCitzdGF0aWMgdm9pZCB1d2JfcnN2X2dlbl9hbGxvY19yb3coc3RydWN0IHV3Yl9tYXNfYm0gKm1hcywKKwkJCQkgIGludCBmaXJzdF9tYXMsIGludCBtYXNfcGVyX3pvbmUsCisJCQkJICBpbnQgenMsIGludCB6ZSkKK3sKKwlzdHJ1Y3QgdXdiX21hc19ibSBjb2w7CisJaW50IHo7CisKKwliaXRtYXBfemVybyhtYXMtPmJtLCBVV0JfTlVNX01BUyk7CisJYml0bWFwX3plcm8oY29sLmJtLCBVV0JfTlVNX01BUyk7CisJYml0bWFwX2ZpbGwoY29sLmJtLCBtYXNfcGVyX3pvbmUpOworCWJpdG1hcF9zaGlmdF9sZWZ0KGNvbC5ibSwgY29sLmJtLCBmaXJzdF9tYXMgKyB6cyAqIFVXQl9NQVNfUEVSX1pPTkUsIFVXQl9OVU1fTUFTKTsKKworCWZvciAoeiA9IHpzOyB6IDw9IHplOyB6KyspIHsKKwkJYml0bWFwX29yKG1hcy0+Ym0sIG1hcy0+Ym0sIGNvbC5ibSwgVVdCX05VTV9NQVMpOworCQliaXRtYXBfc2hpZnRfbGVmdChjb2wuYm0sIGNvbC5ibSwgVVdCX01BU19QRVJfWk9ORSwgVVdCX05VTV9NQVMpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIHNvbWUgTUFTIGZvciB0aGlzIHJlc2VydmF0aW9uIGJhc2VkIG9uIGN1cnJlbnQgbG9jYWwKKyAqIGF2YWlsYWJpbGl0eSwgdGhlIHJlc2VydmF0aW9uIHBhcmFtZXRlcnMgKG1heF9tYXMsIG1pbl9tYXMsCisgKiBzcGFyc2l0eSksIGFuZCB0aGUgV2lNZWRpYSBydWxlcyBmb3IgTUFTIGFsbG9jYXRpb25zLgorICoKKyAqIFJldHVybnMgLUVCVVNZIGlzIGluc3VmZmljaWVudCBmcmVlIE1BUyBhcmUgYXZhaWxhYmxlLgorICoKKyAqIEZJWE1FOiB0byBzaW1wbGlmeSB0aGlzLCBvbmx5IHNhZmUgcmVzZXJ2YXRpb25zIHdpdGggYSBzaW5nbGUgcm93CisgKiBjb21wb25lbnQgaW4gem9uZXMgMSB0byAxNSBhcmUgdHJpZWQgKHpvbmUgMCBpcyBza2lwcGVkIHRvIGF2b2lkCisgKiBwcm9ibGVtcyB3aXRoIHRoZSBNQVMgcmVzZXJ2ZWQgZm9yIHRoZSBCUCkuCisgKgorICogW0VDTUEtMzY4XSBzZWN0aW9uIEIuMi4KKyAqLworc3RhdGljIGludCB1d2JfcnN2X2FsbG9jX21hcyhzdHJ1Y3QgdXdiX3JzdiAqcnN2KQoreworCXN0YXRpYyBjb25zdCBpbnQgc2FmZV9tYXNfaW5fcm93W1VXQl9OVU1fWk9ORVNdID0geworCQk4LCA3LCA2LCA1LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCAzLCAyLCAxLAorCX07CisJaW50IG4sIHI7CisJc3RydWN0IHV3Yl9tYXNfYm0gbWFzOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCS8qCisJICogU2VhcmNoIGFsbCB2YWxpZCBzYWZlIGFsbG9jYXRpb25zIHVudGlsIGVpdGhlcjogdG9vIGZldyBNQVMKKwkgKiBhcmUgYXZhaWxhYmxlOyBvciB0aGUgc21hbGxlc3QgYWxsb2NhdGlvbiB3aXRoIHN1ZmZpY2llbnQKKwkgKiBNQVMgaXMgZm91bmQuCisJICoKKwkgKiBUaGUgdG9wIG9mIHRoZSB6b25lcyBhcmUgcHJlZmVycmVkLCBzbyBzcGFjZSBmb3IgbGFyZ2VyCisJICogYWxsb2NhdGlvbnMgaXMgYXZhaWxhYmxlIGluIHRoZSBib3R0b20gb2YgdGhlIHpvbmUgKGUuZy4sIGEKKwkgKiAxNSBNQVMgYWxsb2NhdGlvbiBzaG91bGQgc3RhcnQgaW4gcm93IDE0IGxlYXZpbmcgc3BhY2UgZm9yCisJICogYSAxMjAgTUFTIGFsbG9jYXRpb24gYXQgcm93IDApLgorCSAqLworCWZvciAobiA9IHNhZmVfbWFzX2luX3Jvd1swXTsgbiA+PSAxOyBuLS0pIHsKKwkJaW50IG51bV9tYXM7CisKKwkJbnVtX21hcyA9IG4gKiAoVVdCX05VTV9aT05FUyAtIDEpOworCQlpZiAobnVtX21hcyA8IHJzdi0+bWluX21hcykKKwkJCWJyZWFrOworCQlpZiAoZm91bmQgJiYgbnVtX21hcyA8IHJzdi0+bWF4X21hcykKKwkJCWJyZWFrOworCisJCWZvciAociA9IFVXQl9NQVNfUEVSX1pPTkUtMTsgIHIgPj0gMDsgci0tKSB7CisJCQlpZiAoc2FmZV9tYXNfaW5fcm93W3JdIDwgbikKKwkJCQljb250aW51ZTsKKwkJCXV3Yl9yc3ZfZ2VuX2FsbG9jX3JvdygmbWFzLCByLCBuLCAxLCBVV0JfTlVNX1pPTkVTKTsKKwkJCWlmICh1d2JfZHJwX2F2YWlsX3Jlc2VydmVfcGVuZGluZyhyc3YtPnJjLCAmbWFzKSA9PSAwKSB7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFmb3VuZCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWJpdG1hcF9jb3B5KHJzdi0+bWFzLmJtLCBtYXMuYm0sIFVXQl9OVU1fTUFTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXdiX3Jzdl9zdHJva2VfdGltZXIoc3RydWN0IHV3Yl9yc3YgKnJzdikKK3sKKwlpbnQgc2ZyYW1lcyA9IFVXQl9NQVhfTE9TVF9CRUFDT05TOworCisJLyoKKwkgKiBNdWx0aWNhc3QgcmVzZXJ2YXRpb25zIGNhbiBiZWNvbWUgZXN0YWJsaXNoZWQgd2l0aGluIDEKKwkgKiBzdXBlciBmcmFtZSBhbmQgc2hvdWxkIG5vdCBiZSB0ZXJtaW5hdGVkIGlmIG5vIHJlc3BvbnNlIGlzCisJICogcmVjZWl2ZWQuCisJICovCisJaWYgKHJzdi0+aXNfbXVsdGljYXN0KSB7CisJCWlmIChyc3YtPnN0YXRlID09IFVXQl9SU1ZfU1RBVEVfT19JTklUSUFURUQpCisJCQlzZnJhbWVzID0gMTsKKwkJaWYgKHJzdi0+c3RhdGUgPT0gVVdCX1JTVl9TVEFURV9PX0VTVEFCTElTSEVEKQorCQkJc2ZyYW1lcyA9IDA7CisJfQorCisJcnN2LT5leHBpcmVkID0gZmFsc2U7CisJaWYgKHNmcmFtZXMgPiAwKSB7CisJCS8qCisJCSAqIEFkZCBhbiBhZGRpdGlvbmFsIDIgc3VwZXJmcmFtZXMgdG8gYWNjb3VudCBmb3IgdGhlCisJCSAqIHRpbWUgdG8gc2VuZCB0aGUgU0VUIERSUCBJRSBjb21tYW5kLgorCQkgKi8KKwkJdW5zaWduZWQgdGltZW91dF91cyA9IChzZnJhbWVzICsgMikgKiBVV0JfU1VQRVJGUkFNRV9MRU5HVEhfVVM7CisJCW1vZF90aW1lcigmcnN2LT50aW1lciwgamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXModGltZW91dF91cykpOworCX0gZWxzZQorCQlkZWxfdGltZXIoJnJzdi0+dGltZXIpOworfQorCisvKgorICogVXBkYXRlIGEgcmVzZXJ2YXRpb25zIHN0YXRlLCBhbmQgc2NoZWR1bGUgYW4gdXBkYXRlIG9mIHRoZQorICogdHJhbnNtaXR0ZWQgRFJQIElFcy4KKyAqLworc3RhdGljIHZvaWQgdXdiX3Jzdl9zdGF0ZV91cGRhdGUoc3RydWN0IHV3Yl9yc3YgKnJzdiwKKwkJCQkgZW51bSB1d2JfcnN2X3N0YXRlIG5ld19zdGF0ZSkKK3sKKwlyc3YtPnN0YXRlID0gbmV3X3N0YXRlOworCXJzdi0+aWVfdmFsaWQgPSBmYWxzZTsKKworCXV3Yl9yc3ZfZHVtcChyc3YpOworCisJdXdiX3Jzdl9zdHJva2VfdGltZXIocnN2KTsKKwl1d2JfcnN2X3NjaGVkX3VwZGF0ZShyc3YtPnJjKTsKK30KKworc3RhdGljIHZvaWQgdXdiX3Jzdl9jYWxsYmFjayhzdHJ1Y3QgdXdiX3JzdiAqcnN2KQoreworCWlmIChyc3YtPmNhbGxiYWNrKQorCQlyc3YtPmNhbGxiYWNrKHJzdik7Cit9CisKK3ZvaWQgdXdiX3Jzdl9zZXRfc3RhdGUoc3RydWN0IHV3Yl9yc3YgKnJzdiwgZW51bSB1d2JfcnN2X3N0YXRlIG5ld19zdGF0ZSkKK3sKKwlpZiAocnN2LT5zdGF0ZSA9PSBuZXdfc3RhdGUpIHsKKwkJc3dpdGNoIChyc3YtPnN0YXRlKSB7CisJCWNhc2UgVVdCX1JTVl9TVEFURV9PX0VTVEFCTElTSEVEOgorCQljYXNlIFVXQl9SU1ZfU1RBVEVfVF9BQ0NFUFRFRDoKKwkJY2FzZSBVV0JfUlNWX1NUQVRFX05PTkU6CisJCQl1d2JfcnN2X3N0cm9rZV90aW1lcihyc3YpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBFeHBlY3RpbmcgYSBzdGF0ZSB0cmFuc2l0aW9uIHNvIGxlYXZlIHRpbWVyCisJCQkgICBhcy1pcy4gKi8KKwkJCWJyZWFrOworCQl9CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKG5ld19zdGF0ZSkgeworCWNhc2UgVVdCX1JTVl9TVEFURV9OT05FOgorCQl1d2JfZHJwX2F2YWlsX3JlbGVhc2UocnN2LT5yYywgJnJzdi0+bWFzKTsKKwkJdXdiX3Jzdl9wdXRfc3RyZWFtKHJzdik7CisJCXV3Yl9yc3Zfc3RhdGVfdXBkYXRlKHJzdiwgVVdCX1JTVl9TVEFURV9OT05FKTsKKwkJdXdiX3Jzdl9jYWxsYmFjayhyc3YpOworCQlicmVhazsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19JTklUSUFURUQ6CisJCXV3Yl9yc3Zfc3RhdGVfdXBkYXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX0lOSVRJQVRFRCk7CisJCWJyZWFrOworCWNhc2UgVVdCX1JTVl9TVEFURV9PX1BFTkRJTkc6CisJCXV3Yl9yc3Zfc3RhdGVfdXBkYXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX1BFTkRJTkcpOworCQlicmVhazsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19FU1RBQkxJU0hFRDoKKwkJdXdiX2RycF9hdmFpbF9yZXNlcnZlKHJzdi0+cmMsICZyc3YtPm1hcyk7CisJCXV3Yl9yc3Zfc3RhdGVfdXBkYXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX0VTVEFCTElTSEVEKTsKKwkJdXdiX3Jzdl9jYWxsYmFjayhyc3YpOworCQlicmVhazsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfVF9BQ0NFUFRFRDoKKwkJdXdiX2RycF9hdmFpbF9yZXNlcnZlKHJzdi0+cmMsICZyc3YtPm1hcyk7CisJCXV3Yl9yc3Zfc3RhdGVfdXBkYXRlKHJzdiwgVVdCX1JTVl9TVEFURV9UX0FDQ0VQVEVEKTsKKwkJdXdiX3Jzdl9jYWxsYmFjayhyc3YpOworCQlicmVhazsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfVF9ERU5JRUQ6CisJCXV3Yl9yc3Zfc3RhdGVfdXBkYXRlKHJzdiwgVVdCX1JTVl9TVEFURV9UX0RFTklFRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnJzdi0+cmMtPnV3Yl9kZXYuZGV2LCAidW5oYW5kbGVkIHN0YXRlOiAlcyAoJWQpXG4iLAorCQkJdXdiX3Jzdl9zdGF0ZV9zdHIobmV3X3N0YXRlKSwgbmV3X3N0YXRlKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXdiX3JzdiAqdXdiX3Jzdl9hbGxvYyhzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlzdHJ1Y3QgdXdiX3JzdiAqcnN2OworCisJcnN2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHV3Yl9yc3YpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJzdikKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmcnN2LT5yY19ub2RlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnN2LT5wYWxfbm9kZSk7CisJaW5pdF90aW1lcigmcnN2LT50aW1lcik7CisJcnN2LT50aW1lci5mdW5jdGlvbiA9IHV3Yl9yc3ZfdGltZXI7CisJcnN2LT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKXJzdjsKKworCXJzdi0+cmMgPSByYzsKKworCXJldHVybiByc3Y7Cit9CisKK3N0YXRpYyB2b2lkIHV3Yl9yc3ZfZnJlZShzdHJ1Y3QgdXdiX3JzdiAqcnN2KQoreworCXV3Yl9kZXZfcHV0KHJzdi0+b3duZXIpOworCWlmIChyc3YtPnRhcmdldC50eXBlID09IFVXQl9SU1ZfVEFSR0VUX0RFVikKKwkJdXdiX2Rldl9wdXQocnN2LT50YXJnZXQuZGV2KTsKKwlrZnJlZShyc3YpOworfQorCisvKioKKyAqIHV3Yl9yc3ZfY3JlYXRlIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBVV0IgcmVzZXJ2YXRpb24gc3RydWN0dXJlCisgKiBAcmM6IHRoZSByYWRpbyBjb250cm9sbGVyCisgKiBAY2I6IGNhbGxiYWNrIHRvIHVzZSB3aGVuIHRoZSByZXNlcnZhdGlvbiBjb21wbGV0ZXMgb3IgdGVybWluYXRlcworICogQHBhbF9wcml2OiBkYXRhIHByaXZhdGUgdG8gdGhlIFBBTCB0byBiZSBwYXNzZWQgaW4gdGhlIGNhbGxiYWNrCisgKgorICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcmVzZXJ2YXRpb24gY2hhbmdlcyBmcm9tOgorICoKKyAqICAgLSBwZW5kaW5nIHRvIGFjY2VwdGVkCisgKiAgIC0gcGVuZGluZyB0byBkZW5pbmVkCisgKiAgIC0gYWNjZXB0ZWQgdG8gdGVybWluYXRlZAorICogICAtIHBlbmRpbmcgdG8gdGVybWluYXRlZAorICovCitzdHJ1Y3QgdXdiX3JzdiAqdXdiX3Jzdl9jcmVhdGUoc3RydWN0IHV3Yl9yYyAqcmMsIHV3Yl9yc3ZfY2JfZiBjYiwgdm9pZCAqcGFsX3ByaXYpCit7CisJc3RydWN0IHV3Yl9yc3YgKnJzdjsKKworCXJzdiA9IHV3Yl9yc3ZfYWxsb2MocmMpOworCWlmICghcnN2KQorCQlyZXR1cm4gTlVMTDsKKworCXJzdi0+Y2FsbGJhY2sgPSBjYjsKKwlyc3YtPnBhbF9wcml2ID0gcGFsX3ByaXY7CisKKwlyZXR1cm4gcnN2OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXdiX3Jzdl9jcmVhdGUpOworCit2b2lkIHV3Yl9yc3ZfcmVtb3ZlKHN0cnVjdCB1d2JfcnN2ICpyc3YpCit7CisJaWYgKHJzdi0+c3RhdGUgIT0gVVdCX1JTVl9TVEFURV9OT05FKQorCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfTk9ORSk7CisJZGVsX3RpbWVyX3N5bmMoJnJzdi0+dGltZXIpOworCWxpc3RfZGVsKCZyc3YtPnJjX25vZGUpOworCXV3Yl9yc3ZfZnJlZShyc3YpOworfQorCisvKioKKyAqIHV3Yl9yc3ZfZGVzdHJveSAtIGZyZWUgYSBVV0IgcmVzZXJ2YXRpb24gc3RydWN0dXJlCisgKiBAcnN2OiB0aGUgcmVzZXJ2YXRpb24gdG8gZnJlZQorICoKKyAqIFRoZSByZXNlcnZhdGlvbiB3aWxsIGJlIHRlcm1pbmF0ZWQgaWYgaXQgaXMgcGVuZGluZyBvciBlc3RhYmxpc2hlZC4KKyAqLwordm9pZCB1d2JfcnN2X2Rlc3Ryb3koc3RydWN0IHV3Yl9yc3YgKnJzdikKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHJzdi0+cmM7CisKKwltdXRleF9sb2NrKCZyYy0+cnN2c19tdXRleCk7CisJdXdiX3Jzdl9yZW1vdmUocnN2KTsKKwltdXRleF91bmxvY2soJnJjLT5yc3ZzX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yc3ZfZGVzdHJveSk7CisKKy8qKgorICogdXNiX3Jzdl9lc3RhYmxpc2ggLSBzdGFydCBhIHJlc2VydmF0aW9uIGVzdGFibGlzaG1lbnQKKyAqIEByc3Y6IHRoZSByZXNlcnZhdGlvbgorICoKKyAqIFRoZSBQQUwgc2hvdWxkIGZpbGwgaW4gQHJzdidzIG93bmVyLCB0YXJnZXQsIHR5cGUsIG1heF9tYXMsCisgKiBtaW5fbWFzLCBzcGFyc2l0eSBhbmQgaXNfbXVsdGljYXN0IGZpZWxkcy4gIElmIHRoZSB0YXJnZXQgaXMgYQorICogdXdiX2RldiBpdCBtdXN0IGJlIHJlZmVyZW5jZWQuCisgKgorICogVGhlIHJlc2VydmF0aW9uJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzZXJ2YXRpb24gaXMKKyAqIGFjY2VwdGVkLCBkZW5pZWQgb3IgdGltZXMgb3V0LgorICovCitpbnQgdXdiX3Jzdl9lc3RhYmxpc2goc3RydWN0IHV3Yl9yc3YgKnJzdikKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHJzdi0+cmM7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnJjLT5yc3ZzX211dGV4KTsKKworCXJldCA9IHV3Yl9yc3ZfZ2V0X3N0cmVhbShyc3YpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gdXdiX3Jzdl9hbGxvY19tYXMocnN2KTsKKwlpZiAocmV0KSB7CisJCXV3Yl9yc3ZfcHV0X3N0cmVhbShyc3YpOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZyc3YtPnJjX25vZGUsICZyYy0+cmVzZXJ2YXRpb25zKTsKKwlyc3YtPm93bmVyID0gJnJjLT51d2JfZGV2OworCXV3Yl9kZXZfZ2V0KHJzdi0+b3duZXIpOworCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX0lOSVRJQVRFRCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZyYy0+cnN2c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yc3ZfZXN0YWJsaXNoKTsKKworLyoqCisgKiB1d2JfcnN2X21vZGlmeSAtIG1vZGlmeSBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIHJlc2VydmF0aW9uCisgKiBAcnN2OiB0aGUgcmVzZXJ2YXRpb24gdG8gbW9kaWZ5CisgKiBAbWF4X21hczogbmV3IG1heGltdW0gTUFTIHRvIHJlc2VydmUKKyAqIEBtaW5fbWFzOiBuZXcgbWluaW11bSBNQVMgdG8gcmVzZXJ2ZQorICogQHNwYXJzaXR5OiBuZXcgc3BhcnNpdHkgdG8gdXNlCisgKgorICogRklYTUU6IGltcGxlbWVudCB0aGlzIG9uY2UgdGhlcmUgYXJlIFBBTHMgdGhhdCB1c2UgaXQuCisgKi8KK2ludCB1d2JfcnN2X21vZGlmeShzdHJ1Y3QgdXdiX3JzdiAqcnN2LCBpbnQgbWF4X21hcywgaW50IG1pbl9tYXMsIGludCBzcGFyc2l0eSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yc3ZfbW9kaWZ5KTsKKworLyoqCisgKiB1d2JfcnN2X3Rlcm1pbmF0ZSAtIHRlcm1pbmF0ZSBhbiBlc3RhYmxpc2hlZCByZXNlcnZhdGlvbgorICogQHJzdjogdGhlIHJlc2VydmF0aW9uIHRvIHRlcm1pbmF0ZQorICoKKyAqIEEgcmVzZXJ2YXRpb24gaXMgdGVybWluYXRlZCBieSByZW1vdmluZyB0aGUgRFJQIElFIGZyb20gdGhlIGJlYWNvbiwKKyAqIHRoZSBvdGhlciBlbmQgd2lsbCBjb25zaWRlciB0aGUgcmVzZXJ2YXRpb24gdG8gYmUgdGVybWluYXRlZCB3aGVuCisgKiBpdCBkb2VzIG5vdCBzZWUgdGhlIERSUCBJRSBmb3IgYXQgbGVhc3QgbU1heExvc3RCZWFjb25zLgorICoKKyAqIElmIGFwcGxpY2FibGUsIHRoZSByZWZlcmVuY2UgdG8gdGhlIHRhcmdldCB1d2JfZGV2IHdpbGwgYmUgcmVsZWFzZWQuCisgKi8KK3ZvaWQgdXdiX3Jzdl90ZXJtaW5hdGUoc3RydWN0IHV3Yl9yc3YgKnJzdikKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHJzdi0+cmM7CisKKwltdXRleF9sb2NrKCZyYy0+cnN2c19tdXRleCk7CisKKwl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfTk9ORSk7CisKKwltdXRleF91bmxvY2soJnJjLT5yc3ZzX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yc3ZfdGVybWluYXRlKTsKKworLyoqCisgKiB1d2JfcnN2X2FjY2VwdCAtIGFjY2VwdCBhIG5ldyByZXNlcnZhdGlvbiBmcm9tIGEgcGVlcgorICogQHJzdjogICAgICB0aGUgcmVzZXJ2YXRpb24KKyAqIEBjYjogICAgICAgY2FsbCBiYWNrIGZvciByZXNlcnZhdGlvbiBjaGFuZ2VzCisgKiBAcGFsX3ByaXY6IGRhdGEgdG8gYmUgcGFzc2VkIGluIHRoZSBhYm92ZSBjYWxsIGJhY2sKKyAqCisgKiBSZXNlcnZhdGlvbiByZXF1ZXN0cyBmcm9tIHBlZXJzIGFyZSBkZW5pZWQgdW5sZXNzIGEgUEFMIGFjY2VwdHMgaXQKKyAqIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZCB1d2JfcnN2X2FjY2VwdChzdHJ1Y3QgdXdiX3JzdiAqcnN2LCB1d2JfcnN2X2NiX2YgY2IsIHZvaWQgKnBhbF9wcml2KQoreworCXJzdi0+Y2FsbGJhY2sgPSBjYjsKKwlyc3YtPnBhbF9wcml2ID0gcGFsX3ByaXY7CisJcnN2LT5zdGF0ZSAgICA9IFVXQl9SU1ZfU1RBVEVfVF9BQ0NFUFRFRDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV3Yl9yc3ZfYWNjZXB0KTsKKworLyoKKyAqIElzIGEgcmVjZWl2ZWQgRFJQIElFIGZvciB0aGlzIHJlc2VydmF0aW9uPworICovCitzdGF0aWMgYm9vbCB1d2JfcnN2X21hdGNoKHN0cnVjdCB1d2JfcnN2ICpyc3YsIHN0cnVjdCB1d2JfZGV2ICpzcmMsCisJCQkgIHN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWUpCit7CisJc3RydWN0IHV3Yl9kZXZfYWRkciAqcnN2X3NyYzsKKwlpbnQgc3RyZWFtOworCisJc3RyZWFtID0gdXdiX2llX2RycF9zdHJlYW1faW5kZXgoZHJwX2llKTsKKworCWlmIChyc3YtPnN0cmVhbSAhPSBzdHJlYW0pCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAocnN2LT50YXJnZXQudHlwZSkgeworCWNhc2UgVVdCX1JTVl9UQVJHRVRfREVWQUREUjoKKwkJcmV0dXJuIHJzdi0+c3RyZWFtID09IHN0cmVhbTsKKwljYXNlIFVXQl9SU1ZfVEFSR0VUX0RFVjoKKwkJaWYgKHV3Yl9pZV9kcnBfb3duZXIoZHJwX2llKSkKKwkJCXJzdl9zcmMgPSAmcnN2LT5vd25lci0+ZGV2X2FkZHI7CisJCWVsc2UKKwkJCXJzdl9zcmMgPSAmcnN2LT50YXJnZXQuZGV2LT5kZXZfYWRkcjsKKwkJcmV0dXJuIHV3Yl9kZXZfYWRkcl9jbXAoJnNyYy0+ZGV2X2FkZHIsIHJzdl9zcmMpID09IDA7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCB1d2JfcnN2ICp1d2JfcnN2X25ld190YXJnZXQoc3RydWN0IHV3Yl9yYyAqcmMsCisJCQkJCSAgc3RydWN0IHV3Yl9kZXYgKnNyYywKKwkJCQkJICBzdHJ1Y3QgdXdiX2llX2RycCAqZHJwX2llKQoreworCXN0cnVjdCB1d2JfcnN2ICpyc3Y7CisJc3RydWN0IHV3Yl9wYWwgKnBhbDsKKwllbnVtIHV3Yl9yc3Zfc3RhdGUgc3RhdGU7CisKKwlyc3YgPSB1d2JfcnN2X2FsbG9jKHJjKTsKKwlpZiAoIXJzdikKKwkJcmV0dXJuIE5VTEw7CisKKwlyc3YtPnJjICAgICAgICAgID0gcmM7CisJcnN2LT5vd25lciAgICAgICA9IHNyYzsKKwl1d2JfZGV2X2dldChyc3YtPm93bmVyKTsKKwlyc3YtPnRhcmdldC50eXBlID0gVVdCX1JTVl9UQVJHRVRfREVWOworCXJzdi0+dGFyZ2V0LmRldiAgPSAmcmMtPnV3Yl9kZXY7CisJcnN2LT50eXBlICAgICAgICA9IHV3Yl9pZV9kcnBfdHlwZShkcnBfaWUpOworCXJzdi0+c3RyZWFtICAgICAgPSB1d2JfaWVfZHJwX3N0cmVhbV9pbmRleChkcnBfaWUpOworCXNldF9iaXQocnN2LT5zdHJlYW0sIHJzdi0+b3duZXItPnN0cmVhbXMpOworCXV3Yl9kcnBfaWVfdG9fYm0oJnJzdi0+bWFzLCBkcnBfaWUpOworCisJLyoKKwkgKiBTZWUgaWYgYW55IFBBTHMgYXJlIGludGVyZXN0ZWQgaW4gdGhpcyByZXNlcnZhdGlvbi4gSWYgbm90LAorCSAqIGRlbnkgdGhlIHJlcXVlc3QuCisJICovCisJcnN2LT5zdGF0ZSA9IFVXQl9SU1ZfU1RBVEVfVF9ERU5JRUQ7CisJc3Bpbl9sb2NrKCZyYy0+cGFsX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFsLCAmcmMtPnBhbHMsIG5vZGUpIHsKKwkJaWYgKHBhbC0+bmV3X3JzdikKKwkJCXBhbC0+bmV3X3Jzdihyc3YpOworCQlpZiAocnN2LT5zdGF0ZSA9PSBVV0JfUlNWX1NUQVRFX1RfQUNDRVBURUQpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJnJjLT5wYWxfbG9jayk7CisKKwlsaXN0X2FkZF90YWlsKCZyc3YtPnJjX25vZGUsICZyYy0+cmVzZXJ2YXRpb25zKTsKKwlzdGF0ZSA9IHJzdi0+c3RhdGU7CisJcnN2LT5zdGF0ZSA9IFVXQl9SU1ZfU1RBVEVfTk9ORTsKKwl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIHN0YXRlKTsKKworCXJldHVybiByc3Y7Cit9CisKKy8qKgorICogdXdiX3Jzdl9maW5kIC0gZmluZCBhIHJlc2VydmF0aW9uIGZvciBhIHJlY2VpdmVkIERSUCBJRS4KKyAqIEByYzogdGhlIHJhZGlvIGNvbnRyb2xsZXIKKyAqIEBzcmM6IHNvdXJjZSBvZiB0aGUgRFJQIElFCisgKiBAZHJwX2llOiB0aGUgRFJQIElFCisgKgorICogSWYgdGhlIHJlc2VydmF0aW9uIGNhbm5vdCBiZSBmb3VuZCBhbmQgdGhlIERSUCBJRSBpcyBmcm9tIGEgcGVlcgorICogYXR0ZW1wdGluZyB0byBlc3RhYmxpc2ggYSBuZXcgcmVzZXJ2YXRpb24sIGNyZWF0ZSBhIG5ldyByZXNlcnZhdGlvbgorICogYW5kIGFkZCBpdCB0byB0aGUgbGlzdC4KKyAqLworc3RydWN0IHV3Yl9yc3YgKnV3Yl9yc3ZfZmluZChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9kZXYgKnNyYywKKwkJCSAgICAgc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZSkKK3sKKwlzdHJ1Y3QgdXdiX3JzdiAqcnN2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyc3YsICZyYy0+cmVzZXJ2YXRpb25zLCByY19ub2RlKSB7CisJCWlmICh1d2JfcnN2X21hdGNoKHJzdiwgc3JjLCBkcnBfaWUpKQorCQkJcmV0dXJuIHJzdjsKKwl9CisKKwlpZiAodXdiX2llX2RycF9vd25lcihkcnBfaWUpKQorCQlyZXR1cm4gdXdiX3Jzdl9uZXdfdGFyZ2V0KHJjLCBzcmMsIGRycF9pZSk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdvIHRocm91Z2ggYWxsIHRoZSByZXNlcnZhdGlvbnMgYW5kIGNoZWNrIGZvciB0aW1lb3V0cyBhbmQgKGlmCisgKiBuZWNlc3NhcnkpIHVwZGF0ZSB0aGVpciBEUlAgSUVzLgorICoKKyAqIEZJWE1FOiBsb29rIGF0IGJ1aWxkaW5nIHRoZSBTRVRfRFJQX0lFIGNvbW1hbmQgaGVyZSByYXRoZXIgdGhhbgorICogaGF2aW5nIHRvIHJlc2NhbiB0aGUgbGlzdCBpbiB1d2JfcmNfc2VuZF9hbGxfZHJwX2llKCkuCisgKi8KK3N0YXRpYyBib29sIHV3Yl9yc3ZfdXBkYXRlX2FsbChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlzdHJ1Y3QgdXdiX3JzdiAqcnN2LCAqdDsKKwlib29sIGllX3VwZGF0ZWQgPSBmYWxzZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyc3YsIHQsICZyYy0+cmVzZXJ2YXRpb25zLCByY19ub2RlKSB7CisJCWlmIChyc3YtPmV4cGlyZWQpCisJCQl1d2JfZHJwX2hhbmRsZV90aW1lb3V0KHJzdik7CisJCWlmICghcnN2LT5pZV92YWxpZCkgeworCQkJdXdiX2RycF9pZV91cGRhdGUocnN2KTsKKwkJCWllX3VwZGF0ZWQgPSB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGllX3VwZGF0ZWQ7Cit9CisKK3ZvaWQgdXdiX3Jzdl9zY2hlZF91cGRhdGUoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJcXVldWVfd29yayhyYy0+cnN2X3dvcmtxLCAmcmMtPnJzdl91cGRhdGVfd29yayk7Cit9CisKKy8qCisgKiBVcGRhdGUgRFJQIElFcyBhbmQsIGlmIG5lY2Vzc2FyeSwgdGhlIERSUCBBdmFpbGFiaWxpdHkgSUUgYW5kIHNlbmQKKyAqIHRoZSB1cGRhdGVkIElFcyB0byB0aGUgcmFkaW8gY29udHJvbGxlci4KKyAqLworc3RhdGljIHZvaWQgdXdiX3Jzdl91cGRhdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHV3Yl9yYywgcnN2X3VwZGF0ZV93b3JrKTsKKwlib29sIGllX3VwZGF0ZWQ7CisKKwltdXRleF9sb2NrKCZyYy0+cnN2c19tdXRleCk7CisKKwlpZV91cGRhdGVkID0gdXdiX3Jzdl91cGRhdGVfYWxsKHJjKTsKKworCWlmICghcmMtPmRycF9hdmFpbC5pZV92YWxpZCkgeworCQl1d2JfZHJwX2F2YWlsX2llX3VwZGF0ZShyYyk7CisJCWllX3VwZGF0ZWQgPSB0cnVlOworCX0KKworCWlmIChpZV91cGRhdGVkKQorCQl1d2JfcmNfc2VuZF9hbGxfZHJwX2llKHJjKTsKKworCW11dGV4X3VubG9jaygmcmMtPnJzdnNfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB1d2JfcnN2X3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1d2JfcnN2ICpyc3YgPSAoc3RydWN0IHV3Yl9yc3YgKilhcmc7CisKKwlyc3YtPmV4cGlyZWQgPSB0cnVlOworCXV3Yl9yc3Zfc2NoZWRfdXBkYXRlKHJzdi0+cmMpOworfQorCit2b2lkIHV3Yl9yc3ZfaW5pdChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlJTklUX0xJU1RfSEVBRCgmcmMtPnJlc2VydmF0aW9ucyk7CisJbXV0ZXhfaW5pdCgmcmMtPnJzdnNfbXV0ZXgpOworCUlOSVRfV09SSygmcmMtPnJzdl91cGRhdGVfd29yaywgdXdiX3Jzdl91cGRhdGVfd29yayk7CisKKwliaXRtYXBfY29tcGxlbWVudChyYy0+dXdiX2Rldi5zdHJlYW1zLCByYy0+dXdiX2Rldi5zdHJlYW1zLCBVV0JfTlVNX1NUUkVBTVMpOworfQorCitpbnQgdXdiX3Jzdl9zZXR1cChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwljaGFyIG5hbWVbMTZdOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXNfcnN2ZCIsIGRldl9uYW1lKCZyYy0+dXdiX2Rldi5kZXYpKTsKKwlyYy0+cnN2X3dvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmFtZSk7CisJaWYgKHJjLT5yc3Zfd29ya3EgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1d2JfcnN2X2NsZWFudXAoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3RydWN0IHV3Yl9yc3YgKnJzdiwgKnQ7CisKKwltdXRleF9sb2NrKCZyYy0+cnN2c19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJzdiwgdCwgJnJjLT5yZXNlcnZhdGlvbnMsIHJjX25vZGUpIHsKKwkJdXdiX3Jzdl9yZW1vdmUocnN2KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyYy0+cnN2c19tdXRleCk7CisKKwljYW5jZWxfd29ya19zeW5jKCZyYy0+cnN2X3VwZGF0ZV93b3JrKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShyYy0+cnN2X3dvcmtxKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3NjYW4uYyBiL2RyaXZlcnMvdXdiL3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDI3MDc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivc2Nhbi5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogVWx0cmEgV2lkZSBCYW5kCisgKiBTY2FubmluZyBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKgorICogRklYTUU6IGRvY3MKKyAqIEZJWE1FOiB0aGVyZSBhcmUgaXNzdWVzIGhlcmUgb24gaG93IEJFQUNPTiBhbmQgU0NBTiBvbiBVU0IgUkNJIGRlYWwKKyAqICAgICAgICB3aXRoIGVhY2ggb3RoZXIuIEN1cnJlbnRseSBzZWVtcyB0aGF0IFNUQVJUX0JFQUNPTiB3aGlsZQorICogICAgICAgIFNDQU5fT05MWSB3aWxsIGNhbmNlbCB0aGUgc2Nhbiwgc28gd2UgbmVlZCB0byB1cGRhdGUgdGhlCisgKiAgICAgICAgc3RhdGUgaGVyZS4gQ2xhcmlmaWNhdGlvbiByZXF1ZXN0IHNlbnQgYnkgZW1haWwgb24KKyAqICAgICAgICAxMC8wNS8yMDA1LgorICogICAgICAgIDEwLzI4LzIwMDUgTm8gY2xlYXIgYW5zd2VyIGhlYXJkLS1tYXliZSB3ZSdsbCBoYWNrIHRoZSBBUEkKKyAqICAgICAgICAgICAgICAgICAgIHNvIHRoYXQgd2hlbiB3ZSBzdGFydCBiZWFjb25pbmcsIGlmIHRoZSBIQyBpcworICogICAgICAgICAgICAgICAgICAgc2Nhbm5pbmcgaW4gYSBtb2RlIG5vdCBjb21wYXRpYmxlIHdpdGggYmVhY29uaW5nCisgKiAgICAgICAgICAgICAgICAgICB3ZSBqdXN0IGZhaWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgInV3Yi1pbnRlcm5hbC5oIgorCisKKy8qKgorICogU3RhcnQvc3RvcCBzY2FubmluZyBpbiBhIHJhZGlvIGNvbnRyb2xsZXIKKyAqCisgKiBAcmM6ICAgICAgVVdCIFJhZGlvIENvbnRyb2xsbGVyCisgKiBAY2hhbm5lbDogQ2hhbm5lbCB0byBzY2FuOyBlbmNvZGluZ3MgaW4gV1VTQjEuMFtUYWJsZSA1LjEyXQorICogQHR5cGU6ICAgIFR5cGUgb2Ygc2Nhbm5pbmcgdG8gZG8uCisgKiBAYnBzdF9vZmZzZXQ6IHZhbHVlIGF0IHdoaWNoIHRvIHN0YXJ0IHNjYW5uaW5nIChpZiB0eXBlID09CisgKiAgICAgICAgICAgICAgICBVV0JfU0NBTl9PTkxZX1NUQVJUVElNRSkKKyAqIEByZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvcgorICoKKyAqIFdlIHB1dCB0aGUgY29tbWFuZCBvbiBrbWFsbG9jJ2VkIG1lbW9yeSBhcyBzb21lIGFyY2hlcyBjYW5ub3QgZG8KKyAqIFVTQiBmcm9tIHRoZSBzdGFjay4gVGhlIHJlcGx5IGV2ZW50IGlzIGNvcGllZCBmcm9tIGFuIHN0YWdlIGJ1ZmZlciwKKyAqIHNvIGl0IGNhbiBiZSBpbiB0aGUgc3RhY2suIFNlZSBXVVNCMS4wWzguNi4yLjRdIGZvciBtb3JlIGRldGFpbHMuCisgKi8KK2ludCB1d2JfcmNfc2NhbihzdHJ1Y3QgdXdiX3JjICpyYywKKwkJdW5zaWduZWQgY2hhbm5lbCwgZW51bSB1d2Jfc2Nhbl90eXBlIHR5cGUsCisJCXVuc2lnbmVkIGJwc3Rfb2Zmc2V0KQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHV3Yl9yY19jbWRfc2NhbiAqY21kOworCXN0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0gcmVwbHk7CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCWdvdG8gZXJyb3Jfa3phbGxvYzsKKwltdXRleF9sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJY21kLT5yY2NiLmJDb21tYW5kVHlwZSA9IFVXQl9SQ19DRVRfR0VORVJBTDsKKwljbWQtPnJjY2Iud0NvbW1hbmQgPSBjcHVfdG9fbGUxNihVV0JfUkNfQ01EX1NDQU4pOworCWNtZC0+YkNoYW5uZWxOdW1iZXIgPSBjaGFubmVsOworCWNtZC0+YlNjYW5TdGF0ZSA9IHR5cGU7CisJY21kLT53U3RhcnRUaW1lID0gY3B1X3RvX2xlMTYoYnBzdF9vZmZzZXQpOworCXJlcGx5LnJjZWIuYkV2ZW50VHlwZSA9IFVXQl9SQ19DRVRfR0VORVJBTDsKKwlyZXBseS5yY2ViLndFdmVudCA9IFVXQl9SQ19DTURfU0NBTjsKKwlyZXN1bHQgPSB1d2JfcmNfY21kKHJjLCAiU0NBTiIsICZjbWQtPnJjY2IsIHNpemVvZigqY21kKSwKKwkJCSAgICAmcmVwbHkucmNlYiwgc2l6ZW9mKHJlcGx5KSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfY21kOworCWlmIChyZXBseS5iUmVzdWx0Q29kZSAhPSBVV0JfUkNfUkVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycigmcmMtPnV3Yl9kZXYuZGV2LAorCQkJIlNDQU46IGNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMgKCVkKVxuIiwKKwkJCXV3Yl9yY19zdHJlcnJvcihyZXBseS5iUmVzdWx0Q29kZSksIHJlcGx5LmJSZXN1bHRDb2RlKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBlcnJvcl9jbWQ7CisJfQorCXJjLT5zY2FubmluZyA9IGNoYW5uZWw7CisJcmMtPnNjYW5fdHlwZSA9IHR5cGU7CitlcnJvcl9jbWQ6CisJbXV0ZXhfdW5sb2NrKCZyYy0+dXdiX2Rldi5tdXRleCk7CisJa2ZyZWUoY21kKTsKK2Vycm9yX2t6YWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFByaW50IHNjYW5uaW5nIHN0YXRlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHV3Yl9yY19zY2FuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYgPSB0b191d2JfZGV2KGRldik7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSB1d2JfZGV2LT5yYzsKKwlzc2l6ZV90IHJlc3VsdDsKKworCW11dGV4X2xvY2soJnJjLT51d2JfZGV2Lm11dGV4KTsKKwlyZXN1bHQgPSBzcHJpbnRmKGJ1ZiwgIiVkICVkXG4iLCByYy0+c2Nhbm5pbmcsIHJjLT5zY2FuX3R5cGUpOworCW11dGV4X3VubG9jaygmcmMtPnV3Yl9kZXYubXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKgorICovCitzdGF0aWMgc3NpemVfdCB1d2JfcmNfc2Nhbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2ID0gdG9fdXdiX2RldihkZXYpOworCXN0cnVjdCB1d2JfcmMgKnJjID0gdXdiX2Rldi0+cmM7CisJdW5zaWduZWQgY2hhbm5lbDsKKwl1bnNpZ25lZCB0eXBlOworCXVuc2lnbmVkIGJwc3Rfb2Zmc2V0ID0gMDsKKwlzc2l6ZV90IHJlc3VsdCA9IC1FSU5WQUw7CisKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXUgJXUgJXVcbiIsICZjaGFubmVsLCAmdHlwZSwgJmJwc3Rfb2Zmc2V0KTsKKwlpZiAocmVzdWx0ID49IDIgJiYgdHlwZSA8IFVXQl9TQ0FOX1RPUCkKKwkJcmVzdWx0ID0gdXdiX3JjX3NjYW4ocmMsIGNoYW5uZWwsIHR5cGUsIGJwc3Rfb2Zmc2V0KTsKKworCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogc2l6ZTsKK30KKworLyoqIFJhZGlvIENvbnRyb2wgc3lzZnMgaW50ZXJmYWNlIChkZWNsYXJhdGlvbikgKi8KK0RFVklDRV9BVFRSKHNjYW4sIFNfSVJVR08gfCBTX0lXVVNSLCB1d2JfcmNfc2Nhbl9zaG93LCB1d2JfcmNfc2Nhbl9zdG9yZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91bWMtYnVzLmMgYi9kcml2ZXJzL3V3Yi91bWMtYnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4ZDYyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3VtYy1idXMuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIEJ1cyBmb3IgVVdCIE11bHRpLWludGVyZmFjZSBDb250cm9sbGVyIGNhcGFiaWxpdGllcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdQTCB2Mi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL3VtYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitzdGF0aWMgaW50IHVtY19idXNfdW5iaW5kX2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqcGFyZW50ID0gZGF0YTsKKworCWlmIChkZXYtPnBhcmVudCA9PSBwYXJlbnQgJiYgZGV2LT5kcml2ZXIpCisJCWRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHVtY19jb250cm9sbGVyX3Jlc2V0IC0gcmVzZXQgdGhlIHdob2xlIFVNQyBjb250cm9sbGVyCisgKiBAdW1jOiB0aGUgVU1DIGRldmljZSBmb3IgdGhlIHJhZGlvIGNvbnRyb2xsZXIuCisgKgorICogRHJpdmVycyB3aWxsIGJlIHVuYm91bmQgZnJvbSBhbGwgVU1DIGRldmljZXMgYmVsb25naW5nIHRvIHRoZQorICogY29udHJvbGxlciBhbmQgdGhlbiB0aGUgcmFkaW8gY29udHJvbGxlciB3aWxsIGJlIHJlYm91bmQuICBUaGUKKyAqIHJhZGlvIGNvbnRyb2xsZXIgaXMgZXhwZWN0ZWQgdG8gZG8gYSBmdWxsIGhhcmR3YXJlIHJlc2V0IHdoZW4gaXQgaXMKKyAqIHByb2JlZC4KKyAqCisgKiBJZiB0aGlzIGlzIGNhbGxlZCB3aGlsZSBhIHByb2JlKCkgb3IgcmVtb3ZlKCkgaXMgaW4gcHJvZ3Jlc3MgaXQKKyAqIHdpbGwgcmV0dXJuIC1FQUdBSU4gYW5kIG5vdCBwZXJmb3JtIHRoZSByZXNldC4KKyAqLworaW50IHVtY19jb250cm9sbGVyX3Jlc2V0KHN0cnVjdCB1bWNfZGV2ICp1bWMpCit7CisJc3RydWN0IGRldmljZSAqcGFyZW50ID0gdW1jLT5kZXYucGFyZW50OworCWludCByZXQ7CisKKwlpZiAoZG93bl90cnlsb2NrKCZwYXJlbnQtPnNlbSkpCisJCXJldHVybiAtRUFHQUlOOworCWJ1c19mb3JfZWFjaF9kZXYoJnVtY19idXNfdHlwZSwgTlVMTCwgcGFyZW50LCB1bWNfYnVzX3VuYmluZF9oZWxwZXIpOworCXJldCA9IGRldmljZV9hdHRhY2goJnVtYy0+ZGV2KTsKKwlpZiAocmV0ID09IDEpCisJCXJldCA9IDA7CisJdXAoJnBhcmVudC0+c2VtKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bWNfY29udHJvbGxlcl9yZXNldCk7CisKKy8qKgorICogdW1jX21hdGNoX3BjaV9pZCAtIG1hdGNoIGEgVU1DIGRyaXZlciB0byBhIFVNQyBkZXZpY2UncyBwYXJlbnQgUENJIGRldmljZS4KKyAqIEB1bWNfZHJ2OiB1bWMgZHJpdmVyIHdpdGggbWF0Y2hfZGF0YSBwb2ludGluZyB0byBhIHplcm8tdGVybWluYXRlZAorICogdGFibGUgb2YgcGNpX2RldmljZV9pZCdzLgorICogQHVtYzogdW1jIGRldmljZSB3aG9zZSBwYXJlbnQgaXMgdG8gYmUgbWF0Y2hlZC4KKyAqLworaW50IHVtY19tYXRjaF9wY2lfaWQoc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcnYsIHN0cnVjdCB1bWNfZGV2ICp1bWMpCit7CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX3RhYmxlID0gdW1jX2Rydi0+bWF0Y2hfZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCisJaWYgKHVtYy0+ZGV2LnBhcmVudC0+YnVzICE9ICZwY2lfYnVzX3R5cGUpCisJCXJldHVybiAwOworCisJcGNpID0gdG9fcGNpX2Rldih1bWMtPmRldi5wYXJlbnQpOworCXJldHVybiBwY2lfbWF0Y2hfaWQoaWRfdGFibGUsIHBjaSkgIT0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVtY19tYXRjaF9wY2lfaWQpOworCitzdGF0aWMgaW50IHVtY19idXNfcmVzY2FuX2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXQgPSBkZXZpY2VfYXR0YWNoKGRldik7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHVtY19idXNfcmVzY2FuKHZvaWQpCit7CisJaW50IGVycjsKKworCS8qCisJICogV2UgY2FuJ3QgdXNlIGJ1c19yZXNjYW5fZGV2aWNlcygpIGhlcmUgYXMgaXQgZGVhZGxvY2tzIHdoZW4KKwkgKiBpdCB0cmllcyB0byByZXRha2UgdGhlIGRldi0+cGFyZW50IHNlbWFwaG9yZS4KKwkgKi8KKwllcnIgPSBidXNfZm9yX2VhY2hfZGV2KCZ1bWNfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHVtY19idXNfcmVzY2FuX2hlbHBlcik7CisJaWYgKGVyciA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZXNjYW4gb2YgYnVzIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBLQlVJTERfTU9ETkFNRSwgZXJyKTsKK30KKworc3RhdGljIGludCB1bWNfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgdW1jX2RldiAqdW1jID0gdG9fdW1jX2RldihkZXYpOworCXN0cnVjdCB1bWNfZHJpdmVyICp1bWNfZHJpdmVyID0gdG9fdW1jX2RyaXZlcihkcnYpOworCisJaWYgKHVtYy0+Y2FwX2lkID09IHVtY19kcml2ZXItPmNhcF9pZCkgeworCQlpZiAodW1jX2RyaXZlci0+bWF0Y2gpCisJCQlyZXR1cm4gdW1jX2RyaXZlci0+bWF0Y2godW1jX2RyaXZlciwgdW1jKTsKKwkJZWxzZQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVtY19kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1bWNfZGV2ICp1bWM7CisJc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcml2ZXI7CisJaW50IGVycjsKKworCXVtY19kcml2ZXIgPSB0b191bWNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwl1bWMgPSB0b191bWNfZGV2KGRldik7CisKKwlnZXRfZGV2aWNlKGRldik7CisJZXJyID0gdW1jX2RyaXZlci0+cHJvYmUodW1jKTsKKwlpZiAoZXJyKQorCQlwdXRfZGV2aWNlKGRldik7CisJZWxzZQorCQl1bWNfYnVzX3Jlc2NhbigpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1bWNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVtY19kZXYgKnVtYzsKKwlzdHJ1Y3QgdW1jX2RyaXZlciAqdW1jX2RyaXZlcjsKKworCXVtY19kcml2ZXIgPSB0b191bWNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwl1bWMgPSB0b191bWNfZGV2KGRldik7CisKKwl1bWNfZHJpdmVyLT5yZW1vdmUodW1jKTsKKwlwdXRfZGV2aWNlKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW1jX2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB1bWNfZGV2ICp1bWM7CisJc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcml2ZXI7CisJaW50IGVyciA9IDA7CisKKwl1bWMgPSB0b191bWNfZGV2KGRldik7CisKKwlpZiAoZGV2LT5kcml2ZXIpIHsKKwkJdW1jX2RyaXZlciA9IHRvX3VtY19kcml2ZXIoZGV2LT5kcml2ZXIpOworCQlpZiAodW1jX2RyaXZlci0+c3VzcGVuZCkKKwkJCWVyciA9IHVtY19kcml2ZXItPnN1c3BlbmQodW1jLCBzdGF0ZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdW1jX2RldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1bWNfZGV2ICp1bWM7CisJc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcml2ZXI7CisJaW50IGVyciA9IDA7CisKKwl1bWMgPSB0b191bWNfZGV2KGRldik7CisKKwlpZiAoZGV2LT5kcml2ZXIpIHsKKwkJdW1jX2RyaXZlciA9IHRvX3VtY19kcml2ZXIoZGV2LT5kcml2ZXIpOworCQlpZiAodW1jX2RyaXZlci0+cmVzdW1lKQorCQkJZXJyID0gdW1jX2RyaXZlci0+cmVzdW1lKHVtYyk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNhcGFiaWxpdHlfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVtY19kZXYgKnVtYyA9IHRvX3VtY19kZXYoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAyeFxuIiwgdW1jLT5jYXBfaWQpOworfQorCitzdGF0aWMgc3NpemVfdCB2ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1bWNfZGV2ICp1bWMgPSB0b191bWNfZGV2KGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNHhcbiIsIHVtYy0+dmVyc2lvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB1bWNfZGV2X2F0dHJzW10gPSB7CisJX19BVFRSX1JPKGNhcGFiaWxpdHlfaWQpLAorCV9fQVRUUl9STyh2ZXJzaW9uKSwKKwlfX0FUVFJfTlVMTCwKK307CisKK3N0cnVjdCBidXNfdHlwZSB1bWNfYnVzX3R5cGUgPSB7CisJLm5hbWUJCT0gInVtYyIsCisJLm1hdGNoCQk9IHVtY19idXNfbWF0Y2gsCisJLnByb2JlCQk9IHVtY19kZXZpY2VfcHJvYmUsCisJLnJlbW92ZQkJPSB1bWNfZGV2aWNlX3JlbW92ZSwKKwkuc3VzcGVuZCAgICAgICAgPSB1bWNfZGV2aWNlX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgID0gdW1jX2RldmljZV9yZXN1bWUsCisJLmRldl9hdHRycwk9IHVtY19kZXZfYXR0cnMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwodW1jX2J1c190eXBlKTsKKworc3RhdGljIGludCBfX2luaXQgdW1jX2J1c19pbml0KHZvaWQpCit7CisJcmV0dXJuIGJ1c19yZWdpc3RlcigmdW1jX2J1c190eXBlKTsKK30KK21vZHVsZV9pbml0KHVtY19idXNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1bWNfYnVzX2V4aXQodm9pZCkKK3sKKwlidXNfdW5yZWdpc3RlcigmdW1jX2J1c190eXBlKTsKK30KK21vZHVsZV9leGl0KHVtY19idXNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVVdCIE11bHRpLWludGVyZmFjZSBDb250cm9sbGVyIGNhcGFiaWxpdHkgYnVzIik7CitNT0RVTEVfQVVUSE9SKCJDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMdGQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91bWMtZGV2LmMgYi9kcml2ZXJzL3V3Yi91bWMtZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0NGUxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3VtYy1kZXYuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIFVXQiBNdWx0aS1pbnRlcmZhY2UgQ29udHJvbGxlciBkZXZpY2UgbWFuYWdlbWVudC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdQTCB2Mi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi91bWMuaD4KKyNkZWZpbmUgRF9MT0NBTCAwCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKK3N0YXRpYyB2b2lkIHVtY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVtY19kZXYgKnVtYyA9IHRvX3VtY19kZXYoZGV2KTsKKworCWtmcmVlKHVtYyk7Cit9CisKKy8qKgorICogdW1jX2RldmljZV9jcmVhdGUgLSBhbGxvY2F0ZSBhIGNoaWxkIFVNQyBkZXZpY2UKKyAqIEBwYXJlbnQ6IHBhcmVudCBvZiB0aGUgbmV3IFVNQyBkZXZpY2UuCisgKiBAbjogICAgICBpbmRleCBvZiB0aGUgbmV3IGRldmljZS4KKyAqCisgKiBUaGUgbmV3IFVNQyBkZXZpY2Ugd2lsbCBoYXZlIGEgYnVzIElEIG9mIHRoZSBwYXJlbnQgd2l0aCAnLW4nCisgKiBhcHBlbmRlZC4KKyAqLworc3RydWN0IHVtY19kZXYgKnVtY19kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IG4pCit7CisJc3RydWN0IHVtY19kZXYgKnVtYzsKKworCXVtYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1bWNfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVtYykgeworCQlzbnByaW50Zih1bWMtPmRldi5idXNfaWQsIHNpemVvZih1bWMtPmRldi5idXNfaWQpLCAiJXMtJWQiLAorCQkJIHBhcmVudC0+YnVzX2lkLCBuKTsKKwkJdW1jLT5kZXYucGFyZW50ICA9IHBhcmVudDsKKwkJdW1jLT5kZXYuYnVzICAgICA9ICZ1bWNfYnVzX3R5cGU7CisJCXVtYy0+ZGV2LnJlbGVhc2UgPSB1bWNfZGV2aWNlX3JlbGVhc2U7CisKKwkJdW1jLT5kZXYuZG1hX21hc2sgPSBwYXJlbnQtPmRtYV9tYXNrOworCX0KKwlyZXR1cm4gdW1jOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW1jX2RldmljZV9jcmVhdGUpOworCisvKioKKyAqIHVtY19kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBhIFVNQyBkZXZpY2UKKyAqIEB1bWM6IHBvaW50ZXIgdG8gdGhlIFVNQyBkZXZpY2UKKyAqCisgKiBUaGUgbWVtb3J5IHJlc291cmNlIGZvciB0aGUgVU1DIGRldmljZSBpcyBhY3F1aXJlZCBhbmQgdGhlIGRldmljZQorICogcmVnaXN0ZXJlZCB3aXRoIHRoZSBzeXN0ZW0uCisgKi8KK2ludCB1bWNfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCB1bWNfZGV2ICp1bWMpCit7CisJaW50IGVycjsKKworCWRfZm5zdGFydCgzLCAmdW1jLT5kZXYsICIodW1jX2RldiAlcClcbiIsIHVtYyk7CisKKwllcnIgPSByZXF1ZXN0X3Jlc291cmNlKHVtYy0+cmVzb3VyY2UucGFyZW50LCAmdW1jLT5yZXNvdXJjZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmdW1jLT5kZXYsICJjYW4ndCBhbGxvY2F0ZSByZXNvdXJjZSByYW5nZSAiCisJCQkiJTAxNkx4IHRvICUwMTZMeDogJWRcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXVtYy0+cmVzb3VyY2Uuc3RhcnQsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXVtYy0+cmVzb3VyY2UuZW5kLAorCQkJZXJyKTsKKwkJZ290byBlcnJvcl9yZXF1ZXN0X3Jlc291cmNlOworCX0KKworCWVyciA9IGRldmljZV9yZWdpc3RlcigmdW1jLT5kZXYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yX2RldmljZV9yZWdpc3RlcjsKKwlkX2ZuZW5kKDMsICZ1bWMtPmRldiwgIih1bWNfZGV2ICVwKSA9IDBcbiIsIHVtYyk7CisJcmV0dXJuIDA7CisKK2Vycm9yX2RldmljZV9yZWdpc3RlcjoKKwlyZWxlYXNlX3Jlc291cmNlKCZ1bWMtPnJlc291cmNlKTsKK2Vycm9yX3JlcXVlc3RfcmVzb3VyY2U6CisJZF9mbmVuZCgzLCAmdW1jLT5kZXYsICIodW1jX2RldiAlcCkgPSAlZFxuIiwgdW1jLCBlcnIpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bWNfZGV2aWNlX3JlZ2lzdGVyKTsKKworLyoqCisgKiB1bWNfZGV2aWNlX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgVU1DIGRldmljZQorICogQHVtYzogcG9pbnRlciB0byB0aGUgVU1DIGRldmljZQorICoKKyAqIEZpcnN0IHdlIHVucmVnaXN0ZXIgdGhlIGRldmljZSwgbWFrZSBzdXJlIHRoZSBkcml2ZXIgY2FuIGRvIGl0J3MKKyAqIHJlc291cmNlIHJlbGVhc2UgdGhpbmcgYW5kIHRoZW4gd2UgdHJ5IHRvIHJlbGVhc2UgYW55IGxlZnQgb3ZlcgorICogcmVzb3VyY2VzLiBXZSB0YWtlIGEgcmVmIHRvIHRoZSBkZXZpY2UsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0CisgKiBkaXNzYXBlYXIgdW5kZXIgb3VyIGZlZXQuCisgKi8KK3ZvaWQgdW1jX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB1bWNfZGV2ICp1bWMpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCWlmICghdW1jKQorCQlyZXR1cm47CisJZGV2ID0gZ2V0X2RldmljZSgmdW1jLT5kZXYpOworCWRfZm5zdGFydCgzLCBkZXYsICIodW1jX2RldiAlcClcbiIsIHVtYyk7CisJZGV2aWNlX3VucmVnaXN0ZXIoJnVtYy0+ZGV2KTsKKwlyZWxlYXNlX3Jlc291cmNlKCZ1bWMtPnJlc291cmNlKTsKKwlkX2ZuZW5kKDMsIGRldiwgIih1bWNfZGV2ICVwKSA9IHZvaWRcbiIsIHVtYyk7CisJcHV0X2RldmljZShkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW1jX2RldmljZV91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3VtYy1kcnYuYyBiL2RyaXZlcnMvdXdiL3VtYy1kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjdiNWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2IvdW1jLWRydi5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBVV0IgTXVsdGktaW50ZXJmYWNlIENvbnRyb2xsZXIgZHJpdmVyIG1hbmFnZW1lbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IvdW1jLmg+CisKK2ludCBfX3VtY19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcnYsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKKwkJCSAgY29uc3QgY2hhciAqbW9kX25hbWUpCit7CisJdW1jX2Rydi0+ZHJpdmVyLm5hbWUgICAgID0gdW1jX2Rydi0+bmFtZTsKKwl1bWNfZHJ2LT5kcml2ZXIub3duZXIgICAgPSBtb2R1bGU7CisJdW1jX2Rydi0+ZHJpdmVyLm1vZF9uYW1lID0gbW9kX25hbWU7CisJdW1jX2Rydi0+ZHJpdmVyLmJ1cyAgICAgID0gJnVtY19idXNfdHlwZTsKKworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnVtY19kcnYtPmRyaXZlcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3VtY19kcml2ZXJfcmVnaXN0ZXIpOworCisvKioKKyAqIHVtY19kcml2ZXJfcmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgVU1DIGNhcGFiaWx0aXR5IGRyaXZlci4KKyAqIEB1bWNfZHJ2OiAgcG9pbnRlciB0byB0aGUgZHJpdmVyLgorICovCit2b2lkIHVtY19kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgdW1jX2RyaXZlciAqdW1jX2RydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmdW1jX2Rydi0+ZHJpdmVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVtY19kcml2ZXJfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYyBiL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjMyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYwpAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogRGVidWcgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogRklYTUU6IGRvYworICovCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3V3Yi9kZWJ1Zy1jbWQuaD4KKyNkZWZpbmUgRF9MT0NBTCAwCisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisKKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKwordm9pZCBkdW1wX2J5dGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqX2J1Ziwgc2l6ZV90IHJzaXplKQoreworCWNvbnN0IGNoYXIgKmJ1ZiA9IF9idWY7CisJY2hhciBsaW5lWzMyXTsKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKwlpbnQgY250LCBjbnQyOworCWZvciAoY250ID0gMDsgY250IDwgcnNpemU7IGNudCArPSA4KSB7CisJCXNpemVfdCBydG9wID0gcnNpemUgLSBjbnQgPCA4ID8gcnNpemUgLSBjbnQgOiA4OworCQlmb3IgKG9mZnNldCA9IGNudDIgPSAwOyBjbnQyIDwgcnRvcDsgY250MisrKSB7CisJCQlvZmZzZXQgKz0gc2NucHJpbnRmKGxpbmUgKyBvZmZzZXQsIHNpemVvZihsaW5lKSAtIG9mZnNldCwKKwkJCQkJICAgICIlMDJ4ICIsIGJ1ZltjbnQgKyBjbnQyXSAmIDB4ZmYpOworCQl9CisJCWlmIChkZXYpCisJCQlkZXZfaW5mbyhkZXYsICIlc1xuIiwgbGluZSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBsaW5lKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkdW1wX2J5dGVzKTsKKworLyoKKyAqIERlYnVnIGludGVyZmFjZQorICoKKyAqIFBlciByYWRpbyBjb250cm9sbGVyIGRlYnVnZnMgZmlsZXMgKGluIHV3Yi91d2JOLyk6CisgKgorICogY29tbWFuZDogRmxleGlibGUgY29tbWFuZCBpbnRlcmZhY2UgKHNlZSA8bGludXgvdXdiL2RlYnVnLWNtZC5oPikuCisgKgorICogcmVzZXJ2YXRpb25zOiBpbmZvcm1hdGlvbiBvbiByZXNlcnZhdGlvbnMuCisgKgorICogYWNjZXB0OiBTZXQgdG8gdHJ1ZSAoWSBvciAxKSB0byBhY2NlcHQgcmVzZXJ2YXRpb24gcmVxdWVzdHMgZnJvbQorICogcGVlcnMuCisgKgorICogZHJwX2F2YWlsOiBEUlAgYXZhaWxhYmlsaXR5IGluZm9ybWF0aW9uLgorICovCisKK3N0cnVjdCB1d2JfZGJnIHsKKwlzdHJ1Y3QgdXdiX3BhbCBwYWw7CisKKwl1MzIgYWNjZXB0OworCXN0cnVjdCBsaXN0X2hlYWQgcnN2czsKKworCXN0cnVjdCBkZW50cnkgKnJvb3RfZDsKKwlzdHJ1Y3QgZGVudHJ5ICpjb21tYW5kX2Y7CisJc3RydWN0IGRlbnRyeSAqcmVzZXJ2YXRpb25zX2Y7CisJc3RydWN0IGRlbnRyeSAqYWNjZXB0X2Y7CisJc3RydWN0IGRlbnRyeSAqZHJwX2F2YWlsX2Y7Cit9OworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcm9vdF9kaXI7CisKK3N0YXRpYyB2b2lkIHV3Yl9kYmdfcnN2X2NiKHN0cnVjdCB1d2JfcnN2ICpyc3YpCit7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSByc3YtPnJjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBkZXZhZGRyOworCWNoYXIgb3duZXJbVVdCX0FERFJfU1RSU0laRV0sIHRhcmdldFtVV0JfQUREUl9TVFJTSVpFXTsKKworCXV3Yl9kZXZfYWRkcl9wcmludChvd25lciwgc2l6ZW9mKG93bmVyKSwgJnJzdi0+b3duZXItPmRldl9hZGRyKTsKKwlpZiAocnN2LT50YXJnZXQudHlwZSA9PSBVV0JfUlNWX1RBUkdFVF9ERVYpCisJCWRldmFkZHIgPSByc3YtPnRhcmdldC5kZXYtPmRldl9hZGRyOworCWVsc2UKKwkJZGV2YWRkciA9IHJzdi0+dGFyZ2V0LmRldmFkZHI7CisJdXdiX2Rldl9hZGRyX3ByaW50KHRhcmdldCwgc2l6ZW9mKHRhcmdldCksICZkZXZhZGRyKTsKKworCWRldl9kYmcoZGV2LCAiZGVidWc6IHJzdiAlcyAtPiAlczogJXNcbiIsCisJCW93bmVyLCB0YXJnZXQsIHV3Yl9yc3Zfc3RhdGVfc3RyKHJzdi0+c3RhdGUpKTsKK30KKworc3RhdGljIGludCBjbWRfcnN2X2VzdGFibGlzaChzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCSAgICAgc3RydWN0IHV3Yl9kYmdfY21kX3Jzdl9lc3RhYmxpc2ggKmNtZCkKK3sKKwlzdHJ1Y3QgdXdiX21hY19hZGRyIG1hY2FkZHI7CisJc3RydWN0IHV3Yl9yc3YgKnJzdjsKKwlzdHJ1Y3QgdXdiX2RldiAqdGFyZ2V0OworCWludCByZXQ7CisKKwltZW1jcHkoJm1hY2FkZHIsIGNtZC0+dGFyZ2V0LCBzaXplb2YobWFjYWRkcikpOworCXRhcmdldCA9IHV3Yl9kZXZfZ2V0X2J5X21hY2FkZHIocmMsICZtYWNhZGRyKTsKKwlpZiAodGFyZ2V0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJcnN2ID0gdXdiX3Jzdl9jcmVhdGUocmMsIHV3Yl9kYmdfcnN2X2NiLCBOVUxMKTsKKwlpZiAocnN2ID09IE5VTEwpIHsKKwkJdXdiX2Rldl9wdXQodGFyZ2V0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcnN2LT5vd25lciAgICAgICA9ICZyYy0+dXdiX2RldjsKKwlyc3YtPnRhcmdldC50eXBlID0gVVdCX1JTVl9UQVJHRVRfREVWOworCXJzdi0+dGFyZ2V0LmRldiAgPSB0YXJnZXQ7CisJcnN2LT50eXBlICAgICAgICA9IGNtZC0+dHlwZTsKKwlyc3YtPm1heF9tYXMgICAgID0gY21kLT5tYXhfbWFzOworCXJzdi0+bWluX21hcyAgICAgPSBjbWQtPm1pbl9tYXM7CisJcnN2LT5zcGFyc2l0eSAgICA9IGNtZC0+c3BhcnNpdHk7CisKKwlyZXQgPSB1d2JfcnN2X2VzdGFibGlzaChyc3YpOworCWlmIChyZXQpCisJCXV3Yl9yc3ZfZGVzdHJveShyc3YpOworCWVsc2UKKwkJbGlzdF9hZGRfdGFpbCgmcnN2LT5wYWxfbm9kZSwgJnJjLT5kYmctPnJzdnMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWRfcnN2X3Rlcm1pbmF0ZShzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCSAgICAgc3RydWN0IHV3Yl9kYmdfY21kX3Jzdl90ZXJtaW5hdGUgKmNtZCkKK3sKKwlzdHJ1Y3QgdXdiX3JzdiAqcnN2LCAqZm91bmQgPSBOVUxMOworCWludCBpID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnN2LCAmcmMtPmRiZy0+cnN2cywgcGFsX25vZGUpIHsKKwkJaWYgKGkgPT0gY21kLT5pbmRleCkgeworCQkJZm91bmQgPSByc3Y7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxpc3RfZGVsKCZmb3VuZC0+cGFsX25vZGUpOworCXV3Yl9yc3ZfdGVybWluYXRlKGZvdW5kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbW1hbmRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbW1hbmRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpCit7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHV3Yl9kYmdfY21kIGNtZDsKKwlpbnQgcmV0OworCisJaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHV3Yl9kYmdfY21kKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBsZW4pICE9IDApCisJCXJldHVybiAtRUZBVUxUOworCisJc3dpdGNoIChjbWQudHlwZSkgeworCWNhc2UgVVdCX0RCR19DTURfUlNWX0VTVEFCTElTSDoKKwkJcmV0ID0gY21kX3Jzdl9lc3RhYmxpc2gocmMsICZjbWQucnN2X2VzdGFibGlzaCk7CisJCWJyZWFrOworCWNhc2UgVVdCX0RCR19DTURfUlNWX1RFUk1JTkFURToKKwkJcmV0ID0gY21kX3Jzdl90ZXJtaW5hdGUocmMsICZjbWQucnN2X3Rlcm1pbmF0ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQgPCAwID8gcmV0IDogbGVuOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb21tYW5kX2ZvcHMgPSB7CisJLm9wZW4gICA9IGNvbW1hbmRfb3BlbiwKKwkud3JpdGUgID0gY29tbWFuZF93cml0ZSwKKwkucmVhZCAgID0gTlVMTCwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorCS5vd25lciAgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgcmVzZXJ2YXRpb25zX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdXdiX3JjICpyYyA9IHMtPnByaXZhdGU7CisJc3RydWN0IHV3Yl9yc3YgKnJzdjsKKworCW11dGV4X2xvY2soJnJjLT5yc3ZzX211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnN2LCAmcmMtPnJlc2VydmF0aW9ucywgcmNfbm9kZSkgeworCQlzdHJ1Y3QgdXdiX2Rldl9hZGRyIGRldmFkZHI7CisJCWNoYXIgb3duZXJbVVdCX0FERFJfU1RSU0laRV0sIHRhcmdldFtVV0JfQUREUl9TVFJTSVpFXTsKKwkJYm9vbCBpc19vd25lcjsKKwkJY2hhciBidWZbNzJdOworCisJCXV3Yl9kZXZfYWRkcl9wcmludChvd25lciwgc2l6ZW9mKG93bmVyKSwgJnJzdi0+b3duZXItPmRldl9hZGRyKTsKKwkJaWYgKHJzdi0+dGFyZ2V0LnR5cGUgPT0gVVdCX1JTVl9UQVJHRVRfREVWKSB7CisJCQlkZXZhZGRyID0gcnN2LT50YXJnZXQuZGV2LT5kZXZfYWRkcjsKKwkJCWlzX293bmVyID0gJnJjLT51d2JfZGV2ID09IHJzdi0+b3duZXI7CisJCX0gZWxzZSB7CisJCQlkZXZhZGRyID0gcnN2LT50YXJnZXQuZGV2YWRkcjsKKwkJCWlzX293bmVyID0gdHJ1ZTsKKwkJfQorCQl1d2JfZGV2X2FkZHJfcHJpbnQodGFyZ2V0LCBzaXplb2YodGFyZ2V0KSwgJmRldmFkZHIpOworCisJCXNlcV9wcmludGYocywgIiVjICVzIC0+ICVzOiAlc1xuIiwKKwkJCSAgIGlzX293bmVyID8gJ08nIDogJ1QnLAorCQkJICAgb3duZXIsIHRhcmdldCwgdXdiX3Jzdl9zdGF0ZV9zdHIocnN2LT5zdGF0ZSkpOworCQlzZXFfcHJpbnRmKHMsICIgIHN0cmVhbTogJWQgIHR5cGU6ICVzXG4iLAorCQkJICAgcnN2LT5zdHJlYW0sIHV3Yl9yc3ZfdHlwZV9zdHIocnN2LT50eXBlKSk7CisJCWJpdG1hcF9zY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgcnN2LT5tYXMuYm0sIFVXQl9OVU1fTUFTKTsKKwkJc2VxX3ByaW50ZihzLCAiICAlc1xuIiwgYnVmKTsKKwl9CisKKwltdXRleF91bmxvY2soJnJjLT5yc3ZzX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlc2VydmF0aW9uc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCByZXNlcnZhdGlvbnNfcHJpbnQsIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNlcnZhdGlvbnNfZm9wcyA9IHsKKwkub3BlbiAgICA9IHJlc2VydmF0aW9uc19vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBkcnBfYXZhaWxfcHJpbnQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCXN0cnVjdCB1d2JfcmMgKnJjID0gcy0+cHJpdmF0ZTsKKwljaGFyIGJ1Zls3Ml07CisKKwliaXRtYXBfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJjLT5kcnBfYXZhaWwuZ2xvYmFsLCBVV0JfTlVNX01BUyk7CisJc2VxX3ByaW50ZihzLCAiZ2xvYmFsOiAgJXNcbiIsIGJ1Zik7CisJYml0bWFwX3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCByYy0+ZHJwX2F2YWlsLmxvY2FsLCBVV0JfTlVNX01BUyk7CisJc2VxX3ByaW50ZihzLCAibG9jYWw6ICAgJXNcbiIsIGJ1Zik7CisJYml0bWFwX3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCByYy0+ZHJwX2F2YWlsLnBlbmRpbmcsIFVXQl9OVU1fTUFTKTsKKwlzZXFfcHJpbnRmKHMsICJwZW5kaW5nOiAlc1xuIiwgYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRycF9hdmFpbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkcnBfYXZhaWxfcHJpbnQsIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcnBfYXZhaWxfZm9wcyA9IHsKKwkub3BlbiAgICA9IGRycF9hdmFpbF9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHZvaWQgdXdiX2RiZ19uZXdfcnN2KHN0cnVjdCB1d2JfcnN2ICpyc3YpCit7CisJc3RydWN0IHV3Yl9yYyAqcmMgPSByc3YtPnJjOworCisJaWYgKHJjLT5kYmctPmFjY2VwdCkKKwkJdXdiX3Jzdl9hY2NlcHQocnN2LCB1d2JfZGJnX3Jzdl9jYiwgTlVMTCk7Cit9CisKKy8qKgorICogdXdiX2RiZ19hZGRfcmMgLSBhZGQgYSBkZWJ1ZyBpbnRlcmZhY2UgZm9yIGEgcmFkaW8gY29udHJvbGxlcgorICogQHJjOiB0aGUgcmFkaW8gY29udHJvbGxlcgorICovCit2b2lkIHV3Yl9kYmdfYWRkX3JjKHN0cnVjdCB1d2JfcmMgKnJjKQoreworCXJjLT5kYmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXdiX2RiZyksIEdGUF9LRVJORUwpOworCWlmIChyYy0+ZGJnID09IE5VTEwpCisJCXJldHVybjsKKworCUlOSVRfTElTVF9IRUFEKCZyYy0+ZGJnLT5yc3ZzKTsKKworCXV3Yl9wYWxfaW5pdCgmcmMtPmRiZy0+cGFsKTsKKwlyYy0+ZGJnLT5wYWwubmV3X3JzdiA9IHV3Yl9kYmdfbmV3X3JzdjsKKwl1d2JfcGFsX3JlZ2lzdGVyKHJjLCAmcmMtPmRiZy0+cGFsKTsKKwlpZiAocm9vdF9kaXIpIHsKKwkJcmMtPmRiZy0+cm9vdF9kID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKCZyYy0+dXdiX2Rldi5kZXYpLAorCQkJCQkJICAgICByb290X2Rpcik7CisJCXJjLT5kYmctPmNvbW1hbmRfZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvbW1hbmQiLCAwMjAwLAorCQkJCQkJCSByYy0+ZGJnLT5yb290X2QsIHJjLAorCQkJCQkJCSAmY29tbWFuZF9mb3BzKTsKKwkJcmMtPmRiZy0+cmVzZXJ2YXRpb25zX2YgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZXNlcnZhdGlvbnMiLCAwNDQ0LAorCQkJCQkJCSAgICAgIHJjLT5kYmctPnJvb3RfZCwgcmMsCisJCQkJCQkJICAgICAgJnJlc2VydmF0aW9uc19mb3BzKTsKKwkJcmMtPmRiZy0+YWNjZXB0X2YgPSBkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJhY2NlcHQiLCAwNjQ0LAorCQkJCQkJCXJjLT5kYmctPnJvb3RfZCwKKwkJCQkJCQkmcmMtPmRiZy0+YWNjZXB0KTsKKwkJcmMtPmRiZy0+ZHJwX2F2YWlsX2YgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkcnBfYXZhaWwiLCAwNDQ0LAorCQkJCQkJCSAgIHJjLT5kYmctPnJvb3RfZCwgcmMsCisJCQkJCQkJICAgJmRycF9hdmFpbF9mb3BzKTsKKwl9Cit9CisKKy8qKgorICogdXdiX2RiZ19hZGRfcmMgLSByZW1vdmUgYSByYWRpbyBjb250cm9sbGVyJ3MgZGVidWcgaW50ZXJmYWNlCisgKiBAcmM6IHRoZSByYWRpbyBjb250cm9sbGVyCisgKi8KK3ZvaWQgdXdiX2RiZ19kZWxfcmMoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3RydWN0IHV3Yl9yc3YgKnJzdiwgKnQ7CisKKwlpZiAocmMtPmRiZyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnN2LCB0LCAmcmMtPmRiZy0+cnN2cywgcGFsX25vZGUpIHsKKwkJdXdiX3Jzdl9kZXN0cm95KHJzdik7CisJfQorCisJdXdiX3BhbF91bnJlZ2lzdGVyKHJjLCAmcmMtPmRiZy0+cGFsKTsKKworCWlmIChyb290X2RpcikgeworCQlkZWJ1Z2ZzX3JlbW92ZShyYy0+ZGJnLT5kcnBfYXZhaWxfZik7CisJCWRlYnVnZnNfcmVtb3ZlKHJjLT5kYmctPmFjY2VwdF9mKTsKKwkJZGVidWdmc19yZW1vdmUocmMtPmRiZy0+cmVzZXJ2YXRpb25zX2YpOworCQlkZWJ1Z2ZzX3JlbW92ZShyYy0+ZGJnLT5jb21tYW5kX2YpOworCQlkZWJ1Z2ZzX3JlbW92ZShyYy0+ZGJnLT5yb290X2QpOworCX0KK30KKworLyoqCisgKiB1d2JfZGJnX2V4aXQgLSBpbml0aWFsaXplIHRoZSBkZWJ1ZyBpbnRlcmZhY2Ugc3ViLW1vZHVsZQorICovCit2b2lkIHV3Yl9kYmdfaW5pdCh2b2lkKQoreworCXJvb3RfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ1d2IiLCBOVUxMKTsKK30KKworLyoqCisgKiB1d2JfZGJnX2V4aXQgLSBjbGVhbi11cCB0aGUgZGVidWcgaW50ZXJmYWNlIHN1Yi1tb2R1bGUKKyAqLwordm9pZCB1d2JfZGJnX2V4aXQodm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShyb290X2Rpcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91d2ItaW50ZXJuYWwuaCBiL2RyaXZlcnMvdXdiL3V3Yi1pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZDMwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi91d2ItaW50ZXJuYWwuaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogVVdCIGludGVybmFsIEFQSQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBUaGlzIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIGludGVybmFsIEFQSSBmb3IgVVdCLiBUaGlzIGlzIHN0dWZmIHVzZWQKKyAqIGFjcm9zcyB0aGUgc3RhY2sgdGhhdCBvZiBjb3Vyc2UsIGlzIG9mIG5vIGludGVyZXN0IHRvIHRoZSByZXN0LgorICoKKyAqIFNvbWUgcGFydHMgbWlnaHQgZW5kIHVwIGdvaW5nIHB1YmxpYyAobGlrZSB1d2JfcmNfKigpKS4uLgorICovCisKKyNpZm5kZWYgX19VV0JfSU5URVJOQUxfSF9fCisjZGVmaW5lIF9fVVdCX0lOVEVSTkFMX0hfXworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKK3N0cnVjdCB1d2JfYmVjYV9lOworCisvKiBHZW5lcmFsIGRldmljZSBBUEkgKi8KK2V4dGVybiB2b2lkIHV3Yl9kZXZfaW5pdChzdHJ1Y3QgdXdiX2RldiAqdXdiX2Rldik7CitleHRlcm4gaW50IF9fdXdiX2Rldl9vZmZhaXIoc3RydWN0IHV3Yl9kZXYgKiwgc3RydWN0IHV3Yl9yYyAqKTsKK2V4dGVybiBpbnQgdXdiX2Rldl9hZGQoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYsCisJCSAgICAgICBzdHJ1Y3QgdXdiX3JjICpwYXJlbnRfcmMpOworZXh0ZXJuIHZvaWQgdXdiX2Rldl9ybShzdHJ1Y3QgdXdiX2RldiAqdXdiX2Rldik7CitleHRlcm4gdm9pZCB1d2JkX2Rldl9vbmFpcihzdHJ1Y3QgdXdiX3JjICosIHN0cnVjdCB1d2JfYmVjYV9lICopOworZXh0ZXJuIHZvaWQgdXdiZF9kZXZfb2ZmYWlyKHN0cnVjdCB1d2JfYmVjYV9lICopOwordm9pZCB1d2Jfbm90aWZ5KHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiwgZW51bSB1d2Jfbm90aWZzIGV2ZW50KTsKKworLyogR2VuZXJhbCBVV0IgUmFkaW8gQ29udHJvbGxlciBJbnRlcm5hbCBBUEkgKi8KK2V4dGVybiBzdHJ1Y3QgdXdiX3JjICpfX3V3Yl9yY190cnlfZ2V0KHN0cnVjdCB1d2JfcmMgKik7CitzdGF0aWMgaW5saW5lIHN0cnVjdCB1d2JfcmMgKl9fdXdiX3JjX2dldChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwl1d2JfZGV2X2dldCgmcmMtPnV3Yl9kZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXdiX3JjX3B1dChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwl1d2JfZGV2X3B1dCgmcmMtPnV3Yl9kZXYpOworfQorCitleHRlcm4gaW50IHV3Yl9yY19yZXNldChzdHJ1Y3QgdXdiX3JjICpyYyk7CitleHRlcm4gaW50IHV3Yl9yY19iZWFjb24oc3RydWN0IHV3Yl9yYyAqcmMsCisJCQkgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGJwc3Rfb2Zmc2V0KTsKK2V4dGVybiBpbnQgdXdiX3JjX3NjYW4oc3RydWN0IHV3Yl9yYyAqcmMsCisJCSAgICAgICB1bnNpZ25lZCBjaGFubmVsLCBlbnVtIHV3Yl9zY2FuX3R5cGUgdHlwZSwKKwkJICAgICAgIHVuc2lnbmVkIGJwc3Rfb2Zmc2V0KTsKK2V4dGVybiBpbnQgdXdiX3JjX3NlbmRfYWxsX2RycF9pZShzdHJ1Y3QgdXdiX3JjICpyYyk7CitleHRlcm4gc3NpemVfdCB1d2JfcmNfcHJpbnRfSUVzKHN0cnVjdCB1d2JfcmMgKnJjLCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gdm9pZCB1d2JfcmNfaWVfaW5pdChzdHJ1Y3QgdXdiX3JjICopOworZXh0ZXJuIHZvaWQgdXdiX3JjX2llX2luaXQoc3RydWN0IHV3Yl9yYyAqKTsKK2V4dGVybiBzc2l6ZV90IHV3Yl9yY19pZV9zZXR1cChzdHJ1Y3QgdXdiX3JjICopOworZXh0ZXJuIHZvaWQgdXdiX3JjX2llX3JlbGVhc2Uoc3RydWN0IHV3Yl9yYyAqKTsKK2V4dGVybiBpbnQgdXdiX3JjX2llX2FkZChzdHJ1Y3QgdXdiX3JjICosCisJCQkgY29uc3Qgc3RydWN0IHV3Yl9pZV9oZHIgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgdXdiX3JjX2llX3JtKHN0cnVjdCB1d2JfcmMgKiwgZW51bSB1d2JfaWUpOworCitleHRlcm4gY29uc3QgY2hhciAqdXdiX3JjX3N0cmVycm9yKHVuc2lnbmVkIGNvZGUpOworCisvKgorICogVGltZSB0byB3YWl0IGZvciBhIHJlc3BvbnNlIHRvIGFuIFJDIGNvbW1hbmQuCisgKgorICogU29tZSBjb21tYW5kcyBjYW4gdGFrZSBhIGxvbmcgdGltZSB0byByZXNwb25zZS4gZS5nLiwgU1RBUlRfQkVBQ09OCisgKiBtYXkgc2NhbiBmb3Igc2V2ZXJhbCBzdXBlcmZyYW1lcyBiZWZvcmUgam9pbmluZyBhbiBleGlzdGluZyBiZWFjb24KKyAqIGdyb3VwIGFuZCB0aGlzIGNhbiB0YWtlIGFyb3VuZCA2MDAgbXMuCisgKi8KKyNkZWZpbmUgVVdCX1JDX0NNRF9USU1FT1VUX01TIDEwMDAgLyogbXMgKi8KKworLyoKKyAqIE5vdGlmaWNhdGlvbi9FdmVudCBIYW5kbGVycworICovCisKK3N0cnVjdCB1d2JfcmNfbmVoOworCit2b2lkIHV3Yl9yY19uZWhfY3JlYXRlKHN0cnVjdCB1d2JfcmMgKnJjKTsKK3ZvaWQgdXdiX3JjX25laF9kZXN0cm95KHN0cnVjdCB1d2JfcmMgKnJjKTsKKworc3RydWN0IHV3Yl9yY19uZWggKnV3Yl9yY19uZWhfYWRkKHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX3JjY2IgKmNtZCwKKwkJCQkgIHU4IGV4cGVjdGVkX3R5cGUsIHUxNiBleHBlY3RlZF9ldmVudCwKKwkJCQkgIHV3Yl9yY19jbWRfY2JfZiBjYiwgdm9pZCAqYXJnKTsKK3ZvaWQgdXdiX3JjX25laF9ybShzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yY19uZWggKm5laCk7Cit2b2lkIHV3Yl9yY19uZWhfYXJtKHN0cnVjdCB1d2JfcmMgKnJjLCBzdHJ1Y3QgdXdiX3JjX25laCAqbmVoKTsKK3ZvaWQgdXdiX3JjX25laF9wdXQoc3RydWN0IHV3Yl9yY19uZWggKm5laCk7CisKKy8qIEV2ZW50IHNpemUgdGFibGVzICovCitleHRlcm4gaW50IHV3Yl9lc3RfY3JlYXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgdXdiX2VzdF9kZXN0cm95KHZvaWQpOworCisKKy8qCisgKiBVV0IgRXZlbnRzICYgbWFuYWdlbWVudCBkYWVtb24KKyAqLworCisvKioKKyAqIGVudW0gdXdiX2V2ZW50X3R5cGUgLSB0eXBlcyBvZiBVV0IgbWFuYWdlbWVudCBkYWVtb24gZXZlbnRzCisgKgorICogVGhlIFVXQiBtYW5hZ2VtZW50IGRhZW1vbiAodXdiZCkgY2FuIHJlY2VpdmUgdHdvIHR5cGVzIG9mIGV2ZW50czoKKyAqICAgVVdCX0VWVF9UWVBFX05PVElGIC0gbm90aWZpY2F0aW9uIGZyb20gdGhlIHJhZGlvIGNvbnRyb2xsZXIuCisgKiAgIFVXQl9FVlRfVFlQRV9NU0cgICAtIGEgc2ltcGxlIG1lc3NhZ2UuCisgKi8KK2VudW0gdXdiX2V2ZW50X3R5cGUgeworCVVXQl9FVlRfVFlQRV9OT1RJRiwKKwlVV0JfRVZUX1RZUEVfTVNHLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgdXdiX2V2ZW50X25vdGlmIC0gYW4gZXZlbnQgZm9yIGEgcmFkaW8gY29udHJvbGxlciBub3RpZmljYXRpb24KKyAqIEBzaXplOiBTaXplIG9mIHRoZSBidWZmZXIgKGllOiBHdWFyYW50ZWVkIHRvIGNvbnRhaW4gYXQgbGVhc3QKKyAqICAgICAgICBhIGZ1bGwgJ3N0cnVjdCB1d2JfcmNlYicpCisgKiBAcmNlYjogUG9pbnRlciB0byBhIGttYWxsb2NlZCgpIGV2ZW50IHBheWxvYWQKKyAqLworc3RydWN0IHV3Yl9ldmVudF9ub3RpZiB7CisJc2l6ZV90IHNpemU7CisJc3RydWN0IHV3Yl9yY2ViICpyY2ViOworfTsKKworLyoqCisgKiBlbnVtIHV3Yl9ldmVudF9tZXNzYWdlIC0gYW4gZXZlbnQgZm9yIGEgbWVzc2FnZSBmb3IgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcKKyAqCisgKiBVV0JfRVZUX01TR19SRVNFVCAtIHJlc2V0IHRoZSByYWRpbyBjb250cm9sbGVyIGFuZCBhbGwgUEFMIGhhcmR3YXJlLgorICovCitlbnVtIHV3Yl9ldmVudF9tZXNzYWdlIHsKKwlVV0JfRVZUX01TR19SRVNFVCwKK307CisKKy8qKgorICogVVdCIEV2ZW50CisgKiBAcmM6ICAgICAgICAgUmFkaW8gY29udHJvbGxlciB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50IChyZWZlcmVuY2VkKQorICogQHRzX2ppZmZpZXM6IFRpbWVzdGFtcCwgd2hlbiB3YXMgaXQgcmVjZWl2ZWQKKyAqIEB0eXBlOiAgICAgICBUaGlzIGV2ZW50J3MgdHlwZS4KKyAqLworc3RydWN0IHV3Yl9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJc3RydWN0IHV3Yl9yYyAqcmM7CisJdW5zaWduZWQgbG9uZyB0c19qaWZmaWVzOworCWVudW0gdXdiX2V2ZW50X3R5cGUgdHlwZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB1d2JfZXZlbnRfbm90aWYgbm90aWY7CisJCWVudW0gdXdiX2V2ZW50X21lc3NhZ2UgbWVzc2FnZTsKKwl9OworfTsKKworZXh0ZXJuIHZvaWQgdXdiZF9zdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIHV3YmRfc3RvcCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgdXdiX2V2ZW50ICp1d2JfZXZlbnRfYWxsb2Moc2l6ZV90LCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gdm9pZCB1d2JkX2V2ZW50X3F1ZXVlKHN0cnVjdCB1d2JfZXZlbnQgKik7Cit2b2lkIHV3YmRfZmx1c2goc3RydWN0IHV3Yl9yYyAqcmMpOworCisvKiBVV0IgZXZlbnQgaGFuZGxlcnMgKi8KK2V4dGVybiBpbnQgdXdiZF9ldnRfaGFuZGxlX3JjX2JlYWNvbihzdHJ1Y3QgdXdiX2V2ZW50ICopOworZXh0ZXJuIGludCB1d2JkX2V2dF9oYW5kbGVfcmNfYmVhY29uX3NpemUoc3RydWN0IHV3Yl9ldmVudCAqKTsKK2V4dGVybiBpbnQgdXdiZF9ldnRfaGFuZGxlX3JjX2Jwb2llX2NoYW5nZShzdHJ1Y3QgdXdiX2V2ZW50ICopOworZXh0ZXJuIGludCB1d2JkX2V2dF9oYW5kbGVfcmNfYnBfc2xvdF9jaGFuZ2Uoc3RydWN0IHV3Yl9ldmVudCAqKTsKK2V4dGVybiBpbnQgdXdiZF9ldnRfaGFuZGxlX3JjX2RycChzdHJ1Y3QgdXdiX2V2ZW50ICopOworZXh0ZXJuIGludCB1d2JkX2V2dF9oYW5kbGVfcmNfZHJwX2F2YWlsKHN0cnVjdCB1d2JfZXZlbnQgKik7CisKK2ludCB1d2JkX21zZ19oYW5kbGVfcmVzZXQoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KTsKKworCisvKgorICogQWRkcmVzcyBtYW5hZ2VtZW50CisgKi8KK2ludCB1d2JfcmNfZGV2X2FkZHJfYXNzaWduKHN0cnVjdCB1d2JfcmMgKnJjKTsKK2ludCB1d2JkX2V2dF9oYW5kbGVfcmNfZGV2X2FkZHJfY29uZmxpY3Qoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KTsKKworLyoKKyAqIFVXQiBCZWFjb24gQ2FjaGUKKyAqCisgKiBFYWNoIGJlYWNvbiB3ZSByZWNlaXZlZCBpcyBrZXB0IGluIGEgY2FjaGUtLXdoZW4gd2UgcmVjZWl2ZSB0aGF0CisgKiBiZWFjb24gY29uc2lzdGVudGx5LCB0aGF0IG1lYW5zIHRoZXJlIGlzIGEgbmV3IGRldmljZSB0aGF0IHdlIGhhdmUKKyAqIHRvIGFkZCB0byB0aGUgc3lzdGVtLgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGJlYWNvbl90aW1lb3V0X21zOworCisvKiogQmVhY29uIGNhY2hlIGxpc3QgKi8KK3N0cnVjdCB1d2JfYmVjYSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXNpemVfdCBlbnRyaWVzOworCXN0cnVjdCBtdXRleCBtdXRleDsKK307CisKK2V4dGVybiBzdHJ1Y3QgdXdiX2JlY2EgdXdiX2JlY2E7CisKKy8qKgorICogQmVhY29uIGNhY2hlIGVudHJ5CisgKgorICogQGppZmZpZXNfcmVmcmVzaDogbGFzdCB0aW1lIGEgYmVhY29uIHdhcyAgcmVjZWl2ZWQgdGhhdCByZWZyZXNoZWQKKyAqICAgICAgICAgICAgICAgICAgIHRoaXMgY2FjaGUgZW50cnkuCisgKiBAdXdiX2RldjogZGV2aWNlIGNvbm5lY3RlZCB0byB0aGlzIGJlYWNvbi4gVGhpcyBwb2ludGVyIGlzIG5vdAorICogICAgICAgICAgIHNhZmUsIHlvdSBuZWVkIHRvIGdldCBpdCB3aXRoIHV3Yl9kZXZfdHJ5X2dldCgpCisgKgorICogQGhpdHM6IGhvdyBtYW55IHRpbWUgd2UgaGF2ZSBzZWVuIHRoaXMgYmVhY29uIHNpbmNlIGxhc3QgdGltZSB3ZQorICogICAgICAgIGNsZWFyZWQgaXQKKyAqLworc3RydWN0IHV3Yl9iZWNhX2UgeworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3Qga3JlZiByZWZjbnQ7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCB1d2JfbWFjX2FkZHIgKm1hY19hZGRyOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgZGV2X2FkZHI7CisJdTggaGl0czsKKwl1bnNpZ25lZCBsb25nIHRzX2ppZmZpZXM7CisJc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXY7CisJc3RydWN0IHV3Yl9yY19ldnRfYmVhY29uICpiZTsKKwlzdHJ1Y3Qgc3RhdHMgbHFlX3N0YXRzLCByc3NpX3N0YXRzOwkvKiByYWRpbyBzdGF0aXN0aWNzICovCit9Oworc3RydWN0IHV3Yl9iZWFjb25fZnJhbWU7CitleHRlcm4gc3NpemVfdCB1d2JfYmNlX3ByaW50X0lFcyhzdHJ1Y3QgdXdiX2RldiAqLCBzdHJ1Y3QgdXdiX2JlY2FfZSAqLAorCQkJCSBjaGFyICosIHNpemVfdCk7CitleHRlcm4gc3RydWN0IHV3Yl9iZWNhX2UgKl9fdXdiX2JlY2FfYWRkKHN0cnVjdCB1d2JfcmNfZXZ0X2JlYWNvbiAqLAorCQkJCQkgc3RydWN0IHV3Yl9iZWFjb25fZnJhbWUgKiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gdm9pZCB1d2JfYmNlX2tmcmVlKHN0cnVjdCBrcmVmICpfYmNlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCB1d2JfYmNlX2dldChzdHJ1Y3QgdXdiX2JlY2FfZSAqYmNlKQoreworCWtyZWZfZ2V0KCZiY2UtPnJlZmNudCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2JjZV9wdXQoc3RydWN0IHV3Yl9iZWNhX2UgKmJjZSkKK3sKKwlrcmVmX3B1dCgmYmNlLT5yZWZjbnQsIHV3Yl9iY2Vfa2ZyZWUpOworfQorZXh0ZXJuIHZvaWQgdXdiX2JlY2FfcHVyZ2Uodm9pZCk7CitleHRlcm4gdm9pZCB1d2JfYmVjYV9yZWxlYXNlKHZvaWQpOworCitzdHJ1Y3QgdXdiX2RldiAqdXdiX2Rldl9nZXRfYnlfZGV2YWRkcihzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHV3Yl9kZXZfYWRkciAqZGV2YWRkcik7CitzdHJ1Y3QgdXdiX2RldiAqdXdiX2Rldl9nZXRfYnlfbWFjYWRkcihzdHJ1Y3QgdXdiX3JjICpyYywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHV3Yl9tYWNfYWRkciAqbWFjYWRkcik7CisKKy8qIC0tIFVXQiBTeXNmcyByZXByZXNlbnRhdGlvbiAqLworZXh0ZXJuIHN0cnVjdCBjbGFzcyB1d2JfcmNfY2xhc3M7CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfbWFjX2FkZHJlc3M7CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfYmVhY29uOworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX3NjYW47CisKKy8qIC0tIERSUCBCYW5kd2lkdGggYWxsb2NhdG9yOiBiYW5kd2lkdGggYWxsb2NhdGlvbnMsIHJlc2VydmF0aW9ucywgRFJQICovCit2b2lkIHV3Yl9yc3ZfaW5pdChzdHJ1Y3QgdXdiX3JjICpyYyk7CitpbnQgdXdiX3Jzdl9zZXR1cChzdHJ1Y3QgdXdiX3JjICpyYyk7Cit2b2lkIHV3Yl9yc3ZfY2xlYW51cChzdHJ1Y3QgdXdiX3JjICpyYyk7CisKK3ZvaWQgdXdiX3Jzdl9zZXRfc3RhdGUoc3RydWN0IHV3Yl9yc3YgKnJzdiwgZW51bSB1d2JfcnN2X3N0YXRlIG5ld19zdGF0ZSk7Cit2b2lkIHV3Yl9yc3ZfcmVtb3ZlKHN0cnVjdCB1d2JfcnN2ICpyc3YpOworc3RydWN0IHV3Yl9yc3YgKnV3Yl9yc3ZfZmluZChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9kZXYgKnNyYywKKwkJCSAgICAgc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZSk7Cit2b2lkIHV3Yl9yc3Zfc2NoZWRfdXBkYXRlKHN0cnVjdCB1d2JfcmMgKnJjKTsKKwordm9pZCB1d2JfZHJwX2hhbmRsZV90aW1lb3V0KHN0cnVjdCB1d2JfcnN2ICpyc3YpOworaW50IHV3Yl9kcnBfaWVfdXBkYXRlKHN0cnVjdCB1d2JfcnN2ICpyc3YpOwordm9pZCB1d2JfZHJwX2llX3RvX2JtKHN0cnVjdCB1d2JfbWFzX2JtICpibSwgY29uc3Qgc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZSk7CisKK3ZvaWQgdXdiX2RycF9hdmFpbF9pbml0KHN0cnVjdCB1d2JfcmMgKnJjKTsKK2ludCAgdXdiX2RycF9hdmFpbF9yZXNlcnZlX3BlbmRpbmcoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfbWFzX2JtICptYXMpOwordm9pZCB1d2JfZHJwX2F2YWlsX3Jlc2VydmUoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfbWFzX2JtICptYXMpOwordm9pZCB1d2JfZHJwX2F2YWlsX3JlbGVhc2Uoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfbWFzX2JtICptYXMpOwordm9pZCB1d2JfZHJwX2F2YWlsX2llX3VwZGF0ZShzdHJ1Y3QgdXdiX3JjICpyYyk7CisKKy8qIC0tIFBBTCBzdXBwb3J0ICovCit2b2lkIHV3Yl9yY19wYWxfaW5pdChzdHJ1Y3QgdXdiX3JjICpyYyk7CisKKy8qIC0tIE1pc2MgKi8KKworZXh0ZXJuIHNzaXplX3QgdXdiX21hY19mcmFtZV9oZHJfcHJpbnQoY2hhciAqLCBzaXplX3QsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1d2JfbWFjX2ZyYW1lX2hkciAqKTsKKworLyogLS0gRGVidWcgaW50ZXJmYWNlICovCit2b2lkIHV3Yl9kYmdfaW5pdCh2b2lkKTsKK3ZvaWQgdXdiX2RiZ19leGl0KHZvaWQpOwordm9pZCB1d2JfZGJnX2FkZF9yYyhzdHJ1Y3QgdXdiX3JjICpyYyk7Cit2b2lkIHV3Yl9kYmdfZGVsX3JjKHN0cnVjdCB1d2JfcmMgKnJjKTsKKworLyogV29ya2Fyb3VuZHMgZm9yIHZlcnNpb24gc3BlY2lmaWMgc3R1ZmYgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHV3Yl9kZXZfbG9jayhzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldikKK3sKKwlkb3duKCZ1d2JfZGV2LT5kZXYuc2VtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHV3Yl9kZXZfdW5sb2NrKHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2KQoreworCXVwKCZ1d2JfZGV2LT5kZXYuc2VtKTsKK30KKworI2VuZGlmIC8qICNpZm5kZWYgX19VV0JfSU5URVJOQUxfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91d2JkLmMgYi9kcml2ZXJzL3V3Yi91d2JkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MDg0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3V3YmQuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogTmVpZ2hib3Job29kIE1hbmFnZW1lbnQgRGFlbW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBUaGlzIGRhZW1vbiB0YWtlcyBjYXJlIG9mIG1haW50YWluZyBpbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUKKyAqIFVXQiBuZWlnaGJvcmhvb2QgdGhhdCB0aGUgcmFkaW9zIGluIHRoaXMgbWFjaGluZSBjYW4gc2VlLiBJdCBhbHNvCisgKiBrZWVwcyBhIHRhYiBvZiB3aGljaCBkZXZpY2VzIGFyZSB2aXNpYmxlLCBtYWtlcyBzdXJlIGVhY2ggSEMgc2l0cworICogb24gYSBkaWZmZXJlbnQgY2hhbm5lbCB0byBhdm9pZCBpbnRlcmZlcmluZywgZXRjLgorICoKKyAqIERpZmZlcmVudCBkcml2ZXJzIChyYWRpbyBjb250cm9sbGVyLCBkZXZpY2UsIGFueSBBUEkgaW4gZ2VuZXJhbCkKKyAqIGNvbW11bmljYXRlIHdpdGggdGhpcyBkYWVtb24gdGhyb3VnaCBhbiBldmVudCBxdWV1ZS4gRGFlbW9uIHdha2VzCisgKiB1cCwgdGFrZXMgYSBsaXN0IG9mIGV2ZW50cyBhbmQgaGFuZGxlcyB0aGVtIG9uZSBieSBvbmU7IGhhbmRsaW5nCisgKiBmdW5jdGlvbiBpcyBleHRyYWN0ZWQgZnJvbSBhIHRhYmxlIGJhc2VkIG9uIHRoZSBldmVudCdzIHR5cGUgYW5kCisgKiBzdWJ0eXBlLiBFdmVudHMgYXJlIGZyZWVkIG9ubHkgaWYgdGhlIGhhbmRsaW5nIGZ1bmN0aW9uIHNheXMgc28uCisgKgorICogICAuIExvY2sgcHJvdGVjdGluZyB0aGUgZXZlbnQgbGlzdCBoYXMgdG8gYmUgYW4gc3BpbmxvY2sgYW5kIGxvY2tlZAorICogICAgIHdpdGggSVJRU0FWRSBiZWNhdXNlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdAorICogICAgIGNvbnRleHQgKGllOiB3aGVuIGV2ZW50cyBhcnJpdmUgYW5kIHRoZSBub3RpZmljYXRpb24gZHJvcHMKKyAqICAgICBkb3duIGZyb20gdGhlIElTUikuCisgKgorICogICAuIFVXQiByYWRpbyBjb250cm9sbGVyIGRyaXZlcnMgcXVldWUgZXZlbnRzIHRvIHRoZSBkYWVtb24gdXNpbmcKKyAqICAgICB1d2JkX2V2ZW50X3F1ZXVlKCkuIFRoZXkganVzdCBnZXQgdGhlIGV2ZW50LCBjaGV3IGl0IHRvIG1ha2UgaXQKKyAqICAgICBsb29rIGxpa2UgVVdCRCBsaWtlcyBpdCBhbmQgcGFzcyBpdCBpbiBhIGJ1ZmZlciBhbGxvY2F0ZWQgd2l0aAorICogICAgIHV3Yl9ldmVudF9hbGxvYygpLgorICoKKyAqIEVWRU5UUworICoKKyAqIEV2ZW50cyBoYXZlIGEgdHlwZSwgYSBzdWJ0eXBlLCBhIGxlbmdodCwgc29tZSBvdGhlciBzdHVmZiBhbmQgdGhlCisgKiBkYXRhIGJsb2IsIHdoaWNoIGRlcGVuZHMgb24gdGhlIGV2ZW50LiBUaGUgaGVhZGVyIGlzICdzdHJ1Y3QKKyAqIHV3Yl9ldmVudCc7IGZvciBwYXlsb2Fkcywgc2VlICdzdHJ1Y3QgdXdiZF9ldnRfKicuCisgKgorICogRVZFTlQgSEFORExFUiBUQUJMRVMKKyAqCisgKiBUbyBmaW5kIGEgaGFuZGxpbmcgZnVuY3Rpb24gZm9yIGFuIGV2ZW50LCB0aGUgdHlwZSBpcyB1c2VkIHRvIGluZGV4CisgKiBhIHN1YnR5cGUtdGFibGUgaW4gdGhlIHR5cGUtdGFibGUuIFRoZSBzdWJ0eXBlLXRhYmxlIGlzIGluZGV4ZWQKKyAqIHdpdGggdGhlIHN1YnR5cGUgdG8gZ2V0IHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGV2ZW50LiBTdGFydAorICogd2l0aCB0aGUgbWFpbiB0eXBlLXRhYmxlICd1d2JkX2V2dF90eXBlX2hhbmRsZXInLgorICoKKyAqIERFVklDRVMKKyAqCisgKiBEZXZpY2VzIGFyZSBjcmVhdGVkIHdoZW4gYSBidW5jaCBvZiBiZWFjb25zIGhhdmUgYmVlbiByZWNlaXZlZCBhbmQKKyAqIGl0IGlzIHN0YWJsaXNoZWQgdGhhdCB0aGUgZGV2aWNlIGhhcyBzdGFibGUgcmFkaW8gcHJlc2VuY2UuIENSRUFURUQKKyAqIG9ubHksIG5vdCBjb25maWd1cmVkLiBEZXZpY2VzIGFyZSBPTkxZIGNvbmZpZ3VyZWQgd2hlbiBhbgorICogQXBwbGljYXRpb24tU3BlY2lmaWMgSUUgUHJvYmUgaXMgcmVjZWlldmVkLCBpbiB3aGljaCB0aGUgZGV2aWNlCisgKiBkZWNsYXJlcyB3aGljaCBQcm90b2NvbCBJRCBpdCBncm9rcy4gVGhlbiB0aGUgZGV2aWNlIGlzIENPTkZJR1VSRUQKKyAqIChhbmQgdGhlIGRyaXZlci0+cHJvYmUoKSBzdHVmZiBvZiB0aGUgZGV2aWNlIG1vZGVsIGlzIGludm9rZWQpLgorICoKKyAqIERldmljZXMgYXJlIGNvbnNpZGVyZWQgZGlzY29ubmVjdGVkIHdoZW4gYSBjZXJ0YWluIG51bWJlciBvZgorICogYmVhY29ucyBhcmUgbm90IHJlY2VpdmVkIGluIGFuIGFtb3VudCBvZiB0aW1lLgorICoKKyAqIEhhbmRsZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQgbm9ybWFsbHkgdXdiZF9ldnRfaGFuZGxlXyooKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKworI2RlZmluZSBEX0xPQ0FMIDEKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworCisvKioKKyAqIFVXQkQgRXZlbnQgaGFuZGxlciBmdW5jdGlvbiBzaWduYXR1cmUKKyAqCisgKiBSZXR1cm4gITAgaWYgdGhlIGV2ZW50IG5lZWRzIG5vdCB0byBiZSBmcmVlZCAoaWUgdGhlIGhhbmRsZXIKKyAqIHRha2VzL3Rvb2sgY2FyZSBvZiBpdCkuIDAgbWVhbnMgdGhlIGRhZW1vbiBjb2RlIHdpbGwgZnJlZSB0aGUKKyAqIGV2ZW50LgorICoKKyAqIEBldnQtPnJjIGlzIGFscmVhZHkgcmVmZXJlbmNlZCBhbmQgZ3VhcmFudGVlZCB0byBleGlzdC4gU2VlCisgKiB1d2JfZXZ0X2hhbmRsZSgpLgorICovCit0eXBlZGVmIGludCAoKnV3YmRfZXZ0X2hhbmRsZXJfZikoc3RydWN0IHV3Yl9ldmVudCAqKTsKKworLyoqCisgKiBQcm9wZXJ0aWVzIG9mIGEgVVdCRCBldmVudAorICoKKyAqIEBoYW5kbGVyOiAgICB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGhhbmRsZSB0aGlzIGV2ZW50CisgKiBAbmFtZTogICAgICAgdGV4dCBuYW1lIG9mIGV2ZW50CisgKi8KK3N0cnVjdCB1d2JkX2V2ZW50IHsKKwl1d2JkX2V2dF9oYW5kbGVyX2YgaGFuZGxlcjsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworLyoqIFRhYmxlIG9mIGhhbmRsZXJzIGZvciBhbmQgcHJvcGVydGllcyBvZiB0aGUgVVdCRCBSYWRpbyBDb250cm9sIEV2ZW50cyAqLworc3RhdGljCitzdHJ1Y3QgdXdiZF9ldmVudCB1d2JkX2V2ZW50c1tdID0geworCVtVV0JfUkNfRVZUX0JFQUNPTl0gPSB7CisJCS5oYW5kbGVyID0gdXdiZF9ldnRfaGFuZGxlX3JjX2JlYWNvbiwKKwkJLm5hbWUgPSAiQkVBQ09OX1JFQ0VJVkVEIgorCX0sCisJW1VXQl9SQ19FVlRfQkVBQ09OX1NJWkVdID0geworCQkuaGFuZGxlciA9IHV3YmRfZXZ0X2hhbmRsZV9yY19iZWFjb25fc2l6ZSwKKwkJLm5hbWUgPSAiQkVBQ09OX1NJWkVfQ0hBTkdFIgorCX0sCisJW1VXQl9SQ19FVlRfQlBPSUVfQ0hBTkdFXSA9IHsKKwkJLmhhbmRsZXIgPSB1d2JkX2V2dF9oYW5kbGVfcmNfYnBvaWVfY2hhbmdlLAorCQkubmFtZSA9ICJCUE9JRV9DSEFOR0UiCisJfSwKKwlbVVdCX1JDX0VWVF9CUF9TTE9UX0NIQU5HRV0gPSB7CisJCS5oYW5kbGVyID0gdXdiZF9ldnRfaGFuZGxlX3JjX2JwX3Nsb3RfY2hhbmdlLAorCQkubmFtZSA9ICJCUF9TTE9UX0NIQU5HRSIKKwl9LAorCVtVV0JfUkNfRVZUX0RSUF9BVkFJTF0gPSB7CisJCS5oYW5kbGVyID0gdXdiZF9ldnRfaGFuZGxlX3JjX2RycF9hdmFpbCwKKwkJLm5hbWUgPSAiRFJQX0FWQUlMQUJJTElUWV9DSEFOR0UiCisJfSwKKwlbVVdCX1JDX0VWVF9EUlBdID0geworCQkuaGFuZGxlciA9IHV3YmRfZXZ0X2hhbmRsZV9yY19kcnAsCisJCS5uYW1lID0gIkRSUCIKKwl9LAorCVtVV0JfUkNfRVZUX0RFVl9BRERSX0NPTkZMSUNUXSA9IHsKKwkJLmhhbmRsZXIgPSB1d2JkX2V2dF9oYW5kbGVfcmNfZGV2X2FkZHJfY29uZmxpY3QsCisJCS5uYW1lID0gIkRFVl9BRERSX0NPTkZMSUNUIiwKKwl9LAorfTsKKworCisKK3N0cnVjdCB1d2JkX2V2dF90eXBlX2hhbmRsZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHV3YmRfZXZlbnQgKnV3YmRfZXZlbnRzOworCXNpemVfdCBzaXplOworfTsKKworI2RlZmluZSBVV0JEX0VWVF9UWVBFX0hBTkRMRVIobixhKSB7CQlcCisJLm5hbWUgPSAobiksCQkJCVwKKwkudXdiZF9ldmVudHMgPSAoYSksCQkJXAorCS5zaXplID0gc2l6ZW9mKGEpL3NpemVvZigoYSlbMF0pCVwKK30KKworCisvKiogVGFibGUgb2YgaGFuZGxlcnMgZm9yIGVhY2ggVVdCRCBFdmVudCB0eXBlLiAqLworc3RhdGljCitzdHJ1Y3QgdXdiZF9ldnRfdHlwZV9oYW5kbGVyIHV3YmRfZXZ0X3R5cGVfaGFuZGxlcnNbXSA9IHsKKwlbVVdCX1JDX0NFVF9HRU5FUkFMXSA9IFVXQkRfRVZUX1RZUEVfSEFORExFUigiUkMiLCB1d2JkX2V2ZW50cykKK307CisKK3N0YXRpYyBjb25zdAorc2l6ZV90IHV3YmRfZXZ0X3R5cGVfaGFuZGxlcnNfbGVuID0KKwlzaXplb2YodXdiZF9ldnRfdHlwZV9oYW5kbGVycykgLyBzaXplb2YodXdiZF9ldnRfdHlwZV9oYW5kbGVyc1swXSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXdiZF9ldmVudCB1d2JkX21lc3NhZ2VfaGFuZGxlcnNbXSA9IHsKKwlbVVdCX0VWVF9NU0dfUkVTRVRdID0geworCQkuaGFuZGxlciA9IHV3YmRfbXNnX2hhbmRsZV9yZXNldCwKKwkJLm5hbWUgPSAicmVzZXQiLAorCX0sCit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKHV3YmRfZXZlbnRfbXV0ZXgpOworCisvKioKKyAqIEhhbmRsZSBhbiBVUkMgZXZlbnQgcGFzc2VkIHRvIHRoZSBVV0IgRGFlbW9uCisgKgorICogQGV2dDogdGhlIGV2ZW50IHRvIGhhbmRsZQorICogQHJldHVybnM6IDAgaWYgdGhlIGV2ZW50IGNhbiBiZSBrZnJlZWQsICEwIG9uIHRoZSBjb250cmFyeQorICogICAgICAgICAgIChzb21lYm9keSBlbHNlIHRvb2sgb3duZXJzaGlwKSBbY29pbmNpZGVudGFsbHksIHJldHVybmluZworICogICAgICAgICAgIGEgPDAgZXJybm8gY29kZSB3aWxsIGZyZWUgaXQgOildLgorICoKKyAqIExvb2tzIHVwIHRoZSB0d28gaW5kaXJlY3Rpb24gdGFibGVzIChvbmUgZm9yIHRoZSB0eXBlLCBvbmUgZm9yIHRoZQorICogc3VidHlwZSkgdG8gZGVjaWRlIHdoaWNoIGZ1bmN0aW9uIGhhbmRsZXMgaXQgYW5kIHRoZW4gY2FsbHMgdGhlCisgKiBoYW5kbGVyLgorICoKKyAqIFRoZSBldmVudCBzdHJ1Y3R1cmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyIGhhcyB0aGUgcmFkaW8KKyAqIGNvbnRyb2xsZXIgaW4gQGV2dC0+cmMgcmVmZXJlbmNlZC4gVGhlIHJlZmVyZW5jZSB3aWxsIGJlIGRyb3BwZWQKKyAqIG9uY2UgdGhlIGhhbmRsZXIgcmV0dXJucywgc28gaWYgaXQgbmVlZHMgaXQgZm9yIGxvbmdlciAoYXN5bmMpLAorICogaXQnbGwgbmVlZCB0byB0YWtlIGFub3RoZXIgb25lLgorICovCitzdGF0aWMKK2ludCB1d2JkX2V2ZW50X2hhbmRsZV91cmMoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KQoreworCXN0cnVjdCB1d2JkX2V2dF90eXBlX2hhbmRsZXIgKnR5cGVfdGFibGU7CisJdXdiZF9ldnRfaGFuZGxlcl9mIGhhbmRsZXI7CisJdTggdHlwZSwgY29udGV4dDsKKwl1MTYgZXZlbnQ7CisKKwl0eXBlID0gZXZ0LT5ub3RpZi5yY2ViLT5iRXZlbnRUeXBlOworCWV2ZW50ID0gbGUxNl90b19jcHUoZXZ0LT5ub3RpZi5yY2ViLT53RXZlbnQpOworCWNvbnRleHQgPSBldnQtPm5vdGlmLnJjZWItPmJFdmVudENvbnRleHQ7CisKKwlpZiAodHlwZSA+IHV3YmRfZXZ0X3R5cGVfaGFuZGxlcnNfbGVuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVVdCRDogZXZlbnQgdHlwZSAldTogdW5rbm93biAodG9vIGhpZ2gpXG4iLCB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXR5cGVfdGFibGUgPSAmdXdiZF9ldnRfdHlwZV9oYW5kbGVyc1t0eXBlXTsKKwlpZiAodHlwZV90YWJsZS0+dXdiZF9ldmVudHMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVXQkQ6IGV2ZW50IHR5cGUgJXU6IHVua25vd25cbiIsIHR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGV2ZW50ID4gdHlwZV90YWJsZS0+c2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlVXQkQ6IGV2ZW50ICVzWyV1XTogdW5rbm93biAodG9vIGhpZ2gpXG4iLAorCQkgICAgICAgdHlwZV90YWJsZS0+bmFtZSwgZXZlbnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaGFuZGxlciA9IHR5cGVfdGFibGUtPnV3YmRfZXZlbnRzW2V2ZW50XS5oYW5kbGVyOworCWlmIChoYW5kbGVyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVV0JEOiBldmVudCAlc1sldV06IHVua25vd25cbiIsIHR5cGVfdGFibGUtPm5hbWUsIGV2ZW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAoKmhhbmRsZXIpKGV2dCk7Cit9CisKK3N0YXRpYyB2b2lkIHV3YmRfZXZlbnRfaGFuZGxlX21lc3NhZ2Uoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KQoreworCXN0cnVjdCB1d2JfcmMgKnJjOworCWludCByZXN1bHQ7CisKKwlyYyA9IGV2dC0+cmM7CisKKwlpZiAoZXZ0LT5tZXNzYWdlIDwgMCB8fCBldnQtPm1lc3NhZ2UgPj0gQVJSQVlfU0laRSh1d2JkX21lc3NhZ2VfaGFuZGxlcnMpKSB7CisJCWRldl9lcnIoJnJjLT51d2JfZGV2LmRldiwgIlVXQkQ6IGludmFsaWQgbWVzc2FnZSB0eXBlICVkXG4iLCBldnQtPm1lc3NhZ2UpOworCQlyZXR1cm47CisJfQorCisJLyogSWYgdGhpcyBpcyBhIHJlc2V0IGV2ZW50IHdlIG5lZWQgdG8gZHJvcCB0aGUKKwkgKiB1d2JkX2V2ZW50X211dGV4IG9yIGl0IGRlYWRsb2NrcyB3aGVuIHRoZSByZXNldCBoYW5kbGVyCisJICogYXR0ZW1wdHMgdG8gZmx1c2ggdGhlIHV3YmQgZXZlbnRzLiAqLworCWlmIChldnQtPm1lc3NhZ2UgPT0gVVdCX0VWVF9NU0dfUkVTRVQpCisJCW11dGV4X3VubG9jaygmdXdiZF9ldmVudF9tdXRleCk7CisKKwlyZXN1bHQgPSB1d2JkX21lc3NhZ2VfaGFuZGxlcnNbZXZ0LT5tZXNzYWdlXS5oYW5kbGVyKGV2dCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoJnJjLT51d2JfZGV2LmRldiwgIlVXQkQ6ICclcycgbWVzc2FnZSBmYWlsZWQ6ICVkXG4iLAorCQkJdXdiZF9tZXNzYWdlX2hhbmRsZXJzW2V2dC0+bWVzc2FnZV0ubmFtZSwgcmVzdWx0KTsKKworCWlmIChldnQtPm1lc3NhZ2UgPT0gVVdCX0VWVF9NU0dfUkVTRVQpCisJCW11dGV4X2xvY2soJnV3YmRfZXZlbnRfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB1d2JkX2V2ZW50X2hhbmRsZShzdHJ1Y3QgdXdiX2V2ZW50ICpldnQpCit7CisJc3RydWN0IHV3Yl9yYyAqcmM7CisJaW50IHNob3VsZF9rZWVwOworCisJcmMgPSBldnQtPnJjOworCisJaWYgKHJjLT5yZWFkeSkgeworCQlzd2l0Y2ggKGV2dC0+dHlwZSkgeworCQljYXNlIFVXQl9FVlRfVFlQRV9OT1RJRjoKKwkJCXNob3VsZF9rZWVwID0gdXdiZF9ldmVudF9oYW5kbGVfdXJjKGV2dCk7CisJCQlpZiAoc2hvdWxkX2tlZXAgPD0gMCkKKwkJCQlrZnJlZShldnQtPm5vdGlmLnJjZWIpOworCQkJYnJlYWs7CisJCWNhc2UgVVdCX0VWVF9UWVBFX01TRzoKKwkJCXV3YmRfZXZlbnRfaGFuZGxlX21lc3NhZ2UoZXZ0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmcmMtPnV3Yl9kZXYuZGV2LCAiVVdCRDogaW52YWxpZCBldmVudCB0eXBlICVkXG4iLCBldnQtPnR5cGUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlfX3V3Yl9yY19wdXQocmMpOwkvKiBmb3IgdGhlIF9fdXdiX3JjX2dldCgpIGluIHV3Yl9yY19ub3RpZl9jYigpICovCit9CisvKiBUaGUgVVdCIERhZW1vbiAqLworCisKKy8qKiBEYWVtb24ncyBQSUQ6IHVzZWQgdG8gZGVjaWRlIGlmIHdlIGNhbiBxdWV1ZSBvciBub3QgKi8KK3N0YXRpYyBpbnQgdXdiZF9waWQ7CisvKiogRGFlbW9uJ3MgdGFzayBzdHJ1Y3QgZm9yIG1hbmFnaW5nIHRoZSBrdGhyZWFkICovCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICp1d2JkX3Rhc2s7CisvKiogRGFlbW9uJ3Mgd2FpdHF1ZXVlIGZvciB3YWl0aW5nIGZvciBuZXcgZXZlbnRzICovCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodXdiZF93cSk7CisvKiogRGFlbW9uJ3MgbGlzdCBvZiBldmVudHM7IHdlIHF1ZXVlL2RlcXVldWUgaGVyZSAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdXdiZF9ldmVudF9saXN0ID0gTElTVF9IRUFEX0lOSVQodXdiZF9ldmVudF9saXN0KTsKKy8qKiBEYWVtb24ncyBsaXN0IGxvY2sgdG8gcHJvdGVjdCBjb25jdXJlbnQgYWNjZXNzICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHV3YmRfZXZlbnRfbGlzdF9sb2NrKTsKKworCisvKioKKyAqIFVXQiBEYWVtb24KKyAqCisgKiBMaXN0ZW5zIHRvIGFsbCBVV0Igbm90aWZpY2F0aW9ucyBhbmQgdGFrZXMgY2FyZSB0byB0cmFjayB0aGUgc3RhdGUKKyAqIG9mIHRoZSBVV0IgbmVpZ2hib29yaG9vZCBmb3IgdGhlIGtlcm5lbC4gV2hlbiB3ZSBkbyBhIHJ1biwgd2UKKyAqIHNwaW5sb2NrLCBtb3ZlIHRoZSBsaXN0IHRvIGEgcHJpdmF0ZSBjb3B5IGFuZCByZWxlYXNlIHRoZQorICogbG9jay4gSG9sZCBpdCBhcyBsaXR0bGUgYXMgcG9zc2libGUuIE5vdCBhIGNvbmZsaWN0OiBpdCBpcworICogZ3VhcmFudGVlZCB3ZSBvd24gdGhlIGV2ZW50cyBpbiB0aGUgcHJpdmF0ZSBsaXN0LgorICoKKyAqIEZJWE1FOiBzaG91bGQgY2hhbmdlIHNvIHdlIGRvbid0IGhhdmUgYSAxSFogdGltZXIgYWxsIHRoZSB0aW1lLCBidXQKKyAqICAgICAgICBvbmx5IGlmIHRoZXJlIGFyZSBkZXZpY2VzLgorICovCitzdGF0aWMgaW50IHV3YmQodm9pZCAqdW51c2VkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0ID0gTElTVF9IRUFEX0lOSVQobGlzdCk7CisJc3RydWN0IHV3Yl9ldmVudCAqZXZ0LCAqbnh0OworCWludCBzaG91bGRfc3RvcCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQl1d2JkX3dxLAorCQkJIWxpc3RfZW1wdHkoJnV3YmRfZXZlbnRfbGlzdCkKKwkJCSAgfHwgKHNob3VsZF9zdG9wID0ga3RocmVhZF9zaG91bGRfc3RvcCgpKSwKKwkJCUhaKTsKKwkJaWYgKHNob3VsZF9zdG9wKQorCQkJYnJlYWs7CisJCXRyeV90b19mcmVlemUoKTsKKworCQltdXRleF9sb2NrKCZ1d2JkX2V2ZW50X211dGV4KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnV3YmRfZXZlbnRfbGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3Rfc3BsaWNlX2luaXQoJnV3YmRfZXZlbnRfbGlzdCwgJmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1d2JkX2V2ZW50X2xpc3RfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCBueHQsICZsaXN0LCBsaXN0X25vZGUpIHsKKwkJCWxpc3RfZGVsKCZldnQtPmxpc3Rfbm9kZSk7CisJCQl1d2JkX2V2ZW50X2hhbmRsZShldnQpOworCQkJa2ZyZWUoZXZ0KTsKKwkJfQorCQltdXRleF91bmxvY2soJnV3YmRfZXZlbnRfbXV0ZXgpOworCisJCXV3Yl9iZWNhX3B1cmdlKCk7CS8qIFB1cmdlIGRldmljZXMgdGhhdCBsZWZ0ICovCisJfQorCXJldHVybiAwOworfQorCisKKy8qKiBTdGFydCB0aGUgVVdCIGRhZW1vbiAqLwordm9pZCB1d2JkX3N0YXJ0KHZvaWQpCit7CisJdXdiZF90YXNrID0ga3RocmVhZF9ydW4odXdiZCwgTlVMTCwgInV3YmQiKTsKKwlpZiAodXdiZF90YXNrID09IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiVVdCOiBDYW5ub3Qgc3RhcnQgbWFuYWdlbWVudCBkYWVtb247ICIKKwkJICAgICAgICJVV0Igd29uJ3Qgd29ya1xuIik7CisJZWxzZQorCQl1d2JkX3BpZCA9IHV3YmRfdGFzay0+cGlkOworfQorCisvKiBTdG9wIHRoZSBVV0IgZGFlbW9uIGFuZCBmcmVlIGFueSB1bnByb2Nlc3NlZCBldmVudHMgKi8KK3ZvaWQgdXdiZF9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXdiX2V2ZW50ICpldnQsICpueHQ7CisJa3RocmVhZF9zdG9wKHV3YmRfdGFzayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnV3YmRfZXZlbnRfbGlzdF9sb2NrLCBmbGFncyk7CisJdXdiZF9waWQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIG54dCwgJnV3YmRfZXZlbnRfbGlzdCwgbGlzdF9ub2RlKSB7CisJCWlmIChldnQtPnR5cGUgPT0gVVdCX0VWVF9UWVBFX05PVElGKQorCQkJa2ZyZWUoZXZ0LT5ub3RpZi5yY2ViKTsKKwkJa2ZyZWUoZXZ0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXdiZF9ldmVudF9saXN0X2xvY2ssIGZsYWdzKTsKKwl1d2JfYmVjYV9yZWxlYXNlKCk7Cit9CisKKy8qCisgKiBRdWV1ZSBhbiBldmVudCBmb3IgdGhlIG1hbmFnZW1lbnQgZGFlbW9uCisgKgorICogV2hlbiBzb21lIGxvd2VyIGxheWVyIHJlY2VpdmVzIGFuIGV2ZW50LCBpdCB1c2VzIHRoaXMgZnVuY3Rpb24gdG8KKyAqIHB1c2ggaXQgZm9yd2FyZCB0byB0aGUgVVdCIGRhZW1vbi4KKyAqCisgKiBPbmNlIHlvdSBwYXNzIHRoZSBldmVudCwgeW91IGRvbid0IG93biBpdCBhbnkgbW9yZSwgYnV0IHRoZSBkYWVtb24KKyAqIGRvZXMuIEl0IHdpbGwgdXdiX2V2ZW50X2ZyZWUoKSBpdCB3aGVuIGRvbmUsIHNvIG1ha2Ugc3VyZSB5b3UKKyAqIHV3Yl9ldmVudF9hbGxvYygpZWQgaXQgb3IgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbi4KKyAqCisgKiBJZiB0aGUgZGFlbW9uIGlzIG5vdCBydW5uaW5nLCB3ZSBqdXN0IGZyZWUgdGhlIGV2ZW50LgorICovCit2b2lkIHV3YmRfZXZlbnRfcXVldWUoc3RydWN0IHV3Yl9ldmVudCAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnV3YmRfZXZlbnRfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKHV3YmRfcGlkICE9IDApIHsKKwkJbGlzdF9hZGQoJmV2dC0+bGlzdF9ub2RlLCAmdXdiZF9ldmVudF9saXN0KTsKKwkJd2FrZV91cF9hbGwoJnV3YmRfd3EpOworCX0gZWxzZSB7CisJCV9fdXdiX3JjX3B1dChldnQtPnJjKTsKKwkJaWYgKGV2dC0+dHlwZSA9PSBVV0JfRVZUX1RZUEVfTk9USUYpCisJCQlrZnJlZShldnQtPm5vdGlmLnJjZWIpOworCQlrZnJlZShldnQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1d2JkX2V2ZW50X2xpc3RfbG9jaywgZmxhZ3MpOworCXJldHVybjsKK30KKwordm9pZCB1d2JkX2ZsdXNoKHN0cnVjdCB1d2JfcmMgKnJjKQoreworCXN0cnVjdCB1d2JfZXZlbnQgKmV2dCwgKm54dDsKKworCW11dGV4X2xvY2soJnV3YmRfZXZlbnRfbXV0ZXgpOworCisJc3Bpbl9sb2NrX2lycSgmdXdiZF9ldmVudF9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIG54dCwgJnV3YmRfZXZlbnRfbGlzdCwgbGlzdF9ub2RlKSB7CisJCWlmIChldnQtPnJjID09IHJjKSB7CisJCQlfX3V3Yl9yY19wdXQocmMpOworCQkJbGlzdF9kZWwoJmV2dC0+bGlzdF9ub2RlKTsKKwkJCWlmIChldnQtPnR5cGUgPT0gVVdCX0VWVF9UWVBFX05PVElGKQorCQkJCWtmcmVlKGV2dC0+bm90aWYucmNlYik7CisJCQlrZnJlZShldnQpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmdXdiZF9ldmVudF9saXN0X2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZ1d2JkX2V2ZW50X211dGV4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3doYy1yYy5jIGIvZHJpdmVycy91d2Ivd2hjLXJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxMWRlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3doYy1yYy5jCkBAIC0wLDAgKzEsNTIwIEBACisvKgorICogV2lyZWxlc3MgSG9zdCBDb250cm9sbGVyOiBSYWRpbyBDb250cm9sIEludGVyZmFjZSAoV0hDSSB2MC45NVsyLjNdKQorICogUmFkaW8gQ29udHJvbCBjb21tYW5kL2V2ZW50IHRyYW5zcG9ydCB0byB0aGUgVVdCIHN0YWNrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBJbml0aWFsaXplIGFuZCBob29rIHVwIHRoZSBSYWRpbyBDb250cm9sIGludGVyZmFjZS4KKyAqCisgKiBGb3IgZWFjaCBkZXZpY2UgcHJvYmVkLCBjcmVhdGVzIGFuICdzdHJ1Y3Qgd2hjcmMnIHdoaWNoIGNvbnRhaW5zCisgKiBqdXN0IHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVdCIFJhZGlvIENvbnRyb2xsZXIsIGFuZCB0aGUgbG9naWMKKyAqIGZvciByZWFkaW5nIG5vdGlmaWNhdGlvbnMgYW5kIHBhc3NpbmcgdGhlbSB0byB0aGUgVVdCIENvcmUuCisgKgorICogU28gd2UgaW5pdGlhbGl6ZSBhbGwgb2YgdGhvc2UsIHJlZ2lzdGVyIHRoZSBVV0IgUmFkaW8gQ29udHJvbGxlcgorICogYW5kIHNldHVwIHRoZSBub3RpZmljYXRpb24vZXZlbnQgaGFuZGxlIHRvIHBpcGUgdGhlIG5vdGlmaWNhdGlvbnMKKyAqIHRvIHRoZSBVV0IgbWFuYWdlbWVudCBEYWVtb24uCisgKgorICogT25jZSB1d2JfcmNfYWRkKCkgaXMgY2FsbGVkLCB0aGUgVVdCIHN0YWNrIHRha2VzIGNvbnRyb2wsIHJlc2V0cworICogdGhlIHJhZGlvIGFuZCByZWFkaWVzIHRoZSBkZXZpY2UgdG8gdGFrZSBjb21tYW5kcyB0aGUgVVdCCisgKiBBUEkvdXNlci1zcGFjZS4KKyAqCisgKiBOb3RlIHRoaXMgZHJpdmVyIGlzIGp1c3QgYSB0cmFuc3BvcnQgZHJpdmVyOyB0aGUgY29tbWFuZHMgYXJlCisgKiBmb3JtZWQgYXQgdGhlIFVXQiBzdGFjayBhbmQgZ2l2ZW4gdG8gdGhpcyBkcml2ZXIgd2hvIHdpbGwgZGVsaXZlcgorICogdGhlbSB0byB0aGUgaHcgYW5kIHRyYW5zZmVyIHRoZSByZXBsaWVzL25vdGlmaWNhdGlvbnMgYmFjayB0byB0aGUKKyAqIFVXQiBzdGFjayB0aHJvdWdoIHRoZSBVV0IgZGFlbW9uIChVV0JEKS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKyNpbmNsdWRlIDxsaW51eC91d2Ivd2hjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi91bWMuaD4KKyNpbmNsdWRlICJ1d2ItaW50ZXJuYWwuaCIKKworI2RlZmluZSBEX0xPQ0FMIDAKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKworLyoqCisgKiBEZXNjcmlwdG9yIGZvciBhbiBpbnN0YW5jZSBvZiB0aGUgVVdCIFJhZGlvIENvbnRyb2wgRHJpdmVyIHRoYXQKKyAqIGF0dGFjaGVzIHRvIHRoZSBVUkMgaW50ZXJmYWNlIG9mIHRoZSBXSENJIFBDSSBjYXJkLgorICoKKyAqIFVubGVzcyB0aGVyZSBpcyBhIGxvY2sgc3BlY2lmaWMgdG8gdGhlICdkYXRhIG1lbWJlcnMnLCBhbGwgYWNjZXNzCisgKiBpcyBwcm90ZWN0ZWQgYnkgdXdiX3JjLT5tdXRleC4KKyAqLworc3RydWN0IHdoY3JjIHsKKwlzdHJ1Y3QgdW1jX2RldiAqdW1jX2RldjsKKwlzdHJ1Y3QgdXdiX3JjICp1d2JfcmM7CQkvKiBVV0IgaG9zdCBjb250cm9sbGVyICovCisKKwl1bnNpZ25lZCBsb25nIGFyZWE7CisJdm9pZCBfX2lvbWVtICpyY19iYXNlOworCXNpemVfdCByY19sZW47CisJc3BpbmxvY2tfdCBpcnFfbG9jazsKKworCXZvaWQgKmV2dF9idWYsICpjbWRfYnVmOworCWRtYV9hZGRyX3QgZXZ0X2RtYV9idWYsIGNtZF9kbWFfYnVmOworCXdhaXRfcXVldWVfaGVhZF90IGNtZF93cTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29yazsKK307CisKKy8qKgorICogRXhlY3V0ZSBhbiBVV0IgUkMgY29tbWFuZCBvbiBXSENJL1JDCisgKgorICogQHJjOiAgICAgICBJbnN0YW5jZSBvZiBhIFJhZGlvIENvbnRyb2xsZXIgdGhhdCBpcyBhIHdoY3JjCisgKiBAY21kOiAgICAgIEJ1ZmZlciBjb250YWluaW5nIHRoZSBSQ0NCIGFuZCBwYXlsb2FkIHRvIGV4ZWN1dGUKKyAqIEBjbWRfc2l6ZTogU2l6ZSBvZiB0aGUgY29tbWFuZCBidWZmZXIuCisgKgorICogV2UgY29weSB0aGUgY29tbWFuZCBpbnRvIHdoY3JjLT5jbWRfYnVmIChhcyBpdCBpcyBwcmV0dHkgYW5kCisgKiBhbGlnbmVkYGFuZCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMpIGFuZCB0aGVuIHByZXNzIHRoZSByaWdodCBrZXlzIGluCisgKiB0aGUgY29udHJvbGxlcidzIFVSQ0NNRCByZWdpc3RlciB0byBnZXQgaXQgdG8gcmVhZCBpdC4gV2UgbWlnaHQKKyAqIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGNtZF9zZW0gdG8gYmUgb3BlbiB0byB1cy4KKyAqCisgKiBOT1RFOiByYydzIG11dGV4IGhhcyB0byBiZSBsb2NrZWQKKyAqLworc3RhdGljIGludCB3aGNyY19jbWQoc3RydWN0IHV3Yl9yYyAqdXdiX3JjLAorCSAgICAgIGNvbnN0IHN0cnVjdCB1d2JfcmNjYiAqY21kLCBzaXplX3QgY21kX3NpemUpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHdoY3JjICp3aGNyYyA9IHV3Yl9yYy0+cHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2hjcmMtPnVtY19kZXYtPmRldjsKKwl1MzIgdXJjY21kOworCisJZF9mbnN0YXJ0KDMsIGRldiwgIiglcCwgJXAsICV6dSlcbiIsIHV3Yl9yYywgY21kLCBjbWRfc2l6ZSk7CisJbWlnaHRfc2xlZXAoKTsKKworCWlmIChjbWRfc2l6ZSA+PSA0MDk2KSB7CisJCXJlc3VsdCA9IC1FMkJJRzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBVUkMgaXMgaGFsdGVkLCB0aGVuIHRoZSBoYXJkd2FyZSBoYXMgcmVzZXQgaXRzZWxmLgorCSAqIEF0dGVtcHQgdG8gcmVjb3ZlciBieSByZXN0YXJ0aW5nIHRoZSBkZXZpY2UgYW5kIHRoZW4gcmV0dXJuCisJICogYW4gZXJyb3IgYXMgaXQncyBsaWtlbHkgdGhhdCB0aGUgY3VycmVudCBjb21tYW5kIGlzbid0CisJICogdmFsaWQgZm9yIGEgbmV3bHkgc3RhcnRlZCBSQy4KKwkgKi8KKwlpZiAobGVfcmVhZGwod2hjcmMtPnJjX2Jhc2UgKyBVUkNTVFMpICYgVVJDU1RTX0hBTFRFRCkgeworCQlkZXZfZXJyKGRldiwgInJlcXVlc3RpbmcgcmVzZXQgb2YgaGFsdGVkIHJhZGlvIGNvbnRyb2xsZXJcbiIpOworCQl1d2JfcmNfcmVzZXRfYWxsKHV3Yl9yYyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmVzdWx0ID0gd2FpdF9ldmVudF90aW1lb3V0KHdoY3JjLT5jbWRfd3EsCisJCSEobGVfcmVhZGwod2hjcmMtPnJjX2Jhc2UgKyBVUkNDTUQpICYgVVJDQ01EX0FDVElWRSksIEhaLzIpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgImRldmljZSBpcyBub3QgcmVhZHkgdG8gZXhlY3V0ZSBjb21tYW5kc1xuIik7CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWVtbW92ZSh3aGNyYy0+Y21kX2J1ZiwgY21kLCBjbWRfc2l6ZSk7CisJbGVfd3JpdGVxKHdoY3JjLT5jbWRfZG1hX2J1Ziwgd2hjcmMtPnJjX2Jhc2UgKyBVUkNDTURBRERSKTsKKworCXNwaW5fbG9jaygmd2hjcmMtPmlycV9sb2NrKTsKKwl1cmNjbWQgPSBsZV9yZWFkbCh3aGNyYy0+cmNfYmFzZSArIFVSQ0NNRCk7CisJdXJjY21kICY9IH4oVVJDQ01EX0VBUlYgfCBVUkNDTURfU0laRV9NQVNLKTsKKwlsZV93cml0ZWwodXJjY21kIHwgVVJDQ01EX0FDVElWRSB8IFVSQ0NNRF9JV1IgfCBjbWRfc2l6ZSwKKwkJICB3aGNyYy0+cmNfYmFzZSArIFVSQ0NNRCk7CisJc3Bpbl91bmxvY2soJndoY3JjLT5pcnFfbG9jayk7CisKK2Vycm9yOgorCWRfZm5lbmQoMywgZGV2LCAiKCVwLCAlcCwgJXp1KSA9ICVkXG4iLAorCQl1d2JfcmMsIGNtZCwgY21kX3NpemUsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3aGNyY19yZXNldChzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlzdHJ1Y3Qgd2hjcmMgKndoY3JjID0gcmMtPnByaXY7CisKKwlyZXR1cm4gdW1jX2NvbnRyb2xsZXJfcmVzZXQod2hjcmMtPnVtY19kZXYpOworfQorCisvKioKKyAqIFJlc2V0IGV2ZW50IHJlY2VwdGlvbiBtZWNoYW5pc20gYW5kIHRlbGwgaHcgd2UgYXJlIHJlYWR5IHRvIGdldCBtb3JlCisgKgorICogV2UgaGF2ZSByZWFkIGFsbCB0aGUgZXZlbnRzIGluIHRoZSBldmVudCBidWZmZXIsIHNvIHdlIGFyZSByZWFkeSB0bworICogcmVzZXQgaXQgdG8gdGhlIGJlZ2lubmluZy4KKyAqCisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBhZnRlciBhbiBldmVudCBidWZmZXIKKyAqIGhhcyBiZWVuIHJldGlyZWQuICBUaGlzIG1lYW5zIHdlIGNhbiBiZSBzdXJlIHRoYXQgZXZlbnQgcHJvY2Vzc2luZworICogaXMgZGlzYWJsZWQgYW5kIGl0J3Mgc2FmZSB0byB1cGRhdGUgdGhlIFVSQ0VWVEFERFIgcmVnaXN0ZXIuCisgKgorICogVGhlcmUncyBubyBuZWVkIHRvIHdhaXQgZm9yIHRoZSBldmVudCBwcm9jZXNzaW5nIHRvIHN0YXJ0IGFzIHRoZQorICogVVJDIHdpbGwgbm90IGNsZWFyIFVSQ0NNRF9BQ1RJVkUgdW50aWwgKGludGVybmFsKSBldmVudCBidWZmZXIKKyAqIHNwYWNlIGlzIGF2YWlsYWJsZS4KKyAqLworc3RhdGljCit2b2lkIHdoY3JjX2VuYWJsZV9ldmVudHMoc3RydWN0IHdoY3JjICp3aGNyYykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2hjcmMtPnVtY19kZXYtPmRldjsKKwl1MzIgdXJjY21kOworCisJZF9mbnN0YXJ0KDQsIGRldiwgIih3aGNyYyAlcClcbiIsIHdoY3JjKTsKKworCWxlX3dyaXRlcSh3aGNyYy0+ZXZ0X2RtYV9idWYsIHdoY3JjLT5yY19iYXNlICsgVVJDRVZUQUREUik7CisKKwlzcGluX2xvY2soJndoY3JjLT5pcnFfbG9jayk7CisJdXJjY21kID0gbGVfcmVhZGwod2hjcmMtPnJjX2Jhc2UgKyBVUkNDTUQpICYgflVSQ0NNRF9BQ1RJVkU7CisJbGVfd3JpdGVsKHVyY2NtZCB8IFVSQ0NNRF9FQVJWLCB3aGNyYy0+cmNfYmFzZSArIFVSQ0NNRCk7CisJc3Bpbl91bmxvY2soJndoY3JjLT5pcnFfbG9jayk7CisKKwlkX2ZuZW5kKDQsIGRldiwgIih3aGNyYyAlcCkgPSB2b2lkXG4iLCB3aGNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIHdoY3JjX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3aGNyYyAqd2hjcmMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdoY3JjLCBldmVudF93b3JrKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2hjcmMtPnVtY19kZXYtPmRldjsKKwlzaXplX3Qgc2l6ZTsKKwl1NjQgdXJjZXZ0YWRkcjsKKworCXVyY2V2dGFkZHIgPSBsZV9yZWFkcSh3aGNyYy0+cmNfYmFzZSArIFVSQ0VWVEFERFIpOworCXNpemUgPSB1cmNldnRhZGRyICYgVVJDRVZUQUREUl9PRkZTRVRfTUFTSzsKKworCWRfcHJpbnRmKDMsIGRldiwgInJlY2VpdmVkICV6dSBvY3RldCBldmVudFxuIiwgc2l6ZSk7CisJZF9kdW1wKDQsIGRldiwgd2hjcmMtPmV2dF9idWYsIHNpemUgPiAzMiA/IDMyIDogc2l6ZSk7CisKKwl1d2JfcmNfbmVoX2dyb2sod2hjcmMtPnV3Yl9yYywgd2hjcmMtPmV2dF9idWYsIHNpemUpOworCXdoY3JjX2VuYWJsZV9ldmVudHMod2hjcmMpOworfQorCisvKioKKyAqIENhdGNoIGludGVycnVwdHM/CisgKgorICogV2UgYWNrIGlubWVkaWF0ZWx5IChhbmQgZXhwZWN0IHRoZSBodyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYW5kCisgKiByYWlzZSBhbm90aGVyIElSUSBpZiB0aGluZ3MgaGF2ZSBjaGFuZ2VkIDopCisgKi8KK3N0YXRpYworaXJxcmV0dXJuX3Qgd2hjcmNfaXJxX2NiKGludCBpcnEsIHZvaWQgKl93aGNyYykKK3sKKwlzdHJ1Y3Qgd2hjcmMgKndoY3JjID0gX3doY3JjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3aGNyYy0+dW1jX2Rldi0+ZGV2OworCXUzMiB1cmNzdHM7CisKKwl1cmNzdHMgPSBsZV9yZWFkbCh3aGNyYy0+cmNfYmFzZSArIFVSQ1NUUyk7CisJaWYgKCEodXJjc3RzICYgVVJDU1RTX0lOVF9NQVNLKSkKKwkJcmV0dXJuIElSUV9OT05FOworCWxlX3dyaXRlbCh1cmNzdHMgJiBVUkNTVFNfSU5UX01BU0ssIHdoY3JjLT5yY19iYXNlICsgVVJDU1RTKTsKKworCWRfcHJpbnRmKDQsIGRldiwgImFja2VkIDB4JTA4eCwgdXJjc3RzIDB4JTA4eFxuIiwKKwkJIGxlX3JlYWRsKHdoY3JjLT5yY19iYXNlICsgVVJDU1RTKSwgdXJjc3RzKTsKKworCWlmICh1cmNzdHMgJiBVUkNTVFNfSFNFKSB7CisJCWRldl9lcnIoZGV2LCAiaG9zdCBzeXN0ZW0gZXJyb3IgLS0gaGFyZHdhcmUgaGFsdGVkXG4iKTsKKwkJLyogRklYTUU6IGRvIHNvbWV0aGluZyBzZW5zaWJsZSBoZXJlICovCisJCWdvdG8gb3V0OworCX0KKwlpZiAodXJjc3RzICYgVVJDU1RTX0VSKSB7CisJCWRfcHJpbnRmKDMsIGRldiwgIkVSOiBldmVudCByZWFkeVxuIik7CisJCXNjaGVkdWxlX3dvcmsoJndoY3JjLT5ldmVudF93b3JrKTsKKwl9CisJaWYgKHVyY3N0cyAmIFVSQ1NUU19SQ0kpIHsKKwkJZF9wcmludGYoMywgZGV2LCAiUkNJOiByZWFkeSB0byBleGVjdXRlIGFub3RoZXIgY29tbWFuZFxuIik7CisJCXdha2VfdXBfYWxsKCZ3aGNyYy0+Y21kX3dxKTsKKwl9CitvdXQ6CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qKgorICogSW5pdGlhbGl6ZSBhIFVNQyBSQyBpbnRlcmZhY2U6IG1hcCByZWdpb25zLCBnZXQgKHNoYXJlZCkgSVJRCisgKi8KK3N0YXRpYworaW50IHdoY3JjX3NldHVwX3JjX3VtYyhzdHJ1Y3Qgd2hjcmMgKndoY3JjKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3aGNyYy0+dW1jX2Rldi0+ZGV2OworCXN0cnVjdCB1bWNfZGV2ICp1bWNfZGV2ID0gd2hjcmMtPnVtY19kZXY7CisKKwl3aGNyYy0+YXJlYSA9IHVtY19kZXYtPnJlc291cmNlLnN0YXJ0OworCXdoY3JjLT5yY19sZW4gPSB1bWNfZGV2LT5yZXNvdXJjZS5lbmQgLSB1bWNfZGV2LT5yZXNvdXJjZS5zdGFydCArIDE7CisJcmVzdWx0ID0gLUVCVVNZOworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24od2hjcmMtPmFyZWEsIHdoY3JjLT5yY19sZW4sIEtCVUlMRF9NT0ROQU1FKQorCSAgICA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVxdWVzdCBVUkMgcmVnaW9uICglenUgYnl0ZXMgQCAweCVseCk6ICVkXG4iLAorCQkJd2hjcmMtPnJjX2xlbiwgd2hjcmMtPmFyZWEsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3JfcmVxdWVzdF9yZWdpb247CisJfQorCisJd2hjcmMtPnJjX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUod2hjcmMtPmFyZWEsIHdoY3JjLT5yY19sZW4pOworCWlmICh3aGNyYy0+cmNfYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgaW9yZW1hcCByZWdpc3RlcnMgKCV6dSBieXRlcyBAIDB4JWx4KTogJWRcbiIsCisJCQl3aGNyYy0+cmNfbGVuLCB3aGNyYy0+YXJlYSwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9pb3JlbWFwX25vY2FjaGU7CisJfQorCisJcmVzdWx0ID0gcmVxdWVzdF9pcnEodW1jX2Rldi0+aXJxLCB3aGNyY19pcnFfY2IsIElSUUZfU0hBUkVELAorCQkJICAgICBLQlVJTERfTU9ETkFNRSwgd2hjcmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgYWxsb2NhdGUgSVJRICVkOiAlZFxuIiwKKwkJCXVtY19kZXYtPmlycSwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl9yZXF1ZXN0X2lycTsKKwl9CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCXdoY3JjLT5jbWRfYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KCZ1bWNfZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQkJICAgICZ3aGNyYy0+Y21kX2RtYV9idWYsIEdGUF9LRVJORUwpOworCWlmICh3aGNyYy0+Y21kX2J1ZiA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgY21kIHRyYW5zZmVyIGJ1ZmZlclxuIik7CisJCWdvdG8gZXJyb3JfY21kX2J1ZmZlcjsKKwl9CisKKwl3aGNyYy0+ZXZ0X2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmdW1jX2Rldi0+ZGV2LCBQQUdFX1NJWkUsCisJCQkJCSAgICAmd2hjcmMtPmV2dF9kbWFfYnVmLCBHRlBfS0VSTkVMKTsKKwlpZiAod2hjcmMtPmV2dF9idWYgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IGFsbG9jYXRlIGV2dCB0cmFuc2ZlciBidWZmZXJcbiIpOworCQlnb3RvIGVycm9yX2V2dF9idWZmZXI7CisJfQorCWRfcHJpbnRmKDMsIGRldiwgIlVXQiBSQyBJbnRlcmZhY2U6ICV6dSBieXRlcyBhdCAweCVwLCBpcnEgJXVcbiIsCisJCSB3aGNyYy0+cmNfbGVuLCB3aGNyYy0+cmNfYmFzZSwgdW1jX2Rldi0+aXJxKTsKKwlyZXR1cm4gMDsKKworZXJyb3JfZXZ0X2J1ZmZlcjoKKwlkbWFfZnJlZV9jb2hlcmVudCgmdW1jX2Rldi0+ZGV2LCBQQUdFX1NJWkUsIHdoY3JjLT5jbWRfYnVmLAorCQkJICB3aGNyYy0+Y21kX2RtYV9idWYpOworZXJyb3JfY21kX2J1ZmZlcjoKKwlmcmVlX2lycSh1bWNfZGV2LT5pcnEsIHdoY3JjKTsKK2Vycm9yX3JlcXVlc3RfaXJxOgorCWlvdW5tYXAod2hjcmMtPnJjX2Jhc2UpOworZXJyb3JfaW9yZW1hcF9ub2NhY2hlOgorCXJlbGVhc2VfbWVtX3JlZ2lvbih3aGNyYy0+YXJlYSwgd2hjcmMtPnJjX2xlbik7CitlcnJvcl9yZXF1ZXN0X3JlZ2lvbjoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogUmVsZWFzZSBSQydzIFVNQyByZXNvdXJjZXMKKyAqLworc3RhdGljCit2b2lkIHdoY3JjX3JlbGVhc2VfcmNfdW1jKHN0cnVjdCB3aGNyYyAqd2hjcmMpCit7CisJc3RydWN0IHVtY19kZXYgKnVtY19kZXYgPSB3aGNyYy0+dW1jX2RldjsKKworCWRtYV9mcmVlX2NvaGVyZW50KCZ1bWNfZGV2LT5kZXYsIFBBR0VfU0laRSwgd2hjcmMtPmV2dF9idWYsCisJCQkgIHdoY3JjLT5ldnRfZG1hX2J1Zik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnVtY19kZXYtPmRldiwgUEFHRV9TSVpFLCB3aGNyYy0+Y21kX2J1ZiwKKwkJCSAgd2hjcmMtPmNtZF9kbWFfYnVmKTsKKwlmcmVlX2lycSh1bWNfZGV2LT5pcnEsIHdoY3JjKTsKKwlpb3VubWFwKHdoY3JjLT5yY19iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24od2hjcmMtPmFyZWEsIHdoY3JjLT5yY19sZW4pOworfQorCisKKy8qKgorICogd2hjcmNfc3RhcnRfcmMgLSBzdGFydCBhIFdIQ0kgcmFkaW8gY29udHJvbGxlcgorICogQHdoY3JjOiB0aGUgcmFkaW8gY29udHJvbGxlciB0byBzdGFydAorICoKKyAqIFJlc2V0IHRoZSBVTUMgZGV2aWNlLCBzdGFydCB0aGUgcmFkaW8gY29udHJvbGxlciwgZW5hYmxlIGV2ZW50cyBhbmQKKyAqIGZpbmFsbHkgZW5hYmxlIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyBpbnQgd2hjcmNfc3RhcnRfcmMoc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3RydWN0IHdoY3JjICp3aGNyYyA9IHJjLT5wcml2OworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3aGNyYy0+dW1jX2Rldi0+ZGV2OworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGR1cmF0aW9uOworCisJLyogUmVzZXQgdGhlIHRoaW5nICovCisJbGVfd3JpdGVsKFVSQ0NNRF9SRVNFVCwgd2hjcmMtPnJjX2Jhc2UgKyBVUkNDTUQpOworCWlmIChkX3Rlc3QoMykpCisJCXN0YXJ0ID0gamlmZmllczsKKwlpZiAod2hjaV93YWl0X2ZvcihkZXYsIHdoY3JjLT5yY19iYXNlICsgVVJDQ01ELCBVUkNDTURfUkVTRVQsIDAsCisJCQkgIDUwMDAsICJkZXZpY2UgdG8gcmVzZXQgYXQgaW5pdCIpIDwgMCkgeworCQlyZXN1bHQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3I7CisJfSBlbHNlIGlmIChkX3Rlc3QoMykpIHsKKwkJZHVyYXRpb24gPSBqaWZmaWVzIC0gc3RhcnQ7CisJCWlmIChkdXJhdGlvbiA+IG1zZWNzX3RvX2ppZmZpZXMoNDApKQorCQkJZGV2X2VycihkZXYsICJEZXZpY2UgdG9vayAldW1zIHRvICIKKwkJCQkgICAgICJyZXNldC4gTUFYIGV4cGVjdGVkOiA0MG1zXG4iLAorCQkJCSAgICAgamlmZmllc190b19tc2VjcyhkdXJhdGlvbikpOworCX0KKworCS8qIFNldCB0aGUgZXZlbnQgYnVmZmVyLCBzdGFydCB0aGUgY29udHJvbGxlciAoZW5hYmxlIElSUXMgbGF0ZXIpICovCisJbGVfd3JpdGVsKDAsIHdoY3JjLT5yY19iYXNlICsgVVJDSU5UUik7CisJbGVfd3JpdGVsKFVSQ0NNRF9SUywgd2hjcmMtPnJjX2Jhc2UgKyBVUkNDTUQpOworCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJaWYgKGRfdGVzdCgzKSkKKwkJc3RhcnQgPSBqaWZmaWVzOworCWlmICh3aGNpX3dhaXRfZm9yKGRldiwgd2hjcmMtPnJjX2Jhc2UgKyBVUkNTVFMsIFVSQ1NUU19IQUxURUQsIDAsCisJCQkgIDUwMDAsICJkZXZpY2UgdG8gc3RhcnQiKSA8IDApCisJCWdvdG8gZXJyb3I7CisJaWYgKGRfdGVzdCgzKSkgeworCQlkdXJhdGlvbiA9IGppZmZpZXMgLSBzdGFydDsKKwkJaWYgKGR1cmF0aW9uID4gbXNlY3NfdG9famlmZmllcyg0MCkpCisJCQlkZXZfZXJyKGRldiwgIkRldmljZSB0b29rICV1bXMgdG8gc3RhcnQuICIKKwkJCQkgICAgICJNQVggZXhwZWN0ZWQ6IDQwbXNcbiIsCisJCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGR1cmF0aW9uKSk7CisJfQorCXdoY3JjX2VuYWJsZV9ldmVudHMod2hjcmMpOworCXJlc3VsdCA9IDA7CisJbGVfd3JpdGVsKFVSQ0lOVFJfRU5fQUxMLCB3aGNyYy0+cmNfYmFzZSArIFVSQ0lOVFIpOworZXJyb3I6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIHdoY3JjX3N0b3BfcmMgLSBzdG9wIGEgV0hDSSByYWRpbyBjb250cm9sbGVyCisgKiBAd2hjcmM6IHRoZSByYWRpbyBjb250cm9sbGVyIHRvIHN0b3AKKyAqCisgKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIGNhbmNlbCBhbnkgcGVuZGluZyBldmVudCBwcm9jZXNzaW5nIHdvcmsKKyAqIGJlZm9yZSBjbGVhcmluZyB0aGUgUnVuL1N0b3AgYml0LgorICovCitzdGF0aWMKK3ZvaWQgd2hjcmNfc3RvcF9yYyhzdHJ1Y3QgdXdiX3JjICpyYykKK3sKKwlzdHJ1Y3Qgd2hjcmMgKndoY3JjID0gcmMtPnByaXY7CisJc3RydWN0IHVtY19kZXYgKnVtY19kZXYgPSB3aGNyYy0+dW1jX2RldjsKKworCWxlX3dyaXRlbCgwLCB3aGNyYy0+cmNfYmFzZSArIFVSQ0lOVFIpOworCWNhbmNlbF93b3JrX3N5bmMoJndoY3JjLT5ldmVudF93b3JrKTsKKworCWxlX3dyaXRlbCgwLCB3aGNyYy0+cmNfYmFzZSArIFVSQ0NNRCk7CisJd2hjaV93YWl0X2ZvcigmdW1jX2Rldi0+ZGV2LCB3aGNyYy0+cmNfYmFzZSArIFVSQ1NUUywKKwkJICAgICAgVVJDU1RTX0hBTFRFRCwgMCwgNDAsICJVUkNTVFMuSEFMVEVEIik7Cit9CisKK3N0YXRpYyB2b2lkIHdoY3JjX2luaXQoc3RydWN0IHdoY3JjICp3aGNyYykKK3sKKwlzcGluX2xvY2tfaW5pdCgmd2hjcmMtPmlycV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3aGNyYy0+Y21kX3dxKTsKKwlJTklUX1dPUksoJndoY3JjLT5ldmVudF93b3JrLCB3aGNyY19ldmVudF93b3JrKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSByYWRpbyBjb250cm9sbGVyLgorICoKKyAqIE5PVEU6IHdlIHNldHVwIHdoY3JjLT51d2JfcmMgYmVmb3JlIGNhbGxpbmcgdXdiX3JjX2FkZCgpOyBpbiB0aGUKKyAqICAgICAgIElSUSBoYW5kbGVyIHdlIHVzZSB0aGF0IHRvIGRldGVybWluZSBpZiB0aGUgaHcgaXMgcmVhZHkgdG8KKyAqICAgICAgIGhhbmRsZSBldmVudHMuIExvb2tzIGxpa2UgYSByYWNlIGNvbmRpdGlvbiwgYnV0IGl0IHJlYWxseSBpcworICogICAgICAgbm90LgorICovCitzdGF0aWMKK2ludCB3aGNyY19wcm9iZShzdHJ1Y3QgdW1jX2RldiAqdW1jX2RldikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB1d2JfcmMgKnV3Yl9yYzsKKwlzdHJ1Y3Qgd2hjcmMgKndoY3JjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1bWNfZGV2LT5kZXY7CisKKwlkX2Zuc3RhcnQoMywgZGV2LCAiKHVtY19kZXYgJXApXG4iLCB1bWNfZGV2KTsKKwlyZXN1bHQgPSAtRU5PTUVNOworCXV3Yl9yYyA9IHV3Yl9yY19hbGxvYygpOworCWlmICh1d2JfcmMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBSQyBpbnN0YW5jZVxuIik7CisJCWdvdG8gZXJyb3JfcmNfYWxsb2M7CisJfQorCXdoY3JjID0ga3phbGxvYyhzaXplb2YoKndoY3JjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdoY3JjID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgV0hDLVJDIGluc3RhbmNlXG4iKTsKKwkJZ290byBlcnJvcl9hbGxvYzsKKwl9CisJd2hjcmNfaW5pdCh3aGNyYyk7CisJd2hjcmMtPnVtY19kZXYgPSB1bWNfZGV2OworCisJcmVzdWx0ID0gd2hjcmNfc2V0dXBfcmNfdW1jKHdoY3JjKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IHNldHVwIFJDIFVNQyBpbnRlcmZhY2U6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3NldHVwX3JjX3VtYzsKKwl9CisJd2hjcmMtPnV3Yl9yYyA9IHV3Yl9yYzsKKworCXV3Yl9yYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl1d2JfcmMtPmNtZCAgID0gd2hjcmNfY21kOworCXV3Yl9yYy0+cmVzZXQgPSB3aGNyY19yZXNldDsKKwl1d2JfcmMtPnN0YXJ0ID0gd2hjcmNfc3RhcnRfcmM7CisJdXdiX3JjLT5zdG9wICA9IHdoY3JjX3N0b3BfcmM7CisKKwlyZXN1bHQgPSB1d2JfcmNfYWRkKHV3Yl9yYywgZGV2LCB3aGNyYyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfcmNfYWRkOworCXVtY19zZXRfZHJ2ZGF0YSh1bWNfZGV2LCB3aGNyYyk7CisJZF9mbmVuZCgzLCBkZXYsICIodW1jX2RldiAlcCkgPSAwXG4iLCB1bWNfZGV2KTsKKwlyZXR1cm4gMDsKKworZXJyb3JfcmNfYWRkOgorCXdoY3JjX3JlbGVhc2VfcmNfdW1jKHdoY3JjKTsKK2Vycm9yX3NldHVwX3JjX3VtYzoKKwlrZnJlZSh3aGNyYyk7CitlcnJvcl9hbGxvYzoKKwl1d2JfcmNfcHV0KHV3Yl9yYyk7CitlcnJvcl9yY19hbGxvYzoKKwlkX2ZuZW5kKDMsIGRldiwgIih1bWNfZGV2ICVwKSA9ICVkXG4iLCB1bWNfZGV2LCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ2xlYW4gdXAgdGhlIHJhZGlvIGNvbnRyb2wgcmVzb3VyY2VzCisgKgorICogV2hlbiB3ZSB1cCB0aGUgY29tbWFuZCBzZW1hcGhvcmUsIGV2ZXJ5Ym9keSBwb3NzaWJseSBoZWxkIHRyeWluZyB0bworICogZXhlY3V0ZSBhIGNvbW1hbmQgc2hvdWxkIGJlIGdyYW50ZWQgZW50cnkgYW5kIHRoZW4gdGhleSdsbCBzZWUgdGhlCisgKiBob3N0IGlzIHF1aWVzY2luZyBhbmQgdXAgaXQgKHNvIGl0IHdpbGwgY2hhaW4gdG8gdGhlIG5leHQgd2FpdGVyKS4KKyAqIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKGluIGFueSBjYXNlKSwgYXMgd2UgY2FuIG9ubHkgcmVtb3ZlIHdoZW4KKyAqIHRoZXJlIGFyZSBubyBoYW5kbGVzIG9wZW4uLi4KKyAqLworc3RhdGljIHZvaWQgd2hjcmNfcmVtb3ZlKHN0cnVjdCB1bWNfZGV2ICp1bWNfZGV2KQoreworCXN0cnVjdCB3aGNyYyAqd2hjcmMgPSB1bWNfZ2V0X2RydmRhdGEodW1jX2Rldik7CisJc3RydWN0IHV3Yl9yYyAqdXdiX3JjID0gd2hjcmMtPnV3Yl9yYzsKKworCXVtY19zZXRfZHJ2ZGF0YSh1bWNfZGV2LCBOVUxMKTsKKwl1d2JfcmNfcm0odXdiX3JjKTsKKwl3aGNyY19yZWxlYXNlX3JjX3VtYyh3aGNyYyk7CisJa2ZyZWUod2hjcmMpOworCXV3Yl9yY19wdXQodXdiX3JjKTsKKwlkX3ByaW50ZigxLCAmdW1jX2Rldi0+ZGV2LCAiZnJlZWQgd2hjcmMgJXBcbiIsIHdoY3JjKTsKK30KKworLyogUENJIGRldmljZSBJRCdzIHRoYXQgd2UgaGFuZGxlIFtzbyBpdCBnZXRzIGxvYWRlZF0gKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB3aGNyY19pZF90YWJsZVtdID0geworCXsgUENJX0RFVklDRV9DTEFTUyhQQ0lfQ0xBU1NfV0lSRUxFU1NfV0hDSSwgfjApIH0sCisJeyAvKiBlbXB0eSBsYXN0IGVudHJ5ICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgd2hjcmNfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVtY19kcml2ZXIgd2hjcmNfZHJpdmVyID0geworCS5uYW1lICAgPSAid2hjLXJjIiwKKwkuY2FwX2lkID0gVU1DX0NBUF9JRF9XSENJX1JDLAorCS5wcm9iZSAgPSB3aGNyY19wcm9iZSwKKwkucmVtb3ZlID0gd2hjcmNfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2hjcmNfZHJpdmVyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdW1jX2RyaXZlcl9yZWdpc3Rlcigmd2hjcmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdoY3JjX2RyaXZlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdoY3JjX2RyaXZlcl9leGl0KHZvaWQpCit7CisJdW1jX2RyaXZlcl91bnJlZ2lzdGVyKCZ3aGNyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod2hjcmNfZHJpdmVyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgUmFkaW8gQ29udHJvbCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3doY2kuYyBiL2RyaXZlcnMvdXdiL3doY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGYyMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivd2hjaS5jCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogV0hDSSBVV0IgTXVsdGktaW50ZXJmYWNlIENvbnRyb2xsZXIgZW51bWVyYXRvci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdQTCB2Mi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91d2Ivd2hjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3V3Yi91bWMuaD4KKworc3RydWN0IHdoY2lfY2FyZCB7CisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwl2b2lkIF9faW9tZW0gKnV3YmJhc2U7CisJdTggbl9jYXBzOworCXN0cnVjdCB1bWNfZGV2ICpkZXZzWzBdOworfTsKKworCisvKiBGaXggZmF1bHR5IEhXIDooICovCitzdGF0aWMKK3U2NCB3aGNpX2NhcGRhdGFfcXVpcmtzKHN0cnVjdCB3aGNpX2NhcmQgKmNhcmQsIHU2NCBjYXBkYXRhKQoreworCXU2NCBjYXBkYXRhX29yaWcgPSBjYXBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gY2FyZC0+cGNpOworCWlmIChwY2lfZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTAorCSAgICAmJiAocGNpX2Rldi0+ZGV2aWNlID09IDB4MGMzYiB8fCBwY2lfZGV2LT5kZXZpY2UgPT0gMDAwNCkKKwkgICAgJiYgcGNpX2Rldi0+Y2xhc3MgPT0gMHgwZDEwMTApIHsKKwkJc3dpdGNoIChVV0JDQVBEQVRBX1RPX0NBUF9JRChjYXBkYXRhKSkgeworCQkJLyogV0xQIGNhcGFiaWxpdHkgaGFzIDB4MTAwIGJ5dGVzIG9mIGFwZXJ0dXJlICovCisJCWNhc2UgMHg4MDoKKwkJCWNhcGRhdGEgfD0gMHg0MCA8PCA4OyBicmVhazsKKwkJCS8qIFdVU0IgY2FwYWJpbGl0eSBoYXMgMHg4MCBieXRlcyBvZiBhcGVydHVyZQorCQkJICogYW5kIElEIGlzIDEgKi8KKwkJY2FzZSAweDAyOgorCQkJY2FwZGF0YSAmPSB+MHhmZmZmOworCQkJY2FwZGF0YSB8PSAweDIwMDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoY2FwZGF0YV9vcmlnICE9IGNhcGRhdGEpCisJCWRldl93YXJuKCZwY2lfZGV2LT5kZXYsCisJCQkgIlBDSSB2JTA0eCBkJTA0eCBjJTA2eCMlMDJ4OiAiCisJCQkgImNvcnJlY3RlZCBjYXBkYXRhIGZyb20gJTAxNkx4IHRvICUwMTZMeFxuIiwKKwkJCSBwY2lfZGV2LT52ZW5kb3IsIHBjaV9kZXYtPmRldmljZSwgcGNpX2Rldi0+Y2xhc3MsCisJCQkgKHVuc2lnbmVkKVVXQkNBUERBVEFfVE9fQ0FQX0lEKGNhcGRhdGEpLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpY2FwZGF0YV9vcmlnLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpY2FwZGF0YSk7CisJcmV0dXJuIGNhcGRhdGE7Cit9CisKKworLyoqCisgKiB3aGNpX3dhaXRfZm9yIC0gd2FpdCBmb3IgYSBXSENJIHJlZ2lzdGVyIHRvIGJlIHNldAorICoKKyAqIFBvbGxzIChmb3IgYXQgbW9zdCBAbWF4X21zIG1zKSB1bnRpbCAnKkByZWcgJiBAbWFzayA9PSBAcmVzdWx0Jy4KKyAqLworaW50IHdoY2lfd2FpdF9mb3Ioc3RydWN0IGRldmljZSAqZGV2LCB1MzIgX19pb21lbSAqcmVnLCB1MzIgbWFzaywgdTMyIHJlc3VsdCwKKwl1bnNpZ25lZCBsb25nIG1heF9tcywgY29uc3QgY2hhciAqdGFnKQoreworCXVuc2lnbmVkIHQgPSAwOworCXUzMiB2YWw7CisJZm9yICg7OykgeworCQl2YWwgPSBsZV9yZWFkbChyZWcpOworCQlpZiAoKHZhbCAmIG1hc2spID09IHJlc3VsdCkKKwkJCWJyZWFrOworCQltc2xlZXAoMTApOworCQlpZiAodCA+PSBtYXhfbXMpIHsKKwkJCWRldl9lcnIoZGV2LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yICVzICIsIHRhZyk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQl0ICs9IDEwOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdoY2lfd2FpdF9mb3IpOworCisKKy8qCisgKiBOT1RFOiB0aGUgY2FwaW5mbyBhbmQgY2FwZGF0YSByZWdpc3RlcnMgYXJlIHNsaWdodGx5IGRpZmZlcmVudAorICogICAgICAgKHNpemUgYW5kIGNhcC1pZCBmaWVsZHMpLiBTbyBmb3IgY2FwICMwLCB3ZSBuZWVkIHRvIGZpbGwKKyAqICAgICAgIGluLiBTaXplIGNvbWVzIGZyb20gdGhlIHNpemUgb2YgdGhlIHJlZ2lzdGVyIGJsb2NrCisgKiAgICAgICAoc3RhdGljYWxseSBjYWxjdWxhdGVkKTsgY2FwX2lkIGNvbWVzIGZyb20gbm93aGVyZSwgd2UgdXNlCisgKiAgICAgICB6ZXJvLCB0aGF0IGlzIHJlc2VydmVkLCBmb3IgdGhlIHJhZGlvIGNvbnRyb2xsZXIsIGJlY2F1c2UKKyAqICAgICAgIG5vbmUgd2FzIGRlZmluZWQgYXQgdGhlIHNwZWMgbGV2ZWwuCisgKi8KK3N0YXRpYyBpbnQgd2hjaV9hZGRfY2FwKHN0cnVjdCB3aGNpX2NhcmQgKmNhcmQsIGludCBuKQoreworCXN0cnVjdCB1bWNfZGV2ICp1bWM7CisJdTY0IGNhcGRhdGE7CisJaW50IGJhciwgZXJyOworCisJdW1jID0gdW1jX2RldmljZV9jcmVhdGUoJmNhcmQtPnBjaS0+ZGV2LCBuKTsKKwlpZiAodW1jID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FwZGF0YSA9IGxlX3JlYWRxKGNhcmQtPnV3YmJhc2UgKyBVV0JDQVBEQVRBKG4pKTsKKworCWJhciA9IFVXQkNBUERBVEFfVE9fQkFSKGNhcGRhdGEpIDw8IDE7CisKKwljYXBkYXRhID0gd2hjaV9jYXBkYXRhX3F1aXJrcyhjYXJkLCBjYXBkYXRhKTsKKwkvKiBDYXBhYmlsaXR5IDAgaXMgdGhlIHJhZGlvIGNvbnRyb2xsZXIuIEl0J3Mgc2l6ZSBpcyAzMgorCSAqIGJ5dGVzIChXSENJMC45NVsyLjMsIFQyLTldKS4gKi8KKwl1bWMtPnZlcnNpb24gICAgICAgICA9IFVXQkNBUERBVEFfVE9fVkVSU0lPTihjYXBkYXRhKTsKKwl1bWMtPmNhcF9pZCAgICAgICAgICA9IG4gPT0gMCA/IDAgOiBVV0JDQVBEQVRBX1RPX0NBUF9JRChjYXBkYXRhKTsKKwl1bWMtPmJhcgkgICAgID0gYmFyOworCXVtYy0+cmVzb3VyY2Uuc3RhcnQgID0gcGNpX3Jlc291cmNlX3N0YXJ0KGNhcmQtPnBjaSwgYmFyKQorCQkrIFVXQkNBUERBVEFfVE9fT0ZGU0VUKGNhcGRhdGEpOworCXVtYy0+cmVzb3VyY2UuZW5kICAgID0gdW1jLT5yZXNvdXJjZS5zdGFydAorCQkrIChuID09IDAgPyAweDIwIDogVVdCQ0FQREFUQV9UT19TSVpFKGNhcGRhdGEpKSAtIDE7CisJdW1jLT5yZXNvdXJjZS5uYW1lICAgPSB1bWMtPmRldi5idXNfaWQ7CisJdW1jLT5yZXNvdXJjZS5mbGFncyAgPSBjYXJkLT5wY2ktPnJlc291cmNlW2Jhcl0uZmxhZ3M7CisJdW1jLT5yZXNvdXJjZS5wYXJlbnQgPSAmY2FyZC0+cGNpLT5yZXNvdXJjZVtiYXJdOworCXVtYy0+aXJxICAgICAgICAgICAgID0gY2FyZC0+cGNpLT5pcnE7CisKKwllcnIgPSB1bWNfZGV2aWNlX3JlZ2lzdGVyKHVtYyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisJY2FyZC0+ZGV2c1tuXSA9IHVtYzsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJa2ZyZWUodW1jKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB3aGNpX2RlbF9jYXAoc3RydWN0IHdoY2lfY2FyZCAqY2FyZCwgaW50IG4pCit7CisJc3RydWN0IHVtY19kZXYgKnVtYyA9IGNhcmQtPmRldnNbbl07CisKKwlpZiAodW1jICE9IE5VTEwpCisJCXVtY19kZXZpY2VfdW5yZWdpc3Rlcih1bWMpOworfQorCitzdGF0aWMgaW50IHdoY2lfbl9jYXBzKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJdm9pZCBfX2lvbWVtICp1d2JiYXNlOworCXU2NCBjYXBpbmZvOworCisJdXdiYmFzZSA9IHBjaV9pb21hcChwY2ksIDAsIDgpOworCWlmICghdXdiYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2FwaW5mbyA9IGxlX3JlYWRxKHV3YmJhc2UgKyBVV0JDQVBJTkZPKTsKKwlwY2lfaW91bm1hcChwY2ksIHV3YmJhc2UpOworCisJcmV0dXJuIFVXQkNBUElORk9fVE9fTl9DQVBTKGNhcGluZm8pOworfQorCitzdGF0aWMgaW50IHdoY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3aGNpX2NhcmQgKmNhcmQ7CisJaW50IGVyciwgbl9jYXBzLCBuOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKwlwY2lfZW5hYmxlX21zaShwY2kpOworCXBjaV9zZXRfbWFzdGVyKHBjaSk7CisJZXJyID0gLUVOWElPOworCWlmICghcGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV82NEJJVF9NQVNLKSkKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzY0QklUX01BU0spOworCWVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzMyQklUX01BU0spKQorCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMzJCSVRfTUFTSyk7CisJZWxzZQorCQlnb3RvIGVycm9yX2RtYTsKKworCWVyciA9IG5fY2FwcyA9IHdoY2lfbl9jYXBzKHBjaSk7CisJaWYgKG5fY2FwcyA8IDApCisJCWdvdG8gZXJyb3JfbmNhcHM7CisKKwllcnIgPSAtRU5PTUVNOworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2hjaV9jYXJkKQorCQkgICAgICAgKyBzaXplb2Yoc3RydWN0IHdoY2lfZGV2ICopICogKG5fY2FwcyArIDEpLAorCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9remFsbG9jOworCWNhcmQtPnBjaSA9IHBjaTsKKwljYXJkLT5uX2NhcHMgPSBuX2NhcHM7CisKKwllcnIgPSAtRUJVU1k7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCksCisJCQkJVVdCQ0FQREFUQV9TSVpFKGNhcmQtPm5fY2FwcyksCisJCQkJIndoY2kgKGNhcGFiaWxpdHkgZGF0YSkiKSkKKwkJZ290byBlcnJvcl9yZXF1ZXN0X21lbXJlZ2lvbjsKKwllcnIgPSAtRU5PTUVNOworCWNhcmQtPnV3YmJhc2UgPSBwY2lfaW9tYXAocGNpLCAwLCBVV0JDQVBEQVRBX1NJWkUoY2FyZC0+bl9jYXBzKSk7CisJaWYgKCFjYXJkLT51d2JiYXNlKQorCQlnb3RvIGVycm9yX2lvbWFwOworCisJLyogQWRkIGVhY2ggY2FwYWJpbGl0eS4gKi8KKwlmb3IgKG4gPSAwOyBuIDw9IGNhcmQtPm5fY2FwczsgbisrKSB7CisJCWVyciA9IHdoY2lfYWRkX2NhcChjYXJkLCBuKTsKKwkJaWYgKGVyciA8IDAgJiYgbiA9PSAwKSB7CisJCQlkZXZfZXJyKCZwY2ktPmRldiwgImNhbm5vdCBiaW5kIFVXQiByYWRpbyBjb250cm9sbGVyOiIKKwkJCQkiICVkXG4iLCBlcnIpOworCQkJZ290byBlcnJvcl9iaW5kOworCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZGV2X3dhcm4oJnBjaS0+ZGV2LCAid2FybmluZzogY2Fubm90IGJpbmQgY2FwYWJpbGl0eSAiCisJCQkJICIjJXU6ICVkXG4iLCBuLCBlcnIpOworCX0KKwlwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKKwlyZXR1cm4gMDsKKworZXJyb3JfYmluZDoKKwlwY2lfaW91bm1hcChwY2ksIGNhcmQtPnV3YmJhc2UpOworZXJyb3JfaW9tYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApLCBVV0JDQVBEQVRBX1NJWkUoY2FyZC0+bl9jYXBzKSk7CitlcnJvcl9yZXF1ZXN0X21lbXJlZ2lvbjoKKwlrZnJlZShjYXJkKTsKK2Vycm9yX2t6YWxsb2M6CitlcnJvcl9uY2FwczoKK2Vycm9yX2RtYToKKwlwY2lfZGlzYWJsZV9tc2kocGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKK2Vycm9yOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHdoY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IHdoY2lfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCWludCBuOworCisJcGNpX3NldF9kcnZkYXRhKHBjaSwgTlVMTCk7CisJLyogVW5yZWdpc3RlciBlYWNoIGNhcGFiaWxpdHkgaW4gcmV2ZXJzZSAoc28gdGhlIG1hc3RlciBkZXZpY2UKKwkgKiBpcyB1bnJlZ2lzdGVyZWQgbGFzdCkuICovCisJZm9yIChuID0gY2FyZC0+bl9jYXBzOyBuID49IDAgOyBuLS0pCisJCXdoY2lfZGVsX2NhcChjYXJkLCBuKTsKKwlwY2lfaW91bm1hcChwY2ksIGNhcmQtPnV3YmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKSwgVVdCQ0FQREFUQV9TSVpFKGNhcmQtPm5fY2FwcykpOworCWtmcmVlKGNhcmQpOworCXBjaV9kaXNhYmxlX21zaShwY2kpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd2hjaV9pZF90YWJsZVtdID0geworCXsgUENJX0RFVklDRV9DTEFTUyhQQ0lfQ0xBU1NfV0lSRUxFU1NfV0hDSSwgfjApIH0sCisJeyAwIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHdoY2lfaWRfdGFibGUpOworCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB3aGNpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgPSAid2hjaSIsCisJLmlkX3RhYmxlID0gd2hjaV9pZF90YWJsZSwKKwkucHJvYmUgICAgPSB3aGNpX3Byb2JlLAorCS5yZW1vdmUgICA9IHdoY2lfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2hjaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJndoY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdoY2lfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmd2hjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aGNpX2luaXQpOworbW9kdWxlX2V4aXQod2hjaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJXSENJIFVXQiBNdWx0aS1pbnRlcmZhY2UgQ29udHJvbGxlciBlbnVtZXJhdG9yIik7CitNT0RVTEVfQVVUSE9SKCJDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMdGQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi93bHAvTWFrZWZpbGUgYi9kcml2ZXJzL3V3Yi93bHAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyYzExZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3dscC9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACitvYmotJChDT05GSUdfVVdCX1dMUCkgOj0gd2xwLm8KKword2xwLW9ianMgOj0JXAorCWRyaXZlci5vCVwKKwllZGEubwkJXAorCW1lc3NhZ2VzLm8JXAorCXN5c2ZzLm8JCVwKKwl0eHJ4Lm8JCVwKKwl3bHAtbGMubwlcCisJd3NzLWxjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3dscC9kcml2ZXIuYyBiL2RyaXZlcnMvdXdiL3dscC9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhkNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivd2xwL2RyaXZlci5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBXaU1lZGlhIExvZ2ljYWwgTGluayBDb250cm9sIFByb3RvY29sIChXTFApCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnBvcmF0aW9uCisgKiBSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBMaWZlIGN5Y2xlIG9mIFdMUCBzdWJzdGFjaworICoKKyAqIEZJWE1FOiBEb2NzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitzdGF0aWMgaW50IF9faW5pdCB3bHBfc3Vic3lzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHdscF9zdWJzeXNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bHBfc3Vic3lzX2V4aXQodm9pZCkKK3sKKwlyZXR1cm47Cit9Cittb2R1bGVfZXhpdCh3bHBfc3Vic3lzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldpTWVkaWEgTG9naWNhbCBMaW5rIENvbnRyb2wgUHJvdG9jb2wgKFdMUCkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3dscC9lZGEuYyBiL2RyaXZlcnMvdXdiL3dscC9lZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGZlOGRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivd2xwL2VkYS5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKgorICogV1VTQiBXaXJlIEFkYXB0ZXI6IFdMUCBpbnRlcmZhY2UKKyAqIEV0aGVybmV0IHRvIGRldmljZSBhZGRyZXNzIGNhY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIGV0aGVybmV0IGFkZHJlc3NlcyB0byBkZXZpY2UgYWRkcmVzc2VzCisgKiBhbmQgYmFjayBiZWNhdXNlIHRoZXJlIGlzIG5vdCBleHBsaWNpdCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZXRoCisgKiBhZGRyZXNzZXMgdXNlZCBpbiB0aGUgRVRIIGZyYW1lcyBhbmQgdGhlIGRldmljZSBhZGRyZXNzZXMgKG5vLCBpdAorICogd291bGQgbm90IGhhdmUgYmVlbiBzaW1wbGVyIHRvIGZvcmNlIGFzIEVUSCBhZGRyZXNzIHRoZSBNQk9BIE1BQworICogYWRkcmVzcy4uLm5vLCBub3QgYXQgYWxsIDopLgorICoKKyAqIEEgZGV2aWNlIGhhcyBvbmUgTUJPQSBNQUMgYWRkcmVzcyBhbmQgb25lIGRldmljZSBhZGRyZXNzLiBJdCBpcyBwb3NzaWJsZQorICogZm9yIGEgZGV2aWNlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSB2aXJ0dWFsIE1BQyBhZGRyZXNzIChhbHRob3VnaCBhCisgKiB2aXJ0dWFsIGFkZHJlc3MgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSBNQk9BIE1BQyBhZGRyZXNzKS4gVGhlIGRldmljZQorICogYWRkcmVzcyBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhbW9uZyB0aGUgZGV2aWNlcyBpbiB0aGUgZXh0ZW5kZWQKKyAqIGJlYWNvbiBncm91cCAoc2VlIEVDTUEgMTcuMS4xKS4gV2UgdGh1cyB1c2UgdGhlIGRldmljZSBhZGRyZXNzIGFzIGluZGV4CisgKiB0byB0aGlzIGNhY2hlLiBXZSBkbyBhbGxvdyBzZWFyY2hpbmcgYmFzZWQgb24gdmlydHVhbCBhZGRyZXNzIGFzIHRoaXMKKyAqIGlzIGhvdyBFdGhlcm5ldCBmcmFtZXMgd2lsbCBiZSBhZGRyZXNzZWQuCisgKgorICogV2UgbmVlZCB0byBzdXBwb3J0IHZpcnR1YWwgRVVJLTQ4LiBBbHRob3VnaCwgcmlnaHQgbm93IHRoZSB2aXJ0dWFsCisgKiBFVUktNDggd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgYXMgdGhlIE1BQyBTQVAgYWRkcmVzcy4gVGhlIEVEQSBjYWNoZQorICogZW50cnkgdGh1cyBjb250YWlucyBhIE1BQyBTQVAgYWRkcmVzcyBhcyB3ZWxsIGFzIHRoZSB2aXJ0dWFsIGFkZHJlc3MKKyAqICh1c2VkIHRvIG1hcCB0aGUgbmV0d29yayBzdGFjayBhZGRyZXNzIHRvIGEgbmVpZ2hib3IpLiBXaGVuIHdlIG1vdmUKKyAqIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSB2aXJ0dWFsIE1BQyBvbiBhIGhvc3QgdGhlbiB0aGlzIG9yZ2FuaXphdGlvbgorICogd2lsbCBoYXZlIHRvIGNoYW5nZS4gUGVyaGFwcyBhIG5laWdoYm9yIGhhcyBhIGxpc3Qgb2YgV1NTcywgZWFjaCB3aXRoIGEKKyAqIHRhZyBhbmQgdmlydHVhbCBFVUktNDguCisgKgorICogT24gZGF0YSB0cmFuc21pc3Npb24KKyAqIGl0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBuZWlnaGJvciBpcyBjb25uZWN0ZWQgYW5kIHdoYXQgV1NTIGl0CisgKiBiZWxvbmdzIHRvLiBXaXRoIHRoaXMgd2Uga25vdyB3aGF0IHRhZyB0byBhZGQgdG8gdGhlIFdMUCBmcmFtZS4gU3RvcmluZworICogdGhlIFdTUyBpbiB0aGUgRURBIGNhY2hlIG1heSBiZSBvdmVya2lsbCBiZWNhdXNlIHdlIG9ubHkgc3VwcG9ydCBvbmUKKyAqIFdTUy4gSG9wZWZ1bGx5IHdlIHdpbGwgc3VwcG9ydCBtb3JlIHRoYW4gb25lIFdTUyBhdCBzb21lIHBvaW50LgorICogT24gZGF0YSByZWNlcHRpb24gaXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIFdTUyBiYXNlZCBvbgorICogdGhlIHRhZyBhbmQgYWRkcmVzcyBvZiB0aGUgdHJhbnNtaXR0aW5nIG5laWdoYm9yLgorICovCisKKyNkZWZpbmUgRF9MT0NBTCA1CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93bHAuaD4KKyNpbmNsdWRlICJ3bHAtaW50ZXJuYWwuaCIKKworCisvKiBGSVhNRTogY2FjaGUgaXMgbm90IHB1cmdlZCwgb25seSBvbiBkZXZpY2UgY2xvc2UgKi8KKworLyogRklYTUU6IGRvZXMgbm90IHNjYWxlLCBjaGFuZ2UgdG8gZHluYW1pYyBhcnJheSAqLworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgRURBIGNhY2hlCisgKgorICogQHJldHVybnMgMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IKKyAqCisgKiBDYWxsIHdoZW4gdGhlIGludGVyZmFjZSBpcyBiZWluZyBicm91Z2h0IHVwCisgKgorICogTk9URTogS2VlcCBpdCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsCisgKiAgICAgICBjaGFuZ2UgYW5kIGJlIG1vcmUgY29tcGxleC4KKyAqLwordm9pZCB3bHBfZWRhX2luaXQoc3RydWN0IHdscF9lZGEgKmVkYSkKK3sKKwlJTklUX0xJU1RfSEVBRCgmZWRhLT5jYWNoZSk7CisJc3Bpbl9sb2NrX2luaXQoJmVkYS0+bG9jayk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBFREEgY2FjaGUKKyAqCisgKiBAcmV0dXJucyAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvcgorICoKKyAqIENhbGxlZCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCBkb3duCisgKi8KK3ZvaWQgd2xwX2VkYV9yZWxlYXNlKHN0cnVjdCB3bHBfZWRhICplZGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgd2xwX2VkYV9ub2RlICppdHIsICpuZXh0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkYS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdHIsIG5leHQsICZlZGEtPmNhY2hlLCBsaXN0X25vZGUpIHsKKwkJbGlzdF9kZWwoJml0ci0+bGlzdF9ub2RlKTsKKwkJa2ZyZWUoaXRyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRhLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBBZGQgYW4gYWRkcmVzcyBtYXBwaW5nCisgKgorICogQHJldHVybnMgMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IKKyAqCisgKiBBbiBhZGRyZXNzIG1hcHBpbmcgaXMgaW5pdGlhbGx5IGNyZWF0ZWQgd2hlbiB0aGUgbmVpZ2hib3IgZGV2aWNlIGlzIHNlZW4KKyAqIGZvciB0aGUgZmlyc3QgdGltZSAoaXQgaXMgIm9uYWlyIikuIEF0IHRoaXMgdGltZSB0aGUgbmVpZ2hib3IgaXMgbm90CisgKiBjb25uZWN0ZWQgb3IgYXNzb2NpYXRlZCB3aXRoIGEgV1NTIHNvIHdlIG9ubHkgcG9wdWxhdGUgdGhlIEV0aGVybmV0IGFuZAorICogRGV2aWNlIGFkZHJlc3MgZmllbGRzLgorICoKKyAqLworaW50IHdscF9lZGFfY3JlYXRlX25vZGUoc3RydWN0IHdscF9lZGEgKmVkYSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgZXRoX2FkZHJbRVRIX0FMRU5dLAorCQkJY29uc3Qgc3RydWN0IHV3Yl9kZXZfYWRkciAqZGV2X2FkZHIpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHdscF9lZGFfbm9kZSAqaXRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oZGV2X2FkZHIgPT0gTlVMTCB8fCBldGhfYWRkciA9PSBOVUxMKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRhLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdHIsICZlZGEtPmNhY2hlLCBsaXN0X25vZGUpIHsKKwkJaWYgKCFtZW1jbXAoJml0ci0+ZGV2X2FkZHIsIGRldl9hZGRyLCBzaXplb2YoaXRyLT5kZXZfYWRkcikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVEQSBjYWNoZSBhbHJlYWR5IGNvbnRhaW5zIGVudHJ5ICIKKwkJCSAgICAgICAiZm9yIG5laWdoYm9yICUwMng6JTAyeFxuIiwKKwkJCSAgICAgICBkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCQkJcmVzdWx0ID0gLUVFWElTVDsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKwlpdHIgPSBremFsbG9jKHNpemVvZigqaXRyKSwgR0ZQX0FUT01JQyk7CisJaWYgKGl0ciAhPSBOVUxMKSB7CisJCW1lbWNweShpdHItPmV0aF9hZGRyLCBldGhfYWRkciwgc2l6ZW9mKGl0ci0+ZXRoX2FkZHIpKTsKKwkJaXRyLT5kZXZfYWRkciA9ICpkZXZfYWRkcjsKKwkJbGlzdF9hZGQoJml0ci0+bGlzdF9ub2RlLCAmZWRhLT5jYWNoZSk7CisJfSBlbHNlCisJCXJlc3VsdCA9IC1FTk9NRU07CitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkYS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZW1vdmUgZW50cnkgZnJvbSBFREEgY2FjaGUKKyAqCisgKiBUaGlzIGlzIGRvbmUgd2hlbiB0aGUgZGV2aWNlIGdvZXMgb2ZmIGFpci4KKyAqLwordm9pZCB3bHBfZWRhX3JtX25vZGUoc3RydWN0IHdscF9lZGEgKmVkYSwgY29uc3Qgc3RydWN0IHV3Yl9kZXZfYWRkciAqZGV2X2FkZHIpCit7CisJc3RydWN0IHdscF9lZGFfbm9kZSAqaXRyLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkYS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdHIsIG5leHQsICZlZGEtPmNhY2hlLCBsaXN0X25vZGUpIHsKKwkJaWYgKCFtZW1jbXAoJml0ci0+ZGV2X2FkZHIsIGRldl9hZGRyLCBzaXplb2YoaXRyLT5kZXZfYWRkcikpKSB7CisJCQlsaXN0X2RlbCgmaXRyLT5saXN0X25vZGUpOworCQkJa2ZyZWUoaXRyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkYS0+bG9jaywgZmxhZ3MpOworfQorCisvKgorICogVXBkYXRlIGFuIGFkZHJlc3MgbWFwcGluZworICoKKyAqIEByZXR1cm5zIDAgaWYgb2ssIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yCisgKi8KK2ludCB3bHBfZWRhX3VwZGF0ZV9ub2RlKHN0cnVjdCB3bHBfZWRhICplZGEsCisJCQljb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciwKKwkJCXN0cnVjdCB3bHBfd3NzICp3c3MsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyIHZpcnRfYWRkcltFVEhfQUxFTl0sCisJCQljb25zdCB1OCB0YWcsIGNvbnN0IGVudW0gd2xwX3dzc19jb25uZWN0IHN0YXRlKQoreworCWludCByZXN1bHQgPSAtRU5PRU5UOworCXN0cnVjdCB3bHBfZWRhX25vZGUgKml0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkYS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRyLCAmZWRhLT5jYWNoZSwgbGlzdF9ub2RlKSB7CisJCWlmICghbWVtY21wKCZpdHItPmRldl9hZGRyLCBkZXZfYWRkciwgc2l6ZW9mKGl0ci0+ZGV2X2FkZHIpKSkgeworCQkJLyogRm91bmQgaXQsIHVwZGF0ZSBpdCAqLworCQkJaXRyLT53c3MgPSB3c3M7CisJCQltZW1jcHkoaXRyLT52aXJ0X2FkZHIsIHZpcnRfYWRkciwKKwkJCSAgICAgICBzaXplb2YoaXRyLT52aXJ0X2FkZHIpKTsKKwkJCWl0ci0+dGFnID0gdGFnOworCQkJaXRyLT5zdGF0ZSA9IHN0YXRlOworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKwkvKiBOb3QgZm91bmQgKi8KK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRhLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFVwZGF0ZSBvbmx5IHN0YXRlIGZpZWxkIG9mIGFuIGFkZHJlc3MgbWFwcGluZworICoKKyAqIEByZXR1cm5zIDAgaWYgb2ssIDwgMCBlcnJubyBjb2RlIG9uIGVycm9yCisgKi8KK2ludCB3bHBfZWRhX3VwZGF0ZV9ub2RlX3N0YXRlKHN0cnVjdCB3bHBfZWRhICplZGEsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciwKKwkJCSAgICAgIGNvbnN0IGVudW0gd2xwX3dzc19jb25uZWN0IHN0YXRlKQoreworCWludCByZXN1bHQgPSAtRU5PRU5UOworCXN0cnVjdCB3bHBfZWRhX25vZGUgKml0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkYS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRyLCAmZWRhLT5jYWNoZSwgbGlzdF9ub2RlKSB7CisJCWlmICghbWVtY21wKCZpdHItPmRldl9hZGRyLCBkZXZfYWRkciwgc2l6ZW9mKGl0ci0+ZGV2X2FkZHIpKSkgeworCQkJLyogRm91bmQgaXQsIHVwZGF0ZSBpdCAqLworCQkJaXRyLT5zdGF0ZSA9IHN0YXRlOworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKwkvKiBOb3QgZm91bmQgKi8KK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRhLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybiBjb250ZW50cyBvZiBFREEgY2FjaGUgZW50cnkKKyAqCisgKiBAZGV2X2FkZHI6IGluZGV4IHRvIEVEQSBjYWNoZQorICogQGVkYV9lbnRyeTogcG9pbnRlciB0byB3aGVyZSBjb250ZW50cyBvZiBFREEgY2FjaGUgd2lsbCBiZSBjb3BpZWQKKyAqLworaW50IHdscF9jb3B5X2VkYV9ub2RlKHN0cnVjdCB3bHBfZWRhICplZGEsIHN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldl9hZGRyLAorCQkgICAgICBzdHJ1Y3Qgd2xwX2VkYV9ub2RlICplZGFfZW50cnkpCit7CisJaW50IHJlc3VsdCA9IC1FTk9FTlQ7CisJc3RydWN0IHdscF9lZGFfbm9kZSAqaXRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRhLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdHIsICZlZGEtPmNhY2hlLCBsaXN0X25vZGUpIHsKKwkJaWYgKCFtZW1jbXAoJml0ci0+ZGV2X2FkZHIsIGRldl9hZGRyLCBzaXplb2YoaXRyLT5kZXZfYWRkcikpKSB7CisJCQkqZWRhX2VudHJ5ID0gKml0cjsKKwkJCXJlc3VsdCA9IDA7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9CisJLyogTm90IGZvdW5kICovCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkYS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBFeGVjdXRlIGZ1bmN0aW9uIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBjYWNoZQorICoKKyAqIEBmdW5jdGlvbjogZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBlbGVtZW50IG9mIGNhY2hlIChtdXN0IGJlIGF0b21pYykKKyAqIEBwcml2OiAgICAgcHJpdmF0ZSBkYXRhIG9mIGZ1bmN0aW9uCisgKiBAcmV0dXJuczogIHJlc3VsdCBvZiBmaXJzdCBmdW5jdGlvbiB0aGF0IGZhaWxlZCwgb3IgbGFzdCBmdW5jdGlvbgorICogICAgICAgICAgICBleGVjdXRlZCBpZiBubyBmdW5jdGlvbiBmYWlsZWQuCisgKgorICogU3RvcCBleGVjdXRpbmcgd2hlbiBmdW5jdGlvbiByZXR1cm5zIGVycm9yIGZvciBhbnkgZWxlbWVudCBpbiBjYWNoZS4KKyAqCisgKiBJTVBPUlRBTlQ6IFdlIGFyZSB1c2luZyBhIHNwaW5sb2NrIGhlcmU6IHRoZSBmdW5jdGlvbiBleGVjdXRlZCBvbiBlYWNoCisgKiBlbGVtZW50IGhhcyB0byBiZSBhdG9taWMuCisgKi8KK2ludCB3bHBfZWRhX2Zvcl9lYWNoKHN0cnVjdCB3bHBfZWRhICplZGEsIHdscF9lZGFfZm9yX2VhY2hfZiBmdW5jdGlvbiwKKwkJICAgICB2b2lkICpwcml2KQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCB3bHAgKndscCA9IGNvbnRhaW5lcl9vZihlZGEsIHN0cnVjdCB3bHAsIGVkYSk7CisJc3RydWN0IHdscF9lZGFfbm9kZSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGEtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZWRhLT5jYWNoZSwgbGlzdF9ub2RlKSB7CisJCXJlc3VsdCA9ICgqZnVuY3Rpb24pKHdscCwgZW50cnksIHByaXYpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogRXhlY3V0ZSBmdW5jdGlvbiBmb3Igc2luZ2xlIGVsZW1lbnQgaW4gdGhlIGNhY2hlIChyZXR1cm4gZGV2IGFkZHIpCisgKgorICogQHZpcnRfYWRkcjogaW5kZXggaW50byBFREEgY2FjaGUgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggZWxlbWVudCB0bworICogICAgICAgICAgICAgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gb24KKyAqIEBkZXZfYWRkcjogZGV2aWNlIGFkZHJlc3Mgb2YgZWxlbWVudCBpbiBjYWNoZSB3aWxsIGJlIHJldHVybmVkIHVzaW5nCisgKiAgICAgICAgICAgIEBkZXZfYWRkcgorICogQGZ1bmN0aW9uOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGVsZW1lbnQgb2YgY2FjaGUgKG11c3QgYmUgYXRvbWljKQorICogQHByaXY6ICAgICBwcml2YXRlIGRhdGEgb2YgZnVuY3Rpb24KKyAqIEByZXR1cm5zOiAgcmVzdWx0IG9mIGZ1bmN0aW9uCisgKgorICogSU1QT1JUQU5UOiBXZSBhcmUgdXNpbmcgYSBzcGlubG9jayBoZXJlOiB0aGUgZnVuY3Rpb24gZXhlY3V0ZWQgb24gdGhlCisgKiBlbGVtZW50IGhhcyB0byBiZSBhdG9taWMuCisgKi8KK2ludCB3bHBfZWRhX2Zvcl92aXJ0dWFsKHN0cnVjdCB3bHBfZWRhICplZGEsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyIHZpcnRfYWRkcltFVEhfQUxFTl0sCisJCQlzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciwKKwkJCXdscF9lZGFfZm9yX2VhY2hfZiBmdW5jdGlvbiwKKwkJCXZvaWQgKnByaXYpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHdscCAqd2xwID0gY29udGFpbmVyX29mKGVkYSwgc3RydWN0IHdscCwgZWRhKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHdscF9lZGFfbm9kZSAqaXRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGEtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ciwgJmVkYS0+Y2FjaGUsIGxpc3Rfbm9kZSkgeworCQlpZiAoIW1lbWNtcChpdHItPnZpcnRfYWRkciwgdmlydF9hZGRyLAorCQkJICAgc2l6ZW9mKGl0ci0+dmlydF9hZGRyKSkpIHsKKwkJCWRfcHJpbnRmKDYsIGRldiwgIkVEQTogbG9va2luZyBmb3IgIgorCQkJICAgICAgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBoaXQgJTAyeDolMDJ4ICIKKwkJCSAgICAgICAid3NzICVwIHRhZyAweCUwMnggc3RhdGUgJXVcbiIsCisJCQkgICAgICAgdmlydF9hZGRyWzBdLCB2aXJ0X2FkZHJbMV0sCisJCQkgICAgICAgdmlydF9hZGRyWzJdLCB2aXJ0X2FkZHJbM10sCisJCQkgICAgICAgdmlydF9hZGRyWzRdLCB2aXJ0X2FkZHJbNV0sCisJCQkgICAgICAgaXRyLT5kZXZfYWRkci5kYXRhWzFdLAorCQkJICAgICAgIGl0ci0+ZGV2X2FkZHIuZGF0YVswXSwgaXRyLT53c3MsCisJCQkgICAgICAgaXRyLT50YWcsIGl0ci0+c3RhdGUpOworCQkJcmVzdWx0ID0gKCpmdW5jdGlvbikod2xwLCBpdHIsIHByaXYpOworCQkJKmRldl9hZGRyID0gaXRyLT5kZXZfYWRkcjsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRfcHJpbnRmKDYsIGRldiwgIkVEQTogbG9va2luZyBmb3IgIgorCQkJICAgICAgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAiCisJCQkgICAgICAgImFnYWluc3QgIgorCQkJICAgICAgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBtaXNzXG4iLAorCQkJICAgICAgIHZpcnRfYWRkclswXSwgdmlydF9hZGRyWzFdLAorCQkJICAgICAgIHZpcnRfYWRkclsyXSwgdmlydF9hZGRyWzNdLAorCQkJICAgICAgIHZpcnRfYWRkcls0XSwgdmlydF9hZGRyWzVdLAorCQkJICAgICAgIGl0ci0+dmlydF9hZGRyWzBdLCBpdHItPnZpcnRfYWRkclsxXSwKKwkJCSAgICAgICBpdHItPnZpcnRfYWRkclsyXSwgaXRyLT52aXJ0X2FkZHJbM10sCisJCQkgICAgICAgaXRyLT52aXJ0X2FkZHJbNF0sIGl0ci0+dmlydF9hZGRyWzVdKTsKKwl9CisJaWYgKCFmb3VuZCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJFREE6IEV0aCBhZGRyICUwMng6JTAyeDolMDJ4IgorCQkJCSI6JTAyeDolMDJ4OiUwMnggbm90IGZvdW5kLlxuIiwKKwkJCQl2aXJ0X2FkZHJbMF0sIHZpcnRfYWRkclsxXSwKKwkJCQl2aXJ0X2FkZHJbMl0sIHZpcnRfYWRkclszXSwKKwkJCQl2aXJ0X2FkZHJbNF0sIHZpcnRfYWRkcls1XSk7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkYS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpfX3dscF93c3NfY29ubmVjdF9zdGF0ZVtdID0geyAiV0xQX1dTU19VTkNPTk5FQ1RFRCIsCisJCQkJCSAgIldMUF9XU1NfQ09OTkVDVEVEIiwKKwkJCQkJICAiV0xQX1dTU19DT05ORUNUX0ZBSUxFRCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd2xwX3dzc19jb25uZWN0X3N0YXRlX3N0cih1bnNpZ25lZCBpZCkKK3sKKwlpZiAoaWQgPj0gQVJSQVlfU0laRShfX3dscF93c3NfY29ubmVjdF9zdGF0ZSkpCisJCXJldHVybiAidW5rbm93biBXU1MgY29ubmVjdGlvbiBzdGF0ZSI7CisJcmV0dXJuIF9fd2xwX3dzc19jb25uZWN0X3N0YXRlW2lkXTsKK30KKworLyoKKyAqIFZpZXcgRURBIGNhY2hlIGZyb20gdXNlciBzcGFjZQorICoKKyAqIEEgZGVidWdnaW5nIGZlYXR1cmUgdG8gZ2l2ZSB1c2VyIHZpc2liaWxpdHkgaW50byB0aGUgRURBIGNhY2hlLiBBbHNvCisgKiB1c2VkIHRvIGRpc3BsYXkgbWVtYmVycyBvZiBXU1MgdG8gdXNlciAoY2FsbGVkIGZyb20gd2xwX3dzc19tZW1iZXJzX3Nob3coKSkKKyAqLworc3NpemVfdCB3bHBfZWRhX3Nob3coc3RydWN0IHdscCAqd2xwLCBjaGFyICpidWYpCit7CisJc3NpemVfdCByZXN1bHQgPSAwOworCXN0cnVjdCB3bHBfZWRhX25vZGUgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHdscF9lZGEgKmVkYSA9ICZ3bHAtPmVkYTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRhLT5sb2NrLCBmbGFncyk7CisJcmVzdWx0ID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiI2V0aF9hZGRyIGRldl9hZGRyIHdzc19wdHIgIgorCQkJICAgInRhZyBzdGF0ZSB2aXJ0X2FkZHJcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZlZGEtPmNhY2hlLCBsaXN0X25vZGUpIHsKKwkJcmVzdWx0ICs9IHNjbnByaW50ZihidWYgKyByZXN1bHQsIFBBR0VfU0laRSAtIHJlc3VsdCwKKwkJCQkgICAgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4ICUwMng6JTAyeCAiCisJCQkJICAgICIlcCAweCUwMnggJXMgIgorCQkJCSAgICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJICAgIGVudHJ5LT5ldGhfYWRkclswXSwgZW50cnktPmV0aF9hZGRyWzFdLAorCQkJCSAgICBlbnRyeS0+ZXRoX2FkZHJbMl0sIGVudHJ5LT5ldGhfYWRkclszXSwKKwkJCQkgICAgZW50cnktPmV0aF9hZGRyWzRdLCBlbnRyeS0+ZXRoX2FkZHJbNV0sCisJCQkJICAgIGVudHJ5LT5kZXZfYWRkci5kYXRhWzFdLAorCQkJCSAgICBlbnRyeS0+ZGV2X2FkZHIuZGF0YVswXSwgZW50cnktPndzcywKKwkJCQkgICAgZW50cnktPnRhZywKKwkJCQkgICAgd2xwX3dzc19jb25uZWN0X3N0YXRlX3N0cihlbnRyeS0+c3RhdGUpLAorCQkJCSAgICBlbnRyeS0+dmlydF9hZGRyWzBdLCBlbnRyeS0+dmlydF9hZGRyWzFdLAorCQkJCSAgICBlbnRyeS0+dmlydF9hZGRyWzJdLCBlbnRyeS0+dmlydF9hZGRyWzNdLAorCQkJCSAgICBlbnRyeS0+dmlydF9hZGRyWzRdLCBlbnRyeS0+dmlydF9hZGRyWzVdKTsKKwkJaWYgKHJlc3VsdCA+PSBQQUdFX1NJWkUpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRhLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdscF9lZGFfc2hvdyk7CisKKy8qCisgKiBBZGQgbmV3IEVEQSBjYWNoZSBlbnRyeSBiYXNlZCBvbiB1c2VyIGlucHV0IGluIHN5c2ZzCisgKgorICogU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWdnaW5nLgorICoKKyAqIFRoZSBXU1MgaXMgYXNzdW1lZCB0byBiZSB0aGUgb25seSBXU1Mgc3VwcG9ydGVkLiBUaGlzIG5lZWRzIHRvIGJlCisgKiByZWRlc2lnbmVkIHdoZW4gd2Ugc3VwcG9ydCBtb3JlIHRoYW4gb25lIFdTUy4KKyAqLworc3NpemVfdCB3bHBfZWRhX3N0b3JlKHN0cnVjdCB3bHAgKndscCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwlzdHJ1Y3Qgd2xwX2VkYSAqZWRhID0gJndscC0+ZWRhOworCXU4IGV0aF9hZGRyWzZdOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgZGV2X2FkZHI7CisJdTggdGFnOworCXVuc2lnbmVkIHN0YXRlOworCisJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwgIiUwMmhoeDolMDJoaHg6JTAyaGh4OiUwMmhoeDolMDJoaHg6JTAyaGh4ICIKKwkJCSIlMDJoaHg6JTAyaGh4ICUwMmhoeCAldVxuIiwKKwkJCSZldGhfYWRkclswXSwgJmV0aF9hZGRyWzFdLAorCQkJJmV0aF9hZGRyWzJdLCAmZXRoX2FkZHJbM10sCisJCQkmZXRoX2FkZHJbNF0sICZldGhfYWRkcls1XSwKKwkJCSZkZXZfYWRkci5kYXRhWzFdLCAmZGV2X2FkZHIuZGF0YVswXSwgJnRhZywgJnN0YXRlKTsKKwlzd2l0Y2ggKHJlc3VsdCkgeworCWNhc2UgNjogLyogbm8gZGV2IGFkZHIgc3BlY2lmaWVkIC0tIHJlbW92ZSBlbnRyeSBOT1QgSU1QTEVNRU5URUQgKi8KKwkJLypyZXN1bHQgPSB3bHBfZWRhX3JtKGVkYSwgZXRoX2FkZHIsICZkZXZfYWRkcik7Ki8KKwkJcmVzdWx0ID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJc3RhdGUgPSBzdGF0ZSA+PSAxID8gMSA6IDA7CisJCXJlc3VsdCA9IHdscF9lZGFfY3JlYXRlX25vZGUoZWRhLCBldGhfYWRkciwgJmRldl9hZGRyKTsKKwkJaWYgKHJlc3VsdCA8IDAgJiYgcmVzdWx0ICE9IC1FRVhJU1QpCisJCQlnb3RvIGVycm9yOworCQkvKiBTZXQgdmlydHVhbCBhZGRyIHRvIGJlIHNhbWUgYXMgTUFDICovCisJCXJlc3VsdCA9IHdscF9lZGFfdXBkYXRlX25vZGUoZWRhLCAmZGV2X2FkZHIsICZ3bHAtPndzcywKKwkJCQkJICAgICBldGhfYWRkciwgdGFnLCBzdGF0ZSk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogYmFkIGZvcm1hdCAqLworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0KK2Vycm9yOgorCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogc2l6ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdscF9lZGFfc3RvcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2Ivd2xwL21lc3NhZ2VzLmMgYi9kcml2ZXJzL3V3Yi93bHAvbWVzc2FnZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjRjYjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivd2xwL21lc3NhZ2VzLmMKQEAgLTAsMCArMSwxOTQ2IEBACisvKgorICogV2lNZWRpYSBMb2dpY2FsIExpbmsgQ29udHJvbCBQcm90b2NvbCAoV0xQKQorICogTWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHBhcnNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqIFJlaW5ldHRlIENoYXRyZSA8cmVpbmV0dGUuY2hhdHJlQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBkb2NzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dscC5oPgorI2RlZmluZSBEX0xPQ0FMIDYKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKyNpbmNsdWRlICJ3bHAtaW50ZXJuYWwuaCIKKworc3RhdGljCitjb25zdCBjaGFyICpfX3dscF9hc3NvY19mcmFtZVtdID0geworCVtXTFBfQVNTT0NfRDFdID0gIldMUF9BU1NPQ19EMSIsCisJW1dMUF9BU1NPQ19EMl0gPSAiV0xQX0FTU09DX0QyIiwKKwlbV0xQX0FTU09DX00xXSA9ICJXTFBfQVNTT0NfTTEiLAorCVtXTFBfQVNTT0NfTTJdID0gIldMUF9BU1NPQ19NMiIsCisJW1dMUF9BU1NPQ19NM10gPSAiV0xQX0FTU09DX00zIiwKKwlbV0xQX0FTU09DX000XSA9ICJXTFBfQVNTT0NfTTQiLAorCVtXTFBfQVNTT0NfTTVdID0gIldMUF9BU1NPQ19NNSIsCisJW1dMUF9BU1NPQ19NNl0gPSAiV0xQX0FTU09DX002IiwKKwlbV0xQX0FTU09DX003XSA9ICJXTFBfQVNTT0NfTTciLAorCVtXTFBfQVNTT0NfTThdID0gIldMUF9BU1NPQ19NOCIsCisJW1dMUF9BU1NPQ19GMF0gPSAiV0xQX0FTU09DX0YwIiwKKwlbV0xQX0FTU09DX0UxXSA9ICJXTFBfQVNTT0NfRTEiLAorCVtXTFBfQVNTT0NfRTJdID0gIldMUF9BU1NPQ19FMiIsCisJW1dMUF9BU1NPQ19DMV0gPSAiV0xQX0FTU09DX0MxIiwKKwlbV0xQX0FTU09DX0MyXSA9ICJXTFBfQVNTT0NfQzIiLAorCVtXTFBfQVNTT0NfQzNdID0gIldMUF9BU1NPQ19DMyIsCisJW1dMUF9BU1NPQ19DNF0gPSAiV0xQX0FTU09DX0M0IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bHBfYXNzb2NfZnJhbWVfc3RyKHVuc2lnbmVkIGlkKQoreworCWlmIChpZCA+PSBBUlJBWV9TSVpFKF9fd2xwX2Fzc29jX2ZyYW1lKSkKKwkJcmV0dXJuICJ1bmtub3duIGFzc29jaWF0aW9uIGZyYW1lIjsKKwlyZXR1cm4gX193bHBfYXNzb2NfZnJhbWVbaWRdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqX193bHBfYXNzY19lcnJvcltdID0geworCSJub25lIiwKKwkiQXV0aGVudGljYXRvciBGYWlsdXJlIiwKKwkiUm9ndWUgYWN0aXZpdHkgc3VzcGVjdGVkIiwKKwkiRGV2aWNlIGJ1c3kiLAorCSJTZXR1cCBMb2NrZWQiLAorCSJSZWdpc3RyYXIgbm90IHJlYWR5IiwKKwkiSW52YWxpZCBXU1Mgc2VsZWN0aW9uIiwKKwkiTWVzc2FnZSB0aW1lb3V0IiwKKwkiRW5yb2xsbWVudCBzZXNzaW9uIHRpbWVvdXQiLAorCSJEZXZpY2UgcGFzc3dvcmQgaW52YWxpZCIsCisJIlVuc3VwcG9ydGVkIHZlcnNpb24iLAorCSJJbnRlcm5hbCBlcnJvciIsCisJIlVuZGVmaW5lZCBlcnJvciIsCisJIk51bWVyaWMgY29tcGFyaXNvbiBmYWlsdXJlIiwKKwkiV2FpdGluZyBmb3IgdXNlciBpbnB1dCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd2xwX2Fzc2NfZXJyb3Jfc3RyKHVuc2lnbmVkIGlkKQoreworCWlmIChpZCA+PSBBUlJBWV9TSVpFKF9fd2xwX2Fzc2NfZXJyb3IpKQorCQlyZXR1cm4gInVua25vd24gV0xQIGFzc29jaWF0aW9uIGVycm9yIjsKKwlyZXR1cm4gX193bHBfYXNzY19lcnJvcltpZF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bHBfc2V0X2F0dHJfaGRyKHN0cnVjdCB3bHBfYXR0cl9oZHIgKmhkciwgdW5zaWduZWQgdHlwZSwKKwkJCQkgICAgc2l6ZV90IGxlbikKK3sKKwloZHItPnR5cGUgPSBjcHVfdG9fbGUxNih0eXBlKTsKKwloZHItPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlbik7Cit9CisKKy8qCisgKiBQb3B1bGF0ZSBmaWVsZHMgb2YgYSBjb25zdGFudCBzaXplZCBhdHRyaWJ1dGUKKyAqCisgKiBAcmV0dXJuczogdG90YWwgc2l6ZSBvZiBhdHRyaWJ1dGUgaW5jbHVkaW5nIHNpemUgb2YgbmV3IHZhbHVlCisgKgorICogV2UgaGF2ZSB0d28gaW5zdGFuY2VzIG9mIHRoaXMgZnVuY3Rpb24gKHdscF9wc2V0IGFuZCB3bHBfc2V0KTogb25lIHRha2VzCisgKiB0aGUgdmFsdWUgYXMgYSBwYXJhbWV0ZXIsIHRoZSBvdGhlciB0YWtlcyBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGFzCisgKiBwYXJhbWV0ZXIuIFRoZXkgdGh1cyBvbmx5IGRpZmZlciBpbiBob3cgdGhlIHZhbHVlIGlzIGFzc2lnbmVkIHRvIHRoZQorICogYXR0cmlidXRlLgorICoKKyAqIFdlIHVzZSBzaXplb2YoKmF0dHIpIC0gc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl9oZHIpIGluc3RlYWQgb2YKKyAqIHNpemVvZih0eXBlKSB0byBiZSBhYmxlIHRvIHVzZSB0aGlzIHNhbWUgY29kZSBmb3IgdGhlIHN0cnVjdHVyZXMgdGhhdAorICogY29udGFpbiA4Yml0IGVudW0gdmFsdWVzIGFuZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCBwb2ludGVyIHR5cGVzLgorICovCisjZGVmaW5lIHdscF9zZXQodHlwZSwgdHlwZV9jb2RlLCBuYW1lKQkJCQkJXAorc3RhdGljIHNpemVfdCB3bHBfc2V0XyMjbmFtZShzdHJ1Y3Qgd2xwX2F0dHJfIyNuYW1lICphdHRyLCB0eXBlIHZhbHVlKQlcCit7CQkJCQkJCQkJXAorCWRfZm5zdGFydCg2LCBOVUxMLCAiKGF0dHJpYnV0ZSAlcClcbiIsIGF0dHIpOwkJCVwKKwl3bHBfc2V0X2F0dHJfaGRyKCZhdHRyLT5oZHIsIHR5cGVfY29kZSwJCQkJXAorCQkJIHNpemVvZigqYXR0cikgLSBzaXplb2Yoc3RydWN0IHdscF9hdHRyX2hkcikpOwlcCisJYXR0ci0+bmFtZSA9IHZhbHVlOwkJCQkJCVwKKwlkX2R1bXAoNiwgTlVMTCwgYXR0ciwgc2l6ZW9mKCphdHRyKSk7CQkJCVwKKwlkX2ZuZW5kKDYsIE5VTEwsICIoYXR0cmlidXRlICVwKVxuIiwgYXR0cik7CQkJXAorCXJldHVybiBzaXplb2YoKmF0dHIpOwkJCQkJCVwKK30KKworI2RlZmluZSB3bHBfcHNldCh0eXBlLCB0eXBlX2NvZGUsIG5hbWUpCQkJCQlcCitzdGF0aWMgc2l6ZV90IHdscF9zZXRfIyNuYW1lKHN0cnVjdCB3bHBfYXR0cl8jI25hbWUgKmF0dHIsIHR5cGUgdmFsdWUpCVwKK3sJCQkJCQkJCQlcCisJZF9mbnN0YXJ0KDYsIE5VTEwsICIoYXR0cmlidXRlICVwKVxuIiwgYXR0cik7CQkJXAorCXdscF9zZXRfYXR0cl9oZHIoJmF0dHItPmhkciwgdHlwZV9jb2RlLAkJCQlcCisJCQkgc2l6ZW9mKCphdHRyKSAtIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfaGRyKSk7CVwKKwlhdHRyLT5uYW1lID0gKnZhbHVlOwkJCQkJCVwKKwlkX2R1bXAoNiwgTlVMTCwgYXR0ciwgc2l6ZW9mKCphdHRyKSk7CQkJCVwKKwlkX2ZuZW5kKDYsIE5VTEwsICIoYXR0cmlidXRlICVwKVxuIiwgYXR0cik7CQkJXAorCXJldHVybiBzaXplb2YoKmF0dHIpOwkJCQkJCVwKK30KKworLyoqCisgKiBQb3B1bGF0ZSBmaWVsZHMgb2YgYSB2YXJpYWJsZSBhdHRyaWJ1dGUKKyAqCisgKiBAcmV0dXJuczogdG90YWwgc2l6ZSBvZiBhdHRyaWJ1dGUgaW5jbHVkaW5nIHNpemUgb2YgbmV3IHZhbHVlCisgKgorICogUHJvdmlkZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBhcmVhIHJlc2VydmVkIGZvciB0aGUKKyAqIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUsIHRoZSBmaWVsZCBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUgdmFsdWUuIFRoZQorICogcmVzZXJ2ZWQgbWVtb3J5IGhhcyB0byBjb250YWluIGVub3VnaCBzcGFjZSBmb3IgdGhlIHZhbHVlLgorICovCisjZGVmaW5lIHdscF92c2V0KHR5cGUsIHR5cGVfY29kZSwgbmFtZSkJCQkJCVwKK3N0YXRpYyBzaXplX3Qgd2xwX3NldF8jI25hbWUoc3RydWN0IHdscF9hdHRyXyMjbmFtZSAqYXR0ciwgdHlwZSB2YWx1ZSwJXAorCQkJCXNpemVfdCBsZW4pCQkJCVwKK3sJCQkJCQkJCQlcCisJZF9mbnN0YXJ0KDYsIE5VTEwsICIoYXR0cmlidXRlICVwKVxuIiwgYXR0cik7CQkJXAorCXdscF9zZXRfYXR0cl9oZHIoJmF0dHItPmhkciwgdHlwZV9jb2RlLCBsZW4pOwkJCVwKKwltZW1jcHkoYXR0ci0+bmFtZSwgdmFsdWUsIGxlbik7CQkJCQlcCisJZF9kdW1wKDYsIE5VTEwsIGF0dHIsIHNpemVvZigqYXR0cikgKyBsZW4pOwkJCVwKKwlkX2ZuZW5kKDYsIE5VTEwsICIoYXR0cmlidXRlICVwKVxuIiwgYXR0cik7CQkJXAorCXJldHVybiBzaXplb2YoKmF0dHIpICsgbGVuOwkJCQkJXAorfQorCit3bHBfdnNldChjaGFyICosIFdMUF9BVFRSX0RFVl9OQU1FLCBkZXZfbmFtZSkKK3dscF92c2V0KGNoYXIgKiwgV0xQX0FUVFJfTUFOVUYsIG1hbnVmYWN0dXJlcikKK3dscF9zZXQoZW51bSB3bHBfYXNzb2NfdHlwZSwgV0xQX0FUVFJfTVNHX1RZUEUsIG1zZ190eXBlKQord2xwX3ZzZXQoY2hhciAqLCBXTFBfQVRUUl9NT0RFTF9OQU1FLCBtb2RlbF9uYW1lKQord2xwX3ZzZXQoY2hhciAqLCBXTFBfQVRUUl9NT0RFTF9OUiwgbW9kZWxfbnIpCit3bHBfdnNldChjaGFyICosIFdMUF9BVFRSX1NFUklBTCwgc2VyaWFsKQord2xwX3ZzZXQoY2hhciAqLCBXTFBfQVRUUl9XU1NfTkFNRSwgd3NzX25hbWUpCit3bHBfcHNldChzdHJ1Y3Qgd2xwX3V1aWQgKiwgV0xQX0FUVFJfVVVJRF9FLCB1dWlkX2UpCit3bHBfcHNldChzdHJ1Y3Qgd2xwX3V1aWQgKiwgV0xQX0FUVFJfVVVJRF9SLCB1dWlkX3IpCit3bHBfcHNldChzdHJ1Y3Qgd2xwX3V1aWQgKiwgV0xQX0FUVFJfV1NTSUQsIHdzc2lkKQord2xwX3BzZXQoc3RydWN0IHdscF9kZXZfdHlwZSAqLCBXTFBfQVRUUl9QUklfREVWX1RZUEUsIHByaW1fZGV2X3R5cGUpCisvKndscF9wc2V0KHN0cnVjdCB3bHBfZGV2X3R5cGUgKiwgV0xQX0FUVFJfU0VDX0RFVl9UWVBFLCBzZWNfZGV2X3R5cGUpKi8KK3dscF9zZXQodTgsIFdMUF9BVFRSX1dMUF9WRVIsIHZlcnNpb24pCit3bHBfc2V0KGVudW0gd2xwX2Fzc2NfZXJyb3IsIFdMUF9BVFRSX1dMUF9BU1NDX0VSUiwgd2xwX2Fzc2NfZXJyKQord2xwX3NldChlbnVtIHdscF93c3Nfc2VsX210aGQsIFdMUF9BVFRSX1dTU19TRUxfTVRIRCwgd3NzX3NlbF9tdGhkKQord2xwX3NldCh1OCwgV0xQX0FUVFJfQUNDX0VOUkwsIGFjY2VwdF9lbnJsKQord2xwX3NldCh1OCwgV0xQX0FUVFJfV1NTX1NFQ19TVEFULCB3c3Nfc2VjX3N0YXR1cykKK3dscF9wc2V0KHN0cnVjdCB1d2JfbWFjX2FkZHIgKiwgV0xQX0FUVFJfV1NTX0JDQVNULCB3c3NfYmNhc3QpCit3bHBfcHNldChzdHJ1Y3Qgd2xwX25vbmNlICosIFdMUF9BVFRSX0VOUkxfTk9OQ0UsIGVub25jZSkKK3dscF9wc2V0KHN0cnVjdCB3bHBfbm9uY2UgKiwgV0xQX0FUVFJfUkVHX05PTkNFLCBybm9uY2UpCit3bHBfc2V0KHU4LCBXTFBfQVRUUl9XU1NfVEFHLCB3c3NfdGFnKQord2xwX3BzZXQoc3RydWN0IHV3Yl9tYWNfYWRkciAqLCBXTFBfQVRUUl9XU1NfVklSVCwgd3NzX3ZpcnQpCisKKy8qKgorICogRmlsbCBpbiB0aGUgV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZXMKKyAqCisgKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IG9uZSBXU1MsIGFuZCB0aGlzIGlzIGFzc3VtZWQgaW4gdGhpcyBmdW5jdGlvbgorICogdGhhdCBjYW4gcG9wdWxhdGUgb25seSBvbmUgV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNpemVfdCB3bHBfc2V0X3dzc19pbmZvKHN0cnVjdCB3bHBfYXR0cl93c3NfaW5mbyAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgd2xwX3dzcyAqd3NzKQoreworCXNpemVfdCBkYXRhbGVuOworCXZvaWQgKnB0ciA9IGF0dHItPndzc19pbmZvOworCXNpemVfdCB1c2VkID0gc2l6ZW9mKCphdHRyKTsKKwlkX2Zuc3RhcnQoNiwgTlVMTCwgIihhdHRyaWJ1dGUgJXApXG4iLCBhdHRyKTsKKwlkYXRhbGVuID0gc2l6ZW9mKHN0cnVjdCB3bHBfd3NzX2luZm8pICsgc3RybGVuKHdzcy0+bmFtZSk7CisJd2xwX3NldF9hdHRyX2hkcigmYXR0ci0+aGRyLCBXTFBfQVRUUl9XU1NfSU5GTywgZGF0YWxlbik7CisJdXNlZCA9IHdscF9zZXRfd3NzaWQocHRyLCAmd3NzLT53c3NpZCk7CisJdXNlZCArPSB3bHBfc2V0X3dzc19uYW1lKHB0ciArIHVzZWQsIHdzcy0+bmFtZSwgc3RybGVuKHdzcy0+bmFtZSkpOworCXVzZWQgKz0gd2xwX3NldF9hY2NlcHRfZW5ybChwdHIgKyB1c2VkLCB3c3MtPmFjY2VwdF9lbnJvbGwpOworCXVzZWQgKz0gd2xwX3NldF93c3Nfc2VjX3N0YXR1cyhwdHIgKyB1c2VkLCB3c3MtPnNlY3VyZV9zdGF0dXMpOworCXVzZWQgKz0gd2xwX3NldF93c3NfYmNhc3QocHRyICsgdXNlZCwgJndzcy0+YmNhc3QpOworCWRfZHVtcCg2LCBOVUxMLCBhdHRyLCBzaXplb2YoKmF0dHIpICsgZGF0YWxlbik7CisJZF9mbmVuZCg2LCBOVUxMLCAiKGF0dHJpYnV0ZSAlcCwgdXNlZCAlZClcbiIsCisJCWF0dHIsIChpbnQpKHNpemVvZigqYXR0cikgKyB1c2VkKSk7CisJcmV0dXJuIHNpemVvZigqYXR0cikgKyB1c2VkOworfQorCisvKioKKyAqIFZlcmlmeSBhdHRyaWJ1dGUgaGVhZGVyCisgKgorICogQGhkcjogICAgIFBvaW50ZXIgdG8gYXR0cmlidXRlIGhlYWRlciB0aGF0IHdpbGwgYmUgdmVyaWZpZWQuCisgKiBAdHlwZTogICAgRXhwZWN0ZWQgYXR0cmlidXRlIHR5cGUuCisgKiBAbGVuOiAgICAgRXhwZWN0ZWQgbGVuZ3RoIG9mIGF0dHJpYnV0ZSB2YWx1ZSAoZXhjbHVkaW5nIGhlYWRlcikuCisgKgorICogTW9zdCBhdHRyaWJ1dGUgdmFsdWVzIGhhdmUgYSBrbm93biBsZW5ndGggZXZlbiB3aGVuIHRoZXkgZG8gaGF2ZSBhCisgKiBsZW5ndGggZmllbGQuIFRoaXMga25vd2xlZGdlIGNhbiBiZSB1c2VkIHZpYSB0aGlzIGZ1bmN0aW9uIHRvIHZlcmlmeQorICogdGhhdCB0aGUgbGVuZ3RoIGZpZWxkIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZhbHVlLgorICovCitzdGF0aWMgaW50IHdscF9jaGVja19hdHRyX2hkcihzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCB3bHBfYXR0cl9oZHIgKmhkciwKKwkJICAgICAgIGVudW0gd2xwX2F0dHJfdHlwZSB0eXBlLCB1bnNpZ25lZCBsZW4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCisJaWYgKGxlMTZfdG9fY3B1KGhkci0+dHlwZSkgIT0gdHlwZSkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5leHBlY3RlZCBoZWFkZXIgdHlwZS4gRXhwZWN0ZWQgIgorCQkJIiV1LCBnb3QgJXUuXG4iLCB0eXBlLCBsZTE2X3RvX2NwdShoZHItPnR5cGUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChsZTE2X3RvX2NwdShoZHItPmxlbmd0aCkgIT0gbGVuKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmV4cGVjdGVkIGxlbmd0aCBpbiBoZWFkZXIuIEV4cGVjdGVkICIKKwkJCSIldSwgZ290ICV1LlxuIiwgbGVuLCBsZTE2X3RvX2NwdShoZHItPmxlbmd0aCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2hlY2sgaWYgaGVhZGVyIG9mIFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUgdmFsaWQKKyAqCisgKiBAcmV0dXJuczogbGVuZ3RoIG9mIFdTUyBhdHRyaWJ1dGVzICh2YWx1ZSBvZiBsZW5ndGggYXR0cmlidXRlIGZpZWxkKSBpZgorICogICAgICAgICAgICAgdmFsaWQgV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZSBmb3VuZAorICogICAgICAgICAgIC1FTk9EQVRBIGlmIG5vIFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUgZm91bmQKKyAqICAgICAgICAgICAtRUlPIG90aGVyIGVycm9yIG9jY3VyZWQKKyAqCisgKiBUaGUgV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZSBpcyBvcHRpb25hbC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgcHJvdmlkZWQKKyAqIHdpdGggYSBwb2ludGVyIHRvIGRhdGEgdGhhdCBjb3VsZCBfcG90ZW50aWFsbHlfIGJlIGEgV1NTIGluZm9ybWF0aW9uCisgKiBhdHRyaWJ1dGUuIElmIGEgdmFsaWQgV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZSBpcyBmb3VuZCBpdCB3aWxsIHJldHVybgorICogMCwgaWYgbm8gV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZSBpcyBmb3VuZCBpdCB3aWxsIHJldHVybiAtRU5PREFUQSwgYW5kCisgKiBhbm90aGVyIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQgaWYgaXQgaXMgYSBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlLCBidXQKKyAqIHNvbWUgcGFyc2luZyBmYWlsdXJlIG9jY3VyZWQuCisgKi8KK3N0YXRpYyBpbnQgd2xwX2NoZWNrX3dzc19pbmZvX2F0dHJfaGRyKHN0cnVjdCB3bHAgKndscCwKKwkJCQkgICAgICAgc3RydWN0IHdscF9hdHRyX2hkciAqaGRyLCBzaXplX3QgYnVmbGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzaXplX3QgbGVuOworCWludCByZXN1bHQgPSAwOworCisJaWYgKGJ1ZmxlbiA8IHNpemVvZigqaGRyKSkgeworCQlkZXZfZXJyKGRldiwgIldMUDogTm90IGVub3VnaCBzcGFjZSBpbiBidWZmZXIgdG8gcGFyc2UiCisJCQkiIFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUgaGVhZGVyLlxuIik7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKwlpZiAobGUxNl90b19jcHUoaGRyLT50eXBlKSAhPSBXTFBfQVRUUl9XU1NfSU5GTykgeworCQkvKiBXU1MgaW5mb3JtYXRpb24gaXMgb3B0aW9uYWwgKi8KKwkJcmVzdWx0ID0gLUVOT0RBVEE7CisJCWdvdG8gb3V0OworCX0KKwlsZW4gPSBsZTE2X3RvX2NwdShoZHItPmxlbmd0aCk7CisJaWYgKGJ1ZmxlbiA8IHNpemVvZigqaGRyKSArIGxlbikgeworCQlkZXZfZXJyKGRldiwgIldMUDogTm90IGVub3VnaCBzcGFjZSBpbiBidWZmZXIgdG8gcGFyc2UgIgorCQkJInZhcmlhYmxlIGRhdGEuIEdvdCAlZCwgZXhwZWN0ZWQgJWQuXG4iLAorCQkJKGludClidWZsZW4sIChpbnQpKHNpemVvZigqaGRyKSArIGxlbikpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisJcmVzdWx0ID0gbGVuOworb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBHZXQgdmFsdWUgb2YgYXR0cmlidXRlIGZyb20gZml4ZWQgc2l6ZSBhdHRyaWJ1dGUgZmllbGQuCisgKgorICogQGF0dHI6ICAgIFBvaW50ZXIgdG8gYXR0cmlidXRlIGZpZWxkLgorICogQHZhbHVlOiAgIFBvaW50ZXIgdG8gdmFyaWFibGUgaW4gd2hpY2ggYXR0cmlidXRlIHZhbHVlIHdpbGwgYmUgcGxhY2VkLgorICogQGJ1ZmxlbjogIFNpemUgb2YgYnVmZmVyIGluIHdoaWNoIGF0dHJpYnV0ZSBmaWVsZCAoaW5jbHVkaW5nIGhlYWRlcikKKyAqICAgICAgICAgICBjYW4gYmUgZm91bmQuCisgKiBAcmV0dXJuczogQW1vdW50IG9mIGdpdmVuIGJ1ZmZlciBjb25zdW1lZCBieSBwYXJzaW5nIGZvciB0aGlzIGF0dHJpYnV0ZS4KKyAqCisgKiBUaGUgc2l6ZSBhbmQgdHlwZSBvZiB0aGUgdmFsdWUgaXMga25vd24gYnkgdGhlIHR5cGUgb2YgdGhlIGF0dHJpYnV0ZS4KKyAqLworI2RlZmluZSB3bHBfZ2V0KHR5cGUsIHR5cGVfY29kZSwgbmFtZSkJCQkJCVwKK3NzaXplX3Qgd2xwX2dldF8jI25hbWUoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX2F0dHJfIyNuYW1lICphdHRyLAlcCisJCSAgICAgIHR5cGUgKnZhbHVlLCBzc2l6ZV90IGJ1ZmxlbikJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsJCQlcCisJaWYgKGJ1ZmxlbiA8IDApCQkJCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCWlmIChidWZsZW4gPCBzaXplb2YoKmF0dHIpKSB7CQkJCQlcCisJCWRldl9lcnIoZGV2LCAiV0xQOiBOb3QgZW5vdWdoIHNwYWNlIGluIGJ1ZmZlciB0byBwYXJzZSIJXAorCQkJIiBhdHRyaWJ1dGUgZmllbGQuIE5lZWQgJWQsIHJlY2VpdmVkICV6dVxuIiwJXAorCQkJKGludClzaXplb2YoKmF0dHIpLCBidWZsZW4pOwkJCVwKKwkJcmV0dXJuIC1FSU87CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlpZiAod2xwX2NoZWNrX2F0dHJfaGRyKHdscCwgJmF0dHItPmhkciwgdHlwZV9jb2RlLAkJXAorCQkJICAgICAgIHNpemVvZihhdHRyLT5uYW1lKSkgPCAwKSB7CQlcCisJCWRldl9lcnIoZGV2LCAiV0xQOiBIZWFkZXIgdmVyaWZpY2F0aW9uIGZhaWxlZC4gXG4iKTsJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCSp2YWx1ZSA9IGF0dHItPm5hbWU7CQkJCQkJXAorCXJldHVybiBzaXplb2YoKmF0dHIpOwkJCQkJCVwKK30KKworI2RlZmluZSB3bHBfZ2V0X3NwYXJzZSh0eXBlLCB0eXBlX2NvZGUsIG5hbWUpIFwKKwlzdGF0aWMgd2xwX2dldCh0eXBlLCB0eXBlX2NvZGUsIG5hbWUpCisKKy8qKgorICogR2V0IHZhbHVlIG9mIGF0dHJpYnV0ZSBmcm9tIHZhcmlhYmxlIHNpemVkIGF0dHJpYnV0ZSBmaWVsZC4KKyAqCisgKiBAbWF4OiAgICAgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGlzIGF0dHJpYnV0ZS4gVGhpcyB2YWx1ZSBpcyBkaWN0YXRlZCBieQorICogICAgICAgICAgIHRoZSBtYXhpbXVtIHZhbHVlIGZyb20gdGhlIFdMUCBzcGVjaWZpY2F0aW9uLgorICoKKyAqIEBhdHRyOiAgICBQb2ludGVyIHRvIGF0dHJpYnV0ZSBmaWVsZC4KKyAqIEB2YWx1ZTogICBQb2ludGVyIHRvIHZhcmlhYmxlIHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZS4gVGhlIG1lbW9yeQorICogICAgICAgICAgIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gYWxsb2NhdGVkIGZvciB0aGlzIHZhbHVlLgorICogQGJ1ZmxlbjogIFNpemUgb2YgYnVmZmVyIGluIHdoaWNoIGF0dHJpYnV0ZSBmaWVsZCAoaW5jbHVkaW5nIGhlYWRlcikKKyAqICAgICAgICAgICBjYW4gYmUgZm91bmQuCisgKiBAcmV0dXJuczogQW1vdW50IG9mIGdpdmVuIGJ1ZmZlcmNvbnN1bWVkIGJ5IHBhcnNpbmcgZm9yIHRoaXMgYXR0cmlidXRlLgorICovCisjZGVmaW5lIHdscF92Z2V0KHR5cGVfdmFsLCB0eXBlX2NvZGUsIG5hbWUsIG1heCkJCQlcCitzdGF0aWMgc3NpemVfdCB3bHBfZ2V0XyMjbmFtZShzdHJ1Y3Qgd2xwICp3bHAsCQkJCVwKKwkJCSAgICAgIHN0cnVjdCB3bHBfYXR0cl8jI25hbWUgKmF0dHIsCQlcCisJCQkgICAgICB0eXBlX3ZhbCAqdmFsdWUsIHNzaXplX3QgYnVmbGVuKQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CQkJXAorCXNpemVfdCBsZW47CQkJCQkJCVwKKwlpZiAoYnVmbGVuIDwgMCkJCQkJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJaWYgKGJ1ZmxlbiA8IHNpemVvZigqYXR0cikpIHsJCQkJCVwKKwkJZGV2X2VycihkZXYsICJXTFA6IE5vdCBlbm91Z2ggc3BhY2UgaW4gYnVmZmVyIHRvIHBhcnNlIglcCisJCQkiIGhlYWRlci5cbiIpOwkJCQkJXAorCQlyZXR1cm4gLUVJTzsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWlmIChsZTE2X3RvX2NwdShhdHRyLT5oZHIudHlwZSkgIT0gdHlwZV9jb2RlKSB7CQkJXAorCQlkZXZfZXJyKGRldiwgIldMUDogVW5leHBlY3RlZCBhdHRyaWJ1dGUgdHlwZS4gR290ICV1LCAiCVwKKwkJCSJleHBlY3RlZCAldS5cbiIsIGxlMTZfdG9fY3B1KGF0dHItPmhkci50eXBlKSwJXAorCQkJdHlwZV9jb2RlKTsJCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlsZW4gPSBsZTE2X3RvX2NwdShhdHRyLT5oZHIubGVuZ3RoKTsJCQkJXAorCWlmIChsZW4gPiBtYXgpIHsJCQkJCQlcCisJCWRldl9lcnIoZGV2LCAiV0xQOiBBdHRyaWJ1dGUgbGFyZ2VyIHRoYW4gbWF4aW11bSAiCVwKKwkJCSJhbGxvd2VkLiBSZWNlaXZlZCAlenUsIG1heCBpcyAlZC5cbiIsIGxlbiwJXAorCQkJKGludCltYXgpOwkJCQkJXAorCQlyZXR1cm4gLUVGQklHOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJaWYgKGJ1ZmxlbiA8IHNpemVvZigqYXR0cikgKyBsZW4pIHsJCQkJXAorCQlkZXZfZXJyKGRldiwgIldMUDogTm90IGVub3VnaCBzcGFjZSBpbiBidWZmZXIgdG8gcGFyc2UgIlwKKwkJCSJ2YXJpYWJsZSBkYXRhLlxuIik7CQkJCVwKKwkJcmV0dXJuIC1FSU87CQkJCQkJXAorCX0JCQkJCQkJCVwKKwltZW1jcHkodmFsdWUsICh2b2lkICopIGF0dHIgKyBzaXplb2YoKmF0dHIpLCBsZW4pOwkJXAorCXJldHVybiBzaXplb2YoKmF0dHIpICsgbGVuOwkJCQkJXAorfQorCit3bHBfZ2V0KHU4LCBXTFBfQVRUUl9XTFBfVkVSLCB2ZXJzaW9uKQord2xwX2dldF9zcGFyc2UoZW51bSB3bHBfd3NzX3NlbF9tdGhkLCBXTFBfQVRUUl9XU1NfU0VMX01USEQsIHdzc19zZWxfbXRoZCkKK3dscF9nZXRfc3BhcnNlKHN0cnVjdCB3bHBfZGV2X3R5cGUsIFdMUF9BVFRSX1BSSV9ERVZfVFlQRSwgcHJpbV9kZXZfdHlwZSkKK3dscF9nZXRfc3BhcnNlKGVudW0gd2xwX2Fzc2NfZXJyb3IsIFdMUF9BVFRSX1dMUF9BU1NDX0VSUiwgd2xwX2Fzc2NfZXJyKQord2xwX2dldF9zcGFyc2Uoc3RydWN0IHdscF91dWlkLCBXTFBfQVRUUl9VVUlEX0UsIHV1aWRfZSkKK3dscF9nZXRfc3BhcnNlKHN0cnVjdCB3bHBfdXVpZCwgV0xQX0FUVFJfVVVJRF9SLCB1dWlkX3IpCit3bHBfZ2V0KHN0cnVjdCB3bHBfdXVpZCwgV0xQX0FUVFJfV1NTSUQsIHdzc2lkKQord2xwX2dldF9zcGFyc2UodTgsIFdMUF9BVFRSX0FDQ19FTlJMLCBhY2NlcHRfZW5ybCkKK3dscF9nZXRfc3BhcnNlKHU4LCBXTFBfQVRUUl9XU1NfU0VDX1NUQVQsIHdzc19zZWNfc3RhdHVzKQord2xwX2dldF9zcGFyc2Uoc3RydWN0IHV3Yl9tYWNfYWRkciwgV0xQX0FUVFJfV1NTX0JDQVNULCB3c3NfYmNhc3QpCit3bHBfZ2V0X3NwYXJzZSh1OCwgV0xQX0FUVFJfV1NTX1RBRywgd3NzX3RhZykKK3dscF9nZXRfc3BhcnNlKHN0cnVjdCB1d2JfbWFjX2FkZHIsIFdMUF9BVFRSX1dTU19WSVJULCB3c3NfdmlydCkKK3dscF9nZXRfc3BhcnNlKHN0cnVjdCB3bHBfbm9uY2UsIFdMUF9BVFRSX0VOUkxfTk9OQ0UsIGVub25jZSkKK3dscF9nZXRfc3BhcnNlKHN0cnVjdCB3bHBfbm9uY2UsIFdMUF9BVFRSX1JFR19OT05DRSwgcm5vbmNlKQorCisvKiBUaGUgYnVmZmVycyBmb3IgdGhlIGRldmljZSBpbmZvIGF0dHJpYnV0ZXMgY2FuIGJlIGZvdW5kIGluIHRoZQorICogd2xwX2RldmljZV9pbmZvIHN0cnVjdC4gVGhlc2UgYnVmZmVycyBjb250YWluIG9uZSBieXRlIG1vcmUgdGhhbiB0aGUKKyAqIG1heCBhbGxvd2VkIGJ5IHRoZSBzcGVjIC0gdGhpcyBpcyBkb25lIHRvIGJlIGFibGUgdG8gYWRkIHRoZQorICogdGVybWluYXRpbmcgXDAgZm9yIHVzZXIgZGlzcGxheS4gVGhpcyB0ZXJtaW5hdGluZyBieXRlIGlzIG5vdCByZXF1aXJlZAorICogaW4gdGhlIGFjdHVhbCBhdHRyaWJ1dGUgZmllbGQgKGJlY2F1c2UgaXQgaGFzIGEgbGVuZ3RoIGZpZWxkKSBzbyB0aGUKKyAqIG1heGltdW0gYWxsb3dlZCBmb3IgdGhpcyB2YWx1ZSBpcyBvbmUgbGVzcyB0aGFuIGl0cyBzaXplIGluIHRoZQorICogc3RydWN0dXJlLgorICovCit3bHBfdmdldChjaGFyLCBXTFBfQVRUUl9XU1NfTkFNRSwgd3NzX25hbWUsCisJIEZJRUxEX1NJWkVPRihzdHJ1Y3Qgd2xwX3dzcywgbmFtZSkgLSAxKQord2xwX3ZnZXQoY2hhciwgV0xQX0FUVFJfREVWX05BTUUsIGRldl9uYW1lLAorCSBGSUVMRF9TSVpFT0Yoc3RydWN0IHdscF9kZXZpY2VfaW5mbywgbmFtZSkgLSAxKQord2xwX3ZnZXQoY2hhciwgV0xQX0FUVFJfTUFOVUYsIG1hbnVmYWN0dXJlciwKKwkgRklFTERfU0laRU9GKHN0cnVjdCB3bHBfZGV2aWNlX2luZm8sIG1hbnVmYWN0dXJlcikgLSAxKQord2xwX3ZnZXQoY2hhciwgV0xQX0FUVFJfTU9ERUxfTkFNRSwgbW9kZWxfbmFtZSwKKwkgRklFTERfU0laRU9GKHN0cnVjdCB3bHBfZGV2aWNlX2luZm8sIG1vZGVsX25hbWUpIC0gMSkKK3dscF92Z2V0KGNoYXIsIFdMUF9BVFRSX01PREVMX05SLCBtb2RlbF9uciwKKwkgRklFTERfU0laRU9GKHN0cnVjdCB3bHBfZGV2aWNlX2luZm8sIG1vZGVsX25yKSAtIDEpCit3bHBfdmdldChjaGFyLCBXTFBfQVRUUl9TRVJJQUwsIHNlcmlhbCwKKwkgRklFTERfU0laRU9GKHN0cnVjdCB3bHBfZGV2aWNlX2luZm8sIHNlcmlhbCkgLSAxKQorCisvKioKKyAqIFJldHJpZXZlIFdTUyBOYW1lLCBBY2NlcHQgZW5yb2xsLCBTZWN1cmUgc3RhdHVzLCBCcm9hZGNhc3QgZnJvbSBXU1MgaW5mbworICoKKyAqIEBhdHRyOiBwb2ludGVyIHRvIFdTUyBuYW1lIGF0dHJpYnV0ZSBpbiBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlIGZpZWxkCisgKiBAaW5mbzogc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBkYXRhIGZyb20gV1NTIGluZm9ybWF0aW9uCisgKiAgICAgICAgZmllbGQgKFdTUyBuYW1lLCBBY2NlcHQgZW5yb2xsLCBzZWN1cmUgc3RhdHVzLCBicm9hZGNhc3QgYWRkcmVzcykKKyAqIEBidWZsZW46IHNpemUgb2YgYnVmZmVyCisgKgorICogQWx0aG91Z2ggdGhlIFdTU0lEIGF0dHJpYnV0ZSBmb3JtcyBwYXJ0IG9mIHRoZSBXU1MgaW5mbyBhdHRyaWJ1dGUgaXQgaXMKKyAqIHJldHJpZXZlZCBzZXBhcmF0ZWx5IGFuZCBzdG9yZWQgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24uCisgKi8KK3N0YXRpYyBzc2l6ZV90IHdscF9nZXRfd3NzX2luZm9fYXR0cnMoc3RydWN0IHdscCAqd2xwLAorCQkJCSAgICAgIHN0cnVjdCB3bHBfYXR0cl9oZHIgKmF0dHIsCisJCQkJICAgICAgc3RydWN0IHdscF93c3NfdG1wX2luZm8gKmluZm8sCisJCQkJICAgICAgc3NpemVfdCBidWZsZW4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXZvaWQgKnB0ciA9IGF0dHI7CisJc2l6ZV90IHVzZWQgPSAwOworCXNzaXplX3QgcmVzdWx0ID0gLUVJTlZBTDsKKworCWRfcHJpbnRmKDYsIGRldiwgIldMUDogV1NTIGluZm86IFJldHJpZXZpbmcgV1NTIG5hbWVcbiIpOworCXJlc3VsdCA9IHdscF9nZXRfd3NzX25hbWUod2xwLCBwdHIsIGluZm8tPm5hbWUsIGJ1Zmxlbik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gV1NTIG5hbWUgZnJvbSAiCisJCQkiV1NTIGluZm8gaW4gRDIgbWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl1c2VkICs9IHJlc3VsdDsKKwlkX3ByaW50Zig2LCBkZXYsICJXTFA6IFdTUyBpbmZvOiBSZXRyaWV2aW5nIGFjY2VwdCBlbnJvbGxcbiIpOworCXJlc3VsdCA9IHdscF9nZXRfYWNjZXB0X2Vucmwod2xwLCBwdHIgKyB1c2VkLCAmaW5mby0+YWNjZXB0X2Vucm9sbCwKKwkJCQkgICAgIGJ1ZmxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIGFjY2VwdGluZyAiCisJCQkiZW5yb2xsbWVudCBmcm9tIFdTUyBpbmZvIGluIEQyIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJaWYgKGluZm8tPmFjY2VwdF9lbnJvbGwgIT0gMCAmJiBpbmZvLT5hY2NlcHRfZW5yb2xsICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IGludmFsaWQgdmFsdWUgZm9yIGFjY2VwdGluZyAiCisJCQkiZW5yb2xsbWVudCBpbiBEMiBtZXNzYWdlLlxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCWRfcHJpbnRmKDYsIGRldiwgIldMUDogV1NTIGluZm86IFJldHJpZXZpbmcgc2VjdXJlIHN0YXR1c1xuIik7CisJcmVzdWx0ID0gd2xwX2dldF93c3Nfc2VjX3N0YXR1cyh3bHAsIHB0ciArIHVzZWQsICZpbmZvLT5zZWNfc3RhdHVzLAorCQkJCQlidWZsZW4gLSB1c2VkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBzZWN1cmUgIgorCQkJInN0YXR1cyBmcm9tIFdTUyBpbmZvIGluIEQyIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJaWYgKGluZm8tPnNlY19zdGF0dXMgIT0gMCAmJiBpbmZvLT5zZWNfc3RhdHVzICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IGludmFsaWQgdmFsdWUgZm9yIHNlY3VyZSAiCisJCQkic3RhdHVzIGluIEQyIG1lc3NhZ2UuXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJZF9wcmludGYoNiwgZGV2LCAiV0xQOiBXU1MgaW5mbzogUmV0cmlldmluZyBicm9hZGNhc3RcbiIpOworCXJlc3VsdCA9IHdscF9nZXRfd3NzX2JjYXN0KHdscCwgcHRyICsgdXNlZCwgJmluZm8tPmJjYXN0LAorCQkJCSAgIGJ1ZmxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIGJyb2FkY2FzdCAiCisJCQkiYWRkcmVzcyBmcm9tIFdTUyBpbmZvIGluIEQyIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJcmVzdWx0ID0gdXNlZDsKK2Vycm9yX3BhcnNlOgorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgbmV3IFdTU0lEIGVudHJ5IGZvciB0aGUgbmVpZ2hib3IsIGFsbG9jYXRlIHRlbXBvcmFyeSBzdG9yYWdlCisgKgorICogRWFjaCBuZWlnaGJvciBjYW4gaGF2ZSBtYW55IFdTUyBhY3RpdmUuIFdlIG1haW50YWluIGEgbGlzdCBvZiBXU1NJRHMKKyAqIGFkdmVydGlzZWQgYnkgbmVpZ2hib3IuIER1cmluZyBkaXNjb3Zlcnkgd2UgYWxzbyBjYWNoZSBpbmZvcm1hdGlvbiBhYm91dAorICogdGhlc2UgV1NTIGluIHRlbXBvcmFyeSBzdG9yYWdlLgorICoKKyAqIFRoZSB0ZW1wb3Jhcnkgc3RvcmFnZSB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgaXQgaGFzIGJlZW4gdXNlZCAoZWcuCisgKiBkaXNwbGF5ZWQgdG8gdXNlciksIHRoZSB3c3NpZCBlbGVtZW50IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHdoZW4KKyAqIHRoZSBuZWlnaGJvciBpcyByZWRpc2NvdmVyZWQgb3Igd2hlbiBpdCBkaXNhcHBlYXJzLgorICovCitzdGF0aWMgc3RydWN0IHdscF93c3NpZF9lICp3bHBfY3JlYXRlX3dzc2lkX2Uoc3RydWN0IHdscCAqd2xwLAorCQkJCQkgICAgICBzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKm5laWdoYm9yKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3Qgd2xwX3dzc2lkX2UgKndzc2lkX2U7CisKKwl3c3NpZF9lID0ga3phbGxvYyhzaXplb2YoKndzc2lkX2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAod3NzaWRfZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5ICIKKwkJCSJmb3IgV1NTIGluZm9ybWF0aW9uLlxuIik7CisJCWdvdG8gZXJyb3JfYWxsb2M7CisJfQorCXdzc2lkX2UtPmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xwX3dzc190bXBfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICh3c3NpZF9lLT5pbmZvID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgIgorCQkJImZvciB0ZW1wb3JhcnkgV1NTIGluZm9ybWF0aW9uLlxuIik7CisJCWtmcmVlKHdzc2lkX2UpOworCQl3c3NpZF9lID0gTlVMTDsKKwkJZ290byBlcnJvcl9hbGxvYzsKKwl9CisJbGlzdF9hZGQoJndzc2lkX2UtPm5vZGUsICZuZWlnaGJvci0+d3NzaWQpOworZXJyb3JfYWxsb2M6CisJcmV0dXJuIHdzc2lkX2U7Cit9CisKKy8qKgorICogUGFyc2UgV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZQorICoKKyAqIEBhdHRyOiBwb2ludGVyIHRvIFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUgaGVhZGVyCisgKiBAYnVmbGVuOiBzaXplIG9mIGJ1ZmZlciBpbiB3aGljaCBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlIGFwcGVhcnMKKyAqIEB3c3NpZDogd2lsbCBwbGFjZSB3c3NpZCBmcm9tIFdTUyBpbmZvIGF0dHJpYnV0ZSBpbiB0aGlzIGxvY2F0aW9uCisgKiBAd3NzX2luZm86IHdpbGwgcGxhY2Ugb3RoZXIgaW5mb3JtYXRpb24gZnJvbSBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlCisgKiBpbiB0aGlzIGxvY2F0aW9uCisgKgorICogbWVtb3J5IGZvciBAd3NzaWQgYW5kIEB3c3NfaW5mbyBtdXN0IGJlIGFsbG9jYXRlZCB3aGVuIGNhbGxpbmcgdGhpcworICovCitzdGF0aWMgc3NpemVfdCB3bHBfZ2V0X3dzc19pbmZvKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF9hdHRyX3dzc19pbmZvICphdHRyLAorCQkJCXNpemVfdCBidWZsZW4sIHN0cnVjdCB3bHBfdXVpZCAqd3NzaWQsCisJCQkJc3RydWN0IHdscF93c3NfdG1wX2luZm8gKndzc19pbmZvKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzc2l6ZV90IHJlc3VsdDsKKwlzaXplX3QgbGVuOworCXNpemVfdCB1c2VkID0gMDsKKwl2b2lkICpwdHI7CisKKwlyZXN1bHQgPSB3bHBfY2hlY2tfd3NzX2luZm9fYXR0cl9oZHIod2xwLCAoc3RydWN0IHdscF9hdHRyX2hkciAqKWF0dHIsCisJCQkJCSAgICAgYnVmbGVuKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBvdXQ7CisJbGVuID0gcmVzdWx0OworCXVzZWQgPSBzaXplb2YoKmF0dHIpOworCXB0ciA9IGF0dHI7CisJZF9wcmludGYoNiwgZGV2LCAiV0xQOiBXU1MgaW5mbzogUmV0cmlldmluZyBXU1NJRFxuIik7CisJcmVzdWx0ID0gd2xwX2dldF93c3NpZCh3bHAsIHB0ciArIHVzZWQsIHdzc2lkLCBidWZsZW4gLSB1c2VkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBXU1NJRCBmcm9tIFdTUyBpbmZvLlxuIik7CisJCWdvdG8gb3V0OworCX0KKwl1c2VkICs9IHJlc3VsdDsKKwlyZXN1bHQgPSB3bHBfZ2V0X3dzc19pbmZvX2F0dHJzKHdscCwgcHRyICsgdXNlZCwgd3NzX2luZm8sCisJCQkJCWJ1ZmxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFdTUyBpbmZvcm1hdGlvbiAiCisJCQkiZnJvbSBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlcy4gXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCWlmIChsZW4gKyBzaXplb2YoKmF0dHIpICE9IHVzZWQpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IEFtb3VudCBvZiBkYXRhIHBhcnNlZCBkb2VzIG5vdCAiCisJCQkibWF0Y2ggbGVuZ3RoIGZpZWxkLiBQYXJzZWQgJXp1LCBsZW5ndGggIgorCQkJImZpZWxkICV6dS4gXG4iLCB1c2VkLCBsZW4pOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJcmVzdWx0ID0gdXNlZDsKKwlkX3ByaW50Zig2LCBkZXYsICJXTFA6IFN1Y2Nlc3NmdWxseSBwYXJzZWQgV0xQIGluZm9ybWF0aW9uICIKKwkJICJhdHRyaWJ1dGUuIHVzZWQgJXp1IGJ5dGVzXG4iLCB1c2VkKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFJldHJpZXZlIFdTUyBpbmZvIGZyb20gYXNzb2NpYXRpb24gZnJhbWUKKyAqCisgKiBAYXR0cjogICAgIHBvaW50ZXIgdG8gV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZQorICogQG5laWdoYm9yOiBwdHIgdG8gbmVpZ2hib3IgYmVpbmcgZGlzY292ZXJlZCwgTlVMTCBpZiBlbnJvbGxtZW50IGluCisgKiAgICAgICAgICAgIHByb2dyZXNzCisgKiBAd3NzOiAgICAgIHB0ciB0byBXU1MgYmVpbmcgZW5yb2xsZWQgaW4sIE5VTEwgaWYgZGlzY292ZXJ5IGluIHByb2dyZXNzCisgKiBAYnVmbGVuOiAgIHNpemUgb2YgYnVmZmVyIGluIHdoaWNoIFdTUyBpbmZvcm1hdGlvbiBhcHBlYXJzCisgKgorICogVGhlIFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUgYXBwZWFycyBpbiB0aGUgRDIgYXNzb2NpYXRpb24gbWVzc2FnZS4KKyAqIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGluIHR3byB3YXlzOiB0byBkaXNjb3ZlciBhbGwgbmVpZ2hib3JzIG9yIHRvIGVucm9sbAorICogaW50byBhIFdTUyBhY3RpdmF0ZWQgYnkgYSBuZWlnaGJvci4gRHVyaW5nIGRpc2NvdmVyeSB3ZSBvbmx5IHdhbnQgdG8KKyAqIHN0b3JlIHRoZSBXU1MgaW5mbyBpbiBhIGNhY2hlLCB0byBiZSBkZWxldGVkIHJpZ2h0IGFmdGVyIGl0IGhhcyBiZWVuCisgKiB1c2VkIChlZy4gZGlzcGxheWVkIHRvIHRoZSB1c2VyKS4gRHVyaW5nIGVucm9sbG1lbnQgd2Ugc3RvcmUgdGhlIFdTUworICogaW5mb3JtYXRpb24gZm9yIHRoZSBsaWZldGltZSBvZiBlbnJvbGxtZW50LgorICoKKyAqIER1cmluZyBkaXNjb3Zlcnkgd2UgYXJlIGludGVyZXN0ZWQgaW4gYWxsIFdTUyBpbmZvcm1hdGlvbiwgZHVyaW5nCisgKiBlbnJvbGxtZW50IHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIFdTUyBiZWluZyBlbnJvbGxlZCBpbi4gRXZlbiBzbywKKyAqIHdoZW4gaW4gZW5yb2xsbWVudCB3ZSBrZWVwIHBhcnNpbmcgdGhlIG1lc3NhZ2UgYWZ0ZXIgZmluZGluZyB0aGUgV1NTIG9mCisgKiBpbnRlcmVzdCwgdGhpcyBzaW1wbGlmaWVzIHRoZSBjYWxsaW5nIHJvdXRpbmUgaW4gdGhhdCBpdCBjYW4gYmUgc3VyZQorICogdGhhdCBhbGwgV1NTIGluZm9ybWF0aW9uIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHBhcnNlZCBvdXQgb2YgdGhlIG1lc3NhZ2UuCisgKgorICogQXNzb2NpYXRpb24gZnJhbWUgaXMgcHJvY2VzcyB3aXRoIG5ibXV0ZXggaGVsZC4gVGhlIGxpc3QgYWNjZXNzIGlzIHNhZmUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHdscF9nZXRfYWxsX3dzc19pbmZvKHN0cnVjdCB3bHAgKndscCwKKwkJCQkgICAgc3RydWN0IHdscF9hdHRyX3dzc19pbmZvICphdHRyLAorCQkJCSAgICBzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKm5laWdoYm9yLAorCQkJCSAgICBzdHJ1Y3Qgd2xwX3dzcyAqd3NzLCBzc2l6ZV90IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJc2l6ZV90IHVzZWQgPSAwOworCXNzaXplX3QgcmVzdWx0ID0gLUVJTlZBTDsKKwlzdHJ1Y3Qgd2xwX2F0dHJfd3NzX2luZm8gKmN1cjsKKwlzdHJ1Y3Qgd2xwX3V1aWQgd3NzaWQ7CisJc3RydWN0IHdscF93c3NfdG1wX2luZm8gd3NzX2luZm87CisJdW5zaWduZWQgZW5yb2xsOyAvKiAwIC0gZGlzY292ZXJ5IHRvIGNhY2hlLCAxIC0gZW5yb2xsbWVudCAqLworCXN0cnVjdCB3bHBfd3NzaWRfZSAqd3NzaWRfZTsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisKKwlkX2Zuc3RhcnQoNiwgZGV2LCAid2xwICVwLCBhdHRyICVwLCBuZWlnaGJvciAlcCwgd3NzICVwLCBidWZsZW4gJWQgXG4iLAorCQkgIHdscCwgYXR0ciwgbmVpZ2hib3IsIHdzcywgKGludClidWZsZW4pOworCWlmIChidWZsZW4gPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChuZWlnaGJvciAhPSBOVUxMICYmIHdzcyA9PSBOVUxMKQorCQllbnJvbGwgPSAwOyAvKiBkaXNjb3ZlcnkgKi8KKwllbHNlIGlmICh3c3MgIT0gTlVMTCAmJiBuZWlnaGJvciA9PSBOVUxMKQorCQllbnJvbGwgPSAxOyAvKiBlbnJvbGxtZW50ICovCisJZWxzZQorCQlnb3RvIG91dDsKKworCWN1ciA9IGF0dHI7CisJd2hpbGUgKGJ1ZmxlbiAtIHVzZWQgPiAwKSB7CisJCW1lbXNldCgmd3NzX2luZm8sIDAsIHNpemVvZih3c3NfaW5mbykpOworCQljdXIgPSAodm9pZCAqKWN1ciArIHVzZWQ7CisJCXJlc3VsdCA9IHdscF9nZXRfd3NzX2luZm8od2xwLCBjdXIsIGJ1ZmxlbiAtIHVzZWQsICZ3c3NpZCwKKwkJCQkJICAmd3NzX2luZm8pOworCQlpZiAocmVzdWx0ID09IC1FTk9EQVRBKSB7CisJCQlyZXN1bHQgPSB1c2VkOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBwYXJzZSBXU1MgaW5mb3JtYXRpb24gIgorCQkJCSJmcm9tIFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUuIFxuIik7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBlcnJvcl9wYXJzZTsKKwkJfQorCQlpZiAoZW5yb2xsICYmICFtZW1jbXAoJndzc2lkLCAmd3NzLT53c3NpZCwgc2l6ZW9mKHdzc2lkKSkpIHsKKwkJCWlmICh3c3NfaW5mby5hY2NlcHRfZW5yb2xsICE9IDEpIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogUmVxdWVzdGVkIFdTUyBkb2VzICIKKwkJCQkJIm5vdCBhY2NlcHQgZW5yb2xsbWVudC5cbiIpOworCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQltZW1jcHkod3NzLT5uYW1lLCB3c3NfaW5mby5uYW1lLCBzaXplb2Yod3NzLT5uYW1lKSk7CisJCQl3c3MtPmJjYXN0ID0gd3NzX2luZm8uYmNhc3Q7CisJCQl3c3MtPnNlY3VyZV9zdGF0dXMgPSB3c3NfaW5mby5zZWNfc3RhdHVzOworCQkJd3NzLT5hY2NlcHRfZW5yb2xsID0gd3NzX2luZm8uYWNjZXB0X2Vucm9sbDsKKwkJCXdzcy0+c3RhdGUgPSBXTFBfV1NTX1NUQVRFX1BBUlRfRU5ST0xMRUQ7CisJCQl3bHBfd3NzX3V1aWRfcHJpbnQoYnVmLCBzaXplb2YoYnVmKSwgJndzc2lkKTsKKwkJCWRfcHJpbnRmKDIsIGRldiwgIldMUDogRm91bmQgV1NTICVzLiBFbnJvbGxpbmcuXG4iLAorCQkJCSBidWYpOworCQl9IGVsc2UgeworCQkJd3NzaWRfZSA9IHdscF9jcmVhdGVfd3NzaWRfZSh3bHAsIG5laWdoYm9yKTsKKwkJCWlmICh3c3NpZF9lID09IE5VTEwpIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogQ2Fubm90IGNyZWF0ZSBuZXcgV1NTSUQgIgorCQkJCQkiZW50cnkgZm9yIG5laWdoYm9yICUwMng6JTAyeC5cbiIsCisJCQkJCW5laWdoYm9yLT51d2JfZGV2LT5kZXZfYWRkci5kYXRhWzFdLAorCQkJCQluZWlnaGJvci0+dXdiX2Rldi0+ZGV2X2FkZHIuZGF0YVswXSk7CisJCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXdzc2lkX2UtPndzc2lkID0gd3NzaWQ7CisJCQkqd3NzaWRfZS0+aW5mbyA9IHdzc19pbmZvOworCQl9CisJCXVzZWQgKz0gcmVzdWx0OworCX0KKwlyZXN1bHQgPSB1c2VkOworZXJyb3JfcGFyc2U6CisJaWYgKHJlc3VsdCA8IDAgJiYgIWVucm9sbCkgLyogdGhpcyB3YXMgYSBkaXNjb3ZlcnkgKi8KKwkJd2xwX3JlbW92ZV9uZWlnaGJvcl90bXBfaW5mbyhuZWlnaGJvcik7CitvdXQ6CisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgJXAsIGF0dHIgJXAsIG5laWdoYm9yICVwLCB3c3MgJXAsIGJ1ZmxlbiAlZCwgIgorCQkicmVzdWx0ICVkIFxuIiwgd2xwLCBhdHRyLCBuZWlnaGJvciwgd3NzLCAoaW50KWJ1ZmxlbiwKKwkJKGludClyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CisKK30KKworLyoqCisgKiBQYXJzZSBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlcyBpbnRvIGNhY2hlIGZvciBkaXNjb3ZlcnkKKyAqCisgKiBAYXR0cjogdGhlIGZpcnN0IFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUgaW4gbWVzc2FnZQorICogQG5laWdoYm9yOiB0aGUgbmVpZ2hib3Igd2hvc2UgY2FjaGUgd2lsbCBiZSBwb3B1bGF0ZWQKKyAqIEBidWZsZW46IHNpemUgb2YgdGhlIGlucHV0IGJ1ZmZlcgorICovCitzdGF0aWMgc3NpemVfdCB3bHBfZ2V0X3dzc19pbmZvX3RvX2NhY2hlKHN0cnVjdCB3bHAgKndscCwKKwkJCQkJIHN0cnVjdCB3bHBfYXR0cl93c3NfaW5mbyAqYXR0ciwKKwkJCQkJIHN0cnVjdCB3bHBfbmVpZ2hib3JfZSAqbmVpZ2hib3IsCisJCQkJCSBzc2l6ZV90IGJ1ZmxlbikKK3sKKwlyZXR1cm4gd2xwX2dldF9hbGxfd3NzX2luZm8od2xwLCBhdHRyLCBuZWlnaGJvciwgTlVMTCwgYnVmbGVuKTsKK30KKworLyoqCisgKiBQYXJzZSBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlcyBpbnRvIFdTUyBzdHJ1Y3QgZm9yIGVucm9sbG1lbnQKKyAqCisgKiBAYXR0cjogdGhlIGZpcnN0IFdTUyBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUgaW4gbWVzc2FnZQorICogQHdzczogdGhlIFdTUyB0aGF0IHdpbGwgYmUgZW5yb2xsZWQKKyAqIEBidWZsZW46IHNpemUgb2YgdGhlIGlucHV0IGJ1ZmZlcgorICovCitzdGF0aWMgc3NpemVfdCB3bHBfZ2V0X3dzc19pbmZvX3RvX2Vucm9sbChzdHJ1Y3Qgd2xwICp3bHAsCisJCQkJCSAgc3RydWN0IHdscF9hdHRyX3dzc19pbmZvICphdHRyLAorCQkJCQkgIHN0cnVjdCB3bHBfd3NzICp3c3MsIHNzaXplX3QgYnVmbGVuKQoreworCXJldHVybiB3bHBfZ2V0X2FsbF93c3NfaW5mbyh3bHAsIGF0dHIsIE5VTEwsIHdzcywgYnVmbGVuKTsKK30KKworLyoqCisgKiBDb25zdHJ1Y3QgYSBEMSBhc3NvY2lhdGlvbiBmcmFtZQorICoKKyAqIFdlIHVzZSB0aGUgcmFkaW8gY29udHJvbCBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZXMgb2YgdGhlIGRldmljZQorICogcHJvcGVydGllcy4gVGhlc2UgYXJlIG9mIHZhcmlhYmxlIGxlbmd0aCBhbmQgdGhlIHRvdGFsIHNwYWNlIG5lZWRlZCBpcworICogdGFsbGllZCBmaXJzdCBiZWZvcmUgd2Ugc3RhcnQgY29uc3RydWN0aW5nIHRoZSBtZXNzYWdlLiBUaGUgcmFkaW8KKyAqIGNvbnRyb2wgZnVuY3Rpb25zIHJldHVybiBzdHJpbmdzIHRoYXQgYXJlIHRlcm1pbmF0ZWQgd2l0aCBcMC4gVGhpcworICogY2hhcmFjdGVyIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG1lc3NhZ2UgKHRoZXJlIGlzIGEgbGVuZ3RoIGZpZWxkCisgKiBhY2NvbXBhbnlpbmcgaXQgaW4gdGhlIGF0dHJpYnV0ZSkuCisgKi8KK3N0YXRpYyBpbnQgd2xwX2J1aWxkX2Fzc29jX2QxKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF93c3MgKndzcywKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICoqc2tiKQoreworCisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCB3bHBfZGV2aWNlX2luZm8gKmluZm87CisJc2l6ZV90IHVzZWQgPSAwOworCXN0cnVjdCB3bHBfZnJhbWVfYXNzb2MgKl9kMTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqX3NrYjsKKwl2b2lkICpkMV9pdHI7CisKKwlkX2Zuc3RhcnQoNiwgZGV2LCAid2xwICVwXG4iLCB3bHApOworCWlmICh3bHAtPmRldl9pbmZvID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gX193bHBfc2V0dXBfZGV2aWNlX2luZm8od2xwKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gc2V0dXAgZGV2aWNlICIKKwkJCQkiaW5mb3JtYXRpb24gZm9yIEQxIG1lc3NhZ2UuXG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisJaW5mbyA9IHdscC0+ZGV2X2luZm87CisJZF9wcmludGYoNiwgZGV2LCAiTG9jYWwgcHJvcGVydGllczpcbiIKKwkJICJEZXZpY2UgbmFtZSAoJWQgYnl0ZXMpOiAlc1xuIgorCQkgIk1vZGVsIG5hbWUgKCVkIGJ5dGVzKTogJXNcbiIKKwkJICJNYW51ZmFjdHVyZXIgKCVkIGJ5dGVzKTogJXNcbiIKKwkJICJNb2RlbCBudW1iZXIgKCVkIGJ5dGVzKTogJXNcbiIKKwkJICJTZXJpYWwgbnVtYmVyICglZCBieXRlcyk6ICVzXG4iCisJCSAiUHJpbWFyeSBkZXZpY2UgdHlwZTogXG4iCisJCSAiIENhdGVnb3J5OiAlZCBcbiIKKwkJICIgT1VJOiAlMDJ4OiUwMng6JTAyeCBcbiIKKwkJICIgT1VJIFN1YmRpdmlzaW9uOiAldSBcbiIsCisJCSAoaW50KXN0cmxlbihpbmZvLT5uYW1lKSwgaW5mby0+bmFtZSwKKwkJIChpbnQpc3RybGVuKGluZm8tPm1vZGVsX25hbWUpLCBpbmZvLT5tb2RlbF9uYW1lLAorCQkgKGludClzdHJsZW4oaW5mby0+bWFudWZhY3R1cmVyKSwgaW5mby0+bWFudWZhY3R1cmVyLAorCQkgKGludClzdHJsZW4oaW5mby0+bW9kZWxfbnIpLCAgaW5mby0+bW9kZWxfbnIsCisJCSAoaW50KXN0cmxlbihpbmZvLT5zZXJpYWwpLCBpbmZvLT5zZXJpYWwsCisJCSBpbmZvLT5wcmltX2Rldl90eXBlLmNhdGVnb3J5LAorCQkgaW5mby0+cHJpbV9kZXZfdHlwZS5PVUlbMF0sIGluZm8tPnByaW1fZGV2X3R5cGUuT1VJWzFdLAorCQkgaW5mby0+cHJpbV9kZXZfdHlwZS5PVUlbMl0sIGluZm8tPnByaW1fZGV2X3R5cGUuT1VJc3ViZGl2KTsKKwlfc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKl9kMSkKKwkJICAgICAgKyBzaXplb2Yoc3RydWN0IHdscF9hdHRyX3V1aWRfZSkKKwkJICAgICAgKyBzaXplb2Yoc3RydWN0IHdscF9hdHRyX3dzc19zZWxfbXRoZCkKKwkJICAgICAgKyBzaXplb2Yoc3RydWN0IHdscF9hdHRyX2Rldl9uYW1lKQorCQkgICAgICArIHN0cmxlbihpbmZvLT5uYW1lKQorCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfbWFudWZhY3R1cmVyKQorCQkgICAgICArIHN0cmxlbihpbmZvLT5tYW51ZmFjdHVyZXIpCisJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl9tb2RlbF9uYW1lKQorCQkgICAgICArIHN0cmxlbihpbmZvLT5tb2RlbF9uYW1lKQorCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfbW9kZWxfbnIpCisJCSAgICAgICsgc3RybGVuKGluZm8tPm1vZGVsX25yKQorCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfc2VyaWFsKQorCQkgICAgICArIHN0cmxlbihpbmZvLT5zZXJpYWwpCisJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl9wcmltX2Rldl90eXBlKQorCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfd2xwX2Fzc2NfZXJyKSk7CisJaWYgKF9za2IgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgYXNzb2NpYXRpb24gIgorCQkJIm1lc3NhZ2UuXG4iKTsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJX2QxID0gKHZvaWQgKikgX3NrYi0+ZGF0YTsKKwlkX3ByaW50Zig2LCBkZXYsICJEMSBzdGFydHMgYXQgJXAgXG4iLCBfZDEpOworCV9kMS0+aGRyLm11eF9oZHIgPSBjcHVfdG9fbGUxNihXTFBfUFJPVE9DT0xfSUQpOworCV9kMS0+aGRyLnR5cGUgPSBXTFBfRlJBTUVfQVNTT0NJQVRJT047CisJX2QxLT50eXBlID0gV0xQX0FTU09DX0QxOworCisJd2xwX3NldF92ZXJzaW9uKCZfZDEtPnZlcnNpb24sIFdMUF9WRVJTSU9OKTsKKwl3bHBfc2V0X21zZ190eXBlKCZfZDEtPm1zZ190eXBlLCBXTFBfQVNTT0NfRDEpOworCWQxX2l0ciA9IF9kMS0+YXR0cjsKKwl1c2VkID0gd2xwX3NldF91dWlkX2UoZDFfaXRyLCAmd2xwLT51dWlkKTsKKwl1c2VkICs9IHdscF9zZXRfd3NzX3NlbF9tdGhkKGQxX2l0ciArIHVzZWQsIFdMUF9XU1NfUkVHX1NFTEVDVCk7CisJdXNlZCArPSB3bHBfc2V0X2Rldl9uYW1lKGQxX2l0ciArIHVzZWQsIGluZm8tPm5hbWUsCisJCQkJIHN0cmxlbihpbmZvLT5uYW1lKSk7CisJdXNlZCArPSB3bHBfc2V0X21hbnVmYWN0dXJlcihkMV9pdHIgKyB1c2VkLCBpbmZvLT5tYW51ZmFjdHVyZXIsCisJCQkJICAgICBzdHJsZW4oaW5mby0+bWFudWZhY3R1cmVyKSk7CisJdXNlZCArPSB3bHBfc2V0X21vZGVsX25hbWUoZDFfaXRyICsgdXNlZCwgaW5mby0+bW9kZWxfbmFtZSwKKwkJCQkgICBzdHJsZW4oaW5mby0+bW9kZWxfbmFtZSkpOworCXVzZWQgKz0gd2xwX3NldF9tb2RlbF9ucihkMV9pdHIgKyB1c2VkLCBpbmZvLT5tb2RlbF9uciwKKwkJCQkgc3RybGVuKGluZm8tPm1vZGVsX25yKSk7CisJdXNlZCArPSB3bHBfc2V0X3NlcmlhbChkMV9pdHIgKyB1c2VkLCBpbmZvLT5zZXJpYWwsCisJCQkgICAgICAgc3RybGVuKGluZm8tPnNlcmlhbCkpOworCXVzZWQgKz0gd2xwX3NldF9wcmltX2Rldl90eXBlKGQxX2l0ciArIHVzZWQsICZpbmZvLT5wcmltX2Rldl90eXBlKTsKKwl1c2VkICs9IHdscF9zZXRfd2xwX2Fzc2NfZXJyKGQxX2l0ciArIHVzZWQsIFdMUF9BU1NPQ19FUlJPUl9OT05FKTsKKwlza2JfcHV0KF9za2IsIHNpemVvZigqX2QxKSArIHVzZWQpOworCWRfcHJpbnRmKDYsIGRldiwgIkQxIG1lc3NhZ2U6XG4iKTsKKwlkX2R1bXAoNiwgZGV2LCBfZDEsIHNpemVvZigqX2QxKQorCQkgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl91dWlkX2UpCisJCSAgICAgKyBzaXplb2Yoc3RydWN0IHdscF9hdHRyX3dzc19zZWxfbXRoZCkKKwkJICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfZGV2X25hbWUpCisJCSAgICAgKyBzdHJsZW4oaW5mby0+bmFtZSkKKwkJICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfbWFudWZhY3R1cmVyKQorCQkgICAgICsgc3RybGVuKGluZm8tPm1hbnVmYWN0dXJlcikKKwkJICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfbW9kZWxfbmFtZSkKKwkJICAgICArIHN0cmxlbihpbmZvLT5tb2RlbF9uYW1lKQorCQkgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl9tb2RlbF9ucikKKwkJICAgICArIHN0cmxlbihpbmZvLT5tb2RlbF9ucikKKwkJICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfc2VyaWFsKQorCQkgICAgICsgc3RybGVuKGluZm8tPnNlcmlhbCkKKwkJICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfcHJpbV9kZXZfdHlwZSkKKwkJICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfd2xwX2Fzc2NfZXJyKSk7CisJKnNrYiA9IF9za2I7CitlcnJvcjoKKwlkX2ZuZW5kKDYsIGRldiwgIndscCAlcCwgcmVzdWx0ID0gJWRcbiIsIHdscCwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIENvbnN0cnVjdCBhIEQyIGFzc29jaWF0aW9uIGZyYW1lCisgKgorICogV2UgdXNlIHRoZSByYWRpbyBjb250cm9sIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlcyBvZiB0aGUgZGV2aWNlCisgKiBwcm9wZXJ0aWVzLiBUaGVzZSBhcmUgb2YgdmFyaWFibGUgbGVuZ3RoIGFuZCB0aGUgdG90YWwgc3BhY2UgbmVlZGVkIGlzCisgKiB0YWxsaWVkIGZpcnN0IGJlZm9yZSB3ZSBzdGFydCBjb25zdHJ1Y3RpbmcgdGhlIG1lc3NhZ2UuIFRoZSByYWRpbworICogY29udHJvbCBmdW5jdGlvbnMgcmV0dXJuIHN0cmluZ3MgdGhhdCBhcmUgdGVybWluYXRlZCB3aXRoIFwwLiBUaGlzCisgKiBjaGFyYWN0ZXIgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgbWVzc2FnZSAodGhlcmUgaXMgYSBsZW5ndGggZmllbGQKKyAqIGFjY29tcGFueWluZyBpdCBpbiB0aGUgYXR0cmlidXRlKS4KKyAqLworc3RhdGljCitpbnQgd2xwX2J1aWxkX2Fzc29jX2QyKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF93c3MgKndzcywKKwkJICAgICAgIHN0cnVjdCBza19idWZmICoqc2tiLCBzdHJ1Y3Qgd2xwX3V1aWQgKnV1aWRfZSkKK3sKKworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgd2xwX2RldmljZV9pbmZvICppbmZvOworCXNpemVfdCB1c2VkID0gMDsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jICpfZDI7CisJc3RydWN0IHNrX2J1ZmYgKl9za2I7CisJdm9pZCAqZDJfaXRyOworCXNpemVfdCBtZW1fbmVlZGVkOworCisJZF9mbnN0YXJ0KDYsIGRldiwgIndscCAlcFxuIiwgd2xwKTsKKwlpZiAod2xwLT5kZXZfaW5mbyA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IF9fd2xwX3NldHVwX2RldmljZV9pbmZvKHdscCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIHNldHVwIGRldmljZSAiCisJCQkJImluZm9ybWF0aW9uIGZvciBEMiBtZXNzYWdlLlxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCWluZm8gPSB3bHAtPmRldl9pbmZvOworCWRfcHJpbnRmKDYsIGRldiwgIkxvY2FsIHByb3BlcnRpZXM6XG4iCisJCSAiRGV2aWNlIG5hbWUgKCVkIGJ5dGVzKTogJXNcbiIKKwkJICJNb2RlbCBuYW1lICglZCBieXRlcyk6ICVzXG4iCisJCSAiTWFudWZhY3R1cmVyICglZCBieXRlcyk6ICVzXG4iCisJCSAiTW9kZWwgbnVtYmVyICglZCBieXRlcyk6ICVzXG4iCisJCSAiU2VyaWFsIG51bWJlciAoJWQgYnl0ZXMpOiAlc1xuIgorCQkgIlByaW1hcnkgZGV2aWNlIHR5cGU6IFxuIgorCQkgIiBDYXRlZ29yeTogJWQgXG4iCisJCSAiIE9VSTogJTAyeDolMDJ4OiUwMnggXG4iCisJCSAiIE9VSSBTdWJkaXZpc2lvbjogJXUgXG4iLAorCQkgKGludClzdHJsZW4oaW5mby0+bmFtZSksIGluZm8tPm5hbWUsCisJCSAoaW50KXN0cmxlbihpbmZvLT5tb2RlbF9uYW1lKSwgaW5mby0+bW9kZWxfbmFtZSwKKwkJIChpbnQpc3RybGVuKGluZm8tPm1hbnVmYWN0dXJlciksIGluZm8tPm1hbnVmYWN0dXJlciwKKwkJIChpbnQpc3RybGVuKGluZm8tPm1vZGVsX25yKSwgIGluZm8tPm1vZGVsX25yLAorCQkgKGludClzdHJsZW4oaW5mby0+c2VyaWFsKSwgaW5mby0+c2VyaWFsLAorCQkgaW5mby0+cHJpbV9kZXZfdHlwZS5jYXRlZ29yeSwKKwkJIGluZm8tPnByaW1fZGV2X3R5cGUuT1VJWzBdLCBpbmZvLT5wcmltX2Rldl90eXBlLk9VSVsxXSwKKwkJIGluZm8tPnByaW1fZGV2X3R5cGUuT1VJWzJdLCBpbmZvLT5wcmltX2Rldl90eXBlLk9VSXN1YmRpdik7CisJbWVtX25lZWRlZCA9IHNpemVvZigqX2QyKQorCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfdXVpZF9lKQorCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfdXVpZF9yKQorCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgd2xwX2F0dHJfZGV2X25hbWUpCisJCSAgICAgICsgc3RybGVuKGluZm8tPm5hbWUpCisJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl9tYW51ZmFjdHVyZXIpCisJCSAgICAgICsgc3RybGVuKGluZm8tPm1hbnVmYWN0dXJlcikKKwkJICAgICAgKyBzaXplb2Yoc3RydWN0IHdscF9hdHRyX21vZGVsX25hbWUpCisJCSAgICAgICsgc3RybGVuKGluZm8tPm1vZGVsX25hbWUpCisJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl9tb2RlbF9ucikKKwkJICAgICAgKyBzdHJsZW4oaW5mby0+bW9kZWxfbnIpCisJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl9zZXJpYWwpCisJCSAgICAgICsgc3RybGVuKGluZm8tPnNlcmlhbCkKKwkJICAgICAgKyBzaXplb2Yoc3RydWN0IHdscF9hdHRyX3ByaW1fZGV2X3R5cGUpCisJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCB3bHBfYXR0cl93bHBfYXNzY19lcnIpOworCWlmICh3bHAtPndzcy5zdGF0ZSA+PSBXTFBfV1NTX1NUQVRFX0FDVElWRSkKKwkJbWVtX25lZWRlZCArPSBzaXplb2Yoc3RydWN0IHdscF9hdHRyX3dzc19pbmZvKQorCQkJICAgICAgKyBzaXplb2Yoc3RydWN0IHdscF93c3NfaW5mbykKKwkJCSAgICAgICsgc3RybGVuKHdscC0+d3NzLm5hbWUpOworCV9za2IgPSBkZXZfYWxsb2Nfc2tiKG1lbV9uZWVkZWQpOworCWlmIChfc2tiID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFzc29jaWF0aW9uICIKKwkJCSJtZXNzYWdlLlxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCV9kMiA9ICh2b2lkICopIF9za2ItPmRhdGE7CisJZF9wcmludGYoNiwgZGV2LCAiRDIgc3RhcnRzIGF0ICVwIFxuIiwgX2QyKTsKKwlfZDItPmhkci5tdXhfaGRyID0gY3B1X3RvX2xlMTYoV0xQX1BST1RPQ09MX0lEKTsKKwlfZDItPmhkci50eXBlID0gV0xQX0ZSQU1FX0FTU09DSUFUSU9OOworCV9kMi0+dHlwZSA9IFdMUF9BU1NPQ19EMjsKKworCXdscF9zZXRfdmVyc2lvbigmX2QyLT52ZXJzaW9uLCBXTFBfVkVSU0lPTik7CisJd2xwX3NldF9tc2dfdHlwZSgmX2QyLT5tc2dfdHlwZSwgV0xQX0FTU09DX0QyKTsKKwlkMl9pdHIgPSBfZDItPmF0dHI7CisJdXNlZCA9IHdscF9zZXRfdXVpZF9lKGQyX2l0ciwgdXVpZF9lKTsKKwl1c2VkICs9IHdscF9zZXRfdXVpZF9yKGQyX2l0ciArIHVzZWQsICZ3bHAtPnV1aWQpOworCWlmICh3bHAtPndzcy5zdGF0ZSA+PSBXTFBfV1NTX1NUQVRFX0FDVElWRSkKKwkJdXNlZCArPSB3bHBfc2V0X3dzc19pbmZvKGQyX2l0ciArIHVzZWQsICZ3bHAtPndzcyk7CisJdXNlZCArPSB3bHBfc2V0X2Rldl9uYW1lKGQyX2l0ciArIHVzZWQsIGluZm8tPm5hbWUsCisJCQkJIHN0cmxlbihpbmZvLT5uYW1lKSk7CisJdXNlZCArPSB3bHBfc2V0X21hbnVmYWN0dXJlcihkMl9pdHIgKyB1c2VkLCBpbmZvLT5tYW51ZmFjdHVyZXIsCisJCQkJICAgICBzdHJsZW4oaW5mby0+bWFudWZhY3R1cmVyKSk7CisJdXNlZCArPSB3bHBfc2V0X21vZGVsX25hbWUoZDJfaXRyICsgdXNlZCwgaW5mby0+bW9kZWxfbmFtZSwKKwkJCQkgICBzdHJsZW4oaW5mby0+bW9kZWxfbmFtZSkpOworCXVzZWQgKz0gd2xwX3NldF9tb2RlbF9ucihkMl9pdHIgKyB1c2VkLCBpbmZvLT5tb2RlbF9uciwKKwkJCQkgc3RybGVuKGluZm8tPm1vZGVsX25yKSk7CisJdXNlZCArPSB3bHBfc2V0X3NlcmlhbChkMl9pdHIgKyB1c2VkLCBpbmZvLT5zZXJpYWwsCisJCQkgICAgICAgc3RybGVuKGluZm8tPnNlcmlhbCkpOworCXVzZWQgKz0gd2xwX3NldF9wcmltX2Rldl90eXBlKGQyX2l0ciArIHVzZWQsICZpbmZvLT5wcmltX2Rldl90eXBlKTsKKwl1c2VkICs9IHdscF9zZXRfd2xwX2Fzc2NfZXJyKGQyX2l0ciArIHVzZWQsIFdMUF9BU1NPQ19FUlJPUl9OT05FKTsKKwlza2JfcHV0KF9za2IsIHNpemVvZigqX2QyKSArIHVzZWQpOworCWRfcHJpbnRmKDYsIGRldiwgIkQyIG1lc3NhZ2U6XG4iKTsKKwlkX2R1bXAoNiwgZGV2LCBfZDIsIG1lbV9uZWVkZWQpOworCSpza2IgPSBfc2tiOworZXJyb3I6CisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgJXAsIHJlc3VsdCA9ICVkXG4iLCB3bHAsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFuZCBwb3B1bGF0ZSBmaWVsZHMgb2YgRjAgYXNzb2NpYXRpb24gZnJhbWUKKyAqCisgKiBDdXJyZW50bHkgKHdoaWxlIGZvY3VzaW5nIG9uIHVuc2VjdXJlIGVucm9sbG1lbnQpIHdlIGlnbm9yZSB0aGUKKyAqIG5vbmNlJ3MgdGhhdCBjb3VsZCBiZSBwbGFjZWQgaW4gdGhlIG1lc3NhZ2UuIE9ubHkgdGhlIGVycm9yIGZpZWxkIGlzCisgKiBwb3B1bGF0ZWQgYnkgdGhlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK3N0YXRpYworaW50IHdscF9idWlsZF9hc3NvY19mMChzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCBza19idWZmICoqc2tiLAorCQkgICAgICAgZW51bSB3bHBfYXNzY19lcnJvciBlcnJvcikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisJc3RydWN0IHsKKwkJc3RydWN0IHdscF9mcmFtZV9hc3NvYyBmMF9oZHI7CisJCXN0cnVjdCB3bHBfYXR0cl9lbm9uY2UgZW5vbmNlOworCQlzdHJ1Y3Qgd2xwX2F0dHJfcm5vbmNlIHJub25jZTsKKwkJc3RydWN0IHdscF9hdHRyX3dscF9hc3NjX2VyciBhc3NjX2VycjsKKwl9ICpmMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqX3NrYjsKKwlzdHJ1Y3Qgd2xwX25vbmNlIHRtcDsKKworCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgJXBcbiIsIHdscCk7CisJX3NrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpmMCkpOworCWlmIChfc2tiID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEYwICIKKwkJCSJhc3NvY2lhdGlvbiBmcmFtZS4gXG4iKTsKKwkJZ290byBlcnJvcl9hbGxvYzsKKwl9CisJZjAgPSAodm9pZCAqKSBfc2tiLT5kYXRhOworCWRfcHJpbnRmKDYsIGRldiwgIkYwIHN0YXJ0cyBhdCAlcCBcbiIsIGYwKTsKKwlmMC0+ZjBfaGRyLmhkci5tdXhfaGRyID0gY3B1X3RvX2xlMTYoV0xQX1BST1RPQ09MX0lEKTsKKwlmMC0+ZjBfaGRyLmhkci50eXBlID0gV0xQX0ZSQU1FX0FTU09DSUFUSU9OOworCWYwLT5mMF9oZHIudHlwZSA9IFdMUF9BU1NPQ19GMDsKKwl3bHBfc2V0X3ZlcnNpb24oJmYwLT5mMF9oZHIudmVyc2lvbiwgV0xQX1ZFUlNJT04pOworCXdscF9zZXRfbXNnX3R5cGUoJmYwLT5mMF9oZHIubXNnX3R5cGUsIFdMUF9BU1NPQ19GMCk7CisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKwl3bHBfc2V0X2Vub25jZSgmZjAtPmVub25jZSwgJnRtcCk7CisJd2xwX3NldF9ybm9uY2UoJmYwLT5ybm9uY2UsICZ0bXApOworCXdscF9zZXRfd2xwX2Fzc2NfZXJyKCZmMC0+YXNzY19lcnIsIGVycm9yKTsKKwlza2JfcHV0KF9za2IsIHNpemVvZigqZjApKTsKKwkqc2tiID0gX3NrYjsKKwlyZXN1bHQgPSAwOworZXJyb3JfYWxsb2M6CisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgJXAsIHJlc3VsdCAlZCBcbiIsIHdscCwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFBhcnNlIEYwIGZyYW1lCisgKgorICogV2UganVzdCByZXRyaWV2ZSB0aGUgdmFsdWVzIGFuZCBwcmludCBpdCBhcyBhbiBlcnJvciB0byB0aGUgdXNlci4KKyAqIENhbGxpbmcgZnVuY3Rpb24gYWxyZWFkeSBrbm93cyBhbiBlcnJvciBvY2N1cmVkIChGMCBpbmRpY2F0ZXMgZXJyb3IpLCBzbworICogd2UganVzdCBwYXJzZSB0aGUgY29udGVudCBhcyBkZWJ1ZyBmb3IgaGlnaGVyIGxheWVycy4KKyAqLworaW50IHdscF9wYXJzZV9mMChzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB3bHBfZnJhbWVfYXNzb2MgKmYwID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXZvaWQgKnB0ciA9IHNrYi0+ZGF0YTsKKwlzaXplX3QgbGVuID0gc2tiLT5sZW47CisJc2l6ZV90IHVzZWQ7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IHdscF9ub25jZSBlbm9uY2UsIHJub25jZTsKKwllbnVtIHdscF9hc3NjX2Vycm9yIGFzc2NfZXJyOworCWNoYXIgZW5vbmNlX2J1ZltXTFBfV1NTX05PTkNFX1NUUlNJWkVdOworCWNoYXIgcm5vbmNlX2J1ZltXTFBfV1NTX05PTkNFX1NUUlNJWkVdOworCisJdXNlZCA9IHNpemVvZigqZjApOworCXJlc3VsdCA9IHdscF9nZXRfZW5vbmNlKHdscCwgcHRyICsgdXNlZCwgJmVub25jZSwgbGVuIC0gdXNlZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gRW5yb2xsZWUgbm9uY2UgIgorCQkJImF0dHJpYnV0ZSBmcm9tIEYwIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJcmVzdWx0ID0gd2xwX2dldF9ybm9uY2Uod2xwLCBwdHIgKyB1c2VkLCAmcm5vbmNlLCBsZW4gLSB1c2VkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBSZWdpc3RyYXIgbm9uY2UgIgorCQkJImF0dHJpYnV0ZSBmcm9tIEYwIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJcmVzdWx0ID0gd2xwX2dldF93bHBfYXNzY19lcnIod2xwLCBwdHIgKyB1c2VkLCAmYXNzY19lcnIsIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFdMUCBBc3NvY2lhdGlvbiBlcnJvciAiCisJCQkiYXR0cmlidXRlIGZyb20gRjAgbWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl3bHBfd3NzX25vbmNlX3ByaW50KGVub25jZV9idWYsIHNpemVvZihlbm9uY2VfYnVmKSwgJmVub25jZSk7CisJd2xwX3dzc19ub25jZV9wcmludChybm9uY2VfYnVmLCBzaXplb2Yocm5vbmNlX2J1ZiksICZybm9uY2UpOworCWRldl9lcnIoZGV2LCAiV0xQOiBSZWNlaXZlZCBGMCBlcnJvciBmcmFtZSBmcm9tIG5laWdoYm9yLiBFbnJvbGxlZSAiCisJCSJub25jZTogJXMsIFJlZ2lzdHJhciBub25jZTogJXMsIFdMUCBBc3NvY2lhdGlvbiBlcnJvcjogJXMuXG4iLAorCQllbm9uY2VfYnVmLCBybm9uY2VfYnVmLCB3bHBfYXNzY19lcnJvcl9zdHIoYXNzY19lcnIpKTsKKwlyZXN1bHQgPSAwOworZXJyb3JfcGFyc2U6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBSZXRyaWV2ZSB2YXJpYWJsZSBkZXZpY2UgaW5mb3JtYXRpb24gZnJvbSBhc3NvY2lhdGlvbiBtZXNzYWdlCisgKgorICogVGhlIGRldmljZSBpbmZvcm1hdGlvbiBwYXJzZWQgaXMgbm90IHJlcXVpcmVkIGluIGFueSBtZXNzYWdlLiBUaGlzCisgKiByb3V0aW5lIHdpbGwgdGh1cyBub3QgZmFpbCBpZiBhbiBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQuCisgKiBUaGUgYXR0cmlidXRlcyBhcmUgZXhwZWN0ZWQgaW4gYSBjZXJ0YWluIG9yZGVyLCBldmVuIGlmIGFsbCBhcmUgbm90CisgKiBwcmVzZW50LiBUaGUgImF0dHJpYnV0ZSB0eXBlIiB2YWx1ZSBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgYXR0cmlidXRlcworICogYXJlIHBhcnNlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKyAqCisgKiBJZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZyB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4KKyAqIGVycm9yIGNvZGUsIHdoZW4gdGhpcyBoYXBwZW5zIHRoZSBnaXZlbiBkZXZpY2VfaW5mbyBzdHJ1Y3R1cmUgbWF5IGJlCisgKiBwYXJ0aWFsbHkgZmlsbGVkLgorICovCitzdGF0aWMKK2ludCB3bHBfZ2V0X3ZhcmlhYmxlX2luZm8oc3RydWN0IHdscCAqd2xwLCB2b2lkICpkYXRhLAorCQkJICBzdHJ1Y3Qgd2xwX2RldmljZV9pbmZvICpkZXZfaW5mbywgc3NpemVfdCBsZW4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXNpemVfdCB1c2VkID0gMDsKKwlzdHJ1Y3Qgd2xwX2F0dHJfaGRyICpoZHI7CisJc3NpemVfdCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxhc3QgPSAwOworCisJd2hpbGUgKGxlbiAtIHVzZWQgPiAwKSB7CisJCWlmIChsZW4gLSB1c2VkIDwgc2l6ZW9mKCpoZHIpKSB7CisJCQlkZXZfZXJyKGRldiwgIldMUDogUGFydGlhbCBkYXRhIGluIGZyYW1lLCBjYW5ub3QgIgorCQkJCSJwYXJzZS4gXG4iKTsKKwkJCWdvdG8gZXJyb3JfcGFyc2U7CisJCX0KKwkJaGRyID0gZGF0YSArIHVzZWQ7CisJCXN3aXRjaCAobGUxNl90b19jcHUoaGRyLT50eXBlKSkgeworCQljYXNlIFdMUF9BVFRSX01BTlVGOgorCQkJaWYgKGxhc3QgPj0gV0xQX0FUVFJfTUFOVUYpIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogSW5jb3JyZWN0IG9yZGVyIG9mICIKKwkJCQkJImF0dHJpYnV0ZSB2YWx1ZXMgaW4gRDEgbXNnLlxuIik7CisJCQkJZ290byBlcnJvcl9wYXJzZTsKKwkJCX0KKwkJCXJlc3VsdCA9IHdscF9nZXRfbWFudWZhY3R1cmVyKHdscCwgZGF0YSArIHVzZWQsCisJCQkJCQkgICAgICBkZXZfaW5mby0+bWFudWZhY3R1cmVyLAorCQkJCQkJICAgICAgbGVuIC0gdXNlZCk7CisJCQlpZiAocmVzdWx0IDwgMCkgeworCQkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gb2J0YWluICIKKwkJCQkJIk1hbnVmYWN0dXJlciBhdHRyaWJ1dGUgZnJvbSBEMSAiCisJCQkJCSJtZXNzYWdlLlxuIik7CisJCQkJZ290byBlcnJvcl9wYXJzZTsKKwkJCX0KKwkJCWxhc3QgPSBXTFBfQVRUUl9NQU5VRjsKKwkJCXVzZWQgKz0gcmVzdWx0OworCQkJYnJlYWs7CisJCWNhc2UgV0xQX0FUVFJfTU9ERUxfTkFNRToKKwkJCWlmIChsYXN0ID49IFdMUF9BVFRSX01PREVMX05BTUUpIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogSW5jb3JyZWN0IG9yZGVyIG9mICIKKwkJCQkJImF0dHJpYnV0ZSB2YWx1ZXMgaW4gRDEgbXNnLlxuIik7CisJCQkJZ290byBlcnJvcl9wYXJzZTsKKwkJCX0KKwkJCXJlc3VsdCA9IHdscF9nZXRfbW9kZWxfbmFtZSh3bHAsIGRhdGEgKyB1c2VkLAorCQkJCQkJICAgIGRldl9pbmZvLT5tb2RlbF9uYW1lLAorCQkJCQkJICAgIGxlbiAtIHVzZWQpOworCQkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIG9idGFpbiBNb2RlbCAiCisJCQkJCSJuYW1lIGF0dHJpYnV0ZSBmcm9tIEQxIG1lc3NhZ2UuXG4iKTsKKwkJCQlnb3RvIGVycm9yX3BhcnNlOworCQkJfQorCQkJbGFzdCA9IFdMUF9BVFRSX01PREVMX05BTUU7CisJCQl1c2VkICs9IHJlc3VsdDsKKwkJCWJyZWFrOworCQljYXNlIFdMUF9BVFRSX01PREVMX05SOgorCQkJaWYgKGxhc3QgPj0gV0xQX0FUVFJfTU9ERUxfTlIpIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogSW5jb3JyZWN0IG9yZGVyIG9mICIKKwkJCQkJImF0dHJpYnV0ZSB2YWx1ZXMgaW4gRDEgbXNnLlxuIik7CisJCQkJZ290byBlcnJvcl9wYXJzZTsKKwkJCX0KKwkJCXJlc3VsdCA9IHdscF9nZXRfbW9kZWxfbnIod2xwLCBkYXRhICsgdXNlZCwKKwkJCQkJCSAgZGV2X2luZm8tPm1vZGVsX25yLAorCQkJCQkJICBsZW4gLSB1c2VkKTsKKwkJCWlmIChyZXN1bHQgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBvYnRhaW4gTW9kZWwgIgorCQkJCQkibnVtYmVyIGF0dHJpYnV0ZSBmcm9tIEQxIG1lc3NhZ2UuXG4iKTsKKwkJCQlnb3RvIGVycm9yX3BhcnNlOworCQkJfQorCQkJbGFzdCA9IFdMUF9BVFRSX01PREVMX05SOworCQkJdXNlZCArPSByZXN1bHQ7CisJCQlicmVhazsKKwkJY2FzZSBXTFBfQVRUUl9TRVJJQUw6CisJCQlpZiAobGFzdCA+PSBXTFBfQVRUUl9TRVJJQUwpIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogSW5jb3JyZWN0IG9yZGVyIG9mICIKKwkJCQkJImF0dHJpYnV0ZSB2YWx1ZXMgaW4gRDEgbXNnLlxuIik7CisJCQkJZ290byBlcnJvcl9wYXJzZTsKKwkJCX0KKwkJCXJlc3VsdCA9IHdscF9nZXRfc2VyaWFsKHdscCwgZGF0YSArIHVzZWQsCisJCQkJCQlkZXZfaW5mby0+c2VyaWFsLCBsZW4gLSB1c2VkKTsKKwkJCWlmIChyZXN1bHQgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBvYnRhaW4gU2VyaWFsICIKKwkJCQkJIm51bWJlciBhdHRyaWJ1dGUgZnJvbSBEMSBtZXNzYWdlLlxuIik7CisJCQkJZ290byBlcnJvcl9wYXJzZTsKKwkJCX0KKwkJCWxhc3QgPSBXTFBfQVRUUl9TRVJJQUw7CisJCQl1c2VkICs9IHJlc3VsdDsKKwkJCWJyZWFrOworCQljYXNlIFdMUF9BVFRSX1BSSV9ERVZfVFlQRToKKwkJCWlmIChsYXN0ID49IFdMUF9BVFRSX1BSSV9ERVZfVFlQRSkgeworCQkJCWRldl9lcnIoZGV2LCAiV0xQOiBJbmNvcnJlY3Qgb3JkZXIgb2YgIgorCQkJCQkiYXR0cmlidXRlIHZhbHVlcyBpbiBEMSBtc2cuXG4iKTsKKwkJCQlnb3RvIGVycm9yX3BhcnNlOworCQkJfQorCQkJcmVzdWx0ID0gd2xwX2dldF9wcmltX2Rldl90eXBlKHdscCwgZGF0YSArIHVzZWQsCisJCQkJCQkgICAgICAgJmRldl9pbmZvLT5wcmltX2Rldl90eXBlLAorCQkJCQkJICAgICAgIGxlbiAtIHVzZWQpOworCQkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIG9idGFpbiBQcmltYXJ5ICIKKwkJCQkJImRldmljZSB0eXBlIGF0dHJpYnV0ZSBmcm9tIEQxICIKKwkJCQkJIm1lc3NhZ2UuXG4iKTsKKwkJCQlnb3RvIGVycm9yX3BhcnNlOworCQkJfQorCQkJZGV2X2luZm8tPnByaW1fZGV2X3R5cGUuY2F0ZWdvcnkgPQorCQkJCWxlMTZfdG9fY3B1KGRldl9pbmZvLT5wcmltX2Rldl90eXBlLmNhdGVnb3J5KTsKKwkJCWRldl9pbmZvLT5wcmltX2Rldl90eXBlLnN1YklEID0KKwkJCQlsZTE2X3RvX2NwdShkZXZfaW5mby0+cHJpbV9kZXZfdHlwZS5zdWJJRCk7CisJCQlsYXN0ID0gV0xQX0FUVFJfUFJJX0RFVl9UWVBFOworCQkJdXNlZCArPSByZXN1bHQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFRoaXMgaXMgbm90IHZhcmlhYmxlIGRldmljZSBpbmZvcm1hdGlvbi4gKi8KKwkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIHVzZWQ7CitlcnJvcl9wYXJzZToKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBQYXJzZSBpbmNvbWluZyBEMSBmcmFtZSwgcG9wdWxhdGUgYXR0cmlidXRlIHZhbHVlcworICoKKyAqIENhbGxlciBwcm92aWRlcyBwb2ludGVycyB0byBtZW1vcnkgYWxyZWFkeSBhbGxvY2F0ZWQgZm9yIGF0dHJpYnV0ZXMKKyAqIGV4cGVjdGVkIGluIHRoZSBEMSBmcmFtZS4gVGhlc2UgdmFyaWFibGVzIHdpbGwgYmUgcG9wdWxhdGVkLgorICovCitzdGF0aWMKK2ludCB3bHBfcGFyc2VfZDFfZnJhbWUoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IHdscF91dWlkICp1dWlkX2UsCisJCSAgICAgICBlbnVtIHdscF93c3Nfc2VsX210aGQgKnNlbF9tdGhkLAorCQkgICAgICAgc3RydWN0IHdscF9kZXZpY2VfaW5mbyAqZGV2X2luZm8sCisJCSAgICAgICBlbnVtIHdscF9hc3NjX2Vycm9yICphc3NjX2VycikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHdscF9mcmFtZV9hc3NvYyAqZDEgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJdm9pZCAqcHRyID0gc2tiLT5kYXRhOworCXNpemVfdCBsZW4gPSBza2ItPmxlbjsKKwlzaXplX3QgdXNlZDsKKwlzc2l6ZV90IHJlc3VsdDsKKworCXVzZWQgPSBzaXplb2YoKmQxKTsKKwlyZXN1bHQgPSB3bHBfZ2V0X3V1aWRfZSh3bHAsIHB0ciArIHVzZWQsIHV1aWRfZSwgbGVuIC0gdXNlZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gVVVJRC1FIGF0dHJpYnV0ZSBmcm9tIEQxICIKKwkJCSJtZXNzYWdlLlxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCXJlc3VsdCA9IHdscF9nZXRfd3NzX3NlbF9tdGhkKHdscCwgcHRyICsgdXNlZCwgc2VsX210aGQsIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFdTUyBzZWxlY3Rpb24gbWV0aG9kICIKKwkJCSJmcm9tIEQxIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJcmVzdWx0ID0gd2xwX2dldF9kZXZfbmFtZSh3bHAsIHB0ciArIHVzZWQsIGRldl9pbmZvLT5uYW1lLAorCQkJCSAgICAgbGVuIC0gdXNlZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gRGV2aWNlIE5hbWUgZnJvbSBEMSAiCisJCQkibWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl1c2VkICs9IHJlc3VsdDsKKwlyZXN1bHQgPSB3bHBfZ2V0X3ZhcmlhYmxlX2luZm8od2xwLCBwdHIgKyB1c2VkLCBkZXZfaW5mbywgbGVuIC0gdXNlZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gRGV2aWNlIEluZm9ybWF0aW9uIGZyb20gIgorCQkJIkQxIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJcmVzdWx0ID0gd2xwX2dldF93bHBfYXNzY19lcnIod2xwLCBwdHIgKyB1c2VkLCBhc3NjX2VyciwgbGVuIC0gdXNlZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gV0xQIEFzc29jaWF0aW9uIEVycm9yICIKKwkJCSJJbmZvcm1hdGlvbiBmcm9tIEQxIG1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJcmVzdWx0ID0gMDsKK2Vycm9yX3BhcnNlOgorCXJldHVybiByZXN1bHQ7Cit9CisvKioKKyAqIEhhbmRsZSBpbmNvbWluZyBEMSBmcmFtZQorICoKKyAqIFRoZSBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIHZlcmlmaWVkIHRvIGNvbnRhaW4gYW4gQXNzb2NpYXRpb24gaGVhZGVyIHdpdGgKKyAqIHRoZSBjb3JyZWN0IHZlcnNpb24gbnVtYmVyLiBQYXJzZSB0aGUgaW5jb21pbmcgZnJhbWUsIGNvbnN0cnVjdCBhbmQgc2VuZAorICogYSBEMiBmcmFtZSBpbiByZXNwb25zZS4KKyAqCisgKiBJdCBpcyBub3QgY2xlYXIgd2hhdCB0byBkbyB3aXRoIG1vc3QgZmllbGRzIGluIHRoZSBpbmNvbWluZyBEMSBmcmFtZS4gV2UKKyAqIHJldHJpZXZlIGFuZCBkaXNjYXJkIHRoZSBpbmZvcm1hdGlvbiBoZXJlIGZvciBub3cuCisgKi8KK3ZvaWQgd2xwX2hhbmRsZV9kMV9mcmFtZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCXN0cnVjdCB3bHBfYXNzb2NfZnJhbWVfY3R4ICpmcmFtZV9jdHggPSBjb250YWluZXJfb2Yod3MsCisJCQkJCQkgIHN0cnVjdCB3bHBfYXNzb2NfZnJhbWVfY3R4LAorCQkJCQkJICB3cyk7CisJc3RydWN0IHdscCAqd2xwID0gZnJhbWVfY3R4LT53bHA7CisJc3RydWN0IHdscF93c3MgKndzcyA9ICZ3bHAtPndzczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZnJhbWVfY3R4LT5za2I7CisJc3RydWN0IHV3Yl9kZXZfYWRkciAqc3JjID0gJmZyYW1lX2N0eC0+c3JjOworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB3bHBfdXVpZCB1dWlkX2U7CisJZW51bSB3bHBfd3NzX3NlbF9tdGhkIHNlbF9tdGhkID0gMDsKKwlzdHJ1Y3Qgd2xwX2RldmljZV9pbmZvIGRldl9pbmZvOworCWVudW0gd2xwX2Fzc2NfZXJyb3IgYXNzY19lcnI7CisJY2hhciB1dWlkW1dMUF9XU1NfVVVJRF9TVFJTSVpFXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCA9IE5VTEw7CisKKwkvKiBQYXJzZSBEMSBmcmFtZSAqLworCWRfZm5zdGFydCg2LCBkZXYsICJXTFA6IGhhbmRsZSBEMSBmcmFtZS4gd2xwID0gJXAsIHNrYiA9ICVwXG4iLAorCQkgIHdscCwgc2tiKTsKKwltdXRleF9sb2NrKCZ3c3MtPm11dGV4KTsKKwltdXRleF9sb2NrKCZ3bHAtPm11dGV4KTsgLyogdG8gYWNjZXNzIHdscC0+dXVpZCAqLworCW1lbXNldCgmZGV2X2luZm8sIDAsIHNpemVvZihkZXZfaW5mbykpOworCXJlc3VsdCA9IHdscF9wYXJzZV9kMV9mcmFtZSh3bHAsIHNrYiwgJnV1aWRfZSwgJnNlbF9tdGhkLCAmZGV2X2luZm8sCisJCQkJICAgICZhc3NjX2Vycik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBwYXJzZSBpbmNvbWluZyBEMSBmcmFtZS5cbiIpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCXdscF93c3NfdXVpZF9wcmludCh1dWlkLCBzaXplb2YodXVpZCksICZ1dWlkX2UpOworCWRfcHJpbnRmKDYsIGRldiwgIkZyb20gRDEgZnJhbWU6XG4iCisJCSAiVVVJRC1FOiAlc1xuIgorCQkgIlNlbGVjdGlvbiBtZXRob2Q6ICVkXG4iCisJCSAiRGV2aWNlIG5hbWUgKCVkIGJ5dGVzKTogJXNcbiIKKwkJICJNb2RlbCBuYW1lICglZCBieXRlcyk6ICVzXG4iCisJCSAiTWFudWZhY3R1cmVyICglZCBieXRlcyk6ICVzXG4iCisJCSAiTW9kZWwgbnVtYmVyICglZCBieXRlcyk6ICVzXG4iCisJCSAiU2VyaWFsIG51bWJlciAoJWQgYnl0ZXMpOiAlc1xuIgorCQkgIlByaW1hcnkgZGV2aWNlIHR5cGU6IFxuIgorCQkgIiBDYXRlZ29yeTogJWQgXG4iCisJCSAiIE9VSTogJTAyeDolMDJ4OiUwMnggXG4iCisJCSAiIE9VSSBTdWJkaXZpc2lvbjogJXUgXG4iLAorCQkgdXVpZCwgc2VsX210aGQsCisJCSAoaW50KXN0cmxlbihkZXZfaW5mby5uYW1lKSwgZGV2X2luZm8ubmFtZSwKKwkJIChpbnQpc3RybGVuKGRldl9pbmZvLm1vZGVsX25hbWUpLCBkZXZfaW5mby5tb2RlbF9uYW1lLAorCQkgKGludClzdHJsZW4oZGV2X2luZm8ubWFudWZhY3R1cmVyKSwgZGV2X2luZm8ubWFudWZhY3R1cmVyLAorCQkgKGludClzdHJsZW4oZGV2X2luZm8ubW9kZWxfbnIpLCAgZGV2X2luZm8ubW9kZWxfbnIsCisJCSAoaW50KXN0cmxlbihkZXZfaW5mby5zZXJpYWwpLCBkZXZfaW5mby5zZXJpYWwsCisJCSBkZXZfaW5mby5wcmltX2Rldl90eXBlLmNhdGVnb3J5LAorCQkgZGV2X2luZm8ucHJpbV9kZXZfdHlwZS5PVUlbMF0sCisJCSBkZXZfaW5mby5wcmltX2Rldl90eXBlLk9VSVsxXSwKKwkJIGRldl9pbmZvLnByaW1fZGV2X3R5cGUuT1VJWzJdLAorCQkgZGV2X2luZm8ucHJpbV9kZXZfdHlwZS5PVUlzdWJkaXYpOworCisJa2ZyZWVfc2tiKHNrYik7CisJaWYgKCF3bHBfdXVpZF9pc19zZXQoJndscC0+dXVpZCkpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVVSUQgaXMgbm90IHNldC4gU2V0IHZpYSBzeXNmcyB0byAiCisJCQkicHJvY2VlZC4gUmVzcG9uZyB0byBEMSBtZXNzYWdlIHdpdGggZXJyb3IgRjAuXG4iKTsKKwkJcmVzdWx0ID0gd2xwX2J1aWxkX2Fzc29jX2YwKHdscCwgJnJlc3AsCisJCQkJCSAgICBXTFBfQVNTT0NfRVJST1JfTk9UX1JFQURZKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gY29uc3RydWN0IEYwIG1lc3NhZ2UuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJLyogQ29uc3RydWN0IEQyIGZyYW1lICovCisJCXJlc3VsdCA9IHdscF9idWlsZF9hc3NvY19kMih3bHAsIHdzcywgJnJlc3AsICZ1dWlkX2UpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBjb25zdHJ1Y3QgRDIgbWVzc2FnZS5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJLyogU2VuZCBEMiBmcmFtZSAqLworCUJVR19PTih3bHAtPnhtaXRfZnJhbWUgPT0gTlVMTCk7CisJcmVzdWx0ID0gd2xwLT54bWl0X2ZyYW1lKHdscCwgcmVzcCwgc3JjKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIHRyYW5zbWl0IEQyIGFzc29jaWF0aW9uICIKKwkJCSJtZXNzYWdlOiAlZFxuIiwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCA9PSAtRU5YSU8pCisJCQlkZXZfZXJyKGRldiwgIldMUDogSXMgbmV0d29yayBpbnRlcmZhY2UgdXA/IFxuIik7CisJCS8qIFdlIGNvdWxkIHRyeSBhZ2FpbiAuLi4gKi8KKwkJZGV2X2tmcmVlX3NrYl9hbnkocmVzcCk7IC8qIHdlIG5lZWQgdG8gZnJlZSBpZiB0eCBmYWlscyAqLworCX0KK291dDoKKwlrZnJlZShmcmFtZV9jdHgpOworCW11dGV4X3VubG9jaygmd2xwLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ3c3MtPm11dGV4KTsKKwlkX2ZuZW5kKDYsIGRldiwgIldMUDogaGFuZGxlIEQxIGZyYW1lLiB3bHAgPSAlcFxuIiwgd2xwKTsKK30KKworLyoqCisgKiBQYXJzZSBpbmNvbWluZyBEMiBmcmFtZSwgY3JlYXRlIGFuZCBwb3B1bGF0ZSB0ZW1wb3JhcnkgY2FjaGUKKyAqCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGluIHdoaWNoIEQyIGZyYW1lIGNhbiBiZSBmb3VuZAorICogQG5laWdoYm9yOiB0aGUgbmVpZ2hib3IgdGhhdCBzZW50IHRoZSBEMiBmcmFtZQorICoKKyAqIFdpbGwgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiBpbmZvcm1hdGlvbiBsZWFybmVkIGR1cmluZworICogZGlzY292ZXJ5LgorICovCitpbnQgd2xwX3BhcnNlX2QyX2ZyYW1lX3RvX2NhY2hlKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKm5laWdoYm9yKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jICpkMiA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwl2b2lkICpwdHIgPSBza2ItPmRhdGE7CisJc2l6ZV90IGxlbiA9IHNrYi0+bGVuOworCXNpemVfdCB1c2VkOworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCB3bHBfdXVpZCB1dWlkX2U7CisJc3RydWN0IHdscF9kZXZpY2VfaW5mbyAqbmJfaW5mbzsKKwllbnVtIHdscF9hc3NjX2Vycm9yIGFzc2NfZXJyOworCisJdXNlZCA9IHNpemVvZigqZDIpOworCXJlc3VsdCA9IHdscF9nZXRfdXVpZF9lKHdscCwgcHRyICsgdXNlZCwgJnV1aWRfZSwgbGVuIC0gdXNlZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gVVVJRC1FIGF0dHJpYnV0ZSBmcm9tIEQyICIKKwkJCSJtZXNzYWdlLlxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCWlmIChtZW1jbXAoJnV1aWRfZSwgJndscC0+dXVpZCwgc2l6ZW9mKHV1aWRfZSkpKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVVUlELUUgaW4gaW5jb21pbmcgRDIgZG9lcyBub3QgbWF0Y2ggIgorCQkJImxvY2FsIFVVSUQgc2VudCBpbiBEMS4gXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJcmVzdWx0ID0gd2xwX2dldF91dWlkX3Iod2xwLCBwdHIgKyB1c2VkLCAmbmVpZ2hib3ItPnV1aWQsIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFVVSUQtUiBhdHRyaWJ1dGUgZnJvbSBEMiAiCisJCQkibWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl1c2VkICs9IHJlc3VsdDsKKwlyZXN1bHQgPSB3bHBfZ2V0X3dzc19pbmZvX3RvX2NhY2hlKHdscCwgcHRyICsgdXNlZCwgbmVpZ2hib3IsCisJCQkJCSAgIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFdTUyBpbmZvcm1hdGlvbiAiCisJCQkiZnJvbSBEMiBtZXNzYWdlLlxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCW5laWdoYm9yLT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdscF9kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCWlmIChuZWlnaGJvci0+aW5mbyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IHRvIHN0b3JlIGRldmljZSAiCisJCQkiaW5mby5cbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwluYl9pbmZvID0gbmVpZ2hib3ItPmluZm87CisJcmVzdWx0ID0gd2xwX2dldF9kZXZfbmFtZSh3bHAsIHB0ciArIHVzZWQsIG5iX2luZm8tPm5hbWUsCisJCQkJICBsZW4gLSB1c2VkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBEZXZpY2UgTmFtZSBmcm9tIEQyICIKKwkJCSJtZXNzYWdlLlxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCXJlc3VsdCA9IHdscF9nZXRfdmFyaWFibGVfaW5mbyh3bHAsIHB0ciArIHVzZWQsIG5iX2luZm8sIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIERldmljZSBJbmZvcm1hdGlvbiBmcm9tICIKKwkJCSJEMiBtZXNzYWdlLlxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCXJlc3VsdCA9IHdscF9nZXRfd2xwX2Fzc2NfZXJyKHdscCwgcHRyICsgdXNlZCwgJmFzc2NfZXJyLCBsZW4gLSB1c2VkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBXTFAgQXNzb2NpYXRpb24gRXJyb3IgIgorCQkJIkluZm9ybWF0aW9uIGZyb20gRDIgbWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwlpZiAoYXNzY19lcnIgIT0gV0xQX0FTU09DX0VSUk9SX05PTkUpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IG5laWdoYm9yIGRldmljZSByZXR1cm5lZCBhc3NvY2lhdGlvbiAiCisJCQkiZXJyb3IgJWRcbiIsIGFzc2NfZXJyKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJcmVzdWx0ID0gMDsKK2Vycm9yX3BhcnNlOgorCWlmIChyZXN1bHQgPCAwKQorCQl3bHBfcmVtb3ZlX25laWdoYm9yX3RtcF9pbmZvKG5laWdoYm9yKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFBhcnNlIGluY29taW5nIEQyIGZyYW1lLCBwb3B1bGF0ZSBhdHRyaWJ1dGUgdmFsdWVzIG9mIFdTUyBiZWluIGVucm9sbGVkIGluCisgKgorICogQHdzczogb3VyIFdTUyB0aGF0IHdpbGwgYmUgZW5yb2xsZWQKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgaW4gd2hpY2ggRDIgZnJhbWUgY2FuIGJlIGZvdW5kCisgKiBAbmVpZ2hib3I6IHRoZSBuZWlnaGJvciB0aGF0IHNlbnQgdGhlIEQyIGZyYW1lCisgKiBAd3NzaWQ6IHRoZSB3c3NpZCBvZiB0aGUgV1NTIGluIHdoaWNoIHdlIHdhbnQgdG8gZW5yb2xsCisgKgorICogRm9ybXMgcGFydCBvZiBlbnJvbGxtZW50IHNlcXVlbmNlLiBXZSBhcmUgdHJ5aW5nIHRvIGVucm9sbCBpbiBXU1Mgd2l0aAorICogQHdzc2lkIGJ5IHVzaW5nIEBuZWlnaGJvciBhcyByZWdpc3RyYXIuIEEgRDEgbWVzc2FnZSB3YXMgc2VudCB0bworICogQG5laWdoYm9yIGFuZCBub3cgd2UgbmVlZCB0byBwYXJzZSB0aGUgRDIgcmVzcG9uc2UuIFRoZSBuZWlnaGJvcidzCisgKiByZXNwb25zZSBpcyBzZWFyY2hlZCBmb3IgdGhlIHJlcXVlc3RlZCBXU1MgYW5kIGlmIGZvdW5kIChhbmQgaXQgYWNjZXB0cworICogZW5yb2xsbWVudCksIHdlIHN0b3JlIHRoZSBpbmZvcm1hdGlvbi4KKyAqLworaW50IHdscF9wYXJzZV9kMl9mcmFtZV90b19lbnJvbGwoc3RydWN0IHdscF93c3MgKndzcywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IHdscF9uZWlnaGJvcl9lICpuZWlnaGJvciwKKwkJCQkgc3RydWN0IHdscF91dWlkICp3c3NpZCkKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwl2b2lkICpwdHIgPSBza2ItPmRhdGE7CisJc2l6ZV90IGxlbiA9IHNrYi0+bGVuOworCXNpemVfdCB1c2VkOworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCB3bHBfdXVpZCB1dWlkX2U7CisJc3RydWN0IHdscF91dWlkIHV1aWRfcjsKKwlzdHJ1Y3Qgd2xwX2RldmljZV9pbmZvIG5iX2luZm87CisJZW51bSB3bHBfYXNzY19lcnJvciBhc3NjX2VycjsKKwljaGFyIHV1aWRfYnVmQVtXTFBfV1NTX1VVSURfU1RSU0laRV07CisJY2hhciB1dWlkX2J1ZkJbV0xQX1dTU19VVUlEX1NUUlNJWkVdOworCisJdXNlZCA9IHNpemVvZihzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jKTsKKwlyZXN1bHQgPSB3bHBfZ2V0X3V1aWRfZSh3bHAsIHB0ciArIHVzZWQsICZ1dWlkX2UsIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFVVSUQtRSBhdHRyaWJ1dGUgZnJvbSBEMiAiCisJCQkibWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwlpZiAobWVtY21wKCZ1dWlkX2UsICZ3bHAtPnV1aWQsIHNpemVvZih1dWlkX2UpKSkgeworCQlkZXZfZXJyKGRldiwgIldMUDogVVVJRC1FIGluIGluY29taW5nIEQyIGRvZXMgbm90IG1hdGNoICIKKwkJCSJsb2NhbCBVVUlEIHNlbnQgaW4gRDEuIFxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCXJlc3VsdCA9IHdscF9nZXRfdXVpZF9yKHdscCwgcHRyICsgdXNlZCwgJnV1aWRfciwgbGVuIC0gdXNlZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gVVVJRC1SIGF0dHJpYnV0ZSBmcm9tIEQyICIKKwkJCSJtZXNzYWdlLlxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCWlmIChtZW1jbXAoJnV1aWRfciwgJm5laWdoYm9yLT51dWlkLCBzaXplb2YodXVpZF9yKSkpIHsKKwkJd2xwX3dzc191dWlkX3ByaW50KHV1aWRfYnVmQSwgc2l6ZW9mKHV1aWRfYnVmQSksCisJCQkJICAgJm5laWdoYm9yLT51dWlkKTsKKwkJd2xwX3dzc191dWlkX3ByaW50KHV1aWRfYnVmQiwgc2l6ZW9mKHV1aWRfYnVmQiksICZ1dWlkX3IpOworCQlkZXZfZXJyKGRldiwgIldMUDogVVVJRCBvZiBuZWlnaGJvciBkb2VzIG5vdCBtYXRjaCBVVUlEICIKKwkJCSJsZWFybmVkIGR1cmluZyBkaXNjb3ZlcnkuIE9yaWdpbmFsbHkgZGlzY292ZXJlZDogJXMsICIKKwkJCSJub3cgZnJvbSBEMiBtZXNzYWdlOiAlc1xuIiwgdXVpZF9idWZBLCB1dWlkX2J1ZkIpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl1c2VkICs9IHJlc3VsdDsKKwl3c3MtPndzc2lkID0gKndzc2lkOworCXJlc3VsdCA9IHdscF9nZXRfd3NzX2luZm9fdG9fZW5yb2xsKHdscCwgcHRyICsgdXNlZCwgd3NzLCBsZW4gLSB1c2VkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBXU1MgaW5mb3JtYXRpb24gIgorCQkJImZyb20gRDIgbWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwlpZiAod3NzLT5zdGF0ZSAhPSBXTFBfV1NTX1NUQVRFX1BBUlRfRU5ST0xMRUQpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IEQyIG1lc3NhZ2UgZGlkIG5vdCBjb250YWluIGluZm9ybWF0aW9uICIKKwkJCSJmb3Igc3VjY2Vzc2Z1bCBlbnJvbGxtZW50LiBcbiIpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl1c2VkICs9IHJlc3VsdDsKKwkvKiBQbGFjZSBkZXZpY2UgaW5mb3JtYXRpb24gb24gc3RhY2sgdG8gY29udGludWUgcGFyc2luZyBvZiBtZXNzYWdlICovCisJcmVzdWx0ID0gd2xwX2dldF9kZXZfbmFtZSh3bHAsIHB0ciArIHVzZWQsIG5iX2luZm8ubmFtZSwKKwkJCQkgIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIERldmljZSBOYW1lIGZyb20gRDIgIgorCQkJIm1lc3NhZ2UuXG4iKTsKKwkJZ290byBlcnJvcl9wYXJzZTsKKwl9CisJdXNlZCArPSByZXN1bHQ7CisJcmVzdWx0ID0gd2xwX2dldF92YXJpYWJsZV9pbmZvKHdscCwgcHRyICsgdXNlZCwgJm5iX2luZm8sIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIERldmljZSBJbmZvcm1hdGlvbiBmcm9tICIKKwkJCSJEMiBtZXNzYWdlLlxuIik7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCXJlc3VsdCA9IHdscF9nZXRfd2xwX2Fzc2NfZXJyKHdscCwgcHRyICsgdXNlZCwgJmFzc2NfZXJyLCBsZW4gLSB1c2VkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBXTFAgQXNzb2NpYXRpb24gRXJyb3IgIgorCQkJIkluZm9ybWF0aW9uIGZyb20gRDIgbWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwlpZiAoYXNzY19lcnIgIT0gV0xQX0FTU09DX0VSUk9SX05PTkUpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IG5laWdoYm9yIGRldmljZSByZXR1cm5lZCBhc3NvY2lhdGlvbiAiCisJCQkiZXJyb3IgJWRcbiIsIGFzc2NfZXJyKTsKKwkJaWYgKHdzcy0+c3RhdGUgPT0gV0xQX1dTU19TVEFURV9QQVJUX0VOUk9MTEVEKSB7CisJCQlkZXZfZXJyKGRldiwgIldMUDogRW5yb2xsZWQgaW4gV1NTIChzaG91bGQgbm90ICIKKwkJCQkiaGFwcGVuIGFjY29yZGluZyB0byBzcGVjKS4gVW5kb2luZy4gXG4iKTsKKwkJCXdscF93c3NfcmVzZXQod3NzKTsKKwkJfQorCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwlyZXN1bHQgPSAwOworZXJyb3JfcGFyc2U6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBQYXJzZSBDMy9DNCBmcmFtZSBpbnRvIHByb3ZpZGVkIHZhcmlhYmxlcworICoKKyAqIEB3c3NpZDogd2lsbCBwb2ludCB0byBjb3B5IG9mIHdzc2lkIHJldHJpZXZlZCBmcm9tIEMzL0M0IGZyYW1lCisgKiBAdGFnOiAgIHdpbGwgcG9pbnQgdG8gY29weSBvZiB0YWcgcmV0cmlldmVkIGZyb20gQzMvQzQgZnJhbWUKKyAqIEB2aXJ0X2FkZHI6IHdpbGwgcG9pbnQgdG8gY29weSBvZiB2aXJ0dWFsIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gQzMvQzQKKyAqIGZyYW1lLgorICoKKyAqIENhbGxpbmcgZnVuY3Rpb24gaGFzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlc2UgdmFsdWVzLgorICoKKyAqIHNrYiBjb250YWlucyBhIHZhbGlkIEMzL0M0IGZyYW1lLCByZXR1cm4gdGhlIGluZGl2aWR1YWwgZmllbGRzIG9mIHRoaXMKKyAqIGZyYW1lIGluIHRoZSBwcm92aWRlZCB2YXJpYWJsZXMuCisgKi8KK2ludCB3bHBfcGFyc2VfYzNjNF9mcmFtZShzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3Qgd2xwX3V1aWQgKndzc2lkLCB1OCAqdGFnLAorCQkgICAgICAgc3RydWN0IHV3Yl9tYWNfYWRkciAqdmlydF9hZGRyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlpbnQgcmVzdWx0OworCXZvaWQgKnB0ciA9IHNrYi0+ZGF0YTsKKwlzaXplX3QgbGVuID0gc2tiLT5sZW47CisJc2l6ZV90IHVzZWQ7CisJY2hhciBidWZbV0xQX1dTU19VVUlEX1NUUlNJWkVdOworCXN0cnVjdCB3bHBfZnJhbWVfYXNzb2MgKmFzc29jID0gcHRyOworCisJZF9mbnN0YXJ0KDYsIGRldiwgIndscCAlcCwgc2tiICVwIFxuIiwgd2xwLCBza2IpOworCXVzZWQgPSBzaXplb2YoKmFzc29jKTsKKwlyZXN1bHQgPSB3bHBfZ2V0X3dzc2lkKHdscCwgcHRyICsgdXNlZCwgd3NzaWQsIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFdTU0lEIGF0dHJpYnV0ZSBmcm9tICIKKwkJCSIlcyBtZXNzYWdlLlxuIiwgd2xwX2Fzc29jX2ZyYW1lX3N0cihhc3NvYy0+dHlwZSkpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl1c2VkICs9IHJlc3VsdDsKKwlyZXN1bHQgPSB3bHBfZ2V0X3dzc190YWcod2xwLCBwdHIgKyB1c2VkLCB0YWcsIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFdTUyB0YWcgYXR0cmlidXRlIGZyb20gIgorCQkJIiVzIG1lc3NhZ2UuXG4iLCB3bHBfYXNzb2NfZnJhbWVfc3RyKGFzc29jLT50eXBlKSk7CisJCWdvdG8gZXJyb3JfcGFyc2U7CisJfQorCXVzZWQgKz0gcmVzdWx0OworCXJlc3VsdCA9IHdscF9nZXRfd3NzX3ZpcnQod2xwLCBwdHIgKyB1c2VkLCB2aXJ0X2FkZHIsIGxlbiAtIHVzZWQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiB1bmFibGUgdG8gb2J0YWluIFdTUyB2aXJ0dWFsIGFkZHJlc3MgIgorCQkJImF0dHJpYnV0ZSBmcm9tICVzIG1lc3NhZ2UuXG4iLAorCQkJd2xwX2Fzc29jX2ZyYW1lX3N0cihhc3NvYy0+dHlwZSkpOworCQlnb3RvIGVycm9yX3BhcnNlOworCX0KKwl3bHBfd3NzX3V1aWRfcHJpbnQoYnVmLCBzaXplb2YoYnVmKSwgd3NzaWQpOworCWRfcHJpbnRmKDYsIGRldiwgIldMUDogcGFyc2VkOiBXU1NJRCAlcywgdGFnIDB4JTAyeCwgdmlydCAiCisJCSAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggXG4iLCBidWYsICp0YWcsCisJCSB2aXJ0X2FkZHItPmRhdGFbMF0sIHZpcnRfYWRkci0+ZGF0YVsxXSwgdmlydF9hZGRyLT5kYXRhWzJdLAorCQkgdmlydF9hZGRyLT5kYXRhWzNdLCB2aXJ0X2FkZHItPmRhdGFbNF0sIHZpcnRfYWRkci0+ZGF0YVs1XSk7CisKK2Vycm9yX3BhcnNlOgorCWRfZm5lbmQoNiwgZGV2LCAid2xwICVwLCBza2IgJXAsIHJlc3VsdCA9ICVkIFxuIiwgd2xwLCBza2IsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFuZCBwb3B1bGF0ZSBmaWVsZHMgb2YgQzEgb3IgQzIgYXNzb2NpYXRpb24gZnJhbWUKKyAqCisgKiBUaGUgQzEgYW5kIEMyIGFzc29jaWF0aW9uIGZyYW1lcyBhcHBlYXIgaWRlbnRpY2FsIC0gZXhjZXB0IGZvciB0aGUgdHlwZS4KKyAqLworc3RhdGljCitpbnQgd2xwX2J1aWxkX2Fzc29jX2MxYzIoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX3dzcyAqd3NzLAorCQkJIHN0cnVjdCBza19idWZmICoqc2tiLCBlbnVtIHdscF9hc3NvY190eXBlIHR5cGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCWludCByZXN1bHQgID0gLUVOT01FTTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jIGNfaGRyOworCQlzdHJ1Y3Qgd2xwX2F0dHJfd3NzaWQgd3NzaWQ7CisJfSAqYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqX3NrYjsKKworCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgJXAsIHdzcyAlcCBcbiIsIHdscCwgd3NzKTsKKwlfc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKmMpKTsKKwlpZiAoX3NrYiA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBDMS9DMiAiCisJCQkiYXNzb2NpYXRpb24gZnJhbWUuIFxuIik7CisJCWdvdG8gZXJyb3JfYWxsb2M7CisJfQorCWMgPSAodm9pZCAqKSBfc2tiLT5kYXRhOworCWRfcHJpbnRmKDYsIGRldiwgIkMxL0MyIHN0YXJ0cyBhdCAlcCBcbiIsIGMpOworCWMtPmNfaGRyLmhkci5tdXhfaGRyID0gY3B1X3RvX2xlMTYoV0xQX1BST1RPQ09MX0lEKTsKKwljLT5jX2hkci5oZHIudHlwZSA9IFdMUF9GUkFNRV9BU1NPQ0lBVElPTjsKKwljLT5jX2hkci50eXBlID0gdHlwZTsKKwl3bHBfc2V0X3ZlcnNpb24oJmMtPmNfaGRyLnZlcnNpb24sIFdMUF9WRVJTSU9OKTsKKwl3bHBfc2V0X21zZ190eXBlKCZjLT5jX2hkci5tc2dfdHlwZSwgdHlwZSk7CisJd2xwX3NldF93c3NpZCgmYy0+d3NzaWQsICZ3c3MtPndzc2lkKTsKKwlza2JfcHV0KF9za2IsIHNpemVvZigqYykpOworCWRfcHJpbnRmKDYsIGRldiwgIkMxL0MyIG1lc3NhZ2U6XG4iKTsKKwlkX2R1bXAoNiwgZGV2LCBjLCBzaXplb2YoKmMpKTsKKwkqc2tiID0gX3NrYjsKKwlyZXN1bHQgPSAwOworZXJyb3JfYWxsb2M6CisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgJXAsIHdzcyAlcCwgcmVzdWx0ICVkIFxuIiwgd2xwLCB3c3MsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMKK2ludCB3bHBfYnVpbGRfYXNzb2NfYzEoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX3dzcyAqd3NzLAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKipza2IpCit7CisJcmV0dXJuIHdscF9idWlsZF9hc3NvY19jMWMyKHdscCwgd3NzLCBza2IsIFdMUF9BU1NPQ19DMSk7Cit9CisKK3N0YXRpYworaW50IHdscF9idWlsZF9hc3NvY19jMihzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCB3bHBfd3NzICp3c3MsCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikKK3sKKwlyZXR1cm4gd2xwX2J1aWxkX2Fzc29jX2MxYzIod2xwLCB3c3MsIHNrYiwgV0xQX0FTU09DX0MyKTsKK30KKworCisvKioKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgYW5kIHBvcHVsYXRlIGZpZWxkcyBvZiBDMyBvciBDNCBhc3NvY2lhdGlvbiBmcmFtZQorICoKKyAqIFRoZSBDMyBhbmQgQzQgYXNzb2NpYXRpb24gZnJhbWVzIGFwcGVhciBpZGVudGljYWwgLSBleGNlcHQgZm9yIHRoZSB0eXBlLgorICovCitzdGF0aWMKK2ludCB3bHBfYnVpbGRfYXNzb2NfYzNjNChzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCB3bHBfd3NzICp3c3MsCisJCQkgc3RydWN0IHNrX2J1ZmYgKipza2IsIGVudW0gd2xwX2Fzc29jX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJaW50IHJlc3VsdCAgPSAtRU5PTUVNOworCXN0cnVjdCB7CisJCXN0cnVjdCB3bHBfZnJhbWVfYXNzb2MgY19oZHI7CisJCXN0cnVjdCB3bHBfYXR0cl93c3NpZCB3c3NpZDsKKwkJc3RydWN0IHdscF9hdHRyX3dzc190YWcgd3NzX3RhZzsKKwkJc3RydWN0IHdscF9hdHRyX3dzc192aXJ0IHdzc192aXJ0OworCX0gKmM7CisJc3RydWN0IHNrX2J1ZmYgKl9za2I7CisKKwlkX2Zuc3RhcnQoNiwgZGV2LCAid2xwICVwLCB3c3MgJXAgXG4iLCB3bHAsIHdzcyk7CisJX3NrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpjKSk7CisJaWYgKF9za2IgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgQzMvQzQgIgorCQkJImFzc29jaWF0aW9uIGZyYW1lLiBcbiIpOworCQlnb3RvIGVycm9yX2FsbG9jOworCX0KKwljID0gKHZvaWQgKikgX3NrYi0+ZGF0YTsKKwlkX3ByaW50Zig2LCBkZXYsICJDMy9DNCBzdGFydHMgYXQgJXAgXG4iLCBjKTsKKwljLT5jX2hkci5oZHIubXV4X2hkciA9IGNwdV90b19sZTE2KFdMUF9QUk9UT0NPTF9JRCk7CisJYy0+Y19oZHIuaGRyLnR5cGUgPSBXTFBfRlJBTUVfQVNTT0NJQVRJT047CisJYy0+Y19oZHIudHlwZSA9IHR5cGU7CisJd2xwX3NldF92ZXJzaW9uKCZjLT5jX2hkci52ZXJzaW9uLCBXTFBfVkVSU0lPTik7CisJd2xwX3NldF9tc2dfdHlwZSgmYy0+Y19oZHIubXNnX3R5cGUsIHR5cGUpOworCXdscF9zZXRfd3NzaWQoJmMtPndzc2lkLCAmd3NzLT53c3NpZCk7CisJd2xwX3NldF93c3NfdGFnKCZjLT53c3NfdGFnLCB3c3MtPnRhZyk7CisJd2xwX3NldF93c3NfdmlydCgmYy0+d3NzX3ZpcnQsICZ3c3MtPnZpcnR1YWxfYWRkcik7CisJc2tiX3B1dChfc2tiLCBzaXplb2YoKmMpKTsKKwlkX3ByaW50Zig2LCBkZXYsICJDMy9DNCBtZXNzYWdlOlxuIik7CisJZF9kdW1wKDYsIGRldiwgYywgc2l6ZW9mKCpjKSk7CisJKnNrYiA9IF9za2I7CisJcmVzdWx0ID0gMDsKK2Vycm9yX2FsbG9jOgorCWRfZm5lbmQoNiwgZGV2LCAid2xwICVwLCB3c3MgJXAsIHJlc3VsdCAlZCBcbiIsIHdscCwgd3NzLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYworaW50IHdscF9idWlsZF9hc3NvY19jMyhzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCB3bHBfd3NzICp3c3MsCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikKK3sKKwlyZXR1cm4gd2xwX2J1aWxkX2Fzc29jX2MzYzQod2xwLCB3c3MsIHNrYiwgV0xQX0FTU09DX0MzKTsKK30KKworc3RhdGljCitpbnQgd2xwX2J1aWxkX2Fzc29jX2M0KHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF93c3MgKndzcywKKwkJICAgICAgIHN0cnVjdCBza19idWZmICoqc2tiKQoreworCXJldHVybiB3bHBfYnVpbGRfYXNzb2NfYzNjNCh3bHAsIHdzcywgc2tiLCBXTFBfQVNTT0NfQzQpOworfQorCisKKyNkZWZpbmUgd2xwX3NlbmRfYXNzb2ModHlwZSwgaWQpCQkJCQlcCitzdGF0aWMgaW50IHdscF9zZW5kX2Fzc29jXyMjdHlwZShzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCB3bHBfd3NzICp3c3MsCVwKKwkJCQkgc3RydWN0IHV3Yl9kZXZfYWRkciAqZGV2X2FkZHIpCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsJCQlcCisJaW50IHJlc3VsdDsJCQkJCQkJXAorCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwkJCQkJXAorCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgJXAsIHdzcyAlcCwgbmVpZ2hib3I6ICUwMng6JTAyeFxuIiwJXAorCQkgIHdscCwgd3NzLCBkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOwlcCisJZF9wcmludGYoNiwgZGV2LCAiV0xQOiBDb25zdHJ1Y3RpbmcgJXMgZnJhbWUuIFxuIiwJCVwKKwkJIHdscF9hc3NvY19mcmFtZV9zdHIoaWQpKTsJCQkJXAorCS8qIEJ1aWxkIHRoZSBmcmFtZSAqLwkJCQkJCVwKKwlyZXN1bHQgPSB3bHBfYnVpbGRfYXNzb2NfIyN0eXBlKHdscCwgd3NzLCAmc2tiKTsJCVwKKwlpZiAocmVzdWx0IDwgMCkgewkJCQkJCVwKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBjb25zdHJ1Y3QgJXMgYXNzb2NpYXRpb24gIglcCisJCQkiZnJhbWU6ICVkXG4iLCB3bHBfYXNzb2NfZnJhbWVfc3RyKGlkKSwgcmVzdWx0KTtcCisJCWdvdG8gZXJyb3JfYnVpbGRfYXNzb2M7CQkJCQlcCisJfQkJCQkJCQkJXAorCS8qIFNlbmQgdGhlIGZyYW1lICovCQkJCQkJXAorCWRfcHJpbnRmKDYsIGRldiwgIlRyYW5zbWl0dGluZyAlcyBmcmFtZSB0byAlMDJ4OiUwMnggXG4iLAlcCisJCSB3bHBfYXNzb2NfZnJhbWVfc3RyKGlkKSwJCQkJXAorCQkgZGV2X2FkZHItPmRhdGFbMV0sIGRldl9hZGRyLT5kYXRhWzBdKTsJCQlcCisJQlVHX09OKHdscC0+eG1pdF9mcmFtZSA9PSBOVUxMKTsJCQkJXAorCXJlc3VsdCA9IHdscC0+eG1pdF9mcmFtZSh3bHAsIHNrYiwgZGV2X2FkZHIpOwkJCVwKKwlpZiAocmVzdWx0IDwgMCkgewkJCQkJCVwKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byB0cmFuc21pdCAlcyBhc3NvY2lhdGlvbiAiCVwKKwkJCSJtZXNzYWdlOiAlZFxuIiwgd2xwX2Fzc29jX2ZyYW1lX3N0cihpZCksCVwKKwkJCXJlc3VsdCk7CQkJCQlcCisJCWlmIChyZXN1bHQgPT0gLUVOWElPKQkJCQkJXAorCQkJZGV2X2VycihkZXYsICJXTFA6IElzIG5ldHdvcmsgaW50ZXJmYWNlICIJXAorCQkJCSJ1cD8gXG4iKTsJCQkJXAorCQlnb3RvIGVycm9yX3htaXQ7CQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCitlcnJvcl94bWl0OgkJCQkJCQkJXAorCS8qIFdlIGNvdWxkIHRyeSBhZ2FpbiAuLi4gKi8JCQkJCVwKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOy8qd2UgbmVlZCB0byBmcmVlIGlmIHR4IGZhaWxzKi8JCVwKK2Vycm9yX2J1aWxkX2Fzc29jOgkJCQkJCQlcCisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgJXAsIHdzcyAlcCwgbmVpZ2hib3I6ICUwMng6JTAyeFxuIiwJXAorCQl3bHAsIHdzcywgZGV2X2FkZHItPmRhdGFbMV0sIGRldl9hZGRyLT5kYXRhWzBdKTsJXAorCXJldHVybiByZXN1bHQ7CQkJCQkJCVwKK30KKword2xwX3NlbmRfYXNzb2MoZDEsIFdMUF9BU1NPQ19EMSkKK3dscF9zZW5kX2Fzc29jKGMxLCBXTFBfQVNTT0NfQzEpCit3bHBfc2VuZF9hc3NvYyhjMywgV0xQX0FTU09DX0MzKQorCitpbnQgd2xwX3NlbmRfYXNzb2NfZnJhbWUoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX3dzcyAqd3NzLAorCQkJIHN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldl9hZGRyLAorCQkJIGVudW0gd2xwX2Fzc29jX3R5cGUgdHlwZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBXTFBfQVNTT0NfRDE6CisJCXJlc3VsdCA9IHdscF9zZW5kX2Fzc29jX2QxKHdscCwgd3NzLCBkZXZfYWRkcik7CisJCWJyZWFrOworCWNhc2UgV0xQX0FTU09DX0MxOgorCQlyZXN1bHQgPSB3bHBfc2VuZF9hc3NvY19jMSh3bHAsIHdzcywgZGV2X2FkZHIpOworCQlicmVhazsKKwljYXNlIFdMUF9BU1NPQ19DMzoKKwkJcmVzdWx0ID0gd2xwX3NlbmRfYXNzb2NfYzMod2xwLCB3c3MsIGRldl9hZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJXTFA6IFJlY2VpdmVkIHJlcXVlc3QgdG8gc2VuZCB1bmtub3duICIKKwkJCSJhc3NvY2lhdGlvbiBtZXNzYWdlLlxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIEhhbmRsZSBpbmNvbWluZyBDMSBmcmFtZQorICoKKyAqIFRoZSBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIHZlcmlmaWVkIHRvIGNvbnRhaW4gYW4gQXNzb2NpYXRpb24gaGVhZGVyIHdpdGgKKyAqIHRoZSBjb3JyZWN0IHZlcnNpb24gbnVtYmVyLiBQYXJzZSB0aGUgaW5jb21pbmcgZnJhbWUsIGNvbnN0cnVjdCBhbmQgc2VuZAorICogYSBDMiBmcmFtZSBpbiByZXNwb25zZS4KKyAqLwordm9pZCB3bHBfaGFuZGxlX2MxX2ZyYW1lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHdscF9hc3NvY19mcmFtZV9jdHggKmZyYW1lX2N0eCA9IGNvbnRhaW5lcl9vZih3cywKKwkJCQkJCSAgc3RydWN0IHdscF9hc3NvY19mcmFtZV9jdHgsCisJCQkJCQkgIHdzKTsKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBmcmFtZV9jdHgtPndscDsKKwlzdHJ1Y3Qgd2xwX3dzcyAqd3NzID0gJndscC0+d3NzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jICpjMSA9ICh2b2lkICopIGZyYW1lX2N0eC0+c2tiLT5kYXRhOworCXVuc2lnbmVkIGludCBsZW4gPSBmcmFtZV9jdHgtPnNrYi0+bGVuOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgKnNyYyA9ICZmcmFtZV9jdHgtPnNyYzsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB3bHBfdXVpZCB3c3NpZDsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisJc3RydWN0IHNrX2J1ZmYgKnJlc3AgPSBOVUxMOworCisJLyogUGFyc2UgQzEgZnJhbWUgKi8KKwlkX2Zuc3RhcnQoNiwgZGV2LCAiV0xQOiBoYW5kbGUgQzEgZnJhbWUuIHdscCA9ICVwLCBjMSA9ICVwXG4iLAorCQkgIHdscCwgYzEpOworCW11dGV4X2xvY2soJndzcy0+bXV0ZXgpOworCXJlc3VsdCA9IHdscF9nZXRfd3NzaWQod2xwLCAodm9pZCAqKWMxICsgc2l6ZW9mKCpjMSksICZ3c3NpZCwKKwkJCSAgICAgICBsZW4gLSBzaXplb2YoKmMxKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IHVuYWJsZSB0byBvYnRhaW4gV1NTSUQgZnJvbSBDMSBmcmFtZS5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJd2xwX3dzc191dWlkX3ByaW50KGJ1Ziwgc2l6ZW9mKGJ1ZiksICZ3c3NpZCk7CisJZF9wcmludGYoNiwgZGV2LCAiUmVjZWl2ZWQgQzEgZnJhbWUgd2l0aCBXU1NJRCAlcyBcbiIsIGJ1Zik7CisJaWYgKCFtZW1jbXAoJndzc2lkLCAmd3NzLT53c3NpZCwgc2l6ZW9mKHdzc2lkKSkKKwkgICAgJiYgd3NzLT5zdGF0ZSA9PSBXTFBfV1NTX1NUQVRFX0FDVElWRSkgeworCQlkX3ByaW50Zig2LCBkZXYsICJXU1NJRCBmcm9tIEMxIGZyYW1lIGlzIGtub3duIGxvY2FsbHkgIgorCQkJICJhbmQgaXMgYWN0aXZlXG4iKTsKKwkJLyogQ29uc3RydWN0IEMyIGZyYW1lICovCisJCXJlc3VsdCA9IHdscF9idWlsZF9hc3NvY19jMih3bHAsIHdzcywgJnJlc3ApOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBjb25zdHJ1Y3QgQzIgbWVzc2FnZS5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgeworCQlkX3ByaW50Zig2LCBkZXYsICJXU1NJRCBmcm9tIEMxIGZyYW1lIGlzIG5vdCBrbm93biBsb2NhbGx5ICIKKwkJCSAib3IgaXMgbm90IGFjdGl2ZVxuIik7CisJCS8qIENvbnN0cnVjdCBGMCBmcmFtZSAqLworCQlyZXN1bHQgPSB3bHBfYnVpbGRfYXNzb2NfZjAod2xwLCAmcmVzcCwgV0xQX0FTU09DX0VSUk9SX0lOVik7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIGNvbnN0cnVjdCBGMCBtZXNzYWdlLlxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwkvKiBTZW5kIEMyIGZyYW1lICovCisJZF9wcmludGYoNiwgZGV2LCAiVHJhbnNtaXR0aW5nIHJlc3BvbnNlIChDMi9GMCkgZnJhbWUgdG8gJTAyeDolMDJ4IFxuIiwKKwkJIHNyYy0+ZGF0YVsxXSwgc3JjLT5kYXRhWzBdKTsKKwlCVUdfT04od2xwLT54bWl0X2ZyYW1lID09IE5VTEwpOworCXJlc3VsdCA9IHdscC0+eG1pdF9mcmFtZSh3bHAsIHJlc3AsIHNyYyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byB0cmFuc21pdCByZXNwb25zZSBhc3NvY2lhdGlvbiAiCisJCQkibWVzc2FnZTogJWRcbiIsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQgPT0gLUVOWElPKQorCQkJZGV2X2VycihkZXYsICJXTFA6IElzIG5ldHdvcmsgaW50ZXJmYWNlIHVwPyBcbiIpOworCQkvKiBXZSBjb3VsZCB0cnkgYWdhaW4gLi4uICovCisJCWRldl9rZnJlZV9za2JfYW55KHJlc3ApOyAvKiB3ZSBuZWVkIHRvIGZyZWUgaWYgdHggZmFpbHMgKi8KKwl9CitvdXQ6CisJa2ZyZWVfc2tiKGZyYW1lX2N0eC0+c2tiKTsKKwlrZnJlZShmcmFtZV9jdHgpOworCW11dGV4X3VubG9jaygmd3NzLT5tdXRleCk7CisJZF9mbmVuZCg2LCBkZXYsICJXTFA6IGhhbmRsZSBDMSBmcmFtZS4gd2xwID0gJXBcbiIsIHdscCk7Cit9CisKKy8qKgorICogSGFuZGxlIGluY29taW5nIEMzIGZyYW1lCisgKgorICogVGhlIGZyYW1lIGhhcyBhbHJlYWR5IGJlZW4gdmVyaWZpZWQgdG8gY29udGFpbiBhbiBBc3NvY2lhdGlvbiBoZWFkZXIgd2l0aAorICogdGhlIGNvcnJlY3QgdmVyc2lvbiBudW1iZXIuIFBhcnNlIHRoZSBpbmNvbWluZyBmcmFtZSwgY29uc3RydWN0IGFuZCBzZW5kCisgKiBhIEM0IGZyYW1lIGluIHJlc3BvbnNlLiBJZiB0aGUgQzMgZnJhbWUgaWRlbnRpZmllcyBhIFdTUyB0aGF0IGlzIGxvY2FsbHkKKyAqIGFjdGl2ZSB0aGVuIHdlIGNvbm5lY3QgdG8gdGhpcyBuZWlnaGJvciAoYWRkIGl0IHRvIG91ciBFREEgY2FjaGUpLgorICovCit2b2lkIHdscF9oYW5kbGVfYzNfZnJhbWUoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKK3sKKwlzdHJ1Y3Qgd2xwX2Fzc29jX2ZyYW1lX2N0eCAqZnJhbWVfY3R4ID0gY29udGFpbmVyX29mKHdzLAorCQkJCQkJICBzdHJ1Y3Qgd2xwX2Fzc29jX2ZyYW1lX2N0eCwKKwkJCQkJCSAgd3MpOworCXN0cnVjdCB3bHAgKndscCA9IGZyYW1lX2N0eC0+d2xwOworCXN0cnVjdCB3bHBfd3NzICp3c3MgPSAmd2xwLT53c3M7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCBza19idWZmICpza2IgPSBmcmFtZV9jdHgtPnNrYjsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyICpzcmMgPSAmZnJhbWVfY3R4LT5zcmM7CisJaW50IHJlc3VsdDsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisJc3RydWN0IHNrX2J1ZmYgKnJlc3AgPSBOVUxMOworCXN0cnVjdCB3bHBfdXVpZCB3c3NpZDsKKwl1OCB0YWc7CisJc3RydWN0IHV3Yl9tYWNfYWRkciB2aXJ0X2FkZHI7CisKKwkvKiBQYXJzZSBDMyBmcmFtZSAqLworCWRfZm5zdGFydCg2LCBkZXYsICJXTFA6IGhhbmRsZSBDMyBmcmFtZS4gd2xwID0gJXAsIHNrYiA9ICVwXG4iLAorCQkgIHdscCwgc2tiKTsKKwltdXRleF9sb2NrKCZ3c3MtPm11dGV4KTsKKwlyZXN1bHQgPSB3bHBfcGFyc2VfYzNjNF9mcmFtZSh3bHAsIHNrYiwgJndzc2lkLCAmdGFnLCAmdmlydF9hZGRyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiB2YWx1ZXMgZnJvbSBDMyBmcmFtZS5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJd2xwX3dzc191dWlkX3ByaW50KGJ1Ziwgc2l6ZW9mKGJ1ZiksICZ3c3NpZCk7CisJZF9wcmludGYoNiwgZGV2LCAiUmVjZWl2ZWQgQzMgZnJhbWUgd2l0aCBXU1NJRCAlcyBcbiIsIGJ1Zik7CisJaWYgKCFtZW1jbXAoJndzc2lkLCAmd3NzLT53c3NpZCwgc2l6ZW9mKHdzc2lkKSkKKwkgICAgJiYgd3NzLT5zdGF0ZSA+PSBXTFBfV1NTX1NUQVRFX0FDVElWRSkgeworCQlkX3ByaW50Zig2LCBkZXYsICJXU1NJRCBmcm9tIEMzIGZyYW1lIGlzIGtub3duIGxvY2FsbHkgIgorCQkJICJhbmQgaXMgYWN0aXZlXG4iKTsKKwkJcmVzdWx0ID0gd2xwX2VkYV91cGRhdGVfbm9kZSgmd2xwLT5lZGEsIHNyYywgd3NzLAorCQkJCQkgICAgICh2b2lkICopIHZpcnRfYWRkci5kYXRhLCB0YWcsCisJCQkJCSAgICAgV0xQX1dTU19DT05ORUNURUQpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byB1cGRhdGUgRURBIGNhY2hlICIKKwkJCQkid2l0aCBuZXcgY29ubmVjdGVkIG5laWdoYm9yIGluZm9ybWF0aW9uLlxuIik7CisJCQlyZXN1bHQgPSB3bHBfYnVpbGRfYXNzb2NfZjAod2xwLCAmcmVzcCwKKwkJCQkJCSAgICBXTFBfQVNTT0NfRVJST1JfSU5UKTsKKwkJCWlmIChyZXN1bHQgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBjb25zdHJ1Y3QgRjAgIgorCQkJCQkibWVzc2FnZS5cbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJd3NzLT5zdGF0ZSA9IFdMUF9XU1NfU1RBVEVfQ09OTkVDVEVEOworCQkJLyogQ29uc3RydWN0IEM0IGZyYW1lICovCisJCQlyZXN1bHQgPSB3bHBfYnVpbGRfYXNzb2NfYzQod2xwLCB3c3MsICZyZXNwKTsKKwkJCWlmIChyZXN1bHQgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBjb25zdHJ1Y3QgQzQgIgorCQkJCQkibWVzc2FnZS5cbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZF9wcmludGYoNiwgZGV2LCAiV1NTSUQgZnJvbSBDMyBmcmFtZSBpcyBub3Qga25vd24gbG9jYWxseSAiCisJCQkgIm9yIGlzIG5vdCBhY3RpdmVcbiIpOworCQkvKiBDb25zdHJ1Y3QgRjAgZnJhbWUgKi8KKwkJcmVzdWx0ID0gd2xwX2J1aWxkX2Fzc29jX2YwKHdscCwgJnJlc3AsIFdMUF9BU1NPQ19FUlJPUl9JTlYpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBjb25zdHJ1Y3QgRjAgbWVzc2FnZS5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJLyogU2VuZCBDNCBmcmFtZSAqLworCWRfcHJpbnRmKDYsIGRldiwgIlRyYW5zbWl0dGluZyByZXNwb25zZSAoQzQvRjApIGZyYW1lIHRvICUwMng6JTAyeCBcbiIsCisJCSBzcmMtPmRhdGFbMV0sIHNyYy0+ZGF0YVswXSk7CisJQlVHX09OKHdscC0+eG1pdF9mcmFtZSA9PSBOVUxMKTsKKwlyZXN1bHQgPSB3bHAtPnhtaXRfZnJhbWUod2xwLCByZXNwLCBzcmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gdHJhbnNtaXQgcmVzcG9uc2UgYXNzb2NpYXRpb24gIgorCQkJIm1lc3NhZ2U6ICVkXG4iLCByZXN1bHQpOworCQlpZiAocmVzdWx0ID09IC1FTlhJTykKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBJcyBuZXR3b3JrIGludGVyZmFjZSB1cD8gXG4iKTsKKwkJLyogV2UgY291bGQgdHJ5IGFnYWluIC4uLiAqLworCQlkZXZfa2ZyZWVfc2tiX2FueShyZXNwKTsgLyogd2UgbmVlZCB0byBmcmVlIGlmIHR4IGZhaWxzICovCisJfQorb3V0OgorCWtmcmVlX3NrYihmcmFtZV9jdHgtPnNrYik7CisJa2ZyZWUoZnJhbWVfY3R4KTsKKwltdXRleF91bmxvY2soJndzcy0+bXV0ZXgpOworCWRfZm5lbmQoNiwgZGV2LCAiV0xQOiBoYW5kbGUgQzMgZnJhbWUuIHdscCA9ICVwLCBza2IgPSAlcFxuIiwKKwkJd2xwLCBza2IpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3dscC9zeXNmcy5jIGIvZHJpdmVycy91d2Ivd2xwL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiOWIxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXdiL3dscC9zeXNmcy5jCkBAIC0wLDAgKzEsNzA5IEBACisvKgorICogV2lNZWRpYSBMb2dpY2FsIExpbmsgQ29udHJvbCBQcm90b2NvbCAoV0xQKQorICogc3lzZnMgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnBvcmF0aW9uCisgKiBSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogRG9jcworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvd2xwLmg+CisjaW5jbHVkZSAid2xwLWludGVybmFsLmgiCisKK3N0YXRpYworc2l6ZV90IHdscF93c3Nfd3NzaWRfZV9wcmludChjaGFyICpidWYsIHNpemVfdCBidWZzaXplLAorCQkJICAgICBzdHJ1Y3Qgd2xwX3dzc2lkX2UgKndzc2lkX2UpCit7CisJc2l6ZV90IHVzZWQgPSAwOworCXVzZWQgKz0gc2NucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIiBXU1M6ICIpOworCXVzZWQgKz0gd2xwX3dzc191dWlkX3ByaW50KGJ1ZiArIHVzZWQsIGJ1ZnNpemUgLSB1c2VkLAorCQkJCSAgICZ3c3NpZF9lLT53c3NpZCk7CisKKwlpZiAod3NzaWRfZS0+aW5mbyAhPSBOVUxMKSB7CisJCXVzZWQgKz0gc2NucHJpbnRmKGJ1ZiArIHVzZWQsIGJ1ZnNpemUgLSB1c2VkLCAiICIpOworCQl1c2VkICs9IHV3Yl9tYWNfYWRkcl9wcmludChidWYgKyB1c2VkLCBidWZzaXplIC0gdXNlZCwKKwkJCQkJICAgJndzc2lkX2UtPmluZm8tPmJjYXN0KTsKKwkJdXNlZCArPSBzY25wcmludGYoYnVmICsgdXNlZCwgYnVmc2l6ZSAtIHVzZWQsICIgJXUgJXUgJXNcbiIsCisJCQkJICB3c3NpZF9lLT5pbmZvLT5hY2NlcHRfZW5yb2xsLAorCQkJCSAgd3NzaWRfZS0+aW5mby0+c2VjX3N0YXR1cywKKwkJCQkgIHdzc2lkX2UtPmluZm8tPm5hbWUpOworCX0KKwlyZXR1cm4gdXNlZDsKK30KKworLyoqCisgKiBQcmludCBvdXQgaW5mb3JtYXRpb24gbGVhcm5lZCBmcm9tIG5laWdoYm9yIGRpc2NvdmVyeQorICoKKyAqIFNvbWUgZmllbGRzIGJlaW5nIHByaW50ZWQgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZGV2aWNlIGRpc2NvdmVyeQorICogaW5mb3JtYXRpb24gKGl0IGlzIG5vdCBtYW5kYXRvcnkpLiBXZSBhcmUgdGh1cyBjYXJlZnVsIGhvdyB0aGUKKyAqIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgdG8gZW5zdXJlIGl0IGlzIGNsZWFyIHRvIHRoZSB1c2VyIHdoYXQgZmllbGQgaXMKKyAqIGJlaW5nIHJlZmVyZW5jZWQuCisgKiBUaGUgaW5mb3JtYXRpb24gYmVpbmcgcHJpbnRlZCBpcyBmb3Igb25lIHRpbWUgdXNlIC0gdGVtcG9yYXJ5IHN0b3JhZ2UgaXMKKyAqIGNsZWFuZWQgYWZ0ZXIgaXQgaXMgcHJpbnRlZC4KKyAqCisgKiBJZGVhbGx5IHN5c2ZzIG91dHB1dCBzaG91bGQgYmUgb24gb25lIGxpbmUuIFRoZSBpbmZvcm1hdGlvbiBwcmludGVkIGhlcmUKKyAqIGNvbnRhaW4gYSBmZXcgc3RyaW5ncyBzbyBpdCB3aWxsIGJlIGhhcmQgdG8gcGFyc2UgaWYgdGhleSBhcmUgYWxsCisgKiBwcmludGVkIG9uIHRoZSBzYW1lIGxpbmUgLSB3aXRob3V0IGFncmVlaW5nIG9uIGEgc3RhbmRhcmQgZmllbGQKKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljCitzc2l6ZV90IHdscF93c3NfbmVpZ2hib3Job29kX3ByaW50X3JlbW92ZShzdHJ1Y3Qgd2xwICp3bHAsIGNoYXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgYnVmc2l6ZSkKK3sKKwlzaXplX3QgdXNlZCA9IDA7CisJc3RydWN0IHdscF9uZWlnaGJvcl9lICpuZWlnaGI7CisJc3RydWN0IHdscF93c3NpZF9lICp3c3NpZF9lOworCisJbXV0ZXhfbG9jaygmd2xwLT5uYm11dGV4KTsKKwl1c2VkID0gc2NucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIiNOZWlnaGJvciBpbmZvcm1hdGlvblxuIgorCQkJICIjdXVpZCBkZXZfYWRkclxuIgorCQkJICIjIERldmljZSBOYW1lOlxuIyBNb2RlbCBOYW1lOlxuIyBNYW51ZmFjdHVyZXI6XG4iCisJCQkgIiMgTW9kZWwgTnI6XG4jIFNlcmlhbDpcbiIKKwkJCSAiIyBQcmkgRGV2IHR5cGU6IENhdGVnb3J5SUQgT1VJIE9VSVN1YmRpdiAiCisJCQkgIlN1YmNhdGVnb3J5SURcbiIKKwkJCSAiIyBXU1M6IFdTU0lEIFdTU19uYW1lIGFjY2VwdF9lbnJvbGwgc2VjX3N0YXR1cyAiCisJCQkgImJjYXN0XG4iCisJCQkgIiMgV1NTOiBXU1NJRCBXU1NfbmFtZSBhY2NlcHRfZW5yb2xsIHNlY19zdGF0dXMgIgorCQkJICJiY2FzdFxuXG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5laWdoYiwgJndscC0+bmVpZ2hib3JzLCBub2RlKSB7CisJCWlmIChidWZzaXplIC0gdXNlZCA8PSAwKQorCQkJZ290byBvdXQ7CisJCXVzZWQgKz0gd2xwX3dzc191dWlkX3ByaW50KGJ1ZiArIHVzZWQsIGJ1ZnNpemUgLSB1c2VkLAorCQkJCQkgICAmbmVpZ2hiLT51dWlkKTsKKwkJYnVmW3VzZWQrK10gPSAnICc7CisJCXVzZWQgKz0gdXdiX2Rldl9hZGRyX3ByaW50KGJ1ZiArIHVzZWQsIGJ1ZnNpemUgLSB1c2VkLAorCQkJCQkgICAmbmVpZ2hiLT51d2JfZGV2LT5kZXZfYWRkcik7CisJCWlmIChuZWlnaGItPmluZm8gIT0gTlVMTCkKKwkJCXVzZWQgKz0gc2NucHJpbnRmKGJ1ZiArIHVzZWQsIGJ1ZnNpemUgLSB1c2VkLAorCQkJCQkgICJcbiBEZXZpY2UgTmFtZTogJXNcbiIKKwkJCQkJICAiIE1vZGVsIE5hbWU6ICVzXG4iCisJCQkJCSAgIiBNYW51ZmFjdHVyZXI6JXMgXG4iCisJCQkJCSAgIiBNb2RlbCBOcjogJXNcbiIKKwkJCQkJICAiIFNlcmlhbDogJXNcbiIKKwkJCQkJICAiIFByaSBEZXYgdHlwZTogIgorCQkJCQkgICIldSAlMDJ4OiUwMng6JTAyeCAldSAldVxuIiwKKwkJCQkJICBuZWlnaGItPmluZm8tPm5hbWUsCisJCQkJCSAgbmVpZ2hiLT5pbmZvLT5tb2RlbF9uYW1lLAorCQkJCQkgIG5laWdoYi0+aW5mby0+bWFudWZhY3R1cmVyLAorCQkJCQkgIG5laWdoYi0+aW5mby0+bW9kZWxfbnIsCisJCQkJCSAgbmVpZ2hiLT5pbmZvLT5zZXJpYWwsCisJCQkJCSAgbmVpZ2hiLT5pbmZvLT5wcmltX2Rldl90eXBlLmNhdGVnb3J5LAorCQkJCQkgIG5laWdoYi0+aW5mby0+cHJpbV9kZXZfdHlwZS5PVUlbMF0sCisJCQkJCSAgbmVpZ2hiLT5pbmZvLT5wcmltX2Rldl90eXBlLk9VSVsxXSwKKwkJCQkJICBuZWlnaGItPmluZm8tPnByaW1fZGV2X3R5cGUuT1VJWzJdLAorCQkJCQkgIG5laWdoYi0+aW5mby0+cHJpbV9kZXZfdHlwZS5PVUlzdWJkaXYsCisJCQkJCSAgbmVpZ2hiLT5pbmZvLT5wcmltX2Rldl90eXBlLnN1YklEKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3c3NpZF9lLCAmbmVpZ2hiLT53c3NpZCwgbm9kZSkgeworCQkJdXNlZCArPSB3bHBfd3NzX3dzc2lkX2VfcHJpbnQoYnVmICsgdXNlZCwKKwkJCQkJCSAgICAgIGJ1ZnNpemUgLSB1c2VkLAorCQkJCQkJICAgICAgd3NzaWRfZSk7CisJCX0KKwkJYnVmW3VzZWQrK10gPSAnXG4nOworCQl3bHBfcmVtb3ZlX25laWdoYm9yX3RtcF9pbmZvKG5laWdoYik7CisJfQorCisKK291dDoKKwltdXRleF91bmxvY2soJndscC0+bmJtdXRleCk7CisJcmV0dXJuIHVzZWQ7Cit9CisKKworLyoqCisgKiBTaG93IHByb3BlcnRpZXMgb2YgYWxsIFdTUyBpbiBuZWlnaGJvcmhvb2QuCisgKgorICogV2lsbCB0cmlnZ2VyIGEgY29tcGxldGUgZGlzY292ZXJ5IG9mIFdTUyBhY3RpdmF0ZWQgYnkgdGhpcyBkZXZpY2UgYW5kCisgKiBpdHMgbmVpZ2hib3JzLgorICovCitzc2l6ZV90IHdscF9uZWlnaGJvcmhvb2Rfc2hvdyhzdHJ1Y3Qgd2xwICp3bHAsIGNoYXIgKmJ1ZikKK3sKKwl3bHBfZGlzY292ZXIod2xwKTsKKwlyZXR1cm4gd2xwX3dzc19uZWlnaGJvcmhvb2RfcHJpbnRfcmVtb3ZlKHdscCwgYnVmLCBQQUdFX1NJWkUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod2xwX25laWdoYm9yaG9vZF9zaG93KTsKKworc3RhdGljCitzc2l6ZV90IF9fd2xwX3dzc19wcm9wZXJ0aWVzX3Nob3coc3RydWN0IHdscF93c3MgKndzcywgY2hhciAqYnVmLAorCQkJCSAgc2l6ZV90IGJ1ZnNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisKKwlyZXN1bHQgPSB3bHBfd3NzX3V1aWRfcHJpbnQoYnVmLCBidWZzaXplLCAmd3NzLT53c3NpZCk7CisJcmVzdWx0ICs9IHNjbnByaW50ZihidWYgKyByZXN1bHQsIGJ1ZnNpemUgLSByZXN1bHQsICIgIik7CisJcmVzdWx0ICs9IHV3Yl9tYWNfYWRkcl9wcmludChidWYgKyByZXN1bHQsIGJ1ZnNpemUgLSByZXN1bHQsCisJCQkJICAgICAmd3NzLT5iY2FzdCk7CisJcmVzdWx0ICs9IHNjbnByaW50ZihidWYgKyByZXN1bHQsIGJ1ZnNpemUgLSByZXN1bHQsCisJCQkgICAgIiAweCUwMnggJXUgIiwgd3NzLT5oYXNoLCB3c3MtPnNlY3VyZV9zdGF0dXMpOworCXJlc3VsdCArPSB3bHBfd3NzX2tleV9wcmludChidWYgKyByZXN1bHQsIGJ1ZnNpemUgLSByZXN1bHQsCisJCQkJICAgIHdzcy0+bWFzdGVyX2tleSk7CisJcmVzdWx0ICs9IHNjbnByaW50ZihidWYgKyByZXN1bHQsIGJ1ZnNpemUgLSByZXN1bHQsICIgMHglMDJ4ICIsCisJCQkgICAgd3NzLT50YWcpOworCXJlc3VsdCArPSB1d2JfbWFjX2FkZHJfcHJpbnQoYnVmICsgcmVzdWx0LCBidWZzaXplIC0gcmVzdWx0LAorCQkJCSAgICAgJndzcy0+dmlydHVhbF9hZGRyKTsKKwlyZXN1bHQgKz0gc2NucHJpbnRmKGJ1ZiArIHJlc3VsdCwgYnVmc2l6ZSAtIHJlc3VsdCwgIiAlcyIsIHdzcy0+bmFtZSk7CisJcmVzdWx0ICs9IHNjbnByaW50ZihidWYgKyByZXN1bHQsIGJ1ZnNpemUgLSByZXN1bHQsCisJCQkgICAgIlxuXG4jV1NTSURcbiNXU1MgYnJvYWRjYXN0IGFkZHJlc3NcbiIKKwkJCSAgICAiI1dTUyBoYXNoXG4jV1NTIHNlY3VyZSBzdGF0dXNcbiIKKwkJCSAgICAiI1dTUyBtYXN0ZXIga2V5XG4jV1NTIGxvY2FsIHRhZ1xuIgorCQkJICAgICIjV1NTIGxvY2FsIHZpcnR1YWwgRVVJLTQ4XG4jV1NTIG5hbWVcbiIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogU2hvdyB3aGljaCBXU1MgaXMgYWN0aXZhdGVkLgorICovCitzc2l6ZV90IHdscF93c3NfYWN0aXZhdGVfc2hvdyhzdHJ1Y3Qgd2xwX3dzcyAqd3NzLCBjaGFyICpidWYpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3c3MtPm11dGV4KSkKKwkJZ290byBvdXQ7CisJaWYgKHdzcy0+c3RhdGUgPj0gV0xQX1dTU19TVEFURV9BQ1RJVkUpCisJCXJlc3VsdCA9IF9fd2xwX3dzc19wcm9wZXJ0aWVzX3Nob3cod3NzLCBidWYsIFBBR0VfU0laRSk7CisJZWxzZQorCQlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJObyBsb2NhbCBXU1MgYWN0aXZlLlxuIik7CisJcmVzdWx0ICs9IHNjbnByaW50ZihidWYgKyByZXN1bHQsIFBBR0VfU0laRSAtIHJlc3VsdCwKKwkJCSJcblxuIgorCQkJIiMgZWNobyBXU1NJRCBTRUNVUkVfU1RBVFVTIEFDQ0VQVF9FTlJPTExNRU5UICIKKwkJCSJOQU1FICNjcmVhdGUgbmV3IFdTU1xuIgorCQkJIiMgZWNobyBXU1NJRCBbREVWIEFERFJdICNlbnJvbGwgaW4gYW5kIGFjdGl2YXRlICIKKwkJCSJleGlzdGluZyBXU1MsIGNhbiByZXF1ZXN0IHJlZ2lzdHJhclxuIgorCQkJIiNcbiIKKwkJCSIjIFdTU0lEIGlzIGEgMTYgYnl0ZSBoZXggYXJyYXkuIEVnLiAxMiBBMyAzQiAuLi4gXG4iCisJCQkiIyBTRUNVUkVfU1RBVFVTIDAgLSB1bnNlY3VyZSwgMSAtIHNlY3VyZSAoZGVmYXVsdClcbiIKKwkJCSIjIEFDQ0VQVF9FTlJPTExNRU5UIDAgLSBubywgMSAtIHllcyAoZGVmYXVsdClcbiIKKwkJCSIjIE5BTUUgaXMgdGhlIHRleHQgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBXU1NcbiIKKwkJCSIjIERFViBBRERSIGlzIHRoZSBkZXZpY2UgYWRkcmVzcyBvZiBuZWlnaGJvciAiCisJCQkidGhhdCBzaG91bGQgYmUgcmVnaXN0cmFyLiBFZy4gMzI6QUJcbiIpOworCisJbXV0ZXhfdW5sb2NrKCZ3c3MtPm11dGV4KTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworCit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfd3NzX2FjdGl2YXRlX3Nob3cpOworCisvKioKKyAqIENyZWF0ZS9hY3RpdmF0ZSBhIG5ldyBXU1Mgb3IgZW5yb2xsL2FjdGl2YXRlIGluIG5laWdoYm9yaW5nIFdTUworICoKKyAqIFRoZSB1c2VyIGNhbiBwcm92aWRlIHRoZSBXU1NJRCBvZiBhIFdTUyBpbiB3aGljaCBpdCB3YW50cyB0byBlbnJvbGwuCisgKiBPbmx5IHRoZSBXU1NJRCBpcyBuZWNlc3NhcnkgaWYgdGhlIFdTUyBoYXZlIGJlZW4gZGlzY292ZXJlZCBiZWZvcmUuIElmCisgKiB0aGUgV1NTIGhhcyBub3QgYmVlbiBkaXNjb3ZlcmVkIGJlZm9yZSwgb3IgdGhlIHVzZXIgd2FudHMgdG8gdXNlIGEKKyAqIHBhcnRpY3VsYXIgbmVpZ2hib3IgYXMgaXRzIHJlZ2lzdHJhciwgdGhlbiB0aGUgdXNlciBjYW4gYWxzbyBwcm92aWRlIGEKKyAqIGRldmljZSBhZGRyZXNzIG9yIHRoZSBuZWlnaGJvciB0aGF0IHdpbGwgYmUgdXNlZCBhcyByZWdpc3RyYXIuCisgKgorICogQSBuZXcgV1NTIGlzIGNyZWF0ZWQgd2hlbiB0aGUgdXNlciBwcm92aWRlcyBhIFdTU0lELCBzZWN1cmUgc3RhdHVzLCBhbmQKKyAqIFdTUyBuYW1lLgorICovCitzc2l6ZV90IHdscF93c3NfYWN0aXZhdGVfc3RvcmUoc3RydWN0IHdscF93c3MgKndzcywKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcmVzdWx0ID0gLUVJTlZBTDsKKwlzdHJ1Y3Qgd2xwX3V1aWQgd3NzaWQ7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBkZXY7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBiY2FzdCA9IHsuZGF0YSA9IHsweGZmLCAweGZmfSB9OworCWNoYXIgbmFtZVs2NV07CisJdW5zaWduZWQgc2VjX3N0YXR1cywgYWNjZXB0OworCW1lbXNldChuYW1lLCAwLCBzaXplb2YobmFtZSkpOworCXJlc3VsdCA9IHNzY2FuZihidWYsICIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICIKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeDolMDJoaHgiLAorCQkJJndzc2lkLmRhdGFbMF0gLCAmd3NzaWQuZGF0YVsxXSwKKwkJCSZ3c3NpZC5kYXRhWzJdICwgJndzc2lkLmRhdGFbM10sCisJCQkmd3NzaWQuZGF0YVs0XSAsICZ3c3NpZC5kYXRhWzVdLAorCQkJJndzc2lkLmRhdGFbNl0gLCAmd3NzaWQuZGF0YVs3XSwKKwkJCSZ3c3NpZC5kYXRhWzhdICwgJndzc2lkLmRhdGFbOV0sCisJCQkmd3NzaWQuZGF0YVsxMF0sICZ3c3NpZC5kYXRhWzExXSwKKwkJCSZ3c3NpZC5kYXRhWzEyXSwgJndzc2lkLmRhdGFbMTNdLAorCQkJJndzc2lkLmRhdGFbMTRdLCAmd3NzaWQuZGF0YVsxNV0sCisJCQkmZGV2LmRhdGFbMV0sICZkZXYuZGF0YVswXSk7CisJaWYgKHJlc3VsdCA9PSAxNiB8fCByZXN1bHQgPT0gMTcpIHsKKwkJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwgIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkJIiV1ICV1ICU2NGMiLAorCQkJCSZ3c3NpZC5kYXRhWzBdICwgJndzc2lkLmRhdGFbMV0sCisJCQkJJndzc2lkLmRhdGFbMl0gLCAmd3NzaWQuZGF0YVszXSwKKwkJCQkmd3NzaWQuZGF0YVs0XSAsICZ3c3NpZC5kYXRhWzVdLAorCQkJCSZ3c3NpZC5kYXRhWzZdICwgJndzc2lkLmRhdGFbN10sCisJCQkJJndzc2lkLmRhdGFbOF0gLCAmd3NzaWQuZGF0YVs5XSwKKwkJCQkmd3NzaWQuZGF0YVsxMF0sICZ3c3NpZC5kYXRhWzExXSwKKwkJCQkmd3NzaWQuZGF0YVsxMl0sICZ3c3NpZC5kYXRhWzEzXSwKKwkJCQkmd3NzaWQuZGF0YVsxNF0sICZ3c3NpZC5kYXRhWzE1XSwKKwkJCQkmc2VjX3N0YXR1cywgJmFjY2VwdCwgbmFtZSk7CisJCWlmIChyZXN1bHQgPT0gMTYpCisJCQlyZXN1bHQgPSB3bHBfd3NzX2Vucm9sbF9hY3RpdmF0ZSh3c3MsICZ3c3NpZCwgJmJjYXN0KTsKKwkJZWxzZSBpZiAocmVzdWx0ID09IDE5KSB7CisJCQlzZWNfc3RhdHVzID0gc2VjX3N0YXR1cyA9PSAwID8gMCA6IDE7CisJCQlhY2NlcHQgPSBhY2NlcHQgPT0gMCA/IDAgOiAxOworCQkJLyogV2UgcmVhZCBuYW1lIHVzaW5nICVjLCBzbyB0aGUgbmV3bGluZSBuZWVkcyB0byBiZQorCQkJICogcmVtb3ZlZCAqLworCQkJaWYgKHN0cmxlbihuYW1lKSAhPSBzaXplb2YobmFtZSkgLSAxKQorCQkJCW5hbWVbc3RybGVuKG5hbWUpIC0gMV0gPSAnXDAnOworCQkJcmVzdWx0ID0gd2xwX3dzc19jcmVhdGVfYWN0aXZhdGUod3NzLCAmd3NzaWQsIG5hbWUsCisJCQkJCQkJIHNlY19zdGF0dXMsIGFjY2VwdCk7CisJCX0gZWxzZQorCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxOCkKKwkJcmVzdWx0ID0gd2xwX3dzc19lbnJvbGxfYWN0aXZhdGUod3NzLCAmd3NzaWQsICZkZXYpOworCWVsc2UKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfd3NzX2FjdGl2YXRlX3N0b3JlKTsKKworLyoqCisgKiBTaG93IHRoZSBVVUlEIG9mIHRoaXMgaG9zdAorICovCitzc2l6ZV90IHdscF91dWlkX3Nob3coc3RydWN0IHdscCAqd2xwLCBjaGFyICpidWYpCit7CisJc3NpemVfdCByZXN1bHQgPSAwOworCisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJcmVzdWx0ID0gd2xwX3dzc191dWlkX3ByaW50KGJ1ZiwgUEFHRV9TSVpFLCAmd2xwLT51dWlkKTsKKwlidWZbcmVzdWx0KytdID0gJ1xuJzsKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfdXVpZF9zaG93KTsKKworLyoqCisgKiBTdG9yZSBhIG5ldyBVVUlEIGZvciB0aGlzIGhvc3QKKyAqCisgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhpcyBzaG91bGQgYmUgZW5jb2RlZCBhcyBhbiBvY3RldCBzdHJpbmcgaW4gdGhlCisgKiBvcmRlciB0aGUgb2N0ZXRzIGFyZSBzaG93biBpbiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gUkZDIDQxMjIgKFdMUAorICogMC45OSBbVGFibGUgNl0pCisgKgorICogV2UgZG8gbm90IGNoZWNrIHZhbHVlIHByb3ZpZGVkIGJ5IHVzZXIuCisgKi8KK3NzaXplX3Qgd2xwX3V1aWRfc3RvcmUoc3RydWN0IHdscCAqd2xwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCB3bHBfdXVpZCB1dWlkOworCisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwgIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiCisJCQkiJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICIKKwkJCSIlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggIgorCQkJIiUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAiLAorCQkJJnV1aWQuZGF0YVswXSAsICZ1dWlkLmRhdGFbMV0sCisJCQkmdXVpZC5kYXRhWzJdICwgJnV1aWQuZGF0YVszXSwKKwkJCSZ1dWlkLmRhdGFbNF0gLCAmdXVpZC5kYXRhWzVdLAorCQkJJnV1aWQuZGF0YVs2XSAsICZ1dWlkLmRhdGFbN10sCisJCQkmdXVpZC5kYXRhWzhdICwgJnV1aWQuZGF0YVs5XSwKKwkJCSZ1dWlkLmRhdGFbMTBdLCAmdXVpZC5kYXRhWzExXSwKKwkJCSZ1dWlkLmRhdGFbMTJdLCAmdXVpZC5kYXRhWzEzXSwKKwkJCSZ1dWlkLmRhdGFbMTRdLCAmdXVpZC5kYXRhWzE1XSk7CisJaWYgKHJlc3VsdCAhPSAxNikgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKwl3bHAtPnV1aWQgPSB1dWlkOworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZ3bHAtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfdXVpZF9zdG9yZSk7CisKKy8qKgorICogU2hvdyBjb250ZW50cyBvZiBtZW1iZXJzIG9mIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB3bHBfZGV2X2luZm9fc2hvdyh0eXBlKQkJCQkJCVwKK3NzaXplX3Qgd2xwX2Rldl8jI3R5cGUjI19zaG93KHN0cnVjdCB3bHAgKndscCwgY2hhciAqYnVmKQkJXAorewkJCQkJCQkJCVwKKwlzc2l6ZV90IHJlc3VsdCA9IDA7CQkJCQkJXAorCW11dGV4X2xvY2soJndscC0+bXV0ZXgpOwkJCQkJXAorCWlmICh3bHAtPmRldl9pbmZvID09IE5VTEwpIHsJCQkJCVwKKwkJcmVzdWx0ID0gX193bHBfc2V0dXBfZGV2aWNlX2luZm8od2xwKTsJCQlcCisJCWlmIChyZXN1bHQgPCAwKQkJCQkJCVwKKwkJCWdvdG8gb3V0OwkJCQkJXAorCX0JCQkJCQkJCVwKKwlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgd2xwLT5kZXZfaW5mby0+dHlwZSk7XAorb3V0OgkJCQkJCQkJCVwKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOwkJCQkJXAorCXJldHVybiByZXN1bHQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfZGV2XyMjdHlwZSMjX3Nob3cpOworCit3bHBfZGV2X2luZm9fc2hvdyhuYW1lKQord2xwX2Rldl9pbmZvX3Nob3cobW9kZWxfbmFtZSkKK3dscF9kZXZfaW5mb19zaG93KG1vZGVsX25yKQord2xwX2Rldl9pbmZvX3Nob3cobWFudWZhY3R1cmVyKQord2xwX2Rldl9pbmZvX3Nob3coc2VyaWFsKQorCisvKioKKyAqIFN0b3JlIGNvbnRlbnRzIG9mIG1lbWJlcnMgb2YgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHdscF9kZXZfaW5mb19zdG9yZSh0eXBlLCBsZW4pCQkJCQlcCitzc2l6ZV90IHdscF9kZXZfIyN0eXBlIyNfc3RvcmUoc3RydWN0IHdscCAqd2xwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVwKK3sJCQkJCQkJCQlcCisJc3NpemVfdCByZXN1bHQ7CQkJCQkJCVwKKwljaGFyIGZvcm1hdFsxMF07CQkJCQkJXAorCW11dGV4X2xvY2soJndscC0+bXV0ZXgpOwkJCQkJXAorCWlmICh3bHAtPmRldl9pbmZvID09IE5VTEwpIHsJCQkJCVwKKwkJcmVzdWx0ID0gX193bHBfYWxsb2NfZGV2aWNlX2luZm8od2xwKTsJCQlcCisJCWlmIChyZXN1bHQgPCAwKQkJCQkJCVwKKwkJCWdvdG8gb3V0OwkJCQkJXAorCX0JCQkJCQkJCVwKKwltZW1zZXQod2xwLT5kZXZfaW5mby0+dHlwZSwgMCwgc2l6ZW9mKHdscC0+ZGV2X2luZm8tPnR5cGUpKTsJXAorCXNwcmludGYoZm9ybWF0LCAiJSUldWMiLCBsZW4pOwkJCQkJXAorCXJlc3VsdCA9IHNzY2FuZihidWYsIGZvcm1hdCwgd2xwLT5kZXZfaW5mby0+dHlwZSk7CQlcCitvdXQ6CQkJCQkJCQkJXAorCW11dGV4X3VubG9jaygmd2xwLT5tdXRleCk7CQkJCQlcCisJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiBzaXplOwkJCQlcCit9CQkJCQkJCQkJXAorRVhQT1JUX1NZTUJPTF9HUEwod2xwX2Rldl8jI3R5cGUjI19zdG9yZSk7CisKK3dscF9kZXZfaW5mb19zdG9yZShuYW1lLCAzMikKK3dscF9kZXZfaW5mb19zdG9yZShtYW51ZmFjdHVyZXIsIDY0KQord2xwX2Rldl9pbmZvX3N0b3JlKG1vZGVsX25hbWUsIDMyKQord2xwX2Rldl9pbmZvX3N0b3JlKG1vZGVsX25yLCAzMikKK3dscF9kZXZfaW5mb19zdG9yZShzZXJpYWwsIDMyKQorCitzdGF0aWMKK2NvbnN0IGNoYXIgKl9fd2xwX2Rldl9jYXRlZ29yeVtdID0geworCVtXTFBfREVWX0NBVF9DT01QVVRFUl0gPSAiQ29tcHV0ZXIiLAorCVtXTFBfREVWX0NBVF9JTlBVVF0gPSAiSW5wdXQgZGV2aWNlIiwKKwlbV0xQX0RFVl9DQVRfUFJJTlRfU0NBTl9GQVhfQ09QSUVSXSA9ICJQcmludGVyLCBzY2FubmVyLCBGQVgsIG9yICIKKwkJCQkJICAgICAgIkNvcGllciIsCisJW1dMUF9ERVZfQ0FUX0NBTUVSQV0gPSAiQ2FtZXJhIiwKKwlbV0xQX0RFVl9DQVRfU1RPUkFHRV0gPSAiU3RvcmFnZSBOZXR3b3JrIiwKKwlbV0xQX0RFVl9DQVRfSU5GUkFTVFJVQ1RVUkVdID0gIkluZnJhc3RydWN0dXJlIiwKKwlbV0xQX0RFVl9DQVRfRElTUExBWV0gPSAiRGlzcGxheSIsCisJW1dMUF9ERVZfQ0FUX01VTFRJTV0gPSAiTXVsdGltZWRpYSBkZXZpY2UiLAorCVtXTFBfREVWX0NBVF9HQU1JTkddID0gIkdhbWluZyBkZXZpY2UiLAorCVtXTFBfREVWX0NBVF9URUxFUEhPTkVdID0gIlRlbGVwaG9uZSIsCisJW1dMUF9ERVZfQ0FUX09USEVSXSA9ICJPdGhlciIsCit9OworCitzdGF0aWMKK2NvbnN0IGNoYXIgKndscF9kZXZfY2F0ZWdvcnlfc3RyKHVuc2lnbmVkIGNhdCkKK3sKKwlpZiAoKGNhdCA+PSBXTFBfREVWX0NBVF9DT01QVVRFUiAmJiBjYXQgPD0gV0xQX0RFVl9DQVRfVEVMRVBIT05FKQorCSAgICB8fCBjYXQgPT0gV0xQX0RFVl9DQVRfT1RIRVIpCisJCXJldHVybiBfX3dscF9kZXZfY2F0ZWdvcnlbY2F0XTsKKwlyZXR1cm4gInVua25vd24gY2F0ZWdvcnkiOworfQorCitzc2l6ZV90IHdscF9kZXZfcHJpbV9jYXRlZ29yeV9zaG93KHN0cnVjdCB3bHAgKndscCwgY2hhciAqYnVmKQoreworCXNzaXplX3QgcmVzdWx0ID0gMDsKKwltdXRleF9sb2NrKCZ3bHAtPm11dGV4KTsKKwlpZiAod2xwLT5kZXZfaW5mbyA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IF9fd2xwX3NldHVwX2RldmljZV9pbmZvKHdscCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCXJlc3VsdCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAorCQkgIHdscF9kZXZfY2F0ZWdvcnlfc3RyKHdscC0+ZGV2X2luZm8tPnByaW1fZGV2X3R5cGUuY2F0ZWdvcnkpKTsKK291dDoKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfZGV2X3ByaW1fY2F0ZWdvcnlfc2hvdyk7CisKK3NzaXplX3Qgd2xwX2Rldl9wcmltX2NhdGVnb3J5X3N0b3JlKHN0cnVjdCB3bHAgKndscCwgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgICBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwl1MTYgY2F0OworCW11dGV4X2xvY2soJndscC0+bXV0ZXgpOworCWlmICh3bHAtPmRldl9pbmZvID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gX193bHBfYWxsb2NfZGV2aWNlX2luZm8od2xwKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwgIiVodSIsICZjYXQpOworCWlmICgoY2F0ID49IFdMUF9ERVZfQ0FUX0NPTVBVVEVSICYmIGNhdCA8PSBXTFBfREVWX0NBVF9URUxFUEhPTkUpCisJICAgIHx8IGNhdCA9PSBXTFBfREVWX0NBVF9PVEhFUikKKwkJd2xwLT5kZXZfaW5mby0+cHJpbV9kZXZfdHlwZS5jYXRlZ29yeSA9IGNhdDsKKwllbHNlCisJCXJlc3VsdCA9IC1FSU5WQUw7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bHAtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfZGV2X3ByaW1fY2F0ZWdvcnlfc3RvcmUpOworCitzc2l6ZV90IHdscF9kZXZfcHJpbV9PVUlfc2hvdyhzdHJ1Y3Qgd2xwICp3bHAsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJlc3VsdCA9IDA7CisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJaWYgKHdscC0+ZGV2X2luZm8gPT0gTlVMTCkgeworCQlyZXN1bHQgPSBfX3dscF9zZXR1cF9kZXZpY2VfaW5mbyh3bHApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKwlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJ4OiUwMng6JTAyeFxuIiwKKwkJCSAgIHdscC0+ZGV2X2luZm8tPnByaW1fZGV2X3R5cGUuT1VJWzBdLAorCQkJICAgd2xwLT5kZXZfaW5mby0+cHJpbV9kZXZfdHlwZS5PVUlbMV0sCisJCQkgICB3bHAtPmRldl9pbmZvLT5wcmltX2Rldl90eXBlLk9VSVsyXSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bHAtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod2xwX2Rldl9wcmltX09VSV9zaG93KTsKKworc3NpemVfdCB3bHBfZGV2X3ByaW1fT1VJX3N0b3JlKHN0cnVjdCB3bHAgKndscCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwl1OCBPVUlbM107CisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJaWYgKHdscC0+ZGV2X2luZm8gPT0gTlVMTCkgeworCQlyZXN1bHQgPSBfX3dscF9hbGxvY19kZXZpY2VfaW5mbyh3bHApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJWhoeDolaGh4OiVoaHgiLAorCQkJJk9VSVswXSwgJk9VSVsxXSwgJk9VSVsyXSk7CisJaWYgKHJlc3VsdCAhPSAzKSB7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZQorCQltZW1jcHkod2xwLT5kZXZfaW5mby0+cHJpbV9kZXZfdHlwZS5PVUksIE9VSSwgc2l6ZW9mKE9VSSkpOworb3V0OgorCW11dGV4X3VubG9jaygmd2xwLT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiBzaXplOworfQorRVhQT1JUX1NZTUJPTF9HUEwod2xwX2Rldl9wcmltX09VSV9zdG9yZSk7CisKKworc3NpemVfdCB3bHBfZGV2X3ByaW1fT1VJX3N1Yl9zaG93KHN0cnVjdCB3bHAgKndscCwgY2hhciAqYnVmKQoreworCXNzaXplX3QgcmVzdWx0ID0gMDsKKwltdXRleF9sb2NrKCZ3bHAtPm11dGV4KTsKKwlpZiAod2xwLT5kZXZfaW5mbyA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IF9fd2xwX3NldHVwX2RldmljZV9pbmZvKHdscCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCXJlc3VsdCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJICAgd2xwLT5kZXZfaW5mby0+cHJpbV9kZXZfdHlwZS5PVUlzdWJkaXYpOworb3V0OgorCW11dGV4X3VubG9jaygmd2xwLT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdscF9kZXZfcHJpbV9PVUlfc3ViX3Nob3cpOworCitzc2l6ZV90IHdscF9kZXZfcHJpbV9PVUlfc3ViX3N0b3JlKHN0cnVjdCB3bHAgKndscCwgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcmVzdWx0OworCXVuc2lnbmVkIHN1YjsKKwl1OCBtYXhfc3ViID0gfjA7CisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJaWYgKHdscC0+ZGV2X2luZm8gPT0gTlVMTCkgeworCQlyZXN1bHQgPSBfX3dscF9hbGxvY19kZXZpY2VfaW5mbyh3bHApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmc3ViKTsKKwlpZiAoc3ViIDw9IG1heF9zdWIpCisJCXdscC0+ZGV2X2luZm8tPnByaW1fZGV2X3R5cGUuT1VJc3ViZGl2ID0gc3ViOworCWVsc2UKKwkJcmVzdWx0ID0gLUVJTlZBTDsKK291dDoKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOworCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogc2l6ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdscF9kZXZfcHJpbV9PVUlfc3ViX3N0b3JlKTsKKworc3NpemVfdCB3bHBfZGV2X3ByaW1fc3ViY2F0X3Nob3coc3RydWN0IHdscCAqd2xwLCBjaGFyICpidWYpCit7CisJc3NpemVfdCByZXN1bHQgPSAwOworCW11dGV4X2xvY2soJndscC0+bXV0ZXgpOworCWlmICh3bHAtPmRldl9pbmZvID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gX193bHBfc2V0dXBfZGV2aWNlX2luZm8od2xwKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJcmVzdWx0ID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCisJCQkgICB3bHAtPmRldl9pbmZvLT5wcmltX2Rldl90eXBlLnN1YklEKTsKK291dDoKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfZGV2X3ByaW1fc3ViY2F0X3Nob3cpOworCitzc2l6ZV90IHdscF9kZXZfcHJpbV9zdWJjYXRfc3RvcmUoc3RydWN0IHdscCAqd2xwLCBjb25zdCBjaGFyICpidWYsCisJCQkJICBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJlc3VsdDsKKwl1bnNpZ25lZCBzdWI7CisJX19sZTE2IG1heF9zdWIgPSB+MDsKKwltdXRleF9sb2NrKCZ3bHAtPm11dGV4KTsKKwlpZiAod2xwLT5kZXZfaW5mbyA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IF9fd2xwX2FsbG9jX2RldmljZV9pbmZvKHdscCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCXJlc3VsdCA9IHNzY2FuZihidWYsICIldSIsICZzdWIpOworCWlmIChzdWIgPD0gbWF4X3N1YikKKwkJd2xwLT5kZXZfaW5mby0+cHJpbV9kZXZfdHlwZS5zdWJJRCA9IHN1YjsKKwllbHNlCisJCXJlc3VsdCA9IC1FSU5WQUw7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bHAtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfZGV2X3ByaW1fc3ViY2F0X3N0b3JlKTsKKworLyoqCisgKiBTdWJzeXN0ZW0gaW1wbGVtZW50YXRpb24gZm9yIGludGVyYWN0aW9uIHdpdGggaW5kaXZpZHVhbCBXU1MgdmlhIHN5c2ZzCisgKgorICogRm9sbG93ZWQgaW5zdHJ1Y3Rpb25zIGZvciBzdWJzeXN0ZW0gaW4gRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKKyAqLworCisjZGVmaW5lIGtvYmpfdG9fd2xwX3dzcyhvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCB3bHBfd3NzLCBrb2JqKQorI2RlZmluZSBhdHRyX3RvX3dscF93c3NfYXR0cihfYXR0cikgXAorCWNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IHdscF93c3NfYXR0cmlidXRlLCBhdHRyKQorCisvKioKKyAqIFN5c2ZzIHN1YnN5c3RlbTogZm9yd2FyZCByZWFkIGNhbGxzCisgKgorICogU3lzZnMgb3BlcmF0aW9uIGZvciBmb3J3YXJkaW5nIHJlYWQgY2FsbCB0byB0aGUgc2hvdyBtZXRob2Qgb2YgdGhlCisgKiBhdHRyaWJ1dGUgb3duZXIKKyAqLworc3RhdGljCitzc2l6ZV90IHdscF93c3NfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHdscF93c3NfYXR0cmlidXRlICp3c3NfYXR0ciA9IGF0dHJfdG9fd2xwX3dzc19hdHRyKGF0dHIpOworCXN0cnVjdCB3bHBfd3NzICp3c3MgPSBrb2JqX3RvX3dscF93c3Moa29iaik7CisJc3NpemVfdCByZXQgPSAtRUlPOworCisJaWYgKHdzc19hdHRyLT5zaG93KQorCQlyZXQgPSB3c3NfYXR0ci0+c2hvdyh3c3MsIGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKy8qKgorICogU3lzZnMgc3Vic3lzdGVtOiBmb3J3YXJkIHdyaXRlIGNhbGxzCisgKgorICogU3lzZnMgb3BlcmF0aW9uIGZvciBmb3J3YXJkaW5nIHdyaXRlIGNhbGwgdG8gdGhlIHN0b3JlIG1ldGhvZCBvZiB0aGUKKyAqIGF0dHJpYnV0ZSBvd25lcgorICovCitzdGF0aWMKK3NzaXplX3Qgd2xwX3dzc19hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHdscF93c3NfYXR0cmlidXRlICp3c3NfYXR0ciA9IGF0dHJfdG9fd2xwX3dzc19hdHRyKGF0dHIpOworCXN0cnVjdCB3bHBfd3NzICp3c3MgPSBrb2JqX3RvX3dscF93c3Moa29iaik7CisJc3NpemVfdCByZXQgPSAtRUlPOworCisJaWYgKHdzc19hdHRyLT5zdG9yZSkKKwkJcmV0ID0gd3NzX2F0dHItPnN0b3JlKHdzcywgYnVmLCBjb3VudCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljCitzdHJ1Y3Qgc3lzZnNfb3BzIHdzc19zeXNmc19vcHMgPSB7CisJLnNob3cJPSB3bHBfd3NzX2F0dHJfc2hvdywKKwkuc3RvcmUJPSB3bHBfd3NzX2F0dHJfc3RvcmUsCit9OworCitzdHJ1Y3Qga29ial90eXBlIHdzc19rdHlwZSA9IHsKKwkucmVsZWFzZQk9IHdscF93c3NfcmVsZWFzZSwKKwkuc3lzZnNfb3BzCT0gJndzc19zeXNmc19vcHMsCit9OworCisKKy8qKgorICogU3lzZnMgZmlsZXMgZm9yIGluZGl2aWR1YWwgV1NTCisgKi8KKworLyoqCisgKiBQcmludCBzdGF0aWMgcHJvcGVydGllcyBvZiB0aGlzIFdTUworICoKKyAqIFRoZSBuYW1lIG9mIGEgV1NTIG1heSBub3QgYmUgbnVsbCB0ZW1pbmF0ZWQuIEl0J3MgbWF4IHNpemUgaXMgNjQgYnl0ZXMKKyAqIHNvIHdlIGNvcHkgaXQgdG8gYSBsYXJnZXIgYXJyYXkganVzdCB0byBtYWtlIHN1cmUgd2UgcHJpbnQgc2FuZSBkYXRhLgorICovCitzdGF0aWMgc3NpemVfdCB3bHBfd3NzX3Byb3BlcnRpZXNfc2hvdyhzdHJ1Y3Qgd2xwX3dzcyAqd3NzLCBjaGFyICpidWYpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3c3MtPm11dGV4KSkKKwkJZ290byBvdXQ7CisJcmVzdWx0ID0gX193bHBfd3NzX3Byb3BlcnRpZXNfc2hvdyh3c3MsIGJ1ZiwgUEFHRV9TSVpFKTsKKwltdXRleF91bmxvY2soJndzcy0+bXV0ZXgpOworb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CitXU1NfQVRUUihwcm9wZXJ0aWVzLCBTX0lSVUdPLCB3bHBfd3NzX3Byb3BlcnRpZXNfc2hvdywgTlVMTCk7CisKKy8qKgorICogUHJpbnQgYWxsIGNvbm5lY3RlZCBtZW1iZXJzIG9mIHRoaXMgV1NTCisgKiBUaGUgRURBIGNhY2hlIGNvbnRhaW5zIGFsbCBtZW1iZXJzIG9mIFdTUyBuZWlnaGJvcmhvb2QuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHdscF93c3NfbWVtYmVyc19zaG93KHN0cnVjdCB3bHBfd3NzICp3c3MsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXJldHVybiB3bHBfZWRhX3Nob3cod2xwLCBidWYpOworfQorV1NTX0FUVFIobWVtYmVycywgU19JUlVHTywgd2xwX3dzc19tZW1iZXJzX3Nob3csIE5VTEwpOworCitzdGF0aWMKK2NvbnN0IGNoYXIgKl9fd2xwX3N0cnN0YXRlW10gPSB7CisJIm5vbmUiLAorCSJwYXJ0aWFsbHkgZW5yb2xsZWQiLAorCSJlbnJvbGxlZCIsCisJImFjdGl2ZSIsCisJImNvbm5lY3RlZCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd2xwX3dzc19zdHJzdGF0ZSh1bnNpZ25lZCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgPj0gQVJSQVlfU0laRShfX3dscF9zdHJzdGF0ZSkpCisJCXJldHVybiAidW5rbm93biBzdGF0ZSI7CisJcmV0dXJuIF9fd2xwX3N0cnN0YXRlW3N0YXRlXTsKK30KKworLyoKKyAqIFByaW50IGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBXU1MKKyAqLworc3RhdGljIHNzaXplX3Qgd2xwX3dzc19zdGF0ZV9zaG93KHN0cnVjdCB3bHBfd3NzICp3c3MsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJndzcy0+bXV0ZXgpKQorCQlnb3RvIG91dDsKKwlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCSAgIHdscF93c3Nfc3Ryc3RhdGUod3NzLT5zdGF0ZSkpOworCW11dGV4X3VubG9jaygmd3NzLT5tdXRleCk7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KK1dTU19BVFRSKHN0YXRlLCBTX0lSVUdPLCB3bHBfd3NzX3N0YXRlX3Nob3csIE5VTEwpOworCisKK3N0YXRpYworc3RydWN0IGF0dHJpYnV0ZSAqd3NzX2F0dHJzW10gPSB7CisJJndzc19hdHRyX3Byb3BlcnRpZXMuYXR0ciwKKwkmd3NzX2F0dHJfbWVtYmVycy5hdHRyLAorCSZ3c3NfYXR0cl9zdGF0ZS5hdHRyLAorCU5VTEwsCit9OworCitzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHdzc19hdHRyX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwJLyogd2Ugd2FudCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IHdzc19hdHRycywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi93bHAvdHhyeC5jIGIvZHJpdmVycy91d2Ivd2xwL3R4cnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzAxYmQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivd2xwL3R4cnguYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIFdpTWVkaWEgTG9naWNhbCBMaW5rIENvbnRyb2wgUHJvdG9jb2wgKFdMUCkKKyAqIE1lc3NhZ2UgZXhjaGFuZ2UgaW5mcmFzdHJ1Y3R1cmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqIFJlaW5ldHRlIENoYXRyZSA8cmVpbmV0dGUuY2hhdHJlQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBEb2NzCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dscC5oPgorI2RlZmluZSBEX0xPQ0FMIDUKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKyNpbmNsdWRlICJ3bHAtaW50ZXJuYWwuaCIKKworCisvKioKKyAqIERpcmVjdCBpbmNvbWluZyBhc3NvY2lhdGlvbiBtc2cgdG8gY29ycmVjdCBwYXJzaW5nIHJvdXRpbmUKKyAqCisgKiBXZSBvbmx5IGV4cGVjdCBEMSwgRTEsIEMxLCBDMyBtZXNzYWdlcyBhcyBuZXcuIEFsbCBvdGhlciBpbmNvbWluZworICogYXNzb2NpYXRpb24gbWVzc2FnZXMgc2hvdWxkIGZvcm0gcGFydCBvZiBhbiBlc3RhYmxpc2hlZCBzZXNzaW9uIHRoYXQgaXMKKyAqIGhhbmRsZWQgZWxzZXdoZXJlLgorICogVGhlIGhhbmRsaW5nIG9mIHRoZXNlIG1lc3NhZ2VzIG9mdGVuIHJlcXVpcmUgY2FsbGluZyBzbGVlcGluZyBmdW5jdGlvbnMKKyAqIC0gdGhpcyBjYW5ub3QgYmUgZG9uZSBpbiBpbnRlcnJ1cHQgY29udGV4dC4gV2UgdXNlIHRoZSBrZXJuZWwncworICogd29ya3F1ZXVlIHRvIGhhbmRsZSB0aGVzZSBtZXNzYWdlcy4KKyAqLworc3RhdGljCit2b2lkIHdscF9kaXJlY3RfYXNzb2NfZnJhbWUoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgc3RydWN0IHV3Yl9kZXZfYWRkciAqc3JjKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jICphc3NvYyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3Qgd2xwX2Fzc29jX2ZyYW1lX2N0eCAqZnJhbWVfY3R4OworCWRfZm5zdGFydCg1LCBkZXYsICJ3bHAgJXAsIHNrYiAlcFxuIiwgd2xwLCBza2IpOworCWZyYW1lX2N0eCA9IGttYWxsb2Moc2l6ZW9mKCpmcmFtZV9jdHgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoZnJhbWVfY3R4ID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFzc29jaWF0aW9uICIKKwkJCSJmcmFtZSBoYW5kbGluZy5cbiIpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCWZyYW1lX2N0eC0+d2xwID0gd2xwOworCWZyYW1lX2N0eC0+c2tiID0gc2tiOworCWZyYW1lX2N0eC0+c3JjID0gKnNyYzsKKwlzd2l0Y2ggKGFzc29jLT50eXBlKSB7CisJY2FzZSBXTFBfQVNTT0NfRDE6CisJCWRfcHJpbnRmKDUsIGRldiwgIlJlY2VpdmVkIGEgRDEgZnJhbWUuXG4iKTsKKwkJSU5JVF9XT1JLKCZmcmFtZV9jdHgtPndzLCB3bHBfaGFuZGxlX2QxX2ZyYW1lKTsKKwkJc2NoZWR1bGVfd29yaygmZnJhbWVfY3R4LT53cyk7CisJCWJyZWFrOworCWNhc2UgV0xQX0FTU09DX0UxOgorCQlkX3ByaW50Zig1LCBkZXYsICJSZWNlaXZlZCBhIEUxIGZyYW1lLiBGSVhNRT9cbiIpOworCQlrZnJlZV9za2Ioc2tiKTsgLyogVGVtcG9yYXJ5IHVudGlsIHdlIGhhbmRsZSBpdCAqLworCQlrZnJlZShmcmFtZV9jdHgpOyAvKiBUZW1wb3JhcnkgdW50aWwgd2UgaGFuZGxlIGl0ICovCisJCWJyZWFrOworCWNhc2UgV0xQX0FTU09DX0MxOgorCQlkX3ByaW50Zig1LCBkZXYsICJSZWNlaXZlZCBhIEMxIGZyYW1lLlxuIik7CisJCUlOSVRfV09SSygmZnJhbWVfY3R4LT53cywgd2xwX2hhbmRsZV9jMV9mcmFtZSk7CisJCXNjaGVkdWxlX3dvcmsoJmZyYW1lX2N0eC0+d3MpOworCQlicmVhazsKKwljYXNlIFdMUF9BU1NPQ19DMzoKKwkJZF9wcmludGYoNSwgZGV2LCAiUmVjZWl2ZWQgYSBDMyBmcmFtZS5cbiIpOworCQlJTklUX1dPUksoJmZyYW1lX2N0eC0+d3MsIHdscF9oYW5kbGVfYzNfZnJhbWUpOworCQlzY2hlZHVsZV93b3JrKCZmcmFtZV9jdHgtPndzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJSZWNlaXZlZCB1bmV4cGVjdGVkIGFzc29jaWF0aW9uIGZyYW1lLiAiCisJCQkiVHlwZSA9ICVkIFxuIiwgYXNzb2MtPnR5cGUpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWUoZnJhbWVfY3R4KTsKKwkJYnJlYWs7CisJfQorb3V0OgorCWRfZm5lbmQoNSwgZGV2LCAid2xwICVwXG4iLCB3bHApOworfQorCisvKioKKyAqIFByb2Nlc3MgaW5jb21pbmcgYXNzb2NpYXRpb24gZnJhbWUKKyAqCisgKiBBbHRob3VnaCBpdCBjb3VsZCBiZSBwb3NzaWJsZSB0byBkZWFsIHdpdGggc29tZSBpbmNvbWluZyBhc3NvY2lhdGlvbgorICogbWVzc2FnZXMgd2l0aG91dCBjcmVhdGluZyBhIG5ldyBzZXNzaW9uIHdlIGFyZSBrZWVwaW5nIHRoaW5ncyBzaW1wbGUuIFdlCisgKiBkbyBub3QgYWNjZXB0IG5ldyBhc3NvY2lhdGlvbiBtZXNzYWdlcyBpZiB0aGVyZSBpcyBhIHNlc3Npb24gaW4gcHJvZ3Jlc3MKKyAqIGFuZCB0aGUgbWVzc2FnZXMgZG8gbm90IGJlbG9uZyB0byB0aGF0IHNlc3Npb24uCisgKgorICogSWYgYW4gYXNzb2NpYXRpb24gbWVzc2FnZSBhcnJpdmVzIHRoYXQgY2F1c2VzIHRoZSBjcmVhdGlvbiBvZiBhIHNlc3Npb24KKyAqIChXTFBfQVNTT0NfRTEpIHdoaWxlIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhIHNlc3Npb24gdGhlbiB3ZQorICogcmVseSBvbiB0aGUgbmVpZ2hib3IgbXV0ZXggdG8gcHJvdGVjdCB0aGUgZGF0YS4gVGhhdCBpcywgdGhlIG5ldyBzZXNzaW9uCisgKiB3aWxsIG5vdCBiZSBzdGFydGVkIHVudGlsIHRoZSBwcmV2aW91cyBpcyBjb21wbGV0ZWQuCisgKi8KK3N0YXRpYwordm9pZCB3bHBfcmVjZWl2ZV9hc3NvY19mcmFtZShzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKnNyYykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHdscF9mcmFtZV9hc3NvYyAqYXNzb2MgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IHdscF9zZXNzaW9uICpzZXNzaW9uID0gd2xwLT5zZXNzaW9uOworCXU4IHZlcnNpb247CisJZF9mbnN0YXJ0KDUsIGRldiwgIndscCAlcCwgc2tiICVwXG4iLCB3bHAsIHNrYik7CisKKwlpZiAod2xwX2dldF92ZXJzaW9uKHdscCwgJmFzc29jLT52ZXJzaW9uLCAmdmVyc2lvbiwKKwkJCSAgICBzaXplb2YoYXNzb2MtPnZlcnNpb24pKSA8IDApCisJCWdvdG8gZXJyb3I7CisJaWYgKHZlcnNpb24gIT0gV0xQX1ZFUlNJT04pIHsKKwkJZGV2X2VycihkZXYsICJVbnN1cHBvcnRlZCBXTFAgdmVyc2lvbiBpbiBhc3NvY2lhdGlvbiAiCisJCQkibWVzc2FnZS5cbiIpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoc2Vzc2lvbiAhPSBOVUxMKSB7CisJCS8qIEZ1bmN0aW9uIHRoYXQgY3JlYXRlZCB0aGlzIHNlc3Npb24gaXMgc3RpbGwgaG9sZGluZyB0aGUKKwkJICogJndscC0+bXV0ZXggdG8gcHJvdGVjdCB0aGlzIHNlc3Npb24uICovCisJCWlmIChhc3NvYy0+dHlwZSA9PSBzZXNzaW9uLT5leHBfbWVzc2FnZSB8fAorCQkgICAgYXNzb2MtPnR5cGUgPT0gV0xQX0FTU09DX0YwKSB7CisJCQlpZiAoIW1lbWNtcCgmc2Vzc2lvbi0+bmVpZ2hib3JfYWRkciwgc3JjLAorCQkJCSAgIHNpemVvZigqc3JjKSkpIHsKKwkJCQlzZXNzaW9uLT5kYXRhID0gc2tiOworCQkJCShzZXNzaW9uLT5jYikod2xwKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycihkZXYsICJSZWNlaXZlZCBleHBlY3RlZCBtZXNzYWdlIGZyb20gIgorCQkJCQkidW5leHBlY3RlZCBzb3VyY2UuICBFeHBlY3RlZCBtZXNzYWdlICIKKwkJCQkJIiVkIG9yIEYwIGZyb20gJTAyeDolMDJ4LCBidXQgcmVjZWl2ZWQgIgorCQkJCQkiaXQgZnJvbSAlMDJ4OiUwMnguIERyb3BwaW5nLlxuIiwKKwkJCQkJc2Vzc2lvbi0+ZXhwX21lc3NhZ2UsCisJCQkJCXNlc3Npb24tPm5laWdoYm9yX2FkZHIuZGF0YVsxXSwKKwkJCQkJc2Vzc2lvbi0+bmVpZ2hib3JfYWRkci5kYXRhWzBdLAorCQkJCQlzcmMtPmRhdGFbMV0sIHNyYy0+ZGF0YVswXSk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoZGV2LCAiQXNzb2NpYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIgorCQkJCSJEcm9wcGluZy5cbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0gZWxzZSB7CisJCXdscF9kaXJlY3RfYXNzb2NfZnJhbWUod2xwLCBza2IsIHNyYyk7CisJfQorCWRfZm5lbmQoNSwgZGV2LCAid2xwICVwXG4iLCB3bHApOworCXJldHVybjsKK2Vycm9yOgorCWtmcmVlX3NrYihza2IpOworCWRfZm5lbmQoNSwgZGV2LCAid2xwICVwXG4iLCB3bHApOworfQorCisvKioKKyAqIFZlcmlmeSBpbmNvbWluZyBmcmFtZSBpcyBmcm9tIGNvbm5lY3RlZCBuZWlnaGJvciwgcHJlcCB0byBwYXNzIHRvIFdMUCBjbGllbnQKKyAqCisgKiBWZXJpZmljYXRpb24gcHJvY2VlZHMgYWNjb3JkaW5nIHRvIFdMUCAwLjk5IFs3LjMuMV0uIFRoZSBzb3VyY2UgYWRkcmVzcworICogaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbmVpZ2hib3IgaXMgc2VuZGluZyB0aGUgZnJhbWUgYW5kIHRoZSBXU1MgdGFnCisgKiBpcyB1c2VkIHRvIGtub3cgdG8gd2hpY2ggV1NTIHRoZSBmcmFtZSBiZWxvbmdzICh3ZSBvbmx5IHN1cHBvcnQgb25lIFdTUworICogc28gdGhpcyB0ZXN0IGlzIHN0cmFpZ2h0IGZvcndhcmQpLgorICogV2l0aCB0aGUgV1NTIGZvdW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIGNvbm5lY3RlZCBiZWZvcmUKKyAqIGFsbG93aW5nIHRoZSBleGNoYW5nZSBvZiBkYXRhIGZyYW1lcy4KKyAqLworc3RhdGljCitpbnQgd2xwX3ZlcmlmeV9wcmVwX3J4X2ZyYW1lKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IHV3Yl9kZXZfYWRkciAqc3JjKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKKwlzdHJ1Y3Qgd2xwX2VkYV9ub2RlIGVkYV9lbnRyeTsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX3N0ZF9hYmJydl9oZHIgKmhkciA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKworCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgJXAsIHNrYiAlcCBcbiIsIHdscCwgc2tiKTsKKwkvKnZlcmlmeSovCisJcmVzdWx0ID0gd2xwX2NvcHlfZWRhX25vZGUoJndscC0+ZWRhLCBzcmMsICZlZGFfZW50cnkpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKGRldiwgIldMUDogSW5jb21pbmcgZnJhbWUgaXMgZnJvbSB1bmtub3duICIKKwkJCQkibmVpZ2hib3IgJTAyeDolMDJ4LlxuIiwgc3JjLT5kYXRhWzFdLAorCQkJCXNyYy0+ZGF0YVswXSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaGRyLT50YWcgIT0gZWRhX2VudHJ5LnRhZykgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJXTFA6IFRhZyBvZiBpbmNvbWluZyBmcmFtZSBmcm9tICIKKwkJCQkiJTAyeDolMDJ4IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHRhZy4gIgorCQkJCSJSZWNlaXZlZCAweCUwMngsIGV4cGVjdGVkIDB4JTAyeC4gXG4iLAorCQkJCXNyYy0+ZGF0YVsxXSwgc3JjLT5kYXRhWzBdLCBoZHItPnRhZywKKwkJCQllZGFfZW50cnkudGFnKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChlZGFfZW50cnkuc3RhdGUgIT0gV0xQX1dTU19DT05ORUNURUQpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBJbmNvbWluZyBmcmFtZSBmcm9tICIKKwkJCQkiJTAyeDolMDJ4IGRvZXMgaXMgbm90IGZyb20gY29ubmVjdGVkIFdTUy5cbiIsCisJCQkJc3JjLT5kYXRhWzFdLCBzcmMtPmRhdGFbMF0pOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJLypwcmVwKi8KKwlza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSk7CitvdXQ6CisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgJXAsIHNrYiAlcCwgcmVzdWx0ID0gJWQgXG4iLCB3bHAsIHNrYiwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFJlY2VpdmUgYSBXTFAgZnJhbWUgZnJvbSBkZXZpY2UKKyAqCisgKiBAcmV0dXJuczogMSBpZiBjYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBmcmVlIHRoZSBza2IKKyAqICAgICAgICAgICAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBoYW5kbGVkIHNrYiBhbmQgZnJlZWQgaXQKKyAqICAgICAgICAgICAwIGlmIGVycm9yIG9jY3VyZWQsIHdpbGwgZnJlZSBza2IgaW4gdGhpcyBjYXNlCisgKi8KK2ludCB3bHBfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgc3RydWN0IHV3Yl9kZXZfYWRkciAqc3JjKQoreworCXVuc2lnbmVkIGxlbiA9IHNrYi0+bGVuOworCXZvaWQgKnB0ciA9IHNrYi0+ZGF0YTsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX2hkciAqaGRyOworCWludCByZXN1bHQgPSAwOworCisJZF9mbnN0YXJ0KDYsIGRldiwgInNrYiAoJXApLCBsZW4gKCV1KVxuIiwgc2tiLCBsZW4pOworCWlmIChsZW4gPCBzaXplb2YoKmhkcikpIHsKKwkJZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIGRhdGEgdG8gcGFyc2UgV0xQIGhlYWRlci5cbiIpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaGRyID0gcHRyOworCWRfZHVtcCg2LCBkZXYsIGhkciwgc2l6ZW9mKCpoZHIpKTsKKwlpZiAobGUxNl90b19jcHUoaGRyLT5tdXhfaGRyKSAhPSBXTFBfUFJPVE9DT0xfSUQpIHsKKwkJZGV2X2VycihkZXYsICJOb3QgYSBXTFAgZnJhbWUgdHlwZS5cbiIpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChoZHItPnR5cGUpIHsKKwljYXNlIFdMUF9GUkFNRV9TVEFOREFSRDoKKwkJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3Qgd2xwX2ZyYW1lX3N0ZF9hYmJydl9oZHIpKSB7CisJCQlkZXZfZXJyKGRldiwgIk5vdCBlbm91Z2ggZGF0YSB0byBwYXJzZSBTdGFuZGFyZCAiCisJCQkJIldMUCBoZWFkZXIuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlc3VsdCA9IHdscF92ZXJpZnlfcHJlcF9yeF9mcmFtZSh3bHAsIHNrYiwgc3JjKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X2VycihkZXYsICJXTFA6IFZlcmlmaWNhdGlvbiBvZiBmcmFtZSAiCisJCQkJCSJmcm9tIG5laWdoYm9yICUwMng6JTAyeCBmYWlsZWQuXG4iLAorCQkJCQlzcmMtPmRhdGFbMV0sIHNyYy0+ZGF0YVswXSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXN1bHQgPSAxOworCQlicmVhazsKKwljYXNlIFdMUF9GUkFNRV9BQkJSRVZJQVRFRDoKKwkJZGV2X2VycihkZXYsICJBYmJyZXZpYXRlZCBmcmFtZSByZWNlaXZlZC4gRklYTUU/XG4iKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWJyZWFrOworCWNhc2UgV0xQX0ZSQU1FX0NPTlRST0w6CisJCWRldl9lcnIoZGV2LCAiQ29udHJvbCBmcmFtZSByZWNlaXZlZC4gRklYTUU/XG4iKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWJyZWFrOworCWNhc2UgV0xQX0ZSQU1FX0FTU09DSUFUSU9OOgorCQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCB3bHBfZnJhbWVfYXNzb2MpKSB7CisJCQlkZXZfZXJyKGRldiwgIk5vdCBlbm91Z2ggZGF0YSB0byBwYXJzZSBBc3NvY2lhdGlvbiAiCisJCQkJIldMUCBoZWFkZXIuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRfcHJpbnRmKDUsIGRldiwgIkFzc29jaWF0aW9uIGZyYW1lIHJlY2VpdmVkLlxuIik7CisJCXdscF9yZWNlaXZlX2Fzc29jX2ZyYW1lKHdscCwgc2tiLCBzcmMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIkludmFsaWQgZnJhbWUgcmVjZWl2ZWQuXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorb3V0OgorCWlmIChyZXN1bHQgPCAwKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXN1bHQgPSAwOworCX0KKwlkX2ZuZW5kKDYsIGRldiwgInNrYiAoJXApXG4iLCBza2IpOworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfcmVjZWl2ZV9mcmFtZSk7CisKKworLyoqCisgKiBWZXJpZnkgZnJhbWUgZnJvbSBuZXR3b3JrIHN0YWNrLCBwcmVwYXJlIGZvciBmdXJ0aGVyIHRyYW5zbWlzc2lvbgorICoKKyAqIEBza2I6ICAgdGhlIHNvY2tldCBidWZmZXIgdGhhdCBuZWVkcyB0byBiZSBwcmVwYXJlZCBmb3IgdHJhbnNtaXNzaW9uIChpdAorICogICAgICAgICBpcyBpbiBuZWVkIG9mIGEgV0xQIGhlYWRlcikuIElmIHRoaXMgaXMgYSBicm9hZGNhc3QgZnJhbWUgd2UgdGFrZQorICogICAgICAgICBvdmVyIHRoZSBlbnRpcmUgdHJhbnNtaXNzaW9uLgorICogICAgICAgICBJZiBpdCBpcyBhIHVuaWNhc3QgdGhlIFdTUyBjb25uZWN0aW9uIHNob3VsZCBhbHJlYWR5IGJlIGVzdGFibGlzaGVkCisgKiAgICAgICAgIGFuZCB0cmFuc21pc3Npb24gd2lsbCBiZSBkb25lIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uLgorICogQGRzdDogICBPbiByZXR1cm4gdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGRldmljZSBhZGRyZXNzIHRvIHdoaWNoIHRoZQorICogICAgICAgICBmcmFtZSBpcyBkZXN0aW5lZC4KKyAqIEByZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mgbm8gdHggOiBXTFAgaGVhZGVyIHN1Y2Vzc2Z1bGx5IGFwcGxpZWQgdG8gc2tiIGJ1ZmZlciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nIGZ1bmN0aW9uIGNhbiBwcm9jZWVkIHdpdGggdHgKKyAqICAgICAgICAgICAxIG9uIHN1Y2Nlc3Mgd2l0aCB0eCA6IFdMUCB3aWxsIHRha2Ugb3ZlciB0cmFuc21pc3Npb24gb2YgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUKKyAqICAgICAgICAgICA8MCBvbiBlcnJvcgorICoKKyAqIFRoZSBuZXR3b3JrIHN0YWNrIChXTFAgY2xpZW50KSBpcyBhdHRlbXB0aW5nIHRvIHRyYW5zbWl0IGEgZnJhbWUuIFdlIGNhbgorICogb25seSB0cmFuc21pdCBkYXRhIGlmIGEgbG9jYWwgV1NTIGlzIGF0IGxlYXN0IGFjdGl2ZSAoY29ubmVjdGlvbiB3aWxsIGJlCisgKiBkb25lIGhlcmUgaWYgdGhpcyBpcyBhIGJyb2FkY2FzdCBmcmFtZSBhbmQgbmVpZ2hib3IgYWxzbyBoYXMgdGhlIFdTUworICogYWN0aXZlKS4KKyAqCisgKiBUaGUgZnJhbWUgY2FuIGJlIGVpdGhlciBicm9hZGNhc3Qgb3IgdW5pY2FzdC4gQnJvYWRjYXN0IGluIGEgV1NTIGlzCisgKiBzdXBwb3J0ZWQgdmlhIG11bHRpY2FzdCwgYnV0IHdlIGRvbid0IHN1cHBvcnQgbXVsdGljYXN0IHlldCAodW50aWwKKyAqIGRldmljZXMgc3RhcnQgdG8gc3VwcG9ydCBNQUIgSUVzKS4gSWYgYSBicm9hZGNhc3QgZnJhbWUgbmVlZHMgdG8gYmUKKyAqIHRyYW5zbWl0dGVkIGl0IGlzIHRyZWF0ZWQgYXMgYSB1bmljYXN0IGZyYW1lIHRvIGVhY2ggbmVpZ2hib3IuIEluIHRoaXMKKyAqIGNhc2UgdGhlIFdMUCB0YWtlcyBvdmVyIHRyYW5zbWlzc2lvbiBvZiB0aGUgc2tiIGFuZCByZXR1cm5zIDEKKyAqIHRvIHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgc28uIEFsc28sIGluIHRoaXMgY2FzZSwgaWYgYSBuZWlnaGJvciBoYXMgdGhlCisgKiBzYW1lIFdTUyBhY3RpdmF0ZWQgYnV0IGlzIG5vdCBjb25uZWN0ZWQgdGhlbiB0aGUgV1NTIGNvbm5lY3Rpb24gd2lsbCBiZQorICogZG9uZSBhdCB0aGlzIHRpbWUuIFRoZSBuZWlnaGJvcidzIHZpcnR1YWwgYWRkcmVzcyB3aWxsIGJlIGxlYXJuZWQgYXQKKyAqIHRoaXMgdGltZS4KKyAqCisgKiBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBhIHVuaWNhc3QgZnJhbWUgaXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUKKyAqIG5laWdoYm9yLiBUaGlzIGFkZHJlc3Mgb25seSBiZWNvbWVzIGtub3duIHdoZW4gYSBXU1MgY29ubmVjdGlvbiBpcworICogZXN0YWJsaXNoZWQuIFdlIHRodXMgcmVseSBvbiBhIGJyb2FkY2FzdCBmcmFtZSB0byB0cmlnZ2VyIHRoZSBzZXR1cCBvZgorICogV1NTIGNvbm5lY3Rpb25zIHRvIGFsbCBuZWlnaGJvcnMgYmVmb3JlIHdlIGFyZSBhYmxlIHRvIHNlbmQgdW5pY2FzdAorICogZnJhbWVzIHRvIHRoZW0uIFRoaXMgc2VlbXMgcmVhc29uYWJsZSBhcyBJUCB3b3VsZCB1c3VhbGx5IHVzZSBBUlAgZmlyc3QKKyAqIGJlZm9yZSBhbnkgdW5pY2FzdCBmcmFtZXMgYXJlIHNlbnQuCisgKgorICogSWYgd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBuZWlnaGJvciAobmVpZ2hib3IncyB2aXJ0dWFsIGFkZHJlc3MKKyAqIGlzIGtub3duKSB3ZSBqdXN0IHByZXBhcmUgdGhlIFdMUCBoZWFkZXIgYW5kIHRoZSBjYWxsZXIgd2lsbCBjb250aW51ZSB0bworICogc2VuZCB0aGUgZnJhbWUuCisgKgorICogQSBmYWlsdXJlIGluIHRoaXMgZnVuY3Rpb24gdXN1YWxseSBpbmRpY2F0ZXMgc29tZXRoaW5nIHRoYXQgY2Fubm90IGJlCisgKiBmaXhlZCBhdXRvbWF0aWNhbGx5LiBTbywgaWYgdGhpcyBmdW5jdGlvbiBmYWlscyAoQHJldHVybiA8IDApIHRoZSBjYWxsaW5nCisgKiBmdW5jdGlvbiBzaG91bGQgbm90IHJldHJ5IHRvIHNlbmQgdGhlIGZyYW1lIGFzIGl0IHdpbGwgdmVyeSBsaWtlbHkga2VlcAorICogZmFpbGluZy4KKyAqCisgKi8KK2ludCB3bHBfcHJlcGFyZV90eF9mcmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB3bHAgKndscCwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkc3QpCit7CisJaW50IHJlc3VsdCA9IC1FSU5WQUw7CisJc3RydWN0IGV0aGhkciAqZXRoX2hkciA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKworCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgKCVwKSwgc2tiICglcCkgXG4iLCB3bHAsIHNrYik7CisJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHItPmhfZGVzdCkpIHsKKwkJZF9wcmludGYoNiwgZGV2LCAiV0xQOiBoYW5kbGluZyBicm9hZGNhc3QgZnJhbWUuIFxuIik7CisJCXJlc3VsdCA9IHdscF9lZGFfZm9yX2VhY2goJndscC0+ZWRhLCB3bHBfd3NzX3NlbmRfY29weSwgc2tiKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gaGFuZGxlIGJyb2FkY2FzdCAiCisJCQkJCSJmcmFtZSBmcm9tIFdMUCBjbGllbnQuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJlc3VsdCA9IDE7CisJCS8qIEZyYW1lIHdpbGwgYmUgdHJhbnNtaXR0ZWQgYnkgV0xQLiAqLworCX0gZWxzZSB7CisJCWRfcHJpbnRmKDYsIGRldiwgIldMUDogaGFuZGxpbmcgdW5pY2FzdCBmcmFtZS4gXG4iKTsKKwkJcmVzdWx0ID0gd2xwX2VkYV9mb3JfdmlydHVhbCgmd2xwLT5lZGEsIGV0aF9oZHItPmhfZGVzdCwgZHN0LAorCQkJCQkgICAgIHdscF93c3NfcHJlcF9oZHIsIHNrYik7CisJCWlmICh1bmxpa2VseShyZXN1bHQgPCAwKSkgeworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBwcmVwYXJlICIKKwkJCQkJInNrYiBmb3IgdHJhbnNtaXNzaW9uLiBcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CitvdXQ6CisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgKCVwKSwgc2tiICglcCkuIHJlc3VsdCA9ICVkIFxuIiwgd2xwLCBza2IsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdscF9wcmVwYXJlX3R4X2ZyYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3dscC93bHAtaW50ZXJuYWwuaCBiL2RyaXZlcnMvdXdiL3dscC93bHAtaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzk0ZmFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivd2xwL3dscC1pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogV2lNZWRpYSBMb2dpY2FsIExpbmsgQ29udHJvbCBQcm90b2NvbCAoV0xQKQorICogSW50ZXJuYWwgQVBJCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnBvcmF0aW9uCisgKiBSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9fV0xQX0lOVEVSTkFMX0hfXworI2RlZmluZSBfX1dMUF9JTlRFUk5BTF9IX18KKworLyoqCisgKiBTdGF0ZSBvZiBXU1MgY29ubmVjdGlvbgorICoKKyAqIEEgZGV2aWNlIG5lZWRzIHRvIGNvbm5lY3QgdG8gYSBuZWlnaGJvciBpbiBhbiBhY3RpdmF0ZWQgV1NTIGJlZm9yZSBkYXRhCisgKiBjYW4gYmUgdHJhbnNtaXR0ZWQuIFRoZSBzcGVjIGFsc28gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGEgbmV3IGNvbm5lY3Rpb24KKyAqIGF0dGVtcHQgYW5kIGEgY29ubmVjdGlvbiBhdHRlbXB0IGFmdGVyIHByZXZpb3VzIGNvbm5lY3Rpb24gYXR0ZW1wdHMuIFRoZQorICogc3RhdGUgV0xQX1dTU19DT05ORUNUX0ZBSUxFRCBpcyB1c2VkIGZvciB0aGlzIHNjZW5hcmlvLiBTZWUgV0xQIDAuOTkKKyAqIFs3LjIuNl0KKyAqLworZW51bSB3bHBfd3NzX2Nvbm5lY3QgeworCVdMUF9XU1NfVU5DT05ORUNURUQgPSAwLAorCVdMUF9XU1NfQ09OTkVDVEVELAorCVdMUF9XU1NfQ09OTkVDVF9GQUlMRUQsCit9OworCitleHRlcm4gc3RydWN0IGtvYmpfdHlwZSB3c3Nfa3R5cGU7CitleHRlcm4gc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB3c3NfYXR0cl9ncm91cDsKKworZXh0ZXJuIGludCB1d2JfcmNfaWVfYWRkKHN0cnVjdCB1d2JfcmMgKiwgY29uc3Qgc3RydWN0IHV3Yl9pZV9oZHIgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgdXdiX3JjX2llX3JtKHN0cnVjdCB1d2JfcmMgKiwgZW51bSB1d2JfaWUpOworCisKKy8qIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYSBkeW5hbWljIGFycmF5IHdoZXJlIGVudHJpZXMgYXJlIHNvcnRlZAorICogYnkgZXRoX2FkZHIgYW5kIHNlYXJjaCBpcyBkb25lIGluIGEgYmluYXJ5IGZvcm0KKyAqCisgKiBBbHRob3VnaCB0aGlua2luZyB0d2ljZSBhYm91dCBpdDogdGhpcyB0ZWNobm9sb2dpZSdzIG1heGltdW0gcmVhY2gKKyAqIGlzIDEwIG1ldGVycy4uLnVubGVzcyB5b3Ugd2FudCB0byBwYWNrIHRvbyBtdWNoIHN0dWZmIGluIGFyb3VuZAorICogeW91ciByYWRpbyBjb250cm9sbGVyL1dMUCBkZXZpY2UsIHRoZSBsaXN0IHdpbGwgcHJvYmFibHkgbm90IGJlCisgKiB0b28gYmlnLgorICoKKyAqIEluIGFueSBjYXNlLCB0aGVyZSBpcyBwcm9iYWJseSBzb21lIGRhdGEgc3RydWN0dXJlIGluIHRoZSBrZXJuZWwKKyAqIHRoYW4gd2UgY291bGQgcmV1c2VkIGZvciB0aGF0IGFscmVhZHkuCisgKgorICogVGhlIGJlbG93IHN0cnVjdHVyZSBpcyByZWFsbHkganVzdCBnb29kIHdoaWxlIHdlIHN1cHBvcnQgb25lIFdTUyBwZXIKKyAqIGhvc3QuCisgKi8KK3N0cnVjdCB3bHBfZWRhX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOworCXVuc2lnbmVkIGNoYXIgZXRoX2FkZHJbRVRIX0FMRU5dOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgZGV2X2FkZHI7CisJc3RydWN0IHdscF93c3MgKndzczsKKwl1bnNpZ25lZCBjaGFyIHZpcnRfYWRkcltFVEhfQUxFTl07CisJdTggdGFnOworCWVudW0gd2xwX3dzc19jb25uZWN0IHN0YXRlOworfTsKKwordHlwZWRlZiBpbnQgKCp3bHBfZWRhX2Zvcl9lYWNoX2YpKHN0cnVjdCB3bHAgKiwgc3RydWN0IHdscF9lZGFfbm9kZSAqLCB2b2lkICopOworCitleHRlcm4gdm9pZCB3bHBfZWRhX2luaXQoc3RydWN0IHdscF9lZGEgKik7CitleHRlcm4gdm9pZCB3bHBfZWRhX3JlbGVhc2Uoc3RydWN0IHdscF9lZGEgKik7CitleHRlcm4gaW50IHdscF9lZGFfY3JlYXRlX25vZGUoc3RydWN0IHdscF9lZGEgKiwKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGV0aF9hZGRyW0VUSF9BTEVOXSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICopOworZXh0ZXJuIHZvaWQgd2xwX2VkYV9ybV9ub2RlKHN0cnVjdCB3bHBfZWRhICosIGNvbnN0IHN0cnVjdCB1d2JfZGV2X2FkZHIgKik7CitleHRlcm4gaW50IHdscF9lZGFfdXBkYXRlX25vZGUoc3RydWN0IHdscF9lZGEgKiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICosCisJCQkgICAgICAgc3RydWN0IHdscF93c3MgKiwKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHZpcnRfYWRkcltFVEhfQUxFTl0sCisJCQkgICAgICAgY29uc3QgdTgsIGNvbnN0IGVudW0gd2xwX3dzc19jb25uZWN0KTsKK2V4dGVybiBpbnQgd2xwX2VkYV91cGRhdGVfbm9kZV9zdGF0ZShzdHJ1Y3Qgd2xwX2VkYSAqLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHV3Yl9kZXZfYWRkciAqLAorCQkJCSAgICAgY29uc3QgZW51bSB3bHBfd3NzX2Nvbm5lY3QpOworCitleHRlcm4gaW50IHdscF9jb3B5X2VkYV9ub2RlKHN0cnVjdCB3bHBfZWRhICosIHN0cnVjdCB1d2JfZGV2X2FkZHIgKiwKKwkJCSAgICAgc3RydWN0IHdscF9lZGFfbm9kZSAqKTsKK2V4dGVybiBpbnQgd2xwX2VkYV9mb3JfZWFjaChzdHJ1Y3Qgd2xwX2VkYSAqLCB3bHBfZWRhX2Zvcl9lYWNoX2YgLCB2b2lkICopOworZXh0ZXJuIGludCB3bHBfZWRhX2Zvcl92aXJ0dWFsKHN0cnVjdCB3bHBfZWRhICosCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBldGhfYWRkcltFVEhfQUxFTl0sCisJCQkgICAgICAgc3RydWN0IHV3Yl9kZXZfYWRkciAqLAorCQkJICAgICAgIHdscF9lZGFfZm9yX2VhY2hfZiAsIHZvaWQgKik7CisKKworZXh0ZXJuIHZvaWQgd2xwX3JlbW92ZV9uZWlnaGJvcl90bXBfaW5mbyhzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKik7CisKK2V4dGVybiBzaXplX3Qgd2xwX3dzc19rZXlfcHJpbnQoY2hhciAqLCBzaXplX3QsIHU4ICopOworCisvKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBubyBtb3JlIHJlZmVyZW5jZXMgdG8gV1NTIGV4aXN0cyAqLworZXh0ZXJuIHZvaWQgd2xwX3dzc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICopOworCitleHRlcm4gdm9pZCB3bHBfd3NzX3Jlc2V0KHN0cnVjdCB3bHBfd3NzICopOworZXh0ZXJuIGludCB3bHBfd3NzX2NyZWF0ZV9hY3RpdmF0ZShzdHJ1Y3Qgd2xwX3dzcyAqLCBzdHJ1Y3Qgd2xwX3V1aWQgKiwKKwkJCQkgICBjaGFyICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CitleHRlcm4gaW50IHdscF93c3NfZW5yb2xsX2FjdGl2YXRlKHN0cnVjdCB3bHBfd3NzICosIHN0cnVjdCB3bHBfdXVpZCAqLAorCQkJCSAgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKik7CitleHRlcm4gc3NpemVfdCB3bHBfZGlzY292ZXIoc3RydWN0IHdscCAqKTsKKworZXh0ZXJuIGludCB3bHBfZW5yb2xsX25laWdoYm9yKHN0cnVjdCB3bHAgKiwgc3RydWN0IHdscF9uZWlnaGJvcl9lICosCisJCQkgICAgICAgc3RydWN0IHdscF93c3MgKiwgc3RydWN0IHdscF91dWlkICopOworZXh0ZXJuIGludCB3bHBfd3NzX2lzX2FjdGl2ZShzdHJ1Y3Qgd2xwICosIHN0cnVjdCB3bHBfd3NzICosCisJCQkgICAgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKik7CisKK3N0cnVjdCB3bHBfYXNzb2NfY29ubl9jdHggeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3czsKKwlzdHJ1Y3Qgd2xwICp3bHA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgd2xwX2VkYV9ub2RlIGVkYV9lbnRyeTsKK307CisKKworZXh0ZXJuIGludCB3bHBfd3NzX2Nvbm5lY3RfcHJlcChzdHJ1Y3Qgd2xwICosIHN0cnVjdCB3bHBfZWRhX25vZGUgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgd2xwX3dzc19zZW5kX2NvcHkoc3RydWN0IHdscCAqLCBzdHJ1Y3Qgd2xwX2VkYV9ub2RlICosIHZvaWQgKik7CisKKworLyogTWVzc2FnZSBoYW5kbGluZyAqLworc3RydWN0IHdscF9hc3NvY19mcmFtZV9jdHggeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3czsKKwlzdHJ1Y3Qgd2xwICp3bHA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIHNyYzsKK307CisKK2V4dGVybiBpbnQgd2xwX3dzc19wcmVwX2hkcihzdHJ1Y3Qgd2xwICosIHN0cnVjdCB3bHBfZWRhX25vZGUgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHdscF9oYW5kbGVfZDFfZnJhbWUoc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIGludCB3bHBfcGFyc2VfZDJfZnJhbWVfdG9fY2FjaGUoc3RydWN0IHdscCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCSAgICAgICBzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKik7CitleHRlcm4gaW50IHdscF9wYXJzZV9kMl9mcmFtZV90b19lbnJvbGwoc3RydWN0IHdscF93c3MgKiwgc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkJc3RydWN0IHdscF9uZWlnaGJvcl9lICosCisJCQkJCXN0cnVjdCB3bHBfdXVpZCAqKTsKK2V4dGVybiB2b2lkIHdscF9oYW5kbGVfYzFfZnJhbWUoc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgd2xwX2hhbmRsZV9jM19mcmFtZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gaW50IHdscF9wYXJzZV9jM2M0X2ZyYW1lKHN0cnVjdCB3bHAgKiwgc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQlzdHJ1Y3Qgd2xwX3V1aWQgKiwgdTggKiwKKwkJCQlzdHJ1Y3QgdXdiX21hY19hZGRyICopOworZXh0ZXJuIGludCB3bHBfcGFyc2VfZjAoc3RydWN0IHdscCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2V4dGVybiBpbnQgd2xwX3NlbmRfYXNzb2NfZnJhbWUoc3RydWN0IHdscCAqLCBzdHJ1Y3Qgd2xwX3dzcyAqLAorCQkJCXN0cnVjdCB1d2JfZGV2X2FkZHIgKiwgZW51bSB3bHBfYXNzb2NfdHlwZSk7CitleHRlcm4gc3NpemVfdCB3bHBfZ2V0X3ZlcnNpb24oc3RydWN0IHdscCAqLCBzdHJ1Y3Qgd2xwX2F0dHJfdmVyc2lvbiAqLAorCQkJICAgICAgIHU4ICosIHNzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd2xwX2dldF93c3NpZChzdHJ1Y3Qgd2xwICosIHN0cnVjdCB3bHBfYXR0cl93c3NpZCAqLAorCQkJICAgICBzdHJ1Y3Qgd2xwX3V1aWQgKiwgc3NpemVfdCk7CitleHRlcm4gaW50IF9fd2xwX2FsbG9jX2RldmljZV9pbmZvKHN0cnVjdCB3bHAgKik7CitleHRlcm4gaW50IF9fd2xwX3NldHVwX2RldmljZV9pbmZvKHN0cnVjdCB3bHAgKik7CisKK2V4dGVybiBzdHJ1Y3Qgd2xwX3dzc19hdHRyaWJ1dGUgd3NzX2F0dHJpYnV0ZV9wcm9wZXJ0aWVzOworZXh0ZXJuIHN0cnVjdCB3bHBfd3NzX2F0dHJpYnV0ZSB3c3NfYXR0cmlidXRlX21lbWJlcnM7CitleHRlcm4gc3RydWN0IHdscF93c3NfYXR0cmlidXRlIHdzc19hdHRyaWJ1dGVfc3RhdGU7CisKK3N0YXRpYyBpbmxpbmUKK3NpemVfdCB3bHBfd3NzX3V1aWRfcHJpbnQoY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgc3RydWN0IHdscF91dWlkICp1dWlkKQoreworCXNpemVfdCByZXN1bHQ7CisKKwlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBidWZzaXplLAorCQkJICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6IgorCQkJICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6IgorCQkJICAiJTAyeDolMDJ4OiUwMng6JTAyeCIsCisJCQkgIHV1aWQtPmRhdGFbMF0sIHV1aWQtPmRhdGFbMV0sCisJCQkgIHV1aWQtPmRhdGFbMl0sIHV1aWQtPmRhdGFbM10sCisJCQkgIHV1aWQtPmRhdGFbNF0sIHV1aWQtPmRhdGFbNV0sCisJCQkgIHV1aWQtPmRhdGFbNl0sIHV1aWQtPmRhdGFbN10sCisJCQkgIHV1aWQtPmRhdGFbOF0sIHV1aWQtPmRhdGFbOV0sCisJCQkgIHV1aWQtPmRhdGFbMTBdLCB1dWlkLT5kYXRhWzExXSwKKwkJCSAgdXVpZC0+ZGF0YVsxMl0sIHV1aWQtPmRhdGFbMTNdLAorCQkJICB1dWlkLT5kYXRhWzE0XSwgdXVpZC0+ZGF0YVsxNV0pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogRklYTUU6IEhvdyBzaG91bGQgYSBub25jZSBiZSBkaXNwbGF5ZWQ/CisgKi8KK3N0YXRpYyBpbmxpbmUKK3NpemVfdCB3bHBfd3NzX25vbmNlX3ByaW50KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHN0cnVjdCB3bHBfbm9uY2UgKm5vbmNlKQoreworCXNpemVfdCByZXN1bHQ7CisKKwlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBidWZzaXplLAorCQkJICAiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIgorCQkJICAiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIgorCQkJICAiJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCQkgIG5vbmNlLT5kYXRhWzBdLCBub25jZS0+ZGF0YVsxXSwKKwkJCSAgbm9uY2UtPmRhdGFbMl0sIG5vbmNlLT5kYXRhWzNdLAorCQkJICBub25jZS0+ZGF0YVs0XSwgbm9uY2UtPmRhdGFbNV0sCisJCQkgIG5vbmNlLT5kYXRhWzZdLCBub25jZS0+ZGF0YVs3XSwKKwkJCSAgbm9uY2UtPmRhdGFbOF0sIG5vbmNlLT5kYXRhWzldLAorCQkJICBub25jZS0+ZGF0YVsxMF0sIG5vbmNlLT5kYXRhWzExXSwKKwkJCSAgbm9uY2UtPmRhdGFbMTJdLCBub25jZS0+ZGF0YVsxM10sCisJCQkgIG5vbmNlLT5kYXRhWzE0XSwgbm9uY2UtPmRhdGFbMTVdKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgd2xwX3Nlc3Npb25fY2Ioc3RydWN0IHdscCAqd2xwKQoreworCXN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0aW9uID0gd2xwLT5zZXNzaW9uLT5jYl9wcml2OworCWNvbXBsZXRlKGNvbXBsZXRpb24pOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgd2xwX3V1aWRfaXNfc2V0KHN0cnVjdCB3bHBfdXVpZCAqdXVpZCkKK3sKKwlzdHJ1Y3Qgd2xwX3V1aWQgemVyb191dWlkID0geyAuZGF0YSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0gfTsKKworCWlmICghbWVtY21wKHV1aWQsICZ6ZXJvX3V1aWQsIHNpemVvZigqdXVpZCkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qIF9fV0xQX0lOVEVSTkFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2Ivd2xwL3dscC1sYy5jIGIvZHJpdmVycy91d2Ivd2xwL3dscC1sYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTk0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3V3Yi93bHAvd2xwLWxjLmMKQEAgLTAsMCArMSw1ODUgQEAKKy8qCisgKiBXaU1lZGlhIExvZ2ljYWwgTGluayBDb250cm9sIFByb3RvY29sIChXTFApCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIFJlaW5ldHRlIENoYXRyZSA8cmVpbmV0dGUuY2hhdHJlQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBkb2NzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dscC5oPgorI2RlZmluZSBEX0xPQ0FMIDYKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKyNpbmNsdWRlICJ3bHAtaW50ZXJuYWwuaCIKKworCitzdGF0aWMKK3ZvaWQgd2xwX25laWdoYm9yX2luaXQoc3RydWN0IHdscF9uZWlnaGJvcl9lICpuZWlnaGJvcikKK3sKKwlJTklUX0xJU1RfSEVBRCgmbmVpZ2hib3ItPndzc2lkKTsKK30KKworLyoqCisgKiBDcmVhdGUgYXJlYSBmb3IgZGV2aWNlIGluZm9ybWF0aW9uIHN0b3JhZ2UKKyAqCisgKiB3bHAtPm11dGV4IG11c3QgYmUgaGVsZAorICovCitpbnQgX193bHBfYWxsb2NfZGV2aWNlX2luZm8oc3RydWN0IHdscCAqd2xwKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlCVUdfT04od2xwLT5kZXZfaW5mbyAhPSBOVUxMKTsKKwl3bHAtPmRldl9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdscF9kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICh3bHAtPmRldl9pbmZvID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJCSJkZXZpY2UgaW5mb3JtYXRpb24uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCisKKy8qKgorICogRmlsbCBpbiBkZXZpY2UgaW5mb3JtYXRpb24gdXNpbmcgZnVuY3Rpb24gcHJvdmlkZWQgYnkgZHJpdmVyCisgKgorICogd2xwLT5tdXRleCBtdXN0IGJlIGhlbGQKKyAqLworc3RhdGljCit2b2lkIF9fd2xwX2ZpbGxfZGV2aWNlX2luZm8oc3RydWN0IHdscCAqd2xwKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKworCUJVR19PTih3bHAtPmZpbGxfZGV2aWNlX2luZm8gPT0gTlVMTCk7CisJZF9wcmludGYoNiwgZGV2LCAiUmV0cmlldmluZyBkZXZpY2UgaW5mb3JtYXRpb24gIgorCQkJICJmcm9tIGRldmljZSBkcml2ZXIuXG4iKTsKKwl3bHAtPmZpbGxfZGV2aWNlX2luZm8od2xwLCB3bHAtPmRldl9pbmZvKTsKK30KKworLyoqCisgKiBTZXR1cCBkZXZpY2UgaW5mb3JtYXRpb24KKyAqCisgKiBBbGxvY2F0ZSBhcmVhIGZvciBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIHBvcHVsYXRlIGl0LgorICoKKyAqIHdscC0+bXV0ZXggbXVzdCBiZSBoZWxkCisgKi8KK2ludCBfX3dscF9zZXR1cF9kZXZpY2VfaW5mbyhzdHJ1Y3Qgd2xwICp3bHApCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisKKwlyZXN1bHQgPSBfX3dscF9hbGxvY19kZXZpY2VfaW5mbyh3bHApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gYWxsb2NhdGUgYXJlYSBmb3IgIgorCQkJImRldmljZSBpbmZvcm1hdGlvbi5cbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlfX3dscF9maWxsX2RldmljZV9pbmZvKHdscCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVtb3ZlIGluZm9ybWF0aW9uIGFib3V0IG5laWdoYm9yIHN0b3JlZCB0ZW1wb3JhcmlseQorICoKKyAqIEluZm9ybWF0aW9uIGxlYXJuZWQgZHVyaW5nIGRpc2NvdmV5IHNob3VsZCBvbmx5IGJlIHN0b3JlZCB3aGVuIHRoZQorICogZGV2aWNlIGVucm9sbHMgaW4gdGhlIG5laWdoYm9yJ3MgV1NTLiBXZSBkbyBuZWVkIHRvIHN0b3JlIHRoaXMKKyAqIGluZm9ybWF0aW9uIHRlbXBvcmFyaWx5IGluIG9yZGVyIHRvIHByZXNlbnQgaXQgdG8gdGhlIHVzZXIuCisgKgorICogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBrZWVwaW5nIG5laWdoYm9yIFdTUyBpbmZvcm1hdGlvbiBpZiB0aGF0CisgKiBuZWlnaGJvciBpcyBhY2NlcHRpbmcgZW5yb2xsbWVudC4KKyAqCisgKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggd2xwLT5uYm11dGV4IGhlbGQKKyAqLwordm9pZCB3bHBfcmVtb3ZlX25laWdoYm9yX3RtcF9pbmZvKHN0cnVjdCB3bHBfbmVpZ2hib3JfZSAqbmVpZ2hib3IpCit7CisJc3RydWN0IHdscF93c3NpZF9lICp3c3NpZF9lLCAqbmV4dDsKKwl1OCBrZWVwOworCWlmICghbGlzdF9lbXB0eSgmbmVpZ2hib3ItPndzc2lkKSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod3NzaWRfZSwgbmV4dCwgJm5laWdoYm9yLT53c3NpZCwKKwkJCQkJIG5vZGUpIHsKKwkJCWlmICh3c3NpZF9lLT5pbmZvICE9IE5VTEwpIHsKKwkJCQlrZWVwID0gd3NzaWRfZS0+aW5mby0+YWNjZXB0X2Vucm9sbDsKKwkJCQlrZnJlZSh3c3NpZF9lLT5pbmZvKTsKKwkJCQl3c3NpZF9lLT5pbmZvID0gTlVMTDsKKwkJCQlpZiAoIWtlZXApIHsKKwkJCQkJbGlzdF9kZWwoJndzc2lkX2UtPm5vZGUpOworCQkJCQlrZnJlZSh3c3NpZF9lKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYgKG5laWdoYm9yLT5pbmZvICE9IE5VTEwpIHsKKwkJa2ZyZWUobmVpZ2hib3ItPmluZm8pOworCQluZWlnaGJvci0+aW5mbyA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIFBvcHVsYXRlIFdMUCBuZWlnaGJvcmhvb2QgY2FjaGUgd2l0aCBuZWlnaGJvciBpbmZvcm1hdGlvbgorICoKKyAqIEEgbmV3IG5laWdoYm9yIGlzIGZvdW5kLiBJZiBpdCBpcyBkaXNjb3ZlcmFibGUgdGhlbiB3ZSBhZGQgaXQgdG8gdGhlCisgKiBuZWlnaGJvcmhvb2QgY2FjaGUuCisgKgorICovCitzdGF0aWMKK2ludCB3bHBfYWRkX25laWdoYm9yKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHV3Yl9kZXYgKmRldikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZGlzY292ZXJhYmxlOworCXN0cnVjdCB3bHBfbmVpZ2hib3JfZSAqbmVpZ2hib3I7CisKKwlkX2Zuc3RhcnQoNiwgJmRldi0+ZGV2LCAidXdiICVwIFxuIiwgZGV2KTsKKwlkX3ByaW50Zig2LCAmZGV2LT5kZXYsICJGb3VuZCBuZWlnaGJvciBkZXZpY2UgJTAyeDolMDJ4IFxuIiwKKwkJIGRldi0+ZGV2X2FkZHIuZGF0YVsxXSwgZGV2LT5kZXZfYWRkci5kYXRhWzBdKTsKKwkvKioKKwkgKiBGSVhNRToKKwkgKiBVc2UgY29udGVudHMgb2YgV0xQIElFIGZvdW5kIGluIGJlYWNvbiBjYWNoZSB0byBkZXRlcm1pbmUgaWYKKwkgKiBuZWlnaGJvciBpcyBkaXNjb3ZlcmFibGUuCisJICogVGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFdMUCBJRSB5ZXQgc28gdGhpcyBzdGlsbCBuZWVkcyB0byBiZQorCSAqIGRvbmUuIFVudGlsIHRoZW4gd2UgYXNzdW1lIGFsbCBkZXZpY2VzIGFyZSBkaXNjb3ZlcmFibGUuCisJICovCisJZGlzY292ZXJhYmxlID0gMTsgLyogd2lsbCBiZSBjaGFuZ2VkIHdoZW4gRklYTUUgZGlzYXBwZWFycyAqLworCWlmIChkaXNjb3ZlcmFibGUpIHsKKwkJLyogQWRkIG5laWdoYm9yIHRvIGNhY2hlIGZvciBkaXNjb3ZlcnkgKi8KKwkJbmVpZ2hib3IgPSBremFsbG9jKHNpemVvZigqbmVpZ2hib3IpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5laWdoYm9yID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBtZW1vcnkgZm9yICIKKwkJCQkibmV3IG5laWdoYm9yLiBcbiIpOworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3Jfbm9fbWVtOworCQl9CisJCXdscF9uZWlnaGJvcl9pbml0KG5laWdoYm9yKTsKKwkJdXdiX2Rldl9nZXQoZGV2KTsKKwkJbmVpZ2hib3ItPnV3Yl9kZXYgPSBkZXY7CisJCWxpc3RfYWRkKCZuZWlnaGJvci0+bm9kZSwgJndscC0+bmVpZ2hib3JzKTsKKwl9CitlcnJvcl9ub19tZW06CisJZF9mbmVuZCg2LCAmZGV2LT5kZXYsICJ1d2IgJXAsIHJlc3VsdCA9ICVkIFxuIiwgZGV2LCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogUmVtb3ZlIG9uZSBuZWlnaGJvciBmcm9tIGNhY2hlCisgKi8KK3N0YXRpYwordm9pZCBfX3dscF9uZWlnaGJvcl9yZWxlYXNlKHN0cnVjdCB3bHBfbmVpZ2hib3JfZSAqbmVpZ2hib3IpCit7CisJc3RydWN0IHdscF93c3NpZF9lICp3c3NpZF9lLCAqbmV4dF93c3NpZF9lOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdzc2lkX2UsIG5leHRfd3NzaWRfZSwKKwkJCQkgJm5laWdoYm9yLT53c3NpZCwgbm9kZSkgeworCQlsaXN0X2RlbCgmd3NzaWRfZS0+bm9kZSk7CisJCWtmcmVlKHdzc2lkX2UpOworCX0KKwl1d2JfZGV2X3B1dChuZWlnaGJvci0+dXdiX2Rldik7CisJbGlzdF9kZWwoJm5laWdoYm9yLT5ub2RlKTsKKwlrZnJlZShuZWlnaGJvcik7Cit9CisKKy8qKgorICogQ2xlYXIgZW50aXJlIG5laWdoYm9yaG9vZCBjYWNoZS4KKyAqLworc3RhdGljCit2b2lkIF9fd2xwX25laWdoYm9yc19yZWxlYXNlKHN0cnVjdCB3bHAgKndscCkKK3sKKwlzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKm5laWdoYm9yLCAqbmV4dDsKKwlpZiAobGlzdF9lbXB0eSgmd2xwLT5uZWlnaGJvcnMpKQorCQlyZXR1cm47CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5laWdoYm9yLCBuZXh0LCAmd2xwLT5uZWlnaGJvcnMsIG5vZGUpIHsKKwkJX193bHBfbmVpZ2hib3JfcmVsZWFzZShuZWlnaGJvcik7CisJfQorfQorCitzdGF0aWMKK3ZvaWQgd2xwX25laWdoYm9yc19yZWxlYXNlKHN0cnVjdCB3bHAgKndscCkKK3sKKwltdXRleF9sb2NrKCZ3bHAtPm5ibXV0ZXgpOworCV9fd2xwX25laWdoYm9yc19yZWxlYXNlKHdscCk7CisJbXV0ZXhfdW5sb2NrKCZ3bHAtPm5ibXV0ZXgpOworfQorCisKKworLyoqCisgKiBTZW5kIEQxIG1lc3NhZ2UgdG8gbmVpZ2hib3IsIHJlY2VpdmUgRDIgbWVzc2FnZQorICoKKyAqIEBuZWlnaGJvcjogbmVpZ2hib3IgdG8gd2hpY2ggRDEgbWVzc2FnZSB3aWxsIGJlIHNlbnQKKyAqIEB3c3M6ICAgICAgaWYgbm90IE5VTEwsIGl0IGlzIGFuIGVucm9sbG1lbnQgcmVxdWVzdCBmb3IgdGhpcyBXU1MKKyAqIEB3c3NpZDogICAgaWYgd3NzIG5vdCBOVUxMLCB0aGlzIGlzIHRoZSB3c3NpZCBvZiB0aGUgV1NTIGluIHdoaWNoIHdlCisgKiAgICAgICAgICAgIHdhbnQgdG8gZW5yb2xsCisgKgorICogQSBEMS9EMiBleGNoYW5nZSBpcyBkb25lIGZvciBvbmUgb2YgdHdvIHJlYXNvbnM6IGRpc2NvdmVyeSBvcgorICogZW5yb2xsbWVudC4gSWYgZG9uZSBmb3IgZGlzY292ZXJ5IHRoZSBEMSBtZXNzYWdlIGlzIHNlbnQgdG8gdGhlIG5laWdoYm9yCisgKiBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBEMiByZXNwb25zZSBpcyBzdG9yZWQgaW4gYSB0ZW1wb3JhcnkgY2FjaGUuCisgKiBJZiBkb25lIGZvciBlbnJvbGxtZW50IHRoZSBAd3NzIGFuZCBAd3NzaWQgYXJlIHByb3ZpZGVkIGFsc28uIEluIHRoaXMKKyAqIGNhc2UgdGhlIEQxIG1lc3NhZ2UgaXMgc2VudCB0byB0aGUgbmVpZ2hib3IsIHRoZSBEMiByZXNwb25zZSBpcyBwYXJzZWQKKyAqIGZvciBlbnJvbGxtZW50IG9mIHRoZSBXU1Mgd2l0aCB3c3NpZC4KKyAqCisgKiAmd3NzLT5tdXRleCBpcyBoZWxkCisgKi8KK3N0YXRpYworaW50IHdscF9kMWQyX2V4Y2hhbmdlKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF9uZWlnaGJvcl9lICpuZWlnaGJvciwKKwkJICAgICAgc3RydWN0IHdscF93c3MgKndzcywgc3RydWN0IHdscF91dWlkICp3c3NpZCkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0aW9uKTsKKwlzdHJ1Y3Qgd2xwX3Nlc3Npb24gc2Vzc2lvbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jICpyZXNwOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldl9hZGRyID0gJm5laWdoYm9yLT51d2JfZGV2LT5kZXZfYWRkcjsKKworCW11dGV4X2xvY2soJndscC0+bXV0ZXgpOworCWlmICghd2xwX3V1aWRfaXNfc2V0KCZ3bHAtPnV1aWQpKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVVUlEIGlzIG5vdCBzZXQuIFNldCB2aWEgc3lzZnMgdG8gIgorCQkJInByb2NlZWQuXG4iKTsKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisJLyogU2VuZCBEMSBhc3NvY2lhdGlvbiBmcmFtZSAqLworCXJlc3VsdCA9IHdscF9zZW5kX2Fzc29jX2ZyYW1lKHdscCwgd3NzLCBkZXZfYWRkciwgV0xQX0FTU09DX0QxKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBzZW5kIEQxIGZyYW1lIHRvIG5laWdoYm9yICIKKwkJCSIlMDJ4OiUwMnggKCVkKVxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCQlkZXZfYWRkci0+ZGF0YVswXSwgcmVzdWx0KTsKKwkJZF9wcmludGYoNiwgZGV2LCAiQWRkIHBsYWNlaG9sZGVycyBpbnRvIGJ1ZmZlciBuZXh0IHRvICIKKwkJCSAibmVpZ2hib3IgaW5mb3JtYXRpb24gd2UgaGF2ZSAoZGV2IGFkZHJlc3MpLlxuIik7CisJCWdvdG8gb3V0OworCX0KKwkvKiBDcmVhdGUgc2Vzc2lvbiwgd2FpdCBmb3IgcmVzcG9uc2UgKi8KKwlzZXNzaW9uLmV4cF9tZXNzYWdlID0gV0xQX0FTU09DX0QyOworCXNlc3Npb24uY2IgPSB3bHBfc2Vzc2lvbl9jYjsKKwlzZXNzaW9uLmNiX3ByaXYgPSAmY29tcGxldGlvbjsKKwlzZXNzaW9uLm5laWdoYm9yX2FkZHIgPSAqZGV2X2FkZHI7CisJQlVHX09OKHdscC0+c2Vzc2lvbiAhPSBOVUxMKTsKKwl3bHAtPnNlc3Npb24gPSAmc2Vzc2lvbjsKKwkvKiBXYWl0IGZvciBEMi9GMCBmcmFtZSAqLworCXJlc3VsdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjb21wbGV0aW9uLAorCQkJCQkJICAgV0xQX1BFUl9NU0dfVElNRU9VVCAqIEhaKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKKwkJZGV2X2VycihkZXYsICJUaW1lb3V0IHdoaWxlIHNlbmRpbmcgRDEgdG8gbmVpZ2hib3IgIgorCQkJICAgICAiJTAyeDolMDJ4LlxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCQkgICAgIGRldl9hZGRyLT5kYXRhWzBdKTsKKwkJZ290byBlcnJvcl9zZXNzaW9uOworCX0KKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBkaXNjb3Zlci9lbnJvbGwgbmVpZ2hib3IgJTAyeDolMDJ4LlxuIiwKKwkJCWRldl9hZGRyLT5kYXRhWzFdLCBkZXZfYWRkci0+ZGF0YVswXSk7CisJCWdvdG8gZXJyb3Jfc2Vzc2lvbjsKKwl9CisJLyogUGFyc2UgbWVzc2FnZSBpbiBzZXNzaW9uLT5kYXRhOiBpdCB3aWxsIGJlIGVpdGhlciBEMiBvciBGMCAqLworCXNrYiA9IHNlc3Npb24uZGF0YTsKKwlyZXNwID0gKHZvaWQgKikgc2tiLT5kYXRhOworCWRfcHJpbnRmKDYsIGRldiwgIlJlY2VpdmVkIHJlc3BvbnNlIHRvIEQxIGZyYW1lLiBcbiIpOworCWRfZHVtcCg2LCBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4gPiA3MiA/IDcyIDogc2tiLT5sZW4pOworCisJaWYgKHJlc3AtPnR5cGUgPT0gV0xQX0FTU09DX0YwKSB7CisJCXJlc3VsdCA9IHdscF9wYXJzZV9mMCh3bHAsIHNrYik7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBwYXJzZSBGMCBmcm9tIG5laWdoYm9yICIKKwkJCQkiJTAyeDolMDJ4LlxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCQkJZGV2X2FkZHItPmRhdGFbMF0pOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX3Jlc3BfcGFyc2U7CisJfQorCWlmICh3c3MgPT0gTlVMTCkgeworCQkvKiBEaXNjb3ZlcnkgKi8KKwkJcmVzdWx0ID0gd2xwX3BhcnNlX2QyX2ZyYW1lX3RvX2NhY2hlKHdscCwgc2tiLCBuZWlnaGJvcik7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIHBhcnNlIEQyIG1lc3NhZ2UgZnJvbSAiCisJCQkJIm5laWdoYm9yICUwMng6JTAyeCBmb3IgZGlzY292ZXJ5LlxuIiwKKwkJCQlkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCQkJZ290byBlcnJvcl9yZXNwX3BhcnNlOworCQl9CisJfSBlbHNlIHsKKwkJLyogRW5yb2xsbWVudCAqLworCQlyZXN1bHQgPSB3bHBfcGFyc2VfZDJfZnJhbWVfdG9fZW5yb2xsKHdzcywgc2tiLCBuZWlnaGJvciwKKwkJCQkJCSAgICAgIHdzc2lkKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gcGFyc2UgRDIgbWVzc2FnZSBmcm9tICIKKwkJCQkibmVpZ2hib3IgJTAyeDolMDJ4IGZvciBlbnJvbGxtZW50LlxuIiwKKwkJCQlkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCQkJZ290byBlcnJvcl9yZXNwX3BhcnNlOworCQl9CisJfQorZXJyb3JfcmVzcF9wYXJzZToKKwlrZnJlZV9za2Ioc2tiKTsKK2Vycm9yX3Nlc3Npb246CisJd2xwLT5zZXNzaW9uID0gTlVMTDsKK291dDoKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogRW5yb2xsIGludG8gV1NTIG9mIHByb3ZpZGVkIFdTU0lEIGJ5IHVzaW5nIG5laWdoYm9yIGFzIHJlZ2lzdHJhcgorICoKKyAqICZ3c3MtPm11dGV4IGlzIGhlbGQKKyAqLworaW50IHdscF9lbnJvbGxfbmVpZ2hib3Ioc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKm5laWdoYm9yLAorCQkJc3RydWN0IHdscF93c3MgKndzcywgc3RydWN0IHdscF91dWlkICp3c3NpZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJY2hhciBidWZbV0xQX1dTU19VVUlEX1NUUlNJWkVdOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldl9hZGRyID0gJm5laWdoYm9yLT51d2JfZGV2LT5kZXZfYWRkcjsKKwl3bHBfd3NzX3V1aWRfcHJpbnQoYnVmLCBzaXplb2YoYnVmKSwgd3NzaWQpOworCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgJXAsIG5laWdoYm9yICVwLCB3c3MgJXAsIHdzc2lkICVwICglcylcbiIsCisJCSAgd2xwLCBuZWlnaGJvciwgd3NzLCB3c3NpZCwgYnVmKTsKKwlkX3ByaW50Zig2LCBkZXYsICJDb21wbGV0ZSBtZS5cbiIpOworCXJlc3VsdCA9ICB3bHBfZDFkMl9leGNoYW5nZSh3bHAsIG5laWdoYm9yLCB3c3MsIHdzc2lkKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogRDEvRDIgbWVzc2FnZSBleGNoYW5nZSBmb3IgZW5yb2xsbWVudCAiCisJCQkiZmFpbGVkLiByZXN1bHQgPSAlZCBcbiIsIHJlc3VsdCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAod3NzLT5zdGF0ZSAhPSBXTFBfV1NTX1NUQVRFX1BBUlRfRU5ST0xMRUQpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBlbnJvbGwgaW50byBXU1MgJXMgdXNpbmcgIgorCQkJIm5laWdoYm9yICUwMng6JTAyeC4gXG4iLCBidWYsCisJCQlkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHdzcy0+c2VjdXJlX3N0YXR1cyA9PSBXTFBfV1NTX1NFQ1VSRSkgeworCQlkZXZfZXJyKGRldiwgIkZJWE1FOiBuZWVkIHRvIGNvbXBsZXRlIHNlY3VyZSBlbnJvbGxtZW50LlxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJd3NzLT5zdGF0ZSA9IFdMUF9XU1NfU1RBVEVfRU5ST0xMRUQ7CisJCWRfcHJpbnRmKDIsIGRldiwgIldMUDogU3VjY2VzcyBFbnJvbGxtZW50IGludG8gdW5zZWN1cmUgV1NTICIKKwkJCSAiJXMgdXNpbmcgbmVpZ2hib3IgJTAyeDolMDJ4LiBcbiIsIGJ1ZiwKKwkJCSBkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCX0KKworCWRfZm5lbmQoNiwgZGV2LCAid2xwICVwLCBuZWlnaGJvciAlcCwgd3NzICVwLCB3c3NpZCAlcCAoJXMpXG4iLAorCQkgIHdscCwgbmVpZ2hib3IsIHdzcywgd3NzaWQsIGJ1Zik7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK2Vycm9yOgorCXdscF93c3NfcmVzZXQod3NzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIERpc2NvdmVyIFdTUyBpbmZvcm1hdGlvbiBvZiBuZWlnaGJvcidzIGFjdGl2ZSBXU1MKKyAqLworc3RhdGljCitpbnQgd2xwX2Rpc2NvdmVyX25laWdoYm9yKHN0cnVjdCB3bHAgKndscCwKKwkJCSAgc3RydWN0IHdscF9uZWlnaGJvcl9lICpuZWlnaGJvcikKK3sKKwlyZXR1cm4gd2xwX2QxZDJfZXhjaGFuZ2Uod2xwLCBuZWlnaGJvciwgTlVMTCwgTlVMTCk7Cit9CisKKworLyoqCisgKiBFYWNoIG5laWdoYm9yIGluIHRoZSBuZWlnaGJvcmhvb2QgY2FjaGUgaXMgZGlzY292ZXJhYmxlLiBEaXNjb3ZlciBpdC4KKyAqCisgKiBEaXNjb3ZlcnkgaXMgZG9uZSB0aHJvdWdoIHNlbmRpbmcgb2YgRDEgYXNzb2NpYXRpb24gZnJhbWUgYW5kIHBhcnNpbmcKKyAqIHRoZSBEMiBhc3NvY2lhdGlvbiBmcmFtZSByZXNwb25zZS4gT25seSB3c3NpZCBmcm9tIEQyIHdpbGwgYmUgaW5jbHVkZWQKKyAqIGluIG5laWdoYm9yIGNhY2hlLCByZXN0IGlzIGp1c3QgZGlzcGxheWVkIHRvIHVzZXIgYW5kIGZvcmdvdHRlbi4KKyAqCisgKiBUaGUgZGlzY292ZXJ5IGlzIG5vdCBkb25lIGluIHBhcmFsbGVsLiBUaGlzIGlzIHNpbXBsZSBhbmQgZW5hYmxlcyB1cyB0bworICogbWFpbnRhaW4gb25seSBvbmUgYXNzb2NpYXRpb24gY29udGV4dC4KKyAqCisgKiBUaGUgZGlzY292ZXJ5IG9mIG9uZSBuZWlnaGJvciBkb2VzIG5vdCBhZmZlY3QgdGhlIG90aGVyLCBidXQgaWYgdGhlCisgKiBkaXNjb3Zlcnkgb2YgYSBuZWlnaGJvciBmYWlscyBpdCBpcyByZW1vdmVkIGZyb20gdGhlIG5laWdoYm9yaG9vZCBjYWNoZS4KKyAqLworc3RhdGljCitpbnQgd2xwX2Rpc2NvdmVyX2FsbF9uZWlnaGJvcnMoc3RydWN0IHdscCAqd2xwKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKm5laWdoYm9yLCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZWlnaGJvciwgbmV4dCwgJndscC0+bmVpZ2hib3JzLCBub2RlKSB7CisJCXJlc3VsdCA9IHdscF9kaXNjb3Zlcl9uZWlnaGJvcih3bHAsIG5laWdoYm9yKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gZGlzY292ZXIgbmVpZ2hib3IgIgorCQkJCSIlMDJ4OiUwMngsIHJlbW92aW5nIGZyb20gbmVpZ2hib3Job29kLiBcbiIsCisJCQkJbmVpZ2hib3ItPnV3Yl9kZXYtPmRldl9hZGRyLmRhdGFbMV0sCisJCQkJbmVpZ2hib3ItPnV3Yl9kZXYtPmRldl9hZGRyLmRhdGFbMF0pOworCQkJX193bHBfbmVpZ2hib3JfcmVsZWFzZShuZWlnaGJvcik7CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3bHBfYWRkX25laWdoYm9yX2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHdscCAqd2xwID0gcHJpdjsKKwlzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiA9IHRvX3V3Yl9kZXYoZGV2KTsKKworCXJldHVybiB3bHBfYWRkX25laWdoYm9yKHdscCwgdXdiX2Rldik7Cit9CisKKy8qKgorICogRGlzY292ZXIgV0xQIG5laWdoYm9yaG9vZAorICoKKyAqIFdpbGwgc2VuZCBEMSBhc3NvY2lhdGlvbiBmcmFtZSB0byBhbGwgZGV2aWNlcyBpbiBiZWFjb24gZ3JvdXAgdGhhdCBoYXZlCisgKiBkaXNjb3ZlcmFibGUgYml0IHNldCBpbiBXTFAgSUUuIEQyIGZyYW1lcyB3aWxsIGJlIHJlY2VpdmVkLCBpbmZvcm1hdGlvbgorICogZGlzcGxheWVkIHRvIHVzZXIgaW4gQGJ1Zi4gUGFydGlhbCBpbmZvcm1hdGlvbiAoZnJvbSBEMiBhc3NvY2lhdGlvbgorICogZnJhbWUpIHdpbGwgYmUgY2FjaGVkIHRvIGFzc2lzdCB3aXRoIGZ1dHVyZSBhc3NvY2lhdGlvbgorICogcmVxdWVzdHMuCisgKgorICogVGhlIGRpc2NvdmVyeSBvZiB0aGUgV0xQIG5laWdoYm9yaG9vZCBpcyB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuIFRoaXMKKyAqIHNob3VsZCBvY2N1ciBpbmZyZXF1ZW50bHkgYW5kIHdlIHRodXMgZnJlZSBjdXJyZW50IGNhY2hlIGFuZCByZS1hbGxvY2F0ZQorICogbWVtb3J5IGlmIG5lZWRlZC4KKyAqCisgKiBJZiBvbmUgbmVpZ2hib3IgZmFpbHMgZHVyaW5nIGluaXRpYWwgZGlzY292ZXJ5IChkZXRlcm1pbmluZyBpZiBpdCBpcyBhCisgKiBuZWlnaGJvciBvciBub3QpLCB3ZSBmYWlsIGFsbCAtIG5vdGUgdGhhdCBpbnRlcmFjdGlvbiB3aXRoIG5laWdoYm9yIGhhcworICogbm90IG9jY3VyZWQgYXQgdGhpcyBwb2ludCBzbyBpZiBhIGZhaWx1cmUgb2NjdXJzIHdlIGtub3cgc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAqIGxvY2FsbHkuIFdlIHRodXMgdW5kbyBldmVyeXRoaW5nLgorICovCitzc2l6ZV90IHdscF9kaXNjb3ZlcihzdHJ1Y3Qgd2xwICp3bHApCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCisJZF9mbnN0YXJ0KDYsIGRldiwgIndscCAlcCBcbiIsIHdscCk7CisJbXV0ZXhfbG9jaygmd2xwLT5uYm11dGV4KTsKKwkvKiBDbGVhciBjdXJyZW50IG5laWdoYm9yaG9vZCBjYWNoZS4gKi8KKwlfX3dscF9uZWlnaGJvcnNfcmVsZWFzZSh3bHApOworCS8qIERldGVybWluZSB3aGljaCBkZXZpY2VzIGluIG5laWdoYm9yaG9vZC4gUmVwb3B1bGF0ZSBjYWNoZS4gKi8KKwlyZXN1bHQgPSB1d2JfZGV2X2Zvcl9lYWNoKHdscC0+cmMsIHdscF9hZGRfbmVpZ2hib3JfaGVscGVyLCB3bHApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCS8qIE1heSBoYXZlIHBhcnRpYWwgbmVpZ2hib3IgaW5mb3JtYXRpb24sIHJlbGVhc2UgYWxsLiAqLworCQlfX3dscF9uZWlnaGJvcnNfcmVsZWFzZSh3bHApOworCQlnb3RvIGVycm9yX2Rldl9mb3JfZWFjaDsKKwl9CisJLyogRGlzY292ZXIgdGhlIHByb3BlcnRpZXMgb2YgZGV2aWNlcyBpbiBuZWlnaGJvcmhvb2QuICovCisJcmVzdWx0ID0gd2xwX2Rpc2NvdmVyX2FsbF9uZWlnaGJvcnMod2xwKTsKKwkvKiBJbiBjYXNlIG9mIGZhaWx1cmUgd2Ugc3RpbGwgcHJpbnQgb3VyIHBhcnRpYWwgcmVzdWx0cy4gKi8KKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBmdWxseSBkaXNjb3ZlciBuZWlnaGJvcmhvb2QuIFxuIik7CisJCXJlc3VsdCA9IDA7CisJfQorZXJyb3JfZGV2X2Zvcl9lYWNoOgorCW11dGV4X3VubG9jaygmd2xwLT5uYm11dGV4KTsKKwlkX2ZuZW5kKDYsIGRldiwgIndscCAlcCBcbiIsIHdscCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBIYW5kbGUgZXZlbnRzIGZyb20gVVdCIHN0YWNrCisgKgorICogV2UgaGFuZGxlIGV2ZW50cyBjb25zZXJ2YXRpdmVseS4gSWYgYSBuZWlnaGJvciBnb2VzIG9mZiB0aGUgYWlyIHdlCisgKiByZW1vdmUgaXQgZnJvbSB0aGUgbmVpZ2hib3Job29kLiBJZiBhbiBhc3NvY2lhdGlvbiBwcm9jZXNzIGlzIGluCisgKiBwcm9ncmVzcyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgd2FpdGluZyBmb3IgdGhlIG5ibXV0ZXggdG8gYmVjb21lCisgKiBmcmVlLiBUaGUgYXNzb2NpYXRpb24gcHJvY2VzcyB3aWxsIHRodXMgYmUgYWxsb3dlZCB0byBjb21wbGV0ZSBiZWZvcmUgaXQKKyAqIGlzIHJlbW92ZWQuCisgKi8KK3N0YXRpYwordm9pZCB3bHBfdXdiX25vdGlmc19jYih2b2lkICpfd2xwLCBzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldiwKKwkJICAgICAgIGVudW0gdXdiX25vdGlmcyBldmVudCkKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBfd2xwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3Qgd2xwX25laWdoYm9yX2UgKm5laWdoYm9yLCAqbmV4dDsKKwlpbnQgcmVzdWx0OworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFVXQl9OT1RJRl9PTkFJUjoKKwkJZF9wcmludGYoNiwgZGV2LCAiVVdCIGRldmljZSAlMDJ4OiUwMnggaXMgb25haXJcbiIsCisJCQkJdXdiX2Rldi0+ZGV2X2FkZHIuZGF0YVsxXSwKKwkJCQl1d2JfZGV2LT5kZXZfYWRkci5kYXRhWzBdKTsKKwkJcmVzdWx0ID0gd2xwX2VkYV9jcmVhdGVfbm9kZSgmd2xwLT5lZGEsCisJCQkJCSAgICAgdXdiX2Rldi0+bWFjX2FkZHIuZGF0YSwKKwkJCQkJICAgICAmdXdiX2Rldi0+ZGV2X2FkZHIpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gYWRkIG5ldyBuZWlnaGJvciAiCisJCQkJIiUwMng6JTAyeCB0byBFREEgY2FjaGUuXG4iLAorCQkJCXV3Yl9kZXYtPmRldl9hZGRyLmRhdGFbMV0sCisJCQkJdXdiX2Rldi0+ZGV2X2FkZHIuZGF0YVswXSk7CisJCWJyZWFrOworCWNhc2UgVVdCX05PVElGX09GRkFJUjoKKwkJZF9wcmludGYoNiwgZGV2LCAiVVdCIGRldmljZSAlMDJ4OiUwMnggaXMgb2ZmYWlyXG4iLAorCQkJCXV3Yl9kZXYtPmRldl9hZGRyLmRhdGFbMV0sCisJCQkJdXdiX2Rldi0+ZGV2X2FkZHIuZGF0YVswXSk7CisJCXdscF9lZGFfcm1fbm9kZSgmd2xwLT5lZGEsICZ1d2JfZGV2LT5kZXZfYWRkcik7CisJCW11dGV4X2xvY2soJndscC0+bmJtdXRleCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZWlnaGJvciwgbmV4dCwgJndscC0+bmVpZ2hib3JzLAorCQkJCQkgbm9kZSkgeworCQkJaWYgKG5laWdoYm9yLT51d2JfZGV2ID09IHV3Yl9kZXYpIHsKKwkJCQlkX3ByaW50Zig2LCBkZXYsICJSZW1vdmluZyBkZXZpY2UgZnJvbSAiCisJCQkJCSAibmVpZ2hib3Job29kLlxuIik7CisJCQkJX193bHBfbmVpZ2hib3JfcmVsZWFzZShuZWlnaGJvcik7CisJCQl9CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ3bHAtPm5ibXV0ZXgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgImRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBldmVudCAlZCBmcm9tIHV3YlxuIiwKKwkJCQlldmVudCk7CisJfQorfQorCitpbnQgd2xwX3NldHVwKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHV3Yl9yYyAqcmMpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJjLT51d2JfZGV2LmRldjsKKwlpbnQgcmVzdWx0OworCisJZF9mbnN0YXJ0KDYsIGRldiwgIndscCAlcFxuIiwgd2xwKTsKKwlCVUdfT04od2xwLT5maWxsX2RldmljZV9pbmZvID09IE5VTEwpOworCUJVR19PTih3bHAtPnhtaXRfZnJhbWUgPT0gTlVMTCk7CisJQlVHX09OKHdscC0+c3RvcF9xdWV1ZSA9PSBOVUxMKTsKKwlCVUdfT04od2xwLT5zdGFydF9xdWV1ZSA9PSBOVUxMKTsKKwl3bHAtPnJjID0gcmM7CisJd2xwX2VkYV9pbml0KCZ3bHAtPmVkYSk7LyogU2V0IHVwIGFkZHJlc3MgY2FjaGUgKi8KKwl3bHAtPnV3Yl9ub3RpZnNfaGFuZGxlci5jYiA9IHdscF91d2Jfbm90aWZzX2NiOworCXdscC0+dXdiX25vdGlmc19oYW5kbGVyLmRhdGEgPSB3bHA7CisJdXdiX25vdGlmc19yZWdpc3RlcihyYywgJndscC0+dXdiX25vdGlmc19oYW5kbGVyKTsKKworCXV3Yl9wYWxfaW5pdCgmd2xwLT5wYWwpOworCXJlc3VsdCA9IHV3Yl9wYWxfcmVnaXN0ZXIocmMsICZ3bHAtPnBhbCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXV3Yl9ub3RpZnNfZGVyZWdpc3Rlcih3bHAtPnJjLCAmd2xwLT51d2Jfbm90aWZzX2hhbmRsZXIpOworCisJZF9mbmVuZCg2LCBkZXYsICJ3bHAgJXAsIHJlc3VsdCA9ICVkXG4iLCB3bHAsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdscF9zZXR1cCk7CisKK3ZvaWQgd2xwX3JlbW92ZShzdHJ1Y3Qgd2xwICp3bHApCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgJXBcbiIsIHdscCk7CisJd2xwX25laWdoYm9yc19yZWxlYXNlKHdscCk7CisJdXdiX3BhbF91bnJlZ2lzdGVyKHdscC0+cmMsICZ3bHAtPnBhbCk7CisJdXdiX25vdGlmc19kZXJlZ2lzdGVyKHdscC0+cmMsICZ3bHAtPnV3Yl9ub3RpZnNfaGFuZGxlcik7CisJd2xwX2VkYV9yZWxlYXNlKCZ3bHAtPmVkYSk7CisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJaWYgKHdscC0+ZGV2X2luZm8gIT0gTlVMTCkKKwkJa2ZyZWUod2xwLT5kZXZfaW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZ3bHAtPm11dGV4KTsKKwl3bHAtPnJjID0gTlVMTDsKKwkvKiBXZSBoYXZlIHRvIHVzZSBOVUxMIGhlcmUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQKKwkgKiB3aGVuIHRoZSBkZXZpY2UgZGlzYXBwZWFyZWQuICovCisJZF9mbmVuZCg2LCBOVUxMLCAid2xwICVwXG4iLCB3bHApOworfQorRVhQT1JUX1NZTUJPTF9HUEwod2xwX3JlbW92ZSk7CisKKy8qKgorICogd2xwX3Jlc2V0X2FsbCAtIHJlc2V0IHRoZSBXTFAgaGFyZHdhcmUKKyAqIEB3bHA6IHRoZSBXTFAgZGV2aWNlIHRvIHJlc2V0LgorICoKKyAqIFRoaXMgc2NoZWR1bGVzIGEgZnVsbCBoYXJkd2FyZSByZXNldCBvZiB0aGUgV0xQIGRldmljZS4gIFRoZSByYWRpbworICogY29udHJvbGxlciBhbmQgYW55IG90aGVyIFBBTHMgd2lsbCBhbHNvIGJlIHJlc2V0LgorICovCit2b2lkIHdscF9yZXNldF9hbGwoc3RydWN0IHdscCAqd2xwKQoreworCXV3Yl9yY19yZXNldF9hbGwod2xwLT5yYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bHBfcmVzZXRfYWxsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3dscC93c3MtbGMuYyBiL2RyaXZlcnMvdXdiL3dscC93c3MtbGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmIxOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91d2Ivd2xwL3dzcy1sYy5jCkBAIC0wLDAgKzEsMTA1NSBAQAorLyoKKyAqIFdpTWVkaWEgTG9naWNhbCBMaW5rIENvbnRyb2wgUHJvdG9jb2wgKFdMUCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqIFJlaW5ldHRlIENoYXRyZSA8cmVpbmV0dGUuY2hhdHJlQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBXTFAgYXNzb2NpYXRpb24gcHJvdG9jb2wuCisgKgorICogRklYTUU6IERvY3MKKyAqCisgKiBBIFVXQiBuZXR3b3JrIGludGVyZmFjZSB3aWxsIGNvbmZpZ3VyZSBhIFdTUyB0aHJvdWdoIHdscF93c3Nfc2V0dXAoKSBhZnRlcgorICogdGhlIGludGVyZmFjZSBoYXMgYmVlbiBhc3NpZ25lZCBhIE1BQyBhZGRyZXNzLCB0eXBpY2FsbHkgYWZ0ZXIKKyAqICJpZmNvbmZpZyIgaGFzIGJlZW4gY2FsbGVkLiBXaGVuIHRoZSBpbnRlcmZhY2UgZ29lcyBkb3duIGl0IHNob3VsZCBjYWxsCisgKiB3bHBfd3NzX3JlbW92ZSgpLgorICoKKyAqIFdoZW4gdGhlIFdTUyBpcyByZWFkeSBmb3IgdXNlIHRoZSB1c2VyIGludGVyYWN0cyB2aWEgc3lzZnMgdG8gY3JlYXRlLAorICogZGlzY292ZXIsIGFuZCBhY3RpdmF0ZSBXU1MuCisgKgorICogd2xwX3dzc19lbnJvbGxfYWN0aXZhdGUoKQorICoKKyAqIHdscF93c3NfY3JlYXRlX2FjdGl2YXRlKCkKKyAqIAl3bHBfd3NzX3NldF93c3NpZF9oYXNoKCkKKyAqIAkJd2xwX3dzc19jb21wX3dzc2lkX2hhc2goKQorICogCXdscF93c3Nfc2VsX2JjYXN0X2FkZHIoKQorICogCXdscF93c3Nfc3lzZnNfYWRkKCkKKyAqCisgKiBDYWxsZWQgd2hlbiBubyBtb3JlIHJlZmVyZW5jZXMgdG8gV1NTIGV4aXN0OgorICogCXdscF93c3NfcmVsZWFzZSgpCisgKiAJCXdscF93c3NfcmVzZXQoKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPiAvKiBmb3IgaXNfdmFsaWRfZXRoZXJfYWRkciAqLworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3dscC5oPgorI2RlZmluZSBEX0xPQ0FMIDUKKyNpbmNsdWRlIDxsaW51eC91d2IvZGVidWcuaD4KKyNpbmNsdWRlICJ3bHAtaW50ZXJuYWwuaCIKKworCitzaXplX3Qgd2xwX3dzc19rZXlfcHJpbnQoY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgdTggKmtleSkKK3sKKwlzaXplX3QgcmVzdWx0OworCisJcmVzdWx0ID0gc2NucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwKKwkJCSAgIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKKwkJCSAgIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKKwkJCSAgIiUwMnggJTAyeCAlMDJ4ICUwMngiLAorCQkJICBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlbM10sCisJCQkgIGtleVs0XSwga2V5WzVdLCBrZXlbNl0sIGtleVs3XSwKKwkJCSAga2V5WzhdLCBrZXlbOV0sIGtleVsxMF0sIGtleVsxMV0sCisJCQkgIGtleVsxMl0sIGtleVsxM10sIGtleVsxNF0sIGtleVsxNV0pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ29tcHV0ZSBXU1NJRCBoYXNoCisgKiBXTFAgRHJhZnQgMC45OSBbNy4yLjFdCisgKgorICogVGhlIFdTU0lEIGhhc2ggZm9yIGEgV1NTSUQgaXMgdGhlIHJlc3VsdCBvZiBhbiBvY3RldC13aXNlIGV4Y2x1c2l2ZS1PUgorICogb2YgYWxsIG9jdGV0cyBpbiB0aGUgV1NTSUQuCisgKi8KK3N0YXRpYwordTggd2xwX3dzc19jb21wX3dzc2lkX2hhc2goc3RydWN0IHdscF91dWlkICp3c3NpZCkKK3sKKwlyZXR1cm4gd3NzaWQtPmRhdGFbMF0gIF4gd3NzaWQtPmRhdGFbMV0gIF4gd3NzaWQtPmRhdGFbMl0KKwkgICAgICAgXiB3c3NpZC0+ZGF0YVszXSAgXiB3c3NpZC0+ZGF0YVs0XSAgXiB3c3NpZC0+ZGF0YVs1XQorCSAgICAgICBeIHdzc2lkLT5kYXRhWzZdICBeIHdzc2lkLT5kYXRhWzddICBeIHdzc2lkLT5kYXRhWzhdCisJICAgICAgIF4gd3NzaWQtPmRhdGFbOV0gIF4gd3NzaWQtPmRhdGFbMTBdIF4gd3NzaWQtPmRhdGFbMTFdCisJICAgICAgIF4gd3NzaWQtPmRhdGFbMTJdIF4gd3NzaWQtPmRhdGFbMTNdIF4gd3NzaWQtPmRhdGFbMTRdCisJICAgICAgIF4gd3NzaWQtPmRhdGFbMTVdOworfQorCisvKioKKyAqIFNlbGVjdCBhIG11bHRpY2FzdCBFVUktNDggZm9yIHRoZSBXU1MgYnJvYWRjYXN0IGFkZHJlc3MuCisgKiBXTFAgRHJhZnQgMC45OSBbNy4yLjFdCisgKgorICogU2VsZWN0ZWQgYmFzZWQgb24gdGhlIFdpTWVkaWEgQWxsaWFuY2UgT1VJLCAwMC0xMy04OCwgd2l0aGluIHRoZSBXTFAKKyAqIHJhbmdlLCBbMDEtMTMtODgtMDAtMDEtMDAsIDAxLTEzLTg4LTAwLTAxLUZGXSBpbmNsdXNpdmUuCisgKgorICogVGhpcyBhZGRyZXNzIGlzIGN1cnJlbnRseSBoYXJkY29kZWQuCisgKiBGSVhNRT8KKyAqLworc3RhdGljCitzdHJ1Y3QgdXdiX21hY19hZGRyIHdscF93c3Nfc2VsX2JjYXN0X2FkZHIoc3RydWN0IHdscF93c3MgKndzcykKK3sKKwlzdHJ1Y3QgdXdiX21hY19hZGRyIGJjYXN0ID0geworCQkuZGF0YSA9IHsgMHgwMSwgMHgxMywgMHg4OCwgMHgwMCwgMHgwMSwgMHgwMCB9CisJfTsKKwlyZXR1cm4gYmNhc3Q7Cit9CisKKy8qKgorICogQ2xlYXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBXU1Mgc3RydWN0dXJlIC0gYWxsIGV4Y2VwdCBrb2JqLCBtdXRleCwgdmlydHVhbAorICoKKyAqIFdlIGRvIG5vdCB3YW50IHRvIHJlaW5pdGlhbGl6ZSAtIHRoZSBpbnRlcm5hbCBrb2JqIHNob3VsZCBub3QgY2hhbmdlIGFzCisgKiBpdCBzdGlsbCBwb2ludHMgdG8gdGhlIHBhcmVudCByZWNlaXZlZCBkdXJpbmcgc2V0dXAuIFRoZSBtdXRleCBzaG91bGQKKyAqIHJlbWFpbiBhbHNvLiBXZSB0aHVzIGp1c3QgcmVzZXQgdmFsdWVzIGluZGl2aWR1YWxseS4KKyAqIFRoZSB2aXJ1dGFsIGFkZHJlc3MgYXNzaWduZWQgdG8gV1NTIHdpbGwgcmVtYWluIHRoZSBzYW1lIGZvciB0aGUKKyAqIGxpZmV0aW1lIG9mIHRoZSBXU1MuIFdlIG9ubHkgcmVzZXQgdGhlIGZpZWxkcyB0aGF0IGNhbiBjaGFuZ2UgZHVyaW5nIGl0cworICogbGlmZXRpbWUuCisgKi8KK3ZvaWQgd2xwX3dzc19yZXNldChzdHJ1Y3Qgd2xwX3dzcyAqd3NzKQoreworCXN0cnVjdCB3bHAgKndscCA9IGNvbnRhaW5lcl9vZih3c3MsIHN0cnVjdCB3bHAsIHdzcyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCWRfZm5zdGFydCg1LCBkZXYsICJ3c3MgKCVwKSBcbiIsIHdzcyk7CisJbWVtc2V0KCZ3c3MtPndzc2lkLCAwLCBzaXplb2Yod3NzLT53c3NpZCkpOworCXdzcy0+aGFzaCA9IDA7CisJbWVtc2V0KCZ3c3MtPm5hbWVbMF0sIDAsIHNpemVvZih3c3MtPm5hbWUpKTsKKwltZW1zZXQoJndzcy0+YmNhc3QsIDAsIHNpemVvZih3c3MtPmJjYXN0KSk7CisJd3NzLT5zZWN1cmVfc3RhdHVzID0gV0xQX1dTU19VTlNFQ1VSRTsKKwltZW1zZXQoJndzcy0+bWFzdGVyX2tleVswXSwgMCwgc2l6ZW9mKHdzcy0+bWFzdGVyX2tleSkpOworCXdzcy0+dGFnID0gMDsKKwl3c3MtPnN0YXRlID0gV0xQX1dTU19TVEFURV9OT05FOworCWRfZm5lbmQoNSwgZGV2LCAid3NzICglcCkgXG4iLCB3c3MpOworfQorCisvKioKKyAqIENyZWF0ZSBzeXNmcyBpbmZyYXN0cnVjdHVyZSBmb3IgV1NTCisgKgorICogVGhlIFdTUyBpcyBjb25maWd1cmVkIHRvIGhhdmUgdGhlIGludGVyZmFjZSBhcyBwYXJlbnQgKHNlZSB3bHBfd3NzX3NldHVwKCkpCisgKiBhIG5ldyBzeXNmcyBkaXJlY3RvcnkgdGhhdCBpbmNsdWRlcyB3c3NpZCBhcyBpdHMgbmFtZSBpcyBjcmVhdGVkIGluIHRoZQorICogaW50ZXJmYWNlJ3Mgc3lzZnMgZGlyZWN0b3J5LiBUaGUgZ3JvdXAgb2YgZmlsZXMgaW50ZXJhY3Rpbmcgd2l0aCBXU1MgYXJlCisgKiBjcmVhdGVkIGFsc28uCisgKi8KK3N0YXRpYworaW50IHdscF93c3Nfc3lzZnNfYWRkKHN0cnVjdCB3bHBfd3NzICp3c3MsIGNoYXIgKndzc2lkX3N0cikKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlpbnQgcmVzdWx0OworCisJZF9mbnN0YXJ0KDUsIGRldiwgIndzcyAoJXApLCB3c3NpZDogJXNcbiIsIHdzcywgd3NzaWRfc3RyKTsKKwlyZXN1bHQgPSBrb2JqZWN0X3NldF9uYW1lKCZ3c3MtPmtvYmosICJ3c3MtJXMiLCB3c3NpZF9zdHIpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXdzcy0+a29iai5rdHlwZSA9ICZ3c3Nfa3R5cGU7CisJcmVzdWx0ID0ga29iamVjdF9pbml0X2FuZF9hZGQoJndzcy0+a29iaiwKKwkJCSZ3c3Nfa3R5cGUsIHdzcy0+a29iai5wYXJlbnQsICJ3bHAiKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogQ2Fubm90IHJlZ2lzdGVyIFdTUyBrb2JqZWN0LlxuIik7CisJCWdvdG8gZXJyb3Jfa29iamVjdF9yZWdpc3RlcjsKKwl9CisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ3c3MtPmtvYmosICZ3c3NfYXR0cl9ncm91cCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IENhbm5vdCByZWdpc3RlciBXU1MgYXR0cmlidXRlczogJWRcbiIsCisJCQlyZXN1bHQpOworCQlnb3RvIGVycm9yX3N5c2ZzX2NyZWF0ZV9ncm91cDsKKwl9CisJZF9mbmVuZCg1LCBkZXYsICJDb21wbGV0ZWQuIHJlc3VsdCA9ICVkIFxuIiwgcmVzdWx0KTsKKwlyZXR1cm4gMDsKK2Vycm9yX3N5c2ZzX2NyZWF0ZV9ncm91cDoKKworCWtvYmplY3RfcHV0KCZ3c3MtPmtvYmopOyAvKiB3aWxsIGZyZWUgbmFtZSBpZiBuZWVkZWQgKi8KKwlyZXR1cm4gcmVzdWx0OworZXJyb3Jfa29iamVjdF9yZWdpc3RlcjoKKwlrZnJlZSh3c3MtPmtvYmoubmFtZSk7CisJd3NzLT5rb2JqLm5hbWUgPSBOVUxMOworCXdzcy0+a29iai5rdHlwZSA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIFJlbGVhc2UgV1NTCisgKgorICogTm8gbW9yZSByZWZlcmVuY2VzIGV4aXN0IHRvIHRoaXMgV1NTLiBXZSBzaG91bGQgdW5kbyBldmVyeXRoaW5nIHRoYXQgd2FzCisgKiBkb25lIGluIHdscF93c3NfY3JlYXRlX2FjdGl2YXRlKCkgZXhjZXB0IHJlbW92aW5nIHRoZSBncm91cC4gVGhlIGdyb3VwCisgKiBpcyBub3QgcmVtb3ZlZCBiZWNhdXNlIGFuIG9iamVjdCBjYW4gYmUgdW5yZWdpc3RlcmVkIGJlZm9yZSB0aGUgZ3JvdXAgaXMKKyAqIGNyZWF0ZWQuIFdlIGFsc28gdW5kbyBhbnkgYWRkaXRpb25hbCBvcGVyYXRpb25zIG9uIHRoZSBXU1MgYWZ0ZXIgdGhpcworICogKGFkZGl0aW9uIG9mIG1lbWJlcnMpLgorICoKKyAqIElmIG1lbW9yeSB3YXMgYWxsb2NhdGVkIGZvciB0aGUga29iamVjdCdzIG5hbWUgdGhlbiBpdCB3aWxsCisgKiBiZSBmcmVlZCBieSB0aGUga29iamVjdCBzeXN0ZW0gZHVyaW5nIHRoaXMgdGltZS4KKyAqCisgKiBUaGUgRURBIGNhY2hlIGlzIHJlbW92ZWQgYW5kIHJlaW5pdGlsaXplZCB3aGVuIHRoZSBXU1MgaXMgcmVtb3ZlZC4gV2UKKyAqIHRodXMgbG9vc2Uga25vd2xlZGdlIG9mIG1lbWJlcnMgb2YgdGhpcyBXU1MgYXQgdGhhdCB0aW1lIGFuZCBuZWVkIG5vdCBkbworICogaXQgaGVyZS4KKyAqLwordm9pZCB3bHBfd3NzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IHdscF93c3MgKndzcyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Qgd2xwX3dzcywga29iaik7CisKKwl3bHBfd3NzX3Jlc2V0KHdzcyk7Cit9CisKKy8qKgorICogRW5yb2xsIGludG8gYSBXU1MgdXNpbmcgcHJvdmlkZWQgbmVpZ2hib3IgYXMgcmVnaXN0cmFyCisgKgorICogRmlyc3Qgc2VhcmNoIHRoZSBuZWlnaGJvcmhvb2QgaW5mb3JtYXRpb24gdG8gbGVhcm4gd2hpY2ggbmVpZ2hib3IgaXMKKyAqIHJlZmVycmVkIHRvLCBuZXh0IHByb2NlZWQgd2l0aCBlbnJvbGxtZW50LgorICoKKyAqICZ3c3MtPm11dGV4IGlzIGhlbGQKKyAqLworc3RhdGljCitpbnQgd2xwX3dzc19lbnJvbGxfdGFyZ2V0KHN0cnVjdCB3bHBfd3NzICp3c3MsIHN0cnVjdCB3bHBfdXVpZCAqd3NzaWQsCisJCQkgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKmRlc3QpCit7CisJc3RydWN0IHdscCAqd2xwID0gY29udGFpbmVyX29mKHdzcywgc3RydWN0IHdscCwgd3NzKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJc3RydWN0IHdscF9uZWlnaGJvcl9lICpuZWlnaGJvcjsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisJaW50IHJlc3VsdCA9IC1FTlhJTzsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkcjsKKworCXdscF93c3NfdXVpZF9wcmludChidWYsIHNpemVvZihidWYpLCB3c3NpZCk7CisJZF9mbnN0YXJ0KDUsIGRldiwgIndzcyAlcCwgd3NzaWQgJXMsIHJlZ2lzdHJhciAlMDJ4OiUwMnggXG4iLAorCQkgIHdzcywgYnVmLCBkZXN0LT5kYXRhWzFdLCBkZXN0LT5kYXRhWzBdKTsKKwltdXRleF9sb2NrKCZ3bHAtPm5ibXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmVpZ2hib3IsICZ3bHAtPm5laWdoYm9ycywgbm9kZSkgeworCQlkZXZfYWRkciA9ICZuZWlnaGJvci0+dXdiX2Rldi0+ZGV2X2FkZHI7CisJCWlmICghbWVtY21wKGRlc3QsIGRldl9hZGRyLCBzaXplb2YoKmRlc3QpKSkgeworCQkJZF9wcmludGYoNSwgZGV2LCAiTmVpZ2hib3IgJTAyeDolMDJ4IGlzIHZhbGlkLCAiCisJCQkJICJlbnJvbGxpbmcuIFxuIiwKKwkJCQkgZGV2X2FkZHItPmRhdGFbMV0sIGRldl9hZGRyLT5kYXRhWzBdKTsKKwkJCXJlc3VsdCA9IHdscF9lbnJvbGxfbmVpZ2hib3Iod2xwLCBuZWlnaGJvciwgd3NzLAorCQkJCQkJICAgICB3c3NpZCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmVzdWx0ID09IC1FTlhJTykKKwkJZGV2X2VycihkZXYsICJXTFA6IENhbm5vdCBmaW5kIG5laWdoYm9yICUwMng6JTAyeC4gXG4iLAorCQkJZGVzdC0+ZGF0YVsxXSwgZGVzdC0+ZGF0YVswXSk7CisJbXV0ZXhfdW5sb2NrKCZ3bHAtPm5ibXV0ZXgpOworCWRfZm5lbmQoNSwgZGV2LCAid3NzICVwLCB3c3NpZCAlcywgcmVnaXN0cmFyICUwMng6JTAyeCwgcmVzdWx0ICVkIFxuIiwKKwkJICB3c3MsIGJ1ZiwgZGVzdC0+ZGF0YVsxXSwgZGVzdC0+ZGF0YVswXSwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIEVucm9sbCBpbnRvIGEgV1NTIHByZXZpb3VzbHkgZGlzY292ZXJlZAorICoKKyAqIFVzZXIgcHJvdmlkZXMgV1NTSUQgb2YgV1NTLCBzZWFyY2ggZm9yIG5laWdoYm9yIHRoYXQgaGFzIHRoaXMgV1NTCisgKiBhY3RpdmF0ZWQgYW5kIGF0dGVtcHQgdG8gZW5yb2xsLgorICoKKyAqICZ3c3MtPm11dGV4IGlzIGhlbGQKKyAqLworc3RhdGljCitpbnQgd2xwX3dzc19lbnJvbGxfZGlzY292ZXJlZChzdHJ1Y3Qgd2xwX3dzcyAqd3NzLCBzdHJ1Y3Qgd2xwX3V1aWQgKndzc2lkKQoreworCXN0cnVjdCB3bHAgKndscCA9IGNvbnRhaW5lcl9vZih3c3MsIHN0cnVjdCB3bHAsIHdzcyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB3bHBfbmVpZ2hib3JfZSAqbmVpZ2hib3I7CisJc3RydWN0IHdscF93c3NpZF9lICp3c3NpZF9lOworCWNoYXIgYnVmW1dMUF9XU1NfVVVJRF9TVFJTSVpFXTsKKwlpbnQgcmVzdWx0ID0gLUVOWElPOworCisJd2xwX3dzc191dWlkX3ByaW50KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHdzc2lkKTsKKwlkX2Zuc3RhcnQoNSwgZGV2LCAid3NzICVwLCB3c3NpZCAlcyBcbiIsIHdzcywgYnVmKTsKKwltdXRleF9sb2NrKCZ3bHAtPm5ibXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmVpZ2hib3IsICZ3bHAtPm5laWdoYm9ycywgbm9kZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdzc2lkX2UsICZuZWlnaGJvci0+d3NzaWQsIG5vZGUpIHsKKwkJCWlmICghbWVtY21wKHdzc2lkLCAmd3NzaWRfZS0+d3NzaWQsIHNpemVvZigqd3NzaWQpKSkgeworCQkJCWRfcHJpbnRmKDUsIGRldiwgIkZvdW5kIFdTU0lEICVzIGluIG5laWdoYm9yICIKKwkJCQkJICIlMDJ4OiUwMnggY2FjaGUuIFxuIiwgYnVmLAorCQkJCQkgbmVpZ2hib3ItPnV3Yl9kZXYtPmRldl9hZGRyLmRhdGFbMV0sCisJCQkJCSBuZWlnaGJvci0+dXdiX2Rldi0+ZGV2X2FkZHIuZGF0YVswXSk7CisJCQkJcmVzdWx0ID0gd2xwX2Vucm9sbF9uZWlnaGJvcih3bHAsIG5laWdoYm9yLAorCQkJCQkJCSAgICAgd3NzLCB3c3NpZCk7CisJCQkJaWYgKHJlc3VsdCA9PSAwKSAvKiBlbnJvbGxtZW50IHN1Y2Nlc3MgKi8KKwkJCQkJZ290byBvdXQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CitvdXQ6CisJaWYgKHJlc3VsdCA9PSAtRU5YSU8pCisJCWRldl9lcnIoZGV2LCAiV0xQOiBDYW5ub3QgZmluZCBXU1NJRCAlcyBpbiBjYWNoZS4gXG4iLCBidWYpOworCW11dGV4X3VubG9jaygmd2xwLT5uYm11dGV4KTsKKwlkX2ZuZW5kKDUsIGRldiwgIndzcyAlcCwgd3NzaWQgJXMsIHJlc3VsdCAlZCBcbiIsIHdzcywgYnVmLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogRW5yb2xsIGludG8gV1NTIHdpdGggcHJvdmlkZWQgV1NTSUQsIHJlZ2lzdHJhciBtYXkgYmUgcHJvdmlkZWQKKyAqCisgKiBAd3NzOiBvdXQgV1NTIHRoYXQgd2lsbCBiZSBlbnJvbGxlZAorICogQHdzc2lkOiB3c3NpZCBvZiBuZWlnaGJvcmluZyBXU1MgdGhhdCB3ZSB3YW50IHRvIGVucm9sbCBpbgorICogQGRldmFkZHI6IHJlZ2lzdHJhciBjYW4gYmUgc3BlY2lmaWVkLCB3aWxsIGJlIGJyb2FkY2FzdCAoZmY6ZmYpIGlmIGFueQorICogICAgICAgICAgIG5laWdoYm9yIGNhbiBiZSB1c2VkIGFzIHJlZ2lzdHJhci4KKyAqCisgKiAmd3NzLT5tdXRleCBpcyBoZWxkCisgKi8KK3N0YXRpYworaW50IHdscF93c3NfZW5yb2xsKHN0cnVjdCB3bHBfd3NzICp3c3MsIHN0cnVjdCB3bHBfdXVpZCAqd3NzaWQsCisJCSAgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldmFkZHIpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisJc3RydWN0IHV3Yl9kZXZfYWRkciBiY2FzdCA9IHsuZGF0YSA9IHsweGZmLCAweGZmfSB9OworCisJd2xwX3dzc191dWlkX3ByaW50KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHdzc2lkKTsKKwlpZiAod3NzLT5zdGF0ZSAhPSBXTFBfV1NTX1NUQVRFX05PTkUpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IEFscmVhZHkgZW5yb2xsZWQgaW4gV1NTICVzLlxuIiwgYnVmKTsKKwkJcmVzdWx0ID0gLUVFWElTVDsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKCFtZW1jbXAoJmJjYXN0LCBkZXZhZGRyLCBzaXplb2YoYmNhc3QpKSkgeworCQlkX3ByaW50Zig1LCBkZXYsICJSZXF1ZXN0IHRvIGVucm9sbCBpbiBkaXNjb3ZlcmVkIFdTUyAiCisJCQkgIndpdGggV1NTSUQgJXMgXG4iLCBidWYpOworCQlyZXN1bHQgPSB3bHBfd3NzX2Vucm9sbF9kaXNjb3ZlcmVkKHdzcywgd3NzaWQpOworCX0gZWxzZSB7CisJCWRfcHJpbnRmKDUsIGRldiwgIlJlcXVlc3QgdG8gZW5yb2xsIGluIFdTU0lEICVzIHdpdGggIgorCQkJICJyZWdpc3RyYXIgJTAyeDolMDJ4XG4iLCBidWYsIGRldmFkZHItPmRhdGFbMV0sCisJCQkgZGV2YWRkci0+ZGF0YVswXSk7CisJCXJlc3VsdCA9IHdscF93c3NfZW5yb2xsX3RhcmdldCh3c3MsIHdzc2lkLCBkZXZhZGRyKTsKKwl9CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBlbnJvbGwgaW50byBXU1MgJXMsIHJlc3VsdCAlZCBcbiIsCisJCQlidWYsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCWRfcHJpbnRmKDIsIGRldiwgIlN1Y2Nlc3NmdWxseSBlbnJvbGxlZCBpbnRvIFdTUyAlcyBcbiIsIGJ1Zik7CisJcmVzdWx0ID0gd2xwX3dzc19zeXNmc19hZGQod3NzLCBidWYpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gc2V0IHVwIHN5c2ZzIGZvciBXU1Mga29iamVjdC5cbiIpOworCQl3bHBfd3NzX3Jlc2V0KHdzcyk7CisJfQorZXJyb3I6CisJcmV0dXJuIHJlc3VsdDsKKworfQorCisvKioKKyAqIEFjdGl2YXRlIGdpdmVuIFdTUworICoKKyAqIFByaW9yIHRvIGFjdGl2YXRpb24gYSBXU1MgbXVzdCBiZSBlbnJvbGxlZC4gVG8gYWN0aXZhdGUgYSBXU1MgYSBkZXZpY2UKKyAqIGluY2x1ZGVzIHRoZSBXU1MgaGFzaCBpbiB0aGUgV0xQIElFIGluIGl0cyBiZWFjb24gaW4gZWFjaCBzdXBlcmZyYW1lLgorICogV0xQIDAuOTkgWzcuMi41XS4KKyAqCisgKiBUaGUgV1NTIHRhZyBpcyBhbHNvIGNvbXB1dGVkIGF0IHRoaXMgdGltZS4gV2Ugb25seSBzdXBwb3J0IG9uZSBhY3RpdmF0ZWQKKyAqIFdTUyBzbyB3ZSBjYW4gdXNlIHRoZSBoYXNoIGFzIGEgdGFnIC0gdGhlcmUgd2lsbCBuZXZlciBiZSBhIGNvbmZsaWN0LgorICoKKyAqIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgb25lIGFjdGl2YXRlZCBXU1Mgc28gb25seSBvbmUgV1NTIGhhc2ggaXMKKyAqIGluY2x1ZGVkIGluIHRoZSBXTFAgSUUuCisgKi8KK3N0YXRpYworaW50IHdscF93c3NfYWN0aXZhdGUoc3RydWN0IHdscF93c3MgKndzcykKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlzdHJ1Y3QgdXdiX3JjICp1d2JfcmMgPSB3bHAtPnJjOworCWludCByZXN1bHQ7CisJc3RydWN0IHsKKwkJc3RydWN0IHdscF9pZSB3bHBfaWU7CisJCXU4IGhhc2g7IC8qIG9ubHkgaW5jbHVkZSBvbmUgaGFzaCAqLworCX0gaWVfZGF0YTsKKworCWRfZm5zdGFydCg1LCBkZXYsICJBY3RpdmF0aW5nIFdTUyAlcC4gXG4iLCB3c3MpOworCUJVR19PTih3c3MtPnN0YXRlICE9IFdMUF9XU1NfU1RBVEVfRU5ST0xMRUQpOworCXdzcy0+aGFzaCA9IHdscF93c3NfY29tcF93c3NpZF9oYXNoKCZ3c3MtPndzc2lkKTsKKwl3c3MtPnRhZyA9IHdzcy0+aGFzaDsKKwltZW1zZXQoJmllX2RhdGEsIDAsIHNpemVvZihpZV9kYXRhKSk7CisJaWVfZGF0YS53bHBfaWUuaGRyLmVsZW1lbnRfaWQgPSBVV0JfSUVfV0xQOworCWllX2RhdGEud2xwX2llLmhkci5sZW5ndGggPSBzaXplb2YoaWVfZGF0YSkgLSBzaXplb2Yoc3RydWN0IHV3Yl9pZV9oZHIpOworCXdscF9pZV9zZXRfaGFzaF9sZW5ndGgoJmllX2RhdGEud2xwX2llLCBzaXplb2YoaWVfZGF0YS5oYXNoKSk7CisJaWVfZGF0YS5oYXNoID0gd3NzLT5oYXNoOworCXJlc3VsdCA9IHV3Yl9yY19pZV9hZGQodXdiX3JjLCAmaWVfZGF0YS53bHBfaWUuaGRyLAorCQkJICAgICAgIHNpemVvZihpZV9kYXRhKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBhZGQgV0xQIElFIHRvIGJlYWNvbi4gIgorCQkJInJlc3VsdCA9ICVkLlxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcl93bHBfaWU7CisJfQorCXdzcy0+c3RhdGUgPSBXTFBfV1NTX1NUQVRFX0FDVElWRTsKKwlyZXN1bHQgPSAwOworZXJyb3Jfd2xwX2llOgorCWRfZm5lbmQoNSwgZGV2LCAiQWN0aXZhdGluZyBXU1MgJXAsIHJlc3VsdCA9ICVkIFxuIiwgd3NzLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogRW5yb2xsIGluIGFuZCBhY3RpdmF0ZSBXU1MgaWRlbnRpZmllZCBieSBwcm92aWRlZCBXU1NJRAorICoKKyAqIFRoZSBuZWlnaGJvcmhvb2QgY2FjaGUgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIGFsbCBuZWlnaGJvcnMgYW5kIHRoZQorICogV1NTIHRoZXkgaGF2ZSBhY3RpdmF0ZWQuIEJhc2VkIG9uIHRoYXQgY2FjaGUgd2Ugc2VhcmNoIHdoaWNoIG5laWdoYm9yIHdlCisgKiBjYW4gcGVyZm9ybSB0aGUgYXNzb2NpYXRpb24gcHJvY2VzcyB3aXRoLiBUaGUgdXNlciBhbHNvIGhhcyBvcHRpb24gdG8KKyAqIHNwZWNpZnkgd2hpY2ggbmVpZ2hib3IgaXQgcHJlZmVycyBhcyByZWdpc3RyYXIuCisgKiBTdWNjZXNzZnVsIGVucm9sbG1lbnQgaXMgZm9sbG93ZWQgYnkgYWN0aXZhdGlvbi4KKyAqIFN1Y2Nlc3NmdWwgYWN0aXZhdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3lzZnMgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKyAqIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIFdTUy4KKyAqLworaW50IHdscF93c3NfZW5yb2xsX2FjdGl2YXRlKHN0cnVjdCB3bHBfd3NzICp3c3MsIHN0cnVjdCB3bHBfdXVpZCAqd3NzaWQsCisJCQkgICAgc3RydWN0IHV3Yl9kZXZfYWRkciAqZGV2YWRkcikKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlpbnQgcmVzdWx0ID0gMDsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisKKwlkX2Zuc3RhcnQoNSwgZGV2LCAiRW5yb2xsbWVudCBhbmQgYWN0aXZhdGlvbiByZXF1ZXN0ZWQuIFxuIik7CisJbXV0ZXhfbG9jaygmd3NzLT5tdXRleCk7CisJcmVzdWx0ID0gd2xwX3dzc19lbnJvbGwod3NzLCB3c3NpZCwgZGV2YWRkcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJd2xwX3dzc191dWlkX3ByaW50KGJ1Ziwgc2l6ZW9mKGJ1ZiksICZ3c3MtPndzc2lkKTsKKwkJZGV2X2VycihkZXYsICJXTFA6IEVucm9sbG1lbnQgaW50byBXU1MgJXMgZmFpbGVkLlxuIiwgYnVmKTsKKwkJZ290byBlcnJvcl9lbnJvbGw7CisJfQorCXJlc3VsdCA9IHdscF93c3NfYWN0aXZhdGUod3NzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIGFjdGl2YXRlIFdTUy4gVW5kb2luZyBlbnJvbGxtZW50ICIKKwkJCSJyZXN1bHQgPSAlZCBcbiIsIHJlc3VsdCk7CisJCS8qIFVuZG8gZW5yb2xsbWVudCAqLworCQl3bHBfd3NzX3Jlc2V0KHdzcyk7CisJCWdvdG8gZXJyb3JfYWN0aXZhdGU7CisJfQorZXJyb3JfYWN0aXZhdGU6CitlcnJvcl9lbnJvbGw6CisJbXV0ZXhfdW5sb2NrKCZ3c3MtPm11dGV4KTsKKwlkX2ZuZW5kKDUsIGRldiwgIkNvbXBsZXRlZC4gcmVzdWx0ID0gJWQgXG4iLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ3JlYXRlLCBlbnJvbGwsIGFuZCBhY3RpdmF0ZSBhIG5ldyBXU1MKKyAqCisgKiBAd3NzaWQ6IG5ldyB3c3NpZCBwcm92aWRlZCBieSB1c2VyCisgKiBAbmFtZTogIFdTUyBuYW1lIHJlcXVlc3RlZCBieSB1c2VkLgorICogQHNlY19zdGF0dXM6IHNlY3VyaXR5IHN0YXR1cyByZXF1ZXN0ZWQgYnkgdXNlcgorICoKKyAqIEEgdXNlciByZXF1ZXN0ZWQgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IFdTUy4gQWxsIG9wZXJhdGlvbnMgYXJlIGRvbmUKKyAqIGxvY2FsbHkuIFRoZSBuZXcgV1NTIHdpbGwgYmUgc3RvcmVkIGxvY2FsbHksIHRoZSBoYXNoIHdpbGwgYmUgaW5jbHVkZWQKKyAqIGluIHRoZSBXTFAgSUUsIGFuZCB0aGUgc3lzZnMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoaXMgV1NTIHdpbGwgYmUKKyAqIGNyZWF0ZWQuCisgKi8KK2ludCB3bHBfd3NzX2NyZWF0ZV9hY3RpdmF0ZShzdHJ1Y3Qgd2xwX3dzcyAqd3NzLCBzdHJ1Y3Qgd2xwX3V1aWQgKndzc2lkLAorCQkJICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIHNlY19zdGF0dXMsIHVuc2lnbmVkIGFjY2VwdCkKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlpbnQgcmVzdWx0ID0gMDsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisJZF9mbnN0YXJ0KDUsIGRldiwgIlJlcXVlc3QgdG8gY3JlYXRlIG5ldyBXU1MuXG4iKTsKKwlyZXN1bHQgPSB3bHBfd3NzX3V1aWRfcHJpbnQoYnVmLCBzaXplb2YoYnVmKSwgd3NzaWQpOworCWRfcHJpbnRmKDUsIGRldiwgIlJlcXVlc3QgdG8gY3JlYXRlIFdTUzogV1NTSUQ9JXMsIG5hbWU9JXMsICIKKwkJICJzZWNfc3RhdHVzPSV1LCBhY2NlcHRpbmcgZW5yb2xsbWVudD0ldSBcbiIsCisJCSBidWYsIG5hbWUsIHNlY19zdGF0dXMsIGFjY2VwdCk7CisJaWYgKCFtdXRleF90cnlsb2NrKCZ3c3MtPm11dGV4KSkgeworCQlkZXZfZXJyKGRldiwgIldMUDogV0xQIGFzc29jaWF0aW9uIHNlc3Npb24gaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKHdzcy0+c3RhdGUgIT0gV0xQX1dTU19TVEFURV9OT05FKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBXU1MgYWxyZWFkeSBleGlzdHMuIE5vdCBjcmVhdGluZyBuZXcuXG4iKTsKKwkJcmVzdWx0ID0gLUVFWElTVDsKKwkJZ290byBvdXQ7CisJfQorCWlmICh3c3MtPmtvYmoucGFyZW50ID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFdTUyBwYXJlbnQgbm90IHJlYWR5LiBJcyBuZXR3b3JrIGludGVyZmFjZSAiCisJCSAgICAgICAidXA/XG4iKTsKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHNlY19zdGF0dXMgPT0gV0xQX1dTU19TRUNVUkUpIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IEZJWE1FIENyZWF0aW9uIG9mIHNlY3VyZSBXU1Mgbm90ICIKKwkJCSJzdXBwb3J0ZWQgeWV0LlxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwl3c3MtPndzc2lkID0gKndzc2lkOworCW1lbWNweSh3c3MtPm5hbWUsIG5hbWUsIHNpemVvZih3c3MtPm5hbWUpKTsKKwl3c3MtPmJjYXN0ID0gd2xwX3dzc19zZWxfYmNhc3RfYWRkcih3c3MpOworCXdzcy0+c2VjdXJlX3N0YXR1cyA9IHNlY19zdGF0dXM7CisJd3NzLT5hY2NlcHRfZW5yb2xsID0gYWNjZXB0OworCS8qd3NzLT52aXJ0dWFsX2FkZHIgaXMgaW5pdGlhbGl6ZWQgaW4gY2FsbCB0byB3bHBfd3NzX3NldHVwKi8KKwkvKiBzeXNmcyBpbmZyYXN0cnVjdHVyZSAqLworCXJlc3VsdCA9IHdscF93c3Nfc3lzZnNfYWRkKHdzcywgYnVmKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBzZXQgdXAgc3lzZnMgZm9yIFdTUyBrb2JqZWN0LlxuIik7CisJCXdscF93c3NfcmVzZXQod3NzKTsKKwkJZ290byBvdXQ7CisJfSBlbHNlCisJCXJlc3VsdCA9IDA7CisJd3NzLT5zdGF0ZSA9IFdMUF9XU1NfU1RBVEVfRU5ST0xMRUQ7CisJcmVzdWx0ID0gd2xwX3dzc19hY3RpdmF0ZSh3c3MpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gYWN0aXZhdGUgV1NTLiBVbmRvaW5nICIKKwkJCSJlbnJvbGxtZW50XG4iKTsKKwkJd2xwX3dzc19yZXNldCh3c3MpOworCQlnb3RvIG91dDsKKwl9CisJcmVzdWx0ID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJndzcy0+bXV0ZXgpOworCWRfZm5lbmQoNSwgZGV2LCAiQ29tcGxldGVkLiByZXN1bHQgPSAlZCBcbiIsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBEZXRlcm1pbmUgaWYgbmVpZ2hib3IgaGFzIFdTUyBhY3RpdmF0ZWQKKyAqCisgKiBAcmV0dXJuczogMSBpZiBuZWlnaGJvciBoYXMgV1NTIGFjdGl2YXRlZCwgemVybyBvdGhlcndpc2UKKyAqCisgKiBUaGlzIGNhbiBiZSBkb25lIGluIHR3byB3YXlzOgorICogLSBzZW5kIGEgQzEgZnJhbWUsIHBhcnNlIEMyL0YwIHJlc3BvbnNlCisgKiAtIGV4YW1pbmUgdGhlIFdMUCBJRSBzZW50IGJ5IHRoZSBuZWlnaGJvcgorICoKKyAqIFRoZSBXTFAgSUUgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiBoYXJkd2FyZSBzbyB3ZSB1c2UgdGhlIEMxL0MyIGZyYW1lCisgKiBleGNoYW5nZSB0byBkZXRlcm1pbmUgaWYgYSBXU1MgaXMgYWN0aXZhdGVkLiBVc2luZyB0aGUgV0xQIElFIHNob3VsZCBiZQorICogZmFzdGVyIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVuIGl0IGJlY29tZXMgcG9zc2libGUuCisgKi8KK2ludCB3bHBfd3NzX2lzX2FjdGl2ZShzdHJ1Y3Qgd2xwICp3bHAsIHN0cnVjdCB3bHBfd3NzICp3c3MsCisJCSAgICAgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldl9hZGRyKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGlvbik7CisJc3RydWN0IHdscF9zZXNzaW9uIHNlc3Npb247CisJc3RydWN0IHNrX2J1ZmYgICpza2I7CisJc3RydWN0IHdscF9mcmFtZV9hc3NvYyAqcmVzcDsKKwlzdHJ1Y3Qgd2xwX3V1aWQgd3NzaWQ7CisKKwl3bHBfd3NzX3V1aWRfcHJpbnQoYnVmLCBzaXplb2YoYnVmKSwgJndzcy0+d3NzaWQpOworCWRfZm5zdGFydCg1LCBkZXYsICJ3bHAgJXAsIHdzcyAlcCAod3NzaWQgJXMpLCBuZWlnaGJvciAlMDJ4OiUwMnggXG4iLAorCQkgIHdscCwgd3NzLCBidWYsIGRldl9hZGRyLT5kYXRhWzFdLCBkZXZfYWRkci0+ZGF0YVswXSk7CisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJLyogU2VuZCBDMSBhc3NvY2lhdGlvbiBmcmFtZSAqLworCXJlc3VsdCA9IHdscF9zZW5kX2Fzc29jX2ZyYW1lKHdscCwgd3NzLCBkZXZfYWRkciwgV0xQX0FTU09DX0MxKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBzZW5kIEMxIGZyYW1lIHRvIG5laWdoYm9yICIKKwkJCSIlMDJ4OiUwMnggKCVkKVxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCQlkZXZfYWRkci0+ZGF0YVswXSwgcmVzdWx0KTsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIENyZWF0ZSBzZXNzaW9uLCB3YWl0IGZvciByZXNwb25zZSAqLworCXNlc3Npb24uZXhwX21lc3NhZ2UgPSBXTFBfQVNTT0NfQzI7CisJc2Vzc2lvbi5jYiA9IHdscF9zZXNzaW9uX2NiOworCXNlc3Npb24uY2JfcHJpdiA9ICZjb21wbGV0aW9uOworCXNlc3Npb24ubmVpZ2hib3JfYWRkciA9ICpkZXZfYWRkcjsKKwlCVUdfT04od2xwLT5zZXNzaW9uICE9IE5VTEwpOworCXdscC0+c2Vzc2lvbiA9ICZzZXNzaW9uOworCS8qIFdhaXQgZm9yIEMyL0YwIGZyYW1lICovCisJcmVzdWx0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmNvbXBsZXRpb24sCisJCQkJCQkgICBXTFBfUEVSX01TR19USU1FT1VUICogSFopOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIlRpbWVvdXQgd2hpbGUgc2VuZGluZyBDMSB0byBuZWlnaGJvciAiCisJCQkgICAgICIlMDJ4OiUwMnguXG4iLCBkZXZfYWRkci0+ZGF0YVsxXSwKKwkJCSAgICAgZGV2X2FkZHItPmRhdGFbMF0pOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gc2VuZCBDMSB0byBuZWlnaGJvciAlMDJ4OiUwMnguXG4iLAorCQkJZGV2X2FkZHItPmRhdGFbMV0sIGRldl9hZGRyLT5kYXRhWzBdKTsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIFBhcnNlIG1lc3NhZ2UgaW4gc2Vzc2lvbi0+ZGF0YTogaXQgd2lsbCBiZSBlaXRoZXIgQzIgb3IgRjAgKi8KKwlza2IgPSBzZXNzaW9uLmRhdGE7CisJcmVzcCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlkX3ByaW50Zig1LCBkZXYsICJSZWNlaXZlZCByZXNwb25zZSB0byBDMSBmcmFtZS4gXG4iKTsKKwlkX2R1bXAoNSwgZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuID4gNzIgPyA3MiA6IHNrYi0+bGVuKTsKKwlpZiAocmVzcC0+dHlwZSA9PSBXTFBfQVNTT0NfRjApIHsKKwkJcmVzdWx0ID0gd2xwX3BhcnNlX2YwKHdscCwgc2tiKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlkZXZfZXJyKGRldiwgIldMUDogIHVuYWJsZSB0byBwYXJzZSBpbmNvbWluZyBGMCAiCisJCQkJImZyYW1lIGZyb20gbmVpZ2hib3IgJTAyeDolMDJ4LlxuIiwKKwkJCQlkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCQlyZXN1bHQgPSAwOworCQlnb3RvIGVycm9yX3Jlc3BfcGFyc2U7CisJfQorCS8qIFdMUCB2ZXJzaW9uIGFuZCBtZXNzYWdlIHR5cGUgZmllbGRzIGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZCAqLworCXJlc3VsdCA9IHdscF9nZXRfd3NzaWQod2xwLCAodm9pZCAqKXJlc3AgKyBzaXplb2YoKnJlc3ApLCAmd3NzaWQsCisJCQkgICAgICAgc2tiLT5sZW4gLSBzaXplb2YoKnJlc3ApKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIG9idGFpbiBXU1NJRCBmcm9tIEMyIGZyYW1lLlxuIik7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gZXJyb3JfcmVzcF9wYXJzZTsKKwl9CisJaWYgKCFtZW1jbXAoJndzc2lkLCAmd3NzLT53c3NpZCwgc2l6ZW9mKHdzc2lkKSkpIHsKKwkJZF9wcmludGYoNSwgZGV2LCAiV1NTSUQgaW4gQzIgZnJhbWUgbWF0Y2hlcyBsb2NhbCAiCisJCQkgImFjdGl2ZSBXU1MuXG4iKTsKKwkJcmVzdWx0ID0gMTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgIldMUDogUmVjZWl2ZWQgYSBDMiBmcmFtZSB3aXRob3V0IG1hdGNoaW5nICIKKwkJCSJXU1NJRC5cbiIpOworCQlyZXN1bHQgPSAwOworCX0KK2Vycm9yX3Jlc3BfcGFyc2U6CisJa2ZyZWVfc2tiKHNrYik7CitvdXQ6CisJd2xwLT5zZXNzaW9uID0gTlVMTDsKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOworCWRfZm5lbmQoNSwgZGV2LCAid2xwICVwLCB3c3MgJXAgKHdzc2lkICVzKSwgbmVpZ2hib3IgJTAyeDolMDJ4IFxuIiwKKwkJICB3bHAsIHdzcywgYnVmLCBkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQWN0aXZhdGUgY29ubmVjdGlvbiB3aXRoIG5laWdoYm9yIGJ5IHVwZGF0aW5nIEVEQSBjYWNoZQorICoKKyAqIEB3c3M6ICAgICAgIGxvY2FsIFdTUyB0byB3aGljaCBuZWlnaGJvciB3YW50cyB0byBjb25uZWN0CisgKiBAZGV2X2FkZHI6ICBuZWlnaGJvcidzIGFkZHJlc3MKKyAqIEB3c3NpZDogICAgIG5laWdoYm9yJ3MgV1NTSUQgLSBtdXN0IGJlIHNhbWUgYXMgb3VyIFdTUydzIFdTU0lECisgKiBAdGFnOiAgICAgICBuZWlnaGJvcidzIFdTUyB0YWcgdXNlZCB0byBpZGVudGlmeSBmcmFtZXMgdHJhbnNtaXR0ZWQgYnkgaXQKKyAqIEB2aXJ0X2FkZHI6IG5laWdoYm9yJ3MgdmlydHVhbCBFVUktNDgKKyAqLworc3RhdGljCitpbnQgd2xwX3dzc19hY3RpdmF0ZV9jb25uZWN0aW9uKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF93c3MgKndzcywKKwkJCQlzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciwKKwkJCQlzdHJ1Y3Qgd2xwX3V1aWQgKndzc2lkLCB1OCAqdGFnLAorCQkJCXN0cnVjdCB1d2JfbWFjX2FkZHIgKnZpcnRfYWRkcikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJaW50IHJlc3VsdCA9IDA7CisJY2hhciBidWZbV0xQX1dTU19VVUlEX1NUUlNJWkVdOworCXdscF93c3NfdXVpZF9wcmludChidWYsIHNpemVvZihidWYpLCB3c3NpZCk7CisJZF9mbnN0YXJ0KDUsIGRldiwgIndscCAlcCwgd3NzICVwLCB3c3NpZCAlcywgdGFnICV1LCB2aXJ0dWFsICIKKwkJICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggXG4iLCB3bHAsIHdzcywgYnVmLCAqdGFnLAorCQkgIHZpcnRfYWRkci0+ZGF0YVswXSwgdmlydF9hZGRyLT5kYXRhWzFdLCB2aXJ0X2FkZHItPmRhdGFbMl0sCisJCSAgdmlydF9hZGRyLT5kYXRhWzNdLCB2aXJ0X2FkZHItPmRhdGFbNF0sIHZpcnRfYWRkci0+ZGF0YVs1XSk7CisKKwlpZiAoIW1lbWNtcCh3c3NpZCwgJndzcy0+d3NzaWQsIHNpemVvZigqd3NzaWQpKSkgeworCQlkX3ByaW50Zig1LCBkZXYsICJXU1NJRCBmcm9tIG5laWdoYm9yIGZyYW1lIG1hdGNoZXMgbG9jYWwgIgorCQkJICJhY3RpdmUgV1NTLlxuIik7CisJCS8qIFVwZGF0ZSBFREEgY2FjaGUgKi8KKwkJcmVzdWx0ID0gd2xwX2VkYV91cGRhdGVfbm9kZSgmd2xwLT5lZGEsIGRldl9hZGRyLCB3c3MsCisJCQkJCSAgICAgKHZvaWQgKikgdmlydF9hZGRyLT5kYXRhLCAqdGFnLAorCQkJCQkgICAgIFdMUF9XU1NfQ09OTkVDVEVEKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIHVwZGF0ZSBFREEgY2FjaGUgIgorCQkJCSJ3aXRoIG5ldyBjb25uZWN0ZWQgbmVpZ2hib3IgaW5mb3JtYXRpb24uXG4iKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgIldMUDogTmVpZ2hib3IgZG9lcyBub3QgaGF2ZSBtYXRjaGluZyAiCisJCQkiV1NTSUQuXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisKKwlkX2ZuZW5kKDUsIGRldiwgIndscCAlcCwgd3NzICVwLCB3c3NpZCAlcywgdGFnICV1LCB2aXJ0dWFsICIKKwkJICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngsIHJlc3VsdCA9ICVkIFxuIiwKKwkJICB3bHAsIHdzcywgYnVmLCAqdGFnLAorCQkgIHZpcnRfYWRkci0+ZGF0YVswXSwgdmlydF9hZGRyLT5kYXRhWzFdLCB2aXJ0X2FkZHItPmRhdGFbMl0sCisJCSAgdmlydF9hZGRyLT5kYXRhWzNdLCB2aXJ0X2FkZHItPmRhdGFbNF0sIHZpcnRfYWRkci0+ZGF0YVs1XSwKKwkJICByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBDb25uZWN0IHRvIFdTUyBuZWlnaGJvcgorICoKKyAqIFVzZSBDMy9DNCBleGNoYW5nZSB0byBkZXRlcm1pbmUgaWYgbmVpZ2hib3IgaGFzIFdTUyBhY3RpdmF0ZWQgYW5kCisgKiByZXRyaWV2ZSB0aGUgV1NTIHRhZyBhbmQgdmlydHVhbCBFVUktNDggb2YgdGhlIG5laWdoYm9yLgorICovCitzdGF0aWMKK2ludCB3bHBfd3NzX2Nvbm5lY3RfbmVpZ2hib3Ioc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX3dzcyAqd3NzLAorCQkJICAgICBzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkcikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwljaGFyIGJ1ZltXTFBfV1NTX1VVSURfU1RSU0laRV07CisJc3RydWN0IHdscF91dWlkIHdzc2lkOworCXU4IHRhZzsKKwlzdHJ1Y3QgdXdiX21hY19hZGRyIHZpcnRfYWRkcjsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0aW9uKTsKKwlzdHJ1Y3Qgd2xwX3Nlc3Npb24gc2Vzc2lvbjsKKwlzdHJ1Y3Qgd2xwX2ZyYW1lX2Fzc29jICpyZXNwOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3bHBfd3NzX3V1aWRfcHJpbnQoYnVmLCBzaXplb2YoYnVmKSwgJndzcy0+d3NzaWQpOworCWRfZm5zdGFydCg1LCBkZXYsICJ3bHAgJXAsIHdzcyAlcCAod3NzaWQgJXMpLCBuZWlnaGJvciAlMDJ4OiUwMnggXG4iLAorCQkgIHdscCwgd3NzLCBidWYsIGRldl9hZGRyLT5kYXRhWzFdLCBkZXZfYWRkci0+ZGF0YVswXSk7CisJbXV0ZXhfbG9jaygmd2xwLT5tdXRleCk7CisJLyogU2VuZCBDMyBhc3NvY2lhdGlvbiBmcmFtZSAqLworCXJlc3VsdCA9IHdscF9zZW5kX2Fzc29jX2ZyYW1lKHdscCwgd3NzLCBkZXZfYWRkciwgV0xQX0FTU09DX0MzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBzZW5kIEMzIGZyYW1lIHRvIG5laWdoYm9yICIKKwkJCSIlMDJ4OiUwMnggKCVkKVxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCQlkZXZfYWRkci0+ZGF0YVswXSwgcmVzdWx0KTsKKwkJZ290byBvdXQ7CisJfQorCS8qIENyZWF0ZSBzZXNzaW9uLCB3YWl0IGZvciByZXNwb25zZSAqLworCXNlc3Npb24uZXhwX21lc3NhZ2UgPSBXTFBfQVNTT0NfQzQ7CisJc2Vzc2lvbi5jYiA9IHdscF9zZXNzaW9uX2NiOworCXNlc3Npb24uY2JfcHJpdiA9ICZjb21wbGV0aW9uOworCXNlc3Npb24ubmVpZ2hib3JfYWRkciA9ICpkZXZfYWRkcjsKKwlCVUdfT04od2xwLT5zZXNzaW9uICE9IE5VTEwpOworCXdscC0+c2Vzc2lvbiA9ICZzZXNzaW9uOworCS8qIFdhaXQgZm9yIEM0L0YwIGZyYW1lICovCisJcmVzdWx0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmNvbXBsZXRpb24sCisJCQkJCQkgICBXTFBfUEVSX01TR19USU1FT1VUICogSFopOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIlRpbWVvdXQgd2hpbGUgc2VuZGluZyBDMyB0byBuZWlnaGJvciAiCisJCQkgICAgICIlMDJ4OiUwMnguXG4iLCBkZXZfYWRkci0+ZGF0YVsxXSwKKwkJCSAgICAgZGV2X2FkZHItPmRhdGFbMF0pOworCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gc2VuZCBDMyB0byBuZWlnaGJvciAlMDJ4OiUwMnguXG4iLAorCQkJZGV2X2FkZHItPmRhdGFbMV0sIGRldl9hZGRyLT5kYXRhWzBdKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIFBhcnNlIG1lc3NhZ2UgaW4gc2Vzc2lvbi0+ZGF0YTogaXQgd2lsbCBiZSBlaXRoZXIgQzQgb3IgRjAgKi8KKwlza2IgPSBzZXNzaW9uLmRhdGE7CisJcmVzcCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlkX3ByaW50Zig1LCBkZXYsICJSZWNlaXZlZCByZXNwb25zZSB0byBDMyBmcmFtZS4gXG4iKTsKKwlkX2R1bXAoNSwgZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuID4gNzIgPyA3MiA6IHNrYi0+bGVuKTsKKwlpZiAocmVzcC0+dHlwZSA9PSBXTFBfQVNTT0NfRjApIHsKKwkJcmVzdWx0ID0gd2xwX3BhcnNlX2YwKHdscCwgc2tiKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlkZXZfZXJyKGRldiwgIldMUDogdW5hYmxlIHRvIHBhcnNlIGluY29taW5nIEYwICIKKwkJCQkiZnJhbWUgZnJvbSBuZWlnaGJvciAlMDJ4OiUwMnguXG4iLAorCQkJCWRldl9hZGRyLT5kYXRhWzFdLCBkZXZfYWRkci0+ZGF0YVswXSk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3JfcmVzcF9wYXJzZTsKKwl9CisJcmVzdWx0ID0gd2xwX3BhcnNlX2MzYzRfZnJhbWUod2xwLCBza2IsICZ3c3NpZCwgJnRhZywgJnZpcnRfYWRkcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBwYXJzZSBDNCBmcmFtZSBmcm9tIG5laWdoYm9yLlxuIik7CisJCWdvdG8gZXJyb3JfcmVzcF9wYXJzZTsKKwl9CisJcmVzdWx0ID0gd2xwX3dzc19hY3RpdmF0ZV9jb25uZWN0aW9uKHdscCwgd3NzLCBkZXZfYWRkciwgJndzc2lkLCAmdGFnLAorCQkJCQkgICAgICZ2aXJ0X2FkZHIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gYWN0aXZhdGUgY29ubmVjdGlvbiB0byAiCisJCQkibmVpZ2hib3IgJTAyeDolMDJ4LlxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCQlkZXZfYWRkci0+ZGF0YVswXSk7CisJCWdvdG8gZXJyb3JfcmVzcF9wYXJzZTsKKwl9CitlcnJvcl9yZXNwX3BhcnNlOgorCWtmcmVlX3NrYihza2IpOworb3V0OgorCS8qIFJlY29yZCB0aGF0IHdlIHVuc3VjY2Vzc2Z1bGx5IHRyaWVkIHRvIGNvbm5lY3QgdG8gdGhpcyBuZWlnaGJvciAqLworCWlmIChyZXN1bHQgPCAwKQorCQl3bHBfZWRhX3VwZGF0ZV9ub2RlX3N0YXRlKCZ3bHAtPmVkYSwgZGV2X2FkZHIsCisJCQkJCSAgV0xQX1dTU19DT05ORUNUX0ZBSUxFRCk7CisJd2xwLT5zZXNzaW9uID0gTlVMTDsKKwltdXRleF91bmxvY2soJndscC0+bXV0ZXgpOworCWRfZm5lbmQoNSwgZGV2LCAid2xwICVwLCB3c3MgJXAgKHdzc2lkICVzKSwgbmVpZ2hib3IgJTAyeDolMDJ4IFxuIiwKKwkJICB3bHAsIHdzcywgYnVmLCBkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ29ubmVjdCB0byBuZWlnaGJvciB3aXRoIGNvbW1vbiBXU1MsIHNlbmQgcGVuZGluZyBmcmFtZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgc2NoZWR1bGVkIHdoZW4gYSBmcmFtZSBpcyBkZXN0aW5lZCB0byBhIG5laWdoYm9yIHdpdGgKKyAqIHdoaWNoIHdlIGRvIG5vdCBoYXZlIGEgY29ubmVjdGlvbi4gQSBjb3B5IG9mIHRoZSBFREEgY2FjaGUgZW50cnkgaXMKKyAqIHByb3ZpZGVkIC0gbm90IHRoZSBhY3R1YWwgY2FjaGUgZW50cnkgKGJlY2F1c2UgaXQgaXMgcHJvdGVjdGVkIGJ5IGEKKyAqIHNwaW5sb2NrKS4KKyAqCisgKiBGaXJzdCBkZXRlcm1pbmUgaWYgbmVpZ2hib3IgaGFzIHRoZSBzYW1lIFdTUyBhY3RpdmF0ZWQsIGNvbm5lY3QgaWYgaXQKKyAqIGRvZXMuIFRoZSBDMy9DNCBleGNoYW5nZSBpcyBkdWFsIHB1cnBvc2UgdG8gZGV0ZXJtaW5lIGlmIG5laWdoYm9yIGhhcworICogV1NTIGFjdGl2YXRlZCBhbmQgcHJvY2VlZCB3aXRoIHRoZSBjb25uZWN0aW9uLgorICoKKyAqIFRoZSBmcmFtZSB0aGF0IHRyaWdnZXJlZCB0aGUgY29ubmVjdGlvbiBzZXR1cCBpcyBzZW50IGFmdGVyIGNvbm5lY3Rpb24KKyAqIHNldHVwLgorICoKKyAqIG5ldHdvcmsgcXVldWUgaXMgc3RvcHBlZCAtIHdlIG5lZWQgdG8gcmVzdGFydCB3aGVuIGRvbmUKKyAqCisgKi8KK3N0YXRpYwordm9pZCB3bHBfd3NzX2Nvbm5lY3Rfc2VuZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCXN0cnVjdCB3bHBfYXNzb2NfY29ubl9jdHggKmNvbm5fY3R4ID0gY29udGFpbmVyX29mKHdzLAorCQkJCQkJICBzdHJ1Y3Qgd2xwX2Fzc29jX2Nvbm5fY3R4LAorCQkJCQkJICB3cyk7CisJc3RydWN0IHdscCAqd2xwID0gY29ubl9jdHgtPndscDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY29ubl9jdHgtPnNrYjsKKwlzdHJ1Y3Qgd2xwX2VkYV9ub2RlICplZGFfZW50cnkgPSAmY29ubl9jdHgtPmVkYV9lbnRyeTsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciA9ICZlZGFfZW50cnktPmRldl9hZGRyOworCXN0cnVjdCB3bHBfd3NzICp3c3MgPSAmd2xwLT53c3M7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmd2xwLT5yYy0+dXdiX2Rldi5kZXY7CisJY2hhciBidWZbV0xQX1dTU19VVUlEX1NUUlNJWkVdOworCisJbXV0ZXhfbG9jaygmd3NzLT5tdXRleCk7CisJd2xwX3dzc191dWlkX3ByaW50KGJ1Ziwgc2l6ZW9mKGJ1ZiksICZ3c3MtPndzc2lkKTsKKwlkX2Zuc3RhcnQoNSwgZGV2LCAid2xwICVwLCB3c3MgJXAgKHdzc2lkICVzKSwgbmVpZ2hib3IgJTAyeDolMDJ4IFxuIiwKKwkJICB3bHAsIHdzcywgYnVmLCBkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCWlmICh3c3MtPnN0YXRlIDwgV0xQX1dTU19TVEFURV9BQ1RJVkUpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBBdHRlbXB0aW5nIHRvIGNvbm5lY3Qgd2l0aCAiCisJCQkJIldTUyB0aGF0IGlzIG5vdCBhY3RpdmUgb3IgY29ubmVjdGVkLlxuIik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIEVzdGFibGlzaCBjb25uZWN0aW9uIC0gc2VuZCBDMyByY3YgQzQgKi8KKwlyZXN1bHQgPSB3bHBfd3NzX2Nvbm5lY3RfbmVpZ2hib3Iod2xwLCB3c3MsIGRldl9hZGRyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBlc3RhYmxpc2ggY29ubmVjdGlvbiAiCisJCQkJIndpdGggbmVpZ2hib3IgJTAyeDolMDJ4LlxuIiwKKwkJCQlkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCWdvdG8gb3V0OworCX0KKwkvKiBFREEgZW50cnkgY2hhbmdlZCwgdXBkYXRlIHRoZSBsb2NhbCBjb3B5IGJlaW5nIHVzZWQgKi8KKwlyZXN1bHQgPSB3bHBfY29weV9lZGFfbm9kZSgmd2xwLT5lZGEsIGRldl9hZGRyLCBlZGFfZW50cnkpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKGRldiwgIldMUDogQ2Fubm90IGZpbmQgRURBIGVudHJ5IGZvciAiCisJCQkJIm5laWdoYm9yICUwMng6JTAyeCBcbiIsCisJCQkJZGV2X2FkZHItPmRhdGFbMV0sIGRldl9hZGRyLT5kYXRhWzBdKTsKKwl9CisJcmVzdWx0ID0gd2xwX3dzc19wcmVwX2hkcih3bHAsIGVkYV9lbnRyeSwgc2tiKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJXTFA6IFVuYWJsZSB0byBwcmVwYXJlIGZyYW1lIGhlYWRlciBmb3IgIgorCQkJCSJ0cmFuc21pc3Npb24gKG5laWdoYm9yICUwMng6JTAyeCkuIFxuIiwKKwkJCQlkZXZfYWRkci0+ZGF0YVsxXSwgZGV2X2FkZHItPmRhdGFbMF0pOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCWdvdG8gb3V0OworCX0KKwlCVUdfT04od2xwLT54bWl0X2ZyYW1lID09IE5VTEwpOworCXJlc3VsdCA9IHdscC0+eG1pdF9mcmFtZSh3bHAsIHNrYiwgZGV2X2FkZHIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKGRldiwgIldMUDogVW5hYmxlIHRvIHRyYW5zbWl0IGZyYW1lOiAlZFxuIiwKKwkJCQlyZXN1bHQpOworCQlpZiAocmVzdWx0ID09IC1FTlhJTykKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBJcyBuZXR3b3JrIGludGVyZmFjZSB1cD8gXG4iKTsKKwkJLyogV2UgY291bGQgdHJ5IGFnYWluIC4uLiAqLworCQlkZXZfa2ZyZWVfc2tiKHNrYik7Lyp3ZSBuZWVkIHRvIGZyZWUgaWYgdHggZmFpbHMgKi8KKwl9CitvdXQ6CisJa2ZyZWUoY29ubl9jdHgpOworCUJVR19PTih3bHAtPnN0YXJ0X3F1ZXVlID09IE5VTEwpOworCXdscC0+c3RhcnRfcXVldWUod2xwKTsKKwltdXRleF91bmxvY2soJndzcy0+bXV0ZXgpOworCWRfZm5lbmQoNSwgZGV2LCAid2xwICVwLCB3c3MgJXAgKHdzc2lkICVzKVxuIiwgd2xwLCB3c3MsIGJ1Zik7Cit9CisKKy8qKgorICogQWRkIFdMUCBoZWFkZXIgdG8gb3V0Z29pbmcgc2tiCisgKgorICogQGVkYV9lbnRyeTogcG9pbnRlciB0byBuZWlnaGJvcidzIGVudHJ5IGluIHRoZSBFREEgY2FjaGUKKyAqIEBfc2tiOiAgICAgIHNrYiBjb250YWluaW5nIGRhdGEgZGVzdGluZWQgdG8gdGhlIG5laWdoYm9yCisgKi8KK2ludCB3bHBfd3NzX3ByZXBfaGRyKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF9lZGFfbm9kZSAqZWRhX2VudHJ5LAorCQkgICAgIHZvaWQgKl9za2IpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGNoYXIgKmV0aF9hZGRyID0gZWRhX2VudHJ5LT5ldGhfYWRkcjsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyICpkZXZfYWRkciA9ICZlZGFfZW50cnktPmRldl9hZGRyOworCXN0cnVjdCBza19idWZmICpza2IgPSBfc2tiOworCXN0cnVjdCB3bHBfZnJhbWVfc3RkX2FiYnJ2X2hkciAqc3RkX2hkcjsKKworCWRfZm5zdGFydCg2LCBkZXYsICJ3bHAgJXAgXG4iLCB3bHApOworCWlmIChlZGFfZW50cnktPnN0YXRlID09IFdMUF9XU1NfQ09OTkVDVEVEKSB7CisJCS8qIEFkZCBXTFAgaGVhZGVyICovCisJCUJVR19PTihza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZigqc3RkX2hkcikpOworCQlzdGRfaGRyID0gKHZvaWQgKikgX19za2JfcHVzaChza2IsIHNpemVvZigqc3RkX2hkcikpOworCQlzdGRfaGRyLT5oZHIubXV4X2hkciA9IGNwdV90b19sZTE2KFdMUF9QUk9UT0NPTF9JRCk7CisJCXN0ZF9oZHItPmhkci50eXBlID0gV0xQX0ZSQU1FX1NUQU5EQVJEOworCQlzdGRfaGRyLT50YWcgPSBlZGFfZW50cnktPndzcy0+dGFnOworCX0gZWxzZSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKGRldiwgIldMUDogRGVzdGluYXRpb24gbmVpZ2hib3IgKEV0aGVybmV0OiAiCisJCQkJIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LCBEZXY6ICIKKwkJCQkiJTAyeDolMDJ4KSBpcyBub3QgY29ubmVjdGVkLiBcbiIsIGV0aF9hZGRyWzBdLAorCQkJCWV0aF9hZGRyWzFdLCBldGhfYWRkclsyXSwgZXRoX2FkZHJbM10sCisJCQkJZXRoX2FkZHJbNF0sIGV0aF9hZGRyWzVdLCBkZXZfYWRkci0+ZGF0YVsxXSwKKwkJCQlkZXZfYWRkci0+ZGF0YVswXSk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfQorCWRfZm5lbmQoNiwgZGV2LCAid2xwICVwIFxuIiwgd2xwKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogUHJlcGFyZSBza2IgZm9yIG5laWdoYm9yOiBjb25uZWN0IGlmIG5vdCBhbHJlYWR5IGFuZCBwcmVwIFdMUCBoZWFkZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgYnV0IGl0IG5lZWRzIHRvIHNsZWVwLiBXZQorICogdGVtcG9yYXJpbHkgc3RvcCB0aGUgbmV0IHF1ZXVlIHRvIGVzdGFibGlzaCB0aGUgV0xQIGNvbm5lY3Rpb24uCisgKiBTZXR1cCBvZiB0aGUgV0xQIGNvbm5lY3Rpb24gYW5kIHJlc3RhcnQgb2YgcXVldWUgaXMgc2NoZWR1bGVkCisgKiBvbiB0aGUgZGVmYXVsdCB3b3JrIHF1ZXVlLgorICoKKyAqIHJ1biB3aXRoIGVkYS0+bG9jayBoZWxkIChzcGlubG9jaykKKyAqLworaW50IHdscF93c3NfY29ubmVjdF9wcmVwKHN0cnVjdCB3bHAgKndscCwgc3RydWN0IHdscF9lZGFfbm9kZSAqZWRhX2VudHJ5LAorCQkJIHZvaWQgKl9za2IpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldl9hZGRyID0gJmVkYV9lbnRyeS0+ZGV2X2FkZHI7CisJdW5zaWduZWQgY2hhciAqZXRoX2FkZHIgPSBlZGFfZW50cnktPmV0aF9hZGRyOworCXN0cnVjdCBza19idWZmICpza2IgPSBfc2tiOworCXN0cnVjdCB3bHBfYXNzb2NfY29ubl9jdHggKmNvbm5fY3R4OworCisJZF9mbnN0YXJ0KDUsIGRldiwgIndscCAlcFxuIiwgd2xwKTsKKwlkX3ByaW50Zig1LCBkZXYsICJUbyBuZWlnaGJvciAlMDJ4OiUwMnggd2l0aCBldGggIgorCQkgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCSAgZGV2X2FkZHItPmRhdGFbMF0sIGV0aF9hZGRyWzBdLCBldGhfYWRkclsxXSwgZXRoX2FkZHJbMl0sCisJCSAgZXRoX2FkZHJbM10sIGV0aF9hZGRyWzRdLCBldGhfYWRkcls1XSk7CisJaWYgKGVkYV9lbnRyeS0+c3RhdGUgPT0gV0xQX1dTU19VTkNPTk5FQ1RFRCkgeworCQkvKiBXZSBkb24ndCB3YW50IGFueSBtb3JlIHBhY2tldHMgd2hpbGUgd2Ugc2V0IHVwIGNvbm5lY3Rpb24gKi8KKwkJQlVHX09OKHdscC0+c3RvcF9xdWV1ZSA9PSBOVUxMKTsKKwkJd2xwLT5zdG9wX3F1ZXVlKHdscCk7CisJCWNvbm5fY3R4ID0ga21hbGxvYyhzaXplb2YoKmNvbm5fY3R4KSwgR0ZQX0FUT01JQyk7CisJCWlmIChjb25uX2N0eCA9PSBOVUxMKSB7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5ICIKKwkJCQkJImZvciBjb25uZWN0aW9uIGhhbmRsaW5nLlxuIik7CisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJY29ubl9jdHgtPndscCA9IHdscDsKKwkJY29ubl9jdHgtPnNrYiA9IHNrYjsKKwkJY29ubl9jdHgtPmVkYV9lbnRyeSA9ICplZGFfZW50cnk7CisJCUlOSVRfV09SSygmY29ubl9jdHgtPndzLCB3bHBfd3NzX2Nvbm5lY3Rfc2VuZCk7CisJCXNjaGVkdWxlX3dvcmsoJmNvbm5fY3R4LT53cyk7CisJCXJlc3VsdCA9IDE7CisJfSBlbHNlIGlmIChlZGFfZW50cnktPnN0YXRlID09IFdMUF9XU1NfQ09OTkVDVF9GQUlMRUQpIHsKKwkJLyogUHJldmlvdXMgY29ubmVjdGlvbiBhdHRlbXB0cyBmYWlsZWQsIGRvbid0IHJldHJ5IC0gc2VlCisJCSAqIGNvbmRpdGlvbnMgZm9yIGNvbm5lY3Rpb24gaW4gV0xQIDAuOTkgWzcuNi4yXSAqLworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgY29ubmVjdCB0byBuZWlnaGJvciAiCisJCQkgInByZXZpb3VzbHkuIE5vdCByZXRyeWluZy4gXG4iKTsKKwkJcmVzdWx0ID0gLUVOT05FVDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsgLyogZWRhX2VudHJ5LT5zdGF0ZSA9PSBXTFBfV1NTX0NPTk5FQ1RFRCAqLworCQlkX3ByaW50Zig1LCBkZXYsICJOZWlnaGJvciBpcyBjb25uZWN0ZWQsIHByZXBhcmluZyBmcmFtZS5cbiIpOworCQlyZXN1bHQgPSB3bHBfd3NzX3ByZXBfaGRyKHdscCwgZWRhX2VudHJ5LCBza2IpOworCX0KK291dDoKKwlkX2ZuZW5kKDUsIGRldiwgIndscCAlcCwgcmVzdWx0ID0gJWQgXG4iLCB3bHAsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBFbXVsYXRlIGJyb2FkY2FzdDogY29weSBza2IsIHNlbmQgY29weSB0byBuZWlnaGJvciAoY29ubmVjdCBpZiBub3QgYWxyZWFkeSkKKyAqCisgKiBXZSBuZWVkIHRvIGNvcHkgc2ticyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBlbXVsYXRlIGJyb2FkY2FzdCB0aHJvdWdoCisgKiB1bmljYXN0LiBXZSBjb3B5IGluc3RlYWQgb2YgY2xvbmUgYmVjYXVzZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBkYXRhIG9mCisgKiB0aGUgZnJhbWUgYWZ0ZXIgY29weWluZyAuLi4gY2xvbmVzIHNoYXJlIGRhdGEgc28gd2UgY2Fubm90IGVtdWxhdGUKKyAqIGJyb2FkY2FzdCB1c2luZyBjbG9uZXMuCisgKgorICogcnVuIHdpdGggZWRhLT5sb2NrIGhlbGQgKHNwaW5sb2NrKQorICovCitpbnQgd2xwX3dzc19zZW5kX2NvcHkoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX2VkYV9ub2RlICplZGFfZW50cnksCisJCSAgICAgIHZvaWQgKl9za2IpCit7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCXN0cnVjdCBza19idWZmICpza2IgPSBfc2tiOworCXN0cnVjdCBza19idWZmICpjb3B5OworCXN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldl9hZGRyID0gJmVkYV9lbnRyeS0+ZGV2X2FkZHI7CisKKwlkX2Zuc3RhcnQoNSwgZGV2LCAidG8gbmVpZ2hib3IgJTAyeDolMDJ4LCBza2IgKCVwKSBcbiIsCisJCSAgZGV2X2FkZHItPmRhdGFbMV0sIGRldl9hZGRyLT5kYXRhWzBdLCBza2IpOworCWNvcHkgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCWlmIChjb3B5ID09IE5VTEwpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gY29weSBza2IgZm9yICIKKwkJCQkidHJhbnNtaXNzaW9uLlxuIik7CisJCWdvdG8gb3V0OworCX0KKwlyZXN1bHQgPSB3bHBfd3NzX2Nvbm5lY3RfcHJlcCh3bHAsIGVkYV9lbnRyeSwgY29weSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gY29ubmVjdC9zZW5kIHNrYiAiCisJCQkJInRvIG5laWdoYm9yLlxuIik7CisJCWRldl9rZnJlZV9za2JfaXJxKGNvcHkpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKQorCQkvKiBGcmFtZSB3aWxsIGJlIHRyYW5zbWl0dGVkIHNlcGFyYXRlbHkgKi8KKwkJZ290byBvdXQ7CisJQlVHX09OKHdscC0+eG1pdF9mcmFtZSA9PSBOVUxMKTsKKwlyZXN1bHQgPSB3bHAtPnhtaXRfZnJhbWUod2xwLCBjb3B5LCBkZXZfYWRkcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoZGV2LCAiV0xQOiBVbmFibGUgdG8gdHJhbnNtaXQgZnJhbWU6ICVkXG4iLAorCQkJCXJlc3VsdCk7CisJCWlmICgocmVzdWx0ID09IC1FTlhJTykgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycihkZXYsICJXTFA6IElzIG5ldHdvcmsgaW50ZXJmYWNlIHVwPyBcbiIpOworCQkvKiBXZSBjb3VsZCB0cnkgYWdhaW4gLi4uICovCisJCWRldl9rZnJlZV9za2JfaXJxKGNvcHkpOy8qd2UgbmVlZCB0byBmcmVlIGlmIHR4IGZhaWxzICovCisJfQorb3V0OgorCWRfZm5lbmQoNSwgZGV2LCAidG8gbmVpZ2hib3IgJTAyeDolMDJ4IFxuIiwgZGV2X2FkZHItPmRhdGFbMV0sCisJCSAgZGV2X2FkZHItPmRhdGFbMF0pOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBTZXR1cCBXU1MKKyAqCisgKiBTaG91bGQgYmUgY2FsbGVkIGJ5IG5ldHdvcmsgZHJpdmVyIGFmdGVyIHRoZSBpbnRlcmZhY2UgaGFzIGJlZW4gZ2l2ZW4gYQorICogTUFDIGFkZHJlc3MuCisgKi8KK2ludCB3bHBfd3NzX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBzdHJ1Y3Qgd2xwX3dzcyAqd3NzKQoreworCXN0cnVjdCB3bHAgKndscCA9IGNvbnRhaW5lcl9vZih3c3MsIHN0cnVjdCB3bHAsIHdzcyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJndscC0+cmMtPnV3Yl9kZXYuZGV2OworCWludCByZXN1bHQgPSAwOworCWRfZm5zdGFydCg1LCBkZXYsICJ3c3MgKCVwKSBcbiIsIHdzcyk7CisJbXV0ZXhfbG9jaygmd3NzLT5tdXRleCk7CisJd3NzLT5rb2JqLnBhcmVudCA9ICZuZXRfZGV2LT5kZXYua29iajsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0X2Rldi0+ZGV2X2FkZHIpKSB7CisJCWRldl9lcnIoZGV2LCAiV0xQOiBJbnZhbGlkIE1BQyBhZGRyZXNzLiBDYW5ub3QgdXNlIGZvciIKKwkJICAgICAgICJ2aXJ0dWFsLlxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwltZW1jcHkod3NzLT52aXJ0dWFsX2FkZHIuZGF0YSwgbmV0X2Rldi0+ZGV2X2FkZHIsCisJICAgICAgIHNpemVvZih3c3MtPnZpcnR1YWxfYWRkci5kYXRhKSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3c3MtPm11dGV4KTsKKwlkX2ZuZW5kKDUsIGRldiwgIndzcyAoJXApIFxuIiwgd3NzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod2xwX3dzc19zZXR1cCk7CisKKy8qKgorICogUmVtb3ZlIFdTUworICoKKyAqIENhbGxlZCBieSBjbGllbnQgdGhhdCBjb25maWd1cmVkIFdTUyB0aHJvdWdoIHdscF93c3Nfc2V0dXAoKS4gVGhpcworICogZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gY2xpZW50IG5vIGxvbmdlciBuZWVkcyBXU1MsIGVnLiBjbGllbnQgc2h1dHMKKyAqIGRvd24uCisgKgorICogV2UgcmVtb3ZlIHRoZSBXTFAgSUUgZnJvbSB0aGUgYmVhY29uIGJlZm9yZSBpbml0aWF0aW5nIGxvY2FsIGNsZWFudXAuCisgKi8KK3ZvaWQgd2xwX3dzc19yZW1vdmUoc3RydWN0IHdscF93c3MgKndzcykKK3sKKwlzdHJ1Y3Qgd2xwICp3bHAgPSBjb250YWluZXJfb2Yod3NzLCBzdHJ1Y3Qgd2xwLCB3c3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3bHAtPnJjLT51d2JfZGV2LmRldjsKKwlkX2Zuc3RhcnQoNSwgZGV2LCAid3NzICglcCkgXG4iLCB3c3MpOworCW11dGV4X2xvY2soJndzcy0+bXV0ZXgpOworCWlmICh3c3MtPnN0YXRlID09IFdMUF9XU1NfU1RBVEVfQUNUSVZFKQorCQl1d2JfcmNfaWVfcm0od2xwLT5yYywgVVdCX0lFX1dMUCk7CisJaWYgKHdzcy0+c3RhdGUgIT0gV0xQX1dTU19TVEFURV9OT05FKSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmd3NzLT5rb2JqLCAmd3NzX2F0dHJfZ3JvdXApOworCQlrb2JqZWN0X3B1dCgmd3NzLT5rb2JqKTsKKwl9CisJd3NzLT5rb2JqLnBhcmVudCA9IE5VTEw7CisJbWVtc2V0KCZ3c3MtPnZpcnR1YWxfYWRkciwgMCwgc2l6ZW9mKHdzcy0+dmlydHVhbF9hZGRyKSk7CisJLyogQ2xlYW51cCBFREEgY2FjaGUgKi8KKwl3bHBfZWRhX3JlbGVhc2UoJndscC0+ZWRhKTsKKwl3bHBfZWRhX2luaXQoJndscC0+ZWRhKTsKKwltdXRleF91bmxvY2soJndzcy0+bXV0ZXgpOworCWRfZm5lbmQoNSwgZGV2LCAid3NzICglcCkgXG4iLCB3c3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod2xwX3dzc19yZW1vdmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggYzcyYTEzNS4uNGE0ZGQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC03NSw2ICs3NSwxNSBAQAogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBwbGF0Zm9ybS1kZXZpY2UgcmVnaXN0ZXJlZCBMQ0QgcG93ZXIKIAkgIGNvbnRyb2wgaW50ZXJmYWNlLgogCitjb25maWcgTENEX1RPU0EKKwl0cmlzdGF0ZSAiU2hhcnAgU0wtNjAwMCBMQ0QgRHJpdmVyIgorCWRlcGVuZHMgb24gTENEX0NMQVNTX0RFVklDRSAmJiBTUEkKKwlkZXBlbmRzIG9uIE1BQ0hfVE9TQQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGFuIFNoYXJwIFNMLTYwMDAgWmF1cnVzIHNheSBZIHRvIGVuYWJsZSBhIGRyaXZlcgorCSAgZm9yIGl0cyBMQ0QuCisKICMKICMgQmFja2xpZ2h0CiAjCkBAIC0xMTUsNyArMTI0LDcgQEAKIAkgIGNhbGxlZCBhdG1lbC1wd20tYmwuCiAKIGNvbmZpZyBCQUNLTElHSFRfQ09SR0kKLQl0cmlzdGF0ZSAiR2VuZXJpYyAoYWthIFNoYXJwIENvcmdpKSBCYWNrbGlnaHQgRHJpdmVyIgorCXRyaXN0YXRlICJHZW5lcmljIChha2EgU2hhcnAgQ29yZ2kpIEJhY2tsaWdodCBEcml2ZXIgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlZmF1bHQgbgogCWhlbHAKQEAgLTEyMyw2ICsxMzIsOSBAQAogCSAga25vd24gYXMgdGhlIENvcmdpIGJhY2tsaWdodCBkcml2ZXIuIElmIHlvdSBoYXZlIGEgU2hhcnAgWmF1cnVzCiAJICBTTC1DN3h4LCBTTC1DeHgwMCBvciBTTC02MDAweCBzYXkgeS4gTW9zdCB1c2VycyBjYW4gc2F5IG4uCiAKKwkgIE5vdGU6IHRoaXMgZHJpdmVyIGlzIG1hcmtlZCBhcyBkZXByZWNhdGVkLCB0cnkgZW5hYmxlIFNQSSBhbmQKKwkgIHVzZSB0aGUgbmV3IGNvcmdpX2xjZCBkcml2ZXIgd2l0aCBpbnRlZ3JhdGVkIGJhY2tsaWdodCBjb250cm9sCisKIGNvbmZpZyBCQUNLTElHSFRfTE9DT01PCiAJdHJpc3RhdGUgIlNoYXJwIExPQ09NTyBMQ0QvQmFja2xpZ2h0IERyaXZlciIKIAlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgU0hBUlBfTE9DT01PCkBAIC0xNzEsNiArMTgzLDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgYWRqdXN0YWJsZSBieSBQV00sIHNheSBZIHRvIGVuYWJsZQogCSAgdGhpcyBkcml2ZXIuCiAKK2NvbmZpZyBCQUNLTElHSFRfREE5MDNYCisJdHJpc3RhdGUgIkJhY2tsaWdodCBEcml2ZXIgZm9yIERBOTAzMC9EQTkwMzQgdXNpbmcgV0xFRCIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgUE1JQ19EQTkwM1gKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgY29ubmVjdGVkIHRvIHRoZSBXTEVEIG91dHB1dCBvZiBEQTkwMzAKKwkgIG9yIERBOTAzNCBXTEVEIG91dHB1dCwgc2F5IFkgaGVyZSB0byBlbmFibGUgdGhpcyBkcml2ZXIuCisKIGNvbmZpZyBCQUNLTElHSFRfTUJQX05WSURJQQogICAgICAgIHRyaXN0YXRlICJNYWNCb29rIFBybyBOdmlkaWEgQmFja2xpZ2h0IERyaXZlciIKICAgICAgICBkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgWDg2CkBAIC0xNzksMyArMTk4LDE5IEBACiAgICAgICAgICBJZiB5b3UgaGF2ZSBhbiBBcHBsZSBNYWNib29rIFBybyB3aXRoIE52aWRpYSBncmFwaGljcyBoYXJkd2FyZSBzYXkgWQogCSB0byBlbmFibGUgYSBkcml2ZXIgZm9yIGl0cyBiYWNrbGlnaHQKIAorY29uZmlnIEJBQ0tMSUdIVF9UT1NBCisJdHJpc3RhdGUgIlNoYXJwIFNMLTYwMDAgQmFja2xpZ2h0IERyaXZlciIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgSTJDCisJZGVwZW5kcyBvbiBNQUNIX1RPU0EgJiYgTENEX1RPU0EKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhbiBTaGFycCBTTC02MDAwIFphdXJ1cyBzYXkgWSB0byBlbmFibGUgYSBkcml2ZXIKKwkgIGZvciBpdHMgYmFja2xpZ2h0CisKK2NvbmZpZyBCQUNLTElHSFRfU0FIQVJBCisJdHJpc3RhdGUgIlRhYmxldGtpb3NrIFNhaGFyYSBUb3VjaC1pVCBCYWNrbGlnaHQgRHJpdmVyIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBYODYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIFRhYmxldGtpb3NrIFNhaGFyYSBUb3VjaC1pVCwgc2F5IHkgdG8gZW5hYmxlIHRoZQorCSAgYmFja2xpZ2h0IGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKaW5kZXggM2VjNTUxZS4uMTAzNDI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfTENEX1BMQVRGT1JNKQkgICArPSBwbGF0Zm9ybV9sY2Qubwogb2JqLSQoQ09ORklHX0xDRF9WR0cyNDMyQTQpCSAgICs9IHZnZzI0MzJhNC5vCiBvYmotJChDT05GSUdfTENEX1RETzI0TSkJICAgKz0gdGRvMjRtLm8KK29iai0kKENPTkZJR19MQ0RfVE9TQSkJCSAgICs9IHRvc2FfbGNkLm8KIAogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UpICs9IGJhY2tsaWdodC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0FUTUVMX1BXTSkgICAgKz0gYXRtZWwtcHdtLWJsLm8KQEAgLTE3LDUgKzE4LDggQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfUFJPR0VBUikgKz0gcHJvZ2Vhcl9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0NBUklMTE9fUkFOQ0gpICs9IGNyX2JsbGNkLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfUFdNKQkrPSBwd21fYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9EQTkwM1gpCSs9IGRhOTAzeC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX01CUF9OVklESUEpICs9IG1icF9udmlkaWFfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9UT1NBKQkrPSB0b3NhX2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfU0FIQVJBKQkrPSBrYjM4ODZfYmwubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3guYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MmMzODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3guYwpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIEJhY2tsaWdodCBkcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIsIEx0ZC4KKyAqIAlNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2RhOTAzeC5oPgorCisjZGVmaW5lIERBOTAzMF9XTEVEX0NPTlRST0wJMHgyNQorI2RlZmluZSBEQTkwMzBfV0xFRF9DUF9FTgkoMSA8PCA2KQorI2RlZmluZSBEQTkwMzBfV0xFRF9UUklNKHgpCSgoeCkgJiAweDcpCisKKyNkZWZpbmUgREE5MDM0X1dMRURfQ09OVFJPTDEJMHgzQworI2RlZmluZSBEQTkwMzRfV0xFRF9DT05UUk9MMgkweDNECisKKyNkZWZpbmUgREE5MDM0X1dMRURfQk9PU1RfRU4JKDEgPDwgNSkKKworI2RlZmluZSBEQTkwMzBfTUFYX0JSSUdIVE5FU1MJNworI2RlZmluZSBEQTkwMzRfTUFYX0JSSUdIVE5FU1MJMHg3ZgorCitzdHJ1Y3QgZGE5MDN4X2JhY2tsaWdodF9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpkYTkwM3hfZGV2OworCWludCBpZDsKKwlpbnQgY3VycmVudF9icmlnaHRuZXNzOworfTsKKworc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3NldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBkYTkwM3hfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YS0+ZGE5MDN4X2RldjsKKwl1aW50OF90IHZhbDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoZGF0YS0+aWQpIHsKKwljYXNlIERBOTAzNF9JRF9XTEVEOgorCQlyZXQgPSBkYTkwM3hfdXBkYXRlKGRldiwgREE5MDM0X1dMRURfQ09OVFJPTDEsCisJCQkJYnJpZ2h0bmVzcywgMHg3Zik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcyA9PSAwKQorCQkJcmV0ID0gZGE5MDN4X2Nscl9iaXRzKGRldiwKKwkJCQkJREE5MDM0X1dMRURfQ09OVFJPTDIsCisJCQkJCURBOTAzNF9XTEVEX0JPT1NUX0VOKTsKKworCQlpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDAgJiYgYnJpZ2h0bmVzcykKKwkJCXJldCA9IGRhOTAzeF9zZXRfYml0cyhkZXYsCisJCQkJCURBOTAzNF9XTEVEX0NPTlRST0wyLAorCQkJCQlEQTkwMzRfV0xFRF9CT09TVF9FTik7CisJCWJyZWFrOworCWNhc2UgREE5MDMwX0lEX1dMRUQ6CisJCXZhbCA9IERBOTAzMF9XTEVEX1RSSU0oYnJpZ2h0bmVzcyk7CisJCXZhbCB8PSBicmlnaHRuZXNzID8gREE5MDMwX1dMRURfQ1BfRU4gOiAwOworCQlyZXQgPSBkYTkwM3hfd3JpdGUoZGV2LCBEQTkwMzBfV0xFRF9DT05UUk9MLCB2YWwpOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCWludCBicmlnaHRuZXNzID0gYmwtPnByb3BzLmJyaWdodG5lc3M7CisKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBkYTkwM3hfYmFja2xpZ2h0X3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGRhOTAzeF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlyZXR1cm4gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgZGE5MDN4X2JhY2tsaWdodF9vcHMgPSB7CisJLnVwZGF0ZV9zdGF0dXMJPSBkYTkwM3hfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzCT0gZGE5MDN4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKK307CisKK3N0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYTkwM3hfYmFja2xpZ2h0X2RhdGEgKmRhdGE7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOworCWludCBtYXhfYnJpZ2h0bmVzczsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgREE5MDMwX0lEX1dMRUQ6CisJCW1heF9icmlnaHRuZXNzID0gREE5MDMwX01BWF9CUklHSFRORVNTOworCQlicmVhazsKKwljYXNlIERBOTAzNF9JRF9XTEVEOgorCQltYXhfYnJpZ2h0bmVzcyA9IERBOTAzNF9NQVhfQlJJR0hUTkVTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBiYWNrbGlnaHQgZGV2aWNlIElEKCVkKVxuIiwKKwkJCQlwZGV2LT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGF0YS0+ZGE5MDN4X2RldiA9IHBkZXYtPmRldi5wYXJlbnQ7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKworCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCBkYXRhLT5kYTkwM3hfZGV2LAorCQkJZGF0YSwgJmRhOTAzeF9iYWNrbGlnaHRfb3BzKTsKKwlpZiAoSVNfRVJSKGJsKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmwpOworCX0KKworCWJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNzOworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0gbWF4X2JyaWdodG5lc3M7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibCk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRhOTAzeF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlyZXR1cm4gZGE5MDN4X2JhY2tsaWdodF9zZXQoYmwsIDApOworfQorCitzdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQJTlVMTAorI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZQkJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhOTAzeF9iYWNrbGlnaHRfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJkYTkwM3gtYmFja2xpZ2h0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gZGE5MDN4X2JhY2tsaWdodF9wcm9iZSwKKwkucmVtb3ZlCQk9IGRhOTAzeF9iYWNrbGlnaHRfcmVtb3ZlLAorCS5zdXNwZW5kCT0gZGE5MDN4X2JhY2tsaWdodF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYTkwM3hfYmFja2xpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkYTkwM3hfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChkYTkwM3hfYmFja2xpZ2h0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGE5MDN4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhOTAzeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRhOTAzeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQmFja2xpZ2h0IERyaXZlciBmb3IgRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDMwL0RBOTAzNCIpOworTU9EVUxFX0FVVEhPUigiRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+IgorCSAgICAgICJNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkYTkwM3gtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwppbmRleCA2ZmEwYjlkLi5kNGNmZWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KIAogI2luY2x1ZGUgPGNwdS9kYWMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KIAogI2RlZmluZSBIUDY4MF9NQVhfSU5URU5TSVRZIDI1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQva2IzODg2X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzhmZGExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQva2IzODg2X2JsLmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiAgQmFja2xpZ2h0IERyaXZlciBmb3IgdGhlIEtCMzg4NiBCYWNrbGlnaHQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQ2xhdWRpbyBOaWVkZXIKKyAqCisgKiAgQmFzZWQgb24gY29yZ2lfYmwuYyBieSBSaWNoYXJkIFB1cmRpZSBhbmQga2IzODg2IGRyaXZlciBieSBSb2JlcnQgV29lcmxlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKworI2RlZmluZSBLQjM4ODZfUEFSRU5UIDB4NjQKKyNkZWZpbmUgS0IzODg2X0lPIDB4NjAKKyNkZWZpbmUgS0IzODg2X0FEQ19EQUNfUFdNIDB4QzQKKyNkZWZpbmUgS0IzODg2X1BXTTBfV1JJVEUgMHg4MQorI2RlZmluZSBLQjM4ODZfUFdNMF9SRUFEIDB4NDEKKworc3RhdGljIERFRklORV9NVVRFWChibF9tdXRleCk7CisKK3N0YXRpYyB2b2lkIGtiMzg4Nl9ibF9zZXRfaW50ZW5zaXR5KGludCBpbnRlbnNpdHkpCit7CisJbXV0ZXhfbG9jaygmYmxfbXV0ZXgpOworCWludGVuc2l0eSA9IGludGVuc2l0eSYweGZmOworCW91dGIoS0IzODg2X0FEQ19EQUNfUFdNLCBLQjM4ODZfUEFSRU5UKTsKKwltc2xlZXAoMTApOworCW91dGIoS0IzODg2X1BXTTBfV1JJVEUsIEtCMzg4Nl9JTyk7CisJbXNsZWVwKDEwKTsKKwlvdXRiKGludGVuc2l0eSwgS0IzODg2X0lPKTsKKwltdXRleF91bmxvY2soJmJsX211dGV4KTsKK30KKworc3RydWN0IGtiMzg4NmJsX21hY2hpbmZvIHsKKwlpbnQgbWF4X2ludGVuc2l0eTsKKwlpbnQgZGVmYXVsdF9pbnRlbnNpdHk7CisJaW50IGxpbWl0X21hc2s7CisJdm9pZCAoKnNldF9ibF9pbnRlbnNpdHkpKGludCBpbnRlbnNpdHkpOworfTsKKworc3RhdGljIHN0cnVjdCBrYjM4ODZibF9tYWNoaW5mbyBrYjM4ODZfYmxfbWFjaGluZm8gPSB7CisJLm1heF9pbnRlbnNpdHkgPSAweGZmLAorCS5kZWZhdWx0X2ludGVuc2l0eSA9IDB4YTAsCisJLmxpbWl0X21hc2sgPSAweDdmLAorCS5zZXRfYmxfaW50ZW5zaXR5ID0ga2IzODg2X2JsX3NldF9pbnRlbnNpdHksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrYjM4ODZibF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImtiMzg4Ni1ibCIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmtiMzg4Nl9ibF9tYWNoaW5mbywKKwl9LAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkma2IzODg2YmxfZGV2aWNlLAorfTsKKworLyoKKyAqIEJhY2sgdG8gZHJpdmVyCisgKi8KKworc3RhdGljIGludCBrYjM4ODZibF9pbnRlbnNpdHk7CitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlOworc3RhdGljIHN0cnVjdCBrYjM4ODZibF9tYWNoaW5mbyAqYmxfbWFjaGluZm87CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtiMzg4NmJsX2ZsYWdzOworI2RlZmluZSBLQjM4ODZCTF9TVVNQRU5ERUQgICAgIDB4MDEKKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEga2IzODg2YmxfZGV2aWNlX3RhYmxlW10gPSB7CisJeworCQkuaWRlbnQgPSAiU2FoYXJhIFRvdWNoLWlUIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTRFYiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiaVRvdWNoIFQyMDEiKSwKKwkJfSwKKwl9LAorCXsgfQorfTsKKworc3RhdGljIGludCBrYjM4ODZibF9zZW5kX2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJaW50IGludGVuc2l0eSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOworCisJaWYgKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlpbnRlbnNpdHkgPSAwOworCWlmIChiZC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJaW50ZW5zaXR5ID0gMDsKKwlpZiAoa2IzODg2YmxfZmxhZ3MgJiBLQjM4ODZCTF9TVVNQRU5ERUQpCisJCWludGVuc2l0eSA9IDA7CisKKwlibF9tYWNoaW5mby0+c2V0X2JsX2ludGVuc2l0eShpbnRlbnNpdHkpOworCisJa2IzODg2YmxfaW50ZW5zaXR5ID0gaW50ZW5zaXR5OworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGtiMzg4NmJsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJa2IzODg2YmxfZmxhZ3MgfD0gS0IzODg2QkxfU1VTUEVOREVEOworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrYjM4ODZibF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWtiMzg4NmJsX2ZsYWdzICY9IH5LQjM4ODZCTF9TVVNQRU5ERUQ7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmQpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUga2IzODg2Ymxfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGtiMzg4NmJsX3Jlc3VtZQkJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQga2IzODg2YmxfZ2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJcmV0dXJuIGtiMzg4NmJsX2ludGVuc2l0eTsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGtiMzg4NmJsX29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBrYjM4ODZibF9nZXRfaW50ZW5zaXR5LAorCS51cGRhdGVfc3RhdHVzICA9IGtiMzg4NmJsX3NlbmRfaW50ZW5zaXR5LAorfTsKKworc3RhdGljIGludCBrYjM4ODZibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBrYjM4ODZibF9tYWNoaW5mbyAqbWFjaGluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWJsX21hY2hpbmZvID0gbWFjaGluZm87CisJaWYgKCFtYWNoaW5mby0+bGltaXRfbWFzaykKKwkJbWFjaGluZm8tPmxpbWl0X21hc2sgPSAtMTsKKworCWtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigia2IzODg2LWJsIiwKKwkJJnBkZXYtPmRldiwgTlVMTCwgJmtiMzg4NmJsX29wcyk7CisJaWYgKElTX0VSUihrYjM4ODZfYmFja2xpZ2h0X2RldmljZSkpCisJCXJldHVybiBQVFJfRVJSKGtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlKTsKKworCWtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1hY2hpbmZvLT5tYXhfaW50ZW5zaXR5OworCWtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJa2IzODg2X2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSBtYWNoaW5mby0+ZGVmYXVsdF9pbnRlbnNpdHk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoa2IzODg2X2JhY2tsaWdodF9kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2IzODg2YmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGtiMzg4NmJsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0ga2IzODg2YmxfcHJvYmUsCisJLnJlbW92ZQkJPSBrYjM4ODZibF9yZW1vdmUsCisJLnN1c3BlbmQJPSBrYjM4ODZibF9zdXNwZW5kLAorCS5yZXN1bWUJCT0ga2IzODg2YmxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJrYjM4ODYtYmwiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrYjM4ODZfaW5pdCh2b2lkKQoreworCWlmICghZG1pX2NoZWNrX3N5c3RlbShrYjM4ODZibF9kZXZpY2VfdGFibGUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmtiMzg4NmJsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrYjM4ODZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZrYjM4ODZibF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChrYjM4ODZfaW5pdCk7Cittb2R1bGVfZXhpdChrYjM4ODZfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkNsYXVkaW8gTmllZGVyIDxwcml2YXRlQGNsYXVkaW8uY2g+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRhYmxldGtpb3NrIFNhaGFyYSBUb3VjaC1pVCBCYWNrbGlnaHQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2blNEVjpwbmlUb3VjaFQyMDE6KiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWRiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2JsLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiAgTENEIC8gQmFja2xpZ2h0IGNvbnRyb2wgY29kZSBmb3IgU2hhcnAgU0wtNjAwMHggKHRvc2EpCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNQkJRGlyayBPcGZlcgorICogIENvcHlyaWdodCAoYykgMjAwNywyMDA4CURtaXRyeSBCYXJ5c2hrb3YKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvc2hhcnBzbF9wYXJhbS5oPgorCisjaW5jbHVkZSA8bWFjaC90b3NhLmg+CisKKyNkZWZpbmUgQ09NQURKX0RFRkFVTFQJOTcKKworI2RlZmluZSBEQUNfQ0gxCQkwCisjZGVmaW5lIERBQ19DSDIJCTEKKworc3RydWN0IHRvc2FfYmxfZGF0YSB7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisKKwlpbnQgY29tYWRqOworfTsKKworc3RhdGljIHZvaWQgdG9zYV9ibF9zZXRfYmFja2xpZ2h0KHN0cnVjdCB0b3NhX2JsX2RhdGEgKmRhdGEsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBkYXRhLT5pMmMtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5pMmMsIERBQ19DSDEsIGRhdGEtPmNvbWFkaik7CisKKwkvKiBTZXRCYWNrbGlnaHREdXR5ICovCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5pMmMsIERBQ19DSDIsICh1OCkoYnJpZ2h0bmVzcyAmIDB4ZmYpKTsKKworCS8qIFNldEJhY2tsaWdodFZSICovCisJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX0JMX0MyME1BLCBicmlnaHRuZXNzICYgMHgxMDApOworCisJdG9zYV9ibF9lbmFibGUoc3BpLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCB0b3NhX2JsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKnByb3BzID0gJmRldi0+cHJvcHM7CisJc3RydWN0IHRvc2FfYmxfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCWludCBwb3dlciA9IG1heChwcm9wcy0+cG93ZXIsIHByb3BzLT5mYl9ibGFuayk7CisJaW50IGJyaWdodG5lc3MgPSBwcm9wcy0+YnJpZ2h0bmVzczsKKworCWlmIChwb3dlcikKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwl0b3NhX2JsX3NldF9iYWNrbGlnaHQoZGF0YSwgYnJpZ2h0bmVzcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3NhX2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzICpwcm9wcyA9ICZkZXYtPnByb3BzOworCisJcmV0dXJuIHByb3BzLT5icmlnaHRuZXNzOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYmxfb3BzID0geworCS5nZXRfYnJpZ2h0bmVzcwkJPSB0b3NhX2JsX2dldF9icmlnaHRuZXNzLAorCS51cGRhdGVfc3RhdHVzCQk9IHRvc2FfYmxfdXBkYXRlX3N0YXR1cywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRvc2FfYmxfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0b3NhX2JsX2RhdGEgKmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdG9zYV9ibF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaW50IHJldCA9IDA7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmNvbWFkaiA9IHNoYXJwc2xfcGFyYW0uY29tYWRqID09IC0xID8gQ09NQURKX0RFRkFVTFQgOiBzaGFycHNsX3BhcmFtLmNvbWFkajsKKworCXJldCA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fQkxfQzIwTUEsICJiYWNrbGlnaHQiKTsKKwlpZiAocmV0KSB7CisJCWRldl9kYmcoJmRhdGEtPmJsLT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBncGlvIVxuIik7CisJCWdvdG8gZXJyX2dwaW9fYmw7CisJfQorCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChUT1NBX0dQSU9fQkxfQzIwTUEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZGlyOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZGF0YS0+aTJjID0gY2xpZW50OworCisJZGF0YS0+YmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJ0b3NhLWJsIiwgJmNsaWVudC0+ZGV2LAorCQkJZGF0YSwgJmJsX29wcyk7CisJaWYgKElTX0VSUihkYXRhLT5ibCkpIHsKKwkJcmV0ID0gUFRSX0VSUihkYXRhLT5ibCk7CisJCWdvdG8gZXJyX3JlZzsKKwl9CisKKwlkYXRhLT5ibC0+cHJvcHMuYnJpZ2h0bmVzcyA9IDY5OworCWRhdGEtPmJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDUxMiAtIDE7CisJZGF0YS0+YmwtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGRhdGEtPmJsKTsKKworCXJldHVybiAwOworCitlcnJfcmVnOgorCWRhdGEtPmJsID0gTlVMTDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKK2Vycl9ncGlvX2RpcjoKKwlncGlvX2ZyZWUoVE9TQV9HUElPX0JMX0MyME1BKTsKK2Vycl9ncGlvX2JsOgorCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRvc2FfYmxfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHRvc2FfYmxfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmJsKTsKKwlkYXRhLT5ibCA9IE5VTEw7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisKKwlncGlvX2ZyZWUoVE9TQV9HUElPX0JMX0MyME1BKTsKKworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdG9zYV9ibF9zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBwbSkKK3sKKwlzdHJ1Y3QgdG9zYV9ibF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl0b3NhX2JsX3NldF9iYWNrbGlnaHQoZGF0YSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3NhX2JsX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0b3NhX2JsX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGRhdGEtPmJsKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHRvc2FfYmxfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHRvc2FfYmxfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdG9zYV9ibF9pZFtdID0geworCXsgInRvc2EtYmwiLCAwIH0sCisJeyB9LAorfTsKKworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdG9zYV9ibF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInRvc2EtYmwiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gdG9zYV9ibF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRvc2FfYmxfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IHRvc2FfYmxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRvc2FfYmxfcmVzdW1lLAorCS5pZF90YWJsZQk9IHRvc2FfYmxfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0b3NhX2JsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnRvc2FfYmxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRvc2FfYmxfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0b3NhX2JsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRvc2FfYmxfaW5pdCk7Cittb2R1bGVfZXhpdCh0b3NhX2JsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEbWl0cnkgQmFyeXNoa292Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxDRC9CYWNrbGlnaHQgY29udHJvbCBmb3IgU2hhcnAgU0wtNjAwMCBQREEiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfbGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMjY2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfbGNkLmMKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiAgTENEIC8gQmFja2xpZ2h0IGNvbnRyb2wgY29kZSBmb3IgU2hhcnAgU0wtNjAwMHggKHRvc2EpCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNQkJRGlyayBPcGZlcgorICogIENvcHlyaWdodCAoYykgMjAwNywyMDA4CURtaXRyeSBCYXJ5c2hrb3YKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2xjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9zaGFycHNsX3BhcmFtLmg+CisKKyNpbmNsdWRlIDxtYWNoL3Rvc2EuaD4KKworI2RlZmluZSBQT1dFUl9JU19PTihwd3IpCSgocHdyKSA8PSBGQl9CTEFOS19OT1JNQUwpCisKKyNkZWZpbmUgVEdfUkVHMF9WUVYJMHgwMDAxCisjZGVmaW5lIFRHX1JFRzBfQ09MT1IJMHgwMDAyCisjZGVmaW5lIFRHX1JFRzBfVUQJMHgwMDA0CisjZGVmaW5lIFRHX1JFRzBfTFIJMHgwMDA4CisKKyNkZWZpbmUJREFDX0JBU0UJMHg0ZQorCitzdHJ1Y3QgdG9zYV9sY2RfZGF0YSB7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKwlzdHJ1Y3QgbGNkX2RldmljZSAqbGNkOworCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7CisKKwlpbnQgbGNkX3Bvd2VyOworfTsKKworc3RhdGljIGludCB0b3NhX3RnX3NlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGFkcnMsIHVpbnQ4X3QgZGF0YSkKK3sKKwl1OCBidWZbMV07CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXIgPSB7CisJCS5sZW4JCT0gMSwKKwkJLmNzX2NoYW5nZQk9IDEsCisJCS50eF9idWYJCT0gYnVmLAorCX07CisKKwlidWZbMF0gPSAoKGFkcnMgJiAweDA3KSA8PCA1KSB8IChkYXRhICYgMHgxZik7CisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7CisKKwlyZXR1cm4gc3BpX3N5bmMoc3BpLCAmbXNnKTsKK30KKworaW50IHRvc2FfYmxfZW5hYmxlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBlbmFibGUpCit7CisJLyogYmxfZW5hYmxlIEdQMDQ9MSBvdGhlcndpc2UgR1AwND0wKi8KKwlyZXR1cm4gdG9zYV90Z19zZW5kKHNwaSwgVEdfR1BPRFIyLCBlbmFibGU/IDB4MDEgOiAweDAwKTsKK30KK0VYUE9SVF9TWU1CT0wodG9zYV9ibF9lbmFibGUpOworCitzdGF0aWMgdm9pZCB0b3NhX2xjZF90Z19pbml0KHN0cnVjdCB0b3NhX2xjZF9kYXRhICpkYXRhKQoreworCS8qIFRHIG9uICovCisJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1RHX09OLCAwKTsKKworCW1kZWxheSg2MCk7CisKKwkvKiBkZWxheWVkIDBjbGsgVENUTCBzaWduYWwgZm9yIFZHQSAqLworCXRvc2FfdGdfc2VuZChkYXRhLT5zcGksIFRHX1RQT1NDVEwsIDB4MDApOworCS8qIEdQT1MwPXBvd2VyY29udHJvbCwgR1BPUzE9R1BJTywgR1BPUzI9VENUTCAqLworCXRvc2FfdGdfc2VuZChkYXRhLT5zcGksIFRHX0dQT1NSLCAweDAyKTsKK30KKworc3RhdGljIHZvaWQgdG9zYV9sY2RfdGdfb24oc3RydWN0IHRvc2FfbGNkX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGRhdGEtPnNwaTsKKwljb25zdCBpbnQgdmFsdWUgPSBUR19SRUcwX0NPTE9SIHwgVEdfUkVHMF9VRCB8IFRHX1JFRzBfTFI7CisJdG9zYV90Z19zZW5kKHNwaSwgVEdfUE5MQ1RMLCB2YWx1ZSB8IFRHX1JFRzBfVlFWKTsgLyogdGhpcyBkZXBlbmRzIG9uIG1vZGUgKi8KKworCS8qIFRHIExDRCBwYW5uZWwgcG93ZXIgdXAgKi8KKwl0b3NhX3RnX3NlbmQoc3BpLCBUR19QSU5JQ1RMLDB4NCk7CisJbWRlbGF5KDUwKTsKKworCS8qIFRHIExDRCBHVlNTICovCisJdG9zYV90Z19zZW5kKHNwaSwgVEdfUElOSUNUTCwweDApOworCisJaWYgKCFkYXRhLT5pMmMpIHsKKwkJLyogYWZ0ZXIgdGhlIHBhbm5lbCBpcyBwb3dlcmVkIHVwIHRoZSBmaXJzdCB0aW1lLCB3ZSBjYW4gYWNjZXNzIHRoZSBpMmMgYnVzICovCisJCS8qIHNvIHByb2JlIGZvciB0aGUgREFDICovCisJCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm8gPSB7CisJCQkudHlwZQk9ICJ0b3NhLWJsIiwKKwkJCS5hZGRyCT0gREFDX0JBU0UsCisJCQkucGxhdGZvcm1fZGF0YSA9IGRhdGEtPnNwaSwKKwkJfTsKKwkJZGF0YS0+aTJjID0gaTJjX25ld19kZXZpY2UoYWRhcCwgJmluZm8pOworCX0KK30KKworc3RhdGljIHZvaWQgdG9zYV9sY2RfdGdfb2ZmKHN0cnVjdCB0b3NhX2xjZF9kYXRhICpkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBkYXRhLT5zcGk7CisKKwkvKiBURyBMQ0QgVkhTQSBvZmYgKi8KKwl0b3NhX3RnX3NlbmQoc3BpLCBUR19QSU5JQ1RMLDB4NCk7CisJbWRlbGF5KDUwKTsKKworCS8qIFRHIExDRCBzaWduYWwgb2ZmICovCisJdG9zYV90Z19zZW5kKHNwaSwgVEdfUElOSUNUTCwweDYpOworCW1kZWxheSg1MCk7CisKKwkvKiBURyBPZmYgKi8KKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fVEdfT04sIDEpOworCW1kZWxheSgxMDApOworfQorCitpbnQgdG9zYV9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBsY2RfZGV2aWNlICpsY2QsIGludCBwb3dlcikKK3sKKwlzdHJ1Y3QgdG9zYV9sY2RfZGF0YSAqZGF0YSA9IGxjZF9nZXRfZGF0YShsY2QpOworCisJaWYgKFBPV0VSX0lTX09OKHBvd2VyKSAmJiAhUE9XRVJfSVNfT04oZGF0YS0+bGNkX3Bvd2VyKSkKKwkJdG9zYV9sY2RfdGdfb24oZGF0YSk7CisKKwlpZiAoIVBPV0VSX0lTX09OKHBvd2VyKSAmJiBQT1dFUl9JU19PTihkYXRhLT5sY2RfcG93ZXIpKQorCQl0b3NhX2xjZF90Z19vZmYoZGF0YSk7CisKKwlkYXRhLT5sY2RfcG93ZXIgPSBwb3dlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3NhX2xjZF9nZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxjZCkKK3sKKwlzdHJ1Y3QgdG9zYV9sY2RfZGF0YSAqZGF0YSA9IGxjZF9nZXRfZGF0YShsY2QpOworCisJcmV0dXJuIGRhdGEtPmxjZF9wb3dlcjsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIHRvc2FfbGNkX29wcyA9IHsKKwkuc2V0X3Bvd2VyID0gdG9zYV9sY2Rfc2V0X3Bvd2VyLAorCS5nZXRfcG93ZXIgPSB0b3NhX2xjZF9nZXRfcG93ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0b3NhX2xjZF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCByZXQ7CisJc3RydWN0IHRvc2FfbGNkX2RhdGEgKmRhdGE7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRvc2FfbGNkX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBiaXRzX3Blcl93b3JkIGNhbm5vdCBiZSBjb25maWd1cmVkIGluIHBsYXRmb3JtIGRhdGEKKwkgKi8KKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3NwaTsKKworCWRhdGEtPnNwaSA9IHNwaTsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBkYXRhKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fVEdfT04sICJ0ZyAjcHdyIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2dwaW9fdGc7CisKKwltZGVsYXkoNjApOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19UR19PTiwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2dwaW9fZGlyOworCisJbWRlbGF5KDYwKTsKKwl0b3NhX2xjZF90Z19pbml0KGRhdGEpOworCisJdG9zYV9sY2RfdGdfb24oZGF0YSk7CisKKwlkYXRhLT5sY2QgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKCJ0b3NhLWxjZCIsICZzcGktPmRldiwgZGF0YSwKKwkJCSZ0b3NhX2xjZF9vcHMpOworCisJaWYgKElTX0VSUihkYXRhLT5sY2QpKSB7CisJCXJldCA9IFBUUl9FUlIoZGF0YS0+bGNkKTsKKwkJZGF0YS0+bGNkID0gTlVMTDsKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3RlcjoKKwl0b3NhX2xjZF90Z19vZmYoZGF0YSk7CitlcnJfZ3Bpb19kaXI6CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19UR19PTik7CitlcnJfZ3Bpb190ZzoKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKK2Vycl9zcGk6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdG9zYV9sY2RfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHRvc2FfbGNkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWxjZF9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5sY2QpOworCisJaWYgKGRhdGEtPmkyYykKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmkyYyk7CisKKwl0b3NhX2xjZF90Z19vZmYoZGF0YSk7CisKKwlncGlvX2ZyZWUoVE9TQV9HUElPX1RHX09OKTsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHRvc2FfbGNkX3N1c3BlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB0b3NhX2xjZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwl0b3NhX2xjZF90Z19vZmYoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3NhX2xjZF9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgdG9zYV9sY2RfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJdG9zYV9sY2RfdGdfaW5pdChkYXRhKTsKKwlpZiAoUE9XRVJfSVNfT04oZGF0YS0+bGNkX3Bvd2VyKSkKKwkJdG9zYV9sY2RfdGdfb24oZGF0YSk7CisJZWxzZQorCQl0b3NhX2xjZF90Z19vZmYoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHRvc2FfbGNkX3N1c3BlbmQJTlVMTAorI2RlZmluZSB0b3NhX2xjZF9yZXVtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHRvc2FfbGNkX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAidG9zYS1sY2QiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gdG9zYV9sY2RfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0b3NhX2xjZF9yZW1vdmUpLAorCS5zdXNwZW5kCT0gdG9zYV9sY2Rfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRvc2FfbGNkX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvc2FfbGNkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmdG9zYV9sY2RfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRvc2FfbGNkX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnRvc2FfbGNkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRvc2FfbGNkX2luaXQpOworbW9kdWxlX2V4aXQodG9zYV9sY2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRtaXRyeSBCYXJ5c2hrb3YiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTENEL0JhY2tsaWdodCBjb250cm9sIGZvciBTaGFycCBTTC02MDAwIFBEQSIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggMjE3YzUxMS4uY2Q1ZjIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTAwMiwxMDEgKzEwMDIsMTMyIEBACiAgCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgCi1mYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKK3N0YXRpYyBsb25nCitmYl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwotCXN0cnVjdCBmYl9vcHMgKmZiID0gaW5mby0+ZmJvcHM7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGZiX29wcyAqZmI7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsKIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4OwogCXN0cnVjdCBmYl9jb24yZmJtYXAgY29uMmZiOwogCXN0cnVjdCBmYl9jbWFwX3VzZXIgY21hcDsKIAlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JaW50IGk7Ci0JCi0JaWYgKCFmYikKKwlsb25nIHJldCA9IDA7CisKKwlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CisJZmIgPSBpbmZvLT5mYm9wczsKKworCWlmICghZmIpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT52YXIsCisJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+dmFyLAogCQkJCSAgICBzaXplb2YodmFyKSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPUFVUX1ZTQ1JFRU5JTkZPOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhciwgYXJncCwgc2l6ZW9mKHZhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2YodmFyKSkpIHsKKwkJCXJldCA9ICAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KIAkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JCWkgPSBmYl9zZXRfdmFyKGluZm8sICZ2YXIpOworCQlyZXQgPSBmYl9zZXRfdmFyKGluZm8sICZ2YXIpOwogCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCWlmIChpKSByZXR1cm4gaTsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7CisJCWlmIChyZXQgPT0gMCAmJiBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPR0VUX0ZTQ1JFRU5JTkZPOgotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT5maXgsCisJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+Zml4LAogCQkJCSAgICBzaXplb2YoZml4KSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPUFVUQ01BUDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWFwLCBhcmdwLCBzaXplb2YoY21hcCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAoZmJfc2V0X3VzZXJfY21hcCgmY21hcCwgaW5mbykpOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0ID0gZmJfc2V0X3VzZXJfY21hcCgmY21hcCwgaW5mbyk7CisJCWJyZWFrOwogCWNhc2UgRkJJT0dFVENNQVA6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY21hcCwgYXJncCwgc2l6ZW9mKGNtYXApKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gZmJfY21hcF90b191c2VyKCZpbmZvLT5jbWFwLCAmY21hcCk7CisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXQgPSBmYl9jbWFwX3RvX3VzZXIoJmluZm8tPmNtYXAsICZjbWFwKTsKKwkJYnJlYWs7CiAJY2FzZSBGQklPUEFOX0RJU1BMQVk6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2YodmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CiAJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQkJaSA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZ2YXIpOworCQlyZXQgPSBmYl9wYW5fZGlzcGxheShpbmZvLCAmdmFyKTsKIAkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQlpZiAoaSkKLQkJCXJldHVybiBpOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJaWYgKHJldCA9PSAwICYmIGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCisJCQlyZXQgPSAtRUZBVUxUOworCQlicmVhazsKIAljYXNlIEZCSU9fQ1VSU09SOgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPR0VUX0NPTjJGQk1BUDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb24yZmIsIGFyZ3AsIHNpemVvZihjb24yZmIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoY29uMmZiLmNvbnNvbGUgPCAxIHx8IGNvbjJmYi5jb25zb2xlID4gTUFYX05SX0NPTlNPTEVTKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0JCWNvbjJmYi5mcmFtZWJ1ZmZlciA9IC0xOwotCQlldmVudC5pbmZvID0gaW5mbzsKLQkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfR0VUX0NPTlNPTEVfTUFQLCAmZXZlbnQpOwotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZjb24yZmIsCisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlIGlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlIHsKKwkJCWNvbjJmYi5mcmFtZWJ1ZmZlciA9IC0xOworCQkJZXZlbnQuaW5mbyA9IGluZm87CisJCQlldmVudC5kYXRhID0gJmNvbjJmYjsKKwkJCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfR0VUX0NPTlNPTEVfTUFQLAorCQkJCQkJCQkmZXZlbnQpOworCQkJcmV0ID0gY29weV90b191c2VyKGFyZ3AsICZjb24yZmIsCiAJCQkJICAgIHNpemVvZihjb24yZmIpKSA/IC1FRkFVTFQgOiAwOworCQl9CisJCWJyZWFrOwogCWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmY29uMmZiLCBhcmdwLCBzaXplb2YoY29uMmZiKSkpCi0JCQlyZXR1cm4gLSBFRkFVTFQ7Ci0JCWlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGNvbjJmYi5mcmFtZWJ1ZmZlciA8IDAgfHwgY29uMmZiLmZyYW1lYnVmZmVyID49IEZCX01BWCkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbjJmYiwgYXJncCwgc2l6ZW9mKGNvbjJmYikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb24yZmIuZnJhbWVidWZmZXIgPCAwIHx8IGNvbjJmYi5mcmFtZWJ1ZmZlciA+PSBGQl9NQVgpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQogCQlpZiAoIXJlZ2lzdGVyZWRfZmJbY29uMmZiLmZyYW1lYnVmZmVyXSkKLQkJICAgIHJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgY29uMmZiLmZyYW1lYnVmZmVyKTsKLQkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgY29uMmZiLmZyYW1lYnVmZmVyKTsKKwkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQogCQlldmVudC5pbmZvID0gaW5mbzsKIAkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCXJldHVybiBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCwKKwkJcmV0ID0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAsCiAJCQkJCSAgICAgICZldmVudCk7CisJCWJyZWFrOwogCWNhc2UgRkJJT0JMQU5LOgogCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJaSA9IGZiX2JsYW5rKGluZm8sIGFyZyk7CisJCXJldCA9IGZiX2JsYW5rKGluZm8sIGFyZyk7CiAJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIGk7CisJCWJyZWFrOzsKIAlkZWZhdWx0OgogCQlpZiAoZmItPmZiX2lvY3RsID09IE5VTEwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGZiLT5mYl9pb2N0bChpbmZvLCBjbWQsIGFyZyk7CisJCQlyZXQgPSAtRU5PVFRZOworCQllbHNlCisJCQlyZXQgPSBmYi0+ZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOwogCX0KKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCXJldHVybiByZXQ7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xMTUwLDcgKzExODEsNyBAQAogCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+dHJhbnNwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBmYl9pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7CisJZXJyID0gZmJfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7CiAKIAlpZiAoIWVycikgewogCQlpZiAoY29weV9pbl91c2VyKCZjbWFwMzItPnN0YXJ0LApAQCAtMTIwNCw3ICsxMjM1LDcgQEAKIAogCW9sZF9mcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwotCWVyciA9IGZiX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKKwllcnIgPSBmYl9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKIAlzZXRfZnMob2xkX2ZzKTsKIAogCWlmICghZXJyKQpAQCAtMTIyMiw3ICsxMjUzLDcgQEAKIAlzdHJ1Y3QgZmJfb3BzICpmYiA9IGluZm8tPmZib3BzOwogCWxvbmcgcmV0ID0gLUVOT0lPQ1RMQ01EOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgogCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5GTzoKQEAgLTEyMzEsNyArMTI2Miw3IEBACiAJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKIAkJYXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTsKIAljYXNlIEZCSU9CTEFOSzoKLQkJcmV0ID0gZmJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0ID0gZmJfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQlicmVhazsKIAogCWNhc2UgRkJJT0dFVF9GU0NSRUVOSU5GTzoKQEAgLTEyNDgsNyArMTI3OSw3IEBACiAJCQlyZXQgPSBmYi0+ZmJfY29tcGF0X2lvY3RsKGluZm8sIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKQEAgLTEyNzAsMTMgKzEzMDEsMTMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGZiLT5mYl9tbWFwKSB7CiAJCWludCByZXM7Ci0JCWxvY2tfa2VybmVsKCk7CisJCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwogCQlyZXMgPSBmYi0+ZmJfbW1hcChpbmZvLCB2bWEpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJCXJldHVybiByZXM7CiAJfQogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAogCS8qIGZyYW1lIGJ1ZmZlciBtZW1vcnkgKi8KIAlzdGFydCA9IGluZm8tPmZpeC5zbWVtX3N0YXJ0OwpAQCAtMTI4NSwxMyArMTMxNiwxMyBAQAogCQkvKiBtZW1vcnkgbWFwcGVkIGlvICovCiAJCW9mZiAtPSBsZW47CiAJCWlmIChpbmZvLT52YXIuYWNjZWxfZmxhZ3MpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlzdGFydCA9IGluZm8tPmZpeC5tbWlvX3N0YXJ0OwogCQlsZW4gPSBQQUdFX0FMSUdOKChzdGFydCAmIH5QQUdFX01BU0spICsgaW5mby0+Zml4Lm1taW9fbGVuKTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJc3RhcnQgJj0gUEFHRV9NQVNLOwogCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ICsgb2ZmKSA+IGxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzE1LDEzICsxMzQ2LDEzIEBACiAKIAlpZiAoZmJpZHggPj0gRkJfTUFYKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlsb2NrX2tlcm5lbCgpOwotCWlmICghKGluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XSkpCisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCWlmICghaW5mbykKIAkJcmVxdWVzdF9tb2R1bGUoImZiJWQiLCBmYmlkeCk7Ci0JaWYgKCEoaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdKSkgewotCQlyZXMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9CisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChpbmZvLT5mYm9wcy0+b3duZXIpKSB7CiAJCXJlcyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpAQCAtMTMzNyw3ICsxMzY4LDcgQEAKIAkJZmJfZGVmZXJyZWRfaW9fb3BlbihpbmZvLCBpbm9kZSwgZmlsZSk7CiAjZW5kaWYKIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMzQ2LDExICsxMzc3LDExIEBACiB7CiAJc3RydWN0IGZiX2luZm8gKiBjb25zdCBpbmZvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3JlbGVhc2UpCiAJCWluZm8tPmZib3BzLT5mYl9yZWxlYXNlKGluZm8sMSk7CiAJbW9kdWxlX3B1dChpbmZvLT5mYm9wcy0+b3duZXIpOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMzU4LDcgKzEzODksNyBAQAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkID0JCWZiX3JlYWQsCiAJLndyaXRlID0JZmJfd3JpdGUsCi0JLmlvY3RsID0JZmJfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gZmJfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSBmYl9jb21wYXRfaW9jdGwsCiAjZW5kaWYKQEAgLTE0MjksNiArMTQ2MCw3IEBACiAJCWlmICghcmVnaXN0ZXJlZF9mYltpXSkKIAkJCWJyZWFrOwogCWZiX2luZm8tPm5vZGUgPSBpOworCW11dGV4X2luaXQoJmZiX2luZm8tPmxvY2spOwogCiAJZmJfaW5mby0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShmYl9jbGFzcywgZmJfaW5mby0+ZGV2aWNlLAogCQkJCSAgICAgTUtERVYoRkJfTUFKT1IsIGkpLCBOVUxMLCAiZmIlZCIsIGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbWFjZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9pbWFjZmIuYworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IDRjMzJjMDYuLmVmZmY2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgogCiAjZGVmaW5lIFBBTEVUVEVfTlIgMTYKIApAQCAtMzQsNyArMzQsOSBAQAogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOworI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCXN0cnVjdCBjbGsgKmNsazsKKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcgbGRkY2tyOwogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuIGNoWzJdOwogfTsKQEAgLTI2MCw2ICsyNjIsMTEgQEAKIAkJdG1wID0gY2gtPmxkbXQxcl92YWx1ZTsKIAkJdG1wIHw9IChsY2RfY2ZnLT5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKSA/IDAgOiAxIDw8IDI4OwogCQl0bXAgfD0gKGxjZF9jZmctPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkgPyAwIDogMSA8PCAyNzsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19EV1BPTCkgPyAxIDw8IDI2IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19ESVBPTCkgPyAxIDw8IDI1IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19EQVBPTCkgPyAxIDw8IDI0IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19IU0NOVCkgPyAxIDw8IDE3IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19EV0NOVCkgPyAxIDw8IDE2IDogMDsKIAkJbGNkY193cml0ZV9jaGFuKGNoLCBMRE1UMVIsIHRtcCk7CiAKIAkJLyogc2V0dXAgU1lTIGJ1cyAqLwpAQCAtNDIyLDYgKzQyOSw3IEBACiAKIAlwcml2LT5sZGRja3IgPSBpY2tzZWwgPDwgMTY7CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAlpZiAoc3RyKSB7CiAJCXByaXYtPmNsayA9IGNsa19nZXQoZGV2LCBzdHIpOwogCQlpZiAoSVNfRVJSKHByaXYtPmNsaykpIHsKQEAgLTQzMSw2ICs0MzksNyBAQAogCiAJCWNsa19lbmFibGUocHJpdi0+Y2xrKTsKIAl9CisjZW5kaWYKIAogCXJldHVybiAwOwogfQpAQCAtNTg1LDcgKzU5NCw2IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlwcml2LT5sZGRja3IgPSBwZGF0YS0+bGRkY2tyOwogCXByaXYtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKQEAgLTY4OCwxMCArNjk2LDEyIEBACiAJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiAJfQogCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJaWYgKHByaXYtPmNsaykgewogCQljbGtfZGlzYWJsZShwcml2LT5jbGspOwogCQljbGtfcHV0KHByaXYtPmNsayk7CiAJfQorI2VuZGlmCiAKIAlpZiAocHJpdi0+YmFzZSkKIAkJaW91bm1hcChwcml2LT5iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjc2MC5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKaW5kZXggZWQ2YjA1Ny4uMWYwOWQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKQEAgLTgwLDcgKzgwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAidzFfc2xhdmUiLAogCQkubW9kZSA9IFNfSVJVR08sCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBEUzI3NjBfREFUQV9TSVpFLAogCS5yZWFkID0gdzFfZHMyNzYwX3JlYWRfYmluLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCmluZGV4IDA1YTI4MTAuLjg3ODJlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaWI3MDB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2liNzAwd2R0LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoaSA9IDB4MEY7IGkgPiAtMTsgaS0tKQotCQlpZiAod2RfdGltZXNbaV0gPiB0KQorCQlpZiAod2RfdGltZXNbaV0gPj0gdCkKIAkJCWJyZWFrOwogCXdkX21hcmdpbiA9IGk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYwppbmRleCBjNzNiNWUyLi5hZGE4YWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gVzgzNjk3VUcvVUYgY291bGQgYmUgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuOwogCX0KIAogCW91dGJfcCgweDA3LCBXRFRfRUZFUik7IC8qIHBvaW50IHRvIGxvZ2ljYWwgZGV2aWNlIG51bWJlciByZWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2NwdV9ob3RwbHVnLmMgYi9kcml2ZXJzL3hlbi9jcHVfaG90cGx1Zy5jCmluZGV4IDU2NTI4MGVjLi45NzRmNTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9jcHVfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMveGVuL2NwdV9ob3RwbHVnLmMKQEAgLTIsNyArMiw3IEBACiAKICNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CiAKLSNpbmNsdWRlIDxhc20teDg2L3hlbi9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcnZpc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiBzdGF0aWMgdm9pZCBlbmFibGVfaG90cGx1Z19jcHUoaW50IGNwdSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2V2ZW50cy5jIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKaW5kZXggYzMyOTBiYy4uOWNlMWFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZXZlbnRzLmMKKysrIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAJQlVHX09OKGlycSA9PSAtMSk7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCWlycV90b19kZXNjKGlycSktPmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoY3B1KTsKICNlbmRpZgogCiAJX19jbGVhcl9iaXQoY2huLCBjcHVfZXZ0Y2huX21hc2tbY3B1X2V2dGNobltjaG5dXSk7CkBAIC0xMzcsMTAgKzEzNywxMiBAQAogc3RhdGljIHZvaWQgaW5pdF9ldnRjaG5fY3B1X2JpbmRpbmdzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAorCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAlpbnQgaTsKKwogCS8qIEJ5IGRlZmF1bHQgYWxsIGV2ZW50IGNoYW5uZWxzIG5vdGlmeSBDUFUjMC4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlpcnFfZGVzY1tpXS5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KDApOworCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpCisJCWRlc2MtPmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoMCk7CiAjZW5kaWYKIAogCW1lbXNldChjcHVfZXZ0Y2huLCAwLCBzaXplb2YoY3B1X2V2dGNobikpOwpAQCAtMjI5LDEyICsyMzEsMTIgQEAKIAlpbnQgaXJxOwogCiAJLyogT25seSBhbGxvY2F0ZSBmcm9tIGR5bmlycSByYW5nZSAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUzsgaXJxKyspCisJZm9yX2VhY2hfaXJxX25yKGlycSkKIAkJaWYgKGlycV9iaW5kY291bnRbaXJxXSA9PSAwKQogCQkJYnJlYWs7CiAKLQlpZiAoaXJxID09IE5SX0lSUVMpCi0JCXBhbmljKCJObyBhdmFpbGFibGUgSVJRIHRvIGJpbmQgdG86IGluY3JlYXNlIE5SX0lSUVMhXG4iKTsKKwlpZiAoaXJxID09IG5yX2lycXMpCisJCXBhbmljKCJObyBhdmFpbGFibGUgSVJRIHRvIGJpbmQgdG86IGluY3JlYXNlIG5yX2lycXMhXG4iKTsKIAogCXJldHVybiBpcnE7CiB9CkBAIC03OTAsNyArNzkyLDcgQEAKIAkJbWFza19ldnRjaG4oZXZ0Y2huKTsKIAogCS8qIE5vIElSUSA8LT4gZXZlbnQtY2hhbm5lbCBtYXBwaW5ncy4gKi8KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCWZvcl9lYWNoX2lycV9ucihpcnEpCiAJCWlycV9pbmZvW2lycV0uZXZ0Y2huID0gMDsgLyogemFwIGV2ZW50LWNoYW5uZWwgYmluZGluZyAqLwogCiAJZm9yIChldnRjaG4gPSAwOyBldnRjaG4gPCBOUl9FVkVOVF9DSEFOTkVMUzsgZXZ0Y2huKyspCkBAIC04MjIsNyArODI0LDcgQEAKIAkJbWFza19ldnRjaG4oaSk7CiAKIAkvKiBEeW5hbWljIElSUSBzcGFjZSBpcyBjdXJyZW50bHkgdW5ib3VuZC4gWmVybyB0aGUgcmVmY250cy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQorCWZvcl9lYWNoX2lycV9ucihpKQogCQlpcnFfYmluZGNvdW50W2ldID0gMDsKIAogCWlycV9jdHhfaW5pdChzbXBfcHJvY2Vzc29yX2lkKCkpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5jIGIvZnMvOXAvdjlmcy5jCmluZGV4IGMwNjFjM2YuLjI0ZWIwMTAgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnMuYworKysgYi9mcy85cC92OWZzLmMKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KLSNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgorI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KICNpbmNsdWRlICJ2OWZzLmgiCiAjaW5jbHVkZSAidjlmc192ZnMuaCIKIApAQCAtMjM0LDcgKzIzNCw3IEBACiAJaWYgKCF2OXNlcy0+Y2xudC0+ZG90dSkKIAkJdjlzZXMtPmZsYWdzICY9IH5WOUZTX0VYVEVOREVEOwogCi0JdjlzZXMtPm1heGRhdGEgPSB2OXNlcy0+Y2xudC0+bXNpemU7CisJdjlzZXMtPm1heGRhdGEgPSB2OXNlcy0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwogCiAJLyogZm9yIGxlZ2FjeSBtb2RlLCBmYWxsIGJhY2sgdG8gVjlGU19BQ0NFU1NfQU5ZICovCiAJaWYgKCF2OWZzX2V4dGVuZGVkKHY5c2VzKSAmJgpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggNTc5OTdmYS4uYzI5NWJhNyAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC00Niw5ICs0NiwxMSBAQAogCiBzdHJ1Y3QgaW5vZGUgKnY5ZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlKTsKIGlub190IHY5ZnNfcWlkMmlubyhzdHJ1Y3QgcDlfcWlkICpxaWQpOwotdm9pZCB2OWZzX3N0YXQyaW5vZGUoc3RydWN0IHA5X3N0YXQgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK3ZvaWQgdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV93c3RhdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwogaW50IHY5ZnNfZGlyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogaW50IHY5ZnNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXZvaWQgdjlmc19pbm9kZTJzdGF0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwOV9zdGF0ICpzdGF0KTsKK3ZvaWQgdjlmc19pbm9kZTJzdGF0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwOV93c3RhdCAqc3RhdCk7CiB2b2lkIHY5ZnNfZGVudHJ5X3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqKTsKIGludCB2OWZzX3VmbGFnczJvbW9kZShpbnQgdWZsYWdzLCBpbnQgZXh0ZW5kZWQpOworCitzc2l6ZV90IHY5ZnNfZmlsZV9yZWFkbihzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIGNoYXIgX191c2VyICosIHUzMiwgdTY0KTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19hZGRyLmMgYi9mcy85cC92ZnNfYWRkci5jCmluZGV4IDk3ZDNhZWQuLjZmY2IxZTcgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19hZGRyLmMKKysrIGIvZnMvOXAvdmZzX2FkZHIuYwpAQCAtMzgsNyArMzgsNiBAQAogCiAjaW5jbHVkZSAidjlmcy5oIgogI2luY2x1ZGUgInY5ZnNfdmZzLmgiCi0jaW5jbHVkZSAiZmlkLmgiCiAKIC8qKgogICogdjlmc192ZnNfcmVhZHBhZ2UgLSByZWFkIGFuIGVudGlyZSBwYWdlIGluIGZyb20gOVAKQEAgLTUzLDE0ICs1MiwxMiBAQAogCWludCByZXR2YWw7CiAJbG9mZl90IG9mZnNldDsKIAljaGFyICpidWZmZXI7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJcbiIpOwotCWZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlidWZmZXIgPSBrbWFwKHBhZ2UpOwogCW9mZnNldCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOwogCi0JcmV0dmFsID0gcDlfY2xpZW50X3JlYWRuKGZpZCwgYnVmZmVyLCBvZmZzZXQsIFBBR0VfQ0FDSEVfU0laRSk7CisJcmV0dmFsID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIGJ1ZmZlciwgTlVMTCwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGRvbmU7CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kaXIuYyBiL2ZzLzlwL3Zmc19kaXIuYwppbmRleCBlMjk4ZmUxLi44NzNjZDMxIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGlyLmMKKysrIGIvZnMvOXAvdmZzX2Rpci5jCkBAIC00NSw3ICs0NSw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGR0X3R5cGUoc3RydWN0IHA5X3N0YXQgKm1pc3RhdCkKK3N0YXRpYyBpbmxpbmUgaW50IGR0X3R5cGUoc3RydWN0IHA5X3dzdGF0ICptaXN0YXQpCiB7CiAJdW5zaWduZWQgbG9uZyBwZXJtID0gbWlzdGF0LT5tb2RlOwogCWludCByZXR0eXBlID0gRFRfUkVHOwpAQCAtNjksMzIgKzY5LDU4IEBACiBzdGF0aWMgaW50IHY5ZnNfZGlyX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJaW50IG92ZXI7CisJc3RydWN0IHA5X3dzdGF0IHN0OworCWludCBlcnI7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOwotCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgcDlfc3RhdCAqc3Q7CisJaW50IGJ1ZmxlbjsKKwljaGFyICpzdGF0YnVmOworCWludCBuLCBpID0gMDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoaW5vZGUpOwogCWZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQl3aGlsZSAoKHN0ID0gcDlfY2xpZW50X2RpcnJlYWQoZmlkLCBmaWxwLT5mX3BvcykpICE9IE5VTEwpIHsKLQkJaWYgKElTX0VSUihzdCkpCi0JCQlyZXR1cm4gUFRSX0VSUihzdCk7CiAKLQkJb3ZlciA9IGZpbGxkaXIoZGlyZW50LCBzdC0+bmFtZS5zdHIsIHN0LT5uYW1lLmxlbiwgZmlscC0+Zl9wb3MsCi0JCQl2OWZzX3FpZDJpbm8oJnN0LT5xaWQpLCBkdF90eXBlKHN0KSk7CisJYnVmbGVuID0gZmlkLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7CisJc3RhdGJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRidWYpCisJCXJldHVybiAtRU5PTUVNOwogCi0JCWlmIChvdmVyKQorCXdoaWxlICgxKSB7CisJCWVyciA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBzdGF0YnVmLCBOVUxMLCBidWZsZW4sCisJCQkJCQkJCWZpZC0+cmRpcl9mcG9zKTsKKwkJaWYgKGVyciA8PSAwKQogCQkJYnJlYWs7CiAKLQkJZmlscC0+Zl9wb3MgKz0gc3QtPnNpemU7Ci0JCWtmcmVlKHN0KTsKLQkJc3QgPSBOVUxMOworCQluID0gZXJyOworCQl3aGlsZSAoaSA8IG4pIHsKKwkJCWVyciA9IHA5c3RhdF9yZWFkKHN0YXRidWYgKyBpLCBidWZsZW4taSwgJnN0LAorCQkJCQkJCWZpZC0+Y2xudC0+ZG90dSk7CisJCQlpZiAoZXJyKSB7CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJyZXR1cm5lZCAlZFxuIiwgZXJyKTsKKwkJCQllcnIgPSAtRUlPOworCQkJCXA5c3RhdF9mcmVlKCZzdCk7CisJCQkJZ290byBmcmVlX2FuZF9leGl0OworCQkJfQorCisJCQlpICs9IHN0LnNpemUrMjsKKwkJCWZpZC0+cmRpcl9mcG9zICs9IHN0LnNpemUrMjsKKworCQkJb3ZlciA9IGZpbGxkaXIoZGlyZW50LCBzdC5uYW1lLCBzdHJsZW4oc3QubmFtZSksCisJCQkgICAgZmlscC0+Zl9wb3MsIHY5ZnNfcWlkMmlubygmc3QucWlkKSwgZHRfdHlwZSgmc3QpKTsKKworCQkJZmlscC0+Zl9wb3MgKz0gc3Quc2l6ZSsyOworCisJCQlwOXN0YXRfZnJlZSgmc3QpOworCisJCQlpZiAob3ZlcikgeworCQkJCWVyciA9IDA7CisJCQkJZ290byBmcmVlX2FuZF9leGl0OworCQkJfQorCQl9CiAJfQogCi0Ja2ZyZWUoc3QpOwotCXJldHVybiAwOworZnJlZV9hbmRfZXhpdDoKKwlrZnJlZShzdGF0YnVmKTsKKwlyZXR1cm4gZXJyOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDUyOTQ0ZDIuLjY4YmYyYWYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtMTIwLDIzICsxMjAsNzIgQEAKIH0KIAogLyoqCi0gKiB2OWZzX2ZpbGVfcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUKKyAqIHY5ZnNfZmlsZV9yZWFkbiAtIHJlYWQgZnJvbSBhIGZpbGUKICAqIEBmaWxwOiBmaWxlIHBvaW50ZXIgdG8gcmVhZAogICogQGRhdGE6IGRhdGEgYnVmZmVyIHRvIHJlYWQgZGF0YSBpbnRvCisgKiBAdWRhdGE6IHVzZXIgZGF0YSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8KICAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqIEBvZmZzZXQ6IG9mZnNldCBhdCB3aGljaCB0byByZWFkIGRhdGEKICAqCiAgKi8KKworc3NpemVfdAordjlmc19maWxlX3JlYWRuKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyICpkYXRhLCBjaGFyIF9fdXNlciAqdWRhdGEsIHUzMiBjb3VudCwKKwkgICAgICAgdTY0IG9mZnNldCkKK3sKKwlpbnQgbiwgdG90YWw7CisJc3RydWN0IHA5X2ZpZCAqZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJmaWQgJWQgb2Zmc2V0ICVsbHUgY291bnQgJWRcbiIsIGZpZC0+ZmlkLAorCQkJCQkobG9uZyBsb25nIHVuc2lnbmVkKSBvZmZzZXQsIGNvdW50KTsKKworCW4gPSAwOworCXRvdGFsID0gMDsKKwlkbyB7CisJCW4gPSBwOV9jbGllbnRfcmVhZChmaWQsIGRhdGEsIHVkYXRhLCBvZmZzZXQsIGNvdW50KTsKKwkJaWYgKG4gPD0gMCkKKwkJCWJyZWFrOworCisJCWlmIChkYXRhKQorCQkJZGF0YSArPSBuOworCQlpZiAodWRhdGEpCisJCQl1ZGF0YSArPSBuOworCisJCW9mZnNldCArPSBuOworCQljb3VudCAtPSBuOworCQl0b3RhbCArPSBuOworCX0gd2hpbGUgKGNvdW50ID4gMCAmJiBuID09IChmaWQtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWikpOworCisJaWYgKG4gPCAwKQorCQl0b3RhbCA9IG47CisKKwlyZXR1cm4gdG90YWw7Cit9CisKKy8qKgorICogdjlmc19maWxlX3JlYWQgLSByZWFkIGZyb20gYSBmaWxlCisgKiBAZmlscDogZmlsZSBwb2ludGVyIHRvIHJlYWQKKyAqIEB1ZGF0YTogdXNlciBkYXRhIGJ1ZmZlciB0byByZWFkIGRhdGEgaW50bworICogQGNvdW50OiBzaXplIG9mIGJ1ZmZlcgorICogQG9mZnNldDogb2Zmc2V0IGF0IHdoaWNoIHRvIHJlYWQgZGF0YQorICoKKyAqLworCiBzdGF0aWMgc3NpemVfdAotdjlmc19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAordjlmc19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1ZGF0YSwgc2l6ZV90IGNvdW50LAogCSAgICAgICBsb2ZmX3QgKiBvZmZzZXQpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIlxuIik7CisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJjb3VudCAlenUgb2Zmc2V0ICVsbGRcbiIsIGNvdW50LCAqb2Zmc2V0KTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3VyZWFkKGZpZCwgZGF0YSwgKm9mZnNldCwgY291bnQpOworCisJaWYgKGNvdW50ID4gKGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaKSkKKwkJcmV0ID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIE5VTEwsIHVkYXRhLCBjb3VudCwgKm9mZnNldCk7CisJZWxzZQorCQlyZXQgPSBwOV9jbGllbnRfcmVhZChmaWQsIE5VTEwsIHVkYXRhLCAqb2Zmc2V0LCBjb3VudCk7CisKIAlpZiAocmV0ID4gMCkKIAkJKm9mZnNldCArPSByZXQ7CiAKQEAgLTE1NiwxOSArMjA1LDM4IEBACiB2OWZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICogZGF0YSwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0JaW50IHJldDsKKwlpbnQgbiwgcnNpemUsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgb3JpZ2luID0gKm9mZnNldDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGF0YSAlcCBjb3VudCAlZCBvZmZzZXQgJXhcbiIsIGRhdGEsCiAJCShpbnQpY291bnQsIChpbnQpKm9mZnNldCk7CiAKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3V3cml0ZShmaWQsIGRhdGEsICpvZmZzZXQsIGNvdW50KTsKLQlpZiAocmV0ID4gMCkgewotCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAqb2Zmc2V0LAotCQkJCQkJCQkqb2Zmc2V0K3JldCk7Ci0JCSpvZmZzZXQgKz0gcmV0OworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlyc2l6ZSA9IGZpZC0+aW91bml0OworCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQorCQlyc2l6ZSA9IGNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKKworCWRvIHsKKwkJaWYgKGNvdW50IDwgcnNpemUpCisJCQlyc2l6ZSA9IGNvdW50OworCisJCW4gPSBwOV9jbGllbnRfd3JpdGUoZmlkLCBOVUxMLCBkYXRhK3RvdGFsLCAqb2Zmc2V0K3RvdGFsLAorCQkJCQkJCQkJcnNpemUpOworCQlpZiAobiA8PSAwKQorCQkJYnJlYWs7CisJCWNvdW50IC09IG47CisJCXRvdGFsICs9IG47CisJfSB3aGlsZSAoY291bnQgPiAwKTsKKworCWlmICh0b3RhbCA+IDApIHsKKwkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgb3JpZ2luLAorCQkJCQkJCQlvcmlnaW4rdG90YWwpOworCQkqb2Zmc2V0ICs9IHRvdGFsOwogCX0KIAogCWlmICgqb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkgewpAQCAtMTc2LDcgKzI0NCwxMCBAQAogCQlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIDUxMiAtIDEpID4+IDk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlpZiAobiA8IDApCisJCXJldHVybiBuOworCisJcmV0dXJuIHRvdGFsOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2NhY2hlZF9maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IGU4M2FhNWUuLjgzMTRkM2YgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIHsKIAlpbnQgZXJyLCB1bW9kZTsKIAlzdHJ1Y3QgaW5vZGUgKnJldDsKLQlzdHJ1Y3QgcDlfc3RhdCAqc3Q7CisJc3RydWN0IHA5X3dzdGF0ICpzdDsKIAogCXJldCA9IE5VTEw7CiAJc3QgPSBwOV9jbGllbnRfc3RhdChmaWQpOwpAQCAtNDE3LDYgKzQxNyw4IEBACiAJc3RydWN0IHA5X2ZpZCAqZGZpZCwgKm9maWQsICpmaWQ7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAorCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKIAllcnIgPSAwOwogCW9maWQgPSBOVUxMOwogCWZpZCA9IE5VTEw7CkBAIC00MjQsNiArNDI2LDcgQEAKIAlkZmlkID0gdjlmc19maWRfY2xvbmUoZGVudHJ5LT5kX3BhcmVudCk7CiAJaWYgKElTX0VSUihkZmlkKSkgewogCQllcnIgPSBQVFJfRVJSKGRmaWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBjbG9uZSBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWRmaWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTQzMiwxOCArNDM1LDIyIEBACiAJb2ZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDAsIE5VTEwsIDEpOwogCWlmIChJU19FUlIob2ZpZCkpIHsKIAkJZXJyID0gUFRSX0VSUihvZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsIGVycik7CiAJCW9maWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAogCWVyciA9IHA5X2NsaWVudF9mY3JlYXRlKG9maWQsIG5hbWUsIHBlcm0sIG1vZGUsIGV4dGVuc2lvbik7Ci0JaWYgKGVyciA8IDApCisJaWYgKGVyciA8IDApIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfZmNyZWF0ZSBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWdvdG8gZXJyb3I7CisJfQogCiAJLyogbm93IHdhbGsgZnJvbSB0aGUgcGFyZW50IHNvIHdlIGNhbiBnZXQgdW5vcGVuZWQgZmlkICovCiAJZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMSwgJm5hbWUsIDApOwogCWlmIChJU19FUlIoZmlkKSkgewogCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLCBlcnIpOwogCQlmaWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZQpAQCAtNDUzLDYgKzQ2MCw3IEBACiAJaW5vZGUgPSB2OWZzX2lub2RlX2Zyb21fZmlkKHY5c2VzLCBmaWQsIGRpci0+aV9zYik7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiaW5vZGUgY3JlYXRpb24gZmFpbGVkICVkXG4iLCBlcnIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNzM0LDcgKzc0Miw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKLQlzdHJ1Y3QgcDlfc3RhdCAqc3Q7CisJc3RydWN0IHA5X3dzdGF0ICpzdDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGVudHJ5OiAlcFxuIiwgZGVudHJ5KTsKIAllcnIgPSAtRVBFUk07CkBAIC04MTUsMTAgKzgyMyw5IEBACiAgKi8KIAogdm9pZAotdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV9zdGF0ICpzdGF0LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAordjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV93c3RhdCAqc3RhdCwgc3RydWN0IGlub2RlICppbm9kZSwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBuOwogCWNoYXIgZXh0WzMyXTsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gc2ItPnNfZnNfaW5mbzsKIApAQCAtODQyLDExICs4NDksNyBAQAogCQlpbnQgbWFqb3IgPSAtMTsKIAkJaW50IG1pbm9yID0gLTE7CiAKLQkJbiA9IHN0YXQtPmV4dGVuc2lvbi5sZW47Ci0JCWlmIChuID4gc2l6ZW9mKGV4dCktMSkKLQkJCW4gPSBzaXplb2YoZXh0KS0xOwotCQltZW1tb3ZlKGV4dCwgc3RhdC0+ZXh0ZW5zaW9uLnN0ciwgbik7Ci0JCWV4dFtuXSA9IDA7CisJCXN0cm5jcHkoZXh0LCBzdGF0LT5leHRlbnNpb24sIHNpemVvZihleHQpKTsKIAkJc3NjYW5mKGV4dCwgIiVjICV1ICV1IiwgJnR5cGUsICZtYWpvciwgJm1pbm9yKTsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgJ2MnOgpAQCAtODU3LDEwICs4NjAsMTEgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkiVW5rbm93biBzcGVjaWFsIHR5cGUgJWMgKCUuKnMpXG4iLCB0eXBlLAotCQkJCXN0YXQtPmV4dGVuc2lvbi5sZW4sIHN0YXQtPmV4dGVuc2lvbi5zdHIpOworCQkJCSJVbmtub3duIHNwZWNpYWwgdHlwZSAlYyAlc1xuIiwgdHlwZSwKKwkJCQlzdGF0LT5leHRlbnNpb24pOwogCQl9OwogCQlpbm9kZS0+aV9yZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yKTsKKwkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKIAl9IGVsc2UKIAkJaW5vZGUtPmlfcmRldiA9IDA7CiAKQEAgLTkwNCw3ICs5MDgsNyBAQAogCiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCXN0cnVjdCBwOV93c3RhdCAqc3Q7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJcmV0dmFsID0gLUVQRVJNOwpAQCAtOTI2LDE1ICs5MzAsMTAgQEAKIAl9CiAKIAkvKiBjb3B5IGV4dGVuc2lvbiBidWZmZXIgaW50byBidWZmZXIgKi8KLQlpZiAoc3QtPmV4dGVuc2lvbi5sZW4gPCBidWZsZW4pCi0JCWJ1ZmxlbiA9IHN0LT5leHRlbnNpb24ubGVuICsgMTsKLQotCW1lbW1vdmUoYnVmZmVyLCBzdC0+ZXh0ZW5zaW9uLnN0ciwgYnVmbGVuIC0gMSk7Ci0JYnVmZmVyW2J1Zmxlbi0xXSA9IDA7CisJc3RybmNweShidWZmZXIsIHN0LT5leHRlbnNpb24sIGJ1Zmxlbik7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywKLQkJIiVzIC0+ICUuKnMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3QtPmV4dGVuc2lvbi5sZW4sCi0JCXN0LT5leHRlbnNpb24uc3RyLCBidWZmZXIpOworCQkiJXMgLT4gJXMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3QtPmV4dGVuc2lvbiwgYnVmZmVyKTsKIAogCXJldHZhbCA9IGJ1ZmxlbjsKIApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCBiZjU5YzM5Li5kNmNiMWEwIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqcm9vdCA9IE5VTEw7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IE5VTEw7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0ID0gTlVMTDsKKwlzdHJ1Y3QgcDlfd3N0YXQgKnN0ID0gTlVMTDsKIAlpbnQgbW9kZSA9IFNfSVJXWFVHTyB8IFNfSVNWVFg7CiAJdWlkX3QgdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJZ2lkX3QgZ2lkID0gY3VycmVudC0+ZnNnaWQ7CkBAIC0xNjEsMTAgKzE2MSwxNCBAQAogCiAJc2ItPnNfcm9vdCA9IHJvb3Q7CiAJcm9vdC0+ZF9pbm9kZS0+aV9pbm8gPSB2OWZzX3FpZDJpbm8oJnN0LT5xaWQpOworCiAJdjlmc19zdGF0Mmlub2RlKHN0LCByb290LT5kX2lub2RlLCBzYik7CisKIAl2OWZzX2ZpZF9hZGQocm9vdCwgZmlkKTsKKwlwOXN0YXRfZnJlZShzdCk7CiAJa2ZyZWUoc3QpOwogCitQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiByZXR1cm4gc2ltcGxlIHNldCBtb3VudFxuIik7CiAJcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOwogCiByZWxlYXNlX3NiOgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggOWU5ZDcwYy4uNTIyNDY5YSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC02LDYxICs2LDkgQEAKIAogaWYgQkxPQ0sKIAotY29uZmlnIEVYVDJfRlMKLQl0cmlzdGF0ZSAiU2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQiCi0JaGVscAotCSAgRXh0MiBpcyBhIHN0YW5kYXJkIExpbnV4IGZpbGUgc3lzdGVtIGZvciBoYXJkIGRpc2tzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0Mi4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KLQotY29uZmlnIEVYVDJfRlNfWEFUVFIKLQlib29sICJFeHQyIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTCi0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMCi0JYm9vbCAiRXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBFWFQyX0ZTX1NFQ1VSSVRZCi0JYm9vbCAiRXh0MiBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTX1hBVFRSCi0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGV4dDIgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgRVhUMl9GU19YSVAKLQlib29sICJFeHQyIGV4ZWN1dGUgaW4gcGxhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEVYVDJfRlMgJiYgTU1VCi0JaGVscAotCSAgRXhlY3V0ZSBpbiBwbGFjZSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuIElmIHlvdQotCSAgZW5hYmxlIHRoaXMgb3B0aW9uLCB5b3UgY2FuIHNlbGVjdCB0byBtb3VudCBibG9jayBkZXZpY2VzIHdoaWNoIGFyZQotCSAgY2FwYWJsZSBvZiB0aGlzIGZlYXR1cmUgd2l0aG91dCB1c2luZyB0aGUgcGFnZSBjYWNoZS4KLQotCSAgSWYgeW91IGRvIG5vdCB1c2UgYSBibG9jayBkZXZpY2UgdGhhdCBpcyBjYXBhYmxlIG9mIHVzaW5nIHRoaXMsCi0JICBvciBpZiB1bnN1cmUsIHNheSBOLgorc291cmNlICJmcy9leHQyL0tjb25maWciCitzb3VyY2UgImZzL2V4dDMvS2NvbmZpZyIKK3NvdXJjZSAiZnMvZXh0NC9LY29uZmlnIgogCiBjb25maWcgRlNfWElQCiAjIGV4ZWN1dGUgaW4gcGxhY2UKQEAgLTY4LDIyNSArMTYsMTYgQEAKIAlkZXBlbmRzIG9uIEVYVDJfRlNfWElQCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBFWFQzX0ZTCi0JdHJpc3RhdGUgIkV4dDMgam91cm5hbGxpbmcgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKLQlzZWxlY3QgSkJECi0JaGVscAotCSAgVGhpcyBpcyB0aGUgam91cm5hbGxpbmcgdmVyc2lvbiBvZiB0aGUgU2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtCi0JICAob2Z0ZW4gY2FsbGVkIGV4dDMpLCB0aGUgZGUgZmFjdG8gc3RhbmRhcmQgTGludXggZmlsZSBzeXN0ZW0KLQkgIChtZXRob2QgdG8gb3JnYW5pemUgZmlsZXMgb24gYSBzdG9yYWdlIGRldmljZSkgZm9yIGhhcmQgZGlza3MuCi0KLQkgIFRoZSBqb3VybmFsbGluZyBjb2RlIGluY2x1ZGVkIGluIHRoaXMgZHJpdmVyIG1lYW5zIHlvdSBkbyBub3QgaGF2ZQotCSAgdG8gcnVuIGUyZnNjayAoZmlsZSBzeXN0ZW0gY2hlY2tlcikgb24geW91ciBmaWxlIHN5c3RlbXMgYWZ0ZXIgYQotCSAgY3Jhc2guICBUaGUgam91cm5hbCBrZWVwcyB0cmFjayBvZiBhbnkgY2hhbmdlcyB0aGF0IHdlcmUgYmVpbmcgbWFkZQotCSAgYXQgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkLCBhbmQgY2FuIGVuc3VyZSB0aGF0IHlvdXIgZmlsZSBzeXN0ZW0KLQkgIGlzIGNvbnNpc3RlbnQgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBsZW5ndGh5IGNoZWNrLgotCi0JICBPdGhlciB0aGFuIGFkZGluZyB0aGUgam91cm5hbCB0byB0aGUgZmlsZSBzeXN0ZW0sIHRoZSBvbi1kaXNrIGZvcm1hdAotCSAgb2YgZXh0MyBpcyBpZGVudGljYWwgdG8gZXh0Mi4gIEl0IGlzIHBvc3NpYmxlIHRvIGZyZWVseSBzd2l0Y2gKLQkgIGJldHdlZW4gdXNpbmcgdGhlIGV4dDMgZHJpdmVyIGFuZCB0aGUgZXh0MiBkcml2ZXIsIGFzIGxvbmcgYXMgdGhlCi0JICBmaWxlIHN5c3RlbSBoYXMgYmVlbiBjbGVhbmx5IHVubW91bnRlZCwgb3IgZTJmc2NrIGlzIHJ1biBvbiB0aGUgZmlsZQotCSAgc3lzdGVtLgotCi0JICBUbyBhZGQgYSBqb3VybmFsIG9uIGFuIGV4aXN0aW5nIGV4dDIgZmlsZSBzeXN0ZW0gb3IgY2hhbmdlIHRoZQotCSAgYmVoYXZpb3Igb2YgZXh0MyBmaWxlIHN5c3RlbXMsIHlvdSBjYW4gdXNlIHRoZSB0dW5lMmZzIHV0aWxpdHkgKCJtYW4KLQkgIHR1bmUyZnMiKS4gIFRvIG1vZGlmeSBhdHRyaWJ1dGVzIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvbiBleHQzCi0JICBmaWxlIHN5c3RlbXMsIHVzZSBjaGF0dHIgKCJtYW4gY2hhdHRyIikuICBZb3UgbmVlZCB0byBiZSB1c2luZwotCSAgZTJmc3Byb2dzIHZlcnNpb24gMS4yMCBvciBsYXRlciBpbiBvcmRlciB0byBjcmVhdGUgZXh0MyBqb3VybmFscwotCSAgKGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMmZzcHJvZ3MvPikuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQzLgotCi1jb25maWcgRVhUM19GU19YQVRUUgotCWJvb2wgIkV4dDMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKLQlkZXBlbmRzIG9uIEVYVDNfRlMKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKLQkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKLQkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi0JICBZb3UgbmVlZCB0aGlzIGZvciBQT1NJWCBBQ0wgc3VwcG9ydCBvbiBleHQzLgotCi1jb25maWcgRVhUM19GU19QT1NJWF9BQ0wKLQlib29sICJFeHQzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgotCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgotCXNlbGVjdCBGU19QT1NJWF9BQ0wKLQloZWxwCi0JICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCi0JICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCi0KLQkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgotCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgotCi0JICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KLQotY29uZmlnIEVYVDNfRlNfU0VDVVJJVFkKLQlib29sICJFeHQzIFNlY3VyaXR5IExhYmVscyIKLQlkZXBlbmRzIG9uIEVYVDNfRlNfWEFUVFIKLQloZWxwCi0JICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKLQkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KLQkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKLQkgIGxhYmVscyBpbiB0aGUgZXh0MyBmaWxlc3lzdGVtLgotCi0JICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCi0JICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCi0KLWNvbmZpZyBFWFQ0X0ZTCi0JdHJpc3RhdGUgIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtIgotCXNlbGVjdCBKQkQyCi0Jc2VsZWN0IENSQzE2Ci0JaGVscAotCSAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uCi0KLQkgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSwKLQkgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGgKLQkgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXQKLQkgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZAotCSAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsCi0JICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWQKLQkgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXQKLQkgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy4KLQotCSAgVGhlIGV4dDQgZmlsZXN5c3RlbSB3aWxsIHN1cHBvcnQgbW91bnRpbmcgYW4gZXh0MwotCSAgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmUgd2lsbCBiZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20KLQkgIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QKLQkgIHBlcmZvcm1hbmNlIGdhaW5zIHdpbGwgcmVxdWlyZSBlbmFibGluZyBleHQ0IGZlYXR1cmVzIGluIHRoZQotCSAgZmlsZXN5c3RlbSwgb3IgZm9ybWF0aW5nIGEgbmV3IGZpbGVzeXN0ZW0gYXMgYW4gZXh0NAotCSAgZmlsZXN5c3RlbSBpbml0aWFsbHkuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0ZGV2LgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgRVhUNERFVl9DT01QQVQKLQlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWhlbHAKLQkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcwotCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKLQkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKLQkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCi0KLQkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKLQkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCi0JICBjaG9zZSBZIGhlcmUuICAgVGhpcyBmZWF0dXJlIHdpbGwgZ28gYXdheSBieSAyLjYuMzEsIHNvCi0JICBwbGVhc2UgYXJyYW5nZSB0byBnZXQgeW91ciB1c2Vyc3BhY2UgcHJvZ3JhbXMgZml4ZWQhCi0KLWNvbmZpZyBFWFQ0X0ZTX1hBVFRSCi0JYm9vbCAiRXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLQkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDQuCi0KLWNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTAotCWJvb2wgIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCi0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBPU0lYIEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgRVhUNF9GU19TRUNVUklUWQotCWJvb2wgIkV4dDQgU2VjdXJpdHkgTGFiZWxzIgotCWRlcGVuZHMgb24gRVhUNF9GU19YQVRUUgotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEpCRAotCXRyaXN0YXRlCi0JaGVscAotCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMuICBJdCBpcwotCSAgY3VycmVudGx5IHVzZWQgYnkgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIGJ1dCBpdCBjb3VsZCBhbHNvIGJlCi0JICB1c2VkIHRvIGFkZCBqb3VybmFsIHN1cHBvcnQgdG8gb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIGJsb2NrCi0JICBkZXZpY2VzIHN1Y2ggYXMgUkFJRCBvciBMVk0uCi0KLQkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUuCi0JICBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQzIHRoZW4geW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBzYXkgTi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRldmljZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgamJkLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0MyBpbnRvIHRoZSBrZXJuZWwsIHlvdQotCSAgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgotCi1jb25maWcgSkJEX0RFQlVHCi0JYm9vbCAiSkJEIChleHQzKSBkZWJ1Z2dpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEpCRCAmJiBERUJVR19GUwotCWhlbHAKLQkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvciBwb3RlbnRpYWxseSBhbnkKLQkgIG90aGVyIGZpbGUgc3lzdGVtL2RldmljZSB1c2luZyBKQkQpLCB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvCi0JICBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIGluIG9yZGVyIHRvCi0JICBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLiAgQnkgZGVmYXVsdCB0aGUKLQkgIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgotCi0JICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCi0JICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIiwgd2hlcmUgTiBpcyBhCi0JICBudW1iZXIgYmV0d2VlbiAxIGFuZCA1LCB0aGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGRlYnVnZ2luZwotCSAgb3V0cHV0IGlzIGdlbmVyYXRlZC4gIFRvIHR1cm4gZGVidWdnaW5nIG9mZiBhZ2FpbiwgZG8KLQkgICJlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIi4KLQotY29uZmlnIEpCRDIKLQl0cmlzdGF0ZQotCXNlbGVjdCBDUkMzMgotCWhlbHAKLQkgIFRoaXMgaXMgYSBnZW5lcmljIGpvdXJuYWxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMgdGhhdCBzdXBwb3J0Ci0JICBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGJsb2NrIG51bWJlcnMuICBJdCBpcyBjdXJyZW50bHkgdXNlZCBieQotCSAgdGhlIGV4dDQgYW5kIE9DRlMyIGZpbGVzeXN0ZW1zLCBidXQgaXQgY291bGQgYWxzbyBiZSB1c2VkIHRvIGFkZAotCSAgam91cm5hbCBzdXBwb3J0IHRvIG90aGVyIGZpbGUgc3lzdGVtcyBvciBibG9jayBkZXZpY2VzIHN1Y2gKLQkgIGFzIFJBSUQgb3IgTFZNLgotCi0JICBJZiB5b3UgYXJlIHVzaW5nIGV4dDQgb3IgT0NGUzIsIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUuCi0JICBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQ0IG9yIE9DRlMyIHRoZW4geW91IHdpbGwKLQkgIHByb2JhYmx5IHdhbnQgdG8gc2F5IE4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkZXZpY2UgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIGpiZDIuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQ0IG9yIE9DRlMyIGludG8gdGhlIGtlcm5lbCwKLQkgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCi0KLWNvbmZpZyBKQkQyX0RFQlVHCi0JYm9vbCAiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBKQkQyICYmIERFQlVHX0ZTCi0JaGVscAotCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0NCBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yCi0JICBwb3RlbnRpYWxseSBhbnkgb3RoZXIgZmlsZXN5c3RlbS9kZXZpY2UgdXNpbmcgSkJEMiksIHRoaXMgb3B0aW9uCi0JICBhbGxvd3MgeW91IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywKLQkgIGluIG9yZGVyIHRvIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuCi0JICBCeSBkZWZhdWx0LCB0aGUgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCi0KLQkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKLQkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIsIHdoZXJlIE4gaXMgYQotCSAgbnVtYmVyIGJldHdlZW4gMSBhbmQgNS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbW9yZSBkZWJ1Z2dpbmcKLQkgIG91dHB1dCBpcyBnZW5lcmF0ZWQuICBUbyB0dXJuIGRlYnVnZ2luZyBvZmYgYWdhaW4sIGRvCi0JICAiZWNobyAwID4gL3N5cy9rZXJuZWwvZGVidWcvamJkMi9qYmQyLWRlYnVnIi4KK3NvdXJjZSAiZnMvamJkL0tjb25maWciCitzb3VyY2UgImZzL2piZDIvS2NvbmZpZyIKIAogY29uZmlnIEZTX01CQ0FDSEUKICMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIgfHwgRVhUM19GU19YQVRUUiB8fCBFWFQ0X0ZTX1hBVFRSCi0JZGVmYXVsdCB5IGlmIEVYVDJfRlM9eSB8fCBFWFQzX0ZTPXkgfHwgRVhUNF9GUz15Ci0JZGVmYXVsdCBtIGlmIEVYVDJfRlM9bSB8fCBFWFQzX0ZTPW0gfHwgRVhUNF9GUz1tCisJZGVmYXVsdCB5IGlmIEVYVDJfRlM9eSAmJiBFWFQyX0ZTX1hBVFRSCisJZGVmYXVsdCB5IGlmIEVYVDNfRlM9eSAmJiBFWFQzX0ZTX1hBVFRSCisJZGVmYXVsdCB5IGlmIEVYVDRfRlM9eSAmJiBFWFQ0X0ZTX1hBVFRSCisJZGVmYXVsdCBtIGlmIEVYVDJfRlNfWEFUVFIgfHwgRVhUM19GU19YQVRUUiB8fCBFWFQ0X0ZTX1hBVFRSCiAKIGNvbmZpZyBSRUlTRVJGU19GUwogCXRyaXN0YXRlICJSZWlzZXJmcyBzdXBwb3J0IgpAQCAtNjY1LDcgKzQwNCw3IEBACiAJICBOIGhlcmUuCiAKIGNvbmZpZyBGVVNFX0ZTCi0JdHJpc3RhdGUgIkZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlIHN1cHBvcnQiCisJdHJpc3RhdGUgIkZVU0UgKEZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlKSBzdXBwb3J0IgogCWhlbHAKIAkgIFdpdGggRlVTRSBpdCBpcyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBmdWxseSBmdW5jdGlvbmFsIGZpbGVzeXN0ZW0KIAkgIGluIGEgdXNlcnNwYWNlIHByb2dyYW0uCkBAIC0xMTY4LDE5NSArOTA3LDcgQEAKIAkgIFRvIGNvbXBpbGUgdGhlIEVGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlZnMuCiAKLWNvbmZpZyBKRkZTMl9GUwotCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSB2MiAoSkZGUzIpIHN1cHBvcnQiCi0Jc2VsZWN0IENSQzMyCi0JZGVwZW5kcyBvbiBNVEQKLQloZWxwCi0JICBKRkZTMiBpcyB0aGUgc2Vjb25kIGdlbmVyYXRpb24gb2YgdGhlIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtCi0JICBmb3IgdXNlIG9uIGRpc2tsZXNzIGVtYmVkZGVkIGRldmljZXMuIEl0IHByb3ZpZGVzIGltcHJvdmVkIHdlYXIKLQkgIGxldmVsbGluZywgY29tcHJlc3Npb24gYW5kIHN1cHBvcnQgZm9yIGhhcmQgbGlua3MuIFlvdSBjYW5ub3QgdXNlCi0JICB0aGlzIG9uIG5vcm1hbCBibG9jayBkZXZpY2VzLCBvbmx5IG9uICdNVEQnIGRldmljZXMuCi0KLQkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgSkZGUzIgaXMKLQkgIGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9qZmZzMi8+LgotCi1jb25maWcgSkZGUzJfRlNfREVCVUcKLQlpbnQgIkpGRlMyIGRlYnVnZ2luZyB2ZXJib3NpdHkgKDAgPSBxdWlldCwgMiA9IG5vaXN5KSIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCAiMCIKLQloZWxwCi0JICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHRoZSBKRkZTMgotCSAgY29kZS4gU2V0IGl0IHRvIHplcm8gZm9yIHVzZSBpbiBwcm9kdWN0aW9uIHN5c3RlbXMuIEZvciBldmFsdWF0aW9uLAotCSAgdGVzdGluZyBhbmQgZGVidWdnaW5nLCBpdCdzIGFkdmlzYWJsZSB0byBzZXQgaXQgdG8gb25lLiBUaGlzIHdpbGwKLQkgIGVuYWJsZSBhIGZldyBhc3NlcnRpb25zIGFuZCB3aWxsIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyBhdCB0aGUKLQkgIEtFUk5fREVCVUcgbG9nbGV2ZWwsIHdoZXJlIHRoZXkgd29uJ3Qgbm9ybWFsbHkgYmUgdmlzaWJsZS4gTGV2ZWwgMgotCSAgaXMgdW5saWtlbHkgdG8gYmUgdXNlZnVsIC0gaXQgZW5hYmxlcyBleHRyYSBkZWJ1Z2dpbmcgaW4gY2VydGFpbgotCSAgYXJlYXMgd2hpY2ggYXQgb25lIHBvaW50IG5lZWRlZCBkZWJ1Z2dpbmcsIGJ1dCB3aGVuIHRoZSBidWdzIHdlcmUKLQkgIGxvY2F0ZWQgYW5kIGZpeGVkLCB0aGUgZGV0YWlsZWQgbWVzc2FnZXMgd2VyZSByZWxlZ2F0ZWQgdG8gbGV2ZWwgMi4KLQotCSAgSWYgcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2YgdGhlCi0JICBtZXNzYWdlcyBhdCBkZWJ1ZyBsZXZlbCAxIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy4KLQotY29uZmlnIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCi0JYm9vbCAiSkZGUzIgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyB0aGUgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQgaW4gSkZGUzIuCi0KLQkgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEpGRlMyIG9uIHRoZSBmb2xsb3dpbmcKLQkgIHR5cGVzIG9mIGZsYXNoIGRldmljZXM6Ci0JICAgIC0gTkFORCBmbGFzaAotCSAgICAtIE5PUiBmbGFzaCB3aXRoIHRyYW5zcGFyZW50IEVDQwotCSAgICAtIERhdGFGbGFzaAotCi1jb25maWcgSkZGUzJfRlNfV0JVRl9WRVJJRlkKLQlib29sICJWZXJpZnkgSkZGUzIgd3JpdGUtYnVmZmVyIHJlYWRzIgotCWRlcGVuZHMgb24gSkZGUzJfRlNfV1JJVEVCVUZGRVIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGNhdXNlcyBKRkZTMiB0byByZWFkIGJhY2sgZXZlcnkgcGFnZSB3cml0dGVuIHRocm91Z2ggdGhlCi0JICB3cml0ZS1idWZmZXIsIGFuZCBjaGVjayBmb3IgZXJyb3JzLgotCi1jb25maWcgSkZGUzJfU1VNTUFSWQotCWJvb2wgIkpGRlMyIHN1bW1hcnkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc3VtbWFyeSBpbmZvcm1hdGlvbgotCSAgZm9yIGZhc3RlciBmaWxlc3lzdGVtIG1vdW50LgotCi0JICBUaGUgc3VtbWFyeSBpbmZvcm1hdGlvbiBjYW4gYmUgaW5zZXJ0ZWQgaW50byBhIGZpbGVzeXN0ZW0gaW1hZ2UKLQkgIGJ5IHRoZSB1dGlsaXR5ICdzdW10b29sJy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgotCi1jb25maWcgSkZGUzJfRlNfWEFUVFIKLQlib29sICJKRkZTMiBYQVRUUiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIEpGRlMyX0ZTX1BPU0lYX0FDTAotCWJvb2wgIkpGRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgotCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKLQlkZWZhdWx0IHkKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBKRkZTMl9GU19TRUNVUklUWQotCWJvb2wgIkpGRlMyIFNlY3VyaXR5IExhYmVscyIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGpmZnMyIGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlib29sICJBZHZhbmNlZCBjb21wcmVzc2lvbiBvcHRpb25zIGZvciBKRkZTMiIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBleHBsaWNpdGx5IGNob29zZSB3aGljaAotCSAgY29tcHJlc3Npb24gbW9kdWxlcywgaWYgYW55LCBhcmUgZW5hYmxlZCBpbiBKRkZTMi4gUmVtb3ZpbmcKLQkgIGNvbXByZXNzb3JzIGNhbiBtZWFuIHlvdSBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlIHN5c3RlbXMsCi0JICBhbmQgZW5hYmxpbmcgZXhwZXJpbWVudGFsIGNvbXByZXNzb3JzIGNhbiBtZWFuIHRoYXQgeW91Ci0JICB3cml0ZSBhIGZpbGUgc3lzdGVtIHdoaWNoIGNhbm5vdCBiZSByZWFkIGJ5IGEgc3RhbmRhcmQga2VybmVsLgotCi0JICBJZiB1bnN1cmUsIHlvdSBzaG91bGQgX2RlZmluaXRlbHlfIHNheSAnTicuCi0KLWNvbmZpZyBKRkZTMl9aTElCCi0JYm9vbCAiSkZGUzIgWkxJQiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0Jc2VsZWN0IFpMSUJfSU5GTEFURQotCXNlbGVjdCBaTElCX0RFRkxBVEUKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgWmxpYiBpcyBkZXNpZ25lZCB0byBiZSBhIGZyZWUsIGdlbmVyYWwtcHVycG9zZSwgbGVnYWxseSB1bmVuY3VtYmVyZWQsCi0JICBsb3NzbGVzcyBkYXRhLWNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIHVzZSBvbiB2aXJ0dWFsbHkgYW55IGNvbXB1dGVyCi0JICBoYXJkd2FyZSBhbmQgb3BlcmF0aW5nIHN5c3RlbS4gU2VlIDxodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvPiBmb3IKLQkgIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0KLQkgIFNheSAnWScgaWYgdW5zdXJlLgotCi1jb25maWcgSkZGUzJfTFpPCi0JYm9vbCAiSkZGUzIgTFpPIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlzZWxlY3QgTFpPX0NPTVBSRVNTCi0Jc2VsZWN0IExaT19ERUNPTVBSRVNTCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIG1pbmlsem8tYmFzZWQgY29tcHJlc3Npb24uIEdlbmVyYWxseSB3b3JrcyBiZXR0ZXIgdGhhbiBabGliLgotCi0JICBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGluIEp1bHksIDIwMDcuIFNheSAnTicgaWYgeW91IG5lZWQKLQkgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBib290bG9hZGVycyBvciBrZXJuZWxzLgotCi1jb25maWcgSkZGUzJfUlRJTUUKLQlib29sICJKRkZTMiBSVElNRSBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFJ0aW1lIGRvZXMgbWFuYWdlIHRvIHJlY29tcHJlc3MgYWxyZWFkeS1jb21wcmVzc2VkIGRhdGEuIFNheSAnWScgaWYgdW5zdXJlLgotCi1jb25maWcgSkZGUzJfUlVCSU4KLQlib29sICJKRkZTMiBSVUJJTiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFJVQklOTUlQUyBhbmQgRFlOUlVCSU4gY29tcHJlc3NvcnMuIFNheSAnTicgaWYgdW5zdXJlLgotCi1jaG9pY2UKLQlwcm9tcHQgIkpGRlMyIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCWRlZmF1bHQgSkZGUzJfQ01PREVfUFJJT1JJVFkKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JaGVscAotCSAgWW91IGNhbiBzZXQgaGVyZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIG9mIEpGRlMyIGZyb20KLQkgIHRoZSBhdmFpbGFibGUgY29tcHJlc3Npb24gbW9kZXMuIERvbid0IHRvdWNoIGlmIHVuc3VyZS4KLQotY29uZmlnIEpGRlMyX0NNT0RFX05PTkUKLQlib29sICJubyBjb21wcmVzc2lvbiIKLQloZWxwCi0JICBVc2VzIG5vIGNvbXByZXNzaW9uLgotCi1jb25maWcgSkZGUzJfQ01PREVfUFJJT1JJVFkKLQlib29sICJwcmlvcml0eSIKLQloZWxwCi0JICBUcmllcyB0aGUgY29tcHJlc3NvcnMgaW4gYSBwcmVkZWZpbmVkIG9yZGVyIGFuZCBjaG9vc2VzIHRoZSBmaXJzdAotCSAgc3VjY2Vzc2Z1bCBvbmUuCi0KLWNvbmZpZyBKRkZTMl9DTU9ERV9TSVpFCi0JYm9vbCAic2l6ZSAoRVhQRVJJTUVOVEFMKSIKLQloZWxwCi0JICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0Ci0JICByZXN1bHQuCi0KLWNvbmZpZyBKRkZTMl9DTU9ERV9GQVZPVVJMWk8KLQlib29sICJGYXZvdXIgTFpPIgotCWhlbHAKLQkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKLQkgIHJlc3VsdCBidXQgZ2l2ZXMgc29tZSBwcmVmZXJlbmNlIHRvIExaTyAod2hpY2ggaGFzIGZhc3RlcgotCSAgZGVjb21wcmVzc2lvbikgYXQgdGhlIGV4cGVuc2Ugb2Ygc2l6ZS4KLQotZW5kY2hvaWNlCi0KK3NvdXJjZSAiZnMvamZmczIvS2NvbmZpZyIKICMgVUJJRlMgRmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbgogc291cmNlICJmcy91Ymlmcy9LY29uZmlnIgogCkBAIC0xOTEzLDE0OCArMTQ2NCw3IEBACiAKIAkgIHNtYm1vdW50IGZyb20gc2FtYmEgMi4yLjAgb3IgbGF0ZXIgc3VwcG9ydHMgdGhpcy4KIAotY29uZmlnIENJRlMKLQl0cmlzdGF0ZSAiQ0lGUyBzdXBwb3J0IChhZHZhbmNlZCBuZXR3b3JrIGZpbGVzeXN0ZW0sIFNNQkZTIHN1Y2Nlc3NvcikiCi0JZGVwZW5kcyBvbiBJTkVUCi0Jc2VsZWN0IE5MUwotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCi0JICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sgCi0JICAoU01CKSBwcm90b2NvbCwgdGhlIG5hdGl2ZSBmaWxlIHNoYXJpbmcgbWVjaGFuaXNtIGZvciBtb3N0IGVhcmx5Ci0JICBQQyBvcGVyYXRpbmcgc3lzdGVtcy4gIFRoZSBDSUZTIHByb3RvY29sIGlzIGZ1bGx5IHN1cHBvcnRlZCBieSAKLQkgIGZpbGUgc2VydmVycyBzdWNoIGFzIFdpbmRvd3MgMjAwMCAoaW5jbHVkaW5nIFdpbmRvd3MgMjAwMywgTlQgNCAgCi0JICBhbmQgV2luZG93cyBYUCkgYXMgd2VsbCBieSBTYW1iYSAod2hpY2ggcHJvdmlkZXMgZXhjZWxsZW50IENJRlMKLQkgIHNlcnZlciBzdXBwb3J0IGZvciBMaW51eCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcykuIExpbWl0ZWQKLQkgIHN1cHBvcnQgZm9yIE9TLzIgYW5kIFdpbmRvd3MgTUUgYW5kIHNpbWlsYXIgc2VydmVycyBpcyBwcm92aWRlZCBhcwotCSAgd2VsbC4KLQotCSAgVGhlIGNpZnMgbW9kdWxlIHByb3ZpZGVzIGFuIGFkdmFuY2VkIG5ldHdvcmsgZmlsZSBzeXN0ZW0KLQkgIGNsaWVudCBmb3IgbW91bnRpbmcgdG8gQ0lGUyBjb21wbGlhbnQgc2VydmVycy4gIEl0IGluY2x1ZGVzCi0JICBzdXBwb3J0IGZvciBERlMgKGhpZXJhcmNoaWNhbCBuYW1lIHNwYWNlKSwgc2VjdXJlIHBlci11c2VyCi0JICBzZXNzaW9uIGVzdGFibGlzaG1lbnQgdmlhIEtlcmJlcm9zIG9yIE5UTE0gb3IgTlRMTXYyLAotCSAgc2FmZSBkaXN0cmlidXRlZCBjYWNoaW5nIChvcGxvY2spLCBvcHRpb25hbCBwYWNrZXQKLQkgIHNpZ25pbmcsIFVuaWNvZGUgYW5kIG90aGVyIGludGVybmF0aW9uYWxpemF0aW9uIGltcHJvdmVtZW50cy4KLQkgIElmIHlvdSBuZWVkIHRvIG1vdW50IHRvIFNhbWJhIG9yIFdpbmRvd3MgZnJvbSB0aGlzIG1hY2hpbmUsIHNheSBZLgotCi1jb25maWcgQ0lGU19TVEFUUwotICAgICAgICBib29sICJDSUZTIHN0YXRpc3RpY3MiCi0gICAgICAgIGRlcGVuZHMgb24gQ0lGUwotICAgICAgICBoZWxwCi0gICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBzdGF0aXN0aWNzIGZvciBlYWNoIHNlcnZlciBzaGFyZQotCSAgbW91bnRlZCBieSB0aGUgY2lmcyBjbGllbnQgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvU3RhdHMKLQotY29uZmlnIENJRlNfU1RBVFMyCi0JYm9vbCAiRXh0ZW5kZWQgc3RhdGlzdGljcyIKLQlkZXBlbmRzIG9uIENJRlNfU1RBVFMKLQloZWxwCi0JICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IG1vcmUgZGV0YWlsZWQgc3RhdGlzdGljcyBvbiBTTUIKLQkgIHJlcXVlc3QgdGltaW5nIHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL0RlYnVnRGF0YSBhbmQgYWxzbwotCSAgYWxsb3cgb3B0aW9uYWwgbG9nZ2luZyBvZiBzbG93IHJlc3BvbnNlcyB0byBkbWVzZyAoZGVwZW5kaW5nIG9uIHRoZQotCSAgdmFsdWUgb2YgL3Byb2MvZnMvY2lmcy9jaWZzRllJLCBzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlscykuCi0JICBUaGVzZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgbWF5IGhhdmUgYSBtaW5vciBlZmZlY3Qgb24gcGVyZm9ybWFuY2UKLQkgIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCi0KLQkgIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9yIGFyZSBkb2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzCi0JICBvciB0dW5pbmcsIHNheSBOLgotCi1jb25maWcgQ0lGU19XRUFLX1BXX0hBU0gKLQlib29sICJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSB3ZWFrZXIgTEFOTUFOIHNlY3VyaXR5IgotCWRlcGVuZHMgb24gQ0lGUwotCWhlbHAKLQkgIE1vZGVybiBDSUZTIHNlcnZlcnMgaW5jbHVkaW5nIFNhbWJhIGFuZCBtb3N0IFdpbmRvd3MgdmVyc2lvbnMKLQkgIChzaW5jZSAxOTk3KSBzdXBwb3J0IHN0cm9uZ2VyIE5UTE0gKGFuZCBldmVuIE5UTE12MiBhbmQgS2VyYmVyb3MpCi0JICBzZWN1cml0eSBtZWNoYW5pc21zLiBUaGVzZSBoYXNoIHRoZSBwYXNzd29yZCBtb3JlIHNlY3VyZWx5Ci0JICB0aGFuIHRoZSBtZWNoYW5pc21zIHVzZWQgaW4gdGhlIG9sZGVyIExBTk1BTiB2ZXJzaW9uIG9mIHRoZQotCSAgU01CIHByb3RvY29sIGJ1dCBMQU5NQU4gYmFzZWQgYXV0aGVudGljYXRpb24gaXMgbmVlZGVkIHRvCi0JICBlc3RhYmxpc2ggc2Vzc2lvbnMgd2l0aCBzb21lIG9sZCBTTUIgc2VydmVycy4KLQotCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHRoZSBjaWZzIG1vZHVsZSB0byBtb3VudCB0byBvbGRlcgotCSAgTEFOTUFOIGJhc2VkIHNlcnZlcnMgc3VjaCBhcyBPUy8yIGFuZCBXaW5kb3dzIDk1LCBidXQgc3VjaAotCSAgbW91bnRzIG1heSBiZSBsZXNzIHNlY3VyZSB0aGFuIG1vdW50cyB1c2luZyBOVExNIG9yIG1vcmUgcmVjZW50Ci0JICBzZWN1cml0eSBtZWNoYW5pc21zIGlmIHlvdSBhcmUgb24gYSBwdWJsaWMgbmV0d29yay4gIFVubGVzcyB5b3UKLQkgIGhhdmUgYSBuZWVkIHRvIGFjY2VzcyBvbGQgU01CIHNlcnZlcnMgKGFuZCBhcmUgb24gYSBwcml2YXRlCi0JICBuZXR3b3JrKSB5b3UgcHJvYmFibHkgd2FudCB0byBzYXkgTi4gIEV2ZW4gaWYgdGhpcyBzdXBwb3J0Ci0JICBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGQsIExBTk1BTiBhdXRoZW50aWNhdGlvbiB3aWxsIG5vdCBiZQotCSAgdXNlZCBhdXRvbWF0aWNhbGx5LiBBdCBydW50aW1lIExBTk1BTiBtb3VudHMgYXJlIGRpc2FibGVkIGJ1dAotCSAgY2FuIGJlIHNldCB0byByZXF1aXJlZCAob3Igb3B0aW9uYWwpIGVpdGhlciBpbgotCSAgL3Byb2MvZnMvY2lmcyAoc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbCkgb3IgdmlhIGFuCi0JICBvcHRpb24gb24gdGhlIG1vdW50IGNvbW1hbmQuIFRoaXMgc3VwcG9ydCBpcyBkaXNhYmxlZCBieQotCSAgZGVmYXVsdCBpbiBvcmRlciB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZG93bmdyYWRlCi0JICBhdHRhY2suCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX1VQQ0FMTAotCSAgYm9vbCAiS2VyYmVyb3MvU1BORUdPIGFkdmFuY2VkIHNlc3Npb24gc2V0dXAiCi0JICBkZXBlbmRzIG9uIENJRlMgJiYgS0VZUwotCSAgaGVscAotCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggYWNjZXNzZXMKLQkgICAgdXNlcnNwYWNlIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBTUE5FR08gcGFja2FnZWQgKFJGQyA0MTc4KQotCSAgICBLZXJiZXJvcyB0aWNrZXRzIHdoaWNoIGFyZSBuZWVkZWQgdG8gbW91bnQgdG8gY2VydGFpbiBzZWN1cmUgc2VydmVycwotCSAgICAoZm9yIHdoaWNoIG1vcmUgc2VjdXJlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkKS4gSWYKLQkgICAgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfWEFUVFIKLSAgICAgICAgYm9vbCAiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzIgotICAgICAgICBkZXBlbmRzIG9uIENJRlMKLSAgICAgICAgaGVscAotICAgICAgICAgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotICAgICAgICAgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKLSAgICAgICAgICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4gIENJRlMgbWFwcyB0aGUgbmFtZSBvZgotICAgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYmVnaW5uaW5nIHdpdGggdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeAotICAgICAgICAgIHRvIFNNQi9DSUZTIEVBcy4gRUFzIGFyZSBzdG9yZWQgb24gV2luZG93cyBzZXJ2ZXJzIHdpdGhvdXQgdGhlCi0gICAgICAgICAgdXNlciBuYW1lc3BhY2UgcHJlZml4LCBidXQgdGhlaXIgbmFtZXMgYXJlIHNlZW4gYnkgTGludXggY2lmcyBjbGllbnRzCi0gICAgICAgICAgcHJlZmFjZWQgYnkgdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeC4gVGhlIHN5c3RlbSBuYW1lc3BhY2UKLSAgICAgICAgICAodXNlZCBieSBzb21lIGZpbGVzeXN0ZW1zIHRvIHN0b3JlIEFDTHMpIGlzIG5vdCBzdXBwb3J0ZWQgYXQKLSAgICAgICAgICB0aGlzIHRpbWUuCi0KLSAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19QT1NJWAotICAgICAgICBib29sICJDSUZTIFBPU0lYIEV4dGVuc2lvbnMiCi0gICAgICAgIGRlcGVuZHMgb24gQ0lGU19YQVRUUgotICAgICAgICBoZWxwCi0gICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgY2lmcyBjbGllbnQgdG8gYXR0ZW1wdCB0bwotCSAgbmVnb3RpYXRlIGEgbmV3ZXIgZGlhbGVjdCB3aXRoIHNlcnZlcnMsIHN1Y2ggYXMgU2FtYmEgMy4wLjUKLQkgIG9yIGxhdGVyLCB0aGF0IG9wdGlvbmFsbHkgY2FuIGhhbmRsZSBtb3JlIFBPU0lYIGxpa2UgKHJhdGhlcgotCSAgdGhhbiBXaW5kb3dzIGxpa2UpIGZpbGUgYmVoYXZpb3IuICBJdCBhbHNvIGVuYWJsZXMKLQkgIHN1cHBvcnQgZm9yIFBPU0lYIEFDTHMgKGdldGZhY2wgYW5kIHNldGZhY2wpIHRvIHNlcnZlcnMKLQkgIChzdWNoIGFzIFNhbWJhIDMuMTAgYW5kIGxhdGVyKSB3aGljaCBjYW4gbmVnb3RpYXRlCi0JICBDSUZTIFBPU0lYIEFDTCBzdXBwb3J0LiAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfREVCVUcyCi0JYm9vbCAiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXMiCi0JZGVwZW5kcyBvbiBDSUZTCi0JaGVscAotCSAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYSBmZXcgbW9yZSBkZWJ1Z2dpbmcgcm91dGluZXMKLQkgICB0byB0aGUgY2lmcyBjb2RlIHdoaWNoIHNsaWdodGx5IGluY3JlYXNlcyB0aGUgc2l6ZSBvZgotCSAgIHRoZSBjaWZzIG1vZHVsZSBhbmQgY2FuIGNhdXNlIGFkZGl0aW9uYWwgbG9nZ2luZyBvZiBkZWJ1ZwotCSAgIG1lc3NhZ2VzIGluIHNvbWUgZXJyb3IgcGF0aHMsIHNsb3dpbmcgcGVyZm9ybWFuY2UuIFRoaXMKLQkgICBvcHRpb24gY2FuIGJlIHR1cm5lZCBvZmYgdW5sZXNzIHlvdSBhcmUgZGVidWdnaW5nCi0JICAgY2lmcyBwcm9ibGVtcy4gIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX0VYUEVSSU1FTlRBTAotCSAgYm9vbCAiQ0lGUyBFeHBlcmltZW50YWwgRmVhdHVyZXMgKEVYUEVSSU1FTlRBTCkiCi0JICBkZXBlbmRzIG9uIENJRlMgJiYgRVhQRVJJTUVOVEFMCi0JICBoZWxwCi0JICAgIEVuYWJsZXMgY2lmcyBmZWF0dXJlcyB1bmRlciB0ZXN0aW5nLiBUaGVzZSBmZWF0dXJlcyBhcmUKLQkgICAgZXhwZXJpbWVudGFsIGFuZCBjdXJyZW50bHkgaW5jbHVkZSBERlMgc3VwcG9ydCBhbmQgZGlyZWN0b3J5IAotCSAgICBjaGFuZ2Ugbm90aWZpY2F0aW9uIGllIGZjbnRsKEZfRE5PVElGWSksIGFzIHdlbGwgYXMgdGhlIHVwY2FsbAotCSAgICBtZWNoYW5pc20gd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBLZXJiZXJvcyBzZXNzaW9uIG5lZ290aWF0aW9uCi0JICAgIGFuZCB1aWQgcmVtYXBwaW5nLiAgU29tZSBvZiB0aGVzZSBmZWF0dXJlcyBhbHNvIG1heSBkZXBlbmQgb24gCi0JICAgIHNldHRpbmcgYSB2YWx1ZSBvZiAxIHRvIHRoZSBwc2V1ZG8tZmlsZSAvcHJvYy9mcy9jaWZzL0V4cGVyaW1lbnRhbAotCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRSAKLQkgICAgZm9yIG1vcmUgZGV0YWlscy4gIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX0RGU19VUENBTEwKLQkgIGJvb2wgIkRGUyBmZWF0dXJlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JICBkZXBlbmRzIG9uIENJRlNfRVhQRVJJTUVOVEFMCi0JICBkZXBlbmRzIG9uIEtFWVMKLQkgIGhlbHAKLQkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGNvbnRhY3RzIHVzZXJzcGFjZQotCSAgICBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgc2VydmVyIG5hbWUgcmVzb2x1dGlvbiAoaG9zdCBuYW1lcyB0bwotCSAgICBJUCBhZGRyZXNzZXMpIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW1wbGljaXQgbW91bnRzIG9mIERGUyBqdW5jdGlvbgotCSAgICBwb2ludHMuIElmIHVuc3VyZSwgc2F5IE4uCitzb3VyY2UgImZzL2NpZnMvS2NvbmZpZyIKIAogY29uZmlnIE5DUF9GUwogCXRyaXN0YXRlICJOQ1AgZmlsZSBzeXN0ZW0gc3VwcG9ydCAodG8gbW91bnQgTmV0V2FyZSB2b2x1bWVzKSIKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXQKaW5kZXggODAxZGIxMy4uY2U5ZmIzZiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZy5iaW5mbXQKKysrIGIvZnMvS2NvbmZpZy5iaW5mbXQKQEAgLTQwLDYgKzQwLDI4IEBACiAKIAkgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcnVuIEZEUElDIEVMRiBiaW5hcmllcyBvbiBNTVUgbGludXggYWxzby4KIAorY29uZmlnIENPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTCisJYm9vbCAiV3JpdGUgRUxGIGNvcmUgZHVtcHMgd2l0aCBwYXJ0aWFsIHNlZ21lbnRzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQklORk1UX0VMRgorCWhlbHAKKwkgIEVMRiBjb3JlIGR1bXAgZmlsZXMgZGVzY3JpYmUgZWFjaCBtZW1vcnkgbWFwcGluZyBvZiB0aGUgY3Jhc2hlZAorCSAgcHJvY2VzcywgYW5kIGNhbiBjb250YWluIG9yIG9taXQgdGhlIG1lbW9yeSBjb250ZW50cyBvZiBlYWNoIG9uZS4KKwkgIFRoZSBjb250ZW50cyBvZiBhbiB1bm1vZGlmaWVkIHRleHQgbWFwcGluZyBhcmUgb21pdHRlZCBieSBkZWZhdWx0LgorCisJICBGb3IgYW4gdW5tb2RpZmllZCB0ZXh0IG1hcHBpbmcgb2YgYW4gRUxGIG9iamVjdCwgaW5jbHVkaW5nIGp1c3QKKwkgIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaWxlIGluIGEgY29yZSBkdW1wIG1ha2VzIGl0IHBvc3NpYmxlIHRvCisJICBpZGVudGlmeSB0aGUgYnVpbGQgSUQgYml0cyBpbiB0aGUgZmlsZSwgd2l0aG91dCBwYXlpbmcgdGhlIGkvbworCSAgY29zdCBhbmQgZGlzayBzcGFjZSB0byBkdW1wIGFsbCB0aGUgdGV4dC4gIEhvd2V2ZXIsIHZlcnNpb25zIG9mCisJICBHREIgYmVmb3JlIDYuNyBhcmUgY29uZnVzZWQgYnkgRUxGIGNvcmUgZHVtcCBmaWxlcyBpbiB0aGlzIGZvcm1hdC4KKworCSAgVGhlIGNvcmUgZHVtcCBiZWhhdmlvciBjYW4gYmUgY29udHJvbGxlZCBwZXIgcHJvY2VzcyB1c2luZworCSAgdGhlIC9wcm9jL1BJRC9jb3JlZHVtcF9maWx0ZXIgcHNldWRvLWZpbGU7IHRoaXMgc2V0dGluZyBpcworCSAgaW5oZXJpdGVkLiAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgZm9yIGRldGFpbHMuCisKKwkgIFRoaXMgY29uZmlnIG9wdGlvbiBjaGFuZ2VzIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgY29yZWR1bXBfZmlsdGVyCisJICBzZWVuIGF0IGJvb3QgdGltZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBCSU5GTVRfRkxBVAogCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciBmbGF0IGJpbmFyaWVzIgogCWRlcGVuZHMgb24gIU1NVSAmJiAoIUZSViB8fCBCUk9LRU4pCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IGQwYzY5ZjUuLjIxNjhjOTAgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCisrKyBiL2ZzL01ha2VmaWxlCkBAIC03MSw3ICs3MSw3IEBACiAjIERvIG5vdCBhZGQgYW55IGZpbGVzeXN0ZW1zIGJlZm9yZSB0aGlzIGxpbmUKIG9iai0kKENPTkZJR19SRUlTRVJGU19GUykJKz0gcmVpc2VyZnMvCiBvYmotJChDT05GSUdfRVhUM19GUykJCSs9IGV4dDMvICMgQmVmb3JlIGV4dDIgc28gcm9vdCBmcyBjYW4gYmUgZXh0Mwotb2JqLSQoQ09ORklHX0VYVDRfRlMpCQkrPSBleHQ0LyAjIEJlZm9yZSBleHQyIHNvIHJvb3QgZnMgY2FuIGJlIGV4dDRkZXYKK29iai0kKENPTkZJR19FWFQ0X0ZTKQkJKz0gZXh0NC8gIyBCZWZvcmUgZXh0MiBzbyByb290IGZzIGNhbiBiZSBleHQ0CiBvYmotJChDT05GSUdfSkJEKQkJKz0gamJkLwogb2JqLSQoQ09ORklHX0pCRDIpCQkrPSBqYmQyLwogb2JqLSQoQ09ORklHX0VYVDJfRlMpCQkrPSBleHQyLwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IGRmZGEwM2QuLjk5Y2YzOTAgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYworKysgYi9mcy9hZnMvZGlyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAkucmVsZWFzZQk9IGFmc19yZWxlYXNlLAogCS5yZWFkZGlyCT0gYWZzX3JlYWRkaXIsCiAJLmxvY2sJCT0gYWZzX2xvY2ssCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jCmluZGV4IDI2YzcxYmEuLjdhODM4MTkgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYworKysgYi9mcy9hdHRyLmMKQEAgLTE1OSwxNyArMTU5LDE3IEBACiAJaWYgKCEoYXR0ci0+aWFfdmFsaWQgJiB+KEFUVFJfS0lMTF9TVUlEIHwgQVRUUl9LSUxMX1NHSUQpKSkKIAkJcmV0dXJuIDA7CiAKKwllcnJvciA9IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoZGVudHJ5LCBhdHRyKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwogCWlmIChpYV92YWxpZCAmIEFUVFJfU0laRSkKIAkJZG93bl93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CiAKIAlpZiAoaW5vZGUtPmlfb3AgJiYgaW5vZGUtPmlfb3AtPnNldGF0dHIpIHsKLQkJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKGRlbnRyeSwgYXR0cik7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGlub2RlLT5pX29wLT5zZXRhdHRyKGRlbnRyeSwgYXR0cik7CisJCWVycm9yID0gaW5vZGUtPmlfb3AtPnNldGF0dHIoZGVudHJ5LCBhdHRyKTsKIAl9IGVsc2UgewogCQllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoZGVudHJ5LCBhdHRyKTsKIAkJaWYgKCFlcnJvcikgewogCQkJaWYgKChpYV92YWxpZCAmIEFUVFJfVUlEICYmIGF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CiAJCQkgICAgKGlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpCmRpZmYgLS1naXQgYS9mcy9iZnMvZGlyLmMgYi9mcy9iZnMvZGlyLmMKaW5kZXggZWQ4ZmViMC4uZGFhZTQ2MyAxMDA2NDQKLS0tIGEvZnMvYmZzL2Rpci5jCisrKyBiL2ZzL2Jmcy9kaXIuYwpAQCAtODAsNiArODAsNyBAQAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBiZnNfcmVhZGRpciwKIAkuZnN5bmMJCT0gZmlsZV9mc3luYywKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBleHRlcm4gdm9pZCBkdW1wX2ltYXAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggYzc2YWZhMi4uOGZjZmEzOSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMTE1NiwxNiArMTE1NiwyNCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hX2R1bXBfc2l6ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIG1tX2ZsYWdzKQogeworI2RlZmluZSBGSUxURVIodHlwZSkJKG1tX2ZsYWdzICYgKDFVTCA8PCBNTUZfRFVNUF8jI3R5cGUpKQorCiAJLyogVGhlIHZtYSBjYW4gYmUgc2V0IHVwIHRvIHRlbGwgdXMgdGhlIGFuc3dlciBkaXJlY3RseS4gICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9BTFdBWVNEVU1QKQogCQlnb3RvIHdob2xlOwogCisJLyogSHVnZXRsYiBtZW1vcnkgY2hlY2sgKi8KKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0hVR0VUTEIpIHsKKwkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSAmJiBGSUxURVIoSFVHRVRMQl9TSEFSRUQpKQorCQkJZ290byB3aG9sZTsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgJiYgRklMVEVSKEhVR0VUTEJfUFJJVkFURSkpCisJCQlnb3RvIHdob2xlOworCX0KKwogCS8qIERvIG5vdCBkdW1wIEkvTyBtYXBwZWQgZGV2aWNlcyBvciBzcGVjaWFsIG1hcHBpbmdzICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9SRVNFUlZFRCkpCiAJCXJldHVybiAwOwogCi0jZGVmaW5lIEZJTFRFUih0eXBlKQkobW1fZmxhZ3MgJiAoMVVMIDw8IE1NRl9EVU1QXyMjdHlwZSkpCi0KIAkvKiBCeSBkZWZhdWx0LCBkdW1wIHNoYXJlZCBtZW1vcnkgaWYgbWFwcGVkIGZyb20gYW4gYW5vbnltb3VzIGZpbGUuICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHsKIAkJaWYgKHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayA9PSAwID8KQEAgLTEzMzMsMjAgKzEzNDEsMTUgQEAKIAlwcnN0YXR1cy0+cHJfcGdycCA9IHRhc2tfcGdycF92bnIocCk7CiAJcHJzdGF0dXMtPnByX3NpZCA9IHRhc2tfc2Vzc2lvbl92bnIocCk7CiAJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCiAJCS8qCi0JCSAqIFRoaXMgaXMgdGhlIHJlY29yZCBmb3IgdGhlIGdyb3VwIGxlYWRlci4gIEFkZCBpbiB0aGUKLQkJICogY3VtdWxhdGl2ZSB0aW1lcyBvZiBwcmV2aW91cyBkZWFkIHRocmVhZHMuICBUaGlzIHRvdGFsCi0JCSAqIHdvbid0IGluY2x1ZGUgdGhlIHRpbWUgb2YgZWFjaCBsaXZlIHRocmVhZCB3aG9zZSBzdGF0ZQotCQkgKiBpcyBpbmNsdWRlZCBpbiB0aGUgY29yZSBkdW1wLiAgVGhlIGZpbmFsIHRvdGFsIHJlcG9ydGVkCi0JCSAqIHRvIG91ciBwYXJlbnQgcHJvY2VzcyB3aGVuIGl0IGNhbGxzIHdhaXQ0IHdpbGwgaW5jbHVkZQotCQkgKiB0aG9zZSBzdW1zIGFzIHdlbGwgYXMgdGhlIGxpdHRsZSBiaXQgbW9yZSB0aW1lIGl0IHRha2VzCi0JCSAqIHRoaXMgYW5kIGVhY2ggb3RoZXIgdGhyZWFkIHRvIGZpbmlzaCBkeWluZyBhZnRlciB0aGUKLQkJICogY29yZSBkdW1wIHN5bmNocm9uaXphdGlvbiBwaGFzZS4KKwkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgSXQgc2hvd3MgdGhlCisJCSAqIGdyb3VwLXdpZGUgdG90YWwsIG5vdCBpdHMgaW5kaXZpZHVhbCB0aHJlYWQgdG90YWwuCiAJCSAqLwotCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZV9hZGQocC0+dXRpbWUsIHAtPnNpZ25hbC0+dXRpbWUpLAotCQkJCSAgICZwcnN0YXR1cy0+cHJfdXRpbWUpOwotCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZV9hZGQocC0+c3RpbWUsIHAtPnNpZ25hbC0+c3RpbWUpLAotCQkJCSAgICZwcnN0YXR1cy0+cHJfc3RpbWUpOworCQl0aHJlYWRfZ3JvdXBfY3B1dGltZShwLCAmY3B1dGltZSk7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lLnV0aW1lLCAmcHJzdGF0dXMtPnByX3V0aW1lKTsKKwkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWUuc3RpbWUsICZwcnN0YXR1cy0+cHJfc3RpbWUpOwogCX0gZWxzZSB7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChwLT51dGltZSwgJnByc3RhdHVzLT5wcl91dGltZSk7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChwLT5zdGltZSwgJnByc3RhdHVzLT5wcl9zdGltZSk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKaW5kZXggMGU4MzY3Yy4uNWI1NDI0YyAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZl9mZHBpYy5jCisrKyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwpAQCAtMTM5MCwyMCArMTM5MCwxNSBAQAogCXByc3RhdHVzLT5wcl9wZ3JwID0gdGFza19wZ3JwX3ZucihwKTsKIAlwcnN0YXR1cy0+cHJfc2lkID0gdGFza19zZXNzaW9uX3ZucihwKTsKIAlpZiAodGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisKIAkJLyoKLQkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgQWRkIGluIHRoZQotCQkgKiBjdW11bGF0aXZlIHRpbWVzIG9mIHByZXZpb3VzIGRlYWQgdGhyZWFkcy4gIFRoaXMgdG90YWwKLQkJICogd29uJ3QgaW5jbHVkZSB0aGUgdGltZSBvZiBlYWNoIGxpdmUgdGhyZWFkIHdob3NlIHN0YXRlCi0JCSAqIGlzIGluY2x1ZGVkIGluIHRoZSBjb3JlIGR1bXAuICBUaGUgZmluYWwgdG90YWwgcmVwb3J0ZWQKLQkJICogdG8gb3VyIHBhcmVudCBwcm9jZXNzIHdoZW4gaXQgY2FsbHMgd2FpdDQgd2lsbCBpbmNsdWRlCi0JCSAqIHRob3NlIHN1bXMgYXMgd2VsbCBhcyB0aGUgbGl0dGxlIGJpdCBtb3JlIHRpbWUgaXQgdGFrZXMKLQkJICogdGhpcyBhbmQgZWFjaCBvdGhlciB0aHJlYWQgdG8gZmluaXNoIGR5aW5nIGFmdGVyIHRoZQotCQkgKiBjb3JlIGR1bXAgc3luY2hyb25pemF0aW9uIHBoYXNlLgorCQkgKiBUaGlzIGlzIHRoZSByZWNvcmQgZm9yIHRoZSBncm91cCBsZWFkZXIuICBJdCBzaG93cyB0aGUKKwkJICogZ3JvdXAtd2lkZSB0b3RhbCwgbm90IGl0cyBpbmRpdmlkdWFsIHRocmVhZCB0b3RhbC4KIAkJICovCi0JCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lX2FkZChwLT51dGltZSwgcC0+c2lnbmFsLT51dGltZSksCi0JCQkJICAgJnByc3RhdHVzLT5wcl91dGltZSk7Ci0JCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lX2FkZChwLT5zdGltZSwgcC0+c2lnbmFsLT5zdGltZSksCi0JCQkJICAgJnByc3RhdHVzLT5wcl9zdGltZSk7CisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKwkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWUudXRpbWUsICZwcnN0YXR1cy0+cHJfdXRpbWUpOworCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZS5zdGltZSwgJnByc3RhdHVzLT5wcl9zdGltZSk7CiAJfSBlbHNlIHsKIAkJY3B1dGltZV90b190aW1ldmFsKHAtPnV0aW1lLCAmcHJzdGF0dXMtPnByX3V0aW1lKTsKIAkJY3B1dGltZV90b190aW1ldmFsKHAtPnN0aW1lLCAmcHJzdGF0dXMtPnByX3N0aW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggZDg0ZjA0NjkuLjg4YTc3NmYgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC04NDAsMTMgKzg0MCwxMiBAQAogICogdG8gYmUgdXNlZCBmb3IgaW50ZXJuYWwgcHVycG9zZXMuICBJZiB5b3UgZXZlciBuZWVkIGl0IC0gcmVjb25zaWRlcgogICogeW91ciBBUEkuCiAgKi8KLXN0cnVjdCBibG9ja19kZXZpY2UgKm9wZW5fYnlfZGV2bnVtKGRldl90IGRldiwgdW5zaWduZWQgbW9kZSkKK3N0cnVjdCBibG9ja19kZXZpY2UgKm9wZW5fYnlfZGV2bnVtKGRldl90IGRldiwgZm1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBiZGdldChkZXYpOwogCWludCBlcnIgPSAtRU5PTUVNOwotCWludCBmbGFncyA9IG1vZGUgJiBGTU9ERV9XUklURSA/IE9fUkRXUiA6IE9fUkRPTkxZOwogCWlmIChiZGV2KQotCQllcnIgPSBibGtkZXZfZ2V0KGJkZXYsIG1vZGUsIGZsYWdzKTsKKwkJZXJyID0gYmxrZGV2X2dldChiZGV2LCBtb2RlKTsKIAlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogYmRldjsKIH0KIApAQCAtOTc1LDkgKzk3NCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGJkX3NldF9zaXplKTsKIAotc3RhdGljIGludCBfX2Jsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGZsYWdzLAotCQkJaW50IGZvcl9wYXJ0KTsKLXN0YXRpYyBpbnQgX19ibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBmb3JfcGFydCk7CitzdGF0aWMgaW50IF9fYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIGludCBmb3JfcGFydCk7CiAKIC8qCiAgKiBiZF9tdXRleCBsb2NraW5nOgpAQCAtOTg2LDcgKzk4Myw3IEBACiAgKiAgICBtdXRleF9sb2NrX25lc3RlZCh3aG9sZS0+YmRfbXV0ZXgsIDEpCiAgKi8KIAotc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZm9yX3BhcnQpCitzdGF0aWMgaW50IF9fYmxrZGV2X2dldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIGludCBmb3JfcGFydCkKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKIAlzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0ID0gTlVMTDsKQEAgLTk5NCw5ICs5OTEsOSBAQAogCWludCBwYXJ0bm87CiAJaW50IHBlcm0gPSAwOwogCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJaWYgKG1vZGUgJiBGTU9ERV9SRUFEKQogCQlwZXJtIHw9IE1BWV9SRUFEOwotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwlpZiAobW9kZSAmIEZNT0RFX1dSSVRFKQogCQlwZXJtIHw9IE1BWV9XUklURTsKIAkvKgogCSAqIGhvb2tzOiAvbi8sIHNlZSAibGF5ZXJpbmcgdmlvbGF0aW9ucyIuCkBAIC0xMDA4LDcgKzEwMDUsNiBAQAogCX0KIAogCXJldCA9IC1FTlhJTzsKLQlmaWxlLT5mX21hcHBpbmcgPSBiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOwogCiAJbG9ja19rZXJuZWwoKTsKIApAQCAtMTAyNyw3ICsxMDIzLDcgQEAKIAkJaWYgKCFwYXJ0bm8pIHsKIAkJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CiAJCQlpZiAoZGlzay0+Zm9wcy0+b3BlbikgewotCQkJCXJldCA9IGRpc2stPmZvcHMtPm9wZW4oYmRldi0+YmRfaW5vZGUsIGZpbGUpOworCQkJCXJldCA9IGRpc2stPmZvcHMtPm9wZW4oYmRldiwgbW9kZSk7CiAJCQkJaWYgKHJldCkKIAkJCQkJZ290byBvdXRfY2xlYXI7CiAJCQl9CkBAIC0xMDQ3LDcgKzEwNDMsNyBAQAogCQkJaWYgKCF3aG9sZSkKIAkJCQlnb3RvIG91dF9jbGVhcjsKIAkJCUJVR19PTihmb3JfcGFydCk7Ci0JCQlyZXQgPSBfX2Jsa2Rldl9nZXQod2hvbGUsIGZpbGUtPmZfbW9kZSwgZmlsZS0+Zl9mbGFncywgMSk7CisJCQlyZXQgPSBfX2Jsa2Rldl9nZXQod2hvbGUsIG1vZGUsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlnb3RvIG91dF9jbGVhcjsKIAkJCWJkZXYtPmJkX2NvbnRhaW5zID0gd2hvbGU7CkBAIC0xMDY4LDcgKzEwNjQsNyBAQAogCQlkaXNrID0gTlVMTDsKIAkJaWYgKGJkZXYtPmJkX2NvbnRhaW5zID09IGJkZXYpIHsKIAkJCWlmIChiZGV2LT5iZF9kaXNrLT5mb3BzLT5vcGVuKSB7Ci0JCQkJcmV0ID0gYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbihiZGV2LT5iZF9pbm9kZSwgZmlsZSk7CisJCQkJcmV0ID0gYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbihiZGV2LCBtb2RlKTsKIAkJCQlpZiAocmV0KQogCQkJCQlnb3RvIG91dF91bmxvY2tfYmRldjsKIAkJCX0KQEAgLTEwODgsNyArMTA4NCw3IEBACiAJYmRldi0+YmRfcGFydCA9IE5VTEw7CiAJYmRldi0+YmRfaW5vZGUtPmlfZGF0YS5iYWNraW5nX2Rldl9pbmZvID0gJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbzsKIAlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKLQkJX19ibGtkZXZfcHV0KGJkZXYtPmJkX2NvbnRhaW5zLCAxKTsKKwkJX19ibGtkZXZfcHV0KGJkZXYtPmJkX2NvbnRhaW5zLCBtb2RlLCAxKTsKIAliZGV2LT5iZF9jb250YWlucyA9IE5VTEw7CiAgb3V0X3VubG9ja19iZGV2OgogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwpAQCAtMTEwNCwyOCArMTEwMCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2Jsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGZsYWdzLAotCQkJaW50IGZvcl9wYXJ0KQoraW50IGJsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCS8qCi0JICogVGhpcyBjcm9ja2xvYWQgaXMgZHVlIHRvIGJhZCBjaG9pY2Ugb2YgLT5vcGVuKCkgdHlwZS4KLQkgKiBJdCB3aWxsIGdvIGF3YXkuCi0JICogRm9yIG5vdywgYmxvY2sgZGV2aWNlIC0+b3BlbigpIHJvdXRpbmUgbXVzdCBfbm90XwotCSAqIGV4YW1pbmUgYW55dGhpbmcgaW4gJ2lub2RlJyBhcmd1bWVudCBleGNlcHQgLT5pX3JkZXYuCi0JICovCi0Jc3RydWN0IGZpbGUgZmFrZV9maWxlID0ge307Ci0Jc3RydWN0IGRlbnRyeSBmYWtlX2RlbnRyeSA9IHt9OwotCWZha2VfZmlsZS5mX21vZGUgPSBtb2RlOwotCWZha2VfZmlsZS5mX2ZsYWdzID0gZmxhZ3M7Ci0JZmFrZV9maWxlLmZfcGF0aC5kZW50cnkgPSAmZmFrZV9kZW50cnk7Ci0JZmFrZV9kZW50cnkuZF9pbm9kZSA9IGJkZXYtPmJkX2lub2RlOwotCi0JcmV0dXJuIGRvX29wZW4oYmRldiwgJmZha2VfZmlsZSwgZm9yX3BhcnQpOwotfQotCi1pbnQgYmxrZGV2X2dldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBtb2RlX3QgbW9kZSwgdW5zaWduZWQgZmxhZ3MpCi17Ci0JcmV0dXJuIF9fYmxrZGV2X2dldChiZGV2LCBtb2RlLCBmbGFncywgMCk7CisJcmV0dXJuIF9fYmxrZGV2X2dldChiZGV2LCBtb2RlLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrZGV2X2dldCk7CiAKQEAgLTExNDIsMjggKzExMTksMzYgQEAKIAkgKi8KIAlmaWxwLT5mX2ZsYWdzIHw9IE9fTEFSR0VGSUxFOwogCisJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkKKwkJZmlscC0+Zl9tb2RlIHw9IEZNT0RFX05ERUxBWTsKKwlpZiAoZmlscC0+Zl9mbGFncyAmIE9fRVhDTCkKKwkJZmlscC0+Zl9tb2RlIHw9IEZNT0RFX0VYQ0w7CisJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSAzKQorCQlmaWxwLT5mX21vZGUgfD0gRk1PREVfV1JJVEVfSU9DVEw7CisKIAliZGV2ID0gYmRfYWNxdWlyZShpbm9kZSk7CiAJaWYgKGJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXMgPSBkb19vcGVuKGJkZXYsIGZpbHAsIDApOworCWZpbHAtPmZfbWFwcGluZyA9IGJkZXYtPmJkX2lub2RlLT5pX21hcHBpbmc7CisKKwlyZXMgPSBibGtkZXZfZ2V0KGJkZXYsIGZpbHAtPmZfbW9kZSk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCWlmICghKGZpbHAtPmZfZmxhZ3MgJiBPX0VYQ0wpICkKKwlpZiAoIShmaWxwLT5mX21vZGUgJiBGTU9ERV9FWENMKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIShyZXMgPSBiZF9jbGFpbShiZGV2LCBmaWxwKSkpCiAJCXJldHVybiAwOwogCi0JYmxrZGV2X3B1dChiZGV2KTsKKwlibGtkZXZfcHV0KGJkZXYsIGZpbHAtPmZfbW9kZSk7CiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBfX2Jsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IGZvcl9wYXJ0KQorc3RhdGljIGludCBfX2Jsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCBpbnQgZm9yX3BhcnQpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGlub2RlICpiZF9pbm9kZSA9IGJkZXYtPmJkX2lub2RlOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICp2aWN0aW0gPSBOVUxMOwogCkBAIC0xMTc4LDcgKzExNjMsNyBAQAogCX0KIAlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgewogCQlpZiAoZGlzay0+Zm9wcy0+cmVsZWFzZSkKLQkJCXJldCA9IGRpc2stPmZvcHMtPnJlbGVhc2UoYmRfaW5vZGUsIE5VTEwpOworCQkJcmV0ID0gZGlzay0+Zm9wcy0+cmVsZWFzZShkaXNrLCBtb2RlKTsKIAl9CiAJaWYgKCFiZGV2LT5iZF9vcGVuZXJzKSB7CiAJCXN0cnVjdCBtb2R1bGUgKm93bmVyID0gZGlzay0+Zm9wcy0+b3duZXI7CkBAIC0xMTk3LDEzICsxMTgyLDEzIEBACiAJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJYmRwdXQoYmRldik7CiAJaWYgKHZpY3RpbSkKLQkJX19ibGtkZXZfcHV0KHZpY3RpbSwgMSk7CisJCV9fYmxrZGV2X3B1dCh2aWN0aW0sIG1vZGUsIDEpOwogCXJldHVybiByZXQ7CiB9CiAKLWludCBibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCitpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0JcmV0dXJuIF9fYmxrZGV2X3B1dChiZGV2LCAwKTsKKwlyZXR1cm4gX19ibGtkZXZfcHV0KGJkZXYsIG1vZGUsIDApOwogfQogRVhQT1JUX1NZTUJPTChibGtkZXZfcHV0KTsKIApAQCAtMTIxMiwxMiArMTE5NywxNiBAQAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBJX0JERVYoZmlscC0+Zl9tYXBwaW5nLT5ob3N0KTsKIAlpZiAoYmRldi0+YmRfaG9sZGVyID09IGZpbHApCiAJCWJkX3JlbGVhc2UoYmRldik7Ci0JcmV0dXJuIGJsa2Rldl9wdXQoYmRldik7CisJcmV0dXJuIGJsa2Rldl9wdXQoYmRldiwgZmlscC0+Zl9tb2RlKTsKIH0KIAogc3RhdGljIGxvbmcgYmxvY2tfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIGJsa2Rldl9pb2N0bChmaWxlLT5mX21hcHBpbmctPmhvc3QsIGZpbGUsIGNtZCwgYXJnKTsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gSV9CREVWKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7CisJZm1vZGVfdCBtb2RlID0gZmlsZS0+Zl9tb2RlOworCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OREVMQVkpCisJCW1vZGUgfD0gRk1PREVfTkRFTEFZX05PVzsKKwlyZXR1cm4gYmxrZGV2X2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzID0gewpAQCAtMTI1Myw3ICsxMjQyLDcgQEAKIAlpbnQgcmVzOwogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXMgPSBibGtkZXZfaW9jdGwoYmRldi0+YmRfaW5vZGUsIE5VTEwsIGNtZCwgYXJnKTsKKwlyZXMgPSBibGtkZXZfaW9jdGwoYmRldiwgMCwgY21kLCBhcmcpOwogCXNldF9mcyhvbGRfZnMpOwogCXJldHVybiByZXM7CiB9CkBAIC0xMjYyLDM5ICsxMjUxLDM5IEBACiAKIC8qKgogICogbG9va3VwX2JkZXYgIC0gbG9va3VwIGEgc3RydWN0IGJsb2NrX2RldmljZSBieSBuYW1lCi0gKiBAcGF0aG5hbWU6CXNwZWNpYWwgZmlsZSByZXByZXNlbnRpbmcgdGhlIGJsb2NrIGRldmljZQorICogQHBhdGg6CXNwZWNpYWwgZmlsZSByZXByZXNlbnRpbmcgdGhlIGJsb2NrIGRldmljZQogICoKICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgYmxvY2tkZXZpY2UgYXQgQHBhdGhuYW1lIGluIHRoZSBjdXJyZW50CiAgKiBuYW1lc3BhY2UgaWYgcG9zc2libGUgYW5kIHJldHVybiBpdC4gIFJldHVybiBFUlJfUFRSKGVycm9yKQogICogb3RoZXJ3aXNlLgogICovCi1zdHJ1Y3QgYmxvY2tfZGV2aWNlICpsb29rdXBfYmRldihjb25zdCBjaGFyICpwYXRoKQorc3RydWN0IGJsb2NrX2RldmljZSAqbG9va3VwX2JkZXYoY29uc3QgY2hhciAqcGF0aG5hbWUpCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IHBhdGggcGF0aDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIXBhdGggfHwgISpwYXRoKQorCWlmICghcGF0aG5hbWUgfHwgISpwYXRobmFtZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQllcnJvciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9GT0xMT1csICZuZCk7CisJZXJyb3IgPSBrZXJuX3BhdGgocGF0aG5hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIAotCWlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBwYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAllcnJvciA9IC1FTk9UQkxLOwogCWlmICghU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkKIAkJZ290byBmYWlsOwogCWVycm9yID0gLUVBQ0NFUzsKLQlpZiAobmQucGF0aC5tbnQtPm1udF9mbGFncyAmIE1OVF9OT0RFVikKKwlpZiAocGF0aC5tbnQtPm1udF9mbGFncyAmIE1OVF9OT0RFVikKIAkJZ290byBmYWlsOwogCWVycm9yID0gLUVOT01FTTsKIAliZGV2ID0gYmRfYWNxdWlyZShpbm9kZSk7CiAJaWYgKCFiZGV2KQogCQlnb3RvIGZhaWw7CiBvdXQ6Ci0JcGF0aF9wdXQoJm5kLnBhdGgpOworCXBhdGhfcHV0KCZwYXRoKTsKIAlyZXR1cm4gYmRldjsKIGZhaWw6CiAJYmRldiA9IEVSUl9QVFIoZXJyb3IpOwpAQCAtMTMwMywzMiArMTI5MiwyOSBAQAogRVhQT1JUX1NZTUJPTChsb29rdXBfYmRldik7CiAKIC8qKgotICogb3Blbl9iZGV2X2V4Y2wgIC0gIG9wZW4gYSBibG9jayBkZXZpY2UgYnkgbmFtZSBhbmQgc2V0IGl0IHVwIGZvciB1c2UKKyAqIG9wZW5fYmRldl9leGNsdXNpdmUgIC0gIG9wZW4gYSBibG9jayBkZXZpY2UgYnkgbmFtZSBhbmQgc2V0IGl0IHVwIGZvciB1c2UKICAqCiAgKiBAcGF0aDoJc3BlY2lhbCBmaWxlIHJlcHJlc2VudGluZyB0aGUgYmxvY2sgZGV2aWNlCi0gKiBAZmxhZ3M6CSVNU19SRE9OTFkgZm9yIG9wZW5pbmcgcmVhZC1vbmx5CisgKiBAbW9kZToJRk1PREVfLi4uIGNvbWJpbmF0aW9uIHRvIHBhc3MgYmUgdXNlZAogICogQGhvbGRlcjoJb3duZXIgZm9yIGV4Y2x1c2lvbgogICoKICAqIE9wZW4gdGhlIGJsb2NrZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgc3BlY2lhbCBmaWxlIGF0IEBwYXRoLCBjbGFpbSBpdAogICogZm9yIHRoZSBAaG9sZGVyLgogICovCi1zdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2JkZXZfZXhjbChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIHZvaWQgKmhvbGRlcikKK3N0cnVjdCBibG9ja19kZXZpY2UgKm9wZW5fYmRldl9leGNsdXNpdmUoY29uc3QgY2hhciAqcGF0aCwgZm1vZGVfdCBtb2RlLCB2b2lkICpob2xkZXIpCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQltb2RlX3QgbW9kZSA9IEZNT0RFX1JFQUQ7CiAJaW50IGVycm9yID0gMDsKIAogCWJkZXYgPSBsb29rdXBfYmRldihwYXRoKTsKIAlpZiAoSVNfRVJSKGJkZXYpKQogCQlyZXR1cm4gYmRldjsKIAotCWlmICghKGZsYWdzICYgTVNfUkRPTkxZKSkKLQkJbW9kZSB8PSBGTU9ERV9XUklURTsKLQllcnJvciA9IGJsa2Rldl9nZXQoYmRldiwgbW9kZSwgMCk7CisJZXJyb3IgPSBibGtkZXZfZ2V0KGJkZXYsIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCWVycm9yID0gLUVBQ0NFUzsKLQlpZiAoIShmbGFncyAmIE1TX1JET05MWSkgJiYgYmRldl9yZWFkX29ubHkoYmRldikpCisJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmIGJkZXZfcmVhZF9vbmx5KGJkZXYpKQogCQlnb3RvIGJsa2Rldl9wdXQ7CiAJZXJyb3IgPSBiZF9jbGFpbShiZGV2LCBob2xkZXIpOwogCWlmIChlcnJvcikKQEAgLTEzMzcsMjYgKzEzMjMsMjcgQEAKIAlyZXR1cm4gYmRldjsKIAkKIGJsa2Rldl9wdXQ6Ci0JYmxrZGV2X3B1dChiZGV2KTsKKwlibGtkZXZfcHV0KGJkZXYsIG1vZGUpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KIAotRVhQT1JUX1NZTUJPTChvcGVuX2JkZXZfZXhjbCk7CitFWFBPUlRfU1lNQk9MKG9wZW5fYmRldl9leGNsdXNpdmUpOwogCiAvKioKLSAqIGNsb3NlX2JkZXZfZXhjbCAgLSAgcmVsZWFzZSBhIGJsb2NrZGV2aWNlIG9wZW5lbiBieSBvcGVuX2JkZXZfZXhjbCgpCisgKiBjbG9zZV9iZGV2X2V4Y2x1c2l2ZSAgLSAgY2xvc2UgYSBibG9ja2RldmljZSBvcGVuZWQgYnkgb3Blbl9iZGV2X2V4Y2x1c2l2ZSgpCiAgKgogICogQGJkZXY6CWJsb2NrZGV2aWNlIHRvIGNsb3NlCisgKiBAbW9kZToJbW9kZSwgbXVzdCBtYXRjaCB0aGF0IHVzZWQgdG8gb3Blbi4KICAqCi0gKiBUaGlzIGlzIHRoZSBjb3VudGVycGFydCB0byBvcGVuX2JkZXZfZXhjbCgpLgorICogVGhpcyBpcyB0aGUgY291bnRlcnBhcnQgdG8gb3Blbl9iZGV2X2V4Y2x1c2l2ZSgpLgogICovCi12b2lkIGNsb3NlX2JkZXZfZXhjbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQordm9pZCBjbG9zZV9iZGV2X2V4Y2x1c2l2ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJYmRfcmVsZWFzZShiZGV2KTsKLQlibGtkZXZfcHV0KGJkZXYpOworCWJsa2Rldl9wdXQoYmRldiwgbW9kZSk7CiB9CiAKLUVYUE9SVF9TWU1CT0woY2xvc2VfYmRldl9leGNsKTsKK0VYUE9SVF9TWU1CT0woY2xvc2VfYmRldl9leGNsdXNpdmUpOwogCiBpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCBhYzc4ZDRjLi42NTY5ZmRhIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtNzYsOCArNzYsNyBAQAogCiB2b2lkIHVubG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKLQljbGVhcl9idWZmZXJfbG9ja2VkKGJoKTsKKwljbGVhcl9iaXRfdW5sb2NrKEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSk7CiAJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAl3YWtlX3VwX2JpdCgmYmgtPmJfc3RhdGUsIEJIX0xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2hhcl9kZXYuYyBiL2ZzL2NoYXJfZGV2LmMKaW5kZXggMjYyZmExMC4uNzAwNjk3YSAxMDA2NDQKLS0tIGEvZnMvY2hhcl9kZXYuYworKysgYi9mcy9jaGFyX2Rldi5jCkBAIC0zODYsMTUgKzM4NiwyMiBAQAogCWNkZXZfcHV0KG5ldyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKKworCXJldCA9IC1FTlhJTzsKIAlmaWxwLT5mX29wID0gZm9wc19nZXQocC0+b3BzKTsKLQlpZiAoIWZpbHAtPmZfb3ApIHsKLQkJY2Rldl9wdXQocCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCWlmIChmaWxwLT5mX29wLT5vcGVuKQorCWlmICghZmlscC0+Zl9vcCkKKwkJZ290byBvdXRfY2Rldl9wdXQ7CisKKwlpZiAoZmlscC0+Zl9vcC0+b3BlbikgewogCQlyZXQgPSBmaWxwLT5mX29wLT5vcGVuKGlub2RlLGZpbHApOwotCWlmIChyZXQpCi0JCWNkZXZfcHV0KHApOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfY2Rldl9wdXQ7CisJfQorCisJcmV0dXJuIDA7CisKKyBvdXRfY2Rldl9wdXQ6CisJY2Rldl9wdXQocCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IDA2ZTUyMWEuLjhmNTI4ZWEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTEsMyArMSwxMSBAQAorVmVyc2lvbiAxLjU1CistLS0tLS0tLS0tLS0KK1ZhcmlvdXMgZml4ZXMgdG8gbWFrZSBkZWxldGUgb2Ygb3BlbiBmaWxlcyBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlCisod2hlbiBkZWxldGUgb2YgYW4gb3BlbiBmaWxlIGZhaWxzIHdlIG1hcmsgdGhlIGZpbGUgYXMgImRlbGV0ZS1vbi1jbG9zZSIKK2luIGEgd2F5IHRoYXQgbW9yZSBzZXJ2ZXJzIGFjY2VwdCwgYnV0IG9ubHkgaWYgd2UgY2FuIGZpcnN0IHJlbmFtZSB0aGUKK2ZpbGUgdG8gYSB0ZW1wb3JhcnkgbmFtZSkuICBBZGQgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIG1vcmUgc2FmZWx5CitoYW5kbGluZyBmY250bChGX1NFVExFQVNFKS4KKwogVmVyc2lvbiAxLjU0CiAtLS0tLS0tLS0tLS0KIEZpeCBwcmVtYXR1cmUgd3JpdGUgZmFpbHVyZSBvbiBjb25nZXN0ZWQgbmV0d29ya3MgKHdlIHdvdWxkIGdpdmUgdXAKQEAgLTEzLDYgKzIxLDcgQEAKIGF1dGhlbnRpY2F0aW9uIChyZXF1aXJlcyBzZXR0aW5nIFNlY3VyaXR5RmxhZ3MgdG8gMHgzMDAzMCB0byBlbmFibGUKIGxhbm1hbiBhbmQgcGxhaW4gdGV4dCB0aG91Z2gpLiAgRml4IHdyaXRlcyB0byBiZSBhdCBjb3JyZWN0IG9mZnNldCB3aGVuCiBmaWxlIGlzIG9wZW4gd2l0aCBPX0FQUEVORCBhbmQgZmlsZSBpcyBvbiBhIGRpcmVjdGlvIChmb3JjZWRpcmV0aW8pIG1vdW50LgorRml4IGJ1ZyBpbiByZXdpbmRpbmcgcmVhZGRpciBkaXJlY3Rvcnkgc2VhcmNoZXMuICBBZGQgbm9kZnMgbW91bnQgb3B0aW9uLgogCiBWZXJzaW9uIDEuNTMKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTAsMCArMSwxNDIgQEAKK2NvbmZpZyBDSUZTCisJdHJpc3RhdGUgIkNJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtLCBTTUJGUyBzdWNjZXNzb3IpIgorCWRlcGVuZHMgb24gSU5FVAorCXNlbGVjdCBOTFMKKwloZWxwCisJICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQorCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrCisJICAoU01CKSBwcm90b2NvbCwgdGhlIG5hdGl2ZSBmaWxlIHNoYXJpbmcgbWVjaGFuaXNtIGZvciBtb3N0IGVhcmx5CisJICBQQyBvcGVyYXRpbmcgc3lzdGVtcy4gIFRoZSBDSUZTIHByb3RvY29sIGlzIGZ1bGx5IHN1cHBvcnRlZCBieQorCSAgZmlsZSBzZXJ2ZXJzIHN1Y2ggYXMgV2luZG93cyAyMDAwIChpbmNsdWRpbmcgV2luZG93cyAyMDAzLCBOVCA0CisJICBhbmQgV2luZG93cyBYUCkgYXMgd2VsbCBieSBTYW1iYSAod2hpY2ggcHJvdmlkZXMgZXhjZWxsZW50IENJRlMKKwkgIHNlcnZlciBzdXBwb3J0IGZvciBMaW51eCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcykuIExpbWl0ZWQKKwkgIHN1cHBvcnQgZm9yIE9TLzIgYW5kIFdpbmRvd3MgTUUgYW5kIHNpbWlsYXIgc2VydmVycyBpcyBwcm92aWRlZCBhcworCSAgd2VsbC4KKworCSAgVGhlIGNpZnMgbW9kdWxlIHByb3ZpZGVzIGFuIGFkdmFuY2VkIG5ldHdvcmsgZmlsZSBzeXN0ZW0KKwkgIGNsaWVudCBmb3IgbW91bnRpbmcgdG8gQ0lGUyBjb21wbGlhbnQgc2VydmVycy4gIEl0IGluY2x1ZGVzCisJICBzdXBwb3J0IGZvciBERlMgKGhpZXJhcmNoaWNhbCBuYW1lIHNwYWNlKSwgc2VjdXJlIHBlci11c2VyCisJICBzZXNzaW9uIGVzdGFibGlzaG1lbnQgdmlhIEtlcmJlcm9zIG9yIE5UTE0gb3IgTlRMTXYyLAorCSAgc2FmZSBkaXN0cmlidXRlZCBjYWNoaW5nIChvcGxvY2spLCBvcHRpb25hbCBwYWNrZXQKKwkgIHNpZ25pbmcsIFVuaWNvZGUgYW5kIG90aGVyIGludGVybmF0aW9uYWxpemF0aW9uIGltcHJvdmVtZW50cy4KKwkgIElmIHlvdSBuZWVkIHRvIG1vdW50IHRvIFNhbWJhIG9yIFdpbmRvd3MgZnJvbSB0aGlzIG1hY2hpbmUsIHNheSBZLgorCitjb25maWcgQ0lGU19TVEFUUworICAgICAgICBib29sICJDSUZTIHN0YXRpc3RpY3MiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGUworICAgICAgICBoZWxwCisgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBzdGF0aXN0aWNzIGZvciBlYWNoIHNlcnZlciBzaGFyZQorCSAgbW91bnRlZCBieSB0aGUgY2lmcyBjbGllbnQgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvU3RhdHMKKworY29uZmlnIENJRlNfU1RBVFMyCisJYm9vbCAiRXh0ZW5kZWQgc3RhdGlzdGljcyIKKwlkZXBlbmRzIG9uIENJRlNfU1RBVFMKKwloZWxwCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IG1vcmUgZGV0YWlsZWQgc3RhdGlzdGljcyBvbiBTTUIKKwkgIHJlcXVlc3QgdGltaW5nIHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL0RlYnVnRGF0YSBhbmQgYWxzbworCSAgYWxsb3cgb3B0aW9uYWwgbG9nZ2luZyBvZiBzbG93IHJlc3BvbnNlcyB0byBkbWVzZyAoZGVwZW5kaW5nIG9uIHRoZQorCSAgdmFsdWUgb2YgL3Byb2MvZnMvY2lmcy9jaWZzRllJLCBzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlscykuCisJICBUaGVzZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgbWF5IGhhdmUgYSBtaW5vciBlZmZlY3Qgb24gcGVyZm9ybWFuY2UKKwkgIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCisKKwkgIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9yIGFyZSBkb2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzCisJICBvciB0dW5pbmcsIHNheSBOLgorCitjb25maWcgQ0lGU19XRUFLX1BXX0hBU0gKKwlib29sICJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSB3ZWFrZXIgTEFOTUFOIHNlY3VyaXR5IgorCWRlcGVuZHMgb24gQ0lGUworCWhlbHAKKwkgIE1vZGVybiBDSUZTIHNlcnZlcnMgaW5jbHVkaW5nIFNhbWJhIGFuZCBtb3N0IFdpbmRvd3MgdmVyc2lvbnMKKwkgIChzaW5jZSAxOTk3KSBzdXBwb3J0IHN0cm9uZ2VyIE5UTE0gKGFuZCBldmVuIE5UTE12MiBhbmQgS2VyYmVyb3MpCisJICBzZWN1cml0eSBtZWNoYW5pc21zLiBUaGVzZSBoYXNoIHRoZSBwYXNzd29yZCBtb3JlIHNlY3VyZWx5CisJICB0aGFuIHRoZSBtZWNoYW5pc21zIHVzZWQgaW4gdGhlIG9sZGVyIExBTk1BTiB2ZXJzaW9uIG9mIHRoZQorCSAgU01CIHByb3RvY29sIGJ1dCBMQU5NQU4gYmFzZWQgYXV0aGVudGljYXRpb24gaXMgbmVlZGVkIHRvCisJICBlc3RhYmxpc2ggc2Vzc2lvbnMgd2l0aCBzb21lIG9sZCBTTUIgc2VydmVycy4KKworCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHRoZSBjaWZzIG1vZHVsZSB0byBtb3VudCB0byBvbGRlcgorCSAgTEFOTUFOIGJhc2VkIHNlcnZlcnMgc3VjaCBhcyBPUy8yIGFuZCBXaW5kb3dzIDk1LCBidXQgc3VjaAorCSAgbW91bnRzIG1heSBiZSBsZXNzIHNlY3VyZSB0aGFuIG1vdW50cyB1c2luZyBOVExNIG9yIG1vcmUgcmVjZW50CisJICBzZWN1cml0eSBtZWNoYW5pc21zIGlmIHlvdSBhcmUgb24gYSBwdWJsaWMgbmV0d29yay4gIFVubGVzcyB5b3UKKwkgIGhhdmUgYSBuZWVkIHRvIGFjY2VzcyBvbGQgU01CIHNlcnZlcnMgKGFuZCBhcmUgb24gYSBwcml2YXRlCisJICBuZXR3b3JrKSB5b3UgcHJvYmFibHkgd2FudCB0byBzYXkgTi4gIEV2ZW4gaWYgdGhpcyBzdXBwb3J0CisJICBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGQsIExBTk1BTiBhdXRoZW50aWNhdGlvbiB3aWxsIG5vdCBiZQorCSAgdXNlZCBhdXRvbWF0aWNhbGx5LiBBdCBydW50aW1lIExBTk1BTiBtb3VudHMgYXJlIGRpc2FibGVkIGJ1dAorCSAgY2FuIGJlIHNldCB0byByZXF1aXJlZCAob3Igb3B0aW9uYWwpIGVpdGhlciBpbgorCSAgL3Byb2MvZnMvY2lmcyAoc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbCkgb3IgdmlhIGFuCisJICBvcHRpb24gb24gdGhlIG1vdW50IGNvbW1hbmQuIFRoaXMgc3VwcG9ydCBpcyBkaXNhYmxlZCBieQorCSAgZGVmYXVsdCBpbiBvcmRlciB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZG93bmdyYWRlCisJICBhdHRhY2suCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1VQQ0FMTAorCSAgYm9vbCAiS2VyYmVyb3MvU1BORUdPIGFkdmFuY2VkIHNlc3Npb24gc2V0dXAiCisJICBkZXBlbmRzIG9uIENJRlMgJiYgS0VZUworCSAgaGVscAorCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggYWNjZXNzZXMKKwkgICAgdXNlcnNwYWNlIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBTUE5FR08gcGFja2FnZWQgKFJGQyA0MTc4KQorCSAgICBLZXJiZXJvcyB0aWNrZXRzIHdoaWNoIGFyZSBuZWVkZWQgdG8gbW91bnQgdG8gY2VydGFpbiBzZWN1cmUgc2VydmVycworCSAgICAoZm9yIHdoaWNoIG1vcmUgc2VjdXJlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkKS4gSWYKKwkgICAgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfWEFUVFIKKyAgICAgICAgYm9vbCAiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzIgorICAgICAgICBkZXBlbmRzIG9uIENJRlMKKyAgICAgICAgaGVscAorICAgICAgICAgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorICAgICAgICAgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKyAgICAgICAgICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4gIENJRlMgbWFwcyB0aGUgbmFtZSBvZgorICAgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYmVnaW5uaW5nIHdpdGggdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeAorICAgICAgICAgIHRvIFNNQi9DSUZTIEVBcy4gRUFzIGFyZSBzdG9yZWQgb24gV2luZG93cyBzZXJ2ZXJzIHdpdGhvdXQgdGhlCisgICAgICAgICAgdXNlciBuYW1lc3BhY2UgcHJlZml4LCBidXQgdGhlaXIgbmFtZXMgYXJlIHNlZW4gYnkgTGludXggY2lmcyBjbGllbnRzCisgICAgICAgICAgcHJlZmFjZWQgYnkgdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeC4gVGhlIHN5c3RlbSBuYW1lc3BhY2UKKyAgICAgICAgICAodXNlZCBieSBzb21lIGZpbGVzeXN0ZW1zIHRvIHN0b3JlIEFDTHMpIGlzIG5vdCBzdXBwb3J0ZWQgYXQKKyAgICAgICAgICB0aGlzIHRpbWUuCisKKyAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19QT1NJWAorICAgICAgICBib29sICJDSUZTIFBPU0lYIEV4dGVuc2lvbnMiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGU19YQVRUUgorICAgICAgICBoZWxwCisgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgY2lmcyBjbGllbnQgdG8gYXR0ZW1wdCB0bworCSAgbmVnb3RpYXRlIGEgbmV3ZXIgZGlhbGVjdCB3aXRoIHNlcnZlcnMsIHN1Y2ggYXMgU2FtYmEgMy4wLjUKKwkgIG9yIGxhdGVyLCB0aGF0IG9wdGlvbmFsbHkgY2FuIGhhbmRsZSBtb3JlIFBPU0lYIGxpa2UgKHJhdGhlcgorCSAgdGhhbiBXaW5kb3dzIGxpa2UpIGZpbGUgYmVoYXZpb3IuICBJdCBhbHNvIGVuYWJsZXMKKwkgIHN1cHBvcnQgZm9yIFBPU0lYIEFDTHMgKGdldGZhY2wgYW5kIHNldGZhY2wpIHRvIHNlcnZlcnMKKwkgIChzdWNoIGFzIFNhbWJhIDMuMTAgYW5kIGxhdGVyKSB3aGljaCBjYW4gbmVnb3RpYXRlCisJICBDSUZTIFBPU0lYIEFDTCBzdXBwb3J0LiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfREVCVUcyCisJYm9vbCAiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXMiCisJZGVwZW5kcyBvbiBDSUZTCisJaGVscAorCSAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYSBmZXcgbW9yZSBkZWJ1Z2dpbmcgcm91dGluZXMKKwkgICB0byB0aGUgY2lmcyBjb2RlIHdoaWNoIHNsaWdodGx5IGluY3JlYXNlcyB0aGUgc2l6ZSBvZgorCSAgIHRoZSBjaWZzIG1vZHVsZSBhbmQgY2FuIGNhdXNlIGFkZGl0aW9uYWwgbG9nZ2luZyBvZiBkZWJ1ZworCSAgIG1lc3NhZ2VzIGluIHNvbWUgZXJyb3IgcGF0aHMsIHNsb3dpbmcgcGVyZm9ybWFuY2UuIFRoaXMKKwkgICBvcHRpb24gY2FuIGJlIHR1cm5lZCBvZmYgdW5sZXNzIHlvdSBhcmUgZGVidWdnaW5nCisJICAgY2lmcyBwcm9ibGVtcy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX0VYUEVSSU1FTlRBTAorCSAgYm9vbCAiQ0lGUyBFeHBlcmltZW50YWwgRmVhdHVyZXMgKEVYUEVSSU1FTlRBTCkiCisJICBkZXBlbmRzIG9uIENJRlMgJiYgRVhQRVJJTUVOVEFMCisJICBoZWxwCisJICAgIEVuYWJsZXMgY2lmcyBmZWF0dXJlcyB1bmRlciB0ZXN0aW5nLiBUaGVzZSBmZWF0dXJlcyBhcmUKKwkgICAgZXhwZXJpbWVudGFsIGFuZCBjdXJyZW50bHkgaW5jbHVkZSBERlMgc3VwcG9ydCBhbmQgZGlyZWN0b3J5CisJICAgIGNoYW5nZSBub3RpZmljYXRpb24gaWUgZmNudGwoRl9ETk9USUZZKSwgYXMgd2VsbCBhcyB0aGUgdXBjYWxsCisJICAgIG1lY2hhbmlzbSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIEtlcmJlcm9zIHNlc3Npb24gbmVnb3RpYXRpb24KKwkgICAgYW5kIHVpZCByZW1hcHBpbmcuICBTb21lIG9mIHRoZXNlIGZlYXR1cmVzIGFsc28gbWF5IGRlcGVuZCBvbgorCSAgICBzZXR0aW5nIGEgdmFsdWUgb2YgMSB0byB0aGUgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwKKwkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUKKwkgICAgZm9yIG1vcmUgZGV0YWlscy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX0RGU19VUENBTEwKKwkgIGJvb2wgIkRGUyBmZWF0dXJlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJICBkZXBlbmRzIG9uIENJRlNfRVhQRVJJTUVOVEFMCisJICBkZXBlbmRzIG9uIEtFWVMKKwkgIGhlbHAKKwkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGNvbnRhY3RzIHVzZXJzcGFjZQorCSAgICBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgc2VydmVyIG5hbWUgcmVzb2x1dGlvbiAoaG9zdCBuYW1lcyB0bworCSAgICBJUCBhZGRyZXNzZXMpIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW1wbGljaXQgbW91bnRzIG9mIERGUyBqdW5jdGlvbgorCSAgICBwb2ludHMuIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9jaWZzL1JFQURNRSBiL2ZzL2NpZnMvUkVBRE1FCmluZGV4IGJkMjM0M2QuLmE0MzlkYzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvUkVBRE1FCisrKyBiL2ZzL2NpZnMvUkVBRE1FCkBAIC00NjMsNiArNDYzLDkgQEAKIAkJd2l0aCBjaWZzIHN0eWxlIG1hbmRhdG9yeSBieXRlIHJhbmdlIGxvY2tzIChhbmQgbW9zdAogCQljaWZzIHNlcnZlcnMgZG8gbm90IHlldCBzdXBwb3J0IHJlcXVlc3RpbmcgYWR2aXNvcnkKIAkJYnl0ZSByYW5nZSBsb2NrcykuCisgbm9kZnMgICAgICAgICAgRGlzYWJsZSBERlMgKGdsb2JhbCBuYW1lIHNwYWNlIHN1cHBvcnQpIGV2ZW4gaWYgdGhlCisJCXNlcnZlciBjbGFpbXMgdG8gc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGhlbHAgd29yayBhcm91bmQKKwkJYSBwcm9ibGVtIHdpdGggcGFyc2luZyBvZiBERlMgcGF0aHMgd2l0aCBTYW1iYSAzLjAuMjQgc2VydmVyLgogIHJlbW91bnQgICAgICAgIHJlbW91bnQgdGhlIHNoYXJlIChvZnRlbiB1c2VkIHRvIGNoYW5nZSBmcm9tIHJvIHRvIHJ3IG1vdW50cwogCSAgICAgICAgb3IgdmljZSB2ZXJzYSkKICBjaWZzYWNsICAgICAgICBSZXBvcnQgbW9kZSBiaXRzIChlLmcuIG9uIHN0YXQpIGJhc2VkIG9uIHRoZSBXaW5kb3dzIEFDTCBmb3IKQEAgLTQ4OCw2ICs0OTEsMTkgQEAKIAkJTm90ZSB0aGF0IHRoaXMgZGlmZmVycyBmcm9tIHRoZSBzaWduIG1vdW50IG9wdGlvbiBpbiB0aGF0IGl0CiAJCWNhdXNlcyBlbmNyeXB0aW9uIG9mIGRhdGEgc2VudCBvdmVyIHRoaXMgbW91bnRlZCBzaGFyZSBidXQgb3RoZXIKIAkJc2hhcmVzIG1vdW50ZWQgdG8gdGhlIHNhbWUgc2VydmVyIGFyZSB1bmFmZmVjdGVkLgorIGxvY2FsbGVhc2UgICAgIFRoaXMgb3B0aW9uIGlzIHJhcmVseSBuZWVkZWQuIEZjbnRsIEZfU0VUTEVBU0UgaXMKKwkJdXNlZCBieSBzb21lIGFwcGxpY2F0aW9ucyBzdWNoIGFzIFNhbWJhIGFuZCBORlN2NCBzZXJ2ZXIgdG8KKwkJY2hlY2sgdG8gc2VlIHdoZXRoZXIgYSBmaWxlIGlzIGNhY2hlYWJsZS4gIENJRlMgaGFzIG5vIHdheQorCQl0byBleHBsaWNpdGx5IHJlcXVlc3QgYSBsZWFzZSwgYnV0IGNhbiBjaGVjayB3aGV0aGVyIGEgZmlsZQorCQlpcyBjYWNoZWFibGUgKG9wbG9ja2VkKS4gIFVuZm9ydHVuYXRlbHksIGV2ZW4gaWYgYSBmaWxlCisJCWlzIG5vdCBvcGxvY2tlZCwgaXQgY291bGQgc3RpbGwgYmUgY2FjaGVhYmxlIChpZSBjaWZzIGNsaWVudAorCQljb3VsZCBncmFudCBmY250bCBsZWFzZXMgaWYgbm8gb3RoZXIgbG9jYWwgcHJvY2Vzc2VzIGFyZSB1c2luZworCQl0aGUgZmlsZSkgZm9yIGNhc2VzIGZvciBleGFtcGxlIHN1Y2ggYXMgd2hlbiB0aGUgc2VydmVyIGRvZXMgbm90CisJCXN1cHBvcnQgb3Bsb2NrcyBhbmQgdGhlIHVzZXIgaXMgc3VyZSB0aGF0IHRoZSBvbmx5IHVwZGF0ZXMgdG8KKwkJdGhlIGZpbGUgd2lsbCBiZSBmcm9tIHRoaXMgY2xpZW50LiBTcGVjaWZ5aW5nIHRoaXMgbW91bnQgb3B0aW9uCisJCXdpbGwgYWxsb3cgdGhlIGNpZnMgY2xpZW50IHRvIGNoZWNrIGZvciBsZWFzZXMgKG9ubHkpIGxvY2FsbHkKKwkJZm9yIGZpbGVzIHdoaWNoIGFyZSBub3Qgb3Bsb2NrZWQgaW5zdGVhZCBvZiBkZW55aW5nIGxlYXNlcworCQlpbiB0aGF0IGNhc2UuIChFWFBFUklNRU5UQUwpCiAgc2VjICAgICAgICAgICAgU2VjdXJpdHkgbW9kZS4gIEFsbG93ZWQgdmFsdWVzIGFyZToKIAkJCW5vbmUJYXR0ZW1wdCB0byBjb25uZWN0aW9uIGFzIGEgbnVsbCB1c2VyIChubyBuYW1lKQogCQkJa3JiNSAgICBVc2UgS2VyYmVyb3MgdmVyc2lvbiA1IGF1dGhlbnRpY2F0aW9uCkBAIC02MzgsNiArNjU0LDkgQEAKIAljaWZzYWNsIHN1cHBvcnQgbmVlZGVkIHRvIHJldHJpZXZlIGFwcHJveGltYXRlZCBtb2RlIGJpdHMgYmFzZWQgb24KIAkJdGhlIGNvbnRlbnRzIG9uIHRoZSBDSUZTIEFDTC4KIAorCWxlYXNlIHN1cHBvcnQ6IGNpZnMgd2lsbCBjaGVjayB0aGUgb3Bsb2NrIHN0YXRlIGJlZm9yZSBjYWxsaW5nIGludG8KKwl0aGUgdmZzIHRvIHNlZSBpZiB3ZSBjYW4gZ3JhbnQgYSBsZWFzZSBvbiBhIGZpbGUuCisKIAlETk9USUZZIGZjbnRsOiBuZWVkZWQgZm9yIHN1cHBvcnQgb2YgZGlyZWN0b3J5IGNoYW5nZSAKIAkJCSAgICBub3RpZmljYXRpb24gYW5kIHBlcmhhcHMgbGF0ZXIgZm9yIGZpbGUgbGVhc2VzKQogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCAyNWVjYmQ1Li5hYzU5MTVkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTI3NSw5ICsyNzUsMTIgQEAKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAotCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fUEVSTSkKLQkJcmV0dXJuIDA7Ci0JZWxzZSAvKiBmaWxlIG1vZGUgbWlnaHQgaGF2ZSBiZWVuIHJlc3RyaWN0ZWQgYXQgbW91bnQgdGltZQorCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fUEVSTSkgeworCQlpZiAoKG1hc2sgJiBNQVlfRVhFQykgJiYgIWV4ZWN1dGVfb2soaW5vZGUpKQorCQkJcmV0dXJuIC1FQUNDRVM7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0gZWxzZSAvKiBmaWxlIG1vZGUgbWlnaHQgaGF2ZSBiZWVuIHJlc3RyaWN0ZWQgYXQgbW91bnQgdGltZQogCQlvbiB0aGUgY2xpZW50IChhYm92ZSBhbmQgYmV5b25kIEFDTCBvbiBzZXJ2ZXJzKSBmb3IKIAkJc2VydmVycyB3aGljaCBkbyBub3Qgc3VwcG9ydCBzZXR0aW5nIGFuZCB2aWV3aW5nIG1vZGUgYml0cywKIAkJc28gYWxsb3dpbmcgY2xpZW50IHRvIGNoZWNrIHBlcm1pc3Npb25zIGlzIHVzZWZ1bCAqLwpAQCAtMzA5LDYgKzMxMiw3IEBACiAJZmlsZSBkYXRhIG9yIG1ldGFkYXRhICovCiAJY2lmc19pbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gZmFsc2U7CiAJY2lmc19pbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSBmYWxzZTsKKwljaWZzX2lub2RlLT5kZWxldGVfcGVuZGluZyA9IGZhbHNlOwogCWNpZnNfaW5vZGUtPnZmc19pbm9kZS5pX2Jsa2JpdHMgPSAxNDsgIC8qIDIqKjE0ID0gQ0lGU19NQVhfTVNHU0laRSAqLwogCiAJLyogQ2FuIG5vdCBzZXQgaV9mbGFncyBoZXJlIC0gdGhleSBnZXQgaW1tZWRpYXRlbHkgb3ZlcndyaXR0ZW4KQEAgLTYxNyw2ICs2MjEsMzcgQEAKIAlyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2Vla191bmxvY2tlZChmaWxlLCBvZmZzZXQsIG9yaWdpbik7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKK3N0YXRpYyBpbnQgY2lmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9uZyBhcmcsIHN0cnVjdCBmaWxlX2xvY2sgKipsZWFzZSkKK3sKKwkvKiBub3RlIHRoYXQgdGhpcyBpcyBjYWxsZWQgYnkgdmZzIHNldGxlYXNlIHdpdGggdGhlIEJLTCBoZWxkCisJICAgYWx0aG91Z2ggSSBkb3VidCB0aGF0IEJLTCBpcyBuZWVkZWQgaGVyZSBpbiBjaWZzICovCisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoIShTX0lTUkVHKGlub2RlLT5pX21vZGUpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBjaGVjayBpZiBmaWxlIGlzIG9wbG9ja2VkICovCisJaWYgKCgoYXJnID09IEZfUkRMQ0spICYmCisJCShDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQpKSB8fAorCSAgICAoKGFyZyA9PSBGX1dSTENLKSAmJgorCQkoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpKSkKKwkJcmV0dXJuIGdlbmVyaWNfc2V0bGVhc2UoZmlsZSwgYXJnLCBsZWFzZSk7CisJZWxzZSBpZiAoQ0lGU19TQihpbm9kZS0+aV9zYiktPnRjb24tPmxvY2FsX2xlYXNlICYmCisJCQkhQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKQorCQkvKiBJZiB0aGUgc2VydmVyIGNsYWltcyB0byBzdXBwb3J0IG9wbG9jayBvbiB0aGlzCisJCSAgIGZpbGUsIHRoZW4gd2Ugc3RpbGwgbmVlZCB0byBjaGVjayBvcGxvY2sgZXZlbgorCQkgICBpZiB0aGUgbG9jYWxfbGVhc2UgbW91bnQgb3B0aW9uIGlzIHNldCwgYnV0IHRoZXJlCisJCSAgIGFyZSBzZXJ2ZXJzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IG9wbG9jayBmb3Igd2hpY2gKKwkJICAgdGhpcyBtb3VudCBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpZiB0aGUgdXNlcgorCQkgICBrbm93cyB0aGF0IHRoZSBmaWxlIHdvbid0IGJlIGNoYW5nZWQgb24gdGhlIHNlcnZlcgorCQkgICBieSBhbnlvbmUgZWxzZSAqLworCQlyZXR1cm4gZ2VuZXJpY19zZXRsZWFzZShmaWxlLCBhcmcsIGxlYXNlKTsKKwllbHNlCisJCXJldHVybiAtRUFHQUlOOworfQorI2VuZGlmCisKIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNpZnNfZnNfdHlwZSA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJjaWZzIiwKQEAgLTY5NSw2ICs3MzAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiAJLmRpcl9ub3RpZnkgPSBjaWZzX2Rpcl9ub3RpZnksCisJLnNldGxlYXNlID0gY2lmc19zZXRsZWFzZSwKICNlbmRpZiAvKiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KIH07CiAKQEAgLTcxNSw2ICs3NTEsNyBAQAogCS5sbHNlZWsgPSBjaWZzX2xsc2VlaywKICNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIAkuZGlyX25vdGlmeSA9IGNpZnNfZGlyX25vdGlmeSwKKwkuc2V0bGVhc2UgPSBjaWZzX3NldGxlYXNlLAogI2VuZGlmIC8qIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCAqLwogfTsKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19maWxlX25vYnJsX29wcyA9IHsKQEAgLTczNSw2ICs3NzIsNyBAQAogCiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiAJLmRpcl9ub3RpZnkgPSBjaWZzX2Rpcl9ub3RpZnksCisJLnNldGxlYXNlID0gY2lmc19zZXRsZWFzZSwKICNlbmRpZiAvKiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KIH07CiAKQEAgLTc1NCw2ICs3OTIsNyBAQAogCS5sbHNlZWsgPSBjaWZzX2xsc2VlaywKICNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIAkuZGlyX25vdGlmeSA9IGNpZnNfZGlyX25vdGlmeSwKKwkuc2V0bGVhc2UgPSBjaWZzX3NldGxlYXNlLAogI2VuZGlmIC8qIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCAqLwogfTsKIApAQCAtNzY1LDYgKzgwNCw3IEBACiAJLmRpcl9ub3RpZnkgPSBjaWZzX2Rpcl9ub3RpZnksCiAjZW5kaWYgLyogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICovCiAJLnVubG9ja2VkX2lvY3RsICA9IGNpZnNfaW9jdGwsCisJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgdm9pZApAQCAtOTQ1LDYgKzk4NSwxMiBAQAogCQkJCXRoZSBjYWxsICovCiAJCQkvKiBtdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ki8KIAkJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisJCQkJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsID09IDApCisJCQkJCWJyZWFrX2xlYXNlKGlub2RlLCBGTU9ERV9SRUFEKTsKKwkJCQllbHNlIGlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkKKwkJCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1dSSVRFKTsKKyNlbmRpZgogCQkJCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwogCQkJCWlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkgewogCQkJCQl3YWl0cmMgPSBmaWxlbWFwX2ZkYXRhd2FpdCgKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGY3YjRhNWMuLjA3NGRlMGIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtMTAxLDUgKzEwMSw1IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGNpZnNfZXhwb3J0X29wczsKICNlbmRpZiAvKiBFWFBFUklNRU5UQUwgKi8KIAotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS41NCIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNTUiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggMGQyMjQ3OS4uYzc5MWU1YiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMjg1LDYgKzI4NSw3IEBACiAJYm9vbCBzZWFsOjE7ICAgICAgLyogdHJhbnNwb3J0IGVuY3J5cHRpb24gZm9yIHRoaXMgbW91bnRlZCBzaGFyZSAqLwogCWJvb2wgdW5peF9leHQ6MTsgIC8qIGlmIGZhbHNlIGRpc2FibGUgTGludXggZXh0ZW5zaW9ucyB0byBDSUZTIHByb3RvY29sCiAJCQkJZm9yIHRoaXMgbW91bnQgZXZlbiBpZiBzZXJ2ZXIgd291bGQgc3VwcG9ydCAqLworCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIChvbmx5KSBvbiBsb2NhbCBzeXN0ZW0gbm90IHJlbW90ZSAqLwogCS8qIEJCIGFkZCBmaWVsZCBmb3IgYmFjayBwb2ludGVyIHRvIHNiIHN0cnVjdChzKT8gKi8KIH07CiAKQEAgLTM1Myw2ICszNTQsNyBAQAogCWJvb2wgY2xpZW50Q2FuQ2FjaGVSZWFkOjE7CS8qIHJlYWQgb3Bsb2NrICovCiAJYm9vbCBjbGllbnRDYW5DYWNoZUFsbDoxOwkvKiByZWFkIGFuZCB3cml0ZWJlaGluZCBvcGxvY2sgKi8KIAlib29sIG9wbG9ja1BlbmRpbmc6MTsKKwlib29sIGRlbGV0ZV9wZW5kaW5nOjE7CQkvKiBERUxFVEVfT05fQ0xPU0UgaXMgc2V0ICovCiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggNmY0ZmZlMS4uODQzYTg1ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTEzMDksNiArMTMwOSw3IEBACiAJCQkJY3B1X3RvX2xlNjQobGUzMl90b19jcHUocFNNQnItPkVuZE9mRmlsZSkpOwogCQkJcGZpbGVfaW5mby0+RW5kT2ZGaWxlID0gcGZpbGVfaW5mby0+QWxsb2NhdGlvblNpemU7CiAJCQlwZmlsZV9pbmZvLT5OdW1iZXJPZkxpbmtzID0gY3B1X3RvX2xlMzIoMSk7CisJCQlwZmlsZV9pbmZvLT5EZWxldGVQZW5kaW5nID0gMDsKIAkJfQogCX0KIApAQCAtMTQxMCw2ICsxNDExLDcgQEAKIAkJICAgIHBmaWxlX2luZm8tPkFsbG9jYXRpb25TaXplID0gcFNNQnItPkFsbG9jYXRpb25TaXplOwogCQkgICAgcGZpbGVfaW5mby0+RW5kT2ZGaWxlID0gcFNNQnItPkVuZE9mRmlsZTsKIAkJICAgIHBmaWxlX2luZm8tPk51bWJlck9mTGlua3MgPSBjcHVfdG9fbGUzMigxKTsKKwkJICAgIHBmaWxlX2luZm8tPkRlbGV0ZVBlbmRpbmcgPSAwOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDRjMTNiY2QuLjcxYjc2NjEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC05MCw2ICs5MCw4IEBACiAJYm9vbCBub2Nhc2U6MTsgICAgIC8qIHJlcXVlc3QgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlbmFtZXMgKi8KIAlib29sIG5vYnJsOjE7ICAgICAgLyogZGlzYWJsZSBzZW5kaW5nIGJ5dGUgcmFuZ2UgbG9ja3MgdG8gc3J2ICovCiAJYm9vbCBzZWFsOjE7ICAgICAgIC8qIHJlcXVlc3QgdHJhbnNwb3J0IGVuY3J5cHRpb24gb24gc2hhcmUgKi8KKwlib29sIG5vZGZzOjE7ICAgICAgLyogRG8gbm90IHJlcXVlc3QgREZTLCBldmVuIGlmIGF2YWlsYWJsZSAqLworCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIG9ubHkgb24gbG9jYWwgc3lzdGVtLCBub3QgcmVtb3RlICovCiAJdW5zaWduZWQgaW50IHJzaXplOwogCXVuc2lnbmVkIGludCB3c2l6ZTsKIAl1bnNpZ25lZCBpbnQgc29ja29wdDsKQEAgLTEyNCw3ICsxMjYsNyBAQAogCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkX2VudHJ5OwogCiAJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCWlmIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykgewogCQkvKiB0aGUgZGVtdXggdGhyZWFkIHdpbGwgZXhpdCBub3JtYWxseQogCQluZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCAqLwogCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwpAQCAtMTg0LDcgKzE4Niw4IEBACiAJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAl1cCgmc2VydmVyLT50Y3BTZW0pOwogCi0Jd2hpbGUgKCgha3RocmVhZF9zaG91bGRfc3RvcCgpKSAmJiAoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0dvb2QpKSB7CisJd2hpbGUgKChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzRXhpdGluZykgJiYKKwkgICAgICAgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNHb29kKSkgewogCQl0cnlfdG9fZnJlZXplKCk7CiAJCWlmIChzZXJ2ZXItPnByb3RvY29sVHlwZSA9PSBJUFY2KSB7CiAJCQlyYyA9IGlwdjZfY29ubmVjdCgmc2VydmVyLT5hZGRyLnNvY2tBZGRyNiwKQEAgLTIwMSw3ICsyMDQsNyBAQAogCQl9IGVsc2UgewogCQkJYXRvbWljX2luYygmdGNwU2VzUmVjb25uZWN0Q291bnQpOwogCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCQlpZiAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWlmIChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzRXhpdGluZykKIAkJCQlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNHb29kOwogCQkJc2VydmVyLT5zZXF1ZW5jZV9udW1iZXIgPSAwOwogCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKQEAgLTM1Niw3ICszNTksNyBAQAogCQkJCUdGUF9LRVJORUwpOwogCiAJc2V0X2ZyZWV6YWJsZSgpOwotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJd2hpbGUgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNFeGl0aW5nKSB7CiAJCWlmICh0cnlfdG9fZnJlZXplKCkpCiAJCQljb250aW51ZTsKIAkJaWYgKGJpZ2J1ZiA9PSBOVUxMKSB7CkBAIC0zOTcsNyArNDAwLDcgQEAKIAkJICAgIGtlcm5lbF9yZWN2bXNnKGNzb2NrZXQsICZzbWJfbXNnLAogCQkJCSZpb3YsIDEsIHBkdV9sZW5ndGgsIDAgLyogQkIgb3RoZXIgZmxhZ3M/ICovKTsKIAotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWlmIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykgewogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpIHsKIAkJCWNGWUkoMSwgKCJSZWNvbm5lY3QgYWZ0ZXIgc2VydmVyIHN0b3BwZWQgcmVzcG9uZGluZyIpKTsKQEAgLTUyMiw3ICs1MjUsNyBAQAogCQkgICAgIHRvdGFsX3JlYWQgKz0gbGVuZ3RoKSB7CiAJCQlsZW5ndGggPSBrZXJuZWxfcmVjdm1zZyhjc29ja2V0LCAmc21iX21zZywgJmlvdiwgMSwKIAkJCQkJCXBkdV9sZW5ndGggLSB0b3RhbF9yZWFkLCAwKTsKLQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwKKwkJCWlmICgoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHx8CiAJCQkgICAgKGxlbmd0aCA9PSAtRUlOVFIpKSB7CiAJCQkJLyogdGhlbiB3aWxsIGV4aXQgKi8KIAkJCQlyZWNvbm5lY3QgPSAyOwpAQCAtNjUxLDE0ICs2NTQsNiBAQAogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJd2FrZV91cF9hbGwoJnNlcnZlci0+cmVzcG9uc2VfcSk7CiAKLQkvKiBkb24ndCBleGl0IHVudGlsIGt0aHJlYWRfc3RvcCBpcyBjYWxsZWQgKi8KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJc2NoZWR1bGUoKTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCX0KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCiAJLyogY2hlY2sgaWYgd2UgaGF2ZSBibG9ja2VkIHJlcXVlc3RzIHRoYXQgbmVlZCB0byBmcmVlICovCiAJLyogTm90ZSB0aGF0IGNpZnNfbWF4X3BlbmRpbmcgaXMgbm9ybWFsbHkgNTAsIGJ1dAogCWNhbiBiZSBzZXQgYXQgbW9kdWxlIGluc3RhbGwgdGltZSB0byBhcyBsaXR0bGUgYXMgdHdvICovCkBAIC03NTUsNiArNzUwLDcgQEAKIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCiAJa2ZyZWUoc2VydmVyLT5ob3N0bmFtZSk7CisJdGFza190b193YWtlID0geGNoZygmc2VydmVyLT50c2ssIE5VTEwpOwogCWtmcmVlKHNlcnZlcik7CiAKIAlsZW5ndGggPSBhdG9taWNfZGVjX3JldHVybigmdGNwU2VzQWxsb2NDb3VudCk7CkBAIC03NjIsNiArNzU4LDE2IEBACiAJCW1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggKyBjaWZzX21pbl9yY3YsCiAJCQkJR0ZQX0tFUk5FTCk7CiAKKwkvKiBpZiBzZXJ2ZXItPnRzayB3YXMgTlVMTCB0aGVuIHdhaXQgZm9yIGEgc2lnbmFsIGJlZm9yZSBleGl0aW5nICovCisJaWYgKCF0YXNrX3RvX3dha2UpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJc2NoZWR1bGUoKTsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIxOCw2ICsxMjI0LDggQEAKIAkJCXZvbC0+c2Z1X2VtdWwgPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3NmdSIsIDUpID09IDApIHsKIAkJCXZvbC0+c2Z1X2VtdWwgPSAwOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub2RmcyIsIDUpID09IDApIHsKKwkJCXZvbC0+bm9kZnMgPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJwb3NpeHBhdGhzIiwgMTApID09IDApIHsKIAkJCXZvbC0+cG9zaXhfcGF0aHMgPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3Bvc2l4cGF0aHMiLCAxMikgPT0gMCkgewpAQCAtMTI2OCw2ICsxMjc2LDEwIEBACiAJCQl2b2wtPm5vX3BzeF9hY2wgPSAwOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub2FjbCIsIDUpID09IDApIHsKIAkJCXZvbC0+bm9fcHN4X2FjbCA9IDE7CisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImxvY2FsbGVhc2UiLCA2KSA9PSAwKSB7CisJCQl2b2wtPmxvY2FsX2xlYXNlID0gMTsKKyNlbmRpZgogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzaWduIiwgNCkgPT0gMCkgewogCQkJdm9sLT5zZWNGbGcgfD0gQ0lGU1NFQ19NVVNUX1NJR047CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInNlYWwiLCA0KSA9PSAwKSB7CkBAIC0xODQ1LDYgKzE4NTcsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitraWxsX2NpZnNkKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwl0YXNrID0geGNoZygmc2VydmVyLT50c2ssIE5VTEwpOworCWlmICh0YXNrKQorCQlmb3JjZV9zaWcoU0lHS0lMTCwgdGFzayk7Cit9CisKIGludAogY2lmc19tb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLAogCSAgIGNoYXIgKm1vdW50X2RhdGEsIGNvbnN0IGNoYXIgKmRldm5hbWUpCkBAIC0yMTY2LDYgKzIxODgsNyBAQAogCQkJICAgZm9yIHRoZSByZXRyeSBmbGFnIGlzIHVzZWQgKi8KIAkJCXRjb24tPnJldHJ5ID0gdm9sdW1lX2luZm8ucmV0cnk7CiAJCQl0Y29uLT5ub2Nhc2UgPSB2b2x1bWVfaW5mby5ub2Nhc2U7CisJCQl0Y29uLT5sb2NhbF9sZWFzZSA9IHZvbHVtZV9pbmZvLmxvY2FsX2xlYXNlOwogCQkJaWYgKHRjb24tPnNlYWwgIT0gdm9sdW1lX2luZm8uc2VhbCkKIAkJCQljRVJST1IoMSwgKCJ0cmFuc3BvcnQgZW5jcnlwdGlvbiBzZXR0aW5nICIKIAkJCQkJICAgImNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHRpZCIpKTsKQEAgLTIxOTcsNiArMjIyMCwxMiBAQAogCQkJCQkJdm9sdW1lX2luZm8uVU5DLAogCQkJCQkJdGNvbiwgY2lmc19zYi0+bG9jYWxfbmxzKTsKIAkJCQkJY0ZZSSgxLCAoIkNJRlMgVGNvbiByYyA9ICVkIiwgcmMpKTsKKwkJCQkJaWYgKHZvbHVtZV9pbmZvLm5vZGZzKSB7CisJCQkJCQl0Y29uLT5GbGFncyAmPQorCQkJCQkJCX5TTUJfU0hBUkVfSVNfSU5fREZTOworCQkJCQkJY0ZZSSgxLCAoIkRGUyBkaXNhYmxlZCAoJWQpIiwKKwkJCQkJCQl0Y29uLT5GbGFncykpOworCQkJCQl9CiAJCQkJfQogCQkJCWlmICghcmMpIHsKIAkJCQkJYXRvbWljX2luYygmcFNlc0luZm8tPmluVXNlKTsKQEAgLTIyMjUsMTQgKzIyNTQsNyBAQAogCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCQlzcnZUY3AtPnRjcFN0YXR1cyA9IENpZnNFeGl0aW5nOwogCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJCWlmIChzcnZUY3AtPnRzaykgewotCQkJCS8qIElmIHdlIGNvdWxkIHZlcmlmeSB0aGF0IGt0aHJlYWRfc3RvcCB3b3VsZAotCQkJCSAgIGFsd2F5cyB3YWtlIHVwIHByb2Nlc3NlcyBibG9ja2VkIGluCi0JCQkJICAgdGNwIGluIHJlY3ZfbWVzZyB0aGVuIHdlIGNvdWxkIHJlbW92ZSB0aGUKLQkJCQkgICBzZW5kX3NpZyBjYWxsICovCi0JCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIHNydlRjcC0+dHNrKTsKLQkJCQlrdGhyZWFkX3N0b3Aoc3J2VGNwLT50c2spOwotCQkJfQorCQkJa2lsbF9jaWZzZChzcnZUY3ApOwogCQl9CiAJCSAvKiBJZiBmaW5kX3VuYyBzdWNjZWVkZWQgdGhlbiByYyA9PSAwIHNvIHdlIGNhbiBub3QgZW5kICovCiAJCWlmICh0Y29uKSAgLyogdXAgYWNjaWRlbnRseSBmcmVlaW5nIHNvbWVvbmUgZWxzZXMgdGNvbiBzdHJ1Y3QgKi8KQEAgLTIyNDUsMTkgKzIyNjcsMTUgQEAKIAkJCQkJdGVtcF9yYyA9IENJRlNTTUJMb2dvZmYoeGlkLCBwU2VzSW5mbyk7CiAJCQkJCS8qIGlmIHRoZSBzb2NrZXRVc2VDb3VudCBpcyBub3cgemVybyAqLwogCQkJCQlpZiAoKHRlbXBfcmMgPT0gLUVTSFVURE9XTikgJiYKLQkJCQkJICAgIChwU2VzSW5mby0+c2VydmVyKSAmJgotCQkJCQkgICAgKHBTZXNJbmZvLT5zZXJ2ZXItPnRzaykpIHsKLQkJCQkJCWZvcmNlX3NpZyhTSUdLSUxMLAotCQkJCQkJCXBTZXNJbmZvLT5zZXJ2ZXItPnRzayk7Ci0JCQkJCQlrdGhyZWFkX3N0b3AocFNlc0luZm8tPnNlcnZlci0+dHNrKTsKLQkJCQkJfQorCQkJCQkgICAgKHBTZXNJbmZvLT5zZXJ2ZXIpKQorCQkJCQkJa2lsbF9jaWZzZChwU2VzSW5mby0+c2VydmVyKTsKIAkJCQl9IGVsc2UgewogCQkJCQljRllJKDEsICgiTm8gc2Vzc2lvbiBvciBiYWQgdGNvbiIpKTsKLQkJCQkJaWYgKChwU2VzSW5mby0+c2VydmVyKSAmJgotCQkJCQkgICAgKHBTZXNJbmZvLT5zZXJ2ZXItPnRzaykpIHsKLQkJCQkJCWZvcmNlX3NpZyhTSUdLSUxMLAotCQkJCQkJCXBTZXNJbmZvLT5zZXJ2ZXItPnRzayk7Ci0JCQkJCQlrdGhyZWFkX3N0b3AocFNlc0luZm8tPnNlcnZlci0+dHNrKTsKKwkJCQkJaWYgKHBTZXNJbmZvLT5zZXJ2ZXIpIHsKKwkJCQkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJCQkJc3J2VGNwLT50Y3BTdGF0dXMgPSBDaWZzRXhpdGluZzsKKwkJCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQkJCQlraWxsX2NpZnNkKHBTZXNJbmZvLT5zZXJ2ZXIpOwogCQkJCQl9CiAJCQkJfQogCQkJCXNlc0luZm9GcmVlKHBTZXNJbmZvKTsKQEAgLTM1NDQsNyArMzU2Miw2IEBACiAJaW50IHJjID0gMDsKIAlpbnQgeGlkOwogCXN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzID0gTlVMTDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNpZnNkX3Rhc2s7CiAJY2hhciAqdG1wOwogCiAJeGlkID0gR2V0WGlkKCk7CkBAIC0zNTYwLDcgKzM1NzcsNiBAQAogCQl0Y29uSW5mb0ZyZWUoY2lmc19zYi0+dGNvbik7CiAJCWlmICgoc2VzKSAmJiAoc2VzLT5zZXJ2ZXIpKSB7CiAJCQkvKiBzYXZlIG9mZiB0YXNrIHNvIHdlIGRvIG5vdCByZWZlciB0byBzZXMgbGF0ZXIgKi8KLQkJCWNpZnNkX3Rhc2sgPSBzZXMtPnNlcnZlci0+dHNrOwogCQkJY0ZZSSgxLCAoIkFib3V0IHRvIGRvIFNNQkxvZ29mZiAiKSk7CiAJCQlyYyA9IENJRlNTTUJMb2dvZmYoeGlkLCBzZXMpOwogCQkJaWYgKHJjID09IC1FQlVTWSkgewpAQCAtMzU2OCwxMCArMzU4NCw4IEBACiAJCQkJcmV0dXJuIDA7CiAJCQl9IGVsc2UgaWYgKHJjID09IC1FU0hVVERPV04pIHsKIAkJCQljRllJKDEsICgiV2FraW5nIHVwIHNvY2tldCBieSBzZW5kaW5nIHNpZ25hbCIpKTsKLQkJCQlpZiAoY2lmc2RfdGFzaykgewotCQkJCQlmb3JjZV9zaWcoU0lHS0lMTCwgY2lmc2RfdGFzayk7Ci0JCQkJCWt0aHJlYWRfc3RvcChjaWZzZF90YXNrKTsKLQkJCQl9CisJCQkJaWYgKHNlcy0+c2VydmVyKQorCQkJCQlraWxsX2NpZnNkKHNlcy0+c2VydmVyKTsKIAkJCQlyYyA9IDA7CiAJCQl9IC8qIGVsc2UgLSB3ZSBoYXZlIGFuIHNtYiBzZXNzaW9uCiAJCQkJbGVmdCBvbiB0aGlzIHNvY2tldCBkbyBub3Qga2lsbCBjaWZzZCAqLwpAQCAtMzcwMSw3ICszNzE1LDkgQEAKIAkJY0VSUk9SKDEsICgiU2VuZCBlcnJvciBpbiBTZXNzU2V0dXAgPSAlZCIsIHJjKSk7CiAJfSBlbHNlIHsKIAkJY0ZZSSgxLCAoIkNJRlMgU2Vzc2lvbiBFc3RhYmxpc2hlZCBzdWNjZXNzZnVsbHkiKSk7CisJCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJCXBTZXNJbmZvLT5zdGF0dXMgPSBDaWZzR29vZDsKKwkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJfQogCiBzc19lcnJfZXhpdDoKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggYzRhOGEwNi4uNjJkOGJkOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTE3OTEsNyArMTc5MSw3IEBACiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCWlmICghcGFnZXZlY19hZGQocGxydV9wdmVjLCBwYWdlKSkKLQkJCV9fcGFnZXZlY19scnVfYWRkKHBscnVfcHZlYyk7CisJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKHBscnVfcHZlYyk7CiAJCWRhdGEgKz0gUEFHRV9DQUNIRV9TSVpFOwogCX0KIAlyZXR1cm47CkBAIC0xOTI1LDcgKzE5MjUsNyBAQAogCQlieXRlc19yZWFkID0gMDsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCiAvKiBuZWVkIHRvIGZyZWUgc21iX3JlYWRfZGF0YSBidWYgYmVmb3JlIGV4aXQgKi8KIAlpZiAoc21iX3JlYWRfZGF0YSkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IGE4YzgzMzMuLmQ1NGZhOGEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTUwNiw2ICs1MDYsNyBAQAogCWlub2RlID0gKnBpbm9kZTsKIAljaWZzSW5mbyA9IENJRlNfSShpbm9kZSk7CiAJY2lmc0luZm8tPmNpZnNBdHRycyA9IGF0dHI7CisJY2lmc0luZm8tPmRlbGV0ZV9wZW5kaW5nID0gcGZpbmREYXRhLT5EZWxldGVQZW5kaW5nID8gdHJ1ZSA6IGZhbHNlOwogCWNGWUkoMSwgKCJPbGQgdGltZSAlbGQiLCBjaWZzSW5mby0+dGltZSkpOwogCWNpZnNJbmZvLT50aW1lID0gamlmZmllczsKIAljRllJKDEsICgiTmV3IHRpbWUgJWxkIiwgY2lmc0luZm8tPnRpbWUpKTsKQEAgLTc3Miw2MyArNzczLDEwNiBAQAogICogYW55dGhpbmcgZWxzZS4KICAqLwogc3RhdGljIGludAotY2lmc19yZW5hbWVfcGVuZGluZ19kZWxldGUoY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgeGlkKQorY2lmc19yZW5hbWVfcGVuZGluZ19kZWxldGUoY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCB4aWQpCiB7CiAJaW50IG9wbG9jayA9IDA7CiAJaW50IHJjOwogCV9fdTE2IG5ldGZpZDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzSW5vZGUgPSBDSUZTX0koaW5vZGUpOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uID0gY2lmc19zYi0+dGNvbjsKLQlfX3UzMiBkb3NhdHRyOwotCUZJTEVfQkFTSUNfSU5GTyAqaW5mb19idWY7CisJX191MzIgZG9zYXR0ciwgb3JpZ2F0dHI7CisJRklMRV9CQVNJQ19JTkZPICppbmZvX2J1ZiA9IE5VTEw7CiAKIAlyYyA9IENJRlNTTUJPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBGSUxFX09QRU4sCi0JCQkgREVMRVRFfEZJTEVfV1JJVEVfQVRUUklCVVRFUywKLQkJCSBDUkVBVEVfTk9UX0RJUnxDUkVBVEVfREVMRVRFX09OX0NMT1NFLAorCQkJIERFTEVURXxGSUxFX1dSSVRFX0FUVFJJQlVURVMsIENSRUFURV9OT1RfRElSLAogCQkJICZuZXRmaWQsICZvcGxvY2ssIE5VTEwsIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCSBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAlpZiAocmMgIT0gMCkKIAkJZ290byBvdXQ7CiAKLQkvKiBzZXQgQVRUUl9ISURERU4gYW5kIGNsZWFyIEFUVFJfUkVBRE9OTFkgKi8KLQljaWZzSW5vZGUgPSBDSUZTX0koaW5vZGUpOwotCWRvc2F0dHIgPSBjaWZzSW5vZGUtPmNpZnNBdHRycyAmIH5BVFRSX1JFQURPTkxZOworCW9yaWdhdHRyID0gY2lmc0lub2RlLT5jaWZzQXR0cnM7CisJaWYgKG9yaWdhdHRyID09IDApCisJCW9yaWdhdHRyIHw9IEFUVFJfTk9STUFMOworCisJZG9zYXR0ciA9IG9yaWdhdHRyICYgfkFUVFJfUkVBRE9OTFk7CiAJaWYgKGRvc2F0dHIgPT0gMCkKIAkJZG9zYXR0ciB8PSBBVFRSX05PUk1BTDsKIAlkb3NhdHRyIHw9IEFUVFJfSElEREVOOwogCi0JaW5mb19idWYgPSBremFsbG9jKHNpemVvZigqaW5mb19idWYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaW5mb19idWYgPT0gTlVMTCkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2Nsb3NlOworCS8qIHNldCBBVFRSX0hJRERFTiBhbmQgY2xlYXIgQVRUUl9SRUFET05MWSwgYnV0IG9ubHkgaWYgbmVlZGVkICovCisJaWYgKGRvc2F0dHIgIT0gb3JpZ2F0dHIpIHsKKwkJaW5mb19idWYgPSBremFsbG9jKHNpemVvZigqaW5mb19idWYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGluZm9fYnVmID09IE5VTEwpIHsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisJCWluZm9fYnVmLT5BdHRyaWJ1dGVzID0gY3B1X3RvX2xlMzIoZG9zYXR0cik7CisJCXJjID0gQ0lGU1NNQlNldEZpbGVJbmZvKHhpZCwgdGNvbiwgaW5mb19idWYsIG5ldGZpZCwKKwkJCQkJY3VycmVudC0+dGdpZCk7CisJCS8qIGFsdGhvdWdoIHdlIHdvdWxkIGxpa2UgdG8gbWFyayB0aGUgZmlsZSBoaWRkZW4KKyAJCSAgIGlmIHRoYXQgZmFpbHMgd2Ugd2lsbCBzdGlsbCB0cnkgdG8gcmVuYW1lIGl0ICovCisJCWlmIChyYyAhPSAwKQorCQkJY2lmc0lub2RlLT5jaWZzQXR0cnMgPSBkb3NhdHRyOworCQllbHNlCisJCQlkb3NhdHRyID0gb3JpZ2F0dHI7IC8qIHNpbmNlIG5vdCBhYmxlIHRvIGNoYW5nZSB0aGVtICovCiAJfQotCWluZm9fYnVmLT5BdHRyaWJ1dGVzID0gY3B1X3RvX2xlMzIoZG9zYXR0cik7Ci0JcmMgPSBDSUZTU01CU2V0RmlsZUluZm8oeGlkLCB0Y29uLCBpbmZvX2J1ZiwgbmV0ZmlkLCBjdXJyZW50LT50Z2lkKTsKLQlrZnJlZShpbmZvX2J1Zik7Ci0JaWYgKHJjICE9IDApCi0JCWdvdG8gb3V0X2Nsb3NlOwotCWNpZnNJbm9kZS0+Y2lmc0F0dHJzID0gZG9zYXR0cjsKIAotCS8qIHNpbGx5LXJlbmFtZSB0aGUgZmlsZSAqLwotCUNJRlNTTUJSZW5hbWVPcGVuRmlsZSh4aWQsIHRjb24sIG5ldGZpZCwgTlVMTCwgY2lmc19zYi0+bG9jYWxfbmxzLAorCS8qIHJlbmFtZSB0aGUgZmlsZSAqLworCXJjID0gQ0lGU1NNQlJlbmFtZU9wZW5GaWxlKHhpZCwgdGNvbiwgbmV0ZmlkLCBOVUxMLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQkgICAgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCWlmIChyYyAhPSAwKSB7CisJCXJjID0gLUVUWFRCU1k7CisJCWdvdG8gdW5kb19zZXRhdHRyOworCX0KIAotCS8qIHNldCBERUxFVEVfT05fQ0xPU0UgKi8KLQlyYyA9IENJRlNTTUJTZXRGaWxlRGlzcG9zaXRpb24oeGlkLCB0Y29uLCB0cnVlLCBuZXRmaWQsIGN1cnJlbnQtPnRnaWQpOwotCi0JLyoKLQkgKiBzb21lIHNhbWJhIHZlcnNpb25zIHJldHVybiAtRU5PRU5UIHdoZW4gd2UgdHJ5IHRvIHNldCB0aGUgZmlsZQotCSAqIGRpc3Bvc2l0aW9uIGhlcmUuIExpa2VseSBhIHNhbWJhIGJ1ZywgYnV0IHdvcmsgYXJvdW5kIGl0IGZvciBub3cKLQkgKi8KLQlpZiAocmMgPT0gLUVOT0VOVCkKLQkJcmMgPSAwOworCS8qIHRyeSB0byBzZXQgREVMRVRFX09OX0NMT1NFICovCisJaWYgKCFjaWZzSW5vZGUtPmRlbGV0ZV9wZW5kaW5nKSB7CisJCXJjID0gQ0lGU1NNQlNldEZpbGVEaXNwb3NpdGlvbih4aWQsIHRjb24sIHRydWUsIG5ldGZpZCwKKwkJCQkJICAgICAgIGN1cnJlbnQtPnRnaWQpOworCQkvKgorCQkgKiBzb21lIHNhbWJhIHZlcnNpb25zIHJldHVybiAtRU5PRU5UIHdoZW4gd2UgdHJ5IHRvIHNldCB0aGUKKwkJICogZmlsZSBkaXNwb3NpdGlvbiBoZXJlLiBMaWtlbHkgYSBzYW1iYSBidWcsIGJ1dCB3b3JrIGFyb3VuZAorCQkgKiBpdCBmb3Igbm93LiBUaGlzIG1lYW5zIHRoYXQgc29tZSBjaWZzWFhYIGZpbGVzIG1heSBoYW5nCisJCSAqIGFyb3VuZCBhZnRlciB0aGV5IHNob3VsZG4ndC4KKwkJICoKKwkJICogQkI6IHJlbW92ZSB0aGlzIGhhY2sgYWZ0ZXIgbW9yZSBzZXJ2ZXJzIGhhdmUgdGhlIGZpeAorCQkgKi8KKwkJaWYgKHJjID09IC1FTk9FTlQpCisJCQlyYyA9IDA7CisJCWVsc2UgaWYgKHJjICE9IDApIHsKKwkJCXJjID0gLUVUWFRCU1k7CisJCQlnb3RvIHVuZG9fcmVuYW1lOworCQl9CisJCWNpZnNJbm9kZS0+ZGVsZXRlX3BlbmRpbmcgPSB0cnVlOworCX0KIAogb3V0X2Nsb3NlOgogCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIG5ldGZpZCk7CiBvdXQ6CisJa2ZyZWUoaW5mb19idWYpOwogCXJldHVybiByYzsKKworCS8qCisJICogcmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS4gRG9uJ3QgYm90aGVyCisJICogZGVhbGluZyB3aXRoIGVycm9ycyBoZXJlIHNpbmNlIHdlIGNhbid0IGRvIGFueXRoaW5nIGFib3V0CisJICogdGhlbSBhbnl3YXkuCisJICovCit1bmRvX3JlbmFtZToKKwlDSUZTU01CUmVuYW1lT3BlbkZpbGUoeGlkLCB0Y29uLCBuZXRmaWQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCisJCQkJCSAgICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Cit1bmRvX3NldGF0dHI6CisJaWYgKGRvc2F0dHIgIT0gb3JpZ2F0dHIpIHsKKwkJaW5mb19idWYtPkF0dHJpYnV0ZXMgPSBjcHVfdG9fbGUzMihvcmlnYXR0cik7CisJCWlmICghQ0lGU1NNQlNldEZpbGVJbmZvKHhpZCwgdGNvbiwgaW5mb19idWYsIG5ldGZpZCwKKwkJCQkJY3VycmVudC0+dGdpZCkpCisJCQljaWZzSW5vZGUtPmNpZnNBdHRycyA9IG9yaWdhdHRyOworCX0KKworCWdvdG8gb3V0X2Nsb3NlOwogfQogCiBpbnQgY2lmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKQEAgLTg3OCw3ICs5MjIsNyBAQAogCX0gZWxzZSBpZiAocmMgPT0gLUVOT0VOVCkgewogCQlkX2Ryb3AoZGVudHJ5KTsKIAl9IGVsc2UgaWYgKHJjID09IC1FVFhUQlNZKSB7Ci0JCXJjID0gY2lmc19yZW5hbWVfcGVuZGluZ19kZWxldGUoZnVsbF9wYXRoLCBpbm9kZSwgeGlkKTsKKwkJcmMgPSBjaWZzX3JlbmFtZV9wZW5kaW5nX2RlbGV0ZShmdWxsX3BhdGgsIGRlbnRyeSwgeGlkKTsKIAkJaWYgKHJjID09IDApCiAJCQlkcm9wX25saW5rKGlub2RlKTsKIAl9IGVsc2UgaWYgKHJjID09IC1FQUNDRVMgJiYgZG9zYXR0ciA9PSAwKSB7CkBAIC0xMjQxLDIyICsxMjg1LDIxIEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgY2lmc19yZW5hbWUoc3RydWN0IGlub2RlICpzb3VyY2VfaW5vZGUsIHN0cnVjdCBkZW50cnkgKnNvdXJjZV9kaXJlbnRyeSwKLQlzdHJ1Y3QgaW5vZGUgKnRhcmdldF9pbm9kZSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0X2RpcmVudHJ5KQoraW50IGNpZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqc291cmNlX2Rpciwgc3RydWN0IGRlbnRyeSAqc291cmNlX2RlbnRyeSwKKwlzdHJ1Y3QgaW5vZGUgKnRhcmdldF9kaXIsIHN0cnVjdCBkZW50cnkgKnRhcmdldF9kZW50cnkpCiB7CiAJY2hhciAqZnJvbU5hbWUgPSBOVUxMOwogCWNoYXIgKnRvTmFtZSA9IE5VTEw7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYl9zb3VyY2U7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYl90YXJnZXQ7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mb19idWZfc291cmNlID0gTlVMTDsKIAlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mb19idWZfdGFyZ2V0OwotCWludCB4aWQ7Ci0JaW50IHJjOworCWludCB4aWQsIHJjLCB0bXByYzsKIAotCWNpZnNfc2JfdGFyZ2V0ID0gQ0lGU19TQih0YXJnZXRfaW5vZGUtPmlfc2IpOwotCWNpZnNfc2Jfc291cmNlID0gQ0lGU19TQihzb3VyY2VfaW5vZGUtPmlfc2IpOwotCXBUY29uID0gY2lmc19zYl9zb3VyY2UtPnRjb247CisJY2lmc19zYl90YXJnZXQgPSBDSUZTX1NCKHRhcmdldF9kaXItPmlfc2IpOworCWNpZnNfc2Jfc291cmNlID0gQ0lGU19TQihzb3VyY2VfZGlyLT5pX3NiKTsKKwl0Y29uID0gY2lmc19zYl9zb3VyY2UtPnRjb247CiAKIAl4aWQgPSBHZXRYaWQoKTsKIApAQCAtMTI2NCw3ICsxMzA3LDcgQEAKIAkgKiBCQjogdGhpcyBtaWdodCBiZSBhbGxvd2VkIGlmIHNhbWUgc2VydmVyLCBidXQgZGlmZmVyZW50IHNoYXJlLgogCSAqIENvbnNpZGVyIGFkZGluZyBzdXBwb3J0IGZvciB0aGlzCiAJICovCi0JaWYgKHBUY29uICE9IGNpZnNfc2JfdGFyZ2V0LT50Y29uKSB7CisJaWYgKHRjb24gIT0gY2lmc19zYl90YXJnZXQtPnRjb24pIHsKIAkJcmMgPSAtRVhERVY7CiAJCWdvdG8gY2lmc19yZW5hbWVfZXhpdDsKIAl9CkBAIC0xMjczLDY1ICsxMzE2LDY1IEBACiAJICogd2UgYWxyZWFkeSBoYXZlIHRoZSByZW5hbWUgc2VtIHNvIHdlIGRvIG5vdCBuZWVkIHRvCiAJICogZ3JhYiBpdCBhZ2FpbiBoZXJlIHRvIHByb3RlY3QgdGhlIHBhdGggaW50ZWdyaXR5CiAJICovCi0JZnJvbU5hbWUgPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KHNvdXJjZV9kaXJlbnRyeSk7CisJZnJvbU5hbWUgPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KHNvdXJjZV9kZW50cnkpOwogCWlmIChmcm9tTmFtZSA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBjaWZzX3JlbmFtZV9leGl0OwogCX0KIAotCXRvTmFtZSA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkodGFyZ2V0X2RpcmVudHJ5KTsKKwl0b05hbWUgPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KHRhcmdldF9kZW50cnkpOwogCWlmICh0b05hbWUgPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gY2lmc19yZW5hbWVfZXhpdDsKIAl9CiAKLQlyYyA9IGNpZnNfZG9fcmVuYW1lKHhpZCwgc291cmNlX2RpcmVudHJ5LCBmcm9tTmFtZSwKLQkJCSAgICB0YXJnZXRfZGlyZW50cnksIHRvTmFtZSk7CisJcmMgPSBjaWZzX2RvX3JlbmFtZSh4aWQsIHNvdXJjZV9kZW50cnksIGZyb21OYW1lLAorCQkJICAgIHRhcmdldF9kZW50cnksIHRvTmFtZSk7CiAKLQlpZiAocmMgPT0gLUVFWElTVCkgewotCQlpZiAocFRjb24tPnVuaXhfZXh0KSB7Ci0JCQkvKgotCQkJICogQXJlIHNyYyBhbmQgZHN0IGhhcmRsaW5rcyBvZiBzYW1lIGlub2RlPyBXZSBjYW4KLQkJCSAqIG9ubHkgdGVsbCB3aXRoIHVuaXggZXh0ZW5zaW9ucyBlbmFibGVkCi0JCQkgKi8KLQkJCWluZm9fYnVmX3NvdXJjZSA9Ci0JCQkJa21hbGxvYygyICogc2l6ZW9mKEZJTEVfVU5JWF9CQVNJQ19JTkZPKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKGluZm9fYnVmX3NvdXJjZSA9PSBOVUxMKQotCQkJCWdvdG8gdW5saW5rX3RhcmdldDsKLQotCQkJaW5mb19idWZfdGFyZ2V0ID0gaW5mb19idWZfc291cmNlICsgMTsKLQkJCXJjID0gQ0lGU1NNQlVuaXhRUGF0aEluZm8oeGlkLCBwVGNvbiwgZnJvbU5hbWUsCi0JCQkJCQlpbmZvX2J1Zl9zb3VyY2UsCi0JCQkJCQljaWZzX3NiX3NvdXJjZS0+bG9jYWxfbmxzLAotCQkJCQkJY2lmc19zYl9zb3VyY2UtPm1udF9jaWZzX2ZsYWdzICYKLQkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQkJCWlmIChyYyAhPSAwKQotCQkJCWdvdG8gdW5saW5rX3RhcmdldDsKLQotCQkJcmMgPSBDSUZTU01CVW5peFFQYXRoSW5mbyh4aWQsIHBUY29uLAotCQkJCQkJdG9OYW1lLCBpbmZvX2J1Zl90YXJnZXQsCi0JCQkJCQljaWZzX3NiX3RhcmdldC0+bG9jYWxfbmxzLAotCQkJCQkJLyogcmVtYXAgYmFzZWQgb24gc291cmNlIHNiICovCi0JCQkJCQljaWZzX3NiX3NvdXJjZS0+bW50X2NpZnNfZmxhZ3MgJgotCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCi0JCQlpZiAocmMgPT0gMCAmJiAoaW5mb19idWZfc291cmNlLT5VbmlxdWVJZCA9PQotCQkJCQlpbmZvX2J1Zl90YXJnZXQtPlVuaXF1ZUlkKSkKLQkJCQkvKiBzYW1lIGZpbGUsIFBPU0lYIHNheXMgdGhhdCB0aGlzIGlzIGEgbm9vcCAqLwotCQkJCWdvdG8gY2lmc19yZW5hbWVfZXhpdDsKLQkJfSAvKiBlbHNlIC4uLiBCQiB3ZSBjb3VsZCBhZGQgdGhlIHNhbWUgY2hlY2sgZm9yIFdpbmRvd3MgYnkKLQkJICAgICBjaGVja2luZyB0aGUgVW5pcXVlSWQgdmlhIEZJTEVfSU5URVJOQUxfSU5GTyAqLwotdW5saW5rX3RhcmdldDoKKwlpZiAocmMgPT0gLUVFWElTVCAmJiB0Y29uLT51bml4X2V4dCkgewogCQkvKgotCQkgKiB3ZSBlaXRoZXIgY2FuIG5vdCB0ZWxsIHRoZSBmaWxlcyBhcmUgaGFyZGxpbmtlZCAoYXMgd2l0aAotCQkgKiBXaW5kb3dzIHNlcnZlcnMpIG9yIGZpbGVzIGFyZSBub3QgaGFyZGxpbmtlZC4gRGVsZXRlIHRoZQotCQkgKiB0YXJnZXQgbWFudWFsbHkgYmVmb3JlIHJlbmFtaW5nIHRvIGZvbGxvdyBQT1NJWCByYXRoZXIgdGhhbgotCQkgKiBXaW5kb3dzIHNlbWFudGljcworCQkgKiBBcmUgc3JjIGFuZCBkc3QgaGFyZGxpbmtzIG9mIHNhbWUgaW5vZGU/IFdlIGNhbgorCQkgKiBvbmx5IHRlbGwgd2l0aCB1bml4IGV4dGVuc2lvbnMgZW5hYmxlZAogCQkgKi8KLQkJY2lmc191bmxpbmsodGFyZ2V0X2lub2RlLCB0YXJnZXRfZGlyZW50cnkpOwotCQlyYyA9IGNpZnNfZG9fcmVuYW1lKHhpZCwgc291cmNlX2RpcmVudHJ5LCBmcm9tTmFtZSwKLQkJCQkgICAgdGFyZ2V0X2RpcmVudHJ5LCB0b05hbWUpOworCQlpbmZvX2J1Zl9zb3VyY2UgPQorCQkJa21hbGxvYygyICogc2l6ZW9mKEZJTEVfVU5JWF9CQVNJQ19JTkZPKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChpbmZvX2J1Zl9zb3VyY2UgPT0gTlVMTCkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBjaWZzX3JlbmFtZV9leGl0OworCQl9CisKKwkJaW5mb19idWZfdGFyZ2V0ID0gaW5mb19idWZfc291cmNlICsgMTsKKwkJdG1wcmMgPSBDSUZTU01CVW5peFFQYXRoSW5mbyh4aWQsIHRjb24sIGZyb21OYW1lLAorCQkJCQlpbmZvX2J1Zl9zb3VyY2UsCisJCQkJCWNpZnNfc2Jfc291cmNlLT5sb2NhbF9ubHMsCisJCQkJCWNpZnNfc2Jfc291cmNlLT5tbnRfY2lmc19mbGFncyAmCisJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwkJaWYgKHRtcHJjICE9IDApCisJCQlnb3RvIHVubGlua190YXJnZXQ7CisKKwkJdG1wcmMgPSBDSUZTU01CVW5peFFQYXRoSW5mbyh4aWQsIHRjb24sCisJCQkJCXRvTmFtZSwgaW5mb19idWZfdGFyZ2V0LAorCQkJCQljaWZzX3NiX3RhcmdldC0+bG9jYWxfbmxzLAorCQkJCQkvKiByZW1hcCBiYXNlZCBvbiBzb3VyY2Ugc2IgKi8KKwkJCQkJY2lmc19zYl9zb3VyY2UtPm1udF9jaWZzX2ZsYWdzICYKKwkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCisJCWlmICh0bXByYyA9PSAwICYmIChpbmZvX2J1Zl9zb3VyY2UtPlVuaXF1ZUlkID09CisJCQkJICAgaW5mb19idWZfdGFyZ2V0LT5VbmlxdWVJZCkpCisJCQkvKiBzYW1lIGZpbGUsIFBPU0lYIHNheXMgdGhhdCB0aGlzIGlzIGEgbm9vcCAqLworCQkJZ290byBjaWZzX3JlbmFtZV9leGl0OworCX0gLyogZWxzZSAuLi4gQkIgd2UgY291bGQgYWRkIHRoZSBzYW1lIGNoZWNrIGZvciBXaW5kb3dzIGJ5CisJCSAgICAgY2hlY2tpbmcgdGhlIFVuaXF1ZUlkIHZpYSBGSUxFX0lOVEVSTkFMX0lORk8gKi8KKwordW5saW5rX3RhcmdldDoKKwlpZiAoKHJjID09IC1FQUNDRVMpIHx8IChyYyA9PSAtRUVYSVNUKSkgeworCQl0bXByYyA9IGNpZnNfdW5saW5rKHRhcmdldF9kaXIsIHRhcmdldF9kZW50cnkpOworCQlpZiAodG1wcmMpCisJCQlnb3RvIGNpZnNfcmVuYW1lX2V4aXQ7CisKKwkJcmMgPSBjaWZzX2RvX3JlbmFtZSh4aWQsIHNvdXJjZV9kZW50cnksIGZyb21OYW1lLAorCQkJCSAgICB0YXJnZXRfZGVudHJ5LCB0b05hbWUpOwogCX0KIAogY2lmc19yZW5hbWVfZXhpdDoKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggNzY1YWRmMS4uNThkNTcyOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTc2MiwxNCArNzYyLDE1IEBACiAJCQkJIHJjKSk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KKwkJY2lmc19zYXZlX3Jlc3VtZV9rZXkoY2lmc0ZpbGUtPnNyY2hfaW5mLmxhc3RfZW50cnksIGNpZnNGaWxlKTsKIAl9CiAKIAl3aGlsZSAoKGluZGV4X3RvX2ZpbmQgPj0gY2lmc0ZpbGUtPnNyY2hfaW5mLmluZGV4X29mX2xhc3RfZW50cnkpICYmCiAJICAgICAgKHJjID09IDApICYmICFjaWZzRmlsZS0+c3JjaF9pbmYuZW5kT2ZTZWFyY2gpIHsKIAkJY0ZZSSgxLCAoImNhbGxpbmcgZmluZG5leHQyIikpOwotCQljaWZzX3NhdmVfcmVzdW1lX2tleShjaWZzRmlsZS0+c3JjaF9pbmYubGFzdF9lbnRyeSwgY2lmc0ZpbGUpOwogCQlyYyA9IENJRlNGaW5kTmV4dCh4aWQsIHBUY29uLCBjaWZzRmlsZS0+bmV0ZmlkLAogCQkJCSAgJmNpZnNGaWxlLT5zcmNoX2luZik7CisJCWNpZnNfc2F2ZV9yZXN1bWVfa2V5KGNpZnNGaWxlLT5zcmNoX2luZi5sYXN0X2VudHJ5LCBjaWZzRmlsZSk7CiAJCWlmIChyYykKIAkJCXJldHVybiAtRU5PRU5UOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IGM1OTE2MjIuLjc1YjFmYTkgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZGlyLmMKKysrIGIvZnMvY29kYS9kaXIuYwpAQCAtMTQ2LDYgKzE0Niw5IEBACiAJaWYgKCFtYXNrKQogCQlyZXR1cm4gMDsgCiAKKwlpZiAoKG1hc2sgJiBNQVlfRVhFQykgJiYgIWV4ZWN1dGVfb2soaW5vZGUpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwogCWxvY2tfa2VybmVsKCk7CiAKIAlpZiAoY29kYV9jYWNoZV9jaGVjayhpbm9kZSwgbWFzaykpCmRpZmYgLS1naXQgYS9mcy9jb2RhL3Bpb2N0bC5jIGIvZnMvY29kYS9waW9jdGwuYwppbmRleCBjNTEzNjU0Li43NzNmMmNlIDEwMDY0NAotLS0gYS9mcy9jb2RhL3Bpb2N0bC5jCisrKyBiL2ZzL2NvZGEvcGlvY3RsLmMKQEAgLTQzLDcgKzQzLDcgQEAKIC8qIHRoZSBjb2RhIHBpb2N0bCBpbm9kZSBvcHMgKi8KIHN0YXRpYyBpbnQgY29kYV9pb2N0bF9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gKG1hc2sgJiBNQVlfRVhFQykgPyAtRUFDQ0VTIDogMDsKIH0KIAogc3RhdGljIGludCBjb2RhX3Bpb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLCAKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggNWY5ZWM0NC4uZmUzYzliZiAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTg2OSw3ICs4NjksNyBAQAogCWJ1Zi5kaXJlbnQgPSBkaXJlbnQ7CiAKIAllcnJvciA9IHZmc19yZWFkZGlyKGZpbGUsIGNvbXBhdF9maWxsb25lZGlyLCAmYnVmKTsKLQlpZiAoZXJyb3IgPj0gMCkKKwlpZiAoYnVmLnJlc3VsdCkKIAkJZXJyb3IgPSBidWYucmVzdWx0OwogCiAJZnB1dChmaWxlKTsKQEAgLTk1Niw5ICs5NTYsOCBAQAogCWJ1Zi5lcnJvciA9IDA7CiAKIAllcnJvciA9IHZmc19yZWFkZGlyKGZpbGUsIGNvbXBhdF9maWxsZGlyLCAmYnVmKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dF9wdXRmOwotCWVycm9yID0gYnVmLmVycm9yOworCWlmIChlcnJvciA+PSAwKQorCQllcnJvciA9IGJ1Zi5lcnJvcjsKIAlsYXN0ZGlyZW50ID0gYnVmLnByZXZpb3VzOwogCWlmIChsYXN0ZGlyZW50KSB7CiAJCWlmIChwdXRfdXNlcihmaWxlLT5mX3BvcywgJmxhc3RkaXJlbnQtPmRfb2ZmKSkKQEAgLTk2Niw4ICs5NjUsNiBAQAogCQllbHNlCiAJCQllcnJvciA9IGNvdW50IC0gYnVmLmNvdW50OwogCX0KLQotb3V0X3B1dGY6CiAJZnB1dChmaWxlKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CkBAIC0xMDQ3LDE5ICsxMDQ0LDE2IEBACiAJYnVmLmVycm9yID0gMDsKIAogCWVycm9yID0gdmZzX3JlYWRkaXIoZmlsZSwgY29tcGF0X2ZpbGxkaXI2NCwgJmJ1Zik7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBvdXRfcHV0ZjsKLQllcnJvciA9IGJ1Zi5lcnJvcjsKKwlpZiAoZXJyb3IgPj0gMCkKKwkJZXJyb3IgPSBidWYuZXJyb3I7CiAJbGFzdGRpcmVudCA9IGJ1Zi5wcmV2aW91czsKIAlpZiAobGFzdGRpcmVudCkgewogCQl0eXBlb2YobGFzdGRpcmVudC0+ZF9vZmYpIGRfb2ZmID0gZmlsZS0+Zl9wb3M7Ci0JCWVycm9yID0gLUVGQVVMVDsKIAkJaWYgKF9fcHV0X3VzZXJfdW5hbGlnbmVkKGRfb2ZmLCAmbGFzdGRpcmVudC0+ZF9vZmYpKQotCQkJZ290byBvdXRfcHV0ZjsKLQkJZXJyb3IgPSBjb3VudCAtIGJ1Zi5jb3VudDsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJZXJyb3IgPSBjb3VudCAtIGJ1Zi5jb3VudDsKIAl9Ci0KLW91dF9wdXRmOgogCWZwdXQoZmlsZSk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwpAQCAtMTQ3NSw2ICsxNDY5LDU3IEBACiAKICNkZWZpbmUgX19DT01QQVRfTkZEQklUUyAgICAgICAoOCAqIHNpemVvZihjb21wYXRfdWxvbmdfdCkpCiAKK3N0YXRpYyBpbnQgcG9sbF9zZWxlY3RfY29weV9yZW1haW5pbmcoc3RydWN0IHRpbWVzcGVjICplbmRfdGltZSwgdm9pZCBfX3VzZXIgKnAsCisJCQkJICAgICAgaW50IHRpbWV2YWwsIGludCByZXQpCit7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCisJaWYgKCFwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgU1RJQ0tZX1RJTUVPVVRTKQorCQlnb3RvIHN0aWNreTsKKworCS8qIE5vIHVwZGF0ZSBmb3IgemVybyB0aW1lb3V0ICovCisJaWYgKCFlbmRfdGltZS0+dHZfc2VjICYmICFlbmRfdGltZS0+dHZfbnNlYykKKwkJcmV0dXJuIHJldDsKKworCWt0aW1lX2dldF90cygmdHMpOworCXRzID0gdGltZXNwZWNfc3ViKCplbmRfdGltZSwgdHMpOworCWlmICh0cy50dl9zZWMgPCAwKQorCQl0cy50dl9zZWMgPSB0cy50dl9uc2VjID0gMDsKKworCWlmICh0aW1ldmFsKSB7CisJCXN0cnVjdCBjb21wYXRfdGltZXZhbCBydHY7CisKKwkJcnR2LnR2X3NlYyA9IHRzLnR2X3NlYzsKKwkJcnR2LnR2X3VzZWMgPSB0cy50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQzsKKworCQlpZiAoIWNvcHlfdG9fdXNlcihwLCAmcnR2LCBzaXplb2YocnR2KSkpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgcnRzOworCisJCXJ0cy50dl9zZWMgPSB0cy50dl9zZWM7CisJCXJ0cy50dl9uc2VjID0gdHMudHZfbnNlYzsKKworCQlpZiAoIWNvcHlfdG9fdXNlcihwLCAmcnRzLCBzaXplb2YocnRzKSkpCisJCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIElmIGFuIGFwcGxpY2F0aW9uIHB1dHMgaXRzIHRpbWV2YWwgaW4gcmVhZC1vbmx5IG1lbW9yeSwgd2UKKwkgKiBkb24ndCB3YW50IHRoZSBMaW51eC1zcGVjaWZpYyB1cGRhdGUgdG8gdGhlIHRpbWV2YWwgdG8KKwkgKiBjYXVzZSBhIGZhdWx0IGFmdGVyIHRoZSBzZWxlY3QgaGFzIGNvbXBsZXRlZAorCSAqIHN1Y2Nlc3NmdWxseS4gSG93ZXZlciwgYmVjYXVzZSB3ZSdyZSBub3QgdXBkYXRpbmcgdGhlCisJICogdGltZXZhbCwgd2UgY2FuJ3QgcmVzdGFydCB0aGUgc3lzdGVtIGNhbGwuCisJICovCisKK3N0aWNreToKKwlpZiAocmV0ID09IC1FUkVTVEFSVE5PSEFORCkKKwkJcmV0ID0gLUVJTlRSOworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBPb28sIG5hc3R5LiAgV2UgbmVlZCBoZXJlIHRvIGZyb2IgMzItYml0IHVuc2lnbmVkIGxvbmdzIHRvCiAgKiA2NC1iaXQgdW5zaWduZWQgbG9uZ3MuCkBAIC0xNTU2LDcgKzE2MDEsOCBAQAogCSgodW5zaWduZWQgbG9uZykgKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopLTEpCiAKIGludCBjb21wYXRfY29yZV9zeXNfc2VsZWN0KGludCBuLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmlucCwKLQljb21wYXRfdWxvbmdfdCBfX3VzZXIgKm91dHAsIGNvbXBhdF91bG9uZ190IF9fdXNlciAqZXhwLCBzNjQgKnRpbWVvdXQpCisJY29tcGF0X3Vsb25nX3QgX191c2VyICpvdXRwLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmV4cCwKKwlzdHJ1Y3QgdGltZXNwZWMgKmVuZF90aW1lKQogewogCWZkX3NldF9iaXRzIGZkczsKIAl2b2lkICpiaXRzOwpAQCAtMTYwMyw3ICsxNjQ5LDcgQEAKIAl6ZXJvX2ZkX3NldChuLCBmZHMucmVzX291dCk7CiAJemVyb19mZF9zZXQobiwgZmRzLnJlc19leCk7CiAKLQlyZXQgPSBkb19zZWxlY3QobiwgJmZkcywgdGltZW91dCk7CisJcmV0ID0gZG9fc2VsZWN0KG4sICZmZHMsIGVuZF90aW1lKTsKIAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKQEAgLTE2MjksNyArMTY3NSw3IEBACiAJY29tcGF0X3Vsb25nX3QgX191c2VyICpvdXRwLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmV4cCwKIAlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0dnApCiB7Ci0JczY0IHRpbWVvdXQgPSAtMTsKKwlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWUsICp0byA9IE5VTEw7CiAJc3RydWN0IGNvbXBhdF90aW1ldmFsIHR2OwogCWludCByZXQ7CiAKQEAgLTE2MzcsNDMgKzE2ODMsMTQgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0diwgdHZwLCBzaXplb2YodHYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmICh0di50dl9zZWMgPCAwIHx8IHR2LnR2X3VzZWMgPCAwKQorCQl0byA9ICZlbmRfdGltZTsKKwkJaWYgKHBvbGxfc2VsZWN0X3NldF90aW1lb3V0KHRvLCB0di50dl9zZWMsCisJCQkJCSAgICB0di50dl91c2VjICogTlNFQ19QRVJfVVNFQykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBDYXN0IHRvIHU2NCB0byBtYWtlIEdDQyBzdG9wIGNvbXBsYWluaW5nICovCi0JCWlmICgodTY0KXR2LnR2X3NlYyA+PSAodTY0KU1BWF9JTlQ2NF9TRUNPTkRTKQotCQkJdGltZW91dCA9IC0xOwkvKiBpbmZpbml0ZSAqLwotCQllbHNlIHsKLQkJCXRpbWVvdXQgPSBESVZfUk9VTkRfVVAodHYudHZfdXNlYywgMTAwMDAwMC9IWik7Ci0JCQl0aW1lb3V0ICs9IHR2LnR2X3NlYyAqIEhaOwotCQl9CiAJfQogCi0JcmV0ID0gY29tcGF0X2NvcmVfc3lzX3NlbGVjdChuLCBpbnAsIG91dHAsIGV4cCwgJnRpbWVvdXQpOwotCi0JaWYgKHR2cCkgewotCQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgcnR2OwotCi0JCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIFNUSUNLWV9USU1FT1VUUykKLQkJCWdvdG8gc3RpY2t5OwotCQlydHYudHZfdXNlYyA9IGppZmZpZXNfdG9fdXNlY3MoZG9fZGl2KCgqKHU2NCopJnRpbWVvdXQpLCBIWikpOwotCQlydHYudHZfc2VjID0gdGltZW91dDsKLQkJaWYgKGNvbXBhdF90aW1ldmFsX2NvbXBhcmUoJnJ0diwgJnR2KSA+PSAwKQotCQkJcnR2ID0gdHY7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHZwLCAmcnR2LCBzaXplb2YocnR2KSkpIHsKLXN0aWNreToKLQkJCS8qCi0JCQkgKiBJZiBhbiBhcHBsaWNhdGlvbiBwdXRzIGl0cyB0aW1ldmFsIGluIHJlYWQtb25seQotCQkJICogbWVtb3J5LCB3ZSBkb24ndCB3YW50IHRoZSBMaW51eC1zcGVjaWZpYyB1cGRhdGUgdG8KLQkJCSAqIHRoZSB0aW1ldmFsIHRvIGNhdXNlIGEgZmF1bHQgYWZ0ZXIgdGhlIHNlbGVjdCBoYXMKLQkJCSAqIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEhvd2V2ZXIsIGJlY2F1c2Ugd2UncmUgbm90Ci0JCQkgKiB1cGRhdGluZyB0aGUgdGltZXZhbCwgd2UgY2FuJ3QgcmVzdGFydCB0aGUgc3lzdGVtCi0JCQkgKiBjYWxsLgotCQkJICovCi0JCQlpZiAocmV0ID09IC1FUkVTVEFSVE5PSEFORCkKLQkJCQlyZXQgPSAtRUlOVFI7Ci0JCX0KLQl9CisJcmV0ID0gY29tcGF0X2NvcmVfc3lzX3NlbGVjdChuLCBpbnAsIG91dHAsIGV4cCwgdG8pOworCXJldCA9IHBvbGxfc2VsZWN0X2NvcHlfcmVtYWluaW5nKCZlbmRfdGltZSwgdHZwLCAxLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2ODYsMTUgKzE3MDMsMTYgQEAKIHsKIAljb21wYXRfc2lnc2V0X3Qgc3MzMjsKIAlzaWdzZXRfdCBrc2lnbWFzaywgc2lnc2F2ZWQ7Ci0JczY0IHRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKIAlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIHRzOworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZSwgKnRvID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJaWYgKHRzcCkgewogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRzLCB0c3AsIHNpemVvZih0cykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKHRzLnR2X3NlYyA8IDAgfHwgdHMudHZfbnNlYyA8IDApCisJCXRvID0gJmVuZF90aW1lOworCQlpZiAocG9sbF9zZWxlY3Rfc2V0X3RpbWVvdXQodG8sIHRzLnR2X3NlYywgdHMudHZfbnNlYykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE3MDksNTEgKzE3MjcsOCBAQAogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmtzaWdtYXNrLCAmc2lnc2F2ZWQpOwogCX0KIAotCWRvIHsKLQkJaWYgKHRzcCkgewotCQkJaWYgKCh1bnNpZ25lZCBsb25nKXRzLnR2X3NlYyA8IE1BWF9TRUxFQ1RfU0VDT05EUykgewotCQkJCXRpbWVvdXQgPSBESVZfUk9VTkRfVVAodHMudHZfbnNlYywgMTAwMDAwMDAwMC9IWik7Ci0JCQkJdGltZW91dCArPSB0cy50dl9zZWMgKiAodW5zaWduZWQgbG9uZylIWjsKLQkJCQl0cy50dl9zZWMgPSAwOwotCQkJCXRzLnR2X25zZWMgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQl0cy50dl9zZWMgLT0gTUFYX1NFTEVDVF9TRUNPTkRTOwotCQkJCXRpbWVvdXQgPSBNQVhfU0VMRUNUX1NFQ09ORFMgKiBIWjsKLQkJCX0KLQkJfQotCi0JCXJldCA9IGNvbXBhdF9jb3JlX3N5c19zZWxlY3QobiwgaW5wLCBvdXRwLCBleHAsICZ0aW1lb3V0KTsKLQotCX0gd2hpbGUgKCFyZXQgJiYgIXRpbWVvdXQgJiYgdHNwICYmICh0cy50dl9zZWMgfHwgdHMudHZfbnNlYykpOwotCi0JaWYgKHRzcCkgewotCQlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIHJ0czsKLQotCQlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBTVElDS1lfVElNRU9VVFMpCi0JCQlnb3RvIHN0aWNreTsKLQotCQlydHMudHZfc2VjID0gdGltZW91dCAvIEhaOwotCQlydHMudHZfbnNlYyA9ICh0aW1lb3V0ICUgSFopICogKE5TRUNfUEVSX1NFQy9IWik7Ci0JCWlmIChydHMudHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpIHsKLQkJCXJ0cy50dl9zZWMrKzsKLQkJCXJ0cy50dl9uc2VjIC09IE5TRUNfUEVSX1NFQzsKLQkJfQotCQlpZiAoY29tcGF0X3RpbWVzcGVjX2NvbXBhcmUoJnJ0cywgJnRzKSA+PSAwKQotCQkJcnRzID0gdHM7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHNwLCAmcnRzLCBzaXplb2YocnRzKSkpIHsKLXN0aWNreToKLQkJCS8qCi0JCQkgKiBJZiBhbiBhcHBsaWNhdGlvbiBwdXRzIGl0cyB0aW1ldmFsIGluIHJlYWQtb25seQotCQkJICogbWVtb3J5LCB3ZSBkb24ndCB3YW50IHRoZSBMaW51eC1zcGVjaWZpYyB1cGRhdGUgdG8KLQkJCSAqIHRoZSB0aW1ldmFsIHRvIGNhdXNlIGEgZmF1bHQgYWZ0ZXIgdGhlIHNlbGVjdCBoYXMKLQkJCSAqIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEhvd2V2ZXIsIGJlY2F1c2Ugd2UncmUgbm90Ci0JCQkgKiB1cGRhdGluZyB0aGUgdGltZXZhbCwgd2UgY2FuJ3QgcmVzdGFydCB0aGUgc3lzdGVtCi0JCQkgKiBjYWxsLgotCQkJICovCi0JCQlpZiAocmV0ID09IC1FUkVTVEFSVE5PSEFORCkKLQkJCQlyZXQgPSAtRUlOVFI7Ci0JCX0KLQl9CisJcmV0ID0gY29tcGF0X2NvcmVfc3lzX3NlbGVjdChuLCBpbnAsIG91dHAsIGV4cCwgdG8pOworCXJldCA9IHBvbGxfc2VsZWN0X2NvcHlfcmVtYWluaW5nKCZlbmRfdGltZSwgdHNwLCAwLCByZXQpOwogCiAJaWYgKHJldCA9PSAtRVJFU1RBUlROT0hBTkQpIHsKIAkJLyoKQEAgLTE3OTgsMTggKzE3NzMsMTYgQEAKIAljb21wYXRfc2lnc2V0X3Qgc3MzMjsKIAlzaWdzZXRfdCBrc2lnbWFzaywgc2lnc2F2ZWQ7CiAJc3RydWN0IGNvbXBhdF90aW1lc3BlYyB0czsKLQlzNjQgdGltZW91dCA9IC0xOworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZSwgKnRvID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJaWYgKHRzcCkgewogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRzLCB0c3AsIHNpemVvZih0cykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJLyogV2UgYXNzdW1lIHRoYXQgdHMudHZfc2VjIGlzIGFsd2F5cyBsb3dlciB0aGFuCi0JCSAgIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IGNhbiBiZSBleHByZXNzZWQgaW4KLQkJICAgYW4gczY0LiBPdGhlcndpc2UgdGhlIGNvbXBpbGVyIGJpdGNoZXMgYXQgdXMgKi8KLQkJdGltZW91dCA9IERJVl9ST1VORF9VUCh0cy50dl9uc2VjLCAxMDAwMDAwMDAwL0haKTsKLQkJdGltZW91dCArPSB0cy50dl9zZWMgKiBIWjsKKwkJdG8gPSAmZW5kX3RpbWU7CisJCWlmIChwb2xsX3NlbGVjdF9zZXRfdGltZW91dCh0bywgdHMudHZfc2VjLCB0cy50dl9uc2VjKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChzaWdtYXNrKSB7CkBAIC0xODIzLDcgKzE3OTYsNyBAQAogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmtzaWdtYXNrLCAmc2lnc2F2ZWQpOwogCX0KIAotCXJldCA9IGRvX3N5c19wb2xsKHVmZHMsIG5mZHMsICZ0aW1lb3V0KTsKKwlyZXQgPSBkb19zeXNfcG9sbCh1ZmRzLCBuZmRzLCB0byk7CiAKIAkvKiBXZSBjYW4gcmVzdGFydCB0aGlzIHN5c2NhbGwsIHVzdWFsbHkgKi8KIAlpZiAocmV0ID09IC1FSU5UUikgewpAQCAtMTg0MSwzMSArMTgxNCw3IEBACiAJfSBlbHNlIGlmIChzaWdtYXNrKQogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNpZ3NhdmVkLCBOVUxMKTsKIAotCWlmICh0c3AgJiYgdGltZW91dCA+PSAwKSB7Ci0JCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgcnRzOwotCi0JCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIFNUSUNLWV9USU1FT1VUUykKLQkJCWdvdG8gc3RpY2t5OwotCQkvKiBZZXMsIHdlIGtub3cgaXQncyBhY3R1YWxseSBhbiBzNjQsIGJ1dCBpdCdzIGFsc28gcG9zaXRpdmUuICovCi0JCXJ0cy50dl9uc2VjID0gamlmZmllc190b191c2Vjcyhkb19kaXYoKCoodTY0KikmdGltZW91dCksIEhaKSkgKgotCQkJCQkxMDAwOwotCQlydHMudHZfc2VjID0gdGltZW91dDsKLQkJaWYgKGNvbXBhdF90aW1lc3BlY19jb21wYXJlKCZydHMsICZ0cykgPj0gMCkKLQkJCXJ0cyA9IHRzOwotCQlpZiAoY29weV90b191c2VyKHRzcCwgJnJ0cywgc2l6ZW9mKHJ0cykpKSB7Ci1zdGlja3k6Ci0JCQkvKgotCQkJICogSWYgYW4gYXBwbGljYXRpb24gcHV0cyBpdHMgdGltZXZhbCBpbiByZWFkLW9ubHkKLQkJCSAqIG1lbW9yeSwgd2UgZG9uJ3Qgd2FudCB0aGUgTGludXgtc3BlY2lmaWMgdXBkYXRlIHRvCi0JCQkgKiB0aGUgdGltZXZhbCB0byBjYXVzZSBhIGZhdWx0IGFmdGVyIHRoZSBzZWxlY3QgaGFzCi0JCQkgKiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBIb3dldmVyLCBiZWNhdXNlIHdlJ3JlIG5vdAotCQkJICogdXBkYXRpbmcgdGhlIHRpbWV2YWwsIHdlIGNhbid0IHJlc3RhcnQgdGhlIHN5c3RlbQotCQkJICogY2FsbC4KLQkJCSAqLwotCQkJaWYgKHJldCA9PSAtRVJFU1RBUlROT0hBTkQgJiYgdGltZW91dCA+PSAwKQotCQkJCXJldCA9IC1FSU5UUjsKLQkJfQotCX0KKwlyZXQgPSBwb2xsX3NlbGVjdF9jb3B5X3JlbWFpbmluZygmZW5kX3RpbWUsIHRzcCwgMCwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKaW5kZXggYmY3NDk3My4uOTMyYTkyYiAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jCisrKyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwpAQCAtMTA4LDE4ICsxMDgsMTggQEAKIH0KIAogCi1zdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCitzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IHBhdGggKnBhdGgsCiAJCSAgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcGF0aF9sb29rdXAoc3ltbmFtZSwgTE9PS1VQX0ZPTExPV3xMT09LVVBfRElSRUNUT1JZLCBuZCk7CisJcmV0ID0ga2Vybl9wYXRoKHN5bW5hbWUsIExPT0tVUF9GT0xMT1d8TE9PS1VQX0RJUkVDVE9SWSwgcGF0aCk7CiAJaWYgKCFyZXQpIHsKLQkJaWYgKG5kLT5wYXRoLmRlbnRyeS0+ZF9zYiA9PSBjb25maWdmc19zYikgewotCQkJKnRhcmdldCA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShuZC0+cGF0aC5kZW50cnkpOworCQlpZiAocGF0aC0+ZGVudHJ5LT5kX3NiID09IGNvbmZpZ2ZzX3NiKSB7CisJCQkqdGFyZ2V0ID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHBhdGgtPmRlbnRyeSk7CiAJCQlpZiAoISp0YXJnZXQpIHsKIAkJCQlyZXQgPSAtRU5PRU5UOwotCQkJCXBhdGhfcHV0KCZuZC0+cGF0aCk7CisJCQkJcGF0aF9wdXQocGF0aCk7CiAJCQl9CiAJCX0gZWxzZQogCQkJcmV0ID0gLUVQRVJNOwpAQCAtMTMyLDcgKzEzMiw3IEBACiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQogewogCWludCByZXQ7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkOwogCXN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCSAgICAhdHlwZS0+Y3RfaXRlbV9vcHMtPmFsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAotCXJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgJm5kLCAmdGFyZ2V0X2l0ZW0pOworCXJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgJnBhdGgsICZ0YXJnZXRfaXRlbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0OwogCkBAIC0xNzQsNyArMTc0LDcgQEAKIAl9CiAKIAljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwotCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAKIG91dF9wdXQ6CiAJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggZTdhMWE5OS4uYTFkODZjNyAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTY5LDYgKzY5LDcgQEAKIAogc3RhdGljIHZvaWQgX19kX2ZyZWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogeworCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9hbGlhcykpOwogCWlmIChkbmFtZV9leHRlcm5hbChkZW50cnkpKQogCQlrZnJlZShkZW50cnktPmRfbmFtZS5uYW1lKTsKIAlrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyAKQEAgLTE3NCw5ICsxNzUsMTIgQEAKIAlkZW50cnlfc3RhdC5ucl9kZW50cnktLTsJLyogRm9yIGRfZnJlZSwgYmVsb3cgKi8KIAkvKmRyb3BzIHRoZSBsb2NrcywgYXQgdGhhdCBwb2ludCBub2JvZHkgY2FuIHJlYWNoIHRoaXMgZGVudHJ5ICovCiAJZGVudHJ5X2lwdXQoZGVudHJ5KTsKLQlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCWlmIChJU19ST09UKGRlbnRyeSkpCisJCXBhcmVudCA9IE5VTEw7CisJZWxzZQorCQlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OwogCWRfZnJlZShkZW50cnkpOwotCXJldHVybiBkZW50cnkgPT0gcGFyZW50ID8gTlVMTCA6IHBhcmVudDsKKwlyZXR1cm4gcGFyZW50OwogfQogCiAvKiAKQEAgLTY2NiwxMSArNjcwLDEyIEBACiAJCQkJQlVHKCk7CiAJCQl9CiAKLQkJCXBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7Ci0JCQlpZiAocGFyZW50ID09IGRlbnRyeSkKKwkJCWlmIChJU19ST09UKGRlbnRyeSkpCiAJCQkJcGFyZW50ID0gTlVMTDsKLQkJCWVsc2UKKwkJCWVsc2UgeworCQkJCXBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CiAJCQkJYXRvbWljX2RlYygmcGFyZW50LT5kX2NvdW50KTsKKwkJCX0KIAogCQkJbGlzdF9kZWwoJmRlbnRyeS0+ZF91LmRfY2hpbGQpOwogCQkJZGV0YWNoZWQrKzsKQEAgLTk3Nyw2ICs5ODIsMTUgQEAKIAlyZXR1cm4gZF9hbGxvYyhwYXJlbnQsICZxKTsKIH0KIAorLyogdGhlIGNhbGxlciBtdXN0IGhvbGQgZGNhY2hlX2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKGlub2RlKQorCQlsaXN0X2FkZCgmZGVudHJ5LT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKKwlkZW50cnktPmRfaW5vZGUgPSBpbm9kZTsKKwlmc25vdGlmeV9kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworfQorCiAvKioKICAqIGRfaW5zdGFudGlhdGUgLSBmaWxsIGluIGlub2RlIGluZm9ybWF0aW9uIGZvciBhIGRlbnRyeQogICogQGVudHJ5OiBkZW50cnkgdG8gY29tcGxldGUKQEAgLTk5NiwxMCArMTAxMCw3IEBACiB7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZlbnRyeS0+ZF9hbGlhcykpOwogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCWlmIChpbm9kZSkKLQkJbGlzdF9hZGQoJmVudHJ5LT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKLQllbnRyeS0+ZF9pbm9kZSA9IGlub2RlOwotCWZzbm90aWZ5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKKwlfX2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIH0KQEAgLTEwMjksNyArMTA0MCw3IEBACiAJdW5zaWduZWQgaW50IGhhc2ggPSBlbnRyeS0+ZF9uYW1lLmhhc2g7CiAKIAlpZiAoIWlub2RlKSB7Ci0JCWVudHJ5LT5kX2lub2RlID0gTlVMTDsKKwkJX19kX2luc3RhbnRpYXRlKGVudHJ5LCBOVUxMKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMDQ4LDkgKzEwNTksNyBAQAogCQlyZXR1cm4gYWxpYXM7CiAJfQogCi0JbGlzdF9hZGQoJmVudHJ5LT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKLQllbnRyeS0+ZF9pbm9kZSA9IGlub2RlOwotCWZzbm90aWZ5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKKwlfX2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTExMSw2OSArMTEyMCw3MSBAQAogfQogCiAvKioKLSAqIGRfYWxsb2NfYW5vbiAtIGFsbG9jYXRlIGFuIGFub255bW91cyBkZW50cnkKKyAqIGRfb2J0YWluX2FsaWFzIC0gZmluZCBvciBhbGxvY2F0ZSBhIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZQogICogQGlub2RlOiBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgZGVudHJ5IGZvcgogICoKLSAqIFRoaXMgaXMgc2ltaWxhciB0byBkX2FsbG9jX3Jvb3QuICBJdCBpcyB1c2VkIGJ5IGZpbGVzeXN0ZW1zIHdoZW4KLSAqIGNyZWF0aW5nIGEgZGVudHJ5IGZvciBhIGdpdmVuIGlub2RlLCBvZnRlbiBpbiB0aGUgcHJvY2VzcyBvZiAKLSAqIG1hcHBpbmcgYSBmaWxlaGFuZGxlIHRvIGEgZGVudHJ5LiAgVGhlIHJldHVybmVkIGRlbnRyeSBtYXkgYmUKLSAqIGFub255bW91cywgb3IgbWF5IGhhdmUgYSBmdWxsIG5hbWUgKGlmIHRoZSBpbm9kZSB3YXMgYWxyZWFkeQotICogaW4gdGhlIGNhY2hlKS4gIFRoZSBmaWxlIHN5c3RlbSBtYXkgbmVlZCB0byBtYWtlIGZ1cnRoZXIKLSAqIGVmZm9ydHMgdG8gY29ubmVjdCB0aGlzIGRlbnRyeSBpbnRvIHRoZSBkY2FjaGUgcHJvcGVybHkuCisgKiBPYnRhaW4gYSBkZW50cnkgZm9yIGFuIGlub2RlIHJlc3VsdGluZyBmcm9tIE5GUyBmaWxlaGFuZGxlIGNvbnZlcnNpb24gb3IKKyAqIHNpbWlsYXIgb3BlbiBieSBoYW5kbGUgb3BlcmF0aW9ucy4gIFRoZSByZXR1cm5lZCBkZW50cnkgbWF5IGJlIGFub255bW91cywKKyAqIG9yIG1heSBoYXZlIGEgZnVsbCBuYW1lIChpZiB0aGUgaW5vZGUgd2FzIGFscmVhZHkgaW4gdGhlIGNhY2hlKS4KICAqCi0gKiBXaGVuIGNhbGxlZCBvbiBhIGRpcmVjdG9yeSBpbm9kZSwgd2UgbXVzdCBlbnN1cmUgdGhhdAotICogdGhlIGlub2RlIG9ubHkgZXZlciBoYXMgb25lIGRlbnRyeS4gIElmIGEgZGVudHJ5IGlzCi0gKiBmb3VuZCwgdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYSBuZXcgb25lLgorICogV2hlbiBjYWxsZWQgb24gYSBkaXJlY3RvcnkgaW5vZGUsIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIGlub2RlIG9ubHkgZXZlcgorICogaGFzIG9uZSBkZW50cnkuICBJZiBhIGRlbnRyeSBpcyBmb3VuZCwgdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mCisgKiBhbGxvY2F0aW5nIGEgbmV3IG9uZS4KICAqCiAgKiBPbiBzdWNjZXNzZnVsIHJldHVybiwgdGhlIHJlZmVyZW5jZSB0byB0aGUgaW5vZGUgaGFzIGJlZW4gdHJhbnNmZXJyZWQKLSAqIHRvIHRoZSBkZW50cnkuICBJZiAlTlVMTCBpcyByZXR1cm5lZCAoaW5kaWNhdGluZyBrbWFsbG9jIGZhaWx1cmUpLAotICogdGhlIHJlZmVyZW5jZSBvbiB0aGUgaW5vZGUgaGFzIG5vdCBiZWVuIHJlbGVhc2VkLgorICogdG8gdGhlIGRlbnRyeS4gIEluIGNhc2Ugb2YgYW4gZXJyb3IgdGhlIHJlZmVyZW5jZSBvbiB0aGUgaW5vZGUgaXMgcmVsZWFzZWQuCisgKiBUbyBtYWtlIGl0IGVhc2llciB0byB1c2UgaW4gZXhwb3J0IG9wZXJhdGlvbnMgYSAlTlVMTCBvciBJU19FUlIgaW5vZGUgbWF5CisgKiBiZSBwYXNzZWQgaW4gYW5kIHdpbGwgYmUgdGhlIGVycm9yIHdpbGwgYmUgcHJvcGFnYXRlIHRvIHRoZSByZXR1cm4gdmFsdWUsCisgKiB3aXRoIGEgJU5VTEwgQGlub2RlIHJlcGxhY2VkIGJ5IEVSUl9QVFIoLUVTVEFMRSkuCiAgKi8KLQotc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RydWN0IGRlbnRyeSAqZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHFzdHIgYW5vbnN0cmluZyA9IHsgLm5hbWUgPSAiIiB9OwogCXN0cnVjdCBkZW50cnkgKnRtcDsKIAlzdHJ1Y3QgZGVudHJ5ICpyZXM7CiAKLQlpZiAoKHJlcyA9IGRfZmluZF9hbGlhcyhpbm9kZSkpKSB7Ci0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gcmVzOwotCX0KKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKworCXJlcyA9IGRfZmluZF9hbGlhcyhpbm9kZSk7CisJaWYgKHJlcykKKwkJZ290byBvdXRfaXB1dDsKIAogCXRtcCA9IGRfYWxsb2MoTlVMTCwgJmFub25zdHJpbmcpOwotCWlmICghdG1wKQotCQlyZXR1cm4gTlVMTDsKLQorCWlmICghdG1wKSB7CisJCXJlcyA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gb3V0X2lwdXQ7CisJfQogCXRtcC0+ZF9wYXJlbnQgPSB0bXA7IC8qIG1ha2Ugc3VyZSBkcHV0IGRvZXNuJ3QgY3JvYWsgKi8KLQkKKwogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCXJlcyA9IF9fZF9maW5kX2FsaWFzKGlub2RlLCAwKTsKLQlpZiAoIXJlcykgewotCQkvKiBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovCi0JCXJlcyA9IHRtcDsKLQkJdG1wID0gTlVMTDsKLQkJc3Bpbl9sb2NrKCZyZXMtPmRfbG9jayk7Ci0JCXJlcy0+ZF9zYiA9IGlub2RlLT5pX3NiOwotCQlyZXMtPmRfcGFyZW50ID0gcmVzOwotCQlyZXMtPmRfaW5vZGUgPSBpbm9kZTsKLQkJcmVzLT5kX2ZsYWdzIHw9IERDQUNIRV9ESVNDT05ORUNURUQ7Ci0JCXJlcy0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwotCQlsaXN0X2FkZCgmcmVzLT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKLQkJaGxpc3RfYWRkX2hlYWQoJnJlcy0+ZF9oYXNoLCAmaW5vZGUtPmlfc2ItPnNfYW5vbik7Ci0JCXNwaW5fdW5sb2NrKCZyZXMtPmRfbG9jayk7Ci0KLQkJaW5vZGUgPSBOVUxMOyAvKiBkb24ndCBkcm9wIHJlZmVyZW5jZSAqLwotCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCi0JaWYgKGlub2RlKQotCQlpcHV0KGlub2RlKTsKLQlpZiAodG1wKQorCWlmIChyZXMpIHsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJZHB1dCh0bXApOworCQlnb3RvIG91dF9pcHV0OworCX0KKworCS8qIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi8KKwlzcGluX2xvY2soJnRtcC0+ZF9sb2NrKTsKKwl0bXAtPmRfc2IgPSBpbm9kZS0+aV9zYjsKKwl0bXAtPmRfaW5vZGUgPSBpbm9kZTsKKwl0bXAtPmRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDsKKwl0bXAtPmRfZmxhZ3MgJj0gfkRDQUNIRV9VTkhBU0hFRDsKKwlsaXN0X2FkZCgmdG1wLT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKKwlobGlzdF9hZGRfaGVhZCgmdG1wLT5kX2hhc2gsICZpbm9kZS0+aV9zYi0+c19hbm9uKTsKKwlzcGluX3VubG9jaygmdG1wLT5kX2xvY2spOworCisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlyZXR1cm4gdG1wOworCisgb3V0X2lwdXQ6CisJaXB1dChpbm9kZSk7CiAJcmV0dXJuIHJlczsKIH0KLQorRVhQT1JUX1NZTUJPTF9HUEwoZF9vYnRhaW5fYWxpYXMpOwogCiAvKioKICAqIGRfc3BsaWNlX2FsaWFzIC0gc3BsaWNlIGEgZGlzY29ubmVjdGVkIGRlbnRyeSBpbnRvIHRoZSB0cmVlIGlmIG9uZSBleGlzdHMKQEAgLTEyMDAsMTcgKzEyMTEsMTQgQEAKIAkJbmV3ID0gX19kX2ZpbmRfYWxpYXMoaW5vZGUsIDEpOwogCQlpZiAobmV3KSB7CiAJCQlCVUdfT04oIShuZXctPmRfZmxhZ3MgJiBEQ0FDSEVfRElTQ09OTkVDVEVEKSk7Ci0JCQlmc25vdGlmeV9kX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpOwogCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7CiAJCQlkX3JlaGFzaChkZW50cnkpOwogCQkJZF9tb3ZlKG5ldywgZGVudHJ5KTsKIAkJCWlwdXQoaW5vZGUpOwogCQl9IGVsc2UgewotCQkJLyogZF9pbnN0YW50aWF0ZSB0YWtlcyBkY2FjaGVfbG9jaywgc28gd2UgZG8gaXQgYnkgaGFuZCAqLwotCQkJbGlzdF9hZGQoJmRlbnRyeS0+ZF9hbGlhcywgJmlub2RlLT5pX2RlbnRyeSk7Ci0JCQlkZW50cnktPmRfaW5vZGUgPSBpbm9kZTsKLQkJCWZzbm90aWZ5X2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJCQkvKiBhbHJlYWR5IHRha2luZyBkY2FjaGVfbG9jaywgc28gZF9hZGQoKSBieSBoYW5kICovCisJCQlfX2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQkJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJCWRfcmVoYXNoKGRlbnRyeSk7CkBAIC0xMjkzLDggKzEzMDEsNyBAQAogCQkgKiBkX2luc3RhbnRpYXRlKCkgYnkgaGFuZCBiZWNhdXNlIGl0IHRha2VzIGRjYWNoZV9sb2NrIHdoaWNoCiAJCSAqIHdlIGFscmVhZHkgaG9sZC4KIAkJICovCi0JCWxpc3RfYWRkKCZmb3VuZC0+ZF9hbGlhcywgJmlub2RlLT5pX2RlbnRyeSk7Ci0JCWZvdW5kLT5kX2lub2RlID0gaW5vZGU7CisJCV9fZF9pbnN0YW50aWF0ZShmb3VuZCwgaW5vZGUpOwogCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQlzZWN1cml0eV9kX2luc3RhbnRpYXRlKGZvdW5kLCBpbm9kZSk7CiAJCXJldHVybiBmb3VuZDsKQEAgLTE0NTYsOCArMTQ2Myw2IEBACiAgKiBkX3ZhbGlkYXRlIC0gdmVyaWZ5IGRlbnRyeSBwcm92aWRlZCBmcm9tIGluc2VjdXJlIHNvdXJjZQogICogQGRlbnRyeTogVGhlIGRlbnRyeSBhbGxlZ2VkIHRvIGJlIHZhbGlkIGNoaWxkIG9mIEBkcGFyZW50CiAgKiBAZHBhcmVudDogVGhlIHBhcmVudCBkZW50cnkgKGtub3duIHRvIGJlIHZhbGlkKQotICogQGhhc2g6IEhhc2ggb2YgdGhlIGRlbnRyeQotICogQGxlbjogTGVuZ3RoIG9mIHRoZSBuYW1lCiAgKgogICogQW4gaW5zZWN1cmUgc291cmNlIGhhcyBzZW50IHVzIGEgZGVudHJ5LCBoZXJlIHdlIHZlcmlmeSBpdCBhbmQgZGdldCgpIGl0LgogICogVGhpcyBpcyB1c2VkIGJ5IG5jcGZzIGluIGl0cyByZWFkZGlyIGltcGxlbWVudGF0aW9uLgpAQCAtMTcxNCwxOCArMTcxOSwyMyBAQAogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiB9CiAKLS8qCi0gKiBIZWxwZXIgdGhhdCByZXR1cm5zIDEgaWYgcDEgaXMgYSBwYXJlbnQgb2YgcDIsIGVsc2UgMAorLyoqCisgKiBkX2FuY2VzdG9yIC0gc2VhcmNoIGZvciBhbiBhbmNlc3RvcgorICogQHAxOiBhbmNlc3RvciBkZW50cnkKKyAqIEBwMjogY2hpbGQgZGVudHJ5CisgKgorICogUmV0dXJucyB0aGUgYW5jZXN0b3IgZGVudHJ5IG9mIHAyIHdoaWNoIGlzIGEgY2hpbGQgb2YgcDEsIGlmIHAxIGlzCisgKiBhbiBhbmNlc3RvciBvZiBwMiwgZWxzZSBOVUxMLgogICovCi1zdGF0aWMgaW50IGRfaXNwYXJlbnQoc3RydWN0IGRlbnRyeSAqcDEsIHN0cnVjdCBkZW50cnkgKnAyKQorc3RydWN0IGRlbnRyeSAqZF9hbmNlc3RvcihzdHJ1Y3QgZGVudHJ5ICpwMSwgc3RydWN0IGRlbnRyeSAqcDIpCiB7CiAJc3RydWN0IGRlbnRyeSAqcDsKIAotCWZvciAocCA9IHAyOyBwLT5kX3BhcmVudCAhPSBwOyBwID0gcC0+ZF9wYXJlbnQpIHsKKwlmb3IgKHAgPSBwMjsgIUlTX1JPT1QocCk7IHAgPSBwLT5kX3BhcmVudCkgewogCQlpZiAocC0+ZF9wYXJlbnQgPT0gcDEpCi0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiBwOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTE3NDksNyArMTc1OSw3IEBACiAKIAkvKiBDaGVjayBmb3IgbG9vcHMgKi8KIAlyZXQgPSBFUlJfUFRSKC1FTE9PUCk7Ci0JaWYgKGRfaXNwYXJlbnQoYWxpYXMsIGRlbnRyeSkpCisJaWYgKGRfYW5jZXN0b3IoYWxpYXMsIGRlbnRyeSkpCiAJCWdvdG8gb3V0X2VycjsKIAogCS8qIFNlZSBsb2NrX3JlbmFtZSgpICovCkBAIC0xODIyLDcgKzE4MzIsNyBAQAogCiAJaWYgKCFpbm9kZSkgewogCQlhY3R1YWwgPSBkZW50cnk7Ci0JCWRlbnRyeS0+ZF9pbm9kZSA9IE5VTEw7CisJCV9fZF9pbnN0YW50aWF0ZShkZW50cnksIE5VTEwpOwogCQlnb3RvIGZvdW5kX2xvY2s7CiAJfQogCkBAIC0yMTQ5LDMyICsyMTU5LDI3IEBACiAgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCAibmV3X2RlbnRyeSIgaXMgcGlubmVkIGJlZm9yZSBjYWxsaW5nIGlzX3N1YmRpcigpCiAgKi8KICAgCi1pbnQgaXNfc3ViZGlyKHN0cnVjdCBkZW50cnkgKiBuZXdfZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICogb2xkX2RlbnRyeSkKK2ludCBpc19zdWJkaXIoc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSkKIHsKIAlpbnQgcmVzdWx0OwotCXN0cnVjdCBkZW50cnkgKiBzYXZlZCA9IG5ld19kZW50cnk7CiAJdW5zaWduZWQgbG9uZyBzZXE7CiAKLQkvKiBuZWVkIHJjdV9yZWFkbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhlIGRfcGFyZW50IHRyYXNoaW5nIGR1ZSB0bwotCSAqIGRfbW92ZQorCS8qIEZJWE1FOiBUaGlzIGlzIG9sZCBiZWhhdmlvciwgbmVlZGVkPyBQbGVhc2UgY2hlY2sgY2FsbGVycy4gKi8KKwlpZiAobmV3X2RlbnRyeSA9PSBvbGRfZGVudHJ5KQorCQlyZXR1cm4gMTsKKworCS8qCisJICogTmVlZCByY3VfcmVhZGxvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoZSBkX3BhcmVudCB0cmFzaGluZworCSAqIGR1ZSB0byBkX21vdmUKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7Ci0gICAgICAgIGRvIHsKKwlkbyB7CiAJCS8qIGZvciByZXN0YXJ0aW5nIGlubmVyIGxvb3AgaW4gY2FzZSBvZiBzZXEgcmV0cnkgKi8KLQkJbmV3X2RlbnRyeSA9IHNhdmVkOwotCQlyZXN1bHQgPSAwOwogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZyZW5hbWVfbG9jayk7Ci0JCWZvciAoOzspIHsKLQkJCWlmIChuZXdfZGVudHJ5ICE9IG9sZF9kZW50cnkpIHsKLQkJCQlzdHJ1Y3QgZGVudHJ5ICogcGFyZW50ID0gbmV3X2RlbnRyeS0+ZF9wYXJlbnQ7Ci0JCQkJaWYgKHBhcmVudCA9PSBuZXdfZGVudHJ5KQotCQkJCQlicmVhazsKLQkJCQluZXdfZGVudHJ5ID0gcGFyZW50OwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQlpZiAoZF9hbmNlc3RvcihvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KSkKIAkJCXJlc3VsdCA9IDE7Ci0JCQlicmVhazsKLQkJfQorCQllbHNlCisJCQlyZXN1bHQgPSAwOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMjM0NCw3ICsyMzQ5LDYgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChkX2FsbG9jKTsKLUVYUE9SVF9TWU1CT0woZF9hbGxvY19hbm9uKTsKIEVYUE9SVF9TWU1CT0woZF9hbGxvY19yb290KTsKIEVYUE9SVF9TWU1CT0woZF9kZWxldGUpOwogRVhQT1JUX1NZTUJPTChkX2ZpbmRfYWxpYXMpOwpkaWZmIC0tZ2l0IGEvZnMvZHF1b3QuYyBiL2ZzL2RxdW90LmMKaW5kZXggZGEzMGEyNy4uNWU5NTI2MSAxMDA2NDQKLS0tIGEvZnMvZHF1b3QuYworKysgYi9mcy9kcXVvdC5jCkBAIC0xODA1LDE5ICsxODA1LDE5IEBACiB9CiAKIC8qIEFjdHVhbCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBxdW90YWN0bCgpICovCi1pbnQgdmZzX3F1b3RhX29uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLCBjaGFyICpwYXRoLAoraW50IHZmc19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwgY2hhciAqbmFtZSwKIAkJIGludCByZW1vdW50KQogewotCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IHBhdGggcGF0aDsKIAlpbnQgZXJyb3I7CiAKIAlpZiAocmVtb3VudCkKIAkJcmV0dXJuIHZmc19xdW90YV9vbl9yZW1vdW50KHNiLCB0eXBlKTsKIAotCWVycm9yID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX0ZPTExPVywgJm5kKTsKKwllcnJvciA9IGtlcm5fcGF0aChuYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7CiAJaWYgKCFlcnJvcikgewotCQllcnJvciA9IHZmc19xdW90YV9vbl9wYXRoKHNiLCB0eXBlLCBmb3JtYXRfaWQsICZuZC5wYXRoKTsKLQkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQllcnJvciA9IHZmc19xdW90YV9vbl9wYXRoKHNiLCB0eXBlLCBmb3JtYXRfaWQsICZwYXRoKTsKKwkJcGF0aF9wdXQoJnBhdGgpOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggMDQ2ZTAyNy4uNjRkMmJhOSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtNDcxLDMxICs0NzEsMjYgQEAKICAqLwogc3RhdGljIGludCBlY3J5cHRmc19yZWFkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmRldl9uYW1lKQogeworCXN0cnVjdCBwYXRoIHBhdGg7CiAJaW50IHJjOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0Jc3RydWN0IGRlbnRyeSAqbG93ZXJfcm9vdDsKLQlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKIAotCW1lbXNldCgmbmQsIDAsIHNpemVvZihzdHJ1Y3QgbmFtZWlkYXRhKSk7Ci0JcmMgPSBwYXRoX2xvb2t1cChkZXZfbmFtZSwgTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlksICZuZCk7CisJcmMgPSBrZXJuX3BhdGgoZGV2X25hbWUsIExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZLCAmcGF0aCk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJwYXRoX2xvb2t1cCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlsb3dlcl9yb290ID0gbmQucGF0aC5kZW50cnk7Ci0JbG93ZXJfbW50ID0gbmQucGF0aC5tbnQ7Ci0JZWNyeXB0ZnNfc2V0X3N1cGVyYmxvY2tfbG93ZXIoc2IsIGxvd2VyX3Jvb3QtPmRfc2IpOwotCXNiLT5zX21heGJ5dGVzID0gbG93ZXJfcm9vdC0+ZF9zYi0+c19tYXhieXRlczsKLQlzYi0+c19ibG9ja3NpemUgPSBsb3dlcl9yb290LT5kX3NiLT5zX2Jsb2Nrc2l6ZTsKLQllY3J5cHRmc19zZXRfZGVudHJ5X2xvd2VyKHNiLT5zX3Jvb3QsIGxvd2VyX3Jvb3QpOwotCWVjcnlwdGZzX3NldF9kZW50cnlfbG93ZXJfbW50KHNiLT5zX3Jvb3QsIGxvd2VyX21udCk7Ci0JcmMgPSBlY3J5cHRmc19pbnRlcnBvc2UobG93ZXJfcm9vdCwgc2ItPnNfcm9vdCwgc2IsIDApOworCWVjcnlwdGZzX3NldF9zdXBlcmJsb2NrX2xvd2VyKHNiLCBwYXRoLmRlbnRyeS0+ZF9zYik7CisJc2ItPnNfbWF4Ynl0ZXMgPSBwYXRoLmRlbnRyeS0+ZF9zYi0+c19tYXhieXRlczsKKwlzYi0+c19ibG9ja3NpemUgPSBwYXRoLmRlbnRyeS0+ZF9zYi0+c19ibG9ja3NpemU7CisJZWNyeXB0ZnNfc2V0X2RlbnRyeV9sb3dlcihzYi0+c19yb290LCBwYXRoLmRlbnRyeSk7CisJZWNyeXB0ZnNfc2V0X2RlbnRyeV9sb3dlcl9tbnQoc2ItPnNfcm9vdCwgcGF0aC5tbnQpOworCXJjID0gZWNyeXB0ZnNfaW50ZXJwb3NlKHBhdGguZGVudHJ5LCBzYi0+c19yb290LCBzYiwgMCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF9mcmVlOwogCXJjID0gMDsKIAlnb3RvIG91dDsKIG91dF9mcmVlOgotCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWZzL25hbWVpLmMgYi9mcy9lZnMvbmFtZWkuYwppbmRleCAyOTFhYmIxLi5jM2ZiNWY5IDEwMDY0NAotLS0gYS9mcy9lZnMvbmFtZWkuYworKysgYi9mcy9lZnMvbmFtZWkuYwpAQCAtMTEyLDM1ICsxMTIsMTQgQEAKIAogc3RydWN0IGRlbnRyeSAqZWZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqcGFyZW50OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gRVJSX1BUUigtRU5PRU5UKTsKIAllZnNfaW5vX3QgaW5vOwotCWxvbmcgZXJyb3I7CiAKIAlsb2NrX2tlcm5lbCgpOwotCi0JZXJyb3IgPSAtRU5PRU5UOwogCWlubyA9IGVmc19maW5kX2VudHJ5KGNoaWxkLT5kX2lub2RlLCAiLi4iLCAyKTsKLQlpZiAoIWlubykKLQkJZ290byBmYWlsOwotCi0JaW5vZGUgPSBlZnNfaWdldChjaGlsZC0+ZF9pbm9kZS0+aV9zYiwgaW5vKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQllcnJvciA9IFBUUl9FUlIoaW5vZGUpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JZXJyb3IgPSAtRU5PTUVNOwotCXBhcmVudCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFwYXJlbnQpCi0JCWdvdG8gZmFpbF9pcHV0OwotCisJaWYgKGlubykKKwkJcGFyZW50ID0gZF9vYnRhaW5fYWxpYXMoZWZzX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubykpOwogCXVubG9ja19rZXJuZWwoKTsKKwogCXJldHVybiBwYXJlbnQ7Ci0KLSBmYWlsX2lwdXQ6Ci0JaXB1dChpbm9kZSk7Ci0gZmFpbDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGE0MWU3OTAuLjRlODM0ZjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTEzODYsNyArMTM4Niw3IEBACiAgKiBuYW1lIGludG8gY29yZW5hbWUsIHdoaWNoIG11c3QgaGF2ZSBzcGFjZSBmb3IgYXQgbGVhc3QKICAqIENPUkVOQU1FX01BWF9TSVpFIGJ5dGVzIHBsdXMgb25lIGJ5dGUgZm9yIHRoZSB6ZXJvIHRlcm1pbmF0b3IuCiAgKi8KLXN0YXRpYyBpbnQgZm9ybWF0X2NvcmVuYW1lKGNoYXIgKmNvcmVuYW1lLCBpbnQgbnJfdGhyZWFkcywgbG9uZyBzaWducikKK3N0YXRpYyBpbnQgZm9ybWF0X2NvcmVuYW1lKGNoYXIgKmNvcmVuYW1lLCBsb25nIHNpZ25yKQogewogCWNvbnN0IGNoYXIgKnBhdF9wdHIgPSBjb3JlX3BhdHRlcm47CiAJaW50IGlzcGlwZSA9ICgqcGF0X3B0ciA9PSAnfCcpOwpAQCAtMTQ5Myw4ICsxNDkzLDcgQEAKIAkgKiBJZiBjb3JlX3BhdHRlcm4gZG9lcyBub3QgaW5jbHVkZSBhICVwIChhcyBpcyB0aGUgZGVmYXVsdCkKIAkgKiBhbmQgY29yZV91c2VzX3BpZCBpcyBzZXQsIHRoZW4gLiVwaWQgd2lsbCBiZSBhcHBlbmRlZCB0bwogCSAqIHRoZSBmaWxlbmFtZS4gRG8gbm90IGRvIHRoaXMgZm9yIHBpcGVkIGNvbW1hbmRzLiAqLwotCWlmICghaXNwaXBlICYmICFwaWRfaW5fcGF0dGVybgotCSAgICAmJiAoY29yZV91c2VzX3BpZCB8fCBucl90aHJlYWRzKSkgeworCWlmICghaXNwaXBlICYmICFwaWRfaW5fcGF0dGVybiAmJiBjb3JlX3VzZXNfcGlkKSB7CiAJCXJjID0gc25wcmludGYob3V0X3B0ciwgb3V0X2VuZCAtIG91dF9wdHIsCiAJCQkgICAgICAiLiVkIiwgdGFza190Z2lkX3ZucihjdXJyZW50KSk7CiAJCWlmIChyYyA+IG91dF9lbmQgLSBvdXRfcHRyKQpAQCAtMTc1Nyw3ICsxNzU2LDcgQEAKIAkgKiB1c2VzIGxvY2tfa2VybmVsKCkKIAkgKi8KICAJbG9ja19rZXJuZWwoKTsKLQlpc3BpcGUgPSBmb3JtYXRfY29yZW5hbWUoY29yZW5hbWUsIHJldHZhbCwgc2lnbnIpOworCWlzcGlwZSA9IGZvcm1hdF9jb3JlbmFtZShjb3JlbmFtZSwgc2lnbnIpOwogCXVubG9ja19rZXJuZWwoKTsKIAkvKgogCSAqIERvbid0IGJvdGhlciB0byBjaGVjayB0aGUgUkxJTUlUX0NPUkUgdmFsdWUgaWYgY29yZV9wYXR0ZXJuIHBvaW50cwpkaWZmIC0tZ2l0IGEvZnMvZXhwb3J0ZnMvZXhwZnMuYyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKaW5kZXggY2M5MTIyNy4uODAyNDZiYSAxMDA2NDQKLS0tIGEvZnMvZXhwb3J0ZnMvZXhwZnMuYworKysgYi9mcy9leHBvcnRmcy9leHBmcy5jCkBAIC05NCw5ICs5NCw4IEBACiAgKiBJdCBtYXkgYWxyZWFkeSBiZSwgYXMgdGhlIGZsYWcgaXNuJ3QgYWx3YXlzIHVwZGF0ZWQgd2hlbiBjb25uZWN0aW9uIGhhcHBlbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJlY29ubmVjdF9wYXRoKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXRfZGlyKQorcmVjb25uZWN0X3BhdGgoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKnRhcmdldF9kaXIsIGNoYXIgKm5idWYpCiB7Ci0JY2hhciBuYnVmW05BTUVfTUFYKzFdOwogCWludCBub3Byb2dyZXNzID0gMDsKIAlpbnQgZXJyID0gLUVTVEFMRTsKIApAQCAtMjgxLDEzICsyODAsMTQgQEAKIAkJaW50IG9sZF9zZXEgPSBidWZmZXIuc2VxdWVuY2U7CiAKIAkJZXJyb3IgPSB2ZnNfcmVhZGRpcihmaWxlLCBmaWxsZGlyX29uZSwgJmJ1ZmZlcik7CisJCWlmIChidWZmZXIuZm91bmQpIHsKKwkJCWVycm9yID0gMDsKKwkJCWJyZWFrOworCQl9CiAKIAkJaWYgKGVycm9yIDwgMCkKIAkJCWJyZWFrOwogCi0JCWVycm9yID0gMDsKLQkJaWYgKGJ1ZmZlci5mb3VuZCkKLQkJCWJyZWFrOwogCQllcnJvciA9IC1FTk9FTlQ7CiAJCWlmIChvbGRfc2VxID09IGJ1ZmZlci5zZXF1ZW5jZSkKIAkJCWJyZWFrOwpAQCAtMzYwLDE0ICszNjAsMTMgQEAKIHsKIAljb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgKm5vcCA9IG1udC0+bW50X3NiLT5zX2V4cG9ydF9vcDsKIAlzdHJ1Y3QgZGVudHJ5ICpyZXN1bHQsICphbGlhczsKKwljaGFyIG5idWZbTkFNRV9NQVgrMV07CiAJaW50IGVycjsKIAogCS8qCiAJICogVHJ5IHRvIGdldCBhbnkgZGVudHJ5IGZvciB0aGUgZ2l2ZW4gZmlsZSBoYW5kbGUgZnJvbSB0aGUgZmlsZXN5c3RlbS4KIAkgKi8KIAlyZXN1bHQgPSBub3AtPmZoX3RvX2RlbnRyeShtbnQtPm1udF9zYiwgZmlkLCBmaF9sZW4sIGZpbGVpZF90eXBlKTsKLQlpZiAoIXJlc3VsdCkKLQkJcmVzdWx0ID0gRVJSX1BUUigtRVNUQUxFKTsKIAlpZiAoSVNfRVJSKHJlc3VsdCkpCiAJCXJldHVybiByZXN1bHQ7CiAKQEAgLTM4MSw3ICszODAsNyBAQAogCQkgKiBmaWxlc3lzdGVtIHJvb3QuCiAJCSAqLwogCQlpZiAocmVzdWx0LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkgewotCQkJZXJyID0gcmVjb25uZWN0X3BhdGgobW50LCByZXN1bHQpOworCQkJZXJyID0gcmVjb25uZWN0X3BhdGgobW50LCByZXN1bHQsIG5idWYpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIGVycl9yZXN1bHQ7CiAJCX0KQEAgLTM5Nyw3ICszOTYsNiBAQAogCQkgKiBJdCdzIG5vdCBhIGRpcmVjdG9yeS4gIExpZmUgaXMgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZC4KIAkJICovCiAJCXN0cnVjdCBkZW50cnkgKnRhcmdldF9kaXIsICpucmVzdWx0OwotCQljaGFyIG5idWZbTkFNRV9NQVgrMV07CiAKIAkJLyoKIAkJICogU2VlIGlmIGVpdGhlciB0aGUgZGVudHJ5IHdlIGp1c3QgZ290IGZyb20gdGhlIGZpbGVzeXN0ZW0KQEAgLTQyMiw4ICs0MjAsNiBAQAogCiAJCXRhcmdldF9kaXIgPSBub3AtPmZoX3RvX3BhcmVudChtbnQtPm1udF9zYiwgZmlkLAogCQkJCWZoX2xlbiwgZmlsZWlkX3R5cGUpOwotCQlpZiAoIXRhcmdldF9kaXIpCi0JCQlnb3RvIGVycl9yZXN1bHQ7CiAJCWVyciA9IFBUUl9FUlIodGFyZ2V0X2Rpcik7CiAJCWlmIChJU19FUlIodGFyZ2V0X2RpcikpCiAJCQlnb3RvIGVycl9yZXN1bHQ7CkBAIC00MzMsNyArNDI5LDcgQEAKIAkJICogY29ubmVjdGVkIHRvIHRoZSBmaWxlc3lzdGVtIHJvb3QuICBUaGUgVkZTIHJlYWxseSBkb2Vzbid0CiAJCSAqIGxpa2UgZGlzY29ubmVjdGVkIGRpcmVjdG9yaWVzLi4KIAkJICovCi0JCWVyciA9IHJlY29ubmVjdF9wYXRoKG1udCwgdGFyZ2V0X2Rpcik7CisJCWVyciA9IHJlY29ubmVjdF9wYXRoKG1udCwgdGFyZ2V0X2RpciwgbmJ1Zik7CiAJCWlmIChlcnIpIHsKIAkJCWRwdXQodGFyZ2V0X2Rpcik7CiAJCQlnb3RvIGVycl9yZXN1bHQ7CmRpZmYgLS1naXQgYS9mcy9leHQyL0tjb25maWcgYi9mcy9leHQyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhNjc4MAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4dDIvS2NvbmZpZwpAQCAtMCwwICsxLDU1IEBACitjb25maWcgRVhUMl9GUworCXRyaXN0YXRlICJTZWNvbmQgZXh0ZW5kZWQgZnMgc3VwcG9ydCIKKwloZWxwCisJICBFeHQyIGlzIGEgc3RhbmRhcmQgTGludXggZmlsZSBzeXN0ZW0gZm9yIGhhcmQgZGlza3MuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQyLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgRVhUMl9GU19YQVRUUgorCWJvb2wgIkV4dDIgZXh0ZW5kZWQgYXR0cmlidXRlcyIKKwlkZXBlbmRzIG9uIEVYVDJfRlMKKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgRVhUMl9GU19QT1NJWF9BQ0wKKwlib29sICJFeHQyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gRVhUMl9GU19YQVRUUgorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEVYVDJfRlNfU0VDVVJJVFkKKwlib29sICJFeHQyIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgZXh0MiBmaWxlc3lzdGVtLgorCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCisJICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCisKK2NvbmZpZyBFWFQyX0ZTX1hJUAorCWJvb2wgIkV4dDIgZXhlY3V0ZSBpbiBwbGFjZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRVhUMl9GUyAmJiBNTVUKKwloZWxwCisJICBFeGVjdXRlIGluIHBsYWNlIGNhbiBiZSB1c2VkIG9uIG1lbW9yeS1iYWNrZWQgYmxvY2sgZGV2aWNlcy4gSWYgeW91CisJICBlbmFibGUgdGhpcyBvcHRpb24sIHlvdSBjYW4gc2VsZWN0IHRvIG1vdW50IGJsb2NrIGRldmljZXMgd2hpY2ggYXJlCisJICBjYXBhYmxlIG9mIHRoaXMgZmVhdHVyZSB3aXRob3V0IHVzaW5nIHRoZSBwYWdlIGNhY2hlLgorCisJICBJZiB5b3UgZG8gbm90IHVzZSBhIGJsb2NrIGRldmljZSB0aGF0IGlzIGNhcGFibGUgb2YgdXNpbmcgdGhpcywKKwkgIG9yIGlmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9leHQyL2Rpci5jIGIvZnMvZXh0Mi9kaXIuYwppbmRleCAxMWE0OWNlLi45YTBmYzQwIDEwMDY0NAotLS0gYS9mcy9leHQyL2Rpci5jCisrKyBiL2ZzL2V4dDIvZGlyLmMKQEAgLTM1NCwxMSArMzU0LDExIEBACiAgKiAoYXMgYSBwYXJhbWV0ZXIgLSByZXNfZGlyKS4gUGFnZSBpcyByZXR1cm5lZCBtYXBwZWQgYW5kIHVubG9ja2VkLgogICogRW50cnkgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZC4KICAqLwotc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBleHQyX2ZpbmRfZW50cnkgKHN0cnVjdCBpbm9kZSAqIGRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHBhZ2UgKiogcmVzX3BhZ2UpCitzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqZXh0Ml9maW5kX2VudHJ5IChzdHJ1Y3QgaW5vZGUgKiBkaXIsCisJCQlzdHJ1Y3QgcXN0ciAqY2hpbGQsIHN0cnVjdCBwYWdlICoqIHJlc19wYWdlKQogewotCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwotCWludCBuYW1lbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjaGlsZC0+bmFtZTsKKwlpbnQgbmFtZWxlbiA9IGNoaWxkLT5sZW47CiAJdW5zaWduZWQgcmVjbGVuID0gRVhUMl9ESVJfUkVDX0xFTihuYW1lbGVuKTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBuOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gZGlyX3BhZ2VzKGRpcik7CkBAIC00MzEsMTMgKzQzMSwxMyBAQAogCXJldHVybiBkZTsKIH0KIAotaW5vX3QgZXh0Ml9pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoraW5vX3QgZXh0Ml9pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcXN0ciAqY2hpbGQpCiB7CiAJaW5vX3QgcmVzID0gMDsKLQlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqIGRlOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICpkZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkKLQlkZSA9IGV4dDJfZmluZF9lbnRyeSAoZGlyLCBkZW50cnksICZwYWdlKTsKKwlkZSA9IGV4dDJfZmluZF9lbnRyeSAoZGlyLCBjaGlsZCwgJnBhZ2UpOwogCWlmIChkZSkgewogCQlyZXMgPSBsZTMyX3RvX2NwdShkZS0+aW5vZGUpOwogCQlleHQyX3B1dF9wYWdlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9leHQyLmggYi9mcy9leHQyL2V4dDIuaAppbmRleCBiYWU5OThjLi4zMjAzMDQyIDEwMDY0NAotLS0gYS9mcy9leHQyL2V4dDIuaAorKysgYi9mcy9leHQyL2V4dDIuaApAQCAtMTA1LDkgKzEwNSw5IEBACiAKIC8qIGRpci5jICovCiBleHRlcm4gaW50IGV4dDJfYWRkX2xpbmsgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwotZXh0ZXJuIGlub190IGV4dDJfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBpbm9fdCBleHQyX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOwogZXh0ZXJuIGludCBleHQyX21ha2VfZW1wdHkoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqIGV4dDJfZmluZF9lbnRyeSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcGFnZSAqKik7CitleHRlcm4gc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBleHQyX2ZpbmRfZW50cnkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBxc3RyICosIHN0cnVjdCBwYWdlICoqKTsKIGV4dGVybiBpbnQgZXh0Ml9kZWxldGVfZW50cnkgKHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICosIHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIGludCBleHQyX2VtcHR5X2RpciAoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICogZXh0Ml9kb3Rkb3QgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKik7CmRpZmYgLS1naXQgYS9mcy9leHQyL25hbWVpLmMgYi9mcy9leHQyL25hbWVpLmMKaW5kZXggODBjOTdmZC4uMmE3NDcyNSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9uYW1laS5jCisrKyBiL2ZzL2V4dDIvbmFtZWkuYwpAQCAtNjAsNyArNjAsNyBAQAogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBFWFQyX05BTUVfTEVOKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKIAotCWlubyA9IGV4dDJfaW5vZGVfYnlfbmFtZShkaXIsIGRlbnRyeSk7CisJaW5vID0gZXh0Ml9pbm9kZV9ieV9uYW1lKGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpbm9kZSA9IE5VTEw7CiAJaWYgKGlubykgewogCQlpbm9kZSA9IGV4dDJfaWdldChkaXItPmlfc2IsIGlubyk7CkBAIC03MiwyNyArNzIsMTEgQEAKIAogc3RydWN0IGRlbnRyeSAqZXh0Ml9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogewotCXVuc2lnbmVkIGxvbmcgaW5vOwotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBkZW50cnkgZG90ZG90OwotCi0JZG90ZG90LmRfbmFtZS5uYW1lID0gIi4uIjsKLQlkb3Rkb3QuZF9uYW1lLmxlbiA9IDI7Ci0KLQlpbm8gPSBleHQyX2lub2RlX2J5X25hbWUoY2hpbGQtPmRfaW5vZGUsICZkb3Rkb3QpOworCXN0cnVjdCBxc3RyIGRvdGRvdCA9IHsubmFtZSA9ICIuLiIsIC5sZW4gPSAyfTsKKwl1bnNpZ25lZCBsb25nIGlubyA9IGV4dDJfaW5vZGVfYnlfbmFtZShjaGlsZC0+ZF9pbm9kZSwgJmRvdGRvdCk7CiAJaWYgKCFpbm8pCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwotCWlub2RlID0gZXh0Ml9pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCBpbm8pOwotCi0JaWYgKElTX0VSUihpbm9kZSkpCi0JCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7Ci0JcGFyZW50ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQlpZiAoIXBhcmVudCkgewotCQlpcHV0KGlub2RlKTsKLQkJcGFyZW50ID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JcmV0dXJuIHBhcmVudDsKKwlyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXh0Ml9pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCBpbm8pKTsKIH0gCiAKIC8qCkBAIC0yNTcsNyArMjQxLDcgQEAKIAlzdHJ1Y3QgcGFnZSAqIHBhZ2U7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAKLQlkZSA9IGV4dDJfZmluZF9lbnRyeSAoZGlyLCBkZW50cnksICZwYWdlKTsKKwlkZSA9IGV4dDJfZmluZF9lbnRyeSAoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZwYWdlKTsKIAlpZiAoIWRlKQogCQlnb3RvIG91dDsKIApAQCAtMjk5LDcgKzI4Myw3IEBACiAJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBvbGRfZGU7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAKLQlvbGRfZGUgPSBleHQyX2ZpbmRfZW50cnkgKG9sZF9kaXIsIG9sZF9kZW50cnksICZvbGRfcGFnZSk7CisJb2xkX2RlID0gZXh0Ml9maW5kX2VudHJ5IChvbGRfZGlyLCAmb2xkX2RlbnRyeS0+ZF9uYW1lLCAmb2xkX3BhZ2UpOwogCWlmICghb2xkX2RlKQogCQlnb3RvIG91dDsKIApAQCAtMzE5LDcgKzMwMyw3IEBACiAJCQlnb3RvIG91dF9kaXI7CiAKIAkJZXJyID0gLUVOT0VOVDsKLQkJbmV3X2RlID0gZXh0Ml9maW5kX2VudHJ5IChuZXdfZGlyLCBuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOworCQluZXdfZGUgPSBleHQyX2ZpbmRfZW50cnkgKG5ld19kaXIsICZuZXdfZGVudHJ5LT5kX25hbWUsICZuZXdfcGFnZSk7CiAJCWlmICghbmV3X2RlKQogCQkJZ290byBvdXRfZGlyOwogCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94aXAuYyBiL2ZzL2V4dDIveGlwLmMKaW5kZXggNGZiOTRjMi4uYjcyYjg1OCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi94aXAuYworKysgYi9mcy9leHQyL3hpcC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9leHQyX2ZzX3NiLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgImV4dDIuaCIKICNpbmNsdWRlICJ4aXAuaCIKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9LY29uZmlnIGIvZnMvZXh0My9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGNmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leHQzL0tjb25maWcKQEAgLTAsMCArMSw2NyBAQAorY29uZmlnIEVYVDNfRlMKKwl0cmlzdGF0ZSAiRXh0MyBqb3VybmFsbGluZyBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCXNlbGVjdCBKQkQKKwloZWxwCisJICBUaGlzIGlzIHRoZSBqb3VybmFsbGluZyB2ZXJzaW9uIG9mIHRoZSBTZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KKwkgIChvZnRlbiBjYWxsZWQgZXh0MyksIHRoZSBkZSBmYWN0byBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbQorCSAgKG1ldGhvZCB0byBvcmdhbml6ZSBmaWxlcyBvbiBhIHN0b3JhZ2UgZGV2aWNlKSBmb3IgaGFyZCBkaXNrcy4KKworCSAgVGhlIGpvdXJuYWxsaW5nIGNvZGUgaW5jbHVkZWQgaW4gdGhpcyBkcml2ZXIgbWVhbnMgeW91IGRvIG5vdCBoYXZlCisJICB0byBydW4gZTJmc2NrIChmaWxlIHN5c3RlbSBjaGVja2VyKSBvbiB5b3VyIGZpbGUgc3lzdGVtcyBhZnRlciBhCisJICBjcmFzaC4gIFRoZSBqb3VybmFsIGtlZXBzIHRyYWNrIG9mIGFueSBjaGFuZ2VzIHRoYXQgd2VyZSBiZWluZyBtYWRlCisJICBhdCB0aGUgdGltZSB0aGUgc3lzdGVtIGNyYXNoZWQsIGFuZCBjYW4gZW5zdXJlIHRoYXQgeW91ciBmaWxlIHN5c3RlbQorCSAgaXMgY29uc2lzdGVudCB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGxlbmd0aHkgY2hlY2suCisKKwkgIE90aGVyIHRoYW4gYWRkaW5nIHRoZSBqb3VybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSwgdGhlIG9uLWRpc2sgZm9ybWF0CisJICBvZiBleHQzIGlzIGlkZW50aWNhbCB0byBleHQyLiAgSXQgaXMgcG9zc2libGUgdG8gZnJlZWx5IHN3aXRjaAorCSAgYmV0d2VlbiB1c2luZyB0aGUgZXh0MyBkcml2ZXIgYW5kIHRoZSBleHQyIGRyaXZlciwgYXMgbG9uZyBhcyB0aGUKKwkgIGZpbGUgc3lzdGVtIGhhcyBiZWVuIGNsZWFubHkgdW5tb3VudGVkLCBvciBlMmZzY2sgaXMgcnVuIG9uIHRoZSBmaWxlCisJICBzeXN0ZW0uCisKKwkgIFRvIGFkZCBhIGpvdXJuYWwgb24gYW4gZXhpc3RpbmcgZXh0MiBmaWxlIHN5c3RlbSBvciBjaGFuZ2UgdGhlCisJICBiZWhhdmlvciBvZiBleHQzIGZpbGUgc3lzdGVtcywgeW91IGNhbiB1c2UgdGhlIHR1bmUyZnMgdXRpbGl0eSAoIm1hbgorCSAgdHVuZTJmcyIpLiAgVG8gbW9kaWZ5IGF0dHJpYnV0ZXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIGV4dDMKKwkgIGZpbGUgc3lzdGVtcywgdXNlIGNoYXR0ciAoIm1hbiBjaGF0dHIiKS4gIFlvdSBuZWVkIHRvIGJlIHVzaW5nCisJICBlMmZzcHJvZ3MgdmVyc2lvbiAxLjIwIG9yIGxhdGVyIGluIG9yZGVyIHRvIGNyZWF0ZSBleHQzIGpvdXJuYWxzCisJICAoYXZhaWxhYmxlIGF0IDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncy8+KS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDMuCisKK2NvbmZpZyBFWFQzX0ZTX1hBVFRSCisJYm9vbCAiRXh0MyBleHRlbmRlZCBhdHRyaWJ1dGVzIgorCWRlcGVuZHMgb24gRVhUM19GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDMuCisKK2NvbmZpZyBFWFQzX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkV4dDMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBFWFQzX0ZTX1hBVFRSCisJc2VsZWN0IEZTX1BPU0lYX0FDTAorCWhlbHAKKwkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKKwkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KKworCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCisJICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgorCitjb25maWcgRVhUM19GU19TRUNVUklUWQorCWJvb2wgIkV4dDMgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgorCWhlbHAKKwkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscworCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgorCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQorCSAgbGFiZWxzIGluIHRoZSBleHQzIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IDkyZmQwMzMuLmY1YjU3YTIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtMTU0Nyw2ICsxNTQ3LDcgQEAKIAkgKiB0dXJuIG9mZiByZXNlcnZhdGlvbiBmb3IgdGhpcyBhbGxvY2F0aW9uCiAJICovCiAJaWYgKG15X3JzdiAmJiAoZnJlZV9ibG9ja3MgPCB3aW5kb3dzeikKKwkJJiYgKGZyZWVfYmxvY2tzID4gMCkKIAkJJiYgKHJzdl9pc19lbXB0eSgmbXlfcnN2LT5yc3Zfd2luZG93KSkpCiAJCW15X3JzdiA9IE5VTEw7CiAKQEAgLTE1ODUsNyArMTU4Niw3IEBACiAJCSAqIGZyZWUgYmxvY2tzIGlzIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSByZXNlcnZhdGlvbgogCQkgKiB3aW5kb3cgc2l6ZS4KIAkJICovCi0JCWlmIChmcmVlX2Jsb2NrcyA8PSAod2luZG93c3ovMikpCisJCWlmIChteV9yc3YgJiYgKGZyZWVfYmxvY2tzIDw9ICh3aW5kb3dzei8yKSkpCiAJCQljb250aW51ZTsKIAogCQlicmVsc2UoYml0bWFwX2JoKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZGlyLmMgYi9mcy9leHQzL2Rpci5jCmluZGV4IDJlZWE5NmUuLjRjODI1MzEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZGlyLmMKKysrIGIvZnMvZXh0My9kaXIuYwpAQCAtMTAyLDYgKzEwMiw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgZGlyX2hhc19lcnJvciA9IDA7CiAKIAlzYiA9IGlub2RlLT5pX3NiOwogCkBAIC0xNDgsOSArMTQ5LDEyIEBACiAJCSAqIG9mIHJlY292ZXJpbmcgZGF0YSB3aGVuIHRoZXJlJ3MgYSBiYWQgc2VjdG9yCiAJCSAqLwogCQlpZiAoIWJoKSB7Ci0JCQlleHQzX2Vycm9yIChzYiwgImV4dDNfcmVhZGRpciIsCi0JCQkJImRpcmVjdG9yeSAjJWx1IGNvbnRhaW5zIGEgaG9sZSBhdCBvZmZzZXQgJWx1IiwKLQkJCQlpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nKWZpbHAtPmZfcG9zKTsKKwkJCWlmICghZGlyX2hhc19lcnJvcikgeworCQkJCWV4dDNfZXJyb3Ioc2IsIF9fZnVuY19fLCAiZGlyZWN0b3J5ICMlbHUgIgorCQkJCQkiY29udGFpbnMgYSBob2xlIGF0IG9mZnNldCAlbGxkIiwKKwkJCQkJaW5vZGUtPmlfaW5vLCBmaWxwLT5mX3Bvcyk7CisJCQkJZGlyX2hhc19lcnJvciA9IDE7CisJCQl9CiAJCQkvKiBjb3JydXB0IHNpemU/ICBNYXliZSBubyBtb3JlIGJsb2NrcyB0byByZWFkICovCiAJCQlpZiAoZmlscC0+Zl9wb3MgPiBpbm9kZS0+aV9ibG9ja3MgPDwgOSkKIAkJCQlicmVhazsKQEAgLTQxMCw3ICs0MTQsNyBAQAogCQkJCWdldF9kdHlwZShzYiwgZm5hbWUtPmZpbGVfdHlwZSkpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWZpbHAtPmZfcG9zID0gY3Vycl9wb3M7Ci0JCQlpbmZvLT5leHRyYV9mbmFtZSA9IGZuYW1lLT5uZXh0OworCQkJaW5mby0+ZXh0cmFfZm5hbWUgPSBmbmFtZTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQogCQlmbmFtZSA9IGZuYW1lLT5uZXh0OwpAQCAtNDQ5LDExICs0NTMsMjEgQEAKIAkgKiBJZiB0aGVyZSBhcmUgYW55IGxlZnRvdmVyIG5hbWVzIG9uIHRoZSBoYXNoIGNvbGxpc2lvbgogCSAqIGNoYWluLCByZXR1cm4gdGhlbSBmaXJzdC4KIAkgKi8KLQlpZiAoaW5mby0+ZXh0cmFfZm5hbWUgJiYKLQkgICAgY2FsbF9maWxsZGlyKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgaW5mby0+ZXh0cmFfZm5hbWUpKQotCQlnb3RvIGZpbmlzaGVkOworCWlmIChpbmZvLT5leHRyYV9mbmFtZSkgeworCQlpZiAoY2FsbF9maWxsZGlyKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgaW5mby0+ZXh0cmFfZm5hbWUpKQorCQkJZ290byBmaW5pc2hlZDsKIAotCWlmICghaW5mby0+Y3Vycl9ub2RlKQorCQlpbmZvLT5leHRyYV9mbmFtZSA9IE5VTEw7CisJCWluZm8tPmN1cnJfbm9kZSA9IHJiX25leHQoaW5mby0+Y3Vycl9ub2RlKTsKKwkJaWYgKCFpbmZvLT5jdXJyX25vZGUpIHsKKwkJCWlmIChpbmZvLT5uZXh0X2hhc2ggPT0gfjApIHsKKwkJCQlmaWxwLT5mX3BvcyA9IEVYVDNfSFRSRUVfRU9GOworCQkJCWdvdG8gZmluaXNoZWQ7CisJCQl9CisJCQlpbmZvLT5jdXJyX2hhc2ggPSBpbmZvLT5uZXh0X2hhc2g7CisJCQlpbmZvLT5jdXJyX21pbm9yX2hhc2ggPSAwOworCQl9CisJfSBlbHNlIGlmICghaW5mby0+Y3Vycl9ub2RlKQogCQlpbmZvLT5jdXJyX25vZGUgPSByYl9maXJzdCgmaW5mby0+cm9vdCk7CiAKIAl3aGlsZSAoMSkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IGViZmVjNGQuLmY4NDI0YWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTExODYsNiArMTE4NiwxMyBAQAogCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkvKgorCQkgKiBibG9ja193cml0ZV9iZWdpbiBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcgYmxvY2tzCisJCSAqIG91dHNpZGUgaV9zaXplLiAgVHJpbSB0aGVzZSBvZmYgYWdhaW4uIERvbid0IG5lZWQKKwkJICogaV9zaXplX3JlYWQgYmVjYXVzZSB3ZSBob2xkIGlfbXV0ZXguCisJCSAqLworCQlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlub2RlLT5pX3NpemUpOwogCX0KIAlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKIAkJZ290byByZXRyeTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW9jdGwuYyBiL2ZzL2V4dDMvaW9jdGwuYwppbmRleCAwZDBjNzAxLi5iNzM5NGQwIDEwMDY0NAotLS0gYS9mcy9leHQzL2lvY3RsLmMKKysrIGIvZnMvZXh0My9pb2N0bC5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAljYXNlIEVYVDNfSU9DX0dST1VQX0VYVEVORDogewogCQlleHQzX2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQ7CiAJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQkJaW50IGVycjsKKwkJaW50IGVyciwgZXJyMjsKIAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCiAJCQlyZXR1cm4gLUVQRVJNOwpAQCAtMjU0LDggKzI1NCwxMCBAQAogCQl9CiAJCWVyciA9IGV4dDNfZ3JvdXBfZXh0ZW5kKHNiLCBFWFQzX1NCKHNiKS0+c19lcywgbl9ibG9ja3NfY291bnQpOwogCQlqb3VybmFsX2xvY2tfdXBkYXRlcyhFWFQzX1NCKHNiKS0+c19qb3VybmFsKTsKLQkJam91cm5hbF9mbHVzaChFWFQzX1NCKHNiKS0+c19qb3VybmFsKTsKKwkJZXJyMiA9IGpvdXJuYWxfZmx1c2goRVhUM19TQihzYiktPnNfam91cm5hbCk7CiAJCWpvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoRVhUM19TQihzYiktPnNfam91cm5hbCk7CisJCWlmIChlcnIgPT0gMCkKKwkJCWVyciA9IGVycjI7CiBncm91cF9leHRlbmRfb3V0OgogCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJcmV0dXJuIGVycjsKQEAgLTI2Myw3ICsyNjUsNyBAQAogCWNhc2UgRVhUM19JT0NfR1JPVVBfQUREOiB7CiAJCXN0cnVjdCBleHQzX25ld19ncm91cF9kYXRhIGlucHV0OwogCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0JCWludCBlcnI7CisJCWludCBlcnIsIGVycjI7CiAKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQogCQkJcmV0dXJuIC1FUEVSTTsKQEAgLTI4MCw4ICsyODIsMTAgQEAKIAogCQllcnIgPSBleHQzX2dyb3VwX2FkZChzYiwgJmlucHV0KTsKIAkJam91cm5hbF9sb2NrX3VwZGF0ZXMoRVhUM19TQihzYiktPnNfam91cm5hbCk7Ci0JCWpvdXJuYWxfZmx1c2goRVhUM19TQihzYiktPnNfam91cm5hbCk7CisJCWVycjIgPSBqb3VybmFsX2ZsdXNoKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwogCQlqb3VybmFsX3VubG9ja191cGRhdGVzKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOworCQlpZiAoZXJyID09IDApCisJCQllcnIgPSBlcnIyOwogZ3JvdXBfYWRkX291dDoKIAkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9leHQzL25hbWVpLmMgYi9mcy9leHQzL25hbWVpLmMKaW5kZXggZGUxM2U5MS4uM2U1ZWRjOSAxMDA2NDQKLS0tIGEvZnMvZXh0My9uYW1laS5jCisrKyBiL2ZzL2V4dDMvbmFtZWkuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiBzdGF0aWMgdm9pZCBkeF9zZXRfbGltaXQgKHN0cnVjdCBkeF9lbnRyeSAqZW50cmllcywgdW5zaWduZWQgdmFsdWUpOwogc3RhdGljIHVuc2lnbmVkIGR4X3Jvb3RfbGltaXQgKHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBpbmZvc2l6ZSk7CiBzdGF0aWMgdW5zaWduZWQgZHhfbm9kZV9saW1pdCAoc3RydWN0IGlub2RlICpkaXIpOwotc3RhdGljIHN0cnVjdCBkeF9mcmFtZSAqZHhfcHJvYmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorc3RhdGljIHN0cnVjdCBkeF9mcmFtZSAqZHhfcHJvYmUoc3RydWN0IHFzdHIgKmVudHJ5LAogCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgc3RydWN0IGR4X2hhc2hfaW5mbyAqaGluZm8sCiAJCQkJIHN0cnVjdCBkeF9mcmFtZSAqZnJhbWUsCkBAIC0xNzYsOCArMTc2LDkgQEAKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZXMsCiAJCQkJIF9fdTMyICpzdGFydF9oYXNoKTsKLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBleHQzX2R4X2ZpbmRfZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkgICAgICAgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKipyZXNfZGlyLCBpbnQgKmVycik7CitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogZXh0M19keF9maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJc3RydWN0IHFzdHIgKmVudHJ5LCBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKnJlc19kaXIsCisJCQlpbnQgKmVycik7CiBzdGF0aWMgaW50IGV4dDNfZHhfYWRkX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSk7CiAKQEAgLTM0Miw3ICszNDMsNyBAQAogICogYmFjayB0byB1c2Vyc3BhY2UuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZHhfZnJhbWUgKgotZHhfcHJvYmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKK2R4X3Byb2JlKHN0cnVjdCBxc3RyICplbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiAJIHN0cnVjdCBkeF9oYXNoX2luZm8gKmhpbmZvLCBzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lX2luLCBpbnQgKmVycikKIHsKIAl1bnNpZ25lZCBjb3VudCwgaW5kaXJlY3Q7CkBAIC0zNTMsOCArMzU0LDYgQEAKIAl1MzIgaGFzaDsKIAogCWZyYW1lLT5iaCA9IE5VTEw7Ci0JaWYgKGRlbnRyeSkKLQkJZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKIAlpZiAoIShiaCA9IGV4dDNfYnJlYWQgKE5VTEwsZGlyLCAwLCAwLCBlcnIpKSkKIAkJZ290byBmYWlsOwogCXJvb3QgPSAoc3RydWN0IGR4X3Jvb3QgKikgYmgtPmJfZGF0YTsKQEAgLTM3MCw4ICszNjksOCBAQAogCX0KIAloaW5mby0+aGFzaF92ZXJzaW9uID0gcm9vdC0+aW5mby5oYXNoX3ZlcnNpb247CiAJaGluZm8tPnNlZWQgPSBFWFQzX1NCKGRpci0+aV9zYiktPnNfaGFzaF9zZWVkOwotCWlmIChkZW50cnkpCi0JCWV4dDNmc19kaXJoYXNoKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgaGluZm8pOworCWlmIChlbnRyeSkKKwkJZXh0M2ZzX2Rpcmhhc2goZW50cnktPm5hbWUsIGVudHJ5LT5sZW4sIGhpbmZvKTsKIAloYXNoID0gaGluZm8tPmhhc2g7CiAKIAlpZiAocm9vdC0+aW5mby51bnVzZWRfZmxhZ3MgJiAxKSB7CkBAIC04MDMsMTUgKzgwMiwxNSBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBzZWFyY2hfZGlyYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgsCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkgIHN0cnVjdCBxc3RyICpjaGlsZCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCSAgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKiogcmVzX2RpcikKIHsKIAlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqIGRlOwogCWNoYXIgKiBkbGltaXQ7CiAJaW50IGRlX2xlbjsKLQljb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKLQlpbnQgbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwljb25zdCBjaGFyICpuYW1lID0gY2hpbGQtPm5hbWU7CisJaW50IG5hbWVsZW4gPSBjaGlsZC0+bGVuOwogCiAJZGUgPSAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKikgYmgtPmJfZGF0YTsKIAlkbGltaXQgPSBiaC0+Yl9kYXRhICsgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKQEAgLTg1MCw4ICs4NDksOSBAQAogICogVGhlIHJldHVybmVkIGJ1ZmZlcl9oZWFkIGhhcyAtPmJfY291bnQgZWxldmF0ZWQuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkCiAgKiB0byBicmVsc2UoKSBpdCB3aGVuIGFwcHJvcHJpYXRlLgogICovCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogZXh0M19maW5kX2VudHJ5IChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCXN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICoqIHJlc19kaXIpCitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCXN0cnVjdCBxc3RyICplbnRyeSwKKwkJCQkJc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKipyZXNfZGlyKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoX3VzZVtOQU1FSV9SQV9TSVpFXTsKQEAgLTg2MywxNiArODYzLDE1IEBACiAJCQkJICAgYnVmZmVyICovCiAJaW50IG51bSA9IDA7CiAJaW50IG5ibG9ja3MsIGksIGVycjsKLQlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CiAJaW50IG5hbWVsZW47CiAKIAkqcmVzX2RpciA9IE5VTEw7CiAJc2IgPSBkaXItPmlfc2I7Ci0JbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwluYW1lbGVuID0gZW50cnktPmxlbjsKIAlpZiAobmFtZWxlbiA+IEVYVDNfTkFNRV9MRU4pCiAJCXJldHVybiBOVUxMOwogCWlmIChpc19keChkaXIpKSB7Ci0JCWJoID0gZXh0M19keF9maW5kX2VudHJ5KGRlbnRyeSwgcmVzX2RpciwgJmVycik7CisJCWJoID0gZXh0M19keF9maW5kX2VudHJ5KGRpciwgZW50cnksIHJlc19kaXIsICZlcnIpOwogCQkvKgogCQkgKiBPbiBzdWNjZXNzLCBvciBpZiB0aGUgZXJyb3Igd2FzIGZpbGUgbm90IGZvdW5kLAogCQkgKiByZXR1cm4uICBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBkb2luZyBhIHNlYXJjaCB0aGUKQEAgLTkyMyw3ICs5MjIsNyBAQAogCQkJYnJlbHNlKGJoKTsKIAkJCWdvdG8gbmV4dDsKIAkJfQotCQlpID0gc2VhcmNoX2RpcmJsb2NrKGJoLCBkaXIsIGRlbnRyeSwKKwkJaSA9IHNlYXJjaF9kaXJibG9jayhiaCwgZGlyLCBlbnRyeSwKIAkJCSAgICBibG9jayA8PCBFWFQzX0JMT0NLX1NJWkVfQklUUyhzYiksIHJlc19kaXIpOwogCQlpZiAoaSA9PSAxKSB7CiAJCQlFWFQzX0koZGlyKS0+aV9kaXJfc3RhcnRfbG9va3VwID0gYmxvY2s7CkBAIC05NTcsOCArOTU2LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogZXh0M19keF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJICAgICAgIHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICoqcmVzX2RpciwgaW50ICplcnIpCitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogZXh0M19keF9maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJc3RydWN0IHFzdHIgKmVudHJ5LCBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKnJlc19kaXIsCisJCQlpbnQgKmVycikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYjsKIAlzdHJ1Y3QgZHhfaGFzaF9pbmZvCWhpbmZvOwpAQCAtOTY4LDE0ICs5NjgsMTMgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXVuc2lnbmVkIGxvbmcgYmxvY2s7CiAJaW50IHJldHZhbDsKLQlpbnQgbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKLQljb25zdCB1OCAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7Ci0Jc3RydWN0IGlub2RlICpkaXIgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCWludCBuYW1lbGVuID0gZW50cnktPmxlbjsKKwljb25zdCB1OCAqbmFtZSA9IGVudHJ5LT5uYW1lOwogCiAJc2IgPSBkaXItPmlfc2I7CiAJLyogTkZTIG1heSBsb29rIHVwICIuLiIgLSBsb29rIGF0IGR4X3Jvb3QgZGlyZWN0b3J5IGJsb2NrICovCi0JaWYgKG5hbWVsZW4gPiAyIHx8IG5hbWVbMF0gIT0gJy4nfHwobmFtZVsxXSAhPSAnLicgJiYgbmFtZVsxXSAhPSAnXDAnKSl7Ci0JCWlmICghKGZyYW1lID0gZHhfcHJvYmUoZGVudHJ5LCBOVUxMLCAmaGluZm8sIGZyYW1lcywgZXJyKSkpCisJaWYgKG5hbWVsZW4gPiAyIHx8IG5hbWVbMF0gIT0gJy4nfHwgKG5hbWVsZW4gPT0gMiAmJiBuYW1lWzFdICE9ICcuJykpIHsKKwkJaWYgKCEoZnJhbWUgPSBkeF9wcm9iZShlbnRyeSwgZGlyLCAmaGluZm8sIGZyYW1lcywgZXJyKSkpCiAJCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgewogCQlmcmFtZSA9IGZyYW1lczsKQEAgLTEwMzYsNyArMTAzNSw3IEBACiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IEVYVDNfTkFNRV9MRU4pCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCi0JYmggPSBleHQzX2ZpbmRfZW50cnkoZGVudHJ5LCAmZGUpOworCWJoID0gZXh0M19maW5kX2VudHJ5KGRpciwgJmRlbnRyeS0+ZF9uYW1lLCAmZGUpOwogCWlub2RlID0gTlVMTDsKIAlpZiAoYmgpIHsKIAkJdW5zaWduZWQgbG9uZyBpbm8gPSBsZTMyX3RvX2NwdShkZS0+aW5vZGUpOwpAQCAtMTA1NywxOCArMTA1NiwxMSBAQAogc3RydWN0IGRlbnRyeSAqZXh0M19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogewogCXVuc2lnbmVkIGxvbmcgaW5vOwotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBkZW50cnkgZG90ZG90OworCXN0cnVjdCBxc3RyIGRvdGRvdCA9IHsubmFtZSA9ICIuLiIsIC5sZW4gPSAyfTsKIAlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqIGRlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKLQlkb3Rkb3QuZF9uYW1lLm5hbWUgPSAiLi4iOwotCWRvdGRvdC5kX25hbWUubGVuID0gMjsKLQlkb3Rkb3QuZF9wYXJlbnQgPSBjaGlsZDsgLyogY29uZnVzaW5nLCBpc24ndCBpdCEgKi8KLQotCWJoID0gZXh0M19maW5kX2VudHJ5KCZkb3Rkb3QsICZkZSk7Ci0JaW5vZGUgPSBOVUxMOworCWJoID0gZXh0M19maW5kX2VudHJ5KGNoaWxkLT5kX2lub2RlLCAmZG90ZG90LCAmZGUpOwogCWlmICghYmgpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCWlubyA9IGxlMzJfdG9fY3B1KGRlLT5pbm9kZSk7CkBAIC0xMDgwLDE2ICsxMDcyLDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJfQogCi0JaW5vZGUgPSBleHQzX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubyk7Ci0JaWYgKElTX0VSUihpbm9kZSkpCi0JCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7Ci0KLQlwYXJlbnQgPSBkX2FsbG9jX2Fub24oaW5vZGUpOwotCWlmICghcGFyZW50KSB7Ci0JCWlwdXQoaW5vZGUpOwotCQlwYXJlbnQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlyZXR1cm4gcGFyZW50OworCXJldHVybiBkX29idGFpbl9hbGlhcyhleHQzX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubykpOwogfQogCiAjZGVmaW5lIFNfU0hJRlQgMTIKQEAgLTE1MDMsNyArMTQ4Niw3IEBACiAJc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlOwogCWludCBlcnI7CiAKLQlmcmFtZSA9IGR4X3Byb2JlKGRlbnRyeSwgTlVMTCwgJmhpbmZvLCBmcmFtZXMsICZlcnIpOworCWZyYW1lID0gZHhfcHJvYmUoJmRlbnRyeS0+ZF9uYW1lLCBkaXIsICZoaW5mbywgZnJhbWVzLCAmZXJyKTsKIAlpZiAoIWZyYW1lKQogCQlyZXR1cm4gZXJyOwogCWVudHJpZXMgPSBmcmFtZS0+ZW50cmllczsKQEAgLTIwNTYsNyArMjAzOSw3IEBACiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKIAlyZXR2YWwgPSAtRU5PRU5UOwotCWJoID0gZXh0M19maW5kX2VudHJ5IChkZW50cnksICZkZSk7CisJYmggPSBleHQzX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZkZSk7CiAJaWYgKCFiaCkKIAkJZ290byBlbmRfcm1kaXI7CiAKQEAgLTIxMTgsNyArMjEwMSw3IEBACiAJCWhhbmRsZS0+aF9zeW5jID0gMTsKIAogCXJldHZhbCA9IC1FTk9FTlQ7Ci0JYmggPSBleHQzX2ZpbmRfZW50cnkgKGRlbnRyeSwgJmRlKTsKKwliaCA9IGV4dDNfZmluZF9lbnRyeShkaXIsICZkZW50cnktPmRfbmFtZSwgJmRlKTsKIAlpZiAoIWJoKQogCQlnb3RvIGVuZF91bmxpbms7CiAKQEAgLTIyNzYsNyArMjI1OSw3IEBACiAJaWYgKElTX0RJUlNZTkMob2xkX2RpcikgfHwgSVNfRElSU1lOQyhuZXdfZGlyKSkKIAkJaGFuZGxlLT5oX3N5bmMgPSAxOwogCi0Jb2xkX2JoID0gZXh0M19maW5kX2VudHJ5IChvbGRfZGVudHJ5LCAmb2xkX2RlKTsKKwlvbGRfYmggPSBleHQzX2ZpbmRfZW50cnkob2xkX2RpciwgJm9sZF9kZW50cnktPmRfbmFtZSwgJm9sZF9kZSk7CiAJLyoKIAkgKiAgQ2hlY2sgZm9yIGlub2RlIG51bWJlciBpcyBfbm90XyBkdWUgdG8gcG9zc2libGUgSU8gZXJyb3JzLgogCSAqICBXZSBtaWdodCBybWRpciB0aGUgc291cmNlLCBrZWVwIGl0IGFzIHB3ZCBvZiBzb21lIHByb2Nlc3MKQEAgLTIyODksNyArMjI3Miw3IEBACiAJCWdvdG8gZW5kX3JlbmFtZTsKIAogCW5ld19pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7Ci0JbmV3X2JoID0gZXh0M19maW5kX2VudHJ5IChuZXdfZGVudHJ5LCAmbmV3X2RlKTsKKwluZXdfYmggPSBleHQzX2ZpbmRfZW50cnkobmV3X2RpciwgJm5ld19kZW50cnktPmRfbmFtZSwgJm5ld19kZSk7CiAJaWYgKG5ld19iaCkgewogCQlpZiAoIW5ld19pbm9kZSkgewogCQkJYnJlbHNlIChuZXdfYmgpOwpAQCAtMjM1NSw3ICsyMzM4LDggQEAKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgyOwogCQlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqb2xkX2RlMjsKIAotCQlvbGRfYmgyID0gZXh0M19maW5kX2VudHJ5KG9sZF9kZW50cnksICZvbGRfZGUyKTsKKwkJb2xkX2JoMiA9IGV4dDNfZmluZF9lbnRyeShvbGRfZGlyLCAmb2xkX2RlbnRyeS0+ZF9uYW1lLAorCQkJCQkgICZvbGRfZGUyKTsKIAkJaWYgKG9sZF9iaDIpIHsKIAkJCXJldHZhbCA9IGV4dDNfZGVsZXRlX2VudHJ5KGhhbmRsZSwgb2xkX2RpciwKIAkJCQkJCSAgIG9sZF9kZTIsIG9sZF9iaDIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9yZXNpemUuYyBiL2ZzL2V4dDMvcmVzaXplLmMKaW5kZXggNzcyNzhlOS4uNzhmZGYzOCAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC03OTAsNyArNzkwLDggQEAKIAogCWlmIChyZXNlcnZlZF9nZGIgfHwgZ2RiX29mZiA9PSAwKSB7CiAJCWlmICghRVhUM19IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsCi0JCQkJCSAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpKXsKKwkJCQkJICAgICBFWFQzX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkKKwkJICAgIHx8ICFsZTE2X3RvX2NwdShlcy0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKSkgewogCQkJZXh0M193YXJuaW5nKHNiLCBfX2Z1bmNfXywKIAkJCQkgICAgICJObyByZXNlcnZlZCBHRFQgYmxvY2tzLCBjYW4ndCByZXNpemUiKTsKIAkJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggMzk5YTk2YS4uMThlYWE3OCAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiBzdGF0aWMgaW50IGV4dDNfYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCWJkX3JlbGVhc2UoYmRldik7Ci0JcmV0dXJuIGJsa2Rldl9wdXQoYmRldik7CisJcmV0dXJuIGJsa2Rldl9wdXQoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiB9CiAKIHN0YXRpYyBpbnQgZXh0M19ibGtkZXZfcmVtb3ZlKHN0cnVjdCBleHQzX3NiX2luZm8gKnNiaSkKQEAgLTM5Myw3ICszOTMsOCBAQAogCWludCBpOwogCiAJZXh0M194YXR0cl9wdXRfc3VwZXIoc2IpOwotCWpvdXJuYWxfZGVzdHJveShzYmktPnNfam91cm5hbCk7CisJaWYgKGpvdXJuYWxfZGVzdHJveShzYmktPnNfam91cm5hbCkgPCAwKQorCQlleHQzX2Fib3J0KHNiLCBfX2Z1bmNfXywgIkNvdWxkbid0IGNsZWFuIHVwIHRoZSBqb3VybmFsIik7CiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCUVYVDNfQ0xFQVJfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpOwogCQllcy0+c19zdGF0ZSA9IGNwdV90b19sZTE2KHNiaS0+c19tb3VudF9zdGF0ZSk7CkBAIC02MjUsNiArNjI2LDkgQEAKIAllbHNlIGlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQSkKIAkJc2VxX3B1dHMoc2VxLCAiLGRhdGE9d3JpdGViYWNrIik7CiAKKwlpZiAodGVzdF9vcHQoc2IsIERBVEFfRVJSX0FCT1JUKSkKKwkJc2VxX3B1dHMoc2VxLCAiLGRhdGFfZXJyPWFib3J0Iik7CisKIAlleHQzX3Nob3dfcXVvdGFfb3B0aW9ucyhzZXEsIHNiKTsKIAogCXJldHVybiAwOwpAQCAtNzU0LDYgKzc1OCw3IEBACiAJT3B0X3Jlc2VydmF0aW9uLCBPcHRfbm9yZXNlcnZhdGlvbiwgT3B0X25vbG9hZCwgT3B0X25vYmgsIE9wdF9iaCwKIAlPcHRfY29tbWl0LCBPcHRfam91cm5hbF91cGRhdGUsIE9wdF9qb3VybmFsX2ludW0sIE9wdF9qb3VybmFsX2RldiwKIAlPcHRfYWJvcnQsIE9wdF9kYXRhX2pvdXJuYWwsIE9wdF9kYXRhX29yZGVyZWQsIE9wdF9kYXRhX3dyaXRlYmFjaywKKwlPcHRfZGF0YV9lcnJfYWJvcnQsIE9wdF9kYXRhX2Vycl9pZ25vcmUsCiAJT3B0X3VzcmpxdW90YSwgT3B0X2dycGpxdW90YSwgT3B0X29mZnVzcmpxdW90YSwgT3B0X29mZmdycGpxdW90YSwKIAlPcHRfanFmbXRfdmZzb2xkLCBPcHRfanFmbXRfdmZzdjAsIE9wdF9xdW90YSwgT3B0X25vcXVvdGEsCiAJT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsIE9wdF91c3JxdW90YSwKQEAgLTc5Niw2ICs4MDEsOCBAQAogCXtPcHRfZGF0YV9qb3VybmFsLCAiZGF0YT1qb3VybmFsIn0sCiAJe09wdF9kYXRhX29yZGVyZWQsICJkYXRhPW9yZGVyZWQifSwKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKKwl7T3B0X2RhdGFfZXJyX2Fib3J0LCAiZGF0YV9lcnI9YWJvcnQifSwKKwl7T3B0X2RhdGFfZXJyX2lnbm9yZSwgImRhdGFfZXJyPWlnbm9yZSJ9LAogCXtPcHRfb2ZmdXNyanF1b3RhLCAidXNyanF1b3RhPSJ9LAogCXtPcHRfdXNyanF1b3RhLCAidXNyanF1b3RhPSVzIn0sCiAJe09wdF9vZmZncnBqcXVvdGEsICJncnBqcXVvdGE9In0sCkBAIC0xMDExLDYgKzEwMTgsMTIgQEAKIAkJCQlzYmktPnNfbW91bnRfb3B0IHw9IGRhdGFfb3B0OwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RhdGFfZXJyX2Fib3J0OgorCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBEQVRBX0VSUl9BQk9SVCk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZGF0YV9lcnJfaWdub3JlOgorCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERBVEFfRVJSX0FCT1JUKTsKKwkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF91c3JqcXVvdGE6CiAJCQlxdHlwZSA9IFVTUlFVT1RBOwpAQCAtMTk4Niw2ICsxOTk5LDEwIEBACiAJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkZTX0JBUlJJRVI7CiAJZWxzZQogCQlqb3VybmFsLT5qX2ZsYWdzICY9IH5KRlNfQkFSUklFUjsKKwlpZiAodGVzdF9vcHQoc2IsIERBVEFfRVJSX0FCT1JUKSkKKwkJam91cm5hbC0+al9mbGFncyB8PSBKRlNfQUJPUlRfT05fU1lOQ0RBVEFfRVJSOworCWVsc2UKKwkJam91cm5hbC0+al9mbGFncyAmPSB+SkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUjsKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIH0KIApAQCAtMjA1MCw3ICsyMDY3LDcgQEAKIAlpZiAoYmRfY2xhaW0oYmRldiwgc2IpKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgICJFWFQzOiBmYWlsZWQgdG8gY2xhaW0gZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UuXG4iKTsKLQkJYmxrZGV2X3B1dChiZGV2KTsKKwkJYmxrZGV2X3B1dChiZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMjgwLDcgKzIyOTcsOSBAQAogCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWw7CiAKIAlqb3VybmFsX2xvY2tfdXBkYXRlcyhqb3VybmFsKTsKLQlqb3VybmFsX2ZsdXNoKGpvdXJuYWwpOworCWlmIChqb3VybmFsX2ZsdXNoKGpvdXJuYWwpIDwgMCkKKwkJZ290byBvdXQ7CisKIAlsb2NrX3N1cGVyKHNiKTsKIAlpZiAoRVhUM19IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpICYmCiAJICAgIHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSB7CkBAIC0yMjg5LDYgKzIzMDgsOCBAQAogCQlleHQzX2NvbW1pdF9zdXBlcihzYiwgZXMsIDEpOwogCX0KIAl1bmxvY2tfc3VwZXIoc2IpOworCitvdXQ6CiAJam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsKTsKIH0KIApAQCAtMjM4OCw3ICsyNDA5LDEzIEBACiAKIAkJLyogTm93IHdlIHNldCB1cCB0aGUgam91cm5hbCBiYXJyaWVyLiAqLwogCQlqb3VybmFsX2xvY2tfdXBkYXRlcyhqb3VybmFsKTsKLQkJam91cm5hbF9mbHVzaChqb3VybmFsKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCB3YW50IHRvIGNsZWFyIG5lZWRzX3JlY292ZXJ5IGZsYWcgd2hlbiB3ZSBmYWlsZWQKKwkJICogdG8gZmx1c2ggdGhlIGpvdXJuYWwuCisJCSAqLworCQlpZiAoam91cm5hbF9mbHVzaChqb3VybmFsKSA8IDApCisJCQlyZXR1cm47CiAKIAkJLyogSm91cm5hbCBibG9ja2VkIGFuZCBmbHVzaGVkLCBjbGVhciBuZWVkc19yZWNvdmVyeSBmbGFnLiAqLwogCQlFWFQzX0NMRUFSX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSKTsKQEAgLTI3NjcsMzAgKzI3OTQsMzAgQEAKICAqIFN0YW5kYXJkIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBxdW90YV9vbgogICovCiBzdGF0aWMgaW50IGV4dDNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsCi0JCQkgY2hhciAqcGF0aCwgaW50IHJlbW91bnQpCisJCQkgY2hhciAqbmFtZSwgaW50IHJlbW91bnQpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBwYXRoIHBhdGg7CiAKIAlpZiAoIXRlc3Rfb3B0KHNiLCBRVU9UQSkpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qIFdoZW4gcmVtb3VudGluZywgbm8gY2hlY2tzIGFyZSBuZWVkZWQgYW5kIGluIGZhY3QsIHBhdGggaXMgTlVMTCAqLworCS8qIFdoZW4gcmVtb3VudGluZywgbm8gY2hlY2tzIGFyZSBuZWVkZWQgYW5kIGluIGZhY3QsIG5hbWUgaXMgTlVMTCAqLwogCWlmIChyZW1vdW50KQotCQlyZXR1cm4gdmZzX3F1b3RhX29uKHNiLCB0eXBlLCBmb3JtYXRfaWQsIHBhdGgsIHJlbW91bnQpOworCQlyZXR1cm4gdmZzX3F1b3RhX29uKHNiLCB0eXBlLCBmb3JtYXRfaWQsIG5hbWUsIHJlbW91bnQpOwogCi0JZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX0ZPTExPVywgJm5kKTsKKwllcnIgPSBrZXJuX3BhdGgobmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAkvKiBRdW90YWZpbGUgbm90IG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0/ICovCi0JaWYgKG5kLnBhdGgubW50LT5tbnRfc2IgIT0gc2IpIHsKLQkJcGF0aF9wdXQoJm5kLnBhdGgpOworCWlmIChwYXRoLm1udC0+bW50X3NiICE9IHNiKSB7CisJCXBhdGhfcHV0KCZwYXRoKTsKIAkJcmV0dXJuIC1FWERFVjsKIAl9CiAJLyogSm91cm5hbGluZyBxdW90YT8gKi8KIAlpZiAoRVhUM19TQihzYiktPnNfcWZfbmFtZXNbdHlwZV0pIHsKIAkJLyogUXVvdGFmaWxlIG5vdCBvZiBmcyByb290PyAqLwotCQlpZiAobmQucGF0aC5kZW50cnktPmRfcGFyZW50LT5kX2lub2RlICE9IHNiLT5zX3Jvb3QtPmRfaW5vZGUpCisJCWlmIChwYXRoLmRlbnRyeS0+ZF9wYXJlbnQgIT0gc2ItPnNfcm9vdCkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkiRVhUMy1mczogUXVvdGEgZmlsZSBub3Qgb24gZmlsZXN5c3RlbSByb290LiAiCiAJCQkJIkpvdXJuYWxlZCBxdW90YSB3aWxsIG5vdCB3b3JrLlxuIik7CkBAIC0yODAwLDE4ICsyODI3LDIyIEBACiAJICogV2hlbiB3ZSBqb3VybmFsIGRhdGEgb24gcXVvdGEgZmlsZSwgd2UgaGF2ZSB0byBmbHVzaCBqb3VybmFsIHRvIHNlZQogCSAqIGFsbCB1cGRhdGVzIHRvIHRoZSBmaWxlIHdoZW4gd2UgYnlwYXNzIHBhZ2VjYWNoZS4uLgogCSAqLwotCWlmIChleHQzX3Nob3VsZF9qb3VybmFsX2RhdGEobmQucGF0aC5kZW50cnktPmRfaW5vZGUpKSB7CisJaWYgKGV4dDNfc2hvdWxkX2pvdXJuYWxfZGF0YShwYXRoLmRlbnRyeS0+ZF9pbm9kZSkpIHsKIAkJLyoKIAkJICogV2UgZG9uJ3QgbmVlZCB0byBsb2NrIHVwZGF0ZXMgYnV0IGpvdXJuYWxfZmx1c2goKSBjb3VsZAogCQkgKiBvdGhlcndpc2UgYmUgbGl2ZWxvY2tlZC4uLgogCQkgKi8KIAkJam91cm5hbF9sb2NrX3VwZGF0ZXMoRVhUM19TQihzYiktPnNfam91cm5hbCk7Ci0JCWpvdXJuYWxfZmx1c2goRVhUM19TQihzYiktPnNfam91cm5hbCk7CisJCWVyciA9IGpvdXJuYWxfZmx1c2goRVhUM19TQihzYiktPnNfam91cm5hbCk7CiAJCWpvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoRVhUM19TQihzYiktPnNfam91cm5hbCk7CisJCWlmIChlcnIpIHsKKwkJCXBhdGhfcHV0KCZwYXRoKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKLQllcnIgPSB2ZnNfcXVvdGFfb25fcGF0aChzYiwgdHlwZSwgZm9ybWF0X2lkLCAmbmQucGF0aCk7Ci0JcGF0aF9wdXQoJm5kLnBhdGgpOworCWVyciA9IHZmc19xdW90YV9vbl9wYXRoKHNiLCB0eXBlLCBmb3JtYXRfaWQsICZwYXRoKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9LY29uZmlnIGIvZnMvZXh0NC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDU0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leHQ0L0tjb25maWcKQEAgLTAsMCArMSw3OSBAQAorY29uZmlnIEVYVDRfRlMKKwl0cmlzdGF0ZSAiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW0iCisJc2VsZWN0IEpCRDIKKwlzZWxlY3QgQ1JDMTYKKwloZWxwCisJICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS4KKworCSAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLAorCSAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aAorCSAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdAorCSAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkCisJICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcywKKwkgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZAorCSAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdAorCSAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLgorCisJICBUaGUgZXh0NCBmaWxlc3lzdGVtIHdpbGwgc3VwcG9ydCBtb3VudGluZyBhbiBleHQzCisJICBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZSB3aWxsIGJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbQorCSAgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGUgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdAorCSAgcGVyZm9ybWFuY2UgZ2FpbnMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIGV4dDQgZmVhdHVyZXMgaW4gdGhlCisJICBmaWxlc3lzdGVtLCBvciBmb3JtYXRpbmcgYSBuZXcgZmlsZXN5c3RlbSBhcyBhbiBleHQ0CisJICBmaWxlc3lzdGVtIGluaXRpYWxseS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBFWFQ0REVWX0NPTVBBVAorCWJvb2wgIkVuYWJsZSBleHQ0ZGV2IGNvbXBhdGliaWxpdHkiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTCisJaGVscAorCSAgU3RhcnRpbmcgd2l0aCAyLjYuMjgsIHRoZSBuYW1lIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0gd2FzCisJICByZW5hbWVkIGZyb20gZXh0NGRldiB0byBleHQ0LiAgVW5mb3J0dW5hdGVseSB0aGVyZSBhcmUgc29tZQorCSAgbGVnYWN5IHVzZXJzcGFjZSBwcm9ncmFtcyAoc3VjaCBhcyBrbGliYydzIGZzdHlwZSkgaGF2ZQorCSAgImV4dDRkZXYiIGhhcmRjb2RlZC4KKworCSAgVG8gZW5hYmxlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNvIHRoYXQgc3lzdGVtcyB0aGF0IGFyZQorCSAgc3RpbGwgZXhwZWN0aW5nIHRvIG1vdW50IGV4dDQgZmlsZXN5c3RlbXMgdXNpbmcgZXh0NGRldiwKKwkgIGNob3NlIFkgaGVyZS4gICBUaGlzIGZlYXR1cmUgd2lsbCBnbyBhd2F5IGJ5IDIuNi4zMSwgc28KKwkgIHBsZWFzZSBhcnJhbmdlIHRvIGdldCB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyBmaXhlZCEKKworY29uZmlnIEVYVDRfRlNfWEFUVFIKKwlib29sICJFeHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworCSAgWW91IG5lZWQgdGhpcyBmb3IgUE9TSVggQUNMIHN1cHBvcnQgb24gZXh0NC4KKworY29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMCisJYm9vbCAiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKKwlkZXBlbmRzIG9uIEVYVDRfRlNfWEFUVFIKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUE9TSVggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZCisJYm9vbCAiRXh0NCBTZWN1cml0eSBMYWJlbHMiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4KKworCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggYmQyZWNlMi4uYjk4MjFiZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC01NjgsOCArNTY4LDE2IEBACiAKIAkvKiB0aGlzIGlzbid0IHRoZSByaWdodCBwbGFjZSB0byBkZWNpZGUgd2hldGhlciBibG9jayBpcyBtZXRhZGF0YQogCSAqIGlub2RlLmMvZXh0ZW50cy5jIGtub3dzIGJldHRlciwgYnV0IGZvciBzYWZldHkgLi4uICovCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSB8fAotCQkJZXh0NF9zaG91bGRfam91cm5hbF9kYXRhKGlub2RlKSkKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQltZXRhZGF0YSA9IDE7CisKKwkvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCByZXVzZQorCSAqIGJsb2NrIHJlbGVhc2VkIHVudGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0LgorCSAqIHdyaXRlYmFjayBtb2RlIGhhdmUgd2VhayBkYXRhIGNvbnNpc3RlbmN5IHNvCisJICogZG9uJ3QgZm9yY2UgZGF0YSBhcyBtZXRhZGF0YSB3aGVuIGZyZWVpbmcgYmxvY2sKKwkgKiBmb3Igd3JpdGViYWNrIG1vZGUuCisJICovCisJaWYgKG1ldGFkYXRhID09IDAgJiYgIWV4dDRfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSkKIAkJbWV0YWRhdGEgPSAxOwogCiAJc2IgPSBpbm9kZS0+aV9zYjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggNjY5MGE0MS4uNDg4MGNjMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTUxMSw3ICs1MTEsNiBAQAogLyoKICAqIE1vdW50IGZsYWdzCiAgKi8KLSNkZWZpbmUgRVhUNF9NT1VOVF9DSEVDSwkJMHgwMDAwMQkvKiBEbyBtb3VudC10aW1lIGNoZWNrcyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX09MREFMTE9DCQkweDAwMDAyICAvKiBEb24ndCB1c2UgdGhlIG5ldyBPcmxvdiBhbGxvY2F0b3IgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9HUlBJRAkJMHgwMDAwNAkvKiBDcmVhdGUgZmlsZXMgd2l0aCBkaXJlY3RvcnkncyBncm91cCAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0RFQlVHCQkweDAwMDA4CS8qIFNvbWUgZGVidWdnaW5nIG1lc3NhZ2VzICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfc2IuaCBiL2ZzL2V4dDQvZXh0NF9zYi5oCmluZGV4IDZhMGI0MGQuLjQ0NWZkZTYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9zYi5oCisrKyBiL2ZzL2V4dDQvZXh0NF9zYi5oCkBAIC05OSw5ICs5OSw2IEBACiAJc3RydWN0IGlub2RlICpzX2J1ZGR5X2NhY2hlOwogCWxvbmcgc19ibG9ja3NfcmVzZXJ2ZWQ7CiAJc3BpbmxvY2tfdCBzX3Jlc2VydmVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNfYWN0aXZlX3RyYW5zYWN0aW9uOwotCXN0cnVjdCBsaXN0X2hlYWQgc19jbG9zZWRfdHJhbnNhY3Rpb247Ci0Jc3RydWN0IGxpc3RfaGVhZCBzX2NvbW1pdHRlZF90cmFuc2FjdGlvbjsKIAlzcGlubG9ja190IHNfbWRfbG9jazsKIAl0aWRfdCBzX2xhc3RfdHJhbnNhY3Rpb247CiAJdW5zaWduZWQgc2hvcnQgKnNfbWJfb2Zmc2V0cywgKnNfbWJfbWF4czsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCA5YjRlYzlkLi44ZGJmNjk1IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xNjQ4LDYgKzE2NDgsNyBAQAogCWludCByZXQgPSAwLCBlcnIsIG5yX3BhZ2VzLCBpOwogCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGVuZDsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCWxvbmcgcGFnZXNfc2tpcHBlZDsKIAogCUJVR19PTihtcGQtPm5leHRfcGFnZSA8PSBtcGQtPmZpcnN0X3BhZ2UpOwogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CkBAIC0xNjU1LDIwICsxNjU2LDMwIEBACiAJZW5kID0gbXBkLT5uZXh0X3BhZ2UgLSAxOwogCiAJd2hpbGUgKGluZGV4IDw9IGVuZCkgewotCQkvKiBYWFg6IG9wdGltaXplIHRhaWwgKi8KLQkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cCgmcHZlYywgbWFwcGluZywgaW5kZXgsIFBBR0VWRUNfU0laRSk7CisJCS8qCisJCSAqIFdlIGNhbiB1c2UgUEFHRUNBQ0hFX1RBR19ESVJUWSBsb29rdXAgaGVyZSBiZWNhdXNlCisJCSAqIGV2ZW4gdGhvdWdoIHdlIGhhdmUgY2xlYXJlZCB0aGUgZGlydHkgZmxhZyBvbiB0aGUgcGFnZQorCQkgKiBXZSBzdGlsbCBrZWVwIHRoZSBwYWdlIGluIHRoZSByYWRpeCB0cmVlIHdpdGggdGFnCisJCSAqIFBBR0VDQUNIRV9UQUdfRElSVFkuIFNlZSBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pby4KKwkJICogVGhlIFBBR0VDQUNIRV9UQUdfRElSVFkgaXMgY2xlYXJlZCBpbiBzZXRfcGFnZV93cml0ZWJhY2sKKwkJICogd2hpY2ggaXMgY2FsbGVkIHZpYSB0aGUgYmVsb3cgd3JpdGVwYWdlIGNhbGxiYWNrLgorCQkgKi8KKwkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cF90YWcoJnB2ZWMsIG1hcHBpbmcsICZpbmRleCwKKwkJCQkJUEFHRUNBQ0hFX1RBR19ESVJUWSwKKwkJCQkJbWluKGVuZCAtIGluZGV4LAorCQkJCQkocGdvZmZfdClQQUdFVkVDX1NJWkUtMSkgKyAxKTsKIAkJaWYgKG5yX3BhZ2VzID09IDApCiAJCQlicmVhazsKIAkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKIAotCQkJaW5kZXggPSBwYWdlLT5pbmRleDsKLQkJCWlmIChpbmRleCA+IGVuZCkKLQkJCQlicmVhazsKLQkJCWluZGV4Kys7Ci0KKwkJCXBhZ2VzX3NraXBwZWQgPSBtcGQtPndiYy0+cGFnZXNfc2tpcHBlZDsKIAkJCWVyciA9IG1hcHBpbmctPmFfb3BzLT53cml0ZXBhZ2UocGFnZSwgbXBkLT53YmMpOwotCQkJaWYgKCFlcnIpCisJCQlpZiAoIWVyciAmJiAocGFnZXNfc2tpcHBlZCA9PSBtcGQtPndiYy0+cGFnZXNfc2tpcHBlZCkpCisJCQkJLyoKKwkJCQkgKiBoYXZlIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRoZSBwYWdlCisJCQkJICogd2l0aG91dCBza2lwcGluZyB0aGUgc2FtZQorCQkJCSAqLwogCQkJCW1wZC0+cGFnZXNfd3JpdHRlbisrOwogCQkJLyoKIAkJCSAqIEluIGVycm9yIGNhc2UsIHdlIGhhdmUgdG8gY29udGludWUgYmVjYXVzZQpAQCAtMjEwNCw3ICsyMTE1LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJCSAgICAgICBzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkKQogewotCWxvbmcgdG9fd3JpdGU7CiAJaW50IHJldDsKIAogCWlmICghbXBkLT5nZXRfYmxvY2spCkBAIC0yMTE5LDE5ICsyMTI5LDE4IEBACiAJbXBkLT5wYWdlc193cml0dGVuID0gMDsKIAltcGQtPnJldHZhbCA9IDA7CiAKLQl0b193cml0ZSA9IHdiYy0+bnJfdG9fd3JpdGU7Ci0KIAlyZXQgPSB3cml0ZV9jYWNoZV9wYWdlcyhtYXBwaW5nLCB3YmMsIF9fbXBhZ2VfZGFfd3JpdGVwYWdlLCBtcGQpOwotCiAJLyoKIAkgKiBIYW5kbGUgbGFzdCBleHRlbnQgb2YgcGFnZXMKIAkgKi8KIAlpZiAoIW1wZC0+aW9fZG9uZSAmJiBtcGQtPm5leHRfcGFnZSAhPSBtcGQtPmZpcnN0X3BhZ2UpIHsKIAkJaWYgKG1wYWdlX2RhX21hcF9ibG9ja3MobXBkKSA9PSAwKQogCQkJbXBhZ2VfZGFfc3VibWl0X2lvKG1wZCk7Ci0JfQogCi0Jd2JjLT5ucl90b193cml0ZSA9IHRvX3dyaXRlIC0gbXBkLT5wYWdlc193cml0dGVuOworCQltcGQtPmlvX2RvbmUgPSAxOworCQlyZXQgPSBNUEFHRV9EQV9FWFRFTlRfVEFJTDsKKwl9CisJd2JjLT5ucl90b193cml0ZSAtPSBtcGQtPnBhZ2VzX3dyaXR0ZW47CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjM2MCwxMiArMjM2OSwxNCBAQAogc3RhdGljIGludCBleHQ0X2RhX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKKwlwZ29mZl90CWluZGV4OworCWludCByYW5nZV93aG9sZSA9IDA7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7Ci0JbG9mZl90IHJhbmdlX3N0YXJ0ID0gMDsKIAlzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSBtcGQ7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJaW50IG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOworCWxvbmcgcGFnZXNfd3JpdHRlbiA9IDAsIHBhZ2VzX3NraXBwZWQ7CiAJaW50IG5lZWRlZF9ibG9ja3MsIHJldCA9IDAsIG5yX3RvX3dyaXRlYnVtcCA9IDA7Ci0JbG9uZyB0b193cml0ZSwgcGFnZXNfc2tpcHBlZCA9IDA7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihtYXBwaW5nLT5ob3N0LT5pX3NiKTsKIAogCS8qCkBAIC0yMzg1LDIzICsyMzk2LDI2IEBACiAJCW5yX3RvX3dyaXRlYnVtcCA9IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCAtIHdiYy0+bnJfdG9fd3JpdGU7CiAJCXdiYy0+bnJfdG9fd3JpdGUgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3Q7CiAJfQorCWlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKQorCQlyYW5nZV93aG9sZSA9IDE7CiAKLQlpZiAoIXdiYy0+cmFuZ2VfY3ljbGljKQotCQkvKgotCQkgKiBJZiByYW5nZV9jeWNsaWMgaXMgbm90IHNldCBmb3JjZSByYW5nZV9jb250Ci0JCSAqIGFuZCBzYXZlIHRoZSBvbGQgd3JpdGViYWNrX2luZGV4Ci0JCSAqLwotCQl3YmMtPnJhbmdlX2NvbnQgPSAxOwotCi0JcmFuZ2Vfc3RhcnQgPSAgd2JjLT5yYW5nZV9zdGFydDsKLQlwYWdlc19za2lwcGVkID0gd2JjLT5wYWdlc19za2lwcGVkOworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykKKwkJaW5kZXggPSBtYXBwaW5nLT53cml0ZWJhY2tfaW5kZXg7CisJZWxzZQorCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCW1wZC53YmMgPSB3YmM7CiAJbXBkLmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAotcmVzdGFydF9sb29wOgotCXRvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZTsKLQl3aGlsZSAoIXJldCAmJiB0b193cml0ZSA+IDApIHsKKwkvKgorCSAqIHdlIGRvbid0IHdhbnQgd3JpdGVfY2FjaGVfcGFnZXMgdG8gdXBkYXRlCisJICogbnJfdG9fd3JpdGUgYW5kIHdyaXRlYmFja19pbmRleAorCSAqLworCW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKKwl3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gMTsKKwlwYWdlc19za2lwcGVkID0gd2JjLT5wYWdlc19za2lwcGVkOworCisJd2hpbGUgKCFyZXQgJiYgd2JjLT5ucl90b193cml0ZSA+IDApIHsKIAogCQkvKgogCQkgKiB3ZSAgaW5zZXJ0IG9uZSBleHRlbnQgYXQgYSB0aW1lLiBTbyB3ZSBuZWVkCkBAIC0yNDIyLDQ4ICsyNDM2LDUzIEBACiAJCQlkdW1wX3N0YWNrKCk7CiAJCQlnb3RvIG91dF93cml0ZXBhZ2VzOwogCQl9Ci0JCXRvX3dyaXRlIC09IHdiYy0+bnJfdG9fd3JpdGU7Ci0KIAkJbXBkLmdldF9ibG9jayA9IGV4dDRfZGFfZ2V0X2Jsb2NrX3dyaXRlOwogCQlyZXQgPSBtcGFnZV9kYV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgJm1wZCk7CiAKIAkJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAotCQlpZiAobXBkLnJldHZhbCA9PSAtRU5PU1BDKQorCQlpZiAobXBkLnJldHZhbCA9PSAtRU5PU1BDKSB7CisJCQkvKiBjb21taXQgdGhlIHRyYW5zYWN0aW9uIHdoaWNoIHdvdWxkCisJCQkgKiBmcmVlIGJsb2NrcyByZWxlYXNlZCBpbiB0aGUgdHJhbnNhY3Rpb24KKwkJCSAqIGFuZCB0cnkgYWdhaW4KKwkJCSAqLwogCQkJamJkMl9qb3VybmFsX2ZvcmNlX2NvbW1pdF9uZXN0ZWQoc2JpLT5zX2pvdXJuYWwpOwotCi0JCS8qIHJlc2V0IHRoZSByZXRyeSBjb3VudCAqLwotCQlpZiAocmV0ID09IE1QQUdFX0RBX0VYVEVOVF9UQUlMKSB7CisJCQl3YmMtPnBhZ2VzX3NraXBwZWQgPSBwYWdlc19za2lwcGVkOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIGlmIChyZXQgPT0gTVBBR0VfREFfRVhURU5UX1RBSUwpIHsKIAkJCS8qCiAJCQkgKiBnb3Qgb25lIGV4dGVudCBub3cgdHJ5IHdpdGgKIAkJCSAqIHJlc3Qgb2YgdGhlIHBhZ2VzCiAJCQkgKi8KLQkJCXRvX3dyaXRlICs9IHdiYy0+bnJfdG9fd3JpdGU7CisJCQlwYWdlc193cml0dGVuICs9IG1wZC5wYWdlc193cml0dGVuOworCQkJd2JjLT5wYWdlc19za2lwcGVkID0gcGFnZXNfc2tpcHBlZDsKIAkJCXJldCA9IDA7Ci0JCX0gZWxzZSBpZiAod2JjLT5ucl90b193cml0ZSkgeworCQl9IGVsc2UgaWYgKHdiYy0+bnJfdG9fd3JpdGUpCiAJCQkvKgogCQkJICogVGhlcmUgaXMgbm8gbW9yZSB3cml0ZW91dCBuZWVkZWQKIAkJCSAqIG9yIHdlIHJlcXVlc3RlZCBmb3IgYSBub2Jsb2NraW5nIHdyaXRlb3V0CiAJCQkgKiBhbmQgd2UgZm91bmQgdGhlIGRldmljZSBjb25nZXN0ZWQKIAkJCSAqLwotCQkJdG9fd3JpdGUgKz0gd2JjLT5ucl90b193cml0ZTsKIAkJCWJyZWFrOwotCQl9Ci0JCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZTsKIAl9CisJaWYgKHBhZ2VzX3NraXBwZWQgIT0gd2JjLT5wYWdlc19za2lwcGVkKQorCQlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKKwkJCQkid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKIAotCWlmICh3YmMtPnJhbmdlX2NvbnQgJiYgKHBhZ2VzX3NraXBwZWQgIT0gd2JjLT5wYWdlc19za2lwcGVkKSkgewotCQkvKiBXZSBza2lwcGVkIHBhZ2VzIGluIHRoaXMgbG9vcCAqLwotCQl3YmMtPnJhbmdlX3N0YXJ0ID0gcmFuZ2Vfc3RhcnQ7Ci0JCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZSArCi0JCQkJd2JjLT5wYWdlc19za2lwcGVkIC0gcGFnZXNfc2tpcHBlZDsKLQkJd2JjLT5wYWdlc19za2lwcGVkID0gcGFnZXNfc2tpcHBlZDsKLQkJZ290byByZXN0YXJ0X2xvb3A7Ci0JfQorCS8qIFVwZGF0ZSBpbmRleCAqLworCWluZGV4ICs9IHBhZ2VzX3dyaXR0ZW47CisJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiB3YmMtPm5yX3RvX3dyaXRlID4gMCkpCisJCS8qCisJCSAqIHNldCB0aGUgd3JpdGViYWNrX2luZGV4IHNvIHRoYXQgcmFuZ2VfY3ljbGljCisJCSAqIG1vZGUgd2lsbCB3cml0ZSBpdCBiYWNrIGxhdGVyCisJCSAqLworCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKIAogb3V0X3dyaXRlcGFnZXM6Ci0Jd2JjLT5ucl90b193cml0ZSA9IHRvX3dyaXRlIC0gbnJfdG9fd3JpdGVidW1wOwotCXdiYy0+cmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydDsKKwlpZiAoIW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlKQorCQl3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gMDsKKwl3YmMtPm5yX3RvX3dyaXRlIC09IG5yX3RvX3dyaXRlYnVtcDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MTc1LDcgKzQxOTQsNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmKGVpLT52ZnNfaW5vZGUpOwogCXU2NCBpX2Jsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0JaW50IGVyciA9IDA7CiAKIAlpZiAoaV9ibG9ja3MgPD0gfjBVKSB7CiAJCS8qCkBAIC00MTg1LDM2ICs0MjAzLDI3IEBACiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfbG8gICA9IGNwdV90b19sZTMyKGlfYmxvY2tzKTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19oaWdoID0gMDsKIAkJZWktPmlfZmxhZ3MgJj0gfkVYVDRfSFVHRV9GSUxFX0ZMOwotCX0gZWxzZSBpZiAoaV9ibG9ja3MgPD0gMHhmZmZmZmZmZmZmZmZVTEwpIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSkKKwkJcmV0dXJuIC1FRkJJRzsKKworCWlmIChpX2Jsb2NrcyA8PSAweGZmZmZmZmZmZmZmZlVMTCkgewogCQkvKgogCQkgKiBpX2Jsb2NrcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSA0OCBiaXQgdmFyaWFibGUKIAkJICogYXMgbXVsdGlwbGUgb2YgNTEyIGJ5dGVzCiAJCSAqLwotCQllcnIgPSBleHQ0X3VwZGF0ZV9yb2NvbXBhdF9mZWF0dXJlKGhhbmRsZSwgc2IsCi0JCQkJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvICBlcnJfb3V0OwotCQkvKiBpX2Jsb2NrIGlzIHN0b3JlZCBpbiB0aGUgc3BsaXQgIDQ4IGJpdCBmaWVsZHMgKi8KIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19sbyAgID0gY3B1X3RvX2xlMzIoaV9ibG9ja3MpOwogCQlyYXdfaW5vZGUtPmlfYmxvY2tzX2hpZ2ggPSBjcHVfdG9fbGUxNihpX2Jsb2NrcyA+PiAzMik7CiAJCWVpLT5pX2ZsYWdzICY9IH5FWFQ0X0hVR0VfRklMRV9GTDsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBpX2Jsb2NrcyBzaG91bGQgYmUgcmVwcmVzZW50ZWQgaW4gYSA0OCBiaXQgdmFyaWFibGUKLQkJICogYXMgbXVsdGlwbGUgb2YgIGZpbGUgc3lzdGVtIGJsb2NrIHNpemUKLQkJICovCi0JCWVyciA9IGV4dDRfdXBkYXRlX3JvY29tcGF0X2ZlYXR1cmUoaGFuZGxlLCBzYiwKLQkJCQkJICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gIGVycl9vdXQ7CiAJCWVpLT5pX2ZsYWdzIHw9IEVYVDRfSFVHRV9GSUxFX0ZMOwogCQkvKiBpX2Jsb2NrIGlzIHN0b3JlZCBpbiBmaWxlIHN5c3RlbSBibG9jayBzaXplICovCiAJCWlfYmxvY2tzID0gaV9ibG9ja3MgPj4gKGlub2RlLT5pX2Jsa2JpdHMgLSA5KTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19sbyAgID0gY3B1X3RvX2xlMzIoaV9ibG9ja3MpOwogCQlyYXdfaW5vZGUtPmlfYmxvY2tzX2hpZ2ggPSBjcHVfdG9fbGUxNihpX2Jsb2NrcyA+PiAzMik7CiAJfQotZXJyX291dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCBiNTgwNzE0Li5kZmUxN2ExIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMjMwMCw2ICsyMzAwLDcgQEAKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmbWV0YV9ncm91cF9pbmZvW2ldLT5iYl9wcmVhbGxvY19saXN0KTsKKwltZXRhX2dyb3VwX2luZm9baV0tPmJiX2ZyZWVfcm9vdC5yYl9ub2RlID0gTlVMTDs7CiAKICNpZmRlZiBET1VCTEVfQ0hFQ0sKIAl7CkBAIC0yNTIyLDkgKzI1MjMsNiBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZzYmktPnNfbWRfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnNiaS0+c19hY3RpdmVfdHJhbnNhY3Rpb24pOwotCUlOSVRfTElTVF9IRUFEKCZzYmktPnNfY2xvc2VkX3RyYW5zYWN0aW9uKTsKLQlJTklUX0xJU1RfSEVBRCgmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbik7CiAJc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19iYWxfbG9jayk7CiAKIAlzYmktPnNfbWJfbWF4X3RvX3NjYW4gPSBNQl9ERUZBVUxUX01BWF9UT19TQ0FOOwpAQCAtMjU1Myw2ICsyNTUxLDggQEAKIAlleHQ0X21iX2luaXRfcGVyX2Rldl9wcm9jKHNiKTsKIAlleHQ0X21iX2hpc3RvcnlfaW5pdChzYik7CiAKKwlzYmktPnNfam91cm5hbC0+al9jb21taXRfY2FsbGJhY2sgPSByZWxlYXNlX2Jsb2Nrc19vbl9jb21taXQ7CisKIAlwcmludGsoS0VSTl9JTkZPICJFWFQ0LWZzOiBtYmFsbG9jIGVuYWJsZWRcbiIpOwogCXJldHVybiAwOwogfQpAQCAtMjU2OCw3ICsyNTY4LDcgQEAKIAkJcGEgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UsIHBhX2dyb3VwX2xpc3QpOwogCQlsaXN0X2RlbCgmcGEtPnBhX2dyb3VwX2xpc3QpOwogCQljb3VudCsrOwotCQlrZnJlZShwYSk7CisJCWttZW1fY2FjaGVfZnJlZShleHQ0X3BzcGFjZV9jYWNoZXAsIHBhKTsKIAl9CiAJaWYgKGNvdW50KQogCQltYl9kZWJ1ZygibWJhbGxvYzogJXUgUEFzIGxlZnRcbiIsIGNvdW50KTsKQEAgLTI1ODIsMTUgKzI1ODIsNiBAQAogCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbzsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKIAotCS8qIHJlbGVhc2UgZnJlZWQsIG5vbi1jb21taXR0ZWQgYmxvY2tzICovCi0Jc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmc2JpLT5zX2Nsb3NlZF90cmFuc2FjdGlvbiwKLQkJCSZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKTsKLQlsaXN0X3NwbGljZV9pbml0KCZzYmktPnNfYWN0aXZlX3RyYW5zYWN0aW9uLAotCQkJJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pOwotCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JZXh0NF9tYl9mcmVlX2NvbW1pdHRlZF9ibG9ja3Moc2IpOwotCiAJaWYgKHNiaS0+c19ncm91cF9pbmZvKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBzYmktPnNfZ3JvdXBzX2NvdW50OyBpKyspIHsKIAkJCWdyaW5mbyA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGkpOwpAQCAtMjY0NCw2MSArMjYzNSw1NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQKLWV4dDRfbWJfZnJlZV9jb21taXR0ZWRfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGpiZDIgbGF5ZXIgb25jZSB0aGUgY29tbWl0IGhhcyBmaW5pc2hlZCwKKyAqIHNvIHdlIGtub3cgd2UgY2FuIGZyZWUgdGhlIGJsb2NrcyB0aGF0IHdlcmUgcmVsZWFzZWQgd2l0aCB0aGF0IGNvbW1pdC4KKyAqLworc3RhdGljIHZvaWQgcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKQogewotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCWludCBlcnI7Ci0JaW50IGk7Ci0JaW50IGNvdW50ID0gMDsKLQlpbnQgY291bnQyID0gMDsKLQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhICptZDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gam91cm5hbC0+al9wcml2YXRlOwogCXN0cnVjdCBleHQ0X2J1ZGR5IGU0YjsKKwlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpkYjsKKwlpbnQgZXJyLCBjb3VudCA9IDAsIGNvdW50MiA9IDA7CisJc3RydWN0IGV4dDRfZnJlZV9kYXRhICplbnRyeTsKKwlleHQ0X2ZzYmxrX3QgZGlzY2FyZF9ibG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbHRtcDsKIAotCWlmIChsaXN0X2VtcHR5KCZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKSkKLQkJcmV0dXJuOwotCi0JLyogdGhlcmUgaXMgY29tbWl0dGVkIGJsb2NrcyB0byBiZSBmcmVlZCB5ZXQgKi8KLQlkbyB7Ci0JCS8qIGdldCBuZXh0IGFycmF5IG9mIGJsb2NrcyAqLwotCQltZCA9IE5VTEw7Ci0JCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCQlpZiAoIWxpc3RfZW1wdHkoJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pKSB7Ci0JCQltZCA9IGxpc3RfZW50cnkoc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbi5uZXh0LAotCQkJCQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhLCBsaXN0KTsKLQkJCWxpc3RfZGVsKCZtZC0+bGlzdCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKLQotCQlpZiAobWQgPT0gTlVMTCkKLQkJCWJyZWFrOworCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdG1wLCAmdHhuLT50X3ByaXZhdGVfbGlzdCkgeworCQllbnRyeSA9IGxpc3RfZW50cnkobCwgc3RydWN0IGV4dDRfZnJlZV9kYXRhLCBsaXN0KTsKIAogCQltYl9kZWJ1ZygiZ29ubmEgZnJlZSAldSBibG9ja3MgaW4gZ3JvdXAgJWx1ICgweCVwKToiLAotCQkJCW1kLT5udW0sIG1kLT5ncm91cCwgbWQpOworCQkJIGVudHJ5LT5jb3VudCwgZW50cnktPmdyb3VwLCBlbnRyeSk7CiAKLQkJZXJyID0gZXh0NF9tYl9sb2FkX2J1ZGR5KHNiLCBtZC0+Z3JvdXAsICZlNGIpOworCQllcnIgPSBleHQ0X21iX2xvYWRfYnVkZHkoc2IsIGVudHJ5LT5ncm91cCwgJmU0Yik7CiAJCS8qIHdlIGV4cGVjdCB0byBmaW5kIGV4aXN0aW5nIGJ1ZGR5IGJlY2F1c2UgaXQncyBwaW5uZWQgKi8KIAkJQlVHX09OKGVyciAhPSAwKTsKIAorCQlkYiA9IGU0Yi5iZF9pbmZvOwogCQkvKiB0aGVyZSBhcmUgYmxvY2tzIHRvIHB1dCBpbiBidWRkeSB0byBtYWtlIHRoZW0gcmVhbGx5IGZyZWUgKi8KLQkJY291bnQgKz0gbWQtPm51bTsKKwkJY291bnQgKz0gZW50cnktPmNvdW50OwogCQljb3VudDIrKzsKLQkJZXh0NF9sb2NrX2dyb3VwKHNiLCBtZC0+Z3JvdXApOwotCQlmb3IgKGkgPSAwOyBpIDwgbWQtPm51bTsgaSsrKSB7Ci0JCQltYl9kZWJ1ZygiICV1IiwgbWQtPmJsb2Nrc1tpXSk7Ci0JCQltYl9mcmVlX2Jsb2NrcyhOVUxMLCAmZTRiLCBtZC0+YmxvY2tzW2ldLCAxKTsKKwkJZXh0NF9sb2NrX2dyb3VwKHNiLCBlbnRyeS0+Z3JvdXApOworCQkvKiBUYWtlIGl0IG91dCBvZiBwZXIgZ3JvdXAgcmIgdHJlZSAqLworCQlyYl9lcmFzZSgmZW50cnktPm5vZGUsICYoZGItPmJiX2ZyZWVfcm9vdCkpOworCQltYl9mcmVlX2Jsb2NrcyhOVUxMLCAmZTRiLCBlbnRyeS0+c3RhcnRfYmxrLCBlbnRyeS0+Y291bnQpOworCisJCWlmICghZGItPmJiX2ZyZWVfcm9vdC5yYl9ub2RlKSB7CisJCQkvKiBObyBtb3JlIGl0ZW1zIGluIHRoZSBwZXIgZ3JvdXAgcmIgdHJlZQorCQkJICogYmFsYW5jZSByZWZjb3VudHMgZnJvbSBleHQ0X21iX2ZyZWVfbWV0YWRhdGEoKQorCQkJICovCisJCQlwYWdlX2NhY2hlX3JlbGVhc2UoZTRiLmJkX2J1ZGR5X3BhZ2UpOworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9iaXRtYXBfcGFnZSk7CiAJCX0KLQkJbWJfZGVidWcoIlxuIik7Ci0JCWV4dDRfdW5sb2NrX2dyb3VwKHNiLCBtZC0+Z3JvdXApOworCQlleHQ0X3VubG9ja19ncm91cChzYiwgZW50cnktPmdyb3VwKTsKKwkJZGlzY2FyZF9ibG9jayA9IChleHQ0X2ZzYmxrX3QpIGVudHJ5LT5ncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikKKwkJCSsgZW50cnktPnN0YXJ0X2JsaworCQkJKyBsZTMyX3RvX2NwdShFWFQ0X1NCKHNiKS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwkJdHJhY2VfbWFyayhleHQ0X2Rpc2NhcmRfYmxvY2tzLCAiZGV2ICVzIGJsayAlbGx1IGNvdW50ICV1Iiwgc2ItPnNfaWQsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBkaXNjYXJkX2Jsb2NrLCBlbnRyeS0+Y291bnQpOworCQlzYl9pc3N1ZV9kaXNjYXJkKHNiLCBkaXNjYXJkX2Jsb2NrLCBlbnRyeS0+Y291bnQpOwogCi0JCS8qIGJhbGFuY2UgcmVmY291bnRzIGZyb20gZXh0NF9tYl9mcmVlX21ldGFkYXRhKCkgKi8KLQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9idWRkeV9wYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9iaXRtYXBfcGFnZSk7Ci0KLQkJa2ZyZWUobWQpOworCQlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9mcmVlX2V4dF9jYWNoZXAsIGVudHJ5KTsKIAkJZXh0NF9tYl9yZWxlYXNlX2Rlc2MoJmU0Yik7Ci0KLQl9IHdoaWxlIChtZCk7CisJfQogCiAJbWJfZGVidWcoImZyZWVkICV1IGJsb2NrcyBpbiAldSBzdHJ1Y3R1cmVzXG4iLCBjb3VudCwgY291bnQyKTsKIH0KQEAgLTI3MTIsNiArMjY5OSw3IEBACiAKIHN0YXRpYyBpbnQgZXh0NF9tYl9pbml0X3Blcl9kZXZfcHJvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogeworI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1I7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwpAQCAtMjczNSwxMCArMjcyMywxNCBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RBVFNfTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJldHVybiAtRU5PTUVNOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW50IGV4dDRfbWJfZGVzdHJveV9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwogCiAJaWYgKHNiaS0+c19wcm9jID09IE5VTEwpCkBAIC0yNzUwLDcgKzI3NDIsNyBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUlOX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RBVFNfTkFNRSwgc2JpLT5zX3Byb2MpOwotCisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc3MSw2ICsyNzYzLDE2IEBACiAJCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X3BzcGFjZV9jYWNoZXApOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisKKwlleHQ0X2ZyZWVfZXh0X2NhY2hlcCA9CisJCWttZW1fY2FjaGVfY3JlYXRlKCJleHQ0X2ZyZWVfYmxvY2tfZXh0ZW50cyIsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGV4dDRfZnJlZV9kYXRhKSwKKwkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULCBOVUxMKTsKKwlpZiAoZXh0NF9mcmVlX2V4dF9jYWNoZXAgPT0gTlVMTCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9wc3BhY2VfY2FjaGVwKTsKKwkJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfYWNfY2FjaGVwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yNzc5LDYgKzI3ODEsNyBAQAogCS8qIFhYWDogc3luY2hyb25pemVfcmN1KCk7ICovCiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfcHNwYWNlX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfYWNfY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9mcmVlX2V4dF9jYWNoZXApOwogfQogCiAKQEAgLTQzMjQsOCArNDMyNyw2IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLQlleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHNiLCBoYW5kbGUpOwotCiAJKmVycnAgPSBleHQ0X21iX2luaXRpYWxpemVfY29udGV4dChhYywgYXIpOwogCWlmICgqZXJycCkgewogCQlhci0+bGVuID0gMDsKQEAgLTQzODQsMzUgKzQzODUsMjAgQEAKIAogCXJldHVybiBibG9jazsKIH0KLXN0YXRpYyB2b2lkIGV4dDRfbWJfcG9sbF9uZXdfdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJCWhhbmRsZV90ICpoYW5kbGUpCisKKy8qCisgKiBXZSBjYW4gbWVyZ2UgdHdvIGZyZWUgZGF0YSBleHRlbnRzIG9ubHkgaWYgdGhlIHBoeXNpY2FsIGJsb2NrcworICogYXJlIGNvbnRpZ3VvdXMsIEFORCB0aGUgZXh0ZW50cyB3ZXJlIGZyZWVkIGJ5IHRoZSBzYW1lIHRyYW5zYWN0aW9uLAorICogQU5EIHRoZSBibG9ja3MgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBncm91cC4KKyAqLworc3RhdGljIGludCBjYW5fbWVyZ2Uoc3RydWN0IGV4dDRfZnJlZV9kYXRhICplbnRyeTEsCisJCQlzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEgKmVudHJ5MikKIHsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQotCWlmIChzYmktPnNfbGFzdF90cmFuc2FjdGlvbiA9PSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKQotCQlyZXR1cm47Ci0KLQkvKiBuZXcgdHJhbnNhY3Rpb24hIHRpbWUgdG8gY2xvc2UgbGFzdCBvbmUgYW5kIGZyZWUgYmxvY2tzIGZvcgotCSAqIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4gd2Uga25vdyB0aGF0IG9ubHkgdHJhbnNhY3Rpb24gY2FuIGJlCi0JICogYWN0aXZlLCBzbyBwcmV2aW9zIHRyYW5zYWN0aW9uIGNhbiBiZSBiZWluZyBsb2dnZWQgYW5kIHdlCi0JICoga25vdyB0aGF0IHRyYW5zYWN0aW9uIGJlZm9yZSBwcmV2aW91cyBpcyBrbm93biB0byBiZSBhbHJlYWR5Ci0JICogbG9nZ2VkLiB0aGlzIG1lYW5zIHRoYXQgbm93IHdlIG1heSBmcmVlIGJsb2NrcyBmcmVlZCBpbiBhbGwKLQkgKiB0cmFuc2FjdGlvbnMgYmVmb3JlIHByZXZpb3VzIG9uZS4gaG9wZSBJJ20gY2xlYXIgZW5vdWdoIC4uLiAqLwotCi0Jc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JaWYgKHNiaS0+c19sYXN0X3RyYW5zYWN0aW9uICE9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQpIHsKLQkJbWJfZGVidWcoIm5ldyB0cmFuc2FjdGlvbiAlbHUsIG9sZCAlbHVcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHNiaS0+c19sYXN0X3RyYW5zYWN0aW9uKTsKLQkJbGlzdF9zcGxpY2VfaW5pdCgmc2JpLT5zX2Nsb3NlZF90cmFuc2FjdGlvbiwKLQkJCQkmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbik7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJnNiaS0+c19hY3RpdmVfdHJhbnNhY3Rpb24sCi0JCQkJJnNiaS0+c19jbG9zZWRfdHJhbnNhY3Rpb24pOwotCQlzYmktPnNfbGFzdF90cmFuc2FjdGlvbiA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQ7Ci0JfQotCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0KLQlleHQ0X21iX2ZyZWVfY29tbWl0dGVkX2Jsb2NrcyhzYik7CisJaWYgKChlbnRyeTEtPnRfdGlkID09IGVudHJ5Mi0+dF90aWQpICYmCisJICAgIChlbnRyeTEtPmdyb3VwID09IGVudHJ5Mi0+Z3JvdXApICYmCisJICAgICgoZW50cnkxLT5zdGFydF9ibGsgKyBlbnRyeTEtPmNvdW50KSA9PSBlbnRyeTItPnN0YXJ0X2JsaykpCisJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludApAQCAtNDQyMiw1NyArNDQwOCw4MCBAQAogCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmRiID0gZTRiLT5iZF9pbmZvOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBlNGItPmJkX3NiOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCXN0cnVjdCBleHQ0X2ZyZWVfbWV0YWRhdGEgKm1kOwotCWludCBpOworCXN0cnVjdCBleHQ0X2ZyZWVfZGF0YSAqZW50cnksICpuZXdfZW50cnk7CisJc3RydWN0IHJiX25vZGUgKipuID0gJmRiLT5iYl9mcmVlX3Jvb3QucmJfbm9kZSwgKm5vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEwsICpuZXdfbm9kZTsKKwogCiAJQlVHX09OKGU0Yi0+YmRfYml0bWFwX3BhZ2UgPT0gTlVMTCk7CiAJQlVHX09OKGU0Yi0+YmRfYnVkZHlfcGFnZSA9PSBOVUxMKTsKIAorCW5ld19lbnRyeSAgPSBrbWVtX2NhY2hlX2FsbG9jKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBHRlBfTk9GUyk7CisJbmV3X2VudHJ5LT5zdGFydF9ibGsgPSBibG9jazsKKwluZXdfZW50cnktPmdyb3VwICA9IGdyb3VwOworCW5ld19lbnRyeS0+Y291bnQgPSBjb3VudDsKKwluZXdfZW50cnktPnRfdGlkID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZDsKKwluZXdfbm9kZSA9ICZuZXdfZW50cnktPm5vZGU7CisKIAlleHQ0X2xvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQltZCA9IGRiLT5iYl9tZF9jdXI7Ci0JCWlmIChtZCAmJiBkYi0+YmJfdGlkICE9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQpIHsKLQkJCWRiLT5iYl9tZF9jdXIgPSBOVUxMOwotCQkJbWQgPSBOVUxMOwotCQl9Ci0KLQkJaWYgKG1kID09IE5VTEwpIHsKLQkJCWV4dDRfdW5sb2NrX2dyb3VwKHNiLCBncm91cCk7Ci0JCQltZCA9IGttYWxsb2Moc2l6ZW9mKCptZCksIEdGUF9OT0ZTKTsKLQkJCWlmIChtZCA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJbWQtPm51bSA9IDA7Ci0JCQltZC0+Z3JvdXAgPSBncm91cDsKLQotCQkJZXh0NF9sb2NrX2dyb3VwKHNiLCBncm91cCk7Ci0JCQlpZiAoZGItPmJiX21kX2N1ciA9PSBOVUxMKSB7Ci0JCQkJc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JCQkJbGlzdF9hZGQoJm1kLT5saXN0LCAmc2JpLT5zX2FjdGl2ZV90cmFuc2FjdGlvbik7Ci0JCQkJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKLQkJCQkvKiBwcm90ZWN0IGJ1ZGR5IGNhY2hlIGZyb20gYmVpbmcgZnJlZWQsCi0JCQkJICogb3RoZXJ3aXNlIHdlJ2xsIHJlZnJlc2ggaXQgZnJvbQotCQkJCSAqIG9uLWRpc2sgYml0bWFwIGFuZCBsb3NlIG5vdC15ZXQtYXZhaWxhYmxlCi0JCQkJICogYmxvY2tzICovCi0JCQkJcGFnZV9jYWNoZV9nZXQoZTRiLT5iZF9idWRkeV9wYWdlKTsKLQkJCQlwYWdlX2NhY2hlX2dldChlNGItPmJkX2JpdG1hcF9wYWdlKTsKLQkJCQlkYi0+YmJfbWRfY3VyID0gbWQ7Ci0JCQkJZGItPmJiX3RpZCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQ7Ci0JCQkJbWJfZGVidWcoIm5ldyBtZCAweCVwIGZvciBncm91cCAlbHVcbiIsCi0JCQkJCQltZCwgbWQtPmdyb3VwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJa2ZyZWUobWQpOwotCQkJCW1kID0gZGItPmJiX21kX2N1cjsKLQkJCX0KLQkJfQotCi0JCUJVR19PTihtZC0+bnVtID49IEVYVDRfQkJfTUFYX0JMT0NLUyk7Ci0JCW1kLT5ibG9ja3NbbWQtPm51bV0gPSBibG9jayArIGk7Ci0JCW1kLT5udW0rKzsKLQkJaWYgKG1kLT5udW0gPT0gRVhUNF9CQl9NQVhfQkxPQ0tTKSB7Ci0JCQkvKiBubyBtb3JlIHNwYWNlLCBwdXQgZnVsbCBjb250YWluZXIgb24gYSBzYidzIGxpc3QgKi8KLQkJCWRiLT5iYl9tZF9jdXIgPSBOVUxMOworCWlmICghKm4pIHsKKwkJLyogZmlyc3QgZnJlZSBibG9jayBleGVudC4gV2UgbmVlZCB0bworCQkgICBwcm90ZWN0IGJ1ZGR5IGNhY2hlIGZyb20gYmVpbmcgZnJlZWQsCisJCSAqIG90aGVyd2lzZSB3ZSdsbCByZWZyZXNoIGl0IGZyb20KKwkJICogb24tZGlzayBiaXRtYXAgYW5kIGxvc2Ugbm90LXlldC1hdmFpbGFibGUKKwkJICogYmxvY2tzICovCisJCXBhZ2VfY2FjaGVfZ2V0KGU0Yi0+YmRfYnVkZHlfcGFnZSk7CisJCXBhZ2VfY2FjaGVfZ2V0KGU0Yi0+YmRfYml0bWFwX3BhZ2UpOworCX0KKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisJCWVudHJ5ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEsIG5vZGUpOworCQlpZiAoYmxvY2sgPCBlbnRyeS0+c3RhcnRfYmxrKQorCQkJbiA9ICYoKm4pLT5yYl9sZWZ0OworCQllbHNlIGlmIChibG9jayA+PSAoZW50cnktPnN0YXJ0X2JsayArIGVudHJ5LT5jb3VudCkpCisJCQluID0gJigqbiktPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLAorCQkJICAgICJEb3VibGUgZnJlZSBvZiBibG9ja3MgJWQgKCVkICVkKVxuIiwKKwkJCSAgICBibG9jaywgZW50cnktPnN0YXJ0X2JsaywgZW50cnktPmNvdW50KTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQorCisJcmJfbGlua19ub2RlKG5ld19ub2RlLCBwYXJlbnQsIG4pOworCXJiX2luc2VydF9jb2xvcihuZXdfbm9kZSwgJmRiLT5iYl9mcmVlX3Jvb3QpOworCisJLyogTm93IHRyeSB0byBzZWUgdGhlIGV4dGVudCBjYW4gYmUgbWVyZ2VkIHRvIGxlZnQgYW5kIHJpZ2h0ICovCisJbm9kZSA9IHJiX3ByZXYobmV3X25vZGUpOworCWlmIChub2RlKSB7CisJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGV4dDRfZnJlZV9kYXRhLCBub2RlKTsKKwkJaWYgKGNhbl9tZXJnZShlbnRyeSwgbmV3X2VudHJ5KSkgeworCQkJbmV3X2VudHJ5LT5zdGFydF9ibGsgPSBlbnRyeS0+c3RhcnRfYmxrOworCQkJbmV3X2VudHJ5LT5jb3VudCArPSBlbnRyeS0+Y291bnQ7CisJCQlyYl9lcmFzZShub2RlLCAmKGRiLT5iYl9mcmVlX3Jvb3QpKTsKKwkJCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOworCQkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7CisJCQlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9mcmVlX2V4dF9jYWNoZXAsIGVudHJ5KTsKKwkJfQorCX0KKworCW5vZGUgPSByYl9uZXh0KG5ld19ub2RlKTsKKwlpZiAobm9kZSkgeworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSwgbm9kZSk7CisJCWlmIChjYW5fbWVyZ2UobmV3X2VudHJ5LCBlbnRyeSkpIHsKKwkJCW5ld19lbnRyeS0+Y291bnQgKz0gZW50cnktPmNvdW50OworCQkJcmJfZXJhc2Uobm9kZSwgJihkYi0+YmJfZnJlZV9yb290KSk7CisJCQlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOworCQkJa21lbV9jYWNoZV9mcmVlKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBlbnRyeSk7CisJCX0KKwl9CisJLyogQWRkIHRoZSBleHRlbnQgdG8gdHJhbnNhY3Rpb24ncyBwcml2YXRlIGxpc3QgKi8KKwlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKKwlsaXN0X2FkZCgmbmV3X2VudHJ5LT5saXN0LCAmaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3ByaXZhdGVfbGlzdCk7CisJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKIAlleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApOwogCXJldHVybiAwOwogfQpAQCAtNDUwMCw4ICs0NTA5LDYgQEAKIAogCSpmcmVlZCA9IDA7CiAKLQlleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHNiLCBoYW5kbGUpOwotCiAJc2JpID0gRVhUNF9TQihzYik7CiAJZXMgPSBFWFQ0X1NCKHNiKS0+c19lczsKIAlpZiAoYmxvY2sgPCBsZTMyX3RvX2NwdShlcy0+c19maXJzdF9kYXRhX2Jsb2NrKSB8fApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCBiM2I0ODI4Li5iNWRmZjFmIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KICNpbmNsdWRlICJleHQ0X2piZDIuaCIKICNpbmNsdWRlICJleHQ0LmgiCiAjaW5jbHVkZSAiZ3JvdXAuaCIKQEAgLTk4LDIzICsxMDAsMjkgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X3BzcGFjZV9jYWNoZXA7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmV4dDRfYWNfY2FjaGVwOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X2ZyZWVfZXh0X2NhY2hlcDsKIAotI2lmZGVmIEVYVDRfQkJfTUFYX0JMT0NLUwotI3VuZGVmIEVYVDRfQkJfTUFYX0JMT0NLUwotI2VuZGlmCi0jZGVmaW5lIEVYVDRfQkJfTUFYX0JMT0NLUwkzMAorc3RydWN0IGV4dDRfZnJlZV9kYXRhIHsKKwkvKiB0aGlzIGxpbmtzIHRoZSBmcmVlIGJsb2NrIGluZm9ybWF0aW9uIGZyb20gZ3JvdXBfaW5mbyAqLworCXN0cnVjdCByYl9ub2RlIG5vZGU7CiAKLXN0cnVjdCBleHQ0X2ZyZWVfbWV0YWRhdGEgewotCWV4dDRfZ3JvdXBfdCBncm91cDsKLQl1bnNpZ25lZCBzaG9ydCBudW07Ci0JZXh0NF9ncnBibGtfdCAgYmxvY2tzW0VYVDRfQkJfTUFYX0JMT0NLU107CisJLyogdGhpcyBsaW5rcyB0aGUgZnJlZSBibG9jayBpbmZvcm1hdGlvbiBmcm9tIGV4dDRfc2JfaW5mbyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIGdyb3VwIHdoaWNoIGZyZWUgYmxvY2sgZXh0ZW50IGJlbG9uZ3MgKi8KKwlleHQ0X2dyb3VwX3QgZ3JvdXA7CisKKwkvKiBmcmVlIGJsb2NrIGV4dGVudCAqLworCWV4dDRfZ3JwYmxrX3Qgc3RhcnRfYmxrOworCWV4dDRfZ3JwYmxrX3QgY291bnQ7CisKKwkvKiB0cmFuc2FjdGlvbiB3aGljaCBmcmVlZCB0aGlzIGV4dGVudCAqLworCXRpZF90CXRfdGlkOwogfTsKIAogc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyB7CiAJdW5zaWduZWQgbG9uZwliYl9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nCWJiX3RpZDsKLQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhICpiYl9tZF9jdXI7CisJc3RydWN0IHJiX3Jvb3QgIGJiX2ZyZWVfcm9vdDsKIAl1bnNpZ25lZCBzaG9ydAliYl9maXJzdF9mcmVlOwogCXVuc2lnbmVkIHNob3J0CWJiX2ZyZWU7CiAJdW5zaWduZWQgc2hvcnQJYmJfZnJhZ21lbnRzOwpAQCAtMjYxLDggKzI2OSw2IEBACiAKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCiAJCQkJCWV4dDRfZ3JvdXBfdCBncm91cCk7Ci1zdGF0aWMgdm9pZCBleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBoYW5kbGVfdCAqKTsKLXN0YXRpYyB2b2lkIGV4dDRfbWJfZnJlZV9jb21taXR0ZWRfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHN0YXRpYyB2b2lkIGV4dDRfbWJfcmV0dXJuX3RvX3ByZWFsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGV4dDRfYnVkZHkgKmU0Yiwgc2VjdG9yX3QgYmxvY2ssCiAJCQkJCWludCBjb3VudCk7CkBAIC0yNzAsNiArMjc2LDcgQEAKIAkJCXN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpOwogc3RhdGljIGludCBleHQ0X21iX2luaXRfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIGludCBleHQ0X21iX2Rlc3Ryb3lfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworc3RhdGljIHZvaWQgcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKTsKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9sb2NrX2dyb3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncm91cCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCA5MmRiOWU5Li42M2FkY2I3IDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0xMDYxLDcgKzEwNjEsNiBAQAogc3RydWN0IGRlbnRyeSAqZXh0NF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogewogCXVuc2lnbmVkIGxvbmcgaW5vOwotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcXN0ciBkb3Rkb3QgPSB7CiAJCS5uYW1lID0gIi4uIiwKQEAgLTEwODMsMTYgKzEwODIsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAl9CiAKLQlpbm9kZSA9IGV4dDRfaWdldChjaGlsZC0+ZF9pbm9kZS0+aV9zYiwgaW5vKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkKLQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKLQotCXBhcmVudCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFwYXJlbnQpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXBhcmVudCA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCXJldHVybiBwYXJlbnQ7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGV4dDRfaWdldChjaGlsZC0+ZF9pbm9kZS0+aV9zYiwgaW5vKSk7CiB9CiAKICNkZWZpbmUgU19TSElGVCAxMgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IGRlYThmMTMuLmJkZGRlYTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTM3NCw2NiArMzc0LDYgQEAKIAkgKi8KIH0KIAotaW50IGV4dDRfdXBkYXRlX2NvbXBhdF9mZWF0dXJlKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGNvbXBhdCkKLXsKLQlpbnQgZXJyID0gMDsKLQlpZiAoIUVYVDRfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLCBjb21wYXQpKSB7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJRVhUNF9TRVRfQ09NUEFUX0ZFQVRVUkUoc2IsIGNvbXBhdCk7Ci0JCXNiLT5zX2RpcnQgPSAxOwotCQloYW5kbGUtPmhfc3luYyA9IDE7Ci0JCUJVRkZFUl9UUkFDRShFWFQ0X1NCKHNiKS0+c19zYmgsCi0JCQkJCSJjYWxsIGV4dDRfam91cm5hbF9kaXJ0eV9tZXQgYWRhdGEiKTsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgZXh0NF91cGRhdGVfcm9jb21wYXRfZmVhdHVyZShoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiByb2NvbXBhdCkKLXsKLQlpbnQgZXJyID0gMDsKLQlpZiAoIUVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCByb2NvbXBhdCkpIHsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlFWFQ0X1NFVF9ST19DT01QQVRfRkVBVFVSRShzYiwgcm9jb21wYXQpOwotCQlzYi0+c19kaXJ0ID0gMTsKLQkJaGFuZGxlLT5oX3N5bmMgPSAxOwotCQlCVUZGRVJfVFJBQ0UoRVhUNF9TQihzYiktPnNfc2JoLAotCQkJCQkiY2FsbCBleHQ0X2pvdXJuYWxfZGlydHlfbWV0IGFkYXRhIik7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGV4dDRfdXBkYXRlX2luY29tcGF0X2ZlYXR1cmUoaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgaW5jb21wYXQpCi17Ci0JaW50IGVyciA9IDA7Ci0JaWYgKCFFWFQ0X0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBpbmNvbXBhdCkpIHsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlFWFQ0X1NFVF9JTkNPTVBBVF9GRUFUVVJFKHNiLCBpbmNvbXBhdCk7Ci0JCXNiLT5zX2RpcnQgPSAxOwotCQloYW5kbGUtPmhfc3luYyA9IDE7Ci0JCUJVRkZFUl9UUkFDRShFWFQ0X1NCKHNiKS0+c19zYmgsCi0JCQkJCSJjYWxsIGV4dDRfam91cm5hbF9kaXJ0eV9tZXQgYWRhdGEiKTsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCiAvKgogICogT3BlbiB0aGUgZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UKICAqLwpAQCAtNDU5LDcgKzM5OSw3IEBACiBzdGF0aWMgaW50IGV4dDRfYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCWJkX3JlbGVhc2UoYmRldik7Ci0JcmV0dXJuIGJsa2Rldl9wdXQoYmRldik7CisJcmV0dXJuIGJsa2Rldl9wdXQoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiB9CiAKIHN0YXRpYyBpbnQgZXh0NF9ibGtkZXZfcmVtb3ZlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSkKQEAgLTkwNCw3ICs4NDQsNyBAQAogZW51bSB7CiAJT3B0X2JzZF9kZiwgT3B0X21pbml4X2RmLCBPcHRfZ3JwaWQsIE9wdF9ub2dycGlkLAogCU9wdF9yZXNnaWQsIE9wdF9yZXN1aWQsIE9wdF9zYiwgT3B0X2Vycl9jb250LCBPcHRfZXJyX3BhbmljLCBPcHRfZXJyX3JvLAotCU9wdF9ub3VpZDMyLCBPcHRfbm9jaGVjaywgT3B0X2RlYnVnLCBPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwKKwlPcHRfbm91aWQzMiwgT3B0X2RlYnVnLCBPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwKIAlPcHRfdXNlcl94YXR0ciwgT3B0X25vdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X25vYWNsLAogCU9wdF9yZXNlcnZhdGlvbiwgT3B0X25vcmVzZXJ2YXRpb24sIE9wdF9ub2xvYWQsIE9wdF9ub2JoLCBPcHRfYmgsCiAJT3B0X2NvbW1pdCwgT3B0X2pvdXJuYWxfdXBkYXRlLCBPcHRfam91cm5hbF9pbnVtLCBPcHRfam91cm5hbF9kZXYsCkBAIC05MTUsNyArODU1LDcgQEAKIAlPcHRfanFmbXRfdmZzb2xkLCBPcHRfanFmbXRfdmZzdjAsIE9wdF9xdW90YSwgT3B0X25vcXVvdGEsCiAJT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsIE9wdF91c3JxdW90YSwKIAlPcHRfZ3JwcXVvdGEsIE9wdF9leHRlbnRzLCBPcHRfbm9leHRlbnRzLCBPcHRfaV92ZXJzaW9uLAotCU9wdF9tYmFsbG9jLCBPcHRfbm9tYmFsbG9jLCBPcHRfc3RyaXBlLCBPcHRfZGVsYWxsb2MsIE9wdF9ub2RlbGFsbG9jLAorCU9wdF9zdHJpcGUsIE9wdF9kZWxhbGxvYywgT3B0X25vZGVsYWxsb2MsCiAJT3B0X2lub2RlX3JlYWRhaGVhZF9ibGtzCiB9OwogCkBAIC05MzMsOCArODczLDYgQEAKIAl7T3B0X2Vycl9wYW5pYywgImVycm9ycz1wYW5pYyJ9LAogCXtPcHRfZXJyX3JvLCAiZXJyb3JzPXJlbW91bnQtcm8ifSwKIAl7T3B0X25vdWlkMzIsICJub3VpZDMyIn0sCi0Je09wdF9ub2NoZWNrLCAibm9jaGVjayJ9LAotCXtPcHRfbm9jaGVjaywgImNoZWNrPW5vbmUifSwKIAl7T3B0X2RlYnVnLCAiZGVidWcifSwKIAl7T3B0X29sZGFsbG9jLCAib2xkYWxsb2MifSwKIAl7T3B0X29ybG92LCAib3Jsb3YifSwKQEAgLTk3Myw4ICs5MTEsNiBAQAogCXtPcHRfZXh0ZW50cywgImV4dGVudHMifSwKIAl7T3B0X25vZXh0ZW50cywgIm5vZXh0ZW50cyJ9LAogCXtPcHRfaV92ZXJzaW9uLCAiaV92ZXJzaW9uIn0sCi0Je09wdF9tYmFsbG9jLCAibWJhbGxvYyJ9LAotCXtPcHRfbm9tYmFsbG9jLCAibm9tYmFsbG9jIn0sCiAJe09wdF9zdHJpcGUsICJzdHJpcGU9JXUifSwKIAl7T3B0X3Jlc2l6ZSwgInJlc2l6ZSJ9LAogCXtPcHRfZGVsYWxsb2MsICJkZWxhbGxvYyJ9LApAQCAtMTA3Myw5ICsxMDA5LDYgQEAKIAkJY2FzZSBPcHRfbm91aWQzMjoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fVUlEMzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X25vY2hlY2s6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgQ0hFQ0spOwotCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBERUJVRyk7CiAJCQlicmVhazsKQEAgLTE2MTgsMTQgKzE1NTEsMTQgQEAKIAkJaWYgKGJsb2NrX2JpdG1hcCA8IGZpcnN0X2Jsb2NrIHx8IGJsb2NrX2JpdG1hcCA+IGxhc3RfYmxvY2spIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZXh0NF9jaGVja19kZXNjcmlwdG9yczogIgogCQkJICAgICAgICJCbG9jayBiaXRtYXAgZm9yIGdyb3VwICVsdSBub3QgaW4gZ3JvdXAgIgotCQkJICAgICAgICIoYmxvY2sgJWxsdSkhIiwgaSwgYmxvY2tfYml0bWFwKTsKKwkJCSAgICAgICAiKGJsb2NrICVsbHUpIVxuIiwgaSwgYmxvY2tfYml0bWFwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlub2RlX2JpdG1hcCA9IGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApOwogCQlpZiAoaW5vZGVfYml0bWFwIDwgZmlyc3RfYmxvY2sgfHwgaW5vZGVfYml0bWFwID4gbGFzdF9ibG9jaykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzOiAiCiAJCQkgICAgICAgIklub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWx1IG5vdCBpbiBncm91cCAiCi0JCQkgICAgICAgIihibG9jayAlbGx1KSEiLCBpLCBpbm9kZV9iaXRtYXApOworCQkJICAgICAgICIoYmxvY2sgJWxsdSkhXG4iLCBpLCBpbm9kZV9iaXRtYXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaW5vZGVfdGFibGUgPSBleHQ0X2lub2RlX3RhYmxlKHNiLCBnZHApOwpAQCAtMTYzMyw3ICsxNTY2LDcgQEAKIAkJICAgIGlub2RlX3RhYmxlICsgc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgLSAxID4gbGFzdF9ibG9jaykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzOiAiCiAJCQkgICAgICAgIklub2RlIHRhYmxlIGZvciBncm91cCAlbHUgbm90IGluIGdyb3VwICIKLQkJCSAgICAgICAiKGJsb2NrICVsbHUpISIsIGksIGlub2RlX3RhYmxlKTsKKwkJCSAgICAgICAiKGJsb2NrICVsbHUpIVxuIiwgaSwgaW5vZGVfdGFibGUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJc3Bpbl9sb2NrKHNiX2JnbF9sb2NrKHNiaSwgaSkpOwpAQCAtMTc3OCwxMyArMTcxMSwxMyBAQAogICoKICAqIE5vdGUsIHRoaXMgZG9lcyAqbm90KiBjb25zaWRlciBhbnkgbWV0YWRhdGEgb3ZlcmhlYWQgZm9yIHZmcyBpX2Jsb2Nrcy4KICAqLwotc3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzKQorc3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpCiB7CiAJbG9mZl90IHJlczsKIAlsb2ZmX3QgdXBwZXJfbGltaXQgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCiAJLyogc21hbGwgaV9ibG9ja3MgaW4gdmZzIGlub2RlPyAqLwotCWlmIChzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKKwlpZiAoIWhhc19odWdlX2ZpbGVzIHx8IHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgewogCQkvKgogCQkgKiBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkIGltcGxpZXMgdGhlIGlub2RlCiAJCSAqIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbiA1MTIgYnl0ZXMKQEAgLTE4MTQsNyArMTc0Nyw3IEBACiAgKiBibG9jayBsaW1pdCwgYW5kIGFsc28gYSBsaW1pdCBvZiAoMl40OCAtIDEpIDUxMi1ieXRlIHNlY3RvcnMgaW4gaV9ibG9ja3MuCiAgKiBXZSBuZWVkIHRvIGJlIDEgZmlsZXN5c3RlbSBibG9jayBsZXNzIHRoYW4gdGhlIDJeNDggc2VjdG9yIGxpbWl0LgogICovCi1zdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzKQorc3RhdGljIGxvZmZfdCBleHQ0X21heF9iaXRtYXBfc2l6ZShpbnQgYml0cywgaW50IGhhc19odWdlX2ZpbGVzKQogewogCWxvZmZfdCByZXMgPSBFWFQ0X05ESVJfQkxPQ0tTOwogCWludCBtZXRhX2Jsb2NrczsKQEAgLTE4MjcsMTEgKzE3NjAsMTEgQEAKIAkgKiB0b3RhbCBudW1iZXIgb2YgIDUxMiBieXRlcyBibG9ja3Mgb2YgdGhlIGZpbGUKIAkgKi8KIAotCWlmIChzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKKwlpZiAoIWhhc19odWdlX2ZpbGVzIHx8IHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgewogCQkvKgotCQkgKiBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkIGltcGxpZXMgdGhlIGlub2RlCi0JCSAqIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbiA1MTIgYnl0ZXMKLQkJICogMzIgPT0gc2l6ZSBvZiB2ZnMgaW5vZGUgaV9ibG9ja3MgKiA4CisJCSAqICFoYXNfaHVnZV9maWxlcyBvciBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkCisJCSAqIGltcGxpZXMgdGhlIGlub2RlIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbgorCQkgKiA1MTIgYnl0ZXMgMzIgPT0gc2l6ZSBvZiB2ZnMgaW5vZGUgaV9ibG9ja3MgKiA4CiAJCSAqLwogCQl1cHBlcl9saW1pdCA9ICgxTEwgPDwgMzIpIC0gMTsKIApAQCAtMTk0MCw3ICsxODczLDcgQEAKIAlpbnQgYmxvY2tzaXplOwogCWludCBkYl9jb3VudDsKIAlpbnQgaTsKLQlpbnQgbmVlZHNfcmVjb3Zlcnk7CisJaW50IG5lZWRzX3JlY292ZXJ5LCBoYXNfaHVnZV9maWxlczsKIAlfX2xlMzIgZmVhdHVyZXM7CiAJX191NjQgYmxvY2tzX2NvdW50OwogCWludCBlcnI7CkBAIC0yMDgxLDcgKzIwMTQsOSBAQAogCQkgICAgICAgc2ItPnNfaWQsIGxlMzJfdG9fY3B1KGZlYXR1cmVzKSk7CiAJCWdvdG8gZmFpbGVkX21vdW50OwogCX0KLQlpZiAoRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSkgeworCWhhc19odWdlX2ZpbGVzID0gRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCisJCQkJICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKTsKKwlpZiAoaGFzX2h1Z2VfZmlsZXMpIHsKIAkJLyoKIAkJICogTGFyZ2UgZmlsZSBzaXplIGVuYWJsZWQgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUKIAkJICogbW91bnQgaWYga2VybmVsIGlzIGJ1aWxkIHdpdGggQ09ORklHX0xTRgpAQCAtMjEzMSw4ICsyMDY2LDkgQEAKIAkJfQogCX0KIAotCXNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMgPSBleHQ0X21heF9iaXRtYXBfc2l6ZShzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0Jc2ItPnNfbWF4Ynl0ZXMgPSBleHQ0X21heF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwlzYmktPnNfYml0bWFwX21heGJ5dGVzID0gZXh0NF9tYXhfYml0bWFwX3NpemUoc2ItPnNfYmxvY2tzaXplX2JpdHMsCisJCQkJCQkgICAgICBoYXNfaHVnZV9maWxlcyk7CisJc2ItPnNfbWF4Ynl0ZXMgPSBleHQ0X21heF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCBoYXNfaHVnZV9maWxlcyk7CiAKIAlpZiAobGUzMl90b19jcHUoZXMtPnNfcmV2X2xldmVsKSA9PSBFWFQ0X0dPT0RfT0xEX1JFVikgewogCQlzYmktPnNfaW5vZGVfc2l6ZSA9IEVYVDRfR09PRF9PTERfSU5PREVfU0laRTsKQEAgLTI0NTYsNiArMjM5MiwyMSBAQAogCQkJImF2YWlsYWJsZS5cbiIpOwogCX0KIAorCWlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9KT1VSTkFMX0RBVEEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mczogSWdub3JpbmcgZGVsYWxsb2Mgb3B0aW9uIC0gIgorCQkJCSJyZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGVcbiIpOworCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREVMQUxMT0MpOworCX0gZWxzZSBpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRVhUNC1mczogZGVsYXllZCBhbGxvY2F0aW9uIGVuYWJsZWRcbiIpOworCisJZXh0NF9leHRfaW5pdChzYik7CisJZXJyID0gZXh0NF9tYl9pbml0KHNiLCBuZWVkc19yZWNvdmVyeSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGZhaWxlZCB0byBpbml0YWxpemUgbWJhbGxvYyAoJWQpXG4iLAorCQkgICAgICAgZXJyKTsKKwkJZ290byBmYWlsZWRfbW91bnQ0OworCX0KKwogCS8qCiAJICogYWtwbTogY29yZSByZWFkX3N1cGVyKCkgY2FsbHMgaW4gaGVyZSB3aXRoIHRoZSBzdXBlcmJsb2NrIGxvY2tlZC4KIAkgKiBUaGF0IGRlYWRsb2NrcywgYmVjYXVzZSBvcnBoYW4gY2xlYW51cCBuZWVkcyB0byBsb2NrIHRoZSBzdXBlcmJsb2NrCkBAIC0yNDc1LDIxICsyNDI2LDYgQEAKIAkgICAgICAgdGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfT1JERVJFRF9EQVRBID8gIm9yZGVyZWQiOgogCSAgICAgICAid3JpdGViYWNrIik7CiAKLQlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnM6IElnbm9yaW5nIGRlbGFsbG9jIG9wdGlvbiAtICIKLQkJCQkicmVxdWVzdGVkIGRhdGEgam91cm5hbGluZyBtb2RlXG4iKTsKLQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCi0JCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IGRlbGF5ZWQgYWxsb2NhdGlvbiBlbmFibGVkXG4iKTsKLQotCWV4dDRfZXh0X2luaXQoc2IpOwotCWVyciA9IGV4dDRfbWJfaW5pdChzYiwgbmVlZHNfcmVjb3ZlcnkpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBmYWlsZWQgdG8gaW5pdGFsaXplIG1iYWxsb2MgKCVkKVxuIiwKLQkJICAgICAgIGVycik7Ci0JCWdvdG8gZmFpbGVkX21vdW50NDsKLQl9Ci0KIAlsb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogCkBAIC0yNjE3LDcgKzI1NTMsNyBAQAogCWlmIChiZF9jbGFpbShiZGV2LCBzYikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiRVhUNDogZmFpbGVkIHRvIGNsYWltIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlLlxuIik7Ci0JCWJsa2Rldl9wdXQoYmRldik7CisJCWJsa2Rldl9wdXQoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMzM5MiwzMCArMzMyOCwzMCBAQAogICogU3RhbmRhcmQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHF1b3RhX29uCiAgKi8KIHN0YXRpYyBpbnQgZXh0NF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJCSBjaGFyICpwYXRoLCBpbnQgcmVtb3VudCkKKwkJCSBjaGFyICpuYW1lLCBpbnQgcmVtb3VudCkKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IHBhdGggcGF0aDsKIAogCWlmICghdGVzdF9vcHQoc2IsIFFVT1RBKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JLyogV2hlbiByZW1vdW50aW5nLCBubyBjaGVja3MgYXJlIG5lZWRlZCBhbmQgaW4gZmFjdCwgcGF0aCBpcyBOVUxMICovCisJLyogV2hlbiByZW1vdW50aW5nLCBubyBjaGVja3MgYXJlIG5lZWRlZCBhbmQgaW4gZmFjdCwgbmFtZSBpcyBOVUxMICovCiAJaWYgKHJlbW91bnQpCi0JCXJldHVybiB2ZnNfcXVvdGFfb24oc2IsIHR5cGUsIGZvcm1hdF9pZCwgcGF0aCwgcmVtb3VudCk7CisJCXJldHVybiB2ZnNfcXVvdGFfb24oc2IsIHR5cGUsIGZvcm1hdF9pZCwgbmFtZSwgcmVtb3VudCk7CiAKLQllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfRk9MTE9XLCAmbmQpOworCWVyciA9IGtlcm5fcGF0aChuYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCS8qIFF1b3RhZmlsZSBub3Qgb24gdGhlIHNhbWUgZmlsZXN5c3RlbT8gKi8KLQlpZiAobmQucGF0aC5tbnQtPm1udF9zYiAhPSBzYikgewotCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJaWYgKHBhdGgubW50LT5tbnRfc2IgIT0gc2IpIHsKKwkJcGF0aF9wdXQoJnBhdGgpOwogCQlyZXR1cm4gLUVYREVWOwogCX0KIAkvKiBKb3VybmFsaW5nIHF1b3RhPyAqLwogCWlmIChFWFQ0X1NCKHNiKS0+c19xZl9uYW1lc1t0eXBlXSkgewogCQkvKiBRdW90YWZpbGUgbm90IGluIGZzIHJvb3Q/ICovCi0JCWlmIChuZC5wYXRoLmRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUgIT0gc2ItPnNfcm9vdC0+ZF9pbm9kZSkKKwkJaWYgKHBhdGguZGVudHJ5LT5kX3BhcmVudCAhPSBzYi0+c19yb290KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSJFWFQ0LWZzOiBRdW90YSBmaWxlIG5vdCBvbiBmaWxlc3lzdGVtIHJvb3QuICIKIAkJCQkiSm91cm5hbGVkIHF1b3RhIHdpbGwgbm90IHdvcmsuXG4iKTsKQEAgLTM0MjUsNyArMzM2MSw3IEBACiAJICogV2hlbiB3ZSBqb3VybmFsIGRhdGEgb24gcXVvdGEgZmlsZSwgd2UgaGF2ZSB0byBmbHVzaCBqb3VybmFsIHRvIHNlZQogCSAqIGFsbCB1cGRhdGVzIHRvIHRoZSBmaWxlIHdoZW4gd2UgYnlwYXNzIHBhZ2VjYWNoZS4uLgogCSAqLwotCWlmIChleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEobmQucGF0aC5kZW50cnktPmRfaW5vZGUpKSB7CisJaWYgKGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShwYXRoLmRlbnRyeS0+ZF9pbm9kZSkpIHsKIAkJLyoKIAkJICogV2UgZG9uJ3QgbmVlZCB0byBsb2NrIHVwZGF0ZXMgYnV0IGpvdXJuYWxfZmx1c2goKSBjb3VsZAogCQkgKiBvdGhlcndpc2UgYmUgbGl2ZWxvY2tlZC4uLgpAQCAtMzQzNCwxMyArMzM3MCwxMyBAQAogCQllcnIgPSBqYmQyX2pvdXJuYWxfZmx1c2goRVhUNF9TQihzYiktPnNfam91cm5hbCk7CiAJCWpiZDJfam91cm5hbF91bmxvY2tfdXBkYXRlcyhFWFQ0X1NCKHNiKS0+c19qb3VybmFsKTsKIAkJaWYgKGVycikgewotCQkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQkJcGF0aF9wdXQoJnBhdGgpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAotCWVyciA9IHZmc19xdW90YV9vbl9wYXRoKHNiLCB0eXBlLCBmb3JtYXRfaWQsICZuZC5wYXRoKTsKLQlwYXRoX3B1dCgmbmQucGF0aCk7CisJZXJyID0gdmZzX3F1b3RhX29uX3BhdGgoc2IsIHR5cGUsIGZvcm1hdF9pZCwgJnBhdGgpOworCXBhdGhfcHV0KCZwYXRoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggY2Q0YTAxNi4uYmFlMWMzMiAxMDA2NDQKLS0tIGEvZnMvZmF0L2Rpci5jCisrKyBiL2ZzL2ZhdC9kaXIuYwpAQCAtODM5LDYgKzgzOSw3IEBACiAJLmNvbXBhdF9pb2N0bAk9IGZhdF9jb21wYXRfZGlyX2lvY3RsLAogI2VuZGlmCiAJLmZzeW5jCQk9IGZpbGVfZnN5bmMsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIGludCBmYXRfZ2V0X3Nob3J0X2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBsb2ZmX3QgKnBvcywKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggZDEyY2RmMi4uMTllYWZiZSAxMDA2NDQKLS0tIGEvZnMvZmF0L2lub2RlLmMKKysrIGIvZnMvZmF0L2lub2RlLmMKQEAgLTY4MSwzMyArNjgxLDI0IEBACiAJCQlpbm9kZSA9IE5VTEw7CiAJCX0KIAl9Ci0JaWYgKCFpbm9kZSkgewotCQkvKiBGb3Igbm93LCBkbyBub3RoaW5nCi0JCSAqIFdoYXQgd2UgY291bGQgZG8gaXM6Ci0JCSAqIGZvbGxvdyB0aGUgZmlsZSBzdGFydGluZyBhdCBmaFs0XSwgYW5kIHJlY29yZAotCQkgKiB0aGUgIi4uIiBlbnRyeSwgYW5kIHRoZSBuYW1lIG9mIHRoZSBmaFsyXSBlbnRyeS4KLQkJICogVGhlIGZvbGxvdyB0aGUgIi4uIiBmaWxlIGZpbmRpbmcgdGhlIG5leHQgc3RlcCB1cC4KLQkJICogVGhpcyB3YXkgd2UgYnVpbGQgYSBwYXRoIHRvIHRoZSByb290IG9mCi0JCSAqIHRoZSB0cmVlLiBJZiB0aGlzIHdvcmtzLCB3ZSBsb29rdXAgdGhlIHBhdGggYW5kIHNvCi0JCSAqIGdldCB0aGlzIGlub2RlIGludG8gdGhlIGNhY2hlLgotCQkgKiBGaW5hbGx5IHRyeSB0aGUgZmF0X2lnZXQgbG9va3VwIGFnYWluCi0JCSAqIElmIHRoYXQgZmFpbHMsIHRoZW4gd2VhcmUgdG90YWxseSBvdXQgb2YgbHVjawotCQkgKiBCdXQgYWxsIHRoYXQgaXMgZm9yIGFub3RoZXIgZGF5Ci0JCSAqLwotCX0KLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKIAotCi0JLyogbm93IHRvIGZpbmQgYSBkZW50cnkuCi0JICogSWYgcG9zc2libGUsIGdldCBhIHdlbGwtY29ubmVjdGVkIG9uZQorCS8qCisJICogRm9yIG5vdywgZG8gbm90aGluZyBpZiB0aGUgaW5vZGUgaXMgbm90IGZvdW5kLgorCSAqCisJICogV2hhdCB3ZSBjb3VsZCBkbyBpczoKKwkgKgorCSAqCS0gZm9sbG93IHRoZSBmaWxlIHN0YXJ0aW5nIGF0IGZoWzRdLCBhbmQgcmVjb3JkIHRoZSAiLi4iIGVudHJ5LAorCSAqCSAgYW5kIHRoZSBuYW1lIG9mIHRoZSBmaFsyXSBlbnRyeS4KKwkgKgktIHRoZW4gZm9sbG93IHRoZSAiLi4iIGZpbGUgZmluZGluZyB0aGUgbmV4dCBzdGVwIHVwLgorCSAqCisJICogVGhpcyB3YXkgd2UgYnVpbGQgYSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB0cmVlLiBJZiB0aGlzIHdvcmtzLCB3ZQorCSAqIGxvb2t1cCB0aGUgcGF0aCBhbmQgc28gZ2V0IHRoaXMgaW5vZGUgaW50byB0aGUgY2FjaGUuICBGaW5hbGx5IHRyeQorCSAqIHRoZSBmYXRfaWdldCBsb29rdXAgYWdhaW4uICBJZiB0aGF0IGZhaWxzLCB0aGVuIHdlIGFyZSB0b3RhbGx5IG91dAorCSAqIG9mIGx1Y2suICBCdXQgYWxsIHRoYXQgaXMgZm9yIGFub3RoZXIgZGF5CiAJICovCi0JcmVzdWx0ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQlpZiAocmVzdWx0ID09IE5VTEwpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlyZXN1bHQtPmRfb3AgPSBzYi0+c19yb290LT5kX29wOworCXJlc3VsdCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKKwlpZiAoIUlTX0VSUihyZXN1bHQpKQorCQlyZXN1bHQtPmRfb3AgPSBzYi0+c19yb290LT5kX29wOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTc1NCwxNSArNzQ1LDggQEAKIAl9CiAJaW5vZGUgPSBmYXRfYnVpbGRfaW5vZGUoc2IsIGRlLCBpX3Bvcyk7CiAJYnJlbHNlKGJoKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQlwYXJlbnQgPSBFUlJfQ0FTVChpbm9kZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlwYXJlbnQgPSBkX2FsbG9jX2Fub24oaW5vZGUpOwotCWlmICghcGFyZW50KSB7Ci0JCWlwdXQoaW5vZGUpOwotCQlwYXJlbnQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KKworCXBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIG91dDoKIAl1bmxvY2tfc3VwZXIoc2IpOwogCmRpZmYgLS1naXQgYS9mcy9maWZvLmMgYi9mcy9maWZvLmMKaW5kZXggOTg3YmY5NC4uZjhmOTdiOCAxMDA2NDQKLS0tIGEvZnMvZmlmby5jCisrKyBiL2ZzL2ZpZm8uYwpAQCAtNTEsNyArNTEsNyBAQAogCWZpbHAtPmZfbW9kZSAmPSAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKIAogCXN3aXRjaCAoZmlscC0+Zl9tb2RlKSB7Ci0JY2FzZSAxOgorCWNhc2UgRk1PREVfUkVBRDoKIAkvKgogCSAqICBPX1JET05MWQogCSAqICBQT1NJWC4xIHNheXMgdGhhdCBPX05PTkJMT0NLIG1lYW5zIHJldHVybiB3aXRoIHRoZSBGSUZPCkBAIC03Niw3ICs3Niw3IEBACiAJCX0KIAkJYnJlYWs7CiAJCi0JY2FzZSAyOgorCWNhc2UgRk1PREVfV1JJVEU6CiAJLyoKIAkgKiAgT19XUk9OTFkKIAkgKiAgUE9TSVguMSBzYXlzIHRoYXQgT19OT05CTE9DSyBtZWFucyByZXR1cm4gLTEgd2l0aApAQCAtOTgsNyArOTgsNyBAQAogCQl9CiAJCWJyZWFrOwogCQotCWNhc2UgMzoKKwljYXNlIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURToKIAkvKgogCSAqICBPX1JEV1IKIAkgKiAgUE9TSVguMSBsZWF2ZXMgdGhpcyBjYXNlICJ1bmRlZmluZWQiIHdoZW4gT19OT05CTE9DSyBpcyBzZXQuCmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggZjQ1YTQ0OS4uZWZjMDZmYSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgKiBjb2RlIHNob3VsZCBiZSBtb3ZlZCBpbnRvIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHN0cnVjdCBmaWxlICphbGxvY19maWxlKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCW1vZGVfdCBtb2RlLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3ApCisJCWZtb2RlX3QgbW9kZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wKQogewogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBwYXRoOwpAQCAtMTkzLDcgKzE5Myw3IEBACiAgKiBvZiB0aGlzIHNob3VsZCBiZSBtb3ZpbmcgdG8gYWxsb2NfZmlsZSgpLgogICovCiBpbnQgaW5pdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSAgIG1vZGVfdCBtb2RlLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3ApCisJICAgZm1vZGVfdCBtb2RlLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3ApCiB7CiAJaW50IGVycm9yID0gMDsKIAlmaWxlLT5mX3BhdGguZGVudHJ5ID0gZGVudHJ5OwpkaWZmIC0tZ2l0IGEvZnMvZmlsZXN5c3RlbXMuYyBiL2ZzL2ZpbGVzeXN0ZW1zLmMKaW5kZXggZjM3Zjg3Mi4uZDBlMjBjZSAxMDA2NDQKLS0tIGEvZnMvZmlsZXN5c3RlbXMuYworKysgYi9mcy9maWxlc3lzdGVtcy5jCkBAIC04LDYgKzgsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjE0LDYgKzIxNiw0MyBAQAogCXJldHVybiBsZW47CiB9CiAKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludCBmaWxlc3lzdGVtc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICogdG1wOworCisJcmVhZF9sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7CisJdG1wID0gZmlsZV9zeXN0ZW1zOworCXdoaWxlICh0bXApIHsKKwkJc2VxX3ByaW50ZihtLCAiJXNcdCVzXG4iLAorCQkJKHRtcC0+ZnNfZmxhZ3MgJiBGU19SRVFVSVJFU19ERVYpID8gIiIgOiAibm9kZXYiLAorCQkJdG1wLT5uYW1lKTsKKwkJdG1wID0gdG1wLT5uZXh0OworCX0KKwlyZWFkX3VubG9jaygmZmlsZV9zeXN0ZW1zX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbGVzeXN0ZW1zX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZmlsZXN5c3RlbXNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZXN5c3RlbXNfcHJvY19mb3BzID0geworCS5vcGVuCQk9IGZpbGVzeXN0ZW1zX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHJvY19maWxlc3lzdGVtc19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoImZpbGVzeXN0ZW1zIiwgMCwgTlVMTCwgJmZpbGVzeXN0ZW1zX3Byb2NfZm9wcyk7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChwcm9jX2ZpbGVzeXN0ZW1zX2luaXQpOworI2VuZGlmCisKIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpnZXRfZnNfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmczsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggMmJhZGE2Yi4uMzQ5MzBhOSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTEwMSw2ICsxMDEsOCBAQAogCQlmaWxlLT5mX29wID0gJmZ1c2VfZGlyZWN0X2lvX2ZpbGVfb3BlcmF0aW9uczsKIAlpZiAoIShvdXRhcmctPm9wZW5fZmxhZ3MgJiBGT1BFTl9LRUVQX0NBQ0hFKSkKIAkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKG91dGFyZy0+b3Blbl9mbGFncyAmIEZPUEVOX05PTlNFRUtBQkxFKQorCQlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIAlmZi0+ZmggPSBvdXRhcmctPmZoOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZ1c2VfZmlsZV9nZXQoZmYpOwogfQpAQCAtMTQ0OCw2ICsxNDUwLDkgQEAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAljYXNlIFNFRUtfRU5EOgorCQlyZXR2YWwgPSBmdXNlX3VwZGF0ZV9hdHRyaWJ1dGVzKGlub2RlLCBOVUxMLCBmaWxlLCBOVUxMKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CiAJCW9mZnNldCArPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgU0VFS19DVVI6CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCAzYTg3NjA3Li4zNWFjY2ZkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTYsNiArNiw5IEBACiAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HLgogKi8KIAorI2lmbmRlZiBfRlNfRlVTRV9JX0gKKyNkZWZpbmUgX0ZTX0ZVU0VfSV9ICisKICNpbmNsdWRlIDxsaW51eC9mdXNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtNjU1LDMgKzY1OCw1IEBACiB2b2lkIGZ1c2VfcmVsZWFzZV9ub3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiB1NjQgZnVzZV9nZXRfYXR0cl92ZXJzaW9uKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKKworI2VuZGlmIC8qIF9GU19GVVNFX0lfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jCmluZGV4IDZhODQzODguLjJlOTlmMzQgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvaW5vZGUuYworKysgYi9mcy9mdXNlL2lub2RlLmMKQEAgLTU5NiwxMiArNTk2LDggQEAKIAlpZiAoaW5vZGUtPmlfZ2VuZXJhdGlvbiAhPSBoYW5kbGUtPmdlbmVyYXRpb24pCiAJCWdvdG8gb3V0X2lwdXQ7CiAKLQllbnRyeSA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JZXJyID0gLUVOT01FTTsKLQlpZiAoIWVudHJ5KQotCQlnb3RvIG91dF9pcHV0OwotCi0JaWYgKGdldF9ub2RlX2lkKGlub2RlKSAhPSBGVVNFX1JPT1RfSUQpIHsKKwllbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKKwlpZiAoIUlTX0VSUihlbnRyeSkgJiYgZ2V0X25vZGVfaWQoaW5vZGUpICE9IEZVU0VfUk9PVF9JRCkgewogCQllbnRyeS0+ZF9vcCA9ICZmdXNlX2RlbnRyeV9vcGVyYXRpb25zOwogCQlmdXNlX2ludmFsaWRhdGVfZW50cnlfY2FjaGUoZW50cnkpOwogCX0KQEAgLTY5NiwxNyArNjkyLDE0IEBACiAJbmFtZS5uYW1lID0gIi4uIjsKIAllcnIgPSBmdXNlX2xvb2t1cF9uYW1lKGNoaWxkX2lub2RlLT5pX3NiLCBnZXRfbm9kZV9pZChjaGlsZF9pbm9kZSksCiAJCQkgICAgICAgJm5hbWUsICZvdXRhcmcsICZpbm9kZSk7Ci0JaWYgKGVyciAmJiBlcnIgIT0gLUVOT0VOVCkKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVOT0VOVCkKKwkJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwotCWlmIChlcnIgfHwgIWlub2RlKQotCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKLQotCXBhcmVudCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFwYXJlbnQpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KLQlpZiAoZ2V0X25vZGVfaWQoaW5vZGUpICE9IEZVU0VfUk9PVF9JRCkgeworCisJcGFyZW50ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOworCWlmICghSVNfRVJSKHBhcmVudCkgJiYgZ2V0X25vZGVfaWQoaW5vZGUpICE9IEZVU0VfUk9PVF9JRCkgewogCQlwYXJlbnQtPmRfb3AgPSAmZnVzZV9kZW50cnlfb3BlcmF0aW9uczsKIAkJZnVzZV9pbnZhbGlkYXRlX2VudHJ5X2NhY2hlKHBhcmVudCk7CiAJfQpAQCAtODY1LDcgKzg1OCw3IEBACiAJaWYgKGlzX2JkZXYpIHsKIAkJZmMtPmRlc3Ryb3lfcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CiAJCWlmICghZmMtPmRlc3Ryb3lfcmVxKQotCQkJZ290byBlcnJfcHV0X3Jvb3Q7CisJCQlnb3RvIGVycl9mcmVlX2luaXRfcmVxOwogCX0KIAogCW11dGV4X2xvY2soJmZ1c2VfbXV0ZXgpOwpAQCAtODk1LDYgKzg4OCw3IEBACiAKICBlcnJfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZnVzZV9tdXRleCk7CisgZXJyX2ZyZWVfaW5pdF9yZXE6CiAJZnVzZV9yZXF1ZXN0X2ZyZWUoaW5pdF9yZXEpOwogIGVycl9wdXRfcm9vdDoKIAlkcHV0KHJvb3RfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2V4cG9ydC5jIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKaW5kZXggOWNkYTg1My4uYmJiOGMzNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKKysrIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKQEAgLTEzMCwyOCArMTMwLDE3IEBACiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogewogCXN0cnVjdCBxc3RyIGRvdGRvdDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAotCWdmczJfc3RyMnFzdHIoJmRvdGRvdCwgIi4uIik7Ci0JaW5vZGUgPSBnZnMyX2xvb2t1cGkoY2hpbGQtPmRfaW5vZGUsICZkb3Rkb3QsIDEpOwotCi0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAJLyoKLQkgKiBJbiBjYXNlIG9mIGFuIGVycm9yLCBAaW5vZGUgY2FycmllcyB0aGUgZXJyb3IgdmFsdWUsIGFuZCB3ZQotCSAqIGhhdmUgdG8gcmV0dXJuIHRoYXQgYXMgYShuIGludmFsaWQpIHBvaW50ZXIgdG8gZGVudHJ5LgorCSAqIFhYWChoY2gpOiBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBrZWVwIHRoaXMgYXJvdW5kIGFzIGEKKwkgKgkgICAgIHN0YXRpYyB2YXJpYWJsZS4KIAkgKi8KLQlpZiAoSVNfRVJSKGlub2RlKSkKLQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwlnZnMyX3N0cjJxc3RyKCZkb3Rkb3QsICIuLiIpOwogCi0JZGVudHJ5ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQlpZiAoIWRlbnRyeSkgewotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JZGVudHJ5LT5kX29wID0gJmdmczJfZG9wczsKKwlkZW50cnkgPSBkX29idGFpbl9hbGlhcyhnZnMyX2xvb2t1cGkoY2hpbGQtPmRfaW5vZGUsICZkb3Rkb3QsIDEpKTsKKwlpZiAoIUlTX0VSUihkZW50cnkpKQorCQlkZW50cnktPmRfb3AgPSAmZ2ZzMl9kb3BzOwogCXJldHVybiBkZW50cnk7CiB9CiAKQEAgLTIzMywxMyArMjIyLDkgQEAKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CiAKIG91dF9pbm9kZToKLQlkZW50cnkgPSBkX2FsbG9jX2Fub24oaW5vZGUpOwotCWlmICghZGVudHJ5KSB7Ci0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0KLQlkZW50cnktPmRfb3AgPSAmZ2ZzMl9kb3BzOworCWRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKKwlpZiAoIUlTX0VSUihkZW50cnkpKQorCQlkZW50cnktPmRfb3AgPSAmZ2ZzMl9kb3BzOwogCXJldHVybiBkZW50cnk7CiAKIGZhaWxfcmdkOgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKaW5kZXggNTM0ZTFlMi4uZDIzMjk5MSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYworKysgYi9mcy9nZnMyL29wc19pbm9kZS5jCkBAIC02OSw3ICs2OSw3IEBACiAJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKFBUUl9FUlIoaW5vZGUpICE9IC1FRVhJU1QgfHwKLQkJCSAgIChuZCAmJiAobmQtPmludGVudC5vcGVuLmZsYWdzICYgT19FWENMKSkpIHsKKwkJCSAgIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfRVhDTCkpIHsKIAkJCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwogCQkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwogCQl9CmRpZmYgLS1naXQgYS9mcy9oZnMvaW5vZGUuYyBiL2ZzL2hmcy9pbm9kZS5jCmluZGV4IDdlMTk4MzUuLmM2OWI3YWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9pbm9kZS5jCisrKyBiL2ZzL2hmcy9pbm9kZS5jCkBAIC01MTEsMTMgKzUxMSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGhmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmIG1hc2sgJiBNQVlfRVhFQykKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7Ci19Ci0KIHN0YXRpYyBpbnQgaGZzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpZiAoSEZTX0lTX1JTUkMoaW5vZGUpKQpAQCAtNjE2LDcgKzYwOSw2IEBACiAJLmxvb2t1cAkJPSBoZnNfZmlsZV9sb29rdXAsCiAJLnRydW5jYXRlCT0gaGZzX2ZpbGVfdHJ1bmNhdGUsCiAJLnNldGF0dHIJPSBoZnNfaW5vZGVfc2V0YXR0ciwKLQkucGVybWlzc2lvbgk9IGhmc19wZXJtaXNzaW9uLAogCS5zZXR4YXR0cgk9IGhmc19zZXR4YXR0ciwKIAkuZ2V0eGF0dHIJPSBoZnNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IGhmc19saXN0eGF0dHIsCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IGZlYzhmNjEuLjAwMjJlZWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0xOTksNiArMTk5LDkgQEAKIAkJZ290byBkb25lOwogCX0KIAorCWlmIChpbm9kZS0+aV9pbm8gPT0gSEZTUExVU19FWFRfQ05JRCkKKwkJcmV0dXJuIC1FSU87CisKIAltdXRleF9sb2NrKCZIRlNQTFVTX0koaW5vZGUpLmV4dGVudHNfbG9jayk7CiAJcmVzID0gaGZzcGx1c19leHRfcmVhZF9leHRlbnQoaW5vZGUsIGFibG9jayk7CiAJaWYgKCFyZXMpIHsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCBiMDg1ZDY0Li5iMjA3ZjBlIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0yMzgsMjIgKzIzOCwxMiBAQAogCXBlcm1zLT5kZXYgPSBjcHVfdG9fYmUzMihIRlNQTFVTX0koaW5vZGUpLmRldik7CiB9CiAKLXN0YXRpYyBpbnQgaGZzcGx1c19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCS8qIE1BWV9FWEVDIGlzIGFsc28gdXNlZCBmb3IgbG9va3VwLCBpZiBubyB4IGJpdCBpcyBzZXQgYWxsb3cgbG9va3VwLAotCSAqIG9wZW5fZXhlYyBoYXMgdGhlIHNhbWUgdGVzdCwgc28gaXQncyBzdGlsbCBub3QgZXhlY3V0YWJsZSwgaWYgYSB4IGJpdAotCSAqIGlzIHNldCBmYWxsIGJhY2sgdG8gc3RhbmRhcmQgcGVybWlzc2lvbiBjaGVjay4KLQkgKi8KLQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiBtYXNrICYgTUFZX0VYRUMgJiYgIShpbm9kZS0+aV9tb2RlICYgMDExMSkpCi0JCXJldHVybiAwOwotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOwotfQotCi0KIHN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiAJCWlub2RlID0gSEZTUExVU19JKGlub2RlKS5yc3JjX2lub2RlOworCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX0xBUkdFRklMRSkgJiYgaV9zaXplX3JlYWQoaW5vZGUpID4gTUFYX05PTl9MRlMpCisJCXJldHVybiAtRU9WRVJGTE9XOwogCWF0b21pY19pbmMoJkhGU1BMVVNfSShpbm9kZSkub3BlbmNudCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzksNyArMjY5LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkubG9va3VwCQk9IGhmc3BsdXNfZmlsZV9sb29rdXAsCiAJLnRydW5jYXRlCT0gaGZzcGx1c19maWxlX3RydW5jYXRlLAotCS5wZXJtaXNzaW9uCT0gaGZzcGx1c19wZXJtaXNzaW9uLAogCS5zZXR4YXR0cgk9IGhmc3BsdXNfc2V0eGF0dHIsCiAJLmdldHhhdHRyCT0gaGZzcGx1c19nZXR4YXR0ciwKIAkubGlzdHhhdHRyCT0gaGZzcGx1c19saXN0eGF0dHIsCmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCmluZGV4IGQ2ZWNhYmYuLjdmMzRmNDMgMTAwNjQ0Ci0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCisrKyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCkBAIC0yMCw3ICsyMCw3IEBACiBzdHJ1Y3QgaG9zdGZzX2lub2RlX2luZm8gewogCWNoYXIgKmhvc3RfZmlsZW5hbWU7CiAJaW50IGZkOwotCWludCBtb2RlOworCWZtb2RlX3QgbW9kZTsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApAQCAtMzczLDcgKzM3Myw4IEBACiBpbnQgaG9zdGZzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJY2hhciAqbmFtZTsKLQlpbnQgbW9kZSA9IDAsIHIgPSAwLCB3ID0gMCwgZmQ7CisJZm1vZGVfdCBtb2RlID0gMDsKKwlpbnQgciA9IDAsIHcgPSAwLCBmZDsKIAogCW1vZGUgPSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKIAlpZiAoKG1vZGUgJiBIT1NURlNfSShpbm8pLT5tb2RlKSA9PSBtb2RlKQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9maWxlLmMgYi9mcy9ocGZzL2ZpbGUuYwppbmRleCBiZThiZTUwLi42NGFiNTIyIDEwMDY0NAotLS0gYS9mcy9ocGZzL2ZpbGUuYworKysgYi9mcy9ocGZzL2ZpbGUuYwpAQCAtMTQzLDUgKzE0Myw1IEBACiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBocGZzX2ZpbGVfaW9wcyA9CiB7CiAJLnRydW5jYXRlCT0gaHBmc190cnVuY2F0ZSwKLQkuc2V0YXR0cgk9IGhwZnNfbm90aWZ5X2NoYW5nZSwKKwkuc2V0YXR0cgk9IGhwZnNfc2V0YXR0ciwKIH07CmRpZmYgLS1naXQgYS9mcy9ocGZzL2hwZnNfZm4uaCBiL2ZzL2hwZnMvaHBmc19mbi5oCmluZGV4IDQyZmY2MGMuLmMyZWEzMWIgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvaHBmc19mbi5oCisrKyBiL2ZzL2hwZnMvaHBmc19mbi5oCkBAIC0yNzUsNyArMjc1LDcgQEAKIHZvaWQgaHBmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIHZvaWQgaHBmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiB2b2lkIGhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqKTsKLWludCBocGZzX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CitpbnQgaHBmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogdm9pZCBocGZzX3dyaXRlX2lmX2NoYW5nZWQoc3RydWN0IGlub2RlICopOwogdm9pZCBocGZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaW5vZGUuYyBiL2ZzL2hwZnMvaW5vZGUuYwppbmRleCA4NWQzZTFkLi4zOWExYmZiIDEwMDY0NAotLS0gYS9mcy9ocGZzL2lub2RlLmMKKysrIGIvZnMvaHBmcy9pbm9kZS5jCkBAIC0yNjAsMTkgKzI2MCwyOCBAQAogCWJyZWxzZShiaCk7CiB9CiAKLWludCBocGZzX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCitpbnQgaHBmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaW50IGVycm9yPTA7CisJaW50IGVycm9yID0gLUVJTlZBTDsKKwogCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJiBhdHRyLT5pYV9zaXplID4gaW5vZGUtPmlfc2l6ZSkgfHwKLQkgICAgIChocGZzX3NiKGlub2RlLT5pX3NiKS0+c2Jfcm9vdCA9PSBpbm9kZS0+aV9pbm8pICkgewotCQllcnJvciA9IC1FSU5WQUw7Ci0JfSBlbHNlIGlmICgoZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpKSkgewotCX0gZWxzZSBpZiAoKGVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cikpKSB7Ci0JfSBlbHNlIHsKLQkJaHBmc193cml0ZV9pbm9kZShpbm9kZSk7Ci0JfQorCWlmIChpbm9kZS0+aV9pbm8gPT0gaHBmc19zYihpbm9kZS0+aV9zYiktPnNiX3Jvb3QpCisJCWdvdG8gb3V0X3VubG9jazsKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJiBhdHRyLT5pYV9zaXplID4gaW5vZGUtPmlfc2l6ZSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfdW5sb2NrOworCisJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWhwZnNfd3JpdGVfaW5vZGUoaW5vZGUpOworCisgb3V0X3VubG9jazoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jCmluZGV4IGQ5YzU5YTcuLjEwNzgzZjMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbmFtZWkuYworKysgYi9mcy9ocGZzL25hbWVpLmMKQEAgLTY2OSw1ICs2NjksNSBAQAogCS5ybWRpcgkJPSBocGZzX3JtZGlyLAogCS5ta25vZAkJPSBocGZzX21rbm9kLAogCS5yZW5hbWUJCT0gaHBmc19yZW5hbWUsCi0JLnNldGF0dHIJPSBocGZzX25vdGlmeV9jaGFuZ2UsCisJLnNldGF0dHIJPSBocGZzX3NldGF0dHIsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvZXhwb3J0LmMgYi9mcy9pc29mcy9leHBvcnQuYwppbmRleCBiYjIxOTEzLi5lODFhMzA1IDEwMDY0NAotLS0gYS9mcy9pc29mcy9leHBvcnQuYworKysgYi9mcy9pc29mcy9leHBvcnQuYwpAQCAtMjIsNyArMjIsNyBAQAogCQkgIF9fdTMyIGdlbmVyYXRpb24pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICpyZXN1bHQ7CisKIAlpZiAoYmxvY2sgPT0gMCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CiAJaW5vZGUgPSBpc29mc19pZ2V0KHNiLCBibG9jaywgb2Zmc2V0KTsKQEAgLTMyLDEyICszMiw3IEBACiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKIAl9Ci0JcmVzdWx0ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQlpZiAoIXJlc3VsdCkgewotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBzdXJwcmlzaW5nbHkgc2ltcGxlLiAgVGhlIHRyaWNrIGlzIHVuZGVyc3RhbmRpbmcKQEAgLTUxLDcgKzQ2LDYgQEAKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9vZmZzZXQgPSAwOwogCXN0cnVjdCBpbm9kZSAqY2hpbGRfaW5vZGUgPSBjaGlsZC0+ZF9pbm9kZTsKIAlzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVfY2hpbGRfaW5vZGUgPSBJU09GU19JKGNoaWxkX2lub2RlKTsKLQlzdHJ1Y3QgaW5vZGUgKnBhcmVudF9pbm9kZSA9IE5VTEw7CiAJc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmggPSBOVUxMOwogCXN0cnVjdCBkZW50cnkgKnJ2ID0gTlVMTDsKQEAgLTEwNCwyOCArOTgsMTEgQEAKIAkvKiBOb3JtYWxpemUgKi8KIAlpc29mc19ub3JtYWxpemVfYmxvY2tfYW5kX29mZnNldChkZSwgJnBhcmVudF9ibG9jaywgJnBhcmVudF9vZmZzZXQpOwogCi0JLyogR2V0IHRoZSBpbm9kZS4gKi8KLQlwYXJlbnRfaW5vZGUgPSBpc29mc19pZ2V0KGNoaWxkX2lub2RlLT5pX3NiLAotCQkJCSAgcGFyZW50X2Jsb2NrLAotCQkJCSAgcGFyZW50X29mZnNldCk7Ci0JaWYgKElTX0VSUihwYXJlbnRfaW5vZGUpKSB7Ci0JCXJ2ID0gRVJSX0NBU1QocGFyZW50X2lub2RlKTsKLQkJaWYgKHJ2ICE9IEVSUl9QVFIoLUVOT01FTSkpCi0JCQlydiA9IEVSUl9QVFIoLUVBQ0NFUyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEFsbG9jYXRlIHRoZSBkZW50cnkuICovCi0JcnYgPSBkX2FsbG9jX2Fub24ocGFyZW50X2lub2RlKTsKLQlpZiAocnYgPT0gTlVMTCkgewotCQlydiA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCWdvdG8gb3V0OwotCX0KLQorCXJ2ID0gZF9vYnRhaW5fYWxpYXMoaXNvZnNfaWdldChjaGlsZF9pbm9kZS0+aV9zYiwgcGFyZW50X2Jsb2NrLAorCQkJCSAgICAgcGFyZW50X29mZnNldCkpOwogIG91dDoKLQlpZiAoYmgpIHsKKwlpZiAoYmgpCiAJCWJyZWxzZShiaCk7Ci0JfQogCXJldHVybiBydjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamJkL0tjb25maWcgYi9mcy9qYmQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTI4YmVlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvamJkL0tjb25maWcKQEAgLTAsMCArMSwzMCBAQAorY29uZmlnIEpCRAorCXRyaXN0YXRlCisJaGVscAorCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMuICBJdCBpcworCSAgY3VycmVudGx5IHVzZWQgYnkgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIGJ1dCBpdCBjb3VsZCBhbHNvIGJlCisJICB1c2VkIHRvIGFkZCBqb3VybmFsIHN1cHBvcnQgdG8gb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIGJsb2NrCisJICBkZXZpY2VzIHN1Y2ggYXMgUkFJRCBvciBMVk0uCisKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUuCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQzIHRoZW4geW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBzYXkgTi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRldmljZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgamJkLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0MyBpbnRvIHRoZSBrZXJuZWwsIHlvdQorCSAgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgorCitjb25maWcgSkJEX0RFQlVHCisJYm9vbCAiSkJEIChleHQzKSBkZWJ1Z2dpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEpCRCAmJiBERUJVR19GUworCWhlbHAKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvciBwb3RlbnRpYWxseSBhbnkKKwkgIG90aGVyIGZpbGUgc3lzdGVtL2RldmljZSB1c2luZyBKQkQpLCB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvCisJICBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIGluIG9yZGVyIHRvCisJICBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLiAgQnkgZGVmYXVsdCB0aGUKKwkgIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgorCisJICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCisJICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIiwgd2hlcmUgTiBpcyBhCisJICBudW1iZXIgYmV0d2VlbiAxIGFuZCA1LCB0aGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGRlYnVnZ2luZworCSAgb3V0cHV0IGlzIGdlbmVyYXRlZC4gIFRvIHR1cm4gZGVidWdnaW5nIG9mZiBhZ2FpbiwgZG8KKwkgICJlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIi4KZGlmZiAtLWdpdCBhL2ZzL2piZC9jaGVja3BvaW50LmMgYi9mcy9qYmQvY2hlY2twb2ludC5jCmluZGV4IGE1NDMyYmIuLjFiZDhkNGEgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9jaGVja3BvaW50LmMKKysrIGIvZnMvamJkL2NoZWNrcG9pbnQuYwpAQCAtOTMsNyArOTMsOCBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBqaDJiaChqaCk7CiAKLQlpZiAoamgtPmJfamxpc3QgPT0gQkpfTm9uZSAmJiAhYnVmZmVyX2xvY2tlZChiaCkgJiYgIWJ1ZmZlcl9kaXJ0eShiaCkpIHsKKwlpZiAoamgtPmJfamxpc3QgPT0gQkpfTm9uZSAmJiAhYnVmZmVyX2xvY2tlZChiaCkgJiYKKwkgICAgIWJ1ZmZlcl9kaXJ0eShiaCkgJiYgIWJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKIAkJSkJVRkZFUl9UUkFDRShqaCwgInJlbW92ZSBmcm9tIGNoZWNrcG9pbnQgbGlzdCIpOwogCQlyZXQgPSBfX2pvdXJuYWxfcmVtb3ZlX2NoZWNrcG9pbnQoamgpICsgMTsKIAkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7CkBAIC0xMjYsMTQgKzEyNywyOSBAQAogCiAJCS8qCiAJCSAqIFRlc3QgYWdhaW4sIGFub3RoZXIgcHJvY2VzcyBtYXkgaGF2ZSBjaGVja3BvaW50ZWQgd2hpbGUgd2UKLQkJICogd2VyZSB3YWl0aW5nIGZvciB0aGUgY2hlY2twb2ludCBsb2NrCisJCSAqIHdlcmUgd2FpdGluZyBmb3IgdGhlIGNoZWNrcG9pbnQgbG9jay4gSWYgdGhlcmUgYXJlIG5vCisJCSAqIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrcG9pbnQgYW5kCisJCSAqIHdlIGNhbid0IG1ha2UgcHJvZ3Jlc3MuIEFib3J0IHRoZSBqb3VybmFsIGluIHRoaXMgY2FzZS4KIAkJICovCiAJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCW5ibG9ja3MgPSBqYmRfc3BhY2VfbmVlZGVkKGpvdXJuYWwpOwogCQlpZiAoX19sb2dfc3BhY2VfbGVmdChqb3VybmFsKSA8IG5ibG9ja3MpIHsKKwkJCWludCBjaGtwdCA9IGpvdXJuYWwtPmpfY2hlY2twb2ludF90cmFuc2FjdGlvbnMgIT0gTlVMTDsKKworCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwotCQkJbG9nX2RvX2NoZWNrcG9pbnQoam91cm5hbCk7CisJCQlpZiAoY2hrcHQpIHsKKwkJCQlsb2dfZG9fY2hlY2twb2ludChqb3VybmFsKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gdHJhbnNhY3Rpb25zXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJam91cm5hbF9hYm9ydChqb3VybmFsLCAwKTsKKwkJCX0KKwogCQkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJfQogCQltdXRleF91bmxvY2soJmpvdXJuYWwtPmpfY2hlY2twb2ludF9tdXRleCk7CiAJfQpAQCAtMTYwLDIxICsxNzYsMjUgQEAKICAqIGJ1ZmZlcnMuIE5vdGUgdGhhdCB3ZSB0YWtlIHRoZSBidWZmZXJzIGluIHRoZSBvcHBvc2l0ZSBvcmRlcmluZwogICogZnJvbSB0aGUgb25lIGluIHdoaWNoIHRoZXkgd2VyZSBzdWJtaXR0ZWQgZm9yIElPLgogICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCByZXR1cm4gPDAgaWYgc29tZSBidWZmZXJzIGhhdmUgZmFpbGVkCisgKiB0byBiZSB3cml0dGVuIG91dC4KKyAqCiAgKiBDYWxsZWQgd2l0aCBqX2xpc3RfbG9jayBoZWxkLgogICovCi1zdGF0aWMgdm9pZCBfX3dhaXRfY3BfaW8oam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbikKK3N0YXRpYyBpbnQgX193YWl0X2NwX2lvKGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24pCiB7CiAJc3RydWN0IGpvdXJuYWxfaGVhZCAqamg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAl0aWRfdCB0aGlzX3RpZDsKIAlpbnQgcmVsZWFzZWQgPSAwOworCWludCByZXQgPSAwOwogCiAJdGhpc190aWQgPSB0cmFuc2FjdGlvbi0+dF90aWQ7CiByZXN0YXJ0OgogCS8qIERpZCBzb21lYm9keSBjbGVhbiB1cCB0aGUgdHJhbnNhY3Rpb24gaW4gdGhlIG1lYW53aGlsZT8gKi8KIAlpZiAoam91cm5hbC0+al9jaGVja3BvaW50X3RyYW5zYWN0aW9ucyAhPSB0cmFuc2FjdGlvbiB8fAogCQkJdHJhbnNhY3Rpb24tPnRfdGlkICE9IHRoaXNfdGlkKQotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAJd2hpbGUgKCFyZWxlYXNlZCAmJiB0cmFuc2FjdGlvbi0+dF9jaGVja3BvaW50X2lvX2xpc3QpIHsKIAkJamggPSB0cmFuc2FjdGlvbi0+dF9jaGVja3BvaW50X2lvX2xpc3Q7CiAJCWJoID0gamgyYmgoamgpOwpAQCAtMTk0LDYgKzIxNCw5IEBACiAJCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQorCQlpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpCisJCQlyZXQgPSAtRUlPOworCiAJCS8qCiAJCSAqIE5vdyBpbiB3aGF0ZXZlciBzdGF0ZSB0aGUgYnVmZmVyIGN1cnJlbnRseSBpcywgd2Uga25vdyB0aGF0CiAJCSAqIGl0IGhhcyBiZWVuIHdyaXR0ZW4gb3V0IGFuZCBzbyB3ZSBjYW4gZHJvcCBpdCBmcm9tIHRoZSBsaXN0CkBAIC0yMDMsNiArMjI2LDggQEAKIAkJam91cm5hbF9yZW1vdmVfam91cm5hbF9oZWFkKGJoKTsKIAkJX19icmVsc2UoYmgpOwogCX0KKworCXJldHVybiByZXQ7CiB9CiAKICNkZWZpbmUgTlJfQkFUQ0gJNjQKQEAgLTIyNiw3ICsyNTEsOCBAQAogICogVHJ5IHRvIGZsdXNoIG9uZSBidWZmZXIgZnJvbSB0aGUgY2hlY2twb2ludCBsaXN0IHRvIGRpc2suCiAgKgogICogUmV0dXJuIDEgaWYgc29tZXRoaW5nIGhhcHBlbmVkIHdoaWNoIHJlcXVpcmVzIHVzIHRvIGFib3J0IHRoZSBjdXJyZW50Ci0gKiBzY2FuIG9mIHRoZSBjaGVja3BvaW50IGxpc3QuCisgKiBzY2FuIG9mIHRoZSBjaGVja3BvaW50IGxpc3QuICBSZXR1cm4gPDAgaWYgdGhlIGJ1ZmZlciBoYXMgZmFpbGVkIHRvCisgKiBiZSB3cml0dGVuIG91dC4KICAqCiAgKiBDYWxsZWQgd2l0aCBqX2xpc3RfbG9jayBoZWxkIGFuZCBkcm9wcyBpdCBpZiAxIGlzIHJldHVybmVkCiAgKiBDYWxsZWQgdW5kZXIgamJkX2xvY2tfYmhfc3RhdGUoamgyYmgoamgpKSwgYW5kIGRyb3BzIGl0CkBAIC0yNTYsNiArMjgyLDkgQEAKIAkJbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJCXJldCA9IDE7CiAJfSBlbHNlIGlmICghYnVmZmVyX2RpcnR5KGJoKSkgeworCQlyZXQgPSAxOworCQlpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpCisJCQlyZXQgPSAtRUlPOwogCQlKX0FTU0VSVF9KSChqaCwgIWJ1ZmZlcl9qYmRkaXJ0eShiaCkpOwogCQlCVUZGRVJfVFJBQ0UoYmgsICJyZW1vdmUgZnJvbSBjaGVja3BvaW50Iik7CiAJCV9fam91cm5hbF9yZW1vdmVfY2hlY2twb2ludChqaCk7CkBAIC0yNjMsNyArMjkyLDYgQEAKIAkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7CiAJCWpvdXJuYWxfcmVtb3ZlX2pvdXJuYWxfaGVhZChiaCk7CiAJCV9fYnJlbHNlKGJoKTsKLQkJcmV0ID0gMTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBJbXBvcnRhbnQ6IHdlIGFyZSBhYm91dCB0byB3cml0ZSB0aGUgYnVmZmVyLCBhbmQKQEAgLTI5NSw2ICszMjMsNyBAQAogICogdG8gZGlzay4gV2Ugc3VibWl0IGxhcmdlciBjaHVua3Mgb2YgZGF0YSBhdCBvbmNlLgogICoKICAqIFRoZSBqb3VybmFsIHNob3VsZCBiZSBsb2NrZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIENhbGxlZCB3aXRoIGpfY2hlY2twb2ludF9tdXRleCBoZWxkLgogICovCiBpbnQgbG9nX2RvX2NoZWNrcG9pbnQoam91cm5hbF90ICpqb3VybmFsKQogewpAQCAtMzE4LDYgKzM0Nyw3IEBACiAJICogT0ssIHdlIG5lZWQgdG8gc3RhcnQgd3JpdGluZyBkaXNrIGJsb2Nrcy4gIFRha2Ugb25lIHRyYW5zYWN0aW9uCiAJICogYW5kIHdyaXRlIGl0LgogCSAqLworCXJlc3VsdCA9IDA7CiAJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJaWYgKCFqb3VybmFsLT5qX2NoZWNrcG9pbnRfdHJhbnNhY3Rpb25zKQogCQlnb3RvIG91dDsKQEAgLTMzNCw3ICszNjQsNyBAQAogCQlpbnQgYmF0Y2hfY291bnQgPSAwOwogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tOUl9CQVRDSF07CiAJCXN0cnVjdCBqb3VybmFsX2hlYWQgKmpoOwotCQlpbnQgcmV0cnkgPSAwOworCQlpbnQgcmV0cnkgPSAwLCBlcnI7CiAKIAkJd2hpbGUgKCFyZXRyeSAmJiB0cmFuc2FjdGlvbi0+dF9jaGVja3BvaW50X2xpc3QpIHsKIAkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0zNDcsNiArMzc3LDggQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJldHJ5ID0gX19wcm9jZXNzX2J1ZmZlcihqb3VybmFsLCBqaCwgYmhzLCZiYXRjaF9jb3VudCk7CisJCQlpZiAocmV0cnkgPCAwICYmICFyZXN1bHQpCisJCQkJcmVzdWx0ID0gcmV0cnk7CiAJCQlpZiAoIXJldHJ5ICYmIChuZWVkX3Jlc2NoZWQoKSB8fAogCQkJCXNwaW5fbmVlZGJyZWFrKCZqb3VybmFsLT5qX2xpc3RfbG9jaykpKSB7CiAJCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKQEAgLTM3MSwxNCArNDAzLDE4IEBACiAJCSAqIE5vdyB3ZSBoYXZlIGNsZWFuZWQgdXAgdGhlIGZpcnN0IHRyYW5zYWN0aW9uJ3MgY2hlY2twb2ludAogCQkgKiBsaXN0LiBMZXQncyBjbGVhbiB1cCB0aGUgc2Vjb25kIG9uZQogCQkgKi8KLQkJX193YWl0X2NwX2lvKGpvdXJuYWwsIHRyYW5zYWN0aW9uKTsKKwkJZXJyID0gX193YWl0X2NwX2lvKGpvdXJuYWwsIHRyYW5zYWN0aW9uKTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXN1bHQgPSBlcnI7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7Ci0JcmVzdWx0ID0gY2xlYW51cF9qb3VybmFsX3RhaWwoam91cm5hbCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIDA7CisJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgcmVzdWx0KTsKKwllbHNlCisJCXJlc3VsdCA9IGNsZWFudXBfam91cm5hbF90YWlsKGpvdXJuYWwpOworCisJcmV0dXJuIChyZXN1bHQgPCAwKSA/IHJlc3VsdCA6IDA7CiB9CiAKIC8qCkBAIC0zOTQsOCArNDMwLDkgQEAKICAqIFRoaXMgaXMgdGhlIG9ubHkgcGFydCBvZiB0aGUgam91cm5hbGluZyBjb2RlIHdoaWNoIHJlYWxseSBuZWVkcyB0byBiZQogICogYXdhcmUgb2YgdHJhbnNhY3Rpb24gYWJvcnRzLiAgQ2hlY2twb2ludGluZyBpbnZvbHZlcyB3cml0aW5nIHRvIHRoZQogICogbWFpbiBmaWxlc3lzdGVtIGFyZWEgcmF0aGVyIHRoYW4gdG8gdGhlIGpvdXJuYWwsIHNvIGl0IGNhbiBwcm9jZWVkCi0gKiBldmVuIGluIGFib3J0IHN0YXRlLCBidXQgd2UgbXVzdCBub3QgdXBkYXRlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaWYKLSAqIHdlIGhhdmUgYW4gYWJvcnQgZXJyb3Igb3V0c3RhbmRpbmcuCisgKiBldmVuIGluIGFib3J0IHN0YXRlLCBidXQgd2UgbXVzdCBub3QgdXBkYXRlIHRoZSBzdXBlciBibG9jayBpZgorICogY2hlY2twb2ludGluZyBtYXkgaGF2ZSBmYWlsZWQuICBPdGhlcndpc2UsIHdlIHdvdWxkIGxvc2Ugc29tZSBtZXRhZGF0YQorICogYnVmZmVycyB3aGljaCBzaG91bGQgYmUgd3JpdHRlbi1iYWNrIHRvIHRoZSBmaWxlc3lzdGVtLgogICovCiAKIGludCBjbGVhbnVwX2pvdXJuYWxfdGFpbChqb3VybmFsX3QgKmpvdXJuYWwpCkBAIC00MDQsNiArNDQxLDkgQEAKIAl0aWRfdAkJZmlyc3RfdGlkOwogCXVuc2lnbmVkIGxvbmcJYmxvY2tuciwgZnJlZWQ7CiAKKwlpZiAoaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKQorCQlyZXR1cm4gMTsKKwogCS8qIE9LLCB3b3JrIG91dCB0aGUgb2xkZXN0IHRyYW5zYWN0aW9uIHJlbWFpbmluZyBpbiB0aGUgbG9nLCBhbmQKIAkgKiB0aGUgbG9nIGJsb2NrIGl0IHN0YXJ0cyBhdC4KIAkgKgpkaWZmIC0tZ2l0IGEvZnMvamJkL2NvbW1pdC5jIGIvZnMvamJkL2NvbW1pdC5jCmluZGV4IGFlMDhjMDUuLjI1NzE5ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9jb21taXQuYworKysgYi9mcy9qYmQvY29tbWl0LmMKQEAgLTQ4Miw2ICs0ODIsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiSkJEOiBEZXRlY3RlZCBJTyBlcnJvcnMgd2hpbGUgZmx1c2hpbmcgZmlsZSBkYXRhICIKIAkJCSJvbiAlc1xuIiwgYmRldm5hbWUoam91cm5hbC0+al9mc19kZXYsIGIpKTsKKwkJaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKRlNfQUJPUlRfT05fU1lOQ0RBVEFfRVJSKQorCQkJam91cm5hbF9hYm9ydChqb3VybmFsLCBlcnIpOwogCQllcnIgPSAwOwogCX0KIApAQCAtNTE4LDkgKzUyMCwxMCBAQAogCQlqaCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9idWZmZXJzOwogCiAJCS8qIElmIHdlJ3JlIGluIGFib3J0IG1vZGUsIHdlIGp1c3QgdW4tam91cm5hbCB0aGUgYnVmZmVyIGFuZAotCQkgICByZWxlYXNlIGl0IGZvciBiYWNrZ3JvdW5kIHdyaXRpbmcuICovCisJCSAgIHJlbGVhc2UgaXQuICovCiAKIAkJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgeworCQkJY2xlYXJfYnVmZmVyX2piZGRpcnR5KGpoMmJoKGpoKSk7CiAJCQlKQlVGRkVSX1RSQUNFKGpoLCAiam91cm5hbCBpcyBhYm9ydGluZzogcmVmaWxlIik7CiAJCQlqb3VybmFsX3JlZmlsZV9idWZmZXIoam91cm5hbCwgamgpOwogCQkJLyogSWYgdGhhdCB3YXMgdGhlIGxhc3Qgb25lLCB3ZSBuZWVkIHRvIGNsZWFuIHVwCkBAIC03NjIsNiArNzY1LDkgQEAKIAkJLyogQUtQTTogYmZvcmdldCBoZXJlICovCiAJfQogCisJaWYgKGVycikKKwkJam91cm5hbF9hYm9ydChqb3VybmFsLCBlcnIpOworCiAJamJkX2RlYnVnKDMsICJKQkQ6IGNvbW1pdCBwaGFzZSA2XG4iKTsKIAogCWlmIChqb3VybmFsX3dyaXRlX2NvbW1pdF9yZWNvcmQoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKSkKQEAgLTg1Miw2ICs4NTgsOCBAQAogCQlpZiAoYnVmZmVyX2piZGRpcnR5KGJoKSkgewogCQkJSkJVRkZFUl9UUkFDRShqaCwgImFkZCB0byBuZXcgY2hlY2twb2ludGluZyB0cmFucyIpOwogCQkJX19qb3VybmFsX2luc2VydF9jaGVja3BvaW50KGpoLCBjb21taXRfdHJhbnNhY3Rpb24pOworCQkJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkKKwkJCQljbGVhcl9idWZmZXJfamJkZGlydHkoYmgpOwogCQkJSkJVRkZFUl9UUkFDRShqaCwgInJlZmlsZSBmb3IgY2hlY2twb2ludCB3cml0ZWJhY2siKTsKIAkJCV9fam91cm5hbF9yZWZpbGVfYnVmZmVyKGpoKTsKIAkJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggYWE3MTQzYS4uOWU0ZmE1MiAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC0xMTIxLDkgKzExMjEsMTIgQEAKICAqCiAgKiBSZWxlYXNlIGEgam91cm5hbF90IHN0cnVjdHVyZSBvbmNlIGl0IGlzIG5vIGxvbmdlciBpbiB1c2UgYnkgdGhlCiAgKiBqb3VybmFsZWQgb2JqZWN0LgorICogUmV0dXJuIDwwIGlmIHdlIGNvdWxkbid0IGNsZWFuIHVwIHRoZSBqb3VybmFsLgogICovCi12b2lkIGpvdXJuYWxfZGVzdHJveShqb3VybmFsX3QgKmpvdXJuYWwpCitpbnQgam91cm5hbF9kZXN0cm95KGpvdXJuYWxfdCAqam91cm5hbCkKIHsKKwlpbnQgZXJyID0gMDsKKwogCS8qIFdhaXQgZm9yIHRoZSBjb21taXQgdGhyZWFkIHRvIHdha2UgdXAgYW5kIGRpZS4gKi8KIAlqb3VybmFsX2tpbGxfdGhyZWFkKGpvdXJuYWwpOwogCkBAIC0xMTQ2LDExICsxMTQ5LDE2IEBACiAJSl9BU1NFUlQoam91cm5hbC0+al9jaGVja3BvaW50X3RyYW5zYWN0aW9ucyA9PSBOVUxMKTsKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCi0JLyogV2UgY2FuIG5vdyBtYXJrIHRoZSBqb3VybmFsIGFzIGVtcHR5LiAqLwotCWpvdXJuYWwtPmpfdGFpbCA9IDA7Ci0Jam91cm5hbC0+al90YWlsX3NlcXVlbmNlID0gKytqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlOwogCWlmIChqb3VybmFsLT5qX3NiX2J1ZmZlcikgewotCQlqb3VybmFsX3VwZGF0ZV9zdXBlcmJsb2NrKGpvdXJuYWwsIDEpOworCQlpZiAoIWlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgeworCQkJLyogV2UgY2FuIG5vdyBtYXJrIHRoZSBqb3VybmFsIGFzIGVtcHR5LiAqLworCQkJam91cm5hbC0+al90YWlsID0gMDsKKwkJCWpvdXJuYWwtPmpfdGFpbF9zZXF1ZW5jZSA9CisJCQkJKytqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlOworCQkJam91cm5hbF91cGRhdGVfc3VwZXJibG9jayhqb3VybmFsLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IC1FSU87CisJCX0KIAkJYnJlbHNlKGpvdXJuYWwtPmpfc2JfYnVmZmVyKTsKIAl9CiAKQEAgLTExNjAsNiArMTE2OCw4IEBACiAJCWpvdXJuYWxfZGVzdHJveV9yZXZva2Uoam91cm5hbCk7CiAJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlrZnJlZShqb3VybmFsKTsKKworCXJldHVybiBlcnI7CiB9CiAKIApAQCAtMTM1OSwxMCArMTM2OSwxNiBAQAogCXNwaW5fbG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCXdoaWxlICghZXJyICYmIGpvdXJuYWwtPmpfY2hlY2twb2ludF90cmFuc2FjdGlvbnMgIT0gTlVMTCkgewogCQlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOworCQltdXRleF9sb2NrKCZqb3VybmFsLT5qX2NoZWNrcG9pbnRfbXV0ZXgpOwogCQllcnIgPSBsb2dfZG9fY2hlY2twb2ludChqb3VybmFsKTsKKwkJbXV0ZXhfdW5sb2NrKCZqb3VybmFsLT5qX2NoZWNrcG9pbnRfbXV0ZXgpOwogCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKKworCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpCisJCXJldHVybiAtRUlPOworCiAJY2xlYW51cF9qb3VybmFsX3RhaWwoam91cm5hbCk7CiAKIAkvKiBGaW5hbGx5LCBtYXJrIHRoZSBqb3VybmFsIGFzIHJlYWxseSBuZWVkaW5nIG5vIHJlY292ZXJ5LgpAQCAtMTM4NCw3ICsxNDAwLDcgQEAKIAlKX0FTU0VSVChqb3VybmFsLT5qX2hlYWQgPT0gam91cm5hbC0+al90YWlsKTsKIAlKX0FTU0VSVChqb3VybmFsLT5qX3RhaWxfc2VxdWVuY2UgPT0gam91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZSk7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9qYmQvcmVjb3ZlcnkuYyBiL2ZzL2piZC9yZWNvdmVyeS5jCmluZGV4IDQzYmM1ZTUuLmRiNWU5ODIgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9yZWNvdmVyeS5jCisrKyBiL2ZzL2piZC9yZWNvdmVyeS5jCkBAIC0yMjMsNyArMjIzLDcgQEAKICAqLwogaW50IGpvdXJuYWxfcmVjb3Zlcihqb3VybmFsX3QgKmpvdXJuYWwpCiB7Ci0JaW50CQkJZXJyOworCWludAkJCWVyciwgZXJyMjsKIAlqb3VybmFsX3N1cGVyYmxvY2tfdCAqCXNiOwogCiAJc3RydWN0IHJlY292ZXJ5X2luZm8JaW5mbzsKQEAgLTI2MSw3ICsyNjEsMTAgQEAKIAlqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlID0gKytpbmZvLmVuZF90cmFuc2FjdGlvbjsKIAogCWpvdXJuYWxfY2xlYXJfcmV2b2tlKGpvdXJuYWwpOwotCXN5bmNfYmxvY2tkZXYoam91cm5hbC0+al9mc19kZXYpOworCWVycjIgPSBzeW5jX2Jsb2NrZGV2KGpvdXJuYWwtPmpfZnNfZGV2KTsKKwlpZiAoIWVycikKKwkJZXJyID0gZXJyMjsKKwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggMDU0MGNhMi4uZDE1Y2Q2ZSAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTk1NCw5ICs5NTQsMTAgQEAKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfam91cm5hbDsKIAlpbnQgbmVlZF9icmVsc2UgPSAwOwogCXN0cnVjdCBqb3VybmFsX2hlYWQgKmpoOworCWludCByZXQgPSAwOwogCiAJaWYgKGlzX2hhbmRsZV9hYm9ydGVkKGhhbmRsZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJamggPSBqb3VybmFsX2FkZF9qb3VybmFsX2hlYWQoYmgpOwogCUpCVUZGRVJfVFJBQ0UoamgsICJlbnRyeSIpOwpAQCAtMTA2Nyw3ICsxMDY4LDE2IEBACiAJCQkJICAgdGltZSBpZiBpdCBpcyByZWRpcnRpZWQgKi8KIAkJCX0KIAotCQkJLyogam91cm5hbF9jbGVhbl9kYXRhX2xpc3QoKSBtYXkgaGF2ZSBnb3QgdGhlcmUgZmlyc3QgKi8KKwkJCS8qCisJCQkgKiBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBidWZmZXIgd2l0aCBpbyBlcnJvciBmcm9tIHRoZQorCQkJICogY29tbWl0dGluZyB0cmFuc2FjdGlvbiwgYmVjYXVzZSBvdGhlcndpc2UgaXQgd291bGQKKwkJCSAqIG1pc3MgdGhlIGVycm9yIGFuZCB0aGUgY29tbWl0IHdvdWxkIG5vdCBhYm9ydC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkgeworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBub19qb3VybmFsOworCQkJfQorCiAJCQlpZiAoamgtPmJfdHJhbnNhY3Rpb24gIT0gTlVMTCkgewogCQkJCUpCVUZGRVJfVFJBQ0UoamgsICJ1bmZpbGUgZnJvbSBjb21taXQiKTsKIAkJCQlfX2pvdXJuYWxfdGVtcF91bmxpbmtfYnVmZmVyKGpoKTsKQEAgLTExMDgsNyArMTExOCw3IEBACiAJfQogCUpCVUZGRVJfVFJBQ0UoamgsICJleGl0Iik7CiAJam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2piZDIvS2NvbmZpZyBiL2ZzL2piZDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJmMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvamJkMi9LY29uZmlnCkBAIC0wLDAgKzEsMzMgQEAKK2NvbmZpZyBKQkQyCisJdHJpc3RhdGUKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsaW5nIGxheWVyIGZvciBibG9jayBkZXZpY2VzIHRoYXQgc3VwcG9ydAorCSAgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBibG9jayBudW1iZXJzLiAgSXQgaXMgY3VycmVudGx5IHVzZWQgYnkKKwkgIHRoZSBleHQ0IGFuZCBPQ0ZTMiBmaWxlc3lzdGVtcywgYnV0IGl0IGNvdWxkIGFsc28gYmUgdXNlZCB0byBhZGQKKwkgIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sgZGV2aWNlcyBzdWNoCisJICBhcyBSQUlEIG9yIExWTS4KKworCSAgSWYgeW91IGFyZSB1c2luZyBleHQ0IG9yIE9DRlMyLCB5b3UgbmVlZCB0byBzYXkgWSBoZXJlLgorCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgZXh0NCBvciBPQ0ZTMiB0aGVuIHlvdSB3aWxsCisJICBwcm9iYWJseSB3YW50IHRvIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBqYmQyLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0NCBvciBPQ0ZTMiBpbnRvIHRoZSBrZXJuZWwsCisJICB5b3UgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgorCitjb25maWcgSkJEMl9ERUJVRworCWJvb2wgIkpCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSkJEMiAmJiBERUJVR19GUworCWhlbHAKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDQgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvcgorCSAgcG90ZW50aWFsbHkgYW55IG90aGVyIGZpbGVzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRDIpLCB0aGlzIG9wdGlvbgorCSAgYWxsb3dzIHlvdSB0byBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsCisJICBpbiBvcmRlciB0byBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLgorCSAgQnkgZGVmYXVsdCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgorCisJICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCisJICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQyL2piZDItZGVidWciLCB3aGVyZSBOIGlzIGEKKwkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCisJICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbworCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIuCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCAwYWJlMDJjLi44YjExOWUxIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTk5NSw2ICs5OTUsOSBAQAogCX0KIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCisJaWYgKGpvdXJuYWwtPmpfY29tbWl0X2NhbGxiYWNrKQorCQlqb3VybmFsLT5qX2NvbW1pdF9jYWxsYmFjayhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOworCiAJdHJhY2VfbWFyayhqYmQyX2VuZF9jb21taXQsICJkZXYgJXMgdHJhbnNhY3Rpb24gJWQgaGVhZCAlZCIsCiAJCSAgIGpvdXJuYWwtPmpfZGV2bmFtZSwgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwKIAkJICAgam91cm5hbC0+al90YWlsX3NlcXVlbmNlKTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCBlNWQ1NDA1Li4zOWI3ODA1IDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC01Miw2ICs1Miw3IEBACiAJdHJhbnNhY3Rpb24tPnRfZXhwaXJlcyA9IGppZmZpZXMgKyBqb3VybmFsLT5qX2NvbW1pdF9pbnRlcnZhbDsKIAlzcGluX2xvY2tfaW5pdCgmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0cmFuc2FjdGlvbi0+dF9pbm9kZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdHJhbnNhY3Rpb24tPnRfcHJpdmF0ZV9saXN0KTsKIAogCS8qIFNldCB1cCB0aGUgY29tbWl0IHRpbWVyIGZvciB0aGUgbmV3IHRyYW5zYWN0aW9uLiAqLwogCWpvdXJuYWwtPmpfY29tbWl0X3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKHRyYW5zYWN0aW9uLT50X2V4cGlyZXMpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvS2NvbmZpZyBiL2ZzL2pmZnMyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMTY5YwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2pmZnMyL0tjb25maWcKQEAgLTAsMCArMSwxODggQEAKK2NvbmZpZyBKRkZTMl9GUworCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSB2MiAoSkZGUzIpIHN1cHBvcnQiCisJc2VsZWN0IENSQzMyCisJZGVwZW5kcyBvbiBNVEQKKwloZWxwCisJICBKRkZTMiBpcyB0aGUgc2Vjb25kIGdlbmVyYXRpb24gb2YgdGhlIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtCisJICBmb3IgdXNlIG9uIGRpc2tsZXNzIGVtYmVkZGVkIGRldmljZXMuIEl0IHByb3ZpZGVzIGltcHJvdmVkIHdlYXIKKwkgIGxldmVsbGluZywgY29tcHJlc3Npb24gYW5kIHN1cHBvcnQgZm9yIGhhcmQgbGlua3MuIFlvdSBjYW5ub3QgdXNlCisJICB0aGlzIG9uIG5vcm1hbCBibG9jayBkZXZpY2VzLCBvbmx5IG9uICdNVEQnIGRldmljZXMuCisKKwkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgSkZGUzIgaXMKKwkgIGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9qZmZzMi8+LgorCitjb25maWcgSkZGUzJfRlNfREVCVUcKKwlpbnQgIkpGRlMyIGRlYnVnZ2luZyB2ZXJib3NpdHkgKDAgPSBxdWlldCwgMiA9IG5vaXN5KSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCAiMCIKKwloZWxwCisJICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHRoZSBKRkZTMgorCSAgY29kZS4gU2V0IGl0IHRvIHplcm8gZm9yIHVzZSBpbiBwcm9kdWN0aW9uIHN5c3RlbXMuIEZvciBldmFsdWF0aW9uLAorCSAgdGVzdGluZyBhbmQgZGVidWdnaW5nLCBpdCdzIGFkdmlzYWJsZSB0byBzZXQgaXQgdG8gb25lLiBUaGlzIHdpbGwKKwkgIGVuYWJsZSBhIGZldyBhc3NlcnRpb25zIGFuZCB3aWxsIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyBhdCB0aGUKKwkgIEtFUk5fREVCVUcgbG9nbGV2ZWwsIHdoZXJlIHRoZXkgd29uJ3Qgbm9ybWFsbHkgYmUgdmlzaWJsZS4gTGV2ZWwgMgorCSAgaXMgdW5saWtlbHkgdG8gYmUgdXNlZnVsIC0gaXQgZW5hYmxlcyBleHRyYSBkZWJ1Z2dpbmcgaW4gY2VydGFpbgorCSAgYXJlYXMgd2hpY2ggYXQgb25lIHBvaW50IG5lZWRlZCBkZWJ1Z2dpbmcsIGJ1dCB3aGVuIHRoZSBidWdzIHdlcmUKKwkgIGxvY2F0ZWQgYW5kIGZpeGVkLCB0aGUgZGV0YWlsZWQgbWVzc2FnZXMgd2VyZSByZWxlZ2F0ZWQgdG8gbGV2ZWwgMi4KKworCSAgSWYgcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2YgdGhlCisJICBtZXNzYWdlcyBhdCBkZWJ1ZyBsZXZlbCAxIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy4KKworY29uZmlnIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCisJYm9vbCAiSkZGUzIgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQgaW4gSkZGUzIuCisKKwkgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEpGRlMyIG9uIHRoZSBmb2xsb3dpbmcKKwkgIHR5cGVzIG9mIGZsYXNoIGRldmljZXM6CisJICAgIC0gTkFORCBmbGFzaAorCSAgICAtIE5PUiBmbGFzaCB3aXRoIHRyYW5zcGFyZW50IEVDQworCSAgICAtIERhdGFGbGFzaAorCitjb25maWcgSkZGUzJfRlNfV0JVRl9WRVJJRlkKKwlib29sICJWZXJpZnkgSkZGUzIgd3JpdGUtYnVmZmVyIHJlYWRzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGNhdXNlcyBKRkZTMiB0byByZWFkIGJhY2sgZXZlcnkgcGFnZSB3cml0dGVuIHRocm91Z2ggdGhlCisJICB3cml0ZS1idWZmZXIsIGFuZCBjaGVjayBmb3IgZXJyb3JzLgorCitjb25maWcgSkZGUzJfU1VNTUFSWQorCWJvb2wgIkpGRlMyIHN1bW1hcnkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc3VtbWFyeSBpbmZvcm1hdGlvbgorCSAgZm9yIGZhc3RlciBmaWxlc3lzdGVtIG1vdW50LgorCisJICBUaGUgc3VtbWFyeSBpbmZvcm1hdGlvbiBjYW4gYmUgaW5zZXJ0ZWQgaW50byBhIGZpbGVzeXN0ZW0gaW1hZ2UKKwkgIGJ5IHRoZSB1dGlsaXR5ICdzdW10b29sJy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCitjb25maWcgSkZGUzJfRlNfWEFUVFIKKwlib29sICJKRkZTMiBYQVRUUiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkpGRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBKRkZTMl9GU19TRUNVUklUWQorCWJvb2wgIkpGRlMyIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGpmZnMyIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlib29sICJBZHZhbmNlZCBjb21wcmVzc2lvbiBvcHRpb25zIGZvciBKRkZTMiIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBleHBsaWNpdGx5IGNob29zZSB3aGljaAorCSAgY29tcHJlc3Npb24gbW9kdWxlcywgaWYgYW55LCBhcmUgZW5hYmxlZCBpbiBKRkZTMi4gUmVtb3ZpbmcKKwkgIGNvbXByZXNzb3JzIGNhbiBtZWFuIHlvdSBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlIHN5c3RlbXMsCisJICBhbmQgZW5hYmxpbmcgZXhwZXJpbWVudGFsIGNvbXByZXNzb3JzIGNhbiBtZWFuIHRoYXQgeW91CisJICB3cml0ZSBhIGZpbGUgc3lzdGVtIHdoaWNoIGNhbm5vdCBiZSByZWFkIGJ5IGEgc3RhbmRhcmQga2VybmVsLgorCisJICBJZiB1bnN1cmUsIHlvdSBzaG91bGQgX2RlZmluaXRlbHlfIHNheSAnTicuCisKK2NvbmZpZyBKRkZTMl9aTElCCisJYm9vbCAiSkZGUzIgWkxJQiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJc2VsZWN0IFpMSUJfSU5GTEFURQorCXNlbGVjdCBaTElCX0RFRkxBVEUKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgWmxpYiBpcyBkZXNpZ25lZCB0byBiZSBhIGZyZWUsIGdlbmVyYWwtcHVycG9zZSwgbGVnYWxseSB1bmVuY3VtYmVyZWQsCisJICBsb3NzbGVzcyBkYXRhLWNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIHVzZSBvbiB2aXJ0dWFsbHkgYW55IGNvbXB1dGVyCisJICBoYXJkd2FyZSBhbmQgb3BlcmF0aW5nIHN5c3RlbS4gU2VlIDxodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvPiBmb3IKKwkgIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisKKwkgIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfTFpPCisJYm9vbCAiSkZGUzIgTFpPIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlzZWxlY3QgTFpPX0NPTVBSRVNTCisJc2VsZWN0IExaT19ERUNPTVBSRVNTCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIG1pbmlsem8tYmFzZWQgY29tcHJlc3Npb24uIEdlbmVyYWxseSB3b3JrcyBiZXR0ZXIgdGhhbiBabGliLgorCisJICBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGluIEp1bHksIDIwMDcuIFNheSAnTicgaWYgeW91IG5lZWQKKwkgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBib290bG9hZGVycyBvciBrZXJuZWxzLgorCitjb25maWcgSkZGUzJfUlRJTUUKKwlib29sICJKRkZTMiBSVElNRSBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFJ0aW1lIGRvZXMgbWFuYWdlIHRvIHJlY29tcHJlc3MgYWxyZWFkeS1jb21wcmVzc2VkIGRhdGEuIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfUlVCSU4KKwlib29sICJKRkZTMiBSVUJJTiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFJVQklOTUlQUyBhbmQgRFlOUlVCSU4gY29tcHJlc3NvcnMuIFNheSAnTicgaWYgdW5zdXJlLgorCitjaG9pY2UKKwlwcm9tcHQgIkpGRlMyIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUworCWRlZmF1bHQgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJaGVscAorCSAgWW91IGNhbiBzZXQgaGVyZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIG9mIEpGRlMyIGZyb20KKwkgIHRoZSBhdmFpbGFibGUgY29tcHJlc3Npb24gbW9kZXMuIERvbid0IHRvdWNoIGlmIHVuc3VyZS4KKworY29uZmlnIEpGRlMyX0NNT0RFX05PTkUKKwlib29sICJubyBjb21wcmVzc2lvbiIKKwloZWxwCisJICBVc2VzIG5vIGNvbXByZXNzaW9uLgorCitjb25maWcgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlib29sICJwcmlvcml0eSIKKwloZWxwCisJICBUcmllcyB0aGUgY29tcHJlc3NvcnMgaW4gYSBwcmVkZWZpbmVkIG9yZGVyIGFuZCBjaG9vc2VzIHRoZSBmaXJzdAorCSAgc3VjY2Vzc2Z1bCBvbmUuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9TSVpFCisJYm9vbCAic2l6ZSAoRVhQRVJJTUVOVEFMKSIKKwloZWxwCisJICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0CisJICByZXN1bHQuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9GQVZPVVJMWk8KKwlib29sICJGYXZvdXIgTFpPIgorCWhlbHAKKwkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKKwkgIHJlc3VsdCBidXQgZ2l2ZXMgc29tZSBwcmVmZXJlbmNlIHRvIExaTyAod2hpY2ggaGFzIGZhc3RlcgorCSAgZGVjb21wcmVzc2lvbikgYXQgdGhlIGV4cGVuc2Ugb2Ygc2l6ZS4KKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wci5jIGIvZnMvamZmczIvY29tcHIuYwppbmRleCA4NjczOWVlLi5mMjVlNzBjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wci5jCisrKyBiL2ZzL2pmZnMyL2NvbXByLmMKQEAgLTUzLDggKzUzLDggQEAKIH0KIAogLyogamZmczJfY29tcHJlc3M6Ci0gKiBAZGF0YTogUG9pbnRlciB0byB1bmNvbXByZXNzZWQgZGF0YQotICogQGNkYXRhOiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKKyAqIEBkYXRhX2luOiBQb2ludGVyIHRvIHVuY29tcHJlc3NlZCBkYXRhCisgKiBAY3BhZ2Vfb3V0OiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKICAqIEBkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZSBmb3IgY29tcHJlc3Npb24uCiAgKglPbiBleGl0LCBleHBlY3RlZCB0byBob2xkIHRoZSBhbW91bnQgb2YgZGF0YSBhY3R1YWxseSBjb21wcmVzc2VkLgogICogQGNkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgZm9yIGNvbXByZXNzZWQKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2Rpci5jIGIvZnMvamZmczIvZGlyLmMKaW5kZXggY2QyMTllZi4uNmY2MGNjOSAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGlyLmMKKysrIGIvZnMvamZmczIvZGlyLmMKQEAgLTM5LDcgKzM5LDggQEAKIAkucmVhZCA9CQlnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyID0JamZmczJfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGw9amZmczJfaW9jdGwsCi0JLmZzeW5jID0JamZmczJfZnN5bmMKKwkuZnN5bmMgPQlqZmZzMl9mc3luYywKKwkubGxzZWVrID0JZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIApAQCAtMTA4LDkgKzEwOSw3IEBACiAJCX0KIAl9CiAKLQlkX2FkZCh0YXJnZXQsIGlub2RlKTsKLQotCXJldHVybiBOVUxMOworCXJldHVybiBkX3NwbGljZV9hbGlhcyhpbm9kZSwgdGFyZ2V0KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzExLDcgKzMxMCw3IEBACiAJLyogRklYTUU6IElmIHlvdSBjYXJlLiBXZSdkIG5lZWQgdG8gdXNlIGZyYWdzIGZvciB0aGUgdGFyZ2V0CiAJICAgaWYgaXQgZ3Jvd3MgbXVjaCBtb3JlIHRoYW4gdGhpcyAqLwogCWlmICh0YXJnZXRsZW4gPiAyNTQpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAogCXJpID0gamZmczJfYWxsb2NfcmF3X2lub2RlKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2VyYXNlLmMgYi9mcy9qZmZzMi9lcmFzZS5jCmluZGV4IGRkZGIyYTYuLjI1OTQ2MWIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2VyYXNlLmMKKysrIGIvZnMvamZmczIvZXJhc2UuYwpAQCAtNjgsNyArNjgsNyBAQAogCWluc3RyLT5sZW4gPSBjLT5zZWN0b3Jfc2l6ZTsKIAlpbnN0ci0+Y2FsbGJhY2sgPSBqZmZzMl9lcmFzZV9jYWxsYmFjazsKIAlpbnN0ci0+cHJpdiA9ICh1bnNpZ25lZCBsb25nKSgmaW5zdHJbMV0pOwotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkoKHN0cnVjdCBlcmFzZV9wcml2X3N0cnVjdCAqKWluc3RyLT5wcml2KS0+amViID0gamViOwogCSgoc3RydWN0IGVyYXNlX3ByaXZfc3RydWN0ICopaW5zdHItPnByaXYpLT5jID0gYzsKQEAgLTE3NSw3ICsxNzUsNyBAQAogewogCS8qIEZvciBOQU5ELCBpZiB0aGUgZmFpbHVyZSBkaWQgbm90IG9jY3VyIGF0IHRoZSBkZXZpY2UgbGV2ZWwgZm9yIGEKIAkgICBzcGVjaWZpYyBwaHlzaWNhbCBwYWdlLCBkb24ndCBib3RoZXIgdXBkYXRpbmcgdGhlIGJhZCBibG9jayB0YWJsZS4gKi8KLQlpZiAoamZmczJfY2xlYW5tYXJrZXJfb29iKGMpICYmIChiYWRfb2Zmc2V0ICE9IDB4ZmZmZmZmZmYpKSB7CisJaWYgKGpmZnMyX2NsZWFubWFya2VyX29vYihjKSAmJiAoYmFkX29mZnNldCAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pKSB7CiAJCS8qIFdlIGhhZCBhIGRldmljZS1sZXZlbCBmYWlsdXJlIHRvIGVyYXNlLiAgTGV0J3Mgc2VlIGlmIHdlJ3ZlCiAJCSAgIGZhaWxlZCB0b28gbWFueSB0aW1lcy4gKi8KIAkJaWYgKCFqZmZzMl93cml0ZV9uYW5kX2JhZGJsb2NrKGMsIGplYiwgYmFkX29mZnNldCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2ZzLmMgYi9mcy9qZmZzMi9mcy5jCmluZGV4IDA4NmM0MzguLjI0OTMwNWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2ZzLmMKKysrIGIvZnMvamZmczIvZnMuYwpAQCAtMjA3LDYgKzIwNyw4IEBACiAJYnVmLT5mX2ZpbGVzID0gMDsKIAlidWYtPmZfZmZyZWUgPSAwOwogCWJ1Zi0+Zl9uYW1lbGVuID0gSkZGUzJfTUFYX05BTUVfTEVOOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9IEpGRlMyX1NVUEVSX01BR0lDOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9IGMtPm10ZC0+aW5kZXg7CiAKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJYXZhaWwgPSBjLT5kaXJ0eV9zaXplICsgYy0+ZnJlZV9zaXplOwpAQCAtNDQwLDE0ICs0NDIsMTQgQEAKIAogCW1lbXNldChyaSwgMCwgc2l6ZW9mKCpyaSkpOwogCS8qIFNldCBPUy1zcGVjaWZpYyBkZWZhdWx0cyBmb3IgbmV3IGlub2RlcyAqLwotCXJpLT51aWQgPSBjcHVfdG9famUxNihjdXJyZW50LT5mc3VpZCk7CisJcmktPnVpZCA9IGNwdV90b19qZTE2KGN1cnJlbnRfZnN1aWQoKSk7CiAKIAlpZiAoZGlyX2ktPmlfbW9kZSAmIFNfSVNHSUQpIHsKIAkJcmktPmdpZCA9IGNwdV90b19qZTE2KGRpcl9pLT5pX2dpZCk7CiAJCWlmIChTX0lTRElSKG1vZGUpKQogCQkJbW9kZSB8PSBTX0lTR0lEOwogCX0gZWxzZSB7Ci0JCXJpLT5naWQgPSBjcHVfdG9famUxNihjdXJyZW50LT5mc2dpZCk7CisJCXJpLT5naWQgPSBjcHVfdG9famUxNihjdXJyZW50X2ZzZ2lkKCkpOwogCX0KIAogCS8qIFBPU0lYIEFDTHMgaGF2ZSB0byBiZSBwcm9jZXNzZWQgbm93LCBhdCBsZWFzdCBwYXJ0bHkuCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9ub2RlbWdtdC5jIGIvZnMvamZmczIvbm9kZW1nbXQuYwppbmRleCBhOWJmOTYwLi4wODc1YjYwIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9ub2RlbWdtdC5jCisrKyBiL2ZzL2pmZnMyL25vZGVtZ210LmMKQEAgLTI2MSw2ICsyNjEsMTAgQEAKIAogCWpmZnMyX3N1bV9yZXNldF9jb2xsZWN0ZWQoYy0+c3VtbWFyeSk7IC8qIHJlc2V0IGNvbGxlY3RlZCBzdW1tYXJ5ICovCiAKKwkvKiBhZGp1c3Qgd3JpdGUgYnVmZmVyIG9mZnNldCwgZWxzZSB3ZSBnZXQgYSBub24gY29udGlndW91cyB3cml0ZSBidWcgKi8KKwlpZiAoIShjLT53YnVmX29mcyAlIGMtPnNlY3Rvcl9zaXplKSAmJiAhYy0+d2J1Zl9sZW4pCisJCWMtPndidWZfb2ZzID0gMHhmZmZmZmZmZjsKKwogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9maW5kX25leHRibG9jaygpOiBuZXcgbmV4dGJsb2NrID0gMHglMDh4XG4iLCBjLT5uZXh0YmxvY2stPm9mZnNldCkpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zdXBlci5jIGIvZnMvamZmczIvc3VwZXIuYwppbmRleCBlZmQ0MDEyLi40YzRlMThjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdXBlci5jCisrKyBiL2ZzL2pmZnMyL3N1cGVyLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvc3VwZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KICNpbmNsdWRlICJjb21wci5oIgogI2luY2x1ZGUgIm5vZGVsaXN0LmgiCiAKQEAgLTYyLDYgKzYzLDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmpmZnMyX25mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdWludDY0X3QgaW5vLAorCQkJCQkgdWludDMyX3QgZ2VuZXJhdGlvbikKK3sKKwkvKiBXZSBkb24ndCBjYXJlIGFib3V0IGlfZ2VuZXJhdGlvbi4gV2UnbGwgZGVzdHJveSB0aGUgZmxhc2gKKwkgICBiZWZvcmUgd2Ugc3RhcnQgcmUtdXNpbmcgaW5vZGUgbnVtYmVycyBhbnl3YXkuIEFuZCBldmVuCisJICAgaWYgdGhhdCB3YXNuJ3QgdHJ1ZSwgd2UnZCBoYXZlIG90aGVyIHByb2JsZW1zLi4uKi8KKwlyZXR1cm4gamZmczJfaWdldChzYiwgaW5vKTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmpmZnMyX2ZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsCisJCQkJCSBpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSkKK3sKKyAgICAgICAgcmV0dXJuIGdlbmVyaWNfZmhfdG9fZGVudHJ5KHNiLCBmaWQsIGZoX2xlbiwgZmhfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmZnMyX25mc19nZXRfaW5vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqamZmczJfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCwKKwkJCQkJIGludCBmaF9sZW4sIGludCBmaF90eXBlKQoreworICAgICAgICByZXR1cm4gZ2VuZXJpY19maF90b19wYXJlbnQoc2IsIGZpZCwgZmhfbGVuLCBmaF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZmczJfbmZzX2dldF9pbm9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZmZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmOworCXVpbnQzMl90IHBpbm87CisKKwlCVUdfT04oIVNfSVNESVIoY2hpbGQtPmRfaW5vZGUtPmlfbW9kZSkpOworCisJZiA9IEpGRlMyX0lOT0RFX0lORk8oY2hpbGQtPmRfaW5vZGUpOworCisJcGlubyA9IGYtPmlub2NhY2hlLT5waW5vX25saW5rOworCisJSkZGUzJfREVCVUcoIlBhcmVudCBvZiBkaXJlY3RvcnkgaW5vICMldSBpcyAjJXVcbiIsCisJCSAgICBmLT5pbm9jYWNoZS0+aW5vLCBwaW5vKTsKKworCXJldHVybiBkX29idGFpbl9hbGlhcyhqZmZzMl9pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCBwaW5vKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgamZmczJfZXhwb3J0X29wcyA9IHsKKwkuZ2V0X3BhcmVudCA9IGpmZnMyX2dldF9wYXJlbnQsCisJLmZoX3RvX2RlbnRyeSA9IGpmZnMyX2ZoX3RvX2RlbnRyeSwKKwkuZmhfdG9fcGFyZW50ID0gamZmczJfZmhfdG9fcGFyZW50LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGpmZnMyX3N1cGVyX29wZXJhdGlvbnMgPQogewogCS5hbGxvY19pbm9kZSA9CWpmZnMyX2FsbG9jX2lub2RlLApAQCAtMTA0LDYgKzE1MSw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmMtPmlub2NhY2hlX2xvY2spOwogCiAJc2ItPnNfb3AgPSAmamZmczJfc3VwZXJfb3BlcmF0aW9uczsKKwlzYi0+c19leHBvcnRfb3AgPSAmamZmczJfZXhwb3J0X29wczsKIAlzYi0+c19mbGFncyA9IHNiLT5zX2ZsYWdzIHwgTVNfTk9BVElNRTsKIAlzYi0+c194YXR0ciA9IGpmZnMyX3hhdHRyX2hhbmRsZXJzOwogI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3didWYuYyBiL2ZzL2pmZnMyL3didWYuYwppbmRleCAwZTc4YjAwLi5kOWE3MjFlIDEwMDY0NAotLS0gYS9mcy9qZmZzMi93YnVmLmMKKysrIGIvZnMvamZmczIvd2J1Zi5jCkBAIC02NzksMTAgKzY3OSw3IEBACiAKIAltZW1zZXQoYy0+d2J1ZiwweGZmLGMtPndidWZfcGFnZXNpemUpOwogCS8qIGFkanVzdCB3cml0ZSBidWZmZXIgb2Zmc2V0LCBlbHNlIHdlIGdldCBhIG5vbiBjb250aWd1b3VzIHdyaXRlIGJ1ZyAqLwotCWlmIChTRUNUT1JfQUREUihjLT53YnVmX29mcykgPT0gU0VDVE9SX0FERFIoYy0+d2J1Zl9vZnMrYy0+d2J1Zl9wYWdlc2l6ZSkpCi0JCWMtPndidWZfb2ZzICs9IGMtPndidWZfcGFnZXNpemU7Ci0JZWxzZQotCQljLT53YnVmX29mcyA9IDB4ZmZmZmZmZmY7CisJYy0+d2J1Zl9vZnMgKz0gYy0+d2J1Zl9wYWdlc2l6ZTsKIAljLT53YnVmX2xlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2xvZ21nci5jIGIvZnMvamZzL2pmc19sb2dtZ3IuYwppbmRleCBjZDJlYzI5Li4zMzVjNGRlIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2xvZ21nci5jCisrKyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmMKQEAgLTExNjgsNyArMTE2OCw3IEBACiAJYmRfcmVsZWFzZShiZGV2KTsKIAogICAgICAgY2xvc2U6CQkvKiBjbG9zZSBleHRlcm5hbCBsb2cgZGV2aWNlICovCi0JYmxrZGV2X3B1dChiZGV2KTsKKwlibGtkZXZfcHV0KGJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOwogCiAgICAgICBmcmVlOgkJLyogZnJlZSBsb2cgZGVzY3JpcHRvciAqLwogCW11dGV4X3VubG9jaygmamZzX2xvZ19tdXRleCk7CkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCXJjID0gbG1Mb2dTaHV0ZG93bihsb2cpOwogCiAJYmRfcmVsZWFzZShiZGV2KTsKLQlibGtkZXZfcHV0KGJkZXYpOworCWJsa2Rldl9wdXQoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiAKIAlrZnJlZShsb2cpOwogCmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jCmluZGV4IDJhYmE4MjMuLmNjM2NlZGYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC0xNTExLDI1ICsxNTExLDEyIEBACiAKIHN0cnVjdCBkZW50cnkgKmpmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX2lub2RlLT5pX3NiOwotCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9pbm87CiAKIAlwYXJlbnRfaW5vID0KIAkJbGUzMl90b19jcHUoSkZTX0lQKGRlbnRyeS0+ZF9pbm9kZSktPmlfZHRyb290LmhlYWRlci5pZG90ZG90KTsKLQlpbm9kZSA9IGpmc19pZ2V0KHNiLCBwYXJlbnRfaW5vKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQlwYXJlbnQgPSBFUlJfQ0FTVChpbm9kZSk7Ci0JfSBlbHNlIHsKLQkJcGFyZW50ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQkJaWYgKCFwYXJlbnQpIHsKLQkJCXBhcmVudCA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCQlpcHV0KGlub2RlKTsKLQkJfQotCX0KIAotCXJldHVybiBwYXJlbnQ7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmc19pZ2V0KGRlbnRyeS0+ZF9pbm9kZS0+aV9zYiwgcGFyZW50X2lubykpOwogfQogCiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CkBAIC0xNTYwLDYgKzE1NDcsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gamZzX2NvbXBhdF9pb2N0bCwKICNlbmRpZgorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBpbnQgamZzX2NpX2hhc2goc3RydWN0IGRlbnRyeSAqZGlyLCBzdHJ1Y3QgcXN0ciAqdGhpcykKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDFhZGQ2NzYuLjc0Njg4NTkgMTAwNjQ0Ci0tLSBhL2ZzL2xpYmZzLmMKKysrIGIvZnMvbGliZnMuYwpAQCAtNzMyLDI4ICs3MzIsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBUaGlzIGlzIHdoYXQgZF9hbGxvY19hbm9uIHNob3VsZCBoYXZlIGJlZW4uICBPbmNlIHRoZSBleHBvcnRmcwotICogYXJndW1lbnQgdHJhbnNpdGlvbiBoYXMgYmVlbiBmaW5pc2hlZCBJIHdpbGwgdXBkYXRlIGRfYWxsb2NfYW5vbgotICogdG8gdGhpcyBwcm90b3R5cGUgYW5kIHRoaXMgd3JhcHBlciB3aWxsIGdvIGF3YXkuICAgLS1oY2gKLSAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4cG9ydGZzX2RfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0KLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoSVNfRVJSKGlub2RlKSkKLQkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihpbm9kZSkpOwotCi0JZGVudHJ5ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQlpZiAoIWRlbnRyeSkgewotCQlpcHV0KGlub2RlKTsKLQkJZGVudHJ5ID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JcmV0dXJuIGRlbnRyeTsKLX0KLQogLyoqCiAgKiBnZW5lcmljX2ZoX3RvX2RlbnRyeSAtIGdlbmVyaWMgaGVscGVyIGZvciB0aGUgZmhfdG9fZGVudHJ5IGV4cG9ydCBvcGVyYXRpb24KICAqIEBzYjoJCWZpbGVzeXN0ZW0gdG8gZG8gdGhlIGZpbGUgaGFuZGxlIGNvbnZlcnNpb24gb24KQEAgLTc4Miw3ICs3NjAsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gZXhwb3J0ZnNfZF9hbGxvYyhpbm9kZSk7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfZmhfdG9fZGVudHJ5KTsKIApAQCAtODE1LDcgKzc5Myw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBleHBvcnRmc19kX2FsbG9jKGlub2RlKTsKKwlyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19maF90b19wYXJlbnQpOwogCmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCA1ZWIyNTllLi4wOTA2MmUzIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTE1ODAsNyArMTU4MCw4IEBACiAJY21kICY9IH5MT0NLX05COwogCXVubG9jayA9IChjbWQgPT0gTE9DS19VTik7CiAKLQlpZiAoIXVubG9jayAmJiAhKGNtZCAmIExPQ0tfTUFORCkgJiYgIShmaWxwLT5mX21vZGUgJiAzKSkKKwlpZiAoIXVubG9jayAmJiAhKGNtZCAmIExPQ0tfTUFORCkgJiYKKwkgICAgIShmaWxwLT5mX21vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpKQogCQlnb3RvIG91dF9wdXRmOwogCiAJZXJyb3IgPSBmbG9ja19tYWtlX2xvY2soZmlscCwgJmxvY2ssIGNtZCk7CkBAIC0yMDc4LDYgKzIwNzksNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwodmZzX2NhbmNlbF9sb2NrKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKIHN0YXRpYyB2b2lkIGxvY2tfZ2V0X3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLApAQCAtMjE4MywxMiArMjE4NSwzMSBAQAogCXVubG9ja19rZXJuZWwoKTsKIH0KIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIGxvY2tzX3NlcV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsb2Nrc19zZXFfb3BlcmF0aW9ucyA9IHsKIAkuc3RhcnQJPSBsb2Nrc19zdGFydCwKIAkubmV4dAk9IGxvY2tzX25leHQsCiAJLnN0b3AJPSBsb2Nrc19zdG9wLAogCS5zaG93CT0gbG9ja3Nfc2hvdywKIH07CisKK3N0YXRpYyBpbnQgbG9ja3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlscCwgJmxvY2tzX3NlcV9vcGVyYXRpb25zKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19sb2Nrc19vcGVyYXRpb25zID0geworCS5vcGVuCQk9IGxvY2tzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2NfbG9ja3NfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJsb2NrcyIsIDAsIE5VTEwsICZwcm9jX2xvY2tzX29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19sb2Nrc19pbml0KTsKICNlbmRpZgogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDRlYTYzZWQuLjA5Y2U1OGUgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMjEyLDggKzIxMiw3IEBACiAJICogUmVhZC93cml0ZSBEQUNzIGFyZSBhbHdheXMgb3ZlcnJpZGFibGUuCiAJICogRXhlY3V0YWJsZSBEQUNzIGFyZSBvdmVycmlkYWJsZSBpZiBhdCBsZWFzdCBvbmUgZXhlYyBiaXQgaXMgc2V0LgogCSAqLwotCWlmICghKG1hc2sgJiBNQVlfRVhFQykgfHwKLQkgICAgKGlub2RlLT5pX21vZGUgJiBTX0lYVUdPKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCWlmICghKG1hc2sgJiBNQVlfRVhFQykgfHwgZXhlY3V0ZV9vayhpbm9kZSkpCiAJCWlmIChjYXBhYmxlKENBUF9EQUNfT1ZFUlJJREUpKQogCQkJcmV0dXJuIDA7CiAKQEAgLTI0OSwyMyArMjQ4LDExIEBACiAJfQogCiAJLyogT3JkaW5hcnkgcGVybWlzc2lvbiByb3V0aW5lcyBkbyBub3QgdW5kZXJzdGFuZCBNQVlfQVBQRU5ELiAqLwotCWlmIChpbm9kZS0+aV9vcCAmJiBpbm9kZS0+aV9vcC0+cGVybWlzc2lvbikgeworCWlmIChpbm9kZS0+aV9vcCAmJiBpbm9kZS0+aV9vcC0+cGVybWlzc2lvbikKIAkJcmV0dmFsID0gaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24oaW5vZGUsIG1hc2spOwotCQlpZiAoIXJldHZhbCkgewotCQkJLyoKLQkJCSAqIEV4ZWMgcGVybWlzc2lvbiBvbiBhIHJlZ3VsYXIgZmlsZSBpcyBkZW5pZWQgaWYgbm9uZQotCQkJICogb2YgdGhlIGV4ZWN1dGUgYml0cyBhcmUgc2V0LgotCQkJICoKLQkJCSAqIFRoaXMgY2hlY2sgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIC0+cGVybWlzc2lvbigpCi0JCQkgKiBtZXRob2QuCi0JCQkgKi8KLQkJCWlmICgobWFzayAmIE1BWV9FWEVDKSAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmCi0JCQkgICAgIShpbm9kZS0+aV9tb2RlICYgU19JWFVHTykpCi0JCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCX0KLQl9IGVsc2UgeworCWVsc2UKIAkJcmV0dmFsID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKLQl9CisKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC0xMTA2LDYgKzEwOTMsMTUgQEAKIAlyZXR1cm4gZG9fcGF0aF9sb29rdXAoQVRfRkRDV0QsIG5hbWUsIGZsYWdzLCBuZCk7CiB9CiAKK2ludCBrZXJuX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCWludCByZXMgPSBkb19wYXRoX2xvb2t1cChBVF9GRENXRCwgbmFtZSwgZmxhZ3MsICZuZCk7CisJaWYgKCFyZXMpCisJCSpwYXRoID0gbmQucGF0aDsKKwlyZXR1cm4gcmVzOworfQorCiAvKioKICAqIHZmc19wYXRoX2xvb2t1cCAtIGxvb2t1cCBhIGZpbGUgcGF0aCByZWxhdGl2ZSB0byBhIGRlbnRyeS12ZnNtb3VudCBwYWlyCiAgKiBAZGVudHJ5OiAgcG9pbnRlciB0byBkZW50cnkgb2YgdGhlIGJhc2UgZGlyZWN0b3J5CkBAIC0xMTM4LDI5ICsxMTM0LDYgQEAKIAogfQogCi1zdGF0aWMgaW50IF9fcGF0aF9sb29rdXBfaW50ZW50X29wZW4oaW50IGRmZCwgY29uc3QgY2hhciAqbmFtZSwKLQkJdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncywgc3RydWN0IG5hbWVpZGF0YSAqbmQsCi0JCWludCBvcGVuX2ZsYWdzLCBpbnQgY3JlYXRlX21vZGUpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbHAgPSBnZXRfZW1wdHlfZmlscCgpOwotCWludCBlcnI7Ci0KLQlpZiAoZmlscCA9PSBOVUxMKQotCQlyZXR1cm4gLUVORklMRTsKLQluZC0+aW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7Ci0JbmQtPmludGVudC5vcGVuLmZsYWdzID0gb3Blbl9mbGFnczsKLQluZC0+aW50ZW50Lm9wZW4uY3JlYXRlX21vZGUgPSBjcmVhdGVfbW9kZTsKLQllcnIgPSBkb19wYXRoX2xvb2t1cChkZmQsIG5hbWUsIGxvb2t1cF9mbGFnc3xMT09LVVBfT1BFTiwgbmQpOwotCWlmIChJU19FUlIobmQtPmludGVudC5vcGVuLmZpbGUpKSB7Ci0JCWlmIChlcnIgPT0gMCkgewotCQkJZXJyID0gUFRSX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSk7Ci0JCQlwYXRoX3B1dCgmbmQtPnBhdGgpOwotCQl9Ci0JfSBlbHNlIGlmIChlcnIgIT0gMCkKLQkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogLyoqCiAgKiBwYXRoX2xvb2t1cF9vcGVuIC0gbG9va3VwIGEgZmlsZSBwYXRoIHdpdGggb3BlbiBpbnRlbnQKICAqIEBkZmQ6IHRoZSBkaXJlY3RvcnkgdG8gdXNlIGFzIGJhc2UsIG9yIEFUX0ZEQ1dECkBAIC0xMTcyLDI1ICsxMTQ1LDIzIEBACiBpbnQgcGF0aF9sb29rdXBfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLAogCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZ3MpCiB7Ci0JcmV0dXJuIF9fcGF0aF9sb29rdXBfaW50ZW50X29wZW4oZGZkLCBuYW1lLCBsb29rdXBfZmxhZ3MsIG5kLAotCQkJb3Blbl9mbGFncywgMCk7Ci19CisJc3RydWN0IGZpbGUgKmZpbHAgPSBnZXRfZW1wdHlfZmlscCgpOworCWludCBlcnI7CiAKLS8qKgotICogcGF0aF9sb29rdXBfY3JlYXRlIC0gbG9va3VwIGEgZmlsZSBwYXRoIHdpdGggb3BlbiArIGNyZWF0ZSBpbnRlbnQKLSAqIEBkZmQ6IHRoZSBkaXJlY3RvcnkgdG8gdXNlIGFzIGJhc2UsIG9yIEFUX0ZEQ1dECi0gKiBAbmFtZTogcG9pbnRlciB0byBmaWxlIG5hbWUKLSAqIEBsb29rdXBfZmxhZ3M6IGxvb2t1cCBpbnRlbnQgZmxhZ3MKLSAqIEBuZDogcG9pbnRlciB0byBuYW1laWRhdGEKLSAqIEBvcGVuX2ZsYWdzOiBvcGVuIGludGVudCBmbGFncwotICogQGNyZWF0ZV9tb2RlOiBjcmVhdGUgaW50ZW50IGZsYWdzCi0gKi8KLXN0YXRpYyBpbnQgcGF0aF9sb29rdXBfY3JlYXRlKGludCBkZmQsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKLQkJCSAgICAgIGludCBvcGVuX2ZsYWdzLCBpbnQgY3JlYXRlX21vZGUpCi17Ci0JcmV0dXJuIF9fcGF0aF9sb29rdXBfaW50ZW50X29wZW4oZGZkLCBuYW1lLCBsb29rdXBfZmxhZ3N8TE9PS1VQX0NSRUFURSwKLQkJCW5kLCBvcGVuX2ZsYWdzLCBjcmVhdGVfbW9kZSk7CisJaWYgKGZpbHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTkZJTEU7CisJbmQtPmludGVudC5vcGVuLmZpbGUgPSBmaWxwOworCW5kLT5pbnRlbnQub3Blbi5mbGFncyA9IG9wZW5fZmxhZ3M7CisJbmQtPmludGVudC5vcGVuLmNyZWF0ZV9tb2RlID0gMDsKKwllcnIgPSBkb19wYXRoX2xvb2t1cChkZmQsIG5hbWUsIGxvb2t1cF9mbGFnc3xMT09LVVBfT1BFTiwgbmQpOworCWlmIChJU19FUlIobmQtPmludGVudC5vcGVuLmZpbGUpKSB7CisJCWlmIChlcnIgPT0gMCkgeworCQkJZXJyID0gUFRSX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSk7CisJCQlwYXRoX3B1dCgmbmQtPnBhdGgpOworCQl9CisJfSBlbHNlIGlmIChlcnIgIT0gMCkKKwkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fbG9va3VwX2hhc2goc3RydWN0IHFzdHIgKm5hbWUsCkBAIC0xNDcwLDIwICsxNDQxLDE4IEBACiAKIAltdXRleF9sb2NrKCZwMS0+ZF9pbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAotCWZvciAocCA9IHAxOyBwLT5kX3BhcmVudCAhPSBwOyBwID0gcC0+ZF9wYXJlbnQpIHsKLQkJaWYgKHAtPmRfcGFyZW50ID09IHAyKSB7Ci0JCQltdXRleF9sb2NrX25lc3RlZCgmcDItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKLQkJCW11dGV4X2xvY2tfbmVzdGVkKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7Ci0JCQlyZXR1cm4gcDsKLQkJfQorCXAgPSBkX2FuY2VzdG9yKHAyLCBwMSk7CisJaWYgKHApIHsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJnAyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CisJCXJldHVybiBwOwogCX0KIAotCWZvciAocCA9IHAyOyBwLT5kX3BhcmVudCAhPSBwOyBwID0gcC0+ZF9wYXJlbnQpIHsKLQkJaWYgKHAtPmRfcGFyZW50ID09IHAxKSB7Ci0JCQltdXRleF9sb2NrX25lc3RlZCgmcDEtPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKLQkJCW11dGV4X2xvY2tfbmVzdGVkKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7Ci0JCQlyZXR1cm4gcDsKLQkJfQorCXAgPSBkX2FuY2VzdG9yKHAxLCBwMik7CisJaWYgKHApIHsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJnAxLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CisJCXJldHVybiBwOwogCX0KIAogCW11dGV4X2xvY2tfbmVzdGVkKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwpAQCAtMTcwMiw4ICsxNjcxLDcgQEAKIAkvKgogCSAqIENyZWF0ZSAtIHdlIG5lZWQgdG8ga25vdyB0aGUgcGFyZW50LgogCSAqLwotCWVycm9yID0gcGF0aF9sb29rdXBfY3JlYXRlKGRmZCwgcGF0aG5hbWUsIExPT0tVUF9QQVJFTlQsCi0JCQkJICAgJm5kLCBmbGFnLCBtb2RlKTsKKwllcnJvciA9IGRvX3BhdGhfbG9va3VwKGRmZCwgcGF0aG5hbWUsIExPT0tVUF9QQVJFTlQsICZuZCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKQEAgLTE3MTQsMTAgKzE2ODIsMjAgQEAKIAkgKi8KIAllcnJvciA9IC1FSVNESVI7CiAJaWYgKG5kLmxhc3RfdHlwZSAhPSBMQVNUX05PUk0gfHwgbmQubGFzdC5uYW1lW25kLmxhc3QubGVuXSkKLQkJZ290byBleGl0OworCQlnb3RvIGV4aXRfcGFyZW50OwogCisJZXJyb3IgPSAtRU5GSUxFOworCWZpbHAgPSBnZXRfZW1wdHlfZmlscCgpOworCWlmIChmaWxwID09IE5VTEwpCisJCWdvdG8gZXhpdF9wYXJlbnQ7CisJbmQuaW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7CisJbmQuaW50ZW50Lm9wZW4uZmxhZ3MgPSBmbGFnOworCW5kLmludGVudC5vcGVuLmNyZWF0ZV9tb2RlID0gbW9kZTsKIAlkaXIgPSBuZC5wYXRoLmRlbnRyeTsKIAluZC5mbGFncyAmPSB+TE9PS1VQX1BBUkVOVDsKKwluZC5mbGFncyB8PSBMT09LVVBfQ1JFQVRFIHwgTE9PS1VQX09QRU47CisJaWYgKGZsYWcgJiBPX0VYQ0wpCisJCW5kLmZsYWdzIHw9IExPT0tVUF9FWENMOwogCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcGF0aC5kZW50cnkgPSBsb29rdXBfaGFzaCgmbmQpOwogCXBhdGgubW50ID0gbmQucGF0aC5tbnQ7CkBAIC0xODIyLDYgKzE4MDAsNyBAQAogZXhpdDoKIAlpZiAoIUlTX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKSkKIAkJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOworZXhpdF9wYXJlbnQ6CiAJcGF0aF9wdXQoJm5kLnBhdGgpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIApAQCAtMTkxNCw3ICsxODkzLDcgQEAKIAlpZiAobmQtPmxhc3RfdHlwZSAhPSBMQVNUX05PUk0pCiAJCWdvdG8gZmFpbDsKIAluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7Ci0JbmQtPmZsYWdzIHw9IExPT0tVUF9DUkVBVEU7CisJbmQtPmZsYWdzIHw9IExPT0tVUF9DUkVBVEUgfCBMT09LVVBfRVhDTDsKIAluZC0+aW50ZW50Lm9wZW4uZmxhZ3MgPSBPX0VYQ0w7CiAKIAkvKgpAQCAtMjE3OCwxNiArMjE1NywxOSBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlzd2l0Y2gobmQubGFzdF90eXBlKSB7Ci0JCWNhc2UgTEFTVF9ET1RET1Q6Ci0JCQllcnJvciA9IC1FTk9URU1QVFk7Ci0JCQlnb3RvIGV4aXQxOwotCQljYXNlIExBU1RfRE9UOgotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJZ290byBleGl0MTsKLQkJY2FzZSBMQVNUX1JPT1Q6Ci0JCQllcnJvciA9IC1FQlVTWTsKLQkJCWdvdG8gZXhpdDE7CisJY2FzZSBMQVNUX0RPVERPVDoKKwkJZXJyb3IgPSAtRU5PVEVNUFRZOworCQlnb3RvIGV4aXQxOworCWNhc2UgTEFTVF9ET1Q6CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBleGl0MTsKKwljYXNlIExBU1RfUk9PVDoKKwkJZXJyb3IgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDE7CiAJfQorCisJbmQuZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CisKIAltdXRleF9sb2NrX25lc3RlZCgmbmQucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKIAlkZW50cnkgPSBsb29rdXBfaGFzaCgmbmQpOwogCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwpAQCAtMjI2NSw2ICsyMjQ3LDkgQEAKIAllcnJvciA9IC1FSVNESVI7CiAJaWYgKG5kLmxhc3RfdHlwZSAhPSBMQVNUX05PUk0pCiAJCWdvdG8gZXhpdDE7CisKKwluZC5mbGFncyAmPSB+TE9PS1VQX1BBUkVOVDsKKwogCW11dGV4X2xvY2tfbmVzdGVkKCZuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CkBAIC0yNjU0LDYgKzI2MzksMTAgQEAKIAlpZiAobmV3bmQubGFzdF90eXBlICE9IExBU1RfTk9STSkKIAkJZ290byBleGl0MjsKIAorCW9sZG5kLmZsYWdzICY9IH5MT09LVVBfUEFSRU5UOworCW5ld25kLmZsYWdzICY9IH5MT09LVVBfUEFSRU5UOworCW5ld25kLmZsYWdzIHw9IExPT0tVUF9SRU5BTUVfVEFSR0VUOworCiAJdHJhcCA9IGxvY2tfcmVuYW1lKG5ld19kaXIsIG9sZF9kaXIpOwogCiAJb2xkX2RlbnRyeSA9IGxvb2t1cF9oYXNoKCZvbGRuZCk7CkBAIC0yODU1LDYgKzI4NDQsNyBAQAogRVhQT1JUX1NZTUJPTChwYWdlX3N5bWxpbmspOwogRVhQT1JUX1NZTUJPTChwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyk7CiBFWFBPUlRfU1lNQk9MKHBhdGhfbG9va3VwKTsKK0VYUE9SVF9TWU1CT0woa2Vybl9wYXRoKTsKIEVYUE9SVF9TWU1CT0wodmZzX3BhdGhfbG9va3VwKTsKIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7CiBFWFBPUlRfU1lNQk9MKHZmc19wZXJtaXNzaW9uKTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggNmUyODNjOS4uY2NlNDY3MCAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTExNjcsMTkgKzExNjcsMTkgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbW91bnRfaXNfc2FmZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0YXRpYyBpbnQgbW91bnRfaXNfc2FmZShzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FUEVSTTsKICNpZmRlZiBub3R5ZXQKLQlpZiAoU19JU0xOSyhuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJaWYgKFNfSVNMTksocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwotCWlmIChuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSAmIFNfSVNWVFgpIHsKLQkJaWYgKGN1cnJlbnQtPnVpZCAhPSBuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUtPmlfdWlkKQorCWlmIChwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSAmIFNfSVNWVFgpIHsKKwkJaWYgKGN1cnJlbnQtPnVpZCAhPSBwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfdWlkKQogCQkJcmV0dXJuIC1FUEVSTTsKIAl9Ci0JaWYgKHZmc19wZXJtaXNzaW9uKG5kLCBNQVlfV1JJVEUpKQorCWlmIChpbm9kZV9wZXJtaXNzaW9uKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSwgTUFZX1dSSVRFKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAlyZXR1cm4gMDsKICNlbmRpZgpAQCAtMTQyNSwxMSArMTQyNSwxMCBAQAogCiAvKgogICogcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtb3VudHBvaW50LgotICogbm9pbmxpbmUgdGhpcyBkb19tb3VudCBoZWxwZXIgdG8gc2F2ZSBkb19tb3VudCBzdGFjayBzcGFjZS4KICAqLwotc3RhdGljIG5vaW5saW5lIGludCBkb19jaGFuZ2VfdHlwZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IGZsYWcpCitzdGF0aWMgaW50IGRvX2NoYW5nZV90eXBlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZykKIHsKLQlzdHJ1Y3QgdmZzbW91bnQgKm0sICptbnQgPSBuZC0+cGF0aC5tbnQ7CisJc3RydWN0IHZmc21vdW50ICptLCAqbW50ID0gcGF0aC0+bW50OwogCWludCByZWN1cnNlID0gZmxhZyAmIE1TX1JFQzsKIAlpbnQgdHlwZSA9IGZsYWcgJiB+TVNfUkVDOwogCWludCBlcnIgPSAwOwpAQCAtMTQzNyw3ICsxNDM2LDcgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAobmQtPnBhdGguZGVudHJ5ICE9IG5kLT5wYXRoLm1udC0+bW50X3Jvb3QpCisJaWYgKHBhdGgtPmRlbnRyeSAhPSBwYXRoLT5tbnQtPm1udF9yb290KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRvd25fd3JpdGUoJm5hbWVzcGFjZV9zZW0pOwpAQCAtMTQ1OSw0MCArMTQ1OCwzOSBAQAogCiAvKgogICogZG8gbG9vcGJhY2sgbW91bnQuCi0gKiBub2lubGluZSB0aGlzIGRvX21vdW50IGhlbHBlciB0byBzYXZlIGRvX21vdW50IHN0YWNrIHNwYWNlLgogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50IGRvX2xvb3BiYWNrKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjaGFyICpvbGRfbmFtZSwKK3N0YXRpYyBpbnQgZG9fbG9vcGJhY2soc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKm9sZF9uYW1lLAogCQkJCWludCByZWN1cnNlKQogewotCXN0cnVjdCBuYW1laWRhdGEgb2xkX25kOworCXN0cnVjdCBwYXRoIG9sZF9wYXRoOwogCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gTlVMTDsKLQlpbnQgZXJyID0gbW91bnRfaXNfc2FmZShuZCk7CisJaW50IGVyciA9IG1vdW50X2lzX3NhZmUocGF0aCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlpZiAoIW9sZF9uYW1lIHx8ICEqb2xkX25hbWUpCiAJCXJldHVybiAtRUlOVkFMOwotCWVyciA9IHBhdGhfbG9va3VwKG9sZF9uYW1lLCBMT09LVVBfRk9MTE9XLCAmb2xkX25kKTsKKwllcnIgPSBrZXJuX3BhdGgob2xkX25hbWUsIExPT0tVUF9GT0xMT1csICZvbGRfcGF0aCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWRvd25fd3JpdGUoJm5hbWVzcGFjZV9zZW0pOwogCWVyciA9IC1FSU5WQUw7Ci0JaWYgKElTX01OVF9VTkJJTkRBQkxFKG9sZF9uZC5wYXRoLm1udCkpCisJaWYgKElTX01OVF9VTkJJTkRBQkxFKG9sZF9wYXRoLm1udCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFjaGVja19tbnQobmQtPnBhdGgubW50KSB8fCAhY2hlY2tfbW50KG9sZF9uZC5wYXRoLm1udCkpCisJaWYgKCFjaGVja19tbnQocGF0aC0+bW50KSB8fCAhY2hlY2tfbW50KG9sZF9wYXRoLm1udCkpCiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVOT01FTTsKIAlpZiAocmVjdXJzZSkKLQkJbW50ID0gY29weV90cmVlKG9sZF9uZC5wYXRoLm1udCwgb2xkX25kLnBhdGguZGVudHJ5LCAwKTsKKwkJbW50ID0gY29weV90cmVlKG9sZF9wYXRoLm1udCwgb2xkX3BhdGguZGVudHJ5LCAwKTsKIAllbHNlCi0JCW1udCA9IGNsb25lX21udChvbGRfbmQucGF0aC5tbnQsIG9sZF9uZC5wYXRoLmRlbnRyeSwgMCk7CisJCW1udCA9IGNsb25lX21udChvbGRfcGF0aC5tbnQsIG9sZF9wYXRoLmRlbnRyeSwgMCk7CiAKIAlpZiAoIW1udCkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBncmFmdF90cmVlKG1udCwgJm5kLT5wYXRoKTsKKwllcnIgPSBncmFmdF90cmVlKG1udCwgcGF0aCk7CiAJaWYgKGVycikgewogCQlMSVNUX0hFQUQodW1vdW50X2xpc3QpOwogCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwpAQCAtMTUwMyw3ICsxNTAxLDcgQEAKIAogb3V0OgogCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKLQlwYXRoX3B1dCgmb2xkX25kLnBhdGgpOworCXBhdGhfcHV0KCZvbGRfcGF0aCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTUyOCwzMyArMTUyNiwzNyBAQAogICogY2hhbmdlIGZpbGVzeXN0ZW0gZmxhZ3MuIGRpciBzaG91bGQgYmUgYSBwaHlzaWNhbCByb290IG9mIGZpbGVzeXN0ZW0uCiAgKiBJZiB5b3UndmUgbW91bnRlZCBhIG5vbi1yb290IGRpcmVjdG9yeSBzb21ld2hlcmUgYW5kIHdhbnQgdG8gZG8gcmVtb3VudAogICogb24gaXQgLSB0b3VnaCBsdWNrLgotICogbm9pbmxpbmUgdGhpcyBkb19tb3VudCBoZWxwZXIgdG8gc2F2ZSBkb19tb3VudCBzdGFjayBzcGFjZS4KICAqLwotc3RhdGljIG5vaW5saW5lIGludCBkb19yZW1vdW50KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MsIGludCBtbnRfZmxhZ3MsCitzdGF0aWMgaW50IGRvX3JlbW91bnQoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgaW50IG1udF9mbGFncywKIAkJICAgICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBuZC0+cGF0aC5tbnQtPm1udF9zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGF0aC0+bW50LT5tbnRfc2I7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoIWNoZWNrX21udChuZC0+cGF0aC5tbnQpKQorCWlmICghY2hlY2tfbW50KHBhdGgtPm1udCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG5kLT5wYXRoLmRlbnRyeSAhPSBuZC0+cGF0aC5tbnQtPm1udF9yb290KQorCWlmIChwYXRoLT5kZW50cnkgIT0gcGF0aC0+bW50LT5tbnRfcm9vdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkb3duX3dyaXRlKCZzYi0+c191bW91bnQpOwogCWlmIChmbGFncyAmIE1TX0JJTkQpCi0JCWVyciA9IGNoYW5nZV9tb3VudF9mbGFncyhuZC0+cGF0aC5tbnQsIGZsYWdzKTsKKwkJZXJyID0gY2hhbmdlX21vdW50X2ZsYWdzKHBhdGgtPm1udCwgZmxhZ3MpOwogCWVsc2UKIAkJZXJyID0gZG9fcmVtb3VudF9zYihzYiwgZmxhZ3MsIGRhdGEsIDApOwogCWlmICghZXJyKQotCQluZC0+cGF0aC5tbnQtPm1udF9mbGFncyA9IG1udF9mbGFnczsKKwkJcGF0aC0+bW50LT5tbnRfZmxhZ3MgPSBtbnRfZmxhZ3M7CiAJdXBfd3JpdGUoJnNiLT5zX3Vtb3VudCk7Ci0JaWYgKCFlcnIpCi0JCXNlY3VyaXR5X3NiX3Bvc3RfcmVtb3VudChuZC0+cGF0aC5tbnQsIGZsYWdzLCBkYXRhKTsKKwlpZiAoIWVycikgeworCQlzZWN1cml0eV9zYl9wb3N0X3JlbW91bnQocGF0aC0+bW50LCBmbGFncywgZGF0YSk7CisKKwkJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJdG91Y2hfbW50X25hbWVzcGFjZShwYXRoLT5tbnQtPm1udF9ucyk7CisJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwl9CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU2OCw5MCArMTU3MCw4NSBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogbm9pbmxpbmUgdGhpcyBkb19tb3VudCBoZWxwZXIgdG8gc2F2ZSBkb19tb3VudCBzdGFjayBzcGFjZS4KLSAqLwotc3RhdGljIG5vaW5saW5lIGludCBkb19tb3ZlX21vdW50KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjaGFyICpvbGRfbmFtZSkKK3N0YXRpYyBpbnQgZG9fbW92ZV9tb3VudChzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqb2xkX25hbWUpCiB7Ci0Jc3RydWN0IG5hbWVpZGF0YSBvbGRfbmQ7Ci0Jc3RydWN0IHBhdGggcGFyZW50X3BhdGg7CisJc3RydWN0IHBhdGggb2xkX3BhdGgsIHBhcmVudF9wYXRoOwogCXN0cnVjdCB2ZnNtb3VudCAqcDsKIAlpbnQgZXJyID0gMDsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAJaWYgKCFvbGRfbmFtZSB8fCAhKm9sZF9uYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKLQllcnIgPSBwYXRoX2xvb2t1cChvbGRfbmFtZSwgTE9PS1VQX0ZPTExPVywgJm9sZF9uZCk7CisJZXJyID0ga2Vybl9wYXRoKG9sZF9uYW1lLCBMT09LVVBfRk9MTE9XLCAmb2xkX3BhdGgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKLQl3aGlsZSAoZF9tb3VudHBvaW50KG5kLT5wYXRoLmRlbnRyeSkgJiYKLQkgICAgICAgZm9sbG93X2Rvd24oJm5kLT5wYXRoLm1udCwgJm5kLT5wYXRoLmRlbnRyeSkpCisJd2hpbGUgKGRfbW91bnRwb2ludChwYXRoLT5kZW50cnkpICYmCisJICAgICAgIGZvbGxvd19kb3duKCZwYXRoLT5tbnQsICZwYXRoLT5kZW50cnkpKQogCQk7CiAJZXJyID0gLUVJTlZBTDsKLQlpZiAoIWNoZWNrX21udChuZC0+cGF0aC5tbnQpIHx8ICFjaGVja19tbnQob2xkX25kLnBhdGgubW50KSkKKwlpZiAoIWNoZWNrX21udChwYXRoLT5tbnQpIHx8ICFjaGVja19tbnQob2xkX3BhdGgubW50KSkKIAkJZ290byBvdXQ7CiAKIAllcnIgPSAtRU5PRU5UOwotCW11dGV4X2xvY2soJm5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JaWYgKElTX0RFQURESVIobmQtPnBhdGguZGVudHJ5LT5kX2lub2RlKSkKKwltdXRleF9sb2NrKCZwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWlmIChJU19ERUFERElSKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpCiAJCWdvdG8gb3V0MTsKIAotCWlmICghSVNfUk9PVChuZC0+cGF0aC5kZW50cnkpICYmIGRfdW5oYXNoZWQobmQtPnBhdGguZGVudHJ5KSkKKwlpZiAoIUlTX1JPT1QocGF0aC0+ZGVudHJ5KSAmJiBkX3VuaGFzaGVkKHBhdGgtPmRlbnRyeSkpCiAJCWdvdG8gb3V0MTsKIAogCWVyciA9IC1FSU5WQUw7Ci0JaWYgKG9sZF9uZC5wYXRoLmRlbnRyeSAhPSBvbGRfbmQucGF0aC5tbnQtPm1udF9yb290KQorCWlmIChvbGRfcGF0aC5kZW50cnkgIT0gb2xkX3BhdGgubW50LT5tbnRfcm9vdCkKIAkJZ290byBvdXQxOwogCi0JaWYgKG9sZF9uZC5wYXRoLm1udCA9PSBvbGRfbmQucGF0aC5tbnQtPm1udF9wYXJlbnQpCisJaWYgKG9sZF9wYXRoLm1udCA9PSBvbGRfcGF0aC5tbnQtPm1udF9wYXJlbnQpCiAJCWdvdG8gb3V0MTsKIAotCWlmIChTX0lTRElSKG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSAhPQotCSAgICAgIFNfSVNESVIob2xkX25kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCWlmIChTX0lTRElSKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSAhPQorCSAgICAgIFNfSVNESVIob2xkX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQlnb3RvIG91dDE7CiAJLyoKIAkgKiBEb24ndCBtb3ZlIGEgbW91bnQgcmVzaWRpbmcgaW4gYSBzaGFyZWQgcGFyZW50LgogCSAqLwotCWlmIChvbGRfbmQucGF0aC5tbnQtPm1udF9wYXJlbnQgJiYKLQkgICAgSVNfTU5UX1NIQVJFRChvbGRfbmQucGF0aC5tbnQtPm1udF9wYXJlbnQpKQorCWlmIChvbGRfcGF0aC5tbnQtPm1udF9wYXJlbnQgJiYKKwkgICAgSVNfTU5UX1NIQVJFRChvbGRfcGF0aC5tbnQtPm1udF9wYXJlbnQpKQogCQlnb3RvIG91dDE7CiAJLyoKIAkgKiBEb24ndCBtb3ZlIGEgbW91bnQgdHJlZSBjb250YWluaW5nIHVuYmluZGFibGUgbW91bnRzIHRvIGEgZGVzdGluYXRpb24KIAkgKiBtb3VudCB3aGljaCBpcyBzaGFyZWQuCiAJICovCi0JaWYgKElTX01OVF9TSEFSRUQobmQtPnBhdGgubW50KSAmJgotCSAgICB0cmVlX2NvbnRhaW5zX3VuYmluZGFibGUob2xkX25kLnBhdGgubW50KSkKKwlpZiAoSVNfTU5UX1NIQVJFRChwYXRoLT5tbnQpICYmCisJICAgIHRyZWVfY29udGFpbnNfdW5iaW5kYWJsZShvbGRfcGF0aC5tbnQpKQogCQlnb3RvIG91dDE7CiAJZXJyID0gLUVMT09QOwotCWZvciAocCA9IG5kLT5wYXRoLm1udDsgcC0+bW50X3BhcmVudCAhPSBwOyBwID0gcC0+bW50X3BhcmVudCkKLQkJaWYgKHAgPT0gb2xkX25kLnBhdGgubW50KQorCWZvciAocCA9IHBhdGgtPm1udDsgcC0+bW50X3BhcmVudCAhPSBwOyBwID0gcC0+bW50X3BhcmVudCkKKwkJaWYgKHAgPT0gb2xkX3BhdGgubW50KQogCQkJZ290byBvdXQxOwogCi0JZXJyID0gYXR0YWNoX3JlY3Vyc2l2ZV9tbnQob2xkX25kLnBhdGgubW50LCAmbmQtPnBhdGgsICZwYXJlbnRfcGF0aCk7CisJZXJyID0gYXR0YWNoX3JlY3Vyc2l2ZV9tbnQob2xkX3BhdGgubW50LCBwYXRoLCAmcGFyZW50X3BhdGgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0MTsKIAogCS8qIGlmIHRoZSBtb3VudCBpcyBtb3ZlZCwgaXQgc2hvdWxkIG5vIGxvbmdlciBiZSBleHBpcmUKIAkgKiBhdXRvbWF0aWNhbGx5ICovCi0JbGlzdF9kZWxfaW5pdCgmb2xkX25kLnBhdGgubW50LT5tbnRfZXhwaXJlKTsKKwlsaXN0X2RlbF9pbml0KCZvbGRfcGF0aC5tbnQtPm1udF9leHBpcmUpOwogb3V0MToKLQltdXRleF91bmxvY2soJm5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgogCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAlpZiAoIWVycikKIAkJcGF0aF9wdXQoJnBhcmVudF9wYXRoKTsKLQlwYXRoX3B1dCgmb2xkX25kLnBhdGgpOworCXBhdGhfcHV0KCZvbGRfcGF0aCk7CiAJcmV0dXJuIGVycjsKIH0KIAogLyoKICAqIGNyZWF0ZSBhIG5ldyBtb3VudCBmb3IgdXNlcnNwYWNlIGFuZCByZXF1ZXN0IGl0IHRvIGJlIGFkZGVkIGludG8gdGhlCiAgKiBuYW1lc3BhY2UncyB0cmVlCi0gKiBub2lubGluZSB0aGlzIGRvX21vdW50IGhlbHBlciB0byBzYXZlIGRvX21vdW50IHN0YWNrIHNwYWNlLgogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50IGRvX25ld19tb3VudChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY2hhciAqdHlwZSwgaW50IGZsYWdzLAorc3RhdGljIGludCBkb19uZXdfbW91bnQoc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKnR5cGUsIGludCBmbGFncywKIAkJCWludCBtbnRfZmxhZ3MsIGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHZmc21vdW50ICptbnQ7CkBAIC0xNjY3LDcgKzE2NjQsNyBAQAogCWlmIChJU19FUlIobW50KSkKIAkJcmV0dXJuIFBUUl9FUlIobW50KTsKIAotCXJldHVybiBkb19hZGRfbW91bnQobW50LCAmbmQtPnBhdGgsIG1udF9mbGFncywgTlVMTCk7CisJcmV0dXJuIGRvX2FkZF9tb3VudChtbnQsIHBhdGgsIG1udF9mbGFncywgTlVMTCk7CiB9CiAKIC8qCkBAIC0xOTAyLDcgKzE4OTksNyBAQAogbG9uZyBkb19tb3VudChjaGFyICpkZXZfbmFtZSwgY2hhciAqZGlyX25hbWUsIGNoYXIgKnR5cGVfcGFnZSwKIAkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpkYXRhX3BhZ2UpCiB7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCWludCByZXR2YWwgPSAwOwogCWludCBtbnRfZmxhZ3MgPSAwOwogCkBAIC0xOTQwLDI5ICsxOTM3LDI5IEBACiAJCSAgIE1TX05PQVRJTUUgfCBNU19OT0RJUkFUSU1FIHwgTVNfUkVMQVRJTUV8IE1TX0tFUk5NT1VOVCk7CiAKIAkvKiAuLi4gYW5kIGdldCB0aGUgbW91bnRwb2ludCAqLwotCXJldHZhbCA9IHBhdGhfbG9va3VwKGRpcl9uYW1lLCBMT09LVVBfRk9MTE9XLCAmbmQpOworCXJldHZhbCA9IGtlcm5fcGF0aChkaXJfbmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR2YWwgPSBzZWN1cml0eV9zYl9tb3VudChkZXZfbmFtZSwgJm5kLnBhdGgsCisJcmV0dmFsID0gc2VjdXJpdHlfc2JfbW91bnQoZGV2X25hbWUsICZwYXRoLAogCQkJCSAgIHR5cGVfcGFnZSwgZmxhZ3MsIGRhdGFfcGFnZSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBkcHV0X291dDsKIAogCWlmIChmbGFncyAmIE1TX1JFTU9VTlQpCi0JCXJldHZhbCA9IGRvX3JlbW91bnQoJm5kLCBmbGFncyAmIH5NU19SRU1PVU5ULCBtbnRfZmxhZ3MsCisJCXJldHZhbCA9IGRvX3JlbW91bnQoJnBhdGgsIGZsYWdzICYgfk1TX1JFTU9VTlQsIG1udF9mbGFncywKIAkJCQkgICAgZGF0YV9wYWdlKTsKIAllbHNlIGlmIChmbGFncyAmIE1TX0JJTkQpCi0JCXJldHZhbCA9IGRvX2xvb3BiYWNrKCZuZCwgZGV2X25hbWUsIGZsYWdzICYgTVNfUkVDKTsKKwkJcmV0dmFsID0gZG9fbG9vcGJhY2soJnBhdGgsIGRldl9uYW1lLCBmbGFncyAmIE1TX1JFQyk7CiAJZWxzZSBpZiAoZmxhZ3MgJiAoTVNfU0hBUkVEIHwgTVNfUFJJVkFURSB8IE1TX1NMQVZFIHwgTVNfVU5CSU5EQUJMRSkpCi0JCXJldHZhbCA9IGRvX2NoYW5nZV90eXBlKCZuZCwgZmxhZ3MpOworCQlyZXR2YWwgPSBkb19jaGFuZ2VfdHlwZSgmcGF0aCwgZmxhZ3MpOwogCWVsc2UgaWYgKGZsYWdzICYgTVNfTU9WRSkKLQkJcmV0dmFsID0gZG9fbW92ZV9tb3VudCgmbmQsIGRldl9uYW1lKTsKKwkJcmV0dmFsID0gZG9fbW92ZV9tb3VudCgmcGF0aCwgZGV2X25hbWUpOwogCWVsc2UKLQkJcmV0dmFsID0gZG9fbmV3X21vdW50KCZuZCwgdHlwZV9wYWdlLCBmbGFncywgbW50X2ZsYWdzLAorCQlyZXR2YWwgPSBkb19uZXdfbW91bnQoJnBhdGgsIHR5cGVfcGFnZSwgZmxhZ3MsIG1udF9mbGFncywKIAkJCQkgICAgICBkZXZfbmFtZSwgZGF0YV9wYWdlKTsKIGRwdXRfb3V0OgotCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCA2YTA5NzYwLi5jMmU5Y2ZkIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtNDAsNiArNDAsMTYgQEAKIHN0YXRpYyBjb25zdCBpbnQgbmZzX3NldF9wb3J0X21pbiA9IDA7CiBzdGF0aWMgY29uc3QgaW50IG5mc19zZXRfcG9ydF9tYXggPSA2NTUzNTsKIAorLyoKKyAqIElmIHRoZSBrZXJuZWwgaGFzIElQdjYgc3VwcG9ydCBhdmFpbGFibGUsIGFsd2F5cyBsaXN0ZW4gZm9yCisgKiBib3RoIEFGX0lORVQgYW5kIEFGX0lORVQ2IHJlcXVlc3RzLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCitzdGF0aWMgY29uc3Qgc2FfZmFtaWx5X3QJbmZzX2NhbGxiYWNrX2ZhbWlseSA9IEFGX0lORVQ2OworI2Vsc2UKK3N0YXRpYyBjb25zdCBzYV9mYW1pbHlfdAluZnNfY2FsbGJhY2tfZmFtaWx5ID0gQUZfSU5FVDsKKyNlbmRpZgorCiBzdGF0aWMgaW50IHBhcmFtX3NldF9wb3J0KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CiAJY2hhciAqZW5kcDsKQEAgLTEwNiw3ICsxMTYsNyBAQAogCWlmIChuZnNfY2FsbGJhY2tfaW5mby51c2VycysrIHx8IG5mc19jYWxsYmFja19pbmZvLnRhc2sgIT0gTlVMTCkKIAkJZ290byBvdXQ7CiAJc2VydiA9IHN2Y19jcmVhdGUoJm5mczRfY2FsbGJhY2tfcHJvZ3JhbSwgTkZTNF9DQUxMQkFDS19CVUZTSVpFLAotCQkJCUFGX0lORVQsIE5VTEwpOworCQkJCW5mc19jYWxsYmFja19mYW1pbHksIE5VTEwpOwogCXJldCA9IC1FTk9NRU07CiAJaWYgKCFzZXJ2KQogCQlnb3RvIG91dF9lcnI7CkBAIC0xMTYsNyArMTI2LDggQEAKIAlpZiAocmV0IDw9IDApCiAJCWdvdG8gb3V0X2VycjsKIAluZnNfY2FsbGJhY2tfdGNwcG9ydCA9IHJldDsKLQlkcHJpbnRrKCJDYWxsYmFjayBwb3J0ID0gMHgleFxuIiwgbmZzX2NhbGxiYWNrX3RjcHBvcnQpOworCWRwcmludGsoIk5GUzogQ2FsbGJhY2sgbGlzdGVuZXIgcG9ydCA9ICV1IChhZiAldSlcbiIsCisJCQluZnNfY2FsbGJhY2tfdGNwcG9ydCwgbmZzX2NhbGxiYWNrX2ZhbWlseSk7CiAKIAluZnNfY2FsbGJhY2tfaW5mby5ycXN0ID0gc3ZjX3ByZXBhcmVfdGhyZWFkKHNlcnYsICZzZXJ2LT5zdl9wb29sc1swXSk7CiAJaWYgKElTX0VSUihuZnNfY2FsbGJhY2tfaW5mby5ycXN0KSkgewpAQCAtMTQ5LDggKzE2MCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogCXJldHVybiByZXQ7CiBvdXRfZXJyOgotCWRwcmludGsoIkNvdWxkbid0IGNyZWF0ZSBjYWxsYmFjayBzb2NrZXQgb3Igc2VydmVyIHRocmVhZDsgZXJyID0gJWRcbiIsCi0JCXJldCk7CisJZHByaW50aygiTkZTOiBDb3VsZG4ndCBjcmVhdGUgY2FsbGJhY2sgc29ja2V0IG9yIHNlcnZlciB0aHJlYWQ7ICIKKwkJImVyciA9ICVkXG4iLCByZXQpOwogCW5mc19jYWxsYmFja19pbmZvLnVzZXJzLS07CiAJZ290byBvdXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggMmFiNzBkNC4uM2U2NGI5OCAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtNzA3LDkgKzcwNyw3IEBACiB7CiAJaWYgKE5GU19QUk9UTyhkaXIpLT52ZXJzaW9uID09IDIpCiAJCXJldHVybiAwOwotCWlmIChuZCA9PSBOVUxMIHx8IG5mc19sb29rdXBfY2hlY2tfaW50ZW50KG5kLCBMT09LVVBfQ1JFQVRFKSA9PSAwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gKG5kLT5pbnRlbnQub3Blbi5mbGFncyAmIE9fRVhDTCkgIT0gMDsKKwlyZXR1cm4gbmQgJiYgbmZzX2xvb2t1cF9jaGVja19pbnRlbnQobmQsIExPT0tVUF9FWENMKTsKIH0KIAogLyoKQEAgLTEwMDksNyArMTAwNyw3IEBACiAKIAkvKiBMZXQgdmZzX2NyZWF0ZSgpIGRlYWwgd2l0aCBPX0VYQ0wuIEluc3RhbnRpYXRlLCBidXQgZG9uJ3QgaGFzaAogCSAqIHRoZSBkZW50cnkuICovCi0JaWYgKG5kLT5pbnRlbnQub3Blbi5mbGFncyAmIE9fRVhDTCkgeworCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfRVhDTCkgewogCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgTlVMTCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE1MTcsNyArMTUxNSw3IEBACiAJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZywgMCwKIAkJCQkJCQlHRlBfS0VSTkVMKSkgewogCQlwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpOwotCQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9IGVsc2UKQEAgLTE5NTksNiArMTk1Nyw5IEBACiAJfSBlbHNlCiAJCXJlcyA9IFBUUl9FUlIoY3JlZCk7CiBvdXQ6CisJaWYgKCFyZXMgJiYgKG1hc2sgJiBNQVlfRVhFQykgJiYgIWV4ZWN1dGVfb2soaW5vZGUpKQorCQlyZXMgPSAtRUFDQ0VTOworCiAJZGZwcmludGsoVkZTLCAiTkZTOiBwZXJtaXNzaW9uKCVzLyVsZCksIG1hc2s9MHgleCwgcmVzPSVkXG4iLAogCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vLCBtYXNrLCByZXMpOwogCXJldHVybiByZXM7CmRpZmYgLS1naXQgYS9mcy9uZnMvZ2V0cm9vdC5jIGIvZnMvbmZzL2dldHJvb3QuYwppbmRleCBmYWU5NzE5Li5iN2M5YjJkIDEwMDY0NAotLS0gYS9mcy9uZnMvZ2V0cm9vdC5jCisrKyBiL2ZzL25mcy9nZXRyb290LmMKQEAgLTEwNywxMSArMTA3LDEwIEBACiAJICogaWYgdGhlIGRlbnRyeSB0cmVlIHJlYWNoZXMgdGhlbTsgaG93ZXZlciBpZiB0aGUgZGVudHJ5IGFscmVhZHkKIAkgKiBleGlzdHMsIHdlJ2xsIHBpY2sgaXQgdXAgYXQgdGhpcyBwb2ludCBhbmQgdXNlIGl0IGFzIHRoZSByb290CiAJICovCi0JbW50cm9vdCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFtbnRyb290KSB7Ci0JCWlwdXQoaW5vZGUpOworCW1udHJvb3QgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7CisJaWYgKElTX0VSUihtbnRyb290KSkgewogCQlkcHJpbnRrKCJuZnNfZ2V0X3Jvb3Q6IGdldCByb290IGRlbnRyeSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIG1udHJvb3Q7CiAJfQogCiAJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShtbnRyb290LCBpbm9kZSk7CkBAIC0yNzcsMTEgKzI3NiwxMCBAQAogCSAqIGlmIHRoZSBkZW50cnkgdHJlZSByZWFjaGVzIHRoZW07IGhvd2V2ZXIgaWYgdGhlIGRlbnRyeSBhbHJlYWR5CiAJICogZXhpc3RzLCB3ZSdsbCBwaWNrIGl0IHVwIGF0IHRoaXMgcG9pbnQgYW5kIHVzZSBpdCBhcyB0aGUgcm9vdAogCSAqLwotCW1udHJvb3QgPSBkX2FsbG9jX2Fub24oaW5vZGUpOwotCWlmICghbW50cm9vdCkgewotCQlpcHV0KGlub2RlKTsKKwltbnRyb290ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOworCWlmIChJU19FUlIobW50cm9vdCkpIHsKIAkJZHByaW50aygibmZzX2dldF9yb290OiBnZXQgcm9vdCBkZW50cnkgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiBtbnRyb290OwogCX0KIAogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUobW50cm9vdCwgaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCBjOTEwNDEzLi44M2U3MDBhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMTY1OSw4ICsxNjU5LDEwIEBACiAJCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHg7CiAKIAkJY3R4ID0gbmZzX2ZpbGVfb3Blbl9jb250ZXh0KHNhdHRyLT5pYV9maWxlKTsKLQkJY3JlZCA9IGN0eC0+Y3JlZDsKLQkJc3RhdGUgPSBjdHgtPnN0YXRlOworCQlpZiAoY3R4KSB7CisJCQljcmVkID0gY3R4LT5jcmVkOworCQkJc3RhdGUgPSBjdHgtPnN0YXRlOworCQl9CiAJfQogCiAJc3RhdHVzID0gbmZzNF9kb19zZXRhdHRyKGlub2RlLCBjcmVkLCBmYXR0ciwgc2F0dHIsIHN0YXRlKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggOGIyOGI5NS4uYTNiMDA2MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTI0NTksNyArMjQ1OSw3IEBACiAJCWNvbXBhcmVfc3VwZXIgPSBOVUxMOwogCiAJLyogR2V0IGEgc3VwZXJibG9jayAtIG5vdGUgdGhhdCB3ZSBtYXkgZW5kIHVwIHNoYXJpbmcgb25lIHRoYXQgYWxyZWFkeSBleGlzdHMgKi8KLQlzID0gc2dldCgmbmZzX2ZzX3R5cGUsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsKKwlzID0gc2dldCgmbmZzNF9mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CiAJaWYgKElTX0VSUihzKSkgewogCQllcnJvciA9IFBUUl9FUlIocyk7CiAJCWdvdG8gb3V0X2Vycl9ub3NiOwpAQCAtMjU0NCw3ICsyNTQ0LDcgQEAKIAkJY29tcGFyZV9zdXBlciA9IE5VTEw7CiAKIAkvKiBHZXQgYSBzdXBlcmJsb2NrIC0gbm90ZSB0aGF0IHdlIG1heSBlbmQgdXAgc2hhcmluZyBvbmUgdGhhdCBhbHJlYWR5IGV4aXN0cyAqLwotCXMgPSBzZ2V0KCZuZnNfZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOworCXMgPSBzZ2V0KCZuZnM0X2ZzX3R5cGUsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsKIAlpZiAoSVNfRVJSKHMpKSB7CiAJCWVycm9yID0gUFRSX0VSUihzKTsKIAkJZ290byBvdXRfZXJyX25vc2I7CmRpZmYgLS1naXQgYS9mcy9uZnNkL2V4cG9ydC5jIGIvZnMvbmZzZC9leHBvcnQuYwppbmRleCA5ZGMwMzZmLi41ODM5YjIyIDEwMDY0NAotLS0gYS9mcy9uZnNkL2V4cG9ydC5jCisrKyBiL2ZzL25mc2QvZXhwb3J0LmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlpbnQgZnNpZHR5cGU7CiAJY2hhciAqZXA7CiAJc3RydWN0IHN2Y19leHBrZXkga2V5OwotCXN0cnVjdCBzdmNfZXhwa2V5ICplazsKKwlzdHJ1Y3Qgc3ZjX2V4cGtleSAqZWsgPSBOVUxMOwogCiAJaWYgKG1lc2dbbWxlbi0xXSAhPSAnXG4nKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwNyw3ICsxMDcsOCBAQAogCiAJYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFidWYpIGdvdG8gb3V0OworCWlmICghYnVmKQorCQlnb3RvIG91dDsKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKChsZW49cXdvcmRfZ2V0KCZtZXNnLCBidWYsIFBBR0VfU0laRSkpIDw9IDApCkBAIC0xNTEsMzQgKzE1MiwzMiBAQAogCiAJLyogbm93IHdlIHdhbnQgYSBwYXRobmFtZSwgb3IgZW1wdHkgbWVhbmluZyBORUdBVElWRSAgKi8KIAllcnIgPSAtRUlOVkFMOwotCWlmICgobGVuPXF3b3JkX2dldCgmbWVzZywgYnVmLCBQQUdFX1NJWkUpKSA8IDApCisJbGVuID0gcXdvcmRfZ2V0KCZtZXNnLCBidWYsIFBBR0VfU0laRSk7CisJaWYgKGxlbiA8IDApCiAJCWdvdG8gb3V0OwogCWRwcmludGsoIlBhdGggc2VlbXMgdG8gYmUgPCVzPlxuIiwgYnVmKTsKIAllcnIgPSAwOwogCWlmIChsZW4gPT0gMCkgewogCQlzZXRfYml0KENBQ0hFX05FR0FUSVZFLCAma2V5LmguZmxhZ3MpOwogCQllayA9IHN2Y19leHBrZXlfdXBkYXRlKCZrZXksIGVrKTsKLQkJaWYgKGVrKQotCQkJY2FjaGVfcHV0KCZlay0+aCwgJnN2Y19leHBrZXlfY2FjaGUpOwotCQllbHNlIGVyciA9IC1FTk9NRU07CisJCWlmICghZWspCisJCQllcnIgPSAtRU5PTUVNOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0JCWVyciA9IHBhdGhfbG9va3VwKGJ1ZiwgMCwgJm5kKTsKKwkJZXJyID0ga2Vybl9wYXRoKGJ1ZiwgMCwgJmtleS5la19wYXRoKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCiAJCWRwcmludGsoIkZvdW5kIHRoZSBwYXRoICVzXG4iLCBidWYpOwotCQlrZXkuZWtfcGF0aCA9IG5kLnBhdGg7CiAKIAkJZWsgPSBzdmNfZXhwa2V5X3VwZGF0ZSgma2V5LCBlayk7Ci0JCWlmIChlaykKLQkJCWNhY2hlX3B1dCgmZWstPmgsICZzdmNfZXhwa2V5X2NhY2hlKTsKLQkJZWxzZQorCQlpZiAoIWVrKQogCQkJZXJyID0gLUVOT01FTTsKLQkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQlwYXRoX3B1dCgma2V5LmVrX3BhdGgpOwogCX0KIAljYWNoZV9mbHVzaCgpOwogIG91dDoKKwlpZiAoZWspCisJCWNhY2hlX3B1dCgmZWstPmgsICZzdmNfZXhwa2V5X2NhY2hlKTsKIAlpZiAoZG9tKQogCQlhdXRoX2RvbWFpbl9wdXQoZG9tKTsKIAlrZnJlZShidWYpOwpAQCAtNTAwLDM1ICs0OTksMjIgQEAKIAlpbnQgbGVuOwogCWludCBlcnI7CiAJc3RydWN0IGF1dGhfZG9tYWluICpkb20gPSBOVUxMOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0Jc3RydWN0IHN2Y19leHBvcnQgZXhwLCAqZXhwcDsKKwlzdHJ1Y3Qgc3ZjX2V4cG9ydCBleHAgPSB7fSwgKmV4cHA7CiAJaW50IGFuX2ludDsKIAotCW5kLnBhdGguZGVudHJ5ID0gTlVMTDsKLQlleHAuZXhfcGF0aG5hbWUgPSBOVUxMOwotCi0JLyogZnMgbG9jYXRpb25zICovCi0JZXhwLmV4X2ZzbG9jcy5sb2NhdGlvbnMgPSBOVUxMOwotCWV4cC5leF9mc2xvY3MubG9jYXRpb25zX2NvdW50ID0gMDsKLQlleHAuZXhfZnNsb2NzLm1pZ3JhdGVkID0gMDsKLQotCWV4cC5leF91dWlkID0gTlVMTDsKLQotCS8qIHNlY2luZm8gKi8KLQlleHAuZXhfbmZsYXZvcnMgPSAwOwotCiAJaWYgKG1lc2dbbWxlbi0xXSAhPSAnXG4nKQogCQlyZXR1cm4gLUVJTlZBTDsKIAltZXNnW21sZW4tMV0gPSAwOwogCiAJYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFidWYpIGdvdG8gb3V0OworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGNsaWVudCAqLwotCWxlbiA9IHF3b3JkX2dldCgmbWVzZywgYnVmLCBQQUdFX1NJWkUpOwogCWVyciA9IC1FSU5WQUw7Ci0JaWYgKGxlbiA8PSAwKSBnb3RvIG91dDsKKwlsZW4gPSBxd29yZF9nZXQoJm1lc2csIGJ1ZiwgUEFHRV9TSVpFKTsKKwlpZiAobGVuIDw9IDApCisJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVOT0VOVDsKIAlkb20gPSBhdXRoX2RvbWFpbl9maW5kKGJ1Zik7CkBAIC01MzcsMjUgKzUyMywyNSBAQAogCiAJLyogcGF0aCAqLwogCWVyciA9IC1FSU5WQUw7Ci0JaWYgKChsZW49cXdvcmRfZ2V0KCZtZXNnLCBidWYsIFBBR0VfU0laRSkpIDw9IDApCi0JCWdvdG8gb3V0OwotCWVyciA9IHBhdGhfbG9va3VwKGJ1ZiwgMCwgJm5kKTsKLQlpZiAoZXJyKSBnb3RvIG91dF9ub19wYXRoOworCWlmICgobGVuID0gcXdvcmRfZ2V0KCZtZXNnLCBidWYsIFBBR0VfU0laRSkpIDw9IDApCisJCWdvdG8gb3V0MTsKIAotCWV4cC5oLmZsYWdzID0gMDsKKwllcnIgPSBrZXJuX3BhdGgoYnVmLCAwLCAmZXhwLmV4X3BhdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0MTsKKwogCWV4cC5leF9jbGllbnQgPSBkb207Ci0JZXhwLmV4X3BhdGgubW50ID0gbmQucGF0aC5tbnQ7Ci0JZXhwLmV4X3BhdGguZGVudHJ5ID0gbmQucGF0aC5kZW50cnk7Ci0JZXhwLmV4X3BhdGhuYW1lID0ga3N0cmR1cChidWYsIEdGUF9LRVJORUwpOworCiAJZXJyID0gLUVOT01FTTsKKwlleHAuZXhfcGF0aG5hbWUgPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFleHAuZXhfcGF0aG5hbWUpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dDI7CiAKIAkvKiBleHBpcnkgKi8KIAllcnIgPSAtRUlOVkFMOwogCWV4cC5oLmV4cGlyeV90aW1lID0gZ2V0X2V4cGlyeSgmbWVzZyk7CiAJaWYgKGV4cC5oLmV4cGlyeV90aW1lID09IDApCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dDM7CiAKIAkvKiBmbGFncyAqLwogCWVyciA9IGdldF9pbnQoJm1lc2csICZhbl9pbnQpOwpAQCAtNTYzLDIyICs1NDksMjYgQEAKIAkJZXJyID0gMDsKIAkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJmV4cC5oLmZsYWdzKTsKIAl9IGVsc2UgewotCQlpZiAoZXJyIHx8IGFuX2ludCA8IDApIGdvdG8gb3V0OwkKKwkJaWYgKGVyciB8fCBhbl9pbnQgPCAwKQorCQkJZ290byBvdXQzOwogCQlleHAuZXhfZmxhZ3M9IGFuX2ludDsKIAkKIAkJLyogYW5vbiB1aWQgKi8KIAkJZXJyID0gZ2V0X2ludCgmbWVzZywgJmFuX2ludCk7Ci0JCWlmIChlcnIpIGdvdG8gb3V0OworCQlpZiAoZXJyKQorCQkJZ290byBvdXQzOwogCQlleHAuZXhfYW5vbl91aWQ9IGFuX2ludDsKIAogCQkvKiBhbm9uIGdpZCAqLwogCQllcnIgPSBnZXRfaW50KCZtZXNnLCAmYW5faW50KTsKLQkJaWYgKGVycikgZ290byBvdXQ7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDM7CiAJCWV4cC5leF9hbm9uX2dpZD0gYW5faW50OwogCiAJCS8qIGZzaWQgKi8KIAkJZXJyID0gZ2V0X2ludCgmbWVzZywgJmFuX2ludCk7Ci0JCWlmIChlcnIpIGdvdG8gb3V0OworCQlpZiAoZXJyKQorCQkJZ290byBvdXQzOwogCQlleHAuZXhfZnNpZCA9IGFuX2ludDsKIAogCQl3aGlsZSAoKGxlbiA9IHF3b3JkX2dldCgmbWVzZywgYnVmLCBQQUdFX1NJWkUpKSA+IDApIHsKQEAgLTYwNCwxMiArNTk0LDEzIEBACiAJCQkJICovCiAJCQkJYnJlYWs7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gb3V0OworCQkJCWdvdG8gb3V0NDsKIAkJfQogCi0JCWVyciA9IGNoZWNrX2V4cG9ydChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZXhwLmV4X2ZsYWdzLAorCQllcnIgPSBjaGVja19leHBvcnQoZXhwLmV4X3BhdGguZGVudHJ5LT5kX2lub2RlLCBleHAuZXhfZmxhZ3MsCiAJCQkJICAgZXhwLmV4X3V1aWQpOwotCQlpZiAoZXJyKSBnb3RvIG91dDsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0NDsKIAl9CiAKIAlleHBwID0gc3ZjX2V4cG9ydF9sb29rdXAoJmV4cCk7CkBAIC02MjIsMTUgKzYxMywxNiBAQAogCQllcnIgPSAtRU5PTUVNOwogCWVsc2UKIAkJZXhwX3B1dChleHBwKTsKLSBvdXQ6CitvdXQ0OgogCW5mc2Q0X2ZzbG9jc19mcmVlKCZleHAuZXhfZnNsb2NzKTsKIAlrZnJlZShleHAuZXhfdXVpZCk7CitvdXQzOgogCWtmcmVlKGV4cC5leF9wYXRobmFtZSk7Ci0JaWYgKG5kLnBhdGguZGVudHJ5KQotCQlwYXRoX3B1dCgmbmQucGF0aCk7Ci0gb3V0X25vX3BhdGg6Ci0JaWYgKGRvbSkKLQkJYXV0aF9kb21haW5fcHV0KGRvbSk7CitvdXQyOgorCXBhdGhfcHV0KCZleHAuZXhfcGF0aCk7CitvdXQxOgorCWF1dGhfZG9tYWluX3B1dChkb20pOworb3V0OgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTk5OCw3ICs5OTAsNyBAQAogCXN0cnVjdCBzdmNfZXhwb3J0CSpleHAgPSBOVUxMOwogCXN0cnVjdCBzdmNfZXhwb3J0CW5ldzsKIAlzdHJ1Y3Qgc3ZjX2V4cGtleQkqZnNpZF9rZXkgPSBOVUxMOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IHBhdGggcGF0aDsKIAlpbnQJCWVycjsKIAogCS8qIENvbnNpc3RlbmN5IGNoZWNrICovCkBAIC0xMDIxLDEyICsxMDEzLDEyIEBACiAKIAogCS8qIExvb2sgdXAgdGhlIGRlbnRyeSAqLwotCWVyciA9IHBhdGhfbG9va3VwKG54cC0+ZXhfcGF0aCwgMCwgJm5kKTsKKwllcnIgPSBrZXJuX3BhdGgobnhwLT5leF9wYXRoLCAwLCAmcGF0aCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcHV0X2NscDsKIAllcnIgPSAtRUlOVkFMOwogCi0JZXhwID0gZXhwX2dldF9ieV9uYW1lKGNscCwgbmQucGF0aC5tbnQsIG5kLnBhdGguZGVudHJ5LCBOVUxMKTsKKwlleHAgPSBleHBfZ2V0X2J5X25hbWUoY2xwLCBwYXRoLm1udCwgcGF0aC5kZW50cnksIE5VTEwpOwogCiAJbWVtc2V0KCZuZXcsIDAsIHNpemVvZihuZXcpKTsKIApAQCAtMTAzNCw4ICsxMDI2LDggQEAKIAlpZiAoKG54cC0+ZXhfZmxhZ3MgJiBORlNFWFBfRlNJRCkgJiYKIAkgICAgKCFJU19FUlIoZnNpZF9rZXkgPSBleHBfZ2V0X2ZzaWRfa2V5KGNscCwgbnhwLT5leF9kZXYpKSkgJiYKIAkgICAgZnNpZF9rZXktPmVrX3BhdGgubW50ICYmCi0JICAgIChmc2lkX2tleS0+ZWtfcGF0aC5tbnQgIT0gbmQucGF0aC5tbnQgfHwKLQkgICAgIGZzaWRfa2V5LT5la19wYXRoLmRlbnRyeSAhPSBuZC5wYXRoLmRlbnRyeSkpCisJICAgIChmc2lkX2tleS0+ZWtfcGF0aC5tbnQgIT0gcGF0aC5tbnQgfHwKKwkgICAgIGZzaWRfa2V5LT5la19wYXRoLmRlbnRyeSAhPSBwYXRoLmRlbnRyeSkpCiAJCWdvdG8gZmluaXNoOwogCiAJaWYgKCFJU19FUlIoZXhwKSkgewpAQCAtMTA1MSw3ICsxMDQzLDcgQEAKIAkJZ290byBmaW5pc2g7CiAJfQogCi0JZXJyID0gY2hlY2tfZXhwb3J0KG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLCBueHAtPmV4X2ZsYWdzLCBOVUxMKTsKKwllcnIgPSBjaGVja19leHBvcnQocGF0aC5kZW50cnktPmRfaW5vZGUsIG54cC0+ZXhfZmxhZ3MsIE5VTEwpOwogCWlmIChlcnIpIGdvdG8gZmluaXNoOwogCiAJZXJyID0gLUVOT01FTTsKQEAgLTEwNjQsNyArMTA1Niw3IEBACiAJaWYgKCFuZXcuZXhfcGF0aG5hbWUpCiAJCWdvdG8gZmluaXNoOwogCW5ldy5leF9jbGllbnQgPSBjbHA7Ci0JbmV3LmV4X3BhdGggPSBuZC5wYXRoOworCW5ldy5leF9wYXRoID0gcGF0aDsKIAluZXcuZXhfZmxhZ3MgPSBueHAtPmV4X2ZsYWdzOwogCW5ldy5leF9hbm9uX3VpZCA9IG54cC0+ZXhfYW5vbl91aWQ7CiAJbmV3LmV4X2Fub25fZ2lkID0gbnhwLT5leF9hbm9uX2dpZDsKQEAgLTEwOTAsNyArMTA4Miw3IEBACiAJCWV4cF9wdXQoZXhwKTsKIAlpZiAoZnNpZF9rZXkgJiYgIUlTX0VSUihmc2lkX2tleSkpCiAJCWNhY2hlX3B1dCgmZnNpZF9rZXktPmgsICZzdmNfZXhwa2V5X2NhY2hlKTsKLQlwYXRoX3B1dCgmbmQucGF0aCk7CisJcGF0aF9wdXQoJnBhdGgpOwogb3V0X3B1dF9jbHA6CiAJYXV0aF9kb21haW5fcHV0KGNscCk7CiBvdXRfdW5sb2NrOgpAQCAtMTEyMSw3ICsxMTEzLDcgQEAKIHsKIAlzdHJ1Y3QgYXV0aF9kb21haW4gKmRvbTsKIAlzdmNfZXhwb3J0ICpleHA7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCWludAkJZXJyOwogCiAJLyogQ29uc2lzdGVuY3kgY2hlY2sgKi8KQEAgLTExMzgsMTMgKzExMzAsMTMgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWVyciA9IHBhdGhfbG9va3VwKG54cC0+ZXhfcGF0aCwgMCwgJm5kKTsKKwllcnIgPSBrZXJuX3BhdGgobnhwLT5leF9wYXRoLCAwLCAmcGF0aCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZG9tYWluOwogCiAJZXJyID0gLUVJTlZBTDsKLQlleHAgPSBleHBfZ2V0X2J5X25hbWUoZG9tLCBuZC5wYXRoLm1udCwgbmQucGF0aC5kZW50cnksIE5VTEwpOwotCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlleHAgPSBleHBfZ2V0X2J5X25hbWUoZG9tLCBwYXRoLm1udCwgcGF0aC5kZW50cnksIE5VTEwpOworCXBhdGhfcHV0KCZwYXRoKTsKIAlpZiAoSVNfRVJSKGV4cCkpCiAJCWdvdG8gb3V0X2RvbWFpbjsKIApAQCAtMTE2NiwyNiArMTE1OCwyNiBAQAogICogc2luY2UgaXRzIGhhcmRlciB0byBmb29sIGEga2VybmVsIG1vZHVsZSB0aGFuIGEgdXNlciBzcGFjZSBwcm9ncmFtLgogICovCiBpbnQKLWV4cF9yb290Zmgoc3ZjX2NsaWVudCAqY2xwLCBjaGFyICpwYXRoLCBzdHJ1Y3Qga25mc2RfZmggKmYsIGludCBtYXhzaXplKQorZXhwX3Jvb3RmaChzdmNfY2xpZW50ICpjbHAsIGNoYXIgKm5hbWUsIHN0cnVjdCBrbmZzZF9maCAqZiwgaW50IG1heHNpemUpCiB7CiAJc3RydWN0IHN2Y19leHBvcnQJKmV4cDsKLQlzdHJ1Y3QgbmFtZWlkYXRhCW5kOworCXN0cnVjdCBwYXRoCQlwYXRoOwogCXN0cnVjdCBpbm9kZQkJKmlub2RlOwogCXN0cnVjdCBzdmNfZmgJCWZoOwogCWludAkJCWVycjsKIAogCWVyciA9IC1FUEVSTTsKIAkvKiBOQjogd2UgcHJvYmFibHkgb3VnaHQgdG8gY2hlY2sgdGhhdCBpdCdzIE5VTC10ZXJtaW5hdGVkICovCi0JaWYgKHBhdGhfbG9va3VwKHBhdGgsIDAsICZuZCkpIHsKLQkJcHJpbnRrKCJuZnNkOiBleHBfcm9vdGZoIHBhdGggbm90IGZvdW5kICVzIiwgcGF0aCk7CisJaWYgKGtlcm5fcGF0aChuYW1lLCAwLCAmcGF0aCkpIHsKKwkJcHJpbnRrKCJuZnNkOiBleHBfcm9vdGZoIHBhdGggbm90IGZvdW5kICVzIiwgbmFtZSk7CiAJCXJldHVybiBlcnI7CiAJfQotCWlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBwYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCWRwcmludGsoIm5mc2Q6IGV4cF9yb290ZmgoJXMgWyVwXSAlczolcy8lbGQpXG4iLAotCQkgcGF0aCwgbmQucGF0aC5kZW50cnksIGNscC0+bmFtZSwKKwkJIG5hbWUsIHBhdGguZGVudHJ5LCBjbHAtPm5hbWUsCiAJCSBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKLQlleHAgPSBleHBfcGFyZW50KGNscCwgbmQucGF0aC5tbnQsIG5kLnBhdGguZGVudHJ5LCBOVUxMKTsKKwlleHAgPSBleHBfcGFyZW50KGNscCwgcGF0aC5tbnQsIHBhdGguZGVudHJ5LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGV4cCkpIHsKIAkJZXJyID0gUFRSX0VSUihleHApOwogCQlnb3RvIG91dDsKQEAgLTExOTUsNyArMTE4Nyw3IEBACiAJICogZmggbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyBmaF9jb21wb3NlCiAJICovCiAJZmhfaW5pdCgmZmgsIG1heHNpemUpOwotCWlmIChmaF9jb21wb3NlKCZmaCwgZXhwLCBuZC5wYXRoLmRlbnRyeSwgTlVMTCkpCisJaWYgKGZoX2NvbXBvc2UoJmZoLCBleHAsIHBhdGguZGVudHJ5LCBOVUxMKSkKIAkJZXJyID0gLUVJTlZBTDsKIAllbHNlCiAJCWVyciA9IDA7CkBAIC0xMjAzLDcgKzExOTUsNyBAQAogCWZoX3B1dCgmZmgpOwogCWV4cF9wdXQoZXhwKTsKIG91dDoKLQlwYXRoX3B1dCgmbmQucGF0aCk7CisJcGF0aF9wdXQoJnBhdGgpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHJlY292ZXIuYyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwppbmRleCAxNDViM2M4Li5iYjkzOTQ2IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRyZWNvdmVyLmMKKysrIGIvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCkBAIC01MSw3ICs1MSw3IEBACiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkgICAgICAgICAgICAgICAgTkZTRERCR19QUk9DCiAKIC8qIEdsb2JhbHMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFtZWlkYXRhIHJlY19kaXI7CitzdGF0aWMgc3RydWN0IHBhdGggcmVjX2RpcjsKIHN0YXRpYyBpbnQgcmVjX2Rpcl9pbml0ID0gMDsKIAogc3RhdGljIHZvaWQKQEAgLTEyMSw5ICsxMjEsOSBAQAogc3RhdGljIHZvaWQKIG5mc2Q0X3N5bmNfcmVjX2Rpcih2b2lkKQogewotCW11dGV4X2xvY2soJnJlY19kaXIucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwotCW5mc2Rfc3luY19kaXIocmVjX2Rpci5wYXRoLmRlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZyZWNfZGlyLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbmZzZF9zeW5jX2RpcihyZWNfZGlyLmRlbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiB9CiAKIGludApAQCAtMTQzLDkgKzE0Myw5IEBACiAJbmZzNF9zYXZlX3VzZXIoJnVpZCwgJmdpZCk7CiAKIAkvKiBsb2NrIHRoZSBwYXJlbnQgKi8KLQltdXRleF9sb2NrKCZyZWNfZGlyLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihkbmFtZSwgcmVjX2Rpci5wYXRoLmRlbnRyeSwgSEVYRElSX0xFTi0xKTsKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihkbmFtZSwgcmVjX2Rpci5kZW50cnksIEhFWERJUl9MRU4tMSk7CiAJaWYgKElTX0VSUihkZW50cnkpKSB7CiAJCXN0YXR1cyA9IFBUUl9FUlIoZGVudHJ5KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTU1LDE1ICsxNTUsMTUgQEAKIAkJZHByaW50aygiTkZTRDogbmZzZDRfY3JlYXRlX2NsaWRfZGlyOiBESVJFQ1RPUlkgRVhJU1RTXG4iKTsKIAkJZ290byBvdXRfcHV0OwogCX0KLQlzdGF0dXMgPSBtbnRfd2FudF93cml0ZShyZWNfZGlyLnBhdGgubW50KTsKKwlzdGF0dXMgPSBtbnRfd2FudF93cml0ZShyZWNfZGlyLm1udCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXRfcHV0OwotCXN0YXR1cyA9IHZmc19ta2RpcihyZWNfZGlyLnBhdGguZGVudHJ5LT5kX2lub2RlLCBkZW50cnksIFNfSVJXWFUpOwotCW1udF9kcm9wX3dyaXRlKHJlY19kaXIucGF0aC5tbnQpOworCXN0YXR1cyA9IHZmc19ta2RpcihyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LCBTX0lSV1hVKTsKKwltbnRfZHJvcF93cml0ZShyZWNfZGlyLm1udCk7CiBvdXRfcHV0OgogCWRwdXQoZGVudHJ5KTsKIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZyZWNfZGlyLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJY2xwLT5jbF9maXJzdHN0YXRlID0gMTsKIAkJbmZzZDRfc3luY19yZWNfZGlyKCk7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAogCW5mczRfc2F2ZV91c2VyKCZ1aWQsICZnaWQpOwogCi0JZmlscCA9IGRlbnRyeV9vcGVuKGRnZXQoZGlyKSwgbW50Z2V0KHJlY19kaXIucGF0aC5tbnQpLCBPX1JET05MWSk7CisJZmlscCA9IGRlbnRyeV9vcGVuKGRnZXQoZGlyKSwgbW50Z2V0KHJlY19kaXIubW50KSwgT19SRE9OTFkpOwogCXN0YXR1cyA9IFBUUl9FUlIoZmlscCk7CiAJaWYgKElTX0VSUihmaWxwKSkKIAkJZ290byBvdXQ7CkBAIC0yOTEsOSArMjkxLDkgQEAKIAogCWRwcmludGsoIk5GU0Q6IG5mc2Q0X3VubGlua19jbGlkX2Rpci4gbmFtZSAlLipzXG4iLCBuYW1sZW4sIG5hbWUpOwogCi0JbXV0ZXhfbG9jaygmcmVjX2Rpci5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgcmVjX2Rpci5wYXRoLmRlbnRyeSwgbmFtbGVuKTsKLQltdXRleF91bmxvY2soJnJlY19kaXIucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCByZWNfZGlyLmRlbnRyeSwgbmFtbGVuKTsKKwltdXRleF91bmxvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJc3RhdHVzID0gUFRSX0VSUihkZW50cnkpOwogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJaWYgKCFkZW50cnktPmRfaW5vZGUpCiAJCWdvdG8gb3V0OwogCi0Jc3RhdHVzID0gbmZzZDRfY2xlYXJfY2xpZF9kaXIocmVjX2Rpci5wYXRoLmRlbnRyeSwgZGVudHJ5KTsKKwlzdGF0dXMgPSBuZnNkNF9jbGVhcl9jbGlkX2RpcihyZWNfZGlyLmRlbnRyeSwgZGVudHJ5KTsKIG91dDoKIAlkcHV0KGRlbnRyeSk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTMxOCw3ICszMTgsNyBAQAogCWlmICghcmVjX2Rpcl9pbml0IHx8ICFjbHAtPmNsX2ZpcnN0c3RhdGUpCiAJCXJldHVybjsKIAotCXN0YXR1cyA9IG1udF93YW50X3dyaXRlKHJlY19kaXIucGF0aC5tbnQpOworCXN0YXR1cyA9IG1udF93YW50X3dyaXRlKHJlY19kaXIubW50KTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIAljbHAtPmNsX2ZpcnN0c3RhdGUgPSAwOwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJbmZzNF9yZXNldF91c2VyKHVpZCwgZ2lkKTsKIAlpZiAoc3RhdHVzID09IDApCiAJCW5mc2Q0X3N5bmNfcmVjX2RpcigpOwotCW1udF9kcm9wX3dyaXRlKHJlY19kaXIucGF0aC5tbnQpOworCW1udF9kcm9wX3dyaXRlKHJlY19kaXIubW50KTsKIG91dDoKIAlpZiAoc3RhdHVzKQogCQlwcmludGsoIk5GU0Q6IEZhaWxlZCB0byByZW1vdmUgZXhwaXJlZCBjbGllbnQgc3RhdGUgZGlyZWN0b3J5IgpAQCAtMzU3LDE3ICszNTcsMTcgQEAKIAogCWlmICghcmVjX2Rpcl9pbml0KQogCQlyZXR1cm47Ci0Jc3RhdHVzID0gbW50X3dhbnRfd3JpdGUocmVjX2Rpci5wYXRoLm1udCk7CisJc3RhdHVzID0gbW50X3dhbnRfd3JpdGUocmVjX2Rpci5tbnQpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IG5mc2Q0X2xpc3RfcmVjX2RpcihyZWNfZGlyLnBhdGguZGVudHJ5LCBwdXJnZV9vbGQpOworCXN0YXR1cyA9IG5mc2Q0X2xpc3RfcmVjX2RpcihyZWNfZGlyLmRlbnRyeSwgcHVyZ2Vfb2xkKTsKIAlpZiAoc3RhdHVzID09IDApCiAJCW5mc2Q0X3N5bmNfcmVjX2RpcigpOwotCW1udF9kcm9wX3dyaXRlKHJlY19kaXIucGF0aC5tbnQpOworCW1udF9kcm9wX3dyaXRlKHJlY19kaXIubW50KTsKIG91dDoKIAlpZiAoc3RhdHVzKQogCQlwcmludGsoIm5mc2Q0OiBmYWlsZWQgdG8gcHVyZ2Ugb2xkIGNsaWVudHMgZnJvbSByZWNvdmVyeSIKLQkJCSIgZGlyZWN0b3J5ICVzXG4iLCByZWNfZGlyLnBhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCQkiIGRpcmVjdG9yeSAlc1xuIiwgcmVjX2Rpci5kZW50cnktPmRfbmFtZS5uYW1lKTsKIH0KIAogc3RhdGljIGludApAQCAtMzg3LDEwICszODcsMTAgQEAKIG5mc2Q0X3JlY2Rpcl9sb2FkKHZvaWQpIHsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gbmZzZDRfbGlzdF9yZWNfZGlyKHJlY19kaXIucGF0aC5kZW50cnksIGxvYWRfcmVjZGlyKTsKKwlzdGF0dXMgPSBuZnNkNF9saXN0X3JlY19kaXIocmVjX2Rpci5kZW50cnksIGxvYWRfcmVjZGlyKTsKIAlpZiAoc3RhdHVzKQogCQlwcmludGsoIm5mc2Q0OiBmYWlsZWQgbG9hZGluZyBjbGllbnRzIGZyb20gcmVjb3ZlcnkiCi0JCQkiIGRpcmVjdG9yeSAlc1xuIiwgcmVjX2Rpci5wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJIiBkaXJlY3RvcnkgJXNcbiIsIHJlY19kaXIuZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDEyLDcgKzQxMiw3IEBACiAKIAluZnM0X3NhdmVfdXNlcigmdWlkLCAmZ2lkKTsKIAotCXN0YXR1cyA9IHBhdGhfbG9va3VwKHJlY19kaXJuYW1lLCBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWSwKKwlzdGF0dXMgPSBrZXJuX3BhdGgocmVjX2Rpcm5hbWUsIExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZLAogCQkJJnJlY19kaXIpOwogCWlmIChzdGF0dXMpCiAJCXByaW50aygiTkZTRDogdW5hYmxlIHRvIGZpbmQgcmVjb3ZlcnkgZGlyZWN0b3J5ICVzXG4iLApAQCAtNDI5LDUgKzQyOSw1IEBACiAJaWYgKCFyZWNfZGlyX2luaXQpCiAJCXJldHVybjsKIAlyZWNfZGlyX2luaXQgPSAwOwotCXBhdGhfcHV0KCZyZWNfZGlyLnBhdGgpOworCXBhdGhfcHV0KCZyZWNfZGlyKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDBjYzdmZjUuLmIwYmViYzUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMzI4NCwxNyArMzI4NCwxNyBAQAogbmZzNF9yZXNldF9yZWNvdmVyeWRpcihjaGFyICpyZWNkaXIpCiB7CiAJaW50IHN0YXR1czsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBwYXRoIHBhdGg7CiAKLQlzdGF0dXMgPSBwYXRoX2xvb2t1cChyZWNkaXIsIExPT0tVUF9GT0xMT1csICZuZCk7CisJc3RhdHVzID0ga2Vybl9wYXRoKHJlY2RpciwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAJc3RhdHVzID0gLUVOT1RESVI7Ci0JaWYgKFNfSVNESVIobmQucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwlpZiAoU19JU0RJUihwYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgewogCQluZnM0X3NldF9yZWNkaXIocmVjZGlyKTsKIAkJc3RhdHVzID0gMDsKIAl9Ci0JcGF0aF9wdXQoJm5kLnBhdGgpOworCXBhdGhfcHV0KCZwYXRoKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCA5NzU0M2RmLi5lM2Y5NzgzIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBmYWlsb3Zlcl91bmxvY2tfZnMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCWNoYXIgKmZvX3BhdGg7CiAJaW50IGVycm9yOwogCkBAIC0zNTYsMTMgKzM1NiwxMyBAQAogCWlmIChxd29yZF9nZXQoJmJ1ZiwgZm9fcGF0aCwgc2l6ZSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVycm9yID0gcGF0aF9sb29rdXAoZm9fcGF0aCwgMCwgJm5kKTsKKwllcnJvciA9IGtlcm5fcGF0aChmb19wYXRoLCAwLCAmcGF0aCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IG5sbXN2Y191bmxvY2tfYWxsX2J5X3NiKG5kLnBhdGgubW50LT5tbnRfc2IpOworCWVycm9yID0gbmxtc3ZjX3VubG9ja19hbGxfYnlfc2IocGF0aC5tbnQtPm1udF9zYik7CiAKLQlwYXRoX3B1dCgmbmQucGF0aCk7CisJcGF0aF9wdXQoJnBhdGgpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNzdmMuYyBiL2ZzL25mc2QvbmZzc3ZjLmMKaW5kZXggNTllZWI0Ni4uMDdlNGY1ZCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNzdmMuYworKysgYi9mcy9uZnNkL25mc3N2Yy5jCkBAIC0yNDksNiArMjQ5LDEwIEBACiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCisJZXJyb3IgPSBsb2NrZF91cCgpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKwogCWVycm9yID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgInRjcCIsIHBvcnQsCiAJCQkJCVNWQ19TT0NLX0RFRkFVTFRTKTsKIAlpZiAoZXJyb3IgPCAwKQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggYWExZDBkNi4uMGJjNTZmNiAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC00MTAsNiArNDEwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IG5mc2RfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICprZXksIHZvaWQgKipidWYpCiB7CiAJc3NpemVfdCBidWZsZW47CisJc3NpemVfdCByZXQ7CiAKIAlidWZsZW4gPSB2ZnNfZ2V0eGF0dHIoZGVudHJ5LCBrZXksIE5VTEwsIDApOwogCWlmIChidWZsZW4gPD0gMCkKQEAgLTQxOSw3ICs0MjAsMTAgQEAKIAlpZiAoISpidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIHZmc19nZXR4YXR0cihkZW50cnksIGtleSwgKmJ1ZiwgYnVmbGVuKTsKKwlyZXQgPSB2ZnNfZ2V0eGF0dHIoZGVudHJ5LCBrZXksICpidWYsIGJ1Zmxlbik7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKCpidWYpOworCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKIApAQCAtMTgxNCw2ICsxODE4LDExNSBAQAogfQogCiAvKgorICogV2UgZG8gdGhpcyBidWZmZXJpbmcgYmVjYXVzZSB3ZSBtdXN0IG5vdCBjYWxsIGJhY2sgaW50byB0aGUgZmlsZQorICogc3lzdGVtJ3MgLT5sb29rdXAoKSBtZXRob2QgZnJvbSB0aGUgZmlsbGRpciBjYWxsYmFjay4gVGhhdCBtYXkgd2VsbAorICogZGVhZGxvY2sgYSBudW1iZXIgb2YgZmlsZSBzeXN0ZW1zLgorICoKKyAqIFRoaXMgaXMgYmFzZWQgaGVhdmlseSBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2FtZSBpbiBYRlMuCisgKi8KK3N0cnVjdCBidWZmZXJlZF9kaXJlbnQgeworCXU2NAkJaW5vOworCWxvZmZfdAkJb2Zmc2V0OworCWludAkJbmFtbGVuOworCXVuc2lnbmVkIGludAlkX3R5cGU7CisJY2hhcgkJbmFtZVtdOworfTsKKworc3RydWN0IHJlYWRkaXJfZGF0YSB7CisJY2hhcgkJKmRpcmVudDsKKwlzaXplX3QJCXVzZWQ7CisJaW50CQlmdWxsOworfTsKKworc3RhdGljIGludCBuZnNkX2J1ZmZlcmVkX2ZpbGxkaXIodm9pZCAqX19idWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4sCisJCQkJIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCit7CisJc3RydWN0IHJlYWRkaXJfZGF0YSAqYnVmID0gX19idWY7CisJc3RydWN0IGJ1ZmZlcmVkX2RpcmVudCAqZGUgPSAodm9pZCAqKShidWYtPmRpcmVudCArIGJ1Zi0+dXNlZCk7CisJdW5zaWduZWQgaW50IHJlY2xlbjsKKworCXJlY2xlbiA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgYnVmZmVyZWRfZGlyZW50KSArIG5hbWxlbiwgc2l6ZW9mKHU2NCkpOworCWlmIChidWYtPnVzZWQgKyByZWNsZW4gPiBQQUdFX1NJWkUpIHsKKwkJYnVmLT5mdWxsID0gMTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGUtPm5hbWxlbiA9IG5hbWxlbjsKKwlkZS0+b2Zmc2V0ID0gb2Zmc2V0OworCWRlLT5pbm8gPSBpbm87CisJZGUtPmRfdHlwZSA9IGRfdHlwZTsKKwltZW1jcHkoZGUtPm5hbWUsIG5hbWUsIG5hbWxlbik7CisJYnVmLT51c2VkICs9IHJlY2xlbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5mc2RfYnVmZmVyZWRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgZmlsbGRpcl90IGZ1bmMsCisJCQkJIHN0cnVjdCByZWFkZGlyX2NkICpjZHAsIGxvZmZfdCAqb2Zmc2V0cCkKK3sKKwlzdHJ1Y3QgcmVhZGRpcl9kYXRhIGJ1ZjsKKwlzdHJ1Y3QgYnVmZmVyZWRfZGlyZW50ICpkZTsKKwlpbnQgaG9zdF9lcnI7CisJaW50IHNpemU7CisJbG9mZl90IG9mZnNldDsKKworCWJ1Zi5kaXJlbnQgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi5kaXJlbnQpCisJCXJldHVybiAtRU5PTUVNOworCisJb2Zmc2V0ID0gKm9mZnNldHA7CisJY2RwLT5lcnIgPSBuZnNlcnJfZW9mOyAvKiB3aWxsIGJlIGNsZWFyZWQgb24gc3VjY2Vzc2Z1bCByZWFkICovCisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBpbnQgcmVjbGVuOworCisJCWJ1Zi51c2VkID0gMDsKKwkJYnVmLmZ1bGwgPSAwOworCisJCWhvc3RfZXJyID0gdmZzX3JlYWRkaXIoZmlsZSwgbmZzZF9idWZmZXJlZF9maWxsZGlyLCAmYnVmKTsKKwkJaWYgKGJ1Zi5mdWxsKQorCQkJaG9zdF9lcnIgPSAwOworCisJCWlmIChob3N0X2VyciA8IDApCisJCQlicmVhazsKKworCQlzaXplID0gYnVmLnVzZWQ7CisKKwkJaWYgKCFzaXplKQorCQkJYnJlYWs7CisKKwkJZGUgPSAoc3RydWN0IGJ1ZmZlcmVkX2RpcmVudCAqKWJ1Zi5kaXJlbnQ7CisJCXdoaWxlIChzaXplID4gMCkgeworCQkJb2Zmc2V0ID0gZGUtPm9mZnNldDsKKworCQkJaWYgKGZ1bmMoY2RwLCBkZS0+bmFtZSwgZGUtPm5hbWxlbiwgZGUtPm9mZnNldCwKKwkJCQkgZGUtPmlubywgZGUtPmRfdHlwZSkpCisJCQkJZ290byBkb25lOworCisJCQlpZiAoY2RwLT5lcnIgIT0gbmZzX29rKQorCQkJCWdvdG8gZG9uZTsKKworCQkJcmVjbGVuID0gQUxJR04oc2l6ZW9mKCpkZSkgKyBkZS0+bmFtbGVuLAorCQkJCSAgICAgICBzaXplb2YodTY0KSk7CisJCQlzaXplIC09IHJlY2xlbjsKKwkJCWRlID0gKHN0cnVjdCBidWZmZXJlZF9kaXJlbnQgKikoKGNoYXIgKilkZSArIHJlY2xlbik7CisJCX0KKwkJb2Zmc2V0ID0gdmZzX2xsc2VlayhmaWxlLCAwLCBTRUVLX0NVUik7CisJCWlmICghYnVmLmZ1bGwpCisJCQlicmVhazsKKwl9CisKKyBkb25lOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoYnVmLmRpcmVudCkpOworCisJaWYgKGhvc3RfZXJyKQorCQlyZXR1cm4gbmZzZXJybm8oaG9zdF9lcnIpOworCisJKm9mZnNldHAgPSBvZmZzZXQ7CisJcmV0dXJuIGNkcC0+ZXJyOworfQorCisvKgogICogUmVhZCBlbnRyaWVzIGZyb20gYSBkaXJlY3RvcnkuCiAgKiBUaGUgIE5GU3YzLzQgdmVyaWZpZXIgd2UgaWdub3JlIGZvciBub3cuCiAgKi8KQEAgLTE4MjIsNyArMTkzNSw2IEBACiAJICAgICBzdHJ1Y3QgcmVhZGRpcl9jZCAqY2RwLCBmaWxsZGlyX3QgZnVuYykKIHsKIAlfX2JlMzIJCWVycjsKLQlpbnQgCQlob3N0X2VycjsKIAlzdHJ1Y3QgZmlsZQkqZmlsZTsKIAlsb2ZmX3QJCW9mZnNldCA9ICpvZmZzZXRwOwogCkBAIC0xODM2LDIxICsxOTQ4LDcgQEAKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCi0JLyoKLQkgKiBSZWFkIHRoZSBkaXJlY3RvcnkgZW50cmllcy4gVGhpcyBzaWxseSBsb29wIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCi0JICogcmVhZGRpcigpIGlzIG5vdCBndWFyYW50ZWVkIHRvIGZpbGwgdXAgdGhlIGVudGlyZSBidWZmZXIsIGJ1dAotCSAqIG1heSBjaG9vc2UgdG8gZG8gbGVzcy4KLQkgKi8KLQotCWRvIHsKLQkJY2RwLT5lcnIgPSBuZnNlcnJfZW9mOyAvKiB3aWxsIGJlIGNsZWFyZWQgb24gc3VjY2Vzc2Z1bCByZWFkICovCi0JCWhvc3RfZXJyID0gdmZzX3JlYWRkaXIoZmlsZSwgZnVuYywgY2RwKTsKLQl9IHdoaWxlIChob3N0X2VyciA+PTAgJiYgY2RwLT5lcnIgPT0gbmZzX29rKTsKLQlpZiAoaG9zdF9lcnIpCi0JCWVyciA9IG5mc2Vycm5vKGhvc3RfZXJyKTsKLQllbHNlCi0JCWVyciA9IGNkcC0+ZXJyOwotCSpvZmZzZXRwID0gdmZzX2xsc2VlayhmaWxlLCAwLCAxKTsKKwllcnIgPSBuZnNkX2J1ZmZlcmVkX3JlYWRkaXIoZmlsZSwgZnVuYywgY2RwLCBvZmZzZXRwKTsKIAogCWlmIChlcnIgPT0gbmZzZXJyX2VvZiB8fCBlcnIgPT0gbmZzZXJyX3Rvb3NtYWxsKQogCQllcnIgPSBuZnNfb2s7IC8qIGNhbiBzdGlsbCBiZSBmb3VuZCBpbiAtPmVyciAqLwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCBkMDIwODY2Li4zMTQwYTQ0IDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYworKysgYi9mcy9udGZzL2ZpbGUuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlwYWdlc1tucl0gPSAqY2FjaGVkX3BhZ2U7CiAJCQlwYWdlX2NhY2hlX2dldCgqY2FjaGVkX3BhZ2UpOwogCQkJaWYgKHVubGlrZWx5KCFwYWdldmVjX2FkZChscnVfcHZlYywgKmNhY2hlZF9wYWdlKSkpCi0JCQkJX19wYWdldmVjX2xydV9hZGQobHJ1X3B2ZWMpOworCQkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUobHJ1X3B2ZWMpOwogCQkJKmNhY2hlZF9wYWdlID0gTlVMTDsKIAkJfQogCQlpbmRleCsrOwpAQCAtMjA4NCw3ICsyMDg0LDcgQEAKIAkJCQkJCU9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOwogCQl9CiAgIAl9Ci0JcGFnZXZlY19scnVfYWRkKCZscnVfcHZlYyk7CisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAludGZzX2RlYnVnKCJEb25lLiAgUmV0dXJuaW5nICVzICh3cml0dGVuIDB4JWx4LCBzdGF0dXMgJWxpKS4iLAogCQkJd3JpdHRlbiA/ICJ3cml0dGVuIiA6ICJzdGF0dXMiLCAodW5zaWduZWQgbG9uZyl3cml0dGVuLAogCQkJKGxvbmcpc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuYwppbmRleCA5ZThhOTViLi4yY2EwMDE1IDEwMDY0NAotLS0gYS9mcy9udGZzL25hbWVpLmMKKysrIGIvZnMvbnRmcy9uYW1laS5jCkBAIC0zMDQsOCArMzA0LDYgQEAKIAludGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4OwogCUFUVFJfUkVDT1JEICphdHRyOwogCUZJTEVfTkFNRV9BVFRSICpmbjsKLQlzdHJ1Y3QgaW5vZGUgKnBhcmVudF92aTsKLQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnRfZGVudDsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9pbm87CiAJaW50IGVycjsKIApAQCAtMzQ1LDI0ICszNDMsOCBAQAogCS8qIFJlbGVhc2UgdGhlIHNlYXJjaCBjb250ZXh0IGFuZCB0aGUgbWZ0IHJlY29yZCBvZiB0aGUgY2hpbGQuICovCiAJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiAJdW5tYXBfbWZ0X3JlY29yZChuaSk7Ci0JLyogR2V0IHRoZSBpbm9kZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeS4gKi8KLQlwYXJlbnRfdmkgPSBudGZzX2lnZXQodmktPmlfc2IsIHBhcmVudF9pbm8pOwotCWlmIChJU19FUlIocGFyZW50X3ZpKSB8fCB1bmxpa2VseShpc19iYWRfaW5vZGUocGFyZW50X3ZpKSkpIHsKLQkJaWYgKCFJU19FUlIocGFyZW50X3ZpKSkKLQkJCWlwdXQocGFyZW50X3ZpKTsKLQkJbnRmc19lcnJvcih2aS0+aV9zYiwgIkZhaWxlZCB0byBnZXQgcGFyZW50IGRpcmVjdG9yeSBpbm9kZSAiCi0JCQkJIjB4JWx4IG9mIGNoaWxkIGlub2RlIDB4JWx4LiIsIHBhcmVudF9pbm8sCi0JCQkJdmktPmlfaW5vKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVBQ0NFUyk7Ci0JfQotCS8qIEZpbmFsbHkgZ2V0IGEgZGVudHJ5IGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhbmQgcmV0dXJuIGl0LiAqLwotCXBhcmVudF9kZW50ID0gZF9hbGxvY19hbm9uKHBhcmVudF92aSk7Ci0JaWYgKHVubGlrZWx5KCFwYXJlbnRfZGVudCkpIHsKLQkJaXB1dChwYXJlbnRfdmkpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JbnRmc19kZWJ1ZygiRG9uZSBmb3IgaW5vZGUgMHglbHguIiwgdmktPmlfaW5vKTsKLQlyZXR1cm4gcGFyZW50X2RlbnQ7CisKKwlyZXR1cm4gZF9vYnRhaW5fYWxpYXMobnRmc19pZ2V0KHZpLT5pX3NiLCBwYXJlbnRfaW5vKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKm50ZnNfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggN2RjZTE2MS4uNmViYWE1OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC05NzYsNyArOTc2LDcgQEAKIAl9CiAKIAlpZiAocmVnLT5ocl9iZGV2KQotCQlibGtkZXZfcHV0KHJlZy0+aHJfYmRldik7CisJCWJsa2Rldl9wdXQocmVnLT5ocl9iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIAogCWlmIChyZWctPmhyX3Nsb3RzKQogCQlrZnJlZShyZWctPmhyX3Nsb3RzKTsKQEAgLTEyNjgsNyArMTI2OCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVnLT5ocl9iZGV2ID0gSV9CREVWKGZpbHAtPmZfbWFwcGluZy0+aG9zdCk7Ci0JcmV0ID0gYmxrZGV2X2dldChyZWctPmhyX2JkZXYsIEZNT0RFX1dSSVRFIHwgRk1PREVfUkVBRCwgMCk7CisJcmV0ID0gYmxrZGV2X2dldChyZWctPmhyX2JkZXYsIEZNT0RFX1dSSVRFIHwgRk1PREVfUkVBRCk7CiAJaWYgKHJldCkgewogCQlyZWctPmhyX2JkZXYgPSBOVUxMOwogCQlnb3RvIG91dDsKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAJCWlwdXQoaW5vZGUpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZWctPmhyX2JkZXYpIHsKLQkJCWJsa2Rldl9wdXQocmVnLT5ocl9iZGV2KTsKKwkJCWJsa2Rldl9wdXQocmVnLT5ocl9iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIAkJCXJlZy0+aHJfYmRldiA9IE5VTEw7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9leHBvcnQuYyBiL2ZzL29jZnMyL2V4cG9ydC5jCmluZGV4IDY3NTI3Y2UuLjJmMjdiMzMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4cG9ydC5jCisrKyBiL2ZzL29jZnMyL2V4cG9ydC5jCkBAIC02OCwxNCArNjgsOSBAQAogCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKIAl9CiAKLQlyZXN1bHQgPSBkX2FsbG9jX2Fub24oaW5vZGUpOwotCi0JaWYgKCFyZXN1bHQpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCW1sb2dfZXJybm8oLUVOT01FTSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlyZXN1bHQtPmRfb3AgPSAmb2NmczJfZGVudHJ5X29wczsKKwlyZXN1bHQgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7CisJaWYgKCFJU19FUlIocmVzdWx0KSkKKwkJcmVzdWx0LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CiAKIAltbG9nX2V4aXRfcHRyKHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTg2LDcgKzgxLDYgQEAKIAlpbnQgc3RhdHVzOwogCXU2NCBibGtubzsKIAlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKmRpciA9IGNoaWxkLT5kX2lub2RlOwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsICclLipzJylcbiIsIGNoaWxkLApAQCAtMTA5LDIxICsxMDMsOSBAQAogCQlnb3RvIGJhaWxfdW5sb2NrOwogCX0KIAotCWlub2RlID0gb2NmczJfaWdldChPQ0ZTMl9TQihkaXItPmlfc2IpLCBibGtubywgMCwgMCk7Ci0JaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJbWxvZyhNTF9FUlJPUiwgIlVuYWJsZSB0byBjcmVhdGUgaW5vZGUgJWxsdVxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vKTsKLQkJcGFyZW50ID0gRVJSX1BUUigtRUFDQ0VTKTsKLQkJZ290byBiYWlsX3VubG9jazsKLQl9Ci0KLQlwYXJlbnQgPSBkX2FsbG9jX2Fub24oaW5vZGUpOwotCWlmICghcGFyZW50KSB7Ci0JCWlwdXQoaW5vZGUpOwotCQlwYXJlbnQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQotCXBhcmVudC0+ZF9vcCA9ICZvY2ZzMl9kZW50cnlfb3BzOworCXBhcmVudCA9IGRfb2J0YWluX2FsaWFzKG9jZnMyX2lnZXQoT0NGUzJfU0IoZGlyLT5pX3NiKSwgYmxrbm8sIDAsIDApKTsKKwlpZiAoIUlTX0VSUihwYXJlbnQpKQorCQlwYXJlbnQtPmRfb3AgPSAmb2NmczJfZGVudHJ5X29wczsKIAogYmFpbF91bmxvY2s6CiAJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7CmRpZmYgLS1naXQgYS9mcy9vbWZzL2Rpci5jIGIvZnMvb21mcy9kaXIuYwppbmRleCBjMDc1N2U5Li5jNzI3NWNmIDEwMDY0NAotLS0gYS9mcy9vbWZzL2Rpci5jCisrKyBiL2ZzL29tZnMvZGlyLmMKQEAgLTUwMSw0ICs1MDEsNSBAQAogc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkID0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpciA9IG9tZnNfcmVhZGRpciwKKwkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNTU5NjA0OS4uODNjZGI5ZCAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtNzk4LDcgKzc5OCw3IEBACiAJaW50IGVycm9yOwogCiAJZi0+Zl9mbGFncyA9IGZsYWdzOwotCWYtPmZfbW9kZSA9ICgoZmxhZ3MrMSkgJiBPX0FDQ01PREUpIHwgRk1PREVfTFNFRUsgfAorCWYtPmZfbW9kZSA9IChfX2ZvcmNlIGZtb2RlX3QpKChmbGFncysxKSAmIE9fQUNDTU9ERSkgfCBGTU9ERV9MU0VFSyB8CiAJCQkJRk1PREVfUFJFQUQgfCBGTU9ERV9QV1JJVEU7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaWYgKGYtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CmRpZmYgLS1naXQgYS9mcy9vcGVucHJvbWZzL2lub2RlLmMgYi9mcy9vcGVucHJvbWZzL2lub2RlLmMKaW5kZXggOWY1YjA1NC4uZDQxYmRjNyAxMDA2NDQKLS0tIGEvZnMvb3BlbnByb21mcy9pbm9kZS5jCisrKyBiL2ZzL29wZW5wcm9tZnMvaW5vZGUuYwpAQCAtMTY3LDYgKzE2Nyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcGVucHJvbV9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBvcGVucHJvbWZzX3JlYWRkaXIsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKm9wZW5wcm9tZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggZmJlYjJmMy4uNjMzZjdhMCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtMTk1LDYgKzE5NSwxNCBAQAogCXJldHVybiBFUlJfUFRSKHJlcyk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHBhcnRfcGFydGl0aW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGhkX3N0cnVjdCAqcCA9IGRldl90b19wYXJ0KGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcC0+cGFydG5vKTsKK30KKwogc3RhdGljIHNzaXplX3QgcGFydF9zdGFydF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjYwLDYgKzI2OCw3IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbiwgU19JUlVHTywgcGFydF9wYXJ0aXRpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIFNfSVJVR08sIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgU19JUlVHTywgcGFydF9zaXplX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIFNfSVJVR08sIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKQEAgLTI2OSw2ICsyNzgsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwYXJ0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3BhcnRpdGlvbi5hdHRyLAogCSZkZXZfYXR0cl9zdGFydC5hdHRyLAogCSZkZXZfYXR0cl9zaXplLmF0dHIsCiAJJmRldl9hdHRyX3N0YXQuYXR0ciwKQEAgLTQ3NSwxMCArNDg1LDEwIEBACiAJCWdvdG8gZXhpdDsKIAogCWJkZXYtPmJkX2ludmFsaWRhdGVkID0gMTsKLQllcnIgPSBibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JFQUQsIDApOworCWVyciA9IGJsa2Rldl9nZXQoYmRldiwgRk1PREVfUkVBRCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXhpdDsKLQlibGtkZXZfcHV0KGJkZXYpOworCWJsa2Rldl9wdXQoYmRldiwgRk1PREVfUkVBRCk7CiAKIGV4aXQ6CiAJLyogYW5ub3VuY2UgZGlzayBhZnRlciBwb3NzaWJsZSBwYXJ0aXRpb25zIGFyZSBjcmVhdGVkICovCmRpZmYgLS1naXQgYS9mcy9wcm9jL01ha2VmaWxlIGIvZnMvcHJvYy9NYWtlZmlsZQppbmRleCBlYmFiYTAyLi42M2Q5NjUxIDEwMDY0NAotLS0gYS9mcy9wcm9jL01ha2VmaWxlCisrKyBiL2ZzL3Byb2MvTWFrZWZpbGUKQEAgLTgsMTEgKzgsMjAgQEAKIHByb2MtJChDT05GSUdfTU1VKQk6PSBtbXUubyB0YXNrX21tdS5vCiAKIHByb2MteSAgICAgICArPSBpbm9kZS5vIHJvb3QubyBiYXNlLm8gZ2VuZXJpYy5vIGFycmF5Lm8gXAotCQlwcm9jX3R0eS5vIHByb2NfbWlzYy5vCi0KKwkJcHJvY190dHkubworcHJvYy15CSs9IGNtZGxpbmUubworcHJvYy15CSs9IGNwdWluZm8ubworcHJvYy15CSs9IGRldmljZXMubworcHJvYy15CSs9IGludGVycnVwdHMubworcHJvYy15CSs9IGxvYWRhdmcubworcHJvYy15CSs9IG1lbWluZm8ubworcHJvYy15CSs9IHN0YXQubworcHJvYy15CSs9IHVwdGltZS5vCitwcm9jLXkJKz0gdmVyc2lvbi5vCiBwcm9jLSQoQ09ORklHX1BST0NfU1lTQ1RMKQkrPSBwcm9jX3N5c2N0bC5vCiBwcm9jLSQoQ09ORklHX05FVCkJCSs9IHByb2NfbmV0Lm8KIHByb2MtJChDT05GSUdfUFJPQ19LQ09SRSkJKz0ga2NvcmUubwogcHJvYy0kKENPTkZJR19QUk9DX1ZNQ09SRSkJKz0gdm1jb3JlLm8KIHByb2MtJChDT05GSUdfUFJPQ19ERVZJQ0VUUkVFKQkrPSBwcm9jX2RldnRyZWUubwogcHJvYy0kKENPTkZJR19QUklOVEspCSs9IGttc2cubworcHJvYy0kKENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUikJKz0gcGFnZS5vCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggZjRiYzBlNy4uYmI5ZjRiMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMzg4LDIwICszODgsMjAgQEAKIAogCQkvKiBhZGQgdXAgbGl2ZSB0aHJlYWQgc3RhdHMgYXQgdGhlIGdyb3VwIGxldmVsICovCiAJCWlmICh3aG9sZSkgeworCQkJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFzazsKIAkJCWRvIHsKIAkJCQltaW5fZmx0ICs9IHQtPm1pbl9mbHQ7CiAJCQkJbWFqX2ZsdCArPSB0LT5tYWpfZmx0OwotCQkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHRhc2tfdXRpbWUodCkpOwotCQkJCXN0aW1lID0gY3B1dGltZV9hZGQoc3RpbWUsIHRhc2tfc3RpbWUodCkpOwogCQkJCWd0aW1lID0gY3B1dGltZV9hZGQoZ3RpbWUsIHRhc2tfZ3RpbWUodCkpOwogCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKIAkJCX0gd2hpbGUgKHQgIT0gdGFzayk7CiAKIAkJCW1pbl9mbHQgKz0gc2lnLT5taW5fZmx0OwogCQkJbWFqX2ZsdCArPSBzaWctPm1hal9mbHQ7Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBzaWctPnV0aW1lKTsKLQkJCXN0aW1lID0gY3B1dGltZV9hZGQoc3RpbWUsIHNpZy0+c3RpbWUpOworCQkJdGhyZWFkX2dyb3VwX2NwdXRpbWUodGFzaywgJmNwdXRpbWUpOworCQkJdXRpbWUgPSBjcHV0aW1lLnV0aW1lOworCQkJc3RpbWUgPSBjcHV0aW1lLnN0aW1lOwogCQkJZ3RpbWUgPSBjcHV0aW1lX2FkZChndGltZSwgc2lnLT5ndGltZSk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBiNTkxOGFlLi40ODZjZjNmIDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMTcxMiw5ICsxNzEyLDkgQEAKIAlmaWxlID0gZmNoZWNrX2ZpbGVzKGZpbGVzLCBmZCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIDEpCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCiAJCWlub2RlLT5pX21vZGUgfD0gU19JUlVTUiB8IFNfSVhVU1I7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIDIpCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQlpbm9kZS0+aV9tb2RlIHw9IFNfSVdVU1IgfCBTX0lYVVNSOwogCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlwdXRfZmlsZXNfc3RydWN0KGZpbGVzKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvY21kbGluZS5jIGIvZnMvcHJvYy9jbWRsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2NzZlMwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3Byb2MvY21kbGluZS5jCkBAIC0wLDAgKzEsMjkgQEAKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIGludCBjbWRsaW5lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHNhdmVkX2NvbW1hbmRfbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kbGluZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNtZGxpbmVfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY21kbGluZV9wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gY21kbGluZV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2NfY21kbGluZV9pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoImNtZGxpbmUiLCAwLCBOVUxMLCAmY21kbGluZV9wcm9jX2ZvcHMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19jbWRsaW5lX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9jcHVpbmZvLmMgYi9mcy9wcm9jL2NwdWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFlNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvcHJvYy9jcHVpbmZvLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3A7CitzdGF0aWMgaW50IGNwdWluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmNwdWluZm9fb3ApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NwdWluZm9fb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBjcHVpbmZvX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2NfY3B1aW5mb19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoImNwdWluZm8iLCAwLCBOVUxMLCAmcHJvY19jcHVpbmZvX29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19jcHVpbmZvX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9kZXZpY2VzLmMgYi9mcy9wcm9jL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWVlN2RhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcHJvYy9kZXZpY2VzLmMKQEAgLTAsMCArMSw3MCBAQAorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgaW50IGRldmluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCit7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2OworCisJaWYgKGkgPCBDSFJERVZfTUFKT1JfSEFTSF9TSVpFKSB7CisJCWlmIChpID09IDApCisJCQlzZXFfcHJpbnRmKGYsICJDaGFyYWN0ZXIgZGV2aWNlczpcbiIpOworCQljaHJkZXZfc2hvdyhmLCBpKTsKKwl9CisjaWZkZWYgQ09ORklHX0JMT0NLCisJZWxzZSB7CisJCWkgLT0gQ0hSREVWX01BSk9SX0hBU0hfU0laRTsKKwkJaWYgKGkgPT0gMCkKKwkJCXNlcV9wcmludGYoZiwgIlxuQmxvY2sgZGV2aWNlczpcbiIpOworCQlibGtkZXZfc2hvdyhmLCBpKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmRldmluZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKK3sKKwlpZiAoKnBvcyA8IChCTEtERVZfTUFKT1JfSEFTSF9TSVpFICsgQ0hSREVWX01BSk9SX0hBU0hfU0laRSkpCisJCXJldHVybiBwb3M7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpkZXZpbmZvX25leHQoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlpZiAoKnBvcyA+PSAoQkxLREVWX01BSk9SX0hBU0hfU0laRSArIENIUkRFVl9NQUpPUl9IQVNIX1NJWkUpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgdm9pZCBkZXZpbmZvX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQoreworCS8qIE5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZpbmZvX29wcyA9IHsKKwkuc3RhcnQgPSBkZXZpbmZvX3N0YXJ0LAorCS5uZXh0ICA9IGRldmluZm9fbmV4dCwKKwkuc3RvcCAgPSBkZXZpbmZvX3N0b3AsCisJLnNob3cgID0gZGV2aW5mb19zaG93Cit9OworCitzdGF0aWMgaW50IGRldmluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlscCwgJmRldmluZm9fb3BzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19kZXZpbmZvX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gZGV2aW5mb19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2RldmljZXNfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJkZXZpY2VzIiwgMCwgTlVMTCwgJnByb2NfZGV2aW5mb19vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHByb2NfZGV2aWNlc19pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvZ2VuZXJpYy5jIGIvZnMvcHJvYy9nZW5lcmljLmMKaW5kZXggNzgyMTU4OS4uNjBhMzU5YiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9nZW5lcmljLmMKKysrIGIvZnMvcHJvYy9nZW5lcmljLmMKQEAgLTU0Nyw5ICs1NDcsOCBAQAogCiAJZm9yICh0bXAgPSBkaXItPnN1YmRpcjsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCiAJCWlmIChzdHJjbXAodG1wLT5uYW1lLCBkcC0+bmFtZSkgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicHJvY19kaXJfZW50cnkgJyVzLyVzJyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCisJCQlXQVJOKDEsIEtFUk5fV0FSTklORyAicHJvY19kaXJfZW50cnkgJyVzLyVzJyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCiAJCQkJZGlyLT5uYW1lLCBkcC0+bmFtZSk7Ci0JCQlkdW1wX3N0YWNrKCk7CiAJCQlicmVhazsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2lub2RlLmMgYi9mcy9wcm9jL2lub2RlLmMKaW5kZXggYzZiNGZhNy4uMjU0M2ZkMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbm9kZS5jCisrKyBiL2ZzL3Byb2MvaW5vZGUuYwpAQCAtMTA2LDE0ICsxMDYsMTMgQEAKIAlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogCi1pbnQgX19pbml0IHByb2NfaW5pdF9pbm9kZWNhY2hlKHZvaWQpCit2b2lkIF9faW5pdCBwcm9jX2luaXRfaW5vZGVjYWNoZSh2b2lkKQogewogCXByb2NfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInByb2NfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcHJvY19pbm9kZSksCiAJCQkJCSAgICAgMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAogCQkJCQkJU0xBQl9NRU1fU1BSRUFEfFNMQUJfUEFOSUMpLAogCQkJCQkgICAgIGluaXRfb25jZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBwcm9jX3NvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2ludGVybmFsLmggYi9mcy9wcm9jL2ludGVybmFsLmgKaW5kZXggM2JmYjdiOC4uM2U4YWViOCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbnRlcm5hbC5oCisrKyBiL2ZzL3Byb2MvaW50ZXJuYWwuaApAQCAtNjEsMTIgKzYxLDExIEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NsZWFyX3JlZnNfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGFnZW1hcF9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19uZXRfb3BlcmF0aW9uczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfa21zZ19vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfbmV0X2lub2RlX29wZXJhdGlvbnM7CiAKIHZvaWQgZnJlZV9wcm9jX2VudHJ5KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpOwogCi1pbnQgcHJvY19pbml0X2lub2RlY2FjaGUodm9pZCk7Cit2b2lkIHByb2NfaW5pdF9pbm9kZWNhY2hlKHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKnByb2NfcGlkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2ludGVycnVwdHMuYyBiL2ZzL3Byb2MvaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDI5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9wcm9jL2ludGVycnVwdHMuYwpAQCAtMCwwICsxLDUzIEBACisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxbnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworLyoKKyAqIC9wcm9jL2ludGVycnVwdHMKKyAqLworc3RhdGljIHZvaWQgKmludF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gKCpwb3MgPD0gbnJfaXJxcykgPyBwb3MgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqaW50X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisJaWYgKCpwb3MgPiBucl9pcnFzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgdm9pZCBpbnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQoreworCS8qIE5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnRfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBpbnRfc2VxX3N0YXJ0LAorCS5uZXh0ICA9IGludF9zZXFfbmV4dCwKKwkuc3RvcCAgPSBpbnRfc2VxX3N0b3AsCisJLnNob3cgID0gc2hvd19pbnRlcnJ1cHRzCit9OworCitzdGF0aWMgaW50IGludGVycnVwdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlscCwgJmludF9zZXFfb3BzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19pbnRlcnJ1cHRzX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gaW50ZXJydXB0c19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2ludGVycnVwdHNfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJpbnRlcnJ1cHRzIiwgMCwgTlVMTCwgJnByb2NfaW50ZXJydXB0c19vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHByb2NfaW50ZXJydXB0c19pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mva2NvcmUuYyBiL2ZzL3Byb2Mva2NvcmUuYwppbmRleCBjMjM3MGM3Li41OWI0M2EwIDEwMDY0NAotLS0gYS9mcy9wcm9jL2tjb3JlLmMKKysrIGIvZnMvcHJvYy9rY29yZS5jCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVmaW5lIEVMRl9DT1JFX0VGTEFHUwkwCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2tjb3JlOworCiBzdGF0aWMgaW50IG9wZW5fa2NvcmUoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKIHsKIAlyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JBV0lPKSA/IDAgOiAtRVBFUk07CkBAIC0zNCw3ICszNiw3IEBACiAKIHN0YXRpYyBzc2l6ZV90IHJlYWRfa2NvcmUoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IHJlYWRfa2NvcmUsCiAJLm9wZW4JCT0gb3Blbl9rY29yZSwKIH07CkBAIC0zOTksMyArNDAxLDEzIEBACiAKIAlyZXR1cm4gYWNjOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2tjb3JlX2luaXQodm9pZCkKK3sKKwlwcm9jX3Jvb3Rfa2NvcmUgPSBwcm9jX2NyZWF0ZSgia2NvcmUiLCBTX0lSVVNSLCBOVUxMLCAmcHJvY19rY29yZV9vcGVyYXRpb25zKTsKKwlpZiAocHJvY19yb290X2tjb3JlKQorCQlwcm9jX3Jvb3Rfa2NvcmUtPnNpemUgPQorCQkJCShzaXplX3QpaGlnaF9tZW1vcnkgLSBQQUdFX09GRlNFVCArIFBBR0VfU0laRTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHByb2Nfa2NvcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2ttc2cuYyBiL2ZzL3Byb2Mva21zZy5jCmluZGV4IDlmZDVkZjMuLjdjYTc4MzQgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mva21zZy5jCisrKyBiL2ZzL3Byb2Mva21zZy5jCkBAIC0xMCwxMyArMTAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgImludGVybmFsLmgiCi0KIGV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBsb2dfd2FpdDsKIAogZXh0ZXJuIGludCBkb19zeXNsb2coaW50IHR5cGUsIGNoYXIgX191c2VyICpidWcsIGludCBjb3VudCk7CkBAIC00OSw5ICs0OCwxNiBAQAogfQogCiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rbXNnX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2ttc2dfb3BlcmF0aW9ucyA9IHsKIAkucmVhZAkJPSBrbXNnX3JlYWQsCiAJLnBvbGwJCT0ga21zZ19wb2xsLAogCS5vcGVuCQk9IGttc2dfb3BlbiwKIAkucmVsZWFzZQk9IGttc2dfcmVsZWFzZSwKIH07CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2Nfa21zZ19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoImttc2ciLCBTX0lSVVNSLCBOVUxMLCAmcHJvY19rbXNnX29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19rbXNnX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9sb2FkYXZnLmMgYi9mcy9wcm9jL2xvYWRhdmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmNhMzljCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcHJvYy9sb2FkYXZnLmMKQEAgLTAsMCArMSw1MSBAQAorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNkZWZpbmUgTE9BRF9JTlQoeCkgKCh4KSA+PiBGU0hJRlQpCisjZGVmaW5lIExPQURfRlJBQyh4KSBMT0FEX0lOVCgoKHgpICYgKEZJWEVEXzEtMSkpICogMTAwKQorCitzdGF0aWMgaW50IGxvYWRhdmdfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlpbnQgYSwgYiwgYzsKKwl1bnNpZ25lZCBsb25nIHNlcTsKKworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisJCWEgPSBhdmVucnVuWzBdICsgKEZJWEVEXzEvMjAwKTsKKwkJYiA9IGF2ZW5ydW5bMV0gKyAoRklYRURfMS8yMDApOworCQljID0gYXZlbnJ1blsyXSArIChGSVhFRF8xLzIwMCk7CisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisKKwlzZXFfcHJpbnRmKG0sICIlZC4lMDJkICVkLiUwMmQgJWQuJTAyZCAlbGQvJWQgJWRcbiIsCisJCUxPQURfSU5UKGEpLCBMT0FEX0ZSQUMoYSksCisJCUxPQURfSU5UKGIpLCBMT0FEX0ZSQUMoYiksCisJCUxPQURfSU5UKGMpLCBMT0FEX0ZSQUMoYyksCisJCW5yX3J1bm5pbmcoKSwgbnJfdGhyZWFkcywKKwkJdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpLT5sYXN0X3BpZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9hZGF2Z19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGxvYWRhdmdfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbG9hZGF2Z19wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gbG9hZGF2Z19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2NfbG9hZGF2Z19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoImxvYWRhdmciLCAwLCBOVUxMLCAmbG9hZGF2Z19wcm9jX2ZvcHMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19sb2FkYXZnX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9tZW1pbmZvLmMgYi9mcy9wcm9jL21lbWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTY3NWM0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvcHJvYy9tZW1pbmZvLmMKQEAgLTAsMCArMSwxNjggQEAKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3F1aWNrbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgYXJjaF9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7Cit9CisKK3N0YXRpYyBpbnQgbWVtaW5mb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBzeXNpbmZvIGk7CisJdW5zaWduZWQgbG9uZyBjb21taXR0ZWQ7CisJdW5zaWduZWQgbG9uZyBhbGxvd2VkOworCXN0cnVjdCB2bWFsbG9jX2luZm8gdm1pOworCWxvbmcgY2FjaGVkOworCXVuc2lnbmVkIGxvbmcgcGFnZXNbTlJfTFJVX0xJU1RTXTsKKwlpbnQgbHJ1OworCisvKgorICogZGlzcGxheSBpbiBraWxvYnl0ZXMuCisgKi8KKyNkZWZpbmUgSyh4KSAoKHgpIDw8IChQQUdFX1NISUZUIC0gMTApKQorCXNpX21lbWluZm8oJmkpOworCXNpX3N3YXBpbmZvKCZpKTsKKwljb21taXR0ZWQgPSBhdG9taWNfbG9uZ19yZWFkKCZ2bV9jb21taXR0ZWRfc3BhY2UpOworCWFsbG93ZWQgPSAoKHRvdGFscmFtX3BhZ2VzIC0gaHVnZXRsYl90b3RhbF9wYWdlcygpKQorCQkqIHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvIC8gMTAwKSArIHRvdGFsX3N3YXBfcGFnZXM7CisKKwljYWNoZWQgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX1BBR0VTKSAtCisJCQl0b3RhbF9zd2FwY2FjaGVfcGFnZXMgLSBpLmJ1ZmZlcnJhbTsKKwlpZiAoY2FjaGVkIDwgMCkKKwkJY2FjaGVkID0gMDsKKworCWdldF92bWFsbG9jX2luZm8oJnZtaSk7CisKKwlmb3IgKGxydSA9IExSVV9CQVNFOyBscnUgPCBOUl9MUlVfTElTVFM7IGxydSsrKQorCQlwYWdlc1tscnVdID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBscnUpOworCisJLyoKKwkgKiBUYWdnZWQgZm9ybWF0LCBmb3IgZWFzeSBncmVwcGluZyBhbmQgZXhwYW5zaW9uLgorCSAqLworCXNlcV9wcmludGYobSwKKwkJIk1lbVRvdGFsOiAgICAgICAlOGx1IGtCXG4iCisJCSJNZW1GcmVlOiAgICAgICAgJThsdSBrQlxuIgorCQkiQnVmZmVyczogICAgICAgICU4bHUga0JcbiIKKwkJIkNhY2hlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSJTd2FwQ2FjaGVkOiAgICAgJThsdSBrQlxuIgorCQkiQWN0aXZlOiAgICAgICAgICU4bHUga0JcbiIKKwkJIkluYWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCisJCSJBY3RpdmUoYW5vbik6ICAgJThsdSBrQlxuIgorCQkiSW5hY3RpdmUoYW5vbik6ICU4bHUga0JcbiIKKwkJIkFjdGl2ZShmaWxlKTogICAlOGx1IGtCXG4iCisJCSJJbmFjdGl2ZShmaWxlKTogJThsdSBrQlxuIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIlVuZXZpY3RhYmxlOiAgICAlOGx1IGtCXG4iCisJCSJNbG9ja2VkOiAgICAgICAgJThsdSBrQlxuIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJIkhpZ2hUb3RhbDogICAgICAlOGx1IGtCXG4iCisJCSJIaWdoRnJlZTogICAgICAgJThsdSBrQlxuIgorCQkiTG93VG90YWw6ICAgICAgICU4bHUga0JcbiIKKwkJIkxvd0ZyZWU6ICAgICAgICAlOGx1IGtCXG4iCisjZW5kaWYKKwkJIlN3YXBUb3RhbDogICAgICAlOGx1IGtCXG4iCisJCSJTd2FwRnJlZTogICAgICAgJThsdSBrQlxuIgorCQkiRGlydHk6ICAgICAgICAgICU4bHUga0JcbiIKKwkJIldyaXRlYmFjazogICAgICAlOGx1IGtCXG4iCisJCSJBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgorCQkiTWFwcGVkOiAgICAgICAgICU4bHUga0JcbiIKKwkJIlNsYWI6ICAgICAgICAgICAlOGx1IGtCXG4iCisJCSJTUmVjbGFpbWFibGU6ICAgJThsdSBrQlxuIgorCQkiU1VucmVjbGFpbTogICAgICU4bHUga0JcbiIKKwkJIlBhZ2VUYWJsZXM6ICAgICAlOGx1IGtCXG4iCisjaWZkZWYgQ09ORklHX1FVSUNLTElTVAorCQkiUXVpY2tsaXN0czogICAgICU4bHUga0JcbiIKKyNlbmRpZgorCQkiTkZTX1Vuc3RhYmxlOiAgICU4bHUga0JcbiIKKwkJIkJvdW5jZTogICAgICAgICAlOGx1IGtCXG4iCisJCSJXcml0ZWJhY2tUbXA6ICAgJThsdSBrQlxuIgorCQkiQ29tbWl0TGltaXQ6ICAgICU4bHUga0JcbiIKKwkJIkNvbW1pdHRlZF9BUzogICAlOGx1IGtCXG4iCisJCSJWbWFsbG9jVG90YWw6ICAgJThsdSBrQlxuIgorCQkiVm1hbGxvY1VzZWQ6ICAgICU4bHUga0JcbiIKKwkJIlZtYWxsb2NDaHVuazogICAlOGx1IGtCXG4iLAorCQlLKGkudG90YWxyYW0pLAorCQlLKGkuZnJlZXJhbSksCisJCUsoaS5idWZmZXJyYW0pLAorCQlLKGNhY2hlZCksCisJCUsodG90YWxfc3dhcGNhY2hlX3BhZ2VzKSwKKwkJSyhwYWdlc1tMUlVfQUNUSVZFX0FOT05dICAgKyBwYWdlc1tMUlVfQUNUSVZFX0ZJTEVdKSwKKwkJSyhwYWdlc1tMUlVfSU5BQ1RJVkVfQU5PTl0gKyBwYWdlc1tMUlVfSU5BQ1RJVkVfRklMRV0pLAorCQlLKHBhZ2VzW0xSVV9BQ1RJVkVfQU5PTl0pLAorCQlLKHBhZ2VzW0xSVV9JTkFDVElWRV9BTk9OXSksCisJCUsocGFnZXNbTFJVX0FDVElWRV9GSUxFXSksCisJCUsocGFnZXNbTFJVX0lOQUNUSVZFX0ZJTEVdKSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCUsocGFnZXNbTFJVX1VORVZJQ1RBQkxFXSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfTUxPQ0spKSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISUdITUVNCisJCUsoaS50b3RhbGhpZ2gpLAorCQlLKGkuZnJlZWhpZ2gpLAorCQlLKGkudG90YWxyYW0taS50b3RhbGhpZ2gpLAorCQlLKGkuZnJlZXJhbS1pLmZyZWVoaWdoKSwKKyNlbmRpZgorCQlLKGkudG90YWxzd2FwKSwKKwkJSyhpLmZyZWVzd2FwKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQU5PTl9QQUdFUykpLAorCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9SRUNMQUlNQUJMRSkgKworCQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfVU5SRUNMQUlNQUJMRSkpLAorCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9QQUdFVEFCTEUpKSwKKyNpZmRlZiBDT05GSUdfUVVJQ0tMSVNUCisJCUsocXVpY2tsaXN0X3RvdGFsX3NpemUoKSksCisjZW5kaWYKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9CT1VOQ0UpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0tfVEVNUCkpLAorCQlLKGFsbG93ZWQpLAorCQlLKGNvbW1pdHRlZCksCisJCSh1bnNpZ25lZCBsb25nKVZNQUxMT0NfVE9UQUwgPj4gMTAsCisJCXZtaS51c2VkID4+IDEwLAorCQl2bWkubGFyZ2VzdF9jaHVuayA+PiAxMAorCQkpOworCisJaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhtKTsKKworCWFyY2hfcmVwb3J0X21lbWluZm8obSk7CisKKwlyZXR1cm4gMDsKKyN1bmRlZiBLCit9CisKK3N0YXRpYyBpbnQgbWVtaW5mb19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1lbWluZm9fcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWVtaW5mb19wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gbWVtaW5mb19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2NfbWVtaW5mb19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoIm1lbWluZm8iLCAwLCBOVUxMLCAmbWVtaW5mb19wcm9jX2ZvcHMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19tZW1pbmZvX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wYWdlLmMgYi9mcy9wcm9jL3BhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjdkOTVhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcHJvYy9wYWdlLmMKQEAgLTAsMCArMSwxNDcgQEAKKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworI2RlZmluZSBLUE1TSVpFIHNpemVvZih1NjQpCisjZGVmaW5lIEtQTU1BU0sgKEtQTVNJWkUgLSAxKQorLyogL3Byb2Mva3BhZ2Vjb3VudCAtIGFuIGFycmF5IGV4cG9zaW5nIHBhZ2UgY291bnRzCisgKgorICogRWFjaCBlbnRyeSBpcyBhIHU2NCByZXByZXNlbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHBoeXNpY2FsIHBhZ2UgY291bnQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGtwYWdlY291bnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJdTY0IF9fdXNlciAqb3V0ID0gKHU2NCBfX3VzZXIgKilidWY7CisJc3RydWN0IHBhZ2UgKnBwYWdlOworCXVuc2lnbmVkIGxvbmcgc3JjID0gKnBwb3M7CisJdW5zaWduZWQgbG9uZyBwZm47CisJc3NpemVfdCByZXQgPSAwOworCXU2NCBwY291bnQ7CisKKwlwZm4gPSBzcmMgLyBLUE1TSVpFOworCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgKG1heF9wZm4gKiBLUE1TSVpFKSAtIHNyYyk7CisJaWYgKHNyYyAmIEtQTU1BU0sgfHwgY291bnQgJiBLUE1NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcHBhZ2UgPSBOVUxMOworCQlpZiAocGZuX3ZhbGlkKHBmbikpCisJCQlwcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisJCXBmbisrOworCQlpZiAoIXBwYWdlKQorCQkJcGNvdW50ID0gMDsKKwkJZWxzZQorCQkJcGNvdW50ID0gcGFnZV9tYXBjb3VudChwcGFnZSk7CisKKwkJaWYgKHB1dF91c2VyKHBjb3VudCwgb3V0KyspKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQljb3VudCAtPSBLUE1TSVpFOworCX0KKworCSpwcG9zICs9IChjaGFyIF9fdXNlciAqKW91dCAtIGJ1ZjsKKwlpZiAoIXJldCkKKwkJcmV0ID0gKGNoYXIgX191c2VyICopb3V0IC0gYnVmOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfa3BhZ2Vjb3VudF9vcGVyYXRpb25zID0geworCS5sbHNlZWsgPSBtZW1fbHNlZWssCisJLnJlYWQgPSBrcGFnZWNvdW50X3JlYWQsCit9OworCisvKiAvcHJvYy9rcGFnZWZsYWdzIC0gYW4gYXJyYXkgZXhwb3NpbmcgcGFnZSBmbGFncworICoKKyAqIEVhY2ggZW50cnkgaXMgYSB1NjQgcmVwcmVzZW50aW5nIHRoZSBjb3JyZXNwb25kaW5nCisgKiBwaHlzaWNhbCBwYWdlIGZsYWdzLgorICovCisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0byBkZWNvdXBsZSBpbnRlcm5hbCBmbGFncyBmcm9tIGV4cG9ydGVkIG9uZXMgKi8KKworI2RlZmluZSBLUEZfTE9DS0VEICAgICAwCisjZGVmaW5lIEtQRl9FUlJPUiAgICAgIDEKKyNkZWZpbmUgS1BGX1JFRkVSRU5DRUQgMgorI2RlZmluZSBLUEZfVVBUT0RBVEUgICAzCisjZGVmaW5lIEtQRl9ESVJUWSAgICAgIDQKKyNkZWZpbmUgS1BGX0xSVSAgICAgICAgNQorI2RlZmluZSBLUEZfQUNUSVZFICAgICA2CisjZGVmaW5lIEtQRl9TTEFCICAgICAgIDcKKyNkZWZpbmUgS1BGX1dSSVRFQkFDSyAgOAorI2RlZmluZSBLUEZfUkVDTEFJTSAgICA5CisjZGVmaW5lIEtQRl9CVUREWSAgICAgMTAKKworI2RlZmluZSBrcGZfY29weV9iaXQoZmxhZ3MsIHNyY3BvcywgZHN0cG9zKSAoKChmbGFncyA+PiBzcmNwb3MpICYgMSkgPDwgZHN0cG9zKQorCitzdGF0aWMgc3NpemVfdCBrcGFnZWZsYWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXU2NCBfX3VzZXIgKm91dCA9ICh1NjQgX191c2VyICopYnVmOworCXN0cnVjdCBwYWdlICpwcGFnZTsKKwl1bnNpZ25lZCBsb25nIHNyYyA9ICpwcG9zOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXNzaXplX3QgcmV0ID0gMDsKKwl1NjQga2ZsYWdzLCB1ZmxhZ3M7CisKKwlwZm4gPSBzcmMgLyBLUE1TSVpFOworCWNvdW50ID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIChtYXhfcGZuICogS1BNU0laRSkgLSBzcmMpOworCWlmIChzcmMgJiBLUE1NQVNLIHx8IGNvdW50ICYgS1BNTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXBwYWdlID0gTlVMTDsKKwkJaWYgKHBmbl92YWxpZChwZm4pKQorCQkJcHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCQlwZm4rKzsKKwkJaWYgKCFwcGFnZSkKKwkJCWtmbGFncyA9IDA7CisJCWVsc2UKKwkJCWtmbGFncyA9IHBwYWdlLT5mbGFnczsKKworCQl1ZmxhZ3MgPSBrcGZfY29weV9iaXQoS1BGX0xPQ0tFRCwgUEdfbG9ja2VkLCBrZmxhZ3MpIHwKKwkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9FUlJPUiwgUEdfZXJyb3IpIHwKKwkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9SRUZFUkVOQ0VELCBQR19yZWZlcmVuY2VkKSB8CisJCQlrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfVVBUT0RBVEUsIFBHX3VwdG9kYXRlKSB8CisJCQlrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfRElSVFksIFBHX2RpcnR5KSB8CisJCQlrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfTFJVLCBQR19scnUpIHwKKwkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9BQ1RJVkUsIFBHX2FjdGl2ZSkgfAorCQkJa3BmX2NvcHlfYml0KGtmbGFncywgS1BGX1NMQUIsIFBHX3NsYWIpIHwKKwkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9XUklURUJBQ0ssIFBHX3dyaXRlYmFjaykgfAorCQkJa3BmX2NvcHlfYml0KGtmbGFncywgS1BGX1JFQ0xBSU0sIFBHX3JlY2xhaW0pIHwKKwkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9CVUREWSwgUEdfYnVkZHkpOworCisJCWlmIChwdXRfdXNlcih1ZmxhZ3MsIG91dCsrKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJY291bnQgLT0gS1BNU0laRTsKKwl9CisKKwkqcHBvcyArPSAoY2hhciBfX3VzZXIgKilvdXQgLSBidWY7CisJaWYgKCFyZXQpCisJCXJldCA9IChjaGFyIF9fdXNlciAqKW91dCAtIGJ1ZjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2twYWdlZmxhZ3Nfb3BlcmF0aW9ucyA9IHsKKwkubGxzZWVrID0gbWVtX2xzZWVrLAorCS5yZWFkID0ga3BhZ2VmbGFnc19yZWFkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHJvY19wYWdlX2luaXQodm9pZCkKK3sKKwlwcm9jX2NyZWF0ZSgia3BhZ2Vjb3VudCIsIFNfSVJVU1IsIE5VTEwsICZwcm9jX2twYWdlY291bnRfb3BlcmF0aW9ucyk7CisJcHJvY19jcmVhdGUoImtwYWdlZmxhZ3MiLCBTX0lSVVNSLCBOVUxMLCAmcHJvY19rcGFnZWZsYWdzX29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19wYWdlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYyBiL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKaW5kZXggZWNhNDcxYmMuLmQ3Nzc3ODkgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKKysrIGIvZnMvcHJvYy9wcm9jX2RldnRyZWUuYwpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAxOTk3IFBhdWwgTWFja2VycmFzCiAgKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KQEAgLTIxNCw3ICsyMTUsNyBAQAogLyoKICAqIENhbGxlZCBvbiBpbml0aWFsaXphdGlvbiB0byBzZXQgdXAgdGhlIC9wcm9jL2RldmljZS10cmVlIHN1YnRyZWUKICAqLwotdm9pZCBwcm9jX2RldmljZV90cmVlX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHByb2NfZGV2aWNlX3RyZWVfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKIAlpZiAoICFoYXZlX29mICkKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19taXNjLmMgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWVhNDJlLi4wMDAwMDAwCi0tLSBhL2ZzL3Byb2MvcHJvY19taXNjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MTQgKzAsMCBAQAotLyoKLSAqICBsaW51eC9mcy9wcm9jL3Byb2NfbWlzYy5jCi0gKgotICogIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYwotICogIENvcHlyaWdodCAoQykgMTk5MiAgYnkgTGludXMgVG9ydmFsZHMKLSAqICBiYXNlZCBvbiBpZGVhcyBieSBEYXJyZW4gU2VubgotICoKLSAqICBUaGlzIHVzZWQgdG8gYmUgdGhlIHBhcnQgb2YgYXJyYXkuYy4gU2VlIHRoZSByZXN0IG9mIGhpc3RvcnkgYW5kIGNyZWRpdHMKLSAqICB0aGVyZS4gSSB0b29rIHRoaXMgaW50byBhIHNlcGFyYXRlIGZpbGUgYW5kIHN3aXRjaGVkIHRoZSB0aGluZyB0byBnZW5lcmljCi0gKiAgcHJvY19maWxlX2lub2RlX29wZXJhdGlvbnMsIGxlYXZpbmcgaW4gYXJyYXkuYyBvbmx5IHBlci1wcm9jZXNzIHN0dWZmLgotICogIEludW1iZXJzIGFsbG9jYXRpb24gbWFkZSBkeW5hbWljICh2aWEgY3JlYXRlX3Byb2NfZW50cnkoKSkuICBBViwgTWF5IDE5OTkuCi0gKgotICogQ2hhbmdlczoKLSAqIEZ1bHRvbiBHcmVlbiAgICAgIDogIEVuY2Fwc3VsYXRlZCBwb3NpdGlvbiBtZXRyaWMgY2FsY3VsYXRpb25zLgotICoJCQk8a2VybmVsQEZ1bHRvbkdyZWVuLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgotI2luY2x1ZGUgPGxpbnV4L3F1aWNrbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KLSNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdGxiLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSAiaW50ZXJuYWwuaCIKLQotI2RlZmluZSBMT0FEX0lOVCh4KSAoKHgpID4+IEZTSElGVCkKLSNkZWZpbmUgTE9BRF9GUkFDKHgpIExPQURfSU5UKCgoeCkgJiAoRklYRURfMS0xKSkgKiAxMDApCi0vKgotICogV2FybmluZzogc3R1ZmYgYmVsb3cgKGltcG9ydGVkIGZ1bmN0aW9ucykgYXNzdW1lcyB0aGF0IGl0cyBvdXRwdXQgd2lsbCBmaXQKLSAqIGludG8gb25lIHBhZ2UuIEZvciBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBpdCBtYXkgYmUgd3JvbmcuIE1vcmVvdmVyLCB3ZQotICogaGF2ZSBhIHdheSB0byBkZWFsIHdpdGggdGhhdCBncmFjZWZ1bGx5LiBSaWdodCBub3cgSSB1c2VkIHN0cmFpZ2h0Zm9yd2FyZAotICogd3JhcHBlcnMsIGJ1dCB0aGlzIG5lZWRzIGZ1cnRoZXIgYW5hbHlzaXMgd3J0IHBvdGVudGlhbCBvdmVyZmxvd3MuCi0gKi8KLWV4dGVybiBpbnQgZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqKTsKLWV4dGVybiBpbnQgZ2V0X3N0cmFtX2xpc3QoY2hhciAqKTsKLWV4dGVybiBpbnQgZ2V0X2V4ZWNfZG9tYWluX2xpc3QoY2hhciAqKTsKLQotc3RhdGljIGludCBwcm9jX2NhbGNfbWV0cmljcyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgaW50IGxlbikKLXsKLQlpZiAobGVuIDw9IG9mZitjb3VudCkgKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlsZW4gLT0gb2ZmOwotCWlmIChsZW4+Y291bnQpIGxlbiA9IGNvdW50OwotCWlmIChsZW48MCkgbGVuID0gMDsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50IGxvYWRhdmdfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCWludCBhLCBiLCBjOwotCWludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCQlhID0gYXZlbnJ1blswXSArIChGSVhFRF8xLzIwMCk7Ci0JCWIgPSBhdmVucnVuWzFdICsgKEZJWEVEXzEvMjAwKTsKLQkJYyA9IGF2ZW5ydW5bMl0gKyAoRklYRURfMS8yMDApOwotCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwotCi0JbGVuID0gc3ByaW50ZihwYWdlLCIlZC4lMDJkICVkLiUwMmQgJWQuJTAyZCAlbGQvJWQgJWRcbiIsCi0JCUxPQURfSU5UKGEpLCBMT0FEX0ZSQUMoYSksCi0JCUxPQURfSU5UKGIpLCBMT0FEX0ZSQUMoYiksCi0JCUxPQURfSU5UKGMpLCBMT0FEX0ZSQUMoYyksCi0JCW5yX3J1bm5pbmcoKSwgbnJfdGhyZWFkcywKLQkJdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpLT5sYXN0X3BpZCk7Ci0JcmV0dXJuIHByb2NfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbnQgdXB0aW1lX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgdXB0aW1lOwotCXN0cnVjdCB0aW1lc3BlYyBpZGxlOwotCWludCBsZW47Ci0JY3B1dGltZV90IGlkbGV0aW1lID0gY3B1dGltZV9hZGQoaW5pdF90YXNrLnV0aW1lLCBpbml0X3Rhc2suc3RpbWUpOwotCi0JZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7Ci0JbW9ub3RvbmljX3RvX2Jvb3RiYXNlZCgmdXB0aW1lKTsKLQljcHV0aW1lX3RvX3RpbWVzcGVjKGlkbGV0aW1lLCAmaWRsZSk7Ci0JbGVuID0gc3ByaW50ZihwYWdlLCIlbHUuJTAybHUgJWx1LiUwMmx1XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcpIHVwdGltZS50dl9zZWMsCi0JCQkodXB0aW1lLnR2X25zZWMgLyAoTlNFQ19QRVJfU0VDIC8gMTAwKSksCi0JCQkodW5zaWduZWQgbG9uZykgaWRsZS50dl9zZWMsCi0JCQkoaWRsZS50dl9uc2VjIC8gKE5TRUNfUEVSX1NFQyAvIDEwMCkpKTsKLQotCXJldHVybiBwcm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwotfQotCi1pbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIGFyY2hfcmVwb3J0X21lbWluZm8oY2hhciAqcGFnZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtZW1pbmZvX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgc3lzaW5mbyBpOwotCWludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBjb21taXR0ZWQ7Ci0JdW5zaWduZWQgbG9uZyBhbGxvd2VkOwotCXN0cnVjdCB2bWFsbG9jX2luZm8gdm1pOwotCWxvbmcgY2FjaGVkOwotCi0vKgotICogZGlzcGxheSBpbiBraWxvYnl0ZXMuCi0gKi8KLSNkZWZpbmUgSyh4KSAoKHgpIDw8IChQQUdFX1NISUZUIC0gMTApKQotCXNpX21lbWluZm8oJmkpOwotCXNpX3N3YXBpbmZvKCZpKTsKLQljb21taXR0ZWQgPSBhdG9taWNfbG9uZ19yZWFkKCZ2bV9jb21taXR0ZWRfc3BhY2UpOwotCWFsbG93ZWQgPSAoKHRvdGFscmFtX3BhZ2VzIC0gaHVnZXRsYl90b3RhbF9wYWdlcygpKQotCQkqIHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvIC8gMTAwKSArIHRvdGFsX3N3YXBfcGFnZXM7Ci0KLQljYWNoZWQgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX1BBR0VTKSAtCi0JCQl0b3RhbF9zd2FwY2FjaGVfcGFnZXMgLSBpLmJ1ZmZlcnJhbTsKLQlpZiAoY2FjaGVkIDwgMCkKLQkJY2FjaGVkID0gMDsKLQotCWdldF92bWFsbG9jX2luZm8oJnZtaSk7Ci0KLQkvKgotCSAqIFRhZ2dlZCBmb3JtYXQsIGZvciBlYXN5IGdyZXBwaW5nIGFuZCBleHBhbnNpb24uCi0JICovCi0JbGVuID0gc3ByaW50ZihwYWdlLAotCQkiTWVtVG90YWw6ICAgICAlOGx1IGtCXG4iCi0JCSJNZW1GcmVlOiAgICAgICU4bHUga0JcbiIKLQkJIkJ1ZmZlcnM6ICAgICAgJThsdSBrQlxuIgotCQkiQ2FjaGVkOiAgICAgICAlOGx1IGtCXG4iCi0JCSJTd2FwQ2FjaGVkOiAgICU4bHUga0JcbiIKLQkJIkFjdGl2ZTogICAgICAgJThsdSBrQlxuIgotCQkiSW5hY3RpdmU6ICAgICAlOGx1IGtCXG4iCi0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJIkhpZ2hUb3RhbDogICAgJThsdSBrQlxuIgotCQkiSGlnaEZyZWU6ICAgICAlOGx1IGtCXG4iCi0JCSJMb3dUb3RhbDogICAgICU4bHUga0JcbiIKLQkJIkxvd0ZyZWU6ICAgICAgJThsdSBrQlxuIgotI2VuZGlmCi0JCSJTd2FwVG90YWw6ICAgICU4bHUga0JcbiIKLQkJIlN3YXBGcmVlOiAgICAgJThsdSBrQlxuIgotCQkiRGlydHk6ICAgICAgICAlOGx1IGtCXG4iCi0JCSJXcml0ZWJhY2s6ICAgICU4bHUga0JcbiIKLQkJIkFub25QYWdlczogICAgJThsdSBrQlxuIgotCQkiTWFwcGVkOiAgICAgICAlOGx1IGtCXG4iCi0JCSJTbGFiOiAgICAgICAgICU4bHUga0JcbiIKLQkJIlNSZWNsYWltYWJsZTogJThsdSBrQlxuIgotCQkiU1VucmVjbGFpbTogICAlOGx1IGtCXG4iCi0JCSJQYWdlVGFibGVzOiAgICU4bHUga0JcbiIKLSNpZmRlZiBDT05GSUdfUVVJQ0tMSVNUCi0JCSJRdWlja2xpc3RzOiAgICU4bHUga0JcbiIKLSNlbmRpZgotCQkiTkZTX1Vuc3RhYmxlOiAlOGx1IGtCXG4iCi0JCSJCb3VuY2U6ICAgICAgICU4bHUga0JcbiIKLQkJIldyaXRlYmFja1RtcDogJThsdSBrQlxuIgotCQkiQ29tbWl0TGltaXQ6ICAlOGx1IGtCXG4iCi0JCSJDb21taXR0ZWRfQVM6ICU4bHUga0JcbiIKLQkJIlZtYWxsb2NUb3RhbDogJThsdSBrQlxuIgotCQkiVm1hbGxvY1VzZWQ6ICAlOGx1IGtCXG4iCi0JCSJWbWFsbG9jQ2h1bms6ICU4bHUga0JcbiIsCi0JCUsoaS50b3RhbHJhbSksCi0JCUsoaS5mcmVlcmFtKSwKLQkJSyhpLmJ1ZmZlcnJhbSksCi0JCUsoY2FjaGVkKSwKLQkJSyh0b3RhbF9zd2FwY2FjaGVfcGFnZXMpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSkpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSksCi0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJSyhpLnRvdGFsaGlnaCksCi0JCUsoaS5mcmVlaGlnaCksCi0JCUsoaS50b3RhbHJhbS1pLnRvdGFsaGlnaCksCi0JCUsoaS5mcmVlcmFtLWkuZnJlZWhpZ2gpLAotI2VuZGlmCi0JCUsoaS50b3RhbHN3YXApLAotCQlLKGkuZnJlZXN3YXApLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpKSwKLQkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spKSwKLQkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9BTk9OX1BBR0VTKSksCi0JCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9NQVBQRUQpKSwKLQkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSArCi0JCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSksCi0JCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9SRUNMQUlNQUJMRSkpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfVU5SRUNMQUlNQUJMRSkpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1BBR0VUQUJMRSkpLAotI2lmZGVmIENPTkZJR19RVUlDS0xJU1QKLQkJSyhxdWlja2xpc3RfdG90YWxfc2l6ZSgpKSwKLSNlbmRpZgotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0JPVU5DRSkpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDS19URU1QKSksCi0JCUsoYWxsb3dlZCksCi0JCUsoY29tbWl0dGVkKSwKLQkJKHVuc2lnbmVkIGxvbmcpVk1BTExPQ19UT1RBTCA+PiAxMCwKLQkJdm1pLnVzZWQgPj4gMTAsCi0JCXZtaS5sYXJnZXN0X2NodW5rID4+IDEwCi0JCSk7Ci0KLQkJbGVuICs9IGh1Z2V0bGJfcmVwb3J0X21lbWluZm8ocGFnZSArIGxlbik7Ci0KLQlsZW4gKz0gYXJjaF9yZXBvcnRfbWVtaW5mbyhwYWdlICsgbGVuKTsKLQotCXJldHVybiBwcm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwotI3VuZGVmIEsKLX0KLQotc3RhdGljIGludCBmcmFnbWVudGF0aW9uX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JKHZvaWQpaW5vZGU7Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZmcmFnbWVudGF0aW9uX29wKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnJhZ21lbnRhdGlvbl9maWxlX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gZnJhZ21lbnRhdGlvbl9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHBhZ2V0eXBlaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcGFnZXR5cGVpbmZvX29wKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZXR5cGVpbmZvX2ZpbGVfb3BzID0gewotCS5vcGVuCQk9IHBhZ2V0eXBlaW5mb19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHpvbmVpbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZ6b25laW5mb19vcCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfem9uZWluZm9fZmlsZV9vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHpvbmVpbmZvX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgdmVyc2lvbl9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbjsKLQotCWxlbiA9IHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgbGludXhfcHJvY19iYW5uZXIsCi0JCXV0c25hbWUoKS0+c3lzbmFtZSwKLQkJdXRzbmFtZSgpLT5yZWxlYXNlLAotCQl1dHNuYW1lKCktPnZlcnNpb24pOwotCXJldHVybiBwcm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwotfQotCi1leHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3A7Ci1zdGF0aWMgaW50IGNwdWluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmNwdWluZm9fb3ApOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NwdWluZm9fb3BlcmF0aW9ucyA9IHsKLQkub3BlbgkJPSBjcHVpbmZvX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgZGV2aW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdikKLXsKLQlpbnQgaSA9ICoobG9mZl90ICopIHY7Ci0KLQlpZiAoaSA8IENIUkRFVl9NQUpPUl9IQVNIX1NJWkUpIHsKLQkJaWYgKGkgPT0gMCkKLQkJCXNlcV9wcmludGYoZiwgIkNoYXJhY3RlciBkZXZpY2VzOlxuIik7Ci0JCWNocmRldl9zaG93KGYsIGkpOwotCX0KLSNpZmRlZiBDT05GSUdfQkxPQ0sKLQllbHNlIHsKLQkJaSAtPSBDSFJERVZfTUFKT1JfSEFTSF9TSVpFOwotCQlpZiAoaSA9PSAwKQotCQkJc2VxX3ByaW50ZihmLCAiXG5CbG9jayBkZXZpY2VzOlxuIik7Ci0JCWJsa2Rldl9zaG93KGYsIGkpOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCAqZGV2aW5mb19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKQotewotCWlmICgqcG9zIDwgKEJMS0RFVl9NQUpPUl9IQVNIX1NJWkUgKyBDSFJERVZfTUFKT1JfSEFTSF9TSVpFKSkKLQkJcmV0dXJuIHBvczsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgKmRldmluZm9fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCSgqcG9zKSsrOwotCWlmICgqcG9zID49IChCTEtERVZfTUFKT1JfSEFTSF9TSVpFICsgQ0hSREVWX01BSk9SX0hBU0hfU0laRSkpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBwb3M7Ci19Ci0KLXN0YXRpYyB2b2lkIGRldmluZm9fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCi17Ci0JLyogTm90aGluZyB0byBkbyAqLwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldmluZm9fb3BzID0gewotCS5zdGFydCA9IGRldmluZm9fc3RhcnQsCi0JLm5leHQgID0gZGV2aW5mb19uZXh0LAotCS5zdG9wICA9IGRldmluZm9fc3RvcCwKLQkuc2hvdyAgPSBkZXZpbmZvX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgZGV2aW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXJldHVybiBzZXFfb3BlbihmaWxwLCAmZGV2aW5mb19vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2RldmluZm9fb3BlcmF0aW9ucyA9IHsKLQkub3BlbgkJPSBkZXZpbmZvX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgdm1zdGF0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZ2bXN0YXRfb3ApOwotfQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY192bXN0YXRfZmlsZV9vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHZtc3RhdF9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi0jaWZkZWYgQ09ORklHX1BST0NfSEFSRFdBUkUKLXN0YXRpYyBpbnQgaGFyZHdhcmVfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCWludCBsZW4gPSBnZXRfaGFyZHdhcmVfbGlzdChwYWdlKTsKLQlyZXR1cm4gcHJvY19jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NUUkFNX1BST0MKLXN0YXRpYyBpbnQgc3RyYW1fcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCWludCBsZW4gPSBnZXRfc3RyYW1fbGlzdChwYWdlKTsKLQlyZXR1cm4gcHJvY19jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0JMT0NLCi1zdGF0aWMgaW50IHBhcnRpdGlvbnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnBhcnRpdGlvbnNfb3ApOwotfQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYXJ0aXRpb25zX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gcGFydGl0aW9uc19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IGRpc2tzdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmZGlza3N0YXRzX29wKTsKLX0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZGlza3N0YXRzX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gZGlza3N0YXRzX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NT0RVTEVTCi1leHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIG1vZHVsZXNfb3A7Ci1zdGF0aWMgaW50IG1vZHVsZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJm1vZHVsZXNfb3ApOwotfQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tb2R1bGVzX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gbW9kdWxlc19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfU0xBQklORk8KLXN0YXRpYyBpbnQgc2xhYmluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNsYWJpbmZvX29wKTsKLX0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc2xhYmluZm9fb3BlcmF0aW9ucyA9IHsKLQkub3BlbgkJPSBzbGFiaW5mb19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS53cml0ZQkJPSBzbGFiaW5mb193cml0ZSwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAotfTsKLQotI2lmZGVmIENPTkZJR19ERUJVR19TTEFCX0xFQUsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2xhYnN0YXRzX29wOwotc3RhdGljIGludCBzbGFic3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQl1bnNpZ25lZCBsb25nICpuID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWludCByZXQgPSAtRU5PTUVNOwotCWlmIChuKSB7Ci0JCXJldCA9IHNlcV9vcGVuKGZpbGUsICZzbGFic3RhdHNfb3ApOwotCQlpZiAoIXJldCkgewotCQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQkJKm4gPSBQQUdFX1NJWkUgLyAoMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JCQltLT5wcml2YXRlID0gbjsKLQkJCW4gPSBOVUxMOwotCQl9Ci0JCWtmcmVlKG4pOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3NsYWJzdGF0c19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHNsYWJzdGF0c19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKLX07Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01NVQotc3RhdGljIGludCB2bWFsbG9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JdW5zaWduZWQgaW50ICpwdHIgPSBOVUxMOwotCWludCByZXQ7Ci0KLQlpZiAoTlVNQV9CVUlMRCkKLQkJcHRyID0ga21hbGxvYyhucl9ub2RlX2lkcyAqIHNpemVvZih1bnNpZ25lZCBpbnQpLCBHRlBfS0VSTkVMKTsKLQlyZXQgPSBzZXFfb3BlbihmaWxlLCAmdm1hbGxvY19vcCk7Ci0JaWYgKCFyZXQpIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQltLT5wcml2YXRlID0gcHRyOwotCX0gZWxzZQotCQlrZnJlZShwdHIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfdm1hbGxvY19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHZtYWxsb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCi19OwotI2VuZGlmCi0KLSNpZm5kZWYgYXJjaF9pcnFfc3RhdF9jcHUKLSNkZWZpbmUgYXJjaF9pcnFfc3RhdF9jcHUoY3B1KSAwCi0jZW5kaWYKLSNpZm5kZWYgYXJjaF9pcnFfc3RhdAotI2RlZmluZSBhcmNoX2lycV9zdGF0KCkgMAotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc2hvd19zdGF0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGppZjsKLQljcHV0aW1lNjRfdCB1c2VyLCBuaWNlLCBzeXN0ZW0sIGlkbGUsIGlvd2FpdCwgaXJxLCBzb2Z0aXJxLCBzdGVhbDsKLQljcHV0aW1lNjRfdCBndWVzdDsKLQl1NjQgc3VtID0gMDsKLQlzdHJ1Y3QgdGltZXNwZWMgYm9vdHRpbWU7Ci0JdW5zaWduZWQgaW50ICpwZXJfaXJxX3N1bTsKLQotCXBlcl9pcnFfc3VtID0ga3phbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSpOUl9JUlFTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBlcl9pcnFfc3VtKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXVzZXIgPSBuaWNlID0gc3lzdGVtID0gaWRsZSA9IGlvd2FpdCA9Ci0JCWlycSA9IHNvZnRpcnEgPSBzdGVhbCA9IGNwdXRpbWU2NF96ZXJvOwotCWd1ZXN0ID0gY3B1dGltZTY0X3plcm87Ci0JZ2V0Ym9vdHRpbWUoJmJvb3R0aW1lKTsKLQlqaWYgPSBib290dGltZS50dl9zZWM7Ci0KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlpbnQgajsKLQotCQl1c2VyID0gY3B1dGltZTY0X2FkZCh1c2VyLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC51c2VyKTsKLQkJbmljZSA9IGNwdXRpbWU2NF9hZGQobmljZSwga3N0YXRfY3B1KGkpLmNwdXN0YXQubmljZSk7Ci0JCXN5c3RlbSA9IGNwdXRpbWU2NF9hZGQoc3lzdGVtLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zeXN0ZW0pOwotCQlpZGxlID0gY3B1dGltZTY0X2FkZChpZGxlLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5pZGxlKTsKLQkJaW93YWl0ID0gY3B1dGltZTY0X2FkZChpb3dhaXQsIGtzdGF0X2NwdShpKS5jcHVzdGF0Lmlvd2FpdCk7Ci0JCWlycSA9IGNwdXRpbWU2NF9hZGQoaXJxLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5pcnEpOwotCQlzb2Z0aXJxID0gY3B1dGltZTY0X2FkZChzb2Z0aXJxLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zb2Z0aXJxKTsKLQkJc3RlYWwgPSBjcHV0aW1lNjRfYWRkKHN0ZWFsLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zdGVhbCk7Ci0JCWd1ZXN0ID0gY3B1dGltZTY0X2FkZChndWVzdCwga3N0YXRfY3B1KGkpLmNwdXN0YXQuZ3Vlc3QpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdGVtcCA9IGtzdGF0X2NwdShpKS5pcnFzW2pdOwotCQkJc3VtICs9IHRlbXA7Ci0JCQlwZXJfaXJxX3N1bVtqXSArPSB0ZW1wOwotCQl9Ci0JCXN1bSArPSBhcmNoX2lycV9zdGF0X2NwdShpKTsKLQl9Ci0Jc3VtICs9IGFyY2hfaXJxX3N0YXQoKTsKLQotCXNlcV9wcmludGYocCwgImNwdSAgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHVcbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QodXNlciksCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QobmljZSksCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc3lzdGVtKSwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChpZGxlKSwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChpb3dhaXQpLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KGlycSksCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc29mdGlycSksCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc3RlYWwpLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KGd1ZXN0KSk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0KLQkJLyogQ29weSB2YWx1ZXMgaGVyZSB0byB3b3JrIGFyb3VuZCBnY2MtMi45NS4zLCBnY2MtMi45NiAqLwotCQl1c2VyID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQudXNlcjsKLQkJbmljZSA9IGtzdGF0X2NwdShpKS5jcHVzdGF0Lm5pY2U7Ci0JCXN5c3RlbSA9IGtzdGF0X2NwdShpKS5jcHVzdGF0LnN5c3RlbTsKLQkJaWRsZSA9IGtzdGF0X2NwdShpKS5jcHVzdGF0LmlkbGU7Ci0JCWlvd2FpdCA9IGtzdGF0X2NwdShpKS5jcHVzdGF0Lmlvd2FpdDsKLQkJaXJxID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQuaXJxOwotCQlzb2Z0aXJxID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQuc29mdGlycTsKLQkJc3RlYWwgPSBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zdGVhbDsKLQkJZ3Vlc3QgPSBrc3RhdF9jcHUoaSkuY3B1c3RhdC5ndWVzdDsKLQkJc2VxX3ByaW50ZihwLAotCQkJImNwdSVkICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1XG4iLAotCQkJaSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QodXNlciksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KG5pY2UpLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzeXN0ZW0pLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChpZGxlKSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoaW93YWl0KSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoaXJxKSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc29mdGlycSksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KHN0ZWFsKSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoZ3Vlc3QpKTsKLQl9Ci0Jc2VxX3ByaW50ZihwLCAiaW50ciAlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdW0pOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKLQkJc2VxX3ByaW50ZihwLCAiICV1IiwgcGVyX2lycV9zdW1baV0pOwotCi0Jc2VxX3ByaW50ZihwLAotCQkiXG5jdHh0ICVsbHVcbiIKLQkJImJ0aW1lICVsdVxuIgotCQkicHJvY2Vzc2VzICVsdVxuIgotCQkicHJvY3NfcnVubmluZyAlbHVcbiIKLQkJInByb2NzX2Jsb2NrZWQgJWx1XG4iLAotCQlucl9jb250ZXh0X3N3aXRjaGVzKCksCi0JCSh1bnNpZ25lZCBsb25nKWppZiwKLQkJdG90YWxfZm9ya3MsCi0JCW5yX3J1bm5pbmcoKSwKLQkJbnJfaW93YWl0KCkpOwotCi0Ja2ZyZWUocGVyX2lycV9zdW0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0YXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQl1bnNpZ25lZCBzaXplID0gNDA5NiAqICgxICsgbnVtX3Bvc3NpYmxlX2NwdXMoKSAvIDMyKTsKLQljaGFyICpidWY7Ci0Jc3RydWN0IHNlcV9maWxlICptOwotCWludCByZXM7Ci0KLQkvKiBkb24ndCBhc2sgZm9yIG1vcmUgdGhhbiB0aGUga21hbGxvYygpIG1heCBzaXplLCBjdXJyZW50bHkgMTI4IEtCICovCi0JaWYgKHNpemUgPiAxMjggKiAxMDI0KQotCQlzaXplID0gMTI4ICogMTAyNDsKLQlidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJlcyA9IHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfc3RhdCwgTlVMTCk7Ci0JaWYgKCFyZXMpIHsKLQkJbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJbS0+YnVmID0gYnVmOwotCQltLT5zaXplID0gc2l6ZTsKLQl9IGVsc2UKLQkJa2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmVzOwotfQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zdGF0X29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gc3RhdF9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi0vKgotICogL3Byb2MvaW50ZXJydXB0cwotICovCi1zdGF0aWMgdm9pZCAqaW50X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiAoKnBvcyA8PSBOUl9JUlFTKSA/IHBvcyA6IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkICppbnRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQkoKnBvcykrKzsKLQlpZiAoKnBvcyA+IE5SX0lSUVMpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBwb3M7Ci19Ci0KLXN0YXRpYyB2b2lkIGludF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCi17Ci0JLyogTm90aGluZyB0byBkbyAqLwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW50X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ID0gaW50X3NlcV9zdGFydCwKLQkubmV4dCAgPSBpbnRfc2VxX25leHQsCi0JLnN0b3AgID0gaW50X3NlcV9zdG9wLAotCS5zaG93ICA9IHNob3dfaW50ZXJydXB0cwotfTsKLQotc3RhdGljIGludCBpbnRlcnJ1cHRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbHAsICZpbnRfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfaW50ZXJydXB0c19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGludGVycnVwdHNfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBmaWxlc3lzdGVtc19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbiA9IGdldF9maWxlc3lzdGVtX2xpc3QocGFnZSk7Ci0JcmV0dXJuIHByb2NfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbnQgY21kbGluZV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbjsKLQotCWxlbiA9IHNwcmludGYocGFnZSwgIiVzXG4iLCBzYXZlZF9jb21tYW5kX2xpbmUpOwotCXJldHVybiBwcm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwotfQotCi0jaWZkZWYgQ09ORklHX0ZJTEVfTE9DS0lORwotc3RhdGljIGludCBsb2Nrc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXJldHVybiBzZXFfb3BlbihmaWxwLCAmbG9ja3Nfc2VxX29wZXJhdGlvbnMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2xvY2tzX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gbG9ja3Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAotfTsKLSNlbmRpZiAvKiBDT05GSUdfRklMRV9MT0NLSU5HICovCi0KLXN0YXRpYyBpbnQgZXhlY2RvbWFpbnNfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCWludCBsZW4gPSBnZXRfZXhlY19kb21haW5fbGlzdChwYWdlKTsKLQlyZXR1cm4gcHJvY19jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKLX0KLQotI2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUgotI2RlZmluZSBLUE1TSVpFIHNpemVvZih1NjQpCi0jZGVmaW5lIEtQTU1BU0sgKEtQTVNJWkUgLSAxKQotLyogL3Byb2Mva3BhZ2Vjb3VudCAtIGFuIGFycmF5IGV4cG9zaW5nIHBhZ2UgY291bnRzCi0gKgotICogRWFjaCBlbnRyeSBpcyBhIHU2NCByZXByZXNlbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcKLSAqIHBoeXNpY2FsIHBhZ2UgY291bnQuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGtwYWdlY291bnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JdTY0IF9fdXNlciAqb3V0ID0gKHU2NCBfX3VzZXIgKilidWY7Ci0Jc3RydWN0IHBhZ2UgKnBwYWdlOwotCXVuc2lnbmVkIGxvbmcgc3JjID0gKnBwb3M7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0Jc3NpemVfdCByZXQgPSAwOwotCXU2NCBwY291bnQ7Ci0KLQlwZm4gPSBzcmMgLyBLUE1TSVpFOwotCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgKG1heF9wZm4gKiBLUE1TSVpFKSAtIHNyYyk7Ci0JaWYgKHNyYyAmIEtQTU1BU0sgfHwgY291bnQgJiBLUE1NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJcHBhZ2UgPSBOVUxMOwotCQlpZiAocGZuX3ZhbGlkKHBmbikpCi0JCQlwcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCXBmbisrOwotCQlpZiAoIXBwYWdlKQotCQkJcGNvdW50ID0gMDsKLQkJZWxzZQotCQkJcGNvdW50ID0gcGFnZV9tYXBjb3VudChwcGFnZSk7Ci0KLQkJaWYgKHB1dF91c2VyKHBjb3VudCwgb3V0KyspKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljb3VudCAtPSBLUE1TSVpFOwotCX0KLQotCSpwcG9zICs9IChjaGFyIF9fdXNlciAqKW91dCAtIGJ1ZjsKLQlpZiAoIXJldCkKLQkJcmV0ID0gKGNoYXIgX191c2VyICopb3V0IC0gYnVmOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfa3BhZ2Vjb3VudF9vcGVyYXRpb25zID0gewotCS5sbHNlZWsgPSBtZW1fbHNlZWssCi0JLnJlYWQgPSBrcGFnZWNvdW50X3JlYWQsCi19OwotCi0vKiAvcHJvYy9rcGFnZWZsYWdzIC0gYW4gYXJyYXkgZXhwb3NpbmcgcGFnZSBmbGFncwotICoKLSAqIEVhY2ggZW50cnkgaXMgYSB1NjQgcmVwcmVzZW50aW5nIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBwaHlzaWNhbCBwYWdlIGZsYWdzLgotICovCi0KLS8qIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0byBkZWNvdXBsZSBpbnRlcm5hbCBmbGFncyBmcm9tIGV4cG9ydGVkIG9uZXMgKi8KLQotI2RlZmluZSBLUEZfTE9DS0VEICAgICAwCi0jZGVmaW5lIEtQRl9FUlJPUiAgICAgIDEKLSNkZWZpbmUgS1BGX1JFRkVSRU5DRUQgMgotI2RlZmluZSBLUEZfVVBUT0RBVEUgICAzCi0jZGVmaW5lIEtQRl9ESVJUWSAgICAgIDQKLSNkZWZpbmUgS1BGX0xSVSAgICAgICAgNQotI2RlZmluZSBLUEZfQUNUSVZFICAgICA2Ci0jZGVmaW5lIEtQRl9TTEFCICAgICAgIDcKLSNkZWZpbmUgS1BGX1dSSVRFQkFDSyAgOAotI2RlZmluZSBLUEZfUkVDTEFJTSAgICA5Ci0jZGVmaW5lIEtQRl9CVUREWSAgICAgMTAKLQotI2RlZmluZSBrcGZfY29weV9iaXQoZmxhZ3MsIHNyY3BvcywgZHN0cG9zKSAoKChmbGFncyA+PiBzcmNwb3MpICYgMSkgPDwgZHN0cG9zKQotCi1zdGF0aWMgc3NpemVfdCBrcGFnZWZsYWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXU2NCBfX3VzZXIgKm91dCA9ICh1NjQgX191c2VyICopYnVmOwotCXN0cnVjdCBwYWdlICpwcGFnZTsKLQl1bnNpZ25lZCBsb25nIHNyYyA9ICpwcG9zOwotCXVuc2lnbmVkIGxvbmcgcGZuOwotCXNzaXplX3QgcmV0ID0gMDsKLQl1NjQga2ZsYWdzLCB1ZmxhZ3M7Ci0KLQlwZm4gPSBzcmMgLyBLUE1TSVpFOwotCWNvdW50ID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIChtYXhfcGZuICogS1BNU0laRSkgLSBzcmMpOwotCWlmIChzcmMgJiBLUE1NQVNLIHx8IGNvdW50ICYgS1BNTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCXBwYWdlID0gTlVMTDsKLQkJaWYgKHBmbl92YWxpZChwZm4pKQotCQkJcHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlwZm4rKzsKLQkJaWYgKCFwcGFnZSkKLQkJCWtmbGFncyA9IDA7Ci0JCWVsc2UKLQkJCWtmbGFncyA9IHBwYWdlLT5mbGFnczsKLQotCQl1ZmxhZ3MgPSBrcGZfY29weV9iaXQoS1BGX0xPQ0tFRCwgUEdfbG9ja2VkLCBrZmxhZ3MpIHwKLQkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9FUlJPUiwgUEdfZXJyb3IpIHwKLQkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9SRUZFUkVOQ0VELCBQR19yZWZlcmVuY2VkKSB8Ci0JCQlrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfVVBUT0RBVEUsIFBHX3VwdG9kYXRlKSB8Ci0JCQlrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfRElSVFksIFBHX2RpcnR5KSB8Ci0JCQlrcGZfY29weV9iaXQoa2ZsYWdzLCBLUEZfTFJVLCBQR19scnUpIHwKLQkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9BQ1RJVkUsIFBHX2FjdGl2ZSkgfAotCQkJa3BmX2NvcHlfYml0KGtmbGFncywgS1BGX1NMQUIsIFBHX3NsYWIpIHwKLQkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9XUklURUJBQ0ssIFBHX3dyaXRlYmFjaykgfAotCQkJa3BmX2NvcHlfYml0KGtmbGFncywgS1BGX1JFQ0xBSU0sIFBHX3JlY2xhaW0pIHwKLQkJCWtwZl9jb3B5X2JpdChrZmxhZ3MsIEtQRl9CVUREWSwgUEdfYnVkZHkpOwotCi0JCWlmIChwdXRfdXNlcih1ZmxhZ3MsIG91dCsrKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY291bnQgLT0gS1BNU0laRTsKLQl9Ci0KLQkqcHBvcyArPSAoY2hhciBfX3VzZXIgKilvdXQgLSBidWY7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IChjaGFyIF9fdXNlciAqKW91dCAtIGJ1ZjsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2twYWdlZmxhZ3Nfb3BlcmF0aW9ucyA9IHsKLQkubGxzZWVrID0gbWVtX2xzZWVrLAotCS5yZWFkID0ga3BhZ2VmbGFnc19yZWFkLAotfTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi8KLQotc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3Rfa2NvcmU7Ci0KLXZvaWQgX19pbml0IHByb2NfbWlzY19pbml0KHZvaWQpCi17Ci0Jc3RhdGljIHN0cnVjdCB7Ci0JCWNoYXIgKm5hbWU7Ci0JCWludCAoKnJlYWRfcHJvYykoY2hhciosY2hhcioqLG9mZl90LGludCxpbnQqLHZvaWQqKTsKLQl9ICpwLCBzaW1wbGVfb25lc1tdID0gewotCQl7ImxvYWRhdmciLCAgICAgbG9hZGF2Z19yZWFkX3Byb2N9LAotCQl7InVwdGltZSIsCXVwdGltZV9yZWFkX3Byb2N9LAotCQl7Im1lbWluZm8iLAltZW1pbmZvX3JlYWRfcHJvY30sCi0JCXsidmVyc2lvbiIsCXZlcnNpb25fcmVhZF9wcm9jfSwKLSNpZmRlZiBDT05GSUdfUFJPQ19IQVJEV0FSRQotCQl7ImhhcmR3YXJlIiwJaGFyZHdhcmVfcmVhZF9wcm9jfSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TVFJBTV9QUk9DCi0JCXsic3RyYW0iLAlzdHJhbV9yZWFkX3Byb2N9LAotI2VuZGlmCi0JCXsiZmlsZXN5c3RlbXMiLAlmaWxlc3lzdGVtc19yZWFkX3Byb2N9LAotCQl7ImNtZGxpbmUiLAljbWRsaW5lX3JlYWRfcHJvY30sCi0JCXsiZXhlY2RvbWFpbnMiLAlleGVjZG9tYWluc19yZWFkX3Byb2N9LAotCQl7TlVMTCx9Ci0JfTsKLQlmb3IgKHAgPSBzaW1wbGVfb25lczsgcC0+bmFtZTsgcCsrKQotCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHAtPm5hbWUsIDAsIE5VTEwsIHAtPnJlYWRfcHJvYywgTlVMTCk7Ci0KLQlwcm9jX3N5bWxpbmsoIm1vdW50cyIsIE5VTEwsICJzZWxmL21vdW50cyIpOwotCi0JLyogQW5kIG5vdyBmb3IgdHJpY2tpZXIgb25lcyAqLwotI2lmZGVmIENPTkZJR19QUklOVEsKLQlwcm9jX2NyZWF0ZSgia21zZyIsIFNfSVJVU1IsIE5VTEwsICZwcm9jX2ttc2dfb3BlcmF0aW9ucyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRklMRV9MT0NLSU5HCi0JcHJvY19jcmVhdGUoImxvY2tzIiwgMCwgTlVMTCwgJnByb2NfbG9ja3Nfb3BlcmF0aW9ucyk7Ci0jZW5kaWYKLQlwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsIDAsIE5VTEwsICZwcm9jX2RldmluZm9fb3BlcmF0aW9ucyk7Ci0JcHJvY19jcmVhdGUoImNwdWluZm8iLCAwLCBOVUxMLCAmcHJvY19jcHVpbmZvX29wZXJhdGlvbnMpOwotI2lmZGVmIENPTkZJR19CTE9DSwotCXByb2NfY3JlYXRlKCJwYXJ0aXRpb25zIiwgMCwgTlVMTCwgJnByb2NfcGFydGl0aW9uc19vcGVyYXRpb25zKTsKLSNlbmRpZgotCXByb2NfY3JlYXRlKCJzdGF0IiwgMCwgTlVMTCwgJnByb2Nfc3RhdF9vcGVyYXRpb25zKTsKLQlwcm9jX2NyZWF0ZSgiaW50ZXJydXB0cyIsIDAsIE5VTEwsICZwcm9jX2ludGVycnVwdHNfb3BlcmF0aW9ucyk7Ci0jaWZkZWYgQ09ORklHX1NMQUJJTkZPCi0JcHJvY19jcmVhdGUoInNsYWJpbmZvIixTX0lXVVNSfFNfSVJVR08sTlVMTCwmcHJvY19zbGFiaW5mb19vcGVyYXRpb25zKTsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0xBQl9MRUFLCi0JcHJvY19jcmVhdGUoInNsYWJfYWxsb2NhdG9ycyIsIDAsIE5VTEwsICZwcm9jX3NsYWJzdGF0c19vcGVyYXRpb25zKTsKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01NVQotCXByb2NfY3JlYXRlKCJ2bWFsbG9jaW5mbyIsIFNfSVJVU1IsIE5VTEwsICZwcm9jX3ZtYWxsb2Nfb3BlcmF0aW9ucyk7Ci0jZW5kaWYKLQlwcm9jX2NyZWF0ZSgiYnVkZHlpbmZvIiwgU19JUlVHTywgTlVMTCwgJmZyYWdtZW50YXRpb25fZmlsZV9vcGVyYXRpb25zKTsKLQlwcm9jX2NyZWF0ZSgicGFnZXR5cGVpbmZvIiwgU19JUlVHTywgTlVMTCwgJnBhZ2V0eXBlaW5mb19maWxlX29wcyk7Ci0JcHJvY19jcmVhdGUoInZtc3RhdCIsIFNfSVJVR08sIE5VTEwsICZwcm9jX3Ztc3RhdF9maWxlX29wZXJhdGlvbnMpOwotCXByb2NfY3JlYXRlKCJ6b25laW5mbyIsIFNfSVJVR08sIE5VTEwsICZwcm9jX3pvbmVpbmZvX2ZpbGVfb3BlcmF0aW9ucyk7Ci0jaWZkZWYgQ09ORklHX0JMT0NLCi0JcHJvY19jcmVhdGUoImRpc2tzdGF0cyIsIDAsIE5VTEwsICZwcm9jX2Rpc2tzdGF0c19vcGVyYXRpb25zKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0JcHJvY19jcmVhdGUoIm1vZHVsZXMiLCAwLCBOVUxMLCAmcHJvY19tb2R1bGVzX29wZXJhdGlvbnMpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQlwcm9jX2NyZWF0ZSgic2NoZWRzdGF0IiwgMCwgTlVMTCwgJnByb2Nfc2NoZWRzdGF0X29wZXJhdGlvbnMpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST0NfS0NPUkUKLQlwcm9jX3Jvb3Rfa2NvcmUgPSBwcm9jX2NyZWF0ZSgia2NvcmUiLCBTX0lSVVNSLCBOVUxMLCAmcHJvY19rY29yZV9vcGVyYXRpb25zKTsKLQlpZiAocHJvY19yb290X2tjb3JlKQotCQlwcm9jX3Jvb3Rfa2NvcmUtPnNpemUgPQotCQkJCShzaXplX3QpaGlnaF9tZW1vcnkgLSBQQUdFX09GRlNFVCArIFBBR0VfU0laRTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUgotCXByb2NfY3JlYXRlKCJrcGFnZWNvdW50IiwgU19JUlVTUiwgTlVMTCwgJnByb2Nfa3BhZ2Vjb3VudF9vcGVyYXRpb25zKTsKLQlwcm9jX2NyZWF0ZSgia3BhZ2VmbGFncyIsIFNfSVJVU1IsIE5VTEwsICZwcm9jX2twYWdlZmxhZ3Nfb3BlcmF0aW9ucyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKLQlwcm9jX3ZtY29yZSA9IHByb2NfY3JlYXRlKCJ2bWNvcmUiLCBTX0lSVVNSLCBOVUxMLCAmcHJvY192bWNvcmVfb3BlcmF0aW9ucyk7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19zeXNjdGwuYyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwppbmRleCA5NDVhODEwLi45NGZjZmZmIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKKysrIGIvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIC9wcm9jL3N5cyBzdXBwb3J0CiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KQEAgLTI5OCwxMyArMjk4LDE5IEBACiAJICogc3lzY3RsIGVudHJpZXMgdGhhdCBhcmUgbm90IHdyaXRlYWJsZSwKIAkgKiBhcmUgX05PVF8gd3JpdGVhYmxlLCBjYXBhYmlsaXRpZXMgb3Igbm90LgogCSAqLwotCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkID0gZ3JhYl9oZWFkZXIoaW5vZGUpOwotCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gUFJPQ19JKGlub2RlKS0+c3lzY3RsX2VudHJ5OworCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkOworCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCWludCBlcnJvcjsKIAorCS8qIEV4ZWN1dGFibGUgZmlsZXMgYXJlIG5vdCBhbGxvd2VkIHVuZGVyIC9wcm9jL3N5cy8gKi8KKwlpZiAoKG1hc2sgJiBNQVlfRVhFQykgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwloZWFkID0gZ3JhYl9oZWFkZXIoaW5vZGUpOwogCWlmIChJU19FUlIoaGVhZCkpCiAJCXJldHVybiBQVFJfRVJSKGhlYWQpOwogCisJdGFibGUgPSBQUk9DX0koaW5vZGUpLT5zeXNjdGxfZW50cnk7CiAJaWYgKCF0YWJsZSkgLyogZ2xvYmFsIHJvb3QgLSByLXhyLXhyLXggKi8KIAkJZXJyb3IgPSBtYXNrICYgTUFZX1dSSVRFID8gLUVBQ0NFUyA6IDA7CiAJZWxzZSAvKiBVc2UgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBzeXNjdGwgdGFibGUgZW50cnkgKi8KQEAgLTM1Myw2ICszNTksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3N5c19kaXJfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkZGlyCT0gcHJvY19zeXNfcmVhZGRpciwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19zeXNfaW5vZGVfb3BlcmF0aW9ucyA9IHsKQEAgLTM5NSw3ICs0MDIsNyBAQAogCS5kX2NvbXBhcmUJPSBwcm9jX3N5c19jb21wYXJlLAogfTsKIAotaW50IHByb2Nfc3lzX2luaXQodm9pZCkKK2ludCBfX2luaXQgcHJvY19zeXNfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19zeXNfcm9vdDsKIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9yb290LmMgYi9mcy9wcm9jL3Jvb3QuYwppbmRleCA5NTExNzUzLi43NzYxNjAyIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Jvb3QuYworKysgYi9mcy9wcm9jL3Jvb3QuYwpAQCAtMTA0LDkgKzEwNCw5IEBACiAKIHZvaWQgX19pbml0IHByb2Nfcm9vdF9pbml0KHZvaWQpCiB7Ci0JaW50IGVyciA9IHByb2NfaW5pdF9pbm9kZWNhY2hlKCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuOworCWludCBlcnI7CisKKwlwcm9jX2luaXRfaW5vZGVjYWNoZSgpOwogCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnByb2NfZnNfdHlwZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuOwpAQCAtMTE3LDcgKzExNyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlwcm9jX21pc2NfaW5pdCgpOworCXByb2Nfc3ltbGluaygibW91bnRzIiwgTlVMTCwgInNlbGYvbW91bnRzIik7CiAKIAlwcm9jX25ldF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvc3RhdC5jIGIvZnMvcHJvYy9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5MDRmMAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3Byb2Mvc3RhdC5jCkBAIC0wLDAgKzEsMTUzIEBACisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9jcHV0aW1lLmg+CisKKyNpZm5kZWYgYXJjaF9pcnFfc3RhdF9jcHUKKyNkZWZpbmUgYXJjaF9pcnFfc3RhdF9jcHUoY3B1KSAwCisjZW5kaWYKKyNpZm5kZWYgYXJjaF9pcnFfc3RhdAorI2RlZmluZSBhcmNoX2lycV9zdGF0KCkgMAorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2hvd19zdGF0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBsb25nIGppZjsKKwljcHV0aW1lNjRfdCB1c2VyLCBuaWNlLCBzeXN0ZW0sIGlkbGUsIGlvd2FpdCwgaXJxLCBzb2Z0aXJxLCBzdGVhbDsKKwljcHV0aW1lNjRfdCBndWVzdDsKKwl1NjQgc3VtID0gMDsKKwlzdHJ1Y3QgdGltZXNwZWMgYm9vdHRpbWU7CisJdW5zaWduZWQgaW50IHBlcl9pcnFfc3VtOworCisJdXNlciA9IG5pY2UgPSBzeXN0ZW0gPSBpZGxlID0gaW93YWl0ID0KKwkJaXJxID0gc29mdGlycSA9IHN0ZWFsID0gY3B1dGltZTY0X3plcm87CisJZ3Vlc3QgPSBjcHV0aW1lNjRfemVybzsKKwlnZXRib290dGltZSgmYm9vdHRpbWUpOworCWppZiA9IGJvb3R0aW1lLnR2X3NlYzsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXVzZXIgPSBjcHV0aW1lNjRfYWRkKHVzZXIsIGtzdGF0X2NwdShpKS5jcHVzdGF0LnVzZXIpOworCQluaWNlID0gY3B1dGltZTY0X2FkZChuaWNlLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5uaWNlKTsKKwkJc3lzdGVtID0gY3B1dGltZTY0X2FkZChzeXN0ZW0sIGtzdGF0X2NwdShpKS5jcHVzdGF0LnN5c3RlbSk7CisJCWlkbGUgPSBjcHV0aW1lNjRfYWRkKGlkbGUsIGtzdGF0X2NwdShpKS5jcHVzdGF0LmlkbGUpOworCQlpb3dhaXQgPSBjcHV0aW1lNjRfYWRkKGlvd2FpdCwga3N0YXRfY3B1KGkpLmNwdXN0YXQuaW93YWl0KTsKKwkJaXJxID0gY3B1dGltZTY0X2FkZChpcnEsIGtzdGF0X2NwdShpKS5jcHVzdGF0LmlycSk7CisJCXNvZnRpcnEgPSBjcHV0aW1lNjRfYWRkKHNvZnRpcnEsIGtzdGF0X2NwdShpKS5jcHVzdGF0LnNvZnRpcnEpOworCQlzdGVhbCA9IGNwdXRpbWU2NF9hZGQoc3RlYWwsIGtzdGF0X2NwdShpKS5jcHVzdGF0LnN0ZWFsKTsKKwkJZ3Vlc3QgPSBjcHV0aW1lNjRfYWRkKGd1ZXN0LCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5ndWVzdCk7CisKKwkJZm9yX2VhY2hfaXJxX25yKGopCisJCQlzdW0gKz0ga3N0YXRfaXJxc19jcHUoaiwgaSk7CisKKwkJc3VtICs9IGFyY2hfaXJxX3N0YXRfY3B1KGkpOworCX0KKwlzdW0gKz0gYXJjaF9pcnFfc3RhdCgpOworCisJc2VxX3ByaW50ZihwLCAiY3B1ICAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdVxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdCh1c2VyKSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChuaWNlKSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzeXN0ZW0pLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KGlkbGUpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KGlvd2FpdCksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoaXJxKSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzb2Z0aXJxKSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzdGVhbCksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoZ3Vlc3QpKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKworCQkvKiBDb3B5IHZhbHVlcyBoZXJlIHRvIHdvcmsgYXJvdW5kIGdjYy0yLjk1LjMsIGdjYy0yLjk2ICovCisJCXVzZXIgPSBrc3RhdF9jcHUoaSkuY3B1c3RhdC51c2VyOworCQluaWNlID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQubmljZTsKKwkJc3lzdGVtID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQuc3lzdGVtOworCQlpZGxlID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQuaWRsZTsKKwkJaW93YWl0ID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQuaW93YWl0OworCQlpcnEgPSBrc3RhdF9jcHUoaSkuY3B1c3RhdC5pcnE7CisJCXNvZnRpcnEgPSBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zb2Z0aXJxOworCQlzdGVhbCA9IGtzdGF0X2NwdShpKS5jcHVzdGF0LnN0ZWFsOworCQlndWVzdCA9IGtzdGF0X2NwdShpKS5jcHVzdGF0Lmd1ZXN0OworCQlzZXFfcHJpbnRmKHAsCisJCQkiY3B1JWQgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHVcbiIsCisJCQlpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdCh1c2VyKSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QobmljZSksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KHN5c3RlbSksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KGlkbGUpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChpb3dhaXQpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChpcnEpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzb2Z0aXJxKSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc3RlYWwpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChndWVzdCkpOworCX0KKwlzZXFfcHJpbnRmKHAsICJpbnRyICVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXN1bSk7CisKKwkvKiBzdW0gYWdhaW4gPyBpdCBjb3VsZCBiZSB1cGRhdGVkPyAqLworCWZvcl9lYWNoX2lycV9ucihqKSB7CisJCXBlcl9pcnFfc3VtID0gMDsKKworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJCXBlcl9pcnFfc3VtICs9IGtzdGF0X2lycXNfY3B1KGosIGkpOworCisJCXNlcV9wcmludGYocCwgIiAldSIsIHBlcl9pcnFfc3VtKTsKKwl9CisKKwlzZXFfcHJpbnRmKHAsCisJCSJcbmN0eHQgJWxsdVxuIgorCQkiYnRpbWUgJWx1XG4iCisJCSJwcm9jZXNzZXMgJWx1XG4iCisJCSJwcm9jc19ydW5uaW5nICVsdVxuIgorCQkicHJvY3NfYmxvY2tlZCAlbHVcbiIsCisJCW5yX2NvbnRleHRfc3dpdGNoZXMoKSwKKwkJKHVuc2lnbmVkIGxvbmcpamlmLAorCQl0b3RhbF9mb3JrcywKKwkJbnJfcnVubmluZygpLAorCQlucl9pb3dhaXQoKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGF0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgc2l6ZSA9IDQwOTYgKiAoMSArIG51bV9wb3NzaWJsZV9jcHVzKCkgLyAzMik7CisJY2hhciAqYnVmOworCXN0cnVjdCBzZXFfZmlsZSAqbTsKKwlpbnQgcmVzOworCisJLyogZG9uJ3QgYXNrIGZvciBtb3JlIHRoYW4gdGhlIGttYWxsb2MoKSBtYXggc2l6ZSwgY3VycmVudGx5IDEyOCBLQiAqLworCWlmIChzaXplID4gMTI4ICogMTAyNCkKKwkJc2l6ZSA9IDEyOCAqIDEwMjQ7CisJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3N0YXQsIE5VTEwpOworCWlmICghcmVzKSB7CisJCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCW0tPmJ1ZiA9IGJ1ZjsKKwkJbS0+c2l6ZSA9IHNpemU7CisJfSBlbHNlCisJCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zdGF0X29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gc3RhdF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX3N0YXRfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJzdGF0IiwgMCwgTlVMTCwgJnByb2Nfc3RhdF9vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHByb2Nfc3RhdF9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA0ODA2ODMwLi5iNzcwYzA5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0xOTgsMTEgKzE5OCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzaG93X21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCitzdGF0aWMgdm9pZCBzaG93X21hcF92bWEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLT5wcml2YXRlOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IHByaXYtPnRhc2s7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKIAlpbnQgZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwpAQCAtMjU0LDYgKzI1MSwxNSBAQAogCQl9CiAJfQogCXNlcV9wdXRjKG0sICdcbicpOworfQorCitzdGF0aWMgaW50IHNob3dfbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHY7CisJc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBwcml2LT50YXNrOworCisJc2hvd19tYXBfdm1hKG0sIHZtYSk7CiAKIAlpZiAobS0+Y291bnQgPCBtLT5zaXplKSAgLyogdm1hIGlzIGNvcGllZCBzdWNjZXNzZnVsbHkgKi8KIAkJbS0+dmVyc2lvbiA9ICh2bWEgIT0gZ2V0X2dhdGVfdm1hKHRhc2spKT8gdm1hLT52bV9zdGFydDogMDsKQEAgLTM2NCw5ICszNzAsMTAgQEAKIAogc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tPnByaXZhdGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gcHJpdi0+dGFzazsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHY7CiAJc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zczsKLQlpbnQgcmV0OwogCXN0cnVjdCBtbV93YWxrIHNtYXBzX3dhbGsgPSB7CiAJCS5wbWRfZW50cnkgPSBzbWFwc19wdGVfcmFuZ2UsCiAJCS5tbSA9IHZtYS0+dm1fbW0sCkBAIC0zNzgsOSArMzg1LDcgQEAKIAlpZiAodm1hLT52bV9tbSAmJiAhaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCiAJCXdhbGtfcGFnZV9yYW5nZSh2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgJnNtYXBzX3dhbGspOwogCi0JcmV0ID0gc2hvd19tYXAobSwgdik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlzaG93X21hcF92bWEobSwgdm1hKTsKIAogCXNlcV9wcmludGYobSwKIAkJICAgIlNpemU6ICAgICAgICAgICAlOGx1IGtCXG4iCkBAIC00MDIsNyArNDA3LDkgQEAKIAkJICAgbXNzLnJlZmVyZW5jZWQgPj4gMTAsCiAJCSAgIG1zcy5zd2FwID4+IDEwKTsKIAotCXJldHVybiByZXQ7CisJaWYgKG0tPmNvdW50IDwgbS0+c2l6ZSkgIC8qIHZtYSBpcyBjb3BpZWQgc3VjY2Vzc2Z1bGx5ICovCisJCW0tPnZlcnNpb24gPSAodm1hICE9IGdldF9nYXRlX3ZtYSh0YXNrKSkgPyB2bWEtPnZtX3N0YXJ0IDogMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19vcCA9IHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdXB0aW1lLmMgYi9mcy9wcm9jL3VwdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMTBhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9wcm9jL3VwdGltZS5jCkBAIC0wLDAgKzEsNDMgQEAKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgorCitzdGF0aWMgaW50IHVwdGltZV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CisJc3RydWN0IHRpbWVzcGVjIGlkbGU7CisJY3B1dGltZV90IGlkbGV0aW1lID0gY3B1dGltZV9hZGQoaW5pdF90YXNrLnV0aW1lLCBpbml0X3Rhc2suc3RpbWUpOworCisJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CisJbW9ub3RvbmljX3RvX2Jvb3RiYXNlZCgmdXB0aW1lKTsKKwljcHV0aW1lX3RvX3RpbWVzcGVjKGlkbGV0aW1lLCAmaWRsZSk7CisJc2VxX3ByaW50ZihtLCAiJWx1LiUwMmx1ICVsdS4lMDJsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKSB1cHRpbWUudHZfc2VjLAorCQkJKHVwdGltZS50dl9uc2VjIC8gKE5TRUNfUEVSX1NFQyAvIDEwMCkpLAorCQkJKHVuc2lnbmVkIGxvbmcpIGlkbGUudHZfc2VjLAorCQkJKGlkbGUudHZfbnNlYyAvIChOU0VDX1BFUl9TRUMgLyAxMDApKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXB0aW1lX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdXB0aW1lX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVwdGltZV9wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gdXB0aW1lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHJvY191cHRpbWVfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJ1cHRpbWUiLCAwLCBOVUxMLCAmdXB0aW1lX3Byb2NfZm9wcyk7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChwcm9jX3VwdGltZV9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdmVyc2lvbi5jIGIvZnMvcHJvYy92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4MTdhNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3Byb2MvdmVyc2lvbi5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisKK3N0YXRpYyBpbnQgdmVyc2lvbl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXNlcV9wcmludGYobSwgbGludXhfcHJvY19iYW5uZXIsCisJCXV0c25hbWUoKS0+c3lzbmFtZSwKKwkJdXRzbmFtZSgpLT5yZWxlYXNlLAorCQl1dHNuYW1lKCktPnZlcnNpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZlcnNpb25fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB2ZXJzaW9uX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fcHJvY19mb3BzID0geworCS5vcGVuCQk9IHZlcnNpb25fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZlcnNpb25faW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJ2ZXJzaW9uIiwgMCwgTlVMTCwgJnZlcnNpb25fcHJvY19mb3BzKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHByb2NfdmVyc2lvbl9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvdm1jb3JlLmMgYi9mcy9wcm9jL3ZtY29yZS5jCmluZGV4IDg0MTM2OGIuLjAzZWM1OTUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvdm1jb3JlLmMKKysrIGIvZnMvcHJvYy92bWNvcmUuYwpAQCAtMzIsMTAgKzMyLDcgQEAKIC8qIFRvdGFsIHNpemUgb2Ygdm1jb3JlIGZpbGUuICovCiBzdGF0aWMgdTY0IHZtY29yZV9zaXplOwogCi0vKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfdm1jb3JlID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfdm1jb3JlID0gTlVMTDsKIAogLyogUmVhZHMgYSBwYWdlIGZyb20gdGhlIG9sZG1lbSBkZXZpY2UgZnJvbSBnaXZlbiBvZmZzZXQuICovCiBzdGF0aWMgc3NpemVfdCByZWFkX2Zyb21fb2xkbWVtKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LApAQCAtMTY1LDcgKzE2Miw3IEBACiAJcmV0dXJuIGFjYzsKIH0KIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3ZtY29yZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY192bWNvcmVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZAkJPSByZWFkX3ZtY29yZSwKIH07CiAKQEAgLTY0Nyw3ICs2NDQsNyBAQAogCWludCByYyA9IDA7CiAKIAkvKiBJZiBlbGZjb3JlaGRyPSBoYXMgYmVlbiBwYXNzZWQgaW4gY21kbGluZSwgdGhlbiBjYXB0dXJlIHRoZSBkdW1wLiovCi0JaWYgKCEoZWxmY29yZWhkcl9hZGRyIDwgRUxGQ09SRV9BRERSX01BWCkpCisJaWYgKCEoaXNfdm1jb3JlX3VzYWJsZSgpKSkKIAkJcmV0dXJuIHJjOwogCXJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTsKIAlpZiAocmMpIHsKQEAgLTY1NSw3ICs2NTIsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JLyogSW5pdGlhbGl6ZSAvcHJvYy92bWNvcmUgc2l6ZSBpZiBwcm9jIGlzIGFscmVhZHkgdXAuICovCisJcHJvY192bWNvcmUgPSBwcm9jX2NyZWF0ZSgidm1jb3JlIiwgU19JUlVTUiwgTlVMTCwgJnByb2Nfdm1jb3JlX29wZXJhdGlvbnMpOwogCWlmIChwcm9jX3ZtY29yZSkKIAkJcHJvY192bWNvcmUtPnNpemUgPSB2bWNvcmVfc2l6ZTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCA1MTQ1Y2I5Li43NmFjZGJjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC0xMTIsMTIgKzExMiwxMiBAQAogCQkJZ290byBhZGRfZXJyb3I7CiAKIAkJaWYgKCFwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpKQotCQkJX19wYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCXJldHVybiAwOwogCiAgZnNpemVfZXhjZWVkZWQ6CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBiMTMxMjM0Li5mMDMxZDFjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmcmFtZnNfYW9wczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZyYW1mc19iYWNraW5nX2Rldl9pbmZvOwogCQltYXBwaW5nX3NldF9nZnBfbWFzayhpbm9kZS0+aV9tYXBwaW5nLCBHRlBfSElHSFVTRVIpOworCQltYXBwaW5nX3NldF91bmV2aWN0YWJsZShpbm9kZS0+aV9tYXBwaW5nKTsKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCA5YmE0OTVkLi45NjlhNmQ5IDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC0zMSwzOSArMzEsNjEgQEAKIAogRVhQT1JUX1NZTUJPTChnZW5lcmljX3JvX2ZvcHMpOwogCisvKioKKyAqIGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQgLSBsb2NrbGVzcyBnZW5lcmljIGxsc2VlayBpbXBsZW1lbnRhdGlvbgorICogQGZpbGU6CWZpbGUgc3RydWN0dXJlIHRvIHNlZWsgb24KKyAqIEBvZmZzZXQ6CWZpbGUgb2Zmc2V0IHRvIHNlZWsgdG8KKyAqIEBvcmlnaW46CXR5cGUgb2Ygc2VlaworICoKKyAqIFVwZGF0ZXMgdGhlIGZpbGUgb2Zmc2V0IHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQG9mZnNldCBhbmQgQG9yaWdpbi4KKyAqIExvY2tpbmcgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorICovCiBsb2ZmX3QKIGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCiB7Ci0JbG9mZl90IHJldHZhbDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwogCiAJc3dpdGNoIChvcmlnaW4pIHsKLQkJY2FzZSBTRUVLX0VORDoKLQkJCW9mZnNldCArPSBpbm9kZS0+aV9zaXplOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0VFS19DVVI6Ci0JCQlvZmZzZXQgKz0gZmlsZS0+Zl9wb3M7CisJY2FzZSBTRUVLX0VORDoKKwkJb2Zmc2V0ICs9IGlub2RlLT5pX3NpemU7CisJCWJyZWFrOworCWNhc2UgU0VFS19DVVI6CisJCW9mZnNldCArPSBmaWxlLT5mX3BvczsKKwkJYnJlYWs7CiAJfQotCXJldHZhbCA9IC1FSU5WQUw7Ci0JaWYgKG9mZnNldD49MCAmJiBvZmZzZXQ8PWlub2RlLT5pX3NiLT5zX21heGJ5dGVzKSB7Ci0JCS8qIFNwZWNpYWwgbG9jayBuZWVkZWQgaGVyZT8gKi8KLQkJaWYgKG9mZnNldCAhPSBmaWxlLT5mX3BvcykgewotCQkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7Ci0JCQlmaWxlLT5mX3ZlcnNpb24gPSAwOwotCQl9Ci0JCXJldHZhbCA9IG9mZnNldDsKKworCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGlub2RlLT5pX3NiLT5zX21heGJ5dGVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNwZWNpYWwgbG9jayBuZWVkZWQgaGVyZT8gKi8KKwlpZiAob2Zmc2V0ICE9IGZpbGUtPmZfcG9zKSB7CisJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OworCQlmaWxlLT5mX3ZlcnNpb24gPSAwOwogCX0KLQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIG9mZnNldDsKIH0KIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxlX2xsc2Vla191bmxvY2tlZCk7CiAKKy8qKgorICogZ2VuZXJpY19maWxlX2xsc2VlayAtIGdlbmVyaWMgbGxzZWVrIGltcGxlbWVudGF0aW9uIGZvciByZWd1bGFyIGZpbGVzCisgKiBAZmlsZToJZmlsZSBzdHJ1Y3R1cmUgdG8gc2VlayBvbgorICogQG9mZnNldDoJZmlsZSBvZmZzZXQgdG8gc2VlayB0bworICogQG9yaWdpbjoJdHlwZSBvZiBzZWVrCisgKgorICogVGhpcyBpcyBhIGdlbmVyaWMgaW1wbGVtZW5hdGlvbiBvZiAtPmxsc2VlayB1c2VhYmxlIGZvciBhbGwgbm9ybWFsIGxvY2FsCisgKiBmaWxlc3lzdGVtcy4gIEl0IGp1c3QgdXBkYXRlcyB0aGUgZmlsZSBvZmZzZXQgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieQorICogQG9mZnNldCBhbmQgQG9yaWdpbiB1bmRlciBpX211dGV4LgorICovCiBsb2ZmX3QgZ2VuZXJpY19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKLQlsb2ZmX3QgbjsKKwlsb2ZmX3QgcnZhbDsKKwogCW11dGV4X2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQluID0gZ2VuZXJpY19maWxlX2xsc2Vla191bmxvY2tlZChmaWxlLCBvZmZzZXQsIG9yaWdpbik7CisJcnZhbCA9IGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQoZmlsZSwgb2Zmc2V0LCBvcmlnaW4pOwogCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiBuOworCisJcmV0dXJuIHJ2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9sbHNlZWspOwogCmRpZmYgLS1naXQgYS9mcy9yZWFkZGlyLmMgYi9mcy9yZWFkZGlyLmMKaW5kZXggOTNhNzU1OS4uYjMxOGQ5YiAxMDA2NDQKLS0tIGEvZnMvcmVhZGRpci5jCisrKyBiL2ZzL3JlYWRkaXIuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJYnVmLmRpcmVudCA9IGRpcmVudDsKIAogCWVycm9yID0gdmZzX3JlYWRkaXIoZmlsZSwgZmlsbG9uZWRpciwgJmJ1Zik7Ci0JaWYgKGVycm9yID49IDApCisJaWYgKGJ1Zi5yZXN1bHQpCiAJCWVycm9yID0gYnVmLnJlc3VsdDsKIAogCWZwdXQoZmlsZSk7CkBAIC0yMDksOSArMjA5LDggQEAKIAlidWYuZXJyb3IgPSAwOwogCiAJZXJyb3IgPSB2ZnNfcmVhZGRpcihmaWxlLCBmaWxsZGlyLCAmYnVmKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dF9wdXRmOwotCWVycm9yID0gYnVmLmVycm9yOworCWlmIChlcnJvciA+PSAwKQorCQllcnJvciA9IGJ1Zi5lcnJvcjsKIAlsYXN0ZGlyZW50ID0gYnVmLnByZXZpb3VzOwogCWlmIChsYXN0ZGlyZW50KSB7CiAJCWlmIChwdXRfdXNlcihmaWxlLT5mX3BvcywgJmxhc3RkaXJlbnQtPmRfb2ZmKSkKQEAgLTIxOSw4ICsyMTgsNiBAQAogCQllbHNlCiAJCQllcnJvciA9IGNvdW50IC0gYnVmLmNvdW50OwogCX0KLQotb3V0X3B1dGY6CiAJZnB1dChmaWxlKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CkBAIC0yOTMsMTkgKzI5MCwxNiBAQAogCWJ1Zi5lcnJvciA9IDA7CiAKIAllcnJvciA9IHZmc19yZWFkZGlyKGZpbGUsIGZpbGxkaXI2NCwgJmJ1Zik7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBvdXRfcHV0ZjsKLQllcnJvciA9IGJ1Zi5lcnJvcjsKKwlpZiAoZXJyb3IgPj0gMCkKKwkJZXJyb3IgPSBidWYuZXJyb3I7CiAJbGFzdGRpcmVudCA9IGJ1Zi5wcmV2aW91czsKIAlpZiAobGFzdGRpcmVudCkgewogCQl0eXBlb2YobGFzdGRpcmVudC0+ZF9vZmYpIGRfb2ZmID0gZmlsZS0+Zl9wb3M7Ci0JCWVycm9yID0gLUVGQVVMVDsKIAkJaWYgKF9fcHV0X3VzZXIoZF9vZmYsICZsYXN0ZGlyZW50LT5kX29mZikpCi0JCQlnb3RvIG91dF9wdXRmOwotCQllcnJvciA9IGNvdW50IC0gYnVmLmNvdW50OworCQkJZXJyb3IgPSAtRUZBVUxUOworCQllbHNlCisJCQllcnJvciA9IGNvdW50IC0gYnVmLmNvdW50OwogCX0KLQotb3V0X3B1dGY6CiAJZnB1dChmaWxlKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggYTgwNDkwMy4uMzM0MDg0MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtMjk2LDYgKzI5Niw3IEBACiAJLmFpb193cml0ZSA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLnNwbGljZV9yZWFkID0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogCS5zcGxpY2Vfd3JpdGUgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlLAorCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcmVpc2VyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggNTY5OTE3MS4uNmM0YzJjNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0xNTIyLDcgKzE1MjIsNiBAQAogCiB7CiAJc3RydWN0IGNwdV9rZXkga2V5OwotCXN0cnVjdCBkZW50cnkgKnJlc3VsdDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCiAJa2V5Lm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQgPSBvYmplY3RpZDsKQEAgLTE1MzUsMTYgKzE1MzQsOCBAQAogCQlpbm9kZSA9IE5VTEw7CiAJfQogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhzYik7Ci0JaWYgKCFpbm9kZSkKLQkJaW5vZGUgPSBFUlJfUFRSKC1FU1RBTEUpOwotCWlmIChJU19FUlIoaW5vZGUpKQotCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwotCXJlc3VsdCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlyZXR1cm4gcmVzdWx0OworCisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIH0KIAogc3RydWN0IGRlbnRyeSAqcmVpc2VyZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCwKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwppbmRleCBjMjFkZjcxLi45NjQzYzNiIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMKKysrIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCkBAIC0yNTc1LDcgKzI1NzUsNyBAQAogCWlmIChqb3VybmFsLT5qX2Rldl9iZCAhPSBOVUxMKSB7CiAJCWlmIChqb3VybmFsLT5qX2Rldl9iZC0+YmRfZGV2ICE9IHN1cGVyLT5zX2RldikKIAkJCWJkX3JlbGVhc2Uoam91cm5hbC0+al9kZXZfYmQpOwotCQlyZXN1bHQgPSBibGtkZXZfcHV0KGpvdXJuYWwtPmpfZGV2X2JkKTsKKwkJcmVzdWx0ID0gYmxrZGV2X3B1dChqb3VybmFsLT5qX2Rldl9iZCwgam91cm5hbC0+al9kZXZfbW9kZSk7CiAJCWpvdXJuYWwtPmpfZGV2X2JkID0gTlVMTDsKIAl9CiAKQEAgLTI1OTMsNyArMjU5Myw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAlkZXZfdCBqZGV2OwotCWludCBibGtkZXZfbW9kZSA9IEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURTsKKwlmbW9kZV90IGJsa2Rldl9tb2RlID0gRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFOwogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAogCXJlc3VsdCA9IDA7CkBAIC0yNjA4LDYgKzI2MDgsNyBAQAogCS8qIHRoZXJlIGlzIG5vICJqZGV2IiBvcHRpb24gYW5kIGpvdXJuYWwgaXMgb24gc2VwYXJhdGUgZGV2aWNlICovCiAJaWYgKCghamRldl9uYW1lIHx8ICFqZGV2X25hbWVbMF0pKSB7CiAJCWpvdXJuYWwtPmpfZGV2X2JkID0gb3Blbl9ieV9kZXZudW0oamRldiwgYmxrZGV2X21vZGUpOworCQlqb3VybmFsLT5qX2Rldl9tb2RlID0gYmxrZGV2X21vZGU7CiAJCWlmIChJU19FUlIoam91cm5hbC0+al9kZXZfYmQpKSB7CiAJCQlyZXN1bHQgPSBQVFJfRVJSKGpvdXJuYWwtPmpfZGV2X2JkKTsKIAkJCWpvdXJuYWwtPmpfZGV2X2JkID0gTlVMTDsKQEAgLTI2MTgsNyArMjYxOSw3IEBACiAJCX0gZWxzZSBpZiAoamRldiAhPSBzdXBlci0+c19kZXYpIHsKIAkJCXJlc3VsdCA9IGJkX2NsYWltKGpvdXJuYWwtPmpfZGV2X2JkLCBqb3VybmFsKTsKIAkJCWlmIChyZXN1bHQpIHsKLQkJCQlibGtkZXZfcHV0KGpvdXJuYWwtPmpfZGV2X2JkKTsKKwkJCQlibGtkZXZfcHV0KGpvdXJuYWwtPmpfZGV2X2JkLCBibGtkZXZfbW9kZSk7CiAJCQkJcmV0dXJuIHJlc3VsdDsKIAkJCX0KIApAQCAtMjYyOCw3ICsyNjI5LDkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0Jam91cm5hbC0+al9kZXZfYmQgPSBvcGVuX2JkZXZfZXhjbChqZGV2X25hbWUsIDAsIGpvdXJuYWwpOworCWpvdXJuYWwtPmpfZGV2X21vZGUgPSBibGtkZXZfbW9kZTsKKwlqb3VybmFsLT5qX2Rldl9iZCA9IG9wZW5fYmRldl9leGNsdXNpdmUoamRldl9uYW1lLAorCQkJCQkJYmxrZGV2X21vZGUsIGpvdXJuYWwpOwogCWlmIChJU19FUlIoam91cm5hbC0+al9kZXZfYmQpKSB7CiAJCXJlc3VsdCA9IFBUUl9FUlIoam91cm5hbC0+al9kZXZfYmQpOwogCQlqb3VybmFsLT5qX2Rldl9iZCA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCBjMWFkZDI4Li5mODllYmI5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTM4Myw3ICszODMsNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCByZWlzZXJmc19kaXJfZW50cnkgZGU7CiAJSU5JVElBTElaRV9QQVRIKHBhdGhfdG9fZW50cnkpOwotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgaW5vZGUgKmRpciA9IGNoaWxkLT5kX2lub2RlOwogCiAJaWYgKGRpci0+aV9ubGluayA9PSAwKSB7CkBAIC00MDEsMTUgKzQwMCw3IEBACiAJaW5vZGUgPSByZWlzZXJmc19pZ2V0KGRpci0+aV9zYiwgKHN0cnVjdCBjcHVfa2V5ICopJihkZS5kZV9kaXJfaWQpKTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKIAotCWlmICghaW5vZGUgfHwgSVNfRVJSKGlub2RlKSkgewotCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKLQl9Ci0JcGFyZW50ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQlpZiAoIXBhcmVudCkgewotCQlpcHV0KGlub2RlKTsKLQkJcGFyZW50ID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JcmV0dXJuIHBhcmVudDsKKwlyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOwogfQogCiAvKiBhZGQgZW50cnkgdG8gdGhlIGRpcmVjdG9yeSAoZW50cnkgY2FuIGJlIGhpZGRlbikuIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggZDMxOGM3ZS4uNjYzYTkxZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC0yMDU4LDEwICsyMDU4LDEwIEBACiAgKiBTdGFuZGFyZCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gcXVvdGFfb24KICAqLwogc3RhdGljIGludCByZWlzZXJmc19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJCSAgICAgY2hhciAqcGF0aCwgaW50IHJlbW91bnQpCisJCQkgICAgIGNoYXIgKm5hbWUsIGludCByZW1vdW50KQogewogCWludCBlcnI7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKIApAQCAtMjA2OSwxNiArMjA2OSwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBObyBtb3JlIGNoZWNrcyBuZWVkZWQ/IFBhdGggYW5kIGZvcm1hdF9pZCBhcmUgYm9ndXMgYW55d2F5Li4uICovCiAJaWYgKHJlbW91bnQpCi0JCXJldHVybiB2ZnNfcXVvdGFfb24oc2IsIHR5cGUsIGZvcm1hdF9pZCwgcGF0aCwgMSk7Ci0JZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX0ZPTExPVywgJm5kKTsKKwkJcmV0dXJuIHZmc19xdW90YV9vbihzYiwgdHlwZSwgZm9ybWF0X2lkLCBuYW1lLCAxKTsKKwllcnIgPSBrZXJuX3BhdGgobmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJLyogUXVvdGFmaWxlIG5vdCBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtPyAqLwotCWlmIChuZC5wYXRoLm1udC0+bW50X3NiICE9IHNiKSB7CisJaWYgKHBhdGgubW50LT5tbnRfc2IgIT0gc2IpIHsKIAkJZXJyID0gLUVYREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JaW5vZGUgPSBuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IHBhdGguZGVudHJ5LT5kX2lub2RlOwogCS8qIFdlIG11c3Qgbm90IHBhY2sgdGFpbHMgZm9yIHF1b3RhIGZpbGVzIG9uIHJlaXNlcmZzIGZvciBxdW90YSBJTyB0byB3b3JrICovCiAJaWYgKCEoUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJiBpX25vcGFja19tYXNrKSkgewogCQllcnIgPSByZWlzZXJmc191bnBhY2soaW5vZGUsIE5VTEwpOwpAQCAtMjA5NCw3ICsyMDk0LDcgQEAKIAkvKiBKb3VybmFsaW5nIHF1b3RhPyAqLwogCWlmIChSRUlTRVJGU19TQihzYiktPnNfcWZfbmFtZXNbdHlwZV0pIHsKIAkJLyogUXVvdGFmaWxlIG5vdCBvZiBmcyByb290PyAqLwotCQlpZiAobmQucGF0aC5kZW50cnktPmRfcGFyZW50LT5kX2lub2RlICE9IHNiLT5zX3Jvb3QtPmRfaW5vZGUpCisJCWlmIChwYXRoLmRlbnRyeS0+ZF9wYXJlbnQgIT0gc2ItPnNfcm9vdCkKIAkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCiAJCQkJICJyZWlzZXJmczogUXVvdGEgZmlsZSBub3Qgb24gZmlsZXN5c3RlbSByb290LiAiCiAJCQkJICJKb3VybmFsbGVkIHF1b3RhIHdpbGwgbm90IHdvcmsuIik7CkBAIC0yMTEzLDkgKzIxMTMsOSBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJfQotCWVyciA9IHZmc19xdW90YV9vbl9wYXRoKHNiLCB0eXBlLCBmb3JtYXRfaWQsICZuZC5wYXRoKTsKKwllcnIgPSB2ZnNfcXVvdGFfb25fcGF0aChzYiwgdHlwZSwgZm9ybWF0X2lkLCAmcGF0aCk7CiBvdXQ6Ci0JcGF0aF9wdXQoJm5kLnBhdGgpOworCXBhdGhfcHV0KCZwYXRoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IGRhMGU4ODIuLjQ0OGU0NDAgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC0yNCw5ICsyNCw2NCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorCisvKgorICogRXN0aW1hdGUgZXhwZWN0ZWQgYWNjdXJhY3kgaW4gbnMgZnJvbSBhIHRpbWV2YWwuCisgKgorICogQWZ0ZXIgcXVpdGUgYSBiaXQgb2YgY2h1cm5pbmcgYXJvdW5kLCB3ZSd2ZSBzZXR0bGVkIG9uCisgKiBhIHNpbXBsZSB0aGluZyBvZiB0YWtpbmcgMC4xJSBvZiB0aGUgdGltZW91dCBhcyB0aGUKKyAqIHNsYWNrLCB3aXRoIGEgY2FwIG9mIDEwMCBtc2VjLgorICogIm5pY2UiIHRhc2tzIGdldCBhIDAuNSUgc2xhY2sgaW5zdGVhZC4KKyAqCisgKiBDb25zaWRlciB0aGlzIGNvbW1lbnQgYW4gb3BlbiBpbnZpdGF0aW9uIHRvIGNvbWUgdXAgd2l0aCBldmVuCisgKiBiZXR0ZXIgc29sdXRpb25zLi4KKyAqLworCitzdGF0aWMgbG9uZyBfX2VzdGltYXRlX2FjY3VyYWN5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCit7CisJbG9uZyBzbGFjazsKKwlpbnQgZGl2ZmFjdG9yID0gMTAwMDsKKworCWlmICh0YXNrX25pY2UoY3VycmVudCkgPiAwKQorCQlkaXZmYWN0b3IgPSBkaXZmYWN0b3IgLyA1OworCisJc2xhY2sgPSB0di0+dHZfbnNlYyAvIGRpdmZhY3RvcjsKKwlzbGFjayArPSB0di0+dHZfc2VjICogKE5TRUNfUEVSX1NFQy9kaXZmYWN0b3IpOworCisJaWYgKHNsYWNrID4gMTAwICogTlNFQ19QRVJfTVNFQykKKwkJc2xhY2sgPSAgMTAwICogTlNFQ19QRVJfTVNFQzsKKworCWlmIChzbGFjayA8IDApCisJCXNsYWNrID0gMDsKKwlyZXR1cm4gc2xhY2s7Cit9CisKK3N0YXRpYyBsb25nIGVzdGltYXRlX2FjY3VyYWN5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJc3RydWN0IHRpbWVzcGVjIG5vdzsKKworCS8qCisJICogUmVhbHRpbWUgdGFza3MgZ2V0IGEgc2xhY2sgb2YgMCBmb3Igb2J2aW91cyByZWFzb25zLgorCSAqLworCisJaWYgKHJ0X3Rhc2soY3VycmVudCkpCisJCXJldHVybiAwOworCisJa3RpbWVfZ2V0X3RzKCZub3cpOworCW5vdyA9IHRpbWVzcGVjX3N1YigqdHYsIG5vdyk7CisJcmV0ID0gX19lc3RpbWF0ZV9hY2N1cmFjeSgmbm93KTsKKwlpZiAocmV0IDwgY3VycmVudC0+dGltZXJfc2xhY2tfbnMpCisJCXJldHVybiBjdXJyZW50LT50aW1lcl9zbGFja19uczsKKwlyZXR1cm4gcmV0OworfQorCisKKwogc3RydWN0IHBvbGxfdGFibGVfcGFnZSB7CiAJc3RydWN0IHBvbGxfdGFibGVfcGFnZSAqIG5leHQ7CiAJc3RydWN0IHBvbGxfdGFibGVfZW50cnkgKiBlbnRyeTsKQEAgLTEzMCw2ICsxODUsNzkgQEAKIAlhZGRfd2FpdF9xdWV1ZSh3YWl0X2FkZHJlc3MsICZlbnRyeS0+d2FpdCk7CiB9CiAKKy8qKgorICogcG9sbF9zZWxlY3Rfc2V0X3RpbWVvdXQgLSBoZWxwZXIgZnVuY3Rpb24gdG8gc2V0dXAgdGhlIHRpbWVvdXQgdmFsdWUKKyAqIEB0bzoJCXBvaW50ZXIgdG8gdGltZXNwZWMgdmFyaWFibGUgZm9yIHRoZSBmaW5hbCB0aW1lb3V0CisgKiBAc2VjOglzZWNvbmRzIChmcm9tIHVzZXIgc3BhY2UpCisgKiBAbnNlYzoJbmFub3NlY29uZHMgKGZyb20gdXNlciBzcGFjZSkKKyAqCisgKiBOb3RlLCB3ZSBkbyBub3QgdXNlIGEgdGltZXNwZWMgZm9yIHRoZSB1c2VyIHNwYWNlIHZhbHVlIGhlcmUsIFRoYXQKKyAqIHdheSB3ZSBjYW4gdXNlIHRoZSBmdW5jdGlvbiBmb3IgdGltZXZhbCBhbmQgY29tcGF0IGludGVyZmFjZXMgYXMgd2VsbC4KKyAqCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgc2VjL25zZWMgYXJlIG5vdCBub3JtYWxpemVkLiBPdGhlcndpc2UgMC4KKyAqLworaW50IHBvbGxfc2VsZWN0X3NldF90aW1lb3V0KHN0cnVjdCB0aW1lc3BlYyAqdG8sIGxvbmcgc2VjLCBsb25nIG5zZWMpCit7CisJc3RydWN0IHRpbWVzcGVjIHRzID0gey50dl9zZWMgPSBzZWMsIC50dl9uc2VjID0gbnNlY307CisKKwlpZiAoIXRpbWVzcGVjX3ZhbGlkKCZ0cykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogT3B0aW1pemUgZm9yIHRoZSB6ZXJvIHRpbWVvdXQgdmFsdWUgaGVyZSAqLworCWlmICghc2VjICYmICFuc2VjKSB7CisJCXRvLT50dl9zZWMgPSB0by0+dHZfbnNlYyA9IDA7CisJfSBlbHNlIHsKKwkJa3RpbWVfZ2V0X3RzKHRvKTsKKwkJKnRvID0gdGltZXNwZWNfYWRkX3NhZmUoKnRvLCB0cyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvbGxfc2VsZWN0X2NvcHlfcmVtYWluaW5nKHN0cnVjdCB0aW1lc3BlYyAqZW5kX3RpbWUsIHZvaWQgX191c2VyICpwLAorCQkJCSAgICAgIGludCB0aW1ldmFsLCBpbnQgcmV0KQoreworCXN0cnVjdCB0aW1lc3BlYyBydHM7CisJc3RydWN0IHRpbWV2YWwgcnR2OworCisJaWYgKCFwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgU1RJQ0tZX1RJTUVPVVRTKQorCQlnb3RvIHN0aWNreTsKKworCS8qIE5vIHVwZGF0ZSBmb3IgemVybyB0aW1lb3V0ICovCisJaWYgKCFlbmRfdGltZS0+dHZfc2VjICYmICFlbmRfdGltZS0+dHZfbnNlYykKKwkJcmV0dXJuIHJldDsKKworCWt0aW1lX2dldF90cygmcnRzKTsKKwlydHMgPSB0aW1lc3BlY19zdWIoKmVuZF90aW1lLCBydHMpOworCWlmIChydHMudHZfc2VjIDwgMCkKKwkJcnRzLnR2X3NlYyA9IHJ0cy50dl9uc2VjID0gMDsKKworCWlmICh0aW1ldmFsKSB7CisJCXJ0di50dl9zZWMgPSBydHMudHZfc2VjOworCQlydHYudHZfdXNlYyA9IHJ0cy50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQzsKKworCQlpZiAoIWNvcHlfdG9fdXNlcihwLCAmcnR2LCBzaXplb2YocnR2KSkpCisJCQlyZXR1cm4gcmV0OworCisJfSBlbHNlIGlmICghY29weV90b191c2VyKHAsICZydHMsIHNpemVvZihydHMpKSkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogSWYgYW4gYXBwbGljYXRpb24gcHV0cyBpdHMgdGltZXZhbCBpbiByZWFkLW9ubHkgbWVtb3J5LCB3ZQorCSAqIGRvbid0IHdhbnQgdGhlIExpbnV4LXNwZWNpZmljIHVwZGF0ZSB0byB0aGUgdGltZXZhbCB0bworCSAqIGNhdXNlIGEgZmF1bHQgYWZ0ZXIgdGhlIHNlbGVjdCBoYXMgY29tcGxldGVkCisJICogc3VjY2Vzc2Z1bGx5LiBIb3dldmVyLCBiZWNhdXNlIHdlJ3JlIG5vdCB1cGRhdGluZyB0aGUKKwkgKiB0aW1ldmFsLCB3ZSBjYW4ndCByZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbC4KKwkgKi8KKworc3RpY2t5OgorCWlmIChyZXQgPT0gLUVSRVNUQVJUTk9IQU5EKQorCQlyZXQgPSAtRUlOVFI7CisJcmV0dXJuIHJldDsKK30KKwogI2RlZmluZSBGRFNfSU4oZmRzLCBuKQkJKGZkcy0+aW4gKyBuKQogI2RlZmluZSBGRFNfT1VUKGZkcywgbikJCShmZHMtPm91dCArIG4pCiAjZGVmaW5lIEZEU19FWChmZHMsIG4pCQkoZmRzLT5leCArIG4pCkBAIC0xODIsMTEgKzMxMCwxMyBAQAogI2RlZmluZSBQT0xMT1VUX1NFVCAoUE9MTFdSQkFORCB8IFBPTExXUk5PUk0gfCBQT0xMT1VUIHwgUE9MTEVSUikKICNkZWZpbmUgUE9MTEVYX1NFVCAoUE9MTFBSSSkKIAotaW50IGRvX3NlbGVjdChpbnQgbiwgZmRfc2V0X2JpdHMgKmZkcywgczY0ICp0aW1lb3V0KQoraW50IGRvX3NlbGVjdChpbnQgbiwgZmRfc2V0X2JpdHMgKmZkcywgc3RydWN0IHRpbWVzcGVjICplbmRfdGltZSkKIHsKKwlrdGltZV90IGV4cGlyZSwgKnRvID0gTlVMTDsKIAlzdHJ1Y3QgcG9sbF93cXVldWVzIHRhYmxlOwogCXBvbGxfdGFibGUgKndhaXQ7Ci0JaW50IHJldHZhbCwgaTsKKwlpbnQgcmV0dmFsLCBpLCB0aW1lZF9vdXQgPSAwOworCXVuc2lnbmVkIGxvbmcgc2xhY2sgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXJldHZhbCA9IG1heF9zZWxlY3RfZmQobiwgZmRzKTsKQEAgLTE5OCwxMiArMzI4LDE3IEBACiAKIAlwb2xsX2luaXR3YWl0KCZ0YWJsZSk7CiAJd2FpdCA9ICZ0YWJsZS5wdDsKLQlpZiAoISp0aW1lb3V0KQorCWlmIChlbmRfdGltZSAmJiAhZW5kX3RpbWUtPnR2X3NlYyAmJiAhZW5kX3RpbWUtPnR2X25zZWMpIHsKIAkJd2FpdCA9IE5VTEw7CisJCXRpbWVkX291dCA9IDE7CisJfQorCisJaWYgKGVuZF90aW1lICYmICF0aW1lZF9vdXQpCisJCXNsYWNrID0gZXN0aW1hdGVfYWNjdXJhY3koZW5kX3RpbWUpOworCiAJcmV0dmFsID0gMDsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgKnJpbnAsICpyb3V0cCwgKnJleHAsICppbnAsICpvdXRwLCAqZXhwOwotCQlsb25nIF9fdGltZW91dDsKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCkBAIC0yNTksMjcgKzM5NCwyNSBAQAogCQkJY29uZF9yZXNjaGVkKCk7CiAJCX0KIAkJd2FpdCA9IE5VTEw7Ci0JCWlmIChyZXR2YWwgfHwgISp0aW1lb3V0IHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlpZiAocmV0dmFsIHx8IHRpbWVkX291dCB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCQlpZiAodGFibGUuZXJyb3IpIHsKIAkJCXJldHZhbCA9IHRhYmxlLmVycm9yOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoKnRpbWVvdXQgPCAwKSB7Ci0JCQkvKiBXYWl0IGluZGVmaW5pdGVseSAqLwotCQkJX190aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JCX0gZWxzZSBpZiAodW5saWtlbHkoKnRpbWVvdXQgPj0gKHM2NClNQVhfU0NIRURVTEVfVElNRU9VVCAtIDEpKSB7Ci0JCQkvKiBXYWl0IGZvciBsb25nZXIgdGhhbiBNQVhfU0NIRURVTEVfVElNRU9VVC4gRG8gaXQgaW4gYSBsb29wICovCi0JCQlfX3RpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVCAtIDE7Ci0JCQkqdGltZW91dCAtPSBfX3RpbWVvdXQ7Ci0JCX0gZWxzZSB7Ci0JCQlfX3RpbWVvdXQgPSAqdGltZW91dDsKLQkJCSp0aW1lb3V0ID0gMDsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgbG9vcCBhbmQgd2UgaGF2ZSBhIHRpbWVvdXQKKwkJICogZ2l2ZW4sIHRoZW4gd2UgY29udmVydCB0byBrdGltZV90IGFuZCBzZXQgdGhlIHRvCisJCSAqIHBvaW50ZXIgdG8gdGhlIGV4cGlyeSB2YWx1ZS4KKwkJICovCisJCWlmIChlbmRfdGltZSAmJiAhdG8pIHsKKwkJCWV4cGlyZSA9IHRpbWVzcGVjX3RvX2t0aW1lKCplbmRfdGltZSk7CisJCQl0byA9ICZleHBpcmU7CiAJCX0KLQkJX190aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dChfX3RpbWVvdXQpOwotCQlpZiAoKnRpbWVvdXQgPj0gMCkKLQkJCSp0aW1lb3V0ICs9IF9fdGltZW91dDsKKworCQlpZiAoIXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssIEhSVElNRVJfTU9ERV9BQlMpKQorCQkJdGltZWRfb3V0ID0gMTsKIAl9CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCkBAIC0zMDAsNyArNDMzLDcgQEAKIAkoKHVuc2lnbmVkIGxvbmcpIChNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKS0xKQogCiBpbnQgY29yZV9zeXNfc2VsZWN0KGludCBuLCBmZF9zZXQgX191c2VyICppbnAsIGZkX3NldCBfX3VzZXIgKm91dHAsCi0JCQkgICBmZF9zZXQgX191c2VyICpleHAsIHM2NCAqdGltZW91dCkKKwkJCSAgIGZkX3NldCBfX3VzZXIgKmV4cCwgc3RydWN0IHRpbWVzcGVjICplbmRfdGltZSkKIHsKIAlmZF9zZXRfYml0cyBmZHM7CiAJdm9pZCAqYml0czsKQEAgLTM1MSw3ICs0ODQsNyBAQAogCXplcm9fZmRfc2V0KG4sIGZkcy5yZXNfb3V0KTsKIAl6ZXJvX2ZkX3NldChuLCBmZHMucmVzX2V4KTsKIAotCXJldCA9IGRvX3NlbGVjdChuLCAmZmRzLCB0aW1lb3V0KTsKKwlyZXQgPSBkb19zZWxlY3QobiwgJmZkcywgZW5kX3RpbWUpOwogCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMzc3LDcgKzUxMCw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3NlbGVjdChpbnQgbiwgZmRfc2V0IF9fdXNlciAqaW5wLCBmZF9zZXQgX191c2VyICpvdXRwLAogCQkJZmRfc2V0IF9fdXNlciAqZXhwLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnR2cCkKIHsKLQlzNjQgdGltZW91dCA9IC0xOworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZSwgKnRvID0gTlVMTDsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlpbnQgcmV0OwogCkBAIC0zODUsNDMgKzUxOCwxNCBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJnR2LCB0dnAsIHNpemVvZih0dikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKHR2LnR2X3NlYyA8IDAgfHwgdHYudHZfdXNlYyA8IDApCisJCXRvID0gJmVuZF90aW1lOworCQlpZiAocG9sbF9zZWxlY3Rfc2V0X3RpbWVvdXQodG8sIHR2LnR2X3NlYywKKwkJCQkJICAgIHR2LnR2X3VzZWMgKiBOU0VDX1BFUl9VU0VDKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIENhc3QgdG8gdTY0IHRvIG1ha2UgR0NDIHN0b3AgY29tcGxhaW5pbmcgKi8KLQkJaWYgKCh1NjQpdHYudHZfc2VjID49ICh1NjQpTUFYX0lOVDY0X1NFQ09ORFMpCi0JCQl0aW1lb3V0ID0gLTE7CS8qIGluZmluaXRlICovCi0JCWVsc2UgewotCQkJdGltZW91dCA9IERJVl9ST1VORF9VUCh0di50dl91c2VjLCBVU0VDX1BFUl9TRUMvSFopOwotCQkJdGltZW91dCArPSB0di50dl9zZWMgKiBIWjsKLQkJfQogCX0KIAotCXJldCA9IGNvcmVfc3lzX3NlbGVjdChuLCBpbnAsIG91dHAsIGV4cCwgJnRpbWVvdXQpOwotCi0JaWYgKHR2cCkgewotCQlzdHJ1Y3QgdGltZXZhbCBydHY7Ci0KLQkJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgU1RJQ0tZX1RJTUVPVVRTKQotCQkJZ290byBzdGlja3k7Ci0JCXJ0di50dl91c2VjID0gamlmZmllc190b191c2Vjcyhkb19kaXYoKCoodTY0KikmdGltZW91dCksIEhaKSk7Ci0JCXJ0di50dl9zZWMgPSB0aW1lb3V0OwotCQlpZiAodGltZXZhbF9jb21wYXJlKCZydHYsICZ0dikgPj0gMCkKLQkJCXJ0diA9IHR2OwotCQlpZiAoY29weV90b191c2VyKHR2cCwgJnJ0diwgc2l6ZW9mKHJ0dikpKSB7Ci1zdGlja3k6Ci0JCQkvKgotCQkJICogSWYgYW4gYXBwbGljYXRpb24gcHV0cyBpdHMgdGltZXZhbCBpbiByZWFkLW9ubHkKLQkJCSAqIG1lbW9yeSwgd2UgZG9uJ3Qgd2FudCB0aGUgTGludXgtc3BlY2lmaWMgdXBkYXRlIHRvCi0JCQkgKiB0aGUgdGltZXZhbCB0byBjYXVzZSBhIGZhdWx0IGFmdGVyIHRoZSBzZWxlY3QgaGFzCi0JCQkgKiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBIb3dldmVyLCBiZWNhdXNlIHdlJ3JlIG5vdAotCQkJICogdXBkYXRpbmcgdGhlIHRpbWV2YWwsIHdlIGNhbid0IHJlc3RhcnQgdGhlIHN5c3RlbQotCQkJICogY2FsbC4KLQkJCSAqLwotCQkJaWYgKHJldCA9PSAtRVJFU1RBUlROT0hBTkQpCi0JCQkJcmV0ID0gLUVJTlRSOwotCQl9Ci0JfQorCXJldCA9IGNvcmVfc3lzX3NlbGVjdChuLCBpbnAsIG91dHAsIGV4cCwgdG8pOworCXJldCA9IHBvbGxfc2VsZWN0X2NvcHlfcmVtYWluaW5nKCZlbmRfdGltZSwgdHZwLCAxLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQzMSwyNSArNTM1LDE3IEBACiAJCWZkX3NldCBfX3VzZXIgKmV4cCwgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdHNwLAogCQljb25zdCBzaWdzZXRfdCBfX3VzZXIgKnNpZ21hc2ssIHNpemVfdCBzaWdzZXRzaXplKQogewotCXM2NCB0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CiAJc2lnc2V0X3Qga3NpZ21hc2ssIHNpZ3NhdmVkOwotCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzdHJ1Y3QgdGltZXNwZWMgdHMsIGVuZF90aW1lLCAqdG8gPSBOVUxMOwogCWludCByZXQ7CiAKIAlpZiAodHNwKSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdHMsIHRzcCwgc2l6ZW9mKHRzKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAodHMudHZfc2VjIDwgMCB8fCB0cy50dl9uc2VjIDwgMCkKKwkJdG8gPSAmZW5kX3RpbWU7CisJCWlmIChwb2xsX3NlbGVjdF9zZXRfdGltZW91dCh0bywgdHMudHZfc2VjLCB0cy50dl9uc2VjKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIENhc3QgdG8gdTY0IHRvIG1ha2UgR0NDIHN0b3AgY29tcGxhaW5pbmcgKi8KLQkJaWYgKCh1NjQpdHMudHZfc2VjID49ICh1NjQpTUFYX0lOVDY0X1NFQ09ORFMpCi0JCQl0aW1lb3V0ID0gLTE7CS8qIGluZmluaXRlICovCi0JCWVsc2UgewotCQkJdGltZW91dCA9IERJVl9ST1VORF9VUCh0cy50dl9uc2VjLCBOU0VDX1BFUl9TRUMvSFopOwotCQkJdGltZW91dCArPSB0cy50dl9zZWMgKiBIWjsKLQkJfQogCX0KIAogCWlmIChzaWdtYXNrKSB7CkBAIC00NjMsMzIgKzU1OSw4IEBACiAJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAma3NpZ21hc2ssICZzaWdzYXZlZCk7CiAJfQogCi0JcmV0ID0gY29yZV9zeXNfc2VsZWN0KG4sIGlucCwgb3V0cCwgZXhwLCAmdGltZW91dCk7Ci0KLQlpZiAodHNwKSB7Ci0JCXN0cnVjdCB0aW1lc3BlYyBydHM7Ci0KLQkJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgU1RJQ0tZX1RJTUVPVVRTKQotCQkJZ290byBzdGlja3k7Ci0JCXJ0cy50dl9uc2VjID0gamlmZmllc190b191c2Vjcyhkb19kaXYoKCoodTY0KikmdGltZW91dCksIEhaKSkgKgotCQkJCQkJMTAwMDsKLQkJcnRzLnR2X3NlYyA9IHRpbWVvdXQ7Ci0JCWlmICh0aW1lc3BlY19jb21wYXJlKCZydHMsICZ0cykgPj0gMCkKLQkJCXJ0cyA9IHRzOwotCQlpZiAoY29weV90b191c2VyKHRzcCwgJnJ0cywgc2l6ZW9mKHJ0cykpKSB7Ci1zdGlja3k6Ci0JCQkvKgotCQkJICogSWYgYW4gYXBwbGljYXRpb24gcHV0cyBpdHMgdGltZXZhbCBpbiByZWFkLW9ubHkKLQkJCSAqIG1lbW9yeSwgd2UgZG9uJ3Qgd2FudCB0aGUgTGludXgtc3BlY2lmaWMgdXBkYXRlIHRvCi0JCQkgKiB0aGUgdGltZXZhbCB0byBjYXVzZSBhIGZhdWx0IGFmdGVyIHRoZSBzZWxlY3QgaGFzCi0JCQkgKiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBIb3dldmVyLCBiZWNhdXNlIHdlJ3JlIG5vdAotCQkJICogdXBkYXRpbmcgdGhlIHRpbWV2YWwsIHdlIGNhbid0IHJlc3RhcnQgdGhlIHN5c3RlbQotCQkJICogY2FsbC4KLQkJCSAqLwotCQkJaWYgKHJldCA9PSAtRVJFU1RBUlROT0hBTkQpCi0JCQkJcmV0ID0gLUVJTlRSOwotCQl9Ci0JfQorCXJldCA9IGNvcmVfc3lzX3NlbGVjdChuLCBpbnAsIG91dHAsIGV4cCwgJmVuZF90aW1lKTsKKwlyZXQgPSBwb2xsX3NlbGVjdF9jb3B5X3JlbWFpbmluZygmZW5kX3RpbWUsIHRzcCwgMCwgcmV0KTsKIAogCWlmIChyZXQgPT0gLUVSRVNUQVJUTk9IQU5EKSB7CiAJCS8qCkBAIC01NzQsMTggKzY0NiwyNCBAQAogfQogCiBzdGF0aWMgaW50IGRvX3BvbGwodW5zaWduZWQgaW50IG5mZHMsICBzdHJ1Y3QgcG9sbF9saXN0ICpsaXN0LAotCQkgICBzdHJ1Y3QgcG9sbF93cXVldWVzICp3YWl0LCBzNjQgKnRpbWVvdXQpCisJCSAgIHN0cnVjdCBwb2xsX3dxdWV1ZXMgKndhaXQsIHN0cnVjdCB0aW1lc3BlYyAqZW5kX3RpbWUpCiB7Ci0JaW50IGNvdW50ID0gMDsKIAlwb2xsX3RhYmxlKiBwdCA9ICZ3YWl0LT5wdDsKKwlrdGltZV90IGV4cGlyZSwgKnRvID0gTlVMTDsKKwlpbnQgdGltZWRfb3V0ID0gMCwgY291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgc2xhY2sgPSAwOwogCiAJLyogT3B0aW1pc2UgdGhlIG5vLXdhaXQgY2FzZSAqLwotCWlmICghKCp0aW1lb3V0KSkKKwlpZiAoZW5kX3RpbWUgJiYgIWVuZF90aW1lLT50dl9zZWMgJiYgIWVuZF90aW1lLT50dl9uc2VjKSB7CiAJCXB0ID0gTlVMTDsKKwkJdGltZWRfb3V0ID0gMTsKKwl9CisKKwlpZiAoZW5kX3RpbWUgJiYgIXRpbWVkX291dCkKKwkJc2xhY2sgPSBlc3RpbWF0ZV9hY2N1cmFjeShlbmRfdGltZSk7CiAKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBwb2xsX2xpc3QgKndhbGs7Ci0JCWxvbmcgX190aW1lb3V0OwogCiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWZvciAod2FsayA9IGxpc3Q7IHdhbGsgIT0gTlVMTDsgd2FsayA9IHdhbGstPm5leHQpIHsKQEAgLTYxNywyNyArNjk1LDIxIEBACiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQkJY291bnQgPSAtRUlOVFI7CiAJCX0KLQkJaWYgKGNvdW50IHx8ICEqdGltZW91dCkKKwkJaWYgKGNvdW50IHx8IHRpbWVkX291dCkKIAkJCWJyZWFrOwogCi0JCWlmICgqdGltZW91dCA8IDApIHsKLQkJCS8qIFdhaXQgaW5kZWZpbml0ZWx5ICovCi0JCQlfX3RpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKLQkJfSBlbHNlIGlmICh1bmxpa2VseSgqdGltZW91dCA+PSAoczY0KU1BWF9TQ0hFRFVMRV9USU1FT1VULTEpKSB7Ci0JCQkvKgotCQkJICogV2FpdCBmb3IgbG9uZ2VyIHRoYW4gTUFYX1NDSEVEVUxFX1RJTUVPVVQuIERvIGl0IGluCi0JCQkgKiBhIGxvb3AKLQkJCSAqLwotCQkJX190aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQgLSAxOwotCQkJKnRpbWVvdXQgLT0gX190aW1lb3V0OwotCQl9IGVsc2UgewotCQkJX190aW1lb3V0ID0gKnRpbWVvdXQ7Ci0JCQkqdGltZW91dCA9IDA7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGxvb3AgYW5kIHdlIGhhdmUgYSB0aW1lb3V0CisJCSAqIGdpdmVuLCB0aGVuIHdlIGNvbnZlcnQgdG8ga3RpbWVfdCBhbmQgc2V0IHRoZSB0bworCQkgKiBwb2ludGVyIHRvIHRoZSBleHBpcnkgdmFsdWUuCisJCSAqLworCQlpZiAoZW5kX3RpbWUgJiYgIXRvKSB7CisJCQlleHBpcmUgPSB0aW1lc3BlY190b19rdGltZSgqZW5kX3RpbWUpOworCQkJdG8gPSAmZXhwaXJlOwogCQl9CiAKLQkJX190aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dChfX3RpbWVvdXQpOwotCQlpZiAoKnRpbWVvdXQgPj0gMCkKLQkJCSp0aW1lb3V0ICs9IF9fdGltZW91dDsKKwkJaWYgKCFzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UodG8sIHNsYWNrLCBIUlRJTUVSX01PREVfQUJTKSkKKwkJCXRpbWVkX291dCA9IDE7CiAJfQogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZXR1cm4gY291bnQ7CkBAIC02NDYsNyArNzE4LDggQEAKICNkZWZpbmUgTl9TVEFDS19QUFMgKChzaXplb2Yoc3RhY2tfcHBzKSAtIHNpemVvZihzdHJ1Y3QgcG9sbF9saXN0KSkgIC8gXAogCQkJc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKQogCi1pbnQgZG9fc3lzX3BvbGwoc3RydWN0IHBvbGxmZCBfX3VzZXIgKnVmZHMsIHVuc2lnbmVkIGludCBuZmRzLCBzNjQgKnRpbWVvdXQpCitpbnQgZG9fc3lzX3BvbGwoc3RydWN0IHBvbGxmZCBfX3VzZXIgKnVmZHMsIHVuc2lnbmVkIGludCBuZmRzLAorCQlzdHJ1Y3QgdGltZXNwZWMgKmVuZF90aW1lKQogewogCXN0cnVjdCBwb2xsX3dxdWV1ZXMgdGFibGU7CiAgCWludCBlcnIgPSAtRUZBVUxULCBmZGNvdW50LCBsZW4sIHNpemU7CkBAIC02ODYsNyArNzU5LDcgQEAKIAl9CiAKIAlwb2xsX2luaXR3YWl0KCZ0YWJsZSk7Ci0JZmRjb3VudCA9IGRvX3BvbGwobmZkcywgaGVhZCwgJnRhYmxlLCB0aW1lb3V0KTsKKwlmZGNvdW50ID0gZG9fcG9sbChuZmRzLCBoZWFkLCAmdGFibGUsIGVuZF90aW1lKTsKIAlwb2xsX2ZyZWV3YWl0KCZ0YWJsZSk7CiAKIAlmb3IgKHdhbGsgPSBoZWFkOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkgewpAQCAtNzEyLDE2ICs3ODUsMjEgQEAKIAogc3RhdGljIGxvbmcgZG9fcmVzdGFydF9wb2xsKHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0X2Jsb2NrKQogewotCXN0cnVjdCBwb2xsZmQgX191c2VyICp1ZmRzID0gKHN0cnVjdCBwb2xsZmQgX191c2VyKilyZXN0YXJ0X2Jsb2NrLT5hcmcwOwotCWludCBuZmRzID0gcmVzdGFydF9ibG9jay0+YXJnMTsKLQlzNjQgdGltZW91dCA9ICgoczY0KXJlc3RhcnRfYmxvY2stPmFyZzM8PDMyKSB8IChzNjQpcmVzdGFydF9ibG9jay0+YXJnMjsKKwlzdHJ1Y3QgcG9sbGZkIF9fdXNlciAqdWZkcyA9IHJlc3RhcnRfYmxvY2stPnBvbGwudWZkczsKKwlpbnQgbmZkcyA9IHJlc3RhcnRfYmxvY2stPnBvbGwubmZkczsKKwlzdHJ1Y3QgdGltZXNwZWMgKnRvID0gTlVMTCwgZW5kX3RpbWU7CiAJaW50IHJldDsKIAotCXJldCA9IGRvX3N5c19wb2xsKHVmZHMsIG5mZHMsICZ0aW1lb3V0KTsKKwlpZiAocmVzdGFydF9ibG9jay0+cG9sbC5oYXNfdGltZW91dCkgeworCQllbmRfdGltZS50dl9zZWMgPSByZXN0YXJ0X2Jsb2NrLT5wb2xsLnR2X3NlYzsKKwkJZW5kX3RpbWUudHZfbnNlYyA9IHJlc3RhcnRfYmxvY2stPnBvbGwudHZfbnNlYzsKKwkJdG8gPSAmZW5kX3RpbWU7CisJfQorCisJcmV0ID0gZG9fc3lzX3BvbGwodWZkcywgbmZkcywgdG8pOworCiAJaWYgKHJldCA9PSAtRUlOVFIpIHsKIAkJcmVzdGFydF9ibG9jay0+Zm4gPSBkb19yZXN0YXJ0X3BvbGw7Ci0JCXJlc3RhcnRfYmxvY2stPmFyZzIgPSB0aW1lb3V0ICYgMHhGRkZGRkZGRjsKLQkJcmVzdGFydF9ibG9jay0+YXJnMyA9ICh1NjQpdGltZW91dCA+PiAzMjsKIAkJcmV0ID0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTczMCwzMSArODA4LDMyIEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3BvbGwoc3RydWN0IHBvbGxmZCBfX3VzZXIgKnVmZHMsIHVuc2lnbmVkIGludCBuZmRzLAogCQkJbG9uZyB0aW1lb3V0X21zZWNzKQogewotCXM2NCB0aW1lb3V0X2ppZmZpZXM7CisJc3RydWN0IHRpbWVzcGVjIGVuZF90aW1lLCAqdG8gPSBOVUxMOwogCWludCByZXQ7CiAKLQlpZiAodGltZW91dF9tc2VjcyA+IDApIHsKLSNpZiBIWiA+IDEwMDAKLQkJLyogV2UgY2FuIG9ubHkgb3ZlcmZsb3cgaWYgSFogPiAxMDAwICovCi0JCWlmICh0aW1lb3V0X21zZWNzIC8gMTAwMCA+IChzNjQpMHg3ZmZmZmZmZmZmZmZmZmZmVUxMIC8gKHM2NClIWikKLQkJCXRpbWVvdXRfamlmZmllcyA9IC0xOwotCQllbHNlCi0jZW5kaWYKLQkJCXRpbWVvdXRfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tc2VjcykgKyAxOwotCX0gZWxzZSB7Ci0JCS8qIEluZmluaXRlICg8IDApIG9yIG5vICgwKSB0aW1lb3V0ICovCi0JCXRpbWVvdXRfamlmZmllcyA9IHRpbWVvdXRfbXNlY3M7CisJaWYgKHRpbWVvdXRfbXNlY3MgPj0gMCkgeworCQl0byA9ICZlbmRfdGltZTsKKwkJcG9sbF9zZWxlY3Rfc2V0X3RpbWVvdXQodG8sIHRpbWVvdXRfbXNlY3MgLyBNU0VDX1BFUl9TRUMsCisJCQlOU0VDX1BFUl9NU0VDICogKHRpbWVvdXRfbXNlY3MgJSBNU0VDX1BFUl9TRUMpKTsKIAl9CiAKLQlyZXQgPSBkb19zeXNfcG9sbCh1ZmRzLCBuZmRzLCAmdGltZW91dF9qaWZmaWVzKTsKKwlyZXQgPSBkb19zeXNfcG9sbCh1ZmRzLCBuZmRzLCB0byk7CisKIAlpZiAocmV0ID09IC1FSU5UUikgewogCQlzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jazsKKwogCQlyZXN0YXJ0X2Jsb2NrID0gJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jazsKIAkJcmVzdGFydF9ibG9jay0+Zm4gPSBkb19yZXN0YXJ0X3BvbGw7Ci0JCXJlc3RhcnRfYmxvY2stPmFyZzAgPSAodW5zaWduZWQgbG9uZyl1ZmRzOwotCQlyZXN0YXJ0X2Jsb2NrLT5hcmcxID0gbmZkczsKLQkJcmVzdGFydF9ibG9jay0+YXJnMiA9IHRpbWVvdXRfamlmZmllcyAmIDB4RkZGRkZGRkY7Ci0JCXJlc3RhcnRfYmxvY2stPmFyZzMgPSAodTY0KXRpbWVvdXRfamlmZmllcyA+PiAzMjsKKwkJcmVzdGFydF9ibG9jay0+cG9sbC51ZmRzID0gdWZkczsKKwkJcmVzdGFydF9ibG9jay0+cG9sbC5uZmRzID0gbmZkczsKKworCQlpZiAodGltZW91dF9tc2VjcyA+PSAwKSB7CisJCQlyZXN0YXJ0X2Jsb2NrLT5wb2xsLnR2X3NlYyA9IGVuZF90aW1lLnR2X3NlYzsKKwkJCXJlc3RhcnRfYmxvY2stPnBvbGwudHZfbnNlYyA9IGVuZF90aW1lLnR2X25zZWM7CisJCQlyZXN0YXJ0X2Jsb2NrLT5wb2xsLmhhc190aW1lb3V0ID0gMTsKKwkJfSBlbHNlCisJCQlyZXN0YXJ0X2Jsb2NrLT5wb2xsLmhhc190aW1lb3V0ID0gMDsKKwogCQlyZXQgPSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNzY2LDIxICs4NDUsMTYgQEAKIAlzaXplX3Qgc2lnc2V0c2l6ZSkKIHsKIAlzaWdzZXRfdCBrc2lnbWFzaywgc2lnc2F2ZWQ7Ci0Jc3RydWN0IHRpbWVzcGVjIHRzOwotCXM2NCB0aW1lb3V0ID0gLTE7CisJc3RydWN0IHRpbWVzcGVjIHRzLCBlbmRfdGltZSwgKnRvID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJaWYgKHRzcCkgewogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRzLCB0c3AsIHNpemVvZih0cykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJLyogQ2FzdCB0byB1NjQgdG8gbWFrZSBHQ0Mgc3RvcCBjb21wbGFpbmluZyAqLwotCQlpZiAoKHU2NCl0cy50dl9zZWMgPj0gKHU2NClNQVhfSU5UNjRfU0VDT05EUykKLQkJCXRpbWVvdXQgPSAtMTsJLyogaW5maW5pdGUgKi8KLQkJZWxzZSB7Ci0JCQl0aW1lb3V0ID0gRElWX1JPVU5EX1VQKHRzLnR2X25zZWMsIE5TRUNfUEVSX1NFQy9IWik7Ci0JCQl0aW1lb3V0ICs9IHRzLnR2X3NlYyAqIEhaOwotCQl9CisJCXRvID0gJmVuZF90aW1lOworCQlpZiAocG9sbF9zZWxlY3Rfc2V0X3RpbWVvdXQodG8sIHRzLnR2X3NlYywgdHMudHZfbnNlYykpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoc2lnbWFzaykgewpAQCAtNzk0LDcgKzg2OCw3IEBACiAJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAma3NpZ21hc2ssICZzaWdzYXZlZCk7CiAJfQogCi0JcmV0ID0gZG9fc3lzX3BvbGwodWZkcywgbmZkcywgJnRpbWVvdXQpOworCXJldCA9IGRvX3N5c19wb2xsKHVmZHMsIG5mZHMsIHRvKTsKIAogCS8qIFdlIGNhbiByZXN0YXJ0IHRoaXMgc3lzY2FsbCwgdXN1YWxseSAqLwogCWlmIChyZXQgPT0gLUVJTlRSKSB7CkBAIC04MTIsMzEgKzg4Niw3IEBACiAJfSBlbHNlIGlmIChzaWdtYXNrKQogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNpZ3NhdmVkLCBOVUxMKTsKIAotCWlmICh0c3AgJiYgdGltZW91dCA+PSAwKSB7Ci0JCXN0cnVjdCB0aW1lc3BlYyBydHM7Ci0KLQkJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgU1RJQ0tZX1RJTUVPVVRTKQotCQkJZ290byBzdGlja3k7Ci0JCS8qIFllcywgd2Uga25vdyBpdCdzIGFjdHVhbGx5IGFuIHM2NCwgYnV0IGl0J3MgYWxzbyBwb3NpdGl2ZS4gKi8KLQkJcnRzLnR2X25zZWMgPSBqaWZmaWVzX3RvX3VzZWNzKGRvX2RpdigoKih1NjQqKSZ0aW1lb3V0KSwgSFopKSAqCi0JCQkJCQkxMDAwOwotCQlydHMudHZfc2VjID0gdGltZW91dDsKLQkJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJnJ0cywgJnRzKSA+PSAwKQotCQkJcnRzID0gdHM7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHNwLCAmcnRzLCBzaXplb2YocnRzKSkpIHsKLQkJc3RpY2t5OgotCQkJLyoKLQkJCSAqIElmIGFuIGFwcGxpY2F0aW9uIHB1dHMgaXRzIHRpbWV2YWwgaW4gcmVhZC1vbmx5Ci0JCQkgKiBtZW1vcnksIHdlIGRvbid0IHdhbnQgdGhlIExpbnV4LXNwZWNpZmljIHVwZGF0ZSB0bwotCQkJICogdGhlIHRpbWV2YWwgdG8gY2F1c2UgYSBmYXVsdCBhZnRlciB0aGUgc2VsZWN0IGhhcwotCQkJICogY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gSG93ZXZlciwgYmVjYXVzZSB3ZSdyZSBub3QKLQkJCSAqIHVwZGF0aW5nIHRoZSB0aW1ldmFsLCB3ZSBjYW4ndCByZXN0YXJ0IHRoZSBzeXN0ZW0KLQkJCSAqIGNhbGwuCi0JCQkgKi8KLQkJCWlmIChyZXQgPT0gLUVSRVNUQVJUTk9IQU5EICYmIHRpbWVvdXQgPj0gMCkKLQkJCQlyZXQgPSAtRUlOVFI7Ci0JCX0KLQl9CisJcmV0ID0gcG9sbF9zZWxlY3RfY29weV9yZW1haW5pbmcoJmVuZF90aW1lLCB0c3AsIDAsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvc2VxX2ZpbGUuYyBiL2ZzL3NlcV9maWxlLmMKaW5kZXggYmQyMGY3Zi4uZWJhMmVhYiAxMDA2NDQKLS0tIGEvZnMvc2VxX2ZpbGUuYworKysgYi9mcy9zZXFfZmlsZS5jCkBAIC00NTIsMTcgKzQ1MiwzNCBAQAogCiBpbnQgc2VxX2JpdG1hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgKmJpdHMsIHVuc2lnbmVkIGludCBucl9iaXRzKQogewotCXNpemVfdCBsZW4gPSBiaXRtYXBfc2NucHJpbnRmX2xlbihucl9iaXRzKTsKLQotCWlmIChtLT5jb3VudCArIGxlbiA8IG0tPnNpemUpIHsKLQkJYml0bWFwX3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwgbS0+c2l6ZSAtIG0tPmNvdW50LAotCQkJCSBiaXRzLCBucl9iaXRzKTsKLQkJbS0+Y291bnQgKz0gbGVuOwotCQlyZXR1cm4gMDsKKwlpZiAobS0+Y291bnQgPCBtLT5zaXplKSB7CisJCWludCBsZW4gPSBiaXRtYXBfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LAorCQkJCW0tPnNpemUgLSBtLT5jb3VudCwgYml0cywgbnJfYml0cyk7CisJCWlmIChtLT5jb3VudCArIGxlbiA8IG0tPnNpemUpIHsKKwkJCW0tPmNvdW50ICs9IGxlbjsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCW0tPmNvdW50ID0gbS0+c2l6ZTsKIAlyZXR1cm4gLTE7CiB9CitFWFBPUlRfU1lNQk9MKHNlcV9iaXRtYXApOworCitpbnQgc2VxX2JpdG1hcF9saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyAqYml0cywKKwkJdW5zaWduZWQgaW50IG5yX2JpdHMpCit7CisJaWYgKG0tPmNvdW50IDwgbS0+c2l6ZSkgeworCQlpbnQgbGVuID0gYml0bWFwX3Njbmxpc3RwcmludGYobS0+YnVmICsgbS0+Y291bnQsCisJCQkJbS0+c2l6ZSAtIG0tPmNvdW50LCBiaXRzLCBucl9iaXRzKTsKKwkJaWYgKG0tPmNvdW50ICsgbGVuIDwgbS0+c2l6ZSkgeworCQkJbS0+Y291bnQgKz0gbGVuOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJbS0+Y291bnQgPSBtLT5zaXplOworCXJldHVybiAtMTsKK30KK0VYUE9SVF9TWU1CT0woc2VxX2JpdG1hcF9saXN0KTsKIAogc3RhdGljIHZvaWQgKnNpbmdsZV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGxvZmZfdCAqcG9zKQogewpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggZTkzMWFlOS4uNDAwYTc2MCAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC02ODIsNyArNjgyLDcgQEAKICAqIGZpbGVzeXN0ZW1zIHdoaWNoIGRvbid0IHVzZSByZWFsIGJsb2NrLWRldmljZXMuICAtLSBqcnMKICAqLwogCi1zdGF0aWMgc3RydWN0IGlkciB1bm5hbWVkX2Rldl9pZHI7CitzdGF0aWMgREVGSU5FX0lEQSh1bm5hbWVkX2Rldl9pZGEpOwogc3RhdGljIERFRklORV9TUElOTE9DSyh1bm5hbWVkX2Rldl9sb2NrKTsvKiBwcm90ZWN0cyB0aGUgYWJvdmUgKi8KIAogaW50IHNldF9hbm9uX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdm9pZCAqZGF0YSkKQEAgLTY5MSwxMCArNjkxLDEwIEBACiAJaW50IGVycm9yOwogCiAgcmV0cnk6Ci0JaWYgKGlkcl9wcmVfZ2V0KCZ1bm5hbWVkX2Rldl9pZHIsIEdGUF9BVE9NSUMpID09IDApCisJaWYgKGlkYV9wcmVfZ2V0KCZ1bm5hbWVkX2Rldl9pZGEsIEdGUF9BVE9NSUMpID09IDApCiAJCXJldHVybiAtRU5PTUVNOwogCXNwaW5fbG9jaygmdW5uYW1lZF9kZXZfbG9jayk7Ci0JZXJyb3IgPSBpZHJfZ2V0X25ldygmdW5uYW1lZF9kZXZfaWRyLCBOVUxMLCAmZGV2KTsKKwllcnJvciA9IGlkYV9nZXRfbmV3KCZ1bm5hbWVkX2Rldl9pZGEsICZkZXYpOwogCXNwaW5fdW5sb2NrKCZ1bm5hbWVkX2Rldl9sb2NrKTsKIAlpZiAoZXJyb3IgPT0gLUVBR0FJTikKIAkJLyogV2UgcmFjZWQgYW5kIGxvc3Qgd2l0aCBhbm90aGVyIENQVS4gKi8KQEAgLTcwNCw3ICs3MDQsNyBAQAogCiAJaWYgKChkZXYgJiBNQVhfSURfTUFTSykgPT0gKDEgPDwgTUlOT1JCSVRTKSkgewogCQlzcGluX2xvY2soJnVubmFtZWRfZGV2X2xvY2spOwotCQlpZHJfcmVtb3ZlKCZ1bm5hbWVkX2Rldl9pZHIsIGRldik7CisJCWlkYV9yZW1vdmUoJnVubmFtZWRfZGV2X2lkYSwgZGV2KTsKIAkJc3Bpbl91bmxvY2soJnVubmFtZWRfZGV2X2xvY2spOwogCQlyZXR1cm4gLUVNRklMRTsKIAl9CkBAIC03MjAsMTcgKzcyMCwxMiBAQAogCiAJZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzYik7CiAJc3Bpbl9sb2NrKCZ1bm5hbWVkX2Rldl9sb2NrKTsKLQlpZHJfcmVtb3ZlKCZ1bm5hbWVkX2Rldl9pZHIsIHNsb3QpOworCWlkYV9yZW1vdmUoJnVubmFtZWRfZGV2X2lkYSwgc2xvdCk7CiAJc3Bpbl91bmxvY2soJnVubmFtZWRfZGV2X2xvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKGtpbGxfYW5vbl9zdXBlcik7CiAKLXZvaWQgX19pbml0IHVubmFtZWRfZGV2X2luaXQodm9pZCkKLXsKLQlpZHJfaW5pdCgmdW5uYW1lZF9kZXZfaWRyKTsKLX0KLQogdm9pZCBraWxsX2xpdHRlcl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWlmIChzYi0+c19yb290KQpAQCAtNzYwLDkgKzc1NSwxMyBAQAogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzOworCWZtb2RlX3QgbW9kZSA9IEZNT0RFX1JFQUQ7CiAJaW50IGVycm9yID0gMDsKIAotCWJkZXYgPSBvcGVuX2JkZXZfZXhjbChkZXZfbmFtZSwgZmxhZ3MsIGZzX3R5cGUpOworCWlmICghKGZsYWdzICYgTVNfUkRPTkxZKSkKKwkJbW9kZSB8PSBGTU9ERV9XUklURTsKKworCWJkZXYgPSBvcGVuX2JkZXZfZXhjbHVzaXZlKGRldl9uYW1lLCBtb2RlLCBmc190eXBlKTsKIAlpZiAoSVNfRVJSKGJkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihiZGV2KTsKIApAQCAtNzg1LDExICs3ODQsMTIgQEAKIAkJCWdvdG8gZXJyb3JfYmRldjsKIAkJfQogCi0JCWNsb3NlX2JkZXZfZXhjbChiZGV2KTsKKwkJY2xvc2VfYmRldl9leGNsdXNpdmUoYmRldiwgbW9kZSk7CiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCiAJCXMtPnNfZmxhZ3MgPSBmbGFnczsKKwkJcy0+c19tb2RlID0gbW9kZTsKIAkJc3RybGNweShzLT5zX2lkLCBiZGV2bmFtZShiZGV2LCBiKSwgc2l6ZW9mKHMtPnNfaWQpKTsKIAkJc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBibG9ja19zaXplKGJkZXYpKTsKIAkJZXJyb3IgPSBmaWxsX3N1cGVyKHMsIGRhdGEsIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwpAQCAtODA3LDcgKzgwNyw3IEBACiBlcnJvcl9zOgogCWVycm9yID0gUFRSX0VSUihzKTsKIGVycm9yX2JkZXY6Ci0JY2xvc2VfYmRldl9leGNsKGJkZXYpOworCWNsb3NlX2JkZXZfZXhjbHVzaXZlKGJkZXYsIG1vZGUpOwogZXJyb3I6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtODE3LDEwICs4MTcsMTEgQEAKIHZvaWQga2lsbF9ibG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBzYi0+c19iZGV2OworCWZtb2RlX3QgbW9kZSA9IHNiLT5zX21vZGU7CiAKIAlnZW5lcmljX3NodXRkb3duX3N1cGVyKHNiKTsKIAlzeW5jX2Jsb2NrZGV2KGJkZXYpOwotCWNsb3NlX2JkZXZfZXhjbChiZGV2KTsKKwljbG9zZV9iZGV2X2V4Y2x1c2l2ZShiZGV2LCBtb2RlKTsKIH0KIAogRVhQT1JUX1NZTUJPTChraWxsX2Jsb2NrX3N1cGVyKTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggM2EwNWE1OS4uODJkM2I3OSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTk4Myw0ICs5ODMsNSBAQAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXNmc19kaXJfb3BlcmF0aW9ucyA9IHsKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyCT0gc3lzZnNfcmVhZGRpciwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwpkaWZmIC0tZ2l0IGEvZnMvdGltZXJmZC5jIGIvZnMvdGltZXJmZC5jCmluZGV4IGM1MDJjNjAuLjA4NjJmMGUgMTAwNjQ0Ci0tLSBhL2ZzL3RpbWVyZmQuYworKysgYi9mcy90aW1lcmZkLmMKQEAgLTUyLDExICs1Miw5IEBACiAKIHN0YXRpYyBrdGltZV90IHRpbWVyZmRfZ2V0X3JlbWFpbmluZyhzdHJ1Y3QgdGltZXJmZF9jdHggKmN0eCkKIHsKLQlrdGltZV90IG5vdywgcmVtYWluaW5nOworCWt0aW1lX3QgcmVtYWluaW5nOwogCi0Jbm93ID0gY3R4LT50bXIuYmFzZS0+Z2V0X3RpbWUoKTsKLQlyZW1haW5pbmcgPSBrdGltZV9zdWIoY3R4LT50bXIuZXhwaXJlcywgbm93KTsKLQorCXJlbWFpbmluZyA9IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcoJmN0eC0+dG1yKTsKIAlyZXR1cm4gcmVtYWluaW5nLnR2NjQgPCAwID8ga3RpbWVfc2V0KDAsIDApOiByZW1haW5pbmc7CiB9CiAKQEAgLTc0LDcgKzcyLDcgQEAKIAljdHgtPnRpY2tzID0gMDsKIAljdHgtPnRpbnR2ID0gdGltZXNwZWNfdG9fa3RpbWUoa3Rtci0+aXRfaW50ZXJ2YWwpOwogCWhydGltZXJfaW5pdCgmY3R4LT50bXIsIGN0eC0+Y2xvY2tpZCwgaHRtb2RlKTsKLQljdHgtPnRtci5leHBpcmVzID0gdGV4cDsKKwlocnRpbWVyX3NldF9leHBpcmVzKCZjdHgtPnRtciwgdGV4cCk7CiAJY3R4LT50bXIuZnVuY3Rpb24gPSB0aW1lcmZkX3RtcnByb2M7CiAJaWYgKHRleHAudHY2NCAhPSAwKQogCQlocnRpbWVyX3N0YXJ0KCZjdHgtPnRtciwgdGV4cCwgaHRtb2RlKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2J1ZGdldC5jIGIvZnMvdWJpZnMvYnVkZ2V0LmMKaW5kZXggNzNkYjQ2NC4uMWE0OTczZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvYnVkZ2V0LmMKKysrIGIvZnMvdWJpZnMvYnVkZ2V0LmMKQEAgLTQxNCwxOSArNDE0LDIxIEBACiAJICogICAgQGMtPmxzdC5lbXB0eV9sZWJzICsgQGMtPmZyZWVhYmxlX2NudCArIEBjLT5pZHhfZ2NfY250IC0KIAkgKiAgICBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMKIAkgKgotCSAqIEBlbXB0eV9sZWJzIGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGFyZSBlbXB0eS4gQGZyZWVhYmxlX2NudCBhcmUKLQkgKiBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGNvbnRhaW4gb25seSBmcmVlIGFuZCBkaXJ0eSBzcGFjZSBhbmQgdGhlCi0JICogaW5kZXggYWxsb2NhdGlvbiBhbHdheXMgb2NjdXJzIGFmdGVyIHdidWZzIGFyZSBzeW5jaCdlZC4KLQkgKiBAaWR4X2djX2NudCBhcmUgYXZhaWxhYmxlIGJlY2F1c2UgdGhleSBhcmUgaW5kZXggTEVCcyB0aGF0IGhhdmUgYmVlbgotCSAqIGdhcmJhZ2UgY29sbGVjdGVkIChpbmNsdWRpbmcgdHJpdmlhbCBHQykgYW5kIGFyZSBhd2FpdGluZyB0aGUgY29tbWl0Ci0JICogYmVmb3JlIHRoZXkgY2FuIGJlIHVubWFwcGVkIC0gbm90ZSB0aGF0IHRoZSBpbi10aGUtZ2FwcyBtZXRob2Qgd2lsbAotCSAqIGdyYWIgdGhlc2UgaWYgaXQgbmVlZHMgdGhlbS4gQHRha2VuX2VtcHR5X2xlYnMgYXJlIGVtcHR5X2xlYnMgdGhhdAotCSAqIGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBmb3Igc29tZSBwdXJwb3NlIChhbHNvIGluY2x1ZGVzIHRob3NlCi0JICogTEVCcyBvbiB0aGUgQGlkeF9nYyBsaXN0KS4KKwkgKiBAYy0+bHN0LmVtcHR5X2xlYnMgYXJlIGF2YWlsYWJsZSBiZWNhdXNlIHRoZXkgYXJlIGVtcHR5LgorCSAqIEBjLT5mcmVlYWJsZV9jbnQgYXJlIGF2YWlsYWJsZSBiZWNhdXNlIHRoZXkgY29udGFpbiBvbmx5IGZyZWUgYW5kCisJICogZGlydHkgc3BhY2UsIEBjLT5pZHhfZ2NfY250IGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGFyZSBpbmRleAorCSAqIExFQnMgdGhhdCBoYXZlIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQgYW5kIGFyZSBhd2FpdGluZyB0aGUgY29tbWl0CisJICogYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuIEFuZCB0aGUgaW4tdGhlLWdhcHMgbWV0aG9kIHdpbGwgZ3JhYiB0aGVzZQorCSAqIGlmIGl0IG5lZWRzIHRoZW0uIEBjLT5sc3QudGFrZW5fZW1wdHlfbGVicyBhcmUgZW1wdHkgTEVCcyB0aGF0IGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGZvciBzb21lIHB1cnBvc2UuCiAJICoKLQkgKiBOb3RlLCBAdGFrZW5fZW1wdHlfbGVicyBtYXkgdGVtcG9yYXJpbHkgYmUgaGlnaGVyIGJ5IG9uZSBiZWNhdXNlIG9mCi0JICogdGhlIHdheSB3ZSBzZXJpYWxpemUgTEVCIGFsbG9jYXRpb25zIGFuZCBidWRnZXRpbmcuIFNlZSBhIGNvbW1lbnQgaW4KLQkgKiAndWJpZnNfZmluZF9mcmVlX3NwYWNlKCknLgorCSAqIE5vdGUsIEBjLT5pZHhfZ2NfY250IGlzIGluY2x1ZGVkIHRvIGJvdGggQGMtPmxzdC5lbXB0eV9sZWJzIChiZWNhdXNlCisJICogdGhlc2UgTEVCcyBhcmUgZW1wdHkpIGFuZCB0byBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMgKGJlY2F1c2UgdGhleQorCSAqIGFyZSB0YWtlbiB1bnRpbCBhZnRlciB0aGUgY29tbWl0KS4KKwkgKgorCSAqIE5vdGUsIEBjLT5sc3QudGFrZW5fZW1wdHlfbGVicyBtYXkgdGVtcG9yYXJpbHkgYmUgaGlnaGVyIGJ5IG9uZQorCSAqIGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBzZXJpYWxpemUgTEVCIGFsbG9jYXRpb25zIGFuZCBidWRnZXRpbmcuIFNlZSBhCisJICogY29tbWVudCBpbiAndWJpZnNfZmluZF9mcmVlX3NwYWNlKCknLgogCSAqLwogCWxlYnMgPSBjLT5sc3QuZW1wdHlfbGVicyArIGMtPmZyZWVhYmxlX2NudCArIGMtPmlkeF9nY19jbnQgLQogCSAgICAgICBjLT5sc3QudGFrZW5fZW1wdHlfbGViczsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2NvbXByZXNzLmMgYi9mcy91Ymlmcy9jb21wcmVzcy5jCmluZGV4IDViYjUxZGEuLmEwYWRhNTkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2NvbXByZXNzLmMKKysrIGIvZnMvdWJpZnMvY29tcHJlc3MuYwpAQCAtOTEsOCArOTEsNiBAQAogICoKICAqIE5vdGUsIGlmIHRoZSBpbnB1dCBidWZmZXIgd2FzIG5vdCBjb21wcmVzc2VkLCBpdCBpcyBjb3BpZWQgdG8gdGhlIG91dHB1dAogICogYnVmZmVyIGFuZCAlVUJJRlNfQ09NUFJfTk9ORSBpcyByZXR1cm5lZCBpbiBAY29tcHJfdHlwZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zICUwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHZvaWQgdWJpZnNfY29tcHJlc3MoY29uc3Qgdm9pZCAqaW5fYnVmLCBpbnQgaW5fbGVuLCB2b2lkICpvdXRfYnVmLCBpbnQgKm91dF9sZW4sCiAJCSAgICBpbnQgKmNvbXByX3R5cGUpCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5jIGIvZnMvdWJpZnMvZGVidWcuYwppbmRleCBkN2Y3NjQ1Li43MTg2NDAwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5jCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmMKQEAgLTIyMiwzMCArMjIyLDM4IEBACiB7CiAJY29uc3Qgc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJpbm9kZSAgICAgICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQlwcmludGsoS0VSTl9ERUJVRyAic2l6ZSAgICAgICAlbGx1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJEdW1wIGluLW1lbW9yeSBpbm9kZToiKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRpbm9kZSAgICAgICAgICAlbHVcbiIsIGlub2RlLT5pX2lubyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0c2l6ZSAgICAgICAgICAgJWxsdVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSkpOwotCXByaW50ayhLRVJOX0RFQlVHICJubGluayAgICAgICV1XG4iLCBpbm9kZS0+aV9ubGluayk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInVpZCAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfdWlkKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZ2lkICAgICAgICAldVxuIiwgKHVuc2lnbmVkIGludClpbm9kZS0+aV9naWQpOwotCXByaW50ayhLRVJOX0RFQlVHICJhdGltZSAgICAgICV1LiV1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJcdG5saW5rICAgICAgICAgICV1XG4iLCBpbm9kZS0+aV9ubGluayk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0dWlkICAgICAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfdWlkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRnaWQgICAgICAgICAgICAldVxuIiwgKHVuc2lnbmVkIGludClpbm9kZS0+aV9naWQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGF0aW1lICAgICAgICAgICV1LiV1XG4iLAogCSAgICAgICAodW5zaWduZWQgaW50KWlub2RlLT5pX2F0aW1lLnR2X3NlYywKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9hdGltZS50dl9uc2VjKTsKLQlwcmludGsoS0VSTl9ERUJVRyAibXRpbWUgICAgICAldS4ldVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRtdGltZSAgICAgICAgICAldS4ldVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9tdGltZS50dl9zZWMsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfbXRpbWUudHZfbnNlYyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImN0aW1lICAgICAgICV1LiV1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJcdGN0aW1lICAgICAgICAgICV1LiV1XG4iLAogCSAgICAgICAodW5zaWduZWQgaW50KWlub2RlLT5pX2N0aW1lLnR2X3NlYywKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9jdGltZS50dl9uc2VjKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiY3JlYXRfc3FudW0gJWxsdVxuIiwgdWktPmNyZWF0X3NxbnVtKTsKLQlwcmludGsoS0VSTl9ERUJVRyAieGF0dHJfc2l6ZSAgJXVcbiIsIHVpLT54YXR0cl9zaXplKTsKLQlwcmludGsoS0VSTl9ERUJVRyAieGF0dHJfY250ICAgJXVcbiIsIHVpLT54YXR0cl9jbnQpOwotCXByaW50ayhLRVJOX0RFQlVHICJ4YXR0cl9uYW1lcyAldVxuIiwgdWktPnhhdHRyX25hbWVzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZGlydHkgICAgICAgJXVcbiIsIHVpLT5kaXJ0eSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInhhdHRyICAgICAgICV1XG4iLCB1aS0+eGF0dHIpOwotCXByaW50ayhLRVJOX0RFQlVHICJmbGFncyAgICAgICAlZFxuIiwgdWktPmZsYWdzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiY29tcHJfdHlwZSAgJWRcbiIsIHVpLT5jb21wcl90eXBlKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZGF0YV9sZW4gICAgJWRcbiIsIHVpLT5kYXRhX2xlbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0Y3JlYXRfc3FudW0gICAgJWxsdVxuIiwgdWktPmNyZWF0X3NxbnVtKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0cl9zaXplICAgICAldVxuIiwgdWktPnhhdHRyX3NpemUpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHhhdHRyX2NudCAgICAgICV1XG4iLCB1aS0+eGF0dHJfY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0cl9uYW1lcyAgICAldVxuIiwgdWktPnhhdHRyX25hbWVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkaXJ0eSAgICAgICAgICAldVxuIiwgdWktPmRpcnR5KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0ciAgICAgICAgICAldVxuIiwgdWktPnhhdHRyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRidWxrX3JlYWQgICAgICAldVxuIiwgdWktPnhhdHRyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRzeW5jZWRfaV9zaXplICAlbGx1XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXVpLT5zeW5jZWRfaV9zaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR1aV9zaXplICAgICAgICAlbGx1XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXVpLT51aV9zaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRmbGFncyAgICAgICAgICAlZFxuIiwgdWktPmZsYWdzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRjb21wcl90eXBlICAgICAlZFxuIiwgdWktPmNvbXByX3R5cGUpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxhc3RfcGFnZV9yZWFkICVsdVxuIiwgdWktPmxhc3RfcGFnZV9yZWFkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRyZWFkX2luX2Ffcm93ICAlbHVcbiIsIHVpLT5yZWFkX2luX2Ffcm93KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkYXRhX2xlbiAgICAgICAlZFxuIiwgdWktPmRhdGFfbGVuKTsKIH0KIAogdm9pZCBkYmdfZHVtcF9ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCB2b2lkICpub2RlKQpAQCAtNjQ3LDYgKzY1NSw0MyBAQAogCX0KIH0KIAordm9pZCBkYmdfZHVtcF9scHRfaW5mbyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwlpbnQgaTsKKworCXNwaW5fbG9jaygmZGJnX2xvY2spOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxwdF9zejogICAgICAgICVsbGRcbiIsIGMtPmxwdF9zeik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0cG5vZGVfc3o6ICAgICAgJWRcbiIsIGMtPnBub2RlX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRubm9kZV9zejogICAgICAlZFxuIiwgYy0+bm5vZGVfc3opOworCXByaW50ayhLRVJOX0RFQlVHICJcdGx0YWJfc3o6ICAgICAgICVkXG4iLCBjLT5sdGFiX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRsc2F2ZV9zejogICAgICAlZFxuIiwgYy0+bHNhdmVfc3opOworCXByaW50ayhLRVJOX0RFQlVHICJcdGJpZ19scHQ6ICAgICAgICVkXG4iLCBjLT5iaWdfbHB0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfaGdodDogICAgICAlZFxuIiwgYy0+bHB0X2hnaHQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHBub2RlX2NudDogICAgICVkXG4iLCBjLT5wbm9kZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdG5ub2RlX2NudDogICAgICVkXG4iLCBjLT5ubm9kZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGRpcnR5X3BuX2NudDogICVkXG4iLCBjLT5kaXJ0eV9wbl9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGRpcnR5X25uX2NudDogICVkXG4iLCBjLT5kaXJ0eV9ubl9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxzYXZlX2NudDogICAgICVkXG4iLCBjLT5sc2F2ZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHNwYWNlX2JpdHM6ICAgICVkXG4iLCBjLT5zcGFjZV9iaXRzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfbG51bV9iaXRzOiAlZFxuIiwgYy0+bHB0X2xudW1fYml0cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bHB0X29mZnNfYml0czogJWRcbiIsIGMtPmxwdF9vZmZzX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxwdF9zcGNfYml0czogICVkXG4iLCBjLT5scHRfc3BjX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHBjbnRfYml0czogICAgICVkXG4iLCBjLT5wY250X2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxudW1fYml0czogICAgICVkXG4iLCBjLT5sbnVtX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdExQVCByb290IGlzIGF0ICVkOiVkXG4iLCBjLT5scHRfbG51bSwgYy0+bHB0X29mZnMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdExQVCBoZWFkIGlzIGF0ICVkOiVkXG4iLAorCSAgICAgICBjLT5uaGVhZF9sbnVtLCBjLT5uaGVhZF9vZmZzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgbHRhYiBpcyBhdCAlZDolZFxuIiwgYy0+bHRhYl9sbnVtLCBjLT5sdGFiX29mZnMpOworCWlmIChjLT5iaWdfbHB0KQorCQlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgbHNhdmUgaXMgYXQgJWQ6JWRcbiIsCisJCSAgICAgICBjLT5sc2F2ZV9sbnVtLCBjLT5sc2F2ZV9vZmZzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYy0+bHB0X2xlYnM7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0TFBUIExFQiAlZCBmcmVlICVkIGRpcnR5ICVkIHRnYyAlZCAiCisJCSAgICAgICAiY210ICVkXG4iLCBpICsgYy0+bHB0X2ZpcnN0LCBjLT5sdGFiW2ldLmZyZWUsCisJCSAgICAgICBjLT5sdGFiW2ldLmRpcnR5LCBjLT5sdGFiW2ldLnRnYywgYy0+bHRhYltpXS5jbXQpOworCXNwaW5fdW5sb2NrKCZkYmdfbG9jayk7Cit9CisKIHZvaWQgZGJnX2R1bXBfbGViKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSkKIHsKIAlzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWI7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5oIGIvZnMvdWJpZnMvZGVidWcuaAppbmRleCA1MDMxNWZjLi4zM2Q2Yjk1IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5oCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmgKQEAgLTIyNCw2ICsyMjQsNyBAQAogdm9pZCBkYmdfZHVtcF9idWRnKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIHZvaWQgZGJnX2R1bXBfbHByb3AoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwKTsKIHZvaWQgZGJnX2R1bXBfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKK3ZvaWQgZGJnX2R1bXBfbHB0X2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpOwogdm9pZCBkYmdfZHVtcF9sZWIoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtKTsKIHZvaWQgZGJnX2R1bXBfem5vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCiAJCSAgICBjb25zdCBzdHJ1Y3QgdWJpZnNfem5vZGUgKnpub2RlKTsKQEAgLTI0OSw2ICsyNTAsOCBAQAogaW50IGRiZ19jaGVja19vbGRfaW5kZXgoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc196YnJhbmNoICp6cm9vdCk7CiBpbnQgZGJnX2NoZWNrX2NhdHMoc3RydWN0IHViaWZzX2luZm8gKmMpOwogaW50IGRiZ19jaGVja19sdGFiKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKK2ludCBkYmdfY2hrX2xwdF9mcmVlX3NwYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CitpbnQgZGJnX2Noa19scHRfc3ooc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBhY3Rpb24sIGludCBsZW4pOwogaW50IGRiZ19jaGVja19zeW5jZWRfaV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IGRiZ19jaGVja19kaXJfc2l6ZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICpkaXIpOwogaW50IGRiZ19jaGVja190bmMoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBleHRyYSk7CkBAIC0zNjcsNiArMzcwLDcgQEAKICNkZWZpbmUgZGJnX2R1bXBfYnVkZyhjKSAgICAgICAgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2xwcm9wKGMsIGxwKSAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF9scHJvcHMoYykgICAgICAgICAgICAgICAgICAgICh7fSkKKyNkZWZpbmUgZGJnX2R1bXBfbHB0X2luZm8oYykgICAgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2xlYihjLCBsbnVtKSAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF96bm9kZShjLCB6bm9kZSkgICAgICAgICAgICAgICh7fSkKICNkZWZpbmUgZGJnX2R1bXBfaGVhcChjLCBoZWFwLCBjYXQpICAgICAgICAgICAoe30pCkBAIC0zNzksNiArMzgzLDggQEAKICNkZWZpbmUgZGJnX2NoZWNrX29sZF9pbmRleChjLCB6cm9vdCkgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2NhdHMoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2x0YWIoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGJnX2Noa19scHRfZnJlZV9zcGMoYykgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGJnX2Noa19scHRfc3ooYywgYWN0aW9uLCBsZW4pICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX3N5bmNlZF9pX3NpemUoaW5vZGUpICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2Rpcl9zaXplKGMsIGRpcikgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX3RuYyhjLCB4KSAgICAgICAgICAgICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2ZpbGUuYyBiL2ZzL3ViaWZzL2ZpbGUuYwppbmRleCAzZDY5OGUyLi41MWNmNTExIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9maWxlLmMKKysrIGIvZnMvdWJpZnMvZmlsZS5jCkBAIC0xNDcsNiArMTQ3LDEyIEBACiAJCQkJZXJyID0gcmV0OwogCQkJCWlmIChlcnIgIT0gLUVOT0VOVCkKIAkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGJsb2NrICsgMSA9PSBiZXlvbmQpIHsKKwkJCQlpbnQgZGxlbiA9IGxlMzJfdG9fY3B1KGRuLT5zaXplKTsKKwkJCQlpbnQgaWxlbiA9IGlfc2l6ZSAmIChVQklGU19CTE9DS19TSVpFIC0gMSk7CisKKwkJCQlpZiAoaWxlbiAmJiBpbGVuIDwgZGxlbikKKwkJCQkJbWVtc2V0KGFkZHIgKyBpbGVuLCAwLCBkbGVuIC0gaWxlbik7CiAJCQl9CiAJCX0KIAkJaWYgKCsraSA+PSBVQklGU19CTE9DS1NfUEVSX1BBR0UpCkBAIC01NzcsOCArNTgzLDI2MiBAQAogCXJldHVybiBjb3BpZWQ7CiB9CiAKKy8qKgorICogcG9wdWxhdGVfcGFnZSAtIGNvcHkgZGF0YSBub2RlcyBpbnRvIGEgcGFnZSBmb3IgYnVsay1yZWFkLgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQHBhZ2U6IHBhZ2UKKyAqIEBidTogYnVsay1yZWFkIGluZm9ybWF0aW9uCisgKiBAbjogbmV4dCB6YnJhbmNoIHNsb3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcG9wdWxhdGVfcGFnZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgc3RydWN0IGJ1X2luZm8gKmJ1LCBpbnQgKm4pCit7CisJaW50IGkgPSAwLCBubiA9ICpuLCBvZmZzID0gYnUtPnpicmFuY2hbMF0ub2ZmcywgaG9sZSA9IDAsIHJlYWQgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJdW5zaWduZWQgaW50IHBhZ2VfYmxvY2s7CisJdm9pZCAqYWRkciwgKnphZGRyOworCXBnb2ZmX3QgZW5kX2luZGV4OworCisJZGJnX2dlbigiaW5vICVsdSwgcGcgJWx1LCBpX3NpemUgJWxsZCwgZmxhZ3MgJSNseCIsCisJCWlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgsIGlfc2l6ZSwgcGFnZS0+ZmxhZ3MpOworCisJYWRkciA9IHphZGRyID0ga21hcChwYWdlKTsKKworCWVuZF9pbmRleCA9IChpX3NpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCWlmICghaV9zaXplIHx8IHBhZ2UtPmluZGV4ID4gZW5kX2luZGV4KSB7CisJCWhvbGUgPSAxOworCQltZW1zZXQoYWRkciwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJZ290byBvdXRfaG9sZTsKKwl9CisKKwlwYWdlX2Jsb2NrID0gcGFnZS0+aW5kZXggPDwgVUJJRlNfQkxPQ0tTX1BFUl9QQUdFX1NISUZUOworCXdoaWxlICgxKSB7CisJCWludCBlcnIsIGxlbiwgb3V0X2xlbiwgZGxlbjsKKworCQlpZiAobm4gPj0gYnUtPmNudCkgeworCQkJaG9sZSA9IDE7CisJCQltZW1zZXQoYWRkciwgMCwgVUJJRlNfQkxPQ0tfU0laRSk7CisJCX0gZWxzZSBpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtubl0ua2V5KSA9PSBwYWdlX2Jsb2NrKSB7CisJCQlzdHJ1Y3QgdWJpZnNfZGF0YV9ub2RlICpkbjsKKworCQkJZG4gPSBidS0+YnVmICsgKGJ1LT56YnJhbmNoW25uXS5vZmZzIC0gb2Zmcyk7CisKKwkJCXViaWZzX2Fzc2VydChkbi0+Y2guc3FudW0gPgorCQkJCSAgICAgdWJpZnNfaW5vZGUoaW5vZGUpLT5jcmVhdF9zcW51bSk7CisKKwkJCWxlbiA9IGxlMzJfdG9fY3B1KGRuLT5zaXplKTsKKwkJCWlmIChsZW4gPD0gMCB8fCBsZW4gPiBVQklGU19CTE9DS19TSVpFKQorCQkJCWdvdG8gb3V0X2VycjsKKworCQkJZGxlbiA9IGxlMzJfdG9fY3B1KGRuLT5jaC5sZW4pIC0gVUJJRlNfREFUQV9OT0RFX1NaOworCQkJb3V0X2xlbiA9IFVCSUZTX0JMT0NLX1NJWkU7CisJCQllcnIgPSB1Ymlmc19kZWNvbXByZXNzKCZkbi0+ZGF0YSwgZGxlbiwgYWRkciwgJm91dF9sZW4sCisJCQkJCSAgICAgICBsZTE2X3RvX2NwdShkbi0+Y29tcHJfdHlwZSkpOworCQkJaWYgKGVyciB8fCBsZW4gIT0gb3V0X2xlbikKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWlmIChsZW4gPCBVQklGU19CTE9DS19TSVpFKQorCQkJCW1lbXNldChhZGRyICsgbGVuLCAwLCBVQklGU19CTE9DS19TSVpFIC0gbGVuKTsKKworCQkJbm4gKz0gMTsKKwkJCXJlYWQgPSAoaSA8PCBVQklGU19CTE9DS19TSElGVCkgKyBsZW47CisJCX0gZWxzZSBpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtubl0ua2V5KSA8IHBhZ2VfYmxvY2spIHsKKwkJCW5uICs9IDE7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWhvbGUgPSAxOworCQkJbWVtc2V0KGFkZHIsIDAsIFVCSUZTX0JMT0NLX1NJWkUpOworCQl9CisJCWlmICgrK2kgPj0gVUJJRlNfQkxPQ0tTX1BFUl9QQUdFKQorCQkJYnJlYWs7CisJCWFkZHIgKz0gVUJJRlNfQkxPQ0tfU0laRTsKKwkJcGFnZV9ibG9jayArPSAxOworCX0KKworCWlmIChlbmRfaW5kZXggPT0gcGFnZS0+aW5kZXgpIHsKKwkJaW50IGxlbiA9IGlfc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKworCQlpZiAobGVuICYmIGxlbiA8IHJlYWQpCisJCQltZW1zZXQoemFkZHIgKyBsZW4sIDAsIHJlYWQgLSBsZW4pOworCX0KKworb3V0X2hvbGU6CisJaWYgKGhvbGUpIHsKKwkJU2V0UGFnZUNoZWNrZWQocGFnZSk7CisJCWRiZ19nZW4oImhvbGUiKTsKKwl9CisKKwlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJa3VubWFwKHBhZ2UpOworCSpuID0gbm47CisJcmV0dXJuIDA7CisKK291dF9lcnI6CisJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisJU2V0UGFnZUVycm9yKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWt1bm1hcChwYWdlKTsKKwl1Ymlmc19lcnIoImJhZCBkYXRhIG5vZGUgKGJsb2NrICV1LCBpbm9kZSAlbHUpIiwKKwkJICBwYWdlX2Jsb2NrLCBpbm9kZS0+aV9pbm8pOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHViaWZzX2RvX2J1bGtfcmVhZCAtIGRvIGJ1bGstcmVhZC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBwYWdlMTogZmlyc3QgcGFnZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiB0aGUgYnVsay1yZWFkIGlzIGRvbmUsIG90aGVyd2lzZSAlMCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCB1Ymlmc19kb19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBwYWdlICpwYWdlMSkKK3sKKwlwZ29mZl90IG9mZnNldCA9IHBhZ2UxLT5pbmRleCwgZW5kX2luZGV4OworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZTEtPm1hcHBpbmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgYnVfaW5mbyAqYnU7CisJaW50IGVyciwgcGFnZV9pZHgsIHBhZ2VfY250LCByZXQgPSAwLCBuID0gMDsKKwlsb2ZmX3QgaXNpemU7CisKKwlidSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBidV9pbmZvKSwgR0ZQX05PRlMpOworCWlmICghYnUpCisJCXJldHVybiAwOworCisJYnUtPmJ1Zl9sZW4gPSBjLT5idWxrX3JlYWRfYnVmX3NpemU7CisJYnUtPmJ1ZiA9IGttYWxsb2MoYnUtPmJ1Zl9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1LT5idWYpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlkYXRhX2tleV9pbml0KGMsICZidS0+a2V5LCBpbm9kZS0+aV9pbm8sCisJCSAgICAgIG9mZnNldCA8PCBVQklGU19CTE9DS1NfUEVSX1BBR0VfU0hJRlQpOworCisJZXJyID0gdWJpZnNfdG5jX2dldF9idV9rZXlzKGMsIGJ1KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF93YXJuOworCisJaWYgKGJ1LT5lb2YpIHsKKwkJLyogVHVybiBvZmYgYnVsay1yZWFkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKwkJdWktPnJlYWRfaW5fYV9yb3cgPSAxOworCQl1aS0+YnVsa19yZWFkID0gMDsKKwl9CisKKwlwYWdlX2NudCA9IGJ1LT5ibGtfY250ID4+IFVCSUZTX0JMT0NLU19QRVJfUEFHRV9TSElGVDsKKwlpZiAoIXBhZ2VfY250KSB7CisJCS8qCisJCSAqIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBibG9ja3MgcGVyIHBhZ2UgYW5kIHRoZQorCQkgKiBibG9ja3MgZm9yIHRoZSBmaXJzdCBwYWdlIHdlIGFyZSBsb29raW5nIGZvciwgYXJlIG5vdAorCQkgKiB0b2dldGhlci4gSWYgYWxsIHRoZSBwYWdlcyB3ZXJlIGxpa2UgdGhpcywgYnVsay1yZWFkIHdvdWxkCisJCSAqIHJlZHVjZSBwZXJmb3JtYW5jZSwgc28gd2UgdHVybiBpdCBvZmYgZm9yIGEgd2hpbGUuCisJCSAqLworCQl1aS0+cmVhZF9pbl9hX3JvdyA9IDA7CisJCXVpLT5idWxrX3JlYWQgPSAwOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWlmIChidS0+Y250KSB7CisJCWVyciA9IHViaWZzX3RuY19idWxrX3JlYWQoYywgYnUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfd2FybjsKKwl9CisKKwllcnIgPSBwb3B1bGF0ZV9wYWdlKGMsIHBhZ2UxLCBidSwgJm4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3dhcm47CisKKwl1bmxvY2tfcGFnZShwYWdlMSk7CisJcmV0ID0gMTsKKworCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWlmIChpc2l6ZSA9PSAwKQorCQlnb3RvIG91dF9mcmVlOworCWVuZF9pbmRleCA9ICgoaXNpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKworCWZvciAocGFnZV9pZHggPSAxOyBwYWdlX2lkeCA8IHBhZ2VfY250OyBwYWdlX2lkeCsrKSB7CisJCXBnb2ZmX3QgcGFnZV9vZmZzZXQgPSBvZmZzZXQgKyBwYWdlX2lkeDsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkJaWYgKHBhZ2Vfb2Zmc2V0ID4gZW5kX2luZGV4KQorCQkJYnJlYWs7CisJCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIHBhZ2Vfb2Zmc2V0LAorCQkJCQkgICBHRlBfTk9GUyB8IF9fR0ZQX0NPTEQpOworCQlpZiAoIXBhZ2UpCisJCQlicmVhazsKKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCisJCQllcnIgPSBwb3B1bGF0ZV9wYWdlKGMsIHBhZ2UsIGJ1LCAmbik7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwl1aS0+bGFzdF9wYWdlX3JlYWQgPSBvZmZzZXQgKyBwYWdlX2lkeCAtIDE7CisKK291dF9mcmVlOgorCWtmcmVlKGJ1LT5idWYpOworCWtmcmVlKGJ1KTsKKwlyZXR1cm4gcmV0OworCitvdXRfd2FybjoKKwl1Ymlmc193YXJuKCJpZ25vcmluZyBlcnJvciAlZCBhbmQgc2tpcHBpbmcgYnVsay1yZWFkIiwgZXJyKTsKKwlnb3RvIG91dF9mcmVlOworfQorCisvKioKKyAqIHViaWZzX2J1bGtfcmVhZCAtIGRldGVybWluZSB3aGV0aGVyIHRvIGJ1bGstcmVhZCBhbmQsIGlmIHNvLCBkbyBpdC4KKyAqIEBwYWdlOiBwYWdlIGZyb20gd2hpY2ggdG8gc3RhcnQgYnVsay1yZWFkLgorICoKKyAqIFNvbWUgZmxhc2ggbWVkaWEgYXJlIGNhcGFibGUgb2YgcmVhZGluZyBzZXF1ZW50aWFsbHkgYXQgZmFzdGVyIHJhdGVzLiBVQklGUworICogYnVsay1yZWFkIGZhY2lsaXR5IGlzIGRlc2lnbmVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoYXQsIGJ5IHJlYWRpbmcgaW4gb25lCisgKiBnbyBjb25zZWN1dGl2ZSBkYXRhIG5vZGVzIHRoYXQgYXJlIGFsc28gbG9jYXRlZCBjb25zZWN1dGl2ZWx5IGluIHRoZSBzYW1lCisgKiBMRUIuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiBhIGJ1bGstcmVhZCBpcyBkb25lIGFuZCAlMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdWJpZnNfYnVsa19yZWFkKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgdWJpZnNfaW5vZGUgKnVpID0gdWJpZnNfaW5vZGUoaW5vZGUpOworCXBnb2ZmX3QgaW5kZXggPSBwYWdlLT5pbmRleCwgbGFzdF9wYWdlX3JlYWQgPSB1aS0+bGFzdF9wYWdlX3JlYWQ7CisJaW50IHJldCA9IDA7CisKKwl1aS0+bGFzdF9wYWdlX3JlYWQgPSBpbmRleDsKKworCWlmICghYy0+YnVsa19yZWFkKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIEJ1bGstcmVhZCBpcyBwcm90ZWN0ZWQgYnkgdWlfbXV0ZXgsIGJ1dCBpdCBpcyBhbiBvcHRpbWl6YXRpb24sIHNvCisJICogZG9uJ3QgYm90aGVyIGlmIHdlIGNhbm5vdCBsb2NrIHRoZSBtdXRleC4KKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJnVpLT51aV9tdXRleCkpCisJCXJldHVybiAwOworCWlmIChpbmRleCAhPSBsYXN0X3BhZ2VfcmVhZCArIDEpIHsKKwkJLyogVHVybiBvZmYgYnVsay1yZWFkIGlmIHdlIHN0b3AgcmVhZGluZyBzZXF1ZW50aWFsbHkgKi8KKwkJdWktPnJlYWRfaW5fYV9yb3cgPSAxOworCQlpZiAodWktPmJ1bGtfcmVhZCkKKwkJCXVpLT5idWxrX3JlYWQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWlmICghdWktPmJ1bGtfcmVhZCkgeworCQl1aS0+cmVhZF9pbl9hX3JvdyArPSAxOworCQlpZiAodWktPnJlYWRfaW5fYV9yb3cgPCAzKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkvKiBUaHJlZSByZWFkcyBpbiBhIHJvdywgc28gc3dpdGNoIG9uIGJ1bGstcmVhZCAqLworCQl1aS0+YnVsa19yZWFkID0gMTsKKwl9CisJcmV0ID0gdWJpZnNfZG9fYnVsa19yZWFkKGMsIHBhZ2UpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnVpLT51aV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCB1Ymlmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJaWYgKHViaWZzX2J1bGtfcmVhZChwYWdlKSkKKwkJcmV0dXJuIDA7CiAJZG9fcmVhZHBhZ2UocGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maW5kLmMgYi9mcy91Ymlmcy9maW5kLmMKaW5kZXggNDc4MTRjZC4uNzE3ZDc5YyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmluZC5jCisrKyBiL2ZzL3ViaWZzL2ZpbmQuYwpAQCAtOTAxLDExICs5MDEsMTEgQEAKIAkgKiBpdCBpcyBuZWVkZWQgbm93IGZvciB0aGlzIGNvbW1pdC4KIAkgKi8KIAlscCA9IHViaWZzX2xwdF9sb29rdXBfZGlydHkoYywgbG51bSk7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihscCkpKQorCWlmIChJU19FUlIobHApKQogCQlyZXR1cm4gUFRSX0VSUihscCk7CiAJbHAgPSB1Ymlmc19jaGFuZ2VfbHAoYywgbHAsIExQUk9QU19OQywgTFBST1BTX05DLAogCQkJICAgICBscC0+ZmxhZ3MgfCBMUFJPUFNfSU5ERVgsIC0xKTsKLQlpZiAodW5saWtlbHkoSVNfRVJSKGxwKSkpCisJaWYgKElTX0VSUihscCkpCiAJCXJldHVybiBQVFJfRVJSKGxwKTsKIAlkYmdfZmluZCgiTEVCICVkLCBkaXJ0eSAlZCBhbmQgZnJlZSAlZCBmbGFncyAlI3giLAogCQkgbHAtPmxudW0sIGxwLT5kaXJ0eSwgbHAtPmZyZWUsIGxwLT5mbGFncyk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9nYy5jIGIvZnMvdWJpZnMvZ2MuYwppbmRleCAwMmFiYTM2Li4wYmVmNjUwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9nYy5jCisrKyBiL2ZzL3ViaWZzL2djLmMKQEAgLTk2LDYgKzk2LDQ4IEBACiB9CiAKIC8qKgorICogam9pbnVwIC0gYnJpbmcgZGF0YSBub2RlcyBmb3IgYW4gaW5vZGUgdG9nZXRoZXIuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAc2xlYjogZGVzY3JpYmVzIHNjYW5uZWQgTEVCCisgKiBAaW51bTogaW5vZGUgbnVtYmVyCisgKiBAYmxrOiBibG9jayBudW1iZXIKKyAqIEBkYXRhOiBsaXN0IHRvIHdoaWNoIHRvIGFkZCBkYXRhIG5vZGVzCisgKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBhdCB0aGUgZmlyc3QgZmV3IG5vZGVzIGluIHRoZSBzY2FubmVkIExFQiBAc2xlYiBhbmQgYWRkcworICogdGhlbSB0byBAZGF0YSBpZiB0aGV5IGFyZSBkYXRhIG5vZGVzIGZyb20gQGludW0gYW5kIGhhdmUgYSBsYXJnZXIgYmxvY2sKKyAqIG51bWJlciB0aGFuIEBibGsuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgam9pbnVwKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIsIGlub190IGludW0sCisJCSAgdW5zaWduZWQgaW50IGJsaywgc3RydWN0IGxpc3RfaGVhZCAqZGF0YSkKK3sKKwlpbnQgZXJyLCBjbnQgPSA2LCBsbnVtID0gc2xlYi0+bG51bSwgb2ZmczsKKwlzdHJ1Y3QgdWJpZnNfc2Nhbl9ub2RlICpzbm9kLCAqdG1wOworCXVuaW9uIHViaWZzX2tleSAqa2V5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNub2QsIHRtcCwgJnNsZWItPm5vZGVzLCBsaXN0KSB7CisJCWtleSA9ICZzbm9kLT5rZXk7CisJCWlmIChrZXlfaW51bShjLCBrZXkpID09IGludW0gJiYKKwkJICAgIGtleV90eXBlKGMsIGtleSkgPT0gVUJJRlNfREFUQV9LRVkgJiYKKwkJICAgIGtleV9ibG9jayhjLCBrZXkpID4gYmxrKSB7CisJCQlvZmZzID0gc25vZC0+b2ZmczsKKwkJCWVyciA9IHViaWZzX3RuY19oYXNfbm9kZShjLCBrZXksIDAsIGxudW0sIG9mZnMsIDApOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCWxpc3RfZGVsKCZzbm9kLT5saXN0KTsKKwkJCWlmIChlcnIpIHsKKwkJCQlsaXN0X2FkZF90YWlsKCZzbm9kLT5saXN0LCBkYXRhKTsKKwkJCQlibGsgPSBrZXlfYmxvY2soYywga2V5KTsKKwkJCX0gZWxzZQorCQkJCWtmcmVlKHNub2QpOworCQkJY250ID0gNjsKKwkJfSBlbHNlIGlmICgtLWNudCA9PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKioKICAqIG1vdmVfbm9kZXMgLSBtb3ZlIG5vZGVzLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHNsZWI6IGRlc2NyaWJlcyBub2RlcyB0byBtb3ZlCkBAIC0xMTYsMTYgKzE1OCwyMSBAQAogc3RhdGljIGludCBtb3ZlX25vZGVzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIpCiB7CiAJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZCwgKnRtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxhcmdlLCBtZWRpdW0sIHNtYWxsOworCXN0cnVjdCBsaXN0X2hlYWQgZGF0YSwgbGFyZ2UsIG1lZGl1bSwgc21hbGw7CiAJc3RydWN0IHViaWZzX3didWYgKndidWYgPSAmYy0+amhlYWRzW0dDSERdLndidWY7CiAJaW50IGF2YWlsLCBlcnIsIG1pbiA9IElOVF9NQVg7CisJdW5zaWduZWQgaW50IGJsayA9IDA7CisJaW5vX3QgaW51bSA9IDA7CiAKKwlJTklUX0xJU1RfSEVBRCgmZGF0YSk7CiAJSU5JVF9MSVNUX0hFQUQoJmxhcmdlKTsKIAlJTklUX0xJU1RfSEVBRCgmbWVkaXVtKTsKIAlJTklUX0xJU1RfSEVBRCgmc21hbGwpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNub2QsIHRtcCwgJnNsZWItPm5vZGVzLCBsaXN0KSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKmxzdDsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnNsZWItPm5vZGVzKSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsc3QgPSBzbGViLT5ub2Rlcy5uZXh0OworCisJCXNub2QgPSBsaXN0X2VudHJ5KGxzdCwgc3RydWN0IHViaWZzX3NjYW5fbm9kZSwgbGlzdCk7CiAKIAkJdWJpZnNfYXNzZXJ0KHNub2QtPnR5cGUgIT0gVUJJRlNfSURYX05PREUpOwogCQl1Ymlmc19hc3NlcnQoc25vZC0+dHlwZSAhPSBVQklGU19SRUZfTk9ERSk7CkBAIC0xMzYsNyArMTgzLDYgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlsc3QgPSAmc25vZC0+bGlzdDsKIAkJbGlzdF9kZWwobHN0KTsKIAkJaWYgKCFlcnIpIHsKIAkJCS8qIFRoZSBub2RlIGlzIG9ic29sZXRlLCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLwpAQCAtMTQ1LDE1ICsxOTEsMzAgQEAKIAkJfQogCiAJCS8qCi0JCSAqIFNvcnQgdGhlIGxpc3Qgb2Ygbm9kZXMgc28gdGhhdCBsYXJnZSBub2RlcyBnbyBmaXJzdCwgYW5kCi0JCSAqIHNtYWxsIG5vZGVzIGdvIGxhc3QuCisJCSAqIFNvcnQgdGhlIGxpc3Qgb2Ygbm9kZXMgc28gdGhhdCBkYXRhIG5vZGVzIGdvIGZpcnN0LCBsYXJnZQorCQkgKiBub2RlcyBnbyBzZWNvbmQsIGFuZCBzbWFsbCBub2RlcyBnbyBsYXN0LgogCQkgKi8KLQkJaWYgKHNub2QtPmxlbiA+IE1FRElVTV9OT0RFX1dNKQotCQkJbGlzdF9hZGQobHN0LCAmbGFyZ2UpOworCQlpZiAoa2V5X3R5cGUoYywgJnNub2QtPmtleSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCWlmIChpbnVtICE9IGtleV9pbnVtKGMsICZzbm9kLT5rZXkpKSB7CisJCQkJaWYgKGludW0pIHsKKwkJCQkJLyoKKwkJCQkJICogVHJ5IHRvIG1vdmUgZGF0YSBub2RlcyBmcm9tIHRoZSBzYW1lCisJCQkJCSAqIGlub2RlIHRvZ2V0aGVyLgorCQkJCQkgKi8KKwkJCQkJZXJyID0gam9pbnVwKGMsIHNsZWIsIGludW0sIGJsaywgJmRhdGEpOworCQkJCQlpZiAoZXJyKQorCQkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCWludW0gPSBrZXlfaW51bShjLCAmc25vZC0+a2V5KTsKKwkJCQlibGsgPSBrZXlfYmxvY2soYywgJnNub2QtPmtleSk7CisJCQl9CisJCQlsaXN0X2FkZF90YWlsKGxzdCwgJmRhdGEpOworCQl9IGVsc2UgaWYgKHNub2QtPmxlbiA+IE1FRElVTV9OT0RFX1dNKQorCQkJbGlzdF9hZGRfdGFpbChsc3QsICZsYXJnZSk7CiAJCWVsc2UgaWYgKHNub2QtPmxlbiA+IFNNQUxMX05PREVfV00pCi0JCQlsaXN0X2FkZChsc3QsICZtZWRpdW0pOworCQkJbGlzdF9hZGRfdGFpbChsc3QsICZtZWRpdW0pOwogCQllbHNlCi0JCQlsaXN0X2FkZChsc3QsICZzbWFsbCk7CisJCQlsaXN0X2FkZF90YWlsKGxzdCwgJnNtYWxsKTsKIAogCQkvKiBBbmQgZmluZCB0aGUgc21hbGxlc3Qgbm9kZSAqLwogCQlpZiAoc25vZC0+bGVuIDwgbWluKQpAQCAtMTY0LDYgKzIyNSw3IEBACiAJICogSm9pbiB0aGUgdHJlZSBsaXN0cyBzbyB0aGF0IHdlJ2QgaGF2ZSBvbmUgcm91Z2hseSBzb3J0ZWQgbGlzdAogCSAqICgnbGFyZ2UnIHdpbGwgYmUgdGhlIGhlYWQgb2YgdGhlIGpvaW5lZCBsaXN0KS4KIAkgKi8KKwlsaXN0X3NwbGljZSgmZGF0YSwgJmxhcmdlKTsKIAlsaXN0X3NwbGljZSgmbWVkaXVtLCBsYXJnZS5wcmV2KTsKIAlsaXN0X3NwbGljZSgmc21hbGwsIGxhcmdlLnByZXYpOwogCkBAIC02NTMsNyArNzE1LDcgQEAKIAkgKi8KIAl3aGlsZSAoMSkgewogCQlscCA9IHViaWZzX2Zhc3RfZmluZF9mcmVlYWJsZShjKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC02NjUsNyArNzI3LDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlscCA9IHViaWZzX2NoYW5nZV9scChjLCBscCwgYy0+bGViX3NpemUsIDAsIGxwLT5mbGFncywgMCk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIobHApKSkgeworCQlpZiAoSVNfRVJSKGxwKSkgewogCQkJZXJyID0gUFRSX0VSUihscCk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNjgwLDcgKzc0Miw3IEBACiAJLyogUmVjb3JkIGluZGV4IGZyZWVhYmxlIExFQnMgZm9yIHVubWFwcGluZyBhZnRlciBjb21taXQgKi8KIAl3aGlsZSAoMSkgewogCQlscCA9IHViaWZzX2Zhc3RfZmluZF9mcmRpX2lkeChjKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC02OTYsNyArNzU4LDcgQEAKIAkJLyogRG9uJ3QgcmVsZWFzZSB0aGUgTEVCIHVudGlsIGFmdGVyIHRoZSBuZXh0IGNvbW1pdCAqLwogCQlmbGFncyA9IChscC0+ZmxhZ3MgfCBMUFJPUFNfVEFLRU4pIF4gTFBST1BTX0lOREVYOwogCQlscCA9IHViaWZzX2NoYW5nZV9scChjLCBscCwgYy0+bGViX3NpemUsIDAsIGZsYWdzLCAxKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWtmcmVlKGlkeF9nYyk7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2lvLmMgYi9mcy91Ymlmcy9pby5jCmluZGV4IDA1NDM2M2YuLjAxNjgyNzEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2lvLmMKKysrIGIvZnMvdWJpZnMvaW8uYwpAQCAtNjIsNiArNjIsNyBAQAogewogCWlmICghYy0+cm9fbWVkaWEpIHsKIAkJYy0+cm9fbWVkaWEgPSAxOworCQljLT5ub19jaGtfZGF0YV9jcmMgPSAwOwogCQl1Ymlmc193YXJuKCJzd2l0Y2hlZCB0byByZWFkLW9ubHkgbW9kZSwgZXJyb3IgJWQiLCBlcnIpOwogCQlkYmdfZHVtcF9zdGFjaygpOwogCX0KQEAgLTc0LDYgKzc1LDcgQEAKICAqIEBsbnVtOiBsb2dpY2FsIGVyYXNlYmxvY2sgbnVtYmVyCiAgKiBAb2Zmczogb2Zmc2V0IHdpdGhpbiB0aGUgbG9naWNhbCBlcmFzZWJsb2NrCiAgKiBAcXVpZXQ6IHByaW50IG5vIG1lc3NhZ2VzCisgKiBAY2hrX2NyYzogaW5kaWNhdGVzIHdoZXRoZXIgdG8gYWx3YXlzIGNoZWNrIHRoZSBDUkMKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBub2RlIG1hZ2ljIG51bWJlciBhbmQgQ1JDIGNoZWNrc3VtLiBUaGlzIGZ1bmN0aW9uIGFsc28KICAqIHZhbGlkYXRlcyBub2RlIGxlbmd0aCB0byBwcmV2ZW50IFVCSUZTIGZyb20gYmVjb21pbmcgY3Jhenkgd2hlbiBhbiBhdHRhY2tlcgpAQCAtODUsNyArODcsNyBAQAogICogb3IgbWFnaWMuCiAgKi8KIGludCB1Ymlmc19jaGVja19ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCB2b2lkICpidWYsIGludCBsbnVtLAotCQkgICAgIGludCBvZmZzLCBpbnQgcXVpZXQpCisJCSAgICAgaW50IG9mZnMsIGludCBxdWlldCwgaW50IGNoa19jcmMpCiB7CiAJaW50IGVyciA9IC1FSU5WQUwsIHR5cGUsIG5vZGVfbGVuOwogCXVpbnQzMl90IGNyYywgbm9kZV9jcmMsIG1hZ2ljOwpAQCAtMTIxLDYgKzEyMywxMCBAQAogCQkgICBub2RlX2xlbiA+IGMtPnJhbmdlc1t0eXBlXS5tYXhfbGVuKQogCQlnb3RvIG91dF9sZW47CiAKKwlpZiAoIWNoa19jcmMgJiYgdHlwZSA9PSBVQklGU19EQVRBX05PREUgJiYgIWMtPmFsd2F5c19jaGtfY3JjKQorCQlpZiAoYy0+bm9fY2hrX2RhdGFfY3JjKQorCQkJcmV0dXJuIDA7CisKIAljcmMgPSBjcmMzMihVQklGU19DUkMzMl9JTklULCBidWYgKyA4LCBub2RlX2xlbiAtIDgpOwogCW5vZGVfY3JjID0gbGUzMl90b19jcHUoY2gtPmNyYyk7CiAJaWYgKGNyYyAhPSBub2RlX2NyYykgewpAQCAtNzIyLDcgKzcyOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHViaWZzX2NoZWNrX25vZGUoYywgYnVmLCBsbnVtLCBvZmZzLCAwKTsKKwllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCwgMCk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImV4cGVjdGVkIG5vZGUgdHlwZSAlZCIsIHR5cGUpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzgxLDcgKzc4Nyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHViaWZzX2NoZWNrX25vZGUoYywgYnVmLCBsbnVtLCBvZmZzLCAwKTsKKwllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCwgMCk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImV4cGVjdGVkIG5vZGUgdHlwZSAlZCIsIHR5cGUpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMva2V5LmggYi9mcy91Ymlmcy9rZXkuaAppbmRleCA4Zjc0NzYwLi45ZWU2NTA4IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9rZXkuaAorKysgYi9mcy91Ymlmcy9rZXkuaApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgKiBAa2V5MjogdGhlIHNlY29uZCBrZXkgdG8gY29tcGFyZQogICoKICAqIFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgMiBrZXlzIGFuZCByZXR1cm5zICUtMSBpZiBAa2V5MSBpcyBsZXNzIHRoYW4KLSAqIEBrZXkyLCAwIGlmIHRoZSBrZXlzIGFyZSBlcXVpdmFsZW50IGFuZCAlMSBpZiBAa2V5MSBpcyBncmVhdGVyIHRoYW4gQGtleTIuCisgKiBAa2V5MiwgJTAgaWYgdGhlIGtleXMgYXJlIGVxdWl2YWxlbnQgYW5kICUxIGlmIEBrZXkxIGlzIGdyZWF0ZXIgdGhhbiBAa2V5Mi4KICAqLwogc3RhdGljIGlubGluZSBpbnQga2V5c19jbXAoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCiAJCQkgICBjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmtleTEsCkBAIC01MDMsNiArNTAzLDI2IEBACiB9CiAKIC8qKgorICoga2V5c19lcSAtIGRldGVybWluZSBpZiBrZXlzIGFyZSBlcXVpdmFsZW50LgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGtleTE6IHRoZSBmaXJzdCBrZXkgdG8gY29tcGFyZQorICogQGtleTI6IHRoZSBzZWNvbmQga2V5IHRvIGNvbXBhcmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIDIga2V5cyBhbmQgcmV0dXJucyAlMSBpZiBAa2V5MSBpcyBlcXVhbCB0byBAa2V5MiBhbmQKKyAqICUwIGlmIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQga2V5c19lcShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCSAgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkxLAorCQkJICBjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmtleTIpCit7CisJaWYgKGtleTEtPnUzMlswXSAhPSBrZXkyLT51MzJbMF0pCisJCXJldHVybiAwOworCWlmIChrZXkxLT51MzJbMV0gIT0ga2V5Mi0+dTMyWzFdKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCiAgKiBpc19oYXNoX2tleSAtIGlzIGEga2V5IHZ1bG5lcmFibGUgdG8gaGFzaCBjb2xsaXNpb25zLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGtleToga2V5CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHJvcHMuYyBiL2ZzL3ViaWZzL2xwcm9wcy5jCmluZGV4IDJiYTkzZGEuLmYyNzE3NmUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwcm9wcy5jCisrKyBiL2ZzL3ViaWZzL2xwcm9wcy5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAkJCX0KIAkJfQogCX0KKwogCS8qIE5vdCBncmVhdGVyIHRoYW4gcGFyZW50LCBzbyBjb21wYXJlIHRvIGNoaWxkcmVuICovCiAJd2hpbGUgKDEpIHsKIAkJLyogQ29tcGFyZSB0byBsZWZ0IGNoaWxkICovCkBAIC00NjAsMTggKzQ2MSw2IEBACiB9CiAKIC8qKgotICogdWJpZnNfZ2V0X2xwcm9wcyAtIGdldCByZWZlcmVuY2UgdG8gTEVCIHByb3BlcnRpZXMuCi0gKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAotICoKLSAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgbHByb3BzLiBMcHJvcHMgaGF2ZSB0byBiZSB1bmxvY2tlZCBieQotICogJ3ViaWZzX3JlbGVhc2VfbHByb3BzKCknLgotICovCi12b2lkIHViaWZzX2dldF9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpCi17Ci0JbXV0ZXhfbG9jaygmYy0+bHBfbXV0ZXgpOwotfQotCi0vKioKICAqIGNhbGNfZGFyayAtIGNhbGN1bGF0ZSBMRUIgZGFyayBzcGFjZSBzaXplLgogICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBzcGM6IGFtb3VudCBvZiBmcmVlIGFuZCBkaXJ0eSBzcGFjZSBpbiB0aGUgTEVCCkBAIC01NzYsNyArNTY1LDYgQEAKIAl1Ymlmc19hc3NlcnQoIShscHJvcHMtPmZyZWUgJiA3KSAmJiAhKGxwcm9wcy0+ZGlydHkgJiA3KSk7CiAKIAlzcGluX2xvY2soJmMtPnNwYWNlX2xvY2spOwotCiAJaWYgKChscHJvcHMtPmZsYWdzICYgTFBST1BTX1RBS0VOKSAmJiBscHJvcHMtPmZyZWUgPT0gYy0+bGViX3NpemUpCiAJCWMtPmxzdC50YWtlbl9lbXB0eV9sZWJzIC09IDE7CiAKQEAgLTYzNywzMSArNjI1LDEyIEBACiAJCWMtPmxzdC50YWtlbl9lbXB0eV9sZWJzICs9IDE7CiAKIAljaGFuZ2VfY2F0ZWdvcnkoYywgbHByb3BzKTsKLQogCWMtPmlkeF9nY19jbnQgKz0gaWR4X2djX2NudDsKLQogCXNwaW5fdW5sb2NrKCZjLT5zcGFjZV9sb2NrKTsKLQogCXJldHVybiBscHJvcHM7CiB9CiAKIC8qKgotICogdWJpZnNfcmVsZWFzZV9scHJvcHMgLSByZWxlYXNlIGxwcm9wcyBsb2NrLgotICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCAndWJpZnNfZ2V0X2xwcm9wcygpJyBjYWxsIHRvCi0gKiB1bmxvY2sgbHByb3BzLgotICovCi12b2lkIHViaWZzX3JlbGVhc2VfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKQotewotCXViaWZzX2Fzc2VydChtdXRleF9pc19sb2NrZWQoJmMtPmxwX211dGV4KSk7Ci0JdWJpZnNfYXNzZXJ0KGMtPmxzdC5lbXB0eV9sZWJzID49IDAgJiYKLQkJICAgICBjLT5sc3QuZW1wdHlfbGVicyA8PSBjLT5tYWluX2xlYnMpOwotCi0JbXV0ZXhfdW5sb2NrKCZjLT5scF9tdXRleCk7Ci19Ci0KLS8qKgogICogdWJpZnNfZ2V0X2xwX3N0YXRzIC0gZ2V0IGxwcm9wcyBzdGF0aXN0aWNzLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHN0OiByZXR1cm4gc3RhdGlzdGljcwpAQCAtMTI2Miw3ICsxMjMxLDYgQEAKIAl9CiAKIAl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7Ci0KIAlyZXR1cm4gTFBUX1NDQU5fQ09OVElOVUU7CiAKIG91dF9wcmludDoKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xwdC5jIGIvZnMvdWJpZnMvbHB0LmMKaW5kZXggOWZmMjQ2My4uZGI4YmQwZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbHB0LmMKKysrIGIvZnMvdWJpZnMvbHB0LmMKQEAgLTEwOSw3ICsxMDksOCBAQAogCWMtPmxwdF9zeiA9IChsb25nIGxvbmcpYy0+cG5vZGVfY250ICogYy0+cG5vZGVfc3o7CiAJYy0+bHB0X3N6ICs9IChsb25nIGxvbmcpYy0+bm5vZGVfY250ICogYy0+bm5vZGVfc3o7CiAJYy0+bHB0X3N6ICs9IGMtPmx0YWJfc3o7Ci0JYy0+bHB0X3N6ICs9IGMtPmxzYXZlX3N6OworCWlmIChjLT5iaWdfbHB0KQorCQljLT5scHRfc3ogKz0gYy0+bHNhdmVfc3o7CiAKIAkvKiBBZGQgd2FzdGFnZSAqLwogCXN6ID0gYy0+bHB0X3N6OwpAQCAtMjg3LDI1ICsyODgsNTYgQEAKIAljb25zdCBpbnQgayA9IDMyIC0gbnJiaXRzOwogCXVpbnQ4X3QgKnAgPSAqYWRkcjsKIAlpbnQgYiA9ICpwb3M7Ci0JdWludDMyX3QgdmFsOworCXVpbnQzMl90IHVuaW5pdGlhbGl6ZWRfdmFyKHZhbCk7CisJY29uc3QgaW50IGJ5dGVzID0gKG5yYml0cyArIGIgKyA3KSA+PiAzOwogCiAJdWJpZnNfYXNzZXJ0KG5yYml0cyA+IDApOwogCXViaWZzX2Fzc2VydChucmJpdHMgPD0gMzIpOwogCXViaWZzX2Fzc2VydCgqcG9zID49IDApOwogCXViaWZzX2Fzc2VydCgqcG9zIDwgOCk7CiAJaWYgKGIpIHsKLQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KSB8ICgodWludDMyX3QpcFszXSA8PCAxNikgfAotCQkgICAgICAoKHVpbnQzMl90KXBbNF0gPDwgMjQpOworCQlzd2l0Y2ggKGJ5dGVzKSB7CisJCWNhc2UgMjoKKwkJCXZhbCA9IHBbMV07CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQl2YWwgPSBwWzFdIHwgKCh1aW50MzJfdClwWzJdIDw8IDgpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFszXSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbM10gPDwgMTYpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFs0XSA8PCAyNCk7CisJCX0KIAkJdmFsIDw8PSAoOCAtIGIpOwogCQl2YWwgfD0gKnAgPj4gYjsKIAkJbnJiaXRzICs9IGI7Ci0JfSBlbHNlCi0JCXZhbCA9IHBbMF0gfCAoKHVpbnQzMl90KXBbMV0gPDwgOCkgfCAoKHVpbnQzMl90KXBbMl0gPDwgMTYpIHwKLQkJICAgICAgKCh1aW50MzJfdClwWzNdIDw8IDI0KTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGJ5dGVzKSB7CisJCWNhc2UgMToKKwkJCXZhbCA9IHBbMF07CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdmFsID0gcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl2YWwgPSBwWzBdIHwgKCh1aW50MzJfdClwWzFdIDw8IDgpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFsyXSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdmFsID0gcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbMl0gPDwgMTYpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFszXSA8PCAyNCk7CisJCQlicmVhazsKKwkJfQorCX0KIAl2YWwgPDw9IGs7CiAJdmFsID4+PSBrOwogCWIgPSBucmJpdHMgJiA3OwotCXAgKz0gbnJiaXRzIC8gODsKKwlwICs9IG5yYml0cyA+PiAzOwogCSphZGRyID0gcDsKIAkqcG9zID0gYjsKIAl1Ymlmc19hc3NlcnQoKHZhbCA+PiBucmJpdHMpID09IDAgfHwgbnJiaXRzIC0gYiA9PSAzMik7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHRfY29tbWl0LmMgYi9mcy91Ymlmcy9scHRfY29tbWl0LmMKaW5kZXggNWYwYjgzZS4uZWVkNWEwMCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbHB0X2NvbW1pdC5jCisrKyBiL2ZzL3ViaWZzL2xwdF9jb21taXQuYwpAQCAtMTc3LDggKzE3Nyw2IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlkYmdfZXJyKCJsYXN0IExFQiAlZCIsICpsbnVtKTsKLQlkdW1wX3N0YWNrKCk7CiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKQEAgLTE5Myw2ICsxOTEsOSBAQAogCWludCBsbnVtLCBvZmZzLCBsZW4sIGFsZW4sIGRvbmVfbHNhdmUsIGRvbmVfbHRhYiwgZXJyOwogCXN0cnVjdCB1Ymlmc19jbm9kZSAqY25vZGU7CiAKKwllcnIgPSBkYmdfY2hrX2xwdF9zeihjLCAwLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCWNub2RlID0gYy0+bHB0X2NuZXh0OwogCWlmICghY25vZGUpCiAJCXJldHVybiAwOwpAQCAtMjA2LDYgKzIwNyw3IEBACiAJCWMtPmxzYXZlX2xudW0gPSBsbnVtOwogCQljLT5sc2F2ZV9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCWlmIChvZmZzICsgYy0+bHRhYl9zeiA8PSBjLT5sZWJfc2l6ZSkgewpAQCAtMjEzLDYgKzIxNSw3IEBACiAJCWMtPmx0YWJfbG51bSA9IGxudW07CiAJCWMtPmx0YWJfb2ZmcyA9IG9mZnM7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJZG8gewpAQCAtMjI2LDkgKzIyOSwxMCBAQAogCQl3aGlsZSAob2ZmcyArIGxlbiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjM4LDYgKzI0Miw3IEBACiAJCQkJYy0+bHNhdmVfbG51bSA9IGxudW07CiAJCQkJYy0+bHNhdmVfb2ZmcyA9IG9mZnM7CiAJCQkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sc2F2ZV9zeik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIWRvbmVfbHRhYikgewpAQCAtMjQ1LDYgKzI1MCw3IEBACiAJCQkJYy0+bHRhYl9sbnVtID0gbG51bTsKIAkJCQljLT5sdGFiX29mZnMgPSBvZmZzOwogCQkJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjU3LDYgKzI2Myw3IEBACiAJCQljLT5scHRfb2ZmcyA9IG9mZnM7CiAJCX0KIAkJb2ZmcyArPSBsZW47CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGxlbik7CiAJCWNub2RlID0gY25vZGUtPmNuZXh0OwogCX0gd2hpbGUgKGNub2RlICYmIGNub2RlICE9IGMtPmxwdF9jbmV4dCk7CiAKQEAgLTI2NSw5ICsyNzIsMTAgQEAKIAkJaWYgKG9mZnMgKyBjLT5sc2F2ZV9zeiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjc2LDYgKzI4NCw3IEBACiAJCWMtPmxzYXZlX2xudW0gPSBsbnVtOwogCQljLT5sc2F2ZV9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCS8qIE1ha2Ugc3VyZSB0byBwbGFjZSBMUFQncyBvd24gbHByb3BzIHRhYmxlICovCkBAIC0yODMsOSArMjkyLDEwIEBACiAJCWlmIChvZmZzICsgYy0+bHRhYl9zeiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjk0LDExICszMDQsMjMgQEAKIAkJYy0+bHRhYl9sbnVtID0gbG51bTsKIAkJYy0+bHRhYl9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAl9CiAKIAlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCXVwZF9sdGFiKGMsIGxudW0sIGMtPmxlYl9zaXplIC0gYWxlbiwgYWxlbiAtIG9mZnMpOworCWRiZ19jaGtfbHB0X3N6KGMsIDQsIGFsZW4gLSBvZmZzKTsKKwllcnIgPSBkYmdfY2hrX2xwdF9zeihjLCAzLCBhbGVuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOworCitub19zcGFjZToKKwl1Ymlmc19lcnIoIkxQVCBvdXQgb2Ygc3BhY2UiKTsKKwlkYmdfZXJyKCJMUFQgb3V0IG9mIHNwYWNlIGF0IExFQiAlZDolZCBuZWVkaW5nICVkLCBkb25lX2x0YWIgJWQsICIKKwkJImRvbmVfbHNhdmUgJWQiLCBsbnVtLCBvZmZzLCBsZW4sIGRvbmVfbHRhYiwgZG9uZV9sc2F2ZSk7CisJZGJnX2R1bXBfbHB0X2luZm8oYyk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0zMzMsOCArMzU1LDYgQEAKIAkJCSpsbnVtID0gaSArIGMtPmxwdF9maXJzdDsKIAkJCXJldHVybiAwOwogCQl9Ci0JZGJnX2VycigibGFzdCBMRUIgJWQiLCAqbG51bSk7Ci0JZHVtcF9zdGFjaygpOwogCXJldHVybiAtRU5PU1BDOwogfQogCkBAIC0zNjksMTIgKzM4OSwxNCBAQAogCQlkb25lX2xzYXZlID0gMTsKIAkJdWJpZnNfcGFja19sc2F2ZShjLCBidWYgKyBvZmZzLCBjLT5sc2F2ZSk7CiAJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmxzYXZlX3N6KTsKIAl9CiAKIAlpZiAob2ZmcyArIGMtPmx0YWJfc3ogPD0gYy0+bGViX3NpemUpIHsKIAkJZG9uZV9sdGFiID0gMTsKIAkJdWJpZnNfcGFja19sdGFiKGMsIGJ1ZiArIG9mZnMsIGMtPmx0YWJfY210KTsKIAkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAl9CiAKIAkvKiBMb29wIGZvciBlYWNoIGNub2RlICovCkBAIC0zOTIsMTAgKzQxNCwxMiBAQAogCQkJCQkJICAgICAgIGFsZW4sIFVCSV9TSE9SVFRFUk0pOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CisJCQkJZGJnX2Noa19scHRfc3ooYywgNCwgYWxlbiAtIHdsZW4pOwogCQkJfQorCQkJZGJnX2Noa19scHRfc3ooYywgMiwgMCk7CiAJCQllcnIgPSByZWFsbG9jX2xwdF9sZWIoYywgJmxudW0pOwogCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOworCQkJCWdvdG8gbm9fc3BhY2U7CiAJCQlvZmZzID0gMDsKIAkJCWZyb20gPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCkBAIC00MDgsMTIgKzQzMiwxNCBAQAogCQkJCWRvbmVfbHNhdmUgPSAxOwogCQkJCXViaWZzX3BhY2tfbHNhdmUoYywgYnVmICsgb2ZmcywgYy0+bHNhdmUpOwogCQkJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCQkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFkb25lX2x0YWIpIHsKIAkJCQlkb25lX2x0YWIgPSAxOwogCQkJCXViaWZzX3BhY2tfbHRhYihjLCBidWYgKyBvZmZzLCBjLT5sdGFiX2NtdCk7CiAJCQkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQkJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmx0YWJfc3opOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CkBAIC00MzUsNiArNDYxLDcgQEAKIAkJY2xlYXJfYml0KENPV19aTk9ERSwgJmNub2RlLT5mbGFncyk7CiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJCW9mZnMgKz0gbGVuOworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBsZW4pOwogCQljbm9kZSA9IGNub2RlLT5jbmV4dDsKIAl9IHdoaWxlIChjbm9kZSAmJiBjbm9kZSAhPSBjLT5scHRfY25leHQpOwogCkBAIC00NDgsOSArNDc1LDEwIEBACiAJCQkJCSAgICAgIFVCSV9TSE9SVFRFUk0pOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIHdsZW4pOwogCQkJZXJyID0gcmVhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtNDYxLDYgKzQ4OSw3IEBACiAJCWRvbmVfbHNhdmUgPSAxOwogCQl1Ymlmc19wYWNrX2xzYXZlKGMsIGJ1ZiArIG9mZnMsIGMtPmxzYXZlKTsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCS8qIE1ha2Ugc3VyZSB0byBwbGFjZSBMUFQncyBvd24gbHByb3BzIHRhYmxlICovCkBAIC00NzMsOSArNTAyLDEwIEBACiAJCQkJCSAgICAgIFVCSV9TSE9SVFRFUk0pOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIHdsZW4pOwogCQkJZXJyID0gcmVhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtNDg2LDYgKzUxNiw3IEBACiAJCWRvbmVfbHRhYiA9IDE7CiAJCXViaWZzX3BhY2tfbHRhYihjLCBidWYgKyBvZmZzLCBjLT5sdGFiX2NtdCk7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJLyogV3JpdGUgcmVtYWluaW5nIGRhdGEgaW4gYnVmZmVyICovCkBAIC00OTUsNiArNTI2LDEyIEBACiAJZXJyID0gdWJpZnNfbGViX3dyaXRlKGMsIGxudW0sIGJ1ZiArIGZyb20sIGZyb20sIGFsZW4sIFVCSV9TSE9SVFRFUk0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisKKwlkYmdfY2hrX2xwdF9zeihjLCA0LCBhbGVuIC0gd2xlbik7CisJZXJyID0gZGJnX2Noa19scHRfc3ooYywgMywgQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJYy0+bmhlYWRfbG51bSA9IGxudW07CiAJYy0+bmhlYWRfb2ZmcyA9IEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKTsKIApAQCAtNTAzLDcgKzU0MCwxNSBAQAogCWRiZ19scCgiTFBUIGx0YWIgaXMgYXQgJWQ6JWQiLCBjLT5sdGFiX2xudW0sIGMtPmx0YWJfb2Zmcyk7CiAJaWYgKGMtPmJpZ19scHQpCiAJCWRiZ19scCgiTFBUIGxzYXZlIGlzIGF0ICVkOiVkIiwgYy0+bHNhdmVfbG51bSwgYy0+bHNhdmVfb2Zmcyk7CisKIAlyZXR1cm4gMDsKKworbm9fc3BhY2U6CisJdWJpZnNfZXJyKCJMUFQgb3V0IG9mIHNwYWNlIG1pc21hdGNoIik7CisJZGJnX2VycigiTFBUIG91dCBvZiBzcGFjZSBtaXNtYXRjaCBhdCBMRUIgJWQ6JWQgbmVlZGluZyAlZCwgZG9uZV9sdGFiICIKKwkgICAgICAgICIlZCwgZG9uZV9sc2F2ZSAlZCIsIGxudW0sIG9mZnMsIGxlbiwgZG9uZV9sdGFiLCBkb25lX2xzYXZlKTsKKwlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTEwNDQsNiArMTA4OSw4IEBACiAJaW50IHBvcyA9IDAsIG5vZGVfdHlwZSwgbm9kZV9sZW47CiAJdWludDE2X3QgY3JjLCBjYWxjX2NyYzsKIAorCWlmIChsZW4gPCBVQklGU19MUFRfQ1JDX0JZVEVTICsgKFVCSUZTX0xQVF9UWVBFX0JJVFMgKyA3KSAvIDgpCisJCXJldHVybiAwOwogCW5vZGVfdHlwZSA9IHViaWZzX3VucGFja19iaXRzKCZhZGRyLCAmcG9zLCBVQklGU19MUFRfVFlQRV9CSVRTKTsKIAlpZiAobm9kZV90eXBlID09IFVCSUZTX0xQVF9OT1RfQV9OT0RFKQogCQlyZXR1cm4gMDsKQEAgLTExNTYsNiArMTIwMyw5IEBACiAJZGJnX2xwKCIiKTsKIAogCW11dGV4X2xvY2soJmMtPmxwX211dGV4KTsKKwllcnIgPSBkYmdfY2hrX2xwdF9mcmVlX3NwYyhjKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKIAllcnIgPSBkYmdfY2hlY2tfbHRhYihjKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTE2NDUsNCArMTY5NSwxMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBkYmdfY2hrX2xwdF9mcmVlX3NwYyAtIGNoZWNrIExQVCBmcmVlIHNwYWNlIGlzIGVub3VnaCB0byB3cml0ZSBlbnRpcmUgTFBULgorICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkYmdfY2hrX2xwdF9mcmVlX3NwYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwlsb25nIGxvbmcgZnJlZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+bHB0X2xlYnM7IGkrKykgeworCQlpZiAoYy0+bHRhYltpXS50Z2MgfHwgYy0+bHRhYltpXS5jbXQpCisJCQljb250aW51ZTsKKwkJaWYgKGkgKyBjLT5scHRfZmlyc3QgPT0gYy0+bmhlYWRfbG51bSkKKwkJCWZyZWUgKz0gYy0+bGViX3NpemUgLSBjLT5uaGVhZF9vZmZzOworCQllbHNlIGlmIChjLT5sdGFiW2ldLmZyZWUgPT0gYy0+bGViX3NpemUpCisJCQlmcmVlICs9IGMtPmxlYl9zaXplOworCX0KKwlpZiAoZnJlZSA8IGMtPmxwdF9zeikgeworCQlkYmdfZXJyKCJMUFQgc3BhY2UgZXJyb3I6IGZyZWUgJWxsZCBscHRfc3ogJWxsZCIsCisJCQlmcmVlLCBjLT5scHRfc3opOworCQlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGRiZ19jaGtfbHB0X3N6IC0gY2hlY2sgTFBUIGRvZXMgbm90IHdyaXRlIG1vcmUgdGhhbiBMUFQgc2l6ZS4KKyAqIEBjOiB0aGUgVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYWN0aW9uOiBhY3Rpb24KKyAqIEBsZW46IGxlbmd0aCB3cml0dGVuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICUwIG9uIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZGJnX2Noa19scHRfc3ooc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBhY3Rpb24sIGludCBsZW4pCit7CisJbG9uZyBsb25nIGNoa19scHRfc3osIGxwdF9zejsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSAwOgorCQljLT5jaGtfbHB0X3N6ID0gMDsKKwkJYy0+Y2hrX2xwdF9zejIgPSAwOworCQljLT5jaGtfbHB0X2xlYnMgPSAwOworCQljLT5jaGtfbHB0X3dhc3RhZ2UgPSAwOworCQlpZiAoYy0+ZGlydHlfcG5fY250ID4gYy0+cG5vZGVfY250KSB7CisJCQlkYmdfZXJyKCJkaXJ0eSBwbm9kZXMgJWQgZXhjZWVkIG1heCAlZCIsCisJCQkJYy0+ZGlydHlfcG5fY250LCBjLT5wbm9kZV9jbnQpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+ZGlydHlfbm5fY250ID4gYy0+bm5vZGVfY250KSB7CisJCQlkYmdfZXJyKCJkaXJ0eSBubm9kZXMgJWQgZXhjZWVkIG1heCAlZCIsCisJCQkJYy0+ZGlydHlfbm5fY250LCBjLT5ubm9kZV9jbnQpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXJyOworCWNhc2UgMToKKwkJYy0+Y2hrX2xwdF9zeiArPSBsZW47CisJCXJldHVybiAwOworCWNhc2UgMjoKKwkJYy0+Y2hrX2xwdF9zeiArPSBsZW47CisJCWMtPmNoa19scHRfd2FzdGFnZSArPSBsZW47CisJCWMtPmNoa19scHRfbGVicyArPSAxOworCQlyZXR1cm4gMDsKKwljYXNlIDM6CisJCWNoa19scHRfc3ogPSBjLT5sZWJfc2l6ZTsKKwkJY2hrX2xwdF9zeiAqPSBjLT5jaGtfbHB0X2xlYnM7CisJCWNoa19scHRfc3ogKz0gbGVuIC0gYy0+bmhlYWRfb2ZmczsKKwkJaWYgKGMtPmNoa19scHRfc3ogIT0gY2hrX2xwdF9zeikgeworCQkJZGJnX2VycigiTFBUIHdyb3RlICVsbGQgYnV0IHNwYWNlIHVzZWQgd2FzICVsbGQiLAorCQkJCWMtPmNoa19scHRfc3osIGNoa19scHRfc3opOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+Y2hrX2xwdF9zeiA+IGMtPmxwdF9zeikgeworCQkJZGJnX2VycigiTFBUIHdyb3RlICVsbGQgYnV0IGxwdF9zeiBpcyAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjLT5scHRfc3opOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+Y2hrX2xwdF9zejIgJiYgYy0+Y2hrX2xwdF9zeiAhPSBjLT5jaGtfbHB0X3N6MikgeworCQkJZGJnX2VycigiTFBUIGxheW91dCBzaXplICVsbGQgYnV0IHdyb3RlICVsbGQiLAorCQkJCWMtPmNoa19scHRfc3osIGMtPmNoa19scHRfc3oyKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKGMtPmNoa19scHRfc3oyICYmIGMtPm5ld19uaGVhZF9vZmZzICE9IGxlbikgeworCQkJZGJnX2VycigiTFBUIG5ldyBuaGVhZCBvZmZzOiBleHBlY3RlZCAlZCB3YXMgJWQiLAorCQkJCWMtPm5ld19uaGVhZF9vZmZzLCBsZW4pOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlscHRfc3ogPSAobG9uZyBsb25nKWMtPnBub2RlX2NudCAqIGMtPnBub2RlX3N6OworCQlscHRfc3ogKz0gKGxvbmcgbG9uZyljLT5ubm9kZV9jbnQgKiBjLT5ubm9kZV9zejsKKwkJbHB0X3N6ICs9IGMtPmx0YWJfc3o7CisJCWlmIChjLT5iaWdfbHB0KQorCQkJbHB0X3N6ICs9IGMtPmxzYXZlX3N6OworCQlpZiAoYy0+Y2hrX2xwdF9zeiAtIGMtPmNoa19scHRfd2FzdGFnZSA+IGxwdF9zeikgeworCQkJZGJnX2VycigiTFBUIGNoa19scHRfc3ogJWxsZCArIHdhc3RlICVsbGQgZXhjZWVkcyAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjLT5jaGtfbHB0X3dhc3RhZ2UsIGxwdF9zeik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCWlmIChlcnIpCisJCQlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwkJYy0+Y2hrX2xwdF9zejIgPSBjLT5jaGtfbHB0X3N6OworCQljLT5jaGtfbHB0X3N6ID0gMDsKKwkJYy0+Y2hrX2xwdF93YXN0YWdlID0gMDsKKwkJYy0+Y2hrX2xwdF9sZWJzID0gMDsKKwkJYy0+bmV3X25oZWFkX29mZnMgPSBsZW47CisJCXJldHVybiBlcnI7CisJY2FzZSA0OgorCQljLT5jaGtfbHB0X3N6ICs9IGxlbjsKKwkJYy0+Y2hrX2xwdF93YXN0YWdlICs9IGxlbjsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCiAjZW5kaWYgLyogQ09ORklHX1VCSUZTX0ZTX0RFQlVHICovCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9taXNjLmggYi9mcy91Ymlmcy9taXNjLmgKaW5kZXggNGMxMmE5Mi4uNGZhODFkOCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbWlzYy5oCisrKyBiL2ZzL3ViaWZzL21pc2MuaApAQCAtMzEwLDQgKzMxMCwzMSBAQAogCXJldHVybiB1Ymlmc190bmNfbG9jYXRlKGMsIGtleSwgbm9kZSwgTlVMTCwgTlVMTCk7CiB9CiAKKy8qKgorICogdWJpZnNfZ2V0X2xwcm9wcyAtIGdldCByZWZlcmVuY2UgdG8gTEVCIHByb3BlcnRpZXMuCisgKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgbHByb3BzLiBMcHJvcHMgaGF2ZSB0byBiZSB1bmxvY2tlZCBieQorICogJ3ViaWZzX3JlbGVhc2VfbHByb3BzKCknLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWJpZnNfZ2V0X2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwltdXRleF9sb2NrKCZjLT5scF9tdXRleCk7Cit9CisKKy8qKgorICogdWJpZnNfcmVsZWFzZV9scHJvcHMgLSByZWxlYXNlIGxwcm9wcyBsb2NrLgorICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCAndWJpZnNfZ2V0X2xwcm9wcygpJyBjYWxsIHRvCisgKiB1bmxvY2sgbHByb3BzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWJpZnNfcmVsZWFzZV9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpCit7CisJdWJpZnNfYXNzZXJ0KG11dGV4X2lzX2xvY2tlZCgmYy0+bHBfbXV0ZXgpKTsKKwl1Ymlmc19hc3NlcnQoYy0+bHN0LmVtcHR5X2xlYnMgPj0gMCAmJgorCQkgICAgIGMtPmxzdC5lbXB0eV9sZWJzIDw9IGMtPm1haW5fbGVicyk7CisJbXV0ZXhfdW5sb2NrKCZjLT5scF9tdXRleCk7Cit9CisKICNlbmRpZiAvKiBfX1VCSUZTX01JU0NfSF9fICovCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zY2FuLmMgYi9mcy91Ymlmcy9zY2FuLmMKaW5kZXggYWNmNWM1Zi4uMGVkODI0NyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc2Nhbi5jCisrKyBiL2ZzL3ViaWZzL3NjYW4uYwpAQCAtODcsNyArODcsNyBAQAogCiAJZGJnX3NjYW4oInNjYW5uaW5nICVzIiwgZGJnX250eXBlKGNoLT5ub2RlX3R5cGUpKTsKIAotCWlmICh1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgcXVpZXQpKQorCWlmICh1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgcXVpZXQsIDEpKQogCQlyZXR1cm4gU0NBTk5FRF9BX0NPUlJVUFRfTk9ERTsKIAogCWlmIChjaC0+bm9kZV90eXBlID09IFVCSUZTX1BBRF9OT0RFKSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCA5YTkyMjAzLi44NzgwZWZiIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTQwMSw2ICs0MDEsMTYgQEAKIAllbHNlIGlmIChjLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9PSAxKQogCQlzZXFfcHJpbnRmKHMsICIsbm9ybV91bm1vdW50Iik7CiAKKwlpZiAoYy0+bW91bnRfb3B0cy5idWxrX3JlYWQgPT0gMikKKwkJc2VxX3ByaW50ZihzLCAiLGJ1bGtfcmVhZCIpOworCWVsc2UgaWYgKGMtPm1vdW50X29wdHMuYnVsa19yZWFkID09IDEpCisJCXNlcV9wcmludGYocywgIixub19idWxrX3JlYWQiKTsKKworCWlmIChjLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9PSAyKQorCQlzZXFfcHJpbnRmKHMsICIsY2hrX2RhdGFfY3JjIik7CisJZWxzZSBpZiAoYy0+bW91bnRfb3B0cy5jaGtfZGF0YV9jcmMgPT0gMSkKKwkJc2VxX3ByaW50ZihzLCAiLG5vX2Noa19kYXRhX2NyYyIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwOCwxMyArNDE4LDI2IEBACiB7CiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSBzYi0+c19mc19pbmZvOwogCWludCBpLCByZXQgPSAwLCBlcnI7CisJbG9uZyBsb25nIGJ1ZF9ieXRlczsKIAotCWlmIChjLT5qaGVhZHMpCisJaWYgKGMtPmpoZWFkcykgewogCQlmb3IgKGkgPSAwOyBpIDwgYy0+amhlYWRfY250OyBpKyspIHsKIAkJCWVyciA9IHViaWZzX3didWZfc3luYygmYy0+amhlYWRzW2ldLndidWYpOwogCQkJaWYgKGVyciAmJiAhcmV0KQogCQkJCXJldCA9IGVycjsKIAkJfQorCisJCS8qIENvbW1pdCB0aGUgam91cm5hbCB1bmxlc3MgaXQgaGFzIHRvbyBsaXR0bGUgZGF0YSAqLworCQlzcGluX2xvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWJ1ZF9ieXRlcyA9IGMtPmJ1ZF9ieXRlczsKKwkJc3Bpbl91bmxvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWlmIChidWRfYnl0ZXMgPiBjLT5sZWJfc2l6ZSkgeworCQkJZXJyID0gdWJpZnNfcnVuX2NvbW1pdChjKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qCiAJICogV2Ugb3VnaHQgdG8gY2FsbCBzeW5jIGZvciBjLT51YmkgYnV0IGl0IGRvZXMgbm90IGhhdmUgb25lLiBJZiBpdCBoYWQKIAkgKiBpdCB3b3VsZCBpbiB0dXJuIGNhbGwgbXRkLT5zeW5jLCBob3dldmVyIG10ZCBvcGVyYXRpb25zIGFyZQpAQCAtNTM4LDYgKzU2MSwxOCBAQAogCSAqIGNhbGN1bGF0aW9ucyB3aGVuIHJlcG9ydGluZyBmcmVlIHNwYWNlLgogCSAqLwogCWMtPmxlYl9vdmVyaGVhZCA9IGMtPmxlYl9zaXplICUgVUJJRlNfTUFYX0RBVEFfTk9ERV9TWjsKKwkvKiBCdWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcyAqLworCWMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA9IFVCSUZTX01BWF9CVUxLX1JFQUQgKiBVQklGU19NQVhfREFUQV9OT0RFX1NaOworCWlmIChjLT5idWxrX3JlYWRfYnVmX3NpemUgPiBjLT5sZWJfc2l6ZSkKKwkJYy0+YnVsa19yZWFkX2J1Zl9zaXplID0gYy0+bGViX3NpemU7CisJaWYgKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA+IDEyOCAqIDEwMjQpIHsKKwkJLyogQ2hlY2sgaWYgd2UgY2FuIGttYWxsb2MgbW9yZSB0aGFuIDEyOEtpQiAqLworCQl2b2lkICp0cnkgPSBrbWFsbG9jKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwkJa2ZyZWUodHJ5KTsKKwkJaWYgKCF0cnkpCisJCQljLT5idWxrX3JlYWRfYnVmX3NpemUgPSAxMjggKiAxMDI0OworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODQwLDE3ICs4NzUsMjkgQEAKICAqCiAgKiBPcHRfZmFzdF91bm1vdW50OiBkbyBub3QgcnVuIGEgam91cm5hbCBjb21taXQgYmVmb3JlIHVuLW1vdW50aW5nCiAgKiBPcHRfbm9ybV91bm1vdW50OiBydW4gYSBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKKyAqIE9wdF9idWxrX3JlYWQ6IGVuYWJsZSBidWxrLXJlYWRzCisgKiBPcHRfbm9fYnVsa19yZWFkOiBkaXNhYmxlIGJ1bGstcmVhZHMKKyAqIE9wdF9jaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKKyAqIE9wdF9ub19jaGtfZGF0YV9jcmM6IGRvIG5vdCBjaGVjayBDUkNzIHdoZW4gcmVhZGluZyBkYXRhIG5vZGVzCiAgKiBPcHRfZXJyOiBqdXN0IGVuZCBvZiBhcnJheSBtYXJrZXIKICAqLwogZW51bSB7CiAJT3B0X2Zhc3RfdW5tb3VudCwKIAlPcHRfbm9ybV91bm1vdW50LAorCU9wdF9idWxrX3JlYWQsCisJT3B0X25vX2J1bGtfcmVhZCwKKwlPcHRfY2hrX2RhdGFfY3JjLAorCU9wdF9ub19jaGtfZGF0YV9jcmMsCiAJT3B0X2VyciwKIH07CiAKIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2Zhc3RfdW5tb3VudCwgImZhc3RfdW5tb3VudCJ9LAogCXtPcHRfbm9ybV91bm1vdW50LCAibm9ybV91bm1vdW50In0sCisJe09wdF9idWxrX3JlYWQsICJidWxrX3JlYWQifSwKKwl7T3B0X25vX2J1bGtfcmVhZCwgIm5vX2J1bGtfcmVhZCJ9LAorCXtPcHRfY2hrX2RhdGFfY3JjLCAiY2hrX2RhdGFfY3JjIn0sCisJe09wdF9ub19jaGtfZGF0YV9jcmMsICJub19jaGtfZGF0YV9jcmMifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC04ODgsNiArOTM1LDIyIEBACiAJCQljLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9IDE7CiAJCQljLT5mYXN0X3VubW91bnQgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1bGtfcmVhZDoKKwkJCWMtPm1vdW50X29wdHMuYnVsa19yZWFkID0gMjsKKwkJCWMtPmJ1bGtfcmVhZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9fYnVsa19yZWFkOgorCQkJYy0+bW91bnRfb3B0cy5idWxrX3JlYWQgPSAxOworCQkJYy0+YnVsa19yZWFkID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9jaGtfZGF0YV9jcmM6CisJCQljLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9IDI7CisJCQljLT5ub19jaGtfZGF0YV9jcmMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vX2Noa19kYXRhX2NyYzoKKwkJCWMtPm1vdW50X29wdHMuY2hrX2RhdGFfY3JjID0gMTsKKwkJCWMtPm5vX2Noa19kYXRhX2NyYyA9IDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXViaWZzX2VycigidW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgogCQkJCSAgIm9yIG1pc3NpbmcgdmFsdWUiLCBwKTsKQEAgLTk5Niw2ICsxMDU5LDggQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJYy0+YWx3YXlzX2Noa19jcmMgPSAxOworCiAJZXJyID0gdWJpZnNfcmVhZF9zdXBlcmJsb2NrKGMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMDMyLDggKzEwOTcsNiBAQAogCiAJCS8qIENyZWF0ZSBiYWNrZ3JvdW5kIHRocmVhZCAqLwogCQljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsIGMtPmJndF9uYW1lKTsKLQkJaWYgKCFjLT5iZ3QpCi0JCQljLT5iZ3QgPSBFUlJfUFRSKC1FSU5WQUwpOwogCQlpZiAoSVNfRVJSKGMtPmJndCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoYy0+Ymd0KTsKIAkJCWMtPmJndCA9IE5VTEw7CkBAIC0xMTM5LDI0ICsxMjAyLDI4IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfaW5mb3M7CiAKKwljLT5hbHdheXNfY2hrX2NyYyA9IDA7CisKIAl1Ymlmc19tc2coIm1vdW50ZWQgVUJJIGRldmljZSAlZCwgdm9sdW1lICVkLCBuYW1lIFwiJXNcIiIsCiAJCSAgYy0+dmkudWJpX251bSwgYy0+dmkudm9sX2lkLCBjLT52aS5uYW1lKTsKIAlpZiAobW91bnRlZF9yZWFkX29ubHkpCiAJCXViaWZzX21zZygibW91bnRlZCByZWFkLW9ubHkiKTsKIAl4ID0gKGxvbmcgbG9uZyljLT5tYWluX2xlYnMgKiBjLT5sZWJfc2l6ZTsKLQl1Ymlmc19tc2coImZpbGUgc3lzdGVtIHNpemU6ICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgTEVCcykiLAotCQkgIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPm1haW5fbGVicyk7CisJdWJpZnNfbXNnKCJmaWxlIHN5c3RlbSBzaXplOiAgICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgIgorCQkgICJMRUJzKSIsIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPm1haW5fbGVicyk7CiAJeCA9IChsb25nIGxvbmcpYy0+bG9nX2xlYnMgKiBjLT5sZWJfc2l6ZSArIGMtPm1heF9idWRfYnl0ZXM7Ci0JdWJpZnNfbXNnKCJqb3VybmFsIHNpemU6ICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgTEVCcykiLAotCQkgIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPmxvZ19sZWJzICsgYy0+bWF4X2J1ZF9jbnQpOwotCXViaWZzX21zZygiZGVmYXVsdCBjb21wcmVzc29yOiAlcyIsIHViaWZzX2NvbXByX25hbWUoYy0+ZGVmYXVsdF9jb21wcikpOwotCXViaWZzX21zZygibWVkaWEgZm9ybWF0ICVkLCBsYXRlc3QgZm9ybWF0ICVkIiwKKwl1Ymlmc19tc2coImpvdXJuYWwgc2l6ZTogICAgICAgJWxsZCBieXRlcyAoJWxsZCBLaUIsICVsbGQgTWlCLCAlZCAiCisJCSAgIkxFQnMpIiwgeCwgeCA+PiAxMCwgeCA+PiAyMCwgYy0+bG9nX2xlYnMgKyBjLT5tYXhfYnVkX2NudCk7CisJdWJpZnNfbXNnKCJtZWRpYSBmb3JtYXQ6ICAgICAgICVkIChsYXRlc3QgaXMgJWQpIiwKIAkJICBjLT5mbXRfdmVyc2lvbiwgVUJJRlNfRk9STUFUX1ZFUlNJT04pOworCXViaWZzX21zZygiZGVmYXVsdCBjb21wcmVzc29yOiAlcyIsIHViaWZzX2NvbXByX25hbWUoYy0+ZGVmYXVsdF9jb21wcikpOworCXViaWZzX21zZygicmVzZXJ2ZWQgZm9yIHJvb3Q6ICAlbGx1IGJ5dGVzICglbGx1IEtpQikiLAorCQljLT5yZXBvcnRfcnBfc2l6ZSwgYy0+cmVwb3J0X3JwX3NpemUgPj4gMTApOwogCiAJZGJnX21zZygiY29tcGlsZWQgb246ICAgICAgICAgIiBfX0RBVEVfXyAiIGF0ICIgX19USU1FX18pOwogCWRiZ19tc2coIm1pbi4gSS9PIHVuaXQgc2l6ZTogICVkIGJ5dGVzIiwgYy0+bWluX2lvX3NpemUpOwogCWRiZ19tc2coIkxFQiBzaXplOiAgICAgICAgICAgICVkIGJ5dGVzICglZCBLaUIpIiwKLQkJYy0+bGViX3NpemUsIGMtPmxlYl9zaXplIC8gMTAyNCk7CisJCWMtPmxlYl9zaXplLCBjLT5sZWJfc2l6ZSA+PiAxMCk7CiAJZGJnX21zZygiZGF0YSBqb3VybmFsIGhlYWRzOiAgJWQiLAogCQljLT5qaGVhZF9jbnQgLSBOT05EQVRBX0pIRUFEU19DTlQpOwogCWRiZ19tc2coIlVVSUQ6ICAgICAgICAgICAgICAgICUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgiCkBAIC0xMjgyLDYgKzEzNDksNyBAQAogCiAJbXV0ZXhfbG9jaygmYy0+dW1vdW50X211dGV4KTsKIAljLT5yZW1vdW50aW5nX3J3ID0gMTsKKwljLT5hbHdheXNfY2hrX2NyYyA9IDE7CiAKIAkvKiBDaGVjayBmb3IgZW5vdWdoIGZyZWUgc3BhY2UgKi8KIAlpZiAodWJpZnNfY2FsY19hdmFpbGFibGUoYywgYy0+bWluX2lkeF9sZWJzKSA8PSAwKSB7CkBAIC0xMzQ1LDIwICsxNDEzLDIwIEBACiAKIAkvKiBDcmVhdGUgYmFja2dyb3VuZCB0aHJlYWQgKi8KIAljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsIGMtPmJndF9uYW1lKTsKLQlpZiAoIWMtPmJndCkKLQkJYy0+Ymd0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlpZiAoSVNfRVJSKGMtPmJndCkpIHsKIAkJZXJyID0gUFRSX0VSUihjLT5iZ3QpOwogCQljLT5iZ3QgPSBOVUxMOwogCQl1Ymlmc19lcnIoImNhbm5vdCBzcGF3biBcIiVzXCIsIGVycm9yICVkIiwKIAkJCSAgYy0+Ymd0X25hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAl3YWtlX3VwX3Byb2Nlc3MoYy0+Ymd0KTsKIAogCWMtPm9ycGhfYnVmID0gdm1hbGxvYyhjLT5sZWJfc2l6ZSk7Ci0JaWYgKCFjLT5vcnBoX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFjLT5vcnBoX2J1ZikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBDaGVjayBmb3IgZW5vdWdoIGxvZyBzcGFjZSAqLwogCWxudW0gPSBjLT5saGVhZF9sbnVtICsgMTsKQEAgLTEzODUsNiArMTQ1Myw3IEBACiAJZGJnX2dlbigicmUtbW91bnRlZCByZWFkLXdyaXRlIik7CiAJYy0+dmZzX3NiLT5zX2ZsYWdzICY9IH5NU19SRE9OTFk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDA7CisJYy0+YWx3YXlzX2Noa19jcmMgPSAwOwogCW11dGV4X3VubG9jaygmYy0+dW1vdW50X211dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtMTQwMCw2ICsxNDY5LDcgQEAKIAljLT5pbGViX2J1ZiA9IE5VTEw7CiAJdWJpZnNfbHB0X2ZyZWUoYywgMSk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDA7CisJYy0+YWx3YXlzX2Noa19jcmMgPSAwOwogCW11dGV4X3VubG9jaygmYy0+dW1vdW50X211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTQwOCwxMiArMTQ3OCw5IEBACiAgKiBjb21taXRfb25fdW5tb3VudCAtIGNvbW1pdCB0aGUgam91cm5hbCB3aGVuIHVuLW1vdW50aW5nLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB1bi1tb3VudGluZyBhbmQgaXQgY29tbWl0cyB0aGUgam91cm5hbCB1bmxlc3MKLSAqIHRoZSAiZmFzdCB1bm1vdW50IiBtb2RlIGlzIGVuYWJsZWQuIEl0IGFsc28gYXZvaWRzIGNvbW1pdHRpbmcgdGhlIGpvdXJuYWwgaWYKLSAqIGl0IGNvbnRhaW5zIHRvbyBmZXcgZGF0YS4KLSAqCi0gKiBTb21ldGltZXMgcmVjb3ZlcnkgcmVxdWlyZXMgdGhlIGpvdXJuYWwgdG8gYmUgY29tbWl0dGVkIGF0IGxlYXN0IG9uY2UsIGFuZAotICogdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIGFib3V0IHRoaXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdW4tbW91bnRpbmcgYW5kIHJlLW1vdW50aW5nLCBhbmQgaXQgY29tbWl0cworICogdGhlIGpvdXJuYWwgdW5sZXNzIHRoZSAiZmFzdCB1bm1vdW50IiBtb2RlIGlzIGVuYWJsZWQuIEl0IGFsc28gYXZvaWRzCisgKiBjb21taXR0aW5nIHRoZSBqb3VybmFsIGlmIGl0IGNvbnRhaW5zIHRvbyBmZXcgZGF0YS4KICAqLwogc3RhdGljIHZvaWQgY29tbWl0X29uX3VubW91bnQoc3RydWN0IHViaWZzX2luZm8gKmMpCiB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy90bmMuYyBiL2ZzL3ViaWZzL3RuYy5jCmluZGV4IDc2MzRjNTkuLmQyN2ZkOTEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuYy5jCisrKyBiL2ZzL3ViaWZzL3RuYy5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAl9CiAKIAl6biA9IGNvcHlfem5vZGUoYywgem5vZGUpOwotCWlmICh1bmxpa2VseShJU19FUlIoem4pKSkKKwlpZiAoSVNfRVJSKHpuKSkKIAkJcmV0dXJuIHpuOwogCiAJaWYgKHpici0+bGVuKSB7CkBAIC00NzAsNiArNDcwLDEwIEBACiAJaWYgKG5vZGVfbGVuICE9IGxlbikKIAkJcmV0dXJuIDA7CiAKKwlpZiAodHlwZSA9PSBVQklGU19EQVRBX05PREUgJiYgIWMtPmFsd2F5c19jaGtfY3JjKQorCQlpZiAoYy0+bm9fY2hrX2RhdGFfY3JjKQorCQkJcmV0dXJuIDA7CisKIAljcmMgPSBjcmMzMihVQklGU19DUkMzMl9JTklULCBidWYgKyA4LCBub2RlX2xlbiAtIDgpOwogCW5vZGVfY3JjID0gbGUzMl90b19jcHUoY2gtPmNyYyk7CiAJaWYgKGNyYyAhPSBub2RlX2NyYykKQEAgLTExMjgsNyArMTEzMiw3IEBACiAJCQl1Ymlmc19hc3NlcnQoem5vZGUgPT0gYy0+enJvb3Quem5vZGUpOwogCQkJem5vZGUgPSBkaXJ0eV9jb3dfem5vZGUoYywgJmMtPnpyb290KTsKIAkJfQotCQlpZiAodW5saWtlbHkoSVNfRVJSKHpub2RlKSkgfHwgIXApCisJCWlmIChJU19FUlIoem5vZGUpIHx8ICFwKQogCQkJYnJlYWs7CiAJCXViaWZzX2Fzc2VydChwYXRoW3AgLSAxXSA+PSAwKTsKIAkJdWJpZnNfYXNzZXJ0KHBhdGhbcCAtIDFdIDwgem5vZGUtPmNoaWxkX2NudCk7CkBAIC0xNDkyLDYgKzE0OTYsMjg5IEBACiB9CiAKIC8qKgorICogdWJpZnNfdG5jX2dldF9idV9rZXlzIC0gbG9va3VwIGtleXMgZm9yIGJ1bGstcmVhZC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBidTogYnVsay1yZWFkIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMKKyAqCisgKiBMb29rdXAgY29uc2VjdXRpdmUgZGF0YSBub2RlIGtleXMgZm9yIHRoZSBzYW1lIGlub2RlIHRoYXQgcmVzaWRlCisgKiBjb25zZWN1dGl2ZWx5IGluIHRoZSBzYW1lIExFQi4KKyAqLworaW50IHViaWZzX3RuY19nZXRfYnVfa2V5cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IGJ1X2luZm8gKmJ1KQoreworCWludCBuLCBlcnIgPSAwLCBsbnVtID0gLTEsIHVuaW5pdGlhbGl6ZWRfdmFyKG9mZnMpOworCWludCB1bmluaXRpYWxpemVkX3ZhcihsZW4pOworCXVuc2lnbmVkIGludCBibG9jayA9IGtleV9ibG9jayhjLCAmYnUtPmtleSk7CisJc3RydWN0IHViaWZzX3pub2RlICp6bm9kZTsKKworCWJ1LT5jbnQgPSAwOworCWJ1LT5ibGtfY250ID0gMDsKKwlidS0+ZW9mID0gMDsKKworCW11dGV4X2xvY2soJmMtPnRuY19tdXRleCk7CisJLyogRmluZCBmaXJzdCBrZXkgKi8KKwllcnIgPSB1Ymlmc19sb29rdXBfbGV2ZWwwKGMsICZidS0+a2V5LCAmem5vZGUsICZuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKGVycikgeworCQkvKiBLZXkgZm91bmQgKi8KKwkJbGVuID0gem5vZGUtPnpicmFuY2hbbl0ubGVuOworCQkvKiBUaGUgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCBmb3IgYXQgbGVhc3QgMSBub2RlICovCisJCWlmIChsZW4gPiBidS0+YnVmX2xlbikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIEFkZCB0aGlzIGtleSAqLworCQlidS0+emJyYW5jaFtidS0+Y250KytdID0gem5vZGUtPnpicmFuY2hbbl07CisJCWJ1LT5ibGtfY250ICs9IDE7CisJCWxudW0gPSB6bm9kZS0+emJyYW5jaFtuXS5sbnVtOworCQlvZmZzID0gQUxJR04oem5vZGUtPnpicmFuY2hbbl0ub2ZmcyArIGxlbiwgOCk7CisJfQorCXdoaWxlICgxKSB7CisJCXN0cnVjdCB1Ymlmc196YnJhbmNoICp6YnI7CisJCXVuaW9uIHViaWZzX2tleSAqa2V5OworCQl1bnNpZ25lZCBpbnQgbmV4dF9ibG9jazsKKworCQkvKiBGaW5kIG5leHQga2V5ICovCisJCWVyciA9IHRuY19uZXh0KGMsICZ6bm9kZSwgJm4pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCXpiciA9ICZ6bm9kZS0+emJyYW5jaFtuXTsKKwkJa2V5ID0gJnpici0+a2V5OworCQkvKiBTZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBkYXRhIGtleSBmb3IgdGhpcyBmaWxlICovCisJCWlmIChrZXlfaW51bShjLCBrZXkpICE9IGtleV9pbnVtKGMsICZidS0+a2V5KSB8fAorCQkgICAga2V5X3R5cGUoYywga2V5KSAhPSBVQklGU19EQVRBX0tFWSkgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChsbnVtIDwgMCkgeworCQkJLyogRmlyc3Qga2V5IGZvdW5kICovCisJCQlsbnVtID0gemJyLT5sbnVtOworCQkJb2ZmcyA9IEFMSUdOKHpici0+b2ZmcyArIHpici0+bGVuLCA4KTsKKwkJCWxlbiA9IHpici0+bGVuOworCQkJaWYgKGxlbiA+IGJ1LT5idWZfbGVuKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgZGF0YSBub2RlcyBtdXN0IGJlIGluIGNvbnNlY3V0aXZlIHBvc2l0aW9ucyBpbgorCQkJICogdGhlIHNhbWUgTEVCLgorCQkJICovCisJCQlpZiAoemJyLT5sbnVtICE9IGxudW0gfHwgemJyLT5vZmZzICE9IG9mZnMpCisJCQkJZ290byBvdXQ7CisJCQlvZmZzICs9IEFMSUdOKHpici0+bGVuLCA4KTsKKwkJCWxlbiA9IEFMSUdOKGxlbiwgOCkgKyB6YnItPmxlbjsKKwkJCS8qIE11c3Qgbm90IGV4Y2VlZCBidWZmZXIgbGVuZ3RoICovCisJCQlpZiAobGVuID4gYnUtPmJ1Zl9sZW4pCisJCQkJZ290byBvdXQ7CisJCX0KKwkJLyogQWxsb3cgZm9yIGhvbGVzICovCisJCW5leHRfYmxvY2sgPSBrZXlfYmxvY2soYywga2V5KTsKKwkJYnUtPmJsa19jbnQgKz0gKG5leHRfYmxvY2sgLSBibG9jayAtIDEpOworCQlpZiAoYnUtPmJsa19jbnQgPj0gVUJJRlNfTUFYX0JVTEtfUkVBRCkKKwkJCWdvdG8gb3V0OworCQlibG9jayA9IG5leHRfYmxvY2s7CisJCS8qIEFkZCB0aGlzIGtleSAqLworCQlidS0+emJyYW5jaFtidS0+Y250KytdID0gKnpicjsKKwkJYnUtPmJsa19jbnQgKz0gMTsKKwkJLyogU2VlIGlmIHdlIGhhdmUgcm9vbSBmb3IgbW9yZSAqLworCQlpZiAoYnUtPmNudCA+PSBVQklGU19NQVhfQlVMS19SRUFEKQorCQkJZ290byBvdXQ7CisJCWlmIChidS0+YmxrX2NudCA+PSBVQklGU19NQVhfQlVMS19SRUFEKQorCQkJZ290byBvdXQ7CisJfQorb3V0OgorCWlmIChlcnIgPT0gLUVOT0VOVCkgeworCQlidS0+ZW9mID0gMTsKKwkJZXJyID0gMDsKKwl9CisJYnUtPmdjX3NlcSA9IGMtPmdjX3NlcTsKKwltdXRleF91bmxvY2soJmMtPnRuY19tdXRleCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKgorCSAqIEFuIGVub3Jtb3VzIGhvbGUgY291bGQgY2F1c2UgYnVsay1yZWFkIHRvIGVuY29tcGFzcyB0b28gbWFueQorCSAqIHBhZ2UgY2FjaGUgcGFnZXMsIHNvIGxpbWl0IHRoZSBudW1iZXIgaGVyZS4KKwkgKi8KKwlpZiAoYnUtPmJsa19jbnQgPiBVQklGU19NQVhfQlVMS19SRUFEKQorCQlidS0+YmxrX2NudCA9IFVCSUZTX01BWF9CVUxLX1JFQUQ7CisJLyoKKwkgKiBFbnN1cmUgdGhhdCBidWxrLXJlYWQgY292ZXJzIGEgd2hvbGUgbnVtYmVyIG9mIHBhZ2UgY2FjaGUKKwkgKiBwYWdlcy4KKwkgKi8KKwlpZiAoVUJJRlNfQkxPQ0tTX1BFUl9QQUdFID09IDEgfHwKKwkgICAgIShidS0+YmxrX2NudCAmIChVQklGU19CTE9DS1NfUEVSX1BBR0UgLSAxKSkpCisJCXJldHVybiAwOworCWlmIChidS0+ZW9mKSB7CisJCS8qIEF0IHRoZSBlbmQgb2YgZmlsZSB3ZSBjYW4gcm91bmQgdXAgKi8KKwkJYnUtPmJsa19jbnQgKz0gVUJJRlNfQkxPQ0tTX1BFUl9QQUdFIC0gMTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIEV4Y2x1ZGUgZGF0YSBub2RlcyB0aGF0IGRvIG5vdCBtYWtlIHVwIGEgd2hvbGUgcGFnZSBjYWNoZSBwYWdlICovCisJYmxvY2sgPSBrZXlfYmxvY2soYywgJmJ1LT5rZXkpICsgYnUtPmJsa19jbnQ7CisJYmxvY2sgJj0gfihVQklGU19CTE9DS1NfUEVSX1BBR0UgLSAxKTsKKwl3aGlsZSAoYnUtPmNudCkgeworCQlpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtidS0+Y250IC0gMV0ua2V5KSA8IGJsb2NrKQorCQkJYnJlYWs7CisJCWJ1LT5jbnQgLT0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmVhZF93YnVmIC0gYnVsay1yZWFkIGZyb20gYSBMRUIgd2l0aCBhIHdidWYuCisgKiBAd2J1Zjogd2J1ZiB0aGF0IG1heSBvdmVybGFwIHRoZSByZWFkCisgKiBAYnVmOiBidWZmZXIgaW50byB3aGljaCB0byByZWFkCisgKiBAbGVuOiByZWFkIGxlbmd0aAorICogQGxudW06IExFQiBudW1iZXIgZnJvbSB3aGljaCB0byByZWFkCisgKiBAb2Zmczogb2Zmc2V0IGZyb20gd2hpY2ggdG8gcmVhZAorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgJTAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCByZWFkX3didWYoc3RydWN0IHViaWZzX3didWYgKndidWYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IGxudW0sCisJCSAgICAgaW50IG9mZnMpCit7CisJY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMgPSB3YnVmLT5jOworCWludCBybGVuLCBvdmVybGFwOworCisJZGJnX2lvKCJMRUIgJWQ6JWQsIGxlbmd0aCAlZCIsIGxudW0sIG9mZnMsIGxlbik7CisJdWJpZnNfYXNzZXJ0KHdidWYgJiYgbG51bSA+PSAwICYmIGxudW0gPCBjLT5sZWJfY250ICYmIG9mZnMgPj0gMCk7CisJdWJpZnNfYXNzZXJ0KCEob2ZmcyAmIDcpICYmIG9mZnMgPCBjLT5sZWJfc2l6ZSk7CisJdWJpZnNfYXNzZXJ0KG9mZnMgKyBsZW4gPD0gYy0+bGViX3NpemUpOworCisJc3Bpbl9sb2NrKCZ3YnVmLT5sb2NrKTsKKwlvdmVybGFwID0gKGxudW0gPT0gd2J1Zi0+bG51bSAmJiBvZmZzICsgbGVuID4gd2J1Zi0+b2Zmcyk7CisJaWYgKCFvdmVybGFwKSB7CisJCS8qIFdlIG1heSBzYWZlbHkgdW5sb2NrIHRoZSB3cml0ZS1idWZmZXIgYW5kIHJlYWQgdGhlIGRhdGEgKi8KKwkJc3Bpbl91bmxvY2soJndidWYtPmxvY2spOworCQlyZXR1cm4gdWJpX3JlYWQoYy0+dWJpLCBsbnVtLCBidWYsIG9mZnMsIGxlbik7CisJfQorCisJLyogRG9uJ3QgcmVhZCB1bmRlciB3YnVmICovCisJcmxlbiA9IHdidWYtPm9mZnMgLSBvZmZzOworCWlmIChybGVuIDwgMCkKKwkJcmxlbiA9IDA7CisKKwkvKiBDb3B5IHRoZSByZXN0IGZyb20gdGhlIHdyaXRlLWJ1ZmZlciAqLworCW1lbWNweShidWYgKyBybGVuLCB3YnVmLT5idWYgKyBvZmZzICsgcmxlbiAtIHdidWYtPm9mZnMsIGxlbiAtIHJsZW4pOworCXNwaW5fdW5sb2NrKCZ3YnVmLT5sb2NrKTsKKworCWlmIChybGVuID4gMCkKKwkJLyogUmVhZCBldmVyeXRoaW5nIHRoYXQgZ29lcyBiZWZvcmUgd3JpdGUtYnVmZmVyICovCisJCXJldHVybiB1YmlfcmVhZChjLT51YmksIGxudW0sIGJ1Ziwgb2Zmcywgcmxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2YWxpZGF0ZV9kYXRhX25vZGUgLSB2YWxpZGF0ZSBkYXRhIG5vZGVzIGZvciBidWxrLXJlYWQuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyBkYXRhIG5vZGUgdG8gdmFsaWRhdGUKKyAqIEB6YnI6IHpicmFuY2ggb2YgZGF0YSBub2RlIHRvIHZhbGlkYXRlCisgKgorICogVGhpcyBmdW5jdGlvbnMgcmV0dXJucyAlMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX2RhdGFfbm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqYnVmLAorCQkJICAgICAgc3RydWN0IHViaWZzX3picmFuY2ggKnpicikKK3sKKwl1bmlvbiB1Ymlmc19rZXkga2V5MTsKKwlzdHJ1Y3QgdWJpZnNfY2ggKmNoID0gYnVmOworCWludCBlcnIsIGxlbjsKKworCWlmIChjaC0+bm9kZV90eXBlICE9IFVCSUZTX0RBVEFfTk9ERSkgeworCQl1Ymlmc19lcnIoImJhZCBub2RlIHR5cGUgKCVkIGJ1dCBleHBlY3RlZCAlZCkiLAorCQkJICBjaC0+bm9kZV90eXBlLCBVQklGU19EQVRBX05PREUpOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJZXJyID0gdWJpZnNfY2hlY2tfbm9kZShjLCBidWYsIHpici0+bG51bSwgemJyLT5vZmZzLCAwLCAwKTsKKwlpZiAoZXJyKSB7CisJCXViaWZzX2VycigiZXhwZWN0ZWQgbm9kZSB0eXBlICVkIiwgVUJJRlNfREFUQV9OT0RFKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGVuID0gbGUzMl90b19jcHUoY2gtPmxlbik7CisJaWYgKGxlbiAhPSB6YnItPmxlbikgeworCQl1Ymlmc19lcnIoImJhZCBub2RlIGxlbmd0aCAlZCwgZXhwZWN0ZWQgJWQiLCBsZW4sIHpici0+bGVuKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUga2V5IG9mIHRoZSByZWFkIG5vZGUgaXMgY29ycmVjdCAqLworCWtleV9yZWFkKGMsIGJ1ZiArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxKTsKKwlpZiAoIWtleXNfZXEoYywgJnpici0+a2V5LCAma2V5MSkpIHsKKwkJdWJpZnNfZXJyKCJiYWQga2V5IGluIG5vZGUgYXQgTEVCICVkOiVkIiwKKwkJCSAgemJyLT5sbnVtLCB6YnItPm9mZnMpOworCQlkYmdfdG5jKCJsb29rZWQgZm9yIGtleSAlcyBmb3VuZCBub2RlJ3Mga2V5ICVzIiwKKwkJCURCR0tFWSgmemJyLT5rZXkpLCBEQkdLRVkxKCZrZXkxKSk7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwllcnIgPSAtRUlOVkFMOworb3V0OgorCXViaWZzX2VycigiYmFkIG5vZGUgYXQgTEVCICVkOiVkIiwgemJyLT5sbnVtLCB6YnItPm9mZnMpOworCWRiZ19kdW1wX25vZGUoYywgYnVmKTsKKwlkYmdfZHVtcF9zdGFjaygpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogdWJpZnNfdG5jX2J1bGtfcmVhZCAtIHJlYWQgYSBudW1iZXIgb2YgZGF0YSBub2RlcyBpbiBvbmUgZ28uCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnU6IGJ1bGstcmVhZCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzCisgKgorICogVGhpcyBmdW5jdGlvbnMgcmVhZHMgYW5kIHZhbGlkYXRlcyB0aGUgZGF0YSBub2RlcyB0aGF0IHdlcmUgaWRlbnRpZmllZCBieSB0aGUKKyAqICd1Ymlmc190bmNfZ2V0X2J1X2tleXMoKScgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgJTAgb24gc3VjY2VzcywKKyAqIC1FQUdBSU4gdG8gaW5kaWNhdGUgYSByYWNlIHdpdGggR0MsIG9yIGFub3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZSBvbgorICogZmFpbHVyZS4KKyAqLworaW50IHViaWZzX3RuY19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSkKK3sKKwlpbnQgbG51bSA9IGJ1LT56YnJhbmNoWzBdLmxudW0sIG9mZnMgPSBidS0+emJyYW5jaFswXS5vZmZzLCBsZW4sIGVyciwgaTsKKwlzdHJ1Y3QgdWJpZnNfd2J1ZiAqd2J1ZjsKKwl2b2lkICpidWY7CisKKwlsZW4gPSBidS0+emJyYW5jaFtidS0+Y250IC0gMV0ub2ZmczsKKwlsZW4gKz0gYnUtPnpicmFuY2hbYnUtPmNudCAtIDFdLmxlbiAtIG9mZnM7CisJaWYgKGxlbiA+IGJ1LT5idWZfbGVuKSB7CisJCXViaWZzX2VycigiYnVmZmVyIHRvbyBzbWFsbCAlZCB2cyAlZCIsIGJ1LT5idWZfbGVuLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEbyB0aGUgcmVhZCAqLworCXdidWYgPSB1Ymlmc19nZXRfd2J1ZihjLCBsbnVtKTsKKwlpZiAod2J1ZikKKwkJZXJyID0gcmVhZF93YnVmKHdidWYsIGJ1LT5idWYsIGxlbiwgbG51bSwgb2Zmcyk7CisJZWxzZQorCQllcnIgPSB1YmlfcmVhZChjLT51YmksIGxudW0sIGJ1LT5idWYsIG9mZnMsIGxlbik7CisKKwkvKiBDaGVjayBmb3IgYSByYWNlIHdpdGggR0MgKi8KKwlpZiAobWF5YmVfbGViX2djZWQoYywgbG51bSwgYnUtPmdjX3NlcSkpCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKGVyciAmJiBlcnIgIT0gLUVCQURNU0cpIHsKKwkJdWJpZnNfZXJyKCJmYWlsZWQgdG8gcmVhZCBmcm9tIExFQiAlZDolZCwgZXJyb3IgJWQiLAorCQkJICBsbnVtLCBvZmZzLCBlcnIpOworCQlkYmdfZHVtcF9zdGFjaygpOworCQlkYmdfdG5jKCJrZXkgJXMiLCBEQkdLRVkoJmJ1LT5rZXkpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgbm9kZXMgcmVhZCAqLworCWJ1ZiA9IGJ1LT5idWY7CisJZm9yIChpID0gMDsgaSA8IGJ1LT5jbnQ7IGkrKykgeworCQllcnIgPSB2YWxpZGF0ZV9kYXRhX25vZGUoYywgYnVmLCAmYnUtPnpicmFuY2hbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJYnVmID0gYnVmICsgQUxJR04oYnUtPnpicmFuY2hbaV0ubGVuLCA4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBkb19sb29rdXBfbm0tIGxvb2sgdXAgYSAiaGFzaGVkIiBub2RlLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGtleTogbm9kZSBrZXkgdG8gbG9va3VwCkBAIC0xNjc1LDcgKzE5NjIsNyBAQAogewogCXN0cnVjdCB1Ymlmc196bm9kZSAqem4sICp6aSwgKnpwOwogCWludCBpLCBrZWVwLCBtb3ZlLCBhcHBlbmRpbmcgPSAwOwotCXVuaW9uIHViaWZzX2tleSAqa2V5ID0gJnpici0+a2V5OworCXVuaW9uIHViaWZzX2tleSAqa2V5ID0gJnpici0+a2V5LCAqa2V5MTsKIAogCXViaWZzX2Fzc2VydChuID49IDAgJiYgbiA8PSBjLT5mYW5vdXQpOwogCkBAIC0xNzE2LDIwICsyMDAzLDMzIEBACiAJem4tPmxldmVsID0gem5vZGUtPmxldmVsOwogCiAJLyogRGVjaWRlIHdoZXJlIHRvIHNwbGl0ICovCi0JaWYgKHpub2RlLT5sZXZlbCA9PSAwICYmIG4gPT0gYy0+ZmFub3V0ICYmCi0JICAgIGtleV90eXBlKGMsIGtleSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKLQkJdW5pb24gdWJpZnNfa2V5ICprZXkxOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYW4gaW5vZGUgd2hpY2ggaXMgYmVpbmcgYXBwZW5kZWQgLSBkbyBub3Qgc3BsaXQKLQkJICogaXQgYmVjYXVzZSBubyBvdGhlciB6YnJhbmNoZXMgY2FuIGJlIGluc2VydGVkIGJldHdlZW4KLQkJICogemJyYW5jaGVzIG9mIGNvbnNlY3V0aXZlIGRhdGEgbm9kZXMgYW55d2F5LgotCQkgKi8KLQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFtuIC0gMV0ua2V5OwotCQlpZiAoa2V5X2ludW0oYywga2V5MSkgPT0ga2V5X2ludW0oYywga2V5KSAmJgotCQkgICAga2V5X3R5cGUoYywga2V5MSkgPT0gVUJJRlNfREFUQV9LRVkgJiYKLQkJICAgIGtleV9ibG9jayhjLCBrZXkxKSA9PSBrZXlfYmxvY2soYywga2V5KSAtIDEpCi0JCQlhcHBlbmRpbmcgPSAxOworCWlmICh6bm9kZS0+bGV2ZWwgPT0gMCAmJiBrZXlfdHlwZShjLCBrZXkpID09IFVCSUZTX0RBVEFfS0VZKSB7CisJCS8qIFRyeSBub3QgdG8gc3BsaXQgY29uc2VjdXRpdmUgZGF0YSBrZXlzICovCisJCWlmIChuID09IGMtPmZhbm91dCkgeworCQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFtuIC0gMV0ua2V5OworCQkJaWYgKGtleV9pbnVtKGMsIGtleTEpID09IGtleV9pbnVtKGMsIGtleSkgJiYKKwkJCSAgICBrZXlfdHlwZShjLCBrZXkxKSA9PSBVQklGU19EQVRBX0tFWSkKKwkJCQlhcHBlbmRpbmcgPSAxOworCQl9IGVsc2UKKwkJCWdvdG8gY2hlY2tfc3BsaXQ7CisJfSBlbHNlIGlmIChhcHBlbmRpbmcgJiYgbiAhPSBjLT5mYW5vdXQpIHsKKwkJLyogVHJ5IG5vdCB0byBzcGxpdCBjb25zZWN1dGl2ZSBkYXRhIGtleXMgKi8KKwkJYXBwZW5kaW5nID0gMDsKK2NoZWNrX3NwbGl0OgorCQlpZiAobiA+PSAoYy0+ZmFub3V0ICsgMSkgLyAyKSB7CisJCQlrZXkxID0gJnpub2RlLT56YnJhbmNoWzBdLmtleTsKKwkJCWlmIChrZXlfaW51bShjLCBrZXkxKSA9PSBrZXlfaW51bShjLCBrZXkpICYmCisJCQkgICAga2V5X3R5cGUoYywga2V5MSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCQlrZXkxID0gJnpub2RlLT56YnJhbmNoW25dLmtleTsKKwkJCQlpZiAoa2V5X2ludW0oYywga2V5MSkgIT0ga2V5X2ludW0oYywga2V5KSB8fAorCQkJCSAgICBrZXlfdHlwZShjLCBrZXkxKSAhPSBVQklGU19EQVRBX0tFWSkgeworCQkJCQlrZWVwID0gbjsKKwkJCQkJbW92ZSA9IGMtPmZhbm91dCAtIGtlZXA7CisJCQkJCXppID0gem5vZGU7CisJCQkJCWdvdG8gZG9fc3BsaXQ7CisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJaWYgKGFwcGVuZGluZykgewpAQCAtMTc1OSw2ICsyMDU5LDggQEAKIAkJCXpici0+em5vZGUtPnBhcmVudCA9IHpuOwogCX0KIAorZG9fc3BsaXQ6CisKIAlfX3NldF9iaXQoRElSVFlfWk5PREUsICZ6bi0+ZmxhZ3MpOwogCWF0b21pY19sb25nX2luYygmYy0+ZGlydHlfem5fY250KTsKIApAQCAtMTc4NSwxNCArMjA4NywxMSBAQAogCiAJLyogSW5zZXJ0IG5ldyB6bm9kZSAocHJvZHVjZWQgYnkgc3BpdHRpbmcpIGludG8gdGhlIHBhcmVudCAqLwogCWlmICh6cCkgewotCQlpID0gbjsKKwkJaWYgKG4gPT0gMCAmJiB6aSA9PSB6bm9kZSAmJiB6bm9kZS0+aWlwID09IDApCisJCQljb3JyZWN0X3BhcmVudF9rZXlzKGMsIHpub2RlKTsKKwogCQkvKiBMb2NhdGUgaW5zZXJ0aW9uIHBvaW50ICovCiAJCW4gPSB6bm9kZS0+aWlwICsgMTsKLQkJaWYgKGFwcGVuZGluZyAmJiBuICE9IGMtPmZhbm91dCkKLQkJCWFwcGVuZGluZyA9IDA7Ci0KLQkJaWYgKGkgPT0gMCAmJiB6aSA9PSB6bm9kZSAmJiB6bm9kZS0+aWlwID09IDApCi0JCQljb3JyZWN0X3BhcmVudF9rZXlzKGMsIHpub2RlKTsKIAogCQkvKiBUYWlsIHJlY3Vyc2lvbiAqLwogCQl6YnItPmtleSA9IHpuLT56YnJhbmNoWzBdLmtleTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3RuY19taXNjLmMgYi9mcy91Ymlmcy90bmNfbWlzYy5jCmluZGV4IGEyNWMxY2MuLmI0OGRiOTkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuY19taXNjLmMKKysrIGIvZnMvdWJpZnMvdG5jX21pc2MuYwpAQCAtNDgwLDggKzQ4MCw4IEBACiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZSBrZXkgb2YgdGhlIHJlYWQgbm9kZSBpcyBjb3JyZWN0ICovCi0Ja2V5X3JlYWQoYywga2V5LCAma2V5MSk7Ci0JaWYgKG1lbWNtcChub2RlICsgVUJJRlNfS0VZX09GRlNFVCwgJmtleTEsIGMtPmtleV9sZW4pKSB7CisJa2V5X3JlYWQoYywgbm9kZSArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxKTsKKwlpZiAoIWtleXNfZXEoYywga2V5LCAma2V5MSkpIHsKIAkJdWJpZnNfZXJyKCJiYWQga2V5IGluIG5vZGUgYXQgTEVCICVkOiVkIiwKIAkJCSAgemJyLT5sbnVtLCB6YnItPm9mZnMpOwogCQlkYmdfdG5jKCJsb29rZWQgZm9yIGtleSAlcyBmb3VuZCBub2RlJ3Mga2V5ICVzIiwKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmggYi9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oCmluZGV4IGE5ZWNiZDkuLjBiMzc4MDQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMtbWVkaWEuaApAQCAtNzUsNyArNzUsNiBAQAogICovCiAjZGVmaW5lIFVCSUZTX0JMT0NLX1NJWkUgIDQwOTYKICNkZWZpbmUgVUJJRlNfQkxPQ0tfU0hJRlQgMTIKLSNkZWZpbmUgVUJJRlNfQkxPQ0tfTUFTSyAgMHgwMDAwMEZGRgogCiAvKiBVQklGUyBwYWRkaW5nIGJ5dGUgcGF0dGVybiAobXVzdCBub3QgYmUgZmlyc3Qgb3IgbGFzdCBieXRlIG9mIG5vZGUgbWFnaWMpICovCiAjZGVmaW5lIFVCSUZTX1BBRERJTkdfQllURSAweENFCmRpZmYgLS1naXQgYS9mcy91Ymlmcy91Ymlmcy5oIGIvZnMvdWJpZnMvdWJpZnMuaAppbmRleCAxN2M2MjBiLi5hN2JkMzJmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy91Ymlmcy5oCisrKyBiL2ZzL3ViaWZzL3ViaWZzLmgKQEAgLTE0Miw2ICsxNDIsOSBAQAogLyogTWF4aW11bSBleHBlY3RlZCB0cmVlIGhlaWdodCBmb3IgdXNlIGJ5IGJvdHRvbV91cF9idWYgKi8KICNkZWZpbmUgQk9UVE9NX1VQX0hFSUdIVCA2NAogCisvKiBNYXhpbXVtIG51bWJlciBvZiBkYXRhIG5vZGVzIHRvIGJ1bGstcmVhZCAqLworI2RlZmluZSBVQklGU19NQVhfQlVMS19SRUFEIDMyCisKIC8qCiAgKiBMb2NrZGVwIGNsYXNzZXMgZm9yIFVCSUZTIGlub2RlIEB1aV9tdXRleC4KICAqLwpAQCAtMzI4LDkgKzMzMSwxMCBAQAogICogICAgICAgICAgICAgICB0aGlzIGlub2RlCiAgKiBAZGlydHk6IG5vbi16ZXJvIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eQogICogQHhhdHRyOiBub24temVybyBpZiB0aGlzIGlzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbm9kZQorICogQGJ1bGtfcmVhZDogbm9uLXplcm8gaWYgYnVsay1yZWFkIHNob3VsZCBiZSB1c2VkCiAgKiBAdWlfbXV0ZXg6IHNlcmlhbGl6ZXMgaW5vZGUgd3JpdGUtYmFjayB3aXRoIHRoZSByZXN0IG9mIFZGUyBvcGVyYXRpb25zLAotICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHByb3RlY3RzIEBkaXJ0eSwKLSAqICAgICAgICAgICAgQHVpX3NpemUsIGFuZCBAeGF0dHJfc2l6ZQorICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHNlcmlhbGl6ZXMgYnVsay1yZWFkLAorICogICAgICAgICAgICBwcm90ZWN0cyBAZGlydHksIEBidWxrX3JlYWQsIEB1aV9zaXplLCBhbmQgQHhhdHRyX3NpemUKICAqIEB1aV9sb2NrOiBwcm90ZWN0cyBAc3luY2VkX2lfc2l6ZQogICogQHN5bmNlZF9pX3NpemU6IHN5bmNocm9uaXplZCBzaXplIG9mIGlub2RlLCBpLmUuIHRoZSB2YWx1ZSBvZiBpbm9kZSBzaXplCiAgKiAgICAgICAgICAgICAgICAgY3VycmVudGx5IHN0b3JlZCBvbiB0aGUgZmxhc2g7IHVzZWQgb25seSBmb3IgcmVndWxhciBmaWxlCkBAIC0zMzgsNiArMzQyLDggQEAKICAqIEB1aV9zaXplOiBpbm9kZSBzaXplIHVzZWQgYnkgVUJJRlMgd2hlbiB3cml0aW5nIHRvIGZsYXNoCiAgKiBAZmxhZ3M6IGlub2RlIGZsYWdzIChAVUJJRlNfQ09NUFJfRkwsIGV0YykKICAqIEBjb21wcl90eXBlOiBkZWZhdWx0IGNvbXByZXNzaW9uIHR5cGUgdXNlZCBmb3IgdGhpcyBpbm9kZQorICogQGxhc3RfcGFnZV9yZWFkOiBwYWdlIG51bWJlciBvZiBsYXN0IHBhZ2UgcmVhZCAoZm9yIGJ1bGsgcmVhZCkKKyAqIEByZWFkX2luX2Ffcm93OiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFnZXMgcmVhZCBpbiBhIHJvdyAoZm9yIGJ1bGsgcmVhZCkKICAqIEBkYXRhX2xlbjogbGVuZ3RoIG9mIHRoZSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBpbm9kZQogICogQGRhdGE6IGlub2RlJ3MgZGF0YQogICoKQEAgLTM3OSwxMiArMzg1LDE1IEBACiAJdW5zaWduZWQgaW50IHhhdHRyX25hbWVzOwogCXVuc2lnbmVkIGludCBkaXJ0eToxOwogCXVuc2lnbmVkIGludCB4YXR0cjoxOworCXVuc2lnbmVkIGludCBidWxrX3JlYWQ6MTsKIAlzdHJ1Y3QgbXV0ZXggdWlfbXV0ZXg7CiAJc3BpbmxvY2tfdCB1aV9sb2NrOwogCWxvZmZfdCBzeW5jZWRfaV9zaXplOwogCWxvZmZfdCB1aV9zaXplOwogCWludCBmbGFnczsKIAlpbnQgY29tcHJfdHlwZTsKKwlwZ29mZl90IGxhc3RfcGFnZV9yZWFkOworCXBnb2ZmX3QgcmVhZF9pbl9hX3JvdzsKIAlpbnQgZGF0YV9sZW47CiAJdm9pZCAqZGF0YTsKIH07CkBAIC02OTgsOCArNzA3LDggQEAKICAqIHN0cnVjdCB1Ymlmc196YnJhbmNoIC0ga2V5L2Nvb3JkaW5hdGUvbGVuZ3RoIGJyYW5jaCBzdG9yZWQgaW4gem5vZGVzLgogICogQGtleToga2V5CiAgKiBAem5vZGU6IHpub2RlIGFkZHJlc3MgaW4gbWVtb3J5Ci0gKiBAbG51bTogTEVCIG51bWJlciBvZiB0aGUgaW5kZXhpbmcgbm9kZQotICogQG9mZnM6IG9mZnNldCBvZiB0aGUgaW5kZXhpbmcgbm9kZSB3aXRoaW4gQGxudW0KKyAqIEBsbnVtOiBMRUIgbnVtYmVyIG9mIHRoZSB0YXJnZXQgbm9kZSAoaW5kZXhpbmcgbm9kZSBvciBkYXRhIG5vZGUpCisgKiBAb2ZmczogdGFyZ2V0IG5vZGUgb2Zmc2V0IHdpdGhpbiBAbG51bQogICogQGxlbjogdGFyZ2V0IG5vZGUgbGVuZ3RoCiAgKi8KIHN0cnVjdCB1Ymlmc196YnJhbmNoIHsKQEAgLTc0NCw2ICs3NTMsMjggQEAKIH07CiAKIC8qKgorICogc3RydWN0IGJ1X2luZm8gLSBidWxrLXJlYWQgaW5mb3JtYXRpb24KKyAqIEBrZXk6IGZpcnN0IGRhdGEgbm9kZSBrZXkKKyAqIEB6YnJhbmNoOiB6YnJhbmNoZXMgb2YgZGF0YSBub2RlcyB0byBidWxrIHJlYWQKKyAqIEBidWY6IGJ1ZmZlciB0byByZWFkIGludG8KKyAqIEBidWZfbGVuOiBidWZmZXIgbGVuZ3RoCisgKiBAZ2Nfc2VxOiBHQyBzZXF1ZW5jZSBudW1iZXIgdG8gZGV0ZWN0IHJhY2VzIHdpdGggR0MKKyAqIEBjbnQ6IG51bWJlciBvZiBkYXRhIG5vZGVzIGZvciBidWxrIHJlYWQKKyAqIEBibGtfY250OiBudW1iZXIgb2YgZGF0YSBibG9ja3MgaW5jbHVkaW5nIGhvbGVzCisgKiBAb2VmOiBlbmQgb2YgZmlsZSByZWFjaGVkCisgKi8KK3N0cnVjdCBidV9pbmZvIHsKKwl1bmlvbiB1Ymlmc19rZXkga2V5OworCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpicmFuY2hbVUJJRlNfTUFYX0JVTEtfUkVBRF07CisJdm9pZCAqYnVmOworCWludCBidWZfbGVuOworCWludCBnY19zZXE7CisJaW50IGNudDsKKwlpbnQgYmxrX2NudDsKKwlpbnQgZW9mOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgdWJpZnNfbm9kZV9yYW5nZSAtIG5vZGUgbGVuZ3RoIHJhbmdlIGRlc2NyaXB0aW9uIGRhdGEgc3RydWN0dXJlLgogICogQGxlbjogZml4ZWQgbm9kZSBsZW5ndGgKICAqIEBtaW5fbGVuOiBtaW5pbXVtIHBvc3NpYmxlIG5vZGUgbGVuZ3RoCkBAIC04NjIsOSArODkzLDEzIEBACiAvKioKICAqIHN0cnVjdCB1Ymlmc19tb3VudF9vcHRzIC0gVUJJRlMtc3BlY2lmaWMgbW91bnQgb3B0aW9ucyBpbmZvcm1hdGlvbi4KICAqIEB1bm1vdW50X21vZGU6IHNlbGVjdGVkIHVubW91bnQgbW9kZSAoJTAgZGVmYXVsdCwgJTEgbm9ybWFsLCAlMiBmYXN0KQorICogQGJ1bGtfcmVhZDogZW5hYmxlIGJ1bGstcmVhZHMKKyAqIEBjaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKICAqLwogc3RydWN0IHViaWZzX21vdW50X29wdHMgewogCXVuc2lnbmVkIGludCB1bm1vdW50X21vZGU6MjsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjI7CisJdW5zaWduZWQgaW50IGNoa19kYXRhX2NyYzoyOwogfTsKIAogLyoqCkBAIC05MDUsMTMgKzk0MCwxMiBAQAogICogQGNtdF9zdGF0ZTogY29tbWl0IHN0YXRlCiAgKiBAY3NfbG9jazogY29tbWl0IHN0YXRlIGxvY2sKICAqIEBjbXRfd3E6IHdhaXQgcXVldWUgdG8gc2xlZXAgb24gaWYgdGhlIGxvZyBpcyBmdWxsIGFuZCBhIGNvbW1pdCBpcyBydW5uaW5nCisgKgogICogQGZhc3RfdW5tb3VudDogZG8gbm90IHJ1biBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKICAqIEBiaWdfbHB0OiBmbGFnIHRoYXQgTFBUIGlzIHRvbyBiaWcgdG8gd3JpdGUgd2hvbGUgZHVyaW5nIGNvbW1pdAotICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCi0gKiBAbm9zcGFjZTogbm9uLXplcm8gaWYgdGhlIGZpbGUtc3lzdGVtIGRvZXMgbm90IGhhdmUgZmxhc2ggc3BhY2UgKHVzZWQgYXMKLSAqICAgICAgICAgICBvcHRpbWl6YXRpb24pCi0gKiBAbm9zcGFjZV9ycDogdGhlIHNhbWUgYXMgQG5vc3BhY2UsIGJ1dCBhZGRpdGlvbmFsbHkgbWVhbnMgdGhhdCBldmVuIHJlc2VydmVkCi0gKiAgICAgICAgICAgICAgcG9vbCBpcyBmdWxsCisgKiBAbm9fY2hrX2RhdGFfY3JjOiBkbyBub3QgY2hlY2sgQ1JDcyB3aGVuIHJlYWRpbmcgZGF0YSBub2RlcyAoZXhjZXB0IGR1cmluZworICogICAgICAgICAgICAgICAgICAgcmVjb3ZlcnkpCisgKiBAYnVsa19yZWFkOiBlbmFibGUgYnVsay1yZWFkcwogICoKICAqIEB0bmNfbXV0ZXg6IHByb3RlY3RzIHRoZSBUcmVlIE5vZGUgQ2FjaGUgKFROQyksIEB6cm9vdCwgQGNuZXh0LCBAZW5leHQsIGFuZAogICogICAgICAgICAgICAgQGNhbGNfaWR4X3N6CkBAIC05MzUsNiArOTY5LDcgQEAKICAqIEBtc3Rfbm9kZTogbWFzdGVyIG5vZGUKICAqIEBtc3Rfb2Zmczogb2Zmc2V0IG9mIHZhbGlkIG1hc3RlciBub2RlCiAgKiBAbXN0X211dGV4OiBwcm90ZWN0cyB0aGUgbWFzdGVyIG5vZGUgYXJlYSwgQG1zdF9ub2RlLCBhbmQgQG1zdF9vZmZzCisgKiBAYnVsa19yZWFkX2J1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcwogICoKICAqIEBsb2dfbGViczogbnVtYmVyIG9mIGxvZ2ljYWwgZXJhc2VibG9ja3MgaW4gdGhlIGxvZwogICogQGxvZ19ieXRlczogbG9nIHNpemUgaW4gYnl0ZXMKQEAgLTk3NywxMiArMTAxMiwxNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICBidXQgd2hpY2ggc3RpbGwgaGF2ZSB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgYmVjYXVzZQogICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5kZXggaGFzIG5vdCBiZWVuIGNvbW1pdHRlZCBzbyBmYXIKICAqIEBzcGFjZV9sb2NrOiBwcm90ZWN0cyBAYnVkZ19pZHhfZ3Jvd3RoLCBAYnVkZ19kYXRhX2dyb3d0aCwgQGJ1ZGdfZGRfZ3Jvd3RoLAotICogICAgICAgICAgICAgIEBidWRnX3VuY29tbWl0ZWRfaWR4LCBAbWluX2lkeF9sZWJzLCBAb2xkX2lkeF9zeiwgYW5kIEBsc3Q7CisgKiAgICAgICAgICAgICAgQGJ1ZGdfdW5jb21taXRlZF9pZHgsIEBtaW5faWR4X2xlYnMsIEBvbGRfaWR4X3N6LCBAbHN0LAorICogICAgICAgICAgICAgIEBub3NwYWNlLCBhbmQgQG5vc3BhY2VfcnA7CiAgKiBAbWluX2lkeF9sZWJzOiBtaW5pbXVtIG51bWJlciBvZiBMRUJzIHJlcXVpcmVkIGZvciB0aGUgaW5kZXgKICAqIEBvbGRfaWR4X3N6OiBzaXplIG9mIGluZGV4IG9uIGZsYXNoCiAgKiBAY2FsY19pZHhfc3o6IHRlbXBvcmFyeSB2YXJpYWJsZSB3aGljaCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgaW5kZXggc2l6ZQogICogICAgICAgICAgICAgICAoY29udGFpbnMgYWNjdXJhdGUgbmV3IGluZGV4IHNpemUgYXQgZW5kIG9mIFROQyBjb21taXQgc3RhcnQpCiAgKiBAbHN0OiBscHJvcHMgc3RhdGlzdGljcworICogQG5vc3BhY2U6IG5vbi16ZXJvIGlmIHRoZSBmaWxlLXN5c3RlbSBkb2VzIG5vdCBoYXZlIGZsYXNoIHNwYWNlICh1c2VkIGFzCisgKiAgICAgICAgICAgb3B0aW1pemF0aW9uKQorICogQG5vc3BhY2VfcnA6IHRoZSBzYW1lIGFzIEBub3NwYWNlLCBidXQgYWRkaXRpb25hbGx5IG1lYW5zIHRoYXQgZXZlbiByZXNlcnZlZAorICogICAgICAgICAgICAgIHBvb2wgaXMgZnVsbAogICoKICAqIEBwYWdlX2J1ZGdldDogYnVkZ2V0IGZvciBhIHBhZ2UKICAqIEBpbm9kZV9idWRnZXQ6IGJ1ZGdldCBmb3IgYW4gaW5vZGUKQEAgLTEwNjEsNiArMTEwMSw3IEBACiAgKiBAbHB0X2RydHlfZmxnczogZGlydHkgZmxhZ3MgZm9yIExQVCBzcGVjaWFsIG5vZGVzIGUuZy4gbHRhYgogICogQGRpcnR5X25uX2NudDogbnVtYmVyIG9mIGRpcnR5IG5ub2RlcwogICogQGRpcnR5X3BuX2NudDogbnVtYmVyIG9mIGRpcnR5IHBub2RlcworICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCiAgKiBAbHB0X3N6OiBMUFQgc2l6ZQogICogQGxwdF9ub2RfYnVmOiBidWZmZXIgZm9yIGFuIG9uLWZsYXNoIG5ub2RlIG9yIHBub2RlCiAgKiBAbHB0X2J1ZjogYnVmZmVyIG9mIExFQiBzaXplIHVzZWQgYnkgTFBUCkBAIC0xMTAyLDYgKzExNDMsNyBAQAogICogQHJjdnJkX21zdF9ub2RlOiByZWNvdmVyZWQgbWFzdGVyIG5vZGUgdG8gd3JpdGUgd2hlbiBtb3VudGluZyBybyB0byBydwogICogQHNpemVfdHJlZTogaW5vZGUgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVjb3ZlcnkKICAqIEByZW1vdW50aW5nX3J3OiBzZXQgd2hpbGUgcmVtb3VudGluZyBmcm9tIHJvIHRvIHJ3IChzYiBmbGFncyBoYXZlIE1TX1JET05MWSkKKyAqIEBhbHdheXNfY2hrX2NyYzogYWx3YXlzIGNoZWNrIENSQ3MgKHdoaWxlIG1vdW50aW5nIGFuZCByZW1vdW50aW5nIHJ3KQogICogQG1vdW50X29wdHM6IFVCSUZTLXNwZWNpZmljIG1vdW50IG9wdGlvbnMKICAqCiAgKiBAZGJnX2J1ZjogYSBidWZmZXIgb2YgTEVCIHNpemUgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCkBAIC0xMTQ2LDExICsxMTg4LDExIEBACiAJaW50IGNtdF9zdGF0ZTsKIAlzcGlubG9ja190IGNzX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY210X3dxOworCiAJdW5zaWduZWQgaW50IGZhc3RfdW5tb3VudDoxOwogCXVuc2lnbmVkIGludCBiaWdfbHB0OjE7Ci0JdW5zaWduZWQgaW50IGNoZWNrX2xwdF9mcmVlOjE7Ci0JdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKLQl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOworCXVuc2lnbmVkIGludCBub19jaGtfZGF0YV9jcmM6MTsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjE7CiAKIAlzdHJ1Y3QgbXV0ZXggdG5jX211dGV4OwogCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpyb290OwpAQCAtMTE3NSw2ICsxMjE3LDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKm1zdF9ub2RlOwogCWludCBtc3Rfb2ZmczsKIAlzdHJ1Y3QgbXV0ZXggbXN0X211dGV4OworCWludCBidWxrX3JlYWRfYnVmX3NpemU7CiAKIAlpbnQgbG9nX2xlYnM7CiAJbG9uZyBsb25nIGxvZ19ieXRlczsKQEAgLTEyMTgsNiArMTI2MSw4IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG9sZF9pZHhfc3o7CiAJdW5zaWduZWQgbG9uZyBsb25nIGNhbGNfaWR4X3N6OwogCXN0cnVjdCB1Ymlmc19scF9zdGF0cyBsc3Q7CisJdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKKwl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOwogCiAJaW50IHBhZ2VfYnVkZ2V0OwogCWludCBpbm9kZV9idWRnZXQ7CkBAIC0xMjk0LDYgKzEzMzksNyBAQAogCWludCBscHRfZHJ0eV9mbGdzOwogCWludCBkaXJ0eV9ubl9jbnQ7CiAJaW50IGRpcnR5X3BuX2NudDsKKwlpbnQgY2hlY2tfbHB0X2ZyZWU7CiAJbG9uZyBsb25nIGxwdF9zejsKIAl2b2lkICpscHRfbm9kX2J1ZjsKIAl2b2lkICpscHRfYnVmOwpAQCAtMTMzNSw2ICsxMzgxLDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKnJjdnJkX21zdF9ub2RlOwogCXN0cnVjdCByYl9yb290IHNpemVfdHJlZTsKIAlpbnQgcmVtb3VudGluZ19ydzsKKwlpbnQgYWx3YXlzX2Noa19jcmM7CiAJc3RydWN0IHViaWZzX21vdW50X29wdHMgbW91bnRfb3B0czsKIAogI2lmZGVmIENPTkZJR19VQklGU19GU19ERUJVRwpAQCAtMTM0Nyw2ICsxMzk0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmYWlsX3RpbWVvdXQ7CiAJdW5zaWduZWQgaW50IGZhaWxfY250OwogCXVuc2lnbmVkIGludCBmYWlsX2NudF9tYXg7CisJbG9uZyBsb25nIGNoa19scHRfc3o7CisJbG9uZyBsb25nIGNoa19scHRfc3oyOworCWxvbmcgbG9uZyBjaGtfbHB0X3dhc3RhZ2U7CisJaW50IGNoa19scHRfbGViczsKKwlpbnQgbmV3X25oZWFkX2xudW07CisJaW50IG5ld19uaGVhZF9vZmZzOwogI2VuZGlmCiB9OwogCkBAIC0xMzc3LDcgKzE0MzAsNyBAQAogaW50IHViaWZzX3dyaXRlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsbnVtLAogCQkgICAgIGludCBvZmZzLCBpbnQgZHR5cGUpOwogaW50IHViaWZzX2NoZWNrX25vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxudW0sCi0JCSAgICAgaW50IG9mZnMsIGludCBxdWlldCk7CisJCSAgICAgaW50IG9mZnMsIGludCBxdWlldCwgaW50IGNoa19jcmMpOwogdm9pZCB1Ymlmc19wcmVwYXJlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHBhZCk7CiB2b2lkIHViaWZzX3ByZXBfZ3JwX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsYXN0KTsKIGludCB1Ymlmc19pb19pbml0KHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKQEAgLTE0OTAsNiArMTU0Myw4IEBACiBpbnQgaXNfaWR4X25vZGVfaW5fdG5jKHN0cnVjdCB1Ymlmc19pbmZvICpjLCB1bmlvbiB1Ymlmc19rZXkgKmtleSwgaW50IGxldmVsLAogCQkgICAgICAgaW50IGxudW0sIGludCBvZmZzKTsKIGludCBpbnNlcnRfb2xkX2lkeF96bm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX3pub2RlICp6bm9kZSk7CitpbnQgdWJpZnNfdG5jX2dldF9idV9rZXlzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgYnVfaW5mbyAqYnUpOworaW50IHViaWZzX3RuY19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSk7CiAKIC8qIHRuY19taXNjLmMgKi8KIHN0cnVjdCB1Ymlmc196bm9kZSAqdWJpZnNfdG5jX2xldmVsb3JkZXJfbmV4dChzdHJ1Y3QgdWJpZnNfem5vZGUgKnpyLApAQCAtMTU4NiwxMiArMTY0MSwxMCBAQAogdm9pZCB1Ymlmc19scHRfZnJlZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IHdyX29ubHkpOwogCiAvKiBscHJvcHMuYyAqLwotdm9pZCB1Ymlmc19nZXRfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKnViaWZzX2NoYW5nZV9scChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKIAkJCQkJICAgY29uc3Qgc3RydWN0IHViaWZzX2xwcm9wcyAqbHAsCiAJCQkJCSAgIGludCBmcmVlLCBpbnQgZGlydHksIGludCBmbGFncywKIAkJCQkJICAgaW50IGlkeF9nY19jbnQpOwotdm9pZCB1Ymlmc19yZWxlYXNlX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiB2b2lkIHViaWZzX2dldF9scF9zdGF0cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2xwX3N0YXRzICpzdGF0cyk7CiB2b2lkIHViaWZzX2FkZF90b19jYXQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwcm9wcywKIAkJICAgICAgaW50IGNhdCk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy94YXR0ci5jIGIvZnMvdWJpZnMveGF0dHIuYwppbmRleCA2NDliZWM3Li5jZmQzMWUyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy94YXR0ci5jCisrKyBiL2ZzL3ViaWZzL3hhdHRyLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCQlpbnQgdHlwZTsKIAogCQl4ZW50ID0gdWJpZnNfdG5jX25leHRfZW50KGMsICZrZXksICZubSk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIoeGVudCkpKSB7CisJCWlmIChJU19FUlIoeGVudCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoeGVudCk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuYwppbmRleCBkMzIzMTk0Li4wODI0MDljIDEwMDY0NAotLS0gYS9mcy91ZGYvbmFtZWkuYworKysgYi9mcy91ZGYvbmFtZWkuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqdWRmX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCSAgICBzdHJ1Y3QgcXN0ciAqY2hpbGQsCiAJCQkJCSAgICBzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAqZmliaCwKIAkJCQkJICAgIHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpCiB7CkBAIC0xNTksOCArMTU5LDggQEAKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICpkaW5mbyA9IFVERl9JKGRpcik7Ci0JaW50IGlzZG90ZG90ID0gZGVudHJ5LT5kX25hbWUubGVuID09IDIgJiYKLQkJZGVudHJ5LT5kX25hbWUubmFtZVswXSA9PSAnLicgJiYgZGVudHJ5LT5kX25hbWUubmFtZVsxXSA9PSAnLic7CisJaW50IGlzZG90ZG90ID0gY2hpbGQtPmxlbiA9PSAyICYmCisJCWNoaWxkLT5uYW1lWzBdID09ICcuJyAmJiBjaGlsZC0+bmFtZVsxXSA9PSAnLic7CiAKIAlzaXplID0gdWRmX2V4dDBfb2Zmc2V0KGRpcikgKyBkaXItPmlfc2l6ZTsKIAlmX3BvcyA9IHVkZl9leHQwX29mZnNldChkaXIpOwpAQCAtMjM4LDggKzIzOCw3IEBACiAJCQljb250aW51ZTsKIAogCQlmbGVuID0gdWRmX2dldF9maWxlbmFtZShkaXItPmlfc2IsIG5hbWVwdHIsIGZuYW1lLCBsZmkpOwotCQlpZiAoZmxlbiAmJiB1ZGZfbWF0Y2goZmxlbiwgZm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5uYW1lKSkKKwkJaWYgKGZsZW4gJiYgdWRmX21hdGNoKGZsZW4sIGZuYW1lLCBjaGlsZC0+bGVuLCBjaGlsZC0+bmFtZSkpCiAJCQlnb3RvIG91dF9vazsKIAl9CiAKQEAgLTI4Myw3ICsyODIsNyBAQAogCX0gZWxzZQogI2VuZGlmIC8qIFVERl9SRUNPVkVSWSAqLwogCi0JaWYgKHVkZl9maW5kX2VudHJ5KGRpciwgZGVudHJ5LCAmZmliaCwgJmNmaSkpIHsKKwlpZiAodWRmX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZmaWJoLCAmY2ZpKSkgewogCQlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCiAJCQlicmVsc2UoZmliaC5lYmgpOwogCQlicmVsc2UoZmliaC5zYmgpOwpAQCAtNzgzLDcgKzc4Miw3IEBACiAKIAlyZXR2YWwgPSAtRU5PRU5UOwogCWxvY2tfa2VybmVsKCk7Ci0JZmkgPSB1ZGZfZmluZF9lbnRyeShkaXIsIGRlbnRyeSwgJmZpYmgsICZjZmkpOworCWZpID0gdWRmX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZmaWJoLCAmY2ZpKTsKIAlpZiAoIWZpKQogCQlnb3RvIG91dDsKIApAQCAtODI5LDcgKzgyOCw3IEBACiAKIAlyZXR2YWwgPSAtRU5PRU5UOwogCWxvY2tfa2VybmVsKCk7Ci0JZmkgPSB1ZGZfZmluZF9lbnRyeShkaXIsIGRlbnRyeSwgJmZpYmgsICZjZmkpOworCWZpID0gdWRmX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZmaWJoLCAmY2ZpKTsKIAlpZiAoIWZpKQogCQlnb3RvIG91dDsKIApAQCAtMTExMyw3ICsxMTEyLDcgQEAKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKm9sZF9paW5mbyA9IFVERl9JKG9sZF9pbm9kZSk7CiAKIAlsb2NrX2tlcm5lbCgpOwotCW9maSA9IHVkZl9maW5kX2VudHJ5KG9sZF9kaXIsIG9sZF9kZW50cnksICZvZmliaCwgJm9jZmkpOworCW9maSA9IHVkZl9maW5kX2VudHJ5KG9sZF9kaXIsICZvbGRfZGVudHJ5LT5kX25hbWUsICZvZmliaCwgJm9jZmkpOwogCWlmIChvZmkpIHsKIAkJaWYgKG9maWJoLnNiaCAhPSBvZmliaC5lYmgpCiAJCQlicmVsc2Uob2ZpYmguZWJoKTsKQEAgLTExMjQsNyArMTEyMyw3IEBACiAJICAgICE9IG9sZF9pbm9kZS0+aV9pbm8pCiAJCWdvdG8gZW5kX3JlbmFtZTsKIAotCW5maSA9IHVkZl9maW5kX2VudHJ5KG5ld19kaXIsIG5ld19kZW50cnksICZuZmliaCwgJm5jZmkpOworCW5maSA9IHVkZl9maW5kX2VudHJ5KG5ld19kaXIsICZuZXdfZGVudHJ5LT5kX25hbWUsICZuZmliaCwgJm5jZmkpOwogCWlmIChuZmkpIHsKIAkJaWYgKCFuZXdfaW5vZGUpIHsKIAkJCWlmIChuZmliaC5zYmggIT0gbmZpYmguZWJoKQpAQCAtMTE5Miw3ICsxMTkxLDcgQEAKIAl1ZGZfd3JpdGVfZmkobmV3X2RpciwgJm5jZmksIG5maSwgJm5maWJoLCBOVUxMLCBOVUxMKTsKIAogCS8qIFRoZSBvbGQgZmlkIG1heSBoYXZlIG1vdmVkIC0gZmluZCBpdCBhZ2FpbiAqLwotCW9maSA9IHVkZl9maW5kX2VudHJ5KG9sZF9kaXIsIG9sZF9kZW50cnksICZvZmliaCwgJm9jZmkpOworCW9maSA9IHVkZl9maW5kX2VudHJ5KG9sZF9kaXIsICZvbGRfZGVudHJ5LT5kX25hbWUsICZvZmliaCwgJm9jZmkpOwogCXVkZl9kZWxldGVfZW50cnkob2xkX2Rpciwgb2ZpLCAmb2ZpYmgsICZvY2ZpKTsKIAogCWlmIChuZXdfaW5vZGUpIHsKQEAgLTEyNDMsMTUgKzEyNDIsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnVkZl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogewotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKLQlzdHJ1Y3QgZGVudHJ5IGRvdGRvdDsKKwlzdHJ1Y3QgcXN0ciBkb3Rkb3QgPSB7Lm5hbWUgPSAiLi4iLCAubGVuID0gMn07CiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwogCXN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoIGZpYmg7CiAKLQlkb3Rkb3QuZF9uYW1lLm5hbWUgPSAiLi4iOwotCWRvdGRvdC5kX25hbWUubGVuID0gMjsKLQogCWxvY2tfa2VybmVsKCk7CiAJaWYgKCF1ZGZfZmluZF9lbnRyeShjaGlsZC0+ZF9pbm9kZSwgJmRvdGRvdCwgJmZpYmgsICZjZmkpKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMjY2LDEzICsxMjYxLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCXVubG9ja19rZXJuZWwoKTsKIAotCXBhcmVudCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFwYXJlbnQpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXBhcmVudCA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JcmV0dXJuIHBhcmVudDsKKwlyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOwogb3V0X3VubG9jazoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIEVSUl9QVFIoLUVBQ0NFUyk7CkBAIC0xMjgzLDcgKzEyNzIsNiBAQAogCQkJCQl1MTYgcGFydHJlZiwgX191MzIgZ2VuZXJhdGlvbikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBkZW50cnkgKnJlc3VsdDsKIAlrZXJuZWxfbGJfYWRkciBsb2M7CiAKIAlpZiAoYmxvY2sgPT0gMCkKQEAgLTEzMDAsMTIgKzEyODgsNyBAQAogCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CiAJfQotCXJlc3VsdCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCmRpZmYgLS1naXQgYS9mcy91ZnMvZGlyLmMgYi9mcy91ZnMvZGlyLmMKaW5kZXggZGYwYmVmMS4uZGJiYmM0NiAxMDA2NDQKLS0tIGEvZnMvdWZzL2Rpci5jCisrKyBiL2ZzL3Vmcy9kaXIuYwpAQCAtNjY3LDQgKzY2Nyw1IEBACiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IHVmc19yZWFkZGlyLAogCS5mc3luYwkJPSBmaWxlX2ZzeW5jLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCmluZGV4IDI0ZmQ1OTguLjdmN2FiZWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCkBAIC0xNDgsNyArMTQ4LDYgQEAKIHsKIAlzdHJ1Y3QgeGZzX2ZpZDY0CSpmaWQ2NCA9IChzdHJ1Y3QgeGZzX2ZpZDY0ICopZmlkOwogCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gTlVMTDsKLQlzdHJ1Y3QgZGVudHJ5CQkqcmVzdWx0OwogCiAJaWYgKGZoX2xlbiA8IHhmc19maWxlaWRfbGVuZ3RoKGZpbGVpZF90eXBlKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNjQsMTYgKzE2Myw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICghaW5vZGUpCi0JCXJldHVybiBOVUxMOwotCWlmIChJU19FUlIoaW5vZGUpKQotCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwotCXJlc3VsdCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiB9CiAKIFNUQVRJQyBzdHJ1Y3QgZGVudHJ5ICoKQEAgLTE4Miw3ICsxNzIsNiBAQAogewogCXN0cnVjdCB4ZnNfZmlkNjQJKmZpZDY0ID0gKHN0cnVjdCB4ZnNfZmlkNjQgKilmaWQ7CiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBOVUxMOwotCXN0cnVjdCBkZW50cnkJCSpyZXN1bHQ7CiAKIAlzd2l0Y2ggKGZpbGVpZF90eXBlKSB7CiAJY2FzZSBGSUxFSURfSU5PMzJfR0VOX1BBUkVOVDoKQEAgLTE5NSwxNiArMTg0LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKElTX0VSUihpbm9kZSkpCi0JCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7Ci0JcmVzdWx0ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKLQlpZiAoIXJlc3VsdCkgewotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIH0KIAogU1RBVElDIHN0cnVjdCBkZW50cnkgKgpAQCAtMjEzLDE4ICsxOTMsMTIgQEAKIHsKIAlpbnQJCQllcnJvcjsKIAlzdHJ1Y3QgeGZzX2lub2RlCSpjaXA7Ci0Jc3RydWN0IGRlbnRyeQkJKnBhcmVudDsKIAogCWVycm9yID0geGZzX2xvb2t1cChYRlNfSShjaGlsZC0+ZF9pbm9kZSksICZ4ZnNfbmFtZV9kb3Rkb3QsICZjaXAsIE5VTEwpOwogCWlmICh1bmxpa2VseShlcnJvcikpCiAJCXJldHVybiBFUlJfUFRSKC1lcnJvcik7CiAKLQlwYXJlbnQgPSBkX2FsbG9jX2Fub24oVkZTX0koY2lwKSk7Ci0JaWYgKHVubGlrZWx5KCFwYXJlbnQpKSB7Ci0JCWlwdXQoVkZTX0koY2lwKSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlyZXR1cm4gcGFyZW50OworCXJldHVybiBkX29idGFpbl9hbGlhcyhWRlNfSShjaXApKTsKIH0KIAogY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIHhmc19leHBvcnRfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwppbmRleCA1MzExYzFhLi4zZmVlNzkwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCkBAIC0yMDQsMTUgKzIwNCw2IEBACiAJcmV0dXJuIC14ZnNfZnN5bmMoWEZTX0koZGVudHJ5LT5kX2lub2RlKSk7CiB9CiAKLS8qCi0gKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGp1c3QgdXNlIHRoZSBjbGVhbiBhbmQgc2ltcGxlIHJlYWRkaXIgaW1wbGVtZW50YXRpb24KLSAqIGJlbG93LCBiZWNhdXNlIG5mcyBtaWdodCBjYWxsIGJhY2sgaW50byAtPmxvb2t1cCBmcm9tIHRoZSBmaWxsZGlyIGNhbGxiYWNrCi0gKiBhbmQgdGhhdCB3aWxsIGRlYWRsb2NrIHRoZSBsb3ctbGV2ZWwgYnRyZWUgY29kZS4KLSAqCi0gKiBIb3BlZnVsbHkgd2UnbGwgZmluZCBhIGJldHRlciB3b3JrYXJvdW5kIHRoYXQgYWxsb3dzIHRvIHVzZSB0aGUgb3B0aW1hbAotICogdmVyc2lvbiBhdCBsZWFzdCBmb3IgbG9jYWwgcmVhZGRpcnMgZm9yIDIuNi4yNS4KLSAqLwotI2lmIDAKIFNUQVRJQyBpbnQKIHhmc19maWxlX3JlYWRkaXIoCiAJc3RydWN0IGZpbGUJKmZpbHAsCkBAIC0yNDQsMTI1ICsyMzUsNiBAQAogCQlyZXR1cm4gLWVycm9yOwogCXJldHVybiAwOwogfQotI2Vsc2UKLQotc3RydWN0IGhhY2tfZGlyZW50IHsKLQl1NjQJCWlubzsKLQlsb2ZmX3QJCW9mZnNldDsKLQlpbnQJCW5hbWxlbjsKLQl1bnNpZ25lZCBpbnQJZF90eXBlOwotCWNoYXIJCW5hbWVbXTsKLX07Ci0KLXN0cnVjdCBoYWNrX2NhbGxiYWNrIHsKLQljaGFyCQkqZGlyZW50OwotCXNpemVfdAkJbGVuOwotCXNpemVfdAkJdXNlZDsKLX07Ci0KLVNUQVRJQyBpbnQKLXhmc19oYWNrX2ZpbGxkaXIoCi0Jdm9pZAkJKl9fYnVmLAotCWNvbnN0IGNoYXIJKm5hbWUsCi0JaW50CQluYW1sZW4sCi0JbG9mZl90CQlvZmZzZXQsCi0JdTY0CQlpbm8sCi0JdW5zaWduZWQgaW50CWRfdHlwZSkKLXsKLQlzdHJ1Y3QgaGFja19jYWxsYmFjayAqYnVmID0gX19idWY7Ci0Jc3RydWN0IGhhY2tfZGlyZW50ICpkZSA9IChzdHJ1Y3QgaGFja19kaXJlbnQgKikoYnVmLT5kaXJlbnQgKyBidWYtPnVzZWQpOwotCXVuc2lnbmVkIGludCByZWNsZW47Ci0KLQlyZWNsZW4gPSBBTElHTihzaXplb2Yoc3RydWN0IGhhY2tfZGlyZW50KSArIG5hbWxlbiwgc2l6ZW9mKHU2NCkpOwotCWlmIChidWYtPnVzZWQgKyByZWNsZW4gPiBidWYtPmxlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZS0+bmFtbGVuID0gbmFtbGVuOwotCWRlLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JZGUtPmlubyA9IGlubzsKLQlkZS0+ZF90eXBlID0gZF90eXBlOwotCW1lbWNweShkZS0+bmFtZSwgbmFtZSwgbmFtbGVuKTsKLQlidWYtPnVzZWQgKz0gcmVjbGVuOwotCXJldHVybiAwOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfZmlsZV9yZWFkZGlyKAotCXN0cnVjdCBmaWxlCSpmaWxwLAotCXZvaWQJCSpkaXJlbnQsCi0JZmlsbGRpcl90CWZpbGxkaXIpCi17Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JeGZzX2lub2RlX3QJKmlwID0gWEZTX0koaW5vZGUpOwotCXN0cnVjdCBoYWNrX2NhbGxiYWNrIGJ1ZjsKLQlzdHJ1Y3QgaGFja19kaXJlbnQgKmRlOwotCWludAkJZXJyb3I7Ci0JbG9mZl90CQlzaXplOwotCWludAkJZW9mID0gMDsKLQl4ZnNfb2ZmX3QgICAgICAgc3RhcnRfb2Zmc2V0LCBjdXJyX29mZnNldCwgb2Zmc2V0OwotCi0JLyoKLQkgKiBUcnkgZmFpcmx5IGhhcmQgdG8gZ2V0IG1lbW9yeQotCSAqLwotCWJ1Zi5sZW4gPSBQQUdFX0NBQ0hFX1NJWkU7Ci0JZG8gewotCQlidWYuZGlyZW50ID0ga21hbGxvYyhidWYubGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGJ1Zi5kaXJlbnQpCi0JCQlicmVhazsKLQkJYnVmLmxlbiA+Pj0gMTsKLQl9IHdoaWxlIChidWYubGVuID49IDEwMjQpOwotCi0JaWYgKCFidWYuZGlyZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWN1cnJfb2Zmc2V0ID0gZmlscC0+Zl9wb3M7Ci0JaWYgKGN1cnJfb2Zmc2V0ID09IDB4N2ZmZmZmZmYpCi0JCW9mZnNldCA9IDB4ZmZmZmZmZmY7Ci0JZWxzZQotCQlvZmZzZXQgPSBmaWxwLT5mX3BvczsKLQotCXdoaWxlICghZW9mKSB7Ci0JCXVuc2lnbmVkIGludCByZWNsZW47Ci0KLQkJc3RhcnRfb2Zmc2V0ID0gb2Zmc2V0OwotCi0JCWJ1Zi51c2VkID0gMDsKLQkJZXJyb3IgPSAteGZzX3JlYWRkaXIoaXAsICZidWYsIGJ1Zi5sZW4sICZvZmZzZXQsCi0JCQkJICAgICB4ZnNfaGFja19maWxsZGlyKTsKLQkJaWYgKGVycm9yIHx8IG9mZnNldCA9PSBzdGFydF9vZmZzZXQpIHsKLQkJCXNpemUgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzaXplID0gYnVmLnVzZWQ7Ci0JCWRlID0gKHN0cnVjdCBoYWNrX2RpcmVudCAqKWJ1Zi5kaXJlbnQ7Ci0JCXdoaWxlIChzaXplID4gMCkgewotCQkJY3Vycl9vZmZzZXQgPSBkZS0+b2Zmc2V0IC8qICYgMHg3ZmZmZmZmZiAqLzsKLQkJCWlmIChmaWxsZGlyKGRpcmVudCwgZGUtPm5hbWUsIGRlLT5uYW1sZW4sCi0JCQkJCWN1cnJfb2Zmc2V0ICYgMHg3ZmZmZmZmZiwKLQkJCQkJZGUtPmlubywgZGUtPmRfdHlwZSkpIHsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0KLQkJCXJlY2xlbiA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgaGFja19kaXJlbnQpICsgZGUtPm5hbWxlbiwKLQkJCQkgICAgICAgc2l6ZW9mKHU2NCkpOwotCQkJc2l6ZSAtPSByZWNsZW47Ci0JCQlkZSA9IChzdHJ1Y3QgaGFja19kaXJlbnQgKikoKGNoYXIgKilkZSArIHJlY2xlbik7Ci0JCX0KLQl9Ci0KLSBkb25lOgotCWlmICghZXJyb3IpIHsKLQkJaWYgKHNpemUgPT0gMCkKLQkJCWZpbHAtPmZfcG9zID0gb2Zmc2V0ICYgMHg3ZmZmZmZmZjsKLQkJZWxzZSBpZiAoZGUpCi0JCQlmaWxwLT5mX3BvcyA9IGN1cnJfb2Zmc2V0OwotCX0KLQotCWtmcmVlKGJ1Zi5kaXJlbnQpOwotCXJldHVybiBlcnJvcjsKLX0KLSNlbmRpZgogCiBTVEFUSUMgaW50CiB4ZnNfZmlsZV9tbWFwKApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKaW5kZXggNDg3OTliYS4uZDM0MzhjNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCkBAIC0zMTEsMTEgKzMxMSwxMCBAQAogCQlyZXR1cm4gbmV3X2ZkOwogCX0KIAotCWRlbnRyeSA9IGRfYWxsb2NfYW5vbihpbm9kZSk7Ci0JaWYgKGRlbnRyeSA9PSBOVUxMKSB7Ci0JCWlwdXQoaW5vZGUpOworCWRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJcHV0X3VudXNlZF9mZChuZXdfZmQpOwotCQlyZXR1cm4gLVhGU19FUlJPUihFTk9NRU0pOworCQlyZXR1cm4gUFRSX0VSUihkZW50cnkpOwogCX0KIAogCS8qIEVuc3VyZSB1bW91bnQgcmV0dXJucyBFQlVTWSBvbiB1bW91bnRzIHdoaWxlIHRoaXMgZmlsZSBpcyBvcGVuLiAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggZTM5MDEzNi4uMzdlYmUzNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC01ODksNyArNTg5LDcgQEAKIHsKIAlpbnQJCQllcnJvciA9IDA7CiAKLQkqYmRldnAgPSBvcGVuX2JkZXZfZXhjbChuYW1lLCAwLCBtcCk7CisJKmJkZXZwID0gb3Blbl9iZGV2X2V4Y2x1c2l2ZShuYW1lLCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFLCBtcCk7CiAJaWYgKElTX0VSUigqYmRldnApKSB7CiAJCWVycm9yID0gUFRSX0VSUigqYmRldnApOwogCQlwcmludGsoIlhGUzogSW52YWxpZCBkZXZpY2UgWyVzXSwgZXJyb3I9JWRcbiIsIG5hbWUsIGVycm9yKTsKQEAgLTYwMyw3ICs2MDMsNyBAQAogCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYpCiB7CiAJaWYgKGJkZXYpCi0JCWNsb3NlX2JkZXZfZXhjbChiZGV2KTsKKwkJY2xvc2VfYmRldl9leGNsdXNpdmUoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNjb25maWcuaCBiL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oCmluZGV4IDRlYjc1YTguLjI5ZmVlZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oCkBAIC02Myw3ICs2Myw3IEBACiAKIC8qIEN1cnJlbnQgQUNQSUNBIHN1YnN5c3RlbSB2ZXJzaW9uIGluIFlZWVlNTUREIGZvcm1hdCAqLwogCi0jZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAJCTB4MjAwODA2MDkKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDgwOTI2CiAKIC8qCiAgKiBPUyBuYW1lLCB1c2VkIGZvciB0aGUgX09TIG9iamVjdC4gIFRoZSBfT1Mgb2JqZWN0IGlzIGVzc2VudGlhbGx5IG9ic29sZXRlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjZGVidWcuaCBiL2luY2x1ZGUvYWNwaS9hY2RlYnVnLmgKaW5kZXggYzVhMWI1MC4uNjJjNTlkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZGVidWcuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNkZWJ1Zy5oCkBAIC0xMjMsNiArMTIzLDEwIEBACiAKIHZvaWQgYWNwaV9kYl9nZW5lcmF0ZV9ncGUoY2hhciAqZ3BlX2FyZywgY2hhciAqYmxvY2tfYXJnKTsKIAordm9pZCBhY3BpX2RiX2NoZWNrX3ByZWRlZmluZWRfbmFtZXModm9pZCk7CisKK3ZvaWQgYWNwaV9kYl9iYXRjaF9leGVjdXRlKHZvaWQpOworCiAvKgogICogZGJkaXNwbHkgLSBkZWJ1ZyBkaXNwbGF5IGNvbW1hbmRzCiAgKi8KQEAgLTE1MCw2ICsxNTQsMTAgQEAKIGFjcGlfZGJfZGlzcGxheV9hcmd1bWVudF9vYmplY3QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCiAJCQkJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSk7CiAKK3ZvaWQgYWNwaV9kYl9jaGVja19wcmVkZWZpbmVkX25hbWVzKHZvaWQpOworCit2b2lkIGFjcGlfZGJfYmF0Y2hfZXhlY3V0ZSh2b2lkKTsKKwogLyoKICAqIGRiZXhlYyAtIGRlYnVnZ2VyIGNvbnRyb2wgbWV0aG9kIGV4ZWN1dGlvbgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNkaXNhc20uaCBiL2luY2x1ZGUvYWNwaS9hY2Rpc2FzbS5oCmluZGV4IGY1M2ZhY2EuLjBjMWVkMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2Rpc2FzbS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2Rpc2FzbS5oCkBAIC0xODYsNiArMTg2LDggQEAKIGV4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQ2W107CiBleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0N1tdOwogZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdDhbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQ5W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0MTBbXTsKIGV4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHRfaGRyW107CiBleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tY2ZnW107CiBleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tY2ZnMFtdOwpAQCAtMTk3LDggKzE5OSwxMCBAQAogZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fc3BjcltdOwogZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fc3BtaVtdOwogZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fc3JhdFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fc3JhdF9oZHJbXTsKIGV4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NyYXQwW107CiBleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19zcmF0MVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fc3JhdDJbXTsKIGV4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3RjcGFbXTsKIGV4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3dkcnRbXTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmggYi9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaAppbmRleCAyMWE3M2ExLi42MjkxOTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAgKiBkc210aGRhdCAtIG1ldGhvZCBkYXRhIChsb2NhbHMvYXJncykKICAqLwogYWNwaV9zdGF0dXMKLWFjcGlfZHNfc3RvcmVfb2JqZWN0X3RvX2xvY2FsKHUxNiBvcGNvZGUsCithY3BpX2RzX3N0b3JlX29iamVjdF90b19sb2NhbCh1OCB0eXBlLAogCQkJICAgICAgdTMyIGluZGV4LAogCQkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqc3JjX2Rlc2MsCiAJCQkgICAgICBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogdTggYWNwaV9kc19pc19tZXRob2RfdmFsdWUodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfdmFsdWUodTE2IG9wY29kZSwKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X3ZhbHVlKHU4IHR5cGUsCiAJCQkgICAgICB1MzIgaW5kZXgsCiAJCQkgICAgICBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlLAogCQkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmRlc3RfZGVzYyk7CkBAIC0xODQsNyArMTg0LDcgQEAKIAkJCSAgICAgIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZSh1MTYgb3Bjb2RlLAorYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfbm9kZSh1OCB0eXBlLAogCQkJICAgICB1MzIgaW5kZXgsCiAJCQkgICAgIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCiAJCQkgICAgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoqbm9kZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oIGIvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaAppbmRleCBlNWE4OTBmLi44NGY1Y2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKQEAgLTc2LDI1ICs3NiwyMSBAQAogI2RlZmluZSBBRV9TVEFDS19PVkVSRkxPVyAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwQyB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKICNkZWZpbmUgQUVfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEQgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCiAjZGVmaW5lIEFFX05PVF9JTVBMRU1FTlRFRCAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBFIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQotI2RlZmluZSBBRV9WRVJTSU9OX01JU01BVENIICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwRiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKLSNkZWZpbmUgQUVfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTAgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCi0jZGVmaW5lIEFFX1NIQVJFICAgICAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDExIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQotI2RlZmluZSBBRV9MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxMiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKLSNkZWZpbmUgQUVfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTMgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCi0jZGVmaW5lIEFFX1VOS05PV05fU1RBVFVTICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE0IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQotI2RlZmluZSBBRV9BQ1FVSVJFX0RFQURMT0NLICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxNSB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKLSNkZWZpbmUgQUVfUkVMRUFTRV9ERUFETE9DSyAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTYgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCi0jZGVmaW5lIEFFX05PVF9BQ1FVSVJFRCAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE3IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQotI2RlZmluZSBBRV9BTFJFQURZX0FDUVVJUkVEICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxOCB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKLSNkZWZpbmUgQUVfTk9fSEFSRFdBUkVfUkVTUE9OU0UgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTkgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCi0jZGVmaW5lIEFFX05PX0dMT0JBTF9MT0NLICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFBIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQotI2RlZmluZSBBRV9MT0dJQ0FMX0FERFJFU1MgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxQiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKLSNkZWZpbmUgQUVfQUJPUlRfTUVUSE9EICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUMgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCi0jZGVmaW5lIEFFX1NBTUVfSEFORExFUiAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFEIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQotI2RlZmluZSBBRV9XQUtFX09OTFlfR1BFICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxRSB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKLSNkZWZpbmUgQUVfT1dORVJfSURfTElNSVQgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUYgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBGIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxMCB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTEgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX0FDUVVJUkVfREVBRExPQ0sgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDEyIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9SRUxFQVNFX0RFQURMT0NLICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxMyB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfTk9UX0FDUVVJUkVEICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTQgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX0FMUkVBRFlfQUNRVUlSRUQgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE1IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9OT19IQVJEV0FSRV9SRVNQT05TRSAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxNiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfTk9fR0xPQkFMX0xPQ0sgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTcgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX0FCT1JUX01FVEhPRCAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE4IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9TQU1FX0hBTkRMRVIgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxOSB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfV0FLRV9PTkxZX0dQRSAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUEgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX09XTkVSX0lEX0xJTUlUICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFCIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQogCi0jZGVmaW5lIEFFX0NPREVfRU5WX01BWCAgICAgICAgICAgICAgICAgMHgwMDFGCisjZGVmaW5lIEFFX0NPREVfRU5WX01BWCAgICAgICAgICAgICAgICAgMHgwMDFCCiAKIC8qCiAgKiBQcm9ncmFtbWVyIGV4Y2VwdGlvbnMKQEAgLTEwMywxNCArOTksMTIgQEAKICNkZWZpbmUgQUVfQkFEX0NIQVJBQ1RFUiAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDIgfCBBRV9DT0RFX1BST0dSQU1NRVIpCiAjZGVmaW5lIEFFX0JBRF9QQVRITkFNRSAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAzIHwgQUVfQ09ERV9QUk9HUkFNTUVSKQogI2RlZmluZSBBRV9CQURfREFUQSAgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNCB8IEFFX0NPREVfUFJPR1JBTU1FUikKLSNkZWZpbmUgQUVfQkFEX0FERFJFU1MgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDUgfCBBRV9DT0RFX1BST0dSQU1NRVIpCi0jZGVmaW5lIEFFX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA2IHwgQUVfQ09ERV9QUk9HUkFNTUVSKQotI2RlZmluZSBBRV9CQURfSEVYX0NPTlNUQU5UICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNyB8IEFFX0NPREVfUFJPR1JBTU1FUikKLSNkZWZpbmUgQUVfQkFEX09DVEFMX0NPTlNUQU5UICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDggfCBBRV9DT0RFX1BST0dSQU1NRVIpCi0jZGVmaW5lIEFFX0JBRF9ERUNJTUFMX0NPTlNUQU5UICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA5IHwgQUVfQ09ERV9QUk9HUkFNTUVSKQotI2RlZmluZSBBRV9NSVNTSU5HX0FSR1VNRU5UUwkJKGFjcGlfc3RhdHVzKSAoMHgwMDBBIHwgQUVfQ09ERV9QUk9HUkFNTUVSKQorI2RlZmluZSBBRV9CQURfSEVYX0NPTlNUQU5UICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNSB8IEFFX0NPREVfUFJPR1JBTU1FUikKKyNkZWZpbmUgQUVfQkFEX09DVEFMX0NPTlNUQU5UICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDYgfCBBRV9DT0RFX1BST0dSQU1NRVIpCisjZGVmaW5lIEFFX0JBRF9ERUNJTUFMX0NPTlNUQU5UICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA3IHwgQUVfQ09ERV9QUk9HUkFNTUVSKQorI2RlZmluZSBBRV9NSVNTSU5HX0FSR1VNRU5UUyAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwOCB8IEFFX0NPREVfUFJPR1JBTU1FUikKIAotI2RlZmluZSBBRV9DT0RFX1BHTV9NQVggCQkweDAwMEEKKyNkZWZpbmUgQUVfQ09ERV9QR01fTUFYICAgICAgICAgICAgICAgICAweDAwMDgKIAogLyoKICAqIEFjcGkgdGFibGUgZXhjZXB0aW9ucwpAQCAtMTE5LDUxICsxMTMsNDggQEAKICNkZWZpbmUgQUVfQkFEX0hFQURFUiAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDIgfCBBRV9DT0RFX0FDUElfVEFCTEVTKQogI2RlZmluZSBBRV9CQURfQ0hFQ0tTVU0gICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwMyB8IEFFX0NPREVfQUNQSV9UQUJMRVMpCiAjZGVmaW5lIEFFX0JBRF9WQUxVRSAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA0IHwgQUVfQ09ERV9BQ1BJX1RBQkxFUykKLSNkZWZpbmUgQUVfVEFCTEVfTk9UX1NVUFBPUlRFRCAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDUgfCBBRV9DT0RFX0FDUElfVEFCTEVTKQotI2RlZmluZSBBRV9JTlZBTElEX1RBQkxFX0xFTkdUSCAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNiB8IEFFX0NPREVfQUNQSV9UQUJMRVMpCisjZGVmaW5lIEFFX0lOVkFMSURfVEFCTEVfTEVOR1RIICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA1IHwgQUVfQ09ERV9BQ1BJX1RBQkxFUykKIAotI2RlZmluZSBBRV9DT0RFX1RCTF9NQVggICAgICAgICAgICAgICAgIDB4MDAwNgorI2RlZmluZSBBRV9DT0RFX1RCTF9NQVggICAgICAgICAgICAgICAgIDB4MDAwNQogCiAvKgogICogQU1MIGV4Y2VwdGlvbnMuICBUaGVzZSBhcmUgY2F1c2VkIGJ5IHByb2JsZW1zIHdpdGgKICAqIHRoZSBhY3R1YWwgQU1MIGJ5dGUgc3RyZWFtCiAgKi8KLSNkZWZpbmUgQUVfQU1MX0VSUk9SICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDEgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1BBUlNFICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDIgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0JBRF9PUENPREUgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDMgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX05PX09QRVJBTkQgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDQgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX09QRVJBTkRfVFlQRSAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDUgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX09QRVJBTkRfVkFMVUUgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDYgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1VOSU5JVElBTElaRURfTE9DQUwgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDcgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1VOSU5JVElBTElaRURfQVJHICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDggfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1VOSU5JVElBTElaRURfRUxFTUVOVCAgICAoYWNwaV9zdGF0dXMpICgweDAwMDkgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX05VTUVSSUNfT1ZFUkZMT1cgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEEgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1JFR0lPTl9MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEIgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0JVRkZFUl9MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEMgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1BBQ0tBR0VfTElNSVQgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEQgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0RJVklERV9CWV9aRVJPICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEUgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0JBRF9OQU1FICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEYgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX05BTUVfTk9UX0ZPVU5EICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTAgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0lOVEVSTkFMICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTEgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0lOVkFMSURfU1BBQ0VfSUQgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTIgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1NUUklOR19MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTMgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX05PX1JFVFVSTl9WQUxVRSAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTQgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX01FVEhPRF9MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTUgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX05PVF9PV05FUiAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTYgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX01VVEVYX09SREVSICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTcgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX01VVEVYX05PVF9BQ1FVSVJFRCAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTggfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0lOVkFMSURfUkVTT1VSQ0VfVFlQRSAgICAoYWNwaV9zdGF0dXMpICgweDAwMTkgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0lOVkFMSURfSU5ERVggICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUEgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX1JFR0lTVEVSX0xJTUlUICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUIgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX05PX1dISUxFICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUMgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUQgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX05PX1JFU09VUkNFX0VORF9UQUcgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUUgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0JBRF9SRVNPVVJDRV9WQUxVRSAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUYgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0NJUkNVTEFSX1JFRkVSRU5DRSAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMjAgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0JBRF9SRVNPVVJDRV9MRU5HVEggICAgICAoYWNwaV9zdGF0dXMpICgweDAwMjEgfCBBRV9DT0RFX0FNTCkKLSNkZWZpbmUgQUVfQU1MX0lMTEVHQUxfQUREUkVTUyAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMjIgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0JBRF9PUENPREUgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDEgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX05PX09QRVJBTkQgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDIgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX09QRVJBTkRfVFlQRSAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDMgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX09QRVJBTkRfVkFMVUUgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDQgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX1VOSU5JVElBTElaRURfTE9DQUwgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDUgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX1VOSU5JVElBTElaRURfQVJHICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDYgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX1VOSU5JVElBTElaRURfRUxFTUVOVCAgICAoYWNwaV9zdGF0dXMpICgweDAwMDcgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX05VTUVSSUNfT1ZFUkZMT1cgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDggfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX1JFR0lPTl9MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDkgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0JVRkZFUl9MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEEgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX1BBQ0tBR0VfTElNSVQgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEIgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0RJVklERV9CWV9aRVJPICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEMgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0JBRF9OQU1FICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEQgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX05BTUVfTk9UX0ZPVU5EICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEUgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0lOVEVSTkFMICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEYgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0lOVkFMSURfU1BBQ0VfSUQgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTAgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX1NUUklOR19MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTEgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX05PX1JFVFVSTl9WQUxVRSAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTIgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX01FVEhPRF9MSU1JVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTMgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX05PVF9PV05FUiAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTQgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX01VVEVYX09SREVSICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTUgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX01VVEVYX05PVF9BQ1FVSVJFRCAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTYgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0lOVkFMSURfUkVTT1VSQ0VfVFlQRSAgICAoYWNwaV9zdGF0dXMpICgweDAwMTcgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0lOVkFMSURfSU5ERVggICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTggfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX1JFR0lTVEVSX0xJTUlUICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTkgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX05PX1dISUxFICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUEgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUIgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX05PX1JFU09VUkNFX0VORF9UQUcgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUMgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0JBRF9SRVNPVVJDRV9WQUxVRSAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUQgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0NJUkNVTEFSX1JFRkVSRU5DRSAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUUgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0JBRF9SRVNPVVJDRV9MRU5HVEggICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUYgfCBBRV9DT0RFX0FNTCkKKyNkZWZpbmUgQUVfQU1MX0lMTEVHQUxfQUREUkVTUyAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMjAgfCBBRV9DT0RFX0FNTCkKIAotI2RlZmluZSBBRV9DT0RFX0FNTF9NQVggICAgICAgICAgICAgICAgIDB4MDAyMgorI2RlZmluZSBBRV9DT0RFX0FNTF9NQVggICAgICAgICAgICAgICAgIDB4MDAyMAogCiAvKgogICogSW50ZXJuYWwgZXhjZXB0aW9ucyB1c2VkIGZvciBjb250cm9sCkBAIC0yMDYsMTkgKzE5NywxNSBAQAogCSJBRV9TVEFDS19PVkVSRkxPVyIsCiAJIkFFX1NUQUNLX1VOREVSRkxPVyIsCiAJIkFFX05PVF9JTVBMRU1FTlRFRCIsCi0JIkFFX1ZFUlNJT05fTUlTTUFUQ0giLAogCSJBRV9TVVBQT1JUIiwKLQkiQUVfU0hBUkUiLAogCSJBRV9MSU1JVCIsCiAJIkFFX1RJTUUiLAotCSJBRV9VTktOT1dOX1NUQVRVUyIsCiAJIkFFX0FDUVVJUkVfREVBRExPQ0siLAogCSJBRV9SRUxFQVNFX0RFQURMT0NLIiwKIAkiQUVfTk9UX0FDUVVJUkVEIiwKIAkiQUVfQUxSRUFEWV9BQ1FVSVJFRCIsCiAJIkFFX05PX0hBUkRXQVJFX1JFU1BPTlNFIiwKIAkiQUVfTk9fR0xPQkFMX0xPQ0siLAotCSJBRV9MT0dJQ0FMX0FERFJFU1MiLAogCSJBRV9BQk9SVF9NRVRIT0QiLAogCSJBRV9TQU1FX0hBTkRMRVIiLAogCSJBRV9XQUtFX09OTFlfR1BFIiwKQEAgLTIzMSw4ICsyMTgsNiBAQAogCSJBRV9CQURfQ0hBUkFDVEVSIiwKIAkiQUVfQkFEX1BBVEhOQU1FIiwKIAkiQUVfQkFEX0RBVEEiLAotCSJBRV9CQURfQUREUkVTUyIsCi0JIkFFX0FMSUdOTUVOVCIsCiAJIkFFX0JBRF9IRVhfQ09OU1RBTlQiLAogCSJBRV9CQURfT0NUQUxfQ09OU1RBTlQiLAogCSJBRV9CQURfREVDSU1BTF9DT05TVEFOVCIsCkBAIC0yNDUsMTQgKzIzMCwxMSBAQAogCSJBRV9CQURfSEVBREVSIiwKIAkiQUVfQkFEX0NIRUNLU1VNIiwKIAkiQUVfQkFEX1ZBTFVFIiwKLQkiQUVfVEFCTEVfTk9UX1NVUFBPUlRFRCIsCiAJIkFFX0lOVkFMSURfVEFCTEVfTEVOR1RIIgogfTsKIAogY2hhciBjb25zdCAqYWNwaV9nYmxfZXhjZXB0aW9uX25hbWVzX2FtbFtdID0gewogCU5VTEwsCi0JIkFFX0FNTF9FUlJPUiIsCi0JIkFFX0FNTF9QQVJTRSIsCiAJIkFFX0FNTF9CQURfT1BDT0RFIiwKIAkiQUVfQU1MX05PX09QRVJBTkQiLAogCSJBRV9BTUxfT1BFUkFORF9UWVBFIiwKQEAgLTI4NCw3ICsyNjYsNyBAQAogCSJBRV9BTUxfQkFEX1JFU09VUkNFX1ZBTFVFIiwKIAkiQUVfQU1MX0NJUkNVTEFSX1JFRkVSRU5DRSIsCiAJIkFFX0FNTF9CQURfUkVTT1VSQ0VfTEVOR1RIIiwKLQkiQUVfQU1MX0lMTEVHQUxfQUREUkVTUyIKKwkiQUVfQU1MX0lMTEVHQUxfQUREUkVTUyIsCiB9OwogCiBjaGFyIGNvbnN0ICphY3BpX2dibF9leGNlcHRpb25fbmFtZXNfY3RybFtdID0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2xvY2FsLmgKaW5kZXggYjIyMWM4NS4uZWNhYjUyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oCkBAIC0yMDgsNiArMjA4LDcgQEAKICNkZWZpbmUgQU5PQkpfTUVUSE9EX0FSRyAgICAgICAgICAgICAgICAweDA0CS8qIE5vZGUgaXMgYSBtZXRob2QgYXJndW1lbnQgKi8KICNkZWZpbmUgQU5PQkpfTUVUSE9EX0xPQ0FMICAgICAgICAgICAgICAweDA4CS8qIE5vZGUgaXMgYSBtZXRob2QgbG9jYWwgKi8KICNkZWZpbmUgQU5PQkpfU1VCVFJFRV9IQVNfSU5JICAgICAgICAgICAweDEwCS8qIFVzZWQgdG8gb3B0aW1pemUgZGV2aWNlIGluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIEFOT0JKX0VWQUxVQVRFRCAgICAgICAgICAgICAgICAgMHgyMAkvKiBTZXQgb24gZmlyc3QgZXZhbHVhdGlvbiBvZiBub2RlICovCiAKICNkZWZpbmUgQU5PQkpfSVNfRVhURVJOQUwgICAgICAgICAgICAgICAweDA4CS8qIGlfYVNMIG9ubHk6IFRoaXMgb2JqZWN0IGNyZWF0ZWQgdmlhIEV4dGVybmFsKCkgKi8KICNkZWZpbmUgQU5PQkpfTUVUSE9EX05PX1JFVFZBTCAgICAgICAgICAweDEwCS8qIGlfYVNMIG9ubHk6IE1ldGhvZCBoYXMgbm8gcmV0dXJuIHZhbHVlICovCkBAIC0zNDAsNiArMzQxLDgyIEBACiAjZGVmaW5lIEFDUElfQlRZUEVfT0JKRUNUU19BTkRfUkVGUyAgICAgMHgwMDAxRkZGRgkvKiBBUkcgb3IgTE9DQUwgKi8KICNkZWZpbmUgQUNQSV9CVFlQRV9BTExfT0JKRUNUUyAgICAgICAgICAweDAwMDBGRkZGCiAKKy8qCisgKiBJbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgZm9yIEFDUEkgcHJlZGVmaW5lZCBuYW1lcy4KKyAqIEVhY2ggZW50cnkgaW4gdGhlIHRhYmxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgaXRlbXM6CisgKgorICogTmFtZSAgICAgICAgICAgICAgICAgLSBUaGUgQUNQSSByZXNlcnZlZCBuYW1lCisgKiBwYXJhbV9jb3VudCAgICAgICAgICAtIE51bWJlciBvZiBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZAorICogZXhwZWN0ZWRfcmV0dXJuX2J0eXBlcyAtIEFsbG93ZWQgdHlwZShzKSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICovCitzdHJ1Y3QgYWNwaV9uYW1lX2luZm8geworCWNoYXIgbmFtZVtBQ1BJX05BTUVfU0laRV07CisJdTggcGFyYW1fY291bnQ7CisJdTggZXhwZWN0ZWRfYnR5cGVzOworfTsKKworLyoKKyAqIFNlY29uZGFyeSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzIGZvciBBQ1BJIHByZWRlZmluZWQgb2JqZWN0cyB0aGF0IHJldHVybgorICogcGFja2FnZSBvYmplY3RzLiBUaGlzIHN0cnVjdHVyZSBhcHBlYXJzIGFzIHRoZSBuZXh0IGVudHJ5IGluIHRoZSB0YWJsZQorICogYWZ0ZXIgdGhlIE5BTUVfSU5GTyBzdHJ1Y3R1cmUgYWJvdmUuCisgKgorICogVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byBtaW5pbWl6ZSB0aGUgc2l6ZSBvZiB0aGUgcHJlZGVmaW5lZCBuYW1lIHRhYmxlLgorICovCisKKy8qCisgKiBVc2VkIGZvciBBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1BUWVBFMiwKKyAqIEFDUElfUFRZUEUyX01JTiwgQUNQSV9QVFlQRTJfUEtHX0NPVU5ULCBBQ1BJX1BUWVBFMl9DT1VOVAorICovCitzdHJ1Y3QgYWNwaV9wYWNrYWdlX2luZm8geworCXU4IHR5cGU7CisJdTggb2JqZWN0X3R5cGUxOworCXU4IGNvdW50MTsKKwl1OCBvYmplY3RfdHlwZTI7CisJdTggY291bnQyOworCXU4IHJlc2VydmVkOworfTsKKworLyogVXNlZCBmb3IgQUNQSV9QVFlQRTJfRklYRUQgKi8KKworc3RydWN0IGFjcGlfcGFja2FnZV9pbmZvMiB7CisJdTggdHlwZTsKKwl1OCBjb3VudDsKKwl1OCBvYmplY3RfdHlwZVs0XTsKK307CisKKy8qIFVzZWQgZm9yIEFDUElfUFRZUEUxX09QVElPTiAqLworCitzdHJ1Y3QgYWNwaV9wYWNrYWdlX2luZm8zIHsKKwl1OCB0eXBlOworCXU4IGNvdW50OworCXU4IG9iamVjdF90eXBlWzJdOworCXU4IHRhaWxfb2JqZWN0X3R5cGU7CisJdTggcmVzZXJ2ZWQ7Cit9OworCit1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyB7CisJc3RydWN0IGFjcGlfbmFtZV9pbmZvIGluZm87CisJc3RydWN0IGFjcGlfcGFja2FnZV9pbmZvIHJldF9pbmZvOworCXN0cnVjdCBhY3BpX3BhY2thZ2VfaW5mbzIgcmV0X2luZm8yOworCXN0cnVjdCBhY3BpX3BhY2thZ2VfaW5mbzMgcmV0X2luZm8zOworfTsKKworLyoKKyAqIEJpdG1hcHBlZCByZXR1cm4gdmFsdWUgdHlwZXMKKyAqIE5vdGU6IHRoZSBhY3R1YWwgZGF0YSB0eXBlcyBtdXN0IGJlIGNvbnRpZ3VvdXMsIGEgbG9vcCBpbiBuc3ByZWRlZi5jCisgKiBkZXBlbmRzIG9uIHRoaXMuCisgKi8KKyNkZWZpbmUgQUNQSV9SVFlQRV9BTlkgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFDUElfUlRZUEVfTk9ORSAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBQ1BJX1JUWVBFX0lOVEVHRVIgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQUNQSV9SVFlQRV9TVFJJTkcgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFDUElfUlRZUEVfQlVGRkVSICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBQ1BJX1JUWVBFX1BBQ0tBR0UgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9SVFlQRV9SRUZFUkVOQ0UgICAgICAgICAgICAweDIwCisjZGVmaW5lIEFDUElfUlRZUEVfQUxMICAgICAgICAgICAgICAgICAgMHgzRgorCisjZGVmaW5lIEFDUElfTlVNX1JUWVBFUyAgICAgICAgICAgICAgICAgNQkvKiBOdW1iZXIgb2YgYWN0dWFsIG9iamVjdCB0eXBlcyAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBFdmVudCB0eXBlZGVmcyBhbmQgc3RydWN0cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmggYi9pbmNsdWRlL2FjcGkvYWNtYWNyb3MuaAppbmRleCA3NGE5NjE3Li5hNTk3MjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNtYWNyb3MuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNtYWNyb3MuaApAQCAtNjIsNyArNjIsNyBAQAogI2RlZmluZSBBQ1BJX0FSUkFZX0xFTkdUSCh4KSAgICAgICAgICAgIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKIAogLyoKLSAqIEV4dHJhY3QgZGF0YSB1c2luZyBhIHBvaW50ZXIuICBBbnkgbW9yZSB0aGFuIGEgYnl0ZSBhbmQgd2UKKyAqIEV4dHJhY3QgZGF0YSB1c2luZyBhIHBvaW50ZXIuIEFueSBtb3JlIHRoYW4gYSBieXRlIGFuZCB3ZQogICogZ2V0IGludG8gcG90ZW50aWFsIGFsaWdtZW50IGlzc3VlcyAtLSBzZWUgdGhlIFNUT1JFIG1hY3JvcyBiZWxvdy4KICAqIFVzZSB3aXRoIGNhcmUuCiAgKi8KQEAgLTgwLDIxICs4MCwyMSBAQAogICovCiAjZGVmaW5lIEFDUElfQ0FTVF9QVFIodCwgcCkgICAgICAgICAgICAgKCh0ICopIChhY3BpX3VpbnRwdHJfdCkgKHApKQogI2RlZmluZSBBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSKHQsIHApICAgICgodCAqKikgKGFjcGlfdWludHB0cl90KSAocCkpCi0jZGVmaW5lIEFDUElfQUREX1BUUih0LCBhLCBiKQkJQUNQSV9DQVNUX1BUUiAodCwgKEFDUElfQ0FTVF9QVFIgKHU4LChhKSkgKyAoYWNwaV9zaXplKShiKSkpCi0jZGVmaW5lIEFDUElfUFRSX0RJRkYoYSwgYikJCShhY3BpX3NpemUpIChBQ1BJX0NBU1RfUFRSICh1OCwoYSkpIC0gQUNQSV9DQVNUX1BUUiAodTgsKGIpKSkKKyNkZWZpbmUgQUNQSV9BRERfUFRSKHQsIGEsIGIpCQlBQ1BJX0NBU1RfUFRSICh0LCAoQUNQSV9DQVNUX1BUUiAodTgsIChhKSkgKyAoYWNwaV9zaXplKShiKSkpCisjZGVmaW5lIEFDUElfUFRSX0RJRkYoYSwgYikJCShhY3BpX3NpemUpIChBQ1BJX0NBU1RfUFRSICh1OCwgKGEpKSAtIEFDUElfQ0FTVF9QVFIgKHU4LCAoYikpKQogCiAvKiBQb2ludGVyL0ludGVnZXIgdHlwZSBjb252ZXJzaW9ucyAqLwogCiAjZGVmaW5lIEFDUElfVE9fUE9JTlRFUihpKQkJQUNQSV9BRERfUFRSICh2b2lkLCAodm9pZCAqKSBOVUxMLCAoYWNwaV9zaXplKSBpKQotI2RlZmluZSBBQ1BJX1RPX0lOVEVHRVIocCkgICAgICAgICAgICAgIEFDUElfUFRSX0RJRkYgKHAsKHZvaWQgKikgTlVMTCkKLSNkZWZpbmUgQUNQSV9PRkZTRVQoZCxmKSAgICAgICAgICAgICAgICAoYWNwaV9zaXplKSBBQ1BJX1BUUl9ESUZGICgmKCgoZCAqKTApLT5mKSwodm9pZCAqKSBOVUxMKQorI2RlZmluZSBBQ1BJX1RPX0lOVEVHRVIocCkgICAgICAgICAgICAgIEFDUElfUFRSX0RJRkYgKHAsICh2b2lkICopIE5VTEwpCisjZGVmaW5lIEFDUElfT0ZGU0VUKGQsIGYpICAgICAgICAgICAgICAgKGFjcGlfc2l6ZSkgQUNQSV9QVFJfRElGRiAoJigoKGQgKikwKS0+ZiksICh2b2lkICopIE5VTEwpCiAjZGVmaW5lIEFDUElfUEhZU0FERFJfVE9fUFRSKGkpICAgICAgICAgQUNQSV9UT19QT0lOVEVSKGkpCiAjZGVmaW5lIEFDUElfUFRSX1RPX1BIWVNBRERSKGkpICAgICAgICAgQUNQSV9UT19JTlRFR0VSKGkpCiAKICNpZm5kZWYgQUNQSV9NSVNBTElHTk1FTlRfTk9UX1NVUFBPUlRFRAotI2RlZmluZSBBQ1BJX0NPTVBBUkVfTkFNRShhLGIpICAgICAgICAgICgqQUNQSV9DQVNUX1BUUiAodTMyLChhKSkgPT0gKkFDUElfQ0FTVF9QVFIgKHUzMiwoYikpKQorI2RlZmluZSBBQ1BJX0NPTVBBUkVfTkFNRShhLCBiKSAgICAgICAgICgqQUNQSV9DQVNUX1BUUiAodTMyLCAoYSkpID09ICpBQ1BJX0NBU1RfUFRSICh1MzIsIChiKSkpCiAjZWxzZQotI2RlZmluZSBBQ1BJX0NPTVBBUkVfTkFNRShhLGIpICAgICAgICAgICghQUNQSV9TVFJOQ01QIChBQ1BJX0NBU1RfUFRSIChjaGFyLChhKSksIEFDUElfQ0FTVF9QVFIgKGNoYXIsKGIpKSwgQUNQSV9OQU1FX1NJWkUpKQorI2RlZmluZSBBQ1BJX0NPTVBBUkVfTkFNRShhLCBiKSAgICAgICAgICghQUNQSV9TVFJOQ01QIChBQ1BJX0NBU1RfUFRSIChjaGFyLCAoYSkpLCBBQ1BJX0NBU1RfUFRSIChjaGFyLCAoYikpLCBBQ1BJX05BTUVfU0laRSkpCiAjZW5kaWYKIAogLyoKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAvKiBTcGxpdCA2NC1iaXQgaW50ZWdlciBpbnRvIHR3byAzMi1iaXQgdmFsdWVzLiBVc2Ugd2l0aCAlOC44X3glOC44X3ggKi8KIAotI2RlZmluZSBBQ1BJX0ZPUk1BVF9VSU5UNjQoaSkgICAgICAgICAgIEFDUElfSElEV09SRChpKSxBQ1BJX0xPRFdPUkQoaSkKKyNkZWZpbmUgQUNQSV9GT1JNQVRfVUlOVDY0KGkpICAgICAgICAgICBBQ1BJX0hJRFdPUkQoaSksIEFDUElfTE9EV09SRChpKQogCiAjaWYgQUNQSV9NQUNISU5FX1dJRFRIID09IDY0CiAjZGVmaW5lIEFDUElfRk9STUFUX05BVElWRV9VSU5UKGkpICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGkpCkBAIC0xMzIsMzcgKzEzMiwzMyBAQAogICogTWFjcm9zIGZvciBiaWctZW5kaWFuIG1hY2hpbmVzCiAgKi8KIAotLyogVGhpcyBtYWNybyBzZXRzIGEgYnVmZmVyIGluZGV4LCBzdGFydGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwotCi0jZGVmaW5lIEFDUElfQlVGRkVSX0lOREVYKGJ1Zl9sZW4sYnVmX29mZnNldCxieXRlX2dyYW4pICgoYnVmX2xlbikgLSAoKChidWZfb2Zmc2V0KSsxKSAqIChieXRlX2dyYW4pKSkKLQogLyogVGhlc2UgbWFjcm9zIHJldmVyc2UgdGhlIGJ5dGVzIGR1cmluZyB0aGUgbW92ZSwgY29udmVydGluZyBsaXR0bGUtZW5kaWFuIHRvIGJpZyBlbmRpYW4gKi8KIAogCQkJICAvKiBCaWcgRW5kaWFuICAgICAgPD09ICAgICAgICBMaXR0bGUgRW5kaWFuICovCiAJCQkgIC8qICBIaS4uLkxvICAgICAgICAgICAgICAgICAgICAgTG8uLi5IaSAgICAgKi8KIC8qIDE2LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgICAgICB7KCggIHU4ICopKHZvaWQgKikoZCkpWzBdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT18xNihkLCBzKSAgICAgICAgeygoICB1OCAqKSh2b2lkICopKGQpKVswXSA9ICgodTggKikodm9pZCAqKShzKSlbMV07XAogCQkJCQkgICAoKCAgdTggKikodm9pZCAqKShkKSlbMV0gPSAoKHU4ICopKHZvaWQgKikocykpWzBdO30KIAotI2RlZmluZSBBQ1BJX01PVkVfMTZfVE9fMzIoZCxzKSAgICAgICAgIHsoKih1MzIgKikodm9pZCAqKShkKSk9MDtcCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT18zMihkLCBzKSAgICAgICAgeygqKHUzMiAqKSh2b2lkICopKGQpKT0wO1wKIAkJCQkJCQkgICAoKHU4ICopKHZvaWQgKikoZCkpWzJdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCiAJCQkJCQkJICAgKCh1OCAqKSh2b2lkICopKGQpKVszXSA9ICgodTggKikodm9pZCAqKShzKSlbMF07fQogCi0jZGVmaW5lIEFDUElfTU9WRV8xNl9UT182NChkLHMpICAgICAgICAgeygqKHU2NCAqKSh2b2lkICopKGQpKT0wO1wKKyNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzY0KGQsIHMpICAgICAgICB7KCoodTY0ICopKHZvaWQgKikoZCkpPTA7XAogCQkJCQkJCQkJICgodTggKikodm9pZCAqKShkKSlbNl0gPSAoKHU4ICopKHZvaWQgKikocykpWzFdO1wKIAkJCQkJCQkJCSAoKHU4ICopKHZvaWQgKikoZCkpWzddID0gKCh1OCAqKSh2b2lkICopKHMpKVswXTt9CiAKIC8qIDMyLWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzMyX1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMTYoZCwgcykgICAgICAgIEFDUElfTU9WRV8xNl9UT18xNihkLCBzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLwogCi0jZGVmaW5lIEFDUElfTU9WRV8zMl9UT18zMihkLHMpICAgICAgICAgeygoICB1OCAqKSh2b2lkICopKGQpKVswXSA9ICgodTggKikodm9pZCAqKShzKSlbM107XAorI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMzIoZCwgcykgICAgICAgIHsoKCAgdTggKikodm9pZCAqKShkKSlbMF0gPSAoKHU4ICopKHZvaWQgKikocykpWzNdO1wKIAkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzFdID0gKCh1OCAqKSh2b2lkICopKHMpKVsyXTtcCiAJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVsyXSA9ICgodTggKikodm9pZCAqKShzKSlbMV07XAogCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbM10gPSAoKHU4ICopKHZvaWQgKikocykpWzBdO30KIAotI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fNjQoZCxzKSAgICAgICAgIHsoKih1NjQgKikodm9pZCAqKShkKSk9MDtcCisjZGVmaW5lIEFDUElfTU9WRV8zMl9UT182NChkLCBzKSAgICAgICAgeygqKHU2NCAqKSh2b2lkICopKGQpKT0wO1wKIAkJCQkJCQkJCQkgICAoKHU4ICopKHZvaWQgKikoZCkpWzRdID0gKCh1OCAqKSh2b2lkICopKHMpKVszXTtcCiAJCQkJCQkJCQkJICAgKCh1OCAqKSh2b2lkICopKGQpKVs1XSA9ICgodTggKikodm9pZCAqKShzKSlbMl07XAogCQkJCQkJCQkJCSAgICgodTggKikodm9pZCAqKShkKSlbNl0gPSAoKHU4ICopKHZvaWQgKikocykpWzFdO1wKQEAgLTE3MCwxMSArMTY2LDExIEBACiAKIC8qIDY0LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLworI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMTYoZCwgcykgICAgICAgIEFDUElfTU9WRV8xNl9UT18xNihkLCBzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLwogCi0jZGVmaW5lIEFDUElfTU9WRV82NF9UT18zMihkLHMpICAgICAgICAgQUNQSV9NT1ZFXzMyX1RPXzMyKGQscykJLyogVHJ1bmNhdGUgdG8gMzIgKi8KKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzMyKGQsIHMpICAgICAgICBBQ1BJX01PVkVfMzJfVE9fMzIoZCwgcykJLyogVHJ1bmNhdGUgdG8gMzIgKi8KIAotI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fNjQoZCxzKSAgICAgICAgIHsoKCAgdTggKikodm9pZCAqKShkKSlbMF0gPSAoKHU4ICopKHZvaWQgKikocykpWzddO1wKKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzY0KGQsIHMpICAgICAgICB7KCggIHU4ICopKHZvaWQgKikoZCkpWzBdID0gKCh1OCAqKSh2b2lkICopKHMpKVs3XTtcCiAJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVsxXSA9ICgodTggKikodm9pZCAqKShzKSlbNl07XAogCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbMl0gPSAoKHU4ICopKHZvaWQgKikocykpWzVdO1wKIAkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzNdID0gKCh1OCAqKSh2b2lkICopKHMpKVs0XTtcCkBAIC0xODcsNjMgKzE4Myw1OSBAQAogICogTWFjcm9zIGZvciBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzCiAgKi8KIAotLyogVGhpcyBtYWNybyBzZXRzIGEgYnVmZmVyIGluZGV4LCBzdGFydGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLwotCi0jZGVmaW5lIEFDUElfQlVGRkVSX0lOREVYKGJ1Zl9sZW4sYnVmX29mZnNldCxieXRlX2dyYW4pIChidWZfb2Zmc2V0KQotCiAjaWZuZGVmIEFDUElfTUlTQUxJR05NRU5UX05PVF9TVVBQT1JURUQKIAogLyogVGhlIGhhcmR3YXJlIHN1cHBvcnRzIHVuYWxpZ25lZCB0cmFuc2ZlcnMsIGp1c3QgZG8gdGhlIGxpdHRsZS1lbmRpYW4gbW92ZSAqLwogCiAvKiAxNi1iaXQgc291cmNlLCAxNi8zMi82NCBkZXN0aW5hdGlvbiAqLwogCi0jZGVmaW5lIEFDUElfTU9WRV8xNl9UT18xNihkLHMpICAgICAgICAgKih1MTYgKikodm9pZCAqKShkKSA9ICoodTE2ICopKHZvaWQgKikocykKLSNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzMyKGQscykgICAgICAgICAqKHUzMiAqKSh2b2lkICopKGQpID0gKih1MTYgKikodm9pZCAqKShzKQotI2RlZmluZSBBQ1BJX01PVkVfMTZfVE9fNjQoZCxzKSAgICAgICAgICoodTY0ICopKHZvaWQgKikoZCkgPSAqKHUxNiAqKSh2b2lkICopKHMpCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT18xNihkLCBzKSAgICAgICAgKih1MTYgKikodm9pZCAqKShkKSA9ICoodTE2ICopKHZvaWQgKikocykKKyNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzMyKGQsIHMpICAgICAgICAqKHUzMiAqKSh2b2lkICopKGQpID0gKih1MTYgKikodm9pZCAqKShzKQorI2RlZmluZSBBQ1BJX01PVkVfMTZfVE9fNjQoZCwgcykgICAgICAgICoodTY0ICopKHZvaWQgKikoZCkgPSAqKHUxNiAqKSh2b2lkICopKHMpCiAKIC8qIDMyLWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzMyX1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLwotI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKSAgICAgICAgICoodTMyICopKHZvaWQgKikoZCkgPSAqKHUzMiAqKSh2b2lkICopKHMpCi0jZGVmaW5lIEFDUElfTU9WRV8zMl9UT182NChkLHMpICAgICAgICAgKih1NjQgKikodm9pZCAqKShkKSA9ICoodTMyICopKHZvaWQgKikocykKKyNkZWZpbmUgQUNQSV9NT1ZFXzMyX1RPXzE2KGQsIHMpICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCwgcykJLyogVHJ1bmNhdGUgdG8gMTYgKi8KKyNkZWZpbmUgQUNQSV9NT1ZFXzMyX1RPXzMyKGQsIHMpICAgICAgICAqKHUzMiAqKSh2b2lkICopKGQpID0gKih1MzIgKikodm9pZCAqKShzKQorI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fNjQoZCwgcykgICAgICAgICoodTY0ICopKHZvaWQgKikoZCkgPSAqKHUzMiAqKSh2b2lkICopKHMpCiAKIC8qIDY0LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLwotI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMzIoZCxzKSAgICAgICAgIEFDUElfTU9WRV8zMl9UT18zMihkLHMpCS8qIFRydW5jYXRlIHRvIDMyICovCi0jZGVmaW5lIEFDUElfTU9WRV82NF9UT182NChkLHMpICAgICAgICAgKih1NjQgKikodm9pZCAqKShkKSA9ICoodTY0ICopKHZvaWQgKikocykKKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzE2KGQsIHMpICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCwgcykJLyogVHJ1bmNhdGUgdG8gMTYgKi8KKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzMyKGQsIHMpICAgICAgICBBQ1BJX01PVkVfMzJfVE9fMzIoZCwgcykJLyogVHJ1bmNhdGUgdG8gMzIgKi8KKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzY0KGQsIHMpICAgICAgICAqKHU2NCAqKSh2b2lkICopKGQpID0gKih1NjQgKikodm9pZCAqKShzKQogCiAjZWxzZQogLyoKLSAqIFRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHVuYWxpZ25lZCB0cmFuc2ZlcnMuICBXZSBtdXN0IG1vdmUgdGhlCi0gKiBkYXRhIG9uZSBieXRlIGF0IGEgdGltZS4gIFRoZXNlIG1hY3JvcyB3b3JrIHdoZXRoZXIgdGhlIHNvdXJjZSBvcgorICogVGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdW5hbGlnbmVkIHRyYW5zZmVycy4gV2UgbXVzdCBtb3ZlIHRoZQorICogZGF0YSBvbmUgYnl0ZSBhdCBhIHRpbWUuIFRoZXNlIG1hY3JvcyB3b3JrIHdoZXRoZXIgdGhlIHNvdXJjZSBvcgogICogdGhlIGRlc3RpbmF0aW9uIChvciBib3RoKSBpcy9hcmUgdW5hbGlnbmVkLiAgKExpdHRsZS1lbmRpYW4gbW92ZSkKICAqLwogCiAvKiAxNi1iaXQgc291cmNlLCAxNi8zMi82NCBkZXN0aW5hdGlvbiAqLwogCi0jZGVmaW5lIEFDUElfTU9WRV8xNl9UT18xNihkLHMpICAgICAgICAgeygoICB1OCAqKSh2b2lkICopKGQpKVswXSA9ICgodTggKikodm9pZCAqKShzKSlbMF07XAorI2RlZmluZSBBQ1BJX01PVkVfMTZfVE9fMTYoZCwgcykgICAgICAgIHsoKCAgdTggKikodm9pZCAqKShkKSlbMF0gPSAoKHU4ICopKHZvaWQgKikocykpWzBdO1wKIAkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzFdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTt9CiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzMyKGQscykgICAgICAgICB7KCoodTMyICopKHZvaWQgKikoZCkpID0gMDsgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscyk7fQotI2RlZmluZSBBQ1BJX01PVkVfMTZfVE9fNjQoZCxzKSAgICAgICAgIHsoKih1NjQgKikodm9pZCAqKShkKSkgPSAwOyBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKTt9CisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT18zMihkLCBzKSAgICAgICAgeygqKHUzMiAqKSh2b2lkICopKGQpKSA9IDA7IEFDUElfTU9WRV8xNl9UT18xNihkLCBzKTt9CisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT182NChkLCBzKSAgICAgICAgeygqKHU2NCAqKSh2b2lkICopKGQpKSA9IDA7IEFDUElfTU9WRV8xNl9UT18xNihkLCBzKTt9CiAKIC8qIDMyLWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzMyX1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMTYoZCwgcykgICAgICAgIEFDUElfTU9WRV8xNl9UT18xNihkLCBzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLwogCi0jZGVmaW5lIEFDUElfTU9WRV8zMl9UT18zMihkLHMpICAgICAgICAgeygoICB1OCAqKSh2b2lkICopKGQpKVswXSA9ICgodTggKikodm9pZCAqKShzKSlbMF07XAorI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMzIoZCwgcykgICAgICAgIHsoKCAgdTggKikodm9pZCAqKShkKSlbMF0gPSAoKHU4ICopKHZvaWQgKikocykpWzBdO1wKIAkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzFdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCiAJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVsyXSA9ICgodTggKikodm9pZCAqKShzKSlbMl07XAogCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbM10gPSAoKHU4ICopKHZvaWQgKikocykpWzNdO30KIAotI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fNjQoZCxzKSAgICAgICAgIHsoKih1NjQgKikodm9pZCAqKShkKSkgPSAwOyBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKTt9CisjZGVmaW5lIEFDUElfTU9WRV8zMl9UT182NChkLCBzKSAgICAgICAgeygqKHU2NCAqKSh2b2lkICopKGQpKSA9IDA7IEFDUElfTU9WRV8zMl9UT18zMihkLCBzKTt9CiAKIC8qIDY0LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCiAKLSNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLwotI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMzIoZCxzKSAgICAgICAgIEFDUElfTU9WRV8zMl9UT18zMihkLHMpCS8qIFRydW5jYXRlIHRvIDMyICovCi0jZGVmaW5lIEFDUElfTU9WRV82NF9UT182NChkLHMpICAgICAgICAgeygoICB1OCAqKSh2b2lkICopKGQpKVswXSA9ICgodTggKikodm9pZCAqKShzKSlbMF07XAorI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMTYoZCwgcykgICAgICAgIEFDUElfTU9WRV8xNl9UT18xNihkLCBzKQkvKiBUcnVuY2F0ZSB0byAxNiAqLworI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMzIoZCwgcykgICAgICAgIEFDUElfTU9WRV8zMl9UT18zMihkLCBzKQkvKiBUcnVuY2F0ZSB0byAzMiAqLworI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fNjQoZCwgcykgICAgICAgIHsoKCAgdTggKikodm9pZCAqKShkKSlbMF0gPSAoKHU4ICopKHZvaWQgKikocykpWzBdO1wKIAkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzFdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCiAJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVsyXSA9ICgodTggKikodm9pZCAqKShzKSlbMl07XAogCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbM10gPSAoKHU4ICopKHZvaWQgKikocykpWzNdO1wKQEAgLTI1NywxMCArMjQ5LDEwIEBACiAvKiBNYWNyb3MgYmFzZWQgb24gbWFjaGluZSBpbnRlZ2VyIHdpZHRoICovCiAKICNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gMzIKLSNkZWZpbmUgQUNQSV9NT1ZFX1NJWkVfVE9fMTYoZCxzKSAgICAgICBBQ1BJX01PVkVfMzJfVE9fMTYoZCxzKQorI2RlZmluZSBBQ1BJX01PVkVfU0laRV9UT18xNihkLCBzKSAgICAgICBBQ1BJX01PVkVfMzJfVE9fMTYoZCwgcykKIAogI2VsaWYgQUNQSV9NQUNISU5FX1dJRFRIID09IDY0Ci0jZGVmaW5lIEFDUElfTU9WRV9TSVpFX1RPXzE2KGQscykgICAgICAgQUNQSV9NT1ZFXzY0X1RPXzE2KGQscykKKyNkZWZpbmUgQUNQSV9NT1ZFX1NJWkVfVE9fMTYoZCwgcykgICAgICAgQUNQSV9NT1ZFXzY0X1RPXzE2KGQsIHMpCiAKICNlbHNlCiAjZXJyb3IgdW5rbm93biBBQ1BJX01BQ0hJTkVfV0lEVEgKQEAgLTI2OSwyOSArMjYxLDI5IEBACiAvKgogICogRmFzdCBwb3dlci1vZi10d28gbWF0aCBtYWNyb3MgZm9yIG5vbi1vcHRpbWl6ZWQgY29tcGlsZXJzCiAgKi8KLSNkZWZpbmUgX0FDUElfRElWKHZhbHVlLHBvd2VyX29mMikgICAgICAoKHUzMikgKCh2YWx1ZSkgPj4gKHBvd2VyX29mMikpKQotI2RlZmluZSBfQUNQSV9NVUwodmFsdWUscG93ZXJfb2YyKSAgICAgICgodTMyKSAoKHZhbHVlKSA8PCAocG93ZXJfb2YyKSkpCi0jZGVmaW5lIF9BQ1BJX01PRCh2YWx1ZSxkaXZpc29yKSAgICAgICAgKCh1MzIpICgodmFsdWUpICYgKChkaXZpc29yKSAtMSkpKQorI2RlZmluZSBfQUNQSV9ESVYodmFsdWUsIHBvd2VyX29mMikgICAgICAoKHUzMikgKCh2YWx1ZSkgPj4gKHBvd2VyX29mMikpKQorI2RlZmluZSBfQUNQSV9NVUwodmFsdWUsIHBvd2VyX29mMikgICAgICAoKHUzMikgKCh2YWx1ZSkgPDwgKHBvd2VyX29mMikpKQorI2RlZmluZSBfQUNQSV9NT0QodmFsdWUsIGRpdmlzb3IpICAgICAgICAoKHUzMikgKCh2YWx1ZSkgJiAoKGRpdmlzb3IpIC0xKSkpCiAKLSNkZWZpbmUgQUNQSV9ESVZfMihhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9ESVYoYSwxKQotI2RlZmluZSBBQ1BJX01VTF8yKGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX01VTChhLDEpCi0jZGVmaW5lIEFDUElfTU9EXzIoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfTU9EKGEsMikKKyNkZWZpbmUgQUNQSV9ESVZfMihhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9ESVYoYSwgMSkKKyNkZWZpbmUgQUNQSV9NVUxfMihhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9NVUwoYSwgMSkKKyNkZWZpbmUgQUNQSV9NT0RfMihhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9NT0QoYSwgMikKIAotI2RlZmluZSBBQ1BJX0RJVl80KGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX0RJVihhLDIpCi0jZGVmaW5lIEFDUElfTVVMXzQoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfTVVMKGEsMikKLSNkZWZpbmUgQUNQSV9NT0RfNChhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9NT0QoYSw0KQorI2RlZmluZSBBQ1BJX0RJVl80KGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX0RJVihhLCAyKQorI2RlZmluZSBBQ1BJX01VTF80KGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX01VTChhLCAyKQorI2RlZmluZSBBQ1BJX01PRF80KGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX01PRChhLCA0KQogCi0jZGVmaW5lIEFDUElfRElWXzgoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfRElWKGEsMykKLSNkZWZpbmUgQUNQSV9NVUxfOChhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9NVUwoYSwzKQotI2RlZmluZSBBQ1BJX01PRF84KGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX01PRChhLDgpCisjZGVmaW5lIEFDUElfRElWXzgoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfRElWKGEsIDMpCisjZGVmaW5lIEFDUElfTVVMXzgoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfTVVMKGEsIDMpCisjZGVmaW5lIEFDUElfTU9EXzgoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfTU9EKGEsIDgpCiAKLSNkZWZpbmUgQUNQSV9ESVZfMTYoYSkgICAgICAgICAgICAgICAgICBfQUNQSV9ESVYoYSw0KQotI2RlZmluZSBBQ1BJX01VTF8xNihhKSAgICAgICAgICAgICAgICAgIF9BQ1BJX01VTChhLDQpCi0jZGVmaW5lIEFDUElfTU9EXzE2KGEpICAgICAgICAgICAgICAgICAgX0FDUElfTU9EKGEsMTYpCisjZGVmaW5lIEFDUElfRElWXzE2KGEpICAgICAgICAgICAgICAgICAgX0FDUElfRElWKGEsIDQpCisjZGVmaW5lIEFDUElfTVVMXzE2KGEpICAgICAgICAgICAgICAgICAgX0FDUElfTVVMKGEsIDQpCisjZGVmaW5lIEFDUElfTU9EXzE2KGEpICAgICAgICAgICAgICAgICAgX0FDUElfTU9EKGEsIDE2KQogCi0jZGVmaW5lIEFDUElfRElWXzMyKGEpICAgICAgICAgICAgICAgICAgX0FDUElfRElWKGEsNSkKLSNkZWZpbmUgQUNQSV9NVUxfMzIoYSkgICAgICAgICAgICAgICAgICBfQUNQSV9NVUwoYSw1KQotI2RlZmluZSBBQ1BJX01PRF8zMihhKSAgICAgICAgICAgICAgICAgIF9BQ1BJX01PRChhLDMyKQorI2RlZmluZSBBQ1BJX0RJVl8zMihhKSAgICAgICAgICAgICAgICAgIF9BQ1BJX0RJVihhLCA1KQorI2RlZmluZSBBQ1BJX01VTF8zMihhKSAgICAgICAgICAgICAgICAgIF9BQ1BJX01VTChhLCA1KQorI2RlZmluZSBBQ1BJX01PRF8zMihhKSAgICAgICAgICAgICAgICAgIF9BQ1BJX01PRChhLCAzMikKIAogLyoKICAqIFJvdW5kaW5nIG1hY3JvcyAoUG93ZXIgb2YgdHdvIGJvdW5kYXJpZXMgb25seSkKQEAgLTMwNSwxMyArMjk3LDEzIEBACiAKIC8qIE5vdGU6IHNpemVvZihhY3BpX3NpemUpIGV2YWx1YXRlcyB0byBlaXRoZXIgNCBvciA4ICgzMi0gdnMgNjQtYml0IG1vZGUpICovCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzMyQklUKGEpICAgICAgICAgQUNQSV9ST1VORF9ET1dOKGEsNCkKLSNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzY0QklUKGEpICAgICAgICAgQUNQSV9ST1VORF9ET1dOKGEsOCkKLSNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPX05BVElWRV9XT1JEKGEpICAgQUNQSV9ST1VORF9ET1dOKGEsc2l6ZW9mKGFjcGlfc2l6ZSkpCisjZGVmaW5lIEFDUElfUk9VTkRfRE9XTl9UT18zMkJJVChhKSAgICAgICAgIEFDUElfUk9VTkRfRE9XTihhLCA0KQorI2RlZmluZSBBQ1BJX1JPVU5EX0RPV05fVE9fNjRCSVQoYSkgICAgICAgICBBQ1BJX1JPVU5EX0RPV04oYSwgOCkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPX05BVElWRV9XT1JEKGEpICAgQUNQSV9ST1VORF9ET1dOKGEsIHNpemVvZihhY3BpX3NpemUpKQogCi0jZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fMzJCSVQoYSkgICAgICAgICAgIEFDUElfUk9VTkRfVVAoYSw0KQotI2RlZmluZSBBQ1BJX1JPVU5EX1VQX1RPXzY0QklUKGEpICAgICAgICAgICBBQ1BJX1JPVU5EX1VQKGEsOCkKLSNkZWZpbmUgQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRChhKSAgICAgQUNQSV9ST1VORF9VUChhLHNpemVvZihhY3BpX3NpemUpKQorI2RlZmluZSBBQ1BJX1JPVU5EX1VQX1RPXzMyQklUKGEpICAgICAgICAgICBBQ1BJX1JPVU5EX1VQKGEsIDQpCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fNjRCSVQoYSkgICAgICAgICAgIEFDUElfUk9VTkRfVVAoYSwgOCkKKyNkZWZpbmUgQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRChhKSAgICAgQUNQSV9ST1VORF9VUChhLCBzaXplb2YoYWNwaV9zaXplKSkKIAogI2RlZmluZSBBQ1BJX1JPVU5EX0JJVFNfVVBfVE9fQllURVMoYSkgICAgICBBQ1BJX0RJVl84KChhKSArIDcpCiAjZGVmaW5lIEFDUElfUk9VTkRfQklUU19ET1dOX1RPX0JZVEVTKGEpICAgIEFDUElfRElWXzgoKGEpKQpAQCAtMzIwLDkgKzMxMiw5IEBACiAKIC8qIEdlbmVyaWMgKG5vbi1wb3dlci1vZi10d28pIHJvdW5kaW5nICovCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9VUF9UTyh2YWx1ZSxib3VuZGFyeSkgICAgKCgodmFsdWUpICsgKChib3VuZGFyeSktMSkpIC8gKGJvdW5kYXJ5KSkKKyNkZWZpbmUgQUNQSV9ST1VORF9VUF9UTyh2YWx1ZSwgYm91bmRhcnkpICAgKCgodmFsdWUpICsgKChib3VuZGFyeSktMSkpIC8gKGJvdW5kYXJ5KSkKIAotI2RlZmluZSBBQ1BJX0lTX01JU0FMSUdORUQodmFsdWUpCSAgICAoKChhY3BpX3NpemUpdmFsdWUpICYgKHNpemVvZihhY3BpX3NpemUpLTEpKQorI2RlZmluZSBBQ1BJX0lTX01JU0FMSUdORUQodmFsdWUpCSAgICAoKChhY3BpX3NpemUpIHZhbHVlKSAmIChzaXplb2YoYWNwaV9zaXplKS0xKSkKIAogLyoKICAqIEJpdG1hc2sgY3JlYXRpb24KQEAgLTMzMyw4ICszMjUsNiBAQAogI2RlZmluZSBBQ1BJX01BU0tfQklUU19BQk9WRShwb3NpdGlvbikgICAgICAofigoQUNQSV9JTlRFR0VSX01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKSkKICNkZWZpbmUgQUNQSV9NQVNLX0JJVFNfQkVMT1cocG9zaXRpb24pICAgICAgKChBQ1BJX0lOVEVHRVJfTUFYKSA8PCAoKHUzMikgKHBvc2l0aW9uKSkpCiAKLSNkZWZpbmUgQUNQSV9JU19PQ1RBTF9ESUdJVChkKSAgICAgICAgICAgICAgKCgoY2hhcikoZCkgPj0gJzAnKSAmJiAoKGNoYXIpKGQpIDw9ICc3JykpCi0KIC8qIEJpdGZpZWxkcyB3aXRoaW4gQUNQSSByZWdpc3RlcnMgKi8KIAogI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BSRVBBUkVfQklUUyh2YWwsIHBvcywgbWFzaykgICAgICAoKHZhbCA8PCBwb3MpICYgbWFzaykKQEAgLTM0MiwzOSArMzMyLDI5IEBACiAKICNkZWZpbmUgQUNQSV9JTlNFUlRfQklUUyh0YXJnZXQsIG1hc2ssIHNvdXJjZSkgICAgICAgICAgdGFyZ2V0ID0gKCh0YXJnZXQgJiAofihtYXNrKSkpIHwgKHNvdXJjZSAmIG1hc2spKQogCi0vKiBHZW5lcmF0ZSBhIFVVSUQgKi8KLQotI2RlZmluZSBBQ1BJX0lOSVRfVVVJRChhLGIsYyxkMCxkMSxkMixkMyxkNCxkNSxkNixkNykgXAotCShhKSAmIDB4RkYsICgoYSkgPj4gOCkgJiAweEZGLCAoKGEpID4+IDE2KSAmIDB4RkYsICgoYSkgPj4gMjQpICYgMHhGRiwgXAotCShiKSAmIDB4RkYsICgoYikgPj4gOCkgJiAweEZGLCBcCi0JKGMpICYgMHhGRiwgKChjKSA+PiA4KSAmIDB4RkYsIFwKLQkoZDApLCAoZDEpLCAoZDIpLCAoZDMpLCAoZDQpLCAoZDUpLCAoZDYpLCAoZDcpCi0KIC8qCi0gKiBBbiBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqIGNhbiBhcHBlYXIgaW4gc29tZSBjb250ZXh0cywKLSAqIHdoZXJlIGEgcG9pbnRlciB0byBhbiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgIGNhbiBhbHNvCi0gKiBhcHBlYXIuICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggdGhlbS4KKyAqIEFuIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIGNhbiBhcHBlYXIgaW4gc29tZSBjb250ZXh0cworICogd2hlcmUgYSBwb2ludGVyIHRvIGFuIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgY2FuIGFsc28KKyAqIGFwcGVhci4gVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRoZW0uCiAgKgogICogVGhlICJEZXNjcmlwdG9yIiBmaWVsZCBpcyB0aGUgZmlyc3QgZmllbGQgaW4gYm90aCBzdHJ1Y3R1cmVzLgogICovCiAjZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5jb21tb24uZGVzY3JpcHRvcl90eXBlKQotI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCx0KSAgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IHQpCisjZGVmaW5lIEFDUElfU0VUX0RFU0NSSVBUT1JfVFlQRShkLCB0KSAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gdCkKIAogLyogTWFjcm8gdG8gdGVzdCB0aGUgb2JqZWN0IHR5cGUgKi8KIAogI2RlZmluZSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShkKSAgICAgICAgICgoKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKikodm9pZCAqKShkKSktPmNvbW1vbi50eXBlKQogCi0vKiBNYWNybyB0byBjaGVjayB0aGUgdGFibGUgZmxhZ3MgZm9yIFNJTkdMRSBvciBNVUxUSVBMRSB0YWJsZXMgYXJlIGFsbG93ZWQgKi8KLQotI2RlZmluZSBBQ1BJX0lTX1NJTkdMRV9UQUJMRSh4KSAgICAgICAgICgoKHgpICYgMHgwMSkgPT0gQUNQSV9UQUJMRV9TSU5HTEUgPyAxIDogMCkKLQogLyoKICAqIE1hY3JvcyBmb3IgdGhlIG1hc3RlciBBTUwgb3Bjb2RlIHRhYmxlCiAgKi8KLSNpZiBkZWZpbmVkKEFDUElfRElTQVNTRU1CTEVSKSB8fCBkZWZpbmVkIChBQ1BJX0RFQlVHX09VVFBVVCkKLSNkZWZpbmUgQUNQSV9PUChuYW1lLFBhcmdzLElhcmdzLG9ial90eXBlLGNsYXNzLHR5cGUsZmxhZ3MpICAgIHtuYW1lLCh1MzIpKFBhcmdzKSwodTMyKShJYXJncyksKHUzMikoZmxhZ3MpLG9ial90eXBlLGNsYXNzLHR5cGV9CisjaWYgZGVmaW5lZCAoQUNQSV9ESVNBU1NFTUJMRVIpIHx8IGRlZmluZWQgKEFDUElfREVCVUdfT1VUUFVUKQorI2RlZmluZSBBQ1BJX09QKG5hbWUsIFBhcmdzLCBJYXJncywgb2JqX3R5cGUsIGNsYXNzLCB0eXBlLCBmbGFncykgXAorCXtuYW1lLCAodTMyKShQYXJncyksICh1MzIpKElhcmdzKSwgKHUzMikoZmxhZ3MpLCBvYmpfdHlwZSwgY2xhc3MsIHR5cGV9CiAjZWxzZQotI2RlZmluZSBBQ1BJX09QKG5hbWUsUGFyZ3MsSWFyZ3Msb2JqX3R5cGUsY2xhc3MsdHlwZSxmbGFncykgICAgeyh1MzIpKFBhcmdzKSwodTMyKShJYXJncyksKHUzMikoZmxhZ3MpLG9ial90eXBlLGNsYXNzLHR5cGV9CisjZGVmaW5lIEFDUElfT1AobmFtZSwgUGFyZ3MsIElhcmdzLCBvYmpfdHlwZSwgY2xhc3MsIHR5cGUsIGZsYWdzKSBcCisJeyh1MzIpKFBhcmdzKSwgKHUzMikoSWFyZ3MpLCAodTMyKShmbGFncyksIG9ial90eXBlLCBjbGFzcywgdHlwZX0KICNlbmRpZgogCiAjaWZkZWYgQUNQSV9ESVNBU1NFTUJMRVIKQEAgLTM5MiwxOCArMzcyLDE4IEBACiAjZGVmaW5lIEFSR182KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCh1MzIpKHgpIDw8ICg1ICogQVJHX1RZUEVfV0lEVEgpKQogCiAjZGVmaW5lIEFSR0lfTElTVDEoYSkgICAgICAgICAgICAgICAgICAgKEFSR18xKGEpKQotI2RlZmluZSBBUkdJX0xJU1QyKGEsYikgICAgICAgICAgICAgICAgIChBUkdfMShiKXxBUkdfMihhKSkKLSNkZWZpbmUgQVJHSV9MSVNUMyhhLGIsYykgICAgICAgICAgICAgICAoQVJHXzEoYyl8QVJHXzIoYil8QVJHXzMoYSkpCi0jZGVmaW5lIEFSR0lfTElTVDQoYSxiLGMsZCkgICAgICAgICAgICAgKEFSR18xKGQpfEFSR18yKGMpfEFSR18zKGIpfEFSR180KGEpKQotI2RlZmluZSBBUkdJX0xJU1Q1KGEsYixjLGQsZSkgICAgICAgICAgIChBUkdfMShlKXxBUkdfMihkKXxBUkdfMyhjKXxBUkdfNChiKXxBUkdfNShhKSkKLSNkZWZpbmUgQVJHSV9MSVNUNihhLGIsYyxkLGUsZikgICAgICAgICAoQVJHXzEoZil8QVJHXzIoZSl8QVJHXzMoZCl8QVJHXzQoYyl8QVJHXzUoYil8QVJHXzYoYSkpCisjZGVmaW5lIEFSR0lfTElTVDIoYSwgYikgICAgICAgICAgICAgICAgKEFSR18xKGIpfEFSR18yKGEpKQorI2RlZmluZSBBUkdJX0xJU1QzKGEsIGIsIGMpICAgICAgICAgICAgIChBUkdfMShjKXxBUkdfMihiKXxBUkdfMyhhKSkKKyNkZWZpbmUgQVJHSV9MSVNUNChhLCBiLCBjLCBkKSAgICAgICAgICAoQVJHXzEoZCl8QVJHXzIoYyl8QVJHXzMoYil8QVJHXzQoYSkpCisjZGVmaW5lIEFSR0lfTElTVDUoYSwgYiwgYywgZCwgZSkgICAgICAgKEFSR18xKGUpfEFSR18yKGQpfEFSR18zKGMpfEFSR180KGIpfEFSR181KGEpKQorI2RlZmluZSBBUkdJX0xJU1Q2KGEsIGIsIGMsIGQsIGUsIGYpICAgIChBUkdfMShmKXxBUkdfMihlKXxBUkdfMyhkKXxBUkdfNChjKXxBUkdfNShiKXxBUkdfNihhKSkKIAogI2RlZmluZSBBUkdQX0xJU1QxKGEpICAgICAgICAgICAgICAgICAgIChBUkdfMShhKSkKLSNkZWZpbmUgQVJHUF9MSVNUMihhLGIpICAgICAgICAgICAgICAgICAoQVJHXzEoYSl8QVJHXzIoYikpCi0jZGVmaW5lIEFSR1BfTElTVDMoYSxiLGMpICAgICAgICAgICAgICAgKEFSR18xKGEpfEFSR18yKGIpfEFSR18zKGMpKQotI2RlZmluZSBBUkdQX0xJU1Q0KGEsYixjLGQpICAgICAgICAgICAgIChBUkdfMShhKXxBUkdfMihiKXxBUkdfMyhjKXxBUkdfNChkKSkKLSNkZWZpbmUgQVJHUF9MSVNUNShhLGIsYyxkLGUpICAgICAgICAgICAoQVJHXzEoYSl8QVJHXzIoYil8QVJHXzMoYyl8QVJHXzQoZCl8QVJHXzUoZSkpCi0jZGVmaW5lIEFSR1BfTElTVDYoYSxiLGMsZCxlLGYpICAgICAgICAgKEFSR18xKGEpfEFSR18yKGIpfEFSR18zKGMpfEFSR180KGQpfEFSR181KGUpfEFSR182KGYpKQorI2RlZmluZSBBUkdQX0xJU1QyKGEsIGIpICAgICAgICAgICAgICAgIChBUkdfMShhKXxBUkdfMihiKSkKKyNkZWZpbmUgQVJHUF9MSVNUMyhhLCBiLCBjKSAgICAgICAgICAgICAoQVJHXzEoYSl8QVJHXzIoYil8QVJHXzMoYykpCisjZGVmaW5lIEFSR1BfTElTVDQoYSwgYiwgYywgZCkgICAgICAgICAgKEFSR18xKGEpfEFSR18yKGIpfEFSR18zKGMpfEFSR180KGQpKQorI2RlZmluZSBBUkdQX0xJU1Q1KGEsIGIsIGMsIGQsIGUpICAgICAgIChBUkdfMShhKXxBUkdfMihiKXxBUkdfMyhjKXxBUkdfNChkKXxBUkdfNShlKSkKKyNkZWZpbmUgQVJHUF9MSVNUNihhLCBiLCBjLCBkLCBlLCBmKSAgICAoQVJHXzEoYSl8QVJHXzIoYil8QVJHXzMoYyl8QVJHXzQoZCl8QVJHXzUoZSl8QVJHXzYoZikpCiAKICNkZWZpbmUgR0VUX0NVUlJFTlRfQVJHX1RZUEUobGlzdCkgICAgICAobGlzdCAmICgodTMyKSAweDFGKSkKICNkZWZpbmUgSU5DUkVNRU5UX0FSR19MSVNUKGxpc3QpICAgICAgICAobGlzdCA+Pj0gKCh1MzIpIEFSR19UWVBFX1dJRFRIKSkKQEAgLTQzNCw4ICs0MTQsOCBAQAogI2RlZmluZSBBQ1BJX1dBUk5JTkcocGxpc3QpICAgICAgICAgICAgIGFjcGlfdXRfd2FybmluZyBwbGlzdAogI2RlZmluZSBBQ1BJX0VYQ0VQVElPTihwbGlzdCkgICAgICAgICAgIGFjcGlfdXRfZXhjZXB0aW9uIHBsaXN0CiAjZGVmaW5lIEFDUElfRVJST1IocGxpc3QpICAgICAgICAgICAgICAgYWNwaV91dF9lcnJvciBwbGlzdAotI2RlZmluZSBBQ1BJX0VSUk9SX05BTUVTUEFDRShzLGUpICAgICAgIGFjcGlfbnNfcmVwb3J0X2Vycm9yIChBRV9JTkZPLCBzLCBlKTsKLSNkZWZpbmUgQUNQSV9FUlJPUl9NRVRIT0QocyxuLHAsZSkgICAgICBhY3BpX25zX3JlcG9ydF9tZXRob2RfZXJyb3IgKEFFX0lORk8sIHMsIG4sIHAsIGUpOworI2RlZmluZSBBQ1BJX0VSUk9SX05BTUVTUEFDRShzLCBlKSAgICAgIGFjcGlfbnNfcmVwb3J0X2Vycm9yIChBRV9JTkZPLCBzLCBlKTsKKyNkZWZpbmUgQUNQSV9FUlJPUl9NRVRIT0QocywgbiwgcCwgZSkgICBhY3BpX25zX3JlcG9ydF9tZXRob2RfZXJyb3IgKEFFX0lORk8sIHMsIG4sIHAsIGUpOwogCiAjZWxzZQogCkBAIC00NDUsOCArNDI1LDggQEAKICNkZWZpbmUgQUNQSV9XQVJOSU5HKHBsaXN0KQogI2RlZmluZSBBQ1BJX0VYQ0VQVElPTihwbGlzdCkKICNkZWZpbmUgQUNQSV9FUlJPUihwbGlzdCkKLSNkZWZpbmUgQUNQSV9FUlJPUl9OQU1FU1BBQ0UocyxlKQotI2RlZmluZSBBQ1BJX0VSUk9SX01FVEhPRChzLG4scCxlKQorI2RlZmluZSBBQ1BJX0VSUk9SX05BTUVTUEFDRShzLCBlKQorI2RlZmluZSBBQ1BJX0VSUk9SX01FVEhPRChzLCBuLCBwLCBlKQogI2VuZGlmCiAKIC8qCkBAIC00ODksMTggKzQ2OSwxOCBAQAogCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0UoYSkgICAgICAgICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKIAkJCSAgYWNwaV91dF90cmFjZShBQ1BJX0RFQlVHX1BBUkFNRVRFUlMpCi0jZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGEsYikgICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKLQkJCQkJICAgYWNwaV91dF90cmFjZV9wdHIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCh2b2lkICopYikKLSNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYSxiKSAgICBBQ1BJX0ZVTkNUSU9OX05BTUUoYSkgXAotCQkJCQkJCSBhY3BpX3V0X3RyYWNlX3UzMihBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsKHUzMiliKQotI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihhLGIpICAgIEFDUElfRlVOQ1RJT05fTkFNRShhKSBcCi0JCQkJCQkJCQkgIGFjcGlfdXRfdHJhY2Vfc3RyKEFDUElfREVCVUdfUEFSQU1FVEVSUywoY2hhciAqKWIpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGEsIGIpICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKKwkJCQkJICAgYWNwaV91dF90cmFjZV9wdHIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCAodm9pZCAqKWIpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGEsIGIpICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKKwkJCQkJCQkgYWNwaV91dF90cmFjZV91MzIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCAodTMyKWIpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGEsIGIpICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKKwkJCQkJCQkJCSAgYWNwaV91dF90cmFjZV9zdHIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCAoY2hhciAqKWIpCiAKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9FTlRSWSgpICAgICAgICAgICBhY3BpX3V0X3RyYWNrX3N0YWNrX3B0cigpCiAKIC8qCiAgKiBGdW5jdGlvbiBleGl0IHRyYWNpbmcuCi0gKiBXQVJOSU5HOiBUaGVzZSBtYWNyb3MgaW5jbHVkZSBhIHJldHVybiBzdGF0ZW1lbnQuICBUaGlzIGlzIHVzdWFsbHkgY29uc2lkZXJlZAorICogV0FSTklORzogVGhlc2UgbWFjcm9zIGluY2x1ZGUgYSByZXR1cm4gc3RhdGVtZW50LiBUaGlzIGlzIHVzdWFsbHkgY29uc2lkZXJlZAogICogYmFkIGZvcm0sIGJ1dCBoYXZpbmcgYSBzZXBhcmF0ZSBleGl0IG1hY3JvIGlzIHZlcnkgdWdseSBhbmQgZGlmZmljdWx0IHRvIG1haW50YWluLgogICogT25lIG9mIHRoZSBGVU5DVElPTl9UUkFDRSBtYWNyb3MgYWJvdmUgbXVzdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlc2UgbWFjcm9zCiAgKiBzbyB0aGF0ICJfQWNwaUZ1bmN0aW9uTmFtZSIgaXMgZGVmaW5lZC4KQEAgLTU5NiwxMyArNTc2LDEzIEBACiAKIC8qIFN0YWNrIGFuZCBidWZmZXIgZHVtcGluZyAqLwogCi0jZGVmaW5lIEFDUElfRFVNUF9TVEFDS19FTlRSWShhKSAgICAgICAgYWNwaV9leF9kdW1wX29wZXJhbmQoKGEpLDApCi0jZGVmaW5lIEFDUElfRFVNUF9PUEVSQU5EUyhhLGIsYykJYWNwaV9leF9kdW1wX29wZXJhbmRzKGEsYixjKQorI2RlZmluZSBBQ1BJX0RVTVBfU1RBQ0tfRU5UUlkoYSkgICAgICAgIGFjcGlfZXhfZHVtcF9vcGVyYW5kKChhKSwgMCkKKyNkZWZpbmUgQUNQSV9EVU1QX09QRVJBTkRTKGEsIGIsIGMpCWFjcGlfZXhfZHVtcF9vcGVyYW5kcyhhLCBiLCBjKQogCi0jZGVmaW5lIEFDUElfRFVNUF9FTlRSWShhLGIpICAgICAgICAgICAgYWNwaV9uc19kdW1wX2VudHJ5IChhLGIpCi0jZGVmaW5lIEFDUElfRFVNUF9QQVRITkFNRShhLGIsYyxkKSAgICAgYWNwaV9uc19kdW1wX3BhdGhuYW1lKGEsYixjLGQpCisjZGVmaW5lIEFDUElfRFVNUF9FTlRSWShhLCBiKSAgICAgICAgICAgYWNwaV9uc19kdW1wX2VudHJ5IChhLCBiKQorI2RlZmluZSBBQ1BJX0RVTVBfUEFUSE5BTUUoYSwgYiwgYywgZCkgIGFjcGlfbnNfZHVtcF9wYXRobmFtZShhLCBiLCBjLCBkKQogI2RlZmluZSBBQ1BJX0RVTVBfUkVTT1VSQ0VfTElTVChhKSAgICAgIGFjcGlfcnNfZHVtcF9yZXNvdXJjZV9saXN0KGEpCi0jZGVmaW5lIEFDUElfRFVNUF9CVUZGRVIoYSxiKSAgICAgICAgICAgYWNwaV91dF9kdW1wX2J1ZmZlcigodTggKilhLGIsREJfQllURV9ESVNQTEFZLF9DT01QT05FTlQpCisjZGVmaW5lIEFDUElfRFVNUF9CVUZGRVIoYSwgYikgICAgICAgICAgYWNwaV91dF9kdW1wX2J1ZmZlcigodTggKikgYSwgYiwgREJfQllURV9ESVNQTEFZLCBfQ09NUE9ORU5UKQogCiAvKgogICogTWFzdGVyIGRlYnVnIHByaW50IG1hY3JvcwpAQCAtNjI1LDIwICs2MDUsMjAgQEAKICNkZWZpbmUgQUNQSV9ERUJVR19PTkxZX01FTUJFUlMoYSkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fTkFNRShhKQkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0UoYSkJCWRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihhLGIpCWRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMihhLGIpCWRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihhLGIpCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihhLCBiKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYSwgYikJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGEsIGIpCWRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX0VYSVQJCWRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1NUQVRVU19FWElUKHMpCWRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1ZBTFVFX0VYSVQocykJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fRU5UUlkoKQkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIEFDUElfRFVNUF9TVEFDS19FTlRSWShhKQlkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgQUNQSV9EVU1QX09QRVJBTkRTKGEsYixjKSAgICAgIGRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBBQ1BJX0RVTVBfRU5UUlkoYSxiKQkJZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIEFDUElfRFVNUF9UQUJMRVMoYSxiKQkJZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIEFDUElfRFVNUF9QQVRITkFNRShhLGIsYyxkKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQUNQSV9EVU1QX09QRVJBTkRTKGEsIGIsIGMpICAgICBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQUNQSV9EVU1QX0VOVFJZKGEsIGIpCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQUNQSV9EVU1QX1RBQkxFUyhhLCBiKQkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIEFDUElfRFVNUF9QQVRITkFNRShhLCBiLCBjLCBkKQlkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgQUNQSV9EVU1QX1JFU09VUkNFX0xJU1QoYSkJZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIEFDUElfRFVNUF9CVUZGRVIoYSxiKQkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIEFDUElfRFVNUF9CVUZGRVIoYSwgYikJCWRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSBBQ1BJX0RFQlVHX1BSSU5UKHBsKQkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIEFDUElfREVCVUdfUFJJTlRfUkFXKHBsKQlkbyB7IH0gd2hpbGUoMCkKIApAQCAtNjc3LDE1ICs2NTcsMTcgQEAKIC8qCiAgKiBNZW1vcnkgYWxsb2NhdGlvbiB0cmFja2luZyAoREVCVUcgT05MWSkKICAqLworI2RlZmluZSBBQ1BJX01FTV9QQVJBTUVURVJTICAgICAgICAgX0NPTVBPTkVOVCwgX2FjcGlfbW9kdWxlX25hbWUsIF9fTElORV9fCisKICNpZm5kZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKIAogLyogTWVtb3J5IGFsbG9jYXRpb24gKi8KIAogI2lmbmRlZiBBQ1BJX0FMTE9DQVRFCi0jZGVmaW5lIEFDUElfQUxMT0NBVEUoYSkgICAgICAgICAgICBhY3BpX3V0X2FsbG9jYXRlKChhY3BpX3NpemUpKGEpLF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfQUxMT0NBVEUoYSkgICAgICAgICAgICBhY3BpX3V0X2FsbG9jYXRlKChhY3BpX3NpemUpKGEpLCBBQ1BJX01FTV9QQVJBTUVURVJTKQogI2VuZGlmCiAjaWZuZGVmIEFDUElfQUxMT0NBVEVfWkVST0VECi0jZGVmaW5lIEFDUElfQUxMT0NBVEVfWkVST0VEKGEpICAgICBhY3BpX3V0X2FsbG9jYXRlX3plcm9lZCgoYWNwaV9zaXplKShhKSwgX0NPTVBPTkVOVCxfYWNwaV9tb2R1bGVfbmFtZSxfX0xJTkVfXykKKyNkZWZpbmUgQUNQSV9BTExPQ0FURV9aRVJPRUQoYSkgICAgIGFjcGlfdXRfYWxsb2NhdGVfemVyb2VkKChhY3BpX3NpemUpKGEpLCBBQ1BJX01FTV9QQVJBTUVURVJTKQogI2VuZGlmCiAjaWZuZGVmIEFDUElfRlJFRQogI2RlZmluZSBBQ1BJX0ZSRUUoYSkgICAgICAgICAgICAgICAgYWNwaW9fb3NfZnJlZShhKQpAQCAtNjk2LDExICs2NzgsMTYgQEAKIAogLyogTWVtb3J5IGFsbG9jYXRpb24gKi8KIAotI2RlZmluZSBBQ1BJX0FMTE9DQVRFKGEpICAgICAgICAgICAgYWNwaV91dF9hbGxvY2F0ZV9hbmRfdHJhY2soKGFjcGlfc2l6ZSkoYSksX0NPTVBPTkVOVCxfYWNwaV9tb2R1bGVfbmFtZSxfX0xJTkVfXykKLSNkZWZpbmUgQUNQSV9BTExPQ0FURV9aRVJPRUQoYSkgICAgIGFjcGlfdXRfYWxsb2NhdGVfemVyb2VkX2FuZF90cmFjaygoYWNwaV9zaXplKShhKSwgX0NPTVBPTkVOVCxfYWNwaV9tb2R1bGVfbmFtZSxfX0xJTkVfXykKLSNkZWZpbmUgQUNQSV9GUkVFKGEpICAgICAgICAgICAgICAgIGFjcGlfdXRfZnJlZV9hbmRfdHJhY2soYSxfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQorI2RlZmluZSBBQ1BJX0FMTE9DQVRFKGEpICAgICAgICAgICAgYWNwaV91dF9hbGxvY2F0ZV9hbmRfdHJhY2soKGFjcGlfc2l6ZSkoYSksIEFDUElfTUVNX1BBUkFNRVRFUlMpCisjZGVmaW5lIEFDUElfQUxMT0NBVEVfWkVST0VEKGEpICAgICBhY3BpX3V0X2FsbG9jYXRlX3plcm9lZF9hbmRfdHJhY2soKGFjcGlfc2l6ZSkoYSksIEFDUElfTUVNX1BBUkFNRVRFUlMpCisjZGVmaW5lIEFDUElfRlJFRShhKSAgICAgICAgICAgICAgICBhY3BpX3V0X2ZyZWVfYW5kX3RyYWNrKGEsIEFDUElfTUVNX1BBUkFNRVRFUlMpCiAjZGVmaW5lIEFDUElfTUVNX1RSQUNLSU5HKGEpICAgICAgICBhCiAKICNlbmRpZgkJCQkvKiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUyAqLwogCisvKiBQcmVlbXB0aW9uIHBvaW50ICovCisjaWZuZGVmIEFDUElfUFJFRU1QVElPTl9QT0lOVAorI2RlZmluZSBBQ1BJX1BSRUVNUFRJT05fUE9JTlQoKSAvKiBubyBwcmVlbXB0aW9uICovCisjZW5kaWYKKwogI2VuZGlmCQkJCS8qIEFDTUFDUk9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY25hbWVzcC5oIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKaW5kZXggYzM0MDA4NS4uZGI0ZTZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKQEAgLTE3OCw2ICsxNzgsMjIgQEAKIGFjcGlfc3RhdHVzIGFjcGlfbnNfZXZhbHVhdGUoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbyk7CiAKIC8qCisgKiBuc3ByZWRlZiAtIFN1cHBvcnQgZm9yIHByZWRlZmluZWQvcmVzZXJ2ZWQgbmFtZXMKKyAqLworYWNwaV9zdGF0dXMKK2FjcGlfbnNfY2hlY2tfcHJlZGVmaW5lZF9uYW1lcyhzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fb2JqZWN0KTsKKworY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKmFjcGlfbnNfY2hlY2tfZm9yX3ByZWRlZmluZWRfbmFtZShzdHJ1Y3QKKwkJCQkJCQkJICAgIGFjcGlfbmFtZXNwYWNlX25vZGUKKwkJCQkJCQkJICAgICpub2RlKTsKKwordm9pZAorYWNwaV9uc19jaGVja19wYXJhbWV0ZXJfY291bnQoY2hhciAqcGF0aG5hbWUsCisJCQkgICAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICAgIGNvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvICppbmZvKTsKKworLyoKICAqIG5zbmFtZXMgLSBOYW1lIGFuZCBTY29wZSBtYW5pcHVsYXRpb24KICAqLwogdTMyIGFjcGlfbnNfb3BlbnNfc2NvcGUoYWNwaV9vYmplY3RfdHlwZSB0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKaW5kZXggZTk2NTdkYS4uZWI2ZjAzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKQEAgLTMwOCwxOCArMzA4LDM0IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBUaGUgUmVmZXJlbmNlIG9iamVjdCB0eXBlIGlzIHVzZWQgZm9yIHRoZXNlIG9wY29kZXM6Ci0gKiBBcmdbMC02XSwgTG9jYWxbMC03XSwgaW5kZXhfb3AsIG5hbWVfb3AsIHplcm9fb3AsIG9uZV9vcCwgb25lc19vcCwgZGVidWdfb3AKKyAqIFRoZSBSZWZlcmVuY2Ugb2JqZWN0IGlzIHVzZWQgZm9yIHRoZXNlIG9wY29kZXM6CisgKiBBcmdbMC02XSwgTG9jYWxbMC03XSwgaW5kZXhfb3AsIG5hbWVfb3AsIHJlZl9vZl9vcCwgbG9hZF9vcCwgbG9hZF90YWJsZV9vcCwgZGVidWdfb3AKKyAqIFRoZSBSZWZlcmVuY2UuQ2xhc3MgZGlmZmVyZW50aWF0ZXMgdGhlc2UgdHlwZXMuCiAgKi8KIHN0cnVjdCBhY3BpX29iamVjdF9yZWZlcmVuY2UgewotCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggdGFyZ2V0X3R5cGU7CS8qIFVzZWQgZm9yIGluZGV4X29wICovCi0JdTE2IG9wY29kZTsKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHU4IGNsYXNzOwkvKiBSZWZlcmVuY2UgQ2xhc3MgKi8KKwl1OCB0YXJnZXRfdHlwZTsJCS8qIFVzZWQgZm9yIEluZGV4IE9wICovCisJdTggcmVzZXJ2ZWQ7CiAJdm9pZCAqb2JqZWN0OwkJLyogbmFtZV9vcD0+SEFORExFIHRvIG9iaiwgaW5kZXhfb3A9PnVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKi8KLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqd2hlcmU7Ci0JdTMyIG9mZnNldDsJCS8qIFVzZWQgZm9yIGFyZ19vcCwgbG9jYWxfb3AsIGFuZCBpbmRleF9vcCAqLworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwkvKiByZWZfb2Ygb3IgTmFtZXBhdGggKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqd2hlcmU7CS8qIFRhcmdldCBvZiBJbmRleCAqLworCXUzMiB2YWx1ZTsJCS8qIFVzZWQgZm9yIExvY2FsL0FyZy9JbmRleC9kZGJfaGFuZGxlICovCiB9OwogCisvKiBWYWx1ZXMgZm9yIFJlZmVyZW5jZS5DbGFzcyBhYm92ZSAqLworCit0eXBlZGVmIGVudW0geworCUFDUElfUkVGQ0xBU1NfTE9DQUwgPSAwLAkvKiBNZXRob2QgbG9jYWwgKi8KKwlBQ1BJX1JFRkNMQVNTX0FSRyA9IDEsCS8qIE1ldGhvZCBhcmd1bWVudCAqLworCUFDUElfUkVGQ0xBU1NfUkVGT0YgPSAyLAkvKiBSZXN1bHQgb2YgcmVmX29mKCkgVEJEOiBTcGxpdCB0byBSZWYvTm9kZSBhbmQgUmVmL29wZXJhbmRfb2JqPyAqLworCUFDUElfUkVGQ0xBU1NfSU5ERVggPSAzLAkvKiBSZXN1bHQgb2YgSW5kZXgoKSAqLworCUFDUElfUkVGQ0xBU1NfVEFCTEUgPSA0LAkvKiBkZGJfaGFuZGxlIC0gTG9hZCgpLCBsb2FkX3RhYmxlKCkgKi8KKwlBQ1BJX1JFRkNMQVNTX05BTUUgPSA1LAkvKiBSZWZlcmVuY2UgdG8gYSBuYW1lZCBvYmplY3QgKi8KKwlBQ1BJX1JFRkNMQVNTX0RFQlVHID0gNiwJLyogRGVidWcgb2JqZWN0ICovCisKKwlBQ1BJX1JFRkNMQVNTX01BWCA9IDYKK30gQUNQSV9SRUZFUkVOQ0VfQ0xBU1NFUzsKKwogLyoKICAqIEV4dHJhIG9iamVjdCBpcyB1c2VkIGFzIGFkZGl0aW9uYWwgc3RvcmFnZSBmb3IgdHlwZXMgdGhhdAogICogaGF2ZSBBTUwgY29kZSBpbiB0aGVpciBkZWNsYXJhdGlvbnMgKHRlcm1fYXJncykgdGhhdCBtdXN0IGJlCkBAIC0zNzksNiArMzk1LDEzIEBACiAJc3RydWN0IGFjcGlfb2JqZWN0X2V4dHJhIGV4dHJhOwogCXN0cnVjdCBhY3BpX29iamVjdF9kYXRhIGRhdGE7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2NhY2hlX2xpc3QgY2FjaGU7CisKKwkvKgorCSAqIEFkZCBuYW1lc3BhY2Ugbm9kZSB0byB1bmlvbiBpbiBvcmRlciB0byBzaW1wbGlmeSBjb2RlIHRoYXQgYWNjZXB0cyBib3RoCisJICogQUNQSV9PUEVSQU5EX09CSkVDVHMgYW5kIEFDUElfTkFNRVNQQUNFX05PREVzLiBUaGUgc3RydWN0dXJlcyBzaGFyZQorCSAqIGEgY29tbW9uIGRlc2NyaXB0b3JfdHlwZSBmaWVsZCBpbiBvcmRlciB0byBkaWZmZXJlbnRpYXRlIHRoZW0uCisJICovCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgbm9kZTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKaW5kZXggZTE3ODczZC4uMDlkMzNjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKQEAgLTgwLDEyICs4MCwxMCBAQAogLyoKICAqIFJhdyBkZWJ1ZyBvdXRwdXQgbGV2ZWxzLCBkbyBub3QgdXNlIHRoZXNlIGluIHRoZSBERUJVR19QUklOVCBtYWNyb3MKICAqLwotI2RlZmluZSBBQ1BJX0xWX0VSUk9SICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBQ1BJX0xWX1dBUk4gICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBQ1BJX0xWX0lOSVQgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBQ1BJX0xWX0RFQlVHX09CSkVDVCAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBBQ1BJX0xWX0lORk8gICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBBQ1BJX0xWX0FMTF9FWENFUFRJT05TICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBQ1BJX0xWX0lOSVQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBQ1BJX0xWX0RFQlVHX09CSkVDVCAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ1BJX0xWX0lORk8gICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBQ1BJX0xWX0FMTF9FWENFUFRJT05TICAgICAgMHgwMDAwMDAwNwogCiAvKiBUcmFjZSB2ZXJib3NpdHkgbGV2ZWwgMSBbU3RhbmRhcmQgVHJhY2UgTGV2ZWxdICovCiAKQEAgLTEyNyw3ICsxMjUsNiBAQAogI2RlZmluZSBBQ1BJX0xWX1ZFUkJPU0VfSU5GTyAgICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBBQ1BJX0xWX0ZVTExfVEFCTEVTICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBBQ1BJX0xWX0VWRU5UUyAgICAgICAgICAgICAgMHg4MDAwMDAwMAotCiAjZGVmaW5lIEFDUElfTFZfVkVSQk9TRSAgICAgICAgICAgICAweEYwMDAwMDAwCiAKIC8qCkBAIC0xMzUsMjEgKzEzMiwxNyBAQAogICovCiAjZGVmaW5lIEFDUElfREVCVUdfTEVWRUwoZGwpICAgICAgICAodTMyKSBkbCxBQ1BJX0RFQlVHX1BBUkFNRVRFUlMKIAotLyogRXhjZXB0aW9uIGxldmVsIC0tIHVzZWQgaW4gdGhlIGdsb2JhbCAiRGVidWdMZXZlbCIgKi8KLQorLyoKKyAqIEV4Y2VwdGlvbiBsZXZlbCAtLSB1c2VkIGluIHRoZSBnbG9iYWwgIkRlYnVnTGV2ZWwiCisgKgorICogTm90ZTogRm9yIGVycm9ycywgdXNlIHRoZSBBQ1BJX0VSUk9SIG9yIEFDUElfRVhDRVBUSU9OIGludGVyZmFjZXMuCisgKiBGb3Igd2FybmluZ3MsIHVzZSBBQ1BJX1dBUk5JTkcuCisgKi8KICNkZWZpbmUgQUNQSV9EQl9JTklUICAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfSU5JVCkKICNkZWZpbmUgQUNQSV9EQl9ERUJVR19PQkpFQ1QgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfREVCVUdfT0JKRUNUKQogI2RlZmluZSBBQ1BJX0RCX0lORk8gICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9JTkZPKQogI2RlZmluZSBBQ1BJX0RCX0FMTF9FWENFUFRJT05TICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9BTExfRVhDRVBUSU9OUykKIAotLyoKLSAqIFRoZXNlIHR3byBsZXZlbHMgYXJlIGVzc2VudGlhbGx5IG9ic29sZXRlLCBhbGwgaW5zdGFuY2VzIGluIHRoZQotICogQUNQSUNBIGNvcmUgY29kZSBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgQUNQSV9FUlJPUiBhbmQgQUNQSV9XQVJOSU5HCi0gKiAoS2VwdCBoZXJlIGJlY2F1c2Ugc29tZSBkcml2ZXJzIG1heSBzdGlsbCB1c2UgdGhlbSkKLSAqLwotI2RlZmluZSBBQ1BJX0RCX0VSUk9SICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9FUlJPUikKLSNkZWZpbmUgQUNQSV9EQl9XQVJOICAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfV0FSTikKLQogLyogVHJhY2UgbGV2ZWwgLS0gYWxzbyB1c2VkIGluIHRoZSBnbG9iYWwgIkRlYnVnTGV2ZWwiICovCiAKICNkZWZpbmUgQUNQSV9EQl9JTklUX05BTUVTICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfSU5JVF9OQU1FUykKQEAgLTE3MywxMyArMTY2LDE0IEBACiAjZGVmaW5lIEFDUElfREJfVVNFUl9SRVFVRVNUUyAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1VTRVJfUkVRVUVTVFMpCiAjZGVmaW5lIEFDUElfREJfUEFDS0FHRSAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1BBQ0tBR0UpCiAjZGVmaW5lIEFDUElfREJfTVVURVggICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX01VVEVYKQorI2RlZmluZSBBQ1BJX0RCX0VWRU5UUyAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9FVkVOVFMpCiAKICNkZWZpbmUgQUNQSV9EQl9BTEwgICAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfQUxMKQogCiAvKiBEZWZhdWx0cyBmb3IgZGVidWdfbGV2ZWwsIGRlYnVnIGFuZCBub3JtYWwgKi8KIAotI2RlZmluZSBBQ1BJX0RFQlVHX0RFRkFVTFQgICAgICAgICAgKEFDUElfTFZfSU5JVCB8IEFDUElfTFZfV0FSTiB8IEFDUElfTFZfRVJST1IpCi0jZGVmaW5lIEFDUElfTk9STUFMX0RFRkFVTFQgICAgICAgICAoQUNQSV9MVl9JTklUIHwgQUNQSV9MVl9XQVJOIHwgQUNQSV9MVl9FUlJPUikKKyNkZWZpbmUgQUNQSV9ERUJVR19ERUZBVUxUICAgICAgICAgIChBQ1BJX0xWX0lOSVQgfCBBQ1BJX0xWX0RFQlVHX09CSkVDVCkKKyNkZWZpbmUgQUNQSV9OT1JNQUxfREVGQVVMVCAgICAgICAgIChBQ1BJX0xWX0lOSVQgfCBBQ1BJX0xWX0RFQlVHX09CSkVDVCkKICNkZWZpbmUgQUNQSV9ERUJVR19BTEwgICAgICAgICAgICAgIChBQ1BJX0xWX0FNTF9ESVNBU1NFTUJMRSB8IEFDUElfTFZfQUxMX0VYQ0VQVElPTlMgfCBBQ1BJX0xWX0FMTCkKIAogI2VuZGlmCQkJCS8qIF9fQUNPVVRQVVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCmluZGV4IGE1YWMwYmMuLjU0YTI3OWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtNDYsNyArNDYsNyBAQAogYWNwaV9zdGF0dXMKIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhY3BpX2hhbmRsZSBoYW5kbGUsCiAJCSAgICAgIGFjcGlfc3RyaW5nIHBhdGhuYW1lLAotCQkgICAgICBzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqYXJndW1lbnRzLCB1bnNpZ25lZCBsb25nICpkYXRhKTsKKwkJICAgICAgc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKmFyZ3VtZW50cywgdW5zaWduZWQgbG9uZyBsb25nICpkYXRhKTsKIGFjcGlfc3RhdHVzCiBhY3BpX2V2YWx1YXRlX3JlZmVyZW5jZShhY3BpX2hhbmRsZSBoYW5kbGUsCiAJCQlhY3BpX3N0cmluZyBwYXRobmFtZSwKQEAgLTMwMCw3ICszMDAsMTEgQEAKIAllbnVtIGFjcGlfYnVzX3JlbW92YWxfdHlwZSByZW1vdmFsX3R5cGU7CS8qIGluZGljYXRlIGZvciBkaWZmZXJlbnQgcmVtb3ZhbCB0eXBlICovCiB9OwogCi0jZGVmaW5lIGFjcGlfZHJpdmVyX2RhdGEoZCkJKChkKS0+ZHJpdmVyX2RhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgKmFjcGlfZHJpdmVyX2RhdGEoc3RydWN0IGFjcGlfZGV2aWNlICpkKQoreworCXJldHVybiBkLT5kcml2ZXJfZGF0YTsKK30KKwogI2RlZmluZSB0b19hY3BpX2RldmljZShkKQljb250YWluZXJfb2YoZCwgc3RydWN0IGFjcGlfZGV2aWNlLCBkZXYpCiAjZGVmaW5lIHRvX2FjcGlfZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgYWNwaV9kcml2ZXIsIGRydikKIApAQCAtMzI3LDYgKzMzMSw5IEBACiBleHRlcm4gaW50IGFjcGlfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgYWNwaV9kZXZpY2UgKiwgdTMyLCB1MzIpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hY3BpX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9hY3BpX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9hY3BpX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfYWNwaV9idXNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiAvKgogICogRXh0ZXJuYWwgRnVuY3Rpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAppbmRleCBlNWYzOGU1Li5jZjA0YzYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCkBAIC05Myw2ICs5Myw3IEBACiBpbnQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOwogaW50IGFjcGlfcG93ZXJfZ2V0X2luZmVycmVkX3N0YXRlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIGludCBhY3BpX3Bvd2VyX3RyYW5zaXRpb24oc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSk7CitleHRlcm4gaW50IGFjcGlfcG93ZXJfbm9jaGVjazsKICNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAwLDYgKzEwMSw3IEBACiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2lmZGVmIENPTkZJR19BQ1BJX0VDCiBpbnQgYWNwaV9lY19lY2R0X3Byb2JlKHZvaWQpOworaW50IGFjcGlfYm9vdF9lY19lbmFibGUodm9pZCk7CiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNSwxMiArMTE3LDE3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jayBTdGF0aW9uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdHJ1Y3QgYWNwaV9kb2NrX29wcyB7CisJYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyOworCWFjcGlfbm90aWZ5X2hhbmRsZXIgdWV2ZW50OworfTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0FDUElfRE9DSykgfHwgZGVmaW5lZChDT05GSUdfQUNQSV9ET0NLX01PRFVMRSkKIGV4dGVybiBpbnQgaXNfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfZG9ja19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfZG9ja19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUsCi0JCQkJCWFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlciwKKwkJCQkJc3RydWN0IGFjcGlfZG9ja19vcHMgKm9wcywKIAkJCQkJdm9pZCAqY29udGV4dCk7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKTsKICNlbHNlCkBAIC0xMzYsNyArMTQzLDcgQEAKIHsKIH0KIHN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLAotCQkJCQkgICAgICAgYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyLAorCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZG9ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHZvaWQgKmNvbnRleHQpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IDNmOTNhNmIuLmI5MTQ0MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCkBAIC0xOTMsNiArMTkzLDkgQEAKIGFjcGlfb3NfZXhlY3V0ZShhY3BpX2V4ZWN1dGVfdHlwZSB0eXBlLAogCQlhY3BpX29zZF9leGVjX2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KTsKIAorYWNwaV9zdGF0dXMKK2FjcGlfb3NfaG90cGx1Z19leGVjdXRlKGFjcGlfb3NkX2V4ZWNfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpOworCiB2b2lkIGFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUodm9pZCAqY29udGV4dCk7CiAKIHZvaWQgYWNwaV9vc19zbGVlcChhY3BpX2ludGVnZXIgbWlsbGlzZWNvbmRzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3ByZWRlZi5oIGIvaW5jbHVkZS9hY3BpL2FjcHJlZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5ZmI3NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3ByZWRlZi5oCkBAIC0wLDAgKzEsMzcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNwcmVkZWYgLSBJbmZvcm1hdGlvbiB0YWJsZSBmb3IgQUNQSSBwcmVkZWZpbmVkIG1ldGhvZHMgYW5kIG9iamVjdHMKKyAqICAgICAgICAgICAgICAkUmV2aXNpb246IDEuMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQUNQUkVERUZfSF9fCisjZGVmaW5lIF9fQUNQUkVERUZfSF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSZXR1cm4gUGFja2FnZSB0eXBlcworICoKKyAqIDEpIFBUWVBFMSBwYWNrYWdlcyBkbyBub3QgY29udGFpbiBzdWItcGFja2FnZXMuCisgKgorICogQUNQSV9QVFlQRTFfRklYRUQ6IEZpeGVkIGxlbmd0aCwgMSBvciAyIG9iamVjdCB0eXBlczoKKyAqICAgICBvYmplY3QgdHlwZQorICogICAgIGNvdW50CisgKiAgICAgb2JqZWN0IHR5cGUKKyAqICAgICBjb3VudAorICoKKyAqIEFDUElfUFRZUEUxX1ZBUjogVmFyaWFibGUgbGVuZ3RoOgorICogICAgb2JqZWN0IHR5cGUgKEludC9CdWYvUmVmKQorICoKKyAqIEFDUElfUFRZUEUxX09QVElPTjogUGFja2FnZSBoYXMgc29tZSByZXF1aXJlZCBhbmQgc29tZSBvcHRpb25hbCBlbGVtZW50czoKKyAqICAgICAgVXNlZCBmb3IgX1BSVworICoKKyAqCisgKiAyKSBQVFlQRTIgcGFja2FnZXMgY29udGFpbiBhIHZhcmlhYmxlIG51bWJlciBvZiBzdWItcGFja2FnZXMuIEVhY2ggb2YgdGhlCisgKiAgICBkaWZmZXJlbnQgdHlwZXMgZGVzY3JpYmUgdGhlIGNvbnRlbnRzIG9mIGVhY2ggb2YgdGhlIHN1Yi1wYWNrYWdlcy4KKyAqCisgKiBBQ1BJX1BUWVBFMjogRWFjaCBzdWJwYWNrYWdlIGNvbnRhaW5zIDEgb3IgMiBvYmplY3QgdHlwZXM6CisgKiAgICAgb2JqZWN0IHR5cGUKKyAqICAgICBjb3VudAorICogICAgIG9iamVjdCB0eXBlCisgKiAgICAgY291bnQKKyAqCisgKiBBQ1BJX1BUWVBFMl9DT1VOVDogRWFjaCBzdWJwYWNrYWdlIGhhcyBhIGNvdW50IGFzIGZpcnN0IGVsZW1lbnQ6CisgKiAgICAgb2JqZWN0IHR5cGUKKyAqCisgKiBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6IENvdW50IG9mIHN1YnBhY2thZ2VzIGF0IHN0YXJ0LCAxIG9yIDIgb2JqZWN0IHR5cGVzOgorICogICAgIG9iamVjdCB0eXBlCisgKiAgICAgY291bnQKKyAqICAgICBvYmplY3QgdHlwZQorICogICAgIGNvdW50CisgKgorICogQUNQSV9QVFlQRTJfRklYRUQ6IEVhY2ggc3VicGFja2FnZSBpcyBvZiBmaXhlZCBsZW5ndGg6CisgKiAgICAgIFVzZWQgZm9yIF9QUlQKKyAqCisgKiBBQ1BJX1BUWVBFMl9NSU46IEVhY2ggc3VicGFja2FnZSBoYXMgYSB2YXJpYWJsZSBidXQgbWluaW11bSBsZW5ndGgKKyAqICAgICAgVXNlZCBmb3IgX0hQWAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZW51bSBhY3BpX3JldHVybl9wYWNrYWdlX3R5cGVzIHsKKwlBQ1BJX1BUWVBFMV9GSVhFRCA9IDEsCisJQUNQSV9QVFlQRTFfVkFSID0gMiwKKwlBQ1BJX1BUWVBFMV9PUFRJT04gPSAzLAorCUFDUElfUFRZUEUyID0gNCwKKwlBQ1BJX1BUWVBFMl9DT1VOVCA9IDUsCisJQUNQSV9QVFlQRTJfUEtHX0NPVU5UID0gNiwKKwlBQ1BJX1BUWVBFMl9GSVhFRCA9IDcsCisJQUNQSV9QVFlQRTJfTUlOID0gOAorfTsKKworLyoKKyAqIFByZWRlZmluZWQgbWV0aG9kL29iamVjdCBpbmZvcm1hdGlvbiB0YWJsZS4KKyAqCisgKiBUaGVzZSBhcmUgdGhlIG5hbWVzIHRoYXQgY2FuIGFjdHVhbGx5IGJlIGV2YWx1YXRlZCB2aWEgYWNwaV9ldmFsdWF0ZV9vYmplY3QuCisgKiBOb3QgcHJlc2VudCBpbiB0aGlzIHRhYmxlIGFyZSB0aGUgZm9sbG93aW5nOgorICoKKyAqICAgICAgMSkgUHJlZGVmaW5lZC9SZXNlcnZlZCBuYW1lcyB0aGF0IGFyZSBuZXZlciBldmFsdWF0ZWQgdmlhIGFjcGlfZXZhbHVhdGVfb2JqZWN0OgorICogICAgICAgICAgX0x4eCBhbmQgX0V4eCBHUEUgbWV0aG9kcworICogICAgICAgICAgX1F4eCBFQyBtZXRob2RzCisgKiAgICAgICAgICBfVF94IGNvbXBpbGVyIHRlbXBvcmFyeSB2YXJpYWJsZXMKKyAqCisgKiAgICAgIDIpIFByZWRlZmluZWQgbmFtZXMgdGhhdCBuZXZlciBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIEFNTCBjb2RlOgorICogICAgICAgICAgUHJlZGVmaW5lZCByZXNvdXJjZSBkZXNjcmlwdG9yIGZpZWxkIG5hbWVzCisgKgorICogICAgICAzKSBQcmVkZWZpbmVkIG5hbWVzIHRoYXQgYXJlIGltcGxlbWVudGVkIHdpdGhpbiBBQ1BJQ0E6CisgKiAgICAgICAgICBfT1NJCisgKgorICogICAgICA0KSBTb21lIHByZWRlZmluZWQgbmFtZXMgdGhhdCBhcmUgbm90IGRvY3VtZW50ZWQgd2l0aGluIHRoZSBBQ1BJIHNwZWMuCisgKiAgICAgICAgICBfV0RHLCBfV0VECisgKgorICogVGhlIG1haW4gZW50cmllcyBpbiB0aGUgdGFibGUgZWFjaCBjb250YWluIHRoZSBmb2xsb3dpbmcgaXRlbXM6CisgKgorICogTmFtZSAgICAgICAgICAgICAgICAgLSBUaGUgQUNQSSByZXNlcnZlZCBuYW1lCisgKiBwYXJhbV9jb3VudCAgICAgICAgICAtIE51bWJlciBvZiBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZAorICogZXhwZWN0ZWRfYnR5cGVzICAgICAgLSBBbGxvd2VkIHR5cGUocykgZm9yIHRoZSByZXR1cm4gdmFsdWUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgIDAgbWVhbnMgdGhhdCBubyByZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQuCisgKgorICogRm9yIG1ldGhvZHMgdGhhdCByZXR1cm4gcGFja2FnZXMsIHRoZSBuZXh0IGVudHJ5IGluIHRoZSB0YWJsZSBjb250YWlucworICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4cGVjdGVkIHN0cnVjdHVyZSBvZiB0aGUgcGFja2FnZS4gVGhpcyBpbmZvcm1hdGlvbgorICogaXMgc2F2ZWQgaGVyZSAocmF0aGVyIHRoYW4gaW4gYSBzZXBhcmF0ZSB0YWJsZSkgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlCisgKiBvdmVyYWxsIHNpemUgb2YgdGhlIHN0b3JlZCBkYXRhLgorICovCitzdGF0aWMgY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gcHJlZGVmaW5lZF9uYW1lc1tdID0geworCXsuaW5mbyA9IHsiX0FDMCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDMSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDMiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDMyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDNCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDNSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDNiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDNyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDOCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FDOSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FEUiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0FMMCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfQUwxIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KKwl7LmluZm8gPSB7Il9BTDIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLworCXsuaW5mbyA9IHsiX0FMMyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfQUw0IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KKwl7LmluZm8gPSB7Il9BTDUiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLworCXsuaW5mbyA9IHsiX0FMNiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfQUw3IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KKwl7LmluZm8gPSB7Il9BTDgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLworCXsuaW5mbyA9IHsiX0FMOSIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfQUxDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfQUxJIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfQUxQIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfQUxSIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfSU5URUdFUiwgMiwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCAyIChJbnRzKSAqLworCXsuaW5mbyA9IHsiX0FMVCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0JCTiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0JDTCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChJbnRzKSAqLworCXsuaW5mbyA9IHsiX0JDTSIsIDEsIDB9fSwKKwl7LmluZm8gPSB7Il9CRE4iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9CRlMiLCAxLCAwfX0sCisJey5pbmZvID0geyJfQklGIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwKKwkJCQkJICA5LAorCQkJCQkgIEFDUElfUlRZUEVfU1RSSU5HLCA0LCAwfX0sCS8qIGZpeGVkICg5IEludCksKDQgU3RyKSAqLworCXsuaW5mbyA9IHsiX0JMVCIsIDMsIDB9fSwKKwl7LmluZm8gPSB7Il9CTUMiLCAxLCAwfX0sCisJey5pbmZvID0geyJfQk1EIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgNSwgMCwgMCwgMH19LAkvKiBmaXhlZCAoNSBJbnQpICovCisJey5pbmZvID0geyJfQlFDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfQlNUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgNCwgMCwgMCwgMH19LAkvKiBmaXhlZCAoNCBJbnQpICovCisJey5pbmZvID0geyJfQlRNIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfQlRQIiwgMSwgMH19LAorCXsuaW5mbyA9IHsiX0NCQSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAkvKiBzZWUgUENJIGZpcm13YXJlIHNwZWMgMy4wICovCisJey5pbmZvID0geyJfQ0lEIiwgMCwKKwkgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkcgfCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwKKwl7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkcsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKEludHMvU3RycykgKi8KKwl7LmluZm8gPSB7Il9DUlMiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAorCXsuaW5mbyA9IHsiX0NSVCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0NTRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyX0NPVU5ULCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKDEgSW50KG4pLCBuLTEgSW50KSAqLworCXsuaW5mbyA9IHsiX0NTVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyX1BLR19DT1VOVCwKKwkJCQkJICBBQ1BJX1JUWVBFX0JVRkZFUiwgMSwKKwkJCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVIsIDMsIDB9fSwJLyogdmFyaWFibGUgKDEgSW50KG4pLCBuIFBrZyAoMSBCdWYvMyBJbnQpICovCisJey5pbmZvID0geyJfRENLIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfRENTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfRERDIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7LmluZm8gPSB7Il9ERE4iLCAwLCBBQ1BJX1JUWVBFX1NUUklOR319LAorCXsuaW5mbyA9IHsiX0RHUyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0RJUyIsIDAsIDB9fSwKKwl7LmluZm8gPSB7Il9ETUEiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAorCXsuaW5mbyA9IHsiX0RPRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChJbnRzKSAqLworCXsuaW5mbyA9IHsiX0RPUyIsIDEsIDB9fSwKKwl7LmluZm8gPSB7Il9EU00iLCA0LCBBQ1BJX1JUWVBFX0FMTH19LAkvKiBNdXN0IHJldHVybiBhIHR5cGUsIGJ1dCBpdCBjYW4gYmUgb2YgYW55IHR5cGUgKi8KKwl7LmluZm8gPSB7Il9EU1MiLCAxLCAwfX0sCisJey5pbmZvID0geyJfRFNXIiwgMywgMH19LAorCXsuaW5mbyA9IHsiX0VDXyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0VETCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfRUowIiwgMSwgMH19LAorCXsuaW5mbyA9IHsiX0VKMSIsIDEsIDB9fSwKKwl7LmluZm8gPSB7Il9FSjIiLCAxLCAwfX0sCisJey5pbmZvID0geyJfRUozIiwgMSwgMH19LAorCXsuaW5mbyA9IHsiX0VKNCIsIDEsIDB9fSwKKwl7LmluZm8gPSB7Il9FSkQiLCAwLCBBQ1BJX1JUWVBFX1NUUklOR319LAorCXsuaW5mbyA9IHsiX0ZERSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJey5pbmZvID0geyJfRkRJIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgMTYsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDE2IEludCkgKi8KKwl7LmluZm8gPSB7Il9GRE0iLCAxLCAwfX0sCisJey5pbmZvID0geyJfRklYIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKEludHMpICovCisJey5pbmZvID0geyJfR0xLIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfR1BEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfR1BFIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIF9HUEUgbWV0aG9kLCBub3QgX0dQRSBzY29wZSAqLworCXsuaW5mbyA9IHsiX0dTQiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX0dURiIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJey5pbmZvID0geyJfR1RNIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7LmluZm8gPSB7Il9HVFMiLCAxLCAwfX0sCisJey5pbmZvID0geyJfSElEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKKwl7LmluZm8gPSB7Il9IT1QiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9IUFAiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA0LCAwLCAwLCAwfX0sCS8qIGZpeGVkICg0IEludCkgKi8KKworCS8qCisJICogRm9yIF9IUFgsIGEgc2luZ2xlIHBhY2thZ2UgaXMgcmV0dXJuZWQsIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLgorCSAqIEVhY2ggc3ViLXBhY2thZ2UgY29udGFpbnMgYSBQQ0kgcmVjb3JkIHNldHRpbmcuIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB0eXBlIG9mCisJICogcmVjb3JkIHNldHRpbmdzLCBvZiBkaWZmZXJlbnQgbGVuZ3RocywgYnV0IGFsbCBlbGVtZW50cyBvZiBhbGwgc2V0dGluZ3MgYXJlIEludGVnZXJzLgorCSAqLworCXsuaW5mbyA9IHsiX0hQWCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyX01JTiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoICh2YXIgSW50cykgKi8KKwl7LmluZm8gPSB7Il9JRlQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwJLyogc2VlIElQTUkgc3BlYyAqLworCXsuaW5mbyA9IHsiX0lOSSIsIDAsIDB9fSwKKwl7LmluZm8gPSB7Il9JUkMiLCAwLCAwfX0sCisJey5pbmZvID0geyJfTENLIiwgMSwgMH19LAorCXsuaW5mbyA9IHsiX0xJRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX01BVCIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJey5pbmZvID0geyJfTUxTIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfU1RSSU5HLCAyLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoICgyIFN0cikgKi8KKwl7LmluZm8gPSB7Il9NU0ciLCAxLCAwfX0sCisJey5pbmZvID0geyJfT0ZGIiwgMCwgMH19LAorCXsuaW5mbyA9IHsiX09OXyIsIDAsIDB9fSwKKwl7LmluZm8gPSB7Il9PU18iLCAwLCBBQ1BJX1JUWVBFX1NUUklOR319LAorCXsuaW5mbyA9IHsiX09TQyIsIDQsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJey5pbmZvID0geyJfT1NUIiwgMywgMH19LAorCXsuaW5mbyA9IHsiX1BDTCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfUENUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfQlVGRkVSLCAyLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgyIEJ1ZikgKi8KKwl7LmluZm8gPSB7Il9QREMiLCAxLCAwfX0sCisJey5pbmZvID0geyJfUElDIiwgMSwgMH19LAorCXsuaW5mbyA9IHsiX1BMRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9CVUZGRVIsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKEJ1ZnMpICovCisJey5pbmZvID0geyJfUFBDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfUFBFIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIHNlZSBkaWc2NCBzcGVjICovCisJey5pbmZvID0geyJfUFIwIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KKwl7LmluZm8gPSB7Il9QUjEiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLworCXsuaW5mbyA9IHsiX1BSMiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfUFJTIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKworCS8qCisJICogRm9yIF9QUlQsIG1hbnkgQklPU3MgcmV2ZXJzZSB0aGUgMm5kIGFuZCAzcmQgUGFja2FnZSBlbGVtZW50cy4gVGhpcyBidWcgaXMgc28gcHJldmFsZW50IHRoYXQgdGhlcmUKKwkgKiBpcyBjb2RlIGluIHRoZSBBQ1BJQ0EgUmVzb3VyY2UgTWFuYWdlciB0byBkZXRlY3QgdGhpcyBhbmQgc3dpdGNoIHRoZW0gYmFjay4gRm9yIG5vdywgZG8gbm90IGFsbG93CisJICogYW5kIGlzc3VlIGEgd2FybmluZy4gVG8gYWxsb3cgdGhpcyBhbmQgZWxpbWluYXRlIHRoZSB3YXJuaW5nLCBhZGQgdGhlIEFDUElfUlRZUEVfUkVGRVJFTkNFCisJICogdHlwZSB0byB0aGUgMm5kIGVsZW1lbnQgKGluZGV4IDEpIGluIHRoZSBzdGF0ZW1lbnQgYmVsb3cuCisJICovCisJey5pbmZvID0geyJfUFJUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTJfRklYRUQsIDQsCisJCQkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSLAorCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiwKKwkJCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoICg0KTogSW50LEludCxJbnQvUmVmLEludCAqLworCisJey5pbmZvID0geyJfUFJXIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfT1BUSU9OLCAyLAorCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiB8CisJCQkJCSAgQUNQSV9SVFlQRV9QQUNLQUdFLAorCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDB9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2g6IFBrZy9JbnQsSW50LFt2YXJpYWJsZSBSZWZzXSAoUGtnIGlzIFJlZi9JbnQpICovCisKKwl7LmluZm8gPSB7Il9QUzAiLCAwLCAwfX0sCisJey5pbmZvID0geyJfUFMxIiwgMCwgMH19LAorCXsuaW5mbyA9IHsiX1BTMiIsIDAsIDB9fSwKKwl7LmluZm8gPSB7Il9QUzMiLCAwLCAwfX0sCisJey5pbmZvID0geyJfUFNDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfUFNEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTJfQ09VTlQsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCAoNSBJbnQpIHdpdGggY291bnQgKi8KKwl7LmluZm8gPSB7Il9QU0wiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLworCXsuaW5mbyA9IHsiX1BTUiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX1BTUyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDYsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2ggKDYgSW50KSAqLworCXsuaW5mbyA9IHsiX1BTViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX1BTVyIsIDEsIDB9fSwKKwl7LmluZm8gPSB7Il9QVEMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9CVUZGRVIsIDIsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDIgQnVmKSAqLworCXsuaW5mbyA9IHsiX1BUUyIsIDEsIDB9fSwKKwl7LmluZm8gPSB7Il9QWE0iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9SRUciLCAyLCAwfX0sCisJey5pbmZvID0geyJfUkVWIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfUk1WIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfUk9NIiwgMiwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7LmluZm8gPSB7Il9SVFYiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKworCS8qCisJICogRm9yIF9TMF8gdGhyb3VnaCBfUzVfLCB0aGUgQUNQSSBzcGVjIGRlZmluZXMgYSByZXR1cm4gUGFja2FnZSBjb250YWluaW5nIDEgSW50ZWdlciwKKwkgKiBidXQgbW9zdCBEU0RUcyBoYXZlIGl0IHdyb25nIC0gMiwzLCBvciA0IGludGVnZXJzLiBBbGxvdyB0aGlzIGJ5IG1ha2luZyB0aGUgb2JqZWN0cyAidmFyaWFibGUgbGVuZ3RoIiwKKwkgKiBidXQgYWxsIGVsZW1lbnRzIG11c3QgYmUgSW50ZWdlcnMuCisJICovCisJey5pbmZvID0geyJfUzBfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDEgSW50KSAqLworCXsuaW5mbyA9IHsiX1MxXyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgxIEludCkgKi8KKwl7LmluZm8gPSB7Il9TMl8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMSBJbnQpICovCisJey5pbmZvID0geyJfUzNfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDEgSW50KSAqLworCXsuaW5mbyA9IHsiX1M0XyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgxIEludCkgKi8KKwl7LmluZm8gPSB7Il9TNV8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMSBJbnQpICovCisKKwl7LmluZm8gPSB7Il9TMUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TMkQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TM0QiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TNEQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TMFciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TMVciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TMlciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TM1ciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TNFciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TQlMiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TQ1AiLCAweDEzLCAwfX0sCS8qIEFjcGkgMS4wIGFsbG93ZWQgMSBhcmcuIEFjcGkgMy4wIGV4cGFuZGVkIHRvIDMgYXJncy4gQWxsb3cgYm90aC4gKi8KKwkvKiBOb3RlOiB0aGUgMy1hcmcgZGVmaW5pdGlvbiBtYXkgYmUgcmVtb3ZlZCBmb3IgQUNQSSA0LjAgKi8KKwl7LmluZm8gPSB7Il9TREQiLCAxLCAwfX0sCisJey5pbmZvID0geyJfU0VHIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfU0xJIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7LmluZm8gPSB7Il9TUEQiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9TUlMiLCAxLCAwfX0sCisJey5pbmZvID0geyJfU1JWIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIHNlZSBJUE1JIHNwZWMgKi8KKwl7LmluZm8gPSB7Il9TU1QiLCAxLCAwfX0sCisJey5pbmZvID0geyJfU1RBIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfU1RNIiwgMywgMH19LAorCXsuaW5mbyA9IHsiX1NUUiIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJey5pbmZvID0geyJfU1VOIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfU1dTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfVEMxIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfVEMyIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfVE1QIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfVFBDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfVFBUIiwgMSwgMH19LAorCXsuaW5mbyA9IHsiX1RSVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMiwKKwkJCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVIsIDYsIDB9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2ggMl9yZWYvNl9pbnQgKi8KKwl7LmluZm8gPSB7Il9UU0QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMl9DT1VOVCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoIDVfaW50IHdpdGggY291bnQgKi8KKwl7LmluZm8gPSB7Il9UU1AiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9UU1MiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoIDVfaW50ICovCisJey5pbmZvID0geyJfVFNUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJey5pbmZvID0geyJfVFRTIiwgMSwgMH19LAorCXsuaW5mbyA9IHsiX1RaRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCisJey5pbmZvID0geyJfVFpNIiwgMCwgQUNQSV9SVFlQRV9SRUZFUkVOQ0V9fSwKKwl7LmluZm8gPSB7Il9UWlAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7LmluZm8gPSB7Il9VSUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklOR319LAorCXsuaW5mbyA9IHsiX1VQQyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDQgSW50KSAqLworCXsuaW5mbyA9IHsiX1VQRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX1VQUCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXsuaW5mbyA9IHsiX1ZQTyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCisJLyogQWNwaSAxLjAgZGVmaW5lZCBfV0FLIHdpdGggbm8gcmV0dXJuIHZhbHVlLiBMYXRlciwgaXQgd2FzIGNoYW5nZWQgdG8gcmV0dXJuIGEgcGFja2FnZSAqLworCisJey5pbmZvID0geyJfV0FLIiwgMSwgQUNQSV9SVFlQRV9OT05FIHwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCisJey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAyLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgyIEludCksIGJ1dCBpcyBvcHRpb25hbCAqLworCXsucmV0X2luZm8gPSB7MCwgMCwgMCwgMCwgMCwgMH19CS8qIFRhYmxlIHRlcm1pbmF0b3IgKi8KK307CisKKyNpZiAwCisJLyogTm90IGltcGxlbWVudGVkICovCisKK3sKKyJfV0RHIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9LAkvKiBNUyBFeHRlbnNpb24gKi8KKworeworIl9XRUQiLCAxLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9LAkvKiBNUyBFeHRlbnNpb24gKi8KKworICAgIC8qIFRoaXMgaXMgYW4gaW50ZXJuYWxseSBpbXBsZW1lbnRlZCBjb250cm9sIG1ldGhvZCwgbm8gbmVlZCB0byBjaGVjayAqLworeworIl9PU0kiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9LAorCisgICAgLyogVEJEOiAqLworICAgIF9QUlQgLSBjdXJyZW50bHkgaWdub3JlIHJldmVyc2VkIGVudHJpZXMuYXR0ZW1wdCB0byBmaXggaGVyZSA/CisgICAgdGhpbmsgYWJvdXQgY29kZSB0aGF0IGF0dGVtcHRzIHRvIGZpeCBwYWNrYWdlIGVsZW1lbnRzIGxpa2UgX0JJRiwgZXRjLgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaAppbmRleCBkMzhmOWJlMi4uNjNmNWI0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaApAQCAtOTA4LDcgKzkwOCw5IEBACiAJQUNQSV9NQURUX1RZUEVfSU9fU0FQSUMgPSA2LAogCUFDUElfTUFEVF9UWVBFX0xPQ0FMX1NBUElDID0gNywKIAlBQ1BJX01BRFRfVFlQRV9JTlRFUlJVUFRfU09VUkNFID0gOCwKLQlBQ1BJX01BRFRfVFlQRV9SRVNFUlZFRCA9IDkJLyogOSBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KKwlBQ1BJX01BRFRfVFlQRV9MT0NBTF9YMkFQSUMgPSA5LAorCUFDUElfTUFEVF9UWVBFX0xPQ0FMX1gyQVBJQ19OTUkgPSAxMCwKKwlBQ1BJX01BRFRfVFlQRV9SRVNFUlZFRCA9IDExCS8qIDExIGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwogfTsKIAogLyoKQEAgLTEwMDksNiArMTAxMSwyNiBAQAogCiAjZGVmaW5lIEFDUElfTUFEVF9DUEVJX09WRVJSSURFICAgICAoMSkKIAorLyogOTogUHJvY2Vzc29yIExvY2FsIFgyX0FQSUMgKDA3LzIwMDgpICovCisKK3N0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljIHsKKwlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgaGVhZGVyOworCXUxNiByZXNlcnZlZDsJCS8qIFJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJdTMyIGxvY2FsX2FwaWNfaWQ7CS8qIFByb2Nlc3NvciBYMl9BUElDIElEICAqLworCXUzMiBsYXBpY19mbGFnczsKKwl1MzIgdWlkOwkJLyogRXh0ZW5kZWQgWDJfQVBJQyBwcm9jZXNzb3IgSUQgKi8KK307CisKKy8qIDEwOiBMb2NhbCBYMkFQSUMgTk1JICgwNy8yMDA4KSAqLworCitzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgeworCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CisJdTE2IGludGlfZmxhZ3M7CisJdTMyIHVpZDsJCS8qIFByb2Nlc3NvciBYMl9BUElDIElEICovCisJdTggbGludDsJCS8qIExJTlRuIHRvIHdoaWNoIE5NSSBpcyBjb25uZWN0ZWQgKi8KKwl1OCByZXNlcnZlZFszXTsKK307CisKIC8qCiAgKiBDb21tb24gZmxhZ3MgZmllbGRzIGZvciBNQURUIHN1YnRhYmxlcwogICovCkBAIC0xMTUwLDEwICsxMTcyLDE1IEBACiBlbnVtIGFjcGlfc3JhdF90eXBlIHsKIAlBQ1BJX1NSQVRfVFlQRV9DUFVfQUZGSU5JVFkgPSAwLAogCUFDUElfU1JBVF9UWVBFX01FTU9SWV9BRkZJTklUWSA9IDEsCi0JQUNQSV9TUkFUX1RZUEVfUkVTRVJWRUQgPSAyCisJQUNQSV9TUkFUX1RZUEVfWDJBUElDX0NQVV9BRkZJTklUWSA9IDIsCisJQUNQSV9TUkFUX1RZUEVfUkVTRVJWRUQgPSAzCS8qIDMgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCiB9OwogCi0vKiBTUkFUIHN1Yi10YWJsZXMgKi8KKy8qCisgKiBTUkFUIFN1Yi10YWJsZXMsIGNvcnJlc3BvbmQgdG8gVHlwZSBpbiBzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIKKyAqLworCisvKiAwOiBQcm9jZXNzb3IgTG9jYWwgQVBJQy9TQVBJQyBBZmZpbml0eSAqLwogCiBzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSB7CiAJc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyIGhlYWRlcjsKQEAgLTExNjUsOSArMTE5Miw3IEBACiAJdTMyIHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogfTsKIAotLyogRmxhZ3MgKi8KLQotI2RlZmluZSBBQ1BJX1NSQVRfQ1BVX0VOQUJMRUQgICAgICAgKDEpCS8qIDAwOiBVc2UgYWZmaW5pdHkgc3RydWN0dXJlICovCisvKiAxOiBNZW1vcnkgQWZmaW5pdHkgKi8KIAogc3RydWN0IGFjcGlfc3JhdF9tZW1fYWZmaW5pdHkgewogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CkBAIC0xMTg2LDYgKzEyMTEsMjAgQEAKICNkZWZpbmUgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFICgxPDwxKQkvKiAwMTogTWVtb3J5IHJlZ2lvbiBpcyBob3QgcGx1Z2dhYmxlICovCiAjZGVmaW5lIEFDUElfU1JBVF9NRU1fTk9OX1ZPTEFUSUxFICAoMTw8MikJLyogMDI6IE1lbW9yeSByZWdpb24gaXMgbm9uLXZvbGF0aWxlICovCiAKKy8qIDI6IFByb2Nlc3NvciBMb2NhbCBYMl9BUElDIEFmZmluaXR5ICgwNy8yMDA4KSAqLworCitzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgeworCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CisJdTE2IHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCXUzMiBwcm94aW1pdHlfZG9tYWluOworCXUzMiBhcGljX2lkOworCXUzMiBmbGFnczsKK307CisKKy8qIEZsYWdzIGZvciBzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSBhbmQgc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICovCisKKyNkZWZpbmUgQUNQSV9TUkFUX0NQVV9FTkFCTEVEICAgICAgICgxKQkvKiAwMDogVXNlIGFmZmluaXR5IHN0cnVjdHVyZSAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFRDUEEgLSBUcnVzdGVkIENvbXB1dGluZyBQbGF0Zm9ybSBBbGxpYW5jZSB0YWJsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaCBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKaW5kZXggNGVhNGY0MC4uZTg5MzZhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCkBAIC02MDcsOCArNjA3LDE1IEBACiAKIC8qCiAgKiBiaXRfcmVnaXN0ZXIgSURzCi0gKiBUaGVzZSBhcmUgYml0ZmllbGRzIGRlZmluZWQgd2l0aGluIHRoZSBmdWxsIEFDUEkgcmVnaXN0ZXJzCisgKgorICogVGhlc2UgdmFsdWVzIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBpbnRlcmZhY2VzCisgKiBhbmQgYXJlIG1hcHBlZCB0byBpbmRpdmlkdWFsIGJpdGZpZWxkcyBkZWZpbmVkIHdpdGhpbiB0aGUgQUNQSQorICogcmVnaXN0ZXJzLiBTZWUgdGhlIGFjcGlfZ2JsX2JpdF9yZWdpc3Rlcl9pbmZvIGdsb2JhbCB0YWJsZSBpbiB1dGdsb2JhbC5jCisgKiBmb3IgdGhpcyBtYXBwaW5nLgogICovCisKKy8qIFBNMSBTdGF0dXMgcmVnaXN0ZXIgKi8KKwogI2RlZmluZSBBQ1BJX0JJVFJFR19USU1FUl9TVEFUVVMgICAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSBBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1NUQVRVUyAgICAgICAgICAgMHgwMQogI2RlZmluZSBBQ1BJX0JJVFJFR19HTE9CQUxfTE9DS19TVEFUVVMgICAgICAgICAgMHgwMgpAQCAtNjE4LDI0ICs2MjUsMjkgQEAKICNkZWZpbmUgQUNQSV9CSVRSRUdfV0FLRV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDYKICNkZWZpbmUgQUNQSV9CSVRSRUdfUENJRVhQX1dBS0VfU1RBVFVTICAgICAgICAgIDB4MDcKIAorLyogUE0xIEVuYWJsZSByZWdpc3RlciAqLworCiAjZGVmaW5lIEFDUElfQklUUkVHX1RJTUVSX0VOQUJMRSAgICAgICAgICAgICAgICAweDA4CiAjZGVmaW5lIEFDUElfQklUUkVHX0dMT0JBTF9MT0NLX0VOQUJMRSAgICAgICAgICAweDA5CiAjZGVmaW5lIEFDUElfQklUUkVHX1BPV0VSX0JVVFRPTl9FTkFCTEUgICAgICAgICAweDBBCiAjZGVmaW5lIEFDUElfQklUUkVHX1NMRUVQX0JVVFRPTl9FTkFCTEUgICAgICAgICAweDBCCiAjZGVmaW5lIEFDUElfQklUUkVHX1JUX0NMT0NLX0VOQUJMRSAgICAgICAgICAgICAweDBDCi0jZGVmaW5lIEFDUElfQklUUkVHX1dBS0VfRU5BQkxFICAgICAgICAgICAgICAgICAweDBECi0jZGVmaW5lIEFDUElfQklUUkVHX1BDSUVYUF9XQUtFX0RJU0FCTEUgICAgICAgICAweDBFCisjZGVmaW5lIEFDUElfQklUUkVHX1BDSUVYUF9XQUtFX0RJU0FCTEUgICAgICAgICAweDBECiAKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0NJX0VOQUJMRSAgICAgICAgICAgICAgICAgIDB4MEYKLSNkZWZpbmUgQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgQUNQSV9CSVRSRUdfR0xPQkFMX0xPQ0tfUkVMRUFTRSAgICAgICAgIDB4MTEKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9BICAgICAgICAgICAgICAgIDB4MTIKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9CICAgICAgICAgICAgICAgIDB4MTMKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgIDB4MTQKKy8qIFBNMSBDb250cm9sIHJlZ2lzdGVyICovCiAKLSNkZWZpbmUgQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0NJX0VOQUJMRSAgICAgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQgICAgICAgICAgICAgIDB4MEYKKyNkZWZpbmUgQUNQSV9CSVRSRUdfR0xPQkFMX0xPQ0tfUkVMRUFTRSAgICAgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9BICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9CICAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgIDB4MTMKIAotI2RlZmluZSBBQ1BJX0JJVFJFR19NQVggICAgICAgICAgICAgICAgICAgICAgICAgMHgxNQorLyogUE0yIENvbnRyb2wgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSAgICAgICAgICAgICAgICAgMHgxNAorCisjZGVmaW5lIEFDUElfQklUUkVHX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0CiAjZGVmaW5lIEFDUElfTlVNX0JJVFJFRyAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0JJVFJFR19NQVggKyAxCiAKIC8qCkBAIC04NTksNiArODcxLDcgQEAKIHN0cnVjdCBhY3BpX2RldmljZV9pbmZvIHsKIAlBQ1BJX0NPTU1PTl9PQkpfSU5GTzsKIAorCXUzMiBwYXJhbV9jb3VudDsJLyogSWYgYSBtZXRob2QsIHJlcXVpcmVkIHBhcmFtZXRlciBjb3VudCAqLwogCXUzMiB2YWxpZDsJCS8qIEluZGljYXRlcyB3aGljaCBmaWVsZHMgYmVsb3cgYXJlIHZhbGlkICovCiAJdTMyIGN1cnJlbnRfc3RhdHVzOwkvKiBfU1RBIHZhbHVlICovCiAJYWNwaV9pbnRlZ2VyIGFkZHJlc3M7CS8qIF9BRFIgdmFsdWUgaWYgYW55ICovCkBAIC0xMjI1LDggKzEyMzgsOCBAQAogCiAjcHJhZ21hIHBhY2soKQogCi0jZGVmaW5lIEFDUElfUlNfU0laRV9NSU4gICAgICAgICAgICAgICAgICAgIDEyCiAjZGVmaW5lIEFDUElfUlNfU0laRV9OT19EQVRBICAgICAgICAgICAgICAgIDgJLyogSWQgKyBMZW5ndGggZmllbGRzICovCisjZGVmaW5lIEFDUElfUlNfU0laRV9NSU4gICAgICAgICAgICAgICAgICAgICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQgKDEyKQogI2RlZmluZSBBQ1BJX1JTX1NJWkUodHlwZSkgICAgICAgICAgICAgICAgICAodTMyKSAoQUNQSV9SU19TSVpFX05PX0RBVEEgKyBzaXplb2YgKHR5cGUpKQogCiAjZGVmaW5lIEFDUElfTkVYVF9SRVNPVVJDRShyZXMpICAgICAgICAgICAgIChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqKSgodTggKikgcmVzICsgcmVzLT5sZW5ndGgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN1dGlscy5oIGIvaW5jbHVkZS9hY3BpL2FjdXRpbHMuaAppbmRleCA2OWY4ODg4Li5kODMwN2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN1dGlscy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3V0aWxzLmgKQEAgLTExMCw3ICsxMTAsNyBAQAogLyoKICAqIHV0Z2xvYmFsIC0gR2xvYmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgcHJvY2VkdXJlcwogICovCi12b2lkIGFjcGlfdXRfaW5pdF9nbG9iYWxzKHZvaWQpOworYWNwaV9zdGF0dXMgYWNwaV91dF9pbml0X2dsb2JhbHModm9pZCk7CiAKICNpZiBkZWZpbmVkKEFDUElfREVCVUdfT1VUUFVUKSB8fCBkZWZpbmVkKEFDUElfREVCVUdHRVIpCiAKQEAgLTEyNiw2ICsxMjYsOCBAQAogCiBjaGFyICphY3BpX3V0X2dldF9kZXNjcmlwdG9yX25hbWUodm9pZCAqb2JqZWN0KTsKIAorY29uc3QgY2hhciAqYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0KTsKKwogY2hhciAqYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYyk7CiAKIGNoYXIgKmFjcGlfdXRfZ2V0X3JlZ2lvbl9uYW1lKHU4IHNwYWNlX2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCmluZGV4IDlhZjQ2NDUuLjAyOWM4YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtMTM3LDQgKzEzOCw5IEBACiAjZGVmaW5lIEFDUElfQUxMT0NBVEVfWkVST0VEKGEpCWFjcGlfb3NfYWxsb2NhdGVfemVyb2VkKGEpCiAjZGVmaW5lIEFDUElfRlJFRShhKQkJa2ZyZWUoYSkKIAorLyoKKyAqIFdlIG5lZWQgdG8gc2hvdyB3aGVyZSBpdCBpcyBzYWZlIHRvIHByZWVtcHQgZXhlY3V0aW9uIG9mIEFDUElDQQorICovCisjZGVmaW5lIEFDUElfUFJFRU1QVElPTl9QT0lOVCgpCWNvbmRfcmVzY2hlZCgpCisKICNlbmRpZgkJCQkvKiBfX0FDTElOVVhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1jcmlzL3RocmVhZF9pbmZvLmgKaW5kZXggN2VmZTEwMC4uY2VlOTdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaApAQCAtODgsNiArODgsNyBAQAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLwogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTYJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTcKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTgJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtOTUsNiArOTYsNyBAQAogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KICNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJMHgwMDAwRkZGRgkvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdS1zcGFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmluZGV4IDdlYmNjNTYuLjM2MTA3NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKQEAgLTE4LDE1ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBzb21lIGJpdHMgbmVlZGVkIGZvciBwYXJ0cyBvZiB0aGUgSURFIHN1YnN5c3RlbSB0byBjb21waWxlCi0gKi8KLSNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKQlpbnN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIGFkZHIsIG4pCi0jZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJaW5zbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKQlvdXRzdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKQlvdXRzbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCAwZjZkYWJkLi4xMmMwN2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgX19XQVJOKCkgd2Fybl9vbl9zbG93cGF0aChfX0ZJTEVfXywgX19MSU5FX18pCiAjZGVmaW5lIF9fV0FSTl9wcmludGYoYXJnLi4uKSB3YXJuX3Nsb3dwYXRoKF9fRklMRV9fLCBfX0xJTkVfXywgYXJnKQogI2Vsc2UKLSNkZWZpbmUgX19XQVJOX3ByaW50ZihhcmcuLi4pIF9fV0FSTigpCisjZGVmaW5lIF9fV0FSTl9wcmludGYoYXJnLi4uKSBkbyB7IHByaW50ayhhcmcpOyBfX1dBUk4oKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWZuZGVmIFdBUk5fT04KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LWRlYy5oCmluZGV4IGVkMTA4YmUuLmYxMDRhZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1kZWMuaApAQCAtMjIsOCArMjIsNiBAQAogewogCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybihjb3VudCkgPCAwKSkKIAkJZmFpbF9mbihjb3VudCk7Ci0JZWxzZQotCQlzbXBfbWIoKTsKIH0KIAogLyoqCkBAIC00MSwxMCArMzksNyBAQAogewogCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybihjb3VudCkgPCAwKSkKIAkJcmV0dXJuIGZhaWxfZm4oY291bnQpOwotCWVsc2UgewotCQlzbXBfbWIoKTsKLQkJcmV0dXJuIDA7Ci0JfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTYzLDcgKzU4LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19tdXRleF9mYXN0cGF0aF91bmxvY2soYXRvbWljX3QgKmNvdW50LCB2b2lkICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7Ci0Jc21wX21iKCk7CiAJaWYgKHVubGlrZWx5KGF0b21pY19pbmNfcmV0dXJuKGNvdW50KSA8PSAwKSkKIAkJZmFpbF9mbihjb3VudCk7CiB9CkBAIC04OCwyNSArODIsOSBAQAogc3RhdGljIGlubGluZSBpbnQKIF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQogewotCS8qCi0JICogV2UgaGF2ZSB0d28gdmFyaWFudHMgaGVyZS4gVGhlIGNtcHhjaGcgYmFzZWQgb25lIGlzIHRoZSBiZXN0IG9uZQotCSAqIGJlY2F1c2UgaXQgbmV2ZXIgaW5kdWNlIGEgZmFsc2UgY29udGVudGlvbiBzdGF0ZS4gIEl0IGlzIGluY2x1ZGVkCi0JICogaGVyZSBiZWNhdXNlIGFyY2hpdGVjdHVyZXMgdXNpbmcgdGhlIGluYy9kZWMgYWxnb3JpdGhtcyBvdmVyIHRoZQotCSAqIHhjaGcgb25lcyBhcmUgbXVjaCBtb3JlIGxpa2VseSB0byBzdXBwb3J0IGNtcHhjaGcgbmF0aXZlbHkuCi0JICoKLQkgKiBJZiBub3Qgd2UgZmFsbCBiYWNrIHRvIHRoZSBzcGlubG9jayBiYXNlZCB2YXJpYW50IC0gdGhhdCBpcwotCSAqIGp1c3QgYXMgZWZmaWNpZW50IChhbmQgc2ltcGxlcikgYXMgYSAnZGVzdHJ1Y3RpdmUnIHByb2Jpbmcgb2YKLQkgKiB0aGUgbXV0ZXggc3RhdGUgd291bGQgYmUuCi0JICovCi0jaWZkZWYgX19IQVZFX0FSQ0hfQ01QWENIRwotCWlmIChsaWtlbHkoYXRvbWljX2NtcHhjaGcoY291bnQsIDEsIDApID09IDEpKSB7Ci0JCXNtcF9tYigpOworCWlmIChsaWtlbHkoYXRvbWljX2NtcHhjaGcoY291bnQsIDEsIDApID09IDEpKQogCQlyZXR1cm4gMTsKLQl9CiAJcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiBmYWlsX2ZuKGNvdW50KTsKLSNlbmRpZgogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC14Y2hnLmgKaW5kZXggN2I5Y2QyYy4uNTgwYTZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC14Y2hnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC14Y2hnLmgKQEAgLTI3LDggKzI3LDYgQEAKIHsKIAlpZiAodW5saWtlbHkoYXRvbWljX3hjaGcoY291bnQsIDApICE9IDEpKQogCQlmYWlsX2ZuKGNvdW50KTsKLQllbHNlCi0JCXNtcF9tYigpOwogfQogCiAvKioKQEAgLTQ2LDEwICs0NCw3IEBACiB7CiAJaWYgKHVubGlrZWx5KGF0b21pY194Y2hnKGNvdW50LCAwKSAhPSAxKSkKIAkJcmV0dXJuIGZhaWxfZm4oY291bnQpOwotCWVsc2UgewotCQlzbXBfbWIoKTsKLQkJcmV0dXJuIDA7Ci0JfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTY3LDcgKzYyLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19tdXRleF9mYXN0cGF0aF91bmxvY2soYXRvbWljX3QgKmNvdW50LCB2b2lkICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7Ci0Jc21wX21iKCk7CiAJaWYgKHVubGlrZWx5KGF0b21pY194Y2hnKGNvdW50LCAxKSAhPSAwKSkKIAkJZmFpbF9mbihjb3VudCk7CiB9CkBAIC0xMTAsNyArMTA0LDYgQEAKIAkJaWYgKHByZXYgPCAwKQogCQkJcHJldiA9IDA7CiAJfQotCXNtcF9tYigpOwogCiAJcmV0dXJuIHByZXY7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3J0Yy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ydGMuaAppbmRleCA3MWVmM2YwLi44OTA2MWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3J0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmgKQEAgLTg0LDEyICs4NCwxMiBAQAogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQogCXsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9zZWMpOwotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX21pbik7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1faG91cik7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1fbWRheSk7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1fbW9uKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV95ZWFyKTsKKwkJdGltZS0+dG1fc2VjID0gYmNkMmJpbih0aW1lLT50bV9zZWMpOworCQl0aW1lLT50bV9taW4gPSBiY2QyYmluKHRpbWUtPnRtX21pbik7CisJCXRpbWUtPnRtX2hvdXIgPSBiY2QyYmluKHRpbWUtPnRtX2hvdXIpOworCQl0aW1lLT50bV9tZGF5ID0gYmNkMmJpbih0aW1lLT50bV9tZGF5KTsKKwkJdGltZS0+dG1fbW9uID0gYmNkMmJpbih0aW1lLT50bV9tb24pOworCQl0aW1lLT50bV95ZWFyID0gYmNkMmJpbih0aW1lLT50bV95ZWFyKTsKIAl9CiAKICNpZmRlZiBDT05GSUdfTUFDSF9ERUNTVEFUSU9OCkBAIC0xNTksMTIgKzE1OSwxMiBAQAogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpCiAJICAgIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJJTl9UT19CQ0Qoc2VjKTsKLQkJQklOX1RPX0JDRChtaW4pOwotCQlCSU5fVE9fQkNEKGhycyk7Ci0JCUJJTl9UT19CQ0QoZGF5KTsKLQkJQklOX1RPX0JDRChtb24pOwotCQlCSU5fVE9fQkNEKHlycyk7CisJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJbWluID0gYmluMmJjZChtaW4pOworCQlocnMgPSBiaW4yYmNkKGhycyk7CisJCWRheSA9IGJpbjJiY2QoZGF5KTsKKwkJbW9uID0gYmluMmJjZChtb24pOworCQl5cnMgPSBiaW4yYmNkKHlycyk7CiAJfQogCiAJc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCA3NGM1ZmFmLi44MDc0NDYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC0zNyw2ICszNywxMyBAQAogI2RlZmluZSBNRU1fRElTQ0FSRChzZWMpICooLm1lbSMjc2VjKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKKyNkZWZpbmUgTUNPVU5UX1JFQygpCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfbWNvdW50X2xvYykgPSAuOyBcCisJCQkqKF9fbWNvdW50X2xvYykJCQkJXAorCQkJVk1MSU5VWF9TWU1CT0woX19zdG9wX21jb3VudF9sb2MpID0gLjsKKyNlbHNlCisjZGVmaW5lIE1DT1VOVF9SRUMoKQorI2VuZGlmCiAKIC8qIC5kYXRhIHNlY3Rpb24gKi8KICNkZWZpbmUgREFUQV9EQVRBCQkJCQkJCVwKQEAgLTUyLDcgKzU5LDEwIEBACiAJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCiAJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX21hcmtlcnMpID0gLjsJCQkJXAogCSooX19tYXJrZXJzKQkJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdG9wX19fbWFya2VycykgPSAuOworCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX21hcmtlcnMpID0gLjsJCQkJXAorCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKKwkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAorCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzKSA9IC47CiAKICNkZWZpbmUgUk9fREFUQShhbGlnbikJCQkJCQkJXAogCS4gPSBBTElHTigoYWxpZ24pKTsJCQkJCQlcCkBAIC02MSw2ICs3MSw3IEBACiAJCSooLnJvZGF0YSkgKigucm9kYXRhLiopCQkJCQlcCiAJCSooX192ZXJtYWdpYykJCS8qIEtlcm5lbCB2ZXJzaW9uIG1hZ2ljICovCVwKIAkJKihfX21hcmtlcnNfc3RyaW5ncykJLyogTWFya2Vyczogc3RyaW5ncyAqLwkJXAorCQkqKF9fdHJhY2Vwb2ludHNfc3RyaW5ncykvKiBUcmFjZXBvaW50czogc3RyaW5ncyAqLwlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS5yb2RhdGExICAgICAgICAgIDogQVQoQUREUigucm9kYXRhMSkgLSBMT0FEX09GRlNFVCkgewkJXApAQCAtMTg4LDYgKzE5OSw3IEBACiAJLyogX18qaW5pdCBzZWN0aW9ucyAqLwkJCQkJCVwKIAlfX2luaXRfcm9kYXRhIDogQVQoQUREUihfX2luaXRfcm9kYXRhKSAtIExPQURfT0ZGU0VUKSB7CQlcCiAJCSooLnJlZi5yb2RhdGEpCQkJCQkJXAorCQlNQ09VTlRfUkVDKCkJCQkJCQlcCiAJCURFVl9LRUVQKGluaXQucm9kYXRhKQkJCQkJXAogCQlERVZfS0VFUChleGl0LnJvZGF0YSkJCQkJCVwKIAkJQ1BVX0tFRVAoaW5pdC5yb2RhdGEpCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9pZGUuaAppbmRleCAxZGFmNmNiLi5iOTk2YTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKQEAgLTkyLDE1ICs5Miw2IEBACiAjZGVmaW5lIG91dHN3X3N3YXB3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzd19zd2FwdygodTE2ICopcG9ydCwgYWRkciwgbikKICNlbmRpZgogCi0KLS8qIFE0MCBhbmQgQXRhcmkgaGF2ZSBieXRlc3dhcHBlZCBJREUgYnVzc2VzIGFuZCBzaW5jZSBtYW55IGludGVyZXN0aW5nCi0gKiB2YWx1ZXMgaW4gdGhlIGlkZW50aWZpY2F0aW9uIHN0cmluZyBhcmUgdGV4dCwgY2hhcnMgYW5kIHdvcmRzIHRoZXkKLSAqIGhhcHBlbmVkIHRvIGJlIGFsbW9zdCBjb3JyZWN0IHdpdGhvdXQgc3dhcHBpbmcuLiBIb3dldmVyICpfY2FwYWNpdHkKLSAqIGlzIG5lZWRlZCBmb3IgZHJpdmVzIG92ZXIgOCBHQi4gUlogKi8KLSNpZiBkZWZpbmVkKENPTkZJR19RNDApIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKQotI2RlZmluZSBNNjhLX0lERV9TV0FQVyAgKE1BQ0hfSVNfUTQwIHx8IE1BQ0hfSVNfQVRBUkkpCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUKICNkZWZpbmUgSURFX0FSQ0hfTE9DSwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaGRlcC5oCmluZGV4IDI2ZDJiOTEuLjU2MzdkY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvbWFjaGRlcC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaGRlcC5oCkBAIC0xNCw3ICsxNCw3IEBACiAvKiBtYWNoaW5lIGRlcGVuZGVudCBpcnEgZnVuY3Rpb25zICovCiBleHRlcm4gdm9pZCAoKm1hY2hfaW5pdF9JUlEpICh2b2lkKTsKIGV4dGVybiB2b2lkICgqbWFjaF9nZXRfbW9kZWwpIChjaGFyICptb2RlbCk7Ci1leHRlcm4gaW50ICgqbWFjaF9nZXRfaGFyZHdhcmVfbGlzdCkgKGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gdm9pZCAoKm1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QpIChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwogLyogbWFjaGluZSBkZXBlbmRlbnQgdGltZXIgZnVuY3Rpb25zICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyAoKm1hY2hfZ2V0dGltZW9mZnNldCkodm9pZCk7CiBleHRlcm4gaW50ICgqbWFjaF9od2NsaykoaW50LCBzdHJ1Y3QgcnRjX3RpbWUqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaAppbmRleCBhYmMwMDI3Li5hZjBmZGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oCkBAIC01Miw1ICs1Miw2IEBACiAjZGVmaW5lIFRJRl9ERUxBWUVEX1RSQUNFCTE0CS8qIHNpbmdsZSBzdGVwIGEgc3lzY2FsbCAqLwogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkxNQkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxNgorI2RlZmluZSBUSUZfRlJFRVpFCQkxNwkvKiB0aHJlYWQgaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2VuZGlmCS8qIF9BU01fTTY4S19USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZGV2aWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4Zjk4NzIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2RldmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0vKgotICogQXJjaCBzcGVjaWZpYyBleHRlbnNpb25zIHRvIHN0cnVjdCBkZXZpY2UKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyCi0gKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kZXZpY2UuaD4KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZW1lcmdlbmN5LXJlc3RhcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4ZDhjNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZW1lcmdlbmN5LXJlc3RhcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfQVNNX0VNRVJHRU5DWV9SRVNUQVJUX0gKLSNkZWZpbmUgX0FTTV9FTUVSR0VOQ1lfUkVTVEFSVF9ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lbWVyZ2VuY3ktcmVzdGFydC5oPgotCi0jZW5kaWYgLyogX0FTTV9FTUVSR0VOQ1lfUkVTVEFSVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNDZlZjcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgIExpbnVzIFRvcnZhbGRzICYgYXV0aG9ycwotICovCi0KLS8qCi0gKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBQQVJJU0MgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIElERSBjb2RlLgotICovCi0KLSNpZm5kZWYgX19BU01fUEFSSVNDX0lERV9ICi0jZGVmaW5lIF9fQVNNX1BBUklTQ19JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jZGVmaW5lIGlkZV9yZXF1ZXN0X2lycShpcnEsaGFuZCxmbGcsZGV2LGlkKQlyZXF1ZXN0X2lycSgoaXJxKSwoaGFuZCksKGZsZyksKGRldiksKGlkKSkKLSNkZWZpbmUgaWRlX2ZyZWVfaXJxKGlycSxkZXZfaWQpCQlmcmVlX2lycSgoaXJxKSwgKGRldl9pZCkpCi0jZGVmaW5lIGlkZV9yZXF1ZXN0X3JlZ2lvbihmcm9tLGV4dGVudCxuYW1lKQlyZXF1ZXN0X3JlZ2lvbigoZnJvbSksIChleHRlbnQpLCAobmFtZSkpCi0jZGVmaW5lIGlkZV9yZWxlYXNlX3JlZ2lvbihmcm9tLGV4dGVudCkJCXJlbGVhc2VfcmVnaW9uKChmcm9tKSwgKGV4dGVudCkpCi0vKiBHZW5lcmljIEkvTyBhbmQgTUVNSU8gc3RyaW5nIG9wZXJhdGlvbnMuICAqLwotCi0jZGVmaW5lIF9faWRlX2luc3cJaW5zdwotI2RlZmluZSBfX2lkZV9pbnNsCWluc2wKLSNkZWZpbmUgX19pZGVfb3V0c3cJb3V0c3cKLSNkZWZpbmUgX19pZGVfb3V0c2wJb3V0c2wKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2lkZV9tbV9pbnN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQotewotCXdoaWxlIChjb3VudC0tKSB7Ci0JCSoodTE2ICopYWRkciA9IF9fcmF3X3JlYWR3KHBvcnQpOwotCQlhZGRyICs9IDI7Ci0JfQotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9faWRlX21tX2luc2wodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCi17Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJKih1MzIgKilhZGRyID0gX19yYXdfcmVhZGwocG9ydCk7Ci0JCWFkZHIgKz0gNDsKLQl9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19pZGVfbW1fb3V0c3codm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCi17Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJX19yYXdfd3JpdGV3KCoodTE2ICopYWRkciwgcG9ydCk7Ci0JCWFkZHIgKz0gMjsKLQl9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19pZGVfbW1fb3V0c2wodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCi17Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJX19yYXdfd3JpdGVsKCoodTMyICopYWRkciwgcG9ydCk7Ci0JCWFkZHIgKz0gNDsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBfX0FTTV9QQVJJU0NfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnFfcmVncy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lycV9yZWdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZDljMGIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lycV9yZWdzLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXJxX3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9rZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjZTFiMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mva2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMva2RlYnVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tdXRleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NThjMWY3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tdXRleC5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0vKgotICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgotICoKLSAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYwotICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYwotICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQotICovCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhYTc5NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NTcgKzAsMCBAQAotI2lmbmRlZiBfUEFSSVNDX1BEQ19ICi0jZGVmaW5lIF9QQVJJU0NfUERDX0gKLQotLyoKLSAqCVBEQyByZXR1cm4gdmFsdWVzIC4uLgotICoJQWxsIFBEQyBjYWxscyByZXR1cm4gYSBzdWJzZXQgb2YgdGhlc2UgZXJyb3JzLiAKLSAqLwotCi0jZGVmaW5lIFBEQ19XQVJOCQkgIDMJLyogQ2FsbCBjb21wbGV0ZWQgd2l0aCBhIHdhcm5pbmcgKi8KLSNkZWZpbmUgUERDX1JFUV9FUlJfMQkJICAyCS8qIFNlZSBhYm92ZQkJCSAqLwotI2RlZmluZSBQRENfUkVRX0VSUl8wCQkgIDEJLyogQ2FsbCB3b3VsZCBnZW5lcmF0ZSBhIHJlcXVlc3RvciBlcnJvciAqLwotI2RlZmluZSBQRENfT0sJCQkgIDAJLyogQ2FsbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CSovCi0jZGVmaW5lIFBEQ19CQURfUFJPQwkJIC0xCS8qIENhbGxlZCBub24tZXhpc3RlbnQgcHJvY2VkdXJlKi8KLSNkZWZpbmUgUERDX0JBRF9PUFRJT04JCSAtMgkvKiBDYWxsZWQgd2l0aCBub24tZXhpc3RlbnQgb3B0aW9uICovCi0jZGVmaW5lIFBEQ19FUlJPUgkJIC0zCS8qIENhbGwgY291bGQgbm90IGNvbXBsZXRlIHdpdGhvdXQgYW4gZXJyb3IgKi8KLSNkZWZpbmUgUERDX05FX01PRAkJIC01CS8qIE1vZHVsZSBub3QgZm91bmQJCSovCi0jZGVmaW5lIFBEQ19ORV9DRUxMX01PRAkJIC03CS8qIENlbGwgbW9kdWxlIG5vdCBmb3VuZAkqLwotI2RlZmluZSBQRENfSU5WQUxJRF9BUkcJCS0xMAkvKiBDYWxsZWQgd2l0aCBhbiBpbnZhbGlkIGFyZ3VtZW50ICovCi0jZGVmaW5lIFBEQ19CVVNfUE9XX1dBUk4JLTEyCS8qIENhbGwgY291bGQgbm90IGNvbXBsZXRlIGluIGFsbG93ZWQgcG93ZXIgYnVkZ2V0ICovCi0jZGVmaW5lIFBEQ19OT1RfTkFSUk9XCQktMTcJLyogTmFycm93IG1vZGUgbm90IHN1cHBvcnRlZAkqLwotCi0vKgotICoJUERDIGVudHJ5IHBvaW50cy4uLgotICovCi0KLSNkZWZpbmUgUERDX1BPV19GQUlMCTEJCS8qIHBlcmZvcm0gYSBwb3dlci1mYWlsCQkqLwotI2RlZmluZSBQRENfUE9XX0ZBSUxfUFJFUEFSRQkwCS8qIHByZXBhcmUgZm9yIHBvd2VyZmFpbAkqLwotCi0jZGVmaW5lIFBEQ19DSEFTU0lTCTIJCS8qIFBEQy1jaGFzc2lzIGZ1bmN0aW9ucwkqLwotI2RlZmluZSBQRENfQ0hBU1NJU19ESVNQCTAJLyogdXBkYXRlIGNoYXNzaXMgZGlzcGxheQkqLwotI2RlZmluZSBQRENfQ0hBU1NJU19XQVJOCTEJLyogcmV0dXJuIGNoYXNzaXMgd2FybmluZ3MJKi8KLSNkZWZpbmUgUERDX0NIQVNTSVNfRElTUFdBUk4JMgkvKiB1cGRhdGUmcmV0dXJuIGNoYXNzaXMgc3RhdHVzICovCi0jZGVmaW5lIFBEQ19SRVRVUk5fQ0hBU1NJU19JTkZPIDEyOAkvKiBIVkVSU0lPTiBkZXBlbmRlbnQ6IHJldHVybiBjaGFzc2lzIExFRC9MQ0QgaW5mbyAgKi8KLQotI2RlZmluZSBQRENfUElNICAgICAgICAgMyAgICAgICAgICAgICAgIC8qIEdldCBQSU0gZGF0YSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUERDX1BJTV9IUE1DICAgICAgICAgICAgMCAgICAgICAvKiBUcmFuc2ZlciBIUE1DIGRhdGEgICAgICAgICAgICovCi0jZGVmaW5lIFBEQ19QSU1fUkVUVVJOX1NJWkUgICAgIDEgICAgICAgLyogR2V0IE1heCBidWZmZXIgbmVlZGVkIGZvciBQSU0qLwotI2RlZmluZSBQRENfUElNX0xQTUMgICAgICAgICAgICAyICAgICAgIC8qIFRyYW5zZmVyIEhQTUMgZGF0YSAgICAgICAgICAgKi8KLSNkZWZpbmUgUERDX1BJTV9TT0ZUX0JPT1QgICAgICAgMyAgICAgICAvKiBUcmFuc2ZlciBTb2Z0IEJvb3QgZGF0YSAgICAgICovCi0jZGVmaW5lIFBEQ19QSU1fVE9DICAgICAgICAgICAgIDQgICAgICAgLyogVHJhbnNmZXIgVE9DIGRhdGEgICAgICAgICAgICAqLwotCi0jZGVmaW5lIFBEQ19NT0RFTAk0CQkvKiBQREMgbW9kZWwgaW5mb3JtYXRpb24gY2FsbAkqLwotI2RlZmluZSBQRENfTU9ERUxfSU5GTwkJMAkvKiByZXR1cm5zIGluZm9ybWF0aW9uIAkJKi8KLSNkZWZpbmUgUERDX01PREVMX0JPT1RJRAkxCS8qIHNldCB0aGUgQk9PVF9JRAkJKi8KLSNkZWZpbmUgUERDX01PREVMX1ZFUlNJT05TCTIJLyogcmV0dXJucyBjcHUtaW50ZXJuYWwgdmVyc2lvbnMqLwotI2RlZmluZSBQRENfTU9ERUxfU1lTTU9ERUwJMwkvKiByZXR1cm4gc3lzdGVtIG1vZGVsIGluZm8JKi8KLSNkZWZpbmUgUERDX01PREVMX0VOU1BFQwk0CS8qIGVuYWJsZSBzcGVjaWZpYyBvcHRpb24JKi8KLSNkZWZpbmUgUERDX01PREVMX0RJU1BFQwk1CS8qIGRpc2FibGUgc3BlY2lmaWMgb3B0aW9uCSovCi0jZGVmaW5lIFBEQ19NT0RFTF9DUFVfSUQJNgkvKiByZXR1cm5zIGNwdS1pZCAob25seSBuZXdlciBtYWNoaW5lcyEpICovCi0jZGVmaW5lIFBEQ19NT0RFTF9DQVBBQklMSVRJRVMJNwkvKiByZXR1cm5zIE9TMzIvT1M2NC1mbGFncwkqLwotLyogVmFsdWVzIGZvciBQRENfTU9ERUxfQ0FQQUJJTElUSUVTIG5vbi1lcXVpdmFsZW50IHZpcnR1YWwgYWxpYXNpbmcgc3VwcG9ydCAqLwotI2RlZmluZSAgUERDX01PREVMX0lPUERJUl9GREMJCSgxIDw8IDIpCi0jZGVmaW5lICBQRENfTU9ERUxfTlZBX01BU0sJCSgzIDw8IDQpCi0jZGVmaW5lICBQRENfTU9ERUxfTlZBX1NVUFBPUlRFRAkoMCA8PCA0KQotI2RlZmluZSAgUERDX01PREVMX05WQV9TTE9XCQkoMSA8PCA0KQotI2RlZmluZSAgUERDX01PREVMX05WQV9VTlNVUFBPUlRFRAkoMyA8PCA0KQotI2RlZmluZSBQRENfTU9ERUxfR0VUX0JPT1RfX09QCTgJLyogcmV0dXJucyBib290IHRlc3Qgb3B0aW9ucwkqLwotI2RlZmluZSBQRENfTU9ERUxfU0VUX0JPT1RfX09QCTkJLyogc2V0IGJvb3QgdGVzdCBvcHRpb25zCSovCi0KLSNkZWZpbmUgUEE4OV9JTlNUUlVDVElPTl9TRVQJMHg0CS8qIGNhcGF0aWJpbGllcyByZXR1cm5lZAkqLwotI2RlZmluZSBQQTkwX0lOU1RSVUNUSU9OX1NFVAkweDgKLQotI2RlZmluZSBQRENfQ0FDSEUJNQkJLyogcmV0dXJuL3NldCBjYWNoZSAoJiBUTEIpIGluZm8qLwotI2RlZmluZSBQRENfQ0FDSEVfSU5GTwkJMAkvKiByZXR1cm5zIGluZm9ybWF0aW9uIAkJKi8KLSNkZWZpbmUgUERDX0NBQ0hFX1NFVF9DT0gJMQkvKiBzZXQgY29oZXJlbmNlIHN0YXRlCQkqLwotI2RlZmluZSBQRENfQ0FDSEVfUkVUX1NQSUQJMgkvKiByZXR1cm5zIHNwYWNlLUlEIGJpdHMJKi8KLQotI2RlZmluZSBQRENfSFBBCQk2CQkvKiByZXR1cm4gSFBBIG9mIHByb2Nlc3NvcgkqLwotI2RlZmluZSBQRENfSFBBX1BST0NFU1NPUgkwCi0jZGVmaW5lIFBEQ19IUEFfTU9EVUxFUwkJMQotCi0jZGVmaW5lIFBEQ19DT1BST0MJNwkJLyogQ28tUHJvY2Vzc29yICh1c3VhbGx5IEZQIHVuaXQocykpICovCi0jZGVmaW5lIFBEQ19DT1BST0NfQ0ZHCQkwCS8qIENvLVByb2Nlc3NvciBDZmcgKEZQIHVuaXQocykgZW5hYmxlZD8pICovCi0KLSNkZWZpbmUgUERDX0lPREMJOAkJLyogdGFsayB0byBJT0RDCQkJKi8KLSNkZWZpbmUgUERDX0lPRENfUkVBRAkJMAkvKiByZWFkIElPREMgZW50cnkgcG9pbnQJKi8KLS8qICAgICAgUERDX0lPRENfUklfCQkJICogSU5ERVggcGFyYW1ldGVyIG9mIFBEQ19JT0RDX1JFQUQgKi8KLSNkZWZpbmUgUERDX0lPRENfUklfREFUQV9CWVRFUwkwCS8qIElPREMgRGF0YSBCeXRlcwkJKi8KLS8qCQkJCTEsIDIJICAgb2Jzb2xldGUgLSBIVkVSU0lPTiBkZXBlbmRlbnQqLwotI2RlZmluZSBQRENfSU9EQ19SSV9JTklUCTMJLyogSW5pdGlhbGl6ZSBtb2R1bGUJCSovCi0jZGVmaW5lIFBEQ19JT0RDX1JJX0lPCQk0CS8qIE1vZHVsZSBpbnB1dC9vdXRwdXQJCSovCi0jZGVmaW5lIFBEQ19JT0RDX1JJX1NQQQkJNQkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLwotI2RlZmluZSBQRENfSU9EQ19SSV9DT05GSUcJNgkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLwotLyoJCQkJNwkgIG9ic29sZXRlIC0gSFZFUlNJT04gZGVwZW5kZW50ICovCi0jZGVmaW5lIFBEQ19JT0RDX1JJX1RFU1QJOAkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLwotI2RlZmluZSBQRENfSU9EQ19SSV9UTEIJCTkJLyogTW9kdWxlIGlucHV0L291dHB1dAkJKi8KLSNkZWZpbmUgUERDX0lPRENfTklOSVQJCTIJLyogbm9uLWRlc3RydWN0aXZlIGluaXQJCSovCi0jZGVmaW5lIFBEQ19JT0RDX0RJTklUCQkzCS8qIGRlc3RydWN0aXZlIGluaXQJCSovCi0jZGVmaW5lIFBEQ19JT0RDX01FTUVSUgkJNAkvKiBjaGVjayBmb3IgbWVtb3J5IGVycm9ycwkqLwotI2RlZmluZSBQRENfSU9EQ19JTkRFWF9EQVRBCTAJLyogZ2V0IGZpcnN0IDE2IGJ5dGVzIGZyb20gbW9kIElPREMgKi8KLSNkZWZpbmUgUERDX0lPRENfQlVTX0VSUk9SCS00CS8qIGJ1cyBlcnJvciByZXR1cm4gdmFsdWUJKi8KLSNkZWZpbmUgUERDX0lPRENfSU5WQUxJRF9JTkRFWAktNQkvKiBpbnZhbGlkIGluZGV4IHJldHVybiB2YWx1ZQkqLwotI2RlZmluZSBQRENfSU9EQ19DT1VOVAkJLTYJLyogY291bnQgaXMgdG9vIHNtYWxsCQkqLwotCi0jZGVmaW5lIFBEQ19UT0QJCTkJCS8qIHRpbWUtb2YtZGF5IGNsb2NrIChUT0QpCSovCi0jZGVmaW5lIFBEQ19UT0RfUkVBRAkJMAkvKiByZWFkIFRPRAkJCSovCi0jZGVmaW5lIFBEQ19UT0RfV1JJVEUJCTEJLyogd3JpdGUgVE9ECQkJKi8KLQotCi0jZGVmaW5lIFBEQ19TVEFCTEUJMTAJCS8qIHN0YWJsZSBzdG9yYWdlIChzcHJvY2tldHMpCSovCi0jZGVmaW5lIFBEQ19TVEFCTEVfUkVBRAkJMAotI2RlZmluZSBQRENfU1RBQkxFX1dSSVRFCTEKLSNkZWZpbmUgUERDX1NUQUJMRV9SRVRVUk5fU0laRQkyCi0jZGVmaW5lIFBEQ19TVEFCTEVfVkVSSUZZX0NPTlRFTlRTIDMKLSNkZWZpbmUgUERDX1NUQUJMRV9JTklUSUFMSVpFCTQKLQotI2RlZmluZSBQRENfTlZPTEFUSUxFCTExCQkvKiBvZnRlbiBub3QgaW1wbGVtZW50ZWQJKi8KLQotI2RlZmluZSBQRENfQUREX1ZBTElECTEyCQkvKiBNZW1vcnkgdmFsaWRhdGlvbiBQREMgY2FsbAkqLwotI2RlZmluZSBQRENfQUREX1ZBTElEX1ZFUklGWQkwCS8qIE1ha2UgUERDX0FERF9WQUxJRCB2ZXJpZnkgcmVnaW9uICovCi0KLSNkZWZpbmUgUERDX0lOU1RSCTE1CQkvKiBnZXQgaW5zdHIgdG8gaW52b2tlIFBEQ0VfQ0hFQ0soKSAqLwotCi0jZGVmaW5lIFBEQ19QUk9DCTE2CQkvKiAoc3Byb2NrZXRzKQkJCSovCi0KLSNkZWZpbmUgUERDX0NPTkZJRwkxNgkJLyogKHNwcm9ja2V0cykJCQkqLwotI2RlZmluZSBQRENfQ09ORklHX0RFQ09ORklHCTAKLSNkZWZpbmUgUERDX0NPTkZJR19EUkVDT05GSUcJMQotI2RlZmluZSBQRENfQ09ORklHX0RSRVRVUk5fQ09ORklHIDIKLQotI2RlZmluZSBQRENfQkxPQ0tfVExCCTE4CQkvKiBtYW5hZ2UgaGFyZHdhcmUgYmxvY2stVExCCSovCi0jZGVmaW5lIFBEQ19CVExCX0lORk8JCTAJLyogcmV0dXJucyBwYXJhbWV0ZXIgCQkqLwotI2RlZmluZSBQRENfQlRMQl9JTlNFUlQJCTEJLyogaW5zZXJ0IEJUTEIgZW50cnkJCSovCi0jZGVmaW5lIFBEQ19CVExCX1BVUkdFCQkyCS8qIHB1cmdlIEJUTEIgZW50cmllcyAJCSovCi0jZGVmaW5lIFBEQ19CVExCX1BVUkdFX0FMTAkzCS8qIHB1cmdlIGFsbCBCVExCIGVudHJpZXMgCSovCi0KLSNkZWZpbmUgUERDX1RMQgkJMTkJCS8qIG1hbmFnZSBoYXJkd2FyZSBUTEIgbWlzcyBoYW5kbGluZyAqLwotI2RlZmluZSBQRENfVExCX0lORk8JCTAJLyogcmV0dXJucyBwYXJhbWV0ZXIgCQkqLwotI2RlZmluZSBQRENfVExCX1NFVFVQCQkxCS8qIHNldCB1cCBtaXNzIGhhbmRsaW5nIAkqLwotCi0jZGVmaW5lIFBEQ19NRU0JCTIwCQkvKiBNYW5hZ2UgbWVtb3J5CQkqLwotI2RlZmluZSBQRENfTUVNX01FTUlORk8JCTAKLSNkZWZpbmUgUERDX01FTV9BRERfUEFHRQkxCi0jZGVmaW5lIFBEQ19NRU1fQ0xFQVJfUERUCTIKLSNkZWZpbmUgUERDX01FTV9SRUFEX1BEVAkzCi0jZGVmaW5lIFBEQ19NRU1fUkVTRVRfQ0xFQVIJNAotI2RlZmluZSBQRENfTUVNX0dPT0RNRU0JCTUKLSNkZWZpbmUgUERDX01FTV9UQUJMRQkJMTI4CS8qIE5vbiBjb250aWcgbWVtIG1hcCAoc3Byb2NrZXRzKSAqLwotI2RlZmluZSBQRENfTUVNX1JFVFVSTl9BRERSRVNTX1RBQkxFCVBEQ19NRU1fVEFCTEUKLSNkZWZpbmUgUERDX01FTV9HRVRfTUVNT1JZX1NZU1RFTV9UQUJMRVNfU0laRQkxMzEKLSNkZWZpbmUgUERDX01FTV9HRVRfTUVNT1JZX1NZU1RFTV9UQUJMRVMJMTMyCi0jZGVmaW5lIFBEQ19NRU1fR0VUX1BIWVNJQ0FMX0xPQ0FUSU9OX0ZST01fTUVNT1JZX0FERFJFU1MgMTMzCi0KLSNkZWZpbmUgUERDX01FTV9SRVRfU0JFX1JFUExBQ0VECTUJLyogUERDX01FTSByZXR1cm4gdmFsdWVzICovCi0jZGVmaW5lIFBEQ19NRU1fUkVUX0RVUExJQ0FURV9FTlRSWQk0Ci0jZGVmaW5lIFBEQ19NRU1fUkVUX0JVRl9TSVpFX1NNQUxMCTEKLSNkZWZpbmUgUERDX01FTV9SRVRfUERUX0ZVTEwJCS0xMQotI2RlZmluZSBQRENfTUVNX1JFVF9JTlZBTElEX1BIWVNJQ0FMX0xPQ0FUSU9OIH4wVUxMCi0KLSNkZWZpbmUgUERDX1BTVwkJMjEJCS8qIEdldC9TZXQgZGVmYXVsdCBTeXN0ZW0gTWFzayAgKi8KLSNkZWZpbmUgUERDX1BTV19NQVNLCQkwCS8qIFJldHVybiBtYXNrICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUERDX1BTV19HRVRfREVGQVVMVFMJMQkvKiBSZXR1cm4gZGVmYXVsdHMgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBEQ19QU1dfU0VUX0RFRkFVTFRTCTIJLyogU2V0IGRlZmF1bHQgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQRENfUFNXX0VORElBTl9CSVQJMQkvKiBzZXQgZm9yIGJpZyBlbmRpYW4gICAgICAgICAgICovCi0jZGVmaW5lIFBEQ19QU1dfV0lERV9CSVQJMgkvKiBzZXQgZm9yIHdpZGUgbW9kZSAgICAgICAgICAgICovIAotCi0jZGVmaW5lIFBEQ19TWVNURU1fTUFQCTIyCQkvKiBmaW5kIHN5c3RlbSBtb2R1bGVzCQkqLwotI2RlZmluZSBQRENfRklORF9NT0RVTEUgCTAKLSNkZWZpbmUgUERDX0ZJTkRfQUREUkVTUwkxCi0jZGVmaW5lIFBEQ19UUkFOU0xBVEVfUEFUSAkyCi0KLSNkZWZpbmUgUERDX1NPRlRfUE9XRVIJMjMJCS8qIHNvZnQgcG93ZXIgc3dpdGNoCQkqLwotI2RlZmluZSBQRENfU09GVF9QT1dFUl9JTkZPCTAJLyogcmV0dXJuIGluZm8gYWJvdXQgdGhlIHNvZnQgcG93ZXIgc3dpdGNoICovCi0jZGVmaW5lIFBEQ19TT0ZUX1BPV0VSX0VOQUJMRQkxCS8qIGVuYWJsZS9kaXNhYmxlIHNvZnQgcG93ZXIgc3dpdGNoICovCi0KLQotLyogSFZFUlNJT04gZGVwZW5kZW50ICovCi0KLS8qIFRoZSBQRENfTUVNX01BUCBjYWxscyAqLwotI2RlZmluZSBQRENfTUVNX01BUAkxMjgJCS8qIG9uIHM3MDA6IHJldHVybiBwYWdlIGluZm8JKi8KLSNkZWZpbmUgUERDX01FTV9NQVBfSFBBCQkwCS8qIHJldHVybnMgaHBhIG9mIGEgbW9kdWxlCSovCi0KLSNkZWZpbmUgUERDX0VFUFJPTQkxMjkJCS8qIEVFUFJPTSBhY2Nlc3MJCSovCi0jZGVmaW5lIFBEQ19FRVBST01fUkVBRF9XT1JECTAKLSNkZWZpbmUgUERDX0VFUFJPTV9XUklURV9XT1JECTEKLSNkZWZpbmUgUERDX0VFUFJPTV9SRUFEX0JZVEUJMgotI2RlZmluZSBQRENfRUVQUk9NX1dSSVRFX0JZVEUJMwotI2RlZmluZSBQRENfRUVQUk9NX0VFUFJPTV9QQVNTV09SRCAtMTAwMAotCi0jZGVmaW5lIFBEQ19OVk0JCTEzMAkJLyogTlZNIChub24tdm9sYXRpbGUgbWVtb3J5KSBhY2Nlc3MgKi8KLSNkZWZpbmUgUERDX05WTV9SRUFEX1dPUkQJMAotI2RlZmluZSBQRENfTlZNX1dSSVRFX1dPUkQJMQotI2RlZmluZSBQRENfTlZNX1JFQURfQllURQkyCi0jZGVmaW5lIFBEQ19OVk1fV1JJVEVfQllURQkzCi0KLSNkZWZpbmUgUERDX1NFRURfRVJST1IJMTMyCQkvKiAoc3Byb2NrZXRzKQkJCSovCi0KLSNkZWZpbmUgUERDX0lPCQkxMzUJCS8qIGxvZyBlcnJvciBpbmZvLCByZXNldCBJTyBzeXN0ZW0gKi8KLSNkZWZpbmUgUERDX0lPX1JFQURfQU5EX0NMRUFSX0VSUk9SUwkwCi0jZGVmaW5lIFBEQ19JT19SRVNFVAkJCTEKLSNkZWZpbmUgUERDX0lPX1JFU0VUX0RFVklDRVMJCTIKLS8qIHNldHMgYml0cyA2JjcgKGxpdHRsZSBlbmRpYW4pIG9mIHRoZSBIY0NvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUERDX0lPX1VTQl9TVVNQRU5ECTB4QzAwMDAwMDAwMDAwMDAwMAotI2RlZmluZSBQRENfSU9fRUVQUk9NX0lPX0VSUl9UQUJMRV9GVUxMCS01CS8qIHJldHVybiB2YWx1ZSAqLwotI2RlZmluZSBQRENfSU9fTk9fU1VTUEVORAkJLTYJLyogcmV0dXJuIHZhbHVlICovCi0KLSNkZWZpbmUgUERDX0JST0FEQ0FTVF9SRVNFVCAxMzYJCS8qIHJlc2V0IGFsbCBwcm9jZXNzb3JzCQkqLwotI2RlZmluZSBQRENfRE9fUkVTRVQJCTAJLyogb3B0aW9uOiBwZXJmb3JtIGEgYnJvYWRjYXN0IHJlc2V0ICovCi0jZGVmaW5lIFBEQ19ET19GSVJNX1RFU1RfUkVTRVQJMQkvKiBEbyBicm9hZGNhc3QgcmVzZXQgd2l0aCBiaXRtYXAgKi8KLSNkZWZpbmUgUERDX0JSX1JFQ09ORklHVVJBVElPTgkyCS8qIHJlc2V0IHcvcmVjb25maWd1cmF0aW9uCSovCi0jZGVmaW5lIFBEQ19GSVJNX1RFU1RfTUFHSUMJMHhhYjllYzM2ZlVMICAgIC8qIGZvciB0aGlzIHJlYm9vdCBvbmx5CSovCi0KLSNkZWZpbmUgUERDX0xBTl9TVEFUSU9OX0lEIDEzOAkJLyogSHZlcnNpb24gZGVwZW5kZW50IG1lY2hhbmlzbSBmb3IgKi8KLSNkZWZpbmUgUERDX0xBTl9TVEFUSU9OX0lEX1JFQUQJMAkvKiBnZXR0aW5nIHRoZSBsYW4gc3RhdGlvbiBhZGRyZXNzICAqLwotCi0jZGVmaW5lCVBEQ19MQU5fU1RBVElPTl9JRF9TSVpFCTYKLQotI2RlZmluZSBQRENfQ0hFQ0tfUkFOR0VTIDEzOQkJLyogKHNwcm9ja2V0cykJCQkqLwotCi0jZGVmaW5lIFBEQ19OVl9TRUNUSU9OUwkxNDEJCS8qIChzcHJvY2tldHMpCQkJKi8KLQotI2RlZmluZSBQRENfUEVSRk9STUFOQ0UJMTQyCQkvKiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCSovCi0KLSNkZWZpbmUgUERDX1NZU1RFTV9JTkZPCTE0MwkJLyogc3lzdGVtIGluZm9ybWF0aW9uCQkqLwotI2RlZmluZSBQRENfU1lTSU5GT19SRVRVUk5fSU5GT19TSVpFCTAKLSNkZWZpbmUgUERDX1NZU0lORk9fUlJFVFVSTl9TWVNfSU5GTwkxCi0jZGVmaW5lIFBEQ19TWVNJTkZPX1JSRVRVUk5fRVJST1JTCTIKLSNkZWZpbmUgUERDX1NZU0lORk9fUlJFVFVSTl9XQVJOSU5HUwkzCi0jZGVmaW5lIFBEQ19TWVNJTkZPX1JFVFVSTl9SRVZJU0lPTlMJNAotI2RlZmluZSBQRENfU1lTSU5GT19SUkVUVVJOX0RJQUdOT1NFCTUKLSNkZWZpbmUgUERDX1NZU0lORk9fUlJFVFVSTl9IVl9ESUFHTk9TRQkxMDA1Ci0KLSNkZWZpbmUgUERDX1JEUgkJMTQ0CQkvKiAoc3Byb2NrZXRzKQkJCSovCi0jZGVmaW5lIFBEQ19SRFJfUkVBRF9CVUZGRVIJMAotI2RlZmluZSBQRENfUkRSX1JFQURfU0lOR0xFCTEKLSNkZWZpbmUgUERDX1JEUl9XUklURV9TSU5HTEUJMgotCi0jZGVmaW5lIFBEQ19JTlRSSUdVRQkxNDUgCQkvKiAoc3Byb2NrZXRzKQkJCSovCi0jZGVmaW5lIFBEQ19JTlRSSUdVRV9XUklURV9CVUZGRVIgCSAwCi0jZGVmaW5lIFBEQ19JTlRSSUdVRV9HRVRfU0NSQVRDSF9CVUZTSVpFIDEKLSNkZWZpbmUgUERDX0lOVFJJR1VFX1NUQVJUX0NQVV9DT1VOVEVSUwkgMgotI2RlZmluZSBQRENfSU5UUklHVUVfU1RPUF9DUFVfQ09VTlRFUlMJIDMKLQotI2RlZmluZSBQRENfU1RJCQkxNDYgCQkvKiBTVEkgYWNjZXNzCQkJKi8KLS8qIHNhbWUgYXMgUERDX1BDSV9YWFggdmFsdWVzIChzZWUgYmVsb3cpICovCi0KLS8qIExlZ2FjeSBQREMgZGVmaW5pdGlvbnMgZm9yIHNhbWUgc3R1ZmYgKi8KLSNkZWZpbmUgUERDX1BDSV9JTkRFWAkxNDcKLSNkZWZpbmUgUERDX1BDSV9JTlRFUkZBQ0VfSU5GTwkJMAotI2RlZmluZSBQRENfUENJX1NMT1RfSU5GTwkJMQotI2RlZmluZSBQRENfUENJX0lORkxJR0hUX0JZVEVTCQkyCi0jZGVmaW5lIFBEQ19QQ0lfUkVBRF9DT05GSUcJCTMKLSNkZWZpbmUgUERDX1BDSV9XUklURV9DT05GSUcJCTQKLSNkZWZpbmUgUERDX1BDSV9SRUFEX1BDSV9JTwkJNQotI2RlZmluZSBQRENfUENJX1dSSVRFX1BDSV9JTwkJNgotI2RlZmluZSBQRENfUENJX1JFQURfQ09ORklHX0RFTEFZCTcKLSNkZWZpbmUgUERDX1BDSV9VUERBVEVfQ09ORklHX0RFTEFZCTgKLSNkZWZpbmUgUERDX1BDSV9QQ0lfUEFUSF9UT19QQ0lfSFBBCTkKLSNkZWZpbmUgUERDX1BDSV9QQ0lfSFBBX1RPX1BDSV9QQVRICTEwCi0jZGVmaW5lIFBEQ19QQ0lfUENJX1BBVEhfVE9fUENJX0JVUwkxMQotI2RlZmluZSBQRENfUENJX1BDSV9SRVNFUlZFRAkJMTIKLSNkZWZpbmUgUERDX1BDSV9QQ0lfSU5UX1JPVVRFX1NJWkUJMTMKLSNkZWZpbmUgUERDX1BDSV9HRVRfSU5UX1RCTF9TSVpFCVBEQ19QQ0lfUENJX0lOVF9ST1VURV9TSVpFCi0jZGVmaW5lIFBEQ19QQ0lfUENJX0lOVF9ST1VURQkJMTQKLSNkZWZpbmUgUERDX1BDSV9HRVRfSU5UX1RCTAkJUERDX1BDSV9QQ0lfSU5UX1JPVVRFIAotI2RlZmluZSBQRENfUENJX1JFQURfTU9OX1RZUEUJCTE1Ci0jZGVmaW5lIFBEQ19QQ0lfV1JJVEVfTU9OX1RZUEUJCTE2Ci0KLQotLyogR2V0IFNDU0kgSW50ZXJmYWNlIENhcmQgaW5mbzogIFNEVFIsIFNDU0kgSUQsIG1vZGUgKFNFIHZzIExWRCkgKi8KLSNkZWZpbmUgUERDX0lOSVRJQVRPUgkxNjMKLSNkZWZpbmUgUERDX0dFVF9JTklUSUFUT1IJMAotI2RlZmluZSBQRENfU0VUX0lOSVRJQVRPUgkxCi0jZGVmaW5lIFBEQ19ERUxFVEVfSU5JVElBVE9SCTIKLSNkZWZpbmUgUERDX1JFVFVSTl9UQUJMRV9TSVpFCTMKLSNkZWZpbmUgUERDX1JFVFVSTl9UQUJMRQk0Ci0KLSNkZWZpbmUgUERDX0xJTksJMTY1IAkJLyogKHNwcm9ja2V0cykJCQkqLwotI2RlZmluZSBQRENfTElOS19QQ0lfRU5UUllfUE9JTlRTCTAgIC8qIGxpc3QgKEFyZzEpID0gMCAqLwotI2RlZmluZSBQRENfTElOS19VU0JfRU5UUllfUE9JTlRTCTEgIC8qIGxpc3QgKEFyZzEpID0gMSAqLwotCi0vKiBjbF9jbGFzcwotICogcGFnZSAzLTMzIG9mIElPLUZpcm13YXJlIEFSUwotICogSU9EQyBFTlRSWV9JTklUKFNlYXJjaCBmaXJzdCkgUkVUWzFdCi0gKi8KLSNkZWZpbmUJQ0xfTlVMTAkJMAkvKiBpbnZhbGlkICovCi0jZGVmaW5lCUNMX1JBTkRPTQkxCS8qIHJhbmRvbSBhY2Nlc3MgKGFzIGRpc2spICovCi0jZGVmaW5lCUNMX1NFUVUJCTIJLyogc2VxdWVudGlhbCBhY2Nlc3MgKGFzIHRhcGUpICovCi0jZGVmaW5lCUNMX0RVUExFWAk3CS8qIGZ1bGwtZHVwbGV4IHBvaW50LXRvLXBvaW50IChSUy0yMzIsIE5ldCkgKi8KLSNkZWZpbmUJQ0xfS0VZQkQJOAkvKiBoYWxmLWR1cGxleCBjb25zb2xlIChISUwgS2V5Ym9hcmQpICovCi0jZGVmaW5lCUNMX0RJU1BMCTkJLyogaGFsZi1kdXBsZXggY29uc29sZSAoZGlzcGxheSkgKi8KLSNkZWZpbmUJQ0xfRkMJCTEwCS8qIEZpYmVyQ2hhbm5lbCBhY2Nlc3MgbWVkaWEgKi8KLQotLyogSU9EQyBFTlRSWV9JTklUKCkgKi8KLSNkZWZpbmUgRU5UUllfSU5JVF9TUkNIX0ZSU1QJMgotI2RlZmluZSBFTlRSWV9JTklUX1NSQ0hfTkVYVAkzCi0jZGVmaW5lIEVOVFJZX0lOSVRfTU9EX0RFVgk0Ci0jZGVmaW5lIEVOVFJZX0lOSVRfREVWCQk1Ci0jZGVmaW5lIEVOVFJZX0lOSVRfTU9ECQk2Ci0jZGVmaW5lIEVOVFJZX0lOSVRfTVNHCQk5Ci0KLS8qIElPREMgRU5UUllfSU8oKSAqLwotI2RlZmluZSBFTlRSWV9JT19CT09USU4JCTAKLSNkZWZpbmUgRU5UUllfSU9fQk9PVE9VVAkxCi0jZGVmaW5lIEVOVFJZX0lPX0NJTgkJMgotI2RlZmluZSBFTlRSWV9JT19DT1VUCQkzCi0jZGVmaW5lIEVOVFJZX0lPX0NMT1NFCQk0Ci0jZGVmaW5lIEVOVFJZX0lPX0dFVE1TRwkJOQotI2RlZmluZSBFTlRSWV9JT19CQkxPQ0tfSU4JMTYKLSNkZWZpbmUgRU5UUllfSU9fQkJMT0NLX09VVAkxNwotCi0vKiBJT0RDIEVOVFJZX1NQQSgpICovCi0KLS8qIElPREMgRU5UUllfQ09ORklHKCkgKi8KLQotLyogSU9EQyBFTlRSWV9URVNUKCkgKi8KLQotLyogSU9EQyBFTlRSWV9UTEIoKSAqLwotCi0vKiBjb25zdGFudHMgZm9yIE9TIChOVk0uLi4pICovCi0jZGVmaW5lIE9TX0lEX05PTkUJCTAJLyogVW5kZWZpbmVkIE9TIElECSovCi0jZGVmaW5lIE9TX0lEX0hQVVgJCTEJLyogSFAtVVggT1MJCSovCi0jZGVmaW5lIE9TX0lEX01QRVhMCQkyCS8qIE1QRSBYTCBPUwkJKi8KLSNkZWZpbmUgT1NfSURfT1NGCQkzCS8qIE9TRiBPUwkJKi8KLSNkZWZpbmUgT1NfSURfSFBSVAkJNAkvKiBIUC1SVCBPUwkJKi8KLSNkZWZpbmUgT1NfSURfTk9WRUwJCTUJLyogTk9WRUxMIE9TCQkqLwotI2RlZmluZSBPU19JRF9MSU5VWAkJNgkvKiBMaW51eAkJKi8KLQotCi0vKiBjb25zdGFudHMgZm9yIFBEQ19DSEFTU0lTICovCi0jZGVmaW5lIE9TVEFUX09GRgkJMAotI2RlZmluZSBPU1RBVF9GTFQJCTEgCi0jZGVmaW5lIE9TVEFUX1RFU1QJCTIKLSNkZWZpbmUgT1NUQVRfSU5JVAkJMwotI2RlZmluZSBPU1RBVF9TSFVUCQk0Ci0jZGVmaW5lIE9TVEFUX1dBUk4JCTUKLSNkZWZpbmUgT1NUQVRfUlVOCQk2Ci0jZGVmaW5lIE9TVEFUX09OCQk3Ci0KLS8qIFBhZ2UgWmVybyBjb25zdGFudCBvZmZzZXRzIHVzZWQgYnkgdGhlIEhQTUMgaGFuZGxlciAqLwotI2RlZmluZSBCT09UX0NPTlNPTEVfSFBBX09GRlNFVCAgMHgzYzAKLSNkZWZpbmUgQk9PVF9DT05TT0xFX1NQQV9PRkZTRVQgIDB4M2M0Ci0jZGVmaW5lIEJPT1RfQ09OU09MRV9QQVRIX09GRlNFVCAweDNhOAotCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLWV4dGVybiBpbnQgcGRjX3R5cGU7Ci0KLS8qIFZhbHVlcyBmb3IgcGRjX3R5cGUgKi8KLSNkZWZpbmUgUERDX1RZUEVfSUxMRUdBTAktMQotI2RlZmluZSBQRENfVFlQRV9QQVQJCSAwIC8qIDY0LWJpdCBQQVQtUERDICovCi0jZGVmaW5lIFBEQ19UWVBFX1NZU1RFTV9NQVAJIDEgLyogMzItYml0LCBidXQgc3VwcG9ydHMgUERDX1NZU1RFTV9NQVAgKi8KLSNkZWZpbmUgUERDX1RZUEVfU05BS0UJCSAyIC8qIERvZXNuJ3Qgc3VwcG9ydCBTWVNURU1fTUFQICovCi0KLXN0cnVjdCBwZGNfY2hhc3Npc19pbmZvIHsgICAgICAgLyogZm9yIFBEQ19DSEFTU0lTX0lORk8gKi8KLQl1bnNpZ25lZCBsb25nIGFjdGNudDsgICAvKiBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkICovCi0JdW5zaWduZWQgbG9uZyBtYXhjbnQ7ICAgLyogbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBiZSByZXR1cm5lZCAqLwotfTsKLQotc3RydWN0IHBkY19jb3Byb2NfY2ZnIHsgICAgICAgICAvKiBmb3IgUERDX0NPUFJPQ19DRkcgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyBjY3JfZnVuY3Rpb25hbDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjY3JfcHJlc2VudDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByZXZpc2lvbjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtb2RlbDsKLX07Ci0KLXN0cnVjdCBwZGNfbW9kZWwgewkJLyogZm9yIFBEQ19NT0RFTCAqLwotCXVuc2lnbmVkIGxvbmcgaHZlcnNpb247Ci0JdW5zaWduZWQgbG9uZyBzdmVyc2lvbjsKLQl1bnNpZ25lZCBsb25nIGh3X2lkOwotCXVuc2lnbmVkIGxvbmcgYm9vdF9pZDsKLQl1bnNpZ25lZCBsb25nIHN3X2lkOwotCXVuc2lnbmVkIGxvbmcgc3dfY2FwOwotCXVuc2lnbmVkIGxvbmcgYXJjaF9yZXY7Ci0JdW5zaWduZWQgbG9uZyBwb3Rfa2V5OwotCXVuc2lnbmVkIGxvbmcgY3Vycl9rZXk7Ci19OwotCi1zdHJ1Y3QgcGRjX2NhY2hlX2NmIHsJCS8qIGZvciBQRENfQ0FDSEUgIChJL0QtY2FjaGVzKSAqLwotICAgIHVuc2lnbmVkIGxvbmcKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJY2NfcGFkVzozMiwKLSNlbmRpZgotCQljY19hbGlhczogNCwJLyogYWxpYXMgYm91bmRhcmllcyBmb3IgdmlydHVhbCBhZGRyZXNzZXMgICAqLwotCQljY19ibG9jazogNCwJLyogdG8gZGV0ZXJtaW5lIG1vc3QgZWZmaWNpZW50IHN0cmlkZSAqLwotCQljY19saW5lCTogMywJLyogbWF4aW11bSBhbW91bnQgd3JpdHRlbiBiYWNrIGFzIGEgcmVzdWx0IG9mIHN0b3JlIChtdWx0aXBsZSBvZiAxNiBieXRlcykgKi8KLQkJY2Nfc2hpZnQ6IDIsCS8qIGhvdyBtdWNoIHRvIHNoaWZ0IGNjX2Jsb2NrIGxlZnQgKi8KLQkJY2Nfd3QJOiAxLAkvKiAwID0gV1QtRGNhY2hlLCAxID0gV0ItRGNhY2hlICovCi0JCWNjX3NoCTogMiwJLyogMCA9IHNlcGFyYXRlIEkvRC1jYWNoZSwgZWxzZSBzaGFyZWQgSS9ELWNhY2hlICovCi0JCWNjX2NzdCAgOiAzLAkvKiAwID0gaW5jb2hlcmVudCBELWNhY2hlLCAxPWNvaGVyZW50IEQtY2FjaGUgKi8KLQkJY2NfcGFkMSA6IDEwLAkvKiByZXNlcnZlZCAqLwotCQljY19odiAgIDogMzsJLyogaHZlcnNpb24gZGVwZW5kZW50ICovCi19OwotCi1zdHJ1Y3QgcGRjX3RsYl9jZiB7CQkvKiBmb3IgUERDX0NBQ0hFIChJL0QtVExCJ3MpICovCi0gICAgdW5zaWduZWQgbG9uZyB0Y19wYWQwOjEyLAkvKiByZXNlcnZlZCAqLwotI2lmZGVmIENPTkZJR182NEJJVAotCQl0Y19wYWRXOjMyLAotI2VuZGlmCi0JCXRjX3NoCTogMiwJLyogMCA9IHNlcGFyYXRlIEkvRC1UTEIsIGVsc2Ugc2hhcmVkIEkvRC1UTEIgKi8KLQkJdGNfaHYgICA6IDEsCS8qIEhWICovCi0JCXRjX3BhZ2UgOiAxLAkvKiAwID0gMksgcGFnZS1zaXplLW1hY2hpbmUsIDEgPSA0ayBwYWdlIHNpemUgKi8KLQkJdGNfY3N0ICA6IDMsCS8qIDAgPSBpbmNvaGVyZW50IG9wZXJhdGlvbnMsIGVsc2UgY29oZXJlbnQgb3BlcmF0aW9ucyAqLwotCQl0Y19haWQgIDogNSwJLyogSVRMQjogd2lkdGggb2YgYWNjZXNzIGlkcyBvZiBwcm9jZXNzb3IgKGVuY29kZWQhKSAqLwotCQl0Y19wYWQxIDogODsJLyogSVRMQjogd2lkdGggb2Ygc3BhY2UtcmVnaXN0ZXJzIChlbmNvZGVkKSAqLwotfTsKLQotc3RydWN0IHBkY19jYWNoZV9pbmZvIHsJCS8qIG1haW4tUERDX0NBQ0hFLXN0cnVjdHVyZSAoY2FjaGVzICYgVExCJ3MpICovCi0JLyogSS1jYWNoZSAqLwotCXVuc2lnbmVkIGxvbmcJaWNfc2l6ZTsJLyogc2l6ZSBpbiBieXRlcyAqLwotCXN0cnVjdCBwZGNfY2FjaGVfY2YgaWNfY29uZjsJLyogY29uZmlndXJhdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcJaWNfYmFzZTsJLyogYmFzZS1hZGRyICovCi0JdW5zaWduZWQgbG9uZwlpY19zdHJpZGU7Ci0JdW5zaWduZWQgbG9uZwlpY19jb3VudDsKLQl1bnNpZ25lZCBsb25nCWljX2xvb3A7Ci0JLyogRC1jYWNoZSAqLwotCXVuc2lnbmVkIGxvbmcJZGNfc2l6ZTsJLyogc2l6ZSBpbiBieXRlcyAqLwotCXN0cnVjdCBwZGNfY2FjaGVfY2YgZGNfY29uZjsJLyogY29uZmlndXJhdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcJZGNfYmFzZTsJLyogYmFzZS1hZGRyICovCi0JdW5zaWduZWQgbG9uZwlkY19zdHJpZGU7Ci0JdW5zaWduZWQgbG9uZwlkY19jb3VudDsKLQl1bnNpZ25lZCBsb25nCWRjX2xvb3A7Ci0JLyogSW5zdHJ1Y3Rpb24tVExCICovCi0JdW5zaWduZWQgbG9uZwlpdF9zaXplOwkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBJLVRMQiAqLwotCXN0cnVjdCBwZGNfdGxiX2NmIGl0X2NvbmY7CS8qIEktVExCLWNvbmZpZ3VyYXRpb24gKi8KLQl1bnNpZ25lZCBsb25nCWl0X3NwX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZwlpdF9zcF9zdHJpZGU7Ci0JdW5zaWduZWQgbG9uZwlpdF9zcF9jb3VudDsKLQl1bnNpZ25lZCBsb25nCWl0X29mZl9iYXNlOwotCXVuc2lnbmVkIGxvbmcJaXRfb2ZmX3N0cmlkZTsKLQl1bnNpZ25lZCBsb25nCWl0X29mZl9jb3VudDsKLQl1bnNpZ25lZCBsb25nCWl0X2xvb3A7Ci0JLyogZGF0YS1UTEIgKi8KLQl1bnNpZ25lZCBsb25nCWR0X3NpemU7CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIEQtVExCICovCi0Jc3RydWN0IHBkY190bGJfY2YgZHRfY29uZjsJLyogRC1UTEItY29uZmlndXJhdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcJZHRfc3BfYmFzZTsKLQl1bnNpZ25lZCBsb25nCWR0X3NwX3N0cmlkZTsKLQl1bnNpZ25lZCBsb25nCWR0X3NwX2NvdW50OwotCXVuc2lnbmVkIGxvbmcJZHRfb2ZmX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZwlkdF9vZmZfc3RyaWRlOwotCXVuc2lnbmVkIGxvbmcJZHRfb2ZmX2NvdW50OwotCXVuc2lnbmVkIGxvbmcJZHRfbG9vcDsKLX07Ci0KLSNpZiAwCi0vKiBJZiB5b3Ugc3RhcnQgdXNpbmcgdGhlIG5leHQgc3RydWN0LCB5b3UnbGwgaGF2ZSB0byBhZGp1c3QgaXQgdG8KLSAqIHdvcmsgd2l0aCA2NC1iaXQgZmlybXdhcmUgSSB0aGluayAtUEIKLSAqLwotc3RydWN0IHBkY19pb2RjIHsgICAgIC8qIFBEQ19JT0RDICovCi0JdW5zaWduZWQgY2hhciAgIGh2ZXJzaW9uX21vZGVsOwotCXVuc2lnbmVkIGNoYXIgCWh2ZXJzaW9uOwotCXVuc2lnbmVkIGNoYXIgCXNwYTsKLQl1bnNpZ25lZCBjaGFyIAl0eXBlOwotCXVuc2lnbmVkIGludAlzdmVyc2lvbl9yZXY6NDsKLQl1bnNpZ25lZCBpbnQJc3ZlcnNpb25fbW9kZWw6MTk7Ci0JdW5zaWduZWQgaW50CXN2ZXJzaW9uX29wdDo4OwotCXVuc2lnbmVkIGNoYXIJcmV2OwotCXVuc2lnbmVkIGNoYXIJZGVwOwotCXVuc2lnbmVkIGNoYXIJZmVhdHVyZXM7Ci0JdW5zaWduZWQgY2hhcglwYWQxOwotCXVuc2lnbmVkIGludAljaGVja3N1bToxNjsKLQl1bnNpZ25lZCBpbnQJbGVuZ3RoOjE2OwotCXVuc2lnbmVkIGludCAgICBwYWRbMTVdOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX1BBMjAKLS8qIG5vIEJMVEJzIGluIHBhMi4wIHByb2Nlc3NvcnMgKi8KLXN0cnVjdCBwZGNfYnRsYl9pbmZvX3JhbmdlIHsKLQlfX3U4IHJlczAwOwotCV9fdTggbnVtX2k7Ci0JX191OCBudW1fZDsKLQlfX3U4IG51bV9jb21iOwotfTsKLQotc3RydWN0IHBkY19idGxiX2luZm8gewkvKiBQRENfQkxPQ0tfVExCLCByZXR1cm4gb2YgUERDX0JUTEJfSU5GTyAqLwotCXVuc2lnbmVkIGludCBtaW5fc2l6ZTsJLyogbWluaW11bSBzaXplIG9mIEJUTEIgaW4gcGFnZXMgKi8KLQl1bnNpZ25lZCBpbnQgbWF4X3NpemU7CS8qIG1heGltdW0gc2l6ZSBvZiBCVExCIGluIHBhZ2VzICovCi0Jc3RydWN0IHBkY19idGxiX2luZm9fcmFuZ2UgZml4ZWRfcmFuZ2VfaW5mbzsKLQlzdHJ1Y3QgcGRjX2J0bGJfaW5mb19yYW5nZSB2YXJpYWJsZV9yYW5nZV9pbmZvOwotfTsKLQotI2VuZGlmIC8qICFDT05GSUdfUEEyMCAqLwotCi0jaWZkZWYgQ09ORklHXzY0QklUCi1zdHJ1Y3QgcGRjX21lbW9yeV90YWJsZV9yYWRkciB7IC8qIFBEQ19NRU0vUERDX01FTV9UQUJMRSAocmV0dXJuIGluZm8pICovCi0JdW5zaWduZWQgbG9uZyBlbnRyaWVzX3JldHVybmVkOwotCXVuc2lnbmVkIGxvbmcgZW50cmllc190b3RhbDsKLX07Ci0KLXN0cnVjdCBwZGNfbWVtb3J5X3RhYmxlIHsgICAgICAgLyogUERDX01FTS9QRENfTUVNX1RBQkxFIChhcmd1bWVudHMpICovCi0JdW5zaWduZWQgbG9uZyBwYWRkcjsKLQl1bnNpZ25lZCBpbnQgIHBhZ2VzOwotCXVuc2lnbmVkIGludCAgcmVzZXJ2ZWQ7Ci19OwotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwotCi1zdHJ1Y3QgcGRjX3N5c3RlbV9tYXBfbW9kX2luZm8geyAvKiBQRENfU1lTVEVNX01BUC9GSU5EX01PRFVMRSAqLwotCXVuc2lnbmVkIGxvbmcgbW9kX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBtb2RfcGdzOwotCXVuc2lnbmVkIGxvbmcgYWRkX2FkZHJzOwotfTsKLQotc3RydWN0IHBkY19zeXN0ZW1fbWFwX2FkZHJfaW5mbyB7IC8qIFBEQ19TWVNURU1fTUFQL0ZJTkRfQUREUkVTUyAqLwotCXVuc2lnbmVkIGxvbmcgbW9kX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBtb2RfcGdzOwotfTsKLQotc3RydWN0IHBkY19pbml0aWF0b3IgeyAvKiBQRENfSU5JVElBVE9SICovCi0JaW50IGhvc3RfaWQ7Ci0JaW50IGZhY3RvcjsKLQlpbnQgd2lkdGg7Ci0JaW50IG1vZGU7Ci19OwotCi1zdHJ1Y3QgaGFyZHdhcmVfcGF0aCB7Ci0JY2hhciAgZmxhZ3M7CS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVsb3cgKi8KLQljaGFyICBiY1s2XTsJLyogQnVzIENvbnZlcnRlciByb3V0aW5nIGluZm8gdG8gYSBzcGVjaWZpYyAqLwotCQkJLyogSS9PIGFkYXB0b3IgKDwgMCBtZWFucyBub25lLCA+IDYzIHJlc3ZkKSAqLwotCWNoYXIgIG1vZDsJLyogZml4ZWQgZmllbGQgb2Ygc3BlY2lmaWVkIG1vZHVsZSAqLwotfTsKLQotLyoKLSAqIERldmljZSBwYXRoIHNwZWNpZmljYXRpb25zIHVzZWQgYnkgUERDLgotICovCi1zdHJ1Y3QgcGRjX21vZHVsZV9wYXRoIHsKLQlzdHJ1Y3QgaGFyZHdhcmVfcGF0aCBwYXRoOwotCXVuc2lnbmVkIGludCBsYXllcnNbNl07IC8qIGRldmljZS1zcGVjaWZpYyBpbmZvIChjdGxyICMsIHVuaXQgIyAuLi4pICovCi19OwotCi0jaWZuZGVmIENPTkZJR19QQTIwCi0vKiBPbmx5IHVzZWQgb24gc29tZSBwcmUtUEEyLjAgYm94ZXMgKi8KLXN0cnVjdCBwZGNfbWVtb3J5X21hcCB7CQkvKiBQRENfTUVNT1JZX01BUCAqLwotCXVuc2lnbmVkIGxvbmcgaHBhOwkvKiBtb2QncyByZWdpc3RlciBzZXQgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgbW9yZV9wZ3M7CS8qIG51bWJlciBvZiBhZGRpdGlvbmFsIEkvTyBwZ3MgKi8KLX07Ci0jZW5kaWYKLQotc3RydWN0IHBkY190b2QgewotCXVuc2lnbmVkIGxvbmcgdG9kX3NlYzsgCi0JdW5zaWduZWQgbG9uZyB0b2RfdXNlYzsKLX07Ci0KLS8qIGFyY2hpdGVjdGVkIHJlc3VsdHMgZnJvbSBQRENfUElNL3RyYW5zZmVyIGhwbWMgb24gYSBQQTEuMSBtYWNoaW5lICovCi0KLXN0cnVjdCBwZGNfaHBtY19waW1fMTEgeyAvKiBQRENfUElNICovCi0JX191MzIgZ3JbMzJdOwotCV9fdTMyIGNyWzMyXTsKLQlfX3UzMiBzcls4XTsKLQlfX3UzMiBpYXNxX2JhY2s7Ci0JX191MzIgaWFvcV9iYWNrOwotCV9fdTMyIGNoZWNrX3R5cGU7Ci0JX191MzIgY3B1X3N0YXRlOwotCV9fdTMyIHJzdmQxOwotCV9fdTMyIGNhY2hlX2NoZWNrOwotCV9fdTMyIHRsYl9jaGVjazsKLQlfX3UzMiBidXNfY2hlY2s7Ci0JX191MzIgYXNzaXN0c19jaGVjazsKLQlfX3UzMiByc3ZkMjsKLQlfX3UzMiBhc3Npc3Rfc3RhdGU7Ci0JX191MzIgcmVzcG9uZGVyX2FkZHI7Ci0JX191MzIgcmVxdWVzdG9yX2FkZHI7Ci0JX191MzIgcGF0aF9pbmZvOwotCV9fdTY0IGZyWzMyXTsKLX07Ci0KLS8qCi0gKiBhcmNoaXRlY3RlZCByZXN1bHRzIGZyb20gUERDX1BJTS90cmFuc2ZlciBocG1jIG9uIGEgUEEyLjAgbWFjaGluZQotICoKLSAqIE5vdGUgdGhhdCBQRENfUElNIGRvZXNuJ3QgY2FyZSB3aGV0aGVyIG9yIG5vdCB3aWRlIG1vZGUgd2FzIGVuYWJsZWQKLSAqIHNvIHRoZSByZXN1bHRzIGFyZSBkaWZmZXJlbnQgb24gIFBBMS4xIHZzLiBQQTIuMCB3aGVuIGluIG5hcnJvdyBtb2RlLgotICoKLSAqIE5vdGUgYWxzbyB0aGF0IHRoZXJlIGFyZSB1bmFyY2hpdGVjdGVkIHJlc3VsdHMgYXZhaWxhYmxlLCB3aGljaAotICogYXJlIGh2ZXJzaW9uIGRlcGVuZGVudC4gRG8gYSAic2VyIHBpbSAwIGhwbWMiIGFmdGVyIHJlYm9vdGluZywgc2luY2UKLSAqIHRoZSBmaXJtd2FyZSBpcyBwcm9iYWJseSB0aGUgYmVzdCB3YXkgb2YgcHJpbnRpbmcgaHZlcnNpb24gZGVwZW5kZW50Ci0gKiBkYXRhLgotICovCi0KLXN0cnVjdCBwZGNfaHBtY19waW1fMjAgeyAvKiBQRENfUElNICovCi0JX191NjQgZ3JbMzJdOwotCV9fdTY0IGNyWzMyXTsKLQlfX3U2NCBzcls4XTsKLQlfX3U2NCBpYXNxX2JhY2s7Ci0JX191NjQgaWFvcV9iYWNrOwotCV9fdTMyIGNoZWNrX3R5cGU7Ci0JX191MzIgY3B1X3N0YXRlOwotCV9fdTMyIGNhY2hlX2NoZWNrOwotCV9fdTMyIHRsYl9jaGVjazsKLQlfX3UzMiBidXNfY2hlY2s7Ci0JX191MzIgYXNzaXN0c19jaGVjazsKLQlfX3UzMiBhc3Npc3Rfc3RhdGU7Ci0JX191MzIgcGF0aF9pbmZvOwotCV9fdTY0IHJlc3BvbmRlcl9hZGRyOwotCV9fdTY0IHJlcXVlc3Rvcl9hZGRyOwotCV9fdTY0IGZyWzMyXTsKLX07Ci0KLXZvaWQgcGRjX2NvbnNvbGVfaW5pdCh2b2lkKTsJLyogaW4gcGRjX2NvbnNvbGUuYyAqLwotdm9pZCBwZGNfY29uc29sZV9yZXN0YXJ0KHZvaWQpOwotCi12b2lkIHNldHVwX3BkYyh2b2lkKTsJCS8qIGluIGludmVudG9yeS5jICovCi0KLS8qIHdyYXBwZXItZnVuY3Rpb25zIGZyb20gcGRjLmMgKi8KLQotaW50IHBkY19hZGRfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLWludCBwZGNfY2hhc3Npc19pbmZvKHN0cnVjdCBwZGNfY2hhc3Npc19pbmZvICpjaGFzc2lzX2luZm8sIHZvaWQgKmxlZF9pbmZvLCB1bnNpZ25lZCBsb25nIGxlbik7Ci1pbnQgcGRjX2NoYXNzaXNfZGlzcCh1bnNpZ25lZCBsb25nIGRpc3ApOwotaW50IHBkY19jaGFzc2lzX3dhcm4odW5zaWduZWQgbG9uZyAqd2Fybik7Ci1pbnQgcGRjX2NvcHJvY19jZmcoc3RydWN0IHBkY19jb3Byb2NfY2ZnICpwZGNfY29wcm9jX2luZm8pOwotaW50IHBkY19pb2RjX3JlYWQodW5zaWduZWQgbG9uZyAqYWN0Y250LCB1bnNpZ25lZCBsb25nIGhwYSwgdW5zaWduZWQgaW50IGluZGV4LAotCQkgIHZvaWQgKmlvZGNfZGF0YSwgdW5zaWduZWQgaW50IGlvZGNfZGF0YV9zaXplKTsKLWludCBwZGNfc3lzdGVtX21hcF9maW5kX21vZHMoc3RydWN0IHBkY19zeXN0ZW1fbWFwX21vZF9pbmZvICpwZGNfbW9kX2luZm8sCi0JCQkgICAgIHN0cnVjdCBwZGNfbW9kdWxlX3BhdGggKm1vZF9wYXRoLCBsb25nIG1vZF9pbmRleCk7Ci1pbnQgcGRjX3N5c3RlbV9tYXBfZmluZF9hZGRycyhzdHJ1Y3QgcGRjX3N5c3RlbV9tYXBfYWRkcl9pbmZvICpwZGNfYWRkcl9pbmZvLAotCQkJICAgICAgbG9uZyBtb2RfaW5kZXgsIGxvbmcgYWRkcl9pbmRleCk7Ci1pbnQgcGRjX21vZGVsX2luZm8oc3RydWN0IHBkY19tb2RlbCAqbW9kZWwpOwotaW50IHBkY19tb2RlbF9zeXNtb2RlbChjaGFyICpuYW1lKTsKLWludCBwZGNfbW9kZWxfY3B1aWQodW5zaWduZWQgbG9uZyAqY3B1X2lkKTsKLWludCBwZGNfbW9kZWxfdmVyc2lvbnModW5zaWduZWQgbG9uZyAqdmVyc2lvbnMsIGludCBpZCk7Ci1pbnQgcGRjX21vZGVsX2NhcGFiaWxpdGllcyh1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpOwotaW50IHBkY19jYWNoZV9pbmZvKHN0cnVjdCBwZGNfY2FjaGVfaW5mbyAqY2FjaGUpOwotaW50IHBkY19zcGFjZWlkX2JpdHModW5zaWduZWQgbG9uZyAqc3BhY2VfYml0cyk7Ci0jaWZuZGVmIENPTkZJR19QQTIwCi1pbnQgcGRjX2J0bGJfaW5mbyhzdHJ1Y3QgcGRjX2J0bGJfaW5mbyAqYnRsYik7Ci1pbnQgcGRjX21lbV9tYXBfaHBhKHN0cnVjdCBwZGNfbWVtb3J5X21hcCAqcl9hZGRyLCBzdHJ1Y3QgcGRjX21vZHVsZV9wYXRoICptb2RfcGF0aCk7Ci0jZW5kaWYgLyogIUNPTkZJR19QQTIwICovCi1pbnQgcGRjX2xhbl9zdGF0aW9uX2lkKGNoYXIgKmxhbl9hZGRyLCB1bnNpZ25lZCBsb25nIG5ldF9ocGEpOwotCi1pbnQgcGRjX3N0YWJsZV9yZWFkKHVuc2lnbmVkIGxvbmcgc3RhZGRyLCB2b2lkICptZW1hZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWludCBwZGNfc3RhYmxlX3dyaXRlKHVuc2lnbmVkIGxvbmcgc3RhZGRyLCB2b2lkICptZW1hZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWludCBwZGNfc3RhYmxlX2dldF9zaXplKHVuc2lnbmVkIGxvbmcgKnNpemUpOwotaW50IHBkY19zdGFibGVfdmVyaWZ5X2NvbnRlbnRzKHZvaWQpOwotaW50IHBkY19zdGFibGVfaW5pdGlhbGl6ZSh2b2lkKTsKLQotaW50IHBkY19wY2lfaXJ0X3NpemUodW5zaWduZWQgbG9uZyAqbnVtX2VudHJpZXMsIHVuc2lnbmVkIGxvbmcgaHBhKTsKLWludCBwZGNfcGNpX2lydCh1bnNpZ25lZCBsb25nIG51bV9lbnRyaWVzLCB1bnNpZ25lZCBsb25nIGhwYSwgdm9pZCAqdGJsKTsKLQotaW50IHBkY19nZXRfaW5pdGlhdG9yKHN0cnVjdCBoYXJkd2FyZV9wYXRoICosIHN0cnVjdCBwZGNfaW5pdGlhdG9yICopOwotaW50IHBkY190b2RfcmVhZChzdHJ1Y3QgcGRjX3RvZCAqdG9kKTsKLWludCBwZGNfdG9kX3NldCh1bnNpZ25lZCBsb25nIHNlYywgdW5zaWduZWQgbG9uZyB1c2VjKTsKLQotI2lmZGVmIENPTkZJR182NEJJVAotaW50IHBkY19tZW1fbWVtX3RhYmxlKHN0cnVjdCBwZGNfbWVtb3J5X3RhYmxlX3JhZGRyICpyX2FkZHIsCi0JCXN0cnVjdCBwZGNfbWVtb3J5X3RhYmxlICp0YmwsIHVuc2lnbmVkIGxvbmcgZW50cmllcyk7Ci0jZW5kaWYKLQotdm9pZCBzZXRfZmlybXdhcmVfd2lkdGgodm9pZCk7Ci1pbnQgcGRjX2RvX2Zpcm1fdGVzdF9yZXNldCh1bnNpZ25lZCBsb25nIGZ0Y19iaXRtYXApOwotaW50IHBkY19kb19yZXNldCh2b2lkKTsKLWludCBwZGNfc29mdF9wb3dlcl9pbmZvKHVuc2lnbmVkIGxvbmcgKnBvd2VyX3JlZyk7Ci1pbnQgcGRjX3NvZnRfcG93ZXJfYnV0dG9uKGludCBzd19jb250cm9sKTsKLXZvaWQgcGRjX2lvX3Jlc2V0KHZvaWQpOwotdm9pZCBwZGNfaW9fcmVzZXRfZGV2aWNlcyh2b2lkKTsKLWludCBwZGNfaW9kY19nZXRjKHZvaWQpOwotaW50IHBkY19pb2RjX3ByaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpOwotCi12b2lkIHBkY19lbWVyZ2VuY3lfdW5sb2NrKHZvaWQpOwotaW50IHBkY19zdGlfY2FsbCh1bnNpZ25lZCBsb25nIGZ1bmMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5wdHIsIHVuc2lnbmVkIGxvbmcgb3V0cHV0ciwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBnbG9iX2NmZyk7Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqIG9zX2lkX3RvX3N0cmluZyh1MTYgb3NfaWQpIHsKLQlzd2l0Y2gob3NfaWQpIHsKLQljYXNlIE9TX0lEX05PTkU6CXJldHVybiAiTm8gT1MiOwotCWNhc2UgT1NfSURfSFBVWDoJcmV0dXJuICJIUC1VWCI7Ci0JY2FzZSBPU19JRF9NUEVYTDoJcmV0dXJuICJNUEUtaVgiOwotCWNhc2UgT1NfSURfT1NGOgkJcmV0dXJuICJPU0YiOwotCWNhc2UgT1NfSURfSFBSVDoJcmV0dXJuICJIUC1SVCI7Ci0JY2FzZSBPU19JRF9OT1ZFTDoJcmV0dXJuICJOb3ZlbGwgTmV0d2FyZSI7Ci0JY2FzZSBPU19JRF9MSU5VWDoJcmV0dXJuICJMaW51eCI7Ci0JZGVmYXVsdDoJcmV0dXJuICJVbmtub3duIjsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNkZWZpbmUgUEFHRTAgICAoKHN0cnVjdCB6ZXJvcGFnZSAqKV9fUEFHRV9PRkZTRVQpCi0KLS8qIERFRklOSVRJT04gT0YgVEhFIFpFUk8tUEFHRSAoUEFHMCkgKi8KLS8qIGJhc2VkIG9uIHdvcmsgYnkgSmFzb24gRWNraGFyZHQgKGphc29uQGVxdWF0b3IuY29tKSAqLwotCi0vKiBmbGFncyBvZiB0aGUgZGV2aWNlX3BhdGggKi8KLSNkZWZpbmUJUEZfQVVUT0JPT1QJMHg4MAotI2RlZmluZQlQRl9BVVRPU0VBUkNICTB4NDAKLSNkZWZpbmUJUEZfVElNRVIJMHgwRgotCi1zdHJ1Y3QgZGV2aWNlX3BhdGggewkJLyogcGFnZSAxLTY5ICovCi0JdW5zaWduZWQgY2hhciBmbGFnczsJLyogZmxhZ3Mgc2VlIGFib3ZlISAqLwotCXVuc2lnbmVkIGNoYXIgYmNbNl07CS8qIGJ1cyBjb252ZXJ0ZXIgcm91dGluZyBpbmZvICovCi0JdW5zaWduZWQgY2hhciBtb2Q7Ci0JdW5zaWduZWQgaW50ICBsYXllcnNbNl07LyogZGV2aWNlLXNwZWNpZmljIGxheWVyLWluZm8gKi8KLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpIDsKLQotc3RydWN0IHB6X2RldmljZSB7Ci0Jc3RydWN0CWRldmljZV9wYXRoIGRwOwkvKiBzZWUgYWJvdmUgKi8KLQkvKiBzdHJ1Y3QJaW9tb2QgKmhwYTsgKi8KLQl1bnNpZ25lZCBpbnQgaHBhOwkvKiBIUEEgYmFzZSBhZGRyZXNzICovCi0JLyogY2hhcgkqc3BhOyAqLwotCXVuc2lnbmVkIGludCBzcGE7CS8qIFNQQSBiYXNlIGFkZHJlc3MgKi8KLQkvKiBpbnQJKCppb2RjX2lvKShzdHJ1Y3QgaW9tb2QqLCAuLi4pOyAqLwotCXVuc2lnbmVkIGludCBpb2RjX2lvOwkvKiBkZXZpY2UgZW50cnkgcG9pbnQgKi8KLQlzaG9ydAlwYWQ7CQkvKiByZXNlcnZlZCAqLwotCXVuc2lnbmVkIHNob3J0IGNsX2NsYXNzOy8qIHNlZSBiZWxvdyAqLwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgOwotCi1zdHJ1Y3QgemVyb3BhZ2UgewotCS8qIFsweDAwMF0gaW5pdGlhbGl6ZSB2ZWN0b3JzIChWRUMpICovCi0JdW5zaWduZWQgaW50CXZlY19zcGVjaWFsOwkJLyogbXVzdCBiZSB6ZXJvICovCi0JLyogaW50CSgqdmVjX3Bvd19mYWlsKSh2b2lkKTsqLwotCXVuc2lnbmVkIGludAl2ZWNfcG93X2ZhaWw7IC8qIHBvd2VyIGZhaWx1cmUgaGFuZGxlciAqLwotCS8qIGludAkoKnZlY190b2MpKHZvaWQpOyAqLwotCXVuc2lnbmVkIGludAl2ZWNfdG9jOwotCXVuc2lnbmVkIGludAl2ZWNfdG9jbGVuOwotCS8qIGludAkoKnZlY19yZW5keikodm9pZCk7ICovCi0JdW5zaWduZWQgaW50IHZlY19yZW5kejsKLQlpbnQJdmVjX3Bvd19mYWlsX2ZsZW47Ci0JaW50CXZlY19wYWRbMTBdOwkJCi0JCi0JLyogWzB4MDQwXSByZXNlcnZlZCBwcm9jZXNzb3IgZGVwZW5kZW50ICovCi0JaW50CXBhZDBbMTEyXTsKLQotCS8qIFsweDIwMF0gcmVzZXJ2ZWQgKi8KLQlpbnQJcGFkMVs4NF07Ci0KLQkvKiBbMHgzNTBdIG1lbW9yeSBjb25maWd1cmF0aW9uIChNQykgKi8KLQlpbnQJbWVtY19jb250OwkJLyogY29udGlndW91cyBtZW0gc2l6ZSAoYnl0ZXMpICovCi0JaW50CW1lbWNfcGhzaXplOwkJLyogcGh5c2ljYWwgbWVtb3J5IHNpemUgKi8KLQlpbnQJbWVtY19hZHNpemU7CQkvKiBhZGRpdGlvbmFsIG1lbSBzaXplLCBieXRlcyBvZiBTUEEgc3BhY2UgdXNlZCBieSBQREMgKi8KLQl1bnNpZ25lZCBpbnQgbWVtX3BkY19oaTsJLyogdXNlZCBmb3IgNjQtYml0ICovCi0KLQkvKiBbMHgzNjBdIHZhcmlvdXMgcGFyYW1ldGVycyBmb3IgdGhlIGJvb3QtQ1BVICovCi0JLyogdW5zaWduZWQgaW50ICptZW1fYm9vdGVycls4XTsgKi8KLQl1bnNpZ25lZCBpbnQgbWVtX2Jvb3RlcnJbOF07CS8qIHB0ciB0byBib290IGVycm9ycyAqLwotCXVuc2lnbmVkIGludCBtZW1fZnJlZTsJCS8qIGZpcnN0IGxvY2F0aW9uLCB3aGVyZSBPUyBjYW4gYmUgbG9hZGVkICovCi0JLyogc3RydWN0IGlvbW9kICptZW1faHBhOyAqLwotCXVuc2lnbmVkIGludCBtZW1faHBhOwkJLyogSFBBIG9mIHRoZSBib290LUNQVSAqLwotCS8qIGludCAoKm1lbV9wZGMpKGludCwgLi4uKTsgKi8KLQl1bnNpZ25lZCBpbnQgbWVtX3BkYzsJCS8qIFBEQyBlbnRyeSBwb2ludCAqLwotCXVuc2lnbmVkIGludCBtZW1fMTBtc2VjOwkvKiBudW1iZXIgb2YgY2xvY2sgdGlja3MgaW4gMTBtc2VjICovCi0KLQkvKiBbMHgzOTBdIGluaXRpYWwgbWVtb3J5IG1vZHVsZSAoSU1NKSAqLwotCS8qIHN0cnVjdCBpb21vZCAqaW1tX2hwYTsgKi8KLQl1bnNpZ25lZCBpbnQgaW1tX2hwYTsJCS8qIEhQQSBvZiB0aGUgSU1NICovCi0JaW50CWltbV9zb2Z0X2Jvb3Q7CQkvKiAwID0gd2FzIGhhcmQgYm9vdCwgMSA9IHdhcyBzb2Z0IGJvb3QgKi8KLQl1bnNpZ25lZCBpbnQJaW1tX3NwYV9zaXplOwkJLyogU1BBIHNpemUgb2YgdGhlIElNTSBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludAlpbW1fbWF4X21lbTsJCS8qIGJ5dGVzIG9mIG1lbSBpbiBJTU0gKi8KLQotCS8qIFsweDNBMF0gYm9vdCBjb25zb2xlLCBkaXNwbGF5IGRldmljZSBhbmQga2V5Ym9hcmQgKi8KLQlzdHJ1Y3QgcHpfZGV2aWNlIG1lbV9jb25zOwkvKiBkZXNjcmlwdGlvbiBvZiBjb25zb2xlIGRldmljZSAqLwotCXN0cnVjdCBwel9kZXZpY2UgbWVtX2Jvb3Q7CS8qIGRlc2NyaXB0aW9uIG9mIGJvb3QgZGV2aWNlICovCi0Jc3RydWN0IHB6X2RldmljZSBtZW1fa2JkOwkvKiBkZXNjcmlwdGlvbiBvZiBrZXlib2FyZCBkZXZpY2UgKi8KLQotCS8qIFsweDQzMF0gcmVzZXJ2ZWQgKi8KLQlpbnQJcGFkNDMwWzExNl07Ci0KLQkvKiBbMHg2MDBdIHByb2Nlc3NvciBkZXBlbmRlbnQgKi8KLQlfX3UzMglwYWQ2MDBbMV07Ci0JX191MzIJcHJvY19zdGk7CQkvKiBwb2ludGVyIHRvIFNUSSBST00gKi8KLQlfX3UzMglwYWQ2MDhbMTI2XTsKLX07Ci0KLSNlbmRpZiAvKiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICovCi0KLSNlbmRpZiAvKiBfUEFSSVNDX1BEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHRyYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOTRjNWQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3B0cmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI2lmbmRlZiBfUEFSSVNDX1BUUkFDRV9ICi0jZGVmaW5lIF9QQVJJU0NfUFRSQUNFX0gKLQotLyogd3JpdHRlbiBieSBQaGlsaXBwIFJ1bXBmLCBDb3B5cmlnaHQgKEMpIDE5OTkgU3VTRSBHbWJIIE51ZXJuYmVyZwotKiogQ29weXJpZ2h0IChDKSAyMDAwIEdyYW50IEdydW5kbGVyLCBIZXdsZXR0LVBhY2thcmQKLSovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZSAKLSAqIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLgotICoKLSAqIE4uQi4gZ2RiL3N0cmFjZSBjYXJlIGFib3V0IHRoZSBzaXplIGFuZCBvZmZzZXRzIHdpdGhpbiB0aGlzCi0gKiBzdHJ1Y3R1cmUuIElmIHlvdSBjaGFuZ2UgdGhpbmdzLCB5b3UgbWF5IGJyZWFrIG9iamVjdCBjb21wYXRpYmlsaXR5Ci0gKiBmb3IgdGhvc2UgYXBwbGljYXRpb25zLgotICovCi0KLXN0cnVjdCBwdF9yZWdzIHsKLQl1bnNpZ25lZCBsb25nIGdyWzMyXTsJLyogUFNXIGlzIGluIGdyWzBdICovCi0JX191NjQgZnJbMzJdOwotCXVuc2lnbmVkIGxvbmcgc3JbIDhdOwotCXVuc2lnbmVkIGxvbmcgaWFzcVsyXTsKLQl1bnNpZ25lZCBsb25nIGlhb3FbMl07Ci0JdW5zaWduZWQgbG9uZyBjcjI3OwotCXVuc2lnbmVkIGxvbmcgcGFkMDsgICAgIC8qIGF2YWlsYWJsZSBmb3Igb3RoZXIgdXNlcyAqLwotCXVuc2lnbmVkIGxvbmcgb3JpZ19yMjg7Ci0JdW5zaWduZWQgbG9uZyBrc3A7Ci0JdW5zaWduZWQgbG9uZyBrcGM7Ci0JdW5zaWduZWQgbG9uZyBzYXI7CS8qIENSMTEgKi8KLQl1bnNpZ25lZCBsb25nIGlpcjsJLyogQ1IxOSAqLwotCXVuc2lnbmVkIGxvbmcgaXNyOwkvKiBDUjIwICovCi0JdW5zaWduZWQgbG9uZyBpb3I7CS8qIENSMjEgKi8KLQl1bnNpZ25lZCBsb25nIGlwc3c7CS8qIENSMjIgKi8KLX07Ci0KLS8qCi0gKiBUaGUgbnVtYmVycyBjaG9zZW4gaGVyZSBhcmUgc29tZXdoYXQgYXJiaXRyYXJ5IGJ1dCBhYnNvbHV0ZWx5IE1VU1QKLSAqIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBudW1iZXIgYXNzaWduZWQgaW4gPGxpbnV4L3B0cmFjZS5oPi4KLSAqCi0gKiBUaGVzZSBvbmVzIGFyZSB0YWtlbiBmcm9tIElBLTY0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlaXJzIGFyZQotICogdGhlIG1vc3QgY29ycmVjdCAoYW5kIHdlIGFsc28gd2FudCB0byBzdXBwb3J0IFBUUkFDRV9TSU5HTEVCTE9DSwotICogc2luY2Ugd2UgaGF2ZSB0YWtlbiBicmFuY2ggdHJhcHMgdG9vKQotICovCi0jZGVmaW5lIFBUUkFDRV9TSU5HTEVCTE9DSwkxMgkvKiByZXN1bWUgZXhlY3V0aW9uIHVudGlsIG5leHQgYnJhbmNoICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgdGFza19yZWdzKHRhc2spICgoc3RydWN0IHB0X3JlZ3MgKikgKChjaGFyICopKHRhc2spICsgVEFTS19SRUdTKSkKLQotLyogWFhYIHNob3VsZCB3ZSB1c2UgaWFvcVsxXSBvciBpYW9xWzBdID8gKi8KLSNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPmlhb3FbMF0gJiAzKSA/IDEgOiAwKQotI2RlZmluZSB1c2VyX3NwYWNlKHJlZ3MpCQkoKChyZWdzKS0+aWFzcVsxXSAhPSAwKSA/IDEgOiAwKQotI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPmlhb3FbMF0gJiB+MykKLXVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqKTsKLWV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9yb3Blcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3JvcGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwN2E4ODA2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9yb3Blcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QQVJJU0NfUk9QRVNfSF8KLSNkZWZpbmUgX0FTTV9QQVJJU0NfUk9QRVNfSF8KLQotI2luY2x1ZGUgPGFzbS1wYXJpc2MvcGFyaXNjLWRldmljZS5oPgotCi0jaWZkZWYgQ09ORklHXzY0QklUCi0vKiAibG93IGVuZCIgUEE4ODAwIG1hY2hpbmVzIHVzZSBaWDEgY2hpcHNldDogUEFUIFBEQyBhbmQgb25seSBydW4gNjQtYml0ICovCi0jZGVmaW5lIFpYMV9TVVBQT1JUCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKiBkZXBlbmRzIG9uIHByb2MgZnMgc3VwcG9ydC4gQnV0IGNvc3RzIENQVSBwZXJmb3JtYW5jZSAqLwotI3VuZGVmIFNCQV9DT0xMRUNUX1NUQVRTCi0jZW5kaWYKLQotLyoKLSoqIFRoZSBudW1iZXIgb2YgcGRpciBlbnRyaWVzIHRvICJmcmVlIiBiZWZvcmUgaXNzdWluZwotKiogYSByZWFkIHRvIFBDT00gcmVnaXN0ZXIgdG8gZmx1c2ggb3V0IFBDT00gd3JpdGVzLgotKiogSW50ZXJhY3RzIHdpdGggYWxsb2NhdGlvbiBncmFudWxhcml0eSAoaWUgNCBvciA4IGVudHJpZXMKLSoqIGFsbG9jYXRlZCBhbmQgZnJlZSdkL3B1cmdlZCBhdCBhIHRpbWUgbWlnaHQgbWFrZSB0aGlzCi0qKiBsZXNzIGludGVyZXN0aW5nKS4KLSovCi0jZGVmaW5lIERFTEFZRURfUkVTT1VSQ0VfQ05UCTE2Ci0KLSNkZWZpbmUgTUFYX0lPQwkJMgkvKiBwZXIgSWtlLiBQbHV0by9Bc3RybyBvbmx5IGhhdmUgMS4gKi8KLSNkZWZpbmUgUk9QRVNfUEVSX0lPQwk4CS8qIHBlciBJa2UgaGFsZiBvciBQbHV0by9Bc3RybyAqLwotCi1zdHJ1Y3QgaW9jIHsKLQl2b2lkIF9faW9tZW0JKmlvY19ocGE7CS8qIEkvTyBNTVUgYmFzZSBhZGRyZXNzICovCi0JY2hhcgkJKnJlc19tYXA7CS8qIHJlc291cmNlIG1hcCwgYml0ID09IHBkaXIgZW50cnkgKi8KLQl1NjQJCSpwZGlyX2Jhc2U7CS8qIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcJaWJhc2U7CQkvKiBwZGlyIElPViBTcGFjZSBiYXNlIC0gc2hhcmVkIHcvbGJhX3BjaSAqLwotCXVuc2lnbmVkIGxvbmcJaW1hc2s7CQkvKiBwZGlyIElPViBTcGFjZSBtYXNrIC0gc2hhcmVkIHcvbGJhX3BjaSAqLwotI2lmZGVmIFpYMV9TVVBQT1JUCi0JdW5zaWduZWQgbG9uZwlpb3ZwX21hc2s7CS8qIGhlbHAgY29udmVydCBJT1ZBIHRvIElPVlAgKi8KLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcJKnJlc19oaW50OwkvKiBuZXh0IGF2YWlsIElPVlAgLSBjaXJjdWxhciBzZWFyY2ggKi8KLQlzcGlubG9ja190CXJlc19sb2NrOwotCXVuc2lnbmVkIGludAlyZXNfYml0c2hpZnQ7CS8qIGZyb20gdGhlIExFRlQhICovCi0JdW5zaWduZWQgaW50CXJlc19zaXplOwkvKiBzaXplIG9mIHJlc291cmNlIG1hcCBpbiBieXRlcyAqLwotI2lmZGVmIFNCQV9ISU5UX1NVUFBPUlQKLS8qIEZJWE1FIDogRE1BIEhJTlRzIG5vdCB1c2VkICovCi0JdW5zaWduZWQgbG9uZwloaW50X21hc2tfcGRpcjsgLyogYml0cyB1c2VkIGZvciBETUEgaGludHMgKi8KLQl1bnNpZ25lZCBpbnQJaGludF9zaGlmdF9wZGlyOwotI2VuZGlmCi0jaWYgREVMQVlFRF9SRVNPVVJDRV9DTlQgPiAwCi0JaW50CQlzYXZlZF9jbnQ7Ci0Jc3RydWN0IHNiYV9kbWFfcGFpciB7Ci0JCQlkbWFfYWRkcl90CWlvdmE7Ci0JCQlzaXplX3QJCXNpemU7Ci0gICAgICAgIH0gc2F2ZWRbREVMQVlFRF9SRVNPVVJDRV9DTlRdOwotI2VuZGlmCi0KLSNpZmRlZiBTQkFfQ09MTEVDVF9TVEFUUwotI2RlZmluZSBTQkFfU0VBUkNIX1NBTVBMRQkweDEwMAotCXVuc2lnbmVkIGxvbmcJYXZnX3NlYXJjaFtTQkFfU0VBUkNIX1NBTVBMRV07Ci0JdW5zaWduZWQgbG9uZwlhdmdfaWR4OwkvKiBjdXJyZW50IGluZGV4IGludG8gYXZnX3NlYXJjaCAqLwotCXVuc2lnbmVkIGxvbmcJdXNlZF9wYWdlczsKLQl1bnNpZ25lZCBsb25nCW1zaW5nbGVfY2FsbHM7Ci0JdW5zaWduZWQgbG9uZwltc2luZ2xlX3BhZ2VzOwotCXVuc2lnbmVkIGxvbmcJbXNnX2NhbGxzOwotCXVuc2lnbmVkIGxvbmcJbXNnX3BhZ2VzOwotCXVuc2lnbmVkIGxvbmcJdXNpbmdsZV9jYWxsczsKLQl1bnNpZ25lZCBsb25nCXVzaW5nbGVfcGFnZXM7Ci0JdW5zaWduZWQgbG9uZwl1c2dfY2FsbHM7Ci0JdW5zaWduZWQgbG9uZwl1c2dfcGFnZXM7Ci0jZW5kaWYKLSAgICAgICAgLyogU1RVRkYgV2UgZG9uJ3QgbmVlZCBpbiBwZXJmb3JtYW5jZSBwYXRoICovCi0JdW5zaWduZWQgaW50CXBkaXJfc2l6ZTsJLyogaW4gYnl0ZXMsIGRldGVybWluZWQgYnkgSU9WIFNwYWNlIHNpemUgKi8KLX07Ci0KLXN0cnVjdCBzYmFfZGV2aWNlIHsKLQlzdHJ1Y3Qgc2JhX2RldmljZQkqbmV4dDsgIC8qIGxpc3Qgb2YgU0JBJ3MgaW4gc3lzdGVtICovCi0Jc3RydWN0IHBhcmlzY19kZXZpY2UJKmRldjsgICAvKiBkZXYgZm91bmQgaW4gYnVzIHdhbGsgKi8KLQljb25zdCBjaGFyCQkqbmFtZTsKLQl2b2lkIF9faW9tZW0JCSpzYmFfaHBhOyAvKiBiYXNlIGFkZHJlc3MgKi8KLQlzcGlubG9ja190CQlzYmFfbG9jazsKLQl1bnNpZ25lZCBpbnQJCWZsYWdzOyAgLyogc3RhdGUvZnVuY3Rpb25hbGl0eSBlbmFibGVkICovCi0JdW5zaWduZWQgaW50CQlod19yZXY7ICAvKiBIVyByZXZpc2lvbiBvZiBjaGlwICovCi0KLQlzdHJ1Y3QgcmVzb3VyY2UJCWNoaXBfcmVzdjsgLyogTU1JTyByZXNlcnZlZCBmb3IgY2hpcCAqLwotCXN0cnVjdCByZXNvdXJjZQkJaW9tbXVfcmVzdjsgLyogTU1JTyByZXNlcnZlZCBmb3IgaW9tbXUgKi8KLQotCXVuc2lnbmVkIGludAkJbnVtX2lvYzsgIC8qIG51bWJlciBvZiBvbi1ib2FyZCBJT0MncyAqLwotCXN0cnVjdCBpb2MJCWlvY1tNQVhfSU9DXTsKLX07Ci0KLSNkZWZpbmUgQVNUUk9fUlVOV0FZX1BPUlQJMHg1ODIKLSNkZWZpbmUgSUtFX01FUkNFRF9QT1JUCQkweDgwMwotI2RlZmluZSBSRU9fTUVSQ0VEX1BPUlQJCTB4ODA0Ci0jZGVmaW5lIFJFT0dfTUVSQ0VEX1BPUlQJMHg4MDUKLSNkZWZpbmUgUExVVE9fTUNLSU5MRVlfUE9SVAkweDg4MAotCi1zdGF0aWMgaW5saW5lIGludCBJU19BU1RSTyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZCkgewotCXJldHVybiBkLT5pZC5odmVyc2lvbiA9PSBBU1RST19SVU5XQVlfUE9SVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgSVNfSUtFKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkKSB7Ci0JcmV0dXJuIGQtPmlkLmh2ZXJzaW9uID09IElLRV9NRVJDRURfUE9SVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgSVNfUExVVE8oc3RydWN0IHBhcmlzY19kZXZpY2UgKmQpIHsKLQlyZXR1cm4gZC0+aWQuaHZlcnNpb24gPT0gUExVVE9fTUNLSU5MRVlfUE9SVDsKLX0KLQotI2RlZmluZSBQTFVUT19JT1ZBX0JBU0UJKDFVTCoxMDI0KjEwMjQqMTAyNCkJLyogMUdCICovCi0jZGVmaW5lIFBMVVRPX0lPVkFfU0laRQkoMVVMKjEwMjQqMTAyNCoxMDI0KQkvKiAxR0IgKi8KLSNkZWZpbmUgUExVVE9fR0FSVF9TSVpFCShQTFVUT19JT1ZBX1NJWkUgLyAyKQotCi0jZGVmaW5lIFNCQV9QRElSX1ZBTElEX0JJVAkweDgwMDAwMDAwMDAwMDAwMDBVTEwKLQotI2RlZmluZSBTQkFfQUdQR0FSVF9DT09LSUUJMHgwMDAwYmFkYmFkYzBmZmVlVUxMCi0KLSNkZWZpbmUgU0JBX0ZVTkNfSUQJMHgwMDAwCS8qIGZ1bmN0aW9uIGlkICovCi0jZGVmaW5lIFNCQV9GQ0xBU1MJMHgwMDA4CS8qIGZ1bmN0aW9uIGNsYXNzLCBiaXN0LCBoZWFkZXIsIHJldi4uLiAqLwotCi0jZGVmaW5lIFNCQV9GVU5DX1NJWkUgNDA5NiAgIC8qIFNCQSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIHJlZyBzZXQgKi8KLQotI2RlZmluZSBBU1RST19JT0NfT0ZGU0VUCSgzMiAqIFNCQV9GVU5DX1NJWkUpCi0jZGVmaW5lIFBMVVRPX0lPQ19PRkZTRVQJKDEgKiBTQkFfRlVOQ19TSVpFKQotLyogSWtlJ3MgSU9DJ3Mgb2NjdXB5IGZ1bmN0aW9ucyAyIGFuZCAzICovCi0jZGVmaW5lIElLRV9JT0NfT0ZGU0VUKHApCSgocCsyKSAqIFNCQV9GVU5DX1NJWkUpCi0KLSNkZWZpbmUgSU9DX0NUUkwgICAgICAgICAgMHg4CS8qIElPQ19DVFJMIG9mZnNldCAqLwotI2RlZmluZSBJT0NfQ1RSTF9UQyAgICAgICAoMSA8PCAwKSAvKiBUT0MgRW5hYmxlICovCi0jZGVmaW5lIElPQ19DVFJMX0NFICAgICAgICgxIDw8IDEpIC8qIENvYWxlc2NlIEVuYWJsZSAqLwotI2RlZmluZSBJT0NfQ1RSTF9ERSAgICAgICAoMSA8PCAyKSAvKiBEaWxsb24gRW5hYmxlICovCi0jZGVmaW5lIElPQ19DVFJMX1JNICAgICAgICgxIDw8IDgpIC8qIFJlYWwgTW9kZSAqLwotI2RlZmluZSBJT0NfQ1RSTF9OQyAgICAgICAoMSA8PCA5KSAvKiBOb24gQ29oZXJlbnQgTW9kZSAqLwotI2RlZmluZSBJT0NfQ1RSTF9ENCAgICAgICAoMSA8PCAxMSkgLyogRGlzYWJsZSA0LWJ5dGUgY29hbGVzY2luZyAqLwotI2RlZmluZSBJT0NfQ1RSTF9ERCAgICAgICAoMSA8PCAxMykgLyogRGlzYWJsZSBkaXN0ci4gTE1NSU8gcmFuZ2UgY29hbGVzY2luZyAqLwotCi0vKgotKiogT2Zmc2V0cyBpbnRvIE1CSUIgKEZ1bmN0aW9uIDAgb24gSWtlIGFuZCBob3BlZnVsbHkgQXN0cm8pCi0qKiBGaXJtd2FyZSBwcm9ncmFtcyB0aGlzIHN0dWZmLiBEb24ndCB0b3VjaCBpdC4KLSovCi0jZGVmaW5lIExNTUlPX0RJUkVDVDBfQkFTRSAgMHgzMDAKLSNkZWZpbmUgTE1NSU9fRElSRUNUMF9NQVNLICAweDMwOAotI2RlZmluZSBMTU1JT19ESVJFQ1QwX1JPVVRFIDB4MzEwCi0KLSNkZWZpbmUgTE1NSU9fRElTVF9CQVNFICAweDM2MAotI2RlZmluZSBMTU1JT19ESVNUX01BU0sgIDB4MzY4Ci0jZGVmaW5lIExNTUlPX0RJU1RfUk9VVEUgMHgzNzAKLQotI2RlZmluZSBJT1NfRElTVF9CQVNFCTB4MzkwCi0jZGVmaW5lIElPU19ESVNUX01BU0sJMHgzOTgKLSNkZWZpbmUgSU9TX0RJU1RfUk9VVEUJMHgzQTAKLQotI2RlZmluZSBJT1NfRElSRUNUX0JBU0UJMHgzQzAKLSNkZWZpbmUgSU9TX0RJUkVDVF9NQVNLCTB4M0M4Ci0jZGVmaW5lIElPU19ESVJFQ1RfUk9VVEUgMHgzRDAKLQotLyoKLSoqIE9mZnNldHMgaW50byBJL08gVExCIChGdW5jdGlvbiAyIGFuZCAzIG9uIElrZSkKLSovCi0jZGVmaW5lIFJPUEUwX0NUTAkweDIwMCAgLyogInJlZ2J1cyBwY2kwIiAqLwotI2RlZmluZSBST1BFMV9DVEwJMHgyMDgKLSNkZWZpbmUgUk9QRTJfQ1RMCTB4MjEwCi0jZGVmaW5lIFJPUEUzX0NUTAkweDIxOAotI2RlZmluZSBST1BFNF9DVEwJMHgyMjAKLSNkZWZpbmUgUk9QRTVfQ1RMCTB4MjI4Ci0jZGVmaW5lIFJPUEU2X0NUTAkweDIzMAotI2RlZmluZSBST1BFN19DVEwJMHgyMzgKLQotI2RlZmluZSBJT0NfUk9QRTBfQ0ZHCTB4NTAwCS8qIHBsdXRvIG9ubHkgKi8KLSNkZWZpbmUgICBJT0NfUk9QRV9BTwkgIDB4MTAJLyogQWxsb3cgIlJlbGF4ZWQgT3JkZXJpbmciICovCi0KLSNkZWZpbmUgSEZfRU5BQkxFCTB4NDAKLQotI2RlZmluZSBJT0NfSUJBU0UJMHgzMDAJLyogSU8gVExCICovCi0jZGVmaW5lIElPQ19JTUFTSwkweDMwOAotI2RlZmluZSBJT0NfUENPTQkweDMxMAotI2RlZmluZSBJT0NfVENORkcJMHgzMTgKLSNkZWZpbmUgSU9DX1BESVJfQkFTRQkweDMyMAotCi0vKgotKiogSU9DIHN1cHBvcnRzIDQvOC8xNi82NEtCIHBhZ2Ugc2l6ZXMgKHNlZSBUQ05GRyByZWdpc3RlcikKLSoqIEl0J3Mgc2FmZXIgKGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uKSB0byBrZWVwIERNQSBwYWdlIG1hcHBpbmdzCi0qKiBlcXVpdmFsZW50bHkgc2l6ZWQgdG8gVk0gUEFHRV9TSVpFLgotKioKLSoqIFdlIHJlYWxseSBjYW4ndCBhdm9pZCBnZW5lcmF0aW5nIGEgbmV3IG1hcHBpbmcgZm9yIGVhY2gKLSoqIHBhZ2Ugc2luY2UgdGhlIFZpcnR1YWwgQ29oZXJlbmNlIEluZGV4IGhhcyB0byBiZSBnZW5lcmF0ZWQKLSoqIGFuZCB1cGRhdGVkIGZvciBlYWNoIHBhZ2UuCi0qKgotKiogUEFHRV9TSVpFIGNvdWxkIGJlIGdyZWF0ZXIgdGhhbiBJT1ZQX1NJWkUuIEJ1dCBub3QgdGhlIGludmVyc2UuCi0qLwotI2RlZmluZSBJT1ZQX1NJWkUJUEFHRV9TSVpFCi0jZGVmaW5lIElPVlBfU0hJRlQJUEFHRV9TSElGVAotI2RlZmluZSBJT1ZQX01BU0sJUEFHRV9NQVNLCi0KLSNkZWZpbmUgU0JBX1BFUkZfQ0ZHCTB4NzA4CS8qIFBlcmZvcm1hbmNlIENvdW50ZXIgc3R1ZmYgKi8KLSNkZWZpbmUgU0JBX1BFUkZfTUFTSzEJMHg3MTgKLSNkZWZpbmUgU0JBX1BFUkZfTUFTSzIJMHg3MzAKLQotLyoKLSoqIE9mZnNldHMgaW50byBQQ0kgUGVyZm9ybWFuY2UgQ291bnRlcnMgKGZ1bmN0aW9ucyAxMiBhbmQgMTMpCi0qKiBDb250cm9sbGVkIGJ5IFBFUkYgcmVnaXN0ZXJzIGluIGZ1bmN0aW9uIDIgJiAzIHJlc3BlY3RpdmVseS4KLSovCi0jZGVmaW5lIFNCQV9QRVJGX0NOVDEJMHgyMDAKLSNkZWZpbmUgU0JBX1BFUkZfQ05UMgkweDIwOAotI2RlZmluZSBTQkFfUEVSRl9DTlQzCTB4MjEwCi0KLS8qCi0qKiBsYmFfZGV2aWNlOiBQZXIgaW5zdGFuY2UgRWxyb3kgZGF0YSBzdHJ1Y3R1cmUKLSovCi1zdHJ1Y3QgbGJhX2RldmljZSB7Ci0Jc3RydWN0IHBjaV9oYmFfZGF0YQloYmE7Ci0KLQlzcGlubG9ja190CQlsYmFfbG9jazsKLQl2b2lkCQkJKmlvc2FwaWNfb2JqOwotCi0jaWZkZWYgQ09ORklHXzY0QklUCi0Jdm9pZCBfX2lvbWVtCQkqaW9wX2Jhc2U7CS8qIFBBX1ZJRVcgLSBmb3IgSU8gcG9ydCBhY2Nlc3NvciBmdW5jcyAqLwotI2VuZGlmCi0KLQlpbnQJCQlmbGFnczsJCS8qIHN0YXRlL2Z1bmN0aW9uYWxpdHkgZW5hYmxlZCAqLwotCWludAkJCWh3X3JldjsJCS8qIEhXIHJldmlzaW9uIG9mIGNoaXAgKi8KLX07Ci0KLSNkZWZpbmUgRUxST1lfSFZFUlMJCTB4NzgyCi0jZGVmaW5lIE1FUkNVUllfSFZFUlMJCTB4NzgzCi0jZGVmaW5lIFFVSUNLU0lMVkVSX0hWRVJTCTB4Nzg0Ci0KLXN0YXRpYyBpbmxpbmUgaW50IElTX0VMUk9ZKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkKSB7Ci0JcmV0dXJuIChkLT5pZC5odmVyc2lvbiA9PSBFTFJPWV9IVkVSUyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IElTX01FUkNVUlkoc3RydWN0IHBhcmlzY19kZXZpY2UgKmQpIHsKLQlyZXR1cm4gKGQtPmlkLmh2ZXJzaW9uID09IE1FUkNVUllfSFZFUlMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBJU19RVUlDS1NJTFZFUihzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZCkgewotCXJldHVybiAoZC0+aWQuaHZlcnNpb24gPT0gUVVJQ0tTSUxWRVJfSFZFUlMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZ3BfbW9kZV9tZXJjdXJ5KHZvaWQgX19pb21lbSAqaHBhKSB7Ci0JdTY0IGJ1c19tb2RlOwotCi0JYnVzX21vZGUgPSByZWFkbChocGEgKyAweDA2MjApOwotCWlmIChidXNfbW9kZSAmIDEpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBJL08gU0FQSUMgaW5pdCBmdW5jdGlvbgotKiogQ2FsbGVyIGtub3dzIHdoZXJlIGFuIEkvTyBTQVBJQyBpcy4gTEJBIGhhcyBhbiBpbnRlZ3JhdGVkIEkvTyBTQVBJQy4KLSoqIENhbGwgc2V0dXAgYXMgcGFydCBvZiBwZXIgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24uCi0qKiAoaWUgKm5vdCogaW5pdF9tb2R1bGUoKSBmdW5jdGlvbiB1bmxlc3Mgb25seSBvbmUgaXMgcHJlc2VudC4pCi0qKiBmaXh1cF9pcnEgaXMgdG8gaW5pdGlhbGl6ZSBQQ0kgSVJRIGxpbmUgc3VwcG9ydCBhbmQKLSoqIHZpcnR1YWxpemUgcGNpZGV2LT5pcnEgdmFsdWUuIFRvIGJlIGNhbGxlZCBieSBwY2lfZml4dXBfYnVzKCkuCi0qLwotZXh0ZXJuIHZvaWQgKmlvc2FwaWNfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBocGEpOwotZXh0ZXJuIGludCBpb3NhcGljX2ZpeHVwX2lycSh2b2lkICpvYmosIHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOwotCi0jZGVmaW5lIExCQV9GVU5DX0lECTB4MDAwMAkvKiBmdW5jdGlvbiBpZCAqLwotI2RlZmluZSBMQkFfRkNMQVNTCTB4MDAwOAkvKiBmdW5jdGlvbiBjbGFzcywgYmlzdCwgaGVhZGVyLCByZXYuLi4gKi8KLSNkZWZpbmUgTEJBX0NBUEFCTEUJMHgwMDMwCS8qIGNhcGFiaWxpdGllcyByZWdpc3RlciAqLwotCi0jZGVmaW5lIExCQV9QQ0lfQ0ZHX0FERFIJMHgwMDQwCS8qIHBva2UgQ0ZHIGFkZHJlc3MgaGVyZSAqLwotI2RlZmluZSBMQkFfUENJX0NGR19EQVRBCTB4MDA0OAkvKiByZWFkIG9yIHdyaXRlIGRhdGEgaGVyZSAqLwotCi0jZGVmaW5lIExCQV9QTUNfTVRMVAkweDAwNTAJLyogRmlybXdhcmUgc2V0cyB0aGlzIC0gcmVhZCBvbmx5LiAqLwotI2RlZmluZSBMQkFfRldfU0NSQVRDSAkweDAwNTgJLyogRmlybXdhcmUgd3JpdGVzIHRoZSBQQ0kgYnVzIG51bWJlciBoZXJlLiAqLwotI2RlZmluZSBMQkFfRVJST1JfQUREUgkweDAwNzAJLyogT24gZXJyb3IsIGFkZHJlc3MgZ2V0cyBsb2dnZWQgaGVyZSAqLwotCi0jZGVmaW5lIExCQV9BUkJfTUFTSwkweDAwODAJLyogYml0IDAgZW5hYmxlIGFyYml0cmF0aW9uLiBQQVQvUERDIGVuYWJsZXMgKi8KLSNkZWZpbmUgTEJBX0FSQl9QUkkJMHgwMDg4CS8qIGZpcm13YXJlIHNldHMgdGhpcy4gKi8KLSNkZWZpbmUgTEJBX0FSQl9NT0RFCTB4MDA5MAkvKiBmaXJtd2FyZSBzZXRzIHRoaXMuICovCi0jZGVmaW5lIExCQV9BUkJfTVRMVAkweDAwOTgJLyogZmlybXdhcmUgc2V0cyB0aGlzLiAqLwotCi0jZGVmaW5lIExCQV9NT0RfSUQJMHgwMTAwCS8qIE1vZHVsZSBJRC4gUERDX1BBVF9DRUxMIHJlcG9ydHMgNCAqLwotCi0jZGVmaW5lIExCQV9TVEFUX0NUTAkweDAxMDgJLyogU3RhdHVzICYgQ29udHJvbCAqLwotI2RlZmluZSAgIExCQV9CVVNfUkVTRVQJCTB4MDEJLyogIERlYXNzZXJ0IFBDSSBCdXMgUmVzZXQgU2lnbmFsICovCi0jZGVmaW5lICAgQ0xFQVJfRVJSTE9HCQkweDEwCS8qICAiQ2xlYXIgRXJyb3IgTG9nIiBjbWQgKi8KLSNkZWZpbmUgICBDTEVBUl9FUlJMT0dfRU5BQkxFCTB4MjAJLyogICJDbGVhciBFcnJvciBMb2ciIEVuYWJsZSAqLwotI2RlZmluZSAgIEhGX0VOQUJMRQkweDQwCS8qICAgIGVuYWJsZSBIRiBtb2RlIChkZWZhdWx0IGlzIC0xIG1vZGUpICovCi0KLSNkZWZpbmUgTEJBX0xNTUlPX0JBU0UJMHgwMjAwCS8qIDwgNEdCIEkvTyBhZGRyZXNzIHJhbmdlICovCi0jZGVmaW5lIExCQV9MTU1JT19NQVNLCTB4MDIwOAotCi0jZGVmaW5lIExCQV9HTU1JT19CQVNFCTB4MDIxMAkvKiA+IDRHQiBJL08gYWRkcmVzcyByYW5nZSAqLwotI2RlZmluZSBMQkFfR01NSU9fTUFTSwkweDAyMTgKLQotI2RlZmluZSBMQkFfV0xNTUlPX0JBU0UJMHgwMjIwCS8qIEFsbCA8IDRHQiByYW5nZXMgdW5kZXIgdGhlIHNhbWUgKlNCQSogKi8KLSNkZWZpbmUgTEJBX1dMTU1JT19NQVNLCTB4MDIyOAotCi0jZGVmaW5lIExCQV9XR01NSU9fQkFTRQkweDAyMzAJLyogQWxsID4gNEdCIHJhbmdlcyB1bmRlciB0aGUgc2FtZSAqU0JBKiAqLwotI2RlZmluZSBMQkFfV0dNTUlPX01BU0sJMHgwMjM4Ci0KLSNkZWZpbmUgTEJBX0lPU19CQVNFCTB4MDI0MAkvKiBJL08gcG9ydCBzcGFjZSBmb3IgdGhpcyBMQkEgKi8KLSNkZWZpbmUgTEJBX0lPU19NQVNLCTB4MDI0OAotCi0jZGVmaW5lIExCQV9FTE1NSU9fQkFTRQkweDAyNTAJLyogRXh0cmEgTE1NSU8gcmFuZ2UgKi8KLSNkZWZpbmUgTEJBX0VMTU1JT19NQVNLCTB4MDI1OAotCi0jZGVmaW5lIExCQV9FSU9TX0JBU0UJMHgwMjYwCS8qIEV4dHJhIEkvTyBwb3J0IHNwYWNlICovCi0jZGVmaW5lIExCQV9FSU9TX01BU0sJMHgwMjY4Ci0KLSNkZWZpbmUgTEJBX0dMT0JBTF9NQVNLCTB4MDI3MAkvKiBNZXJjdXJ5IG9ubHk6IEdsb2JhbCBBZGRyZXNzIE1hc2sgKi8KLSNkZWZpbmUgTEJBX0RNQV9DVEwJMHgwMjc4CS8qIGZpcm13YXJlIHNldHMgdGhpcyAqLwotCi0jZGVmaW5lIExCQV9JQkFTRQkweDAzMDAJLyogU0JBIERNQSBzdXBwb3J0ICovCi0jZGVmaW5lIExCQV9JTUFTSwkweDAzMDgKLQotLyogRklYTUU6IGlnbm9yZSBETUEgSGludCBzdHVmZiB1bnRpbCB3ZSBjYW4gbWVhc3VyZSBwZXJmb3JtYW5jZSAqLwotI2RlZmluZSBMQkFfSElOVF9DRkcJMHgwMzEwCi0jZGVmaW5lIExCQV9ISU5UX0JBU0UJMHgwMzgwCS8qIDE0IHJlZ2lzdGVycyBhdCBldmVyeSA4IGJ5dGVzLiAqLwotCi0jZGVmaW5lIExCQV9CVVNfTU9ERQkweDA2MjAKLQotLyogRVJST1IgcmVncyBhcmUgbmVlZGVkIGZvciBjb25maWcgY3ljbGUga2x1Z2VzICovCi0jZGVmaW5lIExCQV9FUlJPUl9DT05GSUcgMHgwNjgwCi0jZGVmaW5lICAgICBMQkFfU01BUlRfTU9ERSAweDIwCi0jZGVmaW5lIExCQV9FUlJPUl9TVEFUVVMgMHgwNjg4Ci0jZGVmaW5lIExCQV9ST1BFX0NUTCAgICAgMHgwNkEwCi0KLSNkZWZpbmUgTEJBX0lPU0FQSUNfQkFTRQkweDgwMCAvKiBPZmZzZXQgb2YgSVJRIGxvZ2ljICovCi0KLSNlbmRpZiAvKl9BU01fUEFSSVNDX1JPUEVTX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODEyNzQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jaWZuZGVmIF9BU01fUEFSSVNDX1RIUkVBRF9JTkZPX0gKLSNkZWZpbmUgX0FTTV9QQVJJU0NfVEhSRUFEX0lORk9fSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQotc3RydWN0IHRocmVhZF9pbmZvIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgZXhlY19kb21haW4gKmV4ZWNfZG9tYWluOy8qIGV4ZWN1dGlvbiBkb21haW4gKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogdGhyZWFkX2luZm8gZmxhZ3MgKHNlZSBUSUZfKikgKi8KLQltbV9zZWdtZW50X3QgYWRkcl9saW1pdDsJLyogdXNlci1sZXZlbCBhZGRyZXNzIHNwYWNlIGxpbWl0ICovCi0JX191MzIgY3B1OwkJCS8qIGN1cnJlbnQgQ1BVICovCi0JaW50IHByZWVtcHRfY291bnQ7CQkvKiAwPXByZW1wdGFibGUsIDwwPUJVRzsgd2lsbCBhbHNvIHNlcnZlIGFzIGJoLWNvdW50ZXIgKi8KLQlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOwotfTsKLQotI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCi17CQkJCQkJXAotCS50YXNrCQk9ICZ0c2ssCQkJXAotCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCi0JLmZsYWdzCQk9IDAsCQkJXAotCS5jcHUJCT0gMCwJCQlcCi0JLmFkZHJfbGltaXQJPSBLRVJORUxfRFMsCQlcCi0JLnByZWVtcHRfY291bnQJPSAxLAkJCVwKLSAgCS5yZXN0YXJ0X2Jsb2NrCT0gewkJCVwKLQkJLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsCVwKLQl9CQkJCQlcCi19Ci0KLSNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbyAgICAgICAgKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQotI2RlZmluZSBpbml0X3N0YWNrICAgICAgICAgICAgICAoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCi0KLS8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCi0KLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgICAgICAgICAgICAyCi0vKiBCZSBzdXJlIHRvIGh1bnQgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBkb3duIHdoZW4geW91IGNoYW5nZSB0aGUgc2l6ZSBvZgotICogdGhlIGtlcm5lbCBzdGFjayAqLwotI2RlZmluZSBUSFJFQURfU0laRSAgICAgICAgICAgICAoUEFHRV9TSVpFIDw8IFRIUkVBRF9TSVpFX09SREVSKQotI2RlZmluZSBUSFJFQURfU0hJRlQgICAgICAgICAgICAoUEFHRV9TSElGVCArIFRIUkVBRF9TSVpFX09SREVSKQotCi0vKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLwotI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKiltZmN0bCgzMCkpCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWSAqLwotCi0jZGVmaW5lIFBSRUVNUFRfQUNUSVZFX0JJVAkyOAotI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJKDEgPDwgUFJFRU1QVF9BQ1RJVkVfQklUKQotCi0vKgotICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCi0gKi8KLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwotI2RlZmluZSBUSUZfU0lHUEVORElORwkJMQkvKiBzaWduYWwgcGVuZGluZyAqLwotI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTIJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwotI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMwkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRCAqLwotI2RlZmluZSBUSUZfMzJCSVQgICAgICAgICAgICAgICA0ICAgICAgIC8qIDMyIGJpdCBiaW5hcnkgKi8KLSNkZWZpbmUgVElGX01FTURJRQkJNQotI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTYJLyogcmVzdG9yZSBzYXZlZCBzaWduYWwgbWFzayAqLwotCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKLSNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKLSNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDEgPDwgVElGX05FRURfUkVTQ0hFRCkKLSNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCi0jZGVmaW5lIF9USUZfMzJCSVQJCSgxIDw8IFRJRl8zMkJJVCkKLSNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKLQotI2RlZmluZSBfVElGX1VTRVJfV09SS19NQVNLICAgICAoX1RJRl9TSUdQRU5ESU5HIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RJRl9ORUVEX1JFU0NIRUQgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fUEFSSVNDX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdkODU3Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OTEgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1BBUklTQ19VTklTVERfSF8KLSNkZWZpbmUgX0FTTV9QQVJJU0NfVU5JU1REX0hfCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCi0gKi8KLQotLyoKLSAqICAgSFAtVVggc3lzdGVtIGNhbGxzIGdldCB0aGVpciBuYXRpdmUgbnVtYmVycyBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkuCi0gKi8KLQotI2RlZmluZSBfX05SX0hQVVhfZXhpdCAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBfX05SX0hQVVhfZm9yayAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBfX05SX0hQVVhfcmVhZCAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBfX05SX0hQVVhfd3JpdGUgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBfX05SX0hQVVhfb3BlbiAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBfX05SX0hQVVhfY2xvc2UgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBfX05SX0hQVVhfd2FpdCAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBfX05SX0hQVVhfY3JlYXQgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBfX05SX0hQVVhfbGluayAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBfX05SX0hQVVhfdW5saW5rICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBfX05SX0hQVVhfZXhlY3YgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBfX05SX0hQVVhfY2hkaXIgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBfX05SX0hQVVhfdGltZSAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBfX05SX0hQVVhfbWtub2QgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBfX05SX0hQVVhfY2htb2QgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBfX05SX0hQVVhfY2hvd24gICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBfX05SX0hQVVhfYnJlYWsgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBfX05SX0hQVVhfbGNobW9kICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBfX05SX0hQVVhfbHNlZWsgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBfX05SX0hQVVhfZ2V0cGlkICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBfX05SX0hQVVhfbW91bnQgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBfX05SX0hQVVhfdW1vdW50ICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBfX05SX0hQVVhfc2V0dWlkICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBfX05SX0hQVVhfZ2V0dWlkICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBfX05SX0hQVVhfc3RpbWUgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBfX05SX0hQVVhfcHRyYWNlICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBfX05SX0hQVVhfYWxhcm0gICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBfX05SX0hQVVhfb2xkZnN0YXQgICAgICAgICAgICAgICAyOAotI2RlZmluZSBfX05SX0hQVVhfcGF1c2UgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBfX05SX0hQVVhfdXRpbWUgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBfX05SX0hQVVhfc3R0eSAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBfX05SX0hQVVhfZ3R0eSAgICAgICAgICAgICAgICAgICAzMgotI2RlZmluZSBfX05SX0hQVVhfYWNjZXNzICAgICAgICAgICAgICAgICAzMwotI2RlZmluZSBfX05SX0hQVVhfbmljZSAgICAgICAgICAgICAgICAgICAzNAotI2RlZmluZSBfX05SX0hQVVhfZnRpbWUgICAgICAgICAgICAgICAgICAzNQotI2RlZmluZSBfX05SX0hQVVhfc3luYyAgICAgICAgICAgICAgICAgICAzNgotI2RlZmluZSBfX05SX0hQVVhfa2lsbCAgICAgICAgICAgICAgICAgICAzNwotI2RlZmluZSBfX05SX0hQVVhfc3RhdCAgICAgICAgICAgICAgICAgICAzOAotI2RlZmluZSBfX05SX0hQVVhfc2V0cGdycDMgICAgICAgICAgICAgICAzOQotI2RlZmluZSBfX05SX0hQVVhfbHN0YXQgICAgICAgICAgICAgICAgICA0MAotI2RlZmluZSBfX05SX0hQVVhfZHVwICAgICAgICAgICAgICAgICAgICA0MQotI2RlZmluZSBfX05SX0hQVVhfcGlwZSAgICAgICAgICAgICAgICAgICA0MgotI2RlZmluZSBfX05SX0hQVVhfdGltZXMgICAgICAgICAgICAgICAgICA0MwotI2RlZmluZSBfX05SX0hQVVhfcHJvZmlsICAgICAgICAgICAgICAgICA0NAotI2RlZmluZSBfX05SX0hQVVhfa2lfY2FsbCAgICAgICAgICAgICAgICA0NQotI2RlZmluZSBfX05SX0hQVVhfc2V0Z2lkICAgICAgICAgICAgICAgICA0NgotI2RlZmluZSBfX05SX0hQVVhfZ2V0Z2lkICAgICAgICAgICAgICAgICA0NwotI2RlZmluZSBfX05SX0hQVVhfc2lnc3lzICAgICAgICAgICAgICAgICA0OAotI2RlZmluZSBfX05SX0hQVVhfcmVzZXJ2ZWQxICAgICAgICAgICAgICA0OQotI2RlZmluZSBfX05SX0hQVVhfcmVzZXJ2ZWQyICAgICAgICAgICAgICA1MAotI2RlZmluZSBfX05SX0hQVVhfYWNjdCAgICAgICAgICAgICAgICAgICA1MQotI2RlZmluZSBfX05SX0hQVVhfc2V0X3VzZXJ0aHJlYWRpZCAgICAgICA1MgotI2RlZmluZSBfX05SX0hQVVhfb2xkbG9jayAgICAgICAgICAgICAgICA1MwotI2RlZmluZSBfX05SX0hQVVhfaW9jdGwgICAgICAgICAgICAgICAgICA1NAotI2RlZmluZSBfX05SX0hQVVhfcmVib290ICAgICAgICAgICAgICAgICA1NQotI2RlZmluZSBfX05SX0hQVVhfc3ltbGluayAgICAgICAgICAgICAgICA1NgotI2RlZmluZSBfX05SX0hQVVhfdXRzc3lzICAgICAgICAgICAgICAgICA1NwotI2RlZmluZSBfX05SX0hQVVhfcmVhZGxpbmsgICAgICAgICAgICAgICA1OAotI2RlZmluZSBfX05SX0hQVVhfZXhlY3ZlICAgICAgICAgICAgICAgICA1OQotI2RlZmluZSBfX05SX0hQVVhfdW1hc2sgICAgICAgICAgICAgICAgICA2MAotI2RlZmluZSBfX05SX0hQVVhfY2hyb290ICAgICAgICAgICAgICAgICA2MQotI2RlZmluZSBfX05SX0hQVVhfZmNudGwgICAgICAgICAgICAgICAgICA2MgotI2RlZmluZSBfX05SX0hQVVhfdWxpbWl0ICAgICAgICAgICAgICAgICA2MwotI2RlZmluZSBfX05SX0hQVVhfZ2V0cGFnZXNpemUgICAgICAgICAgICA2NAotI2RlZmluZSBfX05SX0hQVVhfbXJlbWFwICAgICAgICAgICAgICAgICA2NQotI2RlZmluZSBfX05SX0hQVVhfdmZvcmsgICAgICAgICAgICAgICAgICA2NgotI2RlZmluZSBfX05SX0hQVVhfdnJlYWQgICAgICAgICAgICAgICAgICA2NwotI2RlZmluZSBfX05SX0hQVVhfdndyaXRlICAgICAgICAgICAgICAgICA2OAotI2RlZmluZSBfX05SX0hQVVhfc2JyayAgICAgICAgICAgICAgICAgICA2OQotI2RlZmluZSBfX05SX0hQVVhfc3N0ayAgICAgICAgICAgICAgICAgICA3MAotI2RlZmluZSBfX05SX0hQVVhfbW1hcCAgICAgICAgICAgICAgICAgICA3MQotI2RlZmluZSBfX05SX0hQVVhfdmFkdmlzZSAgICAgICAgICAgICAgICA3MgotI2RlZmluZSBfX05SX0hQVVhfbXVubWFwICAgICAgICAgICAgICAgICA3MwotI2RlZmluZSBfX05SX0hQVVhfbXByb3RlY3QgICAgICAgICAgICAgICA3NAotI2RlZmluZSBfX05SX0hQVVhfbWFkdmlzZSAgICAgICAgICAgICAgICA3NQotI2RlZmluZSBfX05SX0hQVVhfdmhhbmd1cCAgICAgICAgICAgICAgICA3NgotI2RlZmluZSBfX05SX0hQVVhfc3dhcG9mZiAgICAgICAgICAgICAgICA3NwotI2RlZmluZSBfX05SX0hQVVhfbWluY29yZSAgICAgICAgICAgICAgICA3OAotI2RlZmluZSBfX05SX0hQVVhfZ2V0Z3JvdXBzICAgICAgICAgICAgICA3OQotI2RlZmluZSBfX05SX0hQVVhfc2V0Z3JvdXBzICAgICAgICAgICAgICA4MAotI2RlZmluZSBfX05SX0hQVVhfZ2V0cGdycDIgICAgICAgICAgICAgICA4MQotI2RlZmluZSBfX05SX0hQVVhfc2V0cGdycDIgICAgICAgICAgICAgICA4MgotI2RlZmluZSBfX05SX0hQVVhfc2V0aXRpbWVyICAgICAgICAgICAgICA4MwotI2RlZmluZSBfX05SX0hQVVhfd2FpdDMgICAgICAgICAgICAgICAgICA4NAotI2RlZmluZSBfX05SX0hQVVhfc3dhcG9uICAgICAgICAgICAgICAgICA4NQotI2RlZmluZSBfX05SX0hQVVhfZ2V0aXRpbWVyICAgICAgICAgICAgICA4NgotI2RlZmluZSBfX05SX0hQVVhfZ2V0aG9zdG5hbWU0MiAgICAgICAgICA4NwotI2RlZmluZSBfX05SX0hQVVhfc2V0aG9zdG5hbWU0MiAgICAgICAgICA4OAotI2RlZmluZSBfX05SX0hQVVhfZ2V0ZHRhYmxlc2l6ZSAgICAgICAgICA4OQotI2RlZmluZSBfX05SX0hQVVhfZHVwMiAgICAgICAgICAgICAgICAgICA5MAotI2RlZmluZSBfX05SX0hQVVhfZ2V0ZG9wdCAgICAgICAgICAgICAgICA5MQotI2RlZmluZSBfX05SX0hQVVhfZnN0YXQgICAgICAgICAgICAgICAgICA5MgotI2RlZmluZSBfX05SX0hQVVhfc2VsZWN0ICAgICAgICAgICAgICAgICA5MwotI2RlZmluZSBfX05SX0hQVVhfc2V0ZG9wdCAgICAgICAgICAgICAgICA5NAotI2RlZmluZSBfX05SX0hQVVhfZnN5bmMgICAgICAgICAgICAgICAgICA5NQotI2RlZmluZSBfX05SX0hQVVhfc2V0cHJpb3JpdHkgICAgICAgICAgICA5NgotI2RlZmluZSBfX05SX0hQVVhfc29ja2V0X29sZCAgICAgICAgICAgICA5NwotI2RlZmluZSBfX05SX0hQVVhfY29ubmVjdF9vbGQgICAgICAgICAgICA5OAotI2RlZmluZSBfX05SX0hQVVhfYWNjZXB0X29sZCAgICAgICAgICAgICA5OQotI2RlZmluZSBfX05SX0hQVVhfZ2V0cHJpb3JpdHkgICAgICAgICAgIDEwMAotI2RlZmluZSBfX05SX0hQVVhfc2VuZF9vbGQgICAgICAgICAgICAgIDEwMQotI2RlZmluZSBfX05SX0hQVVhfcmVjdl9vbGQgICAgICAgICAgICAgIDEwMgotI2RlZmluZSBfX05SX0hQVVhfc29ja2V0YWRkcl9vbGQgICAgICAgIDEwMwotI2RlZmluZSBfX05SX0hQVVhfYmluZF9vbGQgICAgICAgICAgICAgIDEwNAotI2RlZmluZSBfX05SX0hQVVhfc2V0c29ja29wdF9vbGQgICAgICAgIDEwNQotI2RlZmluZSBfX05SX0hQVVhfbGlzdGVuX29sZCAgICAgICAgICAgIDEwNgotI2RlZmluZSBfX05SX0hQVVhfdnRpbWVzX29sZCAgICAgICAgICAgIDEwNwotI2RlZmluZSBfX05SX0hQVVhfc2lndmVjdG9yICAgICAgICAgICAgIDEwOAotI2RlZmluZSBfX05SX0hQVVhfc2lnYmxvY2sgICAgICAgICAgICAgIDEwOQotI2RlZmluZSBfX05SX0hQVVhfc2lnZ2V0bWFzayAgICAgICAgICAgIDExMAotI2RlZmluZSBfX05SX0hQVVhfc2lncGF1c2UgICAgICAgICAgICAgIDExMQotI2RlZmluZSBfX05SX0hQVVhfc2lnc3RhY2sgICAgICAgICAgICAgIDExMgotI2RlZmluZSBfX05SX0hQVVhfcmVjdm1zZ19vbGQgICAgICAgICAgIDExMwotI2RlZmluZSBfX05SX0hQVVhfc2VuZG1zZ19vbGQgICAgICAgICAgIDExNAotI2RlZmluZSBfX05SX0hQVVhfdnRyYWNlX29sZCAgICAgICAgICAgIDExNQotI2RlZmluZSBfX05SX0hQVVhfZ2V0dGltZW9mZGF5ICAgICAgICAgIDExNgotI2RlZmluZSBfX05SX0hQVVhfZ2V0cnVzYWdlICAgICAgICAgICAgIDExNwotI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja29wdF9vbGQgICAgICAgIDExOAotI2RlZmluZSBfX05SX0hQVVhfcmVzdWJhX29sZCAgICAgICAgICAgIDExOQotI2RlZmluZSBfX05SX0hQVVhfcmVhZHYgICAgICAgICAgICAgICAgIDEyMAotI2RlZmluZSBfX05SX0hQVVhfd3JpdGV2ICAgICAgICAgICAgICAgIDEyMQotI2RlZmluZSBfX05SX0hQVVhfc2V0dGltZW9mZGF5ICAgICAgICAgIDEyMgotI2RlZmluZSBfX05SX0hQVVhfZmNob3duICAgICAgICAgICAgICAgIDEyMwotI2RlZmluZSBfX05SX0hQVVhfZmNobW9kICAgICAgICAgICAgICAgIDEyNAotI2RlZmluZSBfX05SX0hQVVhfcmVjdmZyb21fb2xkICAgICAgICAgIDEyNQotI2RlZmluZSBfX05SX0hQVVhfc2V0cmVzdWlkICAgICAgICAgICAgIDEyNgotI2RlZmluZSBfX05SX0hQVVhfc2V0cmVzZ2lkICAgICAgICAgICAgIDEyNwotI2RlZmluZSBfX05SX0hQVVhfcmVuYW1lICAgICAgICAgICAgICAgIDEyOAotI2RlZmluZSBfX05SX0hQVVhfdHJ1bmNhdGUgICAgICAgICAgICAgIDEyOQotI2RlZmluZSBfX05SX0hQVVhfZnRydW5jYXRlICAgICAgICAgICAgIDEzMAotI2RlZmluZSBfX05SX0hQVVhfZmxvY2tfb2xkICAgICAgICAgICAgIDEzMQotI2RlZmluZSBfX05SX0hQVVhfc3lzY29uZiAgICAgICAgICAgICAgIDEzMgotI2RlZmluZSBfX05SX0hQVVhfc2VuZHRvX29sZCAgICAgICAgICAgIDEzMwotI2RlZmluZSBfX05SX0hQVVhfc2h1dGRvd25fb2xkICAgICAgICAgIDEzNAotI2RlZmluZSBfX05SX0hQVVhfc29ja2V0cGFpcl9vbGQgICAgICAgIDEzNQotI2RlZmluZSBfX05SX0hQVVhfbWtkaXIgICAgICAgICAgICAgICAgIDEzNgotI2RlZmluZSBfX05SX0hQVVhfcm1kaXIgICAgICAgICAgICAgICAgIDEzNwotI2RlZmluZSBfX05SX0hQVVhfdXRpbWVzX29sZCAgICAgICAgICAgIDEzOAotI2RlZmluZSBfX05SX0hQVVhfc2lnY2xlYW51cF9vbGQgICAgICAgIDEzOQotI2RlZmluZSBfX05SX0hQVVhfc2V0Y29yZSAgICAgICAgICAgICAgIDE0MAotI2RlZmluZSBfX05SX0hQVVhfZ2V0cGVlcm5hbWVfb2xkICAgICAgIDE0MQotI2RlZmluZSBfX05SX0hQVVhfZ2V0aG9zdGlkICAgICAgICAgICAgIDE0MgotI2RlZmluZSBfX05SX0hQVVhfc2V0aG9zdGlkICAgICAgICAgICAgIDE0MwotI2RlZmluZSBfX05SX0hQVVhfZ2V0cmxpbWl0ICAgICAgICAgICAgIDE0NAotI2RlZmluZSBfX05SX0hQVVhfc2V0cmxpbWl0ICAgICAgICAgICAgIDE0NQotI2RlZmluZSBfX05SX0hQVVhfa2lsbHBnX29sZCAgICAgICAgICAgIDE0NgotI2RlZmluZSBfX05SX0hQVVhfY2FjaGVjdGwgICAgICAgICAgICAgIDE0NwotI2RlZmluZSBfX05SX0hQVVhfcXVvdGFjdGwgICAgICAgICAgICAgIDE0OAotI2RlZmluZSBfX05SX0hQVVhfZ2V0X3N5c2luZm8gICAgICAgICAgIDE0OQotI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja25hbWVfb2xkICAgICAgIDE1MAotI2RlZmluZSBfX05SX0hQVVhfcHJpdmdycCAgICAgICAgICAgICAgIDE1MQotI2RlZmluZSBfX05SX0hQVVhfcnRwcmlvICAgICAgICAgICAgICAgIDE1MgotI2RlZmluZSBfX05SX0hQVVhfcGxvY2sgICAgICAgICAgICAgICAgIDE1MwotI2RlZmluZSBfX05SX0hQVVhfcmVzZXJ2ZWQzICAgICAgICAgICAgIDE1NAotI2RlZmluZSBfX05SX0hQVVhfbG9ja2YgICAgICAgICAgICAgICAgIDE1NQotI2RlZmluZSBfX05SX0hQVVhfc2VtZ2V0ICAgICAgICAgICAgICAgIDE1NgotI2RlZmluZSBfX05SX0hQVVhfb3NlbWN0bCAgICAgICAgICAgICAgIDE1NwotI2RlZmluZSBfX05SX0hQVVhfc2Vtb3AgICAgICAgICAgICAgICAgIDE1OAotI2RlZmluZSBfX05SX0hQVVhfbXNnZ2V0ICAgICAgICAgICAgICAgIDE1OQotI2RlZmluZSBfX05SX0hQVVhfb21zZ2N0bCAgICAgICAgICAgICAgIDE2MAotI2RlZmluZSBfX05SX0hQVVhfbXNnc25kICAgICAgICAgICAgICAgIDE2MQotI2RlZmluZSBfX05SX0hQVVhfbXNncmVjdiAgICAgICAgICAgICAgIDE2MgotI2RlZmluZSBfX05SX0hQVVhfc2htZ2V0ICAgICAgICAgICAgICAgIDE2MwotI2RlZmluZSBfX05SX0hQVVhfb3NobWN0bCAgICAgICAgICAgICAgIDE2NAotI2RlZmluZSBfX05SX0hQVVhfc2htYXQgICAgICAgICAgICAgICAgIDE2NQotI2RlZmluZSBfX05SX0hQVVhfc2htZHQgICAgICAgICAgICAgICAgIDE2NgotI2RlZmluZSBfX05SX0hQVVhfbTY4MDIwX2FkdmlzZSAgICAgICAgIDE2NwotLyogWzE2OCwxODldIGFyZSBmb3IgRGlzY2xlc3MvRFVYICovCi0jZGVmaW5lIF9fTlJfSFBVWF9jc3AgICAgICAgICAgICAgICAgICAgMTY4Ci0jZGVmaW5lIF9fTlJfSFBVWF9jbHVzdGVyICAgICAgICAgICAgICAgMTY5Ci0jZGVmaW5lIF9fTlJfSFBVWF9ta3Jub2QgICAgICAgICAgICAgICAgMTcwCi0jZGVmaW5lIF9fTlJfSFBVWF90ZXN0ICAgICAgICAgICAgICAgICAgMTcxCi0jZGVmaW5lIF9fTlJfSFBVWF91bnNwX29wZW4gICAgICAgICAgICAgMTcyCi0jZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDQgICAgICAgICAgICAgMTczCi0jZGVmaW5lIF9fTlJfSFBVWF9nZXRjb250ZXh0X29sZCAgICAgICAgMTc0Ci0jZGVmaW5lIF9fTlJfSFBVWF9vc2V0Y29udGV4dCAgICAgICAgICAgMTc1Ci0jZGVmaW5lIF9fTlJfSFBVWF9iaWdpbyAgICAgICAgICAgICAgICAgMTc2Ci0jZGVmaW5lIF9fTlJfSFBVWF9waXBlbm9kZSAgICAgICAgICAgICAgMTc3Ci0jZGVmaW5lIF9fTlJfSFBVWF9sc3luYyAgICAgICAgICAgICAgICAgMTc4Ci0jZGVmaW5lIF9fTlJfSFBVWF9nZXRtYWNoaW5laWQgICAgICAgICAgMTc5Ci0jZGVmaW5lIF9fTlJfSFBVWF9jbm9kZWlkICAgICAgICAgICAgICAgMTgwCi0jZGVmaW5lIF9fTlJfSFBVWF9jbm9kZXMgICAgICAgICAgICAgICAgMTgxCi0jZGVmaW5lIF9fTlJfSFBVWF9zd2FwY2xpZW50cyAgICAgICAgICAgMTgyCi0jZGVmaW5lIF9fTlJfSFBVWF9ybXRfcHJvY2VzcyAgICAgICAgICAgMTgzCi0jZGVmaW5lIF9fTlJfSFBVWF9kc2tsZXNzX3N0YXRzICAgICAgICAgMTg0Ci0jZGVmaW5lIF9fTlJfSFBVWF9zaWdwcm9jbWFzayAgICAgICAgICAgMTg1Ci0jZGVmaW5lIF9fTlJfSFBVWF9zaWdwZW5kaW5nICAgICAgICAgICAgMTg2Ci0jZGVmaW5lIF9fTlJfSFBVWF9zaWdzdXNwZW5kICAgICAgICAgICAgMTg3Ci0jZGVmaW5lIF9fTlJfSFBVWF9zaWdhY3Rpb24gICAgICAgICAgICAgMTg4Ci0jZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDUgICAgICAgICAgICAgMTg5Ci0jZGVmaW5lIF9fTlJfSFBVWF9uZnNzdmMgICAgICAgICAgICAgICAgMTkwCi0jZGVmaW5lIF9fTlJfSFBVWF9nZXRmaCAgICAgICAgICAgICAgICAgMTkxCi0jZGVmaW5lIF9fTlJfSFBVWF9nZXRkb21haW5uYW1lICAgICAgICAgMTkyCi0jZGVmaW5lIF9fTlJfSFBVWF9zZXRkb21haW5uYW1lICAgICAgICAgMTkzCi0jZGVmaW5lIF9fTlJfSFBVWF9hc3luY19kYWVtb24gICAgICAgICAgMTk0Ci0jZGVmaW5lIF9fTlJfSFBVWF9nZXRkaXJlbnRyaWVzICAgICAgICAgMTk1Ci0jZGVmaW5lIF9fTlJfSFBVWF9zdGF0ZnMgICAgICAgICAgICAgICAgMTk2Ci0jZGVmaW5lIF9fTlJfSFBVWF9mc3RhdGZzICAgICAgICAgICAgICAgMTk3Ci0jZGVmaW5lIF9fTlJfSFBVWF92ZnNtb3VudCAgICAgICAgICAgICAgMTk4Ci0jZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDYgICAgICAgICAgICAgMTk5Ci0jZGVmaW5lIF9fTlJfSFBVWF93YWl0cGlkICAgICAgICAgICAgICAgMjAwCi0vKiAyMDEgLSAyMjMgbWlzc2luZyAqLwotI2RlZmluZSBfX05SX0hQVVhfc2lnc2V0cmV0dXJuICAgICAgICAgIDIyNAotI2RlZmluZSBfX05SX0hQVVhfc2lnc2V0c3RhdGVtYXNrICAgICAgIDIyNQotLyogMjI2IG1pc3NpbmcgKi8KLSNkZWZpbmUgX19OUl9IUFVYX2NzICAgICAgICAgICAgICAgICAgICAyMjcKLSNkZWZpbmUgX19OUl9IUFVYX2NkcyAgICAgICAgICAgICAgICAgICAyMjgKLSNkZWZpbmUgX19OUl9IUFVYX3NldF9ub190cnVuYyAgICAgICAgICAyMjkKLSNkZWZpbmUgX19OUl9IUFVYX3BhdGhjb25mICAgICAgICAgICAgICAyMzAKLSNkZWZpbmUgX19OUl9IUFVYX2ZwYXRoY29uZiAgICAgICAgICAgICAyMzEKLS8qIDIzMiwgMjMzIG1pc3NpbmcgKi8KLSNkZWZpbmUgX19OUl9IUFVYX25mc19mY250bCAgICAgICAgICAgICAyMzQKLSNkZWZpbmUgX19OUl9IUFVYX29nZXRhY2wgICAgICAgICAgICAgICAyMzUKLSNkZWZpbmUgX19OUl9IUFVYX29mZ2V0YWNsICAgICAgICAgICAgICAyMzYKLSNkZWZpbmUgX19OUl9IUFVYX29zZXRhY2wgICAgICAgICAgICAgICAyMzcKLSNkZWZpbmUgX19OUl9IUFVYX29mc2V0YWNsICAgICAgICAgICAgICAyMzgKLSNkZWZpbmUgX19OUl9IUFVYX3BzdGF0ICAgICAgICAgICAgICAgICAyMzkKLSNkZWZpbmUgX19OUl9IUFVYX2dldGF1ZGlkICAgICAgICAgICAgICAyNDAKLSNkZWZpbmUgX19OUl9IUFVYX3NldGF1ZGlkICAgICAgICAgICAgICAyNDEKLSNkZWZpbmUgX19OUl9IUFVYX2dldGF1ZHByb2MgICAgICAgICAgICAyNDIKLSNkZWZpbmUgX19OUl9IUFVYX3NldGF1ZHByb2MgICAgICAgICAgICAyNDMKLSNkZWZpbmUgX19OUl9IUFVYX2dldGV2ZW50ICAgICAgICAgICAgICAyNDQKLSNkZWZpbmUgX19OUl9IUFVYX3NldGV2ZW50ICAgICAgICAgICAgICAyNDUKLSNkZWZpbmUgX19OUl9IUFVYX2F1ZHdyaXRlICAgICAgICAgICAgICAyNDYKLSNkZWZpbmUgX19OUl9IUFVYX2F1ZHN3aXRjaCAgICAgICAgICAgICAyNDcKLSNkZWZpbmUgX19OUl9IUFVYX2F1ZGN0bCAgICAgICAgICAgICAgICAyNDgKLSNkZWZpbmUgX19OUl9IUFVYX29nZXRhY2Nlc3MgICAgICAgICAgICAyNDkKLSNkZWZpbmUgX19OUl9IUFVYX2ZzY3RsICAgICAgICAgICAgICAgICAyNTAKLS8qIDI1MSAtIDI1OCBtaXNzaW5nICovCi0jZGVmaW5lIF9fTlJfSFBVWF9zd2FwZnMgICAgICAgICAgICAgICAgMjU5Ci0jZGVmaW5lIF9fTlJfSFBVWF9mc3MgICAgICAgICAgICAgICAgICAgMjYwCi0vKiAyNjEgLSAyNjYgbWlzc2luZyAqLwotI2RlZmluZSBfX05SX0hQVVhfdHN5bmMgICAgICAgICAgICAgICAgIDI2NwotI2RlZmluZSBfX05SX0hQVVhfZ2V0bnVtZmRzICAgICAgICAgICAgIDI2OAotI2RlZmluZSBfX05SX0hQVVhfcG9sbCAgICAgICAgICAgICAgICAgIDI2OQotI2RlZmluZSBfX05SX0hQVVhfZ2V0bXNnICAgICAgICAgICAgICAgIDI3MAotI2RlZmluZSBfX05SX0hQVVhfcHV0bXNnICAgICAgICAgICAgICAgIDI3MQotI2RlZmluZSBfX05SX0hQVVhfZmNoZGlyICAgICAgICAgICAgICAgIDI3MgotI2RlZmluZSBfX05SX0hQVVhfZ2V0bW91bnRfY250ICAgICAgICAgIDI3MwotI2RlZmluZSBfX05SX0hQVVhfZ2V0bW91bnRfZW50cnkgICAgICAgIDI3NAotI2RlZmluZSBfX05SX0hQVVhfYWNjZXB0ICAgICAgICAgICAgICAgIDI3NQotI2RlZmluZSBfX05SX0hQVVhfYmluZCAgICAgICAgICAgICAgICAgIDI3NgotI2RlZmluZSBfX05SX0hQVVhfY29ubmVjdCAgICAgICAgICAgICAgIDI3NwotI2RlZmluZSBfX05SX0hQVVhfZ2V0cGVlcm5hbWUgICAgICAgICAgIDI3OAotI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja25hbWUgICAgICAgICAgIDI3OQotI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja29wdCAgICAgICAgICAgIDI4MAotI2RlZmluZSBfX05SX0hQVVhfbGlzdGVuICAgICAgICAgICAgICAgIDI4MQotI2RlZmluZSBfX05SX0hQVVhfcmVjdiAgICAgICAgICAgICAgICAgIDI4MgotI2RlZmluZSBfX05SX0hQVVhfcmVjdmZyb20gICAgICAgICAgICAgIDI4MwotI2RlZmluZSBfX05SX0hQVVhfcmVjdm1zZyAgICAgICAgICAgICAgIDI4NAotI2RlZmluZSBfX05SX0hQVVhfc2VuZCAgICAgICAgICAgICAgICAgIDI4NQotI2RlZmluZSBfX05SX0hQVVhfc2VuZG1zZyAgICAgICAgICAgICAgIDI4NgotI2RlZmluZSBfX05SX0hQVVhfc2VuZHRvICAgICAgICAgICAgICAgIDI4NwotI2RlZmluZSBfX05SX0hQVVhfc2V0c29ja29wdCAgICAgICAgICAgIDI4OAotI2RlZmluZSBfX05SX0hQVVhfc2h1dGRvd24gICAgICAgICAgICAgIDI4OQotI2RlZmluZSBfX05SX0hQVVhfc29ja2V0ICAgICAgICAgICAgICAgIDI5MAotI2RlZmluZSBfX05SX0hQVVhfc29ja2V0cGFpciAgICAgICAgICAgIDI5MQotI2RlZmluZSBfX05SX0hQVVhfcHJvY19vcGVuICAgICAgICAgICAgIDI5MgotI2RlZmluZSBfX05SX0hQVVhfcHJvY19jbG9zZSAgICAgICAgICAgIDI5MwotI2RlZmluZSBfX05SX0hQVVhfcHJvY19zZW5kICAgICAgICAgICAgIDI5NAotI2RlZmluZSBfX05SX0hQVVhfcHJvY19yZWN2ICAgICAgICAgICAgIDI5NQotI2RlZmluZSBfX05SX0hQVVhfcHJvY19zZW5kcmVjdiAgICAgICAgIDI5NgotI2RlZmluZSBfX05SX0hQVVhfcHJvY19zeXNjYWxsICAgICAgICAgIDI5NwotLyogMjk4IC0gMzExIG1pc3NpbmcgKi8KLSNkZWZpbmUgX19OUl9IUFVYX3NlbWN0bCAgICAgICAgICAgICAgICAzMTIKLSNkZWZpbmUgX19OUl9IUFVYX21zZ2N0bCAgICAgICAgICAgICAgICAzMTMKLSNkZWZpbmUgX19OUl9IUFVYX3NobWN0bCAgICAgICAgICAgICAgICAzMTQKLSNkZWZpbmUgX19OUl9IUFVYX21wY3RsICAgICAgICAgICAgICAgICAzMTUKLSNkZWZpbmUgX19OUl9IUFVYX2V4cG9ydGZzICAgICAgICAgICAgICAzMTYKLSNkZWZpbmUgX19OUl9IUFVYX2dldHBtc2cgICAgICAgICAgICAgICAzMTcKLSNkZWZpbmUgX19OUl9IUFVYX3B1dHBtc2cgICAgICAgICAgICAgICAzMTgKLS8qIDMxOSBtaXNzaW5nICovCi0jZGVmaW5lIF9fTlJfSFBVWF9tc3luYyAgICAgICAgICAgICAgICAgMzIwCi0jZGVmaW5lIF9fTlJfSFBVWF9tc2xlZXAgICAgICAgICAgICAgICAgMzIxCi0jZGVmaW5lIF9fTlJfSFBVWF9td2FrZXVwICAgICAgICAgICAgICAgMzIyCi0jZGVmaW5lIF9fTlJfSFBVWF9tc2VtX2luaXQgICAgICAgICAgICAgMzIzCi0jZGVmaW5lIF9fTlJfSFBVWF9tc2VtX3JlbW92ZSAgICAgICAgICAgMzI0Ci0jZGVmaW5lIF9fTlJfSFBVWF9hZGp0aW1lICAgICAgICAgICAgICAgMzI1Ci0jZGVmaW5lIF9fTlJfSFBVWF9rbG9hZCAgICAgICAgICAgICAgICAgMzI2Ci0jZGVmaW5lIF9fTlJfSFBVWF9mYXR0YWNoICAgICAgICAgICAgICAgMzI3Ci0jZGVmaW5lIF9fTlJfSFBVWF9mZGV0YWNoICAgICAgICAgICAgICAgMzI4Ci0jZGVmaW5lIF9fTlJfSFBVWF9zZXJpYWxpemUgICAgICAgICAgICAgMzI5Ci0jZGVmaW5lIF9fTlJfSFBVWF9zdGF0dmZzICAgICAgICAgICAgICAgMzMwCi0jZGVmaW5lIF9fTlJfSFBVWF9mc3RhdHZmcyAgICAgICAgICAgICAgMzMxCi0jZGVmaW5lIF9fTlJfSFBVWF9sY2hvd24gICAgICAgICAgICAgICAgMzMyCi0jZGVmaW5lIF9fTlJfSFBVWF9nZXRzaWQgICAgICAgICAgICAgICAgMzMzCi0jZGVmaW5lIF9fTlJfSFBVWF9zeXNmcyAgICAgICAgICAgICAgICAgMzM0Ci0vKiAzMzUsIDMzNiBtaXNzaW5nICovCi0jZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9zZXRwYXJhbSAgICAgICAgMzM3Ci0jZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9nZXRwYXJhbSAgICAgICAgMzM4Ci0jZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9zZXRzY2hlZHVsZXIgICAgMzM5Ci0jZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9nZXRzY2hlZHVsZXIgICAgMzQwCi0jZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF95aWVsZCAgICAgICAgICAgMzQxCi0jZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDM0MgotI2RlZmluZSBfX05SX0hQVVhfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAzNDMKLSNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAzNDQKLSNkZWZpbmUgX19OUl9IUFVYX2Nsb2NrX3NldHRpbWUgICAgICAgICAzNDUKLSNkZWZpbmUgX19OUl9IUFVYX2Nsb2NrX2dldHRpbWUgICAgICAgICAzNDYKLSNkZWZpbmUgX19OUl9IUFVYX2Nsb2NrX2dldHJlcyAgICAgICAgICAzNDcKLSNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2NyZWF0ZSAgICAgICAgICAzNDgKLSNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2RlbGV0ZSAgICAgICAgICAzNDkKLSNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX3NldHRpbWUgICAgICAgICAzNTAKLSNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2dldHRpbWUgICAgICAgICAzNTEKLSNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2dldG92ZXJydW4gICAgICAzNTIKLSNkZWZpbmUgX19OUl9IUFVYX25hbm9zbGVlcCAgICAgICAgICAgICAzNTMKLSNkZWZpbmUgX19OUl9IUFVYX3Rvb2xib3ggICAgICAgICAgICAgICAzNTQKLS8qIDM1NSBtaXNzaW5nICovCi0jZGVmaW5lIF9fTlJfSFBVWF9nZXRkZW50cyAgICAgICAgICAgICAgMzU2Ci0jZGVmaW5lIF9fTlJfSFBVWF9nZXRjb250ZXh0ICAgICAgICAgICAgMzU3Ci0jZGVmaW5lIF9fTlJfSFBVWF9zeXNpbmZvICAgICAgICAgICAgICAgMzU4Ci0jZGVmaW5lIF9fTlJfSFBVWF9mY250bDY0ICAgICAgICAgICAgICAgMzU5Ci0jZGVmaW5lIF9fTlJfSFBVWF9mdHJ1bmNhdGU2NCAgICAgICAgICAgMzYwCi0jZGVmaW5lIF9fTlJfSFBVWF9mc3RhdDY0ICAgICAgICAgICAgICAgMzYxCi0jZGVmaW5lIF9fTlJfSFBVWF9nZXRkaXJlbnRyaWVzNjQgICAgICAgMzYyCi0jZGVmaW5lIF9fTlJfSFBVWF9nZXRybGltaXQ2NCAgICAgICAgICAgMzYzCi0jZGVmaW5lIF9fTlJfSFBVWF9sb2NrZjY0ICAgICAgICAgICAgICAgMzY0Ci0jZGVmaW5lIF9fTlJfSFBVWF9sc2VlazY0ICAgICAgICAgICAgICAgMzY1Ci0jZGVmaW5lIF9fTlJfSFBVWF9sc3RhdDY0ICAgICAgICAgICAgICAgMzY2Ci0jZGVmaW5lIF9fTlJfSFBVWF9tbWFwNjQgICAgICAgICAgICAgICAgMzY3Ci0jZGVmaW5lIF9fTlJfSFBVWF9zZXRybGltaXQ2NCAgICAgICAgICAgMzY4Ci0jZGVmaW5lIF9fTlJfSFBVWF9zdGF0NjQgICAgICAgICAgICAgICAgMzY5Ci0jZGVmaW5lIF9fTlJfSFBVWF90cnVuY2F0ZTY0ICAgICAgICAgICAgMzcwCi0jZGVmaW5lIF9fTlJfSFBVWF91bGltaXQ2NCAgICAgICAgICAgICAgMzcxCi0jZGVmaW5lIF9fTlJfSFBVWF9wcmVhZCAgICAgICAgICAgICAgICAgMzcyCi0jZGVmaW5lIF9fTlJfSFBVWF9wcmVhZHYgICAgICAgICAgICAgICAgMzczCi0jZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGUgICAgICAgICAgICAgICAgMzc0Ci0jZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGV2ICAgICAgICAgICAgICAgMzc1Ci0jZGVmaW5lIF9fTlJfSFBVWF9wcmVhZDY0ICAgICAgICAgICAgICAgMzc2Ci0jZGVmaW5lIF9fTlJfSFBVWF9wcmVhZHY2NCAgICAgICAgICAgICAgMzc3Ci0jZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGU2NCAgICAgICAgICAgICAgMzc4Ci0jZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGV2NjQgICAgICAgICAgICAgMzc5Ci0jZGVmaW5lIF9fTlJfSFBVWF9zZXRjb250ZXh0ICAgICAgICAgICAgMzgwCi0jZGVmaW5lIF9fTlJfSFBVWF9zaWdhbHRzdGFjayAgICAgICAgICAgMzgxCi0jZGVmaW5lIF9fTlJfSFBVWF93YWl0aWQgICAgICAgICAgICAgICAgMzgyCi0jZGVmaW5lIF9fTlJfSFBVWF9zZXRwZ3JwICAgICAgICAgICAgICAgMzgzCi0jZGVmaW5lIF9fTlJfSFBVWF9yZWN2bXNnMiAgICAgICAgICAgICAgMzg0Ci0jZGVmaW5lIF9fTlJfSFBVWF9zZW5kbXNnMiAgICAgICAgICAgICAgMzg1Ci0jZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXQyICAgICAgICAgICAgICAgMzg2Ci0jZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXRwYWlyMiAgICAgICAgICAgMzg3Ci0jZGVmaW5lIF9fTlJfSFBVWF9zZXRyZWdpZCAgICAgICAgICAgICAgMzg4Ci0jZGVmaW5lIF9fTlJfSFBVWF9sd3BfY3JlYXRlICAgICAgICAgICAgMzg5Ci0jZGVmaW5lIF9fTlJfSFBVWF9sd3BfdGVybWluYXRlICAgICAgICAgMzkwCi0jZGVmaW5lIF9fTlJfSFBVWF9sd3Bfd2FpdCAgICAgICAgICAgICAgMzkxCi0jZGVmaW5lIF9fTlJfSFBVWF9sd3Bfc3VzcGVuZCAgICAgICAgICAgMzkyCi0jZGVmaW5lIF9fTlJfSFBVWF9sd3BfcmVzdW1lICAgICAgICAgICAgMzkzCi0vKiAzOTQgbWlzc2luZyAqLwotI2RlZmluZSBfX05SX0hQVVhfbHdwX2Fib3J0X3N5c2NhbGwgICAgIDM5NQotI2RlZmluZSBfX05SX0hQVVhfbHdwX2luZm8gICAgICAgICAgICAgIDM5NgotI2RlZmluZSBfX05SX0hQVVhfbHdwX2tpbGwgICAgICAgICAgICAgIDM5NwotI2RlZmluZSBfX05SX0hQVVhfa3NsZWVwICAgICAgICAgICAgICAgIDM5OAotI2RlZmluZSBfX05SX0hQVVhfa3dha2V1cCAgICAgICAgICAgICAgIDM5OQotLyogNDAwIG1pc3NpbmcgKi8KLSNkZWZpbmUgX19OUl9IUFVYX3BzdGF0X2dldGx3cCAgICAgICAgICA0MDEKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9leGl0ICAgICAgICAgICAgICA0MDIKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb250aW51ZSAgICAgICAgICA0MDMKLSNkZWZpbmUgX19OUl9IUFVYX2dldGFjbCAgICAgICAgICAgICAgICA0MDQKLSNkZWZpbmUgX19OUl9IUFVYX2ZnZXRhY2wgICAgICAgICAgICAgICA0MDUKLSNkZWZpbmUgX19OUl9IUFVYX3NldGFjbCAgICAgICAgICAgICAgICA0MDYKLSNkZWZpbmUgX19OUl9IUFVYX2ZzZXRhY2wgICAgICAgICAgICAgICA0MDcKLSNkZWZpbmUgX19OUl9IUFVYX2dldGFjY2VzcyAgICAgICAgICAgICA0MDgKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9tdXRleF9pbml0ICAgICAgICA0MDkKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9tdXRleF9sb2NrX3N5cyAgICA0MTAKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9tdXRleF91bmxvY2sgICAgICA0MTEKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX2luaXQgICAgICAgICA0MTIKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX3NpZ25hbCAgICAgICA0MTMKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX2Jyb2FkY2FzdCAgICA0MTQKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX3dhaXRfc3lzICAgICA0MTUKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9nZXRzY2hlZHVsZXIgICAgICA0MTYKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZXRzY2hlZHVsZXIgICAgICA0MTcKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9nZXRzdGF0ZSAgICAgICAgICA0MTgKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZXRzdGF0ZSAgICAgICAgICA0MTkKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9kZXRhY2ggICAgICAgICAgICA0MjAKLSNkZWZpbmUgX19OUl9IUFVYX21sb2NrICAgICAgICAgICAgICAgICA0MjEKLSNkZWZpbmUgX19OUl9IUFVYX211bmxvY2sgICAgICAgICAgICAgICA0MjIKLSNkZWZpbmUgX19OUl9IUFVYX21sb2NrYWxsICAgICAgICAgICAgICA0MjMKLSNkZWZpbmUgX19OUl9IUFVYX211bmxvY2thbGwgICAgICAgICAgICA0MjQKLSNkZWZpbmUgX19OUl9IUFVYX3NobV9vcGVuICAgICAgICAgICAgICA0MjUKLSNkZWZpbmUgX19OUl9IUFVYX3NobV91bmxpbmsgICAgICAgICAgICA0MjYKLSNkZWZpbmUgX19OUl9IUFVYX3NpZ3F1ZXVlICAgICAgICAgICAgICA0MjcKLSNkZWZpbmUgX19OUl9IUFVYX3NpZ3dhaXRpbmZvICAgICAgICAgICA0MjgKLSNkZWZpbmUgX19OUl9IUFVYX3NpZ3RpbWVkd2FpdCAgICAgICAgICA0MjkKLSNkZWZpbmUgX19OUl9IUFVYX3NpZ3dhaXQgICAgICAgICAgICAgICA0MzAKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZWFkICAgICAgICAgICAgICA0MzEKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb193cml0ZSAgICAgICAgICAgICA0MzIKLSNkZWZpbmUgX19OUl9IUFVYX2xpb19saXN0aW8gICAgICAgICAgICA0MzMKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19lcnJvciAgICAgICAgICAgICA0MzQKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZXR1cm4gICAgICAgICAgICA0MzUKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19jYW5jZWwgICAgICAgICAgICA0MzYKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19zdXNwZW5kICAgICAgICAgICA0MzcKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19mc3luYyAgICAgICAgICAgICA0MzgKLSNkZWZpbmUgX19OUl9IUFVYX21xX29wZW4gICAgICAgICAgICAgICA0MzkKLSNkZWZpbmUgX19OUl9IUFVYX21xX2Nsb3NlICAgICAgICAgICAgICA0NDAKLSNkZWZpbmUgX19OUl9IUFVYX21xX3VubGluayAgICAgICAgICAgICA0NDEKLSNkZWZpbmUgX19OUl9IUFVYX21xX3NlbmQgICAgICAgICAgICAgICA0NDIKLSNkZWZpbmUgX19OUl9IUFVYX21xX3JlY2VpdmUgICAgICAgICAgICA0NDMKLSNkZWZpbmUgX19OUl9IUFVYX21xX25vdGlmeSAgICAgICAgICAgICA0NDQKLSNkZWZpbmUgX19OUl9IUFVYX21xX3NldGF0dHIgICAgICAgICAgICA0NDUKLSNkZWZpbmUgX19OUl9IUFVYX21xX2dldGF0dHIgICAgICAgICAgICA0NDYKLSNkZWZpbmUgX19OUl9IUFVYX2tzZW1fb3BlbiAgICAgICAgICAgICA0NDcKLSNkZWZpbmUgX19OUl9IUFVYX2tzZW1fdW5saW5rICAgICAgICAgICA0NDgKLSNkZWZpbmUgX19OUl9IUFVYX2tzZW1fY2xvc2UgICAgICAgICAgICA0NDkKLSNkZWZpbmUgX19OUl9IUFVYX2tzZW1fcG9zdCAgICAgICAgICAgICA0NTAKLSNkZWZpbmUgX19OUl9IUFVYX2tzZW1fd2FpdCAgICAgICAgICAgICA0NTEKLSNkZWZpbmUgX19OUl9IUFVYX2tzZW1fcmVhZCAgICAgICAgICAgICA0NTIKLSNkZWZpbmUgX19OUl9IUFVYX2tzZW1fdHJ5d2FpdCAgICAgICAgICA0NTMKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfaW5pdCAgICAgICA0NTQKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfZGVzdHJveSAgICA0NTUKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfcmRsb2NrX3N5cyA0NTYKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfd3Jsb2NrX3N5cyA0NTcKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfdHJ5cmRsb2NrICA0NTgKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfdHJ5d3Jsb2NrICA0NTkKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfdW5sb2NrICAgICA0NjAKLSNkZWZpbmUgX19OUl9IUFVYX3R0cmFjZSAgICAgICAgICAgICAgICA0NjEKLSNkZWZpbmUgX19OUl9IUFVYX3R0cmFjZV93YWl0ICAgICAgICAgICA0NjIKLSNkZWZpbmUgX19OUl9IUFVYX2xmX3dpcmVfbWVtICAgICAgICAgICA0NjMKLSNkZWZpbmUgX19OUl9IUFVYX2xmX3Vud2lyZV9tZW0gICAgICAgICA0NjQKLSNkZWZpbmUgX19OUl9IUFVYX2xmX3NlbmRfcGluX21hcCAgICAgICA0NjUKLSNkZWZpbmUgX19OUl9IUFVYX2xmX2ZyZWVfYnVmICAgICAgICAgICA0NjYKLSNkZWZpbmUgX19OUl9IUFVYX2xmX3dhaXRfbnEgICAgICAgICAgICA0NjcKLSNkZWZpbmUgX19OUl9IUFVYX2xmX3dha2V1cF9jb25uX3EgICAgICA0NjgKLSNkZWZpbmUgX19OUl9IUFVYX2xmX3VudXNlZCAgICAgICAgICAgICA0NjkKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX2luaXQgICAgICAgICA0NzAKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX3Bvc3QgICAgICAgICA0NzEKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX3dhaXQgICAgICAgICA0NzIKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX3RyeXdhaXQgICAgICA0NzMKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX2Rlc3Ryb3kgICAgICA0NzQKLSNkZWZpbmUgX19OUl9IUFVYX3N0YXR2ZnM2NCAgICAgICAgICAgICA0NzUKLSNkZWZpbmUgX19OUl9IUFVYX2ZzdGF0dmZzNjQgICAgICAgICAgICA0NzYKLSNkZWZpbmUgX19OUl9IUFVYX21zaF9yZWdpc3RlciAgICAgICAgICA0NzcKLSNkZWZpbmUgX19OUl9IUFVYX3B0cmFjZTY0ICAgICAgICAgICAgICA0NzgKLSNkZWZpbmUgX19OUl9IUFVYX3NlbmRmaWxlICAgICAgICAgICAgICA0NzkKLSNkZWZpbmUgX19OUl9IUFVYX3NlbmRwYXRoICAgICAgICAgICAgICA0ODAKLSNkZWZpbmUgX19OUl9IUFVYX3NlbmRmaWxlNjQgICAgICAgICAgICA0ODEKLSNkZWZpbmUgX19OUl9IUFVYX3NlbmRwYXRoNjQgICAgICAgICAgICA0ODIKLSNkZWZpbmUgX19OUl9IUFVYX21vZGxvYWQgICAgICAgICAgICAgICA0ODMKLSNkZWZpbmUgX19OUl9IUFVYX21vZHVsb2FkICAgICAgICAgICAgICA0ODQKLSNkZWZpbmUgX19OUl9IUFVYX21vZHBhdGggICAgICAgICAgICAgICA0ODUKLSNkZWZpbmUgX19OUl9IUFVYX2dldGtzeW0gICAgICAgICAgICAgICA0ODYKLSNkZWZpbmUgX19OUl9IUFVYX21vZGFkbSAgICAgICAgICAgICAgICA0ODcKLSNkZWZpbmUgX19OUl9IUFVYX21vZHN0YXQgICAgICAgICAgICAgICA0ODgKLSNkZWZpbmUgX19OUl9IUFVYX2x3cF9kZXRhY2hlZF9leGl0ICAgICA0ODkKLSNkZWZpbmUgX19OUl9IUFVYX2NyYXNoY29uZiAgICAgICAgICAgICA0OTAKLSNkZWZpbmUgX19OUl9IUFVYX3NpZ2luaGliaXQgICAgICAgICAgICA0OTEKLSNkZWZpbmUgX19OUl9IUFVYX3NpZ2VuYWJsZSAgICAgICAgICAgICA0OTIKLSNkZWZpbmUgX19OUl9IUFVYX3NwdWN0bCAgICAgICAgICAgICAgICA0OTMKLSNkZWZpbmUgX19OUl9IUFVYX3plcm9rZXJuZWxzdW0gICAgICAgICA0OTQKLSNkZWZpbmUgX19OUl9IUFVYX25mc19rc3RhdCAgICAgICAgICAgICA0OTUKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZWFkNjQgICAgICAgICAgICA0OTYKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb193cml0ZTY0ICAgICAgICAgICA0OTcKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19lcnJvcjY0ICAgICAgICAgICA0OTgKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZXR1cm42NCAgICAgICAgICA0OTkKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19jYW5jZWw2NCAgICAgICAgICA1MDAKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19zdXNwZW5kNjQgICAgICAgICA1MDEKLSNkZWZpbmUgX19OUl9IUFVYX2Fpb19mc3luYzY0ICAgICAgICAgICA1MDIKLSNkZWZpbmUgX19OUl9IUFVYX2xpb19saXN0aW82NCAgICAgICAgICA1MDMKLSNkZWZpbmUgX19OUl9IUFVYX3JlY3YyICAgICAgICAgICAgICAgICA1MDQKLSNkZWZpbmUgX19OUl9IUFVYX3JlY3Zmcm9tMiAgICAgICAgICAgICA1MDUKLSNkZWZpbmUgX19OUl9IUFVYX3NlbmQyICAgICAgICAgICAgICAgICA1MDYKLSNkZWZpbmUgX19OUl9IUFVYX3NlbmR0bzIgICAgICAgICAgICAgICA1MDcKLSNkZWZpbmUgX19OUl9IUFVYX2FjbCAgICAgICAgICAgICAgICAgICA1MDgKLSNkZWZpbmUgX19OUl9IUFVYX19fY254X3AycF9jdGwgICAgICAgICA1MDkKLSNkZWZpbmUgX19OUl9IUFVYX19fY254X2dzY2hlZF9jdGwgICAgICA1MTAKLSNkZWZpbmUgX19OUl9IUFVYX19fY254X3Btb25fY3RsICAgICAgICA1MTEKLQotI2RlZmluZSBfX05SX0hQVVhfc3lzY2FsbHMJCTUxMgotCi0vKgotICogTGludXggc3lzdGVtIGNhbGwgbnVtYmVycy4KLSAqCi0gKiBDYXJ5IENvdXRhbnQgc2F5cyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSBhbm90aGVyIHN5c2NhbGwgZ2F0ZXdheQotICogcGFnZSB0byBhdm9pZCBjbGFzaGluZyB3aXRoIHRoZSBIUFVYIHNwYWNlLCBhbmQgSSB0aGluayBoZSdzIHJpZ2h0OgotICogaXQgd2lsbCB3b3VsZCBrZWVwIGEgYnJhbmNoIG91dCBvZiBvdXIgc3lzY2FsbCBlbnRyeSBwYXRoLCBhdCB0aGUKLSAqIHZlcnkgbGVhc3QuICBJZiB3ZSBkZWNpZGUgdG8gY2hhbmdlIGl0IGxhdGVyLCB3ZSBjYW4gYGBqdXN0JycgdHdlYWsKLSAqIHRoZSBMSU5VWF9HQVRFV0FZX0FERFIgZGVmaW5lIGF0IHRoZSBib3R0b20gYW5kIG1ha2UgX19OUl9MaW51eCBiZQotICogMTAyNCBvciBzb21ldGhpbmcuICBPaCwgYW5kIHJlY29tcGlsZSBsaWJjLiA9KQotICoKLSAqIDY0LWJpdCBIUFVYIGJpbmFyaWVzIGdldCB0aGUgc3lzY2FsbCBnYXRld2F5IGFkZHJlc3MgcGFzc2VkIGluIGEgcmVnaXN0ZXIKLSAqIGZyb20gdGhlIGtlcm5lbCBhdCBzdGFydHVwLCB3aGljaCBzZWVtcyBhIHNhbmUgc3RyYXRlZ3kuCi0gKi8KLQotI2RlZmluZSBfX05SX0xpbnV4ICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgICAgICAoX19OUl9MaW51eCArIDApCi0jZGVmaW5lIF9fTlJfZXhpdCAgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxKQotI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMikKLSNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDMpCi0jZGVmaW5lIF9fTlJfd3JpdGUgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0KQotI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNSkKLSNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDYpCi0jZGVmaW5lIF9fTlJfd2FpdHBpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA3KQotI2RlZmluZSBfX05SX2NyZWF0ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOCkKLSNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDkpCi0jZGVmaW5lIF9fTlJfdW5saW5rICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwKQotI2RlZmluZSBfX05SX2V4ZWN2ZSAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMSkKLSNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTIpCi0jZGVmaW5lIF9fTlJfdGltZSAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEzKQotI2RlZmluZSBfX05SX21rbm9kICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNCkKLSNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTUpCi0jZGVmaW5lIF9fTlJfbGNob3duICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE2KQotI2RlZmluZSBfX05SX3NvY2tldCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNykKLSNkZWZpbmUgX19OUl9zdGF0ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTgpCi0jZGVmaW5lIF9fTlJfbHNlZWsgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5KQotI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMCkKLSNkZWZpbmUgX19OUl9tb3VudCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjEpCi0jZGVmaW5lIF9fTlJfYmluZCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDIyKQotI2RlZmluZSBfX05SX3NldHVpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMykKLSNkZWZpbmUgX19OUl9nZXR1aWQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjQpCi0jZGVmaW5lIF9fTlJfc3RpbWUgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDI1KQotI2RlZmluZSBfX05SX3B0cmFjZSAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyNikKLSNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjcpCi0jZGVmaW5lIF9fTlJfZnN0YXQgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDI4KQotI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyOSkKLSNkZWZpbmUgX19OUl91dGltZSAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzApCi0jZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDMxKQotI2RlZmluZSBfX05SX2xpc3RlbiAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzMikKLSNkZWZpbmUgX19OUl9hY2Nlc3MgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzMpCi0jZGVmaW5lIF9fTlJfbmljZSAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDM0KQotI2RlZmluZSBfX05SX2FjY2VwdCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzNSkKLSNkZWZpbmUgX19OUl9zeW5jICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzYpCi0jZGVmaW5lIF9fTlJfa2lsbCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDM3KQotI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzOCkKLSNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzkpCi0jZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQwKQotI2RlZmluZSBfX05SX2R1cCAgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0MSkKLSNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDIpCi0jZGVmaW5lIF9fTlJfdGltZXMgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQzKQotI2RlZmluZSBfX05SX2dldHNvY2tuYW1lICAgICAgICAgKF9fTlJfTGludXggKyA0NCkKLSNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDUpCi0jZGVmaW5lIF9fTlJfc2V0Z2lkICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQ2KQotI2RlZmluZSBfX05SX2dldGdpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0NykKLSNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDgpCi0jZGVmaW5lIF9fTlJfZ2V0ZXVpZCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQ5KQotI2RlZmluZSBfX05SX2dldGVnaWQgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1MCkKLSNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTEpCi0jZGVmaW5lIF9fTlJfdW1vdW50MiAgICAgICAgICAgICAoX19OUl9MaW51eCArIDUyKQotI2RlZmluZSBfX05SX2dldHBlZXJuYW1lICAgICAgICAgKF9fTlJfTGludXggKyA1MykKLSNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTQpCi0jZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDU1KQotI2RlZmluZSBfX05SX3NvY2tldHBhaXIgICAgICAgICAgKF9fTlJfTGludXggKyA1NikKLSNkZWZpbmUgX19OUl9zZXRwZ2lkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTcpCi0jZGVmaW5lIF9fTlJfc2VuZCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDU4KQotI2RlZmluZSBfX05SX3VuYW1lICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1OSkKLSNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjApCi0jZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDYxKQotI2RlZmluZSBfX05SX3VzdGF0ICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA2MikKLSNkZWZpbmUgX19OUl9kdXAyICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjMpCi0jZGVmaW5lIF9fTlJfZ2V0cHBpZCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDY0KQotI2RlZmluZSBfX05SX2dldHBncnAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA2NSkKLSNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjYpCi0jZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdCAgICAgICAgICAoX19OUl9MaW51eCArIDY3KQotI2RlZmluZSBfX05SX3NnZXRtYXNrICAgICAgICAgICAgKF9fTlJfTGludXggKyA2OCkKLSNkZWZpbmUgX19OUl9zc2V0bWFzayAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjkpCi0jZGVmaW5lIF9fTlJfc2V0cmV1aWQgICAgICAgICAgICAoX19OUl9MaW51eCArIDcwKQotI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAgKF9fTlJfTGludXggKyA3MSkKLSNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNzIpCi0jZGVmaW5lIF9fTlJfc2lncGVuZGluZyAgICAgICAgICAoX19OUl9MaW51eCArIDczKQotI2RlZmluZSBfX05SX3NldGhvc3RuYW1lICAgICAgICAgKF9fTlJfTGludXggKyA3NCkKLSNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgIChfX05SX0xpbnV4ICsgNzUpCi0jZGVmaW5lIF9fTlJfZ2V0cmxpbWl0ICAgICAgICAgICAoX19OUl9MaW51eCArIDc2KQotI2RlZmluZSBfX05SX2dldHJ1c2FnZSAgICAgICAgICAgKF9fTlJfTGludXggKyA3NykKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgIChfX05SX0xpbnV4ICsgNzgpCi0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5ICAgICAgICAoX19OUl9MaW51eCArIDc5KQotI2RlZmluZSBfX05SX2dldGdyb3VwcyAgICAgICAgICAgKF9fTlJfTGludXggKyA4MCkKLSNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgIChfX05SX0xpbnV4ICsgODEpCi0jZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDgyKQotI2RlZmluZSBfX05SX3N5bWxpbmsgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4MykKLSNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODQpCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICAoX19OUl9MaW51eCArIDg1KQotI2RlZmluZSBfX05SX3VzZWxpYiAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4NikKLSNkZWZpbmUgX19OUl9zd2Fwb24gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODcpCi0jZGVmaW5lIF9fTlJfcmVib290ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDg4KQotI2RlZmluZSBfX05SX21tYXAyICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODkpCi0jZGVmaW5lIF9fTlJfbW1hcCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDkwKQotI2RlZmluZSBfX05SX211bm1hcCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA5MSkKLSNkZWZpbmUgX19OUl90cnVuY2F0ZSAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTIpCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlICAgICAgICAgICAoX19OUl9MaW51eCArIDkzKQotI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA5NCkKLSNkZWZpbmUgX19OUl9mY2hvd24gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTUpCi0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgICAoX19OUl9MaW51eCArIDk2KQotI2RlZmluZSBfX05SX3NldHByaW9yaXR5ICAgICAgICAgKF9fTlJfTGludXggKyA5NykKLSNkZWZpbmUgX19OUl9yZWN2ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTgpCi0jZGVmaW5lIF9fTlJfc3RhdGZzICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDk5KQotI2RlZmluZSBfX05SX2ZzdGF0ZnMgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwMCkKLSNkZWZpbmUgX19OUl9zdGF0NjQgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTAxKQotLyogI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAoX19OUl9MaW51eCArIDEwMikgKi8KLSNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDMpCi0jZGVmaW5lIF9fTlJfc2V0aXRpbWVyICAgICAgICAgIChfX05SX0xpbnV4ICsgMTA0KQotI2RlZmluZSBfX05SX2dldGl0aW1lciAgICAgICAgICAoX19OUl9MaW51eCArIDEwNSkKLSNkZWZpbmUgX19OUl9jYXBnZXQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDYpCi0jZGVmaW5lIF9fTlJfY2Fwc2V0ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTA3KQotI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwOCkKLSNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDkpCi0jZGVmaW5lIF9fTlJfZ2V0Y3dkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTEwKQotI2RlZmluZSBfX05SX3ZoYW5ndXAgICAgICAgICAgICAoX19OUl9MaW51eCArIDExMSkKLSNkZWZpbmUgX19OUl9mc3RhdDY0ICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTIpCi0jZGVmaW5lIF9fTlJfdmZvcmsgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTEzKQotI2RlZmluZSBfX05SX3dhaXQ0ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDExNCkKLSNkZWZpbmUgX19OUl9zd2Fwb2ZmICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTUpCi0jZGVmaW5lIF9fTlJfc3lzaW5mbyAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTE2KQotI2RlZmluZSBfX05SX3NodXRkb3duICAgICAgICAgICAoX19OUl9MaW51eCArIDExNykKLSNkZWZpbmUgX19OUl9mc3luYyAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTgpCi0jZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTE5KQotI2RlZmluZSBfX05SX2Nsb25lICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEyMCkKLSNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lICAgICAgKF9fTlJfTGludXggKyAxMjEpCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGUgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTIyKQotI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAoX19OUl9MaW51eCArIDEyMykKLSNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMjQpCi0jZGVmaW5lIF9fTlJfbXByb3RlY3QgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTI1KQotI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAoX19OUl9MaW51eCArIDEyNikKLSNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgKF9fTlJfTGludXggKyAxMjcpCi0jZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgICAgICAgIChfX05SX0xpbnV4ICsgMTI4KQotI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAoX19OUl9MaW51eCArIDEyOSkKLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgICAgKF9fTlJfTGludXggKyAxMzApCi0jZGVmaW5lIF9fTlJfcXVvdGFjdGwgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTMxKQotI2RlZmluZSBfX05SX2dldHBnaWQgICAgICAgICAgICAoX19OUl9MaW51eCArIDEzMikKLSNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMzMpCi0jZGVmaW5lIF9fTlJfYmRmbHVzaCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTM0KQotI2RlZmluZSBfX05SX3N5c2ZzICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEzNSkKLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgKF9fTlJfTGludXggKyAxMzYpCi0jZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgICAgICAgIChfX05SX0xpbnV4ICsgMTM3KSAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMzgpCi0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTM5KQotI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0MCkKLSNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgKF9fTlJfTGludXggKyAxNDEpCi0jZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgIChfX05SX0xpbnV4ICsgMTQyKQotI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0MykKLSNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNDQpCi0jZGVmaW5lIF9fTlJfcmVhZHYgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQ1KQotI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0NikKLSNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNDcpCi0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQ4KQotI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0OSkKLSNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTApCi0jZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTUxKQotI2RlZmluZSBfX05SX21sb2NrYWxsICAgICAgICAgICAoX19OUl9MaW51eCArIDE1MikKLSNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgKF9fTlJfTGludXggKyAxNTMpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTQpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTUpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyICAgICAgICAgKF9fTlJfTGludXggKyAxNTYpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyICAgICAgICAgKF9fTlJfTGludXggKyAxNTcpCi0jZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTgpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAgICAgKF9fTlJfTGludXggKyAxNTkpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgICAgKF9fTlJfTGludXggKyAxNjApCi0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAgICAgKF9fTlJfTGludXggKyAxNjEpCi0jZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgIChfX05SX0xpbnV4ICsgMTYyKQotI2RlZmluZSBfX05SX21yZW1hcCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE2MykKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQgICAgICAgICAgKF9fTlJfTGludXggKyAxNjQpCi0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkICAgICAgICAgIChfX05SX0xpbnV4ICsgMTY1KQotI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrICAgICAgICAoX19OUl9MaW51eCArIDE2NikKLSNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUgICAgICAgKF9fTlJfTGludXggKyAxNjcpCi0jZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTY4KQotI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAoX19OUl9MaW51eCArIDE2OSkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQgICAgICAgICAgKF9fTlJfTGludXggKyAxNzApCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkICAgICAgICAgIChfX05SX0xpbnV4ICsgMTcxKQotI2RlZmluZSBfX05SX3ByY3RsICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE3MikKLSNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gICAgICAgKF9fTlJfTGludXggKyAxNzMpCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIChfX05SX0xpbnV4ICsgMTc0KQotI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrICAgICAoX19OUl9MaW51eCArIDE3NSkKLSNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nICAgICAgKF9fTlJfTGludXggKyAxNzYpCi0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIChfX05SX0xpbnV4ICsgMTc3KQotI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAgICAoX19OUl9MaW51eCArIDE3OCkKLSNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kICAgICAgKF9fTlJfTGludXggKyAxNzkpCi0jZGVmaW5lIF9fTlJfY2hvd24gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTgwKQotI2RlZmluZSBfX05SX3NldHNvY2tvcHQgICAgICAgICAoX19OUl9MaW51eCArIDE4MSkKLSNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgKF9fTlJfTGludXggKyAxODIpCi0jZGVmaW5lIF9fTlJfc2VuZG1zZyAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTgzKQotI2RlZmluZSBfX05SX3JlY3Ztc2cgICAgICAgICAgICAoX19OUl9MaW51eCArIDE4NCkKLSNkZWZpbmUgX19OUl9zZW1vcCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODUpCi0jZGVmaW5lIF9fTlJfc2VtZ2V0ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTg2KQotI2RlZmluZSBfX05SX3NlbWN0bCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE4NykKLSNkZWZpbmUgX19OUl9tc2dzbmQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODgpCi0jZGVmaW5lIF9fTlJfbXNncmN2ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTg5KQotI2RlZmluZSBfX05SX21zZ2dldCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5MCkKLSNkZWZpbmUgX19OUl9tc2djdGwgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxOTEpCi0jZGVmaW5lIF9fTlJfc2htYXQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTkyKQotI2RlZmluZSBfX05SX3NobWR0ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5MykKLSNkZWZpbmUgX19OUl9zaG1nZXQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxOTQpCi0jZGVmaW5lIF9fTlJfc2htY3RsICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTk1KQotCi0jZGVmaW5lIF9fTlJfZ2V0cG1zZwkJKF9fTlJfTGludXggKyAxOTYpIC8qIFNvbWVib2R5ICp3YW50cyogc3RyZWFtcz8gKi8KLSNkZWZpbmUgX19OUl9wdXRwbXNnCQkoX19OUl9MaW51eCArIDE5NykKLQotI2RlZmluZSBfX05SX2xzdGF0NjQgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5OCkKLSNkZWZpbmUgX19OUl90cnVuY2F0ZTY0ICAgICAgICAgKF9fTlJfTGludXggKyAxOTkpCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgICAgICAgIChfX05SX0xpbnV4ICsgMjAwKQotI2RlZmluZSBfX05SX2dldGRlbnRzNjQgICAgICAgICAoX19OUl9MaW51eCArIDIwMSkKLSNkZWZpbmUgX19OUl9mY250bDY0ICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDIpCi0jZGVmaW5lIF9fTlJfYXR0cmN0bCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjAzKQotI2RlZmluZSBfX05SX2FjbF9nZXQgICAgICAgICAgICAoX19OUl9MaW51eCArIDIwNCkKLSNkZWZpbmUgX19OUl9hY2xfc2V0ICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDUpCi0jZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjA2KQotI2RlZmluZSBfX05SX3JlYWRhaGVhZCAgICAgICAgICAoX19OUl9MaW51eCArIDIwNykKLSNkZWZpbmUgX19OUl90a2lsbCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDgpCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAgICAgICAgIChfX05SX0xpbnV4ICsgMjA5KQotI2RlZmluZSBfX05SX2Z1dGV4ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDIxMCkKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eSAgKF9fTlJfTGludXggKyAyMTEpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgIChfX05SX0xpbnV4ICsgMjEyKQotI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYSAgICAoX19OUl9MaW51eCArIDIxMykKLSNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEgICAgKF9fTlJfTGludXggKyAyMTQpCi0jZGVmaW5lIF9fTlJfaW9fc2V0dXAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE1KQotI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kgICAgICAgICAoX19OUl9MaW51eCArIDIxNikKLSNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgICAgICAgKF9fTlJfTGludXggKyAyMTcpCi0jZGVmaW5lIF9fTlJfaW9fc3VibWl0ICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE4KQotI2RlZmluZSBfX05SX2lvX2NhbmNlbCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOSkKLSNkZWZpbmUgX19OUl9hbGxvY19odWdlcGFnZXMgICAgKF9fTlJfTGludXggKyAyMjApCi0jZGVmaW5lIF9fTlJfZnJlZV9odWdlcGFnZXMgICAgIChfX05SX0xpbnV4ICsgMjIxKQotI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgICAgICAgICAoX19OUl9MaW51eCArIDIyMikKLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAgICAgKF9fTlJfTGludXggKyAyMjMpCi0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgIChfX05SX0xpbnV4ICsgMjI0KQotI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAoX19OUl9MaW51eCArIDIyNSkKLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0ICAgICAgICAgKF9fTlJfTGludXggKyAyMjYpCi0jZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcyAgIChfX05SX0xpbnV4ICsgMjI3KQotI2RlZmluZSBfX05SX3NlbXRpbWVkb3AgICAgICAgICAoX19OUl9MaW51eCArIDIyOCkKLSNkZWZpbmUgX19OUl9tcV9vcGVuICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMjkpCi0jZGVmaW5lIF9fTlJfbXFfdW5saW5rICAgICAgICAgIChfX05SX0xpbnV4ICsgMjMwKQotI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAgICAgICAoX19OUl9MaW51eCArIDIzMSkKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgICAgKF9fTlJfTGludXggKyAyMzIpCi0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5ICAgICAgICAgIChfX05SX0xpbnV4ICsgMjMzKQotI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9MaW51eCArIDIzNCkKLSNkZWZpbmUgX19OUl93YWl0aWQJCShfX05SX0xpbnV4ICsgMjM1KQotI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkoX19OUl9MaW51eCArIDIzNikKLSNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJKF9fTlJfTGludXggKyAyMzcpCi0jZGVmaW5lIF9fTlJfc2V0eGF0dHIJCShfX05SX0xpbnV4ICsgMjM4KQotI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJKF9fTlJfTGludXggKyAyMzkpCi0jZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkoX19OUl9MaW51eCArIDI0MCkKLSNkZWZpbmUgX19OUl9nZXR4YXR0cgkJKF9fTlJfTGludXggKyAyNDEpCi0jZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkoX19OUl9MaW51eCArIDI0MikKLSNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCShfX05SX0xpbnV4ICsgMjQzKQotI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJKF9fTlJfTGludXggKyAyNDQpCi0jZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJKF9fTlJfTGludXggKyAyNDUpCi0jZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJKF9fTlJfTGludXggKyAyNDYpCi0jZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJKF9fTlJfTGludXggKyAyNDcpCi0jZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCShfX05SX0xpbnV4ICsgMjQ4KQotI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkoX19OUl9MaW51eCArIDI0OSkKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJKF9fTlJfTGludXggKyAyNTApCi0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkoX19OUl9MaW51eCArIDI1MSkKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCShfX05SX0xpbnV4ICsgMjUyKQotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JKF9fTlJfTGludXggKyAyNTMpCi0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCShfX05SX0xpbnV4ICsgMjU0KQotI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJKF9fTlJfTGludXggKyAyNTUpCi0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkoX19OUl9MaW51eCArIDI1NikKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJKF9fTlJfTGludXggKyAyNTcpCi0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCShfX05SX0xpbnV4ICsgMjU4KQotI2RlZmluZSBfX05SX3Rna2lsbAkJKF9fTlJfTGludXggKyAyNTkpCi0jZGVmaW5lIF9fTlJfbWJpbmQJCShfX05SX0xpbnV4ICsgMjYwKQotI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJKF9fTlJfTGludXggKyAyNjEpCi0jZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkoX19OUl9MaW51eCArIDI2MikKLSNkZWZpbmUgX19OUl92c2VydmVyCQkoX19OUl9MaW51eCArIDI2MykKLSNkZWZpbmUgX19OUl9hZGRfa2V5CQkoX19OUl9MaW51eCArIDI2NCkKLSNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkoX19OUl9MaW51eCArIDI2NSkKLSNkZWZpbmUgX19OUl9rZXljdGwJCShfX05SX0xpbnV4ICsgMjY2KQotI2RlZmluZSBfX05SX2lvcHJpb19zZXQJCShfX05SX0xpbnV4ICsgMjY3KQotI2RlZmluZSBfX05SX2lvcHJpb19nZXQJCShfX05SX0xpbnV4ICsgMjY4KQotI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdAkoX19OUl9MaW51eCArIDI2OSkKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaAkoX19OUl9MaW51eCArIDI3MCkKLSNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoCShfX05SX0xpbnV4ICsgMjcxKQotI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJKF9fTlJfTGludXggKyAyNzIpCi0jZGVmaW5lIF9fTlJfcHNlbGVjdDYJCShfX05SX0xpbnV4ICsgMjczKQotI2RlZmluZSBfX05SX3Bwb2xsCQkoX19OUl9MaW51eCArIDI3NCkKLSNkZWZpbmUgX19OUl9vcGVuYXQJCShfX05SX0xpbnV4ICsgMjc1KQotI2RlZmluZSBfX05SX21rZGlyYXQJCShfX05SX0xpbnV4ICsgMjc2KQotI2RlZmluZSBfX05SX21rbm9kYXQJCShfX05SX0xpbnV4ICsgMjc3KQotI2RlZmluZSBfX05SX2ZjaG93bmF0CQkoX19OUl9MaW51eCArIDI3OCkKLSNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCShfX05SX0xpbnV4ICsgMjc5KQotI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJKF9fTlJfTGludXggKyAyODApCi0jZGVmaW5lIF9fTlJfdW5saW5rYXQJCShfX05SX0xpbnV4ICsgMjgxKQotI2RlZmluZSBfX05SX3JlbmFtZWF0CQkoX19OUl9MaW51eCArIDI4MikKLSNkZWZpbmUgX19OUl9saW5rYXQJCShfX05SX0xpbnV4ICsgMjgzKQotI2RlZmluZSBfX05SX3N5bWxpbmthdAkJKF9fTlJfTGludXggKyAyODQpCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJKF9fTlJfTGludXggKyAyODUpCi0jZGVmaW5lIF9fTlJfZmNobW9kYXQJCShfX05SX0xpbnV4ICsgMjg2KQotI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJKF9fTlJfTGludXggKyAyODcpCi0jZGVmaW5lIF9fTlJfdW5zaGFyZQkJKF9fTlJfTGludXggKyAyODgpCi0jZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CShfX05SX0xpbnV4ICsgMjg5KQotI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkoX19OUl9MaW51eCArIDI5MCkKLSNkZWZpbmUgX19OUl9zcGxpY2UJCShfX05SX0xpbnV4ICsgMjkxKQotI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkoX19OUl9MaW51eCArIDI5MikKLSNkZWZpbmUgX19OUl90ZWUJCShfX05SX0xpbnV4ICsgMjkzKQotI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkoX19OUl9MaW51eCArIDI5NCkKLSNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkoX19OUl9MaW51eCArIDI5NSkKLSNkZWZpbmUgX19OUl9nZXRjcHUJCShfX05SX0xpbnV4ICsgMjk2KQotI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CShfX05SX0xpbnV4ICsgMjk3KQotI2RlZmluZSBfX05SX3N0YXRmczY0CQkoX19OUl9MaW51eCArIDI5OCkKLSNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCShfX05SX0xpbnV4ICsgMjk5KQotI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCShfX05SX0xpbnV4ICsgMzAwKQotI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJKF9fTlJfTGludXggKyAzMDEpCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQJCShfX05SX0xpbnV4ICsgMzAyKQotI2RlZmluZSBfX05SX3RpbWVyZmQJCShfX05SX0xpbnV4ICsgMzAzKQotI2RlZmluZSBfX05SX2V2ZW50ZmQJCShfX05SX0xpbnV4ICsgMzA0KQotI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJKF9fTlJfTGludXggKyAzMDUpCi0jZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJKF9fTlJfTGludXggKyAzMDYpCi0jZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCShfX05SX0xpbnV4ICsgMzA3KQotI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkoX19OUl9MaW51eCArIDMwOCkKLQotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX3RpbWVyZmRfZ2V0dGltZSArIDEpCi0KLQotI2RlZmluZSBfX0lHTk9SRV9zZWxlY3QJCS8qIG5ld3NlbGVjdCAqLwotI2RlZmluZSBfX0lHTk9SRV9mYWR2aXNlNjQJLyogZmFkdmlzZTY0XzY0ICovCi0jZGVmaW5lIF9fSUdOT1JFX3V0aW1lcwkJLyogdXRpbWUgKi8KLQotCi0jZGVmaW5lIEhQVVhfR0FURVdBWV9BRERSICAgICAgIDB4QzAwMDAwMDQKLSNkZWZpbmUgTElOVVhfR0FURVdBWV9BRERSICAgICAgMHgxMDAKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNkZWZpbmUgU1lTX2lmeShzeXNjYWxsX25hbWUpICAgX19OUl8jI3N5c2NhbGxfbmFtZQotCi0jaWZuZGVmIEFTTV9MSU5FX1NFUAotIyBkZWZpbmUgQVNNX0xJTkVfU0VQIDsKLSNlbmRpZgotCi0vKiBEZWZpbml0aW9uIHRha2VuIGZyb20gZ2xpYmMgMi4zLjMKLSAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2hwcGEvc3lzZGVwLmgKLSAqLwotCi0jaWZkZWYgUElDCi0vKiBXQVJOSU5HOiBDQU5OT1QgQkUgVVNFRCBJTiBBIE5PUCEgKi8KLSMgZGVmaW5lIEtfU1RXX0FTTV9QSUMJIiAgICAgICBjb3B5ICUlcjE5LCAlJXI0XG4iCi0jIGRlZmluZSBLX0xEV19BU01fUElDCSIgICAgICAgY29weSAlJXI0LCAlJXIxOVxuIgotIyBkZWZpbmUgS19VU0lOR19HUjQJIiVyNCIsCi0jZWxzZQotIyBkZWZpbmUgS19TVFdfQVNNX1BJQwkiIFxuIgotIyBkZWZpbmUgS19MRFdfQVNNX1BJQwkiIFxuIgotIyBkZWZpbmUgS19VU0lOR19HUjQKLSNlbmRpZgotCi0vKiBHQ0MgaGFzIHRvIGJlIHdhcm5lZCB0aGF0IGEgc3lzY2FsbCBtYXkgY2xvYmJlciBhbGwgdGhlIEFCSQotICAgcmVnaXN0ZXJzIGxpc3RlZCBhcyAiY2FsbGVyLXNhdmVzIiwgc2VlIHBhZ2UgOCwgVGFibGUgMgotICAgaW4gc2VjdGlvbiAyLjIuNiBvZiB0aGUgUEEtUklTQyBSVU4tVElNRSBhcmNoaXRlY3R1cmUKLSAgIGRvY3VtZW50LiBIb3dldmVyISByMjggaXMgdGhlIHJlc3VsdCBhbmQgd2lsbCBjb25mbGljdCB3aXRoCi0gICB0aGUgY2xvYmJlciBsaXN0IHNvIGl0IGlzIGxlZnQgb3V0LiBBbHNvIHRoZSBpbnB1dCBhcmd1bWVudHMKLSAgIHJlZ2lzdGVycyByMjAgLT4gcjI2IHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgbGlzdCBzbyB0aGV5Ci0gICBhcmUgdHJlYXRlZCBzcGVjaWFsbHkuIEFsdGhvdWdoIHIxOSBpcyBjbG9iYmVyZWQgYnkgdGhlIHN5c2NhbGwKLSAgIHdlIGNhbm5vdCBzYXkgdGhpcyBiZWNhdXNlIGl0IHdvdWxkIHZpb2xhdGUgQUJJLCB0aHVzIHdlIHNheQotICAgcjQgaXMgY2xvYmJlcmVkIGFuZCB1c2UgdGhhdCByZWdpc3RlciB0byBzYXZlL3Jlc3RvcmUgcjE5Ci0gICBhY3Jvc3MgdGhlIHN5c2NhbGwuICovCi0KLSNkZWZpbmUgS19DQUxMX0NMT0JfUkVHUyAiJXIxIiwgIiVyMiIsIEtfVVNJTkdfR1I0IFwKLQkgICAgICAgIAkgIiVyMjAiLCAiJXIyOSIsICIlcjMxIgotCi0jdW5kZWYgS19JTkxJTkVfU1lTQ0FMTAotI2RlZmluZSBLX0lOTElORV9TWVNDQUxMKG5hbWUsIG5yLCBhcmdzLi4uKQkoewkJCVwKLQlsb25nIF9fc3lzX3JlczsJCQkJCQkJXAotCXsJCQkJCQkJCVwKLQkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyBfX2FzbV9fKCJyMjgiKTsJCVwKLQkJS19MT0FEX0FSR1NfIyNucihhcmdzKQkJCQkJXAotCQkvKiBGSVhNRTogSEFDSyBzdHcvbGR3IHIxOSBhcm91bmQgc3lzY2FsbCAqLwkJXAotCQlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJXAotCQkJS19TVFdfQVNNX1BJQwkJCQkJXAotCQkJIglibGUgIDB4MTAwKCUlc3IyLCAlJXIwKVxuIgkJXAotCQkJIglsZGkgJTEsICUlcjIwXG4iCQkJXAotCQkJS19MRFdfQVNNX1BJQwkJCQkJXAotCQkJOiAiPXIiIChfX3JlcykJCQkJCVwKLQkJCTogImkiIChTWVNfaWZ5KG5hbWUpKSBLX0FTTV9BUkdTXyMjbnIgICAJXAotCQkJOiAibWVtb3J5IiwgS19DQUxMX0NMT0JfUkVHUyBLX0NMT0JfQVJHU18jI25yCVwKLQkJKTsJCQkJCQkJXAotCQlfX3N5c19yZXMgPSAobG9uZylfX3JlczsJCQkJXAotCX0JCQkJCQkJCVwKLQlpZiAoICh1bnNpZ25lZCBsb25nKV9fc3lzX3JlcyA+PSAodW5zaWduZWQgbG9uZyktNDA5NSApewlcCi0JCWVycm5vID0gLV9fc3lzX3JlczsJCSAgICAgICAgCQlcCi0JCV9fc3lzX3JlcyA9IC0xOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JX19zeXNfcmVzOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIEtfTE9BRF9BUkdTXzAoKQotI2RlZmluZSBLX0xPQURfQVJHU18xKHIyNikJCQkJCVwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI2IF9fYXNtX18oInIyNiIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNik7ICAgXAotCUtfTE9BRF9BUkdTXzAoKQotI2RlZmluZSBLX0xPQURfQVJHU18yKHIyNixyMjUpCQkJCQlcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNSBfX2FzbV9fKCJyMjUiKSA9ICh1bnNpZ25lZCBsb25nKShyMjUpOyAgIFwKLQlLX0xPQURfQVJHU18xKHIyNikKLSNkZWZpbmUgS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkJCQkJXAotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjQgX19hc21fXygicjI0IikgPSAodW5zaWduZWQgbG9uZykocjI0KTsgICBcCi0JS19MT0FEX0FSR1NfMihyMjYscjI1KQotI2RlZmluZSBLX0xPQURfQVJHU180KHIyNixyMjUscjI0LHIyMykJCQkJXAotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjMgX19hc21fXygicjIzIikgPSAodW5zaWduZWQgbG9uZykocjIzKTsgICBcCi0JS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkKLSNkZWZpbmUgS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQkJCVwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjIyIF9fYXNtX18oInIyMiIpID0gKHVuc2lnbmVkIGxvbmcpKHIyMik7ICAgXAotCUtfTE9BRF9BUkdTXzQocjI2LHIyNSxyMjQscjIzKQotI2RlZmluZSBLX0xPQURfQVJHU182KHIyNixyMjUscjI0LHIyMyxyMjIscjIxKQkJCVwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjIxIF9fYXNtX18oInIyMSIpID0gKHVuc2lnbmVkIGxvbmcpKHIyMSk7ICAgXAotCUtfTE9BRF9BUkdTXzUocjI2LHIyNSxyMjQscjIzLHIyMikKLQotLyogRXZlbiB3aXRoIHplcm8gYXJncyB3ZSB1c2UgcjIwIGZvciB0aGUgc3lzY2FsbCBudW1iZXIgKi8KLSNkZWZpbmUgS19BU01fQVJHU18wCi0jZGVmaW5lIEtfQVNNX0FSR1NfMSBLX0FTTV9BUkdTXzAsICJyIiAoX19yMjYpCi0jZGVmaW5lIEtfQVNNX0FSR1NfMiBLX0FTTV9BUkdTXzEsICJyIiAoX19yMjUpCi0jZGVmaW5lIEtfQVNNX0FSR1NfMyBLX0FTTV9BUkdTXzIsICJyIiAoX19yMjQpCi0jZGVmaW5lIEtfQVNNX0FSR1NfNCBLX0FTTV9BUkdTXzMsICJyIiAoX19yMjMpCi0jZGVmaW5lIEtfQVNNX0FSR1NfNSBLX0FTTV9BUkdTXzQsICJyIiAoX19yMjIpCi0jZGVmaW5lIEtfQVNNX0FSR1NfNiBLX0FTTV9BUkdTXzUsICJyIiAoX19yMjEpCi0KLS8qIFRoZSByZWdpc3RlcnMgbm90IGxpc3RlZCBhcyBpbnB1dHMgYnV0IGNsb2JiZXJlZCAqLwotI2RlZmluZSBLX0NMT0JfQVJHU182Ci0jZGVmaW5lIEtfQ0xPQl9BUkdTXzUgS19DTE9CX0FSR1NfNiwgIiVyMjEiCi0jZGVmaW5lIEtfQ0xPQl9BUkdTXzQgS19DTE9CX0FSR1NfNSwgIiVyMjIiCi0jZGVmaW5lIEtfQ0xPQl9BUkdTXzMgS19DTE9CX0FSR1NfNCwgIiVyMjMiCi0jZGVmaW5lIEtfQ0xPQl9BUkdTXzIgS19DTE9CX0FSR1NfMywgIiVyMjQiCi0jZGVmaW5lIEtfQ0xPQl9BUkdTXzEgS19DTE9CX0FSR1NfMiwgIiVyMjUiCi0jZGVmaW5lIEtfQ0xPQl9BUkdTXzAgS19DTE9CX0FSR1NfMSwgIiVyMjYiCi0KLSNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkJCQkJCQlcCi10eXBlIG5hbWUodm9pZCkJCQkJCQkJCVwKLXsJCQkJCQkJCQlcCi0gICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgMCk7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkJCQkJCVwKLXR5cGUgbmFtZSh0eXBlMSBhcmcxKQkJCQkJCQlcCi17CQkJCQkJCQkJXAotICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKG5hbWUsIDEsIGFyZzEpOwkgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQkJXAotdHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIpCQkJCQlcCi17CQkJCQkJCQkJXAotICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKG5hbWUsIDIsIGFyZzEsIGFyZzIpOwkgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpCQlcCi10eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMykJCQkJXAotewkJCQkJCQkJCVwKLSAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCAzLCBhcmcxLCBhcmcyLCBhcmczKTsJICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKLXR5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAotewkJCQkJCQkJCVwKLSAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCA0LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsJICAgICAgICBcCi19Ci0KLS8qIHNlbGVjdCB0YWtlcyA1IGFyZ3VtZW50cyAqLwotI2RlZmluZSBfc3lzY2FsbDUodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSkgXAotdHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQsIHR5cGU1IGFyZzUpCVwKLXsJCQkJCQkJCQlcCi0gICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgNSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CVwKLX0KLQotI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgotI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAotI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1JUX1NJR1NVU1BFTkQKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jdW5kZWYgU1RSCi0KLS8qCi0gKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCi0gKgotICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKLSAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAotICovCi0jZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX1BBUklTQ19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bndpbmQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91bndpbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY3ZTZlNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW53aW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0jaWZuZGVmIF9VTldJTkRfSF8KLSNkZWZpbmUgX1VOV0lORF9IXwotCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0vKiBGcm9tIEFCSSBzcGVjaWZpY2F0aW9ucyAqLwotc3RydWN0IHVud2luZF90YWJsZV9lbnRyeSB7Ci0JdW5zaWduZWQgaW50IHJlZ2lvbl9zdGFydDsKLQl1bnNpZ25lZCBpbnQgcmVnaW9uX2VuZDsKLQl1bnNpZ25lZCBpbnQgQ2Fubm90X3Vud2luZDoxOyAvKiAwICovCi0JdW5zaWduZWQgaW50IE1pbGxpY29kZToxOwkvKiAxICovCi0JdW5zaWduZWQgaW50IE1pbGxpY29kZV9zYXZlX3NyMDoxOwkvKiAyICovCi0JdW5zaWduZWQgaW50IFJlZ2lvbl9kZXNjcmlwdGlvbjoyOwkvKiAzLi40ICovCi0JdW5zaWduZWQgaW50IHJlc2VydmVkMToxOwkvKiA1ICovCi0JdW5zaWduZWQgaW50IEVudHJ5X1NSOjE7CS8qIDYgKi8KLQl1bnNpZ25lZCBpbnQgRW50cnlfRlI6NDsJLyogbnVtYmVyIHNhdmVkICovLyogNy4uMTAgKi8KLQl1bnNpZ25lZCBpbnQgRW50cnlfR1I6NTsJLyogbnVtYmVyIHNhdmVkICovLyogMTEuLjE1ICovCi0JdW5zaWduZWQgaW50IEFyZ3Nfc3RvcmVkOjE7CS8qIDE2ICovCi0JdW5zaWduZWQgaW50IFZhcmlhYmxlX0ZyYW1lOjE7CS8qIDE3ICovCi0JdW5zaWduZWQgaW50IFNlcGFyYXRlX1BhY2thZ2VfQm9keToxOwkvKiAxOCAqLwotCXVuc2lnbmVkIGludCBGcmFtZV9FeHRlbnNpb25fTWlsbGljb2RlOjE7CS8qIDE5ICovCi0JdW5zaWduZWQgaW50IFN0YWNrX092ZXJmbG93X0NoZWNrOjE7CS8qIDIwICovCi0JdW5zaWduZWQgaW50IFR3b19JbnN0cnVjdGlvbl9TUF9JbmNyZW1lbnQ6MTsJLyogMjEgKi8KLQl1bnNpZ25lZCBpbnQgQWRhX1JlZ2lvbjoxOwkvKiAyMiAqLwotCXVuc2lnbmVkIGludCBjeHhfaW5mbzoxOwkvKiAyMyAqLwotCXVuc2lnbmVkIGludCBjeHhfdHJ5X2NhdGNoOjE7CS8qIDI0ICovCi0JdW5zaWduZWQgaW50IHNjaGVkX2VudHJ5X3NlcToxOwkvKiAyNSAqLwotCXVuc2lnbmVkIGludCByZXNlcnZlZDI6MTsJLyogMjYgKi8KLQl1bnNpZ25lZCBpbnQgU2F2ZV9TUDoxOwkvKiAyNyAqLwotCXVuc2lnbmVkIGludCBTYXZlX1JQOjE7CS8qIDI4ICovCi0JdW5zaWduZWQgaW50IFNhdmVfTVJQX2luX2ZyYW1lOjE7CS8qIDI5ICovCi0JdW5zaWduZWQgaW50IGV4dG5fcHRyX2RlZmluZWQ6MTsJLyogMzAgKi8KLQl1bnNpZ25lZCBpbnQgQ2xlYW51cF9kZWZpbmVkOjE7CS8qIDMxICovCi0JCi0JdW5zaWduZWQgaW50IE1QRV9YTF9pbnRlcnJ1cHRfbWFya2VyOjE7CS8qIDAgKi8KLQl1bnNpZ25lZCBpbnQgSFBfVVhfaW50ZXJydXB0X21hcmtlcjoxOwkvKiAxICovCi0JdW5zaWduZWQgaW50IExhcmdlX2ZyYW1lOjE7CS8qIDIgKi8KLQl1bnNpZ25lZCBpbnQgUHNldWRvX1NQX1NldDoxOwkvKiAzICovCi0JdW5zaWduZWQgaW50IHJlc2VydmVkNDoxOwkvKiA0ICovCi0JdW5zaWduZWQgaW50IFRvdGFsX2ZyYW1lX3NpemU6Mjc7CS8qIDUuLjMxICovCi19OwotCi1zdHJ1Y3QgdW53aW5kX3RhYmxlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1bnNpZ25lZCBsb25nIGdwOwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0JY29uc3Qgc3RydWN0IHVud2luZF90YWJsZV9lbnRyeSAqdGFibGU7Ci0JdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci19OwotCi1zdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQkvKiBFdmVudHVhbGx5IHdlIHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byBnZXQgYXQgYW55IG9mIHRoZSByZWdpc3RlcnMKLQkgICBhdmFpbGFibGU7IGJ1dCBmb3Igbm93IHdlIG9ubHkgdHJ5IHRvIGdldCB0aGUgc3AgYW5kIGlwIGZvciBlYWNoCi0JICAgZnJhbWUgKi8KLQkvKiBzdHJ1Y3QgcHRfcmVncyByZWdzOyAqLwotCXVuc2lnbmVkIGxvbmcgc3AsIGlwLCBycCwgcjMxOwotCXVuc2lnbmVkIGxvbmcgcHJldl9zcCwgcHJldl9pcDsKLX07Ci0KLXN0cnVjdCB1bndpbmRfdGFibGUgKgotdW53aW5kX3RhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwgCi0JCSB1bnNpZ25lZCBsb25nIGdwLCB2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKLXZvaWQKLXVud2luZF90YWJsZV9yZW1vdmUoc3RydWN0IHVud2luZF90YWJsZSAqdGFibGUpOwotCi12b2lkIHVud2luZF9mcmFtZV9pbml0KHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0LCAKLQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXZvaWQgdW53aW5kX2ZyYW1lX2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwotdm9pZCB1bndpbmRfZnJhbWVfaW5pdF9ydW5uaW5nKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50IHVud2luZF9vbmNlKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbyk7Ci1pbnQgdW53aW5kX3RvX3VzZXIoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hLm91dC5oIGIvaW5jbHVkZS9hc20tdW0vYS5vdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU0MTgxZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9hLm91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2lmbmRlZiBfX1VNX0FfT1VUX0gKLSNkZWZpbmUgX19VTV9BX09VVF9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9hLm91dC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2FsdGVybmF0aXZlLWFzbS5oIGIvaW5jbHVkZS9hc20tdW0vYWx0ZXJuYXRpdmUtYXNtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYTlmYTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vYWx0ZXJuYXRpdmUtYXNtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9BTFRFUk5BVElWRV9BU01fSQotI2RlZmluZSBfX1VNX0FMVEVSTkFUSVZFX0FTTV9JCi0KLSNpbmNsdWRlICJhc20vYXJjaC9hbHRlcm5hdGl2ZS1hc20uaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hbHRlcm5hdGl2ZS5oIGIvaW5jbHVkZS9hc20tdW0vYWx0ZXJuYXRpdmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY0MzQzOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9hbHRlcm5hdGl2ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fQUxURVJOQVRJVkVfSAotI2RlZmluZSBfX1VNX0FMVEVSTkFUSVZFX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2FsdGVybmF0aXZlLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS1pMzg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZTg5YjguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLWkzODYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMyBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19VTV9BUkNIUEFSQU1fSTM4Nl9ICi0jZGVmaW5lIF9fVU1fQVJDSFBBUkFNX0kzODZfSAotCi0vKioqKioqKioqIE5vdGhpbmcgZm9yIGFzbS11bS9oYXJkaXJxLmggKioqKioqKioqKi8KLQotLyoqKioqKioqKiBOb3RoaW5nIGZvciBhc20tdW0vaHdfaXJxLmggKioqKioqKioqKi8KLQotLyoqKioqKioqKiBOb3RoaW5nIGZvciBhc20tdW0vc3RyaW5nLmggKioqKioqKioqKi8KLQotI2VuZGlmCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hc20uaCBiL2luY2x1ZGUvYXNtLXVtL2FzbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjEyNjlhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL2FzbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fQVNNX0gKLSNkZWZpbmUgX19VTV9BU01fSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvYXNtLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYXRvbWljLmggYi9pbmNsdWRlL2FzbS11bS9hdG9taWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4M2YxMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9hdG9taWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpZm5kZWYgX19VTV9BVE9NSUNfSAotI2RlZmluZSBfX1VNX0FUT01JQ19ICi0KLS8qIFRoZSBpMzg2IGF0b21pYy5oIGNhbGxzIHByaW50aywgYnV0IGRvZXNuJ3QgaW5jbHVkZSBrZXJuZWwuaCwgc28gd2UKLSAqIGluY2x1ZGUgaXQgaGVyZS4KLSAqLwotI2luY2x1ZGUgImxpbnV4L2tlcm5lbC5oIgotCi0jaW5jbHVkZSAiYXNtL2FyY2gvYXRvbWljLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYml0b3BzLmggYi9pbmNsdWRlL2FzbS11bS9iaXRvcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRkMzhkNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9iaXRvcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgX19VTV9CSVRPUFNfSAotI2RlZmluZSBfX1VNX0JJVE9QU19ICi0KLSNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICi0jZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQotI2VuZGlmCi0KLSNpbmNsdWRlICJhc20vYXJjaC9iaXRvcHMuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9ib290LmggYi9pbmNsdWRlL2FzbS11bS9ib290LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NTQ4YzMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vYm9vdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fQk9PVF9ICi0jZGVmaW5lIF9fVU1fQk9PVF9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9ib290LmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYnVnLmggYi9pbmNsdWRlL2FzbS11bS9idWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUzM2I4Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9idWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX0JVR19ICi0jZGVmaW5lIF9fVU1fQlVHX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tdW0vYnl0ZW9yZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZTBhODMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vYnl0ZW9yZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9CWVRFT1JERVJfSAotI2RlZmluZSBfX1VNX0JZVEVPUkRFUl9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9ieXRlb3JkZXIuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS11bS9jYWNoZWZsdXNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZTlkNGIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vY2FjaGVmbHVzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fQ0FDSEVGTFVTSF9ICi0jZGVmaW5lIF9fVU1fQ0FDSEVGTFVTSF9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9jYWNoZWZsdXNoLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY2FsbGluZy5oIGIvaW5jbHVkZS9hc20tdW0vY2FsbGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjIzODRjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL2NhbGxpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwMyAtIDIwMDQgUGF0aHNjYWxlLCBJbmMKLSMgUmVsZWFzZWQgdW5kZXIgdGhlIEdQTAotCi0jaWZuZGVmIF9fVU1fQ0FMTElOR19IIC8qIFhYWCB4ODZfNjQgKi8KLSNkZWZpbmUgX19VTV9DQUxMSU5HX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2NhbGxpbmcuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jbXB4Y2hnLmggYi9pbmNsdWRlL2FzbS11bS9jbXB4Y2hnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOTM3NmEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vY21weGNoZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fQ01QWENIR19ICi0jZGVmaW5lIF9fVU1fQ01QWENIR19ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9jbXB4Y2hnLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY29iYWx0LmggYi9pbmNsdWRlL2FzbS11bS9jb2JhbHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgxM2E2OC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9jb2JhbHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX0NPQkFMVF9ICi0jZGVmaW5lIF9fVU1fQ09CQUxUX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2NvYmFsdC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2NwdWZlYXR1cmUuaCBiL2luY2x1ZGUvYXNtLXVtL2NwdWZlYXR1cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI3YmQ0Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9jcHVmZWF0dXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9DUFVGRUFUVVJFX0gKLSNkZWZpbmUgX19VTV9DUFVGRUFUVVJFX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2NwdWZlYXR1cmUuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9kaXY2NC5oIGIvaW5jbHVkZS9hc20tdW0vZGl2NjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUxN2Y3NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9kaXY2NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9VTV9ESVY2NF9ICi0jZGVmaW5lIF9VTV9ESVY2NF9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9kaXY2NC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2R3YXJmMi5oIGIvaW5jbHVkZS9hc20tdW0vZHdhcmYyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYTAyZTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vZHdhcmYyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0vKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDQgUGF0aHNjYWxlLCBJbmMKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0vKiBOZWVkZWQgb24geDg2XzY0IGJ5IHRodW5rLlMgKi8KLSNpZm5kZWYgX19VTV9EV0FSRjJfSAotI2RlZmluZSBfX1VNX0RXQVJGMl9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9kd2FyZjIuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lcnJuby5oIGIvaW5jbHVkZS9hc20tdW0vZXJybm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdhOWUzNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9lcnJuby5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fRVJSTk9fSAotI2RlZmluZSBfX1VNX0VSUk5PX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2Vycm5vLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZmNudGwuaCBiL2luY2x1ZGUvYXNtLXVtL2ZjbnRsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMmE2NTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vZmNudGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX0ZDTlRMX0gKLSNkZWZpbmUgX19VTV9GQ05UTF9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9mY250bC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20tdW0vZml4bWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMmJlNTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vZml4bWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0jaWZuZGVmIF9fVU1fRklYTUFQX0gKLSNkZWZpbmUgX19VTV9GSVhNQVBfSAotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNocGFyYW0uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0vKgotICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKLSAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0Ci0gKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQotICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCAgYWRkcmVzc2VzCi0gKiBmcm9tIHRoZSBlbmQgb2YgdmlydHVhbCBtZW1vcnkgKDB4ZmZmZmYwMDApIGJhY2t3YXJkcy4KLSAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCi0gKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCi0gKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCi0gKgotICogdGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQotICogZml4ZWQtc2l6ZSA0ayBwYWdlcy4gKG9yIGxhcmdlciBpZiB1c2VkIHdpdGggYW4gaW5jcmVtZW50Ci0gKiBoaWdoZ2VyIHRoYW4gMSkgdXNlIGZpeG1hcF9zZXQoaWR4LHBoeXMpIHRvIGFzc29jaWF0ZQotICogcGh5c2ljYWwgbWVtb3J5IHdpdGggZml4bWFwIGluZGljZXMuCi0gKgotICogVExCIGVudHJpZXMgb2Ygc3VjaCBidWZmZXJzIHdpbGwgbm90IGJlIGZsdXNoZWQgYWNyb3NzCi0gKiB0YXNrIHN3aXRjaGVzLgotICovCi0KLS8qCi0gKiBvbiBVUCBjdXJyZW50bHkgd2Ugd2lsbCBoYXZlIG5vIHRyYWNlIG9mIHRoZSBmaXhtYXAgbWVjaGFuaXptLAotICogbm8gcGFnZSB0YWJsZSBhbGxvY2F0aW9ucywgZXRjLiBUaGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUKLSAqIGZ1dHVyZSwgc2F5IGZyYW1lYnVmZmVycyBmb3IgdGhlIGNvbnNvbGUgZHJpdmVyKHMpIGNvdWxkIGJlCi0gKiBmaXgtbWFwcGVkPwotICovCi1lbnVtIGZpeGVkX2FkZHJlc3NlcyB7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlGSVhfS01BUF9CRUdJTiwJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KLQlGSVhfS01BUF9FTkQgPSBGSVhfS01BUF9CRUdJTisoS01fVFlQRV9OUipOUl9DUFVTKS0xLAotI2VuZGlmCi0JX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCi19OwotCi1leHRlcm4gdm9pZCBfX3NldF9maXhtYXAgKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKLQkJCSAgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7Ci0KLSNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpIFwKLQkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCi0vKgotICogU29tZSBoYXJkd2FyZSB3YW50cyB0byBnZXQgZml4bWFwcGVkIHdpdGhvdXQgY2FjaGluZy4KLSAqLwotI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSBcCi0JCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCi0vKgotICogdXNlZCBieSB2bWFsbG9jLmMuCi0gKgotICogTGVhdmUgb25lIGVtcHR5IHBhZ2UgYmV0d2VlbiB2bWFsbG9jJ2VkIGFyZWFzIGFuZAotICogdGhlIHN0YXJ0IG9mIHRoZSBmaXhtYXAsIGFuZCBsZWF2ZSBvbmUgcGFnZSBlbXB0eQotICogYXQgdGhlIHRvcCBvZiBtZW0uLgotICovCi0KLSNkZWZpbmUgRklYQUREUl9UT1AJKFRBU0tfU0laRSAtIDIgKiBQQUdFX1NJWkUpCi0jZGVmaW5lIEZJWEFERFJfU0laRQkoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIEZJWEFERFJfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQotCi0jZGVmaW5lIF9fZml4X3RvX3ZpcnQoeCkJKEZJWEFERFJfVE9QIC0gKCh4KSA8PCBQQUdFX1NISUZUKSkKLSNkZWZpbmUgX192aXJ0X3RvX2ZpeCh4KSAgICAgICgoRklYQUREUl9UT1AgLSAoKHgpJlBBR0VfTUFTSykpID4+IFBBR0VfU0hJRlQpCi0KLWV4dGVybiB2b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCk7Ci0KLS8qCi0gKiAnaW5kZXggdG8gYWRkcmVzcycgdHJhbnNsYXRpb24uIElmIGFueW9uZSB0cmllcyB0byB1c2UgdGhlIGlkeAotICogZGlyZWN0bHkgd2l0aG91dCB0cmFubGF0aW9uLCB3ZSBjYXRjaCB0aGUgYnVnIHdpdGggYSBOVUxMLWRlZmVyZW5jZQotICoga2VybmVsIG9vcHMuIElsbGVnYWwgcmFuZ2VzIG9mIGluY29taW5nIGluZGljZXMgYXJlIGNhdWdodCB0b28uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaXhfdG9fdmlydChjb25zdCB1bnNpZ25lZCBpbnQgaWR4KQotewotCS8qCi0JICogdGhpcyBicmFuY2ggZ2V0cyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQgYWZ0ZXIgaW5saW5pbmcsCi0JICogZXhjZXB0IHdoZW4gc29tZW9uZSB0cmllcyB0byB1c2UgZml4YWRkciBpbmRpY2VzIGluIGFuCi0JICogaWxsZWdhbCB3YXkuIChzdWNoIGFzIG1peGluZyB1cCBhZGRyZXNzIHR5cGVzIG9yIHVzaW5nCi0JICogb3V0LW9mLXJhbmdlIGluZGljZXMpLgotCSAqCi0JICogSWYgaXQgZG9lc24ndCBnZXQgcmVtb3ZlZCwgdGhlIGxpbmtlciB3aWxsIGNvbXBsYWluCi0JICogbG91ZGx5IHdpdGggYSByZWFzb25hYmx5IGNsZWFyIGVycm9yIG1lc3NhZ2UuLgotCSAqLwotCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKQotCQlfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KCk7Ci0KLSAgICAgICAgcmV0dXJuIF9fZml4X3RvX3ZpcnQoaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fZml4KGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFkZHIpCi17Ci0gICAgICBCVUdfT04odmFkZHIgPj0gRklYQUREUl9UT1AgfHwgdmFkZHIgPCBGSVhBRERSX1NUQVJUKTsKLSAgICAgIHJldHVybiBfX3ZpcnRfdG9fZml4KHZhZGRyKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXVtL2Zsb3BweS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTNlNzQxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL2Zsb3BweS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fRkxPUFBZX0gKLSNkZWZpbmUgX19VTV9GTE9QUFlfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvZmxvcHB5LmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZnJhbWUuaCBiL2luY2x1ZGUvYXNtLXVtL2ZyYW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOGMxY2IuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vZnJhbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX0ZSQU1FX0kKLSNkZWZpbmUgX19VTV9GUkFNRV9JCi0KLSNpbmNsdWRlICJhc20vYXJjaC9mcmFtZS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2hpZ2htZW0uaCBiL2luY2x1ZGUvYXNtLXVtL2hpZ2htZW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY5NzRjYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9oaWdobWVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9fVU1fSElHSE1FTV9ICi0jZGVmaW5lIF9fVU1fSElHSE1FTV9ICi0KLSNpbmNsdWRlICJhc20vcGFnZS5oIgotI2luY2x1ZGUgImFzbS9maXhtYXAuaCIKLSNpbmNsdWRlICJhc20vYXJjaC9oaWdobWVtLmgiCi0KLSN1bmRlZiBQS01BUF9CQVNFCi0KLSNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfU1RBUlQgLSBMQVNUX1BLTUFQICogUEFHRV9TSVpFKSAmIFBNRF9NQVNLKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LWkzODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI3Y2IwYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9ob3N0X2xkdC1pMzg2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0hPU1RfTERUX0kzODZfSAotI2RlZmluZSBfX0FTTV9IT1NUX0xEVF9JMzg2X0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2xkdC5oIgotCi0vKgotICogbWFjcm9zIHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLWkzODYvZGVzYy5oCi0gKi8KLSNkZWZpbmUgTERUX2VudHJ5X2EoaW5mbykgXAotCSgoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKChpbmZvKS0+bGltaXQgJiAweDBmZmZmKSkKLQotI2RlZmluZSBMRFRfZW50cnlfYihpbmZvKSBcCi0JKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4ZmYwMDAwMDApIHwgXAotCSgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNikgfCBcCi0JKChpbmZvKS0+bGltaXQgJiAweGYwMDAwKSB8IFwKLQkoKChpbmZvKS0+cmVhZF9leGVjX29ubHkgXiAxKSA8PCA5KSB8IFwKLQkoKGluZm8pLT5jb250ZW50cyA8PCAxMCkgfCBcCi0JKCgoaW5mbyktPnNlZ19ub3RfcHJlc2VudCBeIDEpIDw8IDE1KSB8IFwKLQkoKGluZm8pLT5zZWdfMzJiaXQgPDwgMjIpIHwgXAotCSgoaW5mbyktPmxpbWl0X2luX3BhZ2VzIDw8IDIzKSB8IFwKLQkoKGluZm8pLT51c2VhYmxlIDw8IDIwKSB8IFwKLQkweDcwMDApCi0KLSNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChcCi0JKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJiBcCi0JKGluZm8pLT5saW1pdAkJPT0gMAkmJiBcCi0JKGluZm8pLT5jb250ZW50cwk9PSAwCSYmIFwKLQkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYgXAotCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYgXAotCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJiBcCi0JKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJiBcCi0JKGluZm8pLT51c2VhYmxlCQk9PSAwCSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9ob3N0X2xkdC14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LXg4Nl82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGE2M2Y3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LXg4Nl82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9IT1NUX0xEVF9YODZfNjRfSAotI2RlZmluZSBfX0FTTV9IT1NUX0xEVF9YODZfNjRfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvbGR0LmgiCi0KLS8qCi0gKiBtYWNyb3Mgc3RvbGVuIGZyb20gaW5jbHVkZS9hc20teDg2XzY0L2Rlc2MuaAotICovCi0jZGVmaW5lIExEVF9lbnRyeV9hKGluZm8pIFwKLQkoKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDAwMGZmZmYpIDw8IDE2KSB8ICgoaW5mbyktPmxpbWl0ICYgMHgwZmZmZikpCi0KLS8qIERvbid0IGFsbG93IHNldHRpbmcgb2YgdGhlIGxtIGJpdC4gSXQgaXMgdXNlbGVzcyBhbnl3YXlzIGJlY2F1c2UKLSAqIDY0Yml0IHN5c3RlbSBjYWxscyByZXF1aXJlIF9fVVNFUl9DUy4gKi8KLSNkZWZpbmUgTERUX2VudHJ5X2IoaW5mbykgXAotCSgoKGluZm8pLT5iYXNlX2FkZHIgJiAweGZmMDAwMDAwKSB8IFwKLQkoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMGZmMDAwMCkgPj4gMTYpIHwgXAotCSgoaW5mbyktPmxpbWl0ICYgMHhmMDAwMCkgfCBcCi0JKCgoaW5mbyktPnJlYWRfZXhlY19vbmx5IF4gMSkgPDwgOSkgfCBcCi0JKChpbmZvKS0+Y29udGVudHMgPDwgMTApIHwgXAotCSgoKGluZm8pLT5zZWdfbm90X3ByZXNlbnQgXiAxKSA8PCAxNSkgfCBcCi0JKChpbmZvKS0+c2VnXzMyYml0IDw8IDIyKSB8IFwKLQkoKGluZm8pLT5saW1pdF9pbl9wYWdlcyA8PCAyMykgfCBcCi0JKChpbmZvKS0+dXNlYWJsZSA8PCAyMCkgfCBcCi0JLyogKChpbmZvKS0+bG0gPDwgMjEpIHwgKi8gXAotCTB4NzAwMCkKLQotI2RlZmluZSBMRFRfZW1wdHkoaW5mbykgKFwKLQkoaW5mbyktPmJhc2VfYWRkcgk9PSAwCSYmIFwKLQkoaW5mbyktPmxpbWl0CQk9PSAwCSYmIFwKLQkoaW5mbyktPmNvbnRlbnRzCT09IDAJJiYgXAotCShpbmZvKS0+cmVhZF9leGVjX29ubHkJPT0gMQkmJiBcCi0JKGluZm8pLT5zZWdfMzJiaXQJPT0gMAkmJiBcCi0JKGluZm8pLT5saW1pdF9pbl9wYWdlcwk9PSAwCSYmIFwKLQkoaW5mbyktPnNlZ19ub3RfcHJlc2VudAk9PSAxCSYmIFwKLQkoaW5mbyktPnVzZWFibGUJCT09IDAJJiYgXAotCShpbmZvKS0+bG0gICAgICAgICAgICAgID09IDApCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaWRlLmggYi9pbmNsdWRlL2FzbS11bS9pZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxY2NlYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX0lERV9ICi0jZGVmaW5lIF9fVU1fSURFX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2lkZS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2lvY3RsLmggYi9pbmNsdWRlL2FzbS11bS9pb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzIyMTU3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL2lvY3RsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9JT0NUTF9ICi0jZGVmaW5lIF9fVU1fSU9DVExfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvaW9jdGwuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXVtL2lvY3Rscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTFhMDE3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL2lvY3Rscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fSU9DVExTX0gKLSNkZWZpbmUgX19VTV9JT0NUTFNfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvaW9jdGxzLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaXBjYnVmLmggYi9pbmNsdWRlL2FzbS11bS9pcGNidWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyYWQzMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9pcGNidWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX0lQQ0JVRl9ICi0jZGVmaW5lIF9fVU1fSVBDQlVGX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2lwY2J1Zi5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xkdC5oIGIvaW5jbHVkZS9hc20tdW0vbGR0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYWY1MTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vbGR0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgR21iSAotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICoKLSAqIEF1dGhvcjogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAZnVqaXRzdS1zaWVtZW5zLmNvbT4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0xEVF9ICi0jZGVmaW5lIF9fQVNNX0xEVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgImFzbS9ob3N0X2xkdC5oIgotCi1leHRlcm4gdm9pZCBsZHRfaG9zdF9pbmZvKHZvaWQpOwotCi0jZGVmaW5lIExEVF9QQUdFU19NQVggXAotCSgoTERUX0VOVFJJRVMgKiBMRFRfRU5UUllfU0laRSkvUEFHRV9TSVpFKQotI2RlZmluZSBMRFRfRU5UUklFU19QRVJfUEFHRSBcCi0JKFBBR0VfU0laRS9MRFRfRU5UUllfU0laRSkKLSNkZWZpbmUgTERUX0RJUkVDVF9FTlRSSUVTIFwKLQkoKExEVF9QQUdFU19NQVgqc2l6ZW9mKHZvaWQgKikpL0xEVF9FTlRSWV9TSVpFKQotCi1zdHJ1Y3QgbGR0X2VudHJ5IHsKLQlfX3UzMiBhOwotCV9fdTMyIGI7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB1bWxfbGR0IHsKLQlpbnQgZW50cnlfY291bnQ7Ci0Jc3RydWN0IG11dGV4IGxvY2s7Ci0JdW5pb24gewotCQlzdHJ1Y3QgbGR0X2VudHJ5ICogcGFnZXNbTERUX1BBR0VTX01BWF07Ci0JCXN0cnVjdCBsZHRfZW50cnkgZW50cmllc1tMRFRfRElSRUNUX0VOVFJJRVNdOwotCX0gdTsKLX0gdW1sX2xkdF90OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RmY2UzNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9saW5rYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19BU01fVU1fTElOS0FHRV9ICi0jZGVmaW5lIF9fQVNNX1VNX0xJTktBR0VfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvbGlua2FnZS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xvY2FsLmggYi9pbmNsdWRlL2FzbS11bS9sb2NhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI4MGM1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL2xvY2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9MT0NBTF9ICi0jZGVmaW5lIF9fVU1fTE9DQUxfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvbG9jYWwuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9sb2Nrcy5oIGIvaW5jbHVkZS9hc20tdW0vbG9ja3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwMDMwYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9sb2Nrcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fTE9DS1NfSAotI2RlZmluZSBfX1VNX0xPQ0tTX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2xvY2tzLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbWNhX2RtYS5oIGIvaW5jbHVkZS9hc20tdW0vbWNhX2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDkyZTRlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL21jYV9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBtY2FfX19VTV9ETUFfSAotI2RlZmluZSBtY2FfX19VTV9ETUFfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvbWNhX2RtYS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21tYW4uaCBiL2luY2x1ZGUvYXNtLXVtL21tYW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5ZWQ1Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9tbWFuLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9NTUFOX0gKLSNkZWZpbmUgX19VTV9NTUFOX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL21tYW4uaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9tb2R1bGUtZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vbW9kdWxlLWdlbmVyaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyNjVmNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9tb2R1bGUtZ2VuZXJpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fTU9EVUxFX0dFTkVSSUNfSAotI2RlZmluZSBfX1VNX01PRFVMRV9HRU5FUklDX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL21vZHVsZS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tdW0vbXNnYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZThjMzAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vbXNnYnVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9NU0dCVUZfSAotI2RlZmluZSBfX1VNX01TR0JVRl9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9tc2didWYuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9tdHJyLmggYi9pbmNsdWRlL2FzbS11bS9tdHJyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOWNkMTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vbXRyci5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fTVRSUl9ICi0jZGVmaW5lIF9fVU1fTVRSUl9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9tdHJyLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbm9wcy5oIGIvaW5jbHVkZS9hc20tdW0vbm9wcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTRlOWJmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL25vcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX05PUFNfSAotI2RlZmluZSBfX1VNX05PUFNfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvbm9wcy5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkZjFmMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9wYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDMgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKLSAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19VTV9QQUdFX0gKLSNkZWZpbmUgX19VTV9QQUdFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+Ci0KLS8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCi0jZGVmaW5lIFBBR0VfU0hJRlQJMTIKLSNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSwgVUwpIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBwYWdlOwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vdm0tZmxhZ3MuaD4KLQotLyoKLSAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCi0gKi8KLQotI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXNldCgodm9pZCAqKShwYWdlKSwgMCwgUEFHRV9TSVpFKQotI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkJbWVtY3B5KCh2b2lkICopKHRvKSwgKHZvaWQgKikoZnJvbSksIFBBR0VfU0laRSkKLQotI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UocGFnZSwgdmFkZHIsIHBnKQljbGVhcl9wYWdlKHBhZ2UpCi0jZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCB2YWRkciwgcGcpCWNvcHlfcGFnZSh0bywgZnJvbSkKLQotI2lmIGRlZmluZWQoQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMpICYmICFkZWZpbmVkKENPTkZJR182NEJJVCkKLQotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZV9sb3csIHB0ZV9oaWdoOyB9IHB0ZV90OwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7Ci0jZGVmaW5lIHB0ZV92YWwoeCkgKCh4KS5wdGVfbG93IHwgKCh1bnNpZ25lZCBsb25nIGxvbmcpICh4KS5wdGVfaGlnaCA8PCAzMikpCi0KLSNkZWZpbmUgcHRlX2dldF9iaXRzKHB0ZSwgYml0cykgKChwdGUpLnB0ZV9sb3cgJiAoYml0cykpCi0jZGVmaW5lIHB0ZV9zZXRfYml0cyhwdGUsIGJpdHMpICgocHRlKS5wdGVfbG93IHw9IChiaXRzKSkKLSNkZWZpbmUgcHRlX2NsZWFyX2JpdHMocHRlLCBiaXRzKSAoKHB0ZSkucHRlX2xvdyAmPSB+KGJpdHMpKQotI2RlZmluZSBwdGVfY29weSh0bywgZnJvbSkgKHsgKHRvKS5wdGVfaGlnaCA9IChmcm9tKS5wdGVfaGlnaDsgXAotCQkJICAgICAgc21wX3dtYigpOyBcCi0JCQkgICAgICAodG8pLnB0ZV9sb3cgPSAoZnJvbSkucHRlX2xvdzsgfSkKLSNkZWZpbmUgcHRlX2lzX3plcm8ocHRlKSAoISgocHRlKS5wdGVfbG93ICYgfl9QQUdFX05FV1BBR0UpICYmICEocHRlKS5wdGVfaGlnaCkKLSNkZWZpbmUgcHRlX3NldF92YWwocHRlLCBwaHlzLCBwcm90KSBcCi0JKHsgKHB0ZSkucHRlX2hpZ2ggPSAocGh5cykgPj4gMzI7IFwKLQkgICAocHRlKS5wdGVfbG93ID0gKHBoeXMpIHwgcGdwcm90X3ZhbChwcm90KTsgfSkKLQotI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQotI2RlZmluZSBfX3BtZCh4KSAoKHBtZF90KSB7ICh4KSB9ICkKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgcGZuX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzX3Q7Ci0KLSNlbHNlCi0KLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7Ci10eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwotCi0jaWZkZWYgQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7Ci0jZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCi0jZGVmaW5lIF9fcG1kKHgpICgocG1kX3QpIHsgKHgpIH0gKQotI2VuZGlmCi0KLSNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKLQotCi0jZGVmaW5lIHB0ZV9nZXRfYml0cyhwLCBiaXRzKSAoKHApLnB0ZSAmIChiaXRzKSkKLSNkZWZpbmUgcHRlX3NldF9iaXRzKHAsIGJpdHMpICgocCkucHRlIHw9IChiaXRzKSkKLSNkZWZpbmUgcHRlX2NsZWFyX2JpdHMocCwgYml0cykgKChwKS5wdGUgJj0gfihiaXRzKSkKLSNkZWZpbmUgcHRlX2NvcHkodG8sIGZyb20pICgodG8pLnB0ZSA9IChmcm9tKS5wdGUpCi0jZGVmaW5lIHB0ZV9pc196ZXJvKHApICghKChwKS5wdGUgJiB+X1BBR0VfTkVXUEFHRSkpCi0jZGVmaW5lIHB0ZV9zZXRfdmFsKHAsIHBoeXMsIHByb3QpIChwKS5wdGUgPSAocGh5cyB8IHBncHJvdF92YWwocHJvdCkpCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwZm5fdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX3Q7Ci0KLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwotCi10eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7Ci0KLSNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKLSNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKLQotI2RlZmluZSBfX3B0ZSh4KSAoKHB0ZV90KSB7ICh4KSB9ICkKLSNkZWZpbmUgX19wZ2QoeCkgKChwZ2RfdCkgeyAoeCkgfSApCi0jZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQotCi1leHRlcm4gdW5zaWduZWQgbG9uZyB1bWxfcGh5c21lbTsKLQotI2RlZmluZSBQQUdFX09GRlNFVCAodW1sX3BoeXNtZW0pCi0jZGVmaW5lIEtFUk5FTEJBU0UgUEFHRV9PRkZTRVQKLQotI2RlZmluZSBfX3ZhX3NwYWNlICg4KjEwMjQqMTAyNCkKLQotI2luY2x1ZGUgIm1lbS5oIgotCi0vKiBDYXN0IHRvIHVuc2lnbmVkIGxvbmcgYmVmb3JlIGNhc3RpbmcgdG8gdm9pZCAqIHRvIGF2b2lkIGEgd2FybmluZyBmcm9tCi0gKiBtbWFwX2ttZW0gYWJvdXQgY3V0dGluZyBhIGxvbmcgbG9uZyBkb3duIHRvIGEgdm9pZCAqLiAgTm90IHN1cmUgdGhhdAotICogY2FzdGluZyBpcyB0aGUgcmlnaHQgdGhpbmcsIGJ1dCAzMi1iaXQgVU1MIGNhbid0IGhhdmUgNjQtYml0IHZpcnR1YWwKLSAqIGFkZHJlc3NlcwotICovCi0jZGVmaW5lIF9fcGEodmlydCkgdG9fcGh5cygodm9pZCAqKSAodW5zaWduZWQgbG9uZykgKHZpcnQpKQotI2RlZmluZSBfX3ZhKHBoeXMpIHRvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpIChwaHlzKSkKLQotI2RlZmluZSBwaHlzX3RvX3BmbihwKSAoKHBmbl90KSAoKHApID4+IFBBR0VfU0hJRlQpKQotI2RlZmluZSBwZm5fdG9fcGh5cyhwZm4pICgocGh5c190KSAoKHBmbikgPDwgUEFHRV9TSElGVCkpCi0KLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgKChwZm4pIDwgbWF4X21hcG5yKQotI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQodikgcGZuX3ZhbGlkKHBoeXNfdG9fcGZuKF9fcGEodikpKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgotCi0jZW5kaWYJLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYJLyogX19VTV9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BhcmF2aXJ0LmggYi9pbmNsdWRlL2FzbS11bS9wYXJhdmlydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDZhYWFkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3BhcmF2aXJ0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9QQVJBVklSVF9ICi0jZGVmaW5lIF9fVU1fUEFSQVZJUlRfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvcGFyYXZpcnQuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXVtL3BlcmNwdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzIzZTJhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3BlcmNwdS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fUEVSQ1BVX0gKLSNkZWZpbmUgX19VTV9QRVJDUFVfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvcGVyY3B1LmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmRiODFiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQotICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCi0gKiBEZXJpdmVkIGZyb20gaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaWZuZGVmIF9fVU1fUEdUQUJMRV9ICi0jZGVmaW5lIF9fVU1fUEdUQUJMRV9ICi0KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMQotI2RlZmluZSBfUEFHRV9ORVdQQUdFCTB4MDAyCi0jZGVmaW5lIF9QQUdFX05FV1BST1QJMHgwMDQKLSNkZWZpbmUgX1BBR0VfUlcJMHgwMjAKLSNkZWZpbmUgX1BBR0VfVVNFUgkweDA0MAotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDA4MAotI2RlZmluZSBfUEFHRV9ESVJUWQkweDEwMAotLyogSWYgX1BBR0VfUFJFU0VOVCBpcyBjbGVhciwgd2UgdXNlIHRoZXNlOiAqLwotI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA4CS8qIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcsIHNhdmVkIFBURTsgdW5zZXQ6c3dhcCAqLwotI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkweDAxMAkvKiBpZiB0aGUgdXNlciBtYXBwZWQgaXQgd2l0aCBQUk9UX05PTkU7Ci0JCQkJICAgcHRlX3ByZXNlbnQgZ2l2ZXMgdHJ1ZSAqLwotCi0jaWZkZWYgQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMKLSNpbmNsdWRlICJhc20vcGd0YWJsZS0zbGV2ZWwuaCIKLSNlbHNlCi0jaW5jbHVkZSAiYXNtL3BndGFibGUtMmxldmVsLmgiCi0jZW5kaWYKLQotZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07Ci0KLS8qIHplcm8gcGFnZSB1c2VkIGZvciB1bmluaXRpYWxpemVkIHN0dWZmICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyAqZW1wdHlfemVyb19wYWdlOwotCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpIGRvIDsgd2hpbGUgKDApCi0KLS8qIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX2lvbWVtOwotCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCShfX3ZhX3NwYWNlKQotI2RlZmluZSBWTUFMTE9DX1NUQVJUICgoZW5kX2lvbWVtICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotIyBkZWZpbmUgVk1BTExPQ19FTkQJKFBLTUFQX0JBU0UtMipQQUdFX1NJWkUpCi0jZWxzZQotIyBkZWZpbmUgVk1BTExPQ19FTkQJKEZJWEFERFJfU1RBUlQtMipQQUdFX1NJWkUpCi0jZW5kaWYKLQotI2RlZmluZSBfUEFHRV9UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCi0jZGVmaW5lIF9LRVJOUEdfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQotCi0jZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCi0jZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQotI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCi0jZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQpCi0KLS8qCi0gKiBUaGUgaTM4NiBjYW4ndCBkbyBwYWdlIHByb3RlY3Rpb24gZm9yIGV4ZWN1dGUsIGFuZCBjb25zaWRlcnMgdGhhdCB0aGUgc2FtZQotICogYXJlIHJlYWQuCi0gKiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLiBUaGlzIGlzIHRoZSBjbG9zZXN0IHdlIGNhbgotICogZ2V0Li4KLSAqLwotI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQotI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDExMQlQQUdFX0NPUFkKLQotI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRAotCi0vKgotICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKLSAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KLSAqLwotI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpIHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpCi0KLSNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIseHApIHB0ZV9zZXRfdmFsKCooeHApLCAocGh5c190KSAwLCBfX3BncHJvdChfUEFHRV9ORVdQQUdFKSkKLQotI2RlZmluZSBwbWRfbm9uZSh4KQkoISgodW5zaWduZWQgbG9uZylwbWRfdmFsKHgpICYgfl9QQUdFX05FV1BBR0UpKQotI2RlZmluZQlwbWRfYmFkKHgpCSgocG1kX3ZhbCh4KSAmICh+UEFHRV9NQVNLICYgfl9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFKQotCi0jZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKLSNkZWZpbmUgcG1kX2NsZWFyKHhwKQlkbyB7IHBtZF92YWwoKih4cCkpID0gX1BBR0VfTkVXUEFHRTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBwbWRfbmV3cGFnZSh4KSAgKHBtZF92YWwoeCkgJiBfUEFHRV9ORVdQQUdFKQotI2RlZmluZSBwbWRfbWt1cHRvZGF0ZSh4KSAocG1kX3ZhbCh4KSAmPSB+X1BBR0VfTkVXUEFHRSkKLQotI2RlZmluZSBwdWRfbmV3cGFnZSh4KSAgKHB1ZF92YWwoeCkgJiBfUEFHRV9ORVdQQUdFKQotI2RlZmluZSBwdWRfbWt1cHRvZGF0ZSh4KSAocHVkX3ZhbCh4KSAmPSB+X1BBR0VfTkVXUEFHRSkKLQotI2RlZmluZSBwbWRfcGFnZShwbWQpIHBoeXNfdG9fcGFnZShwbWRfdmFsKHBtZCkgJiBQQUdFX01BU0spCi0KLSNkZWZpbmUgcHRlX3BhZ2UoeCkgcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKLQotI2RlZmluZSBwdGVfcHJlc2VudCh4KQlwdGVfZ2V0X2JpdHMoeCwgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZsYWdzIGNoZWNraW5nIHNlY3Rpb24uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV9pc196ZXJvKHB0ZSk7Ci19Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCi0gKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkKLXsgCi0JcmV0dXJuKChwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9VU0VSKSkgJiYKLQkgICAgICAgIShwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9QUk9UTk9ORSkpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHRlX2V4ZWMocHRlX3QgcHRlKXsKLQlyZXR1cm4oKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1VTRVIpKSAmJgotCSAgICAgICAhKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1BST1ROT05FKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQotewotCXJldHVybigocHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfUlcpKSAmJgotCSAgICAgICAhKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1BST1ROT05FKSkpOwotfQotCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmtzIGlmIHB0ZV9wcmVzZW50KCkgaXMgbm90IHRydWUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfRklMRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX0RJUlRZKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfQUNDRVNTRUQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfbmV3cGFnZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX05FV1BBR0UpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfbmV3cHJvdChwdGVfdCBwdGUpCi17IAotCXJldHVybihwdGVfcHJlc2VudChwdGUpICYmIChwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9ORVdQUk9UKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZsYWdzIHNldHRpbmcgc2VjdGlvbi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rbmV3cHJvdChwdGVfdCBwdGUpCi17Ci0JcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfTkVXUFJPVCk7Ci0JcmV0dXJuKHB0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQotewotCXB0ZV9jbGVhcl9iaXRzKHB0ZSwgX1BBR0VfRElSVFkpOwotCXJldHVybihwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCQoteyAKLQlwdGVfY2xlYXJfYml0cyhwdGUsIF9QQUdFX0FDQ0VTU0VEKTsKLQlyZXR1cm4ocHRlKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKLXsgCi0JcHRlX2NsZWFyX2JpdHMocHRlLCBfUEFHRV9SVyk7Ci0JcmV0dXJuKHB0ZV9ta25ld3Byb3QocHRlKSk7IAotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKQoteyAKLQlwdGVfc2V0X2JpdHMocHRlLCBfUEFHRV9VU0VSKTsKLQlyZXR1cm4ocHRlX21rbmV3cHJvdChwdGUpKTsgCi19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQoteyAKLQlwdGVfc2V0X2JpdHMocHRlLCBfUEFHRV9ESVJUWSk7Ci0JcmV0dXJuKHB0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQotewotCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX0FDQ0VTU0VEKTsKLQlyZXR1cm4ocHRlKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCQotewotCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX1JXKTsKLQlyZXR1cm4ocHRlX21rbmV3cHJvdChwdGUpKTsgCi19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rdXB0b2RhdGUocHRlX3QgcHRlKQkKLXsKLQlwdGVfY2xlYXJfYml0cyhwdGUsIF9QQUdFX05FV1BBR0UpOwotCWlmKHB0ZV9wcmVzZW50KHB0ZSkpCi0JCXB0ZV9jbGVhcl9iaXRzKHB0ZSwgX1BBR0VfTkVXUFJPVCk7Ci0JcmV0dXJuKHB0ZSk7IAotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta25ld3BhZ2UocHRlX3QgcHRlKQotewotCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX05FV1BBR0UpOwotCXJldHVybihwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKQotewotCXJldHVybihwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcHRyLCBwdGVfdCBwdGV2YWwpCi17Ci0JcHRlX2NvcHkoKnB0ZXB0ciwgcHRldmFsKTsKLQotCS8qIElmIGl0J3MgYSBzd2FwIGVudHJ5LCBpdCBuZWVkcyB0byBiZSBtYXJrZWQgX1BBR0VfTkVXUEFHRSBzbwotCSAqIGZpeF9yYW5nZSBrbm93cyB0byB1bm1hcCBpdC4gIF9QQUdFX05FV1BST1QgaXMgc3BlY2lmaWMgdG8KLQkgKiBtYXBwZWQgcGFnZXMuCi0JICovCi0KLQkqcHRlcHRyID0gcHRlX21rbmV3cGFnZSgqcHRlcHRyKTsKLQlpZihwdGVfcHJlc2VudCgqcHRlcHRyKSkgKnB0ZXB0ciA9IHB0ZV9ta25ld3Byb3QoKnB0ZXB0cik7Ci19Ci0jZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKLQotLyoKLSAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCi0gKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgotICovCi0KLSNkZWZpbmUgcGh5c190b19wYWdlKHBoeXMpIHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKHBoeXMpKQotI2RlZmluZSBfX3ZpcnRfdG9fcGFnZSh2aXJ0KSBwaHlzX3RvX3BhZ2UoX19wYSh2aXJ0KSkKLSNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpIHBmbl90b19waHlzKChwZm5fdCkgcGFnZV90b19wZm4ocGFnZSkpCi0jZGVmaW5lIHZpcnRfdG9fcGFnZShhZGRyKSBfX3ZpcnRfdG9fcGFnZSgoY29uc3QgdW5zaWduZWQgbG9uZykgYWRkcikKLQotI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KSBcCi0JKHsgcHRlX3QgcHRlOwkJCQkJXAotCQkJCQkJCVwKLQlwdGVfc2V0X3ZhbChwdGUsIHBhZ2VfdG9fcGh5cyhwYWdlKSwgKHBncHJvdCkpOwlcCi0JaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCQkJCVwKLQkJcHRlX21rbmV3cHJvdChwdGVfbWtuZXdwYWdlKHB0ZSkpOwlcCi0JcHRlO30pCi0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCi17Ci0JcHRlX3NldF92YWwocHRlLCAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spLCBuZXdwcm90KTsKLQlyZXR1cm4gcHRlOyAKLX0KLQotLyoKLSAqIHRoZSBwZ2QgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHBnZF90W1BUUlNfUEVSX1BHRF0KLSAqCi0gKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcGdkIHBhZ2Ugd2hpY2ggd291bGQKLSAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcwotICovCi0jZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdELTEpKQotCi0vKgotICogcGdkX29mZnNldCgpIHJldHVybnMgYSAocGdkX3QgKikKLSAqIHBnZF9pbmRleCgpIGlzIHVzZWQgZ2V0IHRoZSBvZmZzZXQgaW50byB0aGUgcGdkIHBhZ2UncyBhcnJheSBvZiBwZ2RfdCdzOwotICovCi0jZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpICgobW0pLT5wZ2QrcGdkX2luZGV4KGFkZHJlc3MpKQotCi0vKgotICogYSBzaG9ydGN1dCB3aGljaCBpbXBsaWVzIHRoZSB1c2Ugb2YgdGhlIGtlcm5lbCdzIHBnZCwgaW5zdGVhZAotICogb2YgYSBwcm9jZXNzJ3MKLSAqLwotI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKLQotLyoKLSAqIHRoZSBwbWQgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHBtZF90W1BUUlNfUEVSX1BNRF0KLSAqCi0gKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcG1kIHBhZ2Ugd2hpY2ggd291bGQKLSAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcwotICovCi0jZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykpCi0jZGVmaW5lIHBtZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSkKLQotI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpIFwKLQkoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKLQotLyoKLSAqIHRoZSBwdGUgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHB0ZV90W1BUUlNfUEVSX1BURV0KLSAqCi0gKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcHRlIHBhZ2Ugd2hpY2ggd291bGQKLSAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcwotICovCi0jZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKLSNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSBcCi0JKChwdGVfdCAqKSBwbWRfcGFnZV92YWRkcigqKGRpcikpICsgIHB0ZV9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSBcCi0JKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQotI2RlZmluZSBwdGVfdW5tYXAocHRlKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBkbyB7IH0gd2hpbGUgKDApCi0KLXN0cnVjdCBtbV9zdHJ1Y3Q7Ci1leHRlcm4gcHRlX3QgKnZpcnRfdG9fcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHJlc3MscHRlKSBkbyA7IHdoaWxlICgwKQotCi0vKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCi0jZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gNCkgJiAweDNmKQotI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiAxMSkKLQotI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpIFwKLQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgNCkgfCAoKG9mZnNldCkgPDwgMTEpIH0pCi0jZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpIFwKLQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlX21rdXB0b2RhdGUocHRlKSkgfSkKLSNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKLQotI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikgKDEpCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcG9sbC5oIGIvaW5jbHVkZS9hc20tdW0vcG9sbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWI0ZTFiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3BvbGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1BPTExfSAotI2RlZmluZSBfX1VNX1BPTExfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvcG9sbC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS11bS9wb3NpeF90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmZiNDE5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3Bvc2l4X3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9QT1NJWF9UWVBFU19ICi0jZGVmaW5lIF9fVU1fUE9TSVhfVFlQRVNfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvcG9zaXhfdHlwZXMuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcmN0bC5oIGIvaW5jbHVkZS9hc20tdW0vcHJjdGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiNmQwOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9wcmN0bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fUFJDVExfSAotI2RlZmluZSBfX1VNX1BSQ1RMX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3ByY3RsLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1pMzg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYjdmZTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWkzODYuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19VTV9QUk9DRVNTT1JfSTM4Nl9ICi0jZGVmaW5lIF9fVU1fUFJPQ0VTU09SX0kzODZfSAotCi0jaW5jbHVkZSAibGludXgvc3RyaW5nLmgiCi0jaW5jbHVkZSAiYXNtL2hvc3RfbGR0LmgiCi0jaW5jbHVkZSAiYXNtL3NlZ21lbnQuaCIKLQotZXh0ZXJuIGludCBob3N0X2hhc19jbW92OwotCi0vKiBpbmNsdWRlIGZhdWx0aW5mbyBzdHJ1Y3R1cmUgKi8KLSNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCi0KLXN0cnVjdCB1bWxfdGxzX3N0cnVjdCB7Ci0Jc3RydWN0IHVzZXJfZGVzYyB0bHM7Ci0JdW5zaWduZWQgZmx1c2hlZDoxOwotCXVuc2lnbmVkIHByZXNlbnQ6MTsKLX07Ci0KLXN0cnVjdCBhcmNoX3RocmVhZCB7Ci0Jc3RydWN0IHVtbF90bHNfc3RydWN0IHRsc19hcnJheVtHRFRfRU5UUllfVExTX0VOVFJJRVNdOwotCXVuc2lnbmVkIGxvbmcgZGVidWdyZWdzWzhdOwotCWludCBkZWJ1Z3JlZ3Nfc2VxOwotCXN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOwotfTsKLQotI2RlZmluZSBJTklUX0FSQ0hfVEhSRUFEIHsgXAotCS50bHNfYXJyYXkgIAkJPSB7IFsgMCAuLi4gR0RUX0VOVFJZX1RMU19FTlRSSUVTIC0gMSBdID0gXAotCQkJCSAgICB7IC5wcmVzZW50ID0gMCwgLmZsdXNoZWQgPSAwIH0gfSwgXAotCS5kZWJ1Z3JlZ3MgIAkJPSB7IFsgMCAuLi4gNyBdID0gMCB9LCBcCi0JLmRlYnVncmVnc19zZXEJCT0gMCwgXAotCS5mYXVsdGluZm8JCT0geyAwLCAwLCAwIH0gXAotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mbHVzaF90aHJlYWQoc3RydWN0IGFyY2hfdGhyZWFkICp0aHJlYWQpCi17Ci0JLyogQ2xlYXIgYW55IFRMUyBzdGlsbCBoYW5naW5nICovCi0JbWVtc2V0KCZ0aHJlYWQtPnRsc19hcnJheSwgMCwgc2l6ZW9mKHRocmVhZC0+dGxzX2FycmF5KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NvcHlfdGhyZWFkKHN0cnVjdCBhcmNoX3RocmVhZCAqZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmNoX3RocmVhZCAqdG8pCi17Ci0gICAgICAgIG1lbWNweSgmdG8tPnRsc19hcnJheSwgJmZyb20tPnRsc19hcnJheSwgc2l6ZW9mKGZyb20tPnRsc19hcnJheSkpOwotfQotCi0jaW5jbHVkZSAiYXNtL2FyY2gvdXNlci5oIgotCi0vKiBSRVAgTk9QIChQQVVTRSkgaXMgYSBnb29kIHRoaW5nIHRvIGluc2VydCBpbnRvIGJ1c3ktd2FpdCBsb29wcy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBfbm9wKHZvaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInJlcDtub3AiOiA6IDoibWVtb3J5Iik7Ci19Ci0KLSNkZWZpbmUgY3B1X3JlbGF4KCkJcmVwX25vcCgpCi0KLS8qCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50Ci0gKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuIFN0b2xlbgotICogZnJvbSBhc20taTM4Ni9wcm9jZXNzb3IuaAotICovCi0jZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgXAotCSh7IHZvaWQgKnBjOyBfX2FzbV9fKCJtb3ZsICQxZiwlMFxuMToiOiI9ZyIgKHBjKSk7IHBjOyB9KQotCi0jZGVmaW5lIEFSQ0hfSVNfU1RBQ0tHUk9XKGFkZHJlc3MpIFwKLSAgICAgICAoYWRkcmVzcyArIDMyID49IFVQVF9TUCgmY3VycmVudC0+dGhyZWFkLnJlZ3MucmVncykpCi0KLSNkZWZpbmUgS1NUS19FSVAodHNrKSBLU1RLX1JFRyh0c2ssIEVJUCkKLSNkZWZpbmUgS1NUS19FU1AodHNrKSBLU1RLX1JFRyh0c2ssIFVFU1ApCi0jZGVmaW5lIEtTVEtfRUJQKHRzaykgS1NUS19SRUcodHNrLCBFQlApCi0KLSNpbmNsdWRlICJhc20vcHJvY2Vzc29yLWdlbmVyaWMuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3IteDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3IteDg2XzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MDkzMzEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLXg4Nl82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaWZuZGVmIF9fVU1fUFJPQ0VTU09SX1g4Nl82NF9ICi0jZGVmaW5lIF9fVU1fUFJPQ0VTU09SX1g4Nl82NF9ICi0KLS8qIGluY2x1ZGUgZmF1bHRpbmZvIHN0cnVjdHVyZSAqLwotI2luY2x1ZGUgInN5c2RlcC9mYXVsdGluZm8uaCIKLQotc3RydWN0IGFyY2hfdGhyZWFkIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBkZWJ1Z3JlZ3NbOF07Ci0gICAgICAgIGludCBkZWJ1Z3JlZ3Nfc2VxOwotICAgICAgICB1bnNpZ25lZCBsb25nIGZzOwotICAgICAgICBzdHJ1Y3QgZmF1bHRpbmZvIGZhdWx0aW5mbzsKLX07Ci0KLS8qIFJFUCBOT1AgKFBBVVNFKSBpcyBhIGdvb2QgdGhpbmcgdG8gaW5zZXJ0IGludG8gYnVzeS13YWl0IGxvb3BzLiAqLwotc3RhdGljIGlubGluZSB2b2lkIHJlcF9ub3Aodm9pZCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwO25vcCI6IDogOiJtZW1vcnkiKTsKLX0KLQotI2RlZmluZSBjcHVfcmVsYXgoKSAgIHJlcF9ub3AoKQotCi0jZGVmaW5lIElOSVRfQVJDSF9USFJFQUQgeyAuZGVidWdyZWdzICAJCT0geyBbIDAgLi4uIDcgXSA9IDAgfSwgXAotCQkJICAgLmRlYnVncmVnc19zZXEJPSAwLCBcCi0JCQkgICAuZnMJCQk9IDAsIFwKLQkJCSAgIC5mYXVsdGluZm8JCT0geyAwLCAwLCAwIH0gfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mbHVzaF90aHJlYWQoc3RydWN0IGFyY2hfdGhyZWFkICp0aHJlYWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NvcHlfdGhyZWFkKHN0cnVjdCBhcmNoX3RocmVhZCAqZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmNoX3RocmVhZCAqdG8pCi17Ci0JdG8tPmZzID0gZnJvbS0+ZnM7Ci19Ci0KLSNpbmNsdWRlICJhc20vYXJjaC91c2VyLmgiCi0KLSNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSBcCi0JKHsgdm9pZCAqcGM7IF9fYXNtX18oIm1vdnEgJDFmLCUwXG4xOiI6Ij1nIiAocGMpKTsgcGM7IH0pCi0KLSNkZWZpbmUgQVJDSF9JU19TVEFDS0dST1coYWRkcmVzcykgXAotICAgICAgICAoYWRkcmVzcyArIDEyOCA+PSBVUFRfU1AoJmN1cnJlbnQtPnRocmVhZC5yZWdzLnJlZ3MpKQotCi0jZGVmaW5lIEtTVEtfRUlQKHRzaykgS1NUS19SRUcodHNrLCBSSVApCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykgS1NUS19SRUcodHNrLCBSU1ApCi0KLSNpbmNsdWRlICJhc20vcHJvY2Vzc29yLWdlbmVyaWMuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1NzQ5Ny4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaWZuZGVmIF9fVU1fUFRSQUNFX0dFTkVSSUNfSAotI2RlZmluZSBfX1VNX1BUUkFDRV9HRU5FUklDX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgImFzbS9hcmNoL3B0cmFjZS1hYmkuaCIKLSNpbmNsdWRlIDxhc20vdXNlci5oPgotI2luY2x1ZGUgInN5c2RlcC9wdHJhY2UuaCIKLQotc3RydWN0IHB0X3JlZ3MgewotCXN0cnVjdCB1bWxfcHRfcmVncyByZWdzOwotfTsKLQotI2RlZmluZSBFTVBUWV9SRUdTIHsgLnJlZ3MgPSBFTVBUWV9VTUxfUFRfUkVHUyB9Ci0KLSNkZWZpbmUgUFRfUkVHU19JUChyKSBVUFRfSVAoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19TUChyKSBVUFRfU1AoJihyKS0+cmVncykKLQotI2RlZmluZSBQVF9SRUcociwgcmVnKSBVUFRfUkVHKCYociktPnJlZ3MsIHJlZykKLSNkZWZpbmUgUFRfUkVHU19TRVQociwgcmVnLCB2YWwpIFVQVF9TRVQoJihyKS0+cmVncywgcmVnLCB2YWwpCi0KLSNkZWZpbmUgUFRfUkVHU19TRVRfU1lTQ0FMTF9SRVRVUk4ociwgcmVzKSBcCi0JVVBUX1NFVF9TWVNDQUxMX1JFVFVSTigmKHIpLT5yZWdzLCByZXMpCi0jZGVmaW5lIFBUX1JFR1NfUkVTVEFSVF9TWVNDQUxMKHIpIFVQVF9SRVNUQVJUX1NZU0NBTEwoJihyKS0+cmVncykKLQotI2RlZmluZSBQVF9SRUdTX1NZU0NBTExfTlIocikgVVBUX1NZU0NBTExfTlIoJihyKS0+cmVncykKLQotI2RlZmluZSBQVF9SRUdTX1NDKHIpIFVQVF9TQygmKHIpLT5yZWdzKQotCi0jZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgUFRfUkVHU19JUChyZWdzKQotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KLWV4dGVybiBsb25nIHN1YmFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLAotCQkJICAgbG9uZyBkYXRhKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdldHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgcmVnbm8pOwotZXh0ZXJuIGludCBwdXRyZWcoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IHJlZ25vLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKLWV4dGVybiBpbnQgZ2V0X2ZwcmVncyhzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKmJ1ZiwKLQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7Ci1leHRlcm4gaW50IHNldF9mcHJlZ3Moc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgX191c2VyICpidWYsCi0JCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwotCi1leHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi1leHRlcm4gaW50IGFyY2hfY29weV90bHMoc3RydWN0IHRhc2tfc3RydWN0ICpuZXcpOwotZXh0ZXJuIHZvaWQgY2xlYXJfZmx1c2hlZF90bHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1pMzg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZDI0YzVlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1pMzg2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19VTV9QVFJBQ0VfSTM4Nl9ICi0jZGVmaW5lIF9fVU1fUFRSQUNFX0kzODZfSAotCi0jZGVmaW5lIEhPU1RfQVVESVRfQVJDSCBBVURJVF9BUkNIX0kzODYKLQotI2luY2x1ZGUgImxpbnV4L2NvbXBpbGVyLmgiCi0jaW5jbHVkZSAiYXNtL3B0cmFjZS1nZW5lcmljLmgiCi0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KLSNpbmNsdWRlICJzeXNkZXAvcHRyYWNlLmgiCi0KLSNkZWZpbmUgUFRfUkVHU19FQVgocikgVVBUX0VBWCgmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX0VCWChyKSBVUFRfRUJYKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfRUNYKHIpIFVQVF9FQ1goJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19FRFgocikgVVBUX0VEWCgmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX0VTSShyKSBVUFRfRVNJKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfRURJKHIpIFVQVF9FREkoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19FQlAocikgVVBUX0VCUCgmKHIpLT5yZWdzKQotCi0jZGVmaW5lIFBUX1JFR1NfQ1MocikgVVBUX0NTKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfU1MocikgVVBUX1NTKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfRFMocikgVVBUX0RTKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfRVMocikgVVBUX0VTKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfRlMocikgVVBUX0ZTKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfR1MocikgVVBUX0dTKCYociktPnJlZ3MpCi0KLSNkZWZpbmUgUFRfUkVHU19FRkxBR1MocikgVVBUX0VGTEFHUygmKHIpLT5yZWdzKQotCi0jZGVmaW5lIFBUX1JFR1NfT1JJR19TWVNDQUxMKHIpIFBUX1JFR1NfRUFYKHIpCi0jZGVmaW5lIFBUX1JFR1NfU1lTQ0FMTF9SRVQocikgUFRfUkVHU19FQVgocikKLSNkZWZpbmUgUFRfRklYX0VYRUNfU1RBQ0soc3ApIGRvIDsgd2hpbGUoMCkKLQotLyogQ29wZSB3aXRoIGEgY29uZGl0aW9uYWwgaTM4NiBkZWZpbml0aW9uLiAqLwotI3VuZGVmIHByb2ZpbGVfcGMKLSNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBQVF9SRUdTX0lQKHJlZ3MpCi0KLSNkZWZpbmUgdXNlcl9tb2RlKHIpIFVQVF9JU19VU0VSKCYociktPnJlZ3MpCi0KLS8qCi0gKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGF2b2lkIGluY2x1ZGluZyBzeXNkZXAvdGxzLmgsIHdoaWNoIGNhdXNlcyBhCi0gKiBjaXJjdWxhciBpbmNsdWRlLCBhbmQgY29tcGlsYXRpb24gZmFpbHVyZXMuCi0gKi8KLXN0cnVjdCB1c2VyX2Rlc2M7Ci0KLWV4dGVybiBpbnQgZ2V0X2ZweHJlZ3Moc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpidWYsCi0JCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKLWV4dGVybiBpbnQgc2V0X2ZweHJlZ3Moc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpidWYsCi0JCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7Ci0KLWV4dGVybiBpbnQgcHRyYWNlX2dldF90aHJlYWRfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2VyX2Rlc2MgX191c2VyICp1c2VyX2Rlc2MpOwotCi1leHRlcm4gaW50IHB0cmFjZV9zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqdXNlcl9kZXNjKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNDc1MzUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLXg4Nl82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaWZuZGVmIF9fVU1fUFRSQUNFX1g4Nl82NF9ICi0jZGVmaW5lIF9fVU1fUFRSQUNFX1g4Nl82NF9ICi0KLSNpbmNsdWRlICJsaW51eC9jb21waWxlci5oIgotI2luY2x1ZGUgImFzbS9lcnJuby5oIgotI2luY2x1ZGUgImFzbS9ob3N0X2xkdC5oIgotCi0jZGVmaW5lIF9fRlJBTUVfT0ZGU0VUUyAvKiBOZWVkZWQgdG8gZ2V0IHRoZSBSKiBtYWNyb3MgKi8KLSNpbmNsdWRlICJhc20vcHRyYWNlLWdlbmVyaWMuaCIKLQotI2RlZmluZSBIT1NUX0FVRElUX0FSQ0ggQVVESVRfQVJDSF9YODZfNjQKLQotLyogQWxzbyBkZWZpbmVkIGluIHN5c2RlcC9wdHJhY2UuaCwgc28gbWF5IGFscmVhZHkgYmUgZGVmaW5lZC4gKi8KLSNpZm5kZWYgRlNfQkFTRQotI2RlZmluZSBGU19CQVNFICgyMSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLSNkZWZpbmUgR1NfQkFTRSAoMjIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCi0jZGVmaW5lIERTICgyMyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLSNkZWZpbmUgRVMgKDI0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotI2RlZmluZSBGUyAoMjUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCi0jZGVmaW5lIEdTICgyNiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLSNlbmRpZgotCi0jZGVmaW5lIFBUX1JFR1NfUkJYKHIpIFVQVF9SQlgoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19SQ1gocikgVVBUX1JDWCgmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX1JEWChyKSBVUFRfUkRYKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfUlNJKHIpIFVQVF9SU0koJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19SREkocikgVVBUX1JESSgmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX1JCUChyKSBVUFRfUkJQKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfUkFYKHIpIFVQVF9SQVgoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19SOChyKSBVUFRfUjgoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19SOShyKSBVUFRfUjkoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19SMTAocikgVVBUX1IxMCgmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX1IxMShyKSBVUFRfUjExKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfUjEyKHIpIFVQVF9SMTIoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19SMTMocikgVVBUX1IxMygmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX1IxNChyKSBVUFRfUjE0KCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfUjE1KHIpIFVQVF9SMTUoJihyKS0+cmVncykKLQotI2RlZmluZSBQVF9SRUdTX0ZTKHIpIFVQVF9GUygmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX0dTKHIpIFVQVF9HUygmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX0RTKHIpIFVQVF9EUygmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX0VTKHIpIFVQVF9FUygmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX1NTKHIpIFVQVF9TUygmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX0NTKHIpIFVQVF9DUygmKHIpLT5yZWdzKQotCi0jZGVmaW5lIFBUX1JFR1NfT1JJR19SQVgocikgVVBUX09SSUdfUkFYKCYociktPnJlZ3MpCi0jZGVmaW5lIFBUX1JFR1NfUklQKHIpIFVQVF9JUCgmKHIpLT5yZWdzKQotI2RlZmluZSBQVF9SRUdTX1JTUChyKSBVUFRfU1AoJihyKS0+cmVncykKLQotI2RlZmluZSBQVF9SRUdTX0VGTEFHUyhyKSBVUFRfRUZMQUdTKCYociktPnJlZ3MpCi0KLS8qIFhYWCAqLwotI2RlZmluZSB1c2VyX21vZGUocikgVVBUX0lTX1VTRVIoJihyKS0+cmVncykKLSNkZWZpbmUgUFRfUkVHU19PUklHX1NZU0NBTEwocikgUFRfUkVHU19SQVgocikKLSNkZWZpbmUgUFRfUkVHU19TWVNDQUxMX1JFVChyKSBQVF9SRUdTX1JBWChyKQotCi0jZGVmaW5lIFBUX0ZJWF9FWEVDX1NUQUNLKHNwKSBkbyA7IHdoaWxlKDApCi0KLSNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBQVF9SRUdTX0lQKHJlZ3MpCi0KLXN0YXRpYyBpbmxpbmUgaW50IHB0cmFjZV9nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVzZXJfZGVzYykKLXsKLSAgICAgICAgcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB0cmFjZV9zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVzZXJfZGVzYykKLXsKLSAgICAgICAgcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWV4dGVybiBsb25nIGFyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyICphZGRyKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLXVtL3Jlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YjA3NDAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vcmVzb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1JFU09VUkNFX0gKLSNkZWZpbmUgX19VTV9SRVNPVVJDRV9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9yZXNvdXJjZS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3J3bG9jay5oIGIvaW5jbHVkZS9hc20tdW0vcndsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMzgzYWEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vcndsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9SV0xPQ0tfSAotI2RlZmluZSBfX1VNX1JXTE9DS19ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9yd2xvY2suaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9yd3NlbS5oIGIvaW5jbHVkZS9hc20tdW0vcndzZW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVmYzQ0OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9yd3NlbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fUldTRU1fSF9fCi0jZGVmaW5lIF9fVU1fUldTRU1fSF9fCi0KLSNpbmNsdWRlICJhc20vYXJjaC9yd3NlbS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS11bS9zY2F0dGVybGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTIwMTZhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3NjYXR0ZXJsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9TQ0FUVEVSTElTVF9ICi0jZGVmaW5lIF9fVU1fU0NBVFRFUkxJU1RfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc2NhdHRlcmxpc3QuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXVtL3NlbWJ1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWU4MmMxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3NlbWJ1Zi5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fU0VNQlVGX0gKLSNkZWZpbmUgX19VTV9TRU1CVUZfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc2VtYnVmLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2VyaWFsLmggYi9pbmNsdWRlL2FzbS11bS9zZXJpYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhZDA3Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zZXJpYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1NFUklBTF9ICi0jZGVmaW5lIF9fVU1fU0VSSUFMX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3NlcmlhbC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20tdW0vc2htYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ODRkNGEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vc2htYnVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9TSE1CVUZfSAotI2RlZmluZSBfX1VNX1NITUJVRl9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9zaG1idWYuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tdW0vc2htcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI0YzAwMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zaG1wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fU0hNUEFSQU1fSAotI2RlZmluZSBfX1VNX1NITVBBUkFNX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3NobXBhcmFtLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2lnY29udGV4dC1nZW5lcmljLmggYi9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LWdlbmVyaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY0NTg3MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LWdlbmVyaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1NJR0NPTlRFWFRfR0VORVJJQ19ICi0jZGVmaW5lIF9fVU1fU0lHQ09OVEVYVF9HRU5FUklDX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3NpZ2NvbnRleHQuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3NpZ2NvbnRleHQtaTM4Ni5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODgzMzNmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3NpZ2NvbnRleHQtaTM4Ni5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fU0lHQ09OVEVYVF9JMzg2X0gKLSNkZWZpbmUgX19VTV9TSUdDT05URVhUX0kzODZfSAotCi0jaW5jbHVkZSAiYXNtL3NpZ2NvbnRleHQtZ2VuZXJpYy5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NpZ2NvbnRleHQtcHBjLmggYi9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LXBwYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDY3ZjIwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3NpZ2NvbnRleHQtcHBjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9fVU1fU0lHQ09OVEVYVF9QUENfSAotI2RlZmluZSBfX1VNX1NJR0NPTlRFWFRfUFBDX0gKLQotI2RlZmluZSBwdF9yZWdzIHN5c19wdF9yZWdzCi0KLSNpbmNsdWRlICJhc20vc2lnY29udGV4dC1nZW5lcmljLmgiCi0KLSN1bmRlZiBwdF9yZWdzCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2lnY29udGV4dC14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL3NpZ2NvbnRleHQteDg2XzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDBlMGIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vc2lnY29udGV4dC14ODZfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaWZuZGVmIF9fVU1fU0lHQ09OVEVYVF9YODZfNjRfSAotI2RlZmluZSBfX1VNX1NJR0NPTlRFWFRfWDg2XzY0X0gKLQotI2luY2x1ZGUgImFzbS9zaWdjb250ZXh0LWdlbmVyaWMuaCIKLQotI2VuZGlmCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS11bS9zaWdpbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYzYxMjQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vc2lnaW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fU0lHSU5GT19ICi0jZGVmaW5lIF9fVU1fU0lHSU5GT19ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9zaWdpbmZvLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2lnbmFsLmggYi9pbmNsdWRlL2FzbS11bS9zaWduYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJlZDkyYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zaWduYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaWZuZGVmIF9fVU1fU0lHTkFMX0gKLSNkZWZpbmUgX19VTV9TSUdOQUxfSAotCi0vKiBOZWVkIHRvIGtpbGwgdGhlIGRvX3NpZ25hbCgpIGRlY2xhcmF0aW9uIGluIHRoZSBpMzg2IHNpZ25hbC5oICovCi0KLSNkZWZpbmUgZG9fc2lnbmFsIGRvX3NpZ25hbF9yZW5hbWVkCi0jaW5jbHVkZSAiYXNtL2FyY2gvc2lnbmFsLmgiCi0jdW5kZWYgZG9fc2lnbmFsCi0jdW5kZWYgcHRyYWNlX3NpZ25hbF9kZWxpdmVyCi0KLSNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8ge30gd2hpbGUoMCkKLQotI2VuZGlmCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXVtL3NvY2tldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzg4NmU0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3NvY2tldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fU09DS0VUX0gKLSNkZWZpbmUgX19VTV9TT0NLRVRfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc29ja2V0LmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tdW0vc29ja2lvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2VlMWM1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3NvY2tpb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1NPQ0tJT1NfSAotI2RlZmluZSBfX1VNX1NPQ0tJT1NfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc29ja2lvcy5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS11bS9zcGlubG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMThjODI4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3NwaW5sb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9TUElOTE9DS19ICi0jZGVmaW5lIF9fVU1fU1BJTkxPQ0tfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc3BpbmxvY2suaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zcGlubG9ja190eXBlcy5oIGIvaW5jbHVkZS9hc20tdW0vc3BpbmxvY2tfdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhOTQyOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zcGlubG9ja190eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fU1BJTkxPQ0tfVFlQRVNfSAotI2RlZmluZSBfX1VNX1NQSU5MT0NLX1RZUEVTX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3NwaW5sb2NrX3R5cGVzLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3RhdC5oIGIvaW5jbHVkZS9hc20tdW0vc3RhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2VkODVhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3N0YXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1NUQVRfSAotI2RlZmluZSBfX1VNX1NUQVRfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc3RhdC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tdW0vc3RhdGZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNmZiNTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vc3RhdGZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX1VNX1NUQVRGU19ICi0jZGVmaW5lIF9VTV9TVEFURlNfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc3RhdGZzLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3RyaW5nLmggYi9pbmNsdWRlL2FzbS11bS9zdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEwNTcxZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1NUUklOR19ICi0jZGVmaW5lIF9fVU1fU1RSSU5HX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3N0cmluZy5oIgotI2luY2x1ZGUgImFzbS9hcmNocGFyYW0uaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zeXN0ZW0tZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vc3lzdGVtLWdlbmVyaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJjZmEzNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zeXN0ZW0tZ2VuZXJpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1NZU1RFTV9HRU5FUklDX0gKLSNkZWZpbmUgX19VTV9TWVNURU1fR0VORVJJQ19ICi0KLSNpbmNsdWRlICJhc20vYXJjaC9zeXN0ZW0uaCIKLQotI3VuZGVmIHN3aXRjaF90bwotI3VuZGVmIGxvY2FsX2lycV9zYXZlCi0jdW5kZWYgbG9jYWxfaXJxX3Jlc3RvcmUKLSN1bmRlZiBsb2NhbF9pcnFfZGlzYWJsZQotI3VuZGVmIGxvY2FsX2lycV9lbmFibGUKLSN1bmRlZiBsb2NhbF9zYXZlX2ZsYWdzCi0jdW5kZWYgbG9jYWxfaXJxX3Jlc3RvcmUKLSN1bmRlZiBsb2NhbF9pcnFfZW5hYmxlCi0jdW5kZWYgbG9jYWxfaXJxX2Rpc2FibGUKLSN1bmRlZiBsb2NhbF9pcnFfc2F2ZQotI3VuZGVmIGlycXNfZGlzYWJsZWQKLQotZXh0ZXJuIHZvaWQgKnN3aXRjaF90byh2b2lkICpwcmV2LCB2b2lkICpuZXh0LCB2b2lkICpsYXN0KTsKLQotZXh0ZXJuIGludCBnZXRfc2lnbmFscyh2b2lkKTsKLWV4dGVybiBpbnQgc2V0X3NpZ25hbHMoaW50IGVuYWJsZSk7Ci1leHRlcm4gaW50IGdldF9zaWduYWxzKHZvaWQpOwotZXh0ZXJuIHZvaWQgYmxvY2tfc2lnbmFscyh2b2lkKTsKLWV4dGVybiB2b2lkIHVuYmxvY2tfc2lnbmFscyh2b2lkKTsKLQotI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSBkbyB7IHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7IFwKLQkJCQkgICAgIChmbGFncykgPSBnZXRfc2lnbmFscygpOyB9IHdoaWxlKDApCi0jZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSBkbyB7IHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7IFwKLQkJCQkgICAgICBzZXRfc2lnbmFscyhmbGFncyk7IH0gd2hpbGUoMCkKLQotI2RlZmluZSBsb2NhbF9pcnFfc2F2ZShmbGFncykgZG8geyBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOyB9IHdoaWxlKDApCi0KLSNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpIHVuYmxvY2tfc2lnbmFscygpCi0jZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkgYmxvY2tfc2lnbmFscygpCi0KLSNkZWZpbmUgaXJxc19kaXNhYmxlZCgpICAgICAgICAgICAgICAgICBcCi0oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOyAgICAgICAgICAgIFwKLSAgICAgICAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7ICAgICAgICBcCi0gICAgICAgIChmbGFncyA9PSAwKTsgICAgICAgICAgICAgICAgICAgXAotfSkKLQotZXh0ZXJuIHZvaWQgKl9zd2l0Y2hfdG8odm9pZCAqcHJldiwgdm9pZCAqbmV4dCwgdm9pZCAqbGFzdCk7Ci0jZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBwcmV2ID0gX3N3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9zeXN0ZW0taTM4Ni5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDM2MjYzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1pMzg2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9TWVNURU1fSTM4Nl9ICi0jZGVmaW5lIF9fVU1fU1lTVEVNX0kzODZfSAotCi0jaW5jbHVkZSAiYXNtL3N5c3RlbS1nZW5lcmljLmgiCi0gICAgCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1wcGMuaCBiL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1wcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdjZGU2Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9zeXN0ZW0tcHBjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9fVU1fU1lTVEVNX1BQQ19ICi0jZGVmaW5lIF9fVU1fU1lTVEVNX1BQQ19ICi0KLSNkZWZpbmUgX3N3aXRjaF90byBfcHBjX3N3aXRjaF90bwotCi0jaW5jbHVkZSAiYXNtL2FyY2gvc3lzdGVtLmgiCi0KLSN1bmRlZiBfc3dpdGNoX3RvCi0gCi0jaW5jbHVkZSAiYXNtL3N5c3RlbS1nZW5lcmljLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3lzdGVtLXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vc3lzdGVtLXg4Nl82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI2MWI1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS14ODZfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2lmbmRlZiBfX1VNX1NZU1RFTV9YODZfNjRfSAotI2RlZmluZSBfX1VNX1NZU1RFTV9YODZfNjRfSAotCi0jaW5jbHVkZSAiYXNtL3N5c3RlbS1nZW5lcmljLmgiCi0KLSNlbmRpZgotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXVtL3Rlcm1iaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzljNjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vdGVybWJpdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1RFUk1CSVRTX0gKLSNkZWZpbmUgX19VTV9URVJNQklUU19ICi0KLSNpbmNsdWRlICJhc20vYXJjaC90ZXJtYml0cy5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLXVtL3Rlcm1pb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlmOTdiMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS90ZXJtaW9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9URVJNSU9TX0gKLSNkZWZpbmUgX19VTV9URVJNSU9TX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3Rlcm1pb3MuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA3ZTcyOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX19VTV9USFJFQURfSU5GT19ICi0jZGVmaW5lIF9fVU1fVEhSRUFEX0lORk9fSAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi1zdHJ1Y3QgdGhyZWFkX2luZm8gewotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCi0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KLQlfX3UzMgkJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCi0JaW50CQkJcHJlZW1wdF9jb3VudDsgIC8qIDAgPT4gcHJlZW1wdGFibGUsCi0JCQkJCQkgICA8MCA9PiBCVUcgKi8KLQltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlOgotCQkJCQkgCSAgIDAtMHhCRkZGRkZGRiBmb3IgdXNlcgotCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwgKi8KLQlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOwotCXN0cnVjdCB0aHJlYWRfaW5mbwkqcmVhbF90aHJlYWQ7ICAgIC8qIFBvaW50cyB0byBub24tSVJRIHN0YWNrICovCi19OwotCi0jZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKLXsJCQkJCQlcCi0JLnRhc2sgPQkJJnRzaywJCQlcCi0JLmV4ZWNfZG9tYWluID0JJmRlZmF1bHRfZXhlY19kb21haW4sCVwKLQkuZmxhZ3MgPQkJMCwJCVwKLQkuY3B1ID0JCTAsCQkJXAotCS5wcmVlbXB0X2NvdW50ID0JMSwJCVwKLQkuYWRkcl9saW1pdCA9CUtFUk5FTF9EUywJCVwKLQkucmVzdGFydF9ibG9jayA9ICB7CQkJXAotCQkuZm4gPSAgZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCi0JfSwJCQkJCVwKLQkucmVhbF90aHJlYWQgPSBOVUxMLAkJCVwKLX0KLQotI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKLSNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQotCi0jZGVmaW5lIFRIUkVBRF9TSVpFICgoMSA8PCBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSAqIFBBR0VfU0laRSkKLS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQotewotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gVEhSRUFEX1NJWkUgLSAxOwotCXRpID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKCh1bnNpZ25lZCBsb25nKSAmdGkpICYgfm1hc2spOwotCXJldHVybiB0aTsKLX0KLQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSCi0KLSNlbmRpZgotCi0jZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwotI2RlZmluZSBUSUZfU0lHUEVORElORwkJMQkvKiBzaWduYWwgcGVuZGluZyAqLwotI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTIJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwotI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcgICAgICAzICAgICAgIC8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZwotCQkJCQkgKiBUSUZfTkVFRF9SRVNDSEVECi0JCQkJCSAqLwotI2RlZmluZSBUSUZfUkVTVEFSVF9CTE9DSyAJNAotI2RlZmluZSBUSUZfTUVNRElFCSAJNQotI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk2Ci0jZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNwotCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKLSNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKLSNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDEgPDwgVElGX05FRURfUkVTQ0hFRCkKLSNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRyAgICAgKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQotI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxIDw8IFRJRl9TWVNDQUxMX0FVRElUKQotI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3R5cGVzLmggYi9pbmNsdWRlL2FzbS11bS90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTZlOTU5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXVtL3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9UWVBFU19ICi0jZGVmaW5lIF9fVU1fVFlQRVNfSAotCi0jaW5jbHVkZSAiYXNtL2FyY2gvdHlwZXMuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20tdW0vdWNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM5NmMwZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS91Y29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9BU01fVU1fVUNPTlRFWFRfSAotI2RlZmluZSBfQVNNX1VNX1VDT05URVhUX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3Vjb250ZXh0LmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS11bS91bmFsaWduZWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ3MTk2OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS91bmFsaWduZWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1VNX1VOQUxJR05FRF9ICi0jZGVmaW5lIF9BU01fVU1fVU5BTElHTkVEX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3VuYWxpZ25lZC5oIgotCi0jZW5kaWYgLyogX0FTTV9VTV9VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdW5pc3RkLmggYi9pbmNsdWRlL2FzbS11bS91bmlzdGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhiZDlkOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS91bmlzdGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNCAgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpZm5kZWYgX1VNX1VOSVNURF9IXwotI2RlZmluZSBfVU1fVU5JU1REX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgImxpbnV4L3Jlc291cmNlLmgiCi0jaW5jbHVkZSAiYXNtL3VhY2Nlc3MuaCIKLQotZXh0ZXJuIGludCB1bV9leGVjdmUoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZbXSk7Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKiBXZSBnZXQgX19BUkNIX1dBTlRfT0xEX1NUQVQgYW5kIF9fQVJDSF9XQU5UX1NUQVQ2NCBmcm9tIHRoZSBiYXNlIGFyY2ggKi8KLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECi0jZW5kaWYKLQotI2luY2x1ZGUgImFzbS9hcmNoL3VuaXN0ZC5oIgotCi0jZW5kaWYgLyogX1VNX1VOSVNURF9IXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS91c2VyLmggYi9pbmNsdWRlL2FzbS11bS91c2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZTQxNGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vdXNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9fVU1fVVNFUl9ICi0jZGVmaW5lIF9fVU1fVVNFUl9ICi0KLSNpbmNsdWRlICJhc20vYXJjaC91c2VyLmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdmdhLmggYi9pbmNsdWRlL2FzbS11bS92Z2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzYTU5Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS92Z2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1VNX1ZHQV9ICi0jZGVmaW5lIF9fVU1fVkdBX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3ZnYS5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3ZtODYuaCBiL2luY2x1ZGUvYXNtLXVtL3ZtODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgwMWY4Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS92bTg2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19VTV9WTTg2X0gKLSNkZWZpbmUgX19VTV9WTTg2X0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3ZtODYuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYS5vdXQtY29yZS5oIGIvaW5jbHVkZS9hc20teDg2L2Eub3V0LWNvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3MDU3Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYS5vdXQtY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogYS5vdXQgY29yZWR1bXAgcmVnaXN0ZXIgZHVtcGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fQV9PVVRfQ09SRV9ICi0jZGVmaW5lIEFTTV9YODZfX0FfT1VUX0NPUkVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotI2lmZGVmIENPTkZJR19YODZfMzIKLQotI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+Ci0KLS8qCi0gKiBmaWxsIGluIHRoZSB1c2VyIHN0cnVjdHVyZSBmb3IgYW4gYS5vdXQgY29yZSBkdW1wCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhb3V0X2R1bXBfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdXNlciAqZHVtcCkKLXsKLQl1MTYgZ3M7Ci0KLS8qIGNoYW5nZWQgdGhlIHNpemUgY2FsY3VsYXRpb25zIC0gc2hvdWxkIGhvcGVmdWxseSB3b3JrIGJldHRlci4gbGJ0ICovCi0JZHVtcC0+bWFnaWMgPSBDTUFHSUM7Ci0JZHVtcC0+c3RhcnRfY29kZSA9IDA7Ci0JZHVtcC0+c3RhcnRfc3RhY2sgPSByZWdzLT5zcCAmIH4oUEFHRV9TSVpFIC0gMSk7Ci0JZHVtcC0+dV90c2l6ZSA9ICgodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbS0+ZW5kX2NvZGUpID4+IFBBR0VfU0hJRlQ7Ci0JZHVtcC0+dV9kc2l6ZSA9ICgodW5zaWduZWQgbG9uZykoY3VycmVudC0+bW0tPmJyayArIChQQUdFX1NJWkUgLSAxKSkpCi0JCQk+PiBQQUdFX1NISUZUOwotCWR1bXAtPnVfZHNpemUgLT0gZHVtcC0+dV90c2l6ZTsKLQlkdW1wLT51X3NzaXplID0gMDsKLQlkdW1wLT51X2RlYnVncmVnWzBdID0gY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMDsKLQlkdW1wLT51X2RlYnVncmVnWzFdID0gY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMTsKLQlkdW1wLT51X2RlYnVncmVnWzJdID0gY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMjsKLQlkdW1wLT51X2RlYnVncmVnWzNdID0gY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMzsKLQlkdW1wLT51X2RlYnVncmVnWzRdID0gMDsKLQlkdW1wLT51X2RlYnVncmVnWzVdID0gMDsKLQlkdW1wLT51X2RlYnVncmVnWzZdID0gY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNjsKLQlkdW1wLT51X2RlYnVncmVnWzddID0gY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNzsKLQotCWlmIChkdW1wLT5zdGFydF9zdGFjayA8IFRBU0tfU0laRSkKLQkJZHVtcC0+dV9zc2l6ZSA9ICgodW5zaWduZWQgbG9uZykoVEFTS19TSVpFIC0gZHVtcC0+c3RhcnRfc3RhY2spKQotCQkJCT4+IFBBR0VfU0hJRlQ7Ci0KLQlkdW1wLT5yZWdzLmJ4ID0gcmVncy0+Yng7Ci0JZHVtcC0+cmVncy5jeCA9IHJlZ3MtPmN4OwotCWR1bXAtPnJlZ3MuZHggPSByZWdzLT5keDsKLQlkdW1wLT5yZWdzLnNpID0gcmVncy0+c2k7Ci0JZHVtcC0+cmVncy5kaSA9IHJlZ3MtPmRpOwotCWR1bXAtPnJlZ3MuYnAgPSByZWdzLT5icDsKLQlkdW1wLT5yZWdzLmF4ID0gcmVncy0+YXg7Ci0JZHVtcC0+cmVncy5kcyA9ICh1MTYpcmVncy0+ZHM7Ci0JZHVtcC0+cmVncy5lcyA9ICh1MTYpcmVncy0+ZXM7Ci0JZHVtcC0+cmVncy5mcyA9ICh1MTYpcmVncy0+ZnM7Ci0Jc2F2ZXNlZ21lbnQoZ3MsIGdzKTsKLQlkdW1wLT5yZWdzLm9yaWdfYXggPSByZWdzLT5vcmlnX2F4OwotCWR1bXAtPnJlZ3MuaXAgPSByZWdzLT5pcDsKLQlkdW1wLT5yZWdzLmNzID0gKHUxNilyZWdzLT5jczsKLQlkdW1wLT5yZWdzLmZsYWdzID0gcmVncy0+ZmxhZ3M7Ci0JZHVtcC0+cmVncy5zcCA9IHJlZ3MtPnNwOwotCWR1bXAtPnJlZ3Muc3MgPSAodTE2KXJlZ3MtPnNzOwotCi0JZHVtcC0+dV9mcHZhbGlkID0gZHVtcF9mcHUocmVncywgJmR1bXAtPmkzODcpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBBU01fWDg2X19BX09VVF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hLm91dC5oIGIvaW5jbHVkZS9hc20teDg2L2Eub3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NDg3NDguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0FfT1VUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQV9PVVRfSAotCi1zdHJ1Y3QgZXhlYwotewotCXVuc2lnbmVkIGludCBhX2luZm87CS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KLQl1bnNpZ25lZCBhX3RleHQ7CS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfZGF0YTsJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9zeW1zOwkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCi0JdW5zaWduZWQgYV90cnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCi19OwotCi0jZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCi0jZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCi0jZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKLQotI2VuZGlmIC8qIEFTTV9YODZfX0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hY3BpLmggYi9pbmNsdWRlL2FzbS14ODYvYWNwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTJlMTczLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hY3BpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19BQ1BJX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQUNQSV9ICi0KLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdWwgRGllZmVuYmF1Z2ggPHBhdWwucy5kaWVmZW5iYXVnaEBpbnRlbC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+Ci0gKgotICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICovCi0jaW5jbHVkZSA8YWNwaS9wZGNfaW50ZWwuaD4KLQotI2luY2x1ZGUgPGFzbS9udW1hLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0KLSNkZWZpbmUgQ09NUElMRVJfREVQRU5ERU5UX0lOVDY0ICAgbG9uZyBsb25nCi0jZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZwotCi0vKgotICogQ2FsbGluZyBjb252ZW50aW9uczoKLSAqCi0gKiBBQ1BJX1NZU1RFTV9YRkFDRSAgICAgICAgLSBJbnRlcmZhY2VzIHRvIGhvc3QgT1MgKGhhbmRsZXJzLCB0aHJlYWRzKQotICogQUNQSV9FWFRFUk5BTF9YRkFDRSAgICAgIC0gRXh0ZXJuYWwgQUNQSSBpbnRlcmZhY2VzCi0gKiBBQ1BJX0lOVEVSTkFMX1hGQUNFICAgICAgLSBJbnRlcm5hbCBBQ1BJIGludGVyZmFjZXMKLSAqIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFICAtIEludGVybmFsIHZhcmlhYmxlLXBhcmFtZXRlciBsaXN0IGludGVyZmFjZXMKLSAqLwotI2RlZmluZSBBQ1BJX1NZU1RFTV9YRkFDRQotI2RlZmluZSBBQ1BJX0VYVEVSTkFMX1hGQUNFCi0jZGVmaW5lIEFDUElfSU5URVJOQUxfWEZBQ0UKLSNkZWZpbmUgQUNQSV9JTlRFUk5BTF9WQVJfWEZBQ0UKLQotLyogQXNtIG1hY3JvcyAqLwotCi0jZGVmaW5lIEFDUElfQVNNX01BQ1JPUwotI2RlZmluZSBCUkVBS1BPSU5UMwotI2RlZmluZSBBQ1BJX0RJU0FCTEVfSVJRUygpIGxvY2FsX2lycV9kaXNhYmxlKCkKLSNkZWZpbmUgQUNQSV9FTkFCTEVfSVJRUygpICBsb2NhbF9pcnFfZW5hYmxlKCkKLSNkZWZpbmUgQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKQl3YmludmQoKQotCi1pbnQgX19hY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2sodW5zaWduZWQgaW50ICpsb2NrKTsKLWludCBfX2FjcGlfcmVsZWFzZV9nbG9iYWxfbG9jayh1bnNpZ25lZCBpbnQgKmxvY2spOwotCi0jZGVmaW5lIEFDUElfQUNRVUlSRV9HTE9CQUxfTE9DSyhmYWNzLCBBY3EpIFwKLQkoKEFjcSkgPSBfX2FjcGlfYWNxdWlyZV9nbG9iYWxfbG9jaygmZmFjcy0+Z2xvYmFsX2xvY2spKQotCi0jZGVmaW5lIEFDUElfUkVMRUFTRV9HTE9CQUxfTE9DSyhmYWNzLCBBY3EpIFwKLQkoKEFjcSkgPSBfX2FjcGlfcmVsZWFzZV9nbG9iYWxfbG9jaygmZmFjcy0+Z2xvYmFsX2xvY2spKQotCi0vKgotICogTWF0aCBoZWxwZXIgYXNtIG1hY3JvcwotICovCi0jZGVmaW5lIEFDUElfRElWXzY0X0JZXzMyKG5faGksIG5fbG8sIGQzMiwgcTMyLCByMzIpIFwKLQlhc20oImRpdmwgJTI7IgkJCQkgICAgIFwKLQkgICAgOiAiPWEiKHEzMiksICI9ZCIocjMyKQkJICAgICBcCi0JICAgIDogInIiKGQzMiksCQkJCSAgICAgXAotCSAgICAgIjAiKG5fbG8pLCAiMSIobl9oaSkpCi0KLQotI2RlZmluZSBBQ1BJX1NISUZUX1JJR0hUXzY0KG5faGksIG5fbG8pIFwKLQlhc20oInNocmwgICAkMSwlMgk7IglcCi0JICAgICJyY3JsICAgJDEsJTM7IgkJXAotCSAgICA6ICI9ciIobl9oaSksICI9ciIobl9sbykJXAotCSAgICA6ICIwIihuX2hpKSwgIjEiKG5fbG8pKQotCi0jaWZkZWYgQ09ORklHX0FDUEkKLWV4dGVybiBpbnQgYWNwaV9sYXBpYzsKLWV4dGVybiBpbnQgYWNwaV9pb2FwaWM7Ci1leHRlcm4gaW50IGFjcGlfbm9pcnE7Ci1leHRlcm4gaW50IGFjcGlfc3RyaWN0OwotZXh0ZXJuIGludCBhY3BpX2Rpc2FibGVkOwotZXh0ZXJuIGludCBhY3BpX2h0OwotZXh0ZXJuIGludCBhY3BpX3BjaV9kaXNhYmxlZDsKLWV4dGVybiBpbnQgYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlOwotZXh0ZXJuIGludCBhY3BpX3VzZV90aW1lcl9vdmVycmlkZTsKLQotZXh0ZXJuIHU4IGFjcGlfc2NpX2ZsYWdzOwotZXh0ZXJuIGludCBhY3BpX3NjaV9vdmVycmlkZV9nc2k7Ci12b2lkIGFjcGlfcGljX3NjaV9zZXRfdHJpZ2dlcih1bnNpZ25lZCBpbnQsIHUxNik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkKLXsKLQlhY3BpX2Rpc2FibGVkID0gMTsKLQlhY3BpX2h0ID0gMDsKLQlhY3BpX3BjaV9kaXNhYmxlZCA9IDE7Ci0JYWNwaV9ub2lycSA9IDE7Ci19Ci0KLS8qIEZpeG1hcCBwYWdlcyB0byByZXNlcnZlIGZvciBBQ1BJIGJvb3QtdGltZSB0YWJsZXMgKHNlZSBmaXhtYXAuaCkgKi8KLSNkZWZpbmUgRklYX0FDUElfUEFHRVMgNAotCi1leHRlcm4gaW50IGFjcGlfZ3NpX3RvX2lycSh1MzIgZ3NpLCB1bnNpZ25lZCBpbnQgKmlycSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25vaXJxX3NldCh2b2lkKSB7IGFjcGlfbm9pcnEgPSAxOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9kaXNhYmxlX3BjaSh2b2lkKQotewotCWFjcGlfcGNpX2Rpc2FibGVkID0gMTsKLQlhY3BpX25vaXJxX3NldCgpOwotfQotZXh0ZXJuIGludCBhY3BpX2lycV9iYWxhbmNlX3NldChjaGFyICpzdHIpOwotCi0vKiByb3V0aW5lcyBmb3Igc2F2aW5nL3Jlc3RvcmluZyBrZXJuZWwgc3RhdGUgKi8KLWV4dGVybiBpbnQgYWNwaV9zYXZlX3N0YXRlX21lbSh2b2lkKTsKLWV4dGVybiB2b2lkIGFjcGlfcmVzdG9yZV9zdGF0ZV9tZW0odm9pZCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGFjcGlfd2FrZXVwX2FkZHJlc3M7Ci0KLS8qIGVhcmx5IGluaXRpYWxpemF0aW9uIHJvdXRpbmUgKi8KLWV4dGVybiB2b2lkIGFjcGlfcmVzZXJ2ZV9ib290bWVtKHZvaWQpOwotCi0vKgotICogQ2hlY2sgaWYgdGhlIENQVSBjYW4gaGFuZGxlIEMyIGFuZCBkZWVwZXIKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWNwaV9wcm9jZXNzb3JfY3N0YXRlX2NoZWNrKHVuc2lnbmVkIGludCBtYXhfY3N0YXRlKQotewotCS8qCi0JICogRWFybHkgbW9kZWxzICg8PTUpIG9mIEFNRCBPcHRlcm9ucyBhcmUgbm90IHN1cHBvc2VkIHRvIGdvIGludG8KLQkgKiBDMiBzdGF0ZS4KLQkgKgotCSAqIFN0ZXBwaW5ncyAweDBBIGFuZCBsYXRlciBhcmUgZ29vZAotCSAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDBGICYmCi0JICAgIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgotCSAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PSAweDA1ICYmCi0JICAgIGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPCAweDBBKQotCQlyZXR1cm4gMTsKLQllbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQU1EQzFFKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gbWF4X2NzdGF0ZTsKLX0KLQotI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCi0KLSNkZWZpbmUgYWNwaV9sYXBpYyAwCi0jZGVmaW5lIGFjcGlfaW9hcGljIDAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25vaXJxX3NldCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2Rpc2FibGVfcGNpKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYWNwaSh2b2lkKSB7IH0KLQotI2VuZGlmIC8qICFDT05GSUdfQUNQSSAqLwotCi0jZGVmaW5lIEFSQ0hfSEFTX1BPV0VSX0lOSVQJMQotCi1zdHJ1Y3QgYm9vdG5vZGU7Ci0KLSNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCi1leHRlcm4gaW50IGFjcGlfbnVtYTsKLWV4dGVybiBpbnQgYWNwaV9zY2FuX25vZGVzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLSNkZWZpbmUgTlJfTk9ERV9NRU1CTEtTIChNQVhfTlVNTk9ERVMqMikKLWV4dGVybiB2b2lkIGFjcGlfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKmZha2Vfbm9kZXMsCi0JCQkJICAgaW50IG51bV9ub2Rlcyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFjcGlfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKmZha2Vfbm9kZXMsCi0JCQkJICAgaW50IG51bV9ub2RlcykKLXsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIGFjcGlfdW5sYXp5X3RsYih4KQlsZWF2ZV9tbSh4KQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQUNQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYWdwLmggYi9pbmNsdWRlL2FzbS14ODYvYWdwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MTdmZDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2FncC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19BR1BfSAotI2RlZmluZSBBU01fWDg2X19BR1BfSAotCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotCi0vKgotICogRnVuY3Rpb25zIHRvIGtlZXAgdGhlIGFncGdhcnQgbWFwcGluZ3MgY29oZXJlbnQgd2l0aCB0aGUgTU1VLiBUaGUKLSAqIEdBUlQgZ2l2ZXMgdGhlIENQVSBhIHBoeXNpY2FsIGFsaWFzIG9mIHBhZ2VzIGluIG1lbW9yeS4gVGhlIGFsaWFzCi0gKiByZWdpb24gaXMgbWFwcGVkIHVuY2FjaGVhYmxlLiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGNvbmZsaWN0aW5nCi0gKiBtYXBwaW5ncyB3aXRoIGRpZmZlcmVudCBjYWNoYWJpbGl0eSBhdHRyaWJ1dGVzIGZvciB0aGUgc2FtZQotICogcGFnZS4gVGhpcyBhdm9pZHMgZGF0YSBjb3JydXB0aW9uIG9uIHNvbWUgQ1BVcy4KLSAqLwotCi0jZGVmaW5lIG1hcF9wYWdlX2ludG9fYWdwKHBhZ2UpIHNldF9wYWdlc191YyhwYWdlLCAxKQotI2RlZmluZSB1bm1hcF9wYWdlX2Zyb21fYWdwKHBhZ2UpIHNldF9wYWdlc193YihwYWdlLCAxKQotCi0vKgotICogQ291bGQgdXNlIENMRkxVU0ggaGVyZSBpZiB0aGUgY3B1IHN1cHBvcnRzIGl0LiBCdXQgdGhlbiBpdCB3b3VsZAotICogbmVlZCB0byBiZSBjYWxsZWQgZm9yIGVhY2ggY2FjaGVsaW5lIG9mIHRoZSB3aG9sZSBwYWdlIHNvIGl0IG1heQotICogbm90IGJlIHdvcnRoIGl0LiBXb3VsZCBuZWVkIGEgcGFnZSBmb3IgaXQuCi0gKi8KLSNkZWZpbmUgZmx1c2hfYWdwX2NhY2hlKCkgd2JpbnZkKCkKLQotLyogQ29udmVydCBhIHBoeXNpY2FsIGFkZHJlc3MgdG8gYW4gYWRkcmVzcyBzdWl0YWJsZSBmb3IgdGhlIEdBUlQuICovCi0jZGVmaW5lIHBoeXNfdG9fZ2FydCh4KSAoeCkKLSNkZWZpbmUgZ2FydF90b19waHlzKHgpICh4KQotCi0vKiBHQVRUIGFsbG9jYXRpb24uIFJldHVybnMvYWNjZXB0cyBHQVRUIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCi0jZGVmaW5lIGFsbG9jX2dhdHRfcGFnZXMob3JkZXIpCQlcCi0JKChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAob3JkZXIpKSkKLSNkZWZpbmUgZnJlZV9nYXR0X3BhZ2VzKHRhYmxlLCBvcmRlcikJXAotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpKHRhYmxlKSwgKG9yZGVyKSkKLQotI2VuZGlmIC8qIEFTTV9YODZfX0FHUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYWx0ZXJuYXRpdmUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hbHRlcm5hdGl2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmQzYzk4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hbHRlcm5hdGl2ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQUxURVJOQVRJVkVfSAotI2RlZmluZSBBU01fWDg2X19BTFRFUk5BVElWRV9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGFzbS9hc20uaD4KLQotLyoKLSAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSBmb3IgU01QLgotICoKLSAqIFRoZSBMT0NLX1BSRUZJWCBtYWNybyBkZWZpbmVkIGhlcmUgcmVwbGFjZXMgdGhlIExPQ0sgYW5kCi0gKiBMT0NLX1BSRUZJWCBtYWNyb3MgdXNlZCBldmVyeXdoZXJlIGluIHRoZSBzb3VyY2UgdHJlZS4KLSAqCi0gKiBTTVAgYWx0ZXJuYXRpdmVzIHVzZSB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZXMgYXMgdGhlIG90aGVyCi0gKiBhbHRlcm5hdGl2ZXMgYW5kIHRoZSBYODZfRkVBVFVSRV9VUCBmbGFnIHRvIGluZGljYXRlIHRoZSBjYXNlIG9mIGEKLSAqIFVQIHN5c3RlbSBydW5uaW5nIGEgU01QIGtlcm5lbC4gIFRoZSBleGlzdGluZyBhcHBseV9hbHRlcm5hdGl2ZXMoKQotICogd29ya3MgZmluZSBmb3IgcGF0Y2hpbmcgYSBTTVAga2VybmVsIGZvciBVUC4KLSAqCi0gKiBUaGUgU01QIGFsdGVybmF0aXZlIHRhYmxlcyBjYW4gYmUga2VwdCBhZnRlciBib290IGFuZCBjb250YWluIGJvdGgKLSAqIFVQIGFuZCBTTVAgdmVyc2lvbnMgb2YgdGhlIGluc3RydWN0aW9ucyB0byBhbGxvdyBzd2l0Y2hpbmcgYmFjayB0bwotICogU01QIGF0IHJ1bnRpbWUsIHdoZW4gaG90cGx1Z2dpbmcgaW4gYSBuZXcgQ1BVLCB3aGljaCBpcyBlc3BlY2lhbGx5Ci0gKiB1c2VmdWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgotICoKLSAqIFRoZSB2ZXJ5IGNvbW1vbiBsb2NrIHByZWZpeCBpcyBoYW5kbGVkIGFzIHNwZWNpYWwgY2FzZSBpbiBhCi0gKiBzZXBhcmF0ZSB0YWJsZSB3aGljaCBpcyBhIHB1cmUgYWRkcmVzcyBsaXN0IHdpdGhvdXQgcmVwbGFjZW1lbnQgcHRyCi0gKiBhbmQgc2l6ZSBpbmZvcm1hdGlvbi4gIFRoYXQga2VlcHMgdGhlIHRhYmxlIHNpemVzIHNtYWxsLgotICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIExPQ0tfUFJFRklYIFwKLQkJIi5zZWN0aW9uIC5zbXBfbG9ja3MsXCJhXCJcbiIJXAotCQlfQVNNX0FMSUdOICJcbiIJCQlcCi0JCV9BU01fUFRSICI2NjFmXG4iIC8qIGFkZHJlc3MgKi8JXAotCQkiLnByZXZpb3VzXG4iCQkJXAotCQkiNjYxOlxuXHRsb2NrOyAiCi0KLSNlbHNlIC8qICEgQ09ORklHX1NNUCAqLwotI2RlZmluZSBMT0NLX1BSRUZJWCAiIgotI2VuZGlmCi0KLS8qIFRoaXMgbXVzdCBiZSBpbmNsdWRlZCAqYWZ0ZXIqIHRoZSBkZWZpbml0aW9uIG9mIExPQ0tfUFJFRklYICovCi0jaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KLQotc3RydWN0IGFsdF9pbnN0ciB7Ci0JdTggKmluc3RyOwkJLyogb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KLQl1OCAqcmVwbGFjZW1lbnQ7Ci0JdTggIGNwdWlkOwkJLyogY3B1aWQgYml0IHNldCBmb3IgcmVwbGFjZW1lbnQgKi8KLQl1OCAgaW5zdHJsZW47CQkvKiBsZW5ndGggb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KLQl1OCAgcmVwbGFjZW1lbnRsZW47CS8qIGxlbmd0aCBvZiBuZXcgaW5zdHJ1Y3Rpb24sIDw9IGluc3RybGVuICovCi0JdTggIHBhZDE7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXUzMiBwYWQyOwotI2VuZGlmCi19OwotCi1leHRlcm4gdm9pZCBhbHRlcm5hdGl2ZV9pbnN0cnVjdGlvbnModm9pZCk7Ci1leHRlcm4gdm9pZCBhcHBseV9hbHRlcm5hdGl2ZXMoc3RydWN0IGFsdF9pbnN0ciAqc3RhcnQsIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCk7Ci0KLXN0cnVjdCBtb2R1bGU7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpuYW1lLAotCQkJCQl2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAotCQkJCQl2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCk7Ci1leHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKTsKLWV4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpuYW1lLAotCQkJCQkgICAgICAgdm9pZCAqbG9ja3MsIHZvaWQgKmxvY2tzX2VuZCwKLQkJCQkJICAgICAgIHZvaWQgKnRleHQsIHZvaWQgKnRleHRfZW5kKSB7fQotc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2RlbChzdHJ1Y3QgbW9kdWxlICptb2QpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goaW50IHNtcCkge30KLSNlbmRpZgkvKiBDT05GSUdfU01QICovCi0KLWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0ICpmaW5kX25vcF90YWJsZSh2b2lkKTsKLQotLyoKLSAqIEFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmb3IgZGlmZmVyZW50IENQVSB0eXBlcyBvciBjYXBhYmlsaXRpZXMuCi0gKgotICogVGhpcyBhbGxvd3MgdG8gdXNlIG9wdGltaXplZCBpbnN0cnVjdGlvbnMgZXZlbiBvbiBnZW5lcmljIGJpbmFyeQotICoga2VybmVscy4KLSAqCi0gKiBsZW5ndGggb2Ygb2xkaW5zdHIgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdGhlIGxlbmd0aCBvZiBuZXdpbnN0cgotICogSXQgY2FuIGJlIHBhZGRlZCB3aXRoIG5vcHMgYXMgbmVlZGVkLgotICoKLSAqIEZvciBub24gYmFycmllciBsaWtlIGlubGluZXMgcGxlYXNlIGRlZmluZSBuZXcgdmFyaWFudHMKLSAqIHdpdGhvdXQgdm9sYXRpbGUgYW5kIG1lbW9yeSBjbG9iYmVyLgotICovCi0jZGVmaW5lIGFsdGVybmF0aXZlKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkJCQlcCi0JYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIG9sZGluc3RyICJcbjY2MjpcbiIJCQlcCi0JCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCQlcCi0JCSAgICAgIF9BU01fQUxJR04gIlxuIgkJCQkJXAotCQkgICAgICBfQVNNX1BUUiAiNjYxYlxuIgkJLyogbGFiZWwgKi8JCVwKLQkJICAgICAgX0FTTV9QVFIgIjY2M2ZcbiIJCS8qIG5ldyBpbnN0cnVjdGlvbiAqLwlcCi0JCSAgICAgICIJIC5ieXRlICVjMFxuIgkJLyogZmVhdHVyZSBiaXQgKi8JXAotCQkgICAgICAiCSAuYnl0ZSA2NjJiLTY2MWJcbiIJLyogc291cmNlbGVuICovCQlcCi0JCSAgICAgICIJIC5ieXRlIDY2NGYtNjYzZlxuIgkvKiByZXBsYWNlbWVudGxlbiAqLwlcCi0JCSAgICAgICIucHJldmlvdXNcbiIJCQkJCVwKLQkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIJCVwKLQkJICAgICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAvKiByZXBsYWNlbWVudCAqLwlcCi0JCSAgICAgICIucHJldmlvdXMiIDo6ICJpIiAoZmVhdHVyZSkgOiAibWVtb3J5IikKLQotLyoKLSAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSB3aXRoIGlucHV0LgotICoKLSAqIFBlY3VsYXJpdGllczoKLSAqIE5vIG1lbW9yeSBjbG9iYmVyIGhlcmUuCi0gKiBBcmd1bWVudCBudW1iZXJzIHN0YXJ0IHdpdGggMS4KLSAqIEJlc3QgaXMgdG8gdXNlIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGZpeGVkIHNpemUgKGxpa2UgKCUxKSAuLi4gInIiKQotICogSWYgeW91IHVzZSB2YXJpYWJsZSBzaXplZCBjb25zdHJhaW50cyBsaWtlICJtIiBvciAiZyIgaW4gdGhlCi0gKiByZXBsYWNlbWVudCBtYWtlIHN1cmUgdG8gcGFkIHRvIHRoZSB3b3JzdCBjYXNlIGxlbmd0aC4KLSAqLwotI2RlZmluZSBhbHRlcm5hdGl2ZV9pbnB1dChvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGlucHV0Li4uKQlcCi0JYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIG9sZGluc3RyICJcbjY2MjpcbiIJCQlcCi0JCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCQlcCi0JCSAgICAgIF9BU01fQUxJR04gIlxuIgkJCQkJXAotCQkgICAgICBfQVNNX1BUUiAiNjYxYlxuIgkJLyogbGFiZWwgKi8JCVwKLQkJICAgICAgX0FTTV9QVFIgIjY2M2ZcbiIJCS8qIG5ldyBpbnN0cnVjdGlvbiAqLwlcCi0JCSAgICAgICIJIC5ieXRlICVjMFxuIgkJLyogZmVhdHVyZSBiaXQgKi8JXAotCQkgICAgICAiCSAuYnl0ZSA2NjJiLTY2MWJcbiIJLyogc291cmNlbGVuICovCQlcCi0JCSAgICAgICIJIC5ieXRlIDY2NGYtNjYzZlxuIgkvKiByZXBsYWNlbWVudGxlbiAqLwlcCi0JCSAgICAgICIucHJldmlvdXNcbiIJCQkJCVwKLQkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIJCVwKLQkJICAgICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAvKiByZXBsYWNlbWVudCAqLwlcCi0JCSAgICAgICIucHJldmlvdXMiIDo6ICJpIiAoZmVhdHVyZSksICMjaW5wdXQpCi0KLS8qIExpa2UgYWx0ZXJuYXRpdmVfaW5wdXQsIGJ1dCB3aXRoIGEgc2luZ2xlIG91dHB1dCBhcmd1bWVudCAqLwotI2RlZmluZSBhbHRlcm5hdGl2ZV9pbyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIG91dHB1dCwgaW5wdXQuLi4pCVwKLQlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIgkJCVwKLQkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCVwKLQkJICAgICAgX0FTTV9BTElHTiAiXG4iCQkJCQlcCi0JCSAgICAgIF9BU01fUFRSICI2NjFiXG4iCQkvKiBsYWJlbCAqLwkJXAotCQkgICAgICBfQVNNX1BUUiAiNjYzZlxuIgkJLyogbmV3IGluc3RydWN0aW9uICovCVwKLQkJICAgICAgIgkgLmJ5dGUgJWNbZmVhdF1cbiIJLyogZmVhdHVyZSBiaXQgKi8JXAotCQkgICAgICAiCSAuYnl0ZSA2NjJiLTY2MWJcbiIJLyogc291cmNlbGVuICovCQlcCi0JCSAgICAgICIJIC5ieXRlIDY2NGYtNjYzZlxuIgkvKiByZXBsYWNlbWVudGxlbiAqLwlcCi0JCSAgICAgICIucHJldmlvdXNcbiIJCQkJCVwKLQkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIJCVwKLQkJICAgICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAvKiByZXBsYWNlbWVudCAqLyBcCi0JCSAgICAgICIucHJldmlvdXMiIDogb3V0cHV0IDogW2ZlYXRdICJpIiAoZmVhdHVyZSksICMjaW5wdXQpCi0KLS8qCi0gKiB1c2UgdGhpcyBtYWNybyhzKSBpZiB5b3UgbmVlZCBtb3JlIHRoYW4gb25lIG91dHB1dCBwYXJhbWV0ZXIKLSAqIGluIGFsdGVybmF0aXZlX2lvCi0gKi8KLSNkZWZpbmUgQVNNX09VVFBVVDIoYSwgYikgYSwgYgotCi1zdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZTsKLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLXZvaWQgYXBwbHlfcGFyYXZpcnQoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKnN0YXJ0LAotCQkgICAgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKmVuZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFwcGx5X3BhcmF2aXJ0KHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICpzdGFydCwKLQkJCQkgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICplbmQpCi17fQotI2RlZmluZSBfX3BhcmFpbnN0cnVjdGlvbnMJTlVMTAotI2RlZmluZSBfX3BhcmFpbnN0cnVjdGlvbnNfZW5kCU5VTEwKLSNlbmRpZgotCi1leHRlcm4gdm9pZCBhZGRfbm9wcyh2b2lkICppbnNucywgdW5zaWduZWQgaW50IGxlbik7Ci0KLS8qCi0gKiBDbGVhciBhbmQgcmVzdG9yZSB0aGUga2VybmVsIHdyaXRlLXByb3RlY3Rpb24gZmxhZyBvbiB0aGUgbG9jYWwgQ1BVLgotICogQWxsb3dzIHRoZSBrZXJuZWwgdG8gZWRpdCByZWFkLW9ubHkgcGFnZXMuCi0gKiBTaWRlLWVmZmVjdDogYW55IGludGVycnVwdCBoYW5kbGVyIHJ1bm5pbmcgYmV0d2VlbiBzYXZlIGFuZCByZXN0b3JlIHdpbGwgaGF2ZQotICogdGhlIGFiaWxpdHkgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHBhZ2VzLgotICoKLSAqIFdhcm5pbmc6Ci0gKiBDb2RlIHBhdGNoaW5nIGluIHRoZSBVUCBjYXNlIGlzIHNhZmUgaWYgTk1JcyBhbmQgTUNFIGhhbmRsZXJzIGFyZSBzdG9wcGVkIGFuZAotICogbm8gdGhyZWFkIGNhbiBiZSBwcmVlbXB0ZWQgaW4gdGhlIGluc3RydWN0aW9ucyBiZWluZyBtb2RpZmllZCAobm8gaXJldCB0byBhbgotICogaW52YWxpZCBpbnN0cnVjdGlvbiBwb3NzaWJsZSkgb3IgaWYgdGhlIGluc3RydWN0aW9ucyBhcmUgY2hhbmdlZCBmcm9tIGEKLSAqIGNvbnNpc3RlbnQgc3RhdGUgdG8gYW5vdGhlciBjb25zaXN0ZW50IHN0YXRlIGF0b21pY2FsbHkuCi0gKiBNb3JlIGNhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIG1vZGlmeWluZyBjb2RlIGluIHRoZSBTTVAgY2FzZSBiZWNhdXNlIG9mCi0gKiBJbnRlbCdzIGVycmF0YS4KLSAqIE9uIHRoZSBsb2NhbCBDUFUgeW91IG5lZWQgdG8gYmUgcHJvdGVjdGVkIGFnYWluIE5NSSBvciBNQ0UgaGFuZGxlcnMgc2VlaW5nIGFuCi0gKiBpbmNvbnNpc3RlbnQgaW5zdHJ1Y3Rpb24gd2hpbGUgeW91IHBhdGNoLgotICogVGhlIF9lYXJseSB2ZXJzaW9uIGV4cGVjdHMgdGhlIG1lbW9yeSB0byBhbHJlYWR5IGJlIFJXLgotICovCi0KLWV4dGVybiB2b2lkICp0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTsKLWV4dGVybiB2b2lkICp0ZXh0X3Bva2VfZWFybHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0FMVEVSTkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hbWRfaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hbWRfaW9tbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQxZDBkYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYW1kX2lvbW11LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgotICogICAgICAgICBMZW8gRHVyYW4gPGxlby5kdXJhbkBhbWQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKLSAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fQU1EX0lPTU1VX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQU1EX0lPTU1VX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgotCi0jaWZkZWYgQ09ORklHX0FNRF9JT01NVQotZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKTsKLWV4dGVybiB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCk7Ci1leHRlcm4gaXJxcmV0dXJuX3QgYW1kX2lvbW11X2ludF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19BTURfSU9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2FtZF9pb21tdV90eXBlcy5oIGIvaW5jbHVkZS9hc20teDg2L2FtZF9pb21tdV90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzA4NTg2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hbWRfaW9tbXVfdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgotICogICAgICAgICBMZW8gRHVyYW4gPGxlby5kdXJhbkBhbWQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKLSAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fQU1EX0lPTU1VX1RZUEVTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQU1EX0lPTU1VX1RZUEVTX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLS8qCi0gKiBzb21lIHNpemUgY2FsY3VsYXRpb24gY29uc3RhbnRzCi0gKi8KLSNkZWZpbmUgREVWX1RBQkxFX0VOVFJZX1NJWkUJCTMyCi0jZGVmaW5lIEFMSUFTX1RBQkxFX0VOVFJZX1NJWkUJCTIKLSNkZWZpbmUgUkxPT0tVUF9UQUJMRV9FTlRSWV9TSVpFCShzaXplb2Yodm9pZCAqKSkKLQotLyogTGVuZ3RoIG9mIHRoZSBNTUlPIHJlZ2lvbiBmb3IgdGhlIEFNRCBJT01NVSAqLwotI2RlZmluZSBNTUlPX1JFR0lPTl9MRU5HVEggICAgICAgMHg0MDAwCi0KLS8qIENhcGFiaWxpdHkgb2Zmc2V0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KLSNkZWZpbmUgTU1JT19DQVBfSERSX09GRlNFVAkweDAwCi0jZGVmaW5lIE1NSU9fUkFOR0VfT0ZGU0VUCTB4MGMKLSNkZWZpbmUgTU1JT19NSVNDX09GRlNFVAkweDEwCi0KLS8qIE1hc2tzLCBzaGlmdHMgYW5kIG1hY3JvcyB0byBwYXJzZSB0aGUgZGV2aWNlIHJhbmdlIGNhcGFiaWxpdHkgKi8KLSNkZWZpbmUgTU1JT19SQU5HRV9MRF9NQVNLCTB4ZmYwMDAwMDAKLSNkZWZpbmUgTU1JT19SQU5HRV9GRF9NQVNLCTB4MDBmZjAwMDAKLSNkZWZpbmUgTU1JT19SQU5HRV9CVVNfTUFTSwkweDAwMDBmZjAwCi0jZGVmaW5lIE1NSU9fUkFOR0VfTERfU0hJRlQJMjQKLSNkZWZpbmUgTU1JT19SQU5HRV9GRF9TSElGVAkxNgotI2RlZmluZSBNTUlPX1JBTkdFX0JVU19TSElGVAk4Ci0jZGVmaW5lIE1NSU9fR0VUX0xEKHgpICAoKCh4KSAmIE1NSU9fUkFOR0VfTERfTUFTSykgPj4gTU1JT19SQU5HRV9MRF9TSElGVCkKLSNkZWZpbmUgTU1JT19HRVRfRkQoeCkgICgoKHgpICYgTU1JT19SQU5HRV9GRF9NQVNLKSA+PiBNTUlPX1JBTkdFX0ZEX1NISUZUKQotI2RlZmluZSBNTUlPX0dFVF9CVVMoeCkgKCgoeCkgJiBNTUlPX1JBTkdFX0JVU19NQVNLKSA+PiBNTUlPX1JBTkdFX0JVU19TSElGVCkKLSNkZWZpbmUgTU1JT19NU0lfTlVNKHgpCSgoeCkgJiAweDFmKQotCi0vKiBGbGFnIG1hc2tzIGZvciB0aGUgQU1EIElPTU1VIGV4Y2x1c2lvbiByYW5nZSAqLwotI2RlZmluZSBNTUlPX0VYQ0xfRU5BQkxFX01BU0sgMHgwMVVMTAotI2RlZmluZSBNTUlPX0VYQ0xfQUxMT1dfTUFTSyAgMHgwMlVMTAotCi0vKiBVc2VkIG9mZnNldHMgaW50byB0aGUgTU1JTyBzcGFjZSAqLwotI2RlZmluZSBNTUlPX0RFVl9UQUJMRV9PRkZTRVQgICAweDAwMDAKLSNkZWZpbmUgTU1JT19DTURfQlVGX09GRlNFVCAgICAgMHgwMDA4Ci0jZGVmaW5lIE1NSU9fRVZUX0JVRl9PRkZTRVQgICAgIDB4MDAxMAotI2RlZmluZSBNTUlPX0NPTlRST0xfT0ZGU0VUICAgICAweDAwMTgKLSNkZWZpbmUgTU1JT19FWENMX0JBU0VfT0ZGU0VUICAgMHgwMDIwCi0jZGVmaW5lIE1NSU9fRVhDTF9MSU1JVF9PRkZTRVQgIDB4MDAyOAotI2RlZmluZSBNTUlPX0NNRF9IRUFEX09GRlNFVAkweDIwMDAKLSNkZWZpbmUgTU1JT19DTURfVEFJTF9PRkZTRVQJMHgyMDA4Ci0jZGVmaW5lIE1NSU9fRVZUX0hFQURfT0ZGU0VUCTB4MjAxMAotI2RlZmluZSBNTUlPX0VWVF9UQUlMX09GRlNFVAkweDIwMTgKLSNkZWZpbmUgTU1JT19TVEFUVVNfT0ZGU0VUCTB4MjAyMAotCi0vKiBNTUlPIHN0YXR1cyBiaXRzICovCi0jZGVmaW5lIE1NSU9fU1RBVFVTX0NPTV9XQUlUX0lOVF9NQVNLCTB4MDQKLQotLyogZXZlbnQgbG9nZ2luZyBjb25zdGFudHMgKi8KLSNkZWZpbmUgRVZFTlRfRU5UUllfU0laRQkweDEwCi0jZGVmaW5lIEVWRU5UX1RZUEVfU0hJRlQJMjgKLSNkZWZpbmUgRVZFTlRfVFlQRV9NQVNLCQkweGYKLSNkZWZpbmUgRVZFTlRfVFlQRV9JTExfREVWCTB4MQotI2RlZmluZSBFVkVOVF9UWVBFX0lPX0ZBVUxUCTB4MgotI2RlZmluZSBFVkVOVF9UWVBFX0RFVl9UQUJfRVJSCTB4MwotI2RlZmluZSBFVkVOVF9UWVBFX1BBR0VfVEFCX0VSUgkweDQKLSNkZWZpbmUgRVZFTlRfVFlQRV9JTExfQ01ECTB4NQotI2RlZmluZSBFVkVOVF9UWVBFX0NNRF9IQVJEX0VSUgkweDYKLSNkZWZpbmUgRVZFTlRfVFlQRV9JT1RMQl9JTlZfVE8JMHg3Ci0jZGVmaW5lIEVWRU5UX1RZUEVfSU5WX0RFVl9SRVEJMHg4Ci0jZGVmaW5lIEVWRU5UX0RFVklEX01BU0sJMHhmZmZmCi0jZGVmaW5lIEVWRU5UX0RFVklEX1NISUZUCTAKLSNkZWZpbmUgRVZFTlRfRE9NSURfTUFTSwkweGZmZmYKLSNkZWZpbmUgRVZFTlRfRE9NSURfU0hJRlQJMAotI2RlZmluZSBFVkVOVF9GTEFHU19NQVNLCTB4ZmZmCi0jZGVmaW5lIEVWRU5UX0ZMQUdTX1NISUZUCTB4MTAKLQotLyogZmVhdHVyZSBjb250cm9sIGJpdHMgKi8KLSNkZWZpbmUgQ09OVFJPTF9JT01NVV9FTiAgICAgICAgMHgwMFVMTAotI2RlZmluZSBDT05UUk9MX0hUX1RVTl9FTiAgICAgICAweDAxVUxMCi0jZGVmaW5lIENPTlRST0xfRVZUX0xPR19FTiAgICAgIDB4MDJVTEwKLSNkZWZpbmUgQ09OVFJPTF9FVlRfSU5UX0VOICAgICAgMHgwM1VMTAotI2RlZmluZSBDT05UUk9MX0NPTVdBSVRfRU4gICAgICAweDA0VUxMCi0jZGVmaW5lIENPTlRST0xfUEFTU1BXX0VOICAgICAgIDB4MDhVTEwKLSNkZWZpbmUgQ09OVFJPTF9SRVNQQVNTUFdfRU4gICAgMHgwOVVMTAotI2RlZmluZSBDT05UUk9MX0NPSEVSRU5UX0VOICAgICAweDBhVUxMCi0jZGVmaW5lIENPTlRST0xfSVNPQ19FTiAgICAgICAgIDB4MGJVTEwKLSNkZWZpbmUgQ09OVFJPTF9DTURCVUZfRU4gICAgICAgMHgwY1VMTAotI2RlZmluZSBDT05UUk9MX1BQRkxPR19FTiAgICAgICAweDBkVUxMCi0jZGVmaW5lIENPTlRST0xfUFBGSU5UX0VOICAgICAgIDB4MGVVTEwKLQotLyogY29tbWFuZCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIENNRF9DT01QTF9XQUlUICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQ01EX0lOVl9ERVZfRU5UUlkgICAgICAgMHgwMgotI2RlZmluZSBDTURfSU5WX0lPTU1VX1BBR0VTICAgICAweDAzCi0KLSNkZWZpbmUgQ01EX0NPTVBMX1dBSVRfU1RPUkVfTUFTSwkweDAxCi0jZGVmaW5lIENNRF9DT01QTF9XQUlUX0lOVF9NQVNLCQkweDAyCi0jZGVmaW5lIENNRF9JTlZfSU9NTVVfUEFHRVNfU0laRV9NQVNLCTB4MDEKLSNkZWZpbmUgQ01EX0lOVl9JT01NVV9QQUdFU19QREVfTUFTSwkweDAyCi0KLSNkZWZpbmUgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUwkweDdmZmZmZmZmZmZmZmZmZmZVTEwKLQotLyogbWFjcm9zIGFuZCBkZWZpbml0aW9ucyBmb3IgZGV2aWNlIHRhYmxlIGVudHJpZXMgKi8KLSNkZWZpbmUgREVWX0VOVFJZX1ZBTElEICAgICAgICAgMHgwMAotI2RlZmluZSBERVZfRU5UUllfVFJBTlNMQVRJT04gICAweDAxCi0jZGVmaW5lIERFVl9FTlRSWV9JUiAgICAgICAgICAgIDB4M2QKLSNkZWZpbmUgREVWX0VOVFJZX0lXICAgICAgICAgICAgMHgzZQotI2RlZmluZSBERVZfRU5UUllfTk9fUEFHRV9GQVVMVAkweDYyCi0jZGVmaW5lIERFVl9FTlRSWV9FWCAgICAgICAgICAgIDB4NjcKLSNkZWZpbmUgREVWX0VOVFJZX1NZU01HVDEgICAgICAgMHg2OAotI2RlZmluZSBERVZfRU5UUllfU1lTTUdUMiAgICAgICAweDY5Ci0jZGVmaW5lIERFVl9FTlRSWV9JTklUX1BBU1MgICAgIDB4YjgKLSNkZWZpbmUgREVWX0VOVFJZX0VJTlRfUEFTUyAgICAgMHhiOQotI2RlZmluZSBERVZfRU5UUllfTk1JX1BBU1MgICAgICAweGJhCi0jZGVmaW5lIERFVl9FTlRSWV9MSU5UMF9QQVNTICAgIDB4YmUKLSNkZWZpbmUgREVWX0VOVFJZX0xJTlQxX1BBU1MgICAgMHhiZgotI2RlZmluZSBERVZfRU5UUllfTU9ERV9NQVNLCTB4MDcKLSNkZWZpbmUgREVWX0VOVFJZX01PREVfU0hJRlQJMHgwOQotCi0vKiBjb25zdGFudHMgdG8gY29uZmlndXJlIHRoZSBjb21tYW5kIGJ1ZmZlciAqLwotI2RlZmluZSBDTURfQlVGRkVSX1NJWkUgICAgODE5MgotI2RlZmluZSBDTURfQlVGRkVSX0VOVFJJRVMgNTEyCi0jZGVmaW5lIE1NSU9fQ01EX1NJWkVfU0hJRlQgNTYKLSNkZWZpbmUgTU1JT19DTURfU0laRV81MTIgKDB4OVVMTCA8PCBNTUlPX0NNRF9TSVpFX1NISUZUKQotCi0vKiBjb25zdGFudHMgZm9yIGV2ZW50IGJ1ZmZlciBoYW5kbGluZyAqLwotI2RlZmluZSBFVlRfQlVGRkVSX1NJWkUJCTgxOTIgLyogNTEyIGVudHJpZXMgKi8KLSNkZWZpbmUgRVZUX0xFTl9NQVNLCQkoMHg5VUxMIDw8IDU2KQotCi0jZGVmaW5lIFBBR0VfTU9ERV8xX0xFVkVMIDB4MDEKLSNkZWZpbmUgUEFHRV9NT0RFXzJfTEVWRUwgMHgwMgotI2RlZmluZSBQQUdFX01PREVfM19MRVZFTCAweDAzCi0KLSNkZWZpbmUgSU9NTVVfUERFX05MXzAgICAweDAwMFVMTAotI2RlZmluZSBJT01NVV9QREVfTkxfMSAgIDB4MjAwVUxMCi0jZGVmaW5lIElPTU1VX1BERV9OTF8yICAgMHg0MDBVTEwKLSNkZWZpbmUgSU9NTVVfUERFX05MXzMgICAweDYwMFVMTAotCi0jZGVmaW5lIElPTU1VX1BURV9MMl9JTkRFWChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiAzMCkgJiAweDFmZlVMTCkKLSNkZWZpbmUgSU9NTVVfUFRFX0wxX0lOREVYKGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IDIxKSAmIDB4MWZmVUxMKQotI2RlZmluZSBJT01NVV9QVEVfTDBfSU5ERVgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gMTIpICYgMHgxZmZVTEwpCi0KLSNkZWZpbmUgSU9NTVVfTUFQX1NJWkVfTDEgKDFVTEwgPDwgMjEpCi0jZGVmaW5lIElPTU1VX01BUF9TSVpFX0wyICgxVUxMIDw8IDMwKQotI2RlZmluZSBJT01NVV9NQVBfU0laRV9MMyAoMVVMTCA8PCAzOSkKLQotI2RlZmluZSBJT01NVV9QVEVfUCAgKDFVTEwgPDwgMCkKLSNkZWZpbmUgSU9NTVVfUFRFX1RWICgxVUxMIDw8IDEpCi0jZGVmaW5lIElPTU1VX1BURV9VICAoMVVMTCA8PCA1OSkKLSNkZWZpbmUgSU9NTVVfUFRFX0ZDICgxVUxMIDw8IDYwKQotI2RlZmluZSBJT01NVV9QVEVfSVIgKDFVTEwgPDwgNjEpCi0jZGVmaW5lIElPTU1VX1BURV9JVyAoMVVMTCA8PCA2MikKLQotI2RlZmluZSBJT01NVV9MMV9QREUoYWRkcmVzcykgXAotCSgoYWRkcmVzcykgfCBJT01NVV9QREVfTkxfMSB8IElPTU1VX1BURV9QIHwgSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXKQotI2RlZmluZSBJT01NVV9MMl9QREUoYWRkcmVzcykgXAotCSgoYWRkcmVzcykgfCBJT01NVV9QREVfTkxfMiB8IElPTU1VX1BURV9QIHwgSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXKQotCi0jZGVmaW5lIElPTU1VX1BBR0VfTUFTSyAoKCgxVUxMIDw8IDUyKSAtIDEpICYgfjB4ZmZmVUxMKQotI2RlZmluZSBJT01NVV9QVEVfUFJFU0VOVChwdGUpICgocHRlKSAmIElPTU1VX1BURV9QKQotI2RlZmluZSBJT01NVV9QVEVfUEFHRShwdGUpIChwaHlzX3RvX3ZpcnQoKHB0ZSkgJiBJT01NVV9QQUdFX01BU0spKQotI2RlZmluZSBJT01NVV9QVEVfTU9ERShwdGUpICgoKHB0ZSkgPj4gOSkgJiAweDA3KQotCi0jZGVmaW5lIElPTU1VX1BST1RfTUFTSyAweDAzCi0jZGVmaW5lIElPTU1VX1BST1RfSVIgMHgwMQotI2RlZmluZSBJT01NVV9QUk9UX0lXIDB4MDIKLQotLyogSU9NTVUgY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIElPTU1VX0NBUF9JT1RMQiAgIDI0Ci0jZGVmaW5lIElPTU1VX0NBUF9OUENBQ0hFIDI2Ci0KLSNkZWZpbmUgTUFYX0RPTUFJTl9JRCA2NTUzNgotCi0vKiBGSVhNRTogbW92ZSB0aGlzIG1hY3JvIHRvIDxsaW51eC9wY2kuaD4gKi8KLSNkZWZpbmUgUENJX0JVUyh4KSAoKCh4KSA+PiA4KSAmIDB4ZmYpCi0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBnZW5lcmljIGRhdGEgZm9yICBJT01NVSBwcm90ZWN0aW9uIGRvbWFpbnMKLSAqIGluZGVwZW5kZW50IG9mIHRoZWlyIHVzZS4KLSAqLwotc3RydWN0IHByb3RlY3Rpb25fZG9tYWluIHsKLQlzcGlubG9ja190IGxvY2s7IC8qIG1vc3RseSB1c2VkIHRvIGxvY2sgdGhlIHBhZ2UgdGFibGUqLwotCXUxNiBpZDsJCSAvKiB0aGUgZG9tYWluIGlkIHdyaXR0ZW4gdG8gdGhlIGRldmljZSB0YWJsZSAqLwotCWludCBtb2RlOwkgLyogcGFnaW5nIG1vZGUgKDAtNiBsZXZlbHMpICovCi0JdTY0ICpwdF9yb290OwkgLyogcGFnZSB0YWJsZSByb290IHBvaW50ZXIgKi8KLQl2b2lkICpwcml2OwkgLyogcHJpdmF0ZSBkYXRhICovCi19OwotCi0vKgotICogRGF0YSBjb250YWluZXIgZm9yIGEgZG1hX29wcyBzcGVjaWZpYyBwcm90ZWN0aW9uIGRvbWFpbgotICovCi1zdHJ1Y3QgZG1hX29wc19kb21haW4gewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCS8qIGdlbmVyaWMgcHJvdGVjdGlvbiBkb21haW4gaW5mb3JtYXRpb24gKi8KLQlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gZG9tYWluOwotCi0JLyogc2l6ZSBvZiB0aGUgYXBlcnR1cmUgZm9yIHRoZSBtYXBwaW5ncyAqLwotCXVuc2lnbmVkIGxvbmcgYXBlcnR1cmVfc2l6ZTsKLQotCS8qIGFkZHJlc3Mgd2Ugc3RhcnQgdG8gc2VhcmNoIGZvciBmcmVlIGFkZHJlc3NlcyAqLwotCXVuc2lnbmVkIGxvbmcgbmV4dF9iaXQ7Ci0KLQkvKiBhZGRyZXNzIGFsbG9jYXRpb24gYml0bWFwICovCi0JdW5zaWduZWQgbG9uZyAqYml0bWFwOwotCi0JLyoKLQkgKiBBcnJheSBvZiBQVEUgcGFnZXMgZm9yIHRoZSBhcGVydHVyZS4gSW4gdGhpcyBhcnJheSB3ZSBzYXZlIGFsbCB0aGUKLQkgKiBsZWFmIHBhZ2VzIG9mIHRoZSBkb21haW4gcGFnZSB0YWJsZSB1c2VkIGZvciB0aGUgYXBlcnR1cmUuIFRoaXMgd2F5Ci0JICogd2UgZG9uJ3QgbmVlZCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlIHRvIGZpbmQgYSBzcGVjaWZpYyBQVEUuIFdlIGNhbgotCSAqIGp1c3QgY2FsY3VsYXRlIGl0cyBhZGRyZXNzIGluIGNvbnN0YW50IHRpbWUuCi0JICovCi0JdTY0ICoqcHRlX3BhZ2VzOwotCi0JLyogVGhpcyB3aWxsIGJlIHNldCB0byB0cnVlIHdoZW4gVExCIG5lZWRzIHRvIGJlIGZsdXNoZWQgKi8KLQlib29sIG5lZWRfZmx1c2g7Ci0KLQkvKgotCSAqIGlmIHRoaXMgaXMgYSBwcmVhbGxvY2F0ZWQgZG9tYWluLCBrZWVwIHRoZSBkZXZpY2UgZm9yIHdoaWNoIGl0IHdhcwotCSAqIHByZWFsbG9jYXRlZCBpbiB0aGlzIHZhcmlhYmxlCi0JICovCi0JdTE2IHRhcmdldF9kZXY7Ci19OwotCi0vKgotICogU3RydWN0dXJlIHdoZXJlIHdlIHNhdmUgaW5mb3JtYXRpb24gYWJvdXQgb25lIGhhcmR3YXJlIEFNRCBJT01NVSBpbiB0aGUKLSAqIHN5c3RlbS4KLSAqLwotc3RydWN0IGFtZF9pb21tdSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCi0JLyogbG9ja3MgdGhlIGFjY2Vzc2VzIHRvIHRoZSBoYXJkd2FyZSAqLwotCXNwaW5sb2NrX3QgbG9jazsKLQotCS8qIFBvaW50ZXIgdG8gUENJIGRldmljZSBvZiB0aGlzIElPTU1VICovCi0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCS8qCi0JICogQ2FwYWJpbGl0eSBwb2ludGVyLiBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIElPTU1VIHBlciBQQ0kKLQkgKiBkZXZpY2UgZnVuY3Rpb24gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQU1EIElPTU1VIGNhcGFiaWxpdHkKLQkgKiBwb2ludGVycy4KLQkgKi8KLQl1MTYgY2FwX3B0cjsKLQotCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgTU1JTyBzcGFjZSAqLwotCXU2NCBtbWlvX3BoeXM7Ci0JLyogdmlydHVhbCBhZGRyZXNzIG9mIE1NSU8gc3BhY2UgKi8KLQl1OCAqbW1pb19iYXNlOwotCi0JLyogY2FwYWJpbGl0aWVzIG9mIHRoYXQgSU9NTVUgcmVhZCBmcm9tIEFDUEkgKi8KLQl1MzIgY2FwOwotCi0JLyogcGNpIGRvbWFpbiBvZiB0aGlzIElPTU1VICovCi0JdTE2IHBjaV9zZWc7Ci0KLQkvKiBmaXJzdCBkZXZpY2UgdGhpcyBJT01NVSBoYW5kbGVzLiByZWFkIGZyb20gUENJICovCi0JdTE2IGZpcnN0X2RldmljZTsKLQkvKiBsYXN0IGRldmljZSB0aGlzIElPTU1VIGhhbmRsZXMuIHJlYWQgZnJvbSBQQ0kgKi8KLQl1MTYgbGFzdF9kZXZpY2U7Ci0KLQkvKiBzdGFydCBvZiBleGNsdXNpb24gcmFuZ2Ugb2YgdGhhdCBJT01NVSAqLwotCXU2NCBleGNsdXNpb25fc3RhcnQ7Ci0JLyogbGVuZ3RoIG9mIGV4Y2x1c2lvbiByYW5nZSBvZiB0aGF0IElPTU1VICovCi0JdTY0IGV4Y2x1c2lvbl9sZW5ndGg7Ci0KLQkvKiBjb21tYW5kIGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MgKi8KLQl1OCAqY21kX2J1ZjsKLQkvKiBzaXplIG9mIGNvbW1hbmQgYnVmZmVyICovCi0JdTMyIGNtZF9idWZfc2l6ZTsKLQotCS8qIGV2ZW50IGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MgKi8KLQl1OCAqZXZ0X2J1ZjsKLQkvKiBzaXplIG9mIGV2ZW50IGJ1ZmZlciAqLwotCXUzMiBldnRfYnVmX3NpemU7Ci0JLyogTVNJIG51bWJlciBmb3IgZXZlbnQgaW50ZXJydXB0ICovCi0JdTE2IGV2dF9tc2lfbnVtOwotCi0JLyogaWYgb25lLCB3ZSBuZWVkIHRvIHNlbmQgYSBjb21wbGV0aW9uIHdhaXQgY29tbWFuZCAqLwotCWludCBuZWVkX3N5bmM7Ci0KLQkvKiB0cnVlIGlmIGludGVycnVwdHMgZm9yIHRoaXMgSU9NTVUgYXJlIGFscmVhZHkgZW5hYmxlZCAqLwotCWJvb2wgaW50X2VuYWJsZWQ7Ci0KLQkvKiBkZWZhdWx0IGRtYV9vcHMgZG9tYWluIGZvciB0aGF0IElPTU1VICovCi0Jc3RydWN0IGRtYV9vcHNfZG9tYWluICpkZWZhdWx0X2RvbTsKLX07Ci0KLS8qCi0gKiBMaXN0IHdpdGggYWxsIElPTU1VcyBpbiB0aGUgc3lzdGVtLiBUaGlzIGxpc3QgaXMgbm90IGxvY2tlZCBiZWNhdXNlIGl0IGlzCi0gKiBvbmx5IHdyaXR0ZW4gYW5kIHJlYWQgYXQgZHJpdmVyIGluaXRpYWxpemF0aW9uIG9yIHN1c3BlbmQgdGltZQotICovCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhbWRfaW9tbXVfbGlzdDsKLQotLyoKLSAqIFN0cnVjdHVyZSBkZWZpbmluZyBvbmUgZW50cnkgaW4gdGhlIGRldmljZSB0YWJsZQotICovCi1zdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5IHsKLQl1MzIgZGF0YVs4XTsKLX07Ci0KLS8qCi0gKiBPbmUgZW50cnkgZm9yIHVuaXR5IG1hcHBpbmdzIHBhcnNlZCBvdXQgb2YgdGhlIEFDUEkgdGFibGUuCi0gKi8KLXN0cnVjdCB1bml0eV9tYXBfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCS8qIHN0YXJ0aW5nIGRldmljZSBpZCB0aGlzIGVudHJ5IGlzIHVzZWQgZm9yIChpbmNsdWRpbmcpICovCi0JdTE2IGRldmlkX3N0YXJ0OwotCS8qIGVuZCBkZXZpY2UgaWQgdGhpcyBlbnRyeSBpcyB1c2VkIGZvciAoaW5jbHVkaW5nKSAqLwotCXUxNiBkZXZpZF9lbmQ7Ci0KLQkvKiBzdGFydCBhZGRyZXNzIHRvIHVuaXR5IG1hcCAoaW5jbHVkaW5nKSAqLwotCXU2NCBhZGRyZXNzX3N0YXJ0OwotCS8qIGVuZCBhZGRyZXNzIHRvIHVuaXR5IG1hcCAoaW5jbHVkaW5nKSAqLwotCXU2NCBhZGRyZXNzX2VuZDsKLQotCS8qIHJlcXVpcmVkIHByb3RlY3Rpb24gKi8KLQlpbnQgcHJvdDsKLX07Ci0KLS8qCi0gKiBMaXN0IG9mIGFsbCB1bml0eSBtYXBwaW5ncy4gSXQgaXMgbm90IGxvY2tlZCBiZWNhdXNlIGFzIHJ1bnRpbWUgaXQgaXMgb25seQotICogcmVhZC4gSXQgaXMgY3JlYXRlZCBhdCBBQ1BJIHRhYmxlIHBhcnNpbmcgdGltZS4KLSAqLwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYW1kX2lvbW11X3VuaXR5X21hcDsKLQotLyoKLSAqIERhdGEgc3RydWN0dXJlcyBmb3IgZGV2aWNlIGhhbmRsaW5nCi0gKi8KLQotLyoKLSAqIERldmljZSB0YWJsZSB1c2VkIGJ5IGhhcmR3YXJlLiBSZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyBieSBzb2Z0d2FyZSBhcmUKLSAqIGxvY2tlZCB3aXRoIHRoZSBhbWRfaW9tbXVfcGRfdGFibGUgbG9jay4KLSAqLwotZXh0ZXJuIHN0cnVjdCBkZXZfdGFibGVfZW50cnkgKmFtZF9pb21tdV9kZXZfdGFibGU7Ci0KLS8qCi0gKiBBbGlhcyB0YWJsZSB0byBmaW5kIHJlcXVlc3RvciBpZHMgdG8gZGV2aWNlIGlkcy4gTm90IGxvY2tlZCBiZWNhdXNlIG9ubHkKLSAqIHJlYWQgb24gcnVudGltZS4KLSAqLwotZXh0ZXJuIHUxNiAqYW1kX2lvbW11X2FsaWFzX3RhYmxlOwotCi0vKgotICogUmV2ZXJzZSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgSU9NTVUgd2hpY2ggdHJhbnNsYXRlcyBhIHNwZWNpZmljIGRldmljZS4KLSAqLwotZXh0ZXJuIHN0cnVjdCBhbWRfaW9tbXUgKiphbWRfaW9tbXVfcmxvb2t1cF90YWJsZTsKLQotLyogc2l6ZSBvZiB0aGUgZG1hX29wcyBhcGVydHVyZSBhcyBwb3dlciBvZiAyICovCi1leHRlcm4gdW5zaWduZWQgYW1kX2lvbW11X2FwZXJ0dXJlX29yZGVyOwotCi0vKiBsYXJnZXN0IFBDSSBkZXZpY2UgaWQgd2UgZXhwZWN0IHRyYW5zbGF0aW9uIHJlcXVlc3RzIGZvciAqLwotZXh0ZXJuIHUxNiBhbWRfaW9tbXVfbGFzdF9iZGY7Ci0KLS8qIGRhdGEgc3RydWN0dXJlcyBmb3IgcHJvdGVjdGlvbiBkb21haW4gaGFuZGxpbmcgKi8KLWV4dGVybiBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKiphbWRfaW9tbXVfcGRfdGFibGU7Ci0KLS8qIGFsbG9jYXRpb24gYml0bWFwIGZvciBkb21haW4gaWRzICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyAqYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcDsKLQotLyogd2lsbCBiZSAxIGlmIGRldmljZSBpc29sYXRpb24gaXMgZW5hYmxlZCAqLwotZXh0ZXJuIGludCBhbWRfaW9tbXVfaXNvbGF0ZTsKLQotLyoKLSAqIElmIHRydWUsIHRoZSBhZGRyZXNzZXMgd2lsbCBiZSBmbHVzaGVkIG9uIHVubWFwIHRpbWUsIG5vdCB3aGVuCi0gKiB0aGV5IGFyZSByZXVzZWQKLSAqLwotZXh0ZXJuIGJvb2wgYW1kX2lvbW11X3VubWFwX2ZsdXNoOwotCi0vKiB0YWtlcyBhIFBDSSBkZXZpY2UgaWQgYW5kIHByaW50cyBpdCBvdXQgaW4gYSByZWFkYWJsZSBmb3JtICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfZGV2aWQodTE2IGRldmlkLCBpbnQgbmwpCi17Ci0JaW50IGJ1cyA9IGRldmlkID4+IDg7Ci0JaW50IGRldiA9IGRldmlkID4+IDMgJiAweDFmOwotCWludCBmbiAgPSBkZXZpZCAmIDB4MDc7Ci0KLQlwcmludGsoIiUwMng6JTAyeC4leCIsIGJ1cywgZGV2LCBmbik7Ci0JaWYgKG5sKQotCQlwcmludGsoIlxuIik7Ci19Ci0KLS8qIHRha2VzIGJ1cyBhbmQgZGV2aWNlL2Z1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBkZXZpY2UgaWQKLSAqIEZJWE1FOiBzaG91bGQgdGhhdCBiZSBpbiBnZW5lcmljIFBDSSBjb2RlPyAqLwotc3RhdGljIGlubGluZSB1MTYgY2FsY19kZXZpZCh1OCBidXMsIHU4IGRldmZuKQotewotCXJldHVybiAoKCh1MTYpYnVzKSA8PCA4KSB8IGRldmZuOwotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQU1EX0lPTU1VX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzZhMDgzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19BUElDX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQVBJQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21zci5oPgotCi0jZGVmaW5lIEFSQ0hfQVBJQ1RJTUVSX1NUT1BTX09OX0MzCTEKLQotLyoKLSAqIERlYnVnZ2luZyBtYWNyb3MKLSAqLwotI2RlZmluZSBBUElDX1FVSUVUICAgMAotI2RlZmluZSBBUElDX1ZFUkJPU0UgMQotI2RlZmluZSBBUElDX0RFQlVHICAgMgotCi0vKgotICogRGVmaW5lIHRoZSBkZWZhdWx0IGxldmVsIG9mIG91dHB1dCB0byBiZSB2ZXJ5IGxpdHRsZQotICogVGhpcyBjYW4gYmUgdHVybmVkIHVwIGJ5IHVzaW5nIGFwaWM9dmVyYm9zZSBmb3IgbW9yZQotICogaW5mb3JtYXRpb24gYW5kIGFwaWM9ZGVidWcgZm9yIF9sb3RzXyBvZiBpbmZvcm1hdGlvbi4KLSAqIGFwaWNfdmVyYm9zaXR5IGlzIGRlZmluZWQgaW4gYXBpYy5jCi0gKi8KLSNkZWZpbmUgYXBpY19wcmludGsodiwgcywgYS4uLikgZG8geyAgICAgICBcCi0JCWlmICgodikgPD0gYXBpY192ZXJib3NpdHkpIFwKLQkJCXByaW50ayhzLCAjI2EpOyAgICBcCi0JfSB3aGlsZSAoMCkKLQotCi1leHRlcm4gdm9pZCBnZW5lcmljX2FwaWNfcHJvYmUodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKLWV4dGVybiBpbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKLQotZXh0ZXJuIGludCBpb2FwaWNfZm9yY2U7Ci0KLWV4dGVybiBpbnQgZGlzYWJsZV9hcGljOwotLyoKLSAqIEJhc2ljIGZ1bmN0aW9ucyBhY2Nlc3NpbmcgQVBJQ3MuCi0gKi8KLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlCi0jZGVmaW5lIHNldHVwX2Jvb3RfY2xvY2sgc2V0dXBfYm9vdF9BUElDX2Nsb2NrCi0jZGVmaW5lIHNldHVwX3NlY29uZGFyeV9jbG9jayBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jawotI2VuZGlmCi0KLWV4dGVybiBpbnQgaXNfdnNtcF9ib3godm9pZCk7Ci1leHRlcm4gdm9pZCB4YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpOwotZXh0ZXJuIHUzMiBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUodm9pZCk7Ci1leHRlcm4gdTY0IHhhcGljX2ljcl9yZWFkKHZvaWQpOwotZXh0ZXJuIHZvaWQgeGFwaWNfaWNyX3dyaXRlKHUzMiwgdTMyKTsKLWV4dGVybiBpbnQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfYXBpY19tZW1fd3JpdGUodTMyIHJlZywgdTMyIHYpCi17Ci0Jdm9sYXRpbGUgdTMyICphZGRyID0gKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UgKyByZWcpOwotCi0JYWx0ZXJuYXRpdmVfaW8oIm1vdmwgJTAsICUxIiwgInhjaGdsICUwLCAlMSIsIFg4Nl9GRUFUVVJFXzExQVAsCi0JCSAgICAgICBBU01fT1VUUFVUMigiPXIiICh2KSwgIj1tIiAoKmFkZHIpKSwKLQkJICAgICAgIEFTTV9PVVRQVVQyKCIwIiAodiksICJtIiAoKmFkZHIpKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIG5hdGl2ZV9hcGljX21lbV9yZWFkKHUzMiByZWcpCi17Ci0JcmV0dXJuICooKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UgKyByZWcpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9hcGljX21zcl93cml0ZSh1MzIgcmVnLCB1MzIgdikKLXsKLQlpZiAocmVnID09IEFQSUNfREZSIHx8IHJlZyA9PSBBUElDX0lEIHx8IHJlZyA9PSBBUElDX0xEUiB8fAotCSAgICByZWcgPT0gQVBJQ19MVlIpCi0JCXJldHVybjsKLQotCXdybXNyKEFQSUNfQkFTRV9NU1IgKyAocmVnID4+IDQpLCB2LCAwKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbmF0aXZlX2FwaWNfbXNyX3JlYWQodTMyIHJlZykKLXsKLQl1MzIgbG93LCBoaWdoOwotCi0JaWYgKHJlZyA9PSBBUElDX0RGUikKLQkJcmV0dXJuIC0xOwotCi0JcmRtc3IoQVBJQ19CQVNFX01TUiArIChyZWcgPj4gNCksIGxvdywgaGlnaCk7Ci0JcmV0dXJuIGxvdzsKLX0KLQotI2lmbmRlZiBDT05GSUdfWDg2XzMyCi1leHRlcm4gaW50IHgyYXBpYywgeDJhcGljX3ByZWVuYWJsZWQ7Ci1leHRlcm4gdm9pZCBjaGVja194MmFwaWModm9pZCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfeDJhcGljKHZvaWQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKTsKLWV4dGVybiB2b2lkIHgyYXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKTsKLSNlbmRpZgotCi1zdHJ1Y3QgYXBpY19vcHMgewotCXUzMiAoKnJlYWQpKHUzMiByZWcpOwotCXZvaWQgKCp3cml0ZSkodTMyIHJlZywgdTMyIHYpOwotCXU2NCAoKmljcl9yZWFkKSh2b2lkKTsKLQl2b2lkICgqaWNyX3dyaXRlKSh1MzIgbG93LCB1MzIgaGlnaCk7Ci0Jdm9pZCAoKndhaXRfaWNyX2lkbGUpKHZvaWQpOwotCXUzMiAoKnNhZmVfd2FpdF9pY3JfaWRsZSkodm9pZCk7Ci19OwotCi1leHRlcm4gc3RydWN0IGFwaWNfb3BzICphcGljX29wczsKLQotI2RlZmluZSBhcGljX3JlYWQgKGFwaWNfb3BzLT5yZWFkKQotI2RlZmluZSBhcGljX3dyaXRlIChhcGljX29wcy0+d3JpdGUpCi0jZGVmaW5lIGFwaWNfaWNyX3JlYWQgKGFwaWNfb3BzLT5pY3JfcmVhZCkKLSNkZWZpbmUgYXBpY19pY3Jfd3JpdGUgKGFwaWNfb3BzLT5pY3Jfd3JpdGUpCi0jZGVmaW5lIGFwaWNfd2FpdF9pY3JfaWRsZSAoYXBpY19vcHMtPndhaXRfaWNyX2lkbGUpCi0jZGVmaW5lIHNhZmVfYXBpY193YWl0X2ljcl9pZGxlIChhcGljX29wcy0+c2FmZV93YWl0X2ljcl9pZGxlKQotCi1leHRlcm4gaW50IGdldF9waHlzaWNhbF9icm9hZGNhc3Qodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWNrX3gyQVBJQ19pcnEodm9pZCkKLXsKLQkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KLQluYXRpdmVfYXBpY19tc3Jfd3JpdGUoQVBJQ19FT0ksIDApOwotfQotI2VuZGlmCi0KLQotc3RhdGljIGlubGluZSB2b2lkIGFja19BUElDX2lycSh2b2lkKQotewotCS8qCi0JICogYWNrX0FQSUNfaXJxKCkgYWN0dWFsbHkgZ2V0cyBjb21waWxlZCBhcyBhIHNpbmdsZSBpbnN0cnVjdGlvbgotCSAqIC4uLiB5dW1taWUuCi0JICovCi0KLQkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KLQlhcGljX3dyaXRlKEFQSUNfRU9JLCAwKTsKLX0KLQotZXh0ZXJuIGludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpOwotZXh0ZXJuIHZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKTsKLWV4dGVybiB2b2lkIGNvbm5lY3RfYnNwX0FQSUModm9pZCk7Ci1leHRlcm4gdm9pZCBkaXNjb25uZWN0X2JzcF9BUElDKGludCB2aXJ0X3dpcmVfc2V0dXApOwotZXh0ZXJuIHZvaWQgZGlzYWJsZV9sb2NhbF9BUElDKHZvaWQpOwotZXh0ZXJuIHZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCk7Ci1leHRlcm4gaW50IHZlcmlmeV9sb2NhbF9BUElDKHZvaWQpOwotZXh0ZXJuIHZvaWQgY2FjaGVfQVBJQ19yZWdpc3RlcnModm9pZCk7Ci1leHRlcm4gdm9pZCBzeW5jX0FyYl9JRHModm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X2JzcF9BUElDKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKTsKLWV4dGVybiB2b2lkIGVuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCk7Ci1leHRlcm4gaW50IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCh2b2lkKTsKLQotLyoKLSAqIE9uIDMyYml0IHRoaXMgaXMgbWFjaC14eHggbG9jYWwKLSAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLWV4dGVybiB2b2lkIGVhcmx5X2luaXRfbGFwaWNfbWFwcGluZyh2b2lkKTsKLWV4dGVybiBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNfaXNfY2x1c3RlcmVkX2JveCh2b2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLWV4dGVybiB1OCBzZXR1cF9BUElDX2VpbHZ0X21jZSh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKTsKLWV4dGVybiB1OCBzZXR1cF9BUElDX2VpbHZ0X2licyh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKTsKLQotCi0jZWxzZSAvKiAhQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkgeyB9Ci0jZGVmaW5lIGxvY2FsX2FwaWNfdGltZXJfYzJfb2sJCTEKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCkgeyB9Ci0KLSNlbmRpZiAvKiAhQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS14ODYvYXBpY2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTIyYzg1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTcgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19BUElDREVGX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQVBJQ0RFRl9ICi0KLS8qCi0gKiBDb25zdGFudHMgZm9yIHZhcmlvdXMgSW50ZWwgQVBJQ3MuIChsb2NhbCBBUElDLCBJT0FQSUMsIGV0Yy4pCi0gKgotICogQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4sIDE5OTUuCi0gKiBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4sIDE5OTksIDIwMDAKLSAqLwotCi0jZGVmaW5lCUFQSUNfREVGQVVMVF9QSFlTX0JBU0UJMHhmZWUwMDAwMAotCi0jZGVmaW5lCUFQSUNfSUQJCTB4MjAKLQotI2RlZmluZQlBUElDX0xWUgkweDMwCi0jZGVmaW5lCQlBUElDX0xWUl9NQVNLCQkweEZGMDBGRgotI2RlZmluZQkJR0VUX0FQSUNfVkVSU0lPTih4KQkoKHgpICYgMHhGRnUpCi0jZGVmaW5lCQlHRVRfQVBJQ19NQVhMVlQoeCkJKCgoeCkgPj4gMTYpICYgMHhGRnUpCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyAgZGVmaW5lCUFQSUNfSU5URUdSQVRFRCh4KQkoKHgpICYgMHhGMHUpCi0jZWxzZQotIyAgZGVmaW5lCUFQSUNfSU5URUdSQVRFRCh4KQkoMSkKLSNlbmRpZgotI2RlZmluZQkJQVBJQ19YQVBJQyh4KQkJKCh4KSA+PSAweDE0KQotI2RlZmluZQlBUElDX1RBU0tQUkkJMHg4MAotI2RlZmluZQkJQVBJQ19UUFJJX01BU0sJCTB4RkZ1Ci0jZGVmaW5lCUFQSUNfQVJCUFJJCTB4OTAKLSNkZWZpbmUJCUFQSUNfQVJCUFJJX01BU0sJMHhGRnUKLSNkZWZpbmUJQVBJQ19QUk9DUFJJCTB4QTAKLSNkZWZpbmUJQVBJQ19FT0kJMHhCMAotI2RlZmluZQkJQVBJQ19FSU9fQUNLCQkweDAKLSNkZWZpbmUJQVBJQ19SUlIJMHhDMAotI2RlZmluZQlBUElDX0xEUgkweEQwCi0jZGVmaW5lCQlBUElDX0xEUl9NQVNLCQkoMHhGRnUgPDwgMjQpCi0jZGVmaW5lCQlHRVRfQVBJQ19MT0dJQ0FMX0lEKHgpCSgoKHgpID4+IDI0KSAmIDB4RkZ1KQotI2RlZmluZQkJU0VUX0FQSUNfTE9HSUNBTF9JRCh4KQkoKCh4KSA8PCAyNCkpCi0jZGVmaW5lCQlBUElDX0FMTF9DUFVTCQkweEZGdQotI2RlZmluZQlBUElDX0RGUgkweEUwCi0jZGVmaW5lCQlBUElDX0RGUl9DTFVTVEVSCQkweDBGRkZGRkZGdWwKLSNkZWZpbmUJCUFQSUNfREZSX0ZMQVQJCQkweEZGRkZGRkZGdWwKLSNkZWZpbmUJQVBJQ19TUElWCTB4RjAKLSNkZWZpbmUJCUFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRAkoMSA8PCA5KQotI2RlZmluZQkJQVBJQ19TUElWX0FQSUNfRU5BQkxFRAkJKDEgPDwgOCkKLSNkZWZpbmUJQVBJQ19JU1IJMHgxMDAKLSNkZWZpbmUJQVBJQ19JU1JfTlIgICAgIDB4OCAgICAgLyogTnVtYmVyIG9mIDMyIGJpdCBJU1IgcmVnaXN0ZXJzLiAqLwotI2RlZmluZQlBUElDX1RNUgkweDE4MAotI2RlZmluZQlBUElDX0lSUgkweDIwMAotI2RlZmluZQlBUElDX0VTUgkweDI4MAotI2RlZmluZQkJQVBJQ19FU1JfU0VORF9DUwkweDAwMDAxCi0jZGVmaW5lCQlBUElDX0VTUl9SRUNWX0NTCTB4MDAwMDIKLSNkZWZpbmUJCUFQSUNfRVNSX1NFTkRfQUNDCTB4MDAwMDQKLSNkZWZpbmUJCUFQSUNfRVNSX1JFQ1ZfQUNDCTB4MDAwMDgKLSNkZWZpbmUJCUFQSUNfRVNSX1NFTkRJTEwJMHgwMDAyMAotI2RlZmluZQkJQVBJQ19FU1JfUkVDVklMTAkweDAwMDQwCi0jZGVmaW5lCQlBUElDX0VTUl9JTExSRUdBCTB4MDAwODAKLSNkZWZpbmUJQVBJQ19JQ1IJMHgzMDAKLSNkZWZpbmUJCUFQSUNfREVTVF9TRUxGCQkweDQwMDAwCi0jZGVmaW5lCQlBUElDX0RFU1RfQUxMSU5DCTB4ODAwMDAKLSNkZWZpbmUJCUFQSUNfREVTVF9BTExCVVQJMHhDMDAwMAotI2RlZmluZQkJQVBJQ19JQ1JfUlJfTUFTSwkweDMwMDAwCi0jZGVmaW5lCQlBUElDX0lDUl9SUl9JTlZBTElECTB4MDAwMDAKLSNkZWZpbmUJCUFQSUNfSUNSX1JSX0lOUFJPRwkweDEwMDAwCi0jZGVmaW5lCQlBUElDX0lDUl9SUl9WQUxJRAkweDIwMDAwCi0jZGVmaW5lCQlBUElDX0lOVF9MRVZFTFRSSUcJMHgwODAwMAotI2RlZmluZQkJQVBJQ19JTlRfQVNTRVJUCQkweDA0MDAwCi0jZGVmaW5lCQlBUElDX0lDUl9CVVNZCQkweDAxMDAwCi0jZGVmaW5lCQlBUElDX0RFU1RfTE9HSUNBTAkweDAwODAwCi0jZGVmaW5lCQlBUElDX0RFU1RfUEhZU0lDQUwJMHgwMDAwMAotI2RlZmluZQkJQVBJQ19ETV9GSVhFRAkJMHgwMDAwMAotI2RlZmluZQkJQVBJQ19ETV9MT1dFU1QJCTB4MDAxMDAKLSNkZWZpbmUJCUFQSUNfRE1fU01JCQkweDAwMjAwCi0jZGVmaW5lCQlBUElDX0RNX1JFTVJECQkweDAwMzAwCi0jZGVmaW5lCQlBUElDX0RNX05NSQkJMHgwMDQwMAotI2RlZmluZQkJQVBJQ19ETV9JTklUCQkweDAwNTAwCi0jZGVmaW5lCQlBUElDX0RNX1NUQVJUVVAJCTB4MDA2MDAKLSNkZWZpbmUJCUFQSUNfRE1fRVhUSU5UCQkweDAwNzAwCi0jZGVmaW5lCQlBUElDX1ZFQ1RPUl9NQVNLCTB4MDAwRkYKLSNkZWZpbmUJQVBJQ19JQ1IyCTB4MzEwCi0jZGVmaW5lCQlHRVRfQVBJQ19ERVNUX0ZJRUxEKHgpCSgoKHgpID4+IDI0KSAmIDB4RkYpCi0jZGVmaW5lCQlTRVRfQVBJQ19ERVNUX0ZJRUxEKHgpCSgoeCkgPDwgMjQpCi0jZGVmaW5lCUFQSUNfTFZUVAkweDMyMAotI2RlZmluZQlBUElDX0xWVFRITVIJMHgzMzAKLSNkZWZpbmUJQVBJQ19MVlRQQwkweDM0MAotI2RlZmluZQlBUElDX0xWVDAJMHgzNTAKLSNkZWZpbmUJCUFQSUNfTFZUX1RJTUVSX0JBU0VfTUFTSwkoMHgzIDw8IDE4KQotI2RlZmluZQkJR0VUX0FQSUNfVElNRVJfQkFTRSh4KQkJKCgoeCkgPj4gMTgpICYgMHgzKQotI2RlZmluZQkJU0VUX0FQSUNfVElNRVJfQkFTRSh4KQkJKCgoeCkgPDwgMTgpKQotI2RlZmluZQkJQVBJQ19USU1FUl9CQVNFX0NMS0lOCQkweDAKLSNkZWZpbmUJCUFQSUNfVElNRVJfQkFTRV9UTUJBU0UJCTB4MQotI2RlZmluZQkJQVBJQ19USU1FUl9CQVNFX0RJVgkJMHgyCi0jZGVmaW5lCQlBUElDX0xWVF9USU1FUl9QRVJJT0RJQwkJKDEgPDwgMTcpCi0jZGVmaW5lCQlBUElDX0xWVF9NQVNLRUQJCQkoMSA8PCAxNikKLSNkZWZpbmUJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIJCSgxIDw8IDE1KQotI2RlZmluZQkJQVBJQ19MVlRfUkVNT1RFX0lSUgkJKDEgPDwgMTQpCi0jZGVmaW5lCQlBUElDX0lOUFVUX1BPTEFSSVRZCQkoMSA8PCAxMykKLSNkZWZpbmUJCUFQSUNfU0VORF9QRU5ESU5HCQkoMSA8PCAxMikKLSNkZWZpbmUJCUFQSUNfTU9ERV9NQVNLCQkJMHg3MDAKLSNkZWZpbmUJCUdFVF9BUElDX0RFTElWRVJZX01PREUoeCkJKCgoeCkgPj4gOCkgJiAweDcpCi0jZGVmaW5lCQlTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHgsIHkpCSgoKHgpICYgfjB4NzAwKSB8ICgoeSkgPDwgOCkpCi0jZGVmaW5lCQkJQVBJQ19NT0RFX0ZJWEVECQkweDAKLSNkZWZpbmUJCQlBUElDX01PREVfTk1JCQkweDQKLSNkZWZpbmUJCQlBUElDX01PREVfRVhUSU5UCTB4NwotI2RlZmluZQlBUElDX0xWVDEJMHgzNjAKLSNkZWZpbmUJQVBJQ19MVlRFUlIJMHgzNzAKLSNkZWZpbmUJQVBJQ19UTUlDVAkweDM4MAotI2RlZmluZQlBUElDX1RNQ0NUCTB4MzkwCi0jZGVmaW5lCUFQSUNfVERDUgkweDNFMAotI2RlZmluZSBBUElDX1NFTEZfSVBJCTB4M0YwCi0jZGVmaW5lCQlBUElDX1REUl9ESVZfVE1CQVNFCSgxIDw8IDIpCi0jZGVmaW5lCQlBUElDX1REUl9ESVZfMQkJMHhCCi0jZGVmaW5lCQlBUElDX1REUl9ESVZfMgkJMHgwCi0jZGVmaW5lCQlBUElDX1REUl9ESVZfNAkJMHgxCi0jZGVmaW5lCQlBUElDX1REUl9ESVZfOAkJMHgyCi0jZGVmaW5lCQlBUElDX1REUl9ESVZfMTYJCTB4MwotI2RlZmluZQkJQVBJQ19URFJfRElWXzMyCQkweDgKLSNkZWZpbmUJCUFQSUNfVERSX0RJVl82NAkJMHg5Ci0jZGVmaW5lCQlBUElDX1REUl9ESVZfMTI4CTB4QQotI2RlZmluZQlBUElDX0VJTFZUMCAgICAgMHg1MDAKLSNkZWZpbmUJCUFQSUNfRUlMVlRfTlJfQU1EX0s4CTEJLyogIyBvZiBleHRlbmRlZCBpbnRlcnJ1cHRzICovCi0jZGVmaW5lCQlBUElDX0VJTFZUX05SX0FNRF8xMEgJNAotI2RlZmluZQkJQVBJQ19FSUxWVF9MVlRPRkYoeCkJKCgoeCkgPj4gNCkgJiAweEYpCi0jZGVmaW5lCQlBUElDX0VJTFZUX01TR19GSVgJMHgwCi0jZGVmaW5lCQlBUElDX0VJTFZUX01TR19TTUkJMHgyCi0jZGVmaW5lCQlBUElDX0VJTFZUX01TR19OTUkJMHg0Ci0jZGVmaW5lCQlBUElDX0VJTFZUX01TR19FWFQJMHg3Ci0jZGVmaW5lCQlBUElDX0VJTFZUX01BU0tFRAkoMSA8PCAxNikKLSNkZWZpbmUJQVBJQ19FSUxWVDEgICAgIDB4NTEwCi0jZGVmaW5lCUFQSUNfRUlMVlQyICAgICAweDUyMAotI2RlZmluZQlBUElDX0VJTFZUMyAgICAgMHg1MzAKLQotI2RlZmluZSBBUElDX0JBU0UgKGZpeF90b192aXJ0KEZJWF9BUElDX0JBU0UpKQotI2RlZmluZSBBUElDX0JBU0VfTVNSCTB4ODAwCi0jZGVmaW5lIFgyQVBJQ19FTkFCTEUJKDFVTCA8PCAxMCkKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIE1BWF9JT19BUElDUyA2NAotI2Vsc2UKLSMgZGVmaW5lIE1BWF9JT19BUElDUyAxMjgKLSMgZGVmaW5lIE1BWF9MT0NBTF9BUElDIDMyNzY4Ci0jZW5kaWYKLQotLyoKLSAqIEFsbCB4ODYtNjQgc3lzdGVtcyBhcmUgeEFQSUMgY29tcGF0aWJsZS4KLSAqIEluIHRoZSBmb2xsb3dpbmcsICJhcGljaWQiIGlzIGEgcGh5c2ljYWwgQVBJQyBJRC4KLSAqLwotI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfU0hJRlQJNAotI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfTUFTSwkoKDF1IDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkgLSAxKQotI2RlZmluZSBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSwkoWEFQSUNfREVTVF9DUFVTX01BU0sgPDwgWEFQSUNfREVTVF9DUFVTX1NISUZUKQotI2RlZmluZSBBUElDX0NMVVNURVIoYXBpY2lkKQkoKGFwaWNpZCkgJiBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSykKLSNkZWZpbmUgQVBJQ19DTFVTVEVSSUQoYXBpY2lkKQkoQVBJQ19DTFVTVEVSKGFwaWNpZCkgPj4gWEFQSUNfREVTVF9DUFVTX1NISUZUKQotI2RlZmluZSBBUElDX0NQVUlEKGFwaWNpZCkJKChhcGljaWQpICYgWEFQSUNfREVTVF9DUFVTX01BU0spCi0jZGVmaW5lIE5VTV9BUElDX0NMVVNURVJTCSgoQkFEX0FQSUNJRCArIDEpID4+IFhBUElDX0RFU1RfQ1BVU19TSElGVCkKLQotLyoKLSAqIHRoZSBsb2NhbCBBUElDIHJlZ2lzdGVyIHN0cnVjdHVyZSwgbWVtb3J5IG1hcHBlZC4gTm90IHRlcnJpYmx5IHdlbGwKLSAqIHRlc3RlZCwgYnV0IHdlIG1pZ2h0IGV2ZW50dWFsbHkgdXNlIHRoaXMgb25lIGluIHRoZSBmdXR1cmUgLSB0aGUKLSAqIHByb2JsZW0gd2h5IHdlIGNhbm5vdCB1c2UgaXQgcmlnaHQgbm93IGlzIHRoZSBQNSBBUElDLCBpdCBoYXMgYW4KLSAqIGVycmF0YSB3aGljaCBjYW5ub3QgdGFrZSA4LWJpdCByZWFkcyBhbmQgd3JpdGVzLCBvbmx5IDMyLWJpdCBvbmVzIC4uLgotICovCi0jZGVmaW5lIHUzMiB1bnNpZ25lZCBpbnQKLQotc3RydWN0IGxvY2FsX2FwaWMgewotCi0vKjAwMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDE7Ci0KLS8qMDEwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMjsKLQotLyowMjAqLwlzdHJ1Y3QgeyAvKiBBUElDIElEIFJlZ2lzdGVyICovCi0JCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI0LAotCQkJcGh5c19hcGljX2lkCTogIDQsCi0JCQlfX3Jlc2VydmVkXzIJOiAgNDsKLQkJdTMyIF9fcmVzZXJ2ZWRbM107Ci0JfSBpZDsKLQotLyowMzAqLwljb25zdAotCXN0cnVjdCB7IC8qIEFQSUMgVmVyc2lvbiBSZWdpc3RlciAqLwotCQl1MzIgICB2ZXJzaW9uCQk6ICA4LAotCQkJX19yZXNlcnZlZF8xCTogIDgsCi0JCQltYXhfbHZ0CQk6ICA4LAotCQkJX19yZXNlcnZlZF8yCTogIDg7Ci0JCXUzMiBfX3Jlc2VydmVkWzNdOwotCX0gdmVyc2lvbjsKLQotLyowNDAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAzOwotCi0vKjA1MCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDQ7Ci0KLS8qMDYwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNTsKLQotLyowNzAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA2OwotCi0vKjA4MCovCXN0cnVjdCB7IC8qIFRhc2sgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KLQkJdTMyICAgcHJpb3JpdHkJOiAgOCwKLQkJCV9fcmVzZXJ2ZWRfMQk6IDI0OwotCQl1MzIgX19yZXNlcnZlZF8yWzNdOwotCX0gdHByOwotCi0vKjA5MCovCWNvbnN0Ci0Jc3RydWN0IHsgLyogQXJiaXRyYXRpb24gUHJpb3JpdHkgUmVnaXN0ZXIgKi8KLQkJdTMyICAgcHJpb3JpdHkJOiAgOCwKLQkJCV9fcmVzZXJ2ZWRfMQk6IDI0OwotCQl1MzIgX19yZXNlcnZlZF8yWzNdOwotCX0gYXByOwotCi0vKjBBMCovCWNvbnN0Ci0Jc3RydWN0IHsgLyogUHJvY2Vzc29yIFByaW9yaXR5IFJlZ2lzdGVyICovCi0JCXUzMiAgIHByaW9yaXR5CTogIDgsCi0JCQlfX3Jlc2VydmVkXzEJOiAyNDsKLQkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKLQl9IHBwcjsKLQotLyowQjAqLwlzdHJ1Y3QgeyAvKiBFbmQgT2YgSW50ZXJydXB0IFJlZ2lzdGVyICovCi0JCXUzMiAgIGVvaTsKLQkJdTMyIF9fcmVzZXJ2ZWRbM107Ci0JfSBlb2k7Ci0KLS8qMEMwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNzsKLQotLyowRDAqLwlzdHJ1Y3QgeyAvKiBMb2dpY2FsIERlc3RpbmF0aW9uIFJlZ2lzdGVyICovCi0JCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI0LAotCQkJbG9naWNhbF9kZXN0CTogIDg7Ci0JCXUzMiBfX3Jlc2VydmVkXzJbM107Ci0JfSBsZHI7Ci0KLS8qMEUwKi8Jc3RydWN0IHsgLyogRGVzdGluYXRpb24gRm9ybWF0IFJlZ2lzdGVyICovCi0JCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI4LAotCQkJbW9kZWwJCTogIDQ7Ci0JCXUzMiBfX3Jlc2VydmVkXzJbM107Ci0JfSBkZnI7Ci0KLS8qMEYwKi8Jc3RydWN0IHsgLyogU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLwotCQl1MzIJc3B1cmlvdXNfdmVjdG9yCTogIDgsCi0JCQlhcGljX2VuYWJsZWQJOiAgMSwKLQkJCWZvY3VzX2NwdQk6ICAxLAotCQkJX19yZXNlcnZlZF8yCTogMjI7Ci0JCXUzMiBfX3Jlc2VydmVkXzNbM107Ci0JfSBzdnI7Ci0KLS8qMTAwKi8Jc3RydWN0IHsgLyogSW4gU2VydmljZSBSZWdpc3RlciAqLwotLyoxNzAqLwkJdTMyIGJpdGZpZWxkOwotCQl1MzIgX19yZXNlcnZlZFszXTsKLQl9IGlzciBbOF07Ci0KLS8qMTgwKi8Jc3RydWN0IHsgLyogVHJpZ2dlciBNb2RlIFJlZ2lzdGVyICovCi0vKjFGMCovCQl1MzIgYml0ZmllbGQ7Ci0JCXUzMiBfX3Jlc2VydmVkWzNdOwotCX0gdG1yIFs4XTsKLQotLyoyMDAqLwlzdHJ1Y3QgeyAvKiBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3RlciAqLwotLyoyNzAqLwkJdTMyIGJpdGZpZWxkOwotCQl1MzIgX19yZXNlcnZlZFszXTsKLQl9IGlyciBbOF07Ci0KLS8qMjgwKi8JdW5pb24geyAvKiBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KLQkJc3RydWN0IHsKLQkJCXUzMiAgIHNlbmRfY3NfZXJyb3IJCQk6ICAxLAotCQkJCXJlY2VpdmVfY3NfZXJyb3IJCTogIDEsCi0JCQkJc2VuZF9hY2NlcHRfZXJyb3IJCTogIDEsCi0JCQkJcmVjZWl2ZV9hY2NlcHRfZXJyb3IJCTogIDEsCi0JCQkJX19yZXNlcnZlZF8xCQkJOiAgMSwKLQkJCQlzZW5kX2lsbGVnYWxfdmVjdG9yCQk6ICAxLAotCQkJCXJlY2VpdmVfaWxsZWdhbF92ZWN0b3IJCTogIDEsCi0JCQkJaWxsZWdhbF9yZWdpc3Rlcl9hZGRyZXNzCTogIDEsCi0JCQkJX19yZXNlcnZlZF8yCQkJOiAyNDsKLQkJCXUzMiBfX3Jlc2VydmVkXzNbM107Ci0JCX0gZXJyb3JfYml0czsKLQkJc3RydWN0IHsKLQkJCXUzMiBlcnJvcnM7Ci0JCQl1MzIgX19yZXNlcnZlZF8zWzNdOwotCQl9IGFsbF9lcnJvcnM7Ci0JfSBlc3I7Ci0KLS8qMjkwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wODsKLQotLyoyQTAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA5OwotCi0vKjJCMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTA7Ci0KLS8qMkMwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMTsKLQotLyoyRDAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEyOwotCi0vKjJFMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTM7Ci0KLS8qMkYwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNDsKLQotLyozMDAqLwlzdHJ1Y3QgeyAvKiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAxICovCi0JCXUzMiAgIHZlY3RvcgkJCTogIDgsCi0JCQlkZWxpdmVyeV9tb2RlCQk6ICAzLAotCQkJZGVzdGluYXRpb25fbW9kZQk6ICAxLAotCQkJZGVsaXZlcnlfc3RhdHVzCQk6ICAxLAotCQkJX19yZXNlcnZlZF8xCQk6ICAxLAotCQkJbGV2ZWwJCQk6ICAxLAotCQkJdHJpZ2dlcgkJCTogIDEsCi0JCQlfX3Jlc2VydmVkXzIJCTogIDIsCi0JCQlzaG9ydGhhbmQJCTogIDIsCi0JCQlfX3Jlc2VydmVkXzMJCTogIDEyOwotCQl1MzIgX19yZXNlcnZlZF80WzNdOwotCX0gaWNyMTsKLQotLyozMTAqLwlzdHJ1Y3QgeyAvKiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAyICovCi0JCXVuaW9uIHsKLQkJCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI0LAotCQkJCXBoeXNfZGVzdAk6ICA0LAotCQkJCV9fcmVzZXJ2ZWRfMgk6ICA0OwotCQkJdTMyICAgX19yZXNlcnZlZF8zCTogMjQsCi0JCQkJbG9naWNhbF9kZXN0CTogIDg7Ci0JCX0gZGVzdDsKLQkJdTMyIF9fcmVzZXJ2ZWRfNFszXTsKLQl9IGljcjI7Ci0KLS8qMzIwKi8Jc3RydWN0IHsgLyogTFZUIC0gVGltZXIgKi8KLQkJdTMyICAgdmVjdG9yCQk6ICA4LAotCQkJX19yZXNlcnZlZF8xCTogIDQsCi0JCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKLQkJCV9fcmVzZXJ2ZWRfMgk6ICAzLAotCQkJbWFzawkJOiAgMSwKLQkJCXRpbWVyX21vZGUJOiAgMSwKLQkJCV9fcmVzZXJ2ZWRfMwk6IDE0OwotCQl1MzIgX19yZXNlcnZlZF80WzNdOwotCX0gbHZ0X3RpbWVyOwotCi0vKjMzMCovCXN0cnVjdCB7IC8qIExWVCAtIFRoZXJtYWwgU2Vuc29yICovCi0JCXUzMiAgdmVjdG9yCQk6ICA4LAotCQkJZGVsaXZlcnlfbW9kZQk6ICAzLAotCQkJX19yZXNlcnZlZF8xCTogIDEsCi0JCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKLQkJCV9fcmVzZXJ2ZWRfMgk6ICAzLAotCQkJbWFzawkJOiAgMSwKLQkJCV9fcmVzZXJ2ZWRfMwk6IDE1OwotCQl1MzIgX19yZXNlcnZlZF80WzNdOwotCX0gbHZ0X3RoZXJtYWw7Ci0KLS8qMzQwKi8Jc3RydWN0IHsgLyogTFZUIC0gUGVyZm9ybWFuY2UgQ291bnRlciAqLwotCQl1MzIgICB2ZWN0b3IJCTogIDgsCi0JCQlkZWxpdmVyeV9tb2RlCTogIDMsCi0JCQlfX3Jlc2VydmVkXzEJOiAgMSwKLQkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAotCQkJX19yZXNlcnZlZF8yCTogIDMsCi0JCQltYXNrCQk6ICAxLAotCQkJX19yZXNlcnZlZF8zCTogMTU7Ci0JCXUzMiBfX3Jlc2VydmVkXzRbM107Ci0JfSBsdnRfcGM7Ci0KLS8qMzUwKi8Jc3RydWN0IHsgLyogTFZUIC0gTElOVDAgKi8KLQkJdTMyICAgdmVjdG9yCQk6ICA4LAotCQkJZGVsaXZlcnlfbW9kZQk6ICAzLAotCQkJX19yZXNlcnZlZF8xCTogIDEsCi0JCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKLQkJCXBvbGFyaXR5CTogIDEsCi0JCQlyZW1vdGVfaXJyCTogIDEsCi0JCQl0cmlnZ2VyCQk6ICAxLAotCQkJbWFzawkJOiAgMSwKLQkJCV9fcmVzZXJ2ZWRfMgk6IDE1OwotCQl1MzIgX19yZXNlcnZlZF8zWzNdOwotCX0gbHZ0X2xpbnQwOwotCi0vKjM2MCovCXN0cnVjdCB7IC8qIExWVCAtIExJTlQxICovCi0JCXUzMiAgIHZlY3RvcgkJOiAgOCwKLQkJCWRlbGl2ZXJ5X21vZGUJOiAgMywKLQkJCV9fcmVzZXJ2ZWRfMQk6ICAxLAotCQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCi0JCQlwb2xhcml0eQk6ICAxLAotCQkJcmVtb3RlX2lycgk6ICAxLAotCQkJdHJpZ2dlcgkJOiAgMSwKLQkJCW1hc2sJCTogIDEsCi0JCQlfX3Jlc2VydmVkXzIJOiAxNTsKLQkJdTMyIF9fcmVzZXJ2ZWRfM1szXTsKLQl9IGx2dF9saW50MTsKLQotLyozNzAqLwlzdHJ1Y3QgeyAvKiBMVlQgLSBFcnJvciAqLwotCQl1MzIgICB2ZWN0b3IJCTogIDgsCi0JCQlfX3Jlc2VydmVkXzEJOiAgNCwKLQkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAotCQkJX19yZXNlcnZlZF8yCTogIDMsCi0JCQltYXNrCQk6ICAxLAotCQkJX19yZXNlcnZlZF8zCTogMTU7Ci0JCXUzMiBfX3Jlc2VydmVkXzRbM107Ci0JfSBsdnRfZXJyb3I7Ci0KLS8qMzgwKi8Jc3RydWN0IHsgLyogVGltZXIgSW5pdGlhbCBDb3VudCBSZWdpc3RlciAqLwotCQl1MzIgICBpbml0aWFsX2NvdW50OwotCQl1MzIgX19yZXNlcnZlZF8yWzNdOwotCX0gdGltZXJfaWNyOwotCi0vKjM5MCovCWNvbnN0Ci0Jc3RydWN0IHsgLyogVGltZXIgQ3VycmVudCBDb3VudCBSZWdpc3RlciAqLwotCQl1MzIgICBjdXJyX2NvdW50OwotCQl1MzIgX19yZXNlcnZlZF8yWzNdOwotCX0gdGltZXJfY2NyOwotCi0vKjNBMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTY7Ci0KLS8qM0IwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNzsKLQotLyozQzAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE4OwotCi0vKjNEMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTk7Ci0KLS8qM0UwKi8Jc3RydWN0IHsgLyogVGltZXIgRGl2aWRlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLQkJdTMyICAgZGl2aXNvcgkJOiAgNCwKLQkJCV9fcmVzZXJ2ZWRfMQk6IDI4OwotCQl1MzIgX19yZXNlcnZlZF8yWzNdOwotCX0gdGltZXJfZGNyOwotCi0vKjNGMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMjA7Ci0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jdW5kZWYgdTMyCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0gI2RlZmluZSBCQURfQVBJQ0lEIDB4RkZ1Ci0jZWxzZQotICNkZWZpbmUgQkFEX0FQSUNJRCAweEZGRkZ1Ci0jZW5kaWYKLSNlbmRpZiAvKiBBU01fWDg2X19BUElDREVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hcmNoX2hvb2tzLmggYi9pbmNsdWRlL2FzbS14ODYvYXJjaF9ob29rcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTQ1OTZiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hcmNoX2hvb2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0FSQ0hfSE9PS1NfSAotI2RlZmluZSBBU01fWDg2X19BUkNIX0hPT0tTX0gKLQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0vKgotICoJbGludXgvaW5jbHVkZS9hc20vYXJjaF9ob29rcy5oCi0gKgotICoJZGVmaW5lIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaG9va3MKLSAqLwotCi0vKiB0aGVzZSBhcmVuJ3QgYXJjaCBob29rcywgdGhleSBhcmUgZ2VuZXJpYyByb3V0aW5lcwotICogdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgaG9va3MgKi8KLWV4dGVybiB2b2lkIGluaXRfSVNBX2lycXModm9pZCk7Ci1leHRlcm4gaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci0KLS8qIHRoZXNlIGFyZSB0aGUgZGVmaW5lZCBob29rcyAqLwotZXh0ZXJuIHZvaWQgaW50cl9pbml0X2hvb2sodm9pZCk7Ci1leHRlcm4gdm9pZCBwcmVfaW50cl9pbml0X2hvb2sodm9pZCk7Ci1leHRlcm4gdm9pZCBwcmVfc2V0dXBfYXJjaF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgdHJhcF9pbml0X2hvb2sodm9pZCk7Ci1leHRlcm4gdm9pZCBwcmVfdGltZV9pbml0X2hvb2sodm9pZCk7Ci1leHRlcm4gdm9pZCB0aW1lX2luaXRfaG9vayh2b2lkKTsKLWV4dGVybiB2b2lkIG1jYV9ubWlfaG9vayh2b2lkKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0FSQ0hfSE9PS1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2FzbS5oIGIvaW5jbHVkZS9hc20teDg2L2FzbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTM1NWY0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hc20uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQVNNX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQVNNX0gKLQotI2lmZGVmIF9fQVNTRU1CTFlfXwotIyBkZWZpbmUgX19BU01fRk9STSh4KQl4Ci0jIGRlZmluZSBfX0FTTV9FWF9TRUMJLnNlY3Rpb24gX19leF90YWJsZQotI2Vsc2UKLSMgZGVmaW5lIF9fQVNNX0ZPUk0oeCkJIiAiICN4ICIgIgotIyBkZWZpbmUgX19BU01fRVhfU0VDCSIgLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBfX0FTTV9TRUwoYSxiKSBfX0FTTV9GT1JNKGEpCi0jZWxzZQotIyBkZWZpbmUgX19BU01fU0VMKGEsYikgX19BU01fRk9STShiKQotI2VuZGlmCi0KLSNkZWZpbmUgX19BU01fU0laRShpbnN0KQlfX0FTTV9TRUwoaW5zdCMjbCwgaW5zdCMjcSkKLSNkZWZpbmUgX19BU01fUkVHKHJlZykJCV9fQVNNX1NFTChlIyNyZWcsIHIjI3JlZykKLQotI2RlZmluZSBfQVNNX1BUUglfX0FTTV9TRUwoLmxvbmcsIC5xdWFkKQotI2RlZmluZSBfQVNNX0FMSUdOCV9fQVNNX1NFTCguYmFsaWduIDQsIC5iYWxpZ24gOCkKLQotI2RlZmluZSBfQVNNX01PVglfX0FTTV9TSVpFKG1vdikKLSNkZWZpbmUgX0FTTV9JTkMJX19BU01fU0laRShpbmMpCi0jZGVmaW5lIF9BU01fREVDCV9fQVNNX1NJWkUoZGVjKQotI2RlZmluZSBfQVNNX0FERAlfX0FTTV9TSVpFKGFkZCkKLSNkZWZpbmUgX0FTTV9TVUIJX19BU01fU0laRShzdWIpCi0jZGVmaW5lIF9BU01fWEFERAlfX0FTTV9TSVpFKHhhZGQpCi0KLSNkZWZpbmUgX0FTTV9BWAkJX19BU01fUkVHKGF4KQotI2RlZmluZSBfQVNNX0JYCQlfX0FTTV9SRUcoYngpCi0jZGVmaW5lIF9BU01fQ1gJCV9fQVNNX1JFRyhjeCkKLSNkZWZpbmUgX0FTTV9EWAkJX19BU01fUkVHKGR4KQotI2RlZmluZSBfQVNNX1NQCQlfX0FTTV9SRUcoc3ApCi0jZGVmaW5lIF9BU01fQlAJCV9fQVNNX1JFRyhicCkKLSNkZWZpbmUgX0FTTV9TSQkJX19BU01fUkVHKHNpKQotI2RlZmluZSBfQVNNX0RJCQlfX0FTTV9SRUcoZGkpCi0KLS8qIEV4Y2VwdGlvbiB0YWJsZSBlbnRyeSAqLwotIyBkZWZpbmUgX0FTTV9FWFRBQkxFKGZyb20sdG8pIFwKLQlfX0FTTV9FWF9TRUMJXAotCV9BU01fQUxJR04gIlxuIiBcCi0JX0FTTV9QVFIgI2Zyb20gIiwiICN0byAiXG4iIFwKLQkiIC5wcmV2aW91c1xuIgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQVNNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hdG9taWNfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hdG9taWNfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkM2YwYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYXRvbWljXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19BVE9NSUNfMzJfSAotI2RlZmluZSBBU01fWDg2X19BVE9NSUNfMzJfSAotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQotLyoKLSAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCi0gKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgotICovCi0KLS8qCi0gKiBNYWtlIHN1cmUgZ2NjIGRvZXNuJ3QgdHJ5IHRvIGJlIGNsZXZlciBhbmQgbW92ZSB0aGluZ3MgYXJvdW5kCi0gKiBvbiB1cy4gV2UgbmVlZCB0byB1c2UgX2V4YWN0bHlfIHRoZSBhZGRyZXNzIHRoZSB1c2VyIGdhdmUgdXMsCi0gKiBub3Qgc29tZSBhbGlhcyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGluZm9ybWF0aW9uLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JaW50IGNvdW50ZXI7Ci19IGF0b21pY190OwotCi0jZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KLQotLyoqCi0gKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKi8KLSNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCi0KLS8qKgotICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8KLSNkZWZpbmUgYXRvbWljX3NldCh2LCBpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCi0KLS8qKgotICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgotCQkgICAgIDogIittIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgaW50ZWdlciBmcm9tIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUxLCUwIgotCQkgICAgIDogIittIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlYyAtIGRlY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwIgotCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQotICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgotICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTIsJTA7IHNldHMgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX3JldHVybiAtIGFkZCBpbnRlZ2VyIGFuZCByZXR1cm4KLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlpbnQgX19pOwotI2lmZGVmIENPTkZJR19NMzg2Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZiAodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPD0gMykpCi0JCWdvdG8gbm9feGFkZDsKLSNlbmRpZgotCS8qIE1vZGVybiA0ODYrIHByb2Nlc3NvciAqLwotCV9faSA9IGk7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTEiCi0JCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBpICsgX19pOwotCi0jaWZkZWYgQ09ORklHX00zODYKLW5vX3hhZGQ6IC8qIExlZ2FjeSAzODYgcHJvY2Vzc29yICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9faSA9IGF0b21pY19yZWFkKHYpOwotCWF0b21pY19zZXQodiwgaSArIF9faSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBpICsgX19pOwotI2VuZGlmCi19Ci0KLS8qKgotICogYXRvbWljX3N1Yl9yZXR1cm4gLSBzdWJ0cmFjdCBpbnRlZ2VyIGFuZCByZXR1cm4KLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucyBAdiAtIEBpCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksIHYpOwotfQotCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvbGQpLCAobmV3KSkpCi0jZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCAobmV3KSkpCi0KLS8qKgotICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYWxyZWFkeSBhIGdpdmVuIHZhbHVlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgotICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIEB2IHdhcyBub3QgYWxyZWFkeSBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCBjLCBvbGQ7Ci0JYyA9IGF0b21pY19yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQlyZXR1cm4gYyAhPSAodSk7Ci19Ci0KLSNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCi0KLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKLSNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKLQotLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRsICUwLCUxIgkJCVwKLQkJICAgICA6IDogInIiICh+KG1hc2spKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQotCi0jZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJvcmwgJTAsJTEiCQkJCVwKLQkJICAgICA6IDogInIiIChtYXNrKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQotCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiB4ODYgKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy5oPgotI2VuZGlmIC8qIEFTTV9YODZfX0FUT01JQ18zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYXRvbWljXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvYXRvbWljXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYjIxOGMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2F0b21pY182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQVRPTUlDXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fQVRPTUlDXzY0X0gKLQotI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLS8qIGF0b21pY190IHNob3VsZCBiZSAzMiBiaXQgc2lnbmVkIHR5cGUgKi8KLQotLyoKLSAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCi0gKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgotICovCi0KLS8qCi0gKiBNYWtlIHN1cmUgZ2NjIGRvZXNuJ3QgdHJ5IHRvIGJlIGNsZXZlciBhbmQgbW92ZSB0aGluZ3MgYXJvdW5kCi0gKiBvbiB1cy4gV2UgbmVlZCB0byB1c2UgX2V4YWN0bHlfIHRoZSBhZGRyZXNzIHRoZSB1c2VyIGdhdmUgdXMsCi0gKiBub3Qgc29tZSBhbGlhcyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGluZm9ybWF0aW9uLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JaW50IGNvdW50ZXI7Ci19IGF0b21pY190OwotCi0jZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KLQotLyoqCi0gKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKi8KLSNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCi0KLS8qKgotICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8KLSNkZWZpbmUgYXRvbWljX3NldCh2LCBpKQkJKCgodiktPmNvdW50ZXIpID0gKGkpKQotCi0vKioKLSAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWMgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbmMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCi0gKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCi0gKiBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlpbnQgX19pID0gaTsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKLQkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGkgKyBfX2k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksIHYpOwotfQotCi0jZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCi0KLS8qIEFuIDY0Yml0IGF0b21pYyB0eXBlICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlsb25nIGNvdW50ZXI7Ci19IGF0b21pYzY0X3Q7Ci0KLSNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQl7IChpKSB9Ci0KLS8qKgotICogYXRvbWljNjRfcmVhZCAtIHJlYWQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgotICogRG9lc24ndCBpbXBseSBhIHJlYWQgbWVtb3J5IGJhcnJpZXIuCi0gKi8KLSNkZWZpbmUgYXRvbWljNjRfcmVhZCh2KQkJKCh2KS0+Y291bnRlcikKLQotLyoqCi0gKiBhdG9taWM2NF9zZXQgLSBzZXQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICogQGk6IHJlcXVpcmVkIHZhbHVlCi0gKgotICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KLSAqLwotI2RlZmluZSBhdG9taWM2NF9zZXQodiwgaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKLQotLyoqCi0gKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9hZGQobG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQlsb25nIF9faSA9IGk7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCXJldHVybiBhdG9taWM2NF9hZGRfcmV0dXJuKC1pLCB2KTsKLX0KLQotI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpICAoYXRvbWljNjRfYWRkX3JldHVybigxLCAodikpKQotI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpICAoYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpKQotCi0jZGVmaW5lIGF0b21pYzY0X2NtcHhjaGcodiwgb2xkLCBuZXcpIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG9sZCksIChuZXcpKSkKLSNkZWZpbmUgYXRvbWljNjRfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKLQotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgKGNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAob2xkKSwgKG5ldykpKQotI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG5ldykpKQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCBjLCBvbGQ7Ci0JYyA9IGF0b21pY19yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQlyZXR1cm4gYyAhPSAodSk7Ci19Ci0KLSNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCi0KLS8qKgotICogYXRvbWljNjRfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQotewotCWxvbmcgYywgb2xkOwotCWMgPSBhdG9taWM2NF9yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWM2NF9jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7Ci0JCWlmIChsaWtlbHkob2xkID09IGMpKQotCQkJYnJlYWs7Ci0JCWMgPSBvbGQ7Ci0JfQotCXJldHVybiBjICE9ICh1KTsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX3Nob3J0IC0gaW5jcmVtZW50IG9mIGEgc2hvcnQgaW50ZWdlcgotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBpbnQKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgMSB0byBAdgotICogUmV0dXJucyB0aGUgbmV3IHZhbHVlIG9mIEB1Ci0gKi8KLXN0YXRpYyBpbmxpbmUgc2hvcnQgaW50IGF0b21pY19pbmNfc2hvcnQoc2hvcnQgaW50ICp2KQotewotCWFzbShMT0NLX1BSRUZJWCAiYWRkdyAkMSwgJTAiIDogIittIiAoKnYpKTsKLQlyZXR1cm4gKnY7Ci19Ci0KLS8qKgotICogYXRvbWljX29yX2xvbmcgLSBPUiBvZiB0d28gbG9uZyBpbnRlZ2VycwotICogQHYxOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZwotICogQHYyOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZwotICoKLSAqIEF0b21pY2FsbHkgT1JzIEB2MSBhbmQgQHYyCi0gKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIE9SCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfb3JfbG9uZyh1bnNpZ25lZCBsb25nICp2MSwgdW5zaWduZWQgbG9uZyB2MikKLXsKLQlhc20oTE9DS19QUkVGSVggIm9ycSAlMSwgJTAiIDogIittIiAoKnYxKSA6ICJyIiAodjIpKTsKLX0KLQotI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikgYXRvbWljNjRfYWRkX3VubGVzcygodiksIDEsIDApCi0KLS8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KLSNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJCVwKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJCVwKLQkJICAgICA6IDogInIiICh+KG1hc2spKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQotCi0jZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKQkJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAib3JsICUwLCUxIgkJCQlcCi0JCSAgICAgOiA6ICJyIiAoKHVuc2lnbmVkKShtYXNrKSksICJtIiAoKihhZGRyKSkJCVwKLQkJICAgICA6ICJtZW1vcnkiKQotCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiB4ODYgKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy5oPgotI2VuZGlmIC8qIEFTTV9YODZfX0FUT01JQ182NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYXV4dmVjLmggYi9pbmNsdWRlL2FzbS14ODYvYXV4dmVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzdjYWMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2F1eHZlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19BVVhWRUNfSAotI2RlZmluZSBBU01fWDg2X19BVVhWRUNfSAotLyoKLSAqIEFyY2hpdGVjdHVyZS1uZXV0cmFsIEFUXyB2YWx1ZXMgaW4gMC0xNywgbGVhdmUgc29tZSByb29tCi0gKiBmb3IgbW9yZSBvZiB0aGVtLCBzdGFydCB0aGUgeDg2LXNwZWNpZmljIG9uZXMgYXQgMzIuCi0gKi8KLSNpZmRlZiBfX2kzODZfXwotI2RlZmluZSBBVF9TWVNJTkZPCQkzMgotI2VuZGlmCi0jZGVmaW5lIEFUX1NZU0lORk9fRUhEUgkJMzMKLQotI2VuZGlmIC8qIEFTTV9YODZfX0FVWFZFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYmlnc21wL2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9iaWdzbXAvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTljZDdjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9iaWdzbXAvYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLSNpZm5kZWYgX19BU01fTUFDSF9BUElDX0gKLSNkZWZpbmUgX19BU01fTUFDSF9BUElDX0gKLQotI2RlZmluZSB4YXBpY19waHlzX3RvX2xvZ19hcGljaWQoY3B1KSAocGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpKQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKLQotc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JcmV0dXJuICgxKTsKLX0KLQotLyogUm91bmQgcm9iaW4gdGhlIGlycXMgYW1vdW5nIHRoZSBvbmxpbmUgY3B1cyAqLwotc3RhdGljIGlubGluZSBjcHVtYXNrX3QgdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHUgPSBOUl9DUFVTOwotCWRvIHsKLQkJaWYgKGNwdSA+PSBOUl9DUFVTKQotCQkJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLQkJZWxzZQotCQkJY3B1ID0gbmV4dF9jcHUoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0JfSB3aGlsZSAoY3B1ID49IE5SX0NQVVMpOwotCXJldHVybiBjcHVtYXNrX29mX2NwdShjcHUpOwotfQotCi0jdW5kZWYgQVBJQ19ERVNUX0xPR0lDQUwKLSNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwJMAotI2RlZmluZSBUQVJHRVRfQ1BVUwkJKHRhcmdldF9jcHVzKCkpCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfRkxBVCkKLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfRml4ZWQpCi0jZGVmaW5lIElOVF9ERVNUX01PREUJCSgwKSAgICAvKiBwaHlzIGRlbGl2ZXJ5IHRvIHRhcmdldCBwcm9jICovCi0jZGVmaW5lIE5PX0JBTEFOQ0VfSVJRCQkoMCkKLSNkZWZpbmUgV0FLRV9TRUNPTkRBUllfVklBX0lOSVQKLQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCi17Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCi17Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9sZHIoaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCwgaWQ7Ci0JdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOwotCWlkID0geGFwaWNfcGh5c190b19sb2dfYXBpY2lkKGNwdSk7Ci0JdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qCi0gKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCi0gKgotICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCi0gKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7Ci0JdmFsID0gY2FsY3VsYXRlX2xkcihjcHUpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKLXsKLQlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAotCQkiUGh5c2ZsYXQiLCBucl9pb2FwaWNzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbXVsdGlfdGltZXJfY2hlY2soaW50IGFwaWMsIGludCBpcnEpCi17Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQotewotCXJldHVybiBhcGljaWRfMl9ub2RlW2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQotewotCWlmIChtcHNfY3B1IDwgTlJfQ1BVUykKLQkJcmV0dXJuIChpbnQpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGFwaWNpZF90b19jcHVfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCi17Ci0JcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZChwaHlzX2FwaWNpZCk7Ci19Ci0KLWV4dGVybiB1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtdOwotLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQotewotCWlmIChjcHUgPj0gTlJfQ1BVUykKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci0JcmV0dXJuIGNwdV9waHlzaWNhbF9pZChjcHUpOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCi17Ci0JLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCi0JcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweEZGTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQotewotCXJldHVybiAoMSk7Ci19Ci0KLS8qIEFzIHdlIGFyZSB1c2luZyBzaW5nbGUgQ1BVIGFzIGRlc3RpbmF0aW9uLCBwaWNrIG9ubHkgb25lIENQVSBoZXJlICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCi17Ci0JaW50IGNwdTsKLQlpbnQgYXBpY2lkOwkKLQotCWNwdSA9IGZpcnN0X2NwdShjcHVtYXNrKTsKLQlhcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKLQlyZXR1cm4gYXBpY2lkOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBwaHlzX3BrZ19pZCh1MzIgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKLXsKLQlyZXR1cm4gY3B1aWRfYXBpYyA+PiBpbmRleF9tc2I7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2Jpb3NfZWJkYS5oIGIvaW5jbHVkZS9hc20teDg2L2Jpb3NfZWJkYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWI0Yjg4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9iaW9zX2ViZGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQklPU19FQkRBX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQklPU19FQkRBX0gKLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0vKgotICogdGhlcmUgaXMgYSByZWFsLW1vZGUgc2VnbWVudGVkIHBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlCi0gKiA0SyBFQkRBIGFyZWEgYXQgMHg0MEUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9iaW9zX2ViZGEodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgYWRkcmVzcyA9ICoodW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoMHg0MEUpOwotCWFkZHJlc3MgPDw9IDQ7Ci0JcmV0dXJuIGFkZHJlc3M7CS8qIDAgbWVhbnMgbm9uZSAqLwotfQotCi12b2lkIHJlc2VydmVfZWJkYV9yZWdpb24odm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0NIRUNLX0JJT1NfQ09SUlVQVElPTgotLyoKLSAqIFRoaXMgaXMgb2J2aW91c2x5IG5vdCBhIGdyZWF0IHBsYWNlIGZvciB0aGlzLCBidXQgd2Ugd2FudCB0byBiZQotICogYWJsZSB0byBzY2F0dGVyIGl0IGFyb3VuZCBhbnl3aGVyZSBpbiB0aGUga2VybmVsLgotICovCi12b2lkIGNoZWNrX2Zvcl9iaW9zX2NvcnJ1cHRpb24odm9pZCk7Ci12b2lkIHN0YXJ0X3BlcmlvZGljX2NoZWNrX2Zvcl9jb3JydXB0aW9uKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19mb3JfYmlvc19jb3JydXB0aW9uKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9wZXJpb2RpY19jaGVja19mb3JfY29ycnVwdGlvbih2b2lkKQotewotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19CSU9TX0VCREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teDg2L2JpdG9wcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTFhNzQ3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1MSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0JJVE9QU19ICi0jZGVmaW5lIEFTTV9YODZfX0JJVE9QU19ICi0KLS8qCi0gKiBDb3B5cmlnaHQgMTk5MiwgTGludXMgVG9ydmFsZHMuCi0gKi8KLQotI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKLSNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+Ci0KLS8qCi0gKiBUaGVzZSBoYXZlIHRvIGJlIGRvbmUgd2l0aCBpbmxpbmUgYXNzZW1ibHk6IHRoYXQgd2F5IHRoZSBiaXQtc2V0dGluZwotICogaXMgZ3VhcmFudGVlZCB0byBiZSBhdG9taWMuIEFsbCBiaXQgb3BlcmF0aW9ucyByZXR1cm4gMCBpZiB0aGUgYml0Ci0gKiB3YXMgY2xlYXJlZCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBhbmQgIT0gMCBpZiBpdCB3YXMgbm90LgotICoKLSAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDMyIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCi0gKi8KLQotI2lmIF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDEpCi0vKiBUZWNobmljYWxseSB3cm9uZywgYnV0IHRoaXMgYXZvaWRzIGNvbXBpbGF0aW9uIGVycm9ycyBvbiBzb21lIGdjYwotICAgdmVyc2lvbnMuICovCi0jZGVmaW5lIEJJVE9QX0FERFIoeCkgIj1tIiAoKih2b2xhdGlsZSBsb25nICopICh4KSkKLSNlbHNlCi0jZGVmaW5lIEJJVE9QX0FERFIoeCkgIittIiAoKih2b2xhdGlsZSBsb25nICopICh4KSkKLSNlbmRpZgotCi0jZGVmaW5lIEFERFIJCQkJQklUT1BfQUREUihhZGRyKQotCi0vKgotICogV2UgZG8gdGhlIGxvY2tlZCBvcHMgdGhhdCBkb24ndCByZXR1cm4gdGhlIG9sZCB2YWx1ZSBhcwotICogYSBtYXNrIG9wZXJhdGlvbiBvbiBhIGJ5dGUuCi0gKi8KLSNkZWZpbmUgSVNfSU1NRURJQVRFKG5yKQkJKF9fYnVpbHRpbl9jb25zdGFudF9wKG5yKSkKLSNkZWZpbmUgQ09OU1RfTUFTS19BRERSKG5yLCBhZGRyKQlCSVRPUF9BRERSKCh2b2lkICopKGFkZHIpICsgKChucik+PjMpKQotI2RlZmluZSBDT05TVF9NQVNLKG5yKQkJCSgxIDw8ICgobnIpICYgNykpCi0KLS8qKgotICogc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQotICogQG5yOiB0aGUgYml0IHRvIHNldAotICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKLSAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCi0gKgotICogTm90ZTogdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHJlb3JkZXJlZAotICogb24gbm9uIHg4NiBhcmNoaXRlY3R1cmVzLCBzbyBpZiB5b3UgYXJlIHdyaXRpbmcgcG9ydGFibGUgY29kZSwKLSAqIG1ha2Ugc3VyZSBub3QgdG8gcmVseSBvbiBpdHMgcmVvcmRlcmluZyBndWFyYW50ZWVzLgotICoKLSAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKLSAqIHJlc3RyaWN0ZWQgdG8gYWN0aW5nIG9uIGEgc2luZ2xlLXdvcmQgcXVhbnRpdHkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KHVuc2lnbmVkIGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlpZiAoSVNfSU1NRURJQVRFKG5yKSkgewotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9yYiAlMSwlMCIKLQkJCTogQ09OU1RfTUFTS19BRERSKG5yLCBhZGRyKQotCQkJOiAiaXEiICgodTgpQ09OU1RfTUFTSyhucikpCi0JCQk6ICJtZW1vcnkiKTsKLQl9IGVsc2UgewotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0cyAlMSwlMCIKLQkJCTogQklUT1BfQUREUihhZGRyKSA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKLQl9Ci19Ci0KLS8qKgotICogX19zZXRfYml0IC0gU2V0IGEgYml0IGluIG1lbW9yeQotICogQG5yOiB0aGUgYml0IHRvIHNldAotICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBVbmxpa2Ugc2V0X2JpdCgpLCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCi0gKiBJZiBpdCdzIGNhbGxlZCBvbiB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IHNpbXVsdGFuZW91c2x5LCB0aGUgZWZmZWN0Ci0gKiBtYXkgYmUgdGhhdCBvbmx5IG9uZSBvcGVyYXRpb24gc3VjY2VlZHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWFzbSB2b2xhdGlsZSgiYnRzICUxLCUwIiA6IEFERFIgOiAiSXIiIChucikgOiAibWVtb3J5Iik7Ci19Ci0KLS8qKgotICogY2xlYXJfYml0IC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeQotICogQG5yOiBCaXQgdG8gY2xlYXIKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBjbGVhcl9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgSG93ZXZlciwgaXQgZG9lcwotICogbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IgbG9ja2luZyBwdXJwb3NlcywKLSAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQotICogaW4gb3JkZXIgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgcHJvY2Vzc29ycy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JaWYgKElTX0lNTUVESUFURShucikpIHsKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRiICUxLCUwIgotCQkJOiBDT05TVF9NQVNLX0FERFIobnIsIGFkZHIpCi0JCQk6ICJpcSIgKCh1OCl+Q09OU1RfTUFTSyhucikpKTsKLQl9IGVsc2UgewotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0ciAlMSwlMCIKLQkJCTogQklUT1BfQUREUihhZGRyKQotCQkJOiAiSXIiIChucikpOwotCX0KLX0KLQotLyoKLSAqIGNsZWFyX2JpdF91bmxvY2sgLSBDbGVhcnMgYSBiaXQgaW4gbWVtb3J5Ci0gKiBAbnI6IEJpdCB0byBjbGVhcgotICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQotICoKLSAqIGNsZWFyX2JpdCgpIGlzIGF0b21pYyBhbmQgaW1wbGllcyByZWxlYXNlIHNlbWFudGljcyBiZWZvcmUgdGhlIG1lbW9yeQotICogb3BlcmF0aW9uLiBJdCBjYW4gYmUgdXNlZCBmb3IgYW4gdW5sb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0X3VubG9jayh1bnNpZ25lZCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQliYXJyaWVyKCk7Ci0JY2xlYXJfYml0KG5yLCBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlhc20gdm9sYXRpbGUoImJ0ciAlMSwlMCIgOiBBRERSIDogIklyIiAobnIpKTsKLX0KLQotLyoKLSAqIF9fY2xlYXJfYml0X3VubG9jayAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKLSAqIEBucjogQml0IHRvIGNsZWFyCi0gKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCi0gKgotICogX19jbGVhcl9iaXQoKSBpcyBub24tYXRvbWljIGFuZCBpbXBsaWVzIHJlbGVhc2Ugc2VtYW50aWNzIGJlZm9yZSB0aGUgbWVtb3J5Ci0gKiBvcGVyYXRpb24uIEl0IGNhbiBiZSB1c2VkIGZvciBhbiB1bmxvY2sgaWYgbm8gb3RoZXIgQ1BVcyBjYW4gY29uY3VycmVudGx5Ci0gKiBtb2RpZnkgb3RoZXIgYml0cyBpbiB0aGUgd29yZC4KLSAqCi0gKiBObyBtZW1vcnkgYmFycmllciBpcyByZXF1aXJlZCBoZXJlLCBiZWNhdXNlIHg4NiBjYW5ub3QgcmVvcmRlciBzdG9yZXMgcGFzdAotICogb2xkZXIgbG9hZHMuIFNhbWUgcHJpbmNpcGxlIGFzIHNwaW5fdW5sb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXRfdW5sb2NrKHVuc2lnbmVkIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWJhcnJpZXIoKTsKLQlfX2NsZWFyX2JpdChuciwgYWRkcik7Ci19Ci0KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCi0KLS8qKgotICogX19jaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQotICogQG5yOiB0aGUgYml0IHRvIGNoYW5nZQotICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBVbmxpa2UgY2hhbmdlX2JpdCgpLCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCi0gKiBJZiBpdCdzIGNhbGxlZCBvbiB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IHNpbXVsdGFuZW91c2x5LCB0aGUgZWZmZWN0Ci0gKiBtYXkgYmUgdGhhdCBvbmx5IG9uZSBvcGVyYXRpb24gc3VjY2VlZHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWFzbSB2b2xhdGlsZSgiYnRjICUxLCUwIiA6IEFERFIgOiAiSXIiIChucikpOwotfQotCi0vKioKLSAqIGNoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5Ci0gKiBAbnI6IEJpdCB0byBjaGFuZ2UKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBjaGFuZ2VfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4KLSAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKLSAqIHJlc3RyaWN0ZWQgdG8gYWN0aW5nIG9uIGEgc2luZ2xlLXdvcmQgcXVhbnRpdHkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0YyAlMSwlMCIgOiBBRERSIDogIklyIiAobnIpKTsKLX0KLQotLyoqCi0gKiB0ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQotICogQG5yOiBCaXQgdG8gc2V0Ci0gKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCi0gKgotICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgotICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWludCBvbGRiaXQ7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0cyAlMiwlMVxuXHQiCi0JCSAgICAgInNiYiAlMCwlMCIgOiAiPXIiIChvbGRiaXQpLCBBRERSIDogIklyIiAobnIpIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIG9sZGJpdDsKLX0KLQotLyoqCi0gKiB0ZXN0X2FuZF9zZXRfYml0X2xvY2sgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlIGZvciBsb2NrCi0gKiBAbnI6IEJpdCB0byBzZXQKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KLSAqCi0gKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRlc3RfYW5kX3NldF9iaXQgb24geDg2LgotICovCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0X2xvY2soaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KG5yLCBhZGRyKTsKLX0KLQotLyoqCi0gKiBfX3Rlc3RfYW5kX3NldF9iaXQgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCi0gKiBAbnI6IEJpdCB0byBzZXQKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KLSAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLgotICogSWYgdHdvIGV4YW1wbGVzIG9mIHRoaXMgb3BlcmF0aW9uIHJhY2UsIG9uZSBjYW4gYXBwZWFyIHRvIHN1Y2NlZWQKLSAqIGJ1dCBhY3R1YWxseSBmYWlsLiAgWW91IG11c3QgcHJvdGVjdCBtdWx0aXBsZSBhY2Nlc3NlcyB3aXRoIGEgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlpbnQgb2xkYml0OwotCi0JYXNtKCJidHMgJTIsJTFcblx0IgotCSAgICAic2JiICUwLCUwIgotCSAgICA6ICI9ciIgKG9sZGJpdCksIEFERFIKLQkgICAgOiAiSXIiIChucikpOwotCXJldHVybiBvbGRiaXQ7Ci19Ci0KLS8qKgotICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCi0gKiBAbnI6IEJpdCB0byBjbGVhcgotICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQotICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KLSAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgotICovCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWludCBvbGRiaXQ7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0ciAlMiwlMVxuXHQiCi0JCSAgICAgInNiYiAlMCwlMCIKLQkJICAgICA6ICI9ciIgKG9sZGJpdCksIEFERFIgOiAiSXIiIChucikgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gb2xkYml0OwotfQotCi0vKioKLSAqIF9fdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCi0gKiBAbnI6IEJpdCB0byBjbGVhcgotICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQotICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCi0gKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAotICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgotICovCi1zdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JaW50IG9sZGJpdDsKLQotCWFzbSB2b2xhdGlsZSgiYnRyICUyLCUxXG5cdCIKLQkJICAgICAic2JiICUwLCUwIgotCQkgICAgIDogIj1yIiAob2xkYml0KSwgQUREUgotCQkgICAgIDogIklyIiAobnIpKTsKLQlyZXR1cm4gb2xkYml0OwotfQotCi0vKiBXQVJOSU5HOiBub24gYXRvbWljIGFuZCBpdCBjYW4gYmUgcmVvcmRlcmVkISAqLwotc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlpbnQgb2xkYml0OwotCi0JYXNtIHZvbGF0aWxlKCJidGMgJTIsJTFcblx0IgotCQkgICAgICJzYmIgJTAsJTAiCi0JCSAgICAgOiAiPXIiIChvbGRiaXQpLCBBRERSCi0JCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gb2xkYml0OwotfQotCi0vKioKLSAqIHRlc3RfYW5kX2NoYW5nZV9iaXQgLSBDaGFuZ2UgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCi0gKiBAbnI6IEJpdCB0byBjaGFuZ2UKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KLSAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCi0gKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JaW50IG9sZGJpdDsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYnRjICUyLCUxXG5cdCIKLQkJICAgICAic2JiICUwLCUwIgotCQkgICAgIDogIj1yIiAob2xkYml0KSwgQUREUiA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBvbGRiaXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlyZXR1cm4gKCgxVUwgPDwgKG5yICUgQklUU19QRVJfTE9ORykpICYKLQkJKCgodW5zaWduZWQgbG9uZyAqKWFkZHIpW25yIC8gQklUU19QRVJfTE9OR10pKSAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB2YXJpYWJsZV90ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JaW50IG9sZGJpdDsKLQotCWFzbSB2b2xhdGlsZSgiYnQgJTIsJTFcblx0IgotCQkgICAgICJzYmIgJTAsJTAiCi0JCSAgICAgOiAiPXIiIChvbGRiaXQpCi0JCSAgICAgOiAibSIgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpLCAiSXIiIChucikpOwotCi0JcmV0dXJuIG9sZGJpdDsKLX0KLQotI2lmIDAgLyogRm9vbCBrZXJuZWwtZG9jIHNpbmNlIGl0IGRvZXNuJ3QgZG8gbWFjcm9zIHlldCAqLwotLyoqCi0gKiB0ZXN0X2JpdCAtIERldGVybWluZSB3aGV0aGVyIGEgYml0IGlzIHNldAotICogQG5yOiBiaXQgbnVtYmVyIHRvIHRlc3QKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqLwotc3RhdGljIGludCB0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOwotI2VuZGlmCi0KLSNkZWZpbmUgdGVzdF9iaXQobnIsIGFkZHIpCQkJXAotCShfX2J1aWx0aW5fY29uc3RhbnRfcCgobnIpKQkJXAotCSA/IGNvbnN0YW50X3Rlc3RfYml0KChuciksIChhZGRyKSkJXAotCSA6IHZhcmlhYmxlX3Rlc3RfYml0KChuciksIChhZGRyKSkpCi0KLS8qKgotICogX19mZnMgLSBmaW5kIGZpcnN0IHNldCBiaXQgaW4gd29yZAotICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAotICoKLSAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCi17Ci0JYXNtKCJic2YgJTEsJTAiCi0JCTogIj1yIiAod29yZCkKLQkJOiAicm0iICh3b3JkKSk7Ci0JcmV0dXJuIHdvcmQ7Ci19Ci0KLS8qKgotICogZmZ6IC0gZmluZCBmaXJzdCB6ZXJvIGJpdCBpbiB3b3JkCi0gKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCi0gKgotICogVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQotewotCWFzbSgiYnNmICUxLCUwIgotCQk6ICI9ciIgKHdvcmQpCi0JCTogInIiICh+d29yZCkpOwotCXJldHVybiB3b3JkOwotfQotCi0vKgotICogX19mbHM6IGZpbmQgbGFzdCBzZXQgYml0IGluIHdvcmQKLSAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKLSAqCi0gKiBVbmRlZmluZWQgaWYgbm8gc2V0IGJpdCBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmxzKHVuc2lnbmVkIGxvbmcgd29yZCkKLXsKLQlhc20oImJzciAlMSwlMCIKLQkgICAgOiAiPXIiICh3b3JkKQotCSAgICA6ICJybSIgKHdvcmQpKTsKLQlyZXR1cm4gd29yZDsKLX0KLQotI2lmZGVmIF9fS0VSTkVMX18KLS8qKgotICogZmZzIC0gZmluZCBmaXJzdCBzZXQgYml0IGluIHdvcmQKLSAqIEB4OiB0aGUgd29yZCB0byBzZWFyY2gKLSAqCi0gKiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcwotICogcm91dGluZXMsIHRoZXJlZm9yZSBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBvdGhlciBiaXRvcHMuCi0gKgotICogZmZzKHZhbHVlKSByZXR1cm5zIDAgaWYgdmFsdWUgaXMgMCBvciB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0Ci0gKiBzZXQgYml0IGlmIHZhbHVlIGlzIG5vbnplcm8uIFRoZSBmaXJzdCAobGVhc3Qgc2lnbmlmaWNhbnQpIGJpdAotICogaXMgYXQgcG9zaXRpb24gMS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZmZzKGludCB4KQotewotCWludCByOwotI2lmZGVmIENPTkZJR19YODZfQ01PVgotCWFzbSgiYnNmbCAlMSwlMFxuXHQiCi0JICAgICJjbW92emwgJTIsJTAiCi0JICAgIDogIj1yIiAocikgOiAicm0iICh4KSwgInIiICgtMSkpOwotI2Vsc2UKLQlhc20oImJzZmwgJTEsJTBcblx0IgotCSAgICAiam56IDFmXG5cdCIKLQkgICAgIm1vdmwgJC0xLCUwXG4iCi0JICAgICIxOiIgOiAiPXIiIChyKSA6ICJybSIgKHgpKTsKLSNlbmRpZgotCXJldHVybiByICsgMTsKLX0KLQotLyoqCi0gKiBmbHMgLSBmaW5kIGxhc3Qgc2V0IGJpdCBpbiB3b3JkCi0gKiBAeDogdGhlIHdvcmQgdG8gc2VhcmNoCi0gKgotICogVGhpcyBpcyBkZWZpbmVkIGluIGEgc2ltaWxhciB3YXkgYXMgdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4KLSAqIGZmcywgYnV0IHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IHNldCBiaXQuCi0gKgotICogZmxzKHZhbHVlKSByZXR1cm5zIDAgaWYgdmFsdWUgaXMgMCBvciB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QKLSAqIHNldCBiaXQgaWYgdmFsdWUgaXMgbm9uemVyby4gVGhlIGxhc3QgKG1vc3Qgc2lnbmlmaWNhbnQpIGJpdCBpcwotICogYXQgcG9zaXRpb24gMzIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGZscyhpbnQgeCkKLXsKLQlpbnQgcjsKLSNpZmRlZiBDT05GSUdfWDg2X0NNT1YKLQlhc20oImJzcmwgJTEsJTBcblx0IgotCSAgICAiY21vdnpsICUyLCUwIgotCSAgICA6ICI9JnIiIChyKSA6ICJybSIgKHgpLCAicm0iICgtMSkpOwotI2Vsc2UKLQlhc20oImJzcmwgJTEsJTBcblx0IgotCSAgICAiam56IDFmXG5cdCIKLQkgICAgIm1vdmwgJC0xLCUwXG4iCi0JICAgICIxOiIgOiAiPXIiIChyKSA6ICJybSIgKHgpKTsKLSNlbmRpZgotCXJldHVybiByICsgMTsKLX0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSN1bmRlZiBBRERSCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KLQotI2RlZmluZSBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIgMQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgotCi0jZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQkJXAotCXRlc3RfYW5kX3NldF9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCi0jZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikJCQlcCi0JdGVzdF9hbmRfY2xlYXJfYml0KChuciksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogQVNNX1g4Nl9fQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9ib290LmggYi9pbmNsdWRlL2FzbS14ODYvYm9vdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDYzYmQ1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9ib290LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0JPT1RfSAotI2RlZmluZSBBU01fWDg2X19CT09UX0gKLQotLyogRG9uJ3QgdG91Y2ggdGhlc2UsIHVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuICovCi0jZGVmaW5lIERFRl9TWVNTRUcJMHgxMDAwCi0jZGVmaW5lIERFRl9TWVNTSVpFCTB4N0YwMAotCi0vKiBJbnRlcm5hbCBzdmdhIHN0YXJ0dXAgY29uc3RhbnRzICovCi0jZGVmaW5lIE5PUk1BTF9WR0EJMHhmZmZmCQkvKiA4MHgyNSBtb2RlICovCi0jZGVmaW5lIEVYVEVOREVEX1ZHQQkweGZmZmUJCS8qIDgweDUwIG1vZGUgKi8KLSNkZWZpbmUgQVNLX1ZHQQkJMHhmZmZkCQkvKiBhc2sgZm9yIGl0IGF0IGJvb3R1cCAqLwotCi0vKiBQaHlzaWNhbCBhZGRyZXNzIHdoZXJlIGtlcm5lbCBzaG91bGQgYmUgbG9hZGVkLiAqLwotI2RlZmluZSBMT0FEX1BIWVNJQ0FMX0FERFIgKChDT05GSUdfUEhZU0lDQUxfU1RBUlQgXAotCQkJCSsgKENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKSBcCi0JCQkJJiB+KENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBCT09UX0hFQVBfU0laRQkweDcwMDAKLSNkZWZpbmUgQk9PVF9TVEFDS19TSVpFCTB4NDAwMAotI2Vsc2UKLSNkZWZpbmUgQk9PVF9IRUFQX1NJWkUJMHg0MDAwCi0jZGVmaW5lIEJPT1RfU1RBQ0tfU0laRQkweDEwMDAKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQk9PVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYm9vdHBhcmFtLmggYi9pbmNsdWRlL2FzbS14ODYvYm9vdHBhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZjAyN2UuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Jvb3RwYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQk9PVFBBUkFNX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQk9PVFBBUkFNX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KLSNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgotI2luY2x1ZGUgPGxpbnV4L2VkZC5oPgotI2luY2x1ZGUgPGFzbS9lODIwLmg+Ci0jaW5jbHVkZSA8YXNtL2lzdC5oPgotI2luY2x1ZGUgPHZpZGVvL2VkaWQuaD4KLQotLyogc2V0dXAgZGF0YSB0eXBlcyAqLwotI2RlZmluZSBTRVRVUF9OT05FCQkJMAotI2RlZmluZSBTRVRVUF9FODIwX0VYVAkJCTEKLQotLyogZXh0ZW5zaWJsZSBzZXR1cCBkYXRhIGxpc3Qgbm9kZSAqLwotc3RydWN0IHNldHVwX2RhdGEgewotCV9fdTY0IG5leHQ7Ci0JX191MzIgdHlwZTsKLQlfX3UzMiBsZW47Ci0JX191OCBkYXRhWzBdOwotfTsKLQotc3RydWN0IHNldHVwX2hlYWRlciB7Ci0JX191OAlzZXR1cF9zZWN0czsKLQlfX3UxNglyb290X2ZsYWdzOwotCV9fdTMyCXN5c3NpemU7Ci0JX191MTYJcmFtX3NpemU7Ci0jZGVmaW5lIFJBTURJU0tfSU1BR0VfU1RBUlRfTUFTSwkweDA3RkYKLSNkZWZpbmUgUkFNRElTS19QUk9NUFRfRkxBRwkJMHg4MDAwCi0jZGVmaW5lIFJBTURJU0tfTE9BRF9GTEFHCQkweDQwMDAKLQlfX3UxNgl2aWRfbW9kZTsKLQlfX3UxNglyb290X2RldjsKLQlfX3UxNglib290X2ZsYWc7Ci0JX191MTYJanVtcDsKLQlfX3UzMgloZWFkZXI7Ci0JX191MTYJdmVyc2lvbjsKLQlfX3UzMglyZWFsbW9kZV9zd3RjaDsKLQlfX3UxNglzdGFydF9zeXM7Ci0JX191MTYJa2VybmVsX3ZlcnNpb247Ci0JX191OAl0eXBlX29mX2xvYWRlcjsKLQlfX3U4CWxvYWRmbGFnczsKLSNkZWZpbmUgTE9BREVEX0hJR0gJKDE8PDApCi0jZGVmaW5lIFFVSUVUX0ZMQUcJKDE8PDUpCi0jZGVmaW5lIEtFRVBfU0VHTUVOVFMJKDE8PDYpCi0jZGVmaW5lIENBTl9VU0VfSEVBUAkoMTw8NykKLQlfX3UxNglzZXR1cF9tb3ZlX3NpemU7Ci0JX191MzIJY29kZTMyX3N0YXJ0OwotCV9fdTMyCXJhbWRpc2tfaW1hZ2U7Ci0JX191MzIJcmFtZGlza19zaXplOwotCV9fdTMyCWJvb3RzZWN0X2tsdWRnZTsKLQlfX3UxNgloZWFwX2VuZF9wdHI7Ci0JX191MTYJX3BhZDE7Ci0JX191MzIJY21kX2xpbmVfcHRyOwotCV9fdTMyCWluaXRyZF9hZGRyX21heDsKLQlfX3UzMglrZXJuZWxfYWxpZ25tZW50OwotCV9fdTgJcmVsb2NhdGFibGVfa2VybmVsOwotCV9fdTgJX3BhZDJbM107Ci0JX191MzIJY21kbGluZV9zaXplOwotCV9fdTMyCWhhcmR3YXJlX3N1YmFyY2g7Ci0JX191NjQJaGFyZHdhcmVfc3ViYXJjaF9kYXRhOwotCV9fdTMyCXBheWxvYWRfb2Zmc2V0OwotCV9fdTMyCXBheWxvYWRfbGVuZ3RoOwotCV9fdTY0CXNldHVwX2RhdGE7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3lzX2Rlc2NfdGFibGUgewotCV9fdTE2IGxlbmd0aDsKLQlfX3U4ICB0YWJsZVsxNF07Ci19OwotCi1zdHJ1Y3QgZWZpX2luZm8gewotCV9fdTMyIGVmaV9sb2FkZXJfc2lnbmF0dXJlOwotCV9fdTMyIGVmaV9zeXN0YWI7Ci0JX191MzIgZWZpX21lbWRlc2Nfc2l6ZTsKLQlfX3UzMiBlZmlfbWVtZGVzY192ZXJzaW9uOwotCV9fdTMyIGVmaV9tZW1tYXA7Ci0JX191MzIgZWZpX21lbW1hcF9zaXplOwotCV9fdTMyIGVmaV9zeXN0YWJfaGk7Ci0JX191MzIgZWZpX21lbW1hcF9oaTsKLX07Ci0KLS8qIFRoZSBzby1jYWxsZWQgInplcm9wYWdlIiAqLwotc3RydWN0IGJvb3RfcGFyYW1zIHsKLQlzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm87CQkJLyogMHgwMDAgKi8KLQlzdHJ1Y3QgYXBtX2Jpb3NfaW5mbyBhcG1fYmlvc19pbmZvOwkJLyogMHgwNDAgKi8KLQlfX3U4ICBfcGFkMlsxMl07CQkJCS8qIDB4MDU0ICovCi0Jc3RydWN0IGlzdF9pbmZvIGlzdF9pbmZvOwkJCS8qIDB4MDYwICovCi0JX191OCAgX3BhZDNbMTZdOwkJCQkvKiAweDA3MCAqLwotCV9fdTggIGhkMF9pbmZvWzE2XTsJLyogb2Jzb2xldGUhICovCQkvKiAweDA4MCAqLwotCV9fdTggIGhkMV9pbmZvWzE2XTsJLyogb2Jzb2xldGUhICovCQkvKiAweDA5MCAqLwotCXN0cnVjdCBzeXNfZGVzY190YWJsZSBzeXNfZGVzY190YWJsZTsJCS8qIDB4MGEwICovCi0JX191OCAgX3BhZDRbMTQ0XTsJCQkJLyogMHgwYjAgKi8KLQlzdHJ1Y3QgZWRpZF9pbmZvIGVkaWRfaW5mbzsJCQkvKiAweDE0MCAqLwotCXN0cnVjdCBlZmlfaW5mbyBlZmlfaW5mbzsJCQkvKiAweDFjMCAqLwotCV9fdTMyIGFsdF9tZW1fazsJCQkJLyogMHgxZTAgKi8KLQlfX3UzMiBzY3JhdGNoOwkJLyogU2NyYXRjaCBmaWVsZCEgKi8JLyogMHgxZTQgKi8KLQlfX3U4ICBlODIwX2VudHJpZXM7CQkJCS8qIDB4MWU4ICovCi0JX191OCAgZWRkYnVmX2VudHJpZXM7CQkJCS8qIDB4MWU5ICovCi0JX191OCAgZWRkX21icl9zaWdfYnVmX2VudHJpZXM7CQkJLyogMHgxZWEgKi8KLQlfX3U4ICBfcGFkNls2XTsJCQkJCS8qIDB4MWViICovCi0Jc3RydWN0IHNldHVwX2hlYWRlciBoZHI7ICAgIC8qIHNldHVwIGhlYWRlciAqLwkvKiAweDFmMSAqLwotCV9fdTggIF9wYWQ3WzB4MjkwLTB4MWYxLXNpemVvZihzdHJ1Y3Qgc2V0dXBfaGVhZGVyKV07Ci0JX191MzIgZWRkX21icl9zaWdfYnVmZmVyW0VERF9NQlJfU0lHX01BWF07CS8qIDB4MjkwICovCi0Jc3RydWN0IGU4MjBlbnRyeSBlODIwX21hcFtFODIwTUFYXTsJCS8qIDB4MmQwICovCi0JX191OCAgX3BhZDhbNDhdOwkJCQkvKiAweGNkMCAqLwotCXN0cnVjdCBlZGRfaW5mbyBlZGRidWZbRURETUFYTlJdOwkJLyogMHhkMDAgKi8KLQlfX3U4ICBfcGFkOVsyNzZdOwkJCQkvKiAweGVlYyAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0JPT1RQQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYnVnLmggYi9pbmNsdWRlL2FzbS14ODYvYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYWQ0M2EuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2J1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19CVUdfSAotI2RlZmluZSBBU01fWDg2X19CVUdfSAotCi0jaWZkZWYgQ09ORklHX0JVRwotI2RlZmluZSBIQVZFX0FSQ0hfQlVHCi0KLSNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgX19CVUdfQzAJIjI6XHQubG9uZyAxYiwgJWMwXG4iCi0jZWxzZQotIyBkZWZpbmUgX19CVUdfQzAJIjI6XHQucXVhZCAxYiwgJWMwXG4iCi0jZW5kaWYKLQotI2RlZmluZSBCVUcoKQkJCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCIxOlx0dWQyXG4iCQkJCVwKLQkJICAgICAiLnB1c2hzZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQlcCi0JCSAgICAgX19CVUdfQzAJCQkJCVwKLQkJICAgICAiXHQud29yZCAlYzEsIDBcbiIJCQkJXAotCQkgICAgICJcdC5vcmcgMmIrJWMyXG4iCQkJCVwKLQkJICAgICAiLnBvcHNlY3Rpb24iCQkJCVwKLQkJICAgICA6IDogImkiIChfX0ZJTEVfXyksICJpIiAoX19MSU5FX18pLAlcCi0JCSAgICAgImkiIChzaXplb2Yoc3RydWN0IGJ1Z19lbnRyeSkpKTsJCVwKLQlmb3IgKDs7KSA7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2Vsc2UKLSNkZWZpbmUgQlVHKCkJCQkJCQkJXAotZG8gewkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgidWQyIik7CQkJCQlcCi0JZm9yICg7OykgOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2VuZGlmIC8qICFDT05GSUdfQlVHICovCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KLSNlbmRpZiAvKiBBU01fWDg2X19CVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXg4Ni9idWdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNjA0OTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2J1Z3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQlVHU19ICi0jZGVmaW5lIEFTTV9YODZfX0JVR1NfSAotCi1leHRlcm4gdm9pZCBjaGVja19idWdzKHZvaWQpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVUF9JTlRFTCkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQotaW50IHBwcm9fd2l0aF9yYW1fYnVnKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHBwcm9fd2l0aF9yYW1fYnVnKHZvaWQpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQlVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS14ODYvYnl0ZW9yZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMmYyN2QuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2J5dGVvcmRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19CWVRFT1JERVJfSAotI2RlZmluZSBBU01fWDg2X19CWVRFT1JERVJfSAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotI2lmZGVmIF9fR05VQ19fCi0KLSNpZmRlZiBfX2kzODZfXwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9CU1dBUAotCWFzbSgiYnN3YXAgJTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKLSNlbHNlCi0JYXNtKCJ4Y2hnYiAlYjAsJWgwXG5cdCIJLyogc3dhcCBsb3dlciBieXRlcwkqLwotCSAgICAicm9ybCAkMTYsJTBcblx0IgkvKiBzd2FwIHdvcmRzCQkqLwotCSAgICAieGNoZ2IgJWIwLCVoMCIJLyogc3dhcCBoaWdoZXIgYnl0ZXMJKi8KLQkgICAgOiAiPXEiICh4KQotCSAgICA6ICIwIiAoeCkpOwotI2VuZGlmCi0JcmV0dXJuIHg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3U2NCBfX19hcmNoX19zd2FiNjQoX191NjQgdmFsKQotewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fdTMyIGE7Ci0JCQlfX3UzMiBiOwotCQl9IHM7Ci0JCV9fdTY0IHU7Ci0JfSB2OwotCXYudSA9IHZhbDsKLSNpZmRlZiBDT05GSUdfWDg2X0JTV0FQCi0JYXNtKCJic3dhcGwgJTAgOyBic3dhcGwgJTEgOyB4Y2hnbCAlMCwlMSIKLQkgICAgOiAiPXIiICh2LnMuYSksICI9ciIgKHYucy5iKQotCSAgICA6ICIwIiAodi5zLmEpLCAiMSIgKHYucy5iKSk7Ci0jZWxzZQotCXYucy5hID0gX19fYXJjaF9fc3dhYjMyKHYucy5hKTsKLQl2LnMuYiA9IF9fX2FyY2hfX3N3YWIzMih2LnMuYik7Ci0JYXNtKCJ4Y2hnbCAlMCwlMSIKLQkgICAgOiAiPXIiICh2LnMuYSksICI9ciIgKHYucy5iKQotCSAgICA6ICIwIiAodi5zLmEpLCAiMSIgKHYucy5iKSk7Ci0jZW5kaWYKLQlyZXR1cm4gdi51OwotfQotCi0jZWxzZSAvKiBfX2kzODZfXyAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHgpCi17Ci0JYXNtKCJic3dhcHEgJTAiCi0JICAgIDogIj1yIiAoeCkKLQkgICAgOiAiMCIgKHgpKTsKLQlyZXR1cm4geDsKLX0KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQotewotCWFzbSgiYnN3YXBsICUwIgotCSAgICA6ICI9ciIgKHgpCi0JICAgIDogIjAiICh4KSk7Ci0JcmV0dXJuIHg7Ci19Ci0KLSNlbmRpZgotCi0vKiBEbyBub3QgZGVmaW5lIHN3YWIxNi4gIEdjYyBpcyBzbWFydCBlbm91Z2ggdG8gcmVjb2duaXplICJDIiB2ZXJzaW9uIGFuZAotICAgY29udmVydCBpdCBpbnRvIHJvdGF0aW9uIG9yIGV4aGFuZ2UuICAqLwotCi0jZGVmaW5lIF9fYXJjaF9fc3dhYjY0KHgpIF9fX2FyY2hfX3N3YWI2NCh4KQotI2RlZmluZSBfX2FyY2hfX3N3YWIzMih4KSBfX19hcmNoX19zd2FiMzIoeCkKLQotI2RlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9jYWNoZS5oIGIvaW5jbHVkZS9hc20teDg2L2NhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhM2YxY2MuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0NBQ0hFX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQ0FDSEVfSAotCi0vKiBMMSBjYWNoZSBsaW5lIHNpemUgKi8KLSNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCi0jZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQotCi0jZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQotCi0jaWZkZWYgQ09ORklHX1g4Nl9WU01QCi0vKiB2U01QIEludGVybm9kZSBjYWNoZWxpbmUgc2hpZnQgKi8KLSNkZWZpbmUgSU5URVJOT0RFX0NBQ0hFX1NISUZUICgxMikKLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMSA8PCAoSU5URVJOT0RFX0NBQ0hFX1NISUZUKSkpKQlcCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBhZ2VfYWxpZ25lZCIpKSkKLSNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20teDg2L2NhY2hlZmx1c2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4NDBlZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvY2FjaGVmbHVzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQ0FDSEVGTFVTSF9ICi0jZGVmaW5lIEFTTV9YODZfX0NBQ0hFRkxVU0hfSAotCi0vKiBLZWVwIGluY2x1ZGVzIHRoZSBzYW1lIGFjcm9zcyBhcmNoZXMuICAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLS8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgaW50ZWwuICovCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGcsIGFkciwgbGVuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJXAotCW1lbWNweSgoZHN0KSwgKHNyYyksIChsZW4pKQotI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pCVwKLQltZW1jcHkoKGRzdCksIChzcmMpLCAobGVuKSkKLQotI2RlZmluZSBQR19ub25fV0IJCQkJUEdfYXJjaF8xCi1QQUdFRkxBRyhOb25XQiwgbm9uX1dCKQotCi0vKgotICogVGhlIHNldF9tZW1vcnlfKiBBUEkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBhIHZpcnR1YWwKLSAqIGFkZHJlc3MgcmFuZ2UuIFRoZSBhdHRyaWJ1dGVzIGluY2x1ZGU6Ci0gKiBDYWNoYWJpbGl0eSAgIDogVW5DYWNoZWQsIFdyaXRlQ29tYmluaW5nLCBXcml0ZUJhY2sKLSAqIEV4ZWN1dGFiaWxpdHkgOiBlWGV1dGFibGUsIE5vdGVYZWN1dGFibGUKLSAqIFJlYWQvV3JpdGUgICAgOiBSZWFkT25seSwgUmVhZFdyaXRlCi0gKiBQcmVzZW5jZSAgICAgIDogTm90UHJlc2VudAotICoKLSAqIFdpdGhpbiBhIGNhdGFnb3J5LCB0aGUgYXR0cmlidXRlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgotICoKLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIEFQSSB3aWxsIHRha2UgY2FyZSBvZiB2YXJpb3VzIGFzcGVjdHMgdGhhdAotICogYXJlIGFzc29jaWF0ZWQgd2l0aCBjaGFuZ2luZyBzdWNoIGF0dHJpYnV0ZXMsIHN1Y2ggYXM6Ci0gKiAtIEZsdXNoaW5nIFRMQnMKLSAqIC0gRmx1c2hpbmcgQ1BVIGNhY2hlcwotICogLSBNYWtpbmcgc3VyZSBhbGlhc2VzIG9mIHRoZSBtZW1vcnkgYmVoaW5kIHRoZSBtYXBwaW5nIGRvbid0IHZpb2xhdGUKLSAqICAgY29oZXJlbmN5IHJ1bGVzIGFzIGRlZmluZWQgYnkgdGhlIENQVSBpbiB0aGUgc3lzdGVtLgotICoKLSAqIFdoYXQgdGhpcyBBUEkgZG9lcyBub3QgZG86Ci0gKiAtIFByb3ZpZGUgZXhjbHVzaW9uIGJldHdlZW4gdmFyaW91cyBjYWxsZXJzIC0gaW5jbHVkaW5nIGNhbGxlcnMgdGhhdAotICogICBvcGVyYXRpb24gb24gb3RoZXIgbWFwcGluZ3Mgb2YgdGhlIHNhbWUgcGh5c2ljYWwgcGFnZQotICogLSBSZXN0b3JlIGRlZmF1bHQgYXR0cmlidXRlcyB3aGVuIGEgcGFnZSBpcyBmcmVlZAotICogLSBHdWFyYW50ZWUgdGhhdCBtYXBwaW5ncyBvdGhlciB0aGFuIHRoZSByZXF1ZXN0ZWQgb25lIGFyZQotICogICBpbiBhbnkgc3RhdGUsIG90aGVyIHRoYW4gdGhhdCB0aGVzZSBkbyBub3QgdmlvbGF0ZSBydWxlcyBmb3IKLSAqICAgdGhlIENQVSB5b3UgaGF2ZS4gRG8gbm90IGRlcGVuZCBvbiBhbnkgZWZmZWN0cyBvbiBvdGhlciBtYXBwaW5ncywKLSAqICAgQ1BVcyBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGhhdmUgbWF5IGhhdmUgbW9yZSByZWxheGVkIHJ1bGVzLgotICogVGhlIGNhbGxlciBpcyByZXF1aXJlZCB0byB0YWtlIGNhcmUgb2YgdGhlc2UuCi0gKi8KLQotaW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKLWludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwotaW50IHNldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwotaW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwotaW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwotaW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci0KLWludCBzZXRfbWVtb3J5X2FycmF5X3VjKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSk7Ci1pbnQgc2V0X21lbW9yeV9hcnJheV93Yih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgYWRkcmluYXJyYXkpOwotCi0vKgotICogRm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZCBBUElzLCBhIGZldyBmdW5jdGlvbnMKLSAqIGFyZSBwcm92aWRlZCB0aGF0IHdvcmsgb24gYSAic3RydWN0IHBhZ2UiLgotICogVGhlc2UgZnVuY3Rpb25zIG9wZXJhdGUgT05MWSBvbiB0aGUgMToxIGtlcm5lbCBtYXBwaW5nIG9mIHRoZQotICogbWVtb3J5IHRoYXQgdGhlIHN0cnVjdCBwYWdlIHJlcHJlc2VudHMsIGFuZCBpbnRlcm5hbGx5IGp1c3QKLSAqIGNhbGwgdGhlIHNldF9tZW1vcnlfKiBmdW5jdGlvbi4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKLSAqIHNldF9tZW1vcnlfKiBmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIGNvbnZlbnRpb25zLgotICoKLSAqIFRoZXNlIEFQSXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgKmRlcHJlY2F0ZWQqIGFuZCBhcmUgbGlrZWx5IGdvaW5nIHRvCi0gKiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCi0gKiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoZSBpbXBsaWNpdCBvcGVyYXRpb24gb24gdGhlIDE6MSBtYXBwaW5nIG9ubHksCi0gKiBtYWtpbmcgdGhpcyBub3QgYSBnZW5lcmFsbHkgdXNlZnVsIEFQSS4KLSAqCi0gKiBTcGVjaWZpY2FsbHksIG1hbnkgdXNlcnMgb2YgdGhlIG9sZCBBUElzIGhhZCBhIHZpcnR1YWwgYWRkcmVzcywKLSAqIGNhbGxlZCB2aXJ0X3RvX3BhZ2UoKSBvciB2bWFsbG9jX3RvX3BhZ2UoKSBvbiB0aGF0IGFkZHJlc3MgdG8KLSAqIGdldCBhIHN0cnVjdCBwYWdlKiB0aGF0IHRoZSBvbGQgQVBJIHJlcXVpcmVkLgotICogVG8gY29udmVydCB0aGVzZSBjYXNlcywgdXNlIHNldF9tZW1vcnlfKigpIG9uIHRoZSBvcmlnaW5hbAotICogdmlydHVhbCBhZGRyZXNzLCBkbyBub3QgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotCi1pbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOwotaW50IHNldF9wYWdlc193YihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTsKLWludCBzZXRfcGFnZXNfeChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTsKLWludCBzZXRfcGFnZXNfbngoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X3BhZ2VzX3JvKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOwotaW50IHNldF9wYWdlc19ydyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTsKLQotCi12b2lkIGNsZmx1c2hfY2FjaGVfcmFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgaW50IHNpemUpOwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQotdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKTsKLWV4dGVybiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQV9URVNUCi1pbnQgcm9kYXRhX3Rlc3Qodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgcm9kYXRhX3Rlc3Qodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY2FsZ2FyeS5oIGIvaW5jbHVkZS9hc20teDg2L2NhbGdhcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzZmQyNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvY2FsZ2FyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIERlcml2ZWQgZnJvbSBpbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKLSAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA2LTIwMDcKLSAqCi0gKiBBdXRob3I6IEpvbiBNYXNvbiA8amRtYXNvbkB1cy5pYm0uY29tPgotICogQXV0aG9yOiBNdWxpIEJlbi1ZZWh1ZGEgPG11bGlAaWwuaWJtLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX0NBTEdBUllfSAotI2RlZmluZSBBU01fWDg2X19DQUxHQVJZX0gKLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3QgaW9tbXVfdGFibGUgewotCXN0cnVjdCBjYWxfY2hpcHNldF9vcHMgKmNoaXBfb3BzOyAvKiBjaGlwc2V0IHNwZWNpZmljIGZ1bmNzICovCi0JdW5zaWduZWQgbG9uZyAgaXRfYmFzZTsgICAgICAvKiBtYXBwZWQgYWRkcmVzcyBvZiB0Y2UgdGFibGUgKi8KLQl1bnNpZ25lZCBsb25nICBpdF9oaW50OyAgICAgIC8qIEhpbnQgZm9yIG5leHQgYWxsb2MgKi8KLQl1bnNpZ25lZCBsb25nICppdF9tYXA7ICAgICAgIC8qIEEgc2ltcGxlIGFsbG9jYXRpb24gYml0bWFwIGZvciBub3cgKi8KLQl2b2lkIF9faW9tZW0gICpiYmFyOyAgICAgICAgIC8qIEJyaWRnZSBCQVIgKi8KLQl1NjQJICAgICAgIHRhcl92YWw7ICAgICAgLyogVGFibGUgQWRkcmVzcyBSZWdpc3RlciAqLwotCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwotCXNwaW5sb2NrX3QgICAgIGl0X2xvY2s7ICAgICAgLyogUHJvdGVjdHMgaXRfbWFwICovCi0JdW5zaWduZWQgaW50ICAgaXRfc2l6ZTsgICAgICAvKiBTaXplIG9mIGlvbW11IHRhYmxlIGluIGVudHJpZXMgKi8KLQl1bnNpZ25lZCBjaGFyICBpdF9idXNubzsgICAgIC8qIEJ1cyBudW1iZXIgdGhpcyB0YWJsZSBiZWxvbmdzIHRvICovCi19OwotCi1zdHJ1Y3QgY2FsX2NoaXBzZXRfb3BzIHsKLQl2b2lkICgqaGFuZGxlX3F1aXJrcykoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotCXZvaWQgKCp0Y2VfY2FjaGVfYmxhc3QpKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKTsKLQl2b2lkICgqZHVtcF9lcnJvcl9yZWdzKShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCk7Ci19OwotCi0jZGVmaW5lIFRDRV9UQUJMRV9TSVpFX1VOU1BFQ0lGSUVECX4wCi0jZGVmaW5lIFRDRV9UQUJMRV9TSVpFXzY0SwkJMAotI2RlZmluZSBUQ0VfVEFCTEVfU0laRV8xMjhLCQkxCi0jZGVmaW5lIFRDRV9UQUJMRV9TSVpFXzI1NksJCTIKLSNkZWZpbmUgVENFX1RBQkxFX1NJWkVfNTEySwkJMwotI2RlZmluZSBUQ0VfVEFCTEVfU0laRV8xTQkJNAotI2RlZmluZSBUQ0VfVEFCTEVfU0laRV8yTQkJNQotI2RlZmluZSBUQ0VfVEFCTEVfU0laRV80TQkJNgotI2RlZmluZSBUQ0VfVEFCTEVfU0laRV84TQkJNwotCi1leHRlcm4gaW50IHVzZV9jYWxnYXJ5OwotCi0jaWZkZWYgQ09ORklHX0NBTEdBUllfSU9NTVUKLWV4dGVybiBpbnQgY2FsZ2FyeV9pb21tdV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgZGV0ZWN0X2NhbGdhcnkodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgY2FsZ2FyeV9pb21tdV9pbml0KHZvaWQpIHsgcmV0dXJuIDE7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXRlY3RfY2FsZ2FyeSh2b2lkKSB7IHJldHVybjsgfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19DQUxHQVJZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9jaGVja3N1bV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L2NoZWNrc3VtXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNDFlOGMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NoZWNrc3VtXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19DSEVDS1NVTV8zMl9ICi0jZGVmaW5lIEFTTV9YODZfX0NIRUNLU1VNXzMyX0gKLQotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotLyoKLSAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAotICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKLSAqCi0gKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgotICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKLSAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAotICoKLSAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQotICovCi1hc21saW5rYWdlIF9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSk7Ci0KLS8qCi0gKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKLSAqIGNoZWNrc3VtcywgYW5kIGhhbmRsZXMgdXNlci1zcGFjZSBwb2ludGVyIGV4Y2VwdGlvbnMgY29ycmVjdGx5LCB3aGVuIG5lZWRlZC4KLSAqCi0gKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KLSAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5Ci0gKi8KLQotYXNtbGlua2FnZSBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKLQkJCQkJICAgIGludCBsZW4sIF9fd3N1bSBzdW0sCi0JCQkJCSAgICBpbnQgKnNyY19lcnJfcHRyLCBpbnQgKmRzdF9lcnJfcHRyKTsKLQotLyoKLSAqCU5vdGU6IHdoZW4geW91IGdldCBhIE5VTEwgcG9pbnRlciBleGNlcHRpb24gaGVyZSB0aGlzIG1lYW5zIHNvbWVvbmUKLSAqCXBhc3NlZCBpbiBhbiBpbmNvcnJlY3Qga2VybmVsIGFkZHJlc3MgdG8gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucy4KLSAqCi0gKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZQotICoJYWNjZXNzX29rKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCi0JCQkJCSAgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtKQotewotCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKHNyYywgZHN0LCBsZW4sIHN1bSwgTlVMTCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLAotCQkJCQkJIHZvaWQgKmRzdCwKLQkJCQkJCSBpbnQgbGVuLCBfX3dzdW0gc3VtLAotCQkJCQkJIGludCAqZXJyX3B0cikKLXsKLQltaWdodF9zbGVlcCgpOwotCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilzcmMsIGRzdCwKLQkJCQkJIGxlbiwgc3VtLCBlcnJfcHRyLCBOVUxMKTsKLX0KLQotLyoKLSAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKLSAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCi0gKgotICoJQnkgSm9yZ2UgQ3dpayA8am9yZ2VAbGFzZXIuc2F0bGluay5uZXQ+LCBhZGFwdGVkIGZvciBsaW51eCBieQotICoJQXJudCBHdWxicmFuZHNlbi4KLSAqLwotc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCi17Ci0JdW5zaWduZWQgaW50IHN1bTsKLQotCWFzbSB2b2xhdGlsZSgibW92bCAoJTEpLCAlMAk7XG4iCi0JCSAgICAgInN1YmwgJDQsICUyCTtcbiIKLQkJICAgICAiamJlIDJmCQk7XG4iCi0JCSAgICAgImFkZGwgNCglMSksICUwCTtcbiIKLQkJICAgICAiYWRjbCA4KCUxKSwgJTAJO1xuIgotCQkgICAgICJhZGNsIDEyKCUxKSwgJTA7XG4iCi0JCSAgICAgIjE6CWFkY2wgMTYoJTEpLCAlMAk7XG4iCi0JCSAgICAgImxlYSA0KCUxKSwgJTEJO1xuIgotCQkgICAgICJkZWNsICUyCTtcbiIKLQkJICAgICAiam5lIDFiCQk7XG4iCi0JCSAgICAgImFkY2wgJDAsICUwCTtcbiIKLQkJICAgICAibW92bCAlMCwgJTIJO1xuIgotCQkgICAgICJzaHJsICQxNiwgJTAJO1xuIgotCQkgICAgICJhZGR3ICV3MiwgJXcwCTtcbiIKLQkJICAgICAiYWRjbCAkMCwgJTAJO1xuIgotCQkgICAgICJub3RsICUwCTtcbiIKLQkJICAgICAiMjoJCTtcbiIKLQkvKiBTaW5jZSB0aGUgaW5wdXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSBsb2FkZWQgd2l0aCBpcGggYW5kIGlobAotCSAgIGFyZSBtb2RpZmllZCwgd2UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlbSBhcyBvdXRwdXRzLCBvciBnY2MKLQkgICB3aWxsIGFzc3VtZSB0aGV5IGNvbnRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiAqLwotCQkgICAgIDogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKQotCQkgICAgIDogIjEiIChpcGgpLCAiMiIgKGlobCkKLQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNilzdW07Ci19Ci0KLS8qCi0gKglGb2xkIGEgcGFydGlhbCBjaGVja3N1bQotICovCi0KLXN0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKLXsKLQlhc20oImFkZGwgJTEsICUwCQk7XG4iCi0JICAgICJhZGNsICQweGZmZmYsICUwCTtcbiIKLQkgICAgOiAiPXIiIChzdW0pCi0JICAgIDogInIiICgoX19mb3JjZSB1MzIpc3VtIDw8IDE2KSwKLQkgICAgICAiMCIgKChfX2ZvcmNlIHUzMilzdW0gJiAweGZmZmYwMDAwKSk7Ci0JcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpKH4oX19mb3JjZSB1MzIpc3VtID4+IDE2KTsKLX0KLQotc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQlfX3dzdW0gc3VtKQotewotCWFzbSgiYWRkbCAlMSwgJTAJO1xuIgotCSAgICAiYWRjbCAlMiwgJTAJO1xuIgotCSAgICAiYWRjbCAlMywgJTAJO1xuIgotCSAgICAiYWRjbCAkMCwgJTAJO1xuIgotCSAgICA6ICI9ciIgKHN1bSkKLQkgICAgOiAiZyIgKGRhZGRyKSwgImciKHNhZGRyKSwKLQkgICAgICAiZyIgKChsZW4gKyBwcm90bykgPDwgOCksICIwIiAoc3VtKSk7Ci0JcmV0dXJuIHN1bTsKLX0KLQotLyoKLSAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCi0gKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAotICovCi1zdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKLQkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCV9fd3N1bSBzdW0pCi17Ci0JcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsIGRhZGRyLCBsZW4sIHByb3RvLCBzdW0pKTsKLX0KLQotLyoKLSAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKLSAqIGluIGljbXAuYwotICovCi0KLXN0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKLXsKLSAgICByZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKLX0KLQotI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQotc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJICAgICAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkgICAgICBfX3dzdW0gc3VtKQotewotCWFzbSgiYWRkbCAwKCUxKSwgJTAJO1xuIgotCSAgICAiYWRjbCA0KCUxKSwgJTAJO1xuIgotCSAgICAiYWRjbCA4KCUxKSwgJTAJO1xuIgotCSAgICAiYWRjbCAxMiglMSksICUwCTtcbiIKLQkgICAgImFkY2wgMCglMiksICUwCTtcbiIKLQkgICAgImFkY2wgNCglMiksICUwCTtcbiIKLQkgICAgImFkY2wgOCglMiksICUwCTtcbiIKLQkgICAgImFkY2wgMTIoJTIpLCAlMAk7XG4iCi0JICAgICJhZGNsICUzLCAlMAk7XG4iCi0JICAgICJhZGNsICU0LCAlMAk7XG4iCi0JICAgICJhZGNsICQwLCAlMAk7XG4iCi0JICAgIDogIj0mciIgKHN1bSkKLQkgICAgOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksCi0JICAgICAgInIiIChodG9ubChsZW4pKSwgInIiIChodG9ubChwcm90bykpLCAiMCIgKHN1bSkpOwotCi0JcmV0dXJuIGNzdW1fZm9sZChzdW0pOwotfQotCi0vKgotICoJQ29weSBhbmQgY2hlY2tzdW0gdG8gdXNlcgotICovCi0jZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKLXN0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fYW5kX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsCi0JCQkJCSAgIHZvaWQgX191c2VyICpkc3QsCi0JCQkJCSAgIGludCBsZW4sIF9fd3N1bSBzdW0sCi0JCQkJCSAgIGludCAqZXJyX3B0cikKLXsKLQltaWdodF9zbGVlcCgpOwotCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkc3QsIGxlbikpCi0JCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKHNyYywgKF9fZm9yY2Ugdm9pZCAqKWRzdCwKLQkJCQkJCSBsZW4sIHN1bSwgTlVMTCwgZXJyX3B0cik7Ci0KLQlpZiAobGVuKQotCQkqZXJyX3B0ciA9IC1FRkFVTFQ7Ci0KLQlyZXR1cm4gKF9fZm9yY2UgX193c3VtKS0xOyAvKiBpbnZhbGlkIGNoZWNrc3VtICovCi19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19DSEVDS1NVTV8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY2hlY2tzdW1fNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jaGVja3N1bV82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBmNDAzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9jaGVja3N1bV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQ0hFQ0tTVU1fNjRfSAotI2RlZmluZSBBU01fWDg2X19DSEVDS1NVTV82NF9ICi0KLS8qCi0gKiBDaGVja3N1bXMgZm9yIHg4Ni02NAotICogQ29weXJpZ2h0IDIwMDIgYnkgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCi0gKiB3aXRoIHNvbWUgY29kZSBmcm9tIGFzbS14ODYvY2hlY2tzdW0uaAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0vKioKLSAqIGNzdW1fZm9sZCAtIEZvbGQgYW5kIGludmVydCBhIDMyYml0IGNoZWNrc3VtLgotICogc3VtOiAzMmJpdCB1bmZvbGRlZCBzdW0KLSAqCi0gKiBGb2xkIGEgMzJiaXQgcnVubmluZyBjaGVja3N1bSB0byAxNmJpdCBhbmQgaW52ZXJ0IGl0LiBUaGlzIGlzIHVzdWFsbHkKLSAqIHRoZSBsYXN0IHN0ZXAgYmVmb3JlIHB1dHRpbmcgYSBjaGVja3N1bSBpbnRvIGEgcGFja2V0LgotICogTWFrZSBzdXJlIG5vdCB0byBtaXggd2l0aCA2NGJpdCBjaGVja3N1bXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKLXsKLQlhc20oIiAgYWRkbCAlMSwlMFxuIgotCSAgICAiICBhZGNsICQweGZmZmYsJTAiCi0JICAgIDogIj1yIiAoc3VtKQotCSAgICA6ICJyIiAoKF9fZm9yY2UgdTMyKXN1bSA8PCAxNiksCi0JICAgICAgIjAiICgoX19mb3JjZSB1MzIpc3VtICYgMHhmZmZmMDAwMCkpOwotCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSh+KF9fZm9yY2UgdTMyKXN1bSA+PiAxNik7Ci19Ci0KLS8qCi0gKglUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCi0gKgl3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgotICoKLSAqCUJ5IEpvcmdlIEN3aWsgPGpvcmdlQGxhc2VyLnNhdGxpbmsubmV0PiwgYWRhcHRlZCBmb3IgbGludXggYnkKLSAqCUFybnQgR3VsYnJhbmRzZW4uCi0gKi8KLQotLyoqCi0gKiBpcF9mYXN0X2NzdW0gLSBDb21wdXRlIHRoZSBJUHY0IGhlYWRlciBjaGVja3N1bSBlZmZpY2llbnRseS4KLSAqIGlwaDogaXB2NCBoZWFkZXIKLSAqIGlobDogbGVuZ3RoIG9mIGhlYWRlciAvIDQKLSAqLwotc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCi17Ci0JdW5zaWduZWQgaW50IHN1bTsKLQotCWFzbSgiICBtb3ZsICglMSksICUwXG4iCi0JICAgICIgIHN1YmwgJDQsICUyXG4iCi0JICAgICIgIGpiZSAyZlxuIgotCSAgICAiICBhZGRsIDQoJTEpLCAlMFxuIgotCSAgICAiICBhZGNsIDgoJTEpLCAlMFxuIgotCSAgICAiICBhZGNsIDEyKCUxKSwgJTBcbiIKLQkgICAgIjE6IGFkY2wgMTYoJTEpLCAlMFxuIgotCSAgICAiICBsZWEgNCglMSksICUxXG4iCi0JICAgICIgIGRlY2wgJTJcbiIKLQkgICAgIiAgam5lCTFiXG4iCi0JICAgICIgIGFkY2wgJDAsICUwXG4iCi0JICAgICIgIG1vdmwgJTAsICUyXG4iCi0JICAgICIgIHNocmwgJDE2LCAlMFxuIgotCSAgICAiICBhZGR3ICV3MiwgJXcwXG4iCi0JICAgICIgIGFkY2wgJDAsICUwXG4iCi0JICAgICIgIG5vdGwgJTBcbiIKLQkgICAgIjI6IgotCS8qIFNpbmNlIHRoZSBpbnB1dCByZWdpc3RlcnMgd2hpY2ggYXJlIGxvYWRlZCB3aXRoIGlwaCBhbmQgaWhsCi0JICAgYXJlIG1vZGlmaWVkLCB3ZSBtdXN0IGFsc28gc3BlY2lmeSB0aGVtIGFzIG91dHB1dHMsIG9yIGdjYwotCSAgIHdpbGwgYXNzdW1lIHRoZXkgY29udGFpbiB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuICovCi0JICAgIDogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKQotCSAgICA6ICIxIiAoaXBoKSwgIjIiIChpaGwpCi0JICAgIDogIm1lbW9yeSIpOwotCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KXN1bTsKLX0KLQotLyoqCi0gKiBjc3VtX3RjcHVwX25vZm9sZCAtIENvbXB1dGUgYW4gSVB2NCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLgotICogQHNhZGRyOiBzb3VyY2UgYWRkcmVzcwotICogQGRhZGRyOiBkZXN0aW5hdGlvbiBhZGRyZXNzCi0gKiBAbGVuOiBsZW5ndGggb2YgcGFja2V0Ci0gKiBAcHJvdG86IGlwIHByb3RvY29sIG9mIHBhY2tldAotICogQHN1bTogaW5pdGlhbCBzdW0gdG8gYmUgYWRkZWQgaW4gKDMyYml0IHVuZm9sZGVkKQotICoKLSAqIFJldHVybnMgdGhlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gdGhlIGlucHV0IGRhdGEuIFJlc3VsdCBpcwotICogMzJiaXQgdW5mb2xkZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgX193c3VtCi1jc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCi17Ci0JYXNtKCIgIGFkZGwgJTEsICUwXG4iCi0JICAgICIgIGFkY2wgJTIsICUwXG4iCi0JICAgICIgIGFkY2wgJTMsICUwXG4iCi0JICAgICIgIGFkY2wgJDAsICUwXG4iCi0JICAgIDogIj1yIiAoc3VtKQotCSAgICA6ICJnIiAoZGFkZHIpLCAiZyIgKHNhZGRyKSwKLQkgICAgICAiZyIgKChsZW4gKyBwcm90byk8PDgpLCAiMCIgKHN1bSkpOwotCXJldHVybiBzdW07Ci19Ci0KLQotLyoqCi0gKiBjc3VtX3RjcHVwX21hZ2ljIC0gQ29tcHV0ZSBhbiBJUHY0IHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0uCi0gKiBAc2FkZHI6IHNvdXJjZSBhZGRyZXNzCi0gKiBAZGFkZHI6IGRlc3RpbmF0aW9uIGFkZHJlc3MKLSAqIEBsZW46IGxlbmd0aCBvZiBwYWNrZXQKLSAqIEBwcm90bzogaXAgcHJvdG9jb2wgb2YgcGFja2V0Ci0gKiBAc3VtOiBpbml0aWFsIHN1bSB0byBiZSBhZGRlZCBpbiAoMzJiaXQgdW5mb2xkZWQpCi0gKgotICogUmV0dXJucyB0aGUgMTZiaXQgcHNldWRvIGhlYWRlciBjaGVja3N1bSB0aGUgaW5wdXQgZGF0YSBhbHJlYWR5Ci0gKiBjb21wbGVtZW50ZWQgYW5kIHJlYWR5IHRvIGJlIGZpbGxlZCBpbi4KLSAqLwotc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQotewotCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7Ci19Ci0KLS8qKgotICogY3N1bV9wYXJ0aWFsIC0gQ29tcHV0ZSBhbiBpbnRlcm5ldCBjaGVja3N1bS4KLSAqIEBidWZmOiBidWZmZXIgdG8gYmUgY2hlY2tzdW1tZWQKLSAqIEBsZW46IGxlbmd0aCBvZiBidWZmZXIuCi0gKiBAc3VtOiBpbml0aWFsIHN1bSB0byBiZSBhZGRlZCBpbiAoMzJiaXQgdW5mb2xkZWQpCi0gKgotICogUmV0dXJucyB0aGUgMzJiaXQgdW5mb2xkZWQgaW50ZXJuZXQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlci4KLSAqIEJlZm9yZSBmaWxsaW5nIGl0IGluIGl0IG5lZWRzIHRvIGJlIGNzdW1fZm9sZCgpJ2VkLgotICogYnVmZiBzaG91bGQgYmUgYWxpZ25lZCB0byBhIDY0Yml0IGJvdW5kYXJ5IGlmIHBvc3NpYmxlLgotICovCi1leHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKLQotI2RlZmluZSAgX0hBVkVfQVJDSF9DT1BZX0FORF9DU1VNX0ZST01fVVNFUiAxCi0jZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIgMQotCi0KLS8qIERvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSB0aGUgd3JhcHBlcnMgYmVsb3cgKi8KLWV4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhjb25zdCB2b2lkICpzcmMsIGNvbnN0IHZvaWQgKmRzdCwKLQkJCQkJaW50IGxlbiwgX193c3VtIHN1bSwKLQkJCQkJaW50ICpzcmNfZXJyX3B0ciwgaW50ICpkc3RfZXJyX3B0cik7Ci0KLQotZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAotCQkJCQkgIGludCBsZW4sIF9fd3N1bSBpc3VtLCBpbnQgKmVycnApOwotZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHZvaWQgKnNyYywgdm9pZCBfX3VzZXIgKmRzdCwKLQkJCQkJaW50IGxlbiwgX193c3VtIGlzdW0sIGludCAqZXJycCk7Ci1leHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCi0JCQkJCWludCBsZW4sIF9fd3N1bSBzdW0pOwotCi0vKiBPbGQgbmFtZXMuIFRvIGJlIHJlbW92ZWQuICovCi0jZGVmaW5lIGNzdW1fYW5kX2NvcHlfdG9fdXNlciBjc3VtX3BhcnRpYWxfY29weV90b191c2VyCi0jZGVmaW5lIGNzdW1fYW5kX2NvcHlfZnJvbV91c2VyIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcgotCi0vKioKLSAqIGlwX2NvbXB1dGVfY3N1bSAtIENvbXB1dGUgYW4gMTZiaXQgSVAgY2hlY2tzdW0uCi0gKiBAYnVmZjogYnVmZmVyIGFkZHJlc3MuCi0gKiBAbGVuOiBsZW5ndGggb2YgYnVmZmVyLgotICoKLSAqIFJldHVybnMgdGhlIDE2Yml0IGZvbGRlZC9pbnZlcnRlZCBjaGVja3N1bSBvZiB0aGUgcGFzc2VkIGJ1ZmZlci4KLSAqIFJlYWR5IHRvIGZpbGwgaW4uCi0gKi8KLWV4dGVybiBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKTsKLQotLyoqCi0gKiBjc3VtX2lwdjZfbWFnaWMgLSBDb21wdXRlIGNoZWNrc3VtIG9mIGFuIElQdjYgcHNldWRvIGhlYWRlci4KLSAqIEBzYWRkcjogc291cmNlIGFkZHJlc3MKLSAqIEBkYWRkcjogZGVzdGluYXRpb24gYWRkcmVzcwotICogQGxlbjogbGVuZ3RoIG9mIHBhY2tldAotICogQHByb3RvOiBwcm90b2NvbCBvZiBwYWNrZXQKLSAqIEBzdW06IGluaXRpYWwgc3VtICgzMmJpdCB1bmZvbGRlZCkgdG8gYmUgYWRkZWQgaW4KLSAqCi0gKiBDb21wdXRlcyBhbiBJUHY2IHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0uIFRoaXMgc3VtIGlzIGFkZGVkIHRoZSBjaGVja3N1bQotICogaW50byBVRFAvVENQIHBhY2tldHMgYW5kIGNvbnRhaW5zIHNvbWUgbGluayBsYXllciBpbmZvcm1hdGlvbi4KLSAqIFJldHVybnMgdGhlIHVuZm9sZGVkIDMyYml0IGNoZWNrc3VtLgotICovCi0KLXN0cnVjdCBpbjZfYWRkcjsKLQotI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTSAxCi1leHRlcm4gX19zdW0xNgotY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCV9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFkZDMyX3dpdGhfY2FycnkodW5zaWduZWQgYSwgdW5zaWduZWQgYikKLXsKLQlhc20oImFkZGwgJTIsJTBcblx0IgotCSAgICAiYWRjbCAkMCwlMCIKLQkgICAgOiAiPXIiIChhKQotCSAgICA6ICIwIiAoYSksICJyIiAoYikpOwotCXJldHVybiBhOwotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fQ0hFQ0tTVU1fNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MjJlNDUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0NNUFhDSEdfMzJfSAotI2RlZmluZSBBU01fWDg2X19DTVBYQ0hHXzMyX0gKLQotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPiAvKiBmb3IgTE9DS19QUkVGSVggKi8KLQotLyoKLSAqIE5vdGU6IGlmIHlvdSB1c2Ugc2V0NjRfYml0KCksIF9fY21weGNoZzY0KCksIG9yIHRoZWlyIHZhcmlhbnRzLCB5b3UKLSAqICAgICAgIHlvdSBuZWVkIHRvIHRlc3QgZm9yIHRoZSBmZWF0dXJlIGluIGJvb3RfY3B1X2RhdGEuCi0gKi8KLQotI2RlZmluZSB4Y2hnKHB0ciwgdikJCQkJCQkJXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykodiksIChwdHIpLCBzaXplb2YoKihwdHIpKSkpCi0KLXN0cnVjdCBfX3hjaGdfZHVtbXkgewotCXVuc2lnbmVkIGxvbmcgYVsxMDBdOwotfTsKLSNkZWZpbmUgX194Zyh4KSAoKHN0cnVjdCBfX3hjaGdfZHVtbXkgKikoeCkpCi0KLS8qCi0gKiBUaGUgc2VtYW50aWNzIG9mIFhDSEdDTVA4QiBhcmUgYSBiaXQgc3RyYW5nZSwgdGhpcyBpcyB3aHkKLSAqIHRoZXJlIGlzIGEgbG9vcCBhbmQgdGhlIGxvYWRpbmcgb2YgJSVlYXggYW5kICUlZWR4IGhhcyB0bwotICogYmUgaW5zaWRlLiBUaGlzIGlubGluZXMgd2VsbCBpbiBtb3N0IGNhc2VzLCB0aGUgY2FjaGVkCi0gKiBjb3N0IGlzIGFyb3VuZCB+MzggY3ljbGVzLiAoaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCB3YW50Ci0gKiB0byBkbyBhbiBTSU1ELzNETk9XIS9NTVgvRlBVIDY0LWJpdCBzdG9yZSBoZXJlLCBidXQgdGhhdAotICogbWlnaHQgaGF2ZSBhbiBpbXBsaWNpdCBGUFUtc2F2ZSBhcyBhIGNvc3QsIHNvIGl0J3Mgbm90Ci0gKiBjbGVhciB3aGljaCBwYXRoIHRvIGdvLikKLSAqCi0gKiBjbXB4Y2hnOGIgbXVzdCBiZSB1c2VkIHdpdGggdGhlIGxvY2sgcHJlZml4IGhlcmUgdG8gYWxsb3cKLSAqIHRoZSBpbnN0cnVjdGlvbiB0byBiZSBleGVjdXRlZCBhdG9taWNhbGx5LCBzZWUgcGFnZSAzLTEwMgotICogb2YgdGhlIGluc3RydWN0aW9uIHNldCByZWZlcmVuY2UgMjQzMTkxMDIucGRmLiBXZSBuZWVkCi0gKiB0aGUgcmVhZGVyIHNpZGUgdG8gc2VlIHRoZSBjb2hlcmVudCA2NGJpdCB2YWx1ZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0KHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBsb3csIHVuc2lnbmVkIGludCBoaWdoKQotewotCWFzbSB2b2xhdGlsZSgiXG4xOlx0IgotCQkgICAgICJtb3ZsICglMCksICUlZWF4XG5cdCIKLQkJICAgICAibW92bCA0KCUwKSwgJSVlZHhcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICJjbXB4Y2hnOGIgKCUwKVxuXHQiCi0JCSAgICAgImpueiAxYiIKLQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJICAgICA6ICJEIihwdHIpLAotCQkgICAgICAgImIiKGxvdyksCi0JCSAgICAgICAiYyIoaGlnaCkKLQkJICAgICA6ICJheCIsICJkeCIsICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X2NvbnN0YW50KHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyLAotCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCi17Ci0JX19zZXRfNjRiaXQocHRyLCAodW5zaWduZWQgaW50KXZhbHVlLCAodW5zaWduZWQgaW50KSh2YWx1ZSA+PiAzMikpOwotfQotCi0jZGVmaW5lIGxsX2xvdyh4KQkqKCgodW5zaWduZWQgaW50ICopJih4KSkgKyAwKQotI2RlZmluZSBsbF9oaWdoKHgpCSooKCh1bnNpZ25lZCBpbnQgKikmKHgpKSArIDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF92YXIodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQotewotCV9fc2V0XzY0Yml0KHB0ciwgbGxfbG93KHZhbHVlKSwgbGxfaGlnaCh2YWx1ZSkpOwotfQotCi0jZGVmaW5lIHNldF82NGJpdChwdHIsIHZhbHVlKQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AoKHZhbHVlKSkJCVwKLQkgPyBfX3NldF82NGJpdF9jb25zdGFudCgocHRyKSwgKHZhbHVlKSkJXAotCSA6IF9fc2V0XzY0Yml0X3ZhcigocHRyKSwgKHZhbHVlKSkpCi0KLSNkZWZpbmUgX3NldF82NGJpdChwdHIsIHZhbHVlKQkJCQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AodmFsdWUpCQkJCQlcCi0JID8gX19zZXRfNjRiaXQocHRyLCAodW5zaWduZWQgaW50KSh2YWx1ZSksCQkJXAotCQkgICAgICAgKHVuc2lnbmVkIGludCkoKHZhbHVlKSA+PiAzMikpCQkJXAotCSA6IF9fc2V0XzY0Yml0KHB0ciwgbGxfbG93KCh2YWx1ZSkpLCBsbF9oaWdoKCh2YWx1ZSkpKSkKLQotLyoKLSAqIE5vdGU6IG5vICJsb2NrIiBwcmVmaXggZXZlbiBvbiBTTVA6IHhjaGcgYWx3YXlzIGltcGxpZXMgbG9jayBhbnl3YXkKLSAqIE5vdGUgMjogeGNoZyBoYXMgc2lkZSBlZmZlY3QsIHNvIHRoYXQgYXR0cmlidXRlIHZvbGF0aWxlIGlzIG5lY2Vzc2FyeSwKLSAqCSAgYnV0IGdlbmVyYWxseSB0aGUgcHJpbWl0aXZlIGlzIGludmFsaWQsICpwdHIgaXMgb3V0cHV0IGFyZ3VtZW50LiAtLUFOSwotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqcHRyLAotCQkJCSAgIGludCBzaXplKQotewotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJYXNtIHZvbGF0aWxlKCJ4Y2hnYiAlYjAsJTEiCi0JCQkgICAgIDogIj1xIiAoeCkKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWFzbSB2b2xhdGlsZSgieGNoZ3cgJXcwLCUxIgotCQkJICAgICA6ICI9ciIgKHgpCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlhc20gdm9sYXRpbGUoInhjaGdsICUwLCUxIgotCQkJICAgICA6ICI9ciIgKHgpCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiB4OwotfQotCi0vKgotICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKLSAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcwotICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCi0gKi8KLQotI2lmZGVmIENPTkZJR19YODZfQ01QWENIRwotI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKLSNkZWZpbmUgY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nKShuKSwJCVwKLQkJCQkgICAgICAgc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSBzeW5jX2NtcHhjaGcocHRyLCBvLCBuKQkJCQkJCVwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNfY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCi0JCQkJCSAgICAodW5zaWduZWQgbG9uZykobiksCQlcCi0JCQkJCSAgICBzaXplb2YoKihwdHIpKSkpCi0jZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZ19sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCi0JCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCi0JCQkJCSAgICAgc2l6ZW9mKCoocHRyKSkpKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2X0NNUFhDSEc2NAotI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NCgocHRyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykobyksIFwKLQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKSkKLSNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NF9sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykobyksIFwKLQkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ2IgJWIxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGd3ICV3MSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCX0KLQlyZXR1cm4gb2xkOwotfQotCi0vKgotICogQWx3YXlzIHVzZSBsb2NrZWQgb3BlcmF0aW9ucyB3aGVuIHRvdWNoaW5nIG1lbW9yeSBzaGFyZWQgd2l0aCBhCi0gKiBoeXBlcnZpc29yLCBzaW5jZSB0aGUgc3lzdGVtIG1heSBiZSBTTVAgZXZlbiBpZiB0aGUgZ3Vlc3Qga2VybmVsCi0gKiBpc24ndC4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fc3luY19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGdiICViMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgMjoKLQkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hndyAldzEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSgibG9jazsgY21weGNoZ2wgJTEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlhc20gdm9sYXRpbGUoImNtcHhjaGdiICViMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgMjoKLQkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hndyAldzEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSgiY21weGNoZ2wgJTEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX19jbXB4Y2hnNjQodm9sYXRpbGUgdm9pZCAqcHRyLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvbGQsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5ldykKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcHJldjsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMyIKLQkJICAgICA6ICI9QSIocHJldikKLQkJICAgICA6ICJiIigodW5zaWduZWQgbG9uZyluZXcpLAotCQkgICAgICAgImMiKCh1bnNpZ25lZCBsb25nKShuZXcgPj4gMzIpKSwKLQkJICAgICAgICJtIigqX194ZyhwdHIpKSwKLQkJICAgICAgICIwIihvbGQpCi0JCSAgICAgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIHByZXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fY21weGNoZzY0X2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvbGQsCi0JCQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3KQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2OwotCWFzbSB2b2xhdGlsZSgiY21weGNoZzhiICUzIgotCQkgICAgIDogIj1BIihwcmV2KQotCQkgICAgIDogImIiKCh1bnNpZ25lZCBsb25nKW5ldyksCi0JCSAgICAgICAiYyIoKHVuc2lnbmVkIGxvbmcpKG5ldyA+PiAzMikpLAotCQkgICAgICAgIm0iKCpfX3hnKHB0cikpLAotCQkgICAgICAgIjAiKG9sZCkKLQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gcHJldjsKLX0KLQotI2lmbmRlZiBDT05GSUdfWDg2X0NNUFhDSEcKLS8qCi0gKiBCdWlsZGluZyBhIGtlcm5lbCBjYXBhYmxlIHJ1bm5pbmcgb24gODAzODYuIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8KLSAqIHNpbXVsYXRlIHRoZSBjbXB4Y2hnIG9uIHRoZSA4MDM4NiBDUFUuIEZvciB0aGF0IHB1cnBvc2Ugd2UgZGVmaW5lCi0gKiBhIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBzaXplcyB3ZSBzdXBwb3J0LgotICovCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3U4KHZvbGF0aWxlIHZvaWQgKiwgdTgsIHU4KTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3UxNih2b2xhdGlsZSB2b2lkICosIHUxNiwgdTE2KTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3UzMih2b2xhdGlsZSB2b2lkICosIHUzMiwgdTMyKTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2KHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJCXVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCXJldHVybiBjbXB4Y2hnXzM4Nl91OChwdHIsIG9sZCwgbmV3KTsKLQljYXNlIDI6Ci0JCXJldHVybiBjbXB4Y2hnXzM4Nl91MTYocHRyLCBvbGQsIG5ldyk7Ci0JY2FzZSA0OgotCQlyZXR1cm4gY21weGNoZ18zODZfdTMyKHB0ciwgb2xkLCBuZXcpOwotCX0KLQlyZXR1cm4gb2xkOwotfQotCi0jZGVmaW5lIGNtcHhjaGcocHRyLCBvLCBuKQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKLQlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gMykpCQkJCVwKLQkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZygocHRyKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAotCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpY21weGNoZ18zODYoKHB0ciksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcpKG8pLCAodW5zaWduZWQgbG9uZykobiksCVwKLQkJCQlzaXplb2YoKihwdHIpKSk7CQkJXAotCV9fcmV0OwkJCQkJCQkJXAotfSkKLSNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCQlcCi0JaWYgKGxpa2VseShib290X2NwdV9kYXRhLng4NiA+IDMpKQkJCQlcCi0JCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGdfbG9jYWwoKHB0ciksCVwKLQkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAotCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpY21weGNoZ18zODYoKHB0ciksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcpKG8pLCAodW5zaWduZWQgbG9uZykobiksCVwKLQkJCQlzaXplb2YoKihwdHIpKSk7CQkJXAotCV9fcmV0OwkJCQkJCQkJXAotfSkKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19YODZfQ01QWENIRzY0Ci0vKgotICogQnVpbGRpbmcgYSBrZXJuZWwgY2FwYWJsZSBydW5uaW5nIG9uIDgwMzg2IGFuZCA4MDQ4Ni4gSXQgbWF5IGJlIG5lY2Vzc2FyeQotICogdG8gc2ltdWxhdGUgdGhlIGNtcHhjaGc4YiBvbiB0aGUgODAzODYgYW5kIDgwNDg2IENQVS4KLSAqLwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNtcHhjaGdfNDg2X3U2NCh2b2xhdGlsZSB2b2lkICosIHU2NCwgdTY0KTsKLQotI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKLQlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gNCkpCQkJCVwKLQkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0KChwdHIpLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKLQllbHNlCQkJCQkJCQlcCi0JCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCi0JX19yZXQ7CQkJCQkJCQlcCi19KQotI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAotCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiA0KSkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjRfbG9jYWwoKHB0ciksCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCi0JZWxzZQkJCQkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpY21weGNoZ180ODZfdTY0KChwdHIpLAlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAotCV9fcmV0OwkJCQkJCQkJXAotfSkKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19DTVBYQ0hHXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvY21weGNoZ182NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2MxYTVlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19DTVBYQ0hHXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fQ01QWENIR182NF9ICi0KLSNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4gLyogUHJvdmlkZXMgTE9DS19QUkVGSVggKi8KLQotI2RlZmluZSB4Y2hnKHB0ciwgdikgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwgXAotCQkJCQkJIChwdHIpLCBzaXplb2YoKihwdHIpKSkpCi0KLSNkZWZpbmUgX194Zyh4KSAoKHZvbGF0aWxlIGxvbmcgKikoeCkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfNjRiaXQodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQkqcHRyID0gdmFsOwotfQotCi0jZGVmaW5lIF9zZXRfNjRiaXQgc2V0XzY0Yml0Ci0KLS8qCi0gKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5Ci0gKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCi0gKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkgICBpbnQgc2l6ZSkKLXsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZSgieGNoZ2IgJWIwLCUxIgotCQkJICAgICA6ICI9cSIgKHgpCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUoInhjaGd3ICV3MCwlMSIKLQkJCSAgICAgOiAiPXIiICh4KQotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlKCJ4Y2hnbCAlazAsJTEiCi0JCQkgICAgIDogIj1yIiAoeCkKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCWFzbSB2b2xhdGlsZSgieGNoZ3EgJTAsJTEiCi0JCQkgICAgIDogIj1yIiAoeCkKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHg7Ci19Ci0KLS8qCi0gKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAotICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCi0gKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KLSAqLwotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ2IgJWIxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGd3ICV3MSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlazEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDg6Ci0JCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ3EgJTEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQotLyoKLSAqIEFsd2F5cyB1c2UgbG9ja2VkIG9wZXJhdGlvbnMgd2hlbiB0b3VjaGluZyBtZW1vcnkgc2hhcmVkIHdpdGggYQotICogaHlwZXJ2aXNvciwgc2luY2UgdGhlIHN5c3RlbSBtYXkgYmUgU01QIGV2ZW4gaWYgdGhlIGd1ZXN0IGtlcm5lbAotICogaXNuJ3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3N5bmNfY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2xkLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2OwotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnYiAlYjEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDI6Ci0JCWFzbSB2b2xhdGlsZSgibG9jazsgY21weGNoZ3cgJXcxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSA0OgotCQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGdsICUxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JfQotCXJldHVybiBvbGQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfbG9jYWwodm9sYXRpbGUgdm9pZCAqcHRyLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2OwotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hnYiAlYjEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDI6Ci0JCWFzbSB2b2xhdGlsZSgiY21weGNoZ3cgJXcxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSA0OgotCQlhc20gdm9sYXRpbGUoImNtcHhjaGdsICVrMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgODoKLQkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hncSAlMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCX0KLQlyZXR1cm4gb2xkOwotfQotCi0jZGVmaW5lIGNtcHhjaGcocHRyLCBvLCBuKQkJCQkJCVwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJXAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKSkKLSNkZWZpbmUgY21weGNoZzY0KHB0ciwgbywgbikJCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKCoocHRyKSkgIT0gOCk7CQkJCVwKLQljbXB4Y2hnKChwdHIpLCAobyksIChuKSk7CQkJCQlcCi19KQotI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgbywgbikJCQkJCVwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJXAotCQkJCQkgICAgICh1bnNpZ25lZCBsb25nKShuKSwJXAotCQkJCQkgICAgIHNpemVvZigqKHB0cikpKSkKLSNkZWZpbmUgc3luY19jbXB4Y2hnKHB0ciwgbywgbikJCQkJCQlcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19zeW5jX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJXAotCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpKG4pLAkJXAotCQkJCQkgICAgc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQlcCi0JY21weGNoZ19sb2NhbCgocHRyKSwgKG8pLCAobikpOwkJCQkJXAotfSkKLQotI2VuZGlmIC8qIEFTTV9YODZfX0NNUFhDSEdfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NvbXBhdC5oIGIvaW5jbHVkZS9hc20teDg2L2NvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzMyYjE1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0NPTVBBVF9ICi0jZGVmaW5lIEFTTV9YODZfX0NPTVBBVF9ICi0KLS8qCi0gKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcwotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS91c2VyMzIuaD4KLQotI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKLQotdHlwZWRlZiB1MzIJCWNvbXBhdF9zaXplX3Q7Ci10eXBlZGVmIHMzMgkJY29tcGF0X3NzaXplX3Q7Ci10eXBlZGVmIHMzMgkJY29tcGF0X3RpbWVfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfY2xvY2tfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfcGlkX3Q7Ci10eXBlZGVmIHUxNgkJX19jb21wYXRfdWlkX3Q7Ci10eXBlZGVmIHUxNgkJX19jb21wYXRfZ2lkX3Q7Ci10eXBlZGVmIHUzMgkJX19jb21wYXRfdWlkMzJfdDsKLXR5cGVkZWYgdTMyCQlfX2NvbXBhdF9naWQzMl90OwotdHlwZWRlZiB1MTYJCWNvbXBhdF9tb2RlX3Q7Ci10eXBlZGVmIHUzMgkJY29tcGF0X2lub190OwotdHlwZWRlZiB1MTYJCWNvbXBhdF9kZXZfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfb2ZmX3Q7Ci10eXBlZGVmIHM2NAkJY29tcGF0X2xvZmZfdDsKLXR5cGVkZWYgdTE2CQljb21wYXRfbmxpbmtfdDsKLXR5cGVkZWYgdTE2CQljb21wYXRfaXBjX3BpZF90OwotdHlwZWRlZiBzMzIJCWNvbXBhdF9kYWRkcl90OwotdHlwZWRlZiB1MzIJCWNvbXBhdF9jYWRkcl90OwotdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJY29tcGF0X2ZzaWRfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfdGltZXJfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfa2V5X3Q7Ci0KLXR5cGVkZWYgczMyCQljb21wYXRfaW50X3Q7Ci10eXBlZGVmIHMzMgkJY29tcGF0X2xvbmdfdDsKLXR5cGVkZWYgczY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSBjb21wYXRfczY0OwotdHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Ci10eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7Ci10eXBlZGVmIHU2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSkgY29tcGF0X3U2NDsKLQotc3RydWN0IGNvbXBhdF90aW1lc3BlYyB7Ci0JY29tcGF0X3RpbWVfdAl0dl9zZWM7Ci0JczMyCQl0dl9uc2VjOwotfTsKLQotc3RydWN0IGNvbXBhdF90aW1ldmFsIHsKLQljb21wYXRfdGltZV90CXR2X3NlYzsKLQlzMzIJCXR2X3VzZWM7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3N0YXQgewotCWNvbXBhdF9kZXZfdAlzdF9kZXY7Ci0JdTE2CQlfX3BhZDE7Ci0JY29tcGF0X2lub190CXN0X2lubzsKLQljb21wYXRfbW9kZV90CXN0X21vZGU7Ci0JY29tcGF0X25saW5rX3QJc3Rfbmxpbms7Ci0JX19jb21wYXRfdWlkX3QJc3RfdWlkOwotCV9fY29tcGF0X2dpZF90CXN0X2dpZDsKLQljb21wYXRfZGV2X3QJc3RfcmRldjsKLQl1MTYJCV9fcGFkMjsKLQl1MzIJCXN0X3NpemU7Ci0JdTMyCQlzdF9ibGtzaXplOwotCXUzMgkJc3RfYmxvY2tzOwotCXUzMgkJc3RfYXRpbWU7Ci0JdTMyCQlzdF9hdGltZV9uc2VjOwotCXUzMgkJc3RfbXRpbWU7Ci0JdTMyCQlzdF9tdGltZV9uc2VjOwotCXUzMgkJc3RfY3RpbWU7Ci0JdTMyCQlzdF9jdGltZV9uc2VjOwotCXUzMgkJX191bnVzZWQ0OwotCXUzMgkJX191bnVzZWQ1OwotfTsKLQotc3RydWN0IGNvbXBhdF9mbG9jayB7Ci0Jc2hvcnQJCWxfdHlwZTsKLQlzaG9ydAkJbF93aGVuY2U7Ci0JY29tcGF0X29mZl90CWxfc3RhcnQ7Ci0JY29tcGF0X29mZl90CWxfbGVuOwotCWNvbXBhdF9waWRfdAlsX3BpZDsKLX07Ci0KLSNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCi0jZGVmaW5lIEZfU0VUTEs2NAkxMwotI2RlZmluZSBGX1NFVExLVzY0CTE0Ci0KLS8qCi0gKiBJQTMyIHVzZXMgNCBieXRlIGFsaWdubWVudCBmb3IgNjQgYml0IHF1YW50aXRpZXMsCi0gKiBzbyB3ZSBuZWVkIHRvIHBhY2sgdGhpcyBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBjb21wYXRfZmxvY2s2NCB7Ci0Jc2hvcnQJCWxfdHlwZTsKLQlzaG9ydAkJbF93aGVuY2U7Ci0JY29tcGF0X2xvZmZfdAlsX3N0YXJ0OwotCWNvbXBhdF9sb2ZmX3QJbF9sZW47Ci0JY29tcGF0X3BpZF90CWxfcGlkOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IGNvbXBhdF9zdGF0ZnMgewotCWludAkJZl90eXBlOwotCWludAkJZl9ic2l6ZTsKLQlpbnQJCWZfYmxvY2tzOwotCWludAkJZl9iZnJlZTsKLQlpbnQJCWZfYmF2YWlsOwotCWludAkJZl9maWxlczsKLQlpbnQJCWZfZmZyZWU7Ci0JY29tcGF0X2ZzaWRfdAlmX2ZzaWQ7Ci0JaW50CQlmX25hbWVsZW47CS8qIFN1bk9TIGlnbm9yZXMgdGhpcyBmaWVsZC4gKi8KLQlpbnQJCWZfZnJzaXplOwotCWludAkJZl9zcGFyZVs1XTsKLX07Ci0KLSNkZWZpbmUgQ09NUEFUX1JMSU1fT0xEX0lORklOSVRZCTB4N2ZmZmZmZmYKLSNkZWZpbmUgQ09NUEFUX1JMSU1fSU5GSU5JVFkJCTB4ZmZmZmZmZmYKLQotdHlwZWRlZiB1MzIJCWNvbXBhdF9vbGRfc2lnc2V0X3Q7CS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KLQotI2RlZmluZSBfQ09NUEFUX05TSUcJCTY0Ci0jZGVmaW5lIF9DT01QQVRfTlNJR19CUFcJMzIKLQotdHlwZWRlZiB1MzIgICAgICAgICAgICAgICBjb21wYXRfc2lnc2V0X3dvcmQ7Ci0KLSNkZWZpbmUgQ09NUEFUX09GRl9UX01BWAkweDdmZmZmZmZmCi0jZGVmaW5lIENPTVBBVF9MT0ZGX1RfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkwKLQotc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHsKLQljb21wYXRfa2V5X3Qga2V5OwotCV9fY29tcGF0X3VpZDMyX3QgdWlkOwotCV9fY29tcGF0X2dpZDMyX3QgZ2lkOwotCV9fY29tcGF0X3VpZDMyX3QgY3VpZDsKLQlfX2NvbXBhdF9naWQzMl90IGNnaWQ7Ci0JdW5zaWduZWQgc2hvcnQgbW9kZTsKLQl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7Ci0JdW5zaWduZWQgc2hvcnQgc2VxOwotCXVuc2lnbmVkIHNob3J0IF9fcGFkMjsKLQljb21wYXRfdWxvbmdfdCB1bnVzZWQxOwotCWNvbXBhdF91bG9uZ190IHVudXNlZDI7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3NlbWlkNjRfZHMgewotCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzZW1fcGVybTsKLQljb21wYXRfdGltZV90ICBzZW1fb3RpbWU7Ci0JY29tcGF0X3Vsb25nX3QgX191bnVzZWQxOwotCWNvbXBhdF90aW1lX3QgIHNlbV9jdGltZTsKLQljb21wYXRfdWxvbmdfdCBfX3VudXNlZDI7Ci0JY29tcGF0X3Vsb25nX3Qgc2VtX25zZW1zOwotCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMzsKLQljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X21zcWlkNjRfZHMgewotCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBtc2dfcGVybTsKLQljb21wYXRfdGltZV90ICBtc2dfc3RpbWU7Ci0JY29tcGF0X3Vsb25nX3QgX191bnVzZWQxOwotCWNvbXBhdF90aW1lX3QgIG1zZ19ydGltZTsKLQljb21wYXRfdWxvbmdfdCBfX3VudXNlZDI7Ci0JY29tcGF0X3RpbWVfdCAgbXNnX2N0aW1lOwotCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMzsKLQljb21wYXRfdWxvbmdfdCBtc2dfY2J5dGVzOwotCWNvbXBhdF91bG9uZ190IG1zZ19xbnVtOwotCWNvbXBhdF91bG9uZ190IG1zZ19xYnl0ZXM7Ci0JY29tcGF0X3BpZF90ICAgbXNnX2xzcGlkOwotCWNvbXBhdF9waWRfdCAgIG1zZ19scnBpZDsKLQljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7Ci0JY29tcGF0X3Vsb25nX3QgX191bnVzZWQ1OwotfTsKLQotc3RydWN0IGNvbXBhdF9zaG1pZDY0X2RzIHsKLQlzdHJ1Y3QgY29tcGF0X2lwYzY0X3Blcm0gc2htX3Blcm07Ci0JY29tcGF0X3NpemVfdCAgc2htX3NlZ3N6OwotCWNvbXBhdF90aW1lX3QgIHNobV9hdGltZTsKLQljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7Ci0JY29tcGF0X3RpbWVfdCAgc2htX2R0aW1lOwotCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKLQljb21wYXRfdGltZV90ICBzaG1fY3RpbWU7Ci0JY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOwotCWNvbXBhdF9waWRfdCAgIHNobV9jcGlkOwotCWNvbXBhdF9waWRfdCAgIHNobV9scGlkOwotCWNvbXBhdF91bG9uZ190IHNobV9uYXR0Y2g7Ci0JY29tcGF0X3Vsb25nX3QgX191bnVzZWQ0OwotCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNTsKLX07Ci0KLS8qCi0gKiBUaGUgdHlwZSBvZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzLnByX3JlZyBpbiBjb21wYXRpYmxlIGNvcmUgZHVtcHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMiBjb21wYXRfZWxmX2dyZWdzZXRfdDsKLQotLyoKLSAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAotICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQotICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQotICogYXBwcm9wcmlhdGVseSBjb252ZXJ0ZWQgdGhlbSBhbHJlYWR5LgotICovCi10eXBlZGVmCXUzMgkJY29tcGF0X3VwdHJfdDsKLQotc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X3B0cihjb21wYXRfdXB0cl90IHVwdHIpCi17Ci0JcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVwdHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29tcGF0X3VwdHJfdCBwdHJfdG9fY29tcGF0KHZvaWQgX191c2VyICp1cHRyKQotewotCXJldHVybiAodTMyKSh1bnNpZ25lZCBsb25nKXVwdHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmNvbXBhdF9hbGxvY191c2VyX3NwYWNlKGxvbmcgbGVuKQotewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwotCXJldHVybiAodm9pZCBfX3VzZXIgKilyZWdzLT5zcCAtIGxlbjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY29tcGF0X3Rhc2sodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJiBUU19DT01QQVQ7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NwdS5oIGIvaW5jbHVkZS9hc20teDg2L2NwdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2ExMTUwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9jcHUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fQ1BVX0gKLSNkZWZpbmUgQVNNX1g4Nl9fQ1BVX0gKLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLQotc3RydWN0IHg4Nl9jcHUgewotCXN0cnVjdCBjcHUgY3B1OwotfTsKLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotZXh0ZXJuIGludCBhcmNoX3JlZ2lzdGVyX2NwdShpbnQgbnVtKTsKLWV4dGVybiB2b2lkIGFyY2hfdW5yZWdpc3Rlcl9jcHUoaW50KTsKLSNlbmRpZgotCi1ERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfc3RhdGUpOwotI2VuZGlmIC8qIEFTTV9YODZfX0NQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oIGIvaW5jbHVkZS9hc20teDg2L2NwdWZlYXR1cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmZWFlNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0gKiBEZWZpbmVzIHg4NiBDUFUgZmVhdHVyZSBiaXRzCi0gKi8KLSNpZm5kZWYgQVNNX1g4Nl9fQ1BVRkVBVFVSRV9ICi0jZGVmaW5lIEFTTV9YODZfX0NQVUZFQVRVUkVfSAotCi0jaW5jbHVkZSA8YXNtL3JlcXVpcmVkLWZlYXR1cmVzLmg+Ci0KLSNkZWZpbmUgTkNBUElOVFMJOQkvKiBOIDMyLWJpdCB3b3JkcyB3b3J0aCBvZiBpbmZvICovCi0KLS8qCi0gKiBOb3RlOiBJZiB0aGUgY29tbWVudCBiZWdpbnMgd2l0aCBhIHF1b3RlZCBzdHJpbmcsIHRoYXQgc3RyaW5nIGlzIHVzZWQKLSAqIGluIC9wcm9jL2NwdWluZm8gaW5zdGVhZCBvZiB0aGUgbWFjcm8gbmFtZS4gIElmIHRoZSBzdHJpbmcgaXMgIiIsCi0gKiB0aGlzIGZlYXR1cmUgYml0IGlzIG5vdCBkaXNwbGF5ZWQgaW4gL3Byb2MvY3B1aW5mbyBhdCBhbGwuCi0gKi8KLQotLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDEgKGVkeCksIHdvcmQgMCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9GUFUJCSgwKjMyKyAwKSAvKiBPbmJvYXJkIEZQVSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9WTUUJCSgwKjMyKyAxKSAvKiBWaXJ0dWFsIE1vZGUgRXh0ZW5zaW9ucyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9ERQkJKDAqMzIrIDIpIC8qIERlYnVnZ2luZyBFeHRlbnNpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BTRQkJKDAqMzIrIDMpIC8qIFBhZ2UgU2l6ZSBFeHRlbnNpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1RTQwkJKDAqMzIrIDQpIC8qIFRpbWUgU3RhbXAgQ291bnRlciAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9NU1IJCSgwKjMyKyA1KSAvKiBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUEFFCQkoMCozMisgNikgLyogUGh5c2ljYWwgQWRkcmVzcyBFeHRlbnNpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX01DRQkJKDAqMzIrIDcpIC8qIE1hY2hpbmUgQ2hlY2sgQXJjaGl0ZWN0dXJlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NYOAkJKDAqMzIrIDgpIC8qIENNUFhDSEc4IGluc3RydWN0aW9uICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0FQSUMJKDAqMzIrIDkpIC8qIE9uYm9hcmQgQVBJQyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9TRVAJCSgwKjMyKzExKSAvKiBTWVNFTlRFUi9TWVNFWElUICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX01UUlIJKDAqMzIrMTIpIC8qIE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVycyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9QR0UJCSgwKjMyKzEzKSAvKiBQYWdlIEdsb2JhbCBFbmFibGUgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTUNBCQkoMCozMisxNCkgLyogTWFjaGluZSBDaGVjayBBcmNoaXRlY3R1cmUgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ01PVgkoMCozMisxNSkgLyogQ01PViBpbnN0cnVjdGlvbnMgKi8KLQkJCQkJICAvKiAocGx1cyBGQ01PVmNjLCBGQ09NSSB3aXRoIEZQVSkgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUEFUCQkoMCozMisxNikgLyogUGFnZSBBdHRyaWJ1dGUgVGFibGUgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUFNFMzYJKDAqMzIrMTcpIC8qIDM2LWJpdCBQU0VzICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BOCQkoMCozMisxOCkgLyogUHJvY2Vzc29yIHNlcmlhbCBudW1iZXIgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xGTFNICSgwKjMyKzE5KSAvKiAiY2xmbHVzaCIgQ0xGTFVTSCBpbnN0cnVjdGlvbiAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9EUwkJKDAqMzIrMjEpIC8qICJkdHMiIERlYnVnIFN0b3JlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0FDUEkJKDAqMzIrMjIpIC8qIEFDUEkgdmlhIE1TUiAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9NTVgJCSgwKjMyKzIzKSAvKiBNdWx0aW1lZGlhIEV4dGVuc2lvbnMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfRlhTUgkoMCozMisyNCkgLyogRlhTQVZFL0ZYUlNUT1IsIENSNC5PU0ZYU1IgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NCQkoMCozMisyNSkgLyogInNzZSIgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMgkoMCozMisyNikgLyogInNzZTIiICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NFTEZTTk9PUAkoMCozMisyNykgLyogInNzIiBDUFUgc2VsZiBzbm9vcCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9IVAkJKDAqMzIrMjgpIC8qIEh5cGVyLVRocmVhZGluZyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9BQ0MJCSgwKjMyKzI5KSAvKiAidG0iIEF1dG9tYXRpYyBjbG9jayBjb250cm9sICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0lBNjQJKDAqMzIrMzApIC8qIElBLTY0IHByb2Nlc3NvciAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9QQkUJCSgwKjMyKzMxKSAvKiBQZW5kaW5nIEJyZWFrIEVuYWJsZSAqLwotCi0vKiBBTUQtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4ODAwMDAwMDEsIHdvcmQgMSAqLwotLyogRG9uJ3QgZHVwbGljYXRlIGZlYXR1cmUgZmxhZ3Mgd2hpY2ggYXJlIHJlZHVuZGFudCB3aXRoIEludGVsISAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9TWVNDQUxMCSgxKjMyKzExKSAvKiBTWVNDQUxML1NZU1JFVCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9NUAkJKDEqMzIrMTkpIC8qIE1QIENhcGFibGUuICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX05YCQkoMSozMisyMCkgLyogRXhlY3V0ZSBEaXNhYmxlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX01NWEVYVAkoMSozMisyMikgLyogQU1EIE1NWCBleHRlbnNpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0ZYU1JfT1BUCSgxKjMyKzI1KSAvKiBGWFNBVkUvRlhSU1RPUiBvcHRpbWl6YXRpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0dCUEFHRVMJKDEqMzIrMjYpIC8qICJwZHBlMWdiIiBHQiBwYWdlcyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9SRFRTQ1AJKDEqMzIrMjcpIC8qIFJEVFNDUCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9MTQkJKDEqMzIrMjkpIC8qIExvbmcgTW9kZSAoeDg2LTY0KSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PV0VYVAkoMSozMiszMCkgLyogQU1EIDNETm93ISBleHRlbnNpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFXzNETk9XCSgxKjMyKzMxKSAvKiAzRE5vdyEgKi8KLQotLyogVHJhbnNtZXRhLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDgwODYwMDAxLCB3b3JkIDIgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVDT1ZFUlkJKDIqMzIrIDApIC8qIENQVSBpbiByZWNvdmVyeSBtb2RlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0xPTkdSVU4JKDIqMzIrIDEpIC8qIExvbmdydW4gcG93ZXIgY29udHJvbCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9MUlRJCSgyKjMyKyAzKSAvKiBMb25nUnVuIHRhYmxlIGludGVyZmFjZSAqLwotCi0vKiBPdGhlciBmZWF0dXJlcywgTGludXgtZGVmaW5lZCBtYXBwaW5nLCB3b3JkIDMgKi8KLS8qIFRoaXMgcmFuZ2UgaXMgdXNlZCBmb3IgZmVhdHVyZSBiaXRzIHdoaWNoIGNvbmZsaWN0IG9yIGFyZSBzeW50aGVzaXplZCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9DWE1NWAkoMyozMisgMCkgLyogQ3lyaXggTU1YIGV4dGVuc2lvbnMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfSzZfTVRSUgkoMyozMisgMSkgLyogQU1EIEs2IG5vbnN0YW5kYXJkIE1UUlJzICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NZUklYX0FSUgkoMyozMisgMikgLyogQ3lyaXggQVJScyAoPSBNVFJScykgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IJKDMqMzIrIDMpIC8qIENlbnRhdXIgTUNScyAoPSBNVFJScykgKi8KLS8qIGNwdSB0eXBlcyBmb3Igc3BlY2lmaWMgdHVuaW5nczogKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfSzgJCSgzKjMyKyA0KSAvKiAiIiBPcHRlcm9uLCBBdGhsb242NCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9LNwkJKDMqMzIrIDUpIC8qICIiIEF0aGxvbiAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9QMwkJKDMqMzIrIDYpIC8qICIiIFAzICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1A0CQkoMyozMisgNykgLyogIiIgUDQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDICgzKjMyKyA4KSAvKiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1VQCQkoMyozMisgOSkgLyogc21wIGtlcm5lbCBydW5uaW5nIG9uIHVwICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLICgzKjMyKzEwKSAvKiAiIiBGWFNBVkUgbGVha3MgRk9QL0ZJUC9GT1AgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OICgzKjMyKzExKSAvKiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZNb24gKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9QTAkoMyozMisyMCkgLyogVGhlIE5PUEwgKDBGIDFGKSBpbnN0cnVjdGlvbnMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUEVCUwkoMyozMisxMikgLyogUHJlY2lzZS1FdmVudCBCYXNlZCBTYW1wbGluZyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9CVFMJCSgzKjMyKzEzKSAvKiBCcmFuY2ggVHJhY2UgU3RvcmUgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfU1lTQ0FMTDMyCSgzKjMyKzE0KSAvKiAiIiBzeXNjYWxsIGluIGlhMzIgdXNlcnNwYWNlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NZU0VOVEVSMzIJKDMqMzIrMTUpIC8qICIiIHN5c2VudGVyIGluIGlhMzIgdXNlcnNwYWNlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1JFUF9HT09ECSgzKjMyKzE2KSAvKiByZXAgbWljcm9jb2RlIHdvcmtzIHdlbGwgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTUZFTkNFX1JEVFNDICgzKjMyKzE3KSAvKiAiIiBNZmVuY2Ugc3luY2hyb25pemVzIFJEVFNDICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0xGRU5DRV9SRFRTQyAoMyozMisxOCkgLyogIiIgTGZlbmNlIHN5bmNocm9uaXplcyBSRFRTQyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV8xMUFQCSgzKjMyKzE5KSAvKiAiIiBCYWQgbG9jYWwgQVBJQyBha2EgMTFBUCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9OT1BMCSgzKjMyKzIwKSAvKiBUaGUgTk9QTCAoMEYgMUYpIGluc3RydWN0aW9ucyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9BTURDMUUJKDMqMzIrMjEpIC8qIEFNRCBDMUUgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWFRPUE9MT0dZCSgzKjMyKzIxKSAvKiBjcHUgdG9wb2xvZ3kgZW51bSBleHRlbnNpb25zICovCi0KLS8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxIChlY3gpLCB3b3JkIDQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMwkoNCozMisgMCkgLyogInBuaSIgU1NFLTMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUENMTVVMUURRCSg0KjMyKyAxKSAvKiBQQ0xNVUxRRFEgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfRFRFUzY0CSg0KjMyKyAyKSAvKiA2NC1iaXQgRGVidWcgU3RvcmUgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTVdBSVQJKDQqMzIrIDMpIC8qICJtb25pdG9yIiBNb25pdG9yL013YWl0IHN1cHBvcnQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfRFNDUEwJKDQqMzIrIDQpIC8qICJkc19jcGwiIENQTCBRdWFsLiBEZWJ1ZyBTdG9yZSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9WTVgJCSg0KjMyKyA1KSAvKiBIYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9TTVgJCSg0KjMyKyA2KSAvKiBTYWZlciBtb2RlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0VTVAkJKDQqMzIrIDcpIC8qIEVuaGFuY2VkIFNwZWVkU3RlcCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9UTTIJCSg0KjMyKyA4KSAvKiBUaGVybWFsIE1vbml0b3IgMiAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9TU1NFMwkoNCozMisgOSkgLyogU3VwcGxlbWVudGFsIFNTRS0zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NJRAkJKDQqMzIrMTApIC8qIENvbnRleHQgSUQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfRk1BCQkoNCozMisxMikgLyogRnVzZWQgbXVsdGlwbHktYWRkICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NYMTYJKDQqMzIrMTMpIC8qIENNUFhDSEcxNkIgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWFRQUgkoNCozMisxNCkgLyogU2VuZCBUYXNrIFByaW9yaXR5IE1lc3NhZ2VzICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BEQ00JKDQqMzIrMTUpIC8qIFBlcmZvcm1hbmNlIENhcGFiaWxpdGllcyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9EQ0EJCSg0KjMyKzE4KSAvKiBEaXJlY3QgQ2FjaGUgQWNjZXNzICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTTRfMQkoNCozMisxOSkgLyogInNzZTRfMSIgU1NFLTQuMSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9YTU00XzIJKDQqMzIrMjApIC8qICJzc2U0XzIiIFNTRS00LjIgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWDJBUElDCSg0KjMyKzIxKSAvKiB4MkFQSUMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQUVTCQkoNCozMisyNSkgLyogQUVTIGluc3RydWN0aW9ucyAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9YU0FWRQkoNCozMisyNikgLyogWFNBVkUvWFJTVE9SL1hTRVRCVi9YR0VUQlYgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfT1NYU0FWRQkoNCozMisyNykgLyogIiIgWFNBVkUgZW5hYmxlZCBpbiB0aGUgT1MgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQVZYCQkoNCozMisyOCkgLyogQWR2YW5jZWQgVmVjdG9yIEV4dGVuc2lvbnMgKi8KLQotLyogVklBL0N5cml4L0NlbnRhdXItZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4QzAwMDAwMDEsIHdvcmQgNSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9YU1RPUkUJKDUqMzIrIDIpIC8qICJybmciIFJORyBwcmVzZW50ICh4c3RvcmUpICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1hTVE9SRV9FTgkoNSozMisgMykgLyogInJuZ19lbiIgUk5HIGVuYWJsZWQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWENSWVBUCSg1KjMyKyA2KSAvKiAiYWNlIiBvbi1DUFUgY3J5cHRvICh4Y3J5cHQpICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1hDUllQVF9FTgkoNSozMisgNykgLyogImFjZV9lbiIgb24tQ1BVIGNyeXB0byBlbmFibGVkICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0FDRTIJKDUqMzIrIDgpIC8qIEFkdmFuY2VkIENyeXB0b2dyYXBoeSBFbmdpbmUgdjIgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNFMl9FTgkoNSozMisgOSkgLyogQUNFIHYyIGVuYWJsZWQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUEhFCQkoNSozMisxMCkgLyogUGFkTG9jayBIYXNoIEVuZ2luZSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9QSEVfRU4JKDUqMzIrMTEpIC8qIFBIRSBlbmFibGVkICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BNTQkJKDUqMzIrMTIpIC8qIFBhZExvY2sgTW9udGdvbWVyeSBNdWx0aXBsaWVyICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BNTV9FTgkoNSozMisxMykgLyogUE1NIGVuYWJsZWQgKi8KLQotLyogTW9yZSBleHRlbmRlZCBBTUQgZmxhZ3M6IENQVUlEIGxldmVsIDB4ODAwMDAwMDEsIGVjeCwgd29yZCA2ICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0xBSEZfTE0JKDYqMzIrIDApIC8qIExBSEYvU0FIRiBpbiBsb25nIG1vZGUgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ01QX0xFR0FDWQkoNiozMisgMSkgLyogSWYgeWVzIEh5cGVyVGhyZWFkaW5nIG5vdCB2YWxpZCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9TVk0JCSg2KjMyKyAyKSAvKiBTZWN1cmUgdmlydHVhbCBtYWNoaW5lICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0VYVEFQSUMJKDYqMzIrIDMpIC8qIEV4dGVuZGVkIEFQSUMgc3BhY2UgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1I4X0xFR0FDWQkoNiozMisgNCkgLyogQ1I4IGluIDMyLWJpdCBtb2RlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0FCTQkJKDYqMzIrIDUpIC8qIEFkdmFuY2VkIGJpdCBtYW5pcHVsYXRpb24gKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfU1NFNEEJKDYqMzIrIDYpIC8qIFNTRS00QSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9NSVNBTElHTlNTRSAoNiozMisgNykgLyogTWlzYWxpZ25lZCBTU0UgbW9kZSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PV1BSRUZFVENIICg2KjMyKyA4KSAvKiAzRE5vdyBwcmVmZXRjaCBpbnN0cnVjdGlvbnMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfT1NWVwkoNiozMisgOSkgLyogT1MgVmlzaWJsZSBXb3JrYXJvdW5kICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0lCUwkJKDYqMzIrMTApIC8qIEluc3RydWN0aW9uIEJhc2VkIFNhbXBsaW5nICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NTRTUJKDYqMzIrMTEpIC8qIFNTRS01ICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NLSU5JVAkoNiozMisxMikgLyogU0tJTklUL1NUR0kgaW5zdHJ1Y3Rpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1dEVAkJKDYqMzIrMTMpIC8qIFdhdGNoZG9nIHRpbWVyICovCi0KLS8qCi0gKiBBdXhpbGlhcnkgZmxhZ3M6IExpbnV4IGRlZmluZWQgLSBGb3IgZmVhdHVyZXMgc2NhdHRlcmVkIGluIHZhcmlvdXMKLSAqIENQVUlEIGxldmVscyBsaWtlIDB4NiwgMHhBIGV0YwotICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0lEQQkJKDcqMzIrIDApIC8qIEludGVsIER5bmFtaWMgQWNjZWxlcmF0aW9uICovCi0KLS8qIFZpcnR1YWxpemF0aW9uIGZsYWdzOiBMaW51eCBkZWZpbmVkICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1RQUl9TSEFET1cgICg4KjMyKyAwKSAvKiBJbnRlbCBUUFIgU2hhZG93ICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1ZOTUkgICAgICAgICg4KjMyKyAxKSAvKiBJbnRlbCBWaXJ0dWFsIE5NSSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9GTEVYUFJJT1JJVFkgKDgqMzIrIDIpIC8qIEludGVsIEZsZXhQcmlvcml0eSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9FUFQgICAgICAgICAoOCozMisgMykgLyogSW50ZWwgRXh0ZW5kZWQgUGFnZSBUYWJsZSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9WUElEICAgICAgICAoOCozMisgNCkgLyogSW50ZWwgVmlydHVhbCBQcm9jZXNzb3IgSUQgKi8KLQotI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotCi0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgeDg2X2NhcF9mbGFnc1tOQ0FQSU5UUyozMl07Ci1leHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHg4Nl9wb3dlcl9mbGFnc1szMl07Ci0KLSNkZWZpbmUgdGVzdF9jcHVfY2FwKGMsIGJpdCkJCQkJCQlcCi0JIHRlc3RfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikoKGMpLT54ODZfY2FwYWJpbGl0eSkpCi0KLSNkZWZpbmUgY3B1X2hhcyhjLCBiaXQpCQkJCQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSAmJgkJCQkJXAotCSAoICgoKGJpdCk+PjUpPT0wICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMCkpIHx8CVwKLQkgICAoKChiaXQpPj41KT09MSAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzEpKSB8fAlcCi0JICAgKCgoYml0KT4+NSk9PTIgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0syKSkgfHwJXAotCSAgICgoKGJpdCk+PjUpPT0zICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMykpIHx8CVwKLQkgICAoKChiaXQpPj41KT09NCAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzQpKSB8fAlcCi0JICAgKCgoYml0KT4+NSk9PTUgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s1KSkgfHwJXAotCSAgICgoKGJpdCk+PjUpPT02ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNikpIHx8CVwKLQkgICAoKChiaXQpPj41KT09NyAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzcpKSApCVwKLQkgID8gMSA6CQkJCQkJCQlcCi0JIHRlc3RfY3B1X2NhcChjLCBiaXQpKQotCi0jZGVmaW5lIGJvb3RfY3B1X2hhcyhiaXQpCWNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIGJpdCkKLQotI2RlZmluZSBzZXRfY3B1X2NhcChjLCBiaXQpCXNldF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSgoYyktPng4Nl9jYXBhYmlsaXR5KSkKLSNkZWZpbmUgY2xlYXJfY3B1X2NhcChjLCBiaXQpCWNsZWFyX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopKChjKS0+eDg2X2NhcGFiaWxpdHkpKQotI2RlZmluZSBzZXR1cF9jbGVhcl9jcHVfY2FwKGJpdCkgZG8geyBcCi0JY2xlYXJfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgYml0KTsJXAotCXNldF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKWNsZWFyZWRfY3B1X2NhcHMpOyBcCi19IHdoaWxlICgwKQotI2RlZmluZSBzZXR1cF9mb3JjZV9jcHVfY2FwKGJpdCkgZG8geyBcCi0Jc2V0X2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIGJpdCk7CVwKLQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKWNsZWFyZWRfY3B1X2NhcHMpOwlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIGNwdV9oYXNfZnB1CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfRlBVKQotI2RlZmluZSBjcHVfaGFzX3ZtZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNRSkKLSNkZWZpbmUgY3B1X2hhc19kZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFKQotI2RlZmluZSBjcHVfaGFzX3BzZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BTRSkKLSNkZWZpbmUgY3B1X2hhc190c2MJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpCi0jZGVmaW5lIGNwdV9oYXNfcGFlCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEFFKQotI2RlZmluZSBjcHVfaGFzX3BnZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BHRSkKLSNkZWZpbmUgY3B1X2hhc19hcGljCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykKLSNkZWZpbmUgY3B1X2hhc19zZXAJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVApCi0jZGVmaW5lIGNwdV9oYXNfbXRycgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01UUlIpCi0jZGVmaW5lIGNwdV9oYXNfbW14CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTU1YKQotI2RlZmluZSBjcHVfaGFzX2Z4c3IJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9GWFNSKQotI2RlZmluZSBjcHVfaGFzX3htbQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTSkKLSNkZWZpbmUgY3B1X2hhc194bW0yCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMikKLSNkZWZpbmUgY3B1X2hhc194bW0zCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMykKLSNkZWZpbmUgY3B1X2hhc19odAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hUKQotI2RlZmluZSBjcHVfaGFzX21wCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVApCi0jZGVmaW5lIGNwdV9oYXNfbngJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OWCkKLSNkZWZpbmUgY3B1X2hhc19rNl9tdHJyCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSzZfTVRSUikKLSNkZWZpbmUgY3B1X2hhc19jeXJpeF9hcnIJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NZUklYX0FSUikKLSNkZWZpbmUgY3B1X2hhc19jZW50YXVyX21jcglib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IpCi0jZGVmaW5lIGNwdV9oYXNfeHN0b3JlCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNUT1JFKQotI2RlZmluZSBjcHVfaGFzX3hzdG9yZV9lbmFibGVkCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YU1RPUkVfRU4pCi0jZGVmaW5lIGNwdV9oYXNfeGNyeXB0CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWENSWVBUKQotI2RlZmluZSBjcHVfaGFzX3hjcnlwdF9lbmFibGVkCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YQ1JZUFRfRU4pCi0jZGVmaW5lIGNwdV9oYXNfYWNlMgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FDRTIpCi0jZGVmaW5lIGNwdV9oYXNfYWNlMl9lbmFibGVkCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BQ0UyX0VOKQotI2RlZmluZSBjcHVfaGFzX3BoZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BIRSkKLSNkZWZpbmUgY3B1X2hhc19waGVfZW5hYmxlZAlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEhFX0VOKQotI2RlZmluZSBjcHVfaGFzX3BtbQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BNTSkKLSNkZWZpbmUgY3B1X2hhc19wbW1fZW5hYmxlZAlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUE1NX0VOKQotI2RlZmluZSBjcHVfaGFzX2RzCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfRFMpCi0jZGVmaW5lIGNwdV9oYXNfcGVicwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BFQlMpCi0jZGVmaW5lIGNwdV9oYXNfY2xmbHVzaAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxTSCkKLSNkZWZpbmUgY3B1X2hhc19idHMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CVFMpCi0jZGVmaW5lIGNwdV9oYXNfZ2JwYWdlcwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0dCUEFHRVMpCi0jZGVmaW5lIGNwdV9oYXNfYXJjaF9wZXJmbW9uCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pCi0jZGVmaW5lIGNwdV9oYXNfcGF0CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEFUKQotI2RlZmluZSBjcHVfaGFzX3htbTRfMQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTRfMSkKLSNkZWZpbmUgY3B1X2hhc194bW00XzIJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU00XzIpCi0jZGVmaW5lIGNwdV9oYXNfeDJhcGljCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWDJBUElDKQotI2RlZmluZSBjcHVfaGFzX3hzYXZlCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNBVkUpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfSU5WTFBHKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0jIGRlZmluZSBjcHVfaGFzX2ludmxwZwkJMQotI2Vsc2UKLSMgZGVmaW5lIGNwdV9oYXNfaW52bHBnCQkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KLSN1bmRlZiAgY3B1X2hhc192bWUKLSNkZWZpbmUgY3B1X2hhc192bWUJCTAKLQotI3VuZGVmICBjcHVfaGFzX3BhZQotI2RlZmluZSBjcHVfaGFzX3BhZQkJX19fQlVHX19fCi0KLSN1bmRlZiAgY3B1X2hhc19tcAotI2RlZmluZSBjcHVfaGFzX21wCQkxCi0KLSN1bmRlZiAgY3B1X2hhc19rNl9tdHJyCi0jZGVmaW5lIGNwdV9oYXNfazZfbXRycgkJMAotCi0jdW5kZWYgIGNwdV9oYXNfY3lyaXhfYXJyCi0jZGVmaW5lIGNwdV9oYXNfY3lyaXhfYXJyCTAKLQotI3VuZGVmICBjcHVfaGFzX2NlbnRhdXJfbWNyCi0jZGVmaW5lIGNwdV9oYXNfY2VudGF1cl9tY3IJMAotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwotCi0jZW5kaWYgLyogZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19DUFVGRUFUVVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS14ODYvY3VycmVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODYzZWFkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9jdXJyZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0NVUlJFTlRfSAotI2RlZmluZSBBU01fWDg2X19DVVJSRU5UX0gKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGN1cnJlbnRfdGFzayk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KGN1cnJlbnRfdGFzayk7Ci19Ci0KLSNlbHNlIC8qIFg4Nl8zMiAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGFzbS9wZGEuaD4KLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKLXsKLQlyZXR1cm4gcmVhZF9wZGEocGN1cnJlbnQpOwotfQotCi0jZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotI2RlZmluZSBHRVRfQ1VSUkVOVChyZWcpIG1vdnEgJWdzOihwZGFfcGN1cnJlbnQpLHJlZwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBYODZfMzIgKi8KLQotI2RlZmluZSBjdXJyZW50IGdldF9jdXJyZW50KCkKLQotI2VuZGlmIC8qIEFTTV9YODZfX0NVUlJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RlYnVncmVnLmggYi9pbmNsdWRlL2FzbS14ODYvZGVidWdyZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNiNjkwNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZGVidWdyZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fREVCVUdSRUdfSAotI2RlZmluZSBBU01fWDg2X19ERUJVR1JFR19ICi0KLQotLyogSW5kaWNhdGUgdGhlIHJlZ2lzdGVyIG51bWJlcnMgZm9yIGEgbnVtYmVyIG9mIHRoZSBzcGVjaWZpYwotICAgZGVidWcgcmVnaXN0ZXJzLiAgUmVnaXN0ZXJzIDAtMyBjb250YWluIHRoZSBhZGRyZXNzZXMgd2Ugd2lzaCB0byB0cmFwIG9uICovCi0jZGVmaW5lIERSX0ZJUlNUQUREUiAwICAgICAgICAvKiB1X2RlYnVncmVnW0RSX0ZJUlNUQUREUl0gKi8KLSNkZWZpbmUgRFJfTEFTVEFERFIgMyAgICAgICAgIC8qIHVfZGVidWdyZWdbRFJfTEFTVEFERFJdICAqLwotCi0jZGVmaW5lIERSX1NUQVRVUyA2ICAgICAgICAgICAvKiB1X2RlYnVncmVnW0RSX1NUQVRVU10gICAgICovCi0jZGVmaW5lIERSX0NPTlRST0wgNyAgICAgICAgICAvKiB1X2RlYnVncmVnW0RSX0NPTlRST0xdICovCi0KLS8qIERlZmluZSBhIGZldyB0aGluZ3MgZm9yIHRoZSBzdGF0dXMgcmVnaXN0ZXIuICBXZSBjYW4gdXNlIHRoaXMgdG8gZGV0ZXJtaW5lCi0gICB3aGljaCBkZWJ1Z2dpbmcgcmVnaXN0ZXIgd2FzIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhcC4gIFRoZSBvdGhlciBiaXRzCi0gICBhcmUgZWl0aGVyIHJlc2VydmVkIG9yIG5vdCBvZiBpbnRlcmVzdCB0byB1cy4gKi8KLQotI2RlZmluZSBEUl9UUkFQMAkoMHgxKQkJLyogZGIwICovCi0jZGVmaW5lIERSX1RSQVAxCSgweDIpCQkvKiBkYjEgKi8KLSNkZWZpbmUgRFJfVFJBUDIJKDB4NCkJCS8qIGRiMiAqLwotI2RlZmluZSBEUl9UUkFQMwkoMHg4KQkJLyogZGIzICovCi0KLSNkZWZpbmUgRFJfU1RFUAkJKDB4NDAwMCkJLyogc2luZ2xlLXN0ZXAgKi8KLSNkZWZpbmUgRFJfU1dJVENICSgweDgwMDApCS8qIHRhc2sgc3dpdGNoICovCi0KLS8qIE5vdyBkZWZpbmUgYSBidW5jaCBvZiB0aGluZ3MgZm9yIG1hbmlwdWxhdGluZyB0aGUgY29udHJvbCByZWdpc3Rlci4KLSAgIFRoZSB0b3AgdHdvIGJ5dGVzIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIGNvbnNpc3Qgb2YgNCBmaWVsZHMgb2YgNAotICAgYml0cyAtIGVhY2ggZmllbGQgY29ycmVzcG9uZHMgdG8gb25lIG9mIHRoZSBmb3VyIGRlYnVnIHJlZ2lzdGVycywKLSAgIGFuZCBpbmRpY2F0ZXMgd2hhdCB0eXBlcyBvZiBhY2Nlc3Mgd2UgdHJhcCBvbiwgYW5kIGhvdyBsYXJnZSB0aGUgZGF0YQotICAgZmllbGQgaXMgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCAqLwotCi0jZGVmaW5lIERSX0NPTlRST0xfU0hJRlQgMTYgLyogU2tpcCB0aGlzIG1hbnkgYml0cyBpbiBjdGwgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRFJfQ09OVFJPTF9TSVpFIDQgICAvKiA0IGNvbnRyb2wgYml0cyBwZXIgcmVnaXN0ZXIgKi8KLQotI2RlZmluZSBEUl9SV19FWEVDVVRFICgweDApICAgLyogU2V0dGluZ3MgZm9yIHRoZSBhY2Nlc3MgdHlwZXMgdG8gdHJhcCBvbiAqLwotI2RlZmluZSBEUl9SV19XUklURSAoMHgxKQotI2RlZmluZSBEUl9SV19SRUFEICgweDMpCi0KLSNkZWZpbmUgRFJfTEVOXzEgKDB4MCkgLyogU2V0dGluZ3MgZm9yIGRhdGEgbGVuZ3RoIHRvIHRyYXAgb24gKi8KLSNkZWZpbmUgRFJfTEVOXzIgKDB4NCkKLSNkZWZpbmUgRFJfTEVOXzQgKDB4QykKLSNkZWZpbmUgRFJfTEVOXzggKDB4OCkKLQotLyogVGhlIGxvdyBieXRlIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyIGRldGVybWluZSB3aGljaCByZWdpc3RlcnMgYXJlCi0gICBlbmFibGVkLiAgVGhlcmUgYXJlIDQgZmllbGRzIG9mIHR3byBiaXRzLiAgT25lIGJpdCBpcyAibG9jYWwiLCBtZWFuaW5nCi0gICB0aGF0IHRoZSBwcm9jZXNzb3Igd2lsbCByZXNldCB0aGUgYml0IGFmdGVyIGEgdGFzayBzd2l0Y2ggYW5kIHRoZSBvdGhlcgotICAgaXMgZ2xvYmFsIG1lYW5pbmcgdGhhdCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgcmVzZXQgdGhlIGJpdC4gIFdpdGggbGludXgsCi0gICB5b3UgY2FuIHVzZSBlaXRoZXIgb25lLCBzaW5jZSB3ZSBleHBsaWNpdGx5IHplcm8gdGhlIHJlZ2lzdGVyIHdoZW4gd2UgZW50ZXIKLSAgIGtlcm5lbCBtb2RlLiAqLwotCi0jZGVmaW5lIERSX0xPQ0FMX0VOQUJMRV9TSElGVCAwICAgIC8qIEV4dHJhIHNoaWZ0IHRvIHRoZSBsb2NhbCBlbmFibGUgYml0ICovCi0jZGVmaW5lIERSX0dMT0JBTF9FTkFCTEVfU0hJRlQgMSAgIC8qIEV4dHJhIHNoaWZ0IHRvIHRoZSBnbG9iYWwgZW5hYmxlIGJpdCAqLwotI2RlZmluZSBEUl9FTkFCTEVfU0laRSAyICAgICAgICAgICAvKiAyIGVuYWJsZSBiaXRzIHBlciByZWdpc3RlciAqLwotCi0jZGVmaW5lIERSX0xPQ0FMX0VOQUJMRV9NQVNLICgweDU1KSAgLyogU2V0ICBsb2NhbCBiaXRzIGZvciBhbGwgNCByZWdzICovCi0jZGVmaW5lIERSX0dMT0JBTF9FTkFCTEVfTUFTSyAoMHhBQSkgLyogU2V0IGdsb2JhbCBiaXRzIGZvciBhbGwgNCByZWdzICovCi0KLS8qIFRoZSBzZWNvbmQgYnl0ZSB0byB0aGUgY29udHJvbCByZWdpc3RlciBoYXMgYSBmZXcgc3BlY2lhbCB0aGluZ3MuCi0gICBXZSBjYW4gc2xvdyB0aGUgaW5zdHJ1Y3Rpb24gcGlwZWxpbmUgZm9yIGluc3RydWN0aW9ucyBjb21pbmcgdmlhIHRoZQotICAgZ2R0IG9yIHRoZSBsZHQgaWYgd2Ugd2FudCB0by4gIEkgYW0gbm90IHN1cmUgd2h5IHRoaXMgaXMgYW4gYWR2YW50YWdlICovCi0KLSNpZmRlZiBfX2kzODZfXwotI2RlZmluZSBEUl9DT05UUk9MX1JFU0VSVkVEICgweEZDMDApIC8qIFJlc2VydmVkIGJ5IEludGVsICovCi0jZWxzZQotI2RlZmluZSBEUl9DT05UUk9MX1JFU0VSVkVEICgweEZGRkZGRkZGMDAwMEZDMDBVTCkgLyogUmVzZXJ2ZWQgKi8KLSNlbmRpZgotCi0jZGVmaW5lIERSX0xPQ0FMX1NMT1dET1dOICgweDEwMCkgICAvKiBMb2NhbCBzbG93IHRoZSBwaXBlbGluZSAqLwotI2RlZmluZSBEUl9HTE9CQUxfU0xPV0RPV04gKDB4MjAwKSAgLyogR2xvYmFsIHNsb3cgdGhlIHBpcGVsaW5lICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19ERUJVR1JFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9kZWxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTBkYTk1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kZWxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19ERUxBWV9ICi0jZGVmaW5lIEFTTV9YODZfX0RFTEFZX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5MyBMaW51cyBUb3J2YWxkcwotICoKLSAqIERlbGF5IHJvdXRpbmVzIGNhbGxpbmcgZnVuY3Rpb25zIGluIGFyY2gveDg2L2xpYi9kZWxheS5jCi0gKi8KLQotLyogVW5kZWZpbmVkIGZ1bmN0aW9ucyB0byBnZXQgY29tcGlsZS10aW1lIGVycm9ycyAqLwotZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19iYWRfbmRlbGF5KHZvaWQpOwotCi1leHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKLWV4dGVybiB2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpOwotZXh0ZXJuIHZvaWQgX19jb25zdF91ZGVsYXkodW5zaWduZWQgbG9uZyB4bG9vcHMpOwotZXh0ZXJuIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKTsKLQotLyogMHgxMGM3IGlzIDIqKjMyIC8gMTAwMDAwMCAocm91bmRlZCB1cCkgKi8KLSNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKLQkoKG4pID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KChuKSAqIDB4MTBjN3VsKSkgOiBcCi0JX191ZGVsYXkobikpCi0KLS8qIDB4NSBpcyAyKiozMiAvIDEwMDAwMDAwMDAgKHJvdW5kZWQgdXApICovCi0jZGVmaW5lIG5kZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCi0JKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6IFwKLQlfX25kZWxheShuKSkKLQotdm9pZCB1c2VfdHNjX2RlbGF5KHZvaWQpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fREVMQVlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2Rlc2MuaCBiL2luY2x1ZGUvYXNtLXg4Ni9kZXNjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNmFkYWMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Rlc2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0RFU0NfSAotI2RlZmluZSBBU01fWDg2X19ERVNDX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+Ci0jaW5jbHVkZSA8YXNtL2xkdC5oPgotI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGZpbGxfbGR0KHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKQotewotCWRlc2MtPmxpbWl0MCA9IGluZm8tPmxpbWl0ICYgMHgwZmZmZjsKLQlkZXNjLT5iYXNlMCA9IGluZm8tPmJhc2VfYWRkciAmIDB4MDAwMGZmZmY7Ci0KLQlkZXNjLT5iYXNlMSA9IChpbmZvLT5iYXNlX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNjsKLQlkZXNjLT50eXBlID0gKGluZm8tPnJlYWRfZXhlY19vbmx5IF4gMSkgPDwgMTsKLQlkZXNjLT50eXBlIHw9IGluZm8tPmNvbnRlbnRzIDw8IDI7Ci0JZGVzYy0+cyA9IDE7Ci0JZGVzYy0+ZHBsID0gMHgzOwotCWRlc2MtPnAgPSBpbmZvLT5zZWdfbm90X3ByZXNlbnQgXiAxOwotCWRlc2MtPmxpbWl0ID0gKGluZm8tPmxpbWl0ICYgMHhmMDAwMCkgPj4gMTY7Ci0JZGVzYy0+YXZsID0gaW5mby0+dXNlYWJsZTsKLQlkZXNjLT5kID0gaW5mby0+c2VnXzMyYml0OwotCWRlc2MtPmcgPSBpbmZvLT5saW1pdF9pbl9wYWdlczsKLQlkZXNjLT5iYXNlMiA9IChpbmZvLT5iYXNlX2FkZHIgJiAweGZmMDAwMDAwKSA+PiAyNDsKLQkvKgotCSAqIERvbid0IGFsbG93IHNldHRpbmcgb2YgdGhlIGxtIGJpdC4gSXQgaXMgdXNlbGVzcyBhbnl3YXkKLQkgKiBiZWNhdXNlIDY0Yml0IHN5c3RlbSBjYWxscyByZXF1aXJlIF9fVVNFUl9DUzoKLQkgKi8KLQlkZXNjLT5sID0gMDsKLX0KLQotZXh0ZXJuIHN0cnVjdCBkZXNjX3B0ciBpZHRfZGVzY3I7Ci1leHRlcm4gZ2F0ZV9kZXNjIGlkdF90YWJsZVtdOwotCi1zdHJ1Y3QgZ2R0X3BhZ2UgewotCXN0cnVjdCBkZXNjX3N0cnVjdCBnZHRbR0RUX0VOVFJJRVNdOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdldF9jcHVfZ2R0X3RhYmxlKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JcmV0dXJuIHBlcl9jcHUoZ2R0X3BhZ2UsIGNwdSkuZ2R0OwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFja19nYXRlKGdhdGVfZGVzYyAqZ2F0ZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgbG9uZyBmdW5jLAotCQkJICAgICB1bnNpZ25lZCBkcGwsIHVuc2lnbmVkIGlzdCwgdW5zaWduZWQgc2VnKQotewotCWdhdGUtPm9mZnNldF9sb3cgPSBQVFJfTE9XKGZ1bmMpOwotCWdhdGUtPnNlZ21lbnQgPSBfX0tFUk5FTF9DUzsKLQlnYXRlLT5pc3QgPSBpc3Q7Ci0JZ2F0ZS0+cCA9IDE7Ci0JZ2F0ZS0+ZHBsID0gZHBsOwotCWdhdGUtPnplcm8wID0gMDsKLQlnYXRlLT56ZXJvMSA9IDA7Ci0JZ2F0ZS0+dHlwZSA9IHR5cGU7Ci0JZ2F0ZS0+b2Zmc2V0X21pZGRsZSA9IFBUUl9NSURETEUoZnVuYyk7Ci0JZ2F0ZS0+b2Zmc2V0X2hpZ2ggPSBQVFJfSElHSChmdW5jKTsKLX0KLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWNrX2dhdGUoZ2F0ZV9kZXNjICpnYXRlLCB1bnNpZ25lZCBjaGFyIHR5cGUsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgZHBsLCB1bnNpZ25lZCBmbGFncywKLQkJCSAgICAgdW5zaWduZWQgc2hvcnQgc2VnKQotewotCWdhdGUtPmEgPSAoc2VnIDw8IDE2KSB8IChiYXNlICYgMHhmZmZmKTsKLQlnYXRlLT5iID0gKGJhc2UgJiAweGZmZmYwMDAwKSB8Ci0JCSAgKCgoMHg4MCB8IHR5cGUgfCAoZHBsIDw8IDUpKSAmIDB4ZmYpIDw8IDgpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgZGVzY19lbXB0eShjb25zdCB2b2lkICpwdHIpCi17Ci0JY29uc3QgdTMyICpkZXNjID0gcHRyOwotCXJldHVybiAhKGRlc2NbMF0gfCBkZXNjWzFdKTsKLX0KLQotI2lmZGVmIENPTkZJR19QQVJBVklSVAotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLSNkZWZpbmUgbG9hZF9UUl9kZXNjKCkgbmF0aXZlX2xvYWRfdHJfZGVzYygpCi0jZGVmaW5lIGxvYWRfZ2R0KGR0cikgbmF0aXZlX2xvYWRfZ2R0KGR0cikKLSNkZWZpbmUgbG9hZF9pZHQoZHRyKSBuYXRpdmVfbG9hZF9pZHQoZHRyKQotI2RlZmluZSBsb2FkX3RyKHRyKSBhc20gdm9sYXRpbGUoImx0ciAlMCI6OiJtIiAodHIpKQotI2RlZmluZSBsb2FkX2xkdChsZHQpIGFzbSB2b2xhdGlsZSgibGxkdCAlMCI6OiJtIiAobGR0KSkKLQotI2RlZmluZSBzdG9yZV9nZHQoZHRyKSBuYXRpdmVfc3RvcmVfZ2R0KGR0cikKLSNkZWZpbmUgc3RvcmVfaWR0KGR0cikgbmF0aXZlX3N0b3JlX2lkdChkdHIpCi0jZGVmaW5lIHN0b3JlX3RyKHRyKSAodHIgPSBuYXRpdmVfc3RvcmVfdHIoKSkKLSNkZWZpbmUgc3RvcmVfbGR0KGxkdCkgYXNtKCJzbGR0ICUwIjoiPW0iIChsZHQpKQotCi0jZGVmaW5lIGxvYWRfVExTKHQsIGNwdSkgbmF0aXZlX2xvYWRfdGxzKHQsIGNwdSkKLSNkZWZpbmUgc2V0X2xkdCBuYXRpdmVfc2V0X2xkdAotCi0jZGVmaW5lIHdyaXRlX2xkdF9lbnRyeShkdCwgZW50cnksIGRlc2MpCVwKLQluYXRpdmVfd3JpdGVfbGR0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYykKLSNkZWZpbmUgd3JpdGVfZ2R0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYywgdHlwZSkJCVwKLQluYXRpdmVfd3JpdGVfZ2R0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYywgdHlwZSkKLSNkZWZpbmUgd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeSwgZykJCVwKLQluYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeSwgZykKLQotc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FsbG9jX2xkdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgdW5zaWduZWQgZW50cmllcykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2ZyZWVfbGR0KHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKQotewotfQotI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2lkdF9lbnRyeShnYXRlX2Rlc2MgKmlkdCwgaW50IGVudHJ5LAotCQkJCQkgIGNvbnN0IGdhdGVfZGVzYyAqZ2F0ZSkKLXsKLQltZW1jcHkoJmlkdFtlbnRyeV0sIGdhdGUsIHNpemVvZigqZ2F0ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2xkdF9lbnRyeShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgaW50IGVudHJ5LAotCQkJCQkgIGNvbnN0IHZvaWQgKmRlc2MpCi17Ci0JbWVtY3B5KCZsZHRbZW50cnldLCBkZXNjLCA4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9nZHRfZW50cnkoc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQsIGludCBlbnRyeSwKLQkJCQkJICBjb25zdCB2b2lkICpkZXNjLCBpbnQgdHlwZSkKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIERFU0NfVFNTOgotCQlzaXplID0gc2l6ZW9mKHRzc19kZXNjKTsKLQkJYnJlYWs7Ci0JY2FzZSBERVNDX0xEVDoKLQkJc2l6ZSA9IHNpemVvZihsZHRfZGVzYyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IGRlc2Nfc3RydWN0KTsKLQkJYnJlYWs7Ci0JfQotCW1lbWNweSgmZ2R0W2VudHJ5XSwgZGVzYywgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWNrX2Rlc2NyaXB0b3Ioc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdCwgdW5zaWduZWQgY2hhciB0eXBlLAotCQkJCSAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MpCi17Ci0JZGVzYy0+YSA9ICgoYmFzZSAmIDB4ZmZmZikgPDwgMTYpIHwgKGxpbWl0ICYgMHhmZmZmKTsKLQlkZXNjLT5iID0gKGJhc2UgJiAweGZmMDAwMDAwKSB8ICgoYmFzZSAmIDB4ZmYwMDAwKSA+PiAxNikgfAotCQkobGltaXQgJiAweDAwMGYwMDAwKSB8ICgodHlwZSAmIDB4ZmYpIDw8IDgpIHwKLQkJKChmbGFncyAmIDB4ZikgPDwgMjApOwotCWRlc2MtPnAgPSAxOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHNzbGR0X2Rlc2NyaXB0b3Iodm9pZCAqZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgc2l6ZSkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0Jc3RydWN0IGxkdHRzc19kZXNjNjQgKmRlc2MgPSBkOwotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5saW1pdDAgPSBzaXplICYgMHhGRkZGOwotCWRlc2MtPmJhc2UwID0gUFRSX0xPVyhhZGRyKTsKLQlkZXNjLT5iYXNlMSA9IFBUUl9NSURETEUoYWRkcikgJiAweEZGOwotCWRlc2MtPnR5cGUgPSB0eXBlOwotCWRlc2MtPnAgPSAxOwotCWRlc2MtPmxpbWl0MSA9IChzaXplID4+IDE2KSAmIDB4RjsKLQlkZXNjLT5iYXNlMiA9IChQVFJfTUlERExFKGFkZHIpID4+IDgpICYgMHhGRjsKLQlkZXNjLT5iYXNlMyA9IFBUUl9ISUdIKGFkZHIpOwotI2Vsc2UKLQlwYWNrX2Rlc2NyaXB0b3IoKHN0cnVjdCBkZXNjX3N0cnVjdCAqKWQsIGFkZHIsIHNpemUsIDB4ODAgfCB0eXBlLCAwKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfdHNzX2Rlc2ModW5zaWduZWQgY3B1LCB1bnNpZ25lZCBpbnQgZW50cnksIHZvaWQgKmFkZHIpCi17Ci0Jc3RydWN0IGRlc2Nfc3RydWN0ICpkID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKLQl0c3NfZGVzYyB0c3M7Ci0KLQkvKgotCSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSBjb21pbmcgZnJvbSBhbiBleHRyYSAibG9uZyIgYXQgdGhlIGVuZAotCSAqIG9mIHRoZSBpb2JpdG1hcC4gU2VlIHRzc19zdHJ1Y3QgZGVmaW5pdGlvbiBpbiBwcm9jZXNzb3IuaAotCSAqCi0JICogLTE/IHNlZyBiYXNlK2xpbWl0IHNob3VsZCBiZSBwb2ludGluZyB0byB0aGUgYWRkcmVzcyBvZiB0aGUKLQkgKiBsYXN0IHZhbGlkIGJ5dGUKLQkgKi8KLQlzZXRfdHNzbGR0X2Rlc2NyaXB0b3IoJnRzcywgKHVuc2lnbmVkIGxvbmcpYWRkciwgREVTQ19UU1MsCi0JCQkgICAgICBJT19CSVRNQVBfT0ZGU0VUICsgSU9fQklUTUFQX0JZVEVTICsKLQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpOwotCXdyaXRlX2dkdF9lbnRyeShkLCBlbnRyeSwgJnRzcywgREVTQ19UU1MpOwotfQotCi0jZGVmaW5lIHNldF90c3NfZGVzYyhjcHUsIGFkZHIpIF9fc2V0X3Rzc19kZXNjKGNwdSwgR0RUX0VOVFJZX1RTUywgYWRkcikKLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfbGR0KGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBlbnRyaWVzKQotewotCWlmIChsaWtlbHkoZW50cmllcyA9PSAwKSkKLQkJYXNtIHZvbGF0aWxlKCJsbGR0ICV3MCI6OiJxIiAoMCkpOwotCWVsc2UgewotCQl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCWxkdF9kZXNjIGxkdDsKLQotCQlzZXRfdHNzbGR0X2Rlc2NyaXB0b3IoJmxkdCwgKHVuc2lnbmVkIGxvbmcpYWRkciwgREVTQ19MRFQsCi0JCQkJICAgICAgZW50cmllcyAqIExEVF9FTlRSWV9TSVpFIC0gMSk7Ci0JCXdyaXRlX2dkdF9lbnRyeShnZXRfY3B1X2dkdF90YWJsZShjcHUpLCBHRFRfRU5UUllfTERULAotCQkJCSZsZHQsIERFU0NfTERUKTsKLQkJYXNtIHZvbGF0aWxlKCJsbGR0ICV3MCI6OiJxIiAoR0RUX0VOVFJZX0xEVCo4KSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2xvYWRfdHJfZGVzYyh2b2lkKQotewotCWFzbSB2b2xhdGlsZSgibHRyICV3MCI6OiJxIiAoR0RUX0VOVFJZX1RTUyo4KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfbG9hZF9nZHQoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpkdHIpCi17Ci0JYXNtIHZvbGF0aWxlKCJsZ2R0ICUwIjo6Im0iICgqZHRyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfbG9hZF9pZHQoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpkdHIpCi17Ci0JYXNtIHZvbGF0aWxlKCJsaWR0ICUwIjo6Im0iICgqZHRyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc3RvcmVfZ2R0KHN0cnVjdCBkZXNjX3B0ciAqZHRyKQotewotCWFzbSB2b2xhdGlsZSgic2dkdCAlMCI6Ij1tIiAoKmR0cikpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3N0b3JlX2lkdChzdHJ1Y3QgZGVzY19wdHIgKmR0cikKLXsKLQlhc20gdm9sYXRpbGUoInNpZHQgJTAiOiI9bSIgKCpkdHIpKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9zdG9yZV90cih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdHI7Ci0JYXNtIHZvbGF0aWxlKCJzdHIgJTAiOiI9ciIgKHRyKSk7Ci0JcmV0dXJuIHRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2xvYWRfdGxzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKLQotCWZvciAoaSA9IDA7IGkgPCBHRFRfRU5UUllfVExTX0VOVFJJRVM7IGkrKykKLQkJZ2R0W0dEVF9FTlRSWV9UTFNfTUlOICsgaV0gPSB0LT50bHNfYXJyYXlbaV07Ci19Ci0KLSNkZWZpbmUgX0xEVF9lbXB0eShpbmZvKQkJCQlcCi0JKChpbmZvKS0+YmFzZV9hZGRyCQk9PSAwCSYmCVwKLQkgKGluZm8pLT5saW1pdAkJCT09IDAJJiYJXAotCSAoaW5mbyktPmNvbnRlbnRzCQk9PSAwCSYmCVwKLQkgKGluZm8pLT5yZWFkX2V4ZWNfb25seQkJPT0gMQkmJglcCi0JIChpbmZvKS0+c2VnXzMyYml0CQk9PSAwCSYmCVwKLQkgKGluZm8pLT5saW1pdF9pbl9wYWdlcwkJPT0gMAkmJglcCi0JIChpbmZvKS0+c2VnX25vdF9wcmVzZW50CT09IDEJJiYJXAotCSAoaW5mbyktPnVzZWFibGUJCT09IDApCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoX0xEVF9lbXB0eShpbmZvKSAmJiAoKGluZm8pLT5sbSA9PSAwKSkKLSNlbHNlCi0jZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoX0xEVF9lbXB0eShpbmZvKSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfTERUKHZvaWQpCi17Ci0Jc2V0X2xkdChOVUxMLCAwKTsKLX0KLQotLyoKLSAqIGxvYWQgb25lIHBhcnRpY3VsYXIgTERUIGludG8gdGhlIGN1cnJlbnQgQ1BVCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX0xEVF9ub2xvY2sobW1fY29udGV4dF90ICpwYykKLXsKLQlzZXRfbGR0KHBjLT5sZHQsIHBjLT5zaXplKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxvYWRfTERUKG1tX2NvbnRleHRfdCAqcGMpCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbG9hZF9MRFRfbm9sb2NrKHBjKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2Rlc2NfYmFzZShjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MpCi17Ci0JcmV0dXJuIGRlc2MtPmJhc2UwIHwgKChkZXNjLT5iYXNlMSkgPDwgMTYpIHwgKChkZXNjLT5iYXNlMikgPDwgMjQpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2Rlc2NfbGltaXQoY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQotewotCXJldHVybiBkZXNjLT5saW1pdDAgfCAoZGVzYy0+bGltaXQgPDwgMTYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX3NldF9nYXRlKGludCBnYXRlLCB1bnNpZ25lZCB0eXBlLCB2b2lkICphZGRyLAotCQkJICAgICB1bnNpZ25lZCBkcGwsIHVuc2lnbmVkIGlzdCwgdW5zaWduZWQgc2VnKQotewotCWdhdGVfZGVzYyBzOwotCXBhY2tfZ2F0ZSgmcywgdHlwZSwgKHVuc2lnbmVkIGxvbmcpYWRkciwgZHBsLCBpc3QsIHNlZyk7Ci0JLyoKLQkgKiBkb2VzIG5vdCBuZWVkIHRvIGJlIGF0b21pYyBiZWNhdXNlIGl0IGlzIG9ubHkgZG9uZSBvbmNlIGF0Ci0JICogc2V0dXAgdGltZQotCSAqLwotCXdyaXRlX2lkdF9lbnRyeShpZHRfdGFibGUsIGdhdGUsICZzKTsKLX0KLQotLyoKLSAqIFRoaXMgbmVlZHMgdG8gdXNlICdpZHRfdGFibGUnIHJhdGhlciB0aGFuICdpZHQnLCBhbmQKLSAqIHRodXMgdXNlIHRoZSBfbm9ubWFwcGVkXyB2ZXJzaW9uIG9mIHRoZSBJRFQsIGFzIHRoZQotICogUGVudGl1bSBGMCAwRiBidWdmaXggY2FuIGhhdmUgcmVzdWx0ZWQgaW4gdGhlIG1hcHBlZAotICogSURUIGJlaW5nIHdyaXRlLXByb3RlY3RlZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldF9pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIHZvaWQgKmFkZHIpCi17Ci0JQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7Ci0JX3NldF9nYXRlKG4sIEdBVEVfSU5URVJSVVBULCBhZGRyLCAwLCAwLCBfX0tFUk5FTF9DUyk7Ci19Ci0KLSNkZWZpbmUgU1lTX1ZFQ1RPUl9GUkVFCQkwCi0jZGVmaW5lIFNZU19WRUNUT1JfQUxMT0NFRAkxCi0KLWV4dGVybiBpbnQgZmlyc3Rfc3lzdGVtX3ZlY3RvcjsKLWV4dGVybiBjaGFyIHN5c3RlbV92ZWN0b3JzW107Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zeXN0ZW1fdmVjdG9yKGludCB2ZWN0b3IpCi17Ci0JaWYgKHN5c3RlbV92ZWN0b3JzW3ZlY3Rvcl0gPT0gU1lTX1ZFQ1RPUl9GUkVFKSB7Ci0JCXN5c3RlbV92ZWN0b3JzW3ZlY3Rvcl0gPSBTWVNfVkVDVE9SX0FMTE9DRUQ7Ci0JCWlmIChmaXJzdF9zeXN0ZW1fdmVjdG9yID4gdmVjdG9yKQotCQkJZmlyc3Rfc3lzdGVtX3ZlY3RvciA9IHZlY3RvcjsKLQl9IGVsc2UKLQkJQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIHZvaWQgKmFkZHIpCi17Ci0JYWxsb2Nfc3lzdGVtX3ZlY3RvcihuKTsKLQlzZXRfaW50cl9nYXRlKG4sIGFkZHIpOwotfQotCi0vKgotICogVGhpcyByb3V0aW5lIHNldHMgdXAgYW4gaW50ZXJydXB0IGdhdGUgYXQgZGlyZWN0b3J5IHByaXZpbGVnZSBsZXZlbCAzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N5c3RlbV9pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIHZvaWQgKmFkZHIpCi17Ci0JQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7Ci0JX3NldF9nYXRlKG4sIEdBVEVfSU5URVJSVVBULCBhZGRyLCAweDMsIDAsIF9fS0VSTkVMX0NTKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9zeXN0ZW1fdHJhcF9nYXRlKHVuc2lnbmVkIGludCBuLCB2b2lkICphZGRyKQotewotCUJVR19PTigodW5zaWduZWQpbiA+IDB4RkYpOwotCV9zZXRfZ2F0ZShuLCBHQVRFX1RSQVAsIGFkZHIsIDB4MywgMCwgX19LRVJORUxfQ1MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RyYXBfZ2F0ZSh1bnNpZ25lZCBpbnQgbiwgdm9pZCAqYWRkcikKLXsKLQlCVUdfT04oKHVuc2lnbmVkKW4gPiAweEZGKTsKLQlfc2V0X2dhdGUobiwgR0FURV9UUkFQLCBhZGRyLCAwLCAwLCBfX0tFUk5FTF9DUyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19nYXRlKHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgZ2R0X2VudHJ5KQotewotCUJVR19PTigodW5zaWduZWQpbiA+IDB4RkYpOwotCV9zZXRfZ2F0ZShuLCBHQVRFX1RBU0ssICh2b2lkICopMCwgMCwgMCwgKGdkdF9lbnRyeTw8MykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ludHJfZ2F0ZV9pc3QoaW50IG4sIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGlzdCkKLXsKLQlCVUdfT04oKHVuc2lnbmVkKW4gPiAweEZGKTsKLQlfc2V0X2dhdGUobiwgR0FURV9JTlRFUlJVUFQsIGFkZHIsIDAsIGlzdCwgX19LRVJORUxfQ1MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N5c3RlbV9pbnRyX2dhdGVfaXN0KGludCBuLCB2b2lkICphZGRyLCB1bnNpZ25lZCBpc3QpCi17Ci0JQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7Ci0JX3NldF9nYXRlKG4sIEdBVEVfSU5URVJSVVBULCBhZGRyLCAweDMsIGlzdCwgX19LRVJORUxfQ1MpOwotfQotCi0jZWxzZQotLyoKLSAqIEdFVF9ERVNDX0JBU0UgcmVhZHMgdGhlIGRlc2NyaXB0b3IgYmFzZSBvZiB0aGUgc3BlY2lmaWVkIHNlZ21lbnQuCi0gKgotICogQXJnczoKLSAqICAgIGlkeCAtIGRlc2NyaXB0b3IgaW5kZXgKLSAqICAgIGdkdCAtIEdEVCBwb2ludGVyCi0gKiAgICBiYXNlIC0gMzJiaXQgcmVnaXN0ZXIgdG8gd2hpY2ggdGhlIGJhc2Ugd2lsbCBiZSB3cml0dGVuCi0gKiAgICBsb193IC0gbG8gd29yZCBvZiB0aGUgImJhc2UiIHJlZ2lzdGVyCi0gKiAgICBsb19iIC0gbG8gYnl0ZSBvZiB0aGUgImJhc2UiIHJlZ2lzdGVyCi0gKiAgICBoaV9iIC0gaGkgYnl0ZSBvZiB0aGUgbG93IHdvcmQgb2YgdGhlICJiYXNlIiByZWdpc3RlcgotICoKLSAqIEV4YW1wbGU6Ci0gKiAgICBHRVRfREVTQ19CQVNFKEdEVF9FTlRSWV9FU1BGSVhfU1MsICVlYngsICVlYXgsICVheCwgJWFsLCAlYWgpCi0gKiAgICBXaWxsIHJlYWQgdGhlIGJhc2UgYWRkcmVzcyBvZiBHRFRfRU5UUllfRVNQRklYX1NTIGFuZCBwdXQgaXQgaW50byAlZWF4LgotICovCi0jZGVmaW5lIEdFVF9ERVNDX0JBU0UoaWR4LCBnZHQsIGJhc2UsIGxvX3csIGxvX2IsIGhpX2IpIFwKLQltb3ZiIGlkeCAqIDggKyA0KGdkdCksIGxvX2I7CQkJXAotCW1vdmIgaWR4ICogOCArIDcoZ2R0KSwgaGlfYjsJCQlcCi0Jc2hsbCAkMTYsIGJhc2U7CQkJCQlcCi0JbW92dyBpZHggKiA4ICsgMihnZHQpLCBsb193OwotCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX0RFU0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2Rlc2NfZGVmcy5oIGIvaW5jbHVkZS9hc20teDg2L2Rlc2NfZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODgxZGI2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kZXNjX2RlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qIFdyaXR0ZW4gMjAwMCBieSBBbmRpIEtsZWVuICovCi0jaWZuZGVmIEFTTV9YODZfX0RFU0NfREVGU19ICi0jZGVmaW5lIEFTTV9YODZfX0RFU0NfREVGU19ICi0KLS8qCi0gKiBTZWdtZW50IGRlc2NyaXB0b3Igc3RydWN0dXJlIGRlZmluaXRpb25zLCB1c2FibGUgZnJvbSBib3RoIHg4Nl82NCBhbmQgaTM4NgotICogYXJjaHMuCi0gKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qCi0gKiBGSVhNRTogQWNlc3NpbmcgdGhlIGRlc2Nfc3RydWN0IHRocm91Z2ggaXRzIGZpZWxkcyBpcyBtb3JlIGVsZWdhbnQsCi0gKiBhbmQgc2hvdWxkIGJlIHRoZSBvbmUgdmFsaWQgdGhpbmcgdG8gZG8uIEhvd2V2ZXIsIGEgbG90IG9mIG9wZW4gY29kZQotICogc3RpbGwgdG91Y2hlcyB0aGUgYSBhbmQgYiBhY2Vzc29ycywgYW5kIGRvaW5nIHRoaXMgYWxsb3cgdXMgdG8gZG8gaXQKLSAqIGluY3JlbWVudGFsbHkuIFdlIGtlZXAgdGhlIHNpZ25hdHVyZSBhcyBhIHN0cnVjdCwgcmF0aGVyIHRoYW4gYW4gdW5pb24sCi0gKiBzbyB3ZSBjYW4gZ2V0IHJpZCBvZiBpdCB0cmFuc3BhcmVudGx5IGluIHRoZSBmdXR1cmUgLS0gZ2xvbW1lcgotICovCi0vKiA4IGJ5dGUgc2VnbWVudCBkZXNjcmlwdG9yICovCi1zdHJ1Y3QgZGVzY19zdHJ1Y3QgewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGludCBhOwotCQkJdW5zaWduZWQgaW50IGI7Ci0JCX07Ci0JCXN0cnVjdCB7Ci0JCQl1MTYgbGltaXQwOwotCQkJdTE2IGJhc2UwOwotCQkJdW5zaWduZWQgYmFzZTE6IDgsIHR5cGU6IDQsIHM6IDEsIGRwbDogMiwgcDogMTsKLQkJCXVuc2lnbmVkIGxpbWl0OiA0LCBhdmw6IDEsIGw6IDEsIGQ6IDEsIGc6IDEsIGJhc2UyOiA4OwotCQl9OwotCX07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1lbnVtIHsKLQlHQVRFX0lOVEVSUlVQVCA9IDB4RSwKLQlHQVRFX1RSQVAgPSAweEYsCi0JR0FURV9DQUxMID0gMHhDLAotCUdBVEVfVEFTSyA9IDB4NSwKLX07Ci0KLS8qIDE2Ynl0ZSBnYXRlICovCi1zdHJ1Y3QgZ2F0ZV9zdHJ1Y3Q2NCB7Ci0JdTE2IG9mZnNldF9sb3c7Ci0JdTE2IHNlZ21lbnQ7Ci0JdW5zaWduZWQgaXN0IDogMywgemVybzAgOiA1LCB0eXBlIDogNSwgZHBsIDogMiwgcCA6IDE7Ci0JdTE2IG9mZnNldF9taWRkbGU7Ci0JdTMyIG9mZnNldF9oaWdoOwotCXUzMiB6ZXJvMTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLSNkZWZpbmUgUFRSX0xPVyh4KSAoKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkgJiAweEZGRkYpCi0jZGVmaW5lIFBUUl9NSURETEUoeCkgKCgodW5zaWduZWQgbG9uZyBsb25nKSh4KSA+PiAxNikgJiAweEZGRkYpCi0jZGVmaW5lIFBUUl9ISUdIKHgpICgodW5zaWduZWQgbG9uZyBsb25nKSh4KSA+PiAzMikKLQotZW51bSB7Ci0JREVTQ19UU1MgPSAweDksCi0JREVTQ19MRFQgPSAweDIsCi0JREVTQ1RZUEVfUyA9IDB4MTAsCS8qICFzeXN0ZW0gKi8KLX07Ci0KLS8qIExEVCBvciBUU1MgZGVzY3JpcHRvciBpbiB0aGUgR0RULiAxNiBieXRlcy4gKi8KLXN0cnVjdCBsZHR0c3NfZGVzYzY0IHsKLQl1MTYgbGltaXQwOwotCXUxNiBiYXNlMDsKLQl1bnNpZ25lZCBiYXNlMSA6IDgsIHR5cGUgOiA1LCBkcGwgOiAyLCBwIDogMTsKLQl1bnNpZ25lZCBsaW1pdDEgOiA0LCB6ZXJvMCA6IDMsIGcgOiAxLCBiYXNlMiA6IDg7Ci0JdTMyIGJhc2UzOwotCXUzMiB6ZXJvMTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci10eXBlZGVmIHN0cnVjdCBnYXRlX3N0cnVjdDY0IGdhdGVfZGVzYzsKLXR5cGVkZWYgc3RydWN0IGxkdHRzc19kZXNjNjQgbGR0X2Rlc2M7Ci10eXBlZGVmIHN0cnVjdCBsZHR0c3NfZGVzYzY0IHRzc19kZXNjOwotI2RlZmluZSBnYXRlX29mZnNldChnKSAoKGcpLm9mZnNldF9sb3cgfCAoKHVuc2lnbmVkIGxvbmcpKGcpLm9mZnNldF9taWRkbGUgPDwgMTYpIHwgKCh1bnNpZ25lZCBsb25nKShnKS5vZmZzZXRfaGlnaCA8PCAzMikpCi0jZGVmaW5lIGdhdGVfc2VnbWVudChnKSAoKGcpLnNlZ21lbnQpCi0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgZGVzY19zdHJ1Y3QgZ2F0ZV9kZXNjOwotdHlwZWRlZiBzdHJ1Y3QgZGVzY19zdHJ1Y3QgbGR0X2Rlc2M7Ci10eXBlZGVmIHN0cnVjdCBkZXNjX3N0cnVjdCB0c3NfZGVzYzsKLSNkZWZpbmUgZ2F0ZV9vZmZzZXQoZykJCSgoKGcpLmIgJiAweGZmZmYwMDAwKSB8ICgoZykuYSAmIDB4MDAwMGZmZmYpKQotI2RlZmluZSBnYXRlX3NlZ21lbnQoZykJCSgoZykuYSA+PiAxNikKLSNlbmRpZgotCi1zdHJ1Y3QgZGVzY19wdHIgewotCXVuc2lnbmVkIHNob3J0IHNpemU7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7Ci0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19ERVNDX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RldmljZS5oIGIvaW5jbHVkZS9hc20teDg2L2RldmljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmVjZTA0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kZXZpY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fREVWSUNFX0gKLSNkZWZpbmUgQVNNX1g4Nl9fREVWSUNFX0gKLQotc3RydWN0IGRldl9hcmNoZGF0YSB7Ci0jaWZkZWYgQ09ORklHX0FDUEkKLQl2b2lkCSphY3BpX2hhbmRsZTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfNjQKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHM7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRE1BUgotCXZvaWQgKmlvbW11OyAvKiBob29rIGZvciBJT01NVSBzcGVjaWZpYyBleHRlbnNpb24gKi8KLSNlbmRpZgotfTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9kaXY2NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTUzMGYyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kaXY2NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19ESVY2NF9ICi0jZGVmaW5lIEFTTV9YODZfX0RJVjY0X0gKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qCi0gKiBkb19kaXYoKSBpcyBOT1QgYSBDIGZ1bmN0aW9uLiBJdCB3YW50cyB0byByZXR1cm4KLSAqIHR3byB2YWx1ZXMgKHRoZSBxdW90aWVudCBhbmQgdGhlIHJlbWFpbmRlciksIGJ1dAotICogc2luY2UgdGhhdCBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIGluIEMsIHdoYXQgaXQKLSAqIGRvZXMgaXM6Ci0gKgotICogLSBtb2RpZmllcyB0aGUgNjQtYml0IGRpdmlkZW5kIF9pbl9wbGFjZV8KLSAqIC0gcmV0dXJucyB0aGUgMzItYml0IHJlbWFpbmRlcgotICoKLSAqIFRoaXMgZW5kcyB1cCBiZWluZyB0aGUgbW9zdCBlZmZpY2llbnQgImNhbGxpbmcKLSAqIGNvbnZlbnRpb24iIG9uIHg4Ni4KLSAqLwotI2RlZmluZSBkb19kaXYobiwgYmFzZSkJCQkJCQlcCi0oewkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX191cHBlciwgX19sb3csIF9faGlnaCwgX19tb2QsIF9fYmFzZTsJXAotCV9fYmFzZSA9IChiYXNlKTsJCQkJCVwKLQlhc20oIiI6Ij1hIiAoX19sb3cpLCAiPWQiIChfX2hpZ2gpIDogIkEiIChuKSk7CQlcCi0JX191cHBlciA9IF9faGlnaDsJCQkJCVwKLQlpZiAoX19oaWdoKSB7CQkJCQkJXAotCQlfX3VwcGVyID0gX19oaWdoICUgKF9fYmFzZSk7CQkJXAotCQlfX2hpZ2ggPSBfX2hpZ2ggLyAoX19iYXNlKTsJCQlcCi0JfQkJCQkJCQlcCi0JYXNtKCJkaXZsICUyIjoiPWEiIChfX2xvdyksICI9ZCIgKF9fbW9kKQkJXAotCSAgICA6ICJybSIgKF9fYmFzZSksICIwIiAoX19sb3cpLCAiMSIgKF9fdXBwZXIpKTsJXAotCWFzbSgiIjoiPUEiIChuKSA6ICJhIiAoX19sb3cpLCAiZCIgKF9faGlnaCkpOwkJXAotCV9fbW9kOwkJCQkJCQlcCi19KQotCi1zdGF0aWMgaW5saW5lIHU2NCBkaXZfdTY0X3JlbSh1NjQgZGl2aWRlbmQsIHUzMiBkaXZpc29yLCB1MzIgKnJlbWFpbmRlcikKLXsKLQl1bmlvbiB7Ci0JCXU2NCB2NjQ7Ci0JCXUzMiB2MzJbMl07Ci0JfSBkID0geyBkaXZpZGVuZCB9OwotCXUzMiB1cHBlcjsKLQotCXVwcGVyID0gZC52MzJbMV07Ci0JZC52MzJbMV0gPSAwOwotCWlmICh1cHBlciA+PSBkaXZpc29yKSB7Ci0JCWQudjMyWzFdID0gdXBwZXIgLyBkaXZpc29yOwotCQl1cHBlciAlPSBkaXZpc29yOwotCX0KLQlhc20gKCJkaXZsICUyIiA6ICI9YSIgKGQudjMyWzBdKSwgIj1kIiAoKnJlbWFpbmRlcikgOgotCQkicm0iIChkaXZpc29yKSwgIjAiIChkLnYzMlswXSksICIxIiAodXBwZXIpKTsKLQlyZXR1cm4gZC52NjQ7Ci19Ci0jZGVmaW5lIGRpdl91NjRfcmVtCWRpdl91NjRfcmVtCi0KLSNlbHNlCi0jIGluY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fRElWNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5YzMzZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0RNQV9NQVBQSU5HX0gKLSNkZWZpbmUgQVNNX1g4Nl9fRE1BX01BUFBJTkdfSAotCi0vKgotICogSU9NTVUgaW50ZXJmYWNlLiBTZWUgRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQgYW5kIERNQS1BUEkudHh0IGZvcgotICogZG9jdW1lbnRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oPgotCi1leHRlcm4gZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3M7Ci1leHRlcm4gaW50IGlvbW11X21lcmdlOwotZXh0ZXJuIHN0cnVjdCBkZXZpY2UgeDg2X2RtYV9mYWxsYmFja19kZXY7Ci1leHRlcm4gaW50IHBhbmljX29uX292ZXJmbG93OwotCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHsKLQlpbnQgICAgICAgICAgICAgKCptYXBwaW5nX2Vycm9yKShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSBkbWFfYWRkcl90IGRtYV9hZGRyKTsKLQl2b2lkKiAgICAgICAgICAgKCphbGxvY19jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApOwotCXZvaWQgICAgICAgICAgICAoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7Ci0JZG1hX2FkZHJfdCAgICAgICgqbWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqaHdkZXYsIHBoeXNfYWRkcl90IHB0ciwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2dfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NnX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0JaW50ICAgICAgICAgICAgICgqbWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnVubWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0JaW50ICAgICAgICAgICAgICgqZG1hX3N1cHBvcnRlZCkoc3RydWN0IGRldmljZSAqaHdkZXYsIHU2NCBtYXNrKTsKLQlpbnQJCWlzX3BoeXM7Ci19OwotCi1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXJldHVybiBkbWFfb3BzOwotI2Vsc2UKLQlpZiAodW5saWtlbHkoIWRldikgfHwgIWRldi0+YXJjaGRhdGEuZG1hX29wcykKLQkJcmV0dXJuIGRtYV9vcHM7Ci0JZWxzZQotCQlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfb3BzOwotI2VuZGlmIC8qIEFTTV9YODZfX0RNQV9NQVBQSU5HX0ggKi8KLX0KLQotLyogTWFrZSBzdXJlIHdlIGtlZXAgdGhlIHNhbWUgYmVoYXZpb3VyICovCi1zdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXJldHVybiAwOwotI2Vsc2UKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwotCWlmIChvcHMtPm1hcHBpbmdfZXJyb3IpCi0JCXJldHVybiBvcHMtPm1hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcik7Ci0KLQlyZXR1cm4gKGRtYV9hZGRyID09IGJhZF9kbWFfYWRkcmVzcyk7Ci0jZW5kaWYKLX0KLQotI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCi0jZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCi0jZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpCSgxKQotCi1leHRlcm4gaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqaHdkZXYsIHU2NCBtYXNrKTsKLWV4dGVybiBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwotCi1leHRlcm4gdm9pZCAqZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkJZG1hX2FkZHJfdCAqZG1hX2FkZHIsIGdmcF90IGZsYWcpOwotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotCSAgICAgICBpbnQgZGlyZWN0aW9uKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gb3BzLT5tYXBfc2luZ2xlKGh3ZGV2LCB2aXJ0X3RvX3BoeXMocHRyKSwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSwKLQkJIGludCBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlpZiAob3BzLT51bm1hcF9zaW5nbGUpCi0JCW9wcy0+dW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gb3BzLT5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkgICAgIGludCBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOwotCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCWlmIChvcHMtPnVubWFwX3NnKQotCQlvcHMtPnVubWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlpZiAob3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KQotCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7Ci0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7Ci0KLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JaWYgKG9wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZSkKLQkJb3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24pOwotCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlpZiAob3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KQotCQlvcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCwKLQkJCQkJICAgICAgIHNpemUsIGRpcmVjdGlvbik7Ci0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkgaW50IGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7Ci0KLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JaWYgKG9wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkKLQkJb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLAotCQkJCQkJICBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7Ci0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlpZiAob3BzLT5zeW5jX3NnX2Zvcl9jcHUpCi0JCW9wcy0+c3luY19zZ19mb3JfY3B1KGh3ZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOwotCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7Ci0KLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JaWYgKG9wcy0+c3luY19zZ19mb3JfZGV2aWNlKQotCQlvcHMtPnN5bmNfc2dfZm9yX2RldmljZShod2Rldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKLQotCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCSAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSAgICAgIGludCBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gb3BzLT5tYXBfc2luZ2xlKGRldiwgcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0LAotCQkJICAgICAgIHNpemUsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKLQkJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAotCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCi17Ci0JLyogbm8gZWFzeSB3YXkgdG8gZ2V0IGNhY2hlIHNpemUgb24gYWxsIHg4Niwgc28gcmV0dXJuIHRoZQotCSAqIG1heGltdW0gcG9zc2libGUsIHRvIGJlIHNhZmUgKi8KLQlyZXR1cm4gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZG1hX2FsbG9jX2NvaGVyZW50X21hc2soc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJICAgIGdmcF90IGdmcCkKLXsKLQl1bnNpZ25lZCBsb25nIGRtYV9tYXNrID0gMDsKLQotCWRtYV9tYXNrID0gZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKLQlpZiAoIWRtYV9tYXNrKQotCQlkbWFfbWFzayA9IChnZnAgJiBHRlBfRE1BKSA/IERNQV8yNEJJVF9NQVNLIDogRE1BXzMyQklUX01BU0s7Ci0KLQlyZXR1cm4gZG1hX21hc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2ZwX3QgZG1hX2FsbG9jX2NvaGVyZW50X2dmcF9mbGFncyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGdmcF90IGdmcCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JdW5zaWduZWQgbG9uZyBkbWFfbWFzayA9IGRtYV9hbGxvY19jb2hlcmVudF9tYXNrKGRldiwgZ2ZwKTsKLQotCWlmIChkbWFfbWFzayA8PSBETUFfMzJCSVRfTUFTSyAmJiAhKGdmcCAmIEdGUF9ETUEpKQotCQlnZnAgfD0gR0ZQX0RNQTMyOwotI2VuZGlmCi0gICAgICAgcmV0dXJuIGdmcDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICoKLWRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAotCQlnZnBfdCBnZnApCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKLQl2b2lkICptZW1vcnk7Ci0KLQlnZnAgJj0gfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfRE1BMzIpOwotCi0JaWYgKGRtYV9hbGxvY19mcm9tX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgJm1lbW9yeSkpCi0JCXJldHVybiBtZW1vcnk7Ci0KLQlpZiAoIWRldikgewotCQlkZXYgPSAmeDg2X2RtYV9mYWxsYmFja19kZXY7Ci0JCWdmcCB8PSBHRlBfRE1BOwotCX0KLQotCWlmICghaXNfZGV2aWNlX2RtYV9jYXBhYmxlKGRldikpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCFvcHMtPmFsbG9jX2NvaGVyZW50KQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBvcHMtPmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwKLQkJCQkgICBkbWFfYWxsb2NfY29oZXJlbnRfZ2ZwX2ZsYWdzKGRldiwgZ2ZwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgYnVzKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7Ci0KLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7ICAgICAgIC8qIGZvciBwb3J0YWJpbGl0eSAqLwotCi0JaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBnZXRfb3JkZXIoc2l6ZSksIHZhZGRyKSkKLQkJcmV0dXJuOwotCi0JaWYgKG9wcy0+ZnJlZV9jb2hlcmVudCkKLQkJb3BzLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGJ1cyk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RtYS5oIGIvaW5jbHVkZS9hc20teDg2L2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWY3YTRlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxOCArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20vZG1hLmg6IERlZmluZXMgZm9yIHVzaW5nIGFuZCBhbGxvY2F0aW5nIGRtYSBjaGFubmVscy4KLSAqIFdyaXR0ZW4gYnkgSGVubnVzIEJlcmdtYW4sIDE5OTIuCi0gKiBIaWdoIERNQSBjaGFubmVsIHN1cHBvcnQgJiBpbmZvIGJ5IEhhbm51IFNhdm9sYWluZW4KLSAqIGFuZCBKb2huIEJveWQsIE5vdi4gMTk5Mi4KLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX0RNQV9ICi0jZGVmaW5lIEFTTV9YODZfX0RNQV9ICi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkvKiBBbmQgc3BpbmxvY2tzICovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaWZkZWYgSEFWRV9SRUFMTFlfU0xPV19ETUFfQ09OVFJPTExFUgotI2RlZmluZSBkbWFfb3V0YglvdXRiX3AKLSNlbHNlCi0jZGVmaW5lIGRtYV9vdXRiCW91dGIKLSNlbmRpZgotCi0jZGVmaW5lIGRtYV9pbmIJCWluYgotCi0vKgotICogTk9URVMgYWJvdXQgRE1BIHRyYW5zZmVyczoKLSAqCi0gKiAgY29udHJvbGxlciAxOiBjaGFubmVscyAwLTMsIGJ5dGUgb3BlcmF0aW9ucywgcG9ydHMgMDAtMUYKLSAqICBjb250cm9sbGVyIDI6IGNoYW5uZWxzIDQtNywgd29yZCBvcGVyYXRpb25zLCBwb3J0cyBDMC1ERgotICoKLSAqICAtIEFMTCByZWdpc3RlcnMgYXJlIDggYml0cyBvbmx5LCByZWdhcmRsZXNzIG9mIHRyYW5zZmVyIHNpemUKLSAqICAtIGNoYW5uZWwgNCBpcyBub3QgdXNlZCAtIGNhc2NhZGVzIDEgaW50byAyLgotICogIC0gY2hhbm5lbHMgMC0zIGFyZSBieXRlIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIGJ5dGVzCi0gKiAgLSBjaGFubmVscyA1LTcgYXJlIHdvcmQgLSBhZGRyZXNzZXMvY291bnRzIGFyZSBmb3IgcGh5c2ljYWwgd29yZHMKLSAqICAtIHRyYW5zZmVycyBtdXN0IG5vdCBjcm9zcyBwaHlzaWNhbCA2NEsgKDAtMykgb3IgMTI4SyAoNS03KSBib3VuZGFyaWVzCi0gKiAgLSB0cmFuc2ZlciBjb3VudCBsb2FkZWQgdG8gcmVnaXN0ZXJzIGlzIDEgbGVzcyB0aGFuIGFjdHVhbCBjb3VudAotICogIC0gY29udHJvbGxlciAyIG9mZnNldHMgYXJlIGFsbCBldmVuICgyeCBvZmZzZXRzIGZvciBjb250cm9sbGVyIDEpCi0gKiAgLSBwYWdlIHJlZ2lzdGVycyBmb3IgNS03IGRvbid0IHVzZSBkYXRhIGJpdCAwLCByZXByZXNlbnQgMTI4SyBwYWdlcwotICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDAtMyB1c2UgYml0IDAsIHJlcHJlc2VudCA2NEsgcGFnZXMKLSAqCi0gKiBETUEgdHJhbnNmZXJzIGFyZSBsaW1pdGVkIHRvIHRoZSBsb3dlciAxNk1CIG9mIF9waHlzaWNhbF8gbWVtb3J5LgotICogTm90ZSB0aGF0IGFkZHJlc3NlcyBsb2FkZWQgaW50byByZWdpc3RlcnMgbXVzdCBiZSBfcGh5c2ljYWxfIGFkZHJlc3NlcywKLSAqIG5vdCBsb2dpY2FsIGFkZHJlc3NlcyAod2hpY2ggbWF5IGRpZmZlciBpZiBwYWdpbmcgaXMgYWN0aXZlKS4KLSAqCi0gKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyAwLTM6Ci0gKgotICogICBBMjMgLi4uIEExNiBBMTUgLi4uIEE4ICBBNyAuLi4gQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKLSAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKLSAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKLSAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKLSAqICAgUDcgIC4uLiAgUDAgIEE3IC4uLiBBMCAgQTcgLi4uIEEwCi0gKiB8ICAgIFBhZ2UgICAgfCBBZGRyIE1TQiB8IEFkZHIgTFNCIHwgICAoRE1BIHJlZ2lzdGVycykKLSAqCi0gKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyA1LTc6Ci0gKgotICogICBBMjMgLi4uIEExNyBBMTYgQTE1IC4uLiBBOSBBOCBBNyAuLi4gQTEgQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKLSAqICAgIHwgIC4uLiAgfCAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICBcCi0gKiAgICB8ICAuLi4gIHwgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwgIChub3QgdXNlZCkKLSAqICAgIHwgIC4uLiAgfCAgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwKLSAqICAgUDcgIC4uLiAgUDEgKDApIEE3IEE2ICAuLi4gQTAgQTcgQTYgLi4uIEEwCi0gKiB8ICAgICAgUGFnZSAgICAgIHwgIEFkZHIgTVNCICAgfCAgQWRkciBMU0IgIHwgICAoRE1BIHJlZ2lzdGVycykKLSAqCi0gKiBBZ2FpbiwgY2hhbm5lbHMgNS03IHRyYW5zZmVyIF9waHlzaWNhbF8gd29yZHMgKDE2IGJpdHMpLCBzbyBhZGRyZXNzZXMKLSAqIGFuZCBjb3VudHMgX211c3RfIGJlIHdvcmQtYWxpZ25lZCAodGhlIGxvd2VzdCBhZGRyZXNzIGJpdCBpcyBfaWdub3JlZF8gYXQKLSAqIHRoZSBoYXJkd2FyZSBsZXZlbCwgc28gb2RkLWJ5dGUgdHJhbnNmZXJzIGFyZW4ndCBwb3NzaWJsZSkuCi0gKgotICogVHJhbnNmZXIgY291bnQgKF9ub3QgIyBieXRlc18pIGlzIGxpbWl0ZWQgdG8gNjRLLCByZXByZXNlbnRlZCBhcyBhY3R1YWwKLSAqIGNvdW50IC0gMSA6IDY0SyA9PiAweEZGRkYsIDEgPT4gMHgwMDAwLiAgVGh1cywgY291bnQgaXMgYWx3YXlzIDEgb3IgbW9yZSwKLSAqIGFuZCB1cCB0byAxMjhLIGJ5dGVzIG1heSBiZSB0cmFuc2ZlcnJlZCBvbiBjaGFubmVscyA1LTcgaW4gb25lIG9wZXJhdGlvbi4KLSAqCi0gKi8KLQotI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQotLyogVGhlIG1heGltdW0gYWRkcmVzcyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgRE1BIHRyYW5zZmVyIHRvIG9uIHRoaXMgcGxhdGZvcm0gKi8KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwKQotCi0jZWxzZQotCi0vKiAxNk1CIElTQSBETUEgem9uZSAqLwotI2RlZmluZSBNQVhfRE1BX1BGTiAgICgoMTYgKiAxMDI0ICogMTAyNCkgPj4gUEFHRV9TSElGVCkKLQotLyogNEdCIGJyb2tlbiBQQ0kvQUdQIGhhcmR3YXJlIGJ1cyBtYXN0ZXIgem9uZSAqLwotI2RlZmluZSBNQVhfRE1BMzJfUEZOICgoNFVMICogMTAyNCAqIDEwMjQgKiAxMDI0KSA+PiBQQUdFX1NISUZUKQotCi0vKiBDb21wYXQgZGVmaW5lIGZvciBvbGQgZG1hIHpvbmUgKi8KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICgodW5zaWduZWQgbG9uZylfX3ZhKE1BWF9ETUFfUEZOIDw8IFBBR0VfU0hJRlQpKQotCi0jZW5kaWYKLQotLyogODIzNyBETUEgY29udHJvbGxlcnMgKi8KLSNkZWZpbmUgSU9fRE1BMV9CQVNFCTB4MDAJLyogOCBiaXQgc2xhdmUgRE1BLCBjaGFubmVscyAwLi4zICovCi0jZGVmaW5lIElPX0RNQTJfQkFTRQkweEMwCS8qIDE2IGJpdCBtYXN0ZXIgRE1BLCBjaCA0KD1zbGF2ZSBpbnB1dCkuLjcgKi8KLQotLyogRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0jZGVmaW5lIERNQTFfQ01EX1JFRwkJMHgwOAkvKiBjb21tYW5kIHJlZ2lzdGVyICh3KSAqLwotI2RlZmluZSBETUExX1NUQVRfUkVHCQkweDA4CS8qIHN0YXR1cyByZWdpc3RlciAocikgKi8KLSNkZWZpbmUgRE1BMV9SRVFfUkVHCQkweDA5ICAgIC8qIHJlcXVlc3QgcmVnaXN0ZXIgKHcpICovCi0jZGVmaW5lIERNQTFfTUFTS19SRUcJCTB4MEEJLyogc2luZ2xlLWNoYW5uZWwgbWFzayAodykgKi8KLSNkZWZpbmUgRE1BMV9NT0RFX1JFRwkJMHgwQgkvKiBtb2RlIHJlZ2lzdGVyICh3KSAqLwotI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRwkweDBDCS8qIGNsZWFyIHBvaW50ZXIgZmxpcC1mbG9wICh3KSAqLwotI2RlZmluZSBETUExX1RFTVBfUkVHCQkweDBEICAgIC8qIFRlbXBvcmFyeSBSZWdpc3RlciAocikgKi8KLSNkZWZpbmUgRE1BMV9SRVNFVF9SRUcJCTB4MEQJLyogTWFzdGVyIENsZWFyICh3KSAqLwotI2RlZmluZSBETUExX0NMUl9NQVNLX1JFRyAgICAgICAweDBFICAgIC8qIENsZWFyIE1hc2sgKi8KLSNkZWZpbmUgRE1BMV9NQVNLX0FMTF9SRUcgICAgICAgMHgwRiAgICAvKiBhbGwtY2hhbm5lbHMgbWFzayAodykgKi8KLQotI2RlZmluZSBETUEyX0NNRF9SRUcJCTB4RDAJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KLSNkZWZpbmUgRE1BMl9TVEFUX1JFRwkJMHhEMAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCi0jZGVmaW5lIERNQTJfUkVRX1JFRwkJMHhEMiAgICAvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLwotI2RlZmluZSBETUEyX01BU0tfUkVHCQkweEQ0CS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCi0jZGVmaW5lIERNQTJfTU9ERV9SRUcJCTB4RDYJLyogbW9kZSByZWdpc3RlciAodykgKi8KLSNkZWZpbmUgRE1BMl9DTEVBUl9GRl9SRUcJMHhEOAkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KLSNkZWZpbmUgRE1BMl9URU1QX1JFRwkJMHhEQSAgICAvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCi0jZGVmaW5lIERNQTJfUkVTRVRfUkVHCQkweERBCS8qIE1hc3RlciBDbGVhciAodykgKi8KLSNkZWZpbmUgRE1BMl9DTFJfTUFTS19SRUcgICAgICAgMHhEQyAgICAvKiBDbGVhciBNYXNrICovCi0jZGVmaW5lIERNQTJfTUFTS19BTExfUkVHICAgICAgIDB4REUgICAgLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCi0KLSNkZWZpbmUgRE1BX0FERFJfMAkJMHgwMCAgICAvKiBETUEgYWRkcmVzcyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgRE1BX0FERFJfMQkJMHgwMgotI2RlZmluZSBETUFfQUREUl8yCQkweDA0Ci0jZGVmaW5lIERNQV9BRERSXzMJCTB4MDYKLSNkZWZpbmUgRE1BX0FERFJfNAkJMHhDMAotI2RlZmluZSBETUFfQUREUl81CQkweEM0Ci0jZGVmaW5lIERNQV9BRERSXzYJCTB4QzgKLSNkZWZpbmUgRE1BX0FERFJfNwkJMHhDQwotCi0jZGVmaW5lIERNQV9DTlRfMAkJMHgwMSAgICAvKiBETUEgY291bnQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIERNQV9DTlRfMQkJMHgwMwotI2RlZmluZSBETUFfQ05UXzIJCTB4MDUKLSNkZWZpbmUgRE1BX0NOVF8zCQkweDA3Ci0jZGVmaW5lIERNQV9DTlRfNAkJMHhDMgotI2RlZmluZSBETUFfQ05UXzUJCTB4QzYKLSNkZWZpbmUgRE1BX0NOVF82CQkweENBCi0jZGVmaW5lIERNQV9DTlRfNwkJMHhDRQotCi0jZGVmaW5lIERNQV9QQUdFXzAJCTB4ODcgICAgLyogRE1BIHBhZ2UgcmVnaXN0ZXJzICovCi0jZGVmaW5lIERNQV9QQUdFXzEJCTB4ODMKLSNkZWZpbmUgRE1BX1BBR0VfMgkJMHg4MQotI2RlZmluZSBETUFfUEFHRV8zCQkweDgyCi0jZGVmaW5lIERNQV9QQUdFXzUJCTB4OEIKLSNkZWZpbmUgRE1BX1BBR0VfNgkJMHg4OQotI2RlZmluZSBETUFfUEFHRV83CQkweDhBCi0KLS8qIEkvTyB0byBtZW1vcnksIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCi0jZGVmaW5lIERNQV9NT0RFX1JFQUQJCTB4NDQKLS8qIG1lbW9yeSB0byBJL08sIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCi0jZGVmaW5lIERNQV9NT0RFX1dSSVRFCQkweDQ4Ci0vKiBwYXNzIHRocnUgRFJFUS0+SFJRLCBEQUNLPC1ITERBIG9ubHkgKi8KLSNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERQkweEMwCi0KLSNkZWZpbmUgRE1BX0FVVE9JTklUCQkweDEwCi0KLQotZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi0vKiBlbmFibGUvZGlzYWJsZSBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCi17Ci0JaWYgKGRtYW5yIDw9IDMpCi0JCWRtYV9vdXRiKGRtYW5yLCBETUExX01BU0tfUkVHKTsKLQllbHNlCi0JCWRtYV9vdXRiKGRtYW5yICYgMywgRE1BMl9NQVNLX1JFRyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCi17Ci0JaWYgKGRtYW5yIDw9IDMpCi0JCWRtYV9vdXRiKGRtYW5yIHwgNCwgRE1BMV9NQVNLX1JFRyk7Ci0JZWxzZQotCQlkbWFfb3V0YigoZG1hbnIgJiAzKSB8IDQsIERNQTJfTUFTS19SRUcpOwotfQotCi0vKiBDbGVhciB0aGUgJ0RNQSBQb2ludGVyIEZsaXAgRmxvcCcuCi0gKiBXcml0ZSAwIGZvciBMU0IvTVNCLCAxIGZvciBNU0IvTFNCIGFjY2Vzcy4KLSAqIFVzZSB0aGlzIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgRkYgdG8gYSBrbm93biBzdGF0ZS4KLSAqIEFmdGVyIHRoYXQsIGtlZXAgdHJhY2sgb2YgaXQuIDotKQotICogLS0tIEluIG9yZGVyIHRvIGRvIHRoYXQsIHRoZSBETUEgcm91dGluZXMgYmVsb3cgc2hvdWxkIC0tLQotICogLS0tIG9ubHkgYmUgdXNlZCB3aGlsZSBob2xkaW5nIHRoZSBETUEgbG9jayAhIC0tLQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZG1hX2ZmKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQlpZiAoZG1hbnIgPD0gMykKLQkJZG1hX291dGIoMCwgRE1BMV9DTEVBUl9GRl9SRUcpOwotCWVsc2UKLQkJZG1hX291dGIoMCwgRE1BMl9DTEVBUl9GRl9SRUcpOwotfQotCi0vKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBtb2RlKQotewotCWlmIChkbWFuciA8PSAzKQotCQlkbWFfb3V0Yihtb2RlIHwgZG1hbnIsIERNQTFfTU9ERV9SRUcpOwotCWVsc2UKLQkJZG1hX291dGIobW9kZSB8IChkbWFuciAmIDMpLCBETUEyX01PREVfUkVHKTsKLX0KLQotLyogU2V0IG9ubHkgdGhlIHBhZ2UgcmVnaXN0ZXIgYml0cyBvZiB0aGUgdHJhbnNmZXIgYWRkcmVzcy4KLSAqIFRoaXMgaXMgdXNlZCBmb3Igc3VjY2Vzc2l2ZSB0cmFuc2ZlcnMgd2hlbiB3ZSBrbm93IHRoZSBjb250ZW50cyBvZgotICogdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIERNQSBjdXJyZW50IGFkZHJlc3MgcmVnaXN0ZXIsIGJ1dCBhIDY0ayBib3VuZGFyeQotICogbWF5IGhhdmUgYmVlbiBjcm9zc2VkLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBwYWdlbnIpCi17Ci0Jc3dpdGNoIChkbWFucikgewotCWNhc2UgMDoKLQkJZG1hX291dGIocGFnZW5yLCBETUFfUEFHRV8wKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWRtYV9vdXRiKHBhZ2VuciwgRE1BX1BBR0VfMik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJZG1hX291dGIocGFnZW5yLCBETUFfUEFHRV8zKTsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQlkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfUEFHRV81KTsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQlkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfUEFHRV82KTsKLQkJYnJlYWs7Ci0JY2FzZSA3OgotCQlkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfUEFHRV83KTsKLQkJYnJlYWs7Ci0JfQotfQotCi0KLS8qIFNldCB0cmFuc2ZlciBhZGRyZXNzICYgcGFnZSBiaXRzIGZvciBzcGVjaWZpYyBETUEgY2hhbm5lbC4KLSAqIEFzc3VtZXMgZG1hIGZsaXBmbG9wIGlzIGNsZWFyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCi17Ci0Jc2V0X2RtYV9wYWdlKGRtYW5yLCBhPj4xNik7Ci0JaWYgKGRtYW5yIDw9IDMpICB7Ci0JCWRtYV9vdXRiKGEgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMSkgKyBJT19ETUExX0JBU0UpOwotCQlkbWFfb3V0YigoYSA+PiA4KSAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAxKSArIElPX0RNQTFfQkFTRSk7Ci0JfSAgZWxzZSAgewotCQlkbWFfb3V0YigoYSA+PiAxKSAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAyKSArIElPX0RNQTJfQkFTRSk7Ci0JCWRtYV9vdXRiKChhID4+IDkpICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDIpICsgSU9fRE1BMl9CQVNFKTsKLQl9Ci19Ci0KLQotLyogU2V0IHRyYW5zZmVyIHNpemUgKG1heCA2NGsgZm9yIERNQTAuLjMsIDEyOGsgZm9yIERNQTUuLjcpIGZvcgotICogYSBzcGVjaWZpYyBETUEgY2hhbm5lbC4KLSAqIFlvdSBtdXN0IGVuc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQuCi0gKiBOT1RFOiBmcm9tIGEgbWFudWFsOiAidGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgaXMgb25lIG1vcmUKLSAqIHRoYW4gdGhlIGluaXRpYWwgd29yZCBjb3VudCIhIFRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50LgotICogQXNzdW1lcyBkbWEgZmxpcC1mbG9wIGlzIGNsZWFyLgotICogTk9URSAyOiAiY291bnQiIHJlcHJlc2VudHMgX2J5dGVzXyBhbmQgbXVzdCBiZSBldmVuIGZvciBjaGFubmVscyA1LTcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQotewotCWNvdW50LS07Ci0JaWYgKGRtYW5yIDw9IDMpICB7Ci0JCWRtYV9vdXRiKGNvdW50ICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDEpICsgMSArIElPX0RNQTFfQkFTRSk7Ci0JCWRtYV9vdXRiKChjb3VudCA+PiA4KSAmIDB4ZmYsCi0JCQkgKChkbWFuciAmIDMpIDw8IDEpICsgMSArIElPX0RNQTFfQkFTRSk7Ci0JfSBlbHNlIHsKLQkJZG1hX291dGIoKGNvdW50ID4+IDEpICYgMHhmZiwKLQkJCSAoKGRtYW5yICYgMykgPDwgMikgKyAyICsgSU9fRE1BMl9CQVNFKTsKLQkJZG1hX291dGIoKGNvdW50ID4+IDkpICYgMHhmZiwKLQkJCSAoKGRtYW5yICYgMykgPDwgMikgKyAyICsgSU9fRE1BMl9CQVNFKTsKLQl9Ci19Ci0KLQotLyogR2V0IERNQSByZXNpZHVlIGNvdW50LiBBZnRlciBhIERNQSB0cmFuc2ZlciwgdGhpcwotICogc2hvdWxkIHJldHVybiB6ZXJvLiBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMKLSAqIHN0aWxsIGluIHByb2dyZXNzIHdpbGwgcmV0dXJuIHVucHJlZGljdGFibGUgcmVzdWx0cy4KLSAqIElmIGNhbGxlZCBiZWZvcmUgdGhlIGNoYW5uZWwgaGFzIGJlZW4gdXNlZCwgaXQgbWF5IHJldHVybiAxLgotICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgX2J5dGVzXyBsZWZ0IHRvIHRyYW5zZmVyLgotICoKLSAqIEFzc3VtZXMgRE1BIGZsaXAtZmxvcCBpcyBjbGVhci4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQl1bnNpZ25lZCBpbnQgaW9fcG9ydDsKLQkvKiB1c2luZyBzaG9ydCB0byBnZXQgMTYtYml0IHdyYXAgYXJvdW5kICovCi0JdW5zaWduZWQgc2hvcnQgY291bnQ7Ci0KLQlpb19wb3J0ID0gKGRtYW5yIDw9IDMpID8gKChkbWFuciAmIDMpIDw8IDEpICsgMSArIElPX0RNQTFfQkFTRQotCQk6ICgoZG1hbnIgJiAzKSA8PCAyKSArIDIgKyBJT19ETUEyX0JBU0U7Ci0KLQljb3VudCA9IDEgKyBkbWFfaW5iKGlvX3BvcnQpOwotCWNvdW50ICs9IGRtYV9pbmIoaW9fcG9ydCkgPDwgODsKLQotCXJldHVybiAoZG1hbnIgPD0gMykgPyBjb3VudCA6IChjb3VudCA8PCAxKTsKLX0KLQotCi0vKiBUaGVzZSBhcmUgaW4ga2VybmVsL2RtYS5jOiAqLwotZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKmRldmljZV9pZCk7Ci1leHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOwotCi0vKiBGcm9tIFBDSSAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKLSNlbHNlCi0jZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5CSgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RtaS5oIGIvaW5jbHVkZS9hc20teDg2L2RtaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2ZmNmZlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kbWkuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fRE1JX0gKLSNkZWZpbmUgQVNNX1g4Nl9fRE1JX0gKLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jZGVmaW5lIERNSV9NQVhfREFUQSAyMDQ4Ci0KLWV4dGVybiBpbnQgZG1pX2FsbG9jX2luZGV4OwotZXh0ZXJuIGNoYXIgZG1pX2FsbG9jX2RhdGFbRE1JX01BWF9EQVRBXTsKLQotLyogVGhpcyBpcyBzbyBlYXJseSB0aGF0IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGFsbG9jYXRlIGR5bmFtaWMgbWVtb3J5LgotICAgQWxsb2NhdGUgZGF0YSBpbiBhbiBCU1MgYXJyYXkuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRtaV9hbGxvYyh1bnNpZ25lZCBsZW4pCi17Ci0JaW50IGlkeCA9IGRtaV9hbGxvY19pbmRleDsKLQlpZiAoKGRtaV9hbGxvY19pbmRleCArIGxlbikgPiBETUlfTUFYX0RBVEEpCi0JCXJldHVybiBOVUxMOwotCWRtaV9hbGxvY19pbmRleCArPSBsZW47Ci0JcmV0dXJuIGRtaV9hbGxvY19kYXRhICsgaWR4OwotfQotCi0vKiBVc2UgZWFybHkgSU8gbWFwcGluZ3MgZm9yIERNSSBiZWNhdXNlIGl0J3MgaW5pdGlhbGl6ZWQgZWFybHkgKi8KLSNkZWZpbmUgZG1pX2lvcmVtYXAgZWFybHlfaW9yZW1hcAotI2RlZmluZSBkbWlfaW91bm1hcCBlYXJseV9pb3VubWFwCi0KLSNlbmRpZiAvKiBBU01fWDg2X19ETUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RzLmggYi9pbmNsdWRlL2FzbS14ODYvZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjOTUzYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogRGVidWcgU3RvcmUgKERTKSBzdXBwb3J0Ci0gKgotICogVGhpcyBwcm92aWRlcyBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIGhhcmR3YXJlJ3MgRGVidWcgU3RvcmUKLSAqIGZlYXR1cmUgdGhhdCBpcyB1c2VkIGZvciBicmFuY2ggdHJhY2Ugc3RvcmUgKEJUUykgYW5kCi0gKiBwcmVjaXNlLWV2ZW50IGJhc2VkIHNhbXBsaW5nIChQRUJTKS4KLSAqCi0gKiBJdCBtYW5hZ2VzOgotICogLSBwZXItdGhyZWFkIGFuZCBwZXItY3B1IGFsbG9jYXRpb24gb2YgQlRTIGFuZCBQRUJTCi0gKiAtIGJ1ZmZlciBtZW1vcnkgYWxsb2NhdGlvbiAob3B0aW9uYWwpCi0gKiAtIGJ1ZmZlciBvdmVyZmxvdyBoYW5kbGluZwotICogLSBidWZmZXIgYWNjZXNzCi0gKgotICogSXQgYXNzdW1lczoKLSAqIC0gZ2V0X3Rhc2tfc3RydWN0IG9uIGFsbCBwYXJhbWV0ZXIgdGFza3MKLSAqIC0gY3VycmVudCBpcyBhbGxvd2VkIHRvIHRyYWNlIHBhcmFtZXRlciB0YXNrcwotICoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqIE1hcmt1cyBNZXR6Z2VyIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4sIDIwMDctMjAwOAotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fRFNfSAotI2RlZmluZSBBU01fWDg2X19EU19ICi0KLSNpZmRlZiBDT05GSUdfWDg2X0RTCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KLS8qCi0gKiBSZXF1ZXN0IEJUUyBvciBQRUJTCi0gKgotICogRHVlIHRvIGFsaWduZW1lbnQgY29uc3RyYWludHMsIHRoZSBhY3R1YWwgYnVmZmVyIG1heSBiZSBzbGlnaHRseQotICogc21hbGxlciB0aGFuIHRoZSByZXF1ZXN0ZWQgb3IgcHJvdmlkZWQgYnVmZmVyLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtRWVycm5vIG90aGVyd2lzZQotICoKLSAqIHRhc2s6IHRoZSB0YXNrIHRvIHJlcXVlc3QgcmVjb3JkaW5nIGZvcjsKLSAqICAgICAgIE5VTEwgZm9yIHBlci1jcHUgcmVjb3JkaW5nIG9uIHRoZSBjdXJyZW50IGNwdQotICogYmFzZTogdGhlIGJhc2UgcG9pbnRlciBmb3IgdGhlIChub24tcGFnZWFibGUpIGJ1ZmZlcjsKLSAqICAgICAgIE5VTEwgaWYgYnVmZmVyIGFsbG9jYXRpb24gcmVxdWVzdGVkCi0gKiBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdGVkIG9yIHByb3ZpZGVkIGJ1ZmZlcgotICogb3ZmbDogcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBidWZmZXIgb3ZlcmZsb3c7Ci0gKiAgICAgICBOVUxMIGlmIGN5Y2xpYyBidWZmZXIgcmVxdWVzdGVkCi0gKi8KLXR5cGVkZWYgdm9pZCAoKmRzX292ZmxfY2FsbGJhY2tfdCkoc3RydWN0IHRhc2tfc3RydWN0ICopOwotZXh0ZXJuIGludCBkc19yZXF1ZXN0X2J0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJhc2UsIHNpemVfdCBzaXplLAotCQkJICBkc19vdmZsX2NhbGxiYWNrX3Qgb3ZmbCk7Ci1leHRlcm4gaW50IGRzX3JlcXVlc3RfcGVicyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJhc2UsIHNpemVfdCBzaXplLAotCQkJICAgZHNfb3ZmbF9jYWxsYmFja190IG92ZmwpOwotCi0vKgotICogUmVsZWFzZSBCVFMgb3IgUEVCUyByZXNvdXJjZXMKLSAqCi0gKiBGcmVlcyBidWZmZXJzIGFsbG9jYXRlZCBvbiBkc19yZXF1ZXN0LgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtRWVycm5vIG90aGVyd2lzZQotICoKLSAqIHRhc2s6IHRoZSB0YXNrIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGZvcjsKLSAqICAgICAgIE5VTEwgdG8gcmVsZWFzZSByZXNvdXJjZXMgZm9yIHRoZSBjdXJyZW50IGNwdQotICovCi1leHRlcm4gaW50IGRzX3JlbGVhc2VfYnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci1leHRlcm4gaW50IGRzX3JlbGVhc2VfcGVicyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotCi0vKgotICogUmV0dXJuIHRoZSAoYXJyYXkpIGluZGV4IG9mIHRoZSB3cml0ZSBwb2ludGVyLgotICogKGFzc3VtaW5nIGFuIGFycmF5IG9mIEJUUy9QRUJTIHJlY29yZHMpCi0gKgotICogUmV0dXJucyAtRWVycm5vIG9uIGVycm9yCi0gKgotICogdGFzazogdGhlIHRhc2sgdG8gYWNjZXNzOwotICogICAgICAgTlVMTCB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgY3B1Ci0gKiBwb3MgKG91dCk6IGlmIG5vdCBOVUxMLCB3aWxsIGhvbGQgdGhlIHJlc3VsdAotICovCi1leHRlcm4gaW50IGRzX2dldF9idHNfaW5kZXgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzaXplX3QgKnBvcyk7Ci1leHRlcm4gaW50IGRzX2dldF9wZWJzX2luZGV4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc2l6ZV90ICpwb3MpOwotCi0vKgotICogUmV0dXJuIHRoZSAoYXJyYXkpIGluZGV4IG9uZSByZWNvcmQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFycmF5LgotICogKGFzc3VtaW5nIGFuIGFycmF5IG9mIEJUUy9QRUJTIHJlY29yZHMpCi0gKgotICogUmV0dXJucyAtRWVycm5vIG9uIGVycm9yCi0gKgotICogdGFzazogdGhlIHRhc2sgdG8gYWNjZXNzOwotICogICAgICAgTlVMTCB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgY3B1Ci0gKiBwb3MgKG91dCk6IGlmIG5vdCBOVUxMLCB3aWxsIGhvbGQgdGhlIHJlc3VsdAotICovCi1leHRlcm4gaW50IGRzX2dldF9idHNfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc2l6ZV90ICpwb3MpOwotZXh0ZXJuIGludCBkc19nZXRfcGVic19lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzaXplX3QgKnBvcyk7Ci0KLS8qCi0gKiBQcm92aWRlIGEgcG9pbnRlciB0byB0aGUgQlRTL1BFQlMgcmVjb3JkIGF0IHBhcmFtZXRlciBpbmRleC4KLSAqIChhc3N1bWluZyBhbiBhcnJheSBvZiBCVFMvUEVCUyByZWNvcmRzKQotICoKLSAqIFRoZSBwb2ludGVyIHBvaW50cyBkaXJlY3RseSBpbnRvIHRoZSBidWZmZXIuIFRoZSB1c2VyIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgY29weWluZyB0aGUgcmVjb3JkLgotICoKLSAqIFJldHVybnMgdGhlIHNpemUgb2YgYSBzaW5nbGUgcmVjb3JkIG9uIHN1Y2Nlc3M7IC1FZXJybm8gb24gZXJyb3IKLSAqCi0gKiB0YXNrOiB0aGUgdGFzayB0byBhY2Nlc3M7Ci0gKiAgICAgICBOVUxMIHRvIGFjY2VzcyB0aGUgY3VycmVudCBjcHUKLSAqIGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIHJlcXVlc3RlZCByZWNvcmQKLSAqIHJlY29yZCAob3V0KTogcG9pbnRlciB0byB0aGUgcmVxdWVzdGVkIHJlY29yZAotICovCi1leHRlcm4gaW50IGRzX2FjY2Vzc19idHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJIHNpemVfdCBpbmRleCwgY29uc3Qgdm9pZCAqKnJlY29yZCk7Ci1leHRlcm4gaW50IGRzX2FjY2Vzc19wZWJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCSAgc2l6ZV90IGluZGV4LCBjb25zdCB2b2lkICoqcmVjb3JkKTsKLQotLyoKLSAqIFdyaXRlIG9uZSBvciBtb3JlIEJUUy9QRUJTIHJlY29yZHMgYXQgdGhlIHdyaXRlIHBvaW50ZXIgaW5kZXggYW5kCi0gKiBhZHZhbmNlIHRoZSB3cml0ZSBwb2ludGVyLgotICoKLSAqIElmIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIHJlY29yZCBzaXplLCB0cmFpbGluZyBieXRlcyBhcmUKLSAqIHplcm9lZCBvdXQuCi0gKgotICogTWF5IHJlc3VsdCBpbiBvbmUgb3IgbW9yZSBvdmVyZmxvdyBub3RpZmljYXRpb25zLgotICoKLSAqIElmIGNhbGxlZCBkdXJpbmcgb3ZlcmZsb3cgaGFuZGxpbmcsIHRoYXQgaXMsIHdpdGggaW5kZXggPj0KLSAqIGludGVycnVwdCB0aHJlc2hvbGQsIHRoZSB3cml0ZSB3aWxsIHdyYXAgYXJvdW5kLgotICoKLSAqIEFuIG92ZXJmbG93IG5vdGlmaWNhdGlvbiBpcyBnaXZlbiBpZiBhbmQgd2hlbiB0aGUgaW50ZXJydXB0Ci0gKiB0aHJlc2hvbGQgaXMgcmVhY2hlZCBkdXJpbmcgb3IgYWZ0ZXIgdGhlIHdyaXRlLgotICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIC1FZXJybm8uCi0gKgotICogdGFzazogdGhlIHRhc2sgdG8gYWNjZXNzOwotICogICAgICAgTlVMTCB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgY3B1Ci0gKiBidWZmZXI6IHRoZSBidWZmZXIgdG8gd3JpdGUKLSAqIHNpemU6IHRoZSBzaXplIG9mIHRoZSBidWZmZXIKLSAqLwotZXh0ZXJuIGludCBkc193cml0ZV9idHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gaW50IGRzX3dyaXRlX3BlYnMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwotCi0vKgotICogU2FtZSBhcyBkc193cml0ZV9idHMvcGVicywgYnV0IG9taXQgb3duZXJzaGlwIGNoZWNrcy4KLSAqCi0gKiBUaGlzIGlzIG5lZWRlZCB0byBoYXZlIHNvbWUgb3RoZXIgdGFzayB0aGFuIHRoZSBvd25lciBvZiB0aGUKLSAqIEJUUy9QRUJTIGJ1ZmZlciBvciB0aGUgcGFyYW1ldGVyIHRhc2sgaXRzZWxmIHdyaXRlIGludG8gdGhlCi0gKiByZXNwZWN0aXZlIGJ1ZmZlci4KLSAqLwotZXh0ZXJuIGludCBkc191bmNoZWNrZWRfd3JpdGVfYnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIGludCBkc191bmNoZWNrZWRfd3JpdGVfcGVicyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Ci0KLS8qCi0gKiBSZXNldCB0aGUgd3JpdGUgcG9pbnRlciBvZiB0aGUgQlRTL1BFQlMgYnVmZmVyLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtRWVycm5vIG9uIGVycm9yCi0gKgotICogdGFzazogdGhlIHRhc2sgdG8gYWNjZXNzOwotICogICAgICAgTlVMTCB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgY3B1Ci0gKi8KLWV4dGVybiBpbnQgZHNfcmVzZXRfYnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci1leHRlcm4gaW50IGRzX3Jlc2V0X3BlYnMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLQotLyoKLSAqIENsZWFyIHRoZSBCVFMvUEVCUyBidWZmZXIgYW5kIHJlc2V0IHRoZSB3cml0ZSBwb2ludGVyLgotICogVGhlIGVudGlyZSBidWZmZXIgd2lsbCBiZSB6ZXJvZWQgb3V0LgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtRWVycm5vIG9uIGVycm9yCi0gKgotICogdGFzazogdGhlIHRhc2sgdG8gYWNjZXNzOwotICogICAgICAgTlVMTCB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgY3B1Ci0gKi8KLWV4dGVybiBpbnQgZHNfY2xlYXJfYnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci1leHRlcm4gaW50IGRzX2NsZWFyX3BlYnMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLQotLyoKLSAqIFByb3ZpZGUgdGhlIFBFQlMgY291bnRlciByZXNldCB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzczsgLUVlcnJubyBvbiBlcnJvcgotICoKLSAqIHRhc2s6IHRoZSB0YXNrIHRvIGFjY2VzczsKLSAqICAgICAgIE5VTEwgdG8gYWNjZXNzIHRoZSBjdXJyZW50IGNwdQotICogdmFsdWUgKG91dCk6IHRoZSBjb3VudGVyIHJlc2V0IHZhbHVlCi0gKi8KLWV4dGVybiBpbnQgZHNfZ2V0X3BlYnNfcmVzZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgKnZhbHVlKTsKLQotLyoKLSAqIFNldCB0aGUgUEVCUyBjb3VudGVyIHJlc2V0IHZhbHVlLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtRWVycm5vIG9uIGVycm9yCi0gKgotICogdGFzazogdGhlIHRhc2sgdG8gYWNjZXNzOwotICogICAgICAgTlVMTCB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgY3B1Ci0gKiB2YWx1ZTogdGhlIG5ldyBjb3VudGVyIHJlc2V0IHZhbHVlCi0gKi8KLWV4dGVybiBpbnQgZHNfc2V0X3BlYnNfcmVzZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgdmFsdWUpOwotCi0vKgotICogSW5pdGlhbGl6YXRpb24KLSAqLwotc3RydWN0IGNwdWluZm9feDg2OwotZXh0ZXJuIHZvaWQgX19jcHVpbml0IGRzX2luaXRfaW50ZWwoc3RydWN0IGNwdWluZm9feDg2ICopOwotCi0KLQotLyoKLSAqIFRoZSBEUyBjb250ZXh0IC0gcGFydCBvZiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdC4KLSAqLwotc3RydWN0IGRzX2NvbnRleHQgewotCS8qIHBvaW50ZXIgdG8gdGhlIERTIGNvbmZpZ3VyYXRpb247IGdvZXMgaW50byBNU1JfSUEzMl9EU19BUkVBICovCi0JdW5zaWduZWQgY2hhciAqZHM7Ci0JLyogdGhlIG93bmVyIG9mIHRoZSBCVFMgYW5kIFBFQlMgY29uZmlndXJhdGlvbiwgcmVzcGVjdGl2ZWx5ICovCi0Jc3RydWN0IHRhc2tfc3RydWN0ICpvd25lclsyXTsKLQkvKiBidWZmZXIgb3ZlcmZsb3cgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGZvciBCVFMgYW5kIFBFQlMgKi8KLQlkc19vdmZsX2NhbGxiYWNrX3QgY2FsbGJhY2tbMl07Ci0JLyogdGhlIG9yaWdpbmFsIGJ1ZmZlciBhZGRyZXNzICovCi0Jdm9pZCAqYnVmZmVyWzJdOwotCS8qIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIHBhZ2VzIGZvciBvbi1yZXF1ZXN0IGFsbG9jYXRlZCBidWZmZXJzICovCi0JdW5zaWduZWQgaW50IHBhZ2VzWzJdOwotCS8qIHVzZSBjb3VudCAqLwotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JLyogYSBwb2ludGVyIHRvIHRoZSBjb250ZXh0IGxvY2F0aW9uIGluc2lkZSB0aGUgdGhyZWFkX3N0cnVjdAotCSAqIG9yIHRoZSBwZXJfY3B1IGNvbnRleHQgYXJyYXkgKi8KLQlzdHJ1Y3QgZHNfY29udGV4dCAqKnRoaXM7Ci0JLyogYSBwb2ludGVyIHRvIHRoZSB0YXNrIG93bmluZyB0aGlzIGNvbnRleHQsIG9yIE5VTEwsIGlmIHRoZQotCSAqIGNvbnRleHQgaXMgb3duZWQgYnkgYSBjcHUgKi8KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci19OwotCi0vKiBjYWxsZWQgYnkgZXhpdF90aHJlYWQoKSB0byBmcmVlIGxlZnRvdmVyIGNvbnRleHRzICovCi1leHRlcm4gdm9pZCBkc19mcmVlKHN0cnVjdCBkc19jb250ZXh0ICpjb250ZXh0KTsKLQotI2Vsc2UgLyogQ09ORklHX1g4Nl9EUyAqLwotCi0jZGVmaW5lIGRzX2luaXRfaW50ZWwoY29uZmlnKSBkbyB7fSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIENPTkZJR19YODZfRFMgKi8KLSNlbmRpZiAvKiBBU01fWDg2X19EU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZHdhcmYyLmggYi9pbmNsdWRlL2FzbS14ODYvZHdhcmYyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDFiYzMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2R3YXJmMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19EV0FSRjJfSAotI2RlZmluZSBBU01fWDg2X19EV0FSRjJfSAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI3dhcm5pbmcgImFzbS9kd2FyZjIuaCBzaG91bGQgYmUgb25seSBpbmNsdWRlZCBpbiBwdXJlIGFzc2VtYmx5IGZpbGVzIgotI2VuZGlmCi0KLS8qCi0gICBNYWNyb3MgZm9yIGR3YXJmMiBDRkkgdW53aW5kIHRhYmxlIGVudHJpZXMuCi0gICBTZWUgImFzLmluZm8iIGZvciBkZXRhaWxzIG9uIHRoZXNlIHBzZXVkbyBvcHMuIFVuZm9ydHVuYXRlbHkKLSAgIHRoZXkgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHZlcnkgbmV3IGJpbnV0aWxzLCBzbyBkZWZpbmUgdGhlbQotICAgYXdheSBmb3Igb2xkZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZkZWYgQ09ORklHX0FTX0NGSQotCi0jZGVmaW5lIENGSV9TVEFSVFBST0MgLmNmaV9zdGFydHByb2MKLSNkZWZpbmUgQ0ZJX0VORFBST0MgLmNmaV9lbmRwcm9jCi0jZGVmaW5lIENGSV9ERUZfQ0ZBIC5jZmlfZGVmX2NmYQotI2RlZmluZSBDRklfREVGX0NGQV9SRUdJU1RFUiAuY2ZpX2RlZl9jZmFfcmVnaXN0ZXIKLSNkZWZpbmUgQ0ZJX0RFRl9DRkFfT0ZGU0VUIC5jZmlfZGVmX2NmYV9vZmZzZXQKLSNkZWZpbmUgQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQKLSNkZWZpbmUgQ0ZJX09GRlNFVCAuY2ZpX29mZnNldAotI2RlZmluZSBDRklfUkVMX09GRlNFVCAuY2ZpX3JlbF9vZmZzZXQKLSNkZWZpbmUgQ0ZJX1JFR0lTVEVSIC5jZmlfcmVnaXN0ZXIKLSNkZWZpbmUgQ0ZJX1JFU1RPUkUgLmNmaV9yZXN0b3JlCi0jZGVmaW5lIENGSV9SRU1FTUJFUl9TVEFURSAuY2ZpX3JlbWVtYmVyX3N0YXRlCi0jZGVmaW5lIENGSV9SRVNUT1JFX1NUQVRFIC5jZmlfcmVzdG9yZV9zdGF0ZQotI2RlZmluZSBDRklfVU5ERUZJTkVEIC5jZmlfdW5kZWZpbmVkCi0KLSNpZmRlZiBDT05GSUdfQVNfQ0ZJX1NJR05BTF9GUkFNRQotI2RlZmluZSBDRklfU0lHTkFMX0ZSQU1FIC5jZmlfc2lnbmFsX2ZyYW1lCi0jZWxzZQotI2RlZmluZSBDRklfU0lHTkFMX0ZSQU1FCi0jZW5kaWYKLQotI2Vsc2UKLQotLyogRHVlIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgcHJlLWV4aXNpdGluZyBjb2RlLCBkb24ndCB1c2UgYXNzZW1ibGVyIGxpbmUKLSAgIGNvbW1lbnQgY2hhcmFjdGVyICMgdG8gaWdub3JlIHRoZSBhcmd1bWVudHMuIEluc3RlYWQsIHVzZSBhIGR1bW15IG1hY3JvLiAqLwotLm1hY3JvIGNmaV9pZ25vcmUgYT0wLCBiPTAsIGM9MCwgZD0wCi0uZW5kbQotCi0jZGVmaW5lIENGSV9TVEFSVFBST0MJY2ZpX2lnbm9yZQotI2RlZmluZSBDRklfRU5EUFJPQwljZmlfaWdub3JlCi0jZGVmaW5lIENGSV9ERUZfQ0ZBCWNmaV9pZ25vcmUKLSNkZWZpbmUgQ0ZJX0RFRl9DRkFfUkVHSVNURVIJY2ZpX2lnbm9yZQotI2RlZmluZSBDRklfREVGX0NGQV9PRkZTRVQJY2ZpX2lnbm9yZQotI2RlZmluZSBDRklfQURKVVNUX0NGQV9PRkZTRVQJY2ZpX2lnbm9yZQotI2RlZmluZSBDRklfT0ZGU0VUCWNmaV9pZ25vcmUKLSNkZWZpbmUgQ0ZJX1JFTF9PRkZTRVQJY2ZpX2lnbm9yZQotI2RlZmluZSBDRklfUkVHSVNURVIJY2ZpX2lnbm9yZQotI2RlZmluZSBDRklfUkVTVE9SRQljZmlfaWdub3JlCi0jZGVmaW5lIENGSV9SRU1FTUJFUl9TVEFURSBjZmlfaWdub3JlCi0jZGVmaW5lIENGSV9SRVNUT1JFX1NUQVRFIGNmaV9pZ25vcmUKLSNkZWZpbmUgQ0ZJX1VOREVGSU5FRCBjZmlfaWdub3JlCi0jZGVmaW5lIENGSV9TSUdOQUxfRlJBTUUgY2ZpX2lnbm9yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX0RXQVJGMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZTgyMC5oIGIvaW5jbHVkZS9hc20teDg2L2U4MjAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiYmRlYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZTgyMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fRTgyMF9ICi0jZGVmaW5lIEFTTV9YODZfX0U4MjBfSAotI2RlZmluZSBFODIwTUFQCTB4MmQwCQkvKiBvdXIgbWFwICovCi0jZGVmaW5lIEU4MjBNQVgJMTI4CQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBFODIwTUFQICovCi0KLS8qCi0gKiBMZWdhY3kgRTgyMCBCSU9TIGxpbWl0cyB1cyB0byAxMjggKEU4MjBNQVgpIG5vZGVzIGR1ZSB0byB0aGUKLSAqIGNvbnN0cmFpbmVkIHNwYWNlIGluIHRoZSB6ZXJvcGFnZS4gIElmIHdlIGhhdmUgbW9yZSBub2RlcyB0aGFuCi0gKiB0aGF0LCBhbmQgaWYgd2UndmUgYm9vdGVkIG9mZiBFRkkgZmlybXdhcmUsIHRoZW4gdGhlIEVGSSB0YWJsZXMKLSAqIHBhc3NlZCB1cyBmcm9tIHRoZSBFRkkgZmlybXdhcmUgY2FuIGxpc3QgbW9yZSBub2Rlcy4gIFNpemUgb3VyCi0gKiBpbnRlcm5hbCBtZW1vcnkgbWFwIHRhYmxlcyB0byBoYXZlIHJvb20gZm9yIHRoZXNlIGFkZGl0aW9uYWwKLSAqIG5vZGVzLCBiYXNlZCBvbiB1cCB0byB0aHJlZSBlbnRyaWVzIHBlciBub2RlIGZvciB3aGljaCB0aGUKLSAqIGtlcm5lbCB3YXMgYnVpbHQ6IE1BWF9OVU1OT0RFUyA9PSAoMSA8PCBDT05GSUdfTk9ERVNfU0hJRlQpLAotICogcGx1cyBFODIwTUFYLCBhbGxvd2luZyBzcGFjZSBmb3IgdGhlIHBvc3NpYmxlIGR1cGxpY2F0ZSBFODIwCi0gKiBlbnRyaWVzIHRoYXQgbWlnaHQgbmVlZCByb29tIGluIHRoZSBzYW1lIGFycmF5cywgcHJpb3IgdG8gdGhlCi0gKiBjYWxsIHRvIHNhbml0aXplX2U4MjBfbWFwKCkgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMuICBUaGUgYWxsb3dhbmNlCi0gKiBvZiB0aHJlZSBtZW1vcnkgbWFwIGVudHJpZXMgcGVyIG5vZGUgaXMgImVub3VnaCIgZW50cmllcyBmb3IKLSAqIHRoZSBpbml0aWFsIGhhcmR3YXJlIHBsYXRmb3JtIG1vdGl2YXRpbmcgdGhpcyBtZWNoYW5pc20gdG8gbWFrZQotICogdXNlIG9mIGFkZGl0aW9uYWwgRUZJIG1hcCBlbnRyaWVzLiAgRnV0dXJlIHBsYXRmb3JtcyBtYXkgd2FudAotICogdG8gYWxsb3cgbW9yZSB0aGFuIHRocmVlIGVudHJpZXMgcGVyIG5vZGUgb3Igb3RoZXJ3aXNlIHJlZmluZQotICogdGhpcyBzaXplLgotICovCi0KLS8qCi0gKiBPZGQ6ICdtYWtlIGhlYWRlcnNfY2hlY2snIGNvbXBsYWlucyBhYm91dCBudW1hLmggaWYgSSB0cnkKLSAqIHRvIGNvbGxhcHNlIHRoZSBuZXh0IHR3byAjaWZkZWYgbGluZXMgdG8gYSBzaW5nbGUgbGluZToKLSAqCSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoQ09ORklHX0VGSSkKLSAqLwotI2lmZGVmIF9fS0VSTkVMX18KLSNpZmRlZiBDT05GSUdfRUZJCi0jaW5jbHVkZSA8bGludXgvbnVtYS5oPgotI2RlZmluZSBFODIwX1hfTUFYIChFODIwTUFYICsgMyAqIE1BWF9OVU1OT0RFUykKLSNlbHNlCS8qICEgQ09ORklHX0VGSSAqLwotI2RlZmluZSBFODIwX1hfTUFYIEU4MjBNQVgKLSNlbmRpZgotI2Vsc2UJLyogISBfX0tFUk5FTF9fICovCi0jZGVmaW5lIEU4MjBfWF9NQVggRTgyME1BWAotI2VuZGlmCi0KLSNkZWZpbmUgRTgyME5SCTB4MWU4CQkvKiAjIGVudHJpZXMgaW4gRTgyME1BUCAqLwotCi0jZGVmaW5lIEU4MjBfUkFNCTEKLSNkZWZpbmUgRTgyMF9SRVNFUlZFRAkyCi0jZGVmaW5lIEU4MjBfQUNQSQkzCi0jZGVmaW5lIEU4MjBfTlZTCTQKLSNkZWZpbmUgRTgyMF9VTlVTQUJMRQk1Ci0KLS8qIHJlc2VydmVkIFJBTSB1c2VkIGJ5IGtlcm5lbCBpdHNlbGYgKi8KLSNkZWZpbmUgRTgyMF9SRVNFUlZFRF9LRVJOICAgICAgICAxMjgKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCBlODIwZW50cnkgewotCV9fdTY0IGFkZHI7CS8qIHN0YXJ0IG9mIG1lbW9yeSBzZWdtZW50ICovCi0JX191NjQgc2l6ZTsJLyogc2l6ZSBvZiBtZW1vcnkgc2VnbWVudCAqLwotCV9fdTMyIHR5cGU7CS8qIHR5cGUgb2YgbWVtb3J5IHNlZ21lbnQgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBlODIwbWFwIHsKLQlfX3UzMiBucl9tYXA7Ci0Jc3RydWN0IGU4MjBlbnRyeSBtYXBbRTgyMF9YX01BWF07Ci19OwotCi0jaWZkZWYgX19LRVJORUxfXwotLyogc2VlIGNvbW1lbnQgaW4gYXJjaC94ODYva2VybmVsL2U4MjAuYyAqLwotZXh0ZXJuIHN0cnVjdCBlODIwbWFwIGU4MjA7Ci1leHRlcm4gc3RydWN0IGU4MjBtYXAgZTgyMF9zYXZlZDsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX21lbV9zdGFydDsKLWV4dGVybiBpbnQgZTgyMF9hbnlfbWFwcGVkKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgdHlwZSk7Ci1leHRlcm4gaW50IGU4MjBfYWxsX21hcHBlZCh1NjQgc3RhcnQsIHU2NCBlbmQsIHVuc2lnbmVkIHR5cGUpOwotZXh0ZXJuIHZvaWQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKTsKLWV4dGVybiB2b2lkIGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobyk7Ci1leHRlcm4gaW50Ci1zYW5pdGl6ZV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICpiaW9zbWFwLCBpbnQgbWF4X25yX21hcCwgaW50ICpwbnJfbWFwKTsKLWV4dGVybiB1NjQgZTgyMF91cGRhdGVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCi0JCQkgICAgICAgdW5zaWduZWQgbmV3X3R5cGUpOwotZXh0ZXJuIHU2NCBlODIwX3JlbW92ZV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKLQkJCSAgICAgaW50IGNoZWNrdHlwZSk7Ci1leHRlcm4gdm9pZCB1cGRhdGVfZTgyMCh2b2lkKTsKLWV4dGVybiB2b2lkIGU4MjBfc2V0dXBfZ2FwKHZvaWQpOwotZXh0ZXJuIGludCBlODIwX3NlYXJjaF9nYXAodW5zaWduZWQgbG9uZyAqZ2Fwc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmdhcHNpemUsCi0JCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbmRfYWRkcik7Ci1zdHJ1Y3Qgc2V0dXBfZGF0YTsKLWV4dGVybiB2b2lkIHBhcnNlX2U4MjBfZXh0KHN0cnVjdCBzZXR1cF9kYXRhICpkYXRhLCB1bnNpZ25lZCBsb25nIHBhX2RhdGEpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBcCi0JKGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgZGVmaW5lZChDT05GSUdfSElCRVJOQVRJT04pKQotZXh0ZXJuIHZvaWQgZTgyMF9tYXJrX25vc2F2ZV9yZWdpb25zKHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZTgyMF9tYXJrX25vc2F2ZV9yZWdpb25zKHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuKQotewotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUVNVEVTVAotZXh0ZXJuIHZvaWQgZWFybHlfbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X21lbXRlc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci19Ci0jZW5kaWYKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX3VzZXJfcGZuOwotCi1leHRlcm4gdTY0IGZpbmRfZTgyMF9hcmVhKHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbik7Ci1leHRlcm4gdTY0IGZpbmRfZTgyMF9hcmVhX3NpemUodTY0IHN0YXJ0LCB1NjQgKnNpemVwLCB1NjQgYWxpZ24pOwotZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9lYXJseV9vdmVybGFwX29rKHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBmcmVlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCk7Ci1leHRlcm4gdm9pZCBlYXJseV9yZXNfdG9fYm9vdG1lbSh1NjQgc3RhcnQsIHU2NCBlbmQpOwotZXh0ZXJuIHU2NCBlYXJseV9yZXNlcnZlX2U4MjAodTY0IHN0YXJ0dCwgdTY0IHNpemV0LCB1NjQgYWxpZ24pOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBlODIwX2VuZF9vZl9yYW1fcGZuKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfbG93X3JhbV9wZm4odm9pZCk7Ci1leHRlcm4gaW50IGU4MjBfZmluZF9hY3RpdmVfcmVnaW9uKGNvbnN0IHN0cnVjdCBlODIwZW50cnkgKmVpLAotCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICB1bnNpZ25lZCBsb25nIGxhc3RfcGZuLAotCQkJCSAgdW5zaWduZWQgbG9uZyAqZWlfc3RhcnRwZm4sCi0JCQkJICB1bnNpZ25lZCBsb25nICplaV9lbmRwZm4pOwotZXh0ZXJuIHZvaWQgZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7Ci1leHRlcm4gdTY0IGU4MjBfaG9sZV9zaXplKHU2NCBzdGFydCwgdTY0IGVuZCk7Ci1leHRlcm4gdm9pZCBmaW5pc2hfZTgyMF9wYXJzaW5nKHZvaWQpOwotZXh0ZXJuIHZvaWQgZTgyMF9yZXNlcnZlX3Jlc291cmNlcyh2b2lkKTsKLWV4dGVybiB2b2lkIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXNfbGF0ZSh2b2lkKTsKLWV4dGVybiB2b2lkIHNldHVwX21lbW9yeV9tYXAodm9pZCk7Ci1leHRlcm4gY2hhciAqZGVmYXVsdF9tYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKTsKLWV4dGVybiBjaGFyICptYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKTsKLWV4dGVybiBjaGFyICptZW1vcnlfc2V0dXAodm9pZCk7Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIElTQV9TVEFSVF9BRERSRVNTCTB4YTAwMDAKLSNkZWZpbmUgSVNBX0VORF9BRERSRVNTCQkweDEwMDAwMAotI2RlZmluZSBpc19JU0FfcmFuZ2UocywgZSkgKChzKSA+PSBJU0FfU1RBUlRfQUREUkVTUyAmJiAoZSkgPCBJU0FfRU5EX0FERFJFU1MpCi0KLSNkZWZpbmUgQklPU19CRUdJTgkJMHgwMDBhMDAwMAotI2RlZmluZSBCSU9TX0VORAkJMHgwMDEwMDAwMAotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotCi0jZGVmaW5lIEhJR0hfTUVNT1JZCSgxMDI0KjEwMjQpCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fRTgyMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZWRhYy5oIGIvaW5jbHVkZS9hc20teDg2L2VkYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5M2M1Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZWRhYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19FREFDX0gKLSNkZWZpbmUgQVNNX1g4Nl9fRURBQ19ICi0KLS8qIEVDQyBhdG9taWMsIERNQSwgU01QIGFuZCBpbnRlcnJ1cHQgc2FmZSBzY3J1YiBmdW5jdGlvbiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NjcnViKHZvaWQgKnZhLCB1MzIgc2l6ZSkKLXsKLQl1MzIgaSwgKnZpcnRfYWRkciA9IHZhOwotCi0JLyoKLQkgKiBWZXJ5IGNhcmVmdWxseSByZWFkIGFuZCB3cml0ZSB0byBtZW1vcnkgYXRvbWljYWxseSBzbyB3ZQotCSAqIGFyZSBpbnRlcnJ1cHQsIERNQSBhbmQgU01QIHNhZmUuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IHNpemUgLyA0OyBpKyssIHZpcnRfYWRkcisrKQotCQlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsICUwIjo6Im0iICgqdmlydF9hZGRyKSk7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19FREFDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyZGUyMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZWZpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0VGSV9ICi0jZGVmaW5lIEFTTV9YODZfX0VGSV9ICi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGFzbWxpbmthZ2UgZWZpX2NhbGxfcGh5cyh2b2lkICosIC4uLik7Ci0KLSNkZWZpbmUgZWZpX2NhbGxfcGh5czAoZikJCWVmaV9jYWxsX3BoeXMoZikKLSNkZWZpbmUgZWZpX2NhbGxfcGh5czEoZiwgYTEpCQllZmlfY2FsbF9waHlzKGYsIGExKQotI2RlZmluZSBlZmlfY2FsbF9waHlzMihmLCBhMSwgYTIpCWVmaV9jYWxsX3BoeXMoZiwgYTEsIGEyKQotI2RlZmluZSBlZmlfY2FsbF9waHlzMyhmLCBhMSwgYTIsIGEzKQllZmlfY2FsbF9waHlzKGYsIGExLCBhMiwgYTMpCi0jZGVmaW5lIGVmaV9jYWxsX3BoeXM0KGYsIGExLCBhMiwgYTMsIGE0KQlcCi0JZWZpX2NhbGxfcGh5cyhmLCBhMSwgYTIsIGEzLCBhNCkKLSNkZWZpbmUgZWZpX2NhbGxfcGh5czUoZiwgYTEsIGEyLCBhMywgYTQsIGE1KQlcCi0JZWZpX2NhbGxfcGh5cyhmLCBhMSwgYTIsIGEzLCBhNCwgYTUpCi0jZGVmaW5lIGVmaV9jYWxsX3BoeXM2KGYsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpCVwKLQllZmlfY2FsbF9waHlzKGYsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpCi0vKgotICogV3JhcCBhbGwgdGhlIHZpcnR1YWwgY2FsbHMgaW4gYSB3YXkgdGhhdCBmb3JjZXMgdGhlIHBhcmFtZXRlcnMgb24gdGhlIHN0YWNrLgotICovCi0KLSNkZWZpbmUgZWZpX2NhbGxfdmlydChmLCBhcmdzLi4uKSBcCi0JKChlZmlfIyNmIyNfdCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkqKWVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpKGFyZ3MpCi0KLSNkZWZpbmUgZWZpX2NhbGxfdmlydDAoZikJCWVmaV9jYWxsX3ZpcnQoZikKLSNkZWZpbmUgZWZpX2NhbGxfdmlydDEoZiwgYTEpCQllZmlfY2FsbF92aXJ0KGYsIGExKQotI2RlZmluZSBlZmlfY2FsbF92aXJ0MihmLCBhMSwgYTIpCWVmaV9jYWxsX3ZpcnQoZiwgYTEsIGEyKQotI2RlZmluZSBlZmlfY2FsbF92aXJ0MyhmLCBhMSwgYTIsIGEzKQllZmlfY2FsbF92aXJ0KGYsIGExLCBhMiwgYTMpCi0jZGVmaW5lIGVmaV9jYWxsX3ZpcnQ0KGYsIGExLCBhMiwgYTMsIGE0KQlcCi0JZWZpX2NhbGxfdmlydChmLCBhMSwgYTIsIGEzLCBhNCkKLSNkZWZpbmUgZWZpX2NhbGxfdmlydDUoZiwgYTEsIGEyLCBhMywgYTQsIGE1KQlcCi0JZWZpX2NhbGxfdmlydChmLCBhMSwgYTIsIGEzLCBhNCwgYTUpCi0jZGVmaW5lIGVmaV9jYWxsX3ZpcnQ2KGYsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpCVwKLQllZmlfY2FsbF92aXJ0KGYsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpCi0KLSNkZWZpbmUgZWZpX2lvcmVtYXAoYWRkciwgc2l6ZSkJCQlpb3JlbWFwX2NhY2hlKGFkZHIsIHNpemUpCi0KLSNlbHNlIC8qICFDT05GSUdfWDg2XzMyICovCi0KLSNkZWZpbmUgTUFYX0VGSV9JT19QQUdFUwkxMDAKLQotZXh0ZXJuIHU2NCBlZmlfY2FsbDAodm9pZCAqZnApOwotZXh0ZXJuIHU2NCBlZmlfY2FsbDEodm9pZCAqZnAsIHU2NCBhcmcxKTsKLWV4dGVybiB1NjQgZWZpX2NhbGwyKHZvaWQgKmZwLCB1NjQgYXJnMSwgdTY0IGFyZzIpOwotZXh0ZXJuIHU2NCBlZmlfY2FsbDModm9pZCAqZnAsIHU2NCBhcmcxLCB1NjQgYXJnMiwgdTY0IGFyZzMpOwotZXh0ZXJuIHU2NCBlZmlfY2FsbDQodm9pZCAqZnAsIHU2NCBhcmcxLCB1NjQgYXJnMiwgdTY0IGFyZzMsIHU2NCBhcmc0KTsKLWV4dGVybiB1NjQgZWZpX2NhbGw1KHZvaWQgKmZwLCB1NjQgYXJnMSwgdTY0IGFyZzIsIHU2NCBhcmczLAotCQkgICAgIHU2NCBhcmc0LCB1NjQgYXJnNSk7Ci1leHRlcm4gdTY0IGVmaV9jYWxsNih2b2lkICpmcCwgdTY0IGFyZzEsIHU2NCBhcmcyLCB1NjQgYXJnMywKLQkJICAgICB1NjQgYXJnNCwgdTY0IGFyZzUsIHU2NCBhcmc2KTsKLQotI2RlZmluZSBlZmlfY2FsbF9waHlzMChmKQkJCVwKLQllZmlfY2FsbDAoKHZvaWQgKikoZikpCi0jZGVmaW5lIGVmaV9jYWxsX3BoeXMxKGYsIGExKQkJCVwKLQllZmlfY2FsbDEoKHZvaWQgKikoZiksICh1NjQpKGExKSkKLSNkZWZpbmUgZWZpX2NhbGxfcGh5czIoZiwgYTEsIGEyKQkJCVwKLQllZmlfY2FsbDIoKHZvaWQgKikoZiksICh1NjQpKGExKSwgKHU2NCkoYTIpKQotI2RlZmluZSBlZmlfY2FsbF9waHlzMyhmLCBhMSwgYTIsIGEzKQkJCQlcCi0JZWZpX2NhbGwzKCh2b2lkICopKGYpLCAodTY0KShhMSksICh1NjQpKGEyKSwgKHU2NCkoYTMpKQotI2RlZmluZSBlZmlfY2FsbF9waHlzNChmLCBhMSwgYTIsIGEzLCBhNCkJCQkJXAotCWVmaV9jYWxsNCgodm9pZCAqKShmKSwgKHU2NCkoYTEpLCAodTY0KShhMiksICh1NjQpKGEzKSwJCVwKLQkJICAodTY0KShhNCkpCi0jZGVmaW5lIGVmaV9jYWxsX3BoeXM1KGYsIGExLCBhMiwgYTMsIGE0LCBhNSkJCQkJXAotCWVmaV9jYWxsNSgodm9pZCAqKShmKSwgKHU2NCkoYTEpLCAodTY0KShhMiksICh1NjQpKGEzKSwJCVwKLQkJICAodTY0KShhNCksICh1NjQpKGE1KSkKLSNkZWZpbmUgZWZpX2NhbGxfcGh5czYoZiwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikJCQlcCi0JZWZpX2NhbGw2KCh2b2lkICopKGYpLCAodTY0KShhMSksICh1NjQpKGEyKSwgKHU2NCkoYTMpLAkJXAotCQkgICh1NjQpKGE0KSwgKHU2NCkoYTUpLCAodTY0KShhNikpCi0KLSNkZWZpbmUgZWZpX2NhbGxfdmlydDAoZikJCQkJXAotCWVmaV9jYWxsMCgodm9pZCAqKShlZmkuc3lzdGFiLT5ydW50aW1lLT5mKSkKLSNkZWZpbmUgZWZpX2NhbGxfdmlydDEoZiwgYTEpCQkJCQlcCi0JZWZpX2NhbGwxKCh2b2lkICopKGVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpLCAodTY0KShhMSkpCi0jZGVmaW5lIGVmaV9jYWxsX3ZpcnQyKGYsIGExLCBhMikJCQkJCVwKLQllZmlfY2FsbDIoKHZvaWQgKikoZWZpLnN5c3RhYi0+cnVudGltZS0+ZiksICh1NjQpKGExKSwgKHU2NCkoYTIpKQotI2RlZmluZSBlZmlfY2FsbF92aXJ0MyhmLCBhMSwgYTIsIGEzKQkJCQkJXAotCWVmaV9jYWxsMygodm9pZCAqKShlZmkuc3lzdGFiLT5ydW50aW1lLT5mKSwgKHU2NCkoYTEpLCAodTY0KShhMiksIFwKLQkJICAodTY0KShhMykpCi0jZGVmaW5lIGVmaV9jYWxsX3ZpcnQ0KGYsIGExLCBhMiwgYTMsIGE0KQkJCQlcCi0JZWZpX2NhbGw0KCh2b2lkICopKGVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpLCAodTY0KShhMSksICh1NjQpKGEyKSwgXAotCQkgICh1NjQpKGEzKSwgKHU2NCkoYTQpKQotI2RlZmluZSBlZmlfY2FsbF92aXJ0NShmLCBhMSwgYTIsIGEzLCBhNCwgYTUpCQkJCVwKLQllZmlfY2FsbDUoKHZvaWQgKikoZWZpLnN5c3RhYi0+cnVudGltZS0+ZiksICh1NjQpKGExKSwgKHU2NCkoYTIpLCBcCi0JCSAgKHU2NCkoYTMpLCAodTY0KShhNCksICh1NjQpKGE1KSkKLSNkZWZpbmUgZWZpX2NhbGxfdmlydDYoZiwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikJCQlcCi0JZWZpX2NhbGw2KCh2b2lkICopKGVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpLCAodTY0KShhMSksICh1NjQpKGEyKSwgXAotCQkgICh1NjQpKGEzKSwgKHU2NCkoYTQpLCAodTY0KShhNSksICh1NjQpKGE2KSkKLQotZXh0ZXJuIHZvaWQgX19pb21lbSAqZWZpX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwotCi1leHRlcm4gdm9pZCBlZmlfcmVzZXJ2ZV9lYXJseSh2b2lkKTsKLWV4dGVybiB2b2lkIGVmaV9jYWxsX3BoeXNfcHJlbG9nKHZvaWQpOwotZXh0ZXJuIHZvaWQgZWZpX2NhbGxfcGh5c19lcGlsb2codm9pZCk7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19FRklfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VsZi5oIGIvaW5jbHVkZS9hc20teDg2L2VsZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmJjMTVmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9lbGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0VMRl9ICi0jZGVmaW5lIEFTTV9YODZfX0VMRl9ICi0KLS8qCi0gKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgotICovCi0KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KLSNpbmNsdWRlIDxhc20vYXV4dmVjLmg+Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwotCi0jZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLXR5cGVkZWYgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgZWxmX2ZwcmVnc2V0X3Q7Ci0KLSNpZmRlZiBfX2kzODZfXwotCi10eXBlZGVmIHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IGVsZl9mcHhyZWdzZXRfdDsKLQotI2RlZmluZSBSXzM4Nl9OT05FCTAKLSNkZWZpbmUgUl8zODZfMzIJMQotI2RlZmluZSBSXzM4Nl9QQzMyCTIKLSNkZWZpbmUgUl8zODZfR09UMzIJMwotI2RlZmluZSBSXzM4Nl9QTFQzMgk0Ci0jZGVmaW5lIFJfMzg2X0NPUFkJNQotI2RlZmluZSBSXzM4Nl9HTE9CX0RBVAk2Ci0jZGVmaW5lIFJfMzg2X0pNUF9TTE9UCTcKLSNkZWZpbmUgUl8zODZfUkVMQVRJVkUJOAotI2RlZmluZSBSXzM4Nl9HT1RPRkYJOQotI2RlZmluZSBSXzM4Nl9HT1RQQwkxMAotI2RlZmluZSBSXzM4Nl9OVU0JMTEKLQotLyoKLSAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgotICovCi0jZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCi0jZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTFNCCi0jZGVmaW5lIEVMRl9BUkNICUVNXzM4NgotCi0jZWxzZQotCi0vKiB4ODYtNjQgcmVsb2NhdGlvbiB0eXBlcyAqLwotI2RlZmluZSBSX1g4Nl82NF9OT05FCQkwCS8qIE5vIHJlbG9jICovCi0jZGVmaW5lIFJfWDg2XzY0XzY0CQkxCS8qIERpcmVjdCA2NCBiaXQgICovCi0jZGVmaW5lIFJfWDg2XzY0X1BDMzIJCTIJLyogUEMgcmVsYXRpdmUgMzIgYml0IHNpZ25lZCAqLwotI2RlZmluZSBSX1g4Nl82NF9HT1QzMgkJMwkvKiAzMiBiaXQgR09UIGVudHJ5ICovCi0jZGVmaW5lIFJfWDg2XzY0X1BMVDMyCQk0CS8qIDMyIGJpdCBQTFQgYWRkcmVzcyAqLwotI2RlZmluZSBSX1g4Nl82NF9DT1BZCQk1CS8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KLSNkZWZpbmUgUl9YODZfNjRfR0xPQl9EQVQJNgkvKiBDcmVhdGUgR09UIGVudHJ5ICovCi0jZGVmaW5lIFJfWDg2XzY0X0pVTVBfU0xPVAk3CS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KLSNkZWZpbmUgUl9YODZfNjRfUkVMQVRJVkUJOAkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCi0jZGVmaW5lIFJfWDg2XzY0X0dPVFBDUkVMCTkJLyogMzIgYml0IHNpZ25lZCBwYyByZWxhdGl2ZQotCQkJCQkgICBvZmZzZXQgdG8gR09UICovCi0jZGVmaW5lIFJfWDg2XzY0XzMyCQkxMAkvKiBEaXJlY3QgMzIgYml0IHplcm8gZXh0ZW5kZWQgKi8KLSNkZWZpbmUgUl9YODZfNjRfMzJTCQkxMQkvKiBEaXJlY3QgMzIgYml0IHNpZ24gZXh0ZW5kZWQgKi8KLSNkZWZpbmUgUl9YODZfNjRfMTYJCTEyCS8qIERpcmVjdCAxNiBiaXQgemVybyBleHRlbmRlZCAqLwotI2RlZmluZSBSX1g4Nl82NF9QQzE2CQkxMwkvKiAxNiBiaXQgc2lnbiBleHRlbmRlZCBwYyByZWxhdGl2ZSAqLwotI2RlZmluZSBSX1g4Nl82NF84CQkxNAkvKiBEaXJlY3QgOCBiaXQgc2lnbiBleHRlbmRlZCAgKi8KLSNkZWZpbmUgUl9YODZfNjRfUEM4CQkxNQkvKiA4IGJpdCBzaWduIGV4dGVuZGVkIHBjIHJlbGF0aXZlICovCi0KLSNkZWZpbmUgUl9YODZfNjRfTlVNCQkxNgotCi0vKgotICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCi0gKi8KLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTNjQKLSNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKLSNkZWZpbmUgRUxGX0FSQ0gJRU1fWDg2XzY0Ci0KLSNlbmRpZgotCi0jaW5jbHVkZSA8YXNtL3Zkc28uaD4KLQotZXh0ZXJuIHVuc2lnbmVkIGludCB2ZHNvX2VuYWJsZWQ7Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgotICovCi0jZGVmaW5lIGVsZl9jaGVja19hcmNoX2lhMzIoeCkgXAotCSgoKHgpLT5lX21hY2hpbmUgPT0gRU1fMzg2KSB8fCAoKHgpLT5lX21hY2hpbmUgPT0gRU1fNDg2KSkKLQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLQotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KQllbGZfY2hlY2tfYXJjaF9pYTMyKHgpCi0KLS8qIFNWUjQvaTM4NiBBQkkgKHBhZ2VzIDMtMzEsIDMtMzIpIHNheXMgdGhhdCB3aGVuIHRoZSBwcm9ncmFtIHN0YXJ0cyAlZWR4Ci0gICBjb250YWlucyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aGljaCBtaWdodCBiZSByZWdpc3RlcmVkIHVzaW5nIGBhdGV4aXQnLgotICAgVGhpcyBwcm92aWRlcyBhIG1lYW4gZm9yIHRoZSBkeW5hbWljIGxpbmtlciB0byBjYWxsIERUX0ZJTkkgZnVuY3Rpb25zIGZvcgotICAgc2hhcmVkIGxpYnJhcmllcyB0aGF0IGhhdmUgYmVlbiBsb2FkZWQgYmVmb3JlIHRoZSBjb2RlIHJ1bnMuCi0KLSAgIEEgdmFsdWUgb2YgMCB0ZWxscyB3ZSBoYXZlIG5vIHN1Y2ggaGFuZGxlci4KLQotICAgV2UgbWlnaHQgYXMgd2VsbCBtYWtlIHN1cmUgZXZlcnl0aGluZyBlbHNlIGlzIGNsZWFyZWQgdG9vIChleGNlcHQgZm9yICVlc3ApLAotICAganVzdCB0byBtYWtlIHRoaW5ncyBtb3JlIGRldGVybWluaXN0aWMuCi0gKi8KLSNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQkJXAotCWRvIHsJCQkJCVwKLQlfci0+YnggPSAwOyBfci0+Y3ggPSAwOyBfci0+ZHggPSAwOwlcCi0JX3ItPnNpID0gMDsgX3ItPmRpID0gMDsgX3ItPmJwID0gMDsJXAotCV9yLT5heCA9IDA7CQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiByZWdzIGlzIHN0cnVjdCBwdF9yZWdzLCBwcl9yZWcgaXMgZWxmX2dyZWdzZXRfdCAod2hpY2ggaXMKLSAqIG5vdyBzdHJ1Y3RfdXNlcl9yZWdzLCB0aGV5IGFyZSBkaWZmZXJlbnQpCi0gKi8KLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQlcCi1kbyB7CQkJCQkJXAotCXByX3JlZ1swXSA9IHJlZ3MtPmJ4OwkJCVwKLQlwcl9yZWdbMV0gPSByZWdzLT5jeDsJCQlcCi0JcHJfcmVnWzJdID0gcmVncy0+ZHg7CQkJXAotCXByX3JlZ1szXSA9IHJlZ3MtPnNpOwkJCVwKLQlwcl9yZWdbNF0gPSByZWdzLT5kaTsJCQlcCi0JcHJfcmVnWzVdID0gcmVncy0+YnA7CQkJXAotCXByX3JlZ1s2XSA9IHJlZ3MtPmF4OwkJCVwKLQlwcl9yZWdbN10gPSByZWdzLT5kcyAmIDB4ZmZmZjsJCVwKLQlwcl9yZWdbOF0gPSByZWdzLT5lcyAmIDB4ZmZmZjsJCVwKLQlwcl9yZWdbOV0gPSByZWdzLT5mcyAmIDB4ZmZmZjsJCVwKLQlzYXZlc2VnbWVudChncywgcHJfcmVnWzEwXSk7CQlcCi0JcHJfcmVnWzExXSA9IHJlZ3MtPm9yaWdfYXg7CQlcCi0JcHJfcmVnWzEyXSA9IHJlZ3MtPmlwOwkJCVwKLQlwcl9yZWdbMTNdID0gcmVncy0+Y3MgJiAweGZmZmY7CQlcCi0JcHJfcmVnWzE0XSA9IHJlZ3MtPmZsYWdzOwkJXAotCXByX3JlZ1sxNV0gPSByZWdzLT5zcDsJCQlcCi0JcHJfcmVnWzE2XSA9IHJlZ3MtPnNzICYgMHhmZmZmOwkJXAotfSB3aGlsZSAoMCk7Ci0KLSNkZWZpbmUgRUxGX1BMQVRGT1JNCSh1dHNuYW1lKCktPm1hY2hpbmUpCi0jZGVmaW5lIHNldF9wZXJzb25hbGl0eV82NGJpdCgpCWRvIHsgfSB3aGlsZSAoMCkKLQotI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KLSAqLwotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KQkJCVwKLQkoKHgpLT5lX21hY2hpbmUgPT0gRU1fWDg2XzY0KQotCi0jZGVmaW5lIGNvbXBhdF9lbGZfY2hlY2tfYXJjaCh4KQllbGZfY2hlY2tfYXJjaF9pYTMyKHgpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9pYTMyX3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGlwLCB1MzIgc3ApCi17Ci0JbG9hZHNlZ21lbnQoZnMsIDApOwotCWxvYWRzZWdtZW50KGRzLCBfX1VTRVIzMl9EUyk7Ci0JbG9hZHNlZ21lbnQoZXMsIF9fVVNFUjMyX0RTKTsKLQlsb2FkX2dzX2luZGV4KDApOwotCXJlZ3MtPmlwID0gaXA7Ci0JcmVncy0+c3AgPSBzcDsKLQlyZWdzLT5mbGFncyA9IFg4Nl9FRkxBR1NfSUY7Ci0JcmVncy0+Y3MgPSBfX1VTRVIzMl9DUzsKLQlyZWdzLT5zcyA9IF9fVVNFUjMyX0RTOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZWxmX2NvbW1vbl9pbml0KHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LAotCQkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCB1MTYgZHMpCi17Ci0JcmVncy0+YXggPSByZWdzLT5ieCA9IHJlZ3MtPmN4ID0gcmVncy0+ZHggPSAwOwotCXJlZ3MtPnNpID0gcmVncy0+ZGkgPSByZWdzLT5icCA9IDA7Ci0JcmVncy0+cjggPSByZWdzLT5yOSA9IHJlZ3MtPnIxMCA9IHJlZ3MtPnIxMSA9IDA7Ci0JcmVncy0+cjEyID0gcmVncy0+cjEzID0gcmVncy0+cjE0ID0gcmVncy0+cjE1ID0gMDsKLQl0LT5mcyA9IHQtPmdzID0gMDsKLQl0LT5mc2luZGV4ID0gdC0+Z3NpbmRleCA9IDA7Ci0JdC0+ZHMgPSB0LT5lcyA9IGRzOwotfQotCi0jZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJCQlcCi1kbyB7CQkJCQkJCVwKLQllbGZfY29tbW9uX2luaXQoJmN1cnJlbnQtPnRocmVhZCwgX3IsIDApOwlcCi0JY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lBMzIpOwkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJQ09NUEFUX0VMRl9QTEFUX0lOSVQocmVncywgbG9hZF9hZGRyKQkJXAotCWVsZl9jb21tb25faW5pdCgmY3VycmVudC0+dGhyZWFkLCByZWdzLCBfX1VTRVJfRFMpCi0KLSNkZWZpbmUJY29tcGF0X3N0YXJ0X3RocmVhZChyZWdzLCBpcCwgc3ApCQlcCi1kbyB7CQkJCQkJCVwKLQlzdGFydF9pYTMyX3RocmVhZChyZWdzLCBpcCwgc3ApOwkJXAotCXNldF9mcyhVU0VSX0RTKTsJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDT01QQVRfU0VUX1BFUlNPTkFMSVRZKGV4KQkJCVwKLWRvIHsJCQkJCQkJXAotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSkJCQlcCi0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CVwKLQllbHNlCQkJCQkJXAotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX0FCSV9QRU5ESU5HKTsJXAotCWN1cnJlbnQtPnBlcnNvbmFsaXR5IHw9IGZvcmNlX3BlcnNvbmFsaXR5MzI7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ09NUEFUX0VMRl9QTEFURk9STQkJCSgiaTY4NiIpCi0KLS8qCi0gKiByZWdzIGlzIHN0cnVjdCBwdF9yZWdzLCBwcl9yZWcgaXMgZWxmX2dyZWdzZXRfdCAod2hpY2ggaXMKLSAqIG5vdyBzdHJ1Y3RfdXNlcl9yZWdzLCB0aGV5IGFyZSBkaWZmZXJlbnQpLiBBc3N1bWVzIGN1cnJlbnQgaXMgdGhlIHByb2Nlc3MKLSAqIGdldHRpbmcgZHVtcGVkLgotICovCi0KLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJCQlcCi1kbyB7CQkJCQkJCQlcCi0JdW5zaWduZWQgdjsJCQkJCQlcCi0JKHByX3JlZylbMF0gPSAocmVncyktPnIxNTsJCQkJXAotCShwcl9yZWcpWzFdID0gKHJlZ3MpLT5yMTQ7CQkJCVwKLQkocHJfcmVnKVsyXSA9IChyZWdzKS0+cjEzOwkJCQlcCi0JKHByX3JlZylbM10gPSAocmVncyktPnIxMjsJCQkJXAotCShwcl9yZWcpWzRdID0gKHJlZ3MpLT5icDsJCQkJXAotCShwcl9yZWcpWzVdID0gKHJlZ3MpLT5ieDsJCQkJXAotCShwcl9yZWcpWzZdID0gKHJlZ3MpLT5yMTE7CQkJCVwKLQkocHJfcmVnKVs3XSA9IChyZWdzKS0+cjEwOwkJCQlcCi0JKHByX3JlZylbOF0gPSAocmVncyktPnI5OwkJCQlcCi0JKHByX3JlZylbOV0gPSAocmVncyktPnI4OwkJCQlcCi0JKHByX3JlZylbMTBdID0gKHJlZ3MpLT5heDsJCQkJXAotCShwcl9yZWcpWzExXSA9IChyZWdzKS0+Y3g7CQkJCVwKLQkocHJfcmVnKVsxMl0gPSAocmVncyktPmR4OwkJCQlcCi0JKHByX3JlZylbMTNdID0gKHJlZ3MpLT5zaTsJCQkJXAotCShwcl9yZWcpWzE0XSA9IChyZWdzKS0+ZGk7CQkJCVwKLQkocHJfcmVnKVsxNV0gPSAocmVncyktPm9yaWdfYXg7CQkJCVwKLQkocHJfcmVnKVsxNl0gPSAocmVncyktPmlwOwkJCQlcCi0JKHByX3JlZylbMTddID0gKHJlZ3MpLT5jczsJCQkJXAotCShwcl9yZWcpWzE4XSA9IChyZWdzKS0+ZmxhZ3M7CQkJCVwKLQkocHJfcmVnKVsxOV0gPSAocmVncyktPnNwOwkJCQlcCi0JKHByX3JlZylbMjBdID0gKHJlZ3MpLT5zczsJCQkJXAotCShwcl9yZWcpWzIxXSA9IGN1cnJlbnQtPnRocmVhZC5mczsJCQlcCi0JKHByX3JlZylbMjJdID0gY3VycmVudC0+dGhyZWFkLmdzOwkJCVwKLQlhc20oIm1vdmwgJSVkcywlMCIgOiAiPXIiICh2KSk7IChwcl9yZWcpWzIzXSA9IHY7CVwKLQlhc20oIm1vdmwgJSVlcywlMCIgOiAiPXIiICh2KSk7IChwcl9yZWcpWzI0XSA9IHY7CVwKLQlhc20oIm1vdmwgJSVmcywlMCIgOiAiPXIiICh2KSk7IChwcl9yZWcpWzI1XSA9IHY7CVwKLQlhc20oIm1vdmwgJSVncywlMCIgOiAiPXIiICh2KSk7IChwcl9yZWcpWzI2XSA9IHY7CVwKLX0gd2hpbGUgKDApOwotCi0vKiBJJ20gbm90IHN1cmUgaWYgd2UgY2FuIHVzZSAnLScgaGVyZSAqLwotI2RlZmluZSBFTEZfUExBVEZPUk0gICAgICAgKCJ4ODZfNjQiKQotZXh0ZXJuIHZvaWQgc2V0X3BlcnNvbmFsaXR5XzY0Yml0KHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfdnN5c2NhbGwzMjsKLWV4dGVybiBpbnQgZm9yY2VfcGVyc29uYWxpdHkzMjsKLQotI2VuZGlmIC8qICFDT05GSUdfWDg2XzMyICovCi0KLSNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKLSNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgotCi0vKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAotICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCi0gICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQotICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KLQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UJCShUQVNLX1NJWkUgLyAzICogMikKLQotLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAotICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAgVGhpcyBjb3VsZCBiZSBkb25lIGluIHVzZXIgc3BhY2UsCi0gICBidXQgaXQncyBub3QgZWFzeSwgYW5kIHdlJ3ZlIGFscmVhZHkgZG9uZSBpdCBoZXJlLiAgKi8KLQotI2RlZmluZSBFTEZfSFdDQVAJCShib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5WzBdKQotCi0vKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KLSAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCi0gICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KLQotICAgRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25seSBvcHRpbWl6YXRpb25zIGZvciB0aGUgSW50ZWwgZ2VuZXJhdGlvbnMsCi0gICBidXQgdGhhdCBjb3VsZCBjaGFuZ2UuLi4gKi8KLQotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eV82NGJpdCgpCi0KLS8qCi0gKiBBbiBleGVjdXRhYmxlIGZvciB3aGljaCBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoKSByZXR1cm5zIFRSVUUgd2lsbAotICogaGF2ZSB0aGUgUkVBRF9JTVBMSUVTX0VYRUMgcGVyc29uYWxpdHkgZmxhZyBzZXQgYXV0b21hdGljYWxseS4KLSAqLwotI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGV4ZWN1dGFibGVfc3RhY2spCVwKLQkoZXhlY3V0YWJsZV9zdGFjayAhPSBFWFNUQUNLX0RJU0FCTEVfWCkKLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi0jZGVmaW5lCUFSQ0hfRExJTkZPX0lBMzIodmRzb19lbmFibGVkKQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlpZiAodmRzb19lbmFibGVkKSB7CQkJCQkJXAotCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPLAlWRFNPX0VOVFJZKTsJCQlcCi0JCU5FV19BVVhfRU5UKEFUX1NZU0lORk9fRUhEUiwgVkRTT19DVVJSRU5UX0JBU0UpOwlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQotI2RlZmluZSBWRFNPX0hJR0hfQkFTRQkJKF9fZml4X3RvX3ZpcnQoRklYX1ZEU08pKQotCi0jZGVmaW5lIEFSQ0hfRExJTkZPCQlBUkNIX0RMSU5GT19JQTMyKHZkc29fZW5hYmxlZCkKLQotLyogdXBkYXRlIEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggaWYgdGhlIG51bWJlciBvZiBORVdfQVVYX0VOVCBlbnRyaWVzIGNoYW5nZXMgKi8KLQotI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwotCi0jZGVmaW5lIFZEU09fSElHSF9CQVNFCQkweGZmZmZlMDAwVSAvKiBDT05GSUdfQ09NUEFUX1ZEU08gYWRkcmVzcyAqLwotCi0vKiAxR0IgZm9yIDY0Yml0LCA4TUIgZm9yIDMyYml0ICovCi0jZGVmaW5lIFNUQUNLX1JORF9NQVNLICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IDB4N2ZmIDogMHgzZmZmZmYpCi0KLSNkZWZpbmUgQVJDSF9ETElORk8JCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlpZiAodmRzb19lbmFibGVkKQkJCQkJCVwKLQkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLAkJCQlcCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+bW0tPmNvbnRleHQudmRzbyk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQVRfU1lTSU5GTwkJMzIKLQotI2RlZmluZSBDT01QQVRfQVJDSF9ETElORk8JQVJDSF9ETElORk9fSUEzMihzeXNjdGxfdnN5c2NhbGwzMikKLQotI2RlZmluZSBDT01QQVRfRUxGX0VUX0RZTl9CQVNFCShUQVNLX1VOTUFQUEVEX0JBU0UgKyAweDEwMDAwMDApCi0KLSNlbmRpZiAvKiAhQ09ORklHX1g4Nl8zMiAqLwotCi0jZGVmaW5lIFZEU09fQ1VSUkVOVF9CQVNFCSgodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvKQotCi0jZGVmaW5lIFZEU09fRU5UUlkJCQkJCQkJXAotCSgodW5zaWduZWQgbG9uZylWRFNPMzJfU1lNQk9MKFZEU09fQ1VSUkVOVF9CQVNFLCB2c3lzY2FsbCkpCi0KLXN0cnVjdCBsaW51eF9iaW5wcm07Ci0KLSNkZWZpbmUgQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUyAxCi1leHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAotCQkJCSAgICAgICBpbnQgZXhlY3V0YWJsZV9zdGFjayk7Ci0KLWV4dGVybiBpbnQgc3lzY2FsbDMyX3NldHVwX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgaW50IGV4c3RhY2spOwotI2RlZmluZSBjb21wYXRfYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzCXN5c2NhbGwzMl9zZXR1cF9wYWdlcwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotI2RlZmluZSBhcmNoX3JhbmRvbWl6ZV9icmsgYXJjaF9yYW5kb21pemVfYnJrCi0KLSNlbmRpZiAvKiBBU01fWDg2X19FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9pbmNsdWRlL2FzbS14ODYvZW1lcmdlbmN5LXJlc3RhcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwZDBkOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZW1lcmdlbmN5LXJlc3RhcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fRU1FUkdFTkNZX1JFU1RBUlRfSAotI2RlZmluZSBBU01fWDg2X19FTUVSR0VOQ1lfUkVTVEFSVF9ICi0KLWVudW0gcmVib290X3R5cGUgewotCUJPT1RfVFJJUExFID0gJ3QnLAotCUJPT1RfS0JEID0gJ2snLAotI2lmZGVmIENPTkZJR19YODZfMzIKLQlCT09UX0JJT1MgPSAnYicsCi0jZW5kaWYKLQlCT09UX0FDUEkgPSAnYScsCi0JQk9PVF9FRkkgPSAnZScKLX07Ci0KLWV4dGVybiBlbnVtIHJlYm9vdF90eXBlIHJlYm9vdF90eXBlOwotCi1leHRlcm4gdm9pZCBtYWNoaW5lX2VtZXJnZW5jeV9yZXN0YXJ0KHZvaWQpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fRU1FUkdFTkNZX1JFU1RBUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VzNzAwMC9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFlNTBjMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0VTNzAwMF9BUElDX0gKLSNkZWZpbmUgX19BU01fRVM3MDAwX0FQSUNfSAotCi0jZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKLQotc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JICAgICAgICByZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCB0YXJnZXRfY3B1cyh2b2lkKQotewotI2lmIGRlZmluZWQgQ09ORklHX0VTNzAwMF9DTFVTVEVSRURfQVBJQwotCXJldHVybiBDUFVfTUFTS19BTEw7Ci0jZWxzZQotCXJldHVybiBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotI2VuZGlmCi19Ci0jZGVmaW5lIFRBUkdFVF9DUFVTCSh0YXJnZXRfY3B1cygpKQotCi0jaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfQ0xVU1RFUikKLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfTG93ZXN0UHJpbykKLSNkZWZpbmUgSU5UX0RFU1RfTU9ERQkJKDEpICAgIC8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jcyAqLwotI2RlZmluZSBOT19CQUxBTkNFX0lSUQkJKDEpCi0jdW5kZWYgIFdBS0VfU0VDT05EQVJZX1ZJQV9JTklUCi0jZGVmaW5lIFdBS0VfU0VDT05EQVJZX1ZJQV9NSVAKLSNlbHNlCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfRkxBVCkKLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfRml4ZWQpCi0jZGVmaW5lIElOVF9ERVNUX01PREUJCSgwKSAgICAvKiBwaHlzIGRlbGl2ZXJ5IHRvIHRhcmdldCBwcm9jcyAqLwotI2RlZmluZSBOT19CQUxBTkNFX0lSUQkJKDApCi0jdW5kZWYgIEFQSUNfREVTVF9MT0dJQ0FMCi0jZGVmaW5lIEFQSUNfREVTVF9MT0dJQ0FMCTB4MAotI2RlZmluZSBXQUtFX1NFQ09OREFSWV9WSUFfSU5JVAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KQotewotCXJldHVybiBwaHlzaWRfaXNzZXQoYml0LCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci19Ci0KLSNkZWZpbmUgYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAoYXBpY2lkICYgMHhGMCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9sZHIoaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nIGlkOwotCWlkID0geGFwaWNfcGh5c190b19sb2dfYXBpY2lkKGNwdSk7Ci0JcmV0dXJuIChTRVRfQVBJQ19MT0dJQ0FMX0lEKGlkKSk7Ci19Ci0KLS8qCi0gKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCi0gKgotICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMZFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCi0gKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7Ci0JdmFsID0gY2FsY3VsYXRlX2xkcihjcHUpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Ci19Ci0KLSNpZm5kZWYgQ09ORklHX1g4Nl9HRU5FUklDQVJDSAotZXh0ZXJuIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKTsKLSNlbmRpZgotCi1leHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKLXsKLQlpbnQgYXBpYyA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzLCB0YXJnZXQgY3B1cyAlbHhcbiIsCi0JCShhcGljX3ZlcnNpb25bYXBpY10gPT0gMHgxNCkgPwotCQkiUGh5c2ljYWwgQ2x1c3RlciIgOiAiTG9naWNhbCBDbHVzdGVyIiwgbnJfaW9hcGljcywgY3B1c19hZGRyKFRBUkdFVF9DUFVTKVswXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQotewotCWlmICghbXBzX2NwdSkKLQkJcmV0dXJuIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKLQllbHNlIGlmIChtcHNfY3B1IDwgTlJfQ1BVUykKLQkJcmV0dXJuIChpbnQpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7Ci0JZWxzZQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGFwaWNpZF90b19jcHVfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCi17Ci0Jc3RhdGljIGludCBpZCA9IDA7Ci0JcGh5c2lkX21hc2tfdCBtYXNrOwotCW1hc2sgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoaWQpOwotCSsraWQ7Ci0JcmV0dXJuIG1hc2s7Ci19Ci0KLWV4dGVybiB1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtdOwotLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19TTVAKLSAgICAgICBpZiAoY3B1ID49IE5SX0NQVVMpCi0JICAgICAgIHJldHVybiBCQURfQVBJQ0lEOwotICAgICAgIHJldHVybiAoaW50KWNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07Ci0jZWxzZQotCXJldHVybiBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCi17Ci0JLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCi0JcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweGZmKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCi17Ci19Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOwotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgY3B1X3BoeXNpY2FsX2FwaWNpZCkKLXsKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCi17Ci0JaW50IG51bV9iaXRzX3NldDsKLQlpbnQgY3B1c19mb3VuZCA9IDA7Ci0JaW50IGNwdTsKLQlpbnQgYXBpY2lkOwotCi0JbnVtX2JpdHNfc2V0ID0gY3B1c193ZWlnaHQoY3B1bWFzayk7Ci0JLyogUmV0dXJuIGlkIHRvIGFsbCAqLwotCWlmIChudW1fYml0c19zZXQgPT0gTlJfQ1BVUykKLSNpZiBkZWZpbmVkIENPTkZJR19FUzcwMDBfQ0xVU1RFUkVEX0FQSUMKLQkJcmV0dXJuIDB4RkY7Ci0jZWxzZQotCQlyZXR1cm4gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKDApOwotI2VuZGlmCi0JLyoKLQkgKiBUaGUgY3B1cyBpbiB0aGUgbWFzayBtdXN0IGFsbCBiZSBvbiB0aGUgYXBpYyBjbHVzdGVyLiAgSWYgYXJlIG5vdAotCSAqIG9uIHRoZSBzYW1lIGFwaWNpZCBjbHVzdGVyIHJldHVybiBkZWZhdWx0IHZhbHVlIG9mIFRBUkdFVF9DUFVTLgotCSAqLwotCWNwdSA9IGZpcnN0X2NwdShjcHVtYXNrKTsKLQlhcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKLQl3aGlsZSAoY3B1c19mb3VuZCA8IG51bV9iaXRzX3NldCkgewotCQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1bWFzaykpIHsKLQkJCWludCBuZXdfYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0JCQlpZiAoYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAhPQotCQkJCQlhcGljaWRfY2x1c3RlcihuZXdfYXBpY2lkKSl7Ci0JCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7Ci0jaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCi0JCQkJcmV0dXJuIDB4RkY7Ci0jZWxzZQotCQkJCXJldHVybiBjcHVfdG9fbG9naWNhbF9hcGljaWQoMCk7Ci0jZW5kaWYKLQkJCX0KLQkJCWFwaWNpZCA9IG5ld19hcGljaWQ7Ci0JCQljcHVzX2ZvdW5kKys7Ci0JCX0KLQkJY3B1Kys7Ci0JfQotCXJldHVybiBhcGljaWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX0VTNzAwMF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9mYi5oIGIvaW5jbHVkZS9hc20teDg2L2ZiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYTM4ZGJkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9mYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19GQl9ICi0jZGVmaW5lIEFTTV9YODZfX0ZCX0gKLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmJfcGdwcm90ZWN0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQl1bnNpZ25lZCBsb25nIG9mZikKLXsKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQotCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1leHRlcm4gaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19GQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwLmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZTMzYTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19GSVhNQVBfSAotI2RlZmluZSBBU01fWDg2X19GSVhNQVBfSAotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJmaXhtYXBfMzIuaCIKLSNlbHNlCi0jIGluY2x1ZGUgImZpeG1hcF82NC5oIgotI2VuZGlmCi0KLWV4dGVybiBpbnQgZml4bWFwc19zZXQ7Ci0KLXZvaWQgX19uYXRpdmVfc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHB0ZV90IHB0ZSk7Ci12b2lkIG5hdGl2ZV9zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCi0JCQkJdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncykKLXsKLQluYXRpdmVfc2V0X2ZpeG1hcChpZHgsIHBoeXMsIGZsYWdzKTsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIHNldF9maXhtYXAoaWR4LCBwaHlzKQkJCQlcCi0JX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCi0KLS8qCi0gKiBTb21lIGhhcmR3YXJlIHdhbnRzIHRvIGdldCBmaXhtYXBwZWQgd2l0aG91dCBjYWNoaW5nLgotICovCi0jZGVmaW5lIHNldF9maXhtYXBfbm9jYWNoZShpZHgsIHBoeXMpCQkJXAotCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCi0KLSNkZWZpbmUgY2xlYXJfZml4bWFwKGlkeCkJCQlcCi0JX19zZXRfZml4bWFwKGlkeCwgMCwgX19wZ3Byb3QoMCkpCi0KLSNkZWZpbmUgX19maXhfdG9fdmlydCh4KQkoRklYQUREUl9UT1AgLSAoKHgpIDw8IFBBR0VfU0hJRlQpKQotI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpCSgoRklYQUREUl9UT1AgLSAoKHgpJlBBR0VfTUFTSykpID4+IFBBR0VfU0hJRlQpCi0KLWV4dGVybiB2b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCk7Ci0KLS8qCi0gKiAnaW5kZXggdG8gYWRkcmVzcycgdHJhbnNsYXRpb24uIElmIGFueW9uZSB0cmllcyB0byB1c2UgdGhlIGlkeAotICogZGlyZWN0bHkgd2l0aG91dCB0cmFuc2xhdGlvbiwgd2UgY2F0Y2ggdGhlIGJ1ZyB3aXRoIGEgTlVMTC1kZWZlcmVuY2UKLSAqIGtlcm5lbCBvb3BzLiBJbGxlZ2FsIHJhbmdlcyBvZiBpbmNvbWluZyBpbmRpY2VzIGFyZSBjYXVnaHQgdG9vLgotICovCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKLXsKLQkvKgotCSAqIHRoaXMgYnJhbmNoIGdldHMgY29tcGxldGVseSBlbGltaW5hdGVkIGFmdGVyIGlubGluaW5nLAotCSAqIGV4Y2VwdCB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGZpeGFkZHIgaW5kaWNlcyBpbiBhbgotCSAqIGlsbGVnYWwgd2F5LiAoc3VjaCBhcyBtaXhpbmcgdXAgYWRkcmVzcyB0eXBlcyBvciB1c2luZwotCSAqIG91dC1vZi1yYW5nZSBpbmRpY2VzKS4KLQkgKgotCSAqIElmIGl0IGRvZXNuJ3QgZ2V0IHJlbW92ZWQsIHRoZSBsaW5rZXIgd2lsbCBjb21wbGFpbgotCSAqIGxvdWRseSB3aXRoIGEgcmVhc29uYWJseSBjbGVhciBlcnJvciBtZXNzYWdlLi4KLQkgKi8KLQlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykKLQkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOwotCi0JcmV0dXJuIF9fZml4X3RvX3ZpcnQoaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fZml4KGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFkZHIpCi17Ci0JQlVHX09OKHZhZGRyID49IEZJWEFERFJfVE9QIHx8IHZhZGRyIDwgRklYQUREUl9TVEFSVCk7Ci0JcmV0dXJuIF9fdmlydF90b19maXgodmFkZHIpOwotfQotI2VuZGlmIC8qIEFTTV9YODZfX0ZJWE1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NDQwMDIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcF8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBmaXhtYXAuaDogY29tcGlsZS10aW1lIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIKLSAqCi0gKiBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OQotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fRklYTUFQXzMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fRklYTUFQXzMyX0gKLQotCi0vKiB1c2VkIGJ5IHZtYWxsb2MuYywgdnN5c2NhbGwubGRzLlMuCi0gKgotICogTGVhdmUgb25lIGVtcHR5IHBhZ2UgYmV0d2VlbiB2bWFsbG9jJ2VkIGFyZWFzIGFuZAotICogdGhlIHN0YXJ0IG9mIHRoZSBmaXhtYXAuCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fRklYQUREUl9UT1A7Ci0jZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVCAgICAgX19maXhfdG9fdmlydChGSVhfVkRTTykKLSNkZWZpbmUgRklYQUREUl9VU0VSX0VORCAgICAgICBfX2ZpeF90b192aXJ0KEZJWF9WRFNPIC0gMSkKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpZmRlZiBDT05GSUdfSElHSE1FTQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotI2VuZGlmCi0KLS8qCi0gKiBIZXJlIHdlIGRlZmluZSBhbGwgdGhlIGNvbXBpbGUtdGltZSAnc3BlY2lhbCcgdmlydHVhbAotICogYWRkcmVzc2VzLiBUaGUgcG9pbnQgaXMgdG8gaGF2ZSBhIGNvbnN0YW50IGFkZHJlc3MgYXQKLSAqIGNvbXBpbGUgdGltZSwgYnV0IHRvIHNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvbmx5Ci0gKiBpbiB0aGUgYm9vdCBwcm9jZXNzLiBXZSBhbGxvY2F0ZSB0aGVzZSBzcGVjaWFsIGFkZHJlc3NlcwotICogZnJvbSB0aGUgZW5kIG9mIHZpcnR1YWwgbWVtb3J5ICgweGZmZmZmMDAwKSBiYWNrd2FyZHMuCi0gKiBBbHNvIHRoaXMgbGV0cyB1cyBkbyBmYWlsLXNhZmUgdm1hbGxvYygpLCB3ZQotICogY2FuIGd1YXJhbnRlZSB0aGF0IHRoZXNlIHNwZWNpYWwgYWRkcmVzc2VzIGFuZAotICogdm1hbGxvYygpLWVkIGFkZHJlc3NlcyBuZXZlciBvdmVybGFwLgotICoKLSAqIHRoZXNlICdjb21waWxlLXRpbWUgYWxsb2NhdGVkJyBtZW1vcnkgYnVmZmVycyBhcmUKLSAqIGZpeGVkLXNpemUgNGsgcGFnZXMuIChvciBsYXJnZXIgaWYgdXNlZCB3aXRoIGFuIGluY3JlbWVudAotICogaGlnaGdlciB0aGFuIDEpIHVzZSBmaXhtYXBfc2V0KGlkeCxwaHlzKSB0byBhc3NvY2lhdGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB3aXRoIGZpeG1hcCBpbmRpY2VzLgotICoKLSAqIFRMQiBlbnRyaWVzIG9mIHN1Y2ggYnVmZmVycyB3aWxsIG5vdCBiZSBmbHVzaGVkIGFjcm9zcwotICogdGFzayBzd2l0Y2hlcy4KLSAqLwotZW51bSBmaXhlZF9hZGRyZXNzZXMgewotCUZJWF9IT0xFLAotCUZJWF9WRFNPLAotCUZJWF9EQkdQX0JBU0UsCi0JRklYX0VBUkxZQ09OX01FTV9CQVNFLAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCUZJWF9BUElDX0JBU0UsCS8qIGxvY2FsIChDUFUpIEFQSUMpIC0tIHJlcXVpcmVkIGZvciBTTVAgb3Igbm90ICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQlGSVhfSU9fQVBJQ19CQVNFXzAsCi0JRklYX0lPX0FQSUNfQkFTRV9FTkQgPSBGSVhfSU9fQVBJQ19CQVNFXzAgKyBNQVhfSU9fQVBJQ1MtMSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfVklTV1NfQVBJQwotCUZJWF9DT19DUFUsCS8qIENvYmFsdCB0aW1lciAqLwotCUZJWF9DT19BUElDLAkvKiBDb2JhbHQgQVBJQyBSZWRpcmVjdGlvbiBUYWJsZSAqLwotCUZJWF9MSV9QQ0lBLAkvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQSAqLwotCUZJWF9MSV9QQ0lCLAkvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQiAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9GMDBGX0JVRwotCUZJWF9GMDBGX0lEVCwJLyogVmlydHVhbCBtYXBwaW5nIGZvciBJRFQgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfQ1lDTE9ORV9USU1FUgotCUZJWF9DWUNMT05FX1RJTUVSLCAvKmN5Y2xvbmUgdGltZXIgcmVnaXN0ZXIqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlGSVhfS01BUF9CRUdJTiwJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KLQlGSVhfS01BUF9FTkQgPSBGSVhfS01BUF9CRUdJTisoS01fVFlQRV9OUipOUl9DUFVTKS0xLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRwotCUZJWF9QQ0lFX01DRkcsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLQlGSVhfUEFSQVZJUlRfQk9PVE1BUCwKLSNlbmRpZgotCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCi0JLyoKLQkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCi0JICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgotCSAqCi0JICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKLQkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKLQkgKi8KLSNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKLSNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0Ci0JRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQotCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAotCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAotCUZJWF9XUF9URVNULAotI2lmZGVmIENPTkZJR19BQ1BJCi0JRklYX0FDUElfQkVHSU4sCi0JRklYX0FDUElfRU5EID0gRklYX0FDUElfQkVHSU4gKyBGSVhfQUNQSV9QQUdFUyAtIDEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAotCUZJWF9PSENJMTM5NF9CQVNFLAotI2VuZGlmCi0JX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCi19OwotCi1leHRlcm4gdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSk7Ci0KLQotI2RlZmluZSBGSVhBRERSX1RPUAkoKHVuc2lnbmVkIGxvbmcpX19GSVhBRERSX1RPUCkKLQotI2RlZmluZSBfX0ZJWEFERFJfU0laRQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQotI2RlZmluZSBfX0ZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QIC0gX19GSVhBRERSX1NJWkUpCi0jZGVmaW5lIEZJWEFERFJfQk9PVF9TVEFSVAkoRklYQUREUl9UT1AgLSBfX0ZJWEFERFJfQk9PVF9TSVpFKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIEFTTV9YODZfX0ZJWE1BUF8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjQ3NTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcF82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fRklYTUFQXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fRklYTUFQXzY0X0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgotI2luY2x1ZGUgPGFzbS9lZmkuaD4KLQotLyoKLSAqIEhlcmUgd2UgZGVmaW5lIGFsbCB0aGUgY29tcGlsZS10aW1lICdzcGVjaWFsJyB2aXJ0dWFsCi0gKiBhZGRyZXNzZXMuIFRoZSBwb2ludCBpcyB0byBoYXZlIGEgY29uc3RhbnQgYWRkcmVzcyBhdAotICogY29tcGlsZSB0aW1lLCBidXQgdG8gc2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9ubHkKLSAqIGluIHRoZSBib290IHByb2Nlc3MuCi0gKgotICogVGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQotICogZml4ZWQtc2l6ZSA0ayBwYWdlcyAob3IgbGFyZ2VyIGlmIHVzZWQgd2l0aCBhbiBpbmNyZW1lbnQKLSAqIGhpZ2hlciB0aGFuIDEpLiBVc2Ugc2V0X2ZpeG1hcChpZHgscGh5cykgdG8gYXNzb2NpYXRlCi0gKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KLSAqCi0gKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKLSAqIHRhc2sgc3dpdGNoZXMuCi0gKi8KLQotZW51bSBmaXhlZF9hZGRyZXNzZXMgewotCVZTWVNDQUxMX0xBU1RfUEFHRSwKLQlWU1lTQ0FMTF9GSVJTVF9QQUdFID0gVlNZU0NBTExfTEFTVF9QQUdFCi0JCQkgICAgKyAoKFZTWVNDQUxMX0VORC1WU1lTQ0FMTF9TVEFSVCkgPj4gUEFHRV9TSElGVCkgLSAxLAotCVZTWVNDQUxMX0hQRVQsCi0JRklYX0RCR1BfQkFTRSwKLQlGSVhfRUFSTFlDT05fTUVNX0JBU0UsCi0JRklYX0FQSUNfQkFTRSwJLyogbG9jYWwgKENQVSkgQVBJQykgLS0gcmVxdWlyZWQgZm9yIFNNUCBvciBub3QgKi8KLQlGSVhfSU9fQVBJQ19CQVNFXzAsCi0JRklYX0lPX0FQSUNfQkFTRV9FTkQgPSBGSVhfSU9fQVBJQ19CQVNFXzAgKyBNQVhfSU9fQVBJQ1MgLSAxLAotCUZJWF9FRklfSU9fTUFQX0xBU1RfUEFHRSwKLQlGSVhfRUZJX0lPX01BUF9GSVJTVF9QQUdFID0gRklYX0VGSV9JT19NQVBfTEFTVF9QQUdFCi0JCQkJICArIE1BWF9FRklfSU9fUEFHRVMgLSAxLAotI2lmZGVmIENPTkZJR19QQVJBVklSVAotCUZJWF9QQVJBVklSVF9CT09UTUFQLAotI2VuZGlmCi0JX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKLSNpZmRlZiBDT05GSUdfQUNQSQotCUZJWF9BQ1BJX0JFR0lOLAotCUZJWF9BQ1BJX0VORCA9IEZJWF9BQ1BJX0JFR0lOICsgRklYX0FDUElfUEFHRVMgLSAxLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKLQlGSVhfT0hDSTEzOTRfQkFTRSwKLSNlbmRpZgotCS8qCi0JICogMjU2IHRlbXBvcmFyeSBib290LXRpbWUgbWFwcGluZ3MsIHVzZWQgYnkgZWFybHlfaW9yZW1hcCgpLAotCSAqIGJlZm9yZSBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4KLQkgKgotCSAqIFdlIHJvdW5kIGl0IHVwIHRvIHRoZSBuZXh0IDI1NiBwYWdlcyBib3VuZGFyeSBzbyB0aGF0IHdlCi0JICogY2FuIGhhdmUgYSBzaW5nbGUgcGdkIGVudHJ5IGFuZCBhIHNpbmdsZSBwdGUgdGFibGU6Ci0JICovCi0jZGVmaW5lIE5SX0ZJWF9CVE1BUFMJCTY0Ci0jZGVmaW5lIEZJWF9CVE1BUFNfU0xPVFMJNAotCUZJWF9CVE1BUF9FTkQgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgMjU2IC0KLQkJCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgMjU1KSwKLQlGSVhfQlRNQVBfQkVHSU4gPSBGSVhfQlRNQVBfRU5EICsgTlJfRklYX0JUTUFQUypGSVhfQlRNQVBTX1NMT1RTIC0gMSwKLQlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKLX07Ci0KLSNkZWZpbmUgRklYQUREUl9UT1AJKFZTWVNDQUxMX0VORC1QQUdFX1NJWkUpCi0jZGVmaW5lIEZJWEFERFJfU0laRQkoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIEZJWEFERFJfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQotCi0vKiBPbmx5IGNvdmVycyAzMmJpdCB2c3lzY2FsbHMgY3VycmVudGx5LiBOZWVkIGFub3RoZXIgc2V0IGZvciA2NGJpdC4gKi8KLSNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUCSgodW5zaWduZWQgbG9uZylWU1lTQ0FMTDMyX1ZTWVNDQUxMKQotI2RlZmluZSBGSVhBRERSX1VTRVJfRU5ECShGSVhBRERSX1VTRVJfU1RBUlQgKyBQQUdFX1NJWkUpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19GSVhNQVBfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20teDg2L2Zsb3BweS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDgzYTNhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9mbG9wcHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKgotICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1Ci0gKi8KLSNpZm5kZWYgQVNNX1g4Nl9fRkxPUFBZX0gKLSNkZWZpbmUgQVNNX1g4Nl9fRkxPUFBZX0gKLQotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotLyoKLSAqIFRoZSBETUEgY2hhbm5lbCB1c2VkIGJ5IHRoZSBmbG9wcHkgY29udHJvbGxlciBjYW5ub3QgYWNjZXNzIGRhdGEgYXQKLSAqIGFkZHJlc3NlcyA+PSAxNk1CCi0gKgotICogV2VudCBiYWNrIHRvIHRoZSAxTUIgbGltaXQsIGFzIHNvbWUgcGVvcGxlIGhhZCBwcm9ibGVtcyB3aXRoIHRoZSBmbG9wcHkKLSAqIGRyaXZlciBvdGhlcndpc2UuIEl0IGRvZXNuJ3QgbWF0dGVyIG11Y2ggZm9yIHBlcmZvcm1hbmNlIGFueXdheSwgYXMgbW9zdAotICogZmxvcHB5IGFjY2Vzc2VzIGdvIHRocm91Z2ggdGhlIHRyYWNrIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBfQ1JPU1NfNjRLQihhLCBzLCB2ZG1hKQkJCQkJCVwKLQkoISh2ZG1hKSAmJgkJCQkJCQlcCi0JICgodW5zaWduZWQgbG9uZykoYSkvS182NCAhPSAoKHVuc2lnbmVkIGxvbmcpKGEpICsgKHMpIC0gMSkgLyBLXzY0KSkKLQotI2RlZmluZSBDUk9TU182NEtCKGEsIHMpIF9DUk9TU182NEtCKGEsIHMsIHVzZV92aXJ0dWFsX2RtYSAmIDEpCi0KLQotI2RlZmluZSBTVyBmZF9yb3V0aW5lW3VzZV92aXJ0dWFsX2RtYSAmIDFdCi0jZGVmaW5lIENTVyBmZF9yb3V0aW5lW2Nhbl91c2VfdmlydHVhbF9kbWEgJiAxXQotCi0KLSNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmJfcChwb3J0KQotI2RlZmluZSBmZF9vdXRiKHZhbHVlLCBwb3J0KQlvdXRiX3AodmFsdWUsIHBvcnQpCi0KLSNkZWZpbmUgZmRfcmVxdWVzdF9kbWEoKQlDU1cuX3JlcXVlc3RfZG1hKEZMT1BQWV9ETUEsICJmbG9wcHkiKQotI2RlZmluZSBmZF9mcmVlX2RtYSgpCQlDU1cuX2ZyZWVfZG1hKEZMT1BQWV9ETUEpCi0jZGVmaW5lIGZkX2VuYWJsZV9pcnEoKQkJZW5hYmxlX2lycShGTE9QUFlfSVJRKQotI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpCWRpc2FibGVfaXJxKEZMT1BQWV9JUlEpCi0jZGVmaW5lIGZkX2ZyZWVfaXJxKCkJCWZyZWVfaXJxKEZMT1BQWV9JUlEsIE5VTEwpCi0jZGVmaW5lIGZkX2dldF9kbWFfcmVzaWR1ZSgpCVNXLl9nZXRfZG1hX3Jlc2lkdWUoRkxPUFBZX0RNQSkKLSNkZWZpbmUgZmRfZG1hX21lbV9hbGxvYyhzaXplKQlTVy5fZG1hX21lbV9hbGxvYyhzaXplKQotI2RlZmluZSBmZF9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pIFNXLl9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pCi0KLSNkZWZpbmUgRkxPUFBZX0NBTl9GQUxMQkFDS19PTl9OT0RNQQotCi1zdGF0aWMgaW50IHZpcnR1YWxfZG1hX2NvdW50Owotc3RhdGljIGludCB2aXJ0dWFsX2RtYV9yZXNpZHVlOwotc3RhdGljIGNoYXIgKnZpcnR1YWxfZG1hX2FkZHI7Ci1zdGF0aWMgaW50IHZpcnR1YWxfZG1hX21vZGU7Ci1zdGF0aWMgaW50IGRvaW5nX3BkbWE7Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBmbG9wcHlfaGFyZGludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JdW5zaWduZWQgY2hhciBzdDsKLQotI3VuZGVmIFRSQUNFX0ZMUFlfSU5UCi0KLSNpZmRlZiBUUkFDRV9GTFBZX0lOVAotCXN0YXRpYyBpbnQgY2FsbHM7Ci0Jc3RhdGljIGludCBieXRlczsKLQlzdGF0aWMgaW50IGRtYV93YWl0OwotI2VuZGlmCi0JaWYgKCFkb2luZ19wZG1hKQotCQlyZXR1cm4gZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCk7Ci0KLSNpZmRlZiBUUkFDRV9GTFBZX0lOVAotCWlmICghY2FsbHMpCi0JCWJ5dGVzID0gdmlydHVhbF9kbWFfY291bnQ7Ci0jZW5kaWYKLQotCXsKLQkJaW50IGxjb3VudDsKLQkJY2hhciAqbHB0cjsKLQotCQlzdCA9IDE7Ci0JCWZvciAobGNvdW50ID0gdmlydHVhbF9kbWFfY291bnQsIGxwdHIgPSB2aXJ0dWFsX2RtYV9hZGRyOwotCQkgICAgIGxjb3VudDsgbGNvdW50LS0sIGxwdHIrKykgewotCQkJc3QgPSBpbmIodmlydHVhbF9kbWFfcG9ydCArIDQpICYgMHhhMDsKLQkJCWlmIChzdCAhPSAweGEwKQotCQkJCWJyZWFrOwotCQkJaWYgKHZpcnR1YWxfZG1hX21vZGUpCi0JCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0ICsgNSk7Ci0JCQllbHNlCi0JCQkJKmxwdHIgPSBpbmJfcCh2aXJ0dWFsX2RtYV9wb3J0ICsgNSk7Ci0JCX0KLQkJdmlydHVhbF9kbWFfY291bnQgPSBsY291bnQ7Ci0JCXZpcnR1YWxfZG1hX2FkZHIgPSBscHRyOwotCQlzdCA9IGluYih2aXJ0dWFsX2RtYV9wb3J0ICsgNCk7Ci0JfQotCi0jaWZkZWYgVFJBQ0VfRkxQWV9JTlQKLQljYWxscysrOwotI2VuZGlmCi0JaWYgKHN0ID09IDB4MjApCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQlpZiAoIShzdCAmIDB4MjApKSB7Ci0JCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7Ci0JCXZpcnR1YWxfZG1hX2NvdW50ID0gMDsKLSNpZmRlZiBUUkFDRV9GTFBZX0lOVAotCQlwcmludGsoImNvdW50PSV4LCByZXNpZHVlPSV4IGNhbGxzPSVkIGJ5dGVzPSVkIGRtYV93YWl0PSVkXG4iLAotCQkgICAgICAgdmlydHVhbF9kbWFfY291bnQsIHZpcnR1YWxfZG1hX3Jlc2lkdWUsIGNhbGxzLCBieXRlcywKLQkJICAgICAgIGRtYV93YWl0KTsKLQkJY2FsbHMgPSAwOwotCQlkbWFfd2FpdCA9IDA7Ci0jZW5kaWYKLQkJZG9pbmdfcGRtYSA9IDA7Ci0JCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCi0JaWYgKCF2aXJ0dWFsX2RtYV9jb3VudCkKLQkJZG1hX3dhaXQrKzsKLSNlbmRpZgotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgZmRfZGlzYWJsZV9kbWEodm9pZCkKLXsKLQlpZiAoIShjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMSkpCi0JCWRpc2FibGVfZG1hKEZMT1BQWV9ETUEpOwotCWRvaW5nX3BkbWEgPSAwOwotCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7Ci0JdmlydHVhbF9kbWFfY291bnQgPSAwOwotfQotCi1zdGF0aWMgaW50IHZkbWFfcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZkbWFfbm9wKHVuc2lnbmVkIGludCBkdW1teSkKLXsKLX0KLQotCi1zdGF0aWMgaW50IHZkbWFfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkdW1teSkKLXsKLQlyZXR1cm4gdmlydHVhbF9kbWFfY291bnQgKyB2aXJ0dWFsX2RtYV9yZXNpZHVlOwotfQotCi0KLXN0YXRpYyBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKLXsKLQlpZiAoY2FuX3VzZV92aXJ0dWFsX2RtYSkKLQkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LAotCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKLQllbHNlCi0JCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAotCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JcmV0dXJuIF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX05PUkVUUlksIGdldF9vcmRlcihzaXplKSk7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdmRtYV9tZW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZyl2bWFsbG9jKHNpemUpOwotCi19Ci0KLSNkZWZpbmUgbm9kbWFfbWVtX2FsbG9jKHNpemUpIHZkbWFfbWVtX2FsbG9jKHNpemUpCi0KLXN0YXRpYyB2b2lkIF9mZF9kbWFfbWVtX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpCi0JCXZmcmVlKCh2b2lkICopYWRkcik7Ci0JZWxzZQotCQlmcmVlX3BhZ2VzKGFkZHIsIGdldF9vcmRlcihzaXplKSk7Ci19Ci0KLSNkZWZpbmUgZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpICBfZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpCi0KLXN0YXRpYyB2b2lkIF9mZF9jaG9zZV9kbWFfbW9kZShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JaWYgKGNhbl91c2VfdmlydHVhbF9kbWEgPT0gMikgewotCQlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSB8fAotCQkgICAgaXNhX3ZpcnRfdG9fYnVzKGFkZHIpID49IDB4MTAwMDAwMCB8fAotCQkgICAgX0NST1NTXzY0S0IoYWRkciwgc2l6ZSwgMCkpCi0JCQl1c2VfdmlydHVhbF9kbWEgPSAxOwotCQllbHNlCi0JCQl1c2VfdmlydHVhbF9kbWEgPSAwOwotCX0gZWxzZSB7Ci0JCXVzZV92aXJ0dWFsX2RtYSA9IGNhbl91c2VfdmlydHVhbF9kbWEgJiAxOwotCX0KLX0KLQotI2RlZmluZSBmZF9jaG9zZV9kbWFfbW9kZShhZGRyLCBzaXplKSBfZmRfY2hvc2VfZG1hX21vZGUoYWRkciwgc2l6ZSkKLQotCi1zdGF0aWMgaW50IHZkbWFfZG1hX3NldHVwKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbykKLXsKLQlkb2luZ19wZG1hID0gMTsKLQl2aXJ0dWFsX2RtYV9wb3J0ID0gaW87Ci0JdmlydHVhbF9kbWFfbW9kZSA9IChtb2RlID09IERNQV9NT0RFX1dSSVRFKTsKLQl2aXJ0dWFsX2RtYV9hZGRyID0gYWRkcjsKLQl2aXJ0dWFsX2RtYV9jb3VudCA9IHNpemU7Ci0JdmlydHVhbF9kbWFfcmVzaWR1ZSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGFyZF9kbWFfc2V0dXAoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKQotewotI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKLQlpZiAoQ1JPU1NfNjRLQihhZGRyLCBzaXplKSkgewotCQlwcmludGsoIkRNQSBjcm9zc2luZyA2NC1LIGJvdW5kYXJ5ICVwLSVwXG4iLCBhZGRyLCBhZGRyK3NpemUpOwotCQlyZXR1cm4gLTE7Ci0JfQotI2VuZGlmCi0JLyogYWN0dWFsLCBwaHlzaWNhbCBETUEgKi8KLQlkb2luZ19wZG1hID0gMDsKLQljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7Ci0Jc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsIG1vZGUpOwotCXNldF9kbWFfYWRkcihGTE9QUFlfRE1BLCBpc2FfdmlydF90b19idXMoYWRkcikpOwotCXNldF9kbWFfY291bnQoRkxPUFBZX0RNQSwgc2l6ZSk7Ci0JZW5hYmxlX2RtYShGTE9QUFlfRE1BKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBmZF9yb3V0aW5lX2wgewotCWludCAoKl9yZXF1ZXN0X2RtYSkodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpOwotCXZvaWQgKCpfZnJlZV9kbWEpKHVuc2lnbmVkIGludCBkbWFucik7Ci0JaW50ICgqX2dldF9kbWFfcmVzaWR1ZSkodW5zaWduZWQgaW50IGR1bW15KTsKLQl1bnNpZ25lZCBsb25nICgqX2RtYV9tZW1fYWxsb2MpKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0JaW50ICgqX2RtYV9zZXR1cCkoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKTsKLX0gZmRfcm91dGluZVtdID0gewotCXsKLQkJcmVxdWVzdF9kbWEsCi0JCWZyZWVfZG1hLAotCQlnZXRfZG1hX3Jlc2lkdWUsCi0JCWRtYV9tZW1fYWxsb2MsCi0JCWhhcmRfZG1hX3NldHVwCi0JfSwKLQl7Ci0JCXZkbWFfcmVxdWVzdF9kbWEsCi0JCXZkbWFfbm9wLAotCQl2ZG1hX2dldF9kbWFfcmVzaWR1ZSwKLQkJdmRtYV9tZW1fYWxsb2MsCi0JCXZkbWFfZG1hX3NldHVwCi0JfQotfTsKLQotCi1zdGF0aWMgaW50IEZEQzEgPSAweDNmMDsKLXN0YXRpYyBpbnQgRkRDMiA9IC0xOwotCi0vKgotICogRmxvcHB5IHR5cGVzIGFyZSBzdG9yZWQgaW4gdGhlIHJ0YydzIENNT1MgUkFNIGFuZCBzbyBydGNfbG9jawotICogaXMgbmVlZGVkIHRvIHByZXZlbnQgY29ycnVwdGVkIENNT1MgUkFNIGluIGNhc2UgImluc21vZCBmbG9wcHkiCi0gKiBjb2luY2lkZXMgd2l0aCBhbm90aGVyIHJ0YyBDTU9TIHVzZXIuCQlQYXVsIEcuCi0gKi8KLSNkZWZpbmUgRkxPUFBZMF9UWVBFCQkJCQlcCi0oewkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJXAotCXVuc2lnbmVkIGNoYXIgdmFsOwkJCQlcCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CQlcCi0JdmFsID0gKENNT1NfUkVBRCgweDEwKSA+PiA0KSAmIDE1OwkJXAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CVwKLQl2YWw7CQkJCQkJXAotfSkKLQotI2RlZmluZSBGTE9QUFkxX1RZUEUJCQkJCVwKLSh7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQlcCi0JdW5zaWduZWQgY2hhciB2YWw7CQkJCVwKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsJCVwKLQl2YWwgPSBDTU9TX1JFQUQoMHgxMCkgJiAxNTsJCQlcCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsJXAotCXZhbDsJCQkJCQlcCi19KQotCi0jZGVmaW5lIE5fRkRDIDIKLSNkZWZpbmUgTl9EUklWRSA4Ci0KLSNkZWZpbmUgRVhUUkFfRkxPUFBZX1BBUkFNUwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fRkxPUFBZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9mdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9mdHJhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwZTAwNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZnRyYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0ZUUkFDRV9ICi0jZGVmaW5lIEFTTV9YODZfX0ZUUkFDRV9ICi0KLSNpZmRlZiBDT05GSUdfRlRSQUNFCi0jZGVmaW5lIE1DT1VOVF9BRERSCQkoKGxvbmcpKG1jb3VudCkpCi0jZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUJNSAvKiBzaXplb2YgbWNvdW50IGNhbGwgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIG1jb3VudCh2b2lkKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogQ09ORklHX0ZUUkFDRSAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fRlRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9mdXRleC5oIGIvaW5jbHVkZS9hc20teDg2L2Z1dGV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YjkyNGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Z1dGV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19GVVRFWF9ICi0jZGVmaW5lIEFTTV9YODZfX0ZVVEVYX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLSNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AxKGluc24sIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpCVwKLQlhc20gdm9sYXRpbGUoIjE6XHQiIGluc24gIlxuIgkJCQlcCi0JCSAgICAgIjI6XHQuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCi0JCSAgICAgIjM6XHRtb3ZcdCUzLCAlMVxuIgkJCVwKLQkJICAgICAiXHRqbXBcdDJiXG4iCQkJCVwKLQkJICAgICAiXHQucHJldmlvdXNcbiIJCQkJXAotCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCQkJXAotCQkgICAgIDogIj1yIiAob2xkdmFsKSwgIj1yIiAocmV0KSwgIittIiAoKnVhZGRyKQlcCi0JCSAgICAgOiAiaSIgKC1FRkFVTFQpLCAiMCIgKG9wYXJnKSwgIjEiICgwKSkKLQotI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcDIoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykJXAotCWFzbSB2b2xhdGlsZSgiMTpcdG1vdmwJJTIsICUwXG4iCQkJXAotCQkgICAgICJcdG1vdmxcdCUwLCAlM1xuIgkJCQlcCi0JCSAgICAgIlx0IiBpbnNuICJcbiIJCQkJXAotCQkgICAgICIyOlx0IiBMT0NLX1BSRUZJWCAiY21weGNoZ2wgJTMsICUyXG4iCVwKLQkJICAgICAiXHRqbnpcdDFiXG4iCQkJCVwKLQkJICAgICAiMzpcdC5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCVwKLQkJICAgICAiNDpcdG1vdlx0JTUsICUxXG4iCQkJXAotCQkgICAgICJcdGptcFx0M2JcbiIJCQkJXAotCQkgICAgICJcdC5wcmV2aW91c1xuIgkJCQlcCi0JCSAgICAgX0FTTV9FWFRBQkxFKDFiLCA0YikJCQlcCi0JCSAgICAgX0FTTV9FWFRBQkxFKDJiLCA0YikJCQlcCi0JCSAgICAgOiAiPSZhIiAob2xkdmFsKSwgIj0mciIgKHJldCksCQlcCi0JCSAgICAgICAiK20iICgqdWFkZHIpLCAiPSZyIiAodGVtKQkJXAotCQkgICAgIDogInIiIChvcGFyZyksICJpIiAoLUVGQVVMVCksICIxIiAoMCkpCi0KLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2F0b21pY19vcF9pbnVzZXIoaW50IGVuY29kZWRfb3AsIGludCBfX3VzZXIgKnVhZGRyKQotewotCWludCBvcCA9IChlbmNvZGVkX29wID4+IDI4KSAmIDc7Ci0JaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwotCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwotCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOwotCi0JaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQotCQlvcGFyZyA9IDEgPDwgb3Bhcmc7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2X0JTV0FQKQotCS8qIFJlYWwgaTM4NiBtYWNoaW5lcyBjYW4gb25seSBzdXBwb3J0IEZVVEVYX09QX1NFVCAqLwotCWlmIChvcCAhPSBGVVRFWF9PUF9TRVQgJiYgYm9vdF9jcHVfZGF0YS54ODYgPT0gMykKLQkJcmV0dXJuIC1FTk9TWVM7Ci0jZW5kaWYKLQotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0KLQlzd2l0Y2ggKG9wKSB7Ci0JY2FzZSBGVVRFWF9PUF9TRVQ6Ci0JCV9fZnV0ZXhfYXRvbWljX29wMSgieGNoZ2wgJTAsICUyIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgRlVURVhfT1BfQUREOgotCQlfX2Z1dGV4X2F0b21pY19vcDEoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMiIsIHJldCwgb2xkdmFsLAotCQkJCSAgIHVhZGRyLCBvcGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgRlVURVhfT1BfT1I6Ci0JCV9fZnV0ZXhfYXRvbWljX29wMigib3JsICU0LCAlMyIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwotCQlicmVhazsKLQljYXNlIEZVVEVYX09QX0FORE46Ci0JCV9fZnV0ZXhfYXRvbWljX29wMigiYW5kbCAlNCwgJTMiLCByZXQsIG9sZHZhbCwgdWFkZHIsIH5vcGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgRlVURVhfT1BfWE9SOgotCQlfX2Z1dGV4X2F0b21pY19vcDIoInhvcmwgJTQsICUzIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9TWVM7Ci0JfQotCi0JcGFnZWZhdWx0X2VuYWJsZSgpOwotCi0JaWYgKCFyZXQpIHsKLQkJc3dpdGNoIChjbXApIHsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6Ci0JCQlyZXQgPSAob2xkdmFsID09IGNtcGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfTkU6Ci0JCQlyZXQgPSAob2xkdmFsICE9IGNtcGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfTFQ6Ci0JCQlyZXQgPSAob2xkdmFsIDwgY21wYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9HRToKLQkJCXJldCA9IChvbGR2YWwgPj0gY21wYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9MRToKLQkJCXJldCA9IChvbGR2YWwgPD0gY21wYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9HVDoKLQkJCXJldCA9IChvbGR2YWwgPiBjbXBhcmcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXQgPSAtRU5PU1lTOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLAotCQkJCQkJaW50IG5ld3ZhbCkKLXsKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9CU1dBUCkKLQkvKiBSZWFsIGkzODYgbWFjaGluZXMgaGF2ZSBubyBjbXB4Y2hnIGluc3RydWN0aW9uICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDMpCi0JCXJldHVybiAtRU5PU1lTOwotI2VuZGlmCi0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JYXNtIHZvbGF0aWxlKCIxOlx0IiBMT0NLX1BSRUZJWCAiY21weGNoZ2wgJTMsICUxXG4iCi0JCSAgICAgIjI6XHQuc2VjdGlvbiAuZml4dXAsIFwiYXhcIlxuIgotCQkgICAgICIzOlx0bW92ICAgICAlMiwgJTBcbiIKLQkJICAgICAiXHRqbXAgICAgIDJiXG4iCi0JCSAgICAgIlx0LnByZXZpb3VzXG4iCi0JCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikKLQkJICAgICA6ICI9YSIgKG9sZHZhbCksICIrbSIgKCp1YWRkcikKLQkJICAgICA6ICJpIiAoLUVGQVVMVCksICJyIiAobmV3dmFsKSwgIjAiIChvbGR2YWwpCi0JCSAgICAgOiAibWVtb3J5IgotCSk7Ci0KLQlyZXR1cm4gb2xkdmFsOwotfQotCi0jZW5kaWYKLSNlbmRpZiAvKiBBU01fWDg2X19GVVRFWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZ2FydC5oIGIvaW5jbHVkZS9hc20teDg2L2dhcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA1ZWRiMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZ2FydC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19HQVJUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fR0FSVF9ICi0KLSNpbmNsdWRlIDxhc20vZTgyMC5oPgotCi1leHRlcm4gdm9pZCBzZXRfdXBfZ2FydF9yZXN1bWUodTMyLCB1MzIpOwotCi1leHRlcm4gaW50IGZhbGxiYWNrX2FwZXJfb3JkZXI7Ci1leHRlcm4gaW50IGZhbGxiYWNrX2FwZXJfZm9yY2U7Ci1leHRlcm4gaW50IGZpeF9hcGVydHVyZTsKLQotLyogUFRFIGJpdHMuICovCi0jZGVmaW5lIEdQVEVfVkFMSUQJMQotI2RlZmluZSBHUFRFX0NPSEVSRU5UCTIKLQotLyogQXBlcnR1cmUgY29udHJvbCByZWdpc3RlciBiaXRzLiAqLwotI2RlZmluZSBHQVJURU4JCSgxPDwwKQotI2RlZmluZSBESVNHQVJUQ1BVCSgxPDw0KQotI2RlZmluZSBESVNHQVJUSU8JKDE8PDUpCi0KLS8qIEdBUlQgY2FjaGUgY29udHJvbCByZWdpc3RlciBiaXRzLiAqLwotI2RlZmluZSBJTlZHQVJUCQkoMTw8MCkKLSNkZWZpbmUgR0FSVFBURUVSUgkoMTw8MSkKLQotLyogSzggT24tY3B1IEdBUlQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEFNRDY0X0dBUlRBUEVSVFVSRUNUTAkweDkwCi0jZGVmaW5lIEFNRDY0X0dBUlRBUEVSVFVSRUJBU0UJMHg5NAotI2RlZmluZSBBTUQ2NF9HQVJUVEFCTEVCQVNFCTB4OTgKLSNkZWZpbmUgQU1ENjRfR0FSVENBQ0hFQ1RMCTB4OWMKLSNkZWZpbmUgQU1ENjRfR0FSVEVOCQkoMTw8MCkKLQotZXh0ZXJuIGludCBhZ3BfYW1kNjRfaW5pdCh2b2lkKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9nYXJ0X3RyYW5zbGF0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBhZGRyKQotewotCXUzMiB0bXAsIGN0bDsKLQotICAgICAgICAvKiBhZGRyZXNzIG9mIHRoZSBtYXBwaW5ncyB0YWJsZSAqLwotICAgICAgICBhZGRyID4+PSAxMjsKLSAgICAgICAgdG1wID0gKHUzMikgYWRkcjw8NDsKLSAgICAgICAgdG1wICY9IH4weGY7Ci0gICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUVEFCTEVCQVNFLCB0bXApOwotCi0gICAgICAgIC8qIEVuYWJsZSBHQVJUIHRyYW5zbGF0aW9uIGZvciB0aGlzIGhhbW1lci4gKi8KLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVEFQRVJUVVJFQ1RMLCAmY3RsKTsKLSAgICAgICAgY3RsIHw9IEdBUlRFTjsKLSAgICAgICAgY3RsICY9IH4oRElTR0FSVENQVSB8IERJU0dBUlRJTyk7Ci0gICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsIGN0bCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwZXJ0dXJlX3ZhbGlkKHU2NCBhcGVyX2Jhc2UsIHUzMiBhcGVyX3NpemUsIHUzMiBtaW5fc2l6ZSkKLXsKLQlpZiAoIWFwZXJfYmFzZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYXBlcl9iYXNlICsgYXBlcl9zaXplID4gMHgxMDAwMDAwMDBVTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQXBlcnR1cmUgYmV5b25kIDRHQi4gSWdub3JpbmcuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChlODIwX2FueV9tYXBwZWQoYXBlcl9iYXNlLCBhcGVyX2Jhc2UgKyBhcGVyX3NpemUsIEU4MjBfUkFNKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJBcGVydHVyZSBwb2ludGluZyB0byBlODIwIFJBTS4gSWdub3JpbmcuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChhcGVyX3NpemUgPCBtaW5fc2l6ZSkgewotCQlwcmludGsoS0VSTl9JTkZPICJBcGVydHVyZSB0b28gc21hbGwgKCVkIE1CKSB0aGFuICglZCBNQilcbiIsCi0JCQkJIGFwZXJfc2l6ZT4+MjAsIG1pbl9zaXplPj4yMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fR0FSVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY18zMi5oIGIvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQyODBmMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fR0VOQVBJQ18zMl9ICi0jZGVmaW5lIEFTTV9YODZfX0dFTkFQSUNfMzJfSAotCi0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotCi0vKgotICogR2VuZXJpYyBBUElDIGRyaXZlciBpbnRlcmZhY2UuCi0gKgotICogQW4gc3RyYWlnaHQgZm9yd2FyZCBtYXBwaW5nIG9mIHRoZSBBUElDIHJlbGF0ZWQgcGFydHMgb2YgdGhlCi0gKiB4ODYgc3ViYXJjaGl0ZWN0dXJlIGludGVyZmFjZSB0byBhIGR5bmFtaWMgb2JqZWN0LgotICoKLSAqIFRoaXMgaXMgdXNlZCBieSB0aGUgImdlbmVyaWMiIHg4NiBzdWJhcmNoaXRlY3R1cmUuCi0gKgotICogQ29weXJpZ2h0IDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgotICovCi0KLXN0cnVjdCBtcGNfY29uZmlnX2J1czsKLXN0cnVjdCBtcF9jb25maWdfdGFibGU7Ci1zdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3I7Ci0KLXN0cnVjdCBnZW5hcGljIHsKLQljaGFyICpuYW1lOwotCWludCAoKnByb2JlKSh2b2lkKTsKLQotCWludCAoKmFwaWNfaWRfcmVnaXN0ZXJlZCkodm9pZCk7Ci0JY3B1bWFza190ICgqdGFyZ2V0X2NwdXMpKHZvaWQpOwotCWludCBpbnRfZGVsaXZlcnlfbW9kZTsKLQlpbnQgaW50X2Rlc3RfbW9kZTsKLQlpbnQgRVNSX0RJU0FCTEU7Ci0JaW50IGFwaWNfZGVzdGluYXRpb25fbG9naWNhbDsKLQl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3VzZWQpKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKTsKLQl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3ByZXNlbnQpKGludCBhcGljaWQpOwotCWludCBub19iYWxhbmNlX2lycTsKLQlpbnQgbm9faW9hcGljX2NoZWNrOwotCXZvaWQgKCppbml0X2FwaWNfbGRyKSh2b2lkKTsKLQlwaHlzaWRfbWFza190ICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190IG1hcCk7Ci0KLQl2b2lkICgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKLQlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOwotCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOwotCWludCAoKmNwdV90b19sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7Ci0JaW50ICgqY3B1X3ByZXNlbnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7Ci0JcGh5c2lkX21hc2tfdCAoKmFwaWNpZF90b19jcHVfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKLQl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKLQlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLQl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7Ci0JdTMyICgqcGh5c19wa2dfaWQpKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKLQotCS8qIG1wcGFyc2UgKi8KLQkvKiBXaGVuIG9uZSBvZiB0aGUgbmV4dCB0d28gaG9va3MgcmV0dXJucyAxIHRoZSBnZW5hcGljCi0JICAgaXMgc3dpdGNoZWQgdG8gdGhpcy4gRXNzZW50aWFsbHkgdGhleSBhcmUgYWRkaXRpb25hbCBwcm9iZQotCSAgIGZ1bmN0aW9ucy4gKi8KLQlpbnQgKCptcHNfb2VtX2NoZWNrKShzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKLQkJCSAgICAgY2hhciAqcHJvZHVjdGlkKTsKLQlpbnQgKCphY3BpX21hZHRfb2VtX2NoZWNrKShjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCk7Ci0KLQl1bnNpZ25lZCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwotCXVuc2lnbmVkIGxvbmcgYXBpY19pZF9tYXNrOwotCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY3B1bWFza190IGNwdW1hc2spOwotCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIGlwaSAqLwotCXZvaWQgKCpzZW5kX0lQSV9tYXNrKShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX2FsbGJ1dHNlbGYpKGludCB2ZWN0b3IpOwotCXZvaWQgKCpzZW5kX0lQSV9hbGwpKGludCB2ZWN0b3IpOwotI2VuZGlmCi19OwotCi0jZGVmaW5lIEFQSUNGVU5DKHgpIC54ID0geCwKLQotLyogTW9yZSBmdW5jdGlvbnMgY291bGQgYmUgcHJvYmFibHkgbWFya2VkIElQSUZVTkMgYW5kIHNhdmUgc29tZSBzcGFjZQotICAgaW4gVVAgR0VORVJJQ0FSQ0gga2VybmVscywgYnV0IEkgZG9uJ3QgaGF2ZSB0aGUgbmVydmUgcmlnaHQgbm93Ci0gICB0byB1bnRhbmdsZSB0aGlzIG1lc3MuIC1BSyAgKi8KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElQSUZVTkMoeCkgQVBJQ0ZVTkMoeCkKLSNlbHNlCi0jZGVmaW5lIElQSUZVTkMoeCkKLSNlbmRpZgotCi0jZGVmaW5lIEFQSUNfSU5JVChhbmFtZSwgYXByb2JlKQkJCVwKLXsJCQkJCQkJXAotCS5uYW1lID0gYW5hbWUsCQkJCQlcCi0JLnByb2JlID0gYXByb2JlLAkJCQlcCi0JLmludF9kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREUsCQlcCi0JLmludF9kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFLAkJCVwKLQkubm9fYmFsYW5jZV9pcnEgPSBOT19CQUxBTkNFX0lSUSwJCVwKLQkuRVNSX0RJU0FCTEUgPSBlc3JfZGlzYWJsZSwJCQlcCi0JLmFwaWNfZGVzdGluYXRpb25fbG9naWNhbCA9IEFQSUNfREVTVF9MT0dJQ0FMLAlcCi0JQVBJQ0ZVTkMoYXBpY19pZF9yZWdpc3RlcmVkKQkJCVwKLQlBUElDRlVOQyh0YXJnZXRfY3B1cykJCQkJXAotCUFQSUNGVU5DKGNoZWNrX2FwaWNpZF91c2VkKQkJCVwKLQlBUElDRlVOQyhjaGVja19hcGljaWRfcHJlc2VudCkJCQlcCi0JQVBJQ0ZVTkMoaW5pdF9hcGljX2xkcikJCQkJXAotCUFQSUNGVU5DKGlvYXBpY19waHlzX2lkX21hcCkJCQlcCi0JQVBJQ0ZVTkMoc2V0dXBfYXBpY19yb3V0aW5nKQkJCVwKLQlBUElDRlVOQyhtdWx0aV90aW1lcl9jaGVjaykJCQlcCi0JQVBJQ0ZVTkMoYXBpY2lkX3RvX25vZGUpCQkJXAotCUFQSUNGVU5DKGNwdV90b19sb2dpY2FsX2FwaWNpZCkJCQlcCi0JQVBJQ0ZVTkMoY3B1X3ByZXNlbnRfdG9fYXBpY2lkKQkJCVwKLQlBUElDRlVOQyhhcGljaWRfdG9fY3B1X3ByZXNlbnQpCQkJXAotCUFQSUNGVU5DKHNldHVwX3BvcnRpb19yZW1hcCkJCQlcCi0JQVBJQ0ZVTkMoY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkJCVwKLQlBUElDRlVOQyhtcHNfb2VtX2NoZWNrKQkJCQlcCi0JQVBJQ0ZVTkMoZ2V0X2FwaWNfaWQpCQkJCVwKLQkuYXBpY19pZF9tYXNrID0gQVBJQ19JRF9NQVNLLAkJCVwKLQlBUElDRlVOQyhjcHVfbWFza190b19hcGljaWQpCQkJXAotCUFQSUNGVU5DKGFjcGlfbWFkdF9vZW1fY2hlY2spCQkJXAotCUlQSUZVTkMoc2VuZF9JUElfbWFzaykJCQkJXAotCUlQSUZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZikJCQlcCi0JSVBJRlVOQyhzZW5kX0lQSV9hbGwpCQkJCVwKLQlBUElDRlVOQyhlbmFibGVfYXBpY19tb2RlKQkJCVwKLQlBUElDRlVOQyhwaHlzX3BrZ19pZCkJCQkJXAotfQotCi1leHRlcm4gc3RydWN0IGdlbmFwaWMgKmdlbmFwaWM7Ci0KLWVudW0gdXZfc3lzdGVtX3R5cGUge1VWX05PTkUsIFVWX0xFR0FDWV9BUElDLCBVVl9YMkFQSUMsIFVWX05PTl9VTklRVUVfQVBJQ307Ci0jZGVmaW5lIGdldF91dl9zeXN0ZW1fdHlwZSgpCQlVVl9OT05FCi0jZGVmaW5lIGlzX3V2X3N5c3RlbSgpCQkJMAotI2RlZmluZSB1dl93YWtldXBfc2Vjb25kYXJ5KGEsIGIpCTEKLSNkZWZpbmUgdXZfc3lzdGVtX2luaXQoKQkJZG8ge30gd2hpbGUgKDApCi0KLQotI2VuZGlmIC8qIEFTTV9YODZfX0dFTkFQSUNfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNmE0ODguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fR0VOQVBJQ182NF9ICi0jZGVmaW5lIEFTTV9YODZfX0dFTkFQSUNfNjRfSAotCi0vKgotICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCi0gKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgotICoKLSAqIEdlbmVyaWMgQVBJQyBzdWItYXJjaCBkYXRhIHN0cnVjdC4KLSAqCi0gKiBIYWNrZWQgZm9yIHg4Ni02NCBieSBKYW1lcyBDbGV2ZXJkb24gZnJvbSBpMzg2IGFyY2hpdGVjdHVyZSBjb2RlIGJ5Ci0gKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAotICogSmFtZXMgQ2xldmVyZG9uLgotICovCi0KLXN0cnVjdCBnZW5hcGljIHsKLQljaGFyICpuYW1lOwotCWludCAoKmFjcGlfbWFkdF9vZW1fY2hlY2spKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKTsKLQl1MzIgaW50X2RlbGl2ZXJ5X21vZGU7Ci0JdTMyIGludF9kZXN0X21vZGU7Ci0JaW50ICgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKLQljcHVtYXNrX3QgKCp0YXJnZXRfY3B1cykodm9pZCk7Ci0JY3B1bWFza190ICgqdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKShpbnQgY3B1KTsKLQl2b2lkICgqaW5pdF9hcGljX2xkcikodm9pZCk7Ci0JLyogaXBpICovCi0Jdm9pZCAoKnNlbmRfSVBJX21hc2spKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKTsKLQl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX3NlbGYpKGludCB2ZWN0b3IpOwotCS8qICovCi0JdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkKShjcHVtYXNrX3QgY3B1bWFzayk7Ci0JdW5zaWduZWQgaW50ICgqcGh5c19wa2dfaWQpKGludCBpbmRleF9tc2IpOwotCXVuc2lnbmVkIGludCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwotCXVuc2lnbmVkIGxvbmcgKCpzZXRfYXBpY19pZCkodW5zaWduZWQgaW50IGlkKTsKLQl1bnNpZ25lZCBsb25nIGFwaWNfaWRfbWFzazsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyAqZ2VuYXBpYzsKLQotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfZmxhdDsKLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3BoeXNmbGF0OwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX2NsdXN0ZXI7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfcGh5czsKLWV4dGVybiBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICosIGNoYXIgKik7Ci0KLWV4dGVybiB2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKLWVudW0gdXZfc3lzdGVtX3R5cGUge1VWX05PTkUsIFVWX0xFR0FDWV9BUElDLCBVVl9YMkFQSUMsIFVWX05PTl9VTklRVUVfQVBJQ307Ci1leHRlcm4gZW51bSB1dl9zeXN0ZW1fdHlwZSBnZXRfdXZfc3lzdGVtX3R5cGUodm9pZCk7Ci1leHRlcm4gaW50IGlzX3V2X3N5c3RlbSh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX3V2X3g7Ci1ERUNMQVJFX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7Ci1leHRlcm4gdm9pZCB1dl9jcHVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHV2X3N5c3RlbV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCk7Ci0KLWV4dGVybiB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0dFTkFQSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2dlb2RlLmggYi9pbmNsdWRlL2FzbS14ODYvZ2VvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzNDQ0Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZ2VvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogQU1EIEdlb2RlIGRlZmluaXRpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fR0VPREVfSAotI2RlZmluZSBBU01fWDg2X19HRU9ERV9ICi0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotLyogR2VuZXJpYyBzb3V0aGJyaWRnZSBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBHRU9ERV9ERVZfUE1TIDAKLSNkZWZpbmUgR0VPREVfREVWX0FDUEkgMQotI2RlZmluZSBHRU9ERV9ERVZfR1BJTyAyCi0jZGVmaW5lIEdFT0RFX0RFVl9NRkdQVCAzCi0KLWV4dGVybiBpbnQgZ2VvZGVfZ2V0X2Rldl9iYXNlKHVuc2lnbmVkIGludCBkZXYpOwotCi0vKiBVc2VmdWwgbWFjcm9zICovCi0jZGVmaW5lIGdlb2RlX3Btc19iYXNlKCkJZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9QTVMpCi0jZGVmaW5lIGdlb2RlX2FjcGlfYmFzZSgpCWdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfQUNQSSkKLSNkZWZpbmUgZ2VvZGVfZ3Bpb19iYXNlKCkJZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9HUElPKQotI2RlZmluZSBnZW9kZV9tZmdwdF9iYXNlKCkJZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9NRkdQVCkKLQotLyogTVNSUyAqLwotCi0jZGVmaW5lIE1TUl9HTElVX1AyRF9STzAJMHgxMDAwMDAyOQotCi0jZGVmaW5lIE1TUl9MWF9HTERfTVNSX0NPTkZJRwkweDQ4MDAyMDAxCi0jZGVmaW5lIE1TUl9MWF9NU1JfUEFEU0VMCTB4NDgwMDIwMTEJLyogTk9UIDB4NDgwMDAwMTE7IHRoZSBkYXRhCi0JCQkJCQkgKiBzaGVldCBoYXMgdGhlIHdyb25nIHZhbHVlICovCi0jZGVmaW5lIE1TUl9HTENQX1NZU19SU1RQTEwJMHg0QzAwMDAxNAotI2RlZmluZSBNU1JfR0xDUF9ET1RQTEwJCTB4NEMwMDAwMTUKLQotI2RlZmluZSBNU1JfTEJBUl9TTUIJCTB4NTE0MDAwMEIKLSNkZWZpbmUgTVNSX0xCQVJfR1BJTwkJMHg1MTQwMDAwQwotI2RlZmluZSBNU1JfTEJBUl9NRkdQVAkJMHg1MTQwMDAwRAotI2RlZmluZSBNU1JfTEJBUl9BQ1BJCQkweDUxNDAwMDBFCi0jZGVmaW5lIE1TUl9MQkFSX1BNUwkJMHg1MTQwMDAwRgotCi0jZGVmaW5lIE1TUl9ESVZJTF9TT0ZUX1JFU0VUCTB4NTE0MDAwMTcKLQotI2RlZmluZSBNU1JfUElDX1lTRUxfTE9XCTB4NTE0MDAwMjAKLSNkZWZpbmUgTVNSX1BJQ19ZU0VMX0hJR0gJMHg1MTQwMDAyMQotI2RlZmluZSBNU1JfUElDX1pTRUxfTE9XCTB4NTE0MDAwMjIKLSNkZWZpbmUgTVNSX1BJQ19aU0VMX0hJR0gJMHg1MTQwMDAyMwotI2RlZmluZSBNU1JfUElDX0lSUU1fTFBDCTB4NTE0MDAwMjUKLQotI2RlZmluZSBNU1JfTUZHUFRfSVJRCQkweDUxNDAwMDI4Ci0jZGVmaW5lIE1TUl9NRkdQVF9OUgkJMHg1MTQwMDAyOQotI2RlZmluZSBNU1JfTUZHUFRfU0VUVVAJCTB4NTE0MDAwMkIKLQotI2RlZmluZSBNU1JfTFhfU1BBUkVfTVNSCTB4ODAwMDAwMTEJLyogREMtc3BlY2lmaWMgKi8KLQotI2RlZmluZSBNU1JfR1hfR0xEX01TUl9DT05GSUcJMHhDMDAwMjAwMQotI2RlZmluZSBNU1JfR1hfTVNSX1BBRFNFTAkweEMwMDAyMDExCi0KLS8qIFJlc291cmNlIFNpemVzICovCi0KLSNkZWZpbmUgTEJBUl9HUElPX1NJWkUJCTB4RkYKLSNkZWZpbmUgTEJBUl9NRkdQVF9TSVpFCQkweDQwCi0jZGVmaW5lIExCQVJfQUNQSV9TSVpFCQkweDQwCi0jZGVmaW5lIExCQVJfUE1TX1NJWkUJCTB4ODAKLQotLyogQUNQSSByZWdpc3RlcnMgKFBNUyBibG9jaykgKi8KLQotLyoKLSAqIFBNMV9FTiBpcyBvbmx5IHZhbGlkIHdoZW4gVlNBIGlzIGVuYWJsZWQgZm9yIDE2IGJpdCByZWFkcy4KLSAqIFdoZW4gVlNBIGlzIG5vdCBlbmFibGVkLCAqYWx3YXlzKiByZWFkIGJvdGggUE0xX1NUUyBhbmQgUE0xX0VOCi0gKiB3aXRoIGEgMzIgYml0IHJlYWQgYXQgb2Zmc2V0IDB4MAotICovCi0KLSNkZWZpbmUgUE0xX1NUUwkJCTB4MDAKLSNkZWZpbmUgUE0xX0VOCQkJMHgwMgotI2RlZmluZSBQTTFfQ05UCQkJMHgwOAotI2RlZmluZSBQTTJfQ05UCQkJMHgwQwotI2RlZmluZSBQTV9UTVIJCQkweDEwCi0jZGVmaW5lIFBNX0dQRTBfU1RTCQkweDE4Ci0jZGVmaW5lIFBNX0dQRTBfRU4JCTB4MUMKLQotLyogUE1DIHJlZ2lzdGVycyAoUE1TIGJsb2NrKSAqLwotCi0jZGVmaW5lIFBNX1NTRAkJCTB4MDAKLSNkZWZpbmUgUE1fU0NYQQkJCTB4MDQKLSNkZWZpbmUgUE1fU0NZQQkJCTB4MDgKLSNkZWZpbmUgUE1fT1VUX1NMUENUTAkJMHgwQwotI2RlZmluZSBQTV9TQ0xLCQkJMHgxMAotI2RlZmluZSBQTV9TRUQJCQkweDEKLSNkZWZpbmUgUE1fU0NYRAkJCTB4MTgKLSNkZWZpbmUgUE1fU0NZRAkJCTB4MUMKLSNkZWZpbmUgUE1fSU5fU0xQQ1RMCQkweDIwCi0jZGVmaW5lIFBNX1dLRAkJCTB4MzAKLSNkZWZpbmUgUE1fV0tYRAkJCTB4MzQKLSNkZWZpbmUgUE1fUkQJCQkweDM4Ci0jZGVmaW5lIFBNX1dLWEEJCQkweDNDCi0jZGVmaW5lIFBNX0ZTRAkJCTB4NDAKLSNkZWZpbmUgUE1fVFNECQkJMHg0NAotI2RlZmluZSBQTV9QU0QJCQkweDQ4Ci0jZGVmaW5lIFBNX05XS0QJCQkweDRDCi0jZGVmaW5lIFBNX0FXS0QJCQkweDUwCi0jZGVmaW5lIFBNX1NTQwkJCTB4NTQKLQotLyogVlNBMiBtYWdpYyB2YWx1ZXMgKi8KLQotI2RlZmluZSBWU0FfVlJDX0lOREVYCQkweEFDMUMKLSNkZWZpbmUgVlNBX1ZSQ19EQVRBCQkweEFDMUUKLSNkZWZpbmUgVlNBX1ZSX1VOTE9DSwkJMHhGQzUzCS8qIHVubG9jayB2aXJ0dWFsIHJlZ2lzdGVyICovCi0jZGVmaW5lIFZTQV9WUl9TSUdOQVRVUkUJMHgwMDAzCi0jZGVmaW5lIFZTQV9WUl9NRU1fU0laRQkJMHgwMjAwCi0jZGVmaW5lIEFNRF9WU0FfU0lHCQkweDQxMzIJLyogc2lnbmF0dXJlIGlzIGFzY2lpICdWU0EyJyAqLwotI2RlZmluZSBHU1dfVlNBX1NJRwkJMHg1MzRkICAvKiBHZW5lcmFsIFNvZnR3YXJlIHNpZ25hdHVyZSAqLwotLyogR1BJTyAqLwotCi0jZGVmaW5lIEdQSU9fT1VUUFVUX1ZBTAkJMHgwMAotI2RlZmluZSBHUElPX09VVFBVVF9FTkFCTEUJMHgwNAotI2RlZmluZSBHUElPX09VVFBVVF9PUEVOX0RSQUlOCTB4MDgKLSNkZWZpbmUgR1BJT19PVVRQVVRfSU5WRVJUCTB4MEMKLSNkZWZpbmUgR1BJT19PVVRQVVRfQVVYMQkweDEwCi0jZGVmaW5lIEdQSU9fT1VUUFVUX0FVWDIJMHgxNAotI2RlZmluZSBHUElPX1BVTExfVVAJCTB4MTgKLSNkZWZpbmUgR1BJT19QVUxMX0RPV04JCTB4MUMKLSNkZWZpbmUgR1BJT19JTlBVVF9FTkFCTEUJMHgyMAotI2RlZmluZSBHUElPX0lOUFVUX0lOVkVSVAkweDI0Ci0jZGVmaW5lIEdQSU9fSU5QVVRfRklMVEVSCTB4MjgKLSNkZWZpbmUgR1BJT19JTlBVVF9FVkVOVF9DT1VOVAkweDJDCi0jZGVmaW5lIEdQSU9fUkVBRF9CQUNLCQkweDMwCi0jZGVmaW5lIEdQSU9fSU5QVVRfQVVYMQkJMHgzNAotI2RlZmluZSBHUElPX0VWRU5UU19FTkFCTEUJMHgzOAotI2RlZmluZSBHUElPX0xPQ0tfRU5BQkxFCTB4M0MKLSNkZWZpbmUgR1BJT19QT1NJVElWRV9FREdFX0VOCTB4NDAKLSNkZWZpbmUgR1BJT19ORUdBVElWRV9FREdFX0VOCTB4NDQKLSNkZWZpbmUgR1BJT19QT1NJVElWRV9FREdFX1NUUwkweDQ4Ci0jZGVmaW5lIEdQSU9fTkVHQVRJVkVfRURHRV9TVFMJMHg0QwotCi0jZGVmaW5lIEdQSU9fTUFQX1gJCTB4RTAKLSNkZWZpbmUgR1BJT19NQVBfWQkJMHhFNAotI2RlZmluZSBHUElPX01BUF9aCQkweEU4Ci0jZGVmaW5lIEdQSU9fTUFQX1cJCTB4RUMKLQotc3RhdGljIGlubGluZSB1MzIgZ2VvZGVfZ3Bpbyh1bnNpZ25lZCBpbnQgbnIpCi17Ci0JQlVHX09OKG5yID4gMjgpOwotCXJldHVybiAxIDw8IG5yOwotfQotCi1leHRlcm4gdm9pZCBnZW9kZV9ncGlvX3NldCh1MzIsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBnZW9kZV9ncGlvX2NsZWFyKHUzMiwgdW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgZ2VvZGVfZ3Bpb19pc3NldCh1MzIsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBnZW9kZV9ncGlvX3NldHVwX2V2ZW50KHVuc2lnbmVkIGludCwgaW50LCBpbnQpOwotZXh0ZXJuIHZvaWQgZ2VvZGVfZ3Bpb19zZXRfaXJxKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLQotc3RhdGljIGlubGluZSB2b2lkIGdlb2RlX2dwaW9fZXZlbnRfaXJxKHVuc2lnbmVkIGludCBncGlvLCBpbnQgcGFpcikKLXsKLQlnZW9kZV9ncGlvX3NldHVwX2V2ZW50KGdwaW8sIHBhaXIsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VvZGVfZ3Bpb19ldmVudF9wbWUodW5zaWduZWQgaW50IGdwaW8sIGludCBwYWlyKQotewotCWdlb2RlX2dwaW9fc2V0dXBfZXZlbnQoZ3BpbywgcGFpciwgMSk7Ci19Ci0KLS8qIFNwZWNpZmljIGdlb2RlIHRlc3RzICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2dlb2RlX2d4KHZvaWQpCi17Ci0JcmV0dXJuICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfTlNDKSAmJgotCQkoYm9vdF9jcHVfZGF0YS54ODYgPT0gNSkgJiYKLQkJKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDUpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfZ2VvZGVfbHgodm9pZCkKLXsKLQlyZXR1cm4gKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmCi0JCShib290X2NwdV9kYXRhLng4NiA9PSA1KSAmJgotCQkoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMTApKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfZ2VvZGUodm9pZCkKLXsKLQlyZXR1cm4gKGlzX2dlb2RlX2d4KCkgfHwgaXNfZ2VvZGVfbHgoKSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTUdFT0RFX0xYCi1leHRlcm4gaW50IGdlb2RlX2hhc192c2EyKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGdlb2RlX2hhc192c2EyKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogTUZHUFRzICovCi0KLSNkZWZpbmUgTUZHUFRfTUFYX1RJTUVSUwk4Ci0jZGVmaW5lIE1GR1BUX1RJTUVSX0FOWQkJKC0xKQotCi0jZGVmaW5lIE1GR1BUX0RPTUFJTl9XT1JLSU5HCTEKLSNkZWZpbmUgTUZHUFRfRE9NQUlOX1NUQU5EQlkJMgotI2RlZmluZSBNRkdQVF9ET01BSU5fQU5ZCShNRkdQVF9ET01BSU5fV09SS0lORyB8IE1GR1BUX0RPTUFJTl9TVEFOREJZKQotCi0jZGVmaW5lIE1GR1BUX0NNUDEJCTAKLSNkZWZpbmUgTUZHUFRfQ01QMgkJMQotCi0jZGVmaW5lIE1GR1BUX0VWRU5UX0lSUQkJMAotI2RlZmluZSBNRkdQVF9FVkVOVF9OTUkJCTEKLSNkZWZpbmUgTUZHUFRfRVZFTlRfUkVTRVQJMwotCi0jZGVmaW5lIE1GR1BUX1JFR19DTVAxCQkwCi0jZGVmaW5lIE1GR1BUX1JFR19DTVAyCQkyCi0jZGVmaW5lIE1GR1BUX1JFR19DT1VOVEVSCTQKLSNkZWZpbmUgTUZHUFRfUkVHX1NFVFVQCQk2Ci0KLSNkZWZpbmUgTUZHUFRfU0VUVVBfQ05URU4JKDEgPDwgMTUpCi0jZGVmaW5lIE1GR1BUX1NFVFVQX0NNUDIJKDEgPDwgMTQpCi0jZGVmaW5lIE1GR1BUX1NFVFVQX0NNUDEJKDEgPDwgMTMpCi0jZGVmaW5lIE1GR1BUX1NFVFVQX1NFVFVQCSgxIDw8IDEyKQotI2RlZmluZSBNRkdQVF9TRVRVUF9TVE9QRU4JKDEgPDwgMTEpCi0jZGVmaW5lIE1GR1BUX1NFVFVQX0VYVEVOCSgxIDw8IDEwKQotI2RlZmluZSBNRkdQVF9TRVRVUF9SRVZFTgkoMSA8PCA1KQotI2RlZmluZSBNRkdQVF9TRVRVUF9DTEtTRUwJKDEgPDwgNCkKLQotc3RhdGljIGlubGluZSB2b2lkIGdlb2RlX21mZ3B0X3dyaXRlKGludCB0aW1lciwgdTE2IHJlZywgdTE2IHZhbHVlKQotewotCXUzMiBiYXNlID0gZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9NRkdQVCk7Ci0Jb3V0dyh2YWx1ZSwgYmFzZSArIHJlZyArICh0aW1lciAqIDgpKTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgZ2VvZGVfbWZncHRfcmVhZChpbnQgdGltZXIsIHUxNiByZWcpCi17Ci0JdTMyIGJhc2UgPSBnZW9kZV9nZXRfZGV2X2Jhc2UoR0VPREVfREVWX01GR1BUKTsKLQlyZXR1cm4gaW53KGJhc2UgKyByZWcgKyAodGltZXIgKiA4KSk7Ci19Ci0KLWV4dGVybiBpbnQgZ2VvZGVfbWZncHRfdG9nZ2xlX2V2ZW50KGludCB0aW1lciwgaW50IGNtcCwgaW50IGV2ZW50LCBpbnQgZW5hYmxlKTsKLWV4dGVybiBpbnQgZ2VvZGVfbWZncHRfc2V0X2lycShpbnQgdGltZXIsIGludCBjbXAsIGludCAqaXJxLCBpbnQgZW5hYmxlKTsKLWV4dGVybiBpbnQgZ2VvZGVfbWZncHRfYWxsb2NfdGltZXIoaW50IHRpbWVyLCBpbnQgZG9tYWluKTsKLQotI2RlZmluZSBnZW9kZV9tZmdwdF9zZXR1cF9pcnEodCwgYywgaSkgZ2VvZGVfbWZncHRfc2V0X2lycSgodCksIChjKSwgKGkpLCAxKQotI2RlZmluZSBnZW9kZV9tZmdwdF9yZWxlYXNlX2lycSh0LCBjLCBpKSBnZW9kZV9tZmdwdF9zZXRfaXJxKCh0KSwgKGMpLCAoaSksIDApCi0KLSNpZmRlZiBDT05GSUdfR0VPREVfTUZHUFRfVElNRVIKLWV4dGVybiBpbnQgX19pbml0IG1mZ3B0X3RpbWVyX3NldHVwKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG1mZ3B0X3RpbWVyX3NldHVwKHZvaWQpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fR0VPREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2dwaW8uaCBiL2luY2x1ZGUvYXNtLXg4Ni9ncGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2ZiOTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2dwaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBHZW5lcmljIEdQSU8gQVBJIGltcGxlbWVudGF0aW9uIGZvciB4ODYuCi0gKgotICogRGVyaXZlZCBmcm9tIHRoZSBnZW5lcmljIEdQSU8gQVBJIGZvciBwb3dlcnBjOgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4ICBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKgotICogQXV0aG9yOiBBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX0FTTV9JMzg2X0dQSU9fSAotI2RlZmluZSBfQVNNX0kzODZfR1BJT19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+Ci0KLSNpZmRlZiBDT05GSUdfR1BJT0xJQgotCi0vKgotICogSnVzdCBjYWxsIGdwaW9saWIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGludCBncGlvKQotewotCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgaW50IGdwaW8sIGludCB2YWx1ZSkKLXsKLQlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBpbnQgZ3BpbykKLXsKLQlyZXR1cm4gX19ncGlvX2NhbnNsZWVwKGdwaW8pOwotfQotCi0vKgotICogTm90IGltcGxlbWVudGVkLCB5ZXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGludCBncGlvKQotewotCXJldHVybiAtRU5PU1lTOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0dQSU9MSUIgKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2hhcmRpcnFfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9oYXJkaXJxXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMGZlMjMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2hhcmRpcnFfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSEFSRElSUV8zMl9ICi0jZGVmaW5lIEFTTV9YODZfX0hBUkRJUlFfMzJfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotCXVuc2lnbmVkIGxvbmcgaWRsZV90aW1lc3RhbXA7Ci0JdW5zaWduZWQgaW50IF9fbm1pX2NvdW50OwkvKiBhcmNoIGRlcGVuZGVudCAqLwotCXVuc2lnbmVkIGludCBhcGljX3RpbWVyX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCi0JdW5zaWduZWQgaW50IGlycTBfaXJxczsKLQl1bnNpZ25lZCBpbnQgaXJxX3Jlc2NoZWRfY291bnQ7Ci0JdW5zaWduZWQgaW50IGlycV9jYWxsX2NvdW50OwotCXVuc2lnbmVkIGludCBpcnFfdGxiX2NvdW50OwotCXVuc2lnbmVkIGludCBpcnFfdGhlcm1hbF9jb3VudDsKLQl1bnNpZ25lZCBpbnQgaXJxX3NwdXJpb3VzX2NvdW50OwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotREVDTEFSRV9QRVJfQ1BVKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKLQotI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQKLSNkZWZpbmUgX19JUlFfU1RBVChjcHUsIG1lbWJlcikgKHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkubWVtYmVyKQotCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19IQVJESVJRXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9oYXJkaXJxXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvaGFyZGlycV82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGJkMjkxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9oYXJkaXJxXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0hBUkRJUlFfNjRfSAotI2RlZmluZSBBU01fWDg2X19IQVJESVJRXzY0X0gKLQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLQotLyogV2UgY2FuIGhhdmUgYXQgbW9zdCBOUl9WRUNUT1JTIGlycXMgcm91dGVkIHRvIGEgY3B1IGF0IGEgdGltZSAqLwotI2RlZmluZSBNQVhfSEFSRElSUVNfUEVSX0NQVSBOUl9WRUNUT1JTCi0KLSNkZWZpbmUgX19BUkNIX0lSUV9TVEFUIDEKLQotI2RlZmluZSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSByZWFkX3BkYShfX3NvZnRpcnFfcGVuZGluZykKLQotI2RlZmluZSBfX0FSQ0hfU0VUX1NPRlRJUlFfUEVORElORyAxCi0KLSNkZWZpbmUgc2V0X3NvZnRpcnFfcGVuZGluZyh4KSB3cml0ZV9wZGEoX19zb2Z0aXJxX3BlbmRpbmcsICh4KSkKLSNkZWZpbmUgb3Jfc29mdGlycV9wZW5kaW5nKHgpICBvcl9wZGEoX19zb2Z0aXJxX3BlbmRpbmcsICh4KSkKLQotZXh0ZXJuIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19IQVJESVJRXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS14ODYvaGlnaG1lbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzNmNmEyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9oaWdobWVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogaGlnaG1lbS5oOiB2aXJ0dWFsIGtlcm5lbCBtZW1vcnkgbWFwcGluZ3MgZm9yIGhpZ2ggbWVtb3J5Ci0gKgotICogVXNlZCBpbiBDT05GSUdfSElHSE1FTSBzeXN0ZW1zIGZvciBtZW1vcnkgcGFnZXMgd2hpY2gKLSAqIGFyZSBub3QgYWRkcmVzc2FibGUgYnkgZGlyZWN0IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHCi0gKgkJICAgICAgR2VyaGFyZC5XaWNoZXJ0QHBkYi5zaWVtZW5zLmRlCi0gKgotICoKLSAqIFJlZGVzaWduZWQgdGhlIHg4NiAzMi1iaXQgVk0gYXJjaGl0ZWN0dXJlIHRvIGRlYWwgd2l0aAotICogdXAgdG8gMTYgVGVyYWJ5dGUgcGh5c2ljYWwgbWVtb3J5LiBXaXRoIGN1cnJlbnQgeDg2IENQVXMKLSAqIHdlIG5vdyBzdXBwb3J0IHVwIHRvIDY0IEdpZ2FieXRlcyBwaHlzaWNhbCBSQU0uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fSElHSE1FTV9ICi0jZGVmaW5lIEFTTV9YODZfX0hJR0hNRU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0KLS8qIGRlY2xhcmF0aW9ucyBmb3IgaGlnaG1lbS5jICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBoaWdoc3RhcnRfcGZuLCBoaWdoZW5kX3BmbjsKLQotZXh0ZXJuIHB0ZV90ICprbWFwX3B0ZTsKLWV4dGVybiBwZ3Byb3RfdCBrbWFwX3Byb3Q7Ci1leHRlcm4gcHRlX3QgKnBrbWFwX3BhZ2VfdGFibGU7Ci0KLS8qCi0gKiBSaWdodCBub3cgd2UgaW5pdGlhbGl6ZSBvbmx5IGEgc2luZ2xlIHB0ZSB0YWJsZS4gSXQgY2FuIGJlIGV4dGVuZGVkCi0gKiBlYXNpbHksIHN1YnNlcXVlbnQgcHRlIHRhYmxlcyBoYXZlIHRvIGJlIGFsbG9jYXRlZCBpbiBvbmUgcGh5c2ljYWwKLSAqIGNodW5rIG9mIFJBTS4KLSAqLwotLyoKLSAqIE9yZGVyaW5nIGlzOgotICoKLSAqIEZJWEFERFJfVE9QCi0gKiAJCQlmaXhlZF9hZGRyZXNzZXMKLSAqIEZJWEFERFJfU1RBUlQKLSAqIAkJCXRlbXAgZml4ZWQgYWRkcmVzc2VzCi0gKiBGSVhBRERSX0JPT1RfU1RBUlQKLSAqIAkJCVBlcnNpc3RlbnQga21hcCBhcmVhCi0gKiBQS01BUF9CQVNFCi0gKiBWTUFMTE9DX0VORAotICogCQkJVm1hbGxvYyBhcmVhCi0gKiBWTUFMTE9DX1NUQVJUCi0gKiBoaWdoX21lbW9yeQotICovCi0jZGVmaW5lIExBU1RfUEtNQVBfTUFTSyAoTEFTVF9QS01BUC0xKQotI2RlZmluZSBQS01BUF9OUih2aXJ0KSAgKCh2aXJ0LVBLTUFQX0JBU0UpID4+IFBBR0VfU0hJRlQpCi0jZGVmaW5lIFBLTUFQX0FERFIobnIpICAoUEtNQVBfQkFTRSArICgobnIpIDw8IFBBR0VfU0hJRlQpKQotCi1leHRlcm4gdm9pZCAqa21hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKTsKLWV4dGVybiB2b2lkIGt1bm1hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKTsKLQotdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci12b2lkIGt1bm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci12b2lkICprbWFwX2F0b21pY19wcm90KHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCk7Ci12b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOwotdm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOwotdm9pZCAqa21hcF9hdG9taWNfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSk7Ci1zdHJ1Y3QgcGFnZSAqa21hcF9hdG9taWNfdG9fcGFnZSh2b2lkICpwdHIpOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2RlZmluZSBrbWFwX2F0b21pY19wdGUocGFnZSwgdHlwZSkJa21hcF9hdG9taWMocGFnZSwgdHlwZSkKLSNlbmRpZgotCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2ttYXBzKCkJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBhZGRfaGlnaHBhZ2VzX3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19ISUdITUVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9ocGV0LmggYi9pbmNsdWRlL2FzbS14ODYvaHBldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmJiYjZkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9ocGV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0hQRVRfSAotI2RlZmluZSBBU01fWDg2X19IUEVUX0gKLQotI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCi0KLSNkZWZpbmUgSFBFVF9NTUFQX1NJWkUJCTEwMjQKLQotI2RlZmluZSBIUEVUX0lECQkJMHgwMDAKLSNkZWZpbmUgSFBFVF9QRVJJT0QJCTB4MDA0Ci0jZGVmaW5lIEhQRVRfQ0ZHCQkweDAxMAotI2RlZmluZSBIUEVUX1NUQVRVUwkJMHgwMjAKLSNkZWZpbmUgSFBFVF9DT1VOVEVSCQkweDBmMAotI2RlZmluZSBIUEVUX1QwX0NGRwkJMHgxMDAKLSNkZWZpbmUgSFBFVF9UMF9DTVAJCTB4MTA4Ci0jZGVmaW5lIEhQRVRfVDBfUk9VVEUJCTB4MTEwCi0jZGVmaW5lIEhQRVRfVDFfQ0ZHCQkweDEyMAotI2RlZmluZSBIUEVUX1QxX0NNUAkJMHgxMjgKLSNkZWZpbmUgSFBFVF9UMV9ST1VURQkJMHgxMzAKLSNkZWZpbmUgSFBFVF9UMl9DRkcJCTB4MTQwCi0jZGVmaW5lIEhQRVRfVDJfQ01QCQkweDE0OAotI2RlZmluZSBIUEVUX1QyX1JPVVRFCQkweDE1MAotCi0jZGVmaW5lIEhQRVRfSURfUkVWCQkweDAwMDAwMGZmCi0jZGVmaW5lIEhQRVRfSURfTlVNQkVSCQkweDAwMDAxZjAwCi0jZGVmaW5lIEhQRVRfSURfNjRCSVQJCTB4MDAwMDIwMDAKLSNkZWZpbmUgSFBFVF9JRF9MRUdTVVAJCTB4MDAwMDgwMDAKLSNkZWZpbmUgSFBFVF9JRF9WRU5ET1IJCTB4ZmZmZjAwMDAKLSNkZWZpbmUJSFBFVF9JRF9OVU1CRVJfU0hJRlQJOAotI2RlZmluZSBIUEVUX0lEX1ZFTkRPUl9TSElGVAkxNgotCi0jZGVmaW5lIEhQRVRfSURfVkVORE9SXzgwODYJMHg4MDg2Ci0KLSNkZWZpbmUgSFBFVF9DRkdfRU5BQkxFCQkweDAwMQotI2RlZmluZSBIUEVUX0NGR19MRUdBQ1kJCTB4MDAyCi0jZGVmaW5lCUhQRVRfTEVHQUNZXzgyNTQJMgotI2RlZmluZQlIUEVUX0xFR0FDWV9SVEMJCTgKLQotI2RlZmluZSBIUEVUX1ROX0xFVkVMCQkweDAwMDIKLSNkZWZpbmUgSFBFVF9UTl9FTkFCTEUJCTB4MDAwNAotI2RlZmluZSBIUEVUX1ROX1BFUklPRElDCTB4MDAwOAotI2RlZmluZSBIUEVUX1ROX1BFUklPRElDX0NBUAkweDAwMTAKLSNkZWZpbmUgSFBFVF9UTl82NEJJVF9DQVAJMHgwMDIwCi0jZGVmaW5lIEhQRVRfVE5fU0VUVkFMCQkweDAwNDAKLSNkZWZpbmUgSFBFVF9UTl8zMkJJVAkJMHgwMTAwCi0jZGVmaW5lIEhQRVRfVE5fUk9VVEUJCTB4M2UwMAotI2RlZmluZSBIUEVUX1ROX0ZTQgkJMHg0MDAwCi0jZGVmaW5lIEhQRVRfVE5fRlNCX0NBUAkJMHg4MDAwCi0jZGVmaW5lIEhQRVRfVE5fUk9VVEVfU0hJRlQJOQotCi0vKiBNYXggSFBFVCBQZXJpb2QgaXMgMTBeOCBmZW10byBzZWMgYXMgaW4gSFBFVCBzcGVjICovCi0jZGVmaW5lIEhQRVRfTUFYX1BFUklPRAkJMTAwMDAwMDAwVUwKLS8qCi0gKiBNaW4gSFBFVCBwZXJpb2QgaXMgMTBeNSBmZW10byBzZWMganVzdCBmb3Igc2FmZXR5LiBJZiBpdCBpcyBsZXNzIHRoYW4gdGhpcywKLSAqIHRoZW4gMzIgYml0IEhQRVQgY291bnRlciB3cmFwc2Fyb3VuZCBpbiBsZXNzIHRoYW4gMC41IHNlYy4KLSAqLwotI2RlZmluZSBIUEVUX01JTl9QRVJJT0QJCTEwMDAwMFVMCi0KLS8qIGhwZXQgbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBmb3JjZV9ocGV0X2FkZHJlc3M7Ci1leHRlcm4gaW50IGhwZXRfZm9yY2VfdXNlcjsKLWV4dGVybiBpbnQgaXNfaHBldF9lbmFibGVkKHZvaWQpOwotZXh0ZXJuIGludCBocGV0X2VuYWJsZSh2b2lkKTsKLWV4dGVybiB2b2lkIGhwZXRfZGlzYWJsZSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfcmVhZGwodW5zaWduZWQgbG9uZyBhKTsKLWV4dGVybiB2b2lkIGZvcmNlX2hwZXRfcmVzdW1lKHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKLQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi10eXBlZGVmIGlycXJldHVybl90ICgqcnRjX2lycV9oYW5kbGVyKShpbnQgaW50ZXJydXB0LCB2b2lkICpjb29raWUpOwotZXh0ZXJuIGludCBocGV0X21hc2tfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzayk7Ci1leHRlcm4gaW50IGhwZXRfc2V0X3J0Y19pcnFfYml0KHVuc2lnbmVkIGxvbmcgYml0X21hc2spOwotZXh0ZXJuIGludCBocGV0X3NldF9hbGFybV90aW1lKHVuc2lnbmVkIGNoYXIgaHJzLCB1bnNpZ25lZCBjaGFyIG1pbiwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHNlYyk7Ci1leHRlcm4gaW50IGhwZXRfc2V0X3BlcmlvZGljX2ZyZXEodW5zaWduZWQgbG9uZyBmcmVxKTsKLWV4dGVybiBpbnQgaHBldF9ydGNfZHJvcHBlZF9pcnEodm9pZCk7Ci1leHRlcm4gaW50IGhwZXRfcnRjX3RpbWVyX2luaXQodm9pZCk7Ci1leHRlcm4gaXJxcmV0dXJuX3QgaHBldF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1leHRlcm4gaW50IGhwZXRfcmVnaXN0ZXJfaXJxX2hhbmRsZXIocnRjX2lycV9oYW5kbGVyIGhhbmRsZXIpOwotZXh0ZXJuIHZvaWQgaHBldF91bnJlZ2lzdGVyX2lycV9oYW5kbGVyKHJ0Y19pcnFfaGFuZGxlciBoYW5kbGVyKTsKLQotI2VuZGlmIC8qIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDICovCi0KLSNlbHNlIC8qIENPTkZJR19IUEVUX1RJTUVSICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGhwZXRfZW5hYmxlKHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKSB7IHJldHVybiAwOyB9Ci0jZGVmaW5lIGhwZXRfcmVhZGwoYSkgMAotCi0jZW5kaWYKLSNlbmRpZiAvKiBBU01fWDg2X19IUEVUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9odWdldGxiLmggYi9pbmNsdWRlL2FzbS14ODYvaHVnZXRsYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjdlYzVkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9odWdldGxiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0hVR0VUTEJfSAotI2RlZmluZSBBU01fWDg2X19IVUdFVExCX0gKLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbGVuKSB7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJZiB0aGUgYXJjaCBkb2Vzbid0IHN1cHBseSBzb21ldGhpbmcgZWxzZSwgYXNzdW1lIHRoYXQgaHVnZXBhZ2UKLSAqIHNpemUgYWxpZ25lZCByZWdpb25zIGFyZSBvayB3aXRob3V0IGZ1cnRoZXIgcHJlcGFyYXRpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTsKLQlpZiAobGVuICYgfmh1Z2VfcGFnZV9tYXNrKGgpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYWRkciAmIH5odWdlX3BhZ2VfbWFzayhoKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3ByZWZhdWx0X2FyY2hfaG9vayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkgewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9mcmVlX3BnZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBmbG9vciwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGNlaWxpbmcpCi17Ci0JZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCBlbmQsIGZsb29yLCBjZWlsaW5nKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0Jc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCi17Ci0JcmV0dXJuIHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBodWdlX3B0ZV9ub25lKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX25vbmUocHRlKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZV93cnByb3RlY3QocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfd3Jwcm90ZWN0KHB0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKLXsKLQlwdGVwX3NldF93cnByb3RlY3QobW0sIGFkZHIsIHB0ZXApOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAotCQkJCQkgICAgIHB0ZV90IHB0ZSwgaW50IGRpcnR5KQotewotCXJldHVybiBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCBhZGRyLCBwdGVwLCBwdGUsIGRpcnR5KTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0KHB0ZV90ICpwdGVwKQotewotCXJldHVybiAqcHRlcDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWxlYXNlX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQotewotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSFVHRVRMQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS14ODYvaHdfaXJxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZjZlMDMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2h3X2lycS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSFdfSVJRX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSFdfSVJRX0gKLQotLyoKLSAqIChDKSAxOTkyLCAxOTkzIExpbnVzIFRvcnZhbGRzLCAoQykgMTk5NyBJbmdvIE1vbG5hcgotICoKLSAqIG1vdmVkIHNvbWUgb2YgdGhlIG9sZCBhcmNoL2kzODYva2VybmVsL2lycS5oIHRvIGhlcmUuIFZZCi0gKgotICogSVJRL0lQSSBjaGFuZ2VzIHRha2VuIGZyb20gd29yayBieSBUaG9tYXMgUmFka2UKLSAqIDx0b21zb2Z0QGluZm9ybWF0aWsudHUtY2hlbW5pdHouZGU+Ci0gKgotICogaGFja2VkIGJ5IEFuZGkgS2xlZW4gZm9yIHg4Ni02NC4KLSAqIHVuaWZpZWQgYnkgdGdseAotICovCi0KLSNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0KLSNkZWZpbmUgcGxhdGZvcm1fbGVnYWN5X2lycShpcnEpCSgoaXJxKSA8IDE2KQotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBkdXJpbmcgaW5pdF9JUlEgKi8KLWV4dGVybiB2b2lkIGFwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQgZXJyb3JfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQgc3B1cmlvdXNfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdGhlcm1hbF9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gdm9pZCByZXNjaGVkdWxlX2ludGVycnVwdCh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDAodm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDEodm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDIodm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDModm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDUodm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDYodm9pZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdDcodm9pZCk7Ci0KLWV4dGVybiB2b2lkIGlycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gdm9pZCBjYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQodm9pZCk7Ci0KLS8qIFBJQyBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KLWV4dGVybiB2b2lkIGRpc2FibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotZXh0ZXJuIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLWV4dGVybiBpbnQgaTgyNTlBX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpOwotZXh0ZXJuIHZvaWQgbWFrZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhZW9pKTsKLQotLyogSU9BUElDICovCi0jZGVmaW5lIElPX0FQSUNfSVJRKHgpICgoKHgpID49IDE2KSB8fCAoKDE8PCh4KSkgJiBpb19hcGljX2lycXMpKQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9fYXBpY19pcnFzOwotCi1leHRlcm4gdm9pZCBpbml0X1ZJU1dTX0FQSUNfaXJxcyh2b2lkKTsKLWV4dGVybiB2b2lkIHNldHVwX0lPX0FQSUModm9pZCk7Ci1leHRlcm4gdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7Ci1leHRlcm4gaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBzbG90LCBpbnQgZm4pOwotZXh0ZXJuIHZvaWQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1leHRlcm4gdm9pZCBlbmFibGVfSU9fQVBJQyh2b2lkKTsKLSNlbmRpZgotCi0vKiBJUEkgZnVuY3Rpb25zICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIHZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKLSNlbmRpZgotZXh0ZXJuIHZvaWQgc2VuZF9JUEkoaW50IGRlc3QsIGludCB2ZWN0b3IpOwotCi0vKiBTdGF0aXN0aWNzICovCi1leHRlcm4gYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKLWV4dGVybiBhdG9taWNfdCBpcnFfbWlzX2NvdW50OwotCi0vKiBFSVNBICovCi1leHRlcm4gdm9pZCBlaXNhX3NldF9sZXZlbF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIFZveWFnZXIgZnVuY3Rpb25zICovCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHZpY19jcGlfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB2aWNfc3lzX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgdmljX2Ntbl9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY190aW1lcl9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY19pbnZhbGlkYXRlX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgcWljX3Jlc2NoZWR1bGVfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfZW5hYmxlX2lycV9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY19jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKTsKLQotLyogU01QICovCi1leHRlcm4gdm9pZCBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIHZvaWQgc21wX3NwdXJpb3VzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKLWV4dGVybiB2b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7Ci0jZWxzZQotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHZvaWQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9TTVAKLWV4dGVybiB2b2lkIHNtcF9yZXNjaGVkdWxlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKLWV4dGVybiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKLWV4dGVybiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIHZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwotI2Vsc2UKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiB2b2lkICgqY29uc3QgaW50ZXJydXB0W05SX0lSUVNdKSh2b2lkKTsKLSNlbHNlCi10eXBlZGVmIGludCB2ZWN0b3JfaXJxX3RbTlJfVkVDVE9SU107Ci1ERUNMQVJFX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLWV4dGVybiB2b2lkIGxvY2tfdmVjdG9yX2xvY2sodm9pZCk7Ci1leHRlcm4gdm9pZCB1bmxvY2tfdmVjdG9yX2xvY2sodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGxvY2tfdmVjdG9yX2xvY2sodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfdmVjdG9yX2xvY2sodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkge30KLSNlbmRpZgotCi0jZW5kaWYgLyogIUFTU0VNQkxZXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9oeXBlcnRyYW5zcG9ydC5oIGIvaW5jbHVkZS9hc20teDg2L2h5cGVydHJhbnNwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMDExYTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2h5cGVydHJhbnNwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0hZUEVSVFJBTlNQT1JUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSFlQRVJUUkFOU1BPUlRfSAotCi0vKgotICogQ29uc3RhbnRzIGZvciB4ODYgSHlwZXJ0cmFuc3BvcnQgSW50ZXJydXB0cy4KLSAqLwotCi0jZGVmaW5lIEhUX0lSUV9MT1dfQkFTRQkJCTB4ZjgwMDAwMDAKLQotI2RlZmluZSBIVF9JUlFfTE9XX1ZFQ1RPUl9TSElGVAkJMTYKLSNkZWZpbmUgSFRfSVJRX0xPV19WRUNUT1JfTUFTSwkJMHgwMGZmMDAwMAotI2RlZmluZSBIVF9JUlFfTE9XX1ZFQ1RPUih2KQkJCQkJCVwKLQkoKCh2KSA8PCBIVF9JUlFfTE9XX1ZFQ1RPUl9TSElGVCkgJiBIVF9JUlFfTE9XX1ZFQ1RPUl9NQVNLKQotCi0jZGVmaW5lIEhUX0lSUV9MT1dfREVTVF9JRF9TSElGVAk4Ci0jZGVmaW5lIEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLCQkweDAwMDBmZjAwCi0jZGVmaW5lIEhUX0lSUV9MT1dfREVTVF9JRCh2KQkJCQkJCVwKLQkoKCh2KSA8PCBIVF9JUlFfTE9XX0RFU1RfSURfU0hJRlQpICYgSFRfSVJRX0xPV19ERVNUX0lEX01BU0spCi0KLSNkZWZpbmUgSFRfSVJRX0xPV19ETV9QSFlTSUNBTAkJMHgwMDAwMDAwCi0jZGVmaW5lIEhUX0lSUV9MT1dfRE1fTE9HSUNBTAkJMHgwMDAwMDQwCi0KLSNkZWZpbmUgSFRfSVJRX0xPV19SUUVPSV9FREdFCQkweDAwMDAwMDAKLSNkZWZpbmUgSFRfSVJRX0xPV19SUUVPSV9MRVZFTAkJMHgwMDAwMDIwCi0KLQotI2RlZmluZSBIVF9JUlFfTE9XX01UX0ZJWEVECQkweDAwMDAwMDAKLSNkZWZpbmUgSFRfSVJRX0xPV19NVF9BUkJJVFJBVEVECTB4MDAwMDAwNAotI2RlZmluZSBIVF9JUlFfTE9XX01UX1NNSQkJMHgwMDAwMDA4Ci0jZGVmaW5lIEhUX0lSUV9MT1dfTVRfTk1JCQkweDAwMDAwMGMKLSNkZWZpbmUgSFRfSVJRX0xPV19NVF9JTklUCQkweDAwMDAwMTAKLSNkZWZpbmUgSFRfSVJRX0xPV19NVF9TVEFSVFVQCQkweDAwMDAwMTQKLSNkZWZpbmUgSFRfSVJRX0xPV19NVF9FWFRJTlQJCTB4MDAwMDAxOAotI2RlZmluZSBIVF9JUlFfTE9XX01UX0xJTlQxCQkweDAwMDAwOGMKLSNkZWZpbmUgSFRfSVJRX0xPV19NVF9MSU5UMAkJMHgwMDAwMDk4Ci0KLSNkZWZpbmUgSFRfSVJRX0xPV19JUlFfTUFTS0VECQkweDAwMDAwMDEKLQotCi0jZGVmaW5lIEhUX0lSUV9ISUdIX0RFU1RfSURfU0hJRlQJMAotI2RlZmluZSBIVF9JUlFfSElHSF9ERVNUX0lEX01BU0sJMHgwMGZmZmZmZgotI2RlZmluZSBIVF9JUlFfSElHSF9ERVNUX0lEKHYpCQkJCQkJXAotCSgoKCh2KSA+PiA4KSA8PCBIVF9JUlFfSElHSF9ERVNUX0lEX1NISUZUKSAmIEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSykKLQotI2VuZGlmIC8qIEFTTV9YODZfX0hZUEVSVFJBTlNQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pMzg3LmggYi9pbmNsdWRlL2FzbS14ODYvaTM4Ny5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmE4NjJhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pMzg3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5NCBMaW51cyBUb3J2YWxkcwotICoKLSAqIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0Ci0gKiBHZW5lcmFsIEZQVSBzdGF0ZSBoYW5kbGluZyBjbGVhbnVwcwotICoJR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPiwgTWF5IDIwMDAKLSAqIHg4Ni02NCB3b3JrIGJ5IEFuZGkgS2xlZW4gMjAwMgotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fSTM4N19ICi0jZGVmaW5lIEFTTV9YODZfX0kzODdfSAotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3NldC5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS94c2F2ZS5oPgotCi1leHRlcm4gdW5zaWduZWQgaW50IHNpZ194c3RhdGVfc2l6ZTsKLWV4dGVybiB2b2lkIGZwdV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtYXRoX3N0YXRlX3Jlc3RvcmUodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3RocmVhZF94c3RhdGUodm9pZCk7Ci1leHRlcm4gaW50IGR1bXBfZnB1KHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0ICopOwotCi1leHRlcm4gdXNlcl9yZWdzZXRfYWN0aXZlX2ZuIGZwcmVnc19hY3RpdmUsIHhmcHJlZ3NfYWN0aXZlOwotZXh0ZXJuIHVzZXJfcmVnc2V0X2dldF9mbiBmcHJlZ3NfZ2V0LCB4ZnByZWdzX2dldCwgZnByZWdzX3NvZnRfZ2V0OwotZXh0ZXJuIHVzZXJfcmVnc2V0X3NldF9mbiBmcHJlZ3Nfc2V0LCB4ZnByZWdzX3NldCwgZnByZWdzX3NvZnRfc2V0OwotCi1leHRlcm4gc3RydWN0IF9mcHhfc3dfYnl0ZXMgZnhfc3dfcmVzZXJ2ZWQ7Ci0jaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCi1leHRlcm4gdW5zaWduZWQgaW50IHNpZ194c3RhdGVfaWEzMl9zaXplOwotZXh0ZXJuIHN0cnVjdCBfZnB4X3N3X2J5dGVzIGZ4X3N3X3Jlc2VydmVkX2lhMzI7Ci1zdHJ1Y3QgX2Zwc3RhdGVfaWEzMjsKLXN0cnVjdCBfeHN0YXRlX2lhMzI7Ci1leHRlcm4gaW50IHNhdmVfaTM4N194c3RhdGVfaWEzMih2b2lkIF9fdXNlciAqYnVmKTsKLWV4dGVybiBpbnQgcmVzdG9yZV9pMzg3X3hzdGF0ZV9pYTMyKHZvaWQgX191c2VyICpidWYpOwotI2VuZGlmCi0KLSNkZWZpbmUgWDg3X0ZTV19FUyAoMSA8PCA3KQkvKiBFeGNlcHRpb24gU3VtbWFyeSAqLwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCi0vKiBJZ25vcmUgZGVsYXllZCBleGNlcHRpb25zIGZyb20gdXNlciBzcGFjZSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRvbGVyYW50X2Z3YWl0KHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlKCIxOiBmd2FpdFxuIgotCQkgICAgICIyOlxuIgotCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgMmIpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZnhyc3Rvcl9jaGVja2luZyhzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCkKLXsKLQlpbnQgZXJyOwotCi0JYXNtIHZvbGF0aWxlKCIxOiAgcmV4NjQvZnhyc3RvciAoJVtmeF0pXG5cdCIKLQkJICAgICAiMjpcbiIKLQkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgotCQkgICAgICIzOiAgbW92bCAkLTEsJVtlcnJdXG4iCi0JCSAgICAgIiAgICBqbXAgIDJiXG4iCi0JCSAgICAgIi5wcmV2aW91c1xuIgotCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCi0JCSAgICAgOiBbZXJyXSAiPXIiIChlcnIpCi0jaWYgMCAvKiBTZWUgY29tbWVudCBpbiBfX3NhdmVfaW5pdF9mcHUoKSBiZWxvdy4gKi8KLQkJICAgICA6IFtmeF0gInIiIChmeCksICJtIiAoKmZ4KSwgIjAiICgwKSk7Ci0jZWxzZQotCQkgICAgIDogW2Z4XSAiY2RhU0RiIiAoZngpLCAibSIgKCpmeCksICIwIiAoMCkpOwotI2VuZGlmCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVzdG9yZV9mcHVfY2hlY2tpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaWYgKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICYgVFNfWFNBVkUpCi0JCXJldHVybiB4cnN0b3JfY2hlY2tpbmcoJnRzay0+dGhyZWFkLnhzdGF0ZS0+eHNhdmUpOwotCWVsc2UKLQkJcmV0dXJuIGZ4cnN0b3JfY2hlY2tpbmcoJnRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKTsKLX0KLQotLyogQU1EIENQVXMgZG9uJ3Qgc2F2ZS9yZXN0b3JlIEZEUC9GSVAvRk9QIHVubGVzcyBhbiBleGNlcHRpb24KLSAgIGlzIHBlbmRpbmcuIENsZWFyIHRoZSB4ODcgc3RhdGUgaGVyZSBieSBzZXR0aW5nIGl0IHRvIGZpeGVkCi0gICB2YWx1ZXMuIFRoZSBrZXJuZWwgZGF0YSBzZWdtZW50IGNhbiBiZSBzb21ldGltZXMgMCBhbmQgc29tZXRpbWVzCi0gICBuZXcgdXNlciB2YWx1ZS4gQm90aCBzaG91bGQgYmUgb2suCi0gICBVc2UgdGhlIFBEQSBhcyBzYWZlIGFkZHJlc3MgYmVjYXVzZSBpdCBzaG91bGQgYmUgYWxyZWFkeSBpbiBMMS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9mcHVfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0Jc3RydWN0IHhzYXZlX3N0cnVjdCAqeHN0YXRlID0gJnRzay0+dGhyZWFkLnhzdGF0ZS0+eHNhdmU7Ci0Jc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnggPSAmdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmU7Ci0KLQkvKgotCSAqIHhzYXZlIGhlYWRlciBtYXkgaW5kaWNhdGUgdGhlIGluaXQgc3RhdGUgb2YgdGhlIEZQLgotCSAqLwotCWlmICgodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19YU0FWRSkgJiYKLQkgICAgISh4c3RhdGUtPnhzYXZlX2hkci54c3RhdGVfYnYgJiBYU1RBVEVfRlApKQotCQlyZXR1cm47Ci0KLQlpZiAodW5saWtlbHkoZngtPnN3ZCAmIFg4N19GU1dfRVMpKQotCQlhc20gdm9sYXRpbGUoImZuY2xleCIpOwotCWFsdGVybmF0aXZlX2lucHV0KEFTTV9OT1A4IEFTTV9OT1AyLAotCQkJICAiICAgIGVtbXNcbiIJCS8qIGNsZWFyIHN0YWNrIHRhZ3MgKi8KLQkJCSAgIiAgICBmaWxkbCAlJWdzOjAiLAkvKiBsb2FkIHRvIGNsZWFyIHN0YXRlICovCi0JCQkgIFg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZnhzYXZlX3VzZXIoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBfX3VzZXIgKmZ4KQotewotCWludCBlcnI7Ci0KLQlhc20gdm9sYXRpbGUoIjE6ICByZXg2NC9meHNhdmUgKCVbZnhdKVxuXHQiCi0JCSAgICAgIjI6XG4iCi0JCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKLQkJICAgICAiMzogIG1vdmwgJC0xLCVbZXJyXVxuIgotCQkgICAgICIgICAgam1wICAyYlxuIgotCQkgICAgICIucHJldmlvdXNcbiIKLQkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDNiKQotCQkgICAgIDogW2Vycl0gIj1yIiAoZXJyKSwgIj1tIiAoKmZ4KQotI2lmIDAgLyogU2VlIGNvbW1lbnQgaW4gX19meHNhdmVfY2xlYXIoKSBiZWxvdy4gKi8KLQkJICAgICA6IFtmeF0gInIiIChmeCksICIwIiAoMCkpOwotI2Vsc2UKLQkJICAgICA6IFtmeF0gImNkYVNEYiIgKGZ4KSwgIjAiICgwKSk7Ci0jZW5kaWYKLQlpZiAodW5saWtlbHkoZXJyKSAmJgotCSAgICBfX2NsZWFyX3VzZXIoZngsIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSkpCi0JCWVyciA9IC1FRkFVTFQ7Ci0JLyogTm8gbmVlZCB0byBjbGVhciBoZXJlIGJlY2F1c2UgdGhlIGNhbGxlciBjbGVhcnMgVVNFRF9NQVRIICovCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZ4c2F2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQkvKiBVc2luZyAicmV4NjQ7IGZ4c2F2ZSAlMCIgaXMgYnJva2VuIGJlY2F1c2UsIGlmIHRoZSBtZW1vcnkgb3BlcmFuZAotCSAgIHVzZXMgYW55IGV4dGVuZGVkIHJlZ2lzdGVycyBmb3IgYWRkcmVzc2luZywgYSBzZWNvbmQgUkVYIHByZWZpeAotCSAgIHdpbGwgYmUgZ2VuZXJhdGVkICh0byB0aGUgYXNzZW1ibGVyLCByZXg2NCBmb2xsb3dlZCBieSBzZW1pY29sb24KLQkgICBpcyBhIHNlcGFyYXRlIGluc3RydWN0aW9uKSwgYW5kIGhlbmNlIHRoZSA2NC1iaXRuZXNzIGlzIGxvc3QuICovCi0jaWYgMAotCS8qIFVzaW5nICJmeHNhdmVxICUwIiB3b3VsZCBiZSB0aGUgaWRlYWwgY2hvaWNlLCBidXQgaXMgb25seSBzdXBwb3J0ZWQKLQkgICBzdGFydGluZyB3aXRoIGdhcyAyLjE2LiAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJmeHNhdmVxICUwIgotCQkJICAgICA6ICI9bSIgKHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKSk7Ci0jZWxpZiAwCi0JLyogVXNpbmcsIGFzIGEgd29ya2Fyb3VuZCwgdGhlIHByb3Blcmx5IHByZWZpeGVkIGZvcm0gYmVsb3cgaXNuJ3QKLQkgICBhY2NlcHRlZCBieSBhbnkgYmludXRpbHMgdmVyc2lvbiBzbyBmYXIgcmVsZWFzZWQsIGNvbXBsYWluaW5nIHRoYXQKLQkgICB0aGUgc2FtZSB0eXBlIG9mIHByZWZpeCBpcyB1c2VkIHR3aWNlIGlmIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIGlzCi0JICAgbmVlZGVkIGZvciBhZGRyZXNzaW5nIChmaXggc3VibWl0dGVkIHRvIG1haW5saW5lIDIwMDUtMTEtMjEpLiAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXg2NC9meHNhdmUgJTAiCi0JCQkgICAgIDogIj1tIiAodHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUpKTsKLSNlbHNlCi0JLyogVGhpcywgaG93ZXZlciwgd2UgY2FuIHdvcmsgYXJvdW5kIGJ5IGZvcmNpbmcgdGhlIGNvbXBpbGVyIHRvIHNlbGVjdAotCSAgIGFuIGFkZHJlc3NpbmcgbW9kZSB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBleHRlbmRlZCByZWdpc3RlcnMuICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInJleDY0L2Z4c2F2ZSAoJTEpIgotCQkJICAgICA6ICI9bSIgKHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKQotCQkJICAgICA6ICJjZGFTRGIiICgmdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zYXZlX2luaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1hTQVZFKQotCQl4c2F2ZSh0c2spOwotCWVsc2UKLQkJZnhzYXZlKHRzayk7Ci0KLQljbGVhcl9mcHVfc3RhdGUodHNrKTsKLQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKLX0KLQotI2Vsc2UgIC8qIENPTkZJR19YODZfMzIgKi8KLQotZXh0ZXJuIHZvaWQgZmluaXQodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0b2xlcmFudF9md2FpdCh2b2lkKQotewotCWFzbSB2b2xhdGlsZSgiZm5jbGV4IDsgZndhaXQiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1hTQVZFKSB7Ci0JCXhyc3Rvcl9jaGVja2luZygmdHNrLT50aHJlYWQueHN0YXRlLT54c2F2ZSk7Ci0JCXJldHVybjsKLQl9Ci0JLyoKLQkgKiBUaGUgIm5vcCIgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGluc3RydWN0aW9ucyB0aGUgc2FtZQotCSAqIGxlbmd0aC4KLQkgKi8KLQlhbHRlcm5hdGl2ZV9pbnB1dCgKLQkJIm5vcCA7IGZyc3RvciAlMSIsCi0JCSJmeHJzdG9yICUxIiwKLQkJWDg2X0ZFQVRVUkVfRlhTUiwKLQkJIm0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSkpOwotfQotCi0vKiBXZSBuZWVkIGEgc2FmZSBhZGRyZXNzIHRoYXQgaXMgY2hlYXAgdG8gZmluZCBhbmQgdGhhdCBpcyBhbHJlYWR5Ci0gICBpbiBMMSBkdXJpbmcgY29udGV4dCBzd2l0Y2guIFRoZSBiZXN0IGNob2ljZXMgYXJlIHVuZm9ydHVuYXRlbHkKLSAgIGRpZmZlcmVudCBmb3IgVVAgYW5kIFNNUCAqLwotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgc2FmZV9hZGRyZXNzIChfX3Blcl9jcHVfb2Zmc2V0WzBdKQotI2Vsc2UKLSNkZWZpbmUgc2FmZV9hZGRyZXNzIChrc3RhdF9jcHUoMCkuY3B1c3RhdC51c2VyKQotI2VuZGlmCi0KLS8qCi0gKiBUaGVzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgZGlzYWJsZWQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fc2F2ZV9pbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlpZiAodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19YU0FWRSkgewotCQlzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c3RhdGUgPSAmdHNrLT50aHJlYWQueHN0YXRlLT54c2F2ZTsKLQkJc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnggPSAmdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmU7Ci0KLQkJeHNhdmUodHNrKTsKLQotCQkvKgotCQkgKiB4c2F2ZSBoZWFkZXIgbWF5IGluZGljYXRlIHRoZSBpbml0IHN0YXRlIG9mIHRoZSBGUC4KLQkJICovCi0JCWlmICghKHhzdGF0ZS0+eHNhdmVfaGRyLnhzdGF0ZV9idiAmIFhTVEFURV9GUCkpCi0JCQlnb3RvIGVuZDsKLQotCQlpZiAodW5saWtlbHkoZngtPnN3ZCAmIFg4N19GU1dfRVMpKQotCQkJYXNtIHZvbGF0aWxlKCJmbmNsZXgiKTsKLQotCQkvKgotCQkgKiB3ZSBjYW4gZG8gYSBzaW1wbGUgcmV0dXJuIGhlcmUgb3IgYmUgcGFyYW5vaWQgOikKLQkJICovCi0JCWdvdG8gY2xlYXJfc3RhdGU7Ci0JfQotCi0JLyogVXNlIG1vcmUgbm9wcyB0aGFuIHN0cmljdGx5IG5lZWRlZCBpbiBjYXNlIHRoZSBjb21waWxlcgotCSAgIHZhcmllcyBjb2RlICovCi0JYWx0ZXJuYXRpdmVfaW5wdXQoCi0JCSJmbnNhdmUgJVtmeF0gO2Z3YWl0OyIgR0VORVJJQ19OT1A4IEdFTkVSSUNfTk9QNCwKLQkJImZ4c2F2ZSAlW2Z4XVxuIgotCQkiYnQgJDcsJVtmc3ddIDsgam5jIDFmIDsgZm5jbGV4XG4xOiIsCi0JCVg4Nl9GRUFUVVJFX0ZYU1IsCi0JCVtmeF0gIm0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSksCi0JCVtmc3ddICJtIiAodHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUuc3dkKSA6ICJtZW1vcnkiKTsKLWNsZWFyX3N0YXRlOgotCS8qIEFNRCBLNy9LOCBDUFVzIGRvbid0IHNhdmUvcmVzdG9yZSBGRFAvRklQL0ZPUCB1bmxlc3MgYW4gZXhjZXB0aW9uCi0JICAgaXMgcGVuZGluZy4gIENsZWFyIHRoZSB4ODcgc3RhdGUgaGVyZSBieSBzZXR0aW5nIGl0IHRvIGZpeGVkCi0JICAgdmFsdWVzLiBzYWZlX2FkZHJlc3MgaXMgYSByYW5kb20gdmFyaWFibGUgdGhhdCBzaG91bGQgYmUgaW4gTDEgKi8KLQlhbHRlcm5hdGl2ZV9pbnB1dCgKLQkJR0VORVJJQ19OT1A4IEdFTkVSSUNfTk9QMiwKLQkJImVtbXNcblx0IgkgIAkvKiBjbGVhciBzdGFjayB0YWdzICovCi0JCSJmaWxkbCAlW2FkZHJdIiwgCS8qIHNldCBGP1AgdG8gZGVmaW5lZCB2YWx1ZSAqLwotCQlYODZfRkVBVFVSRV9GWFNBVkVfTEVBSywKLQkJW2FkZHJdICJtIiAoc2FmZV9hZGRyZXNzKSk7Ci1lbmQ6Ci0JdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7Ci19Ci0KLSNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCi0KLS8qCi0gKiBTaWduYWwgZnJhbWUgaGFuZGxlcnMuLi4KLSAqLwotZXh0ZXJuIGludCBzYXZlX2kzODdfeHN0YXRlKHZvaWQgX191c2VyICpidWYpOwotZXh0ZXJuIGludCByZXN0b3JlX2kzODdfeHN0YXRlKHZvaWQgX191c2VyICpidWYpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX191bmxhenlfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1VTRURGUFUpIHsKLQkJX19zYXZlX2luaXRfZnB1KHRzayk7Ci0JCXN0dHMoKTsKLQl9IGVsc2UKLQkJdHNrLT5mcHVfY291bnRlciA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlpZiAodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19VU0VERlBVKSB7Ci0JCXRvbGVyYW50X2Z3YWl0KCk7Ci0JCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICY9IH5UU19VU0VERlBVOwotCQlzdHRzKCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX2ZwdV9iZWdpbih2b2lkKQotewotCXN0cnVjdCB0aHJlYWRfaW5mbyAqbWUgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKG1lLT5zdGF0dXMgJiBUU19VU0VERlBVKQotCQlfX3NhdmVfaW5pdF9mcHUobWUtPnRhc2spOwotCWVsc2UKLQkJY2x0cygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX2ZwdV9lbmQodm9pZCkKLXsKLQlzdHRzKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotLyoKLSAqIFNvbWUgaW5zdHJ1Y3Rpb25zIGxpa2UgVklBJ3MgcGFkbG9jayBpbnN0cnVjdGlvbnMgZ2VuZXJhdGUgYSBzcHVyaW91cwotICogRE5BIGZhdWx0IGJ1dCBkb24ndCBtb2RpZnkgU1NFIHJlZ2lzdGVycy4gQW5kIHRoZXNlIGluc3RydWN0aW9ucwotICogZ2V0IHVzZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBhc3dlbGwuIFRvIHByZXZlbnQgdGhlc2Uga2VybmVsIGluc3RydWN0aW9ucwotICogaW4gaW50ZXJydXB0IGNvbnRleHQgaW50ZXJhY3Qgd3JvbmdseSB3aXRoIG90aGVyIHVzZXIva2VybmVsIGZwdSB1c2FnZSwgd2UKLSAqIHNob3VsZCB1c2UgdGhlbSBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGlycV90c19zYXZlL3Jlc3RvcmUoKQotICovCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdHNfc2F2ZSh2b2lkKQotewotCS8qCi0JICogSWYgd2UgYXJlIGluIHByb2Nlc3MgY29udGV4dCwgd2UgYXJlIG9rIHRvIHRha2UgYSBzcHVyaW91cyBETkEgZmF1bHQuCi0JICogT3RoZXJ3aXNlLCBkb2luZyBjbHRzKCkgaW4gcHJvY2VzcyBjb250ZXh0IHJlcXVpcmUgcHJlLWVtcHRpb24gdG8KLQkgKiBiZSBkaXNhYmxlZCBvciBzb21lIGhlYXZ5IGxpZnRpbmcgbGlrZSBrZXJuZWxfZnB1X2JlZ2luKCkKLQkgKi8KLQlpZiAoIWluX2ludGVycnVwdCgpKQotCQlyZXR1cm4gMDsKLQotCWlmIChyZWFkX2NyMCgpICYgWDg2X0NSMF9UUykgewotCQljbHRzKCk7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXJxX3RzX3Jlc3RvcmUoaW50IFRTX3N0YXRlKQotewotCWlmIChUU19zdGF0ZSkKLQkJc3R0cygpOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9pbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlfX3NhdmVfaW5pdF9mcHUodHNrKTsKLQlzdHRzKCk7Ci19Ci0KLSNkZWZpbmUgdW5sYXp5X2ZwdQlfX3VubGF6eV9mcHUKLSNkZWZpbmUgY2xlYXJfZnB1CV9fY2xlYXJfZnB1Ci0KLSNlbHNlICAvKiBDT05GSUdfWDg2XzMyICovCi0KLS8qCi0gKiBUaGVzZSBkaXNhYmxlIHByZWVtcHRpb24gb24gdGhlaXIgb3duIGFuZCBhcmUgc2FmZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9pbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlfX3NhdmVfaW5pdF9mcHUodHNrKTsKLQlzdHRzKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubGF6eV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JX191bmxhenlfZnB1KHRzayk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlfX2NsZWFyX2ZwdSh0c2spOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLSNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCi0KLS8qCi0gKiBpMzg3IHN0YXRlIGludGVyYWN0aW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZ2V0X2ZwdV9jd2Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaWYgKGNwdV9oYXNfZnhzcikgewotCQlyZXR1cm4gdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUuY3dkOwotCX0gZWxzZSB7Ci0JCXJldHVybiAodW5zaWduZWQgc2hvcnQpdHNrLT50aHJlYWQueHN0YXRlLT5mc2F2ZS5jd2Q7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGdldF9mcHVfc3dkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmIChjcHVfaGFzX2Z4c3IpIHsKLQkJcmV0dXJuIHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLnN3ZDsKLQl9IGVsc2UgewotCQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KXRzay0+dGhyZWFkLnhzdGF0ZS0+ZnNhdmUuc3dkOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBnZXRfZnB1X214Y3NyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmIChjcHVfaGFzX3htbSkgewotCQlyZXR1cm4gdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUubXhjc3I7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIE1YQ1NSX0RFRkFVTFQ7Ci0JfQotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSTM4N19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaTgyNTMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pODI1My5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWE1YjUzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pODI1My5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19JODI1M19ICi0jZGVmaW5lIEFTTV9YODZfX0k4MjUzX0gKLQotLyogaTgyNTNBIFBJVCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUElUX01PREUJCTB4NDMKLSNkZWZpbmUgUElUX0NIMAkJCTB4NDAKLSNkZWZpbmUgUElUX0NIMgkJCTB4NDIKLQotZXh0ZXJuIHNwaW5sb2NrX3QgaTgyNTNfbG9jazsKLQotZXh0ZXJuIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmdsb2JhbF9jbG9ja19ldmVudDsKLQotZXh0ZXJuIHZvaWQgc2V0dXBfcGl0X3RpbWVyKHZvaWQpOwotCi0jZGVmaW5lIGluYl9waXQJCWluYl9wCi0jZGVmaW5lIG91dGJfcGl0CW91dGJfcAotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSTgyNTNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2k4MjU5LmggYi9pbmNsdWRlL2FzbS14ODYvaTgyNTkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNjMWIzYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaTgyNTkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSTgyNTlfSAotI2RlZmluZSBBU01fWDg2X19JODI1OV9ICi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi1leHRlcm4gdW5zaWduZWQgaW50IGNhY2hlZF9pcnFfbWFzazsKLQotI2RlZmluZSBfX2J5dGUoeCwgeSkJCSgoKHVuc2lnbmVkIGNoYXIgKikmKHkpKVt4XSkKLSNkZWZpbmUgY2FjaGVkX21hc3Rlcl9tYXNrCShfX2J5dGUoMCwgY2FjaGVkX2lycV9tYXNrKSkKLSNkZWZpbmUgY2FjaGVkX3NsYXZlX21hc2sJKF9fYnl0ZSgxLCBjYWNoZWRfaXJxX21hc2spKQotCi0vKiBpODI1OUEgUElDIHJlZ2lzdGVycyAqLwotI2RlZmluZSBQSUNfTUFTVEVSX0NNRAkJMHgyMAotI2RlZmluZSBQSUNfTUFTVEVSX0lNUgkJMHgyMQotI2RlZmluZSBQSUNfTUFTVEVSX0lTUgkJUElDX01BU1RFUl9DTUQKLSNkZWZpbmUgUElDX01BU1RFUl9QT0xMCQlQSUNfTUFTVEVSX0lTUgotI2RlZmluZSBQSUNfTUFTVEVSX09DVzMJCVBJQ19NQVNURVJfSVNSCi0jZGVmaW5lIFBJQ19TTEFWRV9DTUQJCTB4YTAKLSNkZWZpbmUgUElDX1NMQVZFX0lNUgkJMHhhMQotCi0vKiBpODI1OUEgUElDIHJlbGF0ZWQgdmFsdWUgKi8KLSNkZWZpbmUgUElDX0NBU0NBREVfSVIJCTIKLSNkZWZpbmUgTUFTVEVSX0lDVzRfREVGQVVMVAkweDAxCi0jZGVmaW5lIFNMQVZFX0lDVzRfREVGQVVMVAkweDAxCi0jZGVmaW5lIFBJQ19JQ1c0X0FFT0kJCTIKLQotZXh0ZXJuIHNwaW5sb2NrX3QgaTgyNTlBX2xvY2s7Ci0KLWV4dGVybiB2b2lkIGluaXRfODI1OUEoaW50IGF1dG9fZW9pKTsKLWV4dGVybiB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc3RhcnR1cF84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIHRoZSBQSUMgbWF5IG5lZWQgYSBjYXJlZnVsIGRlbGF5IG9uIHNvbWUgcGxhdGZvcm1zLCBoZW5jZSBzcGVjaWZpYyBjYWxscyAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGluYl9waWModW5zaWduZWQgaW50IHBvcnQpCi17Ci0JdW5zaWduZWQgY2hhciB2YWx1ZSA9IGluYihwb3J0KTsKLQotCS8qCi0JICogZGVsYXkgZm9yIHNvbWUgYWNjZXNzZXMgdG8gUElDIG9uIG1vdGhlcmJvYXJkIG9yIGluIGNoaXBzZXQKLQkgKiBtdXN0IGJlIGF0IGxlYXN0IG9uZSBtaWNyb3NlY29uZCwgc28gYmUgc2FmZSBoZXJlOgotCSAqLwotCXVkZWxheSgyKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dGJfcGljKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQotewotCW91dGIodmFsdWUsIHBvcnQpOwotCS8qCi0JICogZGVsYXkgZm9yIHNvbWUgYWNjZXNzZXMgdG8gUElDIG9uIG1vdGhlcmJvYXJkIG9yIGluIGNoaXBzZXQKLQkgKiBtdXN0IGJlIGF0IGxlYXN0IG9uZSBtaWNyb3NlY29uZCwgc28gYmUgc2FmZSBoZXJlOgotCSAqLwotCXVkZWxheSgyKTsKLX0KLQotZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBpODI1OUFfY2hpcDsKLQotZXh0ZXJuIHZvaWQgbWFza184MjU5QSh2b2lkKTsKLWV4dGVybiB2b2lkIHVubWFza184MjU5QSh2b2lkKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0k4MjU5X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pYTMyLmggYi9pbmNsdWRlL2FzbS14ODYvaWEzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTMyZjdhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pYTMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19JQTMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSUEzMl9ICi0KLQotI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgotCi0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Ci0KLS8qCi0gKiAzMiBiaXQgc3RydWN0dXJlcyBmb3IgSUEzMiBzdXBwb3J0LgotICovCi0KLSNpbmNsdWRlIDxhc20vc2lnY29udGV4dDMyLmg+Ci0KLS8qIHNpZ25hbC5oICovCi1zdHJ1Y3Qgc2lnYWN0aW9uMzIgewotCXVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbAotCQkJCQkgICB3aXRoIDMyIGJpdHMgKi8KLQl1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCi0JY29tcGF0X3NpZ3NldF90IHNhX21hc2s7CS8qIEEgMzIgYml0IG1hc2sgKi8KLX07Ci0KLXN0cnVjdCBvbGRfc2lnYWN0aW9uMzIgewotCXVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbAotCQkJCQkgICB3aXRoIDMyIGJpdHMgKi8KLQljb21wYXRfb2xkX3NpZ3NldF90IHNhX21hc2s7CS8qIEEgMzIgYml0IG1hc2sgKi8KLQl1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCi19OwotCi10eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFja19pYTMyIHsKLQl1bnNpZ25lZCBpbnQJc3Nfc3A7Ci0JaW50CQlzc19mbGFnczsKLQl1bnNpZ25lZCBpbnQJc3Nfc2l6ZTsKLX0gc3RhY2tfaWEzMl90OwotCi1zdHJ1Y3QgdWNvbnRleHRfaWEzMiB7Ci0JdW5zaWduZWQgaW50CSAgdWNfZmxhZ3M7Ci0JdW5zaWduZWQgaW50IAkgIHVjX2xpbms7Ci0Jc3RhY2tfaWEzMl90CSAgdWNfc3RhY2s7Ci0Jc3RydWN0IHNpZ2NvbnRleHRfaWEzMiB1Y19tY29udGV4dDsKLQljb21wYXRfc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLS8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4yLCBoZW5jZSB0aGUgYWJzb2x1dGVseQotICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KLSAqLwotc3RydWN0IHN0YXQ2NCB7Ci0JdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKLQl1bnNpZ25lZCBjaGFyCQlfX3BhZDBbNF07Ci0KLSNkZWZpbmUgU1RBVDY0X0hBU19CUk9LRU5fU1RfSU5PCTEKLQl1bnNpZ25lZCBpbnQJCV9fc3RfaW5vOwotCi0JdW5zaWduZWQgaW50CQlzdF9tb2RlOwotCXVuc2lnbmVkIGludAkJc3Rfbmxpbms7Ci0KLQl1bnNpZ25lZCBpbnQJCXN0X3VpZDsKLQl1bnNpZ25lZCBpbnQJCXN0X2dpZDsKLQotCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OwotCXVuc2lnbmVkIGNoYXIJCV9fcGFkM1s0XTsKLQotCWxvbmcgbG9uZwkJc3Rfc2l6ZTsKLQl1bnNpZ25lZCBpbnQJCXN0X2Jsa3NpemU7Ci0KLQlsb25nIGxvbmcJCXN0X2Jsb2NrczsvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZCAqLwotCi0JdW5zaWduZWQgCQlzdF9hdGltZTsKLQl1bnNpZ25lZCAJCXN0X2F0aW1lX25zZWM7Ci0JdW5zaWduZWQgCQlzdF9tdGltZTsKLQl1bnNpZ25lZCAJCXN0X210aW1lX25zZWM7Ci0JdW5zaWduZWQgCQlzdF9jdGltZTsKLQl1bnNpZ25lZCAJCXN0X2N0aW1lX25zZWM7Ci0KLQl1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotdHlwZWRlZiBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gewotCWludCBzaV9zaWdubzsKLQlpbnQgc2lfZXJybm87Ci0JaW50IHNpX2NvZGU7Ci0KLQl1bmlvbiB7Ci0JCWludCBfcGFkWygoMTI4IC8gc2l6ZW9mKGludCkpIC0gMyldOwotCi0JCS8qIGtpbGwoKSAqLwotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9raWxsOwotCi0JCS8qIFBPU0lYLjFiIHRpbWVycyAqLwotCQlzdHJ1Y3QgewotCQkJY29tcGF0X3RpbWVyX3QgX3RpZDsJLyogdGltZXIgaWQgKi8KLQkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KLQkJCWNvbXBhdF9zaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCi0JCQlpbnQgX3N5c19wcml2YXRlOwkvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KLQkJCWludCBfb3ZlcnJ1bl9pbmNyOwkvKiBhbW91bnQgdG8gYWRkIHRvIG92ZXJydW4gKi8KLQkJfSBfdGltZXI7Ci0KLQkJLyogUE9TSVguMWIgc2lnbmFscyAqLwotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwotCQkJY29tcGF0X3NpZ3ZhbF90IF9zaWd2YWw7Ci0JCX0gX3J0OwotCi0JCS8qIFNJR0NITEQgKi8KLQkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGludCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwotCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwotCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNvbXBhdF9jbG9ja190IF91dGltZTsKLQkJCWNvbXBhdF9jbG9ja190IF9zdGltZTsKLQkJfSBfc2lnY2hsZDsKLQotCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCi0JCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBpbnQgX2FkZHI7CS8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KLQkJfSBfc2lnZmF1bHQ7Ci0KLQkJLyogU0lHUE9MTCAqLwotCQlzdHJ1Y3QgewotCQkJaW50IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KLQkJCWludCBfZmQ7Ci0JCX0gX3NpZ3BvbGw7Ci0JfSBfc2lmaWVsZHM7Ci19IGNvbXBhdF9zaWdpbmZvX3Q7Ci0KLXN0cnVjdCBzaWdmcmFtZTMyIHsKLQl1MzIgcHJldGNvZGU7Ci0JaW50IHNpZzsKLQlzdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIHNjOwotCXN0cnVjdCBfZnBzdGF0ZV9pYTMyIGZwc3RhdGU7Ci0JdW5zaWduZWQgaW50IGV4dHJhbWFza1tfQ09NUEFUX05TSUdfV09SRFMtMV07Ci19OwotCi1zdHJ1Y3QgcnRfc2lnZnJhbWUzMiB7Ci0JdTMyIHByZXRjb2RlOwotCWludCBzaWc7Ci0JdTMyIHBpbmZvOwotCXUzMiBwdWM7Ci0JY29tcGF0X3NpZ2luZm9fdCBpbmZvOwotCXN0cnVjdCB1Y29udGV4dF9pYTMyIHVjOwotCXN0cnVjdCBfZnBzdGF0ZV9pYTMyIGZwc3RhdGU7Ci19OwotCi1zdHJ1Y3QgdXN0YXQzMiB7Ci0JX191MzIJCQlmX3RmcmVlOwotCWNvbXBhdF9pbm9fdAkJZl90aW5vZGU7Ci0JY2hhcgkJCWZfZm5hbWVbNl07Ci0JY2hhcgkJCWZfZnBhY2tbNl07Ci19OwotCi0jZGVmaW5lIElBMzJfU1RBQ0tfVE9QIElBMzJfUEFHRV9PRkZTRVQKLQotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBsaW51eF9iaW5wcm07Ci1leHRlcm4gaW50IGlhMzJfc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCi0JCQkJdW5zaWduZWQgbG9uZyBzdGFja190b3AsIGludCBleGVjX3N0YWNrKTsKLXN0cnVjdCBtbV9zdHJ1Y3Q7Ci1leHRlcm4gdm9pZCBpYTMyX3BpY2tfbW1hcF9sYXlvdXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCi0jZW5kaWYKLQotI2VuZGlmIC8qICFDT05GSUdfSUEzMl9TVVBQT1JUICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19JQTMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pYTMyX3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20teDg2L2lhMzJfdW5pc3RkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZDg4N2QuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lhMzJfdW5pc3RkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0lBMzJfVU5JU1REX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSUEzMl9VTklTVERfSAotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzIG9mIHRoZSBpYTMyIHBvcnQsCi0gKiB0aGlzIGlzIGZvciB0aGUga2VybmVsIG9ubHkuCi0gKiBPbmx5IGFkZCBzeXNjYWxscyBoZXJlIHdoZXJlIHNvbWUgcGFydCBvZiB0aGUga2VybmVsIG5lZWRzIHRvIGtub3cKLSAqIHRoZSBudW1iZXIuIFRoaXMgc2hvdWxkIGJlIG90aGVyd2lzZSBpbiBzeW5jIHdpdGggYXNtLXg4Ni91bmlzdGRfMzIuaC4gLUFLCi0gKi8KLQotI2RlZmluZSBfX05SX2lhMzJfcmVzdGFydF9zeXNjYWxsIDAKLSNkZWZpbmUgX19OUl9pYTMyX2V4aXQJCSAgMQotI2RlZmluZSBfX05SX2lhMzJfcmVhZAkJICAzCi0jZGVmaW5lIF9fTlJfaWEzMl93cml0ZQkJICA0Ci0jZGVmaW5lIF9fTlJfaWEzMl9zaWdyZXR1cm4JMTE5Ci0jZGVmaW5lIF9fTlJfaWEzMl9ydF9zaWdyZXR1cm4JMTczCi0KLSNlbmRpZiAvKiBBU01fWDg2X19JQTMyX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaWRsZS5oIGIvaW5jbHVkZS9hc20teDg2L2lkbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFhM2Y3ODMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lkbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSURMRV9ICi0jZGVmaW5lIEFTTV9YODZfX0lETEVfSAotCi0jZGVmaW5lIElETEVfU1RBUlQgMQotI2RlZmluZSBJRExFX0VORCAyCi0KLXN0cnVjdCBub3RpZmllcl9ibG9jazsKLXZvaWQgaWRsZV9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pOwotCi12b2lkIGVudGVyX2lkbGUodm9pZCk7Ci12b2lkIGV4aXRfaWRsZSh2b2lkKTsKLQotdm9pZCBjMWVfcmVtb3ZlX2NwdShpbnQgY3B1KTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0lETEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2ludGVsX2FyY2hfcGVyZm1vbi5oIGIvaW5jbHVkZS9hc20teDg2L2ludGVsX2FyY2hfcGVyZm1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2MwM2M2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pbnRlbF9hcmNoX3BlcmZtb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSU5URUxfQVJDSF9QRVJGTU9OX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSU5URUxfQVJDSF9QRVJGTU9OX0gKLQotI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwCQkweGMxCi0jZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjEJCTB4YzIKLQotI2RlZmluZSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMAkJMHgxODYKLSNkZWZpbmUgTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDEJCTB4MTg3Ci0KLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUJKDEgPDwgMjIpCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9JTlQJKDEgPDwgMjApCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUwkoMSA8PCAxNykKLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUgkoMSA8PCAxNikKLQotI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfU0VMCSgweDNjKQotI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfVU1BU0sJKDB4MDAgPDwgOCkKLSNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYICgwKQotI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfUFJFU0VOVCBcCi0JKDEgPDwgKEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19JTkRFWCkpCi0KLXVuaW9uIGNwdWlkMTBfZWF4IHsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBpbnQgdmVyc2lvbl9pZDo4OwotCQl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOjg7Ci0JCXVuc2lnbmVkIGludCBiaXRfd2lkdGg6ODsKLQkJdW5zaWduZWQgaW50IG1hc2tfbGVuZ3RoOjg7Ci0JfSBzcGxpdDsKLQl1bnNpZ25lZCBpbnQgZnVsbDsKLX07Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19JTlRFTF9BUkNIX1BFUkZNT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvLmggYi9pbmNsdWRlL2FzbS14ODYvaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzM2Y4My4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSU9fSAotI2RlZmluZSBBU01fWDg2X19JT19ICi0KLSNkZWZpbmUgQVJDSF9IQVNfSU9SRU1BUF9XQwotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotI2RlZmluZSBidWlsZF9tbWlvX3JlYWQobmFtZSwgc2l6ZSwgdHlwZSwgcmVnLCBiYXJyaWVyKSBcCi1zdGF0aWMgaW5saW5lIHR5cGUgbmFtZShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpIFwKLXsgdHlwZSByZXQ7IGFzbSB2b2xhdGlsZSgibW92IiBzaXplICIgJTEsJTAiOnJlZyAocmV0KSBcCi06Im0iICgqKHZvbGF0aWxlIHR5cGUgX19mb3JjZSAqKWFkZHIpIGJhcnJpZXIpOyByZXR1cm4gcmV0OyB9Ci0KLSNkZWZpbmUgYnVpbGRfbW1pb193cml0ZShuYW1lLCBzaXplLCB0eXBlLCByZWcsIGJhcnJpZXIpIFwKLXN0YXRpYyBpbmxpbmUgdm9pZCBuYW1lKHR5cGUgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpIFwKLXsgYXNtIHZvbGF0aWxlKCJtb3YiIHNpemUgIiAlMCwlMSI6IDpyZWcgKHZhbCksIFwKLSJtIiAoKih2b2xhdGlsZSB0eXBlIF9fZm9yY2UgKilhZGRyKSBiYXJyaWVyKTsgfQotCi1idWlsZF9tbWlvX3JlYWQocmVhZGIsICJiIiwgdW5zaWduZWQgY2hhciwgIj1xIiwgOiJtZW1vcnkiKQotYnVpbGRfbW1pb19yZWFkKHJlYWR3LCAidyIsIHVuc2lnbmVkIHNob3J0LCAiPXIiLCA6Im1lbW9yeSIpCi1idWlsZF9tbWlvX3JlYWQocmVhZGwsICJsIiwgdW5zaWduZWQgaW50LCAiPXIiLCA6Im1lbW9yeSIpCi0KLWJ1aWxkX21taW9fcmVhZChfX3JlYWRiLCAiYiIsIHVuc2lnbmVkIGNoYXIsICI9cSIsICkKLWJ1aWxkX21taW9fcmVhZChfX3JlYWR3LCAidyIsIHVuc2lnbmVkIHNob3J0LCAiPXIiLCApCi1idWlsZF9tbWlvX3JlYWQoX19yZWFkbCwgImwiLCB1bnNpZ25lZCBpbnQsICI9ciIsICkKLQotYnVpbGRfbW1pb193cml0ZSh3cml0ZWIsICJiIiwgdW5zaWduZWQgY2hhciwgInEiLCA6Im1lbW9yeSIpCi1idWlsZF9tbWlvX3dyaXRlKHdyaXRldywgInciLCB1bnNpZ25lZCBzaG9ydCwgInIiLCA6Im1lbW9yeSIpCi1idWlsZF9tbWlvX3dyaXRlKHdyaXRlbCwgImwiLCB1bnNpZ25lZCBpbnQsICJyIiwgOiJtZW1vcnkiKQotCi1idWlsZF9tbWlvX3dyaXRlKF9fd3JpdGViLCAiYiIsIHVuc2lnbmVkIGNoYXIsICJxIiwgKQotYnVpbGRfbW1pb193cml0ZShfX3dyaXRldywgInciLCB1bnNpZ25lZCBzaG9ydCwgInIiLCApCi1idWlsZF9tbWlvX3dyaXRlKF9fd3JpdGVsLCAibCIsIHVuc2lnbmVkIGludCwgInIiLCApCi0KLSNkZWZpbmUgcmVhZGJfcmVsYXhlZChhKSBfX3JlYWRiKGEpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYSkgX19yZWFkdyhhKQotI2RlZmluZSByZWFkbF9yZWxheGVkKGEpIF9fcmVhZGwoYSkKLSNkZWZpbmUgX19yYXdfcmVhZGIgX19yZWFkYgotI2RlZmluZSBfX3Jhd19yZWFkdyBfX3JlYWR3Ci0jZGVmaW5lIF9fcmF3X3JlYWRsIF9fcmVhZGwKLQotI2RlZmluZSBfX3Jhd193cml0ZWIgX193cml0ZWIKLSNkZWZpbmUgX19yYXdfd3JpdGV3IF9fd3JpdGV3Ci0jZGVmaW5lIF9fcmF3X3dyaXRlbCBfX3dyaXRlbAotCi0jZGVmaW5lIG1taW93YigpIGJhcnJpZXIoKQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotYnVpbGRfbW1pb19yZWFkKHJlYWRxLCAicSIsIHVuc2lnbmVkIGxvbmcsICI9ciIsIDoibWVtb3J5IikKLWJ1aWxkX21taW9fcmVhZChfX3JlYWRxLCAicSIsIHVuc2lnbmVkIGxvbmcsICI9ciIsICkKLWJ1aWxkX21taW9fd3JpdGUod3JpdGVxLCAicSIsIHVuc2lnbmVkIGxvbmcsICJyIiwgOiJtZW1vcnkiKQotYnVpbGRfbW1pb193cml0ZShfX3dyaXRlcSwgInEiLCB1bnNpZ25lZCBsb25nLCAiciIsICkKLQotI2RlZmluZSByZWFkcV9yZWxheGVkKGEpIF9fcmVhZHEoYSkKLSNkZWZpbmUgX19yYXdfcmVhZHEgX19yZWFkcQotI2RlZmluZSBfX3Jhd193cml0ZXEgd3JpdGVxCi0KLS8qIExldCBwZW9wbGUga25vdyB3ZSBoYXZlIHRoZW0gKi8KLSNkZWZpbmUgcmVhZHEgcmVhZHEKLSNkZWZpbmUgd3JpdGVxIHdyaXRlcQotI2VuZGlmCi0KLWV4dGVybiBpbnQgaW9tbXVfYmlvX21lcmdlOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJpb18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiaW9fNjQuaCIKLSNlbmRpZgotCi1leHRlcm4gdm9pZCAqeGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzKTsKLWV4dGVybiB2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzLCB2b2lkICphZGRyKTsKLQotZXh0ZXJuIGludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQl1bnNpZ25lZCBsb25nIHByb3RfdmFsKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2ModW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0KLS8qCi0gKiBlYXJseV9pb3JlbWFwKCkgYW5kIGVhcmx5X2lvdW5tYXAoKSBhcmUgZm9yIHRlbXBvcmFyeSBlYXJseSBib290LXRpbWUKLSAqIG1hcHBpbmdzLCBiZWZvcmUgdGhlIHJlYWwgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwuCi0gKiBBIGJvb3QtdGltZSBtYXBwaW5nIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIGF0IG1vc3QgMTYgcGFnZXMuCi0gKi8KLWV4dGVybiB2b2lkIGVhcmx5X2lvcmVtYXBfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGVhcmx5X2lvcmVtYXBfY2xlYXIodm9pZCk7Ci1leHRlcm4gdm9pZCBlYXJseV9pb3JlbWFwX3Jlc2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgKmVhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCAqZWFybHlfbWVtcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBlYXJseV9pb3VubWFwKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICpmaXhfaW9yZW1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cyk7Ci0KLQotI2VuZGlmIC8qIEFTTV9YODZfX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pb18zMi5oIGIvaW5jbHVkZS9hc20teDg2L2lvXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmN2Q4NzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19JT18zMl9ICi0jZGVmaW5lIEFTTV9YODZfX0lPXzMyX0gKLQotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucwotICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQotICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKLSAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCi0gKgotICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCi0gKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0Ci0gKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKLSAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKLSAqIG1pc3Rha2Ugc29tZXdoZXJlLgotICovCi0KLS8qCi0gKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCi0gKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCi0gKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgotICoKLSAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6Ci0gKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCi0gKgotICoJCUxpbnVzCi0gKi8KLQotIC8qCi0gICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKLSAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCi0gICoKLSAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKLSAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCi0gICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+Ci0gICovCi0KLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCi0KLSNkZWZpbmUgWFFVQURfUE9SVElPX0JBU0UgMHhmZTQwMDAwMAotI2RlZmluZSBYUVVBRF9QT1JUSU9fUVVBRCAweDQwMDAwICAvKiAyNTZrIHBlciBxdWFkLiAqLwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotLyoKLSAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKLSAqLwotI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAotCi0vKioKLSAqCXZpcnRfdG9fcGh5cwktCW1hcCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbAotICoJQGFkZHJlc3M6IGFkZHJlc3MgdG8gcmVtYXAKLSAqCi0gKglUaGUgcmV0dXJuZWQgcGh5c2ljYWwgYWRkcmVzcyBpcyB0aGUgcGh5c2ljYWwgKENQVSkgbWFwcGluZyBmb3IKLSAqCXRoZSBtZW1vcnkgYWRkcmVzcyBnaXZlbi4gSXQgaXMgb25seSB2YWxpZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBvbgotICoJYWRkcmVzc2VzIGRpcmVjdGx5IG1hcHBlZCBvciBhbGxvY2F0ZWQgdmlhIGttYWxsb2MuCi0gKgotICoJVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBnaXZlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KLSAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKLSAqCXRoaXMgZnVuY3Rpb24KLSAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCi17Ci0JcmV0dXJuIF9fcGEoYWRkcmVzcyk7Ci19Ci0KLS8qKgotICoJcGh5c190b192aXJ0CS0JbWFwIHBoeXNpY2FsIGFkZHJlc3MgdG8gdmlydHVhbAotICoJQGFkZHJlc3M6IGFkZHJlc3MgdG8gcmVtYXAKLSAqCi0gKglUaGUgcmV0dXJuZWQgdmlydHVhbCBhZGRyZXNzIGlzIGEgY3VycmVudCBDUFUgbWFwcGluZyBmb3IKLSAqCXRoZSBtZW1vcnkgYWRkcmVzcyBnaXZlbi4gSXQgaXMgb25seSB2YWxpZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBvbgotICoJYWRkcmVzc2VzIHRoYXQgaGF2ZSBhIGtlcm5lbCBtYXBwaW5nCi0gKgotICoJVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgYnVzIG1hcHBpbmdzIGZvciBETUEgdHJhbnNmZXJzLiBJbgotICoJYWxtb3N0IGFsbCBjb25jZWl2YWJsZSBjYXNlcyBhIGRldmljZSBkcml2ZXIgc2hvdWxkIG5vdCBiZSB1c2luZwotICoJdGhpcyBmdW5jdGlvbgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4gX192YShhZGRyZXNzKTsKLX0KLQotLyoKLSAqIENoYW5nZSAic3RydWN0IHBhZ2UiIHRvIHBoeXNpY2FsIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpICAgICgoZG1hX2FkZHJfdClwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQotCi0vKioKLSAqIGlvcmVtYXAgICAgIC0gICBtYXAgYnVzIG1lbW9yeSBpbnRvIENQVSBzcGFjZQotICogQG9mZnNldDogICAgYnVzIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQotICogQHNpemU6ICAgICAgc2l6ZSBvZiB0aGUgcmVzb3VyY2UgdG8gbWFwCi0gKgotICogaW9yZW1hcCBwZXJmb3JtcyBhIHBsYXRmb3JtIHNwZWNpZmljIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdG8KLSAqIG1ha2UgYnVzIG1lbW9yeSBDUFUgYWNjZXNzaWJsZSB2aWEgdGhlIHJlYWRiL3JlYWR3L3JlYWRsL3dyaXRlYi8KLSAqIHdyaXRldy93cml0ZWwgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgbW1pbyBoZWxwZXJzLiBUaGUgcmV0dXJuZWQKLSAqIGFkZHJlc3MgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdXNhYmxlIGRpcmVjdGx5IGFzIGEgdmlydHVhbAotICogYWRkcmVzcy4KLSAqCi0gKiBJZiB0aGUgYXJlYSB5b3UgYXJlIHRyeWluZyB0byBtYXAgaXMgYSBQQ0kgQkFSIHlvdSBzaG91bGQgaGF2ZSBhCi0gKiBsb29rIGF0IHBjaV9pb21hcCgpLgotICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCk7Ci0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpb3JlbWFwKCkgYmVoYXZpb3IgaXMgbm9uLWNhY2hlZDoKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKLX0KLQotZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwotCi0vKgotICogSVNBIEkvTyBidXMgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMToxIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgaXNhX3ZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cwotI2RlZmluZSBpc2FfcGFnZV90b19idXMgcGFnZV90b19waHlzCi0jZGVmaW5lIGlzYV9idXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKLQotLyoKLSAqIEhvd2V2ZXIgUENJIG9uZXMgYXJlIG5vdCBuZWNlc3NhcmlseSAxOjEgYW5kIHRoZXJlZm9yZSB0aGVzZSBpbnRlcmZhY2VzCi0gKiBhcmUgZm9yYmlkZGVuIGluIHBvcnRhYmxlIFBDSSBkcml2ZXJzLgotICoKLSAqIEFsbG93IHRoZW0gb24geDg2IGZvciBsZWdhY3kgZHJpdmVycywgdGhvdWdoLgotICovCi0jZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cwotI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKLQotc3RhdGljIGlubGluZSB2b2lkCi1tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCwgaW50IGNvdW50KQotewotCW1lbXNldCgodm9pZCBfX2ZvcmNlICopYWRkciwgdmFsLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBpbnQgY291bnQpCi17Ci0JX19tZW1jcHkoZHN0LCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopc3JjLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGNvdW50KQotewotCV9fbWVtY3B5KCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgY291bnQpOwotfQotCi0vKgotICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bwotICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKLSAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKLSAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKLSAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCi0gKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKLSAqLwotI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKLQotLyoKLSAqCUNhY2hlIG1hbmFnZW1lbnQKLSAqCi0gKglUaGlzIG5lZWRlZCBmb3IgdHdvIGNhc2VzCi0gKgkxLiBPdXQgb2Ygb3JkZXIgYXdhcmUgcHJvY2Vzc29ycwotICoJMi4gQWNjaWRlbnRhbGx5IG91dCBvZiBvcmRlciBwcm9jZXNzb3JzIChQUHJvIGVycmF0YSAjNTEpCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9PT1NUT1JFKSB8fCBkZWZpbmVkKENPTkZJR19YODZfUFBST19GRU5DRSkKLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dyaXRlX2J1ZmZlcnModm9pZCkKLXsKLQlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7Ci19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpIGRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLWV4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKLQotZXh0ZXJuIGludCBpb19kZWxheV90eXBlOwotZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQotewotCW5hdGl2ZV9pb19kZWxheSgpOwotI2lmZGVmIFJFQUxMWV9TTE9XX0lPCi0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmCi0KLSNkZWZpbmUgX19CVUlMRElPKGJ3bCwgYncsIHR5cGUpCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJXAotCW91dCMjYndsIyNfbG9jYWwodmFsdWUsIHBvcnQpOwkJCQlcCi19CQkJCQkJCQlcCi0JCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsKGludCBwb3J0KQkJCVwKLXsJCQkJCQkJCVwKLQlyZXR1cm4gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCQlcCi19Ci0KLSNkZWZpbmUgQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KQlcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgib3V0IiAjYndsICIgJSIgI2J3ICIwLCAldzEiCQlcCi0JCSAgICAgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOwkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsKGludCBwb3J0KQkJCVwKLXsJCQkJCQkJCQlcCi0JdW5zaWduZWQgdHlwZSB2YWx1ZTsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCJpbiIgI2J3bCAiICV3MSwgJSIgI2J3ICIwIgkJXAotCQkgICAgIDogIj1hIih2YWx1ZSkgOiAiTmQiKHBvcnQpKTsJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfbG9jYWxfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJCVwKLQlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsJCQkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfbG9jYWxfcChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsIyNfbG9jYWwocG9ydCk7CQkJXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotX19CVUlMRElPKGJ3bCwgYncsIHR5cGUpCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKLXsJCQkJCQkJCQlcCi0Jb3V0IyNid2wodmFsdWUsIHBvcnQpOwkJCQkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfcChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOwkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLQlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0cyMjYndsKGludCBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgicmVwOyBvdXRzIiAjYndsCQkJCQlcCi0JCSAgICAgOiAiK1MiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIGlucyMjYndsKGludCBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQlcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgicmVwOyBpbnMiICNid2wJCQkJCVwKLQkJICAgICA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKLX0KLQotQlVJTERJTyhiLCBiLCBjaGFyKQotQlVJTERJTyh3LCB3LCBzaG9ydCkKLUJVSUxESU8obCwgLCBpbnQpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19JT18zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW9fNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pb182NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTZlMDg2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pb182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSU9fNjRfSAotI2RlZmluZSBBU01fWDg2X19JT182NF9ICi0KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCi0gKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCi0gKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgotICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKLSAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKLSAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZwotICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQotICogbWlzdGFrZSBzb21ld2hlcmUuCi0gKi8KLQotLyoKLSAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KLSAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKLSAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCi0gKgotICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKLSAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKLSAqCi0gKgkJTGludXMKLSAqLwotCi0gLyoKLSAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQotICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KLSAgKgotICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAotICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKLSAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAgKi8KLQotZXh0ZXJuIHZvaWQgbmF0aXZlX2lvX2RlbGF5KHZvaWQpOwotCi1leHRlcm4gaW50IGlvX2RlbGF5X3R5cGU7Ci1leHRlcm4gdm9pZCBpb19kZWxheV9pbml0KHZvaWQpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duX2lvKHZvaWQpCi17Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jaWZkZWYgUkVBTExZX1NMT1dfSU8KLQluYXRpdmVfaW9fZGVsYXkoKTsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLS8qCi0gKiBUYWxrIGFib3V0IG1pc3VzaW5nIG1hY3Jvcy4uCi0gKi8KLSNkZWZpbmUgX19PVVQxKHMsIHgpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI3ModW5zaWduZWQgeCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCkgewotCi0jZGVmaW5lIF9fT1VUMihzLCBzMSwgczIpCQkJCVwKLWFzbSB2b2xhdGlsZSAoIm91dCIgI3MgIiAlIiBzMSAiMCwlIiBzMiAiMSIKLQotI2lmbmRlZiBSRUFMTFlfU0xPV19JTwotI2RlZmluZSBSRUFMTFlfU0xPV19JTwotI2RlZmluZSBVTlNFVF9SRUFMTFlfU0xPV19JTwotI2VuZGlmCi0KLSNkZWZpbmUgX19PVVQocywgczEsIHgpCQkJCQkJCVwKLQlfX09VVDEocywgeCkgX19PVVQyKHMsIHMxLCAidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOwlcCi0JfQkJCQkJCQkJXAotCV9fT1VUMShzIyNfcCwgeCkgX19PVVQyKHMsIHMxLCAidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyBcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0KLQotI2RlZmluZSBfX0lOMShzKQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIFJFVFVSTl9UWVBFIGluIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQlSRVRVUk5fVFlQRSBfdjsKLQotI2RlZmluZSBfX0lOMihzLCBzMSwgczIpCQkJCQkJXAotCWFzbSB2b2xhdGlsZSAoImluIiAjcyAiICUiIHMyICIxLCUiIHMxICIwIgotCi0jZGVmaW5lIF9fSU4ocywgczEsIGkuLi4pCQkJCQkJXAotCV9fSU4xKHMpIF9fSU4yKHMsIHMxLCAidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCksICMjaSk7CVwKLQlyZXR1cm4gX3Y7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JX19JTjEocyMjX3ApIF9fSU4yKHMsIHMxLCAidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCksICMjaSk7CVwKLQlzbG93X2Rvd25faW8oKTsgXAotCXJldHVybiBfdjsgfQotCi0jaWZkZWYgVU5TRVRfUkVBTExZX1NMT1dfSU8KLSN1bmRlZiBSRUFMTFlfU0xPV19JTwotI2VuZGlmCi0KLSNkZWZpbmUgX19JTlMocykJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIGlucyMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICphZGRyLAkJXAotCQkJICB1bnNpZ25lZCBsb25nIGNvdW50KQkJCQlcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSAoInJlcCA7IGlucyIgI3MJCQkJCVwKLQkJICAgICAgOiAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJXAotCQkgICAgICA6ICJkIiAocG9ydCksICIwIiAoYWRkciksICIxIiAoY291bnQpKTsJCVwKLX0KLQotI2RlZmluZSBfX09VVFMocykJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dHMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwJXAotCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJyZXAgOyBvdXRzIiAjcwkJCQkJXAotCQkgICAgICA6ICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJCQlcCi0JCSAgICAgIDogImQiIChwb3J0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkpOwkJXAotfQotCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGNoYXIKLV9fSU4oYiwgIiIpCi0jdW5kZWYgUkVUVVJOX1RZUEUKLSNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgc2hvcnQKLV9fSU4odywgIiIpCi0jdW5kZWYgUkVUVVJOX1RZUEUKLSNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgaW50Ci1fX0lOKGwsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0KLV9fT1VUKGIsICJiIiwgY2hhcikKLV9fT1VUKHcsICJ3Iiwgc2hvcnQpCi1fX09VVChsLCAsIGludCkKLQotX19JTlMoYikKLV9fSU5TKHcpCi1fX0lOUyhsKQotCi1fX09VVFMoYikKLV9fT1VUUyh3KQotX19PVVRTKGwpCi0KLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCi0KLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoX194ODZfNjRfXykKLQotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2lmbmRlZiBfX2kzODZfXwotLyoKLSAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgotICogVGhlc2UgYXJlIHByZXR0eSB0cml2aWFsCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKLXsKLQlyZXR1cm4gX19wYShhZGRyZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXJldHVybiBfX3ZhKGFkZHJlc3MpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgotICovCi0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAoKGRtYV9hZGRyX3QpcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+Ci0KLS8qCi0gKiBUaGlzIG9uZSBtYXBzIGhpZ2ggYWRkcmVzcyBkZXZpY2UgbWVtb3J5IGFuZCB0dXJucyBvZmYgY2FjaGluZyBmb3IgdGhhdCBhcmVhLgotICogaXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZCB3cml0ZSBjb21iaW5pbmcKLSAqIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgotICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCk7Ci0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpb3JlbWFwKCkgYmVoYXZpb3IgaXMgbm9uLWNhY2hlZDoKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKLX0KLQotZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwotCi1leHRlcm4gdm9pZCBfX2lvbWVtICpmaXhfaW9yZW1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cyk7Ci0KLS8qCi0gKiBJU0EgSS9PIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KLSAqLwotI2RlZmluZSBpc2FfdmlydF90b19idXMgdmlydF90b19waHlzCi0jZGVmaW5lIGlzYV9wYWdlX3RvX2J1cyBwYWdlX3RvX3BoeXMKLSNkZWZpbmUgaXNhX2J1c190b192aXJ0IHBoeXNfdG9fdmlydAotCi0vKgotICogSG93ZXZlciBQQ0kgb25lcyBhcmUgbm90IG5lY2Vzc2FyaWx5IDE6MSBhbmQgdGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMKLSAqIGFyZSBmb3JiaWRkZW4gaW4gcG9ydGFibGUgUENJIGRyaXZlcnMuCi0gKgotICogQWxsb3cgdGhlbSBvbiB4ODYgZm9yIGxlZ2FjeSBkcml2ZXJzLCB0aG91Z2guCi0gKi8KLSNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCi0jZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAotCi12b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKLXZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwKLQkJCQkgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X2Zyb21pbyh0bywgKHVuc2lnbmVkIGxvbmcpZnJvbSwgbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCi0JCQkgICAgICAgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIGxlbik7Ci19Ci0KLXZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKTsKLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLSNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCi0KLSNkZWZpbmUgQklPX1ZNRVJHRV9CT1VOREFSWSBpb21tdV9iaW9fbWVyZ2UKLQotLyoKLSAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKLSAqLwotI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSU9fNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pb19hcGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYzY4YTUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvX2FwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0lPX0FQSUNfSAotI2RlZmluZSBBU01fWDg2X19JT19BUElDX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+Ci0KLS8qCi0gKiBJbnRlbCBJTy1BUElDIHN1cHBvcnQgZm9yIFNNUCBhbmQgVVAgc3lzdGVtcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIKLSAqLwotCi0vKiBJL08gVW5pdCBSZWRpcmVjdGlvbiBUYWJsZSAqLwotI2RlZmluZSBJT19BUElDX1JFRElSX1ZFQ1RPUl9NQVNLCTB4MDAwRkYKLSNkZWZpbmUgSU9fQVBJQ19SRURJUl9ERVNUX0xPR0lDQUwJMHgwMDgwMAotI2RlZmluZSBJT19BUElDX1JFRElSX0RFU1RfUEhZU0lDQUwJMHgwMDAwMAotI2RlZmluZSBJT19BUElDX1JFRElSX1NFTkRfUEVORElORwkoMSA8PCAxMikKLSNkZWZpbmUgSU9fQVBJQ19SRURJUl9SRU1PVEVfSVJSCSgxIDw8IDE0KQotI2RlZmluZSBJT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIJKDEgPDwgMTUpCi0jZGVmaW5lIElPX0FQSUNfUkVESVJfTUFTS0VECQkoMSA8PCAxNikKLQotLyoKLSAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIElPLUFQSUM6Ci0gKi8KLXVuaW9uIElPX0FQSUNfcmVnXzAwIHsKLQl1MzIJcmF3OwotCXN0cnVjdCB7Ci0JCXUzMglfX3Jlc2VydmVkXzIJOiAxNCwKLQkJCUxUUwkJOiAgMSwKLQkJCWRlbGl2ZXJ5X3R5cGUJOiAgMSwKLQkJCV9fcmVzZXJ2ZWRfMQk6ICA4LAotCQkJSUQJCTogIDg7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYml0czsKLX07Ci0KLXVuaW9uIElPX0FQSUNfcmVnXzAxIHsKLQl1MzIJcmF3OwotCXN0cnVjdCB7Ci0JCXUzMgl2ZXJzaW9uCQk6ICA4LAotCQkJX19yZXNlcnZlZF8yCTogIDcsCi0JCQlQUlEJCTogIDEsCi0JCQllbnRyaWVzCQk6ICA4LAotCQkJX19yZXNlcnZlZF8xCTogIDg7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYml0czsKLX07Ci0KLXVuaW9uIElPX0FQSUNfcmVnXzAyIHsKLQl1MzIJcmF3OwotCXN0cnVjdCB7Ci0JCXUzMglfX3Jlc2VydmVkXzIJOiAyNCwKLQkJCWFyYml0cmF0aW9uCTogIDQsCi0JCQlfX3Jlc2VydmVkXzEJOiAgNDsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOwotfTsKLQotdW5pb24gSU9fQVBJQ19yZWdfMDMgewotCXUzMglyYXc7Ci0Jc3RydWN0IHsKLQkJdTMyCWJvb3RfRFQJCTogIDEsCi0JCQlfX3Jlc2VydmVkXzEJOiAzMTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOwotfTsKLQotZW51bSBpb2FwaWNfaXJxX2Rlc3RpbmF0aW9uX3R5cGVzIHsKLQlkZXN0X0ZpeGVkID0gMCwKLQlkZXN0X0xvd2VzdFByaW8gPSAxLAotCWRlc3RfU01JID0gMiwKLQlkZXN0X19yZXNlcnZlZF8xID0gMywKLQlkZXN0X05NSSA9IDQsCi0JZGVzdF9JTklUID0gNSwKLQlkZXN0X19yZXNlcnZlZF8yID0gNiwKLQlkZXN0X0V4dElOVCA9IDcKLX07Ci0KLXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IHsKLQlfX3UzMgl2ZWN0b3IJCTogIDgsCi0JCWRlbGl2ZXJ5X21vZGUJOiAgMywJLyogMDAwOiBGSVhFRAotCQkJCQkgKiAwMDE6IGxvd2VzdCBwcmlvCi0JCQkJCSAqIDExMTogRXh0SU5UCi0JCQkJCSAqLwotCQlkZXN0X21vZGUJOiAgMSwJLyogMDogcGh5c2ljYWwsIDE6IGxvZ2ljYWwgKi8KLQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCi0JCXBvbGFyaXR5CTogIDEsCi0JCWlycgkJOiAgMSwKLQkJdHJpZ2dlcgkJOiAgMSwJLyogMDogZWRnZSwgMTogbGV2ZWwgKi8KLQkJbWFzawkJOiAgMSwJLyogMDogZW5hYmxlZCwgMTogZGlzYWJsZWQgKi8KLQkJX19yZXNlcnZlZF8yCTogMTU7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX191MzIJX19yZXNlcnZlZF8xCTogMjQsCi0JCQkJcGh5c2ljYWxfZGVzdAk6ICA0LAotCQkJCV9fcmVzZXJ2ZWRfMgk6ICA0OwotCQl9IHBoeXNpY2FsOwotCi0JCXN0cnVjdCB7Ci0JCQlfX3UzMglfX3Jlc2VydmVkXzEJOiAyNCwKLQkJCQlsb2dpY2FsX2Rlc3QJOiAgODsKLQkJfSBsb2dpY2FsOwotCX0gZGVzdDsKLSNlbHNlCi0JX191MzIJX19yZXNlcnZlZF8zCTogMjQsCi0JCWRlc3QJCTogIDg7Ci0jZW5kaWYKLQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5IHsKLQlfX3U2NAl2ZWN0b3IJCTogOCwKLQkJemVybwkJOiAzLAotCQlpbmRleDIJCTogMSwKLQkJZGVsaXZlcnlfc3RhdHVzIDogMSwKLQkJcG9sYXJpdHkJOiAxLAotCQlpcnIJCTogMSwKLQkJdHJpZ2dlcgkJOiAxLAotCQltYXNrCQk6IDEsCi0JCXJlc2VydmVkCTogMzEsCi0JCWZvcm1hdAkJOiAxLAotCQlpbmRleAkJOiAxNTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0KLS8qCi0gKiAjIG9mIElPLUFQSUNzIGFuZCAjIG9mIElSUSByb3V0aW5nIHJlZ2lzdGVycwotICovCi1leHRlcm4gaW50IG5yX2lvYXBpY3M7Ci1leHRlcm4gaW50IG5yX2lvYXBpY19yZWdpc3RlcnNbTUFYX0lPX0FQSUNTXTsKLQotLyoKLSAqIE1QLUJJT1MgaXJxIGNvbmZpZ3VyYXRpb24gdGFibGUgc3RydWN0dXJlczoKLSAqLwotCi0jZGVmaW5lIE1QX01BWF9JT0FQSUNfUElOIDEyNwotCi1zdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyB7Ci0JdW5zaWduZWQgbG9uZyBtcF9hcGljYWRkcjsKLQl1bnNpZ25lZCBpbnQgbXBfYXBpY2lkOwotCXVuc2lnbmVkIGNoYXIgbXBfdHlwZTsKLQl1bnNpZ25lZCBjaGFyIG1wX2FwaWN2ZXI7Ci0JdW5zaWduZWQgY2hhciBtcF9mbGFnczsKLX07Ci0KLXN0cnVjdCBtcF9jb25maWdfaW50c3JjIHsKLQl1bnNpZ25lZCBpbnQgbXBfZHN0YXBpYzsKLQl1bnNpZ25lZCBjaGFyIG1wX3R5cGU7Ci0JdW5zaWduZWQgY2hhciBtcF9pcnF0eXBlOwotCXVuc2lnbmVkIHNob3J0IG1wX2lycWZsYWc7Ci0JdW5zaWduZWQgY2hhciBtcF9zcmNidXM7Ci0JdW5zaWduZWQgY2hhciBtcF9zcmNidXNpcnE7Ci0JdW5zaWduZWQgY2hhciBtcF9kc3RpcnE7Ci19OwotCi0vKiBJL08gQVBJQyBlbnRyaWVzICovCi1leHRlcm4gc3RydWN0IG1wX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOwotCi0vKiAjIG9mIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotZXh0ZXJuIGludCBtcF9pcnFfZW50cmllczsKLQotLyogTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCi1leHRlcm4gc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOwotCi0vKiBub24tMCBpZiBkZWZhdWx0ICh0YWJsZS1sZXNzKSBNUCBjb25maWd1cmF0aW9uICovCi1leHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7Ci0KLS8qIE9sZGVyIFNpUyBBUElDIHJlcXVpcmVzIHdlIHJld3JpdGUgdGhlIGluZGV4IHJlZ2lzdGVyICovCi1leHRlcm4gaW50IHNpc19hcGljX2J1ZzsKLQotLyogMSBpZiAibm9hcGljIiBib290IG9wdGlvbiBwYXNzZWQgKi8KLWV4dGVybiBpbnQgc2tpcF9pb2FwaWNfc2V0dXA7Ci0KLS8qIDEgaWYgdGhlIHRpbWVyIElSUSB1c2VzIHRoZSAnODI1OUEgVmlydHVhbCBXaXJlJyBtb2RlICovCi1leHRlcm4gaW50IHRpbWVyX3Rocm91Z2hfODI1OTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfaW9hcGljX3NldHVwKHZvaWQpCi17Ci0Jc2tpcF9pb2FwaWNfc2V0dXAgPSAxOwotfQotCi0vKgotICogSWYgd2UgdXNlIHRoZSBJTy1BUElDIGZvciBJUlEgcm91dGluZywgZGlzYWJsZSBhdXRvbWF0aWMKLSAqIGFzc2lnbm1lbnQgb2YgUENJIElSUSdzLgotICovCi0jZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIFwKLQkobXBfaXJxX2VudHJpZXMgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIGlvX2FwaWNfaXJxcykKLQotI2lmZGVmIENPTkZJR19BQ1BJCi1leHRlcm4gaW50IGlvX2FwaWNfZ2V0X3VuaXF1ZV9pZChpbnQgaW9hcGljLCBpbnQgYXBpY19pZCk7Ci1leHRlcm4gaW50IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaW50IGlvYXBpYyk7Ci1leHRlcm4gaW50IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaW50IGlvYXBpYyk7Ci1leHRlcm4gaW50IGlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsCi0JCQkJICAgaW50IGVkZ2VfbGV2ZWwsIGludCBhY3RpdmVfaGlnaF9sb3cpOwotI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCi0KLWV4dGVybiBpbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKLWV4dGVybiB2b2lkIGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotZXh0ZXJuIGludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKTsKLWV4dGVybiB2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKTsKLWV4dGVybiB2b2lkIHJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoaW50KTsKLSNlbmRpZgotCi0jZWxzZSAgLyogIUNPTkZJR19YODZfSU9fQVBJQyAqLwotI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAwCi1zdGF0aWMgY29uc3QgaW50IHRpbWVyX3Rocm91Z2hfODI1OSA9IDA7Ci1zdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkgeyB9Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX0lPX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvY3Rscy5oIGIvaW5jbHVkZS9hc20teDg2L2lvY3Rscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjc1MmE2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pb2N0bHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSU9DVExTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSU9DVExTX0gKLQotI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgotCi0vKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLwotCi0jZGVmaW5lIFRDR0VUUwkJMHg1NDAxCi0jZGVmaW5lIFRDU0VUUwkJMHg1NDAyIC8qIENsYXNoZXMgd2l0aCBTTkRDVExfVE1SX1NUQVJUIHNvdW5kIGlvY3RsICovCi0jZGVmaW5lIFRDU0VUU1cJCTB4NTQwMwotI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKLSNkZWZpbmUgVENHRVRBCQkweDU0MDUKLSNkZWZpbmUgVENTRVRBCQkweDU0MDYKLSNkZWZpbmUgVENTRVRBVwkJMHg1NDA3Ci0jZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAotI2RlZmluZSBUQ1NCUksJCTB4NTQwOQotI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQotI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgotI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKLSNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECi0jZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKLSNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgotI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCi0jZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQotI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKLSNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKLSNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKLSNkZWZpbmUgVElPQ01HRVQJMHg1NDE1Ci0jZGVmaW5lIFRJT0NNQklTCTB4NTQxNgotI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKLSNkZWZpbmUgVElPQ01TRVQJMHg1NDE4Ci0jZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKLSNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQotI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKLSNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKLSNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQwotI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKLSNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCi0jZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgotI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKLSNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCi0jZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKLSNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCi0jZGVmaW5lIFRJT0NHRVRECTB4NTQyNAotI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCi0vKiAjZGVmaW5lIFRJT0NUVFlHU1RSVUNUIDB4NTQyNiAtIEZvcm1lciBkZWJ1Z2dpbmctb25seSBpb2N0bCAqLwotI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KLSNkZWZpbmUgVENHRVRTMgkJX0lPUignVCcsIDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsIDB4MkIsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsIDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsIDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVElPQ0dSUzQ4NQkweDU0MkUKLSNkZWZpbmUgVElPQ1NSUzQ4NQkweDU0MkYKLSNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkKLQkJCQkvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCi0jZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsIDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLwotI2RlZmluZSBUQ0dFVFgJCTB4NTQzMiAvKiBTWVM1IFRDR0VUWCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFRDU0VUWAkJMHg1NDMzCi0jZGVmaW5lIFRDU0VUWEYJCTB4NTQzNAotI2RlZmluZSBUQ1NFVFhXCQkweDU0MzUKLQotI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAKLSNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCi0jZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgotI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MwotI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0Ci0jZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKLSNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2Ci0jZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NwotI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCi0jZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCi0jZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KLQotI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLwotI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLwotI2RlZmluZSBUSU9DR0hBWUVTRVNQICAgMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgVElPQ1NIQVlFU0VTUCAgIDB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIEZJT1FTSVpFCTB4NTQ2MAotCi0vKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLwotI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCi0jZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCi0jZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgotI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0Ci0jZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4Ci0jZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgotI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKLQotI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19JT0NUTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvbW11LmggYi9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYxZTc0Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSU9NTVVfSAotI2RlZmluZSBBU01fWDg2X19JT01NVV9ICi0KLWV4dGVybiB2b2lkIHBjaV9pb21tdV9zaHV0ZG93bih2b2lkKTsKLWV4dGVybiB2b2lkIG5vX2lvbW11X2luaXQodm9pZCk7Ci1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyBub21tdV9kbWFfb3BzOwotZXh0ZXJuIGludCBmb3JjZV9pb21tdSwgbm9faW9tbXU7Ci1leHRlcm4gaW50IGlvbW11X2RldGVjdGVkOwotZXh0ZXJuIGludCBkbWFyX2Rpc2FibGVkOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKLQotI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCi1leHRlcm4gaW50IGdhcnRfaW9tbXVfYXBlcnR1cmU7Ci1leHRlcm4gaW50IGdhcnRfaW9tbXVfYXBlcnR1cmVfYWxsb3dlZDsKLWV4dGVybiBpbnQgZ2FydF9pb21tdV9hcGVydHVyZV9kaXNhYmxlZDsKLQotZXh0ZXJuIHZvaWQgZWFybHlfZ2FydF9pb21tdV9jaGVjayh2b2lkKTsKLWV4dGVybiB2b2lkIGdhcnRfaW9tbXVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGdhcnRfaW9tbXVfc2h1dGRvd24odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgZ2FydF9wYXJzZV9vcHRpb25zKGNoYXIgKik7Ci1leHRlcm4gdm9pZCBnYXJ0X2lvbW11X2hvbGVfaW5pdCh2b2lkKTsKLQotI2Vsc2UKLSNkZWZpbmUgZ2FydF9pb21tdV9hcGVydHVyZSAgICAgICAgICAgIDAKLSNkZWZpbmUgZ2FydF9pb21tdV9hcGVydHVyZV9hbGxvd2VkICAgIDAKLSNkZWZpbmUgZ2FydF9pb21tdV9hcGVydHVyZV9kaXNhYmxlZCAgIDEKLQotc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2dhcnRfaW9tbXVfY2hlY2sodm9pZCkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnYXJ0X2lvbW11X2luaXQodm9pZCkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnYXJ0X2lvbW11X3NodXRkb3duKHZvaWQpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZ2FydF9wYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZ2FydF9pb21tdV9ob2xlX2luaXQodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSU9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lwY2J1Zi5oIGIvaW5jbHVkZS9hc20teDg2L2lwY2J1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTAzMDRmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcGNidWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSVBDQlVGX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSVBDQlVGX0gKLQotLyoKLSAqIFRoZSBpcGM2NF9wZXJtIHN0cnVjdHVyZSBmb3IgeDg2IGFyY2hpdGVjdHVyZS4KLSAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAotICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCi0gKgotICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgotICogLSAzMi1iaXQgbW9kZV90IGFuZCBzZXEKLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKLSAqLwotCi1zdHJ1Y3QgaXBjNjRfcGVybSB7Ci0JX19rZXJuZWxfa2V5X3QJCWtleTsKLQlfX2tlcm5lbF91aWQzMl90CXVpZDsKLQlfX2tlcm5lbF9naWQzMl90CWdpZDsKLQlfX2tlcm5lbF91aWQzMl90CWN1aWQ7Ci0JX19rZXJuZWxfZ2lkMzJfdAljZ2lkOwotCV9fa2VybmVsX21vZGVfdAkJbW9kZTsKLQl1bnNpZ25lZCBzaG9ydAkJX19wYWQxOwotCXVuc2lnbmVkIHNob3J0CQlzZXE7Ci0JdW5zaWduZWQgc2hvcnQJCV9fcGFkMjsKLQl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7Ci0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOwotfTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0lQQ0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaXBpLmggYi9pbmNsdWRlL2FzbS14ODYvaXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYTY5MmMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSVBJX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSVBJX0gKLQotLyoKLSAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgotICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKLSAqCi0gKiBHZW5lcmljIEFQSUMgSW50ZXJQcm9jZXNzb3IgSW50ZXJydXB0IGNvZGUuCi0gKgotICogTW92ZWQgdG8gaW5jbHVkZSBmaWxlIGJ5IEphbWVzIENsZXZlcmRvbiBmcm9tCi0gKiBhcmNoL3g4Ni02NC9rZXJuZWwvc21wLmMKLSAqCi0gKiBDb3B5cmlnaHRzIGZyb20ga2VybmVsL3NtcC5jOgotICoKLSAqIChjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgotICogKGMpIDE5OTgtOTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKiAoYykgMjAwMiwyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KLSAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KLSNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLQotLyoKLSAqIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRlYWwgd2l0aCBzZW5kaW5nIElQSXMgYmV0d2VlbiBDUFVzLgotICoKLSAqIFdlIHVzZSAnYnJvYWRjYXN0JywgQ1BVLT5DUFUgSVBJcyBhbmQgc2VsZi1JUElzIHRvby4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3ByZXBhcmVfSUNSKHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvciwKLQkJCQkJIHVuc2lnbmVkIGludCBkZXN0KQotewotCXVuc2lnbmVkIGludCBpY3IgPSBzaG9ydGN1dCB8IGRlc3Q7Ci0KLQlzd2l0Y2ggKHZlY3RvcikgewotCWRlZmF1bHQ6Ci0JCWljciB8PSBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yOwotCQlicmVhazsKLQljYXNlIE5NSV9WRUNUT1I6Ci0JCWljciB8PSBBUElDX0RNX05NSTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBpY3I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fcHJlcGFyZV9JQ1IyKHVuc2lnbmVkIGludCBtYXNrKQotewotCXJldHVybiBTRVRfQVBJQ19ERVNUX0ZJRUxEKG1hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX194YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0Jd2hpbGUgKG5hdGl2ZV9hcGljX21lbV9yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1kpCi0JCWNwdV9yZWxheCgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZW5kX0lQSV9zaG9ydGN1dCh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBkZXN0KQotewotCS8qCi0JICogU3VidGxlLiBJbiB0aGUgY2FzZSBvZiB0aGUgJ25ldmVyIGRvIGRvdWJsZSB3cml0ZXMnIHdvcmthcm91bmQKLQkgKiB3ZSBoYXZlIHRvIGxvY2sgb3V0IGludGVycnVwdHMgdG8gYmUgc2FmZS4gIEFzIHdlIGRvbid0IGNhcmUKLQkgKiBvZiB0aGUgdmFsdWUgcmVhZCB3ZSB1c2UgYW4gYXRvbWljIHJtdyBhY2Nlc3MgdG8gYXZvaWQgY29zdGx5Ci0JICogY2xpL3N0aS4gIE90aGVyd2lzZSB3ZSB1c2UgYW4gZXZlbiBjaGVhcGVyIHNpbmdsZSBhdG9taWMgd3JpdGUKLQkgKiB0byB0aGUgQVBJQy4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgY2ZnOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCV9feGFwaWNfd2FpdF9pY3JfaWRsZSgpOwotCi0JLyoKLQkgKiBObyBuZWVkIHRvIHRvdWNoIHRoZSB0YXJnZXQgY2hpcCBmaWVsZAotCSAqLwotCWNmZyA9IF9fcHJlcGFyZV9JQ1Ioc2hvcnRjdXQsIHZlY3RvciwgZGVzdCk7Ci0KLQkvKgotCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgotCSAqLwotCW5hdGl2ZV9hcGljX21lbV93cml0ZShBUElDX0lDUiwgY2ZnKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBzZW5kIGFuIElQSSB3aXRoIG5vIHNob3J0aGFuZCBub3RhdGlvbiAodGhlIGRlc3RpbmF0aW9uIGlzCi0gKiBzcGVjaWZpZWQgaW4gYml0cyA1NiB0byA2MyBvZiB0aGUgSUNSKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fc2VuZF9JUElfZGVzdF9maWVsZCh1bnNpZ25lZCBpbnQgbWFzaywgaW50IHZlY3RvciwKLQkJCQkJIHVuc2lnbmVkIGludCBkZXN0KQotewotCXVuc2lnbmVkIGxvbmcgY2ZnOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCWlmICh1bmxpa2VseSh2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikpCi0JCXNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0JZWxzZQotCQlfX3hhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCS8qCi0JICogcHJlcGFyZSB0YXJnZXQgY2hpcCBmaWVsZAotCSAqLwotCWNmZyA9IF9fcHJlcGFyZV9JQ1IyKG1hc2spOwotCW5hdGl2ZV9hcGljX21lbV93cml0ZShBUElDX0lDUjIsIGNmZyk7Ci0KLQkvKgotCSAqIHByb2dyYW0gdGhlIElDUgotCSAqLwotCWNmZyA9IF9fcHJlcGFyZV9JQ1IoMCwgdmVjdG9yLCBkZXN0KTsKLQotCS8qCi0JICogU2VuZCB0aGUgSVBJLiBUaGUgd3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuCi0JICovCi0JbmF0aXZlX2FwaWNfbWVtX3dyaXRlKEFQSUNfSUNSLCBjZmcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwotCi0JLyoKLQkgKiBIYWNrLiBUaGUgY2x1c3RlcmVkIEFQSUMgYWRkcmVzc2luZyBtb2RlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZAotCSAqIHRvIGFuIGFyYml0cmFyeSBtYXNrLCBzbyBJIGRvIGEgdW5pY2FzdCB0byBlYWNoIENQVSBpbnN0ZWFkLgotCSAqIC0gbWJsaWdoCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKHF1ZXJ5X2NwdSwgbWFzaykgewotCQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKLQkJCQkgICAgICB2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotI2VuZGlmIC8qIEFTTV9YODZfX0lQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaXJxLmggYi9pbmNsdWRlL2FzbS14ODYvaXJxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNWYyOTAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lycS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19JUlFfSAotI2RlZmluZSBBU01fWDg2X19JUlFfSAotLyoKLSAqCShDKSAxOTkyLCAxOTkzIExpbnVzIFRvcnZhbGRzLCAoQykgMTk5NyBJbmdvIE1vbG5hcgotICoKLSAqCUlSUS9JUEkgY2hhbmdlcyB0YWtlbiBmcm9tIHdvcmsgYnkgVGhvbWFzIFJhZGtlCi0gKgk8dG9tc29mdEBpbmZvcm1hdGlrLnR1LWNoZW1uaXR6LmRlPgotICovCi0KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfY2Fub25pY2FsaXplKGludCBpcnEpCi17Ci0JcmV0dXJuICgoaXJxID09IDIpID8gOSA6IGlycSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLSMgZGVmaW5lIEFSQ0hfSEFTX05NSV9XQVRDSERPRwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfNEtTVEFDS1MKLSAgZXh0ZXJuIHZvaWQgaXJxX2N0eF9pbml0KGludCBjcHUpOwotICBleHRlcm4gdm9pZCBpcnFfY3R4X2V4aXQoaW50IGNwdSk7Ci0jIGRlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKLSNlbHNlCi0jIGRlZmluZSBpcnFfY3R4X2luaXQoY3B1KSBkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBpcnFfY3R4X2V4aXQoY3B1KSBkbyB7IH0gd2hpbGUgKDApCi0jIGlmZGVmIENPTkZJR19YODZfNjQKLSMgIGRlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lSUUJBTEFOQ0UKLWV4dGVybiBpbnQgaXJxYmFsYW5jZV9kaXNhYmxlKGNoYXIgKnN0cik7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLWV4dGVybiB2b2lkIGZpeHVwX2lycXMoY3B1bWFza190IG1hcCk7Ci0jZW5kaWYKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHZvaWQgaW5pdF9JUlEodm9pZCk7Ci1leHRlcm4gdm9pZCBuYXRpdmVfaW5pdF9JUlEodm9pZCk7Ci0KLS8qIEludGVycnVwdCB2ZWN0b3IgbWFuYWdlbWVudCAqLwotZXh0ZXJuIERFQ0xBUkVfQklUTUFQKHVzZWRfdmVjdG9ycywgTlJfVkVDVE9SUyk7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycV9yZWdzXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvaXJxX3JlZ3NfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE2YTNiMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaXJxX3JlZ3NfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBQZXItY3B1IGN1cnJlbnQgZnJhbWUgcG9pbnRlciAtIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGFzdCBleGNlcHRpb24gZnJhbWUgb24KLSAqIHRoZSBzdGFjaywgc3RvcmVkIGluIHRoZSBwZXItY3B1IGFyZWEuCi0gKgotICogSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QGdvb3Aub3JnPgotICovCi0jaWZuZGVmIEFTTV9YODZfX0lSUV9SRUdTXzMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSVJRX1JFR1NfMzJfSAotCi0jaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgotCi1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MgKiwgaXJxX3JlZ3MpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICpnZXRfaXJxX3JlZ3Modm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KGlycV9yZWdzKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRfcmVncyAqc2V0X2lycV9yZWdzKHN0cnVjdCBwdF9yZWdzICpuZXdfcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7Ci0KLQlvbGRfcmVncyA9IGdldF9pcnFfcmVncygpOwotCXg4Nl93cml0ZV9wZXJjcHUoaXJxX3JlZ3MsIG5ld19yZWdzKTsKLQotCXJldHVybiBvbGRfcmVnczsKLX0KLQotI2VuZGlmIC8qIEFTTV9YODZfX0lSUV9SRUdTXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pcnFfcmVtYXBwaW5nLmggYi9pbmNsdWRlL2FzbS14ODYvaXJxX3JlbWFwcGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODI0MmM2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcnFfcmVtYXBwaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9JUlFfUkVNQVBQSU5HX0gKLSNkZWZpbmUgX0FTTV9JUlFfUkVNQVBQSU5HX0gKLQotZXh0ZXJuIGludCB4MmFwaWM7Ci0KLSNkZWZpbmUgSVJURV9ERVNUKGRlc3QpICgoeDJhcGljKSA/IGRlc3QgOiBkZXN0IDw8IDgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycV92ZWN0b3JzLmggYi9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkMmQ3Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0lSUV9WRUNUT1JTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSVJRX1ZFQ1RPUlNfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotCi0jZGVmaW5lIE5NSV9WRUNUT1IJCTB4MDIKLQotLyoKLSAqIElEVCB2ZWN0b3JzIHVzYWJsZSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgc3RhcnQKLSAqIGF0IDB4MjA6Ci0gKi8KLSNkZWZpbmUgRklSU1RfRVhURVJOQUxfVkVDVE9SCTB4MjAKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIFNZU0NBTExfVkVDVE9SCQkweDgwCi0jZWxzZQotIyBkZWZpbmUgSUEzMl9TWVNDQUxMX1ZFQ1RPUgkweDgwCi0jZW5kaWYKLQotLyoKLSAqIFJlc2VydmUgdGhlIGxvd2VzdCB1c2FibGUgcHJpb3JpdHkgbGV2ZWwgMHgyMCAtIDB4MmYgZm9yIHRyaWdnZXJpbmcKLSAqIGNsZWFudXAgYWZ0ZXIgaXJxIG1pZ3JhdGlvbiBvbiA2NCBiaXQuCi0gKi8KLSNkZWZpbmUgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IJRklSU1RfRVhURVJOQUxfVkVDVE9SCi0KLS8qCi0gKiBWZWN0b3JzIDB4MjAtMHgyZiBhcmUgdXNlZCBmb3IgSVNBIGludGVycnVwdHMgb24gMzIgYml0LgotICogVmVjdG9ycyAweDMwLTB4M2YgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzIG9uIDY0IGJpdC4KLSAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLSNkZWZpbmUgSVJRMF9WRUNUT1IJCShGSVJTVF9FWFRFUk5BTF9WRUNUT1IpCi0jZWxzZQotI2RlZmluZSBJUlEwX1ZFQ1RPUgkJKEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIDB4MTApCi0jZW5kaWYKLSNkZWZpbmUgSVJRMV9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDEpCi0jZGVmaW5lIElSUTJfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAyKQotI2RlZmluZSBJUlEzX1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgMykKLSNkZWZpbmUgSVJRNF9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDQpCi0jZGVmaW5lIElSUTVfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA1KQotI2RlZmluZSBJUlE2X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgNikKLSNkZWZpbmUgSVJRN19WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDcpCi0jZGVmaW5lIElSUThfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA4KQotI2RlZmluZSBJUlE5X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgOSkKLSNkZWZpbmUgSVJRMTBfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMCkKLSNkZWZpbmUgSVJRMTFfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMSkKLSNkZWZpbmUgSVJRMTJfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMikKLSNkZWZpbmUgSVJRMTNfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMykKLSNkZWZpbmUgSVJRMTRfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxNCkKLSNkZWZpbmUgSVJRMTVfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxNSkKLQotLyoKLSAqIFNwZWNpYWwgSVJRIHZlY3RvcnMgdXNlZCBieSB0aGUgU01QIGFyY2hpdGVjdHVyZSwgMHhmMC0weGZmCi0gKgotICogIHNvbWUgb2YgdGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSAncmFyZScsIHRoZXkgYXJlIG1lcmdlZAotICogIGludG8gYSBzaW5nbGUgdmVjdG9yIChDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikgdG8gc2F2ZSB2ZWN0b3Igc3BhY2UuCi0gKiAgVExCLCByZXNjaGVkdWxlIGFuZCBsb2NhbCBBUElDIHZlY3RvcnMgYXJlIHBlcmZvcm1hbmNlLWNyaXRpY2FsLgotICoKLSAqICBWZWN0b3JzIDB4ZjAtMHhmYSBhcmUgZnJlZSAocmVzZXJ2ZWQgZm9yIGZ1dHVyZSBMaW51eCB1c2UpLgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCi0jIGRlZmluZSBTUFVSSU9VU19BUElDX1ZFQ1RPUgkJMHhmZgotIyBkZWZpbmUgRVJST1JfQVBJQ19WRUNUT1IJCTB4ZmUKLSMgZGVmaW5lIElOVkFMSURBVEVfVExCX1ZFQ1RPUgkJMHhmZAotIyBkZWZpbmUgUkVTQ0hFRFVMRV9WRUNUT1IJCTB4ZmMKLSMgZGVmaW5lIENBTExfRlVOQ1RJT05fVkVDVE9SCQkweGZiCi0jIGRlZmluZSBDQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IJMHhmYQotIyBkZWZpbmUgVEhFUk1BTF9BUElDX1ZFQ1RPUgkJMHhmMAotCi0jZWxzZQotCi0jZGVmaW5lIFNQVVJJT1VTX0FQSUNfVkVDVE9SCQkweGZmCi0jZGVmaW5lIEVSUk9SX0FQSUNfVkVDVE9SCQkweGZlCi0jZGVmaW5lIFJFU0NIRURVTEVfVkVDVE9SCQkweGZkCi0jZGVmaW5lIENBTExfRlVOQ1RJT05fVkVDVE9SCQkweGZjCi0jZGVmaW5lIENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUgkweGZiCi0jZGVmaW5lIFRIRVJNQUxfQVBJQ19WRUNUT1IJCTB4ZmEKLSNkZWZpbmUgVEhSRVNIT0xEX0FQSUNfVkVDVE9SCQkweGY5Ci0jZGVmaW5lIFVWX0JBVV9NRVNTQUdFCQkJMHhmOAotI2RlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1JfRU5ECTB4ZjcKLSNkZWZpbmUgSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUCTB4ZjAJLyogZjAtZjcgdXNlZCBmb3IgVExCIGZsdXNoICovCi0KLSNkZWZpbmUgTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMJOAotCi0jZW5kaWYKLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIgSVJRIHZlY3RvciBpcyBvbiBhIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbCwKLSAqIHRvIHdvcmsgYXJvdW5kIHRoZSAnbG9zdCBsb2NhbCBpbnRlcnJ1cHQgaWYgbW9yZSB0aGFuIDIgSVJRCi0gKiBzb3VyY2VzIHBlciBsZXZlbCcgZXJyYXRhLgotICovCi0jZGVmaW5lIExPQ0FMX1RJTUVSX1ZFQ1RPUgkweGVmCi0KLS8qCi0gKiBGaXJzdCBBUElDIHZlY3RvciBhdmFpbGFibGUgdG8gZHJpdmVyczogKHZlY3RvcnMgMHgzMC0weGVlKSB3ZQotICogc3RhcnQgYXQgMHgzMSgweDQxKSB0byBzcHJlYWQgb3V0IHZlY3RvcnMgZXZlbmx5IGJldHdlZW4gcHJpb3JpdHkKLSAqIGxldmVscy4gKDB4ODAgaXMgdGhlIHN5c2NhbGwgdmVjdG9yKQotICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkweDMxCi0jZWxzZQotIyBkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkoSVJRMTVfVkVDVE9SICsgMikKLSNlbmRpZgotCi0jZGVmaW5lIE5SX1ZFQ1RPUlMJCTI1NgotCi0jZGVmaW5lIEZQVV9JUlEJCQkxMwotCi0jZGVmaW5lCUZJUlNUX1ZNODZfSVJRCQkzCi0jZGVmaW5lIExBU1RfVk04Nl9JUlEJCTE1Ci0jZGVmaW5lIGludmFsaWRfdm04Nl9pcnEoaXJxKQkoKGlycSkgPCAzIHx8IChpcnEpID4gMTUpCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jIGlmIE5SX0NQVVMgPCBNQVhfSU9fQVBJQ1MKLSMgIGRlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDMyICogTlJfQ1BVUykpCi0jIGVsc2UKLSMgIGRlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDMyICogTUFYX0lPX0FQSUNTKSkKLSMgZW5kaWYKLSMgZGVmaW5lIE5SX0lSUV9WRUNUT1JTIE5SX0lSUVMKLQotI2VsaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9WT1lBR0VSKQotCi0jIGlmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKSB8fCBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1ZJU1dTKQotCi0jICBkZWZpbmUgTlJfSVJRUwkJMjI0Ci0KLSMgIGlmICgyMjQgPj0gMzIgKiBOUl9DUFVTKQotIyAgIGRlZmluZSBOUl9JUlFfVkVDVE9SUwlOUl9JUlFTCi0jICBlbHNlCi0jICAgZGVmaW5lIE5SX0lSUV9WRUNUT1JTCSgzMiAqIE5SX0NQVVMpCi0jICBlbmRpZgotCi0jIGVsc2UgLyogSU9fQVBJQyB8fCBQQVJBVklSVCAqLwotCi0jICBkZWZpbmUgTlJfSVJRUwkJMTYKLSMgIGRlZmluZSBOUl9JUlFfVkVDVE9SUwlOUl9JUlFTCi0KLSMgZW5kaWYKLQotI2Vsc2UgLyogIVZJU1dTICYmICFWT1lBR0VSICovCi0KLSMgZGVmaW5lIE5SX0lSUVMJCTIyNAotIyBkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJCU5SX0lSUVMKLQotI2VuZGlmIC8qIFZJU1dTICovCi0KLS8qIFZveWFnZXIgc3BlY2lmaWMgZGVmaW5lcyAqLwotLyogVGhlc2UgZGVmaW5lIHRoZSBDUElzIHdlIHVzZSBpbiBsaW51eCAqLwotI2RlZmluZSBWSUNfQ1BJX0xFVkVMMAkJCTAKLSNkZWZpbmUgVklDX0NQSV9MRVZFTDEJCQkxCi0vKiBub3cgdGhlIGZha2UgQ1BJcyAqLwotI2RlZmluZSBWSUNfVElNRVJfQ1BJCQkJMgotI2RlZmluZSBWSUNfSU5WQUxJREFURV9DUEkJCTMKLSNkZWZpbmUgVklDX1JFU0NIRURVTEVfQ1BJCQk0Ci0jZGVmaW5lIFZJQ19FTkFCTEVfSVJRX0NQSQkJNQotI2RlZmluZSBWSUNfQ0FMTF9GVU5DVElPTl9DUEkJCTYKLSNkZWZpbmUgVklDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSQk3Ci0KLS8qIE5vdyB0aGUgUUlDIENQSXM6ICBTaW5jZSB3ZSBkb24ndCBuZWVkIHRoZSB0d28gaW5pdGlhbCBsZXZlbHMsCi0gKiB0aGVzZSBhcmUgMiBsZXNzIHRoYW4gdGhlIFZJQyBDUElzICovCi0jZGVmaW5lIFFJQ19DUElfT0ZGU0VUCQkJMQotI2RlZmluZSBRSUNfVElNRVJfQ1BJCQkJKFZJQ19USU1FUl9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLSNkZWZpbmUgUUlDX0lOVkFMSURBVEVfQ1BJCQkoVklDX0lOVkFMSURBVEVfQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCi0jZGVmaW5lIFFJQ19SRVNDSEVEVUxFX0NQSQkJKFZJQ19SRVNDSEVEVUxFX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQotI2RlZmluZSBRSUNfRU5BQkxFX0lSUV9DUEkJCShWSUNfRU5BQkxFX0lSUV9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLSNkZWZpbmUgUUlDX0NBTExfRlVOQ1RJT05fQ1BJCQkoVklDX0NBTExfRlVOQ1RJT05fQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCi0jZGVmaW5lIFFJQ19DQUxMX0ZVTkNUSU9OX1NJTkdMRV9DUEkJKFZJQ19DQUxMX0ZVTkNUSU9OX1NJTkdMRV9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLQotI2RlZmluZSBWSUNfU1RBUlRfRkFLRV9DUEkJCVZJQ19USU1FUl9DUEkKLSNkZWZpbmUgVklDX0VORF9GQUtFX0NQSQkJVklDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSQotCi0vKiB0aGlzIGlzIHRoZSBTWVNfSU5UIENQSS4gKi8KLSNkZWZpbmUgVklDX1NZU19JTlQJCQk4Ci0jZGVmaW5lIFZJQ19DTU5fSU5UCQkJMTUKLQotLyogVGhpcyBpcyB0aGUgYm9vdCBDUEkgZm9yIGFsdGVybmF0ZSBwcm9jZXNzb3JzLiAgSXQgZ2V0cyBvdmVyd3JpdHRlbgotICogYnkgdGhlIGFib3ZlIG9uY2UgdGhlIHN5c3RlbSBoYXMgYWN0aXZhdGVkIGFsbCBhdmFpbGFibGUgcHJvY2Vzc29ycyAqLwotI2RlZmluZSBWSUNfQ1BVX0JPT1RfQ1BJCQlWSUNfQ1BJX0xFVkVMMAotI2RlZmluZSBWSUNfQ1BVX0JPT1RfRVJSQVRBX0NQSQkJKFZJQ19DUElfTEVWRUwwICsgOCkKLQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSVJRX1ZFQ1RPUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lzdC5oIGIvaW5jbHVkZS9hc20teDg2L2lzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWEyZmU5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fSVNUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fSVNUX0gKLQotLyoKLSAqIEluY2x1ZGUgZmlsZSBmb3IgdGhlIGludGVyZmFjZSB0byBJU1QgQklPUwotICogQ29weXJpZ2h0IDIwMDIgQW5keSBHcm92ZXIgPGFuZHJldy5ncm92ZXJAaW50ZWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3QgaXN0X2luZm8gewotCV9fdTMyIHNpZ25hdHVyZTsKLQlfX3UzMiBjb21tYW5kOwotCV9fdTMyIGV2ZW50OwotCV9fdTMyIHBlcmZfbGV2ZWw7Ci19OwotCi0jaWZkZWYgX19LRVJORUxfXwotCi1leHRlcm4gc3RydWN0IGlzdF9pbmZvIGlzdF9pbmZvOwotCi0jZW5kaWYJLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIEFTTV9YODZfX0lTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvazguaCBiL2luY2x1ZGUvYXNtLXg4Ni9rOC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmJhZjQzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rOC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19LOF9ICi0jZGVmaW5lIEFTTV9YODZfX0s4X0gKLQotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotCi1leHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgazhfbmJfaWRzW107Ci0KLWV4dGVybiBpbnQgZWFybHlfaXNfazhfbmIodTMyIHZhbHVlKTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2RldiAqKms4X25vcnRoYnJpZGdlczsKLWV4dGVybiBpbnQgbnVtX2s4X25vcnRoYnJpZGdlczsKLWV4dGVybiBpbnQgY2FjaGVfazhfbm9ydGhicmlkZ2VzKHZvaWQpOwotZXh0ZXJuIHZvaWQgazhfZmx1c2hfZ2FydHModm9pZCk7Ci1leHRlcm4gaW50IGs4X3NjYW5fbm9kZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fSzhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20teDg2L2tkZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmJhYjY2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fS0RFQlVHX0gKLSNkZWZpbmUgQVNNX1g4Nl9fS0RFQlVHX0gKLQotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Ci0KLXN0cnVjdCBwdF9yZWdzOwotCi0vKiBHcm9zc2x5IG1pc25hbWVkLiAqLwotZW51bSBkaWVfdmFsIHsKLQlESUVfT09QUyA9IDEsCi0JRElFX0lOVDMsCi0JRElFX0RFQlVHLAotCURJRV9QQU5JQywKLQlESUVfTk1JLAotCURJRV9ESUUsCi0JRElFX05NSVdBVENIRE9HLAotCURJRV9LRVJORUxERUJVRywKLQlESUVfVFJBUCwKLQlESUVfR1BGLAotCURJRV9DQUxMLAotCURJRV9OTUlfSVBJLAotCURJRV9QQUdFX0ZBVUxULAotCURJRV9OTUlVTktOT1dOLAotfTsKLQotZXh0ZXJuIHZvaWQgcHJpbnRrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpOwotZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKiwgc3RydWN0IHB0X3JlZ3MgKixsb25nKTsKLWV4dGVybiBpbnQgX19tdXN0X2NoZWNrIF9fZGllKGNvbnN0IGNoYXIgKiwgc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1leHRlcm4gdm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gdm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCk7Ci1leHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFsbCk7Ci1leHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb29wc19iZWdpbih2b2lkKTsKLWV4dGVybiB2b2lkIG9vcHNfZW5kKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBwdF9yZWdzICosIGludCBzaWducik7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19LREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2tleGVjLmggYi9pbmNsdWRlL2FzbS14ODYva2V4ZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEwOTYwMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYva2V4ZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0tFWEVDX0gKLSNkZWZpbmUgQVNNX1g4Nl9fS0VYRUNfSAotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgUEFfQ09OVFJPTF9QQUdFCTAKLSMgZGVmaW5lIFZBX0NPTlRST0xfUEFHRQkxCi0jIGRlZmluZSBQQV9QR0QJCQkyCi0jIGRlZmluZSBWQV9QR0QJCQkzCi0jIGRlZmluZSBQQV9QVEVfMAkJNAotIyBkZWZpbmUgVkFfUFRFXzAJCTUKLSMgZGVmaW5lIFBBX1BURV8xCQk2Ci0jIGRlZmluZSBWQV9QVEVfMQkJNwotIyBkZWZpbmUgUEFfU1dBUF9QQUdFCQk4Ci0jIGlmZGVmIENPTkZJR19YODZfUEFFCi0jICBkZWZpbmUgUEFfUE1EXzAJCTkKLSMgIGRlZmluZSBWQV9QTURfMAkJMTAKLSMgIGRlZmluZSBQQV9QTURfMQkJMTEKLSMgIGRlZmluZSBWQV9QTURfMQkJMTIKLSMgIGRlZmluZSBQQUdFU19OUgkJMTMKLSMgZWxzZQotIyAgZGVmaW5lIFBBR0VTX05SCQk5Ci0jIGVuZGlmCi0jZWxzZQotIyBkZWZpbmUgUEFfQ09OVFJPTF9QQUdFCTAKLSMgZGVmaW5lIFZBX0NPTlRST0xfUEFHRQkxCi0jIGRlZmluZSBQQV9QR0QJCQkyCi0jIGRlZmluZSBWQV9QR0QJCQkzCi0jIGRlZmluZSBQQV9QVURfMAkJNAotIyBkZWZpbmUgVkFfUFVEXzAJCTUKLSMgZGVmaW5lIFBBX1BNRF8wCQk2Ci0jIGRlZmluZSBWQV9QTURfMAkJNwotIyBkZWZpbmUgUEFfUFRFXzAJCTgKLSMgZGVmaW5lIFZBX1BURV8wCQk5Ci0jIGRlZmluZSBQQV9QVURfMQkJMTAKLSMgZGVmaW5lIFZBX1BVRF8xCQkxMQotIyBkZWZpbmUgUEFfUE1EXzEJCTEyCi0jIGRlZmluZSBWQV9QTURfMQkJMTMKLSMgZGVmaW5lIFBBX1BURV8xCQkxNAotIyBkZWZpbmUgVkFfUFRFXzEJCTE1Ci0jIGRlZmluZSBQQV9UQUJMRV9QQUdFCQkxNgotIyBkZWZpbmUgUEFHRVNfTlIJCTE3Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQkyMDQ4Ci0jZW5kaWYKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLS8qCi0gKiBLRVhFQ19TT1VSQ0VfTUVNT1JZX0xJTUlUIG1heGltdW0gcGFnZSBnZXRfZnJlZV9wYWdlIGNhbiByZXR1cm4uCi0gKiBJLmUuIE1heGltdW0gcGFnZSB0aGF0IGlzIG1hcHBlZCBkaXJlY3RseSBpbnRvIGtlcm5lbCBtZW1vcnksCi0gKiBhbmQga21hcCBpcyBub3QgcmVxdWlyZWQuCi0gKgotICogU28gZmFyIHg4Nl82NCBpcyBsaW1pdGVkIHRvIDQwIHBoeXNpY2FsIGFkZHJlc3MgYml0cy4KLSAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qIE1heGltdW0gcGh5c2ljYWwgYWRkcmVzcyB3ZSBjYW4gdXNlIHBhZ2VzIGZyb20gKi8KLSMgZGVmaW5lIEtFWEVDX1NPVVJDRV9NRU1PUllfTElNSVQgKC0xVUwpCi0vKiBNYXhpbXVtIGFkZHJlc3Mgd2UgY2FuIHJlYWNoIGluIHBoeXNpY2FsIGFkZHJlc3MgbW9kZSAqLwotIyBkZWZpbmUgS0VYRUNfREVTVElOQVRJT05fTUVNT1JZX0xJTUlUICgtMVVMKQotLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiB1c2UgZm9yIHRoZSBjb250cm9sIGNvZGUgYnVmZmVyICovCi0jIGRlZmluZSBLRVhFQ19DT05UUk9MX01FTU9SWV9MSU1JVCBUQVNLX1NJWkUKLQotIyBkZWZpbmUgS0VYRUNfQ09OVFJPTF9QQUdFX1NJWkUJNDA5NgotCi0vKiBUaGUgbmF0aXZlIGFyY2hpdGVjdHVyZSAqLwotIyBkZWZpbmUgS0VYRUNfQVJDSCBLRVhFQ19BUkNIXzM4NgotCi0vKiBXZSBjYW4gYWxzbyBoYW5kbGUgY3Jhc2ggZHVtcHMgZnJvbSA2NCBiaXQga2VybmVsLiAqLwotIyBkZWZpbmUgdm1jb3JlX2VsZl9jaGVja19hcmNoX2Nyb3NzKHgpICgoeCktPmVfbWFjaGluZSA9PSBFTV9YODZfNjQpCi0jZWxzZQotLyogTWF4aW11bSBwaHlzaWNhbCBhZGRyZXNzIHdlIGNhbiB1c2UgcGFnZXMgZnJvbSAqLwotIyBkZWZpbmUgS0VYRUNfU09VUkNFX01FTU9SWV9MSU1JVCAgICAgICgweEZGRkZGRkZGRkZVTCkKLS8qIE1heGltdW0gYWRkcmVzcyB3ZSBjYW4gcmVhY2ggaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlICovCi0jIGRlZmluZSBLRVhFQ19ERVNUSU5BVElPTl9NRU1PUllfTElNSVQgKDB4RkZGRkZGRkZGRlVMKQotLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiB1c2UgZm9yIHRoZSBjb250cm9sIHBhZ2VzICovCi0jIGRlZmluZSBLRVhFQ19DT05UUk9MX01FTU9SWV9MSU1JVCAgICAgKDB4RkZGRkZGRkZGRlVMKQotCi0vKiBBbGxvY2F0ZSBvbmUgcGFnZSBmb3IgdGhlIHBkcCBhbmQgdGhlIHNlY29uZCBmb3IgdGhlIGNvZGUgKi8KLSMgZGVmaW5lIEtFWEVDX0NPTlRST0xfUEFHRV9TSVpFICAoNDA5NlVMICsgNDA5NlVMKQotCi0vKiBUaGUgbmF0aXZlIGFyY2hpdGVjdHVyZSAqLwotIyBkZWZpbmUgS0VYRUNfQVJDSCBLRVhFQ19BUkNIX1g4Nl82NAotI2VuZGlmCi0KLS8qCi0gKiBDUFUgZG9lcyBub3Qgc2F2ZSBzcyBhbmQgc3Agb24gc3RhY2sgaWYgZXhlY3V0aW9uIGlzIGFscmVhZHkKLSAqIHJ1bm5pbmcgaW4ga2VybmVsIG1vZGUgYXQgdGhlIHRpbWUgb2YgTk1JIG9jY3VycmVuY2UuIFRoaXMgY29kZQotICogZml4ZXMgaXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9maXh1cF9zc19lc3Aoc3RydWN0IHB0X3JlZ3MgKm5ld3JlZ3MsCi0JCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCW5ld3JlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpJihvbGRyZWdzLT5zcCk7Ci0JYXNtIHZvbGF0aWxlKCJ4b3JsICUlZWF4LCAlJWVheFxuXHQiCi0JCSAgICAgIm1vdncgJSVzcywgJSVheFxuXHQiCi0JCSAgICAgOiI9YSIobmV3cmVncy0+c3MpKTsKLSNlbmRpZgotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2FwdHVyaW5nIHJlZ2lzdGVyIHN0YXRlcyBpZiBjb21pbmcKLSAqIHZpYSBwYW5pYyBvdGhlcndpc2UganVzdCBmaXggdXAgdGhlIHNzIGFuZCBzcCBpZiBjb21pbmcgdmlhIGtlcm5lbAotICogbW9kZSBleGNlcHRpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9zZXR1cF9yZWdzKHN0cnVjdCBwdF9yZWdzICpuZXdyZWdzLAotCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqb2xkcmVncykKLXsKLQlpZiAob2xkcmVncykgewotCQltZW1jcHkobmV3cmVncywgb2xkcmVncywgc2l6ZW9mKCpuZXdyZWdzKSk7Ci0JCWNyYXNoX2ZpeHVwX3NzX2VzcChuZXdyZWdzLCBvbGRyZWdzKTsKLQl9IGVsc2UgewotI2lmZGVmIENPTkZJR19YODZfMzIKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWJ4LCUwIiA6ICI9bSIobmV3cmVncy0+YngpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWN4LCUwIiA6ICI9bSIobmV3cmVncy0+Y3gpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWR4LCUwIiA6ICI9bSIobmV3cmVncy0+ZHgpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZXNpLCUwIiA6ICI9bSIobmV3cmVncy0+c2kpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWRpLCUwIiA6ICI9bSIobmV3cmVncy0+ZGkpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWJwLCUwIiA6ICI9bSIobmV3cmVncy0+YnApKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWF4LCUwIiA6ICI9bSIobmV3cmVncy0+YXgpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZXNwLCUwIiA6ICI9bSIobmV3cmVncy0+c3ApKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlc3MsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+c3MpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlY3MsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+Y3MpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZHMsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+ZHMpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZXMsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+ZXMpKTsKLQkJYXNtIHZvbGF0aWxlKCJwdXNoZmw7IHBvcGwgJTAiIDoiPW0iKG5ld3JlZ3MtPmZsYWdzKSk7Ci0jZWxzZQotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyYngsJTAiIDogIj1tIihuZXdyZWdzLT5ieCkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyY3gsJTAiIDogIj1tIihuZXdyZWdzLT5jeCkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyZHgsJTAiIDogIj1tIihuZXdyZWdzLT5keCkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyc2ksJTAiIDogIj1tIihuZXdyZWdzLT5zaSkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyZGksJTAiIDogIj1tIihuZXdyZWdzLT5kaSkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyYnAsJTAiIDogIj1tIihuZXdyZWdzLT5icCkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyYXgsJTAiIDogIj1tIihuZXdyZWdzLT5heCkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyc3AsJTAiIDogIj1tIihuZXdyZWdzLT5zcCkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyOCwlMCIgOiAiPW0iKG5ld3JlZ3MtPnI4KSk7Ci0JCWFzbSB2b2xhdGlsZSgibW92cSAlJXI5LCUwIiA6ICI9bSIobmV3cmVncy0+cjkpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcjEwLCUwIiA6ICI9bSIobmV3cmVncy0+cjEwKSk7Ci0JCWFzbSB2b2xhdGlsZSgibW92cSAlJXIxMSwlMCIgOiAiPW0iKG5ld3JlZ3MtPnIxMSkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyMTIsJTAiIDogIj1tIihuZXdyZWdzLT5yMTIpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcjEzLCUwIiA6ICI9bSIobmV3cmVncy0+cjEzKSk7Ci0JCWFzbSB2b2xhdGlsZSgibW92cSAlJXIxNCwlMCIgOiAiPW0iKG5ld3JlZ3MtPnIxNCkpOwotCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyMTUsJTAiIDogIj1tIihuZXdyZWdzLT5yMTUpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlc3MsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+c3MpKTsKLQkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlY3MsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+Y3MpKTsKLQkJYXNtIHZvbGF0aWxlKCJwdXNoZnE7IHBvcHEgJTAiIDoiPW0iKG5ld3JlZ3MtPmZsYWdzKSk7Ci0jZW5kaWYKLQkJbmV3cmVncy0+aXAgPSAodW5zaWduZWQgbG9uZyljdXJyZW50X3RleHRfYWRkcigpOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwotcmVsb2NhdGVfa2VybmVsKHVuc2lnbmVkIGxvbmcgaW5kaXJlY3Rpb25fcGFnZSwKLQkJdW5zaWduZWQgbG9uZyBjb250cm9sX3BhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywKLQkJdW5zaWduZWQgaW50IGhhc19wYWUsCi0JCXVuc2lnbmVkIGludCBwcmVzZXJ2ZV9jb250ZXh0KTsKLSNlbHNlCi1OT1JFVF9UWVBFIHZvaWQKLXJlbG9jYXRlX2tlcm5lbCh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0LAotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MpIEFUVFJJQl9OT1JFVDsKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19LRVhFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva2dkYi5oIGIvaW5jbHVkZS9hc20teDg2L2tnZGIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4Mzg2My4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYva2dkYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19LR0RCX0gKLSNkZWZpbmUgQVNNX1g4Nl9fS0dEQl9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBBbWl0IFMuIEthbGUKLSAqIENvcHlyaWdodCAoQykgMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KLSAqLwotCi0vKgotICogQlVGTUFYIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gaW5ib3VuZC9vdXRib3VuZAotICogYnVmZmVycyBhdCBsZWFzdCBOVU1SRUdCWVRFUyoyIGFyZSBuZWVkZWQgZm9yIHJlZ2lzdGVyIHBhY2tldHMKLSAqIExvbmdlciBidWZmZXIgaXMgbmVlZGVkIHRvIGxpc3QgYWxsIHRocmVhZHMKLSAqLwotI2RlZmluZSBCVUZNQVgJCQkxMDI0Ci0KLS8qCi0gKiAgTm90ZSB0aGF0IHRoaXMgcmVnaXN0ZXIgaW1hZ2UgaXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbgotICogIHRoZSByZWdpc3RlciBpbWFnZSB0aGF0IExpbnV4IHByb2R1Y2VzIGF0IGludGVycnVwdCB0aW1lLgotICoKLSAqICBMaW51eCdzIHJlZ2lzdGVyIGltYWdlIGlzIGRlZmluZWQgYnkgc3RydWN0IHB0X3JlZ3MgaW4gcHRyYWNlLmguCi0gKiAgSnVzdCB3aHkgR0RCIHVzZXMgYSBkaWZmZXJlbnQgb3JkZXIgaXMgYSBoaXN0b3JpY2FsIG15c3RlcnkuCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1lbnVtIHJlZ25hbWVzIHsKLQlHREJfQVgsCQkJLyogMCAqLwotCUdEQl9DWCwJCQkvKiAxICovCi0JR0RCX0RYLAkJCS8qIDIgKi8KLQlHREJfQlgsCQkJLyogMyAqLwotCUdEQl9TUCwJCQkvKiA0ICovCi0JR0RCX0JQLAkJCS8qIDUgKi8KLQlHREJfU0ksCQkJLyogNiAqLwotCUdEQl9ESSwJCQkvKiA3ICovCi0JR0RCX1BDLAkJCS8qIDggYWxzbyBrbm93biBhcyBlaXAgKi8KLQlHREJfUFMsCQkJLyogOSBhbHNvIGtub3duIGFzIGVmbGFncyAqLwotCUdEQl9DUywJCQkvKiAxMCAqLwotCUdEQl9TUywJCQkvKiAxMSAqLwotCUdEQl9EUywJCQkvKiAxMiAqLwotCUdEQl9FUywJCQkvKiAxMyAqLwotCUdEQl9GUywJCQkvKiAxNCAqLwotCUdEQl9HUywJCQkvKiAxNSAqLwotfTsKLSNkZWZpbmUgTlVNUkVHQllURVMJCSgoR0RCX0dTKzEpKjQpCi0jZWxzZSAvKiAhIENPTkZJR19YODZfMzIgKi8KLWVudW0gcmVnbmFtZXM2NCB7Ci0JR0RCX0FYLAkJCS8qIDAgKi8KLQlHREJfQlgsCQkJLyogMSAqLwotCUdEQl9DWCwJCQkvKiAyICovCi0JR0RCX0RYLAkJCS8qIDMgKi8KLQlHREJfU0ksCQkJLyogNCAqLwotCUdEQl9ESSwJCQkvKiA1ICovCi0JR0RCX0JQLAkJCS8qIDYgKi8KLQlHREJfU1AsCQkJLyogNyAqLwotCUdEQl9SOCwJCQkvKiA4ICovCi0JR0RCX1I5LAkJCS8qIDkgKi8KLQlHREJfUjEwLAkJLyogMTAgKi8KLQlHREJfUjExLAkJLyogMTEgKi8KLQlHREJfUjEyLAkJLyogMTIgKi8KLQlHREJfUjEzLAkJLyogMTMgKi8KLQlHREJfUjE0LAkJLyogMTQgKi8KLQlHREJfUjE1LAkJLyogMTUgKi8KLQlHREJfUEMsCQkJLyogMTYgKi8KLX07Ci0KLWVudW0gcmVnbmFtZXMzMiB7Ci0JR0RCX1BTID0gMzQsCi0JR0RCX0NTLAotCUdEQl9TUywKLX07Ci0jZGVmaW5lIE5VTVJFR0JZVEVTCQkoKEdEQl9TUysxKSo0KQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2dkYl9icmVha3BvaW50KHZvaWQpCi17Ci0JYXNtKCIgICBpbnQgJDMiKTsKLX0KLSNkZWZpbmUgQlJFQUtfSU5TVFJfU0laRQkxCi0jZGVmaW5lIENBQ0hFX0ZMVVNIX0lTX1NBRkUJMQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fS0dEQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20teDg2L2ttYXBfdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmNDQ0OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYva21hcF90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19LTUFQX1RZUEVTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fS01BUF9UWVBFU19ICi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX0hJR0hNRU0pCi0jIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKLSNlbHNlCi0jIGRlZmluZSBEKG4pCi0jZW5kaWYKLQotZW51bSBrbV90eXBlIHsKLUQoMCkJS01fQk9VTkNFX1JFQUQsCi1EKDEpCUtNX1NLQl9TVU5SUENfREFUQSwKLUQoMikJS01fU0tCX0RBVEFfU09GVElSUSwKLUQoMykJS01fVVNFUjAsCi1EKDQpCUtNX1VTRVIxLAotRCg1KQlLTV9CSU9fU1JDX0lSUSwKLUQoNikJS01fQklPX0RTVF9JUlEsCi1EKDcpCUtNX1BURTAsCi1EKDgpCUtNX1BURTEsCi1EKDkpCUtNX0lSUTAsCi1EKDEwKQlLTV9JUlExLAotRCgxMSkJS01fU09GVElSUTAsCi1EKDEyKQlLTV9TT0ZUSVJRMSwKLUQoMTMpCUtNX1RZUEVfTlIKLX07Ci0KLSN1bmRlZiBECi0KLSNlbmRpZiAvKiBBU01fWDg2X19LTUFQX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS14ODYva3Byb2Jlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTA3NDhkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rcHJvYmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0tQUk9CRVNfSAotI2RlZmluZSBBU01fWDg2X19LUFJPQkVTX0gKLS8qCi0gKiAgS2VybmVsIFByb2JlcyAoS1Byb2JlcykKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDAyLCAyMDA0Ci0gKgotICogU2VlIGFyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMgZm9yIHg4NiBrcHJvYmVzIGhpc3RvcnkuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCi0jZGVmaW5lICBfX0FSQ0hfV0FOVF9LUFJPQkVTX0lOU05fU0xPVAotCi1zdHJ1Y3QgcHRfcmVnczsKLXN0cnVjdCBrcHJvYmU7Ci0KLXR5cGVkZWYgdTgga3Byb2JlX29wY29kZV90OwotI2RlZmluZSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OCTB4Y2MKLSNkZWZpbmUgUkVMQVRJVkVKVU1QX0lOU1RSVUNUSU9OIDB4ZTkKLSNkZWZpbmUgTUFYX0lOU05fU0laRSAxNgotI2RlZmluZSBNQVhfU1RBQ0tfU0laRSA2NAotI2RlZmluZSBNSU5fU1RBQ0tfU0laRShBRERSKQkJCQkJICAgICAgIFwKLQkoKChNQVhfU1RBQ0tfU0laRSkgPCAoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKyBcCi0JCQkgICAgICBUSFJFQURfU0laRSAtICh1bnNpZ25lZCBsb25nKShBRERSKSkpICAgIFwKLQkgPyAoTUFYX1NUQUNLX1NJWkUpCQkJCQkgICAgICAgXAotCSA6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArCQkgICAgICAgXAotCSAgICBUSFJFQURfU0laRSAtICh1bnNpZ25lZCBsb25nKShBRERSKSkpCi0KLSNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIGNvbnN0IGludCBrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemU7Ci0KLXZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApOwotdm9pZCBrcmV0cHJvYmVfdHJhbXBvbGluZSh2b2lkKTsKLQotLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24qLwotc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiB7Ci0JLyogY29weSBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KLQlrcHJvYmVfb3Bjb2RlX3QgKmluc247Ci0JLyoKLQkgKiBib29zdGFibGUgPSAtMTogVGhpcyBpbnN0cnVjdGlvbiB0eXBlIGlzIG5vdCBib29zdGFibGUuCi0JICogYm9vc3RhYmxlID0gMDogVGhpcyBpbnN0cnVjdGlvbiB0eXBlIGlzIGJvb3N0YWJsZS4KLQkgKiBib29zdGFibGUgPSAxOiBUaGlzIGluc3RydWN0aW9uIGhhcyBiZWVuIGJvb3N0ZWQ6IHdlIGhhdmUKLQkgKiBhZGRlZCBhIHJlbGF0aXZlIGp1bXAgYWZ0ZXIgdGhlIGluc3RydWN0aW9uIGNvcHkgaW4gaW5zbiwKLQkgKiBzbyBubyBzaW5nbGUtc3RlcCBhbmQgZml4dXAgYXJlIG5lZWRlZCAodW5sZXNzIHRoZXJlJ3MKLQkgKiBhIHBvc3RfaGFuZGxlciBvciBicmVha19oYW5kbGVyKS4KLQkgKi8KLQlpbnQgYm9vc3RhYmxlOwotfTsKLQotc3RydWN0IHByZXZfa3Byb2JlIHsKLQlzdHJ1Y3Qga3Byb2JlICprcDsKLQl1bnNpZ25lZCBsb25nIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIG9sZF9mbGFnczsKLQl1bnNpZ25lZCBsb25nIHNhdmVkX2ZsYWdzOwotfTsKLQotLyogcGVyLWNwdSBrcHJvYmUgY29udHJvbCBibG9jayAqLwotc3RydWN0IGtwcm9iZV9jdGxibGsgewotCXVuc2lnbmVkIGxvbmcga3Byb2JlX3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIGtwcm9iZV9vbGRfZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBrcHJvYmVfc2F2ZWRfZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyAqanByb2JlX3NhdmVkX3NwOwotCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOwotCWtwcm9iZV9vcGNvZGVfdCBqcHJvYmVzX3N0YWNrW01BWF9TVEFDS19TSVpFXTsKLQlzdHJ1Y3QgcHJldl9rcHJvYmUgcHJldl9rcHJvYmU7Ci19OwotCi1leHRlcm4gaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKTsKLWV4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOwotI2VuZGlmIC8qIEFTTV9YODZfX0tQUk9CRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2t2bS5oIGIvaW5jbHVkZS9hc20teDg2L2t2bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTBkZDc5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0tWTV9ICi0jZGVmaW5lIEFTTV9YODZfX0tWTV9ICi0KLS8qCi0gKiBLVk0geDg2IHNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCi0gKgotICovCi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCi0vKiBBcmNoaXRlY3R1cmFsIGludGVycnVwdCBsaW5lIGNvdW50LiAqLwotI2RlZmluZSBLVk1fTlJfSU5URVJSVVBUUyAyNTYKLQotc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMgewotCV9fdTMyIHNsb3Q7ICAvKiB0aGlzIGhhcyBhIGRpZmZlcmVudCBuYW1lc3BhY2UgdGhhbiBtZW1vcnkgc2xvdHMgKi8KLQlfX3UzMiBmbGFnczsKLQlfX3U2NCBndWVzdF9waHlzX2FkZHI7Ci0JX191NjQgbWVtb3J5X3NpemU7Ci0JX191NjQgdGFyZ2V0X3BoeXNfYWRkcjsKLX07Ci0KLS8qIGZvciBLVk1fR0VUX0lSUUNISVAgYW5kIEtWTV9TRVRfSVJRQ0hJUCAqLwotc3RydWN0IGt2bV9waWNfc3RhdGUgewotCV9fdTggbGFzdF9pcnI7CS8qIGVkZ2UgZGV0ZWN0aW9uICovCi0JX191OCBpcnI7CQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCByZWdpc3RlciAqLwotCV9fdTggaW1yOwkJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLQlfX3U4IGlzcjsJCS8qIGludGVycnVwdCBzZXJ2aWNlIHJlZ2lzdGVyICovCi0JX191OCBwcmlvcml0eV9hZGQ7CS8qIGhpZ2hlc3QgaXJxIHByaW9yaXR5ICovCi0JX191OCBpcnFfYmFzZTsKLQlfX3U4IHJlYWRfcmVnX3NlbGVjdDsKLQlfX3U4IHBvbGw7Ci0JX191OCBzcGVjaWFsX21hc2s7Ci0JX191OCBpbml0X3N0YXRlOwotCV9fdTggYXV0b19lb2k7Ci0JX191OCByb3RhdGVfb25fYXV0b19lb2k7Ci0JX191OCBzcGVjaWFsX2Z1bGx5X25lc3RlZF9tb2RlOwotCV9fdTggaW5pdDQ7CQkvKiB0cnVlIGlmIDQgYnl0ZSBpbml0ICovCi0JX191OCBlbGNyOwkJLyogUElJWCBlZGdlL3RyaWdnZXIgc2VsZWN0aW9uICovCi0JX191OCBlbGNyX21hc2s7Ci19OwotCi0jZGVmaW5lIEtWTV9JT0FQSUNfTlVNX1BJTlMgIDI0Ci1zdHJ1Y3Qga3ZtX2lvYXBpY19zdGF0ZSB7Ci0JX191NjQgYmFzZV9hZGRyZXNzOwotCV9fdTMyIGlvcmVnc2VsOwotCV9fdTMyIGlkOwotCV9fdTMyIGlycjsKLQlfX3UzMiBwYWQ7Ci0JdW5pb24gewotCQlfX3U2NCBiaXRzOwotCQlzdHJ1Y3QgewotCQkJX191OCB2ZWN0b3I7Ci0JCQlfX3U4IGRlbGl2ZXJ5X21vZGU6MzsKLQkJCV9fdTggZGVzdF9tb2RlOjE7Ci0JCQlfX3U4IGRlbGl2ZXJ5X3N0YXR1czoxOwotCQkJX191OCBwb2xhcml0eToxOwotCQkJX191OCByZW1vdGVfaXJyOjE7Ci0JCQlfX3U4IHRyaWdfbW9kZToxOwotCQkJX191OCBtYXNrOjE7Ci0JCQlfX3U4IHJlc2VydmU6NzsKLQkJCV9fdTggcmVzZXJ2ZWRbNF07Ci0JCQlfX3U4IGRlc3RfaWQ7Ci0JCX0gZmllbGRzOwotCX0gcmVkaXJ0YmxbS1ZNX0lPQVBJQ19OVU1fUElOU107Ci19OwotCi0jZGVmaW5lIEtWTV9JUlFDSElQX1BJQ19NQVNURVIgICAwCi0jZGVmaW5lIEtWTV9JUlFDSElQX1BJQ19TTEFWRSAgICAxCi0jZGVmaW5lIEtWTV9JUlFDSElQX0lPQVBJQyAgICAgICAyCi0KLS8qIGZvciBLVk1fR0VUX1JFR1MgYW5kIEtWTV9TRVRfUkVHUyAqLwotc3RydWN0IGt2bV9yZWdzIHsKLQkvKiBvdXQgKEtWTV9HRVRfUkVHUykgLyBpbiAoS1ZNX1NFVF9SRUdTKSAqLwotCV9fdTY0IHJheCwgcmJ4LCByY3gsIHJkeDsKLQlfX3U2NCByc2ksIHJkaSwgcnNwLCByYnA7Ci0JX191NjQgcjgsICByOSwgIHIxMCwgcjExOwotCV9fdTY0IHIxMiwgcjEzLCByMTQsIHIxNTsKLQlfX3U2NCByaXAsIHJmbGFnczsKLX07Ci0KLS8qIGZvciBLVk1fR0VUX0xBUElDIGFuZCBLVk1fU0VUX0xBUElDICovCi0jZGVmaW5lIEtWTV9BUElDX1JFR19TSVpFIDB4NDAwCi1zdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIHsKLQljaGFyIHJlZ3NbS1ZNX0FQSUNfUkVHX1NJWkVdOwotfTsKLQotc3RydWN0IGt2bV9zZWdtZW50IHsKLQlfX3U2NCBiYXNlOwotCV9fdTMyIGxpbWl0OwotCV9fdTE2IHNlbGVjdG9yOwotCV9fdTggIHR5cGU7Ci0JX191OCAgcHJlc2VudCwgZHBsLCBkYiwgcywgbCwgZywgYXZsOwotCV9fdTggIHVudXNhYmxlOwotCV9fdTggIHBhZGRpbmc7Ci19OwotCi1zdHJ1Y3Qga3ZtX2R0YWJsZSB7Ci0JX191NjQgYmFzZTsKLQlfX3UxNiBsaW1pdDsKLQlfX3UxNiBwYWRkaW5nWzNdOwotfTsKLQotCi0vKiBmb3IgS1ZNX0dFVF9TUkVHUyBhbmQgS1ZNX1NFVF9TUkVHUyAqLwotc3RydWN0IGt2bV9zcmVncyB7Ci0JLyogb3V0IChLVk1fR0VUX1NSRUdTKSAvIGluIChLVk1fU0VUX1NSRUdTKSAqLwotCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgZHMsIGVzLCBmcywgZ3MsIHNzOwotCXN0cnVjdCBrdm1fc2VnbWVudCB0ciwgbGR0OwotCXN0cnVjdCBrdm1fZHRhYmxlIGdkdCwgaWR0OwotCV9fdTY0IGNyMCwgY3IyLCBjcjMsIGNyNCwgY3I4OwotCV9fdTY0IGVmZXI7Ci0JX191NjQgYXBpY19iYXNlOwotCV9fdTY0IGludGVycnVwdF9iaXRtYXBbKEtWTV9OUl9JTlRFUlJVUFRTICsgNjMpIC8gNjRdOwotfTsKLQotLyogZm9yIEtWTV9HRVRfRlBVIGFuZCBLVk1fU0VUX0ZQVSAqLwotc3RydWN0IGt2bV9mcHUgewotCV9fdTggIGZwcls4XVsxNl07Ci0JX191MTYgZmN3OwotCV9fdTE2IGZzdzsKLQlfX3U4ICBmdHd4OyAgLyogaW4gZnhzYXZlIGZvcm1hdCAqLwotCV9fdTggIHBhZDE7Ci0JX191MTYgbGFzdF9vcGNvZGU7Ci0JX191NjQgbGFzdF9pcDsKLQlfX3U2NCBsYXN0X2RwOwotCV9fdTggIHhtbVsxNl1bMTZdOwotCV9fdTMyIG14Y3NyOwotCV9fdTMyIHBhZDI7Ci19OwotCi1zdHJ1Y3Qga3ZtX21zcl9lbnRyeSB7Ci0JX191MzIgaW5kZXg7Ci0JX191MzIgcmVzZXJ2ZWQ7Ci0JX191NjQgZGF0YTsKLX07Ci0KLS8qIGZvciBLVk1fR0VUX01TUlMgYW5kIEtWTV9TRVRfTVNSUyAqLwotc3RydWN0IGt2bV9tc3JzIHsKLQlfX3UzMiBubXNyczsgLyogbnVtYmVyIG9mIG1zcnMgaW4gZW50cmllcyAqLwotCV9fdTMyIHBhZDsKLQotCXN0cnVjdCBrdm1fbXNyX2VudHJ5IGVudHJpZXNbMF07Ci19OwotCi0vKiBmb3IgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVCAqLwotc3RydWN0IGt2bV9tc3JfbGlzdCB7Ci0JX191MzIgbm1zcnM7IC8qIG51bWJlciBvZiBtc3JzIGluIGVudHJpZXMgKi8KLQlfX3UzMiBpbmRpY2VzWzBdOwotfTsKLQotCi1zdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5IHsKLQlfX3UzMiBmdW5jdGlvbjsKLQlfX3UzMiBlYXg7Ci0JX191MzIgZWJ4OwotCV9fdTMyIGVjeDsKLQlfX3UzMiBlZHg7Ci0JX191MzIgcGFkZGluZzsKLX07Ci0KLS8qIGZvciBLVk1fU0VUX0NQVUlEICovCi1zdHJ1Y3Qga3ZtX2NwdWlkIHsKLQlfX3UzMiBuZW50OwotCV9fdTMyIHBhZGRpbmc7Ci0Jc3RydWN0IGt2bV9jcHVpZF9lbnRyeSBlbnRyaWVzWzBdOwotfTsKLQotc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgewotCV9fdTMyIGZ1bmN0aW9uOwotCV9fdTMyIGluZGV4OwotCV9fdTMyIGZsYWdzOwotCV9fdTMyIGVheDsKLQlfX3UzMiBlYng7Ci0JX191MzIgZWN4OwotCV9fdTMyIGVkeDsKLQlfX3UzMiBwYWRkaW5nWzNdOwotfTsKLQotI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYIDEKLSNkZWZpbmUgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVGVUxfRlVOQyAgICAyCi0jZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NUQVRFX1JFQURfTkVYVCAgNAotCi0vKiBmb3IgS1ZNX1NFVF9DUFVJRDIgKi8KLXN0cnVjdCBrdm1fY3B1aWQyIHsKLQlfX3UzMiBuZW50OwotCV9fdTMyIHBhZGRpbmc7Ci0Jc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgZW50cmllc1swXTsKLX07Ci0KLS8qIGZvciBLVk1fR0VUX1BJVCBhbmQgS1ZNX1NFVF9QSVQgKi8KLXN0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgewotCV9fdTMyIGNvdW50OyAvKiBjYW4gYmUgNjU1MzYgKi8KLQlfX3UxNiBsYXRjaGVkX2NvdW50OwotCV9fdTggY291bnRfbGF0Y2hlZDsKLQlfX3U4IHN0YXR1c19sYXRjaGVkOwotCV9fdTggc3RhdHVzOwotCV9fdTggcmVhZF9zdGF0ZTsKLQlfX3U4IHdyaXRlX3N0YXRlOwotCV9fdTggd3JpdGVfbGF0Y2g7Ci0JX191OCByd19tb2RlOwotCV9fdTggbW9kZTsKLQlfX3U4IGJjZDsKLQlfX3U4IGdhdGU7Ci0JX19zNjQgY291bnRfbG9hZF90aW1lOwotfTsKLQotc3RydWN0IGt2bV9waXRfc3RhdGUgewotCXN0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgY2hhbm5lbHNbM107Ci19OwotI2VuZGlmIC8qIEFTTV9YODZfX0tWTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3ZtX2hvc3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTFmYjhjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUyICswLDAgQEAKLS8qCi0gKiBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIGRyaXZlciBmb3IgTGludXgKLSAqCi0gKiBUaGlzIGhlYWRlciBkZWZpbmVzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbnRlcmZhY2VzLCB4ODYgdmVyc2lvbgotICoKLSAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4gIFNlZQotICogdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KLSAqCi0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19LVk1fSE9TVF9ICi0jZGVmaW5lIEFTTV9YODZfX0tWTV9IT1NUX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgotI2luY2x1ZGUgPGxpbnV4L2t2bV9wYXJhLmg+Ci0jaW5jbHVkZSA8bGludXgva3ZtX3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHZjbG9jay1hYmkuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotCi0jZGVmaW5lIEtWTV9NQVhfVkNQVVMgMTYKLSNkZWZpbmUgS1ZNX01FTU9SWV9TTE9UUyAzMgotLyogbWVtb3J5IHNsb3RzIHRoYXQgZG9lcyBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi8KLSNkZWZpbmUgS1ZNX1BSSVZBVEVfTUVNX1NMT1RTIDQKLQotI2RlZmluZSBLVk1fUElPX1BBR0VfT0ZGU0VUIDEKLSNkZWZpbmUgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUIDIKLQotI2RlZmluZSBDUjNfUEFFX1JFU0VSVkVEX0JJVFMgKChYODZfQ1IzX1BXVCB8IFg4Nl9DUjNfUENEKSAtIDEpCi0jZGVmaW5lIENSM19OT05QQUVfUkVTRVJWRURfQklUUyAoKFBBR0VfU0laRS0xKSAmIH4oWDg2X0NSM19QV1QgfCBYODZfQ1IzX1BDRCkpCi0jZGVmaW5lIENSM19MX01PREVfUkVTRVJWRURfQklUUyAoQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTIHwJXAotCQkJCSAgMHhGRkZGRkYwMDAwMDAwMDAwVUxMKQotCi0jZGVmaW5lIEtWTV9HVUVTVF9DUjBfTUFTSwkJCQkgICBcCi0JKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFIHwgWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgXAotCSB8IFg4Nl9DUjBfTlcgfCBYODZfQ1IwX0NEKQotI2RlZmluZSBLVk1fVk1fQ1IwX0FMV0FZU19PTgkJCQkJCVwKLQkoWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUgfCBYODZfQ1IwX1dQIHwgWDg2X0NSMF9ORSB8IFg4Nl9DUjBfVFMgXAotCSB8IFg4Nl9DUjBfTVApCi0jZGVmaW5lIEtWTV9HVUVTVF9DUjRfTUFTSwkJCQkJCVwKLQkoWDg2X0NSNF9WTUUgfCBYODZfQ1I0X1BTRSB8IFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9QR0UgfCBYODZfQ1I0X1ZNWEUpCi0jZGVmaW5lIEtWTV9QTU9ERV9WTV9DUjRfQUxXQVlTX09OIChYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfVk1YRSkKLSNkZWZpbmUgS1ZNX1JNT0RFX1ZNX0NSNF9BTFdBWVNfT04gKFg4Nl9DUjRfVk1FIHwgWDg2X0NSNF9QQUUgfCBYODZfQ1I0X1ZNWEUpCi0KLSNkZWZpbmUgSU5WQUxJRF9QQUdFICh+KGhwYV90KTApCi0jZGVmaW5lIFVOTUFQUEVEX0dWQSAofihncGFfdCkwKQotCi0vKiBzaGFkb3cgdGFibGVzIGFyZSBQQUUgZXZlbiBvbiBub24tUEFFIGhvc3RzICovCi0jZGVmaW5lIEtWTV9IUEFHRV9TSElGVCAyMQotI2RlZmluZSBLVk1fSFBBR0VfU0laRSAoMVVMIDw8IEtWTV9IUEFHRV9TSElGVCkKLSNkZWZpbmUgS1ZNX0hQQUdFX01BU0sgKH4oS1ZNX0hQQUdFX1NJWkUgLSAxKSkKLQotI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFIChLVk1fSFBBR0VfU0laRSAvIFBBR0VfU0laRSkKLQotI2RlZmluZSBERV9WRUNUT1IgMAotI2RlZmluZSBEQl9WRUNUT1IgMQotI2RlZmluZSBCUF9WRUNUT1IgMwotI2RlZmluZSBPRl9WRUNUT1IgNAotI2RlZmluZSBCUl9WRUNUT1IgNQotI2RlZmluZSBVRF9WRUNUT1IgNgotI2RlZmluZSBOTV9WRUNUT1IgNwotI2RlZmluZSBERl9WRUNUT1IgOAotI2RlZmluZSBUU19WRUNUT1IgMTAKLSNkZWZpbmUgTlBfVkVDVE9SIDExCi0jZGVmaW5lIFNTX1ZFQ1RPUiAxMgotI2RlZmluZSBHUF9WRUNUT1IgMTMKLSNkZWZpbmUgUEZfVkVDVE9SIDE0Ci0jZGVmaW5lIE1GX1ZFQ1RPUiAxNgotI2RlZmluZSBNQ19WRUNUT1IgMTgKLQotI2RlZmluZSBTRUxFQ1RPUl9USV9NQVNLICgxIDw8IDIpCi0jZGVmaW5lIFNFTEVDVE9SX1JQTF9NQVNLIDB4MDMKLQotI2RlZmluZSBJT1BMX1NISUZUIDEyCi0KLSNkZWZpbmUgS1ZNX0FMSUFTX1NMT1RTIDQKLQotI2RlZmluZSBLVk1fUEVSTUlMTEVfTU1VX1BBR0VTIDIwCi0jZGVmaW5lIEtWTV9NSU5fQUxMT0NfTU1VX1BBR0VTIDY0Ci0jZGVmaW5lIEtWTV9NTVVfSEFTSF9TSElGVCAxMAotI2RlZmluZSBLVk1fTlVNX01NVV9QQUdFUyAoMSA8PCBLVk1fTU1VX0hBU0hfU0hJRlQpCi0jZGVmaW5lIEtWTV9NSU5fRlJFRV9NTVVfUEFHRVMgNQotI2RlZmluZSBLVk1fUkVGSUxMX1BBR0VTIDI1Ci0jZGVmaW5lIEtWTV9NQVhfQ1BVSURfRU5UUklFUyA0MAotI2RlZmluZSBLVk1fTlJfVkFSX01UUlIgOAotCi1leHRlcm4gc3BpbmxvY2tfdCBrdm1fbG9jazsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHZtX2xpc3Q7Ci0KLXN0cnVjdCBrdm1fdmNwdTsKLXN0cnVjdCBrdm07Ci0KLWVudW0ga3ZtX3JlZyB7Ci0JVkNQVV9SRUdTX1JBWCA9IDAsCi0JVkNQVV9SRUdTX1JDWCA9IDEsCi0JVkNQVV9SRUdTX1JEWCA9IDIsCi0JVkNQVV9SRUdTX1JCWCA9IDMsCi0JVkNQVV9SRUdTX1JTUCA9IDQsCi0JVkNQVV9SRUdTX1JCUCA9IDUsCi0JVkNQVV9SRUdTX1JTSSA9IDYsCi0JVkNQVV9SRUdTX1JESSA9IDcsCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCVZDUFVfUkVHU19SOCA9IDgsCi0JVkNQVV9SRUdTX1I5ID0gOSwKLQlWQ1BVX1JFR1NfUjEwID0gMTAsCi0JVkNQVV9SRUdTX1IxMSA9IDExLAotCVZDUFVfUkVHU19SMTIgPSAxMiwKLQlWQ1BVX1JFR1NfUjEzID0gMTMsCi0JVkNQVV9SRUdTX1IxNCA9IDE0LAotCVZDUFVfUkVHU19SMTUgPSAxNSwKLSNlbmRpZgotCVZDUFVfUkVHU19SSVAsCi0JTlJfVkNQVV9SRUdTCi19OwotCi1lbnVtIHsKLQlWQ1BVX1NSRUdfRVMsCi0JVkNQVV9TUkVHX0NTLAotCVZDUFVfU1JFR19TUywKLQlWQ1BVX1NSRUdfRFMsCi0JVkNQVV9TUkVHX0ZTLAotCVZDUFVfU1JFR19HUywKLQlWQ1BVX1NSRUdfVFIsCi0JVkNQVV9TUkVHX0xEVFIsCi19OwotCi0jaW5jbHVkZSA8YXNtL2t2bV94ODZfZW11bGF0ZS5oPgotCi0jZGVmaW5lIEtWTV9OUl9NRU1fT0JKUyA0MAotCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLQlpbnQgZW5hYmxlZDsKLQl1bnNpZ25lZCBsb25nIGJwWzRdOwotCWludCBzaW5nbGVzdGVwOwotfTsKLQotLyoKLSAqIFdlIGRvbid0IHdhbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aXRoaW4gdGhlIG1tdSBjb2RlLCBzbyB3ZSBwcmVhbGxvY2F0ZQotICogZW5vdWdoIG1lbW9yeSBmb3IgYSBzaW5nbGUgcGFnZSBmYXVsdCBpbiBhIGNhY2hlLgotICovCi1zdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgewotCWludCBub2JqczsKLQl2b2lkICpvYmplY3RzW0tWTV9OUl9NRU1fT0JKU107Ci19OwotCi0jZGVmaW5lIE5SX1BURV9DSEFJTl9FTlRSSUVTIDUKLQotc3RydWN0IGt2bV9wdGVfY2hhaW4gewotCXU2NCAqcGFyZW50X3B0ZXNbTlJfUFRFX0NIQUlOX0VOVFJJRVNdOwotCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7Ci19OwotCi0vKgotICoga3ZtX21tdV9wYWdlX3JvbGUsIGJlbG93LCBpcyBkZWZpbmVkIGFzOgotICoKLSAqICAgYml0cyAwOjMgLSB0b3RhbCBndWVzdCBwYWdpbmcgbGV2ZWxzICgyLTQsIG9yIHplcm8gZm9yIHJlYWwgbW9kZSkKLSAqICAgYml0cyA0OjcgLSBwYWdlIHRhYmxlIGxldmVsIGZvciB0aGlzIHNoYWRvdyAoMS00KQotICogICBiaXRzIDg6OSAtIHBhZ2UgdGFibGUgcXVhZHJhbnQgZm9yIDItbGV2ZWwgZ3Vlc3RzCi0gKiAgIGJpdCAgIDE2IC0gIm1ldGFwaHlzaWNhbCIgLSBnZm4gaXMgbm90IGEgcmVhbCBwYWdlIChodWdlIHBhZ2UvcmVhbCBtb2RlKQotICogICBiaXRzIDE3OjE5IC0gY29tbW9uIGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgYWxsIHB0ZXMgaW4gdGhpcyBzaGFkb3cgcGFnZQotICovCi11bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSB7Ci0JdW5zaWduZWQgd29yZDsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBnbGV2ZWxzOjQ7Ci0JCXVuc2lnbmVkIGxldmVsOjQ7Ci0JCXVuc2lnbmVkIHF1YWRyYW50OjI7Ci0JCXVuc2lnbmVkIHBhZF9mb3JfbmljZV9oZXhfb3V0cHV0OjY7Ci0JCXVuc2lnbmVkIG1ldGFwaHlzaWNhbDoxOwotCQl1bnNpZ25lZCBhY2Nlc3M6MzsKLQkJdW5zaWduZWQgaW52YWxpZDoxOwotCX07Ci19OwotCi1zdHJ1Y3Qga3ZtX21tdV9wYWdlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGFzaF9saW5rOwotCi0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIHR3byBlbnRyaWVzIGFyZSB1c2VkIHRvIGtleSB0aGUgc2hhZG93IHBhZ2UgaW4gdGhlCi0JICogaGFzaCB0YWJsZS4KLQkgKi8KLQlnZm5fdCBnZm47Ci0JdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZTsKLQotCXU2NCAqc3B0OwotCS8qIGhvbGQgdGhlIGdmbiBvZiBlYWNoIHNwdGUgaW5zaWRlIHNwdCAqLwotCWdmbl90ICpnZm5zOwotCXVuc2lnbmVkIGxvbmcgc2xvdF9iaXRtYXA7IC8qIE9uZSBiaXQgc2V0IHBlciBzbG90IHdoaWNoIGhhcyBtZW1vcnkKLQkJCQkgICAgKiBpbiB0aGlzIHNoYWRvdyBwYWdlLgotCQkJCSAgICAqLwotCWludCBtdWx0aW1hcHBlZDsgICAgICAgICAvKiBNb3JlIHRoYW4gb25lIHBhcmVudF9wdGU/ICovCi0JaW50IHJvb3RfY291bnQ7ICAgICAgICAgIC8qIEN1cnJlbnRseSBzZXJ2aW5nIGFzIGFjdGl2ZSByb290ICovCi0JYm9vbCB1bnN5bmM7Ci0JYm9vbCB1bnN5bmNfY2hpbGRyZW47Ci0JdW5pb24gewotCQl1NjQgKnBhcmVudF9wdGU7ICAgICAgICAgICAgICAgLyogIW11bHRpbWFwcGVkICovCi0JCXN0cnVjdCBobGlzdF9oZWFkIHBhcmVudF9wdGVzOyAvKiBtdWx0aW1hcHBlZCwga3ZtX3B0ZV9jaGFpbiAqLwotCX07Ci0JREVDTEFSRV9CSVRNQVAodW5zeW5jX2NoaWxkX2JpdG1hcCwgNTEyKTsKLX07Ci0KLXN0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciB7Ci0Jdm9pZCAqcHRyOwotCXVuc2lnbmVkIGxlbjsKLQl1bnNpZ25lZCBwcm9jZXNzZWQ7Ci0JY2hhciBidWZbNTEyXSBfX2FsaWduZWQoc2l6ZW9mKGxvbmcpKTsKLX07Ci0KLS8qCi0gKiB4ODYgc3VwcG9ydHMgMyBwYWdpbmcgbW9kZXMgKDQtbGV2ZWwgNjQtYml0LCAzLWxldmVsIDY0LWJpdCwgYW5kIDItbGV2ZWwKLSAqIDMyLWJpdCkuICBUaGUga3ZtX21tdSBzdHJ1Y3R1cmUgYWJzdHJhY3RzIHRoZSBkZXRhaWxzIG9mIHRoZSBjdXJyZW50IG1tdQotICogbW9kZS4KLSAqLwotc3RydWN0IGt2bV9tbXUgewotCXZvaWQgKCpuZXdfY3IzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCWludCAoKnBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgZXJyKTsKLQl2b2lkICgqZnJlZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQlncGFfdCAoKmd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKLQl2b2lkICgqcHJlZmV0Y2hfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZSk7Ci0JaW50ICgqc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOwotCXZvaWQgKCppbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKLQlocGFfdCByb290X2hwYTsKLQlpbnQgcm9vdF9sZXZlbDsKLQlpbnQgc2hhZG93X3Jvb3RfbGV2ZWw7Ci0KLQl1NjQgKnBhZV9yb290OwotfTsKLQotc3RydWN0IGt2bV92Y3B1X2FyY2ggewotCXU2NCBob3N0X3RzYzsKLQlpbnQgaW50ZXJydXB0X3dpbmRvd19vcGVuOwotCXVuc2lnbmVkIGxvbmcgaXJxX3N1bW1hcnk7IC8qIGJpdCB2ZWN0b3I6IDEgcGVyIHdvcmQgaW4gaXJxX3BlbmRpbmcgKi8KLQlERUNMQVJFX0JJVE1BUChpcnFfcGVuZGluZywgS1ZNX05SX0lOVEVSUlVQVFMpOwotCS8qCi0JICogcmlwIGFuZCByZWdzIGFjY2Vzc2VzIG11c3QgZ28gdGhyb3VnaAotCSAqIGt2bV97cmVnaXN0ZXIscmlwfV97cmVhZCx3cml0ZX0gZnVuY3Rpb25zLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgcmVnc1tOUl9WQ1BVX1JFR1NdOwotCXUzMiByZWdzX2F2YWlsOwotCXUzMiByZWdzX2RpcnR5OwotCi0JdW5zaWduZWQgbG9uZyBjcjA7Ci0JdW5zaWduZWQgbG9uZyBjcjI7Ci0JdW5zaWduZWQgbG9uZyBjcjM7Ci0JdW5zaWduZWQgbG9uZyBjcjQ7Ci0JdW5zaWduZWQgbG9uZyBjcjg7Ci0JdTY0IHBkcHRyc1s0XTsgLyogcGFlICovCi0JdTY0IHNoYWRvd19lZmVyOwotCXU2NCBhcGljX2Jhc2U7Ci0Jc3RydWN0IGt2bV9sYXBpYyAqYXBpYzsgICAgLyoga2VybmVsIGlycWNoaXAgY29udGV4dCAqLwotCWludCBtcF9zdGF0ZTsKLQlpbnQgc2lwaV92ZWN0b3I7Ci0JdTY0IGlhMzJfbWlzY19lbmFibGVfbXNyOwotCWJvb2wgdHByX2FjY2Vzc19yZXBvcnRpbmc7Ci0KLQlzdHJ1Y3Qga3ZtX21tdSBtbXU7Ci0JLyogb25seSBuZWVkZWQgaW4ga3ZtX3B2X21tdV9vcCgpIHBhdGgsIGJ1dCBpdCdzIGhvdCBzbwotCSAqIHB1dCBpdCBoZXJlIHRvIGF2b2lkIGFsbG9jYXRpb24gKi8KLQlzdHJ1Y3Qga3ZtX3B2X21tdV9vcF9idWZmZXIgbW11X29wX2J1ZmZlcjsKLQotCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfcHRlX2NoYWluX2NhY2hlOwotCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfcm1hcF9kZXNjX2NhY2hlOwotCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfcGFnZV9jYWNoZTsKLQlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X3BhZ2VfaGVhZGVyX2NhY2hlOwotCi0JZ2ZuX3QgbGFzdF9wdF93cml0ZV9nZm47Ci0JaW50ICAgbGFzdF9wdF93cml0ZV9jb3VudDsKLQl1NjQgICpsYXN0X3B0ZV91cGRhdGVkOwotCWdmbl90IGxhc3RfcHRlX2dmbjsKLQotCXN0cnVjdCB7Ci0JCWdmbl90IGdmbjsJLyogcHJlc3VtZWQgZ2ZuIGR1cmluZyBndWVzdCBwdGUgdXBkYXRlICovCi0JCXBmbl90IHBmbjsJLyogcGZuIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBnZm4gKi8KLQkJaW50IGxhcmdlcGFnZTsKLQkJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwotCX0gdXBkYXRlX3B0ZTsKLQotCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgaG9zdF9meF9pbWFnZTsKLQlzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IGd1ZXN0X2Z4X2ltYWdlOwotCi0JZ3ZhX3QgbW1pb19mYXVsdF9jcjI7Ci0Jc3RydWN0IGt2bV9waW9fcmVxdWVzdCBwaW87Ci0Jdm9pZCAqcGlvX2RhdGE7Ci0KLQlzdHJ1Y3Qga3ZtX3F1ZXVlZF9leGNlcHRpb24gewotCQlib29sIHBlbmRpbmc7Ci0JCWJvb2wgaGFzX2Vycm9yX2NvZGU7Ci0JCXU4IG5yOwotCQl1MzIgZXJyb3JfY29kZTsKLQl9IGV4Y2VwdGlvbjsKLQotCXN0cnVjdCBrdm1fcXVldWVkX2ludGVycnVwdCB7Ci0JCWJvb2wgcGVuZGluZzsKLQkJdTggbnI7Ci0JfSBpbnRlcnJ1cHQ7Ci0KLQlzdHJ1Y3QgewotCQlpbnQgYWN0aXZlOwotCQl1OCBzYXZlX2lvcGw7Ci0JCXN0cnVjdCBrdm1fc2F2ZV9zZWdtZW50IHsKLQkJCXUxNiBzZWxlY3RvcjsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQkJCXUzMiBsaW1pdDsKLQkJCXUzMiBhcjsKLQkJfSB0ciwgZXMsIGRzLCBmcywgZ3M7Ci0JfSBybW9kZTsKLQlpbnQgaGFsdF9yZXF1ZXN0OyAvKiByZWFsIG1vZGUgb24gSW50ZWwgb25seSAqLwotCi0JaW50IGNwdWlkX25lbnQ7Ci0Jc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgY3B1aWRfZW50cmllc1tLVk1fTUFYX0NQVUlEX0VOVFJJRVNdOwotCS8qIGVtdWxhdGUgY29udGV4dCAqLwotCi0Jc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgZW11bGF0ZV9jdHh0OwotCi0JZ3BhX3QgdGltZTsKLQlzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jazsKLQl1bnNpZ25lZCBpbnQgaHZfY2xvY2tfdHNjX2toejsKLQl1bnNpZ25lZCBpbnQgdGltZV9vZmZzZXQ7Ci0Jc3RydWN0IHBhZ2UgKnRpbWVfcGFnZTsKLQotCWJvb2wgbm1pX3BlbmRpbmc7Ci0JYm9vbCBubWlfaW5qZWN0ZWQ7Ci0KLQl1NjQgbXRyclsweDEwMF07Ci19OwotCi1zdHJ1Y3Qga3ZtX21lbV9hbGlhcyB7Ci0JZ2ZuX3QgYmFzZV9nZm47Ci0JdW5zaWduZWQgbG9uZyBucGFnZXM7Ci0JZ2ZuX3QgdGFyZ2V0X2dmbjsKLX07Ci0KLXN0cnVjdCBrdm1fYXJjaHsKLQlpbnQgbmFsaWFzZXM7Ci0Jc3RydWN0IGt2bV9tZW1fYWxpYXMgYWxpYXNlc1tLVk1fQUxJQVNfU0xPVFNdOwotCi0JdW5zaWduZWQgaW50IG5fZnJlZV9tbXVfcGFnZXM7Ci0JdW5zaWduZWQgaW50IG5fcmVxdWVzdGVkX21tdV9wYWdlczsKLQl1bnNpZ25lZCBpbnQgbl9hbGxvY19tbXVfcGFnZXM7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgbW11X3BhZ2VfaGFzaFtLVk1fTlVNX01NVV9QQUdFU107Ci0JLyoKLQkgKiBIYXNoIHRhYmxlIG9mIHN0cnVjdCBrdm1fbW11X3BhZ2UuCi0JICovCi0Jc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbW11X3BhZ2VzOwotCXN0cnVjdCBsaXN0X2hlYWQgYXNzaWduZWRfZGV2X2hlYWQ7Ci0Jc3RydWN0IGRtYXJfZG9tYWluICppbnRlbF9pb21tdV9kb21haW47Ci0Jc3RydWN0IGt2bV9waWMgKnZwaWM7Ci0Jc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7Ci0Jc3RydWN0IGt2bV9waXQgKnZwaXQ7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgaXJxX2Fja19ub3RpZmllcl9saXN0OwotCi0JaW50IHJvdW5kX3JvYmluX3ByZXZfdmNwdTsKLQl1bnNpZ25lZCBpbnQgdHNzX2FkZHI7Ci0Jc3RydWN0IHBhZ2UgKmFwaWNfYWNjZXNzX3BhZ2U7Ci0KLQlncGFfdCB3YWxsX2Nsb2NrOwotCi0Jc3RydWN0IHBhZ2UgKmVwdF9pZGVudGl0eV9wYWdldGFibGU7Ci0JYm9vbCBlcHRfaWRlbnRpdHlfcGFnZXRhYmxlX2RvbmU7Ci19OwotCi1zdHJ1Y3Qga3ZtX3ZtX3N0YXQgewotCXUzMiBtbXVfc2hhZG93X3phcHBlZDsKLQl1MzIgbW11X3B0ZV93cml0ZTsKLQl1MzIgbW11X3B0ZV91cGRhdGVkOwotCXUzMiBtbXVfcGRlX3phcHBlZDsKLQl1MzIgbW11X2Zsb29kZWQ7Ci0JdTMyIG1tdV9yZWN5Y2xlZDsKLQl1MzIgbW11X2NhY2hlX21pc3M7Ci0JdTMyIG1tdV91bnN5bmM7Ci0JdTMyIHJlbW90ZV90bGJfZmx1c2g7Ci0JdTMyIGxwYWdlczsKLX07Ci0KLXN0cnVjdCBrdm1fdmNwdV9zdGF0IHsKLQl1MzIgcGZfZml4ZWQ7Ci0JdTMyIHBmX2d1ZXN0OwotCXUzMiB0bGJfZmx1c2g7Ci0JdTMyIGludmxwZzsKLQotCXUzMiBleGl0czsKLQl1MzIgaW9fZXhpdHM7Ci0JdTMyIG1taW9fZXhpdHM7Ci0JdTMyIHNpZ25hbF9leGl0czsKLQl1MzIgaXJxX3dpbmRvd19leGl0czsKLQl1MzIgbm1pX3dpbmRvd19leGl0czsKLQl1MzIgaGFsdF9leGl0czsKLQl1MzIgaGFsdF93YWtldXA7Ci0JdTMyIHJlcXVlc3RfaXJxX2V4aXRzOwotCXUzMiBpcnFfZXhpdHM7Ci0JdTMyIGhvc3Rfc3RhdGVfcmVsb2FkOwotCXUzMiBlZmVyX3JlbG9hZDsKLQl1MzIgZnB1X3JlbG9hZDsKLQl1MzIgaW5zbl9lbXVsYXRpb247Ci0JdTMyIGluc25fZW11bGF0aW9uX2ZhaWw7Ci0JdTMyIGh5cGVyY2FsbHM7Ci0JdTMyIGlycV9pbmplY3Rpb25zOwotfTsKLQotc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgewotCXUxNiBsaW1pdDsKLQl1bnNpZ25lZCBsb25nIGJhc2U7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgewotCWludCAoKmNwdV9oYXNfa3ZtX3N1cHBvcnQpKHZvaWQpOyAgICAgICAgICAvKiBfX2luaXQgKi8KLQlpbnQgKCpkaXNhYmxlZF9ieV9iaW9zKSh2b2lkKTsgICAgICAgICAgICAgLyogX19pbml0ICovCi0Jdm9pZCAoKmhhcmR3YXJlX2VuYWJsZSkodm9pZCAqZHVtbXkpOyAgICAgIC8qIF9faW5pdCAqLwotCXZvaWQgKCpoYXJkd2FyZV9kaXNhYmxlKSh2b2lkICpkdW1teSk7Ci0Jdm9pZCAoKmNoZWNrX3Byb2Nlc3Nvcl9jb21wYXRpYmlsaXR5KSh2b2lkICpydG4pOwotCWludCAoKmhhcmR3YXJlX3NldHVwKSh2b2lkKTsgICAgICAgICAgICAgICAvKiBfX2luaXQgKi8KLQl2b2lkICgqaGFyZHdhcmVfdW5zZXR1cCkodm9pZCk7ICAgICAgICAgICAgLyogX19leGl0ICovCi0JYm9vbCAoKmNwdV9oYXNfYWNjZWxlcmF0ZWRfdHByKSh2b2lkKTsKLQotCS8qIENyZWF0ZSwgYnV0IGRvIG5vdCBhdHRhY2ggdGhpcyBWQ1BVICovCi0Jc3RydWN0IGt2bV92Y3B1ICooKnZjcHVfY3JlYXRlKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlkKTsKLQl2b2lkICgqdmNwdV9mcmVlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCWludCAoKnZjcHVfcmVzZXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLQl2b2lkICgqcHJlcGFyZV9ndWVzdF9zd2l0Y2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0Jdm9pZCAoKnZjcHVfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLQl2b2lkICgqdmNwdV9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLQlpbnQgKCpzZXRfZ3Vlc3RfZGVidWcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgICAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpOwotCXZvaWQgKCpndWVzdF9kZWJ1Z19wcmUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JaW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKTsKLQlpbnQgKCpzZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCBkYXRhKTsKLQl1NjQgKCpnZXRfc2VnbWVudF9iYXNlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpOwotCXZvaWQgKCpnZXRfc2VnbWVudCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLCBpbnQgc2VnKTsKLQlpbnQgKCpnZXRfY3BsKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCpzZXRfc2VnbWVudCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLCBpbnQgc2VnKTsKLQl2b2lkICgqZ2V0X2NzX2RiX2xfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKmRiLCBpbnQgKmwpOwotCXZvaWQgKCpkZWNhY2hlX2NyNF9ndWVzdF9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCpzZXRfY3IwKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKLQl2b2lkICgqc2V0X2NyMykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7Ci0Jdm9pZCAoKnNldF9jcjQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpOwotCXZvaWQgKCpzZXRfZWZlcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcik7Ci0Jdm9pZCAoKmdldF9pZHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKmR0KTsKLQl2b2lkICgqc2V0X2lkdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpOwotCXZvaWQgKCpnZXRfZ2R0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCk7Ci0Jdm9pZCAoKnNldF9nZHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKmR0KTsKLQl1bnNpZ25lZCBsb25nICgqZ2V0X2RyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7Ci0Jdm9pZCAoKnNldF9kcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCi0JCSAgICAgICBpbnQgKmV4Y2VwdGlvbik7Ci0Jdm9pZCAoKmNhY2hlX3JlZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKTsKLQl1bnNpZ25lZCBsb25nICgqZ2V0X3JmbGFncykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQl2b2lkICgqc2V0X3JmbGFncykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJmbGFncyk7Ci0KLQl2b2lkICgqdGxiX2ZsdXNoKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCi0Jdm9pZCAoKnJ1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuKTsKLQlpbnQgKCpoYW5kbGVfZXhpdCkoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQl2b2lkICgqc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQl2b2lkICgqcGF0Y2hfaHlwZXJjYWxsKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJdW5zaWduZWQgY2hhciAqaHlwZXJjYWxsX2FkZHIpOwotCWludCAoKmdldF9pcnEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0Jdm9pZCAoKnNldF9pcnEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYyk7Ci0Jdm9pZCAoKnF1ZXVlX2V4Y2VwdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBuciwKLQkJCQlib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSk7Ci0JYm9vbCAoKmV4Y2VwdGlvbl9pbmplY3RlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQl2b2lkICgqaW5qZWN0X3BlbmRpbmdfaXJxKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCppbmplY3RfcGVuZGluZ192ZWN0b3JzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgICAgIHN0cnVjdCBrdm1fcnVuICpydW4pOwotCi0JaW50ICgqc2V0X3Rzc19hZGRyKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBhZGRyKTsKLQlpbnQgKCpnZXRfdGRwX2xldmVsKSh2b2lkKTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKmt2bV94ODZfb3BzOwotCi1pbnQga3ZtX21tdV9tb2R1bGVfaW5pdCh2b2lkKTsKLXZvaWQga3ZtX21tdV9tb2R1bGVfZXhpdCh2b2lkKTsKLQotdm9pZCBrdm1fbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCBrdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IGt2bV9tbXVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLXZvaWQga3ZtX21tdV9zZXRfbm9ucHJlc2VudF9wdGVzKHU2NCB0cmFwX3B0ZSwgdTY0IG5vdHJhcF9wdGUpOwotdm9pZCBrdm1fbW11X3NldF9iYXNlX3B0ZXModTY0IGJhc2VfcHRlKTsKLXZvaWQga3ZtX21tdV9zZXRfbWFza19wdGVzKHU2NCB1c2VyX21hc2ssIHU2NCBhY2Nlc3NlZF9tYXNrLAotCQl1NjQgZGlydHlfbWFzaywgdTY0IG54X21hc2ssIHU2NCB4X21hc2spOwotCi1pbnQga3ZtX21tdV9yZXNldF9jb250ZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIGt2bV9tbXVfc2xvdF9yZW1vdmVfd3JpdGVfYWNjZXNzKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpOwotdm9pZCBrdm1fbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKTsKLXVuc2lnbmVkIGludCBrdm1fbW11X2NhbGN1bGF0ZV9tbXVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKTsKLXZvaWQga3ZtX21tdV9jaGFuZ2VfbW11X3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGt2bV9ucl9tbXVfcGFnZXMpOwotCi1pbnQgbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7Ci0KLWludCBlbXVsYXRvcl93cml0ZV9waHlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLAotCQkJICBjb25zdCB2b2lkICp2YWwsIGludCBieXRlcyk7Ci1pbnQga3ZtX3B2X21tdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCi0JCSAgZ3BhX3QgYWRkciwgdW5zaWduZWQgbG9uZyAqcmV0KTsKLQotZXh0ZXJuIGJvb2wgdGRwX2VuYWJsZWQ7Ci0KLWVudW0gZW11bGF0aW9uX3Jlc3VsdCB7Ci0JRU1VTEFURV9ET05FLCAgICAgICAvKiBubyBmdXJ0aGVyIHByb2Nlc3NpbmcgKi8KLQlFTVVMQVRFX0RPX01NSU8sICAgICAgLyoga3ZtX3J1biBmaWxsZWQgd2l0aCBtbWlvIHJlcXVlc3QgKi8KLQlFTVVMQVRFX0ZBSUwsICAgICAgICAgLyogY2FuJ3QgZW11bGF0ZSB0aGlzIGluc3RydWN0aW9uICovCi19OwotCi0jZGVmaW5lIEVNVUxUWVBFX05PX0RFQ09ERQkgICAgKDEgPDwgMCkKLSNkZWZpbmUgRU1VTFRZUEVfVFJBUF9VRAkgICAgKDEgPDwgMSkKLWludCBlbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1biwKLQkJCXVuc2lnbmVkIGxvbmcgY3IyLCB1MTYgZXJyb3JfY29kZSwgaW50IGVtdWxhdGlvbl90eXBlKTsKLXZvaWQga3ZtX3JlcG9ydF9lbXVsYXRpb25fZmFpbHVyZShzdHJ1Y3Qga3ZtX3ZjcHUgKmN2cHUsIGNvbnN0IGNoYXIgKmNvbnRleHQpOwotdm9pZCByZWFsbW9kZV9sZ2R0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNpemUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Ci12b2lkIHJlYWxtb2RlX2xpZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2l6ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLXZvaWQgcmVhbG1vZGVfbG1zdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbXN3LAotCQkgICB1bnNpZ25lZCBsb25nICpyZmxhZ3MpOwotCi11bnNpZ25lZCBsb25nIHJlYWxtb2RlX2dldF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcik7Ci12b2lkIHJlYWxtb2RlX3NldF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjciwgdW5zaWduZWQgbG9uZyB2YWx1ZSwKLQkJICAgICB1bnNpZ25lZCBsb25nICpyZmxhZ3MpOwotdm9pZCBrdm1fZW5hYmxlX2VmZXJfYml0cyh1NjQpOwotaW50IGt2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0ICpkYXRhKTsKLWludCBrdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCBkYXRhKTsKLQotc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQ7Ci0KLWludCBrdm1fZW11bGF0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBpbnQgaW4sCi0JCSAgICAgaW50IHNpemUsIHVuc2lnbmVkIHBvcnQpOwotaW50IGt2bV9lbXVsYXRlX3Bpb19zdHJpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBpbnQgaW4sCi0JCQkgICBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50IGRvd24sCi0JCQkgICAgZ3ZhX3QgYWRkcmVzcywgaW50IHJlcCwgdW5zaWduZWQgcG9ydCk7Ci12b2lkIGt2bV9lbXVsYXRlX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQga3ZtX2VtdWxhdGVfaGFsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IGVtdWxhdGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkcmVzcyk7Ci1pbnQgZW11bGF0ZV9jbHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQgZW11bGF0b3JfZ2V0X2RyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZHIsCi0JCSAgICB1bnNpZ25lZCBsb25nICpkZXN0KTsKLWludCBlbXVsYXRvcl9zZXRfZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBkciwKLQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpOwotCi12b2lkIGt2bV9nZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLCBpbnQgc2VnKTsKLWludCBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2VsZWN0b3IsCi0JCQkJaW50IHR5cGVfYml0cywgaW50IHNlZyk7Ci0KLWludCBrdm1fdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgdHNzX3NlbGVjdG9yLCBpbnQgcmVhc29uKTsKLQotdm9pZCBrdm1fc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKLXZvaWQga3ZtX3NldF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7Ci12b2lkIGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpOwotdm9pZCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTsKLXVuc2lnbmVkIGxvbmcga3ZtX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLXZvaWQga3ZtX2xtc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG1zdyk7Ci12b2lkIGt2bV9nZXRfY3NfZGJfbF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpkYiwgaW50ICpsKTsKLQotaW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEpOwotaW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKTsKLQotdm9pZCBrdm1fcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbnIpOwotdm9pZCBrdm1fcXVldWVfZXhjZXB0aW9uX2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBuciwgdTMyIGVycm9yX2NvZGUpOwotdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMiwKLQkJCSAgIHUzMiBlcnJvcl9jb2RlKTsKLQotdm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwotCi12b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLXZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCi1pbnQgZW11bGF0b3JfcmVhZF9zdGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICB2b2lkICp2YWwsCi0JCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgY29uc3Qgdm9pZCAqdmFsLAotCQkJICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCSAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCi11bnNpZ25lZCBsb25nIHNlZ21lbnRfYmFzZSh1MTYgc2VsZWN0b3IpOwotCi12b2lkIGt2bV9tbXVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIGt2bV9tbXVfcHRlX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLAotCQkgICAgICAgY29uc3QgdTggKm5ldywgaW50IGJ5dGVzKTsKLWludCBrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpOwotdm9pZCBfX2t2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQga3ZtX21tdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIGt2bV9tbXVfdW5sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIGt2bV9tbXVfc3luY19yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCi1pbnQga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLWludCBrdm1fZml4X2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCi1pbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgZXJyb3JfY29kZSk7Ci12b2lkIGt2bV9tbXVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKLQotdm9pZCBrdm1fZW5hYmxlX3RkcCh2b2lkKTsKLXZvaWQga3ZtX2Rpc2FibGVfdGRwKHZvaWQpOwotCi1pbnQgbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7Ci1pbnQgY29tcGxldGVfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZV9oZWFkZXIoaHBhX3Qgc2hhZG93X3BhZ2UpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShzaGFkb3dfcGFnZSA+PiBQQUdFX1NISUZUKTsKLQotCXJldHVybiAoc3RydWN0IGt2bV9tbXVfcGFnZSAqKXBhZ2VfcHJpdmF0ZShwYWdlKTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYga3ZtX3JlYWRfZnModm9pZCkKLXsKLQl1MTYgc2VnOwotCWFzbSgibW92ICUlZnMsICUwIiA6ICI9ZyIoc2VnKSk7Ci0JcmV0dXJuIHNlZzsKLX0KLQotc3RhdGljIGlubGluZSB1MTYga3ZtX3JlYWRfZ3Modm9pZCkKLXsKLQl1MTYgc2VnOwotCWFzbSgibW92ICUlZ3MsICUwIiA6ICI9ZyIoc2VnKSk7Ci0JcmV0dXJuIHNlZzsKLX0KLQotc3RhdGljIGlubGluZSB1MTYga3ZtX3JlYWRfbGR0KHZvaWQpCi17Ci0JdTE2IGxkdDsKLQlhc20oInNsZHQgJTAiIDogIj1nIihsZHQpKTsKLQlyZXR1cm4gbGR0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xvYWRfZnModTE2IHNlbCkKLXsKLQlhc20oIm1vdiAlMCwgJSVmcyIgOiA6ICJybSIoc2VsKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbG9hZF9ncyh1MTYgc2VsKQotewotCWFzbSgibW92ICUwLCAlJWdzIiA6IDogInJtIihzZWwpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGt2bV9sb2FkX2xkdCh1MTYgc2VsKQotewotCWFzbSgibGxkdCAlMCIgOiA6ICJybSIoc2VsKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ2V0X2lkdChzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqdGFibGUpCi17Ci0JYXNtKCJzaWR0ICUwIiA6ICI9bSIoKnRhYmxlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ2V0X2dkdChzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqdGFibGUpCi17Ci0JYXNtKCJzZ2R0ICUwIiA6ICI9bSIoKnRhYmxlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdm1fcmVhZF90cl9iYXNlKHZvaWQpCi17Ci0JdTE2IHRyOwotCWFzbSgic3RyICUwIiA6ICI9ZyIodHIpKTsKLQlyZXR1cm4gc2VnbWVudF9iYXNlKHRyKTsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfNjQKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX21zcih1bnNpZ25lZCBsb25nIG1zcikKLXsKLQl1NjQgdmFsdWU7Ci0KLQlyZG1zcmwobXNyLCB2YWx1ZSk7Ci0JcmV0dXJuIHZhbHVlOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZnhfc2F2ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICppbWFnZSkKLXsKLQlhc20oImZ4c2F2ZSAoJTApIjo6ICJyIiAoaW1hZ2UpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGt2bV9meF9yZXN0b3JlKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmltYWdlKQotewotCWFzbSgiZnhyc3RvciAoJTApIjo6ICJyIiAoaW1hZ2UpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGt2bV9meF9maW5pdCh2b2lkKQotewotCWFzbSgiZmluaXQiKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgZ2V0X3JkeF9pbml0X3ZhbCh2b2lkKQotewotCXJldHVybiAweDYwMDsgLyogUDYgZmFtaWx5ICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faW5qZWN0X2dwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGVycm9yX2NvZGUpCi17Ci0Ja3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIEdQX1ZFQ1RPUiwgZXJyb3JfY29kZSk7Ci19Ci0KLSNkZWZpbmUgQVNNX1ZNWF9WTUNMRUFSX1JBWCAgICAgICAiLmJ5dGUgMHg2NiwgMHgwZiwgMHhjNywgMHgzMCIKLSNkZWZpbmUgQVNNX1ZNWF9WTUxBVU5DSCAgICAgICAgICAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhjMiIKLSNkZWZpbmUgQVNNX1ZNWF9WTVJFU1VNRSAgICAgICAgICAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhjMyIKLSNkZWZpbmUgQVNNX1ZNWF9WTVBUUkxEX1JBWCAgICAgICAiLmJ5dGUgMHgwZiwgMHhjNywgMHgzMCIKLSNkZWZpbmUgQVNNX1ZNWF9WTVJFQURfUkRYX1JBWCAgICAiLmJ5dGUgMHgwZiwgMHg3OCwgMHhkMCIKLSNkZWZpbmUgQVNNX1ZNWF9WTVdSSVRFX1JBWF9SRFggICAiLmJ5dGUgMHgwZiwgMHg3OSwgMHhkMCIKLSNkZWZpbmUgQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFggICAiLmJ5dGUgMHgwZiwgMHg3OSwgMHhkNCIKLSNkZWZpbmUgQVNNX1ZNWF9WTVhPRkYgICAgICAgICAgICAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhjNCIKLSNkZWZpbmUgQVNNX1ZNWF9WTVhPTl9SQVggICAgICAgICAiLmJ5dGUgMHhmMywgMHgwZiwgMHhjNywgMHgzMCIKLSNkZWZpbmUgQVNNX1ZNWF9JTlZFUFQJCSAgIi5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ODAsIDB4MDgiCi0jZGVmaW5lIEFTTV9WTVhfSU5WVlBJRAkJICAiLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHg4MSwgMHgwOCIKLQotI2RlZmluZSBNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIJCTB4MDEwCi0KLSNkZWZpbmUgVFNTX0lPUEJfQkFTRV9PRkZTRVQgMHg2NgotI2RlZmluZSBUU1NfQkFTRV9TSVpFIDB4NjgKLSNkZWZpbmUgVFNTX0lPUEJfU0laRSAoNjU1MzYgLyA4KQotI2RlZmluZSBUU1NfUkVESVJFQ1RJT05fU0laRSAoMjU2IC8gOCkKLSNkZWZpbmUgUk1PREVfVFNTX1NJWkUJCQkJCQkJXAotCShUU1NfQkFTRV9TSVpFICsgVFNTX1JFRElSRUNUSU9OX1NJWkUgKyBUU1NfSU9QQl9TSVpFICsgMSkKLQotZW51bSB7Ci0JVEFTS19TV0lUQ0hfQ0FMTCA9IDAsCi0JVEFTS19TV0lUQ0hfSVJFVCA9IDEsCi0JVEFTS19TV0lUQ0hfSk1QID0gMiwKLQlUQVNLX1NXSVRDSF9HQVRFID0gMywKLX07Ci0KLS8qCi0gKiBIYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb24gaW5zdHJ1Y3Rpb25zIG1heSBmYXVsdCBpZiBhCi0gKiByZWJvb3QgdHVybnMgb2ZmIHZpcnR1YWxpemF0aW9uIHdoaWxlIHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLSAqIFRyYXAgdGhlIGZhdWx0IGFuZCBpZ25vcmUgdGhlIGluc3RydWN0aW9uIGlmIHRoYXQgaGFwcGVucy4KLSAqLwotYXNtbGlua2FnZSB2b2lkIGt2bV9oYW5kbGVfZmF1bHRfb25fcmVib290KHZvaWQpOwotCi0jZGVmaW5lIF9fa3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QoaW5zbikgXAotCSI2NjY6ICIgaW5zbiAiXG5cdCIgXAotCSIucHVzaHNlY3Rpb24gLmZpeHVwLCBcImF4XCIgXG4iIFwKLQkiNjY3OiBcblx0IiBcCi0JX19BU01fU0laRShwdXNoKSAiICQ2NjZiIFxuXHQiCSAgICAgIFwKLQkiam1wIGt2bV9oYW5kbGVfZmF1bHRfb25fcmVib290IFxuXHQiIFwKLQkiLnBvcHNlY3Rpb24gXG5cdCIgXAotCSIucHVzaHNlY3Rpb24gX19leF90YWJsZSwgXCJhXCIgXG5cdCIgXAotCV9BU01fUFRSICIgNjY2YiwgNjY3YiBcblx0IiBcCi0JIi5wb3BzZWN0aW9uIgotCi0jZGVmaW5lIEtWTV9BUkNIX1dBTlRfTU1VX05PVElGSUVSCi1pbnQga3ZtX3VubWFwX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKLWludCBrdm1fYWdlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0tWTV9IT1NUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9rdm1fcGFyYS5oIGIvaW5jbHVkZS9hc20teDg2L2t2bV9wYXJhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMDU0ZmQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2t2bV9wYXJhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19LVk1fUEFSQV9ICi0jZGVmaW5lIEFTTV9YODZfX0tWTV9QQVJBX0gKLQotLyogVGhpcyBDUFVJRCByZXR1cm5zIHRoZSBzaWduYXR1cmUgJ0tWTUtWTUtWTScgaW4gZWJ4LCBlY3gsIGFuZCBlZHguICBJdAotICogc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQgYSBWTSBpcyBydW5uaW5nIHVuZGVyIEtWTS4KLSAqLwotI2RlZmluZSBLVk1fQ1BVSURfU0lHTkFUVVJFCTB4NDAwMDAwMDAKLQotLyogVGhpcyBDUFVJRCByZXR1cm5zIGEgZmVhdHVyZSBiaXRtYXAgaW4gZWF4LiAgQmVmb3JlIGVuYWJsaW5nIGEgcGFydGljdWxhcgotICogcGFyYXZpcnR1YWxpemF0aW9uLCB0aGUgYXBwcm9wcmlhdGUgZmVhdHVyZSBiaXQgc2hvdWxkIGJlIGNoZWNrZWQuCi0gKi8KLSNkZWZpbmUgS1ZNX0NQVUlEX0ZFQVRVUkVTCTB4NDAwMDAwMDEKLSNkZWZpbmUgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0UJCTAKLSNkZWZpbmUgS1ZNX0ZFQVRVUkVfTk9QX0lPX0RFTEFZCTEKLSNkZWZpbmUgS1ZNX0ZFQVRVUkVfTU1VX09QCQkyCi0KLSNkZWZpbmUgTVNSX0tWTV9XQUxMX0NMT0NLICAweDExCi0jZGVmaW5lIE1TUl9LVk1fU1lTVEVNX1RJTUUgMHgxMgotCi0jZGVmaW5lIEtWTV9NQVhfTU1VX09QX0JBVENIICAgICAgICAgICAzMgotCi0vKiBPcGVyYXRpb25zIGZvciBLVk1fSENfTU1VX09QICovCi0jZGVmaW5lIEtWTV9NTVVfT1BfV1JJVEVfUFRFICAgICAgICAgICAgMQotI2RlZmluZSBLVk1fTU1VX09QX0ZMVVNIX1RMQgkgICAgICAgIDIKLSNkZWZpbmUgS1ZNX01NVV9PUF9SRUxFQVNFX1BUCSAgICAgICAgMwotCi0vKiBQYXlsb2FkIGZvciBLVk1fSENfTU1VX09QICovCi1zdHJ1Y3Qga3ZtX21tdV9vcF9oZWFkZXIgewotCV9fdTMyIG9wOwotCV9fdTMyIHBhZDsKLX07Ci0KLXN0cnVjdCBrdm1fbW11X29wX3dyaXRlX3B0ZSB7Ci0Jc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIGhlYWRlcjsKLQlfX3U2NCBwdGVfcGh5czsKLQlfX3U2NCBwdGVfdmFsOwotfTsKLQotc3RydWN0IGt2bV9tbXVfb3BfZmx1c2hfdGxiIHsKLQlzdHJ1Y3Qga3ZtX21tdV9vcF9oZWFkZXIgaGVhZGVyOwotfTsKLQotc3RydWN0IGt2bV9tbXVfb3BfcmVsZWFzZV9wdCB7Ci0Jc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIGhlYWRlcjsKLQlfX3U2NCBwdF9waHlzOwotfTsKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLWV4dGVybiB2b2lkIGt2bWNsb2NrX2luaXQodm9pZCk7Ci0KLQotLyogVGhpcyBpbnN0cnVjdGlvbiBpcyB2bWNhbGwuICBPbiBub24tVlQgYXJjaGl0ZWN0dXJlcywgaXQgd2lsbCBnZW5lcmF0ZSBhCi0gKiB0cmFwIHRoYXQgd2Ugd2lsbCB0aGVuIHJld3JpdGUgdG8gdGhlIGFwcHJvcHJpYXRlIGluc3RydWN0aW9uLgotICovCi0jZGVmaW5lIEtWTV9IWVBFUkNBTEwgIi5ieXRlIDB4MGYsMHgwMSwweGMxIgotCi0vKiBGb3IgS1ZNIGh5cGVyY2FsbHMsIGEgdGhyZWUtYnl0ZSBzZXF1ZW5jZSBvZiBlaXRoZXIgdGhlIHZtcnVuIG9yIHRoZSB2bW1ydW4KLSAqIGluc3RydWN0aW9uLiAgVGhlIGh5cGVydmlzb3IgbWF5IHJlcGxhY2UgaXQgd2l0aCBzb21ldGhpbmcgZWxzZSBidXQgb25seSB0aGUKLSAqIGluc3RydWN0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZSBzdXBwb3J0ZWQuCi0gKgotICogVXAgdG8gZm91ciBhcmd1bWVudHMgbWF5IGJlIHBhc3NlZCBpbiByYngsIHJjeCwgcmR4LCBhbmQgcnNpIHJlc3BlY3RpdmVseS4KLSAqIFRoZSBoeXBlcmNhbGwgbnVtYmVyIHNob3VsZCBiZSBwbGFjZWQgaW4gcmF4IGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUKLSAqIHBsYWNlZCBpbiByYXguICBObyBvdGhlciByZWdpc3RlcnMgd2lsbCBiZSBjbG9iYmVyZWQgdW5sZXNzIGV4cGxpY2l0ZWQKLSAqIG5vdGVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGh5cGVyY2FsbC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDAodW5zaWduZWQgaW50IG5yKQotewotCWxvbmcgcmV0OwotCWFzbSB2b2xhdGlsZShLVk1fSFlQRVJDQUxMCi0JCSAgICAgOiAiPWEiKHJldCkKLQkJICAgICA6ICJhIihucikKLQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDEodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxKQotewotCWxvbmcgcmV0OwotCWFzbSB2b2xhdGlsZShLVk1fSFlQRVJDQUxMCi0JCSAgICAgOiAiPWEiKHJldCkKLQkJICAgICA6ICJhIihuciksICJiIihwMSkKLQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDIodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLAotCQkJCSAgdW5zaWduZWQgbG9uZyBwMikKLXsKLQlsb25nIHJldDsKLQlhc20gdm9sYXRpbGUoS1ZNX0hZUEVSQ0FMTAotCQkgICAgIDogIj1hIihyZXQpCi0JCSAgICAgOiAiYSIobnIpLCAiYiIocDEpLCAiYyIocDIpCi0JCSAgICAgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwzKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgcDIsIHVuc2lnbmVkIGxvbmcgcDMpCi17Ci0JbG9uZyByZXQ7Ci0JYXNtIHZvbGF0aWxlKEtWTV9IWVBFUkNBTEwKLQkJICAgICA6ICI9YSIocmV0KQotCQkgICAgIDogImEiKG5yKSwgImIiKHAxKSwgImMiKHAyKSwgImQiKHAzKQotCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsNCh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsCi0JCQkJICB1bnNpZ25lZCBsb25nIHAyLCB1bnNpZ25lZCBsb25nIHAzLAotCQkJCSAgdW5zaWduZWQgbG9uZyBwNCkKLXsKLQlsb25nIHJldDsKLQlhc20gdm9sYXRpbGUoS1ZNX0hZUEVSQ0FMTAotCQkgICAgIDogIj1hIihyZXQpCi0JCSAgICAgOiAiYSIobnIpLCAiYiIocDEpLCAiYyIocDIpLCAiZCIocDMpLCAiUyIocDQpCi0JCSAgICAgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQga3ZtX3BhcmFfYXZhaWxhYmxlKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKLQljaGFyIHNpZ25hdHVyZVsxM107Ci0KLQljcHVpZChLVk1fQ1BVSURfU0lHTkFUVVJFLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLQltZW1jcHkoc2lnbmF0dXJlICsgMCwgJmVieCwgNCk7Ci0JbWVtY3B5KHNpZ25hdHVyZSArIDQsICZlY3gsIDQpOwotCW1lbWNweShzaWduYXR1cmUgKyA4LCAmZWR4LCA0KTsKLQlzaWduYXR1cmVbMTJdID0gMDsKLQotCWlmIChzdHJjbXAoc2lnbmF0dXJlLCAiS1ZNS1ZNS1ZNIikgPT0gMCkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKQotewotCXJldHVybiBjcHVpZF9lYXgoS1ZNX0NQVUlEX0ZFQVRVUkVTKTsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19LVk1fUEFSQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3ZtX3g4Nl9lbXVsYXRlLmggYi9pbmNsdWRlL2FzbS14ODYva3ZtX3g4Nl9lbXVsYXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZDliMDMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2t2bV94ODZfZW11bGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHg4Nl9lbXVsYXRlLmgKLSAqCi0gKiBHZW5lcmljIHg4NiAoMzItYml0IGFuZCA2NC1iaXQpIGluc3RydWN0aW9uIGRlY29kZXIgYW5kIGVtdWxhdG9yLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBLZWlyIEZyYXNlcgotICoKLSAqIEZyb206IHhlbi11bnN0YWJsZSAxMDY3NjphZjk4MDlmNTFmODFhM2M0M2YyNzZmMDBjODFhNTJlZjU1OGFmZGE0Ci0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19LVk1fWDg2X0VNVUxBVEVfSAotI2RlZmluZSBBU01fWDg2X19LVk1fWDg2X0VNVUxBVEVfSAotCi1zdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dDsKLQotLyoKLSAqIHg4Nl9lbXVsYXRlX29wczoKLSAqCi0gKiBUaGVzZSBvcGVyYXRpb25zIHJlcHJlc2VudCB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IncyBpbnRlcmZhY2UgdG8gbWVtb3J5LgotICogVGhlcmUgYXJlIHR3byBjYXRlZ29yaWVzIG9mIG9wZXJhdGlvbjogdGhvc2UgdGhhdCBhY3Qgb24gb3JkaW5hcnkgbWVtb3J5Ci0gKiByZWdpb25zICgqX3N0ZCksIGFuZCB0aG9zZSB0aGF0IGFjdCBvbiBtZW1vcnkgcmVnaW9ucyBrbm93biB0byByZXF1aXJlCi0gKiBzcGVjaWFsIHRyZWF0bWVudCBvciBlbXVsYXRpb24gKCpfZW11bGF0ZWQpLgotICoKLSAqIFRoZSBlbXVsYXRvciBhc3N1bWVzIHRoYXQgYW4gaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgb25seSBvbmUgJ2VtdWxhdGVkIG1lbW9yeScKLSAqIGxvY2F0aW9uLCB0aGF0IHRoaXMgbG9jYXRpb24gaXMgdGhlIGdpdmVuIGxpbmVhciBmYXVsdGluZyBhZGRyZXNzIChjcjIpLCBhbmQKLSAqIHRoYXQgdGhpcyBpcyBvbmUgb2YgdGhlIGluc3RydWN0aW9uJ3MgZGF0YSBvcGVyYW5kcy4gSW5zdHJ1Y3Rpb24gZmV0Y2hlcyBhbmQKLSAqIHN0YWNrIG9wZXJhdGlvbnMgYXJlIGFzc3VtZWQgbmV2ZXIgdG8gYWNjZXNzIGVtdWxhdGVkIG1lbW9yeS4gVGhlIGVtdWxhdG9yCi0gKiBhdXRvbWF0aWNhbGx5IGRlZHVjZXMgd2hpY2ggb3BlcmFuZCBvZiBhIHN0cmluZy1tb3ZlIG9wZXJhdGlvbiBpcyBhY2Nlc3NpbmcKLSAqIGVtdWxhdGVkIG1lbW9yeSwgYW5kIGFzc3VtZXMgdGhhdCB0aGUgb3RoZXIgb3BlcmFuZCBhY2Nlc3NlcyBub3JtYWwgbWVtb3J5LgotICoKLSAqIE5PVEVTOgotICogIDEuIFRoZSBlbXVsYXRvciBpc24ndCB2ZXJ5IHNtYXJ0IGFib3V0IGVtdWxhdGVkIHZzLiBzdGFuZGFyZCBtZW1vcnkuCi0gKiAgICAgJ0VtdWxhdGVkIG1lbW9yeScgYWNjZXNzIGFkZHJlc3NlcyBzaG91bGQgYmUgY2hlY2tlZCBmb3Igc2FuaXR5LgotICogICAgICdOb3JtYWwgbWVtb3J5JyBhY2Nlc3NlcyBtYXkgZmF1bHQsIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSB0bwotICogICAgIGRldGVjdCBhbmQgaGFuZGxlIHJlZW50cmFuY3kgaW50byB0aGUgZW11bGF0b3IgdmlhIHJlY3Vyc2l2ZSBmYXVsdHMuCi0gKiAgICAgQWNjZXNzZXMgbWF5IGJlIHVuYWxpZ25lZCBhbmQgbWF5IGNyb3NzIHBhZ2UgYm91bmRhcmllcy4KLSAqICAyLiBJZiB0aGUgYWNjZXNzIGZhaWxzIChjYW5ub3QgZW11bGF0ZSwgb3IgYSBzdGFuZGFyZCBhY2Nlc3MgZmF1bHRzKSB0aGVuCi0gKiAgICAgaXQgaXMgdXAgdG8gdGhlIG1lbW9wIHRvIHByb3BhZ2F0ZSB0aGUgZmF1bHQgdG8gdGhlIGd1ZXN0IFZNIHZpYQotICogICAgIHNvbWUgb3V0LW9mLWJhbmQgbWVjaGFuaXNtLCB1bmtub3duIHRvIHRoZSBlbXVsYXRvci4gVGhlIG1lbW9wIHNpZ25hbHMKLSAqICAgICBmYWlsdXJlIGJ5IHJldHVybmluZyBYODZFTVVMX1BST1BBR0FURV9GQVVMVCB0byB0aGUgZW11bGF0b3IsIHdoaWNoIHdpbGwKLSAqICAgICB0aGVuIGltbWVkaWF0ZWx5IGJhaWwuCi0gKiAgMy4gVmFsaWQgYWNjZXNzIHNpemVzIGFyZSAxLCAyLCA0IGFuZCA4IGJ5dGVzLiBPbiB4ODYvMzIgc3lzdGVtcyBvbmx5Ci0gKiAgICAgY21weGNoZzhiX2VtdWxhdGVkIG5lZWQgc3VwcG9ydCA4LWJ5dGUgYWNjZXNzZXMuCi0gKiAgNC4gVGhlIGVtdWxhdG9yIGNhbm5vdCBoYW5kbGUgNjQtYml0IG1vZGUgZW11bGF0aW9uIG9uIGFuIHg4Ni8zMiBzeXN0ZW0uCi0gKi8KLS8qIEFjY2VzcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiBjb250aW51ZSBlbXVsYXRpb24gYXMgbm9ybWFsLiAqLwotI2RlZmluZSBYODZFTVVMX0NPTlRJTlVFICAgICAgICAwCi0vKiBBY2Nlc3MgaXMgdW5oYW5kbGVhYmxlOiBiYWlsIGZyb20gZW11bGF0aW9uIGFuZCByZXR1cm4gZXJyb3IgdG8gY2FsbGVyLiAqLwotI2RlZmluZSBYODZFTVVMX1VOSEFORExFQUJMRSAgICAxCi0vKiBUZXJtaW5hdGUgZW11bGF0aW9uIGJ1dCByZXR1cm4gc3VjY2VzcyB0byB0aGUgY2FsbGVyLiAqLwotI2RlZmluZSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCAyIC8qIHByb3BhZ2F0ZSBhIGdlbmVyYXRlZCBmYXVsdCB0byBndWVzdCAqLwotI2RlZmluZSBYODZFTVVMX1JFVFJZX0lOU1RSICAgICAyIC8qIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiBmb3Igc29tZSByZWFzb24gKi8KLSNkZWZpbmUgWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRCAgMiAvKiBjbXB4Y2hnIGRpZCBub3Qgc2VlIGV4cGVjdGVkIHZhbHVlICovCi1zdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHsKLQkvKgotCSAqIHJlYWRfc3RkOiBSZWFkIGJ5dGVzIG9mIHN0YW5kYXJkIChub24tZW11bGF0ZWQvc3BlY2lhbCkgbWVtb3J5LgotCSAqICAgICAgICAgICBVc2VkIGZvciBpbnN0cnVjdGlvbiBmZXRjaCwgc3RhY2sgb3BlcmF0aW9ucywgYW5kIG90aGVycy4KLQkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIHJlYWQuCi0JICogIEB2YWw6ICAgW09VVF0gVmFsdWUgcmVhZCBmcm9tIG1lbW9yeSwgemVyby1leHRlbmRlZCB0byAndV9sb25nJy4KLQkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIG1lbW9yeS4KLQkgKi8KLQlpbnQgKCpyZWFkX3N0ZCkodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCi0JCQl1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLQkvKgotCSAqIHJlYWRfZW11bGF0ZWQ6IFJlYWQgYnl0ZXMgZnJvbSBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLgotCSAqICBAYWRkcjogIFtJTiBdIExpbmVhciBhZGRyZXNzIGZyb20gd2hpY2ggdG8gcmVhZC4KLQkgKiAgQHZhbDogICBbT1VUXSBWYWx1ZSByZWFkIGZyb20gbWVtb3J5LCB6ZXJvLWV4dGVuZGVkIHRvICd1X2xvbmcnLgotCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gbWVtb3J5LgotCSAqLwotCWludCAoKnJlYWRfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgdm9pZCAqdmFsLAotCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLQkvKgotCSAqIHdyaXRlX2VtdWxhdGVkOiBSZWFkIGJ5dGVzIGZyb20gZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KLQkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyB0byB3aGljaCB0byB3cml0ZS4KLQkgKiAgQHZhbDogICBbSU4gXSBWYWx1ZSB0byB3cml0ZSB0byBtZW1vcnkgKGxvdy1vcmRlciBieXRlcyB1c2VkIGFzCi0JICogICAgICAgICAgICAgICAgcmVxdWlyZWQpLgotCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byB3cml0ZSB0byBtZW1vcnkuCi0JICovCi0JaW50ICgqd3JpdGVfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbCwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLQkvKgotCSAqIGNtcHhjaGdfZW11bGF0ZWQ6IEVtdWxhdGUgYW4gYXRvbWljIChMT0NLZWQpIENNUFhDSEcgb3BlcmF0aW9uIG9uIGFuCi0JICogICAgICAgICAgICAgICAgICAgZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KLQkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyB0byBhY2Nlc3MuCi0JICogIEBvbGQ6ICAgW0lOIF0gVmFsdWUgZXhwZWN0ZWQgdG8gYmUgY3VycmVudCBhdCBAYWRkci4KLQkgKiAgQG5ldzogICBbSU4gXSBWYWx1ZSB0byB3cml0ZSB0byBAYWRkci4KLQkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gYWNjZXNzIHVzaW5nIENNUFhDSEcuCi0JICovCi0JaW50ICgqY21weGNoZ19lbXVsYXRlZCkodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCWNvbnN0IHZvaWQgKm9sZCwKLQkJCQljb25zdCB2b2lkICpuZXcsCi0JCQkJdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0KLX07Ci0KLS8qIFR5cGUsIGFkZHJlc3Mtb2YsIGFuZCB2YWx1ZSBvZiBhbiBpbnN0cnVjdGlvbidzIG9wZXJhbmQuICovCi1zdHJ1Y3Qgb3BlcmFuZCB7Ci0JZW51bSB7IE9QX1JFRywgT1BfTUVNLCBPUF9JTU0sIE9QX05PTkUgfSB0eXBlOwotCXVuc2lnbmVkIGludCBieXRlczsKLQl1bnNpZ25lZCBsb25nIHZhbCwgb3JpZ192YWwsICpwdHI7Ci19OwotCi1zdHJ1Y3QgZmV0Y2hfY2FjaGUgewotCXU4IGRhdGFbMTVdOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci19OwotCi1zdHJ1Y3QgZGVjb2RlX2NhY2hlIHsKLQl1OCB0d29ieXRlOwotCXU4IGI7Ci0JdTggbG9ja19wcmVmaXg7Ci0JdTggcmVwX3ByZWZpeDsKLQl1OCBvcF9ieXRlczsKLQl1OCBhZF9ieXRlczsKLQl1OCByZXhfcHJlZml4OwotCXN0cnVjdCBvcGVyYW5kIHNyYzsKLQlzdHJ1Y3Qgb3BlcmFuZCBkc3Q7Ci0JYm9vbCBoYXNfc2VnX292ZXJyaWRlOwotCXU4IHNlZ19vdmVycmlkZTsKLQl1bnNpZ25lZCBpbnQgZDsKLQl1bnNpZ25lZCBsb25nIHJlZ3NbTlJfVkNQVV9SRUdTXTsKLQl1bnNpZ25lZCBsb25nIGVpcDsKLQkvKiBtb2RybSAqLwotCXU4IG1vZHJtOwotCXU4IG1vZHJtX21vZDsKLQl1OCBtb2RybV9yZWc7Ci0JdTggbW9kcm1fcm07Ci0JdTggdXNlX21vZHJtX2VhOwotCWJvb2wgcmlwX3JlbGF0aXZlOwotCXVuc2lnbmVkIGxvbmcgbW9kcm1fZWE7Ci0Jdm9pZCAqbW9kcm1fcHRyOwotCXVuc2lnbmVkIGxvbmcgbW9kcm1fdmFsOwotCXN0cnVjdCBmZXRjaF9jYWNoZSBmZXRjaDsKLX07Ci0KLXN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHsKLQkvKiBSZWdpc3RlciBzdGF0ZSBiZWZvcmUvYWZ0ZXIgZW11bGF0aW9uLiAqLwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQotCS8qIExpbmVhciBmYXVsdGluZyBhZGRyZXNzIChpZiBlbXVsYXRpbmcgYSBwYWdlLWZhdWx0aW5nIGluc3RydWN0aW9uKSAqLwotCXVuc2lnbmVkIGxvbmcgZWZsYWdzOwotCi0JLyogRW11bGF0ZWQgZXhlY3V0aW9uIG1vZGUsIHJlcHJlc2VudGVkIGJ5IGFuIFg4NkVNVUxfTU9ERSB2YWx1ZS4gKi8KLQlpbnQgbW9kZTsKLQotCXUzMiBjc19iYXNlOwotCi0JLyogZGVjb2RlIGNhY2hlICovCi0KLQlzdHJ1Y3QgZGVjb2RlX2NhY2hlIGRlY29kZTsKLX07Ci0KLS8qIFJlcGVhdCBTdHJpbmcgT3BlcmF0aW9uIFByZWZpeCAqLwotI2RlZmluZSBSRVBFX1BSRUZJWCAgMQotI2RlZmluZSBSRVBORV9QUkVGSVggICAgMgotCi0vKiBFeGVjdXRpb24gbW9kZSwgcGFzc2VkIHRvIHRoZSBlbXVsYXRvci4gKi8KLSNkZWZpbmUgWDg2RU1VTF9NT0RFX1JFQUwgICAgIDAJLyogUmVhbCBtb2RlLiAgICAgICAgICAgICAqLwotI2RlZmluZSBYODZFTVVMX01PREVfUFJPVDE2ICAgMgkvKiAxNi1iaXQgcHJvdGVjdGVkIG1vZGUuICovCi0jZGVmaW5lIFg4NkVNVUxfTU9ERV9QUk9UMzIgICA0CS8qIDMyLWJpdCBwcm90ZWN0ZWQgbW9kZS4gKi8KLSNkZWZpbmUgWDg2RU1VTF9NT0RFX1BST1Q2NCAgIDgJLyogNjQtYml0IChsb25nKSBtb2RlLiAgICAqLwotCi0vKiBIb3N0IGV4ZWN1dGlvbiBtb2RlLiAqLwotI2lmIGRlZmluZWQoX19pMzg2X18pCi0jZGVmaW5lIFg4NkVNVUxfTU9ERV9IT1NUIFg4NkVNVUxfTU9ERV9QUk9UMzIKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLSNkZWZpbmUgWDg2RU1VTF9NT0RFX0hPU1QgWDg2RU1VTF9NT0RFX1BST1Q2NAotI2VuZGlmCi0KLWludCB4ODZfZGVjb2RlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpOwotaW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCSAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX0tWTV9YODZfRU1VTEFURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbGR0LmggYi9pbmNsdWRlL2FzbS14ODYvbGR0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjI4NTAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2xkdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIGxkdC5oCi0gKgotICogRGVmaW5pdGlvbnMgb2Ygc3RydWN0dXJlcyB1c2VkIHdpdGggdGhlIG1vZGlmeV9sZHQgc3lzdGVtIGNhbGwuCi0gKi8KLSNpZm5kZWYgQVNNX1g4Nl9fTERUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTERUX0gKLQotLyogTWF4aW11bSBudW1iZXIgb2YgTERUIGVudHJpZXMgc3VwcG9ydGVkLiAqLwotI2RlZmluZSBMRFRfRU5UUklFUwk4MTkyCi0vKiBUaGUgc2l6ZSBvZiBlYWNoIExEVCBlbnRyeS4gKi8KLSNkZWZpbmUgTERUX0VOVFJZX1NJWkUJOAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotLyoKLSAqIE5vdGUgb24gNjRiaXQgYmFzZSBhbmQgbGltaXQgaXMgaWdub3JlZCBhbmQgeW91IGNhbm5vdCBzZXQgRFMvRVMvQ1MKLSAqIG5vdCB0byB0aGUgZGVmYXVsdCB2YWx1ZXMgaWYgeW91IHN0aWxsIHdhbnQgdG8gZG8gc3lzY2FsbHMuIFRoaXMKLSAqIGNhbGwgaXMgbW9yZSBmb3IgMzJiaXQgbW9kZSB0aGVyZWZvcmUuCi0gKi8KLXN0cnVjdCB1c2VyX2Rlc2MgewotCXVuc2lnbmVkIGludCAgZW50cnlfbnVtYmVyOwotCXVuc2lnbmVkIGludCAgYmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCAgbGltaXQ7Ci0JdW5zaWduZWQgaW50ICBzZWdfMzJiaXQ6MTsKLQl1bnNpZ25lZCBpbnQgIGNvbnRlbnRzOjI7Ci0JdW5zaWduZWQgaW50ICByZWFkX2V4ZWNfb25seToxOwotCXVuc2lnbmVkIGludCAgbGltaXRfaW5fcGFnZXM6MTsKLQl1bnNpZ25lZCBpbnQgIHNlZ19ub3RfcHJlc2VudDoxOwotCXVuc2lnbmVkIGludCAgdXNlYWJsZToxOwotI2lmZGVmIF9feDg2XzY0X18KLQl1bnNpZ25lZCBpbnQgIGxtOjE7Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgTU9ESUZZX0xEVF9DT05URU5UU19EQVRBCTAKLSNkZWZpbmUgTU9ESUZZX0xEVF9DT05URU5UU19TVEFDSwkxCi0jZGVmaW5lIE1PRElGWV9MRFRfQ09OVEVOVFNfQ09ERQkyCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogQVNNX1g4Nl9fTERUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9sZ3Vlc3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9sZ3Vlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwNWU5NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbGd1ZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX0xHVUVTVF9ICi0jZGVmaW5lIEFTTV9YODZfX0xHVUVTVF9ICi0KLSNkZWZpbmUgR0RUX0VOVFJZX0xHVUVTVF9DUwkxMAotI2RlZmluZSBHRFRfRU5UUllfTEdVRVNUX0RTCTExCi0jZGVmaW5lIExHVUVTVF9DUwkJKEdEVF9FTlRSWV9MR1VFU1RfQ1MgKiA4KQotI2RlZmluZSBMR1VFU1RfRFMJCShHRFRfRU5UUllfTEdVRVNUX0RTICogOCkKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotCi0jZGVmaW5lIEdVRVNUX1BMIDEKLQotLyogRXZlcnkgZ3Vlc3QgbWFwcyB0aGUgY29yZSBzd2l0Y2hlciBjb2RlLiAqLwotI2RlZmluZSBTSEFSRURfU1dJVENIRVJfUEFHRVMgXAotCURJVl9ST1VORF9VUChlbmRfc3dpdGNoZXJfdGV4dCAtIHN0YXJ0X3N3aXRjaGVyX3RleHQsIFBBR0VfU0laRSkKLS8qIFBhZ2VzIGZvciBzd2l0Y2hlciBpdHNlbGYsIHRoZW4gdHdvIHBhZ2VzIHBlciBjcHUgKi8KLSNkZWZpbmUgVE9UQUxfU1dJVENIRVJfUEFHRVMgKFNIQVJFRF9TV0lUQ0hFUl9QQUdFUyArIDIgKiBOUl9DUFVTKQotCi0vKiBXZSBtYXAgYXQgLTRNIGZvciBlYXNlIG9mIG1hcHBpbmcgaW50byB0aGUgZ3Vlc3QgKG9uZSBQVEUgcGFnZSkuICovCi0jZGVmaW5lIFNXSVRDSEVSX0FERFIgMHhGRkMwMDAwMAotCi0vKiBGb3VuZCBpbiBzd2l0Y2hlci5TICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBkZWZhdWx0X2lkdF9lbnRyaWVzW107Ci0KLS8qIERlY2xhcmF0aW9ucyBmb3IgZGVmaW5pdGlvbnMgaW4gbGd1ZXN0X2d1ZXN0LlMgKi8KLWV4dGVybiBjaGFyIGxndWVzdF9ub2lycV9zdGFydFtdLCBsZ3Vlc3Rfbm9pcnFfZW5kW107Ci1leHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X2NsaVtdLCBsZ2VuZF9jbGlbXTsKLWV4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfc3RpW10sIGxnZW5kX3N0aVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgbGdzdGFydF9wb3BmW10sIGxnZW5kX3BvcGZbXTsKLWV4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfcHVzaGZbXSwgbGdlbmRfcHVzaGZbXTsKLWV4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfaXJldFtdLCBsZ2VuZF9pcmV0W107Ci0KLWV4dGVybiB2b2lkIGxndWVzdF9pcmV0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbGd1ZXN0X2luaXQodm9pZCk7Ci0KLXN0cnVjdCBsZ3Vlc3RfcmVncyB7Ci0JLyogTWFudWFsbHkgc2F2ZWQgcGFydC4gKi8KLQl1bnNpZ25lZCBsb25nIGVheCwgZWJ4LCBlY3gsIGVkeDsKLQl1bnNpZ25lZCBsb25nIGVzaSwgZWRpLCBlYnA7Ci0JdW5zaWduZWQgbG9uZyBnczsKLQl1bnNpZ25lZCBsb25nIGZzLCBkcywgZXM7Ci0JdW5zaWduZWQgbG9uZyB0cmFwbnVtLCBlcnJjb2RlOwotCS8qIFRyYXAgcHVzaGVkIHBhcnQgKi8KLQl1bnNpZ25lZCBsb25nIGVpcDsKLQl1bnNpZ25lZCBsb25nIGNzOwotCXVuc2lnbmVkIGxvbmcgZWZsYWdzOwotCXVuc2lnbmVkIGxvbmcgZXNwOwotCXVuc2lnbmVkIGxvbmcgc3M7Ci19OwotCi0vKiBUaGlzIGlzIGEgZ3Vlc3Qtc3BlY2lmaWMgcGFnZSAobWFwcGVkIHJvKSBpbnRvIHRoZSBndWVzdC4gKi8KLXN0cnVjdCBsZ3Vlc3Rfcm9fc3RhdGUgewotCS8qIEhvc3QgaW5mb3JtYXRpb24gd2UgbmVlZCB0byByZXN0b3JlIHdoZW4gd2Ugc3dpdGNoIGJhY2suICovCi0JdTMyIGhvc3RfY3IzOwotCXN0cnVjdCBkZXNjX3B0ciBob3N0X2lkdF9kZXNjOwotCXN0cnVjdCBkZXNjX3B0ciBob3N0X2dkdF9kZXNjOwotCXUzMiBob3N0X3NwOwotCi0JLyogRmllbGRzIHdoaWNoIGFyZSB1c2VkIHdoZW4gZ3Vlc3QgaXMgcnVubmluZy4gKi8KLQlzdHJ1Y3QgZGVzY19wdHIgZ3Vlc3RfaWR0X2Rlc2M7Ci0Jc3RydWN0IGRlc2NfcHRyIGd1ZXN0X2dkdF9kZXNjOwotCXN0cnVjdCB4ODZfaHdfdHNzIGd1ZXN0X3RzczsKLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZ3Vlc3RfaWR0W0lEVF9FTlRSSUVTXTsKLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZ3Vlc3RfZ2R0W0dEVF9FTlRSSUVTXTsKLX07Ci0KLXN0cnVjdCBsZ19jcHVfYXJjaCB7Ci0JLyogVGhlIEdEVCBlbnRyaWVzIGNvcGllZCBpbnRvIGxndWVzdF9yb19zdGF0ZSB3aGVuIHJ1bm5pbmcuICovCi0Jc3RydWN0IGRlc2Nfc3RydWN0IGdkdFtHRFRfRU5UUklFU107Ci0KLQkvKiBUaGUgSURUIGVudHJpZXM6IHNvbWUgY29waWVkIGludG8gbGd1ZXN0X3JvX3N0YXRlIHdoZW4gcnVubmluZy4gKi8KLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgaWR0W0lEVF9FTlRSSUVTXTsKLQotCS8qIFRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0IGd1ZXN0LXZpc2libGUgcGFnZWZhdWx0IChpZS4gY3IyKS4gKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfcGFnZWZhdWx0OwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGxndWVzdF9zZXRfdHModm9pZCkKLXsKLQl1MzIgY3IwOwotCi0JY3IwID0gcmVhZF9jcjAoKTsKLQlpZiAoIShjcjAgJiA4KSkKLQkJd3JpdGVfY3IwKGNyMCB8IDgpOwotfQotCi0vKiBGdWxsIDRHIHNlZ21lbnQgZGVzY3JpcHRvcnMsIHN1aXRhYmxlIGZvciBDUyBhbmQgRFMuICovCi0jZGVmaW5lIEZVTExfRVhFQ19TRUdNRU5UICgoc3RydWN0IGRlc2Nfc3RydWN0KXsgeyB7MHgwMDAwZmZmZiwgMHgwMGNmOWIwMH0gfSB9KQotI2RlZmluZSBGVUxMX1NFR01FTlQgKChzdHJ1Y3QgZGVzY19zdHJ1Y3QpeyB7IHsweDAwMDBmZmZmLCAweDAwY2Y5MzAwfSB9IH0pCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX0xHVUVTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbGd1ZXN0X2hjYWxsLmggYi9pbmNsdWRlL2FzbS14ODYvbGd1ZXN0X2hjYWxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMDM0YmEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2xndWVzdF9oY2FsbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBvcnRpb24gb2YgdGhlIGxndWVzdCBoeXBlcmNhbGxzICovCi0jaWZuZGVmIEFTTV9YODZfX0xHVUVTVF9IQ0FMTF9ICi0jZGVmaW5lIEFTTV9YODZfX0xHVUVTVF9IQ0FMTF9ICi0KLSNkZWZpbmUgTEhDQUxMX0ZMVVNIX0FTWU5DCTAKLSNkZWZpbmUgTEhDQUxMX0xHVUVTVF9JTklUCTEKLSNkZWZpbmUgTEhDQUxMX1NIVVRET1dOCQkyCi0jZGVmaW5lIExIQ0FMTF9MT0FEX0dEVAkJMwotI2RlZmluZSBMSENBTExfTkVXX1BHVEFCTEUJNAotI2RlZmluZSBMSENBTExfRkxVU0hfVExCCTUKLSNkZWZpbmUgTEhDQUxMX0xPQURfSURUX0VOVFJZCTYKLSNkZWZpbmUgTEhDQUxMX1NFVF9TVEFDSwk3Ci0jZGVmaW5lIExIQ0FMTF9UUwkJOAotI2RlZmluZSBMSENBTExfU0VUX0NMT0NLRVZFTlQJOQotI2RlZmluZSBMSENBTExfSEFMVAkJMTAKLSNkZWZpbmUgTEhDQUxMX1NFVF9QVEUJCTE0Ci0jZGVmaW5lIExIQ0FMTF9TRVRfUE1ECQkxNQotI2RlZmluZSBMSENBTExfTE9BRF9UTFMJCTE2Ci0jZGVmaW5lIExIQ0FMTF9OT1RJRlkJCTE3Ci0KLSNkZWZpbmUgTEdVRVNUX1RSQVBfRU5UUlkgMHgxRgotCi0vKiBBcmd1bWVudCBudW1iZXIgMyB0byBMSENBTExfTEdVRVNUX1NIVVRET1dOICovCi0jZGVmaW5lIExHVUVTVF9TSFVURE9XTl9QT1dFUk9GRgkxCi0jZGVmaW5lIExHVUVTVF9TSFVURE9XTl9SRVNUQVJUCQkyCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8YXNtL2h3X2lycS5oPgotCi0vKkc6MDMxIEJ1dCBmaXJzdCwgaG93IGRvZXMgb3VyIEd1ZXN0IGNvbnRhY3QgdGhlIEhvc3QgdG8gYXNrIGZvciBwcml2aWxlZ2VkCi0gKiBvcGVyYXRpb25zPyAgVGhlcmUgYXJlIHR3byB3YXlzOiB0aGUgZGlyZWN0IHdheSBpcyB0byBtYWtlIGEgImh5cGVyY2FsbCIsCi0gKiB0byBtYWtlIHJlcXVlc3RzIG9mIHRoZSBIb3N0IEl0c2VsZi4KLSAqCi0gKiBPdXIgaHlwZXJjYWxsIG1lY2hhbmlzbSB1c2VzIHRoZSBoaWdoZXN0IHVudXNlZCB0cmFwIGNvZGUgKHRyYXBzIDMyIGFuZAotICogYWJvdmUgYXJlIHVzZWQgYnkgcmVhbCBoYXJkd2FyZSBpbnRlcnJ1cHRzKS4gIEZpZnRlZW4gaHlwZXJjYWxscyBhcmUKLSAqIGF2YWlsYWJsZTogdGhlIGh5cGVyY2FsbCBudW1iZXIgaXMgcHV0IGluIHRoZSAlZWF4IHJlZ2lzdGVyLCBhbmQgdGhlCi0gKiBhcmd1bWVudHMgKHdoZW4gcmVxdWlyZWQpIGFyZSBwbGFjZWQgaW4gJWVkeCwgJWVieCBhbmQgJWVjeC4gIElmIGEgcmV0dXJuCi0gKiB2YWx1ZSBtYWtlcyBzZW5zZSwgaXQncyByZXR1cm5lZCBpbiAlZWF4LgotICoKLSAqIEdyb3NzbHkgaW52YWxpZCBjYWxscyByZXN1bHQgaW4gU3VkZGVuIERlYXRoIGF0IHRoZSBoYW5kcyBvZiB0aGUgdmVuZ2VmdWwKLSAqIEhvc3QsIHJhdGhlciB0aGFuIHJldHVybmluZyBmYWlsdXJlLiAgVGhpcyByZWZsZWN0cyBXaW5zdG9uIENodXJjaGlsbCdzCi0gKiBkZWZpbml0aW9uIG9mIGEgZ2VudGxlbWFuOiAic29tZW9uZSB3aG8gaXMgb25seSBydWRlIGludGVudGlvbmFsbHkiLiAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1oY2FsbCh1bnNpZ25lZCBsb25nIGNhbGwsCi0gICAgICB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKQotewotCS8qICJpbnQiIGlzIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiB0byB0cmlnZ2VyIGEgdHJhcC4gKi8KLQlhc20gdm9sYXRpbGUoImludCAkIiBfX3N0cmluZ2lmeShMR1VFU1RfVFJBUF9FTlRSWSkKLQkJICAgICAvKiBUaGUgY2FsbCBpbiAlZWF4IChha2EgImEiKSBtaWdodCBiZSBvdmVyd3JpdHRlbiAqLwotCQkgICAgIDogIj1hIihjYWxsKQotCQkgICAgICAgLyogVGhlIGFyZ3VtZW50cyBhcmUgaW4gJWVheCwgJWVkeCwgJWVieCAmICVlY3ggKi8KLQkJICAgICA6ICJhIihjYWxsKSwgImQiKGFyZzEpLCAiYiIoYXJnMiksICJjIihhcmczKQotCQkgICAgICAgLyogIm1lbW9yeSIgbWVhbnMgdGhpcyBtaWdodCB3cml0ZSBzb21ld2hlcmUgaW4gbWVtb3J5LgotCQkJKiBUaGlzIGlzbid0IHRydWUgZm9yIGFsbCBjYWxscywgYnV0IGl0J3Mgc2FmZSB0byB0ZWxsCi0JCQkqIGdjYyB0aGF0IGl0IG1pZ2h0IGhhcHBlbiBzbyBpdCBkb2Vzbid0IGdldCBjbGV2ZXIuICovCi0JCSAgICAgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGNhbGw7Ci19Ci0vKjoqLwotCi0vKiBDYW4ndCB1c2Ugb3VyIG1pbigpIG1hY3JvIGhlcmU6IG5lZWRzIHRvIGJlIGEgY29uc3RhbnQgKi8KLSNkZWZpbmUgTEdVRVNUX0lSUVMgKE5SX0lSUVMgPCAzMiA/IE5SX0lSUVM6IDMyKQotCi0jZGVmaW5lIExIQ0FMTF9SSU5HX1NJWkUgNjQKLXN0cnVjdCBoY2FsbF9hcmdzIHsKLQkvKiBUaGVzZSBtYXAgZGlyZWN0bHkgb250byBlYXgsIGVieCwgZWN4LCBlZHggaW4gc3RydWN0IGxndWVzdF9yZWdzICovCi0JdW5zaWduZWQgbG9uZyBhcmcwLCBhcmcyLCBhcmczLCBhcmcxOwotfTsKLQotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBBU01fWDg2X19MR1VFU1RfSENBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9saW5rYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZDhiNjIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2xpbmthZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTElOS0FHRV9ICi0jZGVmaW5lIEFTTV9YODZfX0xJTktBR0VfSAotCi0jdW5kZWYgbm90cmFjZQotI2RlZmluZSBub3RyYWNlIF9fYXR0cmlidXRlX18oKG5vX2luc3RydW1lbnRfZnVuY3Rpb24pKQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfX0FMSUdOIC5wMmFsaWduIDQsLDE1Ci0jZGVmaW5lIF9fQUxJR05fU1RSICIucDJhbGlnbiA0LCwxNSIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBhc21saW5rYWdlIENQUF9BU01MSU5LQUdFIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKQotLyoKLSAqIEZvciAzMi1iaXQgVU1MIC0gbWFyayBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gYXNzZW1ibHkgdGhhdCB1c2UKLSAqIHJlZ3Bhcm0gaW5wdXQgcGFyYW1ldGVyczoKLSAqLwotI2RlZmluZSBhc21yZWdwYXJtIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKQotCi0vKgotICogTWFrZSBzdXJlIHRoZSBjb21waWxlciBkb2Vzbid0IGRvIGFueXRoaW5nIHN0dXBpZCB3aXRoIHRoZQotICogYXJndW1lbnRzIG9uIHRoZSBzdGFjayAtIHRoZXkgYXJlIG93bmVkIGJ5IHRoZSAqY2FsbGVyKiwgbm90Ci0gKiB0aGUgY2FsbGVlLiBUaGlzIGp1c3QgZm9vbHMgZ2NjIGludG8gbm90IHNwaWxsaW5nIGludG8gdGhlbSwKLSAqIGFuZCBrZWVwcyBpdCBmcm9tIGRvaW5nIHRhaWxjYWxsIHJlY3Vyc2lvbiBhbmQvb3IgdXNpbmcgdGhlCi0gKiBzdGFjayBzbG90cyBmb3IgdGVtcG9yYXJpZXMsIHNpbmNlIHRoZXkgYXJlIGxpdmUgYW5kICJ1c2VkIgotICogYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCi0gKgotICogTk9URSEgT24geDg2LTY0LCBhbGwgdGhlIGFyZ3VtZW50cyBhcmUgaW4gcmVnaXN0ZXJzLCBzbyB0aGlzCi0gKiBvbmx5IG1hdHRlcnMgb24gYSAzMi1iaXQga2VybmVsLgotICovCi0jZGVmaW5lIGFzbWxpbmthZ2VfcHJvdGVjdChuLCByZXQsIGFyZ3MuLi4pIFwKLQlfX2FzbWxpbmthZ2VfcHJvdGVjdCMjbihyZXQsICMjYXJncykKLSNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsIGFyZ3MuLi4pIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiAiPXIiIChyZXQpIDogIjAiIChyZXQpLCAjI2FyZ3MpCi0jZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0MChyZXQpIFwKLQlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCkKLSNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3QxKHJldCwgYXJnMSkgXAotCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCAiZyIgKGFyZzEpKQotI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdDIocmV0LCBhcmcxLCBhcmcyKSBcCi0JX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsICJnIiAoYXJnMSksICJnIiAoYXJnMikpCi0jZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0MyhyZXQsIGFyZzEsIGFyZzIsIGFyZzMpIFwKLQlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSwgImciIChhcmcyKSwgImciIChhcmczKSkKLSNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3Q0KHJldCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkgXAotCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCAiZyIgKGFyZzEpLCAiZyIgKGFyZzIpLCAiZyIgKGFyZzMpLCBcCi0JCQkgICAgICAiZyIgKGFyZzQpKQotI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdDUocmV0LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KSBcCi0JX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsICJnIiAoYXJnMSksICJnIiAoYXJnMiksICJnIiAoYXJnMyksIFwKLQkJCSAgICAgICJnIiAoYXJnNCksICJnIiAoYXJnNSkpCi0jZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0NihyZXQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpIFwKLQlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSwgImciIChhcmcyKSwgImciIChhcmczKSwgXAotCQkJICAgICAgImciIChhcmc0KSwgImciIChhcmc1KSwgImciIChhcmc2KSkKLQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2X0FMSUdOTUVOVF8xNgotI2RlZmluZSBfX0FMSUdOIC5hbGlnbiAxNiwweDkwCi0jZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gMTYsMHg5MCIKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTElOS0FHRV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9sb2NhbC5oIGIvaW5jbHVkZS9hc20teDg2L2xvY2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOTE5OTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L2xvY2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19MT0NBTF9ICi0jZGVmaW5lIEFTTV9YODZfX0xPQ0FMX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlhdG9taWNfbG9uZ190IGE7Ci19IGxvY2FsX3Q7Ci0KLSNkZWZpbmUgTE9DQUxfSU5JVChpKQl7IEFUT01JQ19MT05HX0lOSVQoaSkgfQotCi0jZGVmaW5lIGxvY2FsX3JlYWQobCkJYXRvbWljX2xvbmdfcmVhZCgmKGwpLT5hKQotI2RlZmluZSBsb2NhbF9zZXQobCwgaSkJYXRvbWljX2xvbmdfc2V0KCYobCktPmEsIChpKSkKLQotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2luYyhsb2NhbF90ICpsKQotewotCWFzbSB2b2xhdGlsZShfQVNNX0lOQyAiJTAiCi0JCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2RlYyhsb2NhbF90ICpsKQotewotCWFzbSB2b2xhdGlsZShfQVNNX0RFQyAiJTAiCi0JCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2FkZChsb25nIGksIGxvY2FsX3QgKmwpCi17Ci0JYXNtIHZvbGF0aWxlKF9BU01fQUREICIlMSwlMCIKLQkJICAgICA6ICIrbSIgKGwtPmEuY291bnRlcikKLQkJICAgICA6ICJpciIgKGkpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3N1Yihsb25nIGksIGxvY2FsX3QgKmwpCi17Ci0JYXNtIHZvbGF0aWxlKF9BU01fU1VCICIlMSwlMCIKLQkJICAgICA6ICIrbSIgKGwtPmEuY291bnRlcikKLQkJICAgICA6ICJpciIgKGkpKTsKLX0KLQotLyoqCi0gKiBsb2NhbF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEBsOiBwb2ludGVyIHRvIHR5cGUgbG9jYWxfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQGwgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbG9jYWxfc3ViX2FuZF90ZXN0KGxvbmcgaSwgbG9jYWxfdCAqbCkKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoX0FTTV9TVUIgIiUyLCUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBsb2NhbF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEBsOiBwb2ludGVyIHRvIHR5cGUgbG9jYWxfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAbCBieSAxIGFuZAotICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgotICogY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxvY2FsX2RlY19hbmRfdGVzdChsb2NhbF90ICpsKQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShfQVNNX0RFQyAiJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogbG9jYWxfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAbDogcG9pbnRlciB0byB0eXBlIGxvY2FsX3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQGwgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBsb2NhbF9pbmNfYW5kX3Rlc3QobG9jYWxfdCAqbCkKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoX0FTTV9JTkMgIiUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGxvY2FsX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAbDogcG9pbnRlciB0byB0eXBlIGxvY2FsX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQGwgYW5kIHJldHVybnMgdHJ1ZQotICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgotICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgotICovCi1zdGF0aWMgaW5saW5lIGludCBsb2NhbF9hZGRfbmVnYXRpdmUobG9uZyBpLCBsb2NhbF90ICpsKQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShfQVNNX0FERCAiJTIsJTA7IHNldHMgJTEiCi0JCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGxvY2FsX2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAbDogcG9pbnRlciB0byB0eXBlIGxvY2FsX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQGwgYW5kIHJldHVybnMgQGkgKyBAbAotICovCi1zdGF0aWMgaW5saW5lIGxvbmcgbG9jYWxfYWRkX3JldHVybihsb25nIGksIGxvY2FsX3QgKmwpCi17Ci0JbG9uZyBfX2k7Ci0jaWZkZWYgQ09ORklHX00zODYKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmICh1bmxpa2VseShib290X2NwdV9kYXRhLng4NiA8PSAzKSkKLQkJZ290byBub194YWRkOwotI2VuZGlmCi0JLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCi0JX19pID0gaTsKLQlhc20gdm9sYXRpbGUoX0FTTV9YQUREICIlMCwgJTE7IgotCQkgICAgIDogIityIiAoaSksICIrbSIgKGwtPmEuY291bnRlcikKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBpICsgX19pOwotCi0jaWZkZWYgQ09ORklHX00zODYKLW5vX3hhZGQ6IC8qIExlZ2FjeSAzODYgcHJvY2Vzc29yICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9faSA9IGxvY2FsX3JlYWQobCk7Ci0JbG9jYWxfc2V0KGwsIGkgKyBfX2kpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gaSArIF9faTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgbG9jYWxfc3ViX3JldHVybihsb25nIGksIGxvY2FsX3QgKmwpCi17Ci0JcmV0dXJuIGxvY2FsX2FkZF9yZXR1cm4oLWksIGwpOwotfQotCi0jZGVmaW5lIGxvY2FsX2luY19yZXR1cm4obCkgIChsb2NhbF9hZGRfcmV0dXJuKDEsIGwpKQotI2RlZmluZSBsb2NhbF9kZWNfcmV0dXJuKGwpICAobG9jYWxfc3ViX3JldHVybigxLCBsKSkKLQotI2RlZmluZSBsb2NhbF9jbXB4Y2hnKGwsIG8sIG4pIFwKLQkoY21weGNoZ19sb2NhbCgmKChsKS0+YS5jb3VudGVyKSwgKG8pLCAobikpKQotLyogQWx3YXlzIGhhcyBhIGxvY2sgcHJlZml4ICovCi0jZGVmaW5lIGxvY2FsX3hjaGcobCwgbikgKHhjaGcoJigobCktPmEuY291bnRlciksIChuKSkpCi0KLS8qKgotICogbG9jYWxfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCi0gKiBAbDogcG9pbnRlciBvZiB0eXBlIGxvY2FsX3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byBsLi4uCi0gKiBAdTogLi4udW5sZXNzIGwgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQGwsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQGwgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi0jZGVmaW5lIGxvY2FsX2FkZF91bmxlc3MobCwgYSwgdSkJCQkJXAotKHsJCQkJCQkJCVwKLQlsb25nIGMsIG9sZDsJCQkJCQlcCi0JYyA9IGxvY2FsX3JlYWQoKGwpKTsJCQkJCVwKLQlmb3IgKDs7KSB7CQkJCQkJXAotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCi0JCQlicmVhazsJCQkJCVwKLQkJb2xkID0gbG9jYWxfY21weGNoZygobCksIGMsIGMgKyAoYSkpOwkJXAotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkJCQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWMgPSBvbGQ7CQkJCQlcCi0JfQkJCQkJCQlcCi0JYyAhPSAodSk7CQkJCQkJXAotfSkKLSNkZWZpbmUgbG9jYWxfaW5jX25vdF96ZXJvKGwpIGxvY2FsX2FkZF91bmxlc3MoKGwpLCAxLCAwKQotCi0vKiBPbiB4ODZfMzIsIHRoZXNlIGFyZSBubyBiZXR0ZXIgdGhhbiB0aGUgYXRvbWljIHZhcmlhbnRzLgotICogT24geDg2LTY0IHRoZXNlIGFyZSBiZXR0ZXIgdGhhbiB0aGUgYXRvbWljIHZhcmlhbnRzIG9uIFNNUCBrZXJuZWxzCi0gKiBiZWNhdXNlIHRoZXkgZG9udCB1c2UgYSBsb2NrIHByZWZpeC4KLSAqLwotI2RlZmluZSBfX2xvY2FsX2luYyhsKQkJbG9jYWxfaW5jKGwpCi0jZGVmaW5lIF9fbG9jYWxfZGVjKGwpCQlsb2NhbF9kZWMobCkKLSNkZWZpbmUgX19sb2NhbF9hZGQoaSwgbCkJbG9jYWxfYWRkKChpKSwgKGwpKQotI2RlZmluZSBfX2xvY2FsX3N1YihpLCBsKQlsb2NhbF9zdWIoKGkpLCAobCkpCi0KLS8qIFVzZSB0aGVzZSBmb3IgcGVyLWNwdSBsb2NhbF90IHZhcmlhYmxlczogb24gc29tZSBhcmNocyB0aGV5IGFyZQotICogbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIHRoZXNlIG5haXZlIGltcGxlbWVudGF0aW9ucy4gIE5vdGUgdGhleSB0YWtlCi0gKiBhIHZhcmlhYmxlLCBub3QgYW4gYWRkcmVzcy4KLSAqCi0gKiBYODZfNjQ6IFRoaXMgY291bGQgYmUgZG9uZSBiZXR0ZXIgaWYgd2UgbW92ZWQgdGhlIHBlciBjcHUgZGF0YSBkaXJlY3RseQotICogYWZ0ZXIgR1MuCi0gKi8KLQotLyogTmVlZCB0byBkaXNhYmxlIHByZWVtcHRpb24gZm9yIHRoZSBjcHUgbG9jYWwgY291bnRlcnMgb3RoZXJ3aXNlIHdlIGNvdWxkCi0gICBzdGlsbCBhY2Nlc3MgYSB2YXJpYWJsZSBvZiBhIHByZXZpb3VzIENQVSBpbiBhIG5vbiBhdG9taWMgd2F5LiAqLwotI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCQlcCi0oewkJCQkJXAotCWxvY2FsX3QgcmVzX187CQkJXAotCXByZWVtcHRfZGlzYWJsZSgpOyAJCVwKLQlyZXNfXyA9IChsKTsJCQlcCi0JcHJlZW1wdF9lbmFibGUoKTsJCVwKLQlyZXNfXzsJCQkJXAotfSkKLSNkZWZpbmUgY3B1X2xvY2FsX3dyYXAobCkJCVwKLSh7CQkJCQlcCi0JcHJlZW1wdF9kaXNhYmxlKCk7CQlcCi0JKGwpOwkJCQlcCi0JcHJlZW1wdF9lbmFibGUoKTsJCVwKLX0pCQkJCQlcCi0KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKChsKSkpKQotI2RlZmluZSBjcHVfbG9jYWxfc2V0KGwsIGkpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIoKGwpKSwgKGkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKChsKSkpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIoKGwpKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKChsKSkpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcigobCkpKSkKLQotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJY3B1X2xvY2FsX2luYygobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyhsKQljcHVfbG9jYWxfZGVjKChsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCWNwdV9sb2NhbF9hZGQoKGkpLCAobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQljcHVfbG9jYWxfc3ViKChpKSwgKGwpKQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9hcG0uaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvYXBtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYTYxYjUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9hcG0uaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiAgTWFjaGluZSBzcGVjaWZpYyBBUE0gQklPUyBmdW5jdGlvbnMgZm9yIGdlbmVyaWMuCi0gKiAgU3BsaXQgb3V0IGZyb20gYXBtLmMgYnkgT3NhbXUgVG9taXRhIDx0b21pdGFAY2luZXQuY28uanA+Ci0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX0FQTV9ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fQVBNX0gKLQotI2lmZGVmIEFQTV9aRVJPX1NFR1MKLSMJZGVmaW5lIEFQTV9ET19aRVJPX1NFR1MgXAotCQkicHVzaGwgJSVkc1xuXHQiIFwKLQkJInB1c2hsICUlZXNcblx0IiBcCi0JCSJ4b3JsICUlZWR4LCAlJWVkeFxuXHQiIFwKLQkJIm1vdiAlJWR4LCAlJWRzXG5cdCIgXAotCQkibW92ICUlZHgsICUlZXNcblx0IiBcCi0JCSJtb3YgJSVkeCwgJSVmc1xuXHQiIFwKLQkJIm1vdiAlJWR4LCAlJWdzXG5cdCIKLSMJZGVmaW5lIEFQTV9ET19QT1BfU0VHUyBcCi0JCSJwb3BsICUlZXNcblx0IiBcCi0JCSJwb3BsICUlZHNcblx0IgotI2Vsc2UKLSMJZGVmaW5lIEFQTV9ET19aRVJPX1NFR1MKLSMJZGVmaW5lIEFQTV9ET19QT1BfU0VHUwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcG1fYmlvc19jYWxsX2FzbSh1MzIgZnVuYywgdTMyIGVieF9pbiwgdTMyIGVjeF9pbiwKLQkJCQkJdTMyICplYXgsIHUzMiAqZWJ4LCB1MzIgKmVjeCwKLQkJCQkJdTMyICplZHgsIHUzMiAqZXNpKQotewotCS8qCi0JICogTi5CLiBXZSBkbyBOT1QgbmVlZCBhIGNsZCBhZnRlciB0aGUgQklPUyBjYWxsCi0JICogYmVjYXVzZSB3ZSBhbHdheXMgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgZmxhZ3MuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oQVBNX0RPX1pFUk9fU0VHUwotCQkicHVzaGwgJSVlZGlcblx0IgotCQkicHVzaGwgJSVlYnBcblx0IgotCQkibGNhbGwgKiUlY3M6YXBtX2Jpb3NfZW50cnlcblx0IgotCQkic2V0YyAlJWFsXG5cdCIKLQkJInBvcGwgJSVlYnBcblx0IgotCQkicG9wbCAlJWVkaVxuXHQiCi0JCUFQTV9ET19QT1BfU0VHUwotCQk6ICI9YSIgKCplYXgpLCAiPWIiICgqZWJ4KSwgIj1jIiAoKmVjeCksICI9ZCIgKCplZHgpLAotCQkgICI9UyIgKCplc2kpCi0JCTogImEiIChmdW5jKSwgImIiIChlYnhfaW4pLCAiYyIgKGVjeF9pbikKLQkJOiAibWVtb3J5IiwgImNjIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggYXBtX2Jpb3NfY2FsbF9zaW1wbGVfYXNtKHUzMiBmdW5jLCB1MzIgZWJ4X2luLAotCQkJCQkJdTMyIGVjeF9pbiwgdTMyICplYXgpCi17Ci0JaW50CWN4LCBkeCwgc2k7Ci0JdTgJZXJyb3I7Ci0KLQkvKgotCSAqIE4uQi4gV2UgZG8gTk9UIG5lZWQgYSBjbGQgYWZ0ZXIgdGhlIEJJT1MgY2FsbAotCSAqIGJlY2F1c2Ugd2UgYWx3YXlzIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGZsYWdzLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKEFQTV9ET19aRVJPX1NFR1MKLQkJInB1c2hsICUlZWRpXG5cdCIKLQkJInB1c2hsICUlZWJwXG5cdCIKLQkJImxjYWxsIColJWNzOmFwbV9iaW9zX2VudHJ5XG5cdCIKLQkJInNldGMgJSVibFxuXHQiCi0JCSJwb3BsICUlZWJwXG5cdCIKLQkJInBvcGwgJSVlZGlcblx0IgotCQlBUE1fRE9fUE9QX1NFR1MKLQkJOiAiPWEiICgqZWF4KSwgIj1iIiAoZXJyb3IpLCAiPWMiIChjeCksICI9ZCIgKGR4KSwKLQkJICAiPVMiIChzaSkKLQkJOiAiYSIgKGZ1bmMpLCAiYiIgKGVieF9pbiksICJjIiAoZWN4X2luKQotCQk6ICJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX0FQTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L2VudHJ5X2FyY2guaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvZW50cnlfYXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjgzYjYwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvZW50cnlfYXJjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBkZXNpZ25lZCB0byBjb250YWluIHRoZSBCVUlMRF9JTlRFUlJVUFQgc3BlY2lmaWNhdGlvbnMgZm9yCi0gKiBhbGwgb2YgdGhlIGV4dHJhIG5hbWVkIGludGVycnVwdCB2ZWN0b3JzIHVzZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4KLSAqIFVzdWFsbHkgdGhpcyBpcyB0aGUgSW50ZXIgUHJvY2VzcyBJbnRlcnJ1cHRzIChJUElzKQotICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIHZlY3RvcnMgYXJlIHBhcnQgb2YgdGhlIExpbnV4IGFyY2hpdGVjdHVyZSwgdGhlcmUKLSAqIGlzIG5vIGhhcmR3YXJlIElSUSBwaW4gZXF1aXZhbGVudCBmb3IgdGhlbSwgdGhleSBhcmUgdHJpZ2dlcmVkCi0gKiB0aHJvdWdoIHRoZSBJQ0MgYnkgdXMgKElQSXMpCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2X1NNUAotQlVJTERfSU5URVJSVVBUKHJlc2NoZWR1bGVfaW50ZXJydXB0LFJFU0NIRURVTEVfVkVDVE9SKQotQlVJTERfSU5URVJSVVBUKGludmFsaWRhdGVfaW50ZXJydXB0LElOVkFMSURBVEVfVExCX1ZFQ1RPUikKLUJVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX2ludGVycnVwdCxDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikKLUJVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SKQotI2VuZGlmCi0KLS8qCi0gKiBldmVyeSBwZW50aXVtIGxvY2FsIEFQSUMgaGFzIHR3byAnbG9jYWwgaW50ZXJydXB0cycsIHdpdGggYQotICogc29mdC1kZWZpbmFibGUgdmVjdG9yIGF0dGFjaGVkIHRvIGJvdGggaW50ZXJydXB0cywgb25lIG9mCi0gKiB3aGljaCBpcyBhIHRpbWVyIGludGVycnVwdCwgdGhlIG90aGVyIG9uZSBpcyBlcnJvciBjb3VudGVyCi0gKiBvdmVyZmxvdy4gTGludXggdXNlcyB0aGUgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQgdG8gZ2V0Ci0gKiBhIG11Y2ggc2ltcGxlciBTTVAgdGltZSBhcmNoaXRlY3R1cmU6Ci0gKi8KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLUJVSUxEX0lOVEVSUlVQVChhcGljX3RpbWVyX2ludGVycnVwdCxMT0NBTF9USU1FUl9WRUNUT1IpCi1CVUlMRF9JTlRFUlJVUFQoZXJyb3JfaW50ZXJydXB0LEVSUk9SX0FQSUNfVkVDVE9SKQotQlVJTERfSU5URVJSVVBUKHNwdXJpb3VzX2ludGVycnVwdCxTUFVSSU9VU19BUElDX1ZFQ1RPUikKLQotI2lmZGVmIENPTkZJR19YODZfTUNFX1A0VEhFUk1BTAotQlVJTERfSU5URVJSVVBUKHRoZXJtYWxfaW50ZXJydXB0LFRIRVJNQUxfQVBJQ19WRUNUT1IpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzMzBhNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTUFDSF9ERUZBVUxUX19NQUNIX0FQSUNfSAotI2RlZmluZSBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfQVBJQ19ICi0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQotI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLQotI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfRkxBVCkKLQotc3RhdGljIGlubGluZSBjcHVtYXNrX3QgdGFyZ2V0X2NwdXModm9pZCkKLXsgCi0jaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiBjcHVfb25saW5lX21hcDsKLSNlbHNlCi0JcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOwotI2VuZGlmCi19IAotCi0jZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgwKQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMCkKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZ2VuYXBpYy0+aW50X2RlbGl2ZXJ5X21vZGUpCi0jZGVmaW5lIElOVF9ERVNUX01PREUgKGdlbmFwaWMtPmludF9kZXN0X21vZGUpCi0jZGVmaW5lIFRBUkdFVF9DUFVTCSAgKGdlbmFwaWMtPnRhcmdldF9jcHVzKCkpCi0jZGVmaW5lIGFwaWNfaWRfcmVnaXN0ZXJlZCAoZ2VuYXBpYy0+YXBpY19pZF9yZWdpc3RlcmVkKQotI2RlZmluZSBpbml0X2FwaWNfbGRyIChnZW5hcGljLT5pbml0X2FwaWNfbGRyKQotI2RlZmluZSBjcHVfbWFza190b19hcGljaWQgKGdlbmFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZCkKLSNkZWZpbmUgcGh5c19wa2dfaWQJKGdlbmFwaWMtPnBoeXNfcGtnX2lkKQotI2RlZmluZSB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gICAgKGdlbmFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikKLSNkZWZpbmUgcmVhZF9hcGljX2lkKCkgIChHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpKQotI2RlZmluZSBzZW5kX0lQSV9zZWxmIChnZW5hcGljLT5zZW5kX0lQSV9zZWxmKQotZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpOwotI2Vsc2UKLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgZGVzdF9Mb3dlc3RQcmlvCi0jZGVmaW5lIElOVF9ERVNUX01PREUgMSAgICAgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCi0jZGVmaW5lIFRBUkdFVF9DUFVTICh0YXJnZXRfY3B1cygpKQotLyoKLSAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KLSAqCi0gKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZwotICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKLSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7Ci0JdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOwotCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQotewotCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF9hcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQotewotCXJldHVybiBjcHVzX2FkZHIoY3B1bWFzaylbMF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCi0JCQkJCSJGbGF0IiwgbnJfaW9hcGljcyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlyZXR1cm4gYXBpY2lkXzJfbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQotewotCXJldHVybiBwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCi17Ci0JcmV0dXJuIHBoeXNfbWFwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQotewotCXJldHVybiAxIDw8IGNwdTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQotewotCWlmIChtcHNfY3B1IDwgTlJfQ1BVUyAmJiBjcHVfcHJlc2VudChtcHNfY3B1KSkKLQkJcmV0dXJuIChpbnQpcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKLQllbHNlCi0JCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuIHBoeXNpZF9pc3NldChib290X2NwdV9waHlzaWNhbF9hcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwotI2VuZGlmIC8qIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzJkNDFjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9BUElDREVGX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTUFDSF9ERUZBVUxUX19NQUNIX0FQSUNERUZfSAotCi0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUJQVBJQ19JRF9NQVNLCQkoZ2VuYXBpYy0+YXBpY19pZF9tYXNrKQotI2RlZmluZSBHRVRfQVBJQ19JRCh4KQkJKGdlbmFwaWMtPmdldF9hcGljX2lkKHgpKQotI2RlZmluZQlTRVRfQVBJQ19JRCh4KQkJKGdlbmFwaWMtPnNldF9hcGljX2lkKHgpKQotI2Vsc2UKLSNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4Rjw8MjQpCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkgCi17Ci0JdW5zaWduZWQgaW50IHZlciA9IEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci0JaWYgKEFQSUNfWEFQSUModmVyKSkKLQkJcmV0dXJuICgoKHgpPj4yNCkmMHhGRik7Ci0JZWxzZQotCQlyZXR1cm4gKCgoeCk+PjI0KSYweEYpOwotfSAKLQotI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTUFDSF9ERUZBVUxUX19NQUNIX0FQSUNERUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzRiYzdlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTUFDSF9ERUZBVUxUX19NQUNIX0lQSV9ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9JUElfSAotCi0vKiBBdm9pZCBpbmNsdWRlIGhlbGwgKi8KLSNkZWZpbmUgTk1JX1ZFQ1RPUiAweDAyCi0KLXZvaWQgc2VuZF9JUElfbWFza19iaXRtYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKTsKLXZvaWQgX19zZW5kX0lQSV9zaG9ydGN1dCh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IpOwotCi1leHRlcm4gaW50IG5vX2Jyb2FkY2FzdDsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2RlZmluZSBzZW5kX0lQSV9tYXNrIChnZW5hcGljLT5zZW5kX0lQSV9tYXNrKQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfYml0bWFzayhtYXNrLCB2ZWN0b3IpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2xvY2FsX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlpZiAobm9fYnJvYWRjYXN0IHx8IHZlY3RvciA9PSBOTUlfVkVDVE9SKSB7Ci0JCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7Ci0KLQkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7Ci0JCXNlbmRfSVBJX21hc2sobWFzaywgdmVjdG9yKTsKLQl9IGVsc2UKLQkJX19zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMQlVULCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19sb2NhbF9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKLXsKLQlpZiAobm9fYnJvYWRjYXN0IHx8IHZlY3RvciA9PSBOTUlfVkVDVE9SKQotCQlzZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFwLCB2ZWN0b3IpOwotCWVsc2UKLQkJX19zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMSU5DLCB2ZWN0b3IpOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBzZW5kX0lQSV9hbGxidXRzZWxmIChnZW5hcGljLT5zZW5kX0lQSV9hbGxidXRzZWxmKQotI2RlZmluZSBzZW5kX0lQSV9hbGwgKGdlbmFwaWMtPnNlbmRfSVBJX2FsbCkKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCS8qCi0JICogaWYgdGhlcmUgYXJlIG5vIG90aGVyIENQVXMgaW4gdGhlIHN5c3RlbSB0aGVuIHdlIGdldCBhbiBBUElDIHNlbmQgCi0JICogZXJyb3IgaWYgd2UgdHJ5IHRvIGJyb2FkY2FzdCwgdGh1cyBhdm9pZCBzZW5kaW5nIElQSXMgaW4gdGhpcyBjYXNlLgotCSAqLwotCWlmICghKG51bV9vbmxpbmVfY3B1cygpID4gMSkpCi0JCXJldHVybjsKLQotCV9fbG9jYWxfc2VuZF9JUElfYWxsYnV0c2VsZih2ZWN0b3IpOwotCXJldHVybjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQotewotCV9fbG9jYWxfc2VuZF9JUElfYWxsKHZlY3Rvcik7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX21wcGFyc2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMzgxZjIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX21wcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTUFDSF9ERUZBVUxUX19NQUNIX01QUEFSU0VfSAotI2RlZmluZSBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfTVBQQVJTRV9ICi0KLXN0YXRpYyBpbmxpbmUgaW50IG1wc19vZW1fY2hlY2soc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sIAotCQljaGFyICpwcm9kdWN0aWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2VuZGlmIC8qIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9NUFBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3NjQ2Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfbXBzcGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9NUFNQRUNfSAotI2RlZmluZSBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfTVBTUEVDX0gKLQotI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgMjU2Ci0KLSNpZiBDT05GSUdfQkFTRV9TTUFMTCA9PSAwCi0jZGVmaW5lIE1BWF9NUF9CVVNTRVMgMjU2Ci0jZWxzZQotI2RlZmluZSBNQVhfTVBfQlVTU0VTIDMyCi0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9NUFNQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX3RpbWVyLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkwYjE1OC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiAgTWFjaGluZSBzcGVjaWZpYyBjYWxpYnJhdGVfdHNjKCkgZm9yIGdlbmVyaWMuCi0gKiAgU3BsaXQgb3V0IGZyb20gdGltZXJfdHNjLmMgYnkgT3NhbXUgVG9taXRhIDx0b21pdGFAY2luZXQuY28uanA+Ci0gKi8KLS8qIC0tLS0tLSBDYWxpYnJhdGUgdGhlIFRTQyAtLS0tLS0tIAotICogUmV0dXJuIDJeMzIgKiAoMSAvIChUU0MgY2xvY2tzIHBlciB1c2VjKSkgZm9yIGRvX2Zhc3RfZ2V0dGltZW9mZnNldCgpLgotICogVG9vIG11Y2ggNjQtYml0IGFyaXRobWV0aWMgaGVyZSB0byBkbyB0aGlzIGNsZWFubHkgaW4gQywgYW5kIGZvcgotICogYWNjdXJhY3kncyBzYWtlIHdlIHdhbnQgdG8ga2VlcCB0aGUgb3ZlcmhlYWQgb24gdGhlIENUQyBzcGVha2VyIChjaGFubmVsIDIpCi0gKiBvdXRwdXQgYnVzeSBsb29wIGFzIGxvdyBhcyBwb3NzaWJsZS4gV2UgYXZvaWQgcmVhZGluZyB0aGUgQ1RDIHJlZ2lzdGVycwotICogZGlyZWN0bHkgYmVjYXVzZSBvZiB0aGUgYXdrd2FyZCA4LWJpdCBhY2Nlc3MgbWVjaGFuaXNtIG9mIHRoZSA4MkM1NAotICogZGV2aWNlLgotICovCi0jaWZuZGVmIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9USU1FUl9ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9USU1FUl9ICi0KLSNkZWZpbmUgQ0FMSUJSQVRFX1RJTUVfTVNFQyAzMCAvKiAzMCBtc2VjcyAqLwotI2RlZmluZSBDQUxJQlJBVEVfTEFUQ0gJXAotCSgoQ0xPQ0tfVElDS19SQVRFICogQ0FMSUJSQVRFX1RJTUVfTVNFQyArIDEwMDAvMikvMTAwMCkKLQotc3RhdGljIGlubGluZSB2b2lkIG1hY2hfcHJlcGFyZV9jb3VudGVyKHZvaWQpCi17Ci0gICAgICAgLyogU2V0IHRoZSBHYXRlIGhpZ2gsIGRpc2FibGUgc3BlYWtlciAqLwotCW91dGIoKGluYigweDYxKSAmIH4weDAyKSB8IDB4MDEsIDB4NjEpOwotCi0JLyoKLQkgKiBOb3cgbGV0J3MgdGFrZSBjYXJlIG9mIENUQyBjaGFubmVsIDIKLQkgKgotCSAqIFNldCB0aGUgR2F0ZSBoaWdoLCBwcm9ncmFtIENUQyBjaGFubmVsIDIgZm9yIG1vZGUgMCwKLQkgKiAoaW50ZXJydXB0IG9uIHRlcm1pbmFsIGNvdW50IG1vZGUpLCBiaW5hcnkgY291bnQsCi0JICogbG9hZCA1ICogTEFUQ0ggY291bnQsIChMU0IgYW5kIE1TQikgdG8gYmVnaW4gY291bnRkb3duLgotCSAqCi0JICogU29tZSBkZXZpY2VzIG5lZWQgYSBkZWxheSBoZXJlLgotCSAqLwotCW91dGIoMHhiMCwgMHg0Myk7CQkJLyogYmluYXJ5LCBtb2RlIDAsIExTQi9NU0IsIENoIDIgKi8KLQlvdXRiX3AoQ0FMSUJSQVRFX0xBVENIICYgMHhmZiwgMHg0Mik7CS8qIExTQiBvZiBjb3VudCAqLwotCW91dGJfcChDQUxJQlJBVEVfTEFUQ0ggPj4gOCwgMHg0Mik7ICAgICAgIC8qIE1TQiBvZiBjb3VudCAqLwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFjaF9jb3VudHVwKHVuc2lnbmVkIGxvbmcgKmNvdW50X3ApCi17Ci0JdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7Ci0JZG8gewotCQljb3VudCsrOwotCX0gd2hpbGUgKChpbmJfcCgweDYxKSAmIDB4MjApID09IDApOwotCSpjb3VudF9wID0gY291bnQ7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfVElNRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX3RyYXBzLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfdHJhcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY4Nzc4Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfdHJhcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiAgTWFjaGluZSBzcGVjaWZpYyBOTUkgaGFuZGxpbmcgZm9yIGdlbmVyaWMuCi0gKiAgU3BsaXQgb3V0IGZyb20gdHJhcHMuYyBieSBPc2FtdSBUb21pdGEgPHRvbWl0YUBjaW5ldC5jby5qcD4KLSAqLwotI2lmbmRlZiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfVFJBUFNfSAotI2RlZmluZSBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfVFJBUFNfSAotCi0jaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBnZXRfbm1pX3JlYXNvbih2b2lkKQotewotCXJldHVybiBpbmIoMHg2MSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFzc2VydF9ubWkodm9pZCkKLXsKLQlpbnQgb2xkX3JlZyA9IC0xOwotCi0JaWYgKGRvX2lfaGF2ZV9sb2NrX2Ntb3MoKSkKLQkJb2xkX3JlZyA9IGN1cnJlbnRfbG9ja19jbW9zX3JlZygpOwotCWVsc2UKLQkJbG9ja19jbW9zKDApOyAvKiByZWdpc3RlciBkb2Vzbid0IG1hdHRlciBoZXJlICovCi0Jb3V0YigweDhmLCAweDcwKTsKLQlpbmIoMHg3MSk7CQkvKiBkdW1teSAqLwotCW91dGIoMHgwZiwgMHg3MCk7Ci0JaW5iKDB4NzEpOwkJLyogZHVtbXkgKi8KLQlpZiAob2xkX3JlZyA+PSAwKQotCQlvdXRiKG9sZF9yZWcsIDB4NzApOwotCWVsc2UKLQkJdW5sb2NrX2Ntb3MoKTsKLX0KLQotI2VuZGlmIC8qIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9UUkFQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfd2FrZWNwdS5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxYjgxMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfd2FrZWNwdS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfV0FLRUNQVV9ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfREVGQVVMVF9fTUFDSF9XQUtFQ1BVX0gKLQotLyogCi0gKiBUaGlzIGZpbGUgY29wZXMgd2l0aCBtYWNoaW5lcyB0aGF0IHdha2V1cCBzZWNvbmRhcnkgQ1BVcyBieSB0aGUKLSAqIElOSVQsIElOSVQsIFNUQVJUVVAgc2VxdWVuY2UuCi0gKi8KLQotI2RlZmluZSBXQUtFX1NFQ09OREFSWV9WSUFfSU5JVAotCi0jZGVmaW5lIFRSQU1QT0xJTkVfTE9XIHBoeXNfdG9fdmlydCgweDQ2NykKLSNkZWZpbmUgVFJBTVBPTElORV9ISUdIIHBoeXNfdG9fdmlydCgweDQ2OSkKLQotI2RlZmluZSBib290X2NwdV9hcGljaWQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KGF0b21pY190ICpkZWFzc2VydCkKLXsKLQl3aGlsZSAoIWF0b21pY19yZWFkKGRlYXNzZXJ0KSkKLQkJY3B1X3JlbGF4KCk7Ci0JcmV0dXJuOwotfQotCi0vKiBOb3RoaW5nIHRvIGRvIGZvciBtb3N0IHBsYXRmb3Jtcywgc2luY2UgY2xlYXJlZCBieSB0aGUgSU5JVCBjeWNsZSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYyh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKLXsKLX0KLQotI2lmIEFQSUNfREVCVUcKLSAjZGVmaW5lIGlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKSBfX2lucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKQotI2Vsc2UKLSAjZGVmaW5lIGlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKSB7fQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfV0FLRUNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvZ3Bpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2UwZjc3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX0dQSU9fSAotI2RlZmluZSBBU01fWDg2X19NQUNIX0dFTkVSSUNfX0dQSU9fSAotCi1pbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKLXZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOwotaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwotaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pOwotaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSk7Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+ICAgICAgICAgICAvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvaXJxX3ZlY3RvcnNfbGltaXRzLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzg3MGUxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvaXJxX3ZlY3RvcnNfbGltaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fSVJRX1ZFQ1RPUlNfTElNSVRTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19JUlFfVkVDVE9SU19MSU1JVFNfSAotCi0vKgotICogRm9yIFN1bW1pdCBvciBnZW5lcmljIChpLmUuIGluc3RhbGxlcikga2VybmVscywgd2UgaGF2ZSBsb3RzIG9mIEkvTyBBUElDcywKLSAqIGV2ZW4gd2l0aCB1bmktcHJvYyBrZXJuZWxzLCBzbyB1c2UgYSBiaWcgYXJyYXkuCi0gKgotICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgdGhlIHNhbWUgaW4gYm90aCB0aGUgZ2VuZXJpYyBhbmQgc3VtbWl0IHN1YmFyY2hlcy4KLSAqIENoYW5nZSBvbmUsIGNoYW5nZSAnZW0gYm90aC4KLSAqLwotI2RlZmluZSBOUl9JUlFTCTIyNAotI2RlZmluZSBOUl9JUlFfVkVDVE9SUwkxMDI0Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX0lSUV9WRUNUT1JTX0xJTUlUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwMTBjNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX01BQ0hfQVBJQ19ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fTUFDSF9BUElDX0gKLQotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0KLSNkZWZpbmUgZXNyX2Rpc2FibGUgKGdlbmFwaWMtPkVTUl9ESVNBQkxFKQotI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoZ2VuYXBpYy0+bm9fYmFsYW5jZV9pcnEpCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIChnZW5hcGljLT5pbnRfZGVsaXZlcnlfbW9kZSkKLSNkZWZpbmUgSU5UX0RFU1RfTU9ERSAoZ2VuYXBpYy0+aW50X2Rlc3RfbW9kZSkKLSN1bmRlZiBBUElDX0RFU1RfTE9HSUNBTAotI2RlZmluZSBBUElDX0RFU1RfTE9HSUNBTCAoZ2VuYXBpYy0+YXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsKQotI2RlZmluZSBUQVJHRVRfQ1BVUwkgIChnZW5hcGljLT50YXJnZXRfY3B1cygpKQotI2RlZmluZSBhcGljX2lkX3JlZ2lzdGVyZWQgKGdlbmFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCkKLSNkZWZpbmUgaW5pdF9hcGljX2xkciAoZ2VuYXBpYy0+aW5pdF9hcGljX2xkcikKLSNkZWZpbmUgaW9hcGljX3BoeXNfaWRfbWFwIChnZW5hcGljLT5pb2FwaWNfcGh5c19pZF9tYXApCi0jZGVmaW5lIHNldHVwX2FwaWNfcm91dGluZyAoZ2VuYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKQotI2RlZmluZSBtdWx0aV90aW1lcl9jaGVjayAoZ2VuYXBpYy0+bXVsdGlfdGltZXJfY2hlY2spCi0jZGVmaW5lIGFwaWNpZF90b19ub2RlIChnZW5hcGljLT5hcGljaWRfdG9fbm9kZSkKLSNkZWZpbmUgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkIChnZW5hcGljLT5jcHVfdG9fbG9naWNhbF9hcGljaWQpIAotI2RlZmluZSBjcHVfcHJlc2VudF90b19hcGljaWQgKGdlbmFwaWMtPmNwdV9wcmVzZW50X3RvX2FwaWNpZCkKLSNkZWZpbmUgYXBpY2lkX3RvX2NwdV9wcmVzZW50IChnZW5hcGljLT5hcGljaWRfdG9fY3B1X3ByZXNlbnQpCi0jZGVmaW5lIHNldHVwX3BvcnRpb19yZW1hcCAoZ2VuYXBpYy0+c2V0dXBfcG9ydGlvX3JlbWFwKQotI2RlZmluZSBjaGVja19hcGljaWRfcHJlc2VudCAoZ2VuYXBpYy0+Y2hlY2tfYXBpY2lkX3ByZXNlbnQpCi0jZGVmaW5lIGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpCi0jZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkIChnZW5hcGljLT5jaGVja19hcGljaWRfdXNlZCkKLSNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCi0jZGVmaW5lIGVuYWJsZV9hcGljX21vZGUgKGdlbmFwaWMtPmVuYWJsZV9hcGljX21vZGUpCi0jZGVmaW5lIHBoeXNfcGtnX2lkIChnZW5hcGljLT5waHlzX3BrZ19pZCkKLQotZXh0ZXJuIHZvaWQgZ2VuZXJpY19iaWdzbXBfcHJvYmUodm9pZCk7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpY2RlZi5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWNkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1N2YzOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpY2RlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX01BQ0hfQVBJQ0RFRl9ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fTUFDSF9BUElDREVGX0gKLQotI2lmbmRlZiBBUElDX0RFRklOSVRJT04KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotCi0jZGVmaW5lIEdFVF9BUElDX0lEIChnZW5hcGljLT5nZXRfYXBpY19pZCkKLSNkZWZpbmUgQVBJQ19JRF9NQVNLIChnZW5hcGljLT5hcGljX2lkX21hc2spCi0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fTUFDSF9BUElDREVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3NDMzZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfaXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fTUFDSF9JUElfSAotI2RlZmluZSBBU01fWDg2X19NQUNIX0dFTkVSSUNfX01BQ0hfSVBJX0gKLQotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0KLSNkZWZpbmUgc2VuZF9JUElfbWFzayAoZ2VuYXBpYy0+c2VuZF9JUElfbWFzaykKLSNkZWZpbmUgc2VuZF9JUElfYWxsYnV0c2VsZiAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZikKLSNkZWZpbmUgc2VuZF9JUElfYWxsIChnZW5hcGljLT5zZW5kX0lQSV9hbGwpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX01BQ0hfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfbXBwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTE1NTY0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fTUFDSF9NUFBBUlNFX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19NQUNIX01QUEFSU0VfSAotCi0KLWV4dGVybiBpbnQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKLQkJCSBjaGFyICpwcm9kdWN0aWQpOwotCi1leHRlcm4gaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19NQUNIX01QUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX21wc3BlYy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX21wc3BlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDYxYjE1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHNwZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19NQUNIX01QU1BFQ19ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fTUFDSF9NUFNQRUNfSAotCi0jZGVmaW5lIE1BWF9JUlFfU09VUkNFUyAyNTYKLQotLyogU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzIG5lZWQgbG90cyBvZiBidXMgZW50cmllcy4gKi8KLS8qIE1heGltdW0gMjU2IFBDSSBidXNzZXMsIHBsdXMgMSBJU0EgYnVzIGluIGVhY2ggb2YgNCBjYWJpbmV0cy4gKi8KLSNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNjAKLQotZXh0ZXJuIHZvaWQgbnVtYXFfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKLQkJCQljaGFyICpwcm9kdWN0aWQpOwotI2VuZGlmIC8qIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fTUFDSF9NUFNQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtcmRjMzIxeC9ncGlvLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1yZGMzMjF4L2dwaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiNmNkZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1yZGMzMjF4L2dwaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTUFDSF9SREMzMjFYX19HUElPX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTUFDSF9SREMzMjFYX19HUElPX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi1leHRlcm4gaW50IHJkY19ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiB2b2lkIHJkY19ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotZXh0ZXJuIGludCByZGNfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IHJkY19ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgcmRjX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCk7Ci1leHRlcm4gdm9pZCByZGNfZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOwotZXh0ZXJuIHZvaWQgX19pbml0IHJkYzMyMXhfZ3Bpb19zZXR1cCh2b2lkKTsKLQotLyogV3JhcHBlcnMgZm9yIHRoZSBhcmNoLW5ldXRyYWwgR1BJTyBBUEkgKi8KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXJldHVybiByZGNfZ3Bpb19yZXF1ZXN0KGdwaW8sIGxhYmVsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JcmRjX2dwaW9fZnJlZShncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gcmRjX2dwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCXJldHVybiByZGNfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gcmRjX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCXJkY19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGdwaW87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxOwotfQotCi0vKiBGb3IgY2Fuc2xlZXAgKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19NQUNIX1JEQzMyMVhfX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hdGhfZW11LmggYi9pbmNsdWRlL2FzbS14ODYvbWF0aF9lbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2OGQ4ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWF0aF9lbXUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTUFUSF9FTVVfSAotI2RlZmluZSBBU01fWDg2X19NQVRIX0VNVV9ICi0KLS8qIFRoaXMgc3RydWN0dXJlIG1hdGNoZXMgdGhlIGxheW91dCBvZiB0aGUgZGF0YSBzYXZlZCB0byB0aGUgc3RhY2sKLSAgIGZvbGxvd2luZyBhIGRldmljZS1ub3QtcHJlc2VudCBpbnRlcnJ1cHQsIHBhcnQgb2YgaXQgc2F2ZWQKLSAgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIDgwMzg2LzgwNDg2LgotICAgKi8KLXN0cnVjdCBpbmZvIHsKLQlsb25nIF9fX29yaWdfZWlwOwotCWxvbmcgX19fZWJ4OwotCWxvbmcgX19fZWN4OwotCWxvbmcgX19fZWR4OwotCWxvbmcgX19fZXNpOwotCWxvbmcgX19fZWRpOwotCWxvbmcgX19fZWJwOwotCWxvbmcgX19fZWF4OwotCWxvbmcgX19fZHM7Ci0JbG9uZyBfX19lczsKLQlsb25nIF9fX2ZzOwotCWxvbmcgX19fb3JpZ19lYXg7Ci0JbG9uZyBfX19laXA7Ci0JbG9uZyBfX19jczsKLQlsb25nIF9fX2VmbGFnczsKLQlsb25nIF9fX2VzcDsKLQlsb25nIF9fX3NzOwotCWxvbmcgX19fdm04Nl9lczsgLyogVGhpcyBhbmQgdGhlIGZvbGxvd2luZyBvbmx5IGluIHZtODYgbW9kZSAqLwotCWxvbmcgX19fdm04Nl9kczsKLQlsb25nIF9fX3ZtODZfZnM7Ci0JbG9uZyBfX192bTg2X2dzOwotfTsKLSNlbmRpZiAvKiBBU01fWDg2X19NQVRIX0VNVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYzE0NjgxOHJ0Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTk1ZjMzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYzE0NjgxOHJ0Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgotICovCi0jaWZuZGVmIEFTTV9YODZfX01DMTQ2ODE4UlRDX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTUMxNDY4MThSVENfSAotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotCi0jaWZuZGVmIFJUQ19QT1JUCi0jZGVmaW5lIFJUQ19QT1JUKHgpCSgweDcwICsgKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCS8qIFJUQyBvcGVyYXRlcyBpbiBiaW5hcnkgbW9kZSAqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmIGRlZmluZWQoX19IQVZFX0FSQ0hfQ01QWENIRykKLS8qCi0gKiBUaGlzIGxvY2sgcHJvdmlkZXMgbm1pIGFjY2VzcyB0byB0aGUgQ01PUy9SVEMgcmVnaXN0ZXJzLiAgSXQgaGFzIHNvbWUKLSAqIHNwZWNpYWwgcHJvcGVydGllcy4gIEl0IGlzIG93bmVkIGJ5IGEgQ1BVIGFuZCBzdG9yZXMgdGhlIGluZGV4IHJlZ2lzdGVyCi0gKiBjdXJyZW50bHkgYmVpbmcgYWNjZXNzZWQgKGlmIG93bmVkKS4gIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCBpdCB3b3JrcwotICogbGlrZSBhIG5vcm1hbCBsb2NrIChub3JtYWxseSkuICBIb3dldmVyLCBpbiBhbiBOTUksIHRoZSBOTUkgY29kZSB3aWxsCi0gKiBmaXJzdCBjaGVjayB0byBzZWUgaWYgaXRzIENQVSBvd25zIHRoZSBsb2NrLCBtZWFuaW5nIHRoYXQgdGhlIE5NSQotICogaW50ZXJydXB0ZWQgZHVyaW5nIHRoZSByZWFkL3dyaXRlIG9mIHRoZSBkZXZpY2UuICBJZiBpdCBkb2VzLCBpdCBnb2VzIGFoZWFkCi0gKiBhbmQgcGVyZm9ybXMgdGhlIGFjY2VzcyBhbmQgdGhlbiByZXN0b3JlcyB0aGUgaW5kZXggcmVnaXN0ZXIuICBJZiBpdCBkb2VzCi0gKiBub3QsIGl0IGxvY2tzIG5vcm1hbGx5LgotICoKLSAqIE5vdGUgdGhhdCBzaW5jZSB3ZSBhcmUgd29ya2luZyB3aXRoIE5NSXMsIHdlIG5lZWQgdGhpcyBsb2NrIGV2ZW4gaW4KLSAqIGEgbm9uLVNNUCBtYWNoaW5lIGp1c3QgdG8gbWFyayB0aGF0IHRoZSBsb2NrIGlzIG93bmVkLgotICoKLSAqIFRoaXMgb25seSB3b3JrcyB3aXRoIGNvbXBhcmUtYW5kLXN3YXAuICBUaGVyZSBpcyBubyBvdGhlciB3YXkgdG8KLSAqIGF0b21pY2FsbHkgY2xhaW0gdGhlIGxvY2sgYW5kIHNldCB0aGUgb3duZXIuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLWV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jazsKLQotLyoKLSAqIEFsbCBvZiB0aGVzZSBiZWxvdyBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgb2ZmLCBwcmVlbXB0Ci0gKiBkaXNhYmxlZCwgZXRjLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2Ntb3ModW5zaWduZWQgY2hhciByZWcpCi17Ci0JdW5zaWduZWQgbG9uZyBuZXc7Ci0JbmV3ID0gKChzbXBfcHJvY2Vzc29yX2lkKCkgKyAxKSA8PCA4KSB8IHJlZzsKLQlmb3IgKDs7KSB7Ci0JCWlmIChjbW9zX2xvY2spIHsKLQkJCWNwdV9yZWxheCgpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKF9fY21weGNoZygmY21vc19sb2NrLCAwLCBuZXcsIHNpemVvZihjbW9zX2xvY2spKSA9PSAwKQotCQkJcmV0dXJuOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jbW9zKHZvaWQpCi17Ci0JY21vc19sb2NrID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG9faV9oYXZlX2xvY2tfY21vcyh2b2lkKQotewotCXJldHVybiAoY21vc19sb2NrID4+IDgpID09IChzbXBfcHJvY2Vzc29yX2lkKCkgKyAxKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGN1cnJlbnRfbG9ja19jbW9zX3JlZyh2b2lkKQotewotCXJldHVybiBjbW9zX2xvY2sgJiAweGZmOwotfQotCi0jZGVmaW5lIGxvY2tfY21vc19wcmVmaXgocmVnKQkJCVwKLQlkbyB7CQkJCQlcCi0JCXVuc2lnbmVkIGxvbmcgY21vc19mbGFnczsJXAotCQlsb2NhbF9pcnFfc2F2ZShjbW9zX2ZsYWdzKTsJXAotCQlsb2NrX2Ntb3MocmVnKQotCi0jZGVmaW5lIGxvY2tfY21vc19zdWZmaXgocmVnKQkJCVwKLQl1bmxvY2tfY21vcygpOwkJCQlcCi0JbG9jYWxfaXJxX3Jlc3RvcmUoY21vc19mbGFncyk7CQlcCi0JfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIGxvY2tfY21vc19wcmVmaXgocmVnKSBkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgbG9ja19jbW9zX3N1ZmZpeChyZWcpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBsb2NrX2Ntb3MocmVnKQotI2RlZmluZSB1bmxvY2tfY21vcygpCi0jZGVmaW5lIGRvX2lfaGF2ZV9sb2NrX2Ntb3MoKSAwCi0jZGVmaW5lIGN1cnJlbnRfbG9ja19jbW9zX3JlZygpIDAKLSNlbmRpZgotCi0vKgotICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQotICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgotICovCi0jZGVmaW5lIENNT1NfUkVBRChhZGRyKSBydGNfY21vc19yZWFkKGFkZHIpCi0jZGVmaW5lIENNT1NfV1JJVEUodmFsLCBhZGRyKSBydGNfY21vc193cml0ZSh2YWwsIGFkZHIpCi11bnNpZ25lZCBjaGFyIHJ0Y19jbW9zX3JlYWQodW5zaWduZWQgY2hhciBhZGRyKTsKLXZvaWQgcnRjX2Ntb3Nfd3JpdGUodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGNoYXIgYWRkcik7Ci0KLWV4dGVybiBpbnQgbWFjaF9zZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1hY2hfZ2V0X2Ntb3NfdGltZSh2b2lkKTsKLQotI2RlZmluZSBSVENfSVJRIDgKLQotI2VuZGlmIC8qIEFTTV9YODZfX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tY2EuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tY2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkMWVkMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWNhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0KLS8qIFBsYXRmb3JtIHNwZWNpZmljIE1DQSBkZWZpbmVzICovCi0jaWZuZGVmIEFTTV9YODZfX01DQV9ICi0jZGVmaW5lIEFTTV9YODZfX01DQV9ICi0KLS8qIE1heGltYWwgbnVtYmVyIG9mIE1DQSBzbG90cyAtIGFjdHVhbGx5LCBzb21lIG1hY2hpbmVzIGhhdmUgbGVzcywgYnV0Ci0gKiB0aGV5IGFsbCBoYXZlIHN1ZmZpY2llbnQgbnVtYmVyIG9mIFBPUyByZWdpc3RlcnMgdG8gY292ZXIgOC4KLSAqLwotI2RlZmluZSBNQ0FfTUFYX1NMT1RfTlIgIDgKLQotLyogTW9zdCBtYWNoaW5lcyBoYXZlIG9ubHkgb25lIE1DQSBidXMuICBUaGUgb25seSBtdWx0aXBsZSBidXMgbWFjaGluZXMKLSAqIEkga25vdyBoYXZlIGF0IG1vc3QgdHdvICovCi0jZGVmaW5lIE1BWF9NQ0FfQlVTU0VTIDIKLQotI2RlZmluZSBNQ0FfUFJJTUFSWV9CVVMJCTAKLSNkZWZpbmUgTUNBX1NFQ09OREFSWV9CVVMJMQotCi0vKiBEdW1teSBzbG90IG51bWJlcnMgb24gcHJpbWFyeSBNQ0EgZm9yIGludGVncmF0ZWQgZnVuY3Rpb25zICovCi0jZGVmaW5lIE1DQV9JTlRFR1NDU0kJKE1DQV9NQVhfU0xPVF9OUikKLSNkZWZpbmUgTUNBX0lOVEVHVklERU8JKE1DQV9NQVhfU0xPVF9OUisxKQotI2RlZmluZSBNQ0FfTU9USEVSQk9BUkQgKE1DQV9NQVhfU0xPVF9OUisyKQotCi0vKiBEdW1teSBQT1MgdmFsdWVzIGZvciBpbnRlZ3JhdGVkIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBNQ0FfRFVNTVlfUE9TX1NUQVJUCTB4MTAwMDAKLSNkZWZpbmUgTUNBX0lOVEVHU0NTSV9QT1MJKE1DQV9EVU1NWV9QT1NfU1RBUlQrMSkKLSNkZWZpbmUgTUNBX0lOVEVHVklERU9fUE9TCShNQ0FfRFVNTVlfUE9TX1NUQVJUKzIpCi0jZGVmaW5lIE1DQV9NT1RIRVJCT0FSRF9QT1MJKE1DQV9EVU1NWV9QT1NfU1RBUlQrMykKLQotLyogTUNBIHJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIE1DQV9NT1RIRVJCT0FSRF9TRVRVUF9SRUcJMHg5NAotI2RlZmluZSBNQ0FfQURBUFRFUl9TRVRVUF9SRUcJCTB4OTYKLSNkZWZpbmUgTUNBX1BPU19SRUcobikJCQkoMHgxMDArKG4pKQotCi0jZGVmaW5lIE1DQV9FTkFCTEVECTB4MDEJLyogUE9TIDIsIHNldCBpZiBhZGFwdGVyIGVuYWJsZWQgKi8KLQotLyogTWF4IG51bWJlciBvZiBhZGFwdGVycywgaW5jbHVkaW5nIGJvdGggc2xvdHMgYW5kIHZhcmlvdXMgaW50ZWdyYXRlZAotICogdGhpbmdzLgotICovCi0jZGVmaW5lIE1DQV9OVU1BREFQVEVSUyAoTUNBX01BWF9TTE9UX05SKzMpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19NQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21jYV9kbWEuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tY2FfZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZjIyYmUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21jYV9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01DQV9ETUFfSAotI2RlZmluZSBBU01fWDg2X19NQ0FfRE1BX0gKLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotCi0vKgotICogTWljcm9jaGFubmVsIHNwZWNpZmljIERNQSBzdHVmZi4gIERNQSBvbiBhbiBNQ0EgbWFjaGluZSBpcyBmYWlybHkgc2ltaWxhciB0bwotICogICBzdGFuZGFyZCBQQyBkbWEsIGJ1dCBpdCBjZXJ0YWlubHkgaGFzIGl0cyBxdWlya3MuICBETUEgcmVnaXN0ZXIgYWRkcmVzc2VzCi0gKiAgIGFyZSBpbiBhIGRpZmZlcmVudCBwbGFjZSBhbmQgdGhlcmUgYXJlIHNvbWUgYWRkZWQgZnVuY3Rpb25zLiAgTW9zdCBvZiB0aGlzCi0gKiAgIHNob3VsZCBiZSBwcmV0dHkgb2J2aW91cyBvbiBpbnNwZWN0aW9uLiAgTm90ZSB0aGF0IHRoZSB1c2VyIG11c3QgZGl2aWRlCi0gKiAgIGNvdW50IGJ5IDIgd2hlbiB1c2luZyAxNi1iaXQgZG1hOyB0aGF0IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucy4KLSAqCi0gKiBSYW1lbiBOb29kbGVzIGFyZSB5dW1teS4KLSAqCi0gKiAgMTk5OCBUeW1tIFR3aWxsbWFuIDx0eW1tQGNvbXB1dGVyLm9yZz4KLSAqLwotCi0vKgotICogUmVnaXN0ZXJzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIERNQSBjb250cm9sbGVyOyBGTiBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0ZXIKLSAqICAgKHRlbGwgdGhlIGNvbnRyb2xsZXIgd2hhdCB0byBkbykgYW5kIEVYRSBpcyB0aGUgZXhlY3V0aW9uIHJlZ2lzdGVyIChob3cKLSAqICAgdG8gZG8gaXQpCi0gKi8KLQotI2RlZmluZSBNQ0FfRE1BX1JFR19GTiAgMHgxOAotI2RlZmluZSBNQ0FfRE1BX1JFR19FWEUgMHgxQQotCi0vKgotICogRnVuY3Rpb25zIHRoYXQgdGhlIERNQSBjb250cm9sbGVyIGNhbiBkbwotICovCi0KLSNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfSU8gICAgICAgMHgwMAotI2RlZmluZSBNQ0FfRE1BX0ZOX1NFVF9BRERSICAgICAweDIwCi0jZGVmaW5lIE1DQV9ETUFfRk5fR0VUX0FERFIgICAgIDB4MzAKLSNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfQ09VTlQgICAgMHg0MAotI2RlZmluZSBNQ0FfRE1BX0ZOX0dFVF9DT1VOVCAgICAweDUwCi0jZGVmaW5lIE1DQV9ETUFfRk5fR0VUX1NUQVRVUyAgIDB4NjAKLSNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfTU9ERSAgICAgMHg3MAotI2RlZmluZSBNQ0FfRE1BX0ZOX1NFVF9BUkJVUyAgICAweDgwCi0jZGVmaW5lIE1DQV9ETUFfRk5fTUFTSyAgICAgICAgIDB4OTAKLSNkZWZpbmUgTUNBX0RNQV9GTl9SRVNFVF9NQVNLICAgMHhBMAotI2RlZmluZSBNQ0FfRE1BX0ZOX01BU1RFUl9DTEVBUiAweEQwCi0KLS8qCi0gKiBNb2RlcyAodXNlZCBieSBzZXR0aW5nIE1DQV9ETUFfRk5fTU9ERSBpbiB0aGUgZnVuY3Rpb24gcmVnaXN0ZXIpCi0gKgotICogTm90ZSB0aGF0IHRoZSBNT0RFX1JFQUQgaXMgcmVhZCBmcm9tIG1lbW9yeSAod3JpdGUgdG8gZGV2aWNlKSwgYW5kCi0gKiAgIE1PREVfV1JJVEUgaXMgdmljZS12ZXJzYS4KLSAqLwotCi0jZGVmaW5lIE1DQV9ETUFfTU9ERV9YRkVSICAweDA0ICAvKiByZWFkIGJ5IGRlZmF1bHQgKi8KLSNkZWZpbmUgTUNBX0RNQV9NT0RFX1JFQUQgIDB4MDQgIC8qIHNhbWUgYXMgWEZFUiAqLwotI2RlZmluZSBNQ0FfRE1BX01PREVfV1JJVEUgMHgwOCAgLyogT1Igd2l0aCBNT0RFX1hGRVIgdG8gdXNlICovCi0jZGVmaW5lIE1DQV9ETUFfTU9ERV9JTyAgICAweDAxICAvKiBETUEgZnJvbSBJTyByZWdpc3RlciAqLwotI2RlZmluZSBNQ0FfRE1BX01PREVfMTYgICAgMHg0MCAgLyogMTYgYml0IHhmZXJzICovCi0KLQotLyoqCi0gKgltY2FfZW5hYmxlX2RtYQktCWNoYW5uZWwgdG8gZW5hYmxlIERNQSBvbgotICoJQGRtYW5yOiBETUEgY2hhbm5lbAotICoKLSAqCUVuYWJsZSB0aGUgTUNBIGJ1cyBETUEgb24gYSBjaGFubmVsLiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbQotICoJSVJRIGNvbnRleHQuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG1jYV9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQlvdXRiKE1DQV9ETUFfRk5fUkVTRVRfTUFTSyB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7Ci19Ci0KLS8qKgotICoJbWNhX2Rpc2JsZV9kbWEJLQljaGFubmVsIHRvIGRpc2FibGUgRE1BIG9uCi0gKglAZG1hbnI6IERNQSBjaGFubmVsCi0gKgotICoJRW5hYmxlIHRoZSBNQ0EgYnVzIERNQSBvbiBhIGNoYW5uZWwuIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tCi0gKglJUlEgY29udGV4dC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWNhX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQlvdXRiKE1DQV9ETUFfRk5fTUFTSyB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7Ci19Ci0KLS8qKgotICoJbWNhX3NldF9kbWFfYWRkciAtCWxvYWQgYSAyNGJpdCBETUEgYWRkcmVzcwotICoJQGRtYW5yOiBETUEgY2hhbm5lbAotICoJQGE6IDI0Yml0IGJ1cyBhZGRyZXNzCi0gKgotICoJTG9hZCB0aGUgYWRkcmVzcyByZWdpc3RlciBpbiB0aGUgRE1BIGNvbnRyb2xsZXIuIFRoaXMgaGFzIGEgMjRiaXQKLSAqCWxpbWl0YXRpb24gKDE2TWIpLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtY2Ffc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCi17Ci0Jb3V0YihNQ0FfRE1BX0ZOX1NFVF9BRERSIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKLQlvdXRiKGEgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOwotCW91dGIoKGEgPj4gOCkgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOwotCW91dGIoKGEgPj4gMTYpICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKLX0KLQotLyoqCi0gKgltY2FfZ2V0X2RtYV9hZGRyIC0JbG9hZCBhIDI0Yml0IERNQSBhZGRyZXNzCi0gKglAZG1hbnI6IERNQSBjaGFubmVsCi0gKgotICoJUmVhZCB0aGUgYWRkcmVzcyByZWdpc3RlciBpbiB0aGUgRE1BIGNvbnRyb2xsZXIuIFRoaXMgaGFzIGEgMjRiaXQKLSAqCWxpbWl0YXRpb24gKDE2TWIpLiBUaGUgcmV0dXJuIGlzIGEgYnVzIGFkZHJlc3MuCi0gKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWNhX2dldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIpCi17Ci0JdW5zaWduZWQgaW50IGFkZHI7Ci0KLQlvdXRiKE1DQV9ETUFfRk5fR0VUX0FERFIgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOwotCWFkZHIgPSBpbmIoTUNBX0RNQV9SRUdfRVhFKTsKLQlhZGRyIHw9IGluYihNQ0FfRE1BX1JFR19FWEUpIDw8IDg7Ci0JYWRkciB8PSBpbmIoTUNBX0RNQV9SRUdfRVhFKSA8PCAxNjsKLQotCXJldHVybiBhZGRyOwotfQotCi0vKioKLSAqCW1jYV9zZXRfZG1hX2NvdW50IC0JbG9hZCBhIDE2Yml0IHRyYW5zZmVyIGNvdW50Ci0gKglAZG1hbnI6IERNQSBjaGFubmVsCi0gKglAY291bnQ6IGNvdW50Ci0gKgotICoJU2V0IHRoZSBETUEgY291bnQgZm9yIHRoaXMgY2hhbm5lbC4gVGhpcyBjYW4gYmUgdXAgdG8gNjRLYnl0ZXMuCi0gKglTZXR0aW5nIGEgY291bnQgb2YgemVybyB3aWxsIG5vdCBkbyB3aGF0IHlvdSBleHBlY3QuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG1jYV9zZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQotewotCWNvdW50LS07ICAvKiB0cmFuc2ZlcnMgb25lIG1vcmUgdGhhbiBjb3VudCAtLSBjb3JyZWN0IGZvciB0aGlzICovCi0KLQlvdXRiKE1DQV9ETUFfRk5fU0VUX0NPVU5UIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKLQlvdXRiKGNvdW50ICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKLQlvdXRiKChjb3VudCA+PiA4KSAmIDB4ZmYsIE1DQV9ETUFfUkVHX0VYRSk7Ci19Ci0KLS8qKgotICoJbWNhX2dldF9kbWFfcmVzaWR1ZSAtCWdldCB0aGUgcmVtYWluaW5nIGJ5dGVzIHRvIHRyYW5zZmVyCi0gKglAZG1hbnI6IERNQSBjaGFubmVsCi0gKgotICoJVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB0cmFuc2ZlcgotICoJb24gdGhpcyBETUEgY2hhbm5lbC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtY2FfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQl1bnNpZ25lZCBzaG9ydCBjb3VudDsKLQotCW91dGIoTUNBX0RNQV9GTl9HRVRfQ09VTlQgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOwotCWNvdW50ID0gMSArIGluYihNQ0FfRE1BX1JFR19FWEUpOwotCWNvdW50ICs9IGluYihNQ0FfRE1BX1JFR19FWEUpIDw8IDg7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qKgotICoJbWNhX3NldF9kbWFfaW8gLQlzZXQgdGhlIHBvcnQgZm9yIGFuIEkvTyB0cmFuc2ZlcgotICoJQGRtYW5yOiBETUEgY2hhbm5lbAotICoJQGlvX2FkZHI6IGFuIEkvTyBwb3J0IG51bWJlcgotICoKLSAqCVVubGlrZSB0aGUgSVNBIGJ1cyBETUEgY29udHJvbGxlcnMgdGhlIERNQSBvbiBNQ0EgYnVzIGNhbiB0cmFuc2ZlcgotICoJd2l0aCBhbiBJL08gcG9ydCB0YXJnZXQuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG1jYV9zZXRfZG1hX2lvKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGlvX2FkZHIpCi17Ci0JLyoKLQkgKiBETUEgZnJvbSBhIHBvcnQgYWRkcmVzcyAtLSBzZXQgdGhlIGlvIGFkZHJlc3MKLQkgKi8KLQotCW91dGIoTUNBX0RNQV9GTl9TRVRfSU8gfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOwotCW91dGIoaW9fYWRkciAmIDB4ZmYsIE1DQV9ETUFfUkVHX0VYRSk7Ci0Jb3V0YigoaW9fYWRkciA+PiAgOCkgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOwotfQotCi0vKioKLSAqCW1jYV9zZXRfZG1hX21vZGUgLQlzZXQgdGhlIERNQSBtb2RlCi0gKglAZG1hbnI6IERNQSBjaGFubmVsCi0gKglAbW9kZTogbW9kZSB0byBzZXQKLSAqCi0gKglUaGUgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydHMgc2V2ZXJhbCBtb2Rlcy4gVGhlIG1vZGUgdmFsdWVzIHlvdSBjYW4KLSAqCXNldCBhcmUtCi0gKgotICoJJU1DQV9ETUFfTU9ERV9SRUFEIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBETUEgZGV2aWNlLgotICoKLSAqCSVNQ0FfRE1BX01PREVfV1JJVEUgdG8gd3JpdGluZyB0byB0aGUgRE1BIGRldmljZS4KLSAqCi0gKgklTUNBX0RNQV9NT0RFX0lPIHRvIGRvIERNQSB0byBvciBmcm9tIGFuIEkvTyBwb3J0LgotICoKLSAqCSVNQ0FfRE1BX01PREVfMTYgdG8gZG8gMTZiaXQgdHJhbnNmZXJzLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtY2Ffc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IG1vZGUpCi17Ci0Jb3V0YihNQ0FfRE1BX0ZOX1NFVF9NT0RFIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKLQlvdXRiKG1vZGUsIE1DQV9ETUFfUkVHX0VYRSk7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19NQ0FfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tY2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2MTMzZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQ0VfSAotI2RlZmluZSBBU01fWDg2X19NQ0VfSAotCi0jaWZkZWYgX194ODZfNjRfXwotCi0jaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0vKgotICogTWFjaGluZSBDaGVjayBzdXBwb3J0IGZvciB4ODYKLSAqLwotCi0jZGVmaW5lIE1DR19DVExfUAkgKDFVTDw8OCkgICAvKiBNQ0dfQ0FQIHJlZ2lzdGVyIGF2YWlsYWJsZSAqLwotCi0jZGVmaW5lIE1DR19TVEFUVVNfUklQViAgKDFVTDw8MCkgICAvKiByZXN0YXJ0IGlwIHZhbGlkICovCi0jZGVmaW5lIE1DR19TVEFUVVNfRUlQViAgKDFVTDw8MSkgICAvKiBpcCBwb2ludHMgdG8gY29ycmVjdCBpbnN0cnVjdGlvbiAqLwotI2RlZmluZSBNQ0dfU1RBVFVTX01DSVAgICgxVUw8PDIpICAgLyogbWFjaGluZSBjaGVjayBpbiBwcm9ncmVzcyAqLwotCi0jZGVmaW5lIE1DSV9TVEFUVVNfVkFMICAgKDFVTDw8NjMpICAvKiB2YWxpZCBlcnJvciAqLwotI2RlZmluZSBNQ0lfU1RBVFVTX09WRVIgICgxVUw8PDYyKSAgLyogcHJldmlvdXMgZXJyb3JzIGxvc3QgKi8KLSNkZWZpbmUgTUNJX1NUQVRVU19VQyAgICAoMVVMPDw2MSkgIC8qIHVuY29ycmVjdGVkIGVycm9yICovCi0jZGVmaW5lIE1DSV9TVEFUVVNfRU4gICAgKDFVTDw8NjApICAvKiBlcnJvciBlbmFibGVkICovCi0jZGVmaW5lIE1DSV9TVEFUVVNfTUlTQ1YgKDFVTDw8NTkpICAvKiBtaXNjIGVycm9yIHJlZy4gdmFsaWQgKi8KLSNkZWZpbmUgTUNJX1NUQVRVU19BRERSViAoMVVMPDw1OCkgIC8qIGFkZHIgcmVnLiB2YWxpZCAqLwotI2RlZmluZSBNQ0lfU1RBVFVTX1BDQyAgICgxVUw8PDU3KSAgLyogcHJvY2Vzc29yIGNvbnRleHQgY29ycnVwdCAqLwotCi0vKiBGaWVsZHMgYXJlIHplcm8gd2hlbiBub3QgYXZhaWxhYmxlICovCi1zdHJ1Y3QgbWNlIHsKLQlfX3U2NCBzdGF0dXM7Ci0JX191NjQgbWlzYzsKLQlfX3U2NCBhZGRyOwotCV9fdTY0IG1jZ3N0YXR1czsKLQlfX3U2NCBpcDsKLQlfX3U2NCB0c2M7CS8qIGNwdSB0aW1lIHN0YW1wIGNvdW50ZXIgKi8KLQlfX3U2NCByZXMxOwkvKiBmb3IgZnV0dXJlIGV4dGVuc2lvbiAqLwotCV9fdTY0IHJlczI7CS8qIGRpdG8uICovCi0JX191OCAgY3M7CQkvKiBjb2RlIHNlZ21lbnQgKi8KLQlfX3U4ICBiYW5rOwkvKiBtYWNoaW5lIGNoZWNrIGJhbmsgKi8KLQlfX3U4ICBjcHU7CS8qIGNwdSB0aGF0IHJhaXNlZCB0aGUgZXJyb3IgKi8KLQlfX3U4ICBmaW5pc2hlZDsgICAvKiBlbnRyeSBpcyB2YWxpZCAqLwotCV9fdTMyIHBhZDsKLX07Ci0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBNQ0UgbG9nLiAgQWxzbwotICogY2FycmllcyBhIHNpZ25hdHVyZSB0byBtYWtlIGl0IGVhc2llciB0byBmaW5kIGZyb20gZXh0ZXJuYWwKLSAqIGRlYnVnZ2luZyB0b29scy4gIEVhY2ggZW50cnkgaXMgb25seSB2YWxpZCB3aGVuIGl0cyBmaW5pc2hlZCBmbGFnCi0gKiBpcyBzZXQuCi0gKi8KLQotI2RlZmluZSBNQ0VfTE9HX0xFTiAzMgotCi1zdHJ1Y3QgbWNlX2xvZyB7Ci0JY2hhciBzaWduYXR1cmVbMTJdOyAvKiAiTUFDSElORUNIRUNLIiAqLwotCXVuc2lnbmVkIGxlbjsJICAgIC8qID0gTUNFX0xPR19MRU4gKi8KLQl1bnNpZ25lZCBuZXh0OwotCXVuc2lnbmVkIGZsYWdzOwotCXVuc2lnbmVkIHBhZDA7Ci0Jc3RydWN0IG1jZSBlbnRyeVtNQ0VfTE9HX0xFTl07Ci19OwotCi0jZGVmaW5lIE1DRV9PVkVSRkxPVyAwCQkvKiBiaXQgMCBpbiBmbGFncyBtZWFucyBvdmVyZmxvdyAqLwotCi0jZGVmaW5lIE1DRV9MT0dfU0lHTkFUVVJFCSJNQUNISU5FQ0hFQ0siCi0KLSNkZWZpbmUgTUNFX0dFVF9SRUNPUkRfTEVOICAgX0lPUignTScsIDEsIGludCkKLSNkZWZpbmUgTUNFX0dFVF9MT0dfTEVOICAgICAgX0lPUignTScsIDIsIGludCkKLSNkZWZpbmUgTUNFX0dFVENMRUFSX0ZMQUdTICAgX0lPUignTScsIDMsIGludCkKLQotLyogU29mdHdhcmUgZGVmaW5lZCBiYW5rcyAqLwotI2RlZmluZSBNQ0VfRVhURU5ERURfQkFOSwkxMjgKLSNkZWZpbmUgTUNFX1RIRVJNQUxfQkFOSwlNQ0VfRVhURU5ERURfQkFOSyArIDAKLQotI2RlZmluZSBLOF9NQ0VfVEhSRVNIT0xEX0JBU0UgICAgICAoTUNFX0VYVEVOREVEX0JBTksgKyAxKSAgICAgIC8qIE1DRV9BTUQgKi8KLSNkZWZpbmUgSzhfTUNFX1RIUkVTSE9MRF9CQU5LXzAgICAgKE1DRV9USFJFU0hPTERfQkFTRSArIDAgKiA5KQotI2RlZmluZSBLOF9NQ0VfVEhSRVNIT0xEX0JBTktfMSAgICAoTUNFX1RIUkVTSE9MRF9CQVNFICsgMSAqIDkpCi0jZGVmaW5lIEs4X01DRV9USFJFU0hPTERfQkFOS18yICAgIChNQ0VfVEhSRVNIT0xEX0JBU0UgKyAyICogOSkKLSNkZWZpbmUgSzhfTUNFX1RIUkVTSE9MRF9CQU5LXzMgICAgKE1DRV9USFJFU0hPTERfQkFTRSArIDMgKiA5KQotI2RlZmluZSBLOF9NQ0VfVEhSRVNIT0xEX0JBTktfNCAgICAoTUNFX1RIUkVTSE9MRF9CQVNFICsgNCAqIDkpCi0jZGVmaW5lIEs4X01DRV9USFJFU0hPTERfQkFOS181ICAgIChNQ0VfVEhSRVNIT0xEX0JBU0UgKyA1ICogOSkKLSNkZWZpbmUgSzhfTUNFX1RIUkVTSE9MRF9EUkFNX0VDQyAgKE1DRV9USFJFU0hPTERfQkFOS180ICsgMCkKLQotI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiBpbnQgbWNlX2Rpc2FibGVkOwotI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi12b2lkIG1jZV9sb2coc3RydWN0IG1jZSAqbSk7Ci1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IHN5c19kZXZpY2UsIGRldmljZV9tY2UpOwotZXh0ZXJuIHZvaWQgKCp0aHJlc2hvbGRfY3B1X2NhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGFjdGlvbiwgdW5zaWduZWQgaW50IGNwdSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAotdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKSB7IH0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0VfQU1ECi12b2lkIG1jZV9hbWRfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG1jZV9hbWRfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykgeyB9Ci0jZW5kaWYKLQotdm9pZCBtY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KHVuc2lnbmVkIGludCBjcHUsIF9fdTY0IHN0YXR1cyk7Ci0KLWV4dGVybiBhdG9taWNfdCBtY2VfZW50cnk7Ci0KLWV4dGVybiB2b2lkIGRvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1leHRlcm4gaW50IG1jZV9ub3RpZnlfdXNlcih2b2lkKTsKLQotI2VuZGlmIC8qICFDT05GSUdfWDg2XzMyICovCi0KLQotCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLWV4dGVybiB2b2lkIG1jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci0jZWxzZQotI2RlZmluZSBtY2hlY2tfaW5pdChjKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLWV4dGVybiB2b2lkIHN0b3BfbWNlKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVzdGFydF9tY2Uodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19NQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21pY3JvY29kZS5oIGIvaW5jbHVkZS9hc20teDg2L21pY3JvY29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmM3OTNiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9taWNyb2NvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTUlDUk9DT0RFX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTUlDUk9DT0RFX0gKLQotc3RydWN0IGNwdV9zaWduYXR1cmUgewotCXVuc2lnbmVkIGludCBzaWc7Ci0JdW5zaWduZWQgaW50IHBmOwotCXVuc2lnbmVkIGludCByZXY7Ci19OwotCi1zdHJ1Y3QgZGV2aWNlOwotCi1zdHJ1Y3QgbWljcm9jb2RlX29wcyB7Ci0JaW50ICAoKnJlcXVlc3RfbWljcm9jb2RlX3VzZXIpIChpbnQgY3B1LCBjb25zdCB2b2lkIF9fdXNlciAqYnVmLCBzaXplX3Qgc2l6ZSk7Ci0JaW50ICAoKnJlcXVlc3RfbWljcm9jb2RlX2Z3KSAoaW50IGNwdSwgc3RydWN0IGRldmljZSAqZGV2aWNlKTsKLQotCXZvaWQgKCphcHBseV9taWNyb2NvZGUpIChpbnQgY3B1KTsKLQotCWludCAgKCpjb2xsZWN0X2NwdV9pbmZvKSAoaW50IGNwdSwgc3RydWN0IGNwdV9zaWduYXR1cmUgKmNzaWcpOwotCXZvaWQgKCptaWNyb2NvZGVfZmluaV9jcHUpIChpbnQgY3B1KTsKLX07Ci0KLXN0cnVjdCB1Y29kZV9jcHVfaW5mbyB7Ci0Jc3RydWN0IGNwdV9zaWduYXR1cmUgY3B1X3NpZzsKLQlpbnQgdmFsaWQ7Ci0Jdm9pZCAqbWM7Ci19OwotZXh0ZXJuIHN0cnVjdCB1Y29kZV9jcHVfaW5mbyB1Y29kZV9jcHVfaW5mb1tdOwotCi0jaWZkZWYgQ09ORklHX01JQ1JPQ09ERV9JTlRFTAotZXh0ZXJuIHN0cnVjdCBtaWNyb2NvZGVfb3BzICogX19pbml0IGluaXRfaW50ZWxfbWljcm9jb2RlKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1pY3JvY29kZV9vcHMgKiBfX2luaXQgaW5pdF9pbnRlbF9taWNyb2NvZGUodm9pZCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTUlDUk9DT0RFX0lOVEVMICovCi0KLSNpZmRlZiBDT05GSUdfTUlDUk9DT0RFX0FNRAotZXh0ZXJuIHN0cnVjdCBtaWNyb2NvZGVfb3BzICogX19pbml0IGluaXRfYW1kX21pY3JvY29kZSh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtaWNyb2NvZGVfb3BzICogX19pbml0IGluaXRfYW1kX21pY3JvY29kZSh2b2lkKQotewotCXJldHVybiBOVUxMOwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19NSUNST0NPREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21tYW4uaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbWFuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZjI4ZTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21tYW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTU1BTl9ICi0jZGVmaW5lIEFTTV9YODZfX01NQU5fSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgotCi0jZGVmaW5lIE1BUF8zMkJJVAkweDQwCQkvKiBvbmx5IGdpdmUgb3V0IDMyYml0IGFkZHJlc3NlcyAqLwotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLSNkZWZpbmUgTUFQX1NUQUNLCTB4MjAwMDAJCS8qIGdpdmUgb3V0IGFuIGFkZHJlc3MgdGhhdCBpcyBiZXN0IHN1aXRlZCBmb3IgcHJvY2Vzcy90aHJlYWQgc3RhY2tzICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTU1BTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbW1jb25maWcuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjc5YjFjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tbWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NTUNPTkZJR19ICi0jZGVmaW5lIEFTTV9YODZfX01NQ09ORklHX0gKLQotI2lmZGVmIENPTkZJR19QQ0lfTU1DT05GSUcKLWV4dGVybiB2b2lkIF9fY3B1aW5pdCBmYW0xMGhfY2hlY2tfZW5hYmxlX21tY2ZnKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19jcHVpbml0IGNoZWNrX2VuYWJsZV9hbWRfbW1jb25mX2RtaSh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZmFtMTBoX2NoZWNrX2VuYWJsZV9tbWNmZyh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19lbmFibGVfYW1kX21tY29uZl9kbWkodm9pZCkgeyB9Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX01NQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tbXUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1YWZmMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbW11LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01NVV9ICi0jZGVmaW5lIEFTTV9YODZfX01NVV9ICi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLS8qCi0gKiBUaGUgeDg2IGRvZXNuJ3QgaGF2ZSBhIG1tdSBjb250ZXh0LCBidXQKLSAqIHdlIHB1dCB0aGUgc2VnbWVudCBpbmZvcm1hdGlvbiBoZXJlLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0Jdm9pZCAqbGR0OwotCWludCBzaXplOwotCXN0cnVjdCBtdXRleCBsb2NrOwotCXZvaWQgKnZkc287Ci19IG1tX2NvbnRleHRfdDsKLQotI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgbGVhdmVfbW0oaW50IGNwdSk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGxlYXZlX21tKGludCBjcHUpCi17Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbXVfY29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWM5NDBiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tbXVfY29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NTVVfQ09OVEVYVF9ICi0jZGVmaW5lIEFTTV9YODZfX01NVV9DT05URVhUX0gKLQotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAotCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQotewotfQotI2VuZGlmCS8qICFDT05GSUdfUEFSQVZJUlQgKi8KLQotLyoKLSAqIFVzZWQgZm9yIExEVCBjb3B5L2Rlc3RydWN0aW9uLgotICovCi1pbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJtbXVfY29udGV4dF8zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAibW11X2NvbnRleHRfNjQuaCIKLSNlbmRpZgotCi0jZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsIG5leHQpCQkJXAotZG8gewkJCQkJCVwKLQlwYXJhdmlydF9hY3RpdmF0ZV9tbSgocHJldiksIChuZXh0KSk7CVwKLQlzd2l0Y2hfbW0oKHByZXYpLCAobmV4dCksIE5VTEwpOwlcCi19IHdoaWxlICgwKTsKLQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTU1VX0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21tdV9jb250ZXh0XzMyLmggYi9pbmNsdWRlL2FzbS14ODYvbW11X2NvbnRleHRfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlNmY2ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbW11X2NvbnRleHRfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTU1VX0NPTlRFWFRfMzJfSAotI2RlZmluZSBBU01fWDg2X19NTVVfQ09OVEVYVF8zMl9ICi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAocGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPT0gVExCU1RBVEVfT0spCi0JCXBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID0gVExCU1RBVEVfTEFaWTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCi0JCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCi0JCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKLQkJLyogc3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KLQkJY3B1X2NsZWFyKGNwdSwgcHJldi0+Y3B1X3ZtX21hc2spOwotI2lmZGVmIENPTkZJR19TTVAKLQkJcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPSBUTEJTVEFURV9PSzsKLQkJcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuYWN0aXZlX21tID0gbmV4dDsKLSNlbmRpZgotCQljcHVfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spOwotCi0JCS8qIFJlLWxvYWQgcGFnZSB0YWJsZXMgKi8KLQkJbG9hZF9jcjMobmV4dC0+cGdkKTsKLQotCQkvKgotCQkgKiBsb2FkIHRoZSBMRFQsIGlmIHRoZSBMRFQgaXMgZGlmZmVyZW50OgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KHByZXYtPmNvbnRleHQubGR0ICE9IG5leHQtPmNvbnRleHQubGR0KSkKLQkJCWxvYWRfTERUX25vbG9jaygmbmV4dC0+Y29udGV4dCk7Ci0JfQotI2lmZGVmIENPTkZJR19TTVAKLQllbHNlIHsKLQkJcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPSBUTEJTVEFURV9PSzsKLQkJQlVHX09OKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLmFjdGl2ZV9tbSAhPSBuZXh0KTsKLQotCQlpZiAoIWNwdV90ZXN0X2FuZF9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzaykpIHsKLQkJCS8qIFdlIHdlcmUgaW4gbGF6eSB0bGIgbW9kZSBhbmQgbGVhdmVfbW0gZGlzYWJsZWQKLQkJCSAqIHRsYiBmbHVzaCBJUEkgZGVsaXZlcnkuIFdlIG11c3QgcmVsb2FkICVjcjMuCi0JCQkgKi8KLQkJCWxvYWRfY3IzKG5leHQtPnBnZCk7Ci0JCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKQkJCVwKLQlhc20oIm1vdmwgJTAsJSVncyI6IDoiciIgKDApKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX01NVV9DT05URVhUXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tbXVfY29udGV4dF82NC5oIGIvaW5jbHVkZS9hc20teDg2L21tdV9jb250ZXh0XzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NzU4NjcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21tdV9jb250ZXh0XzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01NVV9DT05URVhUXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fTU1VX0NPTlRFWFRfNjRfSAotCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocmVhZF9wZGEobW11X3N0YXRlKSA9PSBUTEJTVEFURV9PSykKLQkJd3JpdGVfcGRhKG1tdV9zdGF0ZSwgVExCU1RBVEVfTEFaWSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAotCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7Ci0JCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCi0JCWNwdV9jbGVhcihjcHUsIHByZXYtPmNwdV92bV9tYXNrKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXdyaXRlX3BkYShtbXVfc3RhdGUsIFRMQlNUQVRFX09LKTsKLQkJd3JpdGVfcGRhKGFjdGl2ZV9tbSwgbmV4dCk7Ci0jZW5kaWYKLQkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKLQkJbG9hZF9jcjMobmV4dC0+cGdkKTsKLQotCQlpZiAodW5saWtlbHkobmV4dC0+Y29udGV4dC5sZHQgIT0gcHJldi0+Y29udGV4dC5sZHQpKQotCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKLQl9Ci0jaWZkZWYgQ09ORklHX1NNUAotCWVsc2UgewotCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9PSyk7Ci0JCWlmIChyZWFkX3BkYShhY3RpdmVfbW0pICE9IG5leHQpCi0JCQlCVUcoKTsKLQkJaWYgKCFjcHVfdGVzdF9hbmRfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spKSB7Ci0JCQkvKiBXZSB3ZXJlIGluIGxhenkgdGxiIG1vZGUgYW5kIGxlYXZlX21tIGRpc2FibGVkCi0JCQkgKiB0bGIgZmx1c2ggSVBJIGRlbGl2ZXJ5LiBXZSBtdXN0IHJlbG9hZCBDUjMKLQkJCSAqIHRvIG1ha2Ugc3VyZSB0byB1c2Ugbm8gZnJlZWQgcGFnZSB0YWJsZXMuCi0JCQkgKi8KLQkJCWxvYWRfY3IzKG5leHQtPnBnZCk7Ci0JCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKQkJCVwKLWRvIHsJCQkJCQlcCi0JbG9hZF9nc19pbmRleCgwKTsJCQlcCi0JYXNtIHZvbGF0aWxlKCJtb3ZsICUwLCUlZnMiOjoiciIoMCkpOwlcCi19IHdoaWxlICgwKQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTU1VX0NPTlRFWFRfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21teC5oIGIvaW5jbHVkZS9hc20teDg2L21teC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTcyOTliLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tbXguaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTU1YX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTU1YX0gKLQotLyoKLSAqCU1NWCAzRG5vdyEgaGVscGVyIG9wZXJhdGlvbnMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotZXh0ZXJuIHZvaWQgKl9tbXhfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gdm9pZCBtbXhfY2xlYXJfcGFnZSh2b2lkICpwYWdlKTsKLWV4dGVybiB2b2lkIG1teF9jb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTU1YX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmVfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmVfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIxYjY1ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbW16b25lXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnkgUGF0IEdhdWdoZW4gKGdvbmVAdXMuaWJtLmNvbSkgTWFyIDIwMDIKLSAqCi0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19NTVpPTkVfMzJfSAotI2RlZmluZSBBU01fWDg2X19NTVpPTkVfMzJfSAotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0jaWZkZWYgQ09ORklHX05VTUEKLWV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwotI2RlZmluZSBOT0RFX0RBVEEobmlkKQkobm9kZV9kYXRhW25pZF0pCi0KLSNpbmNsdWRlIDxhc20vbnVtYXEuaD4KLS8qIHN1bW1pdCBvciBnZW5lcmljIGFyY2ggKi8KLSNpbmNsdWRlIDxhc20vc3JhdC5oPgotCi1leHRlcm4gaW50IGdldF9tZW1jZmdfbnVtYV9mbGF0KHZvaWQpOwotLyoKLSAqIFRoaXMgYWxsb3dzIGFueSBvbmUgTlVNQSBhcmNoaXRlY3R1cmUgdG8gYmUgY29tcGlsZWQKLSAqIGZvciwgYW5kIHN0aWxsIGZhbGwgYmFjayB0byB0aGUgZmxhdCBmdW5jdGlvbiBpZiBpdAotICogZmFpbHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbWVtY2ZnX251bWEodm9pZCkKLXsKLQotCWlmIChnZXRfbWVtY2ZnX251bWFxKCkpCi0JCXJldHVybjsKLQlpZiAoZ2V0X21lbWNmZ19mcm9tX3NyYXQoKSkKLQkJcmV0dXJuOwotCWdldF9tZW1jZmdfbnVtYV9mbGF0KCk7Ci19Ci0KLWV4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7Ci0KLSNlbHNlIC8qICFDT05GSUdfTlVNQSAqLwotCi0jZGVmaW5lIGdldF9tZW1jZmdfbnVtYSBnZXRfbWVtY2ZnX251bWFfZmxhdAotCi0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8KLQotI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KLQotLyoKLSAqIGdlbmVyaWMgbm9kZSBtZW1vcnkgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucyBhcHBseToKLSAqCi0gKiAxKSBtZW1vcnkgY29tZXMgaW4gNjRNYiBjb250aWdpb3VzIGNodW5rcyB3aGljaCBhcmUgZWl0aGVyIHByZXNlbnQgb3Igbm90Ci0gKiAyKSB3ZSB3aWxsIG5vdCBoYXZlIG1vcmUgdGhhbiA2NEdiIGluIHRvdGFsCi0gKgotICogZm9yIG5vdyBhc3N1bWUgdGhhdCA2NEdiIGlzIG1heCBhbW91bnQgb2YgUkFNIGZvciB3aG9sZSBzeXN0ZW0KLSAqICAgIDY0R2IgLyA0MDk2Ynl0ZXMvcGFnZSA9IDE2Nzc3MjE2IHBhZ2VzCi0gKi8KLSNkZWZpbmUgTUFYX05SX1BBR0VTIDE2Nzc3MjE2Ci0jZGVmaW5lIE1BWF9FTEVNRU5UUyAxMDI0Ci0jZGVmaW5lIFBBR0VTX1BFUl9FTEVNRU5UIChNQVhfTlJfUEFHRVMvTUFYX0VMRU1FTlRTKQotCi1leHRlcm4gczggcGh5c25vZGVfbWFwW107Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0jaWZkZWYgQ09ORklHX05VTUEKLQlyZXR1cm4oKGludCkgcGh5c25vZGVfbWFwWyhwZm4pIC8gUEFHRVNfUEVSX0VMRU1FTlRdKTsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgZWFjaCBudW1hIGltcGxtZW50YXRpb24gbXVzdCBkZWZpbmUuCi0gKi8KLQotI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCi0jZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpCQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JcGdfZGF0YV90ICpfX3BnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CQkJCVwKLQlfX3BnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIF9fcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlczsJCVwKLX0pCi0KLXN0YXRpYyBpbmxpbmUgaW50IHBmbl92YWxpZChpbnQgcGZuKQotewotCWludCBuaWQgPSBwZm5fdG9fbmlkKHBmbik7Ci0KLQlpZiAobmlkID49IDApCi0JCXJldHVybiAocGZuIDwgbm9kZV9lbmRfcGZuKG5pZCkpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwotCi0jaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLQotLyoKLSAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoaXMgbnVtYSBwbGF0Zm9ybS4KLSAqLwotI2RlZmluZSByZXNlcnZlX2Jvb3RtZW0oYWRkciwgc2l6ZSwgZmxhZ3MpIFwKLQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIChhZGRyKSwgKHNpemUpLCAoZmxhZ3MpKQotI2RlZmluZSBhbGxvY19ib290bWVtKHgpIFwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBcCi0JCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKQotI2RlZmluZSBhbGxvY19ib290bWVtX2xvdyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFNNUF9DQUNIRV9CWVRFUywgMCkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9wYWdlcyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKQotI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vcGFuaWMoeCkgXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgXAotCQkJCV9fcGEoTUFYX0RNQV9BRERSRVNTKSkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoeCkgXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXN0cnVjdCBwZ2xpc3RfZGF0YSAgX19tYXliZV91bnVzZWQJCQlcCi0JCQkJKl9fYWxsb2NfYm9vdG1lbV9ub2RlX19wZ2RhdCA9IChwZ2RhdCk7CVwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLAlcCi0JCQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwlcCi19KQotI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpCQkJCVwKLSh7CQkJCQkJCQkJXAotCXN0cnVjdCBwZ2xpc3RfZGF0YSAgX19tYXliZV91bnVzZWQJCQlcCi0JCQkJKl9fYWxsb2NfYm9vdG1lbV9ub2RlX19wZ2RhdCA9IChwZ2RhdCk7CVwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgUEFHRV9TSVpFLAkJXAotCQkJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKTsJXAotfSkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShwZ2RhdCwgeCkJCQkJXAotKHsJCQkJCQkJCQlcCi0Jc3RydWN0IHBnbGlzdF9kYXRhICBfX21heWJlX3VudXNlZAkJCVwKLQkJCQkqX19hbGxvY19ib290bWVtX25vZGVfX3BnZGF0ID0gKHBnZGF0KTsJXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApOwkJXAotfSkKLSNlbmRpZiAvKiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTU1aT05FXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmVfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmVfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4MGYzMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbW16b25lXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKiBLOCBOVU1BIHN1cHBvcnQgKi8KLS8qIENvcHlyaWdodCAyMDAyLDIwMDMgYnkgQW5kaSBLbGVlbiwgU3VTRSBMYWJzICovCi0vKiAyLjUgVmVyc2lvbiBsb29zZWx5IGJhc2VkIG9uIHRoZSBOVU1BUSBDb2RlIGJ5IFBhdCBHYXVnaGVuLiAqLwotI2lmbmRlZiBBU01fWDg2X19NTVpPTkVfNjRfSAotI2RlZmluZSBBU01fWDg2X19NTVpPTkVfNjRfSAotCi0KLSNpZmRlZiBDT05GSUdfTlVNQQotCi0jaW5jbHVkZSA8bGludXgvbW1kZWJ1Zy5oPgotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0vKiBTaW1wbGUgcGVyZmVjdCBoYXNoIHRvIG1hcCBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gbm9kZSBudW1iZXJzICovCi1zdHJ1Y3QgbWVtbm9kZSB7Ci0JaW50IHNoaWZ0OwotCXVuc2lnbmVkIGludCBtYXBzaXplOwotCXMxNiAqbWFwOwotCXMxNiBlbWJlZGRlZF9tYXBbNjQgLSA4XTsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOyAvKiB0b3RhbCBzaXplID0gMTI4IGJ5dGVzICovCi1leHRlcm4gc3RydWN0IG1lbW5vZGUgbWVtbm9kZTsKLSNkZWZpbmUgbWVtbm9kZV9zaGlmdCBtZW1ub2RlLnNoaWZ0Ci0jZGVmaW5lIG1lbW5vZGVtYXAgbWVtbm9kZS5tYXAKLSNkZWZpbmUgbWVtbm9kZW1hcHNpemUgbWVtbm9kZS5tYXBzaXplCi0KLWV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKHB1cmUpKSBpbnQgcGh5c190b19uaWQodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXVuc2lnbmVkIG5pZDsKLQlWSVJUVUFMX0JVR19PTighbWVtbm9kZW1hcCk7Ci0JbmlkID0gbWVtbm9kZW1hcFthZGRyID4+IG1lbW5vZGVfc2hpZnRdOwotCVZJUlRVQUxfQlVHX09OKG5pZCA+PSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfZGF0YVtuaWRdKTsKLQlyZXR1cm4gbmlkOwotfQotCi0jZGVmaW5lIE5PREVfREFUQShuaWQpCQkobm9kZV9kYXRhW25pZF0pCi0KLSNkZWZpbmUgbm9kZV9zdGFydF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQotI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsJXAotCQkJCSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQotCi1leHRlcm4gaW50IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pOwotCi0jaWZkZWYgQ09ORklHX05VTUFfRU1VCi0jZGVmaW5lIEZBS0VfTk9ERV9NSU5fU0laRQkoNjQgKiAxMDI0ICogMTAyNCkKLSNkZWZpbmUgRkFLRV9OT0RFX01JTl9IQVNIX01BU0sJKH4oRkFLRV9OT0RFX01JTl9TSVpFIC0gMVVMKSkKLSNlbmRpZgotCi0jZW5kaWYKLSNlbmRpZiAvKiBBU01fWDg2X19NTVpPTkVfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21vZHVsZS5oIGIvaW5jbHVkZS9hc20teDg2L21vZHVsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjRmMjAwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tb2R1bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTU9EVUxFX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTU9EVUxFX0gKLQotLyogeDg2XzMyLzY0IGFyZSBzaW1wbGUgKi8KLXN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7fTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKLSMgZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCi0jIGRlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCi0jZWxzZQotIyBkZWZpbmUgRWxmX1NoZHIgRWxmNjRfU2hkcgotIyBkZWZpbmUgRWxmX1N5bSBFbGY2NF9TeW0KLSMgZGVmaW5lIEVsZl9FaGRyIEVsZjY0X0VoZHIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotLyogWDg2XzY0IGRvZXMgbm90IGRlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgKi8KLSNlbGlmIGRlZmluZWQgQ09ORklHX00zODYKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICIzODYgIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfTTQ4NgotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjQ4NiAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19NNTg2Ci0jZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiNTg2ICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX001ODZUU0MKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICI1ODZUU0MgIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfTTU4Nk1NWAotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjU4Nk1NWCAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19NQ09SRTIKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJDT1JFMiAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19NNjg2Ci0jZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiNjg2ICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01QRU5USVVNSUkKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJQRU5USVVNSUkgIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfTVBFTlRJVU1JSUkKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJQRU5USVVNSUlJICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01QRU5USVVNTQotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlBFTlRJVU1NICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01QRU5USVVNNAotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlBFTlRJVU00ICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01LNgotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIks2ICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01LNwotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIks3ICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01LOAotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIks4ICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl9FTEFOCi0jZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiRUxBTiAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19NQ1JVU09FCi0jZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiQ1JVU09FICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01FRkZJQ0VPTgotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkVGRklDRU9OICIKLSNlbGlmIGRlZmluZWQgQ09ORklHX01XSU5DSElQQzYKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJXSU5DSElQQzYgIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfTVdJTkNISVAzRAotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIldJTkNISVAzRCAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19NQ1lSSVhJSUkKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJDWVJJWElJSSAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19NVklBQzNfMgotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlZJQUMzLTIgIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfTVZJQUM3Ci0jZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiVklBQzcgIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfTUdFT0RFR1gxCi0jZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiR0VPREVHWDEgIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfTUdFT0RFX0xYCi0jZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiR0VPREUgIgotI2Vsc2UKLSNlcnJvciB1bmtub3duIHByb2Nlc3NvciBmYW1pbHkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpZmRlZiBDT05GSUdfNEtTVEFDS1MKLSMgIGRlZmluZSBNT0RVTEVfU1RBQ0tTSVpFICI0S1NUQUNLUyAiCi0jIGVsc2UKLSMgIGRlZmluZSBNT0RVTEVfU1RBQ0tTSVpFICIiCi0jIGVuZGlmCi0jIGRlZmluZSBNT0RVTEVfQVJDSF9WRVJNQUdJQyBNT0RVTEVfUFJPQ19GQU1JTFkgTU9EVUxFX1NUQUNLU0laRQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21wc3BlYy5oIGIvaW5jbHVkZS9hc20teDg2L21wc3BlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTIyNDFhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tcHNwZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01QU1BFQ19ICi0jZGVmaW5lIEFTTV9YODZfX01QU1BFQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbXBzcGVjX2RlZi5oPgotCi1leHRlcm4gaW50IGFwaWNfdmVyc2lvbltNQVhfQVBJQ1NdOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2luY2x1ZGUgPG1hY2hfbXBzcGVjLmg+Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgZGVmX3RvX2JpZ3NtcDsKLWV4dGVybiB1OCBhcGljaWRfMl9ub2RlW107Ci1leHRlcm4gaW50IHBpY19tb2RlOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fbm9kZVtNQVhfTVBfQlVTU0VTXTsKLWV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX2xvY2FsW01BWF9NUF9CVVNTRVNdOwotZXh0ZXJuIGludCBxdWFkX2xvY2FsX3RvX21wX2J1c19pZCBbTlJfQ1BVUy80XVs0XTsKLSNlbmRpZgotCi0jZGVmaW5lIE1BWF9BUElDSUQgMjU2Ci0KLSNlbHNlCi0KLSNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNTYKLS8qIEVhY2ggUENJIHNsb3QgbWF5IGJlIGEgY29tYm8gY2FyZCB3aXRoIGl0cyBvd24gYnVzLiAgNCBJUlEgcGlucyBwZXIgc2xvdC4gKi8KLSNkZWZpbmUgTUFYX0lSUV9TT1VSQ0VTIChNQVhfTVBfQlVTU0VTICogNCkKLQotI2VuZGlmCi0KLWV4dGVybiB2b2lkIGVhcmx5X2ZpbmRfc21wX2NvbmZpZyh2b2lkKTsKLWV4dGVybiB2b2lkIGVhcmx5X2dldF9zbXBfY29uZmlnKHZvaWQpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUNBKSB8fCBkZWZpbmVkKENPTkZJR19FSVNBKQotZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fdHlwZVtNQVhfTVBfQlVTU0VTXTsKLSNlbmRpZgotCi1leHRlcm4gREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOwotCi1leHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbWF4X3BoeXNpY2FsX2FwaWNpZDsKLWV4dGVybiBpbnQgc21wX2ZvdW5kX2NvbmZpZzsKLWV4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7Ci0KLWV4dGVybiB2b2lkIGZpbmRfc21wX2NvbmZpZyh2b2lkKTsKLWV4dGVybiB2b2lkIGdldF9zbXBfY29uZmlnKHZvaWQpOwotI2lmZGVmIENPTkZJR19YODZfTVBQQVJTRQotZXh0ZXJuIHZvaWQgZWFybHlfcmVzZXJ2ZV9lODIwX21wY19uZXcodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X3Jlc2VydmVfZTgyMF9tcGNfbmV3KHZvaWQpIHsgfQotI2VuZGlmCi0KLXZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pOwotI2lmZGVmIENPTkZJR19BQ1BJCi1leHRlcm4gdm9pZCBtcF9yZWdpc3Rlcl9pb2FwaWMoaW50IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKTsKLWV4dGVybiB2b2lkIG1wX292ZXJyaWRlX2xlZ2FjeV9pcnEodTggYnVzX2lycSwgdTggcG9sYXJpdHksIHU4IHRyaWdnZXIsCi0JCQkJICAgdTMyIGdzaSk7Ci1leHRlcm4gdm9pZCBtcF9jb25maWdfYWNwaV9sZWdhY3lfaXJxcyh2b2lkKTsKLWV4dGVybiBpbnQgbXBfcmVnaXN0ZXJfZ3NpKHUzMiBnc2ksIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLWV4dGVybiBpbnQgbXBfY29uZmlnX2FjcGlfZ3NpKHVuc2lnbmVkIGNoYXIgbnVtYmVyLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBpbiwKLQkJCQl1MzIgZ3NpLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludAotbXBfY29uZmlnX2FjcGlfZ3NpKHVuc2lnbmVkIGNoYXIgbnVtYmVyLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBpbiwKLQkJICAgdTMyIGdzaSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCi0KLSNkZWZpbmUgUEhZU0lEX0FSUkFZX1NJWkUJQklUU19UT19MT05HUyhNQVhfQVBJQ1MpCi0KLXN0cnVjdCBwaHlzaWRfbWFzayB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrW1BIWVNJRF9BUlJBWV9TSVpFXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHBoeXNpZF9tYXNrIHBoeXNpZF9tYXNrX3Q7Ci0KLSNkZWZpbmUgcGh5c2lkX3NldChwaHlzaWQsIG1hcCkJCQlzZXRfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKLSNkZWZpbmUgcGh5c2lkX2NsZWFyKHBoeXNpZCwgbWFwKQkJY2xlYXJfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKLSNkZWZpbmUgcGh5c2lkX2lzc2V0KHBoeXNpZCwgbWFwKQkJdGVzdF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQotI2RlZmluZSBwaHlzaWRfdGVzdF9hbmRfc2V0KHBoeXNpZCwgbWFwKQkJCVwKLQl0ZXN0X2FuZF9zZXRfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKLQotI2RlZmluZSBwaHlzaWRzX2FuZChkc3QsIHNyYzEsIHNyYzIpCQkJCQlcCi0JYml0bWFwX2FuZCgoZHN0KS5tYXNrLCAoc3JjMSkubWFzaywgKHNyYzIpLm1hc2ssIE1BWF9BUElDUykKLQotI2RlZmluZSBwaHlzaWRzX29yKGRzdCwgc3JjMSwgc3JjMikJCQkJCVwKLQliaXRtYXBfb3IoKGRzdCkubWFzaywgKHNyYzEpLm1hc2ssIChzcmMyKS5tYXNrLCBNQVhfQVBJQ1MpCi0KLSNkZWZpbmUgcGh5c2lkc19jbGVhcihtYXApCQkJCQlcCi0JYml0bWFwX3plcm8oKG1hcCkubWFzaywgTUFYX0FQSUNTKQotCi0jZGVmaW5lIHBoeXNpZHNfY29tcGxlbWVudChkc3QsIHNyYykJCQkJXAotCWJpdG1hcF9jb21wbGVtZW50KChkc3QpLm1hc2ssIChzcmMpLm1hc2ssIE1BWF9BUElDUykKLQotI2RlZmluZSBwaHlzaWRzX2VtcHR5KG1hcCkJCQkJCVwKLQliaXRtYXBfZW1wdHkoKG1hcCkubWFzaywgTUFYX0FQSUNTKQotCi0jZGVmaW5lIHBoeXNpZHNfZXF1YWwobWFwMSwgbWFwMikJCQkJXAotCWJpdG1hcF9lcXVhbCgobWFwMSkubWFzaywgKG1hcDIpLm1hc2ssIE1BWF9BUElDUykKLQotI2RlZmluZSBwaHlzaWRzX3dlaWdodChtYXApCQkJCQlcCi0JYml0bWFwX3dlaWdodCgobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCi0KLSNkZWZpbmUgcGh5c2lkc19zaGlmdF9yaWdodChkLCBzLCBuKQkJCQlcCi0JYml0bWFwX3NoaWZ0X3JpZ2h0KChkKS5tYXNrLCAocykubWFzaywgbiwgTUFYX0FQSUNTKQotCi0jZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKQkJCQlcCi0JYml0bWFwX3NoaWZ0X2xlZnQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfQVBJQ1MpCi0KLSNkZWZpbmUgcGh5c2lkc19jb2VyY2UobWFwKQkJCSgobWFwKS5tYXNrWzBdKQotCi0jZGVmaW5lIHBoeXNpZHNfcHJvbW90ZShwaHlzaWRzKQkJCQkJXAotCSh7CQkJCQkJCQlcCi0JCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQlcCi0JCV9fcGh5c2lkX21hc2subWFza1swXSA9IHBoeXNpZHM7CQkJXAotCQlfX3BoeXNpZF9tYXNrOwkJCQkJCVwKLQl9KQotCi0vKiBOb3RlOiB3aWxsIGNyZWF0ZSB2ZXJ5IGxhcmdlIHN0YWNrIGZyYW1lcyBpZiBwaHlzaWRfbWFza190IGlzIGJpZyAqLwotI2RlZmluZSBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c2lkKQkJCQkJXAotCSh7CQkJCQkJCQlcCi0JCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQlcCi0JCXBoeXNpZF9zZXQocGh5c2lkLCBfX3BoeXNpZF9tYXNrKTsJCQlcCi0JCV9fcGh5c2lkX21hc2s7CQkJCQkJXAotCX0pCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGludCBwaHlzaWQsIHBoeXNpZF9tYXNrX3QgKm1hcCkKLXsKLQlwaHlzaWRzX2NsZWFyKCptYXApOwotCXBoeXNpZF9zZXQocGh5c2lkLCAqbWFwKTsKLX0KLQotI2RlZmluZSBQSFlTSURfTUFTS19BTEwJCXsge1swIC4uLiBQSFlTSURfQVJSQVlfU0laRS0xXSA9IH4wVUx9IH0KLSNkZWZpbmUgUEhZU0lEX01BU0tfTk9ORQl7IHtbMCAuLi4gUEhZU0lEX0FSUkFZX1NJWkUtMV0gPSAwVUx9IH0KLQotZXh0ZXJuIHBoeXNpZF9tYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19NUFNQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21wc3BlY19kZWYuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tcHNwZWNfZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MTY2YjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21wc3BlY19kZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01QU1BFQ19ERUZfSAotI2RlZmluZSBBU01fWDg2X19NUFNQRUNfREVGX0gKLQotLyoKLSAqIFN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgU01QIG1hY2hpbmVzIGZvbGxvd2luZyB0aGUKLSAqIEludGVsIE11bHRpcHJvY2Vzc2luZyBTcGVjaWZpY2F0aW9uIDEuMSBhbmQgMS40LgotICovCi0KLS8qCi0gKiBUaGlzIHRhZyBpZGVudGlmaWVzIHdoZXJlIHRoZSBTTVAgY29uZmlndXJhdGlvbgotICogaW5mb3JtYXRpb24gaXMuCi0gKi8KLQotI2RlZmluZSBTTVBfTUFHSUNfSURFTlQJKCgnXyc8PDI0KSB8ICgnUCc8PDE2KSB8ICgnTSc8PDgpIHwgJ18nKQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgTUFYX01QQ19FTlRSWSAxMDI0Ci0jIGRlZmluZSBNQVhfQVBJQ1MgICAgICAyNTYKLSNlbHNlCi0jIGlmIE5SX0NQVVMgPD0gMjU1Ci0jICBkZWZpbmUgTUFYX0FQSUNTICAgICAyNTUKLSMgZWxzZQotIyAgZGVmaW5lIE1BWF9BUElDUyAgIDMyNzY4Ci0jIGVuZGlmCi0jZW5kaWYKLQotc3RydWN0IGludGVsX21wX2Zsb2F0aW5nIHsKLQljaGFyIG1wZl9zaWduYXR1cmVbNF07CQkvKiAiX01QXyIJCQkqLwotCXVuc2lnbmVkIGludCBtcGZfcGh5c3B0cjsJLyogQ29uZmlndXJhdGlvbiB0YWJsZSBhZGRyZXNzCSovCi0JdW5zaWduZWQgY2hhciBtcGZfbGVuZ3RoOwkvKiBPdXIgbGVuZ3RoIChwYXJhZ3JhcGhzKQkqLwotCXVuc2lnbmVkIGNoYXIgbXBmX3NwZWNpZmljYXRpb247LyogU3BlY2lmaWNhdGlvbiB2ZXJzaW9uCSovCi0JdW5zaWduZWQgY2hhciBtcGZfY2hlY2tzdW07CS8qIENoZWNrc3VtIChtYWtlcyBzdW0gMCkJKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMTsJLyogU3RhbmRhcmQgb3IgY29uZmlndXJhdGlvbiA/CSovCi0JdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTI7CS8qIEJpdDcgc2V0IGZvciBJTUNSfFBJQwkqLwotCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmUzOwkvKiBVbnVzZWQgKDApCQkJKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlNDsJLyogVW51c2VkICgwKQkJCSovCi0JdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTU7CS8qIFVudXNlZCAoMCkJCQkqLwotfTsKLQotI2RlZmluZSBNUENfU0lHTkFUVVJFICJQQ01QIgotCi1zdHJ1Y3QgbXBfY29uZmlnX3RhYmxlIHsKLQljaGFyIG1wY19zaWduYXR1cmVbNF07Ci0JdW5zaWduZWQgc2hvcnQgbXBjX2xlbmd0aDsJLyogU2l6ZSBvZiB0YWJsZSAqLwotCWNoYXIgbXBjX3NwZWM7CQkJLyogMHgwMSAqLwotCWNoYXIgbXBjX2NoZWNrc3VtOwotCWNoYXIgbXBjX29lbVs4XTsKLQljaGFyIG1wY19wcm9kdWN0aWRbMTJdOwotCXVuc2lnbmVkIGludCBtcGNfb2VtcHRyOwkvKiAwIGlmIG5vdCBwcmVzZW50ICovCi0JdW5zaWduZWQgc2hvcnQgbXBjX29lbXNpemU7CS8qIDAgaWYgbm90IHByZXNlbnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBtcGNfb2VtY291bnQ7Ci0JdW5zaWduZWQgaW50IG1wY19sYXBpYzsJLyogQVBJQyBhZGRyZXNzICovCi0JdW5zaWduZWQgaW50IHJlc2VydmVkOwotfTsKLQotLyogRm9sbG93ZWQgYnkgZW50cmllcyAqLwotCi0jZGVmaW5lCU1QX1BST0NFU1NPUgkJMAotI2RlZmluZQlNUF9CVVMJCQkxCi0jZGVmaW5lCU1QX0lPQVBJQwkJMgotI2RlZmluZQlNUF9JTlRTUkMJCTMKLSNkZWZpbmUJTVBfTElOVFNSQwkJNAotLyogVXNlZCBieSBJQk0gTlVNQS1RIHRvIGRlc2NyaWJlIG5vZGUgbG9jYWxpdHkgKi8KLSNkZWZpbmUJTVBfVFJBTlNMQVRJT04JCTE5MgotCi0jZGVmaW5lIENQVV9FTkFCTEVECQkxCS8qIFByb2Nlc3NvciBpcyBhdmFpbGFibGUgKi8KLSNkZWZpbmUgQ1BVX0JPT1RQUk9DRVNTT1IJMgkvKiBQcm9jZXNzb3IgaXMgdGhlIEJQICovCi0KLSNkZWZpbmUgQ1BVX1NURVBQSU5HX01BU0sJMHgwMDBGCi0jZGVmaW5lIENQVV9NT0RFTF9NQVNLCQkweDAwRjAKLSNkZWZpbmUgQ1BVX0ZBTUlMWV9NQVNLCQkweDBGMDAKLQotc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yIHsKLQl1bnNpZ25lZCBjaGFyIG1wY190eXBlOwotCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWNpZDsJLyogTG9jYWwgQVBJQyBudW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIG1wY19hcGljdmVyOwkvKiBJdHMgdmVyc2lvbnMgKi8KLQl1bnNpZ25lZCBjaGFyIG1wY19jcHVmbGFnOwotCXVuc2lnbmVkIGludCBtcGNfY3B1ZmVhdHVyZTsKLQl1bnNpZ25lZCBpbnQgbXBjX2ZlYXR1cmVmbGFnOwkvKiBDUFVJRCBmZWF0dXJlIHZhbHVlICovCi0JdW5zaWduZWQgaW50IG1wY19yZXNlcnZlZFsyXTsKLX07Ci0KLXN0cnVjdCBtcGNfY29uZmlnX2J1cyB7Ci0JdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKLQl1bnNpZ25lZCBjaGFyIG1wY19idXNpZDsKLQl1bnNpZ25lZCBjaGFyIG1wY19idXN0eXBlWzZdOwotfTsKLQotLyogTGlzdCBvZiBCdXMgVHlwZSBzdHJpbmcgdmFsdWVzLCBJbnRlbCBNUCBTcGVjLiAqLwotI2RlZmluZSBCVVNUWVBFX0VJU0EJIkVJU0EiCi0jZGVmaW5lIEJVU1RZUEVfSVNBCSJJU0EiCi0jZGVmaW5lIEJVU1RZUEVfSU5URVJOCSJJTlRFUk4iCS8qIEludGVybmFsIEJVUyAqLwotI2RlZmluZSBCVVNUWVBFX01DQQkiTUNBIgotI2RlZmluZSBCVVNUWVBFX1ZMCSJWTCIJCS8qIExvY2FsIGJ1cyAqLwotI2RlZmluZSBCVVNUWVBFX1BDSQkiUENJIgotI2RlZmluZSBCVVNUWVBFX1BDTUNJQQkiUENNQ0lBIgotI2RlZmluZSBCVVNUWVBFX0NCVVMJIkNCVVMiCi0jZGVmaW5lIEJVU1RZUEVfQ0JVU0lJCSJDQlVTSUkiCi0jZGVmaW5lIEJVU1RZUEVfRlVUVVJFCSJGVVRVUkUiCi0jZGVmaW5lIEJVU1RZUEVfTUJJCSJNQkkiCi0jZGVmaW5lIEJVU1RZUEVfTUJJSQkiTUJJSSIKLSNkZWZpbmUgQlVTVFlQRV9NUEkJIk1QSSIKLSNkZWZpbmUgQlVTVFlQRV9NUFNBCSJNUFNBIgotI2RlZmluZSBCVVNUWVBFX05VQlVTCSJOVUJVUyIKLSNkZWZpbmUgQlVTVFlQRV9UQwkiVEMiCi0jZGVmaW5lIEJVU1RZUEVfVk1FCSJWTUUiCi0jZGVmaW5lIEJVU1RZUEVfWFBSRVNTCSJYUFJFU1MiCi0KLSNkZWZpbmUgTVBDX0FQSUNfVVNBQkxFCQkweDAxCi0KLXN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyB7Ci0JdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKLQl1bnNpZ25lZCBjaGFyIG1wY19hcGljaWQ7Ci0JdW5zaWduZWQgY2hhciBtcGNfYXBpY3ZlcjsKLQl1bnNpZ25lZCBjaGFyIG1wY19mbGFnczsKLQl1bnNpZ25lZCBpbnQgbXBjX2FwaWNhZGRyOwotfTsKLQotc3RydWN0IG1wY19jb25maWdfaW50c3JjIHsKLQl1bnNpZ25lZCBjaGFyIG1wY190eXBlOwotCXVuc2lnbmVkIGNoYXIgbXBjX2lycXR5cGU7Ci0JdW5zaWduZWQgc2hvcnQgbXBjX2lycWZsYWc7Ci0JdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzOwotCXVuc2lnbmVkIGNoYXIgbXBjX3NyY2J1c2lycTsKLQl1bnNpZ25lZCBjaGFyIG1wY19kc3RhcGljOwotCXVuc2lnbmVkIGNoYXIgbXBjX2RzdGlycTsKLX07Ci0KLWVudW0gbXBfaXJxX3NvdXJjZV90eXBlcyB7Ci0JbXBfSU5UID0gMCwKLQltcF9OTUkgPSAxLAotCW1wX1NNSSA9IDIsCi0JbXBfRXh0SU5UID0gMwotfTsKLQotI2RlZmluZSBNUF9JUlFESVJfREVGQVVMVAkwCi0jZGVmaW5lIE1QX0lSUURJUl9ISUdICQkxCi0jZGVmaW5lIE1QX0lSUURJUl9MT1cJCTMKLQotI2RlZmluZSBNUF9BUElDX0FMTAkweEZGCi0KLXN0cnVjdCBtcGNfY29uZmlnX2xpbnRzcmMgewotCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7Ci0JdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKLQl1bnNpZ25lZCBzaG9ydCBtcGNfaXJxZmxhZzsKLQl1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpZDsKLQl1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpcnE7Ci0JdW5zaWduZWQgY2hhciBtcGNfZGVzdGFwaWM7Ci0JdW5zaWduZWQgY2hhciBtcGNfZGVzdGFwaWNsaW50OwotfTsKLQotI2RlZmluZSBNUENfT0VNX1NJR05BVFVSRSAiX09FTSIKLQotc3RydWN0IG1wX2NvbmZpZ19vZW10YWJsZSB7Ci0JY2hhciBvZW1fc2lnbmF0dXJlWzRdOwotCXVuc2lnbmVkIHNob3J0IG9lbV9sZW5ndGg7CS8qIFNpemUgb2YgdGFibGUgKi8KLQljaGFyICBvZW1fcmV2OwkJCS8qIDB4MDEgKi8KLQljaGFyICBvZW1fY2hlY2tzdW07Ci0JY2hhciAgbXBjX29lbVs4XTsKLX07Ci0KLS8qCi0gKglEZWZhdWx0IGNvbmZpZ3VyYXRpb25zCi0gKgotICoJMQkyIENQVSBJU0EgODI0ODlEWAotICoJMgkyIENQVSBFSVNBIDgyNDg5RFggbmVpdGhlciBJUlEgMCB0aW1lciBub3IgSVJRIDEzIERNQSBjaGFpbmluZwotICoJMwkyIENQVSBFSVNBIDgyNDg5RFgKLSAqCTQJMiBDUFUgTUNBIDgyNDg5RFgKLSAqCTUJMiBDUFUgSVNBK1BDSQotICoJNgkyIENQVSBFSVNBK1BDSQotICoJNwkyIENQVSBNQ0ErUENJCi0gKi8KLQotZW51bSBtcF9idXN0eXBlIHsKLQlNUF9CVVNfSVNBID0gMSwKLQlNUF9CVVNfRUlTQSwKLQlNUF9CVVNfUENJLAotCU1QX0JVU19NQ0EsCi19OwotI2VuZGlmIC8qIEFTTV9YODZfX01QU1BFQ19ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20teDg2L21zZ2J1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjUzOGM5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tc2didWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTVNHQlVGX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTVNHQlVGX0gKLQotLyoKLSAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgaTM4NiBhcmNoaXRlY3R1cmUuCi0gKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKLSAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgotICoKLSAqIFBhZCBzcGFjZSBvbiBpMzg2IGlzIGxlZnQgZm9yOgotICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKLSAqCi0gKiBQYWQgc3BhY2Ugb24geDg2NjQgaXMgbGVmdCBmb3I6Ci0gKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCi0gKi8KLXN0cnVjdCBtc3FpZDY0X2RzIHsKLQlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKLQlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCi0jaWZkZWYgX19pMzg2X18KLQl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKLSNlbmRpZgotCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KLSNpZmRlZiBfX2kzODZfXwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOwotI2VuZGlmCi0JX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLwotI2lmZGVmIF9faTM4Nl9fCi0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLwotCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KLQl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCi0JX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KLQlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KLQl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7Ci0JdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OwotfTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXNpZGVmLmggYi9pbmNsdWRlL2FzbS14ODYvbXNpZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOTE5MDIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21zaWRlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NU0lERUZfSAotI2RlZmluZSBBU01fWDg2X19NU0lERUZfSAotCi0vKgotICogQ29uc3RhbnRzIGZvciBJbnRlbCBBUElDIGJhc2VkIE1TSSBtZXNzYWdlcy4KLSAqLwotCi0vKgotICogU2hpZnRzIGZvciBNU0kgZGF0YQotICovCi0KLSNkZWZpbmUgTVNJX0RBVEFfVkVDVE9SX1NISUZUCQkwCi0jZGVmaW5lICBNU0lfREFUQV9WRUNUT1JfTUFTSwkJMHgwMDAwMDBmZgotI2RlZmluZQkgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpICYgXAotCQkJCQkgTVNJX0RBVEFfVkVDVE9SX01BU0spCi0KLSNkZWZpbmUgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVAk4Ci0jZGVmaW5lICBNU0lfREFUQV9ERUxJVkVSWV9GSVhFRAkoMCA8PCBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUKQotI2RlZmluZSAgTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJCSgxIDw8IE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfTEVWRUxfU0hJRlQJCTE0Ci0jZGVmaW5lCSBNU0lfREFUQV9MRVZFTF9ERUFTU0VSVAkoMCA8PCBNU0lfREFUQV9MRVZFTF9TSElGVCkKLSNkZWZpbmUJIE1TSV9EQVRBX0xFVkVMX0FTU0VSVAkJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfVFJJR0dFUl9TSElGVAkJMTUKLSNkZWZpbmUgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkJKDAgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKLSNkZWZpbmUgIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwJCSgxIDw8IE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQpCi0KLS8qCi0gKiBTaGlmdC9tYXNrIGZpZWxkcyBmb3IgbXNpIGFkZHJlc3MKLSAqLwotCi0jZGVmaW5lIE1TSV9BRERSX0JBU0VfSEkJCTAKLSNkZWZpbmUgTVNJX0FERFJfQkFTRV9MTwkJMHhmZWUwMDAwMAotCi0jZGVmaW5lIE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVAkyCi0jZGVmaW5lICBNU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUwJKDAgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQotI2RlZmluZQkgTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwJKDEgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQotCi0jZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKLSNkZWZpbmUgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKLQkJCQkJLyogZGVkaWNhdGVkIGNwdSAqLwotI2RlZmluZSAgTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJCSgxIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQotCQkJCQkvKiBsb3dlc3QgcHJpb3JpdHkgKi8KLQotI2RlZmluZSBNU0lfQUREUl9ERVNUX0lEX1NISUZUCQkxMgotI2RlZmluZQkgTVNJX0FERFJfREVTVF9JRF9NQVNLCQkweDAwZmZmZjAKLSNkZWZpbmUgIE1TSV9BRERSX0RFU1RfSUQoZGVzdCkJCSgoKGRlc3QpIDw8IE1TSV9BRERSX0RFU1RfSURfU0hJRlQpICYgXAotCQkJCQkgTVNJX0FERFJfREVTVF9JRF9NQVNLKQotCi0jZGVmaW5lIE1TSV9BRERSX0lSX0VYVF9JTlQJCSgxIDw8IDQpCi0jZGVmaW5lIE1TSV9BRERSX0lSX1NIVgkJCSgxIDw8IDMpCi0jZGVmaW5lIE1TSV9BRERSX0lSX0lOREVYMShpbmRleCkJKChpbmRleCAmIDB4ODAwMCkgPj4gMTMpCi0jZGVmaW5lIE1TSV9BRERSX0lSX0lOREVYMihpbmRleCkJKChpbmRleCAmIDB4N2ZmZikgPDwgNSkKLSNlbmRpZiAvKiBBU01fWDg2X19NU0lERUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oIGIvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWJkMTBmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX01TUl9JTkRFWF9ICi0jZGVmaW5lIEFTTV9YODZfX01TUl9JTkRFWF9ICi0KLS8qIENQVSBtb2RlbCBzcGVjaWZpYyByZWdpc3RlciAoTVNSKSBudW1iZXJzICovCi0KLS8qIHg4Ni02NCBzcGVjaWZpYyBNU1JzICovCi0jZGVmaW5lIE1TUl9FRkVSCQkweGMwMDAwMDgwIC8qIGV4dGVuZGVkIGZlYXR1cmUgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVNSX1NUQVIJCTB4YzAwMDAwODEgLyogbGVnYWN5IG1vZGUgU1lTQ0FMTCB0YXJnZXQgKi8KLSNkZWZpbmUgTVNSX0xTVEFSCQkweGMwMDAwMDgyIC8qIGxvbmcgbW9kZSBTWVNDQUxMIHRhcmdldCAqLwotI2RlZmluZSBNU1JfQ1NUQVIJCTB4YzAwMDAwODMgLyogY29tcGF0IG1vZGUgU1lTQ0FMTCB0YXJnZXQgKi8KLSNkZWZpbmUgTVNSX1NZU0NBTExfTUFTSwkweGMwMDAwMDg0IC8qIEVGTEFHUyBtYXNrIGZvciBzeXNjYWxsICovCi0jZGVmaW5lIE1TUl9GU19CQVNFCQkweGMwMDAwMTAwIC8qIDY0Yml0IEZTIGJhc2UgKi8KLSNkZWZpbmUgTVNSX0dTX0JBU0UJCTB4YzAwMDAxMDEgLyogNjRiaXQgR1MgYmFzZSAqLwotI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JBU0UJMHhjMDAwMDEwMiAvKiBTd2FwR1MgR1Mgc2hhZG93ICovCi0KLS8qIEVGRVIgYml0czogKi8KLSNkZWZpbmUgX0VGRVJfU0NFCQkwICAvKiBTWVNDQUxML1NZU1JFVCAqLwotI2RlZmluZSBfRUZFUl9MTUUJCTggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8KLSNkZWZpbmUgX0VGRVJfTE1BCQkxMCAvKiBMb25nIG1vZGUgYWN0aXZlIChyZWFkLW9ubHkpICovCi0jZGVmaW5lIF9FRkVSX05YCQkxMSAvKiBObyBleGVjdXRlIGVuYWJsZSAqLwotCi0jZGVmaW5lIEVGRVJfU0NFCQkoMTw8X0VGRVJfU0NFKQotI2RlZmluZSBFRkVSX0xNRQkJKDE8PF9FRkVSX0xNRSkKLSNkZWZpbmUgRUZFUl9MTUEJCSgxPDxfRUZFUl9MTUEpCi0jZGVmaW5lIEVGRVJfTlgJCQkoMTw8X0VGRVJfTlgpCi0KLS8qIEludGVsIE1TUnMuIFNvbWUgYWxzbyBhdmFpbGFibGUgb24gb3RoZXIgQ1BVcyAqLwotI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMAkJMHgwMDAwMDBjMQotI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMQkJMHgwMDAwMDBjMgotI2RlZmluZSBNU1JfRlNCX0ZSRVEJCQkweDAwMDAwMGNkCi0KLSNkZWZpbmUgTVNSX01UUlJjYXAJCQkweDAwMDAwMGZlCi0jZGVmaW5lIE1TUl9JQTMyX0JCTF9DUl9DVEwJCTB4MDAwMDAxMTkKLQotI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUwkJMHgwMDAwMDE3NAotI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9FU1AJCTB4MDAwMDAxNzUKLSNkZWZpbmUgTVNSX0lBMzJfU1lTRU5URVJfRUlQCQkweDAwMDAwMTc2Ci0KLSNkZWZpbmUgTVNSX0lBMzJfTUNHX0NBUAkJMHgwMDAwMDE3OQotI2RlZmluZSBNU1JfSUEzMl9NQ0dfU1RBVFVTCQkweDAwMDAwMTdhCi0jZGVmaW5lIE1TUl9JQTMyX01DR19DVEwJCTB4MDAwMDAxN2IKLQotI2RlZmluZSBNU1JfSUEzMl9QRUJTX0VOQUJMRQkJMHgwMDAwMDNmMQotI2RlZmluZSBNU1JfSUEzMl9EU19BUkVBCQkweDAwMDAwNjAwCi0jZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTCTB4MDAwMDAzNDUKLQotI2RlZmluZSBNU1JfTVRSUmZpeDY0S18wMDAwMAkJMHgwMDAwMDI1MAotI2RlZmluZSBNU1JfTVRSUmZpeDE2S184MDAwMAkJMHgwMDAwMDI1OAotI2RlZmluZSBNU1JfTVRSUmZpeDE2S19BMDAwMAkJMHgwMDAwMDI1OQotI2RlZmluZSBNU1JfTVRSUmZpeDRLX0MwMDAwCQkweDAwMDAwMjY4Ci0jZGVmaW5lIE1TUl9NVFJSZml4NEtfQzgwMDAJCTB4MDAwMDAyNjkKLSNkZWZpbmUgTVNSX01UUlJmaXg0S19EMDAwMAkJMHgwMDAwMDI2YQotI2RlZmluZSBNU1JfTVRSUmZpeDRLX0Q4MDAwCQkweDAwMDAwMjZiCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRTAwMDAJCTB4MDAwMDAyNmMKLSNkZWZpbmUgTVNSX01UUlJmaXg0S19FODAwMAkJMHgwMDAwMDI2ZAotI2RlZmluZSBNU1JfTVRSUmZpeDRLX0YwMDAwCQkweDAwMDAwMjZlCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRjgwMDAJCTB4MDAwMDAyNmYKLSNkZWZpbmUgTVNSX01UUlJkZWZUeXBlCQkJMHgwMDAwMDJmZgotCi0jZGVmaW5lIE1TUl9JQTMyX0NSX1BBVAkJCTB4MDAwMDAyNzcKLQotI2RlZmluZSBNU1JfSUEzMl9ERUJVR0NUTE1TUgkJMHgwMDAwMDFkOQotI2RlZmluZSBNU1JfSUEzMl9MQVNUQlJBTkNIRlJPTUlQCTB4MDAwMDAxZGIKLSNkZWZpbmUgTVNSX0lBMzJfTEFTVEJSQU5DSFRPSVAJCTB4MDAwMDAxZGMKLSNkZWZpbmUgTVNSX0lBMzJfTEFTVElOVEZST01JUAkJMHgwMDAwMDFkZAotI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5UVE9JUAkJMHgwMDAwMDFkZQotCi0vKiBERUJVR0NUTE1TUiBiaXRzIChvdGhlcnMgdmFyeSBieSBtb2RlbCk6ICovCi0jZGVmaW5lIF9ERUJVR0NUTE1TUl9MQlIJMCAvKiBsYXN0IGJyYW5jaCByZWNvcmRpbmcgKi8KLSNkZWZpbmUgX0RFQlVHQ1RMTVNSX0JURgkxIC8qIHNpbmdsZS1zdGVwIG9uIGJyYW5jaGVzICovCi0KLSNkZWZpbmUgREVCVUdDVExNU1JfTEJSCQkoMVVMIDw8IF9ERUJVR0NUTE1TUl9MQlIpCi0jZGVmaW5lIERFQlVHQ1RMTVNSX0JURgkJKDFVTCA8PCBfREVCVUdDVExNU1JfQlRGKQotCi0jZGVmaW5lIE1TUl9JQTMyX01DMF9DVEwJCTB4MDAwMDA0MDAKLSNkZWZpbmUgTVNSX0lBMzJfTUMwX1NUQVRVUwkJMHgwMDAwMDQwMQotI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHgwMDAwMDQwMgotI2RlZmluZSBNU1JfSUEzMl9NQzBfTUlTQwkJMHgwMDAwMDQwMwotCi0jZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMAkJCTB4MDAwMDAwYzEKLSNkZWZpbmUgTVNSX1A2X1BFUkZDVFIxCQkJMHgwMDAwMDBjMgotI2RlZmluZSBNU1JfUDZfRVZOVFNFTDAJCQkweDAwMDAwMTg2Ci0jZGVmaW5lIE1TUl9QNl9FVk5UU0VMMQkJCTB4MDAwMDAxODcKLQotLyogQU1ENjQgTVNScy4gTm90IGNvbXBsZXRlLiBTZWUgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwgZm9yIGEgbW9yZQotICAgY29tcGxldGUgbGlzdC4gKi8KLQotI2RlZmluZSBNU1JfQU1ENjRfTkJfQ0ZHCQkweGMwMDEwMDFmCi0jZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSENUTAkJMHhjMDAxMTAzMAotI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hMSU5BRAkJMHhjMDAxMTAzMQotI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hQSFlTQUQJMHhjMDAxMTAzMgotI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BDVEwJCTB4YzAwMTEwMzMKLSNkZWZpbmUgTVNSX0FNRDY0X0lCU09QUklQCQkweGMwMDExMDM0Ci0jZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUERBVEEJCTB4YzAwMTEwMzUKLSNkZWZpbmUgTVNSX0FNRDY0X0lCU09QREFUQTIJCTB4YzAwMTEwMzYKLSNkZWZpbmUgTVNSX0FNRDY0X0lCU09QREFUQTMJCTB4YzAwMTEwMzcKLSNkZWZpbmUgTVNSX0FNRDY0X0lCU0RDTElOQUQJCTB4YzAwMTEwMzgKLSNkZWZpbmUgTVNSX0FNRDY0X0lCU0RDUEhZU0FECQkweGMwMDExMDM5Ci0jZGVmaW5lIE1TUl9BTUQ2NF9JQlNDVEwJCTB4YzAwMTEwM2EKLQotLyogRmFtIDEwaCBNU1JzICovCi0jZGVmaW5lIE1TUl9GQU0xMEhfTU1JT19DT05GX0JBU0UJMHhjMDAxMDA1OAotI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0VOQUJMRQkJKDE8PDApCi0jZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQlVTUkFOR0VfTUFTSwkweGYKLSNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9TSElGVCAyCi0jZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQkFTRV9NQVNLCTB4ZmZmZmZmZgotI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0JBU0VfU0hJRlQJMjAKLQotLyogSzggTVNScyAqLwotI2RlZmluZSBNU1JfSzhfVE9QX01FTTEJCQkweGMwMDEwMDFhCi0jZGVmaW5lIE1TUl9LOF9UT1BfTUVNMgkJCTB4YzAwMTAwMWQKLSNkZWZpbmUgTVNSX0s4X1NZU0NGRwkJCTB4YzAwMTAwMTAKLSNkZWZpbmUgTVNSX0s4X0hXQ1IJCQkweGMwMDEwMDE1Ci0jZGVmaW5lIE1TUl9LOF9JTlRfUEVORElOR19NU0cJCTB4YzAwMTAwNTUKLS8qIEMxRSBhY3RpdmUgYml0cyBpbiBpbnQgcGVuZGluZyBtZXNzYWdlICovCi0jZGVmaW5lIEs4X0lOVFBfQzFFX0FDVElWRV9NQVNLCQkweDE4MDAwMDAwCi0jZGVmaW5lIE1TUl9LOF9UU0VHX0FERFIJCTB4YzAwMTAxMTIKLSNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fRU5BQkxFCTB4MDAwNDAwMDAgLyogTXRyckZpeERyYW1FbiBiaXQgICAgKi8KLSNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fTU9ESUZZCTB4MDAwODAwMDAgLyogTXRyckZpeERyYW1Nb2RFbiBiaXQgKi8KLSNkZWZpbmUgSzhfTVRSUl9SRE1FTV9XUk1FTV9NQVNLCTB4MTgxODE4MTggLyogTWFzazogUmRNZW18V3JNZW0gICAgKi8KLQotLyogSzcgTVNScyAqLwotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAJCQkweGMwMDEwMDAwCi0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMAkJCTB4YzAwMTAwMDQKLSNkZWZpbmUgTVNSX0s3X0VWTlRTRUwxCQkJMHhjMDAxMDAwMQotI2RlZmluZSBNU1JfSzdfUEVSRkNUUjEJCQkweGMwMDEwMDA1Ci0jZGVmaW5lIE1TUl9LN19FVk5UU0VMMgkJCTB4YzAwMTAwMDIKLSNkZWZpbmUgTVNSX0s3X1BFUkZDVFIyCQkJMHhjMDAxMDAwNgotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMJCQkweGMwMDEwMDAzCi0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMwkJCTB4YzAwMTAwMDcKLSNkZWZpbmUgTVNSX0s3X0NMS19DVEwJCQkweGMwMDEwMDFiCi0jZGVmaW5lIE1TUl9LN19IV0NSCQkJMHhjMDAxMDAxNQotI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwJCTB4YzAwMTAwNDEKLSNkZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTCQkweGMwMDEwMDQyCi0KLS8qIEs2IE1TUnMgKi8KLSNkZWZpbmUgTVNSX0s2X0VGRVIJCQkweGMwMDAwMDgwCi0jZGVmaW5lIE1TUl9LNl9TVEFSCQkJMHhjMDAwMDA4MQotI2RlZmluZSBNU1JfSzZfV0hDUgkJCTB4YzAwMDAwODIKLSNkZWZpbmUgTVNSX0s2X1VXQ0NSCQkJMHhjMDAwMDA4NQotI2RlZmluZSBNU1JfSzZfRVBNUgkJCTB4YzAwMDAwODYKLSNkZWZpbmUgTVNSX0s2X1BTT1IJCQkweGMwMDAwMDg3Ci0jZGVmaW5lIE1TUl9LNl9QRklSCQkJMHhjMDAwMDA4OAotCi0vKiBDZW50YXVyLUhhdWxzL0lEVCBkZWZpbmVkIE1TUnMuICovCi0jZGVmaW5lIE1TUl9JRFRfRkNSMQkJCTB4MDAwMDAxMDcKLSNkZWZpbmUgTVNSX0lEVF9GQ1IyCQkJMHgwMDAwMDEwOAotI2RlZmluZSBNU1JfSURUX0ZDUjMJCQkweDAwMDAwMTA5Ci0jZGVmaW5lIE1TUl9JRFRfRkNSNAkJCTB4MDAwMDAxMGEKLQotI2RlZmluZSBNU1JfSURUX01DUjAJCQkweDAwMDAwMTEwCi0jZGVmaW5lIE1TUl9JRFRfTUNSMQkJCTB4MDAwMDAxMTEKLSNkZWZpbmUgTVNSX0lEVF9NQ1IyCQkJMHgwMDAwMDExMgotI2RlZmluZSBNU1JfSURUX01DUjMJCQkweDAwMDAwMTEzCi0jZGVmaW5lIE1TUl9JRFRfTUNSNAkJCTB4MDAwMDAxMTQKLSNkZWZpbmUgTVNSX0lEVF9NQ1I1CQkJMHgwMDAwMDExNQotI2RlZmluZSBNU1JfSURUX01DUjYJCQkweDAwMDAwMTE2Ci0jZGVmaW5lIE1TUl9JRFRfTUNSNwkJCTB4MDAwMDAxMTcKLSNkZWZpbmUgTVNSX0lEVF9NQ1JfQ1RSTAkJMHgwMDAwMDEyMAotCi0vKiBWSUEgQ3lyaXggZGVmaW5lZCBNU1JzKi8KLSNkZWZpbmUgTVNSX1ZJQV9GQ1IJCQkweDAwMDAxMTA3Ci0jZGVmaW5lIE1TUl9WSUFfTE9OR0hBVUwJCTB4MDAwMDExMGEKLSNkZWZpbmUgTVNSX1ZJQV9STkcJCQkweDAwMDAxMTBiCi0jZGVmaW5lIE1TUl9WSUFfQkNSMgkJCTB4MDAwMDExNDcKLQotLyogVHJhbnNtZXRhIGRlZmluZWQgTVNScyAqLwotI2RlZmluZSBNU1JfVE1UQV9MT05HUlVOX0NUUkwJCTB4ODA4NjgwMTAKLSNkZWZpbmUgTVNSX1RNVEFfTE9OR1JVTl9GTEFHUwkJMHg4MDg2ODAxMQotI2RlZmluZSBNU1JfVE1UQV9MUlRJX1JFQURPVVQJCTB4ODA4NjgwMTgKLSNkZWZpbmUgTVNSX1RNVEFfTFJUSV9WT0xUX01IWgkJMHg4MDg2ODAxYQotCi0vKiBJbnRlbCBkZWZpbmVkIE1TUnMuICovCi0jZGVmaW5lIE1TUl9JQTMyX1A1X01DX0FERFIJCTB4MDAwMDAwMDAKLSNkZWZpbmUgTVNSX0lBMzJfUDVfTUNfVFlQRQkJMHgwMDAwMDAwMQotI2RlZmluZSBNU1JfSUEzMl9UU0MJCQkweDAwMDAwMDEwCi0jZGVmaW5lIE1TUl9JQTMyX1BMQVRGT1JNX0lECQkweDAwMDAwMDE3Ci0jZGVmaW5lIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OCQkweDAwMDAwMDJhCi0jZGVmaW5lIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCAgICAgICAgMHgwMDAwMDAzYQotCi0jZGVmaW5lIEZFQVRVUkVfQ09OVFJPTF9MT0NLRUQJCSgxPDwwKQotI2RlZmluZSBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRAkoMTw8MikKLQotI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRQkJMHgwMDAwMDAxYgotI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CU1AJCSgxPDw4KQotI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUJKDE8PDExKQotI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CQVNFCQkoMHhmZmZmZjw8MTIpCi0KLSNkZWZpbmUgTVNSX0lBMzJfVUNPREVfV1JJVEUJCTB4MDAwMDAwNzkKLSNkZWZpbmUgTVNSX0lBMzJfVUNPREVfUkVWCQkweDAwMDAwMDhiCi0KLSNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MDAwMDAxOTgKLSNkZWZpbmUgTVNSX0lBMzJfUEVSRl9DVEwJCTB4MDAwMDAxOTkKLQotI2RlZmluZSBNU1JfSUEzMl9NUEVSRgkJCTB4MDAwMDAwZTcKLSNkZWZpbmUgTVNSX0lBMzJfQVBFUkYJCQkweDAwMDAwMGU4Ci0KLSNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fQ09OVFJPTAkJMHgwMDAwMDE5YQotI2RlZmluZSBNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQJMHgwMDAwMDE5YgotI2RlZmluZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMJCTB4MDAwMDAxOWMKLSNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEUJCTB4MDAwMDAxYTAKLQotLyogSW50ZWwgTW9kZWwgNiAqLwotI2RlZmluZSBNU1JfUDZfRVZOVFNFTDAJCQkweDAwMDAwMTg2Ci0jZGVmaW5lIE1TUl9QNl9FVk5UU0VMMQkJCTB4MDAwMDAxODcKLQotLyogUDQvWGVvbisgc3BlY2lmaWMgKi8KLSNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWAkJMHgwMDAwMDE4MAotI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUJYCQkweDAwMDAwMTgxCi0jZGVmaW5lIE1TUl9JQTMyX01DR19FQ1gJCTB4MDAwMDAxODIKLSNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWAkJMHgwMDAwMDE4MwotI2RlZmluZSBNU1JfSUEzMl9NQ0dfRVNJCQkweDAwMDAwMTg0Ci0jZGVmaW5lIE1TUl9JQTMyX01DR19FREkJCTB4MDAwMDAxODUKLSNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCUAkJMHgwMDAwMDE4NgotI2RlZmluZSBNU1JfSUEzMl9NQ0dfRVNQCQkweDAwMDAwMTg3Ci0jZGVmaW5lIE1TUl9JQTMyX01DR19FRkxBR1MJCTB4MDAwMDAxODgKLSNkZWZpbmUgTVNSX0lBMzJfTUNHX0VJUAkJMHgwMDAwMDE4OQotI2RlZmluZSBNU1JfSUEzMl9NQ0dfUkVTRVJWRUQJCTB4MDAwMDAxOGEKLQotLyogUGVudGl1bSBJViBwZXJmb3JtYW5jZSBjb3VudGVyIE1TUnMgKi8KLSNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMAkJMHgwMDAwMDMwMAotI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIxCQkweDAwMDAwMzAxCi0jZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjIJCTB4MDAwMDAzMDIKLSNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMwkJMHgwMDAwMDMwMwotI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjAJCTB4MDAwMDAzMDQKLSNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIxCQkweDAwMDAwMzA1Ci0jZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMgkJMHgwMDAwMDMwNgotI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjMJCTB4MDAwMDAzMDcKLSNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwCQkweDAwMDAwMzA4Ci0jZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMQkJMHgwMDAwMDMwOQotI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjIJCTB4MDAwMDAzMGEKLSNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIzCQkweDAwMDAwMzBiCi0jZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMAkJMHgwMDAwMDMwYwotI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjEJCTB4MDAwMDAzMGQKLSNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIyCQkweDAwMDAwMzBlCi0jZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMwkJMHgwMDAwMDMwZgotI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjQJCTB4MDAwMDAzMTAKLSNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI1CQkweDAwMDAwMzExCi0jZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjAJCTB4MDAwMDAzNjAKLSNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMQkJMHgwMDAwMDM2MQotI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IyCQkweDAwMDAwMzYyCi0jZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjMJCTB4MDAwMDAzNjMKLSNkZWZpbmUgTVNSX1A0X01TX0NDQ1IwCQkJMHgwMDAwMDM2NAotI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjEJCQkweDAwMDAwMzY1Ci0jZGVmaW5lIE1TUl9QNF9NU19DQ0NSMgkJCTB4MDAwMDAzNjYKLSNkZWZpbmUgTVNSX1A0X01TX0NDQ1IzCQkJMHgwMDAwMDM2NwotI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjAJCTB4MDAwMDAzNjgKLSNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IxCQkweDAwMDAwMzY5Ci0jZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMgkJMHgwMDAwMDM2YQotI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjMJCTB4MDAwMDAzNmIKLSNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IwCQkJMHgwMDAwMDM2YwotI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjEJCQkweDAwMDAwMzZkCi0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMgkJCTB4MDAwMDAzNmUKLSNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IzCQkJMHgwMDAwMDM2ZgotI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjQJCQkweDAwMDAwMzcwCi0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNQkJCTB4MDAwMDAzNzEKLSNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMAkJMHgwMDAwMDNjYQotI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxCQkweDAwMDAwM2NiCi0jZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjAJCTB4MDAwMDAzYjIKLSNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMQkJMHgwMDAwMDNiMwotI2RlZmluZSBNU1JfUDRfQlNVX0VTQ1IwCQkweDAwMDAwM2EwCi0jZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjEJCTB4MDAwMDAzYTEKLSNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMAkJMHgwMDAwMDNiOAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IxCQkweDAwMDAwM2I5Ci0jZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjIJCTB4MDAwMDAzY2MKLSNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMwkJMHgwMDAwMDNjZAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I0CQkweDAwMDAwM2UwCi0jZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjUJCTB4MDAwMDAzZTEKLSNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMAkJMHgwMDAwMDNhOAotI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxCQkweDAwMDAwM2E5Ci0jZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IwCQkweDAwMDAwM2E0Ci0jZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IxCQkweDAwMDAwM2E1Ci0jZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMAkJMHgwMDAwMDNhNgotI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjEJCTB4MDAwMDAzYTcKLSNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMAkJMHgwMDAwMDNhMgotI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IxCQkweDAwMDAwM2EzCi0jZGVmaW5lIE1TUl9QNF9JUV9FU0NSMAkJCTB4MDAwMDAzYmEKLSNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IxCQkJMHgwMDAwMDNiYgotI2RlZmluZSBNU1JfUDRfSVNfRVNDUjAJCQkweDAwMDAwM2I0Ci0jZGVmaW5lIE1TUl9QNF9JU19FU0NSMQkJCTB4MDAwMDAzYjUKLSNkZWZpbmUgTVNSX1A0X0lUTEJfRVNDUjAJCTB4MDAwMDAzYjYKLSNkZWZpbmUgTVNSX1A0X0lUTEJfRVNDUjEJCTB4MDAwMDAzYjcKLSNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IwCQkJMHgwMDAwMDNjOAotI2RlZmluZSBNU1JfUDRfSVhfRVNDUjEJCQkweDAwMDAwM2M5Ci0jZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjAJCTB4MDAwMDAzYWEKLSNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMQkJMHgwMDAwMDNhYgotI2RlZmluZSBNU1JfUDRfTVNfRVNDUjAJCQkweDAwMDAwM2MwCi0jZGVmaW5lIE1TUl9QNF9NU19FU0NSMQkJCTB4MDAwMDAzYzEKLSNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMAkJMHgwMDAwMDNhYwotI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IxCQkweDAwMDAwM2FkCi0jZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjAJCTB4MDAwMDAzYmMKLSNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMQkJMHgwMDAwMDNiZAotI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMAkJMHgwMDAwMDNhZQotI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMQkJMHgwMDAwMDNhZgotI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IwCQkweDAwMDAwM2JlCi0jZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjEJCTB4MDAwMDAzYmYgLyogZ3Vlc3M6IG5vdCBpbiBtYW51YWwgKi8KLQotI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMAkJMHgwMDAwMDNjMgotI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMQkJMHgwMDAwMDNjMwotI2RlZmluZSBNU1JfUDRfVENfRVNDUjAJCQkweDAwMDAwM2M0Ci0jZGVmaW5lIE1TUl9QNF9UQ19FU0NSMQkJCTB4MDAwMDAzYzUKLSNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMAkJMHgwMDAwMDNiMAotI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IxCQkweDAwMDAwM2IxCi0KLS8qIEludGVsIENvcmUtYmFzZWQgQ1BVIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovCi0jZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMAkweDAwMDAwMzA5Ci0jZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMQkweDAwMDAwMzBhCi0jZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMgkweDAwMDAwMzBiCi0jZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwJMHgwMDAwMDM4ZAotI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMJMHgwMDAwMDM4ZQotI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMCTB4MDAwMDAzOGYKLSNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwJMHgwMDAwMDM5MAotCi0vKiBHZW9kZSBkZWZpbmVkIE1TUnMgKi8KLSNkZWZpbmUgTVNSX0dFT0RFX0JVU0NPTlRfQ09ORjAJCTB4MDAwMDE5MDAKLQotLyogSW50ZWwgVlQgTVNScyAqLwotI2RlZmluZSBNU1JfSUEzMl9WTVhfQkFTSUMgICAgICAgICAgICAgIDB4MDAwMDA0ODAKLSNkZWZpbmUgTVNSX0lBMzJfVk1YX1BJTkJBU0VEX0NUTFMgICAgICAweDAwMDAwNDgxCi0jZGVmaW5lIE1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUyAgICAgMHgwMDAwMDQ4MgotI2RlZmluZSBNU1JfSUEzMl9WTVhfRVhJVF9DVExTICAgICAgICAgIDB4MDAwMDA0ODMKLSNkZWZpbmUgTVNSX0lBMzJfVk1YX0VOVFJZX0NUTFMgICAgICAgICAweDAwMDAwNDg0Ci0jZGVmaW5lIE1TUl9JQTMyX1ZNWF9NSVNDICAgICAgICAgICAgICAgMHgwMDAwMDQ4NQotI2RlZmluZSBNU1JfSUEzMl9WTVhfQ1IwX0ZJWEVEMCAgICAgICAgIDB4MDAwMDA0ODYKLSNkZWZpbmUgTVNSX0lBMzJfVk1YX0NSMF9GSVhFRDEgICAgICAgICAweDAwMDAwNDg3Ci0jZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjRfRklYRUQwICAgICAgICAgMHgwMDAwMDQ4OAotI2RlZmluZSBNU1JfSUEzMl9WTVhfQ1I0X0ZJWEVEMSAgICAgICAgIDB4MDAwMDA0ODkKLSNkZWZpbmUgTVNSX0lBMzJfVk1YX1ZNQ1NfRU5VTSAgICAgICAgICAweDAwMDAwNDhhCi0jZGVmaW5lIE1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUzIgICAgMHgwMDAwMDQ4YgotI2RlZmluZSBNU1JfSUEzMl9WTVhfRVBUX1ZQSURfQ0FQICAgICAgIDB4MDAwMDA0OGMKLQotI2VuZGlmIC8qIEFTTV9YODZfX01TUl9JTkRFWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXNyLmggYi9pbmNsdWRlL2FzbS14ODYvbXNyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMGFmMWYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21zci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTVNSX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTVNSX0gKLQotI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbmRpZgotCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3JlYWRfdHNjcCh1bnNpZ25lZCBpbnQgKmF1eCkKLXsKLQl1bnNpZ25lZCBsb25nIGxvdywgaGlnaDsKLQlhc20gdm9sYXRpbGUoIi5ieXRlIDB4MGYsMHgwMSwweGY5IgotCQkgICAgIDogIj1hIiAobG93KSwgIj1kIiAoaGlnaCksICI9YyIgKCphdXgpKTsKLQlyZXR1cm4gbG93IHwgKCh1NjQpaGlnaCA8PCAzMik7Ci19Ci0KLS8qCi0gKiBpMzg2IGNhbGxpbmcgY29udmVudGlvbiByZXR1cm5zIDY0LWJpdCB2YWx1ZSBpbiBlZHg6ZWF4LCB3aGlsZQotICogeDg2XzY0IHJldHVybnMgYXQgcmF4LiBBbHNvLCB0aGUgIkEiIGNvbnN0cmFpbnQgZG9lcyBub3QgcmVhbGx5Ci0gKiBtZWFuIHJkeDpyYXggaW4geDg2XzY0LCBzbyB3ZSBuZWVkIHNwZWNpYWxpemVkIGJlaGF2aW91ciBmb3IgZWFjaAotICogYXJjaGl0ZWN0dXJlCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIERFQ0xBUkVfQVJHUyh2YWwsIGxvdywgaGlnaCkJdW5zaWduZWQgbG93LCBoaWdoCi0jZGVmaW5lIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKQkoKGxvdykgfCAoKHU2NCkoaGlnaCkgPDwgMzIpKQotI2RlZmluZSBFQVhfRURYX0FSR1ModmFsLCBsb3csIGhpZ2gpCSJhIiAobG93KSwgImQiIChoaWdoKQotI2RlZmluZSBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkJIj1hIiAobG93KSwgIj1kIiAoaGlnaCkKLSNlbHNlCi0jZGVmaW5lIERFQ0xBUkVfQVJHUyh2YWwsIGxvdywgaGlnaCkJdW5zaWduZWQgbG9uZyBsb25nIHZhbAotI2RlZmluZSBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCkJKHZhbCkKLSNkZWZpbmUgRUFYX0VEWF9BUkdTKHZhbCwgbG93LCBoaWdoKQkiQSIgKHZhbCkKLSNkZWZpbmUgRUFYX0VEWF9SRVQodmFsLCBsb3csIGhpZ2gpCSI9QSIgKHZhbCkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF9tc3IodW5zaWduZWQgaW50IG1zcikKLXsKLQlERUNMQVJFX0FSR1ModmFsLCBsb3csIGhpZ2gpOwotCi0JYXNtIHZvbGF0aWxlKCJyZG1zciIgOiBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkgOiAiYyIgKG1zcikpOwotCXJldHVybiBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX21zcl9zYWZlKHVuc2lnbmVkIGludCBtc3IsCi0JCQkJCQkgICAgICBpbnQgKmVycikKLXsKLQlERUNMQVJFX0FSR1ModmFsLCBsb3csIGhpZ2gpOwotCi0JYXNtIHZvbGF0aWxlKCIyOiByZG1zciA7IHhvciAlW2Vycl0sJVtlcnJdXG4iCi0JCSAgICAgIjE6XG5cdCIKLQkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuXHQiCi0JCSAgICAgIjM6ICBtb3YgJVtmYXVsdF0sJVtlcnJdIDsgam1wIDFiXG5cdCIKLQkJICAgICAiLnByZXZpb3VzXG5cdCIKLQkJICAgICBfQVNNX0VYVEFCTEUoMmIsIDNiKQotCQkgICAgIDogW2Vycl0gIj1yIiAoKmVyciksIEVBWF9FRFhfUkVUKHZhbCwgbG93LCBoaWdoKQotCQkgICAgIDogImMiIChtc3IpLCBbZmF1bHRdICJpIiAoLUVGQVVMVCkpOwotCXJldHVybiBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX21zcl9hbWRfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLAotCQkJCQkJICAgICAgaW50ICplcnIpCi17Ci0JREVDTEFSRV9BUkdTKHZhbCwgbG93LCBoaWdoKTsKLQotCWFzbSB2b2xhdGlsZSgiMjogcmRtc3IgOyB4b3IgJTAsJTBcbiIKLQkJICAgICAiMTpcblx0IgotCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cdCIKLQkJICAgICAiMzogIG1vdiAlMywlMCA7IGptcCAxYlxuXHQiCi0JCSAgICAgIi5wcmV2aW91c1xuXHQiCi0JCSAgICAgX0FTTV9FWFRBQkxFKDJiLCAzYikKLQkJICAgICA6ICI9ciIgKCplcnIpLCBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkKLQkJICAgICA6ICJjIiAobXNyKSwgIkQiICgweDljNWEyMDNhKSwgImkiICgtRUZBVUxUKSk7Ci0JcmV0dXJuIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9tc3IodW5zaWduZWQgaW50IG1zciwKLQkJCQkgICAgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKQotewotCWFzbSB2b2xhdGlsZSgid3Jtc3IiIDogOiAiYyIgKG1zciksICJhIihsb3cpLCAiZCIgKGhpZ2gpIDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBuYXRpdmVfd3JpdGVfbXNyX3NhZmUodW5zaWduZWQgaW50IG1zciwKLQkJCQkJdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKQotewotCWludCBlcnI7Ci0JYXNtIHZvbGF0aWxlKCIyOiB3cm1zciA7IHhvciAlW2Vycl0sJVtlcnJdXG4iCi0JCSAgICAgIjE6XG5cdCIKLQkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuXHQiCi0JCSAgICAgIjM6ICBtb3YgJVtmYXVsdF0sJVtlcnJdIDsgam1wIDFiXG5cdCIKLQkJICAgICAiLnByZXZpb3VzXG5cdCIKLQkJICAgICBfQVNNX0VYVEFCTEUoMmIsIDNiKQotCQkgICAgIDogW2Vycl0gIj1hIiAoZXJyKQotCQkgICAgIDogImMiIChtc3IpLCAiMCIgKGxvdyksICJkIiAoaGlnaCksCi0JCSAgICAgICBbZmF1bHRdICJpIiAoLUVGQVVMVCkKLQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gZXJyOwotfQotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX3RzYyh2b2lkKTsKLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX19uYXRpdmVfcmVhZF90c2Modm9pZCkKLXsKLQlERUNMQVJFX0FSR1ModmFsLCBsb3csIGhpZ2gpOwotCi0JcmR0c2NfYmFycmllcigpOwotCWFzbSB2b2xhdGlsZSgicmR0c2MiIDogRUFYX0VEWF9SRVQodmFsLCBsb3csIGhpZ2gpKTsKLQlyZHRzY19iYXJyaWVyKCk7Ci0KLQlyZXR1cm4gRUFYX0VEWF9WQUwodmFsLCBsb3csIGhpZ2gpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF9wbWMoaW50IGNvdW50ZXIpCi17Ci0JREVDTEFSRV9BUkdTKHZhbCwgbG93LCBoaWdoKTsKLQotCWFzbSB2b2xhdGlsZSgicmRwbWMiIDogRUFYX0VEWF9SRVQodmFsLCBsb3csIGhpZ2gpIDogImMiIChjb3VudGVyKSk7Ci0JcmV0dXJuIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKTsKLX0KLQotI2lmZGVmIENPTkZJR19QQVJBVklSVAotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotLyoKLSAqIEFjY2VzcyB0byBtYWNoaW5lLXNwZWNpZmljIHJlZ2lzdGVycyAoYXZhaWxhYmxlIG9uIDU4NiBhbmQgYmV0dGVyIG9ubHkpCi0gKiBOb3RlOiB0aGUgcmQqIG9wZXJhdGlvbnMgbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIGRpcmVjdGx5ICh3aXRob3V0IHVzaW5nCi0gKiBwb2ludGVyIGluZGlyZWN0aW9uKSwgdGhpcyBhbGxvd3MgZ2NjIHRvIG9wdGltaXplIGJldHRlcgotICovCi0KLSNkZWZpbmUgcmRtc3IobXNyLCB2YWwxLCB2YWwyKQkJCQkJXAotZG8gewkJCQkJCQkJXAotCXU2NCBfX3ZhbCA9IG5hdGl2ZV9yZWFkX21zcigobXNyKSk7CQkJXAotCSh2YWwxKSA9ICh1MzIpX192YWw7CQkJCQlcCi0JKHZhbDIpID0gKHUzMikoX192YWwgPj4gMzIpOwkJCQlcCi19IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3Jtc3IodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpCi17Ci0JbmF0aXZlX3dyaXRlX21zcihtc3IsIGxvdywgaGlnaCk7Ci19Ci0KLSNkZWZpbmUgcmRtc3JsKG1zciwgdmFsKQkJCVwKLQkoKHZhbCkgPSBuYXRpdmVfcmVhZF9tc3IoKG1zcikpKQotCi0jZGVmaW5lIHdybXNybChtc3IsIHZhbCkJCQkJCQlcCi0JbmF0aXZlX3dyaXRlX21zcigobXNyKSwgKHUzMikoKHU2NCkodmFsKSksICh1MzIpKCh1NjQpKHZhbCkgPj4gMzIpKQotCi0vKiB3cm1zciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyAqLwotc3RhdGljIGlubGluZSBpbnQgd3Jtc3Jfc2FmZSh1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvdywgdW5zaWduZWQgaGlnaCkKLXsKLQlyZXR1cm4gbmF0aXZlX3dyaXRlX21zcl9zYWZlKG1zciwgbG93LCBoaWdoKTsKLX0KLQotLyogcmRtc3Igd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgKi8KLSNkZWZpbmUgcmRtc3Jfc2FmZShtc3IsIHAxLCBwMikJCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50IF9fZXJyOwkJCQkJCVwKLQl1NjQgX192YWwgPSBuYXRpdmVfcmVhZF9tc3Jfc2FmZSgobXNyKSwgJl9fZXJyKTsJXAotCSgqcDEpID0gKHUzMilfX3ZhbDsJCQkJCVwKLQkoKnAyKSA9ICh1MzIpKF9fdmFsID4+IDMyKTsJCQkJXAotCV9fZXJyOwkJCQkJCQlcCi19KQotCi1zdGF0aWMgaW5saW5lIGludCByZG1zcmxfc2FmZSh1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcCkKLXsKLQlpbnQgZXJyOwotCi0JKnAgPSBuYXRpdmVfcmVhZF9tc3Jfc2FmZShtc3IsICZlcnIpOwotCXJldHVybiBlcnI7Ci19Ci1zdGF0aWMgaW5saW5lIGludCByZG1zcmxfYW1kX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCi17Ci0JaW50IGVycjsKLQotCSpwID0gbmF0aXZlX3JlYWRfbXNyX2FtZF9zYWZlKG1zciwgJmVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotI2RlZmluZSByZHRzY2wobG93KQkJCQkJCVwKLQkoKGxvdykgPSAodTMyKW5hdGl2ZV9yZWFkX3RzYygpKQotCi0jZGVmaW5lIHJkdHNjbGwodmFsKQkJCQkJCVwKLQkoKHZhbCkgPSBuYXRpdmVfcmVhZF90c2MoKSkKLQotI2RlZmluZSByZHBtYyhjb3VudGVyLCBsb3csIGhpZ2gpCQkJXAotZG8gewkJCQkJCQlcCi0JdTY0IF9sID0gbmF0aXZlX3JlYWRfcG1jKChjb3VudGVyKSk7CQlcCi0JKGxvdykgID0gKHUzMilfbDsJCQkJXAotCShoaWdoKSA9ICh1MzIpKF9sID4+IDMyKTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHJkdHNjcChsb3csIGhpZ2gsIGF1eCkJCQkJCVwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JdW5zaWduZWQgbG9uZyBsb25nIF92YWwgPSBuYXRpdmVfcmVhZF90c2NwKCYoYXV4KSk7ICAgICBcCi0JKGxvdykgPSAodTMyKV92YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKGhpZ2gpID0gKHUzMikoX3ZhbCA+PiAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHJkdHNjcGxsKHZhbCwgYXV4KSAodmFsKSA9IG5hdGl2ZV9yZWFkX3RzY3AoJihhdXgpKQotCi0jZW5kaWYJLyogIUNPTkZJR19QQVJBVklSVCAqLwotCi0KLSNkZWZpbmUgY2hlY2tpbmdfd3Jtc3JsKG1zciwgdmFsKSB3cm1zcl9zYWZlKChtc3IpLCAodTMyKSh2YWwpLAkJXAotCQkJCQkgICAgICh1MzIpKCh2YWwpID4+IDMyKSkKLQotI2RlZmluZSB3cml0ZV90c2ModmFsMSwgdmFsMikgd3Jtc3IoMHgxMCwgKHZhbDEpLCAodmFsMikpCi0KLSNkZWZpbmUgd3JpdGVfcmR0c2NwX2F1eCh2YWwpIHdybXNyKDB4YzAwMDAxMDMsICh2YWwpLCAwKQotCi0jaWZkZWYgQ09ORklHX1NNUAotaW50IHJkbXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCk7Ci1pbnQgd3Jtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCk7Ci1pbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpOwotaW50IHdybXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCk7Ci0jZWxzZSAgLyogIENPTkZJR19TTVAgICovCi1zdGF0aWMgaW5saW5lIGludCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCi17Ci0JcmRtc3IobXNyX25vLCAqbCwgKmgpOwotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBpbnQgd3Jtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKLXsKLQl3cm1zcihtc3Jfbm8sIGwsIGgpOwotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBpbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywKLQkJCQkgICAgdTMyICpsLCB1MzIgKmgpCi17Ci0JcmV0dXJuIHJkbXNyX3NhZmUobXNyX25vLCBsLCBoKTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IHdybXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKLXsKLQlyZXR1cm4gd3Jtc3Jfc2FmZShtc3Jfbm8sIGwsIGgpOwotfQotI2VuZGlmICAvKiBDT05GSUdfU01QICovCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0KLSNlbmRpZiAvKiBBU01fWDg2X19NU1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L210cnIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tdHJyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTdmODMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L210cnIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKiAgR2VuZXJpYyBNVFJSIChNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3RlcikgaW9jdGxzLgotCi0gICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgIFJpY2hhcmQgR29vY2gKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gICAgUmljaGFyZCBHb29jaCBtYXkgYmUgcmVhY2hlZCBieSBlbWFpbCBhdCAgcmdvb2NoQGF0bmYuY3Npcm8uYXUKLSAgICBUaGUgcG9zdGFsIGFkZHJlc3MgaXM6Ci0gICAgICBSaWNoYXJkIEdvb2NoLCBjL28gQVRORiwgUC4gTy4gQm94IDc2LCBFcHBpbmcsIE4uUy5XLiwgMjEyMSwgQXVzdHJhbGlhLgotKi8KLSNpZm5kZWYgQVNNX1g4Nl9fTVRSUl9ICi0jZGVmaW5lIEFTTV9YODZfX01UUlJfSAotCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jZGVmaW5lCU1UUlJfSU9DVExfQkFTRQknTScKLQotc3RydWN0IG10cnJfc2VudHJ5IHsKLSAgICB1bnNpZ25lZCBsb25nIGJhc2U7ICAgIC8qICBCYXNlIGFkZHJlc3MgICAgICovCi0gICAgdW5zaWduZWQgaW50IHNpemU7ICAgIC8qICBTaXplIG9mIHJlZ2lvbiAgICovCi0gICAgdW5zaWduZWQgaW50IHR5cGU7ICAgICAvKiAgVHlwZSBvZiByZWdpb24gICAqLwotfTsKLQotLyogV2FybmluZzogdGhpcyBzdHJ1Y3R1cmUgaGFzIGEgZGlmZmVyZW50IG9yZGVyIGZyb20gaTM4NgotICAgb24geDg2LTY0LiBUaGUgMzJiaXQgZW11bGF0aW9uIGNvZGUgdGFrZXMgY2FyZSBvZiB0aGF0LgotICAgQnV0IHlvdSBuZWVkIHRvIHVzZSB0aGlzIGZvciA2NGJpdCwgb3RoZXJ3aXNlIHlvdXIgWCBzZXJ2ZXIKLSAgIHdpbGwgYnJlYWsuICovCi0KLSNpZmRlZiBfX2kzODZfXwotc3RydWN0IG10cnJfZ2VudHJ5IHsKLSAgICB1bnNpZ25lZCBpbnQgcmVnbnVtOyAgIC8qICBSZWdpc3RlciBudW1iZXIgICovCi0gICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLwotICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLwotICAgIHVuc2lnbmVkIGludCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KLX07Ci0KLSNlbHNlIC8qIF9faTM4Nl9fICovCi0KLXN0cnVjdCBtdHJyX2dlbnRyeSB7Ci0gICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLwotICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLwotICAgIHVuc2lnbmVkIGludCByZWdudW07ICAgLyogIFJlZ2lzdGVyIG51bWJlciAgKi8KLSAgICB1bnNpZ25lZCBpbnQgdHlwZTsgICAgIC8qICBUeXBlIG9mIHJlZ2lvbiAgICovCi19OwotI2VuZGlmIC8qICFfX2kzODZfXyAqLwotCi0vKiAgVGhlc2UgYXJlIHRoZSB2YXJpb3VzIGlvY3RscyAgKi8KLSNkZWZpbmUgTVRSUklPQ19BRERfRU5UUlkgICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMCwgc3RydWN0IG10cnJfc2VudHJ5KQotI2RlZmluZSBNVFJSSU9DX1NFVF9FTlRSWSAgICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICAxLCBzdHJ1Y3QgbXRycl9zZW50cnkpCi0jZGVmaW5lIE1UUlJJT0NfREVMX0VOVFJZICAgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDIsIHN0cnVjdCBtdHJyX3NlbnRyeSkKLSNkZWZpbmUgTVRSUklPQ19HRVRfRU5UUlkgICAgICAgIF9JT1dSKE1UUlJfSU9DVExfQkFTRSwgMywgc3RydWN0IG10cnJfZ2VudHJ5KQotI2RlZmluZSBNVFJSSU9DX0tJTExfRU5UUlkgICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA0LCBzdHJ1Y3QgbXRycl9zZW50cnkpCi0jZGVmaW5lIE1UUlJJT0NfQUREX1BBR0VfRU5UUlkgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDUsIHN0cnVjdCBtdHJyX3NlbnRyeSkKLSNkZWZpbmUgTVRSUklPQ19TRVRfUEFHRV9FTlRSWSAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNiwgc3RydWN0IG10cnJfc2VudHJ5KQotI2RlZmluZSBNVFJSSU9DX0RFTF9QQUdFX0VOVFJZICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA3LCBzdHJ1Y3QgbXRycl9zZW50cnkpCi0jZGVmaW5lIE1UUlJJT0NfR0VUX1BBR0VfRU5UUlkgICBfSU9XUihNVFJSX0lPQ1RMX0JBU0UsIDgsIHN0cnVjdCBtdHJyX2dlbnRyeSkKLSNkZWZpbmUgTVRSUklPQ19LSUxMX1BBR0VfRU5UUlkgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgOSwgc3RydWN0IG10cnJfc2VudHJ5KQotCi0vKiAgVGhlc2UgYXJlIHRoZSByZWdpb24gdHlwZXMgICovCi0jZGVmaW5lIE1UUlJfVFlQRV9VTkNBQ0hBQkxFIDAKLSNkZWZpbmUgTVRSUl9UWVBFX1dSQ09NQiAgICAgMQotLyojZGVmaW5lIE1UUlJfVFlQRV8gICAgICAgICAyKi8KLS8qI2RlZmluZSBNVFJSX1RZUEVfICAgICAgICAgMyovCi0jZGVmaW5lIE1UUlJfVFlQRV9XUlRIUk9VR0ggIDQKLSNkZWZpbmUgTVRSUl9UWVBFX1dSUFJPVCAgICAgNQotI2RlZmluZSBNVFJSX1RZUEVfV1JCQUNLICAgICA2Ci0jZGVmaW5lIE1UUlJfTlVNX1RZUEVTICAgICAgIDcKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyogIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBmb3IgdXNlIGJ5IG90aGVyIGRyaXZlcnMgICovCi0jIGlmZGVmIENPTkZJR19NVFJSCi1leHRlcm4gdTggbXRycl90eXBlX2xvb2t1cCh1NjQgYWRkciwgdTY0IGVuZCk7Ci1leHRlcm4gdm9pZCBtdHJyX3NhdmVfZml4ZWRfcmFuZ2VzKHZvaWQgKik7Ci1leHRlcm4gdm9pZCBtdHJyX3NhdmVfc3RhdGUodm9pZCk7Ci1leHRlcm4gaW50IG10cnJfYWRkKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkgICAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KTsKLWV4dGVybiBpbnQgbXRycl9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBpbmNyZW1lbnQpOwotZXh0ZXJuIGludCBtdHJyX2RlbChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gaW50IG10cnJfZGVsX3BhZ2UoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgbXRycl9jZW50YXVyX3JlcG9ydF9tY3IoaW50IG1jciwgdTMyIGxvLCB1MzIgaGkpOwotZXh0ZXJuIHZvaWQgbXRycl9hcF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbXRycl9icF9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7Ci1leHRlcm4gaW50IGFtZF9zcGVjaWFsX2RlZmF1bHRfbXRycih2b2lkKTsKLSMgIGVsc2UKLXN0YXRpYyBpbmxpbmUgdTggbXRycl90eXBlX2xvb2t1cCh1NjQgYWRkciwgdTY0IGVuZCkKLXsKLQkvKgotCSAqIFJldHVybiBuby1NVFJSczoKLQkgKi8KLQlyZXR1cm4gMHhmZjsKLX0KLSNkZWZpbmUgbXRycl9zYXZlX2ZpeGVkX3JhbmdlcyhhcmcpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBtdHJyX3NhdmVfc3RhdGUoKSBkbyB7fSB3aGlsZSAoMCkKLXN0YXRpYyBpbmxpbmUgaW50IG10cnJfYWRkKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KQotewotICAgIHJldHVybiAtRU5PREVWOwotfQotc3RhdGljIGlubGluZSBpbnQgbXRycl9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQl1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBpbmNyZW1lbnQpCi17Ci0gICAgcmV0dXJuIC1FTk9ERVY7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBtdHJyX2RlbChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLSAgICByZXR1cm4gLUVOT0RFVjsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IG10cnJfZGVsX3BhZ2UoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0gICAgcmV0dXJuIC1FTk9ERVY7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdHJyX2NlbnRhdXJfcmVwb3J0X21jcihpbnQgbWNyLCB1MzIgbG8sIHUzMiBoaSkKLXsKLX0KLQotI2RlZmluZSBtdHJyX2FwX2luaXQoKSBkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgbXRycl9icF9pbml0KCkgZG8ge30gd2hpbGUgKDApCi0jICBlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotCi1zdHJ1Y3QgbXRycl9zZW50cnkzMiB7Ci0gICAgY29tcGF0X3Vsb25nX3QgYmFzZTsgICAgLyogIEJhc2UgYWRkcmVzcyAgICAgKi8KLSAgICBjb21wYXRfdWludF90IHNpemU7ICAgIC8qICBTaXplIG9mIHJlZ2lvbiAgICovCi0gICAgY29tcGF0X3VpbnRfdCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KLX07Ci0KLXN0cnVjdCBtdHJyX2dlbnRyeTMyIHsKLSAgICBjb21wYXRfdWxvbmdfdCByZWdudW07ICAgLyogIFJlZ2lzdGVyIG51bWJlciAgKi8KLSAgICBjb21wYXRfdWludF90IGJhc2U7ICAgIC8qICBCYXNlIGFkZHJlc3MgICAgICovCi0gICAgY29tcGF0X3VpbnRfdCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLwotICAgIGNvbXBhdF91aW50X3QgdHlwZTsgICAgIC8qICBUeXBlIG9mIHJlZ2lvbiAgICovCi19OwotCi0jZGVmaW5lIE1UUlJfSU9DVExfQkFTRSAnTScKLQotI2RlZmluZSBNVFJSSU9DMzJfQUREX0VOVFJZICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICAwLCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKLSNkZWZpbmUgTVRSUklPQzMyX1NFVF9FTlRSWSAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9ERUxfRU5UUlkgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDIsIHN0cnVjdCBtdHJyX3NlbnRyeTMyKQotI2RlZmluZSBNVFJSSU9DMzJfR0VUX0VOVFJZICAgICAgX0lPV1IoTVRSUl9JT0NUTF9CQVNFLCAzLCBzdHJ1Y3QgbXRycl9nZW50cnkzMikKLSNkZWZpbmUgTVRSUklPQzMyX0tJTExfRU5UUlkgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNCwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9BRERfUEFHRV9FTlRSWSBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDUsIHN0cnVjdCBtdHJyX3NlbnRyeTMyKQotI2RlZmluZSBNVFJSSU9DMzJfU0VUX1BBR0VfRU5UUlkgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA2LCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKLSNkZWZpbmUgTVRSUklPQzMyX0RFTF9QQUdFX0VOVFJZIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNywgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9HRVRfUEFHRV9FTlRSWSBfSU9XUihNVFJSX0lPQ1RMX0JBU0UsIDgsIHN0cnVjdCBtdHJyX2dlbnRyeTMyKQotI2RlZmluZSBNVFJSSU9DMzJfS0lMTF9QQUdFX0VOVFJZCQlcCi0JCQkJIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgOSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTVRSUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXV0ZXhfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tdXRleF8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWMxNmQ4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tdXRleF8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0gKiBBc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbXV0ZXggZmFzdHBhdGgsIGJhc2VkIG9uIGF0b21pYwotICogZGVjcmVtZW50L2luY3JlbWVudC4KLSAqCi0gKiBzdGFydGVkIGJ5IEluZ28gTW9sbmFyOgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKi8KLSNpZm5kZWYgQVNNX1g4Nl9fTVVURVhfMzJfSAotI2RlZmluZSBBU01fWDg2X19NVVRFWF8zMl9ICi0KLSNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KLQotLyoqCi0gKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrIC0gdHJ5IHRvIHRha2UgdGhlIGxvY2sgYnkgbW92aW5nIHRoZSBjb3VudAotICogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gMSB0byBhIDAgdmFsdWUKLSAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogIEBmbjogZnVuY3Rpb24gdG8gY2FsbCBpZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIG5vdCAxCi0gKgotICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCBjYWxsIDxmbj4gaWYgaXQKLSAqIHdhc24ndCAxIG9yaWdpbmFsbHkuIFRoaXMgZnVuY3Rpb24gTVVTVCBsZWF2ZSB0aGUgdmFsdWUgbG93ZXIgdGhhbiAxCi0gKiBldmVuIHdoZW4gdGhlICIxIiBhc3NlcnRpb24gd2Fzbid0IHRydWUuCi0gKi8KLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF9sb2NrKGNvdW50LCBmYWlsX2ZuKQkJCVwKLWRvIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgZHVtbXk7CQkJCQlcCi0JCQkJCQkJCVwKLQl0eXBlY2hlY2soYXRvbWljX3QgKiwgY291bnQpOwkJCQlcCi0JdHlwZWNoZWNrX2ZuKHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKLQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiICAgZGVjbCAoJSVlYXgpXG4iCQlcCi0JCSAgICAgIiAgIGpucyAxZglcbiIJCQkJXAotCQkgICAgICIgICBjYWxsICIgI2ZhaWxfZm4gIlxuIgkJCVwKLQkJICAgICAiMTpcbiIJCQkJCVwKLQkJICAgICA6ICI9YSIgKGR1bW15KQkJCQlcCi0JCSAgICAgOiAiYSIgKGNvdW50KQkJCQlcCi0JCSAgICAgOiAibWVtb3J5IiwgImVjeCIsICJlZHgiKTsJCQlcCi19IHdoaWxlICgwKQotCi0KLS8qKgotICogIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwgLSB0cnkgdG8gdGFrZSB0aGUgbG9jayBieSBtb3ZpbmcgdGhlIGNvdW50Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gMSB0byBhIDAgdmFsdWUKLSAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBvcmlnaW5hbCB2YWx1ZSB3YXMgbm90IDEKLSAqCi0gKiBDaGFuZ2UgdGhlIGNvdW50IGZyb20gMSB0byBhIHZhbHVlIGxvd2VyIHRoYW4gMSwgYW5kIGNhbGwgPGZhaWxfZm4+IGlmIGl0Ci0gKiB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgZmFzdHBhdGggc3VjY2VlZHMsCi0gKiBvciBhbnl0aGluZyB0aGUgc2xvdyBwYXRoIGZ1bmN0aW9uIHJldHVybnMKLSAqLwotc3RhdGljIGlubGluZSBpbnQgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbChhdG9taWNfdCAqY291bnQsCi0JCQkJCSAgICAgICBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKLXsKLQlpZiAodW5saWtlbHkoYXRvbWljX2RlY19yZXR1cm4oY291bnQpIDwgMCkpCi0JCXJldHVybiBmYWlsX2ZuKGNvdW50KTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0vKioKLSAqICBfX211dGV4X2Zhc3RwYXRoX3VubG9jayAtIHRyeSB0byBwcm9tb3RlIHRoZSBtdXRleCBmcm9tIDAgdG8gMQotICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiAgQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBub3QgMAotICoKLSAqIHRyeSB0byBwcm9tb3RlIHRoZSBtdXRleCBmcm9tIDAgdG8gMS4gaWYgaXQgd2Fzbid0IDAsIGNhbGwgPGZhaWxfZm4+LgotICogSW4gdGhlIGZhaWx1cmUgY2FzZSwgdGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIGVpdGhlciBzZXQgdGhlIHZhbHVlCi0gKiB0byAxLCBvciB0byBzZXQgaXQgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEuCi0gKgotICogSWYgdGhlIGltcGxlbWVudGF0aW9uIHNldHMgaXQgdG8gYSB2YWx1ZSBvZiBsb3dlciB0aGFuIDEsIHRoZQotICogX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSBtYWNybyBuZWVkcyB0byByZXR1cm4gMSwgaXQgbmVlZHMKLSAqIHRvIHJldHVybiAwIG90aGVyd2lzZS4KLSAqLwotI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayhjb3VudCwgZmFpbF9mbikJCQlcCi1kbyB7CQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IGR1bW15OwkJCQkJXAotCQkJCQkJCQlcCi0JdHlwZWNoZWNrKGF0b21pY190ICosIGNvdW50KTsJCQkJXAotCXR5cGVjaGVja19mbih2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCi0JCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIiAgIGluY2wgKCUlZWF4KVxuIgkJXAotCQkgICAgICIgICBqZwkxZlxuIgkJCQlcCi0JCSAgICAgIiAgIGNhbGwgIiAjZmFpbF9mbiAiXG4iCQkJXAotCQkgICAgICIxOlxuIgkJCQkJXAotCQkgICAgIDogIj1hIiAoZHVtbXkpCQkJCVwKLQkJICAgICA6ICJhIiAoY291bnQpCQkJCVwKLQkJICAgICA6ICJtZW1vcnkiLCAiZWN4IiwgImVkeCIpOwkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKQkxCi0KLS8qKgotICogX19tdXRleF9mYXN0cGF0aF90cnlsb2NrIC0gdHJ5IHRvIGFjcXVpcmUgdGhlIG11dGV4LCB3aXRob3V0IHdhaXRpbmcKLSAqCi0gKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqICBAZmFpbF9mbjogZmFsbGJhY2sgZnVuY3Rpb24KLSAqCi0gKiBDaGFuZ2UgdGhlIGNvdW50IGZyb20gMSB0byBhIHZhbHVlIGxvd2VyIHRoYW4gMSwgYW5kIHJldHVybiAwIChmYWlsdXJlKQotICogaWYgaXQgd2Fzbid0IDEgb3JpZ2luYWxseSwgb3IgcmV0dXJuIDEgKHN1Y2Nlc3MpIG90aGVyd2lzZS4gVGhpcyBmdW5jdGlvbgotICogTVVTVCBsZWF2ZSB0aGUgdmFsdWUgbG93ZXIgdGhhbiAxIGV2ZW4gd2hlbiB0aGUgIjEiIGFzc2VydGlvbiB3YXNuJ3QgdHJ1ZS4KLSAqIEFkZGl0aW9uYWxseSwgaWYgdGhlIHZhbHVlIHdhcyA8IDAgb3JpZ2luYWxseSwgdGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBsZWF2ZQotICogaXQgdG8gMCBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soYXRvbWljX3QgKmNvdW50LAotCQkJCQkgICBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKLXsKLQkvKgotCSAqIFdlIGhhdmUgdHdvIHZhcmlhbnRzIGhlcmUuIFRoZSBjbXB4Y2hnIGJhc2VkIG9uZSBpcyB0aGUgYmVzdCBvbmUKLQkgKiBiZWNhdXNlIGl0IG5ldmVyIGluZHVjZSBhIGZhbHNlIGNvbnRlbnRpb24gc3RhdGUuICBJdCBpcyBpbmNsdWRlZAotCSAqIGhlcmUgYmVjYXVzZSBhcmNoaXRlY3R1cmVzIHVzaW5nIHRoZSBpbmMvZGVjIGFsZ29yaXRobXMgb3ZlciB0aGUKLQkgKiB4Y2hnIG9uZXMgYXJlIG11Y2ggbW9yZSBsaWtlbHkgdG8gc3VwcG9ydCBjbXB4Y2hnIG5hdGl2ZWx5LgotCSAqCi0JICogSWYgbm90IHdlIGZhbGwgYmFjayB0byB0aGUgc3BpbmxvY2sgYmFzZWQgdmFyaWFudCAtIHRoYXQgaXMKLQkgKiBqdXN0IGFzIGVmZmljaWVudCAoYW5kIHNpbXBsZXIpIGFzIGEgJ2Rlc3RydWN0aXZlJyBwcm9iaW5nIG9mCi0JICogdGhlIG11dGV4IHN0YXRlIHdvdWxkIGJlLgotCSAqLwotI2lmZGVmIF9fSEFWRV9BUkNIX0NNUFhDSEcKLQlpZiAobGlrZWx5KGF0b21pY19jbXB4Y2hnKGNvdW50LCAxLCAwKSA9PSAxKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiBmYWlsX2ZuKGNvdW50KTsKLSNlbmRpZgotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTVVURVhfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L211dGV4XzY0LmggYi9pbmNsdWRlL2FzbS14ODYvbXV0ZXhfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE4YmEyMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbXV0ZXhfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIG11dGV4IGZhc3RwYXRoLCBiYXNlZCBvbiBhdG9taWMKLSAqIGRlY3JlbWVudC9pbmNyZW1lbnQuCi0gKgotICogc3RhcnRlZCBieSBJbmdvIE1vbG5hcjoKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICovCi0jaWZuZGVmIEFTTV9YODZfX01VVEVYXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fTVVURVhfNjRfSAotCi0vKioKLSAqIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayAtIGRlY3JlbWVudCBhbmQgY2FsbCBmdW5jdGlvbiBpZiBuZWdhdGl2ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZQotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBhbmQgY2FsbHMgPGZhaWxfZm4+IGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCi0gKi8KLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF9sb2NrKHYsIGZhaWxfZm4pCQkJXAotZG8gewkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZHVtbXk7CQkJCQlcCi0JCQkJCQkJCVwKLQl0eXBlY2hlY2soYXRvbWljX3QgKiwgdik7CQkJCVwKLQl0eXBlY2hlY2tfZm4odm9pZCAoKikoYXRvbWljX3QgKiksIGZhaWxfZm4pOwkJXAotCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICIgICBkZWNsICglJXJkaSlcbiIJCVwKLQkJICAgICAiICAgam5zIDFmCQlcbiIJCQlcCi0JCSAgICAgIiAgIGNhbGwgIiAjZmFpbF9mbiAiXG4iCQkJXAotCQkgICAgICIxOiIJCQkJCVwKLQkJICAgICA6ICI9RCIgKGR1bW15KQkJCQlcCi0JCSAgICAgOiAiRCIgKHYpCQkJCQlcCi0JCSAgICAgOiAicmF4IiwgInJzaSIsICJyZHgiLCAicmN4IiwJCVwKLQkJICAgICAgICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgIm1lbW9yeSIpOwlcCi19IHdoaWxlICgwKQotCi0vKioKLSAqICBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsIC0gdHJ5IHRvIHRha2UgdGhlIGxvY2sgYnkgbW92aW5nIHRoZSBjb3VudAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDEgdG8gYSAwIHZhbHVlCi0gKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqICBAZmFpbF9mbjogZnVuY3Rpb24gdG8gY2FsbCBpZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIG5vdCAxCi0gKgotICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCBjYWxsIDxmYWlsX2ZuPiBpZgotICogaXQgd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIGZhc3RwYXRoIHN1Y2NlZWRzLAotICogb3IgYW55dGhpbmcgdGhlIHNsb3cgcGF0aCBmdW5jdGlvbiByZXR1cm5zCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoYXRvbWljX3QgKmNvdW50LAotCQkJCQkgICAgICAgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCi17Ci0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKGNvdW50KSA8IDApKQotCQlyZXR1cm4gZmFpbF9mbihjb3VudCk7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBfX211dGV4X2Zhc3RwYXRoX3VubG9jayAtIGluY3JlbWVudCBhbmQgY2FsbCBmdW5jdGlvbiBpZiBub25wb3NpdGl2ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIHJlc3VsdCBpcyBub25wb3NpdGl2ZQotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBhbmQgY2FsbHMgPGZhaWxfZm4+IGlmIHRoZSByZXN1bHQgaXMgbm9ucG9zaXRpdmUuCi0gKi8KLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF91bmxvY2sodiwgZmFpbF9mbikJCQlcCi1kbyB7CQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBkdW1teTsJCQkJCVwKLQkJCQkJCQkJXAotCXR5cGVjaGVjayhhdG9taWNfdCAqLCB2KTsJCQkJXAotCXR5cGVjaGVja19mbih2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCi0JCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIiAgIGluY2wgKCUlcmRpKVxuIgkJXAotCQkgICAgICIgICBqZyAxZlxuIgkJCQlcCi0JCSAgICAgIiAgIGNhbGwgIiAjZmFpbF9mbiAiXG4iCQkJXAotCQkgICAgICIxOiIJCQkJCVwKLQkJICAgICA6ICI9RCIgKGR1bW15KQkJCQlcCi0JCSAgICAgOiAiRCIgKHYpCQkJCQlcCi0JCSAgICAgOiAicmF4IiwgInJzaSIsICJyZHgiLCAicmN4IiwJCVwKLQkJICAgICAgICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgIm1lbW9yeSIpOwlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkJMQotCi0vKioKLSAqIF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayAtIHRyeSB0byBhY3F1aXJlIHRoZSBtdXRleCwgd2l0aG91dCB3YWl0aW5nCi0gKgotICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiAgQGZhaWxfZm46IGZhbGxiYWNrIGZ1bmN0aW9uCi0gKgotICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gMCBhbmQgcmV0dXJuIDEgKHN1Y2Nlc3MpLCBvciByZXR1cm4gMCAoZmFpbHVyZSkKLSAqIGlmIGl0IHdhc24ndCAxIG9yaWdpbmFsbHkuIFt0aGUgZmFsbGJhY2sgZnVuY3Rpb24gaXMgbmV2ZXIgdXNlZCBvbgotICogeDg2XzY0LCBiZWNhdXNlIGFsbCB4ODZfNjQgQ1BVcyBoYXZlIGEgQ01QWENIRyBpbnN0cnVjdGlvbi5dCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsCi0JCQkJCSAgIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQotewotCWlmIChsaWtlbHkoYXRvbWljX2NtcHhjaGcoY291bnQsIDEsIDApID09IDEpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTVVURVhfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L25taS5oIGIvaW5jbHVkZS9hc20teDg2L25taS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTNmODI5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9ubWkuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTk1JX0gKLSNkZWZpbmUgQVNNX1g4Nl9fTk1JX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaWZkZWYgQVJDSF9IQVNfTk1JX1dBVENIRE9HCi0KLS8qKgotICogZG9fbm1pX2NhbGxiYWNrCi0gKgotICogQ2hlY2sgdG8gc2VlIGlmIGEgY2FsbGJhY2sgZXhpc3RzIGFuZCBleGVjdXRlIGl0LiAgUmV0dXJuIDEKLSAqIGlmIHRoZSBoYW5kbGVyIGV4aXN0cyBhbmQgd2FzIGhhbmRsZWQgc3VjY2Vzc2Z1bGx5LgotICovCi1pbnQgZG9fbm1pX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY3B1KTsKLQotZXh0ZXJuIHZvaWQgZGllX25taShjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZG9fcGFuaWMpOwotZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCk7Ci1leHRlcm4gaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwotZXh0ZXJuIGludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQodW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgcmVzZXJ2ZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgcmVsZWFzZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIGludCByZXNlcnZlX2V2bnRzZWxfbm1pKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCByZWxlYXNlX2V2bnRzZWxfbm1pKHVuc2lnbmVkIGludCk7Ci0KLWV4dGVybiB2b2lkIHNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKHZvaWQgKik7Ci1leHRlcm4gdm9pZCBzdG9wX2FwaWNfbm1pX3dhdGNoZG9nKHZvaWQgKik7Ci1leHRlcm4gdm9pZCBkaXNhYmxlX3RpbWVyX25taV93YXRjaGRvZyh2b2lkKTsKLWV4dGVybiB2b2lkIGVuYWJsZV90aW1lcl9ubWlfd2F0Y2hkb2codm9pZCk7Ci1leHRlcm4gaW50IG5taV93YXRjaGRvZ190aWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCByZWFzb24pOwotZXh0ZXJuIHZvaWQgY3B1X25taV9zZXRfd2RfZW5hYmxlZCh2b2lkKTsKLQotZXh0ZXJuIGF0b21pY190IG5taV9hY3RpdmU7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5taV93YXRjaGRvZzsKLSNkZWZpbmUgTk1JX05PTkUJMAotI2RlZmluZSBOTUlfSU9fQVBJQwkxCi0jZGVmaW5lIE5NSV9MT0NBTF9BUElDCTIKLSNkZWZpbmUgTk1JX0lOVkFMSUQJMwotCi1zdHJ1Y3QgY3RsX3RhYmxlOwotc3RydWN0IGZpbGU7Ci1leHRlcm4gaW50IHByb2Nfbm1pX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLCBzdHJ1Y3QgZmlsZSAqLAotCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLWV4dGVybiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7Ci0KLXZvaWQgX190cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKHZvaWQpOwotI2RlZmluZSB0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkgX190cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkKLQotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsaXNlX25taV93YXRjaGRvZyh2b2lkKQotewotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpCi0JCW5taV93YXRjaGRvZyA9IE5NSV9MT0NBTF9BUElDOwotfQotCi0vKiBjaGVjayBpZiBubWlfd2F0Y2hkb2cgaXMgYWN0aXZlIChpZSB3YXMgc3BlY2lmaWVkIGF0IGJvb3QpICovCi1zdGF0aWMgaW5saW5lIGludCBubWlfd2F0Y2hkb2dfYWN0aXZlKHZvaWQpCi17Ci0JLyoKLQkgKiBhY3R1YWxseSBpdCBzaG91bGQgYmU6Ci0JICogCXJldHVybiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDIHx8Ci0JICogCQlubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpCi0JICogYnV0IHNpbmNlIHRoZXkgYXJlIHBvd2VyIG9mIHR3byB3ZSBjb3VsZCB1c2UgYQotCSAqIGNoZWFwZXIgd2F5IC0tY3ZnCi0JICovCi0JcmV0dXJuIG5taV93YXRjaGRvZyAmIDB4MzsKLX0KLSNlbmRpZgotCi12b2lkIGxhcGljX3dhdGNoZG9nX3N0b3Aodm9pZCk7Ci1pbnQgbGFwaWNfd2F0Y2hkb2dfaW5pdCh1bnNpZ25lZCBubWlfaHopOwotaW50IGxhcGljX3dkX2V2ZW50KHVuc2lnbmVkIG5taV9oeik7Ci11bnNpZ25lZCBsYXBpY19hZGp1c3Rfbm1pX2h6KHVuc2lnbmVkIGh6KTsKLWludCBsYXBpY193YXRjaGRvZ19vayh2b2lkKTsKLXZvaWQgZGlzYWJsZV9sYXBpY19ubWlfd2F0Y2hkb2codm9pZCk7Ci12b2lkIGVuYWJsZV9sYXBpY19ubWlfd2F0Y2hkb2codm9pZCk7Ci12b2lkIHN0b3Bfbm1pKHZvaWQpOwotdm9pZCByZXN0YXJ0X25taSh2b2lkKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX05NSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbm9wcy5oIGIvaW5jbHVkZS9hc20teDg2L25vcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3NDI3Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbm9wcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTk9QU19ICi0jZGVmaW5lIEFTTV9YODZfX05PUFNfSAotCi0vKiBEZWZpbmUgbm9wcyBmb3IgdXNlIHdpdGggYWx0ZXJuYXRpdmUoKSAqLwotCi0vKiBnZW5lcmljIHZlcnNpb25zIGZyb20gZ2FzCi0gICAxOiBub3AKLSAgIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGFyZSBOT1Qgbm9wcyBpbiA2NC1iaXQgbW9kZSwKLSAgIGZvciA2NC1iaXQgbW9kZSB1c2UgSzggb3IgUDYgbm9wcyBpbnN0ZWFkCi0gICAyOiBtb3ZsICVlc2ksJWVzaQotICAgMzogbGVhbCAweDAwKCVlc2kpLCVlc2kKLSAgIDQ6IGxlYWwgMHgwMCgsJWVzaSwxKSwlZXNpCi0gICA2OiBsZWFsIDB4MDAwMDAwMDAoJWVzaSksJWVzaQotICAgNzogbGVhbCAweDAwMDAwMDAwKCwlZXNpLDEpLCVlc2kKLSovCi0jZGVmaW5lIEdFTkVSSUNfTk9QMSAiLmJ5dGUgMHg5MFxuIgotI2RlZmluZSBHRU5FUklDX05PUDIgIi5ieXRlIDB4ODksMHhmNlxuIgotI2RlZmluZSBHRU5FUklDX05PUDMgIi5ieXRlIDB4OGQsMHg3NiwweDAwXG4iCi0jZGVmaW5lIEdFTkVSSUNfTk9QNCAiLmJ5dGUgMHg4ZCwweDc0LDB4MjYsMHgwMFxuIgotI2RlZmluZSBHRU5FUklDX05PUDUgR0VORVJJQ19OT1AxIEdFTkVSSUNfTk9QNAotI2RlZmluZSBHRU5FUklDX05PUDYgIi5ieXRlIDB4OGQsMHhiNiwweDAwLDB4MDAsMHgwMCwweDAwXG4iCi0jZGVmaW5lIEdFTkVSSUNfTk9QNyAiLmJ5dGUgMHg4ZCwweGI0LDB4MjYsMHgwMCwweDAwLDB4MDAsMHgwMFxuIgotI2RlZmluZSBHRU5FUklDX05PUDggR0VORVJJQ19OT1AxIEdFTkVSSUNfTk9QNwotCi0vKiBPcHRlcm9uIDY0Yml0IG5vcHMKLSAgIDE6IG5vcAotICAgMjogb3NwIG5vcAotICAgMzogb3NwIG9zcCBub3AKLSAgIDQ6IG9zcCBvc3Agb3NwIG5vcAotKi8KLSNkZWZpbmUgSzhfTk9QMSBHRU5FUklDX05PUDEKLSNkZWZpbmUgSzhfTk9QMgkiLmJ5dGUgMHg2NiwweDkwXG4iCi0jZGVmaW5lIEs4X05PUDMJIi5ieXRlIDB4NjYsMHg2NiwweDkwXG4iCi0jZGVmaW5lIEs4X05PUDQJIi5ieXRlIDB4NjYsMHg2NiwweDY2LDB4OTBcbiIKLSNkZWZpbmUgSzhfTk9QNQlLOF9OT1AzIEs4X05PUDIKLSNkZWZpbmUgSzhfTk9QNglLOF9OT1AzIEs4X05PUDMKLSNkZWZpbmUgSzhfTk9QNwlLOF9OT1A0IEs4X05PUDMKLSNkZWZpbmUgSzhfTk9QOAlLOF9OT1A0IEs4X05PUDQKLQotLyogSzcgbm9wcwotICAgdXNlcyBlYXggZGVwZW5kZW5jaWVzIChhcmJpdGFyeSBjaG9pY2UpCi0gICAxOiBub3AKLSAgIDI6IG1vdmwgJWVheCwlZWF4Ci0gICAzOiBsZWFsICgsJWVheCwxKSwlZWF4Ci0gICA0OiBsZWFsIDB4MDAoLCVlYXgsMSksJWVheAotICAgNjogbGVhbCAweDAwMDAwMDAwKCVlYXgpLCVlYXgKLSAgIDc6IGxlYWwgMHgwMDAwMDAwMCgsJWVheCwxKSwlZWF4Ci0qLwotI2RlZmluZSBLN19OT1AxCUdFTkVSSUNfTk9QMQotI2RlZmluZSBLN19OT1AyCSIuYnl0ZSAweDhiLDB4YzBcbiIKLSNkZWZpbmUgSzdfTk9QMwkiLmJ5dGUgMHg4ZCwweDA0LDB4MjBcbiIKLSNkZWZpbmUgSzdfTk9QNAkiLmJ5dGUgMHg4ZCwweDQ0LDB4MjAsMHgwMFxuIgotI2RlZmluZSBLN19OT1A1CUs3X05PUDQgQVNNX05PUDEKLSNkZWZpbmUgSzdfTk9QNgkiLmJ5dGUgMHg4ZCwweDgwLDAsMCwwLDBcbiIKLSNkZWZpbmUgSzdfTk9QNwkiLmJ5dGUgMHg4RCwweDA0LDB4MDUsMCwwLDAsMFxuIgotI2RlZmluZSBLN19OT1A4CUs3X05PUDcgQVNNX05PUDEKLQotLyogUDYgbm9wcwotICAgdXNlcyBlYXggZGVwZW5kZW5jaWVzIChJbnRlbC1yZWNvbW1lbmRlZCBjaG9pY2UpCi0gICAxOiBub3AKLSAgIDI6IG9zcCBub3AKLSAgIDM6IG5vcGwgKCVlYXgpCi0gICA0OiBub3BsIDB4MDAoJWVheCkKLSAgIDU6IG5vcGwgMHgwMCglZWF4LCVlYXgsMSkKLSAgIDY6IG9zcCBub3BsIDB4MDAoJWVheCwlZWF4LDEpCi0gICA3OiBub3BsIDB4MDAwMDAwMDAoJWVheCkKLSAgIDg6IG5vcGwgMHgwMDAwMDAwMCglZWF4LCVlYXgsMSkKLSovCi0jZGVmaW5lIFA2X05PUDEJR0VORVJJQ19OT1AxCi0jZGVmaW5lIFA2X05PUDIJIi5ieXRlIDB4NjYsMHg5MFxuIgotI2RlZmluZSBQNl9OT1AzCSIuYnl0ZSAweDBmLDB4MWYsMHgwMFxuIgotI2RlZmluZSBQNl9OT1A0CSIuYnl0ZSAweDBmLDB4MWYsMHg0MCwwXG4iCi0jZGVmaW5lIFA2X05PUDUJIi5ieXRlIDB4MGYsMHgxZiwweDQ0LDB4MDAsMFxuIgotI2RlZmluZSBQNl9OT1A2CSIuYnl0ZSAweDY2LDB4MGYsMHgxZiwweDQ0LDB4MDAsMFxuIgotI2RlZmluZSBQNl9OT1A3CSIuYnl0ZSAweDBmLDB4MWYsMHg4MCwwLDAsMCwwXG4iCi0jZGVmaW5lIFA2X05PUDgJIi5ieXRlIDB4MGYsMHgxZiwweDg0LDB4MDAsMCwwLDAsMFxuIgotCi0jaWYgZGVmaW5lZChDT05GSUdfTUs3KQotI2RlZmluZSBBU01fTk9QMSBLN19OT1AxCi0jZGVmaW5lIEFTTV9OT1AyIEs3X05PUDIKLSNkZWZpbmUgQVNNX05PUDMgSzdfTk9QMwotI2RlZmluZSBBU01fTk9QNCBLN19OT1A0Ci0jZGVmaW5lIEFTTV9OT1A1IEs3X05PUDUKLSNkZWZpbmUgQVNNX05PUDYgSzdfTk9QNgotI2RlZmluZSBBU01fTk9QNyBLN19OT1A3Ci0jZGVmaW5lIEFTTV9OT1A4IEs3X05PUDgKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl9QNl9OT1ApCi0jZGVmaW5lIEFTTV9OT1AxIFA2X05PUDEKLSNkZWZpbmUgQVNNX05PUDIgUDZfTk9QMgotI2RlZmluZSBBU01fTk9QMyBQNl9OT1AzCi0jZGVmaW5lIEFTTV9OT1A0IFA2X05PUDQKLSNkZWZpbmUgQVNNX05PUDUgUDZfTk9QNQotI2RlZmluZSBBU01fTk9QNiBQNl9OT1A2Ci0jZGVmaW5lIEFTTV9OT1A3IFA2X05PUDcKLSNkZWZpbmUgQVNNX05PUDggUDZfTk9QOAotI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotI2RlZmluZSBBU01fTk9QMSBLOF9OT1AxCi0jZGVmaW5lIEFTTV9OT1AyIEs4X05PUDIKLSNkZWZpbmUgQVNNX05PUDMgSzhfTk9QMwotI2RlZmluZSBBU01fTk9QNCBLOF9OT1A0Ci0jZGVmaW5lIEFTTV9OT1A1IEs4X05PUDUKLSNkZWZpbmUgQVNNX05PUDYgSzhfTk9QNgotI2RlZmluZSBBU01fTk9QNyBLOF9OT1A3Ci0jZGVmaW5lIEFTTV9OT1A4IEs4X05PUDgKLSNlbHNlCi0jZGVmaW5lIEFTTV9OT1AxIEdFTkVSSUNfTk9QMQotI2RlZmluZSBBU01fTk9QMiBHRU5FUklDX05PUDIKLSNkZWZpbmUgQVNNX05PUDMgR0VORVJJQ19OT1AzCi0jZGVmaW5lIEFTTV9OT1A0IEdFTkVSSUNfTk9QNAotI2RlZmluZSBBU01fTk9QNSBHRU5FUklDX05PUDUKLSNkZWZpbmUgQVNNX05PUDYgR0VORVJJQ19OT1A2Ci0jZGVmaW5lIEFTTV9OT1A3IEdFTkVSSUNfTk9QNwotI2RlZmluZSBBU01fTk9QOCBHRU5FUklDX05PUDgKLSNlbmRpZgotCi0jZGVmaW5lIEFTTV9OT1BfTUFYIDgKLQotI2VuZGlmIC8qIEFTTV9YODZfX05PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L251bWFfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9udW1hXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Y2IwNzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L251bWFfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fTlVNQV8zMl9ICi0jZGVmaW5lIEFTTV9YODZfX05VTUFfMzJfSAotCi1leHRlcm4gaW50IHB4bV90b19uaWQoaW50IHB4bSk7Ci1leHRlcm4gdm9pZCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotZXh0ZXJuIHZvaWQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdCh2b2lkKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTlVNQV8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbnVtYV82NC5oIGIvaW5jbHVkZS9hc20teDg2L251bWFfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjOTkwMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbnVtYV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19OVU1BXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fTlVNQV82NF9ICi0KLSNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgotI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+Ci0KLXN0cnVjdCBib290bm9kZSB7Ci0JdTY0IHN0YXJ0OwotCXU2NCBlbmQ7Ci19OwotCi1leHRlcm4gaW50IGNvbXB1dGVfaGFzaF9zaGlmdChzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzLCBpbnQgbnVtYmxrcywKLQkJCSAgICAgIGludCAqbm9kZWlkcyk7Ci0KLSNkZWZpbmUgWk9ORV9BTElHTiAoMVVMIDw8IChNQVhfT1JERVIrUEFHRV9TSElGVCkpCi0KLWV4dGVybiB2b2lkIG51bWFfaW5pdF9hcnJheSh2b2lkKTsKLWV4dGVybiBpbnQgbnVtYV9vZmY7Ci0KLWV4dGVybiB2b2lkIHNyYXRfcmVzZXJ2ZV9hZGRfYXJlYShpbnQgbm9kZWlkKTsKLWV4dGVybiBpbnQgaG90YWRkX3BlcmNlbnQ7Ci0KLWV4dGVybiBzMTYgYXBpY2lkX3RvX25vZGVbTUFYX0xPQ0FMX0FQSUNdOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBudW1hX2ZyZWVfYWxsX2Jvb3RtZW0odm9pZCk7Ci1leHRlcm4gdm9pZCBzZXR1cF9ub2RlX2Jvb3RtZW0oaW50IG5vZGVpZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCk7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfY3B1X3RvX25vZGUodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfbm9kZShpbnQgY3B1LCBpbnQgbm9kZSk7Ci1leHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfY3B1X3RvX25vZGUodm9pZCkJCXsgfQotc3RhdGljIGlubGluZSB2b2lkIG51bWFfc2V0X25vZGUoaW50IGNwdSwgaW50IG5vZGUpCXsgfQotc3RhdGljIGlubGluZSB2b2lkIG51bWFfY2xlYXJfbm9kZShpbnQgY3B1KQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbnVtYV9hZGRfY3B1KGludCBjcHUsIGludCBub2RlKQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkJCXsgfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19OVU1BXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS5oIGIvaW5jbHVkZS9hc20teDg2L251bWFxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNGJmN2QuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L251bWFxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnk6IFBhdHJpY2lhIEdhdWdoZW4sIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxnb25lQHVzLmlibS5jb20+Ci0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19OVU1BUV9ICi0jZGVmaW5lIEFTTV9YODZfX05VTUFRX0gKLQotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQotZXh0ZXJuIGludCBmb3VuZF9udW1hcTsKLWV4dGVybiBpbnQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKTsKLQotLyoKLSAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQotICovCi0jZGVmaW5lIFNZU19DRkdfREFUQV9QUklWX0FERFIJCTB4MDAwOWQwMDAgLyogcGxhY2UgZm9yIHNjZCBpbiBwcml2YXRlCi0JCQkJCQkgICAgICBxdWFkIHNwYWNlICovCi0KLS8qCi0gKiBDb21tdW5pY2F0aW9uIGFyZWEgZm9yIGVhY2ggcHJvY2Vzc29yIG9uIGx5bnhlci1wcm9jZXNzb3IgdGVzdHMuCi0gKgotICogTk9URTogSWYgeW91IGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGlzIGVhY2hwcm9jIHN0cnVjdHVyZSB5b3UgbmVlZAotICogICAgICAgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIGZvciBFQUNIX1FVQURfU0laRS4KLSAqLwotc3RydWN0IGVhY2hxdWFkbWVtIHsKLQl1bnNpZ25lZCBpbnQJcHJpdl9tZW1fc3RhcnQ7CQkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KLQkJCQkJCS8qIHF1YWQncyBwcml2YXRlIG1lbW9yeS4gKi8KLQkJCQkJCS8qIFRoaXMgaXMgYWx3YXlzIDAuICovCi0JCQkJCQkvKiBJbiBNQi4gKi8KLQl1bnNpZ25lZCBpbnQJcHJpdl9tZW1fc2l6ZTsJCS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgKi8KLQkJCQkJCS8qIHByaXZhdGUgbWVtb3J5LiAqLwotCQkJCQkJLyogSW4gTUIuICovCi0JdW5zaWduZWQgaW50CWxvd19zaHJkX21lbV9zdHJwX3N0YXJ0Oy8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLwotCQkJCQkJLyogcXVhZCdzIGxvdyBzaGFyZWQgYmxvY2sgKi8KLQkJCQkJCS8qICh1bnRyYW5zbGF0ZWQpLiAqLwotCQkJCQkJLyogSW4gTUIuICovCi0JdW5zaWduZWQgaW50CWxvd19zaHJkX21lbV9zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCi0JCQkJCQkvKiBxdWFkJ3MgbG93IHNoYXJlZCBtZW1vcnkgKi8KLQkJCQkJCS8qICh1bnRyYW5zbGF0ZWQpLiAqLwotCQkJCQkJLyogSW4gTUIuICovCi0JdW5zaWduZWQgaW50CWxvd19zaHJkX21lbV9zaXplOwkvKiBTaXplIG9mIHRoaXMgcXVhZCdzIGxvdyAqLwotCQkJCQkJLyogc2hhcmVkIG1lbW9yeS4gKi8KLQkJCQkJCS8qIEluIE1CLiAqLwotCXVuc2lnbmVkIGludAlsbW1pb19jb3BiX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KLQkJCQkJCS8qIHF1YWQncyBsb2NhbCBtZW1vcnkgKi8KLQkJCQkJCS8qIG1hcHBlZCBJL08gaW4gdGhlICovCi0JCQkJCQkvKiBjb21wYXRpYmlsaXR5IE9QQi4gKi8KLQkJCQkJCS8qIEluIE1CLiAqLwotCXVuc2lnbmVkIGludAlsbW1pb19jb3BiX3NpemU7CS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgbG9jYWwgKi8KLQkJCQkJCS8qIG1lbW9yeSBtYXBwZWQgSS9PIGluIHRoZSAqLwotCQkJCQkJLyogY29tcGF0aWJpbGl0eSBPUEIuICovCi0JCQkJCQkvKiBJbiBNQi4gKi8KLQl1bnNpZ25lZCBpbnQJbG1taW9fbm9wYl9zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCi0JCQkJCQkvKiBxdWFkJ3MgbG9jYWwgbWVtb3J5ICovCi0JCQkJCQkvKiBtYXBwZWQgSS9PIGluIHRoZSAqLwotCQkJCQkJLyogbm9uLWNvbXBhdGliaWxpdHkgT1BCLiAqLwotCQkJCQkJLyogSW4gTUIuICovCi0JdW5zaWduZWQgaW50CWxtbWlvX25vcGJfc2l6ZTsJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyBsb2NhbCAqLwotCQkJCQkJLyogbWVtb3J5IG1hcHBlZCBJL08gaW4gdGhlICovCi0JCQkJCQkvKiBub24tY29tcGF0aWJpbGl0eSBPUEIuICovCi0JCQkJCQkvKiBJbiBNQi4gKi8KLQl1bnNpZ25lZCBpbnQJaW9fYXBpY18wX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIEkvTyAqLwotCQkJCQkJLyogQVBJQyAwLiAqLwotCXVuc2lnbmVkIGludAlpb19hcGljXzBfc3o7CQkvKiBTaXplIEkvTyBBUElDIDAuICovCi0JdW5zaWduZWQgaW50CWlvX2FwaWNfMV9zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiBJL08gKi8KLQkJCQkJCS8qIEFQSUMgMS4gKi8KLQl1bnNpZ25lZCBpbnQJaW9fYXBpY18xX3N6OwkJLyogU2l6ZSBJL08gQVBJQyAxLiAqLwotCXVuc2lnbmVkIGludAloaV9zaHJkX21lbV9zdGFydDsJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCi0JCQkJCQkvKiBxdWFkJ3MgaGlnaCBzaGFyZWQgbWVtb3J5LiovCi0JCQkJCQkvKiBJbiBNQi4gKi8KLQl1bnNpZ25lZCBpbnQJaGlfc2hyZF9tZW1fc2l6ZTsJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyBoaWdoICovCi0JCQkJCQkvKiBzaGFyZWQgbWVtb3J5LiAqLwotCQkJCQkJLyogSW4gTUIuICovCi0JdW5zaWduZWQgaW50CW1wc190YWJsZV9hZGRyOwkJLyogQWRkcmVzcyBvZiB0aGlzIHF1YWQncyAqLwotCQkJCQkJLyogTVBTIHRhYmxlcyBmcm9tIEJJT1MsICovCi0JCQkJCQkvKiBpbiBzeXN0ZW0gc3BhY2UuKi8KLQl1bnNpZ25lZCBpbnQJbGNsX01EQ19waW9fYWRkcjsJLyogUG9ydC1JL08gYWRkcmVzcyBmb3IgKi8KLQkJCQkJCS8qIGxvY2FsIGFjY2VzcyBvZiBNREMuICovCi0JdW5zaWduZWQgaW50CXJtdF9NRENfbW1waW9fYWRkcjsJLyogTU0tUG9ydC1JL08gYWRkcmVzcyBmb3IgKi8KLQkJCQkJCS8qIHJlbW90ZSBhY2Nlc3Mgb2YgTURDLiAqLwotCXVuc2lnbmVkIGludAltbV9wb3J0X2lvX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KLQkJCQkJCS8qIHF1YWQncyBtZW1vcnkgbWFwcGVkIFBvcnQgKi8KLQkJCQkJCS8qIEkvTyBzcGFjZS4gKi8KLQl1bnNpZ25lZCBpbnQJbW1fcG9ydF9pb19zaXplOwkvKiBTaXplIG9mIHRoaXMgcXVhZCdzIG1lbW9yeSovCi0JCQkJCQkvKiBtYXBwZWQgUG9ydCBJL08gc3BhY2UuICovCi0JdW5zaWduZWQgaW50CW1tX3JtdF9pb19hcGljX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KLQkJCQkJCS8qIHF1YWQncyBtZW1vcnkgbWFwcGVkICovCi0JCQkJCQkvKiByZW1vdGUgSS9PIEFQSUMgc3BhY2UuICovCi0JdW5zaWduZWQgaW50CW1tX3JtdF9pb19hcGljX3NpemU7CS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgbWVtb3J5Ki8KLQkJCQkJCS8qIG1hcHBlZCByZW1vdGUgSS9PIEFQSUMgKi8KLQkJCQkJCS8qIHNwYWNlLiAqLwotCXVuc2lnbmVkIGludAltbV9pc2Ffc3RhcnQ7CQkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KLQkJCQkJCS8qIHF1YWQncyBtZW1vcnkgbWFwcGVkIElTQSAqLwotCQkJCQkJLyogc3BhY2UgKGNvbnRhaW5zIE1EQyAqLwotCQkJCQkJLyogbWVtb3J5IHNwYWNlKS4gKi8KLQl1bnNpZ25lZCBpbnQJbW1faXNhX3NpemU7CQkvKiBTaXplIG9mIHRoaXMgcXVhZCdzIG1lbW9yeSovCi0JCQkJCQkvKiBtYXBwZWQgSVNBIHNwYWNlIChjb250YWlucyovCi0JCQkJCQkvKiBNREMgbWVtb3J5IHNwYWNlKS4gKi8KLQl1bnNpZ25lZCBpbnQJcm10X3FtaV9hZGRyOwkJLyogUmVtb3RlIGFkZHIgdG8gYWNjZXNzIFFNSS4qLwotCXVuc2lnbmVkIGludAlsY2xfcW1pX2FkZHI7CQkvKiBMb2NhbCBhZGRyIHRvIGFjY2VzcyBRTUkuICovCi19OwotCi0vKgotICogTm90ZTogVGhpcyBzdHJ1Y3R1cmUgbXVzdCBiZSBOT1QgYmUgY2hhbmdlZCB1bmxlc3MgdGhlIG11bHRpcHJvYyBhbmQKLSAqIE9TIGFyZSBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhlIG5ldyBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBzeXNfY2ZnX2RhdGEgewotCXVuc2lnbmVkIGludAlxdWFkX2lkOwotCXVuc2lnbmVkIGludAlic3BfcHJvY19pZDsgLyogQm9vdCBTdHJhcCBQcm9jZXNzb3IgaW4gdGhpcyBxdWFkLiAqLwotCXVuc2lnbmVkIGludAlzY2RfdmVyc2lvbjsgLyogVmVyc2lvbiBudW1iZXIgb2YgdGhpcyB0YWJsZS4gKi8KLQl1bnNpZ25lZCBpbnQJZmlyc3RfcXVhZF9pZDsKLQl1bnNpZ25lZCBpbnQJcXVhZHNfcHJlc2VudDMxXzA7IC8qIDEgYml0IGZvciBlYWNoIHF1YWQgKi8KLQl1bnNpZ25lZCBpbnQJcXVhZHNfcHJlc2VudDYzXzMyOyAvKiAxIGJpdCBmb3IgZWFjaCBxdWFkICovCi0JdW5zaWduZWQgaW50CWNvbmZpZ19mbGFnczsKLQl1bnNpZ25lZCBpbnQJYm9vdF9mbGFnczsKLQl1bnNpZ25lZCBpbnQJY3NyX3N0YXJ0X2FkZHI7IC8qIEFic29sdXRlIHZhbHVlIChub3QgaW4gTUIpICovCi0JdW5zaWduZWQgaW50CWNzcl9zaXplOyAvKiBBYnNvbHV0ZSB2YWx1ZSAobm90IGluIE1CKSAqLwotCXVuc2lnbmVkIGludAlsY2xfYXBpY19zdGFydF9hZGRyOyAvKiBBYnNvbHV0ZSB2YWx1ZSAobm90IGluIE1CKSAqLwotCXVuc2lnbmVkIGludAlsY2xfYXBpY19zaXplOyAvKiBBYnNvbHV0ZSB2YWx1ZSAobm90IGluIE1CKSAqLwotCXVuc2lnbmVkIGludAlsb3dfc2hyZF9tZW1fYmFzZTsgLyogMCBvciA1MTJNQiBvciAxR0IgKi8KLQl1bnNpZ25lZCBpbnQJbG93X3NocmRfbWVtX3F1YWRfb2Zmc2V0OyAvKiAwLDEyOE0sMjU2TSw1MTJNLDFHICovCi0JCQkJCS8qIG1heSBub3QgYmUgdG90YWxseSBwb3B1bGF0ZWQgKi8KLQl1bnNpZ25lZCBpbnQJc3BsaXRfbWVtX2VuYmw7IC8qIDAgZm9yIG5vIGxvdyBzaGFyZWQgbWVtb3J5ICovCi0JdW5zaWduZWQgaW50CW1taW9fc3o7IC8qIFNpemUgb2YgdG90YWwgc3lzdGVtIG1lbW9yeSBtYXBwZWQgSS9PICovCi0JCQkJIC8qIChpbiBNQikuICovCi0JdW5zaWduZWQgaW50CXF1YWRfc3Bpbl9sb2NrOyAvKiBTcGFyZSBsb2NhdGlvbiB1c2VkIGZvciBxdWFkICovCi0JCQkJCS8qIGJyaW5ndXAuICovCi0JdW5zaWduZWQgaW50CW5vbnplcm81NTsgLyogRm9yIGNoZWNrc3VtbWluZy4gKi8KLQl1bnNpZ25lZCBpbnQJbm9uemVyb2FhOyAvKiBGb3IgY2hlY2tzdW1taW5nLiAqLwotCXVuc2lnbmVkIGludAlzY2RfbWFnaWNfbnVtYmVyOwotCXVuc2lnbmVkIGludAlzeXN0ZW1fdHlwZTsKLQl1bnNpZ25lZCBpbnQJY2hlY2tzdW07Ci0JLyoKLQkgKgltZW1vcnkgY29uZmlndXJhdGlvbiBhcmVhIGZvciBlYWNoIHF1YWQKLQkgKi8KLQlzdHJ1Y3QJCWVhY2hxdWFkbWVtIGVxW01BWF9OVU1OT0RFU107CS8qIGluZGV4ZWQgYnkgcXVhZCBpZCAqLwotfTsKLQotdm9pZCBudW1hcV90c2NfZGlzYWJsZSh2b2lkKTsKLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tZW1jZmdfbnVtYXEodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfWDg2X05VTUFRICovCi0jZW5kaWYgLyogQVNNX1g4Nl9fTlVNQVFfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L251bWFxL2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzNDRiYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLSNpZm5kZWYgX19BU01fTlVNQVFfQVBJQ19ICi0jZGVmaW5lIF9fQVNNX05VTUFRX0FQSUNfSAotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW16b25lLmg+Ci0jaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KLQotI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKLQotc3RhdGljIGlubGluZSBjcHVtYXNrX3QgdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gQ1BVX01BU0tfQUxMOwotfQotCi0jZGVmaW5lIFRBUkdFVF9DUFVTICh0YXJnZXRfY3B1cygpKQotCi0jZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgxKQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKLQotI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSBkZXN0X0xvd2VzdFByaW8KLSNkZWZpbmUgSU5UX0RFU1RfTU9ERSAwICAgICAvKiBwaHlzaWNhbCBkZWxpdmVyeSBvbiBMT0NBTCBxdWFkICovCi0gCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCi17Ci0JcmV0dXJuIHBoeXNpZF9pc3NldChhcGljaWQsIGJpdG1hcCk7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotI2RlZmluZSBhcGljaWRfY2x1c3RlcihhcGljaWQpIChhcGljaWQgJiAweEYwKQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKLXsKLQkvKiBBbHJlYWR5IGRvbmUgaW4gTlVNQS1RIGZpcm13YXJlICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKLXsKLQlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAotCQkiTlVNQS1RIiwgbnJfaW9hcGljcyk7Ci19Ci0KLS8qCi0gKiBTa2lwIGFkZGluZyB0aGUgdGltZXIgaW50IG9uIHNlY29uZGFyeSBub2Rlcywgd2hpY2ggY2F1c2VzCi0gKiBhIHNtYWxsIGJ1dCBwYWluZnVsIHJpZnQgaW4gdGhlIHRpbWUtc3BhY2UgY29udGludXVtLgotICovCi1zdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKLXsKLQlyZXR1cm4gYXBpYyAhPSAwICYmIGlycSA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCi17Ci0JLyogV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLwotCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhGVUwpOwotfQotCi0vKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLwotZXh0ZXJuIHU4IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW107Ci1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKLXsKLSAgICAgICBpZiAoY3B1ID49IE5SX0NQVVMpCi0JICAgICAgIHJldHVybiBCQURfQVBJQ0lEOwotCXJldHVybiAoaW50KWNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07Ci19Ci0KLS8qCi0gKiBTdXBwb3J0aW5nIG92ZXIgNjAgY3B1cyBvbiBOVU1BLVEgcmVxdWlyZXMgYSBsb2NhbGl0eS1kZXBlbmRlbnQKLSAqIGNwdSB0byBBUElDIElEIHJlbGF0aW9uIHRvIHByb3Blcmx5IGludGVyYWN0IHdpdGggdGhlIGludGVsbGlnZW50Ci0gKiBtb2RlIG9mIHRoZSBjbHVzdGVyIGNvbnRyb2xsZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKLXsKLQlpZiAobXBzX2NwdSA8IDYwKQotCQlyZXR1cm4gKChtcHNfY3B1ID4+IDIpIDw8IDQpIHwgKDEgPDwgKG1wc19jcHUgJiAweDMpKTsKLQllbHNlCi0JCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpIAotewotCXJldHVybiBsb2dpY2FsX2FwaWNpZCA+PiA0OwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBsb2dpY2FsX2FwaWNpZCkKLXsKLQlpbnQgbm9kZSA9IGFwaWNpZF90b19ub2RlKGxvZ2ljYWxfYXBpY2lkKTsKLQlpbnQgY3B1ID0gX19mZnMobG9naWNhbF9hcGljaWQgJiAweGYpOwotCi0JcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZChjcHUgKyA0Km5vZGUpOwotfQotCi1leHRlcm4gdm9pZCAqeHF1YWRfcG9ydGlvOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCi17Ci0JaW50IG51bV9xdWFkcyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKLQotCWlmIChudW1fcXVhZHMgPD0gMSkKLSAgICAgICAJCXJldHVybjsKLQotCXByaW50aygiUmVtYXBwaW5nIGNyb3NzLXF1YWQgcG9ydCBJL08gZm9yICVkIHF1YWRzXG4iLCBudW1fcXVhZHMpOwotCXhxdWFkX3BvcnRpbyA9IGlvcmVtYXAoWFFVQURfUE9SVElPX0JBU0UsIG51bV9xdWFkcypYUVVBRF9QT1JUSU9fUVVBRCk7Ci0JcHJpbnRrKCJ4cXVhZF9wb3J0aW8gdmFkZHIgMHglMDhseCwgbGVuICUwOGx4XG4iLAotCQkodV9sb25nKSB4cXVhZF9wb3J0aW8sICh1X2xvbmcpIG51bV9xdWFkcypYUVVBRF9QT1JUSU9fUVVBRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKLXsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQotewotfQotCi0vKgotICogV2UgdXNlIHBoeXNpY2FsIGFwaWNpZHMgaGVyZSwgbm90IGxvZ2ljYWwsIHNvIGp1c3QgcmV0dXJuIHRoZSBkZWZhdWx0Ci0gKiBwaHlzaWNhbCBicm9hZGNhc3QgdG8gc3RvcCBwZW9wbGUgZnJvbSBicmVha2luZyB1cwotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCi17Ci0JcmV0dXJuIChpbnQpIDB4RjsKLX0KLQotLyogTm8gTlVNQS1RIGJveCBoYXMgYSBIVCBDUFUsIGJ1dCBpdCBjYW4ndCBodXJ0IHRvIHVzZSB0aGUgZGVmYXVsdCBjb2RlLiAqLwotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fTlVNQVFfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvb2xwYy5oIGIvaW5jbHVkZS9hc20teDg2L29scGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczMjhiMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvb2xwYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qIE9MUEMgbWFjaGluZSBzcGVjaWZpYyBkZWZpbml0aW9ucyAqLwotCi0jaWZuZGVmIEFTTV9YODZfX09MUENfSAotI2RlZmluZSBBU01fWDg2X19PTFBDX0gKLQotI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgotCi1zdHJ1Y3Qgb2xwY19wbGF0Zm9ybV90IHsKLQlpbnQgZmxhZ3M7Ci0JdWludDMyX3QgYm9hcmRyZXY7Ci0JaW50IGVjdmVyOwotfTsKLQotI2RlZmluZSBPTFBDX0ZfUFJFU0VOVAkJMHgwMQotI2RlZmluZSBPTFBDX0ZfRENPTgkJMHgwMgotI2RlZmluZSBPTFBDX0ZfVlNBCQkweDA0Ci0KLSNpZmRlZiBDT05GSUdfT0xQQwotCi1leHRlcm4gc3RydWN0IG9scGNfcGxhdGZvcm1fdCBvbHBjX3BsYXRmb3JtX2luZm87Ci0KLS8qCi0gKiBPTFBDIGJvYXJkIElEcyBjb250YWluIHRoZSBtYWpvciBidWlsZCBudW1iZXIgd2l0aGluIHRoZSBtYXNrIDB4MGZmMCwKLSAqIGFuZCB0aGUgbWlub3IgYnVpbGQgbnVtYmVyIHdpdGhpbmcgMHgwMDBmLiAgUHJlLWJ1aWxkcyBoYXZlIGEgbWlub3IKLSAqIG51bWJlciBsZXNzIHRoYW4gOCwgYW5kIG5vcm1hbCBidWlsZHMgc3RhcnQgYXQgOC4gIEZvciBleGFtcGxlLCAweDBCMTAKLSAqIGlzIGEgUHJlQjEsIGFuZCAweDBDMTggaXMgYSBDMS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IG9scGNfYm9hcmQodWludDhfdCBpZCkKLXsKLQlyZXR1cm4gKGlkIDw8IDQpIHwgMHg4OwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IG9scGNfYm9hcmRfcHJlKHVpbnQ4X3QgaWQpCi17Ci0JcmV0dXJuIGlkIDw8IDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1hY2hpbmVfaXNfb2xwYyh2b2lkKQotewotCXJldHVybiAob2xwY19wbGF0Zm9ybV9pbmZvLmZsYWdzICYgT0xQQ19GX1BSRVNFTlQpID8gMSA6IDA7Ci19Ci0KLS8qCi0gKiBUaGUgRENPTiBpcyBPTFBDJ3MgRGlzcGxheSBDb250cm9sbGVyLiAgSXQgaGFzIGEgbnVtYmVyIG9mIHVuaXF1ZQotICogZmVhdHVyZXMgdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgYWR2YW50YWdlIG9mLi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgb2xwY19oYXNfZGNvbih2b2lkKQotewotCXJldHVybiAob2xwY19wbGF0Zm9ybV9pbmZvLmZsYWdzICYgT0xQQ19GX0RDT04pID8gMSA6IDA7Ci19Ci0KLS8qCi0gKiBUaGUgVlNBIGlzIHNvZnR3YXJlIGZyb20gQU1EIHRoYXQgdHlwaWNhbCBHZW9kZSBiaW9zZXMgd2lsbCBpbmNsdWRlLgotICogSXQgaXMgdXNlZCB0byBlbXVsYXRlIHRoZSBQQ0kgYnVzLCBWR0EsIGV0Yy4gIE9MUEMncyBPcGVuIEZpcm13YXJlIGRvZXMKLSAqIG5vdCBpbmNsdWRlIHRoZSBWU0E7IGluc3RlYWQsIFBDSSBpcyBlbXVsYXRlZCBieSB0aGUga2VybmVsLgotICoKLSAqIFRoZSBWU0EgaXMgZGVzY3JpYmVkIGZ1cnRoZXIgaW4gYXJjaC94ODYvcGNpL29scGMuYy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgb2xwY19oYXNfdnNhKHZvaWQpCi17Ci0JcmV0dXJuIChvbHBjX3BsYXRmb3JtX2luZm8uZmxhZ3MgJiBPTFBDX0ZfVlNBKSA/IDEgOiAwOwotfQotCi0vKgotICogVGhlICJNYXNzIFByb2R1Y3Rpb24iIHZlcnNpb24gb2YgT0xQQydzIFhPIGlzIGlkZW50aWZpZWQgYXMgYmVpbmcgbW9kZWwKLSAqIEMyLiAgRHVyaW5nIHRoZSBwcm90b3R5cGUgcGhhc2UsIHRoZSBmb2xsb3dpbmcgbW9kZWxzIChpbiBjaHJvbm9sb2dpY2FsCi0gKiBvcmRlcikgd2VyZSBjcmVhdGVkOiBBMSwgQjEsIEIyLCBCMywgQjQsIEMxLiAgVGhlIEExIHRocm91Z2ggQjIgbW9kZWxzCi0gKiB3ZXJlIGJhc2VkIG9uIEdlb2RlIEdYIENQVXMsIGFuZCBtb2RlbHMgYWZ0ZXIgdGhhdCB3ZXJlIGJhc2VkIHVwb24KLSAqIEdlb2RlIExYIENQVXMuICBUaGVyZSB3ZXJlIGFsc28gc29tZSBoYW5kLWFzc2VtYmxlZCBtb2RlbHMgZmxvYXRpbmcKLSAqIGFyb3VuZCwgcmVmZXJyZWQgdG8gYXMgUHJlQjEsIFByZUIyLCBldGMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG9scGNfYm9hcmRfYXRfbGVhc3QodWludDMyX3QgcmV2KQotewotCXJldHVybiBvbHBjX3BsYXRmb3JtX2luZm8uYm9hcmRyZXYgPj0gcmV2OwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCBtYWNoaW5lX2lzX29scGModm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgb2xwY19oYXNfZGNvbih2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBvbHBjX2hhc192c2Eodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLS8qIEVDIHJlbGF0ZWQgZnVuY3Rpb25zICovCi0KLWV4dGVybiBpbnQgb2xwY19lY19jbWQodW5zaWduZWQgY2hhciBjbWQsIHVuc2lnbmVkIGNoYXIgKmluYnVmLCBzaXplX3QgaW5sZW4sCi0JCXVuc2lnbmVkIGNoYXIgKm91dGJ1Ziwgc2l6ZV90IG91dGxlbik7Ci0KLWV4dGVybiBpbnQgb2xwY19lY19tYXNrX3NldCh1aW50OF90IGJpdHMpOwotZXh0ZXJuIGludCBvbHBjX2VjX21hc2tfdW5zZXQodWludDhfdCBiaXRzKTsKLQotLyogRUMgY29tbWFuZHMgKi8KLQotI2RlZmluZSBFQ19GSVJNV0FSRV9SRVYJCTB4MDgKLQotLyogU0NJIHNvdXJjZSB2YWx1ZXMgKi8KLQotI2RlZmluZSBFQ19TQ0lfU1JDX0VNUFRZCTB4MDAKLSNkZWZpbmUgRUNfU0NJX1NSQ19HQU1FCQkweDAxCi0jZGVmaW5lIEVDX1NDSV9TUkNfQkFUVEVSWQkweDAyCi0jZGVmaW5lIEVDX1NDSV9TUkNfQkFUU09DCTB4MDQKLSNkZWZpbmUgRUNfU0NJX1NSQ19CQVRFUlIJMHgwOAotI2RlZmluZSBFQ19TQ0lfU1JDX0VCT09LCTB4MTAKLSNkZWZpbmUgRUNfU0NJX1NSQ19XTEFOCQkweDIwCi0jZGVmaW5lIEVDX1NDSV9TUkNfQUNQV1IJMHg0MAotI2RlZmluZSBFQ19TQ0lfU1JDX0FMTAkJMHg3RgotCi0vKiBHUElPIGFzc2lnbm1lbnRzICovCi0KLSNkZWZpbmUgT0xQQ19HUElPX01JQ19BQwlnZW9kZV9ncGlvKDEpCi0jZGVmaW5lIE9MUENfR1BJT19EQ09OX0lSUQlnZW9kZV9ncGlvKDcpCi0jZGVmaW5lIE9MUENfR1BJT19USFJNX0FMUk0JZ2VvZGVfZ3BpbygxMCkKLSNkZWZpbmUgT0xQQ19HUElPX1NNQl9DTEsJZ2VvZGVfZ3BpbygxNCkKLSNkZWZpbmUgT0xQQ19HUElPX1NNQl9EQVRBCWdlb2RlX2dwaW8oMTUpCi0jZGVmaW5lIE9MUENfR1BJT19XT1JLQVVYCWdlb2RlX2dwaW8oMjQpCi0jZGVmaW5lIE9MUENfR1BJT19MSUQJCWdlb2RlX2dwaW8oMjYpCi0jZGVmaW5lIE9MUENfR1BJT19FQ1NDSQkJZ2VvZGVfZ3BpbygyNykKLQotI2VuZGlmIC8qIEFTTV9YODZfX09MUENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZjFkNTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BBR0VfSAotI2RlZmluZSBBU01fWDg2X19QQUdFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+Ci0KLS8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCi0jZGVmaW5lIFBBR0VfU0hJRlQJMTIKLSNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSxVTCkgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBfX1BIWVNJQ0FMX01BU0sJCSgocGh5c19hZGRyX3QpKDFVTEwgPDwgX19QSFlTSUNBTF9NQVNLX1NISUZUKSAtIDEpCi0jZGVmaW5lIF9fVklSVFVBTF9NQVNLCQkoKDFVTCA8PCBfX1ZJUlRVQUxfTUFTS19TSElGVCkgLSAxKQotCi0vKiBDYXN0IFBBR0VfTUFTSyB0byBhIHNpZ25lZCB0eXBlIHNvIHRoYXQgaXQgaXMgc2lnbi1leHRlbmRlZCBpZgotICAgdmlydHVhbCBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgYnV0IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgbGFyZ2VyCi0gICAoaWUsIDMyLWJpdCBQQUUpLiAqLwotI2RlZmluZSBQSFlTSUNBTF9QQUdFX01BU0sJKCgoc2lnbmVkIGxvbmcpUEFHRV9NQVNLKSAmIF9fUEhZU0lDQUxfTUFTSykKLQotLyogUFRFX1BGTl9NQVNLIGV4dHJhY3RzIHRoZSBQRk4gZnJvbSBhIChwdGV8cG1kfHB1ZHxwZ2QpdmFsX3QgKi8KLSNkZWZpbmUgUFRFX1BGTl9NQVNLCQkoKHB0ZXZhbF90KVBIWVNJQ0FMX1BBR0VfTUFTSykKLQotLyogUFRFX0ZMQUdTX01BU0sgZXh0cmFjdHMgdGhlIGZsYWdzIGZyb20gYSAocHRlfHBtZHxwdWR8cGdkKXZhbF90ICovCi0jZGVmaW5lIFBURV9GTEFHU19NQVNLCQkoflBURV9QRk5fTUFTSykKLQotI2RlZmluZSBQTURfUEFHRV9TSVpFCQkoX0FDKDEsIFVMKSA8PCBQTURfU0hJRlQpCi0jZGVmaW5lIFBNRF9QQUdFX01BU0sJCSh+KFBNRF9QQUdFX1NJWkUtMSkpCi0KLSNkZWZpbmUgSFBBR0VfU0hJRlQJCVBNRF9TSElGVAotI2RlZmluZSBIUEFHRV9TSVpFCQkoX0FDKDEsVUwpIDw8IEhQQUdFX1NISUZUKQotI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFIC0gMSkpCi0jZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQotCi0jZGVmaW5lIEhVR0VfTUFYX0hTVEFURSAyCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2luY2x1ZGUgPGFzbS9wYWdlXzY0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9wYWdlXzMyLmg+Ci0jZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLwotCi0jZGVmaW5lIFBBR0VfT0ZGU0VUCQkoKHVuc2lnbmVkIGxvbmcpX19QQUdFX09GRlNFVCkKLQotI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MgXAotCSgoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgUkVBRF9JTVBMSUVTX0VYRUMpID8gVk1fRVhFQyA6IDAgKSB8IFwKLQkgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKLQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi10eXBlZGVmIHN0cnVjdCB7IHBnZHZhbF90IHBnZDsgfSBwZ2RfdDsKLXR5cGVkZWYgc3RydWN0IHsgcGdwcm90dmFsX3QgcGdwcm90OyB9IHBncHJvdF90OwotCi1leHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKLWV4dGVybiBpbnQgcGFnZXJhbmdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci1leHRlcm4gaW50IGRldm1lbV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKLWV4dGVybiB2b2lkIG1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJICAgICAgIHBncHJvdF90IHZtYV9wcm90KTsKLWV4dGVybiB2b2lkIHVubWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJIHBncHJvdF90IHZtYV9wcm90KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm5fbWFwcGVkOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7Ci0KLXN0cnVjdCBwYWdlOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJc3RydWN0IHBhZ2UgKnBnKQotewotCWNsZWFyX3BhZ2UocGFnZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQlzdHJ1Y3QgcGFnZSAqdG9wYWdlKQotewotCWNvcHlfcGFnZSh0bywgZnJvbSk7Ci19Ci0KLSNkZWZpbmUgX19hbGxvY196ZXJvZWRfdXNlcl9oaWdocGFnZShtb3ZhYmxlZmxhZ3MsIHZtYSwgdmFkZHIpIFwKLQlhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVIgfCBfX0dGUF9aRVJPIHwgbW92YWJsZWZsYWdzLCB2bWEsIHZhZGRyKQotI2RlZmluZSBfX0hBVkVfQVJDSF9BTExPQ19aRVJPRURfVVNFUl9ISUdIUEFHRQotCi1zdGF0aWMgaW5saW5lIHBnZF90IG5hdGl2ZV9tYWtlX3BnZChwZ2R2YWxfdCB2YWwpCi17Ci0JcmV0dXJuIChwZ2RfdCkgeyB2YWwgfTsKLX0KLQotc3RhdGljIGlubGluZSBwZ2R2YWxfdCBuYXRpdmVfcGdkX3ZhbChwZ2RfdCBwZ2QpCi17Ci0JcmV0dXJuIHBnZC5wZ2Q7Ci19Ci0KLSNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKLSNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKLXR5cGVkZWYgc3RydWN0IHsgcHVkdmFsX3QgcHVkOyB9IHB1ZF90OwotCi1zdGF0aWMgaW5saW5lIHB1ZF90IG5hdGl2ZV9tYWtlX3B1ZChwbWR2YWxfdCB2YWwpCi17Ci0JcmV0dXJuIChwdWRfdCkgeyB2YWwgfTsKLX0KLQotc3RhdGljIGlubGluZSBwdWR2YWxfdCBuYXRpdmVfcHVkX3ZhbChwdWRfdCBwdWQpCi17Ci0JcmV0dXJuIHB1ZC5wdWQ7Ci19Ci0jZWxzZQkvKiBQQUdFVEFCTEVfTEVWRUxTID09IDMgKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+Ci0KLXN0YXRpYyBpbmxpbmUgcHVkdmFsX3QgbmF0aXZlX3B1ZF92YWwocHVkX3QgcHVkKQotewotCXJldHVybiBuYXRpdmVfcGdkX3ZhbChwdWQucGdkKTsKLX0KLSNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID09IDQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgeyBwbWR2YWxfdCBwbWQ7IH0gcG1kX3Q7Ci0KLXN0YXRpYyBpbmxpbmUgcG1kX3QgbmF0aXZlX21ha2VfcG1kKHBtZHZhbF90IHZhbCkKLXsKLQlyZXR1cm4gKHBtZF90KSB7IHZhbCB9OwotfQotCi1zdGF0aWMgaW5saW5lIHBtZHZhbF90IG5hdGl2ZV9wbWRfdmFsKHBtZF90IHBtZCkKLXsKLQlyZXR1cm4gcG1kLnBtZDsKLX0KLSNlbHNlICAvKiBQQUdFVEFCTEVfTEVWRUxTID09IDIgKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+Ci0KLXN0YXRpYyBpbmxpbmUgcG1kdmFsX3QgbmF0aXZlX3BtZF92YWwocG1kX3QgcG1kKQotewotCXJldHVybiBuYXRpdmVfcGdkX3ZhbChwbWQucHVkLnBnZCk7Ci19Ci0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA+PSAzICovCi0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgbmF0aXZlX21ha2VfcHRlKHB0ZXZhbF90IHZhbCkKLXsKLQlyZXR1cm4gKHB0ZV90KSB7IC5wdGUgPSB2YWwgfTsKLX0KLQotc3RhdGljIGlubGluZSBwdGV2YWxfdCBuYXRpdmVfcHRlX3ZhbChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZS5wdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRldmFsX3QgbmF0aXZlX3B0ZV9mbGFncyhwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIG5hdGl2ZV9wdGVfdmFsKHB0ZSkgJiBQVEVfRkxBR1NfTUFTSzsKLX0KLQotI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQotI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKLQotI2lmZGVmIENPTkZJR19QQVJBVklSVAotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UgIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KLQotI2RlZmluZSBwZ2RfdmFsKHgpCW5hdGl2ZV9wZ2RfdmFsKHgpCi0jZGVmaW5lIF9fcGdkKHgpCW5hdGl2ZV9tYWtlX3BnZCh4KQotCi0jaWZuZGVmIF9fUEFHRVRBQkxFX1BVRF9GT0xERUQKLSNkZWZpbmUgcHVkX3ZhbCh4KQluYXRpdmVfcHVkX3ZhbCh4KQotI2RlZmluZSBfX3B1ZCh4KQluYXRpdmVfbWFrZV9wdWQoeCkKLSNlbmRpZgotCi0jaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKLSNkZWZpbmUgcG1kX3ZhbCh4KQluYXRpdmVfcG1kX3ZhbCh4KQotI2RlZmluZSBfX3BtZCh4KQluYXRpdmVfbWFrZV9wbWQoeCkKLSNlbmRpZgotCi0jZGVmaW5lIHB0ZV92YWwoeCkJbmF0aXZlX3B0ZV92YWwoeCkKLSNkZWZpbmUgcHRlX2ZsYWdzKHgpCW5hdGl2ZV9wdGVfZmxhZ3MoeCkKLSNkZWZpbmUgX19wdGUoeCkJbmF0aXZlX21ha2VfcHRlKHgpCi0KLSNlbmRpZgkvKiBDT05GSUdfUEFSQVZJUlQgKi8KLQotI2RlZmluZSBfX3BhKHgpCQlfX3BoeXNfYWRkcigodW5zaWduZWQgbG9uZykoeCkpCi0jZGVmaW5lIF9fcGFfbm9kZWJ1Zyh4KQlfX3BoeXNfYWRkcl9ub2RlYnVnKCh1bnNpZ25lZCBsb25nKSh4KSkKLS8qIF9fcGFfc3ltYm9sIHNob3VsZCBiZSB1c2VkIGZvciBDIHZpc2libGUgc3ltYm9scy4KLSAgIFRoaXMgc2VlbXMgdG8gYmUgdGhlIG9mZmljaWFsIGdjYyBibGVzc2VkIHdheSB0byBkbyBzdWNoIGFyaXRobWV0aWMuICovCi0jZGVmaW5lIF9fcGFfc3ltYm9sKHgpCV9fcGEoX19waHlzX3JlbG9jX2hpZGUoKHVuc2lnbmVkIGxvbmcpKHgpKSkKLQotI2RlZmluZSBfX3ZhKHgpCQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVCkpCi0KLSNkZWZpbmUgX19ib290X3ZhKHgpCQlfX3ZhKHgpCi0jZGVmaW5lIF9fYm9vdF9wYSh4KQkJX19wYSh4KQotCi0vKgotICogdmlydF90b19wYWdlKGthZGRyKSByZXR1cm5zIGEgdmFsaWQgcG9pbnRlciBpZiBhbmQgb25seSBpZgotICogdmlydF9hZGRyX3ZhbGlkKGthZGRyKSByZXR1cm5zIHRydWUuCi0gKi8KLSNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQotI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKSAgICAgIF9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKLWV4dGVybiBib29sIF9fdmlydF9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcga2FkZHIpOwotI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCV9fdmlydF9hZGRyX3ZhbGlkKCh1bnNpZ25lZCBsb25nKSAoa2FkZHIpKQotCi0jZW5kaWYJLyogX19BU1NFTUJMWV9fICovCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+Ci0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfR0FURV9BUkVBIDEKLQotI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBBU01fWDg2X19QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvcGFnZV8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGY1ZGJhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QQUdFXzMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUEFHRV8zMl9ICi0KLS8qCi0gKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuCi0gKgotICogQSBfX1BBR0VfT0ZGU0VUIG9mIDB4QzAwMDAwMDAgbWVhbnMgdGhhdCB0aGUga2VybmVsIGhhcwotICogYSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2Ygb25lIGdpZ2FieXRlLCB3aGljaCBsaW1pdHMgdGhlCi0gKiBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IHlvdSBjYW4gdXNlIHRvIGFib3V0IDk1ME1CLgotICoKLSAqIElmIHlvdSB3YW50IG1vcmUgcGh5c2ljYWwgbWVtb3J5IHRoYW4gdGhpcyB0aGVuIHNlZSB0aGUgQ09ORklHX0hJR0hNRU00RwotICogYW5kIENPTkZJR19ISUdITUVNNjRHIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgotICovCi0jZGVmaW5lIF9fUEFHRV9PRkZTRVQJCV9BQyhDT05GSUdfUEFHRV9PRkZTRVQsIFVMKQotCi0jaWZkZWYgQ09ORklHXzRLU1RBQ0tTCi0jZGVmaW5lIFRIUkVBRF9PUkRFUgkwCi0jZWxzZQotI2RlZmluZSBUSFJFQURfT1JERVIJMQotI2VuZGlmCi0jZGVmaW5lIFRIUkVBRF9TSVpFIAkoUEFHRV9TSVpFIDw8IFRIUkVBRF9PUkRFUikKLQotI2RlZmluZSBTVEFDS0ZBVUxUX1NUQUNLIDAKLSNkZWZpbmUgRE9VQkxFRkFVTFRfU1RBQ0sgMQotI2RlZmluZSBOTUlfU1RBQ0sgMAotI2RlZmluZSBERUJVR19TVEFDSyAwCi0jZGVmaW5lIE1DRV9TVEFDSyAwCi0jZGVmaW5lIE5fRVhDRVBUSU9OX1NUQUNLUyAxCi0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotLyogNDQ9MzIrMTIsIHRoZSBsaW1pdCB3ZSBjYW4gZml0IGludG8gYW4gdW5zaWduZWQgbG9uZyBwZm4gKi8KLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ0Ci0jZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTMyCi0jZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiB1NjQJcHRldmFsX3Q7Ci10eXBlZGVmIHU2NAlwbWR2YWxfdDsKLXR5cGVkZWYgdTY0CXB1ZHZhbF90OwotdHlwZWRlZiB1NjQJcGdkdmFsX3Q7Ci10eXBlZGVmIHU2NAlwZ3Byb3R2YWxfdDsKLQotdHlwZWRlZiB1bmlvbiB7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZyBwdGVfbG93LCBwdGVfaGlnaDsKLQl9OwotCXB0ZXZhbF90IHB0ZTsKLX0gcHRlX3Q7Ci0jZW5kaWYJLyogX19BU1NFTUJMWV9fCi0gKi8KLSNlbHNlICAvKiAhQ09ORklHX1g4Nl9QQUUgKi8KLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTMyCi0jZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTMyCi0jZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXB0ZXZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBtZHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXB1ZHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBnZHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBncHJvdHZhbF90OwotCi10eXBlZGVmIHVuaW9uIHsKLQlwdGV2YWxfdCBwdGU7Ci0JcHRldmFsX3QgcHRlX2xvdzsKLX0gcHRlX3Q7Ci0KLSNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0jZGVmaW5lIEhBVkVfQVJDSF9IVUdFVExCX1VOTUFQUEVEX0FSRUEKLSNlbmRpZgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBfX3BoeXNfYWRkcl9ub2RlYnVnKHgpCSgoeCkgLSBQQUdFX09GRlNFVCkKLSNpZmRlZiBDT05GSUdfREVCVUdfVklSVFVBTAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyk7Ci0jZWxzZQotI2RlZmluZSBfX3BoeXNfYWRkcih4KQkJX19waHlzX2FkZHJfbm9kZWJ1Zyh4KQotI2VuZGlmCi0jZGVmaW5lIF9fcGh5c19yZWxvY19oaWRlKHgpCVJFTE9DX0hJREUoKHgpLCAwKQotCi0jaWZkZWYgQ09ORklHX0ZMQVRNRU0KLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG1heF9tYXBucikKLSNlbmRpZiAvKiBDT05GSUdfRkxBVE1FTSAqLwotCi1leHRlcm4gaW50IG54X2VuYWJsZWQ7Ci0KLS8qCi0gKiBUaGlzIG11Y2ggYWRkcmVzcyBzcGFjZSBpcyByZXNlcnZlZCBmb3Igdm1hbGxvYygpIGFuZCBpb21hcCgpCi0gKiBhcyB3ZWxsIGFzIGZpeG1hcCBtYXBwaW5ncy4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBfX1ZNQUxMT0NfUkVTRVJWRTsKLWV4dGVybiBpbnQgc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQ7Ci0KLWV4dGVybiB2b2lkIGZpbmRfbG93X3Bmbl9yYW5nZSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfbWVtb3J5X21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kKTsKLWV4dGVybiB2b2lkIGluaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKLWV4dGVybiB2b2lkIHNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKHZvaWQpOwotCi0KLSNpZmRlZiBDT05GSUdfWDg2X1VTRV8zRE5PVwotI2luY2x1ZGUgPGFzbS9tbXguaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqcGFnZSkKLXsKLQltbXhfY2xlYXJfcGFnZShwYWdlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKLXsKLQltbXhfY29weV9wYWdlKHRvLCBmcm9tKTsKLX0KLSNlbHNlICAvKiAhQ09ORklHX1g4Nl9VU0VfM0ROT1cgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqcGFnZSkKLXsKLQltZW1zZXQocGFnZSwgMCwgUEFHRV9TSVpFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKLXsKLQltZW1jcHkodG8sIGZyb20sIFBBR0VfU0laRSk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX1g4Nl8zRE5PVyAqLwotI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BBR0VfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MzgwYjguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BBR0VfNjRfSAotI2RlZmluZSBBU01fWDg2X19QQUdFXzY0X0gKLQotI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTQKLQotI2RlZmluZSBUSFJFQURfT1JERVIJMQotI2RlZmluZSBUSFJFQURfU0laRSAgKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCi0jZGVmaW5lIENVUlJFTlRfTUFTSyAofihUSFJFQURfU0laRSAtIDEpKQotCi0jZGVmaW5lIEVYQ0VQVElPTl9TVEFDS19PUkRFUiAwCi0jZGVmaW5lIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFIDw8IEVYQ0VQVElPTl9TVEFDS19PUkRFUikKLQotI2RlZmluZSBERUJVR19TVEFDS19PUkRFUiAoRVhDRVBUSU9OX1NUQUNLX09SREVSICsgMSkKLSNkZWZpbmUgREVCVUdfU1RLU1ogKFBBR0VfU0laRSA8PCBERUJVR19TVEFDS19PUkRFUikKLQotI2RlZmluZSBJUlFTVEFDS19PUkRFUiAyCi0jZGVmaW5lIElSUVNUQUNLU0laRSAoUEFHRV9TSVpFIDw8IElSUVNUQUNLX09SREVSKQotCi0jZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQotI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyCi0jZGVmaW5lIE5NSV9TVEFDSyAzCi0jZGVmaW5lIERFQlVHX1NUQUNLIDQKLSNkZWZpbmUgTUNFX1NUQUNLIDUKLSNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCi0KLSNkZWZpbmUgUFVEX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQotI2RlZmluZSBQVURfUEFHRV9NQVNLCQkofihQVURfUEFHRV9TSVpFLTEpKQotCi0vKgotICogU2V0IF9fUEFHRV9PRkZTRVQgdG8gdGhlIG1vc3QgbmVnYXRpdmUgcG9zc2libGUgYWRkcmVzcyArCi0gKiBQR0RJUl9TSVpFKjE2IChwZ2Qgc2xvdCAyNzIpLiAgVGhlIGdhcCBpcyB0byBhbGxvdyBhIHNwYWNlIGZvciBhCi0gKiBoeXBlcnZpc29yIHRvIGZpdC4gIENob29zaW5nIDE2IHNsb3RzIGhlcmUgaXMgYXJiaXRyYXJ5LCBidXQgaXQncwotICogd2hhdCBYZW4gcmVxdWlyZXMuCi0gKi8KLSNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgX0FDKDB4ZmZmZjg4MDAwMDAwMDAwMCwgVUwpCi0KLSNkZWZpbmUgX19QSFlTSUNBTF9TVEFSVAlDT05GSUdfUEhZU0lDQUxfU1RBUlQKLSNkZWZpbmUgX19LRVJORUxfQUxJR04JCTB4MjAwMDAwCi0KLS8qCi0gKiBNYWtlIHN1cmUga2VybmVsIGlzIGFsaWduZWQgdG8gMk1CIGFkZHJlc3MuIENhdGNoaW5nIGl0IGF0IGNvbXBpbGUKLSAqIHRpbWUgaXMgYmV0dGVyLiBDaGFuZ2UgeW91ciBjb25maWcgZmlsZSBhbmQgY29tcGlsZSB0aGUga2VybmVsCi0gKiBmb3IgYSAyTUIgYWxpZ25lZCBhZGRyZXNzIChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCi0gKi8KLSNpZiAoQ09ORklHX1BIWVNJQ0FMX1NUQVJUICUgX19LRVJORUxfQUxJR04pICE9IDAKLSNlcnJvciAiQ09ORklHX1BIWVNJQ0FMX1NUQVJUIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyTUIiCi0jZW5kaWYKLQotI2RlZmluZSBfX1NUQVJUX0tFUk5FTAkJKF9fU1RBUlRfS0VSTkVMX21hcCArIF9fUEhZU0lDQUxfU1RBUlQpCi0jZGVmaW5lIF9fU1RBUlRfS0VSTkVMX21hcAlfQUMoMHhmZmZmZmZmZjgwMDAwMDAwLCBVTCkKLQotLyogU2VlIERvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVtb3J5IG1hcC4gKi8KLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ2Ci0jZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTQ4Ci0KLS8qCi0gKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGxldmVsMl9rZXJuZWxfcGd0IGluCi0gKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TKSwgYW5kIGl0IGlzIG1hcHBlZCBoZXJlOgotICovCi0jZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKLSNkZWZpbmUgS0VSTkVMX0lNQUdFX1NUQVJUCV9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwotdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwotCi0vKiBkdXBsaWNhdGVkIHRvIHRoZSBvbmUgaW4gYm9vdG1lbS5oICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKLSNkZWZpbmUgX19waHlzX3JlbG9jX2hpZGUoeCkJKHgpCi0KLS8qCi0gKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgotICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHRldmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcG1kdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgeyBwdGV2YWxfdCBwdGU7IH0gcHRlX3Q7Ci0KLSNkZWZpbmUgdm1lbW1hcCAoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCkKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOwotCi1leHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7Ci1leHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7Ci0KLWV4dGVybiB2b2lkIGluaXRfZXh0cmFfbWFwcGluZ191Yyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBpbml0X2V4dHJhX21hcHBpbmdfd2IodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jaWZkZWYgQ09ORklHX0ZMQVRNRU0KLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgICAgICAgICAgKChwZm4pIDwgbWF4X3BmbikKLSNlbmRpZgotCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QQUdFXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wYXJhbS5oIGIvaW5jbHVkZS9hc20teDg2L3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDljZmIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BBUkFNX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUEFSQU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogc29tZSB1c2VyIGludGVyZmFjZXMgYXJlICovCi0jIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikgICAgICAgLyogaW4gInRpY2tzIiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2Ci0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGFyYXZpcnQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYXJhdmlydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDZhZTJmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYXJhdmlydC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY1MCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BBUkFWSVJUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUEFSQVZJUlRfSAotLyogVmFyaW91cyBpbnN0cnVjdGlvbnMgb24geDg2IG5lZWQgdG8gYmUgcmVwbGFjZWQgZm9yCi0gKiBwYXJhLXZpcnR1YWxpemF0aW9uOiB0aG9zZSBob29rcyBhcmUgZGVmaW5lZCBoZXJlLiAqLwotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0KLS8qIEJpdG1hc2sgb2Ygd2hhdCBjYW4gYmUgY2xvYmJlcmVkOiB1c3VhbGx5IGF0IGxlYXN0IGVheC4gKi8KLSNkZWZpbmUgQ0xCUl9OT05FIDAKLSNkZWZpbmUgQ0xCUl9FQVggICgxIDw8IDApCi0jZGVmaW5lIENMQlJfRUNYICAoMSA8PCAxKQotI2RlZmluZSBDTEJSX0VEWCAgKDEgPDwgMikKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgQ0xCUl9SU0kgICgxIDw8IDMpCi0jZGVmaW5lIENMQlJfUkRJICAoMSA8PCA0KQotI2RlZmluZSBDTEJSX1I4ICAgKDEgPDwgNSkKLSNkZWZpbmUgQ0xCUl9SOSAgICgxIDw8IDYpCi0jZGVmaW5lIENMQlJfUjEwICAoMSA8PCA3KQotI2RlZmluZSBDTEJSX1IxMSAgKDEgPDwgOCkKLSNkZWZpbmUgQ0xCUl9BTlkgICgoMSA8PCA5KSAtIDEpCi0jaW5jbHVkZSA8YXNtL2Rlc2NfZGVmcy5oPgotI2Vsc2UKLS8qIENMQlJfQU5ZIHNob3VsZCBtYXRjaCBhbGwgcmVncyBwbGF0Zm9ybSBoYXMuIEZvciBpMzg2LCB0aGF0J3MganVzdCBpdCAqLwotI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDMpIC0gMSkKLSNlbmRpZiAvKiBYODZfNjQgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9kZXNjX2RlZnMuaD4KLQotc3RydWN0IHBhZ2U7Ci1zdHJ1Y3QgdGhyZWFkX3N0cnVjdDsKLXN0cnVjdCBkZXNjX3B0cjsKLXN0cnVjdCB0c3Nfc3RydWN0Owotc3RydWN0IG1tX3N0cnVjdDsKLXN0cnVjdCBkZXNjX3N0cnVjdDsKLQotLyogZ2VuZXJhbCBpbmZvICovCi1zdHJ1Y3QgcHZfaW5mbyB7Ci0JdW5zaWduZWQgaW50IGtlcm5lbF9ycGw7Ci0JaW50IHNoYXJlZF9rZXJuZWxfcG1kOwotCWludCBwYXJhdmlydF9lbmFibGVkOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci19OwotCi1zdHJ1Y3QgcHZfaW5pdF9vcHMgewotCS8qCi0JICogUGF0Y2ggbWF5IHJlcGxhY2Ugb25lIG9mIHRoZSBkZWZpbmVkIGNvZGUgc2VxdWVuY2VzIHdpdGgKLQkgKiBhcmJpdHJhcnkgY29kZSwgc3ViamVjdCB0byB0aGUgc2FtZSByZWdpc3RlciBjb25zdHJhaW50cy4KLQkgKiBUaGlzIGdlbmVyYWxseSBtZWFucyB0aGUgY29kZSBpcyBub3QgZnJlZSB0byBjbG9iYmVyIGFueQotCSAqIHJlZ2lzdGVycyBvdGhlciB0aGFuIEVBWC4gIFRoZSBwYXRjaCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuCi0JICogdGhlIG51bWJlciBvZiBieXRlcyBvZiBjb2RlIGdlbmVyYXRlZCwgYXMgd2Ugbm9wIHBhZCB0aGUKLQkgKiByZXN0IGluIGdlbmVyaWMgY29kZS4KLQkgKi8KLQl1bnNpZ25lZCAoKnBhdGNoKSh1OCB0eXBlLCB1MTYgY2xvYmJlciwgdm9pZCAqaW5zbmJ1ZiwKLQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZW4pOwotCi0JLyogQmFzaWMgYXJjaC1zcGVjaWZpYyBzZXR1cCAqLwotCXZvaWQgKCphcmNoX3NldHVwKSh2b2lkKTsKLQljaGFyICooKm1lbW9yeV9zZXR1cCkodm9pZCk7Ci0Jdm9pZCAoKnBvc3RfYWxsb2NhdG9yX2luaXQpKHZvaWQpOwotCi0JLyogUHJpbnQgYSBiYW5uZXIgdG8gaWRlbnRpZnkgdGhlIGVudmlyb25tZW50ICovCi0Jdm9pZCAoKmJhbm5lcikodm9pZCk7Ci19OwotCi0KLXN0cnVjdCBwdl9sYXp5X29wcyB7Ci0JLyogU2V0IGRlZmVycmVkIHVwZGF0ZSBtb2RlLCB1c2VkIGZvciBiYXRjaGluZyBvcGVyYXRpb25zLiAqLwotCXZvaWQgKCplbnRlcikodm9pZCk7Ci0Jdm9pZCAoKmxlYXZlKSh2b2lkKTsKLX07Ci0KLXN0cnVjdCBwdl90aW1lX29wcyB7Ci0Jdm9pZCAoKnRpbWVfaW5pdCkodm9pZCk7Ci0KLQkvKiBTZXQgYW5kIHNldCB0aW1lIG9mIGRheSAqLwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfd2FsbGNsb2NrKSh2b2lkKTsKLQlpbnQgKCpzZXRfd2FsbGNsb2NrKSh1bnNpZ25lZCBsb25nKTsKLQotCXVuc2lnbmVkIGxvbmcgbG9uZyAoKnNjaGVkX2Nsb2NrKSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nICgqZ2V0X3RzY19raHopKHZvaWQpOwotfTsKLQotc3RydWN0IHB2X2NwdV9vcHMgewotCS8qIGhvb2tzIGZvciB2YXJpb3VzIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zICovCi0JdW5zaWduZWQgbG9uZyAoKmdldF9kZWJ1Z3JlZykoaW50IHJlZ25vKTsKLQl2b2lkICgqc2V0X2RlYnVncmVnKShpbnQgcmVnbm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpOwotCi0Jdm9pZCAoKmNsdHMpKHZvaWQpOwotCi0JdW5zaWduZWQgbG9uZyAoKnJlYWRfY3IwKSh2b2lkKTsKLQl2b2lkICgqd3JpdGVfY3IwKSh1bnNpZ25lZCBsb25nKTsKLQotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyNF9zYWZlKSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjQpKHZvaWQpOwotCXZvaWQgKCp3cml0ZV9jcjQpKHVuc2lnbmVkIGxvbmcpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyOCkodm9pZCk7Ci0Jdm9pZCAoKndyaXRlX2NyOCkodW5zaWduZWQgbG9uZyk7Ci0jZW5kaWYKLQotCS8qIFNlZ21lbnQgZGVzY3JpcHRvciBoYW5kbGluZyAqLwotCXZvaWQgKCpsb2FkX3RyX2Rlc2MpKHZvaWQpOwotCXZvaWQgKCpsb2FkX2dkdCkoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopOwotCXZvaWQgKCpsb2FkX2lkdCkoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopOwotCXZvaWQgKCpzdG9yZV9nZHQpKHN0cnVjdCBkZXNjX3B0ciAqKTsKLQl2b2lkICgqc3RvcmVfaWR0KShzdHJ1Y3QgZGVzY19wdHIgKik7Ci0Jdm9pZCAoKnNldF9sZHQpKGNvbnN0IHZvaWQgKmRlc2MsIHVuc2lnbmVkIGVudHJpZXMpOwotCXVuc2lnbmVkIGxvbmcgKCpzdG9yZV90cikodm9pZCk7Ci0Jdm9pZCAoKmxvYWRfdGxzKShzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IGNwdSk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXZvaWQgKCpsb2FkX2dzX2luZGV4KSh1bnNpZ25lZCBpbnQgaWR4KTsKLSNlbmRpZgotCXZvaWQgKCp3cml0ZV9sZHRfZW50cnkpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCBpbnQgZW50cnludW0sCi0JCQkJY29uc3Qgdm9pZCAqZGVzYyk7Ci0Jdm9pZCAoKndyaXRlX2dkdF9lbnRyeSkoc3RydWN0IGRlc2Nfc3RydWN0ICosCi0JCQkJaW50IGVudHJ5bnVtLCBjb25zdCB2b2lkICpkZXNjLCBpbnQgc2l6ZSk7Ci0Jdm9pZCAoKndyaXRlX2lkdF9lbnRyeSkoZ2F0ZV9kZXNjICosCi0JCQkJaW50IGVudHJ5bnVtLCBjb25zdCBnYXRlX2Rlc2MgKmdhdGUpOwotCXZvaWQgKCphbGxvY19sZHQpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKTsKLQl2b2lkICgqZnJlZV9sZHQpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKTsKLQotCXZvaWQgKCpsb2FkX3NwMCkoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpOwotCi0Jdm9pZCAoKnNldF9pb3BsX21hc2spKHVuc2lnbmVkIG1hc2spOwotCi0Jdm9pZCAoKndiaW52ZCkodm9pZCk7Ci0Jdm9pZCAoKmlvX2RlbGF5KSh2b2lkKTsKLQotCS8qIGNwdWlkIGVtdWxhdGlvbiwgbW9zdGx5IHNvIHRoYXQgY2FwcyBiaXRzIGNhbiBiZSBkaXNhYmxlZCAqLwotCXZvaWQgKCpjcHVpZCkodW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAotCQkgICAgICB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpOwotCi0JLyogTVNSLCBQTUMgYW5kIFRTUiBvcGVyYXRpb25zLgotCSAgIGVyciA9IDAvLUVGQVVMVC4gIHdybXNyIHJldHVybnMgMC8tRUZBVUxULiAqLwotCXU2NCAoKnJlYWRfbXNyX2FtZCkodW5zaWduZWQgaW50IG1zciwgaW50ICplcnIpOwotCXU2NCAoKnJlYWRfbXNyKSh1bnNpZ25lZCBpbnQgbXNyLCBpbnQgKmVycik7Ci0JaW50ICgqd3JpdGVfbXNyKSh1bnNpZ25lZCBpbnQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpOwotCi0JdTY0ICgqcmVhZF90c2MpKHZvaWQpOwotCXU2NCAoKnJlYWRfcG1jKShpbnQgY291bnRlcik7Ci0JdW5zaWduZWQgbG9uZyBsb25nICgqcmVhZF90c2NwKSh1bnNpZ25lZCBpbnQgKmF1eCk7Ci0KLQkvKgotCSAqIEF0b21pY2FsbHkgZW5hYmxlIGludGVycnVwdHMgYW5kIHJldHVybiB0byB1c2Vyc3BhY2UuICBUaGlzCi0JICogaXMgb25seSBldmVyIHVzZWQgdG8gcmV0dXJuIHRvIDMyLWJpdCBwcm9jZXNzZXM7IGluIGEKLQkgKiA2NC1iaXQga2VybmVsLCBpdCdzIHVzZWQgZm9yIDMyLW9uLTY0IGNvbXBhdCBwcm9jZXNzZXMsIGJ1dAotCSAqIG5ldmVyIG5hdGl2ZSA2NC1iaXQgcHJvY2Vzc2VzLiAgKEp1bXAsIG5vdCBjYWxsLikKLQkgKi8KLQl2b2lkICgqaXJxX2VuYWJsZV9zeXNleGl0KSh2b2lkKTsKLQotCS8qCi0JICogU3dpdGNoIHRvIHVzZXJtb2RlIGdzIGFuZCByZXR1cm4gdG8gNjQtYml0IHVzZXJtb2RlIHVzaW5nCi0JICogc3lzcmV0LiAgT25seSB1c2VkIGluIDY0LWJpdCBrZXJuZWxzIHRvIHJldHVybiB0byA2NC1iaXQKLQkgKiBwcm9jZXNzZXMuICBVc2VybW9kZSByZWdpc3RlciBzdGF0ZSwgaW5jbHVkaW5nICVyc3AsIG11c3QKLQkgKiBhbHJlYWR5IGJlIHJlc3RvcmVkLgotCSAqLwotCXZvaWQgKCp1c2VyZ3Nfc3lzcmV0NjQpKHZvaWQpOwotCi0JLyoKLQkgKiBTd2l0Y2ggdG8gdXNlcm1vZGUgZ3MgYW5kIHJldHVybiB0byAzMi1iaXQgdXNlcm1vZGUgdXNpbmcKLQkgKiBzeXNyZXQuICBVc2VkIHRvIHJldHVybiB0byAzMi1vbi02NCBjb21wYXQgcHJvY2Vzc2VzLgotCSAqIE90aGVyIHVzZXJtb2RlIHJlZ2lzdGVyIHN0YXRlLCBpbmNsdWRpbmcgJWVzcCwgbXVzdCBhbHJlYWR5Ci0JICogYmUgcmVzdG9yZWQuCi0JICovCi0Jdm9pZCAoKnVzZXJnc19zeXNyZXQzMikodm9pZCk7Ci0KLQkvKiBOb3JtYWwgaXJldC4gIEp1bXAgdG8gdGhpcyB3aXRoIHRoZSBzdGFuZGFyZCBpcmV0IHN0YWNrCi0JICAgZnJhbWUgc2V0IHVwLiAqLwotCXZvaWQgKCppcmV0KSh2b2lkKTsKLQotCXZvaWQgKCpzd2FwZ3MpKHZvaWQpOwotCi0Jc3RydWN0IHB2X2xhenlfb3BzIGxhenlfbW9kZTsKLX07Ci0KLXN0cnVjdCBwdl9pcnFfb3BzIHsKLQl2b2lkICgqaW5pdF9JUlEpKHZvaWQpOwotCi0JLyoKLQkgKiBHZXQvc2V0IGludGVycnVwdCBzdGF0ZS4gIHNhdmVfZmwgYW5kIHJlc3RvcmVfZmwgYXJlIG9ubHkKLQkgKiBleHBlY3RlZCB0byB1c2UgWDg2X0VGTEFHU19JRjsgYWxsIG90aGVyIGJpdHMKLQkgKiByZXR1cm5lZCBmcm9tIHNhdmVfZmwgYXJlIHVuZGVmaW5lZCwgYW5kIG1heSBiZSBpZ25vcmVkIGJ5Ci0JICogcmVzdG9yZV9mbC4KLQkgKi8KLQl1bnNpZ25lZCBsb25nICgqc2F2ZV9mbCkodm9pZCk7Ci0Jdm9pZCAoKnJlc3RvcmVfZmwpKHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCppcnFfZGlzYWJsZSkodm9pZCk7Ci0Jdm9pZCAoKmlycV9lbmFibGUpKHZvaWQpOwotCXZvaWQgKCpzYWZlX2hhbHQpKHZvaWQpOwotCXZvaWQgKCpoYWx0KSh2b2lkKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQl2b2lkICgqYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSkodm9pZCk7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBwdl9hcGljX29wcyB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jdm9pZCAoKnNldHVwX2Jvb3RfY2xvY2spKHZvaWQpOwotCXZvaWQgKCpzZXR1cF9zZWNvbmRhcnlfY2xvY2spKHZvaWQpOwotCi0Jdm9pZCAoKnN0YXJ0dXBfaXBpX2hvb2spKGludCBwaHlzX2FwaWNpZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydF9laXAsCi0JCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfZXNwKTsKLSNlbmRpZgotfTsKLQotc3RydWN0IHB2X21tdV9vcHMgewotCS8qCi0JICogQ2FsbGVkIGJlZm9yZS9hZnRlciBpbml0X21tIHBhZ2V0YWJsZSBzZXR1cC4gc2V0dXBfc3RhcnQKLQkgKiBtYXkgcmVzZXQgJWNyMywgYW5kIG1heSBwcmUtaW5zdGFsbCBwYXJ0cyBvZiB0aGUgcGFnZXRhYmxlOwotCSAqIHBhZ2V0YWJsZSBzZXR1cCBpcyBleHBlY3RlZCB0byBwcmVzZXJ2ZSBhbnkgZXhpc3RpbmcKLQkgKiBtYXBwaW5nLgotCSAqLwotCXZvaWQgKCpwYWdldGFibGVfc2V0dXBfc3RhcnQpKHBnZF90ICpwZ2RfYmFzZSk7Ci0Jdm9pZCAoKnBhZ2V0YWJsZV9zZXR1cF9kb25lKShwZ2RfdCAqcGdkX2Jhc2UpOwotCi0JdW5zaWduZWQgbG9uZyAoKnJlYWRfY3IyKSh2b2lkKTsKLQl2b2lkICgqd3JpdGVfY3IyKSh1bnNpZ25lZCBsb25nKTsKLQotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMykodm9pZCk7Ci0Jdm9pZCAoKndyaXRlX2NyMykodW5zaWduZWQgbG9uZyk7Ci0KLQkvKgotCSAqIEhvb2tzIGZvciBpbnRlcmNlcHRpbmcgdGhlIGNyZWF0aW9uL3VzZS9kZXN0cnVjdGlvbiBvZiBhbgotCSAqIG1tX3N0cnVjdC4KLQkgKi8KLQl2b2lkICgqYWN0aXZhdGVfbW0pKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCi0JCQkgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCk7Ci0Jdm9pZCAoKmR1cF9tbWFwKShzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKLQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Ci0Jdm9pZCAoKmV4aXRfbW1hcCkoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCi0KLQkvKiBUTEIgb3BlcmF0aW9ucyAqLwotCXZvaWQgKCpmbHVzaF90bGJfdXNlcikodm9pZCk7Ci0Jdm9pZCAoKmZsdXNoX3RsYl9rZXJuZWwpKHZvaWQpOwotCXZvaWQgKCpmbHVzaF90bGJfc2luZ2xlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwotCXZvaWQgKCpmbHVzaF90bGJfb3RoZXJzKShjb25zdCBjcHVtYXNrX3QgKmNwdXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSB1bnNpZ25lZCBsb25nIHZhKTsKLQotCS8qIEhvb2tzIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcGFnZXRhYmxlIHRvcC1sZXZlbCAqLwotCWludCAgKCpwZ2RfYWxsb2MpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLQl2b2lkICgqcGdkX2ZyZWUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKLQotCS8qCi0JICogSG9va3MgZm9yIGFsbG9jYXRpbmcvcmVsZWFzaW5nIHBhZ2V0YWJsZSBwYWdlcyB3aGVuIHRoZXkncmUKLQkgKiBhdHRhY2hlZCB0byBhIHBhZ2V0YWJsZQotCSAqLwotCXZvaWQgKCphbGxvY19wdGUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbik7Ci0Jdm9pZCAoKmFsbG9jX3BtZCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqYWxsb2NfcG1kX2Nsb25lKSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBjbG9uZXBmbiwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0Jdm9pZCAoKmFsbG9jX3B1ZCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqcmVsZWFzZV9wdGUpKHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqcmVsZWFzZV9wbWQpKHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqcmVsZWFzZV9wdWQpKHVuc2lnbmVkIGxvbmcgcGZuKTsKLQotCS8qIFBhZ2V0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICovCi0Jdm9pZCAoKnNldF9wdGUpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKCpzZXRfcHRlX2F0KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7Ci0Jdm9pZCAoKnNldF9wbWQpKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpOwotCXZvaWQgKCpwdGVfdXBkYXRlKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgcHRlX3QgKnB0ZXApOwotCXZvaWQgKCpwdGVfdXBkYXRlX2RlZmVyKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7Ci0KLQlwdGVfdCAoKnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCXB0ZV90ICpwdGVwKTsKLQl2b2lkICgqcHRlcF9tb2RpZnlfcHJvdF9jb21taXQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOwotCi0JcHRldmFsX3QgKCpwdGVfdmFsKShwdGVfdCk7Ci0JcHRldmFsX3QgKCpwdGVfZmxhZ3MpKHB0ZV90KTsKLQlwdGVfdCAoKm1ha2VfcHRlKShwdGV2YWxfdCBwdGUpOwotCi0JcGdkdmFsX3QgKCpwZ2RfdmFsKShwZ2RfdCk7Ci0JcGdkX3QgKCptYWtlX3BnZCkocGdkdmFsX3QgcGdkKTsKLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPj0gMwotI2lmZGVmIENPTkZJR19YODZfUEFFCi0Jdm9pZCAoKnNldF9wdGVfYXRvbWljKShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKTsKLQl2b2lkICgqc2V0X3B0ZV9wcmVzZW50KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOwotCXZvaWQgKCpwdGVfY2xlYXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgIHB0ZV90ICpwdGVwKTsKLQl2b2lkICgqcG1kX2NsZWFyKShwbWRfdCAqcG1kcCk7Ci0KLSNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwotCi0Jdm9pZCAoKnNldF9wdWQpKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWR2YWwpOwotCi0JcG1kdmFsX3QgKCpwbWRfdmFsKShwbWRfdCk7Ci0JcG1kX3QgKCptYWtlX3BtZCkocG1kdmFsX3QgcG1kKTsKLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotCXB1ZHZhbF90ICgqcHVkX3ZhbCkocHVkX3QpOwotCXB1ZF90ICgqbWFrZV9wdWQpKHB1ZHZhbF90IHB1ZCk7Ci0KLQl2b2lkICgqc2V0X3BnZCkocGdkX3QgKnB1ZHAsIHBnZF90IHBnZHZhbCk7Ci0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCi0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA+PSAzICovCi0KLSNpZmRlZiBDT05GSUdfSElHSFBURQotCXZvaWQgKigqa21hcF9hdG9taWNfcHRlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOwotI2VuZGlmCi0KLQlzdHJ1Y3QgcHZfbGF6eV9vcHMgbGF6eV9tb2RlOwotCi0JLyogZG9tMCBvcHMgKi8KLQotCS8qIFNvbWV0aW1lcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBhIHBmbiwgYW5kIHNvbWV0aW1lcyBpdHMKLQkgICBhbiBtZm4uICBXZSBjYW4gdGVsbCB3aGljaCBpcyB3aGljaCBmcm9tIHRoZSBpbmRleC4gKi8KLQl2b2lkICgqc2V0X2ZpeG1hcCkodW5zaWduZWQgLyogZW51bSBmaXhlZF9hZGRyZXNzZXMgKi8gaWR4LAotCQkJICAgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7Ci19OwotCi1zdHJ1Y3QgcmF3X3NwaW5sb2NrOwotc3RydWN0IHB2X2xvY2tfb3BzIHsKLQlpbnQgKCpzcGluX2lzX2xvY2tlZCkoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7Ci0JaW50ICgqc3Bpbl9pc19jb250ZW5kZWQpKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOwotCXZvaWQgKCpzcGluX2xvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOwotCXZvaWQgKCpzcGluX2xvY2tfZmxhZ3MpKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotCWludCAoKnNwaW5fdHJ5bG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7Ci0Jdm9pZCAoKnNwaW5fdW5sb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKLX07Ci0KLS8qIFRoaXMgY29udGFpbnMgYWxsIHRoZSBwYXJhdmlydCBzdHJ1Y3R1cmVzOiB3ZSBnZXQgYSBjb252ZW5pZW50Ci0gKiBudW1iZXIgZm9yIGVhY2ggZnVuY3Rpb24gdXNpbmcgdGhlIG9mZnNldCB3aGljaCB3ZSB1c2UgdG8gaW5kaWNhdGUKLSAqIHdoYXQgdG8gcGF0Y2guICovCi1zdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfdGVtcGxhdGUgewotCXN0cnVjdCBwdl9pbml0X29wcyBwdl9pbml0X29wczsKLQlzdHJ1Y3QgcHZfdGltZV9vcHMgcHZfdGltZV9vcHM7Ci0Jc3RydWN0IHB2X2NwdV9vcHMgcHZfY3B1X29wczsKLQlzdHJ1Y3QgcHZfaXJxX29wcyBwdl9pcnFfb3BzOwotCXN0cnVjdCBwdl9hcGljX29wcyBwdl9hcGljX29wczsKLQlzdHJ1Y3QgcHZfbW11X29wcyBwdl9tbXVfb3BzOwotCXN0cnVjdCBwdl9sb2NrX29wcyBwdl9sb2NrX29wczsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcHZfaW5mbyBwdl9pbmZvOwotZXh0ZXJuIHN0cnVjdCBwdl9pbml0X29wcyBwdl9pbml0X29wczsKLWV4dGVybiBzdHJ1Y3QgcHZfdGltZV9vcHMgcHZfdGltZV9vcHM7Ci1leHRlcm4gc3RydWN0IHB2X2NwdV9vcHMgcHZfY3B1X29wczsKLWV4dGVybiBzdHJ1Y3QgcHZfaXJxX29wcyBwdl9pcnFfb3BzOwotZXh0ZXJuIHN0cnVjdCBwdl9hcGljX29wcyBwdl9hcGljX29wczsKLWV4dGVybiBzdHJ1Y3QgcHZfbW11X29wcyBwdl9tbXVfb3BzOwotZXh0ZXJuIHN0cnVjdCBwdl9sb2NrX29wcyBwdl9sb2NrX29wczsKLQotI2RlZmluZSBQQVJBVklSVF9QQVRDSCh4KQkJCQkJXAotCShvZmZzZXRvZihzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfdGVtcGxhdGUsIHgpIC8gc2l6ZW9mKHZvaWQgKikpCi0KLSNkZWZpbmUgcGFyYXZpcnRfdHlwZShvcCkJCQkJXAotCVtwYXJhdmlydF90eXBlbnVtXSAiaSIgKFBBUkFWSVJUX1BBVENIKG9wKSksCVwKLQlbcGFyYXZpcnRfb3BwdHJdICJtIiAob3ApCi0jZGVmaW5lIHBhcmF2aXJ0X2Nsb2JiZXIoY2xvYmJlcikJCVwKLQlbcGFyYXZpcnRfY2xvYmJlcl0gImkiIChjbG9iYmVyKQotCi0vKgotICogR2VuZXJhdGUgc29tZSBjb2RlLCBhbmQgbWFyayBpdCBhcyBwYXRjaGFibGUgYnkgdGhlCi0gKiBhcHBseV9wYXJhdmlydCgpIGFsdGVybmF0ZSBpbnN0cnVjdGlvbiBwYXRjaGVyLgotICovCi0jZGVmaW5lIF9wYXJhdmlydF9hbHQoaW5zbl9zdHJpbmcsIHR5cGUsIGNsb2JiZXIpCVwKLQkiNzcxOlxuXHQiIGluc25fc3RyaW5nICJcbiIgIjc3MjpcbiIJCVwKLQkiLnB1c2hzZWN0aW9uIC5wYXJhaW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCVwKLQlfQVNNX0FMSUdOICJcbiIJCQkJCVwKLQlfQVNNX1BUUiAiIDc3MWJcbiIJCQkJXAotCSIgIC5ieXRlICIgdHlwZSAiXG4iCQkJCVwKLQkiICAuYnl0ZSA3NzJiLTc3MWJcbiIJCQkJXAotCSIgIC5zaG9ydCAiIGNsb2JiZXIgIlxuIgkJCVwKLQkiLnBvcHNlY3Rpb25cbiIKLQotLyogR2VuZXJhdGUgcGF0Y2hhYmxlIGNvZGUsIHdpdGggdGhlIGRlZmF1bHQgYXNtIHBhcmFtZXRlcnMuICovCi0jZGVmaW5lIHBhcmF2aXJ0X2FsdChpbnNuX3N0cmluZykJCQkJCVwKLQlfcGFyYXZpcnRfYWx0KGluc25fc3RyaW5nLCAiJWNbcGFyYXZpcnRfdHlwZW51bV0iLCAiJWNbcGFyYXZpcnRfY2xvYmJlcl0iKQotCi0vKiBTaW1wbGUgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgY29kZS4gKi8KLSNkZWZpbmUgREVGX05BVElWRShvcHMsIG5hbWUsIGNvZGUpIAkJCQkJXAotCWV4dGVybiBjb25zdCBjaGFyIHN0YXJ0XyMjb3BzIyNfIyNuYW1lW10sIGVuZF8jI29wcyMjXyMjbmFtZVtdOwlcCi0JYXNtKCJzdGFydF8iICNvcHMgIl8iICNuYW1lICI6ICIgY29kZSAiOyBlbmRfIiAjb3BzICJfIiAjbmFtZSAiOiIpCi0KLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX25vcCh2b2lkKTsKLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lnbm9yZSh1bnNpZ25lZCBsZW4pOwotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfY2FsbCh2b2lkICppbnNuYnVmLAotCQkJICAgICBjb25zdCB2b2lkICp0YXJnZXQsIHUxNiB0Z3RfY2xvYmJlcnMsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IHNpdGVfY2xvYmJlcnMsCi0JCQkgICAgIHVuc2lnbmVkIGxlbik7Ci11bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9qbXAodm9pZCAqaW5zbmJ1ZiwgY29uc3Qgdm9pZCAqdGFyZ2V0LAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2RlZmF1bHQodTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppbnNuYnVmLAotCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKLQotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaW5zbnModm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuLAotCQkJICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCk7Ci0KLXVuc2lnbmVkIG5hdGl2ZV9wYXRjaCh1OCB0eXBlLCB1MTYgY2xvYmJlcnMsIHZvaWQgKmlidWYsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKLQotaW50IHBhcmF2aXJ0X2Rpc2FibGVfaW9zcGFjZSh2b2lkKTsKLQotLyoKLSAqIFRoaXMgZ2VuZXJhdGVzIGFuIGluZGlyZWN0IGNhbGwgYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0eXBlIG51bWJlci4KLSAqIFRoZSB0eXBlIG51bWJlciwgY29tcHV0ZWQgaW4gUEFSQVZJUlRfUEFUQ0gsIGlzIGRlcml2ZWQgZnJvbSB0aGUKLSAqIG9mZnNldCBpbnRvIHRoZSBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSBzdHJ1Y3R1cmUsIGFuZCBjYW4gdGhlcmVmb3JlIGJlCi0gKiBmcmVlbHkgY29udmVydGVkIGJhY2sgaW50byBhIHN0cnVjdHVyZSBvZmZzZXQuCi0gKi8KLSNkZWZpbmUgUEFSQVZJUlRfQ0FMTAkiY2FsbCAqJVtwYXJhdmlydF9vcHB0cl07IgotCi0vKgotICogVGhlc2UgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byB3cmFwIGNhbGxzIHRocm91Z2ggb25lIG9mIHRoZSBwYXJhdmlydAotICogb3BzIHN0cnVjdHMsIHNvIHRoYXQgdGhleSBjYW4gYmUgbGF0ZXIgaWRlbnRpZmllZCBhbmQgcGF0Y2hlZCBhdAotICogcnVudGltZS4KLSAqCi0gKiBOb3JtYWxseSwgYSBjYWxsIHRvIGEgcHZfb3AgZnVuY3Rpb24gaXMgYSBzaW1wbGUgaW5kaXJlY3QgY2FsbDoKLSAqIChwdl9vcF9zdHJ1Y3Qub3BlcmF0aW9ucykoYXJncy4uLikuCi0gKgotICogVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBhIHJlbGF0aXZlbHkgc2xvdyBvcGVyYXRpb24gZm9yIG1vZGVybiBDUFVzLAotICogYmVjYXVzZSBpdCBjYW5ub3QgbmVjZXNzYXJpbHkgZGV0ZXJtaW5lIHdoYXQgdGhlIGRlc3RpbmF0aW9uCi0gKiBhZGRyZXNzIGlzLiAgSW4gdGhpcyBjYXNlLCB0aGUgYWRkcmVzcyBpcyBhIHJ1bnRpbWUgY29uc3RhbnQsIHNvIGF0Ci0gKiB0aGUgdmVyeSBsZWFzdCB3ZSBjYW4gcGF0Y2ggdGhlIGNhbGwgdG8gZSBhIHNpbXBsZSBkaXJlY3QgY2FsbCwgb3IKLSAqIGlkZWFsbHksIHBhdGNoIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiBpbnRvIHRoZSBjYWxsc2l0ZS4gIChEaXJlY3QKLSAqIGNhbGxzIGFyZSBlc3NlbnRpYWxseSBmcmVlLCBiZWNhdXNlIHRoZSBjYWxsIGFuZCByZXR1cm4gYWRkcmVzc2VzCi0gKiBhcmUgY29tcGxldGVseSBwcmVkaWN0YWJsZS4pCi0gKgotICogRm9yIGkzODYsIHRoZXNlIG1hY3JvcyByZWx5IG9uIHRoZSBzdGFuZGFyZCBnY2MgInJlZ3Bhcm0oMykiIGNhbGxpbmcKLSAqIGNvbnZlbnRpb24sIGluIHdoaWNoIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbiAlZWF4LAotICogJWVkeCwgJWVjeCAoaW4gdGhhdCBvcmRlciksIGFuZCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgcGxhY2VkCi0gKiBvbiB0aGUgc3RhY2suICBBbGwgY2FsbGVyLXNhdmUgcmVnaXN0ZXJzIChlYXgsZWR4LGVjeCkgYXJlIGV4cGVjdGVkCi0gKiB0byBiZSBtb2RpZmllZCAoZWl0aGVyIGNsb2JiZXJlZCBvciB1c2VkIGZvciByZXR1cm4gdmFsdWVzKS4KLSAqIFg4Nl82NCwgb24gdGhlIG90aGVyIGhhbmQsIGFscmVhZHkgc3BlY2lmaWVzIGEgcmVnaXN0ZXItYmFzZWQgY2FsbGluZwotICogY29udmVudGlvbnMsIHJldHVybmluZyBhdCAlcmF4LCB3aXRoIHBhcmFtZXRlcmVzIGdvaW5nIG9uICVyZGksICVyc2ksCi0gKiAlcmR4LCBhbmQgJXJjeC4gTm90ZSB0aGF0IGZvciB0aGlzIHJlYXNvbiwgeDg2XzY0IGRvZXMgbm90IG5lZWQgYW55Ci0gKiBzcGVjaWFsIGhhbmRsaW5nIGZvciBkZWFsaW5nIHdpdGggNCBhcmd1bWVudHMsIHVubGlrZSBpMzg2LgotICogSG93ZXZlciwgeDg2XzY0IGFsc28gaGF2ZSB0byBjbG9iYmVyIGFsbCBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzLCB3aGljaAotICogdW5mb3J0dW5hdGVseSwgYXJlIHF1aXRlIGEgYml0IChyOCAtIHIxMSkKLSAqCi0gKiBUaGUgY2FsbCBpbnN0cnVjdGlvbiBpdHNlbGYgaXMgbWFya2VkIGJ5IHBsYWNpbmcgaXRzIHN0YXJ0IGFkZHJlc3MKLSAqIGFuZCBzaXplIGludG8gdGhlIC5wYXJhaW5zdHJ1Y3Rpb25zIHNlY3Rpb24sIHNvIHRoYXQKLSAqIGFwcGx5X3BhcmF2aXJ0KCkgaW4gYXJjaC9pMzg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGNhbiBkbyB0aGUKLSAqIGFwcHJvcHJpYXRlIHBhdGNoaW5nIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBiYWNrZW5kIHB2X2luaXRfb3BzCi0gKiBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBVbmZvcnR1bmF0ZWx5IHRoZXJlJ3Mgbm8gd2F5IHRvIGdldCBnY2MgdG8gZ2VuZXJhdGUgdGhlIGFyZ3Mgc2V0dXAKLSAqIGZvciB0aGUgY2FsbCwgYW5kIHRoZW4gYWxsb3cgdGhlIGNhbGwgaXRzZWxmIHRvIGJlIGdlbmVyYXRlZCBieSBhbgotICogaW5saW5lIGFzbS4gIEJlY2F1c2Ugb2YgdGhpcywgd2UgbXVzdCBkbyB0aGUgY29tcGxldGUgYXJnIHNldHVwIGFuZAotICogcmV0dXJuIHZhbHVlIGhhbmRsaW5nIGZyb20gd2l0aGluIHRoZXNlIG1hY3Jvcy4gIFRoaXMgaXMgZmFpcmx5Ci0gKiBjdW1iZXJzb21lLgotICoKLSAqIFRoZXJlIGFyZSA1IHNldHMgb2YgUFZPUF8qIG1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIDAtNCBhcmd1bWVudHMuCi0gKiBJdCBjb3VsZCBiZSBleHRlbmRlZCB0byBtb3JlIGFyZ3VtZW50cywgYnV0IHRoZXJlIHdvdWxkIGJlIGxpdHRsZQotICogdG8gYmUgZ2FpbmVkIGZyb20gdGhhdC4gIEZvciBlYWNoIG51bWJlciBvZiBhcmd1bWVudHMsIHRoZXJlIGFyZQotICogdGhlIHR3byBWQ0FMTCBhbmQgQ0FMTCB2YXJpYW50cyBmb3Igdm9pZCBhbmQgbm9uLXZvaWQgZnVuY3Rpb25zLgotICoKLSAqIFdoZW4gdGhlcmUgaXMgYSByZXR1cm4gdmFsdWUsIHRoZSBpbnZva2VyIG9mIHRoZSBtYWNybyBtdXN0IHNwZWNpZnkKLSAqIHRoZSByZXR1cm4gdHlwZS4gIFRoZSBtYWNybyB0aGVuIHVzZXMgc2l6ZW9mKCkgb24gdGhhdCB0eXBlIHRvCi0gKiBkZXRlcm1pbmUgd2hldGhlciBpdHMgYSAzMiBvciA2NCBiaXQgdmFsdWUsIGFuZCBwbGFjZXMgdGhlIHJldHVybgotICogaW4gdGhlIHJpZ2h0IHJlZ2lzdGVyKHMpIChqdXN0ICVlYXggZm9yIDMyLWJpdCwgYW5kICVlZHg6JWVheCBmb3IKLSAqIDY0LWJpdCkuIEZvciB4ODZfNjQgbWFjaGluZXMsIGl0IGp1c3QgcmV0dXJucyBhdCAlcmF4IHJlZ2FyZGxlc3Mgb2YKLSAqIHRoZSByZXR1cm4gdmFsdWUgc2l6ZS4KLSAqCi0gKiA2NC1iaXQgYXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgYSBwYWlyIG9mIGFkamFjZW50IDMyLWJpdCBhcmd1bWVudHMKLSAqIGkzODYgYWxzbyBwYXNzZXMgNjQtYml0IGFyZ3VtZW50cyBhcyBhIHBhaXIgb2YgYWRqYWNlbnQgMzItYml0IGFyZ3VtZW50cwotICogaW4gbG93LGhpZ2ggb3JkZXIKLSAqCi0gKiBTbWFsbCBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgYW5kIHJldHVybmVkIGluIHJlZ2lzdGVycy4gIFRoZSBtYWNybwotICogY2FsbGluZyBjb252ZW50aW9uIGNhbid0IGRpcmVjdGx5IGRlYWwgd2l0aCB0aGlzLCBzbyB0aGUgd3JhcHBlcgotICogZnVuY3Rpb25zIG11c3QgZG8gdGhpcy4KLSAqCi0gKiBUaGVzZSBQVk9QXyogbWFjcm9zIGFyZSBvbmx5IGRlZmluZWQgd2l0aGluIHRoaXMgaGVhZGVyLiAgVGhpcwotICogbWVhbnMgdGhhdCBhbGwgdXNlcyBtdXN0IGJlIHdyYXBwZWQgaW4gaW5saW5lIGZ1bmN0aW9ucy4gIFRoaXMgYWxzbwotICogbWFrZXMgc3VyZSB0aGUgaW5jb21pbmcgYW5kIG91dGdvaW5nIHR5cGVzIGFyZSBhbHdheXMgY29ycmVjdC4KLSAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLSNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQkJdW5zaWduZWQgbG9uZyBfX2VheCwgX19lZHgsIF9fZWN4Ci0jZGVmaW5lIFBWT1BfQ0FMTF9BUkdTCQkJUFZPUF9WQ0FMTF9BUkdTCi0jZGVmaW5lIFBWT1BfVkNBTExfQ0xPQkJFUlMJCSI9YSIgKF9fZWF4KSwgIj1kIiAoX19lZHgpLAlcCi0JCQkJCSI9YyIgKF9fZWN4KQotI2RlZmluZSBQVk9QX0NBTExfQ0xPQkJFUlMJCVBWT1BfVkNBTExfQ0xPQkJFUlMKLSNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMKLSNkZWZpbmUgVkVYVFJBX0NMT0JCRVJTCi0jZWxzZQotI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCXVuc2lnbmVkIGxvbmcgX19lZGksIF9fZXNpLCBfX2VkeCwgX19lY3gKLSNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUywgX19lYXgKLSNkZWZpbmUgUFZPUF9WQ0FMTF9DTE9CQkVSUwkiPUQiIChfX2VkaSksCQkJCVwKLQkJCQkiPVMiIChfX2VzaSksICI9ZCIgKF9fZWR4KSwJCVwKLQkJCQkiPWMiIChfX2VjeCkKLQotI2RlZmluZSBQVk9QX0NBTExfQ0xPQkJFUlMJUFZPUF9WQ0FMTF9DTE9CQkVSUywgIj1hIiAoX19lYXgpCi0KLSNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMJICwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiCi0jZGVmaW5lIFZFWFRSQV9DTE9CQkVSUwkgLCAicmF4IiwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QQVJBVklSVF9ERUJVRwotI2RlZmluZSBQVk9QX1RFU1RfTlVMTChvcCkJQlVHX09OKG9wID09IE5VTEwpCi0jZWxzZQotI2RlZmluZSBQVk9QX1RFU1RfTlVMTChvcCkJKCh2b2lkKW9wKQotI2VuZGlmCi0KLSNkZWZpbmUgX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKLQkoewkJCQkJCQkJXAotCQlyZXR0eXBlIF9fcmV0OwkJCQkJCVwKLQkJUFZPUF9DQUxMX0FSR1M7CQkJCQlcCi0JCVBWT1BfVEVTVF9OVUxMKG9wKTsJCQkJCVwKLQkJLyogVGhpcyBpcyAzMi1iaXQgc3BlY2lmaWMsIGJ1dCBpcyBva2F5IGluIDY0LWJpdCAqLwlcCi0JCS8qIHNpbmNlIHRoaXMgY29uZGl0aW9uIHdpbGwgbmV2ZXIgaG9sZCAqLwkJXAotCQlpZiAoc2l6ZW9mKHJldHR5cGUpID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CQlcCi0JCQlhc20gdm9sYXRpbGUocHJlCQkJCVwKLQkJCQkgICAgIHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQlcCi0JCQkJICAgICBwb3N0CQkJCVwKLQkJCQkgICAgIDogUFZPUF9DQUxMX0NMT0JCRVJTCQlcCi0JCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJXAotCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfQU5ZKSwJXAotCQkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJXAotCQkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBFWFRSQV9DTE9CQkVSUyk7CVwKLQkJCV9fcmV0ID0gKHJldHR5cGUpKCgoKHU2NClfX2VkeCkgPDwgMzIpIHwgX19lYXgpOyBcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCi0JCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAotCQkJCSAgICAgcG9zdAkJCQlcCi0JCQkJICAgICA6IFBWT1BfQ0FMTF9DTE9CQkVSUwkJXAotCQkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCVwKLQkJCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0FOWSksCVwKLQkJCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCVwKLQkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgRVhUUkFfQ0xPQkJFUlMpOwlcCi0JCQlfX3JldCA9IChyZXR0eXBlKV9fZWF4OwkJCQlcCi0JCX0JCQkJCQkJXAotCQlfX3JldDsJCQkJCQkJXAotCX0pCi0jZGVmaW5lIF9fUFZPUF9WQ0FMTChvcCwgcHJlLCBwb3N0LCAuLi4pCQkJCVwKLQkoewkJCQkJCQkJXAotCQlQVk9QX1ZDQUxMX0FSR1M7CQkJCQlcCi0JCVBWT1BfVEVTVF9OVUxMKG9wKTsJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKHByZQkJCQkJXAotCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJCVwKLQkJCSAgICAgcG9zdAkJCQkJXAotCQkJICAgICA6IFBWT1BfVkNBTExfQ0xPQkJFUlMJCQlcCi0JCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQkJXAotCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9BTlkpLAkJXAotCQkJICAgICAgICMjX19WQV9BUkdTX18JCQkJXAotCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFZFWFRSQV9DTE9CQkVSUyk7CQlcCi0JfSkKLQotI2RlZmluZSBQVk9QX0NBTEwwKHJldHR5cGUsIG9wKQkJCQkJCVwKLQlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiKQotI2RlZmluZSBQVk9QX1ZDQUxMMChvcCkJCQkJCQkJXAotCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiKQotCi0jZGVmaW5lIFBWT1BfQ0FMTDEocmV0dHlwZSwgb3AsIGFyZzEpCQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpKQotI2RlZmluZSBQVk9QX1ZDQUxMMShvcCwgYXJnMSkJCQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSkKLQotI2RlZmluZSBQVk9QX0NBTEwyKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyKQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLCAJXAotCSIxIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTDIob3AsIGFyZzEsIGFyZzIpCQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwgCQlcCi0JIjEiICgodW5zaWduZWQgbG9uZykoYXJnMikpKQotCi0jZGVmaW5lIFBWT1BfQ0FMTDMocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTDMob3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLAkJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSkKLQotLyogVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGluIHg4Nl82NC4gV2UgY2FuIG1ha2UgaXQgbXVjaCBzaW1wbGVyICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBQVk9QX0NBTEw0KHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKLQlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwJCQkJCVwKLQkJICAgICJwdXNoICVbX2FyZzRdOyIsICJsZWEgNCglJWVzcCksJSVlc3A7IiwJCVwKLQkJICAgICIwIiAoKHUzMikoYXJnMSkpLCAiMSIgKCh1MzIpKGFyZzIpKSwJCVwKLQkJICAgICIyIiAoKHUzMikoYXJnMykpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTDQob3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsCQkJCQkJXAotCQkgICAgInB1c2ggJVtfYXJnNF07IiwgImxlYSA0KCUlZXNwKSwlJWVzcDsiLAkJXAotCQkgICAgIjAiICgodTMyKShhcmcxKSksICIxIiAoKHUzMikoYXJnMikpLAkJXAotCQkgICAgIjIiICgodTMyKShhcmczKSksIFtfYXJnNF0gIm1yIiAoKHUzMikoYXJnNCkpKQotI2Vsc2UKLSNkZWZpbmUgUFZPUF9DQUxMNChyZXR0eXBlLCBvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLAlcCi0JIjEiKCh1bnNpZ25lZCBsb25nKShhcmcyKSksICIyIigodW5zaWduZWQgbG9uZykoYXJnMykpLAkJXAotCSIzIigodW5zaWduZWQgbG9uZykoYXJnNCkpKQotI2RlZmluZSBQVk9QX1ZDQUxMNChvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQkJXAotCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLCAiMCIgKCh1bnNpZ25lZCBsb25nKShhcmcxKSksCQlcCi0JIjEiKCh1bnNpZ25lZCBsb25nKShhcmcyKSksICIyIigodW5zaWduZWQgbG9uZykoYXJnMykpLAkJXAotCSIzIigodW5zaWduZWQgbG9uZykoYXJnNCkpKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X2VuYWJsZWQodm9pZCkKLXsKLQlyZXR1cm4gcHZfaW5mby5wYXJhdmlydF9lbmFibGVkOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9zcDAoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywKLQkJCSAgICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKLXsKLQlQVk9QX1ZDQUxMMihwdl9jcHVfb3BzLmxvYWRfc3AwLCB0c3MsIHRocmVhZCk7Ci19Ci0KLSNkZWZpbmUgQVJDSF9TRVRVUAkJCXB2X2luaXRfb3BzLmFyY2hfc2V0dXAoKTsKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfd2FsbGNsb2NrKHZvaWQpCi17Ci0JcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfdGltZV9vcHMuZ2V0X3dhbGxjbG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNldF93YWxsY2xvY2sodW5zaWduZWQgbG9uZyBub3d0aW1lKQotewotCXJldHVybiBQVk9QX0NBTEwxKGludCwgcHZfdGltZV9vcHMuc2V0X3dhbGxjbG9jaywgbm93dGltZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAoKmNob29zZV90aW1lX2luaXQodm9pZCkpKHZvaWQpCi17Ci0JcmV0dXJuIHB2X3RpbWVfb3BzLnRpbWVfaW5pdDsKLX0KLQotLyogVGhlIHBhcmF2aXJ0dWFsaXplZCBDUFVJRCBpbnN0cnVjdGlvbi4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdWlkKHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKLQkJCSAgIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCkKLXsKLQlQVk9QX1ZDQUxMNChwdl9jcHVfb3BzLmNwdWlkLCBlYXgsIGVieCwgZWN4LCBlZHgpOwotfQotCi0vKgotICogVGhlc2Ugc3BlY2lhbCBtYWNyb3MgY2FuIGJlIHVzZWQgdG8gZ2V0IG9yIHNldCBhIGRlYnVnZ2luZyByZWdpc3RlcgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFyYXZpcnRfZ2V0X2RlYnVncmVnKGludCByZWcpCi17Ci0JcmV0dXJuIFBWT1BfQ0FMTDEodW5zaWduZWQgbG9uZywgcHZfY3B1X29wcy5nZXRfZGVidWdyZWcsIHJlZyk7Ci19Ci0jZGVmaW5lIGdldF9kZWJ1Z3JlZyh2YXIsIHJlZykgdmFyID0gcGFyYXZpcnRfZ2V0X2RlYnVncmVnKHJlZykKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVidWdyZWcodW5zaWduZWQgbG9uZyB2YWwsIGludCByZWcpCi17Ci0JUFZPUF9WQ0FMTDIocHZfY3B1X29wcy5zZXRfZGVidWdyZWcsIHJlZywgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNsdHModm9pZCkKLXsKLQlQVk9QX1ZDQUxMMChwdl9jcHVfb3BzLmNsdHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjAodm9pZCkKLXsKLQlyZXR1cm4gUFZPUF9DQUxMMCh1bnNpZ25lZCBsb25nLCBwdl9jcHVfb3BzLnJlYWRfY3IwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyMCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JUFZPUF9WQ0FMTDEocHZfY3B1X29wcy53cml0ZV9jcjAsIHgpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjIodm9pZCkKLXsKLQlyZXR1cm4gUFZPUF9DQUxMMCh1bnNpZ25lZCBsb25nLCBwdl9tbXVfb3BzLnJlYWRfY3IyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyMih1bnNpZ25lZCBsb25nIHgpCi17Ci0JUFZPUF9WQ0FMTDEocHZfbW11X29wcy53cml0ZV9jcjIsIHgpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjModm9pZCkKLXsKLQlyZXR1cm4gUFZPUF9DQUxMMCh1bnNpZ25lZCBsb25nLCBwdl9tbXVfb3BzLnJlYWRfY3IzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyMyh1bnNpZ25lZCBsb25nIHgpCi17Ci0JUFZPUF9WQ0FMTDEocHZfbW11X29wcy53cml0ZV9jcjMsIHgpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjQodm9pZCkKLXsKLQlyZXR1cm4gUFZPUF9DQUxMMCh1bnNpZ25lZCBsb25nLCBwdl9jcHVfb3BzLnJlYWRfY3I0KTsKLX0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyNF9zYWZlKHZvaWQpCi17Ci0JcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfY3B1X29wcy5yZWFkX2NyNF9zYWZlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyNCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JUFZPUF9WQ0FMTDEocHZfY3B1X29wcy53cml0ZV9jcjQsIHgpOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3I4KHZvaWQpCi17Ci0JcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfY3B1X29wcy5yZWFkX2NyOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjgodW5zaWduZWQgbG9uZyB4KQotewotCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMud3JpdGVfY3I4LCB4KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmF3X3NhZmVfaGFsdCh2b2lkKQotewotCVBWT1BfVkNBTEwwKHB2X2lycV9vcHMuc2FmZV9oYWx0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGhhbHQodm9pZCkKLXsKLQlQVk9QX1ZDQUxMMChwdl9pcnFfb3BzLnNhZmVfaGFsdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YmludmQodm9pZCkKLXsKLQlQVk9QX1ZDQUxMMChwdl9jcHVfb3BzLndiaW52ZCk7Ci19Ci0KLSNkZWZpbmUgZ2V0X2tlcm5lbF9ycGwoKSAgKHB2X2luZm8ua2VybmVsX3JwbCkKLQotc3RhdGljIGlubGluZSB1NjQgcGFyYXZpcnRfcmVhZF9tc3IodW5zaWduZWQgbXNyLCBpbnQgKmVycikKLXsKLQlyZXR1cm4gUFZPUF9DQUxMMih1NjQsIHB2X2NwdV9vcHMucmVhZF9tc3IsIG1zciwgZXJyKTsKLX0KLXN0YXRpYyBpbmxpbmUgdTY0IHBhcmF2aXJ0X3JlYWRfbXNyX2FtZCh1bnNpZ25lZCBtc3IsIGludCAqZXJyKQotewotCXJldHVybiBQVk9QX0NBTEwyKHU2NCwgcHZfY3B1X29wcy5yZWFkX21zcl9hbWQsIG1zciwgZXJyKTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X3dyaXRlX21zcih1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvdywgdW5zaWduZWQgaGlnaCkKLXsKLQlyZXR1cm4gUFZPUF9DQUxMMyhpbnQsIHB2X2NwdV9vcHMud3JpdGVfbXNyLCBtc3IsIGxvdywgaGlnaCk7Ci19Ci0KLS8qIFRoZXNlIHNob3VsZCBhbGwgZG8gQlVHX09OKF9lcnIpLCBidXQgb3VyIGhlYWRlcnMgYXJlIHRvbyB0YW5nbGVkLiAqLwotI2RlZmluZSByZG1zcihtc3IsIHZhbDEsIHZhbDIpCQkJXAotZG8gewkJCQkJCVwKLQlpbnQgX2VycjsJCQkJXAotCXU2NCBfbCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJl9lcnIpOwlcCi0JdmFsMSA9ICh1MzIpX2w7CQkJCVwKLQl2YWwyID0gX2wgPj4gMzI7CQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSB3cm1zcihtc3IsIHZhbDEsIHZhbDIpCQkJXAotZG8gewkJCQkJCVwKLQlwYXJhdmlydF93cml0ZV9tc3IobXNyLCB2YWwxLCB2YWwyKTsJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSByZG1zcmwobXNyLCB2YWwpCQkJXAotZG8gewkJCQkJCVwKLQlpbnQgX2VycjsJCQkJXAotCXZhbCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJl9lcnIpOwlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHdybXNybChtc3IsIHZhbCkJd3Jtc3IobXNyLCAodTMyKSgodTY0KSh2YWwpKSwgKCh1NjQpKHZhbCkpPj4zMikKLSNkZWZpbmUgd3Jtc3Jfc2FmZShtc3IsIGEsIGIpCXBhcmF2aXJ0X3dyaXRlX21zcihtc3IsIGEsIGIpCi0KLS8qIHJkbXNyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nICovCi0jZGVmaW5lIHJkbXNyX3NhZmUobXNyLCBhLCBiKQkJCVwKLSh7CQkJCQkJXAotCWludCBfZXJyOwkJCQlcCi0JdTY0IF9sID0gcGFyYXZpcnRfcmVhZF9tc3IobXNyLCAmX2Vycik7CVwKLQkoKmEpID0gKHUzMilfbDsJCQkJXAotCSgqYikgPSBfbCA+PiAzMjsJCQlcCi0JX2VycjsJCQkJCVwKLX0pCi0KLXN0YXRpYyBpbmxpbmUgaW50IHJkbXNybF9zYWZlKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG9uZyBsb25nICpwKQotewotCWludCBlcnI7Ci0KLQkqcCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJmVycik7Ci0JcmV0dXJuIGVycjsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IHJkbXNybF9hbWRfc2FmZSh1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcCkKLXsKLQlpbnQgZXJyOwotCi0JKnAgPSBwYXJhdmlydF9yZWFkX21zcl9hbWQobXNyLCAmZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW5saW5lIHU2NCBwYXJhdmlydF9yZWFkX3RzYyh2b2lkKQotewotCXJldHVybiBQVk9QX0NBTEwwKHU2NCwgcHZfY3B1X29wcy5yZWFkX3RzYyk7Ci19Ci0KLSNkZWZpbmUgcmR0c2NsKGxvdykJCQkJXAotZG8gewkJCQkJCVwKLQl1NjQgX2wgPSBwYXJhdmlydF9yZWFkX3RzYygpOwkJXAotCWxvdyA9IChpbnQpX2w7CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgcmR0c2NsbCh2YWwpICh2YWwgPSBwYXJhdmlydF9yZWFkX3RzYygpKQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBwYXJhdmlydF9zY2hlZF9jbG9jayh2b2lkKQotewotCXJldHVybiBQVk9QX0NBTEwwKHVuc2lnbmVkIGxvbmcgbG9uZywgcHZfdGltZV9vcHMuc2NoZWRfY2xvY2spOwotfQotI2RlZmluZSBjYWxpYnJhdGVfdHNjKCkgKHB2X3RpbWVfb3BzLmdldF90c2Nfa2h6KCkpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHBhcmF2aXJ0X3JlYWRfcG1jKGludCBjb3VudGVyKQotewotCXJldHVybiBQVk9QX0NBTEwxKHU2NCwgcHZfY3B1X29wcy5yZWFkX3BtYywgY291bnRlcik7Ci19Ci0KLSNkZWZpbmUgcmRwbWMoY291bnRlciwgbG93LCBoaWdoKQkJXAotZG8gewkJCQkJCVwKLQl1NjQgX2wgPSBwYXJhdmlydF9yZWFkX3BtYyhjb3VudGVyKTsJXAotCWxvdyA9ICh1MzIpX2w7CQkJCVwKLQloaWdoID0gX2wgPj4gMzI7CQkJXAotfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcGFyYXZpcnRfcmR0c2NwKHVuc2lnbmVkIGludCAqYXV4KQotewotCXJldHVybiBQVk9QX0NBTEwxKHU2NCwgcHZfY3B1X29wcy5yZWFkX3RzY3AsIGF1eCk7Ci19Ci0KLSNkZWZpbmUgcmR0c2NwKGxvdywgaGlnaCwgYXV4KQkJCQlcCi1kbyB7CQkJCQkJCVwKLQlpbnQgX19hdXg7CQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX3ZhbCA9IHBhcmF2aXJ0X3JkdHNjcCgmX19hdXgpOwlcCi0JKGxvdykgPSAodTMyKV9fdmFsOwkJCQlcCi0JKGhpZ2gpID0gKHUzMikoX192YWwgPj4gMzIpOwkJCVwKLQkoYXV4KSA9IF9fYXV4OwkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSByZHRzY3BsbCh2YWwsIGF1eCkJCQkJXAotZG8gewkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX2F1eDsgCQkJCVwKLQl2YWwgPSBwYXJhdmlydF9yZHRzY3AoJl9fYXV4KTsJCQlcCi0JKGF1eCkgPSBfX2F1eDsJCQkJCVwKLX0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hbGxvY19sZHQoc3RydWN0IGRlc2Nfc3RydWN0ICpsZHQsIHVuc2lnbmVkIGVudHJpZXMpCi17Ci0JUFZPUF9WQ0FMTDIocHZfY3B1X29wcy5hbGxvY19sZHQsIGxkdCwgZW50cmllcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9mcmVlX2xkdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgdW5zaWduZWQgZW50cmllcykKLXsKLQlQVk9QX1ZDQUxMMihwdl9jcHVfb3BzLmZyZWVfbGR0LCBsZHQsIGVudHJpZXMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9UUl9kZXNjKHZvaWQpCi17Ci0JUFZPUF9WQ0FMTDAocHZfY3B1X29wcy5sb2FkX3RyX2Rlc2MpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGxvYWRfZ2R0KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZHRyKQotewotCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMubG9hZF9nZHQsIGR0cik7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9pZHQoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpkdHIpCi17Ci0JUFZPUF9WQ0FMTDEocHZfY3B1X29wcy5sb2FkX2lkdCwgZHRyKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbGR0KGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGVudHJpZXMpCi17Ci0JUFZPUF9WQ0FMTDIocHZfY3B1X29wcy5zZXRfbGR0LCBhZGRyLCBlbnRyaWVzKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZV9nZHQoc3RydWN0IGRlc2NfcHRyICpkdHIpCi17Ci0JUFZPUF9WQ0FMTDEocHZfY3B1X29wcy5zdG9yZV9nZHQsIGR0cik7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfaWR0KHN0cnVjdCBkZXNjX3B0ciAqZHRyKQotewotCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMuc3RvcmVfaWR0LCBkdHIpOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhcmF2aXJ0X3N0b3JlX3RyKHZvaWQpCi17Ci0JcmV0dXJuIFBWT1BfQ0FMTDAodW5zaWduZWQgbG9uZywgcHZfY3B1X29wcy5zdG9yZV90cik7Ci19Ci0jZGVmaW5lIHN0b3JlX3RyKHRyKQkoKHRyKSA9IHBhcmF2aXJ0X3N0b3JlX3RyKCkpCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9UTFMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHVuc2lnbmVkIGNwdSkKLXsKLQlQVk9QX1ZDQUxMMihwdl9jcHVfb3BzLmxvYWRfdGxzLCB0LCBjcHUpOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIGlubGluZSB2b2lkIGxvYWRfZ3NfaW5kZXgodW5zaWduZWQgaW50IGdzKQotewotCVBWT1BfVkNBTEwxKHB2X2NwdV9vcHMubG9hZF9nc19pbmRleCwgZ3MpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9sZHRfZW50cnkoc3RydWN0IGRlc2Nfc3RydWN0ICpkdCwgaW50IGVudHJ5LAotCQkJCSAgIGNvbnN0IHZvaWQgKmRlc2MpCi17Ci0JUFZPUF9WQ0FMTDMocHZfY3B1X29wcy53cml0ZV9sZHRfZW50cnksIGR0LCBlbnRyeSwgZGVzYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9nZHRfZW50cnkoc3RydWN0IGRlc2Nfc3RydWN0ICpkdCwgaW50IGVudHJ5LAotCQkJCSAgIHZvaWQgKmRlc2MsIGludCB0eXBlKQotewotCVBWT1BfVkNBTEw0KHB2X2NwdV9vcHMud3JpdGVfZ2R0X2VudHJ5LCBkdCwgZW50cnksIGRlc2MsIHR5cGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaWR0X2VudHJ5KGdhdGVfZGVzYyAqZHQsIGludCBlbnRyeSwgY29uc3QgZ2F0ZV9kZXNjICpnKQotewotCVBWT1BfVkNBTEwzKHB2X2NwdV9vcHMud3JpdGVfaWR0X2VudHJ5LCBkdCwgZW50cnksIGcpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9pb3BsX21hc2sodW5zaWduZWQgbWFzaykKLXsKLQlQVk9QX1ZDQUxMMShwdl9jcHVfb3BzLnNldF9pb3BsX21hc2ssIG1hc2spOwotfQotCi0vKiBUaGUgcGFyYXZpcnR1YWxpemVkIEkvTyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd25faW8odm9pZCkKLXsKLQlwdl9jcHVfb3BzLmlvX2RlbGF5KCk7Ci0jaWZkZWYgUkVBTExZX1NMT1dfSU8KLQlwdl9jcHVfb3BzLmlvX2RlbGF5KCk7Ci0JcHZfY3B1X29wcy5pb19kZWxheSgpOwotCXB2X2NwdV9vcHMuaW9fZGVsYXkoKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfYm9vdF9jbG9jayh2b2lkKQotewotCVBWT1BfVkNBTEwwKHB2X2FwaWNfb3BzLnNldHVwX2Jvb3RfY2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCi17Ci0JUFZPUF9WQ0FMTDAocHZfYXBpY19vcHMuc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcG9zdF9hbGxvY2F0b3JfaW5pdCh2b2lkKQotewotCWlmIChwdl9pbml0X29wcy5wb3N0X2FsbG9jYXRvcl9pbml0KQotCQkoKnB2X2luaXRfb3BzLnBvc3RfYWxsb2NhdG9yX2luaXQpKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCi17Ci0JKCpwdl9tbXVfb3BzLnBhZ2V0YWJsZV9zZXR1cF9zdGFydCkoYmFzZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKLXsKLQkoKnB2X21tdV9vcHMucGFnZXRhYmxlX3NldHVwX2RvbmUpKGJhc2UpOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0dXBfaXBpX2hvb2soaW50IHBoeXNfYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydF9lc3ApCi17Ci0JUFZPUF9WQ0FMTDMocHZfYXBpY19vcHMuc3RhcnR1cF9pcGlfaG9vaywKLQkJICAgIHBoeXNfYXBpY2lkLCBzdGFydF9laXAsIHN0YXJ0X2VzcCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCi0JCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCi17Ci0JUFZPUF9WQ0FMTDIocHZfbW11X29wcy5hY3RpdmF0ZV9tbSwgcHJldiwgbmV4dCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2R1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tLAotCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLmR1cF9tbWFwLCBvbGRtbSwgbW0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JUFZPUF9WQ0FMTDEocHZfbW11X29wcy5leGl0X21tYXAsIG1tKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCi17Ci0JUFZPUF9WQ0FMTDAocHZfbW11X29wcy5mbHVzaF90bGJfdXNlcik7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfZ2xvYmFsKHZvaWQpCi17Ci0JUFZPUF9WQ0FMTDAocHZfbW11X29wcy5mbHVzaF90bGJfa2VybmVsKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYl9zaW5nbGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMuZmx1c2hfdGxiX3NpbmdsZSwgYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfb3RoZXJzKGNwdW1hc2tfdCBjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YSkKLXsKLQlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLmZsdXNoX3RsYl9vdGhlcnMsICZjcHVtYXNrLCBtbSwgdmEpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwYXJhdmlydF9wZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JcmV0dXJuIFBWT1BfQ0FMTDEoaW50LCBwdl9tbXVfb3BzLnBnZF9hbGxvYywgbW0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCi17Ci0JUFZPUF9WQ0FMTDIocHZfbW11X29wcy5wZ2RfZnJlZSwgbW0sIHBnZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hbGxvY19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCVBWT1BfVkNBTEwyKHB2X21tdV9vcHMuYWxsb2NfcHRlLCBtbSwgcGZuKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9yZWxlYXNlX3B0ZSh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlQVk9QX1ZDQUxMMShwdl9tbXVfb3BzLnJlbGVhc2VfcHRlLCBwZm4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYWxsb2NfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLmFsbG9jX3BtZCwgbW0sIHBmbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hbGxvY19wbWRfY2xvbmUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgY2xvbmVwZm4sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCVBWT1BfVkNBTEw0KHB2X21tdV9vcHMuYWxsb2NfcG1kX2Nsb25lLCBwZm4sIGNsb25lcGZuLCBzdGFydCwgY291bnQpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3JlbGVhc2VfcG1kKHVuc2lnbmVkIGxvbmcgcGZuKQotewotCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMucmVsZWFzZV9wbWQsIHBmbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hbGxvY19wdWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCVBWT1BfVkNBTEwyKHB2X21tdV9vcHMuYWxsb2NfcHVkLCBtbSwgcGZuKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9yZWxlYXNlX3B1ZCh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlQVk9QX1ZDQUxMMShwdl9tbXVfb3BzLnJlbGVhc2VfcHVkLCBwZm4pOwotfQotCi0jaWZkZWYgQ09ORklHX0hJR0hQVEUKLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hcF9hdG9taWNfcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKLXsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQlyZXQgPSBQVk9QX0NBTEwyKHVuc2lnbmVkIGxvbmcsIHB2X21tdV9vcHMua21hcF9hdG9taWNfcHRlLCBwYWdlLCB0eXBlKTsKLQlyZXR1cm4gKHZvaWQgKilyZXQ7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIHB0ZV91cGRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHB0ZV90ICpwdGVwKQotewotCVBWT1BfVkNBTEwzKHB2X21tdV9vcHMucHRlX3VwZGF0ZSwgbW0sIGFkZHIsIHB0ZXApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX3VwZGF0ZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICBwdGVfdCAqcHRlcCkKLXsKLQlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLnB0ZV91cGRhdGVfZGVmZXIsIG1tLCBhZGRyLCBwdGVwKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZShwdGV2YWxfdCB2YWwpCi17Ci0JcHRldmFsX3QgcmV0OwotCi0JaWYgKHNpemVvZihwdGV2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9IFBWT1BfQ0FMTDIocHRldmFsX3QsCi0JCQkJIHB2X21tdV9vcHMubWFrZV9wdGUsCi0JCQkJIHZhbCwgKHU2NCl2YWwgPj4gMzIpOwotCWVsc2UKLQkJcmV0ID0gUFZPUF9DQUxMMShwdGV2YWxfdCwKLQkJCQkgcHZfbW11X29wcy5tYWtlX3B0ZSwKLQkJCQkgdmFsKTsKLQotCXJldHVybiAocHRlX3QpIHsgLnB0ZSA9IHJldCB9OwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZXZhbF90IHB0ZV92YWwocHRlX3QgcHRlKQotewotCXB0ZXZhbF90IHJldDsKLQotCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV92YWwsCi0JCQkJIHB0ZS5wdGUsICh1NjQpcHRlLnB0ZSA+PiAzMik7Ci0JZWxzZQotCQlyZXQgPSBQVk9QX0NBTEwxKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV92YWwsCi0JCQkJIHB0ZS5wdGUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBwdGV2YWxfdCBwdGVfZmxhZ3MocHRlX3QgcHRlKQotewotCXB0ZXZhbF90IHJldDsKLQotCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV9mbGFncywKLQkJCQkgcHRlLnB0ZSwgKHU2NClwdGUucHRlID4+IDMyKTsKLQllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX2ZsYWdzLAotCQkJCSBwdGUucHRlKTsKLQotI2lmZGVmIENPTkZJR19QQVJBVklSVF9ERUJVRwotCUJVR19PTihyZXQgJiBQVEVfUEZOX01BU0spOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBwZ2RfdCBfX3BnZChwZ2R2YWxfdCB2YWwpCi17Ci0JcGdkdmFsX3QgcmV0OwotCi0JaWYgKHNpemVvZihwZ2R2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9IFBWT1BfQ0FMTDIocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCi0JCQkJIHZhbCwgKHU2NCl2YWwgPj4gMzIpOwotCWVsc2UKLQkJcmV0ID0gUFZPUF9DQUxMMShwZ2R2YWxfdCwgcHZfbW11X29wcy5tYWtlX3BnZCwKLQkJCQkgdmFsKTsKLQotCXJldHVybiAocGdkX3QpIHsgcmV0IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGdkdmFsX3QgcGdkX3ZhbChwZ2RfdCBwZ2QpCi17Ci0JcGdkdmFsX3QgcmV0OwotCi0JaWYgKHNpemVvZihwZ2R2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9ICBQVk9QX0NBTEwyKHBnZHZhbF90LCBwdl9tbXVfb3BzLnBnZF92YWwsCi0JCQkJICBwZ2QucGdkLCAodTY0KXBnZC5wZ2QgPj4gMzIpOwotCWVsc2UKLQkJcmV0ID0gIFBWT1BfQ0FMTDEocGdkdmFsX3QsIHB2X21tdV9vcHMucGdkX3ZhbCwKLQkJCQkgIHBnZC5wZ2QpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSAgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTgotc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCSAgIHB0ZV90ICpwdGVwKQotewotCXB0ZXZhbF90IHJldDsKLQotCXJldCA9IFBWT1BfQ0FMTDMocHRldmFsX3QsIHB2X21tdV9vcHMucHRlcF9tb2RpZnlfcHJvdF9zdGFydCwKLQkJCSBtbSwgYWRkciwgcHRlcCk7Ci0KLQlyZXR1cm4gKHB0ZV90KSB7IC5wdGUgPSByZXQgfTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JaWYgKHNpemVvZihwdGV2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCS8qIDUgYXJnIHdvcmRzICovCi0JCXB2X21tdV9vcHMucHRlcF9tb2RpZnlfcHJvdF9jb21taXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7Ci0JZWxzZQotCQlQVk9QX1ZDQUxMNChwdl9tbXVfb3BzLnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0LAotCQkJICAgIG1tLCBhZGRyLCBwdGVwLCBwdGUucHRlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlpZiAoc2l6ZW9mKHB0ZXZhbF90KSA+IHNpemVvZihsb25nKSkKLQkJUFZPUF9WQ0FMTDMocHZfbW11X29wcy5zZXRfcHRlLCBwdGVwLAotCQkJICAgIHB0ZS5wdGUsICh1NjQpcHRlLnB0ZSA+PiAzMik7Ci0JZWxzZQotCQlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLnNldF9wdGUsIHB0ZXAsCi0JCQkgICAgcHRlLnB0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQkvKiA1IGFyZyB3b3JkcyAqLwotCQlwdl9tbXVfb3BzLnNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7Ci0JZWxzZQotCQlQVk9QX1ZDQUxMNChwdl9tbXVfb3BzLnNldF9wdGVfYXQsIG1tLCBhZGRyLCBwdGVwLCBwdGUucHRlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKLXsKLQlwbWR2YWxfdCB2YWwgPSBuYXRpdmVfcG1kX3ZhbChwbWQpOwotCi0JaWYgKHNpemVvZihwbWR2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCVBWT1BfVkNBTEwzKHB2X21tdV9vcHMuc2V0X3BtZCwgcG1kcCwgdmFsLCAodTY0KXZhbCA+PiAzMik7Ci0JZWxzZQotCQlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLnNldF9wbWQsIHBtZHAsIHZhbCk7Ci19Ci0KLSNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKLXN0YXRpYyBpbmxpbmUgcG1kX3QgX19wbWQocG1kdmFsX3QgdmFsKQotewotCXBtZHZhbF90IHJldDsKLQotCWlmIChzaXplb2YocG1kdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAotCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKLQllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocG1kdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wbWQsCi0JCQkJIHZhbCk7Ci0KLQlyZXR1cm4gKHBtZF90KSB7IHJldCB9OwotfQotCi1zdGF0aWMgaW5saW5lIHBtZHZhbF90IHBtZF92YWwocG1kX3QgcG1kKQotewotCXBtZHZhbF90IHJldDsKLQotCWlmIChzaXplb2YocG1kdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSAgUFZPUF9DQUxMMihwbWR2YWxfdCwgcHZfbW11X29wcy5wbWRfdmFsLAotCQkJCSAgcG1kLnBtZCwgKHU2NClwbWQucG1kID4+IDMyKTsKLQllbHNlCi0JCXJldCA9ICBQVk9QX0NBTEwxKHBtZHZhbF90LCBwdl9tbXVfb3BzLnBtZF92YWwsCi0JCQkJICBwbWQucG1kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpCi17Ci0JcHVkdmFsX3QgdmFsID0gbmF0aXZlX3B1ZF92YWwocHVkKTsKLQotCWlmIChzaXplb2YocHVkdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLnNldF9wdWQsIHB1ZHAsCi0JCQkgICAgdmFsLCAodTY0KXZhbCA+PiAzMik7Ci0JZWxzZQotCQlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLnNldF9wdWQsIHB1ZHAsCi0JCQkgICAgdmFsKTsKLX0KLSNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKLXN0YXRpYyBpbmxpbmUgcHVkX3QgX19wdWQocHVkdmFsX3QgdmFsKQotewotCXB1ZHZhbF90IHJldDsKLQotCWlmIChzaXplb2YocHVkdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHB1ZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcHVkLAotCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKLQllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHVkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wdWQsCi0JCQkJIHZhbCk7Ci0KLQlyZXR1cm4gKHB1ZF90KSB7IHJldCB9OwotfQotCi1zdGF0aWMgaW5saW5lIHB1ZHZhbF90IHB1ZF92YWwocHVkX3QgcHVkKQotewotCXB1ZHZhbF90IHJldDsKLQotCWlmIChzaXplb2YocHVkdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSAgUFZPUF9DQUxMMihwdWR2YWxfdCwgcHZfbW11X29wcy5wdWRfdmFsLAotCQkJCSAgcHVkLnB1ZCwgKHU2NClwdWQucHVkID4+IDMyKTsKLQllbHNlCi0JCXJldCA9ICBQVk9QX0NBTEwxKHB1ZHZhbF90LCBwdl9tbXVfb3BzLnB1ZF92YWwsCi0JCQkJICBwdWQucHVkKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGdkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QpCi17Ci0JcGdkdmFsX3QgdmFsID0gbmF0aXZlX3BnZF92YWwocGdkKTsKLQotCWlmIChzaXplb2YocGdkdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLnNldF9wZ2QsIHBnZHAsCi0JCQkgICAgdmFsLCAodTY0KXZhbCA+PiAzMik7Ci0JZWxzZQotCQlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLnNldF9wZ2QsIHBnZHAsCi0JCQkgICAgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqcGdkcCkKLXsKLQlzZXRfcGdkKHBnZHAsIF9fcGdkKDApKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkcCkKLXsKLQlzZXRfcHVkKHB1ZHAsIF9fcHVkKDApKTsKLX0KLQotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLwotCi0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA+PSAzICovCi0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotLyogU3BlY2lhbC1jYXNlIHB0ZS1zZXR0aW5nIG9wZXJhdGlvbnMgZm9yIFBBRSwgd2hpY2ggY2FuJ3QgdXBkYXRlIGEKLSAgIDY0LWJpdCBwdGUgYXRvbWljYWxseSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JUFZPUF9WQ0FMTDMocHZfbW11X29wcy5zZXRfcHRlX2F0b21pYywgcHRlcCwKLQkJICAgIHB0ZS5wdGUsIHB0ZS5wdGUgPj4gMzIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQkvKiA1IGFyZyB3b3JkcyAqLwotCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50KG1tLCBhZGRyLCBwdGVwLCBwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgIHB0ZV90ICpwdGVwKQotewotCVBWT1BfVkNBTEwzKHB2X21tdV9vcHMucHRlX2NsZWFyLCBtbSwgYWRkciwgcHRlcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKnBtZHApCi17Ci0JUFZPUF9WQ0FMTDEocHZfbW11X29wcy5wbWRfY2xlYXIsIHBtZHApOwotfQotI2Vsc2UgIC8qICFDT05GSUdfWDg2X1BBRSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0Jc2V0X3B0ZShwdGVwLCBwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlzZXRfcHRlKHB0ZXAsIHB0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgcHRlX3QgKnB0ZXApCi17Ci0Jc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgX19wdGUoMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICpwbWRwKQotewotCXNldF9wbWQocG1kcCwgX19wbWQoMCkpOwotfQotI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCi0KLS8qIExhenkgbW9kZSBmb3IgYmF0Y2hpbmcgdXBkYXRlcyAvIGNvbnRleHQgc3dpdGNoICovCi1lbnVtIHBhcmF2aXJ0X2xhenlfbW9kZSB7Ci0JUEFSQVZJUlRfTEFaWV9OT05FLAotCVBBUkFWSVJUX0xBWllfTU1VLAotCVBBUkFWSVJUX0xBWllfQ1BVLAotfTsKLQotZW51bSBwYXJhdmlydF9sYXp5X21vZGUgcGFyYXZpcnRfZ2V0X2xhenlfbW9kZSh2b2lkKTsKLXZvaWQgcGFyYXZpcnRfZW50ZXJfbGF6eV9jcHUodm9pZCk7Ci12b2lkIHBhcmF2aXJ0X2xlYXZlX2xhenlfY3B1KHZvaWQpOwotdm9pZCBwYXJhdmlydF9lbnRlcl9sYXp5X21tdSh2b2lkKTsKLXZvaWQgcGFyYXZpcnRfbGVhdmVfbGF6eV9tbXUodm9pZCk7Ci12b2lkIHBhcmF2aXJ0X2xlYXZlX2xhenkoZW51bSBwYXJhdmlydF9sYXp5X21vZGUgbW9kZSk7Ci0KLSNkZWZpbmUgIF9fSEFWRV9BUkNIX0VOVEVSX0xBWllfQ1BVX01PREUKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VudGVyX2xhenlfY3B1X21vZGUodm9pZCkKLXsKLQlQVk9QX1ZDQUxMMChwdl9jcHVfb3BzLmxhenlfbW9kZS5lbnRlcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xlYXZlX2xhenlfY3B1X21vZGUodm9pZCkKLXsKLQlQVk9QX1ZDQUxMMChwdl9jcHVfb3BzLmxhenlfbW9kZS5sZWF2ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZsdXNoX2xhenlfY3B1X21vZGUodm9pZCkKLXsKLQlpZiAodW5saWtlbHkocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpID09IFBBUkFWSVJUX0xBWllfQ1BVKSkgewotCQlhcmNoX2xlYXZlX2xhenlfY3B1X21vZGUoKTsKLQkJYXJjaF9lbnRlcl9sYXp5X2NwdV9tb2RlKCk7Ci0JfQotfQotCi0KLSNkZWZpbmUgIF9fSEFWRV9BUkNIX0VOVEVSX0xBWllfTU1VX01PREUKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCkKLXsKLQlQVk9QX1ZDQUxMMChwdl9tbXVfb3BzLmxhenlfbW9kZS5lbnRlcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCkKLXsKLQlQVk9QX1ZDQUxMMChwdl9tbXVfb3BzLmxhenlfbW9kZS5sZWF2ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKLXsKLQlpZiAodW5saWtlbHkocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpID09IFBBUkFWSVJUX0xBWllfTU1VKSkgewotCQlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKLQkJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfZml4bWFwKHVuc2lnbmVkIC8qIGVudW0gZml4ZWRfYWRkcmVzc2VzICovIGlkeCwKLQkJCQl1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKQotewotCXB2X21tdV9vcHMuc2V0X2ZpeG1hcChpZHgsIHBoeXMsIGZsYWdzKTsKLX0KLQotdm9pZCBfcGFyYXZpcnRfbm9wKHZvaWQpOwotI2RlZmluZSBwYXJhdmlydF9ub3AJKCh2b2lkICopX3BhcmF2aXJ0X25vcCkKLQotdm9pZCBwYXJhdmlydF91c2VfYnl0ZWxvY2tzKHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX1NNUAotCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2xvY2tlZChzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQotewotCXJldHVybiBQVk9QX0NBTEwxKGludCwgcHZfbG9ja19vcHMuc3Bpbl9pc19sb2NrZWQsIGxvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZChzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQotewotCXJldHVybiBQVk9QX0NBTEwxKGludCwgcHZfbG9ja19vcHMuc3Bpbl9pc19jb250ZW5kZWQsIGxvY2spOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCi17Ci0JUFZPUF9WQ0FMTDEocHZfbG9ja19vcHMuc3Bpbl9sb2NrLCBsb2NrKTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrLAotCQkJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCVBWT1BfVkNBTEwyKHB2X2xvY2tfb3BzLnNwaW5fbG9ja19mbGFncywgbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKLXsKLQlyZXR1cm4gUFZPUF9DQUxMMShpbnQsIHB2X2xvY2tfb3BzLnNwaW5fdHJ5bG9jaywgbG9jayk7Ci19Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQotewotCVBWT1BfVkNBTEwxKHB2X2xvY2tfb3BzLnNwaW5fdW5sb2NrLCBsb2NrKTsKLX0KLQotI2VuZGlmCi0KLS8qIFRoZXNlIGFsbCBzaXQgaW4gdGhlIC5wYXJhaW5zdHJ1Y3Rpb25zIHNlY3Rpb24gdG8gdGVsbCB1cyB3aGF0IHRvIHBhdGNoLiAqLwotc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgewotCXU4ICppbnN0cjsgCQkvKiBvcmlnaW5hbCBpbnN0cnVjdGlvbnMgKi8KLQl1OCBpbnN0cnR5cGU7CQkvKiB0eXBlIG9mIHRoaXMgaW5zdHJ1Y3Rpb24gKi8KLQl1OCBsZW47CQkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCi0JdTE2IGNsb2JiZXJzOwkJLyogd2hhdCByZWdpc3RlcnMgeW91IG1heSBjbG9iYmVyICovCi19OwotCi1leHRlcm4gc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgX19wYXJhaW5zdHJ1Y3Rpb25zW10sCi0JX19wYXJhaW5zdHJ1Y3Rpb25zX2VuZFtdOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBQVl9TQVZFX1JFR1MgInB1c2hsICUlZWN4OyBwdXNobCAlJWVkeDsiCi0jZGVmaW5lIFBWX1JFU1RPUkVfUkVHUyAicG9wbCAlJWVkeDsgcG9wbCAlJWVjeCIKLSNkZWZpbmUgUFZfRkxBR1NfQVJHICIwIgotI2RlZmluZSBQVl9FWFRSQV9DTE9CQkVSUwotI2RlZmluZSBQVl9WRVhUUkFfQ0xPQkJFUlMKLSNlbHNlCi0vKiBXZSBzYXZlIHNvbWUgcmVnaXN0ZXJzLCBidXQgYWxsIG9mIHRoZW0sIHRoYXQncyB0b28gbXVjaC4gV2UgY2xvYmJlciBhbGwKLSAqIGNhbGxlciBzYXZlZCByZWdpc3RlcnMgYnV0IHRoZSBhcmd1bWVudCBwYXJhbWV0ZXIgKi8KLSNkZWZpbmUgUFZfU0FWRV9SRUdTICJwdXNocSAlJXJkaTsiCi0jZGVmaW5lIFBWX1JFU1RPUkVfUkVHUyAicG9wcSAlJXJkaTsiCi0jZGVmaW5lIFBWX0VYVFJBX0NMT0JCRVJTIEVYVFJBX0NMT0JCRVJTLCAicmN4IiAsICJyZHgiLCAicnNpIgotI2RlZmluZSBQVl9WRVhUUkFfQ0xPQkJFUlMgRVhUUkFfQ0xPQkJFUlMsICJyZGkiLCAicmN4IiAsICJyZHgiLCAicnNpIgotI2RlZmluZSBQVl9GTEFHU19BUkcgIkQiCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGY7Ci0KLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBWX1NBVkVfUkVHUwotCQkJCSAgUEFSQVZJUlRfQ0FMTAotCQkJCSAgUFZfUkVTVE9SRV9SRUdTKQotCQkgICAgIDogIj1hIihmKQotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnNhdmVfZmwpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFBWX1ZFWFRSQV9DTE9CQkVSUyk7Ci0JcmV0dXJuIGY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmKQotewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCi0JCSAgICAgOiAiPWEiKGYpCi0JCSAgICAgOiBQVl9GTEFHU19BUkcoZiksCi0JCSAgICAgICBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMucmVzdG9yZV9mbCksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIgUFZfRVhUUkFfQ0xPQkJFUlMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9kaXNhYmxlKHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQVl9TQVZFX1JFR1MKLQkJCQkgIFBBUkFWSVJUX0NBTEwKLQkJCQkgIFBWX1JFU1RPUkVfUkVHUykKLQkJICAgICA6Ci0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuaXJxX2Rpc2FibGUpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImNjIiBQVl9FWFRSQV9DTE9CQkVSUyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQotewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCi0JCSAgICAgOgotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9lbmFibGUpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImNjIiBQVl9FWFRSQV9DTE9CQkVSUyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9pcnFfc2F2ZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZjsKLQotCWYgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7Ci0JcmF3X2xvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcmV0dXJuIGY7Ci19Ci0KLQotLyogTWFrZSBzdXJlIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSBvZiB0aGlzIG1lc3MgZXNjYXBlcy4gKi8KLSN1bmRlZiBQQVJBVklSVF9DQUxMCi0jdW5kZWYgX19QVk9QX0NBTEwKLSN1bmRlZiBfX1BWT1BfVkNBTEwKLSN1bmRlZiBQVk9QX1ZDQUxMMAotI3VuZGVmIFBWT1BfQ0FMTDAKLSN1bmRlZiBQVk9QX1ZDQUxMMQotI3VuZGVmIFBWT1BfQ0FMTDEKLSN1bmRlZiBQVk9QX1ZDQUxMMgotI3VuZGVmIFBWT1BfQ0FMTDIKLSN1bmRlZiBQVk9QX1ZDQUxMMwotI3VuZGVmIFBWT1BfQ0FMTDMKLSN1bmRlZiBQVk9QX1ZDQUxMNAotI3VuZGVmIFBWT1BfQ0FMTDQKLQotI2Vsc2UgIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIF9QVlNJVEUocHR5cGUsIGNsb2JiZXJzLCBvcHMsIHdvcmQsIGFsZ24pCVwKLTc3MTo7CQkJCQkJXAotCW9wczsJCQkJCVwKLTc3Mjo7CQkJCQkJXAotCS5wdXNoc2VjdGlvbiAucGFyYWluc3RydWN0aW9ucywiYSI7CVwKLQkgLmFsaWduCWFsZ247CQkJCVwKLQkgd29yZCA3NzFiOwkJCQlcCi0JIC5ieXRlIHB0eXBlOwkJCQlcCi0JIC5ieXRlIDc3MmItNzcxYjsJCQlcCi0JIC5zaG9ydCBjbG9iYmVyczsJCQlcCi0JLnBvcHNlY3Rpb24KLQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBQVl9TQVZFX1JFR1MJCQkJXAotCXB1c2ggJXJheDsJCQkJXAotCXB1c2ggJXJjeDsJCQkJXAotCXB1c2ggJXJkeDsJCQkJXAotCXB1c2ggJXJzaTsJCQkJXAotCXB1c2ggJXJkaTsJCQkJXAotCXB1c2ggJXI4OwkJCQlcCi0JcHVzaCAlcjk7CQkJCVwKLQlwdXNoICVyMTA7CQkJCVwKLQlwdXNoICVyMTEKLSNkZWZpbmUgUFZfUkVTVE9SRV9SRUdTCQkJCVwKLQlwb3AgJXIxMTsJCQkJXAotCXBvcCAlcjEwOwkJCQlcCi0JcG9wICVyOTsJCQkJXAotCXBvcCAlcjg7CQkJCVwKLQlwb3AgJXJkaTsJCQkJXAotCXBvcCAlcnNpOwkJCQlcCi0JcG9wICVyZHg7CQkJCVwKLQlwb3AgJXJjeDsJCQkJXAotCXBvcCAlcmF4Ci0jZGVmaW5lIFBBUkFfUEFUQ0goc3RydWN0LCBvZmYpICAgICAgICAoKFBBUkFWSVJUX1BBVENIXyMjc3RydWN0ICsgKG9mZikpIC8gOCkKLSNkZWZpbmUgUEFSQV9TSVRFKHB0eXBlLCBjbG9iYmVycywgb3BzKSBfUFZTSVRFKHB0eXBlLCBjbG9iYmVycywgb3BzLCAucXVhZCwgOCkKLSNkZWZpbmUgUEFSQV9JTkRJUkVDVChhZGRyKQkqYWRkciglcmlwKQotI2Vsc2UKLSNkZWZpbmUgUFZfU0FWRV9SRUdTICAgcHVzaGwgJWVheDsgcHVzaGwgJWVkaTsgcHVzaGwgJWVjeDsgcHVzaGwgJWVkeAotI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgcG9wbCAlZWR4OyBwb3BsICVlY3g7IHBvcGwgJWVkaTsgcG9wbCAlZWF4Ci0jZGVmaW5lIFBBUkFfUEFUQ0goc3RydWN0LCBvZmYpICAgICAgICAoKFBBUkFWSVJUX1BBVENIXyMjc3RydWN0ICsgKG9mZikpIC8gNCkKLSNkZWZpbmUgUEFSQV9TSVRFKHB0eXBlLCBjbG9iYmVycywgb3BzKSBfUFZTSVRFKHB0eXBlLCBjbG9iYmVycywgb3BzLCAubG9uZywgNCkKLSNkZWZpbmUgUEFSQV9JTkRJUkVDVChhZGRyKQkqJWNzOmFkZHIKLSNlbmRpZgotCi0jZGVmaW5lIElOVEVSUlVQVF9SRVRVUk4JCQkJCQlcCi0JUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX2lyZXQpLCBDTEJSX05PTkUsCVwKLQkJICBqbXAgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9pcmV0KSkKLQotI2RlZmluZSBESVNBQkxFX0lOVEVSUlVQVFMoY2xvYmJlcnMpCQkJCQlcCi0JUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfaXJxX29wcywgUFZfSVJRX2lycV9kaXNhYmxlKSwgY2xvYmJlcnMsIFwKLQkJICBQVl9TQVZFX1JFR1M7CQkJCQkJXAotCQkgIGNhbGwgUEFSQV9JTkRJUkVDVChwdl9pcnFfb3BzK1BWX0lSUV9pcnFfZGlzYWJsZSk7CVwKLQkJICBQVl9SRVNUT1JFX1JFR1M7KQkJCVwKLQotI2RlZmluZSBFTkFCTEVfSU5URVJSVVBUUyhjbG9iYmVycykJCQkJCVwKLQlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9pcnFfb3BzLCBQVl9JUlFfaXJxX2VuYWJsZSksIGNsb2JiZXJzLAlcCi0JCSAgUFZfU0FWRV9SRUdTOwkJCQkJCVwKLQkJICBjYWxsIFBBUkFfSU5ESVJFQ1QocHZfaXJxX29wcytQVl9JUlFfaXJxX2VuYWJsZSk7CVwKLQkJICBQVl9SRVNUT1JFX1JFR1M7KQotCi0jZGVmaW5lIFVTRVJHU19TWVNSRVQzMgkJCQkJCQlcCi0JUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX3VzZXJnc19zeXNyZXQzMiksCVwKLQkJICBDTEJSX05PTkUsCQkJCQkJXAotCQkgIGptcCBQQVJBX0lORElSRUNUKHB2X2NwdV9vcHMrUFZfQ1BVX3VzZXJnc19zeXNyZXQzMikpCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIEdFVF9DUjBfSU5UT19FQVgJCQkJXAotCXB1c2ggJWVjeDsgcHVzaCAlZWR4OwkJCQlcCi0JY2FsbCBQQVJBX0lORElSRUNUKHB2X2NwdV9vcHMrUFZfQ1BVX3JlYWRfY3IwKTsJXAotCXBvcCAlZWR4OyBwb3AgJWVjeAotCi0jZGVmaW5lIEVOQUJMRV9JTlRFUlJVUFRTX1NZU0VYSVQJCQkJCVwKLQlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9jcHVfb3BzLCBQVl9DUFVfaXJxX2VuYWJsZV9zeXNleGl0KSwJXAotCQkgIENMQlJfTk9ORSwJCQkJCQlcCi0JCSAgam1wIFBBUkFfSU5ESVJFQ1QocHZfY3B1X29wcytQVl9DUFVfaXJxX2VuYWJsZV9zeXNleGl0KSkKLQotCi0jZWxzZQkvKiAhQ09ORklHX1g4Nl8zMiAqLwotCi0vKgotICogSWYgc3dhcGdzIGlzIHVzZWQgd2hpbGUgdGhlIHVzZXJzcGFjZSBzdGFjayBpcyBzdGlsbCBjdXJyZW50LAotICogdGhlcmUncyBubyB3YXkgdG8gY2FsbCBhIHB2b3AuICBUaGUgUFYgcmVwbGFjZW1lbnQgKm11c3QqIGJlCi0gKiBpbmxpbmVkLCBvciB0aGUgc3dhcGdzIGluc3RydWN0aW9uIG11c3QgYmUgdHJhcHBlZCBhbmQgZW11bGF0ZWQuCi0gKi8KLSNkZWZpbmUgU1dBUEdTX1VOU0FGRV9TVEFDSwkJCQkJCVwKLQlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9jcHVfb3BzLCBQVl9DUFVfc3dhcGdzKSwgQ0xCUl9OT05FLAlcCi0JCSAgc3dhcGdzKQotCi0jZGVmaW5lIFNXQVBHUwkJCQkJCQkJXAotCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV9zd2FwZ3MpLCBDTEJSX05PTkUsCVwKLQkJICBQVl9TQVZFX1JFR1M7CQkJCQkJXAotCQkgIGNhbGwgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9zd2FwZ3MpOwkJXAotCQkgIFBWX1JFU1RPUkVfUkVHUwkJCQkJXAotCQkgKQotCi0jZGVmaW5lIEdFVF9DUjJfSU5UT19SQ1gJCQkJXAotCWNhbGwgUEFSQV9JTkRJUkVDVChwdl9tbXVfb3BzK1BWX01NVV9yZWFkX2NyMik7CVwKLQltb3ZxICVyYXgsICVyY3g7CQkJCVwKLQl4b3JxICVyYXgsICVyYXg7Ci0KLSNkZWZpbmUgUEFSQVZJUlRfQURKVVNUX0VYQ0VQVElPTl9GUkFNRQkJCQkJXAotCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2lycV9vcHMsIFBWX0lSUV9hZGp1c3RfZXhjZXB0aW9uX2ZyYW1lKSwgXAotCQkgIENMQlJfTk9ORSwJCQkJCQlcCi0JCSAgY2FsbCBQQVJBX0lORElSRUNUKHB2X2lycV9vcHMrUFZfSVJRX2FkanVzdF9leGNlcHRpb25fZnJhbWUpKQotCi0jZGVmaW5lIFVTRVJHU19TWVNSRVQ2NAkJCQkJCQlcCi0JUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX3VzZXJnc19zeXNyZXQ2NCksCVwKLQkJICBDTEJSX05PTkUsCQkJCQkJXAotCQkgIGptcCBQQVJBX0lORElSRUNUKHB2X2NwdV9vcHMrUFZfQ1BVX3VzZXJnc19zeXNyZXQ2NCkpCi0KLSNkZWZpbmUgRU5BQkxFX0lOVEVSUlVQVFNfU1lTRVhJVDMyCQkJCQlcCi0JUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX2lycV9lbmFibGVfc3lzZXhpdCksCVwKLQkJICBDTEJSX05PTkUsCQkJCQkJXAotCQkgIGptcCBQQVJBX0lORElSRUNUKHB2X2NwdV9vcHMrUFZfQ1BVX2lycV9lbmFibGVfc3lzZXhpdCkpCi0jZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCi0jZW5kaWYgLyogQVNNX1g4Nl9fUEFSQVZJUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYXJwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlM2RkYTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhcnBvcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUEFSUE9SVF9ICi0jZGVmaW5lIEFTTV9YODZfX1BBUlBPUlRfSAotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSk7Ci1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKLXsKLQlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyhhdXRvaXJxLCBhdXRvZG1hKTsKLX0KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BBUlBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhdC5oIGIvaW5jbHVkZS9hc20teDg2L3BhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODJjM2UzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUEFUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUEFUX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1BBVAotZXh0ZXJuIGludCBwYXRfZW5hYmxlZDsKLWV4dGVybiB2b2lkIHZhbGlkYXRlX3BhdF9zdXBwb3J0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci0jZWxzZQotc3RhdGljIGNvbnN0IGludCBwYXRfZW5hYmxlZDsKLXN0YXRpYyBpbmxpbmUgdm9pZCB2YWxpZGF0ZV9wYXRfc3VwcG9ydChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpIHsgfQotI2VuZGlmCi0KLWV4dGVybiB2b2lkIHBhdF9pbml0KHZvaWQpOwotCi1leHRlcm4gaW50IHJlc2VydmVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCXVuc2lnbmVkIGxvbmcgcmVxX3R5cGUsIHVuc2lnbmVkIGxvbmcgKnJldF90eXBlKTsKLWV4dGVybiBpbnQgZnJlZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCk7Ci0KLWV4dGVybiB2b2lkIHBhdF9kaXNhYmxlKGNoYXIgKnJlYXNvbik7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BjaS1kaXJlY3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wY2ktZGlyZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNDJiZTAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BjaS1kaXJlY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUENJX0RJUkVDVF9ICi0jZGVmaW5lIEFTTV9YODZfX1BDSV9ESVJFQ1RfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogRGlyZWN0IFBDSSBhY2Nlc3MuIFRoaXMgaXMgdXNlZCBmb3IgUENJIGFjY2Vzc2VzIGluIGVhcmx5IGJvb3QgYmVmb3JlCi0gICB0aGUgUENJIHN1YnN5c3RlbSB3b3Jrcy4gKi8KLQotZXh0ZXJuIHUzMiByZWFkX3BjaV9jb25maWcodTggYnVzLCB1OCBzbG90LCB1OCBmdW5jLCB1OCBvZmZzZXQpOwotZXh0ZXJuIHU4IHJlYWRfcGNpX2NvbmZpZ19ieXRlKHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0KTsKLWV4dGVybiB1MTYgcmVhZF9wY2lfY29uZmlnXzE2KHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0KTsKLWV4dGVybiB2b2lkIHdyaXRlX3BjaV9jb25maWcodTggYnVzLCB1OCBzbG90LCB1OCBmdW5jLCB1OCBvZmZzZXQsIHUzMiB2YWwpOwotZXh0ZXJuIHZvaWQgd3JpdGVfcGNpX2NvbmZpZ19ieXRlKHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0LCB1OCB2YWwpOwotZXh0ZXJuIHZvaWQgd3JpdGVfcGNpX2NvbmZpZ18xNih1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCwgdTE2IHZhbCk7Ci0KLWV4dGVybiBpbnQgZWFybHlfcGNpX2FsbG93ZWQodm9pZCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgcGNpX2Vhcmx5X2R1bXBfcmVnczsKLWV4dGVybiB2b2lkIGVhcmx5X2R1bXBfcGNpX2RldmljZSh1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMpOwotZXh0ZXJuIHZvaWQgZWFybHlfZHVtcF9wY2lfZGV2aWNlcyh2b2lkKTsKLSNlbmRpZiAvKiBBU01fWDg2X19QQ0lfRElSRUNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wY2kuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAyNTgzMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGNpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QQ0lfSAotI2RlZmluZSBBU01fWDg2X19QQ0lfSAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4gLyogZm9yIHN0cnVjdCBwYWdlICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLXN0cnVjdCBwY2lfc3lzZGF0YSB7Ci0JaW50CQlkb21haW47CQkvKiBQQ0kgZG9tYWluICovCi0JaW50CQlub2RlOwkJLyogTlVNQSBub2RlICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXZvaWQJCSppb21tdTsJCS8qIElPTU1VIHByaXZhdGUgZGF0YSAqLwotI2VuZGlmCi19OwotCi1leHRlcm4gaW50IHBjaV9yb3V0ZWlycTsKLQotLyogc2NhbiBhIGJ1cyBhZnRlciBhbGxvY2F0aW5nIGEgcGNpX3N5c2RhdGEgZm9yIGl0ICovCi1leHRlcm4gc3RydWN0IHBjaV9idXMgKnBjaV9zY2FuX2J1c19vbl9ub2RlKGludCBidXNubywgc3RydWN0IHBjaV9vcHMgKm9wcywKLQkJCQkJICAgIGludCBub2RlKTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX3NjYW5fYnVzX3dpdGhfc3lzZGF0YShpbnQgYnVzbm8pOwotCi1zdGF0aWMgaW5saW5lIGludCBwY2lfZG9tYWluX25yKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9zeXNkYXRhICpzZCA9IGJ1cy0+c3lzZGF0YTsKLQlyZXR1cm4gc2QtPmRvbWFpbjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGNpX3Byb2NfZG9tYWluKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0JcmV0dXJuIHBjaV9kb21haW5fbnIoYnVzKTsKLX0KLQotCi0vKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgbG9naWMgaW4gcGNpX3NjYW5fYnVzIGZvciBza2lwcGluZwotICAgYWxyZWFkeS1jb25maWd1cmVkIGJ1cyBudW1iZXJzIC0gdG8gYmUgdXNlZCBmb3IgYnVnZ3kgQklPU2VzCi0gICBvciBhcmNoaXRlY3R1cmVzIHdpdGggaW5jb21wbGV0ZSBQQ0kgc2V0dXAgYnkgdGhlIGxvYWRlciAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKHZvaWQpOwotI2Vsc2UKLSNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKLSNlbmRpZgotI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9tZW1fc3RhcnQ7Ci0jZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDEwMDAKLSNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkocGNpX21lbV9zdGFydCkKLQotI2RlZmluZSBQQ0lCSU9TX01JTl9DQVJEQlVTX0lPCTB4NDAwMAotCi12b2lkIHBjaWJpb3NfY29uZmlnX2luaXQodm9pZCk7Ci1zdHJ1Y3QgcGNpX2J1cyAqcGNpYmlvc19zY2FuX3Jvb3QoaW50IGJ1cyk7Ci0KLXZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSk7Ci1zdHJ1Y3QgaXJxX3JvdXRpbmdfdGFibGUgKnBjaWJpb3NfZ2V0X2lycV9yb3V0aW5nX3RhYmxlKHZvaWQpOwotaW50IHBjaWJpb3Nfc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwaW4sIGludCBpcnEpOwotCi0KLSNkZWZpbmUgSEFWRV9QQ0lfTU1BUAotZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwKLQkJCSAgICAgICBpbnQgd3JpdGVfY29tYmluZSk7Ci0KLQotI2lmZGVmIENPTkZJR19QQ0kKLWV4dGVybiB2b2lkIGVhcmx5X3F1aXJrcyh2b2lkKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX2J1cnN0X2FkdmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJZW51bSBwY2lfZG1hX2J1cnN0X3N0cmF0ZWd5ICpzdHJhdCwKLQkJCQkJdW5zaWduZWQgbG9uZyAqc3RyYXRlZ3lfcGFyYW1ldGVyKQotewotCSpzdHJhdCA9IFBDSV9ETUFfQlVSU1RfSU5GSU5JVFk7Ci0JKnN0cmF0ZWd5X3BhcmFtZXRlciA9IH4wVUw7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X3F1aXJrcyh2b2lkKSB7IH0KLSNlbmRpZgotCi0jZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgaW5jbHVkZSAicGNpXzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJwY2lfNjQuaCIKLSNlbmRpZgotCi0vKiBpbXBsZW1lbnQgdGhlIHBjaV8gRE1BIEFQSSBpbiB0ZXJtcyBvZiB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hXyBvbmUgKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgotCi0vKiBnZW5lcmljIHBjaSBzdHVmZiAqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgotCi0jaWZkZWYgQ09ORklHX05VTUEKLS8qIFJldHVybnMgdGhlIG5vZGUgYmFzZWQgb24gcGNpIGJ1cyAqLwotc3RhdGljIGlubGluZSBpbnQgX19wY2lidXNfdG9fbm9kZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBwY2lfc3lzZGF0YSAqc2QgPSBidXMtPnN5c2RhdGE7Ci0KLQlyZXR1cm4gc2QtPm5vZGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IF9fcGNpYnVzX3RvX2NwdW1hc2soc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlyZXR1cm4gbm9kZV90b19jcHVtYXNrKF9fcGNpYnVzX3RvX25vZGUoYnVzKSk7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGNpXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvcGNpXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMjI4ODIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BjaV8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QQ0lfMzJfSAotI2RlZmluZSBBU01fWDg2X19QQ0lfMzJfSAotCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLQotLyogRHluYW1pYyBETUEgbWFwcGluZyBzdHVmZi4KLSAqIGkzODYgaGFzIGV2ZXJ5dGhpbmcgbWFwcGVkIHN0YXRpY2FsbHkuCi0gKi8KLQotc3RydWN0IHBjaV9kZXY7Ci0KLS8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKLSAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKLSAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCi0gKi8KLSNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKLQotLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBub3Agc28uLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCWRtYV9hZGRyX3QgQUREUl9OQU1FWzBdOwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCXVuc2lnbmVkIExFTl9OQU1FWzBdOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJc2l6ZW9mKChQVFIpLT5BRERSX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKSBcCi0JZG8geyBicmVhazsgfSB3aGlsZSAocGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQlzaXplb2YoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpIFwKLQlkbyB7IGJyZWFrOyB9IHdoaWxlIChwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpKQotCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BDSV8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGNpXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvcGNpXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MmUxMmQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BjaV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QQ0lfNjRfSAotI2RlZmluZSBBU01fWDg2X19QQ0lfNjRfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZkZWYgQ09ORklHX0NBTEdBUllfSU9NTVUKLXN0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2lvbW11KHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9zeXNkYXRhICpzZCA9IGJ1cy0+c3lzZGF0YTsKLQlyZXR1cm4gc2QtPmlvbW11OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BjaV9pb21tdShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB2b2lkICp2YWwpCi17Ci0Jc3RydWN0IHBjaV9zeXNkYXRhICpzZCA9IGJ1cy0+c3lzZGF0YTsKLQlzZC0+aW9tbXUgPSB2YWw7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0NBTEdBUllfSU9NTVUgKi8KLQotZXh0ZXJuIGludCAoKnBjaV9jb25maWdfcmVhZCkoaW50IHNlZywgaW50IGJ1cywgaW50IGRldiwgaW50IGZuLAotCQkJICAgICAgaW50IHJlZywgaW50IGxlbiwgdTMyICp2YWx1ZSk7Ci1leHRlcm4gaW50ICgqcGNpX2NvbmZpZ193cml0ZSkoaW50IHNlZywgaW50IGJ1cywgaW50IGRldiwgaW50IGZuLAotCQkJICAgICAgIGludCByZWcsIGludCBsZW4sIHUzMiB2YWx1ZSk7Ci0KLWV4dGVybiB2b2lkIGRtYTMyX3Jlc2VydmVfYm9vdG1lbSh2b2lkKTsKLWV4dGVybiB2b2lkIHBjaV9pb21tdV9hbGxvYyh2b2lkKTsKLQotLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeQotICogYWRkcmVzcyBzcGFjZS4gIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZQotICogdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyIGRlY2lzaW9ucwotICoKLSAqIE9uIEFNRDY0IGl0IG1vc3RseSBlcXVhbHMsIGJ1dCB3ZSBzZXQgaXQgdG8gemVybyBpZiBhIGhhcmR3YXJlCi0gKiBJT01NVSAoZ2FydCkgb2Ygc290d2FyZSBJT01NVSAoc3dpb3RsYikgaXMgYXZhaWxhYmxlLgotICovCi0jZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMgKGRtYV9vcHMtPmlzX3BoeXMpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19HQVJUX0lPTU1VKSB8fCBkZWZpbmVkKENPTkZJR19DQUxHQVJZX0lPTU1VKQotCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlcCi0JZG1hX2FkZHJfdCBBRERSX05BTUU7Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCVwKLQlfX3UzMiBMRU5fTkFNRTsKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkJXAotCSgoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCQlcCi0JKChQVFIpLT5MRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQotCi0jZWxzZQotLyogTm8gSU9NTVUgKi8KLQotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCSgwKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUENJXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZGEuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wZGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4NjBhZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QREFfSAotI2RlZmluZSBBU01fWDg2X19QREFfSAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0vKiBQZXIgcHJvY2Vzc29yIGRhdGFzdHJ1Y3R1cmUuICVncyBwb2ludHMgdG8gaXQgd2hpbGUgdGhlIGtlcm5lbCBydW5zICovCi1zdHJ1Y3QgeDg2NjRfcGRhIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBjdXJyZW50OwkvKiAwICBDdXJyZW50IHByb2Nlc3MgKi8KLQl1bnNpZ25lZCBsb25nIGRhdGFfb2Zmc2V0OwkvKiA4IFBlciBjcHUgZGF0YSBvZmZzZXQgZnJvbSBsaW5rZXIKLQkJCQkJICAgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcga2VybmVsc3RhY2s7CS8qIDE2IHRvcCBvZiBrZXJuZWwgc3RhY2sgZm9yIGN1cnJlbnQgKi8KLQl1bnNpZ25lZCBsb25nIG9sZHJzcDsJCS8qIDI0IHVzZXIgcnNwIGZvciBzeXN0ZW0gY2FsbCAqLwotCWludCBpcnFjb3VudDsJCQkvKiAzMiBJcnEgbmVzdGluZyBjb3VudGVyLiBTdGFydHMgLTEgKi8KLQl1bnNpZ25lZCBpbnQgY3B1bnVtYmVyOwkJLyogMzYgTG9naWNhbCBDUFUgbnVtYmVyICovCi0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCi0JdW5zaWduZWQgbG9uZyBzdGFja19jYW5hcnk7CS8qIDQwIHN0YWNrIGNhbmFyeSB2YWx1ZSAqLwotCQkJCQkvKiBnY2MtQUJJOiB0aGlzIGNhbmFyeSBNVVNUIGJlIGF0Ci0JCQkJCSAgIG9mZnNldCA0MCEhISAqLwotI2VuZGlmCi0JY2hhciAqaXJxc3RhY2twdHI7Ci0Jc2hvcnQgbm9kZW51bWJlcjsJCS8qIG51bWJlciBvZiBjdXJyZW50IG5vZGUgKDMyayBtYXgpICovCi0Jc2hvcnQgaW5fYm9vdG1lbTsJCS8qIHBkYSBsaXZlcyBpbiBib290bWVtICovCi0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotCXVuc2lnbmVkIGludCBfX25taV9jb3VudDsJLyogbnVtYmVyIG9mIE5NSSBvbiB0aGlzIENQVXMgKi8KLQlzaG9ydCBtbXVfc3RhdGU7Ci0Jc2hvcnQgaXNpZGxlOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbTsKLQl1bnNpZ25lZCBhcGljX3RpbWVyX2lycXM7Ci0JdW5zaWduZWQgaXJxMF9pcnFzOwotCXVuc2lnbmVkIGlycV9yZXNjaGVkX2NvdW50OwotCXVuc2lnbmVkIGlycV9jYWxsX2NvdW50OwotCXVuc2lnbmVkIGlycV90bGJfY291bnQ7Ci0JdW5zaWduZWQgaXJxX3RoZXJtYWxfY291bnQ7Ci0JdW5zaWduZWQgaXJxX3RocmVzaG9sZF9jb3VudDsKLQl1bnNpZ25lZCBpcnFfc3B1cmlvdXNfY291bnQ7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0KLWV4dGVybiBzdHJ1Y3QgeDg2NjRfcGRhICoqX2NwdV9wZGE7Ci1leHRlcm4gdm9pZCBwZGFfaW5pdChpbnQpOwotCi0jZGVmaW5lIGNwdV9wZGEoaSkgKF9jcHVfcGRhW2ldKQotCi0vKgotICogVGhlcmUgaXMgbm8gZmFzdCB3YXkgdG8gZ2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFBEQSwgYWxsIHRoZSBhY2Nlc3NlcwotICogaGF2ZSB0byBtZW50aW9uICVmcy8lZ3MuICBTbyBpdCBuZWVkcyB0byBiZSBkb25lIHRoaXMgVG9ydmFsZGlhbiB3YXkuCi0gKi8KLWV4dGVybiB2b2lkIF9fYmFkX3BkYV9maWVsZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwotCi0vKgotICogcHJveHlfcGRhIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QsIGJ1dCB0ZWxsIGdjYyBpdCBpcyBhY2Nlc3NlZCBmb3IKLSAqIGFsbCBQREEgYWNjZXNzZXMgc28gaXQgZ2V0cyByZWFkL3dyaXRlIGRlcGVuZGVuY2llcyByaWdodC4KLSAqLwotZXh0ZXJuIHN0cnVjdCB4ODY2NF9wZGEgX3Byb3h5X3BkYTsKLQotI2RlZmluZSBwZGFfb2Zmc2V0KGZpZWxkKSBvZmZzZXRvZihzdHJ1Y3QgeDg2NjRfcGRhLCBmaWVsZCkKLQotI2RlZmluZSBwZGFfdG9fb3Aob3AsIGZpZWxkLCB2YWwpCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCXR5cGVkZWYgdHlwZW9mKF9wcm94eV9wZGEuZmllbGQpIFRfXzsJCQkJXAotCWlmICgwKSB7IFRfXyB0bXBfXzsgdG1wX18gPSAodmFsKTsgfQkvKiB0eXBlIGNoZWNraW5nICovCVwKLQlzd2l0Y2ggKHNpemVvZihfcHJveHlfcGRhLmZpZWxkKSkgewkJCQlcCi0JY2FzZSAyOgkJCQkJCQkJXAotCQlhc20ob3AgIncgJTEsJSVnczolYzIiIDoJCQkJXAotCQkgICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOgkJCQlcCi0JCSAgICAicmkiICgoVF9fKXZhbCksCQkJCQlcCi0JCSAgICAiaSIocGRhX29mZnNldChmaWVsZCkpKTsJCQkJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgNDoJCQkJCQkJCVwKLQkJYXNtKG9wICJsICUxLCUlZ3M6JWMyIiA6CQkJCVwKLQkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAotCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAotCQkgICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSkpOwkJCQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2FzZSA4OgkJCQkJCQkJXAotCQlhc20ob3AgInEgJTEsJSVnczolYzIiOgkJCQkJXAotCQkgICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOgkJCQlcCi0JCSAgICAicmkiICgoVF9fKXZhbCksCQkJCQlcCi0JCSAgICAiaSIocGRhX29mZnNldChmaWVsZCkpKTsJCQkJXAotCQlicmVhazsJCQkJCQkJXAotCWRlZmF1bHQ6CQkJCQkJCVwKLQkJX19iYWRfcGRhX2ZpZWxkKCk7CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBwZGFfZnJvbV9vcChvcCwgZmllbGQpCQkJXAotKHsJCQkJCQlcCi0JdHlwZW9mKF9wcm94eV9wZGEuZmllbGQpIHJldF9fOwkJXAotCXN3aXRjaCAoc2l6ZW9mKF9wcm94eV9wZGEuZmllbGQpKSB7CVwKLQljYXNlIDI6CQkJCQlcCi0JCWFzbShvcCAidyAlJWdzOiVjMSwlMCIgOglcCi0JCSAgICAiPXIiIChyZXRfXykgOgkJXAotCQkgICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSksCVwKLQkJICAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOwlcCi0JCWJyZWFrOwkJCQlcCi0JY2FzZSA0OgkJCQkJXAotCQlhc20ob3AgImwgJSVnczolYzEsJTAiOgkJXAotCQkgICAgIj1yIiAocmV0X18pOgkJXAotCQkgICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSksCVwKLQkJICAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOwlcCi0JCWJyZWFrOwkJCQlcCi0JY2FzZSA4OgkJCQkJXAotCQlhc20ob3AgInEgJSVnczolYzEsJTAiOgkJXAotCQkgICAgIj1yIiAocmV0X18pIDoJCVwKLQkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCi0JCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAotCQlicmVhazsJCQkJXAotCWRlZmF1bHQ6CQkJCVwKLQkJX19iYWRfcGRhX2ZpZWxkKCk7CQlcCi0JfQkJCQkJXAotCXJldF9fOwkJCQkJXAotfSkKLQotI2RlZmluZSByZWFkX3BkYShmaWVsZCkJCXBkYV9mcm9tX29wKCJtb3YiLCBmaWVsZCkKLSNkZWZpbmUgd3JpdGVfcGRhKGZpZWxkLCB2YWwpCXBkYV90b19vcCgibW92IiwgZmllbGQsIHZhbCkKLSNkZWZpbmUgYWRkX3BkYShmaWVsZCwgdmFsKQlwZGFfdG9fb3AoImFkZCIsIGZpZWxkLCB2YWwpCi0jZGVmaW5lIHN1Yl9wZGEoZmllbGQsIHZhbCkJcGRhX3RvX29wKCJzdWIiLCBmaWVsZCwgdmFsKQotI2RlZmluZSBvcl9wZGEoZmllbGQsIHZhbCkJcGRhX3RvX29wKCJvciIsIGZpZWxkLCB2YWwpCi0KLS8qIFRoaXMgaXMgbm90IGF0b21pYyBhZ2FpbnN0IG90aGVyIENQVXMgLS0gQ1BVIHByZWVtcHRpb24gbmVlZHMgdG8gYmUgb2ZmICovCi0jZGVmaW5lIHRlc3RfYW5kX2NsZWFyX2JpdF9wZGEoYml0LCBmaWVsZCkJCQkJXAotKHsJCQkJCQkJCQlcCi0JaW50IG9sZF9fOwkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCJidHIgJTIsJSVnczolYzNcblx0c2JibCAlMCwlMCIJCQlcCi0JCSAgICAgOiAiPXIiIChvbGRfXyksICIrbSIgKF9wcm94eV9wZGEuZmllbGQpCQlcCi0JCSAgICAgOiAiZElyIiAoYml0KSwgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSkgOiAibWVtb3J5Iik7XAotCW9sZF9fOwkJCQkJCQkJXAotfSkKLQotI2VuZGlmCi0KLSNkZWZpbmUgUERBX1NUQUNLT0ZGU0VUICg1KjgpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20teDg2L3BlcmNwdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTBhMWQwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZXJjcHUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BFUkNQVV9ICi0jZGVmaW5lIEFTTV9YODZfX1BFUkNQVV9ICi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotLyogU2FtZSBhcyBhc20tZ2VuZXJpYy9wZXJjcHUuaCwgZXhjZXB0IHRoYXQgd2Ugc3RvcmUgdGhlIHBlciBjcHUgb2Zmc2V0Ci0gICBpbiB0aGUgUERBLiBMb25nZXIgdGVybSB0aGUgUERBIGFuZCBldmVyeSBwZXIgY3B1IHZhcmlhYmxlCi0gICBzaG91bGQgYmUganVzdCBwdXQgaW50byBhIHNpbmdsZSBzZWN0aW9uIGFuZCByZWZlcmVuY2VkIGRpcmVjdGx5Ci0gICBmcm9tICVncyAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2luY2x1ZGUgPGFzbS9wZGEuaD4KLQotI2RlZmluZSBfX3Blcl9jcHVfb2Zmc2V0KGNwdSkgKGNwdV9wZGEoY3B1KS0+ZGF0YV9vZmZzZXQpCi0jZGVmaW5lIF9fbXlfY3B1X29mZnNldCByZWFkX3BkYShkYXRhX29mZnNldCkKLQotI2RlZmluZSBwZXJfY3B1X29mZnNldCh4KSAoX19wZXJfY3B1X29mZnNldCh4KSkKLQotI2VuZGlmCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+Ci0KLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgeDg2NjRfcGRhLCBwZGEpOwotCi0vKgotICogVGhlc2UgYXJlIHN1cHBvc2VkIHRvIGJlIGltcGxlbWVudGVkIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uIHdoaWNoCi0gKiBvcGVyYXRlcyBvbiB0aGUgcGVyLWNwdSBkYXRhIGJhc2Ugc2VnbWVudC4gIHg4Ni02NCBkb2Vzbid0IGhhdmUKLSAqIHRoYXQgeWV0LCBzbyB0aGlzIGlzIGEgZmFpcmx5IGluZWZmaWNpZW50IHdvcmthcm91bmQgZm9yIHRoZQotICogbWVhbnRpbWUuICBUaGUgc2luZ2xlIGluc3RydWN0aW9uIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8KLSAqIHByZWVtcHRpb24gYW5kIGludGVycnVwdHMsIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBkaXNhYmxlCi0gKiBpbnRlcnJ1cHRzIGhlcmUgdG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuICBIb3dldmVyLCBiZWNhdXNlIGl0Ci0gKiBjYW4gYmUgdXNlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQtZGlzYWJsZS9lbmFibGUsIHdlIGNhbid0IGFjdHVhbGx5Ci0gKiBkaXNhYmxlIGludGVycnVwdHM7IGRpc2FibGluZyBwcmVlbXB0aW9uIGlzIGVub3VnaC4KLSAqLwotI2RlZmluZSB4ODZfcmVhZF9wZXJjcHUodmFyKQkJCQkJCVwKLQkoewkJCQkJCQkJXAotCQl0eXBlb2YocGVyX2NwdV92YXIodmFyKSkgX190bXA7CQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCi0JCV9fdG1wID0gX19nZXRfY3B1X3Zhcih2YXIpOwkJCQlcCi0JCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCi0JCV9fdG1wOwkJCQkJCQlcCi0JfSkKLQotI2RlZmluZSB4ODZfd3JpdGVfcGVyY3B1KHZhciwgdmFsKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCi0JCV9fZ2V0X2NwdV92YXIodmFyKSA9ICh2YWwpOwkJCQlcCi0JCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCi0JfSB3aGlsZSgwKQotCi0jZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCi0KLSNpZmRlZiBfX0FTU0VNQkxZX18KLQotLyoKLSAqIFBFUl9DUFUgZmluZHMgYW4gYWRkcmVzcyBvZiBhIHBlci1jcHUgdmFyaWFibGUuCi0gKgotICogQXJnczoKLSAqICAgIHZhciAtIHZhcmlhYmxlIG5hbWUKLSAqICAgIHJlZyAtIDMyYml0IHJlZ2lzdGVyCi0gKgotICogVGhlIHJlc3VsdGluZyBhZGRyZXNzIGlzIHN0b3JlZCBpbiB0aGUgInJlZyIgYXJndW1lbnQuCi0gKgotICogRXhhbXBsZToKLSAqICAgIFBFUl9DUFUoY3B1X2dkdF9kZXNjciwgJWVieCkKLSAqLwotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgUEVSX0NQVSh2YXIsIHJlZykJCQkJXAotCW1vdmwgJWZzOnBlcl9jcHVfXyMjdGhpc19jcHVfb2ZmLCByZWc7CQlcCi0JbGVhIHBlcl9jcHVfXyMjdmFyKHJlZyksIHJlZwotI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpCSVmczpwZXJfY3B1X18jI3ZhcgotI2Vsc2UgLyogISBTTVAgKi8KLSNkZWZpbmUgUEVSX0NQVSh2YXIsIHJlZykJCQlcCi0JbW92bCAkcGVyX2NwdV9fIyN2YXIsIHJlZwotI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpCXBlcl9jcHVfXyMjdmFyCi0jZW5kaWYJLyogU01QICovCi0KLSNlbHNlIC8qIC4uLiFBU1NFTUJMWSAqLwotCi0vKgotICogUEVSX0NQVSBmaW5kcyBhbiBhZGRyZXNzIG9mIGEgcGVyLWNwdSB2YXJpYWJsZS4KLSAqCi0gKiBBcmdzOgotICogICAgdmFyIC0gdmFyaWFibGUgbmFtZQotICogICAgY3B1IC0gMzJiaXQgcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgY3VycmVudCBDUFUgbnVtYmVyCi0gKgotICogVGhlIHJlc3VsdGluZyBhZGRyZXNzIGlzIHN0b3JlZCBpbiB0aGUgImNwdSIgYXJndW1lbnQuCi0gKgotICogRXhhbXBsZToKLSAqICAgIFBFUl9DUFUoY3B1X2dkdF9kZXNjciwgJWVieCkKLSAqLwotI2lmZGVmIENPTkZJR19TTVAKLQotI2RlZmluZSBfX215X2NwdV9vZmZzZXQgeDg2X3JlYWRfcGVyY3B1KHRoaXNfY3B1X29mZikKLQotLyogZnMgc2VnbWVudCBzdGFydHMgYXQgKHBvc2l0aXZlKSBvZmZzZXQgPT0gX19wZXJfY3B1X29mZnNldFtjcHVdICovCi0jZGVmaW5lIF9fcGVyY3B1X3NlZyAiJSVmczoiCi0KLSNlbHNlICAvKiAhU01QICovCi0KLSNkZWZpbmUgX19wZXJjcHVfc2VnICIiCi0KLSNlbmRpZgkvKiBTTVAgKi8KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgotCi0vKiBXZSBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9yIGxvY2FsIENQVSAoZmFzdGVyKS4gKi8KLURFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpOwotCi0vKiBGb3IgYXJjaC1zcGVjaWZpYyBjb2RlLCB3ZSBjYW4gdXNlIGRpcmVjdCBzaW5nbGUtaW5zbiBvcHMgKHRoZXkKLSAqIGRvbid0IGdpdmUgYW4gbHZhbHVlIHRob3VnaCkuICovCi1leHRlcm4gdm9pZCBfX2JhZF9wZXJjcHVfc2l6ZSh2b2lkKTsKLQotI2RlZmluZSBwZXJjcHVfdG9fb3Aob3AsIHZhciwgdmFsKQkJCVwKLWRvIHsJCQkJCQkJXAotCXR5cGVkZWYgdHlwZW9mKHZhcikgVF9fOwkJCVwKLQlpZiAoMCkgewkJCQkJXAotCQlUX18gdG1wX187CQkJCVwKLQkJdG1wX18gPSAodmFsKTsJCQkJXAotCX0JCQkJCQlcCi0Jc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQlcCi0JY2FzZSAxOgkJCQkJCVwKLQkJYXNtKG9wICJiICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCi0JCSAgICA6ICIrbSIgKHZhcikJCQlcCi0JCSAgICA6ICJyaSIgKChUX18pdmFsKSk7CQkJXAotCQlicmVhazsJCQkJCVwKLQljYXNlIDI6CQkJCQkJXAotCQlhc20ob3AgIncgJTEsIl9fcGVyY3B1X3NlZyIlMCIJCVwKLQkJICAgIDogIittIiAodmFyKQkJCVwKLQkJICAgIDogInJpIiAoKFRfXyl2YWwpKTsJCQlcCi0JCWJyZWFrOwkJCQkJXAotCWNhc2UgNDoJCQkJCQlcCi0JCWFzbShvcCAibCAlMSwiX19wZXJjcHVfc2VnIiUwIgkJXAotCQkgICAgOiAiK20iICh2YXIpCQkJXAotCQkgICAgOiAicmkiICgoVF9fKXZhbCkpOwkJCVwKLQkJYnJlYWs7CQkJCQlcCi0JZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQlcCi0JfQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgcGVyY3B1X2Zyb21fb3Aob3AsIHZhcikJCQkJXAotKHsJCQkJCQkJXAotCXR5cGVvZih2YXIpIHJldF9fOwkJCQlcCi0Jc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQlcCi0JY2FzZSAxOgkJCQkJCVwKLQkJYXNtKG9wICJiICJfX3BlcmNwdV9zZWciJTEsJTAiCQlcCi0JCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKLQkJICAgIDogIm0iICh2YXIpKTsJCQlcCi0JCWJyZWFrOwkJCQkJXAotCWNhc2UgMjoJCQkJCQlcCi0JCWFzbShvcCAidyAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAotCQkgICAgOiAiPXIiIChyZXRfXykJCQlcCi0JCSAgICA6ICJtIiAodmFyKSk7CQkJXAotCQlicmVhazsJCQkJCVwKLQljYXNlIDQ6CQkJCQkJXAotCQlhc20ob3AgImwgIl9fcGVyY3B1X3NlZyIlMSwlMCIJCVwKLQkJICAgIDogIj1yIiAocmV0X18pCQkJXAotCQkgICAgOiAibSIgKHZhcikpOwkJCVwKLQkJYnJlYWs7CQkJCQlcCi0JZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQlcCi0JfQkJCQkJCVwKLQlyZXRfXzsJCQkJCQlcCi19KQotCi0jZGVmaW5lIHg4Nl9yZWFkX3BlcmNwdSh2YXIpIHBlcmNwdV9mcm9tX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhcikKLSNkZWZpbmUgeDg2X3dyaXRlX3BlcmNwdSh2YXIsIHZhbCkgcGVyY3B1X3RvX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSB4ODZfYWRkX3BlcmNwdSh2YXIsIHZhbCkgcGVyY3B1X3RvX29wKCJhZGQiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSB4ODZfc3ViX3BlcmNwdSh2YXIsIHZhbCkgcGVyY3B1X3RvX29wKCJzdWIiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSB4ODZfb3JfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoIm9yIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogIUNPTkZJR19YODZfNjQgKi8KLQotI2lmZGVmIENPTkZJR19TTVAKLQotLyoKLSAqIERlZmluZSB0aGUgIkVBUkxZX1BFUl9DUFUiIG1hY3Jvcy4gIFRoZXNlIGFyZSB1c2VkIGZvciBzb21lIHBlcl9jcHUKLSAqIHZhcmlhYmxlcyB0aGF0IGFyZSBpbml0aWFsaXplZCBhbmQgYWNjZXNzZWQgYmVmb3JlIHRoZXJlIGFyZSBwZXJfY3B1Ci0gKiBhcmVhcyBhbGxvY2F0ZWQuCi0gKi8KLQotI2RlZmluZQlERUZJTkVfRUFSTFlfUEVSX0NQVShfdHlwZSwgX25hbWUsIF9pbml0dmFsdWUpCQkJXAotCURFRklORV9QRVJfQ1BVKF90eXBlLCBfbmFtZSkgPSBfaW5pdHZhbHVlOwkJCVwKLQlfX3R5cGVvZl9fKF90eXBlKSBfbmFtZSMjX2Vhcmx5X21hcFtOUl9DUFVTXSBfX2luaXRkYXRhID0JXAotCQkJCXsgWzAgLi4uIE5SX0NQVVMtMV0gPSBfaW5pdHZhbHVlIH07CVwKLQlfX3R5cGVvZl9fKF90eXBlKSAqX25hbWUjI19lYXJseV9wdHIgX19yZWZkYXRhID0gX25hbWUjI19lYXJseV9tYXAKLQotI2RlZmluZSBFWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woX25hbWUpCQkJXAotCUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChfbmFtZSkKLQotI2RlZmluZSBERUNMQVJFX0VBUkxZX1BFUl9DUFUoX3R5cGUsIF9uYW1lKQkJCVwKLQlERUNMQVJFX1BFUl9DUFUoX3R5cGUsIF9uYW1lKTsJCQkJXAotCWV4dGVybiBfX3R5cGVvZl9fKF90eXBlKSAqX25hbWUjI19lYXJseV9wdHI7CQlcCi0JZXh0ZXJuIF9fdHlwZW9mX18oX3R5cGUpICBfbmFtZSMjX2Vhcmx5X21hcFtdCi0KLSNkZWZpbmUJZWFybHlfcGVyX2NwdV9wdHIoX25hbWUpIChfbmFtZSMjX2Vhcmx5X3B0cikKLSNkZWZpbmUJZWFybHlfcGVyX2NwdV9tYXAoX25hbWUsIF9pZHgpIChfbmFtZSMjX2Vhcmx5X21hcFtfaWR4XSkKLSNkZWZpbmUJZWFybHlfcGVyX2NwdShfbmFtZSwgX2NwdSkgCQkJCVwKLQkoZWFybHlfcGVyX2NwdV9wdHIoX25hbWUpID8JCQkJXAotCQllYXJseV9wZXJfY3B1X3B0cihfbmFtZSlbX2NwdV0gOgkJXAotCQlwZXJfY3B1KF9uYW1lLCBfY3B1KSkKLQotI2Vsc2UJLyogIUNPTkZJR19TTVAgKi8KLSNkZWZpbmUJREVGSU5FX0VBUkxZX1BFUl9DUFUoX3R5cGUsIF9uYW1lLCBfaW5pdHZhbHVlKQkJXAotCURFRklORV9QRVJfQ1BVKF90eXBlLCBfbmFtZSkgPSBfaW5pdHZhbHVlCi0KLSNkZWZpbmUgRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKF9uYW1lKQkJCVwKLQlFWFBPUlRfUEVSX0NQVV9TWU1CT0woX25hbWUpCi0KLSNkZWZpbmUgREVDTEFSRV9FQVJMWV9QRVJfQ1BVKF90eXBlLCBfbmFtZSkJCQlcCi0JREVDTEFSRV9QRVJfQ1BVKF90eXBlLCBfbmFtZSkKLQotI2RlZmluZQllYXJseV9wZXJfY3B1KF9uYW1lLCBfY3B1KSBwZXJfY3B1KF9uYW1lLCBfY3B1KQotI2RlZmluZQllYXJseV9wZXJfY3B1X3B0cihfbmFtZSkgTlVMTAotLyogbm8gZWFybHlfcGVyX2NwdV9tYXAoKSAqLwotCi0jZW5kaWYJLyogIUNPTkZJR19TTVAgKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20teDg2L3BnYWxsb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkMjNhZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGdhbGxvYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUEdBTExPQ19ICi0jZGVmaW5lIEFTTV9YODZfX1BHQUxMT0NfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igc3RydWN0IHBhZ2UgKi8KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0KLXN0YXRpYyBpbmxpbmUgaW50ICBfX3BhcmF2aXJ0X3BnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfQotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZQotI2RlZmluZSBwYXJhdmlydF9wZ2RfYWxsb2MobW0pCV9fcGFyYXZpcnRfcGdkX2FsbG9jKG1tKQotc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3BnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FsbG9jX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCXt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYWxsb2NfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikJe30KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9hbGxvY19wbWRfY2xvbmUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgY2xvbmVwZm4sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KSB7fQotc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FsbG9jX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCXt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcmVsZWFzZV9wdGUodW5zaWduZWQgbG9uZyBwZm4pIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcmVsZWFzZV9wbWQodW5zaWduZWQgbG9uZyBwZm4pIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfcmVsZWFzZV9wdWQodW5zaWduZWQgbG9uZyBwZm4pIHt9Ci0jZW5kaWYKLQotLyoKLSAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLgotICovCi1leHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICopOwotZXh0ZXJuIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOwotCi1leHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKLQotLyogU2hvdWxkIHJlYWxseSBpbXBsZW1lbnQgZ2MgZm9yIGZyZWUgcGFnZSB0YWJsZSBwYWdlcy4gVGhpcyBjb3VsZCBiZQotICAgZG9uZSB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IGluIHN0cnVjdCBwYWdlLiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlKQotewotCUJVR19PTigodW5zaWduZWQgbG9uZylwdGUgJiAoUEFHRV9TSVpFLTEpKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcHRlKQotewotCV9fZnJlZV9wYWdlKHB0ZSk7Ci19Ci0KLWV4dGVybiB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwdGUpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICAgcG1kX3QgKnBtZCwgcHRlX3QgKnB0ZSkKLXsKLQlwYXJhdmlydF9hbGxvY19wdGUobW0sIF9fcGEocHRlKSA+PiBQQUdFX1NISUZUKTsKLQlzZXRfcG1kKHBtZCwgX19wbWQoX19wYShwdGUpIHwgX1BBR0VfVEFCTEUpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKLQkJCQlzdHJ1Y3QgcGFnZSAqcHRlKQotewotCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocHRlKTsKLQotCXBhcmF2aXJ0X2FsbG9jX3B0ZShtbSwgcGZuKTsKLQlzZXRfcG1kKHBtZCwgX19wbWQoKChwdGV2YWxfdClwZm4gPDwgUEFHRV9TSElGVCkgfCBfUEFHRV9UQUJMRSkpOwotfQotCi0jZGVmaW5lIHBtZF9wZ3RhYmxlKHBtZCkgcG1kX3BhZ2UocG1kKQotCi0jaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKLXN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKHBtZF90ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQotewotCUJVR19PTigodW5zaWduZWQgbG9uZylwbWQgJiAoUEFHRV9TSVpFLTEpKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcG1kKTsKLX0KLQotZXh0ZXJuIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotZXh0ZXJuIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZCk7Ci0jZWxzZQkvKiAhQ09ORklHX1g4Nl9QQUUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCi17Ci0JcGFyYXZpcnRfYWxsb2NfcG1kKG1tLCBfX3BhKHBtZCkgPj4gUEFHRV9TSElGVCk7Ci0Jc2V0X3B1ZChwdWQsIF9fcHVkKF9QQUdFX1RBQkxFIHwgX19wYShwbWQpKSk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAzCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLCBwdWRfdCAqcHVkKQotewotCXBhcmF2aXJ0X2FsbG9jX3B1ZChtbSwgX19wYShwdWQpID4+IFBBR0VfU0hJRlQpOwotCXNldF9wZ2QocGdkLCBfX3BnZChfUEFHRV9UQUJMRSB8IF9fcGEocHVkKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIChwdWRfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCkKLXsKLQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcHVkICYgKFBBR0VfU0laRS0xKSk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB1ZCk7Ci19Ci0KLWV4dGVybiB2b2lkIF9fcHVkX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB1ZF90ICpwdWQpOwotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPiAzICovCi0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA+IDIgKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtMmxldmVsLWRlZnMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLTJsZXZlbC1kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzQ4ZjQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtMmxldmVsLWRlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUEdUQUJMRV8yTEVWRUxfREVGU19ICi0jZGVmaW5lIEFTTV9YODZfX1BHVEFCTEVfMkxFVkVMX0RFRlNfSAotCi0jZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECTAKLQotLyoKLSAqIHRyYWRpdGlvbmFsIGkzODYgdHdvLWxldmVsIHBhZ2luZyBzdHJ1Y3R1cmU6Ci0gKi8KLQotI2RlZmluZSBQR0RJUl9TSElGVAkyMgotI2RlZmluZSBQVFJTX1BFUl9QR0QJMTAyNAotCi0vKgotICogdGhlIGkzODYgaXMgdHdvLWxldmVsLCBzbyB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhbnkKLSAqIFBNRCBkaXJlY3RvcnkgcGh5c2ljYWxseS4KLSAqLwotCi0jZGVmaW5lIFBUUlNfUEVSX1BURQkxMDI0Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19QR1RBQkxFXzJMRVZFTF9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLTJsZXZlbC5oIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGUtMmxldmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNzYyMDguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtMmxldmVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BHVEFCTEVfMkxFVkVMX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUEdUQUJMRV8yTEVWRUxfSAotCi0jZGVmaW5lIHB0ZV9FUlJPUihlKSBcCi0JcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKGUpLnB0ZV9sb3cpCi0jZGVmaW5lIHBnZF9FUlJPUihlKSBcCi0JcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKLQotLyoKLSAqIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gUFRFcwotICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCi0gKiBob29rIGlzIG1hZGUgYXZhaWxhYmxlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGUocHRlX3QgKnB0ZXAgLCBwdGVfdCBwdGUpCi17Ci0JKnB0ZXAgPSBwdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kKQotewotCSpwbWRwID0gcG1kOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JbmF0aXZlX3NldF9wdGUocHRlcCwgcHRlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JbmF0aXZlX3NldF9wdGUocHRlcCwgcHRlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wbWRfY2xlYXIocG1kX3QgKnBtZHApCi17Ci0JbmF0aXZlX3NldF9wbWQocG1kcCwgX19wbWQoMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqeHApCi17Ci0JKnhwID0gbmF0aXZlX21ha2VfcHRlKDApOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfcHRlcF9nZXRfYW5kX2NsZWFyKHB0ZV90ICp4cCkKLXsKLQlyZXR1cm4gX19wdGUoeGNoZygmeHAtPnB0ZV9sb3csIDApKTsKLX0KLSNlbHNlCi0jZGVmaW5lIG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIoeHApIG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIoeHApCi0jZW5kaWYKLQotI2RlZmluZSBwdGVfbm9uZSh4KQkJKCEoeCkucHRlX2xvdykKLQotLyoKLSAqIEJpdHMgMCwgNiBhbmQgNyBhcmUgdGFrZW4sIHNwbGl0IHVwIHRoZSAyOSBiaXRzIG9mIG9mZnNldAotICogaW50byB0aGlzIHJhbmdlOgotICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5Ci0KLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJCQkJCQlcCi0JKCgoKHB0ZSkucHRlX2xvdyA+PiAxKSAmIDB4MWYpICsgKCgocHRlKS5wdGVfbG93ID4+IDgpIDw8IDUpKQotCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCQkJCQkJXAotCSgocHRlX3QpIHsgLnB0ZV9sb3cgPSAoKChvZmYpICYgMHgxZikgPDwgMSkgKwkJCVwKLQkJCSgoKG9mZikgPj4gNSkgPDwgOCkgKyBfUEFHRV9GSUxFIH0pCi0KLS8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KLSNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiAxKSAmIDB4MWYpCi0jZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDgpCi0jZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJCQkJXAotCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAxKSB8ICgob2Zmc2V0KSA8PCA4KSB9KQotI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyAocHRlKS5wdGVfbG93IH0pCi0jZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAucHRlID0gKHgpLnZhbCB9KQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUEdUQUJMRV8yTEVWRUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtM2xldmVsLWRlZnMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLTNsZXZlbC1kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNWZlNmYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtM2xldmVsLWRlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUEdUQUJMRV8zTEVWRUxfREVGU19ICi0jZGVmaW5lIEFTTV9YODZfX1BHVEFCTEVfM0xFVkVMX0RFRlNfSAotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECShwdl9pbmZvLnNoYXJlZF9rZXJuZWxfcG1kKQotI2Vsc2UKLSNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJMQotI2VuZGlmCi0KLS8qCi0gKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCi0gKi8KLSNkZWZpbmUgUEdESVJfU0hJRlQJMzAKLSNkZWZpbmUgUFRSU19QRVJfUEdECTQKLQotLyoKLSAqIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgbWlkZGxlLWxldmVsCi0gKiBwYWdlIHRhYmxlIGNhbiBtYXAKLSAqLwotI2RlZmluZSBQTURfU0hJRlQJMjEKLSNkZWZpbmUgUFRSU19QRVJfUE1ECTUxMgotCi0vKgotICogZW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwKLSAqLwotI2RlZmluZSBQVFJTX1BFUl9QVEUJNTEyCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QR1RBQkxFXzNMRVZFTF9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLTNsZXZlbC5oIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGUtM2xldmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZjQyNzYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtM2xldmVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QR1RBQkxFXzNMRVZFTF9ICi0jZGVmaW5lIEFTTV9YODZfX1BHVEFCTEVfM0xFVkVMX0gKLQotLyoKLSAqIEludGVsIFBoeXNpY2FsIEFkZHJlc3MgRXh0ZW5zaW9uIChQQUUpIE1vZGUgLSB0aHJlZS1sZXZlbCBwYWdlCi0gKiB0YWJsZXMgb24gUFBybysgQ1BVcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKi8KLQotI2RlZmluZSBwdGVfRVJST1IoZSkJCQkJCQkJXAotCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTA4bHglMDhseCkuXG4iLAkJCVwKLQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCAoZSkucHRlX2hpZ2gsIChlKS5wdGVfbG93KQotI2RlZmluZSBwbWRfRVJST1IoZSkJCQkJCQkJXAotCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJXAoJTAxNkx4KS5cbiIsCQkJCVwKLQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwbWRfdmFsKGUpKQotI2RlZmluZSBwZ2RfRVJST1IoZSkJCQkJCQkJXAotCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNkx4KS5cbiIsCQkJCVwKLQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwZ2RfdmFsKGUpKQotCi1zdGF0aWMgaW5saW5lIGludCBwdWRfbm9uZShwdWRfdCBwdWQpCi17Ci0JcmV0dXJuIHB1ZF92YWwocHVkKSA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gKHB1ZF92YWwocHVkKSAmIH4oUFRFX1BGTl9NQVNLIHwgX0tFUk5QR19UQUJMRSB8IF9QQUdFX1VTRVIpKSAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpCi17Ci0JcmV0dXJuIHB1ZF92YWwocHVkKSAmIF9QQUdFX1BSRVNFTlQ7Ci19Ci0KLS8qIFJ1bGVzIGZvciB1c2luZyBzZXRfcHRlOiB0aGUgcHRlIGJlaW5nIGFzc2lnbmVkICptdXN0KiBiZQotICogZWl0aGVyIG5vdCBwcmVzZW50IG9yIGluIGEgc3RhdGUgd2hlcmUgdGhlIGhhcmR3YXJlIHdpbGwKLSAqIG5vdCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgcHRlLiAgSW4gcGxhY2VzIHdoZXJlIHRoaXMgaXMKLSAqIG5vdCBwb3NzaWJsZSwgdXNlIHB0ZV9nZXRfYW5kX2NsZWFyIHRvIG9idGFpbiB0aGUgb2xkIHB0ZQotICogdmFsdWUgYW5kIHRoZW4gdXNlIHNldF9wdGUgdG8gdXBkYXRlIGl0LiAgLWJlbgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKLQlzbXBfd21iKCk7Ci0JcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OwotfQotCi0vKgotICogU2luY2UgdGhpcyBpcyBvbmx5IGNhbGxlZCBvbiB1c2VyIFBURXMsIGFuZCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyCi0gKiBtdXN0IGhhbmRsZSB0aGUgYWxyZWFkeSByYWN5IHNpdHVhdGlvbiBvZiBzaW11bHRhbmVvdXMgcGFnZSBmYXVsdHMsCi0gKiB3ZSBhcmUganVzdGlmaWVkIGluIG1lcmVseSBjbGVhcmluZyB0aGUgUFRFIHByZXNlbnQgYml0LCBmb2xsb3dlZAotICogYnkgYSBzZXQuICBUaGUgb3JkZXJpbmcgaGVyZSBpcyBpbXBvcnRhbnQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCXB0ZXAtPnB0ZV9sb3cgPSAwOwotCXNtcF93bWIoKTsKLQlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKLQlzbXBfd21iKCk7Ci0JcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0Jc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocHRlcCksIG5hdGl2ZV9wdGVfdmFsKHB0ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKLXsKLQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwbWRwKSwgbmF0aXZlX3BtZF92YWwocG1kKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQotewotCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB1ZHApLCBuYXRpdmVfcHVkX3ZhbChwdWQpKTsKLX0KLQotLyoKLSAqIEZvciBQVEVzIGFuZCBQREVzLCB3ZSBtdXN0IGNsZWFyIHRoZSBQLWJpdCBmaXJzdCB3aGVuIGNsZWFyaW5nIGEgcGFnZSB0YWJsZQotICogZW50cnksIHNvIGNsZWFyIHRoZSBib3R0b20gaGFsZiBmaXJzdCBhbmQgZW5mb3JjZSBvcmRlcmluZyB3aXRoIGEgY29tcGlsZXIKLSAqIGJhcnJpZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgIHB0ZV90ICpwdGVwKQotewotCXB0ZXAtPnB0ZV9sb3cgPSAwOwotCXNtcF93bWIoKTsKLQlwdGVwLT5wdGVfaGlnaCA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcG1kX2NsZWFyKHBtZF90ICpwbWQpCi17Ci0JdTMyICp0bXAgPSAodTMyICopcG1kOwotCSp0bXAgPSAwOwotCXNtcF93bWIoKTsKLQkqKHRtcCArIDEpID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkcCkKLXsKLQl1bnNpZ25lZCBsb25nIHBnZDsKLQotCXNldF9wdWQocHVkcCwgX19wdWQoMCkpOwotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gSW50ZWwgQXBwIG5vdGUgIlRMQnMsIFBhZ2luZy1TdHJ1Y3R1cmUgQ2FjaGVzLAotCSAqIGFuZCBUaGVpciBJbnZhbGlkYXRpb24iLCBBcHJpbCAyMDA3LCBkb2N1bWVudCAzMTcwODAtMDAxLAotCSAqIHNlY3Rpb24gOC4xOiBpbiBQQUUgbW9kZSB3ZSBleHBsaWNpdGx5IGhhdmUgdG8gZmx1c2ggdGhlCi0JICogVExCIHZpYSBjcjMgaWYgdGhlIHRvcC1sZXZlbCBwZ2QgaXMgY2hhbmdlZC4uLgotCSAqCi0JICogTWFrZSBzdXJlIHRoZSBwdWQgZW50cnkgd2UncmUgdXBkYXRpbmcgaXMgd2l0aGluIHRoZQotCSAqIGN1cnJlbnQgcGdkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IFRMQiBmbHVzaGVzLgotCSAqLwotCXBnZCA9IHJlYWRfY3IzKCk7Ci0JaWYgKF9fcGEocHVkcCkgPj0gcGdkICYmIF9fcGEocHVkcCkgPAotCSAgICAocGdkICsgc2l6ZW9mKHBnZF90KSpQVFJTX1BFUl9QR0QpKQotCQl3cml0ZV9jcjMocGdkKTsKLX0KLQotI2RlZmluZSBwdWRfcGFnZShwdWQpICgoc3RydWN0IHBhZ2UgKikgX192YShwdWRfdmFsKHB1ZCkgJiBQVEVfUEZOX01BU0spKQotCi0jZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBURV9QRk5fTUFTSykpCi0KLQotLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLwotI2RlZmluZSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykgKChwbWRfdCAqKXB1ZF9wYWdlKCoocHVkKSkgKwlcCi0JCQkJICBwbWRfaW5kZXgoYWRkcmVzcykpCi0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgaW5saW5lIHB0ZV90IG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIocHRlX3QgKnB0ZXApCi17Ci0JcHRlX3QgcmVzOwotCi0JLyogeGNoZyBhY3RzIGFzIGEgYmFycmllciBiZWZvcmUgdGhlIHNldHRpbmcgb2YgdGhlIGhpZ2ggYml0cyAqLwotCXJlcy5wdGVfbG93ID0geGNoZygmcHRlcC0+cHRlX2xvdywgMCk7Ci0JcmVzLnB0ZV9oaWdoID0gcHRlcC0+cHRlX2hpZ2g7Ci0JcHRlcC0+cHRlX2hpZ2ggPSAwOwotCi0JcmV0dXJuIHJlczsKLX0KLSNlbHNlCi0jZGVmaW5lIG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIoeHApIG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIoeHApCi0jZW5kaWYKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQotc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgYSwgcHRlX3QgYikKLXsKLQlyZXR1cm4gYS5wdGVfbG93ID09IGIucHRlX2xvdyAmJiBhLnB0ZV9oaWdoID09IGIucHRlX2hpZ2g7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gIXB0ZS5wdGVfbG93ICYmICFwdGUucHRlX2hpZ2g7Ci19Ci0KLS8qCi0gKiBCaXRzIDAsIDYgYW5kIDcgYXJlIHRha2VuIGluIHRoZSBsb3cgcGFydCBvZiB0aGUgcHRlLAotICogcHV0IHRoZSAzMiBiaXRzIG9mIG9mZnNldCBpbnRvIHRoZSBoaWdoIHBhcnQuCi0gKi8KLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgKChwdGUpLnB0ZV9oaWdoKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJCQkJCVwKLQkoKHB0ZV90KSB7IHsgLnB0ZV9sb3cgPSBfUEFHRV9GSUxFLCAucHRlX2hpZ2ggPSAob2ZmKSB9IH0pCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTICAgICAgIDMyCi0KLS8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KLSNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCkgJiAweDFmKQotI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiA1KQotI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpCSgoc3dwX2VudHJ5X3Qpeyh0eXBlKSB8IChvZmZzZXQpIDw8IDV9KQotI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCl7IChwdGUpLnB0ZV9oaWdoIH0pCi0jZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCl7IHsgLnB0ZV9oaWdoID0gKHgpLnZhbCB9IH0pCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QR1RBQkxFXzNMRVZFTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhhNTNiMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUEdUQUJMRV9ICi0jZGVmaW5lIEFTTV9YODZfX1BHVEFCTEVfSAotCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCi0KLSNkZWZpbmUgX1BBR0VfQklUX1BSRVNFTlQJMAkvKiBpcyBwcmVzZW50ICovCi0jZGVmaW5lIF9QQUdFX0JJVF9SVwkJMQkvKiB3cml0ZWFibGUgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1VTRVIJCTIJLyogdXNlcnNwYWNlIGFkZHJlc3NhYmxlICovCi0jZGVmaW5lIF9QQUdFX0JJVF9QV1QJCTMJLyogcGFnZSB3cml0ZSB0aHJvdWdoICovCi0jZGVmaW5lIF9QQUdFX0JJVF9QQ0QJCTQJLyogcGFnZSBjYWNoZSBkaXNhYmxlZCAqLwotI2RlZmluZSBfUEFHRV9CSVRfQUNDRVNTRUQJNQkvKiB3YXMgYWNjZXNzZWQgKHJhaXNlZCBieSBDUFUpICovCi0jZGVmaW5lIF9QQUdFX0JJVF9ESVJUWQkJNgkvKiB3YXMgd3JpdHRlbiB0byAocmFpc2VkIGJ5IENQVSkgKi8KLSNkZWZpbmUgX1BBR0VfQklUX0ZJTEUJCTYKLSNkZWZpbmUgX1BBR0VfQklUX1BTRQkJNwkvKiA0IE1CIChvciAyTUIpIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1BBVAkJNwkvKiBvbiA0S0IgcGFnZXMgKi8KLSNkZWZpbmUgX1BBR0VfQklUX0dMT0JBTAk4CS8qIEdsb2JhbCBUTEIgZW50cnkgUFBybysgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDEJOQkvKiBhdmFpbGFibGUgZm9yIHByb2dyYW1tZXIgKi8KLSNkZWZpbmUgX1BBR0VfQklUX0lPTUFQCQkxMAkvKiBmbGFnIHVzZWQgdG8gaW5kaWNhdGUgSU8gbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMwkxMQotI2RlZmluZSBfUEFHRV9CSVRfUEFUX0xBUkdFCTEyCS8qIE9uIDJNQiBvciAxR0IgcGFnZXMgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1NQRUNJQUwJX1BBR0VfQklUX1VOVVNFRDEKLSNkZWZpbmUgX1BBR0VfQklUX0NQQV9URVNUCV9QQUdFX0JJVF9VTlVTRUQxCi0jZGVmaW5lIF9QQUdFX0JJVF9OWCAgICAgICAgICAgNjMgICAgICAgLyogTm8gZXhlY3V0ZTogb25seSB2YWxpZCBhZnRlciBjcHVpZCBjaGVjayAqLwotCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BSRVNFTlQpCi0jZGVmaW5lIF9QQUdFX1JXCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9SVykKLSNkZWZpbmUgX1BBR0VfVVNFUgkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfVVNFUikKLSNkZWZpbmUgX1BBR0VfUFdUCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QV1QpCi0jZGVmaW5lIF9QQUdFX1BDRAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUENEKQotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfQUNDRVNTRUQpCi0jZGVmaW5lIF9QQUdFX0RJUlRZCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9ESVJUWSkKLSNkZWZpbmUgX1BBR0VfUFNFCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QU0UpCi0jZGVmaW5lIF9QQUdFX0dMT0JBTAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfR0xPQkFMKQotI2RlZmluZSBfUEFHRV9VTlVTRUQxCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9VTlVTRUQxKQotI2RlZmluZSBfUEFHRV9JT01BUAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfSU9NQVApCi0jZGVmaW5lIF9QQUdFX1VOVVNFRDMJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VOVVNFRDMpCi0jZGVmaW5lIF9QQUdFX1BBVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUEFUKQotI2RlZmluZSBfUEFHRV9QQVRfTEFSR0UgKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BBVF9MQVJHRSkKLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfU1BFQ0lBTCkKLSNkZWZpbmUgX1BBR0VfQ1BBX1RFU1QJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0NQQV9URVNUKQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQotI2RlZmluZSBfUEFHRV9OWAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfTlgpCi0jZWxzZQotI2RlZmluZSBfUEFHRV9OWAkoX0FUKHB0ZXZhbF90LCAwKSkKLSNlbmRpZgotCi0vKiBJZiBfUEFHRV9QUkVTRU5UIGlzIGNsZWFyLCB3ZSB1c2UgdGhlc2U6ICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJX1BBR0VfRElSVFkJLyogbm9ubGluZWFyIGZpbGUgbWFwcGluZywKLQkJCQkJICogc2F2ZWQgUFRFOyB1bnNldDpzd2FwICovCi0jZGVmaW5lIF9QQUdFX1BST1ROT05FCV9QQUdFX1BTRQkvKiBpZiB0aGUgdXNlciBtYXBwZWQgaXQgd2l0aCBQUk9UX05PTkU7Ci0JCQkJCSAgIHB0ZV9wcmVzZW50IGdpdmVzIHRydWUgKi8KLQotI2RlZmluZSBfUEFHRV9UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CVwKLQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQotI2RlZmluZSBfS0VSTlBHX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8CVwKLQkJCSBfUEFHRV9ESVJUWSkKLQotLyogU2V0IG9mIGJpdHMgbm90IGNoYW5nZWQgaW4gcHRlX21vZGlmeSAqLwotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX1BGTl9NQVNLIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUIHwJCVwKLQkJCSBfUEFHRV9TUEVDSUFMIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKLQotI2RlZmluZSBfUEFHRV9DQUNIRV9NQVNLCShfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1dCCQkoMCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfV0MJCShfUEFHRV9QV1QpCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1VDX01JTlVTCShfUEFHRV9QQ0QpCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1VDCQkoX1BBR0VfUENEIHwgX1BBR0VfUFdUKQotCi0jZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgXAotCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQotCi0jZGVmaW5lIFBBR0VfU0hBUkVEX0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwJXAotCQkJCQkgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQotI2RlZmluZSBQQUdFX0NPUFlfTk9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAotCQkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKLSNkZWZpbmUgUEFHRV9DT1BZX0VYRUMJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAotCQkJCQkgX1BBR0VfQUNDRVNTRUQpCi0jZGVmaW5lIFBBR0VfQ09QWQkJUEFHRV9DT1BZX05PRVhFQwotI2RlZmluZSBQQUdFX1JFQURPTkxZCQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKLQkJCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFlfRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKLQkJCQkJIF9QQUdFX0FDQ0VTU0VEKQotCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfRVhFQwkJCQkJCVwKLQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0dMT0JBTCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTAkJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX05YKQotCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfUk8JCShfX1BBR0VfS0VSTkVMICYgfl9QQUdFX1JXKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JYCQkoX19QQUdFX0tFUk5FTF9FWEVDICYgfl9QQUdFX1JXKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX1dDCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0NBQ0hFX1dDKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX05PQ0FDSEUJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX1VDX01JTlVTCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BDRCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9WU1lTQ0FMTAkJKF9fUEFHRV9LRVJORUxfUlggfCBfUEFHRV9VU0VSKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfVlNZU0NBTEwgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0UJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUFNFKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9DQUNIRV9VQyB8IF9QQUdFX1BTRSkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QU0UpCi0KLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9JTwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9JT01BUCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX05PQ0FDSEUgfCBfUEFHRV9JT01BUCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19VQ19NSU5VUwkoX19QQUdFX0tFUk5FTF9VQ19NSU5VUyB8IF9QQUdFX0lPTUFQKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX1dDCQkoX19QQUdFX0tFUk5FTF9XQyB8IF9QQUdFX0lPTUFQKQotCi0jZGVmaW5lIFBBR0VfS0VSTkVMCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTCkKLSNkZWZpbmUgUEFHRV9LRVJORUxfUk8JCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JPKQotI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX1JYCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9SWCkKLSNkZWZpbmUgUEFHRV9LRVJORUxfV0MJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1dDKQotI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX1VDX01JTlVTCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1VDX01JTlVTKQotI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0VfRVhFQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDKQotI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTAkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTCkKLSNkZWZpbmUgUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMX05PQ0FDSEUpCi0KLSNkZWZpbmUgUEFHRV9LRVJORUxfSU8JCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPKQotI2RlZmluZSBQQUdFX0tFUk5FTF9JT19OT0NBQ0hFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1VDX01JTlVTCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1VDX01JTlVTKQotI2RlZmluZSBQQUdFX0tFUk5FTF9JT19XQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19XQykKLQotLyogICAgICAgICB4d3IgKi8KLSNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFlfRVhFQwotI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9FWEVDCi0jZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfRVhFQwotI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX0VYRUMKLQotI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFlfRVhFQwotI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9FWEVDCi0jZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRF9FWEVDCi0jZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9FWEVDCi0KLS8qCi0gKiBlYXJseSBpZGVudGl0eSBtYXBwaW5nICBwdGUgYXR0cmliIG1hY3Jvcy4KLSAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9JREVOVF9MQVJHRV9FWEVDCV9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQwotI2Vsc2UKLS8qCi0gKiBGb3IgUERFX0lERU5UX0FUVFIgaW5jbHVkZSBVU0VSIGJpdC4gQXMgdGhlIFBERSBhbmQgUFRFIHByb3RlY3Rpb24KLSAqIGJpdHMgYXJlIGNvbWJpbmVkLCB0aGlzIHdpbGwgYWxvdyB1c2VyIHRvIGFjY2VzcyB0aGUgaGlnaCBhZGRyZXNzIG1hcHBlZAotICogVkRTTyBpbiB0aGUgcHJlc2VuY2Ugb2YgQ09ORklHX0NPTVBBVF9WRFNPCi0gKi8KLSNkZWZpbmUgUFRFX0lERU5UX0FUVFIJIDB4MDAzCQkvKiBQUkVTRU5UK1JXICovCi0jZGVmaW5lIFBERV9JREVOVF9BVFRSCSAweDA2NwkJLyogUFJFU0VOVCtSVytVU0VSK0RJUlRZK0FDQ0VTU0VEICovCi0jZGVmaW5lIFBHRF9JREVOVF9BVFRSCSAweDAwMQkJLyogUFJFU0VOVCAobm8gb3RoZXIgYXR0cmlidXRlcykgKi8KLSNlbmRpZgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKgotICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKLSAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07Ci0jZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQotCi1leHRlcm4gc3BpbmxvY2tfdCBwZ2RfbG9jazsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBnZF9saXN0OwotCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX0RJUlRZOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX1JXOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfRklMRTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHRlX2h1Z2UocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX1BTRTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHRlX2dsb2JhbChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfR0xPQkFMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCi17Ci0JcmV0dXJuICEocHRlX2ZsYWdzKHB0ZSkgJiBfUEFHRV9OWCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX2ZsYWdzKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BmbihwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiBQVEVfUEZOX01BU0spID4+IFBBR0VfU0hJRlQ7Ci19Ci0KLSNkZWZpbmUgcHRlX3BhZ2UocHRlKQlwZm5fdG9fcGFnZShwdGVfcGZuKHB0ZSkpCi0KLXN0YXRpYyBpbmxpbmUgaW50IHBtZF9sYXJnZShwbWRfdCBwdGUpCi17Ci0JcmV0dXJuIChwbWRfdmFsKHB0ZSkgJiAoX1BBR0VfUFNFIHwgX1BBR0VfUFJFU0VOVCkpID09Ci0JCShfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9ESVJUWSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0FDQ0VTU0VEKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX1JXKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX05YKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0RJUlRZKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FDQ0VTU0VEKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1JXKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUFNFKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfY2xyaHVnZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9QU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2dsb2JhbChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0dMT0JBTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2Nscmdsb2JhbChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9HTE9CQUwpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKQotewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9TUEVDSUFMKTsKLX0KLQotZXh0ZXJuIHB0ZXZhbF90IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOwotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwYWdlX25yLCBwZ3Byb3RfdCBwZ3Byb3QpCi17Ci0JcmV0dXJuIF9fcHRlKCgoKHBoeXNfYWRkcl90KXBhZ2VfbnIgPDwgUEFHRV9TSElGVCkgfAotCQkgICAgICBwZ3Byb3RfdmFsKHBncHJvdCkpICYgX19zdXBwb3J0ZWRfcHRlX21hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHBtZF90IHBmbl9wbWQodW5zaWduZWQgbG9uZyBwYWdlX25yLCBwZ3Byb3RfdCBwZ3Byb3QpCi17Ci0JcmV0dXJuIF9fcG1kKCgoKHBoeXNfYWRkcl90KXBhZ2VfbnIgPDwgUEFHRV9TSElGVCkgfAotCQkgICAgICBwZ3Byb3RfdmFsKHBncHJvdCkpICYgX19zdXBwb3J0ZWRfcHRlX21hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQotewotCXB0ZXZhbF90IHZhbCA9IHB0ZV92YWwocHRlKTsKLQotCS8qCi0JICogQ2hvcCBvZmYgdGhlIE5YIGJpdCAoaWYgcHJlc2VudCksIGFuZCBhZGQgdGhlIE5YIHBvcnRpb24gb2YKLQkgKiB0aGUgbmV3cHJvdCAoaWYgcHJlc2VudCk6Ci0JICovCi0JdmFsICY9IF9QQUdFX0NIR19NQVNLOwotCXZhbCB8PSBwZ3Byb3RfdmFsKG5ld3Byb3QpICYgKH5fUEFHRV9DSEdfTUFTSykgJiBfX3N1cHBvcnRlZF9wdGVfbWFzazsKLQotCXJldHVybiBfX3B0ZSh2YWwpOwotfQotCi0vKiBtcHJvdGVjdCBuZWVkcyB0byBwcmVzZXJ2ZSBQQVQgYml0cyB3aGVuIHVwZGF0aW5nIHZtX3BhZ2VfcHJvdCAqLwotI2RlZmluZSBwZ3Byb3RfbW9kaWZ5IHBncHJvdF9tb2RpZnkKLXN0YXRpYyBpbmxpbmUgcGdwcm90X3QgcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCBwZ3Byb3RfdCBuZXdwcm90KQotewotCXBncHJvdHZhbF90IHByZXNlcnZlYml0cyA9IHBncHJvdF92YWwob2xkcHJvdCkgJiBfUEFHRV9DSEdfTUFTSzsKLQlwZ3Byb3R2YWxfdCBhZGRiaXRzID0gcGdwcm90X3ZhbChuZXdwcm90KTsKLQlyZXR1cm4gX19wZ3Byb3QocHJlc2VydmViaXRzIHwgYWRkYml0cyk7Ci19Ci0KLSNkZWZpbmUgcHRlX3BncHJvdCh4KSBfX3BncHJvdChwdGVfZmxhZ3MoeCkgJiBQVEVfRkxBR1NfTUFTSykKLQotI2RlZmluZSBjYW5vbl9wZ3Byb3QocCkgX19wZ3Byb3QocGdwcm90X3ZhbChwKSAmIF9fc3VwcG9ydGVkX3B0ZV9tYXNrKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBfX0hBVkVfUEhZU19NRU1fQUNDRVNTX1BST1QKLXN0cnVjdCBmaWxlOwotcGdwcm90X3QgcGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCB2bWFfcHJvdCk7Ci1pbnQgcGh5c19tZW1fYWNjZXNzX3Byb3RfYWxsb3dlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90ICp2bWFfcHJvdCk7Ci0jZW5kaWYKLQotLyogSW5zdGFsbCBhIHB0ZSBmb3IgYSBwYXJ0aWN1bGFyIHZhZGRyIGluIGtlcm5lbCBzcGFjZS4gKi8KLXZvaWQgc2V0X3B0ZV92YWRkcih1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCBwdGUpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7Ci1leHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKSB7fQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkge30KLSNlbmRpZgotCi1leHRlcm4gaW50IGFyY2hfcmVwb3J0X21lbWluZm8oY2hhciAqcGFnZSk7Ci0KLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlICAvKiAhQ09ORklHX1BBUkFWSVJUICovCi0jZGVmaW5lIHNldF9wdGUocHRlcCwgcHRlKQkJbmF0aXZlX3NldF9wdGUocHRlcCwgcHRlKQotI2RlZmluZSBzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpCW5hdGl2ZV9zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpCi0KLSNkZWZpbmUgc2V0X3B0ZV9wcmVzZW50KG1tLCBhZGRyLCBwdGVwLCBwdGUpCQkJCVwKLQluYXRpdmVfc2V0X3B0ZV9wcmVzZW50KG1tLCBhZGRyLCBwdGVwLCBwdGUpCi0jZGVmaW5lIHNldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkJCQkJCVwKLQluYXRpdmVfc2V0X3B0ZV9hdG9taWMocHRlcCwgcHRlKQotCi0jZGVmaW5lIHNldF9wbWQocG1kcCwgcG1kKQkJbmF0aXZlX3NldF9wbWQocG1kcCwgcG1kKQotCi0jaWZuZGVmIF9fUEFHRVRBQkxFX1BVRF9GT0xERUQKLSNkZWZpbmUgc2V0X3BnZChwZ2RwLCBwZ2QpCQluYXRpdmVfc2V0X3BnZChwZ2RwLCBwZ2QpCi0jZGVmaW5lIHBnZF9jbGVhcihwZ2QpCQkJbmF0aXZlX3BnZF9jbGVhcihwZ2QpCi0jZW5kaWYKLQotI2lmbmRlZiBzZXRfcHVkCi0jIGRlZmluZSBzZXRfcHVkKHB1ZHAsIHB1ZCkJCW5hdGl2ZV9zZXRfcHVkKHB1ZHAsIHB1ZCkKLSNlbmRpZgotCi0jaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKLSNkZWZpbmUgcHVkX2NsZWFyKHB1ZCkJCQluYXRpdmVfcHVkX2NsZWFyKHB1ZCkKLSNlbmRpZgotCi0jZGVmaW5lIHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCkJbmF0aXZlX3B0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCkKLSNkZWZpbmUgcG1kX2NsZWFyKHBtZCkJCQluYXRpdmVfcG1kX2NsZWFyKHBtZCkKLQotI2RlZmluZSBwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwKSAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBwdGVfdXBkYXRlX2RlZmVyKG1tLCBhZGRyLCBwdGVwKSAgICAgICAgZG8geyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBhcmF2aXJ0X3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSkKLXsKLQluYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KGJhc2UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBhcmF2aXJ0X3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKQotewotCW5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZShiYXNlKTsKLX0KLSNlbmRpZgkvKiBDT05GSUdfUEFSQVZJUlQgKi8KLQotI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJwZ3RhYmxlXzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJwZ3RhYmxlXzY0LmgiCi0jZW5kaWYKLQotLyoKLSAqIHRoZSBwZ2QgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHBnZF90W1BUUlNfUEVSX1BHRF0KLSAqCi0gKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcGdkIHBhZ2Ugd2hpY2ggd291bGQKLSAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcwotICovCi0jZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdEIC0gMSkpCi0KLS8qCi0gKiBwZ2Rfb2Zmc2V0KCkgcmV0dXJucyBhIChwZ2RfdCAqKQotICogcGdkX2luZGV4KCkgaXMgdXNlZCBnZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBwZ2QgcGFnZSdzIGFycmF5IG9mIHBnZF90J3M7Ci0gKi8KLSNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCArIHBnZF9pbmRleCgoYWRkcmVzcykpKQotLyoKLSAqIGEgc2hvcnRjdXQgd2hpY2ggaW1wbGllcyB0aGUgdXNlIG9mIHRoZSBrZXJuZWwncyBwZ2QsIGluc3RlYWQKLSAqIG9mIGEgcHJvY2VzcydzCi0gKi8KLSNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIChhZGRyZXNzKSkKLQotCi0jZGVmaW5lIEtFUk5FTF9QR0RfQk9VTkRBUlkJcGdkX2luZGV4KFBBR0VfT0ZGU0VUKQotI2RlZmluZSBLRVJORUxfUEdEX1BUUlMJCShQVFJTX1BFUl9QR0QgLSBLRVJORUxfUEdEX0JPVU5EQVJZKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1lbnVtIHsKLQlQR19MRVZFTF9OT05FLAotCVBHX0xFVkVMXzRLLAotCVBHX0xFVkVMXzJNLAotCVBHX0xFVkVMXzFHLAotCVBHX0xFVkVMX05VTQotfTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gdm9pZCB1cGRhdGVfcGFnZV9jb3VudChpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgcGFnZXMpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcGFnZV9jb3VudChpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgcGFnZXMpIHsgfQotI2VuZGlmCi0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBrZXJuZWwgcGFnZXRhYmxlIGVudHJ5IGNvbnRyb2xsaW5nCi0gKiB0aGUgdmlydHVhbCBhZGRyZXNzICdhZGRyZXNzJy4gTlVMTCBtZWFucyBubyBwYWdldGFibGUgZW50cnkgcHJlc2VudC4KLSAqIE5PVEU6IHRoZSByZXR1cm4gdHlwZSBpcyBwdGVfdCBidXQgaWYgdGhlIHBtZCBpcyBQU0UgdGhlbiB3ZSByZXR1cm4gaXQKLSAqIGFzIGEgcHRlIHRvby4KLSAqLwotZXh0ZXJuIHB0ZV90ICpsb29rdXBfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCAqbGV2ZWwpOwotCi0vKiBsb2NhbCBwdGUgdXBkYXRlcyBuZWVkIG5vdCB1c2UgeGNoZyBmb3IgbG9ja2luZyAqLwotc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyKHB0ZV90ICpwdGVwKQotewotCXB0ZV90IHJlcyA9ICpwdGVwOwotCi0JLyogUHVyZSBuYXRpdmUgZnVuY3Rpb24gbmVlZHMgbm8gaW5wdXQgZm9yIG1tLCBhZGRyICovCi0JbmF0aXZlX3B0ZV9jbGVhcihOVUxMLCAwLCBwdGVwKTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICAgIHB0ZV90ICpwdGVwICwgcHRlX3QgcHRlKQotewotCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7Ci19Ci0KLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0vKgotICogUnVsZXMgZm9yIHVzaW5nIHB0ZV91cGRhdGUgLSBpdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBhbnkgUFRFIHVwZGF0ZSB3aGljaAotICogaGFzIG5vdCBiZWVuIGRvbmUgdXNpbmcgdGhlIHNldF9wdGUgLyBjbGVhcl9wdGUgaW50ZXJmYWNlcy4gIEl0IGlzIHVzZWQgYnkKLSAqIHNoYWRvdyBtb2RlIGh5cGVydmlzb3JzIHRvIHJlc3luY2hyb25pemUgdGhlIHNoYWRvdyBwYWdlIHRhYmxlcy4gIEtlcm5lbCBQVEUKLSAqIHVwZGF0ZXMgc2hvdWxkIGVpdGhlciBiZSBzZXRzLCBjbGVhcnMsIG9yIHNldF9wdGVfYXRvbWljIGZvciBQLT5QCi0gKiB0cmFuc2l0aW9ucywgd2hpY2ggbWVhbnMgdGhpcyBob29rIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgdXNlciBQVEVzLgotICogVGhpcyBob29rIGltcGxpZXMgYSBQLT5QIHByb3RlY3Rpb24gb3IgYWNjZXNzIGNoYW5nZSBoYXMgdGFrZW4gcGxhY2UsIHdoaWNoCi0gKiByZXF1aXJlcyBhIHN1YnNlcXVlbnQgVExCIGZsdXNoLiAgVGhlIG5vdGlmaWNhdGlvbiBjYW4gb3B0aW9uYWxseSBiZSBkZWxheWVkCi0gKiB1bnRpbCB0aGUgVExCIGZsdXNoIGV2ZW50IGJ5IHVzaW5nIHRoZSBwdGVfdXBkYXRlX2RlZmVyIGZvcm0gb2YgdGhlCi0gKiBpbnRlcmZhY2UsIGJ1dCBjYXJlIG11c3QgYmUgdGFrZW4gdG8gYXNzdXJlIHRoYXQgdGhlIGZsdXNoIGhhcHBlbnMgd2hpbGUKLSAqIHN0aWxsIGhvbGRpbmcgdGhlIHNhbWUgcGFnZSB0YWJsZSBsb2NrIHNvIHRoYXQgdGhlIHNoYWRvdyBhbmQgcHJpbWFyeSBwYWdlcwotICogZG8gbm90IGJlY29tZSBvdXQgb2Ygc3luYyBvbiBTTVAuCi0gKi8KLSNkZWZpbmUgcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHRlX3VwZGF0ZV9kZWZlcihtbSwgYWRkciwgcHRlcCkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qCi0gKiBXZSBvbmx5IHVwZGF0ZSB0aGUgZGlydHkvYWNjZXNzZWQgc3RhdGUgaWYgd2Ugc2V0Ci0gKiB0aGUgZGlydHkgYml0IGJ5IGhhbmQgaW4gdGhlIGtlcm5lbCwgc2luY2UgdGhlIGhhcmR3YXJlCi0gKiB3aWxsIGRvIHRoZSBhY2Nlc3NlZCBiaXQgZm9yIHVzLCBhbmQgd2UgZG9uJ3Qgd2FudCB0bwotICogcmFjZSB3aXRoIG90aGVyIENQVSdzIHRoYXQgbWlnaHQgYmUgdXBkYXRpbmcgdGhlIGRpcnR5Ci0gKiBiaXQgYXQgdGhlIHNhbWUgdGltZS4KLSAqLwotc3RydWN0IHZtX2FyZWFfc3RydWN0OwotCi0jZGVmaW5lICBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKLWV4dGVybiBpbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLAotCQkJCSBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCi1leHRlcm4gaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICi1leHRlcm4gaW50IHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICAgIHB0ZV90ICpwdGVwKQotewotCXB0ZV90IHB0ZSA9IG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIocHRlcCk7Ci0JcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCk7Ci0JcmV0dXJuIHB0ZTsKLX0KLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVJfRlVMTAotc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCi0JCQkJCSAgICBpbnQgZnVsbCkKLXsKLQlwdGVfdCBwdGU7Ci0JaWYgKGZ1bGwpIHsKLQkJLyoKLQkJICogRnVsbCBhZGRyZXNzIGRlc3RydWN0aW9uIGluIHByb2dyZXNzOyBwYXJhdmlydCBkb2VzIG5vdAotCQkgKiBjYXJlIGFib3V0IHVwZGF0ZXMgYW5kIG5hdGl2ZSBuZWVkcyBubyBsb2NraW5nCi0JCSAqLwotCQlwdGUgPSBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyKHB0ZXApOwotCX0gZWxzZSB7Ci0JCXB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCk7Ci0JfQotCXJldHVybiBwdGU7Ci19Ci0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCi17Ci0JY2xlYXJfYml0KF9QQUdFX0JJVF9SVywgKHVuc2lnbmVkIGxvbmcgKikmcHRlcC0+cHRlKTsKLQlwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwKTsKLX0KLQotLyoKLSAqIGNsb25lX3BnZF9yYW5nZShwZ2RfdCAqZHN0LCBwZ2RfdCAqc3JjLCBpbnQgY291bnQpOwotICoKLSAqICBkc3QgLSBwb2ludGVyIHRvIHBnZCByYW5nZSBhbndoZXJlIG9uIGEgcGdkIHBhZ2UKLSAqICBzcmMgLSAiIgotICogIGNvdW50IC0gdGhlIG51bWJlciBvZiBwZ2RzIHRvIGNvcHkuCi0gKgotICogZHN0IGFuZCBzcmMgY2FuIGJlIG9uIHRoZSBzYW1lIHBhZ2UsIGJ1dCB0aGUgcmFuZ2UgbXVzdCBub3Qgb3ZlcmxhcCwKLSAqIGFuZCBtdXN0IG5vdCBjcm9zcyBhIHBhZ2UgYm91bmRhcnkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbG9uZV9wZ2RfcmFuZ2UocGdkX3QgKmRzdCwgcGdkX3QgKnNyYywgaW50IGNvdW50KQotewotICAgICAgIG1lbWNweShkc3QsIHNyYywgY291bnQgKiBzaXplb2YocGdkX3QpKTsKLX0KLQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgotI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGVfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlNzAyZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUEdUQUJMRV8zMl9ICi0jZGVmaW5lIEFTTV9YODZfX1BHVEFCTEVfMzJfSAotCi0KLS8qCi0gKiBUaGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgYXNzdW1lcyBhIHRocmVlLWxldmVsIHBhZ2UgdGFibGUgc2V0dXAuIE9uCi0gKiB0aGUgaTM4Niwgd2UgdXNlIHRoYXQsIGJ1dCAiZm9sZCIgdGhlIG1pZCBsZXZlbCBpbnRvIHRoZSB0b3AtbGV2ZWwgcGFnZQotICogdGFibGUsIHNvIHRoYXQgd2UgcGh5c2ljYWxseSBoYXZlIHRoZSBzYW1lIHR3by1sZXZlbCBwYWdlIHRhYmxlIGFzIHRoZQotICogaTM4NiBtbXUgZXhwZWN0cy4KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKLSAqIHRoZSBpMzg2IHBhZ2UgdGFibGUgdHJlZS4KLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQotc3RydWN0IG1tX3N0cnVjdDsKLXN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKLQotZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKSB7IH0KLXZvaWQgcGFnaW5nX2luaXQodm9pZCk7Ci0KLWV4dGVybiB2b2lkIHNldF9wbWRfcGZuKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KTsKLQotLyoKLSAqIFRoZSBMaW51eCB4ODYgcGFnaW5nIGFyY2hpdGVjdHVyZSBpcyAnY29tcGlsZS10aW1lIGR1YWwtbW9kZScsIGl0Ci0gKiBpbXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIDItbGV2ZWwgeDg2IHBhZ2UgdGFibGVzIGFuZCB0aGUKLSAqIG5ld2VyIDMtbGV2ZWwgUEFFLW1vZGUgcGFnZSB0YWJsZXMuCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwtZGVmcy5oPgotIyBkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCi0jIGRlZmluZSBQTURfTUFTSwkofihQTURfU0laRSAtIDEpKQotI2Vsc2UKLSMgaW5jbHVkZSA8YXNtL3BndGFibGUtMmxldmVsLWRlZnMuaD4KLSNlbmRpZgotCi0jZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKLSNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFIC0gMSkpCi0KLS8qIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJKDggKiAxMDI0ICogMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkKLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotI2RlZmluZSBMQVNUX1BLTUFQIDUxMgotI2Vsc2UKLSNkZWZpbmUgTEFTVF9QS01BUCAxMDI0Ci0jZW5kaWYKLQotI2RlZmluZSBQS01BUF9CQVNFICgoRklYQUREUl9CT09UX1NUQVJUIC0gUEFHRV9TSVpFICogKExBU1RfUEtNQVAgKyAxKSkJXAotCQkgICAgJiBQTURfTUFTSykKLQotI2lmZGVmIENPTkZJR19ISUdITUVNCi0jIGRlZmluZSBWTUFMTE9DX0VORAkoUEtNQVBfQkFTRSAtIDIgKiBQQUdFX1NJWkUpCi0jZWxzZQotIyBkZWZpbmUgVk1BTExPQ19FTkQJKEZJWEFERFJfU1RBUlQgLSAyICogUEFHRV9TSVpFKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYTUVNCShWTUFMTE9DX0VORCAtIFBBR0VfT0ZGU0VUIC0gX19WTUFMTE9DX1JFU0VSVkUpCi0KLS8qCi0gKiBEZWZpbmUgdGhpcyBpZiB0aGluZ3Mgd29yayBkaWZmZXJlbnRseSBvbiBhbiBpMzg2IGFuZCBhbiBpNDg2OgotICogaXQgd2lsbCAob24gYW4gaTQ4Nikgd2FybiBhYm91dCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgYXJlCi0gKiBkb25lIHdpdGhvdXQgYSAnYWNjZXNzX29rKFZFUklGWV9XUklURSwuLiknCi0gKi8KLSN1bmRlZiBURVNUX0FDQ0VTU19PSwotCi0vKiBUaGUgYm9vdCBwYWdlIHRhYmxlcyAoYWxsIGNyZWF0ZWQgYXMgYSBzaW5nbGUgYXJyYXkpICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBwZzBbXTsKLQotI2RlZmluZSBwdGVfcHJlc2VudCh4KQkoKHgpLnB0ZV9sb3cgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKLQotLyogVG8gYXZvaWQgaGFybWZ1bCByYWNlcywgcG1kX25vbmUoeCkgc2hvdWxkIGNoZWNrIG9ubHkgdGhlIGxvd2VyIHdoZW4gUEFFICovCi0jZGVmaW5lIHBtZF9ub25lKHgpCSghKHVuc2lnbmVkIGxvbmcpcG1kX3ZhbCgoeCkpKQotI2RlZmluZSBwbWRfcHJlc2VudCh4KQkocG1kX3ZhbCgoeCkpICYgX1BBR0VfUFJFU0VOVCkKLSNkZWZpbmUgcG1kX2JhZCh4KSAoKHBtZF92YWwoeCkgJiAoUFRFX0ZMQUdTX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCi0KLSNkZWZpbmUgcGFnZXNfdG9fbWIoeCkgKCh4KSA+PiAoMjAtUEFHRV9TSElGVCkpCi0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgotI2VuZGlmCi0KLS8qCi0gKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuCi0gKiBPbiBwcm9jZXNzb3JzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IGl0LCB0aGlzIGlzIGEgbm8tb3AuCi0gKi8KLSNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KQkJCQkJXAotCSgoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQkJCQlcCi0JID8gKF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKQlcCi0JIDogKHByb3QpKQotCi0vKgotICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKLSAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCi0gKi8KLSNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCi0KLQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xhcmdlKHB1ZF90IHB1ZCkgeyByZXR1cm4gMDsgfQotCi0vKgotICogdGhlIHBtZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcG1kX3RbUFRSU19QRVJfUE1EXQotICoKLSAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwbWQgcGFnZSB3aGljaCB3b3VsZAotICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCQkJCVwKLQkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpKQotCi0vKgotICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQotICoKLSAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAotICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpCQkJCQlcCi0JKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykJCQkJXAotCSgocHRlX3QgKilwbWRfcGFnZV92YWRkcigqKGRpcikpICsgIHB0ZV9pbmRleCgoYWRkcmVzcykpKQotCi0jZGVmaW5lIHBtZF9wYWdlKHBtZCkgKHBmbl90b19wYWdlKHBtZF92YWwoKHBtZCkpID4+IFBBR0VfU0hJRlQpKQotCi0jZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkJCQkJCVwKLQkoKHVuc2lnbmVkIGxvbmcpX192YShwbWRfdmFsKChwbWQpKSAmIFBURV9QRk5fTUFTSykpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ISUdIUFRFKQotI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCQkJCQlcCi0JKChwdGVfdCAqKWttYXBfYXRvbWljX3B0ZShwbWRfcGFnZSgqKGRpcikpLCBLTV9QVEUwKSArCQlcCi0JIHB0ZV9pbmRleCgoYWRkcmVzcykpKQotI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKQkJCQlcCi0JKChwdGVfdCAqKWttYXBfYXRvbWljX3B0ZShwbWRfcGFnZSgqKGRpcikpLCBLTV9QVEUxKSArCQlcCi0JIHB0ZV9pbmRleCgoYWRkcmVzcykpKQotI2RlZmluZSBwdGVfdW5tYXAocHRlKSBrdW5tYXBfYXRvbWljKChwdGUpLCBLTV9QVEUwKQotI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkga3VubWFwX2F0b21pYygocHRlKSwgS01fUFRFMSkKLSNlbHNlCi0jZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykJCQkJCVwKLQkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgcHRlX2luZGV4KChhZGRyZXNzKSkpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfbWFwKChkaXIpLCAoYWRkcmVzcykpCi0jZGVmaW5lIHB0ZV91bm1hcChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKiBDbGVhciBhIGtlcm5lbCBQVEUgYW5kIGZsdXNoIGl0IGZyb20gdGhlIFRMQiAqLwotI2RlZmluZSBrcHRlX2NsZWFyX2ZsdXNoKHB0ZXAsIHZhZGRyKQkJXAotZG8gewkJCQkJCVwKLQlwdGVfY2xlYXIoJmluaXRfbW0sICh2YWRkciksIChwdGVwKSk7CVwKLQlfX2ZsdXNoX3RsYl9vbmUoKHZhZGRyKSk7CQlcCi19IHdoaWxlICgwKQotCi0vKgotICogVGhlIGkzODYgZG9lc24ndCBoYXZlIGFueSBleHRlcm5hbCBNTVUgaW5mbzogdGhlIGtlcm5lbCBwYWdlCi0gKiB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KLSAqLwotI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKSBkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLS8qCi0gKiBrZXJuX2FkZHJfdmFsaWQoKSBpcyAoMSkgZm9yIEZMQVRNRU0gYW5kICgwKSBmb3IKLSAqIFNQQVJTRU1FTSBhbmQgRElTQ09OVElHTUVNCi0gKi8KLSNpZmRlZiBDT05GSUdfRkxBVE1FTQotI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCi0jZWxzZQotI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoa2FkZHIpCSgwKQotI2VuZGlmCi0KLSNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAotCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QR1RBQkxFXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGU5NzcwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QR1RBQkxFXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fUEdUQUJMRV82NF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQotICogdGhlIHg4Ni02NCBwYWdlIHRhYmxlIHRyZWUuCi0gKi8KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGFzbS9wZGEuaD4KLQotZXh0ZXJuIHB1ZF90IGxldmVsM19rZXJuZWxfcGd0WzUxMl07Ci1leHRlcm4gcHVkX3QgbGV2ZWwzX2lkZW50X3BndFs1MTJdOwotZXh0ZXJuIHBtZF90IGxldmVsMl9rZXJuZWxfcGd0WzUxMl07Ci1leHRlcm4gcG1kX3QgbGV2ZWwyX2ZpeG1hcF9wZ3RbNTEyXTsKLWV4dGVybiBwbWRfdCBsZXZlbDJfaWRlbnRfcGd0WzUxMl07Ci1leHRlcm4gcGdkX3QgaW5pdF9sZXZlbDRfcGd0W107Ci0KLSNkZWZpbmUgc3dhcHBlcl9wZ19kaXIgaW5pdF9sZXZlbDRfcGd0Ci0KLWV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECTAKLQotLyoKLSAqIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRvcC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAKLSAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkzOQotI2RlZmluZSBQVFJTX1BFUl9QR0QJNTEyCi0KLS8qCi0gKiAzcmQgbGV2ZWwgcGFnZQotICovCi0jZGVmaW5lIFBVRF9TSElGVAkzMAotI2RlZmluZSBQVFJTX1BFUl9QVUQJNTEyCi0KLS8qCi0gKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIG1pZGRsZS1sZXZlbAotICogcGFnZSB0YWJsZSBjYW4gbWFwCi0gKi8KLSNkZWZpbmUgUE1EX1NISUZUCTIxCi0jZGVmaW5lIFBUUlNfUEVSX1BNRAk1MTIKLQotLyoKLSAqIGVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsCi0gKi8KLSNkZWZpbmUgUFRSU19QRVJfUFRFCTUxMgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jZGVmaW5lIHB0ZV9FUlJPUihlKQkJCQkJXAotCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTAxNmx4KS5cbiIsCQlcCi0JICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcHRlX3ZhbChlKSkKLSNkZWZpbmUgcG1kX0VSUk9SKGUpCQkJCQlcCi0JcHJpbnRrKCIlczolZDogYmFkIHBtZCAlcCglMDE2bHgpLlxuIiwJCVwKLQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwbWRfdmFsKGUpKQotI2RlZmluZSBwdWRfRVJST1IoZSkJCQkJCVwKLQlwcmludGsoIiVzOiVkOiBiYWQgcHVkICVwKCUwMTZseCkuXG4iLAkJXAotCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHB1ZF92YWwoZSkpCi0jZGVmaW5lIHBnZF9FUlJPUihlKQkJCQkJXAotCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNmx4KS5cbiIsCQlcCi0JICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcGdkX3ZhbChlKSkKLQotI2RlZmluZSBwZ2Rfbm9uZSh4KQkoIXBnZF92YWwoeCkpCi0jZGVmaW5lIHB1ZF9ub25lKHgpCSghcHVkX3ZhbCh4KSkKLQotc3RydWN0IG1tX3N0cnVjdDsKLQotdm9pZCBzZXRfcHRlX3ZhZGRyX3B1ZChwdWRfdCAqcHVkX3BhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IG5ld19wdGUpOwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgIHB0ZV90ICpwdGVwKQotewotCSpwdGVwID0gbmF0aXZlX21ha2VfcHRlKDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQkqcHRlcCA9IHB0ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgbmF0aXZlX3B0ZXBfZ2V0X2FuZF9jbGVhcihwdGVfdCAqeHApCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiBuYXRpdmVfbWFrZV9wdGUoeGNoZygmeHAtPnB0ZSwgMCkpOwotI2Vsc2UKLQkvKiBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyLAotCSAgIGJ1dCBkdXBsaWNhdGVkIGJlY2F1c2Ugb2YgY3ljbGljIGRlcGVuZGVuY3kgKi8KLQlwdGVfdCByZXQgPSAqeHA7Ci0JbmF0aXZlX3B0ZV9jbGVhcihOVUxMLCAwLCB4cCk7Ci0JcmV0dXJuIHJldDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKLXsKLQkqcG1kcCA9IHBtZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wbWRfY2xlYXIocG1kX3QgKnBtZCkKLXsKLQluYXRpdmVfc2V0X3BtZChwbWQsIG5hdGl2ZV9tYWtlX3BtZCgwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQotewotCSpwdWRwID0gcHVkOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3B1ZF9jbGVhcihwdWRfdCAqcHVkKQotewotCW5hdGl2ZV9zZXRfcHVkKHB1ZCwgbmF0aXZlX21ha2VfcHVkKDApKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcGdkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QpCi17Ci0JKnBnZHAgPSBwZ2Q7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGdkX2NsZWFyKHBnZF90ICpwZ2QpCi17Ci0JbmF0aXZlX3NldF9wZ2QocGdkLCBuYXRpdmVfbWFrZV9wZ2QoMCkpOwotfQotCi0jZGVmaW5lIHB0ZV9zYW1lKGEsIGIpCQkoKGEpLnB0ZSA9PSAoYikucHRlKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFBNRF9TSVpFCShfQUMoMSwgVUwpIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKLSNkZWZpbmUgUFVEX1NJWkUJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQotI2RlZmluZSBQVURfTUFTSwkofihQVURfU0laRSAtIDEpKQotI2RlZmluZSBQR0RJUl9TSVpFCShfQUMoMSwgVUwpIDw8IFBHRElSX1NISUZUKQotI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUgLSAxKSkKLQotCi0jZGVmaW5lIE1BWE1FTQkJIF9BQygweDAwMDAzZmZmZmZmZmZmZmYsIFVMKQotI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgIF9BQygweGZmZmZjMjAwMDAwMDAwMDAsIFVMKQotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgIF9BQygweGZmZmZlMWZmZmZmZmZmZmYsIFVMKQotI2RlZmluZSBWTUVNTUFQX1NUQVJUCSBfQUMoMHhmZmZmZTIwMDAwMDAwMDAwLCBVTCkKLSNkZWZpbmUgTU9EVUxFU19WQUREUiAgICBfQUMoMHhmZmZmZmZmZmEwMDAwMDAwLCBVTCkKLSNkZWZpbmUgTU9EVUxFU19FTkQgICAgICBfQUMoMHhmZmZmZmZmZmZmMDAwMDAwLCBVTCkKLSNkZWZpbmUgTU9EVUxFU19MRU4gICAoTU9EVUxFU19FTkQgLSBNT0RVTEVTX1ZBRERSKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkKLXsKLQlyZXR1cm4gKHBnZF92YWwocGdkKSAmIH4oUFRFX1BGTl9NQVNLIHwgX1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKQotewotCXJldHVybiAocHVkX3ZhbChwdWQpICYgfihQVEVfUEZOX01BU0sgfCBfUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcG1kX2JhZChwbWRfdCBwbWQpCi17Ci0JcmV0dXJuIChwbWRfdmFsKHBtZCkgJiB+KFBURV9QRk5fTUFTSyB8IF9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFOwotfQotCi0jZGVmaW5lIHB0ZV9ub25lKHgpCSghcHRlX3ZhbCgoeCkpKQotI2RlZmluZSBwdGVfcHJlc2VudCh4KQkocHRlX3ZhbCgoeCkpICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCi0KLSNkZWZpbmUgcGFnZXNfdG9fbWIoeCkJKCh4KSA+PiAoMjAgLSBQQUdFX1NISUZUKSkgICAvKiBGSVhNRTogaXMgdGhpcyByaWdodD8gKi8KLQotLyoKLSAqIE1hY3JvIHRvIG1hcmsgYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgInVuY2FjaGVhYmxlIi4KLSAqLwotI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQlcCi0JKF9fcGdwcm90KHBncHJvdF92YWwoKHByb3QpKSB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpCi0KLS8qCi0gKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAotICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KLSAqLwotCi0vKgotICogTGV2ZWwgNCBhY2Nlc3MuCi0gKi8KLSNkZWZpbmUgcGdkX3BhZ2VfdmFkZHIocGdkKQkJCQkJCVwKLQkoKHVuc2lnbmVkIGxvbmcpX192YSgodW5zaWduZWQgbG9uZylwZ2RfdmFsKChwZ2QpKSAmIFBURV9QRk5fTUFTSykpCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCShwZm5fdG9fcGFnZShwZ2RfdmFsKChwZ2QpKSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKSAocGdkX3ZhbChwZ2QpICYgX1BBR0VfUFJFU0VOVCkKLXN0YXRpYyBpbmxpbmUgaW50IHBnZF9sYXJnZShwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0KLSNkZWZpbmUgbWtfa2VybmVsX3BnZChhZGRyZXNzKSBfX3BnZCgoYWRkcmVzcykgfCBfS0VSTlBHX1RBQkxFKQotCi0vKiBQVUQgLSBMZXZlbDMgYWNjZXNzICovCi0vKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCi0jZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkJCQkJCQlcCi0JKCh1bnNpZ25lZCBsb25nKV9fdmEocHVkX3ZhbCgocHVkKSkgJiBQSFlTSUNBTF9QQUdFX01BU0spKQotI2RlZmluZSBwdWRfcGFnZShwdWQpCShwZm5fdG9fcGFnZShwdWRfdmFsKChwdWQpKSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcHVkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpCi0jZGVmaW5lIHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKQkJCQkJXAotCSgocHVkX3QgKilwZ2RfcGFnZV92YWRkcigqKHBnZCkpICsgcHVkX2luZGV4KChhZGRyZXNzKSkpCi0jZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkgKHB1ZF92YWwoKHB1ZCkpICYgX1BBR0VfUFJFU0VOVCkKLQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xhcmdlKHB1ZF90IHB0ZSkKLXsKLQlyZXR1cm4gKHB1ZF92YWwocHRlKSAmIChfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKSkgPT0KLQkJKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpOwotfQotCi0vKiBQTUQgIC0gTGV2ZWwgMiBhY2Nlc3MgKi8KLSNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKSAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbCgocG1kKSkgJiBQVEVfUEZOX01BU0spKQotI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3ZhbCgocG1kKSkgPj4gUEFHRV9TSElGVCkpCi0KLSNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpCi0jZGVmaW5lIHBtZF9vZmZzZXQoZGlyLCBhZGRyZXNzKSAoKHBtZF90ICopcHVkX3BhZ2VfdmFkZHIoKihkaXIpKSArIFwKLQkJCQkgIHBtZF9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKCh4KSkpCi0jZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKCh4KSkgJiBfUEFHRV9QUkVTRU5UKQotI2RlZmluZSBwZm5fcG1kKG5yLCBwcm90KSAoX19wbWQoKChucikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKChwcm90KSkpKQotI2RlZmluZSBwbWRfcGZuKHgpICAoKHBtZF92YWwoKHgpKSAmIF9fUEhZU0lDQUxfTUFTSykgPj4gUEFHRV9TSElGVCkKLQotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZV92YWwoKHB0ZSkpICYgUEhZU0lDQUxfUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7IC5wdGUgPSAoKG9mZikgPDwgUEFHRV9TSElGVCkgfAlcCi0JCQkJCSAgICBfUEFHRV9GSUxFIH0pCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTIF9fUEhZU0lDQUxfTUFTS19TSElGVAotCi0vKiBQVEUgLSBMZXZlbCAxIGFjY2Vzcy4gKi8KLQotLyogcGFnZSwgcHJvdGVjdGlvbiAtPiBwdGUgKi8KLSNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbigocGFnZSkpLCAocGdwcm90KSkKLQotI2RlZmluZSBwdGVfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgKChwdGVfdCAqKSBwbWRfcGFnZV92YWRkcigqKGRpcikpICsgXAotCQkJCQkgcHRlX2luZGV4KChhZGRyZXNzKSkpCi0KLS8qIHg4Ni02NCBhbHdheXMgaGFzIGFsbCBwYWdlIHRhYmxlcyBtYXBwZWQuICovCi0jZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyZXNzKSkKLSNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyZXNzKSkKLSNkZWZpbmUgcHRlX3VubWFwKHB0ZSkgLyogTk9QICovCi0jZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSAvKiBOT1AgKi8KLQotI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKSBkbyB7IH0gd2hpbGUgKDApCi0KLWV4dGVybiBpbnQgZGlyZWN0X2dicGFnZXM7Ci0KLS8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KLSNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiAxKSAmIDB4M2YpCi0jZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDgpCi0jZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwgXAotCQkJCQkJCSAoKG9mZnNldCkgPDwgOCkgfSkKLSNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbCgocHRlKSkgfSkKLSNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7IC5wdGUgPSAoeCkudmFsIH0pCi0KLWV4dGVybiBpbnQga2Vybl9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1leHRlcm4gdm9pZCBjbGVhbnVwX2hpZ2htYXAodm9pZCk7Ci0KLSNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAotCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCi0KLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUFfVE9QRE9XTgotCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpICAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKSAgICAgIGRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBQQUdFX0FHUCAgICBQQUdFX0tFUk5FTF9OT0NBQ0hFCi0jZGVmaW5lIEhBVkVfUEFHRV9BR1AgMQotCi0vKiBmcy9wcm9jL2tjb3JlLmMgKi8KLSNkZWZpbmUJa2NfdmFkZHJfdG9fb2Zmc2V0KHYpICgodikgJiBfX1ZJUlRVQUxfTUFTSykKLSNkZWZpbmUJa2Nfb2Zmc2V0X3RvX3ZhZGRyKG8pCQkJCVwKLQkoKChvKSAmICgxVUwgPDwgKF9fVklSVFVBTF9NQVNLX1NISUZUIC0gMSkpKQlcCi0JID8gKChvKSB8IH5fX1ZJUlRVQUxfTUFTSykJCQlcCi0JIDogKG8pKQotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TQU1FCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUEdUQUJMRV82NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcG9sbC5oIGIvaW5jbHVkZS9hc20teDg2L3BvbGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4NTA5ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcG9sbC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wb3NpeF90eXBlc18zMi5oIGIvaW5jbHVkZS9hc20teDg2L3Bvc2l4X3R5cGVzXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwY2YyYmIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3Bvc2l4X3R5cGVzXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BPU0lYX1RZUEVTXzMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUE9TSVhfVFlQRVNfMzJfSAotCi0vKgotICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCi0gKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90Ci0gKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCi0gKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9tb2RlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7Ci10eXBlZGVmIGxvbmcJCV9fa2VybmVsX29mZl90OwotdHlwZWRlZiBpbnQJCV9fa2VybmVsX3BpZF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9pcGNfcGlkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKLXR5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwotdHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKLXR5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwotdHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKLXR5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKLXR5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwotdHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKLXR5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwotdHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKLQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfdWlkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9naWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2Rldl90OwotCi0jaWZkZWYgX19HTlVDX18KLXR5cGVkZWYgbG9uZyBsb25nCV9fa2VybmVsX2xvZmZfdDsKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JaW50CXZhbFsyXTsKLX0gX19rZXJuZWxfZnNpZF90OwotCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKQotCi0jdW5kZWYJX19GRF9TRVQKLSNkZWZpbmUgX19GRF9TRVQoZmQsZmRzZXRwKQkJCQkJXAotCWFzbSB2b2xhdGlsZSgiYnRzbCAlMSwlMCI6CQkJCVwKLQkJICAgICAiK20iICgqKF9fa2VybmVsX2ZkX3NldCAqKShmZHNldHApKQlcCi0JCSAgICAgOiAiciIgKChpbnQpKGZkKSkpCi0KLSN1bmRlZglfX0ZEX0NMUgotI2RlZmluZSBfX0ZEX0NMUihmZCxmZHNldHApCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCJidHJsICUxLCUwIjoJCQkJXAotCQkgICAgICIrbSIgKCooX19rZXJuZWxfZmRfc2V0ICopKGZkc2V0cCkpCVwKLQkJICAgICA6ICJyIiAoKGludCkgKGZkKSkpCi0KLSN1bmRlZglfX0ZEX0lTU0VUCi0jZGVmaW5lIF9fRkRfSVNTRVQoZmQsZmRzZXRwKQkJCQkJXAotCShfX2V4dGVuc2lvbl9fCQkJCQkJXAotCSAoewkJCQkJCQlcCi0JIHVuc2lnbmVkIGNoYXIgX19yZXN1bHQ7CQkJCVwKLQkgYXNtIHZvbGF0aWxlKCJidGwgJTEsJTIgOyBzZXRiICUwIgkJCVwKLQkJICAgICAgOiAiPXEiIChfX3Jlc3VsdCkJCQkJXAotCQkgICAgICA6ICJyIiAoKGludCkoZmQpKSwJCQlcCi0JCQkibSIgKCooX19rZXJuZWxfZmRfc2V0ICopKGZkc2V0cCkpKTsJXAotCSBfX3Jlc3VsdDsJCQkJCQlcCi19KSkKLQotI3VuZGVmCV9fRkRfWkVSTwotI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKQkJCQkJXAotZG8gewkJCQkJCQkJXAotCWludCBfX2QwLCBfX2QxOwkJCQkJCVwKLQlhc20gdm9sYXRpbGUoImNsZCA7IHJlcCA7IHN0b3NsIgkJCVwKLQkJICAgICA6ICI9bSIgKCooX19rZXJuZWxfZmRfc2V0ICopKGZkc2V0cCkpLAlcCi0JCSAgICAgICAiPSZjIiAoX19kMCksICI9JkQiIChfX2QxKQkJXAotCQkgICAgIDogImEiICgwKSwgIjEiIChfX0ZEU0VUX0xPTkdTKSwJCVwKLQkJICAgICAgICIyIiAoKF9fa2VybmVsX2ZkX3NldCAqKShmZHNldHApKQlcCi0JCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QT1NJWF9UWVBFU18zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcG9zaXhfdHlwZXNfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wb3NpeF90eXBlc182NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODhiNGU3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wb3NpeF90eXBlc182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUE9TSVhfVFlQRVNfNjRfSAotI2RlZmluZSBBU01fWDg2X19QT1NJWF9UWVBFU182NF9ICi0KLS8qCi0gKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KLSAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKLSAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KLSAqLwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9tb2RlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfbmxpbmtfdDsKLXR5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Ci10eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Ci10eXBlZGVmIGludAkJX19rZXJuZWxfaXBjX3BpZF90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9zaXplX3Q7Ci10eXBlZGVmIGxvbmcJCV9fa2VybmVsX3NzaXplX3Q7Ci10eXBlZGVmIGxvbmcJCV9fa2VybmVsX3B0cmRpZmZfdDsKLXR5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwotdHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKLXR5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKLXR5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwotdHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKLXR5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwotdHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Ci0KLSNpZmRlZiBfX0dOVUNfXwotdHlwZWRlZiBsb25nIGxvbmcJX19rZXJuZWxfbG9mZl90OwotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQJdmFsWzJdOwotfSBfX2tlcm5lbF9mc2lkX3Q7Ci0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7Ci10eXBlZGVmIF9fa2VybmVsX3VpZF90IF9fa2VybmVsX3VpZDMyX3Q7Ci10eXBlZGVmIF9fa2VybmVsX2dpZF90IF9fa2VybmVsX2dpZDMyX3Q7Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9vbGRfZGV2X3Q7Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSN1bmRlZiBfX0ZEX1NFVAotc3RhdGljIGlubGluZSB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQotewotCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOwotCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOwotCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gfD0gKDFVTDw8X3JlbSk7Ci19Ci0KLSN1bmRlZiBfX0ZEX0NMUgotc3RhdGljIGlubGluZSB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQotewotCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOwotCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOwotCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOwotfQotCi0jdW5kZWYgX19GRF9JU1NFVAotc3RhdGljIGlubGluZSBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2NvbnN0X18gX19rZXJuZWxfZmRfc2V0ICpwKQotewotCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOwotCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOwotCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKLX0KLQotLyoKLSAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZXMgKDggb3IgMzIgbG9uZ3MsCi0gKiBmb3IgMjU2IGFuZCAxMDI0LWJpdCBmZF9zZXRzIHJlc3BlY3RpdmVseSkKLSAqLwotI3VuZGVmIF9fRkRfWkVSTwotc3RhdGljIGlubGluZSB2b2lkIF9fRkRfWkVSTyhfX2tlcm5lbF9mZF9zZXQgKnApCi17Ci0JdW5zaWduZWQgbG9uZyAqdG1wID0gcC0+ZmRzX2JpdHM7Ci0JaW50IGk7Ci0KLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKLQkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7Ci0JCWNhc2UgMzI6Ci0JCQl0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKLQkJCXRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOwotCQkJdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7Ci0JCQl0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKLQkJCXRtcFsxNl0gPSAwOyB0bXBbMTddID0gMDsgdG1wWzE4XSA9IDA7IHRtcFsxOV0gPSAwOwotCQkJdG1wWzIwXSA9IDA7IHRtcFsyMV0gPSAwOyB0bXBbMjJdID0gMDsgdG1wWzIzXSA9IDA7Ci0JCQl0bXBbMjRdID0gMDsgdG1wWzI1XSA9IDA7IHRtcFsyNl0gPSAwOyB0bXBbMjddID0gMDsKLQkJCXRtcFsyOF0gPSAwOyB0bXBbMjldID0gMDsgdG1wWzMwXSA9IDA7IHRtcFszMV0gPSAwOwotCQkJcmV0dXJuOwotCQljYXNlIDE2OgotCQkJdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7Ci0JCQl0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKLQkJCXRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOwotCQkJdG1wWzEyXSA9IDA7IHRtcFsxM10gPSAwOyB0bXBbMTRdID0gMDsgdG1wWzE1XSA9IDA7Ci0JCQlyZXR1cm47Ci0JCWNhc2UgODoKLQkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOwotCQkJdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7Ci0JCQlyZXR1cm47Ci0JCWNhc2UgNDoKLQkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWkgPSBfX0ZEU0VUX0xPTkdTOwotCXdoaWxlIChpKSB7Ci0JCWktLTsKLQkJKnRtcCA9IDA7Ci0JCXRtcCsrOwotCX0KLX0KLQotI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BPU0lYX1RZUEVTXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wcmN0bC5oIGIvaW5jbHVkZS9hc20teDg2L3ByY3RsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YWUzNGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3ByY3RsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BSQ1RMX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUFJDVExfSAotCi0jZGVmaW5lIEFSQ0hfU0VUX0dTIDB4MTAwMQotI2RlZmluZSBBUkNIX1NFVF9GUyAweDEwMDIKLSNkZWZpbmUgQVJDSF9HRVRfRlMgMHgxMDAzCi0jZGVmaW5lIEFSQ0hfR0VUX0dTIDB4MTAwNAotCi0KLSNlbmRpZiAvKiBBU01fWDg2X19QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLWZsYWdzLmggYi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLWZsYWdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNWYwNzEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvci1mbGFncy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUFJPQ0VTU09SX0ZMQUdTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUFJPQ0VTU09SX0ZMQUdTX0gKLS8qIFZhcmlvdXMgZmxhZ3MgZGVmaW5lZDogY2FuIGJlIGluY2x1ZGVkIGZyb20gYXNzZW1ibGVyLiAqLwotCi0vKgotICogRUZMQUdTIGJpdHMKLSAqLwotI2RlZmluZSBYODZfRUZMQUdTX0NGCTB4MDAwMDAwMDEgLyogQ2FycnkgRmxhZyAqLwotI2RlZmluZSBYODZfRUZMQUdTX1BGCTB4MDAwMDAwMDQgLyogUGFyaXR5IEZsYWcgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19BRgkweDAwMDAwMDEwIC8qIEF1eGlsbGFyeSBjYXJyeSBGbGFnICovCi0jZGVmaW5lIFg4Nl9FRkxBR1NfWkYJMHgwMDAwMDA0MCAvKiBaZXJvIEZsYWcgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19TRgkweDAwMDAwMDgwIC8qIFNpZ24gRmxhZyAqLwotI2RlZmluZSBYODZfRUZMQUdTX1RGCTB4MDAwMDAxMDAgLyogVHJhcCBGbGFnICovCi0jZGVmaW5lIFg4Nl9FRkxBR1NfSUYJMHgwMDAwMDIwMCAvKiBJbnRlcnJ1cHQgRmxhZyAqLwotI2RlZmluZSBYODZfRUZMQUdTX0RGCTB4MDAwMDA0MDAgLyogRGlyZWN0aW9uIEZsYWcgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19PRgkweDAwMDAwODAwIC8qIE92ZXJmbG93IEZsYWcgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19JT1BMCTB4MDAwMDMwMDAgLyogSU9QTCBtYXNrICovCi0jZGVmaW5lIFg4Nl9FRkxBR1NfTlQJMHgwMDAwNDAwMCAvKiBOZXN0ZWQgVGFzayAqLwotI2RlZmluZSBYODZfRUZMQUdTX1JGCTB4MDAwMTAwMDAgLyogUmVzdW1lIEZsYWcgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19WTQkweDAwMDIwMDAwIC8qIFZpcnR1YWwgTW9kZSAqLwotI2RlZmluZSBYODZfRUZMQUdTX0FDCTB4MDAwNDAwMDAgLyogQWxpZ25tZW50IENoZWNrICovCi0jZGVmaW5lIFg4Nl9FRkxBR1NfVklGCTB4MDAwODAwMDAgLyogVmlydHVhbCBJbnRlcnJ1cHQgRmxhZyAqLwotI2RlZmluZSBYODZfRUZMQUdTX1ZJUAkweDAwMTAwMDAwIC8qIFZpcnR1YWwgSW50ZXJydXB0IFBlbmRpbmcgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19JRAkweDAwMjAwMDAwIC8qIENQVUlEIGRldGVjdGlvbiBmbGFnICovCi0KLS8qCi0gKiBCYXNpYyBDUFUgY29udHJvbCBpbiBDUjAKLSAqLwotI2RlZmluZSBYODZfQ1IwX1BFCTB4MDAwMDAwMDEgLyogUHJvdGVjdGlvbiBFbmFibGUgKi8KLSNkZWZpbmUgWDg2X0NSMF9NUAkweDAwMDAwMDAyIC8qIE1vbml0b3IgQ29wcm9jZXNzb3IgKi8KLSNkZWZpbmUgWDg2X0NSMF9FTQkweDAwMDAwMDA0IC8qIEVtdWxhdGlvbiAqLwotI2RlZmluZSBYODZfQ1IwX1RTCTB4MDAwMDAwMDggLyogVGFzayBTd2l0Y2hlZCAqLwotI2RlZmluZSBYODZfQ1IwX0VUCTB4MDAwMDAwMTAgLyogRXh0ZW5zaW9uIFR5cGUgKi8KLSNkZWZpbmUgWDg2X0NSMF9ORQkweDAwMDAwMDIwIC8qIE51bWVyaWMgRXJyb3IgKi8KLSNkZWZpbmUgWDg2X0NSMF9XUAkweDAwMDEwMDAwIC8qIFdyaXRlIFByb3RlY3QgKi8KLSNkZWZpbmUgWDg2X0NSMF9BTQkweDAwMDQwMDAwIC8qIEFsaWdubWVudCBNYXNrICovCi0jZGVmaW5lIFg4Nl9DUjBfTlcJMHgyMDAwMDAwMCAvKiBOb3QgV3JpdGUtdGhyb3VnaCAqLwotI2RlZmluZSBYODZfQ1IwX0NECTB4NDAwMDAwMDAgLyogQ2FjaGUgRGlzYWJsZSAqLwotI2RlZmluZSBYODZfQ1IwX1BHCTB4ODAwMDAwMDAgLyogUGFnaW5nICovCi0KLS8qCi0gKiBQYWdpbmcgb3B0aW9ucyBpbiBDUjMKLSAqLwotI2RlZmluZSBYODZfQ1IzX1BXVAkweDAwMDAwMDA4IC8qIFBhZ2UgV3JpdGUgVGhyb3VnaCAqLwotI2RlZmluZSBYODZfQ1IzX1BDRAkweDAwMDAwMDEwIC8qIFBhZ2UgQ2FjaGUgRGlzYWJsZSAqLwotCi0vKgotICogSW50ZWwgQ1BVIGZlYXR1cmVzIGluIENSNAotICovCi0jZGVmaW5lIFg4Nl9DUjRfVk1FCTB4MDAwMDAwMDEgLyogZW5hYmxlIHZtODYgZXh0ZW5zaW9ucyAqLwotI2RlZmluZSBYODZfQ1I0X1BWSQkweDAwMDAwMDAyIC8qIHZpcnR1YWwgaW50ZXJydXB0cyBmbGFnIGVuYWJsZSAqLwotI2RlZmluZSBYODZfQ1I0X1RTRAkweDAwMDAwMDA0IC8qIGRpc2FibGUgdGltZSBzdGFtcCBhdCBpcGwgMyAqLwotI2RlZmluZSBYODZfQ1I0X0RFCTB4MDAwMDAwMDggLyogZW5hYmxlIGRlYnVnZ2luZyBleHRlbnNpb25zICovCi0jZGVmaW5lIFg4Nl9DUjRfUFNFCTB4MDAwMDAwMTAgLyogZW5hYmxlIHBhZ2Ugc2l6ZSBleHRlbnNpb25zICovCi0jZGVmaW5lIFg4Nl9DUjRfUEFFCTB4MDAwMDAwMjAgLyogZW5hYmxlIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9ucyAqLwotI2RlZmluZSBYODZfQ1I0X01DRQkweDAwMDAwMDQwIC8qIE1hY2hpbmUgY2hlY2sgZW5hYmxlICovCi0jZGVmaW5lIFg4Nl9DUjRfUEdFCTB4MDAwMDAwODAgLyogZW5hYmxlIGdsb2JhbCBwYWdlcyAqLwotI2RlZmluZSBYODZfQ1I0X1BDRQkweDAwMDAwMTAwIC8qIGVuYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhdCBpcGwgMyAqLwotI2RlZmluZSBYODZfQ1I0X09TRlhTUgkweDAwMDAwMjAwIC8qIGVuYWJsZSBmYXN0IEZQVSBzYXZlIGFuZCByZXN0b3JlICovCi0jZGVmaW5lIFg4Nl9DUjRfT1NYTU1FWENQVCAweDAwMDAwNDAwIC8qIGVuYWJsZSB1bm1hc2tlZCBTU0UgZXhjZXB0aW9ucyAqLwotI2RlZmluZSBYODZfQ1I0X1ZNWEUJMHgwMDAwMjAwMCAvKiBlbmFibGUgVk1YIHZpcnR1YWxpemF0aW9uICovCi0jZGVmaW5lIFg4Nl9DUjRfT1NYU0FWRSAweDAwMDQwMDAwIC8qIGVuYWJsZSB4c2F2ZSBhbmQgeHJlc3RvcmUgKi8KLQotLyoKLSAqIHg4Ni02NCBUYXNrIFByaW9yaXR5IFJlZ2lzdGVyLCBDUjgKLSAqLwotI2RlZmluZSBYODZfQ1I4X1RQUgkweDAwMDAwMDBGIC8qIHRhc2sgcHJpb3JpdHkgcmVnaXN0ZXIgKi8KLQotLyoKLSAqIEFNRCBhbmQgVHJhbnNtZXRhIHVzZSBNU1JzIGZvciBjb25maWd1cmF0aW9uOyBzZWUgPGFzbS9tc3ItaW5kZXguaD4KLSAqLwotCi0vKgotICogICAgICBOU0MvQ3lyaXggQ1BVIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5kZXhlcwotICovCi0jZGVmaW5lIENYODZfUENSMAkweDIwCi0jZGVmaW5lIENYODZfR0NSCTB4YjgKLSNkZWZpbmUgQ1g4Nl9DQ1IwCTB4YzAKLSNkZWZpbmUgQ1g4Nl9DQ1IxCTB4YzEKLSNkZWZpbmUgQ1g4Nl9DQ1IyCTB4YzIKLSNkZWZpbmUgQ1g4Nl9DQ1IzCTB4YzMKLSNkZWZpbmUgQ1g4Nl9DQ1I0CTB4ZTgKLSNkZWZpbmUgQ1g4Nl9DQ1I1CTB4ZTkKLSNkZWZpbmUgQ1g4Nl9DQ1I2CTB4ZWEKLSNkZWZpbmUgQ1g4Nl9DQ1I3CTB4ZWIKLSNkZWZpbmUgQ1g4Nl9QQ1IxCTB4ZjAKLSNkZWZpbmUgQ1g4Nl9ESVIwCTB4ZmUKLSNkZWZpbmUgQ1g4Nl9ESVIxCTB4ZmYKLSNkZWZpbmUgQ1g4Nl9BUlJfQkFTRQkweGM0Ci0jZGVmaW5lIENYODZfUkNSX0JBU0UJMHhkYwotCi0jaWZkZWYgX19LRVJORUxfXwotI2lmZGVmIENPTkZJR19WTTg2Ci0jZGVmaW5lIFg4Nl9WTV9NQVNLCVg4Nl9FRkxBR1NfVk0KLSNlbHNlCi0jZGVmaW5lIFg4Nl9WTV9NQVNLCTAgLyogTm8gVk04NiBzdXBwb3J0ICovCi0jZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUFJPQ0VTU09SX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU3Y2JiMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MzYgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QUk9DRVNTT1JfSAotI2RlZmluZSBBU01fWDg2X19QUk9DRVNTT1JfSAotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwotc3RydWN0IHRhc2tfc3RydWN0Owotc3RydWN0IG1tX3N0cnVjdDsKLQotI2luY2x1ZGUgPGFzbS92bTg2Lmg+Ci0jaW5jbHVkZSA8YXNtL21hdGhfZW11Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS9kZXNjX2RlZnMuaD4KLSNpbmNsdWRlIDxhc20vbm9wcy5oPgotI2luY2x1ZGUgPGFzbS9kcy5oPgotCi0jaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0vKgotICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAotICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmN1cnJlbnRfdGV4dF9hZGRyKHZvaWQpCi17Ci0Jdm9pZCAqcGM7Ci0KLQlhc20gdm9sYXRpbGUoIm1vdiAkMWYsICUwOyAxOiI6Ij1yIiAocGMpKTsKLQotCXJldHVybiBwYzsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfVlNNUAotIyBkZWZpbmUgQVJDSF9NSU5fVEFTS0FMSUdOCQkoMSA8PCBJTlRFUk5PREVfQ0FDSEVfU0hJRlQpCi0jIGRlZmluZSBBUkNIX01JTl9NTVNUUlVDVF9BTElHTgkoMSA8PCBJTlRFUk5PREVfQ0FDSEVfU0hJRlQpCi0jZWxzZQotIyBkZWZpbmUgQVJDSF9NSU5fVEFTS0FMSUdOCQkxNgotIyBkZWZpbmUgQVJDSF9NSU5fTU1TVFJVQ1RfQUxJR04JMAotI2VuZGlmCi0KLS8qCi0gKiAgQ1BVIHR5cGUgYW5kIGhhcmR3YXJlIGJ1ZyBmbGFncy4gS2VwdCBzZXBhcmF0ZWx5IGZvciBlYWNoIENQVS4KLSAqICBNZW1iZXJzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSByZWZlcmVuY2VkIGluIGhlYWQuUywgc28gdGhpbmsgdHdpY2UKLSAqICBiZWZvcmUgdG91Y2hpbmcgdGhlbS4gW21qXQotICovCi0KLXN0cnVjdCBjcHVpbmZvX3g4NiB7Ci0JX191OAkJCXg4NjsJCS8qIENQVSBmYW1pbHkgKi8KLQlfX3U4CQkJeDg2X3ZlbmRvcjsJLyogQ1BVIHZlbmRvciAqLwotCV9fdTgJCQl4ODZfbW9kZWw7Ci0JX191OAkJCXg4Nl9tYXNrOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQljaGFyCQkJd3Bfd29ya3Nfb2s7CS8qIEl0IGRvZXNuJ3Qgb24gMzg2J3MgKi8KLQotCS8qIFByb2JsZW1zIG9uIHNvbWUgNDg2RHg0J3MgYW5kIG9sZCAzODYnczogKi8KLQljaGFyCQkJaGx0X3dvcmtzX29rOwotCWNoYXIJCQloYXJkX21hdGg7Ci0JY2hhcgkJCXJmdTsKLQljaGFyCQkJZmRpdl9idWc7Ci0JY2hhcgkJCWYwMGZfYnVnOwotCWNoYXIJCQljb21hX2J1ZzsKLQljaGFyCQkJcGFkMDsKLSNlbHNlCi0JLyogTnVtYmVyIG9mIDRLIHBhZ2VzIGluIERUTEIvSVRMQiBjb21iaW5lZChpbiBwYWdlcyk6ICovCi0JaW50CQkJIHg4Nl90bGJzaXplOwotCV9fdTgJCQl4ODZfdmlydF9iaXRzOwotCV9fdTgJCQl4ODZfcGh5c19iaXRzOwotI2VuZGlmCi0JLyogQ1BVSUQgcmV0dXJuZWQgY29yZSBpZCBiaXRzOiAqLwotCV9fdTgJCQl4ODZfY29yZWlkX2JpdHM7Ci0JLyogTWF4IGV4dGVuZGVkIENQVUlEIGZ1bmN0aW9uIHN1cHBvcnRlZDogKi8KLQlfX3UzMgkJCWV4dGVuZGVkX2NwdWlkX2xldmVsOwotCS8qIE1heGltdW0gc3VwcG9ydGVkIENQVUlEIGxldmVsLCAtMT1ubyBDUFVJRDogKi8KLQlpbnQJCQljcHVpZF9sZXZlbDsKLQlfX3UzMgkJCXg4Nl9jYXBhYmlsaXR5W05DQVBJTlRTXTsKLQljaGFyCQkJeDg2X3ZlbmRvcl9pZFsxNl07Ci0JY2hhcgkJCXg4Nl9tb2RlbF9pZFs2NF07Ci0JLyogaW4gS0IgLSB2YWxpZCBmb3IgQ1BVUyB3aGljaCBzdXBwb3J0IHRoaXMgY2FsbDogKi8KLQlpbnQJCQl4ODZfY2FjaGVfc2l6ZTsKLQlpbnQJCQl4ODZfY2FjaGVfYWxpZ25tZW50OwkvKiBJbiBieXRlcyAqLwotCWludAkJCXg4Nl9wb3dlcjsKLQl1bnNpZ25lZCBsb25nCQlsb29wc19wZXJfamlmZnk7Ci0jaWZkZWYgQ09ORklHX1NNUAotCS8qIGNwdXMgc2hhcmluZyB0aGUgbGFzdCBsZXZlbCBjYWNoZTogKi8KLQljcHVtYXNrX3QJCWxsY19zaGFyZWRfbWFwOwotI2VuZGlmCi0JLyogY3B1aWQgcmV0dXJuZWQgbWF4IGNvcmVzIHZhbHVlOiAqLwotCXUxNgkJCSB4ODZfbWF4X2NvcmVzOwotCXUxNgkJCWFwaWNpZDsKLQl1MTYJCQlpbml0aWFsX2FwaWNpZDsKLQl1MTYJCQl4ODZfY2xmbHVzaF9zaXplOwotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBudW1iZXIgb2YgY29yZXMgYXMgc2VlbiBieSB0aGUgT1M6ICovCi0JdTE2CQkJYm9vdGVkX2NvcmVzOwotCS8qIFBoeXNpY2FsIHByb2Nlc3NvciBpZDogKi8KLQl1MTYJCQlwaHlzX3Byb2NfaWQ7Ci0JLyogQ29yZSBpZDogKi8KLQl1MTYJCQljcHVfY29yZV9pZDsKLQkvKiBJbmRleCBpbnRvIHBlcl9jcHUgbGlzdDogKi8KLQl1MTYJCQljcHVfaW5kZXg7Ci0jZW5kaWYKLX0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpOwotCi0jZGVmaW5lIFg4Nl9WRU5ET1JfSU5URUwJMAotI2RlZmluZSBYODZfVkVORE9SX0NZUklYCTEKLSNkZWZpbmUgWDg2X1ZFTkRPUl9BTUQJCTIKLSNkZWZpbmUgWDg2X1ZFTkRPUl9VTUMJCTMKLSNkZWZpbmUgWDg2X1ZFTkRPUl9DRU5UQVVSCTUKLSNkZWZpbmUgWDg2X1ZFTkRPUl9UUkFOU01FVEEJNwotI2RlZmluZSBYODZfVkVORE9SX05TQwkJOAotI2RlZmluZSBYODZfVkVORE9SX05VTQkJOQotCi0jZGVmaW5lIFg4Nl9WRU5ET1JfVU5LTk9XTgkweGZmCi0KLS8qCi0gKiBjYXBhYmlsaXRpZXMgb2YgQ1BVcwotICovCi1leHRlcm4gc3RydWN0IGNwdWluZm9feDg2CWJvb3RfY3B1X2RhdGE7Ci1leHRlcm4gc3RydWN0IGNwdWluZm9feDg2CW5ld19jcHVfZGF0YTsKLQotZXh0ZXJuIHN0cnVjdCB0c3Nfc3RydWN0CWRvdWJsZWZhdWx0X3RzczsKLWV4dGVybiBfX3UzMgkJCWNsZWFyZWRfY3B1X2NhcHNbTkNBUElOVFNdOwotCi0jaWZkZWYgQ09ORklHX1NNUAotREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBjcHVpbmZvX3g4NiwgY3B1X2luZm8pOwotI2RlZmluZSBjcHVfZGF0YShjcHUpCQlwZXJfY3B1KGNwdV9pbmZvLCBjcHUpCi0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEJX19nZXRfY3B1X3ZhcihjcHVfaW5mbykKLSNlbHNlCi0jZGVmaW5lIGNwdV9kYXRhKGNwdSkJCWJvb3RfY3B1X2RhdGEKLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YQlib290X2NwdV9kYXRhCi0jZW5kaWYKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wOwotCi1zdGF0aWMgaW5saW5lIGludCBobHRfd29ya3MoaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JcmV0dXJuIGNwdV9kYXRhKGNwdSkuaGx0X3dvcmtzX29rOwotI2Vsc2UKLQlyZXR1cm4gMTsKLSNlbmRpZgotfQotCi0jZGVmaW5lIGNhY2hlX2xpbmVfc2l6ZSgpCShib290X2NwdV9kYXRhLng4Nl9jYWNoZV9hbGlnbm1lbnQpCi0KLWV4dGVybiB2b2lkIGNwdV9kZXRlY3Qoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKLQotZXh0ZXJuIHN0cnVjdCBwdF9yZWdzICppZGxlX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7Ci0KLWV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZCk7Ci1leHRlcm4gdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKLWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKLWV4dGVybiB2b2lkIGluaXRfc2NhdHRlcmVkX2NwdWlkX2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGluaXRfaW50ZWxfY2FjaGVpbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgbnVtX2NhY2hlX2xlYXZlczsKLQotZXh0ZXJuIHZvaWQgZGV0ZWN0X2V4dGVuZGVkX3RvcG9sb2d5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci1leHRlcm4gdm9pZCBkZXRlY3RfaHQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9jcHVpZCh1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCi0JCQkJdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGludCAqZWR4KQotewotCS8qIGVjeCBpcyBvZnRlbiBhbiBpbnB1dCBhcyB3ZWxsIGFzIGFuIG91dHB1dC4gKi8KLQlhc20oImNwdWlkIgotCSAgICA6ICI9YSIgKCplYXgpLAotCSAgICAgICI9YiIgKCplYngpLAotCSAgICAgICI9YyIgKCplY3gpLAotCSAgICAgICI9ZCIgKCplZHgpCi0JICAgIDogIjAiICgqZWF4KSwgIjIiICgqZWN4KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2NyMyhwZ2RfdCAqcGdkaXIpCi17Ci0Jd3JpdGVfY3IzKF9fcGEocGdkaXIpKTsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qIFRoaXMgaXMgdGhlIFRTUyBkZWZpbmVkIGJ5IHRoZSBoYXJkd2FyZS4gKi8KLXN0cnVjdCB4ODZfaHdfdHNzIHsKLQl1bnNpZ25lZCBzaG9ydAkJYmFja19saW5rLCBfX2JsaDsKLQl1bnNpZ25lZCBsb25nCQlzcDA7Ci0JdW5zaWduZWQgc2hvcnQJCXNzMCwgX19zczBoOwotCXVuc2lnbmVkIGxvbmcJCXNwMTsKLQkvKiBzczEgY2FjaGVzIE1TUl9JQTMyX1NZU0VOVEVSX0NTOiAqLwotCXVuc2lnbmVkIHNob3J0CQlzczEsIF9fc3MxaDsKLQl1bnNpZ25lZCBsb25nCQlzcDI7Ci0JdW5zaWduZWQgc2hvcnQJCXNzMiwgX19zczJoOwotCXVuc2lnbmVkIGxvbmcJCV9fY3IzOwotCXVuc2lnbmVkIGxvbmcJCWlwOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCXVuc2lnbmVkIGxvbmcJCWF4OwotCXVuc2lnbmVkIGxvbmcJCWN4OwotCXVuc2lnbmVkIGxvbmcJCWR4OwotCXVuc2lnbmVkIGxvbmcJCWJ4OwotCXVuc2lnbmVkIGxvbmcJCXNwOwotCXVuc2lnbmVkIGxvbmcJCWJwOwotCXVuc2lnbmVkIGxvbmcJCXNpOwotCXVuc2lnbmVkIGxvbmcJCWRpOwotCXVuc2lnbmVkIHNob3J0CQllcywgX19lc2g7Ci0JdW5zaWduZWQgc2hvcnQJCWNzLCBfX2NzaDsKLQl1bnNpZ25lZCBzaG9ydAkJc3MsIF9fc3NoOwotCXVuc2lnbmVkIHNob3J0CQlkcywgX19kc2g7Ci0JdW5zaWduZWQgc2hvcnQJCWZzLCBfX2ZzaDsKLQl1bnNpZ25lZCBzaG9ydAkJZ3MsIF9fZ3NoOwotCXVuc2lnbmVkIHNob3J0CQlsZHQsIF9fbGR0aDsKLQl1bnNpZ25lZCBzaG9ydAkJdHJhY2U7Ci0JdW5zaWduZWQgc2hvcnQJCWlvX2JpdG1hcF9iYXNlOwotCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotI2Vsc2UKLXN0cnVjdCB4ODZfaHdfdHNzIHsKLQl1MzIJCQlyZXNlcnZlZDE7Ci0JdTY0CQkJc3AwOwotCXU2NAkJCXNwMTsKLQl1NjQJCQlzcDI7Ci0JdTY0CQkJcmVzZXJ2ZWQyOwotCXU2NAkJCWlzdFs3XTsKLQl1MzIJCQlyZXNlcnZlZDM7Ci0JdTMyCQkJcmVzZXJ2ZWQ0OwotCXUxNgkJCXJlc2VydmVkNTsKLQl1MTYJCQlpb19iaXRtYXBfYmFzZTsKLQotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0jZW5kaWYKLQotLyoKLSAqIElPLWJpdG1hcCBzaXplczoKLSAqLwotI2RlZmluZSBJT19CSVRNQVBfQklUUwkJCTY1NTM2Ci0jZGVmaW5lIElPX0JJVE1BUF9CWVRFUwkJCShJT19CSVRNQVBfQklUUy84KQotI2RlZmluZSBJT19CSVRNQVBfTE9OR1MJCQkoSU9fQklUTUFQX0JZVEVTL3NpemVvZihsb25nKSkKLSNkZWZpbmUgSU9fQklUTUFQX09GRlNFVAkJb2Zmc2V0b2Yoc3RydWN0IHRzc19zdHJ1Y3QsIGlvX2JpdG1hcCkKLSNkZWZpbmUgSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUCTB4ODAwMAotI2RlZmluZSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVRfTEFaWQkweDkwMDAKLQotc3RydWN0IHRzc19zdHJ1Y3QgewotCS8qCi0JICogVGhlIGhhcmR3YXJlIHN0YXRlOgotCSAqLwotCXN0cnVjdCB4ODZfaHdfdHNzCXg4Nl90c3M7Ci0KLQkvKgotCSAqIFRoZSBleHRyYSAxIGlzIHRoZXJlIGJlY2F1c2UgdGhlIENQVSB3aWxsIGFjY2VzcyBhbgotCSAqIGFkZGl0aW9uYWwgYnl0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgSU8gcGVybWlzc2lvbgotCSAqIGJpdG1hcC4gVGhlIGV4dHJhIGJ5dGUgbXVzdCBiZSBhbGwgMSBiaXRzLCBhbmQgbXVzdAotCSAqIGJlIHdpdGhpbiB0aGUgbGltaXQuCi0JICovCi0JdW5zaWduZWQgbG9uZwkJaW9fYml0bWFwW0lPX0JJVE1BUF9MT05HUyArIDFdOwotCS8qCi0JICogQ2FjaGUgdGhlIGN1cnJlbnQgbWF4aW11bSBhbmQgdGhlIGxhc3QgdGFzayB0aGF0IHVzZWQgdGhlIGJpdG1hcDoKLQkgKi8KLQl1bnNpZ25lZCBsb25nCQlpb19iaXRtYXBfbWF4OwotCXN0cnVjdCB0aHJlYWRfc3RydWN0CSppb19iaXRtYXBfb3duZXI7Ci0KLQkvKgotCSAqIC4uIGFuZCB0aGVuIGFub3RoZXIgMHgxMDAgYnl0ZXMgZm9yIHRoZSBlbWVyZ2VuY3kga2VybmVsIHN0YWNrOgotCSAqLwotCXVuc2lnbmVkIGxvbmcJCXN0YWNrWzY0XTsKLQotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdHNzX3N0cnVjdCwgaW5pdF90c3MpOwotCi0vKgotICogU2F2ZSB0aGUgb3JpZ2luYWwgaXN0IHZhbHVlcyBmb3IgY2hlY2tpbmcgc3RhY2sgcG9pbnRlcnMgZHVyaW5nIGRlYnVnZ2luZwotICovCi1zdHJ1Y3Qgb3JpZ19pc3QgewotCXVuc2lnbmVkIGxvbmcJCWlzdFs3XTsKLX07Ci0KLSNkZWZpbmUJTVhDU1JfREVGQVVMVAkJMHgxZjgwCi0KLXN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCB7Ci0JdTMyCQkJY3dkOwkvKiBGUFUgQ29udHJvbCBXb3JkCQkqLwotCXUzMgkJCXN3ZDsJLyogRlBVIFN0YXR1cyBXb3JkCQkqLwotCXUzMgkJCXR3ZDsJLyogRlBVIFRhZyBXb3JkCQkJKi8KLQl1MzIJCQlmaXA7CS8qIEZQVSBJUCBPZmZzZXQJCSovCi0JdTMyCQkJZmNzOwkvKiBGUFUgSVAgU2VsZWN0b3IJCSovCi0JdTMyCQkJZm9vOwkvKiBGUFUgT3BlcmFuZCBQb2ludGVyIE9mZnNldAkqLwotCXUzMgkJCWZvczsJLyogRlBVIE9wZXJhbmQgUG9pbnRlciBTZWxlY3RvcgkqLwotCi0JLyogOCoxMCBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSA4MCBieXRlczoJCQkqLwotCXUzMgkJCXN0X3NwYWNlWzIwXTsKLQotCS8qIFNvZnR3YXJlIHN0YXR1cyBpbmZvcm1hdGlvbiBbbm90IHRvdWNoZWQgYnkgRlNBVkUgXToJCSovCi0JdTMyCQkJc3RhdHVzOwotfTsKLQotc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCB7Ci0JdTE2CQkJY3dkOyAvKiBDb250cm9sIFdvcmQJCQkqLwotCXUxNgkJCXN3ZDsgLyogU3RhdHVzIFdvcmQJCQkqLwotCXUxNgkJCXR3ZDsgLyogVGFnIFdvcmQJCQkqLwotCXUxNgkJCWZvcDsgLyogTGFzdCBJbnN0cnVjdGlvbiBPcGNvZGUJCSovCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTY0CXJpcDsgLyogSW5zdHJ1Y3Rpb24gUG9pbnRlcgkJKi8KLQkJCXU2NAlyZHA7IC8qIERhdGEgUG9pbnRlcgkJCSovCi0JCX07Ci0JCXN0cnVjdCB7Ci0JCQl1MzIJZmlwOyAvKiBGUFUgSVAgT2Zmc2V0CQkJKi8KLQkJCXUzMglmY3M7IC8qIEZQVSBJUCBTZWxlY3RvcgkJCSovCi0JCQl1MzIJZm9vOyAvKiBGUFUgT3BlcmFuZCBPZmZzZXQJCSovCi0JCQl1MzIJZm9zOyAvKiBGUFUgT3BlcmFuZCBTZWxlY3RvcgkJKi8KLQkJfTsKLQl9OwotCXUzMgkJCW14Y3NyOwkJLyogTVhDU1IgUmVnaXN0ZXIgU3RhdGUgKi8KLQl1MzIJCQlteGNzcl9tYXNrOwkvKiBNWENTUiBNYXNrCQkqLwotCi0JLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSAxMjggYnl0ZXM6CQkJKi8KLQl1MzIJCQlzdF9zcGFjZVszMl07Ci0KLQkvKiAxNioxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMjU2IGJ5dGVzOgkJCSovCi0JdTMyCQkJeG1tX3NwYWNlWzY0XTsKLQotCXUzMgkJCXBhZGRpbmdbMTJdOwotCi0JdW5pb24gewotCQl1MzIJCXBhZGRpbmcxWzEyXTsKLQkJdTMyCQlzd19yZXNlcnZlZFsxMl07Ci0JfTsKLQotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOwotCi1zdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCB7Ci0JdTMyCQkJY3dkOwotCXUzMgkJCXN3ZDsKLQl1MzIJCQl0d2Q7Ci0JdTMyCQkJZmlwOwotCXUzMgkJCWZjczsKLQl1MzIJCQlmb287Ci0JdTMyCQkJZm9zOwotCS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXM6ICovCi0JdTMyCQkJc3Rfc3BhY2VbMjBdOwotCXU4CQkJZnRvcDsKLQl1OAkJCWNoYW5nZWQ7Ci0JdTgJCQlsb29rYWhlYWQ7Ci0JdTgJCQlub191cGRhdGU7Ci0JdTgJCQlybTsKLQl1OAkJCWFsaW1pdDsKLQlzdHJ1Y3QgaW5mbwkJKmluZm87Ci0JdTMyCQkJZW50cnlfZWlwOwotfTsKLQotc3RydWN0IHhzYXZlX2hkcl9zdHJ1Y3QgewotCXU2NCB4c3RhdGVfYnY7Ci0JdTY0IHJlc2VydmVkMVsyXTsKLQl1NjQgcmVzZXJ2ZWQyWzVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IHhzYXZlX3N0cnVjdCB7Ci0Jc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBpMzg3OwotCXN0cnVjdCB4c2F2ZV9oZHJfc3RydWN0IHhzYXZlX2hkcjsKLQkvKiBuZXcgcHJvY2Vzc29yIHN0YXRlIGV4dGVuc2lvbnMgd2lsbCBnbyBoZXJlICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQgKDY0KSkpOwotCi11bmlvbiB0aHJlYWRfeHN0YXRlIHsKLQlzdHJ1Y3QgaTM4N19mc2F2ZV9zdHJ1Y3QJZnNhdmU7Ci0Jc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdAlmeHNhdmU7Ci0Jc3RydWN0IGkzODdfc29mdF9zdHJ1Y3QJCXNvZnQ7Ci0Jc3RydWN0IHhzYXZlX3N0cnVjdAkJeHNhdmU7Ci19OwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBvcmlnX2lzdCwgb3JpZ19pc3QpOwotI2VuZGlmCi0KLWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgeHN0YXRlX3NpemU7Ci1leHRlcm4gdm9pZCBmcmVlX3RocmVhZF94c3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICopOwotZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICp0YXNrX3hzdGF0ZV9jYWNoZXA7Ci1leHRlcm4gdm9pZCBpbml0X3NjYXR0ZXJlZF9jcHVpZF9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBpbml0X2ludGVsX2NhY2hlaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG51bV9jYWNoZV9sZWF2ZXM7Ci0KLXN0cnVjdCB0aHJlYWRfc3RydWN0IHsKLQkvKiBDYWNoZWQgVExTIGRlc2NyaXB0b3JzOiAqLwotCXN0cnVjdCBkZXNjX3N0cnVjdAl0bHNfYXJyYXlbR0RUX0VOVFJZX1RMU19FTlRSSUVTXTsKLQl1bnNpZ25lZCBsb25nCQlzcDA7Ci0JdW5zaWduZWQgbG9uZwkJc3A7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXVuc2lnbmVkIGxvbmcJCXN5c2VudGVyX2NzOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nCQl1c2Vyc3A7CS8qIENvcHkgZnJvbSBQREEgKi8KLQl1bnNpZ25lZCBzaG9ydAkJZXM7Ci0JdW5zaWduZWQgc2hvcnQJCWRzOwotCXVuc2lnbmVkIHNob3J0CQlmc2luZGV4OwotCXVuc2lnbmVkIHNob3J0CQlnc2luZGV4OwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZwkJaXA7Ci0JdW5zaWduZWQgbG9uZwkJZnM7Ci0JdW5zaWduZWQgbG9uZwkJZ3M7Ci0JLyogSGFyZHdhcmUgZGVidWdnaW5nIHJlZ2lzdGVyczogKi8KLQl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzA7Ci0JdW5zaWduZWQgbG9uZwkJZGVidWdyZWcxOwotCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnMjsKLQl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzM7Ci0JdW5zaWduZWQgbG9uZwkJZGVidWdyZWc2OwotCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnNzsKLQkvKiBGYXVsdCBpbmZvOiAqLwotCXVuc2lnbmVkIGxvbmcJCWNyMjsKLQl1bnNpZ25lZCBsb25nCQl0cmFwX25vOwotCXVuc2lnbmVkIGxvbmcJCWVycm9yX2NvZGU7Ci0JLyogZmxvYXRpbmcgcG9pbnQgYW5kIGV4dGVuZGVkIHByb2Nlc3NvciBzdGF0ZSAqLwotCXVuaW9uIHRocmVhZF94c3RhdGUJKnhzdGF0ZTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogVmlydHVhbCA4NiBtb2RlIGluZm8gKi8KLQlzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICp2bTg2X2luZm87Ci0JdW5zaWduZWQgbG9uZwkJc2NyZWVuX2JpdG1hcDsKLQl1bnNpZ25lZCBsb25nCQl2ODZmbGFnczsKLQl1bnNpZ25lZCBsb25nCQl2ODZtYXNrOwotCXVuc2lnbmVkIGxvbmcJCXNhdmVkX3NwMDsKLQl1bnNpZ25lZCBpbnQJCXNhdmVkX2ZzOwotCXVuc2lnbmVkIGludAkJc2F2ZWRfZ3M7Ci0jZW5kaWYKLQkvKiBJTyBwZXJtaXNzaW9uczogKi8KLQl1bnNpZ25lZCBsb25nCQkqaW9fYml0bWFwX3B0cjsKLQl1bnNpZ25lZCBsb25nCQlpb3BsOwotCS8qIE1heCBhbGxvd2VkIHBvcnQgaW4gdGhlIGJpdG1hcCwgaW4gYnl0ZXM6ICovCi0JdW5zaWduZWQJCWlvX2JpdG1hcF9tYXg7Ci0vKiBNU1JfSUEzMl9ERUJVR0NUTE1TUiB2YWx1ZSB0byBzd2l0Y2ggaW4gaWYgVElGX0RFQlVHQ1RMTVNSIGlzIHNldC4gICovCi0JdW5zaWduZWQgbG9uZwlkZWJ1Z2N0bG1zcjsKLSNpZmRlZiBDT05GSUdfWDg2X0RTCi0vKiBEZWJ1ZyBTdG9yZSBjb250ZXh0OyBzZWUgaW5jbHVkZS9hc20teDg2L2RzLmg7IGdvZXMgaW50byBNU1JfSUEzMl9EU19BUkVBICovCi0Jc3RydWN0IGRzX2NvbnRleHQJKmRzX2N0eDsKLSNlbmRpZiAvKiBDT05GSUdfWDg2X0RTICovCi0jaWZkZWYgQ09ORklHX1g4Nl9QVFJBQ0VfQlRTCi0vKiB0aGUgc2lnbmFsIHRvIHNlbmQgb24gYSBidHMgYnVmZmVyIG92ZXJmbG93ICovCi0JdW5zaWduZWQgaW50CWJ0c19vdmZsX3NpZ25hbDsKLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BUUkFDRV9CVFMgKi8KLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuYXRpdmVfZ2V0X2RlYnVncmVnKGludCByZWdubykKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CS8qIERhbW4geW91LCBnY2MhICovCi0KLQlzd2l0Y2ggKHJlZ25vKSB7Ci0JY2FzZSAwOgotCQlhc20oIm1vdiAlJWRiMCwgJTAiIDoiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlhc20oIm1vdiAlJWRiMSwgJTAiIDoiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhc20oIm1vdiAlJWRiMiwgJTAiIDoiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlhc20oIm1vdiAlJWRiMywgJTAiIDoiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQlhc20oIm1vdiAlJWRiNiwgJTAiIDoiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSA3OgotCQlhc20oIm1vdiAlJWRiNywgJTAiIDoiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X2RlYnVncmVnKGludCByZWdubywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKLXsKLQlzd2l0Y2ggKHJlZ25vKSB7Ci0JY2FzZSAwOgotCQlhc20oIm1vdiAlMCwgJSVkYjAiCTo6InIiICh2YWx1ZSkpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWFzbSgibW92ICUwLCAlJWRiMSIJOjoiciIgKHZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJYXNtKCJtb3YgJTAsICUlZGIyIgk6OiJyIiAodmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlhc20oIm1vdiAlMCwgJSVkYjMiCTo6InIiICh2YWx1ZSkpOwotCQlicmVhazsKLQljYXNlIDY6Ci0JCWFzbSgibW92ICUwLCAlJWRiNiIJOjoiciIgKHZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJYXNtKCJtb3YgJTAsICUlZGI3Igk6OiJyIiAodmFsdWUpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotfQotCi0vKgotICogU2V0IElPUEwgYml0cyBpbiBFRkxBR1MgZnJvbSBnaXZlbiBtYXNrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X2lvcGxfbWFzayh1bnNpZ25lZCBtYXNrKQotewotI2lmZGVmIENPTkZJR19YODZfMzIKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JYXNtIHZvbGF0aWxlICgicHVzaGZsOyIKLQkJICAgICAgInBvcGwgJTA7IgotCQkgICAgICAiYW5kbCAlMSwgJTA7IgotCQkgICAgICAib3JsICUyLCAlMDsiCi0JCSAgICAgICJwdXNobCAlMDsiCi0JCSAgICAgICJwb3BmbCIKLQkJICAgICAgOiAiPSZyIiAocmVnKQotCQkgICAgICA6ICJpIiAoflg4Nl9FRkxBR1NfSU9QTCksICJyIiAobWFzaykpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbmF0aXZlX2xvYWRfc3AwKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCi17Ci0JdHNzLT54ODZfdHNzLnNwMCA9IHRocmVhZC0+c3AwOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKiBPbmx5IGhhcHBlbnMgd2hlbiBTRVAgaXMgZW5hYmxlZCwgbm8gbmVlZCB0byB0ZXN0ICJTRVAiYXJhdGVseTogKi8KLQlpZiAodW5saWtlbHkodHNzLT54ODZfdHNzLnNzMSAhPSB0aHJlYWQtPnN5c2VudGVyX2NzKSkgewotCQl0c3MtPng4Nl90c3Muc3MxID0gdGhyZWFkLT5zeXNlbnRlcl9jczsKLQkJd3Jtc3IoTVNSX0lBMzJfU1lTRU5URVJfQ1MsIHRocmVhZC0+c3lzZW50ZXJfY3MsIDApOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3N3YXBncyh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlhc20gdm9sYXRpbGUoInN3YXBncyIgOjo6ICJtZW1vcnkiKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZQotI2RlZmluZSBfX2NwdWlkCQkJbmF0aXZlX2NwdWlkCi0jZGVmaW5lIHBhcmF2aXJ0X2VuYWJsZWQoKQkwCi0KLS8qCi0gKiBUaGVzZSBzcGVjaWFsIG1hY3JvcyBjYW4gYmUgdXNlZCB0byBnZXQgb3Igc2V0IGEgZGVidWdnaW5nIHJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgZ2V0X2RlYnVncmVnKHZhciwgcmVnaXN0ZXIpCQkJCVwKLQkodmFyKSA9IG5hdGl2ZV9nZXRfZGVidWdyZWcocmVnaXN0ZXIpCi0jZGVmaW5lIHNldF9kZWJ1Z3JlZyh2YWx1ZSwgcmVnaXN0ZXIpCQkJCVwKLQluYXRpdmVfc2V0X2RlYnVncmVnKHJlZ2lzdGVyLCB2YWx1ZSkKLQotc3RhdGljIGlubGluZSB2b2lkIGxvYWRfc3AwKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsCi0JCQkgICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKLXsKLQluYXRpdmVfbG9hZF9zcDAodHNzLCB0aHJlYWQpOwotfQotCi0jZGVmaW5lIHNldF9pb3BsX21hc2sgbmF0aXZlX3NldF9pb3BsX21hc2sKLSNlbmRpZiAvKiBDT05GSUdfUEFSQVZJUlQgKi8KLQotLyoKLSAqIFNhdmUgdGhlIGNyNCBmZWF0dXJlIHNldCB3ZSdyZSB1c2luZyAoaWUKLSAqIFBlbnRpdW0gNE1CIGVuYWJsZSBhbmQgUFBybyBHbG9iYWwgcGFnZQotICogZW5hYmxlKSwgc28gdGhhdCBhbnkgQ1BVJ3MgdGhhdCBib290IHVwCi0gKiBhZnRlciB1cyBjYW4gZ2V0IHRoZSBjb3JyZWN0IGZsYWdzLgotICovCi1leHRlcm4gdW5zaWduZWQgbG9uZwkJbW11X2NyNF9mZWF0dXJlczsKLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9pbl9jcjQodW5zaWduZWQgbG9uZyBtYXNrKQotewotCXVuc2lnbmVkIGNyNDsKLQotCW1tdV9jcjRfZmVhdHVyZXMgfD0gbWFzazsKLQljcjQgPSByZWFkX2NyNCgpOwotCWNyNCB8PSBtYXNrOwotCXdyaXRlX2NyNChjcjQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaW5fY3I0KHVuc2lnbmVkIGxvbmcgbWFzaykKLXsKLQl1bnNpZ25lZCBjcjQ7Ci0KLQltbXVfY3I0X2ZlYXR1cmVzICY9IH5tYXNrOwotCWNyNCA9IHJlYWRfY3I0KCk7Ci0JY3I0ICY9IH5tYXNrOwotCXdyaXRlX2NyNChjcjQpOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZwkJc2VnOwotfSBtbV9zZWdtZW50X3Q7Ci0KLQotLyoKLSAqIGNyZWF0ZSBhIGtlcm5lbCB0aHJlYWQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRhc2tsaXN0cwotICovCi1leHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0KLS8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLwotZXh0ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOwotCi0vKiBQcmVwYXJlIHRvIGNvcHkgdGhyZWFkIHN0YXRlIC0gdW5sYXp5IGFsbCBsYXp5IHN0YXRlICovCi1leHRlcm4gdm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwotCi11bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwotCi0vKgotICogR2VuZXJpYyBDUFVJRCBmdW5jdGlvbgotICogY2xlYXIgJWVjeCBzaW5jZSBzb21lIGNwdXMgKEN5cml4IE1JSSkgZG8gbm90IHNldCBvciBjbGVhciAlZWN4Ci0gKiByZXN1bHRpbmcgaW4gc3RhbGUgcmVnaXN0ZXIgY29udGVudHMgYmVpbmcgcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVpZCh1bnNpZ25lZCBpbnQgb3AsCi0JCQkgdW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAotCQkJIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCkKLXsKLQkqZWF4ID0gb3A7Ci0JKmVjeCA9IDA7Ci0JX19jcHVpZChlYXgsIGVieCwgZWN4LCBlZHgpOwotfQotCi0vKiBTb21lIENQVUlEIGNhbGxzIHdhbnQgJ2NvdW50JyB0byBiZSBwbGFjZWQgaW4gZWN4ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRfY291bnQodW5zaWduZWQgaW50IG9wLCBpbnQgY291bnQsCi0JCQkgICAgICAgdW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAotCQkJICAgICAgIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCkKLXsKLQkqZWF4ID0gb3A7Ci0JKmVjeCA9IGNvdW50OwotCV9fY3B1aWQoZWF4LCBlYngsIGVjeCwgZWR4KTsKLX0KLQotLyoKLSAqIENQVUlEIGZ1bmN0aW9ucyByZXR1cm5pbmcgYSBzaW5nbGUgZGF0dW0KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWF4KHVuc2lnbmVkIGludCBvcCkKLXsKLQl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwotCi0JY3B1aWQob3AsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCi0JcmV0dXJuIGVheDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCkKLXsKLQl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwotCi0JY3B1aWQob3AsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCi0JcmV0dXJuIGVieDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWN4KHVuc2lnbmVkIGludCBvcCkKLXsKLQl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwotCi0JY3B1aWQob3AsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCi0JcmV0dXJuIGVjeDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWR4KHVuc2lnbmVkIGludCBvcCkKLXsKLQl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwotCi0JY3B1aWQob3AsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCi0JcmV0dXJuIGVkeDsKLX0KLQotLyogUkVQIE5PUCAoUEFVU0UpIGlzIGEgZ29vZCB0aGluZyB0byBpbnNlcnQgaW50byBidXN5LXdhaXQgbG9vcHMuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVwX25vcCh2b2lkKQotewotCWFzbSB2b2xhdGlsZSgicmVwOyBub3AiIDo6OiAibWVtb3J5Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZCkKLXsKLQlyZXBfbm9wKCk7Ci19Ci0KLS8qIFN0b3Agc3BlY3VsYXRpdmUgZXhlY3V0aW9uOiAqLwotc3RhdGljIGlubGluZSB2b2lkIHN5bmNfY29yZSh2b2lkKQotewotCWludCB0bXA7Ci0KLQlhc20gdm9sYXRpbGUoImNwdWlkIiA6ICI9YSIgKHRtcCkgOiAiMCIgKDEpCi0JCSAgICAgOiAiZWJ4IiwgImVjeCIsICJlZHgiLCAibWVtb3J5Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX21vbml0b3IoY29uc3Qgdm9pZCAqZWF4LCB1bnNpZ25lZCBsb25nIGVjeCwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBlZHgpCi17Ci0JLyogIm1vbml0b3IgJWVheCwgJWVjeCwgJWVkeDsiICovCi0JYXNtIHZvbGF0aWxlKCIuYnl0ZSAweDBmLCAweDAxLCAweGM4OyIKLQkJICAgICA6OiAiYSIgKGVheCksICJjIiAoZWN4KSwgImQiKGVkeCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19td2FpdCh1bnNpZ25lZCBsb25nIGVheCwgdW5zaWduZWQgbG9uZyBlY3gpCi17Ci0JLyogIm13YWl0ICVlYXgsICVlY3g7IiAqLwotCWFzbSB2b2xhdGlsZSgiLmJ5dGUgMHgwZiwgMHgwMSwgMHhjOTsiCi0JCSAgICAgOjogImEiIChlYXgpLCAiYyIgKGVjeCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zdGlfbXdhaXQodW5zaWduZWQgbG9uZyBlYXgsIHVuc2lnbmVkIGxvbmcgZWN4KQotewotCXRyYWNlX2hhcmRpcnFzX29uKCk7Ci0JLyogIm13YWl0ICVlYXgsICVlY3g7IiAqLwotCWFzbSB2b2xhdGlsZSgic3RpOyAuYnl0ZSAweDBmLCAweDAxLCAweGM5OyIKLQkJICAgICA6OiAiYSIgKGVheCksICJjIiAoZWN4KSk7Ci19Ci0KLWV4dGVybiB2b2lkIG13YWl0X2lkbGVfd2l0aF9oaW50cyh1bnNpZ25lZCBsb25nIGVheCwgdW5zaWduZWQgbG9uZyBlY3gpOwotCi1leHRlcm4gdm9pZCBzZWxlY3RfaWRsZV9yb3V0aW5lKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nCQlib290X29wdGlvbl9pZGxlX292ZXJyaWRlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCWlkbGVfaGFsdDsKLWV4dGVybiB1bnNpZ25lZCBsb25nCQlpZGxlX25vbXdhaXQ7Ci0KLS8qCi0gKiBvbiBzeXN0ZW1zIHdpdGggY2FjaGVzLCBjYWNoZXMgbXVzdCBiZSBmbGFzaGVkIGFzIHRoZSBhYnNvbHV0ZQotICogbGFzdCBpbnN0cnVjdGlvbiBiZWZvcmUgZ29pbmcgaW50byBhIHN1c3BlbmRlZCBoYWx0LiAgT3RoZXJ3aXNlLAotICogZGlydHkgZGF0YSBjYW4gbGluZ2VyIGluIHRoZSBjYWNoZSBhbmQgYmVjb21lIHN0YWxlIG9uIHJlc3VtZSwKLSAqIGxlYWRpbmcgdG8gc3RyYW5nZSBlcnJvcnMuCi0gKgotICogcGVyZm9ybSBhIHZhcmlldHkgb2Ygb3BlcmF0aW9ucyB0byBndWFyYW50ZWUgdGhhdCB0aGUgY29tcGlsZXIKLSAqIHdpbGwgbm90IHJlb3JkZXIgaW5zdHJ1Y3Rpb25zLiAgd2JpbnZkIGl0c2VsZiBpcyBzZXJpYWxpemluZwotICogc28gdGhlIHByb2Nlc3NvciB3aWxsIG5vdCByZW9yZGVyLgotICoKLSAqIFN5c3RlbXMgd2l0aG91dCBjYWNoZSBjYW4ganVzdCBnbyBpbnRvIGhhbHQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YmludmRfaGFsdCh2b2lkKQotewotCW1iKCk7Ci0JLyogY2hlY2sgZm9yIGNsZmx1c2ggdG8gZGV0ZXJtaW5lIGlmIHdiaW52ZCBpcyBsZWdhbCAqLwotCWlmIChjcHVfaGFzX2NsZmx1c2gpCi0JCWFzbSB2b2xhdGlsZSgiY2xpOyB3YmludmQ7IDE6IGhsdDsgam1wIDFiIiA6IDogOiAibWVtb3J5Iik7Ci0JZWxzZQotCQl3aGlsZSAoMSkKLQkJCWhhbHQoKTsKLX0KLQotZXh0ZXJuIHZvaWQgZW5hYmxlX3NlcF9jcHUodm9pZCk7Ci1leHRlcm4gaW50IHN5c2VudGVyX3NldHVwKHZvaWQpOwotCi0vKiBEZWZpbmVkIGluIGhlYWQuUyAqLwotZXh0ZXJuIHN0cnVjdCBkZXNjX3B0cgkJZWFybHlfZ2R0X2Rlc2NyOwotCi1leHRlcm4gdm9pZCBjcHVfc2V0X2dkdChpbnQpOwotZXh0ZXJuIHZvaWQgc3dpdGNoX3RvX25ld19nZHQodm9pZCk7Ci1leHRlcm4gdm9pZCBjcHVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfZ2R0KGludCBjcHUpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2RlYnVnY3RsbXNyKHVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3IpCi17Ci0jaWZuZGVmIENPTkZJR19YODZfREVCVUdDVExNU1IKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCA2KQotCQlyZXR1cm47Ci0jZW5kaWYKLQl3cm1zcmwoTVNSX0lBMzJfREVCVUdDVExNU1IsIGRlYnVnY3RsbXNyKTsKLX0KLQotLyoKLSAqIGZyb20gc3lzdGVtIGRlc2NyaXB0aW9uIHRhYmxlIGluIEJJT1MuIE1vc3RseSBmb3IgTUNBIHVzZSwgYnV0Ci0gKiBvdGhlcnMgbWF5IGZpbmQgaXQgdXNlZnVsOgotICovCi1leHRlcm4gdW5zaWduZWQgaW50CQltYWNoaW5lX2lkOwotZXh0ZXJuIHVuc2lnbmVkIGludAkJbWFjaGluZV9zdWJtb2RlbF9pZDsKLWV4dGVybiB1bnNpZ25lZCBpbnQJCUJJT1NfcmV2aXNpb247Ci0KLS8qIEJvb3QgbG9hZGVyIHR5cGUgZnJvbSB0aGUgc2V0dXAgaGVhZGVyOiAqLwotZXh0ZXJuIGludAkJCWJvb3Rsb2FkZXJfdHlwZTsKLQotZXh0ZXJuIGNoYXIJCQlpZ25vcmVfZnB1X2lycTsKLQotI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVCAxCi0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVwotI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSAotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgQkFTRV9QUkVGRVRDSAkJQVNNX05PUDQKLSMgZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICi0jZWxzZQotIyBkZWZpbmUgQkFTRV9QUkVGRVRDSAkJInByZWZldGNodDAgKCUxKSIKLSNlbmRpZgotCi0vKgotICogUHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zIGZvciBQZW50aXVtIElJSSAoKykgYW5kIEFNRCBBdGhsb24gKCspCi0gKgotICogSXQncyBub3Qgd29ydGggdG8gY2FyZSBhYm91dCAzZG5vdyBwcmVmZXRjaGVzIGZvciB0aGUgSzYKLSAqIGJlY2F1c2UgdGhleSBhcmUgbWljcm9jb2RlZCB0aGVyZSBhbmQgdmVyeSBzbG93LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkKLXsKLQlhbHRlcm5hdGl2ZV9pbnB1dChCQVNFX1BSRUZFVENILAotCQkJICAicHJlZmV0Y2hudGEgKCUxKSIsCi0JCQkgIFg4Nl9GRUFUVVJFX1hNTSwKLQkJCSAgInIiICh4KSk7Ci19Ci0KLS8qCi0gKiAzZG5vdyBwcmVmZXRjaCB0byBnZXQgYW4gZXhjbHVzaXZlIGNhY2hlIGxpbmUuCi0gKiBVc2VmdWwgZm9yIHNwaW5sb2NrcyB0byBhdm9pZCBvbmUgc3RhdGUgdHJhbnNpdGlvbiBpbiB0aGUKLSAqIGNhY2hlIGNvaGVyZW5jeSBwcm90b2NvbDoKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICp4KQotewotCWFsdGVybmF0aXZlX2lucHV0KEJBU0VfUFJFRkVUQ0gsCi0JCQkgICJwcmVmZXRjaHcgKCUxKSIsCi0JCQkgIFg4Nl9GRUFUVVJFXzNETk9XLAotCQkJICAiciIgKHgpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9ja19wcmVmZXRjaChjb25zdCB2b2lkICp4KQotewotCXByZWZldGNodyh4KTsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qCi0gKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogM0dCIChkZWZhdWx0KS4KLSAqLwotI2RlZmluZSBUQVNLX1NJWkUJCVBBR0VfT0ZGU0VUCi0jZGVmaW5lIFNUQUNLX1RPUAkJVEFTS19TSVpFCi0jZGVmaW5lIFNUQUNLX1RPUF9NQVgJCVNUQUNLX1RPUAotCi0jZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCQkJCSAgXAotCS5zcDAJCQk9IHNpemVvZihpbml0X3N0YWNrKSArIChsb25nKSZpbml0X3N0YWNrLCBcCi0JLnZtODZfaW5mbwkJPSBOVUxMLAkJCQkJICBcCi0JLnN5c2VudGVyX2NzCQk9IF9fS0VSTkVMX0NTLAkJCQkgIFwKLQkuaW9fYml0bWFwX3B0cgkJPSBOVUxMLAkJCQkJICBcCi0JLmZzCQkJPSBfX0tFUk5FTF9QRVJDUFUsCQkJICBcCi19Ci0KLS8qCi0gKiBOb3RlIHRoYXQgdGhlIC5pb19iaXRtYXAgbWVtYmVyIG11c3QgYmUgZXh0cmEtYmlnLiBUaGlzIGlzIGJlY2F1c2UKLSAqIHRoZSBDUFUgd2lsbCBhY2Nlc3MgYW4gYWRkaXRpb25hbCBieXRlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBJTwotICogcGVybWlzc2lvbiBiaXRtYXAuIFRoZSBleHRyYSBieXRlIG11c3QgYmUgYWxsIDEgYml0cywgYW5kIG11c3QKLSAqIGJlIHdpdGhpbiB0aGUgbGltaXQuCi0gKi8KLSNkZWZpbmUgSU5JVF9UU1MgIHsJCQkJCQkJICBcCi0JLng4Nl90c3MgPSB7CQkJCQkJCSAgXAotCQkuc3AwCQk9IHNpemVvZihpbml0X3N0YWNrKSArIChsb25nKSZpbml0X3N0YWNrLCBcCi0JCS5zczAJCT0gX19LRVJORUxfRFMsCQkJCSAgXAotCQkuc3MxCQk9IF9fS0VSTkVMX0NTLAkJCQkgIFwKLQkJLmlvX2JpdG1hcF9iYXNlCT0gSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VULAkJICBcCi0JIH0sCQkJCQkJCQkgIFwKLQkuaW9fYml0bWFwCQk9IHsgWzAgLi4uIElPX0JJVE1BUF9MT05HU10gPSB+MCB9LAkgIFwKLX0KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLQotI2RlZmluZSBUSFJFQURfU0laRV9MT05HUyAgICAgIChUSFJFQURfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZykpCi0jZGVmaW5lIEtTVEtfVE9QKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHVuc2lnbmVkIGxvbmcgKl9fcHRyID0gKHVuc2lnbmVkIGxvbmcgKikoaW5mbyk7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgKHVuc2lnbmVkIGxvbmcpKCZfX3B0cltUSFJFQURfU0laRV9MT05HU10pOyAgICAgICAgICAgICAgICAgICAgIFwKLX0pCi0KLS8qCi0gKiBUaGUgYmVsb3cgLTggaXMgdG8gcmVzZXJ2ZSA4IGJ5dGVzIG9uIHRvcCBvZiB0aGUgcmluZzAgc3RhY2suCi0gKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBndWFyYW50ZWUgdGhhdCB0aGUgZW50aXJlICJzdHJ1Y3QgcHRfcmVncyIKLSAqIGlzIGFjY2Vzc2FibGUgZXZlbiBpZiB0aGUgQ1BVIGhhdmVuJ3Qgc3RvcmVkIHRoZSBTUy9FU1AgcmVnaXN0ZXJzCi0gKiBvbiB0aGUgc3RhY2sgKGludGVycnVwdCBnYXRlIGRvZXMgbm90IHNhdmUgdGhlc2UgcmVnaXN0ZXJzCi0gKiB3aGVuIHN3aXRjaGluZyB0byB0aGUgc2FtZSBwcml2IHJpbmcpLgotICogVGhlcmVmb3JlIGJld2FyZTogYWNjZXNzaW5nIHRoZSBzcy9lc3AgZmllbGRzIG9mIHRoZQotICogInN0cnVjdCBwdF9yZWdzIiBpcyBwb3NzaWJsZSwgYnV0IHRoZXkgbWF5IGNvbnRhaW4gdGhlCi0gKiBjb21wbGV0ZWx5IHdyb25nIHZhbHVlcy4KLSAqLwotI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqX19yZWdzX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIF9fcmVnc19fID0gKHN0cnVjdCBwdF9yZWdzICopKEtTVEtfVE9QKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSktOCk7IFwKLSAgICAgICBfX3JlZ3NfXyAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSkKLQotI2RlZmluZSBLU1RLX0VTUCh0YXNrKQkJKHRhc2tfcHRfcmVncyh0YXNrKS0+c3ApCi0KLSNlbHNlCi0vKgotICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemUuIDQ3Yml0cyBtaW51cyBvbmUgZ3VhcmQgcGFnZS4KLSAqLwotI2RlZmluZSBUQVNLX1NJWkU2NAkoKDFVTCA8PCA0NykgLSBQQUdFX1NJWkUpCi0KLS8qIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KLSAqIHNwYWNlIGR1cmluZyBtbWFwJ3MuCi0gKi8KLSNkZWZpbmUgSUEzMl9QQUdFX09GRlNFVAkoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9MSU1JVF8zR0IpID8gXAotCQkJCQkweGMwMDAwMDAwIDogMHhGRkZGZTAwMCkKLQotI2RlZmluZSBUQVNLX1NJWkUJCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IFwKLQkJCQkJSUEzMl9QQUdFX09GRlNFVCA6IFRBU0tfU0laRTY0KQotI2RlZmluZSBUQVNLX1NJWkVfT0YoY2hpbGQpCSgodGVzdF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9JQTMyKSkgPyBcCi0JCQkJCUlBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkU2NCkKLQotI2RlZmluZSBTVEFDS19UT1AJCVRBU0tfU0laRQotI2RlZmluZSBTVEFDS19UT1BfTUFYCQlUQVNLX1NJWkU2NAotCi0jZGVmaW5lIElOSVRfVEhSRUFEICB7IFwKLQkuc3AwID0gKHVuc2lnbmVkIGxvbmcpJmluaXRfc3RhY2sgKyBzaXplb2YoaW5pdF9zdGFjaykgXAotfQotCi0jZGVmaW5lIElOSVRfVFNTICB7IFwKLQkueDg2X3Rzcy5zcDAgPSAodW5zaWduZWQgbG9uZykmaW5pdF9zdGFjayArIHNpemVvZihpbml0X3N0YWNrKSBcCi19Ci0KLS8qCi0gKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KLSAqIFdoYXQgaXMgdGhpcyBnb29kIGZvcj8gaXQgd2lsbCBiZSBhbHdheXMgdGhlIHNjaGVkdWxlciBvciByZXRfZnJvbV9mb3JrLgotICovCi0jZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0KQkoKih1bnNpZ25lZCBsb25nICopKCh0KS0+dGhyZWFkLnNwIC0gOCkpCi0KLSNkZWZpbmUgdGFza19wdF9yZWdzKHRzaykJKChzdHJ1Y3QgcHRfcmVncyAqKSh0c2spLT50aHJlYWQuc3AwIC0gMSkKLSNkZWZpbmUgS1NUS19FU1AodHNrKQkJLTEgLyogc29ycnkuIGRvZXNuJ3Qgd29yayBmb3Igc3lzY2FsbC4gKi8KLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCi0KLWV4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfaXAsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5ld19zcCk7Ci0KLS8qCi0gKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCi0gKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgotICovCi0jZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoUEFHRV9BTElHTihUQVNLX1NJWkUgLyAzKSkKLQotI2RlZmluZSBLU1RLX0VJUCh0YXNrKQkJKHRhc2tfcHRfcmVncyh0YXNrKS0+aXApCi0KLS8qIEdldC9zZXQgYSBwcm9jZXNzJyBhYmlsaXR5IHRvIHVzZSB0aGUgdGltZXN0YW1wIGNvdW50ZXIgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgR0VUX1RTQ19DVEwoYWRyKQlnZXRfdHNjX21vZGUoKGFkcikpCi0jZGVmaW5lIFNFVF9UU0NfQ1RMKHZhbCkJc2V0X3RzY19tb2RlKCh2YWwpKQotCi1leHRlcm4gaW50IGdldF90c2NfbW9kZSh1bnNpZ25lZCBsb25nIGFkcik7Ci1leHRlcm4gaW50IHNldF90c2NfbW9kZSh1bnNpZ25lZCBpbnQgdmFsKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHJvdG8uaCBiL2luY2x1ZGUvYXNtLXg4Ni9wcm90by5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTg5ZThiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wcm90by5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QUk9UT19ICi0jZGVmaW5lIEFTTV9YODZfX1BST1RPX0gKLQotI2luY2x1ZGUgPGFzbS9sZHQuaD4KLQotLyogbWlzYyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcHJvdG90eXBlcyAqLwotCi1leHRlcm4gdm9pZCBlYXJseV9pZHRfaGFuZGxlcih2b2lkKTsKLQotZXh0ZXJuIHZvaWQgc3lzdGVtX2NhbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzeXNjYWxsX2luaXQodm9pZCk7Ci0KLWV4dGVybiB2b2lkIGlhMzJfc3lzY2FsbCh2b2lkKTsKLWV4dGVybiB2b2lkIGlhMzJfY3N0YXJfdGFyZ2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaWEzMl9zeXNlbnRlcl90YXJnZXQodm9pZCk7Ci0KLWV4dGVybiB2b2lkIHN5c2NhbGwzMl9jcHVfaW5pdCh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgY2hlY2tfZWZlcih2b2lkKTsKLQotI2lmZGVmIENPTkZJR19YODZfQklPU19SRUJPT1QKLWV4dGVybiBpbnQgcmVib290X2ZvcmNlOwotI2Vsc2UKLXN0YXRpYyBjb25zdCBpbnQgcmVib290X2ZvcmNlID0gMDsKLSNlbmRpZgotCi1sb25nIGRvX2FyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLQotI2RlZmluZSByb3VuZF91cCh4LCB5KSAoKCh4KSArICh5KSAtIDEpICYgfigoeSkgLSAxKSkKLSNkZWZpbmUgcm91bmRfZG93bih4LCB5KSAoKHgpICYgfigoeSkgLSAxKSkKLQotI2VuZGlmIC8qIEFTTV9YODZfX1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UtYWJpLmggYi9pbmNsdWRlL2FzbS14ODYvcHRyYWNlLWFiaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjk4Yjg4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UtYWJpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QVFJBQ0VfQUJJX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUFRSQUNFX0FCSV9ICi0KLSNpZmRlZiBfX2kzODZfXwotCi0jZGVmaW5lIEVCWCAwCi0jZGVmaW5lIEVDWCAxCi0jZGVmaW5lIEVEWCAyCi0jZGVmaW5lIEVTSSAzCi0jZGVmaW5lIEVESSA0Ci0jZGVmaW5lIEVCUCA1Ci0jZGVmaW5lIEVBWCA2Ci0jZGVmaW5lIERTIDcKLSNkZWZpbmUgRVMgOAotI2RlZmluZSBGUyA5Ci0jZGVmaW5lIEdTIDEwCi0jZGVmaW5lIE9SSUdfRUFYIDExCi0jZGVmaW5lIEVJUCAxMgotI2RlZmluZSBDUyAgMTMKLSNkZWZpbmUgRUZMIDE0Ci0jZGVmaW5lIFVFU1AgMTUKLSNkZWZpbmUgU1MgICAxNgotI2RlZmluZSBGUkFNRV9TSVpFIDE3Ci0KLSNlbHNlIC8qIF9faTM4Nl9fICovCi0KLSNpZiBkZWZpbmVkKF9fQVNTRU1CTFlfXykgfHwgZGVmaW5lZChfX0ZSQU1FX09GRlNFVFMpCi0jZGVmaW5lIFIxNSAwCi0jZGVmaW5lIFIxNCA4Ci0jZGVmaW5lIFIxMyAxNgotI2RlZmluZSBSMTIgMjQKLSNkZWZpbmUgUkJQIDMyCi0jZGVmaW5lIFJCWCA0MAotLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLwotI2RlZmluZSBSMTEgNDgKLSNkZWZpbmUgUjEwIDU2Ci0jZGVmaW5lIFI5IDY0Ci0jZGVmaW5lIFI4IDcyCi0jZGVmaW5lIFJBWCA4MAotI2RlZmluZSBSQ1ggODgKLSNkZWZpbmUgUkRYIDk2Ci0jZGVmaW5lIFJTSSAxMDQKLSNkZWZpbmUgUkRJIDExMgotI2RlZmluZSBPUklHX1JBWCAxMjAgICAgICAgLyogPSBFUlJPUiAqLwotLyogZW5kIG9mIGFyZ3VtZW50cyAqLwotLyogY3B1IGV4Y2VwdGlvbiBmcmFtZSBvciB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYXN0IHN5c2NhbGwuICovCi0jZGVmaW5lIFJJUCAxMjgKLSNkZWZpbmUgQ1MgMTM2Ci0jZGVmaW5lIEVGTEFHUyAxNDQKLSNkZWZpbmUgUlNQIDE1MgotI2RlZmluZSBTUyAxNjAKLSNkZWZpbmUgQVJHT0ZGU0VUIFIxMQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0vKiB0b3Agb2Ygc3RhY2sgcGFnZSAqLwotI2RlZmluZSBGUkFNRV9TSVpFIDE2OAotCi0jZW5kaWYgLyogIV9faTM4Nl9fICovCi0KLS8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLwotI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKLSNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAotI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1Ci0jZGVmaW5lIFBUUkFDRV9HRVRGUFhSRUdTICAgICAgICAgMTgKLSNkZWZpbmUgUFRSQUNFX1NFVEZQWFJFR1MgICAgICAgICAxOQotCi0jZGVmaW5lIFBUUkFDRV9PTERTRVRPUFRJT05TICAgICAgMjEKLQotLyogb25seSB1c2VmdWwgZm9yIGFjY2VzcyAzMmJpdCBwcm9ncmFtcyAvIGtlcm5lbHMgKi8KLSNkZWZpbmUgUFRSQUNFX0dFVF9USFJFQURfQVJFQSAgICAyNQotI2RlZmluZSBQVFJBQ0VfU0VUX1RIUkVBRF9BUkVBICAgIDI2Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi0jIGRlZmluZSBQVFJBQ0VfQVJDSF9QUkNUTAkgIDMwCi0jZW5kaWYKLQotI2RlZmluZSBQVFJBQ0VfU1lTRU1VCQkgIDMxCi0jZGVmaW5lIFBUUkFDRV9TWVNFTVVfU0lOR0xFU1RFUCAgMzIKLQotI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMzMJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwotCi0jaWZkZWYgQ09ORklHX1g4Nl9QVFJBQ0VfQlRTCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLS8qIGNvbmZpZ3VyYXRpb24vc3RhdHVzIHN0cnVjdHVyZSB1c2VkIGluIFBUUkFDRV9CVFNfQ09ORklHIGFuZAotICAgUFRSQUNFX0JUU19TVEFUVVMgY29tbWFuZHMuCi0qLwotc3RydWN0IHB0cmFjZV9idHNfY29uZmlnIHsKLQkvKiByZXF1ZXN0ZWQgb3IgYWN0dWFsIHNpemUgb2YgQlRTIGJ1ZmZlciBpbiBieXRlcyAqLwotCV9fdTMyIHNpemU7Ci0JLyogYml0bWFzayBvZiBiZWxvdyBmbGFncyAqLwotCV9fdTMyIGZsYWdzOwotCS8qIGJ1ZmZlciBvdmVyZmxvdyBzaWduYWwgKi8KLQlfX3UzMiBzaWduYWw7Ci0JLyogYWN0dWFsIHNpemUgb2YgYnRzX3N0cnVjdCBpbiBieXRlcyAqLwotCV9fdTMyIGJ0c19zaXplOwotfTsKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBQVFJBQ0VfQlRTX09fVFJBQ0UJMHgxIC8qIGJyYW5jaCB0cmFjZSAqLwotI2RlZmluZSBQVFJBQ0VfQlRTX09fU0NIRUQJMHgyIC8qIHNjaGVkdWxpbmcgZXZlbnRzIHcvIGppZmZpZXMgKi8KLSNkZWZpbmUgUFRSQUNFX0JUU19PX1NJR05BTCAgICAgMHg0IC8qIHNlbmQgU0lHPHNpZ25hbD4gb24gYnVmZmVyIG92ZXJmbG93Ci0JCQkJICAgICAgIGluc3RlYWQgb2Ygd3JhcHBpbmcgYXJvdW5kICovCi0jZGVmaW5lIFBUUkFDRV9CVFNfT19BTExPQwkweDggLyogKHJlKWFsbG9jYXRlIGJ1ZmZlciAqLwotCi0jZGVmaW5lIFBUUkFDRV9CVFNfQ09ORklHCTQwCi0vKiBDb25maWd1cmUgYnJhbmNoIHRyYWNlIHJlY29yZGluZy4KLSAgIEFERFIgcG9pbnRzIHRvIGEgc3RydWN0IHB0cmFjZV9idHNfY29uZmlnLgotICAgREFUQSBnaXZlcyB0aGUgc2l6ZSBvZiB0aGF0IGJ1ZmZlci4KLSAgIEEgbmV3IGJ1ZmZlciBpcyBhbGxvY2F0ZWQsIGlmIHJlcXVlc3RlZCBpbiB0aGUgZmxhZ3MuCi0gICBBbiBvdmVyZmxvdyBzaWduYWwgbWF5IG9ubHkgYmUgcmVxdWVzdGVkIGZvciBuZXcgYnVmZmVycy4KLSAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgotKi8KLSNkZWZpbmUgUFRSQUNFX0JUU19TVEFUVVMJNDEKLS8qIFJldHVybiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGluIGEgc3RydWN0IHB0cmFjZV9idHNfY29uZmlnCi0gICBwb2ludGVkIHRvIGJ5IEFERFI7IERBVEEgZ2l2ZXMgdGhlIHNpemUgb2YgdGhhdCBidWZmZXIuCi0gICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KLSovCi0jZGVmaW5lIFBUUkFDRV9CVFNfU0laRQkJNDIKLS8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBCVFMgcmVjb3JkcyBmb3IgZHJhaW5pbmcuCi0gICBEQVRBIGFuZCBBRERSIGFyZSBpZ25vcmVkLgotKi8KLSNkZWZpbmUgUFRSQUNFX0JUU19HRVQJCTQzCi0vKiBHZXQgYSBzaW5nbGUgQlRTIHJlY29yZC4KLSAgIERBVEEgZGVmaW5lcyB0aGUgaW5kZXggaW50byB0aGUgQlRTIGFycmF5LCB3aGVyZSAwIGlzIHRoZSBuZXdlc3QKLSAgIGVudHJ5LCBhbmQgaGlnaGVyIGluZGljZXMgcmVmZXIgdG8gb2xkZXIgZW50cmllcy4KLSAgIEFERFIgaXMgcG9pbnRpbmcgdG8gc3RydWN0IGJ0c19zdHJ1Y3QgKHNlZSBhc20vZHMuaCkuCi0qLwotI2RlZmluZSBQVFJBQ0VfQlRTX0NMRUFSCTQ0Ci0vKiBDbGVhciB0aGUgQlRTIGJ1ZmZlci4KLSAgIERBVEEgYW5kIEFERFIgYXJlIGlnbm9yZWQuCi0qLwotI2RlZmluZSBQVFJBQ0VfQlRTX0RSQUlOCTQ1Ci0vKiBSZWFkIGFsbCBhdmFpbGFibGUgQlRTIHJlY29yZHMgYW5kIGNsZWFyIHRoZSBidWZmZXIuCi0gICBBRERSIHBvaW50cyB0byBhbiBhcnJheSBvZiBzdHJ1Y3QgYnRzX3N0cnVjdC4KLSAgIERBVEEgZ2l2ZXMgdGhlIHNpemUgb2YgdGhhdCBidWZmZXIuCi0gICBCVFMgcmVjb3JkcyBhcmUgcmVhZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCi0gICBSZXR1cm5zIG51bWJlciBvZiBCVFMgcmVjb3JkcyBkcmFpbmVkLgotKi8KLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BUUkFDRV9CVFMgKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BUUkFDRV9BQklfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20teDg2L3B0cmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjAyNTUyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4MCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BUUkFDRV9ICi0jZGVmaW5lIEFTTV9YODZfX1BUUkFDRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBGb3IgX191c2VyICovCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS1hYmkuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8YXNtL2RzLmg+CQkvKiB0aGUgRFMgQlRTIHN0cnVjdCBpcyB1c2VkIGZvciBwdHJhY2UgdG9vICovCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNlbmRpZgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaWZkZWYgX19pMzg2X18KLS8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCi0gICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4gKi8KLQotI2lmbmRlZiBfX0tFUk5FTF9fCi0KLXN0cnVjdCBwdF9yZWdzIHsKLQlsb25nIGVieDsKLQlsb25nIGVjeDsKLQlsb25nIGVkeDsKLQlsb25nIGVzaTsKLQlsb25nIGVkaTsKLQlsb25nIGVicDsKLQlsb25nIGVheDsKLQlpbnQgIHhkczsKLQlpbnQgIHhlczsKLQlpbnQgIHhmczsKLQkvKiBpbnQgIGdzOyAqLwotCWxvbmcgb3JpZ19lYXg7Ci0JbG9uZyBlaXA7Ci0JaW50ICB4Y3M7Ci0JbG9uZyBlZmxhZ3M7Ci0JbG9uZyBlc3A7Ci0JaW50ICB4c3M7Ci19OwotCi0jZWxzZSAvKiBfX0tFUk5FTF9fICovCi0KLXN0cnVjdCBwdF9yZWdzIHsKLQl1bnNpZ25lZCBsb25nIGJ4OwotCXVuc2lnbmVkIGxvbmcgY3g7Ci0JdW5zaWduZWQgbG9uZyBkeDsKLQl1bnNpZ25lZCBsb25nIHNpOwotCXVuc2lnbmVkIGxvbmcgZGk7Ci0JdW5zaWduZWQgbG9uZyBicDsKLQl1bnNpZ25lZCBsb25nIGF4OwotCXVuc2lnbmVkIGxvbmcgZHM7Ci0JdW5zaWduZWQgbG9uZyBlczsKLQl1bnNpZ25lZCBsb25nIGZzOwotCS8qIGludCAgZ3M7ICovCi0JdW5zaWduZWQgbG9uZyBvcmlnX2F4OwotCXVuc2lnbmVkIGxvbmcgaXA7Ci0JdW5zaWduZWQgbG9uZyBjczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgc3A7Ci0JdW5zaWduZWQgbG9uZyBzczsKLX07Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbHNlIC8qIF9faTM4Nl9fICovCi0KLSNpZm5kZWYgX19LRVJORUxfXwotCi1zdHJ1Y3QgcHRfcmVncyB7Ci0JdW5zaWduZWQgbG9uZyByMTU7Ci0JdW5zaWduZWQgbG9uZyByMTQ7Ci0JdW5zaWduZWQgbG9uZyByMTM7Ci0JdW5zaWduZWQgbG9uZyByMTI7Ci0JdW5zaWduZWQgbG9uZyByYnA7Ci0JdW5zaWduZWQgbG9uZyByYng7Ci0vKiBhcmd1bWVudHM6IG5vbiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLwotCXVuc2lnbmVkIGxvbmcgcjExOwotCXVuc2lnbmVkIGxvbmcgcjEwOwotCXVuc2lnbmVkIGxvbmcgcjk7Ci0JdW5zaWduZWQgbG9uZyByODsKLQl1bnNpZ25lZCBsb25nIHJheDsKLQl1bnNpZ25lZCBsb25nIHJjeDsKLQl1bnNpZ25lZCBsb25nIHJkeDsKLQl1bnNpZ25lZCBsb25nIHJzaTsKLQl1bnNpZ25lZCBsb25nIHJkaTsKLQl1bnNpZ25lZCBsb25nIG9yaWdfcmF4OwotLyogZW5kIG9mIGFyZ3VtZW50cyAqLwotLyogY3B1IGV4Y2VwdGlvbiBmcmFtZSBvciB1bmRlZmluZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJpcDsKLQl1bnNpZ25lZCBsb25nIGNzOwotCXVuc2lnbmVkIGxvbmcgZWZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcnNwOwotCXVuc2lnbmVkIGxvbmcgc3M7Ci0vKiB0b3Agb2Ygc3RhY2sgcGFnZSAqLwotfTsKLQotI2Vsc2UgLyogX19LRVJORUxfXyAqLwotCi1zdHJ1Y3QgcHRfcmVncyB7Ci0JdW5zaWduZWQgbG9uZyByMTU7Ci0JdW5zaWduZWQgbG9uZyByMTQ7Ci0JdW5zaWduZWQgbG9uZyByMTM7Ci0JdW5zaWduZWQgbG9uZyByMTI7Ci0JdW5zaWduZWQgbG9uZyBicDsKLQl1bnNpZ25lZCBsb25nIGJ4OwotLyogYXJndW1lbnRzOiBub24gaW50ZXJydXB0cy9ub24gdHJhY2luZyBzeXNjYWxscyBvbmx5IHNhdmUgdXB0byBoZXJlKi8KLQl1bnNpZ25lZCBsb25nIHIxMTsKLQl1bnNpZ25lZCBsb25nIHIxMDsKLQl1bnNpZ25lZCBsb25nIHI5OwotCXVuc2lnbmVkIGxvbmcgcjg7Ci0JdW5zaWduZWQgbG9uZyBheDsKLQl1bnNpZ25lZCBsb25nIGN4OwotCXVuc2lnbmVkIGxvbmcgZHg7Ci0JdW5zaWduZWQgbG9uZyBzaTsKLQl1bnNpZ25lZCBsb25nIGRpOwotCXVuc2lnbmVkIGxvbmcgb3JpZ19heDsKLS8qIGVuZCBvZiBhcmd1bWVudHMgKi8KLS8qIGNwdSBleGNlcHRpb24gZnJhbWUgb3IgdW5kZWZpbmVkICovCi0JdW5zaWduZWQgbG9uZyBpcDsKLQl1bnNpZ25lZCBsb25nIGNzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzcDsKLQl1bnNpZ25lZCBsb25nIHNzOwotLyogdG9wIG9mIHN0YWNrIHBhZ2UgKi8KLX07Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogIV9faTM4Nl9fICovCi0KLQotI2lmZGVmIENPTkZJR19YODZfUFRSQUNFX0JUUwotLyogYSBicmFuY2ggdHJhY2UgcmVjb3JkIGVudHJ5Ci0gKgotICogSW4gb3JkZXIgdG8gdW5pZnkgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHZhcmlvdXMgcHJvY2Vzc29yIHZlcnNpb25zLAotICogd2UgdXNlIHRoZSBiZWxvdyBkYXRhIHN0cnVjdHVyZSBmb3IgYWxsIHByb2Nlc3NvcnMuCi0gKi8KLWVudW0gYnRzX3F1YWxpZmllciB7Ci0JQlRTX0lOVkFMSUQgPSAwLAotCUJUU19CUkFOQ0gsCi0JQlRTX1RBU0tfQVJSSVZFUywKLQlCVFNfVEFTS19ERVBBUlRTCi19OwotCi1zdHJ1Y3QgYnRzX3N0cnVjdCB7Ci0JX191NjQgcXVhbGlmaWVyOwotCXVuaW9uIHsKLQkJLyogQlRTX0JSQU5DSCAqLwotCQlzdHJ1Y3QgewotCQkJX191NjQgZnJvbV9pcDsKLQkJCV9fdTY0IHRvX2lwOwotCQl9IGxicjsKLQkJLyogQlRTX1RBU0tfQVJSSVZFUyBvcgotCQkgICBCVFNfVEFTS19ERVBBUlRTICovCi0JCV9fdTY0IGppZmZpZXM7Ci0JfSB2YXJpYW50OwotfTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BUUkFDRV9CVFMgKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotc3RydWN0IGNwdWluZm9feDg2Owotc3RydWN0IHRhc2tfc3RydWN0OwotCi0jaWZkZWYgQ09ORklHX1g4Nl9QVFJBQ0VfQlRTCi1leHRlcm4gdm9pZCBfX2NwdWluaXQgcHRyYWNlX2J0c19pbml0X2ludGVsKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKLWV4dGVybiB2b2lkIHB0cmFjZV9idHNfdGFrZV90aW1lc3RhbXAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVudW0gYnRzX3F1YWxpZmllcik7Ci0jZWxzZQotI2RlZmluZSBwdHJhY2VfYnRzX2luaXRfaW50ZWwoY29uZmlnKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BUUkFDRV9CVFMgKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nCi1jb252ZXJ0X2lwX3RvX2xpbmVhcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gdm9pZCBzZW5kX3NpZ3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJIGludCBlcnJvcl9jb2RlLCBpbnQgc2lfY29kZSk7Ci12b2lkIHNpZ25hbF9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCBfX3VzZXIgKmZyYW1lLCBjaGFyICp3aGVyZSk7Ci0KLWV4dGVybiBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKik7Ci1leHRlcm4gdm9pZCBzeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICopOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVnc19yZXR1cm5fdmFsdWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIHJlZ3MtPmF4OwotfQotCi0vKgotICogdXNlcl9tb2RlX3ZtKHJlZ3MpIGRldGVybWluZXMgd2hldGhlciBhIHJlZ2lzdGVyIHNldCBjYW1lIGZyb20gdXNlciBtb2RlLgotICogVGhpcyBpcyB0cnVlIGlmIFY4MDg2IG1vZGUgd2FzIGVuYWJsZWQgT1IgaWYgdGhlIHJlZ2lzdGVyIHNldCB3YXMgZnJvbQotICogcHJvdGVjdGVkIG1vZGUgd2l0aCBSUEwtMyBDUyB2YWx1ZS4gIFRoaXMgdHJpY2t5IHRlc3QgY2hlY2tzIHRoYXQgd2l0aAotICogb25lIGNvbXBhcmlzb24uICBNYW55IHBsYWNlcyBpbiB0aGUga2VybmVsIGNhbiBieXBhc3MgdGhpcyBmdWxsIGNoZWNrCi0gKiBpZiB0aGV5IGhhdmUgYWxyZWFkeSBydWxlZCBvdXQgVjgwODYgbW9kZSwgc28gdXNlcl9tb2RlKHJlZ3MpIGNhbiBiZSB1c2VkLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2VyX21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXJldHVybiAocmVncy0+Y3MgJiBTRUdNRU5UX1JQTF9NQVNLKSA9PSBVU0VSX1JQTDsKLSNlbHNlCi0JcmV0dXJuICEhKHJlZ3MtPmNzICYgMyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdXNlcl9tb2RlX3ZtKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotI2lmZGVmIENPTkZJR19YODZfMzIKLQlyZXR1cm4gKChyZWdzLT5jcyAmIFNFR01FTlRfUlBMX01BU0spIHwgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spKSA+PQotCQlVU0VSX1JQTDsKLSNlbHNlCi0JcmV0dXJuIHVzZXJfbW9kZShyZWdzKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGludCB2ODA4Nl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotI2lmZGVmIENPTkZJR19YODZfMzIKLQlyZXR1cm4gKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spOwotI2Vsc2UKLQlyZXR1cm4gMDsJLyogTm8gVjg2IG1vZGUgc3VwcG9ydCBpbiBsb25nIG1vZGUgKi8KLSNlbmRpZgotfQotCi0vKgotICogWDg2XzMyIENQVXMgZG9uJ3Qgc2F2ZSBzcyBhbmQgZXNwIGlmIHRoZSBDUFUgaXMgYWxyZWFkeSBpbiBrZXJuZWwgbW9kZQotICogd2hlbiBpdCB0cmFwcy4gIFNvIHJlZ3Mgd2lsbCBiZSB0aGUgY3VycmVudCBzcC4KLSAqCi0gKiBUaGlzIGlzIHZhbGlkIG9ubHkgZm9yIGtlcm5lbCBtb2RlIHRyYXBzLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga2VybmVsX3RyYXBfc3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXJldHVybiAodW5zaWduZWQgbG9uZylyZWdzOwotI2Vsc2UKLQlyZXR1cm4gcmVncy0+c3A7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGluc3RydWN0aW9uX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIHJlZ3MtPmlwOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnJhbWVfcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gcmVncy0+YnA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1c2VyX3N0YWNrX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIHJlZ3MtPnNwOwotfQotCi0vKgotICogVGhlc2UgYXJlIGRlZmluZWQgYXMgcGVyIGxpbnV4L3B0cmFjZS5oLCB3aGljaCBzZWUuCi0gKi8KLSNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKQkoMSkKLWV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci0KLWV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX2Jsb2NrX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwotI2lmZGVmIENPTkZJR19YODZfREVCVUdDVExNU1IKLSNkZWZpbmUgYXJjaF9oYXNfYmxvY2tfc3RlcCgpCSgxKQotI2Vsc2UKLSNkZWZpbmUgYXJjaF9oYXNfYmxvY2tfc3RlcCgpCShib290X2NwdV9kYXRhLng4NiA+PSA2KQotI2VuZGlmCi0KLXN0cnVjdCB1c2VyX2Rlc2M7Ci1leHRlcm4gaW50IGRvX2dldF90aHJlYWRfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpZHgsCi0JCQkgICAgICBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqaW5mbyk7Ci1leHRlcm4gaW50IGRvX3NldF90aHJlYWRfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpZHgsCi0JCQkgICAgICBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqaW5mbywgaW50IGNhbl9hbGxvY2F0ZSk7Ci0KLSNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19QVFJBQ0UKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHZjbG9jay1hYmkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLWFiaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGIzYjRlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLWFiaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19QVkNMT0NLX0FCSV9ICi0jZGVmaW5lIEFTTV9YODZfX1BWQ0xPQ0tfQUJJX0gKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qCi0gKiBUaGVzZSBzdHJ1Y3RzIE1VU1QgTk9UIGJlIGNoYW5nZWQuCi0gKiBUaGV5IGFyZSB0aGUgQUJJIGJldHdlZW4gaHlwZXJ2aXNvciBhbmQgZ3Vlc3QgT1MuCi0gKiBCb3RoIFhlbiBhbmQgS1ZNIGFyZSB1c2luZyB0aGlzLgotICoKLSAqIHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaG9sZHMgdGhlIHN5c3RlbSB0aW1lIGFuZCB0aGUgdHNjIHRpbWVzdGFtcAotICogb2YgdGhlIGxhc3QgdXBkYXRlLiBTbyB0aGUgZ3Vlc3QgY2FuIHVzZSB0aGUgdHNjIGRlbHRhIHRvIGdldCBhCi0gKiBtb3JlIHByZWNpc2Ugc3lzdGVtIHRpbWUuICBUaGVyZSBpcyBvbmUgcGVyIHZpcnR1YWwgY3B1LgotICoKLSAqIHB2Y2xvY2tfd2FsbF9jbG9jayByZWZlcmVuY2VzIHRoZSBwb2ludCBpbiB0aW1lIHdoZW4gdGhlIHN5c3RlbQotICogdGltZSB3YXMgemVybyAodXN1YWxseSBib290IHRpbWUpLCB0aHVzIHRoZSBndWVzdCBjYWxjdWxhdGVzIHRoZQotICogY3VycmVudCB3YWxsIGNsb2NrIGJ5IGFkZGluZyB0aGUgc3lzdGVtIHRpbWUuCi0gKgotICogUHJvdG9jb2wgZm9yIHRoZSAidmVyc2lvbiIgZmllbGRzIGlzOiBoeXBlcnZpc29yIHJhaXNlcyBpdCAobWFraW5nCi0gKiBpdCB1bmV2ZW4pIGJlZm9yZSBpdCBzdGFydHMgdXBkYXRpbmcgdGhlIGZpZWxkcyBhbmQgcmFpc2VzIGl0IGFnYWluCi0gKiAobWFraW5nIGl0IGV2ZW4pIHdoZW4gaXQgaXMgZG9uZS4gIFRodXMgdGhlIGd1ZXN0IGNhbiBtYWtlIHN1cmUgdGhlCi0gKiB0aW1lIHZhbHVlcyBpdCBnb3QgYXJlIGNvbnNpc3RlbnQgYnkgY2hlY2tpbmcgdGhlIHZlcnNpb24gYmVmb3JlCi0gKiBhbmQgYWZ0ZXIgcmVhZGluZyB0aGVtLgotICovCi0KLXN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIHsKLQl1MzIgICB2ZXJzaW9uOwotCXUzMiAgIHBhZDA7Ci0JdTY0ICAgdHNjX3RpbWVzdGFtcDsKLQl1NjQgICBzeXN0ZW1fdGltZTsKLQl1MzIgICB0c2NfdG9fc3lzdGVtX211bDsKLQlzOCAgICB0c2Nfc2hpZnQ7Ci0JdTggICAgcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7IC8qIDMyIGJ5dGVzICovCi0KLXN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgewotCXUzMiAgIHZlcnNpb247Ci0JdTMyICAgc2VjOwotCXUzMiAgIG5zZWM7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIEFTTV9YODZfX1BWQ0xPQ0tfQUJJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLmggYi9pbmNsdWRlL2FzbS14ODYvcHZjbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDI5ZTI3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1BWQ0xPQ0tfSAotI2RlZmluZSBBU01fWDg2X19QVkNMT0NLX0gKLQotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+Ci0jaW5jbHVkZSA8YXNtL3B2Y2xvY2stYWJpLmg+Ci0KLS8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgeGVuIGFuZCBrdm0gcHYgY2xvY2sgc291cmNlcyAqLwotY3ljbGVfdCBwdmNsb2NrX2Nsb2Nrc291cmNlX3JlYWQoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnNyYyk7Ci11bnNpZ25lZCBsb25nIHB2Y2xvY2tfdHNjX2toeihzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqc3JjKTsKLXZvaWQgcHZjbG9ja19yZWFkX3dhbGxjbG9jayhzdHJ1Y3QgcHZjbG9ja193YWxsX2Nsb2NrICp3YWxsLAotCQkJICAgIHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICp2Y3B1LAotCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdHMpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUFZDTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcmVib290LmggYi9pbmNsdWRlL2FzbS14ODYvcmVib290LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMmYwY2UuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3JlYm9vdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19SRUJPT1RfSAotI2RlZmluZSBBU01fWDg2X19SRUJPT1RfSAotCi1zdHJ1Y3QgcHRfcmVnczsKLQotc3RydWN0IG1hY2hpbmVfb3BzIHsKLQl2b2lkICgqcmVzdGFydCkoY2hhciAqY21kKTsKLQl2b2lkICgqaGFsdCkodm9pZCk7Ci0Jdm9pZCAoKnBvd2VyX29mZikodm9pZCk7Ci0Jdm9pZCAoKnNodXRkb3duKSh2b2lkKTsKLQl2b2lkICgqY3Jhc2hfc2h1dGRvd24pKHN0cnVjdCBwdF9yZWdzICopOwotCXZvaWQgKCplbWVyZ2VuY3lfcmVzdGFydCkodm9pZCk7Ci19OwotCi1leHRlcm4gc3RydWN0IG1hY2hpbmVfb3BzIG1hY2hpbmVfb3BzOwotCi12b2lkIG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXZvaWQgbmF0aXZlX21hY2hpbmVfc2h1dGRvd24odm9pZCk7Ci12b2lkIG1hY2hpbmVfcmVhbF9yZXN0YXJ0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvZGUsIGludCBsZW5ndGgpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUkVCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9yZWJvb3RfZml4dXBzLmggYi9pbmNsdWRlL2FzbS14ODYvcmVib290X2ZpeHVwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzI5ODdkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9yZWJvb3RfZml4dXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUkVCT09UX0ZJWFVQU19ICi0jZGVmaW5lIEFTTV9YODZfX1JFQk9PVF9GSVhVUFNfSAotCi1leHRlcm4gdm9pZCBtYWNoX3JlYm9vdF9maXh1cHModm9pZCk7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19SRUJPT1RfRklYVVBTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9yZXF1aXJlZC1mZWF0dXJlcy5oIGIvaW5jbHVkZS9hc20teDg2L3JlcXVpcmVkLWZlYXR1cmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMWM0ZTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3JlcXVpcmVkLWZlYXR1cmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1JFUVVJUkVEX0ZFQVRVUkVTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUkVRVUlSRURfRkVBVFVSRVNfSAotCi0vKiBEZWZpbmUgbWluaW11bSBDUFVJRCBmZWF0dXJlIHNldCBmb3Iga2VybmVsIFRoZXNlIGJpdHMgYXJlIGNoZWNrZWQKLSAgIHJlYWxseSBlYXJseSB0byBhY3R1YWxseSBkaXNwbGF5IGEgdmlzaWJsZSBlcnJvciBtZXNzYWdlIGJlZm9yZSB0aGUKLSAgIGtlcm5lbCBkaWVzLiAgTWFrZSBzdXJlIHRvIGFzc2lnbiBmZWF0dXJlcyB0byB0aGUgcHJvcGVyIG1hc2shCi0KLSAgIFNvbWUgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIG5vdCBpbiBDUFVJRCB5ZXQgYXJlIGFsc28gaW4gdGhlCi0gICBDT05GSUdfWDg2X01JTklNVU1fQ1BVX0ZBTUlMWSB3aGljaCBpcyBjaGVja2VkIHRvby4KLQotICAgVGhlIHJlYWwgaW5mb3JtYXRpb24gaXMgaW4gYXJjaC94ODYvS2NvbmZpZy5jcHUsIHRoaXMganVzdCBjb252ZXJ0cwotICAgdGhlIENPTkZJR3MgaW50byBhIGJpdG1hc2sgKi8KLQotI2lmbmRlZiBDT05GSUdfTUFUSF9FTVVMQVRJT04KLSMgZGVmaW5lIE5FRURfRlBVCSgxPDwoWDg2X0ZFQVRVUkVfRlBVICYgMzEpKQotI2Vsc2UKLSMgZGVmaW5lIE5FRURfRlBVCTAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotIyBkZWZpbmUgTkVFRF9QQUUJKDE8PChYODZfRkVBVFVSRV9QQUUgJiAzMSkpCi0jZWxzZQotIyBkZWZpbmUgTkVFRF9QQUUJMAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2X0NNUFhDSEc2NAotIyBkZWZpbmUgTkVFRF9DWDgJKDE8PChYODZfRkVBVFVSRV9DWDggJiAzMSkpCi0jZWxzZQotIyBkZWZpbmUgTkVFRF9DWDgJMAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfQ01PVikgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotIyBkZWZpbmUgTkVFRF9DTU9WCSgxPDwoWDg2X0ZFQVRVUkVfQ01PViAmIDMxKSkKLSNlbHNlCi0jIGRlZmluZSBORUVEX0NNT1YJMAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2X1VTRV8zRE5PVwotIyBkZWZpbmUgTkVFRF8zRE5PVwkoMTw8KFg4Nl9GRUFUVVJFXzNETk9XICYgMzEpKQotI2Vsc2UKLSMgZGVmaW5lIE5FRURfM0ROT1cJMAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfUDZfTk9QKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0jIGRlZmluZSBORUVEX05PUEwJKDE8PChYODZfRkVBVFVSRV9OT1BMICYgMzEpKQotI2Vsc2UKLSMgZGVmaW5lIE5FRURfTk9QTAkwCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgTkVFRF9QU0UJMAotI2RlZmluZSBORUVEX01TUgkoMTw8KFg4Nl9GRUFUVVJFX01TUiAmIDMxKSkKLSNkZWZpbmUgTkVFRF9QR0UJKDE8PChYODZfRkVBVFVSRV9QR0UgJiAzMSkpCi0jZGVmaW5lIE5FRURfRlhTUgkoMTw8KFg4Nl9GRUFUVVJFX0ZYU1IgJiAzMSkpCi0jZGVmaW5lIE5FRURfWE1NCSgxPDwoWDg2X0ZFQVRVUkVfWE1NICYgMzEpKQotI2RlZmluZSBORUVEX1hNTTIJKDE8PChYODZfRkVBVFVSRV9YTU0yICYgMzEpKQotI2RlZmluZSBORUVEX0xNCQkoMTw8KFg4Nl9GRUFUVVJFX0xNICYgMzEpKQotI2Vsc2UKLSNkZWZpbmUgTkVFRF9QU0UJMAotI2RlZmluZSBORUVEX01TUgkwCi0jZGVmaW5lIE5FRURfUEdFCTAKLSNkZWZpbmUgTkVFRF9GWFNSCTAKLSNkZWZpbmUgTkVFRF9YTU0JMAotI2RlZmluZSBORUVEX1hNTTIJMAotI2RlZmluZSBORUVEX0xNCQkwCi0jZW5kaWYKLQotI2RlZmluZSBSRVFVSVJFRF9NQVNLMAkoTkVFRF9GUFV8TkVFRF9QU0V8TkVFRF9NU1J8TkVFRF9QQUV8XAotCQkJIE5FRURfQ1g4fE5FRURfUEdFfE5FRURfRlhTUnxORUVEX0NNT1Z8XAotCQkJIE5FRURfWE1NfE5FRURfWE1NMikKLSNkZWZpbmUgU1NFX01BU0sJKE5FRURfWE1NfE5FRURfWE1NMikKLQotI2RlZmluZSBSRVFVSVJFRF9NQVNLMQkoTkVFRF9MTXxORUVEXzNETk9XKQotCi0jZGVmaW5lIFJFUVVJUkVEX01BU0syCTAKLSNkZWZpbmUgUkVRVUlSRURfTUFTSzMJKE5FRURfTk9QTCkKLSNkZWZpbmUgUkVRVUlSRURfTUFTSzQJMAotI2RlZmluZSBSRVFVSVJFRF9NQVNLNQkwCi0jZGVmaW5lIFJFUVVJUkVEX01BU0s2CTAKLSNkZWZpbmUgUkVRVUlSRURfTUFTSzcJMAotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUkVRVUlSRURfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Jlc3VtZS10cmFjZS5oIGIvaW5jbHVkZS9hc20teDg2L3Jlc3VtZS10cmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzkzNzZkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9yZXN1bWUtdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUkVTVU1FX1RSQUNFX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUkVTVU1FX1RSQUNFX0gKLQotI2luY2x1ZGUgPGFzbS9hc20uaD4KLQotI2RlZmluZSBUUkFDRV9SRVNVTUUodXNlcikJCQkJCVwKLWRvIHsJCQkJCQkJCVwKLQlpZiAocG1fdHJhY2VfZW5hYmxlZCkgewkJCQkJXAotCQljb25zdCB2b2lkICp0cmFjZWRhdGE7CQkJCVwKLQkJYXNtIHZvbGF0aWxlKF9BU01fTU9WICIgJDFmLCUwXG4iCQlcCi0JCQkgICAgICIuc2VjdGlvbiAudHJhY2VkYXRhLFwiYVwiXG4iCVwKLQkJCSAgICAgIjE6XHQud29yZCAlYzFcblx0IgkJXAotCQkJICAgICBfQVNNX1BUUiAiICVjMlxuIgkJCVwKLQkJCSAgICAgIi5wcmV2aW91cyIJCQlcCi0JCQkgICAgIDoiPXIiICh0cmFjZWRhdGEpCQkJXAotCQkJICAgICA6ICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSk7CVwKLQkJZ2VuZXJhdGVfcmVzdW1lX3RyYWNlKHRyYWNlZGF0YSwgdXNlcik7CQlcCi0JfQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUkVTVU1FX1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9yaW8uaCBiL2luY2x1ZGUvYXNtLXg4Ni9yaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxMjU2Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcmlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX21wcGFyc2UuaAotICogICAgICAgICAgYW5kIGluY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvYmlvc19lYmRhLmgKLSAqCi0gKiBBdXRob3I6IExhdXJlbnQgVml2aWVyIDxMYXVyZW50LlZpdmllckBidWxsLm5ldD4KLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1JJT19ICi0jZGVmaW5lIEFTTV9YODZfX1JJT19ICi0KLSNkZWZpbmUgUklPX1RBQkxFX1ZFUlNJT04JMwotCi1zdHJ1Y3QgcmlvX3RhYmxlX2hkciB7Ci0JdTggdmVyc2lvbjsJCS8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgICovCi0JdTggbnVtX3NjYWxfZGV2OwkvKiAjIG9mIFNjYWxhYmlsaXR5IGRldmljZXMgICAgICAgICAgICAgICAqLwotCXU4IG51bV9yaW9fZGV2OwkJLyogIyBvZiBSSU8gSS9PIGRldmljZXMgICAgICAgICAgICAgICAgICAgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBzY2FsX2RldGFpbCB7Ci0JdTggbm9kZV9pZDsJCS8qIFNjYWxhYmlsaXR5IE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICovCi0JdTMyIENCQVI7CQkvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAqLwotCXU4IHBvcnQwbm9kZTsJCS8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkY9Tm9uZSAgICovCi0JdTggcG9ydDBwb3J0OwkJLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KLQkJCQkvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IHBvcnQxbm9kZTsJCS8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkYgPSBOb25lICovCi0JdTggcG9ydDFwb3J0OwkJLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KLQkJCQkvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IHBvcnQybm9kZTsJCS8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkYgPSBOb25lICovCi0JdTggcG9ydDJwb3J0OwkJLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KLQkJCQkvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IGNoYXNzaXNfbnVtOwkJLyogMSBiYXNlZCBDaGFzc2lzIG51bWJlciAoMSA9IGJvb3Qgbm9kZSkgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCByaW9fZGV0YWlsIHsKLQl1OCBub2RlX2lkOwkJLyogUklPIE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1MzIgQkJBUjsJCS8qIEFkZHJlc3Mgb2YgMU1CIHJlZ2lzdGVyIHNwYWNlICAgICAgICAgICovCi0JdTggdHlwZTsJCS8qIFR5cGUgb2YgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdTggb3duZXJfaWQ7CQkvKiBOb2RlIElEIG9mIEh1cnJpY2FuZSB0aGF0IG93bnMgdGhpcyAgICAqLwotCQkJCS8qIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdTggcG9ydDBub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KLQl1OCBwb3J0MHBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLwotCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdTggcG9ydDFub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KLQl1OCBwb3J0MXBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLwotCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdTggZmlyc3Rfc2xvdDsJCS8qIExvd2VzdCBzbG90IG51bWJlciBiZWxvdyB0aGlzIENhbGdhcnkgICovCi0JdTggc3RhdHVzOwkJLyogQml0IDAgPSAxIDogdGhlIFhBUElDIGlzIHVzZWQgICAgICAgICAgKi8KLQkJCQkvKiAgICAgICA9IDAgOiB0aGUgWEFQSUMgaXMgbm90IHVzZWQsIGllOiAqLwotCQkJCS8qICAgICAgICAgICAgaW50cyBmd2RlZCB0byBhbm90aGVyIFhBUElDICovCi0JCQkJLyogICAgICAgICAgIEJpdHMxOjcgUmVzZXJ2ZWQgICAgICAgICAgICAgKi8KLQl1OCBXUF9pbmRleDsJCS8qIGluc3RhbmNlIGluZGV4IC0gbG93ZXIgb25lcyBoYXZlICAgICAgICovCi0JCQkJLyogICAgIGxvd2VyIHNsb3QgbnVtYmVycy9QQ0kgYnVzIG51bWJlcnMgKi8KLQl1OCBjaGFzc2lzX251bTsJCS8qIDEgYmFzZWQgQ2hhc3NpcyBudW1iZXIgICAgICAgICAgICAgICAgICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1lbnVtIHsKLQlIVVJSX1NDQUxBQklMVFkJPSAwLAkvKiBIdXJyaWNhbmUgU2NhbGFiaWxpdHkgaW5mbyAqLwotCUhVUlJfUklPSUIJPSAyLAkvKiBIdXJyaWNhbmUgUklPSUIgaW5mbyAgICAgICAqLwotCUNPTVBBVF9DQUxHQVJZCT0gNCwJLyogQ29tcGF0aWJpbGl0eSBDYWxnYXJ5ICAgICAgKi8KLQlBTFRfQ0FMR0FSWQk9IDUsCS8qIFNlY29uZCBQbGFuYXIgQ2FsZ2FyeSAgICAgICovCi19OwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUklPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9yd2xvY2suaCBiL2luY2x1ZGUvYXNtLXg4Ni9yd2xvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhhMzEwOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcndsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fUldMT0NLX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUldMT0NLX0gKLQotI2RlZmluZSBSV19MT0NLX0JJQVMJCSAweDAxMDAwMDAwCi0KLS8qIEFjdHVhbCBjb2RlIGlzIGluIGFzbS9zcGlubG9jay5oIG9yIGluIGFyY2gveDg2L2xpYi9yd2xvY2suUyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fUldMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9yd3NlbS5oIGIvaW5jbHVkZS9hc20teDg2L3J3c2VtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZjMwMTUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3J3c2VtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyogcndzZW0uaDogUi9XIHNlbWFwaG9yZXMgaW1wbGVtZW50ZWQgdXNpbmcgWEFERC9DTVBYQ0hHIGZvciBpNDg2KwotICoKLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkuCi0gKgotICogRGVyaXZlZCBmcm9tIGFzbS14ODYvc2VtYXBob3JlLmgKLSAqCi0gKgotICogVGhlIE1TVyBvZiB0aGUgY291bnQgaXMgdGhlIG5lZ2F0ZWQgbnVtYmVyIG9mIGFjdGl2ZSB3cml0ZXJzIGFuZCB3YWl0aW5nCi0gKiBsb2NrZXJzLCBhbmQgdGhlIExTVyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGFjdGl2ZSBsb2NrcwotICoKLSAqIFRoZSBsb2NrIGNvdW50IGlzIGluaXRpYWxpemVkIHRvIDAgKG5vIGFjdGl2ZSBhbmQgbm8gd2FpdGluZyBsb2NrZXJzKS4KLSAqCi0gKiBXaGVuIGEgd3JpdGVyIHN1YnRyYWN0cyBXUklURV9CSUFTLCBpdCdsbCBnZXQgMHhmZmZmMDAwMSBmb3IgdGhlIGNhc2Ugb2YgYW4KLSAqIHVuY29udGVuZGVkIGxvY2suIFRoaXMgY2FuIGJlIGRldGVybWluZWQgYmVjYXVzZSBYQUREIHJldHVybnMgdGhlIG9sZCB2YWx1ZS4KLSAqIFJlYWRlcnMgaW5jcmVtZW50IGJ5IDEgYW5kIHNlZSBhIHBvc2l0aXZlIHZhbHVlIHdoZW4gdW5jb250ZW5kZWQsIG5lZ2F0aXZlCi0gKiBpZiB0aGVyZSBhcmUgd3JpdGVycyAoYW5kIG1heWJlKSByZWFkZXJzIHdhaXRpbmcgKGluIHdoaWNoIGNhc2UgaXQgZ29lcyB0bwotICogc2xlZXApLgotICoKLSAqIFRoZSB2YWx1ZSBvZiBXQUlUSU5HX0JJQVMgc3VwcG9ydHMgdXAgdG8gMzI3NjYgd2FpdGluZyBwcm9jZXNzZXMuIFRoaXMgY2FuCi0gKiBiZSBleHRlbmRlZCB0byA2NTUzNCBieSBtYW51YWxseSBjaGVja2luZyB0aGUgd2hvbGUgTVNXIHJhdGhlciB0aGFuIHJlbHlpbmcKLSAqIG9uIHRoZSBTIGZsYWcuCi0gKgotICogVGhlIHZhbHVlIG9mIEFDVElWRV9CSUFTIHN1cHBvcnRzIHVwIHRvIDY1NTM1IGFjdGl2ZSBwcm9jZXNzZXMuCi0gKgotICogVGhpcyBzaG91bGQgYmUgdG90YWxseSBmYWlyIC0gaWYgYW55dGhpbmcgaXMgd2FpdGluZywgYSBwcm9jZXNzIHRoYXQgd2FudHMgYQotICogbG9jayB3aWxsIGdvIHRvIHRoZSBiYWNrIG9mIHRoZSBxdWV1ZS4gV2hlbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsb2NrIGlzCi0gKiByZWxlYXNlZCwgaWYgdGhlcmUncyBhIHdyaXRlciBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlLCB0aGVuIHRoYXQgYW5kIG9ubHkKLSAqIHRoYXQgd2lsbCBiZSB3b2tlbiB1cDsgaWYgdGhlcmUncyBhIGJ1bmNoIG9mIGNvbnNlcXV0aXZlIHJlYWRlcnMgYXQgdGhlCi0gKiBmcm9udCwgdGhlbiB0aGV5J2xsIGFsbCBiZSB3b2tlbiB1cCwgYnV0IG5vIG90aGVyIHJlYWRlcnMgd2lsbCBiZS4KLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1JXU0VNX0gKLSNkZWZpbmUgQVNNX1g4Nl9fUldTRU1fSAotCi0jaWZuZGVmIF9MSU5VWF9SV1NFTV9ICi0jZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIGFzbS9yd3NlbS5oIGRpcmVjdGx5LCB1c2UgbGludXgvcndzZW0uaCBpbnN0ZWFkIgotI2VuZGlmCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+Ci0KLXN0cnVjdCByd3NlbV93YWl0ZXI7Ci0KLWV4dGVybiBhc21yZWdwYXJtIHN0cnVjdCByd19zZW1hcGhvcmUgKgotIHJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKLWV4dGVybiBhc21yZWdwYXJtIHN0cnVjdCByd19zZW1hcGhvcmUgKgotIHJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7Ci1leHRlcm4gYXNtcmVncGFybSBzdHJ1Y3Qgcndfc2VtYXBob3JlICoKLSByd3NlbV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKik7Ci1leHRlcm4gYXNtcmVncGFybSBzdHJ1Y3Qgcndfc2VtYXBob3JlICoKLSByd3NlbV9kb3duZ3JhZGVfd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwotCi0vKgotICogdGhlIHNlbWFwaG9yZSBkZWZpbml0aW9uCi0gKi8KLQotI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMAotI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkJMHgwMDAwMDAwMQotI2RlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHgwMDAwZmZmZgotI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJCSgtMHgwMDAxMDAwMCkKLSNkZWZpbmUgUldTRU1fQUNUSVZFX1JFQURfQklBUwkJUldTRU1fQUNUSVZFX0JJQVMKLSNkZWZpbmUgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMJCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKLQotc3RydWN0IHJ3X3NlbWFwaG9yZSB7Ci0Jc2lnbmVkIGxvbmcJCWNvdW50OwotCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKLSNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwotCXN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwOwotI2VuZGlmCi19OwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLSMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKSAsIC5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9Ci0jZWxzZQotIyBkZWZpbmUgX19SV1NFTV9ERVBfTUFQX0lOSVQobG9ja25hbWUpCi0jZW5kaWYKLQotCi0jZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkJCQkJXAotewkJCQkJCQkJXAotCVJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkud2FpdF9sb2NrKSwgXAotCUxJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIF9fUldTRU1fREVQX01BUF9JTklUKG5hbWUpIFwKLX0KLQotI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpCQkJCQlcCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQotCi1leHRlcm4gdm9pZCBfX2luaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBjb25zdCBjaGFyICpuYW1lLAotCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKLQotI2RlZmluZSBpbml0X3J3c2VtKHNlbSkJCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQlcCi0JCQkJCQkJCVwKLQlfX2luaXRfcndzZW0oKHNlbSksICNzZW0sICZfX2tleSk7CQkJXAotfSB3aGlsZSAoMCkKLQotLyoKLSAqIGxvY2sgZm9yIHJlYWRpbmcKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fcmVhZFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgaW5jbCAgICAgICglJWVheClcblx0IgotCQkgICAgIC8qIGFkZHMgMHgwMDAwMDAwMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCi0JCSAgICAgIiAgam5zICAgICAgICAxZlxuIgotCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkXG4iCi0JCSAgICAgIjE6XG5cdCIKLQkJICAgICAiIyBlbmRpbmcgZG93bl9yZWFkXG5cdCIKLQkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCi0JCSAgICAgOiAiYSIgKHNlbSkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKLX0KLQotLyoKLSAqIHRyeWxvY2sgZm9yIHJlYWRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgotICovCi1zdGF0aWMgaW5saW5lIGludCBfX2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlfX3MzMiByZXN1bHQsIHRtcDsKLQlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMCwlMVxuXHQiCi0JCSAgICAgIjE6XG5cdCIKLQkJICAgICAiICBtb3ZsCSAgICAgJTEsJTJcblx0IgotCQkgICAgICIgIGFkZGwgICAgICAlMywlMlxuXHQiCi0JCSAgICAgIiAgamxlCSAgICAgMmZcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIGNtcHhjaGdsICAlMiwlMFxuXHQiCi0JCSAgICAgIiAgam56CSAgICAgMWJcblx0IgotCQkgICAgICIyOlxuXHQiCi0JCSAgICAgIiMgZW5kaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgotCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9JmEiIChyZXN1bHQpLCAiPSZyIiAodG1wKQotCQkgICAgIDogImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiByZXN1bHQgPj0gMCA/IDEgOiAwOwotfQotCi0vKgotICogbG9jayBmb3Igd3JpdGluZwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlX25lc3RlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCBzdWJjbGFzcykKLXsKLQlpbnQgdG1wOwotCi0JdG1wID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7Ci0JYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCi0JCSAgICAgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCi0JCSAgICAgIiAgdGVzdGwgICAgICUlZWR4LCUlZWR4XG5cdCIKLQkJICAgICAvKiB3YXMgdGhlIGNvdW50IDAgYmVmb3JlPyAqLwotCQkgICAgICIgIGp6ICAgICAgICAxZlxuIgotCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duX3dyaXRlX2ZhaWxlZFxuIgotCQkgICAgICIxOlxuIgotCQkgICAgICIjIGVuZGluZyBkb3duX3dyaXRlIgotCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKLQkJICAgICA6ICJhIiAoc2VtKSwgIjEiICh0bXApCi0JCSAgICAgOiAibWVtb3J5IiwgImNjIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCV9fZG93bl93cml0ZV9uZXN0ZWQoc2VtLCAwKTsKLX0KLQotLyoKLSAqIHRyeWxvY2sgZm9yIHdyaXRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgotICovCi1zdGF0aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0Jc2lnbmVkIGxvbmcgcmV0ID0gY21weGNoZygmc2VtLT5jb3VudCwKLQkJCQkgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAotCQkJCSAgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpOwotCWlmIChyZXQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi0vKgotICogdW5sb2NrIGFmdGVyIHJlYWRpbmcKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0JX19zMzIgdG1wID0gLVJXU0VNX0FDVElWRV9SRUFEX0JJQVM7Ci0JYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBfX3VwX3JlYWRcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIKLQkJICAgICAvKiBzdWJ0cmFjdHMgMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCi0JCSAgICAgIiAgam5zICAgICAgICAxZlxuXHQiCi0JCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKLQkJICAgICAiMTpcbiIKLQkJICAgICAiIyBlbmRpbmcgX191cF9yZWFkXG4iCi0JCSAgICAgOiAiK20iIChzZW0tPmNvdW50KSwgIj1kIiAodG1wKQotCQkgICAgIDogImEiIChzZW0pLCAiMSIgKHRtcCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKLX0KLQotLyoKLSAqIHVubG9jayBhZnRlciB3cml0aW5nCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMiwlJWVkeFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZGwgICAgICUlZWR4LCglJWVheClcblx0IgotCQkgICAgIC8qIHRyaWVzIHRvIHRyYW5zaXRpb24KLQkJCTB4ZmZmZjAwMDEgLT4gMHgwMDAwMDAwMCAqLwotCQkgICAgICIgIGp6ICAgICAgIDFmXG4iCi0JCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKLQkJICAgICAiMTpcblx0IgotCQkgICAgICIjIGVuZGluZyBfX3VwX3dyaXRlXG4iCi0JCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQotCQkgICAgIDogImEiIChzZW0pLCAiaSIgKC1SV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiZWR4Iik7Ci19Ci0KLS8qCi0gKiBkb3duZ3JhZGUgd3JpdGUgbG9jayB0byByZWFkIGxvY2sKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZG93bmdyYWRlX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bmdyYWRlX3dyaXRlXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICBhZGRsICAgICAgJTIsKCUlZWF4KVxuXHQiCi0JCSAgICAgLyogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxICovCi0JCSAgICAgIiAgam5zICAgICAgIDFmXG5cdCIKLQkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2VcbiIKLQkJICAgICAiMTpcblx0IgotCQkgICAgICIjIGVuZGluZyBfX2Rvd25ncmFkZV93cml0ZVxuIgotCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fV0FJVElOR19CSUFTKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotfQotCi0vKgotICogaW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCi0JCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQotCQkgICAgIDogImlyIiAoZGVsdGEpKTsKLX0KLQotLyoKLSAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKLSAqLwotc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgdG1wID0gZGVsdGE7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGQgJTAsJTEiCi0JCSAgICAgOiAiK3IiICh0bXApLCAiK20iIChzZW0tPmNvdW50KQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gdG1wICsgZGVsdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2lzX2xvY2tlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0JcmV0dXJuIChzZW0tPmNvdW50ICE9IDApOwotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIEFTTV9YODZfX1JXU0VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20teDg2L3NjYXR0ZXJsaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNDhmODguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NjYXR0ZXJsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NDQVRURVJMSVNUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU0NBVFRFUkxJU1RfSAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBzY2F0dGVybGlzdCB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NHCi0JdW5zaWduZWQgbG9uZwlzZ19tYWdpYzsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcJcGFnZV9saW5rOwotCXVuc2lnbmVkIGludAlvZmZzZXQ7Ci0JdW5zaWduZWQgaW50CWxlbmd0aDsKLQlkbWFfYWRkcl90CWRtYV9hZGRyZXNzOwotCXVuc2lnbmVkIGludAlkbWFfbGVuZ3RoOwotfTsKLQotI2RlZmluZSBBUkNIX0hBU19TR19DSEFJTgotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHgwMGZmZmZmZikKLQotLyoKLSAqIFRoZXNlIG1hY3JvcyBzaG91bGQgYmUgdXNlZCBhZnRlciBhIHBjaV9tYXBfc2cgY2FsbCBoYXMgYmVlbiBkb25lCi0gKiB0byBnZXQgYnVzIGFkZHJlc3NlcyBvZiBlYWNoIG9mIHRoZSBTRyBlbnRyaWVzIGFuZCB0aGVpciBsZW5ndGhzLgotICogWW91IHNob3VsZCBvbmx5IHdvcmsgd2l0aCB0aGUgbnVtYmVyIG9mIHNnIGVudHJpZXMgcGNpX21hcF9zZwotICogcmV0dXJucy4KLSAqLwotI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykJKChzZyktPmRtYV9hZGRyZXNzKQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+bGVuZ3RoKQotI2Vsc2UKLSMgZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+ZG1hX2xlbmd0aCkKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU0NBVFRFUkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NlY2NvbXBfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zZWNjb21wXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOWFiMmQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NlY2NvbXBfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU0VDQ09NUF8zMl9ICi0jZGVmaW5lIEFTTV9YODZfX1NFQ0NPTVBfMzJfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLQotI2lmZGVmIFRJRl8zMkJJVAotI2Vycm9yICJ1bmV4cGVjdGVkIFRJRl8zMkJJVCBvbiBpMzg2IgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLQotI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZCBfX05SX3JlYWQKLSNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlIF9fTlJfd3JpdGUKLSNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXQgX19OUl9leGl0Ci0jZGVmaW5lIF9fTlJfc2VjY29tcF9zaWdyZXR1cm4gX19OUl9zaWdyZXR1cm4KLQotI2VuZGlmIC8qIEFTTV9YODZfX1NFQ0NPTVBfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NlY2NvbXBfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zZWNjb21wXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMjc0Y2UuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NlY2NvbXBfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU0VDQ09NUF82NF9ICi0jZGVmaW5lIEFTTV9YODZfX1NFQ0NPTVBfNjRfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLQotI2lmZGVmIFRJRl8zMkJJVAotI2Vycm9yICJ1bmV4cGVjdGVkIFRJRl8zMkJJVCBvbiB4ODZfNjQiCi0jZWxzZQotI2RlZmluZSBUSUZfMzJCSVQgVElGX0lBMzIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8YXNtL2lhMzJfdW5pc3RkLmg+Ci0KLSNkZWZpbmUgX19OUl9zZWNjb21wX3JlYWQgX19OUl9yZWFkCi0jZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZSBfX05SX3dyaXRlCi0jZGVmaW5lIF9fTlJfc2VjY29tcF9leGl0IF9fTlJfZXhpdAotI2RlZmluZSBfX05SX3NlY2NvbXBfc2lncmV0dXJuIF9fTlJfcnRfc2lncmV0dXJuCi0KLSNkZWZpbmUgX19OUl9zZWNjb21wX3JlYWRfMzIgX19OUl9pYTMyX3JlYWQKLSNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlXzMyIF9fTlJfaWEzMl93cml0ZQotI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdF8zMiBfX05SX2lhMzJfZXhpdAotI2RlZmluZSBfX05SX3NlY2NvbXBfc2lncmV0dXJuXzMyIF9fTlJfaWEzMl9zaWdyZXR1cm4KLQotI2VuZGlmIC8qIEFTTV9YODZfX1NFQ0NPTVBfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zZWdtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNmU2OTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NlZ21lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NFR01FTlRfSAotI2RlZmluZSBBU01fWDg2X19TRUdNRU5UX0gKLQotLyogQ29uc3RydWN0b3IgZm9yIGEgY29udmVudGlvbmFsIHNlZ21lbnQgR0RUIChvciBMRFQpIGVudHJ5ICovCi0vKiBUaGlzIGlzIGEgbWFjcm8gc28gaXQgY2FuIGJlIHVzZWQgaW4gaW5pdGlhbGl6ZXJzICovCi0jZGVmaW5lIEdEVF9FTlRSWShmbGFncywgYmFzZSwgbGltaXQpCQkJXAotCSgoKChiYXNlKSAgJiAweGZmMDAwMDAwVUxMKSA8PCAoNTYtMjQpKSB8CVwKLQkgKCgoZmxhZ3MpICYgMHgwMDAwZjBmZlVMTCkgPDwgNDApIHwJCVwKLQkgKCgobGltaXQpICYgMHgwMDBmMDAwMFVMTCkgPDwgKDQ4LTE2KSkgfAlcCi0JICgoKGJhc2UpICAmIDB4MDBmZmZmZmZVTEwpIDw8IDE2KSB8CQlcCi0JICgoKGxpbWl0KSAmIDB4MDAwMGZmZmZVTEwpKSkKLQotLyogU2ltcGxlIGFuZCBzbWFsbCBHRFQgZW50cmllcyBmb3IgYm9vdGluZyBvbmx5ICovCi0KLSNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfQ1MJMgotI2RlZmluZSBfX0JPT1RfQ1MJCShHRFRfRU5UUllfQk9PVF9DUyAqIDgpCi0KLSNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfRFMJKEdEVF9FTlRSWV9CT09UX0NTICsgMSkKLSNkZWZpbmUgX19CT09UX0RTCQkoR0RUX0VOVFJZX0JPT1RfRFMgKiA4KQotCi0jZGVmaW5lIEdEVF9FTlRSWV9CT09UX1RTUwkoR0RUX0VOVFJZX0JPT1RfQ1MgKyAyKQotI2RlZmluZSBfX0JPT1RfVFNTCQkoR0RUX0VOVFJZX0JPT1RfVFNTICogOCkKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qCi0gKiBUaGUgbGF5b3V0IG9mIHRoZSBwZXItQ1BVIEdEVCB1bmRlciBMaW51eDoKLSAqCi0gKiAgIDAgLSBudWxsCi0gKiAgIDEgLSByZXNlcnZlZAotICogICAyIC0gcmVzZXJ2ZWQKLSAqICAgMyAtIHJlc2VydmVkCi0gKgotICogICA0IC0gdW51c2VkCQkJPD09PT0gbmV3IGNhY2hlbGluZQotICogICA1IC0gdW51c2VkCi0gKgotICogIC0tLS0tLS0gc3RhcnQgb2YgVExTIChUaHJlYWQtTG9jYWwgU3RvcmFnZSkgc2VnbWVudHM6Ci0gKgotICogICA2IC0gVExTIHNlZ21lbnQgIzEJCQlbIGdsaWJjJ3MgVExTIHNlZ21lbnQgXQotICogICA3IC0gVExTIHNlZ21lbnQgIzIJCQlbIFdpbmUncyAlZnMgV2luMzIgc2VnbWVudCBdCi0gKiAgIDggLSBUTFMgc2VnbWVudCAjMwotICogICA5IC0gcmVzZXJ2ZWQKLSAqICAxMCAtIHJlc2VydmVkCi0gKiAgMTEgLSByZXNlcnZlZAotICoKLSAqICAtLS0tLS0tIHN0YXJ0IG9mIGtlcm5lbCBzZWdtZW50czoKLSAqCi0gKiAgMTIgLSBrZXJuZWwgY29kZSBzZWdtZW50CQk8PT09PSBuZXcgY2FjaGVsaW5lCi0gKiAgMTMgLSBrZXJuZWwgZGF0YSBzZWdtZW50Ci0gKiAgMTQgLSBkZWZhdWx0IHVzZXIgQ1MKLSAqICAxNSAtIGRlZmF1bHQgdXNlciBEUwotICogIDE2IC0gVFNTCi0gKiAgMTcgLSBMRFQKLSAqICAxOCAtIFBOUEJJT1Mgc3VwcG9ydCAoMTYtPjMyIGdhdGUpCi0gKiAgMTkgLSBQTlBCSU9TIHN1cHBvcnQKLSAqICAyMCAtIFBOUEJJT1Mgc3VwcG9ydAotICogIDIxIC0gUE5QQklPUyBzdXBwb3J0Ci0gKiAgMjIgLSBQTlBCSU9TIHN1cHBvcnQKLSAqICAyMyAtIEFQTSBCSU9TIHN1cHBvcnQKLSAqICAyNCAtIEFQTSBCSU9TIHN1cHBvcnQKLSAqICAyNSAtIEFQTSBCSU9TIHN1cHBvcnQKLSAqCi0gKiAgMjYgLSBFU1BGSVggc21hbGwgU1MKLSAqICAyNyAtIHBlci1jcHUJCQlbIG9mZnNldCB0byBwZXItY3B1IGRhdGEgYXJlYSBdCi0gKiAgMjggLSB1bnVzZWQKLSAqICAyOSAtIHVudXNlZAotICogIDMwIC0gdW51c2VkCi0gKiAgMzEgLSBUU1MgZm9yIGRvdWJsZSBmYXVsdCBoYW5kbGVyCi0gKi8KLSNkZWZpbmUgR0RUX0VOVFJZX1RMU19NSU4JNgotI2RlZmluZSBHRFRfRU5UUllfVExTX01BWCAJKEdEVF9FTlRSWV9UTFNfTUlOICsgR0RUX0VOVFJZX1RMU19FTlRSSUVTIC0gMSkKLQotI2RlZmluZSBHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTCTE0Ci0KLSNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUwkxNQotCi0jZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfQkFTRQkxMgotCi0jZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfQ1MJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAwKQotCi0jZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfRFMJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxKQotCi0jZGVmaW5lIEdEVF9FTlRSWV9UU1MJCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgNCkKLSNkZWZpbmUgR0RUX0VOVFJZX0xEVAkJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA1KQotCi0jZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA2KQotI2RlZmluZSBHRFRfRU5UUllfQVBNQklPU19CQVNFCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMTEpCi0KLSNkZWZpbmUgR0RUX0VOVFJZX0VTUEZJWF9TUwkJKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDE0KQotI2RlZmluZSBfX0VTUEZJWF9TUyAoR0RUX0VOVFJZX0VTUEZJWF9TUyAqIDgpCi0KLSNkZWZpbmUgR0RUX0VOVFJZX1BFUkNQVQkJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxNSkKLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIF9fS0VSTkVMX1BFUkNQVSAoR0RUX0VOVFJZX1BFUkNQVSAqIDgpCi0jZWxzZQotI2RlZmluZSBfX0tFUk5FTF9QRVJDUFUgMAotI2VuZGlmCi0KLSNkZWZpbmUgR0RUX0VOVFJZX0RPVUJMRUZBVUxUX1RTUwkzMQotCi0vKgotICogVGhlIEdEVCBoYXMgMzIgZW50cmllcwotICovCi0jZGVmaW5lIEdEVF9FTlRSSUVTIDMyCi0KLS8qIFRoZSBQblAgQklPUyBlbnRyaWVzIGluIHRoZSBHRFQgKi8KLSNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMgkJKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyAwKQotI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19DUzE2CQkoR0RUX0VOVFJZX1BOUEJJT1NfQkFTRSArIDEpCi0jZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX0RTCQkoR0RUX0VOVFJZX1BOUEJJT1NfQkFTRSArIDIpCi0jZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX1RTMQkJKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyAzKQotI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19UUzIJCShHRFRfRU5UUllfUE5QQklPU19CQVNFICsgNCkKLQotLyogVGhlIFBuUCBCSU9TIHNlbGVjdG9ycyAqLwotI2RlZmluZSBQTlBfQ1MzMiAgIChHRFRfRU5UUllfUE5QQklPU19DUzMyICogOCkJLyogc2VnbWVudCBmb3IgY2FsbGluZyBmbiAqLwotI2RlZmluZSBQTlBfQ1MxNiAgIChHRFRfRU5UUllfUE5QQklPU19DUzE2ICogOCkJLyogY29kZSBzZWdtZW50IGZvciBCSU9TICovCi0jZGVmaW5lIFBOUF9EUyAgICAgKEdEVF9FTlRSWV9QTlBCSU9TX0RTICogOCkJLyogZGF0YSBzZWdtZW50IGZvciBCSU9TICovCi0jZGVmaW5lIFBOUF9UUzEgICAgKEdEVF9FTlRSWV9QTlBCSU9TX1RTMSAqIDgpCS8qIHRyYW5zZmVyIGRhdGEgc2VnbWVudCAqLwotI2RlZmluZSBQTlBfVFMyICAgIChHRFRfRU5UUllfUE5QQklPU19UUzIgKiA4KQkvKiBhbm90aGVyIGRhdGEgc2VnbWVudCAqLwotCi0vKiBCb3R0b20gdHdvIGJpdHMgb2Ygc2VsZWN0b3IgZ2l2ZSB0aGUgcmluZyBwcml2aWxlZ2UgbGV2ZWwgKi8KLSNkZWZpbmUgU0VHTUVOVF9SUExfTUFTSwkweDMKLS8qIEJpdCAyIGlzIHRhYmxlIGluZGljYXRvciAoTERUL0dEVCkgKi8KLSNkZWZpbmUgU0VHTUVOVF9USV9NQVNLCQkweDQKLQotLyogVXNlciBtb2RlIGlzIHByaXZpbGVnZSBsZXZlbCAzICovCi0jZGVmaW5lIFVTRVJfUlBMCQkweDMKLS8qIExEVCBzZWdtZW50IGhhcyBUSSBzZXQsIEdEVCBoYXMgaXQgY2xlYXJlZCAqLwotI2RlZmluZSBTRUdNRU5UX0xEVAkJMHg0Ci0jZGVmaW5lIFNFR01FTlRfR0RUCQkweDAKLQotLyoKLSAqIE1hdGNoaW5nIHJ1bGVzIGZvciBjZXJ0YWluIHR5cGVzIG9mIHNlZ21lbnRzLgotICovCi0KLS8qIE1hdGNoZXMgUE5QX0NTMzIgYW5kIFBOUF9DUzE2ICh0aGV5IG11c3QgYmUgY29uc2VjdXRpdmUpICovCi0jZGVmaW5lIFNFR01FTlRfSVNfUE5QX0NPREUoeCkgICAoKCh4KSAmIDB4ZjQpID09IEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKiA4KQotCi0KLSNlbHNlCi0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0KLSNkZWZpbmUgR0RUX0VOVFJZX0tFUk5FTDMyX0NTIDEKLSNkZWZpbmUgR0RUX0VOVFJZX0tFUk5FTF9DUyAyCi0jZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfRFMgMwotCi0jZGVmaW5lIF9fS0VSTkVMMzJfQ1MgICAoR0RUX0VOVFJZX0tFUk5FTDMyX0NTICogOCkKLQotLyoKLSAqIHdlIGNhbm5vdCB1c2UgdGhlIHNhbWUgY29kZSBzZWdtZW50IGRlc2NyaXB0b3IgZm9yIHVzZXIgYW5kIGtlcm5lbAotICogLS0gbm90IGV2ZW4gaW4gdGhlIGxvbmcgZmxhdCBtb2RlLCBiZWNhdXNlIG9mIGRpZmZlcmVudCBEUEwgL2trZWlsCi0gKiBUaGUgc2VnbWVudCBvZmZzZXQgbmVlZHMgdG8gY29udGFpbiBhIFJQTC4gR3JyLiAtQUsKLSAqIEdEVCBsYXlvdXQgdG8gZ2V0IDY0Yml0IHN5c2NhbGwgcmlnaHQgKHN5c3JldCBoYXJkY29kZXMgZ2R0IG9mZnNldHMpCi0gKi8KLSNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTIDQKLSNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUyA1Ci0jZGVmaW5lIEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1MgNgotI2RlZmluZSBfX1VTRVIzMl9DUyAgIChHRFRfRU5UUllfREVGQVVMVF9VU0VSMzJfQ1MgKiA4ICsgMykKLSNkZWZpbmUgX19VU0VSMzJfRFMJX19VU0VSX0RTCi0KLSNkZWZpbmUgR0RUX0VOVFJZX1RTUyA4CS8qIG5lZWRzIHR3byBlbnRyaWVzICovCi0jZGVmaW5lIEdEVF9FTlRSWV9MRFQgMTAgLyogbmVlZHMgdHdvIGVudHJpZXMgKi8KLSNkZWZpbmUgR0RUX0VOVFJZX1RMU19NSU4gMTIKLSNkZWZpbmUgR0RUX0VOVFJZX1RMU19NQVggMTQKLQotI2RlZmluZSBHRFRfRU5UUllfUEVSX0NQVSAxNQkvKiBBYnVzZWQgdG8gbG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBsaW1pdCAqLwotI2RlZmluZSBfX1BFUl9DUFVfU0VHCShHRFRfRU5UUllfUEVSX0NQVSAqIDggKyAzKQotCi0vKiBUTFMgaW5kZXhlcyBmb3IgNjRiaXQgLSBoYXJkY29kZWQgaW4gYXJjaF9wcmN0bCAqLwotI2RlZmluZSBGU19UTFMgMAotI2RlZmluZSBHU19UTFMgMQotCi0jZGVmaW5lIEdTX1RMU19TRUwgKChHRFRfRU5UUllfVExTX01JTitHU19UTFMpKjggKyAzKQotI2RlZmluZSBGU19UTFNfU0VMICgoR0RUX0VOVFJZX1RMU19NSU4rRlNfVExTKSo4ICsgMykKLQotI2RlZmluZSBHRFRfRU5UUklFUyAxNgotCi0jZW5kaWYKLQotI2RlZmluZSBfX0tFUk5FTF9DUwkoR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCi0jZGVmaW5lIF9fS0VSTkVMX0RTCShHRFRfRU5UUllfS0VSTkVMX0RTICogOCkKLSNkZWZpbmUgX19VU0VSX0RTICAgICAoR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUyogOCArIDMpCi0jZGVmaW5lIF9fVVNFUl9DUyAgICAgKEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1MqIDggKyAzKQotI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKLSNkZWZpbmUgZ2V0X2tlcm5lbF9ycGwoKSAgMAotI2VuZGlmCi0KLS8qIFVzZXIgbW9kZSBpcyBwcml2aWxlZ2UgbGV2ZWwgMyAqLwotI2RlZmluZSBVU0VSX1JQTAkJMHgzCi0vKiBMRFQgc2VnbWVudCBoYXMgVEkgc2V0LCBHRFQgaGFzIGl0IGNsZWFyZWQgKi8KLSNkZWZpbmUgU0VHTUVOVF9MRFQJCTB4NAotI2RlZmluZSBTRUdNRU5UX0dEVAkJMHgwCi0KLS8qIEJvdHRvbSB0d28gYml0cyBvZiBzZWxlY3RvciBnaXZlIHRoZSByaW5nIHByaXZpbGVnZSBsZXZlbCAqLwotI2RlZmluZSBTRUdNRU5UX1JQTF9NQVNLCTB4MwotLyogQml0IDIgaXMgdGFibGUgaW5kaWNhdG9yIChMRFQvR0RUKSAqLwotI2RlZmluZSBTRUdNRU5UX1RJX01BU0sJCTB4NAotCi0jZGVmaW5lIElEVF9FTlRSSUVTIDI1NgotI2RlZmluZSBOVU1fRVhDRVBUSU9OX1ZFQ1RPUlMgMzIKLSNkZWZpbmUgR0RUX1NJWkUgKEdEVF9FTlRSSUVTICogOCkKLSNkZWZpbmUgR0RUX0VOVFJZX1RMU19FTlRSSUVTIDMKLSNkZWZpbmUgVExTX1NJWkUgKEdEVF9FTlRSWV9UTFNfRU5UUklFUyAqIDgpCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIGNvbnN0IGNoYXIgZWFybHlfaWR0X2hhbmRsZXJzW05VTV9FWENFUFRJT05fVkVDVE9SU11bMTBdOwotI2VuZGlmCi0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20teDg2L3NlbWJ1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWYwNmI3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zZW1idWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU0VNQlVGX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU0VNQlVGX0gKLQotLyoKLSAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgeDg2IGFyY2hpdGVjdHVyZS4KLSAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAotICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCi0gKgotICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgotICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKLSAqLwotc3RydWN0IHNlbWlkNjRfZHMgewotCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KLQlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KLQl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKLQlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCi0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Ci0JdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCi0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Ci19OwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zZXJpYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzNjYwYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc2VyaWFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NFUklBTF9ICi0jZGVmaW5lIEFTTV9YODZfX1NFUklBTF9ICi0KLS8qCi0gKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCi0gKgotICogSXQnZCBiZSBuaWNlIGlmIHNvbWVvbmUgYnVpbHQgYSBzZXJpYWwgY2FyZCB3aXRoIGEgMjQuNTc2IE1IegotICogY2xvY2ssIHNpbmNlIHRoZSAxNjU1MEEgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBhIHRvcCBzcGVlZCBvZiAxLjUKLSAqIG1lZ2FiaXRzL3NlY29uZDsgYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGZhc3RlciBjbG9jay4KLSAqLwotI2RlZmluZSBCQVNFX0JBVUQgKCAxODQzMjAwIC8gMTYgKQotCi0vKiBTdGFuZGFyZCBDT00gZmxhZ3MgKGV4Y2VwdCBmb3IgQ09NNCwgYmVjYXVzZSBvZiB0aGUgODUxNCBwcm9ibGVtKSAqLwotI2lmZGVmIENPTkZJR19TRVJJQUxfREVURUNUX0lSUQotI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlEpCi0jZGVmaW5lIFNURF9DT000X0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfQVVUT19JUlEpCi0jZWxzZQotI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQotI2RlZmluZSBTVERfQ09NNF9GTEFHUyBBU1lOQ19CT09UX0FVVE9DT05GCi0jZW5kaWYKLQotI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCQkJXAotCS8qIFVBUlQgQ0xLICAgUE9SVCBJUlEgICAgIEZMQUdTICAgICAgICAqLwkJCVwKLQl7IDAsIEJBU0VfQkFVRCwgMHgzRjgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzAgKi8JXAotCXsgMCwgQkFTRV9CQVVELCAweDJGOCwgMywgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMSAqLwlcCi0JeyAwLCBCQVNFX0JBVUQsIDB4M0U4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMyICovCVwKLQl7IDAsIEJBU0VfQkFVRCwgMHgyRTgsIDMsIFNURF9DT000X0ZMQUdTIH0sCS8qIHR0eVMzICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NldHVwLmggYi9pbmNsdWRlL2FzbS14ODYvc2V0dXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiNmNjMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc2V0dXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NFVFVQX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU0VUVVBfSAotCi0jZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDIwNDgKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogSW50ZXJydXB0IGNvbnRyb2wgZm9yIHZTTVBvd2VyZWQgeDg2XzY0IHN5c3RlbXMgKi8KLXZvaWQgdnNtcF9pbml0KHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9WSVNXUwotZXh0ZXJuIHZvaWQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpOwotZXh0ZXJuIGludCBpc192aXN3c19ib3godm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3Zpc3dzX2JveCh2b2lkKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotLyoKLSAqIEFueSBzZXR1cCBxdWlya3MgdG8gYmUgcGVyZm9ybWVkPwotICovCi1zdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3I7Ci1zdHJ1Y3QgbXBjX2NvbmZpZ19idXM7Ci1zdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlOwotc3RydWN0IHg4Nl9xdWlya3MgewotCWludCAoKmFyY2hfcHJlX3RpbWVfaW5pdCkodm9pZCk7Ci0JaW50ICgqYXJjaF90aW1lX2luaXQpKHZvaWQpOwotCWludCAoKmFyY2hfcHJlX2ludHJfaW5pdCkodm9pZCk7Ci0JaW50ICgqYXJjaF9pbnRyX2luaXQpKHZvaWQpOwotCWludCAoKmFyY2hfdHJhcF9pbml0KSh2b2lkKTsKLQljaGFyICogKCphcmNoX21lbW9yeV9zZXR1cCkodm9pZCk7Ci0JaW50ICgqbWFjaF9nZXRfc21wX2NvbmZpZykodW5zaWduZWQgaW50IGVhcmx5KTsKLQlpbnQgKCptYWNoX2ZpbmRfc21wX2NvbmZpZykodW5zaWduZWQgaW50IHJlc2VydmUpOwotCi0JaW50ICptcGNfcmVjb3JkOwotCWludCAoKm1wY19hcGljX2lkKShzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pOwotCXZvaWQgKCptcGNfb2VtX2J1c19pbmZvKShzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIGNoYXIgKm5hbWUpOwotCXZvaWQgKCptcGNfb2VtX3BjaV9idXMpKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSk7Ci0Jdm9pZCAoKnNtcF9yZWFkX21wY19vZW0pKHN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKm9lbXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2Vtc2l6ZSk7Ci0JaW50ICgqc2V0dXBfaW9hcGljX2lkcykodm9pZCk7Ci19OwotCi1leHRlcm4gc3RydWN0IHg4Nl9xdWlya3MgKng4Nl9xdWlya3M7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF92aWRlb19tb2RlOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2RlZmluZSBwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2lmZGVmIF9faTM4Nl9fCi0KLSNpbmNsdWRlIDxsaW51eC9wZm4uaD4KLS8qCi0gKiBSZXNlcnZlZCBzcGFjZSBmb3Igdm1hbGxvYyBhbmQgaW9tYXAgLSBkZWZpbmVkIGluIGFzbS9wYWdlLmgKLSAqLwotI2RlZmluZSBNQVhNRU1fUEZOCVBGTl9ET1dOKE1BWE1FTSkKLSNkZWZpbmUgTUFYX05PTlBBRV9QRk4JKDEgPDwgMjApCi0KLSNlbmRpZiAvKiBfX2kzODZfXyAqLwotCi0jZGVmaW5lIFBBUkFNX1NJWkUgNDA5NgkJLyogc2l6ZW9mKHN0cnVjdCBib290X3BhcmFtcykgKi8KLQotI2RlZmluZSBPTERfQ0xfTUFHSUMJCTB4QTMzRgotI2RlZmluZSBPTERfQ0xfQUREUkVTUwkJMHgwMjAJLyogUmVsYXRpdmUgdG8gcmVhbCBtb2RlIGRhdGEgKi8KLSNkZWZpbmUgTkVXX0NMX1BPSU5URVIJCTB4MjI4CS8qIFJlbGF0aXZlIHRvIHJlYWwgbW9kZSBkYXRhICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgotCi0jaWZuZGVmIF9TRVRVUAotCi0vKgotICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCi0gKi8KLWV4dGVybiBzdHJ1Y3QgYm9vdF9wYXJhbXMgYm9vdF9wYXJhbXM7Ci0KLS8qCi0gKiBEbyBOT1QgRVZFUiBsb29rIGF0IHRoZSBCSU9TIG1lbW9yeSBzaXplIGxvY2F0aW9uLgotICogSXQgZG9lcyBub3Qgd29yayBvbiBtYW55IG1hY2hpbmVzLgotICovCi0jZGVmaW5lIExPV01FTVNJWkUoKQkoMHg5ZjAwMCkKLQotI2lmZGVmIF9faTM4Nl9fCi0KLXZvaWQgX19pbml0IGkzODZfc3RhcnRfa2VybmVsKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJvYmVfcm9tcyh2b2lkKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfc3RhcnQ7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19lbmQ7Ci0KLSNlbHNlCi12b2lkIF9faW5pdCB4ODZfNjRfaW5pdF9wZGEodm9pZCk7Ci12b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKnJlYWxfbW9kZSk7Ci12b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfcmVzZXJ2YXRpb25zKGNoYXIgKnJlYWxfbW9kZV9kYXRhKTsKLQotI2VuZGlmIC8qIF9faTM4Nl9fICovCi0jZW5kaWYgLyogX1NFVFVQICovCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20teDg2L3NobWJ1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTFhZWMyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zaG1idWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU0hNQlVGX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU0hNQlVGX0gKLQotLyoKLSAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgeDg2IGFyY2hpdGVjdHVyZS4KLSAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAotICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCi0gKgotICogUGFkIHNwYWNlIG9uIDMyIGJpdCBpcyBsZWZ0IGZvcjoKLSAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCi0gKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCi0gKgotICogUGFkIHNwYWNlIG9uIDY0IGJpdCBpcyBsZWZ0IGZvcjoKLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMKLSAqLwotCi1zdHJ1Y3Qgc2htaWQ2NF9kcyB7Ci0Jc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLwotCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KLQlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLwotI2lmZGVmIF9faTM4Nl9fCi0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOwotI2VuZGlmCi0JX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KLSNpZmRlZiBfX2kzODZfXwotCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKLSNlbmRpZgotCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCi0jaWZkZWYgX19pMzg2X18KLQl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7Ci0jZW5kaWYKLQlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCi0JX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLwotCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCi0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OwotCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKLX07Ci0KLXN0cnVjdCBzaG1pbmZvNjQgewotCXVuc2lnbmVkIGxvbmcJc2htbWF4OwotCXVuc2lnbmVkIGxvbmcJc2htbWluOwotCXVuc2lnbmVkIGxvbmcJc2htbW5pOwotCXVuc2lnbmVkIGxvbmcJc2htc2VnOwotCXVuc2lnbmVkIGxvbmcJc2htYWxsOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OwotfTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXg4Ni9zaG1wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODNhMWZkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zaG1wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NITVBBUkFNX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU0hNUEFSQU1fSAotCi0jZGVmaW5lIFNITUxCQSBQQUdFX1NJWkUJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zaWdjb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlODEzZjQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NpZ2NvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NJR0NPTlRFWFRfSAotI2RlZmluZSBBU01fWDg2X19TSUdDT05URVhUX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLSNkZWZpbmUgRlBfWFNUQVRFX01BR0lDMQkweDQ2NTA1ODUzVQotI2RlZmluZSBGUF9YU1RBVEVfTUFHSUMyCTB4NDY1MDU4NDVVCi0jZGVmaW5lIEZQX1hTVEFURV9NQUdJQzJfU0laRQlzaXplb2YoRlBfWFNUQVRFX01BR0lDMikKLQotLyoKLSAqIGJ5dGVzIDQ2NC4uNTExIGluIHRoZSBjdXJyZW50IDUxMmJ5dGUgbGF5b3V0IG9mIGZ4c2F2ZS9meHJzdG9yIGZyYW1lCi0gKiBhcmUgcmVzZXJ2ZWQgZm9yIFNXIHVzYWdlLiBPbiBjcHUncyBzdXBwb3J0aW5nIHhzYXZlL3hyc3RvciwgdGhlc2UgYnl0ZXMKLSAqIGFyZSB1c2VkIHRvIGV4dGVuZGVkIHRoZSBmcHN0YXRlIHBvaW50ZXIgaW4gdGhlIHNpZ2NvbnRleHQsIHdoaWNoIG5vdwotICogaW5jbHVkZXMgdGhlIGV4dGVuZGVkIHN0YXRlIGluZm9ybWF0aW9uIGFsb25nIHdpdGggZnBzdGF0ZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBQcmVzZW5jZSBvZiBGUF9YU1RBVEVfTUFHSUMxIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBTVyByZXNlcnZlZAotICogYXJlYSBhbmQgRlBfWFNUQVRFX01BR0lDMiBhdCB0aGUgZW5kIG9mIG1lbW9yeSBsYXlvdXQKLSAqIChleHRlbmRlZF9zaXplIC0gRlBfWFNUQVRFX01BR0lDMl9TSVpFKSBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIHRoZQotICogZXh0ZW5kZWQgc3RhdGUgaW5mb3JtYXRpb24gaW4gdGhlIG1lbW9yeSBsYXlvdXQgcG9pbnRlZCBieSB0aGUgZnBzdGF0ZQotICogcG9pbnRlciBpbiBzaWdjb250ZXh0LgotICovCi1zdHJ1Y3QgX2ZweF9zd19ieXRlcyB7Ci0JX191MzIgbWFnaWMxOwkJLyogRlBfWFNUQVRFX01BR0lDMSAqLwotCV9fdTMyIGV4dGVuZGVkX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgdGhlIGxheW91dCByZWZlcnJlZCBieQotCQkJCSAqIGZwc3RhdGUgcG9pbnRlciBpbiB0aGUgc2lnY29udGV4dC4KLQkJCQkgKi8KLQlfX3U2NCB4c3RhdGVfYnY7Ci0JCQkJLyogZmVhdHVyZSBiaXQgbWFzayAoaW5jbHVkaW5nIGZwL3NzZS9leHRlbmRlZAotCQkJCSAqIHN0YXRlKSB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIG1lbW9yeQotCQkJCSAqIGxheW91dC4KLQkJCQkgKi8KLQlfX3UzMiB4c3RhdGVfc2l6ZTsJLyogYWN0dWFsIHhzYXZlIHN0YXRlIHNpemUsIGJhc2VkIG9uIHRoZQotCQkJCSAqIGZlYXR1cmVzIHNhdmVkIGluIHRoZSBsYXlvdXQuCi0JCQkJICogJ2V4dGVuZGVkX3NpemUnIHdpbGwgYmUgZ3JlYXRlciB0aGFuCi0JCQkJICogJ3hzdGF0ZV9zaXplJy4KLQkJCQkgKi8KLQlfX3UzMiBwYWRkaW5nWzddOwkvKiAgZm9yIGZ1dHVyZSB1c2UuICovCi19OwotCi0jaWZkZWYgX19pMzg2X18KLS8qCi0gKiBBcyBkb2N1bWVudGVkIGluIHRoZSBpQkNTMiBzdGFuZGFyZC4uCi0gKgotICogVGhlIGZpcnN0IHBhcnQgb2YgInN0cnVjdCBfZnBzdGF0ZSIgaXMganVzdCB0aGUgbm9ybWFsIGkzODcKLSAqIGhhcmR3YXJlIHNldHVwLCB0aGUgZXh0cmEgInN0YXR1cyIgd29yZCBpcyB1c2VkIHRvIHNhdmUgdGhlCi0gKiBjb3Byb2Nlc3NvciBzdGF0dXMgd29yZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGhhbmRsZXIuCi0gKgotICogUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKLSAqCUdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCi0gKgotICogVGhlIEZQVSBzdGF0ZSBkYXRhIHN0cnVjdHVyZSBoYXMgaGFkIHRvIGdyb3cgdG8gYWNjb21tb2RhdGUgdGhlCi0gKiBleHRlbmRlZCBGUFUgc3RhdGUgcmVxdWlyZWQgYnkgdGhlIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMuCi0gKiBUaGVyZSBpcyBubyBkb2N1bWVudGVkIHN0YW5kYXJkIHRvIGFjY29tcGxpc2ggdGhpcyBhdCB0aGUgbW9tZW50LgotICovCi1zdHJ1Y3QgX2ZwcmVnIHsKLQl1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKLQl1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKLX07Ci0KLXN0cnVjdCBfZnB4cmVnIHsKLQl1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKLQl1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKLQl1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOwotfTsKLQotc3RydWN0IF94bW1yZWcgewotCXVuc2lnbmVkIGxvbmcgZWxlbWVudFs0XTsKLX07Ci0KLXN0cnVjdCBfZnBzdGF0ZSB7Ci0JLyogUmVndWxhciBGUFUgZW52aXJvbm1lbnQgKi8KLQl1bnNpZ25lZCBsb25nCWN3OwotCXVuc2lnbmVkIGxvbmcJc3c7Ci0JdW5zaWduZWQgbG9uZwl0YWc7Ci0JdW5zaWduZWQgbG9uZwlpcG9mZjsKLQl1bnNpZ25lZCBsb25nCWNzc2VsOwotCXVuc2lnbmVkIGxvbmcJZGF0YW9mZjsKLQl1bnNpZ25lZCBsb25nCWRhdGFzZWw7Ci0Jc3RydWN0IF9mcHJlZwlfc3RbOF07Ci0JdW5zaWduZWQgc2hvcnQJc3RhdHVzOwotCXVuc2lnbmVkIHNob3J0CW1hZ2ljOwkJLyogMHhmZmZmID0gcmVndWxhciBGUFUgZGF0YSBvbmx5ICovCi0KLQkvKiBGWFNSIEZQVSBlbnZpcm9ubWVudCAqLwotCXVuc2lnbmVkIGxvbmcJX2Z4c3JfZW52WzZdOwkvKiBGWFNSIEZQVSBlbnYgaXMgaWdub3JlZCAqLwotCXVuc2lnbmVkIGxvbmcJbXhjc3I7Ci0JdW5zaWduZWQgbG9uZwlyZXNlcnZlZDsKLQlzdHJ1Y3QgX2ZweHJlZwlfZnhzcl9zdFs4XTsJLyogRlhTUiBGUFUgcmVnIGRhdGEgaXMgaWdub3JlZCAqLwotCXN0cnVjdCBfeG1tcmVnCV94bW1bOF07Ci0JdW5zaWduZWQgbG9uZwlwYWRkaW5nMVs0NF07Ci0KLQl1bmlvbiB7Ci0JCXVuc2lnbmVkIGxvbmcJcGFkZGluZzJbMTJdOwotCQlzdHJ1Y3QgX2ZweF9zd19ieXRlcyBzd19yZXNlcnZlZDsgLyogcmVwcmVzZW50cyB0aGUgZXh0ZW5kZWQKLQkJCQkJCSAgICogc3RhdGUgaW5mbyAqLwotCX07Ci19OwotCi0jZGVmaW5lIFg4Nl9GWFNSX01BR0lDCQkweDAwMDAKLQotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBzaWdjb250ZXh0IHsKLQl1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7Ci0JdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwotCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKLQl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7Ci0JdW5zaWduZWQgbG9uZyBkaTsKLQl1bnNpZ25lZCBsb25nIHNpOwotCXVuc2lnbmVkIGxvbmcgYnA7Ci0JdW5zaWduZWQgbG9uZyBzcDsKLQl1bnNpZ25lZCBsb25nIGJ4OwotCXVuc2lnbmVkIGxvbmcgZHg7Ci0JdW5zaWduZWQgbG9uZyBjeDsKLQl1bnNpZ25lZCBsb25nIGF4OwotCXVuc2lnbmVkIGxvbmcgdHJhcG5vOwotCXVuc2lnbmVkIGxvbmcgZXJyOwotCXVuc2lnbmVkIGxvbmcgaXA7Ci0JdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzcF9hdF9zaWduYWw7Ci0JdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwotCi0JLyoKLQkgKiBmcHN0YXRlIGlzIHJlYWxseSAoc3RydWN0IF9mcHN0YXRlICopIG9yIChzdHJ1Y3QgX3hzdGF0ZSAqKQotCSAqIGRlcGVuZGluZyBvbiB0aGUgRlBfWFNUQVRFX01BR0lDMSBlbmNvZGVkIGluIHRoZSBTVyByZXNlcnZlZAotCSAqIGJ5dGVzIG9mIChzdHJ1Y3QgX2Zwc3RhdGUpIGFuZCBGUF9YU1RBVEVfTUFHSUMyIHByZXNlbnQgYXQgdGhlIGVuZAotCSAqIG9mIGV4dGVuZGVkIG1lbW9yeSBsYXlvdXQuIFNlZSBjb21tZW50cyBhdCB0aGUgZGVmaW50aW9uIG9mCi0JICogKHN0cnVjdCBfZnB4X3N3X2J5dGVzKQotCSAqLwotCXZvaWQgX191c2VyICpmcHN0YXRlOwkJLyogemVybyB3aGVuIG5vIEZQVS9leHRlbmRlZCBjb250ZXh0ICovCi0JdW5zaWduZWQgbG9uZyBvbGRtYXNrOwotCXVuc2lnbmVkIGxvbmcgY3IyOwotfTsKLSNlbHNlIC8qIF9fS0VSTkVMX18gKi8KLS8qCi0gKiBVc2VyLXNwYWNlIG1pZ2h0IHN0aWxsIHJlbHkgb24gdGhlIG9sZCBkZWZpbml0aW9uOgotICovCi1zdHJ1Y3Qgc2lnY29udGV4dCB7Ci0JdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwotCXVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKLQl1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7Ci0JdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOwotCXVuc2lnbmVkIGxvbmcgZWRpOwotCXVuc2lnbmVkIGxvbmcgZXNpOwotCXVuc2lnbmVkIGxvbmcgZWJwOwotCXVuc2lnbmVkIGxvbmcgZXNwOwotCXVuc2lnbmVkIGxvbmcgZWJ4OwotCXVuc2lnbmVkIGxvbmcgZWR4OwotCXVuc2lnbmVkIGxvbmcgZWN4OwotCXVuc2lnbmVkIGxvbmcgZWF4OwotCXVuc2lnbmVkIGxvbmcgdHJhcG5vOwotCXVuc2lnbmVkIGxvbmcgZXJyOwotCXVuc2lnbmVkIGxvbmcgZWlwOwotCXVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKLQl1bnNpZ25lZCBsb25nIGVmbGFnczsKLQl1bnNpZ25lZCBsb25nIGVzcF9hdF9zaWduYWw7Ci0JdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwotCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBvbGRtYXNrOwotCXVuc2lnbmVkIGxvbmcgY3IyOwotfTsKLSNlbmRpZiAvKiAhX19LRVJORUxfXyAqLwotCi0jZWxzZSAvKiBfX2kzODZfXyAqLwotCi0vKiBGWFNBVkUgZnJhbWUgKi8KLS8qIE5vdGU6IHJlc2VydmVkMS8yIG1heSBzb21lZGF5IGNvbnRhaW4gdmFsdWFibGUgZGF0YS4gQWx3YXlzIHNhdmUvcmVzdG9yZQotICAgdGhlbSB3aGVuIHlvdSBjaGFuZ2Ugc2lnbmFsIGZyYW1lcy4gKi8KLXN0cnVjdCBfZnBzdGF0ZSB7Ci0JX191MTYJY3dkOwotCV9fdTE2CXN3ZDsKLQlfX3UxNgl0d2Q7CQkvKiBOb3RlIHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZQotCQkJCSAgIDMyYml0L3g4Ny9GU0FWRSB0d2QgKi8KLQlfX3UxNglmb3A7Ci0JX191NjQJcmlwOwotCV9fdTY0CXJkcDsKLQlfX3UzMglteGNzcjsKLQlfX3UzMglteGNzcl9tYXNrOwotCV9fdTMyCXN0X3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgKi8KLQlfX3UzMgl4bW1fc3BhY2VbNjRdOwkvKiAxNioxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnICAqLwotCV9fdTMyCXJlc2VydmVkMlsxMl07Ci0JdW5pb24gewotCQlfX3UzMglyZXNlcnZlZDNbMTJdOwotCQlzdHJ1Y3QgX2ZweF9zd19ieXRlcyBzd19yZXNlcnZlZDsgLyogcmVwcmVzZW50cyB0aGUgZXh0ZW5kZWQKLQkJCQkJCSAgICogc3RhdGUgaW5mb3JtYXRpb24gKi8KLQl9OwotfTsKLQotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBzaWdjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nIHI4OwotCXVuc2lnbmVkIGxvbmcgcjk7Ci0JdW5zaWduZWQgbG9uZyByMTA7Ci0JdW5zaWduZWQgbG9uZyByMTE7Ci0JdW5zaWduZWQgbG9uZyByMTI7Ci0JdW5zaWduZWQgbG9uZyByMTM7Ci0JdW5zaWduZWQgbG9uZyByMTQ7Ci0JdW5zaWduZWQgbG9uZyByMTU7Ci0JdW5zaWduZWQgbG9uZyBkaTsKLQl1bnNpZ25lZCBsb25nIHNpOwotCXVuc2lnbmVkIGxvbmcgYnA7Ci0JdW5zaWduZWQgbG9uZyBieDsKLQl1bnNpZ25lZCBsb25nIGR4OwotCXVuc2lnbmVkIGxvbmcgYXg7Ci0JdW5zaWduZWQgbG9uZyBjeDsKLQl1bnNpZ25lZCBsb25nIHNwOwotCXVuc2lnbmVkIGxvbmcgaXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBjczsKLQl1bnNpZ25lZCBzaG9ydCBnczsKLQl1bnNpZ25lZCBzaG9ydCBmczsKLQl1bnNpZ25lZCBzaG9ydCBfX3BhZDA7Ci0JdW5zaWduZWQgbG9uZyBlcnI7Ci0JdW5zaWduZWQgbG9uZyB0cmFwbm87Ci0JdW5zaWduZWQgbG9uZyBvbGRtYXNrOwotCXVuc2lnbmVkIGxvbmcgY3IyOwotCi0JLyoKLQkgKiBmcHN0YXRlIGlzIHJlYWxseSAoc3RydWN0IF9mcHN0YXRlICopIG9yIChzdHJ1Y3QgX3hzdGF0ZSAqKQotCSAqIGRlcGVuZGluZyBvbiB0aGUgRlBfWFNUQVRFX01BR0lDMSBlbmNvZGVkIGluIHRoZSBTVyByZXNlcnZlZAotCSAqIGJ5dGVzIG9mIChzdHJ1Y3QgX2Zwc3RhdGUpIGFuZCBGUF9YU1RBVEVfTUFHSUMyIHByZXNlbnQgYXQgdGhlIGVuZAotCSAqIG9mIGV4dGVuZGVkIG1lbW9yeSBsYXlvdXQuIFNlZSBjb21tZW50cyBhdCB0aGUgZGVmaW50aW9uIG9mCi0JICogKHN0cnVjdCBfZnB4X3N3X2J5dGVzKQotCSAqLwotCXZvaWQgX191c2VyICpmcHN0YXRlOwkJLyogemVybyB3aGVuIG5vIEZQVS9leHRlbmRlZCBjb250ZXh0ICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZDFbOF07Ci19OwotI2Vsc2UgLyogX19LRVJORUxfXyAqLwotLyoKLSAqIFVzZXItc3BhY2UgbWlnaHQgc3RpbGwgcmVseSBvbiB0aGUgb2xkIGRlZmluaXRpb246Ci0gKi8KLXN0cnVjdCBzaWdjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nIHI4OwotCXVuc2lnbmVkIGxvbmcgcjk7Ci0JdW5zaWduZWQgbG9uZyByMTA7Ci0JdW5zaWduZWQgbG9uZyByMTE7Ci0JdW5zaWduZWQgbG9uZyByMTI7Ci0JdW5zaWduZWQgbG9uZyByMTM7Ci0JdW5zaWduZWQgbG9uZyByMTQ7Ci0JdW5zaWduZWQgbG9uZyByMTU7Ci0JdW5zaWduZWQgbG9uZyByZGk7Ci0JdW5zaWduZWQgbG9uZyByc2k7Ci0JdW5zaWduZWQgbG9uZyByYnA7Ci0JdW5zaWduZWQgbG9uZyByYng7Ci0JdW5zaWduZWQgbG9uZyByZHg7Ci0JdW5zaWduZWQgbG9uZyByYXg7Ci0JdW5zaWduZWQgbG9uZyByY3g7Ci0JdW5zaWduZWQgbG9uZyByc3A7Ci0JdW5zaWduZWQgbG9uZyByaXA7Ci0JdW5zaWduZWQgbG9uZyBlZmxhZ3M7CQkvKiBSRkxBR1MgKi8KLQl1bnNpZ25lZCBzaG9ydCBjczsKLQl1bnNpZ25lZCBzaG9ydCBnczsKLQl1bnNpZ25lZCBzaG9ydCBmczsKLQl1bnNpZ25lZCBzaG9ydCBfX3BhZDA7Ci0JdW5zaWduZWQgbG9uZyBlcnI7Ci0JdW5zaWduZWQgbG9uZyB0cmFwbm87Ci0JdW5zaWduZWQgbG9uZyBvbGRtYXNrOwotCXVuc2lnbmVkIGxvbmcgY3IyOwotCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwc3RhdGU7CS8qIHplcm8gd2hlbiBubyBGUFUgY29udGV4dCAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQxWzhdOwotfTsKLSNlbmRpZiAvKiAhX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogIV9faTM4Nl9fICovCi0KLXN0cnVjdCBfeHNhdmVfaGRyIHsKLQlfX3U2NCB4c3RhdGVfYnY7Ci0JX191NjQgcmVzZXJ2ZWQxWzJdOwotCV9fdTY0IHJlc2VydmVkMls1XTsKLX07Ci0KLS8qCi0gKiBFeHRlbmRlZCBzdGF0ZSBwb2ludGVkIGJ5IHRoZSBmcHN0YXRlIHBvaW50ZXIgaW4gdGhlIHNpZ2NvbnRleHQuCi0gKiBJbiBhZGRpdGlvbiB0byB0aGUgZnBzdGF0ZSwgaW5mb3JtYXRpb24gZW5jb2RlZCBpbiB0aGUgeHN0YXRlX2hkcgotICogaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiBvdGhlciBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbgotICogc3VwcG9ydGVkIGJ5IHRoZSBwcm9jZXNzb3IgYW5kIE9TLgotICovCi1zdHJ1Y3QgX3hzdGF0ZSB7Ci0Jc3RydWN0IF9mcHN0YXRlIGZwc3RhdGU7Ci0Jc3RydWN0IF94c2F2ZV9oZHIgeHN0YXRlX2hkcjsKLQkvKiBuZXcgcHJvY2Vzc29yIHN0YXRlIGV4dGVuc2lvbnMgZ28gaGVyZSAqLwotfTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1NJR0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NpZ2NvbnRleHQzMi5oIGIvaW5jbHVkZS9hc20teDg2L3NpZ2NvbnRleHQzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzM0NzAzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zaWdjb250ZXh0MzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU0lHQ09OVEVYVDMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU0lHQ09OVEVYVDMyX0gKLQotLyogc2lnbmFsIGNvbnRleHQgZm9yIDMyYml0IHByb2dyYW1zLiAqLwotCi0jZGVmaW5lIFg4Nl9GWFNSX01BR0lDCQkweDAwMDAKLQotc3RydWN0IF9mcHJlZyB7Ci0JdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07Ci0JdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Ci19OwotCi1zdHJ1Y3QgX2ZweHJlZyB7Ci0JdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07Ci0JdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Ci0JdW5zaWduZWQgc2hvcnQgcGFkZGluZ1szXTsKLX07Ci0KLXN0cnVjdCBfeG1tcmVnIHsKLQlfX3UzMgllbGVtZW50WzRdOwotfTsKLQotLyogRlNBVkUgZnJhbWUgd2l0aCBleHRlbnNpb25zICovCi1zdHJ1Y3QgX2Zwc3RhdGVfaWEzMiB7Ci0JLyogUmVndWxhciBGUFUgZW52aXJvbm1lbnQgKi8KLQlfX3UzMiAJY3c7Ci0JX191MzIJc3c7Ci0JX191MzIJdGFnOwkvKiBub3QgY29tcGF0aWJsZSB0byA2NGJpdCB0d2QgKi8KLQlfX3UzMglpcG9mZjsKLQlfX3UzMgljc3NlbDsKLQlfX3UzMglkYXRhb2ZmOwotCV9fdTMyCWRhdGFzZWw7Ci0Jc3RydWN0IF9mcHJlZwlfc3RbOF07Ci0JdW5zaWduZWQgc2hvcnQJc3RhdHVzOwotCXVuc2lnbmVkIHNob3J0CW1hZ2ljOwkJLyogMHhmZmZmID0gcmVndWxhciBGUFUgZGF0YSBvbmx5ICovCi0KLQkvKiBGWFNSIEZQVSBlbnZpcm9ubWVudCAqLwotCV9fdTMyCV9meHNyX2Vudls2XTsKLQlfX3UzMglteGNzcjsKLQlfX3UzMglyZXNlcnZlZDsKLQlzdHJ1Y3QgX2ZweHJlZwlfZnhzcl9zdFs4XTsKLQlzdHJ1Y3QgX3htbXJlZwlfeG1tWzhdOwkvKiBJdCdzIGFjdHVhbGx5IDE2ICovCi0JX191MzIJcGFkZGluZ1s0NF07Ci0JdW5pb24gewotCQlfX3UzMiBwYWRkaW5nMlsxMl07Ci0JCXN0cnVjdCBfZnB4X3N3X2J5dGVzIHN3X3Jlc2VydmVkOwotCX07Ci19OwotCi1zdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIHsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwotICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7Ci0gICAgICAgdW5zaWduZWQgaW50IGRpOwotICAgICAgIHVuc2lnbmVkIGludCBzaTsKLSAgICAgICB1bnNpZ25lZCBpbnQgYnA7Ci0gICAgICAgdW5zaWduZWQgaW50IHNwOwotICAgICAgIHVuc2lnbmVkIGludCBieDsKLSAgICAgICB1bnNpZ25lZCBpbnQgZHg7Ci0gICAgICAgdW5zaWduZWQgaW50IGN4OwotICAgICAgIHVuc2lnbmVkIGludCBheDsKLSAgICAgICB1bnNpZ25lZCBpbnQgdHJhcG5vOwotICAgICAgIHVuc2lnbmVkIGludCBlcnI7Ci0gICAgICAgdW5zaWduZWQgaW50IGlwOwotICAgICAgIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKLSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0gICAgICAgdW5zaWduZWQgaW50IHNwX2F0X3NpZ25hbDsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7Ci0gICAgICAgdW5zaWduZWQgaW50IGZwc3RhdGU7CQkvKiByZWFsbHkgKHN0cnVjdCBfZnBzdGF0ZV9pYTMyICopICovCi0gICAgICAgdW5zaWduZWQgaW50IG9sZG1hc2s7Ci0gICAgICAgdW5zaWduZWQgaW50IGNyMjsKLX07Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19TSUdDT05URVhUMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLXg4Ni9zaWdpbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOGJkZmIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NpZ2luZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU0lHSU5GT19ICi0jZGVmaW5lIEFTTV9YODZfX1NJR0lORk9fSAotCi0jaWZkZWYgX194ODZfNjRfXwotIyBkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJKDQgKiBzaXplb2YoaW50KSkKLSNlbmRpZgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU0lHSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS14ODYvc2lnbmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YWNjODIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NpZ25hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU0lHTkFMX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU0lHTkFMX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0vKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLwotc3RydWN0IHNpZ2luZm87Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCi0vKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQotICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KLQotI2RlZmluZSBfTlNJRwkJNjQKLQotI2lmZGVmIF9faTM4Nl9fCi0jIGRlZmluZSBfTlNJR19CUFcJMzIKLSNlbHNlCi0jIGRlZmluZSBfTlNJR19CUFcJNjQKLSNlbmRpZgotCi0jZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKLX0gc2lnc2V0X3Q7Ci0KLSNlbHNlCi0vKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KLQotI2RlZmluZSBOU0lHCQkzMgotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFNJR0hVUAkJIDEKLSNkZWZpbmUgU0lHSU5UCQkgMgotI2RlZmluZSBTSUdRVUlUCQkgMwotI2RlZmluZSBTSUdJTEwJCSA0Ci0jZGVmaW5lIFNJR1RSQVAJCSA1Ci0jZGVmaW5lIFNJR0FCUlQJCSA2Ci0jZGVmaW5lIFNJR0lPVAkJIDYKLSNkZWZpbmUgU0lHQlVTCQkgNwotI2RlZmluZSBTSUdGUEUJCSA4Ci0jZGVmaW5lIFNJR0tJTEwJCSA5Ci0jZGVmaW5lIFNJR1VTUjEJCTEwCi0jZGVmaW5lIFNJR1NFR1YJCTExCi0jZGVmaW5lIFNJR1VTUjIJCTEyCi0jZGVmaW5lIFNJR1BJUEUJCTEzCi0jZGVmaW5lIFNJR0FMUk0JCTE0Ci0jZGVmaW5lIFNJR1RFUk0JCTE1Ci0jZGVmaW5lIFNJR1NUS0ZMVAkxNgotI2RlZmluZSBTSUdDSExECQkxNwotI2RlZmluZSBTSUdDT05UCQkxOAotI2RlZmluZSBTSUdTVE9QCQkxOQotI2RlZmluZSBTSUdUU1RQCQkyMAotI2RlZmluZSBTSUdUVElOCQkyMQotI2RlZmluZSBTSUdUVE9VCQkyMgotI2RlZmluZSBTSUdVUkcJCTIzCi0jZGVmaW5lIFNJR1hDUFUJCTI0Ci0jZGVmaW5lIFNJR1hGU1oJCTI1Ci0jZGVmaW5lIFNJR1ZUQUxSTQkyNgotI2RlZmluZSBTSUdQUk9GCQkyNwotI2RlZmluZSBTSUdXSU5DSAkyOAotI2RlZmluZSBTSUdJTwkJMjkKLSNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KLS8qCi0jZGVmaW5lIFNJR0xPU1QJCTI5Ci0qLwotI2RlZmluZSBTSUdQV1IJCTMwCi0jZGVmaW5lIFNJR1NZUwkJMzEKLSNkZWZpbmUJU0lHVU5VU0VECTMxCi0KLS8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCi0jZGVmaW5lIFNJR1JUTUlOCTMyCi0jZGVmaW5lIFNJR1JUTUFYCV9OU0lHCi0KLS8qCi0gKiBTQV9GTEFHUyB2YWx1ZXM6Ci0gKgotICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCi0gKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKLSAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgotICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgotICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCi0gKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KLSAqCi0gKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCi0gKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCi0gKi8KLSNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDF1Ci0jZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAydQotI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDR1Ci0jZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMHUKLSNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwdQotI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDB1Ci0jZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwdQotCi0jZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCi0jZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0KLSNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAotCi0vKgotICogc2lnYWx0c3RhY2sgY29udHJvbHMKLSAqLwotI2RlZmluZSBTU19PTlNUQUNLCTEKLSNkZWZpbmUgU1NfRElTQUJMRQkyCi0KLSNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAotI2RlZmluZSBTSUdTVEtTWgk4MTkyCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2lmZGVmIF9faTM4Nl9fCi0jIGlmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCW9sZF9zaWdzZXRfdCBzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Ci19OwotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Ci0Jc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotc3RydWN0IGtfc2lnYWN0aW9uIHsKLQlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotfTsKLQotZXh0ZXJuIHZvaWQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqLCB2b2lkICosIF9fdTMyKTsKLQotIyBlbHNlIC8qIF9fS0VSTkVMX18gKi8KLS8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLwotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHsKLQl1bmlvbiB7Ci0JICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKLQkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7Ci0JfSBfdTsKLQlzaWdzZXRfdCBzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0Jdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKLX07Ci0KLSNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgotI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgotCi0jIGVuZGlmIC8qICEgX19LRVJORUxfXyAqLwotI2Vsc2UgLyogX19pMzg2X18gKi8KLQotc3RydWN0IHNpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOwotCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLXN0cnVjdCBrX3NpZ2FjdGlvbiB7Ci0Jc3RydWN0IHNpZ2FjdGlvbiBzYTsKLX07Ci0KLSNlbmRpZiAvKiAhX19pMzg2X18gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewotCXZvaWQgX191c2VyICpzc19zcDsKLQlpbnQgc3NfZmxhZ3M7Ci0Jc2l6ZV90IHNzX3NpemU7Ci19IHN0YWNrX3Q7Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KLQotI2lmZGVmIF9faTM4Nl9fCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUwotCi0jZGVmaW5lIHNpZ2FkZHNldChzZXQsc2lnKQkJICAgIFwKLQkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKQkgICAgXAotCSA/IF9fY29uc3Rfc2lnYWRkc2V0KChzZXQpLCAoc2lnKSkgIFwKLQkgOiBfX2dlbl9zaWdhZGRzZXQoKHNldCksIChzaWcpKSkKLQotc3RhdGljIGlubGluZSB2b2lkIF9fZ2VuX3NpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKLXsKLQlhc20oImJ0c2wgJTEsJTAiIDogIittIigqc2V0KSA6ICJJciIoX3NpZyAtIDEpIDogImNjIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NvbnN0X3NpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKLXsKLQl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOwotCXNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gfD0gMSA8PCAoc2lnICUgX05TSUdfQlBXKTsKLX0KLQotI2RlZmluZSBzaWdkZWxzZXQoc2V0LCBzaWcpCQkgICAgXAotCShfX2J1aWx0aW5fY29uc3RhbnRfcChzaWcpCSAgICBcCi0JID8gX19jb25zdF9zaWdkZWxzZXQoKHNldCksIChzaWcpKSAgXAotCSA6IF9fZ2VuX3NpZ2RlbHNldCgoc2V0KSwgKHNpZykpKQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2dlbl9zaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JYXNtKCJidHJsICUxLCUwIiA6ICIrbSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19jb25zdF9zaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKLQlzZXQtPnNpZ1tzaWcgLyBfTlNJR19CUFddICY9IH4oMSA8PCAoc2lnICUgX05TSUdfQlBXKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fY29uc3Rfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKLQlyZXR1cm4gMSAmIChzZXQtPnNpZ1tzaWcgLyBfTlNJR19CUFddID4+IChzaWcgJSBfTlNJR19CUFcpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19nZW5fc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JaW50IHJldDsKLQlhc20oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgotCSAgICA6ICI9ciIocmV0KSA6ICJtIigqc2V0KSwgIklyIihfc2lnLTEpIDogImNjIik7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBzaWdpc21lbWJlcihzZXQsIHNpZykJCQlcCi0JKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpZykJCVwKLQkgPyBfX2NvbnN0X3NpZ2lzbWVtYmVyKChzZXQpLCAoc2lnKSkJXAotCSA6IF9fZ2VuX3NpZ2lzbWVtYmVyKChzZXQpLCAoc2lnKSkpCi0KLXN0YXRpYyBpbmxpbmUgaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3JkKQotewotCWFzbSgiYnNmbCAlMSwlMCIgOiAiPXIiKHdvcmQpIDogInJtIih3b3JkKSA6ICJjYyIpOwotCXJldHVybiB3b3JkOwotfQotCi1zdHJ1Y3QgcHRfcmVnczsKLQotI2Vsc2UgLyogX19pMzg2X18gKi8KLQotI3VuZGVmIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKLQotI2VuZGlmIC8qICFfX2kzODZfXyAqLwotCi0jZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc21wLmggYi9pbmNsdWRlL2FzbS14ODYvc21wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YWZjMjkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NtcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU01QX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU01QX0gKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+Ci0KLS8qCi0gKiBXZSBuZWVkIHRoZSBBUElDIGRlZmluaXRpb25zIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiAnc21wLmgnCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLSMgaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotIyBpbmNsdWRlIDxhc20vYXBpYy5oPgotIyBpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLSMgIGluY2x1ZGUgPGFzbS9pb19hcGljLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxhc20vcGRhLmg+Ci0jaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+Ci0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfaW5pdGlhbGl6ZWQ7Ci1leHRlcm4gY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwotCi1leHRlcm4gdm9pZCAoKm10cnJfaG9vaykodm9pZCk7Ci1leHRlcm4gdm9pZCB6YXBfbG93X21hcHBpbmdzKHZvaWQpOwotCi1leHRlcm4gaW50IF9fY3B1aW5pdCBnZXRfbG9jYWxfcGRhKGludCBjcHUpOwotCi1leHRlcm4gaW50IHNtcF9udW1fc2libGluZ3M7Ci1leHRlcm4gdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfaW5pdGlhbGl6ZWQ7Ci0KLURFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7Ci1ERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfY29yZV9tYXApOwotREVDTEFSRV9QRVJfQ1BVKHUxNiwgY3B1X2xsY19pZCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotREVDTEFSRV9QRVJfQ1BVKGludCwgY3B1X251bWJlcik7Ci0jZW5kaWYKLQotREVDTEFSRV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2NwdV90b19hcGljaWQpOwotREVDTEFSRV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2Jpb3NfY3B1X2FwaWNpZCk7Ci0KLS8qIFN0YXRpYyBzdGF0ZSBpbiBoZWFkLlMgdXNlZCB0byBzZXQgdXAgYSBDUFUgKi8KLWV4dGVybiBzdHJ1Y3QgewotCXZvaWQgKnNwOwotCXVuc2lnbmVkIHNob3J0IHNzOwotfSBzdGFja19zdGFydDsKLQotc3RydWN0IHNtcF9vcHMgewotCXZvaWQgKCpzbXBfcHJlcGFyZV9ib290X2NwdSkodm9pZCk7Ci0Jdm9pZCAoKnNtcF9wcmVwYXJlX2NwdXMpKHVuc2lnbmVkIG1heF9jcHVzKTsKLQl2b2lkICgqc21wX2NwdXNfZG9uZSkodW5zaWduZWQgbWF4X2NwdXMpOwotCi0Jdm9pZCAoKnNtcF9zZW5kX3N0b3ApKHZvaWQpOwotCXZvaWQgKCpzbXBfc2VuZF9yZXNjaGVkdWxlKShpbnQgY3B1KTsKLQotCWludCAoKmNwdV91cCkodW5zaWduZWQgY3B1KTsKLQlpbnQgKCpjcHVfZGlzYWJsZSkodm9pZCk7Ci0Jdm9pZCAoKmNwdV9kaWUpKHVuc2lnbmVkIGludCBjcHUpOwotCXZvaWQgKCpwbGF5X2RlYWQpKHZvaWQpOwotCi0Jdm9pZCAoKnNlbmRfY2FsbF9mdW5jX2lwaSkoY3B1bWFza190IG1hc2spOwotCXZvaWQgKCpzZW5kX2NhbGxfZnVuY19zaW5nbGVfaXBpKShpbnQgY3B1KTsKLX07Ci0KLS8qIEdsb2JhbHMgZHVlIHRvIHBhcmF2aXJ0ICovCi1leHRlcm4gdm9pZCBzZXRfY3B1X3NpYmxpbmdfbWFwKGludCBjcHUpOwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKLSNkZWZpbmUgc3RhcnR1cF9pcGlfaG9vayhwaHlzX2FwaWNpZCwgc3RhcnRfZWlwLCBzdGFydF9lc3ApIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotZXh0ZXJuIHN0cnVjdCBzbXBfb3BzIHNtcF9vcHM7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpCi17Ci0Jc21wX29wcy5zbXBfc2VuZF9zdG9wKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQotewotCXNtcF9vcHMuc21wX3ByZXBhcmVfYm9vdF9jcHUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQotewotCXNtcF9vcHMuc21wX3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKLQlzbXBfb3BzLnNtcF9jcHVzX2RvbmUobWF4X2NwdXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQotewotCXJldHVybiBzbXBfb3BzLmNwdV91cChjcHUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2NwdV9kaXNhYmxlKHZvaWQpCi17Ci0JcmV0dXJuIHNtcF9vcHMuY3B1X2Rpc2FibGUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXNtcF9vcHMuY3B1X2RpZShjcHUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGxheV9kZWFkKHZvaWQpCi17Ci0Jc21wX29wcy5wbGF5X2RlYWQoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKLXsKLQlzbXBfb3BzLnNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSkKLXsKLQlzbXBfb3BzLnNlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkoY3B1KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzaykKLXsKLQlzbXBfb3BzLnNlbmRfY2FsbF9mdW5jX2lwaShtYXNrKTsKLX0KLQotdm9pZCBjcHVfZGlzYWJsZV9jb21tb24odm9pZCk7Ci12b2lkIG5hdGl2ZV9zbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKTsKLXZvaWQgbmF0aXZlX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKLXZvaWQgbmF0aXZlX3NtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKTsKLWludCBuYXRpdmVfY3B1X3VwKHVuc2lnbmVkIGludCBjcHVudW0pOwotaW50IG5hdGl2ZV9jcHVfZGlzYWJsZSh2b2lkKTsKLXZvaWQgbmF0aXZlX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Ci12b2lkIG5hdGl2ZV9wbGF5X2RlYWQodm9pZCk7Ci12b2lkIHBsYXlfZGVhZF9jb21tb24odm9pZCk7Ci0KLXZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX2lwaShjcHVtYXNrX3QgbWFzayk7Ci12b2lkIG5hdGl2ZV9zZW5kX2NhbGxfZnVuY19zaW5nbGVfaXBpKGludCBjcHUpOwotCi1leHRlcm4gdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKTsKLQotdm9pZCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKTsKLSNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KQotCi0vKiBXZSBkb24ndCBtYXJrIENQVXMgb25saW5lIHVudGlsIF9fY3B1X3VwKCksIHNvIHdlIG5lZWQgYW5vdGhlciBtZWFzdXJlICovCi1zdGF0aWMgaW5saW5lIGludCBudW1fYm9vdGluZ19jcHVzKHZvaWQpCi17Ci0JcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9jYWxsb3V0X21hcCk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi1leHRlcm4gdW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMl9TTVAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG5lZWRlZCBieSBhbGwgU01QIHN5c3RlbXMuIEl0IG11c3QgX2Fsd2F5c18gYmUgdmFsaWQKLSAqIGZyb20gdGhlIGluaXRpYWwgc3RhcnR1cC4gV2UgbWFwIEFQSUNfQkFTRSB2ZXJ5IGVhcmx5IGluIHBhZ2Vfc2V0dXAoKSwKLSAqIHNvIHRoaXMgaXMgY29ycmVjdCBpbiB0aGUgeDg2IGNhc2UuCi0gKi8KLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAoeDg2X3JlYWRfcGVyY3B1KGNwdV9udW1iZXIpKQotZXh0ZXJuIGludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl82NF9TTVApCi0jZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJcmVhZF9wZGEoY3B1bnVtYmVyKQotCi0jZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwkJCQkJCVwKLQlfX2FzbV9fKCJhbmRxICUlcnNwLCUwOyAiOiI9ciIgKHRpKSA6ICIwIiAoQ1VSUkVOVF9NQVNLKSk7CVwKLQl0aS0+Y3B1OwkJCQkJCQlcCi19KQotI2RlZmluZSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKQkJc21wX3Byb2Nlc3Nvcl9pZCgpCi0KLSNlbHNlIC8qICFDT05GSUdfWDg2XzMyX1NNUCAmJiAhQ09ORklHX1g4Nl82NF9TTVAgKi8KLSNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAotI2RlZmluZSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAotI2RlZmluZSBzdGFja19zbXBfcHJvY2Vzc29yX2lkKCkgCTAKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0KLSNpZm5kZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIGlubGluZSBpbnQgbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLwotCXJldHVybiBHRVRfQVBJQ19MT0dJQ0FMX0lEKCoodTMyICopKEFQSUNfQkFTRSArIEFQSUNfTERSKSk7Ci19Ci0KLSNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfYXBpY19pZCh2b2lkKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlyZWcgPSAqKHUzMiAqKShBUElDX0JBU0UgKyBBUElDX0lEKTsKLQotCXJldHVybiBHRVRfQVBJQ19JRChyZWcpOwotfQotI2VuZGlmCi0KLQotIyBpZiBkZWZpbmVkKEFQSUNfREVGSU5JVElPTikgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotZXh0ZXJuIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7Ci0jIGVsc2UKLSNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KLXN0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCS8qIHdlIGRvbid0IHdhbnQgdG8gbWFyayB0aGlzIGFjY2VzcyB2b2xhdGlsZSAtIGJhZCBjb2RlIGdlbmVyYXRpb24gKi8KLQlyZXR1cm4gcmVhZF9hcGljX2lkKCk7Ci19Ci0jIGVuZGlmIC8qIEFQSUNfREVGSU5JVElPTiAqLwotCi0jZWxzZSAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KLQotIyBpZm5kZWYgQ09ORklHX1NNUAotIyAgZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCTAKLSMgZW5kaWYKLQotI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogQVNNX1g4Nl9fU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zb2NrZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI3MzI3NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc29ja2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NPQ0tFVF9ICi0jZGVmaW5lIEFTTV9YODZfX1NPQ0tFVF9ICi0KLSNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgotCi0vKiBGb3Igc2V0c29ja29wdCgyKSAqLwotI2RlZmluZSBTT0xfU09DS0VUCTEKLQotI2RlZmluZSBTT19ERUJVRwkxCi0jZGVmaW5lIFNPX1JFVVNFQUREUgkyCi0jZGVmaW5lIFNPX1RZUEUJCTMKLSNkZWZpbmUgU09fRVJST1IJNAotI2RlZmluZSBTT19ET05UUk9VVEUJNQotI2RlZmluZSBTT19CUk9BRENBU1QJNgotI2RlZmluZSBTT19TTkRCVUYJNwotI2RlZmluZSBTT19SQ1ZCVUYJOAotI2RlZmluZSBTT19TTkRCVUZGT1JDRQkzMgotI2RlZmluZSBTT19SQ1ZCVUZGT1JDRQkzMwotI2RlZmluZSBTT19LRUVQQUxJVkUJOQotI2RlZmluZSBTT19PT0JJTkxJTkUJMTAKLSNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKLSNkZWZpbmUgU09fUFJJT1JJVFkJMTIKLSNkZWZpbmUgU09fTElOR0VSCTEzCi0jZGVmaW5lIFNPX0JTRENPTVBBVAkxNAotLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLwotI2RlZmluZSBTT19QQVNTQ1JFRAkxNgotI2RlZmluZSBTT19QRUVSQ1JFRAkxNwotI2RlZmluZSBTT19SQ1ZMT1dBVAkxOAotI2RlZmluZSBTT19TTkRMT1dBVAkxOQotI2RlZmluZSBTT19SQ1ZUSU1FTwkyMAotI2RlZmluZSBTT19TTkRUSU1FTwkyMQotCi0vKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLwotI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMjIKLSNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMjMKLSNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCQkyNAotCi0jZGVmaW5lIFNPX0JJTkRUT0RFVklDRQkyNQotCi0vKiBTb2NrZXQgZmlsdGVyaW5nICovCi0jZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgICAgICAgIDI2Ci0jZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgICAgICAgIDI3Ci0KLSNkZWZpbmUgU09fUEVFUk5BTUUJCTI4Ci0jZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKLSNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCi0KLSNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKLQotI2RlZmluZSBTT19QRUVSU0VDCQkzMQotI2RlZmluZSBTT19QQVNTU0VDCQkzNAotI2RlZmluZSBTT19USU1FU1RBTVBOUwkJMzUKLSNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TCQlTT19USU1FU1RBTVBOUwotCi0jZGVmaW5lIFNPX01BUksJCQkzNgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS14ODYvc29ja2lvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDA2NzA0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zb2NraW9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NPQ0tJT1NfSAotI2RlZmluZSBBU01fWDg2X19TT0NLSU9TX0gKLQotLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLwotI2RlZmluZSBGSU9TRVRPV04JMHg4OTAxCi0jZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKLSNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMwotI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0Ci0jZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1Ci0jZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKHRpbWV2YWwpICovCi0jZGVmaW5lIFNJT0NHU1RBTVBOUwkweDg5MDcJCS8qIEdldCBzdGFtcCAodGltZXNwZWMpICovCi0KLSNlbmRpZiAvKiBBU01fWDg2X19TT0NLSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zcGFyc2VtZW0uaCBiL2luY2x1ZGUvYXNtLXg4Ni9zcGFyc2VtZW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmOGU2Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3BhcnNlbWVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NQQVJTRU1FTV9ICi0jZGVmaW5lIEFTTV9YODZfX1NQQVJTRU1FTV9ICi0KLSNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCi0vKgotICogZ2VuZXJpYyBub24tbGluZWFyIG1lbW9yeSBzdXBwb3J0OgotICoKLSAqIDEpIHdlIHdpbGwgbm90IHNwbGl0IG1lbW9yeSBpbnRvIG1vcmUgY2h1bmtzIHRoYW4gd2lsbCBmaXQgaW50byB0aGUgZmxhZ3MKLSAqICAgIGZpZWxkIG9mIHRoZSBzdHJ1Y3QgcGFnZQotICoKLSAqIFNFQ1RJT05fU0laRV9CSVRTCQkyXm46IHNpemUgb2YgZWFjaCBzZWN0aW9uCi0gKiBNQVhfUEhZU0FERFJfQklUUwkJMl5uOiBtYXggc2l6ZSBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCi0gKiBNQVhfUEhZU01FTV9CSVRTCQkyXm46IGhvdyBtdWNoIG1lbW9yeSB3ZSBjYW4gaGF2ZSBpbiB0aGF0IHNwYWNlCi0gKgotICovCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGlmZGVmIENPTkZJR19YODZfUEFFCi0jICBkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMJMjkKLSMgIGRlZmluZSBNQVhfUEhZU0FERFJfQklUUwkzNgotIyAgZGVmaW5lIE1BWF9QSFlTTUVNX0JJVFMJMzYKLSMgZWxzZQotIyAgZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCTI2Ci0jICBkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMJMzIKLSMgIGRlZmluZSBNQVhfUEhZU01FTV9CSVRTCTMyCi0jIGVuZGlmCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0jIGRlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyNyAvKiBtYXR0IC0gMTI4IGlzIGNvbnZlbmllbnQgcmlnaHQgbm93ICovCi0jIGRlZmluZSBNQVhfUEhZU0FERFJfQklUUwk0NAotIyBkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwk0NAotI2VuZGlmCi0KLSNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCi0jZW5kaWYgLyogQVNNX1g4Nl9fU1BBUlNFTUVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1N2ZmN2YuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNjQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19TUElOTE9DS19ICi0jZGVmaW5lIEFTTV9YODZfX1NQSU5MT0NLX0gKLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vcndsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLS8qCi0gKiBZb3VyIGJhc2ljIFNNUCBzcGlubG9ja3MsIGFsbG93aW5nIG9ubHkgYSBzaW5nbGUgQ1BVIGFueXdoZXJlCi0gKgotICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgVGhlcmUgYXJlIHR3byB2YXJpYW50cywgb25lIGNsZWFycyBJUlEncwotICogb24gdGhlIGxvY2FsIHByb2Nlc3Nvciwgb25lIGRvZXMgbm90LgotICoKLSAqIFRoZXNlIGFyZSBmYWlyIEZJRk8gdGlja2V0IGxvY2tzLCB3aGljaCBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gMjU2Ci0gKiBDUFVzLgotICoKLSAqICh0aGUgdHlwZSBkZWZpbml0aW9ucyBhcmUgaW4gYXNtL3NwaW5sb2NrX3R5cGVzLmgpCi0gKi8KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIExPQ0tfUFRSX1JFRyAiYSIKLSMgZGVmaW5lIFJFR19QVFJfTU9ERSAiayIKLSNlbHNlCi0jIGRlZmluZSBMT0NLX1BUUl9SRUcgIkQiCi0jIGRlZmluZSBSRUdfUFRSX01PREUgInEiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgXAotCShkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpKQotLyoKLSAqIE9uIFBQcm8gU01QIG9yIGlmIHdlIGFyZSB1c2luZyBPT1NUT1JFLCB3ZSB1c2UgYSBsb2NrZWQgb3BlcmF0aW9uIHRvIHVubG9jawotICogKFBQcm8gZXJyYXRhIDY2LCA5MikKLSAqLwotIyBkZWZpbmUgVU5MT0NLX0xPQ0tfUFJFRklYIExPQ0tfUFJFRklYCi0jZWxzZQotIyBkZWZpbmUgVU5MT0NLX0xPQ0tfUFJFRklYCi0jZW5kaWYKLQotLyoKLSAqIFRpY2tldCBsb2NrcyBhcmUgY29uY2VwdHVhbGx5IHR3byBwYXJ0cywgb25lIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgaGVhZCBvZgotICogdGhlIHF1ZXVlLCBhbmQgdGhlIG90aGVyIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGFpbC4gVGhlIGxvY2sgaXMgYWNxdWlyZWQKLSAqIGJ5IGF0b21pY2FsbHkgbm90aW5nIHRoZSB0YWlsIGFuZCBpbmNyZW1lbnRpbmcgaXQgYnkgb25lICh0aHVzIGFkZGluZwotICogb3Vyc2VsZiB0byB0aGUgcXVldWUgYW5kIG5vdGluZyBvdXIgcG9zaXRpb24pLCB0aGVuIHdhaXRpbmcgdW50aWwgdGhlIGhlYWQKLSAqIGJlY29tZXMgZXF1YWwgdG8gdGhlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSB0YWlsLgotICoKLSAqIFdlIHVzZSBhbiB4YWRkIGNvdmVyaW5nICpib3RoKiBwYXJ0cyBvZiB0aGUgbG9jaywgdG8gaW5jcmVtZW50IHRoZSB0YWlsIGFuZAotICogYWxzbyBsb2FkIHRoZSBwb3NpdGlvbiBvZiB0aGUgaGVhZCwgd2hpY2ggdGFrZXMgY2FyZSBvZiBtZW1vcnkgb3JkZXJpbmcKLSAqIGlzc3VlcyBhbmQgc2hvdWxkIGJlIG9wdGltYWwgZm9yIHRoZSB1bmNvbnRlbmRlZCBjYXNlLiBOb3RlIHRoZSB0YWlsIG11c3QgYmUKLSAqIGluIHRoZSBoaWdoIHBhcnQsIGJlY2F1c2UgYSB3aWRlIHhhZGQgaW5jcmVtZW50IG9mIHRoZSBsb3cgcGFydCB3b3VsZCBjYXJyeQotICogdXAgYW5kIGNvbnRhbWluYXRlIHRoZSBoaWdoIHBhcnQuCi0gKgotICogV2l0aCBmZXdlciB0aGFuIDJeOCBwb3NzaWJsZSBDUFVzLCB3ZSBjYW4gdXNlIHg4NidzIHBhcnRpYWwgcmVnaXN0ZXJzIHRvCi0gKiBzYXZlIHNvbWUgaW5zdHJ1Y3Rpb25zIGFuZCBtYWtlIHRoZSBjb2RlIG1vcmUgZWxlZ2FudC4gVGhlcmUgcmVhbGx5IGlzbid0Ci0gKiBtdWNoIGJldHdlZW4gdGhlbSBpbiBwZXJmb3JtYW5jZSB0aG91Z2gsIGVzcGVjaWFsbHkgYXMgbG9ja3MgYXJlIG91dCBvZiBsaW5lLgotICovCi0jaWYgKE5SX0NQVVMgPCAyNTYpCi0jZGVmaW5lIFRJQ0tFVF9TSElGVCA4Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0Jc2hvcnQgaW5jID0gMHgwMTAwOwotCi0JYXNtIHZvbGF0aWxlICgKLQkJTE9DS19QUkVGSVggInhhZGR3ICV3MCwgJTFcbiIKLQkJIjE6XHQiCi0JCSJjbXBiICVoMCwgJWIwXG5cdCIKLQkJImplIDJmXG5cdCIKLQkJInJlcCA7IG5vcFxuXHQiCi0JCSJtb3ZiICUxLCAlYjBcblx0IgotCQkvKiBkb24ndCBuZWVkIGxmZW5jZSBoZXJlLCBiZWNhdXNlIGxvYWRzIGFyZSBpbi1vcmRlciAqLwotCQkiam1wIDFiXG4iCi0JCSIyOiIKLQkJOiAiK1EiIChpbmMpLCAiK20iIChsb2NrLT5zbG9jaykKLQkJOgotCQk6ICJtZW1vcnkiLCAiY2MiKTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCWludCB0bXAsIG5ldzsKLQotCWFzbSB2b2xhdGlsZSgibW92endsICUyLCAlMFxuXHQiCi0JCSAgICAgImNtcGIgJWgwLCViMFxuXHQiCi0JCSAgICAgImxlYWwgMHgxMDAoJSIgUkVHX1BUUl9NT0RFICIwKSwgJTFcblx0IgotCQkgICAgICJqbmUgMWZcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICJjbXB4Y2hndyAldzEsJTJcblx0IgotCQkgICAgICIxOiIKLQkJICAgICAic2V0ZSAlYjFcblx0IgotCQkgICAgICJtb3Z6YmwgJWIxLCUwXG5cdCIKLQkJICAgICA6ICI9JmEiICh0bXApLCAiPSZxIiAobmV3KSwgIittIiAobG9jay0+c2xvY2spCi0JCSAgICAgOgotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCi0JcmV0dXJuIHRtcDsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCWFzbSB2b2xhdGlsZShVTkxPQ0tfTE9DS19QUkVGSVggImluY2IgJTAiCi0JCSAgICAgOiAiK20iIChsb2NrLT5zbG9jaykKLQkJICAgICA6Ci0JCSAgICAgOiAibWVtb3J5IiwgImNjIik7Ci19Ci0jZWxzZQotI2RlZmluZSBUSUNLRVRfU0hJRlQgMTYKLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgaW5jID0gMHgwMDAxMDAwMDsKLQlpbnQgdG1wOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTFcbiIKLQkJICAgICAibW92endsICV3MCwgJTJcblx0IgotCQkgICAgICJzaHJsICQxNiwgJTBcblx0IgotCQkgICAgICIxOlx0IgotCQkgICAgICJjbXBsICUwLCAlMlxuXHQiCi0JCSAgICAgImplIDJmXG5cdCIKLQkJICAgICAicmVwIDsgbm9wXG5cdCIKLQkJICAgICAibW92endsICUxLCAlMlxuXHQiCi0JCSAgICAgLyogZG9uJ3QgbmVlZCBsZmVuY2UgaGVyZSwgYmVjYXVzZSBsb2FkcyBhcmUgaW4tb3JkZXIgKi8KLQkJICAgICAiam1wIDFiXG4iCi0JCSAgICAgIjI6IgotCQkgICAgIDogIityIiAoaW5jKSwgIittIiAobG9jay0+c2xvY2spLCAiPSZyIiAodG1wKQotCQkgICAgIDoKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCWludCB0bXA7Ci0JaW50IG5ldzsKLQotCWFzbSB2b2xhdGlsZSgibW92bCAlMiwlMFxuXHQiCi0JCSAgICAgIm1vdmwgJTAsJTFcblx0IgotCQkgICAgICJyb2xsICQxNiwgJTBcblx0IgotCQkgICAgICJjbXBsICUwLCUxXG5cdCIKLQkJICAgICAibGVhbCAweDAwMDEwMDAwKCUiIFJFR19QVFJfTU9ERSAiMCksICUxXG5cdCIKLQkJICAgICAiam5lIDFmXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiY21weGNoZ2wgJTEsJTJcblx0IgotCQkgICAgICIxOiIKLQkJICAgICAic2V0ZSAlYjFcblx0IgotCQkgICAgICJtb3Z6YmwgJWIxLCUwXG5cdCIKLQkJICAgICA6ICI9JmEiICh0bXApLCAiPSZxIiAobmV3KSwgIittIiAobG9jay0+c2xvY2spCi0JCSAgICAgOgotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCi0JcmV0dXJuIHRtcDsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCWFzbSB2b2xhdGlsZShVTkxPQ0tfTE9DS19QUkVGSVggImluY3cgJTAiCi0JCSAgICAgOiAiK20iIChsb2NrLT5zbG9jaykKLQkJICAgICA6Ci0JCSAgICAgOiAibWVtb3J5IiwgImNjIik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgX190aWNrZXRfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0JaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnNsb2NrKTsKLQotCXJldHVybiAhISgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIF4gdG1wKSAmICgoMSA8PCBUSUNLRVRfU0hJRlQpIC0gMSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+c2xvY2spOwotCi0JcmV0dXJuICgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIC0gdG1wKSAmICgoMSA8PCBUSUNLRVRfU0hJRlQpIC0gMSkpID4gMTsKLX0KLQotI2lmZGVmIENPTkZJR19QQVJBVklSVAotLyoKLSAqIERlZmluZSB2aXJ0dWFsaXphdGlvbi1mcmllbmRseSBvbGQtc3R5bGUgbG9jayBieXRlIGxvY2ssIGZvciB1c2UgaW4KLSAqIHB2X2xvY2tfb3BzIGlmIGRlc2lyZWQuCi0gKgotICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIHByZS0yLjYuMjQgc3BpbmxvY2sgYnkgYWx3YXlzIHVzaW5nIHhjaGdiCi0gKiByYXRoZXIgdGhhbiBkZWNiIHRvIHRha2UgdGhlIGxvY2s7IHRoaXMgYWxsb3dzIGl0IHRvIHVzZSBhCi0gKiB6ZXJvLWluaXRpYWxpemVkIGxvY2sgc3RydWN0dXJlLiAgSXQgYWxzbyBtYWludGFpbnMgYSAxLWJ5dGUKLSAqIGNvbnRlbnRpb24gY291bnRlciwgc28gdGhhdCB3ZSBjYW4gaW1wbGVtZW50Ci0gKiBfX2J5dGVfc3Bpbl9pc19jb250ZW5kZWQuCi0gKi8KLXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgewotCXM4IGxvY2s7Ci0Jczggc3Bpbm5lcnM7Ci19OwotCi1zdGF0aWMgaW5saW5lIGludCBfX2J5dGVfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0Jc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqYmwgPSAoc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqKWxvY2s7Ci0JcmV0dXJuIGJsLT5sb2NrICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fYnl0ZV9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKLQlyZXR1cm4gYmwtPnNwaW5uZXJzICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2J5dGVfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOwotCXM4IHZhbCA9IDE7Ci0KLQlhc20oIjE6IHhjaGdiICUxLCAlMFxuIgotCSAgICAiICAgdGVzdCAlMSwlMVxuIgotCSAgICAiICAganogM2ZcbiIKLQkgICAgIiAgICIgTE9DS19QUkVGSVggImluY2IgJTJcbiIKLQkgICAgIjI6IHJlcDtub3BcbiIKLQkgICAgIiAgIGNtcGIgJDEsICUwXG4iCi0JICAgICIgICBqZSAyYlxuIgotCSAgICAiICAgIiBMT0NLX1BSRUZJWCAiZGVjYiAlMlxuIgotCSAgICAiICAgam1wIDFiXG4iCi0JICAgICIzOiIKLQkgICAgOiAiK20iIChibC0+bG9jayksICIrcSIgKHZhbCksICIrbSIgKGJsLT5zcGlubmVycyk6IDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2J5dGVfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOwotCXU4IG9sZCA9IDE7Ci0KLQlhc20oInhjaGdiICUxLCUwIgotCSAgICA6ICIrbSIgKGJsLT5sb2NrKSwgIitxIiAob2xkKSA6IDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIG9sZCA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19ieXRlX3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOwotCXNtcF93bWIoKTsKLQlibC0+bG9jayA9IDA7Ci19Ci0jZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLwotc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKGxvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX190aWNrZXRfc3Bpbl9pc19jb250ZW5kZWQobG9jayk7Ci19Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0JX190aWNrZXRfc3Bpbl9sb2NrKGxvY2spOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9fdGlja2V0X3NwaW5fdHJ5bG9jayhsb2NrKTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCV9fdGlja2V0X3NwaW5fdW5sb2NrKGxvY2spOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLAotCQkJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCV9fcmF3X3NwaW5fbG9jayhsb2NrKTsKLX0KLQotI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQl3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpCi0JCWNwdV9yZWxheCgpOwotfQotCi0vKgotICogUmVhZC13cml0ZSBzcGlubG9ja3MsIGFsbG93aW5nIG11bHRpcGxlIHJlYWRlcnMKLSAqIGJ1dCBvbmx5IG9uZSB3cml0ZXIuCi0gKgotICogTk9URSEgaXQgaXMgcXVpdGUgY29tbW9uIHRvIGhhdmUgcmVhZGVycyBpbiBpbnRlcnJ1cHRzCi0gKiBidXQgbm8gaW50ZXJydXB0IHdyaXRlcnMuIEZvciB0aG9zZSBjaXJjdW1zdGFuY2VzIHdlCi0gKiBjYW4gIm1peCIgaXJxLXNhZmUgbG9ja3MgLSBhbnkgd3JpdGVyIG5lZWRzIHRvIGdldCBhCi0gKiBpcnEtc2FmZSB3cml0ZS1sb2NrLCBidXQgcmVhZGVycyBjYW4gZ2V0IG5vbi1pcnFzYWZlCi0gKiByZWFkLWxvY2tzLgotICoKLSAqIE9uIHg4Niwgd2UgaW1wbGVtZW50IHJlYWQtd3JpdGUgbG9ja3MgYXMgYSAzMi1iaXQgY291bnRlcgotICogd2l0aCB0aGUgaGlnaCBiaXQgKHNpZ24pIGJlaW5nIHRoZSAiY29udGVuZGVkIiBiaXQuCi0gKi8KLQotLyoqCi0gKiByZWFkX2Nhbl9sb2NrIC0gd291bGQgcmVhZF90cnlsb2NrKCkgc3VjY2VlZD8KLSAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgotICovCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gKGludCkobG9jayktPmxvY2sgPiAwOwotfQotCi0vKioKLSAqIHdyaXRlX2Nhbl9sb2NrIC0gd291bGQgd3JpdGVfdHJ5bG9jaygpIHN1Y2NlZWQ/Ci0gKiBAbG9jazogdGhlIHJ3bG9jayBpbiBxdWVzdGlvbi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfY2FuX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQotewotCXJldHVybiAobG9jayktPmxvY2sgPT0gUldfTE9DS19CSUFTOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF9sb2NrKHJhd19yd2xvY2tfdCAqcncpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICIgc3VibCAkMSwoJTApXG5cdCIKLQkJICAgICAiam5zIDFmXG4iCi0JCSAgICAgImNhbGwgX19yZWFkX2xvY2tfZmFpbGVkXG5cdCIKLQkJICAgICAiMTpcbiIKLQkJICAgICA6OkxPQ0tfUFRSX1JFRyAocncpIDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiIHN1YmwgJTEsKCUwKVxuXHQiCi0JCSAgICAgImp6IDFmXG4iCi0JCSAgICAgImNhbGwgX193cml0ZV9sb2NrX2ZhaWxlZFxuXHQiCi0JCSAgICAgIjE6XG4iCi0JCSAgICAgOjpMT0NLX1BUUl9SRUcgKHJ3KSwgImkiIChSV19MT0NLX0JJQVMpIDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKQotewotCWF0b21pY190ICpjb3VudCA9IChhdG9taWNfdCAqKWxvY2s7Ci0KLQlhdG9taWNfZGVjKGNvdW50KTsKLQlpZiAoYXRvbWljX3JlYWQoY291bnQpID49IDApCi0JCXJldHVybiAxOwotCWF0b21pY19pbmMoY291bnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd193cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKLXsKLQlhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QgKilsb2NrOwotCi0JaWYgKGF0b21pY19zdWJfYW5kX3Rlc3QoUldfTE9DS19CSUFTLCBjb3VudCkpCi0JCXJldHVybiAxOwotCWF0b21pY19hZGQoUldfTE9DS19CSUFTLCBjb3VudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIgOiIrbSIgKHJ3LT5sb2NrKSA6IDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCAlMCIKLQkJICAgICA6ICIrbSIgKHJ3LT5sb2NrKSA6ICJpIiAoUldfTE9DS19CSUFTKSA6ICJtZW1vcnkiKTsKLX0KLQotI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLQotI2VuZGlmIC8qIEFTTV9YODZfX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zcGlubG9ja190eXBlcy5oIGIvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYTliNTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NQSU5MT0NLX1RZUEVTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU1BJTkxPQ0tfVFlQRVNfSAotCi0jaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfSAotIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHJhd19zcGlubG9jayB7Ci0JdW5zaWduZWQgaW50IHNsb2NrOwotfSByYXdfc3BpbmxvY2tfdDsKLQotI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBsb2NrOwotfSByYXdfcndsb2NrX3Q7Ci0KLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyBSV19MT0NLX0JJQVMgfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU1BJTkxPQ0tfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NyYXQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zcmF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNjNlNGYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NyYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBTb21lIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBoYXMgYmVlbiBnbGVhbmVkIGZyb20gdGhlIDY0IGJpdAotICogZGlzY29udGlnbWVtIHN1cHBvcnQgY29kZSBiYXNlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIFBhdCBHYXVnaGVuIDxnb25lQHVzLmlibS5jb20+Ci0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19TUkFUX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU1JBVF9ICi0KLSNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCi1leHRlcm4gaW50IGdldF9tZW1jZmdfZnJvbV9zcmF0KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tZW1jZmdfZnJvbV9zcmF0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX1NSQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N0YWNrdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdGFja3RyYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzUxN2UuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N0YWNrdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU1RBQ0tUUkFDRV9ICi0jZGVmaW5lIEFTTV9YODZfX1NUQUNLVFJBQ0VfSAotCi1leHRlcm4gaW50IGtzdGFja19kZXB0aF90b19wcmludDsKLQotLyogR2VuZXJpYyBzdGFjayB0cmFjZXIgd2l0aCBjYWxsYmFja3MgKi8KLQotc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHsKLQl2b2lkICgqd2FybmluZykodm9pZCAqZGF0YSwgY2hhciAqbXNnKTsKLQkvKiBtc2cgbXVzdCBjb250YWluICVzIGZvciB0aGUgc3ltYm9sICovCi0Jdm9pZCAoKndhcm5pbmdfc3ltYm9sKSh2b2lkICpkYXRhLCBjaGFyICptc2csIHVuc2lnbmVkIGxvbmcgc3ltYm9sKTsKLQl2b2lkICgqYWRkcmVzcykodm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpOwotCS8qIE9uIG5lZ2F0aXZlIHJldHVybiBzdG9wIGR1bXBpbmcgKi8KLQlpbnQgKCpzdGFjaykodm9pZCAqZGF0YSwgY2hhciAqbmFtZSk7Ci19OwotCi12b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKLQkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU1RBQ0tUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3RhdC5oIGIvaW5jbHVkZS9hc20teDg2L3N0YXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUxMjBmNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3RhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU1RBVF9ICi0jZGVmaW5lIEFTTV9YODZfX1NUQVRfSAotCi0jZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKLQotI2lmZGVmIF9faTM4Nl9fCi1zdHJ1Y3Qgc3RhdCB7Ci0JdW5zaWduZWQgbG9uZyAgc3RfZGV2OwotCXVuc2lnbmVkIGxvbmcgIHN0X2lubzsKLQl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwotCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOwotCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKLQl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7Ci0JdW5zaWduZWQgbG9uZyAgc3RfcmRldjsKLQl1bnNpZ25lZCBsb25nICBzdF9zaXplOwotCXVuc2lnbmVkIGxvbmcgIHN0X2Jsa3NpemU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfYmxvY2tzOwotCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOwotCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lX25zZWM7Ci0JdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfbXRpbWVfbnNlYzsKLQl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKLQl1bnNpZ25lZCBsb25nICBzdF9jdGltZV9uc2VjOwotCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKLQl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Ci19OwotCi0jZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTwkxCi0KLS8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseQotICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KLSAqLwotc3RydWN0IHN0YXQ2NCB7Ci0JdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKLQl1bnNpZ25lZCBjaGFyCV9fcGFkMFs0XTsKLQotCXVuc2lnbmVkIGxvbmcJX19zdF9pbm87Ci0KLQl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKLQl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7Ci0KLQl1bnNpZ25lZCBsb25nCXN0X3VpZDsKLQl1bnNpZ25lZCBsb25nCXN0X2dpZDsKLQotCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OwotCXVuc2lnbmVkIGNoYXIJX19wYWQzWzRdOwotCi0JbG9uZyBsb25nCXN0X3NpemU7Ci0JdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOwotCi0JLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCi0JdW5zaWduZWQgbG9uZyBsb25nCXN0X2Jsb2NrczsKLQotCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7Ci0JdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOwotCi0JdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKLQotCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7Ci0JdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOwotCi0JdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKLX07Ci0KLSNlbHNlIC8qIF9faTM4Nl9fICovCi0KLXN0cnVjdCBzdGF0IHsKLQl1bnNpZ25lZCBsb25nCXN0X2RldjsKLQl1bnNpZ25lZCBsb25nCXN0X2lubzsKLQl1bnNpZ25lZCBsb25nCXN0X25saW5rOwotCi0JdW5zaWduZWQgaW50CXN0X21vZGU7Ci0JdW5zaWduZWQgaW50CXN0X3VpZDsKLQl1bnNpZ25lZCBpbnQJc3RfZ2lkOwotCXVuc2lnbmVkIGludAlfX3BhZDA7Ci0JdW5zaWduZWQgbG9uZwlzdF9yZGV2OwotCWxvbmcJCXN0X3NpemU7Ci0JbG9uZwkJc3RfYmxrc2l6ZTsKLQlsb25nCQlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLwotCi0JdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKLQl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7Ci0JdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKLQl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7Ci0JdW5zaWduZWQgbG9uZwlzdF9jdGltZTsKLQl1bnNpZ25lZCBsb25nICAgc3RfY3RpbWVfbnNlYzsKLQlsb25nCQlfX3VudXNlZFszXTsKLX07Ci0jZW5kaWYKLQotLyogZm9yIDMyYml0IGVtdWxhdGlvbiBhbmQgMzIgYml0IGtlcm5lbHMgKi8KLXN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7Ci0JdW5zaWduZWQgc2hvcnQgc3RfZGV2OwotCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKLQl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwotCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOwotCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKLQl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7Ci0JdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKLSNpZmRlZiBfX2kzODZfXwotCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Ci0jZWxzZQotCXVuc2lnbmVkIGludCAgc3Rfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgIHN0X2F0aW1lOwotCXVuc2lnbmVkIGludCAgc3RfbXRpbWU7Ci0JdW5zaWduZWQgaW50ICBzdF9jdGltZTsKLSNlbmRpZgotfTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1NUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N0YXRmcy5oIGIvaW5jbHVkZS9hc20teDg2L3N0YXRmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTVkYzE5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdGF0ZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU1RBVEZTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU1RBVEZTX0gKLQotLyoKLSAqIFdlIG5lZWQgY29tcGF0X3N0YXRmczY0IHRvIGJlIHBhY2tlZCwgYmVjYXVzZSB0aGUgaTM4NiBBQkkgd29uJ3QKLSAqIGFkZCBwYWRkaW5nIGF0IHRoZSBlbmQgdG8gYnJpbmcgaXQgdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLCBidXQKLSAqIHRoZSB4ODZfNjQgQUJJIHdpbGwuCi0gKi8KLSNkZWZpbmUgQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsYWxpZ25lZCg0KSkpCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KLSNlbmRpZiAvKiBBU01fWDg2X19TVEFURlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N0cmluZ18zMi5oIGIvaW5jbHVkZS9hc20teDg2L3N0cmluZ18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODc4NDNlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdHJpbmdfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NUUklOR18zMl9ICi0jZGVmaW5lIEFTTV9YODZfX1NUUklOR18zMl9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qIExldCBnY2MgZGVjaWRlIHdoZXRoZXIgdG8gaW5saW5lIG9yIHVzZSB0aGUgb3V0IG9mIGxpbmUgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ1BZCi1leHRlcm4gY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7Ci0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNQWQotZXh0ZXJuIGNoYXIgKnN0cm5jcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgY291bnQpOwotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNBVAotZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOwotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DQVQKLWV4dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGNvdW50KTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKLWV4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7Ci0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNNUAotZXh0ZXJuIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCwgc2l6ZV90IGNvdW50KTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDSFIKLWV4dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqcywgaW50IGMpOwotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgotZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcyk7Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQotewotCWludCBkMCwgZDEsIGQyOwotCWFzbSB2b2xhdGlsZSgicmVwIDsgbW92c2xcblx0IgotCQkgICAgICJtb3ZsICU0LCUlZWN4XG5cdCIKLQkJICAgICAiYW5kbCAkMywlJWVjeFxuXHQiCi0JCSAgICAgImp6IDFmXG5cdCIKLQkJICAgICAicmVwIDsgbW92c2Jcblx0IgotCQkgICAgICIxOiIKLQkJICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikKLQkJICAgICA6ICIwIiAobiAvIDQpLCAiZyIgKG4pLCAiMSIgKChsb25nKXRvKSwgIjIiICgobG9uZylmcm9tKQotCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiB0bzsKLX0KLQotLyoKLSAqIFRoaXMgbG9va3MgdWdseSwgYnV0IHRoZSBjb21waWxlciBjYW4gb3B0aW1pemUgaXQgdG90YWxseSwKLSAqIGFzIHRoZSBjb3VudCBpcyBjb25zdGFudC4KLSAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2NvbnN0YW50X21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKLQkJCQkJICAgICAgIHNpemVfdCBuKQotewotCWxvbmcgZXNpLCBlZGk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gdG87Ci0KLQlzd2l0Y2ggKG4pIHsKLQljYXNlIDE6Ci0JCSooY2hhciAqKXRvID0gKihjaGFyICopZnJvbTsKLQkJcmV0dXJuIHRvOwotCWNhc2UgMjoKLQkJKihzaG9ydCAqKXRvID0gKihzaG9ydCAqKWZyb207Ci0JCXJldHVybiB0bzsKLQljYXNlIDQ6Ci0JCSooaW50ICopdG8gPSAqKGludCAqKWZyb207Ci0JCXJldHVybiB0bzsKLQotCWNhc2UgMzoKLQkJKihzaG9ydCAqKXRvID0gKihzaG9ydCAqKWZyb207Ci0JCSooKGNoYXIgKil0byArIDIpID0gKigoY2hhciAqKWZyb20gKyAyKTsKLQkJcmV0dXJuIHRvOwotCWNhc2UgNToKLQkJKihpbnQgKil0byA9ICooaW50ICopZnJvbTsKLQkJKigoY2hhciAqKXRvICsgNCkgPSAqKChjaGFyICopZnJvbSArIDQpOwotCQlyZXR1cm4gdG87Ci0JY2FzZSA2OgotCQkqKGludCAqKXRvID0gKihpbnQgKilmcm9tOwotCQkqKChzaG9ydCAqKXRvICsgMikgPSAqKChzaG9ydCAqKWZyb20gKyAyKTsKLQkJcmV0dXJuIHRvOwotCWNhc2UgODoKLQkJKihpbnQgKil0byA9ICooaW50ICopZnJvbTsKLQkJKigoaW50ICopdG8gKyAxKSA9ICooKGludCAqKWZyb20gKyAxKTsKLQkJcmV0dXJuIHRvOwotCX0KLQotCWVzaSA9IChsb25nKWZyb207Ci0JZWRpID0gKGxvbmcpdG87Ci0JaWYgKG4gPj0gNSAqIDQpIHsKLQkJLyogbGFyZ2UgYmxvY2s6IHVzZSByZXAgcHJlZml4ICovCi0JCWludCBlY3g7Ci0JCWFzbSB2b2xhdGlsZSgicmVwIDsgbW92c2wiCi0JCQkgICAgIDogIj0mYyIgKGVjeCksICI9JkQiIChlZGkpLCAiPSZTIiAoZXNpKQotCQkJICAgICA6ICIwIiAobiAvIDQpLCAiMSIgKGVkaSksICIyIiAoZXNpKQotCQkJICAgICA6ICJtZW1vcnkiCi0JCSk7Ci0JfSBlbHNlIHsKLQkJLyogc21hbGwgYmxvY2s6IGRvbid0IGNsb2JiZXIgZWN4ICsgc21hbGxlciBjb2RlICovCi0JCWlmIChuID49IDQgKiA0KQotCQkJYXNtIHZvbGF0aWxlKCJtb3ZzbCIKLQkJCQkgICAgIDogIj0mRCIoZWRpKSwgIj0mUyIoZXNpKQotCQkJCSAgICAgOiAiMCIoZWRpKSwgIjEiKGVzaSkKLQkJCQkgICAgIDogIm1lbW9yeSIpOwotCQlpZiAobiA+PSAzICogNCkKLQkJCWFzbSB2b2xhdGlsZSgibW92c2wiCi0JCQkJICAgICA6ICI9JkQiKGVkaSksICI9JlMiKGVzaSkKLQkJCQkgICAgIDogIjAiKGVkaSksICIxIihlc2kpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJaWYgKG4gPj0gMiAqIDQpCi0JCQlhc20gdm9sYXRpbGUoIm1vdnNsIgotCQkJCSAgICAgOiAiPSZEIihlZGkpLCAiPSZTIihlc2kpCi0JCQkJICAgICA6ICIwIihlZGkpLCAiMSIoZXNpKQotCQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCWlmIChuID49IDEgKiA0KQotCQkJYXNtIHZvbGF0aWxlKCJtb3ZzbCIKLQkJCQkgICAgIDogIj0mRCIoZWRpKSwgIj0mUyIoZXNpKQotCQkJCSAgICAgOiAiMCIoZWRpKSwgIjEiKGVzaSkKLQkJCQkgICAgIDogIm1lbW9yeSIpOwotCX0KLQlzd2l0Y2ggKG4gJSA0KSB7Ci0JCS8qIHRhaWwgKi8KLQljYXNlIDA6Ci0JCXJldHVybiB0bzsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZSgibW92c2IiCi0JCQkgICAgIDogIj0mRCIoZWRpKSwgIj0mUyIoZXNpKQotCQkJICAgICA6ICIwIihlZGkpLCAiMSIoZXNpKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHRvOwotCWNhc2UgMjoKLQkJYXNtIHZvbGF0aWxlKCJtb3ZzdyIKLQkJCSAgICAgOiAiPSZEIihlZGkpLCAiPSZTIihlc2kpCi0JCQkgICAgIDogIjAiKGVkaSksICIxIihlc2kpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gdG87Ci0JZGVmYXVsdDoKLQkJYXNtIHZvbGF0aWxlKCJtb3Zzd1xuXHRtb3ZzYiIKLQkJCSAgICAgOiAiPSZEIihlZGkpLCAiPSZTIihlc2kpCi0JCQkgICAgIDogIjAiKGVkaSksICIxIihlc2kpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gdG87Ci0JfQotfQotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQotCi0jaWZkZWYgQ09ORklHX1g4Nl9VU0VfM0ROT1cKLQotI2luY2x1ZGUgPGFzbS9tbXguaD4KLQotLyoKLSAqCVRoaXMgQ1BVIGZhdm91cnMgM0ROb3cgc3Ryb25nbHkgKGVnIEFNRCBBdGhsb24pCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkICpfX2NvbnN0YW50X21lbWNweTNkKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbGVuKQotewotCWlmIChsZW4gPCA1MTIpCi0JCXJldHVybiBfX2NvbnN0YW50X21lbWNweSh0bywgZnJvbSwgbGVuKTsKLQlyZXR1cm4gX21teF9tZW1jcHkodG8sIGZyb20sIGxlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19tZW1jcHkzZCh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbikKLXsKLQlpZiAobGVuIDwgNTEyKQotCQlyZXR1cm4gX19tZW1jcHkodG8sIGZyb20sIGxlbik7Ci0JcmV0dXJuIF9tbXhfbWVtY3B5KHRvLCBmcm9tLCBsZW4pOwotfQotCi0jZGVmaW5lIG1lbWNweSh0LCBmLCBuKQkJCQlcCi0JKF9fYnVpbHRpbl9jb25zdGFudF9wKChuKSkJCVwKLQkgPyBfX2NvbnN0YW50X21lbWNweTNkKCh0KSwgKGYpLCAobikpCVwKLQkgOiBfX21lbWNweTNkKCh0KSwgKGYpLCAobikpKQotCi0jZWxzZQotCi0vKgotICoJTm8gM0QgTm93IQotICovCi0KLSNkZWZpbmUgbWVtY3B5KHQsIGYsIG4pCQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AoKG4pKQkJXAotCSA/IF9fY29uc3RhbnRfbWVtY3B5KCh0KSwgKGYpLCAobikpCVwKLQkgOiBfX21lbWNweSgodCksIChmKSwgKG4pKSkKLQotI2VuZGlmCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQotdm9pZCAqbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKLQotI2RlZmluZSBtZW1jbXAgX19idWlsdGluX21lbWNtcAotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUgotZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICpjcywgaW50IGMsIHNpemVfdCBjb3VudCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19tZW1zZXRfZ2VuZXJpYyh2b2lkICpzLCBjaGFyIGMsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgZDAsIGQxOwotCWFzbSB2b2xhdGlsZSgicmVwXG5cdCIKLQkJICAgICAic3Rvc2IiCi0JCSAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCi0JCSAgICAgOiAiYSIgKGMpLCAiMSIgKHMpLCAiMCIgKGNvdW50KQotCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiBzOwotfQotCi0vKiB3ZSBtaWdodCB3YW50IHRvIHdyaXRlIG9wdGltaXplZCB2ZXJzaW9ucyBvZiB0aGVzZSBsYXRlciAqLwotI2RlZmluZSBfX2NvbnN0YW50X2NvdW50X21lbXNldChzLCBjLCBjb3VudCkgX19tZW1zZXRfZ2VuZXJpYygocyksIChjKSwgKGNvdW50KSkKLQotLyoKLSAqIG1lbXNldCh4LCAwLCB5KSBpcyBhIHJlYXNvbmFibHkgY29tbW9uIHRoaW5nIHRvIGRvLCBzbyB3ZSB3YW50IHRvIGZpbGwKLSAqIHRoaW5ncyAzMiBiaXRzIGF0IGEgdGltZSBldmVuIHdoZW4gd2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUKLSAqIGFyZWEgYXQgY29tcGlsZS10aW1lLi4KLSAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZQotdm9pZCAqX19jb25zdGFudF9jX21lbXNldCh2b2lkICpzLCB1bnNpZ25lZCBsb25nIGMsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgZDAsIGQxOwotCWFzbSB2b2xhdGlsZSgicmVwIDsgc3Rvc2xcblx0IgotCQkgICAgICJ0ZXN0YiAkMiwlYjNcblx0IgotCQkgICAgICJqZSAxZlxuXHQiCi0JCSAgICAgInN0b3N3XG4iCi0JCSAgICAgIjE6XHR0ZXN0YiAkMSwlYjNcblx0IgotCQkgICAgICJqZSAyZlxuXHQiCi0JCSAgICAgInN0b3NiXG4iCi0JCSAgICAgIjI6IgotCQkgICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKQotCQkgICAgIDogImEiIChjKSwgInEiIChjb3VudCksICIwIiAoY291bnQvNCksICIxIiAoKGxvbmcpcykKLQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gczsKLX0KLQotLyogQWRkZWQgYnkgR2VydGphbiB2YW4gV2luZ2VyZGUgdG8gbWFrZSBtaW5peCBhbmQgc3lzdiBtb2R1bGUgd29yayAqLwotI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOTEVOCi1leHRlcm4gc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IGNvdW50KTsKLS8qIGVuZCBvZiBhZGRpdGlvbmFsIHN0dWZmICovCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSU1RSCi1leHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7Ci0KLS8qCi0gKiBUaGlzIGxvb2tzIGhvcnJpYmx5IHVnbHksIGJ1dCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIGl0IHRvdGFsbHksCi0gKiBhcyB3ZSBieSBub3cga25vdyB0aGF0IGJvdGggcGF0dGVybiBhbmQgY291bnQgaXMgY29uc3RhbnQuLgotICovCi1zdGF0aWMgX19hbHdheXNfaW5saW5lCi12b2lkICpfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCh2b2lkICpzLCB1bnNpZ25lZCBsb25nIHBhdHRlcm4sCi0JCQkJICAgIHNpemVfdCBjb3VudCkKLXsKLQlzd2l0Y2ggKGNvdW50KSB7Ci0JY2FzZSAwOgotCQlyZXR1cm4gczsKLQljYXNlIDE6Ci0JCSoodW5zaWduZWQgY2hhciAqKXMgPSBwYXR0ZXJuICYgMHhmZjsKLQkJcmV0dXJuIHM7Ci0JY2FzZSAyOgotCQkqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm4gJiAweGZmZmY7Ci0JCXJldHVybiBzOwotCWNhc2UgMzoKLQkJKih1bnNpZ25lZCBzaG9ydCAqKXMgPSBwYXR0ZXJuICYgMHhmZmZmOwotCQkqKCh1bnNpZ25lZCBjaGFyICopcyArIDIpID0gcGF0dGVybiAmIDB4ZmY7Ci0JCXJldHVybiBzOwotCWNhc2UgNDoKLQkJKih1bnNpZ25lZCBsb25nICopcyA9IHBhdHRlcm47Ci0JCXJldHVybiBzOwotCX0KLQotI2RlZmluZSBDT01NT04oeCkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgicmVwIDsgc3Rvc2wiCQkJCQlcCi0JCSAgICAgeAkJCQkJCQlcCi0JCSAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCQkJCVwKLQkJICAgICA6ICJhIiAoZWF4KSwgIjAiIChjb3VudC80KSwgIjEiICgobG9uZylzKQlcCi0JCSAgICAgOiAibWVtb3J5IikKLQotCXsKLQkJaW50IGQwLCBkMTsKLSNpZiBfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDAKLQkJLyogV29ya2Fyb3VuZCBmb3IgYnJva2VuIGdjYyA0LjAgKi8KLQkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBlYXggYXNtKCIlZWF4IikgPSBwYXR0ZXJuOwotI2Vsc2UKLQkJdW5zaWduZWQgbG9uZyBlYXggPSBwYXR0ZXJuOwotI2VuZGlmCi0KLQkJc3dpdGNoIChjb3VudCAlIDQpIHsKLQkJY2FzZSAwOgotCQkJQ09NTU9OKCIiKTsKLQkJCXJldHVybiBzOwotCQljYXNlIDE6Ci0JCQlDT01NT04oIlxuXHRzdG9zYiIpOwotCQkJcmV0dXJuIHM7Ci0JCWNhc2UgMjoKLQkJCUNPTU1PTigiXG5cdHN0b3N3Iik7Ci0JCQlyZXR1cm4gczsKLQkJZGVmYXVsdDoKLQkJCUNPTU1PTigiXG5cdHN0b3N3XG5cdHN0b3NiIik7Ci0JCQlyZXR1cm4gczsKLQkJfQotCX0KLQotI3VuZGVmIENPTU1PTgotfQotCi0jZGVmaW5lIF9fY29uc3RhbnRfY194X21lbXNldChzLCBjLCBjb3VudCkJCQlcCi0JKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KQkJCQlcCi0JID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpCVwKLQkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSkKLQotI2RlZmluZSBfX21lbXNldChzLCBjLCBjb3VudCkJCQkJXAotCShfX2J1aWx0aW5fY29uc3RhbnRfcChjb3VudCkJCQlcCi0JID8gX19jb25zdGFudF9jb3VudF9tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpCVwKLQkgOiBfX21lbXNldF9nZW5lcmljKChzKSwgKGMpLCAoY291bnQpKSkKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKLSNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KQkJCQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AoYykJCQkJCVwKLQkgPyBfX2NvbnN0YW50X2NfeF9tZW1zZXQoKHMpLCAoMHgwMTAxMDEwMVVMICogKHVuc2lnbmVkIGNoYXIpKGMpKSwgXAotCQkJCSAoY291bnQpKQkJCQlcCi0JIDogX19tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpKQotCi0vKgotICogZmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBieXRlICdjJywgb3IgMSBwYXN0IHRoZSBhcmVhIGlmIG5vbmUKLSAqLwotI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TQ0FOCi1leHRlcm4gdm9pZCAqbWVtc2Nhbih2b2lkICphZGRyLCBpbnQgYywgc2l6ZV90IHNpemUpOwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU1RSSU5HXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdHJpbmdfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdHJpbmdfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJhZGQxMWQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N0cmluZ182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19TVFJJTkdfNjRfSAotI2RlZmluZSBBU01fWDg2X19TVFJJTkdfNjRfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqLwotCi0vKiBPbmx5IHVzZWQgZm9yIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4gU3RvbGVuIGZyb20gaTM4Ni9zdHJpbmcuaCAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2lubGluZV9tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQotewotCXVuc2lnbmVkIGxvbmcgZDAsIGQxLCBkMjsKLQlhc20gdm9sYXRpbGUoInJlcCA7IG1vdnNsXG5cdCIKLQkJICAgICAidGVzdGIgJDIsJWI0XG5cdCIKLQkJICAgICAiamUgMWZcblx0IgotCQkgICAgICJtb3Zzd1xuIgotCQkgICAgICIxOlx0dGVzdGIgJDEsJWI0XG5cdCIKLQkJICAgICAiamUgMmZcblx0IgotCQkgICAgICJtb3ZzYlxuIgotCQkgICAgICIyOiIKLQkJICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikKLQkJICAgICA6ICIwIiAobiAvIDQpLCAicSIgKG4pLCAiMSIgKChsb25nKXRvKSwgIjIiICgobG9uZylmcm9tKQotCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiB0bzsKLX0KLQotLyogRXZlbiB3aXRoIF9fYnVpbHRpbl8gdGhlIGNvbXBpbGVyIG1heSBkZWNpZGUgdG8gdXNlIHRoZSBvdXQgb2YgbGluZQotICAgZnVuY3Rpb24uICovCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZIDEKLSNpZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDQKLWV4dGVybiB2b2lkICptZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBsZW4pOwotI2Vsc2UKLWV4dGVybiB2b2lkICpfX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbik7Ci0jZGVmaW5lIG1lbWNweShkc3QsIHNyYywgbGVuKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzaXplX3QgX19sZW4gPSAobGVuKTsJCQkJCVwKLQl2b2lkICpfX3JldDsJCQkJCQlcCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGxlbikgJiYgX19sZW4gPj0gNjQpCQlcCi0JCV9fcmV0ID0gX19tZW1jcHkoKGRzdCksIChzcmMpLCBfX2xlbik7CQlcCi0JZWxzZQkJCQkJCQlcCi0JCV9fcmV0ID0gX19idWlsdGluX21lbWNweSgoZHN0KSwgKHNyYyksIF9fbGVuKTsJXAotCV9fcmV0OwkJCQkJCQlcCi19KQotI2VuZGlmCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCi12b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCi12b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KTsKLQotaW50IG1lbWNtcChjb25zdCB2b2lkICpjcywgY29uc3Qgdm9pZCAqY3QsIHNpemVfdCBjb3VudCk7Ci1zaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpOwotY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7Ci1jaGFyICpzdHJjYXQoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKLWludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1NUUklOR182NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3VtbWl0L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTRiMDBiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU1VNTUlUX0FQSUNfSAotI2RlZmluZSBfX0FTTV9TVU1NSVRfQVBJQ19ICi0KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLSNkZWZpbmUgZXNyX2Rpc2FibGUgKDEpCi0jZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgwKQotCi0vKiBJbiBjbHVzdGVyZWQgbW9kZSwgdGhlIGhpZ2ggbmliYmxlIG9mIEFQSUMgSUQgaXMgYSBjbHVzdGVyIG51bWJlci4KLSAqIFRoZSBsb3cgbmliYmxlIGlzIGEgNC1iaXQgYml0bWFwLiAqLwotI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfU0hJRlQJNAotI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfTUFTSwkoKDF1IDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkgLSAxKQotI2RlZmluZSBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSwkoWEFQSUNfREVTVF9DUFVTX01BU0sgPDwgWEFQSUNfREVTVF9DUFVTX1NISUZUKQotCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9DTFVTVEVSKQotCi1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCB0YXJnZXRfY3B1cyh2b2lkKQotewotCS8qIENQVV9NQVNLX0FMTCAoMHhmZikgaGFzIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAotCSAqIGRlc3RfTG93ZXN0UHJpbyBtb2RlIGxvZ2ljYWwgY2x1c3RlcmVkIGFwaWMgaW50ZXJydXB0IHJvdXRpbmcKLQkgKiBKdXN0IHN0YXJ0IG9uIGNwdSAwLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNwcmVhZCBsb2FkCi0JICovCi0JcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOwotfQotI2RlZmluZSBUQVJHRVRfQ1BVUwkodGFyZ2V0X2NwdXMoKSkKLQotI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZGVzdF9Mb3dlc3RQcmlvKQotI2RlZmluZSBJTlRfREVTVF9NT0RFIDEgICAgIC8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jcyAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHdlIGRvbid0IHVzZSB0aGUgcGh5c19jcHVfcHJlc2VudF9tYXAgdG8gaW5kaWNhdGUgYXBpY2lkIHByZXNlbmNlICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotI2RlZmluZSBhcGljaWRfY2x1c3RlcihhcGljaWQpICgoYXBpY2lkKSAmIFhBUElDX0RFU1RfQ0xVU1RFUl9NQVNLKQotCi1leHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCwgaWQ7Ci0JaW50IGNvdW50ID0gMDsKLQl1OCBteV9pZCA9ICh1OCloYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQl1OCBteV9jbHVzdGVyID0gKHU4KWFwaWNpZF9jbHVzdGVyKG15X2lkKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JdTggbGlkOwotCWludCBpOwotCi0JLyogQ3JlYXRlIGxvZ2ljYWwgQVBJQyBJRHMgYnkgY291bnRpbmcgQ1BVcyBhbHJlYWR5IGluIGNsdXN0ZXIuICovCi0JZm9yIChjb3VudCA9IDAsIGkgPSBOUl9DUFVTOyAtLWkgPj0gMDsgKSB7Ci0JCWxpZCA9IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW2ldOwotCQlpZiAobGlkICE9IEJBRF9BUElDSUQgJiYgYXBpY2lkX2NsdXN0ZXIobGlkKSA9PSBteV9jbHVzdGVyKQotCQkJKytjb3VudDsKLQl9Ci0jZW5kaWYKLQkvKiBXZSBvbmx5IGhhdmUgYSA0IHdpZGUgYml0bWFwIGluIGNsdXN0ZXIgbW9kZS4gIElmIGEgZGVyYW5nZWQKLQkgKiBCSU9TIHB1dHMgNSBDUFVzIGluIG9uZSBBUElDIGNsdXN0ZXIsIHdlJ3JlIGhvc2VkLiAqLwotCUJVR19PTihjb3VudCA+PSBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpOwotCWlkID0gbXlfY2x1c3RlciB8ICgxVUwgPDwgY291bnQpOwotCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKLQl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7Ci0JdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgU3VtbWl0LiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAotCQkJCQkJbnJfaW9hcGljcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JcmV0dXJuIGFwaWNpZF8yX25vZGVbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCi0vKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLwotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotICAgICAgIGlmIChjcHUgPj0gTlJfQ1BVUykKLQkgICAgICAgcmV0dXJuIEJBRF9BUElDSUQ7Ci0JcmV0dXJuIChpbnQpY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKLSNlbHNlCi0JcmV0dXJuIGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKLXsKLQlpZiAobXBzX2NwdSA8IE5SX0NQVVMpCi0JCXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7Ci0JZWxzZQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGlvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfaWRfbWFwKQotewotCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLwotCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHgwRik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IGFwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQotewotCWludCBudW1fYml0c19zZXQ7Ci0JaW50IGNwdXNfZm91bmQgPSAwOwotCWludCBjcHU7Ci0JaW50IGFwaWNpZDsKLQotCW51bV9iaXRzX3NldCA9IGNwdXNfd2VpZ2h0KGNwdW1hc2spOwotCS8qIFJldHVybiBpZCB0byBhbGwgKi8KLQlpZiAobnVtX2JpdHNfc2V0ID09IE5SX0NQVVMpCi0JCXJldHVybiAoaW50KSAweEZGOwotCS8qCi0JICogVGhlIGNwdXMgaW4gdGhlIG1hc2sgbXVzdCBhbGwgYmUgb24gdGhlIGFwaWMgY2x1c3Rlci4gIElmIGFyZSBub3QKLQkgKiBvbiB0aGUgc2FtZSBhcGljaWQgY2x1c3RlciByZXR1cm4gZGVmYXVsdCB2YWx1ZSBvZiBUQVJHRVRfQ1BVUy4KLQkgKi8KLQljcHUgPSBmaXJzdF9jcHUoY3B1bWFzayk7Ci0JYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0Jd2hpbGUgKGNwdXNfZm91bmQgPCBudW1fYml0c19zZXQpIHsKLQkJaWYgKGNwdV9pc3NldChjcHUsIGNwdW1hc2spKSB7Ci0JCQlpbnQgbmV3X2FwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotCQkJaWYgKGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgIT0KLQkJCQkJYXBpY2lkX2NsdXN0ZXIobmV3X2FwaWNpZCkpewotCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIiwgX19mdW5jX18pOwotCQkJCXJldHVybiAweEZGOwotCQkJfQotCQkJYXBpY2lkID0gYXBpY2lkIHwgbmV3X2FwaWNpZDsKLQkJCWNwdXNfZm91bmQrKzsKLQkJfQotCQljcHUrKzsKLQl9Ci0JcmV0dXJuIGFwaWNpZDsKLX0KLQotLyogY3B1aWQgcmV0dXJucyB0aGUgdmFsdWUgbGF0Y2hlZCBpbiB0aGUgSFcgYXQgcmVzZXQsIG5vdCB0aGUgQVBJQyBJRAotICogcmVnaXN0ZXIncyB2YWx1ZS4gIEZvciBhbnkgYm94IHdob3NlIEJJT1MgY2hhbmdlcyBBUElDIElEcywgbGlrZQotICogY2x1c3RlcmVkIEFQSUMgc3lzdGVtcywgd2UgbXVzdCB1c2UgaGFyZF9zbXBfcHJvY2Vzc29yX2lkLgotICoKLSAqIFNlZSBJbnRlbCdzIElBLTMyIFNXIERldidzIE1hbnVhbCBWb2wyIHVuZGVyIENQVUlELgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBwaHlzX3BrZ19pZCh1MzIgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKLXsKLQlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fU1VNTUlUX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvaXJxX3ZlY3RvcnNfbGltaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MGNlM2YuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSAotI2RlZmluZSBfQVNNX0lSUV9WRUNUT1JTX0xJTUlUU19ICi0KLS8qCi0gKiBGb3IgU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzLCB3ZSBoYXZlIGxvdHMgb2YgSS9PIEFQSUNzLAotICogZXZlbiB3aXRoIHVuaS1wcm9jIGtlcm5lbHMsIHNvIHVzZSBhIGJpZyBhcnJheS4KLSAqCi0gKiBUaGlzIHZhbHVlIHNob3VsZCBiZSB0aGUgc2FtZSBpbiBib3RoIHRoZSBnZW5lcmljIGFuZCBzdW1taXQgc3ViYXJjaGVzLgotICogQ2hhbmdlIG9uZSwgY2hhbmdlICdlbSBib3RoLgotICovCi0jZGVmaW5lIE5SX0lSUVMJMjI0Ci0jZGVmaW5lIE5SX0lSUV9WRUNUT1JTCTEwMjQKLQotI2VuZGlmIC8qIF9BU01fSVJRX1ZFQ1RPUlNfTElNSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdXNwZW5kXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvc3VzcGVuZF8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2I2ZDRkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdXNwZW5kXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEtMjAwMiBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+Ci0gKiBCYXNlZCBvbiBjb2RlCi0gKiBDb3B5cmlnaHQgMjAwMSBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPgotICovCi0jaWZuZGVmIEFTTV9YODZfX1NVU1BFTkRfMzJfSAotI2RlZmluZSBBU01fWDg2X19TVVNQRU5EXzMyX0gKLQotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL2kzODcuaD4KLQotc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkgeyByZXR1cm4gMDsgfQotCi0vKiBpbWFnZSBvZiB0aGUgc2F2ZWQgcHJvY2Vzc29yIHN0YXRlICovCi1zdHJ1Y3Qgc2F2ZWRfY29udGV4dCB7Ci0JdTE2IGVzLCBmcywgZ3MsIHNzOwotCXVuc2lnbmVkIGxvbmcgY3IwLCBjcjIsIGNyMywgY3I0OwotCXN0cnVjdCBkZXNjX3B0ciBnZHQ7Ci0Jc3RydWN0IGRlc2NfcHRyIGlkdDsKLQl1MTYgbGR0OwotCXUxNiB0c3M7Ci0JdW5zaWduZWQgbG9uZyB0cjsKLQl1bnNpZ25lZCBsb25nIHNhZmV0eTsKLQl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2lmZGVmIENPTkZJR19BQ1BJCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9laXA7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lc3A7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lYnA7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lYng7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lc2k7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lZGk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3NhdmVfcmVnaXN0ZXJfc3RhdGUodW5zaWduZWQgbG9uZyByZXR1cm5fcG9pbnQpCi17Ci0Jc2F2ZWRfZWlwID0gcmV0dXJuX3BvaW50OwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzcCwlMCIgOiAiPW0iIChzYXZlZF9lc3ApKTsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYnAsJTAiIDogIj1tIiAoc2F2ZWRfZWJwKSk7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWJ4LCUwIiA6ICI9bSIgKHNhdmVkX2VieCkpOwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWVkaSwlMCIgOiAiPW0iIChzYXZlZF9lZGkpKTsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlc2ksJTAiIDogIj1tIiAoc2F2ZWRfZXNpKSk7Ci19Ci0KLSNkZWZpbmUgYWNwaV9yZXN0b3JlX3JlZ2lzdGVyX3N0YXRlKCkgIGRvIHt9IHdoaWxlICgwKQotCi0vKiByb3V0aW5lcyBmb3Igc2F2aW5nL3Jlc3RvcmluZyBrZXJuZWwgc3RhdGUgKi8KLWV4dGVybiBpbnQgYWNwaV9zYXZlX3N0YXRlX21lbSh2b2lkKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fU1VTUEVORF8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3VzcGVuZF82NC5oIGIvaW5jbHVkZS9hc20teDg2L3N1c3BlbmRfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4MjFkZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3VzcGVuZF82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxLTIwMDMgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgotICogQmFzZWQgb24gY29kZQotICogQ29weXJpZ2h0IDIwMDEgUGF0cmljayBNb2NoZWwgPG1vY2hlbEBvc2RsLm9yZz4KLSAqLwotI2lmbmRlZiBBU01fWDg2X19TVVNQRU5EXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fU1VTUEVORF82NF9ICi0KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFyY2hfcHJlcGFyZV9zdXNwZW5kKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbWFnZSBvZiB0aGUgc2F2ZWQgcHJvY2Vzc29yIHN0YXRlLCB1c2VkIGJ5IHRoZSBsb3cgbGV2ZWwgQUNQSSBzdXNwZW5kIHRvCi0gKiBSQU0gY29kZSBhbmQgYnkgdGhlIGxvdyBsZXZlbCBoaWJlcm5hdGlvbiBjb2RlLgotICoKLSAqIElmIHlvdSBtb2RpZnkgaXQsIGZpeCBhcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfNjQuUyBhbmQgbWFrZSBzdXJlIHRoYXQKLSAqIF9fc2F2ZS9fX3Jlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCksIGRlZmluZWQgaW4gYXJjaC94ODYva2VybmVsL3N1c3BlbmRfNjQuYywKLSAqIHN0aWxsIHdvcmsgYXMgcmVxdWlyZWQuCi0gKi8KLXN0cnVjdCBzYXZlZF9jb250ZXh0IHsKLQlzdHJ1Y3QgcHRfcmVncyByZWdzOwotCXUxNiBkcywgZXMsIGZzLCBncywgc3M7Ci0JdW5zaWduZWQgbG9uZyBnc19iYXNlLCBnc19rZXJuZWxfYmFzZSwgZnNfYmFzZTsKLQl1bnNpZ25lZCBsb25nIGNyMCwgY3IyLCBjcjMsIGNyNCwgY3I4OwotCXVuc2lnbmVkIGxvbmcgZWZlcjsKLQl1MTYgZ2R0X3BhZDsKLQl1MTYgZ2R0X2xpbWl0OwotCXVuc2lnbmVkIGxvbmcgZ2R0X2Jhc2U7Ci0JdTE2IGlkdF9wYWQ7Ci0JdTE2IGlkdF9saW1pdDsKLQl1bnNpZ25lZCBsb25nIGlkdF9iYXNlOwotCXUxNiBsZHQ7Ci0JdTE2IHRzczsKLQl1bnNpZ25lZCBsb25nIHRyOwotCXVuc2lnbmVkIGxvbmcgc2FmZXR5OwotCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2FkZHJlc3M7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jZGVmaW5lIGxvYWRkZWJ1Zyh0aHJlYWQscmVnaXN0ZXIpIFwKLQlzZXRfZGVidWdyZWcoKHRocmVhZCktPmRlYnVncmVnIyNyZWdpc3RlciwgcmVnaXN0ZXIpCi0KLS8qIHJvdXRpbmVzIGZvciBzYXZpbmcvcmVzdG9yaW5nIGtlcm5lbCBzdGF0ZSAqLwotZXh0ZXJuIGludCBhY3BpX3NhdmVfc3RhdGVfbWVtKHZvaWQpOwotZXh0ZXJuIGNoYXIgY29yZV9yZXN0b3JlX2NvZGU7Ci1leHRlcm4gY2hhciByZXN0b3JlX3JlZ2lzdGVyczsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1NVU1BFTkRfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N3aW90bGIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zd2lvdGxiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMjBhZGIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N3aW90bGIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU1dJT1RMQl9ICi0jZGVmaW5lIEFTTV9YODZfX1NXSU9UTEJfSAotCi0jaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+Ci0KLS8qIFNXSU9UTEIgaW50ZXJmYWNlICovCi0KLWV4dGVybiBkbWFfYWRkcl90IHN3aW90bGJfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLAotCQkJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpOwotZXh0ZXJuIHZvaWQgKnN3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncyk7Ci1leHRlcm4gdm9pZCBzd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgc2l6ZV90IHNpemUsIGludCBkaXIpOwotZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCQlkbWFfYWRkcl90IGRldl9hZGRyLAotCQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcik7Ci1leHRlcm4gdm9pZCBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJCSAgIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKLWV4dGVybiB2b2lkIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQkJICAgICAgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJCSAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKLWV4dGVybiB2b2lkIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQkJCSBkbWFfYWRkcl90IGRldl9hZGRyLAotCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKLWV4dGVybiB2b2lkIHN3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCSAgICBpbnQgZGlyKTsKLWV4dGVybiB2b2lkIHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCSAgICAgICBpbnQgZGlyKTsKLWV4dGVybiBpbnQgc3dpb3RsYl9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkgIGludCBuZW50cywgaW50IGRpcmVjdGlvbik7Ci1leHRlcm4gdm9pZCBzd2lvdGxiX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOwotZXh0ZXJuIGludCBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKLWV4dGVybiB2b2lkIHN3aW90bGJfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkJICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKLWV4dGVybiBpbnQgc3dpb3RsYl9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7Ci1leHRlcm4gdm9pZCBzd2lvdGxiX2luaXQodm9pZCk7Ci0KLWV4dGVybiBpbnQgc3dpb3RsYl9mb3JjZTsKLQotI2lmZGVmIENPTkZJR19TV0lPVExCCi1leHRlcm4gaW50IHN3aW90bGI7Ci1leHRlcm4gdm9pZCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpOwotI2Vsc2UKLSNkZWZpbmUgc3dpb3RsYiAwCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKQotewotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfbWFya19jbGVhbih2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkge30KLQotI2VuZGlmIC8qIEFTTV9YODZfX1NXSU9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N5bmNfYml0b3BzLmggYi9pbmNsdWRlL2FzbS14ODYvc3luY19iaXRvcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4OWJlZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3luY19iaXRvcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1NZTkNfQklUT1BTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU1lOQ19CSVRPUFNfSAotCi0vKgotICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgotICovCi0KLS8qCi0gKiBUaGVzZSBoYXZlIHRvIGJlIGRvbmUgd2l0aCBpbmxpbmUgYXNzZW1ibHk6IHRoYXQgd2F5IHRoZSBiaXQtc2V0dGluZwotICogaXMgZ3VhcmFudGVlZCB0byBiZSBhdG9taWMuIEFsbCBiaXQgb3BlcmF0aW9ucyByZXR1cm4gMCBpZiB0aGUgYml0Ci0gKiB3YXMgY2xlYXJlZCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBhbmQgIT0gMCBpZiBpdCB3YXMgbm90LgotICoKLSAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDMyIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCi0gKi8KLQotI2RlZmluZSBBRERSICgqKHZvbGF0aWxlIGxvbmcgKilhZGRyKQotCi0vKioKLSAqIHN5bmNfc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQotICogQG5yOiB0aGUgYml0IHRvIHNldAotICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKLSAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCi0gKgotICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAotICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHN5bmNfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JYXNtIHZvbGF0aWxlKCJsb2NrOyBidHNsICUxLCUwIgotCQkgICAgIDogIittIiAoQUREUikKLQkJICAgICA6ICJJciIgKG5yKQotCQkgICAgIDogIm1lbW9yeSIpOwotfQotCi0vKioKLSAqIHN5bmNfY2xlYXJfYml0IC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeQotICogQG5yOiBCaXQgdG8gY2xlYXIKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBzeW5jX2NsZWFyX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBIb3dldmVyLCBpdCBkb2VzCi0gKiBub3QgY29udGFpbiBhIG1lbW9yeSBiYXJyaWVyLCBzbyBpZiBpdCBpcyB1c2VkIGZvciBsb2NraW5nIHB1cnBvc2VzLAotICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCi0gKiBpbiBvcmRlciB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc3luY19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWFzbSB2b2xhdGlsZSgibG9jazsgYnRybCAlMSwlMCIKLQkJICAgICA6ICIrbSIgKEFERFIpCi0JCSAgICAgOiAiSXIiIChucikKLQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotLyoqCi0gKiBzeW5jX2NoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5Ci0gKiBAbnI6IEJpdCB0byBjaGFuZ2UKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KLSAqCi0gKiBzeW5jX2NoYW5nZV9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLgotICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAotICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHN5bmNfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JYXNtIHZvbGF0aWxlKCJsb2NrOyBidGNsICUxLCUwIgotCQkgICAgIDogIittIiAoQUREUikKLQkJICAgICA6ICJJciIgKG5yKQotCQkgICAgIDogIm1lbW9yeSIpOwotfQotCi0vKioKLSAqIHN5bmNfdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKLSAqIEBucjogQml0IHRvIHNldAotICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQotICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KLSAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgotICovCi1zdGF0aWMgaW5saW5lIGludCBzeW5jX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWludCBvbGRiaXQ7Ci0KLQlhc20gdm9sYXRpbGUoImxvY2s7IGJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKLQkJICAgICA6ICI9ciIgKG9sZGJpdCksICIrbSIgKEFERFIpCi0JCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIG9sZGJpdDsKLX0KLQotLyoqCi0gKiBzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQotICogQG5yOiBCaXQgdG8gY2xlYXIKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KLSAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCi0gKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgc3luY190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCWludCBvbGRiaXQ7Ci0KLQlhc20gdm9sYXRpbGUoImxvY2s7IGJ0cmwgJTIsJTFcblx0c2JibCAlMCwlMCIKLQkJICAgICA6ICI9ciIgKG9sZGJpdCksICIrbSIgKEFERFIpCi0JCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIG9sZGJpdDsKLX0KLQotLyoqCi0gKiBzeW5jX3Rlc3RfYW5kX2NoYW5nZV9iaXQgLSBDaGFuZ2UgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCi0gKiBAbnI6IEJpdCB0byBjaGFuZ2UKLSAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KLSAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCi0gKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgc3luY190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlpbnQgb2xkYml0OwotCi0JYXNtIHZvbGF0aWxlKCJsb2NrOyBidGNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCi0JCSAgICAgOiAiPXIiIChvbGRiaXQpLCAiK20iIChBRERSKQotCQkgICAgIDogIklyIiAobnIpIDogIm1lbW9yeSIpOwotCXJldHVybiBvbGRiaXQ7Ci19Ci0KLSNkZWZpbmUgc3luY190ZXN0X2JpdChuciwgYWRkcikgdGVzdF9iaXQobnIsIGFkZHIpCi0KLSN1bmRlZiBBRERSCi0KLSNlbmRpZiAvKiBBU01fWDg2X19TWU5DX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3lzY2FsbC5oIGIvaW5jbHVkZS9hc20teDg2L3N5c2NhbGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRjNDdkYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3lzY2FsbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qCi0gKiBBY2Nlc3MgdG8gdXNlciBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4KLSAqCi0gKiBTZWUgYXNtLWdlbmVyaWMvc3lzY2FsbC5oIGZvciBkZXNjcmlwdGlvbnMgb2Ygd2hhdCB3ZSBtdXN0IGRvIGhlcmUuCi0gKi8KLQotI2lmbmRlZiBfQVNNX1NZU0NBTExfSAotI2RlZmluZSBfQVNNX1NZU0NBTExfSAkxCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotCi1zdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JLyoKLQkgKiBXZSBhbHdheXMgc2lnbi1leHRlbmQgYSAtMSB2YWx1ZSBiZWluZyBzZXQgaGVyZSwKLQkgKiBzbyB0aGlzIGlzIGFsd2F5cyBlaXRoZXIgLTFMIG9yIGEgc3lzY2FsbCBudW1iZXIuCi0JICovCi0JcmV0dXJuIHJlZ3MtPm9yaWdfYXg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3JvbGxiYWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmVncy0+YXggPSByZWdzLT5vcmlnX2F4OwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfZXJyb3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBlcnJvciA9IHJlZ3MtPmF4OwotI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgotCS8qCi0JICogVFNfQ09NUEFUIGlzIHNldCBmb3IgMzItYml0IHN5c2NhbGwgZW50cmllcyBhbmQgdGhlbgotCSAqIHJlbWFpbnMgc2V0IHVudGlsIHdlIHJldHVybiB0byB1c2VyIG1vZGUuCi0JICovCi0JaWYgKHRhc2tfdGhyZWFkX2luZm8odGFzayktPnN0YXR1cyAmIFRTX0NPTVBBVCkKLQkJLyoKLQkJICogU2lnbi1leHRlbmQgdGhlIHZhbHVlIHNvIChpbnQpLUVGT08gYmVjb21lcyAobG9uZyktRUZPTwotCQkgKiBhbmQgd2lsbCBtYXRjaCBjb3JyZWN0bHkgaW4gY29tcGFyaXNvbnMuCi0JCSAqLwotCQllcnJvciA9IChsb25nKSAoaW50KSBlcnJvcjsKLSNlbmRpZgotCXJldHVybiBJU19FUlJfVkFMVUUoZXJyb3IpID8gZXJyb3IgOiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiByZWdzLT5heDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkJICAgIGludCBlcnJvciwgbG9uZyB2YWwpCi17Ci0JcmVncy0+YXggPSAobG9uZykgZXJyb3IgPzogdmFsOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9nZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCQkgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAotCQkJCQkgdW5zaWduZWQgbG9uZyAqYXJncykKLXsKLQlCVUdfT04oaSArIG4gPiA2KTsKLQltZW1jcHkoYXJncywgJnJlZ3MtPmJ4ICsgaSwgbiAqIHNpemVvZihhcmdzWzBdKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCi0JCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICphcmdzKQotewotCUJVR19PTihpICsgbiA+IDYpOwotCW1lbWNweSgmcmVncy0+YnggKyBpLCBhcmdzLCBuICogc2l6ZW9mKGFyZ3NbMF0pKTsKLX0KLQotI2Vsc2UJIC8qIENPTkZJR19YODZfNjQgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkJIHVuc2lnbmVkIGludCBpLCB1bnNpZ25lZCBpbnQgbiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgKmFyZ3MpCi17Ci0jIGlmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgotCWlmICh0YXNrX3RocmVhZF9pbmZvKHRhc2spLT5zdGF0dXMgJiBUU19DT01QQVQpCi0JCXN3aXRjaCAoaSArIG4pIHsKLQkJY2FzZSA2OgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPmJwOwotCQljYXNlIDU6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQkqYXJncysrID0gcmVncy0+ZGk7Ci0JCWNhc2UgNDoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5zaTsKLQkJY2FzZSAzOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPmR4OwotCQljYXNlIDI6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQkqYXJncysrID0gcmVncy0+Y3g7Ci0JCWNhc2UgMToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5ieDsKLQkJY2FzZSAwOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJfQotCWVsc2UKLSMgZW5kaWYKLQkJc3dpdGNoIChpICsgbikgewotCQljYXNlIDY6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQkqYXJncysrID0gcmVncy0+cjk7Ci0JCWNhc2UgNToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5yODsKLQkJY2FzZSA0OgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPnIxMDsKLQkJY2FzZSAzOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPmR4OwotCQljYXNlIDI6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQkqYXJncysrID0gcmVncy0+c2k7Ci0JCWNhc2UgMToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5kaTsKLQkJY2FzZSAwOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCQkgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAotCQkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqYXJncykKLXsKLSMgaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCi0JaWYgKHRhc2tfdGhyZWFkX2luZm8odGFzayktPnN0YXR1cyAmIFRTX0NPTVBBVCkKLQkJc3dpdGNoIChpICsgbikgewotCQljYXNlIDY6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5icCA9ICphcmdzKys7Ci0JCWNhc2UgNToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPmRpID0gKmFyZ3MrKzsKLQkJY2FzZSA0OgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJcmVncy0+c2kgPSAqYXJncysrOwotCQljYXNlIDM6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5keCA9ICphcmdzKys7Ci0JCWNhc2UgMjoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPmN4ID0gKmFyZ3MrKzsKLQkJY2FzZSAxOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJcmVncy0+YnggPSAqYXJncysrOwotCQljYXNlIDA6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJfQotCWVsc2UKLSMgZW5kaWYKLQkJc3dpdGNoIChpICsgbikgewotCQljYXNlIDY6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5yOSA9ICphcmdzKys7Ci0JCWNhc2UgNToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPnI4ID0gKmFyZ3MrKzsKLQkJY2FzZSA0OgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJcmVncy0+cjEwID0gKmFyZ3MrKzsKLQkJY2FzZSAzOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJcmVncy0+ZHggPSAqYXJncysrOwotCQljYXNlIDI6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5zaSA9ICphcmdzKys7Ci0JCWNhc2UgMToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPmRpID0gKmFyZ3MrKzsKLQkJY2FzZSAwOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KLX0KLQotI2VuZGlmCS8qIENPTkZJR19YODZfMzIgKi8KLQotI2VuZGlmCS8qIF9BU01fU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14ODYvc3lzdGVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMGM4OTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N5c3RlbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fU1lTVEVNX0gKLSNkZWZpbmUgQVNNX1g4Nl9fU1lTVEVNX0gKLQotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLSNpbmNsdWRlIDxhc20vbm9wcy5oPgotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KLQotLyogZW50cmllcyBpbiBBUkNIX0RMSU5GTzogKi8KLSNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KLSMgZGVmaW5lIEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggMgotI2Vsc2UKLSMgZGVmaW5lIEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggMQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0KLXN0cnVjdCB0YXNrX3N0cnVjdDsgLyogb25lIG9mIHRoZSBzdHJhbmdlciBhc3BlY3RzIG9mIEMgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KLXN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAotCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7Ci0KLS8qCi0gKiBTYXZpbmcgZWZsYWdzIGlzIGltcG9ydGFudC4gSXQgc3dpdGNoZXMgbm90IG9ubHkgSU9QTCBiZXR3ZWVuIHRhc2tzLAotICogaXQgYWxzbyBwcm90ZWN0cyBvdGhlciB0YXNrcyBmcm9tIE5UIGxlYWtpbmcgdGhyb3VnaCBzeXNlbnRlciBldGMuCi0gKi8KLSNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCS8qCQkJCQkJCQlcCi0JICogQ29udGV4dC1zd2l0Y2hpbmcgY2xvYmJlcnMgYWxsIHJlZ2lzdGVycywgc28gd2UgY2xvYmJlcglcCi0JICogdGhlbSBleHBsaWNpdGx5LCB2aWEgdW51c2VkIG91dHB1dCB2YXJpYWJsZXMuCQlcCi0JICogKEVBWCBhbmQgRUJQIGlzIG5vdCBsaXN0ZWQgYmVjYXVzZSBFQlAgaXMgc2F2ZWQvcmVzdG9yZWQJXAotCSAqIGV4cGxpY2l0bHkgZm9yIHdjaGFuIGFjY2VzcyBhbmQgRUFYIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YJXAotCSAqIF9fc3dpdGNoX3RvKCkpCQkJCQkJXAotCSAqLwkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZWJ4LCBlY3gsIGVkeCwgZXNpLCBlZGk7CQkJCVwKLQkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInB1c2hmbFxuXHQiCQkvKiBzYXZlICAgIGZsYWdzICovCVwKLQkJICAgICAicHVzaGwgJSVlYnBcblx0IgkJLyogc2F2ZSAgICBFQlAgICAqLwlcCi0JCSAgICAgIm1vdmwgJSVlc3AsJVtwcmV2X3NwXVxuXHQiCS8qIHNhdmUgICAgRVNQICAgKi8gXAotCQkgICAgICJtb3ZsICVbbmV4dF9zcF0sJSVlc3Bcblx0IgkvKiByZXN0b3JlIEVTUCAgICovIFwKLQkJICAgICAibW92bCAkMWYsJVtwcmV2X2lwXVxuXHQiCS8qIHNhdmUgICAgRUlQICAgKi8JXAotCQkgICAgICJwdXNobCAlW25leHRfaXBdXG5cdCIJLyogcmVzdG9yZSBFSVAgICAqLwlcCi0JCSAgICAgImptcCBfX3N3aXRjaF90b1xuIgkvKiByZWdwYXJtIGNhbGwgICovCVwKLQkJICAgICAiMTpcdCIJCQkJCQlcCi0JCSAgICAgInBvcGwgJSVlYnBcblx0IgkJLyogcmVzdG9yZSBFQlAgICAqLwlcCi0JCSAgICAgInBvcGZsXG4iCQkJLyogcmVzdG9yZSBmbGFncyAqLwlcCi0JCQkJCQkJCQlcCi0JCSAgICAgLyogb3V0cHV0IHBhcmFtZXRlcnMgKi8JCQkJXAotCQkgICAgIDogW3ByZXZfc3BdICI9bSIgKHByZXYtPnRocmVhZC5zcCksCQlcCi0JCSAgICAgICBbcHJldl9pcF0gIj1tIiAocHJldi0+dGhyZWFkLmlwKSwJCVwKLQkJICAgICAgICI9YSIgKGxhc3QpLAkJCQkJXAotCQkJCQkJCQkJXAotCQkgICAgICAgLyogY2xvYmJlcmVkIG91dHB1dCByZWdpc3RlcnM6ICovCQlcCi0JCSAgICAgICAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpLAkJXAotCQkgICAgICAgIj1TIiAoZXNpKSwgIj1EIiAoZWRpKQkJCQlcCi0JCSAgICAgICAJCQkJCQkJXAotCQkgICAgICAgLyogaW5wdXQgcGFyYW1ldGVyczogKi8JCQkJXAotCQkgICAgIDogW25leHRfc3BdICAibSIgKG5leHQtPnRocmVhZC5zcCksCQlcCi0JCSAgICAgICBbbmV4dF9pcF0gICJtIiAobmV4dC0+dGhyZWFkLmlwKSwJCVwKLQkJICAgICAgIAkJCQkJCQlcCi0JCSAgICAgICAvKiByZWdwYXJtIHBhcmFtZXRlcnMgZm9yIF9fc3dpdGNoX3RvKCk6ICovCVwKLQkJICAgICAgIFtwcmV2XSAgICAgImEiIChwcmV2KSwJCQkJXAotCQkgICAgICAgW25leHRdICAgICAiZCIgKG5leHQpCQkJCVwKLQkJCQkJCQkJCVwKLQkJICAgICA6IC8qIHJlbG9hZGVkIHNlZ21lbnQgcmVnaXN0ZXJzICovCQkJXAotCQkJIm1lbW9yeSIpOwkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyoKLSAqIGRpc2FibGUgaGx0IGR1cmluZyBjZXJ0YWluIGNyaXRpY2FsIGkvbyBvcGVyYXRpb25zCi0gKi8KLSNkZWZpbmUgSEFWRV9ESVNBQkxFX0hMVAotI2Vsc2UKLSNkZWZpbmUgX19TQVZFKHJlZywgb2Zmc2V0KSAibW92cSAlJSIgI3JlZyAiLCgxNC0iICNvZmZzZXQgIikqOCglJXJzcClcblx0IgotI2RlZmluZSBfX1JFU1RPUkUocmVnLCBvZmZzZXQpICJtb3ZxICgxNC0iICNvZmZzZXQgIikqOCglJXJzcCksJSUiICNyZWcgIlxuXHQiCi0KLS8qIGZyYW1lIHBvaW50ZXIgbXVzdCBiZSBsYXN0IGZvciBnZXRfd2NoYW4gKi8KLSNkZWZpbmUgU0FWRV9DT05URVhUICAgICJwdXNoZiA7IHB1c2hxICUlcmJwIDsgbW92cSAlJXJzaSwlJXJicFxuXHQiCi0jZGVmaW5lIFJFU1RPUkVfQ09OVEVYVCAibW92cSAlJXJicCwlJXJzaSA7IHBvcHEgJSVyYnAgOyBwb3BmXHQiCi0KLSNkZWZpbmUgX19FWFRSQV9DTE9CQkVSICBcCi0JLCAicmN4IiwgInJieCIsICJyZHgiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsIFwKLQkgICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiCi0KLS8qIFNhdmUgcmVzdG9yZSBmbGFncyB0byBjbGVhciBoYW5kbGUgbGVha2luZyBOVCAqLwotI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgXAotCWFzbSB2b2xhdGlsZShTQVZFX0NPTlRFWFQJCQkJCQkgICAgXAotCSAgICAgIm1vdnEgJSVyc3AsJVBbdGhyZWFkcnNwXSglW3ByZXZdKVxuXHQiIC8qIHNhdmUgUlNQICovCSAgXAotCSAgICAgIm1vdnEgJVBbdGhyZWFkcnNwXSglW25leHRdKSwlJXJzcFxuXHQiIC8qIHJlc3RvcmUgUlNQICovCSAgXAotCSAgICAgImNhbGwgX19zd2l0Y2hfdG9cblx0IgkJCQkJICBcCi0JICAgICAiLmdsb2JsIHRocmVhZF9yZXR1cm5cbiIJCQkJCSAgXAotCSAgICAgInRocmVhZF9yZXR1cm46XG5cdCIJCQkJCSAgXAotCSAgICAgIm1vdnEgJSVnczolUFtwZGFfcGN1cnJlbnRdLCUlcnNpXG5cdCIJCQkgIFwKLQkgICAgICJtb3ZxICVQW3RocmVhZF9pbmZvXSglJXJzaSksJSVyOFxuXHQiCQkJICBcCi0JICAgICBMT0NLX1BSRUZJWCAiYnRyICAlW3RpZl9mb3JrXSwlUFt0aV9mbGFnc10oJSVyOClcblx0IgkgIFwKLQkgICAgICJtb3ZxICUlcmF4LCUlcmRpXG5cdCIgCQkJCQkgIFwKLQkgICAgICJqYyAgIHJldF9mcm9tX2Zvcmtcblx0IgkJCQkJICBcCi0JICAgICBSRVNUT1JFX0NPTlRFWFQJCQkJCQkgIFwKLQkgICAgIDogIj1hIiAobGFzdCkJCQkJCSAgCSAgXAotCSAgICAgOiBbbmV4dF0gIlMiIChuZXh0KSwgW3ByZXZdICJEIiAocHJldiksCQkJICBcCi0JICAgICAgIFt0aHJlYWRyc3BdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuc3ApKSwgXAotCSAgICAgICBbdGlfZmxhZ3NdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpLAkgIFwKLQkgICAgICAgW3RpZl9mb3JrXSAiaSIgKFRJRl9GT1JLKSwJCQkgIAkgIFwKLQkgICAgICAgW3RocmVhZF9pbmZvXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKSwgICBcCi0JICAgICAgIFtwZGFfcGN1cnJlbnRdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHg4NjY0X3BkYSwgcGN1cnJlbnQpKSAgXAotCSAgICAgOiAibWVtb3J5IiwgImNjIiBfX0VYVFJBX0NMT0JCRVIpCi0jZW5kaWYKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX3NldF9iYXNlKGFkZHIsIGJhc2UpIGRvIHsgdW5zaWduZWQgbG9uZyBfX3ByOyBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdncgJSVkeCwlMVxuXHQiIFwKLQkicm9ybCAkMTYsJSVlZHhcblx0IiBcCi0JIm1vdmIgJSVkbCwlMlxuXHQiIFwKLQkibW92YiAlJWRoLCUzIiBcCi0JOiI9JmQiIChfX3ByKSBcCi0JOiJtIiAoKigoYWRkcikrMikpLCBcCi0JICJtIiAoKigoYWRkcikrNCkpLCBcCi0JICJtIiAoKigoYWRkcikrNykpLCBcCi0JICIwIiAoYmFzZSkgXAotCSk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX3NldF9saW1pdChhZGRyLCBsaW1pdCkgZG8geyB1bnNpZ25lZCBsb25nIF9fbHI7IFwKLV9fYXNtX18gX192b2xhdGlsZV9fICgibW92dyAlJWR4LCUxXG5cdCIgXAotCSJyb3JsICQxNiwlJWVkeFxuXHQiIFwKLQkibW92YiAlMiwlJWRoXG5cdCIgXAotCSJhbmRiICQweGYwLCUlZGhcblx0IiBcCi0JIm9yYiAlJWRoLCUlZGxcblx0IiBcCi0JIm1vdmIgJSVkbCwlMiIgXAotCToiPSZkIiAoX19scikgXAotCToibSIgKCooYWRkcikpLCBcCi0JICJtIiAoKigoYWRkcikrNikpLCBcCi0JICIwIiAobGltaXQpIFwKLQkpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIHNldF9iYXNlKGxkdCwgYmFzZSkgX3NldF9iYXNlKCgoY2hhciAqKSYobGR0KSkgLCAoYmFzZSkpCi0jZGVmaW5lIHNldF9saW1pdChsZHQsIGxpbWl0KSBfc2V0X2xpbWl0KCgoY2hhciAqKSYobGR0KSkgLCAoKGxpbWl0KS0xKSkKLQotZXh0ZXJuIHZvaWQgbmF0aXZlX2xvYWRfZ3NfaW5kZXgodW5zaWduZWQpOwotCi0vKgotICogTG9hZCBhIHNlZ21lbnQuIEZhbGwgYmFjayBvbiBsb2FkaW5nIHRoZSB6ZXJvCi0gKiBzZWdtZW50IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLi4KLSAqLwotI2RlZmluZSBsb2Fkc2VnbWVudChzZWcsIHZhbHVlKQkJCVwKLQlhc20gdm9sYXRpbGUoIlxuIgkJCVwKLQkJICAgICAiMTpcdCIJCQlcCi0JCSAgICAgIm1vdmwgJWswLCUlIiAjc2VnICJcbiIJXAotCQkgICAgICIyOlxuIgkJCVwKLQkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIglcCi0JCSAgICAgIjM6XHQiCQkJXAotCQkgICAgICJtb3ZsICVrMSwgJSUiICNzZWcgIlxuXHQiCVwKLQkJICAgICAiam1wIDJiXG4iCQkJXAotCQkgICAgICIucHJldmlvdXNcbiIJCVwKLQkJICAgICBfQVNNX0VYVEFCTEUoMWIsM2IpCVwKLQkJICAgICA6IDoiciIgKHZhbHVlKSwgInIiICgwKSA6ICJtZW1vcnkiKQotCi0KLS8qCi0gKiBTYXZlIGEgc2VnbWVudCByZWdpc3RlciBhd2F5Ci0gKi8KLSNkZWZpbmUgc2F2ZXNlZ21lbnQoc2VnLCB2YWx1ZSkJCQkJXAotCWFzbSgibW92ICUlIiAjc2VnICIsJTAiOiI9ciIgKHZhbHVlKSA6IDogIm1lbW9yeSIpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbGltaXQodW5zaWduZWQgbG9uZyBzZWdtZW50KQotewotCXVuc2lnbmVkIGxvbmcgX19saW1pdDsKLQlhc20oImxzbGwgJTEsJTAiIDogIj1yIiAoX19saW1pdCkgOiAiciIgKHNlZ21lbnQpKTsKLQlyZXR1cm4gX19saW1pdCArIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfY2x0cyh2b2lkKQotewotCWFzbSB2b2xhdGlsZSgiY2x0cyIpOwotfQotCi0vKgotICogVm9sYXRpbGUgaXNuJ3QgZW5vdWdoIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gcmVvcmRlcmluZyB0aGUKLSAqIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZvciB0aGUgY29udHJvbCByZWdpc3RlcnMgYW5kIG1lc3NpbmcgZXZlcnl0aGluZyB1cC4KLSAqIEEgbWVtb3J5IGNsb2JiZXIgd291bGQgc29sdmUgdGhlIHByb2JsZW0sIGJ1dCB3b3VsZCBwcmV2ZW50IHJlb3JkZXJpbmcgb2YKLSAqIGFsbCBsb2FkcyBzdG9yZXMgYXJvdW5kIGl0LCB3aGljaCBjYW4gaHVydCBwZXJmb3JtYW5jZS4gU29sdXRpb24gaXMgdG8KLSAqIHVzZSBhIHZhcmlhYmxlIGFuZCBtaW1pYyByZWFkcyBhbmQgd3JpdGVzIHRvIGl0IHRvIGVuZm9yY2Ugc2VyaWFsaXphdGlvbgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvcmNlX29yZGVyOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3IwKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJtb3YgJSVjcjAsJTBcblx0IiA6ICI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2NyMCh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUoIm1vdiAlMCwlJWNyMCI6IDogInIiICh2YWwpLCAibSIgKF9fZm9yY2Vfb3JkZXIpKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyMih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWFzbSB2b2xhdGlsZSgibW92ICUlY3IyLCUwXG5cdCIgOiAiPXIiICh2YWwpLCAiPW0iIChfX2ZvcmNlX29yZGVyKSk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9jcjIodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3YgJTAsJSVjcjIiOiA6ICJyIiAodmFsKSwgIm0iIChfX2ZvcmNlX29yZGVyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlhc20gdm9sYXRpbGUoIm1vdiAlJWNyMywlMFxuXHQiIDogIj1yIiAodmFsKSwgIj1tIiAoX19mb3JjZV9vcmRlcikpOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfY3IzKHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSgibW92ICUwLCUlY3IzIjogOiAiciIgKHZhbCksICJtIiAoX19mb3JjZV9vcmRlcikpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3I0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJtb3YgJSVjcjQsJTBcblx0IiA6ICI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3I0X3NhZmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQkvKiBUaGlzIGNvdWxkIGZhdWx0IGlmICVjcjQgZG9lcyBub3QgZXhpc3QuIEluIHg4Nl82NCwgYSBjcjQgYWx3YXlzCi0JICogZXhpc3RzLCBzbyBpdCB3aWxsIG5ldmVyIGZhaWwuICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWFzbSB2b2xhdGlsZSgiMTogbW92ICUlY3I0LCAlMFxuIgotCQkgICAgICIyOlxuIgotCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgMmIpCi0JCSAgICAgOiAiPXIiICh2YWwpLCAiPW0iIChfX2ZvcmNlX29yZGVyKSA6ICIwIiAoMCkpOwotI2Vsc2UKLQl2YWwgPSBuYXRpdmVfcmVhZF9jcjQoKTsKLSNlbmRpZgotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfY3I0KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSgibW92ICUwLCUlY3I0IjogOiAiciIgKHZhbCksICJtIiAoX19mb3JjZV9vcmRlcikpOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyOCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3I4OwotCWFzbSB2b2xhdGlsZSgibW92cSAlJWNyOCwlMCIgOiAiPXIiIChjcjgpKTsKLQlyZXR1cm4gY3I4OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2NyOCh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjgiIDo6ICJyIiAodmFsKSA6ICJtZW1vcnkiKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3diaW52ZCh2b2lkKQotewotCWFzbSB2b2xhdGlsZSgid2JpbnZkIjogOiA6Im1lbW9yeSIpOwotfQotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZQotI2RlZmluZSByZWFkX2NyMCgpCShuYXRpdmVfcmVhZF9jcjAoKSkKLSNkZWZpbmUgd3JpdGVfY3IwKHgpCShuYXRpdmVfd3JpdGVfY3IwKHgpKQotI2RlZmluZSByZWFkX2NyMigpCShuYXRpdmVfcmVhZF9jcjIoKSkKLSNkZWZpbmUgd3JpdGVfY3IyKHgpCShuYXRpdmVfd3JpdGVfY3IyKHgpKQotI2RlZmluZSByZWFkX2NyMygpCShuYXRpdmVfcmVhZF9jcjMoKSkKLSNkZWZpbmUgd3JpdGVfY3IzKHgpCShuYXRpdmVfd3JpdGVfY3IzKHgpKQotI2RlZmluZSByZWFkX2NyNCgpCShuYXRpdmVfcmVhZF9jcjQoKSkKLSNkZWZpbmUgcmVhZF9jcjRfc2FmZSgpCShuYXRpdmVfcmVhZF9jcjRfc2FmZSgpKQotI2RlZmluZSB3cml0ZV9jcjQoeCkJKG5hdGl2ZV93cml0ZV9jcjQoeCkpCi0jZGVmaW5lIHdiaW52ZCgpCShuYXRpdmVfd2JpbnZkKCkpCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSByZWFkX2NyOCgpCShuYXRpdmVfcmVhZF9jcjgoKSkKLSNkZWZpbmUgd3JpdGVfY3I4KHgpCShuYXRpdmVfd3JpdGVfY3I4KHgpKQotI2RlZmluZSBsb2FkX2dzX2luZGV4ICAgbmF0aXZlX2xvYWRfZ3NfaW5kZXgKLSNlbmRpZgotCi0vKiBDbGVhciB0aGUgJ1RTJyBiaXQgKi8KLSNkZWZpbmUgY2x0cygpCQkobmF0aXZlX2NsdHMoKSkKLQotI2VuZGlmLyogQ09ORklHX1BBUkFWSVJUICovCi0KLSNkZWZpbmUgc3R0cygpIHdyaXRlX2NyMChyZWFkX2NyMCgpIHwgWDg2X0NSMF9UUykKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGNsZmx1c2godm9sYXRpbGUgdm9pZCAqX19wKQotewotCWFzbSB2b2xhdGlsZSgiY2xmbHVzaCAlMCIgOiAiK20iICgqKHZvbGF0aWxlIGNoYXIgX19mb3JjZSAqKV9fcCkpOwotfQotCi0jZGVmaW5lIG5vcCgpIGFzbSB2b2xhdGlsZSAoIm5vcCIpCi0KLXZvaWQgZGlzYWJsZV9obHQodm9pZCk7Ci12b2lkIGVuYWJsZV9obHQodm9pZCk7Ci0KLXZvaWQgY3B1X2lkbGVfd2FpdCh2b2lkKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9hbGlnbl9zdGFjayh1bnNpZ25lZCBsb25nIHNwKTsKLWV4dGVybiB2b2lkIGZyZWVfaW5pdF9wYWdlcyhjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCk7Ci0KLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpOwotCi0vKgotICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KLSAqIEFuZCB5ZXMsIHRoaXMgaXMgcmVxdWlyZWQgb24gVVAgdG9vIHdoZW4gd2UncmUgdGFsa2luZwotICogdG8gZGV2aWNlcy4KLSAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qCi0gKiBTb21lIG5vbi1JbnRlbCBjbG9uZXMgc3VwcG9ydCBvdXQgb2Ygb3JkZXIgc3RvcmUuIHdtYigpIGNlYXNlcyB0byBiZSBhCi0gKiBub3AgZm9yIHRoZXNlLgotICovCi0jZGVmaW5lIG1iKCkgYWx0ZXJuYXRpdmUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiLCAibWZlbmNlIiwgWDg2X0ZFQVRVUkVfWE1NMikKLSNkZWZpbmUgcm1iKCkgYWx0ZXJuYXRpdmUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiLCAibGZlbmNlIiwgWDg2X0ZFQVRVUkVfWE1NMikKLSNkZWZpbmUgd21iKCkgYWx0ZXJuYXRpdmUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiLCAic2ZlbmNlIiwgWDg2X0ZFQVRVUkVfWE1NKQotI2Vsc2UKLSNkZWZpbmUgbWIoKSAJYXNtIHZvbGF0aWxlKCJtZmVuY2UiOjo6Im1lbW9yeSIpCi0jZGVmaW5lIHJtYigpCWFzbSB2b2xhdGlsZSgibGZlbmNlIjo6OiJtZW1vcnkiKQotI2RlZmluZSB3bWIoKQlhc20gdm9sYXRpbGUoInNmZW5jZSIgOjo6ICJtZW1vcnkiKQotI2VuZGlmCi0KLS8qKgotICogcmVhZF9iYXJyaWVyX2RlcGVuZHMgLSBGbHVzaCBhbGwgcGVuZGluZyByZWFkcyB0aGF0IHN1YnNlcXVlbnRzIHJlYWRzCi0gKiBkZXBlbmQgb24uCi0gKgotICogTm8gZGF0YS1kZXBlbmRlbnQgcmVhZHMgZnJvbSBtZW1vcnktbGlrZSByZWdpb25zIGFyZSBldmVyIHJlb3JkZXJlZAotICogb3ZlciB0aGlzIGJhcnJpZXIuICBBbGwgcmVhZHMgcHJlY2VkaW5nIHRoaXMgcHJpbWl0aXZlIGFyZSBndWFyYW50ZWVkCi0gKiB0byBhY2Nlc3MgbWVtb3J5IChidXQgbm90IG5lY2Vzc2FyaWx5IG90aGVyIENQVXMnIGNhY2hlcykgYmVmb3JlIGFueQotICogcmVhZHMgZm9sbG93aW5nIHRoaXMgcHJpbWl0aXZlIHRoYXQgZGVwZW5kIG9uIHRoZSBkYXRhIHJldHVybiBieQotICogYW55IG9mIHRoZSBwcmVjZWRpbmcgcmVhZHMuICBUaGlzIHByaW1pdGl2ZSBpcyBtdWNoIGxpZ2h0ZXIgd2VpZ2h0IHRoYW4KLSAqIHJtYigpIG9uIG1vc3QgQ1BVcywgYW5kIGlzIG5ldmVyIGhlYXZpZXIgd2VpZ2h0IHRoYW4gaXMKLSAqIHJtYigpLgotICoKLSAqIFRoZXNlIG9yZGVyaW5nIGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQgYnkgYm90aCB0aGUgbG9jYWwgQ1BVCi0gKiBhbmQgdGhlIGNvbXBpbGVyLgotICoKLSAqIE9yZGVyaW5nIGlzIG5vdCBndWFyYW50ZWVkIGJ5IGFueXRoaW5nIG90aGVyIHRoYW4gdGhlc2UgcHJpbWl0aXZlcywKLSAqIG5vdCBldmVuIGJ5IGRhdGEgZGVwZW5kZW5jaWVzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgotICogbWVtb3J5X2JhcnJpZXIoKSBmb3IgZXhhbXBsZXMgYW5kIFVSTHMgdG8gbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIGZvcmNlIG9yZGVyaW5nICh0aGUgaW5pdGlhbAotICogdmFsdWUgb2YgImEiIGlzIHplcm8sICJiIiBpcyBvbmUsIGFuZCAicCIgaXMgIiZhIik6Ci0gKgotICogPHByb2dyYW1saXN0aW5nPgotICoJQ1BVIDAJCQkJQ1BVIDEKLSAqCi0gKgliID0gMjsKLSAqCW1lbW9yeV9iYXJyaWVyKCk7Ci0gKglwID0gJmI7CQkJCXEgPSBwOwotICoJCQkJCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7Ci0gKgkJCQkJZCA9ICpxOwotICogPC9wcm9ncmFtbGlzdGluZz4KLSAqCi0gKiBiZWNhdXNlIHRoZSByZWFkIG9mICIqcSIgZGVwZW5kcyBvbiB0aGUgcmVhZCBvZiAicCIgYW5kIHRoZXNlCi0gKiB0d28gcmVhZHMgYXJlIHNlcGFyYXRlZCBieSBhIHJlYWRfYmFycmllcl9kZXBlbmRzKCkuICBIb3dldmVyLAotICogdGhlIGZvbGxvd2luZyBjb2RlLCB3aXRoIHRoZSBzYW1lIGluaXRpYWwgdmFsdWVzIGZvciAiYSIgYW5kICJiIjoKLSAqCi0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKglDUFUgMAkJCQlDUFUgMQotICoKLSAqCWEgPSAyOwotICoJbWVtb3J5X2JhcnJpZXIoKTsKLSAqCWIgPSAzOwkJCQl5ID0gYjsKLSAqCQkJCQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOwotICoJCQkJCXggPSBhOwotICogPC9wcm9ncmFtbGlzdGluZz4KLSAqCi0gKiBkb2VzIG5vdCBlbmZvcmNlIG9yZGVyaW5nLCBzaW5jZSB0aGVyZSBpcyBubyBkYXRhIGRlcGVuZGVuY3kgYmV0d2VlbgotICogdGhlIHJlYWQgb2YgImEiIGFuZCB0aGUgcmVhZCBvZiAiYiIuICBUaGVyZWZvcmUsIG9uIHNvbWUgQ1BVcywgc3VjaAotICogYXMgQWxwaGEsICJ5IiBjb3VsZCBiZSBzZXQgdG8gMyBhbmQgIngiIHRvIDAuICBVc2Ugcm1iKCkKLSAqIGluIGNhc2VzIGxpa2UgdGhpcyB3aGVyZSB0aGVyZSBhcmUgbm8gZGF0YSBkZXBlbmRlbmNpZXMuCi0gKiovCi0KLSNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCi0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHNtcF9tYigpCW1iKCkKLSNpZmRlZiBDT05GSUdfWDg2X1BQUk9fRkVOQ0UKLSMgZGVmaW5lIHNtcF9ybWIoKQlybWIoKQotI2Vsc2UKLSMgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQotIyBkZWZpbmUgc21wX3dtYigpIAl3bWIoKQotI2Vsc2UKLSMgZGVmaW5lIHNtcF93bWIoKQliYXJyaWVyKCkKLSNlbmRpZgotI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCi0jZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7ICh2b2lkKXhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyBiYXJyaWVyKCk7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotLyoKLSAqIFN0b3AgUkRUU0Mgc3BlY3VsYXRpb24uIFRoaXMgaXMgbmVlZGVkIHdoZW4geW91IG5lZWQgdG8gdXNlIFJEVFNDCi0gKiAob3IgZ2V0X2N5Y2xlcyBvciB2cmVhZCB0aGF0IHBvc3NpYmx5IGFjY2Vzc2VzIHRoZSBUU0MpIGluIGEgZGVmaW5lZAotICogY29kZSByZWdpb24uCi0gKgotICogKENvdWxkIHVzZSBhbiBhbHRlcm5hdGl2ZSB0aHJlZSB3YXkgZm9yIHRoaXMgaWYgdGhlcmUgd2FzIG9uZS4pCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZHRzY19iYXJyaWVyKHZvaWQpCi17Ci0JYWx0ZXJuYXRpdmUoQVNNX05PUDMsICJtZmVuY2UiLCBYODZfRkVBVFVSRV9NRkVOQ0VfUkRUU0MpOwotCWFsdGVybmF0aXZlKEFTTV9OT1AzLCAibGZlbmNlIiwgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDKTsKLX0KLQotI2VuZGlmIC8qIEFTTV9YODZfX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3lzdGVtXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvc3lzdGVtXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZWRiOGIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N5c3RlbV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19TWVNURU1fNjRfSAotI2RlZmluZSBBU01fWDg2X19TWVNURU1fNjRfSAotCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vY21weGNoZy5oPgotCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyOCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3I4OwotCWFzbSB2b2xhdGlsZSgibW92cSAlJWNyOCwlMCIgOiAiPXIiIChjcjgpKTsKLQlyZXR1cm4gY3I4OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3I4KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSgibW92cSAlMCwlJWNyOCIgOjogInIiICh2YWwpIDogIm1lbW9yeSIpOwotfQotCi0jaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KLQotI2VuZGlmIC8qIEFTTV9YODZfX1NZU1RFTV82NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGNlLmggYi9pbmNsdWRlL2FzbS14ODYvdGNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OTMyZDcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYXNtLXBvd2VycGMvdGNlLmguCi0gKgotICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDYKLSAqCi0gKiBBdXRob3I6IE11bGkgQmVuLVllaHVkYSA8bXVsaUBpbC5pYm0uY29tPgotICogQXV0aG9yOiBKb24gTWFzb24gPGpkbWFzb25AdXMuaWJtLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1RDRV9ICi0jZGVmaW5lIEFTTV9YODZfX1RDRV9ICi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3BlY2lmaWVkX3RhYmxlX3NpemU7Ci1zdHJ1Y3QgaW9tbXVfdGFibGU7Ci0KLSNkZWZpbmUgVENFX0VOVFJZX1NJWkUgICA4ICAgLyogaW4gYnl0ZXMgKi8KLQotI2RlZmluZSBUQ0VfUkVBRF9TSElGVCAgIDAKLSNkZWZpbmUgVENFX1dSSVRFX1NISUZUICAxCi0jZGVmaW5lIFRDRV9IVUJJRF9TSElGVCAgMiAgIC8qIHVudXNlZCAqLwotI2RlZmluZSBUQ0VfUlNWRF9TSElGVCAgIDggICAvKiB1bnVzZWQgKi8KLSNkZWZpbmUgVENFX1JQTl9TSElGVCAgICAxMgotI2RlZmluZSBUQ0VfVU5VU0VEX1NISUZUIDQ4ICAvKiB1bnVzZWQgKi8KLQotI2RlZmluZSBUQ0VfUlBOX01BU0sgICAgIDB4MDAwMGZmZmZmZmZmZjAwMFVMTAotCi1leHRlcm4gdm9pZCB0Y2VfYnVpbGQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHVuc2lnbmVkIGxvbmcgaW5kZXgsCi0JCSAgICAgIHVuc2lnbmVkIGludCBucGFnZXMsIHVuc2lnbmVkIGxvbmcgdWFkZHIsIGludCBkaXJlY3Rpb24pOwotZXh0ZXJuIHZvaWQgdGNlX2ZyZWUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGludCBucGFnZXMpOwotZXh0ZXJuIHZvaWQgKiBfX2luaXQgYWxsb2NfdGNlX3RhYmxlKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IGZyZWVfdGNlX3RhYmxlKHZvaWQgKnRibCk7Ci1leHRlcm4gaW50IF9faW5pdCBidWlsZF90Y2VfdGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICpiYmFyKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1RDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXg4Ni90ZXJtYml0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDAwZGM1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90ZXJtYml0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVEVSTUJJVFNfSAotI2RlZmluZSBBU01fWDg2X19URVJNQklUU19ICi0KLSNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2NfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAl0Y2ZsYWdfdDsKLQotI2RlZmluZSBOQ0NTIDE5Ci1zdHJ1Y3QgdGVybWlvcyB7Ci0JdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KLQljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KLQljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KLX07Ci0KLXN0cnVjdCB0ZXJtaW9zMiB7Ci0JdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KLQljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KLQljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KLQlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KLQlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCi19OwotCi1zdHJ1Y3Qga3Rlcm1pb3MgewotCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCi0JY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCi0JY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCi0Jc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCi0Jc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLwotfTsKLQotLyogY19jYyBjaGFyYWN0ZXJzICovCi0jZGVmaW5lIFZJTlRSIDAKLSNkZWZpbmUgVlFVSVQgMQotI2RlZmluZSBWRVJBU0UgMgotI2RlZmluZSBWS0lMTCAzCi0jZGVmaW5lIFZFT0YgNAotI2RlZmluZSBWVElNRSA1Ci0jZGVmaW5lIFZNSU4gNgotI2RlZmluZSBWU1dUQyA3Ci0jZGVmaW5lIFZTVEFSVCA4Ci0jZGVmaW5lIFZTVE9QIDkKLSNkZWZpbmUgVlNVU1AgMTAKLSNkZWZpbmUgVkVPTCAxMQotI2RlZmluZSBWUkVQUklOVCAxMgotI2RlZmluZSBWRElTQ0FSRCAxMwotI2RlZmluZSBWV0VSQVNFIDE0Ci0jZGVmaW5lIFZMTkVYVCAxNQotI2RlZmluZSBWRU9MMiAxNgotCi0vKiBjX2lmbGFnIGJpdHMgKi8KLSNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKLSNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKLSNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKLSNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKLSNkZWZpbmUgSU5QQ0sJMDAwMDAyMAotI2RlZmluZSBJU1RSSVAJMDAwMDA0MAotI2RlZmluZSBJTkxDUgkwMDAwMTAwCi0jZGVmaW5lIElHTkNSCTAwMDAyMDAKLSNkZWZpbmUgSUNSTkwJMDAwMDQwMAotI2RlZmluZSBJVUNMQwkwMDAxMDAwCi0jZGVmaW5lIElYT04JMDAwMjAwMAotI2RlZmluZSBJWEFOWQkwMDA0MDAwCi0jZGVmaW5lIElYT0ZGCTAwMTAwMDAKLSNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCi0jZGVmaW5lIElVVEY4CTAwNDAwMDAKLQotLyogY19vZmxhZyBiaXRzICovCi0jZGVmaW5lIE9QT1NUCTAwMDAwMDEKLSNkZWZpbmUgT0xDVUMJMDAwMDAwMgotI2RlZmluZSBPTkxDUgkwMDAwMDA0Ci0jZGVmaW5lIE9DUk5MCTAwMDAwMTAKLSNkZWZpbmUgT05PQ1IJMDAwMDAyMAotI2RlZmluZSBPTkxSRVQJMDAwMDA0MAotI2RlZmluZSBPRklMTAkwMDAwMTAwCi0jZGVmaW5lIE9GREVMCTAwMDAyMDAKLSNkZWZpbmUgTkxETFkJMDAwMDQwMAotI2RlZmluZSAgIE5MMAkwMDAwMDAwCi0jZGVmaW5lICAgTkwxCTAwMDA0MDAKLSNkZWZpbmUgQ1JETFkJMDAwMzAwMAotI2RlZmluZSAgIENSMAkwMDAwMDAwCi0jZGVmaW5lICAgQ1IxCTAwMDEwMDAKLSNkZWZpbmUgICBDUjIJMDAwMjAwMAotI2RlZmluZSAgIENSMwkwMDAzMDAwCi0jZGVmaW5lIFRBQkRMWQkwMDE0MDAwCi0jZGVmaW5lICAgVEFCMAkwMDAwMDAwCi0jZGVmaW5lICAgVEFCMQkwMDA0MDAwCi0jZGVmaW5lICAgVEFCMgkwMDEwMDAwCi0jZGVmaW5lICAgVEFCMwkwMDE0MDAwCi0jZGVmaW5lICAgWFRBQlMJMDAxNDAwMAotI2RlZmluZSBCU0RMWQkwMDIwMDAwCi0jZGVmaW5lICAgQlMwCTAwMDAwMDAKLSNkZWZpbmUgICBCUzEJMDAyMDAwMAotI2RlZmluZSBWVERMWQkwMDQwMDAwCi0jZGVmaW5lICAgVlQwCTAwMDAwMDAKLSNkZWZpbmUgICBWVDEJMDA0MDAwMAotI2RlZmluZSBGRkRMWQkwMTAwMDAwCi0jZGVmaW5lICAgRkYwCTAwMDAwMDAKLSNkZWZpbmUgICBGRjEJMDEwMDAwMAotCi0vKiBjX2NmbGFnIGJpdCBtZWFuaW5nICovCi0jZGVmaW5lIENCQVVECTAwMTAwMTcKLSNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KLSNkZWZpbmUgIEI1MAkwMDAwMDAxCi0jZGVmaW5lICBCNzUJMDAwMDAwMgotI2RlZmluZSAgQjExMAkwMDAwMDAzCi0jZGVmaW5lICBCMTM0CTAwMDAwMDQKLSNkZWZpbmUgIEIxNTAJMDAwMDAwNQotI2RlZmluZSAgQjIwMAkwMDAwMDA2Ci0jZGVmaW5lICBCMzAwCTAwMDAwMDcKLSNkZWZpbmUgIEI2MDAJMDAwMDAxMAotI2RlZmluZSAgQjEyMDAJMDAwMDAxMQotI2RlZmluZSAgQjE4MDAJMDAwMDAxMgotI2RlZmluZSAgQjI0MDAJMDAwMDAxMwotI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAotI2RlZmluZSAgQjk2MDAJMDAwMDAxNQotI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKLSNkZWZpbmUgIEIzODQwMAkwMDAwMDE3Ci0jZGVmaW5lIEVYVEEgQjE5MjAwCi0jZGVmaW5lIEVYVEIgQjM4NDAwCi0jZGVmaW5lIENTSVpFCTAwMDAwNjAKLSNkZWZpbmUgICBDUzUJMDAwMDAwMAotI2RlZmluZSAgIENTNgkwMDAwMDIwCi0jZGVmaW5lICAgQ1M3CTAwMDAwNDAKLSNkZWZpbmUgICBDUzgJMDAwMDA2MAotI2RlZmluZSBDU1RPUEIJMDAwMDEwMAotI2RlZmluZSBDUkVBRAkwMDAwMjAwCi0jZGVmaW5lIFBBUkVOQgkwMDAwNDAwCi0jZGVmaW5lIFBBUk9ERAkwMDAxMDAwCi0jZGVmaW5lIEhVUENMCTAwMDIwMDAKLSNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKLSNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCi0jZGVmaW5lCSAgIEJPVEhFUiAwMDEwMDAwCQkvKiBub24gc3RhbmRhcmQgcmF0ZSAqLwotI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQotI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgotI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMwotI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAotI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQotI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgotI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNwotI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAotI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQotI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgotI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMwotI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAotI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQotI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgotI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNwotI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlICovCi0jZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCi0jZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJLyogZmxvdyBjb250cm9sICovCi0KLSNkZWZpbmUgSUJTSElGVAkgIDE2CQkvKiBTaGlmdCBmcm9tIENCQVVEIHRvIENJQkFVRCAqLwotCi0vKiBjX2xmbGFnIGJpdHMgKi8KLSNkZWZpbmUgSVNJRwkwMDAwMDAxCi0jZGVmaW5lIElDQU5PTgkwMDAwMDAyCi0jZGVmaW5lIFhDQVNFCTAwMDAwMDQKLSNkZWZpbmUgRUNITwkwMDAwMDEwCi0jZGVmaW5lIEVDSE9FCTAwMDAwMjAKLSNkZWZpbmUgRUNIT0sJMDAwMDA0MAotI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAotI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAotI2RlZmluZSBUT1NUT1AJMDAwMDQwMAotI2RlZmluZSBFQ0hPQ1RMCTAwMDEwMDAKLSNkZWZpbmUgRUNIT1BSVAkwMDAyMDAwCi0jZGVmaW5lIEVDSE9LRQkwMDA0MDAwCi0jZGVmaW5lIEZMVVNITwkwMDEwMDAwCi0jZGVmaW5lIFBFTkRJTgkwMDQwMDAwCi0jZGVmaW5lIElFWFRFTgkwMTAwMDAwCi0KLS8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCi0jZGVmaW5lCVRDT09GRgkJMAotI2RlZmluZQlUQ09PTgkJMQotI2RlZmluZQlUQ0lPRkYJCTIKLSNkZWZpbmUJVENJT04JCTMKLQotLyogdGNmbHVzaCgpIGFuZCBUQ0ZMU0ggdXNlIHRoZXNlICovCi0jZGVmaW5lCVRDSUZMVVNICTAKLSNkZWZpbmUJVENPRkxVU0gJMQotI2RlZmluZQlUQ0lPRkxVU0gJMgotCi0vKiB0Y3NldGF0dHIgdXNlcyB0aGVzZSAqLwotI2RlZmluZQlUQ1NBTk9XCQkwCi0jZGVmaW5lCVRDU0FEUkFJTgkxCi0jZGVmaW5lCVRDU0FGTFVTSAkyCi0KLSNlbmRpZiAvKiBBU01fWDg2X19URVJNQklUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20teDg2L3Rlcm1pb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIzNWRiMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdGVybWlvcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVEVSTUlPU19ICi0jZGVmaW5lIEFTTV9YODZfX1RFUk1JT1NfSAotCi0jaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotCi1zdHJ1Y3Qgd2luc2l6ZSB7Ci0JdW5zaWduZWQgc2hvcnQgd3Nfcm93OwotCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKLQl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7Ci0JdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOwotfTsKLQotI2RlZmluZSBOQ0MgOAotc3RydWN0IHRlcm1pbyB7Ci0JdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCi0JdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLwotCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KLX07Ci0KLS8qIG1vZGVtIGxpbmVzICovCi0jZGVmaW5lIFRJT0NNX0xFCTB4MDAxCi0jZGVmaW5lIFRJT0NNX0RUUgkweDAwMgotI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKLSNkZWZpbmUgVElPQ01fU1QJMHgwMDgKLSNkZWZpbmUgVElPQ01fU1IJMHgwMTAKLSNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCi0jZGVmaW5lIFRJT0NNX0NBUgkweDA0MAotI2RlZmluZSBUSU9DTV9STkcJMHgwODAKLSNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCi0jZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgotI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKLSNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKLSNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKLSNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKLQotLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0vKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQotCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAotCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAotCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKLQllb2wyPVwwCi0qLwotI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCi0KLS8qCi0gKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgotICovCi0jZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCi0JdW5zaWduZWQgc2hvcnQgX190bXA7IFwKLQlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCi0JKih1bnNpZ25lZCBzaG9ydCAqKSAmKHRlcm1pb3MpLT54ID0gX190bXA7IFwKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3Moc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAotCQkJCQkJc3RydWN0IHRlcm1pbyBfX3VzZXIgKnRlcm1pbykKLXsKLQlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOwotCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19vZmxhZyk7Ci0JU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2NmbGFnKTsKLQlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOwotCXJldHVybiBjb3B5X2Zyb21fdXNlcih0ZXJtaW9zLT5jX2NjLCB0ZXJtaW8tPmNfY2MsIE5DQyk7Ci19Ci0KLS8qCi0gKiBUcmFuc2xhdGUgYSAidGVybWlvcyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvIi4gVWdoLgotICovCi1zdGF0aWMgaW5saW5lIGludCBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyhzdHJ1Y3QgdGVybWlvIF9fdXNlciAqdGVybWlvLAotCQkJCQkgICAgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zKQotewotCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsKLQlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7Ci0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOwotCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsKLQlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsKLQlyZXR1cm4gY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhzdHJ1Y3Qga3Rlcm1pb3MgKmssCi0JCQkJCQkgc3RydWN0IHRlcm1pb3MyIF9fdXNlciAqdSkKLXsKLQlyZXR1cm4gY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3Moc3RydWN0IHRlcm1pb3MyIF9fdXNlciAqdSwKLQkJCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKmspCi17Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKHN0cnVjdCBrdGVybWlvcyAqaywKLQkJCQkJCSAgIHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqdSkKLXsKLQlyZXR1cm4gY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvc18xKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqdSwKLQkJCQkJCSAgIHN0cnVjdCBrdGVybWlvcyAqaykKLXsKLQlyZXR1cm4gY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOwotfQotCi0jZW5kaWYJLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGhlcm1fdGhyb3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni90aGVybV90aHJvdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzdmNTdiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90aGVybV90aHJvdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1RIRVJNX1RIUk9UX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVEhFUk1fVEhST1RfSAotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1leHRlcm4gYXRvbWljX3QgdGhlcm1fdGhyb3RfZW47Ci1pbnQgdGhlcm1fdGhyb3RfcHJvY2VzcyhpbnQgY3Vycik7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19USEVSTV9USFJPVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXg4Ni90aHJlYWRfaW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjRlNTJiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90aHJlYWRfaW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY0ICswLDAgQEAKLS8qIHRocmVhZF9pbmZvLmg6IGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKiAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1RIUkVBRF9JTkZPX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVEhSRUFEX0lORk9fSAotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0vKgotICogbG93IGxldmVsIHRhc2sgZGF0YSB0aGF0IGVudHJ5LlMgbmVlZHMgaW1tZWRpYXRlIGFjY2VzcyB0bwotICogLSB0aGlzIHN0cnVjdCBzaG91bGQgZml0IGVudGlyZWx5IGluc2lkZSBvZiBvbmUgY2FjaGUgbGluZQotICogLSB0aGlzIHN0cnVjdCBzaGFyZXMgdGhlIHN1cGVydmlzb3Igc3RhY2sgcGFnZXMKLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCB0YXNrX3N0cnVjdDsKLXN0cnVjdCBleGVjX2RvbWFpbjsKLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLXN0cnVjdCB0aHJlYWRfaW5mbyB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KLQl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLwotCV9fdTMyCQkJc3RhdHVzOwkJLyogdGhyZWFkIHN5bmNocm9ub3VzIGZsYWdzICovCi0JX191MzIJCQljcHU7CQkvKiBjdXJyZW50IENQVSAqLwotCWludAkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsCi0JCQkJCQkgICA8MCA9PiBCVUcgKi8KLQltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7Ci0Jc3RydWN0IHJlc3RhcnRfYmxvY2sgICAgcmVzdGFydF9ibG9jazsKLQl2b2lkIF9fdXNlcgkJKnN5c2VudGVyX3JldHVybjsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgcHJldmlvdXNfZXNwOyAgIC8qIEVTUCBvZiB0aGUgcHJldmlvdXMgc3RhY2sgaW4KLQkJCQkJCSAgIGNhc2Ugb2YgbmVzdGVkIChJUlEpIHN0YWNrcwotCQkJCQkJKi8KLQlfX3U4CQkJc3VwZXJ2aXNvcl9zdGFja1swXTsKLSNlbmRpZgotfTsKLQotI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCi17CQkJCQkJXAotCS50YXNrCQk9ICZ0c2ssCQkJXAotCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCi0JLmZsYWdzCQk9IDAsCQkJXAotCS5jcHUJCT0gMCwJCQlcCi0JLnByZWVtcHRfY291bnQJPSAxLAkJCVwKLQkuYWRkcl9saW1pdAk9IEtFUk5FTF9EUywJCVwKLQkucmVzdGFydF9ibG9jayA9IHsJCQlcCi0JCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAotCX0sCQkJCQlcCi19Ci0KLSNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCi0jZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKLQotI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0KLSNlbmRpZgotCi0vKgotICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCi0gKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcwotICogICBtYXkgbmVlZCB0byBhY2Nlc3MKLSAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVwotICogLSBvdGhlciBmbGFncyBpbiBNU1cKLSAqIFdhcm5pbmc6IGxheW91dCBvZiBMU1cgaXMgaGFyZGNvZGVkIGluIGVudHJ5LlMKLSAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCi0jZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCi0jZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCi0jZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCi0jZGVmaW5lIFRJRl9TSU5HTEVTVEVQCQk0CS8qIHJlZW5hYmxlIHNpbmdsZXN0ZXAgb24gdXNlciByZXR1cm4qLwotI2RlZmluZSBUSUZfSVJFVAkJNQkvKiBmb3JjZSBJUkVUICovCi0jZGVmaW5lIFRJRl9TWVNDQUxMX0VNVQkJNgkvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi8KLSNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJNwkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLwotI2RlZmluZSBUSUZfU0VDQ09NUAkJOAkvKiBzZWN1cmUgY29tcHV0aW5nICovCi0jZGVmaW5lIFRJRl9NQ0VfTk9USUZZCQkxMAkvKiBub3RpZnkgdXNlcnNwYWNlIG9mIGFuIE1DRSAqLwotI2RlZmluZSBUSUZfTk9UU0MJCTE2CS8qIFRTQyBpcyBub3QgYWNjZXNzaWJsZSBpbiB1c2VybGFuZCAqLwotI2RlZmluZSBUSUZfSUEzMgkJMTcJLyogMzJiaXQgcHJvY2VzcyAqLwotI2RlZmluZSBUSUZfRk9SSwkJMTgJLyogcmV0X2Zyb21fZm9yayAqLwotI2RlZmluZSBUSUZfQUJJX1BFTkRJTkcJCTE5Ci0jZGVmaW5lIFRJRl9NRU1ESUUJCTIwCi0jZGVmaW5lIFRJRl9ERUJVRwkJMjEJLyogdXNlcyBkZWJ1ZyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVElGX0lPX0JJVE1BUAkJMjIJLyogdXNlcyBJL08gYml0bWFwICovCi0jZGVmaW5lIFRJRl9GUkVFWkUJCTIzCS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCi0jZGVmaW5lIFRJRl9GT1JDRURfVEYJCTI0CS8qIHRydWUgaWYgVEYgaW4gZWZsYWdzIGFydGlmaWNpYWxseSAqLwotI2RlZmluZSBUSUZfREVCVUdDVExNU1IJCTI1CS8qIHVzZXMgdGhyZWFkX3N0cnVjdC5kZWJ1Z2N0bG1zciAqLwotI2RlZmluZSBUSUZfRFNfQVJFQV9NU1IJCTI2ICAgICAgLyogdXNlcyB0aHJlYWRfc3RydWN0LmRzX2FyZWFfbXNyICovCi0jZGVmaW5lIFRJRl9CVFNfVFJBQ0VfVFMJMjcgICAgICAvKiByZWNvcmQgc2NoZWR1bGluZyBldmVudCB0aW1lc3RhbXBzICovCi0KLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQotI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCi0jZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgPDwgVElGX1NJTkdMRVNURVApCi0jZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCi0jZGVmaW5lIF9USUZfSVJFVAkJKDEgPDwgVElGX0lSRVQpCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9FTVUJKDEgPDwgVElGX1NZU0NBTExfRU1VKQotI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDEgPDwgVElGX1NZU0NBTExfQVVESVQpCi0jZGVmaW5lIF9USUZfU0VDQ09NUAkJKDEgPDwgVElGX1NFQ0NPTVApCi0jZGVmaW5lIF9USUZfTUNFX05PVElGWQkJKDEgPDwgVElGX01DRV9OT1RJRlkpCi0jZGVmaW5lIF9USUZfTk9UU0MJCSgxIDw8IFRJRl9OT1RTQykKLSNkZWZpbmUgX1RJRl9JQTMyCQkoMSA8PCBUSUZfSUEzMikKLSNkZWZpbmUgX1RJRl9GT1JLCQkoMSA8PCBUSUZfRk9SSykKLSNkZWZpbmUgX1RJRl9BQklfUEVORElORwkoMSA8PCBUSUZfQUJJX1BFTkRJTkcpCi0jZGVmaW5lIF9USUZfREVCVUcJCSgxIDw8IFRJRl9ERUJVRykKLSNkZWZpbmUgX1RJRl9JT19CSVRNQVAJCSgxIDw8IFRJRl9JT19CSVRNQVApCi0jZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQotI2RlZmluZSBfVElGX0ZPUkNFRF9URgkJKDEgPDwgVElGX0ZPUkNFRF9URikKLSNkZWZpbmUgX1RJRl9ERUJVR0NUTE1TUgkoMSA8PCBUSUZfREVCVUdDVExNU1IpCi0jZGVmaW5lIF9USUZfRFNfQVJFQV9NU1IJKDEgPDwgVElGX0RTX0FSRUFfTVNSKQotI2RlZmluZSBfVElGX0JUU19UUkFDRV9UUwkoMSA8PCBUSUZfQlRTX1RSQUNFX1RTKQotCi0vKiB3b3JrIHRvIGRvIGluIHN5c2NhbGxfdHJhY2VfZW50ZXIoKSAqLwotI2RlZmluZSBfVElGX1dPUktfU1lTQ0FMTF9FTlRSWQlcCi0JKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9FTVUgfCBcCi0JIF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0VDQ09NUCB8IF9USUZfU0lOR0xFU1RFUCkKLQotLyogd29yayB0byBkbyBpbiBzeXNjYWxsX3RyYWNlX2xlYXZlKCkgKi8KLSNkZWZpbmUgX1RJRl9XT1JLX1NZU0NBTExfRVhJVAlcCi0JKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0lOR0xFU1RFUCkKLQotLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwotI2RlZmluZSBfVElGX1dPUktfTUFTSwkJCQkJCQlcCi0JKDB4MDAwMEZGRkYgJgkJCQkJCQlcCi0JIH4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHwJCQlcCi0JICAgX1RJRl9TSU5HTEVTVEVQfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfRU1VKSkKLQotLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHVzZXIgc3BhY2UgKi8KLSNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sgKDB4MDAwMEZGRkYgJiB+X1RJRl9TRUNDT01QKQotCi0vKiBPbmx5IHVzZWQgZm9yIDY0IGJpdCAqLwotI2RlZmluZSBfVElGX0RPX05PVElGWV9NQVNLCQkJCQkJXAotCShfVElGX1NJR1BFTkRJTkd8X1RJRl9NQ0VfTk9USUZZfF9USUZfTk9USUZZX1JFU1VNRSkKLQotLyogZmxhZ3MgdG8gY2hlY2sgaW4gX19zd2l0Y2hfdG8oKSAqLwotI2RlZmluZSBfVElGX1dPUktfQ1RYU1cJCQkJCQkJXAotCShfVElGX0lPX0JJVE1BUHxfVElGX0RFQlVHQ1RMTVNSfF9USUZfRFNfQVJFQV9NU1J8X1RJRl9CVFNfVFJBQ0VfVFN8IFwKLQkJCQkJCQkJX1RJRl9OT1RTQykKLQotI2RlZmluZSBfVElGX1dPUktfQ1RYU1dfUFJFViBfVElGX1dPUktfQ1RYU1cKLSNkZWZpbmUgX1RJRl9XT1JLX0NUWFNXX05FWFQgKF9USUZfV09SS19DVFhTV3xfVElGX0RFQlVHKQotCi0jZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDEwMDAwMDAwCi0KLS8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0jZGVmaW5lIFRIUkVBRF9GTEFHUyAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pCi0jZWxzZQotI2RlZmluZSBUSFJFQURfRkxBR1MgR0ZQX0tFUk5FTAotI2VuZGlmCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCi0KLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJCVwKLQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKV9fZ2V0X2ZyZWVfcGFnZXMoVEhSRUFEX0ZMQUdTLCBUSFJFQURfT1JERVIpKQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCi0jZGVmaW5lIFNUQUNLX1dBUk4JKFRIUkVBRF9TSVpFLzgpCi0vKgotICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBwcmVlbXB0X2NvdW50IG5lZWRzIHRvIGJlIDEgaW5pdGlhbGx5LCB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIGZ1bmN0aW9uYWwuCi0gKi8KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLQotLyogaG93IHRvIGdldCB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyIGZyb20gQyAqLwotcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBjdXJyZW50X3N0YWNrX3BvaW50ZXIgYXNtKCJlc3AiKSBfX3VzZWQ7Ci0KLS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQotewotCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopCi0JCShjdXJyZW50X3N0YWNrX3BvaW50ZXIgJiB+KFRIUkVBRF9TSVpFIC0gMSkpOwotfQotCi0jZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCi0KLS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KLSNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykJIFwKLQltb3ZsICQtVEhSRUFEX1NJWkUsIHJlZzsgXAotCWFuZGwgJWVzcCwgcmVnCi0KLS8qIHVzZSB0aGlzIG9uZSBpZiByZWcgYWxyZWFkeSBjb250YWlucyAlZXNwICovCi0jZGVmaW5lIEdFVF9USFJFQURfSU5GT19XSVRIX0VTUChyZWcpIFwKLQlhbmRsICQtVEhSRUFEX1NJWkUsIHJlZwotCi0jZW5kaWYKLQotI2Vsc2UgLyogWDg2XzMyICovCi0KLSNpbmNsdWRlIDxhc20vcGRhLmg+Ci0KLS8qCi0gKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQotICogcHJlZW1wdF9jb3VudCBuZWVkcyB0byBiZSAxIGluaXRpYWxseSwgdW50aWwgdGhlIHNjaGVkdWxlciBpcyBmdW5jdGlvbmFsLgotICovCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm8odm9pZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwotCXRpID0gKHZvaWQgKikocmVhZF9wZGEoa2VybmVsc3RhY2spICsgUERBX1NUQUNLT0ZGU0VUIC0gVEhSRUFEX1NJWkUpOwotCXJldHVybiB0aTsKLX0KLQotLyogZG8gbm90IHVzZSBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKnN0YWNrX3RocmVhZF9pbmZvKHZvaWQpCi17Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0aTsKLQlhc20oImFuZHEgJSVyc3AsJTA7ICIgOiAiPXIiICh0aSkgOiAiMCIgKH4oVEhSRUFEX1NJWkUgLSAxKSkpOwotCXJldHVybiB0aTsKLX0KLQotI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0vKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCi0jZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpIFwKLQltb3ZxICVnczpwZGFfa2VybmVsc3RhY2sscmVnIDsgXAotCXN1YnEgJChUSFJFQURfU0laRS1QREFfU1RBQ0tPRkZTRVQpLHJlZwotCi0jZW5kaWYKLQotI2VuZGlmIC8qICFYODZfMzIgKi8KLQotLyoKLSAqIFRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMuCi0gKgotICogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZmxhZ3MgaW4gdGhhdCBub2JvZHkgZWxzZQotICogZXZlciB0b3VjaGVzIG91ciB0aHJlYWQtc3luY2hyb25vdXMgc3RhdHVzLCBzbyB3ZSBkb24ndAotICogaGF2ZSB0byB3b3JyeSBhYm91dCBhdG9taWMgYWNjZXNzZXMuCi0gKi8KLSNkZWZpbmUgVFNfVVNFREZQVQkJMHgwMDAxCS8qIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sKLQkJCQkJICAgdGhpcyBxdWFudHVtIChTTVApICovCi0jZGVmaW5lIFRTX0NPTVBBVAkJMHgwMDAyCS8qIDMyYml0IHN5c2NhbGwgYWN0aXZlICg2NEJJVCkqLwotI2RlZmluZSBUU19QT0xMSU5HCQkweDAwMDQJLyogdHJ1ZSBpZiBpbiBpZGxlIGxvb3AKLQkJCQkJICAgYW5kIG5vdCBzbGVlcGluZyAqLwotI2RlZmluZSBUU19SRVNUT1JFX1NJR01BU0sJMHgwMDA4CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KLSNkZWZpbmUgVFNfWFNBVkUJCTB4MDAxMAkvKiBVc2UgeHNhdmUveHJzdG9yICovCi0KLSNkZWZpbmUgdHNrX2lzX3BvbGxpbmcodCkgKHRhc2tfdGhyZWFkX2luZm8odCktPnN0YXR1cyAmIFRTX1BPTExJTkcpCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIEhBVkVfU0VUX1JFU1RPUkVfU0lHTUFTSwkxCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Jlc3RvcmVfc2lnbWFzayh2b2lkKQotewotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0JdGktPnN0YXR1cyB8PSBUU19SRVNUT1JFX1NJR01BU0s7Ci0Jc2V0X2JpdChUSUZfU0lHUEVORElORywgKHVuc2lnbmVkIGxvbmcgKikmdGktPmZsYWdzKTsKLX0KLSNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdm9pZCBhcmNoX3Rhc2tfY2FjaGVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSk7Ci1leHRlcm4gaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7Ci0jZGVmaW5lIGFyY2hfdGFza19jYWNoZV9pbml0IGFyY2hfdGFza19jYWNoZV9pbml0Ci0jZW5kaWYKLSNlbmRpZiAvKiBBU01fWDg2X19USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGltZS5oIGIvaW5jbHVkZS9hc20teDg2L3RpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U3MjRlZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19USU1FX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVElNRV9ICi0KLWV4dGVybiB2b2lkIGhwZXRfdGltZV9pbml0KHZvaWQpOwotCi0jaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2dldF93YWxsY2xvY2sodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldHZhbDsKLQotCWlmIChlZmlfZW5hYmxlZCkKLQkJcmV0dmFsID0gZWZpX2dldF90aW1lKCk7Ci0JZWxzZQotCQlyZXR2YWwgPSBtYWNoX2dldF9jbW9zX3RpbWUoKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5hdGl2ZV9zZXRfd2FsbGNsb2NrKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKLXsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKGVmaV9lbmFibGVkKQotCQlyZXR2YWwgPSBlZmlfc2V0X3J0Y19tbXNzKG5vd3RpbWUpOwotCWVsc2UKLQkJcmV0dmFsID0gbWFjaF9zZXRfcnRjX21tc3Mobm93dGltZSk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0jZWxzZQotZXh0ZXJuIHZvaWQgbmF0aXZlX3RpbWVfaW5pdF9ob29rKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2dldF93YWxsY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gbWFjaF9nZXRfY21vc190aW1lKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5hdGl2ZV9zZXRfd2FsbGNsb2NrKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKLXsKLQlyZXR1cm4gbWFjaF9zZXRfcnRjX21tc3Mobm93dGltZSk7Ci19Ci0KLSNlbmRpZgotCi1leHRlcm4gdm9pZCB0aW1lX2luaXQodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KLQotI2RlZmluZSBnZXRfd2FsbGNsb2NrKCkgbmF0aXZlX2dldF93YWxsY2xvY2soKQotI2RlZmluZSBzZXRfd2FsbGNsb2NrKHgpIG5hdGl2ZV9zZXRfd2FsbGNsb2NrKHgpCi0jZGVmaW5lIGNob29zZV90aW1lX2luaXQoKSBocGV0X3RpbWVfaW5pdAotCi0jZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBjYWxpYnJhdGVfY3B1KHZvaWQpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGltZXIuaCBiL2luY2x1ZGUvYXNtLXg4Ni90aW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGJhYmNlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90aW1lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19USU1FUl9ICi0jZGVmaW5lIEFTTV9YODZfX1RJTUVSX0gKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLQotI2RlZmluZSBUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCi0KLXVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfc2NoZWRfY2xvY2sodm9pZCk7Ci11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIGludCB0aW1lcl9hY2s7Ci1leHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwotCi1leHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2RlZmluZSBjYWxpYnJhdGVfdHNjKCkgbmF0aXZlX2NhbGlicmF0ZV90c2MoKQotI2VuZGlmCi0KLS8qIEFjY2VsZXJhdG9ycyBmb3Igc2NoZWRfY2xvY2soKQotICogY29udmVydCBmcm9tIGN5Y2xlcyg2NGJpdHMpID0+IG5hbm9zZWNvbmRzICg2NGJpdHMpCi0gKiAgYmFzaWMgZXF1YXRpb246Ci0gKgkJbnMgPSBjeWNsZXMgLyAoZnJlcSAvIG5zX3Blcl9zZWMpCi0gKgkJbnMgPSBjeWNsZXMgKiAobnNfcGVyX3NlYyAvIGZyZXEpCi0gKgkJbnMgPSBjeWNsZXMgKiAoMTBeOSAvIChjcHVfa2h6ICogMTBeMykpCi0gKgkJbnMgPSBjeWNsZXMgKiAoMTBeNiAvIGNwdV9raHopCi0gKgotICoJVGhlbiB3ZSB1c2Ugc2NhbGluZyBtYXRoIChzdWdnZXN0ZWQgYnkgZ2VvcmdlQG12aXN0YS5jb20pIHRvIGdldDoKLSAqCQlucyA9IGN5Y2xlcyAqICgxMF42ICogU0MgLyBjcHVfa2h6KSAvIFNDCi0gKgkJbnMgPSBjeWNsZXMgKiBjeWMybnNfc2NhbGUgLyBTQwotICoKLSAqCUFuZCBzaW5jZSBTQyBpcyBhIGNvbnN0YW50IHBvd2VyIG9mIHR3bywgd2UgY2FuIGNvbnZlcnQgdGhlIGRpdgotICogIGludG8gYSBzaGlmdC4KLSAqCi0gKiAgV2UgY2FuIHVzZSBraHogZGl2aXNvciBpbnN0ZWFkIG9mIG1oeiB0byBrZWVwIGEgYmV0dGVyIHByZWNpc2lvbiwgc2luY2UKLSAqICBjeWMybnNfc2NhbGUgaXMgbGltaXRlZCB0byAxMF42ICogMl4xMCwgd2hpY2ggZml0cyBpbiAzMiBiaXRzLgotICogIChtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhKQotICoKLSAqCQkJLWpvaG5zdHVsQHVzLmlibS5jb20gIm1hdGggaXMgaGFyZCwgbGV0cyBnbyBzaG9wcGluZyEiCi0gKi8KLQotREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGN5YzJucyk7Ci0KLSNkZWZpbmUgQ1lDMk5TX1NDQUxFX0ZBQ1RPUiAxMCAvKiAyXjEwLCBjYXJlZnVsbHkgY2hvc2VuICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fY3ljbGVzXzJfbnModW5zaWduZWQgbG9uZyBsb25nIGN5YykKLXsKLQlyZXR1cm4gY3ljICogcGVyX2NwdShjeWMybnMsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPj4gQ1lDMk5TX1NDQUxFX0ZBQ1RPUjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzXzJfbnModW5zaWduZWQgbG9uZyBsb25nIGN5YykKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlucyA9IF9fY3ljbGVzXzJfbnMoY3ljKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gbnM7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19USU1FUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGltZXguaCBiL2luY2x1ZGUvYXNtLXg4Ni90aW1leC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWNlMjQxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90aW1leC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyogeDg2IGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucyAqLwotI2lmbmRlZiBBU01fWDg2X19USU1FWF9ICi0jZGVmaW5lIEFTTV9YODZfX1RJTUVYX0gKLQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vdHNjLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0VMQU4KLSMgIGRlZmluZSBQSVRfVElDS19SQVRFIDExODkyMDAgLyogQU1EIEVsYW4gaGFzIGRpZmZlcmVudCBmcmVxdWVuY3khICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19YODZfUkRDMzIxWCkKLSMgIGRlZmluZSBQSVRfVElDS19SQVRFIDEwNDE2NjcgLyogVW5kZXJseWluZyBIWiBmb3IgUjg2MTAgKi8KLSNlbHNlCi0jICBkZWZpbmUgUElUX1RJQ0tfUkFURSAxMTkzMTgyIC8qIFVuZGVybHlpbmcgSFogKi8KLSNlbmRpZgotI2RlZmluZSBDTE9DS19USUNLX1JBVEUJUElUX1RJQ0tfUkFURQotCi0jZGVmaW5lIEFSQ0hfSEFTX1JFQURfQ1VSUkVOVF9USU1FUgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3RsYi5oIGIvaW5jbHVkZS9hc20teDg2L3RsYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjM2ZTllLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90bGIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVExCX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVExCX0gKLQotI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHRsYl9mbHVzaCh0bGIpIGZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KLQotI2VuZGlmIC8qIEFTTV9YODZfX1RMQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXg4Ni90bGJmbHVzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2RkMDhiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90bGJmbHVzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVExCRkxVU0hfSAotI2RlZmluZSBBU01fWDg2X19UTEJGTFVTSF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZQotI2RlZmluZSBfX2ZsdXNoX3RsYigpIF9fbmF0aXZlX2ZsdXNoX3RsYigpCi0jZGVmaW5lIF9fZmx1c2hfdGxiX2dsb2JhbCgpIF9fbmF0aXZlX2ZsdXNoX3RsYl9nbG9iYWwoKQotI2RlZmluZSBfX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikgX19uYXRpdmVfZmx1c2hfdGxiX3NpbmdsZShhZGRyKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX25hdGl2ZV9mbHVzaF90bGIodm9pZCkKLXsKLQl3cml0ZV9jcjMocmVhZF9jcjMoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX25hdGl2ZV9mbHVzaF90bGJfZ2xvYmFsKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGNyNDsKLQotCS8qCi0JICogUmVhZC1tb2RpZnktd3JpdGUgdG8gQ1I0IC0gcHJvdGVjdCBpdCBmcm9tIHByZWVtcHRpb24gYW5kCi0JICogZnJvbSBpbnRlcnJ1cHRzLiAoVXNlIHRoZSByYXcgdmFyaWFudCBiZWNhdXNlIHRoaXMgY29kZSBjYW4KLQkgKiBiZSBjYWxsZWQgZnJvbSBkZWVwIGluc2lkZSBkZWJ1Z2dpbmcgY29kZS4pCi0JICovCi0JcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWNyNCA9IHJlYWRfY3I0KCk7Ci0JLyogY2xlYXIgUEdFICovCi0Jd3JpdGVfY3I0KGNyNCAmIH5YODZfQ1I0X1BHRSk7Ci0JLyogd3JpdGUgb2xkIFBHRSBhZ2FpbiBhbmQgZmx1c2ggVExCcyAqLwotCXdyaXRlX2NyNChjcjQpOwotCi0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fbmF0aXZlX2ZsdXNoX3RsYl9zaW5nbGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCWFzbSB2b2xhdGlsZSgiaW52bHBnICglMCkiIDo6InIiIChhZGRyKSA6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCWlmIChjcHVfaGFzX3BnZSkKLQkJX19mbHVzaF90bGJfZ2xvYmFsKCk7Ci0JZWxzZQotCQlfX2ZsdXNoX3RsYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpZiAoY3B1X2hhc19pbnZscGcpCi0JCV9fZmx1c2hfdGxiX3NpbmdsZShhZGRyKTsKLQllbHNlCi0JCV9fZmx1c2hfdGxiKCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBUTEJfRkxVU0hfQUxMCTB4ZmZmZmZmZmYKLSNlbHNlCi0jIGRlZmluZSBUTEJfRkxVU0hfQUxMCS0xVUxMCi0jZW5kaWYKLQotLyoKLSAqIFRMQiBmbHVzaGluZzoKLSAqCi0gKiAgLSBmbHVzaF90bGIoKSBmbHVzaGVzIHRoZSBjdXJyZW50IG1tIHN0cnVjdCBUTEJzCi0gKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQnMKLSAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MKLSAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCi0gKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKLSAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcwotICogIC0gZmx1c2hfdGxiX290aGVycyhjcHVtYXNrLCBtbSwgdmEpIGZsdXNoZXMgVExCcyBvbiBvdGhlciBjcHVzCi0gKgotICogLi5idXQgdGhlIGkzODYgaGFzIHNvbWV3aGF0IGxpbWl0ZWQgdGxiIGZsdXNoaW5nIGNhcGFiaWxpdGllcywKLSAqIGFuZCBwYWdlLWdyYW51bGFyIGZsdXNoZXMgYXJlIGF2YWlsYWJsZSBvbmx5IG9uIGk0ODYgYW5kIHVwLgotICoKLSAqIHg4Ni02NCBjYW4gb25seSBmbHVzaCBpbmRpdmlkdWFsIHBhZ2VzIG9yIGZ1bGwgVk1zLiBGb3IgYSByYW5nZSBmbHVzaAotICogd2UgYWx3YXlzIGRvIHRoZSBmdWxsIFZNLiBNaWdodCBiZSB3b3J0aCB0cnlpbmcgaWYgZm9yIGEgc21hbGwKLSAqIHJhbmdlIGEgZmV3IElOVkxQR3MgaW4gYSByb3cgYXJlIGEgd2luLgotICovCi0KLSNpZm5kZWYgQ09ORklHX1NNUAotCi0jZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKLSNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpIF9fZmx1c2hfdGxiX2FsbCgpCi0jZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQotCQlfX2ZsdXNoX3RsYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQotCQlfX2ZsdXNoX3RsYl9vbmUoYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQotCQlfX2ZsdXNoX3RsYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrLAotCQkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyB2YSkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCkKLXsKLX0KLQotI2Vsc2UgIC8qIFNNUCAqLwotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0jZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKLQotZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKLWV4dGVybiB2b2lkIGZsdXNoX3RsYl9jdXJyZW50X3Rhc2sodm9pZCk7Ci1leHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKLQotI2RlZmluZSBmbHVzaF90bGIoKQlmbHVzaF90bGJfY3VycmVudF90YXNrKCkKLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlmbHVzaF90bGJfbW0odm1hLT52bV9tbSk7Ci19Ci0KLXZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSk7Ci0KLSNkZWZpbmUgVExCU1RBVEVfT0sJMQotI2RlZmluZSBUTEJTVEFURV9MQVpZCTIKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLXN0cnVjdCB0bGJfc3RhdGUgewotCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbTsKLQlpbnQgc3RhdGU7Ci0JY2hhciBfX2NhY2hlbGluZV9wYWRkaW5nW0wxX0NBQ0hFX0JZVEVTLThdOwotfTsKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpOwotCi12b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jZW5kaWYJLyogU01QICovCi0KLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jZGVmaW5lIGZsdXNoX3RsYl9vdGhlcnMobWFzaywgbW0sIHZhKQluYXRpdmVfZmx1c2hfdGxiX290aGVycygmbWFzaywgbW0sIHZhKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZmx1c2hfdGxiX2FsbCgpOwotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS14ODYvdG9wb2xvZ3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjYTliYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdG9wb2xvZ3kuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogV3JpdHRlbiBieTogTWF0dGhldyBEb2Jzb24sIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxjb2xwYXRjaEB1cy5pYm0uY29tPgotICovCi0jaWZuZGVmIEFTTV9YODZfX1RPUE9MT0dZX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVE9QT0xPR1lfSAotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpZmRlZiBDT05GSUdfWDg2X0hUCi0jICBkZWZpbmUgRU5BQkxFX1RPUE9fREVGSU5FUwotIyBlbmRpZgotI2Vsc2UKLSMgaWZkZWYgQ09ORklHX1NNUAotIyAgZGVmaW5lIEVOQUJMRV9UT1BPX0RFRklORVMKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBOb2RlIG5vdCBwcmVzZW50ICovCi0jZGVmaW5lIE5VTUFfTk9fTk9ERQkoLTEpCi0KLSNpZmRlZiBDT05GSUdfTlVNQQotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0KLS8qIE1hcHBpbmdzIGJldHdlZW4gbm9kZSBudW1iZXIgYW5kIGNwdXMgb24gdGhhdCBub2RlLiAqLwotZXh0ZXJuIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2tfbWFwW107Ci0KLS8qIE1hcHBpbmdzIGJldHdlZW4gbG9naWNhbCBjcHUgbnVtYmVyIGFuZCBub2RlIG51bWJlciAqLwotZXh0ZXJuIGludCBjcHVfdG9fbm9kZV9tYXBbXTsKLQotLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgQ1BVICdjcHUnICovCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQotewotCXJldHVybiBjcHVfdG9fbm9kZV9tYXBbY3B1XTsKLX0KLSNkZWZpbmUgZWFybHlfY3B1X3RvX25vZGUoY3B1KQljcHVfdG9fbm9kZShjcHUpCi0KLS8qIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCi0gKgotICogU2lkZSBub3RlOiB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIHJldHVybmVkIGNwdW1hc2sgb24gdGhlIHN0YWNrCi0gKiBzbyB3aXRoIGEgaGlnaCBOUl9DUFVTIGNvdW50LCBleGNlc3NpdmUgc3RhY2sgc3BhY2UgaXMgdXNlZC4gIFRoZQotICogbm9kZV90b19jcHVtYXNrX3B0ciBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZS4KLSAqLwotc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQotewotCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotCi0jZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCi0KLS8qIE1hcHBpbmdzIGJldHdlZW4gbm9kZSBudW1iZXIgYW5kIGNwdXMgb24gdGhhdCBub2RlLiAqLwotZXh0ZXJuIGNwdW1hc2tfdCAqbm9kZV90b19jcHVtYXNrX21hcDsKLQotLyogTWFwcGluZ3MgYmV0d2VlbiBsb2dpY2FsIGNwdSBudW1iZXIgYW5kIG5vZGUgbnVtYmVyICovCi1ERUNMQVJFX0VBUkxZX1BFUl9DUFUoaW50LCB4ODZfY3B1X3RvX25vZGVfbWFwKTsKLQotLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IE5vZGUuICovCi0jZGVmaW5lIG51bWFfbm9kZV9pZCgpCQlyZWFkX3BkYShub2RlbnVtYmVyKQotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwotZXh0ZXJuIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KTsKLWV4dGVybiBpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSk7Ci1leHRlcm4gY29uc3QgY3B1bWFza190ICpfbm9kZV90b19jcHVtYXNrX3B0cihpbnQgbm9kZSk7Ci1leHRlcm4gY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSk7Ci0KLSNlbHNlCS8qICFDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCi0KLS8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIENQVSAnY3B1JyAqLwotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKLXsKLQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpOwotfQotCi0vKiBTYW1lIGZ1bmN0aW9uIGJ1dCB1c2VkIGlmIGNhbGxlZCBiZWZvcmUgcGVyX2NwdSBhcmVhcyBhcmUgc2V0dXAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpCi17Ci0JaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApKQotCQlyZXR1cm4gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcClbY3B1XTsKLQotCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Ci19Ci0KLS8qIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjcHVtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuICovCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqX25vZGVfdG9fY3B1bWFza19wdHIoaW50IG5vZGUpCi17Ci0JcmV0dXJuICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotCi0vKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLwotc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQotewotCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotCi0jZW5kaWYgLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KLQotLyogUmVwbGFjZSBkZWZhdWx0IG5vZGVfdG9fY3B1bWFza19wdHIgd2l0aCBvcHRpbWl6ZWQgdmVyc2lvbiAqLwotI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyKHYsIG5vZGUpCQlcCi0JCWNvbnN0IGNwdW1hc2tfdCAqdiA9IF9ub2RlX3RvX2NwdW1hc2tfcHRyKG5vZGUpCi0KLSNkZWZpbmUgbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHYsIG5vZGUpCVwKLQkJCSAgIHYgPSBfbm9kZV90b19jcHVtYXNrX3B0cihub2RlKQotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwotCi0vKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgTm9kZSAnbm9kZScuIFRoaXMKLSAqIGFyY2hpdGVjdHVyZSBpcyBmbGF0LCBzbyBpdCBpcyBhIHByZXR0eSBzaW1wbGUgZnVuY3Rpb24hCi0gKi8KLSNkZWZpbmUgcGFyZW50X25vZGUobm9kZSkgKG5vZGUpCi0KLSNkZWZpbmUgcGNpYnVzX3RvX25vZGUoYnVzKSBfX3BjaWJ1c190b19ub2RlKGJ1cykKLSNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKSBfX3BjaWJ1c190b19jcHVtYXNrKGJ1cykKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuW107Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX2VuZF9wZm5bXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVtYXBfc2l6ZVtdOwotI2RlZmluZSBub2RlX2hhc19vbmxpbmVfbWVtKG5pZCkgKG5vZGVfc3RhcnRfcGZuW25pZF0gIT0gbm9kZV9lbmRfcGZuW25pZF0pCi0KLSMgZGVmaW5lIFNEX0NBQ0hFX05JQ0VfVFJJRVMJMQotIyBkZWZpbmUgU0RfSURMRV9JRFgJCTEKLSMgZGVmaW5lIFNEX05FV0lETEVfSURYCQkyCi0jIGRlZmluZSBTRF9GT1JLRVhFQ19JRFgJMAotCi0jZWxzZQotCi0jIGRlZmluZSBTRF9DQUNIRV9OSUNFX1RSSUVTCTIKLSMgZGVmaW5lIFNEX0lETEVfSURYCQkyCi0jIGRlZmluZSBTRF9ORVdJRExFX0lEWAkJMgotIyBkZWZpbmUgU0RfRk9SS0VYRUNfSURYCTEKLQotI2VuZGlmCi0KLS8qIHNjaGVkX2RvbWFpbnMgU0RfTk9ERV9JTklUIGZvciBOVU1BUSBtYWNoaW5lcyAqLwotI2RlZmluZSBTRF9OT0RFX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKLQkubWluX2ludGVydmFsCQk9IDgsCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gMzIsCQkJXAotCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCi0JLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKLQkuY2FjaGVfbmljZV90cmllcwk9IFNEX0NBQ0hFX05JQ0VfVFJJRVMsCVwKLQkuYnVzeV9pZHgJCT0gMywJCQlcCi0JLmlkbGVfaWR4CQk9IFNEX0lETEVfSURYLAkJXAotCS5uZXdpZGxlX2lkeAkJPSBTRF9ORVdJRExFX0lEWCwJXAotCS53YWtlX2lkeAkJPSAxLAkJCVwKLQkuZm9ya2V4ZWNfaWR4CQk9IFNEX0ZPUktFWEVDX0lEWCwJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCi0JCQkJfCBTRF9CQUxBTkNFX0ZPUksJXAotCQkJCXwgU0RfU0VSSUFMSVpFCQlcCi0JCQkJfCBTRF9XQUtFX0JBTEFOQ0UsCVwKLQkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCi0JLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKLX0KLQotI2lmZGVmIENPTkZJR19YODZfNjRfQUNQSV9OVU1BCi1leHRlcm4gaW50IF9fbm9kZV9kaXN0YW5jZShpbnQsIGludCk7Ci0jZGVmaW5lIG5vZGVfZGlzdGFuY2UoYSwgYikgX19ub2RlX2Rpc3RhbmNlKGEsIGIpCi0jZW5kaWYKLQotI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCi0KLSNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCTAKLSNkZWZpbmUJY3B1X3RvX25vZGUoY3B1KQkwCi0jZGVmaW5lCWVhcmx5X2NwdV90b19ub2RlKGNwdSkJMAotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqX25vZGVfdG9fY3B1bWFza19wdHIoaW50IG5vZGUpCi17Ci0JcmV0dXJuICZjcHVfb25saW5lX21hcDsKLX0KLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKLXsKLQlyZXR1cm4gY3B1X29ubGluZV9tYXA7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBub2RlX3RvX2ZpcnN0X2NwdShpbnQgbm9kZSkKLXsKLQlyZXR1cm4gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLX0KLQotLyogUmVwbGFjZSBkZWZhdWx0IG5vZGVfdG9fY3B1bWFza19wdHIgd2l0aCBvcHRpbWl6ZWQgdmVyc2lvbiAqLwotI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyKHYsIG5vZGUpCQlcCi0JCWNvbnN0IGNwdW1hc2tfdCAqdiA9IF9ub2RlX3RvX2NwdW1hc2tfcHRyKG5vZGUpCi0KLSNkZWZpbmUgbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHYsIG5vZGUpCVwKLQkJCSAgIHYgPSBfbm9kZV90b19jcHVtYXNrX3B0cihub2RlKQotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgotCi0jaWZkZWYgQ09ORklHX05VTUEKLS8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgQ1BVIG9uIE5vZGUgJ25vZGUnLiAqLwotc3RhdGljIGlubGluZSBpbnQgbm9kZV90b19maXJzdF9jcHUoaW50IG5vZGUpCi17Ci0Jbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBub2RlKTsKLQlyZXR1cm4gZmlyc3RfY3B1KCptYXNrKTsKLX0KLSNlbmRpZgotCi1leHRlcm4gY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKGludCBjcHUpOwotCi0jaWZkZWYgRU5BQkxFX1RPUE9fREVGSU5FUwotI2RlZmluZSB0b3BvbG9neV9waHlzaWNhbF9wYWNrYWdlX2lkKGNwdSkJKGNwdV9kYXRhKGNwdSkucGh5c19wcm9jX2lkKQotI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkJCQkoY3B1X2RhdGEoY3B1KS5jcHVfY29yZV9pZCkKLSNkZWZpbmUgdG9wb2xvZ3lfY29yZV9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpCi0jZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCi0KLS8qIGluZGljYXRlcyB0aGF0IHBvaW50ZXJzIHRvIHRoZSB0b3BvbG9neSBjcHVtYXNrX3QgbWFwcyBhcmUgdmFsaWQgKi8KLSNkZWZpbmUgYXJjaF9wcm92aWRlc190b3BvbG9neV9wb2ludGVycwkJeWVzCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZml4X3BoeXNfcGFja2FnZV9pZChpbnQgbnVtLCB1MzIgc2xvdCkKLXsKLX0KLQotc3RydWN0IHBjaV9idXM7Ci12b2lkIHNldF9wY2lfYnVzX3Jlc291cmNlc19hcmNoX2RlZmF1bHQoc3RydWN0IHBjaV9idXMgKmIpOwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBtY19jYXBhYmxlKCkJCQkoYm9vdF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzID4gMSkKLSNkZWZpbmUgc210X2NhcGFibGUoKQkJCShzbXBfbnVtX3NpYmxpbmdzID4gMSkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX05VTUEKLWV4dGVybiBpbnQgZ2V0X21wX2J1c190b19ub2RlKGludCBidXNudW0pOwotZXh0ZXJuIHZvaWQgc2V0X21wX2J1c190b19ub2RlKGludCBidXNudW0sIGludCBub2RlKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBnZXRfbXBfYnVzX3RvX25vZGUoaW50IGJ1c251bSkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbXBfYnVzX3RvX25vZGUoaW50IGJ1c251bSwgaW50IG5vZGUpCi17Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFTTV9YODZfX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90cmFtcG9saW5lLmggYi9pbmNsdWRlL2FzbS14ODYvdHJhbXBvbGluZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDA2YmJkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90cmFtcG9saW5lLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1RSQU1QT0xJTkVfSAotI2RlZmluZSBBU01fWDg2X19UUkFNUE9MSU5FX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyoKLSAqIFRyYW1wb2xpbmUgODB4ODYgcHJvZ3JhbSBhcyBhbiBhcnJheS4KLSAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgdHJhbXBvbGluZV9kYXRhIFtdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgdHJhbXBvbGluZV9lbmQgIFtdOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKnRyYW1wb2xpbmVfYmFzZTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9yc3A7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpbml0aWFsX2NvZGU7Ci0KLSNkZWZpbmUgVFJBTVBPTElORV9CQVNFIDB4NjAwMAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2V0dXBfdHJhbXBvbGluZSh2b2lkKTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVFJBTVBPTElORV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdHJhcHMuaCBiL2luY2x1ZGUvYXNtLXg4Ni90cmFwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzNkYzJjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90cmFwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19UUkFQU19ICi0jZGVmaW5lIEFTTV9YODZfX1RSQVBTX0gKLQotI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBkb3RyYXBsaW5rYWdlCi0jZWxzZQotI2RlZmluZSBkb3RyYXBsaW5rYWdlIGFzbWxpbmthZ2UKLSNlbmRpZgotCi1hc21saW5rYWdlIHZvaWQgZGl2aWRlX2Vycm9yKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGRlYnVnKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIG5taSh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBpbnQzKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIG92ZXJmbG93KHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGJvdW5kcyh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBpbnZhbGlkX29wKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGRldmljZV9ub3RfYXZhaWxhYmxlKHZvaWQpOwotI2lmZGVmIENPTkZJR19YODZfNjQKLWFzbWxpbmthZ2Ugdm9pZCBkb3VibGVfZmF1bHQodm9pZCk7Ci0jZW5kaWYKLWFzbWxpbmthZ2Ugdm9pZCBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4odm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgaW52YWxpZF9UU1Modm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgc2VnbWVudF9ub3RfcHJlc2VudCh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBzdGFja19zZWdtZW50KHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGdlbmVyYWxfcHJvdGVjdGlvbih2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBwYWdlX2ZhdWx0KHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIHNwdXJpb3VzX2ludGVycnVwdF9idWcodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgY29wcm9jZXNzb3JfZXJyb3Iodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgYWxpZ25tZW50X2NoZWNrKHZvaWQpOwotI2lmZGVmIENPTkZJR19YODZfTUNFCi1hc21saW5rYWdlIHZvaWQgbWFjaGluZV9jaGVjayh2b2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2X01DRSAqLwotYXNtbGlua2FnZSB2b2lkIHNpbWRfY29wcm9jZXNzb3JfZXJyb3Iodm9pZCk7Ci0KLWRvdHJhcGxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGVidWcoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fbm1pKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludDMoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fYm91bmRzKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfb3Aoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfVFNTKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotZG90cmFwbGlua2FnZSB2b2lkIGRvX3NlZ21lbnRfbm90X3ByZXNlbnQoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fc3RhY2tfc2VnbWVudChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLWRvdHJhcGxpbmthZ2Ugdm9pZCBkb19nZW5lcmFsX3Byb3RlY3Rpb24oc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nKTsKLWRvdHJhcGxpbmthZ2Ugdm9pZCBkb19zcHVyaW91c19pbnRlcnJ1cHRfYnVnKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotZG90cmFwbGlua2FnZSB2b2lkIGRvX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotZG90cmFwbGlua2FnZSB2b2lkIGRvX2FsaWdubWVudF9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotZG90cmFwbGlua2FnZSB2b2lkIGRvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci0jZW5kaWYKLWRvdHJhcGxpbmthZ2Ugdm9pZCBkb19zaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotI2lmZGVmIENPTkZJR19YODZfMzIKLWRvdHJhcGxpbmthZ2Ugdm9pZCBkb19pcmV0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9zaV9jb2RlKHVuc2lnbmVkIGxvbmcgY29uZGl0aW9uKQotewotCWlmIChjb25kaXRpb24gJiBEUl9TVEVQKQotCQlyZXR1cm4gVFJBUF9UUkFDRTsKLQllbHNlIGlmIChjb25kaXRpb24gJiAoRFJfVFJBUDB8RFJfVFJBUDF8RFJfVFJBUDJ8RFJfVFJBUDMpKQotCQlyZXR1cm4gVFJBUF9IV0JLUFQ7Ci0JZWxzZQotCQlyZXR1cm4gVFJBUF9CUktQVDsKLX0KLQotZXh0ZXJuIGludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7Ci1leHRlcm4gaW50IGtzdGFja19kZXB0aF90b19wcmludDsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLXZvaWQgbWF0aF9lcnJvcih2b2lkIF9fdXNlciAqKTsKLXVuc2lnbmVkIGxvbmcgcGF0Y2hfZXNwZml4X2Rlc2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1hc21saW5rYWdlIHZvaWQgbWF0aF9lbXVsYXRlKGxvbmcpOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBBU01fWDg2X19UUkFQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdHNjLmggYi9pbmNsdWRlL2FzbS14ODYvdHNjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGY1YzQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RzYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIHg4NiBUU0MgcmVsYXRlZCBmdW5jdGlvbnMKLSAqLwotI2lmbmRlZiBBU01fWDg2X19UU0NfSAotI2RlZmluZSBBU01fWDg2X19UU0NfSAotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotCi0jZGVmaW5lIE5TX1NDQUxFCTEwIC8qIDJeMTAsIGNhcmVmdWxseSBjaG9zZW4gKi8KLSNkZWZpbmUgVVNfU0NBTEUJMzIgLyogMl4zMiwgYXJiaXRyYWxyaWx5IGNob3NlbiAqLwotCi0vKgotICogU3RhbmRhcmQgd2F5IHRvIGFjY2VzcyB0aGUgY3ljbGUgY291bnRlci4KLSAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgY3B1X2toejsKLWV4dGVybiB1bnNpZ25lZCBpbnQgdHNjX2toejsKLQotZXh0ZXJuIHZvaWQgZGlzYWJsZV9UU0Modm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQgPSAwOwotCi0jaWZuZGVmIENPTkZJR19YODZfVFNDCi0JaWYgKCFjcHVfaGFzX3RzYykKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQlyZHRzY2xsKHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGN5Y2xlc190IHZnZXRfY3ljbGVzKHZvaWQpCi17Ci0JLyoKLQkgKiBXZSBvbmx5IGRvIFZEU09zIG9uIFRTQyBjYXBhYmxlIENQVXMsIHNvIHRoaXMgc2hvdWxkbnQKLQkgKiBhY2Nlc3MgYm9vdF9jcHVfZGF0YSAod2hpY2ggaXMgbm90IFZEU08tc2FmZSk6Ci0JICovCi0jaWZuZGVmIENPTkZJR19YODZfVFNDCi0JaWYgKCFjcHVfaGFzX3RzYykKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQlyZXR1cm4gKGN5Y2xlc190KV9fbmF0aXZlX3JlYWRfdHNjKCk7Ci19Ci0KLWV4dGVybiB2b2lkIHRzY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbWFya190c2NfdW5zdGFibGUoY2hhciAqcmVhc29uKTsKLWV4dGVybiBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpOwotaW50IGNoZWNrX3RzY191bnN0YWJsZSh2b2lkKTsKLQotLyoKLSAqIEJvb3QtdGltZSBjaGVjayB3aGV0aGVyIHRoZSBUU0NzIGFyZSBzeW5jaHJvbml6ZWQgYWNyb3NzCi0gKiBhbGwgQ1BVcy9jb3JlczoKLSAqLwotZXh0ZXJuIHZvaWQgY2hlY2tfdHNjX3N5bmNfc291cmNlKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgY2hlY2tfdHNjX3N5bmNfdGFyZ2V0KHZvaWQpOwotCi1leHRlcm4gaW50IG5vdHNjX3NldHVwKGNoYXIgKik7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19UU0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3R5cGVzLmggYi9pbmNsdWRlL2FzbS14ODYvdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc4YjUyZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVFlQRVNfSAotI2RlZmluZSBBU01fWDg2X19UWVBFU19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotLyoKLSAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvdXRzaWRlIHRoZSBrZXJuZWwgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzCi0gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBCSVRTX1BFUl9MT05HIDMyCi0jZWxzZQotIyBkZWZpbmUgQklUU19QRVJfTE9ORyA2NAotI2VuZGlmCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX0hJR0hNRU02NEcpCi0vKiBETUEgYWRkcmVzc2VzIGNvbWUgaW4gMzItYml0IGFuZCA2NC1iaXQgZmxhdm91cnMuICovCi10eXBlZGVmIHU2NCBkbWFfYWRkcl90OwotI2Vsc2UKLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGViYzBhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19VQUNDRVNTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVUFDQ0VTU19ICi0vKgotICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucwotICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2RlZmluZSBWRVJJRllfUkVBRCAwCi0jZGVmaW5lIFZFUklGWV9XUklURSAxCi0KLS8qCi0gKiBUaGUgZnMgdmFsdWUgZGV0ZXJtaW5lcyB3aGV0aGVyIGFyZ3VtZW50IHZhbGlkaXR5IGNoZWNraW5nIHNob3VsZCBiZQotICogcGVyZm9ybWVkIG9yIG5vdC4gIElmIGdldF9mcygpID09IFVTRVJfRFMsIGNoZWNraW5nIGlzIHBlcmZvcm1lZCwgd2l0aAotICogZ2V0X2ZzKCkgPT0gS0VSTkVMX0RTLCBjaGVja2luZyBpcyBieXBhc3NlZC4KLSAqCi0gKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVzZSBtYWNyb3MgYXJlIGdyb3NzbHkgbWlzbmFtZWQuCi0gKi8KLQotI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKLQotI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoLTFVTCkKLSNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoUEFHRV9PRkZTRVQpCi0KLSNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKLSNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKLSNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCi0KLSNkZWZpbmUgc2VnbWVudF9lcShhLCBiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQotCi0jZGVmaW5lIF9fYWRkcl9vayhhZGRyKQkJCQkJXAotCSgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKShhZGRyKSA8CQlcCi0JIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSkKLQotLyoKLSAqIFRlc3Qgd2hldGhlciBhIGJsb2NrIG9mIG1lbW9yeSBpcyBhIHZhbGlkIHVzZXIgc3BhY2UgYWRkcmVzcy4KLSAqIFJldHVybnMgMCBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQsIG5vbnplcm8gb3RoZXJ3aXNlLgotICoKLSAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHRlc3Q6Ci0gKiAodTMzKWFkZHIgKyAodTMzKXNpemUgPj0gKHUzMyljdXJyZW50LT5hZGRyX2xpbWl0LnNlZyAodTY1IGZvciB4ODZfNjQpCi0gKgotICogVGhpcyBuZWVkcyAzMy1iaXQgKDY1LWJpdCBmb3IgeDg2XzY0KSBhcml0aG1ldGljLiBXZSBoYXZlIGEgY2FycnkuLi4KLSAqLwotCi0jZGVmaW5lIF9fcmFuZ2Vfbm90X29rKGFkZHIsIHNpemUpCQkJCQlcCi0oewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWcsIHJva3N1bTsJCQkJCVwKLQlfX2Noa191c2VyX3B0cihhZGRyKTsJCQkJCQlcCi0JYXNtKCJhZGQgJTMsJTEgOyBzYmIgJTAsJTAgOyBjbXAgJTEsJTQgOyBzYmIgJDAsJTAiCQlcCi0JICAgIDogIj0mciIgKGZsYWcpLCAiPXIiIChyb2tzdW0pCQkJCVwKLQkgICAgOiAiMSIgKGFkZHIpLCAiZyIgKChsb25nKShzaXplKSksCQkJCVwKLQkgICAgICAicm0iIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSk7CQlcCi0JZmxhZzsJCQkJCQkJCVwKLX0pCi0KLS8qKgotICogYWNjZXNzX29rOiAtIENoZWNrcyBpZiBhIHVzZXIgc3BhY2UgcG9pbnRlciBpcyB2YWxpZAotICogQHR5cGU6IFR5cGUgb2YgYWNjZXNzOiAlVkVSSUZZX1JFQUQgb3IgJVZFUklGWV9XUklURS4gIE5vdGUgdGhhdAotICogICAgICAgICVWRVJJRllfV1JJVEUgaXMgYSBzdXBlcnNldCBvZiAlVkVSSUZZX1JFQUQgLSBpZiBpdCBpcyBzYWZlCi0gKiAgICAgICAgdG8gd3JpdGUgdG8gYSBibG9jaywgaXQgaXMgYWx3YXlzIHNhZmUgdG8gcmVhZCBmcm9tIGl0LgotICogQGFkZHI6IFVzZXIgc3BhY2UgcG9pbnRlciB0byBzdGFydCBvZiBibG9jayB0byBjaGVjawotICogQHNpemU6IFNpemUgb2YgYmxvY2sgdG8gY2hlY2sKLSAqCi0gKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgotICoKLSAqIENoZWNrcyBpZiBhIHBvaW50ZXIgdG8gYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZSBpcyB2YWxpZC4KLSAqCi0gKiBSZXR1cm5zIHRydWUgKG5vbnplcm8pIGlmIHRoZSBtZW1vcnkgYmxvY2sgbWF5IGJlIHZhbGlkLCBmYWxzZSAoemVybykKLSAqIGlmIGl0IGlzIGRlZmluaXRlbHkgaW52YWxpZC4KLSAqCi0gKiBOb3RlIHRoYXQsIGRlcGVuZGluZyBvbiBhcmNoaXRlY3R1cmUsIHRoaXMgZnVuY3Rpb24gcHJvYmFibHkganVzdAotICogY2hlY2tzIHRoYXQgdGhlIHBvaW50ZXIgaXMgaW4gdGhlIHVzZXIgc3BhY2UgcmFuZ2UgLSBhZnRlciBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uLCBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucyBtYXkgc3RpbGwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLSNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpIChsaWtlbHkoX19yYW5nZV9ub3Rfb2soYWRkciwgc2l6ZSkgPT0gMCkpCi0KLS8qCi0gKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQotICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCi0gKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCi0gKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKLSAqIHdoYXQgdG8gZG8uCi0gKgotICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCi0gKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAotICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQotICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgotICovCi0KLXN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgewotCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Ci19OwotCi1leHRlcm4gaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5Ci0gKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCi0gKgotICogVGhpcyBnZXRzIGtpbmQgb2YgdWdseS4gV2Ugd2FudCB0byByZXR1cm4gX3R3b18gdmFsdWVzIGluICJnZXRfdXNlcigpIgotICogYW5kIHlldCB3ZSBkb24ndCB3YW50IHRvIGRvIGFueSBwb2ludGVycywgYmVjYXVzZSB0aGF0IGlzIHRvbyBtdWNoCi0gKiBvZiBhIHBlcmZvcm1hbmNlIGltcGFjdC4gVGh1cyB3ZSBoYXZlIGEgZmV3IHJhdGhlciB1Z2x5IG1hY3JvcyBoZXJlLAotICogYW5kIGhpZGUgYWxsIHRoZSB1Z2xpbmVzcyBmcm9tIHRoZSB1c2VyLgotICoKLSAqIFRoZSAiX194eHgiIHZlcnNpb25zIG9mIHRoZSB1c2VyIGFjY2VzcyBmdW5jdGlvbnMgYXJlIHZlcnNpb25zIHRoYXQKLSAqIGRvIG5vdCB2ZXJpZnkgdGhlIGFkZHJlc3Mgc3BhY2UsIHRoYXQgbXVzdCBoYXZlIGJlZW4gZG9uZSBwcmV2aW91c2x5Ci0gKiB3aXRoIGEgc2VwYXJhdGUgImFjY2Vzc19vaygpIiBjYWxsICh0aGlzIGlzIHVzZWQgd2hlbiB3ZSBkbyBtdWx0aXBsZQotICogYWNjZXNzZXMgdG8gdGhlIHNhbWUgYXJlYSBvZiB1c2VyIG1lbW9yeSkuCi0gKi8KLQotZXh0ZXJuIGludCBfX2dldF91c2VyXzEodm9pZCk7Ci1leHRlcm4gaW50IF9fZ2V0X3VzZXJfMih2b2lkKTsKLWV4dGVybiBpbnQgX19nZXRfdXNlcl80KHZvaWQpOwotZXh0ZXJuIGludCBfX2dldF91c2VyXzgodm9pZCk7Ci1leHRlcm4gaW50IF9fZ2V0X3VzZXJfYmFkKHZvaWQpOwotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLCByZXQsIHgsIHB0cikJCSAgICAgIFwKLQlhc20gdm9sYXRpbGUoImNhbGwgX19nZXRfdXNlcl8iICNzaXplCSAgICAgIFwKLQkJICAgICA6ICI9YSIgKHJldCksIj1kIiAoeCkJICAgICAgXAotCQkgICAgIDogIjAiIChwdHIpKQkJICAgICAgXAotCi0vKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlcgotICogZm9yIHNpZ24gcmVhc29ucyAqLwotCi0vKioKLSAqIGdldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UuCi0gKiBAeDogICBWYXJpYWJsZSB0byBzdG9yZSByZXN1bHQuCi0gKiBAcHRyOiBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KLSAqCi0gKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgotICoKLSAqIFRoaXMgbWFjcm8gY29waWVzIGEgc2luZ2xlIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsCi0gKiBzcGFjZS4gIEl0IHN1cHBvcnRzIHNpbXBsZSB0eXBlcyBsaWtlIGNoYXIgYW5kIGludCwgYnV0IG5vdCBsYXJnZXIKLSAqIGRhdGEgdHlwZXMgbGlrZSBzdHJ1Y3R1cmVzIG9yIGFycmF5cy4KLSAqCi0gKiBAcHRyIG11c3QgaGF2ZSBwb2ludGVyLXRvLXNpbXBsZS12YXJpYWJsZSB0eXBlLCBhbmQgdGhlIHJlc3VsdCBvZgotICogZGVyZWZlcmVuY2luZyBAcHRyIG11c3QgYmUgYXNzaWduYWJsZSB0byBAeCB3aXRob3V0IGEgY2FzdC4KLSAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KLSAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIF9fZ2V0X3VzZXJfOChfX3JldF9ndSwgX192YWxfZ3UsIHB0cikJCQkJXAotCQlfX2dldF91c2VyX3goWCwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpCi0jZWxzZQotI2RlZmluZSBfX2dldF91c2VyXzgoX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpCQkJCVwKLQkJX19nZXRfdXNlcl94KDgsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKQotI2VuZGlmCi0KLSNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCWludCBfX3JldF9ndTsJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX192YWxfZ3U7CQkJCQkJXAotCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAotCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJCVwKLQljYXNlIDE6CQkJCQkJCQlcCi0JCV9fZ2V0X3VzZXJfeCgxLCBfX3JldF9ndSwgX192YWxfZ3UsIHB0cik7CQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2FzZSAyOgkJCQkJCQkJXAotCQlfX2dldF91c2VyX3goMiwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpOwkJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgNDoJCQkJCQkJCVwKLQkJX19nZXRfdXNlcl94KDQsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKTsJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlIDg6CQkJCQkJCQlcCi0JCV9fZ2V0X3VzZXJfOChfX3JldF9ndSwgX192YWxfZ3UsIHB0cik7CQkJXAotCQlicmVhazsJCQkJCQkJXAotCWRlZmF1bHQ6CQkJCQkJCVwKLQkJX19nZXRfdXNlcl94KFgsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKTsJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX3ZhbF9ndTsJCQkJXAotCV9fcmV0X2d1OwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9fcHV0X3VzZXJfeChzaXplLCB4LCBwdHIsIF9fcmV0X3B1KQkJCVwKLQlhc20gdm9sYXRpbGUoImNhbGwgX19wdXRfdXNlcl8iICNzaXplIDogIj1hIiAoX19yZXRfcHUpCVwKLQkJICAgICA6IjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpIDogImVieCIpCi0KLQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBhZGRyLCBlcnIpCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCIxOgltb3ZsICUlZWF4LDAoJTIpXG4iCQkJXAotCQkgICAgICIyOgltb3ZsICUlZWR4LDQoJTIpXG4iCQkJXAotCQkgICAgICIzOlxuIgkJCQkJCVwKLQkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCi0JCSAgICAgIjQ6CW1vdmwgJTMsJTBcbiIJCQkJXAotCQkgICAgICIJam1wIDNiXG4iCQkJCQlcCi0JCSAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAotCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgNGIpCQkJCVwKLQkJICAgICBfQVNNX0VYVEFCTEUoMmIsIDRiKQkJCQlcCi0JCSAgICAgOiAiPXIiIChlcnIpCQkJCQlcCi0JCSAgICAgOiAiQSIgKHgpLCAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCi0KLSNkZWZpbmUgX19wdXRfdXNlcl94OCh4LCBwdHIsIF9fcmV0X3B1KQkJCQlcCi0JYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfOCIgOiAiPWEiIChfX3JldF9wdSkJXAotCQkgICAgIDogIkEiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpIDogImVieCIpCi0jZWxzZQotI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBwdHIsIHJldHZhbCkgXAotCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAicSIsICIiLCAiWnIiLCAtRUZBVUxUKQotI2RlZmluZSBfX3B1dF91c2VyX3g4KHgsIHB0ciwgX19yZXRfcHUpIF9fcHV0X3VzZXJfeCg4LCB4LCBwdHIsIF9fcmV0X3B1KQotI2VuZGlmCi0KLWV4dGVybiB2b2lkIF9fcHV0X3VzZXJfYmFkKHZvaWQpOwotCi0vKgotICogU3RyYW5nZSBtYWdpYyBjYWxsaW5nIGNvbnZlbnRpb246IHBvaW50ZXIgaW4gJWVjeCwKLSAqIHZhbHVlIGluICVlYXgoOiVlZHgpLCByZXR1cm4gdmFsdWUgaW4gJWVheC4gY2xvYmJlcnMgJXJieAotICovCi1leHRlcm4gdm9pZCBfX3B1dF91c2VyXzEodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3B1dF91c2VyXzIodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3B1dF91c2VyXzQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3B1dF91c2VyXzgodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1dQX1dPUktTX09LCi0KLS8qKgotICogcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLgotICogQHg6ICAgVmFsdWUgdG8gY29weSB0byB1c2VyIHNwYWNlLgotICogQHB0cjogRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KLSAqCi0gKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgotICoKLSAqIFRoaXMgbWFjcm8gY29waWVzIGEgc2luZ2xlIHNpbXBsZSB2YWx1ZSBmcm9tIGtlcm5lbCBzcGFjZSB0byB1c2VyCi0gKiBzcGFjZS4gIEl0IHN1cHBvcnRzIHNpbXBsZSB0eXBlcyBsaWtlIGNoYXIgYW5kIGludCwgYnV0IG5vdCBsYXJnZXIKLSAqIGRhdGEgdHlwZXMgbGlrZSBzdHJ1Y3R1cmVzIG9yIGFycmF5cy4KLSAqCi0gKiBAcHRyIG11c3QgaGF2ZSBwb2ludGVyLXRvLXNpbXBsZS12YXJpYWJsZSB0eXBlLCBhbmQgQHggbXVzdCBiZSBhc3NpZ25hYmxlCi0gKiB0byB0aGUgcmVzdWx0IG9mIGRlcmVmZXJlbmNpbmcgQHB0ci4KLSAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KLSAqLwotI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCQlcCi0oewkJCQkJCQkJXAotCWludCBfX3JldF9wdTsJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsOwkJCQlcCi0JX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKLQlfX3B1X3ZhbCA9IHg7CQkJCQkJXAotCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJXAotCWNhc2UgMToJCQkJCQkJXAotCQlfX3B1dF91c2VyX3goMSwgX19wdV92YWwsIHB0ciwgX19yZXRfcHUpOwlcCi0JCWJyZWFrOwkJCQkJCVwKLQljYXNlIDI6CQkJCQkJCVwKLQkJX19wdXRfdXNlcl94KDIsIF9fcHVfdmFsLCBwdHIsIF9fcmV0X3B1KTsJXAotCQlicmVhazsJCQkJCQlcCi0JY2FzZSA0OgkJCQkJCQlcCi0JCV9fcHV0X3VzZXJfeCg0LCBfX3B1X3ZhbCwgcHRyLCBfX3JldF9wdSk7CVwKLQkJYnJlYWs7CQkJCQkJXAotCWNhc2UgODoJCQkJCQkJXAotCQlfX3B1dF91c2VyX3g4KF9fcHVfdmFsLCBwdHIsIF9fcmV0X3B1KTsJCVwKLQkJYnJlYWs7CQkJCQkJXAotCWRlZmF1bHQ6CQkJCQkJXAotCQlfX3B1dF91c2VyX3goWCwgX19wdV92YWwsIHB0ciwgX19yZXRfcHUpOwlcCi0JCWJyZWFrOwkJCQkJCVwKLQl9CQkJCQkJCVwKLQlfX3JldF9wdTsJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCwgZXJycmV0KQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JcmV0dmFsID0gMDsJCQkJCQkJXAotCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAotCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCi0JY2FzZSAxOgkJCQkJCQkJXAotCQlfX3B1dF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImIiLCAiYiIsICJpcSIsIGVycnJldCk7CVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlIDI6CQkJCQkJCQlcCi0JCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAidyIsICJ3IiwgImlyIiwgZXJycmV0KTsJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgNDoJCQkJCQkJCVwKLQkJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJsIiwgImsiLCAgImlyIiwgZXJycmV0KTtcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2FzZSA4OgkJCQkJCQkJXAotCQlfX3B1dF91c2VyX3U2NCgoX190eXBlb2ZfXygqcHRyKSkoeCksIHB0ciwgcmV0dmFsKTsJXAotCQlicmVhazsJCQkJCQkJXAotCWRlZmF1bHQ6CQkJCQkJCVwKLQkJX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZWxzZQotCi0jZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCwgZXJycmV0KQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpX19wdXNfdG1wID0geDsJCQkJXAotCXJldHZhbCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAodW5saWtlbHkoX19jb3B5X3RvX3VzZXJfbGwocHRyLCAmX19wdXNfdG1wLCBzaXplKSAhPSAwKSkJXAotCQlyZXR2YWwgPSBlcnJyZXQ7CQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHB1dF91c2VyKHgsIHB0cikJCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50IF9fcmV0X3B1OwkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSlfX3B1c190bXAgPSB4OwkJCVwKLQlfX3JldF9wdSA9IDA7CQkJCQkJXAotCWlmICh1bmxpa2VseShfX2NvcHlfdG9fdXNlcl9sbChwdHIsICZfX3B1c190bXAsCQlcCi0JCQkJICAgICAgIHNpemVvZigqKHB0cikpKSAhPSAwKSkJXAotCQlfX3JldF9wdSA9IC1FRkFVTFQ7CQkJCVwKLQlfX3JldF9wdTsJCQkJCQlcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX3U2NCh4LCBwdHIsIHJldHZhbCwgZXJycmV0KQkoeCkgPSBfX2dldF91c2VyX2JhZCgpCi0jZWxzZQotI2RlZmluZSBfX2dldF91c2VyX2FzbV91NjQoeCwgcHRyLCByZXR2YWwsIGVycnJldCkgXAotCSBfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgInEiLCAiIiwgIj1yIiwgZXJycmV0KQotI2VuZGlmCi0KLSNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsLCBlcnJyZXQpCQkJXAotZG8gewkJCQkJCQkJCVwKLQlyZXR2YWwgPSAwOwkJCQkJCQlcCi0JX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCi0Jc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKLQljYXNlIDE6CQkJCQkJCQlcCi0JCV9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAiYiIsICJiIiwgIj1xIiwgZXJycmV0KTsJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgMjoJCQkJCQkJCVwKLQkJX19nZXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJ3IiwgInciLCAiPXIiLCBlcnJyZXQpOwlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2FzZSA0OgkJCQkJCQkJXAotCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImwiLCAiayIsICI9ciIsIGVycnJldCk7CVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlIDg6CQkJCQkJCQlcCi0JCV9fZ2V0X3VzZXJfYXNtX3U2NCh4LCBwdHIsIHJldHZhbCwgZXJycmV0KTsJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQlkZWZhdWx0OgkJCQkJCQlcCi0JCSh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlLCBydHlwZSwgbHR5cGUsIGVycnJldCkJXAotCWFzbSB2b2xhdGlsZSgiMToJbW92Iml0eXBlIiAlMiwlInJ0eXBlIjFcbiIJCVwKLQkJICAgICAiMjpcbiIJCQkJCQlcCi0JCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAotCQkgICAgICIzOgltb3YgJTMsJTBcbiIJCQkJXAotCQkgICAgICIJeG9yIml0eXBlIiAlInJ0eXBlIjEsJSJydHlwZSIxXG4iCQlcCi0JCSAgICAgIglqbXAgMmJcbiIJCQkJCVwKLQkJICAgICAiLnByZXZpb3VzXG4iCQkJCQlcCi0JCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikJCQkJXAotCQkgICAgIDogIj1yIiAoZXJyKSwgbHR5cGUoeCkJCQkJXAotCQkgICAgIDogIm0iIChfX20oYWRkcikpLCAiaSIgKGVycnJldCksICIwIiAoZXJyKSkKLQotI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCVwKLSh7CQkJCQkJCQlcCi0JbG9uZyBfX3B1X2VycjsJCQkJCQlcCi0JX19wdXRfdXNlcl9zaXplKCh4KSwgKHB0ciksIChzaXplKSwgX19wdV9lcnIsIC1FRkFVTFQpOwlcCi0JX19wdV9lcnI7CQkJCQkJXAotfSkKLQotI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCQlcCi0oewkJCQkJCQkJCVwKLQlsb25nIF9fZ3VfZXJyOwkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCQlcCi0JX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCAocHRyKSwgKHNpemUpLCBfX2d1X2VyciwgLUVGQVVMVCk7CVwKLQkoeCkgPSAoX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJXAotCV9fZ3VfZXJyOwkJCQkJCQlcCi19KQotCi0vKiBGSVhNRTogdGhpcyBoYWNrIGlzIGRlZmluaXRlbHkgd3JvbmcgLUFLICovCi1zdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OwotI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0IF9fdXNlciAqKSh4KSkKLQotLyoKLSAqIFRlbGwgZ2NjIHdlIHJlYWQgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiB3cml0aW5nOiB0aGlzIGlzIGJlY2F1c2UKLSAqIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUgYXJlIG5vCi0gKiBhbGlhc2luZyBpc3N1ZXMuCi0gKi8KLSNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBpdHlwZSwgcnR5cGUsIGx0eXBlLCBlcnJyZXQpCVwKLQlhc20gdm9sYXRpbGUoIjE6CW1vdiJpdHlwZSIgJSJydHlwZSIxLCUyXG4iCQlcCi0JCSAgICAgIjI6XG4iCQkJCQkJXAotCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKLQkJICAgICAiMzoJbW92ICUzLCUwXG4iCQkJCVwKLQkJICAgICAiCWptcCAyYlxuIgkJCQkJXAotCQkgICAgICIucHJldmlvdXNcbiIJCQkJCVwKLQkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDNiKQkJCQlcCi0JCSAgICAgOiAiPXIiKGVycikJCQkJCVwKLQkJICAgICA6IGx0eXBlKHgpLCAibSIgKF9fbShhZGRyKSksICJpIiAoZXJycmV0KSwgIjAiIChlcnIpKQotLyoqCi0gKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KLSAqIEB4OiAgIFZhcmlhYmxlIHRvIHN0b3JlIHJlc3VsdC4KLSAqIEBwdHI6IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgotICoKLSAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCi0gKgotICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwKLSAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgotICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgotICoKLSAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCB0aGUgcmVzdWx0IG9mCi0gKiBkZXJlZmVyZW5jaW5nIEBwdHIgbXVzdCBiZSBhc3NpZ25hYmxlIHRvIEB4IHdpdGhvdXQgYSBjYXN0LgotICoKLSAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcwotICogZnVuY3Rpb24uCi0gKgotICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCi0gKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgotICovCi0KLSNkZWZpbmUgX19nZXRfdXNlcih4LCBwdHIpCQkJCQkJXAotCV9fZ2V0X3VzZXJfbm9jaGVjaygoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKLS8qKgotICogX19wdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KLSAqIEB4OiAgIFZhbHVlIHRvIGNvcHkgdG8gdXNlciBzcGFjZS4KLSAqIEBwdHI6IERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCi0gKgotICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KLSAqCi0gKiBUaGlzIG1hY3JvIGNvcGllcyBhIHNpbmdsZSBzaW1wbGUgdmFsdWUgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlcgotICogc3BhY2UuICBJdCBzdXBwb3J0cyBzaW1wbGUgdHlwZXMgbGlrZSBjaGFyIGFuZCBpbnQsIGJ1dCBub3QgbGFyZ2VyCi0gKiBkYXRhIHR5cGVzIGxpa2Ugc3RydWN0dXJlcyBvciBhcnJheXMuCi0gKgotICogQHB0ciBtdXN0IGhhdmUgcG9pbnRlci10by1zaW1wbGUtdmFyaWFibGUgdHlwZSwgYW5kIEB4IG11c3QgYmUgYXNzaWduYWJsZQotICogdG8gdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIEBwdHIuCi0gKgotICogQ2FsbGVyIG11c3QgY2hlY2sgdGhlIHBvaW50ZXIgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzCi0gKiBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KLSAqLwotCi0jZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKQkJCQkJCVwKLQlfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKLQotI2RlZmluZSBfX2dldF91c2VyX3VuYWxpZ25lZCBfX2dldF91c2VyCi0jZGVmaW5lIF9fcHV0X3VzZXJfdW5hbGlnbmVkIF9fcHV0X3VzZXIKLQotLyoKLSAqIG1vdnNsIGNhbiBiZSBzbG93IHdoZW4gc291cmNlIGFuZCBkZXN0IGFyZSBub3QgYm90aCA4LWJ5dGUgYWxpZ25lZAotICovCi0jaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9VU0VSQ09QWQotZXh0ZXJuIHN0cnVjdCBtb3ZzbF9tYXNrIHsKLQlpbnQgbWFzazsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBtb3ZzbF9tYXNrOwotI2VuZGlmCi0KLSNkZWZpbmUgQVJDSF9IQVNfTk9DQUNIRV9VQUNDRVNTIDEKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgaW5jbHVkZSAidWFjY2Vzc18zMi5oIgotI2Vsc2UKLSMgZGVmaW5lIEFSQ0hfSEFTX1NFQVJDSF9FWFRBQkxFCi0jIGluY2x1ZGUgInVhY2Nlc3NfNjQuaCIKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVUFDQ0VTU19IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzc18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjViNTdkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19VQUNDRVNTXzMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVUFDQ0VTU18zMl9ICi0KLS8qCi0gKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X3RvX3VzZXJfbGwKLQkJKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKLXVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfbGwKLQkJKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKLXVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfbGxfbm96ZXJvCi0JCSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7Ci11bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfZnJvbV91c2VyX2xsX25vY2FjaGUKLQkJKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKLXVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfbGxfbm9jYWNoZV9ub3plcm8KLQkJKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKLQotLyoqCi0gKiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYzogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KLSAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgotICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCi0gKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCi0gKgotICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuCi0gKgotICogQ29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuICBDYWxsZXIgbXVzdCBjaGVjawotICogdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKiBUaGUgY2FsbGVyIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSBoZSBwaW5zIHRoZSB1c2VyIHNwYWNlIGFkZHJlc3MKLSAqIHNvIHRoYXQgdGhlIHdlIGRvbid0IHJlc3VsdCBpbiBwYWdlIGZhdWx0IGFuZCBzbGVlcC4KLSAqCi0gKiBIZXJlIHdlIHNwZWNpYWwtY2FzZSAxLCAyIGFuZCA0LWJ5dGUgY29weV8qX3VzZXIgaW52b2NhdGlvbnMuICBPbiBhIGZhdWx0Ci0gKiB3ZSByZXR1cm4gdGhlIGluaXRpYWwgcmVxdWVzdCBzaXplICgxLCAyIG9yIDQpLCBhcyBjb3B5XypfdXNlciBzaG91bGQgZG8uCi0gKiBJZiBhIHN0b3JlIGNyb3NzZXMgYSBwYWdlIGJvdW5kYXJ5IGFuZCBnZXRzIGEgZmF1bHQsIHRoZSB4ODYgd2lsbCBub3Qgd3JpdGUKLSAqIGFueXRoaW5nLCBzbyB0aGlzIGlzIGFjY3VyYXRlLgotICovCi0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKLV9fY29weV90b191c2VyX2luYXRvbWljKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQotewotCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSkgewotCQl1bnNpZ25lZCBsb25nIHJldDsKLQotCQlzd2l0Y2ggKG4pIHsKLQkJY2FzZSAxOgotCQkJX19wdXRfdXNlcl9zaXplKCoodTggKilmcm9tLCAodTggX191c2VyICopdG8sCi0JCQkJCTEsIHJldCwgMSk7Ci0JCQlyZXR1cm4gcmV0OwotCQljYXNlIDI6Ci0JCQlfX3B1dF91c2VyX3NpemUoKih1MTYgKilmcm9tLCAodTE2IF9fdXNlciAqKXRvLAotCQkJCQkyLCByZXQsIDIpOwotCQkJcmV0dXJuIHJldDsKLQkJY2FzZSA0OgotCQkJX19wdXRfdXNlcl9zaXplKCoodTMyICopZnJvbSwgKHUzMiBfX3VzZXIgKil0bywKLQkJCQkJNCwgcmV0LCA0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIF9fY29weV90b191c2VyX2xsKHRvLCBmcm9tLCBuKTsKLX0KLQotLyoqCi0gKiBfX2NvcHlfdG9fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KLSAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgotICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCi0gKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCi0gKgotICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KLSAqCi0gKiBDb3B5IGRhdGEgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4gIENhbGxlciBtdXN0IGNoZWNrCi0gKiB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCi0gKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KLSAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawotX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCi17Ci0gICAgICAgbWlnaHRfc2xlZXAoKTsKLSAgICAgICByZXR1cm4gX19jb3B5X3RvX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCi17Ci0JLyogQXZvaWQgemVyb2luZyB0aGUgdGFpbCBpZiB0aGUgY29weSBmYWlscy4uCi0JICogSWYgJ24nIGlzIGNvbnN0YW50IGFuZCAxLCAyLCBvciA0LCB3ZSBkbyBzdGlsbCB6ZXJvIG9uIGEgZmFpbHVyZSwKLQkgKiBidXQgYXMgdGhlIHplcm9pbmcgYmVoYXZpb3VyIGlzIG9ubHkgc2lnbmlmaWNhbnQgd2hlbiBuIGlzIG5vdAotCSAqIGNvbnN0YW50LCB0aGF0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0uCi0JICovCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcmV0OwotCi0JCXN3aXRjaCAobikgewotCQljYXNlIDE6Ci0JCQlfX2dldF91c2VyX3NpemUoKih1OCAqKXRvLCBmcm9tLCAxLCByZXQsIDEpOwotCQkJcmV0dXJuIHJldDsKLQkJY2FzZSAyOgotCQkJX19nZXRfdXNlcl9zaXplKCoodTE2ICopdG8sIGZyb20sIDIsIHJldCwgMik7Ci0JCQlyZXR1cm4gcmV0OwotCQljYXNlIDQ6Ci0JCQlfX2dldF91c2VyX3NpemUoKih1MzIgKil0bywgZnJvbSwgNCwgcmV0LCA0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIF9fY29weV9mcm9tX3VzZXJfbGxfbm96ZXJvKHRvLCBmcm9tLCBuKTsKLX0KLQotLyoqCi0gKiBfX2NvcHlfZnJvbV91c2VyOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGZyb20gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgotICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4KLSAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KLSAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KLSAqCi0gKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgotICoKLSAqIENvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKLSAqIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNvcGllZC4KLSAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgotICoKLSAqIElmIHNvbWUgZGF0YSBjb3VsZCBub3QgYmUgY29waWVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFkIHRoZSBjb3BpZWQKLSAqIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBzaXplIHVzaW5nIHplcm8gYnl0ZXMuCi0gKgotICogQW4gYWx0ZXJuYXRlIHZlcnNpb24gLSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCkgLSBtYXkgYmUgY2FsbGVkIGZyb20KLSAqIGF0b21pYyBjb250ZXh0IGFuZCB3aWxsIGZhaWwgcmF0aGVyIHRoYW4gc2xlZXAuICBJbiB0aGlzIGNhc2UgdGhlCi0gKiB1bmNvcGllZCBieXRlcyB3aWxsICpOT1QqIGJlIHBhZGRlZCB3aXRoIHplcm9zLiAgU2VlIGZzL2ZpbGVtYXAuaAotICogZm9yIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIGlzIG5lZWRlZC4KLSAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nCi1fX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcmV0OwotCi0JCXN3aXRjaCAobikgewotCQljYXNlIDE6Ci0JCQlfX2dldF91c2VyX3NpemUoKih1OCAqKXRvLCBmcm9tLCAxLCByZXQsIDEpOwotCQkJcmV0dXJuIHJldDsKLQkJY2FzZSAyOgotCQkJX19nZXRfdXNlcl9zaXplKCoodTE2ICopdG8sIGZyb20sIDIsIHJldCwgMik7Ci0JCQlyZXR1cm4gcmV0OwotCQljYXNlIDQ6Ci0JCQlfX2dldF91c2VyX3NpemUoKih1MzIgKil0bywgZnJvbSwgNCwgcmV0LCA0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIF9fY29weV9mcm9tX3VzZXJfbGwodG8sIGZyb20sIG4pOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKHZvaWQgKnRvLAotCQkJCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikpIHsKLQkJdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQkJc3dpdGNoIChuKSB7Ci0JCWNhc2UgMToKLQkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHU4ICopdG8sIGZyb20sIDEsIHJldCwgMSk7Ci0JCQlyZXR1cm4gcmV0OwotCQljYXNlIDI6Ci0JCQlfX2dldF91c2VyX3NpemUoKih1MTYgKil0bywgZnJvbSwgMiwgcmV0LCAyKTsKLQkJCXJldHVybiByZXQ7Ci0JCWNhc2UgNDoKLQkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHUzMiAqKXRvLCBmcm9tLCA0LCByZXQsIDQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQlyZXR1cm4gX19jb3B5X2Zyb21fdXNlcl9sbF9ub2NhY2hlKHRvLCBmcm9tLCBuKTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nCi1fX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAotCQkJCSAgdW5zaWduZWQgbG9uZyBuKQotewotICAgICAgIHJldHVybiBfX2NvcHlfZnJvbV91c2VyX2xsX25vY2FjaGVfbm96ZXJvKHRvLCBmcm9tLCBuKTsKLX0KLQotdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywKLQkJCQkJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKLXVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIGNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLAotCQkJCQkgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgbik7Ci1sb25nIF9fbXVzdF9jaGVjayBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsCi0JCQkJICAgIGxvbmcgY291bnQpOwotbG9uZyBfX211c3RfY2hlY2sgX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsCi0JCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7Ci0KLS8qKgotICogc3RybGVuX3VzZXI6IC0gR2V0IHRoZSBzaXplIG9mIGEgc3RyaW5nIGluIHVzZXIgc3BhY2UuCi0gKiBAc3RyOiBUaGUgc3RyaW5nIHRvIG1lYXN1cmUuCi0gKgotICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KLSAqCi0gKiBHZXQgdGhlIHNpemUgb2YgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdXNlciBzcGFjZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgSU5DTFVESU5HIHRoZSB0ZXJtaW5hdGluZyBOVUwuCi0gKiBPbiBleGNlcHRpb24sIHJldHVybnMgMC4KLSAqCi0gKiBJZiB0aGVyZSBpcyBhIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgYSB2YWxpZCBzdHJpbmcsIHlvdSBtYXkgd2lzaCB0bwotICogY29uc2lkZXIgdXNpbmcgc3Rybmxlbl91c2VyKCkgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpIHN0cm5sZW5fdXNlcihzdHIsIExPTkdfTUFYKQotCi1sb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pOwotdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7Ci11bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVUFDQ0VTU18zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzc182NC5oIGIvaW5jbHVkZS9hc20teDg2L3VhY2Nlc3NfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2YzFmNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzc182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVUFDQ0VTU182NF9ICi0jZGVmaW5lIEFTTV9YODZfX1VBQ0NFU1NfNjRfSAotCi0vKgotICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucwotICovCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+Ci0jaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0KLS8qCi0gKiBDb3B5IFRvL0Zyb20gVXNlcnNwYWNlCi0gKi8KLQotLyogSGFuZGxlcyBleGNlcHRpb25zIGluIGJvdGggdG8gYW5kIGZyb20sIGJ1dCBkb2Vzbid0IGRvIGFjY2Vzc19vayAqLwotX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKLWNvcHlfdXNlcl9nZW5lcmljKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pOwotCi1fX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZwotY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKLV9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCi1jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxlbik7Ci1fX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZwotY29weV9pbl91c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxlbik7Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrCi1pbnQgX19jb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCi17Ci0JaW50IHJldCA9IDA7Ci0JaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkKLQkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKGRzdCwgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSk7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOl9fZ2V0X3VzZXJfYXNtKCoodTggKilkc3QsICh1OCBfX3VzZXIgKilzcmMsCi0JCQkgICAgICByZXQsICJiIiwgImIiLCAiPXEiLCAxKTsKLQkJcmV0dXJuIHJldDsKLQljYXNlIDI6X19nZXRfdXNlcl9hc20oKih1MTYgKilkc3QsICh1MTYgX191c2VyICopc3JjLAotCQkJICAgICAgcmV0LCAidyIsICJ3IiwgIj1yIiwgMik7Ci0JCXJldHVybiByZXQ7Ci0JY2FzZSA0Ol9fZ2V0X3VzZXJfYXNtKCoodTMyICopZHN0LCAodTMyIF9fdXNlciAqKXNyYywKLQkJCSAgICAgIHJldCwgImwiLCAiayIsICI9ciIsIDQpOwotCQlyZXR1cm4gcmV0OwotCWNhc2UgODpfX2dldF91c2VyX2FzbSgqKHU2NCAqKWRzdCwgKHU2NCBfX3VzZXIgKilzcmMsCi0JCQkgICAgICByZXQsICJxIiwgIiIsICI9ciIsIDgpOwotCQlyZXR1cm4gcmV0OwotCWNhc2UgMTA6Ci0JCV9fZ2V0X3VzZXJfYXNtKCoodTY0ICopZHN0LCAodTY0IF9fdXNlciAqKXNyYywKLQkJCSAgICAgICByZXQsICJxIiwgIiIsICI9ciIsIDE2KTsKLQkJaWYgKHVubGlrZWx5KHJldCkpCi0JCQlyZXR1cm4gcmV0OwotCQlfX2dldF91c2VyX2FzbSgqKHUxNiAqKSg4ICsgKGNoYXIgKilkc3QpLAotCQkJICAgICAgICh1MTYgX191c2VyICopKDggKyAoY2hhciBfX3VzZXIgKilzcmMpLAotCQkJICAgICAgIHJldCwgInciLCAidyIsICI9ciIsIDIpOwotCQlyZXR1cm4gcmV0OwotCWNhc2UgMTY6Ci0JCV9fZ2V0X3VzZXJfYXNtKCoodTY0ICopZHN0LCAodTY0IF9fdXNlciAqKXNyYywKLQkJCSAgICAgICByZXQsICJxIiwgIiIsICI9ciIsIDE2KTsKLQkJaWYgKHVubGlrZWx5KHJldCkpCi0JCQlyZXR1cm4gcmV0OwotCQlfX2dldF91c2VyX2FzbSgqKHU2NCAqKSg4ICsgKGNoYXIgKilkc3QpLAotCQkJICAgICAgICh1NjQgX191c2VyICopKDggKyAoY2hhciBfX3VzZXIgKilzcmMpLAotCQkJICAgICAgIHJldCwgInEiLCAiIiwgIj1yIiwgOCk7Ci0JCXJldHVybiByZXQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKGRzdCwgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSk7Ci0JfQotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjawotaW50IF9fY29weV90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgc2l6ZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKQotCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwgc3JjLCBzaXplKTsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6X19wdXRfdXNlcl9hc20oKih1OCAqKXNyYywgKHU4IF9fdXNlciAqKWRzdCwKLQkJCSAgICAgIHJldCwgImIiLCAiYiIsICJpcSIsIDEpOwotCQlyZXR1cm4gcmV0OwotCWNhc2UgMjpfX3B1dF91c2VyX2FzbSgqKHUxNiAqKXNyYywgKHUxNiBfX3VzZXIgKilkc3QsCi0JCQkgICAgICByZXQsICJ3IiwgInciLCAiaXIiLCAyKTsKLQkJcmV0dXJuIHJldDsKLQljYXNlIDQ6X19wdXRfdXNlcl9hc20oKih1MzIgKilzcmMsICh1MzIgX191c2VyICopZHN0LAotCQkJICAgICAgcmV0LCAibCIsICJrIiwgImlyIiwgNCk7Ci0JCXJldHVybiByZXQ7Ci0JY2FzZSA4Ol9fcHV0X3VzZXJfYXNtKCoodTY0ICopc3JjLCAodTY0IF9fdXNlciAqKWRzdCwKLQkJCSAgICAgIHJldCwgInEiLCAiIiwgImlyIiwgOCk7Ci0JCXJldHVybiByZXQ7Ci0JY2FzZSAxMDoKLQkJX19wdXRfdXNlcl9hc20oKih1NjQgKilzcmMsICh1NjQgX191c2VyICopZHN0LAotCQkJICAgICAgIHJldCwgInEiLCAiIiwgImlyIiwgMTApOwotCQlpZiAodW5saWtlbHkocmV0KSkKLQkJCXJldHVybiByZXQ7Ci0JCWFzbSgiIjo6OiJtZW1vcnkiKTsKLQkJX19wdXRfdXNlcl9hc20oNFsodTE2ICopc3JjXSwgNCArICh1MTYgX191c2VyICopZHN0LAotCQkJICAgICAgIHJldCwgInciLCAidyIsICJpciIsIDIpOwotCQlyZXR1cm4gcmV0OwotCWNhc2UgMTY6Ci0JCV9fcHV0X3VzZXJfYXNtKCoodTY0ICopc3JjLCAodTY0IF9fdXNlciAqKWRzdCwKLQkJCSAgICAgICByZXQsICJxIiwgIiIsICJpciIsIDE2KTsKLQkJaWYgKHVubGlrZWx5KHJldCkpCi0JCQlyZXR1cm4gcmV0OwotCQlhc20oIiI6OjoibWVtb3J5Iik7Ci0JCV9fcHV0X3VzZXJfYXNtKDFbKHU2NCAqKXNyY10sIDEgKyAodTY0IF9fdXNlciAqKWRzdCwKLQkJCSAgICAgICByZXQsICJxIiwgIiIsICJpciIsIDgpOwotCQlyZXR1cm4gcmV0OwotCWRlZmF1bHQ6Ci0JCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LCBzcmMsIHNpemUpOwotCX0KLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sKLWludCBfX2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKQotewotCWludCByZXQgPSAwOwotCWlmICghX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpCi0JCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LAotCQkJCQkgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSk7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOiB7Ci0JCXU4IHRtcDsKLQkJX19nZXRfdXNlcl9hc20odG1wLCAodTggX191c2VyICopc3JjLAotCQkJICAgICAgIHJldCwgImIiLCAiYiIsICI9cSIsIDEpOwotCQlpZiAobGlrZWx5KCFyZXQpKQotCQkJX19wdXRfdXNlcl9hc20odG1wLCAodTggX191c2VyICopZHN0LAotCQkJCSAgICAgICByZXQsICJiIiwgImIiLCAiaXEiLCAxKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JY2FzZSAyOiB7Ci0JCXUxNiB0bXA7Ci0JCV9fZ2V0X3VzZXJfYXNtKHRtcCwgKHUxNiBfX3VzZXIgKilzcmMsCi0JCQkgICAgICAgcmV0LCAidyIsICJ3IiwgIj1yIiwgMik7Ci0JCWlmIChsaWtlbHkoIXJldCkpCi0JCQlfX3B1dF91c2VyX2FzbSh0bXAsICh1MTYgX191c2VyICopZHN0LAotCQkJCSAgICAgICByZXQsICJ3IiwgInciLCAiaXIiLCAyKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQljYXNlIDQ6IHsKLQkJdTMyIHRtcDsKLQkJX19nZXRfdXNlcl9hc20odG1wLCAodTMyIF9fdXNlciAqKXNyYywKLQkJCSAgICAgICByZXQsICJsIiwgImsiLCAiPXIiLCA0KTsKLQkJaWYgKGxpa2VseSghcmV0KSkKLQkJCV9fcHV0X3VzZXJfYXNtKHRtcCwgKHUzMiBfX3VzZXIgKilkc3QsCi0JCQkJICAgICAgIHJldCwgImwiLCAiayIsICJpciIsIDQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQljYXNlIDg6IHsKLQkJdTY0IHRtcDsKLQkJX19nZXRfdXNlcl9hc20odG1wLCAodTY0IF9fdXNlciAqKXNyYywKLQkJCSAgICAgICByZXQsICJxIiwgIiIsICI9ciIsIDgpOwotCQlpZiAobGlrZWx5KCFyZXQpKQotCQkJX19wdXRfdXNlcl9hc20odG1wLCAodTY0IF9fdXNlciAqKWRzdCwKLQkJCQkgICAgICAgcmV0LCAicSIsICIiLCAiaXIiLCA4KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3QsCi0JCQkJCSAoX19mb3JjZSB2b2lkICopc3JjLCBzaXplKTsKLQl9Ci19Ci0KLV9fbXVzdF9jaGVjayBsb25nCi1zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOwotX19tdXN0X2NoZWNrIGxvbmcKLV9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KTsKLV9fbXVzdF9jaGVjayBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pOwotX19tdXN0X2NoZWNrIGxvbmcgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKTsKLV9fbXVzdF9jaGVjayBsb25nIHN0cmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIpOwotX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcgY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7Ci1fX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwotCi1fX211c3RfY2hlY2sgbG9uZyBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKLQkJCQkJICAgIHVuc2lnbmVkIHNpemUpOwotCi1zdGF0aWMgX19tdXN0X2NoZWNrIF9fYWx3YXlzX2lubGluZSBpbnQKLV9fY29weV90b191c2VyX2luYXRvbWljKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgc2l6ZSkKLXsKLQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwgc3JjLCBzaXplKTsKLX0KLQotZXh0ZXJuIGxvbmcgX19jb3B5X3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCi0JCQkJdW5zaWduZWQgc2l6ZSwgaW50IHplcm9yZXN0KTsKLQotc3RhdGljIGlubGluZSBpbnQgX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKLQkJCQkJICAgdW5zaWduZWQgc2l6ZSkKLXsKLQltaWdodF9zbGVlcCgpOwotCXJldHVybiBfX2NvcHlfdXNlcl9ub2NhY2hlKGRzdCwgc3JjLCBzaXplLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pY19ub2NhY2hlKHZvaWQgKmRzdCwKLQkJCQkJCSAgICBjb25zdCB2b2lkIF9fdXNlciAqc3JjLAotCQkJCQkJICAgIHVuc2lnbmVkIHNpemUpCi17Ci0JcmV0dXJuIF9fY29weV91c2VyX25vY2FjaGUoZHN0LCBzcmMsIHNpemUsIDApOwotfQotCi11bnNpZ25lZCBsb25nCi1jb3B5X3VzZXJfaGFuZGxlX3RhaWwoY2hhciAqdG8sIGNoYXIgKmZyb20sIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgemVyb3Jlc3QpOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVUFDQ0VTU182NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Ni91Y29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWVhYTU0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91Y29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19VQ09OVEVYVF9ICi0jZGVmaW5lIEFTTV9YODZfX1VDT05URVhUX0gKLQotI2RlZmluZSBVQ19GUF9YU1RBVEUJMHgxCS8qIGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgZXh0ZW5kZWQgc3RhdGUKLQkJCQkgKiBpbmZvcm1hdGlvbiBpbiB0aGUgbWVtb3J5IGxheW91dCBwb2ludGVkCi0JCQkJICogYnkgdGhlIGZwc3RhdGUgcG9pbnRlciBpbiB0aGUgdWNvbnRleHQncwotCQkJCSAqIHNpZ2NvbnRleHQgc3RydWN0ICh1Y19tY29udGV4dCkuCi0JCQkJICovCi0KLXN0cnVjdCB1Y29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOwotCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7Ci0Jc3RhY2tfdAkJICB1Y19zdGFjazsKLQlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKLQlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1VDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLXg4Ni91bmFsaWduZWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlkY2RlYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdW5hbGlnbmVkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1VOQUxJR05FRF9ICi0jZGVmaW5lIEFTTV9YODZfX1VOQUxJR05FRF9ICi0KLS8qCi0gKiBUaGUgeDg2IGNhbiBkbyB1bmFsaWduZWQgYWNjZXNzZXMgaXRzZWxmLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvYWNjZXNzX29rLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2dlbmVyaWMuaD4KLQotI2RlZmluZSBnZXRfdW5hbGlnbmVkIF9fZ2V0X3VuYWxpZ25lZF9sZQotI2RlZmluZSBwdXRfdW5hbGlnbmVkIF9fcHV0X3VuYWxpZ25lZF9sZQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91bmlzdGRfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni91bmlzdGRfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3ZjRhOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdW5pc3RkXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19VTklTVERfMzJfSAotI2RlZmluZSBBU01fWDg2X19VTklTVERfMzJfSAotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgotICovCi0KLSNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgICAgICAwCi0jZGVmaW5lIF9fTlJfZXhpdAkJICAxCi0jZGVmaW5lIF9fTlJfZm9yawkJICAyCi0jZGVmaW5lIF9fTlJfcmVhZAkJICAzCi0jZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAotI2RlZmluZSBfX05SX29wZW4JCSAgNQotI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKLSNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKLSNkZWZpbmUgX19OUl9jcmVhdAkJICA4Ci0jZGVmaW5lIF9fTlJfbGluawkJICA5Ci0jZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKLSNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQotI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKLSNkZWZpbmUgX19OUl90aW1lCQkgMTMKLSNkZWZpbmUgX19OUl9ta25vZAkJIDE0Ci0jZGVmaW5lIF9fTlJfY2htb2QJCSAxNQotI2RlZmluZSBfX05SX2xjaG93bgkJIDE2Ci0jZGVmaW5lIF9fTlJfYnJlYWsJCSAxNwotI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAotI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKLSNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAotI2RlZmluZSBfX05SX21vdW50CQkgMjEKLSNkZWZpbmUgX19OUl91bW91bnQJCSAyMgotI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCi0jZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKLSNkZWZpbmUgX19OUl9zdGltZQkJIDI1Ci0jZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKLSNkZWZpbmUgX19OUl9hbGFybQkJIDI3Ci0jZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAotI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKLSNkZWZpbmUgX19OUl91dGltZQkJIDMwCi0jZGVmaW5lIF9fTlJfc3R0eQkJIDMxCi0jZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCi0jZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKLSNkZWZpbmUgX19OUl9uaWNlCQkgMzQKLSNkZWZpbmUgX19OUl9mdGltZQkJIDM1Ci0jZGVmaW5lIF9fTlJfc3luYwkJIDM2Ci0jZGVmaW5lIF9fTlJfa2lsbAkJIDM3Ci0jZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKLSNkZWZpbmUgX19OUl9ta2RpcgkJIDM5Ci0jZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAotI2RlZmluZSBfX05SX2R1cAkJIDQxCi0jZGVmaW5lIF9fTlJfcGlwZQkJIDQyCi0jZGVmaW5lIF9fTlJfdGltZXMJCSA0MwotI2RlZmluZSBfX05SX3Byb2YJCSA0NAotI2RlZmluZSBfX05SX2JyawkJIDQ1Ci0jZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKLSNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NwotI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4Ci0jZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5Ci0jZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCi0jZGVmaW5lIF9fTlJfYWNjdAkJIDUxCi0jZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCi0jZGVmaW5lIF9fTlJfbG9jawkJIDUzCi0jZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAotI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKLSNkZWZpbmUgX19OUl9tcHgJCSA1NgotI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NwotI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4Ci0jZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5Ci0jZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAotI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCi0jZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgotI2RlZmluZSBfX05SX2R1cDIJCSA2MwotI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAotI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQotI2RlZmluZSBfX05SX3NldHNpZAkJIDY2Ci0jZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKLSNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4Ci0jZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQotI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKLSNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCi0jZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCi0jZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCi0jZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0Ci0jZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKLSNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NiAgIC8qIEJhY2sgY29tcGF0aWJsZSAyR2lnIGxpbWl0ZWQgcmxpbWl0ICovCi0jZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4Ci0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQotI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKLSNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgotI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MwotI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKLSNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1Ci0jZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKLSNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NwotI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4Ci0jZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5Ci0jZGVmaW5lIF9fTlJfbW1hcAkJIDkwCi0jZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKLSNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKLSNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAotI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1Ci0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2Ci0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3Ci0jZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKLSNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQotI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAotI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCi0jZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCi0jZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKLSNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAotI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1Ci0jZGVmaW5lIF9fTlJfc3RhdAkJMTA2Ci0jZGVmaW5lIF9fTlJfbHN0YXQJCTEwNwotI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKLSNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ci0jZGVmaW5lIF9fTlJfaW9wbAkJMTEwCi0jZGVmaW5lIF9fTlJfdmhhbmd1cAkJMTExCi0jZGVmaW5lIF9fTlJfaWRsZQkJMTEyCi0jZGVmaW5lIF9fTlJfdm04Nm9sZAkJMTEzCi0jZGVmaW5lIF9fTlJfd2FpdDQJCTExNAotI2RlZmluZSBfX05SX3N3YXBvZmYJCTExNQotI2RlZmluZSBfX05SX3N5c2luZm8JCTExNgotI2RlZmluZSBfX05SX2lwYwkJMTE3Ci0jZGVmaW5lIF9fTlJfZnN5bmMJCTExOAotI2RlZmluZSBfX05SX3NpZ3JldHVybgkJMTE5Ci0jZGVmaW5lIF9fTlJfY2xvbmUJCTEyMAotI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJMTIxCi0jZGVmaW5lIF9fTlJfdW5hbWUJCTEyMgotI2RlZmluZSBfX05SX21vZGlmeV9sZHQJCTEyMwotI2RlZmluZSBfX05SX2FkanRpbWV4CQkxMjQKLSNkZWZpbmUgX19OUl9tcHJvdGVjdAkJMTI1Ci0jZGVmaW5lIF9fTlJfc2lncHJvY21hc2sJMTI2Ci0jZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkxMjcKLSNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkxMjgKLSNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCTEyOQotI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAKLSNkZWZpbmUgX19OUl9xdW90YWN0bAkJMTMxCi0jZGVmaW5lIF9fTlJfZ2V0cGdpZAkJMTMyCi0jZGVmaW5lIF9fTlJfZmNoZGlyCQkxMzMKLSNkZWZpbmUgX19OUl9iZGZsdXNoCQkxMzQKLSNkZWZpbmUgX19OUl9zeXNmcwkJMTM1Ci0jZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJMTM2Ci0jZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwJMTM3IC8qIFN5c2NhbGwgZm9yIEFuZHJldyBGaWxlIFN5c3RlbSAqLwotI2RlZmluZSBfX05SX3NldGZzdWlkCQkxMzgKLSNkZWZpbmUgX19OUl9zZXRmc2dpZAkJMTM5Ci0jZGVmaW5lIF9fTlJfX2xsc2VlawkJMTQwCi0jZGVmaW5lIF9fTlJfZ2V0ZGVudHMJCTE0MQotI2RlZmluZSBfX05SX19uZXdzZWxlY3QJCTE0MgotI2RlZmluZSBfX05SX2Zsb2NrCQkxNDMKLSNkZWZpbmUgX19OUl9tc3luYwkJMTQ0Ci0jZGVmaW5lIF9fTlJfcmVhZHYJCTE0NQotI2RlZmluZSBfX05SX3dyaXRldgkJMTQ2Ci0jZGVmaW5lIF9fTlJfZ2V0c2lkCQkxNDcKLSNkZWZpbmUgX19OUl9mZGF0YXN5bmMJCTE0OAotI2RlZmluZSBfX05SX19zeXNjdGwJCTE0OQotI2RlZmluZSBfX05SX21sb2NrCQkxNTAKLSNkZWZpbmUgX19OUl9tdW5sb2NrCQkxNTEKLSNkZWZpbmUgX19OUl9tbG9ja2FsbAkJMTUyCi0jZGVmaW5lIF9fTlJfbXVubG9ja2FsbAkJMTUzCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0JCTE1NAotI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtCQkxNTUKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIJCTE1NgotI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgkJMTU3Ci0jZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQJCTE1OAotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgJMTU5Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgkxNjAKLSNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJMTYxCi0jZGVmaW5lIF9fTlJfbmFub3NsZWVwCQkxNjIKLSNkZWZpbmUgX19OUl9tcmVtYXAJCTE2MwotI2RlZmluZSBfX05SX3NldHJlc3VpZAkJMTY0Ci0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkCQkxNjUKLSNkZWZpbmUgX19OUl92bTg2CQkxNjYKLSNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTY3Ci0jZGVmaW5lIF9fTlJfcG9sbAkJMTY4Ci0jZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJMTY5Ci0jZGVmaW5lIF9fTlJfc2V0cmVzZ2lkCQkxNzAKLSNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCTE3MQotI2RlZmluZSBfX05SX3ByY3RsICAgICAgICAgICAgICAxNzIKLSNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JMTczCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCTE3NAotI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrCTE3NQotI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcJMTc2Ci0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CTE3NwotI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkxNzgKLSNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCTE3OQotI2RlZmluZSBfX05SX3ByZWFkNjQJCTE4MAotI2RlZmluZSBfX05SX3B3cml0ZTY0CQkxODEKLSNkZWZpbmUgX19OUl9jaG93bgkJMTgyCi0jZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODMKLSNkZWZpbmUgX19OUl9jYXBnZXQJCTE4NAotI2RlZmluZSBfX05SX2NhcHNldAkJMTg1Ci0jZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJMTg2Ci0jZGVmaW5lIF9fTlJfc2VuZGZpbGUJCTE4NwotI2RlZmluZSBfX05SX2dldHBtc2cJCTE4OAkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KLSNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODkJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCi0jZGVmaW5lIF9fTlJfdmZvcmsJCTE5MAotI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MQkvKiBTdVMgY29tcGxpYW50IGdldHJsaW1pdCAqLwotI2RlZmluZSBfX05SX21tYXAyCQkxOTIKLSNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKLSNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQotI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgotI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NwotI2RlZmluZSBfX05SX2xjaG93bjMyCQkxOTgKLSNkZWZpbmUgX19OUl9nZXR1aWQzMgkJMTk5Ci0jZGVmaW5lIF9fTlJfZ2V0Z2lkMzIJCTIwMAotI2RlZmluZSBfX05SX2dldGV1aWQzMgkJMjAxCi0jZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyCQkyMDIKLSNkZWZpbmUgX19OUl9zZXRyZXVpZDMyCQkyMDMKLSNkZWZpbmUgX19OUl9zZXRyZWdpZDMyCQkyMDQKLSNkZWZpbmUgX19OUl9nZXRncm91cHMzMgkyMDUKLSNkZWZpbmUgX19OUl9zZXRncm91cHMzMgkyMDYKLSNkZWZpbmUgX19OUl9mY2hvd24zMgkJMjA3Ci0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIJMjA4Ci0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIJMjA5Ci0jZGVmaW5lIF9fTlJfc2V0cmVzZ2lkMzIJMjEwCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIJMjExCi0jZGVmaW5lIF9fTlJfY2hvd24zMgkJMjEyCi0jZGVmaW5lIF9fTlJfc2V0dWlkMzIJCTIxMwotI2RlZmluZSBfX05SX3NldGdpZDMyCQkyMTQKLSNkZWZpbmUgX19OUl9zZXRmc3VpZDMyCQkyMTUKLSNkZWZpbmUgX19OUl9zZXRmc2dpZDMyCQkyMTYKLSNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMTcKLSNkZWZpbmUgX19OUl9taW5jb3JlCQkyMTgKLSNkZWZpbmUgX19OUl9tYWR2aXNlCQkyMTkKLSNkZWZpbmUgX19OUl9tYWR2aXNlMQkJMjE5CS8qIGRlbGV0ZSB3aGVuIEMgbGliIHN0dWIgaXMgcmVtb3ZlZCAqLwotI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAotI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIyMQotLyogMjIzIGlzIHVudXNlZCAqLwotI2RlZmluZSBfX05SX2dldHRpZAkJMjI0Ci0jZGVmaW5lIF9fTlJfcmVhZGFoZWFkCQkyMjUKLSNkZWZpbmUgX19OUl9zZXR4YXR0cgkJMjI2Ci0jZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkyMjcKLSNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCTIyOAotI2RlZmluZSBfX05SX2dldHhhdHRyCQkyMjkKLSNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCTIzMAotI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJMjMxCi0jZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkyMzIKLSNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkyMzMKLSNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkyMzQKLSNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkyMzUKLSNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJMjM2Ci0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCTIzNwotI2RlZmluZSBfX05SX3RraWxsCQkyMzgKLSNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMzkKLSNkZWZpbmUgX19OUl9mdXRleAkJMjQwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMjQxCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMjQyCi0jZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhCTI0MwotI2RlZmluZSBfX05SX2dldF90aHJlYWRfYXJlYQkyNDQKLSNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjQ1Ci0jZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjQ2Ci0jZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI0NwotI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ4Ci0jZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyNDkKLSNkZWZpbmUgX19OUl9mYWR2aXNlNjQJCTI1MAotLyogMjUxIGlzIGF2YWlsYWJsZSBmb3IgcmV1c2UgKHdhcyBicmllZmx5IHN5c19zZXRfem9uZV9yZWNsYWltKSAqLwotI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTI1MgotI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTI1MwotI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkyNTQKLSNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCTI1NQotI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCTI1NgotI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjU3Ci0jZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTI1OAotI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNTkKLSNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsxKQotI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzIpCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkoX19OUl90aW1lcl9jcmVhdGUrMykKLSNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJKF9fTlJfdGltZXJfY3JlYXRlKzQpCi0jZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNSkKLSNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSs2KQotI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkoX19OUl90aW1lcl9jcmVhdGUrNykKLSNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJKF9fTlJfdGltZXJfY3JlYXRlKzgpCi0jZGVmaW5lIF9fTlJfc3RhdGZzNjQJCTI2OAotI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJMjY5Ci0jZGVmaW5lIF9fTlJfdGdraWxsCQkyNzAKLSNkZWZpbmUgX19OUl91dGltZXMJCTI3MQotI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkyNzIKLSNkZWZpbmUgX19OUl92c2VydmVyCQkyNzMKLSNkZWZpbmUgX19OUl9tYmluZAkJMjc0Ci0jZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkyNzUKLSNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTI3NgotI2RlZmluZSBfX05SX21xX29wZW4gCQkyNzcKLSNkZWZpbmUgX19OUl9tcV91bmxpbmsJCShfX05SX21xX29wZW4rMSkKLSNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJKF9fTlJfbXFfb3BlbisyKQotI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCi0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCi0jZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCi0jZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKLS8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KLSNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKLSNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODcKLSNkZWZpbmUgX19OUl9rZXljdGwJCTI4OAotI2RlZmluZSBfX05SX2lvcHJpb19zZXQJCTI4OQotI2RlZmluZSBfX05SX2lvcHJpb19nZXQJCTI5MAotI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdAkyOTEKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaAkyOTIKLSNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoCTI5MwotI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJMjk0Ci0jZGVmaW5lIF9fTlJfb3BlbmF0CQkyOTUKLSNkZWZpbmUgX19OUl9ta2RpcmF0CQkyOTYKLSNkZWZpbmUgX19OUl9ta25vZGF0CQkyOTcKLSNkZWZpbmUgX19OUl9mY2hvd25hdAkJMjk4Ci0jZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkyOTkKLSNkZWZpbmUgX19OUl9mc3RhdGF0NjQJCTMwMAotI2RlZmluZSBfX05SX3VubGlua2F0CQkzMDEKLSNkZWZpbmUgX19OUl9yZW5hbWVhdAkJMzAyCi0jZGVmaW5lIF9fTlJfbGlua2F0CQkzMDMKLSNkZWZpbmUgX19OUl9zeW1saW5rYXQJCTMwNAotI2RlZmluZSBfX05SX3JlYWRsaW5rYXQJCTMwNQotI2RlZmluZSBfX05SX2ZjaG1vZGF0CQkzMDYKLSNkZWZpbmUgX19OUl9mYWNjZXNzYXQJCTMwNwotI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkzMDgKLSNkZWZpbmUgX19OUl9wcG9sbAkJMzA5Ci0jZGVmaW5lIF9fTlJfdW5zaGFyZQkJMzEwCi0jZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMxMQotI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMTIKLSNkZWZpbmUgX19OUl9zcGxpY2UJCTMxMwotI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkzMTQKLSNkZWZpbmUgX19OUl90ZWUJCTMxNQotI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkzMTYKLSNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkzMTcKLSNkZWZpbmUgX19OUl9nZXRjcHUJCTMxOAotI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CTMxOQotI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMzIwCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQJCTMyMQotI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCTMyMgotI2RlZmluZSBfX05SX2V2ZW50ZmQJCTMyMwotI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMzI0Ci0jZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCTMyNQotI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkzMjYKLSNkZWZpbmUgX19OUl9zaWduYWxmZDQJCTMyNwotI2RlZmluZSBfX05SX2V2ZW50ZmQyCQkzMjgKLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxCTMyOQotI2RlZmluZSBfX05SX2R1cDMJCTMzMAotI2RlZmluZSBfX05SX3BpcGUyCQkzMzEKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCTMzMgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKLQotLyoKLSAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKLSAqCi0gKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAotICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCi0gKi8KLSNpZm5kZWYgY29uZF9zeXNjYWxsCi0jZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIEFTTV9YODZfX1VOSVNURF8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdW5pc3RkXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvdW5pc3RkXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZTgzZjEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3VuaXN0ZF82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkzICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVU5JU1REXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fVU5JU1REXzY0X0gKLQotI2lmbmRlZiBfX1NZU0NBTEwKLSNkZWZpbmUgX19TWVNDQUxMKGEsIGIpCi0jZW5kaWYKLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KLSAqCi0gKiBOb3RlOiBob2xlcyBhcmUgbm90IGFsbG93ZWQuCi0gKi8KLQotLyogYXQgbGVhc3QgOCBzeXNjYWxsIHBlciBjYWNoZWxpbmUgKi8KLSNkZWZpbmUgX19OUl9yZWFkCQkJCTAKLV9fU1lTQ0FMTChfX05SX3JlYWQsIHN5c19yZWFkKQotI2RlZmluZSBfX05SX3dyaXRlCQkJCTEKLV9fU1lTQ0FMTChfX05SX3dyaXRlLCBzeXNfd3JpdGUpCi0jZGVmaW5lIF9fTlJfb3BlbgkJCQkyCi1fX1NZU0NBTEwoX19OUl9vcGVuLCBzeXNfb3BlbikKLSNkZWZpbmUgX19OUl9jbG9zZQkJCQkzCi1fX1NZU0NBTEwoX19OUl9jbG9zZSwgc3lzX2Nsb3NlKQotI2RlZmluZSBfX05SX3N0YXQJCQkJNAotX19TWVNDQUxMKF9fTlJfc3RhdCwgc3lzX25ld3N0YXQpCi0jZGVmaW5lIF9fTlJfZnN0YXQJCQkJNQotX19TWVNDQUxMKF9fTlJfZnN0YXQsIHN5c19uZXdmc3RhdCkKLSNkZWZpbmUgX19OUl9sc3RhdAkJCQk2Ci1fX1NZU0NBTEwoX19OUl9sc3RhdCwgc3lzX25ld2xzdGF0KQotI2RlZmluZSBfX05SX3BvbGwJCQkJNwotX19TWVNDQUxMKF9fTlJfcG9sbCwgc3lzX3BvbGwpCi0KLSNkZWZpbmUgX19OUl9sc2VlawkJCQk4Ci1fX1NZU0NBTEwoX19OUl9sc2Vlaywgc3lzX2xzZWVrKQotI2RlZmluZSBfX05SX21tYXAJCQkJOQotX19TWVNDQUxMKF9fTlJfbW1hcCwgc3lzX21tYXApCi0jZGVmaW5lIF9fTlJfbXByb3RlY3QJCQkJMTAKLV9fU1lTQ0FMTChfX05SX21wcm90ZWN0LCBzeXNfbXByb3RlY3QpCi0jZGVmaW5lIF9fTlJfbXVubWFwCQkJCTExCi1fX1NZU0NBTEwoX19OUl9tdW5tYXAsIHN5c19tdW5tYXApCi0jZGVmaW5lIF9fTlJfYnJrCQkJCTEyCi1fX1NZU0NBTEwoX19OUl9icmssIHN5c19icmspCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCQkJMTMKLV9fU1lTQ0FMTChfX05SX3J0X3NpZ2FjdGlvbiwgc3lzX3J0X3NpZ2FjdGlvbikKLSNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkJCTE0Ci1fX1NZU0NBTEwoX19OUl9ydF9zaWdwcm9jbWFzaywgc3lzX3J0X3NpZ3Byb2NtYXNrKQotI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkJCTE1Ci1fX1NZU0NBTEwoX19OUl9ydF9zaWdyZXR1cm4sIHN0dWJfcnRfc2lncmV0dXJuKQotCi0jZGVmaW5lIF9fTlJfaW9jdGwJCQkJMTYKLV9fU1lTQ0FMTChfX05SX2lvY3RsLCBzeXNfaW9jdGwpCi0jZGVmaW5lIF9fTlJfcHJlYWQ2NAkJCQkxNwotX19TWVNDQUxMKF9fTlJfcHJlYWQ2NCwgc3lzX3ByZWFkNjQpCi0jZGVmaW5lIF9fTlJfcHdyaXRlNjQJCQkJMTgKLV9fU1lTQ0FMTChfX05SX3B3cml0ZTY0LCBzeXNfcHdyaXRlNjQpCi0jZGVmaW5lIF9fTlJfcmVhZHYJCQkJMTkKLV9fU1lTQ0FMTChfX05SX3JlYWR2LCBzeXNfcmVhZHYpCi0jZGVmaW5lIF9fTlJfd3JpdGV2CQkJCTIwCi1fX1NZU0NBTEwoX19OUl93cml0ZXYsIHN5c193cml0ZXYpCi0jZGVmaW5lIF9fTlJfYWNjZXNzCQkJCTIxCi1fX1NZU0NBTEwoX19OUl9hY2Nlc3MsIHN5c19hY2Nlc3MpCi0jZGVmaW5lIF9fTlJfcGlwZQkJCQkyMgotX19TWVNDQUxMKF9fTlJfcGlwZSwgc3lzX3BpcGUpCi0jZGVmaW5lIF9fTlJfc2VsZWN0CQkJCTIzCi1fX1NZU0NBTEwoX19OUl9zZWxlY3QsIHN5c19zZWxlY3QpCi0KLSNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJCTI0Ci1fX1NZU0NBTEwoX19OUl9zY2hlZF95aWVsZCwgc3lzX3NjaGVkX3lpZWxkKQotI2RlZmluZSBfX05SX21yZW1hcAkJCQkyNQotX19TWVNDQUxMKF9fTlJfbXJlbWFwLCBzeXNfbXJlbWFwKQotI2RlZmluZSBfX05SX21zeW5jCQkJCTI2Ci1fX1NZU0NBTEwoX19OUl9tc3luYywgc3lzX21zeW5jKQotI2RlZmluZSBfX05SX21pbmNvcmUJCQkJMjcKLV9fU1lTQ0FMTChfX05SX21pbmNvcmUsIHN5c19taW5jb3JlKQotI2RlZmluZSBfX05SX21hZHZpc2UJCQkJMjgKLV9fU1lTQ0FMTChfX05SX21hZHZpc2UsIHN5c19tYWR2aXNlKQotI2RlZmluZSBfX05SX3NobWdldAkJCQkyOQotX19TWVNDQUxMKF9fTlJfc2htZ2V0LCBzeXNfc2htZ2V0KQotI2RlZmluZSBfX05SX3NobWF0CQkJCTMwCi1fX1NZU0NBTEwoX19OUl9zaG1hdCwgc3lzX3NobWF0KQotI2RlZmluZSBfX05SX3NobWN0bAkJCQkzMQotX19TWVNDQUxMKF9fTlJfc2htY3RsLCBzeXNfc2htY3RsKQotCi0jZGVmaW5lIF9fTlJfZHVwCQkJCTMyCi1fX1NZU0NBTEwoX19OUl9kdXAsIHN5c19kdXApCi0jZGVmaW5lIF9fTlJfZHVwMgkJCQkzMwotX19TWVNDQUxMKF9fTlJfZHVwMiwgc3lzX2R1cDIpCi0jZGVmaW5lIF9fTlJfcGF1c2UJCQkJMzQKLV9fU1lTQ0FMTChfX05SX3BhdXNlLCBzeXNfcGF1c2UpCi0jZGVmaW5lIF9fTlJfbmFub3NsZWVwCQkJCTM1Ci1fX1NZU0NBTEwoX19OUl9uYW5vc2xlZXAsIHN5c19uYW5vc2xlZXApCi0jZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkJCTM2Ci1fX1NZU0NBTEwoX19OUl9nZXRpdGltZXIsIHN5c19nZXRpdGltZXIpCi0jZGVmaW5lIF9fTlJfYWxhcm0JCQkJMzcKLV9fU1lTQ0FMTChfX05SX2FsYXJtLCBzeXNfYWxhcm0pCi0jZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkJCTM4Ci1fX1NZU0NBTEwoX19OUl9zZXRpdGltZXIsIHN5c19zZXRpdGltZXIpCi0jZGVmaW5lIF9fTlJfZ2V0cGlkCQkJCTM5Ci1fX1NZU0NBTEwoX19OUl9nZXRwaWQsIHN5c19nZXRwaWQpCi0KLSNkZWZpbmUgX19OUl9zZW5kZmlsZQkJCQk0MAotX19TWVNDQUxMKF9fTlJfc2VuZGZpbGUsIHN5c19zZW5kZmlsZTY0KQotI2RlZmluZSBfX05SX3NvY2tldAkJCQk0MQotX19TWVNDQUxMKF9fTlJfc29ja2V0LCBzeXNfc29ja2V0KQotI2RlZmluZSBfX05SX2Nvbm5lY3QJCQkJNDIKLV9fU1lTQ0FMTChfX05SX2Nvbm5lY3QsIHN5c19jb25uZWN0KQotI2RlZmluZSBfX05SX2FjY2VwdAkJCQk0MwotX19TWVNDQUxMKF9fTlJfYWNjZXB0LCBzeXNfYWNjZXB0KQotI2RlZmluZSBfX05SX3NlbmR0bwkJCQk0NAotX19TWVNDQUxMKF9fTlJfc2VuZHRvLCBzeXNfc2VuZHRvKQotI2RlZmluZSBfX05SX3JlY3Zmcm9tCQkJCTQ1Ci1fX1NZU0NBTEwoX19OUl9yZWN2ZnJvbSwgc3lzX3JlY3Zmcm9tKQotI2RlZmluZSBfX05SX3NlbmRtc2cJCQkJNDYKLV9fU1lTQ0FMTChfX05SX3NlbmRtc2csIHN5c19zZW5kbXNnKQotI2RlZmluZSBfX05SX3JlY3Ztc2cJCQkJNDcKLV9fU1lTQ0FMTChfX05SX3JlY3Ztc2csIHN5c19yZWN2bXNnKQotCi0jZGVmaW5lIF9fTlJfc2h1dGRvd24JCQkJNDgKLV9fU1lTQ0FMTChfX05SX3NodXRkb3duLCBzeXNfc2h1dGRvd24pCi0jZGVmaW5lIF9fTlJfYmluZAkJCQk0OQotX19TWVNDQUxMKF9fTlJfYmluZCwgc3lzX2JpbmQpCi0jZGVmaW5lIF9fTlJfbGlzdGVuCQkJCTUwCi1fX1NZU0NBTEwoX19OUl9saXN0ZW4sIHN5c19saXN0ZW4pCi0jZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUJCQk1MQotX19TWVNDQUxMKF9fTlJfZ2V0c29ja25hbWUsIHN5c19nZXRzb2NrbmFtZSkKLSNkZWZpbmUgX19OUl9nZXRwZWVybmFtZQkJCTUyCi1fX1NZU0NBTEwoX19OUl9nZXRwZWVybmFtZSwgc3lzX2dldHBlZXJuYW1lKQotI2RlZmluZSBfX05SX3NvY2tldHBhaXIJCQkJNTMKLV9fU1lTQ0FMTChfX05SX3NvY2tldHBhaXIsIHN5c19zb2NrZXRwYWlyKQotI2RlZmluZSBfX05SX3NldHNvY2tvcHQJCQkJNTQKLV9fU1lTQ0FMTChfX05SX3NldHNvY2tvcHQsIHN5c19zZXRzb2Nrb3B0KQotI2RlZmluZSBfX05SX2dldHNvY2tvcHQJCQkJNTUKLV9fU1lTQ0FMTChfX05SX2dldHNvY2tvcHQsIHN5c19nZXRzb2Nrb3B0KQotCi0jZGVmaW5lIF9fTlJfY2xvbmUJCQkJNTYKLV9fU1lTQ0FMTChfX05SX2Nsb25lLCBzdHViX2Nsb25lKQotI2RlZmluZSBfX05SX2ZvcmsJCQkJNTcKLV9fU1lTQ0FMTChfX05SX2ZvcmssIHN0dWJfZm9yaykKLSNkZWZpbmUgX19OUl92Zm9yawkJCQk1OAotX19TWVNDQUxMKF9fTlJfdmZvcmssIHN0dWJfdmZvcmspCi0jZGVmaW5lIF9fTlJfZXhlY3ZlCQkJCTU5Ci1fX1NZU0NBTEwoX19OUl9leGVjdmUsIHN0dWJfZXhlY3ZlKQotI2RlZmluZSBfX05SX2V4aXQJCQkJNjAKLV9fU1lTQ0FMTChfX05SX2V4aXQsIHN5c19leGl0KQotI2RlZmluZSBfX05SX3dhaXQ0CQkJCTYxCi1fX1NZU0NBTEwoX19OUl93YWl0NCwgc3lzX3dhaXQ0KQotI2RlZmluZSBfX05SX2tpbGwJCQkJNjIKLV9fU1lTQ0FMTChfX05SX2tpbGwsIHN5c19raWxsKQotI2RlZmluZSBfX05SX3VuYW1lCQkJCTYzCi1fX1NZU0NBTEwoX19OUl91bmFtZSwgc3lzX3VuYW1lKQotCi0jZGVmaW5lIF9fTlJfc2VtZ2V0CQkJCTY0Ci1fX1NZU0NBTEwoX19OUl9zZW1nZXQsIHN5c19zZW1nZXQpCi0jZGVmaW5lIF9fTlJfc2Vtb3AJCQkJNjUKLV9fU1lTQ0FMTChfX05SX3NlbW9wLCBzeXNfc2Vtb3ApCi0jZGVmaW5lIF9fTlJfc2VtY3RsCQkJCTY2Ci1fX1NZU0NBTEwoX19OUl9zZW1jdGwsIHN5c19zZW1jdGwpCi0jZGVmaW5lIF9fTlJfc2htZHQJCQkJNjcKLV9fU1lTQ0FMTChfX05SX3NobWR0LCBzeXNfc2htZHQpCi0jZGVmaW5lIF9fTlJfbXNnZ2V0CQkJCTY4Ci1fX1NZU0NBTEwoX19OUl9tc2dnZXQsIHN5c19tc2dnZXQpCi0jZGVmaW5lIF9fTlJfbXNnc25kCQkJCTY5Ci1fX1NZU0NBTEwoX19OUl9tc2dzbmQsIHN5c19tc2dzbmQpCi0jZGVmaW5lIF9fTlJfbXNncmN2CQkJCTcwCi1fX1NZU0NBTEwoX19OUl9tc2dyY3YsIHN5c19tc2dyY3YpCi0jZGVmaW5lIF9fTlJfbXNnY3RsCQkJCTcxCi1fX1NZU0NBTEwoX19OUl9tc2djdGwsIHN5c19tc2djdGwpCi0KLSNkZWZpbmUgX19OUl9mY250bAkJCQk3MgotX19TWVNDQUxMKF9fTlJfZmNudGwsIHN5c19mY250bCkKLSNkZWZpbmUgX19OUl9mbG9jawkJCQk3MwotX19TWVNDQUxMKF9fTlJfZmxvY2ssIHN5c19mbG9jaykKLSNkZWZpbmUgX19OUl9mc3luYwkJCQk3NAotX19TWVNDQUxMKF9fTlJfZnN5bmMsIHN5c19mc3luYykKLSNkZWZpbmUgX19OUl9mZGF0YXN5bmMJCQkJNzUKLV9fU1lTQ0FMTChfX05SX2ZkYXRhc3luYywgc3lzX2ZkYXRhc3luYykKLSNkZWZpbmUgX19OUl90cnVuY2F0ZQkJCQk3NgotX19TWVNDQUxMKF9fTlJfdHJ1bmNhdGUsIHN5c190cnVuY2F0ZSkKLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGUJCQkJNzcKLV9fU1lTQ0FMTChfX05SX2Z0cnVuY2F0ZSwgc3lzX2Z0cnVuY2F0ZSkKLSNkZWZpbmUgX19OUl9nZXRkZW50cwkJCQk3OAotX19TWVNDQUxMKF9fTlJfZ2V0ZGVudHMsIHN5c19nZXRkZW50cykKLSNkZWZpbmUgX19OUl9nZXRjd2QJCQkJNzkKLV9fU1lTQ0FMTChfX05SX2dldGN3ZCwgc3lzX2dldGN3ZCkKLQotI2RlZmluZSBfX05SX2NoZGlyCQkJCTgwCi1fX1NZU0NBTEwoX19OUl9jaGRpciwgc3lzX2NoZGlyKQotI2RlZmluZSBfX05SX2ZjaGRpcgkJCQk4MQotX19TWVNDQUxMKF9fTlJfZmNoZGlyLCBzeXNfZmNoZGlyKQotI2RlZmluZSBfX05SX3JlbmFtZQkJCQk4MgotX19TWVNDQUxMKF9fTlJfcmVuYW1lLCBzeXNfcmVuYW1lKQotI2RlZmluZSBfX05SX21rZGlyCQkJCTgzCi1fX1NZU0NBTEwoX19OUl9ta2Rpciwgc3lzX21rZGlyKQotI2RlZmluZSBfX05SX3JtZGlyCQkJCTg0Ci1fX1NZU0NBTEwoX19OUl9ybWRpciwgc3lzX3JtZGlyKQotI2RlZmluZSBfX05SX2NyZWF0CQkJCTg1Ci1fX1NZU0NBTEwoX19OUl9jcmVhdCwgc3lzX2NyZWF0KQotI2RlZmluZSBfX05SX2xpbmsJCQkJODYKLV9fU1lTQ0FMTChfX05SX2xpbmssIHN5c19saW5rKQotI2RlZmluZSBfX05SX3VubGluawkJCQk4NwotX19TWVNDQUxMKF9fTlJfdW5saW5rLCBzeXNfdW5saW5rKQotCi0jZGVmaW5lIF9fTlJfc3ltbGluawkJCQk4OAotX19TWVNDQUxMKF9fTlJfc3ltbGluaywgc3lzX3N5bWxpbmspCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmsJCQkJODkKLV9fU1lTQ0FMTChfX05SX3JlYWRsaW5rLCBzeXNfcmVhZGxpbmspCi0jZGVmaW5lIF9fTlJfY2htb2QJCQkJOTAKLV9fU1lTQ0FMTChfX05SX2NobW9kLCBzeXNfY2htb2QpCi0jZGVmaW5lIF9fTlJfZmNobW9kCQkJCTkxCi1fX1NZU0NBTEwoX19OUl9mY2htb2QsIHN5c19mY2htb2QpCi0jZGVmaW5lIF9fTlJfY2hvd24JCQkJOTIKLV9fU1lTQ0FMTChfX05SX2Nob3duLCBzeXNfY2hvd24pCi0jZGVmaW5lIF9fTlJfZmNob3duCQkJCTkzCi1fX1NZU0NBTEwoX19OUl9mY2hvd24sIHN5c19mY2hvd24pCi0jZGVmaW5lIF9fTlJfbGNob3duCQkJCTk0Ci1fX1NZU0NBTEwoX19OUl9sY2hvd24sIHN5c19sY2hvd24pCi0jZGVmaW5lIF9fTlJfdW1hc2sJCQkJOTUKLV9fU1lTQ0FMTChfX05SX3VtYXNrLCBzeXNfdW1hc2spCi0KLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJCQk5NgotX19TWVNDQUxMKF9fTlJfZ2V0dGltZW9mZGF5LCBzeXNfZ2V0dGltZW9mZGF5KQotI2RlZmluZSBfX05SX2dldHJsaW1pdAkJCQk5NwotX19TWVNDQUxMKF9fTlJfZ2V0cmxpbWl0LCBzeXNfZ2V0cmxpbWl0KQotI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJCQk5OAotX19TWVNDQUxMKF9fTlJfZ2V0cnVzYWdlLCBzeXNfZ2V0cnVzYWdlKQotI2RlZmluZSBfX05SX3N5c2luZm8JCQkJOTkKLV9fU1lTQ0FMTChfX05SX3N5c2luZm8sIHN5c19zeXNpbmZvKQotI2RlZmluZSBfX05SX3RpbWVzCQkJCTEwMAotX19TWVNDQUxMKF9fTlJfdGltZXMsIHN5c190aW1lcykKLSNkZWZpbmUgX19OUl9wdHJhY2UJCQkJMTAxCi1fX1NZU0NBTEwoX19OUl9wdHJhY2UsIHN5c19wdHJhY2UpCi0jZGVmaW5lIF9fTlJfZ2V0dWlkCQkJCTEwMgotX19TWVNDQUxMKF9fTlJfZ2V0dWlkLCBzeXNfZ2V0dWlkKQotI2RlZmluZSBfX05SX3N5c2xvZwkJCQkxMDMKLV9fU1lTQ0FMTChfX05SX3N5c2xvZywgc3lzX3N5c2xvZykKLQotLyogYXQgdGhlIHZlcnkgZW5kIHRoZSBzdHVmZiB0aGF0IG5ldmVyIHJ1bnMgZHVyaW5nIHRoZSBiZW5jaG1hcmtzICovCi0jZGVmaW5lIF9fTlJfZ2V0Z2lkCQkJCTEwNAotX19TWVNDQUxMKF9fTlJfZ2V0Z2lkLCBzeXNfZ2V0Z2lkKQotI2RlZmluZSBfX05SX3NldHVpZAkJCQkxMDUKLV9fU1lTQ0FMTChfX05SX3NldHVpZCwgc3lzX3NldHVpZCkKLSNkZWZpbmUgX19OUl9zZXRnaWQJCQkJMTA2Ci1fX1NZU0NBTEwoX19OUl9zZXRnaWQsIHN5c19zZXRnaWQpCi0jZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJCQkxMDcKLV9fU1lTQ0FMTChfX05SX2dldGV1aWQsIHN5c19nZXRldWlkKQotI2RlZmluZSBfX05SX2dldGVnaWQJCQkJMTA4Ci1fX1NZU0NBTEwoX19OUl9nZXRlZ2lkLCBzeXNfZ2V0ZWdpZCkKLSNkZWZpbmUgX19OUl9zZXRwZ2lkCQkJCTEwOQotX19TWVNDQUxMKF9fTlJfc2V0cGdpZCwgc3lzX3NldHBnaWQpCi0jZGVmaW5lIF9fTlJfZ2V0cHBpZAkJCQkxMTAKLV9fU1lTQ0FMTChfX05SX2dldHBwaWQsIHN5c19nZXRwcGlkKQotI2RlZmluZSBfX05SX2dldHBncnAJCQkJMTExCi1fX1NZU0NBTEwoX19OUl9nZXRwZ3JwLCBzeXNfZ2V0cGdycCkKLQotI2RlZmluZSBfX05SX3NldHNpZAkJCQkxMTIKLV9fU1lTQ0FMTChfX05SX3NldHNpZCwgc3lzX3NldHNpZCkKLSNkZWZpbmUgX19OUl9zZXRyZXVpZAkJCQkxMTMKLV9fU1lTQ0FMTChfX05SX3NldHJldWlkLCBzeXNfc2V0cmV1aWQpCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQJCQkJMTE0Ci1fX1NZU0NBTEwoX19OUl9zZXRyZWdpZCwgc3lzX3NldHJlZ2lkKQotI2RlZmluZSBfX05SX2dldGdyb3VwcwkJCQkxMTUKLV9fU1lTQ0FMTChfX05SX2dldGdyb3Vwcywgc3lzX2dldGdyb3VwcykKLSNkZWZpbmUgX19OUl9zZXRncm91cHMJCQkJMTE2Ci1fX1NZU0NBTEwoX19OUl9zZXRncm91cHMsIHN5c19zZXRncm91cHMpCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkJCTExNwotX19TWVNDQUxMKF9fTlJfc2V0cmVzdWlkLCBzeXNfc2V0cmVzdWlkKQotI2RlZmluZSBfX05SX2dldHJlc3VpZAkJCQkxMTgKLV9fU1lTQ0FMTChfX05SX2dldHJlc3VpZCwgc3lzX2dldHJlc3VpZCkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCQkJMTE5Ci1fX1NZU0NBTEwoX19OUl9zZXRyZXNnaWQsIHN5c19zZXRyZXNnaWQpCi0KLSNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCQkJMTIwCi1fX1NZU0NBTEwoX19OUl9nZXRyZXNnaWQsIHN5c19nZXRyZXNnaWQpCi0jZGVmaW5lIF9fTlJfZ2V0cGdpZAkJCQkxMjEKLV9fU1lTQ0FMTChfX05SX2dldHBnaWQsIHN5c19nZXRwZ2lkKQotI2RlZmluZSBfX05SX3NldGZzdWlkCQkJCTEyMgotX19TWVNDQUxMKF9fTlJfc2V0ZnN1aWQsIHN5c19zZXRmc3VpZCkKLSNkZWZpbmUgX19OUl9zZXRmc2dpZAkJCQkxMjMKLV9fU1lTQ0FMTChfX05SX3NldGZzZ2lkLCBzeXNfc2V0ZnNnaWQpCi0jZGVmaW5lIF9fTlJfZ2V0c2lkCQkJCTEyNAotX19TWVNDQUxMKF9fTlJfZ2V0c2lkLCBzeXNfZ2V0c2lkKQotI2RlZmluZSBfX05SX2NhcGdldAkJCQkxMjUKLV9fU1lTQ0FMTChfX05SX2NhcGdldCwgc3lzX2NhcGdldCkKLSNkZWZpbmUgX19OUl9jYXBzZXQJCQkJMTI2Ci1fX1NZU0NBTEwoX19OUl9jYXBzZXQsIHN5c19jYXBzZXQpCi0KLSNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCQkJMTI3Ci1fX1NZU0NBTEwoX19OUl9ydF9zaWdwZW5kaW5nLCBzeXNfcnRfc2lncGVuZGluZykKLSNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJCQkxMjgKLV9fU1lTQ0FMTChfX05SX3J0X3NpZ3RpbWVkd2FpdCwgc3lzX3J0X3NpZ3RpbWVkd2FpdCkKLSNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JCQkxMjkKLV9fU1lTQ0FMTChfX05SX3J0X3NpZ3F1ZXVlaW5mbywgc3lzX3J0X3NpZ3F1ZXVlaW5mbykKLSNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCQkJMTMwCi1fX1NZU0NBTEwoX19OUl9ydF9zaWdzdXNwZW5kLCBzeXNfcnRfc2lnc3VzcGVuZCkKLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkJCTEzMQotX19TWVNDQUxMKF9fTlJfc2lnYWx0c3RhY2ssIHN0dWJfc2lnYWx0c3RhY2spCi0jZGVmaW5lIF9fTlJfdXRpbWUJCQkJMTMyCi1fX1NZU0NBTEwoX19OUl91dGltZSwgc3lzX3V0aW1lKQotI2RlZmluZSBfX05SX21rbm9kCQkJCTEzMwotX19TWVNDQUxMKF9fTlJfbWtub2QsIHN5c19ta25vZCkKLQotLyogT25seSBuZWVkZWQgZm9yIGEub3V0ICovCi0jZGVmaW5lIF9fTlJfdXNlbGliCQkJCTEzNAotX19TWVNDQUxMKF9fTlJfdXNlbGliLCBzeXNfbmlfc3lzY2FsbCkKLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkJCTEzNQotX19TWVNDQUxMKF9fTlJfcGVyc29uYWxpdHksIHN5c19wZXJzb25hbGl0eSkKLQotI2RlZmluZSBfX05SX3VzdGF0CQkJCTEzNgotX19TWVNDQUxMKF9fTlJfdXN0YXQsIHN5c191c3RhdCkKLSNkZWZpbmUgX19OUl9zdGF0ZnMJCQkJMTM3Ci1fX1NZU0NBTEwoX19OUl9zdGF0ZnMsIHN5c19zdGF0ZnMpCi0jZGVmaW5lIF9fTlJfZnN0YXRmcwkJCQkxMzgKLV9fU1lTQ0FMTChfX05SX2ZzdGF0ZnMsIHN5c19mc3RhdGZzKQotI2RlZmluZSBfX05SX3N5c2ZzCQkJCTEzOQotX19TWVNDQUxMKF9fTlJfc3lzZnMsIHN5c19zeXNmcykKLQotI2RlZmluZSBfX05SX2dldHByaW9yaXR5CQkJMTQwCi1fX1NZU0NBTEwoX19OUl9nZXRwcmlvcml0eSwgc3lzX2dldHByaW9yaXR5KQotI2RlZmluZSBfX05SX3NldHByaW9yaXR5CQkJMTQxCi1fX1NZU0NBTEwoX19OUl9zZXRwcmlvcml0eSwgc3lzX3NldHByaW9yaXR5KQotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkJMTQyCi1fX1NZU0NBTEwoX19OUl9zY2hlZF9zZXRwYXJhbSwgc3lzX3NjaGVkX3NldHBhcmFtKQotI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtCQkJMTQzCi1fX1NZU0NBTEwoX19OUl9zY2hlZF9nZXRwYXJhbSwgc3lzX3NjaGVkX2dldHBhcmFtKQotI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJCTE0NAotX19TWVNDQUxMKF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyKQotI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgkJCTE0NQotX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyKQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgJCTE0NgotX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgkJMTQ3Ci1fX1NZU0NBTEwoX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLCBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKLSNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJCTE0OAotX19TWVNDQUxMKF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsKQotCi0jZGVmaW5lIF9fTlJfbWxvY2sJCQkJMTQ5Ci1fX1NZU0NBTEwoX19OUl9tbG9jaywgc3lzX21sb2NrKQotI2RlZmluZSBfX05SX211bmxvY2sJCQkJMTUwCi1fX1NZU0NBTEwoX19OUl9tdW5sb2NrLCBzeXNfbXVubG9jaykKLSNkZWZpbmUgX19OUl9tbG9ja2FsbAkJCQkxNTEKLV9fU1lTQ0FMTChfX05SX21sb2NrYWxsLCBzeXNfbWxvY2thbGwpCi0jZGVmaW5lIF9fTlJfbXVubG9ja2FsbAkJCQkxNTIKLV9fU1lTQ0FMTChfX05SX211bmxvY2thbGwsIHN5c19tdW5sb2NrYWxsKQotCi0jZGVmaW5lIF9fTlJfdmhhbmd1cAkJCQkxNTMKLV9fU1lTQ0FMTChfX05SX3ZoYW5ndXAsIHN5c192aGFuZ3VwKQotCi0jZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdAkJCQkxNTQKLV9fU1lTQ0FMTChfX05SX21vZGlmeV9sZHQsIHN5c19tb2RpZnlfbGR0KQotCi0jZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJCQkxNTUKLV9fU1lTQ0FMTChfX05SX3Bpdm90X3Jvb3QsIHN5c19waXZvdF9yb290KQotCi0jZGVmaW5lIF9fTlJfX3N5c2N0bAkJCQkxNTYKLV9fU1lTQ0FMTChfX05SX19zeXNjdGwsIHN5c19zeXNjdGwpCi0KLSNkZWZpbmUgX19OUl9wcmN0bAkJCQkxNTcKLV9fU1lTQ0FMTChfX05SX3ByY3RsLCBzeXNfcHJjdGwpCi0jZGVmaW5lIF9fTlJfYXJjaF9wcmN0bAkJCQkxNTgKLV9fU1lTQ0FMTChfX05SX2FyY2hfcHJjdGwsIHN5c19hcmNoX3ByY3RsKQotCi0jZGVmaW5lIF9fTlJfYWRqdGltZXgJCQkJMTU5Ci1fX1NZU0NBTEwoX19OUl9hZGp0aW1leCwgc3lzX2FkanRpbWV4KQotCi0jZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkJCTE2MAotX19TWVNDQUxMKF9fTlJfc2V0cmxpbWl0LCBzeXNfc2V0cmxpbWl0KQotCi0jZGVmaW5lIF9fTlJfY2hyb290CQkJCTE2MQotX19TWVNDQUxMKF9fTlJfY2hyb290LCBzeXNfY2hyb290KQotCi0jZGVmaW5lIF9fTlJfc3luYwkJCQkxNjIKLV9fU1lTQ0FMTChfX05SX3N5bmMsIHN5c19zeW5jKQotCi0jZGVmaW5lIF9fTlJfYWNjdAkJCQkxNjMKLV9fU1lTQ0FMTChfX05SX2FjY3QsIHN5c19hY2N0KQotCi0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CQkJMTY0Ci1fX1NZU0NBTEwoX19OUl9zZXR0aW1lb2ZkYXksIHN5c19zZXR0aW1lb2ZkYXkpCi0KLSNkZWZpbmUgX19OUl9tb3VudAkJCQkxNjUKLV9fU1lTQ0FMTChfX05SX21vdW50LCBzeXNfbW91bnQpCi0jZGVmaW5lIF9fTlJfdW1vdW50MgkJCQkxNjYKLV9fU1lTQ0FMTChfX05SX3Vtb3VudDIsIHN5c191bW91bnQpCi0KLSNkZWZpbmUgX19OUl9zd2Fwb24JCQkJMTY3Ci1fX1NZU0NBTEwoX19OUl9zd2Fwb24sIHN5c19zd2Fwb24pCi0jZGVmaW5lIF9fTlJfc3dhcG9mZgkJCQkxNjgKLV9fU1lTQ0FMTChfX05SX3N3YXBvZmYsIHN5c19zd2Fwb2ZmKQotCi0jZGVmaW5lIF9fTlJfcmVib290CQkJCTE2OQotX19TWVNDQUxMKF9fTlJfcmVib290LCBzeXNfcmVib290KQotCi0jZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJCQkxNzAKLV9fU1lTQ0FMTChfX05SX3NldGhvc3RuYW1lLCBzeXNfc2V0aG9zdG5hbWUpCi0jZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkJCTE3MQotX19TWVNDQUxMKF9fTlJfc2V0ZG9tYWlubmFtZSwgc3lzX3NldGRvbWFpbm5hbWUpCi0KLSNkZWZpbmUgX19OUl9pb3BsCQkJCTE3MgotX19TWVNDQUxMKF9fTlJfaW9wbCwgc3R1Yl9pb3BsKQotI2RlZmluZSBfX05SX2lvcGVybQkJCQkxNzMKLV9fU1lTQ0FMTChfX05SX2lvcGVybSwgc3lzX2lvcGVybSkKLQotI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJCQkxNzQKLV9fU1lTQ0FMTChfX05SX2NyZWF0ZV9tb2R1bGUsIHN5c19uaV9zeXNjYWxsKQotI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCQkJMTc1Ci1fX1NZU0NBTEwoX19OUl9pbml0X21vZHVsZSwgc3lzX2luaXRfbW9kdWxlKQotI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJCQkxNzYKLV9fU1lTQ0FMTChfX05SX2RlbGV0ZV9tb2R1bGUsIHN5c19kZWxldGVfbW9kdWxlKQotI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkJCTE3NwotX19TWVNDQUxMKF9fTlJfZ2V0X2tlcm5lbF9zeW1zLCBzeXNfbmlfc3lzY2FsbCkKLSNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJCQkxNzgKLV9fU1lTQ0FMTChfX05SX3F1ZXJ5X21vZHVsZSwgc3lzX25pX3N5c2NhbGwpCi0KLSNkZWZpbmUgX19OUl9xdW90YWN0bAkJCQkxNzkKLV9fU1lTQ0FMTChfX05SX3F1b3RhY3RsLCBzeXNfcXVvdGFjdGwpCi0KLSNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkJCTE4MAotX19TWVNDQUxMKF9fTlJfbmZzc2VydmN0bCwgc3lzX25mc3NlcnZjdGwpCi0KLS8qIHJlc2VydmVkIGZvciBMaVMvU1RSRUFNUyAqLwotI2RlZmluZSBfX05SX2dldHBtc2cJCQkJMTgxCi1fX1NZU0NBTEwoX19OUl9nZXRwbXNnLCBzeXNfbmlfc3lzY2FsbCkKLSNkZWZpbmUgX19OUl9wdXRwbXNnCQkJCTE4MgotX19TWVNDQUxMKF9fTlJfcHV0cG1zZywgc3lzX25pX3N5c2NhbGwpCi0KLS8qIHJlc2VydmVkIGZvciBBRlMgKi8KLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkJCTE4MwotX19TWVNDQUxMKF9fTlJfYWZzX3N5c2NhbGwsIHN5c19uaV9zeXNjYWxsKQotCi0vKiByZXNlcnZlZCBmb3IgdHV4ICovCi0jZGVmaW5lIF9fTlJfdHV4Y2FsbAkJCQkxODQKLV9fU1lTQ0FMTChfX05SX3R1eGNhbGwsIHN5c19uaV9zeXNjYWxsKQotCi0jZGVmaW5lIF9fTlJfc2VjdXJpdHkJCQkJMTg1Ci1fX1NZU0NBTEwoX19OUl9zZWN1cml0eSwgc3lzX25pX3N5c2NhbGwpCi0KLSNkZWZpbmUgX19OUl9nZXR0aWQJCQkJMTg2Ci1fX1NZU0NBTEwoX19OUl9nZXR0aWQsIHN5c19nZXR0aWQpCi0KLSNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCQkJMTg3Ci1fX1NZU0NBTEwoX19OUl9yZWFkYWhlYWQsIHN5c19yZWFkYWhlYWQpCi0jZGVmaW5lIF9fTlJfc2V0eGF0dHIJCQkJMTg4Ci1fX1NZU0NBTEwoX19OUl9zZXR4YXR0ciwgc3lzX3NldHhhdHRyKQotI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJCQkxODkKLV9fU1lTQ0FMTChfX05SX2xzZXR4YXR0ciwgc3lzX2xzZXR4YXR0cikKLSNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCQkJMTkwCi1fX1NZU0NBTEwoX19OUl9mc2V0eGF0dHIsIHN5c19mc2V0eGF0dHIpCi0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCQkJMTkxCi1fX1NZU0NBTEwoX19OUl9nZXR4YXR0ciwgc3lzX2dldHhhdHRyKQotI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJCQkxOTIKLV9fU1lTQ0FMTChfX05SX2xnZXR4YXR0ciwgc3lzX2xnZXR4YXR0cikKLSNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCQkJMTkzCi1fX1NZU0NBTEwoX19OUl9mZ2V0eGF0dHIsIHN5c19mZ2V0eGF0dHIpCi0jZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkJCTE5NAotX19TWVNDQUxMKF9fTlJfbGlzdHhhdHRyLCBzeXNfbGlzdHhhdHRyKQotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCQkJMTk1Ci1fX1NZU0NBTEwoX19OUl9sbGlzdHhhdHRyLCBzeXNfbGxpc3R4YXR0cikKLSNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkJCTE5NgotX19TWVNDQUxMKF9fTlJfZmxpc3R4YXR0ciwgc3lzX2ZsaXN0eGF0dHIpCi0jZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJCQkxOTcKLV9fU1lTQ0FMTChfX05SX3JlbW92ZXhhdHRyLCBzeXNfcmVtb3ZleGF0dHIpCi0jZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCQkJMTk4Ci1fX1NZU0NBTEwoX19OUl9scmVtb3ZleGF0dHIsIHN5c19scmVtb3ZleGF0dHIpCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCQkJMTk5Ci1fX1NZU0NBTEwoX19OUl9mcmVtb3ZleGF0dHIsIHN5c19mcmVtb3ZleGF0dHIpCi0jZGVmaW5lIF9fTlJfdGtpbGwJCQkJMjAwCi1fX1NZU0NBTEwoX19OUl90a2lsbCwgc3lzX3RraWxsKQotI2RlZmluZSBfX05SX3RpbWUJCQkJMjAxCi1fX1NZU0NBTEwoX19OUl90aW1lLCBzeXNfdGltZSkKLSNkZWZpbmUgX19OUl9mdXRleAkJCQkyMDIKLV9fU1lTQ0FMTChfX05SX2Z1dGV4LCBzeXNfZnV0ZXgpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJCQkyMDMKLV9fU1lTQ0FMTChfX05SX3NjaGVkX3NldGFmZmluaXR5LCBzeXNfc2NoZWRfc2V0YWZmaW5pdHkpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJCQkyMDQKLV9fU1lTQ0FMTChfX05SX3NjaGVkX2dldGFmZmluaXR5LCBzeXNfc2NoZWRfZ2V0YWZmaW5pdHkpCi0jZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhCQkJMjA1Ci1fX1NZU0NBTEwoX19OUl9zZXRfdGhyZWFkX2FyZWEsIHN5c19uaV9zeXNjYWxsKQkvKiB1c2UgYXJjaF9wcmN0bCAqLwotI2RlZmluZSBfX05SX2lvX3NldHVwCQkJCTIwNgotX19TWVNDQUxMKF9fTlJfaW9fc2V0dXAsIHN5c19pb19zZXR1cCkKLSNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJCTIwNwotX19TWVNDQUxMKF9fTlJfaW9fZGVzdHJveSwgc3lzX2lvX2Rlc3Ryb3kpCi0jZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkJMjA4Ci1fX1NZU0NBTEwoX19OUl9pb19nZXRldmVudHMsIHN5c19pb19nZXRldmVudHMpCi0jZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJCTIwOQotX19TWVNDQUxMKF9fTlJfaW9fc3VibWl0LCBzeXNfaW9fc3VibWl0KQotI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCQkyMTAKLV9fU1lTQ0FMTChfX05SX2lvX2NhbmNlbCwgc3lzX2lvX2NhbmNlbCkKLSNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJCQkyMTEKLV9fU1lTQ0FMTChfX05SX2dldF90aHJlYWRfYXJlYSwgc3lzX25pX3N5c2NhbGwpCS8qIHVzZSBhcmNoX3ByY3RsICovCi0jZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUJCQkyMTIKLV9fU1lTQ0FMTChfX05SX2xvb2t1cF9kY29va2llLCBzeXNfbG9va3VwX2Rjb29raWUpCi0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCQkJMjEzCi1fX1NZU0NBTEwoX19OUl9lcG9sbF9jcmVhdGUsIHN5c19lcG9sbF9jcmVhdGUpCi0jZGVmaW5lIF9fTlJfZXBvbGxfY3RsX29sZAkJCTIxNAotX19TWVNDQUxMKF9fTlJfZXBvbGxfY3RsX29sZCwgc3lzX25pX3N5c2NhbGwpCi0jZGVmaW5lIF9fTlJfZXBvbGxfd2FpdF9vbGQJCQkyMTUKLV9fU1lTQ0FMTChfX05SX2Vwb2xsX3dhaXRfb2xkLCBzeXNfbmlfc3lzY2FsbCkKLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCQkJMjE2Ci1fX1NZU0NBTEwoX19OUl9yZW1hcF9maWxlX3BhZ2VzLCBzeXNfcmVtYXBfZmlsZV9wYWdlcykKLSNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkJCTIxNwotX19TWVNDQUxMKF9fTlJfZ2V0ZGVudHM2NCwgc3lzX2dldGRlbnRzNjQpCi0jZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCQkJMjE4Ci1fX1NZU0NBTEwoX19OUl9zZXRfdGlkX2FkZHJlc3MsIHN5c19zZXRfdGlkX2FkZHJlc3MpCi0jZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsCQkJMjE5Ci1fX1NZU0NBTEwoX19OUl9yZXN0YXJ0X3N5c2NhbGwsIHN5c19yZXN0YXJ0X3N5c2NhbGwpCi0jZGVmaW5lIF9fTlJfc2VtdGltZWRvcAkJCQkyMjAKLV9fU1lTQ0FMTChfX05SX3NlbXRpbWVkb3AsIHN5c19zZW10aW1lZG9wKQotI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJCQkyMjEKLV9fU1lTQ0FMTChfX05SX2ZhZHZpc2U2NCwgc3lzX2ZhZHZpc2U2NCkKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJCQkyMjIKLV9fU1lTQ0FMTChfX05SX3RpbWVyX2NyZWF0ZSwgc3lzX3RpbWVyX2NyZWF0ZSkKLSNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCQkJMjIzCi1fX1NZU0NBTEwoX19OUl90aW1lcl9zZXR0aW1lLCBzeXNfdGltZXJfc2V0dGltZSkKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCQkJMjI0Ci1fX1NZU0NBTEwoX19OUl90aW1lcl9nZXR0aW1lLCBzeXNfdGltZXJfZ2V0dGltZSkKLSNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCQkJMjI1Ci1fX1NZU0NBTEwoX19OUl90aW1lcl9nZXRvdmVycnVuLCBzeXNfdGltZXJfZ2V0b3ZlcnJ1bikKLSNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJCQkyMjYKLV9fU1lTQ0FMTChfX05SX3RpbWVyX2RlbGV0ZSwgc3lzX3RpbWVyX2RlbGV0ZSkKLSNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCQkJMjI3Ci1fX1NZU0NBTEwoX19OUl9jbG9ja19zZXR0aW1lLCBzeXNfY2xvY2tfc2V0dGltZSkKLSNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCQkJMjI4Ci1fX1NZU0NBTEwoX19OUl9jbG9ja19nZXR0aW1lLCBzeXNfY2xvY2tfZ2V0dGltZSkKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJCQkyMjkKLV9fU1lTQ0FMTChfX05SX2Nsb2NrX2dldHJlcywgc3lzX2Nsb2NrX2dldHJlcykKLSNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJCQkyMzAKLV9fU1lTQ0FMTChfX05SX2Nsb2NrX25hbm9zbGVlcCwgc3lzX2Nsb2NrX25hbm9zbGVlcCkKLSNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkJCTIzMQotX19TWVNDQUxMKF9fTlJfZXhpdF9ncm91cCwgc3lzX2V4aXRfZ3JvdXApCi0jZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJCQkyMzIKLV9fU1lTQ0FMTChfX05SX2Vwb2xsX3dhaXQsIHN5c19lcG9sbF93YWl0KQotI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJCQkyMzMKLV9fU1lTQ0FMTChfX05SX2Vwb2xsX2N0bCwgc3lzX2Vwb2xsX2N0bCkKLSNkZWZpbmUgX19OUl90Z2tpbGwJCQkJMjM0Ci1fX1NZU0NBTEwoX19OUl90Z2tpbGwsIHN5c190Z2tpbGwpCi0jZGVmaW5lIF9fTlJfdXRpbWVzCQkJCTIzNQotX19TWVNDQUxMKF9fTlJfdXRpbWVzLCBzeXNfdXRpbWVzKQotI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCQkJMjM2Ci1fX1NZU0NBTEwoX19OUl92c2VydmVyLCBzeXNfbmlfc3lzY2FsbCkKLSNkZWZpbmUgX19OUl9tYmluZAkJCQkyMzcKLV9fU1lTQ0FMTChfX05SX21iaW5kLCBzeXNfbWJpbmQpCi0jZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkJCTIzOAotX19TWVNDQUxMKF9fTlJfc2V0X21lbXBvbGljeSwgc3lzX3NldF9tZW1wb2xpY3kpCi0jZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkJCTIzOQotX19TWVNDQUxMKF9fTlJfZ2V0X21lbXBvbGljeSwgc3lzX2dldF9tZW1wb2xpY3kpCi0jZGVmaW5lIF9fTlJfbXFfb3BlbgkJCQkyNDAKLV9fU1lTQ0FMTChfX05SX21xX29wZW4sIHN5c19tcV9vcGVuKQotI2RlZmluZSBfX05SX21xX3VubGluawkJCQkyNDEKLV9fU1lTQ0FMTChfX05SX21xX3VubGluaywgc3lzX21xX3VubGluaykKLSNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJCQkyNDIKLV9fU1lTQ0FMTChfX05SX21xX3RpbWVkc2VuZCwgc3lzX21xX3RpbWVkc2VuZCkKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJCQkyNDMKLV9fU1lTQ0FMTChfX05SX21xX3RpbWVkcmVjZWl2ZSwgc3lzX21xX3RpbWVkcmVjZWl2ZSkKLSNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCQkJMjQ0Ci1fX1NZU0NBTEwoX19OUl9tcV9ub3RpZnksIHN5c19tcV9ub3RpZnkpCi0jZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkJCTI0NQotX19TWVNDQUxMKF9fTlJfbXFfZ2V0c2V0YXR0ciwgc3lzX21xX2dldHNldGF0dHIpCi0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJCQkyNDYKLV9fU1lTQ0FMTChfX05SX2tleGVjX2xvYWQsIHN5c19rZXhlY19sb2FkKQotI2RlZmluZSBfX05SX3dhaXRpZAkJCQkyNDcKLV9fU1lTQ0FMTChfX05SX3dhaXRpZCwgc3lzX3dhaXRpZCkKLSNkZWZpbmUgX19OUl9hZGRfa2V5CQkJCTI0OAotX19TWVNDQUxMKF9fTlJfYWRkX2tleSwgc3lzX2FkZF9rZXkpCi0jZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJCQkyNDkKLV9fU1lTQ0FMTChfX05SX3JlcXVlc3Rfa2V5LCBzeXNfcmVxdWVzdF9rZXkpCi0jZGVmaW5lIF9fTlJfa2V5Y3RsCQkJCTI1MAotX19TWVNDQUxMKF9fTlJfa2V5Y3RsLCBzeXNfa2V5Y3RsKQotI2RlZmluZSBfX05SX2lvcHJpb19zZXQJCQkJMjUxCi1fX1NZU0NBTEwoX19OUl9pb3ByaW9fc2V0LCBzeXNfaW9wcmlvX3NldCkKLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkJCTI1MgotX19TWVNDQUxMKF9fTlJfaW9wcmlvX2dldCwgc3lzX2lvcHJpb19nZXQpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0CQkJMjUzCi1fX1NZU0NBTEwoX19OUl9pbm90aWZ5X2luaXQsIHN5c19pbm90aWZ5X2luaXQpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJCQkyNTQKLV9fU1lTQ0FMTChfX05SX2lub3RpZnlfYWRkX3dhdGNoLCBzeXNfaW5vdGlmeV9hZGRfd2F0Y2gpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkJCTI1NQotX19TWVNDQUxMKF9fTlJfaW5vdGlmeV9ybV93YXRjaCwgc3lzX2lub3RpZnlfcm1fd2F0Y2gpCi0jZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkJCTI1NgotX19TWVNDQUxMKF9fTlJfbWlncmF0ZV9wYWdlcywgc3lzX21pZ3JhdGVfcGFnZXMpCi0jZGVmaW5lIF9fTlJfb3BlbmF0CQkJCTI1NwotX19TWVNDQUxMKF9fTlJfb3BlbmF0LCBzeXNfb3BlbmF0KQotI2RlZmluZSBfX05SX21rZGlyYXQJCQkJMjU4Ci1fX1NZU0NBTEwoX19OUl9ta2RpcmF0LCBzeXNfbWtkaXJhdCkKLSNkZWZpbmUgX19OUl9ta25vZGF0CQkJCTI1OQotX19TWVNDQUxMKF9fTlJfbWtub2RhdCwgc3lzX21rbm9kYXQpCi0jZGVmaW5lIF9fTlJfZmNob3duYXQJCQkJMjYwCi1fX1NZU0NBTEwoX19OUl9mY2hvd25hdCwgc3lzX2ZjaG93bmF0KQotI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJCQkyNjEKLV9fU1lTQ0FMTChfX05SX2Z1dGltZXNhdCwgc3lzX2Z1dGltZXNhdCkKLSNkZWZpbmUgX19OUl9uZXdmc3RhdGF0CQkJCTI2MgotX19TWVNDQUxMKF9fTlJfbmV3ZnN0YXRhdCwgc3lzX25ld2ZzdGF0YXQpCi0jZGVmaW5lIF9fTlJfdW5saW5rYXQJCQkJMjYzCi1fX1NZU0NBTEwoX19OUl91bmxpbmthdCwgc3lzX3VubGlua2F0KQotI2RlZmluZSBfX05SX3JlbmFtZWF0CQkJCTI2NAotX19TWVNDQUxMKF9fTlJfcmVuYW1lYXQsIHN5c19yZW5hbWVhdCkKLSNkZWZpbmUgX19OUl9saW5rYXQJCQkJMjY1Ci1fX1NZU0NBTEwoX19OUl9saW5rYXQsIHN5c19saW5rYXQpCi0jZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkJCTI2NgotX19TWVNDQUxMKF9fTlJfc3ltbGlua2F0LCBzeXNfc3ltbGlua2F0KQotI2RlZmluZSBfX05SX3JlYWRsaW5rYXQJCQkJMjY3Ci1fX1NZU0NBTEwoX19OUl9yZWFkbGlua2F0LCBzeXNfcmVhZGxpbmthdCkKLSNkZWZpbmUgX19OUl9mY2htb2RhdAkJCQkyNjgKLV9fU1lTQ0FMTChfX05SX2ZjaG1vZGF0LCBzeXNfZmNobW9kYXQpCi0jZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkJCTI2OQotX19TWVNDQUxMKF9fTlJfZmFjY2Vzc2F0LCBzeXNfZmFjY2Vzc2F0KQotI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkJCTI3MAotX19TWVNDQUxMKF9fTlJfcHNlbGVjdDYsIHN5c19wc2VsZWN0NikKLSNkZWZpbmUgX19OUl9wcG9sbAkJCQkyNzEKLV9fU1lTQ0FMTChfX05SX3Bwb2xsLAlzeXNfcHBvbGwpCi0jZGVmaW5lIF9fTlJfdW5zaGFyZQkJCQkyNzIKLV9fU1lTQ0FMTChfX05SX3Vuc2hhcmUsCXN5c191bnNoYXJlKQotI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkJCTI3MwotX19TWVNDQUxMKF9fTlJfc2V0X3JvYnVzdF9saXN0LCBzeXNfc2V0X3JvYnVzdF9saXN0KQotI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkJCTI3NAotX19TWVNDQUxMKF9fTlJfZ2V0X3JvYnVzdF9saXN0LCBzeXNfZ2V0X3JvYnVzdF9saXN0KQotI2RlZmluZSBfX05SX3NwbGljZQkJCQkyNzUKLV9fU1lTQ0FMTChfX05SX3NwbGljZSwgc3lzX3NwbGljZSkKLSNkZWZpbmUgX19OUl90ZWUJCQkJMjc2Ci1fX1NZU0NBTEwoX19OUl90ZWUsIHN5c190ZWUpCi0jZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCQkJMjc3Ci1fX1NZU0NBTEwoX19OUl9zeW5jX2ZpbGVfcmFuZ2UsIHN5c19zeW5jX2ZpbGVfcmFuZ2UpCi0jZGVmaW5lIF9fTlJfdm1zcGxpY2UJCQkJMjc4Ci1fX1NZU0NBTEwoX19OUl92bXNwbGljZSwgc3lzX3Ztc3BsaWNlKQotI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCQkJMjc5Ci1fX1NZU0NBTEwoX19OUl9tb3ZlX3BhZ2VzLCBzeXNfbW92ZV9wYWdlcykKLSNkZWZpbmUgX19OUl91dGltZW5zYXQJCQkJMjgwCi1fX1NZU0NBTEwoX19OUl91dGltZW5zYXQsIHN5c191dGltZW5zYXQpCi0jZGVmaW5lIF9fSUdOT1JFX2dldGNwdQkJLyogaW1wbGVtZW50ZWQgYXMgYSB2c3lzY2FsbCAqLwotI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CQkJMjgxCi1fX1NZU0NBTEwoX19OUl9lcG9sbF9wd2FpdCwgc3lzX2Vwb2xsX3B3YWl0KQotI2RlZmluZSBfX05SX3NpZ25hbGZkCQkJCTI4MgotX19TWVNDQUxMKF9fTlJfc2lnbmFsZmQsIHN5c19zaWduYWxmZCkKLSNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkJCTI4MwotX19TWVNDQUxMKF9fTlJfdGltZXJmZF9jcmVhdGUsIHN5c190aW1lcmZkX2NyZWF0ZSkKLSNkZWZpbmUgX19OUl9ldmVudGZkCQkJCTI4NAotX19TWVNDQUxMKF9fTlJfZXZlbnRmZCwgc3lzX2V2ZW50ZmQpCi0jZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkJCTI4NQotX19TWVNDQUxMKF9fTlJfZmFsbG9jYXRlLCBzeXNfZmFsbG9jYXRlKQotI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkJCTI4NgotX19TWVNDQUxMKF9fTlJfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9zZXR0aW1lKQotI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkJCTI4NwotX19TWVNDQUxMKF9fTlJfdGltZXJmZF9nZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lKQotI2RlZmluZSBfX05SX3BhY2NlcHQJCQkJMjg4Ci1fX1NZU0NBTEwoX19OUl9wYWNjZXB0LCBzeXNfcGFjY2VwdCkKLSNkZWZpbmUgX19OUl9zaWduYWxmZDQJCQkJMjg5Ci1fX1NZU0NBTEwoX19OUl9zaWduYWxmZDQsIHN5c19zaWduYWxmZDQpCi0jZGVmaW5lIF9fTlJfZXZlbnRmZDIJCQkJMjkwCi1fX1NZU0NBTEwoX19OUl9ldmVudGZkMiwgc3lzX2V2ZW50ZmQyKQotI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJCQkyOTEKLV9fU1lTQ0FMTChfX05SX2Vwb2xsX2NyZWF0ZTEsIHN5c19lcG9sbF9jcmVhdGUxKQotI2RlZmluZSBfX05SX2R1cDMJCQkJMjkyCi1fX1NZU0NBTEwoX19OUl9kdXAzLCBzeXNfZHVwMykKLSNkZWZpbmUgX19OUl9waXBlMgkJCQkyOTMKLV9fU1lTQ0FMTChfX05SX3BpcGUyLCBzeXNfcGlwZTIpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkJCTI5NAotX19TWVNDQUxMKF9fTlJfaW5vdGlmeV9pbml0MSwgc3lzX2lub3RpZnlfaW5pdDEpCi0KLQotI2lmbmRlZiBfX05PX1NUVUJTCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKLSNlbmRpZgkvKiBfX05PX1NUVUJTICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKgotICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwotICoKLSAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCi0gKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKLSAqLwotI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCi0jZW5kaWYJLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVU5JU1REXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91bndpbmQuaCBiL2luY2x1ZGUvYXNtLXg4Ni91bndpbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxNTE1Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdW53aW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1VOV0lORF9ICi0jZGVmaW5lIEFTTV9YODZfX1VOV0lORF9ICi0KLSNkZWZpbmUgVU5XX1BDKGZyYW1lKSAoKHZvaWQpKGZyYW1lKSwgMFVMKQotI2RlZmluZSBVTldfU1AoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwVUwpCi0jZGVmaW5lIFVOV19GUChmcmFtZSkgKCh2b2lkKShmcmFtZSksIDBVTCkKLQotc3RhdGljIGlubGluZSBpbnQgYXJjaF91bndfdXNlcl9tb2RlKGNvbnN0IHZvaWQgKmluZm8pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19VTldJTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3VzZXIzMi5oIGIvaW5jbHVkZS9hc20teDg2L3VzZXIzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTY2YzE4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVVNFUjMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVVNFUjMyX0gKLQotLyogSUEzMiBjb21wYXRpYmxlIHVzZXIgc3RydWN0dXJlcyBmb3IgcHRyYWNlLgotICogVGhlc2Ugc2hvdWxkIGJlIHVzZWQgZm9yIDMyYml0IGNvcmVkdW1wcyB0b28uICovCi0KLXN0cnVjdCB1c2VyX2kzODdfaWEzMl9zdHJ1Y3QgewotCXUzMgljd2Q7Ci0JdTMyCXN3ZDsKLQl1MzIJdHdkOwotCXUzMglmaXA7Ci0JdTMyCWZjczsKLQl1MzIJZm9vOwotCXUzMglmb3M7Ci0JdTMyCXN0X3NwYWNlWzIwXTsgICAvKiA4KjEwIGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDgwIGJ5dGVzICovCi19OwotCi0vKiBGU0FWRSBmcmFtZSB3aXRoIGV4dGVuc2lvbnMgKi8KLXN0cnVjdCB1c2VyMzJfZnhzcl9zdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0CWN3ZDsKLQl1bnNpZ25lZCBzaG9ydAlzd2Q7Ci0JdW5zaWduZWQgc2hvcnQJdHdkOwkvKiBub3QgY29tcGF0aWJsZSB0byA2NGJpdCB0d2QgKi8KLQl1bnNpZ25lZCBzaG9ydAlmb3A7Ci0JaW50CWZpcDsKLQlpbnQJZmNzOwotCWludAlmb287Ci0JaW50CWZvczsKLQlpbnQJbXhjc3I7Ci0JaW50CXJlc2VydmVkOwotCWludAlzdF9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gMTI4IGJ5dGVzICovCi0JaW50CXhtbV9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggWE1NLXJlZyA9IDEyOCBieXRlcyAqLwotCWludAlwYWRkaW5nWzU2XTsKLX07Ci0KLXN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIgewotCV9fdTMyIGVieCwgZWN4LCBlZHgsIGVzaSwgZWRpLCBlYnAsIGVheDsKLQl1bnNpZ25lZCBzaG9ydCBkcywgX19kcywgZXMsIF9fZXM7Ci0JdW5zaWduZWQgc2hvcnQgZnMsIF9fZnMsIGdzLCBfX2dzOwotCV9fdTMyIG9yaWdfZWF4LCBlaXA7Ci0JdW5zaWduZWQgc2hvcnQgY3MsIF9fY3M7Ci0JX191MzIgZWZsYWdzLCBlc3A7Ci0JdW5zaWduZWQgc2hvcnQgc3MsIF9fc3M7Ci19OwotCi1zdHJ1Y3QgdXNlcjMyIHsKLSAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMiByZWdzOyAvKiBXaGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBzdG9yZWQgKi8KLSAgaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gKi8KLQkJCQkvKiBmb3IgdGhpcyBtZXNzLiBOb3QgeWV0IHVzZWQuICovCi0gIHN0cnVjdCB1c2VyX2kzODdfaWEzMl9zdHJ1Y3QgaTM4NzsJLyogTWF0aCBDby1wcm9jZXNzb3IgcmVnaXN0ZXJzLiAqLwotLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCi0gIF9fdTMyIHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCi0gIF9fdTMyIHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCi0gIF9fdTMyIHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLwotICBfX3UzMiBzdGFydF9jb2RlOyAgICAgLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHRleHQuICovCi0gIF9fdTMyIHN0YXJ0X3N0YWNrOwkvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhY2sgYXJlYS4KLQkJCQkgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAotCQkJCSAgIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIGFsd2F5cyBmb3VuZCBpbiB0aGUKLQkJCQkgICBlc3AgcmVnaXN0ZXIuICAqLwotICBfX3UzMiBzaWduYWw7ICAgICAJCS8qIFNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgY29yZSBkdW1wLiAqLwotICBpbnQgcmVzZXJ2ZWQ7CQkJLyogTm8gX191MzJlciB1c2VkICovCi0gIF9fdTMyIHVfYXIwOwkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KLQkJCQkvKiB0aGUgcmVnaXN0ZXJzLiAqLwotICBfX3UzMiB1X2Zwc3RhdGU7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHBvaW50ZXIuICovCi0gIF9fdTMyIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KLSAgY2hhciB1X2NvbW1bMzJdOwkJLyogVXNlciBjb21tYW5kIHRoYXQgd2FzIHJlc3BvbnNpYmxlICovCi0gIGludCB1X2RlYnVncmVnWzhdOwotfTsKLQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVVNFUjMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvdXNlcl8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGZlMmY1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19VU0VSXzMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVVNFUl8zMl9ICi0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotLyogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKLSAgIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKLSAgIGxpbnV4IHdlIHVzZSB0aGUgJ3RyYWQtY29yZScgYmZkKS4gIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZgotICAgb2JzdGFjbGVzIHRvIGJlaW5nIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50Ci0gICByZWdpc3RlcnMsIGFuZCB1bnRpbCB0aGVzZSBhcmUgc29sdmVkIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHZpZXcgdGhlCi0gICBjb250ZW50cyBvZiB0aGVtLiAgQWN0dWFsbHksIHlvdSBjYW4gcmVhZCBpbiB0aGUgY29yZSBmaWxlIGFuZCBsb29rIGF0Ci0gICB0aGUgY29udGVudHMgb2YgdGhlIHVzZXIgc3RydWN0IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGZsb2F0aW5nIHBvaW50Ci0gICByZWdpc3RlcnMgY29udGFpbi4KLSAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKLSAgIFVQQUdFOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiIHdoYXQgaXMgcHJlc2VudAotICAgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEgY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoCi0gICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCi0gICBBbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZAotICAgYWx3YXlzIGJlIG9ubHkgb25lIHBhZ2UuCi0gICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bwotICAgY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5Ci0gICB0aGF0IG1heSBoYXZlIGJlZW4gbWFsbG9jZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEgcGFnZQotICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKLSAgIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFuIGludGVncmFsCi0gICBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KLSAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCi0gICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KLSAgIGN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIG9mZiBpbiBvcmRlciB0byBiZSBhYmxlCi0gICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KLSAgIFRoZSBtaW5pbXVtIGNvcmUgZmlsZSBzaXplIGlzIDMgcGFnZXMsIG9yIDEyMjg4IGJ5dGVzLgotKi8KLQotLyoKLSAqIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0Ci0gKglHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAotICoKLSAqIFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdEQiA1LjArIFBUUkFDRV97R0VUfFNFVH1GUFhSRUdTIHJlcXVlc3RzIGZvcgotICogaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRlhTUi1mb3JtYXQgZmxvYXRpbmcgcG9pbnQgZW52aXJvbm1lbnQuICBGbG9hdGluZwotICogcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHJlZ3VsYXIgZm9ybWF0IGluIHRoZSB1c3VhbCBtYW5uZXIsCi0gKiBhbmQgYm90aCB0aGUgc3RhbmRhcmQgYW5kIFNJTUQgZmxvYXRpbmcgcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhCi0gKiB0aGUgbmV3IHB0cmFjZSByZXF1ZXN0cy4gIEluIGVpdGhlciBjYXNlLCBjaGFuZ2VzIHRvIHRoZSBGUFUgZW52aXJvbm1lbnQKLSAqIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSB0YXNrJ3Mgc3RhdGUgYXMgZXhwZWN0ZWQuCi0gKi8KLQotc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgewotCWxvbmcJY3dkOwotCWxvbmcJc3dkOwotCWxvbmcJdHdkOwotCWxvbmcJZmlwOwotCWxvbmcJZmNzOwotCWxvbmcJZm9vOwotCWxvbmcJZm9zOwotCWxvbmcJc3Rfc3BhY2VbMjBdOwkvKiA4KjEwIGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDgwIGJ5dGVzICovCi19OwotCi1zdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQJY3dkOwotCXVuc2lnbmVkIHNob3J0CXN3ZDsKLQl1bnNpZ25lZCBzaG9ydAl0d2Q7Ci0JdW5zaWduZWQgc2hvcnQJZm9wOwotCWxvbmcJZmlwOwotCWxvbmcJZmNzOwotCWxvbmcJZm9vOwotCWxvbmcJZm9zOwotCWxvbmcJbXhjc3I7Ci0JbG9uZwlyZXNlcnZlZDsKLQlsb25nCXN0X3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSAxMjggYnl0ZXMgKi8KLQlsb25nCXhtbV9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggWE1NLXJlZyA9IDEyOCBieXRlcyAqLwotCWxvbmcJcGFkZGluZ1s1Nl07Ci19OwotCi0vKgotICogVGhpcyBpcyB0aGUgb2xkIGxheW91dCBvZiAic3RydWN0IHB0X3JlZ3MiLCBhbmQKLSAqIGlzIHN0aWxsIHRoZSBsYXlvdXQgdXNlZCBieSB1c2VyIG1vZGUgKHRoZSBuZXcKLSAqIHB0X3JlZ3MgZG9lc24ndCBoYXZlIGFsbCByZWdpc3RlcnMgYXMgdGhlIGtlcm5lbAotICogZG9lc24ndCB1c2UgdGhlIGV4dHJhIHNlZ21lbnQgcmVnaXN0ZXJzKQotICovCi1zdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZwlieDsKLQl1bnNpZ25lZCBsb25nCWN4OwotCXVuc2lnbmVkIGxvbmcJZHg7Ci0JdW5zaWduZWQgbG9uZwlzaTsKLQl1bnNpZ25lZCBsb25nCWRpOwotCXVuc2lnbmVkIGxvbmcJYnA7Ci0JdW5zaWduZWQgbG9uZwlheDsKLQl1bnNpZ25lZCBsb25nCWRzOwotCXVuc2lnbmVkIGxvbmcJZXM7Ci0JdW5zaWduZWQgbG9uZwlmczsKLQl1bnNpZ25lZCBsb25nCWdzOwotCXVuc2lnbmVkIGxvbmcJb3JpZ19heDsKLQl1bnNpZ25lZCBsb25nCWlwOwotCXVuc2lnbmVkIGxvbmcJY3M7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQl1bnNpZ25lZCBsb25nCXNwOwotCXVuc2lnbmVkIGxvbmcJc3M7Ci19OwotCi0vKiBXaGVuIHRoZSBrZXJuZWwgZHVtcHMgY29yZSwgaXQgc3RhcnRzIGJ5IGR1bXBpbmcgdGhlIHVzZXIgc3RydWN0IC0KLSAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cwotICAgYXJlIHdpdGhpbiB0aGUgZmlsZSwgYW5kIHdoYXQgdmlydHVhbCBhZGRyZXNzZXMgdG8gdXNlLiAqLwotc3RydWN0IHVzZXJ7Ci0vKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAotICAgZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCi0gIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CS8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLwotLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLwotICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLwotCQkJCS8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KLSAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgaTM4NzsJLyogTWF0aCBDby1wcm9jZXNzb3IgcmVnaXN0ZXJzLiAqLwotLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCi0gIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCi0gIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCi0gIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLwotICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KLSAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCi0JCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKLQkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCi0JCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KLSAgbG9uZyBpbnQgc2lnbmFsOyAgICAgCQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KLSAgaW50IHJlc2VydmVkOwkJCS8qIE5vIGxvbmdlciB1c2VkICovCi0gIHVuc2lnbmVkIGxvbmcgdV9hcjA7CQkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KLQkJCQkvKiB0aGUgcmVnaXN0ZXJzLiAqLwotICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyLiAqLwotICB1bnNpZ25lZCBsb25nIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KLSAgY2hhciB1X2NvbW1bMzJdOwkJLyogVXNlciBjb21tYW5kIHRoYXQgd2FzIHJlc3BvbnNpYmxlICovCi0gIGludCB1X2RlYnVncmVnWzhdOwotfTsKLSNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKLSNkZWZpbmUgVVBBR0VTIDEKLSNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKLSNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19VU0VSXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvdXNlcl82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGI1Nzk5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19VU0VSXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fVVNFUl82NF9ICi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotLyogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKLSAgIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlci4KLSAgIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZiBvYnN0YWNsZXMgdG8gYmVpbmcgYWJsZSB0byB2aWV3IHRoZQotICAgY29udGVudHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycywgYW5kIHVudGlsIHRoZXNlIGFyZQotICAgc29sdmVkIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHZpZXcgdGhlIGNvbnRlbnRzIG9mIHRoZW0uCi0gICBBY3R1YWxseSwgeW91IGNhbiByZWFkIGluIHRoZSBjb3JlIGZpbGUgYW5kIGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mCi0gICB0aGUgdXNlciBzdHJ1Y3QgdG8gZmluZCBvdXQgd2hhdCB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzCi0gICBjb250YWluLgotCi0gICBUaGUgYWN0dWFsIGZpbGUgY29udGVudHMgYXJlIGFzIGZvbGxvd3M6Ci0gICBVUEFHRTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYiB3aGF0IGlzIHByZXNlbnQKLSAgIGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaAotICAgaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGdkYiwgYnV0IGl0IG1heSBjb21lIGluIHVzZWZ1bCBhdCBzb21lIHBvaW50LgotICAgQWxsIG9mIHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQKLSAgIGFsd2F5cyBiZSBvbmx5IG9uZSBwYWdlLgotICAgREFUQTogVGhlIGRhdGEgYXJlYSBpcyBzdG9yZWQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KLSAgIGN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQotICAgdGhhdCBtYXkgaGF2ZSBiZWVuIG1hbGxvY2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhIHBhZ2UKLSAgIGlzIGRlbWFuZC16ZXJvIG9yIGlmIGEgcGFnZSBpcyB0b3RhbGx5IHVudXNlZCwgd2UganVzdCBjb3ZlciB0aGUgZW50aXJlCi0gICByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbiBpbnRlZ3JhbAotICAgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCi0gICBTVEFDSzogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAotICAgYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIChlc3ApIHRvCi0gICBjdXJyZW50LT5zdGFydF9zdGFjaywgc28gd2Ugcm91bmQgZWFjaCBvZiB0aGVzZSBvZmYgaW4gb3JkZXIgdG8gYmUgYWJsZQotICAgdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCi0gICBUaGUgbWluaW11bSBjb3JlIGZpbGUgc2l6ZSBpcyAzIHBhZ2VzLCBvciAxMjI4OCBieXRlcy4gICovCi0KLS8qCi0gKiBQZW50aXVtIElJSSBGWFNSLCBTU0Ugc3VwcG9ydAotICoJR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPiwgTWF5IDIwMDAKLSAqCi0gKiBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHREIgNS4wKyBQVFJBQ0Vfe0dFVHxTRVR9RlBYUkVHUyByZXF1ZXN0cyBmb3IKLSAqIGludGVyYWN0aW5nIHdpdGggdGhlIEZYU1ItZm9ybWF0IGZsb2F0aW5nIHBvaW50IGVudmlyb25tZW50LiAgRmxvYXRpbmcKLSAqIHBvaW50IGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGluIHRoZSByZWd1bGFyIGZvcm1hdCBpbiB0aGUgdXN1YWwgbWFubmVyLAotICogYW5kIGJvdGggdGhlIHN0YW5kYXJkIGFuZCBTSU1EIGZsb2F0aW5nIHBvaW50IGRhdGEgY2FuIGJlIGFjY2Vzc2VkIHZpYQotICogdGhlIG5ldyBwdHJhY2UgcmVxdWVzdHMuICBJbiBlaXRoZXIgY2FzZSwgY2hhbmdlcyB0byB0aGUgRlBVIGVudmlyb25tZW50Ci0gKiB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgdGFzaydzIHN0YXRlIGFzIGV4cGVjdGVkLgotICoKLSAqIHg4Ni02NCBzdXBwb3J0IGJ5IEFuZGkgS2xlZW4uCi0gKi8KLQotLyogVGhpcyBtYXRjaGVzIHRoZSA2NGJpdCBGWFNBVkUgZm9ybWF0IGFzIGRlZmluZWQgYnkgQU1ELiBJdCBpcyB0aGUgc2FtZQotICAgYXMgdGhlIDMyYml0IGZvcm1hdCBkZWZpbmVkIGJ5IEludGVsLCBleGNlcHQgdGhhdCB0aGUgc2VsZWN0b3I6b2Zmc2V0IHBhaXJzCi0gICBmb3IgZGF0YSBhbmQgZWlwIGFyZSByZXBsYWNlZCB3aXRoIGZsYXQgNjRiaXQgcG9pbnRlcnMuICovCi1zdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQJY3dkOwotCXVuc2lnbmVkIHNob3J0CXN3ZDsKLQl1bnNpZ25lZCBzaG9ydAl0d2Q7CS8qIE5vdGUgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMKLQkJCQkgICB0aGUgMzJiaXQveDg3L0ZTQVZFIHR3ZCAqLwotCXVuc2lnbmVkIHNob3J0CWZvcDsKLQlfX3U2NAlyaXA7Ci0JX191NjQJcmRwOwotCV9fdTMyCW14Y3NyOwotCV9fdTMyCW14Y3NyX21hc2s7Ci0JX191MzIJc3Rfc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDEyOCBieXRlcyAqLwotCV9fdTMyCXhtbV9zcGFjZVs2NF07CS8qIDE2KjE2IGJ5dGVzIGZvciBlYWNoIFhNTS1yZWcgPSAyNTYgYnl0ZXMgKi8KLQlfX3UzMglwYWRkaW5nWzI0XTsKLX07Ci0KLS8qCi0gKiBTZWdtZW50IHJlZ2lzdGVyIGxheW91dCBpbiBjb3JlZHVtcHMuCi0gKi8KLXN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nCXIxNTsKLQl1bnNpZ25lZCBsb25nCXIxNDsKLQl1bnNpZ25lZCBsb25nCXIxMzsKLQl1bnNpZ25lZCBsb25nCXIxMjsKLQl1bnNpZ25lZCBsb25nCWJwOwotCXVuc2lnbmVkIGxvbmcJYng7Ci0JdW5zaWduZWQgbG9uZwlyMTE7Ci0JdW5zaWduZWQgbG9uZwlyMTA7Ci0JdW5zaWduZWQgbG9uZwlyOTsKLQl1bnNpZ25lZCBsb25nCXI4OwotCXVuc2lnbmVkIGxvbmcJYXg7Ci0JdW5zaWduZWQgbG9uZwljeDsKLQl1bnNpZ25lZCBsb25nCWR4OwotCXVuc2lnbmVkIGxvbmcJc2k7Ci0JdW5zaWduZWQgbG9uZwlkaTsKLQl1bnNpZ25lZCBsb25nCW9yaWdfYXg7Ci0JdW5zaWduZWQgbG9uZwlpcDsKLQl1bnNpZ25lZCBsb25nCWNzOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZwlzcDsKLQl1bnNpZ25lZCBsb25nCXNzOwotCXVuc2lnbmVkIGxvbmcJZnNfYmFzZTsKLQl1bnNpZ25lZCBsb25nCWdzX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZwlkczsKLQl1bnNpZ25lZCBsb25nCWVzOwotCXVuc2lnbmVkIGxvbmcJZnM7Ci0JdW5zaWduZWQgbG9uZwlnczsKLX07Ci0KLS8qIFdoZW4gdGhlIGtlcm5lbCBkdW1wcyBjb3JlLCBpdCBzdGFydHMgYnkgZHVtcGluZyB0aGUgdXNlciBzdHJ1Y3QgLQotICAgdGhpcyB3aWxsIGJlIHVzZWQgYnkgZ2RiIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYW5kIHN0YWNrIHNlZ21lbnRzCi0gICBhcmUgd2l0aGluIHRoZSBmaWxlLCBhbmQgd2hhdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB1c2UuICovCi0KLXN0cnVjdCB1c2VyIHsKLS8qIFdlIHN0YXJ0IHdpdGggdGhlIHJlZ2lzdGVycywgdG8gbWltaWMgdGhlIHdheSB0aGF0ICJtZW1vcnkiIGlzIHJldHVybmVkCi0gICBmcm9tIHRoZSBwdHJhY2UoMywuLi4pIGZ1bmN0aW9uLiAgKi8KLSAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgcmVnczsJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCi0vKiBwdHJhY2UgZG9lcyBub3QgeWV0IHN1cHBseSB0aGVzZS4gIFNvbWVkYXkuLi4uICovCi0gIGludCB1X2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICovCi0JCQkJLyogZm9yIHRoaXMgbWVzcy4gTm90IHlldCB1c2VkLiAqLwotICBpbnQgcGFkMDsKLSAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgaTM4NzsJLyogTWF0aCBDby1wcm9jZXNzb3IgcmVnaXN0ZXJzLiAqLwotLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCi0gIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCi0gIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCi0gIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLwotICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KLSAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCi0JCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKLQkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCi0JCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KLSAgbG9uZyBpbnQgc2lnbmFsOwkJLyogU2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBjb3JlIGR1bXAuICovCi0gIGludCByZXNlcnZlZDsJCQkvKiBObyBsb25nZXIgdXNlZCAqLwotICBpbnQgcGFkMTsKLSAgdW5zaWduZWQgbG9uZyB1X2FyMDsJCS8qIFVzZWQgYnkgZ2RiIHRvIGhlbHAgZmluZCB0aGUgdmFsdWVzIGZvciAqLwotCQkJCS8qIHRoZSByZWdpc3RlcnMuICovCi0gIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0ICp1X2Zwc3RhdGU7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHBvaW50ZXIuICovCi0gIHVuc2lnbmVkIGxvbmcgbWFnaWM7CQkvKiBUbyB1bmlxdWVseSBpZGVudGlmeSBhIGNvcmUgZmlsZSAqLwotICBjaGFyIHVfY29tbVszMl07CQkvKiBVc2VyIGNvbW1hbmQgdGhhdCB3YXMgcmVzcG9uc2libGUgKi8KLSAgdW5zaWduZWQgbG9uZyB1X2RlYnVncmVnWzhdOwotICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7IC8qIENQVSBlcnJvciBjb2RlIG9yIDAgKi8KLSAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyZXNzOyAvKiBDUjMgb3IgMCAqLwotfTsKLSNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKLSNkZWZpbmUgVVBBR0VTIDEKLSNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKLSNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19VU0VSXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvYmlvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2Q2ZDdlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1VWX19CSU9TX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVVZfX0JJT1NfSAotCi0vKgotICogQklPUyBsYXllciBkZWZpbml0aW9ucy4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcnRjLmg+Ci0KLSNkZWZpbmUgQklPU19GUkVRX0JBU0UJCQkweDAxMDAwMDAxCi0KLWVudW0gewotCUJJT1NfRlJFUV9CQVNFX1BMQVRGT1JNID0gMCwKLQlCSU9TX0ZSRVFfQkFTRV9JTlRFUlZBTF9USU1FUiA9IDEsCi0JQklPU19GUkVRX0JBU0VfUkVBTFRJTUVfQ0xPQ0sgPSAyCi19OwotCi0jIGRlZmluZSBCSU9TX0NBTEwocmVzdWx0LCBhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpCQlcCi0JZG8gewkJCQkJCQkJXAotCQkvKiBYWFggLSB0aGUgcmVhbCBjYWxsIGdvZXMgaGVyZSAqLwkJCVwKLQkJcmVzdWx0LnN0YXR1cyA9IEJJT1NfU1RBVFVTX1VOSU1QTEVNRU5URUQ7CQlcCi0JCWlzcnYudjAgPSAwOwkJCQkJCVwKLQkJaXNydi52MSA9IDA7CQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLWVudW0gewotCUJJT1NfU1RBVFVTX1NVQ0NFU1MJCT0gIDAsCi0JQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRAk9IC0xLAotCUJJT1NfU1RBVFVTX0VJTlZBTAkJPSAtMiwKLQlCSU9TX1NUQVRVU19FUlJPUgkJPSAtMwotfTsKLQotc3RydWN0IHV2X2Jpb3NfcmV0dmFsIHsKLQkvKgotCSAqIEEgemVybyBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIGNhbGwgY29tcGxldGVkIHdpdGhvdXQgZXJyb3IuCi0JICogQSBuZWdhdGl2ZSBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIHJlYXNvbiBvZiBjYWxsIGZhaWx1cmUuCi0JICogQSBwb3NpdGl2ZSBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3MgYnV0IGFuCi0JICogaW5mb3JtYXRpb25hbCB2YWx1ZSBzaG91bGQgYmUgcHJpbnRlZCAoZS5nLiwgInJlYm9vdCBmb3IKLQkgKiBjaGFuZ2UgdG8gdGFrZSBlZmZlY3QiKS4KLQkgKi8KLQlzNjQgc3RhdHVzOwotCXU2NCB2MDsKLQl1NjQgdjE7Ci0JdTY0IHYyOwotfTsKLQotZXh0ZXJuIGxvbmcKLXg4Nl9iaW9zX2ZyZXFfYmFzZSh1bnNpZ25lZCBsb25nIHdoaWNoLCB1bnNpZ25lZCBsb25nICp0aWNrc19wZXJfc2Vjb25kLAotCQkgICB1bnNpZ25lZCBsb25nICpkcmlmdF9pbmZvKTsKLWV4dGVybiBjb25zdCBjaGFyICp4ODZfYmlvc19zdHJlcnJvcihsb25nIHN0YXR1cyk7Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19VVl9fQklPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdXYvdXZfYmF1LmggYi9pbmNsdWRlL2FzbS14ODYvdXYvdXZfYmF1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MTUzZmIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3V2L3V2X2JhdS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBTR0kgVVYgQnJvYWRjYXN0IEFzc2lzdCBVbml0IGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1VWX19VVl9CQVVfSAotI2RlZmluZSBBU01fWDg2X19VVl9fVVZfQkFVX0gKLQotI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgotI2RlZmluZSBCSVRTUEVSQllURSA4Ci0KLS8qCi0gKiBCcm9hZGNhc3QgQXNzaXN0IFVuaXQgbWVzc2FnaW5nIHN0cnVjdHVyZXMKLSAqCi0gKiBTZWxlY3RpdmUgQnJvYWRjYXN0IGFjdGl2YXRpb25zIGFyZSBpbmR1Y2VkIGJ5IHNvZnR3YXJlIGFjdGlvbgotICogc3BlY2lmeWluZyBhIHBhcnRpY3VsYXIgOC1kZXNjcmlwdG9yICJzZXQiIHZpYSBhIDYtYml0IGluZGV4IHdyaXR0ZW4KLSAqIHRvIGFuIE1NUi4KLSAqIFRodXMgdGhlcmUgYXJlIDY0IHVuaXF1ZSA1MTItYnl0ZSBzZXRzIG9mIFNCIGRlc2NyaXB0b3JzIC0gb25lIHNldCBmb3IKLSAqIGVhY2ggNi1iaXQgaW5kZXggdmFsdWUuIFRoZXNlIGRlc2NyaXB0b3Igc2V0cyBhcmUgbWFwcGVkIGluIHNlcXVlbmNlCi0gKiBzdGFydGluZyB3aXRoIHNldCAwIGxvY2F0ZWQgYXQgdGhlIGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZQotICogQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSByZWdpc3Rlciwgc2V0IDEgaXMgbG9jYXRlZCBhdCBCQVNFICsgNTEyLAotICogc2V0IDIgaXMgYXQgQkFTRSArIDIqNTEyLCBzZXQgMyBhdCBCQVNFICsgMyo1MTIsIGFuZCBzbyBvbi4KLSAqCi0gKiBXZSB3aWxsIHVzZSAzMSBzZXRzLCBvbmUgZm9yIHNlbmRpbmcgQkFVIG1lc3NhZ2VzIGZyb20gZWFjaCBvZiB0aGUgMzIKLSAqIGNwdSdzIG9uIHRoZSBub2RlLgotICoKLSAqIFRMQiBzaG9vdGRvd24gd2lsbCB1c2UgdGhlIGZpcnN0IG9mIHRoZSA4IGRlc2NyaXB0b3JzIG9mIGVhY2ggc2V0LgotICogRWFjaCBvZiB0aGUgZGVzY3JpcHRvcnMgaXMgNjQgYnl0ZXMgaW4gc2l6ZSAoOCo2NCA9IDUxMiBieXRlcyBpbiBhIHNldCkuCi0gKi8KLQotI2RlZmluZSBVVl9JVEVNU19QRVJfREVTQ1JJUFRPUgkJOAotI2RlZmluZSBVVl9DUFVTX1BFUl9BQ1RfU1RBVFVTCQkzMgotI2RlZmluZSBVVl9BQ1RfU1RBVFVTX01BU0sJCTB4MwotI2RlZmluZSBVVl9BQ1RfU1RBVFVTX1NJWkUJCTIKLSNkZWZpbmUgVVZfQUNUSVZBVElPTl9ERVNDUklQVE9SX1NJWkUJMzIKLSNkZWZpbmUgVVZfRElTVFJJQlVUSU9OX1NJWkUJCTI1NgotI2RlZmluZSBVVl9TV19BQ0tfTlBFTkRJTkcJCTgKLSNkZWZpbmUgVVZfTkVUX0VORFBPSU5UX0lOVEQJCTB4MzgKLSNkZWZpbmUgVVZfREVTQ19CQVNFX1BOT0RFX1NISUZUCTQ5Ci0jZGVmaW5lIFVWX1BBWUxPQURRX1BOT0RFX1NISUZUCQk0OQotI2RlZmluZSBVVl9QVENfQkFTRU5BTUUJCQkic2dpX3V2L3B0Y19zdGF0aXN0aWNzIgotI2RlZmluZSB1dl9waHlzbm9kZWFkZHIoeCkJCSgoX19wYSgodW5zaWduZWQgbG9uZykoeCkpICYgdXZfbW1hc2spKQotCi0vKgotICogYml0cyBpbiBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fU1RBVFVTXzAvMQotICovCi0jZGVmaW5lIERFU0NfU1RBVFVTX0lETEUJCTAKLSNkZWZpbmUgREVTQ19TVEFUVVNfQUNUSVZFCQkxCi0jZGVmaW5lIERFU0NfU1RBVFVTX0RFU1RJTkFUSU9OX1RJTUVPVVQJMgotI2RlZmluZSBERVNDX1NUQVRVU19TT1VSQ0VfVElNRU9VVAkzCi0KLS8qCi0gKiBzb3VyY2Ugc2lkZSB0aHJlc2hob2xkcyBhdCB3aGljaCBtZXNzYWdlIHJldHJpZXMgcHJpbnQgYSB3YXJuaW5nCi0gKi8KLSNkZWZpbmUgU09VUkNFX1RJTUVPVVRfTElNSVQJCTIwCi0jZGVmaW5lIERFU1RJTkFUSU9OX1RJTUVPVVRfTElNSVQJMjAKLQotLyoKLSAqIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkZXN0aW5hdGlvbiBzaWRlIHBheWxvYWQgcXVldWUKLSAqLwotI2RlZmluZSBERVNUX1FfU0laRQkJCTE3Ci0vKgotICogbnVtYmVyIG9mIGRlc3RpbmF0aW9uIHNpZGUgc29mdHdhcmUgYWNrIHJlc291cmNlcwotICovCi0jZGVmaW5lIERFU1RfTlVNX1JFU09VUkNFUwkJOAotI2RlZmluZSBNQVhfQ1BVU19QRVJfTk9ERQkJMzIKLS8qCi0gKiBjb21wbGV0aW9uIHN0YXR1c2VzIGZvciBzZW5kaW5nIGEgVExCIGZsdXNoIG1lc3NhZ2UKLSAqLwotI2RlZmluZQlGTFVTSF9SRVRSWQkJCTEKLSNkZWZpbmUJRkxVU0hfR0lWRVVQCQkJMgotI2RlZmluZQlGTFVTSF9DT01QTEVURQkJCTMKLQotLyoKLSAqIERpc3RyaWJ1dGlvbjogMzIgYnl0ZXMgKDI1NiBiaXRzKSAoYnl0ZXMgMC0weDFmIG9mIGRlc2NyaXB0b3IpCi0gKiBJZiB0aGUgJ211bHRpbGV2ZWwnIGZsYWcgaW4gdGhlIGhlYWRlciBwb3J0aW9uIG9mIHRoZSBkZXNjcmlwdG9yCi0gKiBoYXMgYmVlbiBzZXQgdG8gMCwgdGhlbiBlbmRwb2ludCBtdWx0aS11bmljYXN0IG1vZGUgaXMgc2VsZWN0ZWQuCi0gKiBUaGUgZGlzdHJpYnV0aW9uIHNwZWNpZmljYXRpb24gKDMyIGJ5dGVzKSBpcyBpbnRlcnByZXRlZCBhcyBhIDI1Ni1iaXQKLSAqIGRpc3RyaWJ1dGlvbiB2ZWN0b3IuIEFkamFjZW50IGJpdHMgY29ycmVzcG9uZCB0byBjb25zZWN1dGl2ZSBldmVuIG51bWJlcmVkCi0gKiBub2RlSURzLiBUaGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgaW5kZXggb2YgYSBnaXZlbiBiaXQgdG8gdGhlIDE1LWJpdAotICogJ2Jhc2VfZGVzdF9ub2RlaWQnIGZpZWxkIG9mIHRoZSBoZWFkZXIgY29ycmVzcG9uZHMgdG8gdGhlCi0gKiBkZXN0aW5hdGlvbiBub2RlSUQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc3BlY2lmaWVkIGJpdC4KLSAqLwotc3RydWN0IGJhdV90YXJnZXRfbm9kZW1hc2sgewotCXVuc2lnbmVkIGxvbmcgYml0c1tCSVRTX1RPX0xPTkdTKDI1NildOwotfTsKLQotLyoKLSAqIG1hc2sgb2YgY3B1J3Mgb24gYSBub2RlCi0gKiAoZHVyaW5nIGluaXRpYWxpemF0aW9uIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB1bnNpZ25lZCBsb25nIGhhcwotICogIGVub3VnaCBiaXRzIGZvciBtYXguIGNwdSdzIHBlciBub2RlKQotICovCi1zdHJ1Y3QgYmF1X2xvY2FsX2NwdW1hc2sgewotCXVuc2lnbmVkIGxvbmcgYml0czsKLX07Ci0KLS8qCi0gKiBQYXlsb2FkOiAxNiBieXRlcyAoMTI4IGJpdHMpIChieXRlcyAweDIwLTB4MmYgb2YgZGVzY3JpcHRvcikKLSAqIG9ubHkgMTIgYnl0ZXMgKDk2IGJpdHMpIG9mIHRoZSBwYXlsb2FkIGFyZWEgYXJlIHVzYWJsZS4KLSAqIEFuIGFkZGl0aW9uYWwgMyBieXRlcyAoYml0cyAyNzo0KSBvZiB0aGUgaGVhZGVyIGFkZHJlc3MgYXJlIGNhcnJpZWQKLSAqIHRvIHRoZSBuZXh0IGJ5dGVzIG9mIHRoZSBkZXN0aW5hdGlvbiBwYXlsb2FkIHF1ZXVlLgotICogQW5kIGFuIGFkZGl0aW9uYWwgMiBieXRlcyBvZiB0aGUgaGVhZGVyIFN1cHBsX0EgZmllbGQgYXJlIGFsc28KLSAqIGNhcnJpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIHBheWxvYWQgcXVldWUuCi0gKiBCdXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIFN1cHBsX0EgYmVjb21lcyBiaXRzIDEyNzoxMjAgKHRoZSAxNnRoIGJ5dGUpCi0gKiBvZiB0aGUgZGVzdGluYXRpb24gcGF5bG9hZCBxdWV1ZSwgd2hpY2ggaXMgd3JpdHRlbiBieSB0aGUgaGFyZHdhcmUKLSAqIHdpdGggdGhlIHMvdyBhY2sgcmVzb3VyY2UgYml0IHZlY3Rvci4KLSAqIFsgZWZmZWN0aXZlIG1lc3NhZ2UgY29udGVudHMgKDE2IGJ5dGVzICgxMjggYml0cykgbWF4aW11bSksIG5vdCBjb3VudGluZwotICogICB0aGUgcy93IGFjayBiaXQgdmVjdG9yICBdCi0gKi8KLQotLyoKLSAqIFRoZSBwYXlsb2FkIGlzIHNvZnR3YXJlLWRlZmluZWQgZm9yIElOVEQgdHJhbnNhY3Rpb25zCi0gKi8KLXN0cnVjdCBiYXVfbXNnX3BheWxvYWQgewotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsJCS8qIHNpZ25pZmllcyBhIHBhZ2Ugb3IgYWxsIFRMQidzCi0JCQkJCQlvZiB0aGUgY3B1ICovCi0JLyogNjQgYml0cyAqLwotCXVuc2lnbmVkIHNob3J0IHNlbmRpbmdfY3B1OwkvKiBmaWxsZWQgaW4gYnkgc2VuZGVyICovCi0JLyogMTYgYml0cyAqLwotCXVuc2lnbmVkIHNob3J0IGFja25vd2xlZGdlX2NvdW50Oy8qIGZpbGxlZCBpbiBieSBkZXN0aW5hdGlvbiAqLwotCS8qIDE2IGJpdHMgKi8KLQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQxOjMyOwkvKiBub3QgdXNhYmxlICovCi19OwotCi0KLS8qCi0gKiBNZXNzYWdlIGhlYWRlcjogIDE2IGJ5dGVzICgxMjggYml0cykgKGJ5dGVzIDB4MzAtMHgzZiBvZiBkZXNjcmlwdG9yKQotICogc2VlIHRhYmxlIDQuMi4zLjAuMSBpbiBicm9hY2FzdF9hc3Npc3Qgc3BlYy4KLSAqLwotc3RydWN0IGJhdV9tc2dfaGVhZGVyIHsKLQlpbnQgZGVzdF9zdWJub2RlaWQ6NjsJLyogbXVzdCBiZSB6ZXJvICovCi0JLyogYml0cyA1OjAgKi8KLQlpbnQgYmFzZV9kZXN0X25vZGVpZDoxNTsgLyogbmFzaWQ+PjEgKHBub2RlKSBvZiBmaXJzdCBiaXQgaW4gbm9kZV9tYXAgKi8KLQkvKiBiaXRzIDIwOjYgKi8KLQlpbnQgY29tbWFuZDo4OwkJLyogbWVzc2FnZSB0eXBlICovCi0JLyogYml0cyAyODoyMSAqLwotCQkJCS8qIDB4Mzg6IFNOM25ldCBFbmRQb2ludCBNZXNzYWdlICovCi0JaW50IHJzdmRfMTozOwkJLyogbXVzdCBiZSB6ZXJvICovCi0JLyogYml0cyAzMToyOSAqLwotCQkJCS8qIGludCB3aWxsIGFsaWduIG9uIDMyIGJpdHMgKi8KLQlpbnQgcnN2ZF8yOjk7CQkvKiBtdXN0IGJlIHplcm8gKi8KLQkvKiBiaXRzIDQwOjMyICovCi0JCQkJLyogU3VwcGxfQSBpcyA1Ni00MSAqLwotCWludCBwYXlsb2FkXzJhOjg7CS8qIGJlY29tZXMgYnl0ZSAxNiBvZiBtc2cgKi8KLQkvKiBiaXRzIDQ4OjQxICovCS8qIG5vdCBjdXJyZW50bHkgdXNpbmcgKi8KLQlpbnQgcGF5bG9hZF8yYjo4OwkvKiBiZWNvbWVzIGJ5dGUgMTcgb2YgbXNnICovCi0JLyogYml0cyA1Njo0OSAqLwkvKiBub3QgY3VycmVudGx5IHVzaW5nICovCi0JCQkJLyogQWRkcmVzcyBmaWVsZCAoOTY6NTcpIGlzIG5ldmVyIHVzZWQgYXMgYW4KLQkJCQkgICBhZGRyZXNzICh0aGVzZSBhcmUgYWRkcmVzcyBiaXRzIDQyOjMpICovCi0JaW50IHJzdmRfMzoxOwkJLyogbXVzdCBiZSB6ZXJvICovCi0JLyogYml0IDU3ICovCi0JCQkJLyogYWRkcmVzcyBiaXRzIDI3OjQgYXJlIHBheWxvYWQgKi8KLQkJCQkvKiB0aGVzZSAyNCBiaXRzIGJlY29tZSBieXRlcyAxMi0xNCBvZiBtc2cgKi8KLQlpbnQgcmVwbGllZF90bzoxOwkvKiBzZW50IGFzIDAgYnkgdGhlIHNvdXJjZSB0byBieXRlIDEyICovCi0JLyogYml0IDU4ICovCi0KLQlpbnQgcGF5bG9hZF8xYTo1OwkvKiBub3QgY3VycmVudGx5IHVzZWQgKi8KLQkvKiBiaXRzIDYzOjU5ICovCi0JaW50IHBheWxvYWRfMWI6ODsJLyogbm90IGN1cnJlbnRseSB1c2VkICovCi0JLyogYml0cyA3MTo2NCAqLwotCWludCBwYXlsb2FkXzFjOjg7CS8qIG5vdCBjdXJyZW50bHkgdXNlZCAqLwotCS8qIGJpdHMgNzk6NzIgKi8KLQlpbnQgcGF5bG9hZF8xZDoyOwkvKiBub3QgY3VycmVudGx5IHVzZWQgKi8KLQkvKiBiaXRzIDgxOjgwICovCi0KLQlpbnQgcnN2ZF80Ojc7CQkvKiBtdXN0IGJlIHplcm8gKi8KLQkvKiBiaXRzIDg4OjgyICovCi0JaW50IHN3X2Fja19mbGFnOjE7CS8qIHNvZnR3YXJlIGFja25vd2xlZGdlIGZsYWcgKi8KLQkvKiBiaXQgODkgKi8KLQkJCQkvKiBJTlREIHRyYXNhY3Rpb25zIGF0IGRlc3RpbmF0aW9uIGFyZSB0bwotCQkJCSAgIHdhaXQgZm9yIHNvZnR3YXJlIGFja25vd2xlZGdlICovCi0JaW50IHJzdmRfNTo2OwkJLyogbXVzdCBiZSB6ZXJvICovCi0JLyogYml0cyA5NTo5MCAqLwotCWludCByc3ZkXzY6NTsJCS8qIG11c3QgYmUgemVybyAqLwotCS8qIGJpdHMgMTAwOjk2ICovCi0JaW50IGludF9ib3RoOjE7CQkvKiBpZiAxLCBpbnRlcnJ1cHQgYm90aCBzb2NrZXRzIG9uIHRoZSBibGFkZSAqLwotCS8qIGJpdCAxMDEqLwotCWludCBmYWlybmVzczozOwkJLyogdXN1YWxseSB6ZXJvICovCi0JLyogYml0cyAxMDQ6MTAyICovCi0JaW50IG11bHRpbGV2ZWw6MTsJLyogbXVsdGktbGV2ZWwgbXVsdGljYXN0IGZvcm1hdCAqLwotCS8qIGJpdCAxMDUgKi8KLQkJCQkvKiAwIGZvciBUTEI6IGVuZHBvaW50IG11bHRpLXVuaWNhc3QgbWVzc2FnZXMgKi8KLQlpbnQgY2hhaW5pbmc6MTsJCS8qIG5leHQgZGVzY3JpcHRvciBpcyBwYXJ0IG9mIHRoaXMgYWN0aXZhdGlvbiovCi0JLyogYml0IDEwNiAqLwotCWludCByc3ZkXzc6MjE7CQkvKiBtdXN0IGJlIHplcm8gKi8KLQkvKiBiaXRzIDEyNzoxMDcgKi8KLX07Ci0KLS8qCi0gKiBUaGUgYWN0aXZhdGlvbiBkZXNjcmlwdG9yOgotICogVGhlIGZvcm1hdCBvZiB0aGUgbWVzc2FnZSB0byBzZW5kLCBwbHVzIGFsbCBhY2NvbXBhbnlpbmcgY29udHJvbAotICogU2hvdWxkIGJlIDY0IGJ5dGVzCi0gKi8KLXN0cnVjdCBiYXVfZGVzYyB7Ci0Jc3RydWN0IGJhdV90YXJnZXRfbm9kZW1hc2sgZGlzdHJpYnV0aW9uOwotCS8qCi0JICogbWVzc2FnZSB0ZW1wbGF0ZSwgY29uc2lzdGluZyBvZiBoZWFkZXIgYW5kIHBheWxvYWQ6Ci0JICovCi0Jc3RydWN0IGJhdV9tc2dfaGVhZGVyIGhlYWRlcjsKLQlzdHJ1Y3QgYmF1X21zZ19wYXlsb2FkIHBheWxvYWQ7Ci19OwotLyoKLSAqICAgLXBheWxvYWQtLSAgICAtLS0tLS0tLS1oZWFkZXItLS0tLS0KLSAqICAgYnl0ZXMgMC0xMSAgICBiaXRzIDQxLTU2ICBiaXRzIDU4LTgxCi0gKiAgICAgICBBICAgICAgICAgICBCICAoMikgICAgICBDICgzKQotICoKLSAqICAgICAgICAgICAgQS9CL0MgYXJlIG1vdmVkIHRvOgotICogICAgICAgQSAgICAgICAgICAgIEMgICAgICAgICAgQgotICogICBieXRlcyAwLTExICBieXRlcyAxMi0xNCAgYnl0ZXMgMTYtMTcgIChieXRlIDE1IGZpbGxlZCBpbiBieSBodyBhcyB2ZWN0b3IpCi0gKiAgIC0tLS0tLS0tLS0tLXBheWxvYWQgcXVldWUtLS0tLS0tLS0tLQotICovCi0KLS8qCi0gKiBUaGUgcGF5bG9hZCBxdWV1ZSBvbiB0aGUgZGVzdGluYXRpb24gc2lkZSBpcyBhbiBhcnJheSBvZiB0aGVzZS4KLSAqIFdpdGggQkFVX01JU0NfQ09OVFJPTCBzZXQgZm9yIHNvZnR3YXJlIGFja25vd2xlZGdlIG1vZGUsIHRoZSBtZXNzYWdlcwotICogYXJlIDMyIGJ5dGVzICgyIG1pY3JvcGFja2V0cykgKDI1NiBiaXRzKSBpbiBsZW5ndGgsIGJ1dCBjb250YWluIG9ubHkgMTcKLSAqIGJ5dGVzIG9mIHVzYWJsZSBkYXRhLCBpbmNsdWRpbmcgdGhlIHN3IGFjayB2ZWN0b3IgaW4gYnl0ZSAxNSAoYml0cyAxMjc6MTIwKQotICogKDEyIGJ5dGVzIGNvbWUgZnJvbSBiYXVfbXNnX3BheWxvYWQsIDMgZnJvbSBwYXlsb2FkXzEsIDIgZnJvbQotICogIHN3X2Fja192ZWN0b3IgYW5kIHBheWxvYWRfMikKLSAqICJFbmFibGluZyBTb2Z0d2FyZSBBY2tub3dsZWRnbWVudCBtb2RlIChzZWUgU2VjdGlvbiA0LjMuMyBTb2Z0d2FyZQotICogIEFja25vd2xlZGdlIFByb2Nlc3NpbmcpIGFsc28gc2VsZWN0cyAzMiBieXRlICgxNyBieXRlcyB1c2FibGUpIHBheWxvYWQKLSAqICBvcGVyYXRpb24uIgotICovCi1zdHJ1Y3QgYmF1X3BheWxvYWRfcXVldWVfZW50cnkgewotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsJCS8qIHNpZ25pZmllcyBhIHBhZ2Ugb3IgYWxsIFRMQidzCi0JCQkJCQlvZiB0aGUgY3B1ICovCi0JLyogNjQgYml0cywgYnl0ZXMgMC03ICovCi0KLQl1bnNpZ25lZCBzaG9ydCBzZW5kaW5nX2NwdTsJLyogY3B1IHRoYXQgc2VudCB0aGUgbWVzc2FnZSAqLwotCS8qIDE2IGJpdHMsIGJ5dGVzIDgtOSAqLwotCi0JdW5zaWduZWQgc2hvcnQgYWNrbm93bGVkZ2VfY291bnQ7IC8qIGZpbGxlZCBpbiBieSBkZXN0aW5hdGlvbiAqLwotCS8qIDE2IGJpdHMsIGJ5dGVzIDEwLTExICovCi0KLQl1bnNpZ25lZCBzaG9ydCByZXBsaWVkX3RvOjE7CS8qIHNlbnQgYXMgMCBieSB0aGUgc291cmNlICovCi0JLyogMSBiaXQgKi8KLQl1bnNpZ25lZCBzaG9ydCB1bnVzZWQxOjc7ICAgICAgIC8qIG5vdCBjdXJyZW50bHkgdXNpbmcgKi8KLQkvKiA3IGJpdHM6IGJ5dGUgMTIpICovCi0KLQl1bnNpZ25lZCBjaGFyIHVudXNlZDJbMl07CS8qIG5vdCBjdXJyZW50bHkgdXNpbmcgKi8KLQkvKiBieXRlcyAxMy0xNCAqLwotCi0JdW5zaWduZWQgY2hhciBzd19hY2tfdmVjdG9yOwkvKiBmaWxsZWQgaW4gYnkgdGhlIGhhcmR3YXJlICovCi0JLyogYnl0ZSAxNSAoYml0cyAxMjc6MTIwKSAqLwotCi0JdW5zaWduZWQgY2hhciB1bnVzZWQ0WzNdOwkvKiBub3QgY3VycmVudGx5IHVzaW5nIGJ5dGVzIDE3LTE5ICovCi0JLyogYnl0ZXMgMTctMTkgKi8KLQotCWludCBudW1iZXJfb2ZfY3B1czsJCS8qIGZpbGxlZCBpbiBhdCBkZXN0aW5hdGlvbiAqLwotCS8qIDMyIGJpdHMsIGJ5dGVzIDIwLTIzIChhbGlnbmVkKSAqLwotCi0JdW5zaWduZWQgY2hhciB1bnVzZWQ1WzhdOyAgICAgICAvKiBub3QgdXNpbmcgKi8KLQkvKiBieXRlcyAyNC0zMSAqLwotfTsKLQotLyoKLSAqIG9uZSBmb3IgZXZlcnkgc2xvdCBpbiB0aGUgZGVzdGluYXRpb24gcGF5bG9hZCBxdWV1ZQotICovCi1zdHJ1Y3QgYmF1X21zZ19zdGF0dXMgewotCXN0cnVjdCBiYXVfbG9jYWxfY3B1bWFzayBzZWVuX2J5OwkvKiBtYXAgb2YgY3B1J3MgKi8KLX07Ci0KLS8qCi0gKiBvbmUgZm9yIGV2ZXJ5IHNsb3QgaW4gdGhlIGRlc3RpbmF0aW9uIHNvZnR3YXJlIGFjayByZXNvdXJjZXMKLSAqLwotc3RydWN0IGJhdV9zd19hY2tfc3RhdHVzIHsKLQlzdHJ1Y3QgYmF1X3BheWxvYWRfcXVldWVfZW50cnkgKm1zZzsJLyogYXNzb2NpYXRlZCBtZXNzYWdlICovCi0JaW50IHdhdGNoZXI7CQkJCS8qIGNwdSBtb25pdG9yaW5nLCBvciAtMSAqLwotfTsKLQotLyoKLSAqIG9uZSBvbiBldmVyeSBub2RlIGFuZCBwZXItY3B1OyB0byBsb2NhdGUgdGhlIHNvZnR3YXJlIHRhYmxlcwotICovCi1zdHJ1Y3QgYmF1X2NvbnRyb2wgewotCXN0cnVjdCBiYXVfZGVzYyAqZGVzY3JpcHRvcl9iYXNlOwotCXN0cnVjdCBiYXVfcGF5bG9hZF9xdWV1ZV9lbnRyeSAqYmF1X21zZ19oZWFkOwotCXN0cnVjdCBiYXVfcGF5bG9hZF9xdWV1ZV9lbnRyeSAqdmFfcXVldWVfZmlyc3Q7Ci0Jc3RydWN0IGJhdV9wYXlsb2FkX3F1ZXVlX2VudHJ5ICp2YV9xdWV1ZV9sYXN0OwotCXN0cnVjdCBiYXVfbXNnX3N0YXR1cyAqbXNnX3N0YXR1c2VzOwotCWludCAqd2F0Y2hpbmc7IC8qIHBvaW50ZXIgdG8gYXJyYXkgKi8KLX07Ci0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgcGVyX2NwdSBmb3IgVVYgVExCIHNob290ZG93biBzdGF0aXN0aWNzLgotICovCi1zdHJ1Y3QgcHRjX3N0YXRzIHsKLQl1bnNpZ25lZCBsb25nIHB0Y19pOwkvKiBudW1iZXIgb2YgSVBJLXN0eWxlIGZsdXNoZXMgKi8KLQl1bnNpZ25lZCBsb25nIHJlcXVlc3RvcjsJLyogbnVtYmVyIG9mIG5vZGVzIHRoaXMgY3B1IHNlbnQgdG8gKi8KLQl1bnNpZ25lZCBsb25nIHJlcXVlc3RlZTsJLyogdGltZXMgY3B1IHdhcyByZW1vdGVseSByZXF1ZXN0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIGFsbHRsYjsJLyogdGltZXMgYWxsIHRsYidzIG9uIHRoaXMgY3B1IHdlcmUgZmx1c2hlZCAqLwotCXVuc2lnbmVkIGxvbmcgb25ldGxiOwkvKiB0aW1lcyBqdXN0IG9uZSB0bGIgb24gdGhpcyBjcHUgd2FzIGZsdXNoZWQgKi8KLQl1bnNpZ25lZCBsb25nIHNfcmV0cnk7CS8qIHJldHJpZXMgb24gc291cmNlIHNpZGUgdGltZW91dHMgKi8KLQl1bnNpZ25lZCBsb25nIGRfcmV0cnk7CS8qIHJldHJpZXMgb24gZGVzdGluYXRpb24gc2lkZSB0aW1lb3V0cyAqLwotCXVuc2lnbmVkIGxvbmcgc2ZsdXNoOwkvKiBjeWNsZXMgc3BlbnQgaW4gdXZfZmx1c2hfdGxiX290aGVycyAqLwotCXVuc2lnbmVkIGxvbmcgZGZsdXNoOwkvKiBjeWNsZXMgc3BlbnQgb24gZGVzdGluYXRpb24gc2lkZSAqLwotCXVuc2lnbmVkIGxvbmcgcmV0cmllc29rOyAvKiBzdWNjZXNzZXMgb24gcmV0cmllcyAqLwotCXVuc2lnbmVkIGxvbmcgbm9tc2c7CS8qIGludGVycnVwdHMgd2l0aCBubyBtZXNzYWdlICovCi0JdW5zaWduZWQgbG9uZyBtdWx0bXNnOwkvKiBpbnRlcnJ1cHRzIHdpdGggbXVsdGlwbGUgbWVzc2FnZXMgKi8KLQl1bnNpZ25lZCBsb25nIG50YXJnZXRlZDsvKiBub2RlcyB0YXJnZXRlZCAqLwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgYmF1X25vZGVfaXNzZXQoaW50IG5vZGUsIHN0cnVjdCBiYXVfdGFyZ2V0X25vZGVtYXNrICpkc3RwKQotewotCXJldHVybiBjb25zdGFudF90ZXN0X2JpdChub2RlLCAmZHN0cC0+Yml0c1swXSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYmF1X25vZGVfc2V0KGludCBub2RlLCBzdHJ1Y3QgYmF1X3RhcmdldF9ub2RlbWFzayAqZHN0cCkKLXsKLQlfX3NldF9iaXQobm9kZSwgJmRzdHAtPmJpdHNbMF0pOwotfQotc3RhdGljIGlubGluZSB2b2lkIGJhdV9ub2Rlc19jbGVhcihzdHJ1Y3QgYmF1X3RhcmdldF9ub2RlbWFzayAqZHN0cCwgaW50IG5iaXRzKQotewotCWJpdG1hcF96ZXJvKCZkc3RwLT5iaXRzWzBdLCBuYml0cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiYXVfY3B1Yml0c19jbGVhcihzdHJ1Y3QgYmF1X2xvY2FsX2NwdW1hc2sgKmRzdHAsIGludCBuYml0cykKLXsKLQliaXRtYXBfemVybygmZHN0cC0+Yml0cywgbmJpdHMpOwotfQotCi0jZGVmaW5lIGNwdWJpdF9pc3NldChjcHUsIGJhdV9sb2NhbF9jcHVtYXNrKSBcCi0JdGVzdF9iaXQoKGNwdSksIChiYXVfbG9jYWxfY3B1bWFzaykuYml0cykKLQotZXh0ZXJuIGludCB1dl9mbHVzaF90bGJfb3RoZXJzKGNwdW1hc2tfdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgdXZfYmF1X21lc3NhZ2VfaW50cjEodm9pZCk7Ci1leHRlcm4gdm9pZCB1dl9iYXVfdGltZW91dF9pbnRyMSh2b2lkKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1VWX19VVl9CQVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3V2L3V2X2h1Yi5oIGIvaW5jbHVkZS9hc20teDg2L3V2L3V2X2h1Yi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGI1YjAxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91di91dl9odWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1NCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogU0dJIFVWIGFyY2hpdGVjdHVyYWwgZGVmaW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19VVl9fVVZfSFVCX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVVZfX1VWX0hVQl9ICi0KLSNpbmNsdWRlIDxsaW51eC9udW1hLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgotCi0KLS8qCi0gKiBBZGRyZXNzaW5nIFRlcm1pbm9sb2d5Ci0gKgotICoJTSAgICAgICAtIFRoZSBsb3cgTSBiaXRzIG9mIGEgcGh5c2ljYWwgYWRkcmVzcyByZXByZXNlbnQgdGhlIG9mZnNldAotICoJCSAgaW50byB0aGUgYmxhZGUgbG9jYWwgbWVtb3J5LiBSQU0gbWVtb3J5IG9uIGEgYmxhZGUgaXMgcGh5c2ljYWxseQotICoJCSAgY29udGlndW91cyAoYWx0aG91Z2ggdmFyaW91cyBJTyBzcGFjZXMgbWF5IHB1bmNoIGhvbGVzIGluCi0gKgkJICBpdCkuLgotICoKLSAqIAlOCS0gTnVtYmVyIG9mIGJpdHMgaW4gdGhlIG5vZGUgcG9ydGlvbiBvZiBhIHNvY2tldCBwaHlzaWNhbAotICogCQkgIGFkZHJlc3MuCi0gKgotICogCU5BU0lEICAgLSBuZXR3b3JrIElEIG9mIGEgcm91dGVyLCBNYnJpY2sgb3IgQ2JyaWNrLiBOYXNpZCB2YWx1ZXMgb2YKLSAqIAkgCSAgcm91dGVycyBhbHdheXMgaGF2ZSBsb3cgYml0IG9mIDEsIEMvTUJyaWNrcyBoYXZlIGxvdyBiaXQKLSAqIAkJICBlcXVhbCB0byAwLiBNb3N0IGFkZHJlc3NpbmcgbWFjcm9zIHRoYXQgdGFyZ2V0IFVWIGh1YiBjaGlwcwotICogCQkgIHJpZ2h0IHNoaWZ0IHRoZSBOQVNJRCBieSAxIHRvIGV4Y2x1ZGUgdGhlIGFsd2F5cy16ZXJvIGJpdC4KLSAqIAkJICBOQVNJRHMgY29udGFpbiB1cCB0byAxNSBiaXRzLgotICoKLSAqCUdOT0RFICAgLSBOQVNJRCByaWdodCBzaGlmdGVkIGJ5IDEgYml0LiBNb3N0IG1tcnMgY29udGFpbiBnbm9kZXMgaW5zdGVhZAotICoJCSAgb2YgbmFzaWRzLgotICoKLSAqIAlQTk9ERSAgIC0gdGhlIGxvdyBOIGJpdHMgb2YgdGhlIEdOT0RFLiBUaGUgUE5PREUgaXMgdGhlIG1vc3QgdXNlZnVsIHZhcmlhbnQKLSAqIAkJICBvZiB0aGUgbmFzaWQgZm9yIHNvY2tldCB1c2FnZS4KLSAqCi0gKgotICogIE51bWFMaW5rIEdsb2JhbCBQaHlzaWNhbCBBZGRyZXNzIEZvcm1hdDoKLSAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogIHwwMC4uMDAwfCAgICAgIEdOT0RFICAgICAgICAgICAgIHwgICAgICBOb2RlT2Zmc2V0ICAgICB8Ci0gKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqICAgICAgICAgIHw8LS0tLS0tLTUzIC0gTSBiaXRzIC0tLT58PC0tLS0tLS0tTSBiaXRzIC0tLS0tPgotICoKLSAqCU0gLSBudW1iZXIgb2Ygbm9kZSBvZmZzZXQgYml0cyAoMzUgLi4gNDApCi0gKgotICoKLSAqICBNZW1vcnkvVVYtSFVCIFByb2Nlc3NvciBTb2NrZXQgQWRkcmVzcyBGb3JtYXQ6Ci0gKiAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqICB8MDAuLjAwMDAwMDAwMDAwMHwgICBQTk9ERSAgICAgICB8ICAgICAgTm9kZU9mZnNldCAgICAgfAotICogICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICAgICA8LS0tIE4gYml0cyAtLS0+fDwtLS0tLS0tLU0gYml0cyAtLS0tLT4KLSAqCi0gKglNIC0gbnVtYmVyIG9mIG5vZGUgb2Zmc2V0IGJpdHMgKDM1IC4uIDQwKQotICoJTiAtIG51bWJlciBvZiBQTk9ERSBiaXRzICgwIC4uIDEwKQotICoKLSAqCQlOb3RlOiBNICsgTiBjYW5ub3QgY3VycmVudGx5IGV4Y2VlZCA0NCAoeDg2XzY0KSBvciA0NiAoSUE2NCkuCi0gKgkJVGhlIGFjdHVhbCB2YWx1ZXMgYXJlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW50IGFuZCBhcmUgc2V0IGF0Ci0gKgkJYm9vdCB0aW1lLiBNICYgTiB2YWx1ZXMgYXJlIHNldCBieSB0aGUgaGFyZHdhcmUvQklPUyBhdCBib290LgotICoKLSAqCi0gKiBBUElDSUQgZm9ybWF0Ci0gKiAJTk9URSEhISEhISBUaGlzIGlzIHRoZSBjdXJyZW50IGZvcm1hdCBvZiB0aGUgQVBJQ0lELiBIb3dldmVyLCBjb2RlCi0gKiAJc2hvdWxkIGFzc3VtZSB0aGF0IHRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gVXNlIGZ1bmN0aW9ucwotICogCWluIHRoaXMgZmlsZSBmb3IgYWxsIEFQSUNJRCBiaXQgbWFuaXB1bGF0aW9ucyBhbmQgY29udmVyc2lvbi4KLSAqCi0gKiAJCTExMTExMTAwMDAwMDAwMDAKLSAqIAkJNTQzMjEwOTg3NjU0MzIxMAotICoJCXBwcHBwcHBwcHBsYzBjY2gKLSAqCQlzc3Nzc3Nzc3NzcwotICoKLSAqCQkJcCAgPSBwbm9kZSBiaXRzCi0gKgkJCWwgPSAgc29ja2V0IG51bWJlciBvbiBib2FyZAotICoJCQljICA9IGNvcmUKLSAqCQkJaCAgPSBoeXBlcnRocmVhZAotICoJCQlzICA9IGJpdHMgdGhhdCBhcmUgaW4gdGhlIFNPQ0tFVF9JRCBDU1IKLSAqCi0gKglOb3RlOiBQcm9jZXNzb3Igb25seSBzdXBwb3J0cyAxMiBiaXRzIGluIHRoZSBBUElDSUQgcmVnaXN0ZXIuIFRoZSBBQ1BJCi0gKgkgICAgICB0YWJsZXMgaG9sZCBhbGwgMTYgYml0cy4gU29mdHdhcmUgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhpcy4KLSAqCi0gKiAJICAgICAgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCByZWZlcmVuY2VzIHRvIEFQSUNJRCByZWZlciB0bwotICogCSAgICAgIHRoZSBGVUxMIHZhbHVlIGNvbnRhaW5lZCBpbiBBQ1BJIHRhYmxlcywgbm90IHRoZSBzdWJzZXQgaW4gdGhlCi0gKiAJICAgICAgcHJvY2Vzc29yIEFQSUNJRCByZWdpc3Rlci4KLSAqLwotCi0KLS8qCi0gKiBNYXhpbXVtIG51bWJlciBvZiBicmlja3MgaW4gYWxsIHBhcnRpdGlvbnMgYW5kIGluIGFsbCBjb2hlcmVuY3kgZG9tYWlucy4KLSAqIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBicmlja3MgYWNjZXNzaWJsZSBpbiB0aGUgbnVtYWxpbmsgZmFicmljLiBJdAotICogaW5jbHVkZXMgYWxsIEMgJiBNIGJyaWNrcy4gUm91dGVycyBhcmUgTk9UIGluY2x1ZGVkLgotICoKLSAqIFRoaXMgdmFsdWUgaXMgYWxzbyB0aGUgdmFsdWUgb2YgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vbi1yb3V0ZXIgTkFTSURzCi0gKiBpbiB0aGUgbnVtYWxpbmsgZmFicmljLgotICoKLSAqIE5PVEU6IGEgYnJpY2sgbWF5IGNvbnRhaW4gMSBvciAyIE9TIG5vZGVzLiBEb24ndCBnZXQgdGhlc2UgY29uZnVzZWQuCi0gKi8KLSNkZWZpbmUgVVZfTUFYX05VTUFMSU5LX0JMQURFUwkxNjM4NAotCi0vKgotICogTWF4aW11bSBudW1iZXIgb2YgQy9NYnJpY2tzIHdpdGhpbiBhIHNvZnR3YXJlIFNTSSAoaGFyZHdhcmUgbWF5IHN1cHBvcnQKLSAqIG1vcmUpLgotICovCi0jZGVmaW5lIFVWX01BWF9TU0lfQkxBREVTCTI1NgotCi0vKgotICogVGhlIGxhcmdlc3QgcG9zc2libGUgTkFTSUQgb2YgYSBDIG9yIE0gYnJpY2sgKCsgMikKLSAqLwotI2RlZmluZSBVVl9NQVhfTkFTSURfVkFMVUUJKFVWX01BWF9OVU1BTElOS19OT0RFUyAqIDIpCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXR0cmlidXRlcyBvZiB0aGUgSFVCIGNoaXAuIFRoZXNlIGF0dHJpYnV0ZXMgYXJlCi0gKiBmcmVxdWVudGx5IHJlZmVyZW5jZWQgYW5kIGFyZSBrZXB0IGluIHRoZSBwZXItY3B1IGRhdGEgYXJlYXMgb2YgZWFjaCBjcHUuCi0gKiBUaGV5IGFyZSBrZXB0IHRvZ2V0aGVyIGluIGEgc3RydWN0IHRvIG1pbmltaXplIGNhY2hlIG1pc3Nlcy4KLSAqLwotc3RydWN0IHV2X2h1Yl9pbmZvX3MgewotCXVuc2lnbmVkIGxvbmcJZ2xvYmFsX21tcl9iYXNlOwotCXVuc2lnbmVkIGxvbmcJZ3BhX21hc2s7Ci0JdW5zaWduZWQgbG9uZwlnbm9kZV91cHBlcjsKLQl1bnNpZ25lZCBsb25nCWxvd21lbV9yZW1hcF90b3A7Ci0JdW5zaWduZWQgbG9uZwlsb3dtZW1fcmVtYXBfYmFzZTsKLQl1bnNpZ25lZCBzaG9ydAlwbm9kZTsKLQl1bnNpZ25lZCBzaG9ydAlwbm9kZV9tYXNrOwotCXVuc2lnbmVkIHNob3J0CWNvaGVyZW5jeV9kb21haW5fbnVtYmVyOwotCXVuc2lnbmVkIHNob3J0CW51bWFfYmxhZGVfaWQ7Ci0JdW5zaWduZWQgY2hhcglibGFkZV9wcm9jZXNzb3JfaWQ7Ci0JdW5zaWduZWQgY2hhcgltX3ZhbDsKLQl1bnNpZ25lZCBjaGFyCW5fdmFsOwotfTsKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdXZfaHViX2luZm9fcywgX191dl9odWJfaW5mbyk7Ci0jZGVmaW5lIHV2X2h1Yl9pbmZvIAkJKCZfX2dldF9jcHVfdmFyKF9fdXZfaHViX2luZm8pKQotI2RlZmluZSB1dl9jcHVfaHViX2luZm8oY3B1KQkoJnBlcl9jcHUoX191dl9odWJfaW5mbywgY3B1KSkKLQotLyoKLSAqIExvY2FsICYgR2xvYmFsIE1NUiBzcGFjZSBtYWNyb3MuCi0gKiAJTm90ZTogbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIE9OTFkgYnkgaW5saW5lIGZ1bmN0aW9ucwotICogCWluIHRoaXMgZmlsZSAtIG5vdCBieSBvdGhlciBrZXJuZWwgY29kZS4KLSAqIAkJbiAtICBOQVNJRCAoZnVsbCAxNS1iaXQgZ2xvYmFsIG5hc2lkKQotICogCQlnIC0gIEdOT0RFIChmdWxsIDE1LWJpdCBnbG9iYWwgbmFzaWQsIHJpZ2h0IHNoaWZ0ZWQgMSkKLSAqIAkJcCAtICBQTk9ERSAobG9jYWwgcGFydCBvZiBuc2lkcywgcmlnaHQgc2hpZnRlZCAxKQotICovCi0jZGVmaW5lIFVWX05BU0lEX1RPX1BOT0RFKG4pCQkoKChuKSA+PiAxKSAmIHV2X2h1Yl9pbmZvLT5wbm9kZV9tYXNrKQotI2RlZmluZSBVVl9QTk9ERV9UT19OQVNJRChwKQkJKCgocCkgPDwgMSkgfCB1dl9odWJfaW5mby0+Z25vZGVfdXBwZXIpCi0KLSNkZWZpbmUgVVZfTE9DQUxfTU1SX0JBU0UJCTB4ZjQwMDAwMDBVTAotI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfQkFTRQkJMHhmODAwMDAwMFVMCi0jZGVmaW5lIFVWX0dMT0JBTF9NTVI2NF9CQVNFCQkodXZfaHViX2luZm8tPmdsb2JhbF9tbXJfYmFzZSkKLSNkZWZpbmUgVVZfTE9DQUxfTU1SX1NJWkUJCSg2NFVMICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIFVWX0dMT0JBTF9NTVIzMl9TSVpFCQkoNjRVTCAqIDEwMjQgKiAxMDI0KQotCi0jZGVmaW5lIFVWX0dMT0JBTF9NTVIzMl9QTk9ERV9TSElGVAkxNQotI2RlZmluZSBVVl9HTE9CQUxfTU1SNjRfUE5PREVfU0hJRlQJMjYKLQotI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfUE5PREVfQklUUyhwKQkoKHApIDw8IChVVl9HTE9CQUxfTU1SMzJfUE5PREVfU0hJRlQpKQotCi0jZGVmaW5lIFVWX0dMT0JBTF9NTVI2NF9QTk9ERV9CSVRTKHApCQkJCQlcCi0JKCh1bnNpZ25lZCBsb25nKShwKSA8PCBVVl9HTE9CQUxfTU1SNjRfUE5PREVfU0hJRlQpCi0KLSNkZWZpbmUgVVZfQVBJQ19QTk9ERV9TSElGVAk2Ci0KLS8qCi0gKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMsIHNvY2tldCBsb2NhbCBwaHlzaWNhbAotICogYWRkcmVzc2VzLCBhbmQgVVYgZ2xvYmFsIHBoeXNpY2FsIGFkZHJlc3Nlcy4KLSAqIAlOb3RlOiB1c2UgdGhlIHN0YW5kYXJkIF9fcGEoKSAmIF9fdmEoKSBtYWNyb3MgZm9yIGNvbnZlcnRpbmcKLSAqIAkgICAgICBiZXR3ZWVuIHNvY2tldCB2aXJ0dWFsIGFuZCBzb2NrZXQgcGh5c2ljYWwgYWRkcmVzc2VzLgotICovCi0KLS8qIHNvY2tldCBwaHlzIFJBTSAtLT4gVVYgZ2xvYmFsIHBoeXNpY2FsIGFkZHJlc3MgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9zb2NfcGh5c19yYW1fdG9fZ3BhKHVuc2lnbmVkIGxvbmcgcGFkZHIpCi17Ci0JaWYgKHBhZGRyIDwgdXZfaHViX2luZm8tPmxvd21lbV9yZW1hcF90b3ApCi0JCXBhZGRyICs9IHV2X2h1Yl9pbmZvLT5sb3dtZW1fcmVtYXBfYmFzZTsKLQlyZXR1cm4gcGFkZHIgfCB1dl9odWJfaW5mby0+Z25vZGVfdXBwZXI7Ci19Ci0KLQotLyogc29ja2V0IHZpcnR1YWwgLS0+IFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfZ3BhKHZvaWQgKnYpCi17Ci0JcmV0dXJuIF9fcGEodikgfCB1dl9odWJfaW5mby0+Z25vZGVfdXBwZXI7Ci19Ci0KLS8qIHNvY2tldCB2aXJ0dWFsIC0tPiBVViBnbG9iYWwgcGh5c2ljYWwgYWRkcmVzcyAqLwotc3RhdGljIGlubGluZSB2b2lkICp1dl92Z3BhKHZvaWQgKnYpCi17Ci0JcmV0dXJuICh2b2lkICopdXZfZ3BhKHYpOwotfQotCi0vKiBVViBnbG9iYWwgcGh5c2ljYWwgYWRkcmVzcyAtLT4gc29ja2V0IHZpcnR1YWwgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqdXZfdmEodW5zaWduZWQgbG9uZyBncGEpCi17Ci0JcmV0dXJuIF9fdmEoZ3BhICYgdXZfaHViX2luZm8tPmdwYV9tYXNrKTsKLX0KLQotLyogcG5vZGUsIG9mZnNldCAtLT4gc29ja2V0IHZpcnR1YWwgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqdXZfcG5vZGVfb2Zmc2V0X3RvX3ZhZGRyKGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0JcmV0dXJuIF9fdmEoKCh1bnNpZ25lZCBsb25nKXBub2RlIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCkgfCBvZmZzZXQpOwotfQotCi0KLS8qCi0gKiBFeHRyYWN0IGEgUE5PREUgZnJvbSBhbiBBUElDSUQgKGZ1bGwgYXBpY2lkLCBub3QgcHJvY2Vzc29yIHN1YnNldCkKLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXZfYXBpY2lkX3RvX3Bub2RlKGludCBhcGljaWQpCi17Ci0JcmV0dXJuIChhcGljaWQgPj4gVVZfQVBJQ19QTk9ERV9TSElGVCk7Ci19Ci0KLS8qCi0gKiBBY2Nlc3MgZ2xvYmFsIE1NUnMgdXNpbmcgdGhlIGxvdyBtZW1vcnkgTU1SMzIgc3BhY2UuIFRoaXMgcmVnaW9uIHN1cHBvcnRzCi0gKiBmYXN0ZXIgTU1SIGFjY2VzcyBidXQgbm90IGFsbCBNTVJzIGFyZSBhY2Nlc3NpYmxlIGluIHRoaXMgc3BhY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MoaW50IHBub2RlLAotCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXJldHVybiBfX3ZhKFVWX0dMT0JBTF9NTVIzMl9CQVNFIHwKLQkJICAgICAgIFVWX0dMT0JBTF9NTVIzMl9QTk9ERV9CSVRTKHBub2RlKSB8IG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9nbG9iYWxfbW1yMzIoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JKnV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKHBub2RlLCBvZmZzZXQpID0gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9nbG9iYWxfbW1yMzIoaW50IHBub2RlLAotCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXJldHVybiAqdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MocG5vZGUsIG9mZnNldCk7Ci19Ci0KLS8qCi0gKiBBY2Nlc3MgR2xvYmFsIE1NUiBzcGFjZSB1c2luZyB0aGUgTU1SIHNwYWNlIGxvY2F0ZWQgYXQgdGhlIHRvcCBvZiBwaHlzaWNhbAotICogbWVtb3J5LgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKGludCBwbm9kZSwKLQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlyZXR1cm4gX192YShVVl9HTE9CQUxfTU1SNjRfQkFTRSB8Ci0JCSAgICBVVl9HTE9CQUxfTU1SNjRfUE5PREVfQklUUyhwbm9kZSkgfCBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfZ2xvYmFsX21tcjY0KGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKHBub2RlLCBvZmZzZXQpID0gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9nbG9iYWxfbW1yNjQoaW50IHBub2RlLAotCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXJldHVybiAqdXZfZ2xvYmFsX21tcjY0X2FkZHJlc3MocG5vZGUsIG9mZnNldCk7Ci19Ci0KLS8qCi0gKiBBY2Nlc3MgaHViIGxvY2FsIE1NUnMuIEZhc3RlciB0aGFuIHVzaW5nIGdsb2JhbCBzcGFjZSBidXQgb25seSBsb2NhbCBNTVJzCi0gKiBhcmUgYWNjZXNzaWJsZS4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICp1dl9sb2NhbF9tbXJfYWRkcmVzcyh1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlyZXR1cm4gX192YShVVl9MT0NBTF9NTVJfQkFTRSB8IG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9yZWFkX2xvY2FsX21tcih1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlyZXR1cm4gKnV2X2xvY2FsX21tcl9hZGRyZXNzKG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9sb2NhbF9tbXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCSp1dl9sb2NhbF9tbXJfYWRkcmVzcyhvZmZzZXQpID0gdmFsOwotfQotCi0vKgotICogU3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBjcHUsIG5vZGUsIHBub2RlLCBhbmQgYmxhZGUKLSAqIG51bWJlcnMuCi0gKi8KLXN0cnVjdCB1dl9ibGFkZV9pbmZvIHsKLQl1bnNpZ25lZCBzaG9ydAlucl9wb3NzaWJsZV9jcHVzOwotCXVuc2lnbmVkIHNob3J0CW5yX29ubGluZV9jcHVzOwotCXVuc2lnbmVkIHNob3J0CXBub2RlOwotfTsKLWV4dGVybiBzdHJ1Y3QgdXZfYmxhZGVfaW5mbyAqdXZfYmxhZGVfaW5mbzsKLWV4dGVybiBzaG9ydCAqdXZfbm9kZV90b19ibGFkZTsKLWV4dGVybiBzaG9ydCAqdXZfY3B1X3RvX2JsYWRlOwotZXh0ZXJuIHNob3J0IHV2X3Bvc3NpYmxlX2JsYWRlczsKLQotLyogQmxhZGUtbG9jYWwgY3B1IG51bWJlciBvZiBjdXJyZW50IGNwdS4gTnVtYmVyZWQgMCAuLiA8IyBjcHVzIG9uIHRoZSBibGFkZT4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHV2X2JsYWRlX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCXJldHVybiB1dl9odWJfaW5mby0+YmxhZGVfcHJvY2Vzc29yX2lkOwotfQotCi0vKiBCbGFkZSBudW1iZXIgb2YgY3VycmVudCBjcHUuIE51bW5iZXJlZCAwIC4uIDwjYmxhZGVzIC0xPiAqLwotc3RhdGljIGlubGluZSBpbnQgdXZfbnVtYV9ibGFkZV9pZCh2b2lkKQotewotCXJldHVybiB1dl9odWJfaW5mby0+bnVtYV9ibGFkZV9pZDsKLX0KLQotLyogQ29udmVydCBhIGNwdSBudW1iZXIgdG8gdGhlIHRoZSBVViBibGFkZSBudW1iZXIgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHV2X2NwdV90b19ibGFkZV9pZChpbnQgY3B1KQotewotCXJldHVybiB1dl9jcHVfdG9fYmxhZGVbY3B1XTsKLX0KLQotLyogQ29udmVydCBsaW51eCBub2RlIG51bWJlciB0byB0aGUgVVYgYmxhZGUgbnVtYmVyICovCi1zdGF0aWMgaW5saW5lIGludCB1dl9ub2RlX3RvX2JsYWRlX2lkKGludCBuaWQpCi17Ci0JcmV0dXJuIHV2X25vZGVfdG9fYmxhZGVbbmlkXTsKLX0KLQotLyogQ29udmVydCBhIGJsYWRlIGlkIHRvIHRoZSBQTk9ERSBvZiB0aGUgYmxhZGUgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHV2X2JsYWRlX3RvX3Bub2RlKGludCBiaWQpCi17Ci0JcmV0dXJuIHV2X2JsYWRlX2luZm9bYmlkXS5wbm9kZTsKLX0KLQotLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcG9zc2libGUgY3B1cyBvbiBhIGJsYWRlICovCi1zdGF0aWMgaW5saW5lIGludCB1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKGludCBiaWQpCi17Ci0JcmV0dXJuIHV2X2JsYWRlX2luZm9bYmlkXS5ucl9wb3NzaWJsZV9jcHVzOwotfQotCi0vKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBvbmxpbmUgY3B1cyBvbiBhIGJsYWRlICovCi1zdGF0aWMgaW5saW5lIGludCB1dl9ibGFkZV9ucl9vbmxpbmVfY3B1cyhpbnQgYmlkKQotewotCXJldHVybiB1dl9ibGFkZV9pbmZvW2JpZF0ubnJfb25saW5lX2NwdXM7Ci19Ci0KLS8qIENvbnZlcnQgYSBjcHUgaWQgdG8gdGhlIFBOT0RFIG9mIHRoZSBibGFkZSBjb250YWluaW5nIHRoZSBjcHUgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHV2X2NwdV90b19wbm9kZShpbnQgY3B1KQotewotCXJldHVybiB1dl9ibGFkZV9pbmZvW3V2X2NwdV90b19ibGFkZV9pZChjcHUpXS5wbm9kZTsKLX0KLQotLyogQ29udmVydCBhIGxpbnV4IG5vZGUgbnVtYmVyIHRvIHRoZSBQTk9ERSBvZiB0aGUgYmxhZGUgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHV2X25vZGVfdG9fcG5vZGUoaW50IG5pZCkKLXsKLQlyZXR1cm4gdXZfYmxhZGVfaW5mb1t1dl9ub2RlX3RvX2JsYWRlX2lkKG5pZCldLnBub2RlOwotfQotCi0vKiBNYXhpbXVtIHBvc3NpYmxlIG51bWJlciBvZiBibGFkZXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHV2X251bV9wb3NzaWJsZV9ibGFkZXModm9pZCkKLXsKLQlyZXR1cm4gdXZfcG9zc2libGVfYmxhZGVzOwotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVVZfX1VWX0hVQl9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di91dl9tbXJzLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvdXZfbW1ycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjAzZDg5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91di91dl9tbXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBTR0kgVVYgTU1SIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fVVZfX1VWX01NUlNfSAotI2RlZmluZSBBU01fWDg2X19VVl9fVVZfTU1SU19ICi0KLSNkZWZpbmUgVVZfTU1SX0VOQUJMRQkJKDFVTCA8PCA2MykKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfQkFVX0RBVEFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHIDB4NjE2ODBVTAotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHXzMyIDB4MDQzOAotCi0jZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfVkVDVE9SX1NIRlQgMAotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCi0jZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfRE1fU0hGVCA4Ci0jZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKLSNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCi0jZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfU1RBVFVTX1NIRlQgMTIKLSNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1BfU0hGVCAxMwotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1RfU0hGVCAxNQotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX01fU0hGVCAxNgotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX0FQSUNfSURfU0hGVCAzMgotI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAotCi11bmlvbiB1dmhfYmF1X2RhdGFfY29uZmlnX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX2JhdV9kYXRhX2NvbmZpZ19zIHsKLQl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLwotCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLwotCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9FVkVOVF9PQ0NVUlJFRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDAgMHg3MDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfMzIgMHgwMDVlOAotCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSENFUlJfU0hGVCAwCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDFVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMF9IQ0VSUl9TSEZUIDEKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjBfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDJVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMV9IQ0VSUl9TSEZUIDIKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjFfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDRVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xIX0hDRVJSX1NIRlQgMwotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xIX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA4VUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9IQ0VSUl9TSEZUIDQKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAxMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfWE5fSENFUlJfU0hGVCA1Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfWE5fSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMjBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NJX0hDRVJSX1NIRlQgNgotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NJX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDQwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9BT0VSUjBfU0hGVCA3Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwMDgwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjBfQU9FUlIwX1NIRlQgOAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMF9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDAxMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMV9BT0VSUjBfU0hGVCA5Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IxX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDIwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEhfQU9FUlIwX1NIRlQgMTAKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MSF9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDA0MDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX0FPRVJSMF9TSEZUIDExCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9YTl9BT0VSUjBfU0hGVCAxMgotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1hOX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU0lfQU9FUlIwX1NIRlQgMTMKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TSV9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0FPRVJSMV9TSEZUIDE0Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDA0MDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjBfQU9FUlIxX1NIRlQgMTUKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjBfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjFfQU9FUlIxX1NIRlQgMTYKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjFfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MSF9BT0VSUjFfU0hGVCAxNwotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xIX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDAyMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfQU9FUlIxX1NIRlQgMTgKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwNDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1hOX0FPRVJSMV9TSEZUIDE5Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfWE5fQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDgwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TSV9BT0VSUjFfU0hGVCAyMAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NJX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDEwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfVlBJX0lOVF9TSEZUIDIxCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfVlBJX0lOVF9NQVNLIDB4MDAwMDAwMDAwMDIwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU1lTVEVNX1NIVVRET1dOX0lOVF9TSEZUIDIyCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU1lTVEVNX1NIVVRET1dOX0lOVF9NQVNLIDB4MDAwMDAwMDAwMDQwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8wX1NIRlQgMjMKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzBfTUFTSyAweDAwMDAwMDAwMDA4MDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMV9TSEZUIDI0Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xX01BU0sgMHgwMDAwMDAwMDAxMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzJfU0hGVCAyNQotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMl9NQVNLIDB4MDAwMDAwMDAwMjAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8zX1NIRlQgMjYKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzNfTUFTSyAweDAwMDAwMDAwMDQwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfNF9TSEZUIDI3Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF80X01BU0sgMHgwMDAwMDAwMDA4MDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzVfU0hGVCAyOAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfNV9NQVNLIDB4MDAwMDAwMDAxMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF82X1NIRlQgMjkKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzZfTUFTSyAweDAwMDAwMDAwMjAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfN19TSEZUIDMwCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF83X01BU0sgMHgwMDAwMDAwMDQwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzhfU0hGVCAzMQotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfOF9NQVNLIDB4MDAwMDAwMDA4MDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF85X1NIRlQgMzIKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzlfTUFTSyAweDAwMDAwMDAxMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTBfU0hGVCAzMwotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTBfTUFTSyAweDAwMDAwMDAyMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTFfU0hGVCAzNAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTFfTUFTSyAweDAwMDAwMDA0MDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTJfU0hGVCAzNQotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTJfTUFTSyAweDAwMDAwMDA4MDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTNfU0hGVCAzNgotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTNfTUFTSyAweDAwMDAwMDEwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTRfU0hGVCAzNwotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTRfTUFTSyAweDAwMDAwMDIwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTVfU0hGVCAzOAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMTVfTUFTSyAweDAwMDAwMDQwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0wxX05NSV9JTlRfU0hGVCAzOQotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0wxX05NSV9JTlRfTUFTSyAweDAwMDAwMDgwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NUT1BfQ0xPQ0tfU0hGVCA0MAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NUT1BfQ0xPQ0tfTUFTSyAweDAwMDAwMTAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0FTSUNfVE9fTDFfU0hGVCA0MQotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0FTSUNfVE9fTDFfTUFTSyAweDAwMDAwMjAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0wxX1RPX0FTSUNfU0hGVCA0MgotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0wxX1RPX0FTSUNfTUFTSyAweDAwMDAwNDAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xUQ19JTlRfU0hGVCA0MwotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xUQ19JTlRfTUFTSyAweDAwMDAwODAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xBX1NFUV9UUklHR0VSX1NIRlQgNDQKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQV9TRVFfVFJJR0dFUl9NQVNLIDB4MDAwMDEwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfSVBJX0lOVF9TSEZUIDQ1Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfSVBJX0lOVF9NQVNLIDB4MDAwMDIwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UMF9TSEZUIDQ2Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UMF9NQVNLIDB4MDAwMDQwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UMV9TSEZUIDQ3Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UMV9NQVNLIDB4MDAwMDgwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UMl9TSEZUIDQ4Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UMl9NQVNLIDB4MDAwMTAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UM19TSEZUIDQ5Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfRVhUSU9fSU5UM19NQVNLIDB4MDAwMjAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUFJPRklMRV9JTlRfU0hGVCA1MAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1BST0ZJTEVfSU5UX01BU0sgMHgwMDA0MDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMwX1NIRlQgNTEKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMwX01BU0sgMHgwMDA4MDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMxX1NIRlQgNTIKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMxX01BU0sgMHgwMDEwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMyX1NIRlQgNTMKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMyX01BU0sgMHgwMDIwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMzX1NIRlQgNTQKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMzX01BU0sgMHgwMDQwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9CQVVfREFUQV9TSEZUIDU1Ci0jZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQkFVX0RBVEFfTUFTSyAweDAwODAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1BPV0VSX01BTkFHRU1FTlRfUkVRX1NIRlQgNTYKLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9QT1dFUl9NQU5BR0VNRU5UX1JFUV9NQVNLIDB4MDEwMDAwMDAwMDAwMDAwMFVMCi11bmlvbiB1dmhfZXZlbnRfb2NjdXJyZWQwX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX2V2ZW50X29jY3VycmVkMF9zIHsKLQl1bnNpZ25lZCBsb25nCWxiX2hjZXJyICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlncjBfaGNlcnIgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJZ3IxX2hjZXJyICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWxoX2hjZXJyICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlyaF9oY2VyciAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJeG5faGNlcnIgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXNpX2hjZXJyICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsYl9hb2VycjAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJZ3IwX2FvZXJyMCAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWdyMV9hb2VycjAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsaF9hb2VycjAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJcmhfYW9lcnIwICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXhuX2FvZXJyMCAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlzaV9hb2VycjAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfYW9lcnIxICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWdyMF9hb2VycjEgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlncjFfYW9lcnIxICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGhfYW9lcnIxICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXJoX2FvZXJyMSAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwl4bl9hb2VycjEgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJc2lfYW9lcnIxICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXJoX3ZwaV9pbnQgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlzeXN0ZW1fc2h1dGRvd25faW50ICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8wICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMSAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzIgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8zICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfNCAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzUgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF82ICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfNyAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzggICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF85ICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzExICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xMiAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTMgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzE0ICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xNSAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWwxX25taV9pbnQgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlzdG9wX2Nsb2NrICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJYXNpY190b19sMSAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWwxX3RvX2FzaWMgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlsdGNfaW50ICAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJbGFfc2VxX3RyaWdnZXIgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWlwaV9pbnQgICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlleHRpb19pbnQwICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJZXh0aW9faW50MSAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCWV4dGlvX2ludDIgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlleHRpb19pbnQzICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJcHJvZmlsZV9pbnQgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXJ0YzAgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlydGMxICAgICAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJcnRjMiAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXJ0YzMgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwliYXVfZGF0YSAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJcG93ZXJfbWFuYWdlbWVudF9yZXEgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNTdfNjMgICAgICAgICAgIDogIDc7ICAvKiAgICAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0VWRU5UX09DQ1VSUkVEMF9BTElBUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9BTElBUyAweDAwMDAwMDAwMDAwNzAwMDhVTAotI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0FMSUFTXzMyIDB4MDA1ZjAKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0lOVF9DTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfSU5UX0NNUEIgMHgyMjA4MFVMCi0KLSNkZWZpbmUgVVZIX0lOVF9DTVBCX1JFQUxfVElNRV9DTVBCX1NIRlQgMAotI2RlZmluZSBVVkhfSU5UX0NNUEJfUkVBTF9USU1FX0NNUEJfTUFTSyAweDAwZmZmZmZmZmZmZmZmZmZVTAotCi11bmlvbiB1dmhfaW50X2NtcGJfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfaW50X2NtcGJfcyB7Ci0JdW5zaWduZWQgbG9uZwlyZWFsX3RpbWVfY21wYiA6IDU2OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNTZfNjMgICAgIDogIDg7ICAvKiAgICAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9JTlRfQ01QQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX0lOVF9DTVBDIDB4MjIxMDBVTAotCi0jZGVmaW5lIFVWSF9JTlRfQ01QQ19SRUFMX1RJTUVfQ01QQ19TSEZUIDAKLSNkZWZpbmUgVVZIX0lOVF9DTVBDX1JFQUxfVElNRV9DTVBDX01BU0sgMHgwMGZmZmZmZmZmZmZmZmZmVUwKLQotdW5pb24gdXZoX2ludF9jbXBjX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX2ludF9jbXBjX3MgewotCXVuc2lnbmVkIGxvbmcJcmVhbF90aW1lX2NtcGMgOiA1NjsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzU2XzYzICAgICA6ICA4OyAgLyogICAgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfSU5UX0NNUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9JTlRfQ01QRCAweDIyMTgwVUwKLQotI2RlZmluZSBVVkhfSU5UX0NNUERfUkVBTF9USU1FX0NNUERfU0hGVCAwCi0jZGVmaW5lIFVWSF9JTlRfQ01QRF9SRUFMX1RJTUVfQ01QRF9NQVNLIDB4MDBmZmZmZmZmZmZmZmZmZlVMCi0KLXVuaW9uIHV2aF9pbnRfY21wZF91IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9pbnRfY21wZF9zIHsKLQl1bnNpZ25lZCBsb25nCXJlYWxfdGltZV9jbXBkIDogNTY7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MyAgICAgOiAgODsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0lQSV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfSVBJX0lOVCAweDYwNTAwVUwKLSNkZWZpbmUgVVZIX0lQSV9JTlRfMzIgMHgwMzQ4Ci0KLSNkZWZpbmUgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQgMAotI2RlZmluZSBVVkhfSVBJX0lOVF9WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAotI2RlZmluZSBVVkhfSVBJX0lOVF9ERUxJVkVSWV9NT0RFX1NIRlQgOAotI2RlZmluZSBVVkhfSVBJX0lOVF9ERUxJVkVSWV9NT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKLSNkZWZpbmUgVVZIX0lQSV9JTlRfREVTVE1PREVfU0hGVCAxMQotI2RlZmluZSBVVkhfSVBJX0lOVF9ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCi0jZGVmaW5lIFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCAxNgotI2RlZmluZSBVVkhfSVBJX0lOVF9BUElDX0lEX01BU0sgMHgwMDAwZmZmZmZmZmYwMDAwVUwKLSNkZWZpbmUgVVZIX0lQSV9JTlRfU0VORF9TSEZUIDYzCi0jZGVmaW5lIFVWSF9JUElfSU5UX1NFTkRfTUFTSyAweDgwMDAwMDAwMDAwMDAwMDBVTAotCi11bmlvbiB1dmhfaXBpX2ludF91IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9pcGlfaW50X3MgewotCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgICAgICA6ICA4OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWRlbGl2ZXJ5X21vZGUgOiAgMzsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkZXN0bW9kZSAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF8xMl8xNSAgICA6ICA0OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWFwaWNfaWQgICAgICAgOiAzMjsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQ4XzYyICAgIDogMTU7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJc2VuZCAgICAgICAgICA6ICAxOyAgLyogV1AgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVCAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0ZJUlNUIDB4MzIwMDUwVUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1RfMzIgMHgwMDljMAotCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0ZJUlNUX0FERFJFU1NfU0hGVCA0Ci0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0ZJUlNUX0FERFJFU1NfTUFTSyAweDAwMDAwN2ZmZmZmZmZmZjBVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVF9OT0RFX0lEX1NIRlQgNDkKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1RfTk9ERV9JRF9NQVNLIDB4N2ZmZTAwMDAwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9sYl9iYXVfaW50ZF9wYXlsb2FkX3F1ZXVlX2ZpcnN0X3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX2xiX2JhdV9pbnRkX3BheWxvYWRfcXVldWVfZmlyc3RfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMzogIDQ7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJYWRkcmVzcyA6IDM5OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNDNfNDg6ICA2OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCW5vZGVfaWQgOiAxNDsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzYzIDogIDE7ICAvKiAgICAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9MQVNUICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfTEFTVCAweDMyMDA2MFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0xBU1RfMzIgMHgwMDljOAotCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0xBU1RfQUREUkVTU19TSEZUIDQKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfTEFTVF9BRERSRVNTX01BU0sgMHgwMDAwMDdmZmZmZmZmZmYwVUwKLQotdW5pb24gdXZoX2xiX2JhdV9pbnRkX3BheWxvYWRfcXVldWVfbGFzdF91IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9sYl9iYXVfaW50ZF9wYXlsb2FkX3F1ZXVlX2xhc3RfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMzogIDQ7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJYWRkcmVzcyA6IDM5OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNDNfNjM6IDIxOyAgLyogICAgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfVEFJTCAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX1RBSUwgMHgzMjAwNzBVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9UQUlMXzMyIDB4MDA5ZDAKLQotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9UQUlMX0FERFJFU1NfU0hGVCA0Ci0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX1RBSUxfQUREUkVTU19NQVNLIDB4MDAwMDA3ZmZmZmZmZmZmMFVMCi0KLXVuaW9uIHV2aF9sYl9iYXVfaW50ZF9wYXlsb2FkX3F1ZXVlX3RhaWxfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfbGJfYmF1X2ludGRfcGF5bG9hZF9xdWV1ZV90YWlsX3MgewotCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzM6ICA0OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWFkZHJlc3MgOiAzOTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQzXzYzOiAyMTsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0UgMHgzMjAwODBVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfMzIgMHgwYTY4Ci0KLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfMF9TSEZUIDAKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMVVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzFfU0hGVCAxCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzFfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDJVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18yX1NIRlQgMgotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18yX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA0VUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfM19TSEZUIDMKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfM19NQVNLIDB4MDAwMDAwMDAwMDAwMDAwOFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzRfU0hGVCA0Ci0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzRfTUFTSyAweDAwMDAwMDAwMDAwMDAwMTBVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR181X1NIRlQgNQotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR181X01BU0sgMHgwMDAwMDAwMDAwMDAwMDIwVUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfNl9TSEZUIDYKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfNl9NQVNLIDB4MDAwMDAwMDAwMDAwMDA0MFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzdfU0hGVCA3Ci0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzdfTUFTSyAweDAwMDAwMDAwMDAwMDAwODBVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8wX1NIRlQgOAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8wX01BU0sgMHgwMDAwMDAwMDAwMDAwMTAwVUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfMV9TSEZUIDkKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfMV9NQVNLIDB4MDAwMDAwMDAwMDAwMDIwMFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzJfU0hGVCAxMAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8yX01BU0sgMHgwMDAwMDAwMDAwMDAwNDAwVUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfM19TSEZUIDExCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzNfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF80X1NIRlQgMTIKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfNF9NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzVfU0hGVCAxMwotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF81X01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfNl9TSEZUIDE0Ci0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzZfTUFTSyAweDAwMDAwMDAwMDAwMDQwMDBVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF83X1NIRlQgMTUKLSNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfN19NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCi11bmlvbiB1dmhfbGJfYmF1X2ludGRfc29mdHdhcmVfYWNrbm93bGVkZ2VfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfbGJfYmF1X2ludGRfc29mdHdhcmVfYWNrbm93bGVkZ2VfcyB7Ci0JdW5zaWduZWQgbG9uZwlwZW5kaW5nXzAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXBlbmRpbmdfMSA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJcGVuZGluZ18yIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlwZW5kaW5nXzMgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXBlbmRpbmdfNCA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJcGVuZGluZ181IDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwlwZW5kaW5nXzYgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXBlbmRpbmdfNyA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJdGltZW91dF8wIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwl0aW1lb3V0XzEgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXRpbWVvdXRfMiA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJdGltZW91dF8zIDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwl0aW1lb3V0XzQgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXRpbWVvdXRfNSA6ICAxOyAgLyogUlcsIFcxQyAqLwotCXVuc2lnbmVkIGxvbmcJdGltZW91dF82IDogIDE7ICAvKiBSVywgVzFDICovCi0JdW5zaWduZWQgbG9uZwl0aW1lb3V0XzcgOiAgMTsgIC8qIFJXLCBXMUMgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfMTZfNjM6IDQ4OyAgLyogICAgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfQUxJQVMgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9BTElBUyAweDAwMDAwMDAwMDAzMjAwODhVTAotI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfQUxJQVNfMzIgMHgwYTcwCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0wgMHgzMjAwMjBVTAotI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fQ09OVFJPTF8zMiAweDAwOWE4Ci0KLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfSU5ERVhfU0hGVCAwCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MX0lOREVYX01BU0sgMHgwMDAwMDAwMDAwMDAwMDNmVUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfUFVTSF9TSEZUIDYyCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MX1BVU0hfTUFTSyAweDQwMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fQ09OVFJPTF9JTklUX1NIRlQgNjMKLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfSU5JVF9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9jb250cm9sX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX2xiX2JhdV9zYl9hY3RpdmF0aW9uX2NvbnRyb2xfcyB7Ci0JdW5zaWduZWQgbG9uZwlpbmRleCA6ICA2OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNl82MTogNTY7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJcHVzaCAgOiAgMTsgIC8qIFdQICovCi0JdW5zaWduZWQgbG9uZwlpbml0ICA6ICAxOyAgLyogV1AgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18wICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMCAweDMyMDAzMFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMF8zMiAweDAwOWIwCi0KLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18wX1NUQVRVU19TSEZUIDAKLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18wX1NUQVRVU19NQVNLIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCi0KLXVuaW9uIHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMF91IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMF9zIHsKLQl1bnNpZ25lZCBsb25nCXN0YXR1cyA6IDY0OyAgLyogUlcgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18xICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMSAweDMyMDA0MFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMV8zMiAweDAwOWI4Ci0KLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18xX1NUQVRVU19TSEZUIDAKLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18xX1NUQVRVU19NQVNLIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCi0KLXVuaW9uIHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMV91IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMV9zIHsKLQl1bnNpZ25lZCBsb25nCXN0YXR1cyA6IDY0OyAgLyogUlcgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFIDB4MzIwMDEwVUwKLSNkZWZpbmUgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0VfMzIgMHgwMDlhMAotCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFX1BBR0VfQUREUkVTU19TSEZUIDEyCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFX1BBR0VfQUREUkVTU19NQVNLIDB4MDAwMDA3ZmZmZmZmZjAwMFVMCi0jZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFX05PREVfSURfU0hGVCA0OQotI2RlZmluZSBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRV9OT0RFX0lEX01BU0sgMHg3ZmZlMDAwMDAwMDAwMDAwVUwKLQotdW5pb24gdXZoX2xiX2JhdV9zYl9kZXNjcmlwdG9yX2Jhc2VfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfbGJfYmF1X3NiX2Rlc2NyaXB0b3JfYmFzZV9zIHsKLQl1bnNpZ25lZCBsb25nCXJzdmRfMF8xMSAgICA6IDEyOyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCXBhZ2VfYWRkcmVzcyA6IDMxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNDNfNDggICA6ICA2OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCW5vZGVfaWQgICAgICA6IDE0OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNjMgICAgICA6ICAxOyAgLyogICAgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRSAweDUwYjIwVUwKLQotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfT0JFU0VfTVNHX1NIRlQgMAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfT0JFU0VfTVNHX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAxVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX0RBVEFfU0JfRVJSX1NIRlQgMQotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfREFUQV9TQl9FUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDJVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfTkFDS19CVUZGX1BBUklUWV9TSEZUIDIKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX05BQ0tfQlVGRl9QQVJJVFlfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDRVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfVElNRU9VVF9TSEZUIDMKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01DQVNUX1RJTUVPVVRfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDhVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfSU5BQ1RJVkVfUkVQTFlfU0hGVCA0Ci0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQ0FTVF9JTkFDVElWRV9SRVBMWV9NQVNLIDB4MDAwMDAwMDAwMDAwMDAxMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQ0FTVF9VUEdSQURFX0VSUk9SX1NIRlQgNQotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfVVBHUkFERV9FUlJPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAyMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQ0FTVF9SRUdfQ09VTlRfVU5ERVJGTE9XX1NIRlQgNgotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfUkVHX0NPVU5UX1VOREVSRkxPV19NQVNLIDB4MDAwMDAwMDAwMDAwMDA0MFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQ0FTVF9SRVBfT0JFU0VfTVNHX1NIRlQgNwotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUNBU1RfUkVQX09CRVNFX01TR19NQVNLIDB4MDAwMDAwMDAwMDAwMDA4MFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVRX1JVTlRfTVNHX1NIRlQgOAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUV9SVU5UX01TR19NQVNLIDB4MDAwMDAwMDAwMDAwMDEwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVRX09CRVNFX01TR19TSEZUIDkKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVFfT0JFU0VfTVNHX01BU0sgMHgwMDAwMDAwMDAwMDAwMjAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVFfREFUQV9TQl9FUlJfU0hGVCAxMAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUV9EQVRBX1NCX0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDQwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVQX1JVTlRfTVNHX1NIRlQgMTEKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVBfUlVOVF9NU0dfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUF9PQkVTRV9NU0dfU0hGVCAxMgotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUF9PQkVTRV9NU0dfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUF9EQVRBX1NCX0VSUl9TSEZUIDEzCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUkVQX0RBVEFfU0JfRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9SRVBfQ09NTUFORF9FUlJfU0hGVCAxNAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfVUNBQ0hFX1JFUF9DT01NQU5EX0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwNDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9VQ0FDSEVfUEVORF9USU1FT1VUX1NIRlQgMTUKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1VDQUNIRV9QRU5EX1RJTUVPVVRfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVFfUlVOVF9NU0dfU0hGVCAxNgotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVFfUlVOVF9NU0dfTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVFfT0JFU0VfTVNHX1NIRlQgMTcKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUkVRX09CRVNFX01TR19NQVNLIDB4MDAwMDAwMDAwMDAyMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUV9EQVRBX1NCX0VSUl9TSEZUIDE4Ci0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUV9EQVRBX1NCX0VSUl9NQVNLIDB4MDAwMDAwMDAwMDA0MDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUF9SVU5UX01TR19TSEZUIDE5Ci0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUF9SVU5UX01TR19NQVNLIDB4MDAwMDAwMDAwMDA4MDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1JFUF9PQkVTRV9NU0dfU0hGVCAyMAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19SRVBfT0JFU0VfTVNHX01BU0sgMHgwMDAwMDAwMDAwMTAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUkVQX0RBVEFfU0JfRVJSX1NIRlQgMjEKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUkVQX0RBVEFfU0JfRVJSX01BU0sgMHgwMDAwMDAwMDAwMjAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfQU1PX1RJTUVPVVRfU0hGVCAyMgotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19BTU9fVElNRU9VVF9NQVNLIDB4MDAwMDAwMDAwMDQwMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1BVVF9USU1FT1VUX1NIRlQgMjMKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX01BQ0NfUFVUX1RJTUVPVVRfTUFTSyAweDAwMDAwMDAwMDA4MDAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTUFDQ19TUFVSSU9VU19FVkVOVF9TSEZUIDI0Ci0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9NQUNDX1NQVVJJT1VTX0VWRU5UX01BU0sgMHgwMDAwMDAwMDAxMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lPSF9ERVNUSU5BVElPTl9UQUJMRV9QQVJJVFlfU0hGVCAyNQotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU9IX0RFU1RJTkFUSU9OX1RBQkxFX1BBUklUWV9NQVNLIDB4MDAwMDAwMDAwMjAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9HRVRfSEFEX0VSUk9SX1JFUExZX1NIRlQgMjYKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0dFVF9IQURfRVJST1JfUkVQTFlfTUFTSyAweDAwMDAwMDAwMDQwMDAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfR0VUX1RJTUVPVVRfU0hGVCAyNwotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfR0VUX1RJTUVPVVRfTUFTSyAweDAwMDAwMDAwMDgwMDAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfTE9DS19NQU5BR0VSX0hBRF9FUlJPUl9SRVBMWV9TSEZUIDI4Ci0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9MT0NLX01BTkFHRVJfSEFEX0VSUk9SX1JFUExZX01BU0sgMHgwMDAwMDAwMDEwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1BVVF9IQURfRVJST1JfUkVQTFlfU0hGVCAyOQotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfUFVUX0hBRF9FUlJPUl9SRVBMWV9NQVNLIDB4MDAwMDAwMDAyMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9QVVRfVElNRU9VVF9TSEZUIDMwCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9QVVRfVElNRU9VVF9NQVNLIDB4MDAwMDAwMDA0MDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9TQl9BQ1RJVkFUSU9OX09WRVJSVU5fU0hGVCAzMQotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfU0JfQUNUSVZBVElPTl9PVkVSUlVOX01BU0sgMHgwMDAwMDAwMDgwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0NPTVBMRVRFRF9HQl9BQ1RJVkFUSU9OX0hBRF9FUlJPUl9SRVBMWV9TSEZUIDMyCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9DT01QTEVURURfR0JfQUNUSVZBVElPTl9IQURfRVJST1JfUkVQTFlfTUFTSyAweDAwMDAwMDAxMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfQ09NUExFVEVEX0dCX0FDVElWQVRJT05fVElNRU9VVF9TSEZUIDMzCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9DT01QTEVURURfR0JfQUNUSVZBVElPTl9USU1FT1VUX01BU0sgMHgwMDAwMDAwMjAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0RFU0NSSVBUT1JfQlVGRkVSXzBfUEFSSVRZX1NIRlQgMzQKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0RFU0NSSVBUT1JfQlVGRkVSXzBfUEFSSVRZX01BU0sgMHgwMDAwMDAwNDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0RFU0NSSVBUT1JfQlVGRkVSXzFfUEFSSVRZX1NIRlQgMzUKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0RFU0NSSVBUT1JfQlVGRkVSXzFfUEFSSVRZX01BU0sgMHgwMDAwMDAwODAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX1NPQ0tFVF9ERVNUSU5BVElPTl9UQUJMRV9QQVJJVFlfU0hGVCAzNgotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfU09DS0VUX0RFU1RJTkFUSU9OX1RBQkxFX1BBUklUWV9NQVNLIDB4MDAwMDAwMTAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9CQVVfUkVQTFlfUEFZTE9BRF9DT1JSVVBUSU9OX1NIRlQgMzcKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0JBVV9SRVBMWV9QQVlMT0FEX0NPUlJVUFRJT05fTUFTSyAweDAwMDAwMDIwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU9fUE9SVF9ERVNUSU5BVElPTl9UQUJMRV9QQVJJVFlfU0hGVCAzOAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU9fUE9SVF9ERVNUSU5BVElPTl9UQUJMRV9QQVJJVFlfTUFTSyAweDAwMDAwMDQwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU5URF9TT0ZUX0FDS19USU1FT1VUX1NIRlQgMzkKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lOVERfU09GVF9BQ0tfVElNRU9VVF9NQVNLIDB4MDAwMDAwODAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9JTlRfUkVQX09CRVNFX01TR19TSEZUIDQwCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9JTlRfUkVQX09CRVNFX01TR19NQVNLIDB4MDAwMDAxMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MQl9NQ0FTVF9BT0VSUjBfUlBUX0VOQUJMRV9JTlRfUkVQX0NPTU1BTkRfRVJSX1NIRlQgNDEKLSNkZWZpbmUgVVZIX0xCX01DQVNUX0FPRVJSMF9SUFRfRU5BQkxFX0lOVF9SRVBfQ09NTUFORF9FUlJfTUFTSyAweDAwMDAwMjAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU5UX1RJTUVPVVRfU0hGVCA0MgotI2RlZmluZSBVVkhfTEJfTUNBU1RfQU9FUlIwX1JQVF9FTkFCTEVfSU5UX1RJTUVPVVRfTUFTSyAweDAwMDAwNDAwMDAwMDAwMDBVTAotCi11bmlvbiB1dmhfbGJfbWNhc3RfYW9lcnIwX3JwdF9lbmFibGVfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfbGJfbWNhc3RfYW9lcnIwX3JwdF9lbmFibGVfcyB7Ci0JdW5zaWduZWQgbG9uZwltY2FzdF9vYmVzZV9tc2cgICAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltY2FzdF9kYXRhX3NiX2VyciAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltY2FzdF9uYWNrX2J1ZmZfcGFyaXR5ICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltY2FzdF90aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltY2FzdF9pbmFjdGl2ZV9yZXBseSAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltY2FzdF91cGdyYWRlX2Vycm9yICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltY2FzdF9yZWdfY291bnRfdW5kZXJmbG93ICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltY2FzdF9yZXBfb2Jlc2VfbXNnICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcmVxX3J1bnRfbXNnICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcmVxX29iZXNlX21zZyAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcmVxX2RhdGFfc2JfZXJyICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcmVwX3J1bnRfbXNnICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcmVwX29iZXNlX21zZyAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcmVwX2RhdGFfc2JfZXJyICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcmVwX2NvbW1hbmRfZXJyICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl1Y2FjaGVfcGVuZF90aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3JlcV9ydW50X21zZyAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3JlcV9vYmVzZV9tc2cgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3JlcV9kYXRhX3NiX2VyciAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3JlcF9ydW50X21zZyAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3JlcF9vYmVzZV9tc2cgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3JlcF9kYXRhX3NiX2VyciAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX2Ftb190aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3B1dF90aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwltYWNjX3NwdXJpb3VzX2V2ZW50ICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlpb2hfZGVzdGluYXRpb25fdGFibGVfcGFyaXR5ICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlnZXRfaGFkX2Vycm9yX3JlcGx5ICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlnZXRfdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsb2NrX21hbmFnZXJfaGFkX2Vycm9yX3JlcGx5ICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlwdXRfaGFkX2Vycm9yX3JlcGx5ICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlwdXRfdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlzYl9hY3RpdmF0aW9uX292ZXJydW4gICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwljb21wbGV0ZWRfZ2JfYWN0aXZhdGlvbl9oYWRfZXJyb3JfcmVwbHkgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwljb21wbGV0ZWRfZ2JfYWN0aXZhdGlvbl90aW1lb3V0ICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkZXNjcmlwdG9yX2J1ZmZlcl8wX3Bhcml0eSAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkZXNjcmlwdG9yX2J1ZmZlcl8xX3Bhcml0eSAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlzb2NrZXRfZGVzdGluYXRpb25fdGFibGVfcGFyaXR5ICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwliYXVfcmVwbHlfcGF5bG9hZF9jb3JydXB0aW9uICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlpb19wb3J0X2Rlc3RpbmF0aW9uX3RhYmxlX3Bhcml0eSAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlpbnRkX3NvZnRfYWNrX3RpbWVvdXQgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlpbnRfcmVwX29iZXNlX21zZyAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlpbnRfcmVwX2NvbW1hbmRfZXJyICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlpbnRfdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQzXzYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAyMTsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9MT0NBTF9JTlQwX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUcgMHg2MTAwMFVMCi0KLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19ETV9TSEZUIDgKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX1NUQVRVU19TSEZUIDEyCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfUF9TSEZUIDEzCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX1RfU0hGVCAxNQotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19NX1NIRlQgMTYKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKLQotdW5pb24gdXZoX2xvY2FsX2ludDBfY29uZmlnX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX2xvY2FsX2ludDBfY29uZmlnX3MgewotCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfTE9DQUxfSU5UMF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFIDB4NjUwMDBVTAotCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9IQ0VSUl9TSEZUIDAKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAxVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMF9IQ0VSUl9TSEZUIDEKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMF9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMlVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjFfSENFUlJfU0hGVCAyCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjFfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDRVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEhfSENFUlJfU0hGVCAzCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MSF9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwOFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9SSF9IQ0VSUl9TSEZUIDQKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1JIX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDEwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1hOX0hDRVJSX1NIRlQgNQotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfWE5fSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMjBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfU0lfSENFUlJfU0hGVCA2Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9TSV9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDA0MFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9BT0VSUjBfU0hGVCA3Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDAwODBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfR1IwX0FPRVJSMF9TSEZUIDgKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMF9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDAxMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfR1IxX0FPRVJSMF9TSEZUIDkKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMV9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDAyMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEhfQU9FUlIwX1NIRlQgMTAKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xIX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDQwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9SSF9BT0VSUjBfU0hGVCAxMQotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfUkhfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1hOX0FPRVJSMF9TSEZUIDEyCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9YTl9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfU0lfQU9FUlIwX1NIRlQgMTMKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NJX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9BT0VSUjFfU0hGVCAxNAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDA0MDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMF9BT0VSUjFfU0hGVCAxNQotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfR1IwX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9HUjFfQU9FUlIxX1NIRlQgMTYKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0dSMV9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEhfQU9FUlIxX1NIRlQgMTcKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xIX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDAyMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9SSF9BT0VSUjFfU0hGVCAxOAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfUkhfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDQwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1hOX0FPRVJSMV9TSEZUIDE5Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9YTl9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwODAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfU0lfQU9FUlIxX1NIRlQgMjAKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NJX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDEwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9SSF9WUElfSU5UX1NIRlQgMjEKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1JIX1ZQSV9JTlRfTUFTSyAweDAwMDAwMDAwMDAyMDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfU1lTVEVNX1NIVVRET1dOX0lOVF9TSEZUIDIyCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9TWVNURU1fU0hVVERPV05fSU5UX01BU0sgMHgwMDAwMDAwMDAwNDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMF9TSEZUIDIzCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzBfTUFTSyAweDAwMDAwMDAwMDA4MDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xX1NIRlQgMjQKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMV9NQVNLIDB4MDAwMDAwMDAwMTAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzJfU0hGVCAyNQotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8yX01BU0sgMHgwMDAwMDAwMDAyMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfM19TSEZUIDI2Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzNfTUFTSyAweDAwMDAwMDAwMDQwMDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF80X1NIRlQgMjcKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfNF9NQVNLIDB4MDAwMDAwMDAwODAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzVfU0hGVCAyOAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF81X01BU0sgMHgwMDAwMDAwMDEwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfNl9TSEZUIDI5Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzZfTUFTSyAweDAwMDAwMDAwMjAwMDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF83X1NIRlQgMzAKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfN19NQVNLIDB4MDAwMDAwMDA0MDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzhfU0hGVCAzMQotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF84X01BU0sgMHgwMDAwMDAwMDgwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfOV9TSEZUIDMyCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzlfTUFTSyAweDAwMDAwMDAxMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xMF9TSEZUIDMzCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzEwX01BU0sgMHgwMDAwMDAwMjAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTFfU0hGVCAzNAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xMV9NQVNLIDB4MDAwMDAwMDQwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzEyX1NIRlQgMzUKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTJfTUFTSyAweDAwMDAwMDA4MDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xM19TSEZUIDM2Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzEzX01BU0sgMHgwMDAwMDAxMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTRfU0hGVCAzNwotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTEJfSVJRX0lOVF8xNF9NQVNLIDB4MDAwMDAwMjAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQl9JUlFfSU5UXzE1X1NIRlQgMzgKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xCX0lSUV9JTlRfMTVfTUFTSyAweDAwMDAwMDQwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTDFfTk1JX0lOVF9TSEZUIDM5Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MMV9OTUlfSU5UX01BU0sgMHgwMDAwMDA4MDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX1NUT1BfQ0xPQ0tfU0hGVCA0MAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfU1RPUF9DTE9DS19NQVNLIDB4MDAwMDAxMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9BU0lDX1RPX0wxX1NIRlQgNDEKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0FTSUNfVE9fTDFfTUFTSyAweDAwMDAwMjAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTDFfVE9fQVNJQ19TSEZUIDQyCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MMV9UT19BU0lDX01BU0sgMHgwMDAwMDQwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX0xPQ0FMX0lOVDBfRU5BQkxFX0xUQ19JTlRfU0hGVCA0MwotI2RlZmluZSBVVkhfTE9DQUxfSU5UMF9FTkFCTEVfTFRDX0lOVF9NQVNLIDB4MDAwMDA4MDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQV9TRVFfVFJJR0dFUl9TSEZUIDQ0Ci0jZGVmaW5lIFVWSF9MT0NBTF9JTlQwX0VOQUJMRV9MQV9TRVFfVFJJR0dFUl9NQVNLIDB4MDAwMDEwMDAwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9sb2NhbF9pbnQwX2VuYWJsZV91IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9sb2NhbF9pbnQwX2VuYWJsZV9zIHsKLQl1bnNpZ25lZCBsb25nCWxiX2hjZXJyICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlncjBfaGNlcnIgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJZ3IxX2hjZXJyICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWxoX2hjZXJyICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyaF9oY2VyciAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJeG5faGNlcnIgICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXNpX2hjZXJyICAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsYl9hb2VycjAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJZ3IwX2FvZXJyMCAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWdyMV9hb2VycjAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsaF9hb2VycjAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcmhfYW9lcnIwICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXhuX2FvZXJyMCAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlzaV9hb2VycjAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfYW9lcnIxICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWdyMF9hb2VycjEgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlncjFfYW9lcnIxICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGhfYW9lcnIxICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJoX2FvZXJyMSAgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwl4bl9hb2VycjEgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJc2lfYW9lcnIxICAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJoX3ZwaV9pbnQgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlzeXN0ZW1fc2h1dGRvd25faW50IDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8wICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMSAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzIgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8zICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfNCAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzUgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF82ICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfNyAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzggICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF85ICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzExICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xMiAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTMgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzE0ICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xNSAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWwxX25taV9pbnQgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlzdG9wX2Nsb2NrICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJYXNpY190b19sMSAgICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWwxX3RvX2FzaWMgICAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlsdGNfaW50ICAgICAgICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJbGFfc2VxX3RyaWdnZXIgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNDVfNjMgICAgICAgICAgOiAxOTsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX05PREVfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfTk9ERV9JRCAweDBVTAotCi0jZGVmaW5lIFVWSF9OT0RFX0lEX0ZPUkNFMV9TSEZUIDAKLSNkZWZpbmUgVVZIX05PREVfSURfRk9SQ0UxX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAxVUwKLSNkZWZpbmUgVVZIX05PREVfSURfTUFOVUZBQ1RVUkVSX1NIRlQgMQotI2RlZmluZSBVVkhfTk9ERV9JRF9NQU5VRkFDVFVSRVJfTUFTSyAweDAwMDAwMDAwMDAwMDBmZmVVTAotI2RlZmluZSBVVkhfTk9ERV9JRF9QQVJUX05VTUJFUl9TSEZUIDEyCi0jZGVmaW5lIFVWSF9OT0RFX0lEX1BBUlRfTlVNQkVSX01BU0sgMHgwMDAwMDAwMDBmZmZmMDAwVUwKLSNkZWZpbmUgVVZIX05PREVfSURfUkVWSVNJT05fU0hGVCAyOAotI2RlZmluZSBVVkhfTk9ERV9JRF9SRVZJU0lPTl9NQVNLIDB4MDAwMDAwMDBmMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9OT0RFX0lEX05PREVfSURfU0hGVCAzMgotI2RlZmluZSBVVkhfTk9ERV9JRF9OT0RFX0lEX01BU0sgMHgwMDAwN2ZmZjAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX05PREVfSURfTk9ERVNfUEVSX0JJVF9TSEZUIDQ4Ci0jZGVmaW5lIFVWSF9OT0RFX0lEX05PREVTX1BFUl9CSVRfTUFTSyAweDAwN2YwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfTk9ERV9JRF9OSV9QT1JUX1NIRlQgNTYKLSNkZWZpbmUgVVZIX05PREVfSURfTklfUE9SVF9NQVNLIDB4MGYwMDAwMDAwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9ub2RlX2lkX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX25vZGVfaWRfcyB7Ci0JdW5zaWduZWQgbG9uZwlmb3JjZTEgICAgICAgIDogIDE7ICAvKiBSTyAqLwotCXVuc2lnbmVkIGxvbmcJbWFudWZhY3R1cmVyICA6IDExOyAgLyogUk8gKi8KLQl1bnNpZ25lZCBsb25nCXBhcnRfbnVtYmVyICAgOiAxNjsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwlyZXZpc2lvbiAgICAgIDogIDQ7ICAvKiBSTyAqLwotCXVuc2lnbmVkIGxvbmcJbm9kZV9pZCAgICAgICA6IDE1OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNDcgICAgICAgOiAgMTsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwlub2Rlc19wZXJfYml0IDogIDc7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF81NSAgICAgICA6ICAxOyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCW5pX3BvcnQgICAgICAgOiAgNDsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzYwXzYzICAgIDogIDQ7ICAvKiAgICAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfTk9ERV9QUkVTRU5UX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX05PREVfUFJFU0VOVF9UQUJMRSAweDE0MDBVTAotI2RlZmluZSBVVkhfTk9ERV9QUkVTRU5UX1RBQkxFX0RFUFRIIDE2Ci0KLSNkZWZpbmUgVVZIX05PREVfUFJFU0VOVF9UQUJMRV9OT0RFU19TSEZUIDAKLSNkZWZpbmUgVVZIX05PREVfUFJFU0VOVF9UQUJMRV9OT0RFU19NQVNLIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCi0KLXVuaW9uIHV2aF9ub2RlX3ByZXNlbnRfdGFibGVfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfbm9kZV9wcmVzZW50X3RhYmxlX3MgewotCXVuc2lnbmVkIGxvbmcJbm9kZXMgOiA2NDsgIC8qIFJXICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMF9NTVIgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18wX01NUiAweDE2MDAwZDBVTAotCi0jZGVmaW5lIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzBfTU1SX0RFU1RfQkFTRV9TSEZUIDI0Ci0jZGVmaW5lIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzBfTU1SX0RFU1RfQkFTRV9NQVNLIDB4MDAwMDNmZmZmZjAwMDAwMFVMCi0KLXVuaW9uIHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzBfbW1yX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3JoX2dhbV9hbGlhczIxMF9yZWRpcmVjdF9jb25maWdfMF9tbXJfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjMgOiAyNDsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwlkZXN0X2Jhc2UgOiAyMjsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQ2XzYzOiAxODsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMV9NTVIgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18xX01NUiAweDE2MDAwZTBVTAotCi0jZGVmaW5lIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzFfTU1SX0RFU1RfQkFTRV9TSEZUIDI0Ci0jZGVmaW5lIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzFfTU1SX0RFU1RfQkFTRV9NQVNLIDB4MDAwMDNmZmZmZjAwMDAwMFVMCi0KLXVuaW9uIHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzFfbW1yX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3JoX2dhbV9hbGlhczIxMF9yZWRpcmVjdF9jb25maWdfMV9tbXJfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjMgOiAyNDsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwlkZXN0X2Jhc2UgOiAyMjsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQ2XzYzOiAxODsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMl9NTVIgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18yX01NUiAweDE2MDAwZjBVTAotCi0jZGVmaW5lIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzJfTU1SX0RFU1RfQkFTRV9TSEZUIDI0Ci0jZGVmaW5lIFVWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzJfTU1SX0RFU1RfQkFTRV9NQVNLIDB4MDAwMDNmZmZmZjAwMDAwMFVMCi0KLXVuaW9uIHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzJfbW1yX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3JoX2dhbV9hbGlhczIxMF9yZWRpcmVjdF9jb25maWdfMl9tbXJfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjMgOiAyNDsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwlkZXN0X2Jhc2UgOiAyMjsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQ2XzYzOiAxODsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fQ0ZHX09WRVJMQVlfQ09ORklHX01NUiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfUkhfR0FNX0NGR19PVkVSTEFZX0NPTkZJR19NTVIgMHgxNjAwMDIwVUwKLQotI2RlZmluZSBVVkhfUkhfR0FNX0NGR19PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUIDI2Ci0jZGVmaW5lIFVWSF9SSF9HQU1fQ0ZHX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX01BU0sgMHgwMDAwM2ZmZmZjMDAwMDAwVUwKLSNkZWZpbmUgVVZIX1JIX0dBTV9DRkdfT1ZFUkxBWV9DT05GSUdfTU1SX0VOQUJMRV9TSEZUIDYzCi0jZGVmaW5lIFVWSF9SSF9HQU1fQ0ZHX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfTUFTSyAweDgwMDAwMDAwMDAwMDAwMDBVTAotCi11bmlvbiB1dmhfcmhfZ2FtX2NmZ19vdmVybGF5X2NvbmZpZ19tbXJfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfcmhfZ2FtX2NmZ19vdmVybGF5X2NvbmZpZ19tbXJfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjU6IDI2OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWJhc2UgICA6IDIwOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNDZfNjI6IDE3OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWVuYWJsZSA6ICAxOyAgLyogUlcgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUiAweDE2MDAwMTBVTAotCi0jZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX1NIRlQgMjgKLSNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfTUFTSyAweDAwMDAzZmZmZjAwMDAwMDBVTAotI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfR1I0X1NIRlQgNDgKLSNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0dSNF9NQVNLIDB4MDAwMTAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9OX0dSVV9TSEZUIDUyCi0jZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9OX0dSVV9NQVNLIDB4MDBmMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfU0hGVCA2MwotI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfRU5BQkxFX01BU0sgMHg4MDAwMDAwMDAwMDAwMDAwVUwKLQotdW5pb24gdXZoX3JoX2dhbV9ncnVfb3ZlcmxheV9jb25maWdfbW1yX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3JoX2dhbV9ncnVfb3ZlcmxheV9jb25maWdfbW1yX3MgewotCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzI3OiAyODsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwliYXNlICAgOiAxODsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQ2XzQ3OiAgMjsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwlncjQgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzQ5XzUxOiAgMzsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwluX2dydSAgOiAgNDsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzU2XzYyOiAgNzsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwllbmFibGUgOiAgMTsgIC8qIFJXICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVIgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUiAweDE2MDAwMzBVTAotCi0jZGVmaW5lIFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfU0hGVCAzMAotI2RlZmluZSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX01BU0sgMHgwMDAwM2ZmZmMwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVJfTV9JT19TSEZUIDQ2Ci0jZGVmaW5lIFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SX01fSU9fTUFTSyAweDAwMGZjMDAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUl9OX0lPX1NIRlQgNTIKLSNkZWZpbmUgVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVJfTl9JT19NQVNLIDB4MDBmMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SX0VOQUJMRV9TSEZUIDYzCi0jZGVmaW5lIFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SX0VOQUJMRV9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9yaF9nYW1fbW1pb2hfb3ZlcmxheV9jb25maWdfbW1yX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3JoX2dhbV9tbWlvaF9vdmVybGF5X2NvbmZpZ19tbXJfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjk6IDMwOyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWJhc2UgICA6IDE2OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCW1faW8gICA6ICA2OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCW5faW8gICA6ICA0OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNTZfNjI6ICA3OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWVuYWJsZSA6ICAxOyAgLyogUlcgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUiAweDE2MDAwMjhVTAotCi0jZGVmaW5lIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX1NIRlQgMjYKLSNkZWZpbmUgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfTUFTSyAweDAwMDAzZmZmZmMwMDAwMDBVTAotI2RlZmluZSBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVJfRFVBTF9IVUJfU0hGVCA0NgotI2RlZmluZSBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVJfRFVBTF9IVUJfTUFTSyAweDAwMDA0MDAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVJfRU5BQkxFX1NIRlQgNjMKLSNkZWZpbmUgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0VOQUJMRV9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9yaF9nYW1fbW1yX292ZXJsYXlfY29uZmlnX21tcl91IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9yaF9nYW1fbW1yX292ZXJsYXlfY29uZmlnX21tcl9zIHsKLQl1bnNpZ25lZCBsb25nCXJzdmRfMF8yNTogMjY7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJYmFzZSAgICAgOiAyMDsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkdWFsX2h1YiA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNDdfNjI6IDE2OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWVuYWJsZSAgIDogIDE7ICAvKiBSVyAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1JUQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX1JUQyAweDM0MDAwMFVMCi0KLSNkZWZpbmUgVVZIX1JUQ19SRUFMX1RJTUVfQ0xPQ0tfU0hGVCAwCi0jZGVmaW5lIFVWSF9SVENfUkVBTF9USU1FX0NMT0NLX01BU0sgMHgwMGZmZmZmZmZmZmZmZmZmVUwKLQotdW5pb24gdXZoX3J0Y191IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9ydGNfcyB7Ci0JdW5zaWduZWQgbG9uZwlyZWFsX3RpbWVfY2xvY2sgOiA1NjsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzU2XzYzICAgICAgOiAgODsgIC8qICAgICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfUlRDMV9JTlRfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHIDB4NjE1YzBVTAotCi0jZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfVkVDVE9SX1NIRlQgMAotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCi0jZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfRE1fU0hGVCA4Ci0jZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKLSNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCi0jZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfU1RBVFVTX1NIRlQgMTIKLSNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1BfU0hGVCAxMwotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1RfU0hGVCAxNQotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX01fU0hGVCAxNgotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0FQSUNfSURfU0hGVCAzMgotI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAotCi11bmlvbiB1dmhfcnRjMV9pbnRfY29uZmlnX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3J0YzFfaW50X2NvbmZpZ19zIHsKLQl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLwotCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLwotCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9SVEMyX0lOVF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUcgMHg2MTYwMFVMCi0KLSNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19WRUNUT1JfU0hGVCAwCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKLSNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19ETV9TSEZUIDgKLSNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfREVTVE1PREVfU0hGVCAxMQotI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKLSNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19TVEFUVVNfU0hGVCAxMgotI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfUF9TSEZUIDEzCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfVF9TSEZUIDE1Ci0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfTV9TSEZUIDE2Ci0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCi0jZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9ydGMyX2ludF9jb25maWdfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfcnRjMl9pbnRfY29uZmlnX3MgewotCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCi0JdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1JUQzNfSU5UX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJRyAweDYxNjQwVUwKLQotI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAotI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX0RNX1NIRlQgOAotI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCi0jZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAotI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX1NUQVRVU19TSEZUIDEyCi0jZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19QX1NIRlQgMTMKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19UX1NIRlQgMTUKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19NX1NIRlQgMTYKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKLSNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKLQotdW5pb24gdXZoX3J0YzNfaW50X2NvbmZpZ191IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9ydGMzX2ludF9jb25maWdfcyB7Ci0JdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KLQl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KLQl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1JUQ19JTkNfUkFUSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfUlRDX0lOQ19SQVRJTyAweDM1MDAwMFVMCi0KLSNkZWZpbmUgVVZIX1JUQ19JTkNfUkFUSU9fRlJBQ1RJT05fU0hGVCAwCi0jZGVmaW5lIFVWSF9SVENfSU5DX1JBVElPX0ZSQUNUSU9OX01BU0sgMHgwMDAwMDAwMDAwMGZmZmZmVUwKLSNkZWZpbmUgVVZIX1JUQ19JTkNfUkFUSU9fUkFUSU9fU0hGVCAyMAotI2RlZmluZSBVVkhfUlRDX0lOQ19SQVRJT19SQVRJT19NQVNLIDB4MDAwMDAwMDAwMDcwMDAwMFVMCi0KLXVuaW9uIHV2aF9ydGNfaW5jX3JhdGlvX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3J0Y19pbmNfcmF0aW9fcyB7Ci0JdW5zaWduZWQgbG9uZwlmcmFjdGlvbiA6IDIwOyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJhdGlvICAgIDogIDM7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF8yM182MzogNDE7ICAvKiAgICAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfU0lfQUREUl9NQVBfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX1NJX0FERFJfTUFQX0NPTkZJRyAweGM4MDAwMFVMCi0KLSNkZWZpbmUgVVZIX1NJX0FERFJfTUFQX0NPTkZJR19NX1NLVF9TSEZUIDAKLSNkZWZpbmUgVVZIX1NJX0FERFJfTUFQX0NPTkZJR19NX1NLVF9NQVNLIDB4MDAwMDAwMDAwMDAwMDAzZlVMCi0jZGVmaW5lIFVWSF9TSV9BRERSX01BUF9DT05GSUdfTl9TS1RfU0hGVCA4Ci0jZGVmaW5lIFVWSF9TSV9BRERSX01BUF9DT05GSUdfTl9TS1RfTUFTSyAweDAwMDAwMDAwMDAwMDBmMDBVTAotCi11bmlvbiB1dmhfc2lfYWRkcl9tYXBfY29uZmlnX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3NpX2FkZHJfbWFwX2NvbmZpZ19zIHsKLQl1bnNpZ25lZCBsb25nCW1fc2t0IDogIDY7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF82Xzc6ICAyOyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCW5fc2t0IDogIDQ7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF8xMl82MzogNTI7ICAvKiAgICAqLwotICAgIH0gczsKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICBVVkhfU0lfQUxJQVMwX09WRVJMQVlfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJRyAweGM4MDAwOFVMCi0KLSNkZWZpbmUgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJR19CQVNFX1NIRlQgMjQKLSNkZWZpbmUgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJR19CQVNFX01BU0sgMHgwMDAwMDAwMGZmMDAwMDAwVUwKLSNkZWZpbmUgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJR19NX0FMSUFTX1NIRlQgNDgKLSNkZWZpbmUgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJR19NX0FMSUFTX01BU0sgMHgwMDFmMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX1NJX0FMSUFTMF9PVkVSTEFZX0NPTkZJR19FTkFCTEVfU0hGVCA2MwotI2RlZmluZSBVVkhfU0lfQUxJQVMwX09WRVJMQVlfQ09ORklHX0VOQUJMRV9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCi0KLXVuaW9uIHV2aF9zaV9hbGlhczBfb3ZlcmxheV9jb25maWdfdSB7Ci0gICAgdW5zaWduZWQgbG9uZwl2OwotICAgIHN0cnVjdCB1dmhfc2lfYWxpYXMwX292ZXJsYXlfY29uZmlnX3MgewotCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzIzOiAyNDsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwliYXNlICAgIDogIDg7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF8zMl80NzogMTY7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJbV9hbGlhcyA6ICA1OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfNTNfNjI6IDEwOyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWVuYWJsZSAgOiAgMTsgIC8qIFJXICovCi0gICAgfSBzOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgIFVWSF9TSV9BTElBUzFfT1ZFUkxBWV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHIDB4YzgwMDEwVUwKLQotI2RlZmluZSBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHX0JBU0VfU0hGVCAyNAotI2RlZmluZSBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHX0JBU0VfTUFTSyAweDAwMDAwMDAwZmYwMDAwMDBVTAotI2RlZmluZSBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHX01fQUxJQVNfU0hGVCA0OAotI2RlZmluZSBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHX01fQUxJQVNfTUFTSyAweDAwMWYwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBVVkhfU0lfQUxJQVMxX09WRVJMQVlfQ09ORklHX0VOQUJMRV9TSEZUIDYzCi0jZGVmaW5lIFVWSF9TSV9BTElBUzFfT1ZFUkxBWV9DT05GSUdfRU5BQkxFX01BU0sgMHg4MDAwMDAwMDAwMDAwMDAwVUwKLQotdW5pb24gdXZoX3NpX2FsaWFzMV9vdmVybGF5X2NvbmZpZ191IHsKLSAgICB1bnNpZ25lZCBsb25nCXY7Ci0gICAgc3RydWN0IHV2aF9zaV9hbGlhczFfb3ZlcmxheV9jb25maWdfcyB7Ci0JdW5zaWduZWQgbG9uZwlyc3ZkXzBfMjM6IDI0OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCWJhc2UgICAgOiAgODsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzMyXzQ3OiAxNjsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwltX2FsaWFzIDogIDU7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF81M182MjogMTA7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJZW5hYmxlICA6ICAxOyAgLyogUlcgKi8KLSAgICB9IHM7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgVVZIX1NJX0FMSUFTMl9PVkVSTEFZX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUcgMHhjODAwMThVTAotCi0jZGVmaW5lIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUdfQkFTRV9TSEZUIDI0Ci0jZGVmaW5lIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUdfQkFTRV9NQVNLIDB4MDAwMDAwMDBmZjAwMDAwMFVMCi0jZGVmaW5lIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUdfTV9BTElBU19TSEZUIDQ4Ci0jZGVmaW5lIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUdfTV9BTElBU19NQVNLIDB4MDAxZjAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFVWSF9TSV9BTElBUzJfT1ZFUkxBWV9DT05GSUdfRU5BQkxFX1NIRlQgNjMKLSNkZWZpbmUgVVZIX1NJX0FMSUFTMl9PVkVSTEFZX0NPTkZJR19FTkFCTEVfTUFTSyAweDgwMDAwMDAwMDAwMDAwMDBVTAotCi11bmlvbiB1dmhfc2lfYWxpYXMyX292ZXJsYXlfY29uZmlnX3UgewotICAgIHVuc2lnbmVkIGxvbmcJdjsKLSAgICBzdHJ1Y3QgdXZoX3NpX2FsaWFzMl9vdmVybGF5X2NvbmZpZ19zIHsKLQl1bnNpZ25lZCBsb25nCXJzdmRfMF8yMzogMjQ7ICAvKiAgICAqLwotCXVuc2lnbmVkIGxvbmcJYmFzZSAgICA6ICA4OyAgLyogUlcgKi8KLQl1bnNpZ25lZCBsb25nCXJzdmRfMzJfNDc6IDE2OyAgLyogICAgKi8KLQl1bnNpZ25lZCBsb25nCW1fYWxpYXMgOiAgNTsgIC8qIFJXICovCi0JdW5zaWduZWQgbG9uZwlyc3ZkXzUzXzYyOiAxMDsgIC8qICAgICovCi0JdW5zaWduZWQgbG9uZwllbmFibGUgIDogIDE7ICAvKiBSVyAqLwotICAgIH0gczsKLX07Ci0KLQotI2VuZGlmIC8qIEFTTV9YODZfX1VWX19VVl9NTVJTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni92ZHNvLmggYi9pbmNsdWRlL2FzbS14ODYvdmRzby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWIzMjA5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni92ZHNvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1ZEU09fSAotI2RlZmluZSBBU01fWDg2X19WRFNPX0gKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLWV4dGVybiBjb25zdCBjaGFyIFZEU082NF9QUkVMSU5LW107Ci0KLS8qCi0gKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIHZEU08gaW1hZ2UsIGZpbmQgdGhlIHBvaW50ZXIgdG8gVkRTTzY0X25hbWUKLSAqIGFzIHRoYXQgc3ltYm9sIGlzIGRlZmluZWQgaW4gdGhlIHZEU08gc291cmNlcyBvciBsaW5rZXIgc2NyaXB0LgotICovCi0jZGVmaW5lIFZEU082NF9TWU1CT0woYmFzZSwgbmFtZSkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCWV4dGVybiBjb25zdCBjaGFyIFZEU082NF8jI25hbWVbXTsJCQkJXAotCSh2b2lkICopKFZEU082NF8jI25hbWUgLSBWRFNPNjRfUFJFTElOSyArICh1bnNpZ25lZCBsb25nKShiYXNlKSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgQ09ORklHX1g4Nl8zMiB8fCBkZWZpbmVkIENPTkZJR19DT01QQVQKLWV4dGVybiBjb25zdCBjaGFyIFZEU08zMl9QUkVMSU5LW107Ci0KLS8qCi0gKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIHZEU08gaW1hZ2UsIGZpbmQgdGhlIHBvaW50ZXIgdG8gVkRTTzMyX25hbWUKLSAqIGFzIHRoYXQgc3ltYm9sIGlzIGRlZmluZWQgaW4gdGhlIHZEU08gc291cmNlcyBvciBsaW5rZXIgc2NyaXB0LgotICovCi0jZGVmaW5lIFZEU08zMl9TWU1CT0woYmFzZSwgbmFtZSkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCWV4dGVybiBjb25zdCBjaGFyIFZEU08zMl8jI25hbWVbXTsJCQkJXAotCSh2b2lkICopKFZEU08zMl8jI25hbWUgLSBWRFNPMzJfUFJFTElOSyArICh1bnNpZ25lZCBsb25nKShiYXNlKSk7IFwKLX0pCi0jZW5kaWYKLQotLyoKLSAqIFRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgd2l0aCB0aGUgYWRkcmVzc2VzIGluIHRoZSB2c3lzY2FsbCBwYWdlLgotICogU2VlIHZzeXNjYWxsLXNpZ3JldHVybi5TLgotICovCi1leHRlcm4gdm9pZCBfX3VzZXIgX19rZXJuZWxfc2lncmV0dXJuOwotZXh0ZXJuIHZvaWQgX191c2VyIF9fa2VybmVsX3J0X3NpZ3JldHVybjsKLQotLyoKLSAqIFRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgYnkgdmRzbzMyLlMgdG8gbWFyayB0aGUgYm91bmRzCi0gKiBvZiB0aGUgRUxGIERTTyBpbWFnZXMgaW5jbHVkZWQgdGhlcmVpbi4KLSAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgdmRzbzMyX2ludDgwX3N0YXJ0LCB2ZHNvMzJfaW50ODBfZW5kOwotZXh0ZXJuIGNvbnN0IGNoYXIgdmRzbzMyX3N5c2NhbGxfc3RhcnQsIHZkc28zMl9zeXNjYWxsX2VuZDsKLWV4dGVybiBjb25zdCBjaGFyIHZkc28zMl9zeXNlbnRlcl9zdGFydCwgdmRzbzMyX3N5c2VudGVyX2VuZDsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1ZEU09fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3ZnYS5oIGIvaW5jbHVkZS9hc20teDg2L3ZnYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWU0OTNkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni92Z2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qCi0gKglBY2Nlc3MgdG8gVkdBIHZpZGVvcmFtCi0gKgotICoJKGMpIDE5OTggTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+Ci0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19WR0FfSAotI2RlZmluZSBBU01fWDg2X19WR0FfSAotCi0vKgotICoJT24gdGhlIFBDLCB3ZSBjYW4ganVzdCByZWNhbGN1bGF0ZSBhZGRyZXNzZXMgYW5kIHRoZW4KLSAqCWFjY2VzcyB0aGUgdmlkZW9yYW0gZGlyZWN0bHkgd2l0aG91dCBhbnkgYmxhY2sgbWFnaWMuCi0gKi8KLQotI2RlZmluZSBWR0FfTUFQX01FTSh4LCBzKSAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoeCkKLQotI2RlZmluZSB2Z2FfcmVhZGIoeCkgKCooeCkpCi0jZGVmaW5lIHZnYV93cml0ZWIoeCwgeSkgKCooeSkgPSAoeCkpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19WR0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3ZndG9kLmggYi9pbmNsdWRlL2FzbS14ODYvdmd0b2QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmZDEzMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdmd0b2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVkdUT0RfSAotI2RlZmluZSBBU01fWDg2X19WR1RPRF9ICi0KLSNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgotCi1zdHJ1Y3QgdnN5c2NhbGxfZ3RvZF9kYXRhIHsKLQlzZXFsb2NrX3QJbG9jazsKLQotCS8qIG9wZW4gY29kZWQgJ3N0cnVjdCB0aW1lc3BlYycgKi8KLQl0aW1lX3QJCXdhbGxfdGltZV9zZWM7Ci0JdTMyCQl3YWxsX3RpbWVfbnNlYzsKLQotCWludAkJc3lzY3RsX2VuYWJsZWQ7Ci0Jc3RydWN0IHRpbWV6b25lIHN5c190ejsKLQlzdHJ1Y3QgeyAvKiBleHRyYWN0IG9mIGEgY2xvY2tzb3VyY2Ugc3RydWN0ICovCi0JCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7Ci0JCWN5Y2xlX3QJY3ljbGVfbGFzdDsKLQkJY3ljbGVfdAltYXNrOwotCQl1MzIJbXVsdDsKLQkJdTMyCXNoaWZ0OwotCX0gY2xvY2s7Ci0Jc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fbW9ub3RvbmljOwotfTsKLWV4dGVybiBzdHJ1Y3QgdnN5c2NhbGxfZ3RvZF9kYXRhIF9fdnN5c2NhbGxfZ3RvZF9kYXRhCi1fX3NlY3Rpb25fdnN5c2NhbGxfZ3RvZF9kYXRhOwotZXh0ZXJuIHN0cnVjdCB2c3lzY2FsbF9ndG9kX2RhdGEgdnN5c2NhbGxfZ3RvZF9kYXRhOwotCi0jZW5kaWYgLyogQVNNX1g4Nl9fVkdUT0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Zpc3dzL2NvYmFsdC5oIGIvaW5jbHVkZS9hc20teDg2L3Zpc3dzL2NvYmFsdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjI3YThmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni92aXN3cy9jb2JhbHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1ZJU1dTX19DT0JBTFRfSAotI2RlZmluZSBBU01fWDg2X19WSVNXU19fQ09CQUxUX0gKLQotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLQotLyoKLSAqIENvYmFsdCBTR0kgVmlzdWFsIFdvcmtzdGF0aW9uIHN5c3RlbSBBU0lDCi0gKi8gCi0KLSNkZWZpbmUgQ09fQ1BVX05VTV9QSFlTIDB4MWUwMAotI2RlZmluZSBDT19DUFVfVEFCX1BIWVMgKENPX0NQVV9OVU1fUEhZUyArIDIpCi0KLSNkZWZpbmUgQ09fQ1BVX01BWCA0Ci0KLSNkZWZpbmUJQ09fQ1BVX1BIWVMJCTB4YzIwMDAwMDAKLSNkZWZpbmUJQ09fQVBJQ19QSFlTCQkweGM0MDAwMDAwCi0KLS8qIHNlZSBzZXRfZml4bWFwKCkgYW5kIGFzbS9maXhtYXAuaCAqLwotI2RlZmluZQlDT19DUFVfVkFERFIJCShmaXhfdG9fdmlydChGSVhfQ09fQ1BVKSkKLSNkZWZpbmUJQ09fQVBJQ19WQUREUgkJKGZpeF90b192aXJ0KEZJWF9DT19BUElDKSkKLQotLyogQ29iYWx0IENQVSByZWdpc3RlcnMgLS0gcmVsYXRpdmUgdG8gQ09fQ1BVX1ZBRERSLCB1c2UgY29fY3B1XyooKSAqLwotI2RlZmluZQlDT19DUFVfUkVWCQkweDA4Ci0jZGVmaW5lCUNPX0NQVV9DVFJMCQkweDEwCi0jZGVmaW5lCUNPX0NQVV9TVEFUCQkweDIwCi0jZGVmaW5lCUNPX0NQVV9USU1FVkFMCQkweDMwCi0KLS8qIENPX0NQVV9DVFJMIGJpdHMgKi8KLSNkZWZpbmUJQ09fQ1RSTF9USU1FUlVOCQkweDA0CQkvKiAwID09IGRpc2FibGVkICovCi0jZGVmaW5lCUNPX0NUUkxfVElNRU1BU0sJMHgwOAkJLyogMCA9PSB1bm1hc2tlZCAqLwotCi0vKiBDT19DUFVfU1RBVFVTIGJpdHMgKi8KLSNkZWZpbmUJQ09fU1RBVF9USU1FSU5UUgkweDAyCS8qIChyKSAxID09IGludCBwZW5kLCAodykgMCA9PSBjbGVhciAqLwotCi0vKiBDT19DUFVfVElNRVZBTCB2YWx1ZSAqLwotI2RlZmluZQlDT19USU1FX0haCQkxMDAwMDAwMDAJLyogQ29iYWx0IGNvcmUgcmF0ZSAqLwotCi0vKiBDb2JhbHQgQVBJQyByZWdpc3RlcnMgLS0gcmVsYXRpdmUgdG8gQ09fQVBJQ19WQUREUiwgdXNlIGNvX2FwaWNfKigpICovCi0jZGVmaW5lCUNPX0FQSUNfSEkobikJCSgoKG4pICogMHgxMCkgKyA0KQotI2RlZmluZQlDT19BUElDX0xPKG4pCQkoKG4pICogMHgxMCkKLSNkZWZpbmUJQ09fQVBJQ19JRAkJMHgwZmZjCi0KLS8qIENPX0FQSUNfSUQgYml0cyAqLwotI2RlZmluZQlDT19BUElDX0VOQUJMRQkJMHgwMDAwMDEwMAotCi0vKiBDT19BUElDX0xPIGJpdHMgKi8KLSNkZWZpbmUJQ09fQVBJQ19NQVNLCQkweDAwMDEwMDAwCS8qIDAgPSBlbmFibGVkICovCi0jZGVmaW5lCUNPX0FQSUNfTEVWRUwJCTB4MDAwMDgwMDAJLyogMCA9IGVkZ2UgKi8KLQotLyoKLSAqIFdoZXJlIHRoaW5ncyBhcmUgcGh5c2ljYWxseSB3aXJlZCB0byBDb2JhbHQKLSAqICNkZWZpbmVzIHdpdGggbm8gYm9hcmQgXzx0eXBlPl88cmV2Pl8gYXJlIGNvbW1vbiB0byBhbGwgKHRodXMgZmFyKQotICovCi0jZGVmaW5lCUNPX0FQSUNfSURFMAkJNAotI2RlZmluZSBDT19BUElDX0lERTEJCTIJCS8qIE9ubHkgb24gMzIwICovCi0KLSNkZWZpbmUJQ09fQVBJQ184MjU5CQkxMgkJLyogc2VyaWFsLCBmbG9wcHksIHBhci1sLWwgKi8KLQotLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEEgLS0gInRoZSBvbmUgd2l0aCA4MjU1NyBFdGhlcm5ldCIgKi8KLSNkZWZpbmUJQ09fQVBJQ19QQ0lBX0JBU0UwCTAgLyogYW5kIDEgKi8JLyogc2xvdCAwLCBsaW5lIDAgKi8KLSNkZWZpbmUJQ09fQVBJQ19QQ0lBX0JBU0UxMjMJNSAvKiBhbmQgNiAqLwkvKiBzbG90IDAsIGxpbmUgMSAqLwotCi0jZGVmaW5lCUNPX0FQSUNfUElJWDRfVVNCCTcJCS8qIHRoaXMgb25lIGlzIHdlaXJkICovCi0KLS8qIExpdGhpdW0gUENJIEJyaWRnZSBCIC0tICJ0aGUgb25lIHdpdGggUElJWDQiICovCi0jZGVmaW5lCUNPX0FQSUNfUENJQl9CQVNFMAk4IC8qIGFuZCA5LTEyICovLyogc2xvdCAwLCBsaW5lIDAgKi8KLSNkZWZpbmUJQ09fQVBJQ19QQ0lCX0JBU0UxMjMJMTMgLyogMTQuMTUgKi8JLyogc2xvdCAwLCBsaW5lIDEgKi8KLQotI2RlZmluZQlDT19BUElDX1ZJRE9VVDAJCTE2Ci0jZGVmaW5lCUNPX0FQSUNfVklET1VUMQkJMTcKLSNkZWZpbmUJQ09fQVBJQ19WSURJTjAJCTE4Ci0jZGVmaW5lCUNPX0FQSUNfVklESU4xCQkxOQotCi0jZGVmaW5lCUNPX0FQSUNfTElfQVVESU8JMjIKLQotI2RlZmluZQlDT19BUElDX0FTCQkyNAotI2RlZmluZQlDT19BUElDX1JFCQkyNQotCi0jZGVmaW5lIENPX0FQSUNfQ1BVCQkyOAkJLyogVGltZXIgYW5kIENhY2hlIGludGVycnVwdCAqLwotI2RlZmluZQlDT19BUElDX05NSQkJMjkKLSNkZWZpbmUJQ09fQVBJQ19MQVNUCQlDT19BUElDX05NSQotCi0vKgotICogVGhpcyBpcyBob3cgaXJxcyBhcmUgYXNzaWduZWQgb24gdGhlIFZpc3VhbCBXb3Jrc3RhdGlvbi4KLSAqIExlZ2FjeSBkZXZpY2VzIGdldCBpcnEncyAxLTE1IChzeXN0ZW0gY2xvY2sgaXMgMCBhbmQgaXMgQ09fQVBJQ19DUFUpLgotICogQWxsIG90aGVyIGRldmljZXMgKGluY2x1ZGluZyBQQ0kpIGdvIHRvIENvYmFsdCBhbmQgYXJlIGlycSdzIDE2IG9uIHVwLgotICovCi0jZGVmaW5lCUNPX0lSUV9BUElDMAkxNgkJCS8qIGlycSBvZiBhcGljIGVudHJ5IDAgKi8KLSNkZWZpbmUJSVNfQ09fQVBJQyhpcnEpCSgoaXJxKSA+PSBDT19JUlFfQVBJQzApCi0jZGVmaW5lCUNPX0lSUShhcGljKQkoQ09fSVJRX0FQSUMwICsgKGFwaWMpKQkvKiBhcGljIGVudCB0byBpcnEgKi8KLSNkZWZpbmUJQ09fQVBJQyhpcnEpCSgoaXJxKSAtIENPX0lSUV9BUElDMCkJLyogaXJxIHRvIGFwaWMgZW50ICovCi0jZGVmaW5lIENPX0lSUV9JREUwCTE0CQkJLyoga25vd2xlZGdlIG9mLi4uICovCi0jZGVmaW5lIENPX0lSUV9JREUxCTE1CQkJLyogLi4uIGlkZSBkcml2ZXIgZGVmYXVsdHMhICovCi0jZGVmaW5lCUNPX0lSUV84MjU5CUNPX0lSUShDT19BUElDXzgyNTkpCi0KLSNpZmRlZiBDT05GSUdfWDg2X1ZJU1dTX0FQSUMKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb19jcHVfd3JpdGUodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdikKLXsKLQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKENPX0NQVV9WQUREUityZWcpKT12OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29fY3B1X3JlYWQodW5zaWduZWQgbG9uZyByZWcpCi17Ci0JcmV0dXJuICooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoQ09fQ1BVX1ZBRERSK3JlZykpOwotfSAgICAgICAgICAgIAotICAgICAgICAgICAgIAotc3RhdGljIGlubGluZSB2b2lkIGNvX2FwaWNfd3JpdGUodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdikKLXsKLQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKENPX0FQSUNfVkFERFIrcmVnKSk9djsKLX0gICAgICAgICAgICAKLSAgICAgICAgICAgICAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb19hcGljX3JlYWQodW5zaWduZWQgbG9uZyByZWcpCi17Ci0JcmV0dXJuICooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoQ09fQVBJQ19WQUREUityZWcpKTsKLX0KLSNlbmRpZgotCi1leHRlcm4gY2hhciB2aXN3c19ib2FyZF90eXBlOwotCi0jZGVmaW5lCVZJU1dTXzMyMAkwCi0jZGVmaW5lCVZJU1dTXzU0MAkxCi0KLWV4dGVybiBjaGFyIHZpc3dzX2JvYXJkX3JldjsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1ZJU1dTX19DT0JBTFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Zpc3dzL2xpdGhpdW0uaCBiL2luY2x1ZGUvYXNtLXg4Ni92aXN3cy9saXRoaXVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNmQzYjMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3Zpc3dzL2xpdGhpdW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVklTV1NfX0xJVEhJVU1fSAotI2RlZmluZSBBU01fWDg2X19WSVNXU19fTElUSElVTV9ICi0KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0KLS8qCi0gKiBMaXRoaXVtIGlzIHRoZSBTR0kgVmlzdWFsIFdvcmtzdGF0aW9uIEkvTyBBU0lDCi0gKi8KLQotI2RlZmluZQlMSV9QQ0lfQV9QSFlTCQkweGZjMDAwMDAwCS8qIEVuZXQgaXMgZGV2IDMgKi8KLSNkZWZpbmUJTElfUENJX0JfUEhZUwkJMHhmZDAwMDAwMAkvKiBQSUlYNCBpcyBoZXJlICovCi0KLS8qIHNlZSBzZXRfZml4bWFwKCkgYW5kIGFzbS9maXhtYXAuaCAqLwotI2RlZmluZSBMSV9QQ0lBX1ZBRERSICAgKGZpeF90b192aXJ0KEZJWF9MSV9QQ0lBKSkKLSNkZWZpbmUgTElfUENJQl9WQUREUiAgIChmaXhfdG9fdmlydChGSVhfTElfUENJQikpCi0KLS8qIE5vdCBhIHN0YW5kYXJkIFBDST8gKG5vdCBpbiBsaW51eC9wY2kuaCkgKi8KLSNkZWZpbmUJTElfUENJX0JVU05VTQkweDQ0CQkJLyogbG84OiBwcmltYXJ5LCBoaTg6IHN1YiAqLwotI2RlZmluZSBMSV9QQ0lfSU5URU4gICAgMHg0NgotCi0vKiBMSV9QQ0lfSU5URU5UIGJpdHMgKi8KLSNkZWZpbmUJTElfSU5UQV8wCTB4MDAwMQotI2RlZmluZQlMSV9JTlRBXzEJMHgwMDAyCi0jZGVmaW5lCUxJX0lOVEFfMgkweDAwMDQKLSNkZWZpbmUJTElfSU5UQV8zCTB4MDAwOAotI2RlZmluZQlMSV9JTlRBXzQJMHgwMDEwCi0jZGVmaW5lCUxJX0lOVEIJCTB4MDAyMAotI2RlZmluZQlMSV9JTlRDCQkweDAwNDAKLSNkZWZpbmUJTElfSU5URAkJMHgwMDgwCi0KLS8qIE1vcmUgc3BlY2lhbCBwdXJwb3NlIG1hY3Jvcy4uLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGxpX3BjaWFfd3JpdGUxNih1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgc2hvcnQgdikKLXsKLQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShMSV9QQ0lBX1ZBRERSK3JlZykpPXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbGlfcGNpYV9yZWFkMTYodW5zaWduZWQgbG9uZyByZWcpCi17Ci0JIHJldHVybiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShMSV9QQ0lBX1ZBRERSK3JlZykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbGlfcGNpYl93cml0ZTE2KHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBzaG9ydCB2KQotewotCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKExJX1BDSUJfVkFERFIrcmVnKSk9djsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBsaV9wY2liX3JlYWQxNih1bnNpZ25lZCBsb25nIHJlZykKLXsKLQlyZXR1cm4gKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoTElfUENJQl9WQUREUityZWcpKTsKLX0KLQotI2VuZGlmIC8qIEFTTV9YODZfX1ZJU1dTX19MSVRISVVNX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Zpc3dzL3BpaXg0LmggYi9pbmNsdWRlL2FzbS14ODYvdmlzd3MvcGlpeDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjOTM4MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdmlzd3MvcGlpeDQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1ZJU1dTX19QSUlYNF9ICi0jZGVmaW5lIEFTTV9YODZfX1ZJU1dTX19QSUlYNF9ICi0KLS8qCi0gKiBQSUlYNCBhcyB1c2VkIG9uIFNHSSBWaXN1YWwgV29ya3N0YXRpb25zCi0gKi8KLQotI2RlZmluZQlQSUlYX1BNX1NUQVJUCQkweDBGODAKLQotI2RlZmluZQlTSU9fR1BJT19TVEFSVAkJMHgwRkMwCi0KLSNkZWZpbmUJU0lPX1BNX1NUQVJUCQkweDBGQzgKLQotI2RlZmluZQlQTUJBU0UJCQlQSUlYX1BNX1NUQVJUCi0jZGVmaW5lCUdQSVJFRzAJCQkoUE1CQVNFKzB4MzApCi0jZGVmaW5lCUdQSVJFRyh4KQkJKEdQSVJFRzArKCh4KS84KSkKLSNkZWZpbmUJR1BJQklUKHgpCQkoMSA8PCAoKHgpJTgpKQotCi0jZGVmaW5lCVBJSVhfR1BJX0JEX0lEMQkJMTgKLSNkZWZpbmUJUElJWF9HUElfQkRfSUQyCQkxOQotI2RlZmluZQlQSUlYX0dQSV9CRF9JRDMJCTIwCi0jZGVmaW5lCVBJSVhfR1BJX0JEX0lENAkJMjEKLSNkZWZpbmUJUElJWF9HUElfQkRfUkVHCQlHUElSRUcoUElJWF9HUElfQkRfSUQxKQotI2RlZmluZQlQSUlYX0dQSV9CRF9NQVNLCShHUElCSVQoUElJWF9HUElfQkRfSUQxKSB8IFwKLQkJCQlHUElCSVQoUElJWF9HUElfQkRfSUQyKSB8IFwKLQkJCQlHUElCSVQoUElJWF9HUElfQkRfSUQzKSB8IFwKLQkJCQlHUElCSVQoUElJWF9HUElfQkRfSUQ0KSApCi0KLSNkZWZpbmUJUElJWF9HUElfQkRfU0hJRlQJKFBJSVhfR1BJX0JEX0lEMSAlIDgpCi0KLSNkZWZpbmUJU0lPX0lOREVYCQkweDJlCi0jZGVmaW5lCVNJT19EQVRBCQkweDJmCi0KLSNkZWZpbmUJU0lPX0RFVl9TRUwJCTB4NwotI2RlZmluZQlTSU9fREVWX0VOQgkJMHgzMAotI2RlZmluZQlTSU9fREVWX01TQgkJMHg2MAotI2RlZmluZQlTSU9fREVWX0xTQgkJMHg2MQotCi0jZGVmaW5lCVNJT19HUF9ERVYJCTB4NwotCi0jZGVmaW5lCVNJT19HUF9CQVNFCQlTSU9fR1BJT19TVEFSVAotI2RlZmluZQlTSU9fR1BfTVNCCQkoU0lPX0dQX0JBU0U+PjgpCi0jZGVmaW5lCVNJT19HUF9MU0IJCShTSU9fR1BfQkFTRSYweGZmKQotCi0jZGVmaW5lCVNJT19HUF9EQVRBMQkJKFNJT19HUF9CQVNFKzApCi0KLSNkZWZpbmUJU0lPX1BNX0RFVgkJMHg4Ci0KLSNkZWZpbmUJU0lPX1BNX0JBU0UJCVNJT19QTV9TVEFSVAotI2RlZmluZQlTSU9fUE1fTVNCCQkoU0lPX1BNX0JBU0U+PjgpCi0jZGVmaW5lCVNJT19QTV9MU0IJCShTSU9fUE1fQkFTRSYweGZmKQotI2RlZmluZQlTSU9fUE1fSU5ERVgJCShTSU9fUE1fQkFTRSswKQotI2RlZmluZQlTSU9fUE1fREFUQQkJKFNJT19QTV9CQVNFKzEpCi0KLSNkZWZpbmUJU0lPX1BNX0ZFUjIJCTB4MQotCi0jZGVmaW5lCVNJT19QTV9HUF9FTgkJMHg4MAotCi0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGRldi9yZWcgd2hlcmUgZ2VuZXJhdGluZyBhIGNvbmZpZyBjeWNsZSB3aWxsCi0gKiByZXN1bHQgaW4gYSBQQ0kgc3BlY2lhbCBjeWNsZS4KLSAqLwotI2RlZmluZSBTUEVDSUFMX0RFVgkJMHhmZgotI2RlZmluZSBTUEVDSUFMX1JFRwkJMHgwMAotCi0vKgotICogUElJWDQgbmVlZHMgdG8gc2VlIGEgc3BlY2lhbCBjeWNsZSB3aXRoIHRoZSBmb2xsb3dpbmcgZGF0YQotICogdG8gYmUgY29udmluY2VkIHRoZSBwcm9jZXNzb3IgaGFzIGdvbmUgaW50byB0aGUgc3RvcCBncmFudAotICogc3RhdGUuICBQSUlYNCBpbnNpc3RzIG9uIHNlZWluZyB0aGlzIGJlZm9yZSBpdCB3aWxsIHBvd2VyCi0gKiBkb3duIGEgc3lzdGVtLgotICovCi0jZGVmaW5lIFBJSVhfU1BFQ0lBTF9TVE9QCQkweDAwMTIwMDAyCi0KLSNkZWZpbmUgUElJWDRfUkVTRVRfUE9SVAkweGNmOQotI2RlZmluZSBQSUlYNF9SRVNFVF9WQUwJCTB4NgotCi0jZGVmaW5lIFBNU1RTX1BPUlQJCTB4ZjgwCS8vIDIgYnl0ZXMJUE0gU3RhdHVzCi0jZGVmaW5lIFBNRU5fUE9SVAkJMHhmODIJLy8gMiBieXRlcwlQTSBFbmFibGUKLSNkZWZpbmUJUE1DTlRSTF9QT1JUCQkweGY4NAkvLyAyIGJ5dGVzCVBNIENvbnRyb2wKLQotI2RlZmluZSBQTV9TVVNQRU5EX0VOQUJMRQkweDIwMDAJLy8gc3RhcnQgc2VxdWVuY2UgdG8gc3VzcGVuZCBzdGF0ZQotCi0vKgotICogUE1TVFMgYW5kIFBNRU4gSS9PIGJpdCBkZWZpbml0aW9ucy4KLSAqIChCaXRzIGFyZSB0aGUgc2FtZSBpbiBib3RoIHJlZ2lzdGVycykKLSAqLwotI2RlZmluZSBQTV9TVFNfUlNNCQkoMTw8MTUpCS8vIFJlc3VtZSBTdGF0dXMKLSNkZWZpbmUgUE1fU1RTX1BXUkJUTk9SCQkoMTw8MTEpCS8vIFBvd2VyIEJ1dHRvbiBPdmVycmlkZQotI2RlZmluZSBQTV9TVFNfUlRDCQkoMTw8MTApCS8vIFJUQyBzdGF0dXMKLSNkZWZpbmUgUE1fU1RTX1BXUkJUTgkJKDE8PDgpCS8vIFBvd2VyIEJ1dHRvbiBQcmVzc2VkPwotI2RlZmluZSBQTV9TVFNfR0JMCQkoMTw8NSkJLy8gR2xvYmFsIFN0YXR1cwotI2RlZmluZSBQTV9TVFNfQk0JCSgxPDw0KQkvLyBCdXMgTWFzdGVyIFN0YXR1cwotI2RlZmluZSBQTV9TVFNfVE1ST0YJCSgxPDwwKQkvLyBUaW1lciBPdmVyZmxvdyBTdGF0dXMuCi0KLS8qCi0gKiBTdG9wIGNsb2NrIEdQSSByZWdpc3RlcgotICovCi0jZGVmaW5lIFBJSVhfR1BJUkVHMAkJCSgweGY4MCArIDB4MzApCi0KLS8qCi0gKiBTdG9wIGNsb2NrIEdQSSBiaXQgaW4gR1BJUkVHMAotICovCi0jZGVmaW5lCVBJSVhfR1BJX1NUUENMSwkJMHg0CS8vIFNUUENMSyBzaWduYWwgcm91dGVkIGJhY2sgaW4KLQotI2VuZGlmIC8qIEFTTV9YODZfX1ZJU1dTX19QSUlYNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdm04Ni5oIGIvaW5jbHVkZS9hc20teDg2L3ZtODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk4YmQxOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdm04Ni5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fVk04Nl9ICi0jZGVmaW5lIEFTTV9YODZfX1ZNODZfSAotCi0vKgotICogSSdtIGd1ZXNzaW5nIGF0IHRoZSBWSUYvVklQIGZsYWcgdXNhZ2UsIGJ1dCBob3BlIHRoYXQgdGhpcyBpcyBob3cKLSAqIHRoZSBQZW50aXVtIHVzZXMgdGhlbS4gTGludXggd2lsbCByZXR1cm4gZnJvbSB2bTg2IG1vZGUgd2hlbiBib3RoCi0gKiBWSUYgYW5kIFZJUCBpcyBzZXQuCi0gKgotICogT24gYSBQZW50aXVtLCB3ZSBjb3VsZCBwcm9iYWJseSBvcHRpbWl6ZSB0aGUgdmlydHVhbCBmbGFncyBkaXJlY3RseQotICogaW4gdGhlIGVmbGFncyByZWdpc3RlciBpbnN0ZWFkIG9mIGRvaW5nIGl0ICJieSBoYW5kIiBpbiB2ZmxhZ3MuLi4KLSAqCi0gKiBMaW51cwotICovCi0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+Ci0KLSNkZWZpbmUgQklPU1NFRwkJMHgwZjAwMAotCi0jZGVmaW5lIENQVV8wODYJCTAKLSNkZWZpbmUgQ1BVXzE4NgkJMQotI2RlZmluZSBDUFVfMjg2CQkyCi0jZGVmaW5lIENQVV8zODYJCTMKLSNkZWZpbmUgQ1BVXzQ4NgkJNAotI2RlZmluZSBDUFVfNTg2CQk1Ci0KLS8qCi0gKiBSZXR1cm4gdmFsdWVzIGZvciB0aGUgJ3ZtODYoKScgc3lzdGVtIGNhbGwKLSAqLwotI2RlZmluZSBWTTg2X1RZUEUocmV0dmFsKQkoKHJldHZhbCkgJiAweGZmKQotI2RlZmluZSBWTTg2X0FSRyhyZXR2YWwpCSgocmV0dmFsKSA+PiA4KQotCi0jZGVmaW5lIFZNODZfU0lHTkFMCTAJLyogcmV0dXJuIGR1ZSB0byBzaWduYWwgKi8KLSNkZWZpbmUgVk04Nl9VTktOT1dOCTEJLyogdW5oYW5kbGVkIEdQIGZhdWx0Ci0JCQkJICAgLSBJTy1pbnN0cnVjdGlvbiBvciBzaW1pbGFyICovCi0jZGVmaW5lIFZNODZfSU5UeAkyCS8qIGludDMvaW50IHggaW5zdHJ1Y3Rpb24gKEFSRyA9IHgpICovCi0jZGVmaW5lIFZNODZfU1RJCTMJLyogc3RpL3BvcGYvaXJldCBpbnN0cnVjdGlvbiBlbmFibGVkCi0JCQkJICAgdmlydHVhbCBpbnRlcnJ1cHRzICovCi0KLS8qCi0gKiBBZGRpdGlvbmFsIHJldHVybiB2YWx1ZXMgd2hlbiBpbnZva2luZyBuZXcgdm04NigpCi0gKi8KLSNkZWZpbmUgVk04Nl9QSUNSRVRVUk4JNAkvKiByZXR1cm4gZHVlIHRvIHBlbmRpbmcgUElDIHJlcXVlc3QgKi8KLSNkZWZpbmUgVk04Nl9UUkFQCTYJLyogcmV0dXJuIGR1ZSB0byBET1MtZGVidWdnZXIgcmVxdWVzdCAqLwotCi0vKgotICogZnVuY3Rpb24gY29kZXMgd2hlbiBpbnZva2luZyBuZXcgdm04NigpCi0gKi8KLSNkZWZpbmUgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0sJMAotI2RlZmluZSBWTTg2X0VOVEVSCQkxCi0jZGVmaW5lIFZNODZfRU5URVJfTk9fQllQQVNTCTIKLSNkZWZpbmUJVk04Nl9SRVFVRVNUX0lSUQkzCi0jZGVmaW5lIFZNODZfRlJFRV9JUlEJCTQKLSNkZWZpbmUgVk04Nl9HRVRfSVJRX0JJVFMJNQotI2RlZmluZSBWTTg2X0dFVF9BTkRfUkVTRVRfSVJRCTYKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHN0YWNrLWxheW91dCBzZWVuIGJ5IHRoZSB1c2VyIHNwYWNlIHByb2dyYW0gd2hlbiB3ZSBoYXZlCi0gKiBkb25lIGEgdHJhbnNsYXRpb24gb2YgIlNBVkVfQUxMIiBmcm9tIHZtODYgbW9kZS4gVGhlIHJlYWwga2VybmVsIGxheW91dAotICogaXMgJ2tlcm5lbF92bTg2X3JlZ3MnIChzZWUgYmVsb3cpLgotICovCi0KLXN0cnVjdCB2bTg2X3JlZ3MgewotLyoKLSAqIG5vcm1hbCByZWdzLCB3aXRoIHNwZWNpYWwgbWVhbmluZyBmb3IgdGhlIHNlZ21lbnQgZGVzY3JpcHRvcnMuLgotICovCi0JbG9uZyBlYng7Ci0JbG9uZyBlY3g7Ci0JbG9uZyBlZHg7Ci0JbG9uZyBlc2k7Ci0JbG9uZyBlZGk7Ci0JbG9uZyBlYnA7Ci0JbG9uZyBlYXg7Ci0JbG9uZyBfX251bGxfZHM7Ci0JbG9uZyBfX251bGxfZXM7Ci0JbG9uZyBfX251bGxfZnM7Ci0JbG9uZyBfX251bGxfZ3M7Ci0JbG9uZyBvcmlnX2VheDsKLQlsb25nIGVpcDsKLQl1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7Ci0JbG9uZyBlZmxhZ3M7Ci0JbG9uZyBlc3A7Ci0JdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwotLyoKLSAqIHRoZXNlIGFyZSBzcGVjaWZpYyB0byB2ODYgbW9kZToKLSAqLwotCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKLQl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7Ci0JdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwotCXVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKLX07Ci0KLXN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBfX21hcFs4XTsJCQkvKiAyNTYgYml0cyAqLwotfTsKLQotc3RydWN0IHZtODZfc3RydWN0IHsKLQlzdHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7Ci0JdW5zaWduZWQgbG9uZyBjcHVfdHlwZTsKLQlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50X3JldmVjdG9yZWQ7Ci0Jc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludDIxX3JldmVjdG9yZWQ7Ci19OwotCi0vKgotICogZmxhZ3MgbWFza3MKLSAqLwotI2RlZmluZSBWTTg2X1NDUkVFTl9CSVRNQVAJMHgwMDAxCi0KLXN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBmb3JjZV9yZXR1cm5fZm9yX3BpYzoxOwotCXVuc2lnbmVkIGxvbmcgdm04NmRiZ19hY3RpdmU6MTsgICAgICAgLyogZm9yIGRlYnVnZ2VyICovCi0JdW5zaWduZWQgbG9uZyB2bTg2ZGJnX1RGcGVuZGlnOjE7ICAgICAvKiBmb3IgZGVidWdnZXIgKi8KLQl1bnNpZ25lZCBsb25nIHVudXNlZDoyODsKLQl1bnNpZ25lZCBsb25nIGlzX3ZtODZwdXM6MTsJICAgICAgLyogZm9yIHZtODYgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgY2hhciB2bTg2ZGJnX2ludHh4dGFiWzMyXTsgICAvKiBmb3IgZGVidWdnZXIgKi8KLX07Ci1zdHJ1Y3Qgdm04NnBsdXNfc3RydWN0IHsKLQlzdHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7Ci0JdW5zaWduZWQgbG9uZyBjcHVfdHlwZTsKLQlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50X3JldmVjdG9yZWQ7Ci0Jc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludDIxX3JldmVjdG9yZWQ7Ci0Jc3RydWN0IHZtODZwbHVzX2luZm9fc3RydWN0IHZtODZwbHVzOwotfTsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLQotLyoKLSAqIFRoaXMgaXMgdGhlIChrZXJuZWwpIHN0YWNrLWxheW91dCB3aGVuIHdlIGhhdmUgZG9uZSBhICJTQVZFX0FMTCIgZnJvbSB2bTg2Ci0gKiBtb2RlIC0gdGhlIG1haW4gY2hhbmdlIGlzIHRoYXQgdGhlIG9sZCBzZWdtZW50IGRlc2NyaXB0b3JzIGFyZW4ndAotICogdXNlZnVsIGFueSBtb3JlIGFuZCBhcmUgZm9yY2VkIHRvIGJlIHplcm8gYnkgdGhlIGtlcm5lbCAoYW5kIHRoZQotICogaGFyZHdhcmUgd2hlbiBhIHRyYXAgb2NjdXJzKSwgYW5kIHRoZSByZWFsIHNlZ21lbnQgZGVzY3JpcHRvcnMgYXJlCi0gKiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuIExvb2sgYXQgcHRyYWNlLmggdG8gc2VlIHRoZSAibm9ybWFsIgotICogc2V0dXAuIEZvciB1c2VyIHNwYWNlIGxheW91dCBzZWUgJ3N0cnVjdCB2bTg2X3JlZ3MnIGFib3ZlLgotICovCi0KLXN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHsKLS8qCi0gKiBub3JtYWwgcmVncywgd2l0aCBzcGVjaWFsIG1lYW5pbmcgZm9yIHRoZSBzZWdtZW50IGRlc2NyaXB0b3JzLi4KLSAqLwotCXN0cnVjdCBwdF9yZWdzIHB0OwotLyoKLSAqIHRoZXNlIGFyZSBzcGVjaWZpYyB0byB2ODYgbW9kZToKLSAqLwotCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKLQl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7Ci0JdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwotCXVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKLX07Ci0KLXN0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QgewotCXN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHJlZ3M7Ci0vKgotICogdGhlIGJlbG93IHBhcnQgcmVtYWlucyBvbiB0aGUga2VybmVsIHN0YWNrIHdoaWxlIHdlIGFyZSBpbiBWTTg2IG1vZGUuCi0gKiAndHNzLmVzcDAnIHRoZW4gY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgVk04Nl9UU1NfRVNQMCBiZWxvdywgYW5kIHdoZW4gd2UKLSAqIGdldCBmb3JjZWQgYmFjayBmcm9tIFZNODYsIHRoZSBDUFUgYW5kICJTQVZFX0FMTCIgd2lsbCByZXN0b3JlIHRoZSBhYm92ZQotICogJ3N0cnVjdCBrZXJuZWxfdm04Nl9yZWdzJyB3aXRoIHRoZSB0aGVuIGFjdHVhbCB2YWx1ZXMuCi0gKiBUaGVyZWZvcmUsIHB0X3JlZ3MgaW4gZmFjdCBwb2ludHMgdG8gYSBjb21wbGV0ZSAna2VybmVsX3ZtODZfc3RydWN0JwotICogaW4ga2VybmVsc3BhY2UsIGhlbmNlIHdlIG5lZWQgbm90IHJlZ2V0IHRoZSBkYXRhIGZyb20gdXNlcnNwYWNlLgotICovCi0jZGVmaW5lIFZNODZfVFNTX0VTUDAgZmxhZ3MKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKLQl1bnNpZ25lZCBsb25nIGNwdV90eXBlOwotCXN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2ZWN0b3JlZDsKLQlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3JlZDsKLQlzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3Qgdm04NnBsdXM7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MzMjsgICAvKiBoZXJlIHdlIHNhdmUgdGhlIHBvaW50ZXIgdG8gdGhlIG9sZCByZWdzICovCi0vKgotICogVGhlIGJlbG93IGlzIG5vdCBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0aGUgc3RhY2sgbGF5b3V0IGNvbnRpbnVlcwotICogdGhpcyB3YXkuIEluIGZyb250IG9mICdyZXR1cm4tZWlwJyBtYXkgYmUgc29tZSBkYXRhLCBkZXBlbmRpbmcgb24KLSAqIGNvbXBpbGF0aW9uLCBzbyB3ZSBkb24ndCByZWx5IG9uIHRoaXMgYW5kIHNhdmUgdGhlIHBvaW50ZXIgdG8gJ29sZHJlZ3MnCi0gKiBpbiAncmVnczMyJyBhYm92ZS4KLSAqIEhvd2V2ZXIsIHdpdGggR0NDLTIuNy4yIGFuZCB0aGUgY3VycmVudCBDRkxBR1MgeW91IHNlZSBleGFjdGx5IHRoaXM6Ci0KLQlsb25nIHJldHVybi1laXA7ICAgICAgICBmcm9tIGNhbGwgdG8gdm04NigpCi0Jc3RydWN0IHB0X3JlZ3Mgb2xkcmVnczsgIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGFzIHNhdmVkIGJ5IHN5c2NhbGwKLSAqLwotfTsKLQotI2lmZGVmIENPTkZJR19WTTg2Ci0KLXZvaWQgaGFuZGxlX3ZtODZfZmF1bHQoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiwgbG9uZyk7Ci1pbnQgaGFuZGxlX3ZtODZfdHJhcChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqLCBsb25nLCBpbnQpOwotc3RydWN0IHB0X3JlZ3MgKnNhdmVfdjg2X3N0YXRlKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopOwotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci12b2lkIHJlbGVhc2Vfdm04Nl9pcnFzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLQotI2Vsc2UKLQotI2RlZmluZSBoYW5kbGVfdm04Nl9mYXVsdChhLCBiKQotI2RlZmluZSByZWxlYXNlX3ZtODZfaXJxcyhhKQotCi1zdGF0aWMgaW5saW5lIGludCBoYW5kbGVfdm04Nl90cmFwKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICphLCBsb25nIGIsIGludCBjKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1ZNODYgKi8KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1ZNODZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3ZtaV90aW1lLmggYi9pbmNsdWRlL2FzbS14ODYvdm1pX3RpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkMzllNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdm1pX3RpbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBWTUkgVGltZSB3cmFwcGVycwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgVk13YXJlLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKLSAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCi0gKiBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogU2VuZCBmZWVkYmFjayB0byBkaGVjaHRAdm13YXJlLmNvbQotICoKLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1ZNSV9USU1FX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVk1JX1RJTUVfSAotCi0vKgotICogUmF3IFZNSSBjYWxsIGluZGljZXMgZm9yIHRpbWVyIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIFZNSV9DQUxMX0dldEN5Y2xlRnJlcXVlbmN5CTY2Ci0jZGVmaW5lIFZNSV9DQUxMX0dldEN5Y2xlQ291bnRlcgk2NwotI2RlZmluZSBWTUlfQ0FMTF9TZXRBbGFybQkJNjgKLSNkZWZpbmUgVk1JX0NBTExfQ2FuY2VsQWxhcm0JCTY5Ci0jZGVmaW5lIFZNSV9DQUxMX0dldFdhbGxjbG9ja1RpbWUJNzAKLSNkZWZpbmUgVk1JX0NBTExfV2FsbGNsb2NrVXBkYXRlZAk3MQotCi0vKiBDYWNoZWQgVk1JIHRpbWVyIG9wZXJhdGlvbnMgKi8KLWV4dGVybiBzdHJ1Y3Qgdm1pX3RpbWVyX29wcyB7Ci0JdTY0ICgqZ2V0X2N5Y2xlX2ZyZXF1ZW5jeSkodm9pZCk7Ci0JdTY0ICgqZ2V0X2N5Y2xlX2NvdW50ZXIpKGludCk7Ci0JdTY0ICgqZ2V0X3dhbGxjbG9jaykodm9pZCk7Ci0JaW50ICgqd2FsbGNsb2NrX3VwZGF0ZWQpKHZvaWQpOwotCXZvaWQgKCpzZXRfYWxhcm0pKHUzMiBmbGFncywgdTY0IGV4cGlyeSwgdTY0IHBlcmlvZCk7Ci0Jdm9pZCAoKmNhbmNlbF9hbGFybSkodTMyIGZsYWdzKTsKLX0gdm1pX3RpbWVyX29wczsKLQotLyogUHJvdG90eXBlcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB2bWlfZ2V0X3dhbGxjbG9jayh2b2lkKTsKLWV4dGVybiBpbnQgdm1pX3NldF93YWxsY2xvY2sodW5zaWduZWQgbG9uZyBub3cpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB2bWlfc2NoZWRfY2xvY2sodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB2bWlfdHNjX2toeih2b2lkKTsKLQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotZXh0ZXJuIHZvaWQgX19kZXZpbml0IHZtaV90aW1lX2JzcF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19kZXZpbml0IHZtaV90aW1lX2FwX2luaXQodm9pZCk7Ci0jZW5kaWYKLQotLyoKLSAqIFdoZW4gcnVuIHVuZGVyIGEgaHlwZXJ2aXNvciwgYSB2Y3B1IGlzIGFsd2F5cyBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOgotICogcnVubmluZywgaGFsdGVkLCBvciByZWFkeS4gIFRoZSB2Y3B1IGlzIGluIHRoZSAncnVubmluZycgc3RhdGUgaWYgaXQKLSAqIGlzIGV4ZWN1dGluZy4gIFdoZW4gdGhlIHZjcHUgZXhlY3V0ZXMgdGhlIGhhbHQgaW50ZXJmYWNlLCB0aGUgdmNwdQotICogZW50ZXJzIHRoZSAnaGFsdGVkJyBzdGF0ZSBhbmQgcmVtYWlucyBoYWx0ZWQgdW50aWwgdGhlcmUgaXMgc29tZSB3b3JrCi0gKiBwZW5kaW5nIGZvciB0aGUgdmNwdSAoZS5nLiBhbiBhbGFybSBleHBpcmVzLCBob3N0IEkvTyBjb21wbGV0ZXMgb24KLSAqIGJlaGFsZiBvZiB2aXJ0dWFsIEkvTykuICBBdCB0aGlzIHBvaW50LCB0aGUgdmNwdSBlbnRlcnMgdGhlICdyZWFkeScKLSAqIHN0YXRlICh3YWl0aW5nIGZvciB0aGUgaHlwZXJ2aXNvciB0byByZXNjaGVkdWxlIGl0KS4gIEZpbmFsbHksIGF0IGFueQotICogdGltZSB3aGVuIHRoZSB2Y3B1IGlzIG5vdCBpbiB0aGUgJ3J1bm5pbmcnIHN0YXRlIG5vciB0aGUgJ2hhbHRlZCcKLSAqIHN0YXRlLCBpdCBpcyBpbiB0aGUgJ3JlYWR5JyBzdGF0ZS4KLSAqCi0gKiBSZWFsIHRpbWUgaXMgYWR2YW5jZXMgd2hpbGUgdGhlIHZjcHUgaXMgJ3J1bm5pbmcnLCAncmVhZHknLCBvcgotICogJ2hhbHRlZCcuICBTdG9sZW4gdGltZSBpcyB0aGUgdGltZSBpbiB3aGljaCB0aGUgdmNwdSBpcyBpbiB0aGUKLSAqICdyZWFkeScgc3RhdGUuICBBdmFpbGFibGUgdGltZSBpcyB0aGUgcmVtYWluaW5nIHRpbWUgLS0gdGhlIHZjcHUgaXMKLSAqIGVpdGhlciAncnVubmluZycgb3IgJ2hhbHRlZCcuCi0gKgotICogQWxsIHRocmVlIHZpZXdzIG9mIHRpbWUgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVk1JIGN5Y2xlCi0gKiBjb3VudGVycy4KLSAqLwotCi0vKiBUaGUgY3ljbGUgY291bnRlcnMuICovCi0jZGVmaW5lIFZNSV9DWUNMRVNfUkVBTCAgICAgICAgIDAKLSNkZWZpbmUgVk1JX0NZQ0xFU19BVkFJTEFCTEUgICAgMQotI2RlZmluZSBWTUlfQ1lDTEVTX1NUT0xFTiAgICAgICAyCi0KLS8qIFRoZSBhbGFybSBpbnRlcmZhY2UgJ2ZsYWdzJyBiaXRzICovCi0jZGVmaW5lIFZNSV9BTEFSTV9DT1VOVEVSUyAgICAgIDIKLQotI2RlZmluZSBWTUlfQUxBUk1fQ09VTlRFUl9NQVNLICAweDAwMDAwMGZmCi0KLSNkZWZpbmUgVk1JX0FMQVJNX1dJUkVEX0lSUTAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBWTUlfQUxBUk1fV0lSRURfTFZUVCAgICAweDAwMDEwMDAwCi0KLSNkZWZpbmUgVk1JX0FMQVJNX0lTX09ORVNIT1QgICAgMHgwMDAwMDAwMAotI2RlZmluZSBWTUlfQUxBUk1fSVNfUEVSSU9ESUMgICAweDAwMDAwMTAwCi0KLSNkZWZpbmUgQ09ORklHX1ZNSV9BTEFSTV9IWgkxMDAKLQotI2VuZGlmIC8qIEFTTV9YODZfX1ZNSV9USU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni92c3lzY2FsbC5oIGIvaW5jbHVkZS9hc20teDg2L3ZzeXNjYWxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZDQ2ODIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3ZzeXNjYWxsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1ZTWVNDQUxMX0gKLSNkZWZpbmUgQVNNX1g4Nl9fVlNZU0NBTExfSAotCi1lbnVtIHZzeXNjYWxsX251bSB7Ci0JX19OUl92Z2V0dGltZW9mZGF5LAotCV9fTlJfdnRpbWUsCi0JX19OUl92Z2V0Y3B1LAotfTsKLQotI2RlZmluZSBWU1lTQ0FMTF9TVEFSVCAoLTEwVUwgPDwgMjApCi0jZGVmaW5lIFZTWVNDQUxMX1NJWkUgMTAyNAotI2RlZmluZSBWU1lTQ0FMTF9FTkQgKC0yVUwgPDwgMjApCi0jZGVmaW5lIFZTWVNDQUxMX01BUFBFRF9QQUdFUyAxCi0jZGVmaW5lIFZTWVNDQUxMX0FERFIodnN5c2NhbGxfbnIpIChWU1lTQ0FMTF9TVEFSVCtWU1lTQ0FMTF9TSVpFKih2c3lzY2FsbF9ucikpCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgotCi0jZGVmaW5lIF9fc2VjdGlvbl92Z2V0Y3B1X21vZGUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIudmdldGNwdV9tb2RlIiksIGFsaWduZWQoMTYpKSkKLSNkZWZpbmUgX19zZWN0aW9uX2ppZmZpZXMgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIuamlmZmllcyIpLCBhbGlnbmVkKDE2KSkpCi0KLS8qIERlZmluaXRpb25zIGZvciBDT05GSUdfR0VORVJJQ19USU1FIGRlZmluaXRpb25zICovCi0jZGVmaW5lIF9fc2VjdGlvbl92c3lzY2FsbF9ndG9kX2RhdGEgX19hdHRyaWJ1dGVfXyBcCi0JKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnZzeXNjYWxsX2d0b2RfZGF0YSIpLGFsaWduZWQoMTYpKSkKLSNkZWZpbmUgX19zZWN0aW9uX3ZzeXNjYWxsX2Nsb2NrIF9fYXR0cmlidXRlX18gXAotCSgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi52c3lzY2FsbF9jbG9jayIpLGFsaWduZWQoMTYpKSkKLSNkZWZpbmUgX192c3lzY2FsbF9mbiBcCi0JX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18oIi52c3lzY2FsbF9mbiIpKSkgbm90cmFjZQotCi0jZGVmaW5lIFZHRVRDUFVfUkRUU0NQCTEKLSNkZWZpbmUgVkdFVENQVV9MU0wJMgotCi1leHRlcm4gaW50IF9fdmdldGNwdV9tb2RlOwotZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19qaWZmaWVzOwotCi0vKiBrZXJuZWwgc3BhY2UgKHdyaXRlYWJsZSkgKi8KLWV4dGVybiBpbnQgdmdldGNwdV9tb2RlOwotZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0KLWV4dGVybiB2b2lkIG1hcF92c3lzY2FsbCh2b2lkKTsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIEFTTV9YODZfX1ZTWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vZXZlbnRzLmggYi9pbmNsdWRlL2FzbS14ODYveGVuL2V2ZW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTUxZjViLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vZXZlbnRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1hFTl9fRVZFTlRTX0gKLSNkZWZpbmUgQVNNX1g4Nl9fWEVOX19FVkVOVFNfSAotCi1lbnVtIGlwaV92ZWN0b3IgewotCVhFTl9SRVNDSEVEVUxFX1ZFQ1RPUiwKLQlYRU5fQ0FMTF9GVU5DVElPTl9WRUNUT1IsCi0JWEVOX0NBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUiwKLQlYRU5fU1BJTl9VTkxPQ0tfVkVDVE9SLAotCi0JWEVOX05SX0lQSVMsCi19OwotCi1zdGF0aWMgaW5saW5lIGludCB4ZW5faXJxc19kaXNhYmxlZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MocmVncy0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeGVuX2RvX0lSUShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZWdzLT5vcmlnX2F4ID0gfmlycTsKLQlkb19JUlEocmVncyk7Ci19Ci0KLSNlbmRpZiAvKiBBU01fWDg2X19YRU5fX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGVuL2dyYW50X3RhYmxlLmggYi9pbmNsdWRlL2FzbS14ODYveGVuL2dyYW50X3RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YmFhYjQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3hlbi9ncmFudF90YWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1hFTl9fR1JBTlRfVEFCTEVfSAotI2RlZmluZSBBU01fWDg2X19YRU5fX0dSQU5UX1RBQkxFX0gKLQotI2RlZmluZSB4ZW5fYWxsb2Nfdm1fYXJlYShzaXplKQlhbGxvY192bV9hcmVhKHNpemUpCi0jZGVmaW5lIHhlbl9mcmVlX3ZtX2FyZWEoYXJlYSkJZnJlZV92bV9hcmVhKGFyZWEpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19YRU5fX0dSQU5UX1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaHlwZXJjYWxsLmggYi9pbmNsdWRlL2FzbS14ODYveGVuL2h5cGVyY2FsbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGY0MjU5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaHlwZXJjYWxsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogaHlwZXJjYWxsLmgKLSAqCi0gKiBMaW51eC1zcGVjaWZpYyBoeXBlcnZpc29yIGhhbmRsaW5nLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LCBLIEEgRnJhc2VyCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgb3IsIHdoZW4gZGlzdHJpYnV0ZWQKLSAqIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvIG90aGVyCi0gKiBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Ci0gKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LAotICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCi0gKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1hFTl9fSFlQRVJDQUxMX0gKLSNkZWZpbmUgQVNNX1g4Nl9fWEVOX19IWVBFUkNBTExfSAotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+Ci0jaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9zY2hlZC5oPgotI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvcGh5c2Rldi5oPgotCi0vKgotICogVGhlIGh5cGVyY2FsbCBhc21zIGhhdmUgdG8gbWVldCBzZXZlcmFsIGNvbnN0cmFpbnRzOgotICogLSBXb3JrIG9uIDMyLSBhbmQgNjQtYml0LgotICogICAgVGhlIHR3byBhcmNoaXRlY3R1cmVzIHB1dCB0aGVpciBhcmd1bWVudHMgaW4gZGlmZmVyZW50IHNldHMgb2YKLSAqICAgIHJlZ2lzdGVycy4KLSAqCi0gKiAtIFdvcmsgYXJvdW5kIGFzbSBzeW50YXggcXVpcmtzCi0gKiAgICBJdCBpc24ndCBwb3NzaWJsZSB0byBzcGVjaWZ5IG9uZSBvZiB0aGUgck5OIHJlZ2lzdGVycyBpbiBhCi0gKiAgICBjb25zdHJhaW50LCBzbyB3ZSB1c2UgZXhwbGljaXQgcmVnaXN0ZXIgdmFyaWFibGVzIHRvIGdldCB0aGUKLSAqICAgIGFyZ3MgaW50byB0aGUgcmlnaHQgcGxhY2UuCi0gKgotICogLSBNYXJrIGFsbCByZWdpc3RlcnMgYXMgcG90ZW50aWFsbHkgY2xvYmJlcmVkCi0gKiAgICBFdmVuIHVudXNlZCBwYXJhbWV0ZXJzIGNhbiBiZSBjbG9iYmVyZWQgYnkgdGhlIGh5cGVydmlzb3IsIHNvIHdlCi0gKiAgICBuZWVkIHRvIG1ha2Ugc3VyZSBnY2Mga25vd3MgaXQuCi0gKgotICogLSBBdm9pZCBjb21waWxlciBidWdzLgotICogICAgVGhpcyBpcyB0aGUgdHJpY2t5IHBhcnQuICBCZWNhdXNlIHg4Nl8zMiBoYXMgc3VjaCBhIGNvbnN0cmFpbmVkCi0gKiAgICByZWdpc3RlciBzZXQsIGdjYyB2ZXJzaW9ucyBiZWxvdyA0LjMgaGF2ZSB0cm91YmxlIGdlbmVyYXRpbmcKLSAqICAgIGNvZGUgd2hlbiBhbGwgdGhlIGFyZyByZWdpc3RlcnMgYW5kIG1lbW9yeSBhcmUgdHJhc2hlZCBieSB0aGUKLSAqICAgIGFzbS4gIFRoZXJlIGFyZSBzeW50YWN0aWNhbGx5IHNpbXBsZXIgd2F5cyBvZiBhY2hpZXZpbmcgdGhlCi0gKiAgICBzZW1hbnRpY3MgYmVsb3csIGJ1dCB0aGV5IGNhdXNlIHRoZSBjb21waWxlciB0byBjcmFzaC4KLSAqCi0gKiAgICBUaGUgb25seSBjb21iaW5hdGlvbiBJIGZvdW5kIHdoaWNoIHdvcmtzIGlzOgotICogICAgIC0gYXNzaWduIHRoZSBfX2FyZ1ggdmFyaWFibGVzIGZpcnN0Ci0gKiAgICAgLSBsaXN0IGFsbCBhY3R1YWxseSB1c2VkIHBhcmFtZXRlcnMgYXMgIityIiAoX19hcmdYKQotICogICAgIC0gY2xvYmJlciB0aGUgcmVzdAotICoKLSAqIFRoZSByZXN1bHQgY2VydGFpbmx5IGlzbid0IHByZXR0eSwgYW5kIGl0IHJlYWxseSBzaG93cyB1cCBjcHAncwotICogd2Vha25lc3MgYXMgYXMgbWFjcm8gbGFuZ3VhZ2UuICBTb3JyeS4gIChCdXQgbGV0J3MganVzdCBnaXZlIHRoYW5rcwotICogdGhlcmUgYXJlbid0IG1vcmUgdGhhbiA1IGFyZ3VtZW50cy4uLikKLSAqLwotCi1leHRlcm4gc3RydWN0IHsgY2hhciBfZW50cnlbMzJdOyB9IGh5cGVyY2FsbF9wYWdlW107Ci0KLSNkZWZpbmUgX19IWVBFUkNBTEwJCSJjYWxsIGh5cGVyY2FsbF9wYWdlKyVjW29mZnNldF0iCi0jZGVmaW5lIF9fSFlQRVJDQUxMX0VOVFJZKHgpCQkJCQkJXAotCVtvZmZzZXRdICJpIiAoX19IWVBFUlZJU09SXyMjeCAqIHNpemVvZihoeXBlcmNhbGxfcGFnZVswXSkpCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIF9fSFlQRVJDQUxMX1JFVFJFRwkiZWF4IgotI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkcxUkVHCSJlYngiCi0jZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzJSRUcJImVjeCIKLSNkZWZpbmUgX19IWVBFUkNBTExfQVJHM1JFRwkiZWR4IgotI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkc0UkVHCSJlc2kiCi0jZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzVSRUcJImVkaSIKLSNlbHNlCi0jZGVmaW5lIF9fSFlQRVJDQUxMX1JFVFJFRwkicmF4IgotI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkcxUkVHCSJyZGkiCi0jZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzJSRUcJInJzaSIKLSNkZWZpbmUgX19IWVBFUkNBTExfQVJHM1JFRwkicmR4IgotI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkc0UkVHCSJyMTAiCi0jZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzVSRUcJInI4IgotI2VuZGlmCi0KLSNkZWZpbmUgX19IWVBFUkNBTExfREVDTFMJCQkJCQlcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyAgYXNtKF9fSFlQRVJDQUxMX1JFVFJFRyk7CQlcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzEgYXNtKF9fSFlQRVJDQUxMX0FSRzFSRUcpID0gX19hcmcxOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzIgYXNtKF9fSFlQRVJDQUxMX0FSRzJSRUcpID0gX19hcmcyOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzMgYXNtKF9fSFlQRVJDQUxMX0FSRzNSRUcpID0gX19hcmczOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzQgYXNtKF9fSFlQRVJDQUxMX0FSRzRSRUcpID0gX19hcmc0OyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzUgYXNtKF9fSFlQRVJDQUxMX0FSRzVSRUcpID0gX19hcmc1OwotCi0jZGVmaW5lIF9fSFlQRVJDQUxMXzBQQVJBTQkiPXIiIChfX3JlcykKLSNkZWZpbmUgX19IWVBFUkNBTExfMVBBUkFNCV9fSFlQRVJDQUxMXzBQQVJBTSwgIityIiAoX19hcmcxKQotI2RlZmluZSBfX0hZUEVSQ0FMTF8yUEFSQU0JX19IWVBFUkNBTExfMVBBUkFNLCAiK3IiIChfX2FyZzIpCi0jZGVmaW5lIF9fSFlQRVJDQUxMXzNQQVJBTQlfX0hZUEVSQ0FMTF8yUEFSQU0sICIrciIgKF9fYXJnMykKLSNkZWZpbmUgX19IWVBFUkNBTExfNFBBUkFNCV9fSFlQRVJDQUxMXzNQQVJBTSwgIityIiAoX19hcmc0KQotI2RlZmluZSBfX0hZUEVSQ0FMTF81UEFSQU0JX19IWVBFUkNBTExfNFBBUkFNLCAiK3IiIChfX2FyZzUpCi0KLSNkZWZpbmUgX19IWVBFUkNBTExfMEFSRygpCi0jZGVmaW5lIF9fSFlQRVJDQUxMXzFBUkcoYTEpCQkJCQkJXAotCV9fSFlQRVJDQUxMXzBBUkcoKQkJX19hcmcxID0gKHVuc2lnbmVkIGxvbmcpKGExKTsKLSNkZWZpbmUgX19IWVBFUkNBTExfMkFSRyhhMSxhMikJCQkJCQlcCi0JX19IWVBFUkNBTExfMUFSRyhhMSkJCV9fYXJnMiA9ICh1bnNpZ25lZCBsb25nKShhMik7Ci0jZGVmaW5lIF9fSFlQRVJDQUxMXzNBUkcoYTEsYTIsYTMpCQkJCQlcCi0JX19IWVBFUkNBTExfMkFSRyhhMSxhMikJCV9fYXJnMyA9ICh1bnNpZ25lZCBsb25nKShhMyk7Ci0jZGVmaW5lIF9fSFlQRVJDQUxMXzRBUkcoYTEsYTIsYTMsYTQpCQkJCQlcCi0JX19IWVBFUkNBTExfM0FSRyhhMSxhMixhMykJX19hcmc0ID0gKHVuc2lnbmVkIGxvbmcpKGE0KTsKLSNkZWZpbmUgX19IWVBFUkNBTExfNUFSRyhhMSxhMixhMyxhNCxhNSkJCQkJXAotCV9fSFlQRVJDQUxMXzRBUkcoYTEsYTIsYTMsYTQpCV9fYXJnNSA9ICh1bnNpZ25lZCBsb25nKShhNSk7Ci0KLSNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjUJIm1lbW9yeSIKLSNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjQJX19IWVBFUkNBTExfQ0xPQkJFUjUsIF9fSFlQRVJDQUxMX0FSRzVSRUcKLSNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjMJX19IWVBFUkNBTExfQ0xPQkJFUjQsIF9fSFlQRVJDQUxMX0FSRzRSRUcKLSNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjIJX19IWVBFUkNBTExfQ0xPQkJFUjMsIF9fSFlQRVJDQUxMX0FSRzNSRUcKLSNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjEJX19IWVBFUkNBTExfQ0xPQkJFUjIsIF9fSFlQRVJDQUxMX0FSRzJSRUcKLSNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjAJX19IWVBFUkNBTExfQ0xPQkJFUjEsIF9fSFlQRVJDQUxMX0FSRzFSRUcKLQotI2RlZmluZSBfaHlwZXJjYWxsMCh0eXBlLCBuYW1lKQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKLQlfX0hZUEVSQ0FMTF8wQVJHKCk7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwKLQkJICAgICAgOiBfX0hZUEVSQ0FMTF8wUEFSQU0JCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZKG5hbWUpCQkJCVwKLQkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSMCk7CQkJCVwKLQkodHlwZSlfX3JlczsJCQkJCQkJXAotfSkKLQotI2RlZmluZSBfaHlwZXJjYWxsMSh0eXBlLCBuYW1lLCBhMSkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKLQlfX0hZUEVSQ0FMTF8xQVJHKGExKTsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMXzFQQVJBTQkJCQlcCi0JCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVIxKTsJCQkJXAotCSh0eXBlKV9fcmVzOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9oeXBlcmNhbGwyKHR5cGUsIG5hbWUsIGExLCBhMikJCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKLQlfX0hZUEVSQ0FMTF8yQVJHKGExLCBhMik7CQkJCQlcCi0JYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMXzJQQVJBTQkJCQlcCi0JCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVIyKTsJCQkJXAotCSh0eXBlKV9fcmVzOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9oeXBlcmNhbGwzKHR5cGUsIG5hbWUsIGExLCBhMiwgYTMpCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKLQlfX0hZUEVSQ0FMTF8zQVJHKGExLCBhMiwgYTMpOwkJCQkJXAotCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwKLQkJICAgICAgOiBfX0hZUEVSQ0FMTF8zUEFSQU0JCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZKG5hbWUpCQkJCVwKLQkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSMyk7CQkJCVwKLQkodHlwZSlfX3JlczsJCQkJCQkJXAotfSkKLQotI2RlZmluZSBfaHlwZXJjYWxsNCh0eXBlLCBuYW1lLCBhMSwgYTIsIGEzLCBhNCkJCQkJXAotKHsJCQkJCQkJCQlcCi0JX19IWVBFUkNBTExfREVDTFM7CQkJCQkJXAotCV9fSFlQRVJDQUxMXzRBUkcoYTEsIGEyLCBhMywgYTQpOwkJCQlcCi0JYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMXzRQQVJBTQkJCQlcCi0JCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVI0KTsJCQkJXAotCSh0eXBlKV9fcmVzOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9oeXBlcmNhbGw1KHR5cGUsIG5hbWUsIGExLCBhMiwgYTMsIGE0LCBhNSkJCQlcCi0oewkJCQkJCQkJCVwKLQlfX0hZUEVSQ0FMTF9ERUNMUzsJCQkJCQlcCi0JX19IWVBFUkNBTExfNUFSRyhhMSwgYTIsIGEzLCBhNCwgYTUpOwkJCQlcCi0JYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMXzVQQVJBTQkJCQlcCi0JCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVI1KTsJCQkJXAotCSh0eXBlKV9fcmVzOwkJCQkJCQlcCi19KQotCi1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9zZXRfdHJhcF90YWJsZShzdHJ1Y3QgdHJhcF9pbmZvICp0YWJsZSkKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDEoaW50LCBzZXRfdHJhcF90YWJsZSwgdGFibGUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9tbXVfdXBkYXRlKHN0cnVjdCBtbXVfdXBkYXRlICpyZXEsIGludCBjb3VudCwKLQkJICAgICAgaW50ICpzdWNjZXNzX2NvdW50LCBkb21pZF90IGRvbWlkKQotewotCXJldHVybiBfaHlwZXJjYWxsNChpbnQsIG1tdV91cGRhdGUsIHJlcSwgY291bnQsIHN1Y2Nlc3NfY291bnQsIGRvbWlkKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfbW11ZXh0X29wKHN0cnVjdCBtbXVleHRfb3AgKm9wLCBpbnQgY291bnQsCi0JCSAgICAgaW50ICpzdWNjZXNzX2NvdW50LCBkb21pZF90IGRvbWlkKQotewotCXJldHVybiBfaHlwZXJjYWxsNChpbnQsIG1tdWV4dF9vcCwgb3AsIGNvdW50LCBzdWNjZXNzX2NvdW50LCBkb21pZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3NldF9nZHQodW5zaWduZWQgbG9uZyAqZnJhbWVfbGlzdCwgaW50IGVudHJpZXMpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X2dkdCwgZnJhbWVfbGlzdCwgZW50cmllcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3N0YWNrX3N3aXRjaCh1bnNpZ25lZCBsb25nIHNzLCB1bnNpZ25lZCBsb25nIGVzcCkKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBzdGFja19zd2l0Y2gsIHNzLCBlc3ApOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcyh1bnNpZ25lZCBsb25nIGV2ZW50X3NlbGVjdG9yLAotCQkJIHVuc2lnbmVkIGxvbmcgZXZlbnRfYWRkcmVzcywKLQkJCSB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX3NlbGVjdG9yLAotCQkJIHVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfYWRkcmVzcykKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCBzZXRfY2FsbGJhY2tzLAotCQkJICAgZXZlbnRfc2VsZWN0b3IsIGV2ZW50X2FkZHJlc3MsCi0JCQkgICBmYWlsc2FmZV9zZWxlY3RvciwgZmFpbHNhZmVfYWRkcmVzcyk7Ci19Ci0jZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLwotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcyh1bnNpZ25lZCBsb25nIGV2ZW50X2FkZHJlc3MsCi0JCQl1bnNpZ25lZCBsb25nIGZhaWxzYWZlX2FkZHJlc3MsCi0JCQl1bnNpZ25lZCBsb25nIHN5c2NhbGxfYWRkcmVzcykKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBzZXRfY2FsbGJhY2tzLAotCQkJICAgZXZlbnRfYWRkcmVzcywgZmFpbHNhZmVfYWRkcmVzcywKLQkJCSAgIHN5c2NhbGxfYWRkcmVzcyk7Ci19Ci0jZW5kaWYgIC8qIENPTkZJR19YODZfezMyLDY0fSAqLwotCi1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9jYWxsYmFja19vcChpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgY2FsbGJhY2tfb3AsIGNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfZnB1X3Rhc2tzd2l0Y2goaW50IHNldCkKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDEoaW50LCBmcHVfdGFza3N3aXRjaCwgc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfc2NoZWRfb3AoaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHNjaGVkX29wX25ldywgY21kLCBhcmcpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcKLUhZUEVSVklTT1Jfc2V0X3RpbWVyX29wKHU2NCB0aW1lb3V0KQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dF9oaSA9ICh1bnNpZ25lZCBsb25nKSh0aW1lb3V0Pj4zMik7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0X2xvID0gKHVuc2lnbmVkIGxvbmcpdGltZW91dDsKLQlyZXR1cm4gX2h5cGVyY2FsbDIobG9uZywgc2V0X3RpbWVyX29wLCB0aW1lb3V0X2xvLCB0aW1lb3V0X2hpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfc2V0X2RlYnVncmVnKGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X2RlYnVncmVnLCByZWcsIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1IWVBFUlZJU09SX2dldF9kZWJ1Z3JlZyhpbnQgcmVnKQotewotCXJldHVybiBfaHlwZXJjYWxsMSh1bnNpZ25lZCBsb25nLCBnZXRfZGVidWdyZWcsIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3VwZGF0ZV9kZXNjcmlwdG9yKHU2NCBtYSwgdTY0IGRlc2MpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgdXBkYXRlX2Rlc2NyaXB0b3IsIG1hLCBtYT4+MzIsIGRlc2MsIGRlc2M+PjMyKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfbWVtb3J5X29wKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBtZW1vcnlfb3AsIGNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfbXVsdGljYWxsKHZvaWQgKmNhbGxfbGlzdCwgaW50IG5yX2NhbGxzKQotewotCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIG11bHRpY2FsbCwgY2FsbF9saXN0LCBucl9jYWxscyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmEsIHB0ZV90IG5ld192YWwsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaWYgKHNpemVvZihuZXdfdmFsKSA9PSBzaXplb2YobG9uZykpCi0JCXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIHVwZGF0ZV92YV9tYXBwaW5nLCB2YSwKLQkJCQkgICBuZXdfdmFsLnB0ZSwgZmxhZ3MpOwotCWVsc2UKLQkJcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgdXBkYXRlX3ZhX21hcHBpbmcsIHZhLAotCQkJCSAgIG5ld192YWwucHRlLCBuZXdfdmFsLnB0ZSA+PiAzMiwgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9ldmVudF9jaGFubmVsX29wKGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpbnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIGV2ZW50X2NoYW5uZWxfb3AsIGNtZCwgYXJnKTsKLQlpZiAodW5saWtlbHkocmMgPT0gLUVOT1NZUykpIHsKLQkJc3RydWN0IGV2dGNobl9vcCBvcDsKLQkJb3AuY21kID0gY21kOwotCQltZW1jcHkoJm9wLnUsIGFyZywgc2l6ZW9mKG9wLnUpKTsKLQkJcmMgPSBfaHlwZXJjYWxsMShpbnQsIGV2ZW50X2NoYW5uZWxfb3BfY29tcGF0LCAmb3ApOwotCQltZW1jcHkoYXJnLCAmb3AudSwgc2l6ZW9mKG9wLnUpKTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl94ZW5fdmVyc2lvbihpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgeGVuX3ZlcnNpb24sIGNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfY29uc29sZV9pbyhpbnQgY21kLCBpbnQgY291bnQsIGNoYXIgKnN0cikKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBjb25zb2xlX2lvLCBjbWQsIGNvdW50LCBzdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9waHlzZGV2X29wKGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpbnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIHBoeXNkZXZfb3AsIGNtZCwgYXJnKTsKLQlpZiAodW5saWtlbHkocmMgPT0gLUVOT1NZUykpIHsKLQkJc3RydWN0IHBoeXNkZXZfb3Agb3A7Ci0JCW9wLmNtZCA9IGNtZDsKLQkJbWVtY3B5KCZvcC51LCBhcmcsIHNpemVvZihvcC51KSk7Ci0JCXJjID0gX2h5cGVyY2FsbDEoaW50LCBwaHlzZGV2X29wX2NvbXBhdCwgJm9wKTsKLQkJbWVtY3B5KGFyZywgJm9wLnUsIHNpemVvZihvcC51KSk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqdW9wLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGwzKGludCwgZ3JhbnRfdGFibGVfb3AsIGNtZCwgdW9wLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKHVuc2lnbmVkIGxvbmcgdmEsIHB0ZV90IG5ld192YWwsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLCBkb21pZF90IGRvbWlkKQotewotCWlmIChzaXplb2YobmV3X3ZhbCkgPT0gc2l6ZW9mKGxvbmcpKQotCQlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbiwgdmEsCi0JCQkJICAgbmV3X3ZhbC5wdGUsIGZsYWdzLCBkb21pZCk7Ci0JZWxzZQotCQlyZXR1cm4gX2h5cGVyY2FsbDUoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbiwgdmEsCi0JCQkJICAgbmV3X3ZhbC5wdGUsIG5ld192YWwucHRlID4+IDMyLAotCQkJCSAgIGZsYWdzLCBkb21pZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3ZtX2Fzc2lzdCh1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCB2bV9hc3Npc3QsIGNtZCwgdHlwZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3ZjcHVfb3AoaW50IGNtZCwgaW50IHZjcHVpZCwgdm9pZCAqZXh0cmFfYXJncykKLXsKLQlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCB2Y3B1X29wLCBjbWQsIHZjcHVpZCwgZXh0cmFfYXJncyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9zZXRfc2VnbWVudF9iYXNlKGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X3NlZ21lbnRfYmFzZSwgcmVnLCB2YWx1ZSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfc3VzcGVuZCh1bnNpZ25lZCBsb25nIHNyZWMpCi17Ci0JcmV0dXJuIF9oeXBlcmNhbGwzKGludCwgc2NoZWRfb3AsIFNDSEVET1Bfc2h1dGRvd24sCi0JCQkgICBTSFVURE9XTl9zdXNwZW5kLCBzcmVjKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfbm1pX29wKHVuc2lnbmVkIGxvbmcgb3AsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIG5taV9vcCwgb3AsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotTVVMVElfZnB1X3Rhc2tzd2l0Y2goc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCBpbnQgc2V0KQotewotCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfZnB1X3Rhc2tzd2l0Y2g7Ci0JbWNsLT5hcmdzWzBdID0gc2V0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLU1VTFRJX3VwZGF0ZV92YV9tYXBwaW5nKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwgdW5zaWduZWQgbG9uZyB2YSwKLQkJCXB0ZV90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZzsKLQltY2wtPmFyZ3NbMF0gPSB2YTsKLQlpZiAoc2l6ZW9mKG5ld192YWwpID09IHNpemVvZihsb25nKSkgewotCQltY2wtPmFyZ3NbMV0gPSBuZXdfdmFsLnB0ZTsKLQkJbWNsLT5hcmdzWzJdID0gZmxhZ3M7Ci0JfSBlbHNlIHsKLQkJbWNsLT5hcmdzWzFdID0gbmV3X3ZhbC5wdGU7Ci0JCW1jbC0+YXJnc1syXSA9IG5ld192YWwucHRlID4+IDMyOwotCQltY2wtPmFyZ3NbM10gPSBmbGFnczsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotTVVMVElfZ3JhbnRfdGFibGVfb3Aoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCB1bnNpZ25lZCBpbnQgY21kLAotCQkgICAgIHZvaWQgKnVvcCwgdW5zaWduZWQgaW50IGNvdW50KQotewotCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3A7Ci0JbWNsLT5hcmdzWzBdID0gY21kOwotCW1jbC0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKXVvcDsKLQltY2wtPmFyZ3NbMl0gPSBjb3VudDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1NVUxUSV91cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbihzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5ICptY2wsIHVuc2lnbmVkIGxvbmcgdmEsCi0JCQkJICAgIHB0ZV90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkJICAgIGRvbWlkX3QgZG9taWQpCi17Ci0JbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbjsKLQltY2wtPmFyZ3NbMF0gPSB2YTsKLQlpZiAoc2l6ZW9mKG5ld192YWwpID09IHNpemVvZihsb25nKSkgewotCQltY2wtPmFyZ3NbMV0gPSBuZXdfdmFsLnB0ZTsKLQkJbWNsLT5hcmdzWzJdID0gZmxhZ3M7Ci0JCW1jbC0+YXJnc1szXSA9IGRvbWlkOwotCX0gZWxzZSB7Ci0JCW1jbC0+YXJnc1sxXSA9IG5ld192YWwucHRlOwotCQltY2wtPmFyZ3NbMl0gPSBuZXdfdmFsLnB0ZSA+PiAzMjsKLQkJbWNsLT5hcmdzWzNdID0gZmxhZ3M7Ci0JCW1jbC0+YXJnc1s0XSA9IGRvbWlkOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1NVUxUSV91cGRhdGVfZGVzY3JpcHRvcihzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5ICptY2wsIHU2NCBtYWRkciwKLQkJCXN0cnVjdCBkZXNjX3N0cnVjdCBkZXNjKQotewotCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3I7Ci0JaWYgKHNpemVvZihtYWRkcikgPT0gc2l6ZW9mKGxvbmcpKSB7Ci0JCW1jbC0+YXJnc1swXSA9IG1hZGRyOwotCQltY2wtPmFyZ3NbMV0gPSAqKHVuc2lnbmVkIGxvbmcgKikmZGVzYzsKLQl9IGVsc2UgewotCQltY2wtPmFyZ3NbMF0gPSBtYWRkcjsKLQkJbWNsLT5hcmdzWzFdID0gbWFkZHIgPj4gMzI7Ci0JCW1jbC0+YXJnc1syXSA9IGRlc2MuYTsKLQkJbWNsLT5hcmdzWzNdID0gZGVzYy5iOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1NVUxUSV9tZW1vcnlfb3Aoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9tZW1vcnlfb3A7Ci0JbWNsLT5hcmdzWzBdID0gY21kOwotCW1jbC0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWFyZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1NVUxUSV9tbXVfdXBkYXRlKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwgc3RydWN0IG1tdV91cGRhdGUgKnJlcSwKLQkJIGludCBjb3VudCwgaW50ICpzdWNjZXNzX2NvdW50LCBkb21pZF90IGRvbWlkKQotewotCW1jbC0+b3AgPSBfX0hZUEVSVklTT1JfbW11X3VwZGF0ZTsKLQltY2wtPmFyZ3NbMF0gPSAodW5zaWduZWQgbG9uZylyZXE7Ci0JbWNsLT5hcmdzWzFdID0gY291bnQ7Ci0JbWNsLT5hcmdzWzJdID0gKHVuc2lnbmVkIGxvbmcpc3VjY2Vzc19jb3VudDsKLQltY2wtPmFyZ3NbM10gPSBkb21pZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1NVUxUSV9tbXVleHRfb3Aoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCBzdHJ1Y3QgbW11ZXh0X29wICpvcCwgaW50IGNvdW50LAotCQlpbnQgKnN1Y2Nlc3NfY291bnQsIGRvbWlkX3QgZG9taWQpCi17Ci0JbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9tbXVleHRfb3A7Ci0JbWNsLT5hcmdzWzBdID0gKHVuc2lnbmVkIGxvbmcpb3A7Ci0JbWNsLT5hcmdzWzFdID0gY291bnQ7Ci0JbWNsLT5hcmdzWzJdID0gKHVuc2lnbmVkIGxvbmcpc3VjY2Vzc19jb3VudDsKLQltY2wtPmFyZ3NbM10gPSBkb21pZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1NVUxUSV9zZXRfZ2R0KHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwgdW5zaWduZWQgbG9uZyAqZnJhbWVzLCBpbnQgZW50cmllcykKLXsKLQltY2wtPm9wID0gX19IWVBFUlZJU09SX3NldF9nZHQ7Ci0JbWNsLT5hcmdzWzBdID0gKHVuc2lnbmVkIGxvbmcpZnJhbWVzOwotCW1jbC0+YXJnc1sxXSA9IGVudHJpZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotTVVMVElfc3RhY2tfc3dpdGNoKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwKLQkJICAgdW5zaWduZWQgbG9uZyBzcywgdW5zaWduZWQgbG9uZyBlc3ApCi17Ci0JbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl9zdGFja19zd2l0Y2g7Ci0JbWNsLT5hcmdzWzBdID0gc3M7Ci0JbWNsLT5hcmdzWzFdID0gZXNwOwotfQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fWEVOX19IWVBFUkNBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3hlbi9oeXBlcnZpc29yLmggYi9pbmNsdWRlL2FzbS14ODYveGVuL2h5cGVydmlzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1YTI0Ny4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYveGVuL2h5cGVydmlzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGh5cGVydmlzb3IuaAotICoKLSAqIExpbnV4LXNwZWNpZmljIGh5cGVydmlzb3IgaGFuZGxpbmcuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAotICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKLSAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKLSAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCi0gKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKLSAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgQVNNX1g4Nl9fWEVOX19IWVBFUlZJU09SX0gKLSNkZWZpbmUgQVNNX1g4Nl9fWEVOX19IWVBFUlZJU09SX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgotI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvdmVyc2lvbi5oPgotCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpZiBkZWZpbmVkKF9faTM4Nl9fKQotIyAgaWZkZWYgQ09ORklHX1g4Nl9QQUUKLSMgICBpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+Ci0jICBlbHNlCi0jICAgaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgotIyAgZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJjYWxsLmg+Ci0KLS8qIGFyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYyAqLwotZXh0ZXJuIHN0cnVjdCBzaGFyZWRfaW5mbyAqSFlQRVJWSVNPUl9zaGFyZWRfaW5mbzsKLWV4dGVybiBzdHJ1Y3Qgc3RhcnRfaW5mbyAqeGVuX3N0YXJ0X2luZm87Ci0KLS8qIGFyY2gvaTM4Ni9tYWNoLXhlbi9ldnRjaG4uYyAqLwotLyogRm9yY2UgYSBwcm9wZXIgZXZlbnQtY2hhbm5lbCBjYWxsYmFjayBmcm9tIFhlbi4gKi8KLWV4dGVybiB2b2lkIGZvcmNlX2V2dGNobl9jYWxsYmFjayh2b2lkKTsKLQotLyogVHVybiBqaWZmaWVzIGludG8gWGVuIHN5c3RlbSB0aW1lLiAqLwotdTY0IGppZmZpZXNfdG9fc3QodW5zaWduZWQgbG9uZyBqaWZmaWVzKTsKLQotCi0jZGVmaW5lIE1VTFRJX1VWTUZMQUdTX0lOREVYIDMKLSNkZWZpbmUgTVVMVElfVVZNRE9NSURfSU5ERVggNAotCi1lbnVtIHhlbl9kb21haW5fdHlwZSB7Ci0JWEVOX05BVElWRSwKLQlYRU5fUFZfRE9NQUlOLAotCVhFTl9IVk1fRE9NQUlOLAotfTsKLQotZXh0ZXJuIGVudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZTsKLQotI2RlZmluZSB4ZW5fZG9tYWluKCkJCSh4ZW5fZG9tYWluX3R5cGUgIT0gWEVOX05BVElWRSkKLSNkZWZpbmUgeGVuX3B2X2RvbWFpbigpCQkoeGVuX2RvbWFpbl90eXBlID09IFhFTl9QVl9ET01BSU4pCi0jZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpCSh4ZW5fcHZfZG9tYWluKCkgJiYgeGVuX3N0YXJ0X2luZm8tPmZsYWdzICYgU0lGX0lOSVRET01BSU4pCi0jZGVmaW5lIHhlbl9odm1fZG9tYWluKCkJKHhlbl9kb21haW5fdHlwZSA9PSBYRU5fSFZNX0RPTUFJTikKLQotI2VuZGlmIC8qIEFTTV9YODZfX1hFTl9fSFlQRVJWSVNPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGVuL2ludGVyZmFjZS5oIGIvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3N2JiYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYveGVuL2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFyY2gteDg2XzMyLmgKLSAqCi0gKiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8geDg2IFhlbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEsgQSBGcmFzZXIKLSAqLwotCi0jaWZuZGVmIEFTTV9YODZfX1hFTl9fSU5URVJGQUNFX0gKLSNkZWZpbmUgQVNNX1g4Nl9fWEVOX19JTlRFUkZBQ0VfSAotCi0jaWZkZWYgX19YRU5fXwotI2RlZmluZSBfX0RFRklORV9HVUVTVF9IQU5ETEUobmFtZSwgdHlwZSkgXAotICAgIHR5cGVkZWYgc3RydWN0IHsgdHlwZSAqcDsgfSBfX2d1ZXN0X2hhbmRsZV8gIyMgbmFtZQotI2Vsc2UKLSNkZWZpbmUgX19ERUZJTkVfR1VFU1RfSEFORExFKG5hbWUsIHR5cGUpIFwKLSAgICB0eXBlZGVmIHR5cGUgKiBfX2d1ZXN0X2hhbmRsZV8gIyMgbmFtZQotI2VuZGlmCi0KLSNkZWZpbmUgREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QobmFtZSkgXAotCV9fREVGSU5FX0dVRVNUX0hBTkRMRShuYW1lLCBzdHJ1Y3QgbmFtZSkKLSNkZWZpbmUgREVGSU5FX0dVRVNUX0hBTkRMRShuYW1lKSBfX0RFRklORV9HVUVTVF9IQU5ETEUobmFtZSwgbmFtZSkKLSNkZWZpbmUgR1VFU1RfSEFORExFKG5hbWUpICAgICAgICBfX2d1ZXN0X2hhbmRsZV8gIyMgbmFtZQotCi0jaWZkZWYgX19YRU5fXwotI2lmIGRlZmluZWQoX19pMzg2X18pCi0jZGVmaW5lIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKGhuZCwgdmFsKQkJCVwKLQlkbyB7CQkJCQkJXAotCQlpZiAoc2l6ZW9mKGhuZCkgPT0gOCkJCQlcCi0JCQkqKHVpbnQ2NF90ICopJihobmQpID0gMDsJXAotCQkoaG5kKS5wID0gdmFsOwkJCQlcCi0JfSB3aGlsZSAoMCkKLSNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKLSNkZWZpbmUgc2V0X3hlbl9ndWVzdF9oYW5kbGUoaG5kLCB2YWwpCWRvIHsgKGhuZCkucCA9IHZhbDsgfSB3aGlsZSAoMCkKLSNlbmRpZgotI2Vsc2UKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKQotI2RlZmluZSBzZXRfeGVuX2d1ZXN0X2hhbmRsZShobmQsIHZhbCkJCQlcCi0JZG8gewkJCQkJCVwKLQkJaWYgKHNpemVvZihobmQpID09IDgpCQkJXAotCQkJKih1aW50NjRfdCAqKSYoaG5kKSA9IDA7CVwKLQkJKGhuZCkgPSB2YWw7CQkJCVwKLQl9IHdoaWxlICgwKQotI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotI2RlZmluZSBzZXRfeGVuX2d1ZXN0X2hhbmRsZShobmQsIHZhbCkJZG8geyAoaG5kKSA9IHZhbDsgfSB3aGlsZSAoMCkKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBHdWVzdCBoYW5kbGVzIGZvciBwcmltaXRpdmUgQyB0eXBlcy4gKi8KLV9fREVGSU5FX0dVRVNUX0hBTkRMRSh1Y2hhciwgdW5zaWduZWQgY2hhcik7Ci1fX0RFRklORV9HVUVTVF9IQU5ETEUodWludCwgIHVuc2lnbmVkIGludCk7Ci1fX0RFRklORV9HVUVTVF9IQU5ETEUodWxvbmcsIHVuc2lnbmVkIGxvbmcpOwotREVGSU5FX0dVRVNUX0hBTkRMRShjaGFyKTsKLURFRklORV9HVUVTVF9IQU5ETEUoaW50KTsKLURFRklORV9HVUVTVF9IQU5ETEUobG9uZyk7Ci1ERUZJTkVfR1VFU1RfSEFORExFKHZvaWQpOwotI2VuZGlmCi0KLSNpZm5kZWYgSFlQRVJWSVNPUl9WSVJUX1NUQVJUCi0jZGVmaW5lIEhZUEVSVklTT1JfVklSVF9TVEFSVCBta191bnNpZ25lZF9sb25nKF9fSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQotI2VuZGlmCi0KLSNpZm5kZWYgbWFjaGluZV90b19waHlzX21hcHBpbmcKLSNkZWZpbmUgbWFjaGluZV90b19waHlzX21hcHBpbmcgKCh1bnNpZ25lZCBsb25nICopSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQotI2VuZGlmCi0KLS8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnR1YWwgQ1BVcyBpbiBtdWx0aS1wcm9jZXNzb3IgZ3Vlc3RzLiAqLwotI2RlZmluZSBNQVhfVklSVF9DUFVTIDMyCi0KLS8qCi0gKiBTRUdNRU5UIERFU0NSSVBUT1IgVEFCTEVTCi0gKi8KLS8qCi0gKiBBIG51bWJlciBvZiBHRFQgZW50cmllcyBhcmUgcmVzZXJ2ZWQgYnkgWGVuLiBUaGVzZSBhcmUgbm90IHNpdHVhdGVkIGF0IHRoZQotICogc3RhcnQgb2YgdGhlIEdEVCBiZWNhdXNlIHNvbWUgc3R1cGlkIE9TZXMgZXhwb3J0IGhhcmQtY29kZWQgc2VsZWN0b3IgdmFsdWVzCi0gKiBpbiB0aGVpciBBQkkuIFRoZXNlIGhhcmQtY29kZWQgdmFsdWVzIGFyZSBhbHdheXMgbmVhciB0aGUgc3RhcnQgb2YgdGhlIEdEVCwKLSAqIHNvIFhlbiBwbGFjZXMgaXRzZWxmIG91dCBvZiB0aGUgd2F5LCBhdCB0aGUgZmFyIGVuZCBvZiB0aGUgR0RULgotICovCi0jZGVmaW5lIEZJUlNUX1JFU0VSVkVEX0dEVF9QQUdFICAxNAotI2RlZmluZSBGSVJTVF9SRVNFUlZFRF9HRFRfQllURSAgKEZJUlNUX1JFU0VSVkVEX0dEVF9QQUdFICogNDA5NikKLSNkZWZpbmUgRklSU1RfUkVTRVJWRURfR0RUX0VOVFJZIChGSVJTVF9SRVNFUlZFRF9HRFRfQllURSAvIDgpCi0KLS8qCi0gKiBTZW5kIGFuIGFycmF5IG9mIHRoZXNlIHRvIEhZUEVSVklTT1Jfc2V0X3RyYXBfdGFibGUoKQotICogVGhlIHByaXZpbGVnZSBsZXZlbCBzcGVjaWZpZXMgd2hpY2ggbW9kZXMgbWF5IGVudGVyIGEgdHJhcCB2aWEgYSBzb2Z0d2FyZQotICogaW50ZXJydXB0LiBPbiB4ODYvNjQsIHNpbmNlIHJpbmdzIDEgYW5kIDIgYXJlIHVuYXZhaWxhYmxlLCB3ZSBhbGxvY2F0ZQotICogcHJpdmlsZWdlIGxldmVscyBhcyBmb2xsb3dzOgotICogIExldmVsID09IDA6IE5vb25lIG1heSBlbnRlcgotICogIExldmVsID09IDE6IEtlcm5lbCBtYXkgZW50ZXIKLSAqICBMZXZlbCA9PSAyOiBLZXJuZWwgbWF5IGVudGVyCi0gKiAgTGV2ZWwgPT0gMzogRXZlcnlvbmUgbWF5IGVudGVyCi0gKi8KLSNkZWZpbmUgVElfR0VUX0RQTChfdGkpCQkoKF90aSktPmZsYWdzICYgMykKLSNkZWZpbmUgVElfR0VUX0lGKF90aSkJCSgoX3RpKS0+ZmxhZ3MgJiA0KQotI2RlZmluZSBUSV9TRVRfRFBMKF90aSwgX2RwbCkJKChfdGkpLT5mbGFncyB8PSAoX2RwbCkpCi0jZGVmaW5lIFRJX1NFVF9JRihfdGksIF9pZikJKChfdGkpLT5mbGFncyB8PSAoKCEhKF9pZikpPDwyKSkKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCB0cmFwX2luZm8gewotICAgIHVpbnQ4X3QgICAgICAgdmVjdG9yOyAgLyogZXhjZXB0aW9uIHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgdWludDhfdCAgICAgICBmbGFnczsgICAvKiAwLTM6IHByaXZpbGVnZSBsZXZlbDsgNDogY2xlYXIgZXZlbnQgZW5hYmxlPyAgKi8KLSAgICB1aW50MTZfdCAgICAgIGNzOyAgICAgIC8qIGNvZGUgc2VsZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzczsgLyogY29kZSBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi19OwotREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QodHJhcF9pbmZvKTsKLQotc3RydWN0IGFyY2hfc2hhcmVkX2luZm8gewotICAgIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsgICAgICAgICAgICAgICAgICAvKiBtYXggcGZuIHRoYXQgYXBwZWFycyBpbiB0YWJsZSAqLwotICAgIC8qIEZyYW1lIGNvbnRhaW5pbmcgbGlzdCBvZiBtZm5zIGNvbnRhaW5pbmcgbGlzdCBvZiBtZm5zIGNvbnRhaW5pbmcgcDJtLiAqLwotICAgIHVuc2lnbmVkIGxvbmcgcGZuX3RvX21mbl9mcmFtZV9saXN0X2xpc3Q7Ci0gICAgdW5zaWduZWQgbG9uZyBubWlfcmVhc29uOwotfTsKLSNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jaW5jbHVkZSAiaW50ZXJmYWNlXzMyLmgiCi0jZWxzZQotI2luY2x1ZGUgImludGVyZmFjZV82NC5oIgotI2VuZGlmCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKgotICogVGhlIGZvbGxvd2luZyBpcyBhbGwgQ1BVIGNvbnRleHQuIE5vdGUgdGhhdCB0aGUgZnB1X2N0eHQgYmxvY2sgaXMgZmlsbGVkCi0gKiBpbiBieSBGWFNBVkUgaWYgdGhlIENQVSBoYXMgZmVhdHVyZSBGWFNSOyBvdGhlcndpc2UgRlNBVkUgaXMgdXNlZC4KLSAqLwotc3RydWN0IHZjcHVfZ3Vlc3RfY29udGV4dCB7Ci0gICAgLyogRlBVIHJlZ2lzdGVycyBjb21lIGZpcnN0IHNvIHRoZXkgY2FuIGJlIGFsaWduZWQgZm9yIEZYU0FWRS9GWFJTVE9SLiAqLwotICAgIHN0cnVjdCB7IGNoYXIgeFs1MTJdOyB9IGZwdV9jdHh0OyAgICAgICAvKiBVc2VyLWxldmVsIEZQVSByZWdpc3RlcnMgICAgICovCi0jZGVmaW5lIFZHQ0ZfSTM4N19WQUxJRCAoMTw8MCkKLSNkZWZpbmUgVkdDRl9IVk1fR1VFU1QgICgxPDwxKQotI2RlZmluZSBWR0NGX0lOX0tFUk5FTCAgKDE8PDIpCi0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsgICAgICAgICAgICAgICAgICAgIC8qIFZHQ0ZfKiBmbGFncyAgICAgICAgICAgICAgICAgKi8KLSAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyB1c2VyX3JlZ3M7ICAgICAgICAgLyogVXNlci1sZXZlbCBDUFUgcmVnaXN0ZXJzICAgICAqLwotICAgIHN0cnVjdCB0cmFwX2luZm8gdHJhcF9jdHh0WzI1Nl07ICAgICAgICAvKiBWaXJ0dWFsIElEVCAgICAgICAgICAgICAgICAgICovCi0gICAgdW5zaWduZWQgbG9uZyBsZHRfYmFzZSwgbGR0X2VudHM7ICAgICAgIC8qIExEVCAobGluZWFyIGFkZHJlc3MsICMgZW50cykgKi8KLSAgICB1bnNpZ25lZCBsb25nIGdkdF9mcmFtZXNbMTZdLCBnZHRfZW50czsgLyogR0RUIChtYWNoaW5lIGZyYW1lcywgIyBlbnRzKSAqLwotICAgIHVuc2lnbmVkIGxvbmcga2VybmVsX3NzLCBrZXJuZWxfc3A7ICAgICAvKiBWaXJ0dWFsIFRTUyAob25seSBTUzEvU1AxKSAgICovCi0gICAgLyogTkIuIFVzZXIgcGFnZXRhYmxlIG9uIHg4Ni82NCBpcyBwbGFjZWQgaW4gY3RybHJlZ1sxXS4gKi8KLSAgICB1bnNpZ25lZCBsb25nIGN0cmxyZWdbOF07ICAgICAgICAgICAgICAgLyogQ1IwLUNSNyAoY29udHJvbCByZWdpc3RlcnMpICAqLwotICAgIHVuc2lnbmVkIGxvbmcgZGVidWdyZWdbOF07ICAgICAgICAgICAgICAvKiBEQjAtREI3IChkZWJ1ZyByZWdpc3RlcnMpICAgICovCi0jaWZkZWYgX19pMzg2X18KLSAgICB1bnNpZ25lZCBsb25nIGV2ZW50X2NhbGxiYWNrX2NzOyAgICAgICAgLyogQ1M6RUlQIG9mIGV2ZW50IGNhbGxiYWNrICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRfY2FsbGJhY2tfZWlwOwotICAgIHVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfY2FsbGJhY2tfY3M7ICAgICAvKiBDUzpFSVAgb2YgZmFpbHNhZmUgY2FsbGJhY2sgICovCi0gICAgdW5zaWduZWQgbG9uZyBmYWlsc2FmZV9jYWxsYmFja19laXA7Ci0jZWxzZQotICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRfY2FsbGJhY2tfZWlwOwotICAgIHVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfY2FsbGJhY2tfZWlwOwotICAgIHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9jYWxsYmFja19laXA7Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCBsb25nIHZtX2Fzc2lzdDsgICAgICAgICAgICAgICAgLyogVk1BU1NUX1RZUEVfKiBiaXRtYXAgKi8KLSNpZmRlZiBfX3g4Nl82NF9fCi0gICAgLyogU2VnbWVudCBiYXNlIGFkZHJlc3Nlcy4gKi8KLSAgICB1aW50NjRfdCAgICAgIGZzX2Jhc2U7Ci0gICAgdWludDY0X3QgICAgICBnc19iYXNlX2tlcm5lbDsKLSAgICB1aW50NjRfdCAgICAgIGdzX2Jhc2VfdXNlcjsKLSNlbmRpZgotfTsKLURFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHZjcHVfZ3Vlc3RfY29udGV4dCk7Ci0jZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwotCi0vKgotICogUHJlZml4IGZvcmNlcyBlbXVsYXRpb24gb2Ygc29tZSBub24tdHJhcHBpbmcgaW5zdHJ1Y3Rpb25zLgotICogQ3VycmVudGx5IG9ubHkgQ1BVSUQuCi0gKi8KLSNpZmRlZiBfX0FTU0VNQkxZX18KLSNkZWZpbmUgWEVOX0VNVUxBVEVfUFJFRklYIC5ieXRlIDB4MGYsMHgwYiwweDc4LDB4NjUsMHg2ZSA7Ci0jZGVmaW5lIFhFTl9DUFVJRCAgICAgICAgICBYRU5fRU1VTEFURV9QUkVGSVggY3B1aWQKLSNlbHNlCi0jZGVmaW5lIFhFTl9FTVVMQVRFX1BSRUZJWCAiLmJ5dGUgMHgwZiwweDBiLDB4NzgsMHg2NSwweDZlIDsgIgotI2RlZmluZSBYRU5fQ1BVSUQgICAgICAgICAgWEVOX0VNVUxBVEVfUFJFRklYICJjcHVpZCIKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX1g4Nl9fWEVOX19JTlRFUkZBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2VfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaW50ZXJmYWNlXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MTY3ZTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2VfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFyY2gteDg2XzMyLmgKLSAqCi0gKiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8geDg2IDMyLWJpdCBYZW4uCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCBLIEEgRnJhc2VyCi0gKi8KLQotI2lmbmRlZiBBU01fWDg2X19YRU5fX0lOVEVSRkFDRV8zMl9ICi0jZGVmaW5lIEFTTV9YODZfX1hFTl9fSU5URVJGQUNFXzMyX0gKLQotCi0vKgotICogVGhlc2UgZmxhdCBzZWdtZW50cyBhcmUgaW4gdGhlIFhlbi1wcml2YXRlIHNlY3Rpb24gb2YgZXZlcnkgR0RULiBTaW5jZSB0aGVzZQotICogYXJlIGFsc28gcHJlc2VudCBpbiB0aGUgaW5pdGlhbCBHRFQsIG1hbnkgT1NlcyB3aWxsIGJlIGFibGUgdG8gYXZvaWQKLSAqIGluc3RhbGxpbmcgdGhlaXIgb3duIEdEVC4KLSAqLwotI2RlZmluZSBGTEFUX1JJTkcxX0NTIDB4ZTAxOSAgICAvKiBHRFQgaW5kZXggMjU5ICovCi0jZGVmaW5lIEZMQVRfUklORzFfRFMgMHhlMDIxICAgIC8qIEdEVCBpbmRleCAyNjAgKi8KLSNkZWZpbmUgRkxBVF9SSU5HMV9TUyAweGUwMjEgICAgLyogR0RUIGluZGV4IDI2MCAqLwotI2RlZmluZSBGTEFUX1JJTkczX0NTIDB4ZTAyYiAgICAvKiBHRFQgaW5kZXggMjYxICovCi0jZGVmaW5lIEZMQVRfUklORzNfRFMgMHhlMDMzICAgIC8qIEdEVCBpbmRleCAyNjIgKi8KLSNkZWZpbmUgRkxBVF9SSU5HM19TUyAweGUwMzMgICAgLyogR0RUIGluZGV4IDI2MiAqLwotCi0jZGVmaW5lIEZMQVRfS0VSTkVMX0NTIEZMQVRfUklORzFfQ1MKLSNkZWZpbmUgRkxBVF9LRVJORUxfRFMgRkxBVF9SSU5HMV9EUwotI2RlZmluZSBGTEFUX0tFUk5FTF9TUyBGTEFUX1JJTkcxX1NTCi0jZGVmaW5lIEZMQVRfVVNFUl9DUyAgICBGTEFUX1JJTkczX0NTCi0jZGVmaW5lIEZMQVRfVVNFUl9EUyAgICBGTEFUX1JJTkczX0RTCi0jZGVmaW5lIEZMQVRfVVNFUl9TUyAgICBGTEFUX1JJTkczX1NTCi0KLS8qIEFuZCB0aGUgdHJhcCB2ZWN0b3IgaXMuLi4gKi8KLSNkZWZpbmUgVFJBUF9JTlNUUiAiaW50ICQweDgyIgotCi0vKgotICogVmlydHVhbCBhZGRyZXNzZXMgYmV5b25kIHRoaXMgYXJlIG5vdCBtb2RpZmlhYmxlIGJ5IGd1ZXN0IE9TZXMuIFRoZQotICogbWFjaGluZS0+cGh5c2ljYWwgbWFwcGluZyB0YWJsZSBzdGFydHMgYXQgdGhpcyBhZGRyZXNzLCByZWFkLW9ubHkuCi0gKi8KLSNkZWZpbmUgX19IWVBFUlZJU09SX1ZJUlRfU1RBUlQgMHhGNTgwMDAwMAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdHJ1Y3QgY3B1X3VzZXJfcmVncyB7Ci0gICAgdWludDMyX3QgZWJ4OwotICAgIHVpbnQzMl90IGVjeDsKLSAgICB1aW50MzJfdCBlZHg7Ci0gICAgdWludDMyX3QgZXNpOwotICAgIHVpbnQzMl90IGVkaTsKLSAgICB1aW50MzJfdCBlYnA7Ci0gICAgdWludDMyX3QgZWF4OwotICAgIHVpbnQxNl90IGVycm9yX2NvZGU7ICAgIC8qIHByaXZhdGUgKi8KLSAgICB1aW50MTZfdCBlbnRyeV92ZWN0b3I7ICAvKiBwcml2YXRlICovCi0gICAgdWludDMyX3QgZWlwOwotICAgIHVpbnQxNl90IGNzOwotICAgIHVpbnQ4X3QgIHNhdmVkX3VwY2FsbF9tYXNrOwotICAgIHVpbnQ4X3QgIF9wYWQwOwotICAgIHVpbnQzMl90IGVmbGFnczsgICAgICAgIC8qIGVmbGFncy5JRiA9PSAhc2F2ZWRfdXBjYWxsX21hc2sgKi8KLSAgICB1aW50MzJfdCBlc3A7Ci0gICAgdWludDE2X3Qgc3MsIF9wYWQxOwotICAgIHVpbnQxNl90IGVzLCBfcGFkMjsKLSAgICB1aW50MTZfdCBkcywgX3BhZDM7Ci0gICAgdWludDE2X3QgZnMsIF9wYWQ0OwotICAgIHVpbnQxNl90IGdzLCBfcGFkNTsKLX07Ci1ERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVChjcHVfdXNlcl9yZWdzKTsKLQotdHlwZWRlZiB1aW50NjRfdCB0c2NfdGltZXN0YW1wX3Q7IC8qIFJEVFNDIHRpbWVzdGFtcCAqLwotCi1zdHJ1Y3QgYXJjaF92Y3B1X2luZm8gewotICAgIHVuc2lnbmVkIGxvbmcgY3IyOwotICAgIHVuc2lnbmVkIGxvbmcgcGFkWzVdOyAvKiBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykgPT0gNjQgKi8KLX07Ci0KLXN0cnVjdCB4ZW5fY2FsbGJhY2sgewotCXVuc2lnbmVkIGxvbmcgY3M7Ci0JdW5zaWduZWQgbG9uZyBlaXA7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgeGVuX2NhbGxiYWNrIHhlbl9jYWxsYmFja190OwotCi0jZGVmaW5lIFhFTl9DQUxMQkFDSyhfX2NzLCBfX2VpcCkJCQkJXAotCSgoc3RydWN0IHhlbl9jYWxsYmFjayl7IC5jcyA9IChfX2NzKSwgLmVpcCA9ICh1bnNpZ25lZCBsb25nKShfX2VpcCkgfSkKLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLQotLyoKLSAqIFBhZ2UtZGlyZWN0b3J5IGFkZHJlc3NlcyBhYm92ZSA0R0IgZG8gbm90IGZpdCBpbnRvIGFyY2hpdGVjdHVyYWwgJWNyMy4KLSAqIFdoZW4gYWNjZXNzaW5nICVjcjMsIG9yIGVxdWl2YWxlbnQgZmllbGQgaW4gdmNwdV9ndWVzdF9jb250ZXh0LCBndWVzdHMKLSAqIG11c3QgdXNlIHRoZSBmb2xsb3dpbmcgYWNjZXNzb3IgbWFjcm9zIHRvIHBhY2svdW5wYWNrIHZhbGlkIE1GTnMuCi0gKgotICogTm90ZSB0aGF0IFhlbiBpcyB1c2luZyB0aGUgZmFjdCB0aGF0IHRoZSBwYWdldGFibGUgYmFzZSBpcyBhbHdheXMKLSAqIHBhZ2UtYWxpZ25lZCwgYW5kIHB1dHRpbmcgdGhlIDEyIE1TQiBvZiB0aGUgYWRkcmVzcyBpbnRvIHRoZSAxMiBMU0IKLSAqIG9mIGNyMy4KLSAqLwotI2RlZmluZSB4ZW5fcGZuX3RvX2NyMyhwZm4pICgoKHVuc2lnbmVkKShwZm4pIDw8IDEyKSB8ICgodW5zaWduZWQpKHBmbikgPj4gMjApKQotI2RlZmluZSB4ZW5fY3IzX3RvX3BmbihjcjMpICgoKHVuc2lnbmVkKShjcjMpID4+IDEyKSB8ICgodW5zaWduZWQpKGNyMykgPDwgMjApKQotCi0jZW5kaWYgLyogQVNNX1g4Nl9fWEVOX19JTlRFUkZBQ0VfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2VfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaW50ZXJmYWNlXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NmMwZjEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2VfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1hFTl9fSU5URVJGQUNFXzY0X0gKLSNkZWZpbmUgQVNNX1g4Nl9fWEVOX19JTlRFUkZBQ0VfNjRfSAotCi0vKgotICogNjQtYml0IHNlZ21lbnQgc2VsZWN0b3JzCi0gKiBUaGVzZSBmbGF0IHNlZ21lbnRzIGFyZSBpbiB0aGUgWGVuLXByaXZhdGUgc2VjdGlvbiBvZiBldmVyeSBHRFQuIFNpbmNlIHRoZXNlCi0gKiBhcmUgYWxzbyBwcmVzZW50IGluIHRoZSBpbml0aWFsIEdEVCwgbWFueSBPU2VzIHdpbGwgYmUgYWJsZSB0byBhdm9pZAotICogaW5zdGFsbGluZyB0aGVpciBvd24gR0RULgotICovCi0KLSNkZWZpbmUgRkxBVF9SSU5HM19DUzMyIDB4ZTAyMyAgLyogR0RUIGluZGV4IDI2MCAqLwotI2RlZmluZSBGTEFUX1JJTkczX0NTNjQgMHhlMDMzICAvKiBHRFQgaW5kZXggMjYxICovCi0jZGVmaW5lIEZMQVRfUklORzNfRFMzMiAweGUwMmIgIC8qIEdEVCBpbmRleCAyNjIgKi8KLSNkZWZpbmUgRkxBVF9SSU5HM19EUzY0IDB4MDAwMCAgLyogTlVMTCBzZWxlY3RvciAqLwotI2RlZmluZSBGTEFUX1JJTkczX1NTMzIgMHhlMDJiICAvKiBHRFQgaW5kZXggMjYyICovCi0jZGVmaW5lIEZMQVRfUklORzNfU1M2NCAweGUwMmIgIC8qIEdEVCBpbmRleCAyNjIgKi8KLQotI2RlZmluZSBGTEFUX0tFUk5FTF9EUzY0IEZMQVRfUklORzNfRFM2NAotI2RlZmluZSBGTEFUX0tFUk5FTF9EUzMyIEZMQVRfUklORzNfRFMzMgotI2RlZmluZSBGTEFUX0tFUk5FTF9EUyAgIEZMQVRfS0VSTkVMX0RTNjQKLSNkZWZpbmUgRkxBVF9LRVJORUxfQ1M2NCBGTEFUX1JJTkczX0NTNjQKLSNkZWZpbmUgRkxBVF9LRVJORUxfQ1MzMiBGTEFUX1JJTkczX0NTMzIKLSNkZWZpbmUgRkxBVF9LRVJORUxfQ1MgICBGTEFUX0tFUk5FTF9DUzY0Ci0jZGVmaW5lIEZMQVRfS0VSTkVMX1NTNjQgRkxBVF9SSU5HM19TUzY0Ci0jZGVmaW5lIEZMQVRfS0VSTkVMX1NTMzIgRkxBVF9SSU5HM19TUzMyCi0jZGVmaW5lIEZMQVRfS0VSTkVMX1NTICAgRkxBVF9LRVJORUxfU1M2NAotCi0jZGVmaW5lIEZMQVRfVVNFUl9EUzY0IEZMQVRfUklORzNfRFM2NAotI2RlZmluZSBGTEFUX1VTRVJfRFMzMiBGTEFUX1JJTkczX0RTMzIKLSNkZWZpbmUgRkxBVF9VU0VSX0RTICAgRkxBVF9VU0VSX0RTNjQKLSNkZWZpbmUgRkxBVF9VU0VSX0NTNjQgRkxBVF9SSU5HM19DUzY0Ci0jZGVmaW5lIEZMQVRfVVNFUl9DUzMyIEZMQVRfUklORzNfQ1MzMgotI2RlZmluZSBGTEFUX1VTRVJfQ1MgICBGTEFUX1VTRVJfQ1M2NAotI2RlZmluZSBGTEFUX1VTRVJfU1M2NCBGTEFUX1JJTkczX1NTNjQKLSNkZWZpbmUgRkxBVF9VU0VSX1NTMzIgRkxBVF9SSU5HM19TUzMyCi0jZGVmaW5lIEZMQVRfVVNFUl9TUyAgIEZMQVRfVVNFUl9TUzY0Ci0KLSNkZWZpbmUgX19IWVBFUlZJU09SX1ZJUlRfU1RBUlQgMHhGRkZGODAwMDAwMDAwMDAwCi0jZGVmaW5lIF9fSFlQRVJWSVNPUl9WSVJUX0VORCAgIDB4RkZGRjg4MDAwMDAwMDAwMAotI2RlZmluZSBfX01BQ0gyUEhZU19WSVJUX1NUQVJUICAweEZGRkY4MDAwMDAwMDAwMDAKLSNkZWZpbmUgX19NQUNIMlBIWVNfVklSVF9FTkQgICAgMHhGRkZGODA0MDAwMDAwMDAwCi0KLSNpZm5kZWYgSFlQRVJWSVNPUl9WSVJUX1NUQVJUCi0jZGVmaW5lIEhZUEVSVklTT1JfVklSVF9TVEFSVCBta191bnNpZ25lZF9sb25nKF9fSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQotI2RlZmluZSBIWVBFUlZJU09SX1ZJUlRfRU5EICAgbWtfdW5zaWduZWRfbG9uZyhfX0hZUEVSVklTT1JfVklSVF9FTkQpCi0jZW5kaWYKLQotI2RlZmluZSBNQUNIMlBIWVNfVklSVF9TVEFSVCAgbWtfdW5zaWduZWRfbG9uZyhfX01BQ0gyUEhZU19WSVJUX1NUQVJUKQotI2RlZmluZSBNQUNIMlBIWVNfVklSVF9FTkQgICAgbWtfdW5zaWduZWRfbG9uZyhfX01BQ0gyUEhZU19WSVJUX0VORCkKLSNkZWZpbmUgTUFDSDJQSFlTX05SX0VOVFJJRVMgICgoTUFDSDJQSFlTX1ZJUlRfRU5ELU1BQ0gyUEhZU19WSVJUX1NUQVJUKT4+MykKLSNpZm5kZWYgbWFjaGluZV90b19waHlzX21hcHBpbmcKLSNkZWZpbmUgbWFjaGluZV90b19waHlzX21hcHBpbmcgKCh1bnNpZ25lZCBsb25nICopSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQotI2VuZGlmCi0KLS8qCi0gKiBpbnQgSFlQRVJWSVNPUl9zZXRfc2VnbWVudF9iYXNlKHVuc2lnbmVkIGludCB3aGljaCwgdW5zaWduZWQgbG9uZyBiYXNlKQotICogIEB3aGljaCA9PSBTRUdCQVNFXyogIDsgIEBiYXNlID09IDY0LWJpdCBiYXNlIGFkZHJlc3MKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgotICovCi0jZGVmaW5lIFNFR0JBU0VfRlMgICAgICAgICAgMAotI2RlZmluZSBTRUdCQVNFX0dTX1VTRVIgICAgIDEKLSNkZWZpbmUgU0VHQkFTRV9HU19LRVJORUwgICAyCi0jZGVmaW5lIFNFR0JBU0VfR1NfVVNFUl9TRUwgMyAvKiBTZXQgdXNlciAlZ3Mgc3BlY2lmaWVkIGluIGJhc2VbMTU6MF0gKi8KLQotLyoKLSAqIGludCBIWVBFUlZJU09SX2lyZXQodm9pZCkKLSAqIEFsbCBhcmd1bWVudHMgYXJlIG9uIHRoZSBrZXJuZWwgc3RhY2ssIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0LgotICogTmV2ZXIgcmV0dXJucyBpZiBzdWNjZXNzZnVsLiBDdXJyZW50IGtlcm5lbCBjb250ZXh0IGlzIGxvc3QuCi0gKiBUaGUgc2F2ZWQgQ1MgaXMgbWFwcGVkIGFzIGZvbGxvd3M6Ci0gKiAgIFJJTkcwIC0+IFJJTkczIGtlcm5lbCBtb2RlLgotICogICBSSU5HMSAtPiBSSU5HMyBrZXJuZWwgbW9kZS4KLSAqICAgUklORzIgLT4gUklORzMga2VybmVsIG1vZGUuCi0gKiAgIFJJTkczIC0+IFJJTkczIHVzZXIgbW9kZS4KLSAqIEhvd2V2ZXIgUklORzAgaW5kaWNhdGVzIHRoYXQgdGhlIGd1ZXN0IGtlcm5lbCBzaG91bGQgcmV0dXJuIHRvIGl0ZXNlbGYKLSAqIGRpcmVjdGx5IHdpdGgKLSAqICAgICAgb3JiICAgJDMsMSo4KCVyc3ApCi0gKiAgICAgIGlyZXRxCi0gKiBJZiBmbGFncyBjb250YWlucyBWR0NGX2luX3N5c2NhbGw6Ci0gKiAgIFJlc3RvcmUgUkFYLCBSSVAsIFJGTEFHUywgUlNQLgotICogICBEaXNjYXJkIFIxMSwgUkNYLCBDUywgU1MuCi0gKiBPdGhlcndpc2U6Ci0gKiAgIFJlc3RvcmUgUkFYLCBSMTEsIFJDWCwgQ1M6UklQLCBSRkxBR1MsIFNTOlJTUC4KLSAqIEFsbCBvdGhlciByZWdpc3RlcnMgYXJlIHNhdmVkIG9uIGh5cGVyY2FsbCBlbnRyeSBhbmQgcmVzdG9yZWQgdG8gdXNlci4KLSAqLwotLyogR3Vlc3QgZXhpdGVkIGluIFNZU0NBTEwgY29udGV4dD8gUmV0dXJuIHRvIGd1ZXN0IHdpdGggU1lTUkVUPyAqLwotI2RlZmluZSBfVkdDRl9pbl9zeXNjYWxsIDgKLSNkZWZpbmUgVkdDRl9pbl9zeXNjYWxsICAoMTw8X1ZHQ0ZfaW5fc3lzY2FsbCkKLSNkZWZpbmUgVkdDRl9JTl9TWVNDQUxMICBWR0NGX2luX3N5c2NhbGwKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IGlyZXRfY29udGV4dCB7Ci0gICAgLyogVG9wIG9mIHN0YWNrICglcnNwIGF0IHBvaW50IG9mIGh5cGVyY2FsbCkuICovCi0gICAgdWludDY0X3QgcmF4LCByMTEsIHJjeCwgZmxhZ3MsIHJpcCwgY3MsIHJmbGFncywgcnNwLCBzczsKLSAgICAvKiBCb3R0b20gb2YgaXJldCBzdGFjayBmcmFtZS4gKi8KLX07Ci0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCi0vKiBBbm9ueW1vdXMgdW5pb24gaW5jbHVkZXMgYm90aCAzMi0gYW5kIDY0LWJpdCBuYW1lcyAoZS5nLiwgZWF4L3JheCkuICovCi0jZGVmaW5lIF9fREVDTF9SRUcobmFtZSkgdW5pb24geyBcCi0gICAgdWludDY0X3QgciAjIyBuYW1lLCBlICMjIG5hbWU7IFwKLSAgICB1aW50MzJfdCBfZSAjIyBuYW1lOyBcCi19Ci0jZWxzZQotLyogTm9uLWdjYyBzb3VyY2VzIG11c3QgYWx3YXlzIHVzZSB0aGUgcHJvcGVyIDY0LWJpdCBuYW1lIChlLmcuLCByYXgpLiAqLwotI2RlZmluZSBfX0RFQ0xfUkVHKG5hbWUpIHVpbnQ2NF90IHIgIyMgbmFtZQotI2VuZGlmCi0KLXN0cnVjdCBjcHVfdXNlcl9yZWdzIHsKLSAgICB1aW50NjRfdCByMTU7Ci0gICAgdWludDY0X3QgcjE0OwotICAgIHVpbnQ2NF90IHIxMzsKLSAgICB1aW50NjRfdCByMTI7Ci0gICAgX19ERUNMX1JFRyhicCk7Ci0gICAgX19ERUNMX1JFRyhieCk7Ci0gICAgdWludDY0X3QgcjExOwotICAgIHVpbnQ2NF90IHIxMDsKLSAgICB1aW50NjRfdCByOTsKLSAgICB1aW50NjRfdCByODsKLSAgICBfX0RFQ0xfUkVHKGF4KTsKLSAgICBfX0RFQ0xfUkVHKGN4KTsKLSAgICBfX0RFQ0xfUkVHKGR4KTsKLSAgICBfX0RFQ0xfUkVHKHNpKTsKLSAgICBfX0RFQ0xfUkVHKGRpKTsKLSAgICB1aW50MzJfdCBlcnJvcl9jb2RlOyAgICAvKiBwcml2YXRlICovCi0gICAgdWludDMyX3QgZW50cnlfdmVjdG9yOyAgLyogcHJpdmF0ZSAqLwotICAgIF9fREVDTF9SRUcoaXApOwotICAgIHVpbnQxNl90IGNzLCBfcGFkMFsxXTsKLSAgICB1aW50OF90ICBzYXZlZF91cGNhbGxfbWFzazsKLSAgICB1aW50OF90ICBfcGFkMVszXTsKLSAgICBfX0RFQ0xfUkVHKGZsYWdzKTsgICAgICAvKiByZmxhZ3MuSUYgPT0gIXNhdmVkX3VwY2FsbF9tYXNrICovCi0gICAgX19ERUNMX1JFRyhzcCk7Ci0gICAgdWludDE2X3Qgc3MsIF9wYWQyWzNdOwotICAgIHVpbnQxNl90IGVzLCBfcGFkM1szXTsKLSAgICB1aW50MTZfdCBkcywgX3BhZDRbM107Ci0gICAgdWludDE2X3QgZnMsIF9wYWQ1WzNdOyAvKiBOb24temVybyA9PiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZnNfYmFzZS4gICAgICovCi0gICAgdWludDE2X3QgZ3MsIF9wYWQ2WzNdOyAvKiBOb24temVybyA9PiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZ3NfYmFzZV91c3IuICovCi19OwotREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoY3B1X3VzZXJfcmVncyk7Ci0KLSN1bmRlZiBfX0RFQ0xfUkVHCi0KLSNkZWZpbmUgeGVuX3Bmbl90b19jcjMocGZuKSAoKHVuc2lnbmVkIGxvbmcpKHBmbikgPDwgMTIpCi0jZGVmaW5lIHhlbl9jcjNfdG9fcGZuKGNyMykgKCh1bnNpZ25lZCBsb25nKShjcjMpID4+IDEyKQotCi1zdHJ1Y3QgYXJjaF92Y3B1X2luZm8gewotICAgIHVuc2lnbmVkIGxvbmcgY3IyOwotICAgIHVuc2lnbmVkIGxvbmcgcGFkOyAvKiBzaXplb2YodmNwdV9pbmZvX3QpID09IDY0ICovCi19OwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgeGVuX2NhbGxiYWNrX3Q7Ci0KLSNkZWZpbmUgWEVOX0NBTExCQUNLKF9fY3MsIF9fcmlwKQkJCQlcCi0JKCh1bnNpZ25lZCBsb25nKShfX3JpcCkpCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLQotI2VuZGlmIC8qIEFTTV9YODZfX1hFTl9fSU5URVJGQUNFXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oIGIvaW5jbHVkZS9hc20teDg2L3hlbi9wYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZWFkYTAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3hlbi9wYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19YRU5fX1BBR0VfSAotI2RlZmluZSBBU01fWDg2X19YRU5fX1BBR0VfSAotCi0jaW5jbHVkZSA8bGludXgvcGZuLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KLSNpbmNsdWRlIDx4ZW4vZmVhdHVyZXMuaD4KLQotLyogWGVuIG1hY2hpbmUgYWRkcmVzcyAqLwotdHlwZWRlZiBzdHJ1Y3QgeG1hZGRyIHsKLQlwaHlzX2FkZHJfdCBtYWRkcjsKLX0geG1hZGRyX3Q7Ci0KLS8qIFhlbiBwc2V1ZG8tcGh5c2ljYWwgYWRkcmVzcyAqLwotdHlwZWRlZiBzdHJ1Y3QgeHBhZGRyIHsKLQlwaHlzX2FkZHJfdCBwYWRkcjsKLX0geHBhZGRyX3Q7Ci0KLSNkZWZpbmUgWE1BRERSKHgpCSgoeG1hZGRyX3QpIHsgLm1hZGRyID0gKHgpIH0pCi0jZGVmaW5lIFhQQUREUih4KQkoKHhwYWRkcl90KSB7IC5wYWRkciA9ICh4KSB9KQotCi0vKioqKiBNQUNISU5FIDwtPiBQSFlTSUNBTCBDT05WRVJTSU9OIE1BQ1JPUyAqKioqLwotI2RlZmluZSBJTlZBTElEX1AyTV9FTlRSWQkofjBVTCkKLSNkZWZpbmUgRk9SRUlHTl9GUkFNRV9CSVQJKDFVTDw8MzEpCi0jZGVmaW5lIEZPUkVJR05fRlJBTUUobSkJKChtKSB8IEZPUkVJR05fRlJBTUVfQklUKQotCi0vKiBNYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgd2UgY2FuIGhhbmRsZSBpbiBhIGRvbWFpbiBpbiBwYWdlcyAqLwotI2RlZmluZSBNQVhfRE9NQUlOX1BBR0VTCQkJCQkJXAotICAgICgodW5zaWduZWQgbG9uZykoKHU2NClDT05GSUdfWEVOX01BWF9ET01BSU5fTUVNT1JZICogMTAyNCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKSkKLQotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfcGh5c190b19tYWNoaW5lKHVuc2lnbmVkIGxvbmcgcGZuKTsKLWV4dGVybiB2b2lkIHNldF9waHlzX3RvX21hY2hpbmUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbWZuKTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBmbl90b19tZm4odW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQotCQlyZXR1cm4gcGZuOwotCi0JcmV0dXJuIGdldF9waHlzX3RvX21hY2hpbmUocGZuKSAmIH5GT1JFSUdOX0ZSQU1FX0JJVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGh5c190b19tYWNoaW5lX21hcHBpbmdfdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiBnZXRfcGh5c190b19tYWNoaW5lKHBmbikgIT0gSU5WQUxJRF9QMk1fRU5UUlk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZm5fdG9fcGZuKHVuc2lnbmVkIGxvbmcgbWZuKQotewotCXVuc2lnbmVkIGxvbmcgcGZuOwotCi0JaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQotCQlyZXR1cm4gbWZuOwotCi0jaWYgMAotCWlmICh1bmxpa2VseSgobWZuID4+IG1hY2hpbmVfdG9fcGh5c19vcmRlcikgIT0gMCkpCi0JCXJldHVybiBtYXhfbWFwbnI7Ci0jZW5kaWYKLQotCXBmbiA9IDA7Ci0JLyoKLQkgKiBUaGUgYXJyYXkgYWNjZXNzIGNhbiBmYWlsIChlLmcuLCBkZXZpY2Ugc3BhY2UgYmV5b25kIGVuZCBvZiBSQU0pLgotCSAqIEluIHN1Y2ggY2FzZXMgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSByZXR1cm4gKHdlIHJldHVybiBnYXJiYWdlKSwKLQkgKiBidXQgd2UgbXVzdCBoYW5kbGUgdGhlIGZhdWx0IHdpdGhvdXQgY3Jhc2hpbmchCi0JICovCi0JX19nZXRfdXNlcihwZm4sICZtYWNoaW5lX3RvX3BoeXNfbWFwcGluZ1ttZm5dKTsKLQotCXJldHVybiBwZm47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgeG1hZGRyX3QgcGh5c190b19tYWNoaW5lKHhwYWRkcl90IHBoeXMpCi17Ci0JdW5zaWduZWQgb2Zmc2V0ID0gcGh5cy5wYWRkciAmIH5QQUdFX01BU0s7Ci0JcmV0dXJuIFhNQUREUihQRk5fUEhZUyhwZm5fdG9fbWZuKFBGTl9ET1dOKHBoeXMucGFkZHIpKSkgfCBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHhwYWRkcl90IG1hY2hpbmVfdG9fcGh5cyh4bWFkZHJfdCBtYWNoaW5lKQotewotCXVuc2lnbmVkIG9mZnNldCA9IG1hY2hpbmUubWFkZHIgJiB+UEFHRV9NQVNLOwotCXJldHVybiBYUEFERFIoUEZOX1BIWVMobWZuX3RvX3BmbihQRk5fRE9XTihtYWNoaW5lLm1hZGRyKSkpIHwgb2Zmc2V0KTsKLX0KLQotLyoKLSAqIFdlIGRldGVjdCBzcGVjaWFsIG1hcHBpbmdzIGluIG9uZSBvZiB0d28gd2F5czoKLSAqICAxLiBJZiB0aGUgTUZOIGlzIGFuIEkvTyBwYWdlIHRoZW4gWGVuIHdpbGwgc2V0IHRoZSBtMnAgZW50cnkKLSAqICAgICB0byBiZSBvdXRzaWRlIG91ciBtYXhpbXVtIHBvc3NpYmxlIHBzZXVkb3BoeXMgcmFuZ2UuCi0gKiAgMi4gSWYgdGhlIE1GTiBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB0aGVuIHdlIHdpbGwgY2VydGFpbmx5Ci0gKiAgICAgbm90IGhhdmUgTUZOIGluIG91ciBwMm0gdGFibGUuIENvbnZlcnNlbHksIGlmIHRoZSBwYWdlIGlzIG91cnMsCi0gKiAgICAgdGhlbiB3ZSdsbCBoYXZlIHAybShtMnAoTUZOKSk9PU1GTi4KLSAqIElmIHdlIGRldGVjdCBhIHNwZWNpYWwgbWFwcGluZyB0aGVuIGl0IGRvZXNuJ3QgaGF2ZSBhICdzdHJ1Y3QgcGFnZScuCi0gKiBXZSBmb3JjZSAhcGZuX3ZhbGlkKCkgYnkgcmV0dXJuaW5nIGFuIG91dC1vZi1yYW5nZSBwb2ludGVyLgotICoKLSAqIE5CLiBUaGVzZSBjaGVja3MgcmVxdWlyZSB0aGF0LCBmb3IgYW55IE1GTiB0aGF0IGlzIG5vdCBpbiBvdXIgcmVzZXJ2YXRpb24sCi0gKiB0aGVyZSBpcyBubyBQRk4gc3VjaCB0aGF0IHAybShQRk4pID09IE1GTi4gT3RoZXJ3aXNlIHdlIGNhbiBnZXQgY29uZnVzZWQgaWYKLSAqIHdlIGFyZSBmb3JlaWduLW1hcHBpbmcgdGhlIE1GTiwgYW5kIHRoZSBvdGhlciBkb21haW4gYXMgbTJwKE1GTikgPT0gUEZOLgotICogWWlrZXMhIFZhcmlvdXMgcGxhY2VzIG11c3QgcG9rZSBpbiBJTlZBTElEX1AyTV9FTlRSWSBmb3Igc2FmZXR5LgotICoKLSAqIE5CMi4gV2hlbiBkZWxpYmVyYXRlbHkgbWFwcGluZyBmb3JlaWduIHBhZ2VzIGludG8gdGhlIHAybSB0YWJsZSwgeW91ICptdXN0KgotICogICAgICB1c2UgRk9SRUlHTl9GUkFNRSgpLiBUaGlzIHdpbGwgY2F1c2UgcHRlX3BmbigpIHRvIGNob2tlIG9uIGl0LCBhcyB3ZQotICogICAgICByZXF1aXJlLiBJbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQsIHRoZSBGT1JFSUdOX0ZSQU1FIGJpdCBpcwotICogICAgICBtYXNrZWQgKGUuZy4sIHBmbl90b19tZm4oKSkgc28gYmVoYXZpb3VyIHRoZXJlIGlzIGNvcnJlY3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZm5fdG9fbG9jYWxfcGZuKHVuc2lnbmVkIGxvbmcgbWZuKQotewotCWV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IG1mbl90b19wZm4obWZuKTsKLQlpZiAoKHBmbiA8IG1heF9tYXBucikKLQkgICAgJiYgIXhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApCi0JICAgICYmIChnZXRfcGh5c190b19tYWNoaW5lKHBmbikgIT0gbWZuKSkKLQkJcmV0dXJuIG1heF9tYXBucjsgLyogZm9yY2UgIXBmbl92YWxpZCgpICovCi0JLyogWFhYIGZpeG1lOyBub3QgdHJ1ZSB3aXRoIHNwYXJzZW1lbSAqLwotCXJldHVybiBwZm47Ci19Ci0KLS8qIFZJUlQgPC0+IE1BQ0hJTkUgY29udmVyc2lvbiAqLwotI2RlZmluZSB2aXJ0X3RvX21hY2hpbmUodikJKHBoeXNfdG9fbWFjaGluZShYUEFERFIoX19wYSh2KSkpKQotI2RlZmluZSB2aXJ0X3RvX21mbih2KQkJKHBmbl90b19tZm4oUEZOX0RPV04oX19wYSh2KSkpKQotI2RlZmluZSBtZm5fdG9fdmlydChtKQkJKF9fdmEobWZuX3RvX3BmbihtKSA8PCBQQUdFX1NISUZUKSkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9tZm4ocHRlX3QgcHRlKQotewotCXJldHVybiAocHRlLnB0ZSAmIFBURV9QRk5fTUFTSykgPj4gUEFHRV9TSElGVDsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBtZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgcGdwcm90X3QgcGdwcm90KQotewotCXB0ZV90IHB0ZTsKLQotCXB0ZS5wdGUgPSAoKHBoeXNfYWRkcl90KXBhZ2VfbnIgPDwgUEFHRV9TSElGVCkgfAotCQkocGdwcm90X3ZhbChwZ3Byb3QpICYgX19zdXBwb3J0ZWRfcHRlX21hc2spOwotCi0JcmV0dXJuIHB0ZTsKLX0KLQotc3RhdGljIGlubGluZSBwdGV2YWxfdCBwdGVfdmFsX21hKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlLnB0ZTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZV9tYShwdGV2YWxfdCB4KQotewotCXJldHVybiAocHRlX3QpIHsgLnB0ZSA9IHggfTsKLX0KLQotI2RlZmluZSBwbWRfdmFsX21hKHYpICgodikucG1kKQotI2lmZGVmIF9fUEFHRVRBQkxFX1BVRF9GT0xERUQKLSNkZWZpbmUgcHVkX3ZhbF9tYSh2KSAoKHYpLnBnZC5wZ2QpCi0jZWxzZQotI2RlZmluZSBwdWRfdmFsX21hKHYpICgodikucHVkKQotI2VuZGlmCi0jZGVmaW5lIF9fcG1kX21hKHgpCSgocG1kX3QpIHsgKHgpIH0gKQotCi0jZGVmaW5lIHBnZF92YWxfbWEoeCkJKCh4KS5wZ2QpCi0KLQoteG1hZGRyX3QgYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh2b2lkICphZGRyZXNzKTsKLXZvaWQgbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seSh2b2lkICp2YWRkcik7Ci12b2lkIG1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKHZvaWQgKnZhZGRyKTsKLQotI2VuZGlmIC8qIEFTTV9YODZfX1hFTl9fUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveG9yXzMyLmggYi9pbmNsdWRlL2FzbS14ODYveG9yXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMWI0NTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3hvcl8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsODg4ICswLDAgQEAKLSNpZm5kZWYgQVNNX1g4Nl9fWE9SXzMyX0gKLSNkZWZpbmUgQVNNX1g4Nl9fWE9SXzMyX0gKLQotLyoKLSAqIE9wdGltaXplZCBSQUlELTUgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyBmb3IgTU1YIGFuZCBTU0UuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0vKgotICogSGlnaC1zcGVlZCBSQUlENSBjaGVja3N1bW1pbmcgZnVuY3Rpb25zIHV0aWxpemluZyBNTVggaW5zdHJ1Y3Rpb25zLgotICogQ29weXJpZ2h0IChDKSAxOTk4IEluZ28gTW9sbmFyLgotICovCi0KLSNkZWZpbmUgTEQoeCwgeSkJIiAgICAgICBtb3ZxICAgOCooIiN4IikoJTEpLCAlJW1tIiN5IiAgIDtcbiIKLSNkZWZpbmUgU1QoeCwgeSkJIiAgICAgICBtb3ZxICUlbW0iI3kiLCAgIDgqKCIjeCIpKCUxKSAgIDtcbiIKLSNkZWZpbmUgWE8xKHgsIHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCUyKSwgJSVtbSIjeSIgICA7XG4iCi0jZGVmaW5lIFhPMih4LCB5KQkiICAgICAgIHB4b3IgICA4KigiI3giKSglMyksICUlbW0iI3kiICAgO1xuIgotI2RlZmluZSBYTzMoeCwgeSkJIiAgICAgICBweG9yICAgOCooIiN4IikoJTQpLCAlJW1tIiN5IiAgIDtcbiIKLSNkZWZpbmUgWE80KHgsIHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCU1KSwgJSVtbSIjeSIgICA7XG4iCi0KLSNpbmNsdWRlIDxhc20vaTM4Ny5oPgotCi1zdGF0aWMgdm9pZAoteG9yX3BJSV9tbXhfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCi17Ci0JdW5zaWduZWQgbG9uZyBsaW5lcyA9IGJ5dGVzID4+IDc7Ci0KLQlrZXJuZWxfZnB1X2JlZ2luKCk7Ci0KLQlhc20gdm9sYXRpbGUoCi0jdW5kZWYgQkxPQ0sKLSNkZWZpbmUgQkxPQ0soaSkJCQkJXAotCUxEKGksIDApCQkJCVwKLQkJTEQoaSArIDEsIDEpCQkJXAotCQkJTEQoaSArIDIsIDIpCQlcCi0JCQkJTEQoaSArIDMsIDMpCVwKLQlYTzEoaSwgMCkJCQkJXAotCVNUKGksIDApCQkJCVwKLQkJWE8xKGkrMSwgMSkJCQlcCi0JCVNUKGkrMSwgMSkJCQlcCi0JCQlYTzEoaSArIDIsIDIpCQlcCi0JCQlTVChpICsgMiwgMikJCVwKLQkJCQlYTzEoaSArIDMsIDMpCVwKLQkJCQlTVChpICsgMywgMykKLQotCSIgLmFsaWduIDMyCQkJO1xuIgotCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgotCi0JQkxPQ0soMCkKLQlCTE9DSyg0KQotCUJMT0NLKDgpCi0JQkxPQ0soMTIpCi0KLQkiICAgICAgIGFkZGwgJDEyOCwgJTEgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQxMjgsICUyICAgICAgICAgO1xuIgotCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCi0JOiAiK3IiIChsaW5lcyksCi0JICAiK3IiIChwMSksICIrciIgKHAyKQotCToKLQk6ICJtZW1vcnkiKTsKLQotCWtlcm5lbF9mcHVfZW5kKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi14b3JfcElJX21teF8zKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKLQkgICAgICB1bnNpZ25lZCBsb25nICpwMykKLXsKLQl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNzsKLQotCWtlcm5lbF9mcHVfYmVnaW4oKTsKLQotCWFzbSB2b2xhdGlsZSgKLSN1bmRlZiBCTE9DSwotI2RlZmluZSBCTE9DSyhpKQkJCQlcCi0JTEQoaSwgMCkJCQkJXAotCQlMRChpICsgMSwgMSkJCQlcCi0JCQlMRChpICsgMiwgMikJCVwKLQkJCQlMRChpICsgMywgMykJXAotCVhPMShpLCAwKQkJCQlcCi0JCVhPMShpICsgMSwgMSkJCQlcCi0JCQlYTzEoaSArIDIsIDIpCQlcCi0JCQkJWE8xKGkgKyAzLCAzKQlcCi0JWE8yKGksIDApCQkJCVwKLQlTVChpLCAwKQkJCQlcCi0JCVhPMihpICsgMSwgMSkJCQlcCi0JCVNUKGkgKyAxLCAxKQkJCVwKLQkJCVhPMihpICsgMiwgMikJCVwKLQkJCVNUKGkgKyAyLCAyKQkJXAotCQkJCVhPMihpICsgMywgMykJXAotCQkJCVNUKGkgKyAzLCAzKQotCi0JIiAuYWxpZ24gMzIJCQk7XG4iCi0JIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCi0KLQlCTE9DSygwKQotCUJMT0NLKDQpCi0JQkxPQ0soOCkKLQlCTE9DSygxMikKLQotCSIgICAgICAgYWRkbCAkMTI4LCAlMSAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZGwgJDEyOCwgJTIgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQxMjgsICUzICAgICAgICAgO1xuIgotCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCi0JOiAiK3IiIChsaW5lcyksCi0JICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCi0JOgotCTogIm1lbW9yeSIpOwotCi0Ja2VybmVsX2ZwdV9lbmQoKTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9wSUlfbW14XzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAotCSAgICAgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKLXsKLQl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNzsKLQotCWtlcm5lbF9mcHVfYmVnaW4oKTsKLQotCWFzbSB2b2xhdGlsZSgKLSN1bmRlZiBCTE9DSwotI2RlZmluZSBCTE9DSyhpKQkJCQlcCi0JTEQoaSwgMCkJCQkJXAotCQlMRChpICsgMSwgMSkJCQlcCi0JCQlMRChpICsgMiwgMikJCVwKLQkJCQlMRChpICsgMywgMykJXAotCVhPMShpLCAwKQkJCQlcCi0JCVhPMShpICsgMSwgMSkJCQlcCi0JCQlYTzEoaSArIDIsIDIpCQlcCi0JCQkJWE8xKGkgKyAzLCAzKQlcCi0JWE8yKGksIDApCQkJCVwKLQkJWE8yKGkgKyAxLCAxKQkJCVwKLQkJCVhPMihpICsgMiwgMikJCVwKLQkJCQlYTzIoaSArIDMsIDMpCVwKLQlYTzMoaSwgMCkJCQkJXAotCVNUKGksIDApCQkJCVwKLQkJWE8zKGkgKyAxLCAxKQkJCVwKLQkJU1QoaSArIDEsIDEpCQkJXAotCQkJWE8zKGkgKyAyLCAyKQkJXAotCQkJU1QoaSArIDIsIDIpCQlcCi0JCQkJWE8zKGkgKyAzLCAzKQlcCi0JCQkJU1QoaSArIDMsIDMpCi0KLQkiIC5hbGlnbiAzMgkJCTtcbiIKLQkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKLQotCUJMT0NLKDApCi0JQkxPQ0soNCkKLQlCTE9DSyg4KQotCUJMT0NLKDEyKQotCi0JIiAgICAgICBhZGRsICQxMjgsICUxICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkMTI4LCAlMiAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZGwgJDEyOCwgJTMgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQxMjgsICU0ICAgICAgICAgO1xuIgotCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCi0JOiAiK3IiIChsaW5lcyksCi0JICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpLCAiK3IiIChwNCkKLQk6Ci0JOiAibWVtb3J5Iik7Ci0KLQlrZXJuZWxfZnB1X2VuZCgpOwotfQotCi0KLXN0YXRpYyB2b2lkCi14b3JfcElJX21teF81KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKLQkgICAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQotewotCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA3OwotCi0Ja2VybmVsX2ZwdV9iZWdpbigpOwotCi0JLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAotCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQotCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCi0JICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCi0JICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcwotCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCi0JYXNtKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOwotCi0JYXNtIHZvbGF0aWxlKAotI3VuZGVmIEJMT0NLCi0jZGVmaW5lIEJMT0NLKGkpCQkJCVwKLQlMRChpLCAwKQkJCQlcCi0JCUxEKGkgKyAxLCAxKQkJCVwKLQkJCUxEKGkgKyAyLCAyKQkJXAotCQkJCUxEKGkgKyAzLCAzKQlcCi0JWE8xKGksIDApCQkJCVwKLQkJWE8xKGkgKyAxLCAxKQkJCVwKLQkJCVhPMShpICsgMiwgMikJCVwKLQkJCQlYTzEoaSArIDMsIDMpCVwKLQlYTzIoaSwgMCkJCQkJXAotCQlYTzIoaSArIDEsIDEpCQkJXAotCQkJWE8yKGkgKyAyLCAyKQkJXAotCQkJCVhPMihpICsgMywgMykJXAotCVhPMyhpLCAwKQkJCQlcCi0JCVhPMyhpICsgMSwgMSkJCQlcCi0JCQlYTzMoaSArIDIsIDIpCQlcCi0JCQkJWE8zKGkgKyAzLCAzKQlcCi0JWE80KGksIDApCQkJCVwKLQlTVChpLCAwKQkJCQlcCi0JCVhPNChpICsgMSwgMSkJCQlcCi0JCVNUKGkgKyAxLCAxKQkJCVwKLQkJCVhPNChpICsgMiwgMikJCVwKLQkJCVNUKGkgKyAyLCAyKQkJXAotCQkJCVhPNChpICsgMywgMykJXAotCQkJCVNUKGkgKyAzLCAzKQotCi0JIiAuYWxpZ24gMzIJCQk7XG4iCi0JIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCi0KLQlCTE9DSygwKQotCUJMT0NLKDQpCi0JQkxPQ0soOCkKLQlCTE9DSygxMikKLQotCSIgICAgICAgYWRkbCAkMTI4LCAlMSAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZGwgJDEyOCwgJTIgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQxMjgsICUzICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkMTI4LCAlNCAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZGwgJDEyOCwgJTUgICAgICAgICA7XG4iCi0JIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgO1xuIgotCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgIDtcbiIKLQk6ICIrciIgKGxpbmVzKSwKLQkgICIrciIgKHAxKSwgIityIiAocDIpLCAiK3IiIChwMykKLQk6ICJyIiAocDQpLCAiciIgKHA1KQotCTogIm1lbW9yeSIpOwotCi0JLyogcDQgYW5kIHA1IHdlcmUgbW9kaWZpZWQsIGFuZCBub3cgdGhlIHZhcmlhYmxlcyBhcmUgZGVhZC4KLQkgICBDbG9iYmVyIHRoZW0ganVzdCB0byBiZSBzdXJlIG5vYm9keSBkb2VzIHNvbWV0aGluZyBzdHVwaWQKLQkgICBsaWtlIGFzc3VtaW5nIHRoZXkgaGF2ZSBzb21lIGxlZ2FsIHZhbHVlLiAgKi8KLQlhc20oIiIgOiAiPXIiIChwNCksICI9ciIgKHA1KSk7Ci0KLQlrZXJuZWxfZnB1X2VuZCgpOwotfQotCi0jdW5kZWYgTEQKLSN1bmRlZiBYTzEKLSN1bmRlZiBYTzIKLSN1bmRlZiBYTzMKLSN1bmRlZiBYTzQKLSN1bmRlZiBTVAotI3VuZGVmIEJMT0NLCi0KLXN0YXRpYyB2b2lkCi14b3JfcDVfbW14XzIodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQotewotCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA2OwotCi0Ja2VybmVsX2ZwdV9iZWdpbigpOwotCi0JYXNtIHZvbGF0aWxlKAotCSIgLmFsaWduIDMyCSAgICAgICAgICAgICA7XG4iCi0JIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCi0JIiAgICAgICBtb3ZxICAgKCUxKSwgJSVtbTAgICA7XG4iCi0JIiAgICAgICBtb3ZxICA4KCUxKSwgJSVtbTEgICA7XG4iCi0JIiAgICAgICBweG9yICAgKCUyKSwgJSVtbTAgICA7XG4iCi0JIiAgICAgICBtb3ZxIDE2KCUxKSwgJSVtbTIgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW0wLCAgICglMSkgICA7XG4iCi0JIiAgICAgICBweG9yICA4KCUyKSwgJSVtbTEgICA7XG4iCi0JIiAgICAgICBtb3ZxIDI0KCUxKSwgJSVtbTMgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW0xLCAgOCglMSkgICA7XG4iCi0JIiAgICAgICBweG9yIDE2KCUyKSwgJSVtbTIgICA7XG4iCi0JIiAgICAgICBtb3ZxIDMyKCUxKSwgJSVtbTQgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW0yLCAxNiglMSkgICA7XG4iCi0JIiAgICAgICBweG9yIDI0KCUyKSwgJSVtbTMgICA7XG4iCi0JIiAgICAgICBtb3ZxIDQwKCUxKSwgJSVtbTUgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW0zLCAyNCglMSkgICA7XG4iCi0JIiAgICAgICBweG9yIDMyKCUyKSwgJSVtbTQgICA7XG4iCi0JIiAgICAgICBtb3ZxIDQ4KCUxKSwgJSVtbTYgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW00LCAzMiglMSkgICA7XG4iCi0JIiAgICAgICBweG9yIDQwKCUyKSwgJSVtbTUgICA7XG4iCi0JIiAgICAgICBtb3ZxIDU2KCUxKSwgJSVtbTcgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW01LCA0MCglMSkgICA7XG4iCi0JIiAgICAgICBweG9yIDQ4KCUyKSwgJSVtbTYgICA7XG4iCi0JIiAgICAgICBweG9yIDU2KCUyKSwgJSVtbTcgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW02LCA0OCglMSkgICA7XG4iCi0JIiAgICAgICBtb3ZxICUlbW03LCA1NiglMSkgICA7XG4iCi0KLQkiICAgICAgIGFkZGwgJDY0LCAlMSAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZGwgJDY0LCAlMiAgICAgICAgIDtcbiIKLQkiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgIDtcbiIKLQk6ICIrciIgKGxpbmVzKSwKLQkgICIrciIgKHAxKSwgIityIiAocDIpCi0JOgotCTogIm1lbW9yeSIpOwotCi0Ja2VybmVsX2ZwdV9lbmQoKTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9wNV9tbXhfMyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JICAgICB1bnNpZ25lZCBsb25nICpwMykKLXsKLQl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNjsKLQotCWtlcm5lbF9mcHVfYmVnaW4oKTsKLQotCWFzbSB2b2xhdGlsZSgKLQkiIC5hbGlnbiAzMiwweDkwICAgICAgICAgICAgIDtcbiIKLQkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKLQkiICAgICAgIG1vdnEgICAoJTEpLCAlJW1tMCAgIDtcbiIKLQkiICAgICAgIG1vdnEgIDgoJTEpLCAlJW1tMSAgIDtcbiIKLQkiICAgICAgIHB4b3IgICAoJTIpLCAlJW1tMCAgIDtcbiIKLQkiICAgICAgIG1vdnEgMTYoJTEpLCAlJW1tMiAgIDtcbiIKLQkiICAgICAgIHB4b3IgIDgoJTIpLCAlJW1tMSAgIDtcbiIKLQkiICAgICAgIHB4b3IgICAoJTMpLCAlJW1tMCAgIDtcbiIKLQkiICAgICAgIHB4b3IgMTYoJTIpLCAlJW1tMiAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTAsICAgKCUxKSAgIDtcbiIKLQkiICAgICAgIHB4b3IgIDgoJTMpLCAlJW1tMSAgIDtcbiIKLQkiICAgICAgIHB4b3IgMTYoJTMpLCAlJW1tMiAgIDtcbiIKLQkiICAgICAgIG1vdnEgMjQoJTEpLCAlJW1tMyAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTEsICA4KCUxKSAgIDtcbiIKLQkiICAgICAgIG1vdnEgMzIoJTEpLCAlJW1tNCAgIDtcbiIKLQkiICAgICAgIG1vdnEgNDAoJTEpLCAlJW1tNSAgIDtcbiIKLQkiICAgICAgIHB4b3IgMjQoJTIpLCAlJW1tMyAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTIsIDE2KCUxKSAgIDtcbiIKLQkiICAgICAgIHB4b3IgMzIoJTIpLCAlJW1tNCAgIDtcbiIKLQkiICAgICAgIHB4b3IgMjQoJTMpLCAlJW1tMyAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDAoJTIpLCAlJW1tNSAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTMsIDI0KCUxKSAgIDtcbiIKLQkiICAgICAgIHB4b3IgMzIoJTMpLCAlJW1tNCAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDAoJTMpLCAlJW1tNSAgIDtcbiIKLQkiICAgICAgIG1vdnEgNDgoJTEpLCAlJW1tNiAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTQsIDMyKCUxKSAgIDtcbiIKLQkiICAgICAgIG1vdnEgNTYoJTEpLCAlJW1tNyAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDgoJTIpLCAlJW1tNiAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTUsIDQwKCUxKSAgIDtcbiIKLQkiICAgICAgIHB4b3IgNTYoJTIpLCAlJW1tNyAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDgoJTMpLCAlJW1tNiAgIDtcbiIKLQkiICAgICAgIHB4b3IgNTYoJTMpLCAlJW1tNyAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTYsIDQ4KCUxKSAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTcsIDU2KCUxKSAgIDtcbiIKLQotCSIgICAgICAgYWRkbCAkNjQsICUxICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkNjQsICUyICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkNjQsICUzICAgICAgICAgO1xuIgotCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgO1xuIgotCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgO1xuIgotCTogIityIiAobGluZXMpLAotCSAgIityIiAocDEpLCAiK3IiIChwMiksICIrciIgKHAzKQotCToKLQk6ICJtZW1vcnkiICk7Ci0KLQlrZXJuZWxfZnB1X2VuZCgpOwotfQotCi1zdGF0aWMgdm9pZAoteG9yX3A1X21teF80KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKLQkgICAgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKLXsKLQl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNjsKLQotCWtlcm5lbF9mcHVfYmVnaW4oKTsKLQotCWFzbSB2b2xhdGlsZSgKLQkiIC5hbGlnbiAzMiwweDkwICAgICAgICAgICAgIDtcbiIKLQkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKLQkiICAgICAgIG1vdnEgICAoJTEpLCAlJW1tMCAgIDtcbiIKLQkiICAgICAgIG1vdnEgIDgoJTEpLCAlJW1tMSAgIDtcbiIKLQkiICAgICAgIHB4b3IgICAoJTIpLCAlJW1tMCAgIDtcbiIKLQkiICAgICAgIG1vdnEgMTYoJTEpLCAlJW1tMiAgIDtcbiIKLQkiICAgICAgIHB4b3IgIDgoJTIpLCAlJW1tMSAgIDtcbiIKLQkiICAgICAgIHB4b3IgICAoJTMpLCAlJW1tMCAgIDtcbiIKLQkiICAgICAgIHB4b3IgMTYoJTIpLCAlJW1tMiAgIDtcbiIKLQkiICAgICAgIHB4b3IgIDgoJTMpLCAlJW1tMSAgIDtcbiIKLQkiICAgICAgIHB4b3IgICAoJTQpLCAlJW1tMCAgIDtcbiIKLQkiICAgICAgIG1vdnEgMjQoJTEpLCAlJW1tMyAgIDtcbiIKLQkiICAgICAgIHB4b3IgMTYoJTMpLCAlJW1tMiAgIDtcbiIKLQkiICAgICAgIHB4b3IgIDgoJTQpLCAlJW1tMSAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTAsICAgKCUxKSAgIDtcbiIKLQkiICAgICAgIG1vdnEgMzIoJTEpLCAlJW1tNCAgIDtcbiIKLQkiICAgICAgIHB4b3IgMjQoJTIpLCAlJW1tMyAgIDtcbiIKLQkiICAgICAgIHB4b3IgMTYoJTQpLCAlJW1tMiAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTEsICA4KCUxKSAgIDtcbiIKLQkiICAgICAgIG1vdnEgNDAoJTEpLCAlJW1tNSAgIDtcbiIKLQkiICAgICAgIHB4b3IgMzIoJTIpLCAlJW1tNCAgIDtcbiIKLQkiICAgICAgIHB4b3IgMjQoJTMpLCAlJW1tMyAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTIsIDE2KCUxKSAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDAoJTIpLCAlJW1tNSAgIDtcbiIKLQkiICAgICAgIHB4b3IgMzIoJTMpLCAlJW1tNCAgIDtcbiIKLQkiICAgICAgIHB4b3IgMjQoJTQpLCAlJW1tMyAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTMsIDI0KCUxKSAgIDtcbiIKLQkiICAgICAgIG1vdnEgNTYoJTEpLCAlJW1tNyAgIDtcbiIKLQkiICAgICAgIG1vdnEgNDgoJTEpLCAlJW1tNiAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDAoJTMpLCAlJW1tNSAgIDtcbiIKLQkiICAgICAgIHB4b3IgMzIoJTQpLCAlJW1tNCAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDgoJTIpLCAlJW1tNiAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTQsIDMyKCUxKSAgIDtcbiIKLQkiICAgICAgIHB4b3IgNTYoJTIpLCAlJW1tNyAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDAoJTQpLCAlJW1tNSAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDgoJTMpLCAlJW1tNiAgIDtcbiIKLQkiICAgICAgIHB4b3IgNTYoJTMpLCAlJW1tNyAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTUsIDQwKCUxKSAgIDtcbiIKLQkiICAgICAgIHB4b3IgNDgoJTQpLCAlJW1tNiAgIDtcbiIKLQkiICAgICAgIHB4b3IgNTYoJTQpLCAlJW1tNyAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTYsIDQ4KCUxKSAgIDtcbiIKLQkiICAgICAgIG1vdnEgJSVtbTcsIDU2KCUxKSAgIDtcbiIKLQotCSIgICAgICAgYWRkbCAkNjQsICUxICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkNjQsICUyICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkNjQsICUzICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkNjQsICU0ICAgICAgICAgO1xuIgotCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgO1xuIgotCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgO1xuIgotCTogIityIiAobGluZXMpLAotCSAgIityIiAocDEpLCAiK3IiIChwMiksICIrciIgKHAzKSwgIityIiAocDQpCi0JOgotCTogIm1lbW9yeSIpOwotCi0Ja2VybmVsX2ZwdV9lbmQoKTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9wNV9tbXhfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JICAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQotewotCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA2OwotCi0Ja2VybmVsX2ZwdV9iZWdpbigpOwotCi0JLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAotCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQotCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCi0JICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCi0JICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcwotCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCi0JYXNtKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOwotCi0JYXNtIHZvbGF0aWxlKAotCSIgLmFsaWduIDMyLDB4OTAgICAgICAgICAgICAgO1xuIgotCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgotCSIgICAgICAgbW92cSAgICglMSksICUlbW0wICAgO1xuIgotCSIgICAgICAgbW92cSAgOCglMSksICUlbW0xICAgO1xuIgotCSIgICAgICAgcHhvciAgICglMiksICUlbW0wICAgO1xuIgotCSIgICAgICAgcHhvciAgOCglMiksICUlbW0xICAgO1xuIgotCSIgICAgICAgbW92cSAxNiglMSksICUlbW0yICAgO1xuIgotCSIgICAgICAgcHhvciAgICglMyksICUlbW0wICAgO1xuIgotCSIgICAgICAgcHhvciAgOCglMyksICUlbW0xICAgO1xuIgotCSIgICAgICAgcHhvciAxNiglMiksICUlbW0yICAgO1xuIgotCSIgICAgICAgcHhvciAgICglNCksICUlbW0wICAgO1xuIgotCSIgICAgICAgcHhvciAgOCglNCksICUlbW0xICAgO1xuIgotCSIgICAgICAgcHhvciAxNiglMyksICUlbW0yICAgO1xuIgotCSIgICAgICAgbW92cSAyNCglMSksICUlbW0zICAgO1xuIgotCSIgICAgICAgcHhvciAgICglNSksICUlbW0wICAgO1xuIgotCSIgICAgICAgcHhvciAgOCglNSksICUlbW0xICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tMCwgICAoJTEpICAgO1xuIgotCSIgICAgICAgcHhvciAxNiglNCksICUlbW0yICAgO1xuIgotCSIgICAgICAgcHhvciAyNCglMiksICUlbW0zICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tMSwgIDgoJTEpICAgO1xuIgotCSIgICAgICAgcHhvciAxNiglNSksICUlbW0yICAgO1xuIgotCSIgICAgICAgcHhvciAyNCglMyksICUlbW0zICAgO1xuIgotCSIgICAgICAgbW92cSAzMiglMSksICUlbW00ICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tMiwgMTYoJTEpICAgO1xuIgotCSIgICAgICAgcHhvciAyNCglNCksICUlbW0zICAgO1xuIgotCSIgICAgICAgcHhvciAzMiglMiksICUlbW00ICAgO1xuIgotCSIgICAgICAgbW92cSA0MCglMSksICUlbW01ICAgO1xuIgotCSIgICAgICAgcHhvciAyNCglNSksICUlbW0zICAgO1xuIgotCSIgICAgICAgcHhvciAzMiglMyksICUlbW00ICAgO1xuIgotCSIgICAgICAgcHhvciA0MCglMiksICUlbW01ICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tMywgMjQoJTEpICAgO1xuIgotCSIgICAgICAgcHhvciAzMiglNCksICUlbW00ICAgO1xuIgotCSIgICAgICAgcHhvciA0MCglMyksICUlbW01ICAgO1xuIgotCSIgICAgICAgbW92cSA0OCglMSksICUlbW02ICAgO1xuIgotCSIgICAgICAgbW92cSA1NiglMSksICUlbW03ICAgO1xuIgotCSIgICAgICAgcHhvciAzMiglNSksICUlbW00ICAgO1xuIgotCSIgICAgICAgcHhvciA0MCglNCksICUlbW01ICAgO1xuIgotCSIgICAgICAgcHhvciA0OCglMiksICUlbW02ICAgO1xuIgotCSIgICAgICAgcHhvciA1NiglMiksICUlbW03ICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tNCwgMzIoJTEpICAgO1xuIgotCSIgICAgICAgcHhvciA0OCglMyksICUlbW02ICAgO1xuIgotCSIgICAgICAgcHhvciA1NiglMyksICUlbW03ICAgO1xuIgotCSIgICAgICAgcHhvciA0MCglNSksICUlbW01ICAgO1xuIgotCSIgICAgICAgcHhvciA0OCglNCksICUlbW02ICAgO1xuIgotCSIgICAgICAgcHhvciA1NiglNCksICUlbW03ICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tNSwgNDAoJTEpICAgO1xuIgotCSIgICAgICAgcHhvciA0OCglNSksICUlbW02ICAgO1xuIgotCSIgICAgICAgcHhvciA1NiglNSksICUlbW03ICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tNiwgNDgoJTEpICAgO1xuIgotCSIgICAgICAgbW92cSAlJW1tNywgNTYoJTEpICAgO1xuIgotCi0JIiAgICAgICBhZGRsICQ2NCwgJTEgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQ2NCwgJTIgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQ2NCwgJTMgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQ2NCwgJTQgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQ2NCwgJTUgICAgICAgICA7XG4iCi0JIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICA7XG4iCi0JIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICA7XG4iCi0JOiAiK3IiIChsaW5lcyksCi0JICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCi0JOiAiciIgKHA0KSwgInIiIChwNSkKLQk6ICJtZW1vcnkiKTsKLQotCS8qIHA0IGFuZCBwNSB3ZXJlIG1vZGlmaWVkLCBhbmQgbm93IHRoZSB2YXJpYWJsZXMgYXJlIGRlYWQuCi0JICAgQ2xvYmJlciB0aGVtIGp1c3QgdG8gYmUgc3VyZSBub2JvZHkgZG9lcyBzb21ldGhpbmcgc3R1cGlkCi0JICAgbGlrZSBhc3N1bWluZyB0aGV5IGhhdmUgc29tZSBsZWdhbCB2YWx1ZS4gICovCi0JYXNtKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOwotCi0Ja2VybmVsX2ZwdV9lbmQoKTsKLX0KLQotc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3BJSV9tbXggPSB7Ci0JLm5hbWUgPSAicElJX21teCIsCi0JLmRvXzIgPSB4b3JfcElJX21teF8yLAotCS5kb18zID0geG9yX3BJSV9tbXhfMywKLQkuZG9fNCA9IHhvcl9wSUlfbW14XzQsCi0JLmRvXzUgPSB4b3JfcElJX21teF81LAotfTsKLQotc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3A1X21teCA9IHsKLQkubmFtZSA9ICJwNV9tbXgiLAotCS5kb18yID0geG9yX3A1X21teF8yLAotCS5kb18zID0geG9yX3A1X21teF8zLAotCS5kb180ID0geG9yX3A1X21teF80LAotCS5kb181ID0geG9yX3A1X21teF81LAotfTsKLQotLyoKLSAqIENhY2hlIGF2b2lkaW5nIGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgdXRpbGl6aW5nIEtOSSBpbnN0cnVjdGlvbnMKLSAqIENvcHlyaWdodCAoQykgMTk5OSBaYWNoIEJyb3duICh3aXRoIG9idmlvdXMgY3JlZGl0IGR1ZSBJbmdvKQotICovCi0KLSNkZWZpbmUgWE1NU19TQVZFCQkJCVwKLWRvIHsJCQkJCQlcCi0JcHJlZW1wdF9kaXNhYmxlKCk7CQkJXAotCWNyMCA9IHJlYWRfY3IwKCk7CQkJXAotCWNsdHMoKTsJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCVwKLQkJIm1vdnVwcyAlJXhtbTAsKCUwKQk7XG5cdCIJXAotCQkibW92dXBzICUleG1tMSwweDEwKCUwKQk7XG5cdCIJXAotCQkibW92dXBzICUleG1tMiwweDIwKCUwKQk7XG5cdCIJXAotCQkibW92dXBzICUleG1tMywweDMwKCUwKQk7XG5cdCIJXAotCQk6CQkJCVwKLQkJOiAiciIgKHhtbV9zYXZlKSAJCVwKLQkJOiAibWVtb3J5Iik7CQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBYTU1TX1JFU1RPUkUJCQkJXAotZG8gewkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCVwKLQkJInNmZW5jZQkJCTtcblx0IglcCi0JCSJtb3Z1cHMgKCUwKSwlJXhtbTAJO1xuXHQiCVwKLQkJIm1vdnVwcyAweDEwKCUwKSwlJXhtbTEJO1xuXHQiCVwKLQkJIm1vdnVwcyAweDIwKCUwKSwlJXhtbTIJO1xuXHQiCVwKLQkJIm1vdnVwcyAweDMwKCUwKSwlJXhtbTMJO1xuXHQiCVwKLQkJOgkJCQlcCi0JCTogInIiICh4bW1fc2F2ZSkJCVwKLQkJOiAibWVtb3J5Iik7CQkJXAotCXdyaXRlX2NyMChjcjApOwkJCQlcCi0JcHJlZW1wdF9lbmFibGUoKTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIEFMSUdOMTYgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKQotCi0jZGVmaW5lIE9GRlMoeCkJCSIxNiooIiN4IikiCi0jZGVmaW5lIFBGX09GRlMoeCkJIjI1NisxNiooIiN4IikiCi0jZGVmaW5lCVBGMCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTEpCQk7XG4iCi0jZGVmaW5lIExEKHgsIHkpCSIgICAgICAgbW92YXBzICAgIk9GRlMoeCkiKCUxKSwgJSV4bW0iI3kiCTtcbiIKLSNkZWZpbmUgU1QoeCwgeSkJIiAgICAgICBtb3ZhcHMgJSV4bW0iI3kiLCAgICJPRkZTKHgpIiglMSkJO1xuIgotI2RlZmluZSBQRjEoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCUyKQkJO1xuIgotI2RlZmluZSBQRjIoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCUzKQkJO1xuIgotI2RlZmluZSBQRjMoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU0KQkJO1xuIgotI2RlZmluZSBQRjQoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU1KQkJO1xuIgotI2RlZmluZSBQRjUoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU2KQkJO1xuIgotI2RlZmluZSBYTzEoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglMiksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFhPMih4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCUzKSwgJSV4bW0iI3kiCTtcbiIKLSNkZWZpbmUgWE8zKHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJTQpLCAlJXhtbSIjeSIJO1xuIgotI2RlZmluZSBYTzQoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglNSksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFhPNSh4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCU2KSwgJSV4bW0iI3kiCTtcbiIKLQotCi1zdGF0aWMgdm9pZAoteG9yX3NzZV8yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKLXsKLQl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gODsKLQljaGFyIHhtbV9zYXZlWzE2KjRdIEFMSUdOMTY7Ci0JaW50IGNyMDsKLQotCVhNTVNfU0FWRTsKLQotCWFzbSB2b2xhdGlsZSgKLSN1bmRlZiBCTE9DSwotI2RlZmluZSBCTE9DSyhpKQkJCQkJXAotCQlMRChpLCAwKQkJCQlcCi0JCQlMRChpICsgMSwgMSkJCQlcCi0JCVBGMShpKQkJCQkJXAotCQkJCVBGMShpICsgMikJCVwKLQkJCQlMRChpICsgMiwgMikJCVwKLQkJCQkJTEQoaSArIDMsIDMpCVwKLQkJUEYwKGkgKyA0KQkJCQlcCi0JCQkJUEYwKGkgKyA2KQkJXAotCQlYTzEoaSwgMCkJCQkJXAotCQkJWE8xKGkgKyAxLCAxKQkJCVwKLQkJCQlYTzEoaSArIDIsIDIpCQlcCi0JCQkJCVhPMShpICsgMywgMykJXAotCQlTVChpLCAwKQkJCQlcCi0JCQlTVChpICsgMSwgMSkJCQlcCi0JCQkJU1QoaSArIDIsIDIpCQlcCi0JCQkJCVNUKGkgKyAzLCAzKQlcCi0KLQotCQlQRjAoMCkKLQkJCQlQRjAoMikKLQotCSIgLmFsaWduIDMyCQkJO1xuIgotCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgotCi0JCUJMT0NLKDApCi0JCUJMT0NLKDQpCi0JCUJMT0NLKDgpCi0JCUJMT0NLKDEyKQotCi0JIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCi0JIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgICA7XG4iCi0JIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCi0JOiAiK3IiIChsaW5lcyksCi0JICAiK3IiIChwMSksICIrciIgKHAyKQotCToKLQk6ICJtZW1vcnkiKTsKLQotCVhNTVNfUkVTVE9SRTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9zc2VfMyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JICB1bnNpZ25lZCBsb25nICpwMykKLXsKLQl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gODsKLQljaGFyIHhtbV9zYXZlWzE2KjRdIEFMSUdOMTY7Ci0JaW50IGNyMDsKLQotCVhNTVNfU0FWRTsKLQotCWFzbSB2b2xhdGlsZSgKLSN1bmRlZiBCTE9DSwotI2RlZmluZSBCTE9DSyhpKSBcCi0JCVBGMShpKQkJCQkJXAotCQkJCVBGMShpICsgMikJCVwKLQkJTEQoaSwwKQkJCQkJXAotCQkJTEQoaSArIDEsIDEpCQkJXAotCQkJCUxEKGkgKyAyLCAyKQkJXAotCQkJCQlMRChpICsgMywgMykJXAotCQlQRjIoaSkJCQkJCVwKLQkJCQlQRjIoaSArIDIpCQlcCi0JCVBGMChpICsgNCkJCQkJXAotCQkJCVBGMChpICsgNikJCVwKLQkJWE8xKGksMCkJCQkJXAotCQkJWE8xKGkgKyAxLCAxKQkJCVwKLQkJCQlYTzEoaSArIDIsIDIpCQlcCi0JCQkJCVhPMShpICsgMywgMykJXAotCQlYTzIoaSwwKQkJCQlcCi0JCQlYTzIoaSArIDEsIDEpCQkJXAotCQkJCVhPMihpICsgMiwgMikJCVwKLQkJCQkJWE8yKGkgKyAzLCAzKQlcCi0JCVNUKGksMCkJCQkJCVwKLQkJCVNUKGkgKyAxLCAxKQkJCVwKLQkJCQlTVChpICsgMiwgMikJCVwKLQkJCQkJU1QoaSArIDMsIDMpCVwKLQotCi0JCVBGMCgwKQotCQkJCVBGMCgyKQotCi0JIiAuYWxpZ24gMzIJCQk7XG4iCi0JIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCi0KLQkJQkxPQ0soMCkKLQkJQkxPQ0soNCkKLQkJQkxPQ0soOCkKLQkJQkxPQ0soMTIpCi0KLQkiICAgICAgIGFkZGwgJDI1NiwgJTEgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZGwgJDI1NiwgJTIgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZGwgJDI1NiwgJTMgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKLQkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKLQk6ICIrciIgKGxpbmVzKSwKLQkgICIrciIgKHAxKSwgIityIihwMiksICIrciIocDMpCi0JOgotCTogIm1lbW9yeSIgKTsKLQotCVhNTVNfUkVTVE9SRTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9zc2VfNCh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQpCi17Ci0JdW5zaWduZWQgbG9uZyBsaW5lcyA9IGJ5dGVzID4+IDg7Ci0JY2hhciB4bW1fc2F2ZVsxNio0XSBBTElHTjE2OwotCWludCBjcjA7Ci0KLQlYTU1TX1NBVkU7Ci0KLQlhc20gdm9sYXRpbGUoCi0jdW5kZWYgQkxPQ0sKLSNkZWZpbmUgQkxPQ0soaSkgXAotCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSArIDIpCQlcCi0JCUxEKGksMCkJCQkJCVwKLQkJCUxEKGkgKyAxLCAxKQkJCVwKLQkJCQlMRChpICsgMiwgMikJCVwKLQkJCQkJTEQoaSArIDMsIDMpCVwKLQkJUEYyKGkpCQkJCQlcCi0JCQkJUEYyKGkgKyAyKQkJXAotCQlYTzEoaSwwKQkJCQlcCi0JCQlYTzEoaSArIDEsIDEpCQkJXAotCQkJCVhPMShpICsgMiwgMikJCVwKLQkJCQkJWE8xKGkgKyAzLCAzKQlcCi0JCVBGMyhpKQkJCQkJXAotCQkJCVBGMyhpICsgMikJCVwKLQkJUEYwKGkgKyA0KQkJCQlcCi0JCQkJUEYwKGkgKyA2KQkJXAotCQlYTzIoaSwwKQkJCQlcCi0JCQlYTzIoaSArIDEsIDEpCQkJXAotCQkJCVhPMihpICsgMiwgMikJCVwKLQkJCQkJWE8yKGkgKyAzLCAzKQlcCi0JCVhPMyhpLDApCQkJCVwKLQkJCVhPMyhpICsgMSwgMSkJCQlcCi0JCQkJWE8zKGkgKyAyLCAyKQkJXAotCQkJCQlYTzMoaSArIDMsIDMpCVwKLQkJU1QoaSwwKQkJCQkJXAotCQkJU1QoaSArIDEsIDEpCQkJXAotCQkJCVNUKGkgKyAyLCAyKQkJXAotCQkJCQlTVChpICsgMywgMykJXAotCi0KLQkJUEYwKDApCi0JCQkJUEYwKDIpCi0KLQkiIC5hbGlnbiAzMgkJCTtcbiIKLQkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKLQotCQlCTE9DSygwKQotCQlCTE9DSyg0KQotCQlCTE9DSyg4KQotCQlCTE9DSygxMikKLQotCSIgICAgICAgYWRkbCAkMjU2LCAlMSAgICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkMjU2LCAlMiAgICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkMjU2LCAlMyAgICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkbCAkMjU2LCAlNCAgICAgICAgICAgO1xuIgotCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgICAgO1xuIgotCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgICAgO1xuIgotCTogIityIiAobGluZXMpLAotCSAgIityIiAocDEpLCAiK3IiIChwMiksICIrciIgKHAzKSwgIityIiAocDQpCi0JOgotCTogIm1lbW9yeSIgKTsKLQotCVhNTVNfUkVTVE9SRTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9zc2VfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQotewotCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OwotCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKLQlpbnQgY3IwOwotCi0JWE1NU19TQVZFOwotCi0JLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAotCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQotCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCi0JICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCi0JICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcwotCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCi0JYXNtKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOwotCi0JYXNtIHZvbGF0aWxlKAotI3VuZGVmIEJMT0NLCi0jZGVmaW5lIEJMT0NLKGkpIFwKLQkJUEYxKGkpCQkJCQlcCi0JCQkJUEYxKGkgKyAyKQkJXAotCQlMRChpLDApCQkJCQlcCi0JCQlMRChpICsgMSwgMSkJCQlcCi0JCQkJTEQoaSArIDIsIDIpCQlcCi0JCQkJCUxEKGkgKyAzLCAzKQlcCi0JCVBGMihpKQkJCQkJXAotCQkJCVBGMihpICsgMikJCVwKLQkJWE8xKGksMCkJCQkJXAotCQkJWE8xKGkgKyAxLCAxKQkJCVwKLQkJCQlYTzEoaSArIDIsIDIpCQlcCi0JCQkJCVhPMShpICsgMywgMykJXAotCQlQRjMoaSkJCQkJCVwKLQkJCQlQRjMoaSArIDIpCQlcCi0JCVhPMihpLDApCQkJCVwKLQkJCVhPMihpICsgMSwgMSkJCQlcCi0JCQkJWE8yKGkgKyAyLCAyKQkJXAotCQkJCQlYTzIoaSArIDMsIDMpCVwKLQkJUEY0KGkpCQkJCQlcCi0JCQkJUEY0KGkgKyAyKQkJXAotCQlQRjAoaSArIDQpCQkJCVwKLQkJCQlQRjAoaSArIDYpCQlcCi0JCVhPMyhpLDApCQkJCVwKLQkJCVhPMyhpICsgMSwgMSkJCQlcCi0JCQkJWE8zKGkgKyAyLCAyKQkJXAotCQkJCQlYTzMoaSArIDMsIDMpCVwKLQkJWE80KGksMCkJCQkJXAotCQkJWE80KGkgKyAxLCAxKQkJCVwKLQkJCQlYTzQoaSArIDIsIDIpCQlcCi0JCQkJCVhPNChpICsgMywgMykJXAotCQlTVChpLDApCQkJCQlcCi0JCQlTVChpICsgMSwgMSkJCQlcCi0JCQkJU1QoaSArIDIsIDIpCQlcCi0JCQkJCVNUKGkgKyAzLCAzKQlcCi0KLQotCQlQRjAoMCkKLQkJCQlQRjAoMikKLQotCSIgLmFsaWduIDMyCQkJO1xuIgotCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgotCi0JCUJMT0NLKDApCi0JCUJMT0NLKDQpCi0JCUJMT0NLKDgpCi0JCUJMT0NLKDEyKQotCi0JIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQyNTYsICUzICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQyNTYsICU0ICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRsICQyNTYsICU1ICAgICAgICAgICA7XG4iCi0JIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgICA7XG4iCi0JIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCi0JOiAiK3IiIChsaW5lcyksCi0JICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCi0JOiAiciIgKHA0KSwgInIiIChwNSkKLQk6ICJtZW1vcnkiKTsKLQotCS8qIHA0IGFuZCBwNSB3ZXJlIG1vZGlmaWVkLCBhbmQgbm93IHRoZSB2YXJpYWJsZXMgYXJlIGRlYWQuCi0JICAgQ2xvYmJlciB0aGVtIGp1c3QgdG8gYmUgc3VyZSBub2JvZHkgZG9lcyBzb21ldGhpbmcgc3R1cGlkCi0JICAgbGlrZSBhc3N1bWluZyB0aGV5IGhhdmUgc29tZSBsZWdhbCB2YWx1ZS4gICovCi0JYXNtKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOwotCi0JWE1NU19SRVNUT1JFOwotfQotCi1zdGF0aWMgc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB4b3JfYmxvY2tfcElJSV9zc2UgPSB7Ci0JLm5hbWUgPSAicElJSV9zc2UiLAotCS5kb18yID0geG9yX3NzZV8yLAotCS5kb18zID0geG9yX3NzZV8zLAotCS5kb180ID0geG9yX3NzZV80LAotCS5kb181ID0geG9yX3NzZV81LAotfTsKLQotLyogQWxzbyB0cnkgdGhlIGdlbmVyaWMgcm91dGluZXMuICAqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hvci5oPgotCi0jdW5kZWYgWE9SX1RSWV9URU1QTEFURVMKLSNkZWZpbmUgWE9SX1RSWV9URU1QTEFURVMJCQkJXAotZG8gewkJCQkJCQlcCi0JeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3MpOwkJCVwKLQl4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVnc19wKTsJCQlcCi0JeG9yX3NwZWVkKCZ4b3JfYmxvY2tfMzJyZWdzKTsJCQlcCi0JeG9yX3NwZWVkKCZ4b3JfYmxvY2tfMzJyZWdzX3ApOwkJCVwKLQlpZiAoY3B1X2hhc194bW0pCQkJCVwKLQkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfcElJSV9zc2UpOwkJXAotCWlmIChjcHVfaGFzX21teCkgewkJCQlcCi0JCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX3BJSV9tbXgpOwkJXAotCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19wNV9tbXgpOwkJXAotCX0JCQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBXZSBmb3JjZSB0aGUgdXNlIG9mIHRoZSBTU0UgeG9yIGJsb2NrIGJlY2F1c2UgaXQgY2FuIHdyaXRlIGFyb3VuZCBMMi4KLSAgIFdlIG1heSBhbHNvIGJlIGFibGUgdG8gbG9hZCBpbnRvIHRoZSBMMSBvbmx5IGRlcGVuZGluZyBvbiBob3cgdGhlIGNwdQotICAgZGVhbHMgd2l0aCBhIGxvYWQgdG8gYSBsaW5lIHRoYXQgaXMgYmVpbmcgcHJlZmV0Y2hlZC4gICovCi0jZGVmaW5lIFhPUl9TRUxFQ1RfVEVNUExBVEUoRkFTVEVTVCkJCQlcCi0JKGNwdV9oYXNfeG1tID8gJnhvcl9ibG9ja19wSUlJX3NzZSA6IEZBU1RFU1QpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19YT1JfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3hvcl82NC5oIGIvaW5jbHVkZS9hc20teDg2L3hvcl82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDNhMThkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94b3JfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2MSArMCwwIEBACi0jaWZuZGVmIEFTTV9YODZfX1hPUl82NF9ICi0jZGVmaW5lIEFTTV9YODZfX1hPUl82NF9ICi0KLS8qCi0gKiBPcHRpbWl6ZWQgUkFJRC01IGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgZm9yIE1NWCBhbmQgU1NFLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotCi0vKgotICogQ2FjaGUgYXZvaWRpbmcgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyB1dGlsaXppbmcgS05JIGluc3RydWN0aW9ucwotICogQ29weXJpZ2h0IChDKSAxOTk5IFphY2ggQnJvd24gKHdpdGggb2J2aW91cyBjcmVkaXQgZHVlIEluZ28pCi0gKi8KLQotLyoKLSAqIEJhc2VkIG9uCi0gKiBIaWdoLXNwZWVkIFJBSUQ1IGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgdXRpbGl6aW5nIFNTRSBpbnN0cnVjdGlvbnMuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIuCi0gKi8KLQotLyoKLSAqIHg4Ni02NCBjaGFuZ2VzIC8gZ2NjIGZpeGVzIGZyb20gQW5kaSBLbGVlbi4KLSAqIENvcHlyaWdodCAyMDAyIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KLSAqCi0gKiBUaGlzIGhhc24ndCBiZWVuIG9wdGltaXplZCBmb3IgdGhlIGhhbW1lciB5ZXQsIGJ1dCB0aGVyZSBhcmUgbGlrZWx5Ci0gKiBubyBhZHZhbnRhZ2VzIHRvIGJlIGdvdHRlbiBmcm9tIHg4Ni02NCBoZXJlIGFueXdheXMuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgYSwgYjsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKSB4bW1fc3RvcmVfdDsKLQotLyogRG9lc24ndCB1c2UgZ2NjIHRvIHNhdmUgdGhlIFhNTSByZWdpc3RlcnMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8KLSAgIHRlbGwgaXQgdG8gZG8gYSBjbHRzIGJlZm9yZSB0aGUgcmVnaXN0ZXIgc2F2aW5nLiAqLwotI2RlZmluZSBYTU1TX1NBVkUJCQkJXAotZG8gewkJCQkJCVwKLQlwcmVlbXB0X2Rpc2FibGUoKTsJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQlcCi0JCSJtb3ZxICUlY3IwLCUwCQk7XG5cdCIJXAotCQkiY2x0cwkJCTtcblx0IglcCi0JCSJtb3Z1cHMgJSV4bW0wLCglMSkJO1xuXHQiCVwKLQkJIm1vdnVwcyAlJXhtbTEsMHgxMCglMSkJO1xuXHQiCVwKLQkJIm1vdnVwcyAlJXhtbTIsMHgyMCglMSkJO1xuXHQiCVwKLQkJIm1vdnVwcyAlJXhtbTMsMHgzMCglMSkJO1xuXHQiCVwKLQkJOiAiPSZyIiAoY3IwKQkJCVwKLQkJOiAiciIgKHhtbV9zYXZlKSAJCVwKLQkJOiAibWVtb3J5Iik7CQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBYTU1TX1JFU1RPUkUJCQkJXAotZG8gewkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCVwKLQkJInNmZW5jZQkJCTtcblx0IglcCi0JCSJtb3Z1cHMgKCUxKSwlJXhtbTAJO1xuXHQiCVwKLQkJIm1vdnVwcyAweDEwKCUxKSwlJXhtbTEJO1xuXHQiCVwKLQkJIm1vdnVwcyAweDIwKCUxKSwlJXhtbTIJO1xuXHQiCVwKLQkJIm1vdnVwcyAweDMwKCUxKSwlJXhtbTMJO1xuXHQiCVwKLQkJIm1vdnEgCSUwLCUlY3IwCTtcblx0IglcCi0JCToJCQkJXAotCQk6ICJyIiAoY3IwKSwgInIiICh4bW1fc2F2ZSkJXAotCQk6ICJtZW1vcnkiKTsJCQlcCi0JcHJlZW1wdF9lbmFibGUoKTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIE9GRlMoeCkJCSIxNiooIiN4IikiCi0jZGVmaW5lIFBGX09GRlMoeCkJIjI1NisxNiooIiN4IikiCi0jZGVmaW5lCVBGMCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwMV0pCQk7XG4iCi0jZGVmaW5lIExEKHgsIHkpCSIgICAgICAgbW92YXBzICAgIk9GRlMoeCkiKCVbcDFdKSwgJSV4bW0iI3kiCTtcbiIKLSNkZWZpbmUgU1QoeCwgeSkJIiAgICAgICBtb3ZhcHMgJSV4bW0iI3kiLCAgICJPRkZTKHgpIiglW3AxXSkJO1xuIgotI2RlZmluZSBQRjEoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCVbcDJdKQkJO1xuIgotI2RlZmluZSBQRjIoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCVbcDNdKQkJO1xuIgotI2RlZmluZSBQRjMoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCVbcDRdKQkJO1xuIgotI2RlZmluZSBQRjQoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCVbcDVdKQkJO1xuIgotI2RlZmluZSBQRjUoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCVbcDZdKQkJO1xuIgotI2RlZmluZSBYTzEoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglW3AyXSksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFhPMih4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDNdKSwgJSV4bW0iI3kiCTtcbiIKLSNkZWZpbmUgWE8zKHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwNF0pLCAlJXhtbSIjeSIJO1xuIgotI2RlZmluZSBYTzQoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglW3A1XSksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFhPNSh4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDZdKSwgJSV4bW0iI3kiCTtcbiIKLQotCi1zdGF0aWMgdm9pZAoteG9yX3NzZV8yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKLXsKLQl1bnNpZ25lZCBpbnQgbGluZXMgPSBieXRlcyA+PiA4OwotCXVuc2lnbmVkIGxvbmcgY3IwOwotCXhtbV9zdG9yZV90IHhtbV9zYXZlWzRdOwotCi0JWE1NU19TQVZFOwotCi0JYXNtIHZvbGF0aWxlKAotI3VuZGVmIEJMT0NLCi0jZGVmaW5lIEJMT0NLKGkpIFwKLQkJTEQoaSwgMCkJCQkJXAotCQkJTEQoaSArIDEsIDEpCQkJXAotCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSArIDIpCQlcCi0JCQkJTEQoaSArIDIsIDIpCQlcCi0JCQkJCUxEKGkgKyAzLCAzKQlcCi0JCVBGMChpICsgNCkJCQkJXAotCQkJCVBGMChpICsgNikJCVwKLQkJWE8xKGksIDApCQkJCVwKLQkJCVhPMShpICsgMSwgMSkJCQlcCi0JCQkJWE8xKGkgKyAyLCAyKQkJXAotCQkJCQlYTzEoaSArIDMsIDMpCVwKLQkJU1QoaSwgMCkJCQkJXAotCQkJU1QoaSArIDEsIDEpCQkJXAotCQkJCVNUKGkgKyAyLCAyKQkJXAotCQkJCQlTVChpICsgMywgMykJXAotCi0KLQkJUEYwKDApCi0JCQkJUEYwKDIpCi0KLQkiIC5hbGlnbiAzMgkJCTtcbiIKLQkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKLQotCQlCTE9DSygwKQotCQlCTE9DSyg0KQotCQlCTE9DSyg4KQotCQlCTE9DSygxMikKLQotCSIgICAgICAgYWRkcSAlW2luY10sICVbcDFdICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgIDtcbiIKLQkJIgkJZGVjbCAlW2NudF0gOyBqbnogMWIiCi0JOiBbcDFdICIrciIgKHAxKSwgW3AyXSAiK3IiIChwMiksIFtjbnRdICIrciIgKGxpbmVzKQotCTogW2luY10gInIiICgyNTZVTCkKLQk6ICJtZW1vcnkiKTsKLQotCVhNTVNfUkVTVE9SRTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9zc2VfMyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JICB1bnNpZ25lZCBsb25nICpwMykKLXsKLQl1bnNpZ25lZCBpbnQgbGluZXMgPSBieXRlcyA+PiA4OwotCXhtbV9zdG9yZV90IHhtbV9zYXZlWzRdOwotCXVuc2lnbmVkIGxvbmcgY3IwOwotCi0JWE1NU19TQVZFOwotCi0JYXNtIHZvbGF0aWxlKAotI3VuZGVmIEJMT0NLCi0jZGVmaW5lIEJMT0NLKGkpIFwKLQkJUEYxKGkpCQkJCQlcCi0JCQkJUEYxKGkgKyAyKQkJXAotCQlMRChpLCAwKQkJCQkJXAotCQkJTEQoaSArIDEsIDEpCQkJXAotCQkJCUxEKGkgKyAyLCAyKQkJXAotCQkJCQlMRChpICsgMywgMykJXAotCQlQRjIoaSkJCQkJCVwKLQkJCQlQRjIoaSArIDIpCQlcCi0JCVBGMChpICsgNCkJCQkJXAotCQkJCVBGMChpICsgNikJCVwKLQkJWE8xKGksIDApCQkJCVwKLQkJCVhPMShpICsgMSwgMSkJCQlcCi0JCQkJWE8xKGkgKyAyLCAyKQkJXAotCQkJCQlYTzEoaSArIDMsIDMpCVwKLQkJWE8yKGksIDApCQkJCVwKLQkJCVhPMihpICsgMSwgMSkJCQlcCi0JCQkJWE8yKGkgKyAyLCAyKQkJXAotCQkJCQlYTzIoaSArIDMsIDMpCVwKLQkJU1QoaSwgMCkJCQkJXAotCQkJU1QoaSArIDEsIDEpCQkJXAotCQkJCVNUKGkgKyAyLCAyKQkJXAotCQkJCQlTVChpICsgMywgMykJXAotCi0KLQkJUEYwKDApCi0JCQkJUEYwKDIpCi0KLQkiIC5hbGlnbiAzMgkJCTtcbiIKLQkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKLQotCQlCTE9DSygwKQotCQlCTE9DSyg0KQotCQlCTE9DSyg4KQotCQlCTE9DSygxMikKLQotCSIgICAgICAgYWRkcSAlW2luY10sICVbcDFdICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkcSAlW2luY10sICVbcDNdICAgICAgICAgICA7XG4iCi0JCSIJCWRlY2wgJVtjbnRdIDsgam56IDFiIgotCTogW2NudF0gIityIiAobGluZXMpLAotCSAgW3AxXSAiK3IiIChwMSksIFtwMl0gIityIiAocDIpLCBbcDNdICIrciIgKHAzKQotCTogW2luY10gInIiICgyNTZVTCkKLQk6ICJtZW1vcnkiKTsKLQlYTU1TX1JFU1RPUkU7Ci19Ci0KLXN0YXRpYyB2b2lkCi14b3Jfc3NlXzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAotCSAgdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0KQotewotCXVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzID4+IDg7Ci0JeG1tX3N0b3JlX3QgeG1tX3NhdmVbNF07Ci0JdW5zaWduZWQgbG9uZyBjcjA7Ci0KLQlYTU1TX1NBVkU7Ci0KLQlhc20gdm9sYXRpbGUoCi0jdW5kZWYgQkxPQ0sKLSNkZWZpbmUgQkxPQ0soaSkgXAotCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSArIDIpCQlcCi0JCUxEKGksIDApCQkJCVwKLQkJCUxEKGkgKyAxLCAxKQkJCVwKLQkJCQlMRChpICsgMiwgMikJCVwKLQkJCQkJTEQoaSArIDMsIDMpCVwKLQkJUEYyKGkpCQkJCQlcCi0JCQkJUEYyKGkgKyAyKQkJXAotCQlYTzEoaSwgMCkJCQkJXAotCQkJWE8xKGkgKyAxLCAxKQkJCVwKLQkJCQlYTzEoaSArIDIsIDIpCQlcCi0JCQkJCVhPMShpICsgMywgMykJXAotCQlQRjMoaSkJCQkJCVwKLQkJCQlQRjMoaSArIDIpCQlcCi0JCVBGMChpICsgNCkJCQkJXAotCQkJCVBGMChpICsgNikJCVwKLQkJWE8yKGksIDApCQkJCVwKLQkJCVhPMihpICsgMSwgMSkJCQlcCi0JCQkJWE8yKGkgKyAyLCAyKQkJXAotCQkJCQlYTzIoaSArIDMsIDMpCVwKLQkJWE8zKGksIDApCQkJCVwKLQkJCVhPMyhpICsgMSwgMSkJCQlcCi0JCQkJWE8zKGkgKyAyLCAyKQkJXAotCQkJCQlYTzMoaSArIDMsIDMpCVwKLQkJU1QoaSwgMCkJCQkJXAotCQkJU1QoaSArIDEsIDEpCQkJXAotCQkJCVNUKGkgKyAyLCAyKQkJXAotCQkJCQlTVChpICsgMywgMykJXAotCi0KLQkJUEYwKDApCi0JCQkJUEYwKDIpCi0KLQkiIC5hbGlnbiAzMgkJCTtcbiIKLQkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKLQotCQlCTE9DSygwKQotCQlCTE9DSyg0KQotCQlCTE9DSyg4KQotCQlCTE9DSygxMikKLQotCSIgICAgICAgYWRkcSAlW2luY10sICVbcDFdICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AzXSAgICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkcSAlW2luY10sICVbcDRdICAgICAgICAgICA7XG4iCi0JIglkZWNsICVbY250XSA7IGpueiAxYiIKLQk6IFtjbnRdICIrYyIgKGxpbmVzKSwKLQkgIFtwMV0gIityIiAocDEpLCBbcDJdICIrciIgKHAyKSwgW3AzXSAiK3IiIChwMyksIFtwNF0gIityIiAocDQpCi0JOiBbaW5jXSAiciIgKDI1NlVMKQotCTogIm1lbW9yeSIgKTsKLQotCVhNTVNfUkVTVE9SRTsKLX0KLQotc3RhdGljIHZvaWQKLXhvcl9zc2VfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQotewotCXVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzID4+IDg7Ci0JeG1tX3N0b3JlX3QgeG1tX3NhdmVbNF07Ci0JdW5zaWduZWQgbG9uZyBjcjA7Ci0KLQlYTU1TX1NBVkU7Ci0KLQlhc20gdm9sYXRpbGUoCi0jdW5kZWYgQkxPQ0sKLSNkZWZpbmUgQkxPQ0soaSkgXAotCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSArIDIpCQlcCi0JCUxEKGksIDApCQkJCVwKLQkJCUxEKGkgKyAxLCAxKQkJCVwKLQkJCQlMRChpICsgMiwgMikJCVwKLQkJCQkJTEQoaSArIDMsIDMpCVwKLQkJUEYyKGkpCQkJCQlcCi0JCQkJUEYyKGkgKyAyKQkJXAotCQlYTzEoaSwgMCkJCQkJXAotCQkJWE8xKGkgKyAxLCAxKQkJCVwKLQkJCQlYTzEoaSArIDIsIDIpCQlcCi0JCQkJCVhPMShpICsgMywgMykJXAotCQlQRjMoaSkJCQkJCVwKLQkJCQlQRjMoaSArIDIpCQlcCi0JCVhPMihpLCAwKQkJCQlcCi0JCQlYTzIoaSArIDEsIDEpCQkJXAotCQkJCVhPMihpICsgMiwgMikJCVwKLQkJCQkJWE8yKGkgKyAzLCAzKQlcCi0JCVBGNChpKQkJCQkJXAotCQkJCVBGNChpICsgMikJCVwKLQkJUEYwKGkgKyA0KQkJCQlcCi0JCQkJUEYwKGkgKyA2KQkJXAotCQlYTzMoaSwgMCkJCQkJXAotCQkJWE8zKGkgKyAxLCAxKQkJCVwKLQkJCQlYTzMoaSArIDIsIDIpCQlcCi0JCQkJCVhPMyhpICsgMywgMykJXAotCQlYTzQoaSwgMCkJCQkJXAotCQkJWE80KGkgKyAxLCAxKQkJCVwKLQkJCQlYTzQoaSArIDIsIDIpCQlcCi0JCQkJCVhPNChpICsgMywgMykJXAotCQlTVChpLCAwKQkJCQlcCi0JCQlTVChpICsgMSwgMSkJCQlcCi0JCQkJU1QoaSArIDIsIDIpCQlcCi0JCQkJCVNUKGkgKyAzLCAzKQlcCi0KLQotCQlQRjAoMCkKLQkJCQlQRjAoMikKLQotCSIgLmFsaWduIDMyCQkJO1xuIgotCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgotCi0JCUJMT0NLKDApCi0JCUJMT0NLKDQpCi0JCUJMT0NLKDgpCi0JCUJMT0NLKDEyKQotCi0JIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AyXSAgICAgICAgICAgO1xuIgotCSIgICAgICAgYWRkcSAlW2luY10sICVbcDNdICAgICAgICAgICA7XG4iCi0JIiAgICAgICBhZGRxICVbaW5jXSwgJVtwNF0gICAgICAgICAgIDtcbiIKLQkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3A1XSAgICAgICAgICAgO1xuIgotCSIJZGVjbCAlW2NudF0gOyBqbnogMWIiCi0JOiBbY250XSAiK2MiIChsaW5lcyksCi0JICBbcDFdICIrciIgKHAxKSwgW3AyXSAiK3IiIChwMiksIFtwM10gIityIiAocDMpLCBbcDRdICIrciIgKHA0KSwKLQkgIFtwNV0gIityIiAocDUpCi0JOiBbaW5jXSAiciIgKDI1NlVMKQotCTogIm1lbW9yeSIpOwotCi0JWE1NU19SRVNUT1JFOwotfQotCi1zdGF0aWMgc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB4b3JfYmxvY2tfc3NlID0gewotCS5uYW1lID0gImdlbmVyaWNfc3NlIiwKLQkuZG9fMiA9IHhvcl9zc2VfMiwKLQkuZG9fMyA9IHhvcl9zc2VfMywKLQkuZG9fNCA9IHhvcl9zc2VfNCwKLQkuZG9fNSA9IHhvcl9zc2VfNSwKLX07Ci0KLSN1bmRlZiBYT1JfVFJZX1RFTVBMQVRFUwotI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUwkJCVwKLWRvIHsJCQkJCQlcCi0JeG9yX3NwZWVkKCZ4b3JfYmxvY2tfc3NlKTsJCVwKLX0gd2hpbGUgKDApCi0KLS8qIFdlIGZvcmNlIHRoZSB1c2Ugb2YgdGhlIFNTRSB4b3IgYmxvY2sgYmVjYXVzZSBpdCBjYW4gd3JpdGUgYXJvdW5kIEwyLgotICAgV2UgbWF5IGFsc28gYmUgYWJsZSB0byBsb2FkIGludG8gdGhlIEwxIG9ubHkgZGVwZW5kaW5nIG9uIGhvdyB0aGUgY3B1Ci0gICBkZWFscyB3aXRoIGEgbG9hZCB0byBhIGxpbmUgdGhhdCBpcyBiZWluZyBwcmVmZXRjaGVkLiAgKi8KLSNkZWZpbmUgWE9SX1NFTEVDVF9URU1QTEFURShGQVNURVNUKSAoJnhvcl9ibG9ja19zc2UpCi0KLSNlbmRpZiAvKiBBU01fWDg2X19YT1JfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2lvLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaAppbmRleCA0N2MzNjE2Li4wN2I3Mjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaApAQCAtMTgsMTAgKzE4LDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jZGVmaW5lIFhDSEFMX0tJT19DQUNIRURfVkFERFIJMHhmMDAwMDAwMAotI2RlZmluZSBYQ0hBTF9LSU9fQllQQVNTX1ZBRERSCTB4ZjgwMDAwMDAKKyNkZWZpbmUgWENIQUxfS0lPX0NBQ0hFRF9WQUREUgkweGUwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0tJT19CWVBBU1NfVkFERFIJMHhmMDAwMDAwMAogI2RlZmluZSBYQ0hBTF9LSU9fUEFERFIJCTB4ZjAwMDAwMDAKLSNkZWZpbmUgWENIQUxfS0lPX1NJWkUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgWENIQUxfS0lPX1NJWkUJCTB4MTAwMDAwMDAKKworI2RlZmluZSBJT0FERFIoeCkJCShYQ0hBTF9LSU9fQllQQVNTX1ZBRERSICsgKHgpKQogCiAvKgogICogc3dhcCBmdW5jdGlvbnMgdG8gY2hhbmdlIGJ5dGUgb3JkZXIgZnJvbSBsaXR0bGUtZW5kaWFuIHRvIGJpZy1lbmRpYW4gYW5kCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcndzZW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9yd3NlbS5oCmluZGV4IDBhYWQzYTUuLmUzOWVkZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9yd3NlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9yd3NlbS5oCkBAIC0xMyw2ICsxMywxMCBAQAogI2lmbmRlZiBfWFRFTlNBX1JXU0VNX0gKICNkZWZpbmUgX1hURU5TQV9SV1NFTV9ICiAKKyNpZm5kZWYgX0xJTlVYX1JXU0VNX0gKKyNlcnJvciAiUGxlYXNlIGRvbid0IGluY2x1ZGUgPGFzbS9yd3NlbS5oPiBkaXJlY3RseSwgdXNlIDxsaW51eC9yd3NlbS5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaAppbmRleCA3ZTQxMzFkLi4wZjRmZTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaApAQCAtMTM0LDYgKzEzNCw3IEBACiAjZGVmaW5lIFRJRl9NRU1ESUUJCTUKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTE3CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCkBAIC0xNDIsNiArMTQzLDcgQEAKICNkZWZpbmUgX1RJRl9JUkVUCQkoMTw8VElGX0lSRVQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYJLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWRjMjMyYi9jb3JlLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1kYzIzMmIvY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWJkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1kYzIzMmIvY29yZS5oCkBAIC0wLDAgKzEsNDI0IEBACisvKgorICogWHRlbnNhIHByb2Nlc3NvciBjb3JlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGVuc2lsaWNhIEluYy4KKyAqLworCisjaWZuZGVmIF9YVEVOU0FfQ09SRV9DT05GSUdVUkFUSU9OX0gKKyNkZWZpbmUgX1hURU5TQV9DT1JFX0NPTkZJR1VSQVRJT05fSAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICAgIFBhcmFtZXRlcnMgVXNlZnVsIGZvciBBbnkgQ29kZSwgVVNFUiBvciBQUklWSUxFR0VECisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqICBOb3RlOiAgTWFjcm9zIG9mIHRoZSBmb3JtIFhDSEFMX0hBVkVfKioqIGhhdmUgYSB2YWx1ZSBvZiAxIGlmIHRoZSBvcHRpb24gaXMKKyAqICBjb25maWd1cmVkLCBhbmQgYSB2YWx1ZSBvZiAwIG90aGVyd2lzZS4gIFRoZXNlIG1hY3JvcyBhcmUgYWx3YXlzIGRlZmluZWQuCisgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlJU0EKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9CRQkJCTAJLyogYmlnLWVuZGlhbiBieXRlIG9yZGVyaW5nICovCisjZGVmaW5lIFhDSEFMX0hBVkVfV0lORE9XRUQJCTEJLyogd2luZG93ZWQgcmVnaXN0ZXJzIG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9OVU1fQVJFR1MJCQkzMgkvKiBudW0gb2YgcGh5c2ljYWwgYWRkciByZWdzICovCisjZGVmaW5lIFhDSEFMX05VTV9BUkVHU19MT0cyCQk1CS8qIGxvZzIoWENIQUxfTlVNX0FSRUdTKSAqLworI2RlZmluZSBYQ0hBTF9NQVhfSU5TVFJVQ1RJT05fU0laRQkzCS8qIG1heCBpbnN0ciBieXRlcyAoMy4uOCkgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ERUJVRwkJMQkvKiBkZWJ1ZyBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ERU5TSVRZCQkxCS8qIDE2LWJpdCBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9MT09QUwkJMQkvKiB6ZXJvLW92ZXJoZWFkIGxvb3BzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTlNBCQkJMQkvKiBOU0EvTlNBVSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NSU5NQVgJCTEJLyogTUlOL01BWCBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9TRVhUCQkJMQkvKiBTRVhUIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ0xBTVBTCQkxCS8qIENMQU1QUyBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01VTDE2CQkxCS8qIE1VTDE2Uy9NVUwxNlUgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTVVMMzIJCTEJLyogTVVMTCBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01VTDMyX0hJR0gJCTAJLyogTVVMVUgvTVVMU0ggaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRElWMzIJCTEJLyogUVVPUy9RVU9VL1JFTVMvUkVNVSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9MMzJSCQkJMQkvKiBMMzJSIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQUJTT0xVVEVfTElURVJBTFMJMQkvKiBub24tUEMtcmVsIChleHRlbmRlZCkgTDMyUiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NPTlNUMTYJCTAJLyogQ09OU1QxNiBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0FERFgJCQkxCS8qIEFERFgjL1NVQlgjIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1dJREVfQlJBTkNIRVMJMAkvKiBCKi5XMTggb3IgQiouVzE1IGluc3RyJ3MgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9QUkVESUNURURfQlJBTkNIRVMJMAkvKiBCW0VRL0VRWi9ORS9ORVpdVCBpbnN0cidzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ0FMTDRBTkQxMgkJMQkvKiAob2Jzb2xldGUgb3B0aW9uKSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0FCUwkJCTEJLyogQUJTIGluc3RydWN0aW9uICovCisvKiNkZWZpbmUgWENIQUxfSEFWRV9QT1BDCQkwKi8JLyogUE9QQyBpbnN0cnVjdGlvbiAqLworLyojZGVmaW5lIFhDSEFMX0hBVkVfQ1JDCQkwKi8JLyogQ1JDIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUkVMRUFTRV9TWU5DCQkxCS8qIEwzMkFJL1MzMlJJIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1MzMkMxSQkJMQkvKiBTMzJDMUkgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9TUEVDVUxBVElPTgkJMAkvKiBzcGVjdWxhdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0ZVTExfUkVTRVQJCTEJLyogYWxsIHJlZ3Mvc3RhdGUgcmVzZXQgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0NPTlRFWFRTCQkxCS8qICovCisjZGVmaW5lIFhDSEFMX05VTV9NSVNDX1JFR1MJCTIJLyogbnVtIG9mIHNjcmF0Y2ggcmVncyAoMC4uNCkgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9UQVBfTUFTVEVSCQkwCS8qIEpUQUcgVEFQIGNvbnRyb2wgaW5zdHIncyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1BSSUQJCQkxCS8qIHByb2Nlc3NvciBJRCByZWdpc3RlciAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1RIUkVBRFBUUgkJMQkvKiBUSFJFQURQVFIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9CT09MRUFOUwkJMAkvKiBib29sZWFuIHJlZ2lzdGVycyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NQCQkJMQkvKiBDUEVOQUJMRSByZWcgKGNvcHJvY2Vzc29yKSAqLworI2RlZmluZSBYQ0hBTF9DUF9NQVhDRkcJCQk4CS8qIG1heCBhbGxvd2VkIGNwIGlkIHBsdXMgb25lICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUFDMTYJCTEJLyogTUFDMTYgcGFja2FnZSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RPUkZQVTIwMDUJMAkvKiB2ZWN0b3IgZmxvYXRpbmctcG9pbnQgcGtnICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRlAJCQkwCS8qIGZsb2F0aW5nIHBvaW50IHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RSQTEJCTAJLyogVmVjdHJhIEkgIHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RSQUxYCQkwCS8qIFZlY3RyYSBMWCBwa2cgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ISUZJMgkJMAkvKiBIaUZpMiBBdWRpbyBFbmdpbmUgcGtnICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJTUlTQworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9OVU1fV1JJVEVCVUZGRVJfRU5UUklFUwk4CS8qIHNpemUgb2Ygd3JpdGUgYnVmZmVyICovCisjZGVmaW5lIFhDSEFMX0lOU1RfRkVUQ0hfV0lEVEgJCTQJLyogaW5zdHItZmV0Y2ggd2lkdGggaW4gYnl0ZXMgKi8KKyNkZWZpbmUgWENIQUxfREFUQV9XSURUSAkJNAkvKiBkYXRhIHdpZHRoIGluIGJ5dGVzICovCisvKiAgSW4gVDEwNTAsIGFwcGxpZXMgdG8gc2VsZWN0ZWQgY29yZSBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMgKHNlZSBJU0EpOiAqLworI2RlZmluZSBYQ0hBTF9VTkFMSUdORURfTE9BRF9FWENFUFRJT04JMQkvKiB1bmFsaWduZWQgbG9hZHMgY2F1c2UgZXhjLiAqLworI2RlZmluZSBYQ0hBTF9VTkFMSUdORURfU1RPUkVfRVhDRVBUSU9OCTEJLyogdW5hbGlnbmVkIHN0b3JlcyBjYXVzZSBleGMuKi8KKworI2RlZmluZSBYQ0hBTF9TV19WRVJTSU9OCQk3MDEwMDEJLyogc3cgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciAqLworCisjZGVmaW5lIFhDSEFMX0NPUkVfSUQJCQkiZGMyMzJiIgkvKiBhbHBoYW51bSBjb3JlIG5hbWUKKwkJCQkJCSAgIChDb3JlSUQpIHNldCBpbiB0aGUgWHRlbnNhCisJCQkJCQkgICBQcm9jZXNzb3IgR2VuZXJhdG9yICovCisKKyNkZWZpbmUgWENIQUxfQ09SRV9ERVNDUklQVElPTgkJIkRpYW1vbmQgMjMyTCBTdGFuZGFyZCBDb3JlIFJldi5CIChMRSkiCisjZGVmaW5lIFhDSEFMX0JVSUxEX1VOSVFVRV9JRAkJMHgwMDAwQkVFRgkvKiAyMi1iaXQgc3cgYnVpbGQgSUQgKi8KKworLyoKKyAqICBUaGVzZSBkZWZpbml0aW9ucyBkZXNjcmliZSB0aGUgaGFyZHdhcmUgdGFyZ2V0ZWQgYnkgdGhpcyBzb2Z0d2FyZS4KKyAqLworI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDAJCTB4QzU2MzA3RkUJLyogQ29uZmlnSUQgaGkgMzIgYml0cyovCisjZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEMQkJMHgwRDQwQkVFRgkvKiBDb25maWdJRCBsbyAzMiBiaXRzKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTl9OQU1FCQkiTFgyLjEuMSIJLyogZnVsbCB2ZXJzaW9uIG5hbWUgKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTl9NQUpPUgkJMjIxMAkvKiBtYWpvciB2ZXIjIG9mIHRhcmdldGVkIGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX1ZFUlNJT05fTUlOT1IJCTEJLyogbWlub3IgdmVyIyBvZiB0YXJnZXRlZCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19WRVJTSU9OCQkyMjEwMDEJLyogbWFqb3IqMTAwK21pbm9yICovCisjZGVmaW5lIFhDSEFMX0hXX1JFTF9MWDIJCTEKKyNkZWZpbmUgWENIQUxfSFdfUkVMX0xYMl8xCQkxCisjZGVmaW5lIFhDSEFMX0hXX1JFTF9MWDJfMV8xCQkxCisjZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEX1JFTElBQkxFCTEKKy8qICBJZiBzb2Z0d2FyZSB0YXJnZXRzIGEgKnJhbmdlKiBvZiBoYXJkd2FyZSB2ZXJzaW9ucywgdGhlc2UgYXJlIHRoZSBib3VuZHM6ICovCisjZGVmaW5lIFhDSEFMX0hXX01JTl9WRVJTSU9OX01BSk9SCTIyMTAJLyogbWFqb3IgdiBvZiBlYXJsaWVzdCB0Z3QgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUlOX1ZFUlNJT05fTUlOT1IJMQkvKiBtaW5vciB2IG9mIGVhcmxpZXN0IHRndCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19NSU5fVkVSU0lPTgkJMjIxMDAxCS8qIGVhcmxpZXN0IHRhcmdldGVkIGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01BWF9WRVJTSU9OX01BSk9SCTIyMTAJLyogbWFqb3IgdiBvZiBsYXRlc3QgdGd0IGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01BWF9WRVJTSU9OX01JTk9SCTEJLyogbWlub3IgdiBvZiBsYXRlc3QgdGd0IGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01BWF9WRVJTSU9OCQkyMjEwMDEJLyogbGF0ZXN0IHRhcmdldGVkIGh3ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJQ0FDSEUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSUNBQ0hFX0xJTkVTSVpFCQkzMgkvKiBJLWNhY2hlIGxpbmUgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfTElORVNJWkUJCTMyCS8qIEQtY2FjaGUgbGluZSBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9MSU5FV0lEVEgJCTUJLyogbG9nMihJIGxpbmUgc2l6ZSBpbiBieXRlcykgKi8KKyNkZWZpbmUgWENIQUxfRENBQ0hFX0xJTkVXSURUSAkJNQkvKiBsb2cyKEQgbGluZSBzaXplIGluIGJ5dGVzKSAqLworCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9TSVpFCQkxNjM4NAkvKiBJLWNhY2hlIHNpemUgaW4gYnl0ZXMgb3IgMCAqLworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfU0laRQkJMTYzODQJLyogRC1jYWNoZSBzaXplIGluIGJ5dGVzIG9yIDAgKi8KKworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfSVNfV1JJVEVCQUNLCTEJLyogd3JpdGViYWNrIGZlYXR1cmUgKi8KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBQYXJhbWV0ZXJzIFVzZWZ1bCBmb3IgUFJJVklMRUdFRCAoU3VwZXJ2aXNvcnkgb3IgTm9uLVZpcnR1YWxpemVkKSBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIFhURU5TQV9IQUxfTk9OX1BSSVZJTEVHRURfT05MWQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlDQUNIRQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX1BJRgkJCTEJLyogYW55IG91dGJvdW5kIFBJRiBwcmVzZW50ICovCisKKy8qICBJZiBwcmVzZW50LCBjYWNoZSBzaXplIGluIGJ5dGVzID09ICh3YXlzICogMl4obGluZXdpZHRoICsgc2V0d2lkdGgpKS4gICovCisKKy8qICBOdW1iZXIgb2YgY2FjaGUgc2V0cyBpbiBsb2cyKGxpbmVzIHBlciB3YXkpOiAgKi8KKyNkZWZpbmUgWENIQUxfSUNBQ0hFX1NFVFdJRFRICQk3CisjZGVmaW5lIFhDSEFMX0RDQUNIRV9TRVRXSURUSAkJNworCisvKiAgQ2FjaGUgc2V0IGFzc29jaWF0aXZpdHkgKG51bWJlciBvZiB3YXlzKTogICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9XQVlTCQk0CisjZGVmaW5lIFhDSEFMX0RDQUNIRV9XQVlTCQk0CisKKy8qICBDYWNoZSBmZWF0dXJlczogICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9MSU5FX0xPQ0tBQkxFCTEKKyNkZWZpbmUgWENIQUxfRENBQ0hFX0xJTkVfTE9DS0FCTEUJMQorI2RlZmluZSBYQ0hBTF9JQ0FDSEVfRUNDX1BBUklUWQkJMAorI2RlZmluZSBYQ0hBTF9EQ0FDSEVfRUNDX1BBUklUWQkJMAorCisvKiAgTnVtYmVyIG9mIGVuY29kZWQgY2FjaGUgYXR0ciBiaXRzIChzZWUgPHh0ZW5zYS9oYWwuaD4gZm9yIGRlY29kZWQgYml0cyk6ICAqLworI2RlZmluZSBYQ0hBTF9DQV9CSVRTCQkJNAorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJSU5URVJOQUwgSS9EIFJBTS9ST01zIGFuZCBYTE1JCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX05VTV9JTlNUUk9NCQkwCS8qIG51bWJlciBvZiBjb3JlIGluc3RyLiBST01zICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlNUUkFNCQkwCS8qIG51bWJlciBvZiBjb3JlIGluc3RyLiBSQU1zICovCisjZGVmaW5lIFhDSEFMX05VTV9EQVRBUk9NCQkwCS8qIG51bWJlciBvZiBjb3JlIGRhdGEgUk9NcyAqLworI2RlZmluZSBYQ0hBTF9OVU1fREFUQVJBTQkJMAkvKiBudW1iZXIgb2YgY29yZSBkYXRhIFJBTXMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX1VSQU0JCQkwCS8qIG51bWJlciBvZiBjb3JlIHVuaWZpZWQgUkFNcyovCisjZGVmaW5lIFhDSEFMX05VTV9YTE1JCQkJMAkvKiBudW1iZXIgb2YgY29yZSBYTE1JIHBvcnRzICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQlJTlRFUlJVUFRTIGFuZCBUSU1FUlMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9JTlRFUlJVUFRTCQkxCS8qIGludGVycnVwdCBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ISUdIUFJJX0lOVEVSUlVQVFMJMQkvKiBtZWQvaGlnaC1wcmkuIGludGVycnVwdHMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9OTUkJCQkxCS8qIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DQ09VTlQJCTEJLyogQ0NPVU5UIHJlZy4gKHRpbWVyIG9wdGlvbikgKi8KKyNkZWZpbmUgWENIQUxfTlVNX1RJTUVSUwkJMwkvKiBudW1iZXIgb2YgQ0NPTVBBUkVuIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOVEVSUlVQVFMJCTIyCS8qIG51bWJlciBvZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlRFUlJVUFRTX0xPRzIJNQkvKiBjZWlsKGxvZzIoTlVNX0lOVEVSUlVQVFMpKSAqLworI2RlZmluZSBYQ0hBTF9OVU1fRVhUSU5URVJSVVBUUwkJMTcJLyogbnVtIG9mIGV4dGVybmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOVExFVkVMUwkJNgkvKiBudW1iZXIgb2YgaW50ZXJydXB0IGxldmVscworCQkJCQkJICAgKG5vdCBpbmNsdWRpbmcgbGV2ZWwgemVybykgKi8KKyNkZWZpbmUgWENIQUxfRVhDTV9MRVZFTAkJMwkvKiBsZXZlbCBtYXNrZWQgYnkgUFMuRVhDTSAqLworCS8qIChhbHdheXMgMSBpbiBYRUExOyBsZXZlbHMgMiAuLiBFWENNX0xFVkVMIGFyZSAibWVkaXVtIHByaW9yaXR5IikgKi8KKworLyogIE1hc2tzIG9mIGludGVycnVwdHMgYXQgZWFjaCBpbnRlcnJ1cHQgbGV2ZWw6ICAqLworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDFfTUFTSwkJMHgwMDFGODBGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfTUFTSwkJMHgwMDAwMDEwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfTUFTSwkJMHgwMDIwMEUwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfTUFTSwkJMHgwMDAwMTAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfTUFTSwkJMHgwMDAwMjAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDZfTUFTSwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDdfTUFTSwkJMHgwMDAwNDAwMAorCisvKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBhdCBlYWNoIHJhbmdlIDEuLm4gb2YgaW50ZXJydXB0IGxldmVsczogICovCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMV9BTkRCRUxPV19NQVNLCTB4MDAxRjgwRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX0FOREJFTE9XX01BU0sJMHgwMDFGODFGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfQU5EQkVMT1dfTUFTSwkweDAwM0Y4RkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9BTkRCRUxPV19NQVNLCTB4MDAzRjlGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X0FOREJFTE9XX01BU0sJMHgwMDNGQkZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDZfQU5EQkVMT1dfTUFTSwkweDAwM0ZCRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMN19BTkRCRUxPV19NQVNLCTB4MDAzRkZGRkYKKworLyogIExldmVsIG9mIGVhY2ggaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UMF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDJfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UM19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ0X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDVfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UNl9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ3X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDhfTEVWRUwJCTIKKyNkZWZpbmUgWENIQUxfSU5UOV9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9JTlQxMF9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9JTlQxMV9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9JTlQxMl9MRVZFTAkJNAorI2RlZmluZSBYQ0hBTF9JTlQxM19MRVZFTAkJNQorI2RlZmluZSBYQ0hBTF9JTlQxNF9MRVZFTAkJNworI2RlZmluZSBYQ0hBTF9JTlQxNV9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxNl9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxN19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxOF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxOV9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyMF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyMV9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9ERUJVR0xFVkVMCQk2CS8qIGRlYnVnIGludGVycnVwdCBsZXZlbCAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RFQlVHX0VYVEVSTl9JTlQJMQkvKiBPQ0QgZXh0ZXJuYWwgZGIgaW50ZXJydXB0ICovCisjZGVmaW5lIFhDSEFMX05NSUxFVkVMCQkJNwkvKiBOTUkgImxldmVsIiAoZm9yIHVzZSB3aXRoCisJCQkJCQkgICBFWENTQVZFL0VQUy9FUENfbiwgUkZJIG4pICovCisKKy8qICBUeXBlIG9mIGVhY2ggaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UMF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDJfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UM19UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ0X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDVfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UNl9UWVBFIAlYVEhBTF9JTlRUWVBFX1RJTUVSCisjZGVmaW5lIFhDSEFMX0lOVDdfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQorI2RlZmluZSBYQ0hBTF9JTlQ4X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDlfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTBfVFlQRSAJWFRIQUxfSU5UVFlQRV9USU1FUgorI2RlZmluZSBYQ0hBTF9JTlQxMV9UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCisjZGVmaW5lIFhDSEFMX0lOVDEyX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDEzX1RZUEUgCVhUSEFMX0lOVFRZUEVfVElNRVIKKyNkZWZpbmUgWENIQUxfSU5UMTRfVFlQRSAJWFRIQUxfSU5UVFlQRV9OTUkKKyNkZWZpbmUgWENIQUxfSU5UMTVfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRQorI2RlZmluZSBYQ0hBTF9JTlQxNl9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9FREdFCisjZGVmaW5lIFhDSEFMX0lOVDE3X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0VER0UKKyNkZWZpbmUgWENIQUxfSU5UMThfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRQorI2RlZmluZSBYQ0hBTF9JTlQxOV9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9FREdFCisjZGVmaW5lIFhDSEFMX0lOVDIwX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0VER0UKKyNkZWZpbmUgWENIQUxfSU5UMjFfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRQorCisvKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBmb3IgZWFjaCB0eXBlIG9mIGludGVycnVwdDogICovCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19VTkNPTkZJR1VSRUQJMHhGRkMwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfU09GVFdBUkUJMHgwMDAwMDg4MAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfRVhURVJOX0VER0UJMHgwMDNGODAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfRVhURVJOX0xFVkVMCTB4MDAwMDEzM0YKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX1RJTUVSCTB4MDAwMDI0NDAKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX05NSQkJMHgwMDAwNDAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfV1JJVEVfRVJST1IJMHgwMDAwMDAwMAorCisvKiAgSW50ZXJydXB0IG51bWJlcnMgYXNzaWduZWQgdG8gc3BlY2lmaWMgaW50ZXJydXB0IHNvdXJjZXM6ICAqLworI2RlZmluZSBYQ0hBTF9USU1FUjBfSU5URVJSVVBUCQk2CS8qIENDT01QQVJFMCAqLworI2RlZmluZSBYQ0hBTF9USU1FUjFfSU5URVJSVVBUCQkxMAkvKiBDQ09NUEFSRTEgKi8KKyNkZWZpbmUgWENIQUxfVElNRVIyX0lOVEVSUlVQVAkJMTMJLyogQ0NPTVBBUkUyICovCisjZGVmaW5lIFhDSEFMX1RJTUVSM19JTlRFUlJVUFQJCVhUSEFMX1RJTUVSX1VOQ09ORklHVVJFRAorI2RlZmluZSBYQ0hBTF9OTUlfSU5URVJSVVBUCQkxNAkvKiBub24tbWFza2FibGUgaW50ZXJydXB0ICovCisKKy8qICBJbnRlcnJ1cHQgbnVtYmVycyBmb3IgbGV2ZWxzIGF0IHdoaWNoIG9ubHkgb25lIGludGVycnVwdCBpcyBjb25maWd1cmVkOiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX05VTQkJOAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfTlVNCQkxMgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfTlVNCQkxMworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDdfTlVNCQkxNAorLyogIChUaGVyZSBhcmUgbWFueSBpbnRlcnJ1cHRzIGVhY2ggYXQgbGV2ZWwocykgMSwgMy4pICAqLworCisKKy8qCisgKiAgRXh0ZXJuYWwgaW50ZXJydXB0IHZlY3RvcnMvbGV2ZWxzLgorICogIFRoZXNlIG1hY3JvcyBkZXNjcmliZSBob3cgWHRlbnNhIHByb2Nlc3NvciBpbnRlcnJ1cHQgbnVtYmVycworICogIChhcyBudW1iZXJlZCBpbnRlcm5hbGx5LCBlZy4gaW4gSU5URVJSVVBUIGFuZCBJTlRFTkFCTEUgcmVnaXN0ZXJzKQorICogIG1hcCB0byBleHRlcm5hbCBCSW50ZXJydXB0PG4+IHBpbnMsIGZvciB0aG9zZSBpbnRlcnJ1cHRzCisgKiAgY29uZmlndXJlZCBhcyBleHRlcm5hbCAobGV2ZWwtdHJpZ2dlcmVkLCBlZGdlLXRyaWdnZXJlZCwgb3IgTk1JKS4KKyAqICBTZWUgdGhlIFh0ZW5zYSBwcm9jZXNzb3IgZGF0YWJvb2sgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiAgQ29yZSBpbnRlcnJ1cHQgbnVtYmVycyBtYXBwZWQgdG8gZWFjaCBFWFRFUk5BTCBpbnRlcnJ1cHQgbnVtYmVyOiAgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMF9OVU0JCTAJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDFfTlVNCQkxCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQyX05VTQkJMgkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UM19OVU0JCTMJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDRfTlVNCQk0CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ1X05VTQkJNQkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UNl9OVU0JCTgJLyogKGludGxldmVsIDIpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDdfTlVNCQk5CS8qIChpbnRsZXZlbCAzKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ4X05VTQkJMTIJLyogKGludGxldmVsIDQpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDlfTlVNCQkxNAkvKiAoaW50bGV2ZWwgNykgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTBfTlVNCQkxNQkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTFfTlVNCQkxNgkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTJfTlVNCQkxNwkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTNfTlVNCQkxOAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTRfTlVNCQkxOQkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTVfTlVNCQkyMAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTZfTlVNCQkyMQkvKiAoaW50bGV2ZWwgMykgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCUVYQ0VQVElPTlMgYW5kIFZFQ1RPUlMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfWEVBX1ZFUlNJT04JCTIJLyogWHRlbnNhIEV4Y2VwdGlvbiBBcmNoaXRlY3R1cmUKKwkJCQkJCSAgIG51bWJlcjogMSA9PSBYRUExIChvbGQpCisJCQkJCQkJICAgMiA9PSBYRUEyIChuZXcpCisJCQkJCQkJICAgMCA9PSBYRUFYIChleHRlcm4pICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBMQkJCTAJLyogRXhjZXB0aW9uIEFyY2hpdGVjdHVyZSAxICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBMgkJCTEJLyogRXhjZXB0aW9uIEFyY2hpdGVjdHVyZSAyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBWAkJCTAJLyogRXh0ZXJuYWwgRXhjZXB0aW9uIEFyY2guICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRVhDRVBUSU9OUwkJMQkvKiBleGNlcHRpb24gb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUVNX0VDQ19QQVJJVFkJMAkvKiBsb2NhbCBtZW1vcnkgRUNDL3Bhcml0eSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RPUl9TRUxFQ1QJMQkvKiByZWxvY2F0YWJsZSB2ZWN0b3JzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVkVDQkFTRQkJMQkvKiByZWxvY2F0YWJsZSB2ZWN0b3JzICovCisjZGVmaW5lIFhDSEFMX1ZFQ0JBU0VfUkVTRVRfVkFERFIJMHhEMDAwMDAwMCAgLyogVkVDQkFTRSByZXNldCB2YWx1ZSAqLworI2RlZmluZSBYQ0hBTF9WRUNCQVNFX1JFU0VUX1BBRERSCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfUkVTRVRfVkVDQkFTRV9PVkVSTEFQCTAKKworI2RlZmluZSBYQ0hBTF9SRVNFVF9WRUNUT1IwX1ZBRERSCTB4RkUwMDAwMDAKKyNkZWZpbmUgWENIQUxfUkVTRVRfVkVDVE9SMF9QQUREUgkweEZFMDAwMDAwCisjZGVmaW5lIFhDSEFMX1JFU0VUX1ZFQ1RPUjFfVkFERFIJMHhEODAwMDUwMAorI2RlZmluZSBYQ0hBTF9SRVNFVF9WRUNUT1IxX1BBRERSCTB4MDAwMDA1MDAKKyNkZWZpbmUgWENIQUxfUkVTRVRfVkVDVE9SX1ZBRERSCTB4RkUwMDAwMDAKKyNkZWZpbmUgWENIQUxfUkVTRVRfVkVDVE9SX1BBRERSCTB4RkUwMDAwMDAKKyNkZWZpbmUgWENIQUxfVVNFUl9WRUNPRlMJCTB4MDAwMDAzNDAKKyNkZWZpbmUgWENIQUxfVVNFUl9WRUNUT1JfVkFERFIJCTB4RDAwMDAzNDAKKyNkZWZpbmUgWENIQUxfVVNFUl9WRUNUT1JfUEFERFIJCTB4MDAwMDAzNDAKKyNkZWZpbmUgWENIQUxfS0VSTkVMX1ZFQ09GUwkJMHgwMDAwMDMwMAorI2RlZmluZSBYQ0hBTF9LRVJORUxfVkVDVE9SX1ZBRERSCTB4RDAwMDAzMDAKKyNkZWZpbmUgWENIQUxfS0VSTkVMX1ZFQ1RPUl9QQUREUgkweDAwMDAwMzAwCisjZGVmaW5lIFhDSEFMX0RPVUJMRUVYQ19WRUNPRlMJCTB4MDAwMDAzQzAKKyNkZWZpbmUgWENIQUxfRE9VQkxFRVhDX1ZFQ1RPUl9WQUREUgkweEQwMDAwM0MwCisjZGVmaW5lIFhDSEFMX0RPVUJMRUVYQ19WRUNUT1JfUEFERFIJMHgwMDAwMDNDMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfT0Y0X1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVUY0X1ZFQ09GUwkJMHgwMDAwMDA0MAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfT0Y4X1ZFQ09GUwkJMHgwMDAwMDA4MAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVUY4X1ZFQ09GUwkJMHgwMDAwMDBDMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfT0YxMl9WRUNPRlMJMHgwMDAwMDEwMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVUYxMl9WRUNPRlMJMHgwMDAwMDE0MAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVkVDVE9SU19WQUREUgkweEQwMDAwMDAwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19WRUNUT1JTX1BBRERSCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX1ZFQ09GUwkJMHgwMDAwMDE4MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfVkVDVE9SX1ZBRERSCTB4RDAwMDAxODAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX1ZFQ1RPUl9QQUREUgkweDAwMDAwMTgwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMM19WRUNPRlMJCTB4MDAwMDAxQzAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX1ZFQ1RPUl9WQUREUgkweEQwMDAwMUMwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMM19WRUNUT1JfUEFERFIJMHgwMDAwMDFDMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfVkVDT0ZTCQkweDAwMDAwMjAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9WRUNUT1JfVkFERFIJMHhEMDAwMDIwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfVkVDVE9SX1BBRERSCTB4MDAwMDAyMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X1ZFQ09GUwkJMHgwMDAwMDI0MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfVkVDVE9SX1ZBRERSCTB4RDAwMDAyNDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X1ZFQ1RPUl9QQUREUgkweDAwMDAwMjQwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNl9WRUNPRlMJCTB4MDAwMDAyODAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw2X1ZFQ1RPUl9WQUREUgkweEQwMDAwMjgwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNl9WRUNUT1JfUEFERFIJMHgwMDAwMDI4MAorI2RlZmluZSBYQ0hBTF9ERUJVR19WRUNPRlMJCVhDSEFMX0lOVExFVkVMNl9WRUNPRlMKKyNkZWZpbmUgWENIQUxfREVCVUdfVkVDVE9SX1ZBRERSCVhDSEFMX0lOVExFVkVMNl9WRUNUT1JfVkFERFIKKyNkZWZpbmUgWENIQUxfREVCVUdfVkVDVE9SX1BBRERSCVhDSEFMX0lOVExFVkVMNl9WRUNUT1JfUEFERFIKKyNkZWZpbmUgWENIQUxfTk1JX1ZFQ09GUwkJMHgwMDAwMDJDMAorI2RlZmluZSBYQ0hBTF9OTUlfVkVDVE9SX1ZBRERSCQkweEQwMDAwMkMwCisjZGVmaW5lIFhDSEFMX05NSV9WRUNUT1JfUEFERFIJCTB4MDAwMDAyQzAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw3X1ZFQ09GUwkJWENIQUxfTk1JX1ZFQ09GUworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDdfVkVDVE9SX1ZBRERSCVhDSEFMX05NSV9WRUNUT1JfVkFERFIKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw3X1ZFQ1RPUl9QQUREUglYQ0hBTF9OTUlfVkVDVE9SX1BBRERSCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJREVCVUcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9PQ0QJCQkxCS8qIE9uQ2hpcERlYnVnIG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9OVU1fSUJSRUFLCQkyCS8qIG51bWJlciBvZiBJQlJFQUtuIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0RCUkVBSwkJMgkvKiBudW1iZXIgb2YgREJSRUFLbiByZWdzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfT0NEX0RJUl9BUlJBWQkxCS8qIGZhc3RlciBPQ0Qgb3B0aW9uICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJTU1VCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiAgU2VlIGNvcmUtbWF0bWFwLmggaGVhZGVyIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4gICovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9UTEJTCQkJMQkvKiBpbnZlcnNlIG9mIEhBVkVfQ0FDSEVBVFRSICovCisjZGVmaW5lIFhDSEFMX0hBVkVfU1BBTk5JTkdfV0FZCQkwCS8qIG9uZSB3YXkgbWFwcyBJK0QgNEdCIHZhZGRyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfSURFTlRJVFlfTUFQCQkwCS8qIHZhZGRyID09IHBhZGRyIGFsd2F5cyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NBQ0hFQVRUUgkJMAkvKiBDQUNIRUFUVFIgcmVnaXN0ZXIgcHJlc2VudCAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01JTUlDX0NBQ0hFQVRUUgkwCS8qIHJlZ2lvbiBwcm90ZWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgkwCS8qIHJlZ2lvbiBwcm90LiB3L3RyYW5zbGF0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUFRQX01NVQkJMQkvKiBmdWxsIE1NVSAod2l0aCBwYWdlIHRhYmxlCisJCQkJCQkgICBbYXV0b3JlZmlsbF0gYW5kIHByb3RlY3Rpb24pCisJCQkJCQkgICB1c2FibGUgZm9yIGFuIE1NVS1iYXNlZCBPUyAqLworLyogIElmIG5vbmUgb2YgdGhlIGFib3ZlIGxhc3QgNCBhcmUgc2V0LCBpdCdzIGEgY3VzdG9tIFRMQiBjb25maWd1cmF0aW9uLiAgKi8KKyNkZWZpbmUgWENIQUxfSVRMQl9BUkZfRU5UUklFU19MT0cyCTIJLyogbG9nMihhdXRvcmVmaWxsIHdheSBzaXplKSAqLworI2RlZmluZSBYQ0hBTF9EVExCX0FSRl9FTlRSSUVTX0xPRzIJMgkvKiBsb2cyKGF1dG9yZWZpbGwgd2F5IHNpemUpICovCisKKyNkZWZpbmUgWENIQUxfTU1VX0FTSURfQklUUwkJOAkvKiBudW1iZXIgb2YgYml0cyBpbiBBU0lEcyAqLworI2RlZmluZSBYQ0hBTF9NTVVfUklOR1MJCQk0CS8qIG51bWJlciBvZiByaW5ncyAoMS4uNCkgKi8KKyNkZWZpbmUgWENIQUxfTU1VX1JJTkdfQklUUwkJMgkvKiBudW0gb2YgYml0cyBpbiBSSU5HIGZpZWxkICovCisKKyNlbmRpZiAvKiAhWFRFTlNBX0hBTF9OT05fUFJJVklMRUdFRF9PTkxZICovCisKKworI2VuZGlmIC8qIF9YVEVOU0FfQ09SRV9DT05GSUdVUkFUSU9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3ZhcmlhbnQtZGMyMzJiL3RpZS1hc20uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWRjMjMyYi90aWUtYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0ZjUzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWRjMjMyYi90aWUtYXNtLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGFzc2VtYmx5LWxhbmd1YWdlIGRlZmluaXRpb25zIChhc3NlbWJseQorICogbWFjcm9zLCBldGMuKSBmb3IgdGhpcyBzcGVjaWZpYyBYdGVuc2EgcHJvY2Vzc29yJ3MgVElFIGV4dGVuc2lvbnMKKyAqIGFuZCBvcHRpb25zLiAgSXQgaXMgY3VzdG9taXplZCB0byB0aGlzIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyBUZW5zaWxpY2EgSW5jLgorICovCisKKyNpZm5kZWYgX1hURU5TQV9DT1JFX1RJRV9BU01fSAorI2RlZmluZSBfWFRFTlNBX0NPUkVfVElFX0FTTV9ICisKKy8qICBTZWxlY3Rpb24gcGFyYW1ldGVyIHZhbHVlcyBmb3Igc2F2ZS1hcmVhIHNhdmUvcmVzdG9yZSBtYWNyb3M6ICAqLworLyogIE9wdGlvbiB2cy4gVElFOiAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX1RJRQkweDAwMDEJLyogY3VzdG9tIGV4dGVuc2lvbiBvciBjb3Byb2Nlc3NvciAqLworI2RlZmluZSBYVEhBTF9TQVNfT1BUCTB4MDAwMgkvKiBvcHRpb25hbCAoYW5kIG5vdCBhIGNvcHJvY2Vzc29yKSAqLworLyogIFdoZXRoZXIgdXNlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbXBpbGVyOiAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX05PQ0MJMHgwMDA0CS8qIG5vdCB1c2VkIGJ5IGNvbXBpbGVyIHcvbyBzcGVjaWFsIG9wdHMvY29kZSAqLworI2RlZmluZSBYVEhBTF9TQVNfQ0MJMHgwMDA4CS8qIHVzZWQgYnkgY29tcGlsZXIgd2l0aG91dCBzcGVjaWFsIG9wdHMvY29kZSAqLworLyogIEFCSSBoYW5kbGluZyBhY3Jvc3MgZnVuY3Rpb24gY2FsbHM6ICAqLworI2RlZmluZSBYVEhBTF9TQVNfQ0FMUgkweDAwMTAJLyogY2FsbGVyLXNhdmVkICovCisjZGVmaW5lIFhUSEFMX1NBU19DQUxFCTB4MDAyMAkvKiBjYWxsZWUtc2F2ZWQgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX0dMT0IJMHgwMDQwCS8qIGdsb2JhbCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgKGluIHRocmVhZCkgKi8KKy8qICBNaXNjICAqLworI2RlZmluZSBYVEhBTF9TQVNfQUxMCTB4RkZGRgkvKiBpbmNsdWRlIGFsbCBkZWZhdWx0IE5DUCBjb250ZW50cyAqLworCisKKworLyogTWFjcm8gdG8gc2F2ZSBhbGwgbm9uLWNvcHJvY2Vzc29yIChleHRyYSkgY3VzdG9tIFRJRSBhbmQgb3B0aW9uYWwgc3RhdGUKKyAqIChub3QgaW5jbHVkaW5nIHplcm8tb3ZlcmhlYWQgbG9vcCByZWdpc3RlcnMpLgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDEgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9OQ1BfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworCS5tYWNybyB4Y2hhbF9uY3Bfc3RvcmUgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQJXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19PUFQgfCBYVEhBTF9TQVNfQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDEwMjQtOCwgNCwgNAorCXJzcglcYXQxLCBBQ0NMTwkJLy8gTUFDMTYgYWNjdW11bGF0b3IKKwlyc3IJXGF0MiwgQUNDSEkKKwlzMzJpCVxhdDEsIFxwdHIsIC5MeGNoYWxfb2ZzXyArIDAKKwlzMzJpCVxhdDIsIFxwdHIsIC5MeGNoYWxfb2ZzXyArIDQKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgOAorCS5lbmRpZgorCS5pZmVxIChYVEhBTF9TQVNfT1BUIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDEwMjQtMTYsIDQsIDQKKwlyc3IJXGF0MSwgTTAJCS8vIE1BQzE2IHJlZ2lzdGVycworCXJzcglcYXQyLCBNMQorCXMzMmkJXGF0MSwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgMAorCXMzMmkJXGF0MiwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgNAorCXJzcglcYXQxLCBNMgorCXJzcglcYXQyLCBNMworCXMzMmkJXGF0MSwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgOAorCXMzMmkJXGF0MiwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgMTIKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgMTYKKwkuZW5kaWYKKwkuaWZlcSAoWFRIQUxfU0FTX09QVCB8IFhUSEFMX1NBU19OT0NDIHwgWFRIQUxfU0FTX0NBTFIpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAxMDI0LTQsIDQsIDQKKwlyc3IJXGF0MSwgU0NPTVBBUkUxCQkvLyBjb25kaXRpb25hbCBzdG9yZSBvcHRpb24KKwlzMzJpCVxhdDEsIFxwdHIsIC5MeGNoYWxfb2ZzXyArIDAKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNAorCS5lbmRpZgorCS5pZmVxIChYVEhBTF9TQVNfT1BUIHwgWFRIQUxfU0FTX0NDIHwgWFRIQUxfU0FTX0dMT0IpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAxMDI0LTQsIDQsIDQKKwlydXIJXGF0MSwgVEhSRUFEUFRSCQkvLyB0aHJlYWRwdHIgb3B0aW9uCisJczMyaQlcYXQxLCBccHRyLCAuTHhjaGFsX29mc18gKyAwCisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDQKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9uY3Bfc3RvcmUKKworLyogTWFjcm8gdG8gc2F2ZSBhbGwgbm9uLWNvcHJvY2Vzc29yIChleHRyYSkgY3VzdG9tIFRJRSBhbmQgb3B0aW9uYWwgc3RhdGUKKyAqIChub3QgaW5jbHVkaW5nIHplcm8tb3ZlcmhlYWQgbG9vcCByZWdpc3RlcnMpLgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDEgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9OQ1BfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworCS5tYWNybyB4Y2hhbF9uY3BfbG9hZCAgcHRyIGF0MSBhdDIgYXQzIGF0NCAgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PVhUSEFMX1NBU19BTEwKKwl4Y2hhbF9zYV9zdGFydAlcY29udGludWUsIFxvZnMKKwkuaWZlcSAoWFRIQUxfU0FTX09QVCB8IFhUSEFMX1NBU19DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMTAyNC04LCA0LCA0CisJbDMyaQlcYXQxLCBccHRyLCAuTHhjaGFsX29mc18gKyAwCisJbDMyaQlcYXQyLCBccHRyLCAuTHhjaGFsX29mc18gKyA0CisJd3NyCVxhdDEsIEFDQ0xPCQkvLyBNQUMxNiBhY2N1bXVsYXRvcgorCXdzcglcYXQyLCBBQ0NISQorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA4CisJLmVuZGlmCisJLmlmZXEgKFhUSEFMX1NBU19PUFQgfCBYVEhBTF9TQVNfTk9DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMTAyNC0xNiwgNCwgNAorCWwzMmkJXGF0MSwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgMAorCWwzMmkJXGF0MiwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgNAorCXdzcglcYXQxLCBNMAkJLy8gTUFDMTYgcmVnaXN0ZXJzCisJd3NyCVxhdDIsIE0xCisJbDMyaQlcYXQxLCBccHRyLCAuTHhjaGFsX29mc18gKyA4CisJbDMyaQlcYXQyLCBccHRyLCAuTHhjaGFsX29mc18gKyAxMgorCXdzcglcYXQxLCBNMgorCXdzcglcYXQyLCBNMworCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyAxNgorCS5lbmRpZgorCS5pZmVxIChYVEhBTF9TQVNfT1BUIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDEwMjQtNCwgNCwgNAorCWwzMmkJXGF0MSwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgMAorCXdzcglcYXQxLCBTQ09NUEFSRTEJCS8vIGNvbmRpdGlvbmFsIHN0b3JlIG9wdGlvbgorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA0CisJLmVuZGlmCisJLmlmZXEgKFhUSEFMX1NBU19PUFQgfCBYVEhBTF9TQVNfQ0MgfCBYVEhBTF9TQVNfR0xPQikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDEwMjQtNCwgNCwgNAorCWwzMmkJXGF0MSwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgMAorCXd1cglcYXQxLCBUSFJFQURQVFIJCS8vIHRocmVhZHB0ciBvcHRpb24KKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNAorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX25jcF9sb2FkCisKKworCisjZGVmaW5lIFhDSEFMX05DUF9OVU1fQVRNUFMJMgorCisKKyNkZWZpbmUgWENIQUxfU0FfTlVNX0FUTVBTCTIKKworI2VuZGlmIC8qX1hURU5TQV9DT1JFX1RJRV9BU01fSCovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWRjMjMyYi90aWUuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWRjMjMyYi90aWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMThlODFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3ZhcmlhbnQtZGMyMzJiL3RpZS5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBkZXNjcmliZXMgdGhpcyBzcGVjaWZpYyBYdGVuc2EgcHJvY2Vzc29yJ3MgVElFIGV4dGVuc2lvbnMKKyAqIHRoYXQgZXh0ZW5kIGJhc2ljIFh0ZW5zYSBjb3JlIGZ1bmN0aW9uYWxpdHkuICBJdCBpcyBjdXN0b21pemVkIHRvIHRoaXMKKyAqIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyBUZW5zaWxpY2EgSW5jLgorICovCisKKyNpZm5kZWYgX1hURU5TQV9DT1JFX1RJRV9ICisjZGVmaW5lIF9YVEVOU0FfQ09SRV9USUVfSAorCisjZGVmaW5lIFhDSEFMX0NQX05VTQkJCTEJLyogbnVtYmVyIG9mIGNvcHJvY2Vzc29ycyAqLworI2RlZmluZSBYQ0hBTF9DUF9NQVgJCQk4CS8qIG1heCBDUCBJRCArIDEgKDAgaWYgbm9uZSkgKi8KKyNkZWZpbmUgWENIQUxfQ1BfTUFTSwkJCTB4ODAJLyogYml0bWFzayBvZiBhbGwgQ1BzIGJ5IElEICovCisjZGVmaW5lIFhDSEFMX0NQX1BPUlRfTUFTSwkJMHg4MAkvKiBiaXRtYXNrIG9mIG9ubHkgcG9ydCBDUHMgKi8KKworLyogIEJhc2ljIHBhcmFtZXRlcnMgb2YgZWFjaCBjb3Byb2Nlc3NvcjogICovCisjZGVmaW5lIFhDSEFMX0NQN19OQU1FCQkJIlhUSU9QIgorI2RlZmluZSBYQ0hBTF9DUDdfSURFTlQJCQlYVElPUAorI2RlZmluZSBYQ0hBTF9DUDdfU0FfU0laRQkJMAkvKiBzaXplIG9mIHN0YXRlIHNhdmUgYXJlYSAqLworI2RlZmluZSBYQ0hBTF9DUDdfU0FfQUxJR04JCTEJLyogbWluIGFsaWdubWVudCBvZiBzYXZlIGFyZWEgKi8KKyNkZWZpbmUgWENIQUxfQ1BfSURfWFRJT1AJCTcJLyogY29wcm9jZXNzb3IgSUQgKDAuLjcpICovCisKKy8qICBGaWxsZXIgaW5mbyBmb3IgdW5hc3NpZ25lZCBjb3Byb2Nlc3NvcnMsIHRvIHNpbXBsaWZ5IGFycmF5cyBldGM6ICAqLworI2RlZmluZSBYQ0hBTF9DUDBfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDBfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1AxX1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1AxX1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQMl9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQMl9TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDNfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDNfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1A0X1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1A0X1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQNV9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQNV9TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDZfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDZfU0FfQUxJR04JCTEKKworLyogIFNhdmUgYXJlYSBmb3Igbm9uLWNvcHJvY2Vzc29yIG9wdGlvbmFsIGFuZCBjdXN0b20gKFRJRSkgc3RhdGU6ICAqLworI2RlZmluZSBYQ0hBTF9OQ1BfU0FfU0laRQkJMzIKKyNkZWZpbmUgWENIQUxfTkNQX1NBX0FMSUdOCQk0CisKKy8qICBUb3RhbCBzYXZlIGFyZWEgZm9yIG9wdGlvbmFsIGFuZCBjdXN0b20gc3RhdGUgKE5DUCArIENQbik6ICAqLworI2RlZmluZSBYQ0hBTF9UT1RBTF9TQV9TSVpFCQkzMgkvKiB3aXRoIDE2LWJ5dGUgYWxpZ24gcGFkZGluZyAqLworI2RlZmluZSBYQ0hBTF9UT1RBTF9TQV9BTElHTgkJNAkvKiBhY3R1YWwgbWluaW11bSBhbGlnbm1lbnQgKi8KKworLyoKKyAqIERldGFpbGVkIGNvbnRlbnRzIG9mIHNhdmUgYXJlYXMuCisgKiBOT1RFOiAgY2FsbGVyIG11c3QgZGVmaW5lIHRoZSBYQ0hBTF9TQV9SRUcgbWFjcm8gKG5vdCBkZWZpbmVkIGhlcmUpCisgKiBiZWZvcmUgZXhwYW5kaW5nIHRoZSBYQ0hBTF94eHhfU0FfTElTVCgpIG1hY3Jvcy4KKyAqCisgKiBYQ0hBTF9TQV9SRUcocyxjY3VzZWQsYWJpa2luZCxraW5kLG9wdCxuYW1lLGdhbGlnbixhbGlnbixhc2l6ZSwKKyAqCQlkYm51bSxiYXNlLHJlZ251bSxiaXRzeixnYXBzeixyZXNldCx4Li4uKQorICoKKyAqCXMgPSBwYXNzZWQgZnJvbSBYQ0hBTF8qX0xJU1QocyksIGVnLiB0byBzZWxlY3QgaG93IHRvIGV4cGFuZAorICoJY2N1c2VkID0gc2V0IGlmIHVzZWQgYnkgY29tcGlsZXIgd2l0aG91dCBzcGVjaWFsIG9wdGlvbnMgb3IgY29kZQorICoJYWJpa2luZCA9IDAgKGNhbGxlci1zYXZlZCksIDEgKGNhbGxlZS1zYXZlZCksIG9yIDIgKHRocmVhZC1nbG9iYWwpCisgKglraW5kID0gMCAoc3BlY2lhbCByZWcpLCAxIChUSUUgdXNlciByZWcpLCBvciAyIChUSUUgcmVnZmlsZSByZWcpCisgKglvcHQgPSAwIChjdXN0b20gVElFIGV4dGVuc2lvbiBvciBjb3Byb2Nlc3NvciksIG9yIDEgKG9wdGlvbmFsIHJlZykKKyAqCW5hbWUgPSBsb3dlcmNhc2UgcmVnIG5hbWUgKG5vIHF1b3RlcykKKyAqCWdhbGlnbiA9IGdyb3VwIGJ5dGUgYWxpZ25tZW50IChwb3dlciBvZiAyKSAoZ2FsaWduID49IGFsaWduKQorICoJYWxpZ24gPSByZWdpc3RlciBieXRlIGFsaWdubWVudCAocG93ZXIgb2YgMikKKyAqCWFzaXplID0gYWxsb2NhdGVkIHNpemUgaW4gYnl0ZXMgKGFzaXplKjggPT0gYml0c3ogKyBnYXBzeiArIHBhZHN6KQorICoJICAobm90IGluY2x1ZGluZyBhbnkgcGFkIGJ5dGVzIHJlcXVpcmVkIHRvIGdhbGlnbiB0aGlzIG9yIG5leHQgcmVnKQorICoJZGJudW0gPSB1bmlxdWUgdGFyZ2V0IG51bWJlciBmL2RlYnVnIChzZWUgPHh0ZW5zYS1saWJkYi1tYWNyb3MuaD4pCisgKgliYXNlID0gcmVnIHNob3J0bmFtZSB3L28gaW5kZXggKG9yIHNyPXNwZWNpYWwsIHVyPVRJRSB1c2VyIHJlZykKKyAqCXJlZ251bSA9IHJlZyBpbmRleCBpbiByZWdmaWxlLCBvciBzcGVjaWFsL1RJRS11c2VyIHJlZyBudW1iZXIKKyAqCWJpdHN6ID0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGJpdHMgKHJlZ2ZpbGUgd2lkdGgsIG9yIHVyL3NyIG1hc2sgYml0cykKKyAqCWdhcHN6ID0gaW50ZXJ2ZW5pbmcgYml0cywgaWYgYml0c3ogYml0cyBub3Qgc3RvcmVkIGNvbnRpZ3VvdXNseQorICoJKHBhZHN6ID0gcGFkIGJpdHMgYXQgZW5kIFtUSUUgcmVnZmlsZV0gb3IgYXQgbXNiaXRzIFt1cixzcl0gb2YgYXNpemUpCisgKglyZXNldCA9IHJlZ2lzdGVyIHJlc2V0IHZhbHVlIChvciAwIGlmIHVuZGVmaW5lZCBhdCByZXNldCkKKyAqCXggPSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAoMCB1bnRpbCB0aGVuKQorICoKKyAqICBUbyBmaWx0ZXIgb3V0IGNlcnRhaW4gcmVnaXN0ZXJzLCBlLmcuIHRvIGV4cGFuZCBvbmx5IHRoZSBub24tZ2xvYmFsCisgKiAgcmVnaXN0ZXJzIHVzZWQgYnkgdGhlIGNvbXBpbGVyLCB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgKgorICogICNkZWZpbmUgWENIQUxfU0FfUkVHKHMsY2N1c2VkLHAuLi4pCVNFTENDIyNjY3VzZWQocCkKKyAqICAjZGVmaW5lIFNFTENDMChwLi4uKQorICogICNkZWZpbmUgU0VMQ0MxKGFiaWtpbmQscC4uLikJU0VMQUsjI2FiaWtpbmQocCkKKyAqICAjZGVmaW5lIFNFTEFLMChwLi4uKQkJUkVHKHApCisgKiAgI2RlZmluZSBTRUxBSzEocC4uLikJCVJFRyhwKQorICogICNkZWZpbmUgU0VMQUsyKHAuLi4pCisgKiAgI2RlZmluZSBSRUcoa2luZCx0aWUsbmFtZSxnYWxuLGFsbixhc3osY3N6LGRibnVtLGJhc2Uscm51bSxic3oscnN0LHguLi4pIFwKKyAqCQkuLi53aGF0IHlvdSB3YW50IHRvIGV4cGFuZC4uLgorICovCisKKyNkZWZpbmUgWENIQUxfTkNQX1NBX05VTQk4CisjZGVmaW5lIFhDSEFMX05DUF9TQV9MSVNUKHMpCVwKKyBYQ0hBTF9TQV9SRUcocywxLDAsMCwxLCAgICAgICAgICBhY2NsbywgNCwgNCwgNCwweDAyMTAsICBzciwxNiAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMSwwLDAsMSwgICAgICAgICAgYWNjaGksIDQsIDQsIDQsMHgwMjExLCAgc3IsMTcgLCAgOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwwLDEsICAgICAgICAgICAgIG0wLCA0LCA0LCA0LDB4MDIyMCwgIHNyLDMyICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMCwxLCAgICAgICAgICAgICBtMSwgNCwgNCwgNCwweDAyMjEsICBzciwzMyAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDAsMSwgICAgICAgICAgICAgbTIsIDQsIDQsIDQsMHgwMjIyLCAgc3IsMzQgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwwLDEsICAgICAgICAgICAgIG0zLCA0LCA0LCA0LDB4MDIyMywgIHNyLDM1ICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMCwxLCAgICAgIHNjb21wYXJlMSwgNCwgNCwgNCwweDAyMEMsICBzciwxMiAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMSwyLDEsMSwgICAgICB0aHJlYWRwdHIsIDQsIDQsIDQsMHgwM0U3LCAgdXIsMjMxLCAzMiwwLDAsMCkKKworI2RlZmluZSBYQ0hBTF9DUDBfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AwX1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDFfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AxX1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDJfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDNfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AzX1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDRfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A0X1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDVfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDZfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A2X1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDdfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A3X1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworLyogQnl0ZSBsZW5ndGggb2YgaW5zdHJ1Y3Rpb24gZnJvbSBpdHMgZmlyc3QgbmliYmxlIChvcDAgZmllbGQpLCBwZXIgRkxJWC4gICovCisjZGVmaW5lIFhDSEFMX09QMF9GT1JNQVRfTEVOR1RIUwkzLDMsMywzLDMsMywzLDMsMiwyLDIsMiwyLDIsMywzCisKKyNlbmRpZiAvKl9YVEVOU0FfQ09SRV9USUVfSCovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybS5oIGIvaW5jbHVkZS9kcm0vZHJtLmgKaW5kZXggMzhkM2M2Yi4uZjQ2YmE0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgX0RSTV9IXwogI2RlZmluZSBfRFJNX0hfCiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjZW5kaWYKICNpbmNsdWRlIDxhc20vaW9jdGwuaD4JCS8qIEZvciBfSU8qIG1hY3JvcyAqLwpAQCAtNDYsMjIgKzQ1LDYgQEAKICNkZWZpbmUgRFJNX0lPQ19XUklURQkJX0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DX1JFQURXUklURQlfSU9DX1JFQUR8X0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoSU5fTU9EVUxFKQotLyogUHJldmVudCBuYW1lIGNvbGxpc2lvbiB3aGVuIGluY2x1ZGluZyBzeXMvaW9jY29tLmggKi8KLSN1bmRlZiBpb2N0bAotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNkZWZpbmUgaW9jdGwoYSxiLGMpCQl4Zjg2aW9jdGwoYSxiLGMpCi0jZWxzZQotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNlbmRpZgkJCQkvKiBfX0ZyZWVCU0RfXyAmJiB4Zjg2aW9jdGwgKi8KLSNkZWZpbmUgRFJNX0lPQ1RMX05SKG4pCQkoKG4pICYgMHhmZikKLSNkZWZpbmUgRFJNX0lPQ19WT0lECQlJT0NfVk9JRAotI2RlZmluZSBEUk1fSU9DX1JFQUQJCUlPQ19PVVQKLSNkZWZpbmUgRFJNX0lPQ19XUklURQkJSU9DX0lOCi0jZGVmaW5lIERSTV9JT0NfUkVBRFdSSVRFCUlPQ19JTk9VVAotI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VuZGlmCiAKICNkZWZpbmUgRFJNX01BSk9SICAgICAgIDIyNgogI2RlZmluZSBEUk1fTUFYX01JTk9SICAgMTUKQEAgLTQ3MSw2ICs0NTQsNyBAQAogZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHsKIAlfRFJNX1ZCTEFOS19BQlNPTFVURSA9IDB4MCwJLyoqPCBXYWl0IGZvciBzcGVjaWZpYyB2Ymxhbmsgc2VxdWVuY2UgbnVtYmVyICovCiAJX0RSTV9WQkxBTktfUkVMQVRJVkUgPSAweDEsCS8qKjwgV2FpdCBmb3IgZ2l2ZW4gbnVtYmVyIG9mIHZibGFua3MgKi8KKwlfRFJNX1ZCTEFOS19GTElQID0gMHg4MDAwMDAwLCAgIC8qKjwgU2NoZWR1bGVkIGJ1ZmZlciBzd2FwIHNob3VsZCBmbGlwICovCiAJX0RSTV9WQkxBTktfTkVYVE9OTUlTUyA9IDB4MTAwMDAwMDAsCS8qKjwgSWYgbWlzc2VkLCB3YWl0IGZvciBuZXh0IHZibGFuayAqLwogCV9EUk1fVkJMQU5LX1NFQ09OREFSWSA9IDB4MjAwMDAwMDAsCS8qKjwgU2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAqLwogCV9EUk1fVkJMQU5LX1NJR05BTCA9IDB4NDAwMDAwMDAJLyoqPCBTZW5kIHNpZ25hbCBpbnN0ZWFkIG9mIGJsb2NraW5nICovCkBAIC01MDMsNiArNDg3LDE5IEBACiAJc3RydWN0IGRybV93YWl0X3ZibGFua19yZXBseSByZXBseTsKIH07CiAKKyNkZWZpbmUgX0RSTV9QUkVfTU9ERVNFVCAxCisjZGVmaW5lIF9EUk1fUE9TVF9NT0RFU0VUIDIKKworLyoqCisgKiBEUk1fSU9DVExfTU9ERVNFVF9DVEwgaW9jdGwgYXJndW1lbnQgdHlwZQorICoKKyAqIFxzYSBkcm1Nb2Rlc2V0Q3RsKCkuCisgKi8KK3N0cnVjdCBkcm1fbW9kZXNldF9jdGwgeworCXVpbnQzMl90IGNydGM7CisJdWludDMyX3QgY21kOworfTsKKwogLyoqCiAgKiBEUk1fSU9DVExfQUdQX0VOQUJMRSBpb2N0bCBhcmd1bWVudCB0eXBlLgogICoKQEAgLTU3Myw2ICs1NzAsMzQgQEAKIAlpbnQgZHJtX2RkX21pbm9yOwogfTsKIAorLyoqIERSTV9JT0NUTF9HRU1fQ0xPU0UgaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fY2xvc2UgeworCS8qKiBIYW5kbGUgb2YgdGhlIG9iamVjdCB0byBiZSBjbG9zZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX0ZMSU5LIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KK3N0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG5hbWVkICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIGdsb2JhbCBuYW1lICovCisJdWludDMyX3QgbmFtZTsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX09QRU4gaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fb3BlbiB7CisJLyoqIE5hbWUgb2Ygb2JqZWN0IGJlaW5nIG9wZW5lZCAqLworCXVpbnQzMl90IG5hbWU7CisKKwkvKiogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIHNpemUgb2YgdGhlIG9iamVjdCAqLworCXVpbnQ2NF90IHNpemU7Cit9OworCiAjZGVmaW5lIERSTV9JT0NUTF9CQVNFCQkJJ2QnCiAjZGVmaW5lIERSTV9JTyhucikJCQlfSU8oRFJNX0lPQ1RMX0JBU0UsbnIpCiAjZGVmaW5lIERSTV9JT1IobnIsdHlwZSkJCV9JT1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKQEAgLTU4Nyw2ICs2MTIsMTAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DTElFTlQgICAgICAgICAgICBEUk1fSU9XUigweDA1LCBzdHJ1Y3QgZHJtX2NsaWVudCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9TVEFUUyAgICAgICAgICAgICBEUk1fSU9SKCAweDA2LCBzdHJ1Y3QgZHJtX3N0YXRzKQogI2RlZmluZSBEUk1fSU9DVExfU0VUX1ZFUlNJT04JCURSTV9JT1dSKDB4MDcsIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24pCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFU0VUX0NUTCAgICAgICAgICAgRFJNX0lPVygweDA4LCBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsKQorI2RlZmluZSBEUk1fSU9DVExfR0VNX0NMT1NFCQlEUk1fSU9XICgweDA5LCBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9GTElOSwkJRFJNX0lPV1IoMHgwYSwgc3RydWN0IGRybV9nZW1fZmxpbmspCisjZGVmaW5lIERSTV9JT0NUTF9HRU1fT1BFTgkJRFJNX0lPV1IoMHgwYiwgc3RydWN0IGRybV9nZW1fb3BlbikKIAogI2RlZmluZSBEUk1fSU9DVExfU0VUX1VOSVFVRQkJRFJNX0lPVyggMHgxMCwgc3RydWN0IGRybV91bmlxdWUpCiAjZGVmaW5lIERSTV9JT0NUTF9BVVRIX01BR0lDCQlEUk1fSU9XKCAweDExLCBzdHJ1Y3QgZHJtX2F1dGgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggMWMxYjEzZS4uNTljNzk2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAjZGVmaW5lIERSSVZFUl9ETUFfUVVFVUUgICAweDIwMAogI2RlZmluZSBEUklWRVJfRkJfRE1BICAgICAgMHg0MDAKICNkZWZpbmUgRFJJVkVSX0lSUV9WQkwyICAgIDB4ODAwCisjZGVmaW5lIERSSVZFUl9HRU0gICAgICAgICAweDEwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIFxuYW1lIEJlZ2luIHRoZSBEUk0uLi4gKi8KQEAgLTM4Nyw2ICszODgsMTAgQEAKIAlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKIAlpbnQgcmVtb3ZlX2F1dGhfb25fY2xvc2U7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2NvdW50OworCS8qKiBNYXBwaW5nIG9mIG1tIG9iamVjdCBoYW5kbGVzIHRvIG9iamVjdCBwb2ludGVycy4gKi8KKwlzdHJ1Y3QgaWRyIG9iamVjdF9pZHI7CisJLyoqIExvY2sgZm9yIHN5bmNocm9uaXphdGlvbiBvZiBhY2Nlc3MgdG8gb2JqZWN0X2lkci4gKi8KKwlzcGlubG9ja190IHRhYmxlX2xvY2s7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJdm9pZCAqZHJpdmVyX3ByaXY7CiB9OwpAQCAtNTU4LDYgKzU2Myw1NiBAQAogfTsKIAogLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBkcm1fbW0gbWVtb3J5IG9iamVjdCwgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHRoZQorICogRFJNIGZvciBpdHMgYnVmZmVyIG9iamVjdHMuCisgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCB7CisJLyoqIFJlZmVyZW5jZSBjb3VudCBvZiB0aGlzIG9iamVjdCAqLworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCisJLyoqIEhhbmRsZSBjb3VudCBvZiB0aGlzIG9iamVjdC4gRWFjaCBoYW5kbGUgYWxzbyBob2xkcyBhIHJlZmVyZW5jZSAqLworCXN0cnVjdCBrcmVmIGhhbmRsZWNvdW50OworCisJLyoqIFJlbGF0ZWQgZHJtIGRldmljZSAqLworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwkvKiogRmlsZSByZXByZXNlbnRpbmcgdGhlIHNobWVtIHN0b3JhZ2UgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKworCS8qKgorCSAqIFNpemUgb2YgdGhlIG9iamVjdCwgaW4gYnl0ZXMuICBJbW11dGFibGUgb3ZlciB0aGUgb2JqZWN0J3MKKwkgKiBsaWZldGltZS4KKwkgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qKgorCSAqIEdsb2JhbCBuYW1lIGZvciB0aGlzIG9iamVjdCwgc3RhcnRzIGF0IDEuIDAgbWVhbnMgdW5uYW1lZC4KKwkgKiBBY2Nlc3MgaXMgY292ZXJlZCBieSB0aGUgb2JqZWN0X25hbWVfbG9jayBpbiB0aGUgcmVsYXRlZCBkcm1fZGV2aWNlCisJICovCisJaW50IG5hbWU7CisKKwkvKioKKwkgKiBNZW1vcnkgZG9tYWlucy4gVGhlc2UgbW9uaXRvciB3aGljaCBjYWNoZXMgY29udGFpbiByZWFkL3dyaXRlIGRhdGEKKwkgKiByZWxhdGVkIHRvIHRoZSBvYmplY3QuIFdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIG9uZSBzZXQgb2YgZG9tYWlucworCSAqIHRvIGFub3RoZXIsIHRoZSBkcml2ZXIgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGNhY2hlcyBhcmUgc3VpdGFibHkKKwkgKiBmbHVzaGVkIGFuZCBpbnZhbGlkYXRlZAorCSAqLworCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwl1aW50MzJfdCB3cml0ZV9kb21haW47CisKKwkvKioKKwkgKiBXaGlsZSB2YWxpZGF0aW5nIGFuIGV4ZWMgb3BlcmF0aW9uLCB0aGUKKwkgKiBuZXcgcmVhZC93cml0ZSBkb21haW4gdmFsdWVzIGFyZSBjb21wdXRlZCBoZXJlLgorCSAqIFRoZXkgd2lsbCBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgYWJvdmUgdmFsdWVzCisJICogYXQgdGhlIHBvaW50IHRoYXQgYW55IGNhY2hlIGZsdXNoaW5nIG9jY3VycworCSAqLworCXVpbnQzMl90IHBlbmRpbmdfcmVhZF9kb21haW5zOworCXVpbnQzMl90IHBlbmRpbmdfd3JpdGVfZG9tYWluOworCisJdm9pZCAqZHJpdmVyX3ByaXZhdGU7Cit9OworCisvKioKICAqIERSTSBkcml2ZXIgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnQgdGhlIGNvbW1vbiBjb2RlIGZvcgogICogYSBmYW1pbHkgb2YgY2FyZHMuIFRoZXJlIHdpbGwgb25lIGRybV9kZXZpY2UgZm9yIGVhY2ggY2FyZCBwcmVzZW50CiAgKiBpbiB0aGlzIGZhbWlseQpAQCAtNTgwLDExICs2MzUsNTQgQEAKIAlpbnQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2gpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb2xkLAogCQkJCSAgICAgIGludCBuZXcpOwogCXZvaWQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0JaW50ICgqdmJsYW5rX3dhaXQpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLQlpbnQgKCp2Ymxhbmtfd2FpdDIpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIAlpbnQgKCpkcmlfbGlicmFyeV9uYW1lKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY2hhciAqYnVmKTsKIAogCS8qKgorCSAqIGdldF92YmxhbmtfY291bnRlciAtIGdldCByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IGNvdW50ZXIgdG8gZmV0Y2gKKwkgKgorCSAqIERyaXZlciBjYWxsYmFjayBmb3IgZmV0Y2hpbmcgYSByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBmb3IgQGNydGMuICBJZiBhIGRldmljZSBkb2Vzbid0IGhhdmUgYSBoYXJkd2FyZSBjb3VudGVyLCB0aGUKKwkgKiBkcml2ZXIgY2FuIHNpbXBseSByZXR1cm4gdGhlIHZhbHVlIG9mIGRybV92YmxhbmtfY291bnQgYW5kCisJICogbWFrZSB0aGUgZW5hYmxlX3ZibGFuaygpIGFuZCBkaXNhYmxlX3ZibGFuaygpIGhvb2tzIGludG8gbm8tb3BzLAorCSAqIGxlYXZpbmcgaW50ZXJydXB0cyBlbmFibGVkIGF0IGFsbCB0aW1lcy4KKwkgKgorCSAqIFdyYXBhcm91bmQgaGFuZGxpbmcgYW5kIGxvc3Mgb2YgZXZlbnRzIGR1ZSB0byBtb2Rlc2V0dGluZyBpcyBkZWFsdAorCSAqIHdpdGggaW4gdGhlIERSTSBjb3JlIGNvZGUuCisJICoKKwkgKiBSRVRVUk5TCisJICogUmF3IHZibGFuayBjb3VudGVyIHZhbHVlLgorCSAqLworCXUzMiAoKmdldF92YmxhbmtfY291bnRlcikgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKworCS8qKgorCSAqIGVuYWJsZV92YmxhbmsgLSBlbmFibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIEVuYWJsZSB2YmxhbmsgaW50ZXJydXB0cyBmb3IgQGNydGMuICBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZQorCSAqIGEgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIsIHRoaXMgcm91dGluZSBzaG91bGQgYmUgYSBuby1vcCwgc2luY2UKKwkgKiBpbnRlcnJ1cHRzIHdpbGwgaGF2ZSB0byBzdGF5IG9uIHRvIGtlZXAgdGhlIGNvdW50IGFjY3VyYXRlLgorCSAqCisJICogUkVUVVJOUworCSAqIFplcm8gb24gc3VjY2VzcywgYXBwcm9wcmlhdGUgZXJybm8gaWYgdGhlIGdpdmVuIEBjcnRjJ3MgdmJsYW5rCisJICogaW50ZXJydXB0IGNhbm5vdCBiZSBlbmFibGVkLgorCSAqLworCWludCAoKmVuYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKKwkgKiBkaXNhYmxlX3ZibGFuayAtIGRpc2FibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIERpc2FibGUgdmJsYW5rIGludGVycnVwdHMgZm9yIEBjcnRjLiAgSWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUKKwkgKiBhIGhhcmR3YXJlIHZibGFuayBjb3VudGVyLCB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGEgbm8tb3AsIHNpbmNlCisJICogaW50ZXJydXB0cyB3aWxsIGhhdmUgdG8gc3RheSBvbiB0byBrZWVwIHRoZSBjb3VudCBhY2N1cmF0ZS4KKwkgKi8KKwl2b2lkICgqZGlzYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKIAkgKiBDYWxsZWQgYnkgXGMgZHJtX2RldmljZV9pc19hZ3AuICBUeXBpY2FsbHkgdXNlZCB0byBkZXRlcm1pbmUgaWYgYQogCSAqIGNhcmQgaXMgcmVhbGx5IGF0dGFjaGVkIHRvIEFHUCBvciBub3QuCiAJICoKQEAgLTYwMSw3ICs2OTksNyBAQAogCiAJaXJxcmV0dXJuX3QoKmlycV9oYW5kbGVyKSAoRFJNX0lSUV9BUkdTKTsKIAl2b2lkICgqaXJxX3ByZWluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisJaW50ICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKmlycV91bmluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAl2b2lkICgqcmVjbGFpbV9idWZmZXJzKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICogZmlsZV9wcml2KTsKQEAgLTYxNCw2ICs3MTIsMTggQEAKIAl2b2lkICgqc2V0X3ZlcnNpb24pIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uICpzdik7CiAKKwlpbnQgKCpwcm9jX2luaXQpKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwl2b2lkICgqcHJvY19jbGVhbnVwKShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisKKwkvKioKKwkgKiBEcml2ZXItc3BlY2lmaWMgY29uc3RydWN0b3IgZm9yIGRybV9nZW1fb2JqZWN0cywgdG8gc2V0IHVwCisJICogb2JqLT5kcml2ZXJfcHJpdmF0ZS4KKwkgKgorCSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorCSAqLworCWludCAoKmdlbV9pbml0X29iamVjdCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwl2b2lkICgqZ2VtX2ZyZWVfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCiAJaW50IG1ham9yOwogCWludCBtaW5vcjsKIAlpbnQgcGF0Y2hsZXZlbDsKQEAgLTcxNCw3ICs4MjQsNiBAQAogCiAJLyoqIFxuYW1lIENvbnRleHQgc3VwcG9ydCAqLwogCS8qQHsgKi8KLQlpbnQgaXJxOwkJCS8qKjwgSW50ZXJydXB0IHVzZWQgYnkgYm9hcmQgKi8KIAlpbnQgaXJxX2VuYWJsZWQ7CQkvKio8IFRydWUgaWYgaXJxIGhhbmRsZXIgaXMgZW5hYmxlZCAqLwogCV9fdm9sYXRpbGVfXyBsb25nIGNvbnRleHRfZmxhZzsJLyoqPCBDb250ZXh0IHN3YXBwaW5nIGZsYWcgKi8KIAlfX3ZvbGF0aWxlX18gbG9uZyBpbnRlcnJ1cHRfZmxhZzsgLyoqPCBJbnRlcnJ1cHRpb24gaGFuZGxlciBmbGFnICovCkBAIC03MzAsMTMgKzgzOSwyOCBAQAogCS8qKiBcbmFtZSBWQkxBTksgSVJRIHN1cHBvcnQgKi8KIAkvKkB7ICovCiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCB2YmxfcXVldWU7CS8qKjwgVkJMQU5LIHdhaXQgcXVldWUgKi8KLQlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7Ci0JYXRvbWljX3QgdmJsX3JlY2VpdmVkMjsJCS8qKjwgbnVtYmVyIG9mIHNlY29uZGFyeSBWQkxBTksgaW50ZXJydXB0cyAqLworCS8qCisJICogQXQgbG9hZCB0aW1lLCBkaXNhYmxpbmcgdGhlIHZibGFuayBpbnRlcnJ1cHQgd29uJ3QgYmUgYWxsb3dlZCBzaW5jZQorCSAqIG9sZCBjbGllbnRzIG1heSBub3QgY2FsbCB0aGUgbW9kZXNldCBpb2N0bCBhbmQgdGhlcmVmb3JlIG1pc2JlaGF2ZS4KKwkgKiBPbmNlIHRoZSBtb2Rlc2V0IGlvY3RsICpoYXMqIGJlZW4gY2FsbGVkIHRob3VnaCwgd2UgY2FuIHNhZmVseQorCSAqIGRpc2FibGUgdGhlbSB3aGVuIHVudXNlZC4KKwkgKi8KKwlpbnQgdmJsYW5rX2Rpc2FibGVfYWxsb3dlZDsKKworCXdhaXRfcXVldWVfaGVhZF90ICp2YmxfcXVldWU7ICAgLyoqPCBWQkxBTksgd2FpdCBxdWV1ZSAqLworCWF0b21pY190ICpfdmJsYW5rX2NvdW50OyAgICAgICAgLyoqPCBudW1iZXIgb2YgVkJMQU5LIGludGVycnVwdHMgKGRyaXZlciBtdXN0IGFsbG9jIHRoZSByaWdodCBudW1iZXIgb2YgY291bnRlcnMpICovCiAJc3BpbmxvY2tfdCB2YmxfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHZibF9zaWdzOwkJLyoqPCBzaWduYWwgbGlzdCB0byBzZW5kIG9uIFZCTEFOSyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdmJsX3NpZ3MyOwkvKio8IHNpZ25hbHMgdG8gc2VuZCBvbiBzZWNvbmRhcnkgVkJMQU5LICovCi0JdW5zaWduZWQgaW50IHZibF9wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzOwkvKio8IHNpZ25hbCBsaXN0IHRvIHNlbmQgb24gVkJMQU5LICovCisJYXRvbWljX3QgdmJsX3NpZ25hbF9wZW5kaW5nOyAgICAvKiBudW1iZXIgb2Ygc2lnbmFscyBwZW5kaW5nIG9uIGFsbCBjcnRjcyovCisJYXRvbWljX3QgKnZibGFua19yZWZjb3VudDsgICAgICAvKiBudW1iZXIgb2YgdXNlcnMgb2YgdmJsYW5rIGludGVycnVwdHNwZXIgY3J0YyAqLworCXUzMiAqbGFzdF92Ymxhbms7ICAgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IGRldi0+dmJsX2xvY2ssIHVzZWQgKi8KKwkJCQkJLyogZm9yIHdyYXBhcm91bmQgaGFuZGxpbmcgKi8KKwlpbnQgKnZibGFua19lbmFibGVkOyAgICAgICAgICAgIC8qIHNvIHdlIGRvbid0IGNhbGwgZW5hYmxlIG1vcmUgdGhhbgorCQkJCQkgICBvbmNlIHBlciBkaXNhYmxlICovCisJaW50ICp2YmxhbmtfaW5tb2Rlc2V0OyAgICAgICAgICAvKiBEaXNwbGF5IGRyaXZlciBpcyBzZXR0aW5nIG1vZGUgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB2YmxhbmtfZGlzYWJsZV90aW1lcjsKKworCXUzMiBtYXhfdmJsYW5rX2NvdW50OyAgICAgICAgICAgLyoqPCBzaXplIG9mIHZibGFuayBjb3VudGVyIHJlZ2lzdGVyICovCiAJc3BpbmxvY2tfdCB0YXNrbGV0X2xvY2s7CS8qKjwgRm9yIGRybV9sb2NrZWRfdGFza2xldCAqLwogCXZvaWQgKCpsb2NrZWRfdGFza2xldF9mdW5jKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApAQCAtNzU3LDYgKzg4MSw3IEBACiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogI2VuZGlmCiAJc3RydWN0IGRybV9zZ19tZW0gKnNnOwkvKio8IFNjYXR0ZXIgZ2F0aGVyIG1lbW9yeSAqLworCWludCBudW1fY3J0Y3M7ICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhpcyBkZXZpY2UgKi8KIAl2b2lkICpkZXZfcHJpdmF0ZTsJCS8qKjwgZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCXN0cnVjdCBkcm1fc2lnZGF0YSBzaWdkYXRhOwkgICAvKio8IEZvciBibG9ja19hbGxfc2lnbmFscyAqLwogCXNpZ3NldF90IHNpZ21hc2s7CkBAIC03NzEsOCArODk2LDI5IEBACiAJc3BpbmxvY2tfdCBkcndfbG9jazsKIAlzdHJ1Y3QgaWRyIGRyd19pZHI7CiAJLypAfSAqLworCisJLyoqIFxuYW1lIEdFTSBpbmZvcm1hdGlvbiAqLworCS8qQHsgKi8KKwlzcGlubG9ja190IG9iamVjdF9uYW1lX2xvY2s7CisJc3RydWN0IGlkciBvYmplY3RfbmFtZV9pZHI7CisJYXRvbWljX3Qgb2JqZWN0X2NvdW50OworCWF0b21pY190IG9iamVjdF9tZW1vcnk7CisJYXRvbWljX3QgcGluX2NvdW50OworCWF0b21pY190IHBpbl9tZW1vcnk7CisJYXRvbWljX3QgZ3R0X2NvdW50OworCWF0b21pY190IGd0dF9tZW1vcnk7CisJdWludDMyX3QgZ3R0X3RvdGFsOworCXVpbnQzMl90IGludmFsaWRhdGVfZG9tYWluczsgICAgLyogZG9tYWlucyBwZW5kaW5nIGludmFsaWRhdGlvbiAqLworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7ICAgICAgICAgLyogZG9tYWlucyBwZW5kaW5nIGZsdXNoICovCisJLypAfSAqLworCiB9OwogCitzdGF0aWMgaW5saW5lIGludCBkcm1fZGV2X3RvX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnBkZXYtPmlycTsKK30KKwogc3RhdGljIF9faW5saW5lX18gaW50IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgICBpbnQgZmVhdHVyZSkKIHsKQEAgLTg2Nyw2ICsxMDEzLDExIEBACiBleHRlcm4gRFJNX0FHUF9NRU0gKmRybV9hbGxvY19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBhZ2VzLCB1MzIgdHlwZSk7CiBleHRlcm4gaW50IGRybV9mcmVlX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSwgaW50IHBhZ2VzKTsKIGV4dGVybiBpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpOworZXh0ZXJuIERSTV9BR1BfTUVNICpkcm1fYWdwX2JpbmRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCisJCQkJICAgICAgIHVpbnQzMl90IGd0dF9vZmZzZXQsCisJCQkJICAgICAgIHVpbnQzMl90IHR5cGUpOwogZXh0ZXJuIGludCBkcm1fdW5iaW5kX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiAKIAkJCQkvKiBNaXNjLiBJT0NUTCBzdXBwb3J0IChkcm1faW9jdGwuaCkgKi8KQEAgLTkyOSw2ICsxMDgwLDkgQEAKIGV4dGVybiBpbnQgZHJtX2F1dGhtYWdpYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAorLyogQ2FjaGUgbWFuYWdlbWVudCAoZHJtX2NhY2hlLmMpICovCit2b2lkIGRybV9jbGZsdXNoX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlc1tdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyk7CisKIAkJCQkvKiBMb2NraW5nIElPQ1RMIHN1cHBvcnQgKGRybV9sb2NrLmgpICovCiBleHRlcm4gaW50IGRybV9sb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CkBAIC05ODUsMTUgKzExMzksMjUgQEAKIGV4dGVybiBpbnQgZHJtX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpcnFyZXR1cm5fdCBkcm1faXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKK2V4dGVybiBpbnQgZHJtX2lycV9pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBkcm1faXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAorZXh0ZXJuIGludCBkcm1fdmJsYW5rX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9jcnRjcyk7CiBleHRlcm4gaW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxwKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqdmJsX3NlcSk7Ci1leHRlcm4gdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9sb2NrZWRfdGFza2xldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHZvaWQoKmZ1bmMpKHN0cnVjdCBkcm1fZGV2aWNlICopKTsKK2V4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKy8qIE1vZGVzZXR0aW5nIHN1cHBvcnQgKi8KK2V4dGVybiBpbnQgZHJtX21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCBkcm1fbG9ja2VkX3Rhc2tsZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCgqZnVuYykoc3RydWN0IGRybV9kZXZpY2UqKSk7CiAKIAkJCQkvKiBBR1AvR0FSVCBzdXBwb3J0IChkcm1fYWdwc3VwcG9ydC5oKSAqLwpAQCAtMTAyNiw2ICsxMTkwLDcgQEAKIGV4dGVybiBpbnQgZHJtX2FncF9mcmVlX21lbW9yeShEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiBleHRlcm4gaW50IGRybV9hZ3BfYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIG9mZl90IHN0YXJ0KTsKIGV4dGVybiBpbnQgZHJtX2FncF91bmJpbmRfbWVtb3J5KERSTV9BR1BfTUVNICogaGFuZGxlKTsKK2V4dGVybiB2b2lkIGRybV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCQkJCS8qIFN0dWIgc3VwcG9ydCAoZHJtX3N0dWIuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCkBAIC0xMDg4LDYgKzEyNTMsNjYgQEAKIGV4dGVybiBpbnQgZHJtX21tX3JlbW92ZV9zcGFjZV9mcm9tX3RhaWwoc3RydWN0IGRybV9tbSAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gaW50IGRybV9tbV9hZGRfc3BhY2VfdG9fdGFpbChzdHJ1Y3QgZHJtX21tICptbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAorLyogR3JhcGhpY3MgRXhlY3V0aW9uIE1hbmFnZXIgbGlicmFyeSBmdW5jdGlvbnMgKGRybV9nZW0uYykgKi8KK2ludCBkcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGRybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgc2l6ZV90IHNpemUpOwordm9pZCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWtyZWZfZ2V0KCZvYmotPnJlZmNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybjsKKworCWtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlKTsKK30KKworaW50IGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIGludCAqaGFuZGxlcCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwlrcmVmX2dldCgmb2JqLT5oYW5kbGVjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBNdXN0IGJ1bXAgaGFuZGxlIGNvdW50IGZpcnN0IGFzIHRoaXMgbWF5IGJlIHRoZSBsYXN0CisJICogcmVmLCBpbiB3aGljaCBjYXNlIHRoZSBvYmplY3Qgd291bGQgZGlzYXBwZWFyIGJlZm9yZSB3ZQorCSAqIGNoZWNrZWQgZm9yIGEgbmFtZQorCSAqLworCWtyZWZfcHV0KCZvYmotPmhhbmRsZWNvdW50LCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZSk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKK30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9sb29rdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQkJCSAgICAgaW50IGhhbmRsZSk7CitpbnQgZHJtX2dlbV9jbG9zZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGRybV9nZW1fZmxpbmtfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3ZvaWQgZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKK3ZvaWQgZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKKwogZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCAxMzViZDE5Li5kYTA0MTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC04NCwxOCArODQsMTggQEAKIAl7MHgxMDAyLCAweDU0NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1NjU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTY0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1NjRCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDU2NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMTEzLDggKzExMywxMCBAQAogCXsweDEwMDIsIDB4NTk2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQ4MHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKLQl7MHgxMDAyLCAweDVhNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0ODB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDViNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1YjYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWI2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTEyMiwxNiArMTI0LDE2IEBACiAJezB4MTAwMiwgMHg1YjY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWM2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1YzYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDVlNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ZTRhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTIzNyw2ICsyMzksMTAgQEAKIAl7MHgxMDAyLCAweDc4MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3OTFlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezAsIDAsIDB9CiAKICNkZWZpbmUgcjEyOF9QQ0lfSURTIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDA1YzY2Y2YuLmViNGIzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMTQzLDYgKzE0MywyMiBAQAogI2RlZmluZSBEUk1fSTkxNV9HRVRfVkJMQU5LX1BJUEUJMHgwZQogI2RlZmluZSBEUk1fSTkxNV9WQkxBTktfU1dBUAkweDBmCiAjZGVmaW5lIERSTV9JOTE1X0hXU19BRERSCTB4MTEKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0lOSVQJMHgxMworI2RlZmluZSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUgkweDE0CisjZGVmaW5lIERSTV9JOTE1X0dFTV9QSU4JMHgxNQorI2RlZmluZSBEUk1fSTkxNV9HRU1fVU5QSU4JMHgxNgorI2RlZmluZSBEUk1fSTkxNV9HRU1fQlVTWQkweDE3CisjZGVmaW5lIERSTV9JOTE1X0dFTV9USFJPVFRMRQkweDE4CisjZGVmaW5lIERSTV9JOTE1X0dFTV9FTlRFUlZUCTB4MTkKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0xFQVZFVlQJMHgxYQorI2RlZmluZSBEUk1fSTkxNV9HRU1fQ1JFQVRFCTB4MWIKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BSRUFECTB4MWMKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BXUklURQkweDFkCisjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQCTB4MWUKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4JMHgxZgorI2RlZmluZSBEUk1fSTkxNV9HRU1fU1dfRklOSVNICTB4MjAKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcJMHgyMQorI2RlZmluZSBEUk1fSTkxNV9HRU1fR0VUX1RJTElORwkweDIyCiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTE2MCw2ICsxNzYsMjAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUX1ZCTEFOS19QSVBFCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9TRVRfVkJMQU5LX1BJUEUsIGRybV9pOTE1X3ZibGFua19waXBlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9WQkxBTktfUElQRQlEUk1fSU9SKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCBkcm1faTkxNV92YmxhbmtfcGlwZV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9WQkxBTktfU1dBUAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfVkJMQU5LX1NXQVAsIGRybV9pOTE1X3ZibGFua19zd2FwX3QpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QSU4JCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUElOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1VOUElOCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VTlBJTiwgc3RydWN0IGRybV9pOTE1X2dlbV91bnBpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1kJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQlVTWSwgc3RydWN0IGRybV9pOTE1X2dlbV9idXN5KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVEhST1RUTEUJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9USFJPVFRMRSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0VOVEVSVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRU5URVJWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0xFQVZFVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTEVBVkVWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0NSRUFURQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NSRUFURSwgc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QUkVBRAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BSRUFELCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUFdSSVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX0RPTUFJTglEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NXX0ZJTklTSAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NXX0ZJTklTSCwgc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2gpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TRVRfVElMSU5HCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZykKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcJRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fR0VUX1RJTElORywgc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nKQogCiAvKiBBbGxvdyBkcml2ZXJzIHRvIHN1Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFyZHdhcmUsIHJlbHlpbmcKICAqIG9uIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IGhhcmR3YXJlLgpAQCAtMjAwLDYgKzIzMCw4IEBACiAjZGVmaW5lIEk5MTVfUEFSQU1fSVJRX0FDVElWRSAgICAgICAgICAgIDEKICNkZWZpbmUgSTkxNV9QQVJBTV9BTExPV19CQVRDSEJVRkZFUiAgICAgMgogI2RlZmluZSBJOTE1X1BBUkFNX0xBU1RfRElTUEFUQ0ggICAgICAgICAzCisjZGVmaW5lIEk5MTVfUEFSQU1fQ0hJUFNFVF9JRCAgICAgICAgICAgIDQKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfR0VNICAgICAgICAgICAgICAgNQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSB7CiAJaW50IHBhcmFtOwpAQCAtMjY3LDQgKzI5OSwzMDUgQEAKIAl1aW50NjRfdCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgeworCS8qKgorCSAqIEJlZ2lubmluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CisJICogbWFuYWdlci4KKwkgKi8KKwl1aW50NjRfdCBndHRfc3RhcnQ7CisJLyoqCisJICogRW5kaW5nIG9mZnNldCBpbiB0aGUgR1RUIHRvIGJlIG1hbmFnZWQgYnkgdGhlIERSTSBtZW1vcnkKKwkgKiBtYW5hZ2VyLgorCSAqLworCXVpbnQ2NF90IGd0dF9lbmQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSB7CisJLyoqCisJICogUmVxdWVzdGVkIHNpemUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBUaGUgKHBhZ2UtYWxpZ25lZCkgYWxsb2NhdGVkIHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KKwkgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4KKwkgKgorCSAqIE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKKwkvKiogT2Zmc2V0IGludG8gdGhlIG9iamVjdCB0byByZWFkIGZyb20gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFBvaW50ZXIgdG8gd3JpdGUgdGhlIGRhdGEgaW50by4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyB3cml0dGVuIHRvLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gd3JpdGUgdG8gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHdyaXRlICovCisJdWludDY0X3Qgc2l6ZTsKKwkvKioKKwkgKiBQb2ludGVyIHRvIHJlYWQgdGhlIGRhdGEgZnJvbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqCisJICogTGVuZ3RoIG9mIGRhdGEgdG8gbWFwLgorCSAqCisJICogVGhlIHZhbHVlIHdpbGwgYmUgcGFnZS1hbGlnbmVkLgorCSAqLworCXVpbnQ2NF90IHNpemU7CisJLyoqCisJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgorCSAqCisJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwl1aW50NjRfdCBhZGRyX3B0cjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOZXcgcmVhZCBkb21haW5zICovCisJdWludDMyX3QgcmVhZF9kb21haW5zOworCisJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KKwl1aW50MzJfdCB3cml0ZV9kb21haW47Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSB7CisJLyoqCisJICogSGFuZGxlIG9mIHRoZSBidWZmZXIgYmVpbmcgcG9pbnRlZCB0byBieSB0aGlzIHJlbG9jYXRpb24gZW50cnkuCisJICoKKwkgKiBJdCdzIGFwcGVhbGluZyB0byBtYWtlIHRoaXMgYmUgYW4gaW5kZXggaW50byB0aGUgbW1fdmFsaWRhdGVfZW50cnkKKwkgKiBsaXN0IHRvIHJlZmVyIHRvIHRoZSBidWZmZXIsIGJ1dCB0aGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIGNyZWF0ZQorCSAqIGEgcmVsb2NhdGlvbiBsaXN0IGZvciBzdGF0ZSBidWZmZXJzIGFuZCBub3QgcmUtd3JpdGUgaXQgcGVyCisJICogZXhlYyB1c2luZyB0aGUgYnVmZmVyLgorCSAqLworCXVpbnQzMl90IHRhcmdldF9oYW5kbGU7CisKKwkvKioKKwkgKiBWYWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRvIG1ha2UgdXAKKwkgKiB0aGUgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKi8KKwl1aW50MzJfdCBkZWx0YTsKKworCS8qKiBPZmZzZXQgaW4gdGhlIGJ1ZmZlciB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3aWxsIGJlIHdyaXR0ZW4gaW50byAqLworCXVpbnQ2NF90IG9mZnNldDsKKworCS8qKgorCSAqIE9mZnNldCB2YWx1ZSBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0aGF0IHRoZSByZWxvY2F0aW9uIGVudHJ5IHdhcyBsYXN0CisJICogd3JpdHRlbiBhcy4KKwkgKgorCSAqIElmIHRoZSBidWZmZXIgaGFzIHRoZSBzYW1lIG9mZnNldCBhcyBsYXN0IHRpbWUsIHdlIGNhbiBza2lwIHN5bmNpbmcKKwkgKiBhbmQgd3JpdGluZyB0aGUgcmVsb2NhdGlvbi4gIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG91dCBieQorCSAqIHRoZSBleGVjYnVmZmVyIGlvY3RsIHdoZW4gdGhlIHJlbG9jYXRpb24gaXMgd3JpdHRlbi4KKwkgKi8KKwl1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQ7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgcmVhZCBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKi8KKwl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKgorCSAqIE5vdGUgdGhhdCBvbmx5IG9uZSBkb21haW4gbWF5IGJlIHdyaXR0ZW4gYnkgdGhlIHdob2xlCisJICogZXhlY2J1ZmZlciBvcGVyYXRpb24sIHNvIHRoYXQgd2hlcmUgdGhlcmUgYXJlIGNvbmZsaWN0cywKKwkgKiB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgLUVJTlZBTCBiYWNrLgorCSAqLworCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKK307CisKKy8qKiBAeworICogSW50ZWwgbWVtb3J5IGRvbWFpbnMKKyAqCisgKiBNb3N0IG9mIHRoZXNlIGp1c3QgYWxpZ24gd2l0aCB0aGUgdmFyaW91cyBjYWNoZXMgaW4KKyAqIHRoZSBzeXN0ZW0gYW5kIGFyZSB1c2VkIHRvIGZsdXNoIGFuZCBpbnZhbGlkYXRlIGFzCisgKiBvYmplY3RzIGVuZCB1cCBjYWNoZWQgaW4gZGlmZmVyZW50IGRvbWFpbnMuCisgKi8KKy8qKiBDUFUgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NQVQkJMHgwMDAwMDAwMQorLyoqIFJlbmRlciBjYWNoZSwgdXNlZCBieSAyRCBhbmQgM0QgZHJhd2luZyAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fUkVOREVSCQkweDAwMDAwMDAyCisvKiogU2FtcGxlciBjYWNoZSwgdXNlZCBieSB0ZXh0dXJlIGVuZ2luZSAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUgkJMHgwMDAwMDAwNAorLyoqIENvbW1hbmQgcXVldWUsIHVzZWQgdG8gbG9hZCBiYXRjaCBidWZmZXJzICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ECQkweDAwMDAwMDA4CisvKiogSW5zdHJ1Y3Rpb24gY2FjaGUsIHVzZWQgYnkgc2hhZGVyIHByb2dyYW1zICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTgkweDAwMDAwMDEwCisvKiogVmVydGV4IGFkZHJlc3MgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWAkJMHgwMDAwMDAyMAorLyoqIEdUVCBkb21haW4gLSBhcGVydHVyZSBhbmQgc2Nhbm91dCAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fR1RUCQkweDAwMDAwMDQwCisvKiogQH0gKi8KKworc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCB7CisJLyoqCisJICogVXNlcidzIGhhbmRsZSBmb3IgYSBidWZmZXIgdG8gYmUgYm91bmQgaW50byB0aGUgR1RUIGZvciB0aGlzCisJICogb3BlcmF0aW9uLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOdW1iZXIgb2YgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoaXMgYnVmZmVyICovCisJdWludDMyX3QgcmVsb2NhdGlvbl9jb3VudDsKKwkvKioKKwkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBjb250YWluaW5nCisJICogdGhlIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGlzIGJ1ZmZlci4KKwkgKi8KKwl1aW50NjRfdCByZWxvY3NfcHRyOworCisJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLworCXVpbnQ2NF90IGFsaWdubWVudDsKKworCS8qKgorCSAqIFJldHVybmVkIHZhbHVlIG9mIHRoZSB1cGRhdGVkIG9mZnNldCBvZiB0aGUgb2JqZWN0LCBmb3IgZnV0dXJlCisJICogcHJlc3VtZWRfb2Zmc2V0IHdyaXRlcy4KKwkgKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgeworCS8qKgorCSAqIExpc3Qgb2YgYnVmZmVycyB0byBiZSB2YWxpZGF0ZWQgd2l0aCB0aGVpciByZWxvY2F0aW9ucyB0byBiZQorCSAqIHBlcmZvcm1lbmQgb24gdGhlbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fdmFsaWRhdGVfZW50cnkuCisJICoKKwkgKiBUaGVzZSBidWZmZXJzIG11c3QgYmUgbGlzdGVkIGluIGFuIG9yZGVyIHN1Y2ggdGhhdCBhbGwgcmVsb2NhdGlvbnMKKwkgKiBhIGJ1ZmZlciBpcyBwZXJmb3JtaW5nIHJlZmVyIHRvIGJ1ZmZlcnMgdGhhdCBoYXZlIGFscmVhZHkgYXBwZWFyZWQKKwkgKiBpbiB0aGUgdmFsaWRhdGUgbGlzdC4KKwkgKi8KKwl1aW50NjRfdCBidWZmZXJzX3B0cjsKKwl1aW50MzJfdCBidWZmZXJfY291bnQ7CisKKwkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KKwl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJLyoqIEJ5dGVzIHVzZWQgaW4gYmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KKwl1aW50MzJfdCBiYXRjaF9sZW47CisJdWludDMyX3QgRFIxOworCXVpbnQzMl90IERSNDsKKwl1aW50MzJfdCBudW1fY2xpcHJlY3RzOworCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLworCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHBpbm5lZC4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCisJLyoqIGFsaWdubWVudCByZXF1aXJlZCB3aXRoaW4gdGhlIGFwZXJ0dXJlICovCisJdWludDY0X3QgYWxpZ25tZW50OworCisJLyoqIFJldHVybmVkIEdUVCBvZmZzZXQgb2YgdGhlIGJ1ZmZlci4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGNoZWNrIGZvciBidXN5ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCisJdWludDMyX3QgYnVzeTsKK307CisKKyNkZWZpbmUgSTkxNV9USUxJTkdfTk9ORQkwCisjZGVmaW5lIEk5MTVfVElMSU5HX1gJCTEKKyNkZWZpbmUgSTkxNV9USUxJTkdfWQkJMgorCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9OT05FCQkwCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85CQkxCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwCQkyCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzExCQkzCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExCTQKKy8qIE5vdCBzZWVuIGJ5IHVzZXJsYW5kICovCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOCTUKKworc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gaGF2ZSBpdHMgdGlsaW5nIHN0YXRlIHVwZGF0ZWQgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKKwkgKiBJOTE1X1RJTElOR19ZKS4KKwkgKgorCSAqIFRoaXMgdmFsdWUgaXMgdG8gYmUgc2V0IG9uIHJlcXVlc3QsIGFuZCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlCisJICoga2VybmVsIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIHdpdGggdGhlIGFjdHVhbCBjaG9zZW4gdGlsaW5nIGxheW91dC4KKwkgKgorCSAqIFRoZSB0aWxpbmcgbW9kZSBtYXkgYmUgZGVtb3RlZCB0byBJOTE1X1RJTElOR19OT05FIHdoZW4gdGhlIHN5c3RlbQorCSAqIGhhcyBiaXQgNiBzd2l6emxpbmcgdGhhdCBjYW4ndCBiZSBtYW5hZ2VkIGNvcnJlY3RseSBieSBHRU0uCisJICoKKwkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgorCSAqIEk5MTVfVElMSU5HX1kuCisJICovCisJdWludDMyX3Qgc3RyaWRlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgeworCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBnZXQgdGlsaW5nIHN0YXRlIGZvci4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAorCSAqIEk5MTVfVElMSU5HX1kpLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCiAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IGJmOWFjYTUuLmU1MzE3ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xODMsNiArMTgzLDcgQEAKIHVuaWZkZWYteSArPSBhdXh2ZWMuaAogdW5pZmRlZi15ICs9IGJpbmZtdHMuaAogdW5pZmRlZi15ICs9IGJsa3RyYWNlX2FwaS5oCit1bmlmZGVmLXkgKz0gYnl0ZW9yZGVyLmgKIHVuaWZkZWYteSArPSBjYXBhYmlsaXR5LmgKIHVuaWZkZWYteSArPSBjYXBpLmgKIHVuaWZkZWYteSArPSBjY2lzc19pb2N0bC5oCkBAIC0zNDAsNiArMzQxLDcgQEAKIHVuaWZkZWYteSArPSBzdGF0LmgKIHVuaWZkZWYteSArPSBzdGRkZWYuaAogdW5pZmRlZi15ICs9IHN0cmluZy5oCit1bmlmZGVmLXkgKz0gc3dhYi5oCiB1bmlmZGVmLXkgKz0gc3luY2xpbmsuaAogdW5pZmRlZi15ICs9IHN5c2N0bC5oCiB1bmlmZGVmLXkgKz0gdGNwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggNzAyZjc5ZC4uZmQ2YTQ1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTk0LDE4ICs5NCwxMCBAQAogdm9pZCBhY3BpX3RhYmxlX3ByaW50X21hZHRfZW50cnkgKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqbWFkdCk7CiAKIC8qIHRoZSBmb2xsb3dpbmcgZm91ciBmdW5jdGlvbnMgYXJlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgKi8KLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1BBUlNFX1NSQVQKLSNkZWZpbmUgTlJfTk9ERV9NRU1CTEtTIE1BWF9OVU1OT0RFUwotI2RlZmluZSBhY3BpX251bWFfc2xpdF9pbml0KHNsaXQpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBhY3BpX251bWFfcHJvY2Vzc29yX2FmZmluaXR5X2luaXQocGEpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBhY3BpX251bWFfbWVtb3J5X2FmZmluaXR5X2luaXQobWEpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBhY3BpX251bWFfYXJjaF9maXh1cCgpIGRvIHt9IHdoaWxlICgwKQotI2Vsc2UKIHZvaWQgYWNwaV9udW1hX3NsaXRfaW5pdCAoc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqc2xpdCk7CiB2b2lkIGFjcGlfbnVtYV9wcm9jZXNzb3JfYWZmaW5pdHlfaW5pdCAoc3RydWN0IGFjcGlfc3JhdF9jcHVfYWZmaW5pdHkgKnBhKTsKIHZvaWQgYWNwaV9udW1hX21lbW9yeV9hZmZpbml0eV9pbml0IChzdHJ1Y3QgYWNwaV9zcmF0X21lbV9hZmZpbml0eSAqbWEpOwogdm9pZCBhY3BpX251bWFfYXJjaF9maXh1cCh2b2lkKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FDUElfSE9UUExVR19DUFUKIC8qIEFyY2ggZGVwZW5kZW50IGZ1bmN0aW9ucyBmb3IgY3B1IGhvdHBsdWcgc3VwcG9ydCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZXIuaCBiL2luY2x1ZGUvbGludXgvYWVyLmgKaW5kZXggZjI1MTgxNC4uZjdkZjFlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Flci5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUENJRUFFUikKIC8qIHBjaS1lIHBvcnQgZHJpdmVyIG5lZWRzIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIGFlciAqLwogZXh0ZXJuIGludCBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotZXh0ZXJuIGludCBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBpbnQgcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gaW50IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogI2Vsc2UKQEAgLTE4LDEwICsxNyw2IEBACiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAwOwotfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaCBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAppbmRleCAwYTI0ZDU1Li5iZWU1MmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCkBAIC0xNzUsNiArMTc1LDggQEAKICAqIEJESV9DQVBfUkVBRF9NQVA6ICAgICAgIENhbiBiZSBtYXBwZWQgZm9yIHJlYWRpbmcKICAqIEJESV9DQVBfV1JJVEVfTUFQOiAgICAgIENhbiBiZSBtYXBwZWQgZm9yIHdyaXRpbmcKICAqIEJESV9DQVBfRVhFQ19NQVA6ICAgICAgIENhbiBiZSBtYXBwZWQgZm9yIGV4ZWN1dGlvbgorICoKKyAqIEJESV9DQVBfU1dBUF9CQUNLRUQ6ICAgIENvdW50IHNobWVtL3RtcGZzIG9iamVjdHMgYXMgc3dhcC1iYWNrZWQuCiAgKi8KICNkZWZpbmUgQkRJX0NBUF9OT19BQ0NUX0RJUlRZCTB4MDAwMDAwMDEKICNkZWZpbmUgQkRJX0NBUF9OT19XUklURUJBQ0sJMHgwMDAwMDAwMgpAQCAtMTg0LDYgKzE4Niw3IEBACiAjZGVmaW5lIEJESV9DQVBfV1JJVEVfTUFQCTB4MDAwMDAwMjAKICNkZWZpbmUgQkRJX0NBUF9FWEVDX01BUAkweDAwMDAwMDQwCiAjZGVmaW5lIEJESV9DQVBfTk9fQUNDVF9XQgkweDAwMDAwMDgwCisjZGVmaW5lIEJESV9DQVBfU1dBUF9CQUNLRUQJMHgwMDAwMDEwMAogCiAjZGVmaW5lIEJESV9DQVBfVk1GTEFHUyBcCiAJKEJESV9DQVBfUkVBRF9NQVAgfCBCRElfQ0FQX1dSSVRFX01BUCB8IEJESV9DQVBfRVhFQ19NQVApCkBAIC0yNDgsNiArMjUxLDExIEBACiAJCQkJICAgICAgQkRJX0NBUF9OT19XUklURUJBQ0spKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGJkaV9jYXBfc3dhcF9iYWNrZWQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlyZXR1cm4gYmRpLT5jYXBhYmlsaXRpZXMgJiBCRElfQ0FQX1NXQVBfQkFDS0VEOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewogCXJldHVybiBiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvKTsKQEAgLTI1OCw0ICsyNjYsOSBAQAogCXJldHVybiBiZGlfY2FwX2FjY291bnRfZGlydHkobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2NhcF9zd2FwX2JhY2tlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlyZXR1cm4gYmRpX2NhcF9zd2FwX2JhY2tlZChtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvKTsKK30KKwogI2VuZGlmCQkvKiBfTElOVVhfQkFDS0lOR19ERVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iY2QuaCBiL2luY2x1ZGUvbGludXgvYmNkLmgKaW5kZXggN2FjNTE4ZS4uMjJlYTU2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JjZC5oCkBAIC0xLDEyICsxLDMgQEAKLS8qIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhpcyBjb2RlCi0gKiBpbiB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyIG9yIGxhdGVyLAotICogYXQgeW91ciBvcHRpb24uCi0gKi8KLQotLyogbWFjcm9zIHRvIHRyYW5zbGF0ZSB0by9mcm9tIGJpbmFyeSBhbmQgYmluYXJ5LWNvZGVkIGRlY2ltYWwgKGZyZXF1ZW50bHkKLSAqIGZvdW5kIGluIFJUQyBjaGlwcykuCi0gKi8KLQogI2lmbmRlZiBfQkNEX0gKICNkZWZpbmUgX0JDRF9ICiAKQEAgLTE1LDExICs2LDQgQEAKIHVuc2lnbmVkIGJjZDJiaW4odW5zaWduZWQgY2hhciB2YWwpIF9fYXR0cmlidXRlX2NvbnN0X187CiB1bnNpZ25lZCBjaGFyIGJpbjJiY2QodW5zaWduZWQgdmFsKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwogCi0jZGVmaW5lIEJDRDJCSU4odmFsKQliY2QyYmluKHZhbCkKLSNkZWZpbmUgQklOMkJDRCh2YWwpCWJpbjJiY2QodmFsKQotCi0vKiBiYWNrd2FyZHMgY29tcGF0ICovCi0jZGVmaW5lIEJDRF9UT19CSU4odmFsKSAoKHZhbCk9QkNEMkJJTih2YWwpKQotI2RlZmluZSBCSU5fVE9fQkNEKHZhbCkgKCh2YWwpPUJJTjJCQ0QodmFsKSkKLQogI2VuZGlmIC8qIF9CQ0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggZmY1YjRjZi4uMWM5MWExNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC03OSw2ICs3OSwxMyBAQAogCiAJdW5zaWduZWQgaW50CQliaV9zaXplOwkvKiByZXNpZHVhbCBJL08gY291bnQgKi8KIAorCS8qCisJICogVG8ga2VlcCB0cmFjayBvZiB0aGUgbWF4IHNlZ21lbnQgc2l6ZSwgd2UgYWNjb3VudCBmb3IgdGhlCisJICogc2l6ZXMgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IG1lcmdlYWJsZSBzZWdtZW50cyBpbiB0aGlzIGJpby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWJpX3NlZ19mcm9udF9zaXplOworCXVuc2lnbmVkIGludAkJYmlfc2VnX2JhY2tfc2l6ZTsKKwogCXVuc2lnbmVkIGludAkJYmlfbWF4X3ZlY3M7CS8qIG1heCBidmxfdmVjcyB3ZSBjYW4gaG9sZCAqLwogCiAJdW5zaWduZWQgaW50CQliaV9jb21wX2NwdTsJLyogY29tcGxldGlvbiBDUFUgKi8KQEAgLTEyOSwyNSArMTM2LDMwIEBACiAgKiBiaXQgMiAtLSBiYXJyaWVyCiAgKglJbnNlcnQgYSBzZXJpYWxpemF0aW9uIHBvaW50IGluIHRoZSBJTyBxdWV1ZSwgZm9yY2luZyBwcmV2aW91c2x5CiAgKglzdWJtaXR0ZWQgSU8gdG8gYmUgY29tcGxldGVkIGJlZm9yZSB0aGlzIG9lbiBpcyBpc3N1ZWQuCi0gKiBiaXQgMyAtLSBmYWlsIGZhc3QsIGRvbid0IHdhbnQgbG93IGxldmVsIGRyaXZlciByZXRyaWVzCi0gKiBiaXQgNCAtLSBzeW5jaHJvbm91cyBJL08gaGludDogdGhlIGJsb2NrIGxheWVyIHdpbGwgdW5wbHVnIGltbWVkaWF0ZWx5CisgKiBiaXQgMyAtLSBzeW5jaHJvbm91cyBJL08gaGludDogdGhlIGJsb2NrIGxheWVyIHdpbGwgdW5wbHVnIGltbWVkaWF0ZWx5CiAgKglOb3RlIHRoYXQgdGhpcyBkb2VzIE5PVCBpbmRpY2F0ZSB0aGF0IHRoZSBJTyBpdHNlbGYgaXMgc3luYywganVzdAogICoJdGhhdCB0aGUgYmxvY2sgbGF5ZXIgd2lsbCBub3QgcG9zdHBvbmUgaXNzdWUgb2YgdGhpcyBJTyBieSBwbHVnZ2luZy4KLSAqIGJpdCA1IC0tIG1ldGFkYXRhIHJlcXVlc3QKKyAqIGJpdCA0IC0tIG1ldGFkYXRhIHJlcXVlc3QKICAqCVVzZWQgZm9yIHRyYWNpbmcgdG8gZGlmZmVyZW50aWF0ZSBtZXRhZGF0YSBhbmQgZGF0YSBJTy4gTWF5IGFsc28KICAqCWdldCBzb21lIHByZWZlcmVudGlhbCB0cmVhdG1lbnQgaW4gdGhlIElPIHNjaGVkdWxlcgotICogYml0IDYgLS0gZGlzY2FyZCBzZWN0b3JzCisgKiBiaXQgNSAtLSBkaXNjYXJkIHNlY3RvcnMKICAqCUluZm9ybXMgdGhlIGxvd2VyIGxldmVsIGRldmljZSB0aGF0IHRoaXMgcmFuZ2Ugb2Ygc2VjdG9ycyBpcyBubyBsb25nZXIKICAqCXVzZWQgYnkgdGhlIGZpbGUgc3lzdGVtIGFuZCBtYXkgdGh1cyBiZSBmcmVlZCBieSB0aGUgZGV2aWNlLiBVc2VkCiAgKglmb3IgZmxhc2ggYmFzZWQgc3RvcmFnZS4KKyAqIGJpdCA2IC0tIGZhaWwgZmFzdCBkZXZpY2UgZXJyb3JzCisgKiBiaXQgNyAtLSBmYWlsIGZhc3QgdHJhbnNwb3J0IGVycm9ycworICogYml0IDggLS0gZmFpbCBmYXN0IGRyaXZlciBlcnJvcnMKKyAqCURvbid0IHdhbnQgZHJpdmVyIHJldHJpZXMgZm9yIGFueSBmYXN0IGZhaWwgd2hhdGV2ZXIgdGhlIHJlYXNvbi4KICAqLwogI2RlZmluZSBCSU9fUlcJCTAJLyogTXVzdCBtYXRjaCBSVyBpbiByZXEgZmxhZ3MgKGJsa2Rldi5oKSAqLwogI2RlZmluZSBCSU9fUldfQUhFQUQJMQkvKiBNdXN0IG1hdGNoIEZBSUxGQVNUIGluIHJlcSBmbGFncyAqLwogI2RlZmluZSBCSU9fUldfQkFSUklFUgkyCi0jZGVmaW5lIEJJT19SV19GQUlMRkFTVAkzCi0jZGVmaW5lIEJJT19SV19TWU5DCTQKLSNkZWZpbmUgQklPX1JXX01FVEEJNQotI2RlZmluZSBCSU9fUldfRElTQ0FSRAk2CisjZGVmaW5lIEJJT19SV19TWU5DCTMKKyNkZWZpbmUgQklPX1JXX01FVEEJNAorI2RlZmluZSBCSU9fUldfRElTQ0FSRAk1CisjZGVmaW5lIEJJT19SV19GQUlMRkFTVF9ERVYJCTYKKyNkZWZpbmUgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVAk3CisjZGVmaW5lIEJJT19SV19GQUlMRkFTVF9EUklWRVIJCTgKIAogLyoKICAqIHVwcGVyIDE2IGJpdHMgb2YgYmlfcncgZGVmaW5lIHRoZSBpbyBwcmlvcml0eSBvZiB0aGlzIGJpbwpAQCAtMTc0LDcgKzE4NiwxMCBAQAogI2RlZmluZSBiaW9fc2VjdG9ycyhiaW8pCSgoYmlvKS0+Ymlfc2l6ZSA+PiA5KQogI2RlZmluZSBiaW9fYmFycmllcihiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQkFSUklFUikpCiAjZGVmaW5lIGJpb19zeW5jKGJpbykJCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfU1lOQykpCi0jZGVmaW5lIGJpb19mYWlsZmFzdChiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfRkFJTEZBU1QpKQorI2RlZmluZSBiaW9fZmFpbGZhc3RfZGV2KGJpbykJKChiaW8pLT5iaV9ydyAmCSgxIDw8IEJJT19SV19GQUlMRkFTVF9ERVYpKQorI2RlZmluZSBiaW9fZmFpbGZhc3RfdHJhbnNwb3J0KGJpbykJXAorCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X2RyaXZlcihiaW8pICgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfRkFJTEZBU1RfRFJJVkVSKSkKICNkZWZpbmUgYmlvX3J3X2FoZWFkKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19BSEVBRCkpCiAjZGVmaW5lIGJpb19yd19tZXRhKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19NRVRBKSkKICNkZWZpbmUgYmlvX2Rpc2NhcmQoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0RJU0NBUkQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaCBiL2luY2x1ZGUvbGludXgvYml0bWFwLmgKaW5kZXggODk3ODFmZC4uYTA4YzMzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC0xMTAsNyArMTEwLDYgQEAKIAogZXh0ZXJuIGludCBiaXRtYXBfc2NucHJpbnRmKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IG5iaXRzKTsKLWV4dGVybiBpbnQgYml0bWFwX3NjbnByaW50Zl9sZW4odW5zaWduZWQgaW50IG5yX2JpdHMpOwogZXh0ZXJuIGludCBfX2JpdG1hcF9wYXJzZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBpc191c2VyLAogCQkJdW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgbmJpdHMpOwogZXh0ZXJuIGludCBiaXRtYXBfcGFyc2VfdXNlcihjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwgdW5zaWduZWQgaW50IHVsZW4sCkBAIC0xMzAsNiArMTI5LDcgQEAKIGV4dGVybiBpbnQgYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgYml0cywgaW50IG9yZGVyKTsKIGV4dGVybiB2b2lkIGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBwb3MsIGludCBvcmRlcik7CiBleHRlcm4gaW50IGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgcG9zLCBpbnQgb3JkZXIpOworZXh0ZXJuIHZvaWQgYml0bWFwX2NvcHlfbGUodm9pZCAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cyk7CiAKICNkZWZpbmUgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKQkJCQkJXAogKAkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGE5MmQ5ZTQuLmExMzUyNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtODcsNyArODcsOSBAQAogICovCiBlbnVtIHJxX2ZsYWdfYml0cyB7CiAJX19SRVFfUlcsCQkvKiBub3Qgc2V0LCByZWFkLiBzZXQsIHdyaXRlICovCi0JX19SRVFfRkFJTEZBU1QsCQkvKiBubyBsb3cgbGV2ZWwgZHJpdmVyIHJldHJpZXMgKi8KKwlfX1JFUV9GQUlMRkFTVF9ERVYsCS8qIG5vIGRyaXZlciByZXRyaWVzIG9mIGRldmljZSBlcnJvcnMgKi8KKwlfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQsIC8qIG5vIGRyaXZlciByZXRyaWVzIG9mIHRyYW5zcG9ydCBlcnJvcnMgKi8KKwlfX1JFUV9GQUlMRkFTVF9EUklWRVIsCS8qIG5vIGRyaXZlciByZXRyaWVzIG9mIGRyaXZlciBlcnJvcnMgKi8KIAlfX1JFUV9ESVNDQVJELAkJLyogcmVxdWVzdCB0byBkaXNjYXJkIHNlY3RvcnMgKi8KIAlfX1JFUV9TT1JURUQsCQkvKiBlbGV2YXRvciBrbm93cyBhYm91dCB0aGlzIHJlcXVlc3QgKi8KIAlfX1JFUV9TT0ZUQkFSUklFUiwJLyogbWF5IG5vdCBiZSBwYXNzZWQgYnkgaW9zY2hlZHVsZXIgKi8KQEAgLTExMSw4ICsxMTMsMTAgQEAKIH07CiAKICNkZWZpbmUgUkVRX1JXCQkoMSA8PCBfX1JFUV9SVykKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX0RFVgkoMSA8PCBfX1JFUV9GQUlMRkFTVF9ERVYpCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQJKDEgPDwgX19SRVFfRkFJTEZBU1RfVFJBTlNQT1JUKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfRFJJVkVSCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RSSVZFUikKICNkZWZpbmUgUkVRX0RJU0NBUkQJKDEgPDwgX19SRVFfRElTQ0FSRCkKLSNkZWZpbmUgUkVRX0ZBSUxGQVNUCSgxIDw8IF9fUkVRX0ZBSUxGQVNUKQogI2RlZmluZSBSRVFfU09SVEVECSgxIDw8IF9fUkVRX1NPUlRFRCkKICNkZWZpbmUgUkVRX1NPRlRCQVJSSUVSCSgxIDw8IF9fUkVRX1NPRlRCQVJSSUVSKQogI2RlZmluZSBSRVFfSEFSREJBUlJJRVIJKDEgPDwgX19SRVFfSEFSREJBUlJJRVIpCkBAIC01NjAsNyArNTY0LDEyIEBACiAjZGVmaW5lIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TUEVDSUFMKQogI2RlZmluZSBibGtfc2Vuc2VfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX1NFTlNFKQogCi0jZGVmaW5lIGJsa19ub3JldHJ5X3JlcXVlc3QocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisjZGVmaW5lIGJsa19mYWlsZmFzdF9kZXYocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfREVWKQorI2RlZmluZSBibGtfZmFpbGZhc3RfdHJhbnNwb3J0KHJxKSAoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCkKKyNkZWZpbmUgYmxrX2ZhaWxmYXN0X2RyaXZlcihycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9EUklWRVIpCisjZGVmaW5lIGJsa19ub3JldHJ5X3JlcXVlc3QocnEpCShibGtfZmFpbGZhc3RfZGV2KHJxKSB8fAlcCisJCQkJIGJsa19mYWlsZmFzdF90cmFuc3BvcnQocnEpIHx8CVwKKwkJCQkgYmxrX2ZhaWxmYXN0X2RyaXZlcihycSkpCiAjZGVmaW5lIGJsa19ycV9zdGFydGVkKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX1NUQVJURUQpCiAKICNkZWZpbmUgYmxrX2FjY291bnRfcnEocnEpCShibGtfcnFfc3RhcnRlZChycSkgJiYgKGJsa19mc19yZXF1ZXN0KHJxKSB8fCBibGtfZGlzY2FyZF9ycShycSkpKSAKQEAgLTcwOCwxMCArNzE3LDEwIEBACiBleHRlcm4gdm9pZCBibGtfcGx1Z19kZXZpY2VfdW5sb2NrZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CiBleHRlcm4gaW50IGJsa19yZW1vdmVfcGx1ZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKIGV4dGVybiB2b2lkIGJsa19yZWNvdW50X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCBiaW8gKik7Ci1leHRlcm4gaW50IHNjc2lfY21kX2lvY3RsKHN0cnVjdCBmaWxlICosIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosCi0JCQkgIHN0cnVjdCBnZW5kaXNrICosIHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKik7Ci1leHRlcm4gaW50IHNnX3Njc2lfaW9jdGwoc3RydWN0IGZpbGUgKiwgc3RydWN0IHJlcXVlc3RfcXVldWUgKiwKLQkJc3RydWN0IGdlbmRpc2sgKiwgc3RydWN0IHNjc2lfaW9jdGxfY29tbWFuZCBfX3VzZXIgKik7CitleHRlcm4gaW50IHNjc2lfY21kX2lvY3RsKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCBnZW5kaXNrICosIGZtb2RlX3QsCisJCQkgIHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKik7CitleHRlcm4gaW50IHNnX3Njc2lfaW9jdGwoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IGdlbmRpc2sgKiwgZm1vZGVfdCwKKwkJCSBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kIF9fdXNlciAqKTsKIAogLyoKICAqIFRlbXBvcmFyeSBleHBvcnQsIHVudGlsIFNDU0kgZ2V0cyBmaXhlZCB1cC4KQEAgLTg1Niw3ICs4NjUsNiBAQAogZXh0ZXJuIGludCBibGtfcnFfbWFwX3NnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBzY2F0dGVybGlzdCAqKTsKIGV4dGVybiB2b2lkIGJsa19kdW1wX3JxX2ZsYWdzKHN0cnVjdCByZXF1ZXN0ICosIGNoYXIgKik7CiBleHRlcm4gdm9pZCBnZW5lcmljX3VucGx1Z19kZXZpY2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7Ci1leHRlcm4gdm9pZCBfX2dlbmVyaWNfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKIGV4dGVybiBsb25nIG5yX2Jsb2NrZGV2X3BhZ2VzKHZvaWQpOwogCiBpbnQgYmxrX2dldF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKQEAgLTkwMiw3ICs5MTAsOCBAQAogKiBjb21tYW5kIGZpbHRlciBmdW5jdGlvbnMKICovCiBleHRlcm4gaW50IGJsa192ZXJpZnlfY29tbWFuZChzdHJ1Y3QgYmxrX2NtZF9maWx0ZXIgKmZpbHRlciwKLQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmNtZCwgaW50IGhhc193cml0ZV9wZXJtKTsKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmNtZCwgZm1vZGVfdCBoYXNfd3JpdGVfcGVybSk7CitleHRlcm4gdm9pZCBibGtfdW5yZWdpc3Rlcl9maWx0ZXIoc3RydWN0IGdlbmRpc2sgKmRpc2spOwogZXh0ZXJuIHZvaWQgYmxrX3NldF9jbWRfZmlsdGVyX2RlZmF1bHRzKHN0cnVjdCBibGtfY21kX2ZpbHRlciAqZmlsdGVyKTsKIAogI2RlZmluZSBNQVhfUEhZU19TRUdNRU5UUyAxMjgKQEAgLTEwNDgsNiArMTA1NywyMiBAQAogCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKK3N0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CisJaW50ICgqb3BlbikgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCk7CisJaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBnZW5kaXNrICosIGZtb2RlX3QpOworCWludCAoKmxvY2tlZF9pb2N0bCkgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworCWludCAoKmlvY3RsKSAoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqY29tcGF0X2lvY3RsKSAoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqZGlyZWN0X2FjY2VzcykgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc2VjdG9yX3QsCisJCQkJCQl2b2lkICoqLCB1bnNpZ25lZCBsb25nICopOworCWludCAoKm1lZGlhX2NoYW5nZWQpIChzdHJ1Y3QgZ2VuZGlzayAqKTsKKwlpbnQgKCpyZXZhbGlkYXRlX2Rpc2spIChzdHJ1Y3QgZ2VuZGlzayAqKTsKKwlpbnQgKCpnZXRnZW8pKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc3RydWN0IGhkX2dlb21ldHJ5ICopOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworZXh0ZXJuIGludCBfX2Jsa2Rldl9kcml2ZXJfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LCB1bnNpZ25lZCBpbnQsCisJCQkJIHVuc2lnbmVkIGxvbmcpOwogI2Vsc2UgLyogQ09ORklHX0JMT0NLICovCiAvKgogICogc3R1YnMgZm9yIHdoZW4gdGhlIGJsb2NrIGxheWVyIGlzIGNvbmZpZ3VyZWQgb3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAppbmRleCAzYTMxZWI1Li5iZGY1MDVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAlCTEtfVENfQUhFQUQJPSAxIDw8IDExLAkvKiByZWFkYWhlYWQgKi8KIAlCTEtfVENfTUVUQQk9IDEgPDwgMTIsCS8qIG1ldGFkYXRhICovCiAJQkxLX1RDX0RJU0NBUkQJPSAxIDw8IDEzLAkvKiBkaXNjYXJkIHJlcXVlc3RzICovCisJQkxLX1RDX0RSVl9EQVRBCT0gMSA8PCAxNCwJLyogYmluYXJ5IHBlci1kcml2ZXIgZGF0YSAqLwogCiAJQkxLX1RDX0VORAk9IDEgPDwgMTUsCS8qIG9ubHkgMTYtYml0cywgcmVtaW5kZXIgKi8KIH07CkBAIC01MSw2ICs1Miw3IEBACiAJX19CTEtfVEFfQk9VTkNFLAkJLyogYmlvIHdhcyBib3VuY2VkICovCiAJX19CTEtfVEFfUkVNQVAsCQkJLyogYmlvIHdhcyByZW1hcHBlZCAqLwogCV9fQkxLX1RBX0FCT1JULAkJCS8qIHJlcXVlc3QgYWJvcnRlZCAqLworCV9fQkxLX1RBX0RSVl9EQVRBLAkJLyogZHJpdmVyLXNwZWNpZmljIGJpbmFyeSBkYXRhICovCiB9OwogCiAvKgpAQCAtODIsNiArODQsNyBAQAogI2RlZmluZSBCTEtfVEFfQk9VTkNFCQkoX19CTEtfVEFfQk9VTkNFKQogI2RlZmluZSBCTEtfVEFfUkVNQVAJCShfX0JMS19UQV9SRU1BUCB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKICNkZWZpbmUgQkxLX1RBX0FCT1JUCQkoX19CTEtfVEFfQUJPUlQgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lIEJMS19UQV9EUlZfREFUQQkoX19CTEtfVEFfRFJWX0RBVEEgfCBCTEtfVENfQUNUKEJMS19UQ19EUlZfREFUQSkpCiAKICNkZWZpbmUgQkxLX1ROX1BST0NFU1MJCShfX0JMS19UTl9QUk9DRVNTIHwgQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKSkKICNkZWZpbmUgQkxLX1ROX1RJTUVTVEFNUAkoX19CTEtfVE5fVElNRVNUQU1QIHwgQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKSkKQEAgLTMxNyw2ICszMjAsMzQgQEAKIAlfX2Jsa19hZGRfdHJhY2UoYnQsIGZyb20sIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgQkxLX1RBX1JFTUFQLCAhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLCBzaXplb2YociksICZyKTsKIH0KIAorLyoqCisgKiBibGtfYWRkX2RyaXZlcl9kYXRhIC0gQWRkIGJpbmFyeSBtZXNzYWdlIHdpdGggZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQHJxOgkJaW8gcmVxdWVzdAorICogQGRhdGE6CWRyaXZlci1zcGVjaWZpYyBkYXRhCisgKiBAbGVuOglsZW5ndGggb2YgZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBTb21lIGRyaXZlcnMgbWlnaHQgd2FudCB0byB3cml0ZSBkcml2ZXItc3BlY2lmaWMgZGF0YSBwZXIgcmVxdWVzdC4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgICAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgMCwgQkxLX1RBX0RSVl9EQVRBLAorCQkJCXJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7CisJZWxzZQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIHJxLT5oYXJkX3NlY3RvciwgcnEtPmhhcmRfbnJfc2VjdG9ycyA8PCA5LAorCQkJCTAsIEJMS19UQV9EUlZfREFUQSwgcnEtPmVycm9ycywgbGVuLCBkYXRhKTsKK30KKwogZXh0ZXJuIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAkJCSAgIGNoYXIgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpOwpAQCAtMzMwLDYgKzM2MSw3IEBACiAjZGVmaW5lIGJsa19hZGRfdHJhY2VfZ2VuZXJpYyhxLCBycSwgcncsIHdoYXQpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmxrX2FkZF90cmFjZV9wZHVfaW50KHEsIHdoYXQsIGJpbywgcGR1KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJsa19hZGRfdHJhY2VfcmVtYXAocSwgYmlvLCBkZXYsIGYsIHQpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBibGtfYWRkX2RyaXZlcl9kYXRhKHEsIHJxLCBkYXRhLCBsZW4pCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBkb19ibGtfdHJhY2Vfc2V0dXAocSwgbmFtZSwgZGV2LCBidXRzKQkoLUVOT1RUWSkKICNkZWZpbmUgYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgYXJnKQkoLUVOT1RUWSkKICNkZWZpbmUgYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCBzdGFydCkJCSgtRU5PVFRZKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCmluZGV4IGVhZGFhYjQuLjNjZTY0YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTMyMiw3ICszMjIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCB0cnlsb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXJldHVybiBsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXQoQkhfTG9jaywgJmJoLT5iX3N0YXRlKSk7CisJcmV0dXJuIGxpa2VseSghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZAppbmRleCAxMTMzZDVmLi5mYmFhN2Y5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvS2J1aWxkCkBAIC0xLDMgKzEsNCBAQAogdW5pZmRlZi15ICs9IGJpZ19lbmRpYW4uaAogdW5pZmRlZi15ICs9IGxpdHRsZV9lbmRpYW4uaAogdW5pZmRlZi15ICs9IHN3YWIuaAordW5pZmRlZi15ICs9IHN3YWJiLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaAppbmRleCA0NGY5NWI5Li4xY2JhM2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAKICNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKShfX3UzMikoeCkpCiAjZGVmaW5lIF9fY29uc3RhbnRfbnRvaGwoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2JlMzIpKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCmluZGV4IDRjYzE3MGEuLmNlZGMxYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KIAogI2RlZmluZSBfX2NvbnN0YW50X2h0b25sKHgpICgoX19mb3JjZSBfX2JlMzIpX19fY29uc3RhbnRfc3dhYjMyKCh4KSkpCiAjZGVmaW5lIF9fY29uc3RhbnRfbnRvaGwoeCkgX19fY29uc3RhbnRfc3dhYjMyKChfX2ZvcmNlIF9fYmUzMikoeCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nkcm9tLmggYi9pbmNsdWRlL2xpbnV4L2Nkcm9tLmgKaW5kZXggNWRiMjY1ZS4uMGI0OWUwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZHJvbS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2Ryb20uaApAQCAtOTg3LDExICs5ODcsMTEgQEAKIH07CiAKIC8qIHRoZSBnZW5lcmFsIGJsb2NrX2RldmljZSBvcGVyYXRpb25zIHN0cnVjdHVyZTogKi8KLWV4dGVybiBpbnQgY2Ryb21fb3BlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgc3RydWN0IGlub2RlICppcCwKLQkJCXN0cnVjdCBmaWxlICpmcCk7Ci1leHRlcm4gaW50IGNkcm9tX3JlbGVhc2Uoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHN0cnVjdCBmaWxlICpmcCk7Ci1leHRlcm4gaW50IGNkcm9tX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKLQkJc3RydWN0IGlub2RlICppcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBjZHJvbV9vcGVuKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorCQkJZm1vZGVfdCBtb2RlKTsKK2V4dGVybiB2b2lkIGNkcm9tX3JlbGVhc2Uoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGZtb2RlX3QgbW9kZSk7CitleHRlcm4gaW50IGNkcm9tX2lvY3RsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorCQkgICAgICAgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gaW50IGNkcm9tX21lZGlhX2NoYW5nZWQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICopOwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX2Nkcm9tKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IDMwOTM0ZTQuLjhiMDBmNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtOSwxMiArOSwxMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nncm91cHN0YXRzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJpb19oZWFwLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KIAogI2lmZGVmIENPTkZJR19DR1JPVVBTCiAKQEAgLTEzNyw2ICsxMzcsMTUgQEAKIAkgKiByZWxlYXNlX2xpc3RfbG9jawogCSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcmVsZWFzZV9saXN0OworCisJLyogcGlkc19tdXRleCBwcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93ICovCisJc3RydWN0IHJ3X3NlbWFwaG9yZSBwaWRzX211dGV4OworCS8qIEFycmF5IG9mIHByb2Nlc3MgaWRzIGluIHRoZSBjZ3JvdXAgKi8KKwlwaWRfdCAqdGFza3NfcGlkczsKKwkvKiBIb3cgbWFueSBmaWxlcyBhcmUgdXNpbmcgdGhlIGN1cnJlbnQgdGFza3NfcGlkcyBhcnJheSAqLworCWludCBwaWRzX3VzZV9jb3VudDsKKwkvKiBMZW5ndGggb2YgdGhlIGN1cnJlbnQgdGFza3NfcGlkcyBhcnJheSAqLworCWludCBwaWRzX2xlbmd0aDsKIH07CiAKIC8qIEEgY3NzX3NldCBpcyBhIHN0cnVjdHVyZSBob2xkaW5nIHBvaW50ZXJzIHRvIGEgc2V0IG9mCkBAIC0xNDksNyArMTU4LDcgQEAKIHN0cnVjdCBjc3Nfc2V0IHsKIAogCS8qIFJlZmVyZW5jZSBjb3VudCAqLwotCXN0cnVjdCBrcmVmIHJlZjsKKwlhdG9taWNfdCByZWZjb3VudDsKIAogCS8qCiAJICogTGlzdCBydW5uaW5nIHRocm91Z2ggYWxsIGNncm91cCBncm91cHMgaW4gdGhlIHNhbWUgaGFzaApAQCAtMzk0LDYgKzQwMyw5IEBACiBpbnQgY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKTsKIGludCBjZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKK3ZvaWQgY2dyb3VwX21tX293bmVyX2NhbGxiYWNrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZCwKKwkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7CisKICNlbHNlIC8qICFDT05GSUdfQ0dST1VQUyAqLwogCiBzdGF0aWMgaW5saW5lIGludCBjZ3JvdXBfaW5pdF9lYXJseSh2b2lkKSB7IHJldHVybiAwOyB9CkBAIC00MTIsMTUgKzQyNCw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLAorCQkJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KSB7fQorCiAjZW5kaWYgLyogIUNPTkZJR19DR1JPVVBTICovCiAKLSNpZmRlZiBDT05GSUdfTU1fT1dORVIKLWV4dGVybiB2b2lkCi1jZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7Ci0jZWxzZSAvKiAhQ09ORklHX01NX09XTkVSICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KQotewotfQotI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwogI2VuZGlmIC8qIF9MSU5VWF9DR1JPVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAppbmRleCBlMjg3NzQ1Li45YzIyMzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaApAQCAtNDgsMyArNDgsOSBAQAogI2VuZGlmCiAKIC8qICovCisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX0ZSRUVaRVIKK1NVQlNZUyhmcmVlemVyKQorI2VuZGlmCisKKy8qICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKaW5kZXggNTVlNDM0Zi4uZjg4ZDMyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaApAQCAtNDUsNyArNDUsOCBAQAogICogQHJlYWQ6CQlyZXR1cm5zIGEgY3ljbGUgdmFsdWUKICAqIEBtYXNrOgkJYml0bWFzayBmb3IgdHdvJ3MgY29tcGxlbWVudAogICoJCQlzdWJ0cmFjdGlvbiBvZiBub24gNjQgYml0IGNvdW50ZXJzCi0gKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllcgorICogQG11bHQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIG11bHRpcGxpZXIgKGFkanVzdGVkIGJ5IE5UUCkKKyAqIEBtdWx0X29yaWc6CQljeWNsZSB0byBuYW5vc2Vjb25kIG11bHRpcGxpZXIgKHVuYWRqdXN0ZWQgYnkgTlRQKQogICogQHNoaWZ0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBkaXZpc29yIChwb3dlciBvZiB0d28pCiAgKiBAZmxhZ3M6CQlmbGFncyBkZXNjcmliaW5nIHNwZWNpYWwgcHJvcGVydGllcwogICogQHZyZWFkOgkJdnN5c2NhbGwgYmFzZWQgcmVhZApAQCAtNjMsNiArNjQsNyBAQAogCWN5Y2xlX3QgKCpyZWFkKSh2b2lkKTsKIAljeWNsZV90IG1hc2s7CiAJdTMyIG11bHQ7CisJdTMyIG11bHRfb3JpZzsKIAl1MzIgc2hpZnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljeWNsZV90ICgqdnJlYWQpKHZvaWQpOwpAQCAtNzcsNiArNzksNyBAQAogCS8qIHRpbWVrZWVwaW5nIHNwZWNpZmljIGRhdGEsIGlnbm9yZSAqLwogCWN5Y2xlX3QgY3ljbGVfaW50ZXJ2YWw7CiAJdTY0CXh0aW1lX2ludGVydmFsOworCXUzMglyYXdfaW50ZXJ2YWw7CiAJLyoKIAkgKiBTZWNvbmQgcGFydCBpcyB3cml0dGVuIGF0IGVhY2ggdGltZXIgaW50ZXJydXB0CiAJICogS2VlcCBpdCBpbiBhIGRpZmZlcmVudCBjYWNoZSBsaW5lIHRvIGRpcnR5IG5vCkBAIC04NSw2ICs4OCw3IEBACiAJY3ljbGVfdCBjeWNsZV9sYXN0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAJdTY0IHh0aW1lX25zZWM7CiAJczY0IGVycm9yOworCXN0cnVjdCB0aW1lc3BlYyByYXdfdGltZTsKIAogI2lmZGVmIENPTkZJR19DTE9DS1NPVVJDRV9XQVRDSERPRwogCS8qIFdhdGNoZG9nIHJlbGF0ZWQgZGF0YSwgdXNlZCBieSB0aGUgZnJhbWV3b3JrICovCkBAIC0yMDEsMTcgKzIwNSwxOSBAQAogewogCXU2NCB0bXA7CiAKLQkvKiBYWFggLSBBbGwgb2YgdGhpcyBjb3VsZCB1c2UgYSB3aG9sZSBsb3Qgb2Ygb3B0aW1pemF0aW9uICovCisJLyogRG8gdGhlIG5zIC0+IGN5Y2xlIGNvbnZlcnNpb24gZmlyc3QsIHVzaW5nIG9yaWdpbmFsIG11bHQgKi8KIAl0bXAgPSBsZW5ndGhfbnNlYzsKIAl0bXAgPDw9IGMtPnNoaWZ0OwotCXRtcCArPSBjLT5tdWx0LzI7Ci0JZG9fZGl2KHRtcCwgYy0+bXVsdCk7CisJdG1wICs9IGMtPm11bHRfb3JpZy8yOworCWRvX2Rpdih0bXAsIGMtPm11bHRfb3JpZyk7CiAKIAljLT5jeWNsZV9pbnRlcnZhbCA9IChjeWNsZV90KXRtcDsKIAlpZiAoYy0+Y3ljbGVfaW50ZXJ2YWwgPT0gMCkKIAkJYy0+Y3ljbGVfaW50ZXJ2YWwgPSAxOwogCisJLyogR28gYmFjayBmcm9tIGN5Y2xlcyAtPiBzaGlmdGVkIG5zLCB0aGlzIHRpbWUgdXNlIG50cCBhZGp1c2VkIG11bHQgKi8KIAljLT54dGltZV9pbnRlcnZhbCA9ICh1NjQpYy0+Y3ljbGVfaW50ZXJ2YWwgKiBjLT5tdWx0OworCWMtPnJhd19pbnRlcnZhbCA9ICgodTY0KWMtPmN5Y2xlX2ludGVydmFsICogYy0+bXVsdF9vcmlnKSA+PiBjLT5zaGlmdDsKIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggODMyMjE0MS4uOTgxMTVkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtNDQsNiArNDQsOCBAQAogIyBlcnJvciBTb3JyeSwgeW91ciBjb21waWxlciBpcyB0b28gb2xkL25vdCByZWNvZ25pemVkLgogI2VuZGlmCiAKKyNkZWZpbmUgbm90cmFjZSBfX2F0dHJpYnV0ZV9fKChub19pbnN0cnVtZW50X2Z1bmN0aW9uKSkKKwogLyogSW50ZWwgY29tcGlsZXIgZGVmaW5lcyBfX0dOVUNfXy4gU28gd2Ugd2lsbCBvdmVyd3JpdGUgaW1wbGVtZW50YXRpb25zCiAgKiBjb21pbmcgZnJvbSBhYm92ZSBoZWFkZXIgZmlsZXMgaGVyZQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaCBiL2luY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oCmluZGV4IDAyNWU0ZjUuLjJkYWMwNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oCkBAIC04LDE3ICs4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjZGVmaW5lIEVMRkNPUkVfQUREUl9NQVgJKC0xVUxMKQorI2RlZmluZSBFTEZDT1JFX0FERFJfRVJSCSgtMlVMTCkKIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHI7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotI2VuZGlmCiAKIGV4dGVybiBzc2l6ZV90IGNvcHlfb2xkbWVtX3BhZ2UodW5zaWduZWQgbG9uZywgY2hhciAqLCBzaXplX3QsCiAJCQkJCQl1bnNpZ25lZCBsb25nLCBpbnQpOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY192bWNvcmVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfdm1jb3JlOwogCiAvKiBBcmNoaXRlY3R1cmUgY29kZSBkZWZpbmVzIHRoaXMgaWYgdGhlcmUgYXJlIG90aGVyIHBvc3NpYmxlIEVMRgogICogbWFjaGluZSB0eXBlcywgZS5nLiBvbiBiaS1hcmNoIGNhcGFibGUgaGFyZHdhcmUuICovCkBAIC0yOCwxMCArMjMsNDMgQEAKIAogI2RlZmluZSB2bWNvcmVfZWxmX2NoZWNrX2FyY2goeCkgKGVsZl9jaGVja19hcmNoKHgpIHx8IHZtY29yZV9lbGZfY2hlY2tfYXJjaF9jcm9zcyh4KSkKIAorLyoKKyAqIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrcyB3aGV0aGVyIHRoaXMga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZgorICogcHJldmlvdXMga2VybmVsIG9yIG5vdC4gVGhpcyBpcyBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nIGlmIHByZXZpb3VzIGtlcm5lbAorICogaGFzIHBhc3NlZCB0aGUgZWxmIGNvcmUgaGVhZGVyIGFkZHJlc3Mgb24gY29tbWFuZCBsaW5lLgorICoKKyAqIFRoaXMgaXMgbm90IGp1c3QgYSB0ZXN0IGlmIENPTkZJR19DUkFTSF9EVU1QIGlzIGVuYWJsZWQgb3Igbm90LiBJdCB3aWxsCisgKiByZXR1cm4gMSBpZiBDT05GSUdfQ1JBU0hfRFVNUD15IGFuZCBpZiBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljIG9mCisgKiBwcmV2aW91cyBrZXJuZWwuCisgKi8KKwogc3RhdGljIGlubGluZSBpbnQgaXNfa2R1bXBfa2VybmVsKHZvaWQpCiB7CiAJcmV0dXJuIChlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWCkgPyAxIDogMDsKIH0KKworLyogaXNfdm1jb3JlX3VzYWJsZSgpIGNoZWNrcyBpZiB0aGUga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBhbmQKKyAqIHRoZSB2bWNvcmUgcmVnaW9uIGlzIHVzYWJsZS4KKyAqCisgKiBUaGlzIG1ha2VzIHVzZSBvZiB0aGUgZmFjdCB0aGF0IGR1ZSB0byBhbGlnbm1lbnQgLTJVTEwgaXMgbm90CisgKiBhIHZhbGlkIHBvaW50ZXIsIG11Y2ggaW4gdGhlIHZhaW4gb2YgSVNfRVJSKCksIGV4Y2VwdAorICogZGVhbGluZyBkaXJlY3RseSB3aXRoIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyByYXRoZXIgdGhhbiBhIHBvaW50ZXIuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgaXNfdm1jb3JlX3VzYWJsZSh2b2lkKQoreworCXJldHVybiBpc19rZHVtcF9rZXJuZWwoKSAmJiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX0VSUiA/IDEgOiAwOworfQorCisvKiB2bWNvcmVfdW51c2FibGUoKSBtYXJrcyB0aGUgdm1jb3JlIGFzIHVudXNhYmxlLAorICogd2l0aG91dCBkaXN0dXJiaW5nIHRoZSBsb2dpYyBvZiBpc19rZHVtcF9rZXJuZWwoKQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bWNvcmVfdW51c2FibGUodm9pZCkKK3sKKwlpZiAoaXNfa2R1bXBfa2VybmVsKCkpCisJCWVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9FUlI7Cit9CiAjZWxzZSAvKiAhQ09ORklHX0NSQVNIX0RVTVAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGlzX2tkdW1wX2tlcm5lbCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCmluZGV4IGVmYmExZGUuLmEzNzM1OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMjI4LDkgKzIyOCw5IEBACiAKIC8qIGFsbG9jYXRlL2RlLWFsbG9jYXRlICovCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Moc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWRkX2NpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiB2b2lkIHNocmlua19kY2FjaGVfcGFyZW50KHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX2Zvcl91bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpAQCAtMjg3LDYgKzI4Nyw3IEBACiAKIC8qIHVzZWQgZm9yIHJlbmFtZSgpIGFuZCBiYXNrZXRzICovCiBleHRlcm4gdm9pZCBkX21vdmUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmRfYW5jZXN0b3Ioc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwogCiAvKiBhcHBlbmRpeCBtYXkgZWl0aGVyIGJlIE5VTEwgb3IgYmUgdXNlZCBmb3IgdHJhbnNuYW1lIHN1ZmZpeGVzICovCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfbG9va3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IDA4ZDc4MzUuLmMxN2ZkMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC02OSw4ICs2OSw3IEBACiAKIHR5cGVkZWYgaW50ICgqZG1fbWVzc2FnZV9mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndik7CiAKLXR5cGVkZWYgaW50ICgqZG1faW9jdGxfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKK3R5cGVkZWYgaW50ICgqZG1faW9jdGxfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIHR5cGVkZWYgaW50ICgqZG1fbWVyZ2VfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJ2ZWNfbWVyZ2VfZGF0YSAqYnZtLApAQCAtODUsNyArODQsNyBAQAogCiBzdHJ1Y3QgZG1fZGV2IHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCWludCBtb2RlOworCWZtb2RlX3QgbW9kZTsKIAljaGFyIG5hbWVbMTZdOwogfTsKIApAQCAtOTUsNyArOTQsNyBAQAogICogRklYTUU6IHRvbyBtYW55IGFyZ3VtZW50cy4KICAqLwogaW50IGRtX2dldF9kZXZpY2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIGNvbnN0IGNoYXIgKnBhdGgsIHNlY3Rvcl90IHN0YXJ0LAotCQkgIHNlY3Rvcl90IGxlbiwgaW50IG1vZGUsIHN0cnVjdCBkbV9kZXYgKipyZXN1bHQpOworCQkgIHNlY3Rvcl90IGxlbiwgZm1vZGVfdCBtb2RlLCBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KTsKIHZvaWQgZG1fcHV0X2RldmljZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGRtX2RldiAqZCk7CiAKIC8qCkBAIC0yMjMsNyArMjIyLDcgQEAKIC8qCiAgKiBGaXJzdCBjcmVhdGUgYW4gZW1wdHkgdGFibGUuCiAgKi8KLWludCBkbV90YWJsZV9jcmVhdGUoc3RydWN0IGRtX3RhYmxlICoqcmVzdWx0LCBpbnQgbW9kZSwKK2ludCBkbV90YWJsZV9jcmVhdGUoc3RydWN0IGRtX3RhYmxlICoqcmVzdWx0LCBmbW9kZV90IG1vZGUsCiAJCSAgICB1bnNpZ25lZCBudW1fdGFyZ2V0cywgc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIAogLyoKQEAgLTI1NCw3ICsyNTMsNyBAQAogICovCiBzZWN0b3JfdCBkbV90YWJsZV9nZXRfc2l6ZShzdHJ1Y3QgZG1fdGFibGUgKnQpOwogdW5zaWduZWQgaW50IGRtX3RhYmxlX2dldF9udW1fdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQpOwotaW50IGRtX3RhYmxlX2dldF9tb2RlKHN0cnVjdCBkbV90YWJsZSAqdCk7CitmbW9kZV90IGRtX3RhYmxlX2dldF9tb2RlKHN0cnVjdCBkbV90YWJsZSAqdCk7CiBzdHJ1Y3QgbWFwcGVkX2RldmljZSAqZG1fdGFibGVfZ2V0X21kKHN0cnVjdCBkbV90YWJsZSAqdCk7CiAKIC8qCkBAIC0zNTQsNiArMzUzLDkgQEAKICAqLwogI2RlZmluZSBkbV9yb3VuZF91cChuLCBzeikgKGRtX2Rpdl91cCgobiksIChzeikpICogKHN6KSkKIAorI2RlZmluZSBkbV9hcnJheV90b29fYmlnKGZpeGVkLCBvYmosIG51bSkgXAorCSgobnVtKSA+IChVSU5UX01BWCAtIChmaXhlZCkpIC8gKG9iaikpCisKIHN0YXRpYyBpbmxpbmUgc2VjdG9yX3QgdG9fc2VjdG9yKHVuc2lnbmVkIGxvbmcgbikKIHsKIAlyZXR1cm4gKG4gPj4gU0VDVE9SX1NISUZUKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDk4N2Y1OTEuLjFhMzY4NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtNDUwLDcgKzQ1MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkICpkZXZfZ2V0X2RydmRhdGEoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkICpkZXZfZ2V0X2RydmRhdGEoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBkZXYtPmRyaXZlcl9kYXRhOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1yZWdpb24taGFzaC5oIGIvaW5jbHVkZS9saW51eC9kbS1yZWdpb24taGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZTY1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLXJlZ2lvbi1oYXNoLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgU2lzdGluYSBTb2Z0d2FyZSBMaW1pdGVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmljZS1NYXBwZXIgZGlydHkgcmVnaW9uIGhhc2ggaW50ZXJmYWNlLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKyNpZm5kZWYgRE1fUkVHSU9OX0hBU0hfSAorI2RlZmluZSBETV9SRUdJT05fSEFTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9kbS1kaXJ0eS1sb2cuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaW9uIGhhc2gKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgZG1fcmVnaW9uX2hhc2g7CitzdHJ1Y3QgZG1fcmVnaW9uOworCisvKgorICogU3RhdGVzIGEgcmVnaW9uIGNhbiBoYXZlLgorICovCitlbnVtIGRtX3JoX3JlZ2lvbl9zdGF0ZXMgeworCURNX1JIX0NMRUFOCSA9IDB4MDEsCS8qIE5vIHdyaXRlcyBpbiBmbGlnaHQuICovCisJRE1fUkhfRElSVFkJID0gMHgwMiwJLyogV3JpdGVzIGluIGZsaWdodC4gKi8KKwlETV9SSF9OT1NZTkMJID0gMHgwNCwJLyogT3V0IG9mIHN5bmMuICovCisJRE1fUkhfUkVDT1ZFUklORyA9IDB4MDgsCS8qIFVuZGVyIHJlc3luY2hyb25pemF0aW9uLiAqLworfTsKKworLyoKKyAqIFJlZ2lvbiBoYXNoIGNyZWF0ZS9kZXN0cm95LgorICovCitzdHJ1Y3QgYmlvX2xpc3Q7CitzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKmRtX3JlZ2lvbl9oYXNoX2NyZWF0ZSgKKwkJdm9pZCAqY29udGV4dCwgdm9pZCAoKmRpc3BhdGNoX2Jpb3MpKHZvaWQgKmNvbnRleHQsCisJCQkJCQkgICAgIHN0cnVjdCBiaW9fbGlzdCAqYmlvcyksCisJCXZvaWQgKCp3YWtldXBfd29ya2Vycykodm9pZCAqY29udGV4dCksCisJCXZvaWQgKCp3YWtldXBfYWxsX3JlY292ZXJ5X3dhaXRlcnMpKHZvaWQgKmNvbnRleHQpLAorCQlzZWN0b3JfdCB0YXJnZXRfYmVnaW4sIHVuc2lnbmVkIG1heF9yZWNvdmVyeSwKKwkJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCB1aW50MzJfdCByZWdpb25fc2l6ZSwKKwkJcmVnaW9uX3QgbnJfcmVnaW9ucyk7Cit2b2lkIGRtX3JlZ2lvbl9oYXNoX2Rlc3Ryb3koc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCk7CisKK3N0cnVjdCBkbV9kaXJ0eV9sb2cgKmRtX3JoX2RpcnR5X2xvZyhzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKTsKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zLgorICovCityZWdpb25fdCBkbV9yaF9iaW9fdG9fcmVnaW9uKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHN0cnVjdCBiaW8gKmJpbyk7CitzZWN0b3JfdCBkbV9yaF9yZWdpb25fdG9fc2VjdG9yKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHJlZ2lvbl90IHJlZ2lvbik7Cit2b2lkICpkbV9yaF9yZWdpb25fY29udGV4dChzdHJ1Y3QgZG1fcmVnaW9uICpyZWcpOworCisvKgorICogR2V0IHJlZ2lvbiBzaXplIGFuZCBrZXkgKGllLiBudW1iZXIgb2YgdGhlIHJlZ2lvbikuCisgKi8KK3NlY3Rvcl90IGRtX3JoX2dldF9yZWdpb25fc2l6ZShzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKTsKK3JlZ2lvbl90IGRtX3JoX2dldF9yZWdpb25fa2V5KHN0cnVjdCBkbV9yZWdpb24gKnJlZyk7CisKKy8qCisgKiBHZXQvc2V0L3VwZGF0ZSByZWdpb24gc3RhdGUgKGFuZCBkaXJ0eSBsb2cpLgorICoKKyAqLworaW50IGRtX3JoX2dldF9zdGF0ZShzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCByZWdpb25fdCByZWdpb24sIGludCBtYXlfYmxvY2spOwordm9pZCBkbV9yaF9zZXRfc3RhdGUoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwgcmVnaW9uX3QgcmVnaW9uLAorCQkgICAgIGVudW0gZG1fcmhfcmVnaW9uX3N0YXRlcyBzdGF0ZSwgaW50IG1heV9ibG9jayk7CisKKy8qIE5vbi16ZXJvIGVycm9yc19oYW5kbGVkIGxlYXZlcyB0aGUgc3RhdGUgb2YgdGhlIHJlZ2lvbiBOT1NZTkMgKi8KK3ZvaWQgZG1fcmhfdXBkYXRlX3N0YXRlcyhzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCBpbnQgZXJyb3JzX2hhbmRsZWQpOworCisvKiBGbHVzaCB0aGUgcmVnaW9uIGhhc2ggYW5kIGRpcnR5IGxvZy4gKi8KK2ludCBkbV9yaF9mbHVzaChzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKTsKKworLyogSW5jL2RlYyBwZW5kaW5nIGNvdW50IG9uIHJlZ2lvbnMuICovCit2b2lkIGRtX3JoX2luY19wZW5kaW5nKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHN0cnVjdCBiaW9fbGlzdCAqYmlvcyk7Cit2b2lkIGRtX3JoX2RlYyhzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoLCByZWdpb25fdCByZWdpb24pOworCisvKiBEZWxheSBiaW9zIG9uIHJlZ2lvbnMuICovCit2b2lkIGRtX3JoX2RlbGF5KHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHN0cnVjdCBiaW8gKmJpbyk7CisKK3ZvaWQgZG1fcmhfbWFya19ub3N5bmMoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwKKwkJICAgICAgIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgZG9uZSwgaW50IGVycm9yKTsKKworLyoKKyAqIFJlZ2lvbiByZWNvdmVyeSBjb250cm9sLgorICovCisKKy8qIFByZXBhcmUgc29tZSByZWdpb25zIGZvciByZWNvdmVyeSBieSBzdGFydGluZyB0byBxdWllc2NlIHRoZW0uICovCit2b2lkIGRtX3JoX3JlY292ZXJ5X3ByZXBhcmUoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCk7CisKKy8qIFRyeSBmZXRjaGluZyBhIHF1aWVzY2VkIHJlZ2lvbiBmb3IgcmVjb3ZlcnkuICovCitzdHJ1Y3QgZG1fcmVnaW9uICpkbV9yaF9yZWNvdmVyeV9zdGFydChzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKTsKKworLyogUmVwb3J0IHJlY292ZXJ5IGVuZCBvbiBhIHJlZ2lvbi4gKi8KK3ZvaWQgZG1fcmhfcmVjb3ZlcnlfZW5kKHN0cnVjdCBkbV9yZWdpb24gKnJlZywgaW50IGVycm9yKTsKKworLyogUmV0dXJucyBudW1iZXIgb2YgcmVnaW9ucyB3aXRoIHJlY292ZXJ5IHdvcmsgb3V0c3RhbmRpbmcuICovCitpbnQgZG1fcmhfcmVjb3ZlcnlfaW5fZmxpZ2h0KHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgpOworCisvKiBTdGFydC9zdG9wIHJlY292ZXJ5LiAqLwordm9pZCBkbV9yaF9zdGFydF9yZWNvdmVyeShzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKTsKK3ZvaWQgZG1fcmhfc3RvcF9yZWNvdmVyeShzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoKTsKKworI2VuZGlmIC8qIERNX1JFR0lPTl9IQVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hX3JlbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmgKaW5kZXggYmZmNWM2NS4uOTUyZGYzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmgKQEAgLTIsMTUgKzIsMTQgQEAKICNkZWZpbmUgX0RNQV9SRU1BUFBJTkdfSAogCiAvKgotICogV2UgbmVlZCBhIGZpeGVkIFBBR0VfU0laRSBvZiA0SyBpcnJlc3BlY3RpdmUgb2YKLSAqIGFyY2ggUEFHRV9TSVpFIGZvciBJT01NVSBwYWdlIHRhYmxlcy4KKyAqIFZULWQgaGFyZHdhcmUgdXNlcyA0S2lCIHBhZ2Ugc2l6ZSByZWdhcmRsZXNzIG9mIGhvc3QgcGFnZSBzaXplLgogICovCi0jZGVmaW5lIFBBR0VfU0hJRlRfNEsJCSgxMikKLSNkZWZpbmUgUEFHRV9TSVpFXzRLCQkoMVVMIDw8IFBBR0VfU0hJRlRfNEspCi0jZGVmaW5lIFBBR0VfTUFTS180SwkJKCgodTY0KS0xKSA8PCBQQUdFX1NISUZUXzRLKQotI2RlZmluZSBQQUdFX0FMSUdOXzRLKGFkZHIpCSgoKGFkZHIpICsgUEFHRV9TSVpFXzRLIC0gMSkgJiBQQUdFX01BU0tfNEspCisjZGVmaW5lIFZURF9QQUdFX1NISUZUCQkoMTIpCisjZGVmaW5lIFZURF9QQUdFX1NJWkUJCSgxVUwgPDwgVlREX1BBR0VfU0hJRlQpCisjZGVmaW5lIFZURF9QQUdFX01BU0sJCSgoKHU2NCktMSkgPDwgVlREX1BBR0VfU0hJRlQpCisjZGVmaW5lIFZURF9QQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpICsgVlREX1BBR0VfU0laRSAtIDEpICYgVlREX1BBR0VfTUFTSykKIAotI2RlZmluZSBJT1ZBX1BGTihhZGRyKQkJKChhZGRyKSA+PiBQQUdFX1NISUZUXzRLKQorI2RlZmluZSBJT1ZBX1BGTihhZGRyKQkJKChhZGRyKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSBETUFfMzJCSVRfUEZOCQlJT1ZBX1BGTihETUFfMzJCSVRfTUFTSykKICNkZWZpbmUgRE1BXzY0QklUX1BGTgkJSU9WQV9QRk4oRE1BXzY0QklUX01BU0spCiAKQEAgLTI1LDcgKzI0LDcgQEAKIAl1NjQJdmFsOwogCXU2NAlyc3ZkMTsKIH07Ci0jZGVmaW5lIFJPT1RfRU5UUllfTlIgKFBBR0VfU0laRV80Sy9zaXplb2Yoc3RydWN0IHJvb3RfZW50cnkpKQorI2RlZmluZSBST09UX0VOVFJZX05SIChWVERfUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3Qgcm9vdF9lbnRyeSkpCiBzdGF0aWMgaW5saW5lIGJvb2wgcm9vdF9wcmVzZW50KHN0cnVjdCByb290X2VudHJ5ICpyb290KQogewogCXJldHVybiAocm9vdC0+dmFsICYgMSk7CkBAIC0zNiw3ICszNSw3IEBACiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Jvb3RfdmFsdWUoc3RydWN0IHJvb3RfZW50cnkgKnJvb3QsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7Ci0Jcm9vdC0+dmFsIHw9IHZhbHVlICYgUEFHRV9NQVNLXzRLOworCXJvb3QtPnZhbCB8PSB2YWx1ZSAmIFZURF9QQUdFX01BU0s7CiB9CiAKIHN0cnVjdCBjb250ZXh0X2VudHJ5OwpAQCAtNDUsNyArNDQsNyBAQAogewogCXJldHVybiAoc3RydWN0IGNvbnRleHRfZW50cnkgKikKIAkJKHJvb3RfcHJlc2VudChyb290KT9waHlzX3RvX3ZpcnQoCi0JCXJvb3QtPnZhbCAmIFBBR0VfTUFTS180Syk6CisJCXJvb3QtPnZhbCAmIFZURF9QQUdFX01BU0spIDoKIAkJTlVMTCk7CiB9CiAKQEAgLTY3LDcgKzY2LDcgQEAKICNkZWZpbmUgY29udGV4dF9wcmVzZW50KGMpICgoYykubG8gJiAxKQogI2RlZmluZSBjb250ZXh0X2ZhdWx0X2Rpc2FibGUoYykgKCgoYykubG8gPj4gMSkgJiAxKQogI2RlZmluZSBjb250ZXh0X3RyYW5zbGF0aW9uX3R5cGUoYykgKCgoYykubG8gPj4gMikgJiAzKQotI2RlZmluZSBjb250ZXh0X2FkZHJlc3Nfcm9vdChjKSAoKGMpLmxvICYgUEFHRV9NQVNLXzRLKQorI2RlZmluZSBjb250ZXh0X2FkZHJlc3Nfcm9vdChjKSAoKGMpLmxvICYgVlREX1BBR0VfTUFTSykKICNkZWZpbmUgY29udGV4dF9hZGRyZXNzX3dpZHRoKGMpICgoYykuaGkgJiAgNykKICNkZWZpbmUgY29udGV4dF9kb21haW5faWQoYykgKCgoYykuaGkgPj4gOCkgJiAoKDEgPDwgMTYpIC0gMSkpCiAKQEAgLTgxLDcgKzgwLDcgQEAKIAl9IHdoaWxlICgwKQogI2RlZmluZSBDT05URVhUX1RUX01VTFRJX0xFVkVMIDAKICNkZWZpbmUgY29udGV4dF9zZXRfYWRkcmVzc19yb290KGMsIHZhbCkgXAotCWRvIHsoYykubG8gfD0gKHZhbCkgJiBQQUdFX01BU0tfNEs7fSB3aGlsZSAoMCkKKwlkbyB7KGMpLmxvIHw9ICh2YWwpICYgVlREX1BBR0VfTUFTSzsgfSB3aGlsZSAoMCkKICNkZWZpbmUgY29udGV4dF9zZXRfYWRkcmVzc193aWR0aChjLCB2YWwpIGRvIHsoYykuaGkgfD0gKHZhbCkgJiA3O30gd2hpbGUgKDApCiAjZGVmaW5lIGNvbnRleHRfc2V0X2RvbWFpbl9pZChjLCB2YWwpIFwKIAlkbyB7KGMpLmhpIHw9ICgodmFsKSAmICgoMSA8PCAxNikgLSAxKSkgPDwgODt9IHdoaWxlICgwKQpAQCAtMTA3LDkgKzEwNiw5IEBACiAjZGVmaW5lIGRtYV9zZXRfcHRlX3dyaXRhYmxlKHApIGRvIHsocCkudmFsIHw9IERNQV9QVEVfV1JJVEU7fSB3aGlsZSAoMCkKICNkZWZpbmUgZG1hX3NldF9wdGVfcHJvdChwLCBwcm90KSBcCiAJCWRvIHsocCkudmFsID0gKChwKS52YWwgJiB+MykgfCAoKHByb3QpICYgMyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRtYV9wdGVfYWRkcihwKSAoKHApLnZhbCAmIFBBR0VfTUFTS180SykKKyNkZWZpbmUgZG1hX3B0ZV9hZGRyKHApICgocCkudmFsICYgVlREX1BBR0VfTUFTSykKICNkZWZpbmUgZG1hX3NldF9wdGVfYWRkcihwLCBhZGRyKSBkbyB7XAotCQkocCkudmFsIHw9ICgoYWRkcikgJiBQQUdFX01BU0tfNEspOyB9IHdoaWxlICgwKQorCQkocCkudmFsIHw9ICgoYWRkcikgJiBWVERfUEFHRV9NQVNLKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZG1hX3B0ZV9wcmVzZW50KHApICgoKHApLnZhbCAmIDMpICE9IDApCiAKIHN0cnVjdCBpbnRlbF9pb21tdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hci5oIGIvaW5jbHVkZS9saW51eC9kbWFyLmgKaW5kZXggYzM2MGM1NS4uZjE5ODRmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFyLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFyLmgKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRyaGQsICZkbWFyX2RyaGRfdW5pdHMsIGxpc3QpCiAKIGV4dGVybiBpbnQgZG1hcl90YWJsZV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBlYXJseV9kbWFyX2RldGVjdCh2b2lkKTsKIGV4dGVybiBpbnQgZG1hcl9kZXZfc2NvcGVfaW5pdCh2b2lkKTsKIAogLyogSW50ZWwgSU9NTVUgZGV0ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oIGIvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaAppbmRleCA2ZTRhY2UyLi43OWE4ZWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKQEAgLTE2Niw2ICsxNjYsNyBAQAogCVZTQl8xNiwKIAlQU0tfOCwKIAlBUFNLXzE2LAorCUFQU0tfMzIsCiAJRFFQU0ssCiB9IGZlX21vZHVsYXRpb25fdDsKIApAQCAtMjk1LDYgKzI5Niw3IEBACiAJU1lTX0RWQkNfQU5ORVhfQUMsCiAJU1lTX0RWQkNfQU5ORVhfQiwKIAlTWVNfRFZCVCwKKwlTWVNfRFNTLAogCVNZU19EVkJTLAogCVNZU19EVkJTMiwKIAlTWVNfRFZCSCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IDgwNzM3M2QuLmJiNjZmZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMjA4LDYgKzIwOCw5IEBACiAjZGVmaW5lIEVGSV9HTE9CQUxfVkFSSUFCTEVfR1VJRCBcCiAgICAgRUZJX0dVSUQoICAweDhiZTRkZjYxLCAweDkzY2EsIDB4MTFkMiwgMHhhYSwgMHgwZCwgMHgwMCwgMHhlMCwgMHg5OCwgMHgwMywgMHgyYiwgMHg4YyApCiAKKyNkZWZpbmUgVVZfU1lTVEVNX1RBQkxFX0dVSUQgXAorICAgIEVGSV9HVUlEKCAgMHgzYjEzYTdkNCwgMHg2MzNlLCAweDExZGQsIDB4OTMsIDB4ZWMsIDB4ZGEsIDB4MjUsIDB4NTYsIDB4ZDgsIDB4OTUsIDB4OTMgKQorCiB0eXBlZGVmIHN0cnVjdCB7CiAJZWZpX2d1aWRfdCBndWlkOwogCXVuc2lnbmVkIGxvbmcgdGFibGU7CkBAIC0yNTUsNiArMjU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGJvb3RfaW5mbzsJLyogYm9vdCBpbmZvIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZyBoY2RwOwkJLyogSENEUCB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcgdWdhOwkJLyogVUdBIHRhYmxlICovCisJdW5zaWduZWQgbG9uZyB1dl9zeXN0YWI7CS8qIFVWIHN5c3RlbSB0YWJsZSAqLwogCWVmaV9nZXRfdGltZV90ICpnZXRfdGltZTsKIAllZmlfc2V0X3RpbWVfdCAqc2V0X3RpbWU7CiAJZWZpX2dldF93YWtldXBfdGltZV90ICpnZXRfd2FrZXVwX3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCmluZGV4IDE1OWQ5YjQuLmQxNGYwMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCkBAIC0zODAsNiArMzgwLDggQEAKICNkZWZpbmUgRVhUM19NT1VOVF9RVU9UQQkJMHg4MDAwMCAvKiBTb21lIHF1b3RhIG9wdGlvbiBzZXQgKi8KICNkZWZpbmUgRVhUM19NT1VOVF9VU1JRVU9UQQkJMHgxMDAwMDAgLyogIm9sZCIgdXNlciBxdW90YSAqLwogI2RlZmluZSBFWFQzX01PVU5UX0dSUFFVT1RBCQkweDIwMDAwMCAvKiAib2xkIiBncm91cCBxdW90YSAqLworI2RlZmluZSBFWFQzX01PVU5UX0RBVEFfRVJSX0FCT1JUCTB4NDAwMDAwIC8qIEFib3J0IG9uIGZpbGUgZGF0YSB3cml0ZQorCQkJCQkJICAqIGVycm9yIGluIG9yZGVyZWQgbW9kZSAqLwogCiAvKiBDb21wYXRpYmlsaXR5LCBmb3IgaGF2aW5nIGJvdGggZXh0Ml9mcy5oIGFuZCBleHQzX2ZzLmggaW5jbHVkZWQgYXQgb25jZSAqLwogI2lmbmRlZiBfTElOVVhfRVhUMl9GU19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggNTMxY2NkNS4uNzVhODFlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtODA4LDYgKzgwOCw3IEBACiBzdHJ1Y3QgZmJfaW5mbyB7CiAJaW50IG5vZGU7CiAJaW50IGZsYWdzOworCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogTG9jayBmb3Igb3Blbi9yZWxlYXNlL2lvY3RsIGZ1bmNzICovCiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsJLyogQ3VycmVudCB2YXIgKi8KIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4OwkvKiBDdXJyZW50IGZpeCAqLwogCXN0cnVjdCBmYl9tb25zcGVjcyBtb25zcGVjczsJLyogQ3VycmVudCBNb25pdG9yIHNwZWNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvZmlsZS5oCmluZGV4IGEyMDI1OWUuLjMzNWEwYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlsZS5oCkBAIC0xOSwxMCArMTksMTAgQEAKIHN0cnVjdCB2ZnNtb3VudDsKIHN0cnVjdCBkZW50cnk7CiBleHRlcm4gaW50IGluaXRfZmlsZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBtb2RlX3QgbW9kZSwKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBmbW9kZV90IG1vZGUsCiAJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcCk7CiBleHRlcm4gc3RydWN0IGZpbGUgKmFsbG9jX2ZpbGUoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJbW9kZV90IG1vZGUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcCk7CisJCWZtb2RlX3QgbW9kZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZwdXRfbGlnaHQoc3RydWN0IGZpbGUgKmZpbGUsIGludCBmcHV0X25lZWRlZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggZGVkZGVlZC4uOGYyMjUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKyNpZmRlZiBDT05GSUdfRlJFRVpFUgogLyoKICAqIENoZWNrIGlmIGEgcHJvY2VzcyBoYXMgYmVlbiBmcm96ZW4KICAqLwpAQCAtMzksMjggKzM5LDE4IEBACiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9GUkVFWkUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOworfQorCiAvKgogICogV2FrZSB1cCBhIGZyb3plbiBwcm9jZXNzCi0gKgotICogdGFza19sb2NrKCkgaXMgdGFrZW4gdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQotICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKLSAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KLSAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQotICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl0YXNrX2xvY2socCk7Ci0JaWYgKGZyb3plbihwKSkgewotCQlwLT5mbGFncyAmPSB+UEZfRlJPWkVOOwotCQl0YXNrX3VubG9jayhwKTsKLQkJd2FrZV91cF9wcm9jZXNzKHApOwotCQlyZXR1cm4gMTsKLQl9Ci0JY2xlYXJfZnJlZXplX2ZsYWcocCk7Ci0JdGFza191bmxvY2socCk7Ci0JcmV0dXJuIDA7Ci19CitleHRlcm4gaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qIFRha2VzIGFuZCByZWxlYXNlcyB0YXNrIGFsbG9jIGxvY2sgdXNpbmcgdGFza19sb2NrKCkgKi8KK2V4dGVybiBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKIGV4dGVybiB2b2lkIHJlZnJpZ2VyYXRvcih2b2lkKTsKIGV4dGVybiBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKTsKQEAgLTc1LDYgKzY1LDE1IEBACiAJCXJldHVybiAwOwogfQogCitleHRlcm4gYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpOworZXh0ZXJuIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX0ZSRUVaRVIKK2V4dGVybiBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBfRlJFRVpFUiAqLworc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spIHsgcmV0dXJuIDA7IH0KKyNlbmRpZiAvKiAhQ09ORklHX0NHUk9VUF9GUkVFWkVSICovCisKIC8qCiAgKiBUaGUgUEZfRlJFRVpFUl9TS0lQIGZsYWcgc2hvdWxkIGJlIHNldCBieSBhIHZmb3JrIHBhcmVudCByaWdodCBiZWZvcmUgaXQKICAqIGNhbGxzIHdhaXRfZm9yX2NvbXBsZXRpb24oJnZmb3JrKSBhbmQgcmVzZXQgcmlnaHQgYWZ0ZXIgaXQgcmV0dXJucyBmcm9tIHRoaXMKQEAgLTE2Niw3ICsxNjUsNyBAQAogCX0gd2hpbGUgKHRyeV90b19mcmVlemUoKSk7CQkJCQlcCiAJX19yZXR2YWw7CQkJCQkJCVwKIH0pCi0jZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisjZWxzZSAvKiAhQ09ORklHX0ZSRUVaRVIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlemVfZmxhZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9CkBAIC0xOTEsNiArMTkwLDYgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qICFDT05GSUdfRlJFRVpFUiAqLwogCiAjZW5kaWYJLyogRlJFRVpFUl9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggYTZhNjI1Yi4uNWIyNDhkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNjMsMTggKzYzLDIzIEBACiAjZGVmaW5lIE1BWV9BQ0NFU1MgMTYKICNkZWZpbmUgTUFZX09QRU4gMzIKIAotI2RlZmluZSBGTU9ERV9SRUFEIDEKLSNkZWZpbmUgRk1PREVfV1JJVEUgMgorI2RlZmluZSBGTU9ERV9SRUFEICgoX19mb3JjZSBmbW9kZV90KTEpCisjZGVmaW5lIEZNT0RFX1dSSVRFICgoX19mb3JjZSBmbW9kZV90KTIpCiAKIC8qIEludGVybmFsIGtlcm5lbCBleHRlbnNpb25zICovCi0jZGVmaW5lIEZNT0RFX0xTRUVLCTQKLSNkZWZpbmUgRk1PREVfUFJFQUQJOAorI2RlZmluZSBGTU9ERV9MU0VFSwkoKF9fZm9yY2UgZm1vZGVfdCk0KQorI2RlZmluZSBGTU9ERV9QUkVBRAkoKF9fZm9yY2UgZm1vZGVfdCk4KQogI2RlZmluZSBGTU9ERV9QV1JJVEUJRk1PREVfUFJFQUQJLyogVGhlc2UgZ28gaGFuZCBpbiBoYW5kICovCiAKIC8qIEZpbGUgaXMgYmVpbmcgb3BlbmVkIGZvciBleGVjdXRpb24uIFByaW1hcnkgdXNlcnMgb2YgdGhpcyBmbGFnIGFyZQogICAgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbXMgdGhhdCBjYW4gdXNlIGl0IHRvIGFjaGlldmUgY29ycmVjdCBFVFhUQlVTWQogICAgYmVoYXZpb3IgZm9yIGNyb3NzLW5vZGUgZXhlY3V0aW9uL29wZW5pbmdfZm9yX3dyaXRpbmcgb2YgZmlsZXMgKi8KLSNkZWZpbmUgRk1PREVfRVhFQwkxNgorI2RlZmluZSBGTU9ERV9FWEVDCSgoX19mb3JjZSBmbW9kZV90KTE2KQorCisjZGVmaW5lIEZNT0RFX05ERUxBWQkoKF9fZm9yY2UgZm1vZGVfdCkzMikKKyNkZWZpbmUgRk1PREVfRVhDTAkoKF9fZm9yY2UgZm1vZGVfdCk2NCkKKyNkZWZpbmUgRk1PREVfV1JJVEVfSU9DVEwJKChfX2ZvcmNlIGZtb2RlX3QpMTI4KQorI2RlZmluZSBGTU9ERV9OREVMQVlfTk9XCSgoX19mb3JjZSBmbW9kZV90KTI1NikKIAogI2RlZmluZSBSV19NQVNLCQkxCiAjZGVmaW5lIFJXQV9NQVNLCTIKQEAgLTEzNiw3ICsxNDEsNyBAQAogLyoKICAqIFN1cGVyYmxvY2sgZmxhZ3MgdGhhdCBjYW4gYmUgYWx0ZXJlZCBieSBNU19SRU1PVU5UCiAgKi8KLSNkZWZpbmUgTVNfUk1UX01BU0sJKE1TX1JET05MWXxNU19TWU5DSFJPTk9VU3xNU19NQU5ETE9DSykKKyNkZWZpbmUgTVNfUk1UX01BU0sJKE1TX1JET05MWXxNU19TWU5DSFJPTk9VU3xNU19NQU5ETE9DS3xNU19JX1ZFUlNJT04pCiAKIC8qCiAgKiBPbGQgbWFnaWMgbW91bnQgZmxhZyBhbmQgbWFzawpAQCAtODI1LDcgKzgzMCw3IEBACiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKIAlhdG9taWNfbG9uZ190CQlmX2NvdW50OwogCXVuc2lnbmVkIGludCAJCWZfZmxhZ3M7Ci0JbW9kZV90CQkJZl9tb2RlOworCWZtb2RlX3QJCQlmX21vZGU7CiAJbG9mZl90CQkJZl9wb3M7CiAJc3RydWN0IGZvd25fc3RydWN0CWZfb3duZXI7CiAJdW5zaWduZWQgaW50CQlmX3VpZCwgZl9naWQ7CkBAIC0xMDM3LDcgKzEwNDIsNiBAQAogZXh0ZXJuIGludCBsZWFzZV9tb2RpZnkoc3RydWN0IGZpbGVfbG9jayAqKiwgaW50KTsKIGV4dGVybiBpbnQgbG9ja19tYXlfcmVhZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIGV4dGVybiBpbnQgbG9ja19tYXlfd3JpdGUoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gc3RydWN0IHNlcV9vcGVyYXRpb25zIGxvY2tzX3NlcV9vcGVyYXRpb25zOwogI2Vsc2UgLyogIUNPTkZJR19GSUxFX0xPQ0tJTkcgKi8KICNkZWZpbmUgZmNudGxfZ2V0bGsoYSwgYikgKHsgLUVJTlZBTDsgfSkKICNkZWZpbmUgZmNudGxfc2V0bGsoYSwgYiwgYywgZCkgKHsgLUVBQ0NFUzsgfSkKQEAgLTExNTIsNiArMTE1Niw3IEBACiAJY2hhciBzX2lkWzMyXTsJCQkJLyogSW5mb3JtYXRpb25hbCBuYW1lICovCiAKIAl2b2lkIAkJCSpzX2ZzX2luZm87CS8qIEZpbGVzeXN0ZW0gcHJpdmF0ZSBpbmZvICovCisJZm1vZGVfdAkJCXNfbW9kZTsKIAogCS8qCiAJICogVGhlIG5leHQgZmllbGQgaXMgZm9yIFZGUyAqb25seSouIE5vIGZpbGVzeXN0ZW1zIGhhdmUgYW55IGJ1c2luZXNzCkBAIC0xMjY2LDIwICsxMjcxLDcgQEAKICAqIHRvIGhhdmUgZGlmZmVyZW50IGRpcmVudCBsYXlvdXRzIGRlcGVuZGluZyBvbiB0aGUgYmluYXJ5IHR5cGUuCiAgKi8KIHR5cGVkZWYgaW50ICgqZmlsbGRpcl90KSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50LCBsb2ZmX3QsIHU2NCwgdW5zaWduZWQpOwotCi1zdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgewotCWludCAoKm9wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7Ci0JaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLQlpbnQgKCppb2N0bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7Ci0JbG9uZyAoKnVubG9ja2VkX2lvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwotCWxvbmcgKCpjb21wYXRfaW9jdGwpIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7Ci0JaW50ICgqZGlyZWN0X2FjY2VzcykgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc2VjdG9yX3QsCi0JCQkJCQl2b2lkICoqLCB1bnNpZ25lZCBsb25nICopOwotCWludCAoKm1lZGlhX2NoYW5nZWQpIChzdHJ1Y3QgZ2VuZGlzayAqKTsKLQlpbnQgKCpyZXZhbGlkYXRlX2Rpc2spIChzdHJ1Y3QgZ2VuZGlzayAqKTsKLQlpbnQgKCpnZXRnZW8pKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc3RydWN0IGhkX2dlb21ldHJ5ICopOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotfTsKK3N0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uczsKIAogLyogVGhlc2UgbWFjcm9zIGFyZSBmb3Igb3V0IG9mIGtlcm5lbCBtb2R1bGVzIHRvIHRlc3QgdGhhdAogICogdGhlIGtlcm5lbCBzdXBwb3J0cyB0aGUgdW5sb2NrZWRfaW9jdGwgYW5kIGNvbXBhdF9pb2N0bApAQCAtMTU5Myw3ICsxNTg1LDYgQEAKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBleHRlcm4gaW50IHNpbXBsZV9zZXRfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBfX3B1dF9zdXBlcl9hbmRfbmVlZF9yZXN0YXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotdm9pZCB1bm5hbWVkX2Rldl9pbml0KHZvaWQpOwogCiAvKiBBbGFzLCBubyBhbGlhc2VzLiBUb28gbXVjaCBoYXNzbGUgd2l0aCBicmluZ2luZyBtb2R1bGUuaCBldmVyeXdoZXJlICovCiAjZGVmaW5lIGZvcHNfZ2V0KGZvcHMpIFwKQEAgLTE3MTQsNyArMTcwNSw3IEBACiBleHRlcm4gdm9pZCBiZF9zZXRfc2l6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGxvZmZfdCBzaXplKTsKIGV4dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGJkcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1leHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqb3Blbl9ieV9kZXZudW0oZGV2X3QsIHVuc2lnbmVkKTsKK2V4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2J5X2Rldm51bShkZXZfdCwgZm1vZGVfdCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQogI2VuZGlmCkBAIC0xNzI0LDEzICsxNzE1LDEwIEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfZmlmb19mb3BzOwogI2lmZGVmIENPTkZJR19CTE9DSwogZXh0ZXJuIGludCBpb2N0bF9ieV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIGludCBibGtkZXZfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiBpbnQgYmxrZGV2X2RyaXZlcl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdW5zaWduZWQgY21kLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgYmxrZGV2X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gaW50IGJsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBtb2RlX3QsIHVuc2lnbmVkKTsKLWV4dGVybiBpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCBibGtkZXZfZ2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCk7CitleHRlcm4gaW50IGJsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90KTsKIGV4dGVybiBpbnQgYmRfY2xhaW0oc3RydWN0IGJsb2NrX2RldmljZSAqLCB2b2lkICopOwogZXh0ZXJuIHZvaWQgYmRfcmVsZWFzZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogI2lmZGVmIENPTkZJR19TWVNGUwpAQCAtMTc2MSw5ICsxNzQ5LDEwIEBACiBleHRlcm4gY29uc3QgY2hhciAqX19iZGV2bmFtZShkZXZfdCwgY2hhciAqYnVmZmVyKTsKIGV4dGVybiBjb25zdCBjaGFyICpiZGV2bmFtZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBjaGFyICpidWZmZXIpOwogZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKmxvb2t1cF9iZGV2KGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqb3Blbl9iZGV2X2V4Y2woY29uc3QgY2hhciAqLCBpbnQsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCBjbG9zZV9iZGV2X2V4Y2woc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2JkZXZfZXhjbHVzaXZlKGNvbnN0IGNoYXIgKiwgZm1vZGVfdCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGNsb3NlX2JkZXZfZXhjbHVzaXZlKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCk7CiBleHRlcm4gdm9pZCBibGtkZXZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKixvZmZfdCk7CisKICNlbHNlCiAjZGVmaW5lIEJMS0RFVl9NQUpPUl9IQVNIX1NJWkUJMAogI2VuZGlmCkBAIC0xODUyLDYgKzE4NDEsMTEgQEAKIGV4dGVybiBpbnQgZ2VuZXJpY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQsCiAJCWludCAoKmNoZWNrX2FjbCkoc3RydWN0IGlub2RlICosIGludCkpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgZXhlY3V0ZV9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAoaW5vZGUtPmlfbW9kZSAmIFNfSVhVR08pIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSk7Cit9CisKIGV4dGVybiBpbnQgZ2V0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGRlbnlfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICopOwogc3RhdGljIGlubGluZSB2b2lkIHB1dF93cml0ZV9hY2Nlc3Moc3RydWN0IGlub2RlICogaW5vZGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmggYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKaW5kZXggYTg5NTEzMS4uMDBmYmQ1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaApAQCAtMTg4LDcgKzE4OCw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwotCW1vZGVfdCBtb2RlID0gZmlsZS0+Zl9tb2RlOworCWZtb2RlX3QgbW9kZSA9IGZpbGUtPmZfbW9kZTsKIAl1MzIgbWFzayA9IChtb2RlICYgRk1PREVfV1JJVEUpID8gSU5fQ0xPU0VfV1JJVEUgOiBJTl9DTE9TRV9OT1dSSVRFOwogCiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCBiYjM4NDA2Li5hM2Q0NjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEsMTAgKzEsMTQgQEAKICNpZm5kZWYgX0xJTlVYX0ZUUkFDRV9ICiAjZGVmaW5lIF9MSU5VWF9GVFJBQ0VfSAogCi0jaWZkZWYgQ09ORklHX0ZUUkFDRQotCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCisjaWZkZWYgQ09ORklHX0ZUUkFDRQogCiBleHRlcm4gaW50IGZ0cmFjZV9lbmFibGVkOwogZXh0ZXJuIGludApAQCAtMzYsNiArNDAsNyBAQAogIyBkZWZpbmUgcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKG9wcykgZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24ob3BzKSBkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBjbGVhcl9mdHJhY2VfZnVuY3Rpb24ob3BzKSBkbyB7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2tpbGxfYXRvbWljKHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19GVFJBQ0UgKi8KIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQpAQCAtNzYsOCArODEsMTAgQEAKIAogZXh0ZXJuIGludCBza2lwX3RyYWNlKHVuc2lnbmVkIGxvbmcgaXApOwogCi12b2lkIGZ0cmFjZV9kaXNhYmxlX2RhZW1vbih2b2lkKTsKLXZvaWQgZnRyYWNlX2VuYWJsZV9kYWVtb24odm9pZCk7CitleHRlcm4gdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworZXh0ZXJuIHZvaWQgZnRyYWNlX2Rpc2FibGVfZGFlbW9uKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX2VuYWJsZV9kYWVtb24odm9pZCk7CiAKICNlbHNlCiAjIGRlZmluZSBza2lwX3RyYWNlKGlwKQkJCQkoeyAwOyB9KQpAQCAtODUsNiArOTIsNyBAQAogIyBkZWZpbmUgZnRyYWNlX3NldF9maWx0ZXIoYnVmLCBsZW4sIHJlc2V0KQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2VfZGlzYWJsZV9kYWVtb24oKQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2VuYWJsZV9kYWVtb24oKQkJCWRvIHsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKSB7IH0KICNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAogLyogdG90YWxseSBkaXNhYmxlIGZ0cmFjZSAtIGNhbiBub3QgcmUtZW5hYmxlIGFmdGVyIHRoaXMgKi8KQEAgLTk4LDkgKzEwNiwxMSBAQAogI2VuZGlmCiB9CiAKLS8qIEZ0cmFjZSBkaXNhYmxlL3Jlc3RvcmUgd2l0aG91dCBsb2NrLiBTb21lIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20KKy8qCisgKiBGdHJhY2UgZGlzYWJsZS9yZXN0b3JlIHdpdGhvdXQgbG9jay4gU29tZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtCiAgKiBtdXN0IGJlIHVzZWQgdG8gcHJldmVudCBmdHJhY2VfZW5hYmxlZCB0byBiZSBjaGFuZ2VkIGJldHdlZW4KLSAqIGRpc2FibGUvcmVzdG9yZS4gKi8KKyAqIGRpc2FibGUvcmVzdG9yZS4KKyAqLwogc3RhdGljIGlubGluZSBpbnQgX19mdHJhY2VfZW5hYmxlZF9zYXZlKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0ZUUkFDRQpAQCAtMTU3LDkgKzE2Nyw3MSBAQAogI2lmZGVmIENPTkZJR19UUkFDSU5HCiBleHRlcm4gdm9pZAogZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMyk7CisKKy8qKgorICogZnRyYWNlX3ByaW50ayAtIHByaW50ZiBmb3JtYXR0aW5nIGluIHRoZSBmdHJhY2UgYnVmZmVyCisgKiBAZm10OiB0aGUgcHJpbnRmIGZvcm1hdCBmb3IgcHJpbnRpbmcKKyAqCisgKiBOb3RlOiBfX2Z0cmFjZV9wcmludGsgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGZ0cmFjZV9wcmludGsgYW5kCisgKiAgICAgICB0aGUgQGlwIGlzIHBhc3NlZCBpbiB2aWEgdGhlIGZ0cmFjZV9wcmludGsgbWFjcm8uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBrZXJuZWwgZGV2ZWxvcGVyIHRvIGRlYnVnIGZhc3QgcGF0aCBzZWN0aW9ucworICogdGhhdCBwcmludGsgaXMgbm90IGFwcHJvcHJpYXRlIGZvci4gQnkgc2NhdHRlcmluZyBpbiB2YXJpb3VzCisgKiBwcmludGsgbGlrZSB0cmFjaW5nIGluIHRoZSBjb2RlLCBhIGRldmVsb3BlciBjYW4gcXVpY2tseSBzZWUKKyAqIHdoZXJlIHByb2JsZW1zIGFyZSBvY2N1cnJpbmcuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCBhcyBhIGRlYnVnZ2luZyB0b29sIGZvciB0aGUgZGV2ZWxvcGVyIG9ubHkuCisgKiBQbGVhc2UgcmVmcmFpbiBmcm9tIGxlYXZpbmcgZnRyYWNlX3ByaW50a3Mgc2NhdHRlcmVkIGFyb3VuZCBpbgorICogeW91ciBjb2RlLgorICovCisjIGRlZmluZSBmdHJhY2VfcHJpbnRrKGZtdC4uLikgX19mdHJhY2VfcHJpbnRrKF9USElTX0lQXywgZm10KQorZXh0ZXJuIGludAorX19mdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZAogZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykgeyB9CitzdGF0aWMgaW5saW5lIGludAorZnRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAwKSkpOworCitzdGF0aWMgaW5saW5lIGludAorZnRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZHVtcCh2b2lkKSB7IH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECitleHRlcm4gdm9pZCBmdHJhY2VfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9pbml0X21vZHVsZSh1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK2Z0cmFjZV9pbml0X21vZHVsZSh1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKSB7IH0KKyNlbmRpZgorCisKK3N0cnVjdCBib290X3RyYWNlIHsKKwlwaWRfdAkJCWNhbGxlcjsKKwljaGFyCQkJZnVuY1tLU1lNX05BTUVfTEVOXTsKKwlpbnQJCQlyZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBsb25nCWR1cmF0aW9uOwkJLyogdXNlY3MgKi8KKwlrdGltZV90CQkJY2FsbHRpbWU7CisJa3RpbWVfdAkJCXJldHRpbWU7Cit9OworCisjaWZkZWYgQ09ORklHX0JPT1RfVFJBQ0VSCitleHRlcm4gdm9pZCB0cmFjZV9ib290KHN0cnVjdCBib290X3RyYWNlICppdCwgaW5pdGNhbGxfdCBmbik7CitleHRlcm4gdm9pZCBzdGFydF9ib290X3RyYWNlKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RvcF9ib290X3RyYWNlKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9ib290KHN0cnVjdCBib290X3RyYWNlICppdCwgaW5pdGNhbGxfdCBmbikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfYm9vdF90cmFjZSh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2Jvb3RfdHJhY2Uodm9pZCkgeyB9CisjZW5kaWYKKworCisKICNlbmRpZiAvKiBfTElOVVhfRlRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnVzZS5oIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKaW5kZXggMjY1NjM1ZC4uMzUwZmU5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKQEAgLTE3LDggKzE3LDE0IEBACiAgKiAgLSBhZGQgbG9ja19vd25lciBmaWVsZCB0byBmdXNlX3NldGF0dHJfaW4sIGZ1c2VfcmVhZF9pbiBhbmQgZnVzZV93cml0ZV9pbgogICogIC0gYWRkIGJsa3NpemUgZmllbGQgdG8gZnVzZV9hdHRyCiAgKiAgLSBhZGQgZmlsZSBmbGFncyBmaWVsZCB0byBmdXNlX3JlYWRfaW4gYW5kIGZ1c2Vfd3JpdGVfaW4KKyAqCisgKiA3LjEwCisgKiAgLSBhZGQgbm9uc2Vla2FibGUgb3BlbiBmbGFnCiAgKi8KIAorI2lmbmRlZiBfTElOVVhfRlVTRV9ICisjZGVmaW5lIF9MSU5VWF9GVVNFX0gKKwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAKQEAgLTI2LDcgKzMyLDcgQEAKICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3CiAKIC8qKiBNaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGludGVyZmFjZSAqLwotI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDkKKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiAxMAogCiAvKiogVGhlIG5vZGUgSUQgb2YgdGhlIHJvb3QgaW5vZGUgKi8KICNkZWZpbmUgRlVTRV9ST09UX0lEIDEKQEAgLTk4LDkgKzEwNCwxMSBAQAogICoKICAqIEZPUEVOX0RJUkVDVF9JTzogYnlwYXNzIHBhZ2UgY2FjaGUgZm9yIHRoaXMgb3BlbiBmaWxlCiAgKiBGT1BFTl9LRUVQX0NBQ0hFOiBkb24ndCBpbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIG9uIG9wZW4KKyAqIEZPUEVOX05PTlNFRUtBQkxFOiB0aGUgZmlsZSBpcyBub3Qgc2Vla2FibGUKICAqLwogI2RlZmluZSBGT1BFTl9ESVJFQ1RfSU8JCSgxIDw8IDApCiAjZGVmaW5lIEZPUEVOX0tFRVBfQ0FDSEUJKDEgPDwgMSkKKyNkZWZpbmUgRk9QRU5fTk9OU0VFS0FCTEUJKDEgPDwgMikKIAogLyoqCiAgKiBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3MKQEAgLTQwOSwzICs0MTcsNSBAQAogI2RlZmluZSBGVVNFX0RJUkVOVF9BTElHTih4KSAoKCh4KSArIHNpemVvZihfX3U2NCkgLSAxKSAmIH4oc2l6ZW9mKF9fdTY0KSAtIDEpKQogI2RlZmluZSBGVVNFX0RJUkVOVF9TSVpFKGQpIFwKIAlGVVNFX0RJUkVOVF9BTElHTihGVVNFX05BTUVfT0ZGU0VUICsgKGQpLT5uYW1lbGVuKQorCisjZW5kaWYgLyogX0xJTlVYX0ZVU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDIwNmNkZjkuLmU0MzllNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTI1LDkgKzI1LDYgQEAKIGV4dGVybiBzdHJ1Y3Qga29iamVjdCAqYmxvY2tfZGVwcjsKIGV4dGVybiBzdHJ1Y3QgY2xhc3MgYmxvY2tfY2xhc3M7CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFydGl0aW9uc19vcDsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGlza3N0YXRzX29wOwotCiBlbnVtIHsKIC8qIFRoZXNlIHRocmVlIGhhdmUgaWRlbnRpY2FsIGJlaGF2aW91cjsgdXNlIHRoZSBzZWNvbmQgb25lIGlmIERPUyBGRElTSyBnZXRzCiAgICBjb25mdXNlZCBhYm91dCBleHRlbmRlZC9sb2dpY2FsIHBhcnRpdGlvbnMgc3RhcnRpbmcgcGFzdCBjeWxpbmRlciAxMDIzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAppbmRleCAyZjI0NWZlLi4yYjM2NDViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaApAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCiAKIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2U7CiBzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZTsKQEAgLTEwMSw5ICsxMDMsMTQgQEAKIC8qKgogICogc3RydWN0IGhydGltZXIgLSB0aGUgYmFzaWMgaHJ0aW1lciBzdHJ1Y3R1cmUKICAqIEBub2RlOglyZWQgYmxhY2sgdHJlZSBub2RlIGZvciB0aW1lIG9yZGVyZWQgaW5zZXJ0aW9uCi0gKiBAZXhwaXJlczoJdGhlIGFic29sdXRlIGV4cGlyeSB0aW1lIGluIHRoZSBocnRpbWVycyBpbnRlcm5hbAorICogQF9leHBpcmVzOgl0aGUgYWJzb2x1dGUgZXhwaXJ5IHRpbWUgaW4gdGhlIGhydGltZXJzIGludGVybmFsCiAgKgkJcmVwcmVzZW50YXRpb24uIFRoZSB0aW1lIGlzIHJlbGF0ZWQgdG8gdGhlIGNsb2NrIG9uCi0gKgkJd2hpY2ggdGhlIHRpbWVyIGlzIGJhc2VkLgorICoJCXdoaWNoIHRoZSB0aW1lciBpcyBiYXNlZC4gSXMgc2V0dXAgYnkgYWRkaW5nCisgKgkJc2xhY2sgdG8gdGhlIF9zb2Z0ZXhwaXJlcyB2YWx1ZS4gRm9yIG5vbiByYW5nZSB0aW1lcnMKKyAqCQlpZGVudGljYWwgdG8gX3NvZnRleHBpcmVzLgorICogQF9zb2Z0ZXhwaXJlczogdGhlIGFic29sdXRlIGVhcmxpZXN0IGV4cGlyeSB0aW1lIG9mIHRoZSBocnRpbWVyLgorICoJCVRoZSB0aW1lIHdoaWNoIHdhcyBnaXZlbiBhcyBleHBpcnkgdGltZSB3aGVuIHRoZSB0aW1lcgorICoJCXdhcyBhcm1lZC4KICAqIEBmdW5jdGlvbjoJdGltZXIgZXhwaXJ5IGNhbGxiYWNrIGZ1bmN0aW9uCiAgKiBAYmFzZToJcG9pbnRlciB0byB0aGUgdGltZXIgYmFzZSAocGVyIGNwdSBhbmQgcGVyIGNsb2NrKQogICogQHN0YXRlOglzdGF0ZSBpbmZvcm1hdGlvbiAoU2VlIGJpdCB2YWx1ZXMgYWJvdmUpCkBAIC0xMjEsMTYgKzEyOCwxNyBAQAogICovCiBzdHJ1Y3QgaHJ0aW1lciB7CiAJc3RydWN0IHJiX25vZGUJCQlub2RlOwotCWt0aW1lX3QJCQkJZXhwaXJlczsKKwlrdGltZV90CQkJCV9leHBpcmVzOworCWt0aW1lX3QJCQkJX3NvZnRleHBpcmVzOwogCWVudW0gaHJ0aW1lcl9yZXN0YXJ0CQkoKmZ1bmN0aW9uKShzdHJ1Y3QgaHJ0aW1lciAqKTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlCSpiYXNlOwogCXVuc2lnbmVkIGxvbmcJCQlzdGF0ZTsKLQllbnVtIGhydGltZXJfY2JfbW9kZQkJY2JfbW9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQljYl9lbnRyeTsKKwllbnVtIGhydGltZXJfY2JfbW9kZQkJY2JfbW9kZTsKICNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKKwlpbnQJCQkJc3RhcnRfcGlkOwogCXZvaWQJCQkJKnN0YXJ0X3NpdGU7CiAJY2hhcgkJCQlzdGFydF9jb21tWzE2XTsKLQlpbnQJCQkJc3RhcnRfcGlkOwogI2VuZGlmCiB9OwogCkBAIC0xNTUsMTAgKzE2Myw4IEBACiAgKiBAZmlyc3Q6CQlwb2ludGVyIHRvIHRoZSB0aW1lciBub2RlIHdoaWNoIGV4cGlyZXMgZmlyc3QKICAqIEByZXNvbHV0aW9uOgkJdGhlIHJlc29sdXRpb24gb2YgdGhlIGNsb2NrLCBpbiBuYW5vc2Vjb25kcwogICogQGdldF90aW1lOgkJZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgY2xvY2sKLSAqIEBnZXRfc29mdGlycV90aW1lOglmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIGZyb20gdGhlIHNvZnRpcnEKICAqIEBzb2Z0aXJxX3RpbWU6CXRoZSB0aW1lIHdoZW4gcnVubmluZyB0aGUgaHJ0aW1lciBxdWV1ZSBpbiB0aGUgc29mdGlycQogICogQG9mZnNldDoJCW9mZnNldCBvZiB0aGlzIGNsb2NrIHRvIHRoZSBtb25vdG9uaWMgYmFzZQotICogQHJlcHJvZ3JhbToJCWZ1bmN0aW9uIHRvIHJlcHJvZ3JhbSB0aGUgdGltZXIgZXZlbnQKICAqLwogc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSB7CiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UJKmNwdV9iYXNlOwpAQCAtMTY3LDEzICsxNzMsOSBAQAogCXN0cnVjdCByYl9ub2RlCQkqZmlyc3Q7CiAJa3RpbWVfdAkJCXJlc29sdXRpb247CiAJa3RpbWVfdAkJCSgqZ2V0X3RpbWUpKHZvaWQpOwotCWt0aW1lX3QJCQkoKmdldF9zb2Z0aXJxX3RpbWUpKHZvaWQpOwogCWt0aW1lX3QJCQlzb2Z0aXJxX3RpbWU7CiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCWt0aW1lX3QJCQlvZmZzZXQ7Ci0JaW50CQkJKCpyZXByb2dyYW0pKHN0cnVjdCBocnRpbWVyICp0LAotCQkJCQkgICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmIsCi0JCQkJCSAgICAga3RpbWVfdCBuKTsKICNlbmRpZgogfTsKIApAQCAtMjA3LDYgKzIwOSw3MSBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9zZXRfZXhwaXJlcyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgdGltZSkKK3sKKwl0aW1lci0+X2V4cGlyZXMgPSB0aW1lOworCXRpbWVyLT5fc29mdGV4cGlyZXMgPSB0aW1lOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9zZXRfZXhwaXJlc19yYW5nZShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgdGltZSwga3RpbWVfdCBkZWx0YSkKK3sKKwl0aW1lci0+X3NvZnRleHBpcmVzID0gdGltZTsKKwl0aW1lci0+X2V4cGlyZXMgPSBrdGltZV9hZGRfc2FmZSh0aW1lLCBkZWx0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKHN0cnVjdCBocnRpbWVyICp0aW1lciwga3RpbWVfdCB0aW1lLCB1bnNpZ25lZCBsb25nIGRlbHRhKQoreworCXRpbWVyLT5fc29mdGV4cGlyZXMgPSB0aW1lOworCXRpbWVyLT5fZXhwaXJlcyA9IGt0aW1lX2FkZF9zYWZlKHRpbWUsIG5zX3RvX2t0aW1lKGRlbHRhKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX3NldF9leHBpcmVzX3R2NjQoc3RydWN0IGhydGltZXIgKnRpbWVyLCBzNjQgdHY2NCkKK3sKKwl0aW1lci0+X2V4cGlyZXMudHY2NCA9IHR2NjQ7CisJdGltZXItPl9zb2Z0ZXhwaXJlcy50djY0ID0gdHY2NDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfYWRkX2V4cGlyZXMoc3RydWN0IGhydGltZXIgKnRpbWVyLCBrdGltZV90IHRpbWUpCit7CisJdGltZXItPl9leHBpcmVzID0ga3RpbWVfYWRkX3NhZmUodGltZXItPl9leHBpcmVzLCB0aW1lKTsKKwl0aW1lci0+X3NvZnRleHBpcmVzID0ga3RpbWVfYWRkX3NhZmUodGltZXItPl9zb2Z0ZXhwaXJlcywgdGltZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX2FkZF9leHBpcmVzX25zKHN0cnVjdCBocnRpbWVyICp0aW1lciwgdW5zaWduZWQgbG9uZyBucykKK3sKKwl0aW1lci0+X2V4cGlyZXMgPSBrdGltZV9hZGRfbnModGltZXItPl9leHBpcmVzLCBucyk7CisJdGltZXItPl9zb2Z0ZXhwaXJlcyA9IGt0aW1lX2FkZF9ucyh0aW1lci0+X3NvZnRleHBpcmVzLCBucyk7Cit9CisKK3N0YXRpYyBpbmxpbmUga3RpbWVfdCBocnRpbWVyX2dldF9leHBpcmVzKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlyZXR1cm4gdGltZXItPl9leHBpcmVzOworfQorCitzdGF0aWMgaW5saW5lIGt0aW1lX3QgaHJ0aW1lcl9nZXRfc29mdGV4cGlyZXMoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXJldHVybiB0aW1lci0+X3NvZnRleHBpcmVzOworfQorCitzdGF0aWMgaW5saW5lIHM2NCBocnRpbWVyX2dldF9leHBpcmVzX3R2NjQoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXJldHVybiB0aW1lci0+X2V4cGlyZXMudHY2NDsKK30KK3N0YXRpYyBpbmxpbmUgczY0IGhydGltZXJfZ2V0X3NvZnRleHBpcmVzX3R2NjQoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXJldHVybiB0aW1lci0+X3NvZnRleHBpcmVzLnR2NjQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgczY0IGhydGltZXJfZ2V0X2V4cGlyZXNfbnMoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXJldHVybiBrdGltZV90b19ucyh0aW1lci0+X2V4cGlyZXMpOworfQorCitzdGF0aWMgaW5saW5lIGt0aW1lX3QgaHJ0aW1lcl9leHBpcmVzX3JlbWFpbmluZyhjb25zdCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7CisgICAgcmV0dXJuIGt0aW1lX3N1Yih0aW1lci0+X2V4cGlyZXMsIHRpbWVyLT5iYXNlLT5nZXRfdGltZSgpKTsKK30KKwogI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2U7CiAKQEAgLTIyNyw2ICsyOTQsOCBAQAogCXJldHVybiB0aW1lci0+YmFzZS0+Y3B1X2Jhc2UtPmhyZXNfYWN0aXZlOwogfQogCitleHRlcm4gdm9pZCBocnRpbWVyX3BlZWtfYWhlYWRfdGltZXJzKHZvaWQpOworCiAvKgogICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNsb2Nrcy4gVGhlIHJlc29sdXRpb24gdmFsdWUgaXMgcmV0dXJuZWQgaW4KICAqIHRoZSBjbG9ja19nZXRyZXMoKSBzeXN0ZW0gY2FsbCB0byBnaXZlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXJzIGFuCkBAIC0yNDksNiArMzE4LDcgQEAKICAqIGlzIGV4cGlyZWQgaW4gdGhlIG5leHQgc29mdGlycSB3aGVuIHRoZSBjbG9jayB3YXMgYWR2YW5jZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja193YXNfc2V0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfcGVla19haGVhZF90aW1lcnModm9pZCkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBocmVzX3RpbWVyc19yZXN1bWUodm9pZCkgeyB9CiAKQEAgLTI3MCw2ICszNDAsMTAgQEAKIGV4dGVybiBrdGltZV90IGt0aW1lX2dldCh2b2lkKTsKIGV4dGVybiBrdGltZV90IGt0aW1lX2dldF9yZWFsKHZvaWQpOwogCisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGlja19kZXZpY2UsIHRpY2tfY3B1X2RldmljZSk7CisKKwogLyogRXhwb3J0ZWQgdGltZXIgZnVuY3Rpb25zOiAqLwogCiAvKiBJbml0aWFsaXplIHRpbWVyczogKi8KQEAgLTI5NCwxMiArMzY4LDI1IEBACiAvKiBCYXNpYyB0aW1lciBvcGVyYXRpb25zOiAqLwogZXh0ZXJuIGludCBocnRpbWVyX3N0YXJ0KHN0cnVjdCBocnRpbWVyICp0aW1lciwga3RpbWVfdCB0aW0sCiAJCQkgY29uc3QgZW51bSBocnRpbWVyX21vZGUgbW9kZSk7CitleHRlcm4gaW50IGhydGltZXJfc3RhcnRfcmFuZ2VfbnMoc3RydWN0IGhydGltZXIgKnRpbWVyLCBrdGltZV90IHRpbSwKKwkJCXVuc2lnbmVkIGxvbmcgcmFuZ2VfbnMsIGNvbnN0IGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUpOwogZXh0ZXJuIGludCBocnRpbWVyX2NhbmNlbChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpOwogZXh0ZXJuIGludCBocnRpbWVyX3RyeV90b19jYW5jZWwoc3RydWN0IGhydGltZXIgKnRpbWVyKTsKIAorc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9zdGFydF9leHBpcmVzKHN0cnVjdCBocnRpbWVyICp0aW1lciwKKwkJCQkJCWVudW0gaHJ0aW1lcl9tb2RlIG1vZGUpCit7CisJdW5zaWduZWQgbG9uZyBkZWx0YTsKKwlrdGltZV90IHNvZnQsIGhhcmQ7CisJc29mdCA9IGhydGltZXJfZ2V0X3NvZnRleHBpcmVzKHRpbWVyKTsKKwloYXJkID0gaHJ0aW1lcl9nZXRfZXhwaXJlcyh0aW1lcik7CisJZGVsdGEgPSBrdGltZV90b19ucyhrdGltZV9zdWIoaGFyZCwgc29mdCkpOworCXJldHVybiBocnRpbWVyX3N0YXJ0X3JhbmdlX25zKHRpbWVyLCBzb2Z0LCBkZWx0YSwgbW9kZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfcmVzdGFydChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7Ci0JcmV0dXJuIGhydGltZXJfc3RhcnQodGltZXIsIHRpbWVyLT5leHBpcmVzLCBIUlRJTUVSX01PREVfQUJTKTsKKwlyZXR1cm4gaHJ0aW1lcl9zdGFydF9leHBpcmVzKHRpbWVyLCBIUlRJTUVSX01PREVfQUJTKTsKIH0KIAogLyogUXVlcnkgdGltZXJzOiAqLwpAQCAtMzU2LDYgKzQ0MywxMCBAQAogZXh0ZXJuIHZvaWQgaHJ0aW1lcl9pbml0X3NsZWVwZXIoc3RydWN0IGhydGltZXJfc2xlZXBlciAqc2wsCiAJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAorZXh0ZXJuIGludCBzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2Uoa3RpbWVfdCAqZXhwaXJlcywgdW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQkJCWNvbnN0IGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUpOworZXh0ZXJuIGludCBzY2hlZHVsZV9ocnRpbWVvdXQoa3RpbWVfdCAqZXhwaXJlcywgY29uc3QgZW51bSBocnRpbWVyX21vZGUgbW9kZSk7CisKIC8qIFNvZnQgaW50ZXJydXB0IGZ1bmN0aW9uIHRvIHJ1biB0aGUgaHJ0aW1lciBxdWV1ZXM6ICovCiBleHRlcm4gdm9pZCBocnRpbWVyX3J1bl9xdWV1ZXModm9pZCk7CiBleHRlcm4gdm9pZCBocnRpbWVyX3J1bl9wZW5kaW5nKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAzMmUwZWYwLi5lMWM4YWZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMjcsNyArMjcsNyBAQAogdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAogCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHBhZ2UgKik7CiBpbnQgaHVnZXRsYl9wcmVmYXVsdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7Ci1pbnQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhjaGFyICopOwordm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqKTsKIGludCBodWdldGxiX3JlcG9ydF9ub2RlX21lbWluZm8oaW50LCBjaGFyICopOwogdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpOwogaW50IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtNzksNyArNzksOSBAQAogI2RlZmluZSBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzcmMsIGRzdCwgdm1hKQkoeyBCVUcoKTsgMDsgfSkKICNkZWZpbmUgaHVnZXRsYl9wcmVmYXVsdChtYXBwaW5nLCB2bWEpCQkoeyBCVUcoKTsgMDsgfSkKICNkZWZpbmUgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBwYWdlKQlCVUcoKQotI2RlZmluZSBodWdldGxiX3JlcG9ydF9tZW1pbmZvKGJ1ZikJCTAKK3N0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKK30KICNkZWZpbmUgaHVnZXRsYl9yZXBvcnRfbm9kZV9tZW1pbmZvKG4sIGJ1ZikJMAogI2RlZmluZSBmb2xsb3dfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgd3JpdGUpCU5VTEwKICNkZWZpbmUgZm9sbG93X2h1Z2VfcHVkKG1tLCBhZGRyLCBwdWQsIHdyaXRlKQlOVUxMCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjZi5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2YuaAppbmRleCAwMTc3ZDI4Li4wZjkxYTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjZi5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNmLmgKQEAgLTMxLDcgKzMxLDEwIEBACiAJaW50ICAoKmdldHBjZikgKHZvaWQgKmRhdGEsIGludCBjdGwpOwogCWludCAgKCpnZXRvd24pICh2b2lkICpkYXRhKTsKIAlpbnQgICgqZ2V0Y2xvY2spICh2b2lkICpkYXRhKTsKLQl2b2lkICgqd2FpdGZvcnBpbikgKHZvaWQpOworCXZvaWQgKCp3YWl0Zm9ycGluKSAodm9pZCAqZGF0YSk7CisKKwl2b2lkICgqeGZlcl9iZWdpbikgKHZvaWQgKmRhdGEpOworCXZvaWQgKCp4ZmVyX2VuZCkgKHZvaWQgKmRhdGEpOwogCiAJLyogTXVsdGktbWFzdGVyIGxvc3QgYXJiaXRyYXRpb24gYmFjay1vZmYgZGVsYXkgKG1zZWNzKQogCSAqIFRoaXMgc2hvdWxkIGJlIHNldCBieSB0aGUgYnVzIGFkYXB0ZXIgb3Iga25vd2xlZGdhYmxlIGNsaWVudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaCBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKaW5kZXggNDkzNDM1Yi4uMDFkNjdiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC02MCw3ICs2MCw3IEBACiAjZGVmaW5lIEkyQ19EUklWRVJJRF9XTTg3NzUJNjkJLyogd204Nzc1IGF1ZGlvIHByb2Nlc3NvcgkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQ1M1M0wzMkEJNzAJLyogY3M1M2wzMmEgYXVkaW8gcHJvY2Vzc29yCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9DWDI1ODQwCTcxCS8qIGN4MjU4NHggdmlkZW8gZW5jb2RlcgkqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzEyNwk3MgkvKiBzYWE3MTI0IHZpZGVvIGVuY29kZXIJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMjcJNzIJLyogc2FhNzEyNyB2aWRlbyBlbmNvZGVyCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTFYCTczCS8qIHNhYTcxMXggdmlkZW8gZW5jb2RlcnMJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0FLSVRBSU9FWFAJNzQJLyogSU8gRXhwYW5kZXIgb24gU2hhcnAgU0wtQzEwMDAgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0lORlJBUkVECTc1CS8qIEkyQyBJbmZyYVJlZCBvbiBWaWRlbyBib2FyZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDA2MTE1MTIuLjMzYTU5OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtNTMsNDUgKzUzLDQ0IEBACiAgKiB0cmFuc21pdCBvbmUgbWVzc2FnZSBhdCBhIHRpbWUsIGEgbW9yZSBjb21wbGV4IHZlcnNpb24gY2FuIGJlIHVzZWQgdG8KICAqIHRyYW5zbWl0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgbWVzc2FnZXMgd2l0aG91dCBpbnRlcnJ1cHRpb24uCiAgKi8KLWV4dGVybiBpbnQgaTJjX21hc3Rlcl9zZW5kKHN0cnVjdCBpMmNfY2xpZW50ICosY29uc3QgY2hhciogLGludCk7Ci1leHRlcm4gaW50IGkyY19tYXN0ZXJfcmVjdihzdHJ1Y3QgaTJjX2NsaWVudCAqLGNoYXIqICxpbnQpOworZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYnVmLAorCQkJICAgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgaTJjX21hc3Rlcl9yZWN2KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKIAogLyogVHJhbnNmZXIgbnVtIG1lc3NhZ2VzLgogICovCi1leHRlcm4gaW50IGkyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKTsKLQorZXh0ZXJuIGludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywKKwkJCWludCBudW0pOwogCiAvKiBUaGlzIGlzIHRoZSB2ZXJ5IGdlbmVyYWxpemVkIFNNQnVzIGFjY2VzcyByb3V0aW5lLiBZb3UgcHJvYmFibHkgZG8gbm90CiAgICB3YW50IHRvIHVzZSB0aGlzLCB0aG91Z2g7IG9uZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IG1heSBiZSBtdWNoIGVhc2llciwKICAgIGFuZCBwcm9iYWJseSBqdXN0IGFzIGZhc3QuCiAgICBOb3RlIHRoYXQgd2UgdXNlIGkyY19hZGFwdGVyIGhlcmUsIGJlY2F1c2UgeW91IGRvIG5vdCBuZWVkIGEgc3BlY2lmaWMKICAgIHNtYnVzIGFkYXB0ZXIgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLiAqLwotZXh0ZXJuIHMzMiBpMmNfc21idXNfeGZlciAoc3RydWN0IGkyY19hZGFwdGVyICogYWRhcHRlciwgdTE2IGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwgaW50IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpMmNfc21idXNfZGF0YSAqIGRhdGEpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLAorCQkJICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLAorCQkJICBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpOwogCiAvKiBOb3cgZm9sbG93IHRoZSAnbmljZScgYWNjZXNzIHJvdXRpbmVzLiBUaGVzZSBhbHNvIGRvY3VtZW50IHRoZSBjYWxsaW5nCiAgICBjb252ZW50aW9ucyBvZiBpMmNfc21idXNfeGZlci4gKi8KIAotZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50KTsKLWV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IHZhbHVlKTsKLWV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCBjb21tYW5kKTsKLWV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1OCB2YWx1ZSk7Ci1leHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggY29tbWFuZCk7Ci1leHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTE2IHZhbHVlKTsKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggdmFsdWUpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCk7CitleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgIHU4IGNvbW1hbmQsIHU4IHZhbHVlKTsKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICB1OCBjb21tYW5kLCB1MTYgdmFsdWUpOwogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgKi8KIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSAgICAgdTggY29tbWFuZCwgdTggKnZhbHVlcyk7Ci1leHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAotCQkJCSAgICAgIHU4IGNvbW1hbmQsIHU4IGxlbmd0aCwKLQkJCQkgICAgICBjb25zdCB1OCAqdmFsdWVzKTsKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICB1OCBjb21tYW5kLCB1OCBsZW5ndGgsIGNvbnN0IHU4ICp2YWx1ZXMpOwogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgKi8KLWV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCitleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkJCSB1OCBjb21tYW5kLCB1OCBsZW5ndGgsIHU4ICp2YWx1ZXMpOwotZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCitleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCQkgIHU4IGNvbW1hbmQsIHU4IGxlbmd0aCwKIAkJCQkJICBjb25zdCB1OCAqdmFsdWVzKTsKIApAQCAtMTY5LDcgKzE2OCw3IEBACiAJLyogYSBpb2N0bCBsaWtlIGNvbW1hbmQgdGhhdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucwogCSAqIHdpdGggdGhlIGRldmljZS4KIAkgKi8KLQlpbnQgKCpjb21tYW5kKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisJaW50ICgqY29tbWFuZCkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKIAljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWRfdGFibGU7CkBAIC0yMjQsMTQgKzIyMywxNCBAQAogCXJldHVybiB0b19pMmNfY2xpZW50KGRldik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqaTJjX2dldF9jbGllbnRkYXRhIChzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkICppMmNfZ2V0X2NsaWVudGRhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmRldikKIHsKLQlyZXR1cm4gZGV2X2dldF9kcnZkYXRhICgmZGV2LT5kZXYpOworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGkyY19zZXRfY2xpZW50ZGF0YSAoc3RydWN0IGkyY19jbGllbnQgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc2V0X2NsaWVudGRhdGEoc3RydWN0IGkyY19jbGllbnQgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlkZXZfc2V0X2RydmRhdGEgKCZkZXYtPmRldiwgZGF0YSk7CisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgZGF0YSk7CiB9CiAKIC8qKgpAQCAtMjQwLDYgKzIzOSw3IEBACiAgKiBAZmxhZ3M6IHRvIGluaXRpYWxpemUgaTJjX2NsaWVudC5mbGFncwogICogQGFkZHI6IHN0b3JlZCBpbiBpMmNfY2xpZW50LmFkZHIKICAqIEBwbGF0Zm9ybV9kYXRhOiBzdG9yZWQgaW4gaTJjX2NsaWVudC5kZXYucGxhdGZvcm1fZGF0YQorICogQGFyY2hkYXRhOiBjb3BpZWQgaW50byBpMmNfY2xpZW50LmRldi5hcmNoZGF0YQogICogQGlycTogc3RvcmVkIGluIGkyY19jbGllbnQuaXJxCiAgKgogICogSTJDIGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydCBoYXJkd2FyZSBwcm9iaW5nLCBhbHRob3VnaCBjb250cm9sbGVycyBhbmQKQEAgLTI1OSw2ICsyNTksNyBAQAogCXVuc2lnbmVkIHNob3J0CWZsYWdzOwogCXVuc2lnbmVkIHNob3J0CWFkZHI7CiAJdm9pZAkJKnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRldl9hcmNoZGF0YQkqYXJjaGRhdGE7CiAJaW50CQlpcnE7CiB9OwogCkBAIC0yNzIsNyArMjczLDcgQEAKICAqIGZpZWxkcyAoc3VjaCBhcyBhc3NvY2lhdGVkIGlycSwgb3IgZGV2aWNlLXNwZWNpZmljIHBsYXRmb3JtX2RhdGEpCiAgKiBhcmUgcHJvdmlkZWQgdXNpbmcgY29udmVudGlvbmFsIHN5bnRheC4KICAqLwotI2RlZmluZSBJMkNfQk9BUkRfSU5GTyhkZXZfdHlwZSxkZXZfYWRkcikgXAorI2RlZmluZSBJMkNfQk9BUkRfSU5GTyhkZXZfdHlwZSwgZGV2X2FkZHIpIFwKIAkudHlwZSA9IChkZXZfdHlwZSksIC5hZGRyID0gKGRldl9hZGRyKQogCiAKQEAgLTMwNiwxMCArMzA3LDEyIEBACiAgKi8KICNpZmRlZiBDT05GSUdfSTJDX0JPQVJESU5GTwogZXh0ZXJuIGludAotaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oaW50IGJ1c251bSwgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLCB1bnNpZ25lZCBuKTsKK2kyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKGludCBidXNudW0sIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKKwkJCXVuc2lnbmVkIG4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50Ci1pMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpbnQgYnVzbnVtLCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sIHVuc2lnbmVkIG4pCitpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpbnQgYnVzbnVtLCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sCisJCQl1bnNpZ25lZCBuKQogewogCXJldHVybiAwOwogfQpAQCAtMzI4LDExICszMzEsMTEgQEAKIAkgICB1c2luZyBjb21tb24gSTJDIG1lc3NhZ2VzICovCiAJLyogbWFzdGVyX3hmZXIgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHN1Y2Nlc3NmdWxseQogCSAgIHByb2Nlc3NlZCwgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciAqLwotCWludCAoKm1hc3Rlcl94ZmVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsc3RydWN0IGkyY19tc2cgKm1zZ3MsCi0JICAgICAgICAgICAgICAgICAgIGludCBudW0pOworCWludCAoKm1hc3Rlcl94ZmVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkJICAgaW50IG51bSk7CiAJaW50ICgqc21idXNfeGZlcikgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdTE2IGFkZHIsCi0JICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCi0JICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqIGRhdGEpOworCQkJICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKKwkJCSAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSk7CiAKIAkvKiBUbyBkZXRlcm1pbmUgd2hhdCB0aGUgYWRhcHRlciBzdXBwb3J0cyAqLwogCXUzMiAoKmZ1bmN0aW9uYWxpdHkpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CkBAIC0zNDUsNyArMzQ4LDcgQEAKIHN0cnVjdCBpMmNfYWRhcHRlciB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdW5zaWduZWQgaW50IGlkOwotCXVuc2lnbmVkIGludCBjbGFzczsKKwl1bnNpZ25lZCBpbnQgY2xhc3M7CQkgIC8qIGNsYXNzZXMgdG8gYWxsb3cgcHJvYmluZyBmb3IgKi8KIAljb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSAqYWxnbzsgLyogdGhlIGFsZ29yaXRobSB0byBhY2Nlc3MgdGhlIGJ1cyAqLwogCXZvaWQgKmFsZ29fZGF0YTsKIApAQCAtMzY5LDE0ICszNzIsMTQgQEAKIH07CiAjZGVmaW5lIHRvX2kyY19hZGFwdGVyKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIsIGRldikKIAotc3RhdGljIGlubGluZSB2b2lkICppMmNfZ2V0X2FkYXBkYXRhIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaTJjX2dldF9hZGFwZGF0YShjb25zdCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRldikKIHsKLQlyZXR1cm4gZGV2X2dldF9kcnZkYXRhICgmZGV2LT5kZXYpOworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGkyY19zZXRfYWRhcGRhdGEgKHN0cnVjdCBpMmNfYWRhcHRlciAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIGkyY19zZXRfYWRhcGRhdGEoc3RydWN0IGkyY19hZGFwdGVyICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZGV2X3NldF9kcnZkYXRhICgmZGV2LT5kZXYsIGRhdGEpOworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOwogfQogCiAvKmZsYWdzIGZvciB0aGUgY2xpZW50IHN0cnVjdDogKi8KQEAgLTQ0OSw3ICs0NTIsNyBAQAogCQljb25zdCBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgKmFkZHJlc3NfZGF0YSwKIAkJaW50ICgqZm91bmRfcHJvYykgKHN0cnVjdCBpMmNfYWRhcHRlciAqLCBpbnQsIGludCkpOwogCi1leHRlcm4gc3RydWN0IGkyY19hZGFwdGVyKiBpMmNfZ2V0X2FkYXB0ZXIoaW50IGlkKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19nZXRfYWRhcHRlcihpbnQgaWQpOwogZXh0ZXJuIHZvaWQgaTJjX3B1dF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CiAKIApAQCAtNDY1LDcgKzQ2OCw3IEBACiAJcmV0dXJuIChmdW5jICYgaTJjX2dldF9mdW5jdGlvbmFsaXR5KGFkYXApKSA9PSBmdW5jOwogfQogCi0vKiBSZXR1cm4gaWQgbnVtYmVyIGZvciBhIHNwZWNpZmljIGFkYXB0ZXIgKi8KKy8qIFJldHVybiB0aGUgYWRhcHRlciBudW1iZXIgZm9yIGEgc3BlY2lmaWMgYWRhcHRlciAqLwogc3RhdGljIGlubGluZSBpbnQgaTJjX2FkYXB0ZXJfaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXJldHVybiBhZGFwLT5ucjsKQEAgLTUyNiw3ICs1MjksNyBAQAogCiAjZGVmaW5lIEkyQ19GVU5DX0kyQwkJCTB4MDAwMDAwMDEKICNkZWZpbmUgSTJDX0ZVTkNfMTBCSVRfQUREUgkJMHgwMDAwMDAwMgotI2RlZmluZSBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORwkweDAwMDAwMDA0IC8qIEkyQ19NX3tSRVZfRElSX0FERFIsTk9TVEFSVCwuLn0gKi8KKyNkZWZpbmUgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkcJMHgwMDAwMDAwNCAvKiBJMkNfTV9OT1NUQVJUIGV0Yy4gKi8KICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUEVDCQkweDAwMDAwMDA4CiAjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX1BST0NfQ0FMTAkweDAwMDA4MDAwIC8qIFNNQnVzIDIuMCAqLwogI2RlZmluZSBJMkNfRlVOQ19TTUJVU19RVUlDSwkJMHgwMDAxMDAwMApAQCAtNTQxLDMwICs1NDQsMjYgQEAKICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSAweDAyMDAwMDAwCiAjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLCTB4MDQwMDAwMDAgLyogSTJDLWxpa2UgYmxvY2sgeGZlciAgKi8KICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLCTB4MDgwMDAwMDAgLyogdy8gMS1ieXRlIHJlZy4gYWRkci4gKi8KLSNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMgkgMHgxMDAwMDAwMCAvKiBJMkMtbGlrZSBibG9jayB4ZmVyICAqLwotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0tfMiAweDIwMDAwMDAwIC8qIHcvIDItYnl0ZSByZWcuIGFkZHIuICovCiAKLSNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQllURSAoSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKQotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkKLSNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBIChJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEpCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSkKLSNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLIChJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSyB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0spCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DS18yIChJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DS18yIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLXzIpCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JZVEUJCShJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEJKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEJKEkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBCShJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0sJKEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLKQogCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0VNVUwgKEkyQ19GVU5DX1NNQlVTX1FVSUNLIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19CWVRFIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfUFJPQ19DQUxMIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIHwgXAotCQkJICAgICBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0sgfCBcCi0JCQkgICAgIEkyQ19GVU5DX1NNQlVTX1BFQykKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfRU1VTAkJKEkyQ19GVU5DX1NNQlVTX1FVSUNLIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfQllURSB8IFwKKwkJCQkJIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IFwKKwkJCQkJIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSB8IFwKKwkJCQkJIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTCB8IFwKKwkJCQkJIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEEgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0sgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19QRUMpCiAKIC8qCiAgKiBEYXRhIGZvciBTTUJ1cyBNZXNzYWdlcwpAQCAtNTc0LDcgKzU3Myw3IEBACiAJX191OCBieXRlOwogCV9fdTE2IHdvcmQ7CiAJX191OCBibG9ja1tJMkNfU01CVVNfQkxPQ0tfTUFYICsgMl07IC8qIGJsb2NrWzBdIGlzIHVzZWQgZm9yIGxlbmd0aCAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIG9uZSBtb3JlIGZvciB1c2VyLXNwYWNlIGNvbXBhdGliaWxpdHkgKi8KKwkJCSAgICAgICAvKiBhbmQgb25lIG1vcmUgZm9yIHVzZXItc3BhY2UgY29tcGF0aWJpbGl0eSAqLwogfTsKIAogLyogaTJjX3NtYnVzX3hmZXIgcmVhZCBvciB3cml0ZSBtYXJrZXJzICovCkBAIC02MDIsMjEgKzYwMSwyMSBAQAogCiAvKiBEZWZhdWx0IGZpbGwgb2YgbWFueSB2YXJpYWJsZXMgKi8KICNkZWZpbmUgSTJDX0NMSUVOVF9ERUZBVUxUUyB7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORH0KKwkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisJCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKwkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisJCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKwkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisJCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKwkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisJCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKwkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisJCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9CiAKIC8qIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0gY3JlYXRlcyBhIG1vZHVsZSBwYXJhbWV0ZXIsIGFuZCBwdXRzIGl0IGluIHRoZQogICAgbW9kdWxlIGhlYWRlciAqLwpAQCAtNjI1LDcgKzYyNCw3IEBACiAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB2YXJbSTJDX0NMSUVOVF9NQVhfT1BUU10gPSBJMkNfQ0xJRU5UX0RFRkFVTFRTOyBcCiAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmFyIyNfbnVtOyBcCiAgIG1vZHVsZV9wYXJhbV9hcnJheSh2YXIsIHNob3J0LCAmdmFyIyNfbnVtLCAwKTsgXAotICBNT0RVTEVfUEFSTV9ERVNDKHZhcixkZXNjKQorICBNT0RVTEVfUEFSTV9ERVNDKHZhciwgZGVzYykKIAogI2RlZmluZSBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNX0ZPUkNFKG5hbWUpCQkJCVwKIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0oZm9yY2VfIyNuYW1lLAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNjA0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiB0d2w0MDMwLmggLSBoZWFkZXIgZm9yIFRXTDQwMzAgUE0gYW5kIGF1ZGlvIENPREVDIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKKyAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fVFdMNDAzMF9IXworI2RlZmluZSBfX1RXTDQwMzBfSF8KKworLyoKKyAqIFVzaW5nIHRoZSB0d2w0MDMwIGNvcmUgd2UgYWRkcmVzcyByZWdpc3RlcnMgdXNpbmcgYSBwYWlyCisgKgl7IG1vZHVsZSBpZCwgcmVsYXRpdmUgcmVnaXN0ZXIgb2Zmc2V0IH0KKyAqIHdoaWNoIHRoYXQgY29yZSB0aGVuIG1hcHMgdG8gdGhlIHJlbGV2YW50CisgKgl7IGkyYyBzbGF2ZSwgYWJzb2x1dGUgcmVnaXN0ZXIgYWRkcmVzcyB9CisgKgorICogVGhlIG1vZHVsZSBJRHMgYXJlIG1lYW5pbmdmdWwgb25seSB0byB0aGUgdHdsNDAzMCBjb3JlIGNvZGUsCisgKiB3aGljaCB1c2VzIHRoZW0gYXMgYXJyYXkgaW5kaWNlcyB0byBsb29rIHVwIHRoZSBmaXJzdCByZWdpc3RlcgorICogYWRkcmVzcyBlYWNoIG1vZHVsZSB1c2VzIHdpdGhpbiBhIGdpdmVuIGkyYyBzbGF2ZS4KKyAqLworCisvKiBTbGF2ZSAwIChpMmMgYWRkcmVzcyAweDQ4KSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9VU0IJCTB4MDAKKworLyogU2xhdmUgMSAoaTJjIGFkZHJlc3MgMHg0OSkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UJMHgwMQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9HUElPCQkweDAyCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVEJSCQkweDAzCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BJSAkJMHgwNAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9URVNUCQkweDA1CisKKy8qIFNsYXZlIDIgKGkyYyBhZGRyZXNzIDB4NGEpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0tFWVBBRAkJMHgwNgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9NQURDCQkweDA3CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVEVSUlVQVFMJMHgwOAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9MRUQJCTB4MDkKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTUFJTl9DSEFSR0UJMHgwQQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QUkVDSEFSR0UJMHgwQgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV00wCQkweDBDCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTTEJCTB4MEQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNQQkJMHgwRQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV01CCQkweDBGCisKKy8qIFNsYXZlIDMgKGkyYyBhZGRyZXNzIDB4NGIpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0JBQ0tVUAkJMHgxMAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlQJCTB4MTEKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIJMHgxMworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9SVEMJCTB4MTQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfU0VDVVJFRF9SRUcJMHgxNQorCisvKgorICogUmVhZCBhbmQgd3JpdGUgc2luZ2xlIDgtYml0IHJlZ2lzdGVycworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGVfdTgodTggbW9kX25vLCB1OCB2YWwsIHU4IHJlZyk7CitpbnQgdHdsNDAzMF9pMmNfcmVhZF91OCh1OCBtb2Rfbm8sIHU4ICp2YWwsIHU4IHJlZyk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSBzZXZlcmFsIDgtYml0IHJlZ2lzdGVycyBhdCBvbmNlLgorICoKKyAqIElNUE9SVEFOVDogIEZvciB0d2w0MDMwX2kyY193cml0ZSgpLCBhbGxvY2F0ZSBudW1fYnl0ZXMgKyAxCisgKiBmb3IgdGhlIHZhbHVlLCBhbmQgcG9wdWxhdGUgeW91ciBkYXRhIHN0YXJ0aW5nIGF0IG9mZnNldCAxLgorICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdTggbnVtX2J5dGVzKTsKK2ludCB0d2w0MDMwX2kyY19yZWFkKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBOT1RFOiAgYXQgdXAgdG8gMTAyNCByZWdpc3RlcnMsIHRoaXMgaXMgYSBiaWcgY2hpcC4KKyAqCisgKiBBdm9pZCBwdXR0aW5nIHJlZ2lzdGVyIGRlY2xhcmF0aW9ucyBpbiB0aGlzIGZpbGUsIGluc3RlYWQgb2YgaW50bworICogYSBkcml2ZXItcHJpdmF0ZSBmaWxlLCB1bmxlc3Mgc29tZSBvZiB0aGUgcmVnaXN0ZXJzIGluIGEgYmxvY2sKKyAqIG5lZWQgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgZHJpdmVycy4gIE9uZSBleGFtcGxlIGlzIGJsb2NrcyB0aGF0CisgKiBoYXZlIFNlY29uZGFyeSBJUlEgSGFuZGxlciAoU0lIKSByZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX0VYQ0xFTl9NQVNLCUJJVCgwKQorI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX1BFTkRESVNfTUFTSwlCSVQoMSkKKyNkZWZpbmUgVFdMNDAzMF9TSUhfQ1RSTF9DT1JfTUFTSwlCSVQoMikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEdQSU8gQmxvY2sgUmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX0dQSU8pCisgKi8KKworI2RlZmluZSBSRUdfR1BJT0RBVEFJTjEJCQkweDAKKyNkZWZpbmUgUkVHX0dQSU9EQVRBSU4yCQkJMHgxCisjZGVmaW5lIFJFR19HUElPREFUQUlOMwkJCTB4MgorI2RlZmluZSBSRUdfR1BJT0RBVEFESVIxCQkweDMKKyNkZWZpbmUgUkVHX0dQSU9EQVRBRElSMgkJMHg0CisjZGVmaW5lIFJFR19HUElPREFUQURJUjMJCTB4NQorI2RlZmluZSBSRUdfR1BJT0RBVEFPVVQxCQkweDYKKyNkZWZpbmUgUkVHX0dQSU9EQVRBT1VUMgkJMHg3CisjZGVmaW5lIFJFR19HUElPREFUQU9VVDMJCTB4OAorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDEJCTB4OQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDIJCTB4QQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDMJCTB4QgorI2RlZmluZSBSRUdfU0VUR1BJT0RBVEFPVVQxCQkweEMKKyNkZWZpbmUgUkVHX1NFVEdQSU9EQVRBT1VUMgkJMHhECisjZGVmaW5lIFJFR19TRVRHUElPREFUQU9VVDMJCTB4RQorI2RlZmluZSBSRUdfR1BJT19ERUJFTjEJCQkweEYKKyNkZWZpbmUgUkVHX0dQSU9fREVCRU4yCQkJMHgxMAorI2RlZmluZSBSRUdfR1BJT19ERUJFTjMJCQkweDExCisjZGVmaW5lIFJFR19HUElPX0NUUkwJCQkweDEyCisjZGVmaW5lIFJFR19HUElPUFVQRENUUjEJCTB4MTMKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSMgkJMHgxNAorI2RlZmluZSBSRUdfR1BJT1BVUERDVFIzCQkweDE1CisjZGVmaW5lIFJFR19HUElPUFVQRENUUjQJCTB4MTYKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSNQkJMHgxNworI2RlZmluZSBSRUdfR1BJT19JU1IxQQkJCTB4MTkKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkEJCQkweDFBCisjZGVmaW5lIFJFR19HUElPX0lTUjNBCQkJMHgxQgorI2RlZmluZSBSRUdfR1BJT19JTVIxQQkJCTB4MUMKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkEJCQkweDFECisjZGVmaW5lIFJFR19HUElPX0lNUjNBCQkJMHgxRQorI2RlZmluZSBSRUdfR1BJT19JU1IxQgkJCTB4MUYKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkIJCQkweDIwCisjZGVmaW5lIFJFR19HUElPX0lTUjNCCQkJMHgyMQorI2RlZmluZSBSRUdfR1BJT19JTVIxQgkJCTB4MjIKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkIJCQkweDIzCisjZGVmaW5lIFJFR19HUElPX0lNUjNCCQkJMHgyNAorI2RlZmluZSBSRUdfR1BJT19FRFIxCQkJMHgyOAorI2RlZmluZSBSRUdfR1BJT19FRFIyCQkJMHgyOQorI2RlZmluZSBSRUdfR1BJT19FRFIzCQkJMHgyQQorI2RlZmluZSBSRUdfR1BJT19FRFI0CQkJMHgyQgorI2RlZmluZSBSRUdfR1BJT19FRFI1CQkJMHgyQworI2RlZmluZSBSRUdfR1BJT19TSUhfQ1RSTAkJMHgyRAorCisvKiBVcCB0byAxOCBzaWduYWxzIGFyZSBhdmFpbGFibGUgYXMgR1BJT3MsIHdoZW4gdGhlaXIKKyAqIHBpbnMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbm90aGVyIHVzZSAoc3VjaCBhcyBVTFBJL1VTQikuCisgKi8KKyNkZWZpbmUgVFdMNDAzMF9HUElPX01BWAkJMTgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEtleXBhZCByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfS0VZUEFEKQorICogLi4uIFNJSC9pbnRlcnJ1cHQgb25seQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IxCTB4MTEKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIxCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IyCTB4MTMKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIyCTB4MTQKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9TSVIJCTB4MTUJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0VEUgkJMHgxNgorI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJSF9DVFJMCTB4MTcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE11bHRpY2hhbm5lbCBBREMgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX01BREMpCisgKiAuLi4gU0lIL2ludGVycnVwdCBvbmx5CisgKi8KKworI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMQkJMHg2MQorI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMQkJMHg2MgorI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMgkJMHg2MworI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMgkJMHg2NAorI2RlZmluZSBUV0w0MDMwX01BRENfU0lSCQkweDY1CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9NQURDX0VEUgkJMHg2NgorI2RlZmluZSBUV0w0MDMwX01BRENfU0lIX0NUUkwJCTB4NjcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEJhdHRlcnkgY2hhcmdlciByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5URVJSVVBUUykKKyAqLworCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQQkweDAKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjJBCTB4MQorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUEJMHgyCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIyQQkweDMKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFCCTB4NAorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkIJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQgkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJCCTB4NworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMQkweDgJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMgkweDkJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMQkweGEKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUVEUjIJMHhiCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lFRFIzCTB4YworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTAkweGQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFBvd2VyIEludGVycnVwdCBibG9jayByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5UKQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lTUjEJCTB4MAorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSU1SMQkJMHgxCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JU1IyCQkweDIKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lNUjIJCTB4MworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfU0lSCQkweDQJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfRURSMQkJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9FRFIyCQkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX1NJSF9DVFJMCTB4NworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YSB7CisJaW50ICpiYXR0ZXJ5X3RtcF90Ymw7CisJdW5zaWduZWQgaW50IHRibHNpemU7Cit9OworCisvKiBUV0w0MDMwX0dQSU9fTUFYICgxOCkgR1BJT3MsIHdpdGggaW50ZXJydXB0cyAqLworc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJCWdwaW9fYmFzZTsKKwl1bnNpZ25lZAlpcnFfYmFzZSwgaXJxX2VuZDsKKworCS8qIHBhY2thZ2UgdGhlIHR3byBMRUQgc2lnbmFscyBhcyBvdXRwdXQtb25seSBHUElPcz8gKi8KKwlib29sCQl1c2VfbGVkczsKKworCS8qIGdwaW8tbiBzaG91bGQgY29udHJvbCBWTU1DKG4rMSkgaWYgQklUKG4pIGluIG1tY19jZCBpcyBzZXQgKi8KKwl1OAkJbW1jX2NkOworCisJLyogRm9yIGdwaW8tTiwgYml0ICgxIDw8IE4pIGluICJwdWxsdXBzIiBpcyBzZXQgaWYgdGhhdCBwdWxsdXAKKwkgKiBzaG91bGQgYmUgZW5hYmxlZC4gIEVsc2UsIGlmIHRoYXQgYml0IGlzIHNldCBpbiAicHVsbGRvd25zIiwKKwkgKiB0aGF0IHB1bGxkb3duIGlzIGVuYWJsZWQuICBEb24ndCB3YXN0ZSBwb3dlciBieSBsZXR0aW5nIGFueQorCSAqIGRpZ2l0YWwgaW5wdXRzIGZsb2F0Li4uCisJICovCisJdTMyCQlwdWxsdXBzOworCXUzMgkJcHVsbGRvd25zOworCisJaW50CQkoKnNldHVwKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pOworCWludAkJKCp0ZWFyZG93bikoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKTsKK307CisKK3N0cnVjdCB0d2w0MDMwX21hZGNfcGxhdGZvcm1fZGF0YSB7CisJaW50CQlpcnFfbGluZTsKK307CisKK3N0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHsKKwlpbnQgcm93czsKKwlpbnQgY29sczsKKwlpbnQgKmtleW1hcDsKKwlpbnQgaXJxOworCXVuc2lnbmVkIGludCBrZXltYXBzaXplOworCXVuc2lnbmVkIGludCByZXA6MTsKK307CisKK2VudW0gdHdsNDAzMF91c2JfbW9kZSB7CisJVDJfVVNCX01PREVfVUxQSSA9IDEsCisJVDJfVVNCX01PREVfQ0VBMjAxMV8zUElOID0gMiwKK307CisKK3N0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIHsKKwllbnVtIHR3bDQwMzBfdXNiX21vZGUJdXNiX21vZGU7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZAkJCQlpcnFfYmFzZSwgaXJxX2VuZDsKKwlzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YQkqYmNpOworCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YQkqZ3BpbzsKKwlzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEJKm1hZGM7CisJc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEJCSprZXlwYWQ7CisJc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEJCQkqdXNiOworCisJLyogUkVWSVNJVCBtb3JlIHRvIGNvbWUgLi4uIF9ub3RoaW5nXyBzaG91bGQgYmUgaGFyZC13aXJlZCAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IHR3bDQwMzBfc2loX3NldHVwKGludCBtb2R1bGUpOworCisvKgorICogRklYTUUgY29tcGxldGVseSBzdG9wIHVzaW5nIFRXTDQwMzBfSVJRX0JBU0UgLi4uIGluc3RlYWQsIHBhc3MgdGhlCisgKiBJUlEgZGF0YSB0byBzdWJzaWRpYXJ5IGRldmljZXMgdXNpbmcgcGxhdGZvcm0gZGV2aWNlIHJlc291cmNlcy4KKyAqLworCisvKiBJUlEgaW5mb3JtYXRpb24tbmVlZCBiYXNlICovCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisvKiBUV0w0MDMwIGludGVycnVwdHMgKi8KKworLyogI2RlZmluZSBUV0w0MDMwX01PRElSUV9HUElPCQkoVFdMNDAzMF9JUlFfQkFTRSArIDApICovCisjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX0tFWVBBRAkJKFRXTDQwMzBfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBUV0w0MDMwX01PRElSUV9CQ0kJCShUV0w0MDMwX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfTUFEQwkJKFRXTDQwMzBfSVJRX0JBU0UgKyAzKQorLyogI2RlZmluZSBUV0w0MDMwX01PRElSUV9VU0IJCShUV0w0MDMwX0lSUV9CQVNFICsgNCkgKi8KKy8qICNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfUFdSCQkoVFdMNDAzMF9JUlFfQkFTRSArIDUpICovCisKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfUFdSQlROCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyAwKQorLyogI2RlZmluZSBUV0w0MDMwX1BXUklSUV9DSEdfUFJFUwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgMSkgKi8KKy8qICNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfVVNCX1BSRVMJCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDIpICovCisvKiAjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX1JUQwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgMykgKi8KKy8qICNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfSE9UX0RJRQkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgNCkgKi8KKy8qICNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfUFdST0tfVElNRU9VVAkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyA1KSAqLworLyogI2RlZmluZSBUV0w0MDMwX1BXUklSUV9NQkNIRwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgNikgKi8KKy8qICNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfU0NfREVURUNUCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDcpICovCisKKy8qIFJlc3QgYXJlIHVuc3VlZCBjdXJyZW50bHkqLworCisvKiBPZmZzZXRzIHRvIFBvd2VyIFJlZ2lzdGVycyAqLworI2RlZmluZSBUV0w0MDMwX1ZEQUNfREVWX0dSUAkJMHgzQgorI2RlZmluZSBUV0w0MDMwX1ZEQUNfREVESUNBVEVECQkweDNFCisjZGVmaW5lIFRXTDQwMzBfVkFVWDFfREVWX0dSUAkJMHgxNworI2RlZmluZSBUV0w0MDMwX1ZBVVgxX0RFRElDQVRFRAkJMHgxQQorI2RlZmluZSBUV0w0MDMwX1ZBVVgyX0RFVl9HUlAJCTB4MUIKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMl9ERURJQ0FURUQJCTB4MUUKKyNkZWZpbmUgVFdMNDAzMF9WQVVYM19ERVZfR1JQCQkweDFGCisjZGVmaW5lIFRXTDQwMzBfVkFVWDNfREVESUNBVEVECQkweDIyCisKKy8qIFRXTDQwMzAgR1BJTyBpbnRlcnJ1cHQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBUV0w0MDMwX0dQSU9fSVJRX05PKG4pCQkoVFdMNDAzMF9HUElPX0lSUV9CQVNFICsgKG4pKQorCisvKgorICogRXhwb3J0ZWQgVFdMNDAzMCBHUElPIEFQSXMKKyAqCisgKiBXQVJOSU5HIC0tIHVzZSBzdGFuZGFyZCBHUElPIGFuZCBJUlEgY2FsbHMgaW5zdGVhZDsgdGhlc2Ugd2lsbCB2YW5pc2guCisgKi8KK2ludCB0d2w0MDMwX3NldF9ncGlvX2RlYm91bmNlKGludCBncGlvLCBpbnQgZW5hYmxlKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUlkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZX01PRFVMRSkKKwlleHRlcm4gaW50IHR3bDQwMzBjaGFyZ2VyX3VzYl9lbihpbnQgZW5hYmxlKTsKKyNlbHNlCisJc3RhdGljIGlubGluZSBpbnQgdHdsNDAzMGNoYXJnZXJfdXNiX2VuKGludCBlbmFibGUpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjZW5kaWYgLyogRW5kIG9mIF9fVFdMNDAzMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCBjNDdlMzcxLi41NDUyNWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTQ2MSwxMiArNDYxLDI2IEBACiBzdHJ1Y3QgaWRlX2FjcGlfaHdpZl9saW5rOwogI2VuZGlmCiAKK3N0cnVjdCBpZGVfZHJpdmVfczsKKworc3RydWN0IGlkZV9kaXNrX29wcyB7CisJaW50CQkoKmNoZWNrKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgY29uc3QgY2hhciAqKTsKKwlpbnQJCSgqZ2V0X2NhcGFjaXR5KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJdm9pZAkJKCpzZXR1cCkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCXZvaWQJCSgqZmx1c2gpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwlpbnQJCSgqaW5pdF9tZWRpYSkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBnZW5kaXNrICopOworCWludAkJKCpzZXRfZG9vcmxvY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgZ2VuZGlzayAqLAorCQkJCQlpbnQpOworCWlkZV9zdGFydHN0b3BfdAkoKmRvX3JlcXVlc3QpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAorCQkJCSAgICAgIHNlY3Rvcl90KTsKKwlpbnQJCSgqZW5kX3JlcXVlc3QpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQsIGludCk7CisJaW50CQkoKmlvY3RsKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAorCQkJCSBmbW9kZV90LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworfTsKKwogLyogQVRBUEkgZGV2aWNlIGZsYWdzICovCiBlbnVtIHsKIAlJREVfQUZMQUdfRFJRX0lOVEVSUlVQVAkJPSAoMSA8PCAwKSwKLQlJREVfQUZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAxKSwKLQkvKiBEcml2ZSBjYW5ub3QgbG9jayB0aGUgZG9vci4gKi8KLQlJREVfQUZMQUdfTk9fRE9PUkxPQ0sJCT0gKDEgPDwgMiksCiAKIAkvKiBpZGUtY2QgKi8KIAkvKiBEcml2ZSBjYW5ub3QgZWplY3QgdGhlIGRpc2MuICovCkBAIC00OTgsMTQgKzUxMiwxMCBAQAogCUlERV9BRkxBR19MRV9TUEVFRF9GSUVMRFMJPSAoMSA8PCAxNyksCiAKIAkvKiBpZGUtZmxvcHB5ICovCi0JLyogRm9ybWF0IGluIHByb2dyZXNzICovCi0JSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUwk9ICgxIDw8IDE4KSwKIAkvKiBBdm9pZCBjb21tYW5kcyBub3Qgc3VwcG9ydGVkIGluIENsaWsgZHJpdmUgKi8KIAlJREVfQUZMQUdfQ0xJS19EUklWRQkJPSAoMSA8PCAxOSksCiAJLyogUmVxdWlyZXMgQkggYWxnb3JpdGhtIGZvciBwYWNrZXRzICovCiAJSURFX0FGTEFHX1pJUF9EUklWRQkJPSAoMSA8PCAyMCksCi0JLyogV3JpdGUgcHJvdGVjdCAqLwotCUlERV9BRkxBR19XUAkJCT0gKDEgPDwgMjEpLAogCS8qIFN1cHBvcnRzIGZvcm1hdCBwcm9ncmVzcyByZXBvcnQgKi8KIAlJREVfQUZMQUdfU1JGUAkJCT0gKDEgPDwgMjIpLAogCkBAIC01NzgsNyArNTg4LDExIEBACiAJLyogZG9uJ3QgdW5sb2FkIGhlYWRzICovCiAJSURFX0RGTEFHX05PX1VOTE9BRAkJPSAoMSA8PCAyNyksCiAJLyogaGVhZHMgdW5sb2FkZWQsIHBsZWFzZSBkb24ndCByZXNldCBwb3J0ICovCi0JSURFX0RGTEFHX1BBUktFRAkJPSAoMSA8PCAyOCkKKwlJREVfREZMQUdfUEFSS0VECQk9ICgxIDw8IDI4KSwKKwlJREVfREZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAyOSksCisJLyogd3JpdGUgcHJvdGVjdCAqLworCUlERV9ERkxBR19XUAkJCT0gKDEgPDwgMzApLAorCUlERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1MJPSAoMSA8PCAzMSksCiB9OwogCiBzdHJ1Y3QgaWRlX2RyaXZlX3MgewpAQCAtNTk3LDYgKzYxMSw4IEBACiAjZW5kaWYKIAlzdHJ1Y3QgaHdpZl9zCQkqaHdpZjsJLyogYWN0dWFsbHkgKGlkZV9od2lmX3QgKikgKi8KIAorCWNvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgKmRpc2tfb3BzOworCiAJdW5zaWduZWQgbG9uZyBkZXZfZmxhZ3M7CiAKIAl1bnNpZ25lZCBsb25nIHNsZWVwOwkJLyogc2xlZXAgdW50aWwgdGhpcyB0aW1lICovCkBAIC0xMTIzLDggKzExMzksOCBAQAogCXZvaWQJCSgqcmVzdW1lKShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCQkoKnNodXRkb3duKShpZGVfZHJpdmVfdCAqKTsKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQlpZGVfcHJvY19lbnRyeV90CQkqcHJvYzsKLQljb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0CSpzZXR0aW5nczsKKwlpZGVfcHJvY19lbnRyeV90ICoJCSgqcHJvY19lbnRyaWVzKShpZGVfZHJpdmVfdCAqKTsKKwljb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICoJKCpwcm9jX2RldnNldHMpKGlkZV9kcml2ZV90ICopOwogI2VuZGlmCiB9OwogCkBAIC0xMTQyLDggKzExNTgsNyBAQAogaW50IGlkZV9zZXR0aW5nX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQgaW50LAogCQkgICAgICB1bnNpZ25lZCBsb25nLCBjb25zdCBzdHJ1Y3QgaWRlX2lvY3RsX2RldnNldCAqKTsKIAotaW50IGdlbmVyaWNfaWRlX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBmaWxlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJICAgICAgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworaW50IGdlbmVyaWNfaWRlX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwogCiBleHRlcm4gaW50IGlkZV92bGJfY2xrOwogZXh0ZXJuIGludCBpZGVfcGNpX2NsazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggYWQ2MzgyNC4uMGMxMjY0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTQwLDcgKzQwLDcgQEAKIAogLyogVGhlc2UgYXJlIGZvciBldmVyeWJvZHkgKGFsdGhvdWdoIG5vdCBhbGwgYXJjaHMgd2lsbCBhY3R1YWxseQogICAgZGlzY2FyZCBpdCBpbiBtb2R1bGVzKSAqLwotI2RlZmluZSBfX2luaXQJCV9fc2VjdGlvbiguaW5pdC50ZXh0KSBfX2NvbGQKKyNkZWZpbmUgX19pbml0CQlfX3NlY3Rpb24oLmluaXQudGV4dCkgX19jb2xkIG5vdHJhY2UKICNkZWZpbmUgX19pbml0ZGF0YQlfX3NlY3Rpb24oLmluaXQuZGF0YSkKICNkZWZpbmUgX19pbml0Y29uc3QJX19zZWN0aW9uKC5pbml0LnJvZGF0YSkKICNkZWZpbmUgX19leGl0ZGF0YQlfX3NlY3Rpb24oLmV4aXQuZGF0YSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IDAyMWQ4ZTcuLjIzZmQ4OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTcwLDYgKzE3MCw3IEBACiAJLmNwdV90aW1lcnMJPSBJTklUX0NQVV9USU1FUlModHNrLmNwdV90aW1lcnMpLAkJXAogCS5mc19leGNsCT0gQVRPTUlDX0lOSVQoMCksCQkJCVwKIAkucGlfbG9jawk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHRzay5waV9sb2NrKSwJCVwKKwkudGltZXJfc2xhY2tfbnMgPSA1MDAwMCwgLyogNTAgdXNlYyBkZWZhdWx0IHNsYWNrICovCQlcCiAJLnBpZHMgPSB7CQkJCQkJCVwKIAkJW1BJRFRZUEVfUElEXSAgPSBJTklUX1BJRF9MSU5LKFBJRFRZUEVfUElEKSwJCVwKIAkJW1BJRFRZUEVfUEdJRF0gPSBJTklUX1BJRF9MSU5LKFBJRFRZUEVfUEdJRCksCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmggYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKaW5kZXggMmUxMTdmMy4uM2QwMTdjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hX3JlbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAKIC8qCiAgKiBJbnRlbCBJT01NVSByZWdpc3RlciBzcGVjaWZpY2F0aW9uIHBlciB2ZXJzaW9uIDEuMCBwdWJsaWMgc3BlYy4KQEAgLTEyNyw2ICsxMjgsNyBAQAogCiAKIC8qIElPVExCX1JFRyAqLworI2RlZmluZSBETUFfVExCX0ZMVVNIX0dSQU5VX09GRlNFVCAgNjAKICNkZWZpbmUgRE1BX1RMQl9HTE9CQUxfRkxVU0ggKCgodTY0KTEpIDw8IDYwKQogI2RlZmluZSBETUFfVExCX0RTSV9GTFVTSCAoKCh1NjQpMikgPDwgNjApCiAjZGVmaW5lIERNQV9UTEJfUFNJX0ZMVVNIICgoKHU2NCkzKSA8PCA2MCkKQEAgLTE0MCw2ICsxNDIsNyBAQAogI2RlZmluZSBETUFfVExCX01BWF9TSVpFICgweDNmKQogCiAvKiBJTlZBTElEX0RFU0MgKi8KKyNkZWZpbmUgRE1BX0NDTURfSU5WTF9HUkFOVV9PRkZTRVQgIDYxCiAjZGVmaW5lIERNQV9JRF9UTEJfR0xPQkFMX0ZMVVNICSgoKHU2NCkxKSA8PCAzKQogI2RlZmluZSBETUFfSURfVExCX0RTSV9GTFVTSAkoKCh1NjQpMikgPDwgMykKICNkZWZpbmUgRE1BX0lEX1RMQl9QU0lfRkxVU0gJKCgodTY0KTMpIDw8IDMpCkBAIC0yMDAsMjIgKzIwMywyMSBAQAogI2RlZmluZSBkbWFfZnJjZF90eXBlKGQpICgoZCA+PiAzMCkgJiAxKQogI2RlZmluZSBkbWFfZnJjZF9mYXVsdF9yZWFzb24oYykgKGMgJiAweGZmKQogI2RlZmluZSBkbWFfZnJjZF9zb3VyY2VfaWQoYykgKGMgJiAweGZmZmYpCi0jZGVmaW5lIGRtYV9mcmNkX3BhZ2VfYWRkcihkKSAoZCAmICgoKHU2NCktMSkgPDwgMTIpKSAvKiBsb3cgNjQgYml0ICovCisvKiBsb3cgNjQgYml0ICovCisjZGVmaW5lIGRtYV9mcmNkX3BhZ2VfYWRkcihkKSAoZCAmICgoKHU2NCktMSkgPDwgUEFHRV9TSElGVCkpCiAKLSNkZWZpbmUgRE1BUl9PUEVSQVRJT05fVElNRU9VVCAoKGN5Y2xlc190KSB0c2Nfa2h6KjEwKjEwMDApIC8qIDEwc2VjICovCi0KLSNkZWZpbmUgSU9NTVVfV0FJVF9PUChpb21tdSwgb2Zmc2V0LCBvcCwgY29uZCwgc3RzKSBcCi17XAotCWN5Y2xlc190IHN0YXJ0X3RpbWUgPSBnZXRfY3ljbGVzKCk7XAotCXdoaWxlICgxKSB7XAotCQlzdHMgPSBvcCAoaW9tbXUtPnJlZyArIG9mZnNldCk7XAotCQlpZiAoY29uZClcCi0JCQlicmVhaztcCisjZGVmaW5lIElPTU1VX1dBSVRfT1AoaW9tbXUsIG9mZnNldCwgb3AsIGNvbmQsIHN0cykJCQlcCitkbyB7CQkJCQkJCQkJXAorCWN5Y2xlc190IHN0YXJ0X3RpbWUgPSBnZXRfY3ljbGVzKCk7CQkJCVwKKwl3aGlsZSAoMSkgewkJCQkJCQlcCisJCXN0cyA9IG9wKGlvbW11LT5yZWcgKyBvZmZzZXQpOwkJCQlcCisJCWlmIChjb25kKQkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKIAkJaWYgKERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgPCAoZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSkpXAotCQkJcGFuaWMoIkRNQVIgaGFyZHdhcmUgaXMgbWFsZnVuY3Rpb25pbmdcbiIpO1wKLQkJY3B1X3JlbGF4KCk7XAotCX1cCi19CisJCQlwYW5pYygiRE1BUiBoYXJkd2FyZSBpcyBtYWxmdW5jdGlvbmluZ1xuIik7CVwKKwkJY3B1X3JlbGF4KCk7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgUUlfTEVOR1RICTI1NgkvKiBxdWV1ZSBsZW5ndGggKi8KIApAQCAtMjM4LDYgKzI0MCwxOSBAQAogI2RlZmluZSBRSV9JV0RfU1RBVFVTX0RBVEEoZCkJKCgodTY0KWQpIDw8IDMyKQogI2RlZmluZSBRSV9JV0RfU1RBVFVTX1dSSVRFCSgoKHU2NCkxKSA8PCA1KQogCisjZGVmaW5lIFFJX0lPVExCX0RJRChkaWQpIAkoKCh1NjQpZGlkKSA8PCAxNikKKyNkZWZpbmUgUUlfSU9UTEJfRFIoZHIpIAkoKCh1NjQpZHIpIDw8IDcpCisjZGVmaW5lIFFJX0lPVExCX0RXKGR3KSAJKCgodTY0KWR3KSA8PCA2KQorI2RlZmluZSBRSV9JT1RMQl9HUkFOKGdyYW4pIAkoKCh1NjQpZ3JhbikgPj4gKERNQV9UTEJfRkxVU0hfR1JBTlVfT0ZGU0VULTQpKQorI2RlZmluZSBRSV9JT1RMQl9BRERSKGFkZHIpCSgoKHU2NClhZGRyKSAmIFZURF9QQUdFX01BU0spCisjZGVmaW5lIFFJX0lPVExCX0lIKGloKQkJKCgodTY0KWloKSA8PCA2KQorI2RlZmluZSBRSV9JT1RMQl9BTShhbSkJCSgoKHU4KWFtKSkKKworI2RlZmluZSBRSV9DQ19GTShmbSkJCSgoKHU2NClmbSkgPDwgNDgpCisjZGVmaW5lIFFJX0NDX1NJRChzaWQpCQkoKCh1NjQpc2lkKSA8PCAzMikKKyNkZWZpbmUgUUlfQ0NfRElEKGRpZCkJCSgoKHU2NClkaWQpIDw8IDE2KQorI2RlZmluZSBRSV9DQ19HUkFOKGdyYW4pCSgoKHU2NClncmFuKSA+PiAoRE1BX0NDTURfSU5WTF9HUkFOVV9PRkZTRVQtNCkpCisKIHN0cnVjdCBxaV9kZXNjIHsKIAl1NjQgbG93LCBoaWdoOwogfTsKQEAgLTI2Myw2ICsyNzgsMTMgQEAKIH07CiAjZW5kaWYKIAorc3RydWN0IGlvbW11X2ZsdXNoIHsKKwlpbnQgKCpmbHVzaF9jb250ZXh0KShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLCB1MTYgc2lkLCB1OCBmbSwKKwkJdTY0IHR5cGUsIGludCBub25fcHJlc2VudF9lbnRyeV9mbHVzaCk7CisJaW50ICgqZmx1c2hfaW90bGIpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBkaWQsIHU2NCBhZGRyLAorCQl1bnNpZ25lZCBpbnQgc2l6ZV9vcmRlciwgdTY0IHR5cGUsIGludCBub25fcHJlc2VudF9lbnRyeV9mbHVzaCk7Cit9OworCiBzdHJ1Y3QgaW50ZWxfaW9tbXUgewogCXZvaWQgX19pb21lbQkqcmVnOyAvKiBQb2ludGVyIHRvIGhhcmR3YXJlIHJlZ3MsIHZpcnR1YWwgYWRkciAqLwogCXU2NAkJY2FwOwpAQCAtMjgyLDYgKzMwNCw3IEBACiAJdW5zaWduZWQgY2hhciBuYW1lWzddOyAgICAvKiBEZXZpY2UgTmFtZSAqLwogCXN0cnVjdCBtc2lfbXNnIHNhdmVkX21zZzsKIAlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7CisJc3RydWN0IGlvbW11X2ZsdXNoIGZsdXNoOwogI2VuZGlmCiAJc3RydWN0IHFfaW52YWwgICpxaTsgICAgICAgICAgICAvKiBRdWV1ZWQgaW52YWxpZGF0aW9uIGluZm8gKi8KICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUApAQCAtMzAzLDYgKzMyNiwxMiBAQAogZXh0ZXJuIGludCBkbWFyX2VuYWJsZV9xaShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIGV4dGVybiB2b2lkIHFpX2dsb2JhbF9pZWMoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiAKK2V4dGVybiBpbnQgcWlfZmx1c2hfY29udGV4dChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLCB1MTYgc2lkLAorCQkJICAgICAgICB1OCBmbSwgdTY0IHR5cGUsIGludCBub25fcHJlc2VudF9lbnRyeV9mbHVzaCk7CitleHRlcm4gaW50IHFpX2ZsdXNoX2lvdGxiKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBkaWQsIHU2NCBhZGRyLAorCQkJICB1bnNpZ25lZCBpbnQgc2l6ZV9vcmRlciwgdTY0IHR5cGUsCisJCQkgIGludCBub25fcHJlc2VudF9lbnRyeV9mbHVzaCk7CisKIGV4dGVybiB2b2lkIHFpX3N1Ym1pdF9zeW5jKHN0cnVjdCBxaV9kZXNjICpkZXNjLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIAogdm9pZCBpbnRlbF9pb21tdV9kb21haW5fZXhpdChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbik7CkBAIC0zMjQsNCArMzUzLDExIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0RNQVIgKi8KIAorZXh0ZXJuIHZvaWQgKmludGVsX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCBkbWFfYWRkcl90ICosIGdmcF90KTsKK2V4dGVybiB2b2lkIGludGVsX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIHZvaWQgKiwgZG1hX2FkZHJfdCk7CitleHRlcm4gZG1hX2FkZHJfdCBpbnRlbF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKiwgcGh5c19hZGRyX3QsIHNpemVfdCwgaW50KTsKK2V4dGVybiB2b2lkIGludGVsX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKK2V4dGVybiBpbnQgaW50ZWxfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKK2V4dGVybiB2b2lkIGludGVsX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA1NGIzNjIzLi5mNThhMGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTgsOSArOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisjaW5jbHVkZSA8bGludXgvaXJxbnIuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMjczLDYgKzI3NiwyNSBAQAogZXh0ZXJuIHZvaWQgcmFpc2Vfc29mdGlycV9pcnFvZmYodW5zaWduZWQgaW50IG5yKTsKIGV4dGVybiB2b2lkIHJhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IG5yKTsKIAorLyogVGhpcyBpcyB0aGUgd29ya2xpc3QgdGhhdCBxdWV1ZXMgdXAgcGVyLWNwdSBzb2Z0aXJxIHdvcmsuCisgKgorICogc2VuZF9yZW1vdGVfc2VuZGlycSgpIGFkZHMgd29yayB0byB0aGVzZSBsaXN0cywgYW5kCisgKiB0aGUgc29mdGlycSBoYW5kbGVyIGl0c2VsZiBkZXF1ZXVlcyBmcm9tIHRoZW0uICBUaGUgcXVldWVzCisgKiBhcmUgcHJvdGVjdGVkIGJ5IGRpc2FibGluZyBsb2NhbCBjcHUgaW50ZXJydXB0cyBhbmQgdGhleSBtdXN0CisgKiBvbmx5IGJlIGFjY2Vzc2VkIGJ5IHRoZSBsb2NhbCBjcHUgdGhhdCB0aGV5IGFyZSBmb3IuCisgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkIFtOUl9TT0ZUSVJRU10sIHNvZnRpcnFfd29ya19saXN0KTsKKworLyogVHJ5IHRvIHNlbmQgYSBzb2Z0aXJxIHRvIGEgcmVtb3RlIGNwdS4gIElmIHRoaXMgY2Fubm90IGJlIGRvbmUsIHRoZQorICogd29yayB3aWxsIGJlIHF1ZXVlZCB0byB0aGUgbG9jYWwgY3B1LgorICovCitleHRlcm4gdm9pZCBzZW5kX3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHNvZnRpcnEpOworCisvKiBMaWtlIHNlbmRfcmVtb3RlX3NvZnRpcnEoKSwgYnV0IHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGxvY2FsIGNwdSBpbnRlcnJ1cHRzCisgKiBhbmQgY29tcHV0ZSB0aGUgY3VycmVudCBjcHUsIHBhc3NlZCBpbiBhcyAndGhpc19jcHUnLgorICovCitleHRlcm4gdm9pZCBfX3NlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LAorCQkJCSAgaW50IHRoaXNfY3B1LCBpbnQgc29mdGlycSk7CiAKIC8qIFRhc2tsZXRzIC0tLSBtdWx0aXRocmVhZGVkIGFuYWxvZ3VlIG9mIEJIcy4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggOGQ5NDExYi4uZDA1OGM1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisjaW5jbHVkZSA8bGludXgvaXJxbnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTUyLDYgKzE1Myw3IEBACiAgKiBAbmFtZToJCWZsb3cgaGFuZGxlciBuYW1lIGZvciAvcHJvYy9pbnRlcnJ1cHRzIG91dHB1dAogICovCiBzdHJ1Y3QgaXJxX2Rlc2MgeworCXVuc2lnbmVkIGludAkJaXJxOwogCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVfaXJxOwogCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CiAJc3RydWN0IG1zaV9kZXNjCQkqbXNpX2Rlc2M7CkBAIC0xNzAsNyArMTcyLDcgQEAKIAljcHVtYXNrX3QJCWFmZmluaXR5OwogCXVuc2lnbmVkIGludAkJY3B1OwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgfHwgZGVmaW5lZChDT05GSUdfSVJRQkFMQU5DRSkKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUQogCWNwdW1hc2tfdAkJcGVuZGluZ19tYXNrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTE3OSw4ICsxODEsMTQgQEAKIAljb25zdCBjaGFyCQkqbmFtZTsKIH0gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAorCiBleHRlcm4gc3RydWN0IGlycV9kZXNjIGlycV9kZXNjW05SX0lSUVNdOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gKGlycSA8IG5yX2lycXMpID8gaXJxX2Rlc2MgKyBpcnEgOiBOVUxMOworfQorCiAvKgogICogTWlncmF0aW9uIGhlbHBlcnMgZm9yIG9ic29sZXRlIG5hbWVzLCB0aGV5IHdpbGwgZ28gYXdheToKICAqLwpAQCAtMTk4LDE5ICsyMDYsMTUgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAKLSNpZm5kZWYgaGFuZGxlX2R5bmFtaWNfdGljawotIyBkZWZpbmUgaGFuZGxlX2R5bmFtaWNfdGljayhhKQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfU01QCiAKLSNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSB8fCBkZWZpbmVkKENPTkZJR19JUlFCQUxBTkNFKQorI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAKIHZvaWQgc2V0X3BlbmRpbmdfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKTsKIHZvaWQgbW92ZV9uYXRpdmVfaXJxKGludCBpcnEpOwogdm9pZCBtb3ZlX21hc2tlZF9pcnEoaW50IGlycSk7CiAKLSNlbHNlIC8qIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRIHx8IENPTkZJR19JUlFCQUxBTkNFICovCisjZWxzZSAvKiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9pcnEoaW50IGlycSkKIHsKQEAgLTIzNywxOSArMjQxLDE0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLSNpZmRlZiBDT05GSUdfSVJRQkFMQU5DRQotZXh0ZXJuIHZvaWQgc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotfQotI2VuZGlmCi0KIGV4dGVybiBpbnQgbm9faXJxX2FmZmluaXR5OwogCiBzdGF0aWMgaW5saW5lIGludCBpcnFfYmFsYW5jaW5nX2Rpc2FibGVkKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX05PX0JBTEFOQ0lOR19NQVNLOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXJldHVybiBkZXNjLT5zdGF0dXMgJiBJUlFfTk9fQkFMQU5DSU5HX01BU0s7CiB9CiAKIC8qIEhhbmRsZSBpcnEgYWN0aW9uIGNoYWluczogKi8KQEAgLTI3OSwxMCArMjc4LDggQEAKICAqIGlycWNoaXAtc3R5bGUgY29udHJvbGxlciB0aGVuIHdlIGNhbGwgdGhlIC0+aGFuZGxlX2lycSgpIGhhbmRsZXIsCiAgKiBhbmQgaXQgY2FsbHMgX19kb19JUlEoKSBpZiBpdCdzIGF0dGFjaGVkIHRvIGFuIGlycXR5cGUtc3R5bGUgY29udHJvbGxlci4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycV9kZXNjKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQogI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZXNjLT5oYW5kbGVfaXJxKGlycSwgZGVzYyk7CiAjZWxzZQpAQCAtMjkzLDYgKzI5MCwxMSBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX2hhbmRsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGlycV90b19kZXNjKGlycSkpOworfQorCiAvKiBIYW5kbGluZyBvZiB1bmhhbmRsZWQgYW5kIHNwdXJpb3VzIGludGVycnVwdHM6ICovCiBleHRlcm4gdm9pZCBub3RlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCQkgICBpbnQgYWN0aW9uX3JldCk7CkBAIC0zMjUsNyArMzI3LDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaW50IGlycSwKIAkJCQkJICAgICAgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZXIpCiB7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVfaXJxID0gaGFuZGxlcjsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlcjsKIH0KIAogLyoKQEAgLTM1MywxMyArMzU4LDE0IEBACiBleHRlcm4gdm9pZCBzZXRfaXJxX3Byb2JlKHVuc2lnbmVkIGludCBpcnEpOwogCiAvKiBIYW5kbGUgZHluYW1pYyBpcnEgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uICovCitleHRlcm4gdW5zaWduZWQgaW50IGNyZWF0ZV9pcnFfbnIodW5zaWduZWQgaW50IGlycV93YW50KTsKIGV4dGVybiBpbnQgY3JlYXRlX2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCiAvKiBUZXN0IHRvIHNlZSBpZiBhIGRyaXZlciBoYXMgc3VjY2Vzc2Z1bGx5IHJlcXVlc3RlZCBhbiBpcnEgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGlycV9oYXNfYWN0aW9uKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlyZXR1cm4gZGVzYy0+YWN0aW9uICE9IE5VTEw7CiB9CiAKQEAgLTM3NCwxMCArMzgwLDEwIEBACiBleHRlcm4gaW50IHNldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IHNldF9pcnFfbXNpKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfZGVzYyAqZW50cnkpOwogCi0jZGVmaW5lIGdldF9pcnFfY2hpcChpcnEpCShpcnFfZGVzY1tpcnFdLmNoaXApCi0jZGVmaW5lIGdldF9pcnFfY2hpcF9kYXRhKGlycSkJKGlycV9kZXNjW2lycV0uY2hpcF9kYXRhKQotI2RlZmluZSBnZXRfaXJxX2RhdGEoaXJxKQkoaXJxX2Rlc2NbaXJxXS5oYW5kbGVyX2RhdGEpCi0jZGVmaW5lIGdldF9pcnFfbXNpKGlycSkJKGlycV9kZXNjW2lycV0ubXNpX2Rlc2MpCisjZGVmaW5lIGdldF9pcnFfY2hpcChpcnEpCShpcnFfdG9fZGVzYyhpcnEpLT5jaGlwKQorI2RlZmluZSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpCShpcnFfdG9fZGVzYyhpcnEpLT5jaGlwX2RhdGEpCisjZGVmaW5lIGdldF9pcnFfZGF0YShpcnEpCShpcnFfdG9fZGVzYyhpcnEpLT5oYW5kbGVyX2RhdGEpCisjZGVmaW5lIGdldF9pcnFfbXNpKGlycSkJKGlycV90b19kZXNjKGlycSktPm1zaV9kZXNjKQogCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFuci5oIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MmMyODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfTElOVVhfSVJRTlJfSAorI2RlZmluZSBfTElOVVhfSVJRTlJfSAorCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCisjaW5jbHVkZSA8YXNtL2lycS5oPgorIyBkZWZpbmUgbnJfaXJxcwkJTlJfSVJRUworCisjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCQlcCisJZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykKKyNlbHNlCitleHRlcm4gaW50IG5yX2lycXM7CisKKyMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykJCVwKKwlmb3IgKGlycSA9IDAsIGRlc2MgPSBpcnFfZGVzYzsgaXJxIDwgbnJfaXJxczsgaXJxKyssIGRlc2MrKykKKworIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpcnEsIGRlc2MpCQkJCVwKKwlmb3IgKGlycSA9IG5yX2lycXMgLSAxLCBkZXNjID0gaXJxX2Rlc2MgKyAobnJfaXJxcyAtIDEpOwlcCisJICAgICBpcnEgPj0gMDsgaXJxLS0sIGRlc2MtLSkKKyNlbmRpZgorCisjZGVmaW5lIGZvcl9lYWNoX2lycV9ucihpcnEpCQkJXAorCWZvciAoaXJxID0gMDsgaXJxIDwgbnJfaXJxczsgaXJxKyspCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKaW5kZXggN2ViYmNiMS4uMzQ2ZTJiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZC5oCkBAIC04MTYsNiArODE2LDkgQEAKICNkZWZpbmUgSkZTX0ZMVVNIRUQJMHgwMDgJLyogVGhlIGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYmVlbiBmbHVzaGVkICovCiAjZGVmaW5lIEpGU19MT0FERUQJMHgwMTAJLyogVGhlIGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYmVlbiBsb2FkZWQgKi8KICNkZWZpbmUgSkZTX0JBUlJJRVIJMHgwMjAJLyogVXNlIElERSBiYXJyaWVycyAqLworI2RlZmluZSBKRlNfQUJPUlRfT05fU1lOQ0RBVEFfRVJSCTB4MDQwICAvKiBBYm9ydCB0aGUgam91cm5hbCBvbiBmaWxlCisJCQkJCQkqIGRhdGEgd3JpdGUgZXJyb3IgaW4gb3JkZXJlZAorCQkJCQkJKiBtb2RlICovCiAKIC8qCiAgKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBqb3VybmFsaW5nIHRyYW5zYWN0aW9uIGFuZCBidWZmZXIKQEAgLTkwOCw3ICs5MTEsNyBAQAogCQkgICAoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGludAkgICBqb3VybmFsX2NyZWF0ZSAgICAgKGpvdXJuYWxfdCAqKTsKIGV4dGVybiBpbnQJICAgam91cm5hbF9sb2FkICAgICAgIChqb3VybmFsX3QgKmpvdXJuYWwpOwotZXh0ZXJuIHZvaWQJICAgam91cm5hbF9kZXN0cm95ICAgIChqb3VybmFsX3QgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfZGVzdHJveSAgICAoam91cm5hbF90ICopOwogZXh0ZXJuIGludAkgICBqb3VybmFsX3JlY292ZXIgICAgKGpvdXJuYWxfdCAqam91cm5hbCk7CiBleHRlcm4gaW50CSAgIGpvdXJuYWxfd2lwZSAgICAgICAoam91cm5hbF90ICosIGludCk7CiBleHRlcm4gaW50CSAgIGpvdXJuYWxfc2tpcF9yZWNvdmVyeQkoam91cm5hbF90ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCA0NjNkNmYxLi5jN2QxMDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtNjQxLDYgKzY0MSwxMSBAQAogCSAqLwogCWludCB0X2hhbmRsZV9jb3VudDsKIAorCS8qCisJICogRm9yIHVzZSBieSB0aGUgZmlsZXN5c3RlbSB0byBzdG9yZSBmcy1zcGVjaWZpYyBkYXRhCisJICogc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRyYW5zYWN0aW9uCisJICovCisJc3RydWN0IGxpc3RfaGVhZAl0X3ByaXZhdGVfbGlzdDsKIH07CiAKIHN0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfcyB7CkBAIC05MzUsNiArOTQwLDEwIEBACiAKIAlwaWRfdAkJCWpfbGFzdF9zeW5jX3dyaXRlcjsKIAorCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB0cmFuc2FjdGlvbiBpcyBjbG9zZWQgKi8KKwl2b2lkCQkJKCpqX2NvbW1pdF9jYWxsYmFjaykoam91cm5hbF90ICosCisJCQkJCQkgICAgIHRyYW5zYWN0aW9uX3QgKik7CisKIAkvKgogCSAqIEpvdXJuYWwgc3RhdGlzdGljcwogCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggNjgwMzMxOC4uMzk2YTM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xOTEsNiArMTkxLDMwIEBACiBzdHJ1Y3QgcGlkOwogZXh0ZXJuIHN0cnVjdCBwaWQgKnNlc3Npb25fb2ZfcGdycChzdHJ1Y3QgcGlkICpwZ3JwKTsKIAorLyoKKyAqIEZXX0JVRworICogQWRkIHRoaXMgdG8gYSBtZXNzYWdlIHdoZXJlIHlvdSBhcmUgc3VyZSB0aGUgZmlybXdhcmUgaXMgYnVnZ3kgb3IgYmVoYXZlcworICogcmVhbGx5IHN0dXBpZCBvciBvdXQgb2Ygc3BlYy4gQmUgYXdhcmUgdGhhdCB0aGUgcmVzcG9uc2libGUgQklPUyBkZXZlbG9wZXIKKyAqIHNob3VsZCBiZSBhYmxlIHRvIGZpeCB0aGlzIGlzc3VlIG9yIGF0IGxlYXN0IGdldCBhIGNvbmNyZXRlIGlkZWEgb2YgdGhlCisgKiBwcm9ibGVtIGJ5IHJlYWRpbmcgeW91ciBtZXNzYWdlIHdpdGhvdXQgdGhlIG5lZWQgb2YgbG9va2luZyBhdCB0aGUga2VybmVsCisgKiBjb2RlLgorICogCisgKiBVc2UgaXQgZm9yIGRlZmluaXRlIGFuZCBoaWdoIHByaW9yaXR5IEJJT1MgYnVncy4KKyAqCisgKiBGV19XQVJOCisgKiBVc2UgaXQgZm9yIG5vdCB0aGF0IGNsZWFyIChlLmcuIGNvdWxkIHRoZSBrZXJuZWwgbWVzc2VkIHVwIHRoaW5ncyBhbHJlYWR5PykKKyAqIGFuZCBtZWRpdW0gcHJpb3JpdHkgQklPUyBidWdzLgorICoKKyAqIEZXX0lORk8KKyAqIFVzZSB0aGlzIG9uZSBpZiB5b3Ugd2FudCB0byB0ZWxsIHRoZSB1c2VyIG9yIHZlbmRvciBhYm91dCBzb21ldGhpbmcKKyAqIHN1c3BpY2lvdXMsIGJ1dCBnZW5lcmFsbHkgaGFybWxlc3MgcmVsYXRlZCB0byB0aGUgZmlybXdhcmUuCisgKgorICogVXNlIGl0IGZvciBpbmZvcm1hdGlvbiBvciB2ZXJ5IGxvdyBwcmlvcml0eSBCSU9TIGJ1Z3MuCisgKi8KKyNkZWZpbmUgRldfQlVHCQkiW0Zpcm13YXJlIEJ1Z106ICIKKyNkZWZpbmUgRldfV0FSTgkJIltGaXJtd2FyZSBXYXJuXTogIgorI2RlZmluZSBGV19JTkZPCQkiW0Zpcm13YXJlIEluZm9dOiAiCisKICNpZmRlZiBDT05GSUdfUFJJTlRLCiBhc21saW5rYWdlIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMCkpKTsKQEAgLTI2NSw2ICsyODksNyBAQAogI2RlZmluZSBUQUlOVF9ESUUJCQk3CiAjZGVmaW5lIFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRQk4CiAjZGVmaW5lIFRBSU5UX1dBUk4JCQk5CisjZGVmaW5lIFRBSU5UX0NSQVAJCQkxMAogCiBleHRlcm4gdm9pZCBkdW1wX3N0YWNrKHZvaWQpIF9fY29sZDsKIApAQCAtNDk1LDQgKzUyMCw5IEBACiAjZGVmaW5lIE5VTUFfQlVJTEQgMAogI2VuZGlmCiAKKy8qIFJlYnVpbGQgZXZlcnl0aGluZyBvbiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQgKi8KKyNpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKKyMgZGVmaW5lIFJFQlVJTERfRFVFX1RPX0ZUUkFDRV9NQ09VTlRfUkVDT1JECisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggY2Y5ZjQwYS4uNGExNDVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMzksMTkgKzM5LDM0IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbnJfY29udGV4dF9zd2l0Y2hlcyh2b2lkKTsKIAorc3RydWN0IGlycV9kZXNjOworCitzdGF0aWMgaW5saW5lIHZvaWQga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCit7CisgICAgICAgcmV0dXJuIGtzdGF0X2NwdShjcHUpLmlycXNbaXJxXTsKK30KKwogLyoKICAqIE51bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzcGVjaWZpYyBJUlEgc291cmNlLCBzaW5jZSBib290dXAKICAqLwotc3RhdGljIGlubGluZSBpbnQga3N0YXRfaXJxcyhpbnQgaXJxKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3N0YXRfaXJxcyh1bnNpZ25lZCBpbnQgaXJxKQogewotCWludCBjcHUsIHN1bSA9IDA7CisJdW5zaWduZWQgaW50IHN1bSA9IDA7CisJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCXN1bSArPSBrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV07CisJCXN1bSArPSBrc3RhdF9pcnFzX2NwdShpcnEsIGNwdSk7CiAKIAlyZXR1cm4gc3VtOwogfQogCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHRhc2tfZGVsdGFfZXhlYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBhY2NvdW50X3VzZXJfdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3B1dGltZV90KTsKIGV4dGVybiB2b2lkIGFjY291bnRfdXNlcl90aW1lX3NjYWxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3B1dGltZV90KTsKIGV4dGVybiB2b2lkIGFjY291bnRfc3lzdGVtX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCwgY3B1dGltZV90KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKaW5kZXggMGJlNzc5NS4uNDk3YjFkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKQEAgLTI5LDYgKzI5LDcgQEAKICAqCQk8amtlbmlzdG9AdXMuaWJtLmNvbT4gIGFuZCBQcmFzYW5uYSBTIFBhbmNoYW11a2hpCiAgKgkJPHByYXNhbm5hQGluLmlibS5jb20+IGFkZGVkIGZ1bmN0aW9uLXJldHVybiBwcm9iZXMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC00Nyw3ICs0OCw3IEBACiAjZGVmaW5lIEtQUk9CRV9ISVRfU1NET05FCTB4MDAwMDAwMDgKIAogLyogQXR0YWNoIHRvIGluc2VydCBwcm9iZXMgb24gYW55IGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgaWdub3JlZCovCi0jZGVmaW5lIF9fa3Byb2JlcwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmtwcm9iZXMudGV4dCIpKSkKKyNkZWZpbmUgX19rcHJvYmVzCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIua3Byb2Jlcy50ZXh0IikpKSBub3RyYWNlCiAKIHN0cnVjdCBrcHJvYmU7CiBzdHJ1Y3QgcHRfcmVnczsKQEAgLTI1Niw3ICsyNTcsNyBAQAogCiAjZWxzZSAvKiBDT05GSUdfS1BST0JFUyAqLwogCi0jZGVmaW5lIF9fa3Byb2JlcwkvKiovCisjZGVmaW5lIF9fa3Byb2Jlcwlub3RyYWNlCiBzdHJ1Y3QganByb2JlOwogc3RydWN0IGtyZXRwcm9iZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCBkNDFjY2I1Li5kM2E3M2Y1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xlZHMuaApAQCAtMTIzLDcgKzEyMyw3IEBACiAgKi8KIHN0cnVjdCBsZWRfaW5mbyB7CiAJY29uc3QgY2hhcgkqbmFtZTsKLQljaGFyCQkqZGVmYXVsdF90cmlnZ2VyOworCWNvbnN0IGNoYXIJKmRlZmF1bHRfdHJpZ2dlcjsKIAlpbnQJCWZsYWdzOwogfTsKIApAQCAtMTM1LDcgKzEzNSw3IEBACiAvKiBGb3IgdGhlIGxlZHMtZ3BpbyBkcml2ZXIgKi8KIHN0cnVjdCBncGlvX2xlZCB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQljaGFyICpkZWZhdWx0X3RyaWdnZXI7CisJY29uc3QgY2hhciAqZGVmYXVsdF90cmlnZ2VyOwogCXVuc2lnbmVkIAlncGlvOwogCXU4IAkJYWN0aXZlX2xvdzsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA5NDdjZjg0Li41MDdmNTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTM0MCw2ICszNDAsOSBAQAogCiAJQVRBX0VISV9ESURfUkVTRVQJPSBBVEFfRUhJX0RJRF9TT0ZUUkVTRVQgfCBBVEFfRUhJX0RJRF9IQVJEUkVTRVQsCiAKKwkvKiBtYXNrIG9mIGZsYWdzIHRvIHRyYW5zZmVyICp0byogdGhlIHNsYXZlIGxpbmsgKi8KKwlBVEFfRUhJX1RPX1NMQVZFX01BU0sJPSBBVEFfRUhJX05PX0FVVE9QU1kgfCBBVEFfRUhJX1FVSUVULAorCiAJLyogbWF4IHRyaWVzIGlmIGVycm9yIGNvbmRpdGlvbiBpcyBzdGlsbCBzZXQgYWZ0ZXIgLT5lcnJvcl9oYW5kbGVyICovCiAJQVRBX0VIX01BWF9UUklFUwk9IDUsCiAKQEAgLTY5Miw3ICs2OTUsNiBAQAogCXVuc2lnbmVkIGludAkJY2JsOwkvKiBjYWJsZSB0eXBlOyBBVEFfQ0JMX3h4eCAqLwogCiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kCXFjbWRbQVRBX01BWF9RVUVVRV07Ci0JdW5zaWduZWQgbG9uZwkJcWNfYWxsb2NhdGVkOwogCXVuc2lnbmVkIGludAkJcWNfYWN0aXZlOwogCWludAkJCW5yX2FjdGl2ZV9saW5rczsgLyogI2xpbmtzIHdpdGggYWN0aXZlIHFjcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCBiL2luY2x1ZGUvbGludXgvbGlua2FnZS5oCmluZGV4IDU2YmEzNzMuLjlmZDFmODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlua2FnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlua2FnZS5oCkBAIC00LDggKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KIAotI2RlZmluZSBub3RyYWNlIF9fYXR0cmlidXRlX18oKG5vX2luc3RydW1lbnRfZnVuY3Rpb24pKQotCiAjaWZkZWYgX19jcGx1c3BsdXMKICNkZWZpbmUgQ1BQX0FTTUxJTktBR0UgZXh0ZXJuICJDIgogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFya2VyLmggYi9pbmNsdWRlL2xpbnV4L21hcmtlci5oCmluZGV4IDEyOTA2NTMuLjg4OTE5NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFya2VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYXJrZXIuaApAQCAtMTYwLDQgKzE2MCwxMSBAQAogZXh0ZXJuIHZvaWQgKm1hcmtlcl9nZXRfcHJpdmF0ZV9kYXRhKGNvbnN0IGNoYXIgKm5hbWUsIG1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwKIAlpbnQgbnVtKTsKIAorLyoKKyAqIG1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgbWFya2VyIHByb2JlCisgKiB1bnJlZ2lzdHJhdGlvbiBhbmQgdGhlIGVuZCBvZiBtb2R1bGUgZXhpdCB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gY2FsbGVyCisgKiBleGVjdXRpbmcgYSBwcm9iZSB3aGVuIGl0IGlzIGZyZWVkLgorICovCisjZGVmaW5lIG1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCkgc3luY2hyb25pemVfc2NoZWQoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZmRmMzk2Ny4uMWZiZTE0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTI3LDE2ICsyNywxMyBAQAogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKIAotI2RlZmluZSBwYWdlX3Jlc2V0X2JhZF9jZ3JvdXAocGFnZSkJKChwYWdlKS0+cGFnZV9jZ3JvdXAgPSAwKQotCi1leHRlcm4gc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2dldF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQlnZnBfdCBnZnBfbWFzayk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLWV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBhY3RpdmUpOwogZXh0ZXJuIGludCBtZW1fY2dyb3VwX3Nocmlua191c2FnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXModW5zaWduZWQgbG9uZyBucl90b19zY2FuLApAQCAtNDQsNyArNDEsNyBAQAogCQkJCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsCiAJCQkJCWludCBtb2RlLCBzdHJ1Y3Qgem9uZSAqeiwKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAotCQkJCQlpbnQgYWN0aXZlKTsKKwkJCQkJaW50IGFjdGl2ZSwgaW50IGZpbGUpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGdmcF90IGdmcF9tYXNrKTsKIGludCB0YXNrX2luX21lbV9jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIApAQCAtNjksMjEgKzY2LDExIEBACiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3JlY29yZF9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCQkJaW50IHByaW9yaXR5KTsKIAotZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSk7Ci1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9pbmFjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpOworZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHpvbmUgKnpvbmUsCisJCQkJCWludCBwcmlvcml0eSwgZW51bSBscnVfbGlzdCBscnUpOworCiAKICNlbHNlIC8qIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9yZXNldF9iYWRfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2Nncm91cCAqcGFnZV9nZXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC0xNTksMTQgKzE0Niw5IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2luYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpCitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSwKKwkJCQkJZW51bSBscnVfbGlzdCBscnUpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9kYTkwM3guaCBiL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDMxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9kYTkwM3guaApAQCAtMCwwICsxLDIwMSBAQAorI2lmbmRlZiBfX0xJTlVYX1BNSUNfREE5MDNYX0gKKyNkZWZpbmUgX19MSU5VWF9QTUlDX0RBOTAzWF9ICisKKy8qIFVuaWZpZWQgc3ViIGRldmljZSBJRHMgZm9yIERBOTAzMC9EQTkwMzQgKi8KK2VudW0geworCURBOTAzMF9JRF9MRURfMSwKKwlEQTkwMzBfSURfTEVEXzIsCisJREE5MDMwX0lEX0xFRF8zLAorCURBOTAzMF9JRF9MRURfNCwKKwlEQTkwMzBfSURfTEVEX1BDLAorCURBOTAzMF9JRF9WSUJSQSwKKwlEQTkwMzBfSURfV0xFRCwKKwlEQTkwMzBfSURfQlVDSzEsCisJREE5MDMwX0lEX0JVQ0syLAorCURBOTAzMF9JRF9MRE8xLAorCURBOTAzMF9JRF9MRE8yLAorCURBOTAzMF9JRF9MRE8zLAorCURBOTAzMF9JRF9MRE80LAorCURBOTAzMF9JRF9MRE81LAorCURBOTAzMF9JRF9MRE82LAorCURBOTAzMF9JRF9MRE83LAorCURBOTAzMF9JRF9MRE84LAorCURBOTAzMF9JRF9MRE85LAorCURBOTAzMF9JRF9MRE8xMCwKKwlEQTkwMzBfSURfTERPMTEsCisJREE5MDMwX0lEX0xETzEyLAorCURBOTAzMF9JRF9MRE8xMywKKwlEQTkwMzBfSURfTERPMTQsCisJREE5MDMwX0lEX0xETzE1LAorCURBOTAzMF9JRF9MRE8xNiwKKwlEQTkwMzBfSURfTERPMTcsCisJREE5MDMwX0lEX0xETzE4LAorCURBOTAzMF9JRF9MRE8xOSwKKwlEQTkwMzBfSURfTERPX0lOVCwJLyogTERPIEludGVybmFsICovCisKKwlEQTkwMzRfSURfTEVEXzEsCisJREE5MDM0X0lEX0xFRF8yLAorCURBOTAzNF9JRF9WSUJSQSwKKwlEQTkwMzRfSURfV0xFRCwKKwlEQTkwMzRfSURfVE9VQ0gsCisKKwlEQTkwMzRfSURfQlVDSzEsCisJREE5MDM0X0lEX0JVQ0syLAorCURBOTAzNF9JRF9MRE8xLAorCURBOTAzNF9JRF9MRE8yLAorCURBOTAzNF9JRF9MRE8zLAorCURBOTAzNF9JRF9MRE80LAorCURBOTAzNF9JRF9MRE81LAorCURBOTAzNF9JRF9MRE82LAorCURBOTAzNF9JRF9MRE83LAorCURBOTAzNF9JRF9MRE84LAorCURBOTAzNF9JRF9MRE85LAorCURBOTAzNF9JRF9MRE8xMCwKKwlEQTkwMzRfSURfTERPMTEsCisJREE5MDM0X0lEX0xETzEyLAorCURBOTAzNF9JRF9MRE8xMywKKwlEQTkwMzRfSURfTERPMTQsCisJREE5MDM0X0lEX0xETzE1LAorfTsKKworLyoKKyAqIERBOTAzMC9EQTkwMzQgTEVEcyBzdWItZGV2aWNlcyB1c2VzIGdlbmVyaWMgInN0cnVjdCBsZWRfaW5mbyIKKyAqIGFzIHRoZSBwbGF0Zm9ybV9kYXRhCisgKi8KKworLyogREE5MDMwIGZsYWdzIGZvciAic3RydWN0IGxlZF9pbmZvIgorICovCisjZGVmaW5lIERBOTAzMF9MRURfUkFURV9PTgkoMCA8PCA1KQorI2RlZmluZSBEQTkwMzBfTEVEX1JBVEVfMDUyUwkoMSA8PCA1KQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV8xNgkoMCA8PCAzKQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV84CSgxIDw8IDMpCisjZGVmaW5lIERBOTAzMF9MRURfRFVUWV8xXzQJKDIgPDwgMykKKyNkZWZpbmUgREE5MDMwX0xFRF9EVVRZXzFfMgkoMyA8PCAzKQorCisjZGVmaW5lIERBOTAzMF9WSUJSQV9NT0RFXzFQM1YJKDAgPDwgMSkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX01PREVfMlA3VgkoMSA8PCAxKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV8xSFoJKDAgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0ZSRVFfMkhaCSgxIDw8IDIpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9GUkVRXzRIWgkoMiA8PCAyKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV84SFoJKDMgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfT04JKDAgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfNzVQCSgxIDw8IDQpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9EVVRZXzUwUAkoMiA8PCA0KQorI2RlZmluZSBEQTkwMzBfVklCUkFfRFVUWV8yNVAJKDMgPDwgNCkKKworLyogREE5MDM0IGZsYWdzIGZvciAic3RydWN0IGxlZF9pbmZvIiAqLworI2RlZmluZSBEQTkwMzRfTEVEX1JBTVAJCSgxIDw8IDcpCisKKy8qIERBOTAzNCB0b3VjaCBzY3JlZW4gcGxhdGZvcm0gZGF0YSAqLworc3RydWN0IGRhOTAzNF90b3VjaF9wZGF0YSB7CisJaW50CWludGVydmFsX21zOwkvKiBzYW1wbGluZyBpbnRlcnZhbCB3aGlsZSBwZW4gZG93biAqLworCWludAl4X2ludmVydGVkOworCWludAl5X2ludmVydGVkOworfTsKKworc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyB7CisJaW50CQlpZDsKKwljb25zdCBjaGFyCSpuYW1lOworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOworfTsKKworc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgbnVtX3N1YmRldnM7CisJc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyAqc3ViZGV2czsKK307CisKKy8qIGJpdCBkZWZpbml0aW9ucyBmb3IgREE5MDMwIGV2ZW50cyAqLworI2RlZmluZSBEQTkwMzBfRVZFTlRfT05LRVkJCSgxIDw8IDApCisjZGVmaW5lCURBOTAzMF9FVkVOVF9QV1JFTgkJKDEgPDwgMSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0VYVE9OCQkoMSA8PCAyKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9UQkFUCQkoMSA8PCA0KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJBVE1PTgkJKDEgPDwgNSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCQVRNT05fVFhPTgkoMSA8PCA2KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQ0hJT1ZFUgkJKDEgPDwgNykKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1RDVE8JCSgxIDw8IDgpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9DQ1RPCQkoMSA8PCA5KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQURDX1JFQURZCQkoMSA8PCAxMCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCVVNfNFA0CQkoMSA8PCAxMSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCVVNfNFAwCQkoMSA8PCAxMikKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1NFU1NfVkFMSUQJCSgxIDw8IDEzKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfU1JQX0RFVEVDVAkJKDEgPDwgMTQpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9XQVRDSERPRwkJKDEgPDwgMTUpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNQkJKDEgPDwgMTYpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNgkJKDEgPDwgMTcpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNwkJKDEgPDwgMTgpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xOAkJKDEgPDwgMTkpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xOQkJKDEgPDwgMjApCisjZGVmaW5lCURBOTAzMF9FVkVOVF9CVUNLMgkJKDEgPDwgMjEpCisKKy8qIGJpdCBkZWZpbml0aW9ucyBmb3IgREE5MDM0IGV2ZW50cyAqLworI2RlZmluZSBEQTkwMzRfRVZFTlRfT05LRVkJCSgxIDw8IDApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIREVUCQkoMSA8PCAzKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVEJBVAkJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9SRVZfSU9WRVIJCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DSF9JT1ZFUgkJKDEgPDwgNykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIX1RDVE8JCSgxIDw8IDgpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DSF9DQ1RPCQkoMSA8PCA5KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVVNCX0RFVgkJKDEgPDwgMTApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9PVEdDUF9JT1ZFUgkoMSA8PCAxMSkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCVVNfNFA1NQkJKDEgPDwgMTIpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9WQlVTXzNQOAkJKDEgPDwgMTMpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9TRVNTXzFQOAkJKDEgPDwgMTQpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9TUlBfUkVBRFkJCSgxIDw8IDE1KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX01BTgkJKDEgPDwgMTYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BRENfQVVUTzQJCSgxIDw8IDE3KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX0FVVE81CQkoMSA8PCAxOCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0FEQ19BVVRPNgkJKDEgPDwgMTkpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9QRU5fRE9XTgkJKDEgPDwgMjApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9UU0lfUkVBRFkJCSgxIDw8IDIxKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVUFSVF9UWAkJKDEgPDwgMjIpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9VQVJUX1JYCQkoMSA8PCAyMykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0hFQURTRVQJCSgxIDw8IDI1KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfSE9PS1NXSVRDSAkJKDEgPDwgMjYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9XQVRDSERPRwkJKDEgPDwgMjcpCisKK2V4dGVybiBpbnQgZGE5MDN4X3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CitleHRlcm4gaW50IGRhOTAzeF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisKKy8qIFN0YXR1cyBRdWVyeSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgREE5MDMwX1NUQVRVU19PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19QV1JFTjEJCSgxIDw8IDEpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfRVhUT04JCSgxIDw8IDIpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfVEJBVAkJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19WQkFUTU9OCQkoMSA8PCA1KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX1ZCQVRNT05fVFhPTgkoMSA8PCA2KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX01DTEtERVQJCSgxIDw8IDcpCisKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19DSERFVAkJKDEgPDwgMykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19UQkFUCQkoMSA8PCA0KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfUEVOX0RPV04JCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfTUNMS0RFVAkJKDEgPDwgNykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19VU0JfREVWCQkoMSA8PCA4KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0hFQURTRVQJCSgxIDw8IDkpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfSE9PS1NXSVRDSAkoMSA8PCAxMCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19SRU1DT04JCSgxIDw8IDExKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCVVNfVkFMSURfNFA1NQkoMSA8PCAxMikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19WQlVTX1ZBTElEXzNQOAkoMSA8PCAxMykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19TRVNTX1ZBTElEXzFQOAkoMSA8PCAxNCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19TUlBfUkVBRFkJCSgxIDw8IDE1KQorCitleHRlcm4gaW50IGRhOTAzeF9xdWVyeV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKKworCisvKiBOT1RFOiB0aGUgdHdvIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGludGVuZGVkIGZvciB1c2Ugb3V0c2lkZQorICogb2YgdGhlIERBOTAzNCBzdWItZGV2aWNlIGRyaXZlcnMKKyAqLworZXh0ZXJuIGludCBkYTkwM3hfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCk7CitleHRlcm4gaW50IGRhOTAzeF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCAqdmFsKTsKK2V4dGVybiBpbnQgZGE5MDN4X3VwZGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgdmFsLCB1aW50OF90IG1hc2spOworZXh0ZXJuIGludCBkYTkwM3hfc2V0X2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKTsKK2V4dGVybiBpbnQgZGE5MDN4X2Nscl9iaXRzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzayk7CisjZW5kaWYgLyogX19MSU5VWF9QTUlDX0RBOTAzWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmgKaW5kZXggZTgzYzdmMi4uYjQ2Mjk4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdDdsNjZ4Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3Q3bDY2eGIuaApAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CiAKIHN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmVuYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmRpc2FibGVfY2xrMzJrKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQgKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2Mzg3eGIuaAppbmRleCBmYTA2ZTA2Li5iNDg4ODIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RjNjM4N3hiLmgKQEAgLTExLDkgKzExLDYgQEAKICNkZWZpbmUgTUZEX1RDNjM4N1hCX0gKIAogc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmVuYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmRpc2FibGVfY2xrMzJrKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwotCiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzYzOTN4Yi5oCmluZGV4IGZlYzdiM2YuLjYyNmU0NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaApAQCAtMTcsMTIgKzE3LDEyIEBACiAjaWZuZGVmIE1GRF9UQzYzOTNYQl9ICiAjZGVmaW5lIE1GRF9UQzYzOTNYQl9ICiAKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCiAvKiBBbHNvIG9uZSBzaG91bGQgcHJvdmlkZSB0aGUgQ0szUDZNSSBjbG9jayAqLwogc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgewogCXUxNglzY3JfcGxsMmNyOwkvKiBQTEwyIENvbnRyb2wgKi8KIAl1MTYJc2NyX2dwZXI7CS8qIEdQIEVuYWJsZSAqLwotCXUzMglzY3JfZ3BvX2RvZWNyOwkvKiBHUE8gRGF0YSBPRSBDb250cm9sICovCi0JdTMyCXNjcl9ncG9fZHNyOwkvKiBHUE8gRGF0YSBTZXQgKi8KIAogCWludAkoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQJKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwpAQCAtMzEsMTUgKzMxLDI4IEBACiAKIAlpbnQJaXJxX2Jhc2U7CS8qIGJhc2UgZm9yIHN1YmRldmljZSBpcnFzICovCiAJaW50CWdwaW9fYmFzZTsKKwlpbnQJKCpzZXR1cCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKwl2b2lkCSgqdGVhcmRvd24pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAKIAlzdHJ1Y3QgdG1pb19uYW5kX2RhdGEJKm5hbmRfZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhCSpmYl9kYXRhOworCisJdW5zaWduZWQgcmVzdW1lX3Jlc3RvcmUgOiAxOyAvKiBtYWtlIHNwZWNpYWwgYWN0aW9ucworCQkJCQl0byBwcmVzZXJ2ZSB0aGUgc3RhdGUKKwkJCQkJb24gc3VzcGVuZC9yZXN1bWUgKi8KIH07CiAKK2V4dGVybiBpbnQgdGM2MzkzeGJfbGNkX21vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpOworZXh0ZXJuIGludCB0YzYzOTN4Yl9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZiLCBib29sIG9uKTsKKwogLyoKICAqIFJlbGF0aXZlIHRvIGlycV9iYXNlCiAgKi8KICNkZWZpbmUJSVJRX1RDNjM5M19OQU5ECQkwCiAjZGVmaW5lCUlSUV9UQzYzOTNfTU1DCQkxCisjZGVmaW5lCUlSUV9UQzYzOTNfT0hDSQkJMgorI2RlZmluZQlJUlFfVEM2MzkzX0ZCCQk0CiAKICNkZWZpbmUJVEM2MzkzWEJfTlJfSVJRUwk4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKaW5kZXggMDNhZWE2MS4uM2YzNDAwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKQEAgLTcsNyArNyw2IEBACiB0eXBlZGVmIHN0cnVjdCBwYWdlICpuZXdfcGFnZV90KHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgaW50ICoqKTsKIAogI2lmZGVmIENPTkZJR19NSUdSQVRJT04KLWV4dGVybiBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpOwogZXh0ZXJuIGludCBwdXRiYWNrX2xydV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTsKIGV4dGVybiBpbnQgbWlncmF0ZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosCiAJCQlzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKQEAgLTIxLDggKzIwLDYgQEAKIAkJY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSwgY29uc3Qgbm9kZW1hc2tfdCAqdG8sCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGlzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCi0JCQkJCXsgcmV0dXJuIC1FTk9TWVM7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB1dGJhY2tfbHJ1X3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X3BhZ2VfdCB4LAogCQl1bnNpZ25lZCBsb25nIHByaXZhdGUpIHsgcmV0dXJuIC1FTk9TWVM7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAppbmRleCA3NzMyM2E3Li5jZjljNjc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCkBAIC0xMzIsNiArMTMyLDE1IEBACiAJTUxYNF9NQUlMQk9YX1NJWkUJPSAgNDA5NgogfTsKIAorZW51bSB7CisJLyogc2V0IHBvcnQgb3Bjb2RlIG1vZGlmaWVycyAqLworCU1MWDRfU0VUX1BPUlRfR0VORVJBTCAgID0gMHgwLAorCU1MWDRfU0VUX1BPUlRfUlFQX0NBTEMgID0gMHgxLAorCU1MWDRfU0VUX1BPUlRfTUFDX1RBQkxFID0gMHgyLAorCU1MWDRfU0VUX1BPUlRfVkxBTl9UQUJMRSA9IDB4MywKKwlNTFg0X1NFVF9QT1JUX1BSSU9fTUFQICA9IDB4NCwKK307CisKIHN0cnVjdCBtbHg0X2RldjsKIAogc3RydWN0IG1seDRfY21kX21haWxib3ggewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCmluZGV4IGIyZjk0NDQuLmJkOTk3N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKQEAgLTYwLDYgKzYwLDcgQEAKIAlNTFg0X0RFVl9DQVBfRkxBR19JUE9JQl9DU1VNCT0gMSA8PCAgNywKIAlNTFg0X0RFVl9DQVBfRkxBR19CQURfUEtFWV9DTlRSCT0gMSA8PCAgOCwKIAlNTFg0X0RFVl9DQVBfRkxBR19CQURfUUtFWV9DTlRSCT0gMSA8PCAgOSwKKwlNTFg0X0RFVl9DQVBfRkxBR19EUERQCQk9IDEgPDwgMTIsCiAJTUxYNF9ERVZfQ0FQX0ZMQUdfTUVNX1dJTkRPVwk9IDEgPDwgMTYsCiAJTUxYNF9ERVZfQ0FQX0ZMQUdfQVBNCQk9IDEgPDwgMTcsCiAJTUxYNF9ERVZfQ0FQX0ZMQUdfQVRPTUlDCT0gMSA8PCAxOCwKQEAgLTE0NSw2ICsxNDYsMjkgQEAKIAlNTFg0X01UVF9GTEFHX1BSRVNFTlQJCT0gMQogfTsKIAorZW51bSBtbHg0X3FwX3JlZ2lvbiB7CisJTUxYNF9RUF9SRUdJT05fRlcgPSAwLAorCU1MWDRfUVBfUkVHSU9OX0VUSF9BRERSLAorCU1MWDRfUVBfUkVHSU9OX0ZDX0FERFIsCisJTUxYNF9RUF9SRUdJT05fRkNfRVhDSCwKKwlNTFg0X05VTV9RUF9SRUdJT04KK307CisKK2VudW0gbWx4NF9wb3J0X3R5cGUgeworCU1MWDRfUE9SVF9UWVBFX0lCCT0gMSA8PCAwLAorCU1MWDRfUE9SVF9UWVBFX0VUSAk9IDEgPDwgMSwKK307CisKK2VudW0gbWx4NF9zcGVjaWFsX3ZsYW5faWR4IHsKKwlNTFg0X05PX1ZMQU5fSURYICAgICAgICA9IDAsCisJTUxYNF9WTEFOX01JU1NfSURYLAorCU1MWDRfVkxBTl9SRUdVTEFSCit9OworCitlbnVtIHsKKwlNTFg0X05VTV9GRVhDSCAgICAgICAgICA9IDY0ICogMTAyNCwKK307CisKIHN0YXRpYyBpbmxpbmUgdTY0IG1seDRfZndfdmVyKHU2NCBtYWpvciwgdTY0IG1pbm9yLCB1NjQgc3VibWlub3IpCiB7CiAJcmV0dXJuIChtYWpvciA8PCAzMikgfCAobWlub3IgPDwgMTYpIHwgc3VibWlub3I7CkBAIC0xNTQsNyArMTc4LDkgQEAKIAl1NjQJCQlmd192ZXI7CiAJaW50CQkJbnVtX3BvcnRzOwogCWludAkJCXZsX2NhcFtNTFg0X01BWF9QT1JUUyArIDFdOwotCWludAkJCW10dV9jYXBbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwlpbnQJCQlpYl9tdHVfY2FwW01MWDRfTUFYX1BPUlRTICsgMV07CisJdTY0CQkJZGVmX21hY1tNTFg0X01BWF9QT1JUUyArIDFdOworCWludAkJCWV0aF9tdHVfY2FwW01MWDRfTUFYX1BPUlRTICsgMV07CiAJaW50CQkJZ2lkX3RhYmxlX2xlbltNTFg0X01BWF9QT1JUUyArIDFdOwogCWludAkJCXBrZXlfdGFibGVfbGVuW01MWDRfTUFYX1BPUlRTICsgMV07CiAJaW50CQkJbG9jYWxfY2FfYWNrX2RlbGF5OwpAQCAtMTY5LDcgKzE5NSw2IEBACiAJaW50CQkJbWF4X3JxX2Rlc2Nfc3o7CiAJaW50CQkJbWF4X3FwX2luaXRfcmRtYTsKIAlpbnQJCQltYXhfcXBfZGVzdF9yZG1hOwotCWludAkJCXJlc2VydmVkX3FwczsKIAlpbnQJCQlzcXBfc3RhcnQ7CiAJaW50CQkJbnVtX3NycXM7CiAJaW50CQkJbWF4X3NycV93cWVzOwpAQCAtMjAxLDYgKzIyNiwxNSBAQAogCXUxNgkJCXN0YXRfcmF0ZV9zdXBwb3J0OwogCXU4CQkJcG9ydF93aWR0aF9jYXBbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAlpbnQJCQltYXhfZ3NvX3N6OworCWludCAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkX3Fwc19jbnRbTUxYNF9OVU1fUVBfUkVHSU9OXTsKKwlpbnQJCQlyZXNlcnZlZF9xcHM7CisJaW50ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfcXBzX2Jhc2VbTUxYNF9OVU1fUVBfUkVHSU9OXTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBsb2dfbnVtX21hY3M7CisJaW50ICAgICAgICAgICAgICAgICAgICAgbG9nX251bV92bGFuczsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBsb2dfbnVtX3ByaW9zOworCWVudW0gbWx4NF9wb3J0X3R5cGUJcG9ydF90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CisJdTgJCQlzdXBwb3J0ZWRfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOworCXUzMgkJCXBvcnRfbWFzazsKIH07CiAKIHN0cnVjdCBtbHg0X2J1Zl9saXN0IHsKQEAgLTM1NSw2ICszODksMTEgQEAKIAl1NjQJCQlzaV9ndWlkOwogfTsKIAorI2RlZmluZSBtbHg0X2ZvcmVhY2hfcG9ydChwb3J0LCBkZXYsIHR5cGUpCQkJCVwKKwlmb3IgKChwb3J0KSA9IDE7IChwb3J0KSA8PSAoZGV2KS0+Y2Fwcy5udW1fcG9ydHM7IChwb3J0KSsrKQlcCisJCWlmICgoKHR5cGUpID09IE1MWDRfUE9SVF9UWVBFX0lCID8gKGRldiktPmNhcHMucG9ydF9tYXNrIDogXAorCQkgICAgIH4oZGV2KS0+Y2Fwcy5wb3J0X21hc2spICYgMSA8PCAoKHBvcnQpIC0gMSkpCisKIGludCBtbHg0X2J1Zl9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNpemUsIGludCBtYXhfZGlyZWN0LAogCQkgICBzdHJ1Y3QgbWx4NF9idWYgKmJ1Zik7CiB2b2lkIG1seDRfYnVmX2ZyZWUoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBzaXplLCBzdHJ1Y3QgbWx4NF9idWYgKmJ1Zik7CkBAIC00MDAsNyArNDM5LDEwIEBACiAJCSAgaW50IGNvbGxhcHNlZCk7CiB2b2lkIG1seDRfY3FfZnJlZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY3EgKmNxKTsKIAotaW50IG1seDRfcXBfYWxsb2Moc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBzcXBuLCBzdHJ1Y3QgbWx4NF9xcCAqcXApOworaW50IG1seDRfcXBfcmVzZXJ2ZV9yYW5nZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IGNudCwgaW50IGFsaWduLCBpbnQgKmJhc2UpOwordm9pZCBtbHg0X3FwX3JlbGVhc2VfcmFuZ2Uoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBiYXNlX3FwbiwgaW50IGNudCk7CisKK2ludCBtbHg0X3FwX2FsbG9jKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcXBuLCBzdHJ1Y3QgbWx4NF9xcCAqcXApOwogdm9pZCBtbHg0X3FwX2ZyZWUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X3FwICpxcCk7CiAKIGludCBtbHg0X3NycV9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIHBkbiwgc3RydWN0IG1seDRfbXR0ICptdHQsCkBAIC00MTYsNiArNDU4LDEyIEBACiAJCQkgIGludCBibG9ja19tY2FzdF9sb29wYmFjayk7CiBpbnQgbWx4NF9tdWx0aWNhc3RfZGV0YWNoKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9xcCAqcXAsIHU4IGdpZFsxNl0pOwogCitpbnQgbWx4NF9yZWdpc3Rlcl9tYWMoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU4IHBvcnQsIHU2NCBtYWMsIGludCAqaW5kZXgpOwordm9pZCBtbHg0X3VucmVnaXN0ZXJfbWFjKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBwb3J0LCBpbnQgaW5kZXgpOworCitpbnQgbWx4NF9yZWdpc3Rlcl92bGFuKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBwb3J0LCB1MTYgdmxhbiwgaW50ICppbmRleCk7Cit2b2lkIG1seDRfdW5yZWdpc3Rlcl92bGFuKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBwb3J0LCBpbnQgaW5kZXgpOworCiBpbnQgbWx4NF9tYXBfcGh5c19mbXIoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ZtciAqZm1yLCB1NjQgKnBhZ2VfbGlzdCwKIAkJICAgICAgaW50IG5wYWdlcywgdTY0IGlvdmEsIHUzMiAqbGtleSwgdTMyICpya2V5KTsKIGludCBtbHg0X2Ztcl9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIHBkLCB1MzIgYWNjZXNzLCBpbnQgbWF4X3BhZ2VzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGM2MWJhMTAuLmZmZWUyZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEzMiw2ICsxMzIsMTEgQEAKICNkZWZpbmUgVk1fUmFuZG9tUmVhZEhpbnQodikJCSgodiktPnZtX2ZsYWdzICYgVk1fUkFORF9SRUFEKQogCiAvKgorICogc3BlY2lhbCB2bWFzIHRoYXQgYXJlIG5vbi1tZXJnYWJsZSwgbm9uLW1sb2NrKClhYmxlCisgKi8KKyNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCisKKy8qCiAgKiBtYXBwaW5nIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgdm1fZmxhZ3MgcHJvdGVjdGlvbiBiaXRzICh0aGUKICAqIGxvdyBmb3VyIGJpdHMpIHRvIGEgcGFnZSBwcm90ZWN0aW9uIG1hc2suLgogICovCkBAIC03MDAsMTAgKzcwNSwxMCBAQAogZXh0ZXJuIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NITUVNCi1pbnQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGxvY2ssIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7CitleHRlcm4gaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLAotCQkJICAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCisJCQkgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggODk1YmM0ZS4uYzk0ODM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC0xLDQwICsxLDEwMCBAQAotc3RhdGljIGlubGluZSB2b2lkCi1hZGRfcGFnZV90b19hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCisjaWZuZGVmIExJTlVYX01NX0lOTElORV9ICisjZGVmaW5lIExJTlVYX01NX0lOTElORV9ICisKKy8qKgorICogcGFnZV9pc19maWxlX2NhY2hlIC0gc2hvdWxkIHRoZSBwYWdlIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICoKKyAqIFJldHVybnMgTFJVX0ZJTEUgaWYgQHBhZ2UgaXMgcGFnZSBjYWNoZSBwYWdlIGJhY2tlZCBieSBhIHJlZ3VsYXIgZmlsZXN5c3RlbSwKKyAqIG9yIDAgaWYgQHBhZ2UgaXMgYW5vbnltb3VzLCB0bXBmcyBvciBvdGhlcndpc2UgcmFtIG9yIHN3YXAgYmFja2VkLgorICogVXNlZCBieSBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBMUlUgbGlzdHMsIHRvIHNvcnQgYSBwYWdlCisgKiBvbnRvIHRoZSByaWdodCBMUlUgbGlzdC4KKyAqCisgKiBXZSB3b3VsZCBsaWtlIHRvIGdldCB0aGlzIGluZm8gd2l0aG91dCBhIHBhZ2UgZmxhZywgYnV0IHRoZSBzdGF0ZQorICogbmVlZHMgdG8gc3Vydml2ZSB1bnRpbCB0aGUgcGFnZSBpcyBsYXN0IGRlbGV0ZWQgZnJvbSB0aGUgTFJVLCB3aGljaAorICogY291bGQgYmUgYXMgZmFyIGRvd24gYXMgX19wYWdlX2NhY2hlX3JlbGVhc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfaXNfZmlsZV9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+YWN0aXZlX2xpc3QpOwotCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKKwlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpCisJCXJldHVybiAwOworCisJLyogVGhlIHBhZ2UgaXMgcGFnZSBjYWNoZSBiYWNrZWQgYnkgYSBub3JtYWwgZmlsZXN5c3RlbS4gKi8KKwlyZXR1cm4gTFJVX0ZJTEU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCithZGRfcGFnZV90b19scnVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbCkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7Ci0JX19pbmNfem9uZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtsXS5saXN0KTsKKwlfX2luY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZGVsX3BhZ2VfZnJvbV9hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitkZWxfcGFnZV9mcm9tX2xydV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBsKQogewogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kZWxfcGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpOworCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkZWxfcGFnZV9mcm9tX2xydShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJZW51bSBscnVfbGlzdCBsID0gTFJVX0JBU0U7CisKIAlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewotCQlfX0NsZWFyUGFnZUFjdGl2ZShwYWdlKTsKLQkJX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpOworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJX19DbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwkJbCA9IExSVV9VTkVWSUNUQUJMRTsKIAl9IGVsc2UgewotCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKTsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJCV9fQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCQkJbCArPSBMUlVfQUNUSVZFOworCQl9CisJCWwgKz0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCX0KKwlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKKy8qKgorICogcGFnZV9scnUgLSB3aGljaCBMUlUgbGlzdCBzaG91bGQgYSBwYWdlIGJlIG9uPworICogQHBhZ2U6IHRoZSBwYWdlIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBMUlUgbGlzdCBhIHBhZ2Ugc2hvdWxkIGJlIG9uLCBhcyBhbiBpbmRleAorICogaW50byB0aGUgYXJyYXkgb2YgTFJVIGxpc3RzLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJZW51bSBscnVfbGlzdCBscnUgPSBMUlVfQkFTRTsKKworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKKwllbHNlIHsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJCQlscnUgKz0gTFJVX0FDVElWRTsKKwkJbHJ1ICs9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gbHJ1OworfQorCisvKioKKyAqIGluYWN0aXZlX2Fub25faXNfbG93IC0gY2hlY2sgaWYgYW5vbnltb3VzIHBhZ2VzIG5lZWQgdG8gYmUgZGVhY3RpdmF0ZWQKKyAqIEB6b25lOiB6b25lIHRvIGNoZWNrCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB6b25lIGRvZXMgbm90IGhhdmUgZW5vdWdoIGluYWN0aXZlIGFub24gcGFnZXMsCisgKiBtZWFuaW5nIHNvbWUgYWN0aXZlIGFub24gcGFnZXMgbmVlZCB0byBiZSBkZWFjdGl2YXRlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaW5hY3RpdmVfYW5vbl9pc19sb3coc3RydWN0IHpvbmUgKnpvbmUpCit7CisJdW5zaWduZWQgbG9uZyBhY3RpdmUsIGluYWN0aXZlOworCisJYWN0aXZlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKTsKKwlpbmFjdGl2ZSA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKTsKKworCWlmIChpbmFjdGl2ZSAqIHpvbmUtPmluYWN0aXZlX3JhdGlvIDwgYWN0aXZlKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOWQ0OWZhMy4uZmU4MjU0NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTk0LDkgKzk0LDYgQEAKIAl2b2lkICp2aXJ0dWFsOwkJCS8qIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKE5VTEwgaWYKIAkJCQkJICAgbm90IGttYXBwZWQsIGllLiBoaWdobWVtKSAqLwogI2VuZGlmIC8qIFdBTlRfUEFHRV9WSVJUVUFMICovCi0jaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKLQl1bnNpZ25lZCBsb25nIHBhZ2VfY2dyb3VwOwotI2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvbW1pb3RyYWNlLmgKaW5kZXggNjFkMTllMS4uMTM5ZDdjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21taW90cmFjZS5oCkBAIC0zNCwxMSArMzQsMTUgQEAKIC8qIENhbGxlZCBmcm9tIHBhZ2UgZmF1bHQgaGFuZGxlci4gKi8KIGV4dGVybiBpbnQga21taW9faGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotLyogQ2FsbGVkIGZyb20gaW9yZW1hcC5jICovCiAjaWZkZWYgQ09ORklHX01NSU9UUkFDRQorLyogQ2FsbGVkIGZyb20gaW9yZW1hcC5jICovCiBleHRlcm4gdm9pZCBtbWlvdHJhY2VfaW9yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCQkJdm9pZCBfX2lvbWVtICphZGRyKTsKIGV4dGVybiB2b2lkIG1taW90cmFjZV9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKKy8qIEZvciBhbnlvbmUgdG8gaW5zZXJ0IG1hcmtlcnMuIFJlbWVtYmVyIHRyYWlsaW5nIG5ld2xpbmUuICovCitleHRlcm4gaW50IG1taW90cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJCQkJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWlvdHJhY2VfaW9yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgX19pb21lbSAqYWRkcikKQEAgLTQ4LDE1ICs1MiwyMiBAQAogc3RhdGljIGlubGluZSB2b2lkIG1taW90cmFjZV9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfTU1JT1RSQUNFX0hPT0tTICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG1taW90cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJCQkJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAwKSkpOworCitzdGF0aWMgaW5saW5lIGludCBtbWlvdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19NTUlPVFJBQ0UgKi8KIAogZW51bSBtbV9pb19vcGNvZGUgewogCU1NSU9fUkVBRCA9IDB4MSwgICAgIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KIAlNTUlPX1dSSVRFID0gMHgyLCAgICAvKiBzdHJ1Y3QgbW1pb3RyYWNlX3J3ICovCiAJTU1JT19QUk9CRSA9IDB4MywgICAgLyogc3RydWN0IG1taW90cmFjZV9tYXAgKi8KIAlNTUlPX1VOUFJPQkUgPSAweDQsICAvKiBzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqLwotCU1NSU9fTUFSS0VSID0gMHg1LCAgIC8qIHJhdyBjaGFyIGRhdGEgKi8KLQlNTUlPX1VOS05PV05fT1AgPSAweDYsIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KKwlNTUlPX1VOS05PV05fT1AgPSAweDUsIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KIH07CiAKIHN0cnVjdCBtbWlvdHJhY2VfcncgewpAQCAtODEsNSArOTIsNiBAQAogZXh0ZXJuIHZvaWQgZGlzYWJsZV9tbWlvdHJhY2Uodm9pZCk7CiBleHRlcm4gdm9pZCBtbWlvX3RyYWNlX3J3KHN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KTsKIGV4dGVybiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKTsKK2V4dGVybiBpbnQgbW1pb190cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwogCiAjZW5kaWYgLyogTU1JT1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDQyODMyOGEuLjM1YTdiNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtODEsMjEgKzgxLDMxIEBACiBlbnVtIHpvbmVfc3RhdF9pdGVtIHsKIAkvKiBGaXJzdCAxMjggYnl0ZSBjYWNoZWxpbmUgKGFzc3VtaW5nIDY0IGJpdCB3b3JkcykgKi8KIAlOUl9GUkVFX1BBR0VTLAotCU5SX0lOQUNUSVZFLAotCU5SX0FDVElWRSwKKwlOUl9MUlVfQkFTRSwKKwlOUl9JTkFDVElWRV9BTk9OID0gTlJfTFJVX0JBU0UsIC8qIG11c3QgbWF0Y2ggb3JkZXIgb2YgTFJVX1tJTl1BQ1RJVkUgKi8KKwlOUl9BQ1RJVkVfQU5PTiwJCS8qICAiICAgICAiICAgICAiICAgIiAgICAgICAiICAgICAgICAgKi8KKwlOUl9JTkFDVElWRV9GSUxFLAkvKiAgIiAgICAgIiAgICAgIiAgICIgICAgICAgIiAgICAgICAgICovCisJTlJfQUNUSVZFX0ZJTEUsCQkvKiAgIiAgICAgIiAgICAgIiAgICIgICAgICAgIiAgICAgICAgICovCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCU5SX1VORVZJQ1RBQkxFLAkJLyogICIgICAgICIgICAgICIgICAiICAgICAgICIgICAgICAgICAqLworCU5SX01MT0NLLAkJLyogbWxvY2soKWVkIHBhZ2VzIGZvdW5kIGFuZCBtb3ZlZCBvZmYgTFJVICovCisjZWxzZQorCU5SX1VORVZJQ1RBQkxFID0gTlJfQUNUSVZFX0ZJTEUsIC8qIGF2b2lkIGNvbXBpbGVyIGVycm9ycyBpbiBkZWFkIGNvZGUgKi8KKwlOUl9NTE9DSyA9IE5SX0FDVElWRV9GSUxFLAorI2VuZGlmCiAJTlJfQU5PTl9QQUdFUywJLyogTWFwcGVkIGFub255bW91cyBwYWdlcyAqLwogCU5SX0ZJTEVfTUFQUEVELAkvKiBwYWdlY2FjaGUgcGFnZXMgbWFwcGVkIGludG8gcGFnZXRhYmxlcy4KIAkJCSAgIG9ubHkgbW9kaWZpZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi8KIAlOUl9GSUxFX1BBR0VTLAogCU5SX0ZJTEVfRElSVFksCiAJTlJfV1JJVEVCQUNLLAotCS8qIFNlY29uZCAxMjggYnl0ZSBjYWNoZWxpbmUgKi8KIAlOUl9TTEFCX1JFQ0xBSU1BQkxFLAogCU5SX1NMQUJfVU5SRUNMQUlNQUJMRSwKIAlOUl9QQUdFVEFCTEUsCQkvKiB1c2VkIGZvciBwYWdldGFibGVzICovCiAJTlJfVU5TVEFCTEVfTkZTLAkvKiBORlMgdW5zdGFibGUgcGFnZXMgKi8KIAlOUl9CT1VOQ0UsCiAJTlJfVk1TQ0FOX1dSSVRFLAorCS8qIFNlY29uZCAxMjggYnl0ZSBjYWNoZWxpbmUgKi8KIAlOUl9XUklURUJBQ0tfVEVNUCwJLyogV3JpdGViYWNrIHVzaW5nIHRlbXBvcmFyeSBidWZmZXJzICovCiAjaWZkZWYgQ09ORklHX05VTUEKIAlOVU1BX0hJVCwJCS8qIGFsbG9jYXRlZCBpbiBpbnRlbmRlZCBub2RlICovCkBAIC0xMDcsNiArMTE3LDU1IEBACiAjZW5kaWYKIAlOUl9WTV9aT05FX1NUQVRfSVRFTVMgfTsKIAorLyoKKyAqIFdlIGRvIGFyaXRobWV0aWMgb24gdGhlIExSVSBsaXN0cyBpbiB2YXJpb3VzIHBsYWNlcyBpbiB0aGUgY29kZSwKKyAqIHNvIGl0IGlzIGltcG9ydGFudCB0byBrZWVwIHRoZSBhY3RpdmUgbGlzdHMgTFJVX0FDVElWRSBoaWdoZXIgaW4KKyAqIHRoZSBhcnJheSB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGluYWN0aXZlIGxpc3RzLCBhbmQgdG8ga2VlcAorICogdGhlICpfRklMRSBsaXN0cyBMUlVfRklMRSBoaWdoZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBfQU5PTiBsaXN0cy4KKyAqCisgKiBUaGlzIGhhcyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgc3RhdGlzdGljcyBpbiB6b25lX3N0YXRfaXRlbQorICogYWJvdmUgYW5kIHRoZSBkZXNjcmlwdGlvbnMgaW4gdm1zdGF0X3RleHQgaW4gbW0vdm1zdGF0LmMKKyAqLworI2RlZmluZSBMUlVfQkFTRSAwCisjZGVmaW5lIExSVV9BQ1RJVkUgMQorI2RlZmluZSBMUlVfRklMRSAyCisKK2VudW0gbHJ1X2xpc3QgeworCUxSVV9JTkFDVElWRV9BTk9OID0gTFJVX0JBU0UsCisJTFJVX0FDVElWRV9BTk9OID0gTFJVX0JBU0UgKyBMUlVfQUNUSVZFLAorCUxSVV9JTkFDVElWRV9GSUxFID0gTFJVX0JBU0UgKyBMUlVfRklMRSwKKwlMUlVfQUNUSVZFX0ZJTEUgPSBMUlVfQkFTRSArIExSVV9GSUxFICsgTFJVX0FDVElWRSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJTFJVX1VORVZJQ1RBQkxFLAorI2Vsc2UKKwlMUlVfVU5FVklDVEFCTEUgPSBMUlVfQUNUSVZFX0ZJTEUsIC8qIGF2b2lkIGNvbXBpbGVyIGVycm9ycyBpbiBkZWFkIGNvZGUgKi8KKyNlbmRpZgorCU5SX0xSVV9MSVNUUworfTsKKworI2RlZmluZSBmb3JfZWFjaF9scnUobCkgZm9yIChsID0gMDsgbCA8IE5SX0xSVV9MSVNUUzsgbCsrKQorCisjZGVmaW5lIGZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgZm9yIChsID0gMDsgbCA8PSBMUlVfQUNUSVZFX0ZJTEU7IGwrKykKKworc3RhdGljIGlubGluZSBpbnQgaXNfZmlsZV9scnUoZW51bSBscnVfbGlzdCBsKQoreworCXJldHVybiAobCA9PSBMUlVfSU5BQ1RJVkVfRklMRSB8fCBsID09IExSVV9BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2FjdGl2ZV9scnUoZW51bSBscnVfbGlzdCBsKQoreworCXJldHVybiAobCA9PSBMUlVfQUNUSVZFX0FOT04gfHwgbCA9PSBMUlVfQUNUSVZFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc191bmV2aWN0YWJsZV9scnUoZW51bSBscnVfbGlzdCBsKQoreworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwlyZXR1cm4gKGwgPT0gTFJVX1VORVZJQ1RBQkxFKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogc3RydWN0IHBlcl9jcHVfcGFnZXMgewogCWludCBjb3VudDsJCS8qIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgbGlzdCAqLwogCWludCBoaWdoOwkJLyogaGlnaCB3YXRlcm1hcmssIGVtcHR5aW5nIG5lZWRlZCAqLwpAQCAtMjUxLDEwICszMTAsMjIgQEAKIAogCS8qIEZpZWxkcyBjb21tb25seSBhY2Nlc3NlZCBieSB0aGUgcGFnZSByZWNsYWltIHNjYW5uZXIgKi8KIAlzcGlubG9ja190CQlscnVfbG9jazsJCi0Jc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWluYWN0aXZlX2xpc3Q7Ci0JdW5zaWduZWQgbG9uZwkJbnJfc2Nhbl9hY3RpdmU7Ci0JdW5zaWduZWQgbG9uZwkJbnJfc2Nhbl9pbmFjdGl2ZTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJCXVuc2lnbmVkIGxvbmcgbnJfc2NhbjsKKwl9IGxydVtOUl9MUlVfTElTVFNdOworCisJLyoKKwkgKiBUaGUgcGFnZW91dCBjb2RlIGluIHZtc2Nhbi5jIGtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IG9mIHRoZQorCSAqIG1lbS9zd2FwIGJhY2tlZCBhbmQgZmlsZSBiYWNrZWQgcGFnZXMgYXJlIHJlZmVmZXJlbmNlZC4KKwkgKiBUaGUgaGlnaGVyIHRoZSByb3RhdGVkL3NjYW5uZWQgcmF0aW8sIHRoZSBtb3JlIHZhbHVhYmxlCisJICogdGhhdCBjYWNoZSBpcy4KKwkgKgorCSAqIFRoZSBhbm9uIExSVSBzdGF0cyBsaXZlIGluIFswXSwgZmlsZSBMUlUgc3RhdHMgaW4gWzFdCisJICovCisJdW5zaWduZWQgbG9uZwkJcmVjZW50X3JvdGF0ZWRbMl07CisJdW5zaWduZWQgbG9uZwkJcmVjZW50X3NjYW5uZWRbMl07CisKIAl1bnNpZ25lZCBsb25nCQlwYWdlc19zY2FubmVkOwkgICAvKiBzaW5jZSBsYXN0IHJlY2xhaW0gKi8KIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCSAgIC8qIHpvbmUgZmxhZ3MsIHNlZSBiZWxvdyAqLwogCkBAIC0yNzYsNiArMzQ3LDEyIEBACiAJICovCiAJaW50IHByZXZfcHJpb3JpdHk7CiAKKwkvKgorCSAqIFRoZSB0YXJnZXQgcmF0aW8gb2YgQUNUSVZFX0FOT04gdG8gSU5BQ1RJVkVfQU5PTiBwYWdlcyBvbgorCSAqIHRoaXMgem9uZSdzIExSVS4gIE1haW50YWluZWQgYnkgdGhlIHBhZ2VvdXQgY29kZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgaW5hY3RpdmVfcmF0aW87CisKIAogCVpPTkVfUEFERElORyhfcGFkMl8pCiAJLyogUmFyZWx5IHVzZWQgb3IgcmVhZC1tb3N0bHkgZmllbGRzICovCkBAIC01MjQsOCArNjAxLDExIEBACiAJc3RydWN0IHpvbmUgbm9kZV96b25lc1tNQVhfTlJfWk9ORVNdOwogCXN0cnVjdCB6b25lbGlzdCBub2RlX3pvbmVsaXN0c1tNQVhfWk9ORUxJU1RTXTsKIAlpbnQgbnJfem9uZXM7Ci0jaWZkZWYgQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQCisjaWZkZWYgQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQCS8qIG1lYW5zICFTUEFSU0VNRU0gKi8KIAlzdHJ1Y3QgcGFnZSAqbm9kZV9tZW1fbWFwOworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCisJc3RydWN0IHBhZ2VfY2dyb3VwICpub2RlX3BhZ2VfY2dyb3VwOworI2VuZGlmCiAjZW5kaWYKIAlzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YTsKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKQEAgLTg1NCw2ICs5MzQsNyBAQAogI2VuZGlmCiAKIHN0cnVjdCBwYWdlOworc3RydWN0IHBhZ2VfY2dyb3VwOwogc3RydWN0IG1lbV9zZWN0aW9uIHsKIAkvKgogCSAqIFRoaXMgaXMsIGxvZ2ljYWxseSwgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdApAQCAtODcxLDYgKzk1MiwxNCBAQAogCiAJLyogU2VlIGRlY2xhcmF0aW9uIG9mIHNpbWlsYXIgZmllbGQgaW4gc3RydWN0IHpvbmUgKi8KIAl1bnNpZ25lZCBsb25nICpwYWdlYmxvY2tfZmxhZ3M7CisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKKwkvKgorCSAqIElmICFTUEFSU0VNRU0sIHBnZGF0IGRvZXNuJ3QgaGF2ZSBwYWdlX2Nncm91cCBwb2ludGVyLiBXZSB1c2UKKwkgKiBzZWN0aW9uLiAoc2VlIG1lbWNvbnRyb2wuaC9wYWdlX2Nncm91cC5oIGFib3V0IHRoaXMuKQorCSAqLworCXN0cnVjdCBwYWdlX2Nncm91cCAqcGFnZV9jZ3JvdXA7CisJdW5zaWduZWQgbG9uZyBwYWQ7CisjZW5kaWYKIH07CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IGE0MTU1NWMuLjNiZmVkMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vbG9jYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9tb2R1bGUuaD4KQEAgLTI4LDcgKzI5LDcgQEAKICNkZWZpbmUgTU9EVUxFX1NZTUJPTF9QUkVGSVggIiIKICNlbmRpZgogCi0jZGVmaW5lIE1PRFVMRV9OQU1FX0xFTiAoNjQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIE1PRFVMRV9OQU1FX0xFTiBNQVhfUEFSQU1fUFJFRklYX0xFTgogCiBzdHJ1Y3Qga2VybmVsX3N5bWJvbAogewpAQCAtNTksNiArNjAsNyBAQAogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCXN0cnVjdCBrb2JqZWN0ICpkcml2ZXJzX2RpcjsKKwlzdHJ1Y3QgbW9kdWxlX3BhcmFtX2F0dHJzICptcDsKIH07CiAKIC8qIFRoZXNlIGFyZSBlaXRoZXIgbW9kdWxlIGxvY2FsLCBvciB0aGUga2VybmVsJ3MgZHVtbXkgb25lcy4gKi8KQEAgLTI0MSw3ICsyNDMsNiBAQAogCiAJLyogU3lzZnMgc3R1ZmYuICovCiAJc3RydWN0IG1vZHVsZV9rb2JqZWN0IG1rb2JqOwotCXN0cnVjdCBtb2R1bGVfcGFyYW1fYXR0cnMgKnBhcmFtX2F0dHJzOwogCXN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptb2RpbmZvX2F0dHJzOwogCWNvbnN0IGNoYXIgKnZlcnNpb247CiAJY29uc3QgY2hhciAqc3JjdmVyc2lvbjsKQEAgLTI3Niw3ICsyNzcsNyBAQAogCiAJLyogRXhjZXB0aW9uIHRhYmxlICovCiAJdW5zaWduZWQgaW50IG51bV9leGVudHJpZXM7Ci0JY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXh0YWJsZTsKKwlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleHRhYmxlOwogCiAJLyogU3RhcnR1cCBmdW5jdGlvbi4gKi8KIAlpbnQgKCppbml0KSh2b2lkKTsKQEAgLTMzMSw2ICszMzIsMTAgQEAKIAlzdHJ1Y3QgbWFya2VyICptYXJrZXJzOwogCXVuc2lnbmVkIGludCBudW1fbWFya2VyczsKICNlbmRpZgorI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50czsKKwl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCS8qIFdoYXQgbW9kdWxlcyBkZXBlbmQgb24gbWU/ICovCkBAIC00NTMsNiArNDU4LDkgQEAKIAogZXh0ZXJuIHZvaWQgbW9kdWxlX3VwZGF0ZV9tYXJrZXJzKHZvaWQpOwogCitleHRlcm4gdm9pZCBtb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKHZvaWQpOworZXh0ZXJuIGludCBtb2R1bGVfZ2V0X2l0ZXJfdHJhY2Vwb2ludHMoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CisKICNlbHNlIC8qICFDT05GSUdfTU9EVUxFUy4uLiAqLwogI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkKICNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUEwoc3ltKQpAQCAtNTU3LDYgKzU2NSwxNSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbW9kdWxlX3VwZGF0ZV90cmFjZXBvaW50cyh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBtb2R1bGVfZ2V0X2l0ZXJfdHJhY2Vwb2ludHMoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIHN0cnVjdCBkZXZpY2VfZHJpdmVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IGVjNjI0MzguLmU0YWYzMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTEzLDYgKzEzLDkgQEAKICNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCBLQlVJTERfTU9ETkFNRSAiLiIKICNlbmRpZgogCisvKiBDaG9zZW4gc28gdGhhdCBzdHJ1Y3RzIHdpdGggYW4gdW5zaWduZWQgbG9uZyBsaW5lIHVwLiAqLworI2RlZmluZSBNQVhfUEFSQU1fUFJFRklYX0xFTiAoNjQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpCisKICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgX19fbW9kdWxlX2NhdChhLGIpIF9fbW9kXyAjIyBhICMjIGIKICNkZWZpbmUgX19tb2R1bGVfY2F0KGEsYikgX19fbW9kdWxlX2NhdChhLGIpCkBAIC03OSw3ICs4Miw4IEBACiAjZGVmaW5lIF9fbW9kdWxlX3BhcmFtX2NhbGwocHJlZml4LCBuYW1lLCBzZXQsIGdldCwgYXJnLCBwZXJtKQkJXAogCS8qIERlZmF1bHQgdmFsdWUgaW5zdGVhZCBvZiBwZXJtaXNzaW9ucz8gKi8JCQlcCiAJc3RhdGljIGludCBfX3BhcmFtX3Blcm1fY2hlY2tfIyNuYW1lIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0JXAotCUJVSUxEX0JVR19PTl9aRVJPKChwZXJtKSA8IDAgfHwgKHBlcm0pID4gMDc3NyB8fCAoKHBlcm0pICYgMikpOwlcCisJQlVJTERfQlVHX09OX1pFUk8oKHBlcm0pIDwgMCB8fCAocGVybSkgPiAwNzc3IHx8ICgocGVybSkgJiAyKSkJXAorCSsgQlVJTERfQlVHX09OX1pFUk8oc2l6ZW9mKCIicHJlZml4KSA+IE1BWF9QQVJBTV9QUkVGSVhfTEVOKTsJXAogCXN0YXRpYyBjb25zdCBjaGFyIF9fcGFyYW1fc3RyXyMjbmFtZVtdID0gcHJlZml4ICNuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3Qga2VybmVsX3BhcmFtIF9fbW9kdWxlcGFyYW1fY29uc3QgX19wYXJhbV8jI25hbWUJXAogCV9fdXNlZAkJCQkJCQkJXApAQCAtMTAwLDYgKzEwNCwyNSBAQAogI2RlZmluZSBtb2R1bGVfcGFyYW0obmFtZSwgdHlwZSwgcGVybSkJCQkJXAogCW1vZHVsZV9wYXJhbV9uYW1lZChuYW1lLCBuYW1lLCB0eXBlLCBwZXJtKQogCisjaWZuZGVmIE1PRFVMRQorLyoqCisgKiBjb3JlX3BhcmFtIC0gZGVmaW5lIGEgaGlzdG9yaWNhbCBjb3JlIGtlcm5lbCBwYXJhbWV0ZXIuCisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGNtZGxpbmUgYW5kIHN5c2ZzIHBhcmFtZXRlciAob2Z0ZW4gdGhlIHNhbWUgYXMgdmFyKQorICogQHZhcjogdGhlIHZhcmlhYmxlCisgKiBAdHlwZTogdGhlIHR5cGUgKGZvciBwYXJhbV9zZXRfIyN0eXBlIGFuZCBwYXJhbV9nZXRfIyN0eXBlKQorICogQHBlcm06IHZpc2liaWxpdHkgaW4gc3lzZnMKKyAqCisgKiBjb3JlX3BhcmFtIGlzIGp1c3QgbGlrZSBtb2R1bGVfcGFyYW0oKSwgYnV0IGNhbm5vdCBiZSBtb2R1bGFyIGFuZAorICogZG9lc24ndCBhZGQgYSBwcmVmaXggKHN1Y2ggYXMgInByaW50ay4iKS4gIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkKKyAqIHdpdGggX19zZXR1cCgpLCBhbmQgaXQgbWFrZXMgc2Vuc2UgYXMgdHJ1bHkgY29yZSBwYXJhbWV0ZXJzIGFyZW4ndAorICogdGllZCB0byB0aGUgcGFydGljdWxhciBmaWxlIHRoZXkncmUgaW4uCisgKi8KKyNkZWZpbmUgY29yZV9wYXJhbShuYW1lLCB2YXIsIHR5cGUsIHBlcm0pCQkJCVwKKwlwYXJhbV9jaGVja18jI3R5cGUobmFtZSwgJih2YXIpKTsJCQkJXAorCV9fbW9kdWxlX3BhcmFtX2NhbGwoIiIsIG5hbWUsIHBhcmFtX3NldF8jI3R5cGUsIHBhcmFtX2dldF8jI3R5cGUsIFwKKwkJCSAgICAmdmFyLCBwZXJtKQorI2VuZGlmIC8qICFNT0RVTEUgKi8KKwogLyogQWN0dWFsbHkgY29weSBzdHJpbmc6IG1heGxlbiBwYXJhbSBpcyB1c3VhbGx5IHNpemVvZihzdHJpbmcpLiAqLwogI2RlZmluZSBtb2R1bGVfcGFyYW1fc3RyaW5nKG5hbWUsIHN0cmluZywgbGVuLCBwZXJtKQkJCVwKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGtwYXJhbV9zdHJpbmcgX19wYXJhbV9zdHJpbmdfIyNuYW1lCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IGQ2ZmIxMTUuLmVlNTEyNGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaV9lbmRpYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQveGlwLmg+CiAKICNpZmRlZiBDT05GSUdfTVREX0NGSV9JMQogI2RlZmluZSBjZmlfaW50ZXJsZWF2ZShjZmkpIDEKQEAgLTQzMCw3ICs0MzEsNiBAQAogewogCW1hcF93b3JkIHZhbDsKIAl1aW50MzJfdCBhZGRyID0gYmFzZSArIGNmaV9idWlsZF9jbWRfYWRkcihjbWRfYWRkciwgY2ZpX2ludGVybGVhdmUoY2ZpKSwgdHlwZSk7Ci0KIAl2YWwgPSBjZmlfYnVpbGRfY21kKGNtZCwgbWFwLCBjZmkpOwogCiAJaWYgKHByZXZfdmFsKQpAQCAtNDgzLDYgKzQ4MywxMyBAQAogCX0KIH0KIAoraW50IF9feGlwcmFtIGNmaV9xcnlfcHJlc2VudChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpOworaW50IF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vbih1aW50MzJfdCBiYXNlLCBzdHJ1Y3QgbWFwX2luZm8gKm1hcCwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpOwordm9pZCBfX3hpcHJhbSBjZmlfcXJ5X21vZGVfb2ZmKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKTsKKwogc3RydWN0IGNmaV9leHRxdWVyeSAqY2ZpX3JlYWRfcHJpKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1aW50MTZfdCBhZHIsIHVpbnQxNl90IHNpemUsCiAJCQkgICAgIGNvbnN0IGNoYXIqIG5hbWUpOwogc3RydWN0IGNmaV9maXh1cCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCmluZGV4IDA4ZGQxMzEuLmQ0ZjM4YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCkBAIC03Myw2ICs3MywxMCBAQAogCWludCBidWZmZXJfd3JpdGVfdGltZTsKIAlpbnQgZXJhc2VfdGltZTsKIAorCWludCB3b3JkX3dyaXRlX3RpbWVfbWF4OworCWludCBidWZmZXJfd3JpdGVfdGltZV9tYXg7CisJaW50IGVyYXNlX3RpbWVfbWF4OworCiAJdm9pZCAqcHJpdjsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggOTIyNjM2NS4uZWFlMjZiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTI1LDggKzI1LDEwIEBACiAjZGVmaW5lIE1URF9FUkFTRV9ET05FICAgICAgICAgIDB4MDgKICNkZWZpbmUgTVREX0VSQVNFX0ZBSUxFRCAgICAgICAgMHgxMAogCisjZGVmaW5lIE1URF9GQUlMX0FERFJfVU5LTk9XTiAweGZmZmZmZmZmCisKIC8qIElmIHRoZSBlcmFzZSBmYWlscywgZmFpbF9hZGRyIG1pZ2h0IGluZGljYXRlIGV4YWN0bHkgd2hpY2ggYmxvY2sgZmFpbGVkLiAgSWYKLSAgIGZhaWxfYWRkciA9IDB4ZmZmZmZmZmYsIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CisgICBmYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV04sIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CiAgICBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhciBibG9jay4gKi8KIHN0cnVjdCBlcmFzZV9pbmZvIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQtZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1MzRlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQtZ3Bpby5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX19MSU5VWF9NVERfTkFORF9HUElPX0gKKyNkZWZpbmUgX19MSU5VWF9NVERfTkFORF9HUElPX0gKKworI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKK3N0cnVjdCBncGlvX25hbmRfcGxhdGRhdGEgeworCWludAlncGlvX25jZTsKKwlpbnQJZ3Bpb19ud3A7CisJaW50CWdwaW9fY2xlOworCWludAlncGlvX2FsZTsKKwlpbnQJZ3Bpb19yZHk7CisJdm9pZAkoKmFkanVzdF9wYXJ0cykoc3RydWN0IGdwaW9fbmFuZF9wbGF0ZGF0YSAqLCBzaXplX3QpOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwl1bnNpZ25lZCBpbnQgbnVtX3BhcnRzOworCXVuc2lnbmVkIGludCBvcHRpb25zOworCWludAljaGlwX2RlbGF5OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKaW5kZXggODE3NzRlNS4uNzMzZDNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMjQ4LDYgKzI0OCw3IEBACiAgKiBAcmVhZF9wYWdlX3JhdzoJZnVuY3Rpb24gdG8gcmVhZCBhIHJhdyBwYWdlIHdpdGhvdXQgRUNDCiAgKiBAd3JpdGVfcGFnZV9yYXc6CWZ1bmN0aW9uIHRvIHdyaXRlIGEgcmF3IHBhZ2Ugd2l0aG91dCBFQ0MKICAqIEByZWFkX3BhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKKyAqIEByZWFkX3N1YnBhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgcGFydHMgb2YgdGhlIHBhZ2UgY292ZXJlZCBieSBFQ0MuCiAgKiBAd3JpdGVfcGFnZToJZnVuY3Rpb24gdG8gd3JpdGUgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKICAqIEByZWFkX29vYjoJZnVuY3Rpb24gdG8gcmVhZCBjaGlwIE9PQiBkYXRhCiAgKiBAd3JpdGVfb29iOglmdW5jdGlvbiB0byB3cml0ZSBjaGlwIE9PQiBkYXRhCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCmluZGV4IGQxYjMxMGMuLjBjNmJiZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCkBAIC0xNTIsNiArMTUyLDggQEAKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JTlQJCSgxIDw8IDYpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfSU9CRQkJKDEgPDwgNSkKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9SRFlfQ09ORgkoMSA8PCA0KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0hGCQkoMSA8PCAyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX1NZTkNfV1JJVEUJKDEgPDwgMSkKIAogLyoKICAqIENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyIEYyNDBoIChSKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCmluZGV4IDUwMTRmN2EuLmM5MmI0ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKQEAgLTczLDcgKzczLDYgQEAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIAogaW50IF9fZGV2aW5pdCBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3YzFjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBTdXBlckggRkxDVEwgbmFuZCBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9fU0hfRkxDVExfSF9fCisjZGVmaW5lIF9fU0hfRkxDVExfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisvKiBGTENUTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRkxDTU5DUihmKQkJKGYtPnJlZyArIDB4MCkKKyNkZWZpbmUgRkxDTURDUihmKQkJKGYtPnJlZyArIDB4NCkKKyNkZWZpbmUgRkxDTUNEUihmKQkJKGYtPnJlZyArIDB4OCkKKyNkZWZpbmUgRkxBRFIoZikJCShmLT5yZWcgKyAweEMpCisjZGVmaW5lIEZMQURSMihmKQkJKGYtPnJlZyArIDB4M0MpCisjZGVmaW5lIEZMREFUQVIoZikJCShmLT5yZWcgKyAweDEwKQorI2RlZmluZSBGTERUQ05UUihmKQkJKGYtPnJlZyArIDB4MTQpCisjZGVmaW5lIEZMSU5URE1BQ1IoZikJCShmLT5yZWcgKyAweDE4KQorI2RlZmluZSBGTEJTWVRNUihmKQkJKGYtPnJlZyArIDB4MUMpCisjZGVmaW5lIEZMQlNZQ05UKGYpCQkoZi0+cmVnICsgMHgyMCkKKyNkZWZpbmUgRkxEVEZJRk8oZikJCShmLT5yZWcgKyAweDI0KQorI2RlZmluZSBGTEVDRklGTyhmKQkJKGYtPnJlZyArIDB4MjgpCisjZGVmaW5lIEZMVFJDUihmKQkJKGYtPnJlZyArIDB4MkMpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDAoZikJKGYtPnJlZyArIDB4ODApCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDEoZikJKGYtPnJlZyArIDB4ODQpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDIoZikJKGYtPnJlZyArIDB4ODgpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDMoZikJKGYtPnJlZyArIDB4OEMpCisjZGVmaW5lCUZMNEVDQ0NSKGYpCQkoZi0+cmVnICsgMHg5MCkKKyNkZWZpbmUJRkw0RUNDQ05UKGYpCQkoZi0+cmVnICsgMHg5NCkKKyNkZWZpbmUJRkxFUlJBRFIoZikJCShmLT5yZWcgKyAweDk4KQorCisvKiBGTENNTkNSIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBFQ0NQT1MyCQkoMHgxIDw8IDI1KQorI2RlZmluZSBfNEVDQ0NOVEVOCSgweDEgPDwgMjQpCisjZGVmaW5lIF80RUNDRU4JCSgweDEgPDwgMjMpCisjZGVmaW5lIF80RUNDQ09SUkVDVAkoMHgxIDw8IDIyKQorI2RlZmluZSBTTkFORF9FCQkoMHgxIDw8IDE4KQkvKiBTTkFORCAoMD01MTIgMT0yMDQ4KSovCisjZGVmaW5lIFFUU0VMX0UJCSgweDEgPDwgMTcpCisjZGVmaW5lIEVORElBTgkJKDB4MSA8PCAxNikJLyogMSA9IGxpdHRsZSBlbmRpYW4gKi8KKyNkZWZpbmUgRkNLU0VMX0UJKDB4MSA8PCAxNSkKKyNkZWZpbmUgRUNDUE9TXzAwCSgweDAwIDw8IDEyKQorI2RlZmluZSBFQ0NQT1NfMDEJKDB4MDEgPDwgMTIpCisjZGVmaW5lIEVDQ1BPU18wMgkoMHgwMiA8PCAxMikKKyNkZWZpbmUgQUNNX1NBQ0NFU19NT0RFCSgweDAxIDw8IDEwKQorI2RlZmluZSBOQU5XRl9FCQkoMHgxIDw8IDkpCisjZGVmaW5lIFNFX0QJCSgweDEgPDwgOCkJLyogU3BhcmUgYXJlYSBkaXNhYmxlICovCisjZGVmaW5lCUNFMV9FTkFCTEUJKDB4MSA8PCA0KQkvKiBDaGlwIEVuYWJsZSAxICovCisjZGVmaW5lCUNFMF9FTkFCTEUJKDB4MSA8PCAzKQkvKiBDaGlwIEVuYWJsZSAwICovCisjZGVmaW5lCVRZUEVTRUxfU0VUCSgweDEgPDwgMCkKKworLyogRkxDTURDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgQURSQ05UMl9FCSgweDEgPDwgMzEpCS8qIDVieXRlIGFkZHJlc3MgZW5hYmxlICovCisjZGVmaW5lIEFEUk1EX0UJCSgweDEgPDwgMjYpCS8qIFNlY3RvciBhZGRyZXNzIGFjY2VzcyAqLworI2RlZmluZSBDRFNSQ19FCQkoMHgxIDw8IDI1KQkvKiBEYXRhIGJ1ZmZlciBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRE9TUl9FCQkoMHgxIDw8IDI0KQkvKiBTdGF0dXMgcmVhZCBjaGVjayAqLworI2RlZmluZSBTRUxSVwkJKDB4MSA8PCAyMSkJLyogIDA6cmVhZCAxOndyaXRlICovCisjZGVmaW5lIERPQURSX0UJCSgweDEgPDwgMjApCS8qIEFkZHJlc3Mgc3RhZ2UgZXhlY3V0ZSAqLworI2RlZmluZSBBRFJDTlRfMQkoMHgwMCA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAxYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfMgkoMHgwMSA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAyYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfMwkoMHgwMiA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAzYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfNAkoMHgwMyA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiA0Ynl0ZSAqLworI2RlZmluZSBET0NNRDJfRQkoMHgxIDw8IDE3KQkvKiAybmQgY21kIHN0YWdlIGV4ZWN1dGUgKi8KKyNkZWZpbmUgRE9DTUQxX0UJKDB4MSA8PCAxNikJLyogMXN0IGNtZCBzdGFnZSBleGVjdXRlICovCisKKy8qIEZMVFJDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgVFJTVFJUCQkoMHgxIDw8IDApCS8qIHRyYW5zbGF0aW9uIHN0YXJ0ICovCisjZGVmaW5lIFRSRU5ECQkoMHgxIDw8IDEpCS8qIHRyYW5zbGF0aW9uIGVuZCAqLworCisvKiBGTDRFQ0NDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUJXzRFQ0NGQQkJKDB4MSA8PCAyKQkvKiA0IHN5bWJvbHMgY29ycmVjdCBmYXVsdCAqLworI2RlZmluZQlfNEVDQ0VORAkoMHgxIDw8IDEpCS8qIDQgc3ltYm9scyBlbmQgKi8KKyNkZWZpbmUJXzRFQ0NFWFNUCSgweDEgPDwgMCkJLyogNCBzeW1ib2xzIGV4aXN0ICovCisKKyNkZWZpbmUgSU5JVF9GTDRFQ0NSRVNVTFRfVkFMCTB4MDNGRjAzRkYKKyNkZWZpbmUgTE9PUF9USU1FT1VUX01BWAkweDAwMDEwMDAwCisKKyNkZWZpbmUgbXRkX3RvX2ZsY3RsKG10ZCkJY29udGFpbmVyX29mKG10ZCwgc3RydWN0IHNoX2ZsY3RsLCBtdGQpCisKK3N0cnVjdCBzaF9mbGN0bCB7CisJc3RydWN0IG10ZF9pbmZvCQltdGQ7CisJc3RydWN0IG5hbmRfY2hpcAljaGlwOworCXZvaWQgX19pb21lbQkJKnJlZzsKKworCXVpbnQ4X3QJZG9uZV9idWZmWzIwNDggKyA2NF07CS8qIG1heCBzaXplIDIwNDggKyA2NCAqLworCWludAlyZWFkX2J5dGVzOworCWludAlpbmRleDsKKwlpbnQJc2VxaW5fY29sdW1uOwkJLyogY29sdW1uIGluIFNFUUlOIGNtZCAqLworCWludAlzZXFpbl9wYWdlX2FkZHI7CS8qIHBhZ2VfYWRkciBpbiBTRVFJTiBjbWQgKi8KKwl1aW50MzJfdCBzZXFpbl9yZWFkX2NtZDsJCS8qIHJlYWQgY21kIGluIFNFUUlOIGNtZCAqLworCWludAllcmFzZTFfcGFnZV9hZGRyOwkvKiBwYWdlX2FkZHIgaW4gRVJBU0UxIGNtZCAqLworCXVpbnQzMl90IGVyYXNlX0FEUkNOVDsJCS8qIGJpdHMgb2YgRkxDTURDUiBpbiBFUkFTRTEgY21kICovCisJdWludDMyX3QgcndfQURSQ05UOwkvKiBiaXRzIG9mIEZMQ01EQ1IgaW4gUkVBRCBXUklURSBjbWQgKi8KKworCWludAlod2VjY19jYW50X2NvcnJlY3RbNF07CisKKwl1bnNpZ25lZCBwYWdlX3NpemU6MTsJLyogTkFORCBwYWdlIHNpemUgKDAgPSA1MTIsIDEgPSAyMDQ4KSAqLworCXVuc2lnbmVkIGh3ZWNjOjE7CS8qIEhhcmR3YXJlIEVDQyAoMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZCkgKi8KK307CisKK3N0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CisJaW50CQkJbnJfcGFydHM7CisJdW5zaWduZWQgbG9uZwkJZmxjbW5jcl92YWw7CisKKwl1bnNpZ25lZCBoYXNfaHdlY2M6MTsKK307CisKKyNlbmRpZgkvKiBfX1NIX0ZMQ1RMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCmluZGV4IDY4ZjhjMzIuLjk5ZWI4MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKQEAgLTUxLDggKzUxLDEwIEBACiAvKgogICogSW50ZW50IGRhdGEKICAqLwotI2RlZmluZSBMT09LVVBfT1BFTgkJKDB4MDEwMCkKLSNkZWZpbmUgTE9PS1VQX0NSRUFURQkJKDB4MDIwMCkKKyNkZWZpbmUgTE9PS1VQX09QRU4JCTB4MDEwMAorI2RlZmluZSBMT09LVVBfQ1JFQVRFCQkweDAyMDAKKyNkZWZpbmUgTE9PS1VQX0VYQ0wJCTB4MDQwMAorI2RlZmluZSBMT09LVVBfUkVOQU1FX1RBUkdFVAkweDA4MDAKIAogZXh0ZXJuIGludCB1c2VyX3BhdGhfYXQoaW50LCBjb25zdCBjaGFyIF9fdXNlciAqLCB1bnNpZ25lZCwgc3RydWN0IHBhdGggKik7CiAKQEAgLTYxLDYgKzYzLDggQEAKICNkZWZpbmUgdXNlcl9wYXRoX2RpcihuYW1lLCBwYXRoKSBcCiAJdXNlcl9wYXRoX2F0KEFUX0ZEQ1dELCBuYW1lLCBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWSwgcGF0aCkKIAorZXh0ZXJuIGludCBrZXJuX3BhdGgoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgc3RydWN0IHBhdGggKik7CisKIGV4dGVybiBpbnQgcGF0aF9sb29rdXAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiBpbnQgdmZzX3BhdGhfbG9va3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHZmc21vdW50ICosCiAJCQkgICBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDY0ODc1ODUuLmM4YmNiNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtNTQxLDYgKzU0MSwxNCBAQAogI2RlZmluZSBORVRJRl9GX1Y2X0NTVU0JCShORVRJRl9GX0dFTl9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pCiAjZGVmaW5lIE5FVElGX0ZfQUxMX0NTVU0JKE5FVElGX0ZfVjRfQ1NVTSB8IE5FVElGX0ZfVjZfQ1NVTSkKIAorCS8qCisJICogSWYgb25lIGRldmljZSBzdXBwb3J0cyBvbmUgb2YgdGhlc2UgZmVhdHVyZXMsIHRoZW4gZW5hYmxlIHRoZW0KKwkgKiBmb3IgYWxsIGluIG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXMuCisJICovCisjZGVmaW5lIE5FVElGX0ZfT05FX0ZPUl9BTEwJKE5FVElGX0ZfR1NPX1NPRlRXQVJFIHwgTkVUSUZfRl9HU09fUk9CVVNUIHwgXAorCQkJCSBORVRJRl9GX1NHIHwgTkVUSUZfRl9ISUdIRE1BIHwgXAorCQkJCSBORVRJRl9GX0ZSQUdMSVNUKQorCiAJLyogSW50ZXJmYWNlIGluZGV4LiBVbmlxdWUgZGV2aWNlIGlkZW50aWZpZXIJKi8KIAlpbnQJCQlpZmluZGV4OwogCWludAkJCWlmbGluazsKQEAgLTE2OTgsNyArMTcwNiw5IEBACiAKIGV4dGVybiB2b2lkIGxpbmt3YXRjaF9ydW5fcXVldWUodm9pZCk7CiAKLWV4dGVybiBpbnQgbmV0ZGV2X2NvbXB1dGVfZmVhdHVyZXModW5zaWduZWQgbG9uZyBhbGwsIHVuc2lnbmVkIGxvbmcgb25lKTsKK3Vuc2lnbmVkIGxvbmcgbmV0ZGV2X2luY3JlbWVudF9mZWF0dXJlcyh1bnNpZ25lZCBsb25nIGFsbCwgdW5zaWduZWQgbG9uZyBvbmUsCisJCQkJCXVuc2lnbmVkIGxvbmcgbWFzayk7Cit1bnNpZ25lZCBsb25nIG5ldGRldl9maXhfZmVhdHVyZXModW5zaWduZWQgbG9uZyBmZWF0dXJlcywgY29uc3QgY2hhciAqbmFtZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5ldF9nc29fb2soaW50IGZlYXR1cmVzLCBpbnQgZ3NvX3R5cGUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBhYzhkMDIzLi40ZWFhODM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTM2Nyw4ICszNjcsMTIgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnBjX2NyZWQgKm5mc19maWxlX2NyZWQoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWYgKGZpbGUgIT0gTlVMTCkKLQkJcmV0dXJuIG5mc19maWxlX29wZW5fY29udGV4dChmaWxlKS0+Y3JlZDsKKwlpZiAoZmlsZSAhPSBOVUxMKSB7CisJCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHggPQorCQkJbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpOworCQlpZiAoY3R4KQorCQkJcmV0dXJuIGN0eC0+Y3JlZDsKKwl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAppbmRleCBiY2I4ZjcyLi41MjMxODYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCkBAIC04NiwxMyArODYsNiBAQAogdm9pZCBvcHJvZmlsZV9hcmNoX2V4aXQodm9pZCk7CiAKIC8qKgotICogQWRkIGRhdGEgdG8gdGhlIGV2ZW50IGJ1ZmZlci4KLSAqIFRoZSBkYXRhIHBhc3NlZCBpcyBmcmVlLWZvcm0sIGJ1dCB0eXBpY2FsbHkgY29uc2lzdHMgb2YKLSAqIGZpbGUgb2Zmc2V0cywgZGNvb2tpZXMsIGNvbnRleHQgaW5mb3JtYXRpb24sIGFuZCBFU0NBUEUgY29kZXMuCi0gKi8KLXZvaWQgYWRkX2V2ZW50X2VudHJ5KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLS8qKgogICogQWRkIGEgc2FtcGxlLiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4gUGFzcwogICogc21wX3Byb2Nlc3Nvcl9pZCgpIGFzIGNwdS4KICAqLwpAQCAtMTYyLDUgKzE1NSwxNCBAQAogCiAvKiogbG9jayBmb3IgcmVhZC93cml0ZSBzYWZldHkgKi8KIGV4dGVybiBzcGlubG9ja190IG9wcm9maWxlZnNfbG9jazsKKworLyoqCisgKiBBZGQgdGhlIGNvbnRlbnRzIG9mIGEgY2lyY3VsYXIgYnVmZmVyIHRvIHRoZSBldmVudCBidWZmZXIuCisgKi8KK3ZvaWQgb3Byb2ZpbGVfcHV0X2J1ZmYodW5zaWduZWQgbG9uZyAqYnVmLCB1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQl1bnNpZ25lZCBpbnQgc3RvcCwgdW5zaWduZWQgaW50IG1heCk7CisKK3Vuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfZ2V0X2NwdV9idWZmZXJfc2l6ZSh2b2lkKTsKK3ZvaWQgb3Byb2ZpbGVfY3B1X2J1ZmZlcl9pbmNfc21wbF9sb3N0KHZvaWQpOwogIAogI2VuZGlmIC8qIE9QUk9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggYzc0ZDNlOC4uYjEyZjkzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTkzLDYgKzkzLDExIEBACiAJUEdfbWFwcGVkdG9kaXNrLAkvKiBIYXMgYmxvY2tzIGFsbG9jYXRlZCBvbi1kaXNrICovCiAJUEdfcmVjbGFpbSwJCS8qIFRvIGJlIHJlY2xhaW1lZCBhc2FwICovCiAJUEdfYnVkZHksCQkvKiBQYWdlIGlzIGZyZWUsIG9uIGJ1ZGR5IGxpc3RzICovCisJUEdfc3dhcGJhY2tlZCwJCS8qIFBhZ2UgaXMgYmFja2VkIGJ5IFJBTS9zd2FwICovCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCVBHX3VuZXZpY3RhYmxlLAkJLyogUGFnZSBpcyAidW5ldmljdGFibGUiICAqLworCVBHX21sb2NrZWQsCQkvKiBQYWdlIGlzIHZtYSBtbG9ja2VkICovCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IKIAlQR191bmNhY2hlZCwJCS8qIFBhZ2UgaGFzIGJlZW4gbWFwcGVkIGFzIHVuY2FjaGVkICovCiAjZW5kaWYKQEAgLTE2MSw2ICsxNjYsMTggQEAKICNkZWZpbmUgVEVTVFNDRkxBRyh1bmFtZSwgbG5hbWUpCQkJCQlcCiAJVEVTVFNFVEZMQUcodW5hbWUsIGxuYW1lKSBURVNUQ0xFQVJGTEFHKHVuYW1lLCBsbmFtZSkKIAorI2RlZmluZSBTRVRQQUdFRkxBR19OT09QKHVuYW1lKQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyAgfQorCisjZGVmaW5lIENMRUFSUEFHRUZMQUdfTk9PUCh1bmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7ICB9CisKKyNkZWZpbmUgX19DTEVBUlBBR0VGTEFHX05PT1AodW5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgX19DbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7ICB9CisKKyNkZWZpbmUgVEVTVENMRUFSRkxBR19GQUxTRSh1bmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgaW50IFRlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7IHJldHVybiAwOyB9CisKIHN0cnVjdCBwYWdlOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKIFRFU1RQQUdFRkxBRyhMb2NrZWQsIGxvY2tlZCkKQEAgLTE2OSw2ICsxODYsNyBAQAogUEFHRUZMQUcoRGlydHksIGRpcnR5KSBURVNUU0NGTEFHKERpcnR5LCBkaXJ0eSkgX19DTEVBUlBBR0VGTEFHKERpcnR5LCBkaXJ0eSkKIFBBR0VGTEFHKExSVSwgbHJ1KSBfX0NMRUFSUEFHRUZMQUcoTFJVLCBscnUpCiBQQUdFRkxBRyhBY3RpdmUsIGFjdGl2ZSkgX19DTEVBUlBBR0VGTEFHKEFjdGl2ZSwgYWN0aXZlKQorCVRFU1RDTEVBUkZMQUcoQWN0aXZlLCBhY3RpdmUpCiBfX1BBR0VGTEFHKFNsYWIsIHNsYWIpCiBQQUdFRkxBRyhDaGVja2VkLCBjaGVja2VkKQkJLyogVXNlZCBieSBzb21lIGZpbGVzeXN0ZW1zICovCiBQQUdFRkxBRyhQaW5uZWQsIHBpbm5lZCkgVEVTVFNDRkxBRyhQaW5uZWQsIHBpbm5lZCkJLyogWGVuICovCkBAIC0xNzYsNiArMTk0LDcgQEAKIFBBR0VGTEFHKFJlc2VydmVkLCByZXNlcnZlZCkgX19DTEVBUlBBR0VGTEFHKFJlc2VydmVkLCByZXNlcnZlZCkKIFBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpIF9fQ0xFQVJQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKQogCV9fU0VUUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKK1BBR0VGTEFHKFN3YXBCYWNrZWQsIHN3YXBiYWNrZWQpIF9fQ0xFQVJQQUdFRkxBRyhTd2FwQmFja2VkLCBzd2FwYmFja2VkKQogCiBfX1BBR0VGTEFHKFNsb2JQYWdlLCBzbG9iX3BhZ2UpCiBfX1BBR0VGTEFHKFNsb2JGcmVlLCBzbG9iX2ZyZWUpCkBAIC0yMTEsNiArMjMwLDI1IEBACiBQQUdFRkxBR19GQUxTRShTd2FwQ2FjaGUpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKK1BBR0VGTEFHKFVuZXZpY3RhYmxlLCB1bmV2aWN0YWJsZSkgX19DTEVBUlBBR0VGTEFHKFVuZXZpY3RhYmxlLCB1bmV2aWN0YWJsZSkKKwlURVNUQ0xFQVJGTEFHKFVuZXZpY3RhYmxlLCB1bmV2aWN0YWJsZSkKKworI2RlZmluZSBNTE9DS19QQUdFUyAxCitQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKSBfX0NMRUFSUEFHRUZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKKwlURVNUU0NGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCisKKyNlbHNlCisKKyNkZWZpbmUgTUxPQ0tfUEFHRVMgMAorUEFHRUZMQUdfRkFMU0UoTWxvY2tlZCkKKwlTRVRQQUdFRkxBR19OT09QKE1sb2NrZWQpIFRFU1RDTEVBUkZMQUdfRkFMU0UoTWxvY2tlZCkKKworUEFHRUZMQUdfRkFMU0UoVW5ldmljdGFibGUpIFRFU1RDTEVBUkZMQUdfRkFMU0UoVW5ldmljdGFibGUpCisJU0VUUEFHRUZMQUdfTk9PUChVbmV2aWN0YWJsZSkgQ0xFQVJQQUdFRkxBR19OT09QKFVuZXZpY3RhYmxlKQorCV9fQ0xFQVJQQUdFRkxBR19OT09QKFVuZXZpY3RhYmxlKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IKIFBBR0VGTEFHKFVuY2FjaGVkLCB1bmNhY2hlZCkKICNlbHNlCkBAIC0zMjYsMTUgKzM2NCwyNSBAQAogCiAjZW5kaWYgLyogIVBBR0VGTEFHU19FWFRFTkRFRCAqLwogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorI2RlZmluZSBfX1BHX1VORVZJQ1RBQkxFCSgxIDw8IFBHX3VuZXZpY3RhYmxlKQorI2RlZmluZSBfX1BHX01MT0NLRUQJCSgxIDw8IFBHX21sb2NrZWQpCisjZWxzZQorI2RlZmluZSBfX1BHX1VORVZJQ1RBQkxFCTAKKyNkZWZpbmUgX19QR19NTE9DS0VECQkwCisjZW5kaWYKKwogI2RlZmluZSBQQUdFX0ZMQUdTCSgxIDw8IFBHX2xydSAgIHwgMSA8PCBQR19wcml2YXRlICAgfCAxIDw8IFBHX2xvY2tlZCB8IFwKIAkJCSAxIDw8IFBHX2J1ZGR5IHwgMSA8PCBQR193cml0ZWJhY2sgfCBcCi0JCQkgMSA8PCBQR19zbGFiICB8IDEgPDwgUEdfc3dhcGNhY2hlIHwgMSA8PCBQR19hY3RpdmUpCisJCQkgMSA8PCBQR19zbGFiICB8IDEgPDwgUEdfc3dhcGNhY2hlIHwgMSA8PCBQR19hY3RpdmUgfCBcCisJCQkgX19QR19VTkVWSUNUQUJMRSB8IF9fUEdfTUxPQ0tFRCkKIAogLyoKICAqIEZsYWdzIGNoZWNrZWQgaW4gYmFkX3BhZ2UoKS4gIFBhZ2VzIG9uIHRoZSBmcmVlIGxpc3Qgc2hvdWxkIG5vdCBoYXZlCiAgKiB0aGVzZSBmbGFncyBzZXQuICBJdCB0aGV5IGFyZSwgdGhlcmUgaXMgYSBwcm9ibGVtLgogICovCi0jZGVmaW5lIFBBR0VfRkxBR1NfQ0xFQVJfV0hFTl9CQUQgKFBBR0VfRkxBR1MgfCAxIDw8IFBHX3JlY2xhaW0gfCAxIDw8IFBHX2RpcnR5KQorI2RlZmluZSBQQUdFX0ZMQUdTX0NMRUFSX1dIRU5fQkFEIChQQUdFX0ZMQUdTIHwgXAorCQkxIDw8IFBHX3JlY2xhaW0gfCAxIDw8IFBHX2RpcnR5IHwgMSA8PCBQR19zd2FwYmFja2VkKQogCiAvKgogICogRmxhZ3MgY2hlY2tlZCB3aGVuIGEgcGFnZSBpcyBmcmVlZC4gIFBhZ2VzIGJlaW5nIGZyZWVkIHNob3VsZCBub3QgaGF2ZQpAQCAtMzQ3LDcgKzM5NSw4IEBACiAgKiBQYWdlcyBiZWluZyBwcmVwcGVkIHNob3VsZCBub3QgaGF2ZSB0aGVzZSBmbGFncyBzZXQuICBJdCB0aGV5IGFyZSwgdGhlcmUKICAqIGlzIGEgcHJvYmxlbS4KICAqLwotI2RlZmluZSBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAgKFBBR0VfRkxBR1MgfCAxIDw8IFBHX3Jlc2VydmVkIHwgMSA8PCBQR19kaXJ0eSkKKyNkZWZpbmUgUEFHRV9GTEFHU19DSEVDS19BVF9QUkVQIChQQUdFX0ZMQUdTIHwgXAorCQkxIDw8IFBHX3Jlc2VydmVkIHwgMSA8PCBQR19kaXJ0eSB8IDEgPDwgUEdfc3dhcGJhY2tlZCkKIAogI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi8KICNlbmRpZgkvKiBQQUdFX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQ2YWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIF9fTElOVVhfUEFHRV9DR1JPVVBfSAorI2RlZmluZSBfX0xJTlVYX1BBR0VfQ0dST1VQX0gKKworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCisjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CisvKgorICogUGFnZSBDZ3JvdXAgY2FuIGJlIGNvbnNpZGVyZWQgYXMgYW4gZXh0ZW5kZWQgbWVtX21hcC4KKyAqIEEgcGFnZV9jZ3JvdXAgcGFnZSBpcyBhc3NvY2lhdGVkIHdpdGggZXZlcnkgcGFnZSBkZXNjcmlwdG9yLiBUaGUKKyAqIHBhZ2VfY2dyb3VwIGhlbHBzIHVzIGlkZW50aWZ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjZ3JvdXAKKyAqIEFsbCBwYWdlIGNncm91cHMgYXJlIGFsbG9jYXRlZCBhdCBib290IG9yIG1lbW9yeSBob3RwbHVnIGV2ZW50LAorICogdGhlbiB0aGUgcGFnZSBjZ3JvdXAgZm9yIHBmbiBhbHdheXMgZXhpc3RzLgorICovCitzdHJ1Y3QgcGFnZV9jZ3JvdXAgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXA7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGxpc3RfaGVhZCBscnU7CQkvKiBwZXIgY2dyb3VwIExSVSBsaXN0ICovCit9OworCit2b2lkIF9faW5pdCBwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpOwordm9pZCBfX2luaXQgcGFnZV9jZ3JvdXBfaW5pdCh2b2lkKTsKK3N0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKTsKKworZW51bSB7CisJLyogZmxhZ3MgZm9yIG1lbV9jZ3JvdXAgKi8KKwlQQ0dfTE9DSywgIC8qIHBhZ2UgY2dyb3VwIGlzIGxvY2tlZCAqLworCVBDR19DQUNIRSwgLyogY2hhcmdlZCBhcyBjYWNoZSAqLworCVBDR19VU0VELCAvKiB0aGlzIG9iamVjdCBpcyBpbiB1c2UuICovCisJLyogZmxhZ3MgZm9yIExSVSBwbGFjZW1lbnQgKi8KKwlQQ0dfQUNUSVZFLCAvKiBwYWdlIGlzIGFjdGl2ZSBpbiB0aGlzIGNncm91cCAqLworCVBDR19GSUxFLCAvKiBwYWdlIGlzIGZpbGUgc3lzdGVtIGJhY2tlZCAqLworCVBDR19VTkVWSUNUQUJMRSwgLyogcGFnZSBpcyB1bmV2aWN0YWJsZWFibGUgKi8KK307CisKKyNkZWZpbmUgVEVTVFBDR0ZMQUcodW5hbWUsIGxuYW1lKQkJCVwKK3N0YXRpYyBpbmxpbmUgaW50IFBhZ2VDZ3JvdXAjI3VuYW1lKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCVwKKwl7IHJldHVybiB0ZXN0X2JpdChQQ0dfIyNsbmFtZSwgJnBjLT5mbGFncyk7IH0KKworI2RlZmluZSBTRVRQQ0dGTEFHKHVuYW1lLCBsbmFtZSkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgU2V0UGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYylcCisJeyBzZXRfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgIH0KKworI2RlZmluZSBDTEVBUlBDR0ZMQUcodW5hbWUsIGxuYW1lKQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBDbGVhclBhZ2VDZ3JvdXAjI3VuYW1lKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCVwKKwl7IGNsZWFyX2JpdChQQ0dfIyNsbmFtZSwgJnBjLT5mbGFncyk7ICB9CisKKy8qIENhY2hlIGZsYWcgaXMgc2V0IG9ubHkgb25jZSAoYXQgYWxsb2NhdGlvbikgKi8KK1RFU1RQQ0dGTEFHKENhY2hlLCBDQUNIRSkKKworVEVTVFBDR0ZMQUcoVXNlZCwgVVNFRCkKK0NMRUFSUENHRkxBRyhVc2VkLCBVU0VEKQorCisvKiBMUlUgbWFuYWdlbWVudCBmbGFncyAoZnJvbSBnbG9iYWwtbHJ1IGRlZmluaXRpb24pICovCitURVNUUENHRkxBRyhGaWxlLCBGSUxFKQorU0VUUENHRkxBRyhGaWxlLCBGSUxFKQorQ0xFQVJQQ0dGTEFHKEZpbGUsIEZJTEUpCisKK1RFU1RQQ0dGTEFHKEFjdGl2ZSwgQUNUSVZFKQorU0VUUENHRkxBRyhBY3RpdmUsIEFDVElWRSkKK0NMRUFSUENHRkxBRyhBY3RpdmUsIEFDVElWRSkKKworVEVTVFBDR0ZMQUcoVW5ldmljdGFibGUsIFVORVZJQ1RBQkxFKQorU0VUUENHRkxBRyhVbmV2aWN0YWJsZSwgVU5FVklDVEFCTEUpCitDTEVBUlBDR0ZMQUcoVW5ldmljdGFibGUsIFVORVZJQ1RBQkxFKQorCitzdGF0aWMgaW5saW5lIGludCBwYWdlX2Nncm91cF9uaWQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwlyZXR1cm4gcGFnZV90b19uaWQocGMtPnBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2VfY2dyb3VwX3ppZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQoreworCXJldHVybiBwYWdlX3pvbmVudW0ocGMtPnBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQoreworCWJpdF9zcGluX2xvY2soUENHX0xPQ0ssICZwYy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0cnlsb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJcmV0dXJuIGJpdF9zcGluX3RyeWxvY2soUENHX0xPQ0ssICZwYy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJYml0X3NwaW5fdW5sb2NrKFBDR19MT0NLLCAmcGMtPmZsYWdzKTsKK30KKworI2Vsc2UgLyogQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIgKi8KK3N0cnVjdCBwYWdlX2Nncm91cDsKKworc3RhdGljIGlubGluZSB2b2lkIHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3sKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY2dyb3VwX2luaXQodm9pZCkKK3sKK30KKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggNWRhMzFjMS4uNzA5NzQyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTMyLDYgKzMyLDM0IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorI2RlZmluZSBBU19VTkVWSUNUQUJMRQkoX19HRlBfQklUU19TSElGVCArIDIpCS8qIGUuZy4sIHJhbWRpc2ssIFNITV9MT0NLICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlzZXRfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwljbGVhcl9iaXQoQVNfVU5FVklDVEFCTEUsICZtYXBwaW5nLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJaWYgKGxpa2VseShtYXBwaW5nKSkKKwkJcmV0dXJuIHRlc3RfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworCXJldHVybiAhIW1hcHBpbmc7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICogbWFwcGluZykKIHsKIAlyZXR1cm4gKF9fZm9yY2UgZ2ZwX3QpbWFwcGluZy0+ZmxhZ3MgJiBfX0dGUF9CSVRTX01BU0s7CkBAIC0yNzEsMTkgKzI5OSwxOSBAQAogZXh0ZXJuIHZvaWQgX19sb2NrX3BhZ2Vfbm9zeW5jKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIHVubG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzZXRfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKKwlfX3NldF9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9sb2NrZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQljbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCV9fY2xlYXJfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CisJcmV0dXJuIChsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncykpKTsKIH0KIAogLyoKQEAgLTQxMCwxNyArNDM4LDE3IEBACiAKIC8qCiAgKiBMaWtlIGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZCwgYnV0IHVzZWQgdG8gYWRkIG5ld2x5IGFsbG9jYXRlZCBwYWdlczoKLSAqIHRoZSBwYWdlIGlzIG5ldywgc28gd2UgY2FuIGp1c3QgcnVuIHNldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCisgKiB0aGUgcGFnZSBpcyBuZXcsIHNvIHdlIGNhbiBqdXN0IHJ1biBfX3NldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFkZF90b19wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBvZmZzZXQsIGdmcF90IGdmcF9tYXNrKQogewogCWludCBlcnJvcjsKIAotCXNldF9wYWdlX2xvY2tlZChwYWdlKTsKKwlfX3NldF9wYWdlX2xvY2tlZChwYWdlKTsKIAllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZChwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIGdmcF9tYXNrKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQotCQljbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKKwkJX19jbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXZlYy5oIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKaW5kZXggOGViN2ZhNy4uZTkwYTJjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKQEAgLTIzLDkgKzIzLDkgQEAKIHZvaWQgX19wYWdldmVjX3JlbGVhc2Uoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfcmVsZWFzZV9ub25scnUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7Ci12b2lkIF9fcGFnZXZlY19scnVfYWRkKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKLXZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgX19fX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgZW51bSBscnVfbGlzdCBscnUpOwogdm9pZCBwYWdldmVjX3N0cmlwKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdW5zaWduZWQgcGFnZXZlY19sb29rdXAoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlwZ29mZl90IHN0YXJ0LCB1bnNpZ25lZCBucl9wYWdlcyk7CiB1bnNpZ25lZCBwYWdldmVjX2xvb2t1cF90YWcoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsCkBAIC04MSwxMCArODEsMzYgQEAKIAkJX19wYWdldmVjX2ZyZWUocHZlYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9JTkFDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZV9hbm9uKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgTFJVX0FDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2ZpbGUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJX19fX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjLCBMUlVfSU5BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmVfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKIHsKIAlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7CisJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUocHZlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJX19wYWdldmVjX2xydV9hZGRfYW5vbihwdmVjKTsKIH0KIAogI2VuZGlmIC8qIF9MSU5VWF9QQUdFVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDk4ZGM2MjQuLmM3NWI4MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogLyogSW5jbHVkZSB0aGUgSUQgbGlzdCAqLwogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KQEAgLTY0LDYgKzY1LDExIEBACiAJc3RydWN0IGtvYmplY3Qga29iajsKIH07CiAKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGNpX3Nsb3RfbmFtZShjb25zdCBzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCit7CisJcmV0dXJuIGtvYmplY3RfbmFtZSgmc2xvdC0+a29iaik7Cit9CisKIC8qIEZpbGUgc3RhdGUgZm9yIG1tYXAoKXMgb24gL3Byb2MvYnVzL3BjaS9YL1kgKi8KIGVudW0gcGNpX21tYXBfc3RhdGUgewogCXBjaV9tbWFwX2lvLApAQCAtMjE0LDYgKzIyMCw3IEBACiAJdW5zaWduZWQgaW50CWJyb2tlbl9wYXJpdHlfc3RhdHVzOjE7CS8qIERldmljZSBnZW5lcmF0ZXMgZmFsc2UgcG9zaXRpdmUgcGFyaXR5ICovCiAJdW5zaWduZWQgaW50IAltc2lfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGludAltc2l4X2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBpbnQJYXJpX2VuYWJsZWQ6MTsJLyogQVJJIGZvcndhcmRpbmcgKi8KIAl1bnNpZ25lZCBpbnQJaXNfbWFuYWdlZDoxOwogCXVuc2lnbmVkIGludAlpc19wY2llOjE7CiAJcGNpX2Rldl9mbGFnc190IGRldl9mbGFnczsKQEAgLTM0Nyw3ICszNTQsNiBAQAogc3RydWN0IHBjaV9keW5pZHMgewogCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAvKiBwcm90ZWN0cyBsaXN0LCBpbmRleCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgICAgICAvKiBmb3IgSURzIGFkZGVkIGF0IHJ1bnRpbWUgKi8KLQl1bnNpZ25lZCBpbnQgdXNlX2RyaXZlcl9kYXRhOjE7IC8qIHBjaV9kZXZpY2VfaWQtPmRyaXZlcl9kYXRhIGlzIHVzZWQgKi8KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQ1Niw4ICs0NjIsOCBAQAogCiAvKioKICAqIFBDSV9WREVWSUNFIC0gbWFjcm8gdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljIHBjaSBkZXZpY2UgaW4gc2hvcnQgZm9ybQotICogQHZlbmQ6IHRoZSB2ZW5kb3IgbmFtZQotICogQGRldjogdGhlIDE2IGJpdCBQQ0kgRGV2aWNlIElECisgKiBAdmVuZG9yOiB0aGUgdmVuZG9yIG5hbWUKKyAqIEBkZXZpY2U6IHRoZSAxNiBiaXQgUENJIERldmljZSBJRAogICoKICAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjcmVhdGUgYSBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0aGF0IG1hdGNoZXMgYQogICogc3BlY2lmaWMgUENJIGRldmljZS4gIFRoZSBzdWJ2ZW5kb3IsIGFuZCBzdWJkZXZpY2UgZmllbGRzIHdpbGwgYmUgc2V0CkBAIC01MDksOSArNTE1LDEwIEBACiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2FkZF9uZXdfYnVzKHN0cnVjdCBwY2lfYnVzICpwYXJlbnQsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJaW50IGJ1c25yKTsKIHN0cnVjdCBwY2lfc2xvdCAqcGNpX2NyZWF0ZV9zbG90KHN0cnVjdCBwY2lfYnVzICpwYXJlbnQsIGludCBzbG90X25yLAotCQkJCSBjb25zdCBjaGFyICpuYW1lKTsKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Zyk7CiB2b2lkIHBjaV9kZXN0cm95X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KTsKLXZvaWQgcGNpX3VwZGF0ZV9zbG90X251bWJlcihzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGludCBzbG90X25yKTsKK3ZvaWQgcGNpX3JlbnVtYmVyX3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90LCBpbnQgc2xvdF9ucik7CiBpbnQgcGNpX3NjYW5fc2xvdChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pOwogc3RydWN0IHBjaV9kZXYgKnBjaV9zY2FuX3NpbmdsZV9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuKTsKIHZvaWQgcGNpX2RldmljZV9hZGQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXMgKmJ1cyk7CkBAIC01MzksNiArNTQ2LDEzIEBACiAJCQkJCSAgIHVuc2lnbmVkIGludCBkZXZmbik7CiAjZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KIAorZW51bSBwY2lfbG9zdF9pbnRlcnJ1cHRfcmVhc29uIHsKKwlQQ0lfTE9TVF9JUlFfTk9fSU5GT1JNQVRJT04gPSAwLAorCVBDSV9MT1NUX0lSUV9ESVNBQkxFX01TSSwKKwlQQ0lfTE9TVF9JUlFfRElTQUJMRV9NU0lYLAorCVBDSV9MT1NUX0lSUV9ESVNBQkxFX0FDUEksCit9OworZW51bSBwY2lfbG9zdF9pbnRlcnJ1cHRfcmVhc29uIHBjaV9sb3N0X2ludGVycnVwdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOwogaW50IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBwb3MsIGludCBjYXApOwogaW50IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOwpAQCAtNjI2LDExICs2NDAsMTUgQEAKIGludCBwY2l4X3NldF9tbXJiYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbW1yYmMpOwogaW50IHBjaWVfZ2V0X3JlYWRycShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2llX3NldF9yZWFkcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJxKTsKK2ludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgcGNpX2V4ZWN1dGVfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV91cGRhdGVfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNubyk7CiBpbnQgX19tdXN0X2NoZWNrIHBjaV9hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGkpOwogaW50IHBjaV9zZWxlY3RfYmFycyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAogLyogUk9NIGNvbnRyb2wgcmVsYXRlZCByb3V0aW5lcyAqLworaW50IHBjaV9lbmFibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3ZvaWQgcGNpX2Rpc2FibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHZvaWQgX19pb21lbSBfX211c3RfY2hlY2sgKnBjaV9tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3QgKnNpemUpOwogdm9pZCBwY2lfdW5tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKnJvbSk7CiBzaXplX3QgcGNpX2dldF9yb21fc2l6ZSh2b2lkIF9faW9tZW0gKnJvbSwgc2l6ZV90IHNpemUpOwpAQCAtNjQzLDYgKzY2MSw3IEBACiBib29sIHBjaV9wbWVfY2FwYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CiB2b2lkIHBjaV9wbWVfYWN0aXZlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKIGludCBwY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsIGludCBlbmFibGUpOworaW50IHBjaV93YWtlX2Zyb21fZDMoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpOwogcGNpX3Bvd2VyX3QgcGNpX3RhcmdldF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfcHJlcGFyZV90b19zbGVlcChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfYmFja19mcm9tX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtNzIzLDcgKzc0Miw3IEBACiB9OwogCiBzdHJ1Y3QgbXNpeF9lbnRyeSB7Ci0JdTE2IAl2ZWN0b3I7CS8qIGtlcm5lbCB1c2VzIHRvIHdyaXRlIGFsbG9jYXRlZCB2ZWN0b3IgKi8KKwl1MzIJdmVjdG9yOwkvKiBrZXJuZWwgdXNlcyB0byB3cml0ZSBhbGxvY2F0ZWQgdmVjdG9yICovCiAJdTE2CWVudHJ5OwkvKiBkcml2ZXIgdXNlcyB0byBzcGVjaWZ5IGVudHJ5LCBPUyB3cml0ZXMgKi8KIH07CiAKQEAgLTExMTYsNSArMTEzNSwyMCBAQAogc3RhdGljIGlubGluZSB2b2lkIHBjaV9tbWNmZ19sYXRlX2luaXQodm9pZCkgeyB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IQVNfSU9NRU0KK3N0YXRpYyBpbmxpbmUgdm9pZCAqIHBjaV9pb3JlbWFwX2JhcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcikKK3sKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgQkFSIGlzIGFjdHVhbGx5IGEgbWVtb3J5IHJlc291cmNlLCBub3QgYW4gSU8gcmVzb3VyY2UKKwkgKi8KKwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSAmIElPUkVTT1VSQ0VfTUVNKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSwKKwkJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSk7Cit9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBMSU5VWF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oCmluZGV4IGEwOGNkMDYuLmEwMGJkMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmgKQEAgLTE0Miw4ICsxNDIsNiBAQAogCiAvKioKICAqIHN0cnVjdCBob3RwbHVnX3Nsb3QgLSB1c2VkIHRvIHJlZ2lzdGVyIGEgcGh5c2ljYWwgc2xvdCB3aXRoIHRoZSBob3RwbHVnIHBjaSBjb3JlCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHNsb3QgYmVpbmcgcmVnaXN0ZXJlZC4gIFRoaXMgc3RyaW5nIG11c3QKLSAqIGJlIHVuaXF1ZSBhbW91bmcgc2xvdHMgcmVnaXN0ZXJlZCBvbiB0aGlzIHN5c3RlbS4KICAqIEBvcHM6IHBvaW50ZXIgdG8gdGhlICZzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyB0byBiZSB1c2VkIGZvciB0aGlzIHNsb3QKICAqIEBpbmZvOiBwb2ludGVyIHRvIHRoZSAmc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvIGZvciB0aGUgaW5pdGlhbCB2YWx1ZXMgZm9yCiAgKiB0aGlzIHNsb3QuCkBAIC0xNTMsNyArMTUxLDYgQEAKICAqIG5lZWRzLgogICovCiBzdHJ1Y3QgaG90cGx1Z19zbG90IHsKLQljaGFyCQkJCSpuYW1lOwogCXN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzCQkqb3BzOwogCXN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbwkqaW5mbzsKIAl2b2lkICgqcmVsZWFzZSkgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpOwpAQCAtMTY1LDcgKzE2MiwxMyBAQAogfTsKICNkZWZpbmUgdG9faG90cGx1Z19zbG90KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgaG90cGx1Z19zbG90LCBrb2JqKQogCi1leHRlcm4gaW50IHBjaV9ocF9yZWdpc3RlcihzdHJ1Y3QgaG90cGx1Z19zbG90ICosIHN0cnVjdCBwY2lfYnVzICosIGludCBucik7CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmhvdHBsdWdfc2xvdF9uYW1lKGNvbnN0IHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpCit7CisJcmV0dXJuIHBjaV9zbG90X25hbWUoc2xvdC0+cGNpX3Nsb3QpOworfQorCitleHRlcm4gaW50IHBjaV9ocF9yZWdpc3RlcihzdHJ1Y3QgaG90cGx1Z19zbG90ICosIHN0cnVjdCBwY2lfYnVzICosIGludCBuciwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIGludCBwY2lfaHBfZGVyZWdpc3RlcihzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KTsKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIHBjaV9ocF9jaGFuZ2Vfc2xvdF9pbmZvCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LAogCQkJCQkJIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDhlZGRkYzIuLjE4MDBmMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xOTQ0LDYgKzE5NDQsMTQgQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX09YU0VNSQkJMHgxNDE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzEyUENJODQwCTB4ODQwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV9QQ0llODQwCQkweEMwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfUENJZTg0MF9HCQkweEMwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfUENJZTk1Ml8wCQkweEMxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfUENJZTk1Ml8wX0cJMHhDMTA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JX1BDSWU5NTJfMQkJMHhDMTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JX1BDSWU5NTJfMV9HCTB4QzExNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV9QQ0llOTUyXzFfVQkweEMxMTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfUENJZTk1Ml8xX0dVCTB4QzExQwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1NAkweDk1MDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NU4JMHg5NTExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTU0UFAJMHg5NTEzCkBAIC0yNDQ4LDE1ICsyNDU2LDE2IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfTUNIX1BDMQkweDM1OWEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FNzUyNV9NQ0gJMHgzNTllCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9DTkIJMHgzNjBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRkJEX0NOQgkweDM2MGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF8wCTB4M2ExNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzEJMHgzYTE2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMgkweDNhMTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF8zCTB4M2ExYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzQJMHgzYTMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfNQkweDNhNjAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfMAkweDNiMTAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfMQkweDNiMTEKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfMgkweDNiMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfTFBDX01JTgkweDNiMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfTFBDX01BWAkweDNiMWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfU01CVVMJMHgzYjMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9TTkIJMHg0MDJmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNTEwMF8xNgkweDY1ZjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81MTAwXzIxCTB4NjVmNQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCmluZGV4IDQ1MDY4NGYuLmU1ZWZmZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKQEAgLTM3Nyw2ICszNzcsNyBAQAogI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfUkJFUgkweDgwMDAJLyogUm9sZS1CYXNlZCBFcnJvciBSZXBvcnRpbmcgKi8KICNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX1BXUl9WQUwJMHgzZmMwMDAwIC8qIFNsb3QgUG93ZXIgTGltaXQgVmFsdWUgKi8KICNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX1BXUl9TQ0wJMHhjMDAwMDAwIC8qIFNsb3QgUG93ZXIgTGltaXQgU2NhbGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX0ZMUiAgICAgMHgxMDAwMDAwMCAvKiBGdW5jdGlvbiBMZXZlbCBSZXNldCAqLwogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTAkJOAkvKiBEZXZpY2UgQ29udHJvbCAqLwogI2RlZmluZSAgUENJX0VYUF9ERVZDVExfQ0VSRQkweDAwMDEJLyogQ29ycmVjdGFibGUgRXJyb3IgUmVwb3J0aW5nIEVuLiAqLwogI2RlZmluZSAgUENJX0VYUF9ERVZDVExfTkZFUkUJMHgwMDAyCS8qIE5vbi1GYXRhbCBFcnJvciBSZXBvcnRpbmcgRW5hYmxlICovCkBAIC0zODksNiArMzkwLDcgQEAKICNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX0FVWF9QTUUJMHgwNDAwCS8qIEF1eGlsaWFyeSBQb3dlciBQTSBFbmFibGUgKi8KICNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4gMHgwODAwICAvKiBFbmFibGUgTm8gU25vb3AgKi8KICNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX1JFQURSUQkweDcwMDAJLyogTWF4X1JlYWRfUmVxdWVzdF9TaXplICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9CQ1JfRkxSIDB4ODAwMCAgLyogQnJpZGdlIENvbmZpZ3VyYXRpb24gUmV0cnkgLyBGTFIgKi8KICNkZWZpbmUgUENJX0VYUF9ERVZTVEEJCTEwCS8qIERldmljZSBTdGF0dXMgKi8KICNkZWZpbmUgIFBDSV9FWFBfREVWU1RBX0NFRAkweDAxCS8qIENvcnJlY3RhYmxlIEVycm9yIERldGVjdGVkICovCiAjZGVmaW5lICBQQ0lfRVhQX0RFVlNUQV9ORkVECTB4MDIJLyogTm9uLUZhdGFsIEVycm9yIERldGVjdGVkICovCkBAIC00MTksNiArNDIxLDEwIEBACiAjZGVmaW5lICBQQ0lfRVhQX1JUQ1RMX0NSU1NWRQkweDEwCS8qIENSUyBTb2Z0d2FyZSBWaXNpYmlsaXR5IEVuYWJsZSAqLwogI2RlZmluZSBQQ0lfRVhQX1JUQ0FQCQkzMAkvKiBSb290IENhcGFiaWxpdGllcyAqLwogI2RlZmluZSBQQ0lfRVhQX1JUU1RBCQkzMgkvKiBSb290IFN0YXR1cyAqLworI2RlZmluZSBQQ0lfRVhQX0RFVkNBUDIJCTM2CS8qIERldmljZSBDYXBhYmlsaXRpZXMgMiAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX0FSSQkweDIwCS8qIEFsdGVybmF0aXZlIFJvdXRpbmctSUQgKi8KKyNkZWZpbmUgUENJX0VYUF9ERVZDVEwyCQk0MAkvKiBEZXZpY2UgQ29udHJvbCAyICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTDJfQVJJCTB4MjAJLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCAqLwogCiAvKiBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgKFBDSS1YIDIuMCBhbmQgRXhwcmVzcykgKi8KICNkZWZpbmUgUENJX0VYVF9DQVBfSUQoaGVhZGVyKQkJKGhlYWRlciAmIDB4MDAwMGZmZmYpCkBAIC00MjksNiArNDM1LDcgQEAKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfVkMJMgogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9EU04JMwogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9QV1IJNAorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9BUkkJMTQKIAogLyogQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nICovCiAjZGVmaW5lIFBDSV9FUlJfVU5DT1JfU1RBVFVTCTQJLyogVW5jb3JyZWN0YWJsZSBFcnJvciBTdGF0dXMgKi8KQEAgLTUzNiw1ICs1NDMsMTQgQEAKICNkZWZpbmUgSFRfQ0FQVFlQRV9HRU4zCQkweEQwCS8qIEdlbmVyYXRpb24gMyBoeXBlcnRyYW5zcG9ydCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEhUX0NBUFRZUEVfUE0JCTB4RTAJLyogSHlwZXJ0cmFuc3BvcnQgcG93ZXJtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gKi8KIAorLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCBJbnRlcnByZXRhdGlvbiAqLworI2RlZmluZSBQQ0lfQVJJX0NBUAkJMHgwNAkvKiBBUkkgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FSSV9DQVBfTUZWQwkweDAwMDEJLyogTUZWQyBGdW5jdGlvbiBHcm91cHMgQ2FwYWJpbGl0eSAqLworI2RlZmluZSAgUENJX0FSSV9DQVBfQUNTCTB4MDAwMgkvKiBBQ1MgRnVuY3Rpb24gR3JvdXBzIENhcGFiaWxpdHkgKi8KKyNkZWZpbmUgIFBDSV9BUklfQ0FQX05GTih4KQkoKCh4KSA+PiA4KSAmIDB4ZmYpIC8qIE5leHQgRnVuY3Rpb24gTnVtYmVyICovCisjZGVmaW5lIFBDSV9BUklfQ1RSTAkJMHgwNgkvKiBBUkkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FSSV9DVFJMX01GVkMJMHgwMDAxCS8qIE1GVkMgRnVuY3Rpb24gR3JvdXBzIEVuYWJsZSAqLworI2RlZmluZSAgUENJX0FSSV9DVFJMX0FDUwkweDAwMDIJLyogQUNTIEZ1bmN0aW9uIEdyb3VwcyBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9BUklfQ1RSTF9GRyh4KQkoKCh4KSA+PiA0KSAmIDcpIC8qIEZ1bmN0aW9uIEdyb3VwICovCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfUkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BucC5oIGIvaW5jbHVkZS9saW51eC9wbnAuaAppbmRleCA1M2I3MGZkLi5jYTNjODg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BucC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG5wLmgKQEAgLTQ4NSwxNCArNDg1LDQgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KIAotI2RlZmluZSBwbnBfZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgInBucDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgcG5wX2luZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gInBucDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgcG5wX3dhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgInBucDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLQotI2lmZGVmIENPTkZJR19QTlBfREVCVUcKLSNkZWZpbmUgcG5wX2RiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgInBucDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHBucF9kYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KICNlbmRpZiAvKiBfTElOVVhfUE5QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9sbC5oIGIvaW5jbHVkZS9saW51eC9wb2xsLmgKaW5kZXggZWY0NTM4Mi4uYmFkZDk4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb2xsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb2xsLmgKQEAgLTExNCwxMSArMTE0LDEzIEBACiAKICNkZWZpbmUgTUFYX0lOVDY0X1NFQ09ORFMgKCgoczY0KSh+KCh1NjQpMCk+PjEpL0haKS0xKQogCi1leHRlcm4gaW50IGRvX3NlbGVjdChpbnQgbiwgZmRfc2V0X2JpdHMgKmZkcywgczY0ICp0aW1lb3V0KTsKK2V4dGVybiBpbnQgZG9fc2VsZWN0KGludCBuLCBmZF9zZXRfYml0cyAqZmRzLCBzdHJ1Y3QgdGltZXNwZWMgKmVuZF90aW1lKTsKIGV4dGVybiBpbnQgZG9fc3lzX3BvbGwoc3RydWN0IHBvbGxmZCBfX3VzZXIgKiB1ZmRzLCB1bnNpZ25lZCBpbnQgbmZkcywKLQkJICAgICAgIHM2NCAqdGltZW91dCk7CisJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKmVuZF90aW1lKTsKIGV4dGVybiBpbnQgY29yZV9zeXNfc2VsZWN0KGludCBuLCBmZF9zZXQgX191c2VyICppbnAsIGZkX3NldCBfX3VzZXIgKm91dHAsCi0JCQkgICBmZF9zZXQgX191c2VyICpleHAsIHM2NCAqdGltZW91dCk7CisJCQkgICBmZF9zZXQgX191c2VyICpleHAsIHN0cnVjdCB0aW1lc3BlYyAqZW5kX3RpbWUpOworCitleHRlcm4gaW50IHBvbGxfc2VsZWN0X3NldF90aW1lb3V0KHN0cnVjdCB0aW1lc3BlYyAqdG8sIGxvbmcgc2VjLCBsb25nIG5zZWMpOwogCiAjZW5kaWYgLyogS0VSTkVMICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCmluZGV4IGE3ZGQzOGYuLmE3YzcyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaApAQCAtNDUsOCArNDUsNiBAQAogCWludCBpdF9yZXF1ZXVlX3BlbmRpbmc7CQkvKiB3YWl0aW5nIHRvIHJlcXVldWUgdGhpcyB0aW1lciAqLwogI2RlZmluZSBSRVFVRVVFX1BFTkRJTkcgMQogCWludCBpdF9zaWdldl9ub3RpZnk7CQkvKiBub3RpZnkgd29yZCBvZiBzaWdldmVudCBzdHJ1Y3QgKi8KLQlpbnQgaXRfc2lnZXZfc2lnbm87CQkvKiBzaWdubyB3b3JkIG9mIHNpZ2V2ZW50IHN0cnVjdCAqLwotCXNpZ3ZhbF90IGl0X3NpZ2V2X3ZhbHVlOwkvKiB2YWx1ZSB3b3JkIG9mIHNpZ2V2ZW50IHN0cnVjdCAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqaXRfcHJvY2VzczsJLyogcHJvY2VzcyB0byBzZW5kIHNpZ25hbCB0byAqLwogCXN0cnVjdCBzaWdxdWV1ZSAqc2lncTsJCS8qIHNpZ25hbCBxdWV1ZSBlbnRyeS4gKi8KIAl1bmlvbiB7CkBAIC0xMTUsNCArMTEzLDYgQEAKIAogbG9uZyBjbG9ja19uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jayk7CiAKK3ZvaWQgdXBkYXRlX3JsaW1pdF9jcHUodW5zaWduZWQgbG9uZyBybGltX25ldyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaCBiL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKaW5kZXggZWE5NmVhZC4uZjkzNDhjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCkBAIC0xNjUsNiArMTY1LDEyIEBACiBleHRlcm4gdm9pZCBwb3dlcl9zdXBwbHlfY2hhbmdlZChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogZXh0ZXJuIGludCBwb3dlcl9zdXBwbHlfYW1faV9zdXBwbGllZChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogCisjaWYgZGVmaW5lZChDT05GSUdfUE9XRVJfU1VQUExZKSB8fCBkZWZpbmVkKENPTkZJR19QT1dFUl9TVVBQTFlfTU9EVUxFKQorZXh0ZXJuIGludCBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfQorI2VuZGlmCisKIGV4dGVybiBpbnQgcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJCQkgc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKIGV4dGVybiB2b2lkIHBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggNWFkNzkxOS4uNDhkODg3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtNzgsNCArNzgsMTEgQEAKICNkZWZpbmUgUFJfR0VUX1NFQ1VSRUJJVFMgMjcKICNkZWZpbmUgUFJfU0VUX1NFQ1VSRUJJVFMgMjgKIAorLyoKKyAqIEdldC9zZXQgdGhlIHRpbWVyc2xhY2sgYXMgdXNlZCBieSBwb2xsL3NlbGVjdC9uYW5vc2xlZXAKKyAqIEEgdmFsdWUgb2YgMCBtZWFucyAidXNlIGRlZmF1bHQiCisgKi8KKyNkZWZpbmUgUFJfU0VUX1RJTUVSU0xBQ0sgMjkKKyNkZWZpbmUgUFJfR0VUX1RJTUVSU0xBQ0sgMzAKKwogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IDI3ZDUzNGYuLmI4YmRiOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC05NywxMiArOTcsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAotZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2tjb3JlOwotCiBleHRlcm4gc3BpbmxvY2tfdCBwcm9jX3N1YmRpcl9sb2NrOwogCiBleHRlcm4gdm9pZCBwcm9jX3Jvb3RfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHByb2NfbWlzY19pbml0KHZvaWQpOwogCiB2b2lkIHByb2NfZmx1c2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogc3RydWN0IGRlbnRyeSAqcHJvY19waWRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICopOwpAQCAtMTM4LDggKzEzNSw2IEBACiBleHRlcm4gaW50IHByb2NfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqcHJvY19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zOwotCiBleHRlcm4gaW50IHBpZF9uc19wcmVwYXJlX3Byb2Moc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKIGV4dGVybiB2b2lkIHBpZF9uc19yZWxlYXNlX3Byb2Moc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAppbmRleCA1NzAwNDUwLi5hMGZjMzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaApAQCAtMTksMTAgKzE5LDE2IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19QUk9GSUxJTkcpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCiB2b2lkIGNyZWF0ZV9wcm9mX2NwdV9tYXNrKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpOworaW50IGNyZWF0ZV9wcm9jX3Byb2ZpbGUodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9wcm9mX2NwdV9tYXNrKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9wcm9jX3Byb2ZpbGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiBlbnVtIHByb2ZpbGVfdHlwZSB7CkBAIC0zNyw3ICs0Myw2IEBACiAvKiBpbml0IGJhc2ljIGtlcm5lbCBwcm9maWxlciAqLwogaW50IHByb2ZpbGVfaW5pdCh2b2lkKTsKIGludCBwcm9maWxlX3NldHVwKGNoYXIgKnN0cik7Ci1pbnQgY3JlYXRlX3Byb2NfcHJvZmlsZSh2b2lkKTsKIHZvaWQgcHJvZmlsZV90aWNrKGludCB0eXBlKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCmluZGV4IGVhNzQxNmMuLjIyNjQxZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaApAQCAtOTQsNyArOTQsNiBAQAogZXh0ZXJuIHZvaWQgX19wdHJhY2VfbGluayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld19wYXJlbnQpOwogZXh0ZXJuIHZvaWQgX19wdHJhY2VfdW5saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwotZXh0ZXJuIHZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiAjZGVmaW5lIFBUUkFDRV9NT0RFX1JFQUQgICAxCiAjZGVmaW5lIFBUUkFDRV9NT0RFX0FUVEFDSCAyCiAvKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGRlbmlhbC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAppbmRleCAzMTU1MTdlLi5iZGE2YjU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCkBAIC0xNzgsNiArMTc4LDcgQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9maXJzdDsJLyogIG9sZGVzdCBqb3VybmFsIGJsb2NrLiAgc3RhcnQgaGVyZSBmb3IgdHJhdmVyc2UgKi8KIAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmpfZGV2X2JkOworCWZtb2RlX3Qgal9kZXZfbW9kZTsKIAlpbnQgal8xc3RfcmVzZXJ2ZWRfYmxvY2s7CS8qIGZpcnN0IGJsb2NrIG9uIHNfZGV2IG9mIHJlc2VydmVkIGFyZWEgam91cm5hbCAqLwogCiAJdW5zaWduZWQgbG9uZyBqX3N0YXRlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmIwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKQEAgLTAsMCArMSwxMjcgQEAKKyNpZm5kZWYgX0xJTlVYX1JJTkdfQlVGRkVSX0gKKyNkZWZpbmUgX0xJTlVYX1JJTkdfQlVGRkVSX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RydWN0IHJpbmdfYnVmZmVyOworc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXI7CisKKy8qCisgKiBEb24ndCByZWZlcmVuY2UgdGhpcyBzdHJ1Y3QgZGlyZWN0bHksIHVzZSBmdW5jdGlvbnMgYmVsb3cuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCB7CisJdTMyCQl0eXBlOjIsIGxlbjozLCB0aW1lX2RlbHRhOjI3OworCXUzMgkJYXJyYXlbXTsKK307CisKKy8qKgorICogZW51bSByaW5nX2J1ZmZlcl90eXBlIC0gaW50ZXJuYWwgcmluZyBidWZmZXIgdHlwZXMKKyAqCisgKiBAUklOR0JVRl9UWVBFX1BBRERJTkc6CUxlZnQgb3ZlciBwYWdlIHBhZGRpbmcKKyAqCQkJCSBhcnJheSBpcyBpZ25vcmVkCisgKgkJCQkgc2l6ZSBpcyB2YXJpYWJsZSBkZXBlbmRpbmcgb24gaG93IG11Y2gKKyAqCQkJCSAgcGFkZGluZyBpcyBuZWVkZWQKKyAqCisgKiBAUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOglFeHRlbmQgdGhlIHRpbWUgZGVsdGEKKyAqCQkJCSBhcnJheVswXSA9IHRpbWUgZGVsdGEgKDI4IC4uIDU5KQorICoJCQkJIHNpemUgPSA4IGJ5dGVzCisgKgorICogQFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOglTeW5jIHRpbWUgc3RhbXAgd2l0aCBleHRlcm5hbCBjbG9jaworICoJCQkJIGFycmF5WzBdID0gdHZfbnNlYworICoJCQkJIGFycmF5WzFdID0gdHZfc2VjCisgKgkJCQkgc2l6ZSA9IDE2IGJ5dGVzCisgKgorICogQFJJTkdCVUZfVFlQRV9EQVRBOgkJRGF0YSByZWNvcmQKKyAqCQkJCSBJZiBsZW4gaXMgemVybzoKKyAqCQkJCSAgYXJyYXlbMF0gaG9sZHMgdGhlIGFjdHVhbCBsZW5ndGgKKyAqCQkJCSAgYXJyYXlbMS4uKGxlbmd0aCszKS80LTFdIGhvbGRzIGRhdGEKKyAqCQkJCSBlbHNlCisgKgkJCQkgIGxlbmd0aCA9IGxlbiA8PCAyCisgKgkJCQkgIGFycmF5WzAuLihsZW5ndGgrMykvNF0gaG9sZHMgZGF0YQorICovCitlbnVtIHJpbmdfYnVmZmVyX3R5cGUgeworCVJJTkdCVUZfVFlQRV9QQURESU5HLAorCVJJTkdCVUZfVFlQRV9USU1FX0VYVEVORCwKKwkvKiBGSVhNRTogUklOR0JVRl9UWVBFX1RJTUVfU1RBTVAgbm90IGltcGxlbWVudGVkICovCisJUklOR0JVRl9UWVBFX1RJTUVfU1RBTVAsCisJUklOR0JVRl9UWVBFX0RBVEEsCit9OworCit1bnNpZ25lZCByaW5nX2J1ZmZlcl9ldmVudF9sZW5ndGgoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCk7Cit2b2lkICpyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpOworCisvKioKKyAqIHJpbmdfYnVmZmVyX2V2ZW50X3RpbWVfZGVsdGEgLSByZXR1cm4gdGhlIGRlbHRhIHRpbWVzdGFtcCBvZiB0aGUgZXZlbnQKKyAqIEBldmVudDogdGhlIGV2ZW50IHRvIGdldCB0aGUgZGVsdGEgdGltZXN0YW1wIG9mCisgKgorICogVGhlIGRlbHRhIHRpbWVzdGFtcCBpcyB0aGUgMjcgYml0IHRpbWVzdGFtcCBzaW5jZSB0aGUgbGFzdCBldmVudC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZAorcmluZ19idWZmZXJfZXZlbnRfdGltZV9kZWx0YShzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+dGltZV9kZWx0YTsKK30KKworLyoKKyAqIHNpemUgaXMgaW4gYnl0ZXMgZm9yIGVhY2ggcGVyIENQVSBidWZmZXIuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlciAqCityaW5nX2J1ZmZlcl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQgcmluZ19idWZmZXJfZnJlZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7CisKK2ludCByaW5nX2J1ZmZlcl9yZXNpemUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkgdW5zaWduZWQgbG9uZyBsZW5ndGgsCisJCQkgdW5zaWduZWQgbG9uZyAqZmxhZ3MpOworaW50IHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitpbnQgcmluZ19idWZmZXJfd3JpdGUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCB2b2lkICpkYXRhKTsKKworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX3BlZWsoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIHU2NCAqdHMpOworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX2NvbnN1bWUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIHU2NCAqdHMpOworCitzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqCityaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKK3ZvaWQgcmluZ19idWZmZXJfcmVhZF9maW5pc2goc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpOworCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgorcmluZ19idWZmZXJfaXRlcl9wZWVrKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLCB1NjQgKnRzKTsKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9yZWFkKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLCB1NjQgKnRzKTsKK3ZvaWQgcmluZ19idWZmZXJfaXRlcl9yZXNldChzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcik7CitpbnQgcmluZ19idWZmZXJfaXRlcl9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcik7CisKK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfc2l6ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7CisKK3ZvaWQgcmluZ19idWZmZXJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKK3ZvaWQgcmluZ19idWZmZXJfcmVzZXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpOworCitpbnQgcmluZ19idWZmZXJfc3dhcF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXJfYSwKKwkJCSBzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcl9iLCBpbnQgY3B1KTsKKworaW50IHJpbmdfYnVmZmVyX2VtcHR5KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKK2ludCByaW5nX2J1ZmZlcl9lbXB0eV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOworCit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9kaXNhYmxlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKK3ZvaWQgcmluZ19idWZmZXJfcmVjb3JkX2VuYWJsZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7Cit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9kaXNhYmxlX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7Cit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKKwordW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9lbnRyaWVzKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bnMoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpOworCit1NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChpbnQgY3B1KTsKK3ZvaWQgcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoaW50IGNwdSwgdTY0ICp0cyk7CisKK2VudW0gcmluZ19idWZmZXJfZmxhZ3MgeworCVJCX0ZMX09WRVJXUklURQkJPSAxIDw8IDAsCit9OworCisjZW5kaWYgLyogX0xJTlVYX1JJTkdfQlVGRkVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggZmVkNmY1ZS4uODlmMDU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTM5LDE4ICszOSw2IEBACiAKICNpZmRlZiBDT05GSUdfTU1VCiAKLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2FjaGVwOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWFfYWxsb2Modm9pZCkKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhhbm9uX3ZtYV9jYWNoZXAsIEdGUF9LRVJORUwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQotewotCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jYWNoZXAsIGFub25fdm1hKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CkBAIC03NSw2ICs2Myw5IEBACiB2b2lkIGFub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogdm9pZCBfX2Fub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCitleHRlcm4gc3RydWN0IGFub25fdm1hICpwYWdlX2xvY2tfYW5vbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSk7CisKIC8qCiAgKiBybWFwIGludGVyZmFjZXMgY2FsbGVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHB0ZSBvZiBwYWdlCiAgKi8KQEAgLTExNyw2ICsxMDgsMTkgQEAKICAqLwogaW50IHBhZ2VfbWtjbGVhbihzdHJ1Y3QgcGFnZSAqKTsKIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qCisgKiBjYWxsZWQgaW4gbXVubG9jaygpL211bm1hcCgpIHBhdGggdG8gY2hlY2sgZm9yIG90aGVyIHZtYXMgaG9sZGluZworICogdGhlIHBhZ2UgbWxvY2tlZC4KKyAqLworaW50IHRyeV90b19tdW5sb2NrKHN0cnVjdCBwYWdlICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHRyeV90b19tdW5sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAwOwkvKiBhLmsuYS4gU1dBUF9TVUNDRVNTICovCit9CisjZW5kaWYKKwogI2Vsc2UJLyogIUNPTkZJR19NTVUgKi8KIAogI2RlZmluZSBhbm9uX3ZtYV9pbml0KCkJCWRvIHt9IHdoaWxlICgwKQpAQCAtMTQwLDUgKzE0NCw2IEBACiAjZGVmaW5lIFNXQVBfU1VDQ0VTUwkwCiAjZGVmaW5lIFNXQVBfQUdBSU4JMQogI2RlZmluZSBTV0FQX0ZBSUwJMgorI2RlZmluZSBTV0FQX01MT0NLCTMKIAogI2VuZGlmCS8qIF9MSU5VWF9STUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBjMDViNDVmLi5iNDgzZjM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC00MDIsMTIgKzQwMiwyMSBAQAogI2RlZmluZSBNTUZfRFVNUF9NQVBQRURfUFJJVkFURQk0CiAjZGVmaW5lIE1NRl9EVU1QX01BUFBFRF9TSEFSRUQJNQogI2RlZmluZSBNTUZfRFVNUF9FTEZfSEVBREVSUwk2CisjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSA3CisjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfU0hBUkVEICA4CiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVAlNTUZfRFVNUEFCTEVfQklUUwotI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk1CisjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTcKICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX01BU0sgXAogCSgoKDEgPDwgTU1GX0RVTVBfRklMVEVSX0JJVFMpIC0gMSkgPDwgTU1GX0RVTVBfRklMVEVSX1NISUZUKQogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfREVGQVVMVCBcCi0JKCgxIDw8IE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfAkoMSA8PCBNTUZfRFVNUF9BTk9OX1NIQVJFRCkpCisJKCgxIDw8IE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfAkoMSA8PCBNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfFwKKwkgKDEgPDwgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYpCisKKyNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMKKyMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYJKDEgPDwgTU1GX0RVTVBfRUxGX0hFQURFUlMpCisjZWxzZQorIyBkZWZpbmUgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRgkwCisjZW5kaWYKIAogc3RydWN0IHNpZ2hhbmRfc3RydWN0IHsKIAlhdG9taWNfdAkJY291bnQ7CkBAIC00MjQsNiArNDMzLDM5IEBACiAJdW5zaWduZWQgbG9uZwkJYWNfbWluZmx0LCBhY19tYWpmbHQ7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0YXNrX2NwdXRpbWUgLSBjb2xsZWN0ZWQgQ1BVIHRpbWUgY291bnRzCisgKiBAdXRpbWU6CQl0aW1lIHNwZW50IGluIHVzZXIgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cworICogQHN0aW1lOgkJdGltZSBzcGVudCBpbiBrZXJuZWwgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cworICogQHN1bV9leGVjX3J1bnRpbWU6CXRvdGFsIHRpbWUgc3BlbnQgb24gdGhlIENQVSwgaW4gbmFub3NlY29uZHMKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBncm91cHMgdG9nZXRoZXIgdGhyZWUga2luZHMgb2YgQ1BVIHRpbWUgdGhhdCBhcmUKKyAqIHRyYWNrZWQgZm9yIHRocmVhZHMgYW5kIHRocmVhZCBncm91cHMuICBNb3N0IHRoaW5ncyBjb25zaWRlcmluZworICogQ1BVIHRpbWUgd2FudCB0byBncm91cCB0aGVzZSBjb3VudHMgdG9nZXRoZXIgYW5kIHRyZWF0IGFsbCB0aHJlZQorICogb2YgdGhlbSBpbiBwYXJhbGxlbC4KKyAqLworc3RydWN0IHRhc2tfY3B1dGltZSB7CisJY3B1dGltZV90IHV0aW1lOworCWNwdXRpbWVfdCBzdGltZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX2V4ZWNfcnVudGltZTsKK307CisvKiBBbHRlcm5hdGUgZmllbGQgbmFtZXMgd2hlbiB1c2VkIHRvIGNhY2hlIGV4cGlyYXRpb25zLiAqLworI2RlZmluZSBwcm9mX2V4cAlzdGltZQorI2RlZmluZSB2aXJ0X2V4cAl1dGltZQorI2RlZmluZSBzY2hlZF9leHAJc3VtX2V4ZWNfcnVudGltZQorCisvKioKKyAqIHN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZSAtIHRocmVhZCBncm91cCBpbnRlcnZhbCB0aW1lciBjb3VudHMKKyAqIEB0b3RhbHM6CQl0aHJlYWQgZ3JvdXAgaW50ZXJ2YWwgdGltZXJzOyBzdWJzdHJ1Y3R1cmUgZm9yCisgKgkJCXVuaXByb2Nlc3NvciBrZXJuZWwsIHBlci1jcHUgZm9yIFNNUCBrZXJuZWwuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHZlcnNpb24gb2YgdGFza19jcHV0aW1lLCBhYm92ZSwgdGhhdCBpcworICogdXNlZCBmb3IgdGhyZWFkIGdyb3VwIENQVSBjbG9jayBjYWxjdWxhdGlvbnMuCisgKi8KK3N0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZSB7CisJc3RydWN0IHRhc2tfY3B1dGltZSAqdG90YWxzOworfTsKKwogLyoKICAqIE5PVEUhICJzaWduYWxfc3RydWN0IiBkb2VzIG5vdCBoYXZlIGl0J3Mgb3duCiAgKiBsb2NraW5nLCBiZWNhdXNlIGEgc2hhcmVkIHNpZ25hbF9zdHJ1Y3QgYWx3YXlzCkBAIC00NjksNiArNTExLDE3IEBACiAJY3B1dGltZV90IGl0X3Byb2ZfZXhwaXJlcywgaXRfdmlydF9leHBpcmVzOwogCWNwdXRpbWVfdCBpdF9wcm9mX2luY3IsIGl0X3ZpcnRfaW5jcjsKIAorCS8qCisJICogVGhyZWFkIGdyb3VwIHRvdGFscyBmb3IgcHJvY2VzcyBDUFUgY2xvY2tzLgorCSAqIFNlZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSgpLCBldCBhbCwgZm9yIGRldGFpbHMuCisJICovCisJc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lIGNwdXRpbWU7CisKKwkvKiBFYXJsaWVzdC1leHBpcmF0aW9uIGNhY2hlLiAqLworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZV9leHBpcmVzOworCisJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOworCiAJLyogam9iIGNvbnRyb2wgSURzICovCiAKIAkvKgpAQCAtNDk5LDcgKzU1Miw3IEBACiAJICogTGl2ZSB0aHJlYWRzIG1haW50YWluIHRoZWlyIG93biBjb3VudGVycyBhbmQgYWRkIHRvIHRoZXNlCiAJICogaW4gX19leGl0X3NpZ25hbCwgZXhjZXB0IGZvciB0aGUgZ3JvdXAgbGVhZGVyLgogCSAqLwotCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lOworCWNwdXRpbWVfdCBjdXRpbWUsIGNzdGltZTsKIAljcHV0aW1lX3QgZ3RpbWU7CiAJY3B1dGltZV90IGNndGltZTsKIAl1bnNpZ25lZCBsb25nIG52Y3N3LCBuaXZjc3csIGNudmNzdywgY25pdmNzdzsKQEAgLTUwOCwxNCArNTYxLDYgQEAKIAlzdHJ1Y3QgdGFza19pb19hY2NvdW50aW5nIGlvYWM7CiAKIAkvKgotCSAqIEN1bXVsYXRpdmUgbnMgb2Ygc2NoZWR1bGVkIENQVSB0aW1lIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlCi0JICogZ3JvdXAsIG5vdCBpbmNsdWRpbmcgYSB6b21iaWUgZ3JvdXAgbGVhZGVyLiAgKFRoaXMgb25seSBkaWZmZXJzCi0JICogZnJvbSBqaWZmaWVzX3RvX25zKHV0aW1lICsgc3RpbWUpIGlmIHNjaGVkX2Nsb2NrIHVzZXMgc29tZXRoaW5nCi0JICogb3RoZXIgdGhhbiBqaWZmaWVzLikKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX3NjaGVkX3J1bnRpbWU7Ci0KLQkvKgogCSAqIFdlIGRvbid0IGJvdGhlciB0byBzeW5jaHJvbml6ZSBtb3N0IHJlYWRlcnMgb2YgdGhpcyBhdCBhbGwsCiAJICogYmVjYXVzZSB0aGVyZSBpcyBubyByZWFkZXIgY2hlY2tpbmcgYSBsaW1pdCB0aGF0IGFjdHVhbGx5IG5lZWRzCiAJICogdG8gZ2V0IGJvdGggcmxpbV9jdXIgYW5kIHJsaW1fbWF4IGF0b21pY2FsbHksIGFuZCBlaXRoZXIgb25lCkBAIC01MjYsOCArNTcxLDYgQEAKIAkgKi8KIAlzdHJ1Y3QgcmxpbWl0IHJsaW1bUkxJTV9OTElNSVRTXTsKIAotCXN0cnVjdCBsaXN0X2hlYWQgY3B1X3RpbWVyc1szXTsKLQogCS8qIGtlZXAgdGhlIHByb2Nlc3Mtc2hhcmVkIGtleXJpbmdzIGhlcmUgc28gdGhhdCB0aGV5IGRvIHRoZSByaWdodAogCSAqIHRoaW5nIGluIHRocmVhZHMgY3JlYXRlZCB3aXRoIENMT05FX1RIUkVBRCAqLwogI2lmZGVmIENPTkZJR19LRVlTCkBAIC02MzcsMTAgKzY4MCw2IEBACiB9OwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1NDSEVEU1RBVFMpIHx8IGRlZmluZWQoQ09ORklHX1RBU0tfREVMQVlfQUNDVCkgKi8KIAotI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3NjaGVkc3RhdF9vcGVyYXRpb25zOwotI2VuZGlmIC8qIENPTkZJR19TQ0hFRFNUQVRTICovCi0KICNpZmRlZiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUCiBzdHJ1Y3QgdGFza19kZWxheV9pbmZvIHsKIAlzcGlubG9ja190CWxvY2s7CkBAIC0xMTM4LDggKzExNzcsNyBAQAogLyogbW0gZmF1bHQgYW5kIHN3YXAgaW5mbzogdGhpcyBjYW4gYXJndWFibHkgYmUgc2VlbiBhcyBlaXRoZXIgbW0tc3BlY2lmaWMgb3IgdGhyZWFkLXNwZWNpZmljICovCiAJdW5zaWduZWQgbG9uZyBtaW5fZmx0LCBtYWpfZmx0OwogCi0gIAljcHV0aW1lX3QgaXRfcHJvZl9leHBpcmVzLCBpdF92aXJ0X2V4cGlyZXM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGl0X3NjaGVkX2V4cGlyZXM7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lX2V4cGlyZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOwogCiAvKiBwcm9jZXNzIGNyZWRlbnRpYWxzICovCkBAIC0xMzA1LDYgKzEzNDMsMTIgQEAKIAlpbnQgbGF0ZW5jeV9yZWNvcmRfY291bnQ7CiAJc3RydWN0IGxhdGVuY3lfcmVjb3JkIGxhdGVuY3lfcmVjb3JkW0xUX1NBVkVDT1VOVF07CiAjZW5kaWYKKwkvKgorCSAqIHRpbWUgc2xhY2sgdmFsdWVzOyB0aGVzZSBhcmUgdXNlZCB0byByb3VuZCB1cCBwb2xsKCkgYW5kCisJICogc2VsZWN0KCkgZXRjIHRpbWVvdXQgdmFsdWVzLiBUaGVzZSBhcmUgaW4gbmFub3NlY29uZHMuCisJICovCisJdW5zaWduZWQgbG9uZyB0aW1lcl9zbGFja19uczsKKwl1bnNpZ25lZCBsb25nIGRlZmF1bHRfdGltZXJfc2xhY2tfbnM7CiB9OwogCiAvKgpAQCAtMTU4OSw2ICsxNjMzLDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZwogdGFza19zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHRocmVhZF9ncm91cF9zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKIC8qIHNjaGVkX2V4ZWMgaXMgY2FsbGVkIGJ5IHByb2Nlc3NlcyBwZXJmb3JtaW5nIGFuIGV4ZWMgKi8KICNpZmRlZiBDT05GSUdfU01QCkBAIC0yMDg3LDYgKzIxMzIsMzAgQEAKIH0KIAogLyoKKyAqIFRocmVhZCBncm91cCBDUFUgdGltZSBhY2NvdW50aW5nLgorICovCisKK2V4dGVybiBpbnQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCB0YXNrX2NwdXRpbWUgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aHJlYWRfZ3JvdXBfY3B1dGltZV9pbml0KHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCit7CisJc2lnLT5jcHV0aW1lLnRvdGFscyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRocmVhZF9ncm91cF9jcHV0aW1lX2Nsb25lX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCit7CisJaWYgKGN1cnItPnNpZ25hbC0+Y3B1dGltZS50b3RhbHMpCisJCXJldHVybiAwOworCXJldHVybiB0aHJlYWRfZ3JvdXBfY3B1dGltZV9hbGxvYyhjdXJyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRocmVhZF9ncm91cF9jcHV0aW1lX2ZyZWUoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKK3sKKwlmcmVlX3BlcmNwdShzaWctPmNwdXRpbWUudG90YWxzKTsKK30KKworLyoKICAqIFJlZXZhbHVhdGUgd2hldGhlciB0aGUgdGFzayBoYXMgc2lnbmFscyBwZW5kaW5nIGRlbGl2ZXJ5LgogICogV2FrZSB0aGUgdGFzayBpZiBzby4KICAqIFRoaXMgaXMgcmVxdWlyZWQgZXZlcnkgdGltZSB0aGUgYmxvY2tlZCBzaWdzZXRfdCBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCmluZGV4IGExNzgzYjIuLmRjNTBiY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKQEAgLTYwLDYgKzYwLDE5IEBACiAJcmV0dXJuIHNlcV9iaXRtYXAobSwgbWFzay0+Yml0cywgTUFYX05VTU5PREVTKTsKIH0KIAoraW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgKmJpdHMsCisJCXVuc2lnbmVkIGludCBucl9iaXRzKTsKKworc3RhdGljIGlubGluZSBpbnQgc2VxX2NwdW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNwdW1hc2tfdCAqbWFzaykKK3sKKwlyZXR1cm4gc2VxX2JpdG1hcF9saXN0KG0sIG1hc2stPmJpdHMsIE5SX0NQVVMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZXFfbm9kZW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIG5vZGVtYXNrX3QgKm1hc2spCit7CisJcmV0dXJuIHNlcV9iaXRtYXBfbGlzdChtLCBtYXNrLT5iaXRzLCBNQVhfTlVNTk9ERVMpOworfQorCiBpbnQgc2luZ2xlX29wZW4oc3RydWN0IGZpbGUgKiwgaW50ICgqKShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKSwgdm9pZCAqKTsKIGludCBzaW5nbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiB2b2lkICpfX3NlcV9vcGVuX3ByaXZhdGUoc3RydWN0IGZpbGUgKiwgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaCBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTIxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtMCwwICsxLDkxIEBACisjaWZuZGVmIF9fU0hfSU5UQ19ICisjZGVmaW5lIF9fU0hfSU5UQ19ICisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBpbnRjX2VudW07CisKK3N0cnVjdCBpbnRjX3ZlY3QgeworCWludGNfZW51bSBlbnVtX2lkOworCXVuc2lnbmVkIHNob3J0IHZlY3Q7Cit9OworCisjZGVmaW5lIElOVENfVkVDVChlbnVtX2lkLCB2ZWN0KSB7IGVudW1faWQsIHZlY3QgfQorI2RlZmluZSBJTlRDX0lSUShlbnVtX2lkLCBpcnEpIElOVENfVkVDVChlbnVtX2lkLCBpcnEyZXZ0KGlycSkpCisKK3N0cnVjdCBpbnRjX2dyb3VwIHsKKwlpbnRjX2VudW0gZW51bV9pZDsKKwlpbnRjX2VudW0gZW51bV9pZHNbMzJdOworfTsKKworI2RlZmluZSBJTlRDX0dST1VQKGVudW1faWQsIGlkcy4uLikgeyBlbnVtX2lkLCB7IGlkcyB9IH0KKworc3RydWN0IGludGNfbWFza19yZWcgeworCXVuc2lnbmVkIGxvbmcgc2V0X3JlZywgY2xyX3JlZywgcmVnX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1szMl07CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgc21wOworI2VuZGlmCit9OworCitzdHJ1Y3QgaW50Y19wcmlvX3JlZyB7CisJdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1sxNl07CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgc21wOworI2VuZGlmCit9OworCitzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgeworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1sxNl07Cit9OworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKSAuc21wID0gKHN0cmlkZSkgfCAoKG5yKSA8PCA4KQorI2Vsc2UKKyNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikKKyNlbmRpZgorCitzdHJ1Y3QgaW50Y19kZXNjIHsKKwlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOworCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOworCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7CisJdW5zaWduZWQgaW50IG5yX2dyb3VwczsKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbWFza19yZWdzOworCXVuc2lnbmVkIGludCBucl9tYXNrX3JlZ3M7CisJc3RydWN0IGludGNfcHJpb19yZWcgKnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOworCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKKwljaGFyICpuYW1lOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7CisjZW5kaWYKK307CisKKyNkZWZpbmUgX0lOVENfQVJSQVkoYSkgYSwgc2l6ZW9mKGEpL3NpemVvZigqYSkKKyNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0Moc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAkJXAorCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzKQkJCQlcCitzdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAorCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKKwlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKKwlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKKwljaGlwbmFtZSwJCQkJCQkJXAorfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCVwKKwltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpCQkJXAorc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKKwlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCisJX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCisJX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCisJY2hpcG5hbWUsCQkJCQkJCVwKKwlfSU5UQ19BUlJBWShhY2tfcmVncyksCQkJCQkJXAorfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKK2ludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7CisKKyNlbmRpZiAvKiBfX1NIX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCA1ZmY5Njc2Li5iYTk2NWM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtMjg4LDkgKzI4OCw0IEBACiAJcmV0dXJuIGttYWxsb2Nfbm9kZShzaXplLCBmbGFncyB8IF9fR0ZQX1pFUk8sIG5vZGUpOwogfQogCi0jaWZkZWYgQ09ORklHX1NMQUJJTkZPCi1leHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNsYWJpbmZvX29wOwotc3NpemVfdCBzbGFiaW5mb193cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLSNlbmRpZgotCiAjZW5kaWYJLyogX0xJTlVYX1NMQUJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbWM5MTF4LmggYi9pbmNsdWRlL2xpbnV4L3NtYzkxMXguaAppbmRleCBiNThmNTRjLi41MjFmMzcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtYzkxMXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYzkxMXguaApAQCAtNyw2ICs3LDcgQEAKIHN0cnVjdCBzbWM5MTF4X3BsYXRkYXRhIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOyAvKiBJUlFGXy4uLiAqLworCWludCBpcnFfcG9sYXJpdHk7CiB9OwogCiAjZW5kaWYgLyogX19TTUM5MTFYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggNjY0ODRkNC4uMmU0ZDU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIApAQCAtMTYsNyArMTcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pOwogCXZvaWQgKmluZm87Ci0JdW5zaWduZWQgaW50IGZsYWdzOworCXUxNiBmbGFnczsKKwl1MTYgcHJpdjsKIH07CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YWIuaCBiL2luY2x1ZGUvbGludXgvc3dhYi5oCmluZGV4IDI3MGQ1YzIwLi5iYmVkMjc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YWIuaApAQCAtNDcsOCArNDcsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FiMTYKIAlyZXR1cm4gX19hcmNoX3N3YWIxNih2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhYjE2cCkKLQlyZXR1cm4gX19hcmNoX3N3YWIxNnAoJnZhbCk7CiAjZWxzZQogCXJldHVybiBfX2NvbnN0X3N3YWIxNih2YWwpOwogI2VuZGlmCkBAIC01OCw4ICs1Niw2IEBACiB7CiAjaWZkZWYgX19hcmNoX3N3YWIzMgogCXJldHVybiBfX2FyY2hfc3dhYjMyKHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FiMzJwKQotCXJldHVybiBfX2FyY2hfc3dhYjMycCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhYjMyKHZhbCk7CiAjZW5kaWYKQEAgLTY5LDggKzY1LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhYjY0CiAJcmV0dXJuIF9fYXJjaF9zd2FiNjQodmFsKTsKLSNlbGlmIGRlZmluZWQoX19hcmNoX3N3YWI2NHApCi0JcmV0dXJuIF9fYXJjaF9zd2FiNjRwKCZ2YWwpOwogI2VsaWYgZGVmaW5lZChfX1NXQUJfNjRfVEhSVV8zMl9fKQogCV9fdTMyIGggPSB2YWwgPj4gMzI7CiAJX191MzIgbCA9IHZhbCAmICgoMVVMTCA8PCAzMikgLSAxKTsKQEAgLTg0LDggKzc4LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhaHczMgogCXJldHVybiBfX2FyY2hfc3dhaHczMih2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhaHczMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FodzMycCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhaHczMih2YWwpOwogI2VuZGlmCkBAIC05NSw4ICs4Nyw2IEBACiB7CiAjaWZkZWYgX19hcmNoX3N3YWhiMzIKIAlyZXR1cm4gX19hcmNoX3N3YWhiMzIodmFsKTsKLSNlbGlmIGRlZmluZWQoX19hcmNoX3N3YWhiMzJwKQotCXJldHVybiBfX2FyY2hfc3dhaGIzMnAoJnZhbCk7CiAjZWxzZQogCXJldHVybiBfX2NvbnN0X3N3YWhiMzIodmFsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBkZTQwZjE2OWEuLmEzYWY5NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTE3MSw4ICsxNzIsMTAgQEAKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLWV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGQoc3RydWN0IHBhZ2UgKik7Ci1leHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiB2b2lkIF9fbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqLCBlbnVtIGxydV9saXN0IGxydSk7CitleHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkX2xydShzdHJ1Y3QgcGFnZSAqLCBlbnVtIGxydV9saXN0IGxydSk7CitleHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqLAorCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBhY3RpdmF0ZV9wYWdlKHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIHZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTsKQEAgLTE4MCwxMiArMTgzLDM4IEBACiBleHRlcm4gdm9pZCByb3RhdGVfcmVjbGFpbWFibGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwogCitleHRlcm4gdm9pZCBhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlKTsKKworLyoqCisgKiBscnVfY2FjaGVfYWRkOiBhZGQgYSBwYWdlIHRvIHRoZSBwYWdlIGxpc3RzCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gYWRkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfYWRkX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9JTkFDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9BQ1RJVkVfQU5PTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfYWRkX2ZpbGUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9JTkFDVElWRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX2ZpbGUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9BQ1RJVkVfRklMRSk7Cit9CisKIC8qIGxpbnV4L21tL3Ztc2Nhbi5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCiAJCQkJCWdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCQlnZnBfdCBnZnBfbWFzayk7Ci1leHRlcm4gaW50IF9faXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1vZGUpOworZXh0ZXJuIGludCBfX2lzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtb2RlLCBpbnQgZmlsZSk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIGV4dGVybiBpbnQgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpwYWdlKTsKQEAgLTIwNCw2ICsyMzMsMzQgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorZXh0ZXJuIGludCBwYWdlX2V2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworZXh0ZXJuIHZvaWQgc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzOworZXh0ZXJuIGludCBzY2FuX3VuZXZpY3RhYmxlX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCisJCQkJCXZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHNjYW5fdW5ldmljdGFibGVfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CitleHRlcm4gdm9pZCBzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGFnZV9ldmljdGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNjYW5fbWFwcGluZ191bmV2aWN0YWJsZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2Nhbl91bmV2aWN0YWJsZV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpIHsgfQorI2VuZGlmCisKIGV4dGVybiBpbnQga3N3YXBkX3J1bihpbnQgbmlkKTsKIAogI2lmZGVmIENPTkZJR19NTVUKQEAgLTI1MSw2ICszMDgsNyBAQAogZXh0ZXJuIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9pbmZvX3N0cnVjdCh1bnNpZ25lZCk7CiBleHRlcm4gaW50IGNhbl9zaGFyZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICopOworZXh0ZXJuIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYoc3RydWN0IHBhZ2UgKik7CiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbzsKIAogLyogbGludXgvbW0vdGhyYXNoLmMgKi8KQEAgLTMzOSw2ICszOTcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfcmVmKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IGdldF9zd2FwX3BhZ2Uodm9pZCkKIHsKIAlzd3BfZW50cnlfdCBlbnRyeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvc3lzZnMuaAppbmRleCBiMzMwZTI4Li45ZDY4ZmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCkBAIC0yMSw4ICsyMSw5IEBACiBzdHJ1Y3QgbW9kdWxlOwogCiAvKiBGSVhNRQotICogVGhlICpvd25lciBmaWVsZCBpcyBubyBsb25nZXIgdXNlZCwgYnV0IGxlYXZlIGFyb3VuZAotICogdW50aWwgdGhlIHRyZWUgZ2V0cyBjbGVhbmVkIHVwIGZ1bGx5LgorICogVGhlICpvd25lciBmaWVsZCBpcyBubyBsb25nZXIgdXNlZC4KKyAqIHg4NiB0cmVlIGhhcyBiZWVuIGNsZWFuZWQgdXAuIFRoZSBvd25lcgorICogYXR0cmlidXRlIGlzIHN0aWxsIGxlZnQgZm9yIG90aGVyIGFyY2hlcy4KICAqLwogc3RydWN0IGF0dHJpYnV0ZSB7CiAJY29uc3QgY2hhcgkJKm5hbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgKaW5kZXggMzhhNTY0Ny4uZTZiODIwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaApAQCAtMzgsNiArMzgsMTQgQEAKICNlbmRpZgogCQkJdTY0IGV4cGlyZXM7CiAJCX0gbmFub3NsZWVwOworCQkvKiBGb3IgcG9sbCAqLworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHBvbGxmZCBfX3VzZXIgKnVmZHM7CisJCQlpbnQgbmZkczsKKwkJCWludCBoYXNfdGltZW91dDsKKwkJCXVuc2lnbmVkIGxvbmcgdHZfc2VjOworCQkJdW5zaWduZWQgbG9uZyB0dl9uc2VjOworCQl9IHBvbGw7CiAJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGljay5oIGIvaW5jbHVkZS9saW51eC90aWNrLmgKaW5kZXggOTg5MjFhMy4uYjZlYzgxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC90aWNrLmgKQEAgLTk2LDkgKzk2LDExIEBACiBleHRlcm4gdm9pZCB0aWNrX2Nsb2NrX25vdGlmeSh2b2lkKTsKIGV4dGVybiBpbnQgdGlja19jaGVja19vbmVzaG90X2NoYW5nZShpbnQgYWxsb3dfbm9oeik7CiBleHRlcm4gc3RydWN0IHRpY2tfc2NoZWQgKnRpY2tfZ2V0X3RpY2tfc2NoZWQoaW50IGNwdSk7CitleHRlcm4gdm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSk7CiAjIGVsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Nsb2NrX25vdGlmeSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSkgeyB9CiAjIGVuZGlmCiAKICNlbHNlIC8qIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCkBAIC0xMDYsMjYgKzEwOCwyMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2FuY2VsX3NjaGVkX3RpbWVyKGludCBjcHUpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2xvY2tfbm90aWZ5KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSBpbnQgdGlja19jaGVja19vbmVzaG90X2NoYW5nZShpbnQgYWxsb3dfbm9oeikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2hlY2tfaWRsZShpbnQgY3B1KSB7IH0KICNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgKi8KIAogIyBpZmRlZiBDT05GSUdfTk9fSFoKIGV4dGVybiB2b2lkIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soaW50IGluaWRsZSk7CiBleHRlcm4gdm9pZCB0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKHZvaWQpOwotZXh0ZXJuIHZvaWQgdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKHZvaWQpOwogZXh0ZXJuIGt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgodm9pZCk7Ci1leHRlcm4gdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpOwogZXh0ZXJuIHU2NCBnZXRfY3B1X2lkbGVfdGltZV91cyhpbnQgY3B1LCB1NjQgKmxhc3RfdXBkYXRlX3RpbWUpOwogIyBlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljayhpbnQgaW5pZGxlKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel91cGRhdGVfamlmZmllcyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUga3RpbWVfdCB0aWNrX25vaHpfZ2V0X3NsZWVwX2xlbmd0aCh2b2lkKQogewogCWt0aW1lX3QgbGVuID0geyAudHY2NCA9IE5TRUNfUEVSX1NFQy9IWiB9OwogCiAJcmV0dXJuIGxlbjsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpIHsgfQogc3RhdGljIGlubGluZSB1NjQgZ2V0X2NwdV9pZGxlX3RpbWVfdXMoaW50IGNwdSwgdTY0ICp1bnVzZWQpIHsgcmV0dXJuIC0xOyB9CiAjIGVuZGlmIC8qICFOT19IWiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IDUxZTg4M2QuLmNlMzIxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC00MCw2ICs0MCw4IEBACiAjZGVmaW5lIE5TRUNfUEVSX1NFQwkxMDAwMDAwMDAwTAogI2RlZmluZSBGU0VDX1BFUl9TRUMJMTAwMDAwMDAwMDAwMDAwMEwKIAorI2RlZmluZSBUSU1FX1RfTUFYCSh0aW1lX3QpKCgxVUwgPDwgKChzaXplb2YodGltZV90KSA8PCAzKSAtIDEpKSAtIDEpCisKIHN0YXRpYyBpbmxpbmUgaW50IHRpbWVzcGVjX2VxdWFsKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYikKIHsKQEAgLTc0LDYgKzc2LDggQEAKIAkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKTsKIAogZXh0ZXJuIHZvaWQgc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoc3RydWN0IHRpbWVzcGVjICp0cywgdGltZV90IHNlYywgbG9uZyBuc2VjKTsKK2V4dGVybiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfYWRkX3NhZmUoY29uc3Qgc3RydWN0IHRpbWVzcGVjIGxocywKKwkJCQkJIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyByaHMpOwogCiAvKgogICogc3ViID0gbGhzIC0gcmhzLCBpbiBub3JtYWxpemVkIGZvcm0KQEAgLTExOSw2ICsxMjMsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybV9zZXRpdGltZXIodW5zaWduZWQgaW50IHNlY29uZHMpOwogZXh0ZXJuIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSk7CiBleHRlcm4gdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KTsKK2V4dGVybiB2b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIGV4dGVybiB2b2lkIGdldGJvb3R0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMpOwogZXh0ZXJuIHZvaWQgbW9ub3RvbmljX3RvX2Jvb3RiYXNlZChzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIApAQCAtMTI3LDYgKzEzMiw5IEBACiBleHRlcm4gdm9pZCB1cGRhdGVfd2FsbF90aW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2NhY2hlKHU2NCBuc2VjKTsKIAorc3RydWN0IHRtczsKK2V4dGVybiB2b2lkIGRvX3N5c190aW1lcyhzdHJ1Y3QgdG1zICopOworCiAvKioKICAqIHRpbWVzcGVjX3RvX25zIC0gQ29udmVydCB0aW1lc3BlYyB0byBuYW5vc2Vjb25kcwogICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWMgdmFyaWFibGUgdG8gYmUgY29udmVydGVkCkBAIC0yMTYsNiArMjI0LDcgQEAKICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDCQkJMQogI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQJMgogI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRAkJMworI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXCQk0CiAKIC8qCiAgKiBUaGUgSURzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY2xvY2tzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IGZjNjAzNWQuLjkwMDczMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTgyLDcgKzgyLDcgQEAKICAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KICNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKLSNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAyMAorI2RlZmluZSBQUE1fU0NBTEVfSU5WX1NISUZUIDE5CiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlYgKCgxbGwgPDwgKFBQTV9TQ0FMRV9JTlZfU0hJRlQgKyBOVFBfU0NBTEVfU0hJRlQpKSAvIFwKIAkJICAgICAgIFBQTV9TQ0FMRSArIDEpCiAKQEAgLTE0MSw4ICsxNDEsMTUgQEAKICNkZWZpbmUgQURKX01JQ1JPCQkweDEwMDAJLyogc2VsZWN0IG1pY3Jvc2Vjb25kIHJlc29sdXRpb24gKi8KICNkZWZpbmUgQURKX05BTk8JCTB4MjAwMAkvKiBzZWxlY3QgbmFub3NlY29uZCByZXNvbHV0aW9uICovCiAjZGVmaW5lIEFESl9USUNLCQkweDQwMDAJLyogdGljayB2YWx1ZSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBBREpfQURKVElNRQkJMHg4MDAwCS8qIHN3aXRjaCBiZXR3ZWVuIGFkanRpbWUvYWRqdGltZXggbW9kZXMgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9TSU5HTEVTSE9UCTB4MDAwMQkvKiBvbGQtZmFzaGlvbmVkIGFkanRpbWUgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9SRUFET05MWQkweDIwMDAJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbHNlCiAjZGVmaW5lIEFESl9PRkZTRVRfU0lOR0xFU0hPVAkweDgwMDEJLyogb2xkLWZhc2hpb25lZCBhZGp0aW1lICovCi0jZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEgIC8qIHJlYWQtb25seSBhZGp0aW1lICovCisjZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbmRpZgogCiAvKiB4bnRwIDMuNCBjb21wYXRpYmlsaXR5IG5hbWVzICovCiAjZGVmaW5lIE1PRF9PRkZTRVQJQURKX09GRlNFVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWJiMzljCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKQEAgLTAsMCArMSwxMzcgQEAKKyNpZm5kZWYgX0xJTlVYX1RSQUNFUE9JTlRfSAorI2RlZmluZSBfTElOVVhfVFJBQ0VQT0lOVF9ICisKKy8qCisgKiBLZXJuZWwgVHJhY2Vwb2ludCBBUEkuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdHJhY2Vwb2ludC50eHQuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA4IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgorICoKKyAqIEhlYXZpbHkgaW5zcGlyZWQgZnJvbSB0aGUgTGludXggS2VybmVsIE1hcmtlcnMuCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKworc3RydWN0IG1vZHVsZTsKK3N0cnVjdCB0cmFjZXBvaW50OworCitzdHJ1Y3QgdHJhY2Vwb2ludCB7CisJY29uc3QgY2hhciAqbmFtZTsJCS8qIFRyYWNlcG9pbnQgbmFtZSAqLworCWludCBzdGF0ZTsJCQkvKiBTdGF0ZS4gKi8KKwl2b2lkICoqZnVuY3M7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworCisjZGVmaW5lIFRQUFJPVE8oYXJncy4uLikJYXJncworI2RlZmluZSBUUEFSR1MoYXJncy4uLikJCWFyZ3MKKworI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworCisvKgorICogaXRfZnVuY1swXSBpcyBuZXZlciBOVUxMIGJlY2F1c2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIGFycmF5CisgKiB3aGVuIHRoZSBhcnJheSBpdHNlbGYgaXMgbm9uIE5VTEwuCisgKi8KKyNkZWZpbmUgX19ET19UUkFDRSh0cCwgcHJvdG8sIGFyZ3MpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl2b2lkICoqaXRfZnVuYzsJCQkJCQlcCisJCQkJCQkJCQlcCisJCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsJCQkJCVwKKwkJaXRfZnVuYyA9IHJjdV9kZXJlZmVyZW5jZSgodHApLT5mdW5jcyk7CQkJXAorCQlpZiAoaXRfZnVuYykgewkJCQkJCVwKKwkJCWRvIHsJCQkJCQlcCisJCQkJKCh2b2lkKCopKHByb3RvKSkoKml0X2Z1bmMpKShhcmdzKTsJXAorCQkJfSB3aGlsZSAoKigrK2l0X2Z1bmMpKTsJCQkJXAorCQl9CQkJCQkJCVwKKwkJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CQkJCVwKKwl9IHdoaWxlICgwKQorCisvKgorICogTWFrZSBzdXJlIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHN0cnVjdHVyZSBpbiB0aGUgX190cmFjZXBvaW50cyBzZWN0aW9uIHdpbGwKKyAqIG5vdCBhZGQgdW53YW50ZWQgcGFkZGluZyBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY3Rpb24gYW5kIHRoZQorICogc3RydWN0dXJlLiBGb3JjZSBhbGlnbm1lbnQgdG8gdGhlIHNhbWUgYWxpZ25tZW50IGFzIHRoZSBzZWN0aW9uIHN0YXJ0LgorICovCisjZGVmaW5lIERFRklORV9UUkFDRShuYW1lLCBwcm90bywgYXJncykJCQkJCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfIyNuYW1lKHByb3RvKQkJCQlcCisJewkJCQkJCQkJXAorCQlzdGF0aWMgY29uc3QgY2hhciBfX3Rwc3RydGFiXyMjbmFtZVtdCQkJXAorCQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3N0cmluZ3MiKSkpCVwKKwkJPSAjbmFtZSAiOiIgI3Byb3RvOwkJCQkJXAorCQlzdGF0aWMgc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJXAorCQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIiksIGFsaWduZWQoOCkpKSA9CVwKKwkJeyBfX3Rwc3RydGFiXyMjbmFtZSwgMCwgTlVMTCB9OwkJCQlcCisJCWlmICh1bmxpa2VseShfX3RyYWNlcG9pbnRfIyNuYW1lLnN0YXRlKSkJCVwKKwkJCV9fRE9fVFJBQ0UoJl9fdHJhY2Vwb2ludF8jI25hbWUsCQlcCisJCQkJVFBQUk9UTyhwcm90byksIFRQQVJHUyhhcmdzKSk7CQlcCisJfQkJCQkJCQkJXAorCXN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX3RyYWNlXyMjbmFtZSh2b2lkICgqcHJvYmUpKHByb3RvKSkJXAorCXsJCQkJCQkJCVwKKwkJcmV0dXJuIHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXIoI25hbWUgIjoiICNwcm90bywJXAorCQkJKHZvaWQgKilwcm9iZSk7CQkJCQlcCisJfQkJCQkJCQkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX3RyYWNlXyMjbmFtZSh2b2lkICgqcHJvYmUpKHByb3RvKSlcCisJewkJCQkJCQkJXAorCQl0cmFjZXBvaW50X3Byb2JlX3VucmVnaXN0ZXIoI25hbWUgIjoiICNwcm90bywJCVwKKwkJCSh2b2lkICopcHJvYmUpOwkJCQkJXAorCX0KKworZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLAorCXN0cnVjdCB0cmFjZXBvaW50ICplbmQpOworCisjZWxzZSAvKiAhQ09ORklHX1RSQUNFUE9JTlRTICovCisjZGVmaW5lIERFRklORV9UUkFDRShuYW1lLCBwcm90bywgYXJncykJCQlcCisJc3RhdGljIGlubGluZSB2b2lkIF9kb190cmFjZV8jI25hbWUoc3RydWN0IHRyYWNlcG9pbnQgKnRwLCBwcm90bykgXAorCXsgfQkJCQkJCQkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV8jI25hbWUocHJvdG8pCQkJCVwKKwl7IH0JCQkJCQkJCVwKKwlzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl90cmFjZV8jI25hbWUodm9pZCAoKnByb2JlKShwcm90bykpCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiAtRU5PU1lTOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfdHJhY2VfIyNuYW1lKHZvaWQgKCpwcm9iZSkocHJvdG8pKVwKKwl7IH0KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKQoreyB9CisjZW5kaWYgLyogQ09ORklHX1RSQUNFUE9JTlRTICovCisKKy8qCisgKiBDb25uZWN0IGEgcHJvYmUgdG8gYSB0cmFjZXBvaW50LgorICogSW50ZXJuYWwgQVBJLCBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuCisgKi8KK2V4dGVybiBpbnQgdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwcm9iZSk7CisKKy8qCisgKiBEaXNjb25uZWN0IGEgcHJvYmUgZnJvbSBhIHRyYWNlcG9pbnQuCisgKiBJbnRlcm5hbCBBUEksIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4KKyAqLworZXh0ZXJuIGludCB0cmFjZXBvaW50X3Byb2JlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcHJvYmUpOworCitzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyIHsKKwlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJc3RydWN0IHRyYWNlcG9pbnQgKnRyYWNlcG9pbnQ7Cit9OworCitleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RhcnQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CitleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfbmV4dChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKK2V4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9zdG9wKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOworZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOworZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICoqdHJhY2Vwb2ludCwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpOworCisvKgorICogdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgdHJhY2Vwb2ludAorICogcHJvYmUgdW5yZWdpc3RyYXRpb24gYW5kIHRoZSBlbmQgb2YgbW9kdWxlIGV4aXQgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vCisgKiBjYWxsZXIgZXhlY3V0aW5nIGEgcHJvYmUgd2hlbiBpdCBpcyBmcmVlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3Rlcih2b2lkKQoreworCXN5bmNocm9uaXplX3NjaGVkKCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IGYyNGY3YmUuLjFkOTgzMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTE5MCw2ICsxOTAsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiB1bnNpZ25lZCBfX2JpdHdpc2VfXyBnZnBfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19iaXR3aXNlX18gZm1vZGVfdDsKIAogI2lmZGVmIENPTkZJR19QSFlTX0FERFJfVF82NEJJVAogdHlwZWRlZiB1NjQgcGh5c19hZGRyX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA5NGFjNzRhLi44ZmE5NzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTExMzUsNiArMTEzNSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgcG9pc29uZWQ6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3VzYl9hbmNob3Ioc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKQEAgLTE0NTksMTIgKzE0NjAsMTggQEAKIGV4dGVybiBpbnQgdXNiX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpOwogZXh0ZXJuIGludCB1c2JfdW5saW5rX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gdm9pZCB1c2JfcG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworZXh0ZXJuIHZvaWQgdXNiX3VucG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9wb2lzb25fYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl91bmxpbmtfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl9hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiBleHRlcm4gdm9pZCB1c2JfdW5hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gaW50IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IsCiAJCQkJCSB1bnNpZ25lZCBpbnQgdGltZW91dCk7CitleHRlcm4gc3RydWN0IHVyYiAqdXNiX2dldF9mcm9tX2FuY2hvcihzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CitleHRlcm4gaW50IHVzYl9hbmNob3JfZW1wdHkoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiAKIC8qKgogICogdXNiX3VyYl9kaXJfaW4gLSBjaGVjayBpZiBhbiBVUkIgZGVzY3JpYmVzIGFuIElOIHRyYW5zZmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKaW5kZXggNDJlODRmYy4uNTRjNDQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZApAQCAtNCw0ICs0LDUgQEAKIGhlYWRlci15ICs9IGdhZGdldGZzLmgKIGhlYWRlci15ICs9IG1pZGkuaAogaGVhZGVyLXkgKz0gZ19wcmludGVyLmgKLQoraGVhZGVyLXkgKz0gdG1jLmgKK2hlYWRlci15ICs9IHZzdHVzYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCmluZGV4IGNhMjI4YmIuLjE4YTcyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCkBAIC0xNjAsNiArMTYwLDE1IEBACiAJX191OAliRGV0YWlsRGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiAiT0JFWCBDb250cm9sIE1vZGVsIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgKi8KK3N0cnVjdCB1c2JfY2RjX29iZXhfZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX19sZTE2CWJjZFZlcnNpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKaW5kZXggYzkzMjM5MC4uOTM1YzM4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKQEAgLTEzMCw2ICsxMzAsOSBAQAogCiBpbnQgdXNiX2FkZF9mdW5jdGlvbihzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKiwgc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKIAoraW50IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CitpbnQgdXNiX2Z1bmN0aW9uX2FjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CisKIGludCB1c2JfaW50ZXJmYWNlX2lkKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICopOwogCiAvKioKQEAgLTMxNiw5ICszMTksMTMgQEAKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIJKmRyaXZlcjsKIAl1OAkJCQluZXh0X3N0cmluZ19pZDsKIAotCXNwaW5sb2NrX3QJCQlsb2NrOworCS8qIHRoZSBnYWRnZXQgZHJpdmVyIHdvbid0IGVuYWJsZSB0aGUgZGF0YSBwdWxsdXAKKwkgKiB3aGlsZSB0aGUgZGVhY3RpdmF0aW9uIGNvdW50IGlzIG5vbnplcm8uCisJICovCisJdW5zaWduZWQJCQlkZWFjdGl2YXRpb25zOwogCi0JLyogUkVWSVNJVCB1c2UgYW5kIGV4aXN0ZW5jZSBvZiBsb2NrIC4uLiAqLworCS8qIHByb3RlY3RzIGF0IGxlYXN0IGRlYWN0aXZhdGlvbiBjb3VudCAqLworCXNwaW5sb2NrX3QJCQlsb2NrOwogfTsKIAogZXh0ZXJuIGludCB1c2Jfc3RyaW5nX2lkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDY1NTM0MWQuLjBiODYxN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xOTIsNyArMTkyLDcgQEAKICAqIFRoZSBkcml2ZXIub3duZXIgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbW9kdWxlIG93bmVyIG9mIHRoaXMgZHJpdmVyLgogICogVGhlIGRyaXZlci5uYW1lIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhpcyBkcml2ZXIgKHJlbWVtYmVyCiAgKiBpdCB3aWxsIHNob3cgdXAgaW4gc3lzZnMsIHNvIGl0IG5lZWRzIHRvIGJlIHNob3J0IGFuZCB0byB0aGUgcG9pbnQuCi0gKiBVc2VpbmcgdGhlIG1vZHVsZSBuYW1lIGlzIGEgZ29vZCBpZGVhLikKKyAqIFVzaW5nIHRoZSBtb2R1bGUgbmFtZSBpcyBhIGdvb2QgaWRlYS4pCiAgKi8KIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB7CiAJY29uc3QgY2hhciAqZGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi90bWMuaCBiL2luY2x1ZGUvbGludXgvdXNiL3RtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi90bWMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFN0ZWZhbiBLb3BwLCBHZWNoaW5nZW4sIEdlcm1hbnkKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoKKyAqIFRoaXMgZmlsZSBob2xkcyBVU0IgY29uc3RhbnRzIGRlZmluZWQgYnkgdGhlIFVTQiBEZXZpY2UgQ2xhc3MKKyAqIERlZmluaXRpb24gZm9yIFRlc3QgYW5kIE1lYXN1cmVtZW50IGRldmljZXMgcHVibGlzaGVkIGJ5IHRoZSBVU0ItSUYuCisgKgorICogSXQgYWxzbyBoYXMgdGhlIGlvY3RsIGRlZmluaXRpb25zIGZvciB0aGUgdXNidG1jIGtlcm5lbCBkcml2ZXIgdGhhdAorICogdXNlcnNwYWNlIG5lZWRzIHRvIGtub3cgYWJvdXQuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9UTUNfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9UTUNfSAorCisvKiBVU0IgVE1DIHN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19TVUNDRVNTCQkJCTB4MDEKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19QRU5ESU5HCQkJCTB4MDIKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19GQUlMRUQJCQkJMHg4MAorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1RSQU5TRkVSX05PVF9JTl9QUk9HUkVTUwkJMHg4MQorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NQTElUX05PVF9JTl9QUk9HUkVTUwkJMHg4MgorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NQTElUX0lOX1BST0dSRVNTCQkJMHg4MworCisvKiBVU0IgVE1DIHJlcXVlc3RzIHZhbHVlcyAqLworI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX09VVAkJMQorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9DSEVDS19BQk9SVF9CVUxLX09VVF9TVEFUVVMJMgorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX0lOCQkzCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfSU5fU1RBVFVTCTQKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQ0xFQVIJCQk1CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0NMRUFSX1NUQVRVUwkJNgorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9HRVRfQ0FQQUJJTElUSUVTCQkJNworI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTkRJQ0FUT1JfUFVMU0UJCQk2NAorCisvKiBSZXF1ZXN0IHZhbHVlcyBmb3IgVVNCVE1DIGRyaXZlcidzIGlvY3RsIGVudHJ5IHBvaW50ICovCisjZGVmaW5lIFVTQlRNQ19JT0NfTlIJCQk5MQorI2RlZmluZSBVU0JUTUNfSU9DVExfSU5ESUNBVE9SX1BVTFNFCV9JTyhVU0JUTUNfSU9DX05SLCAxKQorI2RlZmluZSBVU0JUTUNfSU9DVExfQ0xFQVIJCV9JTyhVU0JUTUNfSU9DX05SLCAyKQorI2RlZmluZSBVU0JUTUNfSU9DVExfQUJPUlRfQlVMS19PVVQJX0lPKFVTQlRNQ19JT0NfTlIsIDMpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX0lOCV9JTyhVU0JUTUNfSU9DX05SLCA0KQorI2RlZmluZSBVU0JUTUNfSU9DVExfQ0xFQVJfT1VUX0hBTFQJX0lPKFVTQlRNQ19JT0NfTlIsIDYpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9DTEVBUl9JTl9IQUxUCV9JTyhVU0JUTUNfSU9DX05SLCA3KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmYWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZpbGU6IGRyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmgKKyAqCisgKiAgUHVycG9zZTogU3VwcG9ydCBmb3IgdGhlIGJ1bGsgVVNCIFZlcm5pZXIgU3BlY3Ryb3Bob3RvbWV0ZXJzCisgKgorICogIEF1dGhvcjogICAgIEVRd2FyZSBFbmdpbmVlcmluZywgSW5jLgorICogICAgICAgICAgICAgIE9yZWdvbiBDaXR5LCBPUiwgVVNBIDk3MDQ1CisgKgorICogIENvcHlyaWdodDogIDIwMDcsIDIwMDgKKyAqICAgICAgICAgICAgICBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neQorICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQorICoKKyAqICBXZWI6ICAgICAgICB3d3cudmVybmllci5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBUaGUgdnN0dXNiIG1vZHVsZSBpcyBhIHN0YW5kYXJkIHVzYiAnY2xpZW50JyBkcml2ZXIgcnVubmluZyBvbiB0b3Agb2YgdGhlCisgKiAgc3RhbmRhcmQgdXNiIGhvc3QgY29udHJvbGxlciBzdGFjay4KKyAqCisgKiAgSW4gZ2VuZXJhbCwgdnN0dXNiIHN1cHBvcnRzIHN0YW5kYXJkIGJ1bGsgdXNiIHBpcGVzLiAgSXQgc3VwcG9ydHMgbXVsdGlwbGUKKyAqICBkZXZpY2VzIGFuZCBtdWx0aXBsZSBwaXBlcyBwZXIgZGV2aWNlLgorICoKKyAqICBUaGUgdnN0dXNiIGRyaXZlciBzdXBwb3J0cyB0d28gaW50ZXJmYWNlczoKKyAqICAxIC0gaW9jdGwgU0VORF9QSVBFL1JFQ1ZfUElQRSAtIGEgZ2VuZXJhbCBidWxrIHdyaXRlL3JlYWQgbXNnCisgKiAgCWludGVyZmFjZSB0byBhbnkgcGlwZSB3aXRoIHRpbWVvdXQgc3VwcG9ydDsKKyAqICAyIC0gc3RhbmRhcmQgcmVhZC93cml0ZSB3aXRoIGlvY3RsIGNvbmZpZyAtIG9mZmVycyBzdGFuZGFyZCByZWFkL3dyaXRlCisgKiAgCWludGVyZmFjZSB3aXRoIGlvY3RsIGNvbmZpZ3VyZWQgcGlwZXMgYW5kIHRpbWVvdXRzLgorICoKKyAqICBCb3RoIGludGVyZmFjZXMgY2FuIGJlIHNpZ25hbCBmcm9tIG90aGVyIHByb2Nlc3MgYW5kIHdpbGwgYWJvcnQgaXRzIGkvbworICogIG9wZXJhdGlvbi4KKyAqCisgKiAgQSB0aW1lb3V0IG9mIDAgbWVhbnMgTk8gdGltZW91dC4gIFRoZSB1c2VyIGNhbiBzdGlsbCB0ZXJtaW5hdGUgdGhlIHJlYWQgdmlhCisgKiAgc2lnbmFsLgorICoKKyAqICBJZiB1c2luZyBtdWx0aXBsZSB0aHJlYWRzIHdpdGggdGhpcyBkcml2ZXIsIHRoZSB1c2VyIHNob3VsZCBlbnN1cmUgdGhhdAorICogIGFueSByZWFkcywgd3JpdGVzLCBvciBpb2N0bHMgYXJlIGNvbXBsZXRlIGJlZm9yZSBjbG9zaW5nIHRoZSBkZXZpY2UuCisgKiAgQ2hhbmdpbmcgcmVhZC93cml0ZSB0aW1lb3V0cyBvciBwaXBlcyB0YWtlcyBlZmZlY3Qgb24gbmV4dCByZWFkL3dyaXRlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHZzdHVzYl9hcmdzIHsKKwl1bmlvbiB7CisJCS8qIHRoaXMgc3RydWN0IGlzIHVzZWQgZm9yIElPQ1RMX1ZTVFVTQl9TRU5EX1BJUEUsCSoKKwkJICogSU9DVExfVlNUVVNCX1JFQ1ZfUElQRSwgYW5kIHJlYWQoKS93cml0ZSgpIGZvcHMJKi8KKwkJc3RydWN0IHsKKwkJCXZvaWQgX191c2VyCSpidWZmZXI7CisJCQlzaXplX3QgICAgICAgICAgY291bnQ7CisJCQl1bnNpZ25lZCBpbnQgICAgdGltZW91dF9tczsKKwkJCWludCAgICAgICAgICAgICBwaXBlOworCQl9OworCisJCS8qIHRoaXMgb25lIGlzIHVzZWQgZm9yIElPQ1RMX1ZTVFVTQl9DT05GSUdfUlcgIAkqLworCQlzdHJ1Y3QgeworCQkJaW50IHJkX3BpcGU7CisJCQlpbnQgcmRfdGltZW91dF9tczsKKwkJCWludCB3cl9waXBlOworCQkJaW50IHdyX3RpbWVvdXRfbXM7CisJCX07CisJfTsKK307CisKKyNkZWZpbmUgVlNUX0lPQ19NQUdJQyAnTCcKKyNkZWZpbmUgVlNUX0lPQ19GSVJTVCAweDIwCisjZGVmaW5lIElPQ1RMX1ZTVFVTQl9TRU5EX1BJUEUJX0lPKFZTVF9JT0NfTUFHSUMsIFZTVF9JT0NfRklSU1QpCisjZGVmaW5lIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEUJX0lPKFZTVF9JT0NfTUFHSUMsIFZTVF9JT0NfRklSU1QgKyAxKQorI2RlZmluZSBJT0NUTF9WU1RVU0JfQ09ORklHX1JXCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUICsgMikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3d1c2Itd2EuaCBiL2luY2x1ZGUvbGludXgvdXNiL3d1c2Itd2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTAyNTYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivd3VzYi13YS5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogV2lyZWxlc3MgVVNCIFdpcmUgQWRhcHRlciBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogRklYTUU6IGRvY3MKKyAqIEZJWE1FOiBvcmdhbml6ZSBwcm9wZXJseSwgZ3JvdXAgbG9naWNhbGx5CisgKgorICogQWxsIHRoZSBldmVudCBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGluIHV3Yi9zcGVjLmgsIGFzIHRoZXkgYXJlCisgKiBjb21tb24gdG8gdGhlIFdIQ0kgYW5kIFdVU0IgcmFkaW8gY29udHJvbCBpbnRlcmZhY2VzLgorICoKKyAqIFJlZmVyZW5jZXM6CisgKiAgIFtXVVNCXSBXaXJlbGVzcyBVbml2ZXJzYWwgU2VyaWFsIEJ1cyBTcGVjaWZpY2F0aW9uLCByZXZpc2lvbiAxLjAsIGNoOAorICovCisjaWZuZGVmIF9fTElOVVhfVVNCX1dVU0JfV0FfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9XVVNCX1dBX0gKKworLyoqCisgKiBSYWRpbyBDb21tYW5kIFJlcXVlc3QgZm9yIHRoZSBSYWRpbyBDb250cm9sIEludGVyZmFjZQorICoKKyAqIFJhZGlvIENvbnRyb2wgSW50ZXJmYWNlIGNvbW1hbmQgYW5kIGV2ZW50IGNvZGVzIGFyZSB0aGUgc2FtZSBhcworICogV0hDSSwgYW5kIGxpc3RlZCBpbiBpbmNsdWRlL2xpbnV4L3V3Yi5oOlVXQl9SQ197Q01ELEVWVH1fKgorICovCitlbnVtIHsKKwlXQV9FWEVDX1JDX0NNRCA9IDQwLAkvKiBSYWRpbyBDb250cm9sIGNvbW1hbmQgUmVxdWVzdCAqLworfTsKKworLyogV2lyZWxlc3MgQWRhcHRlciBSZXF1ZXN0cyAoW1dVU0JdIHRhYmxlIDgtNTEpICovCitlbnVtIHsKKwlXVVNCX1JFUV9BRERfTU1DX0lFICAgICA9IDIwLAorCVdVU0JfUkVRX1JFTU9WRV9NTUNfSUUgID0gMjEsCisJV1VTQl9SRVFfU0VUX05VTV9ETlRTICAgPSAyMiwKKwlXVVNCX1JFUV9TRVRfQ0xVU1RFUl9JRCA9IDIzLAorCVdVU0JfUkVRX1NFVF9ERVZfSU5GTyAgID0gMjQsCisJV1VTQl9SRVFfR0VUX1RJTUUgICAgICAgPSAyNSwKKwlXVVNCX1JFUV9TRVRfU1RSRUFNX0lEWCA9IDI2LAorCVdVU0JfUkVRX1NFVF9XVVNCX01BUyAgID0gMjcsCit9OworCisKKy8qIFdpcmVsZXNzIEFkYXB0ZXIgV1VTQiBDaGFubmVsIFRpbWUgdHlwZXMgKFtXVVNCXSB0YWJsZSA4LTUyKSAqLworZW51bSB7CisJV1VTQl9USU1FX0FESiAgID0gMCwKKwlXVVNCX1RJTUVfQlBTVCAgPSAxLAorCVdVU0JfVElNRV9XVVNCICA9IDIsCit9OworCitlbnVtIHsKKwlXQV9FTkFCTEUgPSAweDAxLAorCVdBX1JFU0VUID0gMHgwMiwKKwlSUElQRV9QQVVTRSA9IDB4MSwKK307CisKKy8qIFJlc3BvbnNlcyBmcm9tIEdldCBTdGF0dXMgcmVxdWVzdCAoW1dVU0JdIHNlY3Rpb24gOC4zLjEuNikgKi8KK2VudW0geworCVdBX1NUQVRVU19FTkFCTEVEID0gMHgwMSwKKwlXQV9TVEFUVVNfUkVTRVRUSU5HID0gMHgwMgorfTsKKworZW51bSBycGlwZV9jcnMgeworCVJQSVBFX0NSU19DVEwgPSAweDAxLAorCVJQSVBFX0NSU19JU08gPSAweDAyLAorCVJQSVBFX0NSU19CVUxLID0gMHgwNCwKKwlSUElQRV9DUlNfSU5UUiA9IDB4MDgKK307CisKKy8qKgorICogUlBpcGUgZGVzY3JpcHRvciAoW1dVU0JdIHNlY3Rpb24gOC41LjIuMTEpCisgKgorICogRklYTUU6IGV4cGxhaW4gcnBpcGVzCisgKi8KK3N0cnVjdCB1c2JfcnBpcGVfZGVzY3JpcHRvciB7CisJdTggCWJMZW5ndGg7CisJdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fbGUxNiAgd1JQaXBlSW5kZXg7CisJX19sZTE2CXdSZXF1ZXN0czsKKwlfX2xlMTYJd0Jsb2NrczsJCS8qIHJ3IGlmIDAgKi8KKwlfX2xlMTYJd01heFBhY2tldFNpemU7CQkvKiBydz8gKi8KKwl1OAliSFNIdWJBZGRyZXNzOwkJLyogcmVzZXJ2ZWQ6IDAgKi8KKwl1OAliSFNIdWJQb3J0OwkJLyogPz8/IEZJWE1FID8/PyAqLworCXU4CWJTcGVlZDsJCQkvKiBydzogeGZlciByYXRlICdlbnVtIHV3Yl9waHlfcmF0ZScgKi8KKwl1OAliRGV2aWNlQWRkcmVzczsJCS8qIHJ3OiBUYXJnZXQgZGV2aWNlIGFkZHJlc3MgKi8KKwl1OAliRW5kcG9pbnRBZGRyZXNzOwkvKiBydzogVGFyZ2V0IEVQIGFkZHJlc3MgKi8KKwl1OAliRGF0YVNlcXVlbmNlOwkJLyogcm86IEN1cnJlbnQgRGF0YSBzZXF1ZW5jZSAqLworCV9fbGUzMglkd0N1cnJlbnRXaW5kb3c7CS8qIHJvICovCisJdTgJYk1heERhdGFTZXF1ZW5jZTsJLyogcm8/OiBtYXggc3VwcG9ydGVkIHNlcSAqLworCXU4CWJJbnRlcnZhbDsJCS8qIHJ3OiAgKi8KKwl1OAliT3ZlclRoZUFpckludGVydmFsOwkvKiBydzogICovCisJdTgJYm1BdHRyaWJ1dGU7CQkvKiBybz8gICovCisJdTgJYm1DaGFyYWN0ZXJpc3RpY3M7CS8qIHJvPyBlbnVtIHJwaXBlX2F0dHIsIHN1cHBvcnRlZCB4c2FjdGlvbnMgKi8KKwl1OAlibVJldHJ5T3B0aW9uczsJCS8qIHJ3PyAqLworCV9fbGUxNgl3TnVtVHJhbnNhY3Rpb25FcnJvcnM7CS8qIHJ3ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiBXaXJlIEFkYXB0ZXIgTm90aWZpY2F0aW9uIHR5cGVzIChbV1VTQl0gc2VjdGlvbnMgOC40LjUgJiA4LjUuNCkKKyAqCisgKiBUaGVzZSBhcmUgdGhlIG5vdGlmaWNhdGlvbnMgY29taW5nIG9uIHRoZSBub3RpZmljYXRpb24gZW5kcG9pbnQgb2YKKyAqIGFuIEhXQSBhbmQgYSBEV0EuCisgKi8KK2VudW0gd2Ffbm90aWZfdHlwZSB7CisJRFdBX05PVElGX1JXQUtFID0gMHg5MSwKKwlEV0FfTk9USUZfUE9SVFNUQVRVUyA9IDB4OTIsCisJV0FfTk9USUZfVFJBTlNGRVIgPSAweDkzLAorCUhXQV9OT1RJRl9CUFNUX0FESiA9IDB4OTQsCisJSFdBX05PVElGX0ROID0gMHg5NSwKK307CisKKy8qKgorICogV2lyZSBBZGFwdGVyIG5vdGlmaWNhdGlvbiBoZWFkZXIKKyAqCisgKiBOb3RpZmljYXRpb25zIGNvbWluZyBmcm9tIGEgd2lyZSBhZGFwdGVyIHVzZSBhIGNvbW1vbiBoZWFkZXIKKyAqIGRlZmluZWQgaW4gW1dVU0JdIHNlY3Rpb25zIDguNC41ICYgOC41LjQuCisgKi8KK3N0cnVjdCB3YV9ub3RpZl9oZHIgeworCXU4IGJMZW5ndGg7CisJdTggYk5vdGlmeVR5cGU7CQkJLyogZW51bSB3YV9ub3RpZl90eXBlICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIEhXQSBETiBSZWNlaXZlZCBub3RpZmljYXRpb24gWyhXVVNCXSBzZWN0aW9uIDguNS40LjIpCisgKgorICogVGhlIERORGF0YSBpcyBzcGVjaWZpZWQgaW4gV1VTQjEuMFs3LjZdLiBGb3IgZWFjaCBkZXZpY2UKKyAqIG5vdGlmaWNhdGlvbiB3ZSByZWNlaXZlZCwgd2UganVzdCBuZWVkIHRvIGRpc3BhdGNoIGl0LgorICoKKyAqIEBkbmRhdGE6ICB0aGlzIGlzIHJlYWxseSBhbiBhcnJheSBvZiBub3RpZmljYXRpb25zLCBidXQgYWxsIHN0YXJ0CisgKiAgICAgICAgICAgd2l0aCB0aGUgc2FtZSBoZWFkZXIuCisgKi8KK3N0cnVjdCBod2Ffbm90aWZfZG4geworCXN0cnVjdCB3YV9ub3RpZl9oZHIgaGRyOworCXU4IGJTb3VyY2VEZXZpY2VBZGRyOwkJLyogZnJvbSBlcnJhdGEgMjAwNS8wNyAqLworCXU4IGJtQXR0cmlidXRlczsKKwlzdHJ1Y3Qgd3VzYl9kbl9oZHIgZG5kYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBbV1VTQl0gc2VjdGlvbiA4LjMuMyAqLworZW51bSB3YV94ZmVyX3R5cGUgeworCVdBX1hGRVJfVFlQRV9DVEwgPSAweDgwLAorCVdBX1hGRVJfVFlQRV9CSSA9IDB4ODEsCQkvKiBidWxrL2ludGVycnVwdCAqLworCVdBX1hGRVJfVFlQRV9JU08gPSAweDgyLAorCVdBX1hGRVJfUkVTVUxUID0gMHg4MywKKwlXQV9YRkVSX0FCT1JUID0gMHg4NCwKK307CisKKy8qIFtXVVNCXSBzZWN0aW9uIDguMy4zICovCitzdHJ1Y3Qgd2FfeGZlcl9oZHIgeworCXU4IGJMZW5ndGg7CQkJLyogMHgxOCAqLworCXU4IGJSZXF1ZXN0VHlwZTsJCS8qIDB4ODAgV0FfUkVRVUVTVF9UWVBFX0NUTCAqLworCV9fbGUxNiB3UlBpcGU7CQkJLyogUlBpcGUgaW5kZXggKi8KKwlfX2xlMzIgZHdUcmFuc2ZlcklEOwkJLyogSG9zdC1hc3NpZ25lZCBJRCAqLworCV9fbGUzMiBkd1RyYW5zZmVyTGVuZ3RoOwkvKiBMZW5ndGggb2YgZGF0YSB0byB4ZmVyICovCisJdTggYlRyYW5zZmVyU2VnbWVudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB3YV94ZmVyX2N0bCB7CisJc3RydWN0IHdhX3hmZXJfaGRyIGhkcjsKKwl1OCBibUF0dHJpYnV0ZTsKKwlfX2xlMTYgd1Jlc2VydmVkOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgYmFTZXR1cERhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2FfeGZlcl9iaSB7CisJc3RydWN0IHdhX3hmZXJfaGRyIGhkcjsKKwl1OCBiUmVzZXJ2ZWQ7CisJX19sZTE2IHdSZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB3YV94ZmVyX2h3YWlzbyB7CisJc3RydWN0IHdhX3hmZXJfaGRyIGhkcjsKKwl1OCBiUmVzZXJ2ZWQ7CisJX19sZTE2IHdQcmVzZW50YXRpb25UaW1lOworCV9fbGUzMiBkd051bU9mUGFja2V0czsKKwkvKiBGSVhNRTogdTggcGt0ZGF0YVtdPyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogW1dVU0JdIHNlY3Rpb24gOC4zLjMuNSAqLworc3RydWN0IHdhX3hmZXJfYWJvcnQgeworCXU4IGJMZW5ndGg7CisJdTggYlJlcXVlc3RUeXBlOworCV9fbGUxNiB3UlBpcGU7CQkJLyogUlBpcGUgaW5kZXggKi8KKwlfX2xlMzIgZHdUcmFuc2ZlcklEOwkJLyogSG9zdC1hc3NpZ25lZCBJRCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBXQSBUcmFuc2ZlciBDb21wbGV0ZSBub3RpZmljYXRpb24gKFtXVVNCXSBzZWN0aW9uIDguMy4zLjMpCisgKgorICovCitzdHJ1Y3Qgd2Ffbm90aWZfeGZlciB7CisJc3RydWN0IHdhX25vdGlmX2hkciBoZHI7CisJdTggYkVuZHBvaW50OworCXU4IFJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqIFRyYW5zZmVyIHJlc3VsdCBiYXNpYyBjb2RlcyBbV1VTQl0gdGFibGUgOC0xNSAqLworZW51bSB7CisJV0FfWEZFUl9TVEFUVVNfU1VDQ0VTUywKKwlXQV9YRkVSX1NUQVRVU19IQUxURUQsCisJV0FfWEZFUl9TVEFUVVNfREFUQV9CVUZGRVJfRVJST1IsCisJV0FfWEZFUl9TVEFUVVNfQkFCQkxFLAorCVdBX1hGRVJfUkVTRVJWRUQsCisJV0FfWEZFUl9TVEFUVVNfTk9UX0ZPVU5ELAorCVdBX1hGRVJfU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRSwKKwlXQV9YRkVSX1NUQVRVU19UUkFOU0FDVElPTl9FUlJPUiwKKwlXQV9YRkVSX1NUQVRVU19BQk9SVEVELAorCVdBX1hGRVJfU1RBVFVTX1JQSVBFX05PVF9SRUFEWSwKKwlXQV9YRkVSX0lOVkFMSURfRk9STUFULAorCVdBX1hGRVJfVU5FWFBFQ1RFRF9TRUdNRU5UX05VTUJFUiwKKwlXQV9YRkVSX1NUQVRVU19SUElQRV9UWVBFX01JU01BVENILAorfTsKKworLyoqIFtXVVNCXSBzZWN0aW9uIDguMy4zLjQgKi8KK3N0cnVjdCB3YV94ZmVyX3Jlc3VsdCB7CisJc3RydWN0IHdhX25vdGlmX2hkciBoZHI7CisJX19sZTMyIGR3VHJhbnNmZXJJRDsKKwlfX2xlMzIgZHdUcmFuc2Zlckxlbmd0aDsKKwl1OCAgICAgYlRyYW5zZmVyU2VnbWVudDsKKwl1OCAgICAgYlRyYW5zZmVyU3RhdHVzOworCV9fbGUzMiBkd051bU9mUGFja2V0czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogV2lyZSBBZGFwdGVyIENsYXNzIERlc2NyaXB0b3IgKFtXVVNCXSBzZWN0aW9uIDguNS4yLjcpLgorICoKKyAqIE5PVEU6IHUxNiBmaWVsZHMgYXJlIHJlYWQgTGl0dGxlIEVuZGlhbiBmcm9tIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBAYk51bVBvcnRzIGlzIHRoZSBvcmlnaW5hbCBtYXggbnVtYmVyIG9mIGRldmljZXMgdGhhdCB0aGUgaG9zdCBjYW4KKyAqICAgICAgICAgICAgY29ubmVjdDsgd2UgbWlnaHQgY2hvcCB0aGlzIHNvIHRoZSBzdGFjayBjYW4gaGFuZGxlCisgKiAgICAgICAgICAgIGl0LiBJbiBjYXNlIHlvdSBuZWVkIHRvIGFjY2VzcyBpdCwgdXNlIHd1c2JoYy0+cG9ydHNfbWF4CisgKiAgICAgICAgICAgIGlmIGl0IGlzIGEgV2lyZWxlc3MgVVNCIFdBLgorICovCitzdHJ1Y3QgdXNiX3dhX2Rlc2NyaXB0b3IgeworCXU4CWJMZW5ndGg7CisJdTgJYkRlc2NyaXB0b3JUeXBlOworCXUxNgliY2RXQVZlcnNpb247CisJdTgJYk51bVBvcnRzOwkJLyogZG9uJ3QgdXNlISEgKi8KKwl1OAlibUF0dHJpYnV0ZXM7CQkvKiBSZXNlcnZlZCA9PSAwICovCisJdTE2CXdOdW1SUGlwZXM7CisJdTE2CXdSUGlwZU1heEJsb2NrOworCXU4CWJSUGlwZUJsb2NrU2l6ZTsKKwl1OAliUHdyT24yUHdyR29vZDsKKwl1OAliTnVtTU1DSUVzOworCXU4CURldmljZVJlbW92YWJsZTsJLyogRklYTUU6IGluIERXQSB0aGlzIGlzIHVwIHRvIDE2IGJ5dGVzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIEhXQSBEZXZpY2UgSW5mb3JtYXRpb24gQnVmZmVyIChXVVNCMS4wW1Q4LjU0XSkKKyAqLworc3RydWN0IGh3YV9kZXZfaW5mbyB7CisJdTgJYm1EZXZpY2VBdmFpbGFiaWxpdHlbMzJdOyAgICAgICAvKiBGSVhNRTogaWdub3JlZCBmb3Igbm93ICovCisJdTgJYkRldmljZUFkZHJlc3M7CisJX19sZTE2CXdQSFlSYXRlczsKKwl1OAlibURldmljZUF0dHJpYnV0ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZiAvKiAjaWZuZGVmIF9fTElOVVhfVVNCX1dVU0JfV0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivd3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2Ivd3VzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDAxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi93dXNiLmgKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKiBXaXJlbGVzcyBVU0IgU3RhbmRhcmQgRGVmaW5pdGlvbnMKKyAqIEV2ZW50IFNpemUgVGFibGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICogRklYTUU6IG9yZ2FuaXplIHByb3Blcmx5LCBncm91cCBsb2dpY2FsbHkKKyAqCisgKiBBbGwgdGhlIGV2ZW50IHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgaW4gdXdiL3NwZWMuaCwgYXMgdGhleSBhcmUKKyAqIGNvbW1vbiB0byB0aGUgV0hDSSBhbmQgV1VTQiByYWRpbyBjb250cm9sIGludGVyZmFjZXMuCisgKi8KKworI2lmbmRlZiBfX1dVU0JfSF9fCisjZGVmaW5lIF9fV1VTQl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL3NwZWMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKworLyoqCisgKiBXVVNCIEluZm9ybWF0aW9uIEVsZW1lbnQgaGVhZGVyCisgKgorICogSSBkb24ndCBrbm93IHdoeSwgdGhleSBkZWNpZGVkIHRvIG1ha2UgaXQgZGlmZmVyZW50IHRvIHRoZSBNQk9BIE1BQworICogSUUgSGVhZGVyOyBiZWF0cyBtZS4KKyAqLworc3RydWN0IHd1aWVfaGRyIHsKKwl1OCBiTGVuZ3RoOworCXU4IGJJRUlkZW50aWZpZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIHsKKwlXVUlFX0lEX1dDVEEgPSAweDgwLAorCVdVSUVfSURfQ09OTkVDVEFDSywKKwlXVUlFX0lEX0hPU1RfSU5GTywKKwlXVUlFX0lEX0NIQU5HRV9BTk5PVU5DRSwKKwlXVUlFX0lEX0RFVklDRV9ESVNDT05ORUNULAorCVdVSUVfSURfSE9TVF9ESVNDT05ORUNULAorCVdVSUVfSURfS0VFUF9BTElWRSA9IDB4ODksCisJV1VJRV9JRF9JU09DSF9ESVNDQVJELAorCVdVSUVfSURfUkVTRVRfREVWSUNFLAorfTsKKworLyoqCisgKiBNYXhpbXVtIG51bWJlciBvZiBhcnJheSBlbGVtZW50cyBpbiBhIFdVU0IgSUUuCisgKgorICogV1VTQjEuMFs3LjUgYmVmb3JlIHRhYmxlIDctMzhdIHNheXMgdGhhdCBpbiBXVVNCIElFcyB0aGF0CisgKiBhcmUgImFycmF5cyIgaGF2ZSB0byBsaW1pdGVkIHRvIDQgZWxlbWVudHMuIFNvIHdlIGRlZmluZSBpdAorICogbGlrZSB0aGF0IHRvIGVhc2UgdXAgYW5kIHN1Ym1pdCBvbmx5IHRoZSBuZWVlZCBzaXplLgorICovCisjZGVmaW5lIFdVSUVfRUxUX01BWCA0CisKKy8qKgorICogV3JhcHBlciBmb3IgdGhlIGRhdGEgdGhhdCBkZWZpbmVzIGEgQ0hJRCwgYSBDRElEIG9yIGEgQ0sKKyAqCisgKiBXVVNCIGRlZmluZXMgdGhhdCBDSElEcywgQ0RJRHMgYW5kIENLcyBhcmUgYSAxNiBieXRlIHN0cmluZyBvZgorICogZGF0YS4gSW4gb3JkZXIgdG8gYXZvaWQgY29uZnVzaW9uIGFuZCBlbmZvcmNlIHR5cGVzLCB3ZSB3cmFwIGl0LgorICoKKyAqIE1ha2UgaXQgcGFja2VkLCBhcyB3ZSB1c2UgaXQgaW4gc29tZSBodyBkZWZpbnRpb25zLgorICovCitzdHJ1Y3Qgd3VzYl9ja2hkaWQgeworCXU4IGRhdGFbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworY29uc3Qgc3RhdGljCitzdHJ1Y3Qgd3VzYl9ja2hkaWQgd3VzYl9ja2hkaWRfemVybyA9IHsgLmRhdGEgPSB7IDAgfSB9OworCisjZGVmaW5lIFdVU0JfQ0tIRElEX1NUUlNJWkUgKDMgKiBzaXplb2Yoc3RydWN0IHd1c2JfY2toZGlkKSArIDEpCisKKy8qKgorICogV1VTQiBJRTogSG9zdCBJbmZvcm1hdGlvbiAoV1VTQjEuMFs3LjUuMl0pCisgKgorICogVXNlZCB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBob3N0IHRvIHRoZSBXaXJlbGVzcyBVU0IKKyAqIGRldmljZXMgaW4gcmFuZ2UgKENISUQgY2FuIGJlIHVzZWQgYXMgYW4gQVNDSUkgc3RyaW5nKS4KKyAqLworc3RydWN0IHd1aWVfaG9zdF9pbmZvIHsKKwlzdHJ1Y3Qgd3VpZV9oZHIgaGRyOworCV9fbGUxNiBhdHRyaWJ1dGVzOworCXN0cnVjdCB3dXNiX2NraGRpZCBDSElEOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBXVVNCIElFOiBDb25uZWN0IEFjayAoV1VTQjEuMFs3LjUuMV0pCisgKgorICogVXNlZCB0byBhY2tub3dsZWRnZSBkZXZpY2UgY29ubmVjdCByZXF1ZXN0cy4gU2VlIG5vdGUgZm9yCisgKiBXVUlFX0VMVF9NQVguCisgKi8KK3N0cnVjdCB3dWllX2Nvbm5lY3RfYWNrIHsKKwlzdHJ1Y3Qgd3VpZV9oZHIgaGRyOworCXN0cnVjdCB7CisJCXN0cnVjdCB3dXNiX2NraGRpZCBDRElEOworCQl1OCBiRGV2aWNlQWRkcmVzczsJLyogMCBtZWFucyB1bnVzZWQgKi8KKwkJdTggYlJlc2VydmVkOworCX0gYmxrW1dVSUVfRUxUX01BWF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFdVU0IgSUUgSG9zdCBJbmZvcm1hdGlvbiBFbGVtZW50LCBDb25uZWN0IEF2YWlsYWJpbGl0eQorICoKKyAqIFdVU0IxLjBbNy41LjJdLCBibUF0dHJpYnV0ZXMgZGVzY3JpcHRpb24KKyAqLworZW51bSB7CisJV1VJRV9ISV9DQVBfUkVDT05ORUNUID0gMCwKKwlXVUlFX0hJX0NBUF9MSU1JVEVELAorCVdVSUVfSElfQ0FQX1JFU0VSVkVELAorCVdVSUVfSElfQ0FQX0FMTCwKK307CisKKy8qKgorICogV1VTQiBJRTogQ2hhbm5lbCBTdG9wIChXVVNCMS4wWzcuNS44XSkKKyAqCisgKiBUZWxscyBkZXZpY2VzIHRoZSBob3N0IGlzIGdvaW5nIHRvIHN0b3Agc2VuZGluZyBNTUNzIGFuZCB3aWxsIGRpc3NhcGVhci4KKyAqLworc3RydWN0IHd1aWVfY2hhbm5lbF9zdG9wIHsKKwlzdHJ1Y3Qgd3VpZV9oZHIgaGRyOworCXU4IGF0dHJpYnV0ZXM7CisJdTggdGltZXN0YW1wWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBXVVNCIElFOiBLZWVwYWxpdmUgKFdVU0IxLjBbNy41LjldKQorICoKKyAqIEFzayBkZXZpY2UocykgdG8gc2VuZCBrZWVwYWxpdmVzLgorICovCitzdHJ1Y3Qgd3VpZV9rZWVwX2FsaXZlIHsKKwlzdHJ1Y3Qgd3VpZV9oZHIgaGRyOworCXU4IGJEZXZpY2VBZGRyZXNzW1dVSUVfRUxUX01BWF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFdVU0IgSUU6IFJlc2V0IGRldmljZSAoV1VTQjEuMFs3LjUuMTFdKQorICoKKyAqIFRlbGwgZGV2aWNlIHRvIHJlc2V0OyBpbiBhbGwgdHJ1dGgsIHdlIGNhbiBmaXQgNCBDRElEcywgYnV0IHdlIG9ubHkKKyAqIHVzZSBpdCBmb3Igb25lIGF0IHRoZSB0aW1lLi4uCisgKgorICogSW4gYW55IGNhc2UsIHRoaXMgcmVxdWVzdCBpcyBhIHdlZSBiaXQgc2lsbHk6IHdoeSBkb24ndCB0aGV5IHRhcmdldAorICogYnkgYWRkcmVzcz8/CisgKi8KK3N0cnVjdCB3dWllX3Jlc2V0IHsKKwlzdHJ1Y3Qgd3VpZV9oZHIgaGRyOworCXN0cnVjdCB3dXNiX2NraGRpZCBDRElEOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBXVVNCIElFOiBEaXNjb25uZWN0IGRldmljZSAoV1VTQjEuMFs3LjUuMTFdKQorICoKKyAqIFRlbGwgZGV2aWNlIHRvIGRpc2Nvbm5lY3Q7IHdlIGNhbiBmaXQgNCBhZGRyZXNzZXMsIGJ1dCB3ZSBvbmx5IHVzZQorICogaXQgZm9yIG9uZSBhdCB0aGUgdGltZS4uLgorICovCitzdHJ1Y3Qgd3VpZV9kaXNjb25uZWN0IHsKKwlzdHJ1Y3Qgd3VpZV9oZHIgaGRyOworCXU4IGJEZXZpY2VBZGRyZXNzOworCXU4IHBhZGRpbmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFdVU0IgSUU6IEhvc3QgZGlzY29ubmVjdCAoW1dVU0JdIHNlY3Rpb24gNy41LjUpCisgKgorICogVGVsbHMgYWxsIGNvbm5lY3RlZCBkZXZpY2VzIHRvIGRpc2Nvbm5lY3QuCisgKi8KK3N0cnVjdCB3dWllX2hvc3RfZGlzY29ubmVjdCB7CisJc3RydWN0IHd1aWVfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogV1VTQiBEZXZpY2UgTm90aWZpY2F0aW9uIGhlYWRlciAoV1VTQjEuMFs3LjZdKQorICovCitzdHJ1Y3Qgd3VzYl9kbl9oZHIgeworCXU4IGJUeXBlOworCXU4IG5vdGlmZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqIERldmljZSBOb3RpZmljYXRpb24gY29kZXMgKFdVU0IxLjBbVGFibGUgNy01NF0pICovCitlbnVtIFdVU0JfRE4geworCVdVU0JfRE5fQ09OTkVDVCA9IDB4MDEsCisJV1VTQl9ETl9ESVNDT05ORUNUID0gMHgwMiwKKwlXVVNCX0ROX0VQUkRZID0gMHgwMywKKwlXVVNCX0ROX01BU0FWQUlMQ0hBTkdFRCA9IDB4MDQsCisJV1VTQl9ETl9SV0FLRSA9IDB4MDUsCisJV1VTQl9ETl9TTEVFUCA9IDB4MDYsCisJV1VTQl9ETl9BTElWRSA9IDB4MDcsCit9OworCisvKiogV1VTQiBEZXZpY2UgTm90aWZpY2F0aW9uIENvbm5lY3QgKi8KK3N0cnVjdCB3dXNiX2RuX2Nvbm5lY3QgeworCXN0cnVjdCB3dXNiX2RuX2hkciBoZHI7CisJX19sZTE2IGF0dHJpYnV0ZXM7CisJc3RydWN0IHd1c2JfY2toZGlkIENESUQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGludCB3dXNiX2RuX2Nvbm5lY3RfcHJldl9kZXZfYWRkcihjb25zdCBzdHJ1Y3Qgd3VzYl9kbl9jb25uZWN0ICpkbikKK3sKKwlyZXR1cm4gbGUxNl90b19jcHUoZG4tPmF0dHJpYnV0ZXMpICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSBpbnQgd3VzYl9kbl9jb25uZWN0X25ld19jb25uZWN0aW9uKGNvbnN0IHN0cnVjdCB3dXNiX2RuX2Nvbm5lY3QgKmRuKQoreworCXJldHVybiAobGUxNl90b19jcHUoZG4tPmF0dHJpYnV0ZXMpID4+IDgpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIGludCB3dXNiX2RuX2Nvbm5lY3RfYmVhY29uX2JlaGF2aW9yKGNvbnN0IHN0cnVjdCB3dXNiX2RuX2Nvbm5lY3QgKmRuKQoreworCXJldHVybiAobGUxNl90b19jcHUoZG4tPmF0dHJpYnV0ZXMpID4+IDkpICYgMHgwMzsKK30KKworLyoqIERldmljZSBpcyBhbGl2ZSAoYWthOiBwb25nKSAoV1VTQjEuMFs3LjYuN10pICovCitzdHJ1Y3Qgd3VzYl9kbl9hbGl2ZSB7CisJc3RydWN0IHd1c2JfZG5faGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKiBEZXZpY2UgaXMgZGlzY29ubmVjdGluZyAoV1VTQjEuMFs3LjYuMl0pICovCitzdHJ1Y3Qgd3VzYl9kbl9kaXNjb25uZWN0IHsKKwlzdHJ1Y3Qgd3VzYl9kbl9oZHIgaGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogR2VuZXJhbCBjb25zdGFudHMgKi8KK2VudW0geworCVdVU0JfVFJVU1RfVElNRU9VVF9NUyA9IDQwMDAsCS8qIFtXVVNCXSBzZWN0aW9uIDQuMTUuMSAqLworfTsKKworc3RhdGljIGlubGluZSBzaXplX3QgY2toZGlkX3ByaW50ZihjaGFyICpwcl9ja2hkaWQsIHNpemVfdCBzaXplLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB3dXNiX2NraGRpZCAqY2toZGlkKQoreworCXJldHVybiBzY25wcmludGYocHJfY2toZGlkLCBzaXplLAorCQkJICIlMDJoeCAlMDJoeCAlMDJoeCAlMDJoeCAlMDJoeCAlMDJoeCAlMDJoeCAlMDJoeCAiCisJCQkgIiUwMmh4ICUwMmh4ICUwMmh4ICUwMmh4ICUwMmh4ICUwMmh4ICUwMmh4ICUwMmh4IiwKKwkJCSBja2hkaWQtPmRhdGFbMF0sICBja2hkaWQtPmRhdGFbMV0sCisJCQkgY2toZGlkLT5kYXRhWzJdLCAgY2toZGlkLT5kYXRhWzNdLAorCQkJIGNraGRpZC0+ZGF0YVs0XSwgIGNraGRpZC0+ZGF0YVs1XSwKKwkJCSBja2hkaWQtPmRhdGFbNl0sICBja2hkaWQtPmRhdGFbN10sCisJCQkgY2toZGlkLT5kYXRhWzhdLCAgY2toZGlkLT5kYXRhWzldLAorCQkJIGNraGRpZC0+ZGF0YVsxMF0sIGNraGRpZC0+ZGF0YVsxMV0sCisJCQkgY2toZGlkLT5kYXRhWzEyXSwgY2toZGlkLT5kYXRhWzEzXSwKKwkJCSBja2hkaWQtPmRhdGFbMTRdLCBja2hkaWQtPmRhdGFbMTVdKTsKK30KKworLyoKKyAqIFdVU0IgQ3J5cHRvIHN0dWZmIChXVVNCMS4wWzZdKQorICovCisKK2V4dGVybiBjb25zdCBjaGFyICp3dXNiX2V0X25hbWUodTgpOworCisvKioKKyAqIFdVU0Iga2V5IGluZGV4IFdVU0IxLjBbNy4zLjIuNF0sIGZvciB1c2FnZSB3aGVuIHNldHRpbmcga2V5cyBmb3IKKyAqIHRoZSBob3N0IG9yIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggd3VzYl9rZXlfaW5kZXgoaW50IGluZGV4LCBpbnQgdHlwZSwgaW50IG9yaWdpbmF0b3IpCit7CisJcmV0dXJuIChvcmlnaW5hdG9yIDw8IDYpIHwgKHR5cGUgPDwgNCkgfCBpbmRleDsKK30KKworI2RlZmluZSBXVVNCX0tFWV9JTkRFWF9UWVBFX1BUSwkJCTAgLyogZm9yIEhXQSBvbmx5ICovCisjZGVmaW5lIFdVU0JfS0VZX0lOREVYX1RZUEVfQVNTT0MJCTEKKyNkZWZpbmUgV1VTQl9LRVlfSU5ERVhfVFlQRV9HVEsJCQkyCisjZGVmaW5lIFdVU0JfS0VZX0lOREVYX09SSUdJTkFUT1JfSE9TVAkJMAorI2RlZmluZSBXVVNCX0tFWV9JTkRFWF9PUklHSU5BVE9SX0RFVklDRQkxCisKKy8qIEEgQ0NNIE5vbmNlLCBkZWZpbmVkIGluIFdVU0IxLjBbNi40LjFdICovCitzdHJ1Y3QgYWVzX2NjbV9ub25jZSB7CisJdTggc2ZuWzZdOyAgICAgICAgICAgICAgLyogTGl0dGxlIEVuZGlhbiAqLworCXU4IHRraWRbM107ICAgICAgICAgICAgIC8qIExFICovCisJc3RydWN0IHV3Yl9kZXZfYWRkciBkZXN0X2FkZHI7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBzcmNfYWRkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEEgQ0NNIG9wZXJhdGlvbiBsYWJlbCwgZGVmaW5lZCBvbiBXVVNCMS4wWzYuNS54XSAqLworc3RydWN0IGFlc19jY21fbGFiZWwgeworCXU4IGRhdGFbMTRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIElucHV0IHRvIHRoZSBrZXkgZGVyaXZhdGlvbiBzZXF1ZW5jZSBkZWZpbmVkIGluCisgKiBXVVNCMS4wWzYuNS4xXS4gUmVzdCBvZiB0aGUgZGF0YSBpcyBpbiB0aGUgQ0NNIE5vbmNlIHBhc3NlZCB0byB0aGUKKyAqIFBSRiBmdW5jdGlvbi4KKyAqLworc3RydWN0IHd1c2Jfa2V5ZHZ0X2luIHsKKwl1OCBobm9uY2VbMTZdOworCXU4IGRub25jZVsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogT3V0cHV0IGZyb20gdGhlIGtleSBkZXJpdmF0aW9uIHNlcXVlbmNlIGRlZmluZWQgaW4KKyAqIFdVU0IxLjBbNi41LjFdLgorICovCitzdHJ1Y3Qgd3VzYl9rZXlkdnRfb3V0IHsKKwl1OCBrY2tbMTZdOworCXU4IHB0a1sxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBQc2V1ZG8gUmFuZG9tIEZ1bmN0aW9uIFdVU0IxLjBbNi41XSAqLworZXh0ZXJuIGludCB3dXNiX2NyeXB0b19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgd3VzYl9jcnlwdG9fZXhpdCh2b2lkKTsKK2V4dGVybiBzc2l6ZV90IHd1c2JfcHJmKHZvaWQgKm91dCwgc2l6ZV90IG91dF9zaXplLAorCQkJY29uc3QgdTgga2V5WzE2XSwgY29uc3Qgc3RydWN0IGFlc19jY21fbm9uY2UgKl9uLAorCQkJY29uc3Qgc3RydWN0IGFlc19jY21fbGFiZWwgKmEsCisJCQljb25zdCB2b2lkICpiLCBzaXplX3QgYmxlbiwgc2l6ZV90IGxlbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHd1c2JfcHJmXzY0KHZvaWQgKm91dCwgc2l6ZV90IG91dF9zaXplLCBjb25zdCB1OCBrZXlbMTZdLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGFlc19jY21fbm9uY2UgKm4sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2NjbV9sYWJlbCAqYSwKKwkJCSAgICAgIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBibGVuKQoreworCXJldHVybiB3dXNiX3ByZihvdXQsIG91dF9zaXplLCBrZXksIG4sIGEsIGIsIGJsZW4sIDY0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd3VzYl9wcmZfMTI4KHZvaWQgKm91dCwgc2l6ZV90IG91dF9zaXplLCBjb25zdCB1OCBrZXlbMTZdLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhZXNfY2NtX25vbmNlICpuLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhZXNfY2NtX2xhYmVsICphLAorCQkJICAgICAgIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBibGVuKQoreworCXJldHVybiB3dXNiX3ByZihvdXQsIG91dF9zaXplLCBrZXksIG4sIGEsIGIsIGJsZW4sIDEyOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHd1c2JfcHJmXzI1Nih2b2lkICpvdXQsIHNpemVfdCBvdXRfc2l6ZSwgY29uc3QgdTgga2V5WzE2XSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2NjbV9ub25jZSAqbiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2NjbV9sYWJlbCAqYSwKKwkJCSAgICAgICBjb25zdCB2b2lkICpiLCBzaXplX3QgYmxlbikKK3sKKwlyZXR1cm4gd3VzYl9wcmYob3V0LCBvdXRfc2l6ZSwga2V5LCBuLCBhLCBiLCBibGVuLCAyNTYpOworfQorCisvKiBLZXkgZGVyaXZhdGlvbiBXVVNCMS4wWzYuNS4xXSAqLworc3RhdGljIGlubGluZSBpbnQgd3VzYl9rZXlfZGVyaXZlKHN0cnVjdCB3dXNiX2tleWR2dF9vdXQgKmtleWR2dF9vdXQsCisJCQkJICBjb25zdCB1OCBrZXlbMTZdLAorCQkJCSAgY29uc3Qgc3RydWN0IGFlc19jY21fbm9uY2UgKm4sCisJCQkJICBjb25zdCBzdHJ1Y3Qgd3VzYl9rZXlkdnRfaW4gKmtleWR2dF9pbikKK3sKKwljb25zdCBzdHJ1Y3QgYWVzX2NjbV9sYWJlbCBhID0geyAuZGF0YSA9ICJQYWlyLXdpc2Uga2V5cyIgfTsKKwlyZXR1cm4gd3VzYl9wcmZfMjU2KGtleWR2dF9vdXQsIHNpemVvZigqa2V5ZHZ0X291dCksIGtleSwgbiwgJmEsCisJCQkgICAga2V5ZHZ0X2luLCBzaXplb2YoKmtleWR2dF9pbikpOworfQorCisvKgorICogT3V0LW9mLWJhbmQgTUlDIEdlbmVyYXRpb24gV1VTQjEuMFs2LjUuMl0KKyAqCisgKiBDb21wdXRlIHRoZSBNSUMgb3ZlciBAa2V5LCBAbiBhbmQgQGhzIGFuZCBwbGFjZSBpdCBpbiBAbWljX291dC4KKyAqCisgKiBAbWljX291dDogIFdoZXJlIHRvIHBsYWNlIHRoZSA4IGJ5dGUgTUlDIHRhZworICogQGtleTogICAgICBLQ0sgZnJvbSB0aGUgZGVyaXZhdGlvbiBwcm9jZXNzCisgKiBAbjogICAgICAgIENDTSBub25jZSwgbi0+c2ZuID09IDAsIFRLSUQgYXMgZXN0YWJsaXNoZWQgaW4gdGhlCisgKiAgICAgICAgICAgIHByb2Nlc3MuCisgKiBAaHM6ICAgICAgIEhhbmRzaGFrZSBzdHJ1Y3QgZm9yIHBoYXNlIDIgb2YgdGhlIDQtd2F5LgorICogICAgICAgICAgICBocy0+YlN0YXR1cyBhbmQgaHMtPmJSZXNlcnZlZCBhcmUgemVyby4KKyAqICAgICAgICAgICAgaHMtPmJNZXNzYWdlTnVtYmVyIGlzIDIgKFdVU0IxLjBbNy4zLjIuNS4yXQorICogICAgICAgICAgICBocy0+ZGVzdF9hZGRyIGlzIHRoZSBkZXZpY2UncyBVU0IgYWRkcmVzcyBwYWRkZWQgd2l0aCAwCisgKiAgICAgICAgICAgIGhzLT5zcmNfYWRkciBpcyB0aGUgaG9zdHMncyBVV0IgZGV2aWNlIGFkZHJlc3MKKyAqICAgICAgICAgICAgaHMtPm1pYyBpcyBpZ25vcmVkIChhcyB3ZSBjb21wdXRlIHRoYXQgdmFsdWUpLgorICovCitzdGF0aWMgaW5saW5lIGludCB3dXNiX29vYl9taWModTggbWljX291dFs4XSwgY29uc3QgdTgga2V5WzE2XSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2NjbV9ub25jZSAqbiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2hhbmRzaGFrZSAqaHMpCit7CisJY29uc3Qgc3RydWN0IGFlc19jY21fbGFiZWwgYSA9IHsgLmRhdGEgPSAib3V0LW9mLWJhbmRNSUMiIH07CisJcmV0dXJuIHd1c2JfcHJmXzY0KG1pY19vdXQsIDgsIGtleSwgbiwgJmEsCisJCQkgICBocywgc2l6ZW9mKCpocykgLSBzaXplb2YoaHMtPk1JQykpOworfQorCisjZW5kaWYgLyogI2lmbmRlZiBfX1dVU0JfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3V3Yi5oIGIvaW5jbHVkZS9saW51eC91d2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNjYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91d2IuaApAQCAtMCwwICsxLDc2NSBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogVVdCIEFQSQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogRklYTUU6IGRvYzogb3ZlcnZpZXcgb2YgdGhlIEFQSSwgZGlmZmVyZW50IHBhcnRzIGFuZCBwb2ludGVycworICovCisKKyNpZm5kZWYgX19MSU5VWF9fVVdCX0hfXworI2RlZmluZSBfX0xJTlVYX19VV0JfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvdXdiL3NwZWMuaD4KKworc3RydWN0IHV3Yl9kZXY7CitzdHJ1Y3QgdXdiX2JlY2FfZTsKK3N0cnVjdCB1d2JfcmM7CitzdHJ1Y3QgdXdiX3JzdjsKK3N0cnVjdCB1d2JfZGJnOworCisvKioKKyAqIHN0cnVjdCB1d2JfZGV2IC0gYSBVV0IgRGV2aWNlCisgKiBAcmM6IFVXQiBSYWRpbyBDb250cm9sbGVyIHRoYXQgZGlzY292ZXJlZCB0aGUgZGV2aWNlIChraW5kIG9mIGl0cworICogICAgIHBhcmVudCkuCisgKiBAYmNlOiBhIGJlYWNvbiBjYWNoZSBlbnRyeSBmb3IgdGhpcyBkZXZpY2U7IG9yIE5VTEwgaWYgdGhlIGRldmljZQorICogICAgIGlzIGEgbG9jYWwgcmFkaW8gY29udHJvbGxlci4KKyAqIEBtYWNfYWRkcjogdGhlIEVVSS00OCBhZGRyZXNzIG9mIHRoaXMgZGV2aWNlLgorICogQGRldl9hZGRyOiB0aGUgY3VycmVudCBEZXZBZGRyIHVzZWQgYnkgdGhpcyBkZXZpY2UuCisgKiBAYmVhY29uX3Nsb3Q6IHRoZSBzbG90IG51bWJlciB0aGUgYmVhY29uIGlzIHVzaW5nLgorICogQHN0cmVhbXM6IGJpdG1hcCBvZiBzdHJlYW1zIGFsbG9jYXRlZCB0byByZXNlcnZhdGlvbnMgdGFyZ2V0ZWQgYXQKKyAqICAgICB0aGlzIGRldmljZS4gIEZvciBhbiBSQywgdGhpcyBpcyB0aGUgc3RyZWFtcyBhbGxvY2F0ZWQgZm9yCisgKiAgICAgcmVzZXJ2YXRpb25zIHRhcmdldGVkIGF0IERldkFkZHJzLgorICoKKyAqIEEgVVdCIGRldmljZSBtYXkgZWl0aGVyIGJ5IGEgbmVpZ2hib3Igb3IgcGFydCBvZiBhIGxvY2FsIHJhZGlvCisgKiBjb250cm9sbGVyLgorICovCitzdHJ1Y3QgdXdiX2RldiB7CisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOworCXN0cnVjdCBkZXZpY2UgZGV2OworCXN0cnVjdCB1d2JfcmMgKnJjOwkJLyogcmFkaW8gY29udHJvbGxlciAqLworCXN0cnVjdCB1d2JfYmVjYV9lICpiY2U7CQkvKiBCZWFjb24gQ2FjaGUgRW50cnkgKi8KKworCXN0cnVjdCB1d2JfbWFjX2FkZHIgbWFjX2FkZHI7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBkZXZfYWRkcjsKKwlpbnQgYmVhY29uX3Nsb3Q7CisJREVDTEFSRV9CSVRNQVAoc3RyZWFtcywgVVdCX05VTV9TVFJFQU1TKTsKK307CisjZGVmaW5lIHRvX3V3Yl9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1d2JfZGV2LCBkZXYpCisKKy8qKgorICogVVdCIEhXQS9XSENJIFJhZGlvIENvbnRyb2wge0NvbW1hbmR8RXZlbnR9IEJsb2NrIGNvbnRleHQgSURzCisgKgorICogUkNbQ0VdQnMgaGF2ZSBhICdjb250ZXh0IElEJyBmaWVsZCB0aGF0IG1hdGNoZXMgdGhlIGNvbW1hbmQgd2l0aAorICogdGhlIGV2ZW50IHJlY2VpdmVkIHRvIGNvbmZpcm0gaXQuCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgY29udGV4dCBJRHMKKyAqLworZW51bSB7IFVXQl9SQ19DVFhfTUFYID0gMjU2IH07CisKKworLyoqIE5vdGlmaWNhdGlvbiBjaGFpbiBoZWFkIGZvciBVV0IgZ2VuZXJhdGVkIGV2ZW50cyB0byBsaXN0ZW5lcnMgKi8KK3N0cnVjdCB1d2Jfbm90aWZzX2NoYWluIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG11dGV4IG11dGV4OworfTsKKworLyoqCisgKiBzdHJ1Y3QgdXdiX21hc19ibSAtIGEgYml0bWFwIG9mIGFsbCBNQVMgaW4gYSBzdXBlcmZyYW1lCisgKiBAYm06IGEgYml0bWFwIG9mIGxlbmd0aCAjVVdCX05VTV9NQVMKKyAqLworc3RydWN0IHV3Yl9tYXNfYm0geworCURFQ0xBUkVfQklUTUFQKGJtLCBVV0JfTlVNX01BUyk7Cit9OworCisvKioKKyAqIHV3Yl9yc3Zfc3RhdGUgLSBVV0IgUmVzZXJ2YXRpb24gc3RhdGUuCisgKgorICogTk9ORSAtIHJlc2VydmF0aW9uIGlzIG5vdCBhY3RpdmUgKG5vIERSUCBJRSBiZWluZyB0cmFuc21pdHRlZCkuCisgKgorICogT3duZXIgcmVzZXJ2YXRpb24gc3RhdGVzOgorICoKKyAqIElOSVRJQVRFRCAtIG93bmVyIGhhcyBzZW50IGFuIGluaXRpYWwgRFJQIHJlcXVlc3QuCisgKiBQRU5ESU5HIC0gdGFyZ2V0IHJlc3BvbmRlZCB3aXRoIHBlbmRpbmcgUmVhc29uIENvZGUuCisgKiBNT0RJRklFRCAtIHJlc2VydmF0aW9uIG1hbmFnZXIgaXMgbW9kaWZ5aW5nIGFuIGVzdGFibGlzaGVkCisgKiByZXNlcnZhdGlvbiB3aXRoIGEgZGlmZmVyZW50IE1BUyBhbGxvY2F0aW9uLgorICogRVNUQUJMSVNIRUQgLSB0aGUgcmVzZXJ2YXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQuCisgKgorICogVGFyZ2V0IHJlc2VydmF0aW9uIHN0YXRlczoKKyAqCisgKiBERU5JRUQgLSByZXF1ZXN0IGlzIGRlbmllZC4KKyAqIEFDQ0VQVEVEIC0gcmVxdWVzdCBpcyBhY2NlcHRlZC4KKyAqIFBFTkRJTkcgLSBQQUwgaGFzIHlldCB0byBtYWtlIGEgZGVjaXNpb24gdG8gd2hldGhlciB0byBhY2NlcHQgb3IKKyAqIGRlbnkuCisgKgorICogRklYTUU6IGZ1cnRoZXIgdGFyZ2V0IHN0YXRlcyBUQkQuCisgKi8KK2VudW0gdXdiX3Jzdl9zdGF0ZSB7CisJVVdCX1JTVl9TVEFURV9OT05FLAorCVVXQl9SU1ZfU1RBVEVfT19JTklUSUFURUQsCisJVVdCX1JTVl9TVEFURV9PX1BFTkRJTkcsCisJVVdCX1JTVl9TVEFURV9PX01PRElGSUVELAorCVVXQl9SU1ZfU1RBVEVfT19FU1RBQkxJU0hFRCwKKwlVV0JfUlNWX1NUQVRFX1RfQUNDRVBURUQsCisJVVdCX1JTVl9TVEFURV9UX0RFTklFRCwKKwlVV0JfUlNWX1NUQVRFX1RfUEVORElORywKKworCVVXQl9SU1ZfU1RBVEVfTEFTVCwKK307CisKK2VudW0gdXdiX3Jzdl90YXJnZXRfdHlwZSB7CisJVVdCX1JTVl9UQVJHRVRfREVWLAorCVVXQl9SU1ZfVEFSR0VUX0RFVkFERFIsCit9OworCisvKioKKyAqIHN0cnVjdCB1d2JfcnN2X3RhcmdldCAtIHRoZSB0YXJnZXQgb2YgYSByZXNlcnZhdGlvbi4KKyAqCisgKiBSZXNlcnZhdGlvbnMgdW5pY2FzdCBhbmQgdGFyZ2V0ZWQgYXQgYSBzaW5nbGUgZGV2aWNlCisgKiAoVVdCX1JTVl9UQVJHRVRfREVWKTsgb3IgKGUuZy4sIGluIHRoZSBjYXNlIG9mIFdVU0IpIHRhcmdldGVkIGF0IGEKKyAqIHNwZWNpZmljIChwcml2YXRlKSBEZXZBZGRyIChVV0JfUlNWX1RBUkdFVF9ERVZBRERSKS4KKyAqLworc3RydWN0IHV3Yl9yc3ZfdGFyZ2V0IHsKKwllbnVtIHV3Yl9yc3ZfdGFyZ2V0X3R5cGUgdHlwZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB1d2JfZGV2ICpkZXY7CisJCXN0cnVjdCB1d2JfZGV2X2FkZHIgZGV2YWRkcjsKKwl9OworfTsKKworLyoKKyAqIE51bWJlciBvZiBzdHJlYW1zIHJlc2VydmVkIGZvciByZXNlcnZhdGlvbnMgdGFyZ2V0ZWQgYXQgRGV2QWRkcnMuCisgKi8KKyNkZWZpbmUgVVdCX05VTV9HTE9CQUxfU1RSRUFNUyAxCisKK3R5cGVkZWYgdm9pZCAoKnV3Yl9yc3ZfY2JfZikoc3RydWN0IHV3Yl9yc3YgKnJzdik7CisKKy8qKgorICogc3RydWN0IHV3Yl9yc3YgLSBhIERSUCByZXNlcnZhdGlvbgorICoKKyAqIERhdGEgc3RydWN0dXJlIG1hbmFnZW1lbnQ6CisgKgorICogQHJjOiAgICAgICAgICAgICB0aGUgcmFkaW8gY29udHJvbGxlciB0aGlzIHJlc2VydmF0aW9uIGlzIGZvcgorICogICAgICAgICAgICAgICAgICAoYXMgdGFyZ2V0IG9yIG93bmVyKQorICogQHJjX25vZGU6ICAgICAgICBhIGxpc3Qgbm9kZSBmb3IgdGhlIFJDCisgKiBAcGFsX25vZGU6ICAgICAgIGEgbGlzdCBub2RlIGZvciB0aGUgUEFMCisgKgorICogT3duZXIgYW5kIHRhcmdldCBwYXJhbWV0ZXJzOgorICoKKyAqIEBvd25lcjogICAgICAgICAgdGhlIFVXQiBkZXZpY2Ugb3duaW5nIHRoaXMgcmVzZXJ2YXRpb24KKyAqIEB0YXJnZXQ6ICAgICAgICAgdGhlIHRhcmdldCBVV0IgZGV2aWNlCisgKiBAdHlwZTogICAgICAgICAgIHJlc2VydmF0aW9uIHR5cGUKKyAqCisgKiBPd25lciBwYXJhbWV0ZXJzOgorICoKKyAqIEBtYXhfbWFzOiAgICAgICAgbWF4aXVtdW0gbnVtYmVyIG9mIE1BUworICogQG1pbl9tYXM6ICAgICAgICBtaW5pbXVtIG51bWJlciBvZiBNQVMKKyAqIEBzcGFyc2l0eTogICAgICAgb3duZXIgc2VsZWN0ZWQgc3BhcnNpdHkKKyAqIEBpc19tdWx0aWNhc3Q6ICAgdHJ1ZSBpZmYgbXVsdGljYXN0CisgKgorICogQGNhbGxiYWNrOiAgICAgICBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSByZXNlcnZhdGlvbiBjb21wbGV0ZXMKKyAqIEBwYWxfcHJpdjogICAgICAgcHJpdmF0ZSBkYXRhIGZvciB0aGUgUEFMIG1ha2luZyB0aGUgcmVzZXJ2YXRpb24KKyAqCisgKiBSZXNlcnZhdGlvbiBzdGF0dXM6CisgKgorICogQHN0YXR1czogICAgICAgICBuZWdvdGlhdGlvbiBzdGF0dXMKKyAqIEBzdHJlYW06ICAgICAgICAgc3RyZWFtIGluZGV4IGFsbG9jYXRlZCBmb3IgdGhpcyByZXNlcnZhdGlvbgorICogQG1hczogICAgICAgICAgICByZXNlcnZlZCBNQVMKKyAqIEBkcnBfaWU6ICAgICAgICAgdGhlIERSUCBJRQorICogQGllX3ZhbGlkOiAgICAgICB0cnVlIGlmZiB0aGUgRFJQIElFIG1hdGNoZXMgdGhlIHJlc2VydmF0aW9uIHBhcmFtZXRlcnMKKyAqCisgKiBEUlAgcmVzZXJ2YXRpb25zIGFyZSB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IHRoZSBvd25lciwgdGFyZ2V0IGFuZAorICogc3RyZWFtIGluZGV4LiAgSG93ZXZlciwgd2hlbiB1c2luZyBhIERldkFkZHIgYXMgYSB0YXJnZXQgKGUuZy4sIGZvcgorICogYSBXVVNCIGNsdXN0ZXIgcmVzZXJ2YXRpb24pIHRoZSByZXNwb25zZXMgbWF5IGJlIHJlY2VpdmVkIGZyb20KKyAqIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgRGV2QWRkcnMuICBJbiB0aGlzIGNhc2UsIHJlc2VydmF0aW9ucyBhcmUKKyAqIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkganVzdCB0aGUgc3RyZWFtIGluZGV4LiAgQSBudW1iZXIgb2Ygc3RyZWFtCisgKiBpbmRleGVzIChVV0JfTlVNX0dMT0JBTF9TVFJFQU1TKSBhcmUgcmVzZXJ2ZWQgZm9yIHRoaXMuCisgKi8KK3N0cnVjdCB1d2JfcnN2IHsKKwlzdHJ1Y3QgdXdiX3JjICpyYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJjX25vZGU7CisJc3RydWN0IGxpc3RfaGVhZCBwYWxfbm9kZTsKKworCXN0cnVjdCB1d2JfZGV2ICpvd25lcjsKKwlzdHJ1Y3QgdXdiX3Jzdl90YXJnZXQgdGFyZ2V0OworCWVudW0gdXdiX2RycF90eXBlIHR5cGU7CisJaW50IG1heF9tYXM7CisJaW50IG1pbl9tYXM7CisJaW50IHNwYXJzaXR5OworCWJvb2wgaXNfbXVsdGljYXN0OworCisJdXdiX3Jzdl9jYl9mIGNhbGxiYWNrOworCXZvaWQgKnBhbF9wcml2OworCisJZW51bSB1d2JfcnN2X3N0YXRlIHN0YXRlOworCXU4IHN0cmVhbTsKKwlzdHJ1Y3QgdXdiX21hc19ibSBtYXM7CisJc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZTsKKwlib29sIGllX3ZhbGlkOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCWJvb2wgZXhwaXJlZDsKK307CisKK3N0YXRpYyBjb25zdAorc3RydWN0IHV3Yl9tYXNfYm0gdXdiX21hc19ibV96ZXJvID0geyAuYm0gPSB7IDAgfSB9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdXdiX21hc19ibV9jb3B5X2xlKHZvaWQgKmRzdCwgY29uc3Qgc3RydWN0IHV3Yl9tYXNfYm0gKm1hcykKK3sKKwliaXRtYXBfY29weV9sZShkc3QsIG1hcy0+Ym0sIFVXQl9OVU1fTUFTKTsKK30KKworLyoqCisgKiBzdHJ1Y3QgdXdiX2RycF9hdmFpbCAtIGEgcmFkaW8gY29udHJvbGxlcidzIHZpZXcgb2YgTUFTIHVzYWdlCisgKiBAZ2xvYmFsOiAgIE1BUyB1bnVzZWQgYnkgbmVpZ2hib3JzIChleGNsdWRpbmcgcmVzZXJ2YXRpb25zIHRhcmdldHRlZAorICogICAgICAgICAgICBvciBvd25lZCBieSB0aGUgbG9jYWwgcmFkaW8gY29udHJvbGxlcikgb3IgdGhlIGJlYW9uIHBlcmlvZAorICogQGxvY2FsOiAgICBNQVMgdW51c2VkIGJ5IGxvY2FsIGVzdGFibGlzaGVkIHJlc2VydmF0aW9ucworICogQHBlbmRpbmc6ICBNQVMgdW51c2VkIGJ5IGxvY2FsIHBlbmRpbmcgcmVzZXJ2YXRpb25zCisgKiBAaWU6ICAgICAgIERSUCBBdmFpbGFiaWxpdHkgSUUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGJlYWNvbgorICogQGllX3ZhbGlkOiB0cnVlIGlmZiBAaWUgaXMgdmFsaWQgYW5kIGRvZXMgbm90IG5lZWQgdG8gcmVnZW5lcmF0ZWQgZnJvbQorICogICAgICAgICAgICBAZ2xvYmFsIGFuZCBAbG9jYWwKKyAqCisgKiBFYWNoIHJhZGlvIGNvbnRyb2xsZXIgbWFpbnRhaW5zIGEgdmlldyBvZiBNQVMgdXNhZ2Ugb3IKKyAqIGF2YWlsYWJpbGl0eS4gTUFTIGF2YWlsYWJsZSBmb3IgYSBuZXcgcmVzZXJ2YXRpb24gYXJlIGRldGVybWluZWQKKyAqIGZyb20gdGhlIGludGVyc2VjdGlvbiBvZiBAZ2xvYmFsLCBAbG9jYWwsIGFuZCBAcGVuZGluZy4KKyAqCisgKiBUaGUgcmFkaW8gY29udHJvbGxlciBtdXN0IHRyYW5zbWl0IGEgRFJQIEF2YWlsYWJpbGl0eSBJRSB0aGF0J3MgdGhlCisgKiBpbnRlcnNlY3Rpb24gb2YgQGdsb2JhbCBhbmQgQGxvY2FsLgorICoKKyAqIEEgc2V0IGJpdCBpbmRpY2F0ZXMgdGhlIE1BUyBpcyB1bnVzZWQgYW5kIGF2YWlsYWJsZS4KKyAqCisgKiByYy0+cnN2c19tdXRleCBzaG91bGQgYmUgaGVsZCBiZWZvcmUgYWNjZXNzaW5nIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogW0VDTUEtMzY4XSBzZWN0aW9uIDE3LjQuMy4KKyAqLworc3RydWN0IHV3Yl9kcnBfYXZhaWwgeworCURFQ0xBUkVfQklUTUFQKGdsb2JhbCwgVVdCX05VTV9NQVMpOworCURFQ0xBUkVfQklUTUFQKGxvY2FsLCBVV0JfTlVNX01BUyk7CisJREVDTEFSRV9CSVRNQVAocGVuZGluZywgVVdCX05VTV9NQVMpOworCXN0cnVjdCB1d2JfaWVfZHJwX2F2YWlsIGllOworCWJvb2wgaWVfdmFsaWQ7Cit9OworCisKK2NvbnN0IGNoYXIgKnV3Yl9yc3Zfc3RhdGVfc3RyKGVudW0gdXdiX3Jzdl9zdGF0ZSBzdGF0ZSk7Citjb25zdCBjaGFyICp1d2JfcnN2X3R5cGVfc3RyKGVudW0gdXdiX2RycF90eXBlIHR5cGUpOworCitzdHJ1Y3QgdXdiX3JzdiAqdXdiX3Jzdl9jcmVhdGUoc3RydWN0IHV3Yl9yYyAqcmMsIHV3Yl9yc3ZfY2JfZiBjYiwKKwkJCSAgICAgICB2b2lkICpwYWxfcHJpdik7Cit2b2lkIHV3Yl9yc3ZfZGVzdHJveShzdHJ1Y3QgdXdiX3JzdiAqcnN2KTsKKworaW50IHV3Yl9yc3ZfZXN0YWJsaXNoKHN0cnVjdCB1d2JfcnN2ICpyc3YpOworaW50IHV3Yl9yc3ZfbW9kaWZ5KHN0cnVjdCB1d2JfcnN2ICpyc3YsCisJCSAgIGludCBtYXhfbWFzLCBpbnQgbWluX21hcywgaW50IHNwYXJzaXR5KTsKK3ZvaWQgdXdiX3Jzdl90ZXJtaW5hdGUoc3RydWN0IHV3Yl9yc3YgKnJzdik7CisKK3ZvaWQgdXdiX3Jzdl9hY2NlcHQoc3RydWN0IHV3Yl9yc3YgKnJzdiwgdXdiX3Jzdl9jYl9mIGNiLCB2b2lkICpwYWxfcHJpdik7CisKKy8qKgorICogUmFkaW8gQ29udHJvbCBJbnRlcmZhY2UgaW5zdGFuY2UKKyAqCisgKgorICogTGlmZSBjeWNsZSBydWxlczogdGhvc2Ugb2YgdGhlIFVXQiBEZXZpY2UuCisgKgorICogQGluZGV4OiAgICBhbiBpbmRleCBudW1iZXIgZm9yIHRoaXMgcmFkaW8gY29udHJvbGxlciwgYXMgdXNlZCBpbiB0aGUKKyAqICAgICAgICAgICAgZGV2aWNlIG5hbWUuCisgKiBAdmVyc2lvbjogIHZlcnNpb24gb2YgcHJvdG9jb2wgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlCisgKiBAcHJpdjogICAgIEJhY2tlbmQgaW1wbGVtZW50YXRpb247IHJ3IHdpdGggdXdiX2Rldi5kZXYuc2VtIHRha2VuLgorICogQGNtZDogICAgICBCYWNrZW5kIGltcGxlbWVudGF0aW9uIHRvIGV4ZWN1dGUgY29tbWFuZHM7IHJ3IGFuZCBjYWxsCisgKiAgICAgICAgICAgIG9ubHkgIHdpdGggdXdiX2Rldi5kZXYuc2VtIHRha2VuLgorICogQHJlc2V0OiAgICBIYXJkd2FyZSByZXNldCBvZiByYWRpbyBjb250cm9sbGVyIGFuZCBhbnkgUEFMIGNvbnRyb2xsZXJzLgorICogQGZpbHRlcjogICBCYWNrZW5kIGltcGxlbWVudGF0aW9uIHRvIG1hbmlwdWxhdGUgZGF0YSB0byBhbmQgZnJvbSBkZXZpY2UKKyAqICAgICAgICAgICAgdG8gYmUgY29tcGxpYW50IHRvIHNwZWNpZmljYXRpb24gYXNzdW1lZCBieSBkcml2ZXIgKFdIQ0kKKyAqICAgICAgICAgICAgMC45NSkuCisgKgorICogICAgICAgICAgICB1d2JfZGV2LmRldi5tdXRleCBpcyB1c2VkIHRvIGV4ZWN1dGUgY29tbWFuZHMgYW5kIHVwZGF0ZQorICogICAgICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmVzOyBjYW4ndCB1c2UgYSBzcGlubG9jaworICogICAgICAgICAgICBiZWNhdXNlIHJjLT5jbWQoKSBjYW4gc2xlZXAuCisgKiBAaWVzOiAgICAgICAgIFRoaXMgaXMgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXkgY2FjaGVpbmcgdGhlCisgKiAgICAgICAgICAgICAgIElFcyAoc2V0dGFibGUgYnkgdGhlIGhvc3QpIHRoYXQgdGhlIGJlYWNvbiBvZiB0aGlzCisgKiAgICAgICAgICAgICAgIHJhZGlvIGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IHNlbmRpbmcuCisgKgorICogICAgICAgICAgICAgICBJbiByZWFsaXR5LCB3ZSBzdG9yZSBoZXJlIHRoZSBmdWxsIGNvbW1hbmQgd2Ugc2V0IHRvCisgKiAgICAgICAgICAgICAgIHRoZSByYWRpbyBjb250cm9sbGVyICh3aGljaCBpcyBiYXNpY2FsbHkgYSBjb21tYW5kCisgKiAgICAgICAgICAgICAgIHByZWZpeCBmb2xsb3dlZCBieSBhbGwgdGhlIElFcyB0aGUgYmVhY29uIGN1cnJlbnRseQorICogICAgICAgICAgICAgICBjb250YWlucykuIFRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gcmVhbGxvYyBhbmQKKyAqICAgICAgICAgICAgICAgbWVtY3B5IHdoZW4gc2V0dGluZyBpdC4KKyAqCisgKiAgICAgICAgICAgICAgIFdlIHNldCB0aGlzIHVwIGluIHV3Yl9yY19pZV9zZXR1cCgpLCB3aGVyZSB3ZSBhbGxvYworICogICAgICAgICAgICAgICB0aGlzIHN0cnVjdCwgY2FsbCBnZXRfaWUoKSBbc28gd2Uga25vdyB3aGljaCBJRXMgYXJlCisgKiAgICAgICAgICAgICAgIGN1cnJlbnRseSBiZWluZyBzZW50LCBpZiBhbnldLgorICoKKyAqIEBpZXNfY2FwYWNpdHk6QW1vdW50IG9mIHNwYWNlIChpbiBieXRlcykgYWxsb2NhdGVkIGluIEBpZXMuIFRoZQorICogICAgICAgICAgICAgICBhbW91bnQgdXNlZCBpcyBnaXZlbiBieSBzaXplb2YoKmllcykgcGx1cyBpZXMtPndJRUxlbmd0aAorICogICAgICAgICAgICAgICAod2hpY2ggaXMgYSBsaXR0bGUgZW5kaWFuIHF1YW50aXR5IGFsbCB0aGUgdGltZSkuCisgKiBAaWVzX211dGV4OiAgIHByb3RlY3QgdGhlIElFIGNhY2hlCisgKiBAZGJnOiAgICAgICAgIGluZm9ybWF0aW9uIGZvciB0aGUgZGVidWcgaW50ZXJmYWNlCisgKi8KK3N0cnVjdCB1d2JfcmMgeworCXN0cnVjdCB1d2JfZGV2IHV3Yl9kZXY7CisJaW50IGluZGV4OworCXUxNiB2ZXJzaW9uOworCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJdm9pZCAqcHJpdjsKKwlpbnQgKCpzdGFydCkoc3RydWN0IHV3Yl9yYyAqcmMpOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgdXdiX3JjICpyYyk7CisJaW50ICgqY21kKShzdHJ1Y3QgdXdiX3JjICosIGNvbnN0IHN0cnVjdCB1d2JfcmNjYiAqLCBzaXplX3QpOworCWludCAoKnJlc2V0KShzdHJ1Y3QgdXdiX3JjICpyYyk7CisJaW50ICgqZmlsdGVyX2NtZCkoc3RydWN0IHV3Yl9yYyAqLCBzdHJ1Y3QgdXdiX3JjY2IgKiosIHNpemVfdCAqKTsKKwlpbnQgKCpmaWx0ZXJfZXZlbnQpKHN0cnVjdCB1d2JfcmMgKiwgc3RydWN0IHV3Yl9yY2ViICoqLCBjb25zdCBzaXplX3QsCisJCQkgICAgc2l6ZV90ICosIHNpemVfdCAqKTsKKworCXNwaW5sb2NrX3QgbmVoX2xvY2s7CQkvKiBwcm90ZWN0cyBuZWhfKiBhbmQgY3R4XyogKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG5laF9saXN0OwkvKiBPcGVuIE5FIGhhbmRsZXMgKi8KKwl1bnNpZ25lZCBsb25nIGN0eF9ibVtVV0JfUkNfQ1RYX01BWCAvIDggLyBzaXplb2YodW5zaWduZWQgbG9uZyldOworCXU4IGN0eF9yb2xsOworCisJaW50IGJlYWNvbmluZzsJCQkvKiBCZWFjb25pbmcgc3RhdGUgW2NoYW5uZWwgbnVtYmVyXSAqLworCWludCBzY2FubmluZzsKKwllbnVtIHV3Yl9zY2FuX3R5cGUgc2Nhbl90eXBlOjM7CisJdW5zaWduZWQgcmVhZHk6MTsKKwlzdHJ1Y3QgdXdiX25vdGlmc19jaGFpbiBub3RpZnNfY2hhaW47CisKKwlzdHJ1Y3QgdXdiX2RycF9hdmFpbCBkcnBfYXZhaWw7CisJc3RydWN0IGxpc3RfaGVhZCByZXNlcnZhdGlvbnM7CisJc3RydWN0IG11dGV4IHJzdnNfbXV0ZXg7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJzdl93b3JrcTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnN2X3VwZGF0ZV93b3JrOworCisJc3RydWN0IG11dGV4IGllc19tdXRleDsKKwlzdHJ1Y3QgdXdiX3JjX2NtZF9zZXRfaWUgKmllczsKKwlzaXplX3QgaWVzX2NhcGFjaXR5OworCisJc3BpbmxvY2tfdCBwYWxfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBhbHM7CisKKwlzdHJ1Y3QgdXdiX2RiZyAqZGJnOworfTsKKworCisvKioKKyAqIHN0cnVjdCB1d2JfcGFsIC0gYSBVV0IgUEFMCisgKiBAbmFtZTogICAgZGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhpcyBQQUwgKHd1c2hjLCB3bHAsIGV0Yy4pLgorICogQGRldmljZTogIGEgZGV2aWNlIGZvciB0aGUgUEFMLiAgVXNlZCB0byBsaW5rIHRoZSBQQUwgYW5kIHRoZSByYWRpbworICogICAgICAgICAgIGNvbnRyb2xsZXIgaW4gc3lzZnMuCisgKiBAbmV3X3JzdjogY2FsbGVkIHdoZW4gYSBwZWVyIHJlcXVlc3RzIGEgcmVzZXJ2YXRpb24gKG1heSBiZSBOVUxMIGlmCisgKiAgICAgICAgICAgdGhlIFBBTCBjYW5ub3QgYWNjZXB0IHJlc2VydmF0aW9uIHJlcXVlc3RzKS4KKyAqCisgKiBBIFByb3RvY29sIEFkYXB0YXRpb24gTGF5ZXIgKFBBTCkgaXMgYSB1c2VyIG9mIHRoZSBXaU1lZGlhIFVXQgorICogcmFkaW8gcGxhdGZvcm0gKGUuZy4sIFdVU0IsIFdMUCBvciBCbHVldG9vdGggVVdCIEFNUCkuCisgKgorICogVGhlIFBBTHMgdXNpbmcgYSByYWRpbyBjb250cm9sbGVyIG11c3QgcmVnaXN0ZXIgdGhlbXNlbHZlcyB0bworICogcGVybWl0IHRoZSBVV0Igc3RhY2sgdG8gY29vcmRpbmF0ZSB1c2FnZSBvZiB0aGUgcmFkaW8gYmV0d2VlbiB0aGUKKyAqIHZhcmlvdXMgUEFMcyBvciB0byBhbGxvdyBQQUxzIHRvIHJlc3BvbnNlIHRvIGNlcnRhaW4gcmVxdWVzdHMgZnJvbQorICogcGVlcnMuCisgKgorICogQSBzdHJ1Y3QgdXdiX3BhbCBzaG91bGQgYmUgZW1iZWRkZWQgaW4gYSBjb250YWluaW5nIHN0cnVjdHVyZQorICogYmVsb25naW5nIHRvIHRoZSBQQUwgYW5kIGluaXRpYWxpemVkIHdpdGggdXdiX3BhbF9pbml0KCkpLiAgRmllbGRzCisgKiBzaG91bGQgYmUgc2V0IGFwcHJvcHJpYXRlbHkgYnkgdGhlIFBBTCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIFBBTAorICogd2l0aCB1d2JfcGFsX3JlZ2lzdGVyKCkuCisgKi8KK3N0cnVjdCB1d2JfcGFsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisJdm9pZCAoKm5ld19yc3YpKHN0cnVjdCB1d2JfcnN2ICpyc3YpOworfTsKKwordm9pZCB1d2JfcGFsX2luaXQoc3RydWN0IHV3Yl9wYWwgKnBhbCk7CitpbnQgdXdiX3BhbF9yZWdpc3RlcihzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9wYWwgKnBhbCk7Cit2b2lkIHV3Yl9wYWxfdW5yZWdpc3RlcihzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9wYWwgKnBhbCk7CisKKy8qCisgKiBHZW5lcmFsIHB1YmxpYyBBUEkKKyAqCisgKiBUaGlzIEFQSSBjYW4gYmUgdXNlZCBieSBVV0IgZGV2aWNlIGRyaXZlcnMgb3IgYnkgdGhvc2UgaW1wbGVtZW50aW5nCisgKiBVV0IgUmFkaW8gQ29udHJvbGxlcnMKKyAqLworc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXZfZ2V0X2J5X2RldmFkZHIoc3RydWN0IHV3Yl9yYyAqcmMsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1d2JfZGV2X2FkZHIgKmRldmFkZHIpOworc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXZfZ2V0X2J5X3JjKHN0cnVjdCB1d2JfZGV2ICosIHN0cnVjdCB1d2JfcmMgKik7CitzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2Rldl9nZXQoc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYpCit7CisJZ2V0X2RldmljZSgmdXdiX2Rldi0+ZGV2KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1d2JfZGV2X3B1dChzdHJ1Y3QgdXdiX2RldiAqdXdiX2RldikKK3sKKwlwdXRfZGV2aWNlKCZ1d2JfZGV2LT5kZXYpOworfQorc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXZfdHJ5X2dldChzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYpOworCisvKioKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciAndXdiX3tkZXYscmN9X2ZvcmVhY2goKScuCisgKgorICogQGRldjogIExpbnV4IGRldmljZSBpbnN0YW5jZQorICogICAgICAgICd1d2JfZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHV3Yl9kZXYsIGRldiknCisgKiBAcHJpdjogRGF0YSBwYXNzZWQgYnkgdGhlIGNhbGxlciB0byAndXdiX3tkZXYscmN9X2ZvcmVhY2goKScuCisgKgorICogQHJldHVybnM6IDAgdG8gY29udGludWUgdGhlIGl0ZXJhdGlvbnMsIGFueSBvdGhlciB2YWwgdG8gc3RvcAorICogICAgICAgICAgIGl0ZXJhdGluZyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSB0byB0aGUgY2FsbGVyIG9mCisgKiAgICAgICAgICAgX2ZvcmVhY2goKS4KKyAqLwordHlwZWRlZiBpbnQgKCp1d2JfZGV2X2Zvcl9lYWNoX2YpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHJpdik7CitpbnQgdXdiX2Rldl9mb3JfZWFjaChzdHJ1Y3QgdXdiX3JjICpyYywgdXdiX2Rldl9mb3JfZWFjaF9mIGZ1bmMsIHZvaWQgKnByaXYpOworCitzdHJ1Y3QgdXdiX3JjICp1d2JfcmNfYWxsb2Modm9pZCk7CitzdHJ1Y3QgdXdiX3JjICp1d2JfcmNfZ2V0X2J5X2Rldihjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICopOworc3RydWN0IHV3Yl9yYyAqdXdiX3JjX2dldF9ieV9ncmFuZHBhKGNvbnN0IHN0cnVjdCBkZXZpY2UgKik7Cit2b2lkIHV3Yl9yY19wdXQoc3RydWN0IHV3Yl9yYyAqcmMpOworCit0eXBlZGVmIHZvaWQgKCp1d2JfcmNfY21kX2NiX2YpKHN0cnVjdCB1d2JfcmMgKnJjLCB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1d2JfcmNlYiAqcmVwbHksIHNzaXplX3QgcmVwbHlfc2l6ZSk7CisKK2ludCB1d2JfcmNfY21kX2FzeW5jKHN0cnVjdCB1d2JfcmMgKnJjLCBjb25zdCBjaGFyICpjbWRfbmFtZSwKKwkJICAgICBzdHJ1Y3QgdXdiX3JjY2IgKmNtZCwgc2l6ZV90IGNtZF9zaXplLAorCQkgICAgIHU4IGV4cGVjdGVkX3R5cGUsIHUxNiBleHBlY3RlZF9ldmVudCwKKwkJICAgICB1d2JfcmNfY21kX2NiX2YgY2IsIHZvaWQgKmFyZyk7Citzc2l6ZV90IHV3Yl9yY19jbWQoc3RydWN0IHV3Yl9yYyAqcmMsIGNvbnN0IGNoYXIgKmNtZF9uYW1lLAorCQkgICBzdHJ1Y3QgdXdiX3JjY2IgKmNtZCwgc2l6ZV90IGNtZF9zaXplLAorCQkgICBzdHJ1Y3QgdXdiX3JjZWIgKnJlcGx5LCBzaXplX3QgcmVwbHlfc2l6ZSk7Citzc2l6ZV90IHV3Yl9yY192Y21kKHN0cnVjdCB1d2JfcmMgKnJjLCBjb25zdCBjaGFyICpjbWRfbmFtZSwKKwkJICAgIHN0cnVjdCB1d2JfcmNjYiAqY21kLCBzaXplX3QgY21kX3NpemUsCisJCSAgICB1OCBleHBlY3RlZF90eXBlLCB1MTYgZXhwZWN0ZWRfZXZlbnQsCisJCSAgICBzdHJ1Y3QgdXdiX3JjZWIgKipwcmVwbHkpOworc3NpemVfdCB1d2JfcmNfZ2V0X2llKHN0cnVjdCB1d2JfcmMgKiwgc3RydWN0IHV3Yl9yY19ldnRfZ2V0X2llICoqKTsKK2ludCB1d2JfYmdfam9pbmVkKHN0cnVjdCB1d2JfcmMgKnJjKTsKKworc2l6ZV90IF9fdXdiX2FkZHJfcHJpbnQoY2hhciAqLCBzaXplX3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKKworaW50IHV3Yl9yY19kZXZfYWRkcl9zZXQoc3RydWN0IHV3Yl9yYyAqLCBjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICopOworaW50IHV3Yl9yY19kZXZfYWRkcl9nZXQoc3RydWN0IHV3Yl9yYyAqLCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICopOworaW50IHV3Yl9yY19tYWNfYWRkcl9zZXQoc3RydWN0IHV3Yl9yYyAqLCBjb25zdCBzdHJ1Y3QgdXdiX21hY19hZGRyICopOworaW50IHV3Yl9yY19tYWNfYWRkcl9nZXQoc3RydWN0IHV3Yl9yYyAqLCBzdHJ1Y3QgdXdiX21hY19hZGRyICopOworaW50IF9fdXdiX21hY19hZGRyX2Fzc2lnbmVkX2NoZWNrKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKTsKK2ludCBfX3V3Yl9kZXZfYWRkcl9hc3NpZ25lZF9jaGVjayhzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKik7CisKKy8qIFByaW50IGluIEBidWYgYSBwcmV0dHkgcmVwciBvZiBAYWRkciAqLworc3RhdGljIGlubGluZSBzaXplX3QgdXdiX2Rldl9hZGRyX3ByaW50KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLAorCQkJCQljb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICphZGRyKQoreworCXJldHVybiBfX3V3Yl9hZGRyX3ByaW50KGJ1ZiwgYnVmX3NpemUsIGFkZHItPmRhdGEsIDApOworfQorCisvKiBQcmludCBpbiBAYnVmIGEgcHJldHR5IHJlcHIgb2YgQGFkZHIgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHV3Yl9tYWNfYWRkcl9wcmludChjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwKKwkJCQkJY29uc3Qgc3RydWN0IHV3Yl9tYWNfYWRkciAqYWRkcikKK3sKKwlyZXR1cm4gX191d2JfYWRkcl9wcmludChidWYsIGJ1Zl9zaXplLCBhZGRyLT5kYXRhLCAxKTsKK30KKworLyogQHJldHVybnMgMCBpZiBkZXZpY2UgYWRkcmVzc2VzIEBhZGRyMiBhbmQgQGFkZHIxIGFyZSBlcXVhbCAqLworc3RhdGljIGlubGluZSBpbnQgdXdiX2Rldl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICphZGRyMSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdXdiX2Rldl9hZGRyICphZGRyMikKK3sKKwlyZXR1cm4gbWVtY21wKGFkZHIxLCBhZGRyMiwgc2l6ZW9mKCphZGRyMSkpOworfQorCisvKiBAcmV0dXJucyAwIGlmIE1BQyBhZGRyZXNzZXMgQGFkZHIyIGFuZCBAYWRkcjEgYXJlIGVxdWFsICovCitzdGF0aWMgaW5saW5lIGludCB1d2JfbWFjX2FkZHJfY21wKGNvbnN0IHN0cnVjdCB1d2JfbWFjX2FkZHIgKmFkZHIxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB1d2JfbWFjX2FkZHIgKmFkZHIyKQoreworCXJldHVybiBtZW1jbXAoYWRkcjEsIGFkZHIyLCBzaXplb2YoKmFkZHIxKSk7Cit9CisKKy8qIEByZXR1cm5zICEwIGlmIGEgTUFDIEBhZGRyIGlzIGEgYnJvYWRjYXN0IGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV3Yl9tYWNfYWRkcl9iY2FzdChjb25zdCBzdHJ1Y3QgdXdiX21hY19hZGRyICphZGRyKQoreworCXN0cnVjdCB1d2JfbWFjX2FkZHIgYmNhc3QgPSB7CisJCS5kYXRhID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0KKwl9OworCXJldHVybiAhdXdiX21hY19hZGRyX2NtcChhZGRyLCAmYmNhc3QpOworfQorCisvKiBAcmV0dXJucyAhMCBpZiBhIE1BQyBAYWRkciBpcyBhbGwgemVyb2VzKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV3Yl9tYWNfYWRkcl91bnNldChjb25zdCBzdHJ1Y3QgdXdiX21hY19hZGRyICphZGRyKQoreworCXN0cnVjdCB1d2JfbWFjX2FkZHIgdW5zZXQgPSB7CisJCS5kYXRhID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KKwl9OworCXJldHVybiAhdXdiX21hY19hZGRyX2NtcChhZGRyLCAmdW5zZXQpOworfQorCisvKiBAcmV0dXJucyAhMCBpZiB0aGUgYWRkcmVzcyBpcyBpbiB1c2UuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIF9fdXdiX2Rldl9hZGRyX2Fzc2lnbmVkKHN0cnVjdCB1d2JfcmMgKnJjLAorCQkJCQkgICAgICAgc3RydWN0IHV3Yl9kZXZfYWRkciAqYWRkcikKK3sKKwlyZXR1cm4gdXdiX2Rldl9mb3JfZWFjaChyYywgX191d2JfZGV2X2FkZHJfYXNzaWduZWRfY2hlY2ssIGFkZHIpOworfQorCisvKgorICogVVdCIFJhZGlvIENvbnRyb2xsZXIgQVBJCisgKgorICogVGhpcyBBUEkgaXMgdXNlZCAoaW4gYWRkaXRpb24gdG8gdGhlIGdlbmVyYWwgQVBJKSB0byBpbXBsZW1lbnQgVVdCCisgKiBSYWRpbyBDb250cm9sbGVycy4KKyAqLwordm9pZCB1d2JfcmNfaW5pdChzdHJ1Y3QgdXdiX3JjICopOworaW50IHV3Yl9yY19hZGQoc3RydWN0IHV3Yl9yYyAqLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJjX3ByaXYpOwordm9pZCB1d2JfcmNfcm0oc3RydWN0IHV3Yl9yYyAqKTsKK3ZvaWQgdXdiX3JjX25laF9ncm9rKHN0cnVjdCB1d2JfcmMgKiwgdm9pZCAqLCBzaXplX3QpOwordm9pZCB1d2JfcmNfbmVoX2Vycm9yKHN0cnVjdCB1d2JfcmMgKiwgaW50KTsKK3ZvaWQgdXdiX3JjX3Jlc2V0X2FsbChzdHJ1Y3QgdXdiX3JjICpyYyk7CisKKy8qKgorICogdXdiX3Jzdl9pc19vd25lciAtIGlzIHRoZSBvd25lciBvZiB0aGlzIHJlc2VydmF0aW9uIHRoZSBSQz8KKyAqIEByc3Y6IHRoZSByZXNlcnZhdGlvbgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdXdiX3Jzdl9pc19vd25lcihzdHJ1Y3QgdXdiX3JzdiAqcnN2KQoreworCXJldHVybiByc3YtPm93bmVyID09ICZyc3YtPnJjLT51d2JfZGV2OworfQorCisvKioKKyAqIEV2ZW50cyBnZW5lcmF0ZWQgYnkgVVdCIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhbnkgbGlzdGVuZXJzCisgKgorICogSGlnaGVyIGxheWVycyBjYW4gcmVnaXN0ZXIgY2FsbGJhY2sgZnVuY3Rpb25zIHdpdGggdGhlIHJhZGlvCisgKiBjb250cm9sbGVyIHVzaW5nIHV3Yl9ub3RpZnNfcmVnaXN0ZXIoKS4gVGhlIHJhZGlvIGNvbnRyb2xsZXIKKyAqIG1haW50YWlucyBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgaGFuZGxlcnMgYW5kIHdpbGwgbm90aWZ5IGFsbAorICogbm9kZXMgd2hlbiBhbiBldmVudCBvY2N1cnMuCisgKi8KK2VudW0gdXdiX25vdGlmcyB7CisJVVdCX05PVElGX0JHX0pPSU4gPSAwLAkvKiByYWRpbyBjb250cm9sbGVyIGpvaW5lZCBhIGJlYWNvbiBncm91cCAqLworCVVXQl9OT1RJRl9CR19MRUFWRSA9IDEsCS8qIHJhZGlvIGNvbnRyb2xsZXIgbGVmdCBhIGJlYWNvbiBncm91cCAqLworCVVXQl9OT1RJRl9PTkFJUiwKKwlVV0JfTk9USUZfT0ZGQUlSLAorfTsKKworLyogQ2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoIFVXQiAqLworc3RydWN0IHV3Yl9ub3RpZnNfaGFuZGxlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJdm9pZCAoKmNiKSh2b2lkICosIHN0cnVjdCB1d2JfZGV2ICosIGVudW0gdXdiX25vdGlmcyk7CisJdm9pZCAqZGF0YTsKK307CisKK2ludCB1d2Jfbm90aWZzX3JlZ2lzdGVyKHN0cnVjdCB1d2JfcmMgKiwgc3RydWN0IHV3Yl9ub3RpZnNfaGFuZGxlciAqKTsKK2ludCB1d2Jfbm90aWZzX2RlcmVnaXN0ZXIoc3RydWN0IHV3Yl9yYyAqLCBzdHJ1Y3QgdXdiX25vdGlmc19oYW5kbGVyICopOworCisKKy8qKgorICogVVdCIHJhZGlvIGNvbnRyb2xsZXIgRXZlbnQgU2l6ZSBFbnRyeSAoZm9yIGNyZWF0aW5nIGVudHJ5IHRhYmxlcykKKyAqCisgKiBXVVNCIGFuZCBXSENJIGRlZmluZSBldmVudHMgYW5kIG5vdGlmaWNhdGlvbnMsIGFuZCB0aGV5IG1pZ2h0IGhhdmUKKyAqIGZpeGVkIG9yIHZhcmlhYmxlIHNpemUuCisgKgorICogRWFjaCBldmVudC9ub3RpZmljYXRpb24gaGFzIGEgc2l6ZSB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkga25vd24KKyAqIGluIGFkdmFuY2UgYmFzZWQgb24gdGhlIGV2ZW50IGNvZGUuIEFzIHdlbGwsIHZlbmRvciBzcGVjaWZpYworICogZXZlbnRzL25vdGlmaWNhdGlvbnMgd2lsbCBoYXZlIGEgc2l6ZSBpbXBvc3NpYmxlIHRvIGRldGVybWluZQorICogdW5sZXNzIHdlIGtub3cgYWJvdXQgdGhlIGRldmljZSdzIHNwZWNpZmljIGRldGFpbHMuCisgKgorICogSXQgd2FzIHdheSB0b28gc21hcnQgb2YgdGhlIHNwZWMgd3JpdGVycyBub3QgdG8gdGhpbmsgdGhhdCBpdCB3b3VsZAorICogYmUgaW1wb3NzaWJsZSBmb3IgYSBnZW5lcmljIGRyaXZlciB0byBza2lwIG92ZXIgdmVuZG9yIHNwZWNpZmljCisgKiBldmVudHMvbm90aWZpY2F0aW9ucyBpZiB0aGVyZSBhcmUgbm8gTEVOR1RIIGZpZWxkcyBpbiB0aGUgSEVBREVSIG9mCisgKiBlYWNoIG1lc3NhZ2UuLi50aGUgdHJhbnNhY3Rpb24gc2l6ZSBjYW5ub3QgYmUgY291bnRlZCBvbiBhcyB0aGUKKyAqIHNwZWMgZG9lcyBub3QgZm9yYmlkIHRvIHBhY2sgbW9yZSB0aGFuIG9uZSBldmVudCBpbiBhIHNpbmdsZQorICogdHJhbnNhY3Rpb24uCisgKgorICogVGh1cywgd2UgZ3Vlc3Mgc2l6ZXMgd2l0aCB0YWJsZXMgKG9yIGZvciBldmVudHMsIHdoZW4geW91IGtub3cgdGhlCisgKiBzaXplIGFoZWFkIG9mIHRpbWUgeW91IGNhbiB1c2UgdXdiX3JjX25laF9leHRyYV9zaXplKigpKS4gV2UKKyAqIHJlZ2lzdGVyIHRhYmxlcyB3aXRoIHRoZSBrbm93biBldmVudHMgYW5kIHRoZWlyIHNpemVzLCBhbmQgdGhlbiB3ZQorICogdHJhdmVyc2UgdGhvc2UgdGFibGVzLiBGb3IgdGhvc2Ugd2l0aCB2YXJpYWJsZSBsZW5ndGgsIHdlIHByb3ZpZGUgYQorICogd2F5IHRvIGxvb2t1cCB0aGUgc2l6ZSBpbnNpZGUgdGhlIGV2ZW50L25vdGlmaWNhdGlvbidzCisgKiBwYXlsb2FkLiBUaGlzIGFsbG93cyBkZXZpY2Utc3BlY2lmaWMgZXZlbnQgc2l6ZSB0YWJsZXMgdG8gYmUKKyAqIHJlZ2lzdGVyZWQuCisgKgorICogQHNpemU6ICAgU2l6ZSBvZiB0aGUgcGF5bG9hZAorICoKKyAqIEBvZmZzZXQ6IGlmICE9IDAsIGF0IG9mZnNldCBAb2Zmc2V0LTEgc3RhcnRzIGEgZmllbGQgd2l0aCBhIGxlbmd0aAorICogICAgICAgICAgdGhhdCBoYXMgdG8gYmUgYWRkZWQgdG8gQHNpemUuIFRoZSBmb3JtYXQgb2YgdGhlIGZpZWxkIGlzCisgKiAgICAgICAgICBnaXZlbiBieSBAdHlwZS4KKyAqCisgKiBAdHlwZTogICBUeXBlIGFuZCBsZW5ndGggb2YgdGhlIG9mZnNldCBmaWVsZC4gTW9zdCBjb21tb24gaXMgTEUgMTYKKyAqICAgICAgICAgIGJpdHMgKHRoYXQncyB3aHkgdGhhdCBpcyB6ZXJvKTsgb3RoZXJzIGFyZSB0aGVyZSBtb3N0bHkgdG8KKyAqICAgICAgICAgIGNvdmVyIGZvciBidWdzIGFuZCB3ZWlyZG9zLgorICovCitzdHJ1Y3QgdXdiX2VzdF9lbnRyeSB7CisJc2l6ZV90IHNpemU7CisJdW5zaWduZWQgb2Zmc2V0OworCWVudW0geyBVV0JfRVNUXzE2ID0gMCwgVVdCX0VTVF84ID0gMSB9IHR5cGU7Cit9OworCitpbnQgdXdiX2VzdF9yZWdpc3Rlcih1OCB0eXBlLCB1OCBjb2RlX2hpZ2gsIHUxNiB2ZW5kb3IsIHUxNiBwcm9kdWN0LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1d2JfZXN0X2VudHJ5ICosIHNpemVfdCBlbnRyaWVzKTsKK2ludCB1d2JfZXN0X3VucmVnaXN0ZXIodTggdHlwZSwgdTggY29kZV9oaWdoLCB1MTYgdmVuZG9yLCB1MTYgcHJvZHVjdCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1d2JfZXN0X2VudHJ5ICosIHNpemVfdCBlbnRyaWVzKTsKK3NzaXplX3QgdXdiX2VzdF9maW5kX3NpemUoc3RydWN0IHV3Yl9yYyAqcmMsIGNvbnN0IHN0cnVjdCB1d2JfcmNlYiAqcmNlYiwKKwkJCSAgc2l6ZV90IGxlbik7CisKKy8qIC0tIE1pc2MgKi8KKworZW51bSB7CisJRURDX01BWF9FUlJPUlMgPSAxMCwKKwlFRENfRVJST1JfVElNRUZSQU1FID0gSFosCit9OworCisvKiBlcnJvciBkZW5zaXR5IGNvdW50ZXIgKi8KK3N0cnVjdCBlZGMgeworCXVuc2lnbmVkIGxvbmcgdGltZXN0YXJ0OworCXUxNiBlcnJvcmNvdW50OworfTsKKworc3RhdGljIGlubGluZQordm9pZCBlZGNfaW5pdChzdHJ1Y3QgZWRjICplZGMpCit7CisJZWRjLT50aW1lc3RhcnQgPSBqaWZmaWVzOworfQorCisvKiBDYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cmVkLgorICogVGhpcyBpcyB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBudW1iZXIgb2YgYWNjZXB0YWJsZSBlcnJvcnMgcGVyIHRpbWUKKyAqIHBlcmlvZCBoYXMgYmVlbiBleGNlZWRlZC4gSXQgaXMgbm90IGFjY3VyYXRlIGFzIHRoZXJlIGFyZSBjYXNlcyBpbiB3aGljaAorICogdGhpcyBzY2hlbWUgd2lsbCBub3Qgd29yaywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIHBlcmlvZGljIG9jY3VyZW5jZXMKKyAqIG9mIGVycm9ycyB0aGF0IHN0cmFkZGxlIHVwZGF0ZXMgdG8gdGhlIHN0YXJ0IHRpbWUuIFRoaXMgc2NoZW1lIGlzCisgKiBzdWZmaWNpZW50IGZvciBvdXIgdXNhZ2UuCisgKgorICogQHJldHVybnMgMSBpZiBtYXhpbXVtIGFjY2VwdGFibGUgZXJyb3JzIHBlciB0aW1lZnJhbWUgaGFzIGJlZW4gZXhjZWVkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGVkY19pbmMoc3RydWN0IGVkYyAqZXJyX2hpc3QsIHUxNiBtYXhfZXJyLCB1MTYgdGltZWZyYW1lKQoreworCXVuc2lnbmVkIGxvbmcgbm93OworCisJbm93ID0gamlmZmllczsKKwlpZiAobm93IC0gZXJyX2hpc3QtPnRpbWVzdGFydCA+IHRpbWVmcmFtZSkgeworCQllcnJfaGlzdC0+ZXJyb3Jjb3VudCA9IDE7CisJCWVycl9oaXN0LT50aW1lc3RhcnQgPSBub3c7CisJfSBlbHNlIGlmICgrK2Vycl9oaXN0LT5lcnJvcmNvdW50ID4gbWF4X2VycikgeworCQkJZXJyX2hpc3QtPmVycm9yY291bnQgPSAwOworCQkJZXJyX2hpc3QtPnRpbWVzdGFydCA9IG5vdzsKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKiBJbmZvcm1hdGlvbiBFbGVtZW50IGhhbmRsaW5nICovCisKKy8qIEZvciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHdyaXRpbmcgdG8gYSBidWZmZXIgd2hlbiBpdGVyYXRpbmcgKi8KK3N0cnVjdCB1d2JfYnVmX2N0eCB7CisJY2hhciAqYnVmOworCXNpemVfdCBieXRlcywgc2l6ZTsKK307CisKK3R5cGVkZWYgaW50ICgqdXdiX2llX2YpKHN0cnVjdCB1d2JfZGV2ICosIGNvbnN0IHN0cnVjdCB1d2JfaWVfaGRyICosCisJCQlzaXplX3QsIHZvaWQgKik7CitzdHJ1Y3QgdXdiX2llX2hkciAqdXdiX2llX25leHQodm9pZCAqKnB0ciwgc2l6ZV90ICpsZW4pOworc3NpemVfdCB1d2JfaWVfZm9yX2VhY2goc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYsIHV3Yl9pZV9mIGZuLCB2b2lkICpkYXRhLAorCQkJY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CitpbnQgdXdiX2llX2R1bXBfaGV4KHN0cnVjdCB1d2JfZGV2ICosIGNvbnN0IHN0cnVjdCB1d2JfaWVfaGRyICosCisJCSAgICBzaXplX3QsIHZvaWQgKik7CitpbnQgdXdiX3JjX3NldF9pZShzdHJ1Y3QgdXdiX3JjICosIHN0cnVjdCB1d2JfcmNfY21kX3NldF9pZSAqKTsKK3N0cnVjdCB1d2JfaWVfaGRyICp1d2JfaWVfbmV4dCh2b2lkICoqcHRyLCBzaXplX3QgKmxlbik7CisKKworLyoKKyAqIFRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzCisgKgorICogVVdCIHVzZXMgTFFJIGFuZCBSU1NJIChvbmUgYnl0ZSB2YWx1ZXMpIGZvciByZXBvcnRpbmcgcmFkaW8gc2lnbmFsCisgKiBzdHJlbmd0aCBhbmQgbGluZSBxdWFsaXR5IGluZGljYXRpb24uIFdlIGRvIHF1aWNrIGFuZCBkaXJ0eQorICogYXZlcmFnZXMgb2YgdGhvc2UuIFRoZXkgYXJlIHNpZ25lZCB2YWx1ZXMsIGJ0dy4KKyAqCisgKiBGb3IgOCBiaXQgcXVhbnRpdGllcywgd2Uga2VlcCB0aGUgbWluLCB0aGUgbWF4LCBhbiBhY2N1bXVsYXRvcgorICogKEBzaWdtYSkgYW5kIGEgIyBvZiBzYW1wbGVzLiBXaGVuIEBzYW1wbGVzIGdldHMgdG8gMjU1LCB3ZSBjb21wdXRlCisgKiB0aGUgYXZlcmFnZSAoQHNpZ21hIC8gQHNhbXBsZXMpLCBwbGFjZSBpdCBpbiBAc2lnbWEgYW5kIHJlc2V0CisgKiBAc2FtcGxlcyB0byAxIChzbyB3ZSB1c2UgaXQgYXMgdGhlIGZpcnN0IHNhbXBsZSkuCisgKgorICogTm93LCBzdGF0aXN0aWNhbGx5IHNwZWFraW5nLCBwcm9iYWJseSBJIGFtIGtpY2tpbmcgdGhlIGtpZG5leXMgb2YKKyAqIHNvbWUgYm9va3MgSSBoYXZlIGluIG15IHNoZWx2ZXMgY29sbGVjdGluZyBkdXN0LCBidXQgSSBqdXN0IHdhbnQgdG8KKyAqIGdldCBhbiBhcHByb3gsIG5vdCB0aGUgTm9iZWwuCisgKgorICogTE9DS0lORzogdGhlcmUgaXMgbm8gbG9ja2luZyBwZXIgc2UsIGJ1dCB3ZSB0cnkgdG8ga2VlcCBhIGxvY2tsZXNzCisgKiBzY2hlbWEuIE9ubHkgX2FkZF9zYW1wbGVzKCkgbW9kaWZpZXMgdGhlIHZhbHVlcy0tYXMgbG9uZyBhcyB5b3UKKyAqIGhhdmUgb3RoZXIgbG9ja2luZyBvbiB0b3AgdGhhdCBtYWtlcyBzdXJlIHRoYXQgbm8gdHdvIGNhbGxzIG9mCisgKiBfYWRkX3NhbXBsZSgpIGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lLCB0aGVuIHdlIGFyZSBmaW5lLiBOb3csIGZvcgorICogcmVzZXR0aW5nIHRoZSB2YWx1ZXMgd2UganVzdCBzZXQgQHNhbXBsZXMgdG8gMCBhbmQgdGhhdCBtYWtlcyB0aGUKKyAqIG5leHQgX2FkZF9zYW1wbGUoKSB0byBzdGFydCB3aXRoIGRlZmF1bHRzLiBSZWFkaW5nIHRoZSB2YWx1ZXMgaW4KKyAqIF9zaG93KCkgY3VycmVudGx5IGNhbiByYWNlLCBzbyB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNhbGxzIGFyZQorICogdW5kZXIgdGhlIHNhbWUgbG9jayB0aGF0IHByb3RlY3RzIGNhbGxzIHRvIF9hZGRfc2FtcGxlKCkuIEZJWE1FOgorICogY3VycmVudGx5IHVubG9ja2VkIChJdCBpcyBub3QgdWx0cmFwcmVjaXNlIGJ1dCBkb2VzIHRoZSB0cmljay4gQml0ZQorICogbWUpLgorICovCitzdHJ1Y3Qgc3RhdHMgeworCXM4IG1pbiwgbWF4OworCXMxNiBzaWdtYTsKKwlhdG9taWNfdCBzYW1wbGVzOworfTsKKworc3RhdGljIGlubGluZQordm9pZCBzdGF0c19pbml0KHN0cnVjdCBzdGF0cyAqc3RhdHMpCit7CisJYXRvbWljX3NldCgmc3RhdHMtPnNhbXBsZXMsIDApOworCXdtYigpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIHN0YXRzX2FkZF9zYW1wbGUoc3RydWN0IHN0YXRzICpzdGF0cywgczggc2FtcGxlKQoreworCXM4IG1pbiwgbWF4OworCXMxNiBzaWdtYTsKKwl1bnNpZ25lZCBzYW1wbGVzID0gYXRvbWljX3JlYWQoJnN0YXRzLT5zYW1wbGVzKTsKKwlpZiAoc2FtcGxlcyA9PSAwKSB7CS8qIGl0IHdhcyB6ZXJvIGJlZm9yZSwgc28gd2UgaW5pdGlhbGl6ZSAqLworCQltaW4gPSAxMjc7CisJCW1heCA9IC0xMjg7CisJCXNpZ21hID0gMDsKKwl9IGVsc2UgeworCQltaW4gPSBzdGF0cy0+bWluOworCQltYXggPSBzdGF0cy0+bWF4OworCQlzaWdtYSA9IHN0YXRzLT5zaWdtYTsKKwl9CisKKwlpZiAoc2FtcGxlIDwgbWluKQkvKiBjb21wdXRlIG5ldyB2YWx1ZXMgKi8KKwkJbWluID0gc2FtcGxlOworCWVsc2UgaWYgKHNhbXBsZSA+IG1heCkKKwkJbWF4ID0gc2FtcGxlOworCXNpZ21hICs9IHNhbXBsZTsKKworCXN0YXRzLT5taW4gPSBtaW47CS8qIGNvbW1pdCAqLworCXN0YXRzLT5tYXggPSBtYXg7CisJc3RhdHMtPnNpZ21hID0gc2lnbWE7CisJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZzdGF0cy0+c2FtcGxlcykgPiAyNTUpIHsKKwkJLyogd3JhcHBlZCBhcm91bmQhIHJlc2V0ICovCisJCXN0YXRzLT5zaWdtYSA9IHNpZ21hIC8gMjU2OworCQlhdG9taWNfc2V0KCZzdGF0cy0+c2FtcGxlcywgMSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHNzaXplX3Qgc3RhdHNfc2hvdyhzdHJ1Y3Qgc3RhdHMgKnN0YXRzLCBjaGFyICpidWYpCit7CisJaW50IG1pbiwgbWF4LCBhdmc7CisJaW50IHNhbXBsZXMgPSBhdG9taWNfcmVhZCgmc3RhdHMtPnNhbXBsZXMpOworCWlmIChzYW1wbGVzID09IDApCisJCW1pbiA9IG1heCA9IGF2ZyA9IDA7CisJZWxzZSB7CisJCW1pbiA9IHN0YXRzLT5taW47CisJCW1heCA9IHN0YXRzLT5tYXg7CisJCWF2ZyA9IHN0YXRzLT5zaWdtYSAvIHNhbXBsZXM7CisJfQorCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCAlZCAlZFxuIiwgbWluLCBtYXgsIGF2Zyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBzdGF0c19zdG9yZShzdHJ1Y3Qgc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICpidWYsCisJCQkJICBzaXplX3Qgc2l6ZSkKK3sKKwlzdGF0c19pbml0KHN0YXRzKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworI2VuZGlmIC8qICNpZm5kZWYgX19MSU5VWF9fVVdCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91d2IvZGVidWctY21kLmggYi9pbmNsdWRlL2xpbnV4L3V3Yi9kZWJ1Zy1jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQxZjQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91d2IvZGVidWctY21kLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFVsdHJhIFdpZGUgQmFuZAorICogRGVidWcgaW50ZXJmYWNlIGNvbW1hbmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaWZuZGVmIF9fTElOVVhfX1VXQl9fREVCVUdfQ01EX0hfXworI2RlZmluZSBfX0xJTlVYX19VV0JfX0RFQlVHX0NNRF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBEZWJ1ZyBpbnRlcmZhY2UgY29tbWFuZHMKKyAqCisgKiBVV0JfREJHX0NNRF9SU1ZfRVNUQUJMSVNIOiBFc3RhYmxpc2ggYSBuZXcgdW5pY2FzdCByZXNlcnZhdGlvbi4KKyAqCisgKiBVV0JfREJHX0NNRF9SU1ZfVEVSTUlOQVRFOiBUZXJtaW5hdGUgdGhlIE50aCByZXNlcnZhdGlvbi4KKyAqLworCitlbnVtIHV3Yl9kYmdfY21kX3R5cGUgeworCVVXQl9EQkdfQ01EX1JTVl9FU1RBQkxJU0ggPSAxLAorCVVXQl9EQkdfQ01EX1JTVl9URVJNSU5BVEUgPSAyLAorfTsKKworc3RydWN0IHV3Yl9kYmdfY21kX3Jzdl9lc3RhYmxpc2ggeworCV9fdTggIHRhcmdldFs2XTsKKwlfX3U4ICB0eXBlOworCV9fdTE2IG1heF9tYXM7CisJX191MTYgbWluX21hczsKKwlfX3U4ICBzcGFyc2l0eTsKK307CisKK3N0cnVjdCB1d2JfZGJnX2NtZF9yc3ZfdGVybWluYXRlIHsKKwlpbnQgaW5kZXg7Cit9OworCitzdHJ1Y3QgdXdiX2RiZ19jbWQgeworCV9fdTMyIHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgdXdiX2RiZ19jbWRfcnN2X2VzdGFibGlzaCByc3ZfZXN0YWJsaXNoOworCQlzdHJ1Y3QgdXdiX2RiZ19jbWRfcnN2X3Rlcm1pbmF0ZSByc3ZfdGVybWluYXRlOworCX07Cit9OworCisjZW5kaWYgLyogI2lmbmRlZiBfX0xJTlVYX19VV0JfX0RFQlVHX0NNRF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXdiL2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L3V3Yi9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmE3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3V3Yi9kZWJ1Zy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBVbHRyYSBXaWRlIEJhbmQKKyAqIERlYnVnIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICoKKyAqIEZJWE1FOiBkb2MKKyAqIEludm9rZSBsaWtlOgorICoKKyAqICNkZWZpbmUgRF9MT0NBTCA0CisgKiAjaW5jbHVkZSA8bGludXgvdXdiL2RlYnVnLmg+CisgKgorICogQXQgdGhlIGVuZCBvZiB5b3VyIGluY2x1ZGUgZmlsZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGV2aWNlOworZXh0ZXJuIHZvaWQgZHVtcF9ieXRlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKl9idWYsIHNpemVfdCByc2l6ZSk7CisKKy8qIE1hc3RlciBkZWJ1ZyBzd2l0Y2g7ICEwIGVuYWJsZXMsIDAgZGlzYWJsZXMgKi8KKyNkZWZpbmUgRF9NQVNURVIgKCEwKQorCisvKiBMb2NhbCAocGVyLWZpbGUpIGRlYnVnIHN3aXRjaDsgI2RlZmluZSBiZWZvcmUgI2luY2x1ZGluZyAqLworI2lmbmRlZiBEX0xPQ0FMCisjZGVmaW5lIERfTE9DQUwgMAorI2VuZGlmCisKKyN1bmRlZiBfX2RfcHJpbnRmCisjdW5kZWYgZF9mbnN0YXJ0CisjdW5kZWYgZF9mbmVuZAorI3VuZGVmIGRfcHJpbnRmCisjdW5kZWYgZF9kdW1wCisKKyNkZWZpbmUgX19kX3ByaW50ZihsLCBfdGFnLCBfZGV2LCBmLCBhLi4uKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXN0cnVjdCBkZXZpY2UgKl9fZGV2ID0gKF9kZXYpOwkJCQkJXAorCWlmIChEX01BU1RFUiAmJiBEX0xPQ0FMID49IChsKSkgewkJCQlcCisJCWNoYXIgX19oZWFkWzY0XSA9ICIiOwkJCQkJXAorCQlpZiAoX2RldiAhPSBOVUxMKSB7CQkJCQlcCisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpX19kZXYgPCA0MDk2KQkJXAorCQkJCXByaW50ayhLRVJOX0VSUiAiRTogQ29ycnVwdCBkZXYgJXBcbiIsCVwKKwkJCQkJX19kZXYpOwkJCQlcCisJCQllbHNlCQkJCQkJXAorCQkJCXNucHJpbnRmKF9faGVhZCwgc2l6ZW9mKF9faGVhZCksCVwKKwkJCQkJICIlcyAlczogIiwJCQlcCisJCQkJCSBkZXZfZHJpdmVyX3N0cmluZyhfX2RldiksCVwKKwkJCQkJIF9fZGV2LT5idXNfaWQpOwkJXAorCQl9CQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyVzIiBfdGFnICI6ICIgZiwgX19oZWFkLAkJXAorCQkJX19mdW5jX18sICMjIGEpOwkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCAmJiBfZGV2KQorCisjZGVmaW5lIGRfZm5zdGFydChsLCBfZGV2LCBmLCBhLi4uKQlcCisJX19kX3ByaW50ZihsLCAiIEZOU1RBUlQiLCBfZGV2LCBmLCAjIyBhKQorI2RlZmluZSBkX2ZuZW5kKGwsIF9kZXYsIGYsIGEuLi4pCVwKKwlfX2RfcHJpbnRmKGwsICIgRk5FTkQiLCBfZGV2LCBmLCAjIyBhKQorI2RlZmluZSBkX3ByaW50ZihsLCBfZGV2LCBmLCBhLi4uKQlcCisJX19kX3ByaW50ZihsLCAiIiwgX2RldiwgZiwgIyMgYSkKKyNkZWZpbmUgZF9kdW1wKGwsIF9kZXYsIHB0ciwgc2l6ZSkJCVwKK2RvIHsJCQkJCQlcCisJc3RydWN0IGRldmljZSAqX19kZXYgPSBfZGV2OwkJXAorCWlmIChEX01BU1RFUiAmJiBEX0xPQ0FMID49IChsKSkJCVwKKwkJZHVtcF9ieXRlcyhfX2RldiwgcHRyLCBzaXplKTsJXAorfSB3aGlsZSAoMCAmJiBfZGV2KQorI2RlZmluZSBkX3Rlc3QobCkgKERfTUFTVEVSICYmIERfTE9DQUwgPj0gKGwpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91d2Ivc3BlYy5oIGIvaW5jbHVkZS9saW51eC91d2Ivc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OGMxNWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3V3Yi9zcGVjLmgKQEAgLTAsMCArMSw3MjcgQEAKKy8qCisgKiBVbHRyYSBXaWRlIEJhbmQKKyAqIFVXQiBTdGFuZGFyZCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICogQWxsIHRoZXNlIGRlZmluaXRpb25zIGFyZSBiYXNlZCBvbiB0aGUgRUNNQS0zNjggc3RhbmRhcmQuCisgKgorICogTm90ZSBhbGwgZGVmaW5pdGlvbnMgYXJlIExpdHRsZSBFbmRpYW4gaW4gdGhlIHdpcmUsIGFuZCB3ZSB3aWxsCisgKiBjb252ZXJ0IHRoZW0gdG8gaG9zdCBvcmRlciBiZWZvcmUgb3BlcmF0aW5nIG9uIHRoZSBiaXRmaWVsZHMgKHRoYXQKKyAqIHllcywgd2UgdXNlIGV4dGVuc2l2ZWx5KS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfX1VXQl9TUEVDX0hfXworI2RlZmluZSBfX0xJTlVYX19VV0JfU1BFQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisKKyNkZWZpbmUgaTE0ODBfRlcgMHgwMDAwMDMwMworLyogI2RlZmluZSBpMTQ4MF9GVyAweDAwMDAwMzAyICovCisKKy8qKgorICogTnVtYmVyIG9mIE1lZGl1bSBBY2Nlc3MgU2xvdHMgaW4gYSBzdXBlcmZyYW1lLgorICoKKyAqIFVXQiBkaXZpZGVzIHRpbWUgaW4gU3VwZXJGcmFtZXMsIGVhY2ggb25lIGRpdmlkZWQgaW4gMjU2IHBpZWNlcywgb3IKKyAqIE1lZGl1bSBBY2Nlc3MgU2xvdHMuIFNlZSBNQk9BIE1BQ1s1LjQuNV0gZm9yIGRldGFpbHMuIFRoZSBNQVMgaXMgdGhlCisgKiBiYXNpYyBiYW5kd2lkdGggYWxsb2NhdGlvbiB1bml0IGluIFVXQi4KKyAqLworZW51bSB7IFVXQl9OVU1fTUFTID0gMjU2IH07CisKKy8qKgorICogTnVtYmVyIG9mIFpvbmVzIGluIHN1cGVyZnJhbWUuCisgKgorICogVVdCIGRpdmlkZXMgdGhlIHN1cGVyZnJhbWUgaW50byB6b25lcyB3aXRoIG51bWJlcmluZyBzdGFydGluZyBmcm9tIEJQU1QuCisgKiBTZWUgTUJPQSBNQUNbMTYuOC42XQorICovCitlbnVtIHsgVVdCX05VTV9aT05FUyA9IDE2IH07CisKKy8qCisgKiBOdW1iZXIgb2YgTUFTIGluIGEgem9uZS4KKyAqLworI2RlZmluZSBVV0JfTUFTX1BFUl9aT05FIChVV0JfTlVNX01BUyAvIFVXQl9OVU1fWk9ORVMpCisKKy8qCisgKiBOdW1iZXIgb2Ygc3RyZWFtcyBwZXIgRFJQIHJlc2VydmF0aW9uIGJldHdlZW4gYSBwYWlyIG9mIGRldmljZXMuCisgKgorICogW0VDTUEtMzY4XSBzZWN0aW9uIDE2LjguNi4KKyAqLworZW51bSB7IFVXQl9OVU1fU1RSRUFNUyA9IDggfTsKKworLyoKKyAqIG1NYXNMZW5ndGgKKyAqCisgKiBUaGUgbGVuZ3RoIG9mIGEgTUFTIGluIG1pY3Jvc2Vjb25kcy4KKyAqCisgKiBbRUNNQS0zNjhdIHNlY3Rpb24gMTcuMTYuCisgKi8KK2VudW0geyBVV0JfTUFTX0xFTkdUSF9VUyA9IDI1NiB9OworCisvKgorICogbUJlYWNvblNsb3RMZW5ndGgKKyAqCisgKiBUaGUgbGVuZ3RoIG9mIHRoZSBiZWFjb24gc2xvdCBpbiBtaWNyb3NlY29uZHMuCisgKgorICogW0VDTUEtMzY4XSBzZWN0aW9uIDE3LjE2CisgKi8KK2VudW0geyBVV0JfQkVBQ09OX1NMT1RfTEVOR1RIX1VTID0gODUgfTsKKworLyoKKyAqIG1NYXhMb3N0QmVhY29ucworICoKKyAqIFRoZSBudW1iZXIgYmVhY29ucyBtaXNzaW5nIGluIGNvbnNlY3V0aXZlIHN1cGVyZnJhbWVzIGJlZm9yZSBhCisgKiBkZXZpY2UgY2FuIGJlIGNvbnNpZGVyZWQgYXMgdW5yZWFjaGFibGUuCisgKgorICogW0VDTUEtMzY4XSBzZWN0aW9uIDE3LjE2CisgKi8KK2VudW0geyBVV0JfTUFYX0xPU1RfQkVBQ09OUyA9IDMgfTsKKworLyoKKyAqIExlbmd0aCBvZiBhIHN1cGVyZnJhbWUgaW4gbWljcm9zZWNvbmRzLgorICovCisjZGVmaW5lIFVXQl9TVVBFUkZSQU1FX0xFTkdUSF9VUyAoVVdCX01BU19MRU5HVEhfVVMgKiBVV0JfTlVNX01BUykKKworLyoqCisgKiBVV0IgTUFDIGFkZHJlc3MKKyAqCisgKiBJdCBpcyAqaW1wZXJhdGl2ZSogdGhhdCB0aGlzIHN0cnVjdCBpcyBleGFjdGx5IDYgcGFja2VkIGJ5dGVzIChhcworICogaXQgaXMgYWxzbyB1c2VkIHRvIGRlZmluZSBoZWFkZXJzIHNlbnQgZG93biBhbmQgdXAgdGhlIHdpcmUvcmFkaW8pLgorICovCitzdHJ1Y3QgdXdiX21hY19hZGRyIHsKKwl1OCBkYXRhWzZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKioKKyAqIFVXQiBkZXZpY2UgYWRkcmVzcworICoKKyAqIEl0IGlzICppbXBlcmF0aXZlKiB0aGF0IHRoaXMgc3RydWN0IGlzIGV4YWN0bHkgNiBwYWNrZWQgYnl0ZXMgKGFzCisgKiBpdCBpcyBhbHNvIHVzZWQgdG8gZGVmaW5lIGhlYWRlcnMgc2VudCBkb3duIGFuZCB1cCB0aGUgd2lyZS9yYWRpbykuCisgKi8KK3N0cnVjdCB1d2JfZGV2X2FkZHIgeworCXU4IGRhdGFbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qKgorICogVHlwZXMgb2YgVVdCIGFkZHJlc3NlcworICoKKyAqIE9yZGVyIG1hdHRlcnMgKGJ5IHNpemUpLgorICovCitlbnVtIHV3Yl9hZGRyX3R5cGUgeworCVVXQl9BRERSX0RFViA9IDAsCisJVVdCX0FERFJfTUFDID0gMSwKK307CisKKworLyoqIFNpemUgb2YgYSBjaGFyIGJ1ZmZlciBmb3IgcHJpbnRpbmcgYSBNQUMvZGV2aWNlIGFkZHJlc3MgKi8KK2VudW0geyBVV0JfQUREUl9TVFJTSVpFID0gMzIgfTsKKworCisvKiogVVdCIFdpTWVkaWEgcHJvdG9jb2wgSURzLiAqLworZW51bSB1d2JfcHJpZCB7CisJVVdCX1BSSURfV0xQX1JFU0VSVkVEICAgPSAweDAwMDAsCisJVVdCX1BSSURfV0xQCQk9IDB4MDAwMSwKKwlVV0JfUFJJRF9XVVNCX0JPVAk9IDB4MDAxMCwKKwlVV0JfUFJJRF9XVVNCCQk9IDB4MDAxMCwKKwlVV0JfUFJJRF9XVVNCX1RPUAk9IDB4MDAxRiwKK307CisKKworLyoqIFBIWSBSYXRlIChNQk9BIE1BQ1s3LjguMTIsIFRhYmxlIDYxXSkgKi8KK2VudW0gdXdiX3BoeV9yYXRlIHsKKwlVV0JfUEhZX1JBVEVfNTMgPSAwLAorCVVXQl9QSFlfUkFURV84MCwKKwlVV0JfUEhZX1JBVEVfMTA2LAorCVVXQl9QSFlfUkFURV8xNjAsCisJVVdCX1BIWV9SQVRFXzIwMCwKKwlVV0JfUEhZX1JBVEVfMzIwLAorCVVXQl9QSFlfUkFURV80MDAsCisJVVdCX1BIWV9SQVRFXzQ4MCwKKwlVV0JfUEhZX1JBVEVfSU5WQUxJRAorfTsKKworCisvKioKKyAqIERpZmZlcmVudCB3YXlzIHRvIHNjYW4gKE1CT0EgTUFDWzYuMi4yLCBUYWJsZSA4XSwgV1VTQltUYWJsZSA4LTc4XSkKKyAqLworZW51bSB1d2Jfc2Nhbl90eXBlIHsKKwlVV0JfU0NBTl9PTkxZID0gMCwKKwlVV0JfU0NBTl9PVVRTSURFX0JQLAorCVVXQl9TQ0FOX1dISUxFX0lOQUNUSVZFLAorCVVXQl9TQ0FOX0RJU0FCTEVELAorCVVXQl9TQ0FOX09OTFlfU1RBUlRUSU1FLAorCVVXQl9TQ0FOX1RPUAorfTsKKworCisvKiogQUNLIFBvbGljeSB0eXBlcyAoTUJPQSBNQUNbNy4yLjEuM10pICovCitlbnVtIHV3Yl9hY2tfcG9sIHsKKwlVV0JfQUNLX05PID0gMCwKKwlVV0JfQUNLX0lOTSA9IDEsCisJVVdCX0FDS19CID0gMiwKKwlVV0JfQUNLX0JfUkVRID0gMywKK307CisKKworLyoqIERSUCByZXNlcnZhdGlvbiB0eXBlcyAoW0VDTUEtMzY4IHRhYmxlIDEwNikgKi8KK2VudW0gdXdiX2RycF90eXBlIHsKKwlVV0JfRFJQX1RZUEVfQUxJRU5fQlAgPSAwLAorCVVXQl9EUlBfVFlQRV9IQVJELAorCVVXQl9EUlBfVFlQRV9TT0ZULAorCVVXQl9EUlBfVFlQRV9QUklWQVRFLAorCVVXQl9EUlBfVFlQRV9QQ0EsCit9OworCisKKy8qKiBEUlAgUmVhc29uIENvZGVzIChbRUNNQS0zNjhdIHRhYmxlIDEwNykgKi8KK2VudW0gdXdiX2RycF9yZWFzb24geworCVVXQl9EUlBfUkVBU09OX0FDQ0VQVEVEID0gMCwKKwlVV0JfRFJQX1JFQVNPTl9DT05GTElDVCwKKwlVV0JfRFJQX1JFQVNPTl9QRU5ESU5HLAorCVVXQl9EUlBfUkVBU09OX0RFTklFRCwKKwlVV0JfRFJQX1JFQVNPTl9NT0RJRklFRCwKK307CisKKy8qKgorICogIERSUCBOb3RpZmljYXRpb24gUmVhc29uIENvZGVzIChXSENJIDAuOTUgWzMuMS40LjldKQorICovCitlbnVtIHV3Yl9kcnBfbm90aWZfcmVhc29uIHsKKwlVV0JfRFJQX05PVElGX0RSUF9JRV9SQ1ZEID0gMCwKKwlVV0JfRFJQX05PVElGX0NPTkZMSUNULAorCVVXQl9EUlBfTk9USUZfVEVSTUlOQVRFLAorfTsKKworCisvKiogQWxsb2NhdGlvbiBvZiBNQVMgc2xvdHMgaW4gYSBEUlAgcmVxdWVzdCBNQk9BIE1BQ1s3LjguN10gKi8KK3N0cnVjdCB1d2JfZHJwX2FsbG9jIHsKKwlfX2xlMTYgem9uZV9ibTsKKwlfX2xlMTYgbWFzX2JtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiogR2VuZXJhbCBNQUMgSGVhZGVyIGZvcm1hdCAoRUNNQS0zNjhbMTYuMl0pICovCitzdHJ1Y3QgdXdiX21hY19mcmFtZV9oZHIgeworCV9fbGUxNiBGcmFtZV9Db250cm9sOworCXN0cnVjdCB1d2JfZGV2X2FkZHIgRGVzdEFkZHI7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBTcmNBZGRyOworCV9fbGUxNiBTZXF1ZW5jZV9Db250cm9sOworCV9fbGUxNiBBY2Nlc3NfSW5mb3JtYXRpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qKgorICogdXdiX2JlYWNvbl9mcmFtZSAtIGEgYmVhY29uIGZyYW1lIGluY2x1ZGluZyBNQUMgaGVhZGVycworICoKKyAqIFtFQ01BXSBzZWN0aW9uIDE2LjMuCisgKi8KK3N0cnVjdCB1d2JfYmVhY29uX2ZyYW1lIHsKKwlzdHJ1Y3QgdXdiX21hY19mcmFtZV9oZHIgaGRyOworCXN0cnVjdCB1d2JfbWFjX2FkZHIgRGV2aWNlX0lkZW50aWZpZXI7CS8qIG1heSBiZSBhIE5VTEwgRVVJLTQ4ICovCisJdTggQmVhY29uX1Nsb3RfTnVtYmVyOworCXU4IERldmljZV9Db250cm9sOworCXU4IElFRGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiogSW5mb3JtYXRpb24gRWxlbWVudCBjb2RlcyAoTUJPQSBNQUNbVDU0XSkgKi8KK2VudW0gdXdiX2llIHsKKwlVV0JfUENBX0FWQUlMQUJJTElUWSA9IDIsCisJVVdCX0lFX0RSUF9BVkFJTEFCSUxJVFkgPSA4LAorCVVXQl9JRV9EUlAgPSA5LAorCVVXQl9CUF9TV0lUQ0hfSUUgPSAxMSwKKwlVV0JfTUFDX0NBUEFCSUxJVElFU19JRSA9IDEyLAorCVVXQl9QSFlfQ0FQQUJJTElUSUVTX0lFID0gMTMsCisJVVdCX0FQUF9TUEVDX1BST0JFX0lFID0gMTUsCisJVVdCX0lERU5USUZJQ0FUSU9OX0lFID0gMTksCisJVVdCX01BU1RFUl9LRVlfSURfSUUgPSAyMCwKKwlVV0JfSUVfV0xQID0gMjUwLCAvKiBXaU1lZGlhIExvZ2ljYWwgTGluayBDb250cm9sIFByb3RvY29sIFdMUCAwLjk5ICovCisJVVdCX0FQUF9TUEVDX0lFID0gMjU1LAorfTsKKworCisvKioKKyAqIEhlYWRlciBjb21tb24gdG8gYWxsIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpCisgKi8KK3N0cnVjdCB1d2JfaWVfaGRyIHsKKwl1OCBlbGVtZW50X2lkOwkvKiBlbnVtIHV3Yl9pZSAqLworCXU4IGxlbmd0aDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqIER5bmFtaWMgUmVzZXJ2YXRpb24gUHJvdG9jb2wgSUUgKE1CT0EgTUFDWzcuOC42XSkgKi8KK3N0cnVjdCB1d2JfaWVfZHJwIHsKKwlzdHJ1Y3QgdXdiX2llX2hkcgloZHI7CisJX19sZTE2ICAgICAgICAgICAgICAgICAgZHJwX2NvbnRyb2w7CisJc3RydWN0IHV3Yl9kZXZfYWRkcglkZXZfYWRkcjsKKwlzdHJ1Y3QgdXdiX2RycF9hbGxvYwlhbGxvY3NbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHV3Yl9pZV9kcnBfdHlwZShzdHJ1Y3QgdXdiX2llX2RycCAqaWUpCit7CisJcmV0dXJuIChsZTE2X3RvX2NwdShpZS0+ZHJwX2NvbnRyb2wpID4+IDApICYgMHg3OworfQorCitzdGF0aWMgaW5saW5lIGludCB1d2JfaWVfZHJwX3N0cmVhbV9pbmRleChzdHJ1Y3QgdXdiX2llX2RycCAqaWUpCit7CisJcmV0dXJuIChsZTE2X3RvX2NwdShpZS0+ZHJwX2NvbnRyb2wpID4+IDMpICYgMHg3OworfQorCitzdGF0aWMgaW5saW5lIGludCB1d2JfaWVfZHJwX3JlYXNvbl9jb2RlKHN0cnVjdCB1d2JfaWVfZHJwICppZSkKK3sKKwlyZXR1cm4gKGxlMTZfdG9fY3B1KGllLT5kcnBfY29udHJvbCkgPj4gNikgJiAweDc7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHV3Yl9pZV9kcnBfc3RhdHVzKHN0cnVjdCB1d2JfaWVfZHJwICppZSkKK3sKKwlyZXR1cm4gKGxlMTZfdG9fY3B1KGllLT5kcnBfY29udHJvbCkgPj4gOSkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHV3Yl9pZV9kcnBfb3duZXIoc3RydWN0IHV3Yl9pZV9kcnAgKmllKQoreworCXJldHVybiAobGUxNl90b19jcHUoaWUtPmRycF9jb250cm9sKSA+PiAxMCkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHV3Yl9pZV9kcnBfdGllYnJlYWtlcihzdHJ1Y3QgdXdiX2llX2RycCAqaWUpCit7CisJcmV0dXJuIChsZTE2X3RvX2NwdShpZS0+ZHJwX2NvbnRyb2wpID4+IDExKSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdXdiX2llX2RycF91bnNhZmUoc3RydWN0IHV3Yl9pZV9kcnAgKmllKQoreworCXJldHVybiAobGUxNl90b19jcHUoaWUtPmRycF9jb250cm9sKSA+PiAxMikgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1d2JfaWVfZHJwX3NldF90eXBlKHN0cnVjdCB1d2JfaWVfZHJwICppZSwgZW51bSB1d2JfZHJwX3R5cGUgdHlwZSkKK3sKKwl1MTYgZHJwX2NvbnRyb2wgPSBsZTE2X3RvX2NwdShpZS0+ZHJwX2NvbnRyb2wpOworCWRycF9jb250cm9sID0gKGRycF9jb250cm9sICYgfigweDcgPDwgMCkpIHwgKHR5cGUgPDwgMCk7CisJaWUtPmRycF9jb250cm9sID0gY3B1X3RvX2xlMTYoZHJwX2NvbnRyb2wpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2llX2RycF9zZXRfc3RyZWFtX2luZGV4KHN0cnVjdCB1d2JfaWVfZHJwICppZSwgaW50IHN0cmVhbV9pbmRleCkKK3sKKwl1MTYgZHJwX2NvbnRyb2wgPSBsZTE2X3RvX2NwdShpZS0+ZHJwX2NvbnRyb2wpOworCWRycF9jb250cm9sID0gKGRycF9jb250cm9sICYgfigweDcgPDwgMykpIHwgKHN0cmVhbV9pbmRleCA8PCAzKTsKKwlpZS0+ZHJwX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihkcnBfY29udHJvbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1d2JfaWVfZHJwX3NldF9yZWFzb25fY29kZShzdHJ1Y3QgdXdiX2llX2RycCAqaWUsCisJCQkJICAgICAgIGVudW0gdXdiX2RycF9yZWFzb24gcmVhc29uX2NvZGUpCit7CisJdTE2IGRycF9jb250cm9sID0gbGUxNl90b19jcHUoaWUtPmRycF9jb250cm9sKTsKKwlkcnBfY29udHJvbCA9IChpZS0+ZHJwX2NvbnRyb2wgJiB+KDB4NyA8PCA2KSkgfCAocmVhc29uX2NvZGUgPDwgNik7CisJaWUtPmRycF9jb250cm9sID0gY3B1X3RvX2xlMTYoZHJwX2NvbnRyb2wpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2llX2RycF9zZXRfc3RhdHVzKHN0cnVjdCB1d2JfaWVfZHJwICppZSwgaW50IHN0YXR1cykKK3sKKwl1MTYgZHJwX2NvbnRyb2wgPSBsZTE2X3RvX2NwdShpZS0+ZHJwX2NvbnRyb2wpOworCWRycF9jb250cm9sID0gKGRycF9jb250cm9sICYgfigweDEgPDwgOSkpIHwgKHN0YXR1cyA8PCA5KTsKKwlpZS0+ZHJwX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihkcnBfY29udHJvbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1d2JfaWVfZHJwX3NldF9vd25lcihzdHJ1Y3QgdXdiX2llX2RycCAqaWUsIGludCBvd25lcikKK3sKKwl1MTYgZHJwX2NvbnRyb2wgPSBsZTE2X3RvX2NwdShpZS0+ZHJwX2NvbnRyb2wpOworCWRycF9jb250cm9sID0gKGRycF9jb250cm9sICYgfigweDEgPDwgMTApKSB8IChvd25lciA8PCAxMCk7CisJaWUtPmRycF9jb250cm9sID0gY3B1X3RvX2xlMTYoZHJwX2NvbnRyb2wpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2llX2RycF9zZXRfdGllYnJlYWtlcihzdHJ1Y3QgdXdiX2llX2RycCAqaWUsIGludCB0aWVicmVha2VyKQoreworCXUxNiBkcnBfY29udHJvbCA9IGxlMTZfdG9fY3B1KGllLT5kcnBfY29udHJvbCk7CisJZHJwX2NvbnRyb2wgPSAoZHJwX2NvbnRyb2wgJiB+KDB4MSA8PCAxMSkpIHwgKHRpZWJyZWFrZXIgPDwgMTEpOworCWllLT5kcnBfY29udHJvbCA9IGNwdV90b19sZTE2KGRycF9jb250cm9sKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHV3Yl9pZV9kcnBfc2V0X3Vuc2FmZShzdHJ1Y3QgdXdiX2llX2RycCAqaWUsIGludCB1bnNhZmUpCit7CisJdTE2IGRycF9jb250cm9sID0gbGUxNl90b19jcHUoaWUtPmRycF9jb250cm9sKTsKKwlkcnBfY29udHJvbCA9IChkcnBfY29udHJvbCAmIH4oMHgxIDw8IDEyKSkgfCAodW5zYWZlIDw8IDEyKTsKKwlpZS0+ZHJwX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihkcnBfY29udHJvbCk7Cit9CisKKy8qKiBEeW5hbWljIFJlc2VydmF0aW9uIFByb3RvY29sIElFIChNQk9BIE1BQ1s3LjguN10pICovCitzdHJ1Y3QgdXdiX2llX2RycF9hdmFpbCB7CisJc3RydWN0IHV3Yl9pZV9oZHIJaGRyOworCURFQ0xBUkVfQklUTUFQKGJtcCwgVVdCX05VTV9NQVMpOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBUaGUgVmVuZG9yIElEIGlzIHNldCB0byBhbiBPVUkgdGhhdCBpbmRpY2F0ZXMgdGhlIHZlbmRvciBvZiB0aGUgZGV2aWNlLgorICogRUNNQS0zNjggWzE2LjguMTBdCisgKi8KK3N0cnVjdCB1d2JfdmVuZG9yX2lkIHsKKwl1OCBkYXRhWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBUaGUgZGV2aWNlIHR5cGUgSUQKKyAqIEZJWE1FOiBjbGFyaWZ5IHdoYXQgdGhpcyBtZWFucworICogRUNNQS0zNjggWzE2LjguMTBdCisgKi8KK3N0cnVjdCB1d2JfZGV2aWNlX3R5cGVfaWQgeworCXU4IGRhdGFbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qKgorICogVVdCIGRldmljZSBpbmZvcm1hdGlvbiB0eXBlcworICogRUNNQS0zNjggWzE2LjguMTBdCisgKi8KK2VudW0gdXdiX2Rldl9pbmZvX3R5cGUgeworCVVXQl9ERVZfSU5GT19WRU5ET1JfSUQgPSAwLAorCVVXQl9ERVZfSU5GT19WRU5ET1JfVFlQRSwKKwlVV0JfREVWX0lORk9fTkFNRSwKK307CisKKy8qKgorICogVVdCIGRldmljZSBpbmZvcm1hdGlvbiBmb3VuZCBpbiBJZGVudGlmaWNhdGlvbiBJRQorICogRUNNQS0zNjggWzE2LjguMTBdCisgKi8KK3N0cnVjdCB1d2JfZGV2X2luZm8geworCXU4IHR5cGU7CS8qIGVudW0gdXdiX2Rldl9pbmZvX3R5cGUgKi8KKwl1OCBsZW5ndGg7CisJdTggZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBVV0IgSWRlbnRpZmljYXRpb24gSUUKKyAqIEVDTUEtMzY4IFsxNi44LjEwXQorICovCitzdHJ1Y3QgdXdiX2lkZW50aWZpY2F0aW9uX2llIHsKKwlzdHJ1Y3QgdXdiX2llX2hkciBoZHI7CisJc3RydWN0IHV3Yl9kZXZfaW5mbyBpbmZvW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogVVdCIFJhZGlvIENvbnRyb2xsZXIKKyAqCisgKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgY29tbW9uIHRvIHRoZSBSYWRpbyBDb250cm9sIGxheWVycyBhcworICogZXhwb3J0ZWQgYnkgdGhlIFdVU0IxLjAgSFdBIGFuZCBXSENJIGludGVyZmFjZXMuCisgKi8KKworLyoqIFJhZGlvIENvbnRyb2wgQ29tbWFuZCBCbG9jayAoV1VTQjEuMFtUYWJsZSA4LTY1XSBhbmQgV0hDSSAwLjk1KSAqLworc3RydWN0IHV3Yl9yY2NiIHsKKwl1OCBiQ29tbWFuZFR5cGU7CQkvKiBlbnVtIGh3YV9jZXQgKi8KKwlfX2xlMTYgd0NvbW1hbmQ7CQkvKiBDb21tYW5kIGNvZGUgKi8KKwl1OCBiQ29tbWFuZENvbnRleHQ7CQkvKiBDb250ZXh0IElEICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qKiBSYWRpbyBDb250cm9sIEV2ZW50IEJsb2NrIChXVVNCW3RhYmxlIDgtNjZdLCBXSENJIDAuOTUpICovCitzdHJ1Y3QgdXdiX3JjZWIgeworCXU4IGJFdmVudFR5cGU7CQkJLyogZW51bSBod2FfY2V0ICovCisJX19sZTE2IHdFdmVudDsJCQkvKiBFdmVudCBjb2RlICovCisJdTggYkV2ZW50Q29udGV4dDsJCS8qIENvbnRleHQgSUQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworZW51bSB7CisJVVdCX1JDX0NFVF9HRU5FUkFMID0gMCwJCS8qIEdlbmVyYWwgQ29tbWFuZC9FdmVudCB0eXBlICovCisJVVdCX1JDX0NFVF9FWF9UWVBFXzEgPSAxLAkvKiBFeHRlbmRlZCBUeXBlIDEgQ29tbWFuZC9FdmVudCB0eXBlICovCit9OworCisvKiBDb21tYW5kcyB0byB0aGUgcmFkaW8gY29udHJvbGxlciAqLworZW51bSB1d2JfcmNfY21kIHsKKwlVV0JfUkNfQ01EX0NIQU5ORUxfQ0hBTkdFID0gMTYsCisJVVdCX1JDX0NNRF9ERVZfQUREUl9NR01UID0gMTcsCS8qIERldmljZSBBZGRyZXNzIE1hbmFnZW1lbnQgKi8KKwlVV0JfUkNfQ01EX0dFVF9JRSA9IDE4LAkJLyogR0VUIEluZm9ybWF0aW9uIEVsZW1lbnRzICovCisJVVdCX1JDX0NNRF9SRVNFVCA9IDE5LAorCVVXQl9SQ19DTURfU0NBTiA9IDIwLAkJLyogU2NhbiBtYW5hZ2VtZW50ICAqLworCVVXQl9SQ19DTURfU0VUX0JFQUNPTl9GSUxURVIgPSAyMSwKKwlVV0JfUkNfQ01EX1NFVF9EUlBfSUUgPSAyMiwJLyogRHluYW1pYyBSZXNlcnZhdGlvbiBQcm90b2NvbCBJRXMgKi8KKwlVV0JfUkNfQ01EX1NFVF9JRSA9IDIzLAkJLyogSW5mb3JtYXRpb24gRWxlbWVudCBtYW5hZ2VtZW50ICovCisJVVdCX1JDX0NNRF9TRVRfTk9USUZJQ0FUSU9OX0ZJTFRFUiA9IDI0LAorCVVXQl9SQ19DTURfU0VUX1RYX1BPV0VSID0gMjUsCisJVVdCX1JDX0NNRF9TTEVFUCA9IDI2LAorCVVXQl9SQ19DTURfU1RBUlRfQkVBQ09OID0gMjcsCisJVVdCX1JDX0NNRF9TVE9QX0JFQUNPTiA9IDI4LAorCVVXQl9SQ19DTURfQlBfTUVSR0UgPSAyOSwKKwlVV0JfUkNfQ01EX1NFTkRfQ09NTUFORF9GUkFNRSA9IDMwLAorCVVXQl9SQ19DTURfU0VUX0FTSUVfTk9USUYgPSAzMSwKK307CisKKy8qIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgcmFkaW8gY29udHJvbGxlciAqLworZW51bSB1d2JfcmNfZXZ0IHsKKwlVV0JfUkNfRVZUX0lFX1JDViA9IDAsCisJVVdCX1JDX0VWVF9CRUFDT04gPSAxLAorCVVXQl9SQ19FVlRfQkVBQ09OX1NJWkUgPSAyLAorCVVXQl9SQ19FVlRfQlBPSUVfQ0hBTkdFID0gMywKKwlVV0JfUkNfRVZUX0JQX1NMT1RfQ0hBTkdFID0gNCwKKwlVV0JfUkNfRVZUX0JQX1NXSVRDSF9JRV9SQ1YgPSA1LAorCVVXQl9SQ19FVlRfREVWX0FERFJfQ09ORkxJQ1QgPSA2LAorCVVXQl9SQ19FVlRfRFJQX0FWQUlMID0gNywKKwlVV0JfUkNfRVZUX0RSUCA9IDgsCisJVVdCX1JDX0VWVF9CUF9TV0lUQ0hfU1RBVFVTID0gOSwKKwlVV0JfUkNfRVZUX0NNRF9GUkFNRV9SQ1YgPSAxMCwKKwlVV0JfUkNfRVZUX0NIQU5ORUxfQ0hBTkdFX0lFX1JDViA9IDExLAorCS8qIEV2ZW50cyAoY29tbWFuZCByZXNwb25zZXMpIHVzZSB0aGUgc2FtZSBjb2RlIGFzIHRoZSBjb21tYW5kICovCisJVVdCX1JDX0VWVF9VTktOT1dOX0NNRF9SQ1YgPSA2NTUzNSwKK307CisKK2VudW0gdXdiX3JjX2V4dGVuZGVkX3R5cGVfMV9jbWQgeworCVVXQl9SQ19TRVRfREFBX0VORVJHWV9NQVNLID0gMzIsCisJVVdCX1JDX1NFVF9OT1RJRklDQVRJT05fRklMVEVSX0VYID0gMzMsCit9OworCitlbnVtIHV3Yl9yY19leHRlbmRlZF90eXBlXzFfZXZ0IHsKKwlVV0JfUkNfREFBX0VORVJHWV9ERVRFQ1RFRCA9IDAsCit9OworCisvKiBSYWRpbyBDb250cm9sIFJlc3VsdCBDb2RlLiBbV0hDSV0gdGFibGUgMy0zLiAqLworZW51bSB7CisJVVdCX1JDX1JFU19TVUNDRVNTID0gMCwKKwlVV0JfUkNfUkVTX0ZBSUwsCisJVVdCX1JDX1JFU19GQUlMX0hBUkRXQVJFLAorCVVXQl9SQ19SRVNfRkFJTF9OT19TTE9UUywKKwlVV0JfUkNfUkVTX0ZBSUxfQkVBQ09OX1RPT19MQVJHRSwKKwlVV0JfUkNfUkVTX0ZBSUxfSU5WQUxJRF9QQVJBTUVURVIsCisJVVdCX1JDX1JFU19GQUlMX1VOU1VQUE9SVEVEX1BXUl9MRVZFTCwKKwlVV0JfUkNfUkVTX0ZBSUxfSU5WQUxJRF9JRV9EQVRBLAorCVVXQl9SQ19SRVNfRkFJTF9CRUFDT05fU0laRV9FWENFRURFRCwKKwlVV0JfUkNfUkVTX0ZBSUxfQ0FOQ0VMTEVELAorCVVXQl9SQ19SRVNfRkFJTF9JTlZBTElEX1NUQVRFLAorCVVXQl9SQ19SRVNfRkFJTF9JTlZBTElEX1NJWkUsCisJVVdCX1JDX1JFU19GQUlMX0FDS19OT1RfUkVDRUlWRUQsCisJVVdCX1JDX1JFU19GQUlMX05PX01PUkVfQVNJRV9OT1RJRiwKKwlVV0JfUkNfUkVTX0ZBSUxfVElNRV9PVVQgPSAyNTUsCit9OworCisvKiBDb25maXJtIGV2ZW50LiBbV0hDSV0gc2VjdGlvbiAzLjEuMy4xIGV0Yy4gKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2NvbmZpcm0geworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCXU4IGJSZXN1bHRDb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRGV2aWNlIEFkZHJlc3MgTWFuYWdlbWVudCBldmVudC4gW1dIQ0ldIHNlY3Rpb24gMy4xLjMuMi4gKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2Rldl9hZGRyX21nbXQgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCXU4IGJhQWRkcls2XTsKKwl1OCBiUmVzdWx0Q29kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyogR2V0IElFIEV2ZW50LiBbV0hDSV0gc2VjdGlvbiAzLjEuMy4zLiAqLworc3RydWN0IHV3Yl9yY19ldnRfZ2V0X2llIHsKKwlzdHJ1Y3QgdXdiX3JjZWIgcmNlYjsKKwlfX2xlMTYgd0lFTGVuZ3RoOworCXU4IElFRGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogU2V0IERSUCBJRSBFdmVudC4gW1dIQ0ldIHNlY3Rpb24gMy4xLjMuNy4gKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X3NldF9kcnBfaWUgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCV9fbGUxNiB3UmVtYWluaW5nU3BhY2U7CisJdTggYlJlc3VsdENvZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBTZXQgSUUgRXZlbnQuIFtXSENJXSBzZWN0aW9uIDMuMS4zLjguICovCitzdHJ1Y3QgdXdiX3JjX2V2dF9zZXRfaWUgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCV9fbGUxNiBSZW1haW5pbmdTcGFjZTsKKwl1OCBiUmVzdWx0Q29kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFNjYW4gY29tbWFuZC4gW1dIQ0ldIDMuMS4zLjUuICovCitzdHJ1Y3QgdXdiX3JjX2NtZF9zY2FuIHsKKwlzdHJ1Y3QgdXdiX3JjY2IgcmNjYjsKKwl1OCBiQ2hhbm5lbE51bWJlcjsKKwl1OCBiU2NhblN0YXRlOworCV9fbGUxNiB3U3RhcnRUaW1lOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogU2V0IERSUCBJRSBjb21tYW5kLiBbV0hDSV0gc2VjdGlvbiAzLjEuMy43LiAqLworc3RydWN0IHV3Yl9yY19jbWRfc2V0X2RycF9pZSB7CisJc3RydWN0IHV3Yl9yY2NiIHJjY2I7CisJX19sZTE2IHdJRUxlbmd0aDsKKwlzdHJ1Y3QgdXdiX2llX2RycCBJRURhdGFbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFNldCBJRSBjb21tYW5kLiBbV0hDSV0gc2VjdGlvbiAzLjEuMy44LiAqLworc3RydWN0IHV3Yl9yY19jbWRfc2V0X2llIHsKKwlzdHJ1Y3QgdXdiX3JjY2IgcmNjYjsKKwlfX2xlMTYgd0lFTGVuZ3RoOworCXU4IElFRGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogU2V0IERBQSBFbmVyZ3kgTWFzayBldmVudC4gW1dIQ0kgMC45Nl0gc2VjdGlvbiAzLjEuMy4xNy4gKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X3NldF9kYWFfZW5lcmd5X21hc2sgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCV9fbGUxNiB3TGVuZ3RoOworCXU4IHJlc3VsdDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFNldCBOb3RpZmljYXRpb24gRmlsdGVyIEV4dGVuZGVkIGV2ZW50LiBbV0hDSSAwLjk2XSBzZWN0aW9uIDMuMS4zLjE4LiAqLworc3RydWN0IHV3Yl9yY19ldnRfc2V0X25vdGlmaWNhdGlvbl9maWx0ZXJfZXggeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCV9fbGUxNiB3TGVuZ3RoOworCXU4IHJlc3VsdDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIElFIFJlY2VpdmVkIG5vdGlmaWNhdGlvbi4gW1dIQ0ldIHNlY3Rpb24gMy4xLjQuMS4gKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2llX3JjdiB7CisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7CisJc3RydWN0IHV3Yl9kZXZfYWRkciBTcmNBZGRyOworCV9fbGUxNiB3SUVMZW5ndGg7CisJdTggSUVEYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBUeXBlIG9mIHRoZSByZWNlaXZlZCBiZWFjb24uIFtXSENJXSBzZWN0aW9uIDMuMS40LjIuICovCitlbnVtIHV3Yl9yY19iZWFjb25fdHlwZSB7CisJVVdCX1JDX0JFQUNPTl9UWVBFX1NDQU4gPSAwLAorCVVXQl9SQ19CRUFDT05fVFlQRV9ORUlHSEJPUiwKKwlVV0JfUkNfQkVBQ09OX1RZUEVfT0xfQUxJRU4sCisJVVdCX1JDX0JFQUNPTl9UWVBFX05PTF9BTElFTiwKK307CisKKy8qIEJlYWNvbiByZWNlaXZlZCBub3RpZmljYXRpb24uIFtXSENJXSAzLjEuNC4yLiAqLworc3RydWN0IHV3Yl9yY19ldnRfYmVhY29uIHsKKwlzdHJ1Y3QgdXdiX3JjZWIgcmNlYjsKKwl1OAliQ2hhbm5lbE51bWJlcjsKKwl1OAliQmVhY29uVHlwZTsKKwlfX2xlMTYJd0JQU1RPZmZzZXQ7CisJdTgJYkxRSTsKKwl1OAliUlNTSTsKKwlfX2xlMTYJd0JlYWNvbkluZm9MZW5ndGg7CisJdTgJQmVhY29uSW5mb1tdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiBCZWFjb24gU2l6ZSBDaGFuZ2Ugbm90aWZpY2F0aW9uLiBbV0hDSV0gc2VjdGlvbiAzLjEuNC4zICovCitzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb25fc2l6ZSB7CisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7CisJX19sZTE2IHdOZXdCZWFjb25TaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiBCUE9JRSBDaGFuZ2Ugbm90aWZpY2F0aW9uLiBbV0hDSV0gc2VjdGlvbiAzLjEuNC40LiAqLworc3RydWN0IHV3Yl9yY19ldnRfYnBvaWVfY2hhbmdlIHsKKwlzdHJ1Y3QgdXdiX3JjZWIgcmNlYjsKKwlfX2xlMTYgd0JQT0lFTGVuZ3RoOworCXU4IEJQT0lFW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qIEJlYWNvbiBTbG90IENoYW5nZSBub3RpZmljYXRpb24uIFtXSENJXSBzZWN0aW9uIDMuMS40LjUuICovCitzdHJ1Y3QgdXdiX3JjX2V2dF9icF9zbG90X2NoYW5nZSB7CisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7CisJdTggc2xvdF9pbmZvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSBpbnQgdXdiX3JjX2V2dF9icF9zbG90X2NoYW5nZV9zbG90X251bSgKKwljb25zdCBzdHJ1Y3QgdXdiX3JjX2V2dF9icF9zbG90X2NoYW5nZSAqZXZ0KQoreworCXJldHVybiBldnQtPnNsb3RfaW5mbyAmIDB4N2Y7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHV3Yl9yY19ldnRfYnBfc2xvdF9jaGFuZ2Vfbm9fc2xvdCgKKwljb25zdCBzdHJ1Y3QgdXdiX3JjX2V2dF9icF9zbG90X2NoYW5nZSAqZXZ0KQoreworCXJldHVybiAoZXZ0LT5zbG90X2luZm8gJiAweDgwKSA+PiA3OworfQorCisvKiBCUCBTd2l0Y2ggSUUgUmVjZWl2ZWQgbm90aWZpY2F0aW9uLiBbV0hDSV0gc2VjdGlvbiAzLjEuNC42LiAqLworc3RydWN0IHV3Yl9yY19ldnRfYnBfc3dpdGNoX2llX3JjdiB7CisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7CisJc3RydWN0IHV3Yl9kZXZfYWRkciB3U3JjQWRkcjsKKwlfX2xlMTYgd0lFTGVuZ3RoOworCXU4IElFRGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRGV2QWRkciBDb25mbGljdCBub3RpZmljYXRpb24uIFtXSENJXSBzZWN0aW9uIDMuMS40LjcuICovCitzdHJ1Y3QgdXdiX3JjX2V2dF9kZXZfYWRkcl9jb25mbGljdCB7CisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBEUlAgbm90aWZpY2F0aW9uLiBbV0hDSV0gc2VjdGlvbiAzLjEuNC45LiAqLworc3RydWN0IHV3Yl9yY19ldnRfZHJwIHsKKwlzdHJ1Y3QgdXdiX3JjZWIgICAgICAgICAgIHJjZWI7CisJc3RydWN0IHV3Yl9kZXZfYWRkciAgICAgICBzcmNfYWRkcjsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIGJlYWNvbl9zbG90X251bWJlcjsKKwlfX2xlMTYgICAgICAgICAgICAgICAgICAgIGllX2xlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIGllX2RhdGFbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgZW51bSB1d2JfZHJwX25vdGlmX3JlYXNvbiB1d2JfcmNfZXZ0X2RycF9yZWFzb24oc3RydWN0IHV3Yl9yY19ldnRfZHJwICpldnQpCit7CisJcmV0dXJuIGV2dC0+cmVhc29uICYgMHgwZjsKK30KKworCisvKiBEUlAgQXZhaWxhYmlsaXR5IENoYW5nZSBub3RpZmljYXRpb24uIFtXSENJXSBzZWN0aW9uIDMuMS40LjguICovCitzdHJ1Y3QgdXdiX3JjX2V2dF9kcnBfYXZhaWwgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCURFQ0xBUkVfQklUTUFQKGJtcCwgVVdCX05VTV9NQVMpOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogQlAgc3dpdGNoIHN0YXR1cyBub3RpZmljYXRpb24uIFtXSENJXSBzZWN0aW9uIDMuMS40LjEwLiAqLworc3RydWN0IHV3Yl9yY19ldnRfYnBfc3dpdGNoX3N0YXR1cyB7CisJc3RydWN0IHV3Yl9yY2ViIHJjZWI7CisJdTggc3RhdHVzOworCXU4IHNsb3Rfb2Zmc2V0OworCV9fbGUxNiBicHN0X29mZnNldDsKKwl1OCBtb3ZlX2NvdW50ZG93bjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIENvbW1hbmQgRnJhbWUgUmVjZWl2ZWQgbm90aWZpY2F0aW9uLiBbV0hDSV0gc2VjdGlvbiAzLjEuNC4xMS4gKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2NtZF9mcmFtZV9yY3YgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCV9fbGUxNiByZWNlaXZlX3RpbWU7CisJc3RydWN0IHV3Yl9kZXZfYWRkciB3U3JjQWRkcjsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIHdEc3RBZGRyOworCV9fbGUxNiBjb250cm9sOworCV9fbGUxNiByZXNlcnZlZDsKKwlfX2xlMTYgZGF0YUxlbmd0aDsKKwl1OCBkYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBDaGFubmVsIENoYW5nZSBJRSBSZWNlaXZlZCBub3RpZmljYXRpb24uIFtXSENJXSBzZWN0aW9uIDMuMS40LjEyLiAqLworc3RydWN0IHV3Yl9yY19ldnRfY2hhbm5lbF9jaGFuZ2VfaWVfcmN2IHsKKwlzdHJ1Y3QgdXdiX3JjZWIgcmNlYjsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIHdTcmNBZGRyOworCV9fbGUxNiB3SUVMZW5ndGg7CisJdTggSUVEYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBEQUEgRW5lcmd5IERldGVjdGVkIG5vdGlmaWNhdGlvbi4gW1dIQ0kgMC45Nl0gc2VjdGlvbiAzLjEuNC4xNC4gKi8KK3N0cnVjdCB1d2JfcmNfZXZ0X2RhYV9lbmVyZ3lfZGV0ZWN0ZWQgeworCXN0cnVjdCB1d2JfcmNlYiByY2ViOworCV9fbGUxNiB3TGVuZ3RoOworCXU4IGJhbmRJRDsKKwl1OCByZXNlcnZlZDsKKwl1OCB0b25lQm1wWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqCisgKiBSYWRpbyBDb250cm9sIEludGVyZmFjZSBDbGFzcyBEZXNjcmlwdG9yCisgKgorICogIFdVU0IgMS4wIFs4LjYuMS4yXQorICovCitzdHJ1Y3QgdXdiX3JjX2NvbnRyb2xfaW50Zl9jbGFzc19kZXNjIHsKKwl1OCBiTGVuZ3RoOworCXU4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX2xlMTYgYmNkUkNJVmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZiAvKiAjaWZuZGVmIF9fTElOVVhfX1VXQl9TUEVDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91d2IvdW1jLmggYi9pbmNsdWRlL2xpbnV4L3V3Yi91bWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmEzOWUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91d2IvdW1jLmgKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBVV0IgTXVsdGktaW50ZXJmYWNlIENvbnRyb2xsZXIgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIKKyAqCisgKiBVTUMgKFVXQiBNdWx0aS1pbnRlcmZhY2UgQ29udHJvbGxlcikgY2FwYWJpbGl0aWVzIChlLmcuLCByYWRpbworICogY29udHJvbGxlciwgaG9zdCBjb250cm9sbGVyKSBhcmUgcHJlc2VudGVkIGFzIGRldmljZXMgb24gdGhlICJ1bWMiCisgKiBidXMuCisgKgorICogVGhlIHJhZGlvIGNvbnRyb2xsZXIgaXMgbm90IHN0cmljdGx5IGEgVU1DIGNhcGFiaWxpdHkgYnV0IGl0J3MKKyAqIHVzZWZ1bCB0byBwcmVzZW50IGl0IGFzIHN1Y2guCisgKgorICogUmVmZXJlbmNlczoKKyAqCisgKiAgIFtXSENJXSBXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24gZm9yCisgKiAgICAgICAgICBDZXJ0aWZpZWQgV2lyZWxlc3MgVW5pdmVyc2FsIFNlcmlhbCBCdXMsIHJldmlzaW9uIDAuOTUuCisgKgorICogSG93IHRoaXMgd29ya3MgaXMga2luZCBvZiBjb252b2x1dGVkIGJ1dCBzaW1wbGUuIFRoZSB3aGNpLmtvIGRyaXZlcgorICogbG9hZHMgd2hlbiBXSENJIGRldmljZXMgYXJlIGRldGVjdGVkLiBUaGVzZSBXSENJIGRldmljZXMgZXhwb3NlCisgKiBtYW55IGRldmljZXMgaW4gdGhlIHNhbWUgUENJIGZ1bmN0aW9uICh0aGV5IGNvdWxkbid0IGhhdmUgcmV1c2VkCisgKiBmdW5jdGlvbnMsIG5vKSwgc28gZm9yIGVhY2ggUENJIGZ1bmN0aW9uIHRoYXQgZXhwb3NlcyB0aGVzZSBtYW55CisgKiBkZXZpY2VzLCB3aGNpIGNlYXRlcyBhIHVtY19kZXYgW3doY2lfcHJvYmUoKSAtPiB3aGNpX2FkZF9jYXAoKV0KKyAqIHdpdGggdW1jX2RldmljZV9jcmVhdGUoKSBhbmQgYWRkcyBpdCB0byB0aGUgYnVzIHdpdGgKKyAqIHVtY19kZXZpY2VfcmVnaXN0ZXIoKS4KKyAqCisgKiB1bWNfZGV2aWNlX3JlZ2lzdGVyKCkgY2FsbHMgZGV2aWNlX3JlZ2lzdGVyKCkgd2hpY2ggd2lsbCBwdXNoIHRoZQorICogYnVzIG1hbmFnZW1lbnQgY29kZSB0byBsb2FkIHlvdXIgVU1DIGRyaXZlcidzIHNvbWVodGluZ19wcm9iZSgpCisgKiB0aGF0IHlvdSBoYXZlIHJlZ2lzdGVyZWQgZm9yIHRoYXQgY2FwYWJpbGl0eSBjb2RlLgorICoKKyAqIE5vdyB3aGVuIHRoZSBXSENJIGRldmljZSBpcyByZW1vdmVkLCB3aGNpX3JlbW92ZSgpIHdpbGwgZ28gb3ZlcgorICogZWFjaCB1bWNfZGV2IGFzc2lnbmVkIHRvIGVhY2ggb2YgdGhlIFBDSSBmdW5jdGlvbidzIGNhcGFiaWxpdGllcworICogYW5kIHRocm91Z2ggd2hjaV9kZWxfY2FwKCkgY2FsbCB1bWNfZGV2aWNlX3VucmVnaXN0ZXIoKSBlYWNoCisgKiBjcmVhdGVkIHVtY19kZXYuIE9mIGNvdXJzZSwgaWYgeW91IGFyZSBib3VuZCB0byB0aGUgZGV2aWNlLCB5b3VyCisgKiBkcml2ZXIncyBzb21ldGhpbmdfcmVtb3ZlKCkgd2lsbCBiZSBjYWxsZWQuCisgKi8KKworI2lmbmRlZiBfTElOVVhfVVdCX1VNQ19IXworI2RlZmluZSBfTElOVVhfVVdCX1VNQ19IXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qCisgKiBVTUMgY2FwYWJpbGl0eSBJRHMuCisgKgorICogMHgwMCBpcyByZXNlcnZlZCBzbyB1c2UgaXQgZm9yIHRoZSByYWRpbyBjb250cm9sbGVyIGRldmljZS4KKyAqCisgKiBbV0hDSV0gdGFibGUgMi04CisgKi8KKyNkZWZpbmUgVU1DX0NBUF9JRF9XSENJX1JDICAgICAgMHgwMCAvKiByYWRpbyBjb250cm9sbGVyICovCisjZGVmaW5lIFVNQ19DQVBfSURfV0hDSV9XVVNCX0hDIDB4MDEgLyogV1VTQiBob3N0IGNvbnRyb2xsZXIgKi8KKworLyoqCisgKiBzdHJ1Y3QgdW1jX2RldiAtIFVNQyBjYXBhYmlsaXR5IGRldmljZQorICoKKyAqIEB2ZXJzaW9uOiAgdmVyc2lvbiBvZiB0aGUgc3BlY2lmaWNhdGlvbiB0aGlzIGNhcGFiaWxpdHkgY29uZm9ybXMgdG8uCisgKiBAY2FwX2lkOiAgIGNhcGFiaWxpdHkgSUQuCisgKiBAYmFyOiAgICAgIFBDSSBCYXIgKDY0IGJpdCkgd2hlcmUgdGhlIHJlc291cmNlIGxpZXMKKyAqIEByZXNvdXJjZTogcmVnaXN0ZXIgc3BhY2UgcmVzb3VyY2UuCisgKiBAaXJxOiAgICAgIGludGVycnVwdCBsaW5lLgorICovCitzdHJ1Y3QgdW1jX2RldiB7CisJdTE2CQl2ZXJzaW9uOworCXU4CQljYXBfaWQ7CisJdTgJCWJhcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2U7CisJdW5zaWduZWQJaXJxOworCXN0cnVjdCBkZXZpY2UJZGV2OworfTsKKworI2RlZmluZSB0b191bWNfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdW1jX2RldiwgZGV2KQorCisvKioKKyAqIHN0cnVjdCB1bWNfZHJpdmVyIC0gVU1DIGNhcGFiaWxpdHkgZHJpdmVyCisgKiBAY2FwX2lkOiBzdXBwb3J0ZWQgY2FwYWJpbGl0eSBJRC4KKyAqIEBtYXRjaDogZHJpdmVyIHNwZWNpZmljIGNhcGFiaWxpdHkgbWF0Y2hpbmcgZnVuY3Rpb24uCisgKiBAbWF0Y2hfZGF0YTogZHJpdmVyIHNwZWNpZmljIGRhdGEgZm9yIG1hdGNoKCkgKGUuZy4sIGEKKyAqIHRhYmxlIG9mIHBjaV9kZXZpY2VfaWQncyBpZiB1bWNfbWF0Y2hfcGNpX2lkKCkgaXMgdXNlZCkuCisgKi8KK3N0cnVjdCB1bWNfZHJpdmVyIHsKKwljaGFyICpuYW1lOworCXU4IGNhcF9pZDsKKwlpbnQgKCptYXRjaCkoc3RydWN0IHVtY19kcml2ZXIgKiwgc3RydWN0IHVtY19kZXYgKik7CisJY29uc3Qgdm9pZCAqbWF0Y2hfZGF0YTsKKworCWludCAgKCpwcm9iZSkoc3RydWN0IHVtY19kZXYgKik7CisJdm9pZCAoKnJlbW92ZSkoc3RydWN0IHVtY19kZXYgKik7CisJaW50ICAoKnN1c3BlbmQpKHN0cnVjdCB1bWNfZGV2ICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICAoKnJlc3VtZSkoc3RydWN0IHVtY19kZXYgKik7CisKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7Cit9OworCisjZGVmaW5lIHRvX3VtY19kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1bWNfZHJpdmVyLCBkcml2ZXIpCisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgdW1jX2J1c190eXBlOworCitzdHJ1Y3QgdW1jX2RldiAqdW1jX2RldmljZV9jcmVhdGUoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgbik7CitpbnQgX19tdXN0X2NoZWNrIHVtY19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHVtY19kZXYgKnVtYyk7Cit2b2lkIHVtY19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdW1jX2RldiAqdW1jKTsKKworaW50IF9fbXVzdF9jaGVjayBfX3VtY19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcnYsCisJCQkJICAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqbW9kX25hbWUpOworCisvKioKKyAqIHVtY19kcml2ZXJfcmVnaXN0ZXIgLSByZWdpc3RlciBhIFVNQyBjYXBhYmlsdGl0eSBkcml2ZXIuCisgKiBAdW1jX2RydjogIHBvaW50ZXIgdG8gdGhlIGRyaXZlci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHVtY19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcnYpCit7CisJcmV0dXJuIF9fdW1jX2RyaXZlcl9yZWdpc3Rlcih1bWNfZHJ2LCBUSElTX01PRFVMRSwgS0JVSUxEX01PRE5BTUUpOworfQordm9pZCB1bWNfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHVtY19kcml2ZXIgKnVtY19kcnYpOworCisvKgorICogVXRpbGl0eSBmdW5jdGlvbiB5b3UgY2FuIHVzZSB0byBtYXRjaCAodW1jX2RyaXZlci0+bWF0Y2gpIGFnYWluc3QgYQorICogbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mICdzdHJ1Y3QgcGNpX2RldmljZV9pZCcgaW4KKyAqIHVtY19kcml2ZXItPm1hdGNoX2RhdGEuCisgKi8KK2ludCB1bWNfbWF0Y2hfcGNpX2lkKHN0cnVjdCB1bWNfZHJpdmVyICp1bWNfZHJ2LCBzdHJ1Y3QgdW1jX2RldiAqdW1jKTsKKworLyoqCisgKiB1bWNfcGFyZW50X3BjaV9kZXYgLSByZXR1cm4gdGhlIFVNQydzIHBhcmVudCBQQ0kgZGV2aWNlIG9yIE5VTEwgaWYgbm9uZQorICogQHVtY19kZXY6IFVNQyBkZXZpY2Ugd2hvc2UgcGFyZW50IFBDSSBkZXZpY2Ugd2UgYXJlIGxvb2tpbmcgZm9yCisgKgorICogRElSVFkhISEgRE9OJ1QgUkVMWSBPTiBUSElTCisgKgorICogRklYTUU6IFRoaXMgaXMgYXMgZGlydHkgYXMgaXQgZ2V0cywgYnV0IHdlIG5lZWQgc29tZSB3YXkgdG8gY2hlY2sKKyAqIHRoZSBjb3JyZWN0IHR5cGUgb2YgdW1jX2Rldi0+cGFyZW50IChzbyB0aGF0IGZvciBleGFtcGxlLCB3ZSBjYW4KKyAqIGNhc3QgdG8gcGNpX2RldikuIENhc3RpbmcgdG8gcGNpX2RldiBpcyBuZWNlc2FyeSBiZWNhdXNlIGF0IHNvbWUKKyAqIHBvaW50IHdlIG5lZWQgdG8gcmVxdWVzdCByZXNvdXJjZXMgZnJvbSB0aGUgZGV2aWNlLiBNYXBwaW5nIGlzCisgKiBlYXNpbHkgb3ZlciBjb21lIChpb3JlbWFwIGFuZCBzdHVmZiBhcmUgYnVzIGFnbm9zdGljKSwgYnV0IGhvb2tpbmcKKyAqIHVwIHRvIHNvbWUgZXJyb3IgaGFuZGxlcnMgKHN1Y2ggYXMgcGNpIGVycm9yIGhhbmRsZXJzKSBtaWdodCBuZWVkCisgKiB0aGlzLgorICoKKyAqIFRISVMgbWlnaHQgKHByb2JhYmx5IHdpbGwpIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSwgc28gZG9uJ3QgY291bnQKKyAqIG9uIGl0LgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICp1bWNfcGFyZW50X3BjaV9kZXYoc3RydWN0IHVtY19kZXYgKnVtY19kZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCWlmICh1bWNfZGV2LT5kZXYucGFyZW50LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKKwkJcGNpX2RldiA9IHRvX3BjaV9kZXYodW1jX2Rldi0+ZGV2LnBhcmVudCk7CisJcmV0dXJuIHBjaV9kZXY7Cit9CisKKy8qKgorICogdW1jX2Rldl9nZXQoKSAtIHJlZmVyZW5jZSBhIFVNQyBkZXZpY2UuCisgKiBAdW1jX2RldjogUG9pbnRlciB0byBVTUMgZGV2aWNlLgorICoKKyAqIE5PVEU6IHdlIGFyZSBhc3N1bWluZyBpbiB0aGlzIHdob2xlIHNjaGVtZSB0aGF0IHRoZSBwYXJlbnQgZGV2aWNlCisgKiAgICAgICBpcyByZWZlcmVuY2VkIGF0IF9wcm9iZSgpIHRpbWUgYW5kIHVucmVmZXJlbmNlZCBhdCBfcmVtb3ZlKCkKKyAqICAgICAgIHRpbWUgYnkgdGhlIHBhcmVudCdzIHN1YnN5c3RlbS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdW1jX2RldiAqdW1jX2Rldl9nZXQoc3RydWN0IHVtY19kZXYgKnVtY19kZXYpCit7CisJZ2V0X2RldmljZSgmdW1jX2Rldi0+ZGV2KTsKKwlyZXR1cm4gdW1jX2RldjsKK30KKworLyoqCisgKiB1bWNfZGV2X3B1dCgpIC0gdW5yZWZlcmVuY2UgYSBVTUMgZGV2aWNlLgorICogQHVtY19kZXY6IFBvaW50ZXIgdG8gVU1DIGRldmljZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVtY19kZXZfcHV0KHN0cnVjdCB1bWNfZGV2ICp1bWNfZGV2KQoreworCXB1dF9kZXZpY2UoJnVtY19kZXYtPmRldik7Cit9CisKKy8qKgorICogdW1jX3NldF9kcnZkYXRhIC0gc2V0IFVNQyBkZXZpY2UncyBkcml2ZXIgZGF0YS4KKyAqIEB1bWNfZGV2OiBQb2ludGVyIHRvIFVNQyBkZXZpY2UuCisgKiBAZGF0YTogICAgRGF0YSB0byBzZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bWNfc2V0X2RydmRhdGEoc3RydWN0IHVtY19kZXYgKnVtY19kZXYsIHZvaWQgKmRhdGEpCit7CisJZGV2X3NldF9kcnZkYXRhKCZ1bWNfZGV2LT5kZXYsIGRhdGEpOworfQorCisvKioKKyAqIHVtY19nZXRfZHJ2ZGF0YSAtIHJlY292ZXIgVU1DIGRldmljZSdzIGRyaXZlciBkYXRhLgorICogQHVtY19kZXY6IFBvaW50ZXIgdG8gVU1DIGRldmljZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICp1bWNfZ2V0X2RydmRhdGEoc3RydWN0IHVtY19kZXYgKnVtY19kZXYpCit7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmdW1jX2Rldi0+ZGV2KTsKK30KKworaW50IHVtY19jb250cm9sbGVyX3Jlc2V0KHN0cnVjdCB1bWNfZGV2ICp1bWMpOworCisjZW5kaWYgLyogI2lmbmRlZiBfTElOVVhfVVdCX1VNQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91d2Ivd2hjaS5oIGIvaW5jbHVkZS9saW51eC91d2Ivd2hjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNWVjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3V3Yi93aGNpLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGZvciBVbHRyYS1XaWRlLUJhbmQgYW5kIFdpcmVsZXNzIFVTQgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKgorICoKKyAqIFJlZmVyZW5jZXM6CisgKiAgIFtXSENJXSBXaXJlbGVzcyBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24gZm9yCisgKiAgICAgICAgICBDZXJ0aWZpZWQgV2lyZWxlc3MgVW5pdmVyc2FsIFNlcmlhbCBCdXMsIHJldmlzaW9uIDAuOTUuCisgKi8KKyNpZm5kZWYgX0xJTlVYX1VXQl9XSENJX0hfCisjZGVmaW5lIF9MSU5VWF9VV0JfV0hDSV9IXworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qCisgKiBVV0IgaW50ZXJmYWNlIGNhcGFiaWxpdHkgcmVnaXN0ZXJzIChvZmZzZXRzIGZyb20gVVdCQkFTRSkKKyAqCisgKiBbV0hDSV0gc2VjdGlvbiAyLjIKKyAqLworI2RlZmluZSBVV0JDQVBJTkZPCTB4MDAgLyogPT0gVVdCQ0FQREFUQSgwKSAqLworIyAgZGVmaW5lIFVXQkNBUElORk9fVE9fTl9DQVBTKGMpCSgoKGMpID4+IDApICAmIDB4RnVsbCkKKyNkZWZpbmUgVVdCQ0FQREFUQShuKQkoOCoobikpCisjICBkZWZpbmUgVVdCQ0FQREFUQV9UT19WRVJTSU9OKGMpCSgoKGMpID4+IDMyKSAmIDB4RkZGRnVsbCkKKyMgIGRlZmluZSBVV0JDQVBEQVRBX1RPX09GRlNFVChjKQkoKChjKSA+PiAxOCkgJiAweDNGRkZ1bGwpCisjICBkZWZpbmUgVVdCQ0FQREFUQV9UT19CQVIoYykJCSgoKGMpID4+IDE2KSAmIDB4M3VsbCkKKyMgIGRlZmluZSBVV0JDQVBEQVRBX1RPX1NJWkUoYykJCSgoKChjKSA+PiA4KSAmIDB4RkZ1bGwpICogc2l6ZW9mKHUzMikpCisjICBkZWZpbmUgVVdCQ0FQREFUQV9UT19DQVBfSUQoYykJKCgoYykgPj4gMCkgICYgMHhGRnVsbCkKKworLyogU2l6ZSBvZiB0aGUgV0hDSSBjYXBhYmlsaXR5IGRhdGEgKGluY2x1ZGluZyB0aGUgUkMgY2FwYWJpbGl0eSkgZm9yCisgICBhIGRldmljZSB3aXRoIG4gY2FwYWJpbGl0aWVzLiAqLworI2RlZmluZSBVV0JDQVBEQVRBX1NJWkUobikgKDggKyA4KihuKSkKKworCisvKgorICogVVJDIHJlZ2lzdGVycyAob2Zmc2V0cyBmcm9tIFVSQ0JBU0UpCisgKgorICogW1dIQ0ldIHNlY3Rpb24gMi4zCisgKi8KKyNkZWZpbmUgVVJDQ01ECQkweDAwCisjICBkZWZpbmUgVVJDQ01EX1JFU0VUCQkoMSA8PCAzMSkgIC8qIFVNQyBIYXJkd2FyZSByZXNldCAqLworIyAgZGVmaW5lIFVSQ0NNRF9SUwkJKDEgPDwgMzApICAvKiBSdW4vU3RvcCAqLworIyAgZGVmaW5lIFVSQ0NNRF9FQVJWCQkoMSA8PCAyOSkgIC8qIEV2ZW50IEFkZHJlc3MgUmVnaXN0ZXIgVmFsaWQgKi8KKyMgIGRlZmluZSBVUkNDTURfQUNUSVZFCQkoMSA8PCAxNSkgIC8qIENvbW1hbmQgaXMgYWN0aXZlICovCisjICBkZWZpbmUgVVJDQ01EX0lXUgkJKDEgPDwgMTQpICAvKiBJbnRlcnJ1cHQgV2hlbiBSZWFkeSAqLworIyAgZGVmaW5lIFVSQ0NNRF9TSVpFX01BU0sJMHgwMDAwMGZmZiAvKiBDb21tYW5kIHNpemUgbWFzayAqLworI2RlZmluZSBVUkNTVFMJCTB4MDQKKyMgIGRlZmluZSBVUkNTVFNfRVBTCQkoMSA8PCAxNykgIC8qIEV2ZW50IFByb2Nlc3NpbmcgU3RhdHVzICovCisjICBkZWZpbmUgVVJDU1RTX0hBTFRFRAkJKDEgPDwgMTYpICAvKiBSQyBoYWx0ZWQgKi8KKyMgIGRlZmluZSBVUkNTVFNfSFNFCQkoMSA8PCAxMCkgIC8qIEhvc3QgU3lzdGVtIEVycm9yLi4uZnJpZWQgKi8KKyMgIGRlZmluZSBVUkNTVFNfRVIJCSgxIDw8ICA5KSAgLyogRXZlbnQgUmVhZHkgKi8KKyMgIGRlZmluZSBVUkNTVFNfUkNJCQkoMSA8PCAgOCkgIC8qIFJlYWR5IGZvciBDb21tYW5kIEludGVycnVwdCAqLworIyAgZGVmaW5lIFVSQ1NUU19JTlRfTUFTSwkweDAwMDAwNzAwIC8qIFVSQyBpbnRlcnJ1cHQgc291cmNlcyAqLworIyAgZGVmaW5lIFVSQ1NUU19JU0kJCTB4MDAwMDAwZmYgLyogSW50ZXJydXB0IFNvdXJjZSBJZGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBVUkNJTlRSCQkweDA4CisjICBkZWZpbmUgVVJDSU5UUl9FTl9BTEwJMHgwMDAwMDdmZiAvKiBFbmFibGUgYWxsIGludGVycnVwdCBzb3VyY2VzICovCisjZGVmaW5lIFVSQ0NNREFERFIJMHgxMAorI2RlZmluZSBVUkNFVlRBRERSCTB4MTgKKyMgIGRlZmluZSBVUkNFVlRBRERSX09GRlNFVF9NQVNLIDB4ZmZmICAgIC8qIEV2ZW50IHBvaW50ZXIgb2Zmc2V0IG1hc2sgKi8KKworCisvKiogV3JpdGUgMzIgYml0IEB2YWx1ZSB0byBsaXR0bGUgZW5kaWFuIHJlZ2lzdGVyIGF0IEBhZGRyICovCitzdGF0aWMgaW5saW5lCit2b2lkIGxlX3dyaXRlbCh1MzIgdmFsdWUsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpb3dyaXRlMzIodmFsdWUsIGFkZHIpOworfQorCisKKy8qKiBSZWFkIGZyb20gMzIgYml0IGxpdHRsZSBlbmRpYW4gcmVnaXN0ZXIgYXQgQGFkZHIgKi8KK3N0YXRpYyBpbmxpbmUKK3UzMiBsZV9yZWFkbCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyKGFkZHIpOworfQorCisKKy8qKiBXcml0ZSA2NCBiaXQgQHZhbHVlIHRvIGxpdHRsZSBlbmRpYW4gcmVnaXN0ZXIgYXQgQGFkZHIgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgbGVfd3JpdGVxKHU2NCB2YWx1ZSwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlvd3JpdGUzMih2YWx1ZSwgYWRkcik7CisJaW93cml0ZTMyKHZhbHVlID4+IDMyLCBhZGRyICsgNCk7Cit9CisKKworLyoqIFJlYWQgZnJvbSA2NCBiaXQgbGl0dGxlIGVuZGlhbiByZWdpc3RlciBhdCBAYWRkciAqLworc3RhdGljIGlubGluZQordTY0IGxlX3JlYWRxKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1NjQgdmFsdWU7CisJdmFsdWUgID0gaW9yZWFkMzIoYWRkcik7CisJdmFsdWUgfD0gKHU2NClpb3JlYWQzMihhZGRyICsgNCkgPDwgMzI7CisJcmV0dXJuIHZhbHVlOworfQorCitleHRlcm4gaW50IHdoY2lfd2FpdF9mb3Ioc3RydWN0IGRldmljZSAqZGV2LCB1MzIgX19pb21lbSAqcmVnLAorCQkJIHUzMiBtYXNrLCB1MzIgcmVzdWx0LAorCQkJIHVuc2lnbmVkIGxvbmcgbWF4X21zLCAgY29uc3QgY2hhciAqdGFnKTsKKworI2VuZGlmIC8qICNpZm5kZWYgX0xJTlVYX1VXQl9XSENJX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCBkNGIwMzAzLi40NjY5ZDdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTMxNSw2ICszMTUsMTMgQEAKIC8qIHNlZSBodHRwOi8vd3d3LnNpbGljb25pbWFnaW5nLmNvbS9SR0IlMjBCYXllci5odG0gKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSOCAgdjRsMl9mb3VyY2MoJ0InLCAnQScsICc4JywgJzEnKSAvKiAgOCAgQkdCRy4uIEdSR1IuLiAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkc4ICB2NGwyX2ZvdXJjYygnRycsICdCJywgJ1InLCAnRycpIC8qICA4ICBHQkdCLi4gUkdSRy4uICovCisvKgorICogMTBiaXQgcmF3IGJheWVyLCBleHBhbmRlZCB0byAxNiBiaXRzCisgKiB4eHh4cnJycnJycnJycnh4eHhnZ2dnZ2dnZ2dnIHh4eHhnZ2dnZ2dnZ2dneHh4eGJiYmJiYmJiYmIuLi4KKyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMCB2NGwyX2ZvdXJjYygnQicsICdBJywgJzEnLCAnMCcpCisvKiAxMGJpdCByYXcgYmF5ZXIgRFBDTSBjb21wcmVzc2VkIHRvIDggYml0cyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004IHY0bDJfZm91cmNjKCdCJywgJ0QnLCAnMScsICcwJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSMTYgdjRsMl9mb3VyY2MoJ0InLCAnWScsICdSJywgJzInKSAvKiAxNiAgQkdCRy4uIEdSR1IuLiAqLwogCiAvKiBjb21wcmVzc2VkIGZvcm1hdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKaW5kZXggMzI4ZWI0MC4uMzA3Yjg4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WTUFMTE9DX0gKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CQkvKiBwZ3Byb3RfdCAqLwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CQkvKiB2bWEgZGVmaW5pbmcgdXNlciBtYXBwaW5nIGluIG1tX3R5cGVzLmggKi8KQEAgLTIzLDcgKzI0LDYgQEAKICNlbmRpZgogCiBzdHJ1Y3Qgdm1fc3RydWN0IHsKLQkvKiBrZWVwIG5leHQsYWRkcixzaXplIHRvZ2V0aGVyIHRvIHNwZWVkdXAgbG9va3VwcyAqLwogCXN0cnVjdCB2bV9zdHJ1Y3QJKm5leHQ7CiAJdm9pZAkJCSphZGRyOwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CkBAIC0zNyw2ICszNywxOSBAQAogLyoKICAqCUhpZ2hsZXZlbCBBUElzIGZvciBkcml2ZXIgdXNlCiAgKi8KK2V4dGVybiB2b2lkIHZtX3VubWFwX3JhbShjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBjb3VudCk7CitleHRlcm4gdm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJaW50IG5vZGUsIHBncHJvdF90IHByb3QpOworZXh0ZXJuIHZvaWQgdm1fdW5tYXBfYWxpYXNlcyh2b2lkKTsKKworI2lmZGVmIENPTkZJR19NTVUKK2V4dGVybiB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfaW5pdCh2b2lkKQoreworfQorI2VuZGlmCisKIGV4dGVybiB2b2lkICp2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdm1hbGxvY191c2VyKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpOwpAQCAtOTAsNiArMTAzLDQgQEAKIGV4dGVybiByd2xvY2tfdCB2bWxpc3RfbG9jazsKIGV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdm1hbGxvY19vcDsKLQogI2VuZGlmIC8qIF9MSU5VWF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDU4MzM0ZDQuLjUyNGNkMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaApAQCAtNDEsMTMgKzQxLDE5IEBACiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCQlIVExCX0JVRERZX1BHQUxMT0MsIEhUTEJfQlVERFlfUEdBTExPQ19GQUlMLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQlVTkVWSUNUQUJMRV9QR0NVTExFRCwJLyogY3VsbGVkIHRvIG5vcmVjbGFpbSBsaXN0ICovCisJCVVORVZJQ1RBQkxFX1BHU0NBTk5FRCwJLyogc2Nhbm5lZCBmb3IgcmVjbGFpbWFiaWxpdHkgKi8KKwkJVU5FVklDVEFCTEVfUEdSRVNDVUVELAkvKiByZXNjdWVkIGZyb20gbm9yZWNsYWltIGxpc3QgKi8KKwkJVU5FVklDVEFCTEVfUEdNTE9DS0VELAorCQlVTkVWSUNUQUJMRV9QR01VTkxPQ0tFRCwKKwkJVU5FVklDVEFCTEVfUEdDTEVBUkVELAkvKiBvbiBDT1csIHBhZ2UgdHJ1bmNhdGUgKi8KKwkJVU5FVklDVEFCTEVfUEdTVFJBTkRFRCwJLyogdW5hYmxlIHRvIGlzb2xhdGUgb24gdW5sb2NrICovCisJCVVORVZJQ1RBQkxFX01MT0NLRlJFRUQsCisjZW5kaWYKIAkJTlJfVk1fRVZFTlRfSVRFTVMKIH07CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZnJhZ21lbnRhdGlvbl9vcDsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZXR5cGVpbmZvX29wOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB6b25laW5mb19vcDsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdm1zdGF0X29wOwogZXh0ZXJuIGludCBzeXNjdGxfc3RhdF9pbnRlcnZhbDsKIAogI2lmZGVmIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUwpAQCAtMTU5LDYgKzE2NSwxNiBAQAogCXJldHVybiB4OwogfQogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnbG9iYWxfbHJ1X3BhZ2VzKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgem9uZV9scnVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpCit7CisJcmV0dXJuICh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pCisJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9GSUxFKQorCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKQorCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9GSUxFKSk7Cit9CisKICNpZmRlZiBDT05GSUdfTlVNQQogLyoKICAqIERldGVybWluZSB0aGUgcGVyIG5vZGUgdmFsdWUgb2YgYSBzdGF0IGl0ZW0uIFRoaXMgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2xwLmggYi9pbmNsdWRlL2xpbnV4L3dscC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzU0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3dscC5oCkBAIC0wLDAgKzEsNzM1IEBACisvKgorICogV2lNZWRpYSBMb2dpY2FsIExpbmsgQ29udHJvbCBQcm90b2NvbCAoV0xQKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uCisgKiBSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqCisgKiBGSVhNRTogZG9jcworICoKKyAqIC0gRG9lcyBub3QgKHlldCkgaW5jbHVkZSBzdXBwb3J0IGZvciBXTFAgY29udHJvbCBmcmFtZXMKKyAqICAgV0xQIERyYWZ0IDAuOTkgWzYuNV0uCisgKgorICogICBBIHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NzaWRCICAgICAgd3NzaWRCCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzc2lkQSAgICAgIHdzc2lkQQorICogICB3bHAgaW50ZXJmYWNlIHsgICAgICAgICAgICAgXiAgICAgICAgICAgXgorICogICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICogICAgICAgLi4uICAgICAgICAgICAgICAgLi4uICB3c3NpZCAgICAgIHdzc2lkIC4uLgorICogICAgICAgd2xwIC0tLSAuLi4gICAgICAgICAgICAgfCAgICAgICAgICAgfAorICogICB9OyAgICAgICAgICBuZWlnaGJvcnMgLS0+IG5laWdoYkEgLS0+IG5laWdoYkIKKyAqICAgICAgICAgICAgICAgLi4uCisgKiAgICAgICAgICAgICAgIHdzcworICogICAgICAgICAgICAgICAuLi4KKyAqICAgICAgICAgICAgICAgZWRhIGNhY2hlICAtLT4gbmVpZ2hib3JBIC0tPiBuZWlnaGJvckIgLS0+IG5laWdoYm9yQyAuLi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfX1dMUF9IXworI2RlZmluZSBfX0xJTlVYX19XTFBfSF8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91d2IuaD4KKworLyoqCisgKiBXTFAgUHJvdG9jb2wgSUQKKyAqIFdMUCBEcmFmdCAwLjk5IFs2LjJdCisgKgorICogVGhlIE1VWCBoZWFkZXIgZm9yIGFsbCBXTFAgZnJhbWVzCisgKi8KKyNkZWZpbmUgV0xQX1BST1RPQ09MX0lEIDB4MDEwMAorCisvKioKKyAqIFdMUCBWZXJzaW9uCisgKiBXTFAgdmVyc2lvbiBwbGFjZWQgaW4gdGhlIGFzc29jaWF0aW9uIGZyYW1lcyAoV0xQIDAuOTkgWzYuNl0pCisgKi8KKyNkZWZpbmUgV0xQX1ZFUlNJT04gMHgxMAorCisvKioKKyAqIEJ5dGVzIG5lZWRlZCB0byBwcmludCBVVUlEIGFzIHN0cmluZworICovCisjZGVmaW5lIFdMUF9XU1NfVVVJRF9TVFJTSVpFIDQ4CisKKy8qKgorICogQnl0ZXMgbmVlZGVkIHRvIHByaW50IG5vbmNlIGFzIHN0cmluZworICovCisjZGVmaW5lIFdMUF9XU1NfTk9OQ0VfU1RSU0laRSA0OAorCisKKy8qKgorICogU2l6ZSB1c2VkIGZvciBXTFAgbmFtZSBzaXplCisgKgorICogVGhlIFdTUyBuYW1lIGlzIHNldCB0byA2NSBieXRlcywgMSBieXRlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtCisgKiBhbGxvd2VkIGJ5IHRoZSBXTFAgc3BlYy4gVGhpcyBpcyB0byBoYXZlIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZworICogZm9yIGRpc3BsYXkgdG8gdGhlIHVzZXIuIEEgbWF4aW11bSBvZiA2NCBieXRlcyB3aWxsIHN0aWxsIGJlIHVzZWQKKyAqIHdoZW4gcGxhY2luZyB0aGUgV1NTIG5hbWUgZmllbGQgaW4gYXNzb2NpYXRpb24gZnJhbWVzLgorICovCisjZGVmaW5lIFdMUF9XU1NfTkFNRV9TSVpFIDY1CisKKy8qKgorICogTnVtYmVyIG9mIGJ5dGVzIGFkZGVkIGJ5IFdMUCB0byBkYXRhIGZyYW1lCisgKgorICogQSBkYXRhIGZyYW1lIHRyYW5zbWl0dGVkIGZyb20gYSBob3N0IHdpbGwgYmUgcGxhY2VkIGluIGEgU3RhbmRhcmQgb3IKKyAqIEFiYnJldmlhdGVkIFdMUCBmcmFtZS4gVGhlc2UgaGF2ZSBhbiBleHRyYSA0IGJ5dGVzIG9mIGhlYWRlciAoc3RydWN0CisgKiB3bHBfZnJhbWVfc3RkX2FiYnJ2X2hkcikuCisgKiBXaGVuIHRoZSBzdGFjayBzZW5kcyB0aGlzIGRhdGEgZnJhbWUgZm9yIHRyYW5zbWlzc2lvbiBpdCBuZWVkcyB0byBlbnN1cmUKKyAqIHRoZXJlIGlzIGVub3VnaCBoZWFkcm9vbSBmb3IgdGhpcyBoZWFkZXIuCisgKi8KKyNkZWZpbmUgV0xQX0RBVEFfSExFTiA0CisKKy8qKgorICogU3RhdGUgb2YgZGV2aWNlIHJlZ2FyZGluZyBXTFAgU2VydmljZSBTZXQKKyAqCisgKiBXTFBfV1NTX1NUQVRFX05PTkU6IHRoZSBob3N0IGRvZXMgbm90IHBhcnRpY2lwYXRlIGluIGFueSBXU1MKKyAqIFdMUF9XU1NfU1RBVEVfUEFSVF9FTlJPTExFRDogdXNlZCBhcyBwYXJ0IG9mIHRoZSBlbnJvbGxtZW50IHNlcXVlbmNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlBhcnRpYWwgRW5yb2xsIikuIFRoaXMgc3RhdGUgaXMgdXNlZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgdGhlIGZpcnN0IHBhcnQgb2YgZW5yb2xsbWVudCB0aGF0IGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNlY3VyZS4gSWYgdGhlIFdTUyBpcyB1bnNlY3VyZSB0aGVuIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgd2lsbCBwcm9tcHRseSBnbyB0byBXTFBfV1NTX1NUQVRFX0VOUk9MTEVELAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIFdTUyBpcyBub3Qgc2VjdXJlIHRoZW4gdGhlIGVucm9sbG1lbnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NlZHVyZSBpcyBhIGZldyBtb3JlIHN0ZXBzIGJlZm9yZSB3ZSBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucm9sbGVkLgorICogV0xQX1dTU19TVEFURV9FTlJPTExFRDogdGhlIGhvc3QgaXMgZW5yb2xsZWQgaW4gYSBXU1MKKyAqIFdMUF9XU1NfU1RBVEVfQUNUSVZFOiBXU1MgaXMgYWN0aXZhdGVkCisgKiBXTFBfV1NTX1NUQVRFX0NPTk5FQ1RFRDogaG9zdCBpcyBjb25uZWN0ZWQgdG8gbmVpZ2hib3IgaW4gV1NTCisgKgorICovCitlbnVtIHdscF93c3Nfc3RhdGUgeworCVdMUF9XU1NfU1RBVEVfTk9ORSA9IDAsCisJV0xQX1dTU19TVEFURV9QQVJUX0VOUk9MTEVELAorCVdMUF9XU1NfU1RBVEVfRU5ST0xMRUQsCisJV0xQX1dTU19TVEFURV9BQ1RJVkUsCisJV0xQX1dTU19TVEFURV9DT05ORUNURUQsCit9OworCisvKioKKyAqIFdTUyBTZWN1cmUgc3RhdHVzCisgKiBXTFAgMC45OSBUYWJsZSA2CisgKgorICogU2V0IHRvIG9uZSBpZiB0aGUgV1NTIGlzIHNlY3VyZSwgemVybyBpZiBpdCBpcyBub3Qgc2VjdXJlCisgKi8KK2VudW0gd2xwX3dzc19zZWNfc3RhdHVzIHsKKwlXTFBfV1NTX1VOU0VDVVJFID0gMCwKKwlXTFBfV1NTX1NFQ1VSRSwKK307CisKKy8qKgorICogV0xQIGZyYW1lIHR5cGUKKyAqIFdMUCBEcmFmdCAwLjk5IFs2LjIgVGFibGUgMV0KKyAqLworZW51bSB3bHBfZnJhbWVfdHlwZSB7CisJV0xQX0ZSQU1FX1NUQU5EQVJEID0gMCwKKwlXTFBfRlJBTUVfQUJCUkVWSUFURUQsCisJV0xQX0ZSQU1FX0NPTlRST0wsCisJV0xQX0ZSQU1FX0FTU09DSUFUSU9OLAorfTsKKworLyoqCisgKiBXTFAgQXNzb2NpYXRpb24gTWVzc2FnZSBUeXBlCisgKiBXTFAgRHJhZnQgMC45OSBbNi42LjEuMiBUYWJsZSA4XQorICovCitlbnVtIHdscF9hc3NvY190eXBlIHsKKwlXTFBfQVNTT0NfRDEgPSAyLAorCVdMUF9BU1NPQ19EMiA9IDMsCisJV0xQX0FTU09DX00xID0gNCwKKwlXTFBfQVNTT0NfTTIgPSA1LAorCVdMUF9BU1NPQ19NMyA9IDcsCisJV0xQX0FTU09DX000ID0gOCwKKwlXTFBfQVNTT0NfTTUgPSA5LAorCVdMUF9BU1NPQ19NNiA9IDEwLAorCVdMUF9BU1NPQ19NNyA9IDExLAorCVdMUF9BU1NPQ19NOCA9IDEyLAorCVdMUF9BU1NPQ19GMCA9IDE0LAorCVdMUF9BU1NPQ19FMSA9IDMyLAorCVdMUF9BU1NPQ19FMiA9IDMzLAorCVdMUF9BU1NPQ19DMSA9IDM0LAorCVdMUF9BU1NPQ19DMiA9IDM1LAorCVdMUF9BU1NPQ19DMyA9IDM2LAorCVdMUF9BU1NPQ19DNCA9IDM3LAorfTsKKworLyoqCisgKiBXTFAgQXR0cmlidXRlIFR5cGUKKyAqIFdMUCBEcmFmdCAwLjk5IFs2LjYuMSBUYWJsZSA2XQorICovCitlbnVtIHdscF9hdHRyX3R5cGUgeworCVdMUF9BVFRSX0FVVEgJCT0gMHgxMDA1LCAvKiBBdXRoZW50aWNhdG9yICovCisJV0xQX0FUVFJfREVWX05BTUUgCT0gMHgxMDExLCAvKiBEZXZpY2UgTmFtZSAqLworCVdMUF9BVFRSX0RFVl9QV0RfSUQgCT0gMHgxMDEyLCAvKiBEZXZpY2UgUGFzc3dvcmQgSUQgKi8KKwlXTFBfQVRUUl9FX0hBU0gxCT0gMHgxMDE0LCAvKiBFLUhhc2gxICovCisJV0xQX0FUVFJfRV9IQVNIMgk9IDB4MTAxNSwgLyogRS1IYXNoMiAqLworCVdMUF9BVFRSX0VfU05PTkNFMQk9IDB4MTAxNiwgLyogRS1TTm9uY2UxICovCisJV0xQX0FUVFJfRV9TTk9OQ0UyCT0gMHgxMDE3LCAvKiBFLVNOb25jZTIgKi8KKwlXTFBfQVRUUl9FTkNSX1NFVAk9IDB4MTAxOCwgLyogRW5jcnlwdGVkIFNldHRpbmdzICovCisJV0xQX0FUVFJfRU5STF9OT05DRQk9IDB4MTAxQSwgLyogRW5yb2xsZWUgTm9uY2UgKi8KKwlXTFBfQVRUUl9LRVlXUkFQX0FVVEgJPSAweDEwMUUsIC8qIEtleSBXcmFwIEF1dGhlbnRpY2F0b3IgKi8KKwlXTFBfQVRUUl9NQU5VRgkJPSAweDEwMjEsIC8qIE1hbnVmYWN0dXJlciAqLworCVdMUF9BVFRSX01TR19UWVBFCT0gMHgxMDIyLCAvKiBNZXNzYWdlIFR5cGUgKi8KKwlXTFBfQVRUUl9NT0RFTF9OQU1FCT0gMHgxMDIzLCAvKiBNb2RlbCBOYW1lICovCisJV0xQX0FUVFJfTU9ERUxfTlIJPSAweDEwMjQsIC8qIE1vZGVsIE51bWJlciAqLworCVdMUF9BVFRSX1BVQl9LRVkJPSAweDEwMzIsIC8qIFB1YmxpYyBLZXkgKi8KKwlXTFBfQVRUUl9SRUdfTk9OQ0UJPSAweDEwMzksIC8qIFJlZ2lzdHJhciBOb25jZSAqLworCVdMUF9BVFRSX1JfSEFTSDEJPSAweDEwM0QsIC8qIFItSGFzaDEgKi8KKwlXTFBfQVRUUl9SX0hBU0gyCT0gMHgxMDNFLCAvKiBSLUhhc2gyICovCisJV0xQX0FUVFJfUl9TTk9OQ0UxCT0gMHgxMDNGLCAvKiBSLVNOb25jZTEgKi8KKwlXTFBfQVRUUl9SX1NOT05DRTIJPSAweDEwNDAsIC8qIFItU05vbmNlMiAqLworCVdMUF9BVFRSX1NFUklBTAkJPSAweDEwNDIsIC8qIFNlcmlhbCBudW1iZXIgKi8KKwlXTFBfQVRUUl9VVUlEX0UJCT0gMHgxMDQ3LCAvKiBVVUlELUUgKi8KKwlXTFBfQVRUUl9VVUlEX1IJCT0gMHgxMDQ4LCAvKiBVVUlELVIgKi8KKwlXTFBfQVRUUl9QUklfREVWX1RZUEUJPSAweDEwNTQsIC8qIFByaW1hcnkgRGV2aWNlIFR5cGUgKi8KKwlXTFBfQVRUUl9TRUNfREVWX1RZUEUJPSAweDEwNTUsIC8qIFNlY29uZGFyeSBEZXZpY2UgVHlwZSAqLworCVdMUF9BVFRSX1BPUlRfREVWCT0gMHgxMDU2LCAvKiBQb3J0YWJsZSBEZXZpY2UgKi8KKwlXTFBfQVRUUl9BUFBfRVhUCT0gMHgxMDU4LCAvKiBBcHBsaWNhdGlvbiBFeHRlbnNpb24gKi8KKwlXTFBfQVRUUl9XTFBfVkVSCT0gMHgyMDAwLCAvKiBXTFAgVmVyc2lvbiAqLworCVdMUF9BVFRSX1dTU0lECQk9IDB4MjAwMSwgLyogV1NTSUQgKi8KKwlXTFBfQVRUUl9XU1NfTkFNRQk9IDB4MjAwMiwgLyogV1NTIE5hbWUgKi8KKwlXTFBfQVRUUl9XU1NfU0VDX1NUQVQJPSAweDIwMDMsIC8qIFdTUyBTZWN1cmUgU3RhdHVzICovCisJV0xQX0FUVFJfV1NTX0JDQVNUCT0gMHgyMDA0LCAvKiBXU1MgQnJvYWRjYXN0IEFkZHJlc3MgKi8KKwlXTFBfQVRUUl9XU1NfTV9LRVkJPSAweDIwMDUsIC8qIFdTUyBNYXN0ZXIgS2V5ICovCisJV0xQX0FUVFJfQUNDX0VOUkwJPSAweDIwMDYsIC8qIEFjY2VwdGluZyBFbnJvbGxtZW50ICovCisJV0xQX0FUVFJfV1NTX0lORk8JPSAweDIwMDcsIC8qIFdTUyBJbmZvcm1hdGlvbiAqLworCVdMUF9BVFRSX1dTU19TRUxfTVRIRAk9IDB4MjAwOCwgLyogV1NTIFNlbGVjdGlvbiBNZXRob2QgKi8KKwlXTFBfQVRUUl9BU1NDX01USERfTElTVAk9IDB4MjAwOSwgLyogQXNzb2NpYXRpb24gTWV0aG9kcyBMaXN0ICovCisJV0xQX0FUVFJfU0VMX0FTU0NfTVRIRAk9IDB4MjAwQSwgLyogU2VsZWN0ZWQgQXNzb2NpYXRpb24gTWV0aG9kICovCisJV0xQX0FUVFJfRU5STF9IQVNIX0NPTU0JPSAweDIwMEIsIC8qIEVucm9sbGVlIEhhc2ggQ29tbWl0bWVudCAqLworCVdMUF9BVFRSX1dTU19UQUcJPSAweDIwMEMsIC8qIFdTUyBUYWcgKi8KKwlXTFBfQVRUUl9XU1NfVklSVAk9IDB4MjAwRCwgLyogV1NTIFZpcnR1YWwgRVVJLTQ4ICovCisJV0xQX0FUVFJfV0xQX0FTU0NfRVJSCT0gMHgyMDBFLCAvKiBXTFAgQXNzb2NpYXRpb24gRXJyb3IgKi8KKwlXTFBfQVRUUl9WTkRSX0VYVAk9IDB4MjAwRiwgLyogVmVuZG9yIEV4dGVuc2lvbiAqLworfTsKKworLyoqCisgKiBXTFAgQ2F0ZWdvcnkgSUQgb2YgcHJpbWFyeS9zZWNvbmRhcnkgZGV2aWNlCisgKiBXTFAgRHJhZnQgMC45OSBbNi42LjEuOCBUYWJsZSAxMl0KKyAqLworZW51bSB3bHBfZGV2X2NhdGVnb3J5X2lkIHsKKwlXTFBfREVWX0NBVF9DT01QVVRFUiA9IDEsCisJV0xQX0RFVl9DQVRfSU5QVVQsCisJV0xQX0RFVl9DQVRfUFJJTlRfU0NBTl9GQVhfQ09QSUVSLAorCVdMUF9ERVZfQ0FUX0NBTUVSQSwKKwlXTFBfREVWX0NBVF9TVE9SQUdFLAorCVdMUF9ERVZfQ0FUX0lORlJBU1RSVUNUVVJFLAorCVdMUF9ERVZfQ0FUX0RJU1BMQVksCisJV0xQX0RFVl9DQVRfTVVMVElNLAorCVdMUF9ERVZfQ0FUX0dBTUlORywKKwlXTFBfREVWX0NBVF9URUxFUEhPTkUsCisJV0xQX0RFVl9DQVRfT1RIRVIgPSA2NTUzNSwKK307CisKKy8qKgorICogV0xQIFdTUyBzZWxlY3Rpb24gbWV0aG9kCisgKiBXTFAgRHJhZnQgMC45OSBbNi42LjEuNiBUYWJsZSAxMF0KKyAqLworZW51bSB3bHBfd3NzX3NlbF9tdGhkIHsKKwlXTFBfV1NTX0VOUkxfU0VMRUNUID0gMSwJLyogRW5yb2xsZWUgc2VsZWN0cyAqLworCVdMUF9XU1NfUkVHX1NFTEVDVCwJCS8qIFJlZ2lzdHJhciBzZWxlY3RzICovCit9OworCisvKioKKyAqIFdMUCBhc3NvY2lhdGlvbiBlcnJvciB2YWx1ZXMKKyAqIFdMUCBEcmFmdCAwLjk5IFs2LjYuMS41IFRhYmxlIDldCisgKi8KK2VudW0gd2xwX2Fzc2NfZXJyb3IgeworCVdMUF9BU1NPQ19FUlJPUl9OT05FLAorCVdMUF9BU1NPQ19FUlJPUl9BVVRILAkJLyogQXV0aGVudGljYXRvciBGYWlsdXJlICovCisJV0xQX0FTU09DX0VSUk9SX1JPR1VFLAkJLyogUm9ndWUgYWN0aXZpdHkgc3VzcGVjdGVkICovCisJV0xQX0FTU09DX0VSUk9SX0JVU1ksCQkvKiBEZXZpY2UgYnVzeSAqLworCVdMUF9BU1NPQ19FUlJPUl9MT0NLLAkJLyogU2V0dXAgTG9ja2VkICovCisJV0xQX0FTU09DX0VSUk9SX05PVF9SRUFEWSwJLyogUmVnaXN0cmFyIG5vdCByZWFkeSAqLworCVdMUF9BU1NPQ19FUlJPUl9JTlYsCQkvKiBJbnZhbGlkIFdTUyBzZWxlY3Rpb24gKi8KKwlXTFBfQVNTT0NfRVJST1JfTVNHX1RJTUUsCS8qIE1lc3NhZ2UgdGltZW91dCAqLworCVdMUF9BU1NPQ19FUlJPUl9FTlJfVElNRSwJLyogRW5yb2xsbWVudCBzZXNzaW9uIHRpbWVvdXQgKi8KKwlXTFBfQVNTT0NfRVJST1JfUFcsCQkvKiBEZXZpY2UgcGFzc3dvcmQgaW52YWxpZCAqLworCVdMUF9BU1NPQ19FUlJPUl9WRVIsCQkvKiBVbnN1cHBvcnRlZCB2ZXJzaW9uICovCisJV0xQX0FTU09DX0VSUk9SX0lOVCwJCS8qIEludGVybmFsIGVycm9yICovCisJV0xQX0FTU09DX0VSUk9SX1VOREVGLAkJLyogVW5kZWZpbmVkIGVycm9yICovCisJV0xQX0FTU09DX0VSUk9SX05VTSwJCS8qIE51bWVyaWMgY29tcGFyaXNvbiBmYWlsdXJlICovCisJV0xQX0FTU09DX0VSUk9SX1dBSVQsCQkvKiBXYWl0aW5nIGZvciB1c2VyIGlucHV0ICovCit9OworCisvKioKKyAqIFdMUCBQYXJhbWV0ZXJzCisgKiBXTFAgMC45OSBbNy43XQorICovCitlbnVtIHdscF9wYXJhbWV0ZXJzIHsKKwlXTFBfUEVSX01TR19USU1FT1VUID0gMTUsCS8qIFNlY29uZHMgdG8gd2FpdCBmb3IgcmVzcG9uc2UgdG8KKwkJCQkJICAgYXNzb2NpYXRpb24gbWVzc2FnZS4gKi8KK307CisKKy8qKgorICogV0xQIElFCisgKgorICogVGhlIFdMUCBJRSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYmVhY29ucyBieSBhbGwgZGV2aWNlcy4KKyAqCisgKiBUaGUgZHJpdmVyIGNhbiBzZXQgb25seSBhIGZldyBvZiB0aGUgZmllbGRzIGluIHRoaXMgaW5mb3JtYXRpb24gZWxlbWVudCwKKyAqIG1vc3QgZmllbGRzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBkZXZpY2Ugc2VsZi4gV2hlbiB0aGUgZHJpdmVyIG5lZWRzIHRvIHNldAorICogYSBmaWVsZCBpdCB3aWxsIG9ubHkgcHJvdmlkZSB2YWx1ZXMgZm9yIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QsIHRoZSByZXN0CisgKiB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9lcy4gVGhlIGZpZWxkcyBvZiBpbnRlcmVzdCBhcmU6CisgKgorICogRWxlbWVudCBJRAorICogTGVuZ3RoCisgKiBDYXBhYmlsaXRpZXMgKG9ubHkgdG8gaW5jbHVkZSBXU1NJRCBIYXNoIGxpc3QgbGVuZ3RoKQorICogV1NTSUQgSGFzaCBMaXN0IGZpZWxkcworICoKKyAqIFdMUCAwLjk5IFs2LjddCisgKgorICogT25seSB0aGUgZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIGFyZSBkZXRhaWxlZCBpbiB0aGlzIHN0cnVjdHVyZSwgcmVzdAorICogYXJlIG5vdCBkZXRhaWxlZCBvciBtYXJrZWQgYXMgIm5vdHVzZWQiLgorICovCitzdHJ1Y3Qgd2xwX2llIHsKKwlzdHJ1Y3QgdXdiX2llX2hkciBoZHI7CisJX19sZTE2IGNhcGFiaWxpdGllczsKKwlfX2xlMTYgY3ljbGVfcGFyYW07CisJX19sZTE2IGFjd19hbmNob3JfYWRkcjsKKwl1OCB3c3NpZF9oYXNoX2xpc3RbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHdscF9pZV9oYXNoX2xlbmd0aChzdHJ1Y3Qgd2xwX2llICppZSkKK3sKKwlyZXR1cm4gKGxlMTZfdG9fY3B1KGllLT5jYXBhYmlsaXRpZXMpID4+IDEyKSAmIDB4ZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdscF9pZV9zZXRfaGFzaF9sZW5ndGgoc3RydWN0IHdscF9pZSAqaWUsIGludCBoYXNoX2xlbmd0aCkKK3sKKwl1MTYgY2FwcyA9IGxlMTZfdG9fY3B1KGllLT5jYXBhYmlsaXRpZXMpOworCWNhcHMgPSAoY2FwcyAmIH4oMHhmIDw8IDEyKSkgfCAoaGFzaF9sZW5ndGggPDwgMTIpOworCWllLT5jYXBhYmlsaXRpZXMgPSBjcHVfdG9fbGUxNihjYXBzKTsKK30KKworLyoqCisgKiBXTFAgbm9uY2UKKyAqIFdMUCBEcmFmdCAwLjk5IFs2LjYuMSBUYWJsZSA2XQorICoKKyAqIEEgMTI4LWJpdCByYW5kb20gbnVtYmVyIG9mdGVuIHVzZWQgKEUtU05vbmNlMSwgRS1TTm9uY2UyLCBFbnJvbGxlZQorICogTm9uY2UsIFJlZ2lzdHJhciBOb25jZSwgUi1TTm9uY2UxLCBSLVNOb25jZTIpLiBJdCBpcyBwYXNzZWQgdG8gSFcgc28KKyAqIGl0IGlzIHBhY2tlZC4KKyAqLworc3RydWN0IHdscF9ub25jZSB7CisJdTggZGF0YVsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFdMUCBVVUlECisgKiBXTFAgRHJhZnQgMC45OSBbNi42LjEgVGFibGUgNl0KKyAqCisgKiBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgZW5jb2RlZCBhcyBhbiBvY3RldCBzdHJpbmcgaW4gdGhlCisgKiBvcmRlciB0aGUgb2N0ZXRzIGFyZSBzaG93biBpbiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gUkZDNDEyMi4gQSBVVUlECisgKiBpcyBvZnRlbiB1c2VkIChVVUlELUUsIFVVSUQtUiwgV1NTSUQpLiBJdCBpcyBwYXNzZWQgdG8gSFcgc28gaXQgaXMgcGFja2VkLgorICovCitzdHJ1Y3Qgd2xwX3V1aWQgeworCXU4IGRhdGFbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKioKKyAqIFByaW1hcnkgYW5kIHNlY29uZGFyeSBkZXZpY2UgdHlwZSBhdHRyaWJ1dGVzCisgKiBXTFAgRHJhZnQgMC45OSBbNi42LjEuOF0KKyAqLworc3RydWN0IHdscF9kZXZfdHlwZSB7CisJZW51bSB3bHBfZGV2X2NhdGVnb3J5X2lkIGNhdGVnb3J5OjE2OworCXU4IE9VSVszXTsKKwl1OCBPVUlzdWJkaXY7CisJX19sZTE2IHN1YklEOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBXTFAgZnJhbWUgaGVhZGVyCisgKiBXTFAgRHJhZnQgMC45OSBbNi4yXQorICovCitzdHJ1Y3Qgd2xwX2ZyYW1lX2hkciB7CisJX19sZTE2IG11eF9oZHI7CQkJLyogV0xQX1BST1RPQ09MX0lEICovCisJZW51bSB3bHBfZnJhbWVfdHlwZSB0eXBlOjg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFdMUCBhdHRyaWJ1dGUgZmllbGQgaGVhZGVyCisgKiBXTFAgRHJhZnQgMC45OSBbNi42LjFdCisgKgorICogSGVhZGVyIG9mIGVhY2ggYXR0cmlidXRlIGZvdW5kIGluIGFuIGFzc29jaWF0aW9uIGZyYW1lCisgKi8KK3N0cnVjdCB3bHBfYXR0cl9oZHIgeworCV9fbGUxNiB0eXBlOworCV9fbGUxNiBsZW5ndGg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIERldmljZSBpbmZvcm1hdGlvbiBjb21tb25seSB1c2VkIHRvZ2V0aGVyCisgKgorICogRWFjaCBvZiB0aGVzZSBkZXZpY2UgaW5mb3JtYXRpb24gZWxlbWVudHMgaGFzIGEgc3BlY2lmaWVkIHJhbmdlIGluIHdoaWNoIGl0CisgKiBzaG91bGQgZml0IChXTFAgMC45OSBbVGFibGUgNl0pLiBUaGlzIHJhbmdlIHByb3ZpZGVkIGluIHRoZSBzcGVjIGRvZXMgbm90CisgKiBpbmNsdWRlIHRoZSB0ZXJtaW5hdGlvbiBudWxsICdcMCcgY2hhcmFjdGVyICh3aGVuIHVzZWQgaW4gdGhlCisgKiBhc3NvY2lhdGlvbiBwcm90b2NvbCB0aGUgYXR0cmlidXRlIGZpZWxkcyBhcmUgYWNjb21wYW5pZWQKKyAqIHdpdGggYSAibGVuZ3RoIiBmaWVsZCBzbyB0aGUgZnVsbCByYW5nZSBmcm9tIHRoZSBzcGVjIGNhbiBiZSB1c2VkIGZvcgorICogdGhlIHZhbHVlKS4gV2UgdGh1cyBhbGxvY2F0ZSBhbiBleHRyYSBieXRlIHRvIGJlIGFibGUgdG8gc3RvcmUgYSBzdHJpbmcKKyAqIG9mIG1heCBsZW5ndGggd2l0aCBhIHRlcm1pbmF0aW5nICdcMCcuCisgKi8KK3N0cnVjdCB3bHBfZGV2aWNlX2luZm8geworCWNoYXIgbmFtZVszM107CisJY2hhciBtb2RlbF9uYW1lWzMzXTsKKwljaGFyIG1hbnVmYWN0dXJlcls2NV07CisJY2hhciBtb2RlbF9uclszM107CisJY2hhciBzZXJpYWxbMzNdOworCXN0cnVjdCB3bHBfZGV2X3R5cGUgcHJpbV9kZXZfdHlwZTsKK307CisKKy8qKgorICogTWFjcm9zIGZvciB0aGUgV0xQIGF0dHJpYnV0ZXMKKyAqCisgKiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgYXR0cmlidXRlcyAodG90YWwgaXMgNDMpLiBUaGUgYXR0cmlidXRlIGxheW91dCBjYW4gYmUKKyAqIGluIG9uZSBvZiB0aHJlZSBjYXRlZ29yaWVzOiBvbmUgdmFsdWUsIGFuIGFycmF5LCBhbiBlbnVtIGZvcmNlZCB0byA4IGJpdHMuCisgKiBUaGVzZSBtYWNyb3MgaGVscCB3aXRoIHRoZWlyIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIHdscF9hdHRyKHR5cGUsIG5hbWUpCQkJCQkJXAorc3RydWN0IHdscF9hdHRyXyMjbmFtZSB7CQkJCQkJXAorCXN0cnVjdCB3bHBfYXR0cl9oZHIgaGRyOwkJCQkJXAorCXR5cGUgbmFtZTsJCQkJCQkJXAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSB3bHBfYXR0cl9hcnJheSh0eXBlLCBuYW1lKQkJCQkJXAorc3RydWN0IHdscF9hdHRyXyMjbmFtZSB7CQkJCQkJXAorCXN0cnVjdCB3bHBfYXR0cl9oZHIgaGRyOwkJCQkJXAorCXR5cGUgbmFtZVtdOwkJCQkJCQlcCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFdMUCBhc3NvY2lhdGlvbiBhdHRyaWJ1dGUgZmllbGRzCisgKiBXTFAgRHJhZnQgMC45OSBbNi42LjEgVGFibGUgNl0KKyAqCisgKiBBdHRyaWJ1dGVzIGFwcGVhciBpbiBzYW1lIG9yZGVyIGFzIHRoZSBUYWJsZSBpbiB0aGUgc3BlYworICogRklYTUUgRG9lcyBub3QgZGVmaW5lIGFsbCBhdHRyaWJ1dGVzIHlldAorICovCisKKy8qIERldmljZSBuYW1lOiBGcmllbmRseSBuYW1lIG9mIHNlbmRpbmcgZGV2aWNlICovCit3bHBfYXR0cl9hcnJheSh1OCwgZGV2X25hbWUpCisKKy8qIEVucm9sbGVlIE5vbmNlOiBSYW5kb20gbnVtYmVyIGdlbmVyYXRlZCBieSBlbnJvbGxlZSBmb3IgYW4gZW5yb2xsbWVudAorICogc2Vzc2lvbiAqLword2xwX2F0dHIoc3RydWN0IHdscF9ub25jZSwgZW5vbmNlKQorCisvKiBNYW51ZmFjdHVyZXIgbmFtZTogTmFtZSBvZiBtYW51ZmFjdHVyZXIgb2YgdGhlIHNlbmRpbmcgZGV2aWNlICovCit3bHBfYXR0cl9hcnJheSh1OCwgbWFudWZhY3R1cmVyKQorCisvKiBXTFAgTWVzc2FnZSBUeXBlICovCit3bHBfYXR0cih1OCwgbXNnX3R5cGUpCisKKy8qIFdMUCBNb2RlbCBuYW1lOiBNb2RlbCBuYW1lIG9mIHNlbmRpbmcgZGV2aWNlICovCit3bHBfYXR0cl9hcnJheSh1OCwgbW9kZWxfbmFtZSkKKworLyogV0xQIE1vZGVsIG51bWJlcjogTW9kZWwgbnVtYmVyIG9mIHNlbmRpbmcgZGV2aWNlICovCit3bHBfYXR0cl9hcnJheSh1OCwgbW9kZWxfbnIpCisKKy8qIFJlZ2lzdHJhciBOb25jZTogUmFuZG9tIG51bWJlciBnZW5lcmF0ZWQgYnkgcmVnaXN0cmFyIGZvciBhbiBlbnJvbGxtZW50CisgKiBzZXNzaW9uICovCit3bHBfYXR0cihzdHJ1Y3Qgd2xwX25vbmNlLCBybm9uY2UpCisKKy8qIFNlcmlhbCBudW1iZXIgb2YgZGV2aWNlICovCit3bHBfYXR0cl9hcnJheSh1OCwgc2VyaWFsKQorCisvKiBVVUlEIG9mIGVucm9sbGVlICovCit3bHBfYXR0cihzdHJ1Y3Qgd2xwX3V1aWQsIHV1aWRfZSkKKworLyogVVVJRCBvZiByZWdpc3RyYXIgKi8KK3dscF9hdHRyKHN0cnVjdCB3bHBfdXVpZCwgdXVpZF9yKQorCisvKiBXTFAgUHJpbWFyeSBkZXZpY2UgdHlwZSAqLword2xwX2F0dHIoc3RydWN0IHdscF9kZXZfdHlwZSwgcHJpbV9kZXZfdHlwZSkKKworLyogV0xQIFNlY29uZGFyeSBkZXZpY2UgdHlwZSAqLword2xwX2F0dHIoc3RydWN0IHdscF9kZXZfdHlwZSwgc2VjX2Rldl90eXBlKQorCisvKiBXTFAgcHJvdG9jb2wgdmVyc2lvbiAqLword2xwX2F0dHIodTgsIHZlcnNpb24pCisKKy8qIFdMUCBzZXJ2aWNlIHNldCBpZGVudGlmaWVyICovCit3bHBfYXR0cihzdHJ1Y3Qgd2xwX3V1aWQsIHdzc2lkKQorCisvKiBXTFAgV1NTIG5hbWUgKi8KK3dscF9hdHRyX2FycmF5KHU4LCB3c3NfbmFtZSkKKworLyogV0xQIFdTUyBTZWN1cmUgU3RhdHVzICovCit3bHBfYXR0cih1OCwgd3NzX3NlY19zdGF0dXMpCisKKy8qIFdTUyBCcm9hZGNhc3QgQWRkcmVzcyAqLword2xwX2F0dHIoc3RydWN0IHV3Yl9tYWNfYWRkciwgd3NzX2JjYXN0KQorCisvKiBXTFAgQWNjZXB0aW5nIEVucm9sbG1lbnQgKi8KK3dscF9hdHRyKHU4LCBhY2NlcHRfZW5ybCkKKworLyoqCisgKiBXU1MgaW5mb3JtYXRpb24gYXR0cmlidXRlcworICogV0xQIERyYWZ0IDAuOTkgWzYuNi4zIFRhYmxlIDE1XQorICovCitzdHJ1Y3Qgd2xwX3dzc19pbmZvIHsKKwlzdHJ1Y3Qgd2xwX2F0dHJfd3NzaWQgd3NzaWQ7CisJc3RydWN0IHdscF9hdHRyX3dzc19uYW1lIG5hbWU7CisJc3RydWN0IHdscF9hdHRyX2FjY2VwdF9lbnJsIGFjY2VwdDsKKwlzdHJ1Y3Qgd2xwX2F0dHJfd3NzX3NlY19zdGF0dXMgc2VjX3N0YXQ7CisJc3RydWN0IHdscF9hdHRyX3dzc19iY2FzdCBiY2FzdDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFdMUCBXU1MgSW5mb3JtYXRpb24gKi8KK3dscF9hdHRyX2FycmF5KHN0cnVjdCB3bHBfd3NzX2luZm8sIHdzc19pbmZvKQorCisvKiBXTFAgV1NTIFNlbGVjdGlvbiBtZXRob2QgKi8KK3dscF9hdHRyKHU4LCB3c3Nfc2VsX210aGQpCisKKy8qIFdMUCBXU1MgdGFnICovCit3bHBfYXR0cih1OCwgd3NzX3RhZykKKworLyogV1NTIFZpcnR1YWwgQWRkcmVzcyAqLword2xwX2F0dHIoc3RydWN0IHV3Yl9tYWNfYWRkciwgd3NzX3ZpcnQpCisKKy8qIFdMUCBhc3NvY2lhdGlvbiBlcnJvciAqLword2xwX2F0dHIodTgsIHdscF9hc3NjX2VycikKKworLyoqCisgKiBXTFAgc3RhbmRhcmQgYW5kIGFiYnJldmlhdGVkIGZyYW1lcworICoKKyAqIFdMUCBEcmFmdCAwLjk5IFs2LjNdIGFuZCBbNi40XQorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFdMUCBzdGFuZGFyZCBmcmFtZSBhbmQgdGhlIFdMUAorICogYWJicmV2aWF0ZWQgZnJhbWUgaXMgdGhhdCB0aGUgc3RhbmRhcmQgZnJhbWUgaW5jbHVkZXMgdGhlIHNyYworICogYW5kIGRlc3QgYWRkcmVzc2VzIGZyb20gdGhlIEV0aGVybmV0IGhlYWRlciwgdGhlIGFiYnJldmlhdGVkIGZyYW1lIGRvZXMKKyAqIG5vdC4KKyAqIFRoZSBzcmMvZGVzdCAoYXMgd2VsbCBhcyB0aGUgdHlwZS9sZW5ndGggYW5kIGNsaWVudCBkYXRhKSBhcmUgYWxyZWFkeQorICogZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBFdGhlcm5ldCBoZWFkZXIsIHdlIGRvIG5vdCBkbyB0aGlzIGhlcmUuCisgKiBGcm9tIHRoaXMgcGVyc3BlY3RpdmUgdGhlIHN0YW5kYXJkIGFuZCBhYmJyZXZpYXRlZCBmcmFtZXMgYXBwZWFyIHRoZQorICogc2FtZSAtIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGRpZmZlcmVudGx5IHRob3VnaC4KKyAqCisgKiBUaGUgc2l6ZSBvZiB0aGlzIGhlYWRlciBpcyBhbHNvIGNhcHR1cmVkIGluIFdMUF9EQVRBX0hMRU4gdG8gZW5hYmxlCisgKiBpbnRlcmZhY2VzIHRvIHByZXBhcmUgdGhlaXIgaGVhZHJvb20uCisgKi8KK3N0cnVjdCB3bHBfZnJhbWVfc3RkX2FiYnJ2X2hkciB7CisJc3RydWN0IHdscF9mcmFtZV9oZHIgaGRyOworCXU4IHRhZzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogV0xQIGFzc29jaWF0aW9uIGZyYW1lcworICoKKyAqIFdMUCBEcmFmdCAwLjk5IFs2LjZdCisgKi8KK3N0cnVjdCB3bHBfZnJhbWVfYXNzb2MgeworCXN0cnVjdCB3bHBfZnJhbWVfaGRyIGhkcjsKKwllbnVtIHdscF9hc3NvY190eXBlIHR5cGU6ODsKKwlzdHJ1Y3Qgd2xwX2F0dHJfdmVyc2lvbiB2ZXJzaW9uOworCXN0cnVjdCB3bHBfYXR0cl9tc2dfdHlwZSBtc2dfdHlwZTsKKwl1OCBhdHRyW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBFdGhlcm5ldCB0byBkZXYgYWRkcmVzcyBtYXBwaW5nICovCitzdHJ1Y3Qgd2xwX2VkYSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgY2FjaGU7CS8qIEV0aDwtPkRldiBBZGRyIGNhY2hlICovCit9OworCisvKioKKyAqIFdTUyBpbmZvcm1hdGlvbiB0ZW1wb3Jhcnkgc3RvcmFnZQorICoKKyAqIFRoaXMgaW5mb3JtYXRpb24gaXMgb25seSBzdG9yZWQgdGVtcG9yYXJpbHkgZHVyaW5nIGRpc2NvdmVyeS4gSXQgc2hvdWxkCisgKiBub3QgYmUgc3RvcmVkIHVubGVzcyB0aGUgZGV2aWNlIGlzIGVucm9sbGVkIGluIHRoZSBhZHZlcnRpc2VkIFdTUy4gVGhpcworICogaXMgZG9uZSBtYWlubHkgYmVjYXVzZSB3ZSBmb2xsb3cgdGhlIGxldHRlciBvZiB0aGUgc3BlYyBpbiB0aGlzIHJlZ2FyZC4KKyAqIFNlZSBXTFAgMC45OSBbNy4yLjNdLgorICogV2hlbiB0aGUgZGV2aWNlIGRvZXMgYmVjb21lIGVucm9sbGVkIGluIGEgV1NTIHRoZSBXU1MgaW5mb3JtYXRpb24gd2lsbAorICogYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIG1vcmUgY29tcHJlaGVuc2l2ZSBzdHJ1Y3Qgd2xwX3dzcy4KKyAqLworc3RydWN0IHdscF93c3NfdG1wX2luZm8geworCWNoYXIgbmFtZVtXTFBfV1NTX05BTUVfU0laRV07CisJdTggYWNjZXB0X2Vucm9sbDsKKwl1OCBzZWNfc3RhdHVzOworCXN0cnVjdCB1d2JfbWFjX2FkZHIgYmNhc3Q7Cit9OworCitzdHJ1Y3Qgd2xwX3dzc2lkX2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3Qgd2xwX3V1aWQgd3NzaWQ7CisJc3RydWN0IHdscF93c3NfdG1wX2luZm8gKmluZm87Cit9OworCisvKioKKyAqIEEgY2FjaGUgZW50cnkgb2YgV0xQIG5laWdoYm9yaG9vZAorICoKKyAqIEBub2RlOiBoZWFkIG9mIGxpc3QgaXMgd2xwLT5uZWlnaGJvcnMKKyAqIEB3c3NpZDogbGlzdCBvZiB3c3NpZHMgb2YgdGhpcyBuZWlnaGJvciwgZWxlbWVudCBpcyB3bHBfd3NzaWRfZQorICogQGluZm86ICB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgaW5mb3JtYXRpb24gbGVhcm5lZCBkdXJpbmcgZGlzY292ZXJ5LiBUaGlzCisgKiAgICAgICAgIHN0b3JhZ2UgaXMgdXNlZCB0b2dldGhlciB3aXRoIHRoZSB3c3NpZF9lIHRlbXBvcmFyeSBzdG9yYWdlCisgKiAgICAgICAgIGR1cmluZyBkaXNjb3ZlcnkuCisgKi8KK3N0cnVjdCB3bHBfbmVpZ2hib3JfZSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCB3bHBfdXVpZCB1dWlkOworCXN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgd3NzaWQ7IC8qIEVsZW1lbnRzIGFyZSB3bHBfd3NzaWRfZSAqLworCXN0cnVjdCB3bHBfZGV2aWNlX2luZm8gKmluZm87Cit9OworCitzdHJ1Y3Qgd2xwOworLyoqCisgKiBJbmZvcm1hdGlvbiBmb3IgYW4gYXNzb2NpYXRpb24gc2Vzc2lvbiBpbiBwcm9ncmVzcy4KKyAqCisgKiBAZXhwX21lc3NhZ2U6IFRoZSB0eXBlIG9mIHRoZSBleHBlY3RlZCBtZXNzYWdlLiBCb3RoIHRoaXMgbWVzc2FnZSBhbmQgYQorICogICAgICAgICAgICAgICBGMCBtZXNzYWdlICh3aGljaCBjYW4gYmUgc2VudCBpbiByZXNwb25zZSB0byBhbnkKKyAqICAgICAgICAgICAgICAgYXNzb2NpYXRpb24gZnJhbWUpIHdpbGwgYmUgYWNjZXB0ZWQgYXMgYSB2YWxpZCBtZXNzYWdlIGZvcgorICogICAgICAgICAgICAgICB0aGlzIHNlc3Npb24uCisgKiBAY2I6ICAgICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHVwb24gcmVjZWlwdCBvZiB0aGlzCisgKiAgICAgICAgICAgICAgIG1lc3NhZ2UuCisgKiBAY2JfcHJpdjogICAgIFByaXZhdGUgZGF0YSBvZiBjYWxsYmFjaworICogQGRhdGE6ICAgICAgICBEYXRhIHVzZWQgaW4gYXNzb2NpYXRpb24gcHJvY2VzcyAoYWx3YXlzIGEgc2tfYnVmZj8pCisgKiBAbmVpZ2hib3I6ICAgIEFkZHJlc3Mgb2YgbmVpZ2hib3Igd2l0aCB3aGljaCBhc3NvY2lhdGlvbiBzZXNzaW9uIGlzIGluCisgKiAgICAgICAgICAgICAgIHByb2dyZXNzLgorICovCitzdHJ1Y3Qgd2xwX3Nlc3Npb24geworCWVudW0gd2xwX2Fzc29jX3R5cGUgZXhwX21lc3NhZ2U7CisJdm9pZCAoKmNiKShzdHJ1Y3Qgd2xwICopOworCXZvaWQgKmNiX3ByaXY7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgdXdiX2Rldl9hZGRyIG5laWdoYm9yX2FkZHI7Cit9OworCisvKioKKyAqIFdMUCBTZXJ2aWNlIFNldAorICoKKyAqIEBtdXRleDogdXNlZCB0byBwcm90ZWN0IGVudGlyZSBXU1Mgc3RydWN0dXJlLgorICoKKyAqIEBuYW1lOiBUaGUgV1NTIG5hbWUgaXMgc2V0IHRvIDY1IGJ5dGVzLCAxIGJ5dGUgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0KKyAqICAgICAgICBhbGxvd2VkIGJ5IHRoZSBXTFAgc3BlYy4gVGhpcyBpcyB0byBoYXZlIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZworICogICAgICAgIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLiBBIG1heGltdW0gb2YgNjQgYnl0ZXMgd2lsbCBzdGlsbCBiZSB1c2VkCisgKiAgICAgICAgd2hlbiBwbGFjaW5nIHRoZSBXU1MgbmFtZSBmaWVsZCBpbiBhc3NvY2lhdGlvbiBmcmFtZXMuCisgKgorICogQGFjY2VwdF9lbnJvbGw6IEFjY2VwdGluZyBlbnJvbGxtZW50OiBTZXQgdG8gb25lIGlmIHJlZ2lzdHJhciBpcworICogICAgICAgICAgICAgICAgIGFjY2VwdGluZyBlbnJvbGxtZW50IGluIFdTUywgb3IgemVybyBvdGhlcndpc2UuCisgKgorICogR2xvYmFsIGFuZCBsb2NhbCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBXU1MgaW4gd2hpY2ggd2UgYXJlIGVucm9sbGVkLgorICogV0xQIDAuOTkgU2VjdGlvbiA3LjIuMSBhbmQgU2VjdGlvbiA3LjIuMgorICovCitzdHJ1Y3Qgd2xwX3dzcyB7CisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisJLyogR2xvYmFsIHByb3BlcnRpZXMuICovCisJc3RydWN0IHdscF91dWlkIHdzc2lkOworCXU4IGhhc2g7CisJY2hhciBuYW1lW1dMUF9XU1NfTkFNRV9TSVpFXTsKKwlzdHJ1Y3QgdXdiX21hY19hZGRyIGJjYXN0OworCXU4IHNlY3VyZV9zdGF0dXM6MTsKKwl1OCBtYXN0ZXJfa2V5WzE2XTsKKwkvKiBMb2NhbCBwcm9wZXJ0aWVzLiAqLworCXU4IHRhZzsKKwlzdHJ1Y3QgdXdiX21hY19hZGRyIHZpcnR1YWxfYWRkcjsKKwkvKiBFeHRyYSAqLworCXU4IGFjY2VwdF9lbnJvbGw6MTsKKwllbnVtIHdscF93c3Nfc3RhdGUgc3RhdGU7Cit9OworCisvKioKKyAqIFdMUCBtYWluIHN0cnVjdHVyZQorICogQG11dGV4OiBwcm90ZWN0IGNoYW5nZXMgdG8gV0xQIHN0cnVjdHVyZS4gV2Ugb25seSBhbGxvdyBjaGFuZ2VzIHRvIHRoZQorICogICAgICAgICB1dWlkLCBzbyBjdXJyZW50bHkgdGhpcyBtdXRleCBvbmx5IHByb3RlY3RzIHRoaXMgZmllbGQuCisgKi8KK3N0cnVjdCB3bHAgeworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgdXdiX3JjICpyYzsJCS8qIFVXQiByYWRpbyBjb250cm9sbGVyICovCisJc3RydWN0IHV3Yl9wYWwgcGFsOworCXN0cnVjdCB3bHBfZWRhIGVkYTsKKwlzdHJ1Y3Qgd2xwX3V1aWQgdXVpZDsKKwlzdHJ1Y3Qgd2xwX3Nlc3Npb24gKnNlc3Npb247CisJc3RydWN0IHdscF93c3Mgd3NzOworCXN0cnVjdCBtdXRleCBuYm11dGV4OyAvKiBOZWlnaGJvciBtdXRleCBwcm90ZWN0cyBuZWlnaGJvcnMgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbmVpZ2hib3JzOyAvKiBFbGVtZW50cyBhcmUgd2xwX25laWdoYm9yX2UgKi8KKwlzdHJ1Y3QgdXdiX25vdGlmc19oYW5kbGVyIHV3Yl9ub3RpZnNfaGFuZGxlcjsKKwlzdHJ1Y3Qgd2xwX2RldmljZV9pbmZvICpkZXZfaW5mbzsKKwl2b2lkICgqZmlsbF9kZXZpY2VfaW5mbykoc3RydWN0IHdscCAqd2xwLCBzdHJ1Y3Qgd2xwX2RldmljZV9pbmZvICppbmZvKTsKKwlpbnQgKCp4bWl0X2ZyYW1lKShzdHJ1Y3Qgd2xwICosIHN0cnVjdCBza19idWZmICosCisJCQkgIHN0cnVjdCB1d2JfZGV2X2FkZHIgKik7CisJdm9pZCAoKnN0b3BfcXVldWUpKHN0cnVjdCB3bHAgKik7CisJdm9pZCAoKnN0YXJ0X3F1ZXVlKShzdHJ1Y3Qgd2xwICopOworfTsKKworLyogc3lzZnMgKi8KKworCitzdHJ1Y3Qgd2xwX3dzc19hdHRyaWJ1dGUgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IHdscF93c3MgKndzcywgY2hhciAqYnVmKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCB3bHBfd3NzICp3c3MsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgV1NTX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSBcCitzdGF0aWMgc3RydWN0IHdscF93c3NfYXR0cmlidXRlIHdzc19hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsIF9tb2RlLAlcCisJCQkJCQkJICBfc2hvdywgX3N0b3JlKQorCitleHRlcm4gaW50IHdscF9zZXR1cChzdHJ1Y3Qgd2xwICosIHN0cnVjdCB1d2JfcmMgKik7CitleHRlcm4gdm9pZCB3bHBfcmVtb3ZlKHN0cnVjdCB3bHAgKik7CitleHRlcm4gc3NpemVfdCB3bHBfbmVpZ2hib3Job29kX3Nob3coc3RydWN0IHdscCAqLCBjaGFyICopOworZXh0ZXJuIGludCB3bHBfd3NzX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCB3bHBfd3NzICopOworZXh0ZXJuIHZvaWQgd2xwX3dzc19yZW1vdmUoc3RydWN0IHdscF93c3MgKik7CitleHRlcm4gc3NpemVfdCB3bHBfd3NzX2FjdGl2YXRlX3Nob3coc3RydWN0IHdscF93c3MgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHdscF93c3NfYWN0aXZhdGVfc3RvcmUoc3RydWN0IHdscF93c3MgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd2xwX2VkYV9zaG93KHN0cnVjdCB3bHAgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHdscF9lZGFfc3RvcmUoc3RydWN0IHdscCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gc3NpemVfdCB3bHBfdXVpZF9zaG93KHN0cnVjdCB3bHAgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHdscF91dWlkX3N0b3JlKHN0cnVjdCB3bHAgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd2xwX2Rldl9uYW1lX3Nob3coc3RydWN0IHdscCAqLCBjaGFyICopOworZXh0ZXJuIHNzaXplX3Qgd2xwX2Rldl9uYW1lX3N0b3JlKHN0cnVjdCB3bHAgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd2xwX2Rldl9tYW51ZmFjdHVyZXJfc2hvdyhzdHJ1Y3Qgd2xwICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB3bHBfZGV2X21hbnVmYWN0dXJlcl9zdG9yZShzdHJ1Y3Qgd2xwICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IHdscF9kZXZfbW9kZWxfbmFtZV9zaG93KHN0cnVjdCB3bHAgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHdscF9kZXZfbW9kZWxfbmFtZV9zdG9yZShzdHJ1Y3Qgd2xwICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IHdscF9kZXZfbW9kZWxfbnJfc2hvdyhzdHJ1Y3Qgd2xwICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB3bHBfZGV2X21vZGVsX25yX3N0b3JlKHN0cnVjdCB3bHAgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd2xwX2Rldl9zZXJpYWxfc2hvdyhzdHJ1Y3Qgd2xwICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB3bHBfZGV2X3NlcmlhbF9zdG9yZShzdHJ1Y3Qgd2xwICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IHdscF9kZXZfcHJpbV9jYXRlZ29yeV9zaG93KHN0cnVjdCB3bHAgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHdscF9kZXZfcHJpbV9jYXRlZ29yeV9zdG9yZShzdHJ1Y3Qgd2xwICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJICAgc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IHdscF9kZXZfcHJpbV9PVUlfc2hvdyhzdHJ1Y3Qgd2xwICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB3bHBfZGV2X3ByaW1fT1VJX3N0b3JlKHN0cnVjdCB3bHAgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd2xwX2Rldl9wcmltX09VSV9zdWJfc2hvdyhzdHJ1Y3Qgd2xwICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB3bHBfZGV2X3ByaW1fT1VJX3N1Yl9zdG9yZShzdHJ1Y3Qgd2xwICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJICBzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd2xwX2Rldl9wcmltX3N1YmNhdF9zaG93KHN0cnVjdCB3bHAgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHdscF9kZXZfcHJpbV9zdWJjYXRfc3RvcmUoc3RydWN0IHdscCAqLCBjb25zdCBjaGFyICosCisJCQkJCSBzaXplX3QpOworZXh0ZXJuIGludCB3bHBfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCB3bHAgKiwgc3RydWN0IHNrX2J1ZmYgKiwKKwkJCSAgICAgc3RydWN0IHV3Yl9kZXZfYWRkciAqKTsKK2V4dGVybiBpbnQgd2xwX3ByZXBhcmVfdHhfZnJhbWUoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgd2xwICosCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHV3Yl9kZXZfYWRkciAqKTsKK3ZvaWQgd2xwX3Jlc2V0X2FsbChzdHJ1Y3Qgd2xwICp3bHApOworCisvKioKKyAqIEluaXRpYWxpemUgV1NTCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgd2xwX3dzc19pbml0KHN0cnVjdCB3bHBfd3NzICp3c3MpCit7CisJbXV0ZXhfaW5pdCgmd3NzLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgd2xwX2luaXQoc3RydWN0IHdscCAqd2xwKQoreworCUlOSVRfTElTVF9IRUFEKCZ3bHAtPm5laWdoYm9ycyk7CisJbXV0ZXhfaW5pdCgmd2xwLT5tdXRleCk7CisJbXV0ZXhfaW5pdCgmd2xwLT5uYm11dGV4KTsKKwl3bHBfd3NzX2luaXQoJndscC0+d3NzKTsKK30KKworCisjZW5kaWYgLyogI2lmbmRlZiBfX0xJTlVYX19XTFBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDVjMTU4YzQuLjg5YTVhMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMTQ5LDExICsxNDksMTEgQEAKIAogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICoKIF9fY3JlYXRlX3dvcmtxdWV1ZV9rZXkoY29uc3QgY2hhciAqbmFtZSwgaW50IHNpbmdsZXRocmVhZCwKLQkJICAgICAgIGludCBmcmVlemVhYmxlLCBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKKwkJICAgICAgIGludCBmcmVlemVhYmxlLCBpbnQgcnQsIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5LAogCQkgICAgICAgY29uc3QgY2hhciAqbG9ja19uYW1lKTsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCi0jZGVmaW5lIF9fY3JlYXRlX3dvcmtxdWV1ZShuYW1lLCBzaW5nbGV0aHJlYWQsIGZyZWV6ZWFibGUpCVwKKyNkZWZpbmUgX19jcmVhdGVfd29ya3F1ZXVlKG5hbWUsIHNpbmdsZXRocmVhZCwgZnJlZXplYWJsZSwgcnQpCVwKICh7CQkJCQkJCQlcCiAJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQlcCiAJY29uc3QgY2hhciAqX19sb2NrX25hbWU7CQkJCVwKQEAgLTE2NCwxNyArMTY0LDE5IEBACiAJCV9fbG9ja19uYW1lID0gI25hbWU7CQkJCVwKIAkJCQkJCQkJXAogCV9fY3JlYXRlX3dvcmtxdWV1ZV9rZXkoKG5hbWUpLCAoc2luZ2xldGhyZWFkKSwJCVwKLQkJCSAgICAgICAoZnJlZXplYWJsZSksICZfX2tleSwJCVwKKwkJCSAgICAgICAoZnJlZXplYWJsZSksIChydCksICZfX2tleSwJXAogCQkJICAgICAgIF9fbG9ja19uYW1lKTsJCQlcCiB9KQogI2Vsc2UKLSNkZWZpbmUgX19jcmVhdGVfd29ya3F1ZXVlKG5hbWUsIHNpbmdsZXRocmVhZCwgZnJlZXplYWJsZSkJXAotCV9fY3JlYXRlX3dvcmtxdWV1ZV9rZXkoKG5hbWUpLCAoc2luZ2xldGhyZWFkKSwgKGZyZWV6ZWFibGUpLCBOVUxMLCBOVUxMKQorI2RlZmluZSBfX2NyZWF0ZV93b3JrcXVldWUobmFtZSwgc2luZ2xldGhyZWFkLCBmcmVlemVhYmxlLCBydCkJXAorCV9fY3JlYXRlX3dvcmtxdWV1ZV9rZXkoKG5hbWUpLCAoc2luZ2xldGhyZWFkKSwgKGZyZWV6ZWFibGUpLCAocnQpLCBcCisJCQkgICAgICAgTlVMTCwgTlVMTCkKICNlbmRpZgogCi0jZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMCwgMCkKLSNkZWZpbmUgY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDEpCi0jZGVmaW5lIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDApCisjZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMCwgMCwgMCkKKyNkZWZpbmUgY3JlYXRlX3J0X3dvcmtxdWV1ZShuYW1lKSBfX2NyZWF0ZV93b3JrcXVldWUoKG5hbWUpLCAwLCAwLCAxKQorI2RlZmluZSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMSwgMSwgMCkKKyNkZWZpbmUgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMSwgMCwgMCkKIAogZXh0ZXJuIHZvaWQgZGVzdHJveV93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggMTJiMTVjNS4uZTU4NTY1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC02Myw3ICs2MywxNSBAQAogCXVuc2lnbmVkIGZvcl93cml0ZXBhZ2VzOjE7CS8qIFRoaXMgaXMgYSB3cml0ZXBhZ2VzKCkgY2FsbCAqLwogCXVuc2lnbmVkIHJhbmdlX2N5Y2xpYzoxOwkvKiByYW5nZV9zdGFydCBpcyBjeWNsaWMgKi8KIAl1bnNpZ25lZCBtb3JlX2lvOjE7CQkvKiBtb3JlIGlvIHRvIGJlIGRpc3BhdGNoZWQgKi8KLQl1bnNpZ25lZCByYW5nZV9jb250OjE7CisJLyoKKwkgKiB3cml0ZV9jYWNoZV9wYWdlcygpIHdvbid0IHVwZGF0ZSB3YmMtPm5yX3RvX3dyaXRlIGFuZAorCSAqIG1hcHBpbmctPndyaXRlYmFja19pbmRleCBpZiBub19ucndyaXRlX2luZGV4X3VwZGF0ZQorCSAqIGlzIHNldC4gIHdyaXRlX2NhY2hlX3BhZ2VzKCkgbWF5IHdyaXRlIG1vcmUgdGhhbiB3ZQorCSAqIHJlcXVlc3RlZCBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgbnJfdG9fd3JpdGUgYW5kCisJICogd3JpdGViYWNrX2luZGV4IGFyZSB1cGRhdGVkIGluIGEgY29uc2lzdGVudCBtYW5uZXIKKwkgKiBzbyB3ZSB1c2UgYSBzaW5nbGUgY29udHJvbCB0byB1cGRhdGUgdGhlbQorCSAqLworCXVuc2lnbmVkIG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOjE7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaCBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtY29tbW9uLmgKaW5kZXggY2MxZWMzOS4uZjQ1NjUzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaAorKysgYi9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oCkBAIC0xMzksMTggKzEzOSwyNyBAQAogCWlmIChYIyNfZSA8PSBfRlBfV0ZSQUNCSVRTXyMjZnMpCQkJXAogCSAgewkJCQkJCQlcCiAJICAgIF9GUF9GUkFDX1NSU18jI3djKFgsIFgjI19lLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0JICAgIF9GUF9ST1VORCh3YywgWCk7CQkJCQlcCiAJICAgIGlmIChfRlBfRlJBQ19ISUdIXyMjZnMoWCkJCQkJXAogCQkmIChfRlBfT1ZFUkZMT1dfIyNmcyA+PiAxKSkJCQlcCiAJICAgICAgewkJCQkJCQlcCiAJICAgICAgICBYIyNfZSA9IDE7CQkJCQlcCiAJICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CVwKLQkgICAgICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5FWEFDVCk7CQlcCiAJICAgICAgfQkJCQkJCQlcCiAJICAgIGVsc2UJCQkJCQlcCiAJICAgICAgewkJCQkJCQlcCi0JCVgjI19lID0gMDsJCQkJCVwKLQkJX0ZQX0ZSQUNfU1JMXyMjd2MoWCwgX0ZQX1dPUktCSVRTKTsJCVwKKwkJX0ZQX1JPVU5EKHdjLCBYKTsJCQkJXAorCQlpZiAoX0ZQX0ZSQUNfSElHSF8jI2ZzKFgpCQkJXAorCQkgICAmIChfRlBfT1ZFUkZMT1dfIyNmcyA+PiAxKSkJCQlcCisJCSAgewkJCQkJCVwKKwkJICAgIFgjI19lID0gMTsJCQkJCVwKKwkJICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJXAorCQkgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTkVYQUNUKTsJCVwKKwkJICB9CQkJCQkJXAorCQllbHNlCQkJCQkJXAorCQkgIHsJCQkJCQlcCisJCSAgICBYIyNfZSA9IDA7CQkJCQlcCisJCSAgICBfRlBfRlJBQ19TUkxfIyN3YyhYLCBfRlBfV09SS0JJVFMpOwkJXAorCQkgIH0JCQkJCQlcCiAJICAgICAgfQkJCQkJCQlcCiAJICAgIGlmICgoRlBfQ1VSX0VYQ0VQVElPTlMgJiBGUF9FWF9JTkVYQUNUKSB8fAkJXAogCQkoRlBfVFJBUFBJTkdfRVhDRVBUSU9OUyAmIEZQX0VYX1VOREVSRkxPVykpCVwKQEAgLTQ5NCw2ICs1MDMsOCBAQAogICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKICAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCVwKICAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQgfCBGUF9FWF9JTlZBTElEX0lESSk7XAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCiAgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19aRVJPKToJXAogICAgIFIjI19zID0gX0ZQX05BTlNJR05fIyNmczsJCQkJXAogICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKaW5kZXggODUxZjE4Mi4uMWQwOTJiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKQEAgLTEsMyArMSwxMyBAQAorLyoKKyAqIEdlbmVyaWMgUGxhdGZvcm0gQ2FtZXJhIERyaXZlciBIZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKICNpZm5kZWYgX19TT0NfQ0FNRVJBX0hfXwogI2RlZmluZSBfX1NPQ19DQU1FUkFfSF9fCiAKQEAgLTksNiArMTksNyBAQAogCXVuc2lnbmVkIGxvbmcgZm9ybWF0X2RlcHRoOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm9ybWF0OwogCXVuc2lnbmVkIGxvbmcgYnVzX3BhcmFtOworCXZvaWQgKCpwb3dlcikoaW50KTsKIAlpbnQgKCpzZXRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywgaW50IGVuYWJsZSk7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggNjdjMWY1MS4uN2Q0ZTJkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtMTIzLDYgKzEyMyw3IEBACiAjZGVmaW5lIFRVTkVSX1RFQTU3NjEJCQk3NQkvKiBPbmx5IEZNIFJhZGlvIFR1bmVyICovCiAjZGVmaW5lIFRVTkVSX1hDNTAwMAkJCTc2CS8qIFhjZWl2ZSBTaWxpY29uIFR1bmVyICovCiAjZGVmaW5lIFRVTkVSX1RDTF9NRjAyR0lQXzVOCQk3NwkvKiBUQ0wgTUYwMkdJUF81TiAqLworI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszCTc4CiAKIC8qIHR2IGNhcmQgc3BlY2lmaWMgKi8KICNkZWZpbmUgVERBOTg4N19QUkVTRU5UIAkJKDE8PDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oCmluZGV4IDk3NWZmYmYuLmU2NWRkOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oCkBAIC0yMSw2ICsyMSwxNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorLyogTk9URTogdGhlIGZ1bGwgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciBpcyBpbiB0aGUgdjRsLWR2YiByZXBvc2l0b3J5CisgKiBhbmQgYWxsb3dzIHY0bCBpMmMgZHJpdmVycyB0byBiZSBjb21waWxlZCBvbiBvbGRlciBrZXJuZWxzIGFzIHdlbGwuCisgKiBUaGUgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciBhcyBpdCBhcHBlYXJzIGluIHRoZSBrZXJuZWwgaXMgYSBzdHJpcHBlZAorICogdmVyc2lvbiAod2l0aG91dCBhbGwgdGhlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHN0dWZmKSBhbmQgc28gaXQKKyAqIGxvb2tzIGEgYml0IG9kZC4KKyAqCisgKiBJZiB5b3UgbG9vayBhdCB0aGUgZnVsbCB2ZXJzaW9uIHRoZW4geW91IHdpbGwgdW5kZXJzdGFuZCB0aGUgcmVhc29uCisgKiBmb3IgaW50cm9kdWNpbmcgdGhpcyBoZWFkZXIgc2luY2UgeW91IHJlYWxseSBkb24ndCB3YW50IHRvIGhhdmUgYWxsCisgKiB0aGUgdHJpY2t5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGNvZGUgaW4gZWFjaCBhbmQgZXZlcnkgaTJjIGRyaXZlci4KKyAqLworCiBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgewogCWNvbnN0IGNoYXIgKiBjb25zdCBuYW1lOwogCWludCBkcml2ZXJpZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi5oCmluZGV4IDQwZWNlZjIuLmVmZGM4YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYuaApAQCAtMjEsNiArMjEsMTcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKy8qIE5PVEU6IHRoZSBmdWxsIHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgaXMgaW4gdGhlIHY0bC1kdmIgcmVwb3NpdG9yeQorICogYW5kIGFsbG93cyB2NGwgaTJjIGRyaXZlcnMgdG8gYmUgY29tcGlsZWQgb24gb2xkZXIga2VybmVscyBhcyB3ZWxsLgorICogVGhlIHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgYXMgaXQgYXBwZWFycyBpbiB0aGUga2VybmVsIGlzIGEgc3RyaXBwZWQKKyAqIHZlcnNpb24gKHdpdGhvdXQgYWxsIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzdHVmZikgYW5kIHNvIGl0CisgKiBsb29rcyBhIGJpdCBvZGQuCisgKgorICogSWYgeW91IGxvb2sgYXQgdGhlIGZ1bGwgdmVyc2lvbiB0aGVuIHlvdSB3aWxsIHVuZGVyc3RhbmQgdGhlIHJlYXNvbgorICogZm9yIGludHJvZHVjaW5nIHRoaXMgaGVhZGVyIHNpbmNlIHlvdSByZWFsbHkgZG9uJ3Qgd2FudCB0byBoYXZlIGFsbAorICogdGhlIHRyaWNreSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjb2RlIGluIGVhY2ggYW5kIGV2ZXJ5IGkyYyBkcml2ZXIuCisgKi8KKwogI2lmbmRlZiBfX1Y0TDJfSTJDX0RSVl9IX18KICNkZWZpbmUgX19WNEwyX0kyQ19EUlZfSF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pbnQtZGV2aWNlLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItaW50LWRldmljZS5oCmluZGV4IGM4YjgwZTAuLjljMmRmNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pbnQtZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWludC1kZXZpY2UuaApAQCAtODQsNiArODQsOCBAQAogCXZvaWQgKnByaXY7CiB9OwogCit2b2lkIHY0bDJfaW50X2RldmljZV90cnlfYXR0YWNoX2FsbCh2b2lkKTsKKwogaW50IHY0bDJfaW50X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpkKTsKIHZvaWQgdjRsMl9pbnRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHY0bDJfaW50X2RldmljZSAqZCk7CiAKQEAgLTk2LDYgKzk4LDEyIEBACiAgKgogICovCiAKK2VudW0gdjRsMl9wb3dlciB7CisJVjRMMl9QT1dFUl9PRkYgPSAwLAorCVY0TDJfUE9XRVJfT04sCisJVjRMMl9QT1dFUl9TVEFOREJZLAorfTsKKwogLyogU2xhdmUgaW50ZXJmYWNlIHR5cGUuICovCiBlbnVtIHY0bDJfaWZfdHlwZSB7CiAJLyoKQEAgLTE3MCw2ICsxNzgsOSBAQAogCXZpZGlvY19pbnRfcXVlcnljdHJsX251bSwKIAl2aWRpb2NfaW50X2dfY3RybF9udW0sCiAJdmlkaW9jX2ludF9zX2N0cmxfbnVtLAorCXZpZGlvY19pbnRfY3JvcGNhcF9udW0sCisJdmlkaW9jX2ludF9nX2Nyb3BfbnVtLAorCXZpZGlvY19pbnRfc19jcm9wX251bSwKIAl2aWRpb2NfaW50X2dfcGFybV9udW0sCiAJdmlkaW9jX2ludF9zX3Bhcm1fbnVtLAogCkBAIC0xODIsMTIgKzE5MywxOSBAQAogCXZpZGlvY19pbnRfZGV2X2luaXRfbnVtID0gMTAwMCwKIAkvKiBEZWxpbml0aWFsaXNlIHRoZSBkZXZpY2UgYXQgc2xhdmUgZGV0YWNoLiAqLwogCXZpZGlvY19pbnRfZGV2X2V4aXRfbnVtLAotCS8qIFNldCBkZXZpY2UgcG93ZXIgc3RhdGU6IDAgaXMgb2ZmLCBub24temVybyBpcyBvbi4gKi8KKwkvKiBTZXQgZGV2aWNlIHBvd2VyIHN0YXRlLiAqLwogCXZpZGlvY19pbnRfc19wb3dlcl9udW0sCisJLyoKKwkqIEdldCBzbGF2ZSBwcml2YXRlIGRhdGEsIGUuZy4gcGxhdGZvcm0tc3BlY2lmaWMgc2xhdmUKKwkqIGNvbmZpZ3VyYXRpb24gdXNlZCBieSB0aGUgbWFzdGVyLgorCSovCisJdmlkaW9jX2ludF9nX3ByaXZfbnVtLAogCS8qIEdldCBzbGF2ZSBpbnRlcmZhY2UgcGFyYW1ldGVycy4gKi8KIAl2aWRpb2NfaW50X2dfaWZwYXJtX251bSwKIAkvKiBEb2VzIHRoZSBzbGF2ZSBuZWVkIHRvIGJlIHJlc2V0IGFmdGVyIFZJRElPQ19EUUJVRj8gKi8KIAl2aWRpb2NfaW50X2dfbmVlZHNfcmVzZXRfbnVtLAorCXZpZGlvY19pbnRfZW51bV9mcmFtZXNpemVzX251bSwKKwl2aWRpb2NfaW50X2VudW1fZnJhbWVpbnRlcnZhbHNfbnVtLAogCiAJLyoKIAkgKgpAQCAtMjYxLDE0ICsyNzksMjAgQEAKIFY0TDJfSU5UX1dSQVBQRVJfMShxdWVyeWN0cmwsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCwgKik7CiBWNEwyX0lOVF9XUkFQUEVSXzEoZ19jdHJsLCBzdHJ1Y3QgdjRsMl9jb250cm9sLCAqKTsKIFY0TDJfSU5UX1dSQVBQRVJfMShzX2N0cmwsIHN0cnVjdCB2NGwyX2NvbnRyb2wsICopOworVjRMMl9JTlRfV1JBUFBFUl8xKGNyb3BjYXAsIHN0cnVjdCB2NGwyX2Nyb3BjYXAsICopOworVjRMMl9JTlRfV1JBUFBFUl8xKGdfY3JvcCwgc3RydWN0IHY0bDJfY3JvcCwgKik7CitWNEwyX0lOVF9XUkFQUEVSXzEoc19jcm9wLCBzdHJ1Y3QgdjRsMl9jcm9wLCAqKTsKIFY0TDJfSU5UX1dSQVBQRVJfMShnX3Bhcm0sIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0sICopOwogVjRMMl9JTlRfV1JBUFBFUl8xKHNfcGFybSwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSwgKik7CiAKIFY0TDJfSU5UX1dSQVBQRVJfMChkZXZfaW5pdCk7CiBWNEwyX0lOVF9XUkFQUEVSXzAoZGV2X2V4aXQpOwotVjRMMl9JTlRfV1JBUFBFUl8xKHNfcG93ZXIsIGludCwgKTsKK1Y0TDJfSU5UX1dSQVBQRVJfMShzX3Bvd2VyLCBlbnVtIHY0bDJfcG93ZXIsICk7CitWNEwyX0lOVF9XUkFQUEVSXzEoZ19wcml2LCB2b2lkLCAqKTsKIFY0TDJfSU5UX1dSQVBQRVJfMShnX2lmcGFybSwgc3RydWN0IHY0bDJfaWZwYXJtLCAqKTsKIFY0TDJfSU5UX1dSQVBQRVJfMShnX25lZWRzX3Jlc2V0LCB2b2lkLCAqKTsKK1Y0TDJfSU5UX1dSQVBQRVJfMShlbnVtX2ZyYW1lc2l6ZXMsIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtLCAqKTsKK1Y0TDJfSU5UX1dSQVBQRVJfMShlbnVtX2ZyYW1laW50ZXJ2YWxzLCBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSwgKik7CiAKIFY0TDJfSU5UX1dSQVBQRVJfMChyZXNldCk7CiBWNEwyX0lOVF9XUkFQUEVSXzAoaW5pdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCmluZGV4IDBiZWYwM2EuLmU2YmEyNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCkBAIC0yNzEsMjYgKzI3MSwzOCBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdOwogCiAvKiAgQ29tcGF0aWJpbGl0eSBsYXllciBpbnRlcmZhY2UgIC0tICB2NGwxLWNvbXBhdCBtb2R1bGUgKi8KLXR5cGVkZWYgaW50ICgqdjRsMl9raW9jdGwpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAordHlwZWRlZiBpbnQgKCp2NGwyX2tpb2N0bCkoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotaW50IHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAoraW50IHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgIGludCBjbWQsIHZvaWQgKmFyZywgdjRsMl9raW9jdGwgZHJpdmVyX2lvY3RsKTsKICNlbHNlCi0jZGVmaW5lIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZywgaW9jdGwpICgtRUlOVkFMKQorI2RlZmluZSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChmaWxlLCBjbWQsIGFyZywgaW9jdGwpICgtRUlOVkFMKQogI2VuZGlmCiAKIC8qIDMyIEJpdHMgY29tcGF0aWJpbGl0eSBsYXllciBmb3IgNjQgYml0cyBwcm9jZXNzb3JzICovCiBleHRlcm4gbG9uZyB2NGxfY29tcGF0X2lvY3RsMzIoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdW5zaWduZWQgbG9uZyBhcmcpOwogCi1leHRlcm4gaW50IHZpZGVvX2lvY3RsMihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCiAvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIG9ic29sZXRlZCBzdHVmZiAqLwogZXh0ZXJuIGludCB2aWRlb191c2VyY29weShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykpOwogCisvKiBTdGFuZGFyZCBoYW5kbGVycyBmb3IgVjRMIGlvY3RsJ3MgKi8KKworLyogVGhpcyBwcm90b3R5cGUgaXMgdXNlZCBvbiBmb3BzLnVubG9ja2VkX2lvY3RsICovCitleHRlcm4gaW50IF9fdmlkZW9faW9jdGwyKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCisvKiBUaGlzIHByb3RvdHlwZSBpcyB1c2VkIG9uIGZvcHMuaW9jdGwKKyAqIFNpbmNlIGZvcHMuaW9jdGwgZW5hYmxlcyBLZXJuZWwgQmlnIExvY2ssIGl0IGlzIHByZWZlcnJlZAorICogdG8gdXNlIF9fdmlkZW9faW9jdGwyIGluc3RlYWQuCisgKiBJdCBzaG91bGQgYmUgbm90aWNlZCB0aGF0IHRoZXJlJ3Mgbm8gbG9jayBjb2RlIGluc2lkZQorICogdmlkZW9faW9jdGwyKCkuCisgKi8KK2V4dGVybiBpbnQgdmlkZW9faW9jdGwyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCiAjZW5kaWYgLyogX1Y0TDJfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZHZiLmgKaW5kZXggYjc3NzQ4Ni4uNmJhNGYxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oCkBAIC0xNiw3ICsxNiw2IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgbmZlZWRzOwogCiAJLyogdmlkZW9idWZfZHZiXyh1bilyZWdpc3RlciBtYW5nZXMgdGhpcyAqLwotCXN0cnVjdCBkdmJfYWRhcHRlciAgICAgICAgIGFkYXB0ZXI7CiAJc3RydWN0IGR2Yl9kZW11eCAgICAgICAgICAgZGVtdXg7CiAJc3RydWN0IGRteGRldiAgICAgICAgICAgICAgZG14ZGV2OwogCXN0cnVjdCBkbXhfZnJvbnRlbmQgICAgICAgIGZlX2h3OwpAQCAtMjQsMTIgKzIzLDM1IEBACiAJc3RydWN0IGR2Yl9uZXQgICAgICAgICAgICAgbmV0OwogfTsKIAotaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3RlcihzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIsCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZlbGlzdDsKKwlpbnQgaWQ7CisJc3RydWN0IHZpZGVvYnVmX2R2YiBkdmI7Cit9OworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyB7CisJc3RydWN0IGxpc3RfaGVhZCBmZWxpc3Q7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGR2Yl9hZGFwdGVyIGFkYXB0ZXI7CisJaW50IGFjdGl2ZV9mZV9pZDsgLyogSW5kaWNhdGVzIHdoaWNoIGZyb250ZW5kIGluIHRoZSBmZWxpc3QgaXMgaW4gdXNlICovCisJaW50IGdhdGU7IC8qIEZyb250ZW5kIHdpdGggZ2F0ZSBjb250cm9sIDA9IU1GRSwxPWZlMCwyPWZlMSBldGMgKi8KK307CisKK2ludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLAogCQkJICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCiAJCQkgIHZvaWQgKmFkYXB0ZXJfcHJpdiwKIAkJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAotCQkJICBzaG9ydCAqYWRhcHRlcl9ucik7Ci12b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2Yik7CisJCQkgIHNob3J0ICphZGFwdGVyX25yLAorCQkJICBpbnQgbWZlX3NoYXJlZCk7CisKK3ZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqIHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKTsKK3ZvaWQgdmlkZW9idWZfZHZiX2RlYWxsb2NfZnJvbnRlbmRzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqIHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIGludCBpZCk7CitpbnQgdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnApOworCiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC85cC5oIGIvaW5jbHVkZS9uZXQvOXAvOXAuaAppbmRleCBmYjE2M2UyLi5iNzdjMTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC85cC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgTkVUXzlQX0gKICNkZWZpbmUgTkVUXzlQX0gKIAotI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKLQogLyoqCiAgKiBlbnVtIHA5X2RlYnVnX2ZsYWdzIC0gYml0cyBmb3IgbW91bnQgdGltZSBkZWJ1ZyBwYXJhbWV0ZXIKICAqIEBQOV9ERUJVR19FUlJPUjogbW9yZSB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzIGluY2x1ZGluZyBvcmlnaW5hbCBlcnJvciBzdHJpbmcKQEAgLTM5LDYgKzM3LDcgQEAKICAqIEBQOV9ERUJVR19UUkFOUzogdHJhbnNwb3J0IHRyYWNpbmcKICAqIEBQOV9ERUJVR19TTEFCUzogbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2luZwogICogQFA5X0RFQlVHX0ZDQUxMOiB2ZXJib3NlIGR1bXAgb2YgcHJvdG9jb2wgbWVzc2FnZXMKKyAqIEBQOV9ERUJVR19GSUQ6IGZpZCBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiB0cmFja2luZwogICoKICAqIFRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgYXQgbW91bnQgdGltZSB0byB0dXJuIG9uIHZhcmlvdXMgbGV2ZWxzIG9mCiAgKiB2ZXJib3NpdHkgYW5kIHRyYWNpbmcgd2hpY2ggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHN5c3RlbSBsb2dzLgpAQCAtNTMsMjQgKzUyLDI3IEBACiAJUDlfREVCVUdfVFJBTlMgPQkoMTw8NiksCiAJUDlfREVCVUdfU0xBQlMgPSAgICAgIAkoMTw8NyksCiAJUDlfREVCVUdfRkNBTEwgPQkoMTw8OCksCisJUDlfREVCVUdfRklEID0JCSgxPDw5KSwKKwlQOV9ERUJVR19QS1QgPQkJKDE8PDEwKSwKIH07CiAKKyNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCiBleHRlcm4gdW5zaWduZWQgaW50IHA5X2RlYnVnX2xldmVsOwogCiAjZGVmaW5lIFA5X0RQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCiBkbyB7ICBcCi0JaWYgKChwOV9kZWJ1Z19sZXZlbCAmIGxldmVsKSA9PSBsZXZlbCkgXAotCQlwcmludGsoS0VSTl9OT1RJQ0UgIi0tICVzICglZCk6ICIgXAotCQlmb3JtYXQgLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkgLCAjIyBhcmcpOyBcCisJaWYgKChwOV9kZWJ1Z19sZXZlbCAmIGxldmVsKSA9PSBsZXZlbCkge1wKKwkJaWYgKGxldmVsID09IFA5X0RFQlVHXzlQKSBcCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiglOC44ZCkgIiBcCisJCQlmb3JtYXQgLCB0YXNrX3BpZF9ucihjdXJyZW50KSAsICMjIGFyZyk7IFwKKwkJZWxzZSBcCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIi0tICVzICglZCk6ICIgXAorCQkJZm9ybWF0ICwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpICwgIyMgYXJnKTsgXAorCX0gXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBQUklOVF9GQ0FMTF9FUlJPUihzLCBmY2FsbCkgUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgICBcCi0JIiVzOiAlLipzXG4iLCBzLCBmY2FsbD9mY2FsbC0+cGFyYW1zLnJlcnJvci5lcnJvci5sZW46MCwgXAotCWZjYWxsP2ZjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yLnN0cjoiIik7Ci0KICNlbHNlCiAjZGVmaW5lIFA5X0RQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBQUklOVF9GQ0FMTF9FUlJPUihzLCBmY2FsbCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNkZWZpbmUgUDlfRVBSSU5USyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKQEAgLTMyNSwzMyArMzI3LDYgQEAKICAqIFNlZSBBbHNvOiBodHRwOi8vcGxhbjkuYmVsbC1sYWJzLmNvbS9tYWdpYy9tYW4yaHRtbC8yL3N0YXQKICAqLwogCi1zdHJ1Y3QgcDlfc3RhdCB7Ci0JdTE2IHNpemU7Ci0JdTE2IHR5cGU7Ci0JdTMyIGRldjsKLQlzdHJ1Y3QgcDlfcWlkIHFpZDsKLQl1MzIgbW9kZTsKLQl1MzIgYXRpbWU7Ci0JdTMyIG10aW1lOwotCXU2NCBsZW5ndGg7Ci0Jc3RydWN0IHA5X3N0ciBuYW1lOwotCXN0cnVjdCBwOV9zdHIgdWlkOwotCXN0cnVjdCBwOV9zdHIgZ2lkOwotCXN0cnVjdCBwOV9zdHIgbXVpZDsKLQlzdHJ1Y3QgcDlfc3RyIGV4dGVuc2lvbjsJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotCXUzMiBuX3VpZDsJCQkvKiA5cDIwMDAudSBleHRlbnNpb25zICovCi0JdTMyIG5fZ2lkOwkJCS8qIDlwMjAwMC51IGV4dGVuc2lvbnMgKi8KLQl1MzIgbl9tdWlkOwkJCS8qIDlwMjAwMC51IGV4dGVuc2lvbnMgKi8KLX07Ci0KLS8qCi0gKiBmaWxlIG1ldGFkYXRhIChzdGF0KSBzdHJ1Y3R1cmUgdXNlZCB0byBjcmVhdGUgVHdzdGF0IG1lc3NhZ2UKLSAqIFRoZSBpcyBpZGVudGljYWwgdG8gJnA5X3N0YXQsIGJ1dCB0aGUgc3RyaW5ncyBkb24ndCBwb2ludCB0bwotICogdGhlIHNhbWUgbWVtb3J5IGJsb2NrIGFuZCBzaG91bGQgYmUgZnJlZWQgc2VwYXJhdGVseQotICoKLSAqIFNlZSBBbHNvOiBodHRwOi8vcGxhbjkuYmVsbC1sYWJzLmNvbS9tYWdpYy9tYW4yaHRtbC8yL3N0YXQKLSAqLwotCiBzdHJ1Y3QgcDlfd3N0YXQgewogCXUxNiBzaXplOwogCXUxNiB0eXBlOwpAQCAtNDkzLDEyICs0NjgsMTIgQEAKIH07CiAKIHN0cnVjdCBwOV9yc3RhdCB7Ci0Jc3RydWN0IHA5X3N0YXQgc3RhdDsKKwlzdHJ1Y3QgcDlfd3N0YXQgc3RhdDsKIH07CiAKIHN0cnVjdCBwOV90d3N0YXQgewogCXUzMiBmaWQ7Ci0Jc3RydWN0IHA5X3N0YXQgc3RhdDsKKwlzdHJ1Y3QgcDlfd3N0YXQgc3RhdDsKIH07CiAKIHN0cnVjdCBwOV9yd3N0YXQgewpAQCAtNTA5LDggKzQ4NCw5IEBACiAgKiBAc2l6ZTogcHJlZml4ZWQgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUKICAqIEBpZDogcHJvdG9jb2wgb3BlcmF0aW5nIGlkZW50aWZpZXIgb2YgdHlwZSAmcDlfbXNnX3QKICAqIEB0YWc6IHRyYW5zYWN0aW9uIGlkIG9mIHRoZSByZXF1ZXN0CisgKiBAb2Zmc2V0OiB1c2VkIGJ5IG1hcnNoYWxsaW5nIHJvdXRpbmVzIHRvIHRyYWNrIGN1cnJlbnRwb3NpdGlvbiBpbiBidWZmZXIKKyAqIEBjYXBhY2l0eTogdXNlZCBieSBtYXJzaGFsbGluZyByb3V0aW5lcyB0byB0cmFjayB0b3RhbCBjYXBhY2l0eQogICogQHNkYXRhOiBwYXlsb2FkCi0gKiBAcGFyYW1zOiBwZXItb3BlcmF0aW9uIHBhcmFtZXRlcnMKICAqCiAgKiAmcDlfZmNhbGwgcmVwcmVzZW50cyB0aGUgc3RydWN0dXJlIGZvciBhbGwgOVAgUlBDCiAgKiB0cmFuc2FjdGlvbnMuICBSZXF1ZXN0cyBhcmUgcGFja2FnZWQgaW50byBmY2FsbHMsIGFuZCByZXBvbnNlcwpAQCAtNTIzLDY4ICs0OTksMTUgQEAKIAl1MzIgc2l6ZTsKIAl1OCBpZDsKIAl1MTYgdGFnOwotCXZvaWQgKnNkYXRhOwogCi0JdW5pb24gewotCQlzdHJ1Y3QgcDlfdHZlcnNpb24gdHZlcnNpb247Ci0JCXN0cnVjdCBwOV9ydmVyc2lvbiBydmVyc2lvbjsKLQkJc3RydWN0IHA5X3RhdXRoIHRhdXRoOwotCQlzdHJ1Y3QgcDlfcmF1dGggcmF1dGg7Ci0JCXN0cnVjdCBwOV9yZXJyb3IgcmVycm9yOwotCQlzdHJ1Y3QgcDlfdGZsdXNoIHRmbHVzaDsKLQkJc3RydWN0IHA5X3JmbHVzaCByZmx1c2g7Ci0JCXN0cnVjdCBwOV90YXR0YWNoIHRhdHRhY2g7Ci0JCXN0cnVjdCBwOV9yYXR0YWNoIHJhdHRhY2g7Ci0JCXN0cnVjdCBwOV90d2FsayB0d2FsazsKLQkJc3RydWN0IHA5X3J3YWxrIHJ3YWxrOwotCQlzdHJ1Y3QgcDlfdG9wZW4gdG9wZW47Ci0JCXN0cnVjdCBwOV9yb3BlbiByb3BlbjsKLQkJc3RydWN0IHA5X3RjcmVhdGUgdGNyZWF0ZTsKLQkJc3RydWN0IHA5X3JjcmVhdGUgcmNyZWF0ZTsKLQkJc3RydWN0IHA5X3RyZWFkIHRyZWFkOwotCQlzdHJ1Y3QgcDlfcnJlYWQgcnJlYWQ7Ci0JCXN0cnVjdCBwOV90d3JpdGUgdHdyaXRlOwotCQlzdHJ1Y3QgcDlfcndyaXRlIHJ3cml0ZTsKLQkJc3RydWN0IHA5X3RjbHVuayB0Y2x1bms7Ci0JCXN0cnVjdCBwOV9yY2x1bmsgcmNsdW5rOwotCQlzdHJ1Y3QgcDlfdHJlbW92ZSB0cmVtb3ZlOwotCQlzdHJ1Y3QgcDlfcnJlbW92ZSBycmVtb3ZlOwotCQlzdHJ1Y3QgcDlfdHN0YXQgdHN0YXQ7Ci0JCXN0cnVjdCBwOV9yc3RhdCByc3RhdDsKLQkJc3RydWN0IHA5X3R3c3RhdCB0d3N0YXQ7Ci0JCXN0cnVjdCBwOV9yd3N0YXQgcndzdGF0OwotCX0gcGFyYW1zOworCXNpemVfdCBvZmZzZXQ7CisJc2l6ZV90IGNhcGFjaXR5OworCisJdWludDhfdCAqc2RhdGE7CiB9OwogCiBzdHJ1Y3QgcDlfaWRwb29sOwogCi1pbnQgcDlfZGVzZXJpYWxpemVfc3RhdCh2b2lkICpidWYsIHUzMiBidWZsZW4sIHN0cnVjdCBwOV9zdGF0ICpzdGF0LAotCWludCBkb3R1KTsKLWludCBwOV9kZXNlcmlhbGl6ZV9mY2FsbCh2b2lkICpidWYsIHUzMiBidWZsZW4sIHN0cnVjdCBwOV9mY2FsbCAqZmMsIGludCBkb3R1KTsKLXZvaWQgcDlfc2V0X3RhZyhzdHJ1Y3QgcDlfZmNhbGwgKmZjLCB1MTYgdGFnKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R2ZXJzaW9uKHUzMiBtc2l6ZSwgY2hhciAqdmVyc2lvbik7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90YXR0YWNoKHUzMiBmaWQsIHUzMiBhZmlkLCBjaGFyICp1bmFtZSwKLQljaGFyICphbmFtZSwgdTMyIG5fdW5hbWUsIGludCBkb3R1KTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RhdXRoKHUzMiBhZmlkLCBjaGFyICp1bmFtZSwgY2hhciAqYW5hbWUsCi0JdTMyIG5fdW5hbWUsIGludCBkb3R1KTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RmbHVzaCh1MTYgb2xkdGFnKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3YWxrKHUzMiBmaWQsIHUzMiBuZXdmaWQsIHUxNiBud25hbWUsCi0JY2hhciAqKnduYW1lcyk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90b3Blbih1MzIgZmlkLCB1OCBtb2RlKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RjcmVhdGUodTMyIGZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sIHU4IG1vZGUsCi0JY2hhciAqZXh0ZW5zaW9uLCBpbnQgZG90dSk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90cmVhZCh1MzIgZmlkLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdyaXRlKHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCwKLQljb25zdCBjaGFyICpkYXRhKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3cml0ZV91KHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCwKLQljb25zdCBjaGFyIF9fdXNlciAqZGF0YSk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y2x1bmsodTMyIGZpZCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90cmVtb3ZlKHUzMiBmaWQpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHN0YXQodTMyIGZpZCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3N0YXQodTMyIGZpZCwgc3RydWN0IHA5X3dzdGF0ICp3c3RhdCwKLQlpbnQgZG90dSk7Ci0KLWludCBwOV9wcmludGZjYWxsKGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbiwgc3RydWN0IHA5X2ZjYWxsICpmYywgaW50IGRvdHUpOwogaW50IHA5X2VycnN0cjJlcnJubyhjaGFyICplcnJzdHIsIGludCBsZW4pOwogCiBzdHJ1Y3QgcDlfaWRwb29sICpwOV9pZHBvb2xfY3JlYXRlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmggYi9pbmNsdWRlL25ldC85cC9jbGllbnQuaAppbmRleCBjOTM2ZGQxLi40MDEyZTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaAorKysgYi9pbmNsdWRlL25ldC85cC9jbGllbnQuaApAQCAtMjYsNiArMjYsODcgQEAKICNpZm5kZWYgTkVUXzlQX0NMSUVOVF9ICiAjZGVmaW5lIE5FVF85UF9DTElFTlRfSAogCisvKiBOdW1iZXIgb2YgcmVxdWVzdHMgcGVyIHJvdyAqLworI2RlZmluZSBQOV9ST1dfTUFYVEFHIDI1NQorCisvKioKKyAqIGVudW0gcDlfdHJhbnNfc3RhdHVzIC0gZGlmZmVyZW50IHN0YXRlcyBvZiB1bmRlcmx5aW5nIHRyYW5zcG9ydHMKKyAqIEBDb25uZWN0ZWQ6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYW5kIGhlYWx0aHkKKyAqIEBEaXNjb25uZWN0ZWQ6IHRyYW5zcG9ydCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQKKyAqIEBIdW5nOiB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIGJ5IHdlZGdlZAorICoKKyAqIFRoaXMgZW51bWVyYXRpb24gZGV0YWlscyB0aGUgdmFyaW91cyBzdGF0ZXMgYSB0cmFuc3BvcnQKKyAqIGluc3RhdGlhdGlvbiBjYW4gYmUgaW4uCisgKi8KKworZW51bSBwOV90cmFuc19zdGF0dXMgeworCUNvbm5lY3RlZCwKKwlEaXNjb25uZWN0ZWQsCisJSHVuZywKK307CisKKy8qKgorICogZW51bSBwOV9yZXFfc3RhdHVzX3QgLSB2aXJ0aW8gcmVxdWVzdCBzdGF0dXMKKyAqIEBSRVFfU1RBVFVTX0lETEU6IHJlcXVlc3Qgc2xvdCB1bnVzZWQKKyAqIEBSRVFfU1RBVFVTX0FMTE9DOiByZXF1ZXN0IGhhcyBiZWVuIGFsbG9jYXRlZCBidXQgbm90IHNlbnQKKyAqIEBSRVFfU1RBVFVTX1VOU0VOVDogcmVxdWVzdCB3YWl0aW5nIHRvIGJlIHNlbnQKKyAqIEBSRVFfU1RBVFVTX1NFTlQ6IHJlcXVlc3Qgc2VudCB0byBzZXJ2ZXIKKyAqIEBSRVFfU1RBVFVTX0ZMU0g6IGEgZmx1c2ggaGFzIGJlZW4gc2VudCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAUkVRX1NUQVRVU19SQ1ZEOiByZXNwb25zZSByZWNlaXZlZCBmcm9tIHNlcnZlcgorICogQFJFUV9TVEFUVVNfRkxTSEQ6IHJlcXVlc3QgaGFzIGJlZW4gZmx1c2hlZAorICogQFJFUV9TVEFUVVNfRVJST1I6IHJlcXVlc3QgZW5jb3VudGVyZWQgYW4gZXJyb3Igb24gdGhlIGNsaWVudCBzaWRlCisgKgorICogVGhlIEBSRVFfU1RBVFVTX0lETEUgc3RhdGUgaXMgdXNlZCB0byBtYXJrIGEgcmVxdWVzdCBzbG90IGFzIHVudXNlZAorICogYnV0IHVzZSBpcyBhY3R1YWxseSB0cmFja2VkIGJ5IHRoZSBpZHBvb2wgc3RydWN0dXJlIHdoaWNoIGhhbmRsZXMgdGFnCisgKiBpZCBhbGxvY2F0aW9uLgorICoKKyAqLworCitlbnVtIHA5X3JlcV9zdGF0dXNfdCB7CisJUkVRX1NUQVRVU19JRExFLAorCVJFUV9TVEFUVVNfQUxMT0MsCisJUkVRX1NUQVRVU19VTlNFTlQsCisJUkVRX1NUQVRVU19TRU5ULAorCVJFUV9TVEFUVVNfRkxTSCwKKwlSRVFfU1RBVFVTX1JDVkQsCisJUkVRX1NUQVRVU19GTFNIRCwKKwlSRVFfU1RBVFVTX0VSUk9SLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgcDlfcmVxX3QgLSByZXF1ZXN0IHNsb3RzCisgKiBAc3RhdHVzOiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0IHNsb3QKKyAqIEB0X2VycjogdHJhbnNwb3J0IGVycm9yCisgKiBAZmx1c2hfdGFnOiB0YWcgb2YgcmVxdWVzdCBiZWluZyBmbHVzaGVkIChmb3IgZmx1c2ggcmVxdWVzdHMpCisgKiBAd3E6IHdhaXRfcXVldWUgZm9yIHRoZSBjbGllbnQgdG8gYmxvY2sgb24gZm9yIHRoaXMgcmVxdWVzdAorICogQHRjOiB0aGUgcmVxdWVzdCBmY2FsbCBzdHJ1Y3R1cmUKKyAqIEByYzogdGhlIHJlc3BvbnNlIGZjYWxsIHN0cnVjdHVyZQorICogQGF1eDogdHJhbnNwb3J0IHNwZWNpZmljIGRhdGEgKHByb3ZpZGVkIGZvciB0cmFuc19mZCBtaWdyYXRpb24pCisgKiBAcmVxX2xpc3Q6IGxpbmsgZm9yIGhpZ2hlciBsZXZlbCBvYmplY3RzIHRvIGNoYWluIHJlcXVlc3RzCisgKgorICogVHJhbnNwb3J0IHVzZSBhbiBhcnJheSB0byB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cworICogaW5zdGVhZCBvZiBhIGxpc3QuICBXaGlsZSB0aGlzIG1heSBpbmN1cnIgb3ZlcmhlYWQgZHVyaW5nIGluaXRpYWwKKyAqIGFsbG9jYXRpb24gb3IgZXhwYW5zaW9uLCBpdCBtYWtlcyByZXF1ZXN0IGxvb2t1cCBtdWNoIGVhc2llciBhcyB0aGUKKyAqIHRhZyBpZCBpcyBhIGluZGV4IGludG8gYW4gYXJyYXkuICAoV2UgdXNlIHRhZysxIHNvIHRoYXQgd2UgY2FuIGFjY29tb2RhdGUKKyAqIHRoZSAtMSB0YWcgZm9yIHRoZSBUX1ZFUlNJT04gcmVxdWVzdCkuCisgKiBUaGlzIGFsc28gaGFzIHRoZSBuaWNlIGVmZmVjdCBvZiBvbmx5IGhhdmluZyB0byBhbGxvY2F0ZSB3YWl0X3F1ZXVlcworICogb25jZSwgaW5zdGVhZCBvZiBjb25zdGFudGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgdGhlbS4gIEl0cyBwb3NzaWJsZQorICogb3RoZXIgcmVzb3VyY2VzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIHNjaGVtZSBhcyB3ZWxsLgorICoKKyAqLworCitzdHJ1Y3QgcDlfcmVxX3QgeworCWludCBzdGF0dXM7CisJaW50IHRfZXJyOworCXUxNiBmbHVzaF90YWc7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxOworCXN0cnVjdCBwOV9mY2FsbCAqdGM7CisJc3RydWN0IHA5X2ZjYWxsICpyYzsKKwl2b2lkICphdXg7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgcDlfY2xpZW50IC0gcGVyIGNsaWVudCBpbnN0YW5jZSBzdGF0ZQogICogQGxvY2s6IHByb3RlY3QgQGZpZGxpc3QKQEAgLTM2LDkgKzExNywyMCBAQAogICogQGNvbm46IGNvbm5lY3Rpb24gc3RhdGUgaW5mb3JtYXRpb24gdXNlZCBieSB0cmFuc19mZAogICogQGZpZHBvb2w6IGZpZCBoYW5kbGUgYWNjb3VudGluZyBmb3Igc2Vzc2lvbgogICogQGZpZGxpc3Q6IExpc3Qgb2YgYWN0aXZlIGZpZCBoYW5kbGVzCisgKiBAdGFncG9vbCAtIHRyYW5zYWN0aW9uIGlkIGFjY291bnRpbmcgZm9yIHNlc3Npb24KKyAqIEByZXFzIC0gMkQgYXJyYXkgb2YgcmVxdWVzdHMKKyAqIEBtYXhfdGFnIC0gY3VycmVudCBtYXhpbXVtIHRhZyBpZCBhbGxvY2F0ZWQKICAqCiAgKiBUaGUgY2xpZW50IHN0cnVjdHVyZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdmFyaW91cyBwZXItY2xpZW50CiAgKiBzdGF0ZSB0aGF0IGhhcyBiZWVuIGluc3RhbnRpYXRlZC4KKyAqIEluIG9yZGVyIHRvIG1pbmltaXplIHBlci10cmFuc2FjdGlvbiBvdmVyaGVhZCB3ZSB1c2UgYQorICogc2ltcGxlIGFycmF5IHRvIGxvb2t1cCByZXF1ZXN0cyBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZQorICogb3IgbGlua2VkIGxpc3QuICBJbiBvcmRlciB0byBzdXBwb3J0IGxhcmdlciBudW1iZXIgb2YKKyAqIHRyYW5zYWN0aW9ucywgd2UgbWFrZSB0aGlzIGEgMkQgYXJyYXksIGFsbG9jYXRpbmcgbmV3IHJvd3MKKyAqIHdoZW4gd2UgbmVlZCB0byBncm93IHRoZSB0b3RhbCBudW1iZXIgb2YgdGhlIHRyYW5zYWN0aW9ucy4KKyAqCisgKiBFYWNoIHJvdyBpcyAyNTYgcmVxdWVzdHMgYW5kIHdlJ2xsIHN1cHBvcnQgdXAgdG8gMjU2IHJvd3MgZm9yCisgKiBhIHRvdGFsIG9mIDY0ayBjb25jdXJyZW50IHJlcXVlc3RzIHBlciBzZXNzaW9uLgogICoKICAqIEJ1Z3M6IGR1cGxpY2F0ZWQgZGF0YSBhbmQgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgZWxlbWVudHMuCiAgKi8KQEAgLTQ4LDExICsxNDAsMTYgQEAKIAlpbnQgbXNpemU7CiAJdW5zaWduZWQgY2hhciBkb3R1OwogCXN0cnVjdCBwOV90cmFuc19tb2R1bGUgKnRyYW5zX21vZDsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOworCWVudW0gcDlfdHJhbnNfc3RhdHVzIHN0YXR1czsKKwl2b2lkICp0cmFuczsKIAlzdHJ1Y3QgcDlfY29ubiAqY29ubjsKIAogCXN0cnVjdCBwOV9pZHBvb2wgKmZpZHBvb2w7CiAJc3RydWN0IGxpc3RfaGVhZCBmaWRsaXN0OworCisJc3RydWN0IHA5X2lkcG9vbCAqdGFncG9vbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcXNbUDlfUk9XX01BWFRBR107CisJaW50IG1heF90YWc7CiB9OwogCiAvKioKQEAgLTY1LDggKzE2Miw2IEBACiAgKiBAdWlkOiB0aGUgbnVtZXJpYyB1aWQgb2YgdGhlIGxvY2FsIHVzZXIgd2hvIG93bnMgdGhpcyBoYW5kbGUKICAqIEBhdXg6IHRyYW5zcG9ydCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAodW51c2VkPykKICAqIEByZGlyX2Zwb3M6IHRyYWNrcyBvZmZzZXQgb2YgZmlsZSBwb3NpdGlvbiB3aGVuIHJlYWRpbmcgZGlyZWN0b3J5IGNvbnRlbnRzCi0gKiBAcmRpcl9wb3M6ICh1bnVzZWQ/KQotICogQHJkaXJfZmNhbGw6IGhvbGRzIHJlc3BvbnNlIG9mIGxhc3QgZGlyZWN0b3J5IHJlYWQgcmVxdWVzdAogICogQGZsaXN0OiBwZXItY2xpZW50LWluc3RhbmNlIGZpZCB0cmFja2luZwogICogQGRsaXN0OiBwZXItZGVudHJ5IGZpZCB0cmFja2luZwogICoKQEAgLTgzLDEyICsxNzgsMTEgQEAKIAl2b2lkICphdXg7CiAKIAlpbnQgcmRpcl9mcG9zOwotCWludCByZGlyX3BvczsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnJkaXJfZmNhbGw7CiAJc3RydWN0IGxpc3RfaGVhZCBmbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkvKiBsaXN0IG9mIGFsbCBmaWRzIGF0dGFjaGVkIHRvIGEgZGVudHJ5ICovCiB9OwogCitpbnQgcDlfY2xpZW50X3ZlcnNpb24oc3RydWN0IHA5X2NsaWVudCAqKTsKIHN0cnVjdCBwOV9jbGllbnQgKnA5X2NsaWVudF9jcmVhdGUoY29uc3QgY2hhciAqZGV2X25hbWUsIGNoYXIgKm9wdGlvbnMpOwogdm9pZCBwOV9jbGllbnRfZGVzdHJveShzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KTsKIHZvaWQgcDlfY2xpZW50X2Rpc2Nvbm5lY3Qoc3RydWN0IHA5X2NsaWVudCAqY2xudCk7CkBAIC0xMDMsMTUgKzE5NywxOSBAQAogCQkJCQkJCWNoYXIgKmV4dGVuc2lvbik7CiBpbnQgcDlfY2xpZW50X2NsdW5rKHN0cnVjdCBwOV9maWQgKmZpZCk7CiBpbnQgcDlfY2xpZW50X3JlbW92ZShzdHJ1Y3QgcDlfZmlkICpmaWQpOwotaW50IHA5X2NsaWVudF9yZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKLWludCBwOV9jbGllbnRfcmVhZG4oc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpOwotaW50IHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1pbnQgcDlfY2xpZW50X3VyZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciBfX3VzZXIgKmRhdGEsIHU2NCBvZmZzZXQsCi0JCQkJCQkJCXUzMiBjb3VudCk7Ci1pbnQgcDlfY2xpZW50X3V3cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCB1NjQgb2Zmc2V0LAotCQkJCQkJCQl1MzIgY291bnQpOwotc3RydWN0IHA5X3N0YXQgKnA5X2NsaWVudF9zdGF0KHN0cnVjdCBwOV9maWQgKmZpZCk7CitpbnQgcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjaGFyIF9fdXNlciAqdWRhdGEsCisJCQkJCQkJdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKK2ludCBwOV9jbGllbnRfd3JpdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjb25zdCBjaGFyIF9fdXNlciAqdWRhdGEsCisJCQkJCQkJdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKK3N0cnVjdCBwOV93c3RhdCAqcDlfY2xpZW50X3N0YXQoc3RydWN0IHA5X2ZpZCAqZmlkKTsKIGludCBwOV9jbGllbnRfd3N0YXQoc3RydWN0IHA5X2ZpZCAqZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdCk7Ci1zdHJ1Y3QgcDlfc3RhdCAqcDlfY2xpZW50X2RpcnJlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCB1NjQgb2Zmc2V0KTsKKworc3RydWN0IHA5X3JlcV90ICpwOV90YWdfbG9va3VwKHN0cnVjdCBwOV9jbGllbnQgKiwgdTE2KTsKK3ZvaWQgcDlfY2xpZW50X2NiKHN0cnVjdCBwOV9jbGllbnQgKmMsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKTsKKworaW50IHA5X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcDlfZmNhbGwgKiwgaW50MzJfdCAqLCBpbnQ4X3QgKiwgaW50MTZfdCAqLCBpbnQpOworaW50IHA5c3RhdF9yZWFkKGNoYXIgKiwgaW50LCBzdHJ1Y3QgcDlfd3N0YXQgKiwgaW50KTsKK3ZvaWQgcDlzdGF0X2ZyZWUoc3RydWN0IHA5X3dzdGF0ICopOworCiAKICNlbmRpZiAvKiBORVRfOVBfQ0xJRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKaW5kZXggM2NhNzM3MS4uNmQ1ODg2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKQEAgLTI2LDUyICsyNiw2IEBACiAjaWZuZGVmIE5FVF85UF9UUkFOU1BPUlRfSAogI2RlZmluZSBORVRfOVBfVFJBTlNQT1JUX0gKIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0vKioKLSAqIGVudW0gcDlfdHJhbnNfc3RhdHVzIC0gZGlmZmVyZW50IHN0YXRlcyBvZiB1bmRlcmx5aW5nIHRyYW5zcG9ydHMKLSAqIEBDb25uZWN0ZWQ6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYW5kIGhlYWx0aHkKLSAqIEBEaXNjb25uZWN0ZWQ6IHRyYW5zcG9ydCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQKLSAqIEBIdW5nOiB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIGJ5IHdlZGdlZAotICoKLSAqIFRoaXMgZW51bWVyYXRpb24gZGV0YWlscyB0aGUgdmFyaW91cyBzdGF0ZXMgYSB0cmFuc3BvcnQKLSAqIGluc3RhdGlhdGlvbiBjYW4gYmUgaW4uCi0gKi8KLQotZW51bSBwOV90cmFuc19zdGF0dXMgewotCUNvbm5lY3RlZCwKLQlEaXNjb25uZWN0ZWQsCi0JSHVuZywKLX07Ci0KLS8qKgotICogc3RydWN0IHA5X3RyYW5zIC0gcGVyLXRyYW5zcG9ydCBzdGF0ZSBhbmQgQVBJCi0gKiBAc3RhdHVzOiB0cmFuc3BvcnQgJnA5X3RyYW5zX3N0YXR1cwotICogQG1zaXplOiBuZWdvdGlhdGVkIG1heGltdW0gcGFja2V0IHNpemUgKGR1cGxpY2F0ZSBmcm9tIGNsaWVudCkKLSAqIEBleHRlbmRlZDogbmVnb3RpYXRlZCBwcm90b2NvbCBleHRlbnNpb25zIChkdXBsaWNhdGUgZnJvbSBjbGllbnQpCi0gKiBAcHJpdjogdHJhbnNwb3J0IHByaXZhdGUgZGF0YQotICogQGNsb3NlOiBtZW1iZXIgZnVuY3Rpb24gdG8gZGlzY29ubmVjdCBhbmQgY2xvc2UgdGhlIHRyYW5zcG9ydAotICogQHJwYzogbWVtYmVyIGZ1bmN0aW9uIHRvIGlzc3VlIGEgcmVxdWVzdCB0byB0aGUgdHJhbnNwb3J0Ci0gKgotICogVGhpcyBpcyB0aGUgYmFzaWMgQVBJIGZvciBhIHRyYW5zcG9ydCBpbnN0YW5jZS4gIEl0IGlzIHVzZWQgYXMKLSAqIGEgaGFuZGxlIGJ5IHRoZSBjbGllbnQgdG8gaXNzdWUgcmVxdWVzdHMuICBUaGlzIGludGVyZmFjZSBpcyBjdXJyZW50bHkKLSAqIGluIGZsdXggZHVyaW5nIHJlb3JnYW5pemF0aW9uLgotICoKLSAqIEJ1Z3M6IHRoZXJlIGlzIGxvdHMgb2YgZHVwbGljYXRlZCBkYXRhIGhlcmUgYW5kIGl0cyBub3QgY2xlYXIgdGhhdAotICogdGhlIG1lbWJlciBmdW5jdGlvbnMgbmVlZCB0byBiZSBwZXItaW5zdGFuY2UgdmVyc3VzIHBlciB0cmFuc3BvcnQKLSAqIG1vZHVsZS4KLSAqLwotCi1zdHJ1Y3QgcDlfdHJhbnMgewotCWVudW0gcDlfdHJhbnNfc3RhdHVzIHN0YXR1czsKLQlpbnQgbXNpemU7Ci0JdW5zaWduZWQgY2hhciBleHRlbmRlZDsKLQl2b2lkICpwcml2OwotCXZvaWQgKCpjbG9zZSkgKHN0cnVjdCBwOV90cmFucyAqKTsKLQlpbnQgKCpycGMpIChzdHJ1Y3QgcDlfdHJhbnMgKnQsIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JCQkJCQkJc3RydWN0IHA5X2ZjYWxsICoqcmMpOwotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIC0gdHJhbnNwb3J0IG1vZHVsZSBpbnRlcmZhY2UKICAqIEBsaXN0OiB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBjdXJyZW50bHkgYXZhaWxhYmxlIHRyYW5zcG9ydHMKQEAgLTc5LDEyICszMywxNCBAQAogICogQG1heHNpemU6IHRyYW5zcG9ydCBwcm92aWRlZCBtYXhpbXVtIHBhY2tldCBzaXplCiAgKiBAZGVmOiBzZXQgaWYgdGhpcyB0cmFuc3BvcnQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIGRlZmF1bHQKICAqIEBjcmVhdGU6IG1lbWJlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBvbiB0aGlzIHRyYW5zcG9ydAorICogQHJlcXVlc3Q6IG1lbWJlciBmdW5jdGlvbiB0byBpc3N1ZSBhIHJlcXVlc3QgdG8gdGhlIHRyYW5zcG9ydAorICogQGNhbmNlbDogbWVtYmVyIGZ1bmN0aW9uIHRvIGNhbmNlbCBhIHJlcXVlc3QgKGlmIGl0IGhhc24ndCBiZWVuIHNlbnQpCiAgKgogICogVGhpcyBpcyB0aGUgYmFzaWMgQVBJIGZvciBhIHRyYW5zcG9ydCBtb2R1bGUgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSB0aGUKICAqIHRyYW5zcG9ydCBtb2R1bGUgd2l0aCB0aGUgOVAgY29yZSBuZXR3b3JrIG1vZHVsZSBhbmQgdXNlZCBieSB0aGUgY2xpZW50CiAgKiB0byBpbnN0YW50aWF0ZSBhIG5ldyBjb25uZWN0aW9uIG9uIGEgdHJhbnNwb3J0LgogICoKLSAqIEJ1Z3M6IHRoZSB0cmFuc3BvcnQgbW9kdWxlIGxpc3QgaXNuJ3QgcHJvdGVjdGVkLgorICogQlVHUzogdGhlIHRyYW5zcG9ydCBtb2R1bGUgbGlzdCBpc24ndCBwcm90ZWN0ZWQuCiAgKi8KIAogc3RydWN0IHA5X3RyYW5zX21vZHVsZSB7CkBAIC05Miw4ICs0OCwxMSBAQAogCWNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRyYW5zcG9ydCAqLwogCWludCBtYXhzaXplOwkJLyogbWF4IG1lc3NhZ2Ugc2l6ZSBvZiB0cmFuc3BvcnQgKi8KIAlpbnQgZGVmOwkJLyogdGhpcyB0cmFuc3BvcnQgc2hvdWxkIGJlIGRlZmF1bHQgKi8KLQlzdHJ1Y3QgcDlfdHJhbnMgKiAoKmNyZWF0ZSkoY29uc3QgY2hhciAqLCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhcik7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJaW50ICgqY3JlYXRlKShzdHJ1Y3QgcDlfY2xpZW50ICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKwl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgcDlfY2xpZW50ICopOworCWludCAoKnJlcXVlc3QpIChzdHJ1Y3QgcDlfY2xpZW50ICosIHN0cnVjdCBwOV9yZXFfdCAqcmVxKTsKKwlpbnQgKCpjYW5jZWwpIChzdHJ1Y3QgcDlfY2xpZW50ICosIHN0cnVjdCBwOV9yZXFfdCAqcmVxKTsKIH07CiAKIHZvaWQgdjlmc19yZWdpc3Rlcl90cmFucyhzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlICptKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oCmluZGV4IDBjYjYzZWQuLmI4MDkzOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaApAQCAtMiw5ICsyLDkgQEAKICNkZWZpbmUgX19ORVROU19YX1RBQkxFU19ICiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAKIHN0cnVjdCBuZXRuc194dCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0YWJsZXNbTlBST1RPXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRhYmxlc1tORlBST1RPX05VTVBST1RPXTsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc20uaCBiL2luY2x1ZGUvbmV0L3NjdHAvc20uaAppbmRleCAwMjlhNTRhLi5jMWRkODkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NtLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCkBAIC0xMjUsNiArMTI1LDcgQEAKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2JhY2tiZWF0XzhfMzsKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzlfMl9maW5hbDsKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzlfMl9zaHV0ZG93bjsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzlfMl9zaHV0X2N0c247CiBzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb19lY25fY3dyOwogc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fZWNuZTsKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX29vdGI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaCBiL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oCmluZGV4IDE2YmUxMmYuLjBjOTUxNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oCisrKyBiL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oCkBAIC0yMTMsNiArMjEzLDggQEAKIAlJU0NTSV9FUlJfREFUQV9ER1NUCQk9IElTQ1NJX0VSUl9CQVNFICsgMTUsCiAJSVNDU0lfRVJSX1BBUkFNX05PVF9GT1VORAk9IElTQ1NJX0VSUl9CQVNFICsgMTYsCiAJSVNDU0lfRVJSX05PX1NDU0lfQ01ECQk9IElTQ1NJX0VSUl9CQVNFICsgMTcsCisJSVNDU0lfRVJSX0lOVkFMSURfSE9TVAkJPSBJU0NTSV9FUlJfQkFTRSArIDE4LAorCUlTQ1NJX0VSUl9YTUlUX0ZBSUxFRAkJPSBJU0NTSV9FUlJfQkFTRSArIDE5LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKaW5kZXggNWU3NWJiNy4uNjFlNTNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKQEAgLTI4Nyw2ICsyODcsMTEgQEAKIAlzdHJ1Y3QgaXNjc2lfcG9vbAljbWRwb29sOwkvKiBQRFUncyBwb29sICovCiB9OwogCitlbnVtIHsKKwlJU0NTSV9IT1NUX1NFVFVQLAorCUlTQ1NJX0hPU1RfUkVNT1ZFRCwKK307CisKIHN0cnVjdCBpc2NzaV9ob3N0IHsKIAljaGFyCQkJKmluaXRpYXRvcm5hbWU7CiAJLyogaHcgYWRkcmVzcyBvciBuZXRkZXYgaXNjc2kgY29ubmVjdGlvbiBpcyBib3VuZCB0byAqLwpAQCAtMjk1LDYgKzMwMCwxMiBAQAogCS8qIGxvY2FsIGFkZHJlc3MgKi8KIAlpbnQJCQlsb2NhbF9wb3J0OwogCWNoYXIJCQlsb2NhbF9hZGRyZXNzW0lTQ1NJX0FERFJFU1NfQlVGX0xFTl07CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAlzZXNzaW9uX3JlbW92YWxfd3E7CisJLyogcHJvdGVjdHMgc2Vzc2lvbnMgYW5kIHN0YXRlICovCisJc3BpbmxvY2tfdAkJbG9jazsKKwlpbnQJCQludW1fc2Vzc2lvbnM7CisJaW50CQkJc3RhdGU7CiB9OwogCiAvKgpAQCAtMzAyLDcgKzMxMyw3IEBACiAgKi8KIGV4dGVybiBpbnQgaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwotZXh0ZXJuIGludCBpc2NzaV9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKK2V4dGVybiBpbnQgaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNjLAogCQkJICAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOwpAQCAtMzUxLDYgKzM2Miw4IEBACiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fYmluZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKiwgc3RydWN0IGlzY3NpX2Nsc19jb25uICosCiAJCQkgICBpbnQpOwogZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnIpOworZXh0ZXJuIHZvaWQgaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCisJCQkJICBlbnVtIGlzY3NpX2VyciBlcnIpOwogZXh0ZXJuIGludCBpc2NzaV9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAogCQkJCWVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBpc2NzaV9zdXNwZW5kX3R4KHN0cnVjdCBpc2NzaV9jb25uICpjb25uKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDE5MmY4NzEuLmExMDkxNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtMzgxLDYgKzM4MSwxMSBAQAogI2RlZmluZSBESURfSU1NX1JFVFJZICAgMHgwYwkvKiBSZXRyeSB3aXRob3V0IGRlY3JlbWVudGluZyByZXRyeSBjb3VudCAgKi8KICNkZWZpbmUgRElEX1JFUVVFVUUJMHgwZAkvKiBSZXF1ZXVlIGNvbW1hbmQgKG5vIGltbWVkaWF0ZSByZXRyeSkgYWxzbwogCQkJCSAqIHdpdGhvdXQgZGVjcmVtZW50aW5nIHRoZSByZXRyeSBjb3VudAkgICAqLworI2RlZmluZSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCAweDBlIC8qIFRyYW5zcG9ydCBlcnJvciBkaXNydXB0ZWQgZXhlY3V0aW9uCisJCQkJICAgICAgKiBhbmQgdGhlIGRyaXZlciBibG9ja2VkIHRoZSBwb3J0IHRvCisJCQkJICAgICAgKiByZWNvdmVyIHRoZSBsaW5rLiBUcmFuc3BvcnQgY2xhc3Mgd2lsbAorCQkJCSAgICAgICogcmV0cnkgb3IgZmFpbCBJTyAqLworI2RlZmluZSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUCTB4MGYgLyogVHJhbnNwb3J0IGNsYXNzIGZhc3RmYWlsZWQgdGhlIGlvICovCiAjZGVmaW5lIERSSVZFUl9PSyAgICAgICAweDAwCS8qIERyaXZlciBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAvKgpAQCAtNDI2LDYgKzQzMSw3IEBACiAjZGVmaW5lIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kgICAweDEwNTUKICNkZWZpbmUgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZIDB4MTA1NgogI2RlZmluZSBTQ1NJX01MUVVFVUVfRUhfUkVUUlkgICAgMHgxMDU3CisjZGVmaW5lIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSAweDEwNTgKIAogLyoKICAqICBVc2UgdGhlc2UgdG8gc2VwYXJhdGUgc3RhdHVzIG1zZyBhbmQgb3VyIGJ5dGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IGI0OWU3MjUuLmEzN2E4MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0yMzgsNiArMjM4LDE2IEBACiAJCQkJCQkgKiBmb3IgdGhlIGRldmljZSBhdCBhIHRpbWUuICovCiAJdW5zaWduZWQgaW50CQlwZHRfMWZfZm9yX25vX2x1bjsJLyogUERUID0gMHgxZiAqLwogCQkJCQkJLyogbWVhbnMgbm8gbHVuIHByZXNlbnQgKi8KKwkvKiBjb21tYW5kcyBhY3R1YWxseSBhY3RpdmUgb24gTExELiBwcm90ZWN0ZWQgYnkgaG9zdCBsb2NrLiAqLworCXVuc2lnbmVkIGludAkJdGFyZ2V0X2J1c3k7CisJLyoKKwkgKiBMTERzIHNob3VsZCBzZXQgdGhpcyBpbiB0aGUgc2xhdmVfYWxsb2MgaG9zdCB0ZW1wbGF0ZSBjYWxsb3V0LgorCSAqIElmIHNldCB0byB6ZXJvIHRoZW4gdGhlcmUgaXMgbm90IGxpbWl0LgorCSAqLworCXVuc2lnbmVkIGludAkJY2FuX3F1ZXVlOworCXVuc2lnbmVkIGludAkJdGFyZ2V0X2Jsb2NrZWQ7CisJdW5zaWduZWQgaW50CQltYXhfdGFyZ2V0X2Jsb2NrZWQ7CisjZGVmaW5lIFNDU0lfREVGQVVMVF9UQVJHRVRfQkxPQ0tFRAkzCiAKIAljaGFyCQkJc2NzaV9sZXZlbDsKIAlzdHJ1Y3QgZXhlY3V0ZV93b3JrCWV3OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKaW5kZXggZWRiOTUyNS4uYjkwMDY4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9pb2N0bC5oCkBAIC00Miw3ICs0Miw3IEBACiAKIGV4dGVybiBpbnQgc2NzaV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCB2b2lkIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgY21kLAotCQkJCSAgIHZvaWQgX191c2VyICphcmcsIHN0cnVjdCBmaWxlICpmaWxwKTsKKwkJCQkgICB2b2lkIF9fdXNlciAqYXJnLCBpbnQgbmRlbGF5KTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfU0NTSV9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IDIxMDE4YTQuLjQ5ZDg5MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0zNTcsNiArMzU3LDcgQEAKIC8qIGJpdCBmaWVsZCB2YWx1ZXMgZm9yIHN0cnVjdCBmY19ycG9ydCAiZmxhZ3MiIGZpZWxkOiAqLwogI2RlZmluZSBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcJMHgwMQogI2RlZmluZSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcJCTB4MDIKKyNkZWZpbmUgRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUCTB4MDMKIAogI2RlZmluZQlkZXZfdG9fcnBvcnQoZCkJCQkJXAogCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZmNfcnBvcnQsIGRldikKQEAgLTY3OCwxMiArNjc5LDE1IEBACiAJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19QT1JUX1JPTEVfRkNQX1RBUkdFVCkKIAkJCXJlc3VsdCA9IDA7CiAJCWVsc2UgaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykKLQkJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJZWxzZQogCQkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCWJyZWFrOwogCWNhc2UgRkNfUE9SVFNUQVRFX0JMT0NLRUQ6Ci0JCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQpCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2OworCQllbHNlCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCmluZGV4IDhiNmM5MWQuLmM2NjdjYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCkBAIC0xMzUsNyArMTM1LDggQEAKIC8qCiAgKiBjb250cm9sIHBsYW5lIHVwY2FsbHMKICAqLwotZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9lcnJvcihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKK2V4dGVybiB2b2lkIGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLAorCQkJCSAgIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKIGV4dGVybiBpbnQgaXNjc2lfcmVjdl9wZHUoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCiAJCQkgIGNoYXIgKmRhdGEsIHVpbnQzMl90IGRhdGFfc2l6ZSk7CiAKQEAgLTIwNyw3ICsyMDgsNyBAQAogc3RydWN0IGlzY3NpX2VuZHBvaW50IHsKIAl2b2lkICpkZF9kYXRhOwkJCS8qIExMRCBwcml2YXRlIGRhdGEgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsKLQl1bnNpZ25lZCBpbnQgaWQ7CisJdWludDY0X3QgaWQ7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9zY2hlZC5oIGIvaW5jbHVkZS90cmFjZS9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDczNjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3NjaGVkLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfVFJBQ0VfU0NIRURfSAorI2RlZmluZSBfVFJBQ0VfU0NIRURfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK0RFRklORV9UUkFDRShzY2hlZF9rdGhyZWFkX3N0b3AsCisJVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpLAorCQlUUEFSR1ModCkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfa3RocmVhZF9zdG9wX3JldCwKKwlUUFBST1RPKGludCByZXQpLAorCQlUUEFSR1MocmV0KSk7CisKK0RFRklORV9UUkFDRShzY2hlZF93YWl0X3Rhc2ssCisJVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCQlUUEFSR1MocnEsIHApKTsKKworREVGSU5FX1RSQUNFKHNjaGVkX3dha2V1cCwKKwlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJCVRQQVJHUyhycSwgcCkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfd2FrZXVwX25ldywKKwlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJCVRQQVJHUyhycSwgcCkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfc3dpdGNoLAorCVRQUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpLAorCQlUUEFSR1MocnEsIHByZXYsIG5leHQpKTsKKworREVGSU5FX1RSQUNFKHNjaGVkX21pZ3JhdGVfdGFzaywKKwlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGRlc3RfY3B1KSwKKwkJVFBBUkdTKHJxLCBwLCBkZXN0X2NwdSkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfcHJvY2Vzc19mcmVlLAorCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKKwkJVFBBUkdTKHApKTsKKworREVGSU5FX1RSQUNFKHNjaGVkX3Byb2Nlc3NfZXhpdCwKKwlUUFBST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJCVRQQVJHUyhwKSk7CisKK0RFRklORV9UUkFDRShzY2hlZF9wcm9jZXNzX3dhaXQsCisJVFBQUk9UTyhzdHJ1Y3QgcGlkICpwaWQpLAorCQlUUEFSR1MocGlkKSk7CisKK0RFRklORV9UUkFDRShzY2hlZF9wcm9jZXNzX2ZvcmssCisJVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCksCisJCVRQQVJHUyhwYXJlbnQsIGNoaWxkKSk7CisKK0RFRklORV9UUkFDRShzY2hlZF9zaWduYWxfc2VuZCwKKwlUUFBST1RPKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJCVRQQVJHUyhzaWcsIHApKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmggYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0YmM2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaApAQCAtMCwwICsxLDc4IEBACisjaWZuZGVmIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXworI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKK2VudW0geyBSR0I4LCAgIC8qIDI0YnBwLCA4Ojg6OCAqLworICAgICAgIFJHQjksICAgLyogMThicHAsIDk6OSAqLworICAgICAgIFJHQjEyQSwgLyogMjRicHAsIDEyOjEyICovCisgICAgICAgUkdCMTJCLCAvKiAxMmJwcCAqLworICAgICAgIFJHQjE2LCAgLyogMTZicHAgKi8KKyAgICAgICBSR0IxOCwgIC8qIDE4YnBwICovCisgICAgICAgUkdCMjQsICAvKiAyNGJwcCAqLworICAgICAgIFNZUzhBLCAgLyogMjRicHAsIDg6ODo4ICovCisgICAgICAgU1lTOEIsICAvKiAxOGJwcCwgODo4OjIgKi8KKyAgICAgICBTWVM4QywgIC8qIDE4YnBwLCAyOjg6OCAqLworICAgICAgIFNZUzhELCAgLyogMTZicHAsIDg6OCAqLworICAgICAgIFNZUzksICAgLyogMThicHAsIDk6OSAqLworICAgICAgIFNZUzEyLCAgLyogMjRicHAsIDEyOjEyICovCisgICAgICAgU1lTMTZBLCAvKiAxNmJwcCAqLworICAgICAgIFNZUzE2QiwgLyogMThicHAsIDE2OjIgKi8KKyAgICAgICBTWVMxNkMsIC8qIDE4YnBwLCAyOjE2ICovCisgICAgICAgU1lTMTgsICAvKiAxOGJwcCAqLworICAgICAgIFNZUzI0IH07LyogMjRicHAgKi8KKworZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCisgICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCisgICAgICAgTENEQ19DSEFOX1NVQkxDRCB9OworCitlbnVtIHsgTENEQ19DTEtfQlVTLCBMQ0RDX0NMS19QRVJJUEhFUkFMLCBMQ0RDX0NMS19FWFRFUk5BTCB9OworCisjZGVmaW5lIExDRENfRkxBR1NfRFdQT0wgKDEgPDwgMCkgLyogUmlzaW5nIGVkZ2UgZG90IGNsb2NrIGRhdGEgbGF0Y2ggKi8KKyNkZWZpbmUgTENEQ19GTEFHU19ESVBPTCAoMSA8PCAxKSAvKiBBY3RpdmUgbG93IGRpc3BsYXkgZW5hYmxlIHBvbGFyaXR5ICovCisjZGVmaW5lIExDRENfRkxBR1NfREFQT0wgKDEgPDwgMikgLyogQWN0aXZlIGxvdyBkaXNwbGF5IGRhdGEgcG9sYXJpdHkgKi8KKyNkZWZpbmUgTENEQ19GTEFHU19IU0NOVCAoMSA8PCAzKSAvKiBEaXNhYmxlIEhTWU5DIGR1cmluZyBWQkxBTksgKi8KKyNkZWZpbmUgTENEQ19GTEFHU19EV0NOVCAoMSA8PCA0KSAvKiBEaXNhYmxlIGRvdGNsb2NrIGR1cmluZyBibGFua2luZyAqLworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19jZmcgeworCXVuc2lnbmVkIGxvbmcgbGRtdDJyOworCXVuc2lnbmVkIGxvbmcgbGRtdDNyOworfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzIHsKKwl2b2lkICgqd3JpdGVfaW5kZXgpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKKwl2b2lkICgqd3JpdGVfZGF0YSkodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBsb25nIGRhdGEpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2RhdGEpKHZvaWQgKmhhbmRsZSk7Cit9OworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnIHsKKwl2b2lkICpib2FyZF9kYXRhOworCWludCAoKnNldHVwX3N5cykodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKKwl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7CisJdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgeyAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHBhbmVsIGluIG1tICovCisJdW5zaWduZWQgbG9uZyB3aWR0aDsKKwl1bnNpZ25lZCBsb25nIGhlaWdodDsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyB7CisJaW50IGNoYW47CisJaW50IGJwcDsKKwlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCisJaW50IGNsb2NrX2RpdmlkZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogTENEQ19GTEFHU18uLi4gKi8KKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGxjZF9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2xjZF9zaXplX2NmZyBsY2Rfc2l6ZV9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZyBib2FyZF9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfY2ZnIHN5c19idXNfY2ZnOyAvKiBvbmx5IGZvciBTWVNuIEkvRiAqLworfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8geworCWludCBjbG9ja19zb3VyY2U7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnIGNoWzJdOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDVjZWZmMzIuLjQ0ZTkyMDggMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5OSw2ICsyOTksMTMgQEAKICAgICAgICAgICBmb3IgaW5zdGFuY2UgdmlydHVhbCBzZXJ2ZXJzIGFuZCBjaGVja3BvaW50L3Jlc3RhcnQKICAgICAgICAgICBqb2JzLgogCitjb25maWcgQ0dST1VQX0ZSRUVaRVIKKyAgICAgICAgYm9vbCAiY29udHJvbCBncm91cCBmcmVlemVyIHN1YnN5c3RlbSIKKyAgICAgICAgZGVwZW5kcyBvbiBDR1JPVVBTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBQcm92aWRlcyBhIHdheSB0byBmcmVlemUgYW5kIHVuZnJlZXplIGFsbCB0YXNrcyBpbiBhCisJICBjZ3JvdXAuCisKIGNvbmZpZyBDR1JPVVBfREVWSUNFCiAJYm9vbCAiRGV2aWNlIGNvbnRyb2xsZXIgZm9yIGNncm91cHMiCiAJZGVwZW5kcyBvbiBDR1JPVVBTICYmIEVYUEVSSU1FTlRBTApAQCAtNzMwLDYgKzczNywxNSBAQAogCSAgb24gRU1CRURERUQgc3lzdGVtcy4gIC9wcm9jL3Ztc3RhdCB3aWxsIG9ubHkgc2hvdyBwYWdlIGNvdW50cwogCSAgaWYgVk0gZXZlbnQgY291bnRlcnMgYXJlIGRpc2FibGVkLgogCitjb25maWcgUENJX1FVSVJLUworCWRlZmF1bHQgeQorCWJvb2wgIkVuYWJsZSBQQ0kgcXVpcmsgd29ya2Fyb3VuZHMiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgd29ya2Fyb3VuZHMgZm9yIHZhcmlvdXMgUENJIGNoaXBzZXQKKyAgICAgICAgICBidWdzL3F1aXJrcy4gRGlzYWJsZSB0aGlzIG9ubHkgaWYgeW91ciB0YXJnZXQgbWFjaGluZSBpcworICAgICAgICAgIHVuYWZmZWN0ZWQgYnkgUENJIHF1aXJrcy4KKwogY29uZmlnIFNMVUJfREVCVUcKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgU0xVQiBkZWJ1Z2dpbmcgc3VwcG9ydCIgaWYgRU1CRURERUQKQEAgLTc3OSw2ICs3OTUsMTMgQEAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBleHRlbmRlZCBwcm9maWxpbmcgc3VwcG9ydCBtZWNoYW5pc21zIHVzZWQKIAkgIGJ5IHByb2ZpbGVycyBzdWNoIGFzIE9Qcm9maWxlLgogCisjCisjIFBsYWNlIGFuIGVtcHR5IGZ1bmN0aW9uIGNhbGwgYXQgZWFjaCB0cmFjZXBvaW50IHNpdGUuIENhbiBiZQorIyBkeW5hbWljYWxseSBjaGFuZ2VkIGZvciBhIHByb2JlIGZ1bmN0aW9uLgorIworY29uZmlnIFRSQUNFUE9JTlRTCisJYm9vbAorCiBjb25maWcgTUFSS0VSUwogCWJvb2wgIkFjdGl2YXRlIG1hcmtlcnMiCiAJaGVscApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCAyN2Y2YmY2Li4xMzBkMWEwIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGFydF9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpAQCAtNTEsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vud2luZC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KQEAgLTYwLDYgKzYyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J1Z3MuaD4KQEAgLTY0Miw4ICs2NDUsMTAgQEAKIAkJaW5pdHJkX3N0YXJ0ID0gMDsKIAl9CiAjZW5kaWYKKwl2bWFsbG9jX2luaXQoKTsKIAl2ZnNfY2FjaGVzX2luaXRfZWFybHkoKTsKIAljcHVzZXRfaW5pdF9lYXJseSgpOworCXBhZ2VfY2dyb3VwX2luaXQoKTsKIAltZW1faW5pdCgpOwogCWVuYWJsZV9kZWJ1Z19wYWdlYWxsb2MoKTsKIAljcHVfaG90cGx1Z19pbml0KCk7CkBAIC02NjcsNyArNjcyLDYgQEAKIAlmb3JrX2luaXQobnVtX3BoeXNwYWdlcyk7CiAJcHJvY19jYWNoZXNfaW5pdCgpOwogCWJ1ZmZlcl9pbml0KCk7Ci0JdW5uYW1lZF9kZXZfaW5pdCgpOwogCWtleV9pbml0KCk7CiAJc2VjdXJpdHlfaW5pdCgpOwogCXZmc19jYWNoZXNfaW5pdChudW1fcGh5c3BhZ2VzKTsKQEAgLTY4Nyw0NiArNjkxLDQzIEBACiAKIAlhY3BpX2Vhcmx5X2luaXQoKTsgLyogYmVmb3JlIExBUElDIGFuZCBTTVAgaW5pdCAqLwogCisJZnRyYWNlX2luaXQoKTsKKwogCS8qIERvIHRoZSByZXN0IG5vbi1fX2luaXQnZWQsIHdlJ3JlIG5vdyBhbGl2ZSAqLwogCXJlc3RfaW5pdCgpOwogfQogCiBzdGF0aWMgaW50IGluaXRjYWxsX2RlYnVnOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0Y2FsbF9kZWJ1Z19zZXR1cChjaGFyICpzdHIpCi17Ci0JaW5pdGNhbGxfZGVidWcgPSAxOwotCXJldHVybiAxOwotfQotX19zZXR1cCgiaW5pdGNhbGxfZGVidWciLCBpbml0Y2FsbF9kZWJ1Z19zZXR1cCk7Citjb3JlX3BhcmFtKGluaXRjYWxsX2RlYnVnLCBpbml0Y2FsbF9kZWJ1ZywgYm9vbCwgMDY0NCk7CiAKIGludCBkb19vbmVfaW5pdGNhbGwoaW5pdGNhbGxfdCBmbikKIHsKIAlpbnQgY291bnQgPSBwcmVlbXB0X2NvdW50KCk7Ci0Ja3RpbWVfdCB0MCwgdDEsIGRlbHRhOworCWt0aW1lX3QgZGVsdGE7CiAJY2hhciBtc2didWZbNjRdOwotCWludCByZXN1bHQ7CisJc3RydWN0IGJvb3RfdHJhY2UgaXQ7CiAKIAlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJcHJpbnRrKCJjYWxsaW5nICAlcEYgQCAlaVxuIiwgZm4sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQkJdDAgPSBrdGltZV9nZXQoKTsKKwkJaXQuY2FsbGVyID0gdGFza19waWRfbnIoY3VycmVudCk7CisJCXByaW50aygiY2FsbGluZyAgJXBGIEAgJWlcbiIsIGZuLCBpdC5jYWxsZXIpOworCQlpdC5jYWxsdGltZSA9IGt0aW1lX2dldCgpOwogCX0KIAotCXJlc3VsdCA9IGZuKCk7CisJaXQucmVzdWx0ID0gZm4oKTsKIAogCWlmIChpbml0Y2FsbF9kZWJ1ZykgewotCQl0MSA9IGt0aW1lX2dldCgpOwotCQlkZWx0YSA9IGt0aW1lX3N1Yih0MSwgdDApOwotCi0JCXByaW50aygiaW5pdGNhbGwgJXBGIHJldHVybmVkICVkIGFmdGVyICVMZCBtc2Vjc1xuIiwKLQkJCWZuLCByZXN1bHQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBkZWx0YS50djY0ID4+IDIwKTsKKwkJaXQucmV0dGltZSA9IGt0aW1lX2dldCgpOworCQlkZWx0YSA9IGt0aW1lX3N1YihpdC5yZXR0aW1lLCBpdC5jYWxsdGltZSk7CisJCWl0LmR1cmF0aW9uID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgZGVsdGEudHY2NCA+PiAxMDsKKwkJcHJpbnRrKCJpbml0Y2FsbCAlcEYgcmV0dXJuZWQgJWQgYWZ0ZXIgJUxkIHVzZWNzXG4iLCBmbiwKKwkJCWl0LnJlc3VsdCwgaXQuZHVyYXRpb24pOworCQl0cmFjZV9ib290KCZpdCwgZm4pOwogCX0KIAogCW1zZ2J1ZlswXSA9IDA7CiAKLQlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWICYmIGluaXRjYWxsX2RlYnVnKQotCQlzcHJpbnRmKG1zZ2J1ZiwgImVycm9yIGNvZGUgJWQgIiwgcmVzdWx0KTsKKwlpZiAoaXQucmVzdWx0ICYmIGl0LnJlc3VsdCAhPSAtRU5PREVWICYmIGluaXRjYWxsX2RlYnVnKQorCQlzcHJpbnRmKG1zZ2J1ZiwgImVycm9yIGNvZGUgJWQgIiwgaXQucmVzdWx0KTsKIAogCWlmIChwcmVlbXB0X2NvdW50KCkgIT0gY291bnQpIHsKIAkJc3RybGNhdChtc2didWYsICJwcmVlbXB0aW9uIGltYmFsYW5jZSAiLCBzaXplb2YobXNnYnVmKSk7CkBAIC03NDAsNyArNzQxLDcgQEAKIAkJcHJpbnRrKCJpbml0Y2FsbCAlcEYgcmV0dXJuZWQgd2l0aCAlc1xuIiwgZm4sIG1zZ2J1Zik7CiAJfQogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gaXQucmVzdWx0OwogfQogCiAKQEAgLTc2Nyw4ICs3NjgsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IGRvX2Jhc2ljX3NldHVwKHZvaWQpCiB7CiAJcmN1X2luaXRfc2NoZWQoKTsgLyogbmVlZGVkIGJ5IG1vZHVsZV9pbml0IHN0YWdlLiAqLwotCS8qIGRyaXZlcnMgd2lsbCBzZW5kIGhvdHBsdWcgZXZlbnRzICovCi0JaW5pdF93b3JrcXVldWVzKCk7CiAJdXNlcm1vZGVoZWxwZXJfaW5pdCgpOwogCWRyaXZlcl9pbml0KCk7CiAJaW5pdF9pcnFfcHJvYygpOwpAQCAtODUyLDkgKzg1MSwxMiBAQAogCiAJY2FkX3BpZCA9IHRhc2tfcGlkKGN1cnJlbnQpOwogCisJaW5pdF93b3JrcXVldWVzKCk7CisKIAlzbXBfcHJlcGFyZV9jcHVzKHNldHVwX21heF9jcHVzKTsKIAogCWRvX3ByZV9zbXBfaW5pdGNhbGxzKCk7CisJc3RhcnRfYm9vdF90cmFjZSgpOwogCiAJc21wX2luaXQoKTsKIAlzY2hlZF9pbml0X3NtcCgpOwpAQCAtODgxLDYgKzg4Myw3IEBACiAJICogd2UncmUgZXNzZW50aWFsbHkgdXAgYW5kIHJ1bm5pbmcuIEdldCByaWQgb2YgdGhlCiAJICogaW5pdG1lbSBzZWdtZW50cyBhbmQgc3RhcnQgdGhlIHVzZXItbW9kZSBzdHVmZi4uCiAJICovCisJc3RvcF9ib290X3RyYWNlKCk7CiAJaW5pdF9wb3N0KCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggOTZmYjM2Yy4uNjhlYjg1NyAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtNTIsNiArNTIsMTQgQEAKICNkZWZpbmUgSEFSRF9NU0dNQVggCSgxMzEwNzIvc2l6ZW9mKHZvaWQqKSkKICNkZWZpbmUgREZMVF9NU0dTSVpFTUFYIDgxOTIJLyogbWF4IG1lc3NhZ2Ugc2l6ZSAqLwogCisvKgorICogRGVmaW5lIHRoZSByYW5nZXMgdmFyaW91cyB1c2VyLXNwZWNpZmllZCBtYXhpbXVtIHZhbHVlcyBjYW4KKyAqIGJlIHNldCB0by4KKyAqLworI2RlZmluZSBNSU5fTVNHTUFYCTEJCS8qIG1pbiB2YWx1ZSBmb3IgbXNnX21heCAqLworI2RlZmluZSBNQVhfTVNHTUFYCUhBUkRfTVNHTUFYCS8qIG1heCB2YWx1ZSBmb3IgbXNnX21heCAqLworI2RlZmluZSBNSU5fTVNHU0laRU1BWAkxMjgJCS8qIG1pbiB2YWx1ZSBmb3IgbXNnc2l6ZV9tYXggKi8KKyNkZWZpbmUgTUFYX01TR1NJWkVNQVgJKDgxOTIqMTI4KQkvKiBtYXggdmFsdWUgZm9yIG1zZ3NpemVfbWF4ICovCiAKIHN0cnVjdCBleHRfd2FpdF9xdWV1ZSB7CQkvKiBxdWV1ZSBvZiBzbGVlcGluZyB0YXNrcyAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKQEAgLTEzNCw4ICsxNDIsOCBAQAogCQkJaW5mby0+cXNpemUgPSAwOwogCQkJaW5mby0+dXNlciA9IE5VTEw7CS8qIHNldCB3aGVuIGFsbCBpcyBvayAqLwogCQkJbWVtc2V0KCZpbmZvLT5hdHRyLCAwLCBzaXplb2YoaW5mby0+YXR0cikpOwotCQkJaW5mby0+YXR0ci5tcV9tYXhtc2cgPSBERkxUX01TR01BWDsKLQkJCWluZm8tPmF0dHIubXFfbXNnc2l6ZSA9IERGTFRfTVNHU0laRU1BWDsKKwkJCWluZm8tPmF0dHIubXFfbWF4bXNnID0gbXNnX21heDsKKwkJCWluZm8tPmF0dHIubXFfbXNnc2l6ZSA9IG1zZ3NpemVfbWF4OwogCQkJaWYgKGF0dHIpIHsKIAkJCQlpbmZvLT5hdHRyLm1xX21heG1zZyA9IGF0dHItPm1xX21heG1zZzsKIAkJCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBhdHRyLT5tcV9tc2dzaXplOwpAQCAtMTE5MSwxMSArMTE5OSwxMSBAQAogCS5raWxsX3NiID0ga2lsbF9saXR0ZXJfc3VwZXIsCiB9OwogCi1zdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWluID0gREZMVF9NU0dNQVg7Ci1zdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWF4ID0gSEFSRF9NU0dNQVg7CitzdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWluID0gTUlOX01TR01BWDsKK3N0YXRpYyBpbnQgbXNnX21heF9saW1pdF9tYXggPSBNQVhfTVNHTUFYOwogCi1zdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21pbiA9IERGTFRfTVNHU0laRU1BWDsKLXN0YXRpYyBpbnQgbXNnX21heHNpemVfbGltaXRfbWF4ID0gSU5UX01BWDsKK3N0YXRpYyBpbnQgbXNnX21heHNpemVfbGltaXRfbWluID0gTUlOX01TR1NJWkVNQVg7CitzdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21heCA9IE1BWF9NU0dTSVpFTUFYOwogCiBzdGF0aWMgY3RsX3RhYmxlIG1xX3N5c2N0bHNbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggZTc3ZWM2OTguLjg2N2U1ZDYgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTczNyw2ICs3MzcsMTAgQEAKIAljYXNlIFNITV9MT0NLOgogCWNhc2UgU0hNX1VOTE9DSzoKIAl7CisJCXN0cnVjdCBmaWxlICp1bmluaXRpYWxpemVkX3ZhcihzaG1fZmlsZSk7CisKKwkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsgIC8qIGRyYWluIHBhZ2V2ZWNzIHRvIGxydSBsaXN0cyAqLworCiAJCXNocCA9IHNobV9sb2NrX2NoZWNrKG5zLCBzaG1pZCk7CiAJCWlmIChJU19FUlIoc2hwKSkgewogCQkJZXJyID0gUFRSX0VSUihzaHApOwpAQCAtODEzLDcgKzgxNyw3IEBACiAJc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zOwogCXN0cnVjdCBzaG1fZmlsZV9kYXRhICpzZmQ7CiAJc3RydWN0IHBhdGggcGF0aDsKLQltb2RlX3QgZl9tb2RlOworCWZtb2RlX3QgZl9tb2RlOwogCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoc2htaWQgPCAwKQpkaWZmIC0tZ2l0IGEva2VybmVsL0tjb25maWcuZnJlZXplciBiL2tlcm5lbC9LY29uZmlnLmZyZWV6ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiYjRjYgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9LY29uZmlnLmZyZWV6ZXIKQEAgLTAsMCArMSwyIEBACitjb25maWcgRlJFRVpFUgorCWRlZl9ib29sIFBNX1NMRUVQIHx8IENHUk9VUF9GUkVFWkVSCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNGUxZDdkZi4uMzA1ZjExZCAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQAogQ0ZMQUdTX1JFTU9WRV9zY2hlZC5vID0gLW1uby1zcGUgLXBnCiBlbmRpZgogCitvYmotJChDT05GSUdfRlJFRVpFUikgKz0gZnJlZXplci5vCiBvYmotJChDT05GSUdfUFJPRklMSU5HKSArPSBwcm9maWxlLm8KIG9iai0kKENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSykgKz0gc3lzY3RsX2NoZWNrLm8KIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKSArPSBzdGFja3RyYWNlLm8KQEAgLTU1LDYgKzU2LDcgQEAKIG9iai0kKENPTkZJR19DT01QQVQpICs9IGNvbXBhdC5vCiBvYmotJChDT05GSUdfQ0dST1VQUykgKz0gY2dyb3VwLm8KIG9iai0kKENPTkZJR19DR1JPVVBfREVCVUcpICs9IGNncm91cF9kZWJ1Zy5vCitvYmotJChDT05GSUdfQ0dST1VQX0ZSRUVaRVIpICs9IGNncm91cF9mcmVlemVyLm8KIG9iai0kKENPTkZJR19DUFVTRVRTKSArPSBjcHVzZXQubwogb2JqLSQoQ09ORklHX0NHUk9VUF9OUykgKz0gbnNfY2dyb3VwLm8KIG9iai0kKENPTkZJR19VVFNfTlMpICs9IHV0c25hbWUubwpAQCAtODMsNiArODUsNyBAQAogb2JqLSQoQ09ORklHX1RBU0tfREVMQVlfQUNDVCkgKz0gZGVsYXlhY2N0Lm8KIG9iai0kKENPTkZJR19UQVNLU1RBVFMpICs9IHRhc2tzdGF0cy5vIHRzYWNjdC5vCiBvYmotJChDT05GSUdfTUFSS0VSUykgKz0gbWFya2VyLm8KK29iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gdHJhY2Vwb2ludC5vCiBvYmotJChDT05GSUdfTEFURU5DWVRPUCkgKz0gbGF0ZW5jeXRvcC5vCiBvYmotJChDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCkgKz0gZG1hLWNvaGVyZW50Lm8KIG9iai0kKENPTkZJR19GVFJBQ0UpICs9IHRyYWNlLwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0X3RyZWUuYyBiL2tlcm5lbC9hdWRpdF90cmVlLmMKaW5kZXggZjc5MjFhMi4uOGJhMGUwZCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0X3RyZWUuYworKysgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCkBAIC01MzIsNyArNTMyLDcgQEAKIAlsaXN0X2FkZCgmY3Vyc29yLCAmdHJlZV9saXN0KTsKIAl3aGlsZSAoY3Vyc29yLm5leHQgIT0gJnRyZWVfbGlzdCkgewogCQlzdHJ1Y3QgYXVkaXRfdHJlZSAqdHJlZTsKLQkJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwkJc3RydWN0IHBhdGggcGF0aDsKIAkJc3RydWN0IHZmc21vdW50ICpyb290X21udDsKIAkJc3RydWN0IG5vZGUgKm5vZGU7CiAJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTU0NCwxMiArNTQ0LDEyIEBACiAJCWxpc3RfYWRkKCZjdXJzb3IsICZ0cmVlLT5saXN0KTsKIAkJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCi0JCWVyciA9IHBhdGhfbG9va3VwKHRyZWUtPnBhdGhuYW1lLCAwLCAmbmQpOworCQllcnIgPSBrZXJuX3BhdGgodHJlZS0+cGF0aG5hbWUsIDAsICZwYXRoKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gc2tpcF9pdDsKIAotCQlyb290X21udCA9IGNvbGxlY3RfbW91bnRzKG5kLnBhdGgubW50LCBuZC5wYXRoLmRlbnRyeSk7Ci0JCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwkJcm9vdF9tbnQgPSBjb2xsZWN0X21vdW50cyhwYXRoLm1udCwgcGF0aC5kZW50cnkpOworCQlwYXRoX3B1dCgmcGF0aCk7CiAJCWlmICghcm9vdF9tbnQpCiAJCQlnb3RvIHNraXBfaXQ7CiAKQEAgLTU4MCwxOSArNTgwLDE5IEBACiB9CiAKIHN0YXRpYyBpbnQgaXNfdW5kZXIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJICAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorCQkgICAgc3RydWN0IHBhdGggKnBhdGgpCiB7Ci0JaWYgKG1udCAhPSBuZC0+cGF0aC5tbnQpIHsKKwlpZiAobW50ICE9IHBhdGgtPm1udCkgewogCQlmb3IgKDs7KSB7CiAJCQlpZiAobW50LT5tbnRfcGFyZW50ID09IG1udCkKIAkJCQlyZXR1cm4gMDsKLQkJCWlmIChtbnQtPm1udF9wYXJlbnQgPT0gbmQtPnBhdGgubW50KQorCQkJaWYgKG1udC0+bW50X3BhcmVudCA9PSBwYXRoLT5tbnQpCiAJCQkJCWJyZWFrOwogCQkJbW50ID0gbW50LT5tbnRfcGFyZW50OwogCQl9CiAJCWRlbnRyeSA9IG1udC0+bW50X21vdW50cG9pbnQ7CiAJfQotCXJldHVybiBpc19zdWJkaXIoZGVudHJ5LCBuZC0+cGF0aC5kZW50cnkpOworCXJldHVybiBpc19zdWJkaXIoZGVudHJ5LCBwYXRoLT5kZW50cnkpOwogfQogCiBpbnQgYXVkaXRfbWFrZV90cmVlKHN0cnVjdCBhdWRpdF9rcnVsZSAqcnVsZSwgY2hhciAqcGF0aG5hbWUsIHUzMiBvcCkKQEAgLTYxOCw3ICs2MTgsNyBAQAogaW50IGF1ZGl0X2FkZF90cmVlX3J1bGUoc3RydWN0IGF1ZGl0X2tydWxlICpydWxlKQogewogCXN0cnVjdCBhdWRpdF90cmVlICpzZWVkID0gcnVsZS0+dHJlZSwgKnRyZWU7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCB2ZnNtb3VudCAqbW50LCAqcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IGVycjsKQEAgLTYzNywxMSArNjM3LDExIEBACiAJLyogZG8gbm90IHNldCBydWxlLT50cmVlIHlldCAqLwogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIAotCWVyciA9IHBhdGhfbG9va3VwKHRyZWUtPnBhdGhuYW1lLCAwLCAmbmQpOworCWVyciA9IGtlcm5fcGF0aCh0cmVlLT5wYXRobmFtZSwgMCwgJnBhdGgpOwogCWlmIChlcnIpCiAJCWdvdG8gRXJyOwotCW1udCA9IGNvbGxlY3RfbW91bnRzKG5kLnBhdGgubW50LCBuZC5wYXRoLmRlbnRyeSk7Ci0JcGF0aF9wdXQoJm5kLnBhdGgpOworCW1udCA9IGNvbGxlY3RfbW91bnRzKHBhdGgubW50LCBwYXRoLmRlbnRyeSk7CisJcGF0aF9wdXQoJnBhdGgpOwogCWlmICghbW50KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gRXJyOwpAQCAtNjkwLDI5ICs2OTAsMjkgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGN1cnNvciwgYmFycmllcjsKIAlpbnQgZmFpbGVkID0gMDsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBwYXRoIHBhdGg7CiAJc3RydWN0IHZmc21vdW50ICp0YWdnZWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlpbnQgZXJyOwogCi0JZXJyID0gcGF0aF9sb29rdXAobmV3LCAwLCAmbmQpOworCWVyciA9IGtlcm5fcGF0aChuZXcsIDAsICZwYXRoKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCXRhZ2dlZCA9IGNvbGxlY3RfbW91bnRzKG5kLnBhdGgubW50LCBuZC5wYXRoLmRlbnRyeSk7Ci0JcGF0aF9wdXQoJm5kLnBhdGgpOworCXRhZ2dlZCA9IGNvbGxlY3RfbW91bnRzKHBhdGgubW50LCBwYXRoLmRlbnRyeSk7CisJcGF0aF9wdXQoJnBhdGgpOwogCWlmICghdGFnZ2VkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IHBhdGhfbG9va3VwKG9sZCwgMCwgJm5kKTsKKwllcnIgPSBrZXJuX3BhdGgob2xkLCAwLCAmcGF0aCk7CiAJaWYgKGVycikgewogCQlkcm9wX2NvbGxlY3RlZF9tb3VudHModGFnZ2VkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JbW50ID0gbW50Z2V0KG5kLnBhdGgubW50KTsKLQlkZW50cnkgPSBkZ2V0KG5kLnBhdGguZGVudHJ5KTsKLQlwYXRoX3B1dCgmbmQucGF0aCk7CisJbW50ID0gbW50Z2V0KHBhdGgubW50KTsKKwlkZW50cnkgPSBkZ2V0KHBhdGguZGVudHJ5KTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAKIAlpZiAoZGVudHJ5ID09IHRhZ2dlZC0+bW50X3Jvb3QgJiYgZGVudHJ5ID09IG1udC0+bW50X3Jvb3QpCiAJCWZvbGxvd191cCgmbW50LCAmZGVudHJ5KTsKQEAgLTczMyw3ICs3MzMsNyBAQAogCQlsaXN0X2FkZCgmY3Vyc29yLCAmdHJlZS0+bGlzdCk7CiAJCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIAotCQllcnIgPSBwYXRoX2xvb2t1cCh0cmVlLT5wYXRobmFtZSwgMCwgJm5kKTsKKwkJZXJyID0ga2Vybl9wYXRoKHRyZWUtPnBhdGhuYW1lLCAwLCAmcGF0aCk7CiAJCWlmIChlcnIpIHsKIAkJCXB1dF90cmVlKHRyZWUpOwogCQkJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKQEAgLTc0MSwxNSArNzQxLDE1IEBACiAJCX0KIAogCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwotCQlpZiAoIWlzX3VuZGVyKG1udCwgZGVudHJ5LCAmbmQpKSB7CisJCWlmICghaXNfdW5kZXIobW50LCBkZW50cnksICZwYXRoKSkgewogCQkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwotCQkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQkJcGF0aF9wdXQoJnBhdGgpOwogCQkJcHV0X3RyZWUodHJlZSk7CiAJCQltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCQkJY29udGludWU7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwotCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJCXBhdGhfcHV0KCZwYXRoKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZsaXN0LCBtbnRfbGlzdCkgewogCQkJZmFpbGVkID0gdGFnX2NodW5rKHAtPm1udF9yb290LT5kX2lub2RlLCB0cmVlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCA4YzZlMWMxLi4wNDZjMTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0yNDEsNyArMjQxLDYgQEAKIAlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CiAJc3RydWN0IGNnX2Nncm91cF9saW5rICpzYXZlZF9saW5rOwogCi0Jd3JpdGVfbG9jaygmY3NzX3NldF9sb2NrKTsKIAlobGlzdF9kZWwoJmNnLT5obGlzdCk7CiAJY3NzX3NldF9jb3VudC0tOwogCkBAIC0yNTEsMTYgKzI1MCwyNSBAQAogCQlsaXN0X2RlbCgmbGluay0+Y2dycF9saW5rX2xpc3QpOwogCQlrZnJlZShsaW5rKTsKIAl9Ci0KLQl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcmVsZWFzZV9jc3Nfc2V0KHN0cnVjdCBrcmVmICprLCBpbnQgdGFza2V4aXQpCitzdGF0aWMgdm9pZCBfX3B1dF9jc3Nfc2V0KHN0cnVjdCBjc3Nfc2V0ICpjZywgaW50IHRhc2tleGl0KQogewogCWludCBpOwotCXN0cnVjdCBjc3Nfc2V0ICpjZyA9IGNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgY3NzX3NldCwgcmVmKTsKLQorCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGRvZXNuJ3QgaGl0IHplcm8gd2hpbGUgYW55IHJlYWRlcnMKKwkgKiBjYW4gc2VlIGl0LiBTaW1pbGFyIHRvIGF0b21pY19kZWNfYW5kX2xvY2soKSwgYnV0IGZvciBhbgorCSAqIHJ3bG9jaworCSAqLworCWlmIChhdG9taWNfYWRkX3VubGVzcygmY2ctPnJlZmNvdW50LCAtMSwgMSkpCisJCXJldHVybjsKKwl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOworCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmY2ctPnJlZmNvdW50KSkgeworCQl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CisJCXJldHVybjsKKwl9CiAJdW5saW5rX2Nzc19zZXQoY2cpOworCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CkBAIC0yNzYsMzIgKzI4NCwyMiBAQAogCWtmcmVlKGNnKTsKIH0KIAotc3RhdGljIHZvaWQgcmVsZWFzZV9jc3Nfc2V0KHN0cnVjdCBrcmVmICprKQotewotCV9fcmVsZWFzZV9jc3Nfc2V0KGssIDApOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX2Nzc19zZXRfdGFza2V4aXQoc3RydWN0IGtyZWYgKmspCi17Ci0JX19yZWxlYXNlX2Nzc19zZXQoaywgMSk7Ci19Ci0KIC8qCiAgKiByZWZjb3VudGVkIGdldC9wdXQgZm9yIGNzc19zZXQgb2JqZWN0cwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Nzc19zZXQoc3RydWN0IGNzc19zZXQgKmNnKQogewotCWtyZWZfZ2V0KCZjZy0+cmVmKTsKKwlhdG9taWNfaW5jKCZjZy0+cmVmY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Nzc19zZXQoc3RydWN0IGNzc19zZXQgKmNnKQogewotCWtyZWZfcHV0KCZjZy0+cmVmLCByZWxlYXNlX2Nzc19zZXQpOworCV9fcHV0X2Nzc19zZXQoY2csIDApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Nzc19zZXRfdGFza2V4aXQoc3RydWN0IGNzc19zZXQgKmNnKQogewotCWtyZWZfcHV0KCZjZy0+cmVmLCByZWxlYXNlX2Nzc19zZXRfdGFza2V4aXQpOworCV9fcHV0X2Nzc19zZXQoY2csIDEpOwogfQogCiAvKgpAQCAtNDI3LDcgKzQyNSw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWtyZWZfaW5pdCgmcmVzLT5yZWYpOworCWF0b21pY19zZXQoJnJlcy0+cmVmY291bnQsIDEpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPmNnX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmcmVzLT50YXNrcyk7CiAJSU5JVF9ITElTVF9OT0RFKCZyZXMtPmhsaXN0KTsKQEAgLTg3MCw2ICs4NjgsMTQgQEAKIAkucmVtb3VudF9mcyA9IGNncm91cF9yZW1vdW50LAogfTsKIAorc3RhdGljIHZvaWQgaW5pdF9jZ3JvdXBfaG91c2VrZWVwaW5nKHN0cnVjdCBjZ3JvdXAgKmNncnApCit7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPnNpYmxpbmcpOworCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jaGlsZHJlbik7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNzc19zZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+cmVsZWFzZV9saXN0KTsKKwlpbml0X3J3c2VtKCZjZ3JwLT5waWRzX211dGV4KTsKK30KIHN0YXRpYyB2b2lkIGluaXRfY2dyb3VwX3Jvb3Qoc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QpCiB7CiAJc3RydWN0IGNncm91cCAqY2dycCA9ICZyb290LT50b3BfY2dyb3VwOwpAQCAtODc4LDEwICs4ODQsNyBAQAogCXJvb3QtPm51bWJlcl9vZl9jZ3JvdXBzID0gMTsKIAljZ3JwLT5yb290ID0gcm9vdDsKIAljZ3JwLT50b3BfY2dyb3VwID0gY2dycDsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2libGluZyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNoaWxkcmVuKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y3NzX3NldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworCWluaXRfY2dyb3VwX2hvdXNla2VlcGluZyhjZ3JwKTsKIH0KIAogc3RhdGljIGludCBjZ3JvdXBfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhKQpAQCAtMTcyOCw3ICsxNzMxLDcgQEAKIAogCXJlYWRfbG9jaygmY3NzX3NldF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmssICZjZ3JwLT5jc3Nfc2V0cywgY2dycF9saW5rX2xpc3QpIHsKLQkJY291bnQgKz0gYXRvbWljX3JlYWQoJmxpbmstPmNnLT5yZWYucmVmY291bnQpOworCQljb3VudCArPSBhdG9taWNfcmVhZCgmbGluay0+Y2ctPnJlZmNvdW50KTsKIAl9CiAJcmVhZF91bmxvY2soJmNzc19zZXRfbG9jayk7CiAJcmV0dXJuIGNvdW50OwpAQCAtMTk5NywxNiArMjAwMCw3IEBACiAgKiBidXQgd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiB3ZSBwcm9kdWNlIGlzIGNvcnJlY3QKICAqIHVubGVzcyB3ZSBwcm9kdWNlIGl0IGVudGlyZWx5IGF0b21pY2FsbHkuCiAgKgotICogVXBvbiB0YXNrcyBmaWxlIG9wZW4oKSwgYSBzdHJ1Y3QgY3RyX3N0cnVjdCBpcyBhbGxvY2F0ZWQsIHRoYXQKLSAqIHdpbGwgaGF2ZSBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgKGFsc28gYWxsb2NhdGVkIGhlcmUpLiAgVGhlIHN0cnVjdAotICogY3RyX3N0cnVjdCAqIGlzIHN0b3JlZCBpbiBmaWxlLT5wcml2YXRlX2RhdGEuICBJdHMgcmVzb3VyY2VzIHdpbGwKLSAqIGJlIGZyZWVkIGJ5IHJlbGVhc2UoKSB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gIFRoZSBhcnJheSBpcyB1c2VkCi0gKiB0byBzcHJpbnRmIHRoZSBQSURzIGFuZCB0aGVuIHVzZWQgYnkgcmVhZCgpLgogICovCi1zdHJ1Y3QgY3RyX3N0cnVjdCB7Ci0JY2hhciAqYnVmOwotCWludCBidWZzejsKLX07CiAKIC8qCiAgKiBMb2FkIGludG8gJ3BpZGFycmF5JyB1cCB0byAnbnBpZHMnIG9mIHRoZSB0YXNrcyB1c2luZyBjZ3JvdXAKQEAgLTIwODgsNDEgKzIwODIsMTMxIEBACiAJcmV0dXJuICoocGlkX3QgKilhIC0gKihwaWRfdCAqKWI7CiB9CiAKLS8qCi0gKiBDb252ZXJ0IGFycmF5ICdhJyBvZiAnbnBpZHMnIHBpZF90J3MgdG8gYSBzdHJpbmcgb2YgbmV3bGluZSBzZXBhcmF0ZWQKLSAqIGRlY2ltYWwgcGlkcyBpbiAnYnVmJy4gIERvbid0IHdyaXRlIG1vcmUgdGhhbiAnc3onIGNoYXJzLCBidXQgcmV0dXJuCi0gKiBjb3VudCAnY250JyBvZiBob3cgbWFueSBjaGFycyB3b3VsZCBiZSB3cml0dGVuIGlmIGJ1ZiB3ZXJlIGxhcmdlIGVub3VnaC4KLSAqLwotc3RhdGljIGludCBwaWRfYXJyYXlfdG9fYnVmKGNoYXIgKmJ1ZiwgaW50IHN6LCBwaWRfdCAqYSwgaW50IG5waWRzKQotewotCWludCBjbnQgPSAwOwotCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG5waWRzOyBpKyspCi0JCWNudCArPSBzbnByaW50ZihidWYgKyBjbnQsIG1heChzeiAtIGNudCwgMCksICIlZFxuIiwgYVtpXSk7Ci0JcmV0dXJuIGNudDsKKy8qCisgKiBzZXFfZmlsZSBtZXRob2RzIGZvciB0aGUgInRhc2tzIiBmaWxlLiBUaGUgc2VxX2ZpbGUgcG9zaXRpb24gaXMgdGhlCisgKiBuZXh0IHBpZCB0byBkaXNwbGF5OyB0aGUgc2VxX2ZpbGUgaXRlcmF0b3IgaXMgYSBwb2ludGVyIHRvIHRoZSBwaWQKKyAqIGluIHRoZSBjZ3JvdXAtPnRhc2tzX3BpZHMgYXJyYXkuCisgKi8KKworc3RhdGljIHZvaWQgKmNncm91cF90YXNrc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQoreworCS8qCisJICogSW5pdGlhbGx5IHdlIHJlY2VpdmUgYSBwb3NpdGlvbiB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRvCisJICogb25lIG1vcmUgdGhhbiB0aGUgbGFzdCBwaWQgc2hvd24gKG9yIDAgb24gdGhlIGZpcnN0IGNhbGwgb3IKKwkgKiBhZnRlciBhIHNlZWsgdG8gdGhlIHN0YXJ0KS4gVXNlIGEgYmluYXJ5LXNlYXJjaCB0byBmaW5kIHRoZQorCSAqIG5leHQgcGlkIHRvIGRpc3BsYXksIGlmIGFueQorCSAqLworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzLT5wcml2YXRlOworCWludCBpbmRleCA9IDAsIHBpZCA9ICpwb3M7CisJaW50ICppdGVyOworCisJZG93bl9yZWFkKCZjZ3JwLT5waWRzX211dGV4KTsKKwlpZiAocGlkKSB7CisJCWludCBlbmQgPSBjZ3JwLT5waWRzX2xlbmd0aDsKKwkJaW50IGk7CisJCXdoaWxlIChpbmRleCA8IGVuZCkgeworCQkJaW50IG1pZCA9IChpbmRleCArIGVuZCkgLyAyOworCQkJaWYgKGNncnAtPnRhc2tzX3BpZHNbbWlkXSA9PSBwaWQpIHsKKwkJCQlpbmRleCA9IG1pZDsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoY2dycC0+dGFza3NfcGlkc1ttaWRdIDw9IHBpZCkKKwkJCQlpbmRleCA9IG1pZCArIDE7CisJCQllbHNlCisJCQkJZW5kID0gbWlkOworCQl9CisJfQorCS8qIElmIHdlJ3JlIG9mZiB0aGUgZW5kIG9mIHRoZSBhcnJheSwgd2UncmUgZG9uZSAqLworCWlmIChpbmRleCA+PSBjZ3JwLT5waWRzX2xlbmd0aCkKKwkJcmV0dXJuIE5VTEw7CisJLyogVXBkYXRlIHRoZSBhYnN0cmFjdCBwb3NpdGlvbiB0byBiZSB0aGUgYWN0dWFsIHBpZCB0aGF0IHdlIGZvdW5kICovCisJaXRlciA9IGNncnAtPnRhc2tzX3BpZHMgKyBpbmRleDsKKwkqcG9zID0gKml0ZXI7CisJcmV0dXJuIGl0ZXI7CiB9CiAKLS8qCi0gKiBIYW5kbGUgYW4gb3BlbiBvbiAndGFza3MnIGZpbGUuICBQcmVwYXJlIGEgYnVmZmVyIGxpc3RpbmcgdGhlCi0gKiBwcm9jZXNzIGlkJ3Mgb2YgdGFza3MgY3VycmVudGx5IGF0dGFjaGVkIHRvIHRoZSBjZ3JvdXAgYmVpbmcgb3BlbmVkLgotICoKLSAqIERvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpZmljIGNncm91cCBtdXRleGVzLCBhbmQgZG9lcyBub3QgdGFrZSBhbnkuCi0gKi8KLXN0YXRpYyBpbnQgY2dyb3VwX3Rhc2tzX29wZW4oc3RydWN0IGlub2RlICp1bnVzZWQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgY2dyb3VwX3Rhc2tzX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzLT5wcml2YXRlOworCXVwX3JlYWQoJmNncnAtPnBpZHNfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCAqY2dyb3VwX3Rhc2tzX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gcy0+cHJpdmF0ZTsKKwlpbnQgKnAgPSB2OworCWludCAqZW5kID0gY2dycC0+dGFza3NfcGlkcyArIGNncnAtPnBpZHNfbGVuZ3RoOworCisJLyoKKwkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHBpZCBpbiB0aGUgYXJyYXkuIElmIHRoaXMgZ29lcyBvZmYgdGhlCisJICogZW5kLCB3ZSdyZSBkb25lCisJICovCisJcCsrOworCWlmIChwID49IGVuZCkgeworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgeworCQkqcG9zID0gKnA7CisJCXJldHVybiBwOworCX0KK30KKworc3RhdGljIGludCBjZ3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJcmV0dXJuIHNlcV9wcmludGYocywgIiVkXG4iLCAqKGludCAqKXYpOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNncm91cF90YXNrc19zZXFfb3BlcmF0aW9ucyA9IHsKKwkuc3RhcnQgPSBjZ3JvdXBfdGFza3Nfc3RhcnQsCisJLnN0b3AgPSBjZ3JvdXBfdGFza3Nfc3RvcCwKKwkubmV4dCA9IGNncm91cF90YXNrc19uZXh0LAorCS5zaG93ID0gY2dyb3VwX3Rhc2tzX3Nob3csCit9OworCitzdGF0aWMgdm9pZCByZWxlYXNlX2Nncm91cF9waWRfYXJyYXkoc3RydWN0IGNncm91cCAqY2dycCkKK3sKKwlkb3duX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKKwlCVUdfT04oIWNncnAtPnBpZHNfdXNlX2NvdW50KTsKKwlpZiAoIS0tY2dycC0+cGlkc191c2VfY291bnQpIHsKKwkJa2ZyZWUoY2dycC0+dGFza3NfcGlkcyk7CisJCWNncnAtPnRhc2tzX3BpZHMgPSBOVUxMOworCQljZ3JwLT5waWRzX2xlbmd0aCA9IDA7CisJfQorCXVwX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKK30KKworc3RhdGljIGludCBjZ3JvdXBfdGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gX19kX2NncnAoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKLQlzdHJ1Y3QgY3RyX3N0cnVjdCAqY3RyOwotCXBpZF90ICpwaWRhcnJheTsKLQlpbnQgbnBpZHM7Ci0JY2hhciBjOwogCiAJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCiAJCXJldHVybiAwOwogCi0JY3RyID0ga21hbGxvYyhzaXplb2YoKmN0ciksIEdGUF9LRVJORUwpOwotCWlmICghY3RyKQotCQlnb3RvIGVycjA7CisJcmVsZWFzZV9jZ3JvdXBfcGlkX2FycmF5KGNncnApOworCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF90YXNrc19vcGVyYXRpb25zID0geworCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkud3JpdGUgPSBjZ3JvdXBfZmlsZV93cml0ZSwKKwkucmVsZWFzZSA9IGNncm91cF90YXNrc19yZWxlYXNlLAorfTsKKworLyoKKyAqIEhhbmRsZSBhbiBvcGVuIG9uICd0YXNrcycgZmlsZS4gIFByZXBhcmUgYW4gYXJyYXkgY29udGFpbmluZyB0aGUKKyAqIHByb2Nlc3MgaWQncyBvZiB0YXNrcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIGNncm91cCBiZWluZyBvcGVuZWQuCisgKi8KKworc3RhdGljIGludCBjZ3JvdXBfdGFza3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGNncm91cCAqY2dycCA9IF9fZF9jZ3JwKGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudCk7CisJcGlkX3QgKnBpZGFycmF5OworCWludCBucGlkczsKKwlpbnQgcmV0dmFsOworCisJLyogTm90aGluZyB0byBkbyBmb3Igd3JpdGUtb25seSBmaWxlcyAqLworCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCQlyZXR1cm4gMDsKIAogCS8qCiAJICogSWYgY2dyb3VwIGdldHMgbW9yZSB1c2VycyBhZnRlciB3ZSByZWFkIGNvdW50LCB3ZSB3b24ndCBoYXZlCkBAIC0yMTMxLDU3ICsyMjE1LDMxIEBACiAJICogc2hvdyB1cCB1bnRpbCBzb21ldGltZSBsYXRlciBvbi4KIAkgKi8KIAlucGlkcyA9IGNncm91cF90YXNrX2NvdW50KGNncnApOwotCWlmIChucGlkcykgewotCQlwaWRhcnJheSA9IGttYWxsb2MobnBpZHMgKiBzaXplb2YocGlkX3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwaWRhcnJheSkKLQkJCWdvdG8gZXJyMTsKKwlwaWRhcnJheSA9IGttYWxsb2MobnBpZHMgKiBzaXplb2YocGlkX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpZGFycmF5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlucGlkcyA9IHBpZF9hcnJheV9sb2FkKHBpZGFycmF5LCBucGlkcywgY2dycCk7CisJc29ydChwaWRhcnJheSwgbnBpZHMsIHNpemVvZihwaWRfdCksIGNtcHBpZCwgTlVMTCk7CiAKLQkJbnBpZHMgPSBwaWRfYXJyYXlfbG9hZChwaWRhcnJheSwgbnBpZHMsIGNncnApOwotCQlzb3J0KHBpZGFycmF5LCBucGlkcywgc2l6ZW9mKHBpZF90KSwgY21wcGlkLCBOVUxMKTsKKwkvKgorCSAqIFN0b3JlIHRoZSBhcnJheSBpbiB0aGUgY2dyb3VwLCBmcmVlaW5nIHRoZSBvbGQKKwkgKiBhcnJheSBpZiBuZWNlc3NhcnkKKwkgKi8KKwlkb3duX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKKwlrZnJlZShjZ3JwLT50YXNrc19waWRzKTsKKwljZ3JwLT50YXNrc19waWRzID0gcGlkYXJyYXk7CisJY2dycC0+cGlkc19sZW5ndGggPSBucGlkczsKKwljZ3JwLT5waWRzX3VzZV9jb3VudCsrOworCXVwX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKIAotCQkvKiBDYWxsIHBpZF9hcnJheV90b19idWYoKSB0d2ljZSwgZmlyc3QganVzdCB0byBnZXQgYnVmc3ogKi8KLQkJY3RyLT5idWZzeiA9IHBpZF9hcnJheV90b19idWYoJmMsIHNpemVvZihjKSwgcGlkYXJyYXksIG5waWRzKSArIDE7Ci0JCWN0ci0+YnVmID0ga21hbGxvYyhjdHItPmJ1ZnN6LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjdHItPmJ1ZikKLQkJCWdvdG8gZXJyMjsKLQkJY3RyLT5idWZzeiA9IHBpZF9hcnJheV90b19idWYoY3RyLT5idWYsIGN0ci0+YnVmc3osIHBpZGFycmF5LCBucGlkcyk7CisJZmlsZS0+Zl9vcCA9ICZjZ3JvdXBfdGFza3Nfb3BlcmF0aW9uczsKIAotCQlrZnJlZShwaWRhcnJheSk7Ci0JfSBlbHNlIHsKLQkJY3RyLT5idWYgPSBOVUxMOwotCQljdHItPmJ1ZnN6ID0gMDsKKwlyZXR2YWwgPSBzZXFfb3BlbihmaWxlLCAmY2dyb3VwX3Rhc2tzX3NlcV9vcGVyYXRpb25zKTsKKwlpZiAocmV0dmFsKSB7CisJCXJlbGVhc2VfY2dyb3VwX3BpZF9hcnJheShjZ3JwKTsKKwkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gY3RyOwotCXJldHVybiAwOwotCi1lcnIyOgotCWtmcmVlKHBpZGFycmF5KTsKLWVycjE6Ci0Ja2ZyZWUoY3RyKTsKLWVycjA6Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNncm91cF90YXNrc19yZWFkKHN0cnVjdCBjZ3JvdXAgKmNncnAsCi0JCQkJICAgIHN0cnVjdCBjZnR5cGUgKmNmdCwKLQkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkJICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgY3RyX3N0cnVjdCAqY3RyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBjdHItPmJ1ZiwgY3RyLT5idWZzeik7Ci19Ci0KLXN0YXRpYyBpbnQgY2dyb3VwX3Rhc2tzX3JlbGVhc2Uoc3RydWN0IGlub2RlICp1bnVzZWRfaW5vZGUsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBjdHJfc3RydWN0ICpjdHI7Ci0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQljdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCWtmcmVlKGN0ci0+YnVmKTsKLQkJa2ZyZWUoY3RyKTsKLQl9CisJKChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlID0gY2dycDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIxMCw3ICsyMjY4LDYgQEAKIAl7CiAJCS5uYW1lID0gInRhc2tzIiwKIAkJLm9wZW4gPSBjZ3JvdXBfdGFza3Nfb3BlbiwKLQkJLnJlYWQgPSBjZ3JvdXBfdGFza3NfcmVhZCwKIAkJLndyaXRlX3U2NCA9IGNncm91cF90YXNrc193cml0ZSwKIAkJLnJlbGVhc2UgPSBjZ3JvdXBfdGFza3NfcmVsZWFzZSwKIAkJLnByaXZhdGUgPSBGSUxFX1RBU0tMSVNULApAQCAtMjMwMCwxMCArMjM1Nyw3IEBACiAKIAltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCi0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPnNpYmxpbmcpOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jaGlsZHJlbik7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNzc19zZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+cmVsZWFzZV9saXN0KTsKKwlpbml0X2Nncm91cF9ob3VzZWtlZXBpbmcoY2dycCk7CiAKIAljZ3JwLT5wYXJlbnQgPSBwYXJlbnQ7CiAJY2dycC0+cm9vdCA9IHBhcmVudC0+cm9vdDsKQEAgLTI0OTUsOCArMjU0OSw3IEBACiBpbnQgX19pbml0IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpCiB7CiAJaW50IGk7Ci0Ja3JlZl9pbml0KCZpbml0X2Nzc19zZXQucmVmKTsKLQlrcmVmX2dldCgmaW5pdF9jc3Nfc2V0LnJlZik7CisJYXRvbWljX3NldCgmaW5pdF9jc3Nfc2V0LnJlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5pdF9jc3Nfc2V0LmNnX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5pdF9jc3Nfc2V0LnRhc2tzKTsKIAlJTklUX0hMSVNUX05PREUoJmluaXRfY3NzX3NldC5obGlzdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwX2RlYnVnLmMgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKaW5kZXggYzNkYzNhYi4uZGFjYTYyMCAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9jZ3JvdXBfZGVidWcuYwpAQCAtNTcsNyArNTcsNyBAQAogCXU2NCBjb3VudDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQljb3VudCA9IGF0b21pY19yZWFkKCZjdXJyZW50LT5jZ3JvdXBzLT5yZWYucmVmY291bnQpOworCWNvdW50ID0gYXRvbWljX3JlYWQoJmN1cnJlbnQtPmNncm91cHMtPnJlZmNvdW50KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05MCw3ICs5MCw3IEBACiAJewogCQkubmFtZSA9ICJyZWxlYXNhYmxlIiwKIAkJLnJlYWRfdTY0ID0gcmVsZWFzYWJsZV9yZWFkLAotCX0KKwl9LAogfTsKIAogc3RhdGljIGludCBkZWJ1Z19wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwX2ZyZWV6ZXIuYyBiL2tlcm5lbC9jZ3JvdXBfZnJlZXplci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NTA1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvY2dyb3VwX2ZyZWV6ZXIuYwpAQCAtMCwwICsxLDM3OSBAQAorLyoKKyAqIGNncm91cF9mcmVlemVyLmMgLSAgY29udHJvbCBncm91cCBmcmVlemVyIHN1YnN5c3RlbQorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqCisgKiBBdXRob3IgOiBDZWRyaWMgTGUgR29hdGVyIDxjbGdAZnIuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitlbnVtIGZyZWV6ZXJfc3RhdGUgeworCUNHUk9VUF9USEFXRUQgPSAwLAorCUNHUk9VUF9GUkVFWklORywKKwlDR1JPVVBfRlJPWkVOLAorfTsKKworc3RydWN0IGZyZWV6ZXIgeworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgc3RhdGU7CisJc3BpbmxvY2tfdCBsb2NrOyAvKiBwcm90ZWN0cyBfd3JpdGVzXyB0byBzdGF0ZSAqLworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJlZXplciAqY2dyb3VwX2ZyZWV6ZXIoCisJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKAorCQljZ3JvdXBfc3Vic3lzX3N0YXRlKGNncm91cCwgZnJlZXplcl9zdWJzeXNfaWQpLAorCQlzdHJ1Y3QgZnJlZXplciwgY3NzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJlZXplciAqdGFza19mcmVlemVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHRhc2ssIGZyZWV6ZXJfc3Vic3lzX2lkKSwKKwkJCSAgICBzdHJ1Y3QgZnJlZXplciwgY3NzKTsKK30KKworaW50IGNncm91cF9mcm96ZW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCWVudW0gZnJlZXplcl9zdGF0ZSBzdGF0ZTsKKworCXRhc2tfbG9jayh0YXNrKTsKKwlmcmVlemVyID0gdGFza19mcmVlemVyKHRhc2spOworCXN0YXRlID0gZnJlZXplci0+c3RhdGU7CisJdGFza191bmxvY2sodGFzayk7CisKKwlyZXR1cm4gc3RhdGUgPT0gQ0dST1VQX0ZST1pFTjsKK30KKworLyoKKyAqIGNncm91cHNfd3JpdGVfc3RyaW5nKCkgbGltaXRzIHRoZSBzaXplIG9mIGZyZWV6ZXIgc3RhdGUgc3RyaW5ncyB0bworICogQ0dST1VQX0xPQ0FMX0JVRkZFUl9TSVpFCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmcmVlemVyX3N0YXRlX3N0cnNbXSA9IHsKKwkiVEhBV0VEIiwKKwkiRlJFRVpJTkciLAorCSJGUk9aRU4iLAorfTsKKworLyoKKyAqIFN0YXRlIGRpYWdyYW0KKyAqIFRyYW5zaXRpb25zIGFyZSBjYXVzZWQgYnkgdXNlcnNwYWNlIHdyaXRlcyB0byB0aGUgZnJlZXplci5zdGF0ZSBmaWxlLgorICogVGhlIHZhbHVlcyBpbiBwYXJlbnRoZXNpcyBhcmUgc3RhdGUgbGFiZWxzLiBUaGUgcmVzdCBhcmUgZWRnZSBsYWJlbHMuCisgKgorICogKFRIQVdFRCkgLS1GUk9aRU4tLT4gKEZSRUVaSU5HKSAtLUZST1pFTi0tPiAoRlJPWkVOKQorICogICAgXiBeICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorICogICAgfCBcX19fX19fX1RIQVdFRF9fX19fX18vICAgICAgICAgICAgICAgICAgICAgfAorICogICAgXF9fX19fX19fX19fX19fX19fX19fX19fX19fVEhBV0VEX19fX19fX19fX19fLworICovCisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGZyZWV6ZXJfc3Vic3lzOworCisvKiBMb2NrcyB0YWtlbiBhbmQgdGhlaXIgb3JkZXJpbmcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogY3NzX3NldF9sb2NrCisgKiBjZ3JvdXBfbXV0ZXggKEFLQSBjZ3JvdXBfbG9jaykKKyAqIHRhc2stPmFsbG9jX2xvY2sgKEFLQSB0YXNrX2xvY2spCisgKiBmcmVlemVyLT5sb2NrCisgKiB0YXNrLT5zaWdoYW5kLT5zaWdsb2NrCisgKgorICogY2dyb3VwIGNvZGUgZm9yY2VzIGNzc19zZXRfbG9jayB0byBiZSB0YWtlbiBiZWZvcmUgdGFzay0+YWxsb2NfbG9jaworICoKKyAqIGZyZWV6ZXJfY3JlYXRlKCksIGZyZWV6ZXJfZGVzdHJveSgpOgorICogY2dyb3VwX211dGV4IFsgYnkgY2dyb3VwIGNvcmUgXQorICoKKyAqIGNhbl9hdHRhY2goKToKKyAqIGNncm91cF9tdXRleAorICoKKyAqIGNncm91cF9mcm96ZW4oKToKKyAqIHRhc2stPmFsbG9jX2xvY2sgKHRvIGdldCB0YXNrJ3MgY2dyb3VwKQorICoKKyAqIGZyZWV6ZXJfZm9yaygpIChwcmVzZXJ2aW5nIGZvcmsoKSBwZXJmb3JtYW5jZSBtZWFucyBjYW4ndCB0YWtlIGNncm91cF9tdXRleCk6CisgKiB0YXNrLT5hbGxvY19sb2NrICh0byBnZXQgdGFzaydzIGNncm91cCkKKyAqIGZyZWV6ZXItPmxvY2sKKyAqICBzaWdoYW5kLT5zaWdsb2NrIChpZiB0aGUgY2dyb3VwIGlzIGZyZWV6aW5nKQorICoKKyAqIGZyZWV6ZXJfcmVhZCgpOgorICogY2dyb3VwX211dGV4CisgKiAgZnJlZXplci0+bG9jaworICogICByZWFkX2xvY2sgY3NzX3NldF9sb2NrIChjZ3JvdXAgaXRlcmF0b3Igc3RhcnQpCisgKgorICogZnJlZXplcl93cml0ZSgpIChmcmVlemUpOgorICogY2dyb3VwX211dGV4CisgKiAgZnJlZXplci0+bG9jaworICogICByZWFkX2xvY2sgY3NzX3NldF9sb2NrIChjZ3JvdXAgaXRlcmF0b3Igc3RhcnQpCisgKiAgICBzaWdoYW5kLT5zaWdsb2NrCisgKgorICogZnJlZXplcl93cml0ZSgpICh1bmZyZWV6ZSk6CisgKiBjZ3JvdXBfbXV0ZXgKKyAqICBmcmVlemVyLT5sb2NrCisgKiAgIHJlYWRfbG9jayBjc3Nfc2V0X2xvY2sgKGNncm91cCBpdGVyYXRvciBzdGFydCkKKyAqICAgIHRhc2stPmFsbG9jX2xvY2sgKHRvIHByZXZlbnQgcmFjZXMgd2l0aCBmcmVlemVfdGFzaygpKQorICogICAgIHNpZ2hhbmQtPnNpZ2xvY2sKKyAqLworc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmcmVlemVyX2NyZWF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkJCQkgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKworCWZyZWV6ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnJlZXplciksIEdGUF9LRVJORUwpOworCWlmICghZnJlZXplcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzcGluX2xvY2tfaW5pdCgmZnJlZXplci0+bG9jayk7CisJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfVEhBV0VEOworCXJldHVybiAmZnJlZXplci0+Y3NzOworfQorCitzdGF0aWMgdm9pZCBmcmVlemVyX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJICAgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlrZnJlZShjZ3JvdXBfZnJlZXplcihjZ3JvdXApKTsKK30KKworLyogVGFzayBpcyBmcm96ZW4gb3Igd2lsbCBmcmVlemUgaW1tZWRpYXRlbHkgd2hlbiBuZXh0IGl0IGdldHMgd29rZW4gKi8KK3N0YXRpYyBib29sIGlzX3Rhc2tfZnJvemVuX2Vub3VnaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIGZyb3plbih0YXNrKSB8fAorCQkodGFza19pc19zdG9wcGVkX29yX3RyYWNlZCh0YXNrKSAmJiBmcmVlemluZyh0YXNrKSk7Cit9CisKKy8qCisgKiBUaGUgY2FsbCB0byBjZ3JvdXBfbG9jaygpIGluIHRoZSBmcmVlemVyLnN0YXRlIHdyaXRlIG1ldGhvZCBwcmV2ZW50cworICogYSB3cml0ZSB0byB0aGF0IGZpbGUgcmFjaW5nIGFnYWluc3QgYW4gYXR0YWNoLCBhbmQgaGVuY2UgdGhlCisgKiBjYW5fYXR0YWNoKCkgcmVzdWx0IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBhdHRhY2ggY29tcGxldGVzLgorICovCitzdGF0aWMgaW50IGZyZWV6ZXJfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkgICAgICBzdHJ1Y3QgY2dyb3VwICpuZXdfY2dyb3VwLAorCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCWludCByZXR2YWw7CisKKwkvKiBBbnl0aGluZyBmcm96ZW4gY2FuJ3QgbW92ZSBvciBiZSBtb3ZlZCB0by9mcm9tICovCisKKwlpZiAoaXNfdGFza19mcm96ZW5fZW5vdWdoKHRhc2spKQorCQlyZXR1cm4gLUVCVVNZOworCisJZnJlZXplciA9IGNncm91cF9mcmVlemVyKG5ld19jZ3JvdXApOworCWlmIChmcmVlemVyLT5zdGF0ZSA9PSBDR1JPVVBfRlJPWkVOKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dmFsID0gMDsKKwl0YXNrX2xvY2sodGFzayk7CisJZnJlZXplciA9IHRhc2tfZnJlZXplcih0YXNrKTsKKwlpZiAoZnJlZXplci0+c3RhdGUgPT0gQ0dST1VQX0ZST1pFTikKKwkJcmV0dmFsID0gLUVCVVNZOworCXRhc2tfdW5sb2NrKHRhc2spOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWV6ZXJfZm9yayhzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKworCXRhc2tfbG9jayh0YXNrKTsKKwlmcmVlemVyID0gdGFza19mcmVlemVyKHRhc2spOworCXRhc2tfdW5sb2NrKHRhc2spOworCisJQlVHX09OKGZyZWV6ZXItPnN0YXRlID09IENHUk9VUF9GUk9aRU4pOworCXNwaW5fbG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCS8qIExvY2tpbmcgYXZvaWRzIHJhY2Ugd2l0aCBGUkVFWklORyAtPiBUSEFXRUQgdHJhbnNpdGlvbnMuICovCisJaWYgKGZyZWV6ZXItPnN0YXRlID09IENHUk9VUF9GUkVFWklORykKKwkJZnJlZXplX3Rhc2sodGFzaywgdHJ1ZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKK30KKworLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgZnJlZXplci0+bG9jaworICovCitzdGF0aWMgdm9pZCB1cGRhdGVfZnJlZXplcl9zdGF0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsCisJCQkJIHN0cnVjdCBmcmVlemVyICpmcmVlemVyKQoreworCXN0cnVjdCBjZ3JvdXBfaXRlciBpdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJdW5zaWduZWQgaW50IG5mcm96ZW4gPSAwLCBudG90YWwgPSAwOworCisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dyb3VwLCAmaXQpOworCXdoaWxlICgodGFzayA9IGNncm91cF9pdGVyX25leHQoY2dyb3VwLCAmaXQpKSkgeworCQludG90YWwrKzsKKwkJaWYgKGlzX3Rhc2tfZnJvemVuX2Vub3VnaCh0YXNrKSkKKwkJCW5mcm96ZW4rKzsKKwl9CisKKwkvKgorCSAqIFRyYW5zaXRpb24gdG8gRlJPWkVOIHdoZW4gbm8gbmV3IHRhc2tzIGNhbiBiZSBhZGRlZCBlbnN1cmVzCisJICogdGhhdCB3ZSBuZXZlciBleGlzdCBpbiB0aGUgRlJPWkVOIHN0YXRlIHdoaWxlIHRoZXJlIGFyZSB1bmZyb3plbgorCSAqIHRhc2tzLgorCSAqLworCWlmIChuZnJvemVuID09IG50b3RhbCkKKwkJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfRlJPWkVOOworCWVsc2UgaWYgKG5mcm96ZW4gPiAwKQorCQlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9GUkVFWklORzsKKwllbHNlCisJCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX1RIQVdFRDsKKwljZ3JvdXBfaXRlcl9lbmQoY2dyb3VwLCAmaXQpOworfQorCitzdGF0aWMgaW50IGZyZWV6ZXJfcmVhZChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwkJCXN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgc3RhdGU7CisKKwlpZiAoIWNncm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dyb3VwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmcmVlemVyID0gY2dyb3VwX2ZyZWV6ZXIoY2dyb3VwKTsKKwlzcGluX2xvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKwlzdGF0ZSA9IGZyZWV6ZXItPnN0YXRlOworCWlmIChzdGF0ZSA9PSBDR1JPVVBfRlJFRVpJTkcpIHsKKwkJLyogV2UgY2hhbmdlIGZyb20gRlJFRVpJTkcgdG8gRlJPWkVOIGxhemlseSBpZiB0aGUgY2dyb3VwIHdhcworCQkgKiBvbmx5IHBhcnRpYWxseSBmcm96ZW4gd2hlbiB3ZSBleGl0dGVkIHdyaXRlLiAqLworCQl1cGRhdGVfZnJlZXplcl9zdGF0ZShjZ3JvdXAsIGZyZWV6ZXIpOworCQlzdGF0ZSA9IGZyZWV6ZXItPnN0YXRlOworCX0KKwlzcGluX3VubG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCWNncm91cF91bmxvY2soKTsKKworCXNlcV9wdXRzKG0sIGZyZWV6ZXJfc3RhdGVfc3Ryc1tzdGF0ZV0pOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV90b19mcmVlemVfY2dyb3VwKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXIpCit7CisJc3RydWN0IGNncm91cF9pdGVyIGl0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1bnNpZ25lZCBpbnQgbnVtX2NhbnRfZnJlZXplX25vdyA9IDA7CisKKwlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9GUkVFWklORzsKKwljZ3JvdXBfaXRlcl9zdGFydChjZ3JvdXAsICZpdCk7CisJd2hpbGUgKCh0YXNrID0gY2dyb3VwX2l0ZXJfbmV4dChjZ3JvdXAsICZpdCkpKSB7CisJCWlmICghZnJlZXplX3Rhc2sodGFzaywgdHJ1ZSkpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX3Rhc2tfZnJvemVuX2Vub3VnaCh0YXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWZyZWV6aW5nKHRhc2spICYmICFmcmVlemVyX3Nob3VsZF9za2lwKHRhc2spKQorCQkJbnVtX2NhbnRfZnJlZXplX25vdysrOworCX0KKwljZ3JvdXBfaXRlcl9lbmQoY2dyb3VwLCAmaXQpOworCisJcmV0dXJuIG51bV9jYW50X2ZyZWV6ZV9ub3cgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IHVuZnJlZXplX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBmcmVlemVyICpmcmVlemVyKQoreworCXN0cnVjdCBjZ3JvdXBfaXRlciBpdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwljZ3JvdXBfaXRlcl9zdGFydChjZ3JvdXAsICZpdCk7CisJd2hpbGUgKCh0YXNrID0gY2dyb3VwX2l0ZXJfbmV4dChjZ3JvdXAsICZpdCkpKSB7CisJCWludCBkb193YWtlOworCisJCXRhc2tfbG9jayh0YXNrKTsKKwkJZG9fd2FrZSA9IF9fdGhhd19wcm9jZXNzKHRhc2spOworCQl0YXNrX3VubG9jayh0YXNrKTsKKwkJaWYgKGRvX3dha2UpCisJCQl3YWtlX3VwX3Byb2Nlc3ModGFzayk7CisJfQorCWNncm91cF9pdGVyX2VuZChjZ3JvdXAsICZpdCk7CisJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfVEhBV0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnJlZXplcl9jaGFuZ2Vfc3RhdGUoc3RydWN0IGNncm91cCAqY2dyb3VwLAorCQkJCWVudW0gZnJlZXplcl9zdGF0ZSBnb2FsX3N0YXRlKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCWludCByZXR2YWwgPSAwOworCisJZnJlZXplciA9IGNncm91cF9mcmVlemVyKGNncm91cCk7CisJc3Bpbl9sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisJdXBkYXRlX2ZyZWV6ZXJfc3RhdGUoY2dyb3VwLCBmcmVlemVyKTsKKwlpZiAoZ29hbF9zdGF0ZSA9PSBmcmVlemVyLT5zdGF0ZSkKKwkJZ290byBvdXQ7CisJc3dpdGNoIChmcmVlemVyLT5zdGF0ZSkgeworCWNhc2UgQ0dST1VQX1RIQVdFRDoKKwkJcmV0dmFsID0gdHJ5X3RvX2ZyZWV6ZV9jZ3JvdXAoY2dyb3VwLCBmcmVlemVyKTsKKwkJYnJlYWs7CisJY2FzZSBDR1JPVVBfRlJFRVpJTkc6CisJCWlmIChnb2FsX3N0YXRlID09IENHUk9VUF9GUk9aRU4pIHsKKwkJCS8qIFVzZXJzcGFjZSBpcyByZXRyeWluZyBhZnRlcgorCQkJICogIi9iaW4vZWNobyBGUk9aRU4gPiBmcmVlemVyLnN0YXRlIiByZXR1cm5lZCAtRUJVU1kgKi8KKwkJCXJldHZhbCA9IHRyeV90b19mcmVlemVfY2dyb3VwKGNncm91cCwgZnJlZXplcik7CisJCQlicmVhazsKKwkJfQorCQkvKiBzdGF0ZSA9PSBGUkVFWklORyBhbmQgZ29hbF9zdGF0ZSA9PSBUSEFXRUQsIHNvIHVuZnJlZXplICovCisJY2FzZSBDR1JPVVBfRlJPWkVOOgorCQlyZXR2YWwgPSB1bmZyZWV6ZV9jZ3JvdXAoY2dyb3VwLCBmcmVlemVyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGZyZWV6ZXJfd3JpdGUoc3RydWN0IGNncm91cCAqY2dyb3VwLAorCQkJIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwkJCSBjb25zdCBjaGFyICpidWZmZXIpCit7CisJaW50IHJldHZhbDsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgZ29hbF9zdGF0ZTsKKworCWlmIChzdHJjbXAoYnVmZmVyLCBmcmVlemVyX3N0YXRlX3N0cnNbQ0dST1VQX1RIQVdFRF0pID09IDApCisJCWdvYWxfc3RhdGUgPSBDR1JPVVBfVEhBV0VEOworCWVsc2UgaWYgKHN0cmNtcChidWZmZXIsIGZyZWV6ZXJfc3RhdGVfc3Ryc1tDR1JPVVBfRlJPWkVOXSkgPT0gMCkKKwkJZ29hbF9zdGF0ZSA9IENHUk9VUF9GUk9aRU47CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghY2dyb3VwX2xvY2tfbGl2ZV9ncm91cChjZ3JvdXApKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR2YWwgPSBmcmVlemVyX2NoYW5nZV9zdGF0ZShjZ3JvdXAsIGdvYWxfc3RhdGUpOworCWNncm91cF91bmxvY2soKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IGNmdHlwZSBmaWxlc1tdID0geworCXsKKwkJLm5hbWUgPSAic3RhdGUiLAorCQkucmVhZF9zZXFfc3RyaW5nID0gZnJlZXplcl9yZWFkLAorCQkud3JpdGVfc3RyaW5nID0gZnJlZXplcl93cml0ZSwKKwl9LAorfTsKKworc3RhdGljIGludCBmcmVlemVyX3BvcHVsYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dyb3VwKQoreworCXJldHVybiBjZ3JvdXBfYWRkX2ZpbGVzKGNncm91cCwgc3MsIGZpbGVzLCBBUlJBWV9TSVpFKGZpbGVzKSk7Cit9CisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGZyZWV6ZXJfc3Vic3lzID0geworCS5uYW1lCQk9ICJmcmVlemVyIiwKKwkuY3JlYXRlCQk9IGZyZWV6ZXJfY3JlYXRlLAorCS5kZXN0cm95CT0gZnJlZXplcl9kZXN0cm95LAorCS5wb3B1bGF0ZQk9IGZyZWV6ZXJfcG9wdWxhdGUsCisJLnN1YnN5c19pZAk9IGZyZWV6ZXJfc3Vic3lzX2lkLAorCS5jYW5fYXR0YWNoCT0gZnJlZXplcl9jYW5fYXR0YWNoLAorCS5hdHRhY2gJCT0gTlVMTCwKKwkuZm9yawkJPSBmcmVlemVyX2ZvcmssCisJLmV4aXQJCT0gTlVMTCwKK307CmRpZmYgLS1naXQgYS9rZXJuZWwvY29tcGF0LmMgYi9rZXJuZWwvY29tcGF0LmMKaW5kZXggMTQzOTkwZS4uOGVhZmUzZSAxMDA2NDQKLS0tIGEva2VybmVsL2NvbXBhdC5jCisrKyBiL2tlcm5lbC9jb21wYXQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0yMDgsNDkgKzIwOSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29tcGF0X2Nsb2NrX3QgY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdChjbG9ja190IHgpCit7CisJcmV0dXJuIGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY2xvY2tfdF90b19qaWZmaWVzKHgpKTsKK30KKwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfdGltZXMoc3RydWN0IGNvbXBhdF90bXMgX191c2VyICp0YnVmKQogewotCS8qCi0JICoJSW4gdGhlIFNNUCB3b3JsZCB3ZSBtaWdodCBqdXN0IGJlIHVubHVja3kgYW5kIGhhdmUgb25lIG9mCi0JICoJdGhlIHRpbWVzIGluY3JlbWVudCBhcyB3ZSB1c2UgaXQuIFNpbmNlIHRoZSB2YWx1ZSBpcyBhbgotCSAqCWF0b21pY2FsbHkgc2FmZSB0eXBlIHRoaXMgaXMganVzdCBmaW5lLiBDb25jZXB0dWFsbHkgaXRzCi0JICoJYXMgaWYgdGhlIHN5c2NhbGwgdG9vayBhbiBpbnN0YW50IGxvbmdlciB0byBvY2N1ci4KLQkgKi8KIAlpZiAodGJ1ZikgeworCQlzdHJ1Y3QgdG1zIHRtczsKIAkJc3RydWN0IGNvbXBhdF90bXMgdG1wOwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQkJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJdXRpbWUgPSB0c2stPnNpZ25hbC0+dXRpbWU7Ci0JCXN0aW1lID0gdHNrLT5zaWduYWwtPnN0aW1lOwotCQl0ID0gdHNrOwotCQlkbyB7Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0LT5zdGltZSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQotCQkvKgotCQkgKiBXaGlsZSB3ZSBoYXZlIHRhc2tsaXN0X2xvY2sgcmVhZC1sb2NrZWQsIG5vIGR5aW5nIHRocmVhZAotCQkgKiBjYW4gYmUgdXBkYXRpbmcgY3VycmVudC0+c2lnbmFsLT5bdXNddGltZS4gIEluc3RlYWQsCi0JCSAqIHdlIGdvdCB0aGVpciBjb3VudHMgaW5jbHVkZWQgaW4gdGhlIGxpdmUgdGhyZWFkIGxvb3AuCi0JCSAqIEhvd2V2ZXIsIGFub3RoZXIgdGhyZWFkIGNhbiBjb21lIGluIHJpZ2h0IG5vdyBhbmQKLQkJICogZG8gYSB3YWl0IGNhbGwgdGhhdCB1cGRhdGVzIGN1cnJlbnQtPnNpZ25hbC0+Y1t1c110aW1lLgotCQkgKiBUbyBtYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGF0IHBhaXIgdXBkYXRlZCBhdG9taWNhbGx5LAotCQkgKiB3ZSB0YWtlIHRoZSBzaWdsb2NrIGFyb3VuZCBmZXRjaGluZyB0aGVtLgotCQkgKi8KLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3V0aW1lID0gdHNrLT5zaWduYWwtPmN1dGltZTsKLQkJY3N0aW1lID0gdHNrLT5zaWduYWwtPmNzdGltZTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQkJdG1wLnRtc191dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKHV0aW1lKSk7Ci0JCXRtcC50bXNfc3RpbWUgPSBjb21wYXRfamlmZmllc190b19jbG9ja190KGNwdXRpbWVfdG9famlmZmllcyhzdGltZSkpOwotCQl0bXAudG1zX2N1dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGN1dGltZSkpOwotCQl0bXAudG1zX2NzdGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGNzdGltZSkpOworCQlkb19zeXNfdGltZXMoJnRtcyk7CisJCS8qIENvbnZlcnQgb3VyIHN0cnVjdCB0bXMgdG8gdGhlIGNvbXBhdCB2ZXJzaW9uLiAqLworCQl0bXAudG1zX3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX3V0aW1lKTsKKwkJdG1wLnRtc19zdGltZSA9IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QodG1zLnRtc19zdGltZSk7CisJCXRtcC50bXNfY3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2N1dGltZSk7CisJCXRtcC50bXNfY3N0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2NzdGltZSk7CiAJCWlmIChjb3B5X3RvX3VzZXIodGJ1ZiwgJnRtcCwgc2l6ZW9mKHRtcCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbmZpZ3MuYyBiL2tlcm5lbC9jb25maWdzLmMKaW5kZXggNGMzNDUyMS4uYWJhZWU2OCAxMDA2NDQKLS0tIGEva2VybmVsL2NvbmZpZ3MuYworKysgYi9rZXJuZWwvY29uZmlncy5jCkBAIC01NCw5ICs1NCw2IEBACiAKICNpZmRlZiBDT05GSUdfSUtDT05GSUdfUFJPQwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBnbG9iYWxzIGFuZCB1c2VmdWwgY29uc3RhbnRzICAgICAgICAgICAgICAgICAgICovCi0KIHN0YXRpYyBzc2l6ZV90CiBpa2NvbmZpZ19yZWFkX2N1cnJlbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqIG9mZnNldCkKQEAgLTcxLDkgKzY4LDYgQEAKIAkucmVhZCA9IGlrY29uZmlnX3JlYWRfY3VycmVudCwKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19pbml0OiBzdGFydCB1cCBldmVyeXRoaW5nIHdlIG5lZWQgdG8gKi8KLQogc3RhdGljIGludCBfX2luaXQgaWtjb25maWdfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CkBAIC04OSw5ICs4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19jbGVhbnVwOiBjbGVhbiB1cCBvdXIgbWVzcyAgICAgICAgICAgKi8KLQogc3RhdGljIHZvaWQgX19leGl0IGlrY29uZmlnX2NsZWFudXAodm9pZCkKIHsKIAlyZW1vdmVfcHJvY19lbnRyeSgiY29uZmlnLmd6IiwgTlVMTCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggZWFiN2JkNi4uM2UwMDUyNiAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTE3Miw3ICsxMTcyLDcgQEAKIHsKIAlzdHJ1Y3QgY3B1c2V0IHRyaWFsY3M7CiAJaW50IGVycjsKLQlpbnQgY3B1c19ub25lbXB0eSwgYmFsYW5jZV9mbGFnX2NoYW5nZWQ7CisJaW50IGJhbGFuY2VfZmxhZ19jaGFuZ2VkOwogCiAJdHJpYWxjcyA9ICpjczsKIAlpZiAodHVybmluZ19vbikKQEAgLTExODQsNyArMTE4NCw2IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljcHVzX25vbmVtcHR5ID0gIWNwdXNfZW1wdHkodHJpYWxjcy5jcHVzX2FsbG93ZWQpOwogCWJhbGFuY2VfZmxhZ19jaGFuZ2VkID0gKGlzX3NjaGVkX2xvYWRfYmFsYW5jZShjcykgIT0KIAkJIAkJCWlzX3NjaGVkX2xvYWRfYmFsYW5jZSgmdHJpYWxjcykpOwogCkBAIC0xMTkyLDcgKzExOTEsNyBAQAogCWNzLT5mbGFncyA9IHRyaWFsY3MuZmxhZ3M7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKLQlpZiAoY3B1c19ub25lbXB0eSAmJiBiYWxhbmNlX2ZsYWdfY2hhbmdlZCkKKwlpZiAoIWNwdXNfZW1wdHkodHJpYWxjcy5jcHVzX2FsbG93ZWQpICYmIGJhbGFuY2VfZmxhZ19jaGFuZ2VkKQogCQlhc3luY19yZWJ1aWxkX3NjaGVkX2RvbWFpbnMoKTsKIAogCXJldHVybiAwOwpAQCAtMjQzNywxOSArMjQzNiwxNSBAQAogdm9pZCBjcHVzZXRfdGFza19zdGF0dXNfYWxsb3dlZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzZXFfcHJpbnRmKG0sICJDcHVzX2FsbG93ZWQ6XHQiKTsKLQltLT5jb3VudCArPSBjcHVtYXNrX3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwgbS0+c2l6ZSAtIG0tPmNvdW50LAotCQkJCQl0YXNrLT5jcHVzX2FsbG93ZWQpOworCXNlcV9jcHVtYXNrKG0sICZ0YXNrLT5jcHVzX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiQ3B1c19hbGxvd2VkX2xpc3Q6XHQiKTsKLQltLT5jb3VudCArPSBjcHVsaXN0X3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwgbS0+c2l6ZSAtIG0tPmNvdW50LAotCQkJCQl0YXNrLT5jcHVzX2FsbG93ZWQpOworCXNlcV9jcHVtYXNrX2xpc3QobSwgJnRhc2stPmNwdXNfYWxsb3dlZCk7CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1zX2FsbG93ZWQ6XHQiKTsKLQltLT5jb3VudCArPSBub2RlbWFza19zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+bWVtc19hbGxvd2VkKTsKKwlzZXFfbm9kZW1hc2sobSwgJnRhc2stPm1lbXNfYWxsb3dlZCk7CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1zX2FsbG93ZWRfbGlzdDpcdCIpOwotCW0tPmNvdW50ICs9IG5vZGVsaXN0X3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwgbS0+c2l6ZSAtIG0tPmNvdW50LAotCQkJCQl0YXNrLT5tZW1zX2FsbG93ZWQpOworCXNlcV9ub2RlbWFza19saXN0KG0sICZ0YXNrLT5tZW1zX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhlY19kb21haW4uYyBiL2tlcm5lbC9leGVjX2RvbWFpbi5jCmluZGV4IDBkNDA3ZTguLjA1MTE3MTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGVjX2RvbWFpbi5jCisrKyBiL2tlcm5lbC9leGVjX2RvbWFpbi5jCkBAIC0xMiw3ICsxMiw5IEBACiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xNzMsMjEgKzE3NSw0MCBAQAogCXJldHVybiAwOwogfQogCi1pbnQKLWdldF9leGVjX2RvbWFpbl9saXN0KGNoYXIgKnBhZ2UpCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBpbnQgZXhlY2RvbWFpbnNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgZXhlY19kb21haW4JKmVwOwotCWludAkJCWxlbiA9IDA7CiAKIAlyZWFkX2xvY2soJmV4ZWNfZG9tYWluc19sb2NrKTsKLQlmb3IgKGVwID0gZXhlY19kb21haW5zOyBlcCAmJiBsZW4gPCBQQUdFX1NJWkUgLSA4MDsgZXAgPSBlcC0+bmV4dCkKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiVkLSVkXHQlLTE2c1x0WyVzXVxuIiwKKwlmb3IgKGVwID0gZXhlY19kb21haW5zOyBlcDsgZXAgPSBlcC0+bmV4dCkKKwkJc2VxX3ByaW50ZihtLCAiJWQtJWRcdCUtMTZzXHRbJXNdXG4iLAogCQkJICAgICAgIGVwLT5wZXJzX2xvdywgZXAtPnBlcnNfaGlnaCwgZXAtPm5hbWUsCiAJCQkgICAgICAgbW9kdWxlX25hbWUoZXAtPm1vZHVsZSkpOwogCXJlYWRfdW5sb2NrKCZleGVjX2RvbWFpbnNfbG9jayk7Ci0JcmV0dXJuIChsZW4pOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV4ZWNkb21haW5zX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZXhlY2RvbWFpbnNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhlY2RvbWFpbnNfcHJvY19mb3BzID0geworCS5vcGVuCQk9IGV4ZWNkb21haW5zX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHJvY19leGVjZG9tYWluc19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoImV4ZWNkb21haW5zIiwgMCwgTlVMTCwgJmV4ZWNkb21haW5zX3Byb2NfZm9wcyk7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChwcm9jX2V4ZWNkb21haW5zX2luaXQpOworI2VuZGlmCisKIGFzbWxpbmthZ2UgbG9uZwogc3lzX3BlcnNvbmFsaXR5KHVfbG9uZyBwZXJzb25hbGl0eSkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDBlZjQ2NzMuLjgwMTM3YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CkBAIC0xMTIsOCArMTEzLDYgQEAKIAkJICogV2Ugd29uJ3QgZXZlciBnZXQgaGVyZSBmb3IgdGhlIGdyb3VwIGxlYWRlciwgc2luY2UgaXQKIAkJICogd2lsbCBoYXZlIGJlZW4gdGhlIGxhc3QgcmVmZXJlbmNlIG9uIHRoZSBzaWduYWxfc3RydWN0LgogCQkgKi8KLQkJc2lnLT51dGltZSA9IGNwdXRpbWVfYWRkKHNpZy0+dXRpbWUsIHRhc2tfdXRpbWUodHNrKSk7Ci0JCXNpZy0+c3RpbWUgPSBjcHV0aW1lX2FkZChzaWctPnN0aW1lLCB0YXNrX3N0aW1lKHRzaykpOwogCQlzaWctPmd0aW1lID0gY3B1dGltZV9hZGQoc2lnLT5ndGltZSwgdGFza19ndGltZSh0c2spKTsKIAkJc2lnLT5taW5fZmx0ICs9IHRzay0+bWluX2ZsdDsKIAkJc2lnLT5tYWpfZmx0ICs9IHRzay0+bWFqX2ZsdDsKQEAgLTEyMiw3ICsxMjEsNiBAQAogCQlzaWctPmluYmxvY2sgKz0gdGFza19pb19nZXRfaW5ibG9jayh0c2spOwogCQlzaWctPm91YmxvY2sgKz0gdGFza19pb19nZXRfb3VibG9jayh0c2spOwogCQl0YXNrX2lvX2FjY291bnRpbmdfYWRkKCZzaWctPmlvYWMsICZ0c2stPmlvYWMpOwotCQlzaWctPnN1bV9zY2hlZF9ydW50aW1lICs9IHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKIAkJc2lnID0gTlVMTDsgLyogTWFya2VyIGZvciBiZWxvdy4gKi8KIAl9CiAKQEAgLTE0OSw3ICsxNDcsMTAgQEAKIAogc3RhdGljIHZvaWQgZGVsYXllZF9wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHJjdV9oZWFkICpyaHApCiB7Ci0JcHV0X3Rhc2tfc3RydWN0KGNvbnRhaW5lcl9vZihyaHAsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcmN1KSk7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjb250YWluZXJfb2YocmhwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJjdSk7CisKKwl0cmFjZV9zY2hlZF9wcm9jZXNzX2ZyZWUodHNrKTsKKwlwdXRfdGFza19zdHJ1Y3QodHNrKTsKIH0KIAogCkBAIC0xMDczLDYgKzEwNzQsOCBAQAogCiAJaWYgKGdyb3VwX2RlYWQpCiAJCWFjY3RfcHJvY2VzcygpOworCXRyYWNlX3NjaGVkX3Byb2Nlc3NfZXhpdCh0c2spOworCiAJZXhpdF9zZW0odHNrKTsKIAlleGl0X2ZpbGVzKHRzayk7CiAJZXhpdF9mcyh0c2spOwpAQCAtMTMwMSw2ICsxMzA0LDcgQEAKIAlpZiAobGlrZWx5KCF0cmFjZWQpKSB7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpwc2lnOwogCQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAKIAkJLyoKIAkJICogVGhlIHJlc291cmNlIGNvdW50ZXJzIGZvciB0aGUgZ3JvdXAgbGVhZGVyIGFyZSBpbiBpdHMKQEAgLTEzMTYsMjAgKzEzMjAsMjMgQEAKIAkJICogbmVlZCB0byBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gcC0+cGFyZW50LT5zaWduYWwgZmllbGRzLAogCQkgKiBhcyBvdGhlciB0aHJlYWRzIGluIHRoZSBwYXJlbnQgZ3JvdXAgY2FuIGJlIHJpZ2h0CiAJCSAqIGhlcmUgcmVhcGluZyBvdGhlciBjaGlsZHJlbiBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKgorCQkgKiBXZSB1c2UgdGhyZWFkX2dyb3VwX2NwdXRpbWUoKSB0byBnZXQgdGltZXMgZm9yIHRoZSB0aHJlYWQKKwkJICogZ3JvdXAsIHdoaWNoIGNvbnNvbGlkYXRlcyB0aW1lcyBmb3IgYWxsIHRocmVhZHMgaW4gdGhlCisJCSAqIGdyb3VwIGluY2x1ZGluZyB0aGUgZ3JvdXAgbGVhZGVyLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcC0+cGFyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJcHNpZyA9IHAtPnBhcmVudC0+c2lnbmFsOwogCQlzaWcgPSBwLT5zaWduYWw7CisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKIAkJcHNpZy0+Y3V0aW1lID0KIAkJCWNwdXRpbWVfYWRkKHBzaWctPmN1dGltZSwKLQkJCWNwdXRpbWVfYWRkKHAtPnV0aW1lLAotCQkJY3B1dGltZV9hZGQoc2lnLT51dGltZSwKLQkJCQkgICAgc2lnLT5jdXRpbWUpKSk7CisJCQljcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLAorCQkJCSAgICBzaWctPmN1dGltZSkpOwogCQlwc2lnLT5jc3RpbWUgPQogCQkJY3B1dGltZV9hZGQocHNpZy0+Y3N0aW1lLAotCQkJY3B1dGltZV9hZGQocC0+c3RpbWUsCi0JCQljcHV0aW1lX2FkZChzaWctPnN0aW1lLAotCQkJCSAgICBzaWctPmNzdGltZSkpKTsKKwkJCWNwdXRpbWVfYWRkKGNwdXRpbWUuc3RpbWUsCisJCQkJICAgIHNpZy0+Y3N0aW1lKSk7CiAJCXBzaWctPmNndGltZSA9CiAJCQljcHV0aW1lX2FkZChwc2lnLT5jZ3RpbWUsCiAJCQljcHV0aW1lX2FkZChwLT5ndGltZSwKQEAgLTE2NzQsNiArMTY4MSw4IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJaW50IHJldHZhbDsKIAorCXRyYWNlX3NjaGVkX3Byb2Nlc3Nfd2FpdChwaWQpOworCiAJYWRkX3dhaXRfcXVldWUoJmN1cnJlbnQtPnNpZ25hbC0+d2FpdF9jaGxkZXhpdCwmd2FpdCk7CiByZXBlYXQ6CiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDMwZGU2NDQuLmY2MDgzNTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtNzU5LDE1ICs3NjAsNDQgQEAKIAkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBzaWdoYW5kKTsKIH0KIAorCisvKgorICogSW5pdGlhbGl6ZSBQT1NJWCB0aW1lciBoYW5kbGluZyBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKi8KK3N0YXRpYyB2b2lkIHBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoreworCS8qIFRocmVhZCBncm91cCBjb3VudGVycy4gKi8KKwl0aHJlYWRfZ3JvdXBfY3B1dGltZV9pbml0KHNpZyk7CisKKwkvKiBFeHBpcmF0aW9uIHRpbWVzIGFuZCBpbmNyZW1lbnRzLiAqLworCXNpZy0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfdmlydF9pbmNyID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfcHJvZl9pbmNyID0gY3B1dGltZV96ZXJvOworCisJLyogQ2FjaGVkIGV4cGlyYXRpb24gdGltZXMuICovCisJc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gMDsKKworCS8qIFRoZSB0aW1lciBsaXN0cy4gKi8KKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzBdKTsKKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzFdKTsKKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzJdKTsKK30KKwogc3RhdGljIGludCBjb3B5X3NpZ25hbCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwogCWludCByZXQ7CiAKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpIHsKLQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5jb3VudCk7Ci0JCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZ25hbC0+bGl2ZSk7Ci0JCXJldHVybiAwOworCQlyZXQgPSB0aHJlYWRfZ3JvdXBfY3B1dGltZV9jbG9uZV90aHJlYWQoY3VycmVudCk7CisJCWlmIChsaWtlbHkoIXJldCkpIHsKKwkJCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZ25hbC0+Y291bnQpOworCQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5saXZlKTsKKwkJfQorCQlyZXR1cm4gcmV0OwogCX0KIAlzaWcgPSBrbWVtX2NhY2hlX2FsbG9jKHNpZ25hbF9jYWNoZXAsIEdGUF9LRVJORUwpOwogCXRzay0+c2lnbmFsID0gc2lnOwpAQCAtNzk1LDQwICs4MjUsMjUgQEAKIAlzaWctPml0X3JlYWxfaW5jci50djY0ID0gMDsKIAlzaWctPnJlYWxfdGltZXIuZnVuY3Rpb24gPSBpdF9yZWFsX2ZuOwogCi0Jc2lnLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF92aXJ0X2luY3IgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF9wcm9mX2luY3IgPSBjcHV0aW1lX3plcm87Ci0KIAlzaWctPmxlYWRlciA9IDA7CS8qIHNlc3Npb24gbGVhZGVyc2hpcCBkb2Vzbid0IGluaGVyaXQgKi8KIAlzaWctPnR0eV9vbGRfcGdycCA9IE5VTEw7CiAJc2lnLT50dHkgPSBOVUxMOwogCi0Jc2lnLT51dGltZSA9IHNpZy0+c3RpbWUgPSBzaWctPmN1dGltZSA9IHNpZy0+Y3N0aW1lID0gY3B1dGltZV96ZXJvOworCXNpZy0+Y3V0aW1lID0gc2lnLT5jc3RpbWUgPSBjcHV0aW1lX3plcm87CiAJc2lnLT5ndGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPmNndGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPm52Y3N3ID0gc2lnLT5uaXZjc3cgPSBzaWctPmNudmNzdyA9IHNpZy0+Y25pdmNzdyA9IDA7CiAJc2lnLT5taW5fZmx0ID0gc2lnLT5tYWpfZmx0ID0gc2lnLT5jbWluX2ZsdCA9IHNpZy0+Y21hal9mbHQgPSAwOwogCXNpZy0+aW5ibG9jayA9IHNpZy0+b3VibG9jayA9IHNpZy0+Y2luYmxvY2sgPSBzaWctPmNvdWJsb2NrID0gMDsKIAl0YXNrX2lvX2FjY291bnRpbmdfaW5pdCgmc2lnLT5pb2FjKTsKLQlzaWctPnN1bV9zY2hlZF9ydW50aW1lID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzBdKTsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzFdKTsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzJdKTsKIAl0YXNrc3RhdHNfdGdpZF9pbml0KHNpZyk7CiAKIAl0YXNrX2xvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAltZW1jcHkoc2lnLT5ybGltLCBjdXJyZW50LT5zaWduYWwtPnJsaW0sIHNpemVvZiBzaWctPnJsaW0pOwogCXRhc2tfdW5sb2NrKGN1cnJlbnQtPmdyb3VwX2xlYWRlcik7CiAKLQlpZiAoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpIHsKLQkJLyoKLQkJICogTmV3IHNvbGUgdGhyZWFkIGluIHRoZSBwcm9jZXNzIGdldHMgYW4gZXhwaXJ5IHRpbWUKLQkJICogb2YgdGhlIHdob2xlIENQVSB0aW1lIGxpbWl0LgotCQkgKi8KLQkJdHNrLT5pdF9wcm9mX2V4cGlyZXMgPQotCQkJc2Vjc190b19jcHV0aW1lKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cik7Ci0JfQorCXBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzaWcpOworCiAJYWNjdF9pbml0X3BhY2N0KCZzaWctPnBhY2N0KTsKIAogCXR0eV9hdWRpdF9mb3JrKHNpZyk7CkBAIC04MzgsNiArODUzLDcgQEAKIAogdm9pZCBfX2NsZWFudXBfc2lnbmFsKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCiB7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWVfZnJlZShzaWcpOwogCWV4aXRfdGhyZWFkX2dyb3VwX2tleXMoc2lnKTsKIAl0dHlfa3JlZl9wdXQoc2lnLT50dHkpOwogCWttZW1fY2FjaGVfZnJlZShzaWduYWxfY2FjaGVwLCBzaWcpOwpAQCAtODg4LDYgKzkwNCwxOSBAQAogI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwogCiAvKgorICogSW5pdGlhbGl6ZSBQT1NJWCB0aW1lciBoYW5kbGluZyBmb3IgYSBzaW5nbGUgdGFzay4KKyAqLworc3RhdGljIHZvaWQgcG9zaXhfY3B1X3RpbWVyc19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXRzay0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1swXSk7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1sxXSk7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1syXSk7Cit9CisKKy8qCiAgKiBUaGlzIGNyZWF0ZXMgYSBuZXcgcHJvY2VzcyBhcyBhIGNvcHkgb2YgdGhlIG9sZCBvbmUsCiAgKiBidXQgZG9lcyBub3QgYWN0dWFsbHkgc3RhcnQgaXQgeWV0LgogICoKQEAgLTk4OSw2ICsxMDE4LDggQEAKIAlwLT5wcmV2X3V0aW1lID0gY3B1dGltZV96ZXJvOwogCXAtPnByZXZfc3RpbWUgPSBjcHV0aW1lX3plcm87CiAKKwlwLT5kZWZhdWx0X3RpbWVyX3NsYWNrX25zID0gY3VycmVudC0+dGltZXJfc2xhY2tfbnM7CisKICNpZmRlZiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAKIAlwLT5sYXN0X3N3aXRjaF9jb3VudCA9IDA7CiAJcC0+bGFzdF9zd2l0Y2hfdGltZXN0YW1wID0gMDsKQEAgLTk5NywxMiArMTAyOCw3IEBACiAJdGFza19pb19hY2NvdW50aW5nX2luaXQoJnAtPmlvYWMpOwogCWFjY3RfY2xlYXJfaW50ZWdyYWxzKHApOwogCi0JcC0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXAtPml0X3Byb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlwLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmcC0+Y3B1X3RpbWVyc1swXSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPmNwdV90aW1lcnNbMV0pOwotCUlOSVRfTElTVF9IRUFEKCZwLT5jcHVfdGltZXJzWzJdKTsKKwlwb3NpeF9jcHVfdGltZXJzX2luaXQocCk7CiAKIAlwLT5sb2NrX2RlcHRoID0gLTE7CQkvKiAtMSA9IG5vIGxvY2sgKi8KIAlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSgmcC0+c3RhcnRfdGltZSk7CkBAIC0xMjAzLDIxICsxMjI5LDYgQEAKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpIHsKIAkJcC0+Z3JvdXBfbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwogCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGhyZWFkX2dyb3VwLCAmcC0+Z3JvdXBfbGVhZGVyLT50aHJlYWRfZ3JvdXApOwotCi0JCWlmICghY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlcywKLQkJCQljcHV0aW1lX3plcm8pIHx8Ci0JCSAgICAhY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcywKLQkJCQljcHV0aW1lX3plcm8pIHx8Ci0JCSAgICBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSB8fAotCQkgICAgIWxpc3RfZW1wdHkoJmN1cnJlbnQtPnNpZ25hbC0+Y3B1X3RpbWVyc1swXSkgfHwKLQkJICAgICFsaXN0X2VtcHR5KCZjdXJyZW50LT5zaWduYWwtPmNwdV90aW1lcnNbMV0pIHx8Ci0JCSAgICAhbGlzdF9lbXB0eSgmY3VycmVudC0+c2lnbmFsLT5jcHVfdGltZXJzWzJdKSkgewotCQkJLyoKLQkJCSAqIEhhdmUgY2hpbGQgd2FrZSB1cCBvbiBpdHMgZmlyc3QgdGljayB0byBjaGVjawotCQkJICogZm9yIHByb2Nlc3MgQ1BVIHRpbWVycy4KLQkJCSAqLwotCQkJcC0+aXRfcHJvZl9leHBpcmVzID0gamlmZmllc190b19jcHV0aW1lKDEpOwotCQl9CiAJfQogCiAJaWYgKGxpa2VseShwLT5waWQpKSB7CkBAIC0xMzY0LDYgKzEzNzUsOCBAQAogCWlmICghSVNfRVJSKHApKSB7CiAJCXN0cnVjdCBjb21wbGV0aW9uIHZmb3JrOwogCisJCXRyYWNlX3NjaGVkX3Byb2Nlc3NfZm9yayhjdXJyZW50LCBwKTsKKwogCQluciA9IHRhc2tfcGlkX3ZucihwKTsKIAogCQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9QQVJFTlRfU0VUVElEKQpkaWZmIC0tZ2l0IGEva2VybmVsL2ZyZWV6ZXIuYyBiL2tlcm5lbC9mcmVlemVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2MjQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9mcmVlemVyLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBrZXJuZWwvZnJlZXplci5jIC0gRnVuY3Rpb24gdG8gZnJlZXplIGEgcHJvY2VzcworICoKKyAqIE9yaWdpbmFsbHkgZnJvbSBrZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKworLyoKKyAqIGZyZWV6aW5nIGlzIGNvbXBsZXRlLCBtYXJrIGN1cnJlbnQgcHJvY2VzcyBhcyBmcm96ZW4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyb3plbl9wcm9jZXNzKHZvaWQpCit7CisJaWYgKCF1bmxpa2VseShjdXJyZW50LT5mbGFncyAmIFBGX05PRlJFRVpFKSkgeworCQljdXJyZW50LT5mbGFncyB8PSBQRl9GUk9aRU47CisJCXdtYigpOworCX0KKwljbGVhcl9mcmVlemVfZmxhZyhjdXJyZW50KTsKK30KKworLyogUmVmcmlnZXJhdG9yIGlzIHBsYWNlIHdoZXJlIGZyb3plbiBwcm9jZXNzZXMgYXJlIHN0b3JlZCA6LSkuICovCit2b2lkIHJlZnJpZ2VyYXRvcih2b2lkKQoreworCS8qIEhtbSwgc2hvdWxkIHdlIGJlIGFsbG93ZWQgdG8gc3VzcGVuZCB3aGVuIHRoZXJlIGFyZSByZWFsdGltZQorCSAgIHByb2Nlc3NlcyBhcm91bmQ/ICovCisJbG9uZyBzYXZlOworCisJdGFza19sb2NrKGN1cnJlbnQpOworCWlmIChmcmVlemluZyhjdXJyZW50KSkgeworCQlmcm96ZW5fcHJvY2VzcygpOworCQl0YXNrX3VubG9jayhjdXJyZW50KTsKKwl9IGVsc2UgeworCQl0YXNrX3VubG9jayhjdXJyZW50KTsKKwkJcmV0dXJuOworCX0KKwlzYXZlID0gY3VycmVudC0+c3RhdGU7CisJcHJfZGVidWcoIiVzIGVudGVyZWQgcmVmcmlnZXJhdG9yXG4iLCBjdXJyZW50LT5jb21tKTsKKworCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCXJlY2FsY19zaWdwZW5kaW5nKCk7IC8qIFdlIHNlbnQgZmFrZSBzaWduYWwsIGNsZWFuIGl0IHVwICovCisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCWZvciAoOzspIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlpZiAoIWZyb3plbihjdXJyZW50KSkKKwkJCWJyZWFrOworCQlzY2hlZHVsZSgpOworCX0KKwlwcl9kZWJ1ZygiJXMgbGVmdCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoc2F2ZSk7Cit9CitFWFBPUlRfU1lNQk9MKHJlZnJpZ2VyYXRvcik7CisKK3N0YXRpYyB2b2lkIGZha2Vfc2lnbmFsX3dha2VfdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNpZ25hbF93YWtlX3VwKHAsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKglmcmVlemVfdGFzayAtIHNlbmQgYSBmcmVlemUgcmVxdWVzdCB0byBnaXZlbiB0YXNrCisgKglAcDogdGFzayB0byBzZW5kIHRoZSByZXF1ZXN0IHRvCisgKglAc2lnX29ubHk6IGlmIHNldCwgdGhlIHJlcXVlc3Qgd2lsbCBvbmx5IGJlIHNlbnQgaWYgdGhlIHRhc2sgaGFzIHRoZQorICoJCVBGX0ZSRUVaRVJfTk9TSUcgZmxhZyB1bnNldAorICoJUmV0dXJuIHZhbHVlOiAnZmFsc2UnLCBpZiBAc2lnX29ubHkgaXMgc2V0IGFuZCB0aGUgdGFzayBoYXMKKyAqCQlQRl9GUkVFWkVSX05PU0lHIHNldCBvciB0aGUgdGFzayBpcyBmcm96ZW4sICd0cnVlJywgb3RoZXJ3aXNlCisgKgorICoJVGhlIGZyZWV6ZSByZXF1ZXN0IGlzIHNlbnQgYnkgc2V0dGluZyB0aGUgdGFza3MncyBUSUZfRlJFRVpFIGZsYWcgYW5kCisgKgllaXRoZXIgc2VuZGluZyBhIGZha2Ugc2lnbmFsIHRvIGl0IG9yIHdha2luZyBpdCB1cCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAqCW9yIG5vdCBpdCBoYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQuICBJZiBAc2lnX29ubHkgaXMgc2V0IGFuZCB0aGUgdGFzaworICoJaGFzIFBGX0ZSRUVaRVJfTk9TSUcgc2V0IChpZS4gaXQgaXMgYSB0eXBpY2FsIGtlcm5lbCB0aHJlYWQpLCBpdHMKKyAqCVRJRl9GUkVFWkUgZmxhZyB3aWxsIG5vdCBiZSBzZXQuCisgKi8KK2Jvb2wgZnJlZXplX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIHNpZ19vbmx5KQoreworCS8qCisJICogV2UgZmlyc3QgY2hlY2sgaWYgdGhlIHRhc2sgaXMgZnJlZXppbmcgYW5kIG5leHQgaWYgaXQgaGFzIGFscmVhZHkKKwkgKiBiZWVuIGZyb3plbiB0byBhdm9pZCB0aGUgcmFjZSB3aXRoIGZyb3plbl9wcm9jZXNzKCkgd2hpY2ggZmlyc3QgbWFya3MKKwkgKiB0aGUgdGFzayBhcyBmcm96ZW4gYW5kIG5leHQgY2xlYXJzIGl0cyBUSUZfRlJFRVpFLgorCSAqLworCWlmICghZnJlZXppbmcocCkpIHsKKwkJcm1iKCk7CisJCWlmIChmcm96ZW4ocCkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYgKCFzaWdfb25seSB8fCBzaG91bGRfc2VuZF9zaWduYWwocCkpCisJCQlzZXRfZnJlZXplX2ZsYWcocCk7CisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoc2hvdWxkX3NlbmRfc2lnbmFsKHApKSB7CisJCWlmICghc2lnbmFsX3BlbmRpbmcocCkpCisJCQlmYWtlX3NpZ25hbF93YWtlX3VwKHApOworCX0gZWxzZSBpZiAoc2lnX29ubHkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCXdha2VfdXBfc3RhdGUocCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBjYW5jZWxfZnJlZXppbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZnJlZXppbmcocCkpIHsKKwkJcHJfZGVidWcoIiAgY2xlYW4gdXA6ICVzXG4iLCBwLT5jb21tKTsKKwkJY2xlYXJfZnJlZXplX2ZsYWcocCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJCXJlY2FsY19zaWdwZW5kaW5nX2FuZF93YWtlKHApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogV2FrZSB1cCBhIGZyb3plbiBwcm9jZXNzCisgKgorICogdGFza19sb2NrKCkgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIHJhY2Ugd2l0aCByZWZyaWdlcmF0b3IoKSB3aGljaCBtYXkKKyAqIG9jY3VyIGlmIHRoZSBmcmVlemluZyBvZiB0YXNrcyBmYWlscy4gIE5hbWVseSwgd2l0aG91dCB0aGUgbG9jaywgaWYgdGhlCisgKiBmcmVlemluZyBvZiB0YXNrcyBmYWlsZWQsIHRoYXdfdGFza3MoKSBtaWdodCBoYXZlIHJ1biBiZWZvcmUgYSB0YXNrIGluCisgKiByZWZyaWdlcmF0b3IoKSBjb3VsZCBjYWxsIGZyb3plbl9wcm9jZXNzKCksIGluIHdoaWNoIGNhc2UgdGhlIHRhc2sgd291bGQgYmUKKyAqIGZyb3plbiBhbmQgbm8gb25lIHdvdWxkIHRoYXcgaXQuCisgKi8KK2ludCBfX3RoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJaWYgKGZyb3plbihwKSkgeworCQlwLT5mbGFncyAmPSB+UEZfRlJPWkVOOworCQlyZXR1cm4gMTsKKwl9CisJY2xlYXJfZnJlZXplX2ZsYWcocCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0aGF3X3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXRhc2tfbG9jayhwKTsKKwlpZiAoX190aGF3X3Byb2Nlc3MocCkgPT0gMSkgeworCQl0YXNrX3VubG9jayhwKTsKKwkJd2FrZV91cF9wcm9jZXNzKHApOworCQlyZXR1cm4gMTsKKwl9CisJdGFza191bmxvY2socCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRoYXdfcHJvY2Vzcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDdkMTEzNmUuLjhhZjEwMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0xMjk2LDEzICsxMjk2LDE2IEBACiAJCWlmICghYWJzX3RpbWUpCiAJCQlzY2hlZHVsZSgpOwogCQllbHNlIHsKKwkJCXVuc2lnbmVkIGxvbmcgc2xhY2s7CisJCQlzbGFjayA9IGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zOworCQkJaWYgKHJ0X3Rhc2soY3VycmVudCkpCisJCQkJc2xhY2sgPSAwOwogCQkJaHJ0aW1lcl9pbml0X29uX3N0YWNrKCZ0LnRpbWVyLCBDTE9DS19NT05PVE9OSUMsCiAJCQkJCQlIUlRJTUVSX01PREVfQUJTKTsKIAkJCWhydGltZXJfaW5pdF9zbGVlcGVyKCZ0LCBjdXJyZW50KTsKLQkJCXQudGltZXIuZXhwaXJlcyA9ICphYnNfdGltZTsKKwkJCWhydGltZXJfc2V0X2V4cGlyZXNfcmFuZ2VfbnMoJnQudGltZXIsICphYnNfdGltZSwgc2xhY2spOwogCi0JCQlocnRpbWVyX3N0YXJ0KCZ0LnRpbWVyLCB0LnRpbWVyLmV4cGlyZXMsCi0JCQkJCQlIUlRJTUVSX01PREVfQUJTKTsKKwkJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmdC50aW1lciwgSFJUSU1FUl9NT0RFX0FCUyk7CiAJCQlpZiAoIWhydGltZXJfYWN0aXZlKCZ0LnRpbWVyKSkKIAkJCQl0LnRhc2sgPSBOVUxMOwogCkBAIC0xNDA0LDcgKzE0MDcsNyBAQAogCQlocnRpbWVyX2luaXRfb25fc3RhY2soJnRvLT50aW1lciwgQ0xPQ0tfUkVBTFRJTUUsCiAJCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CiAJCWhydGltZXJfaW5pdF9zbGVlcGVyKHRvLCBjdXJyZW50KTsKLQkJdG8tPnRpbWVyLmV4cGlyZXMgPSAqdGltZTsKKwkJaHJ0aW1lcl9zZXRfZXhwaXJlcygmdG8tPnRpbWVyLCAqdGltZSk7CiAJfQogCiAJcS5waV9zdGF0ZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCBjZGVjODNlLi4yYjQ2NWRmIDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTUxNyw3ICs1MTcsNyBAQAogCQlpZiAoIWJhc2UtPmZpcnN0KQogCQkJY29udGludWU7CiAJCXRpbWVyID0gcmJfZW50cnkoYmFzZS0+Zmlyc3QsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKLQkJZXhwaXJlcyA9IGt0aW1lX3N1Yih0aW1lci0+ZXhwaXJlcywgYmFzZS0+b2Zmc2V0KTsKKwkJZXhwaXJlcyA9IGt0aW1lX3N1YihocnRpbWVyX2dldF9leHBpcmVzKHRpbWVyKSwgYmFzZS0+b2Zmc2V0KTsKIAkJaWYgKGV4cGlyZXMudHY2NCA8IGNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCkKIAkJCWNwdV9iYXNlLT5leHBpcmVzX25leHQgPSBleHBpcmVzOwogCX0KQEAgLTUzOSwxMCArNTM5LDEwIEBACiAJCQkgICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UpCiB7CiAJa3RpbWVfdCAqZXhwaXJlc19uZXh0ID0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcykuZXhwaXJlc19uZXh0OwotCWt0aW1lX3QgZXhwaXJlcyA9IGt0aW1lX3N1Yih0aW1lci0+ZXhwaXJlcywgYmFzZS0+b2Zmc2V0KTsKKwlrdGltZV90IGV4cGlyZXMgPSBrdGltZV9zdWIoaHJ0aW1lcl9nZXRfZXhwaXJlcyh0aW1lciksIGJhc2UtPm9mZnNldCk7CiAJaW50IHJlczsKIAotCVdBUk5fT05fT05DRSh0aW1lci0+ZXhwaXJlcy50djY0IDwgMCk7CisJV0FSTl9PTl9PTkNFKGhydGltZXJfZ2V0X2V4cGlyZXNfdHY2NCh0aW1lcikgPCAwKTsKIAogCS8qCiAJICogV2hlbiB0aGUgY2FsbGJhY2sgaXMgcnVubmluZywgd2UgZG8gbm90IHJlcHJvZ3JhbSB0aGUgY2xvY2sgZXZlbnQKQEAgLTc5NSw3ICs3OTUsNyBAQAogCXU2NCBvcnVuID0gMTsKIAlrdGltZV90IGRlbHRhOwogCi0JZGVsdGEgPSBrdGltZV9zdWIobm93LCB0aW1lci0+ZXhwaXJlcyk7CisJZGVsdGEgPSBrdGltZV9zdWIobm93LCBocnRpbWVyX2dldF9leHBpcmVzKHRpbWVyKSk7CiAKIAlpZiAoZGVsdGEudHY2NCA8IDApCiAJCXJldHVybiAwOwpAQCAtODA3LDggKzgwNyw4IEBACiAJCXM2NCBpbmNyID0ga3RpbWVfdG9fbnMoaW50ZXJ2YWwpOwogCiAJCW9ydW4gPSBrdGltZV9kaXZucyhkZWx0YSwgaW5jcik7Ci0JCXRpbWVyLT5leHBpcmVzID0ga3RpbWVfYWRkX25zKHRpbWVyLT5leHBpcmVzLCBpbmNyICogb3J1bik7Ci0JCWlmICh0aW1lci0+ZXhwaXJlcy50djY0ID4gbm93LnR2NjQpCisJCWhydGltZXJfYWRkX2V4cGlyZXNfbnModGltZXIsIGluY3IgKiBvcnVuKTsKKwkJaWYgKGhydGltZXJfZ2V0X2V4cGlyZXNfdHY2NCh0aW1lcikgPiBub3cudHY2NCkKIAkJCXJldHVybiBvcnVuOwogCQkvKgogCQkgKiBUaGlzIChhbmQgdGhlIGt0aW1lX2FkZCgpIGJlbG93KSBpcyB0aGUKQEAgLTgxNiw3ICs4MTYsNyBAQAogCQkgKi8KIAkJb3J1bisrOwogCX0KLQl0aW1lci0+ZXhwaXJlcyA9IGt0aW1lX2FkZF9zYWZlKHRpbWVyLT5leHBpcmVzLCBpbnRlcnZhbCk7CisJaHJ0aW1lcl9hZGRfZXhwaXJlcyh0aW1lciwgaW50ZXJ2YWwpOwogCiAJcmV0dXJuIG9ydW47CiB9CkBAIC04NDgsNyArODQ4LDggQEAKIAkJICogV2UgZG9udCBjYXJlIGFib3V0IGNvbGxpc2lvbnMuIE5vZGVzIHdpdGgKIAkJICogdGhlIHNhbWUgZXhwaXJ5IHRpbWUgc3RheSB0b2dldGhlci4KIAkJICovCi0JCWlmICh0aW1lci0+ZXhwaXJlcy50djY0IDwgZW50cnktPmV4cGlyZXMudHY2NCkgeworCQlpZiAoaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KHRpbWVyKSA8CisJCQkJaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KGVudHJ5KSkgewogCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwogCQl9IGVsc2UgewogCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsKQEAgLTk0NSw5ICs5NDYsMTAgQEAKIH0KIAogLyoqCi0gKiBocnRpbWVyX3N0YXJ0IC0gKHJlKXN0YXJ0IGFuIHJlbGF0aXZlIHRpbWVyIG9uIHRoZSBjdXJyZW50IENQVQorICogaHJ0aW1lcl9zdGFydF9yYW5nZV9ucyAtIChyZSlzdGFydCBhbiBocnRpbWVyIG9uIHRoZSBjdXJyZW50IENQVQogICogQHRpbWVyOgl0aGUgdGltZXIgdG8gYmUgYWRkZWQKICAqIEB0aW06CWV4cGlyeSB0aW1lCisgKiBAZGVsdGFfbnM6CSJzbGFjayIgcmFuZ2UgZm9yIHRoZSB0aW1lcgogICogQG1vZGU6CWV4cGlyeSBtb2RlOiBhYnNvbHV0ZSAoSFJUSU1FUl9BQlMpIG9yIHJlbGF0aXZlIChIUlRJTUVSX1JFTCkKICAqCiAgKiBSZXR1cm5zOgpAQCAtOTU1LDcgKzk1Nyw4IEBACiAgKiAgMSB3aGVuIHRoZSB0aW1lciB3YXMgYWN0aXZlCiAgKi8KIGludAotaHJ0aW1lcl9zdGFydChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgdGltLCBjb25zdCBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQoraHJ0aW1lcl9zdGFydF9yYW5nZV9ucyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgdGltLCB1bnNpZ25lZCBsb25nIGRlbHRhX25zLAorCQkJY29uc3QgZW51bSBocnRpbWVyX21vZGUgbW9kZSkKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLCAqbmV3X2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTk4Myw3ICs5ODYsNyBAQAogI2VuZGlmCiAJfQogCi0JdGltZXItPmV4cGlyZXMgPSB0aW07CisJaHJ0aW1lcl9zZXRfZXhwaXJlc19yYW5nZV9ucyh0aW1lciwgdGltLCBkZWx0YV9ucyk7CiAKIAl0aW1lcl9zdGF0c19ocnRpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKIApAQCAtMTAxNiw4ICsxMDE5LDI2IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9zdGFydF9yYW5nZV9ucyk7CisKKy8qKgorICogaHJ0aW1lcl9zdGFydCAtIChyZSlzdGFydCBhbiBocnRpbWVyIG9uIHRoZSBjdXJyZW50IENQVQorICogQHRpbWVyOgl0aGUgdGltZXIgdG8gYmUgYWRkZWQKKyAqIEB0aW06CWV4cGlyeSB0aW1lCisgKiBAbW9kZToJZXhwaXJ5IG1vZGU6IGFic29sdXRlIChIUlRJTUVSX0FCUykgb3IgcmVsYXRpdmUgKEhSVElNRVJfUkVMKQorICoKKyAqIFJldHVybnM6CisgKiAgMCBvbiBzdWNjZXNzCisgKiAgMSB3aGVuIHRoZSB0aW1lciB3YXMgYWN0aXZlCisgKi8KK2ludAoraHJ0aW1lcl9zdGFydChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgdGltLCBjb25zdCBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQoreworCXJldHVybiBocnRpbWVyX3N0YXJ0X3JhbmdlX25zKHRpbWVyLCB0aW0sIDAsIG1vZGUpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9zdGFydCk7CiAKKwogLyoqCiAgKiBocnRpbWVyX3RyeV90b19jYW5jZWwgLSB0cnkgdG8gZGVhY3RpdmF0ZSBhIHRpbWVyCiAgKiBAdGltZXI6CWhydGltZXIgdG8gc3RvcApAQCAtMTA3Nyw3ICsxMDk4LDcgQEAKIAlrdGltZV90IHJlbTsKIAogCWJhc2UgPSBsb2NrX2hydGltZXJfYmFzZSh0aW1lciwgJmZsYWdzKTsKLQlyZW0gPSBrdGltZV9zdWIodGltZXItPmV4cGlyZXMsIGJhc2UtPmdldF90aW1lKCkpOworCXJlbSA9IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcodGltZXIpOwogCXVubG9ja19ocnRpbWVyX2Jhc2UodGltZXIsICZmbGFncyk7CiAKIAlyZXR1cm4gcmVtOwpAQCAtMTEwOSw3ICsxMTMwLDcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJdGltZXIgPSByYl9lbnRyeShiYXNlLT5maXJzdCwgc3RydWN0IGhydGltZXIsIG5vZGUpOwotCQkJZGVsdGEudHY2NCA9IHRpbWVyLT5leHBpcmVzLnR2NjQ7CisJCQlkZWx0YS50djY0ID0gaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KHRpbWVyKTsKIAkJCWRlbHRhID0ga3RpbWVfc3ViKGRlbHRhLCBiYXNlLT5nZXRfdGltZSgpKTsKIAkJCWlmIChkZWx0YS50djY0IDwgbWluZGVsdGEudHY2NCkKIAkJCQltaW5kZWx0YS50djY0ID0gZGVsdGEudHY2NDsKQEAgLTEzMTAsMTAgKzEzMzEsMjMgQEAKIAogCQkJdGltZXIgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CiAKLQkJCWlmIChiYXNlbm93LnR2NjQgPCB0aW1lci0+ZXhwaXJlcy50djY0KSB7CisJCQkvKgorCQkJICogVGhlIGltbWVkaWF0ZSBnb2FsIGZvciB1c2luZyB0aGUgc29mdGV4cGlyZXMgaXMKKwkJCSAqIG1pbmltaXppbmcgd2FrZXVwcywgbm90IHJ1bm5pbmcgdGltZXJzIGF0IHRoZQorCQkJICogZWFybGllc3QgaW50ZXJydXB0IGFmdGVyIHRoZWlyIHNvZnQgZXhwaXJhdGlvbi4KKwkJCSAqIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIHVzaW5nIGEgUHJpb3JpdHkgU2VhcmNoCisJCQkgKiBUcmVlLCB3aGljaCBjYW4gYW5zd2VyIGEgc3RhYmJpbmcgcXVlcnJ5IGZvcgorCQkJICogb3ZlcmxhcHBpbmcgaW50ZXJ2YWxzIGFuZCBpbnN0ZWFkIHVzZSB0aGUgc2ltcGxlCisJCQkgKiBCU1Qgd2UgYWxyZWFkeSBoYXZlLgorCQkJICogV2UgZG9uJ3QgYWRkIGV4dHJhIHdha2V1cHMgYnkgZGVsYXlpbmcgdGltZXJzIHRoYXQKKwkJCSAqIGFyZSByaWdodC1vZiBhIG5vdCB5ZXQgZXhwaXJlZCB0aW1lciwgYmVjYXVzZSB0aGF0CisJCQkgKiB0aW1lciB3aWxsIGhhdmUgdG8gdHJpZ2dlciBhIHdha2V1cCBhbnl3YXkuCisJCQkgKi8KKworCQkJaWYgKGJhc2Vub3cudHY2NCA8IGhydGltZXJfZ2V0X3NvZnRleHBpcmVzX3R2NjQodGltZXIpKSB7CiAJCQkJa3RpbWVfdCBleHBpcmVzOwogCi0JCQkJZXhwaXJlcyA9IGt0aW1lX3N1Yih0aW1lci0+ZXhwaXJlcywKKwkJCQlleHBpcmVzID0ga3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXModGltZXIpLAogCQkJCQkJICAgIGJhc2UtPm9mZnNldCk7CiAJCQkJaWYgKGV4cGlyZXMudHY2NCA8IGV4cGlyZXNfbmV4dC50djY0KQogCQkJCQlleHBpcmVzX25leHQgPSBleHBpcmVzOwpAQCAtMTM0OSw2ICsxMzgzLDMwIEBACiAJCXJhaXNlX3NvZnRpcnEoSFJUSU1FUl9TT0ZUSVJRKTsKIH0KIAorLyoqCisgKiBocnRpbWVyX3BlZWtfYWhlYWRfdGltZXJzIC0tIHJ1biBzb2Z0LWV4cGlyZWQgdGltZXJzIG5vdworICoKKyAqIGhydGltZXJfcGVla19haGVhZF90aW1lcnMgd2lsbCBwZWVrIGF0IHRoZSB0aW1lciBxdWV1ZSBvZgorICogdGhlIGN1cnJlbnQgY3B1IGFuZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHRpbWVycyBmb3Igd2hpY2gKKyAqIHRoZSBzb2Z0IGV4cGlyZXMgdGltZSBoYXMgcGFzc2VkLiBJZiBhbnkgc3VjaCB0aW1lcnMgZXhpc3QsCisgKiB0aGV5IGFyZSBydW4gaW1tZWRpYXRlbHkgYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIHRoZSB0aW1lciBxdWV1ZS4KKyAqCisgKi8KK3ZvaWQgaHJ0aW1lcl9wZWVrX2FoZWFkX3RpbWVycyh2b2lkKQoreworCXN0cnVjdCB0aWNrX2RldmljZSAqdGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGQgPSAmX19nZXRfY3B1X3Zhcih0aWNrX2NwdV9kZXZpY2UpOworCWlmICh0ZCAmJiB0ZC0+ZXZ0ZGV2KQorCQlocnRpbWVyX2ludGVycnVwdCh0ZC0+ZXZ0ZGV2KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIHJ1bl9ocnRpbWVyX3NvZnRpcnEoc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoKQogewogCXJ1bl9ocnRpbWVyX3BlbmRpbmcoJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcykpOwpAQCAtMTQwMyw5ICsxNDYxLDcgQEAKIAkJaWYgKCFiYXNlLT5maXJzdCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChiYXNlLT5nZXRfc29mdGlycV90aW1lKQotCQkJYmFzZS0+c29mdGlycV90aW1lID0gYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSgpOwotCQllbHNlIGlmIChnZXR0aW1lKSB7CisJCWlmIChnZXR0aW1lKSB7CiAJCQlocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoY3B1X2Jhc2UpOwogCQkJZ2V0dGltZSA9IDA7CiAJCX0KQEAgLTE0MTYsNyArMTQ3Miw4IEBACiAJCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CiAKIAkJCXRpbWVyID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhydGltZXIsIG5vZGUpOwotCQkJaWYgKGJhc2UtPnNvZnRpcnFfdGltZS50djY0IDw9IHRpbWVyLT5leHBpcmVzLnR2NjQpCisJCQlpZiAoYmFzZS0+c29mdGlycV90aW1lLnR2NjQgPD0KKwkJCQkJaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KHRpbWVyKSkKIAkJCQlicmVhazsKIAogCQkJaWYgKHRpbWVyLT5jYl9tb2RlID09IEhSVElNRVJfQ0JfU09GVElSUSkgewpAQCAtMTQ2NCw3ICsxNTIxLDcgQEAKIAogCWRvIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaHJ0aW1lcl9zdGFydCgmdC0+dGltZXIsIHQtPnRpbWVyLmV4cGlyZXMsIG1vZGUpOworCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXMoJnQtPnRpbWVyLCBtb2RlKTsKIAkJaWYgKCFocnRpbWVyX2FjdGl2ZSgmdC0+dGltZXIpKQogCQkJdC0+dGFzayA9IE5VTEw7CiAKQEAgLTE0ODYsNyArMTU0Myw3IEBACiAJc3RydWN0IHRpbWVzcGVjIHJtdDsKIAlrdGltZV90IHJlbTsKIAotCXJlbSA9IGt0aW1lX3N1Yih0aW1lci0+ZXhwaXJlcywgdGltZXItPmJhc2UtPmdldF90aW1lKCkpOworCXJlbSA9IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcodGltZXIpOwogCWlmIChyZW0udHY2NCA8PSAwKQogCQlyZXR1cm4gMDsKIAlybXQgPSBrdGltZV90b190aW1lc3BlYyhyZW0pOwpAQCAtMTUwNSw3ICsxNTYyLDcgQEAKIAogCWhydGltZXJfaW5pdF9vbl9zdGFjaygmdC50aW1lciwgcmVzdGFydC0+bmFub3NsZWVwLmluZGV4LAogCQkJCUhSVElNRVJfTU9ERV9BQlMpOwotCXQudGltZXIuZXhwaXJlcy50djY0ID0gcmVzdGFydC0+bmFub3NsZWVwLmV4cGlyZXM7CisJaHJ0aW1lcl9zZXRfZXhwaXJlc190djY0KCZ0LnRpbWVyLCByZXN0YXJ0LT5uYW5vc2xlZXAuZXhwaXJlcyk7CiAKIAlpZiAoZG9fbmFub3NsZWVwKCZ0LCBIUlRJTUVSX01PREVfQUJTKSkKIAkJZ290byBvdXQ7CkBAIC0xNTMwLDkgKzE1ODcsMTQgQEAKIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydDsKIAlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHQ7CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBzbGFjazsKKworCXNsYWNrID0gY3VycmVudC0+dGltZXJfc2xhY2tfbnM7CisJaWYgKHJ0X3Rhc2soY3VycmVudCkpCisJCXNsYWNrID0gMDsKIAogCWhydGltZXJfaW5pdF9vbl9zdGFjaygmdC50aW1lciwgY2xvY2tpZCwgbW9kZSk7Ci0JdC50aW1lci5leHBpcmVzID0gdGltZXNwZWNfdG9fa3RpbWUoKnJxdHApOworCWhydGltZXJfc2V0X2V4cGlyZXNfcmFuZ2VfbnMoJnQudGltZXIsIHRpbWVzcGVjX3RvX2t0aW1lKCpycXRwKSwgc2xhY2spOwogCWlmIChkb19uYW5vc2xlZXAoJnQsIG1vZGUpKQogCQlnb3RvIG91dDsKIApAQCAtMTU1Miw3ICsxNjE0LDcgQEAKIAlyZXN0YXJ0LT5mbiA9IGhydGltZXJfbmFub3NsZWVwX3Jlc3RhcnQ7CiAJcmVzdGFydC0+bmFub3NsZWVwLmluZGV4ID0gdC50aW1lci5iYXNlLT5pbmRleDsKIAlyZXN0YXJ0LT5uYW5vc2xlZXAucm10cCA9IHJtdHA7Ci0JcmVzdGFydC0+bmFub3NsZWVwLmV4cGlyZXMgPSB0LnRpbWVyLmV4cGlyZXMudHY2NDsKKwlyZXN0YXJ0LT5uYW5vc2xlZXAuZXhwaXJlcyA9IGhydGltZXJfZ2V0X2V4cGlyZXNfdHY2NCgmdC50aW1lcik7CiAKIAlyZXQgPSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOwogb3V0OgpAQCAtMTY4OCw5ICsxNzUwLDExIEBACiAJbmV3X2Jhc2UgPSAmZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CiAKIAl0aWNrX2NhbmNlbF9zY2hlZF90aW1lcihjcHUpOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzcGluX2xvY2soJm5ld19iYXNlLT5sb2NrKTsKKwkvKgorCSAqIFRoZSBjYWxsZXIgaXMgZ2xvYmFsbHkgc2VyaWFsaXplZCBhbmQgbm9ib2R5IGVsc2UKKwkgKiB0YWtlcyB0d28gbG9ja3MgYXQgb25jZSwgZGVhZGxvY2sgaXMgbm90IHBvc3NpYmxlLgorCSAqLworCXNwaW5fbG9ja19pcnEoJm5ld19iYXNlLT5sb2NrKTsKIAlzcGluX2xvY2tfbmVzdGVkKCZvbGRfYmFzZS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspIHsKQEAgLTE3MDMsOCArMTc2Nyw3IEBACiAJCXJhaXNlID0gMTsKIAogCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7Ci0Jc3Bpbl91bmxvY2soJm5ld19iYXNlLT5sb2NrKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJcHV0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CiAKIAlpZiAocmFpc2UpCkBAIC0xNzUzLDMgKzE4MTYsMTAzIEBACiAjZW5kaWYKIH0KIAorLyoqCisgKiBzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UgLSBzbGVlcCB1bnRpbCB0aW1lb3V0CisgKiBAZXhwaXJlczoJdGltZW91dCB2YWx1ZSAoa3RpbWVfdCkKKyAqIEBkZWx0YToJc2xhY2sgaW4gZXhwaXJlcyB0aW1lb3V0IChrdGltZV90KQorICogQG1vZGU6CXRpbWVyIG1vZGUsIEhSVElNRVJfTU9ERV9BQlMgb3IgSFJUSU1FUl9NT0RFX1JFTAorICoKKyAqIE1ha2UgdGhlIGN1cnJlbnQgdGFzayBzbGVlcCB1bnRpbCB0aGUgZ2l2ZW4gZXhwaXJ5IHRpbWUgaGFzCisgKiBlbGFwc2VkLiBUaGUgcm91dGluZSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSB1bmxlc3MKKyAqIHRoZSBjdXJyZW50IHRhc2sgc3RhdGUgaGFzIGJlZW4gc2V0IChzZWUgc2V0X2N1cnJlbnRfc3RhdGUoKSkuCisgKgorICogVGhlIEBkZWx0YSBhcmd1bWVudCBnaXZlcyB0aGUga2VybmVsIHRoZSBmcmVlZG9tIHRvIHNjaGVkdWxlIHRoZQorICogYWN0dWFsIHdha2V1cCB0byBhIHRpbWUgdGhhdCBpcyBib3RoIHBvd2VyIGFuZCBwZXJmb3JtYW5jZSBmcmllbmRseS4KKyAqIFRoZSBrZXJuZWwgZ2l2ZSB0aGUgbm9ybWFsIGJlc3QgZWZmb3J0IGJlaGF2aW9yIGZvciAiQGV4cGlyZXMrQGRlbHRhIiwKKyAqIGJ1dCBtYXkgZGVjaWRlIHRvIGZpcmUgdGhlIHRpbWVyIGVhcmxpZXIsIGJ1dCBubyBlYXJsaWVyIHRoYW4gQGV4cGlyZXMuCisgKgorICogWW91IGNhbiBzZXQgdGhlIHRhc2sgc3RhdGUgYXMgZm9sbG93cyAtCisgKgorICogJVRBU0tfVU5JTlRFUlJVUFRJQkxFIC0gYXQgbGVhc3QgQHRpbWVvdXQgdGltZSBpcyBndWFyYW50ZWVkIHRvCisgKiBwYXNzIGJlZm9yZSB0aGUgcm91dGluZSByZXR1cm5zLgorICoKKyAqICVUQVNLX0lOVEVSUlVQVElCTEUgLSB0aGUgcm91dGluZSBtYXkgcmV0dXJuIGVhcmx5IGlmIGEgc2lnbmFsIGlzCisgKiBkZWxpdmVyZWQgdG8gdGhlIGN1cnJlbnQgdGFzay4KKyAqCisgKiBUaGUgY3VycmVudCB0YXNrIHN0YXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgVEFTS19SVU5OSU5HIHdoZW4gdGhpcworICogcm91dGluZSByZXR1cm5zLgorICoKKyAqIFJldHVybnMgMCB3aGVuIHRoZSB0aW1lciBoYXMgZXhwaXJlZCBvdGhlcndpc2UgLUVJTlRSCisgKi8KK2ludCBfX3NjaGVkIHNjaGVkdWxlX2hydGltZW91dF9yYW5nZShrdGltZV90ICpleHBpcmVzLCB1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgICAgIGNvbnN0IGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUpCit7CisJc3RydWN0IGhydGltZXJfc2xlZXBlciB0OworCisJLyoKKwkgKiBPcHRpbWl6ZSB3aGVuIGEgemVybyB0aW1lb3V0IHZhbHVlIGlzIGdpdmVuLiBJdCBkb2VzIG5vdAorCSAqIG1hdHRlciB3aGV0aGVyIHRoaXMgaXMgYW4gYWJzb2x1dGUgb3IgYSByZWxhdGl2ZSB0aW1lLgorCSAqLworCWlmIChleHBpcmVzICYmICFleHBpcmVzLT50djY0KSB7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBBIE5VTEwgcGFyYW1ldGVyIG1lYW5zICJpbmlmaW50ZSIKKwkgKi8KKwlpZiAoIWV4cGlyZXMpIHsKKwkJc2NoZWR1bGUoKTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQlyZXR1cm4gLUVJTlRSOworCX0KKworCWhydGltZXJfaW5pdF9vbl9zdGFjaygmdC50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBtb2RlKTsKKwlocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKCZ0LnRpbWVyLCAqZXhwaXJlcywgZGVsdGEpOworCisJaHJ0aW1lcl9pbml0X3NsZWVwZXIoJnQsIGN1cnJlbnQpOworCisJaHJ0aW1lcl9zdGFydF9leHBpcmVzKCZ0LnRpbWVyLCBtb2RlKTsKKwlpZiAoIWhydGltZXJfYWN0aXZlKCZ0LnRpbWVyKSkKKwkJdC50YXNrID0gTlVMTDsKKworCWlmIChsaWtlbHkodC50YXNrKSkKKwkJc2NoZWR1bGUoKTsKKworCWhydGltZXJfY2FuY2VsKCZ0LnRpbWVyKTsKKwlkZXN0cm95X2hydGltZXJfb25fc3RhY2soJnQudGltZXIpOworCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcmV0dXJuICF0LnRhc2sgPyAwIDogLUVJTlRSOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKTsKKworLyoqCisgKiBzY2hlZHVsZV9ocnRpbWVvdXQgLSBzbGVlcCB1bnRpbCB0aW1lb3V0CisgKiBAZXhwaXJlczoJdGltZW91dCB2YWx1ZSAoa3RpbWVfdCkKKyAqIEBtb2RlOgl0aW1lciBtb2RlLCBIUlRJTUVSX01PREVfQUJTIG9yIEhSVElNRVJfTU9ERV9SRUwKKyAqCisgKiBNYWtlIHRoZSBjdXJyZW50IHRhc2sgc2xlZXAgdW50aWwgdGhlIGdpdmVuIGV4cGlyeSB0aW1lIGhhcworICogZWxhcHNlZC4gVGhlIHJvdXRpbmUgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgdW5sZXNzCisgKiB0aGUgY3VycmVudCB0YXNrIHN0YXRlIGhhcyBiZWVuIHNldCAoc2VlIHNldF9jdXJyZW50X3N0YXRlKCkpLgorICoKKyAqIFlvdSBjYW4gc2V0IHRoZSB0YXNrIHN0YXRlIGFzIGZvbGxvd3MgLQorICoKKyAqICVUQVNLX1VOSU5URVJSVVBUSUJMRSAtIGF0IGxlYXN0IEB0aW1lb3V0IHRpbWUgaXMgZ3VhcmFudGVlZCB0bworICogcGFzcyBiZWZvcmUgdGhlIHJvdXRpbmUgcmV0dXJucy4KKyAqCisgKiAlVEFTS19JTlRFUlJVUFRJQkxFIC0gdGhlIHJvdXRpbmUgbWF5IHJldHVybiBlYXJseSBpZiBhIHNpZ25hbCBpcworICogZGVsaXZlcmVkIHRvIHRoZSBjdXJyZW50IHRhc2suCisgKgorICogVGhlIGN1cnJlbnQgdGFzayBzdGF0ZSBpcyBndWFyYW50ZWVkIHRvIGJlIFRBU0tfUlVOTklORyB3aGVuIHRoaXMKKyAqIHJvdXRpbmUgcmV0dXJucy4KKyAqCisgKiBSZXR1cm5zIDAgd2hlbiB0aGUgdGltZXIgaGFzIGV4cGlyZWQgb3RoZXJ3aXNlIC1FSU5UUgorICovCitpbnQgX19zY2hlZCBzY2hlZHVsZV9ocnRpbWVvdXQoa3RpbWVfdCAqZXhwaXJlcywKKwkJCSAgICAgICBjb25zdCBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQoreworCXJldHVybiBzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UoZXhwaXJlcywgMCwgbW9kZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzY2hlZHVsZV9ocnRpbWVvdXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9hdXRvcHJvYmUuYyBiL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMKaW5kZXggNTMzMDY4Yy4uY2MwZjczMiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9hdXRvcHJvYmUuYworKysgYi9rZXJuZWwvaXJxL2F1dG9wcm9iZS5jCkBAIC0zMCwxNyArMzAsMTYgQEAKIHVuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uKHZvaWQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IGk7CiAKIAltdXRleF9sb2NrKCZwcm9iaW5nX2FjdGl2ZSk7CiAJLyoKIAkgKiBzb21ldGhpbmcgbWF5IGhhdmUgZ2VuZXJhdGVkIGFuIGlycSBsb25nIGFnbyBhbmQgd2Ugd2FudCB0bwogCSAqIGZsdXNoIHN1Y2ggYSBsb25nc3RhbmRpbmcgaXJxIGJlZm9yZSBjb25zaWRlcmluZyBpdCBhcyBzcHVyaW91cy4KIAkgKi8KLQlmb3IgKGkgPSBOUl9JUlFTLTE7IGkgPiAwOyBpLS0pIHsKLQkJZGVzYyA9IGlycV9kZXNjICsgaTsKLQorCWZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaSwgZGVzYykgewogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJaWYgKCFkZXNjLT5hY3Rpb24gJiYgIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9QUk9CRSkpIHsKIAkJCS8qCkBAIC02OCw5ICs2Nyw3IEBACiAJICogKHdlIG11c3Qgc3RhcnR1cCBhZ2FpbiBoZXJlIGJlY2F1c2UgaWYgYSBsb25nc3RhbmRpbmcgaXJxCiAJICogaGFwcGVuZWQgaW4gdGhlIHByZXZpb3VzIHN0YWdlLCBpdCBtYXkgaGF2ZSBtYXNrZWQgaXRzZWxmKQogCSAqLwotCWZvciAoaSA9IE5SX0lSUVMtMTsgaSA+IDA7IGktLSkgewotCQlkZXNjID0gaXJxX2Rlc2MgKyBpOwotCisJZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpLCBkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlpZiAoIWRlc2MtPmFjdGlvbiAmJiAhKGRlc2MtPnN0YXR1cyAmIElSUV9OT1BST0JFKSkgewogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9BVVRPREVURUNUIHwgSVJRX1dBSVRJTkc7CkBAIC04OCwxMSArODUsNyBAQAogCS8qCiAJICogTm93IGZpbHRlciBvdXQgYW55IG9idmlvdXNseSBzcHVyaW91cyBpbnRlcnJ1cHRzCiAJICovCi0JbWFzayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCi0JCWRlc2MgPSBpcnFfZGVzYyArIGk7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgewogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwogCkBAIC0xMjYsMTQgKzExOSwxMSBAQAogICovCiB1bnNpZ25lZCBpbnQgcHJvYmVfaXJxX21hc2sodW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IHN0YXR1cywgbWFzayA9IDA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwogCi0JbWFzayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7Ci0JCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0KKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKQEAgLTE3MSwyMCArMTYxLDE5IEBACiAgKi8KIGludCBwcm9iZV9pcnFfb2ZmKHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWludCBpLCBpcnFfZm91bmQgPSAwLCBucl9pcnFzID0gMDsKKwlpbnQgaSwgaXJxX2ZvdW5kID0gMCwgbnJfb2ZfaXJxcyA9IDA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaTsKLQkJdW5zaWduZWQgaW50IHN0YXR1czsKLQorCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKIAkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCXN0YXR1cyA9IGRlc2MtPnN0YXR1czsKIAogCQlpZiAoc3RhdHVzICYgSVJRX0FVVE9ERVRFQ1QpIHsKIAkJCWlmICghKHN0YXR1cyAmIElSUV9XQUlUSU5HKSkgewotCQkJCWlmICghbnJfaXJxcykKKwkJCQlpZiAoIW5yX29mX2lycXMpCiAJCQkJCWlycV9mb3VuZCA9IGk7Ci0JCQkJbnJfaXJxcysrOworCQkJCW5yX29mX2lycXMrKzsKIAkJCX0KIAkJCWRlc2MtPnN0YXR1cyA9IHN0YXR1cyAmIH5JUlFfQVVUT0RFVEVDVDsKIAkJCWRlc2MtPmNoaXAtPnNodXRkb3duKGkpOwpAQCAtMTkzLDcgKzE4Miw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJvYmluZ19hY3RpdmUpOwogCi0JaWYgKG5yX2lycXMgPiAxKQorCWlmIChucl9vZl9pcnFzID4gMSkKIAkJaXJxX2ZvdW5kID0gLWlycV9mb3VuZDsKIAogCXJldHVybiBpcnFfZm91bmQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2NoaXAuYyBiL2tlcm5lbC9pcnEvY2hpcC5jCmluZGV4IDNjZDQ0MWUuLjEwYjUwOTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC0yNCwxNiArMjQsMTUgQEAKICAqLwogdm9pZCBkeW5hbWljX2lycV9pbml0KHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gaW5pdGlhbGl6ZSBpbnZhbGlkIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm47CiAJfQogCiAJLyogRW5zdXJlIHdlIGRvbid0IGhhdmUgbGVmdCBvdmVyIHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgdXNlIG9mIHRoaXMgaXJxICovCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CkBAIC01NywxNSArNTYsMTQgQEAKICAqLwogdm9pZCBkeW5hbWljX2lycV9jbGVhbnVwKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gY2xlYW51cCBpbnZhbGlkIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm47CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJaWYgKGRlc2MtPmFjdGlvbikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC03OCw2ICs3Niw3IEBACiAJZGVzYy0+Y2hpcF9kYXRhID0gTlVMTDsKIAlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnE7CiAJZGVzYy0+Y2hpcCA9ICZub19pcnFfY2hpcDsKKwlkZXNjLT5uYW1lID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTg5LDEwICs4OCwxMCBAQAogICovCiBpbnQgc2V0X2lycV9jaGlwKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCVdBUk4oMSwgS0VSTl9FUlIgIlRyeWluZyB0byBpbnN0YWxsIGNoaXAgZm9yIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMDAsNyArOTksNiBAQAogCWlmICghY2hpcCkKIAkJY2hpcCA9ICZub19pcnFfY2hpcDsKIAotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWlycV9jaGlwX3NldF9kZWZhdWx0cyhjaGlwKTsKIAlkZXNjLT5jaGlwID0gY2hpcDsKQEAgLTExMSwyNyArMTA5LDI3IEBACiBFWFBPUlRfU1lNQk9MKHNldF9pcnFfY2hpcCk7CiAKIC8qKgotICoJc2V0X2lycV90eXBlIC0gc2V0IHRoZSBpcnEgdHlwZSBmb3IgYW4gaXJxCisgKglzZXRfaXJxX3R5cGUgLSBzZXQgdGhlIGlycSB0cmlnZ2VyIHR5cGUgZm9yIGFuIGlycQogICoJQGlycToJaXJxIG51bWJlcgotICoJQHR5cGU6CWludGVycnVwdCB0eXBlIC0gc2VlIGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKyAqCUB0eXBlOglJUlFfVFlQRV97TEVWRUwsRURHRX1fKiB2YWx1ZSAtIHNlZSBpbmNsdWRlL2xpbnV4L2lycS5oCiAgKi8KIGludCBzZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gLUVOWElPOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIHNldCBpcnEgdHlwZSBmb3IgSVJRJWRcbiIsIGlycSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQlpZiAoZGVzYy0+Y2hpcC0+c2V0X3R5cGUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJcmV0ID0gZGVzYy0+Y2hpcC0+c2V0X3R5cGUoaXJxLCB0eXBlKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCX0KKwlpZiAodHlwZSA9PSBJUlFfVFlQRV9OT05FKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gX19pcnFfc2V0X3RyaWdnZXIoZGVzYywgaXJxLCB0eXBlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X2lycV90eXBlKTsKQEAgLTE0NSwxNiArMTQzLDE1IEBACiAgKi8KIGludCBzZXRfaXJxX2RhdGEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIlRyeWluZyB0byBpbnN0YWxsIGNvbnRyb2xsZXIgZGF0YSBmb3IgSVJRJWRcbiIsIGlycSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPmhhbmRsZXJfZGF0YSA9IGRhdGE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTcxLDE1ICsxNjgsMTUgQEAKICAqLwogaW50IHNldF9pcnFfbXNpKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfZGVzYyAqZW50cnkpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJUcnlpbmcgdG8gaW5zdGFsbCBtc2kgZGF0YSBmb3IgSVJRJWRcbiIsIGlycSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPm1zaV9kZXNjID0gZW50cnk7CiAJaWYgKGVudHJ5KQpAQCAtMTk3LDEwICsxOTQsMTYgQEAKICAqLwogaW50IHNldF9pcnFfY2hpcF9kYXRhKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTIHx8ICFkZXNjLT5jaGlwKSB7CisJaWYgKCFkZXNjKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlRyeWluZyB0byBpbnN0YWxsIGNoaXAgZGF0YSBmb3IgSVJRJWRcbiIsIGlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZGVzYy0+Y2hpcCkgewogCQlwcmludGsoS0VSTl9FUlIgIkJVRzogYmFkIHNldF9pcnFfY2hpcF9kYXRhKElSUSMlZClcbiIsIGlycSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIxOCw3ICsyMjEsNyBAQAogICovCiBzdGF0aWMgdm9pZCBkZWZhdWx0X2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKIAlkZXNjLT5zdGF0dXMgJj0gfklSUV9NQVNLRUQ7CkBAIC0yMzYsOCArMjM5LDkgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X3N0YXJ0dXAodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY1tpcnFdLmNoaXAtPmVuYWJsZShpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKKwlkZXNjLT5jaGlwLT5lbmFibGUoaXJxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ2LDcgKzI1MCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRlZmF1bHRfc2h1dGRvd24odW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwogCWRlc2MtPnN0YXR1cyB8PSBJUlFfTUFTS0VEOwpAQCAtMzA1LDE0ICszMDksMTMgQEAKIHsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKLQljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCWlmICh1bmxpa2VseSghYWN0aW9uIHx8IChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKQEAgLTM0NCw3ICszNDcsNiBAQAogdm9pZAogaGFuZGxlX2xldmVsX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIApAQCAtMzU0LDcgKzM1Niw3IEBACiAJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7Ci0Ja3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAkvKgogCSAqIElmIGl0cyBkaXNhYmxlZCBvciBubyBhY3Rpb24gYXZhaWxhYmxlCkBAIC0zOTIsNyArMzk0LDYgQEAKIHZvaWQKIGhhbmRsZV9mYXN0ZW9pX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIApAQCAtNDAyLDcgKzQwMyw3IEBACiAJCWdvdG8gb3V0OwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qCiAJICogSWYgaXRzIGRpc2FibGVkIG9yIG5vIGFjdGlvbiBhdmFpbGFibGUKQEAgLTQ1MSw4ICs0NTIsNiBAQAogdm9pZAogaGFuZGxlX2VkZ2VfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CkBAIC00NjgsOCArNDY3LDcgQEAKIAkJbWFza19hY2tfaXJxKGRlc2MsIGlycSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0KLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qIFN0YXJ0IGhhbmRsaW5nIHRoZSBpcnEgKi8KIAlkZXNjLT5jaGlwLT5hY2soaXJxKTsKQEAgLTUyNCw3ICs1MjIsNyBAQAogewogCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CiAKLQlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCWlmIChkZXNjLT5jaGlwLT5hY2spCiAJCWRlc2MtPmNoaXAtPmFjayhpcnEpOwpAQCAtNTQxLDE3ICs1MzksMTUgQEAKIF9fc2V0X2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIGlycV9mbG93X2hhbmRsZXJfdCBoYW5kbGUsIGludCBpc19jaGFpbmVkLAogCQkgIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJUcnlpbmcgdG8gaW5zdGFsbCB0eXBlIGNvbnRyb2wgZm9yIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm47CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCiAJaWYgKCFoYW5kbGUpCiAJCWhhbmRsZSA9IGhhbmRsZV9iYWRfaXJxOwogCWVsc2UgaWYgKGRlc2MtPmNoaXAgPT0gJm5vX2lycV9jaGlwKSB7CkBAIC01ODMsNyArNTc5LDcgQEAKIAkJZGVzYy0+c3RhdHVzICY9IH5JUlFfRElTQUJMRUQ7CiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUIHwgSVJRX05PUFJPQkU7CiAJCWRlc2MtPmRlcHRoID0gMDsKLQkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaXJxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQpAQCAtNjA2LDE3ICs2MDIsMTQgQEAKIAogdm9pZCBfX2luaXQgc2V0X2lycV9ub3Byb2JlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBtYXJrIElSUSVkIG5vbi1wcm9iZWFibGVcbiIsIGlycSk7Ci0KIAkJcmV0dXJuOwogCX0KIAotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzIHw9IElSUV9OT1BST0JFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKQEAgLTYyNCwxNyArNjE3LDE0IEBACiAKIHZvaWQgX19pbml0IHNldF9pcnFfcHJvYmUodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIG1hcmsgSVJRJWQgcHJvYmVhYmxlXG4iLCBpcnEpOwotCiAJCXJldHVybjsKIAl9CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX05PUFJPQkU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggNWZhNjE5OC4uYzgxNWI0MiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0yNSwxMSArMjUsMTAgQEAKICAqCiAgKiBIYW5kbGVzIHNwdXJpb3VzIGFuZCB1bmhhbmRsZWQgSVJRJ3MuIEl0IGFsc28gcHJpbnRzIGEgZGVidWdtZXNzYWdlLgogICovCi12b2lkCi1oYW5kbGVfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit2b2lkIGhhbmRsZV9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlwcmludF9pcnFfZGVzYyhpcnEsIGRlc2MpOwotCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCWFja19iYWRfaXJxKGlycSk7CiB9CiAKQEAgLTQ3LDYgKzQ2LDkgQEAKICAqCiAgKiBDb250cm9sbGVyIG1hcHBpbmdzIGZvciBhbGwgaW50ZXJydXB0IHNvdXJjZXM6CiAgKi8KK2ludCBucl9pcnFzID0gTlJfSVJRUzsKK0VYUE9SVF9TWU1CT0xfR1BMKG5yX2lycXMpOworCiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSB7CiAJWzAgLi4uIE5SX0lSUVMtMV0gPSB7CiAJCS5zdGF0dXMgPSBJUlFfRElTQUJMRUQsCkBAIC02Niw3ICs2OCw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFja19iYWQodW5zaWduZWQgaW50IGlycSkKIHsKLQlwcmludF9pcnFfZGVzYyhpcnEsIGlycV9kZXNjICsgaXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJcHJpbnRfaXJxX2Rlc2MoaXJxLCBkZXNjKTsKIAlhY2tfYmFkX2lycShpcnEpOwogfQogCkBAIC0xMzEsOCArMTM1LDYgQEAKIAlpcnFyZXR1cm5fdCByZXQsIHJldHZhbCA9IElSUV9OT05FOwogCXVuc2lnbmVkIGludCBzdGF0dXMgPSAwOwogCi0JaGFuZGxlX2R5bmFtaWNfdGljayhhY3Rpb24pOwotCiAJaWYgKCEoYWN0aW9uLT5mbGFncyAmIElSUUZfRElTQUJMRUQpKQogCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIApAQCAtMTY1LDExICsxNjcsMTIgQEAKICAqLwogdW5zaWduZWQgaW50IF9fZG9fSVJRKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAotCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOworCiAJaWYgKENIRUNLX0lSUV9QRVJfQ1BVKGRlc2MtPnN0YXR1cykpIHsKIAkJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIApAQCAtMjU2LDggKzI1OSw4IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwogCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAvKgogICogbG9ja2RlcDogd2Ugd2FudCB0byBoYW5kbGUgYWxsIGlycV9kZXNjIGxvY2tzIGFzIGEgc2luZ2xlIGxvY2stY2xhc3M6CiAgKi8KQEAgLTI2NSwxMCArMjY4LDEwIEBACiAKIHZvaWQgZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcyh2b2lkKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCi0JCWxvY2tkZXBfc2V0X2NsYXNzKCZpcnFfZGVzY1tpXS5sb2NrLCAmaXJxX2Rlc2NfbG9ja19jbGFzcyk7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2MtPmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKIH0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2ludGVybmFscy5oIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaAppbmRleCAwOGE4NDlhLi5jOTc2N2U2IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKQEAgLTEwLDEyICsxMCwxNSBAQAogLyogU2V0IGRlZmF1bHQgaGFuZGxlcjogKi8KIGV4dGVybiB2b2lkIGNvbXBhdF9pcnFfY2hpcF9zZXRfZGVmYXVsdF9oYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CiAKK2V4dGVybiBpbnQgX19pcnFfc2V0X3RyaWdnZXIoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gdm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CiBleHRlcm4gdm9pZCByZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsCiAJCQkJCSBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCA2MGM0OWUzLi5jNDk4YTFiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTMxLDEwICszMSwxMCBAQAogICovCiB2b2lkIHN5bmNocm9uaXplX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykKKwlpZiAoIWRlc2MpCiAJCXJldHVybjsKIAogCWRvIHsKQEAgLTY0LDcgKzY0LDcgQEAKICAqLwogaW50IGlycV9jYW5fc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWlmIChDSEVDS19JUlFfUEVSX0NQVShkZXNjLT5zdGF0dXMpIHx8ICFkZXNjLT5jaGlwIHx8CiAJICAgICFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCkBAIC04MSwxOCArODEsMTcgQEAKICAqLwogaW50IGlycV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGNwdW1hc2spCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWlmICghZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNldF9iYWxhbmNlX2lycV9hZmZpbml0eShpcnEsIGNwdW1hc2spOwotCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKLQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUENOVFhUKSB7CisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BDTlRYVCB8fCBkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlkZXNjLT5hZmZpbml0eSA9IGNwdW1hc2s7CiAJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2spOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlCkBAIC0xMTEsMTYgKzExMCwxNyBAQAogaW50IGlycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKIHsKIAljcHVtYXNrX3QgbWFzazsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAlpZiAoIWlycV9jYW5fc2V0X2FmZmluaXR5KGlycSkpCiAJCXJldHVybiAwOwogCiAJY3B1c19hbmQobWFzaywgY3B1X29ubGluZV9tYXAsIGlycV9kZWZhdWx0X2FmZmluaXR5KTsKIAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotCWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOwogCi0Jc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KGlycSwgbWFzayk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTE0MCwxMCArMTQwLDEwIEBACiAgKi8KIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKQorCWlmICghZGVzYykKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKQEAgLTE2OSw5ICsxNjksOSBAQAogICovCiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykKKwlpZiAoIWRlc2MpCiAJCXJldHVybjsKIAogCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwpAQCAtMjExLDEwICsyMTEsMTAgQEAKICAqLwogdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKQorCWlmICghZGVzYykKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKQEAgLTIyMyw5ICsyMjMsOSBAQAogfQogRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxKTsKIAotaW50IHNldF9pcnFfd2FrZV9yZWFsKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3N0YXRpYyBpbnQgc2V0X2lycV93YWtlX3JlYWwodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJaW50IHJldCA9IC1FTlhJTzsKIAogCWlmIChkZXNjLT5jaGlwLT5zZXRfd2FrZSkKQEAgLTI0OCw3ICsyNDgsNyBAQAogICovCiBpbnQgc2V0X2lycV93YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKQEAgLTI4OCwxMiArMjg4LDE2IEBACiAgKi8KIGludCBjYW5fcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncykKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCBpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9OT1JFUVVFU1QpCisJaWYgKCFkZXNjKQogCQlyZXR1cm4gMDsKIAotCWFjdGlvbiA9IGlycV9kZXNjW2lycV0uYWN0aW9uOworCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTk9SRVFVRVNUKQorCQlyZXR1cm4gMDsKKworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAlpZiAoYWN0aW9uKQogCQlpZiAoaXJxZmxhZ3MgJiBhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpCiAJCQlhY3Rpb24gPSBOVUxMOwpAQCAtMzEyLDEwICszMTYsMTEgQEAKIAkJZGVzYy0+aGFuZGxlX2lycSA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgX19pcnFfc2V0X3RyaWdnZXIoc3RydWN0IGlycV9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxLAoraW50IF9faXJxX3NldF90cmlnZ2VyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwKIAkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlpbnQgcmV0OworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGRlc2MtPmNoaXA7CiAKIAlpZiAoIWNoaXAgfHwgIWNoaXAtPnNldF90eXBlKSB7CiAJCS8qCkBAIC0zMzMsNiArMzM4LDExIEBACiAJCXByX2Vycigic2V0dGluZyB0cmlnZ2VyIG1vZGUgJWQgZm9yIGlycSAldSBmYWlsZWQgKCVwRilcbiIsCiAJCQkJKGludCkoZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyksCiAJCQkJaXJxLCBjaGlwLT5zZXRfdHlwZSk7CisJZWxzZSB7CisJCS8qIG5vdGUgdGhhdCBJUlFGX1RSSUdHRVJfTUFTSyA9PSBJUlFfVFlQRV9TRU5TRV9NQVNLICovCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKKwkJZGVzYy0+c3RhdHVzIHw9IGZsYWdzICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzQxLDE2ICszNTEsMTYgQEAKICAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGFuIGlycWFjdGlvbiAtIHR5cGljYWxseSB1c2VkIHRvCiAgKiBhbGxvY2F0ZSBzcGVjaWFsIGludGVycnVwdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgYXJjaGl0ZWN0dXJlLgogICovCi1pbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKm5ldykKK3N0YXRpYyBpbnQKK19fc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqIGRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKm5ldykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICpvbGQsICoqcDsKIAljb25zdCBjaGFyICpvbGRfbmFtZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc2hhcmVkID0gMDsKIAlpbnQgcmV0OwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKQorCWlmICghZGVzYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZGVzYy0+Y2hpcCA9PSAmbm9faXJxX2NoaXApCkBAIC00MTEsNyArNDIxLDcgQEAKIAogCQkvKiBTZXR1cCB0aGUgdHlwZSAobGV2ZWwsIGVkZ2UgcG9sYXJpdHkpIGlmIGNvbmZpZ3VyZWQ6ICovCiAJCWlmIChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spIHsKLQkJCXJldCA9IF9faXJxX3NldF90cmlnZ2VyKGRlc2MtPmNoaXAsIGlycSwgbmV3LT5mbGFncyk7CisJCQlyZXQgPSBfX2lycV9zZXRfdHJpZ2dlcihkZXNjLCBpcnEsIG5ldy0+ZmxhZ3MpOwogCiAJCQlpZiAocmV0KSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtNDMwLDE2ICs0NDAsMjEgQEAKIAkJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX05PQVVUT0VOKSkgewogCQkJZGVzYy0+ZGVwdGggPSAwOwogCQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfRElTQUJMRUQ7Ci0JCQlpZiAoZGVzYy0+Y2hpcC0+c3RhcnR1cCkKLQkJCQlkZXNjLT5jaGlwLT5zdGFydHVwKGlycSk7Ci0JCQllbHNlCi0JCQkJZGVzYy0+Y2hpcC0+ZW5hYmxlKGlycSk7CisJCQlkZXNjLT5jaGlwLT5zdGFydHVwKGlycSk7CiAJCX0gZWxzZQogCQkJLyogVW5kbyBuZXN0ZWQgZGlzYWJsZXM6ICovCiAJCQlkZXNjLT5kZXB0aCA9IDE7CiAKIAkJLyogU2V0IGRlZmF1bHQgYWZmaW5pdHkgbWFzayBvbmNlIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgKi8KIAkJaXJxX3NlbGVjdF9hZmZpbml0eShpcnEpOworCisJfSBlbHNlIGlmICgobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQorCQkJJiYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykKKwkJCQkhPSAoZGVzYy0+c3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykpIHsKKwkJLyogaG9wZSB0aGUgaGFuZGxlciB3b3JrcyB3aXRoIHRoZSBhY3R1YWwgdHJpZ2dlciBtb2RlLi4uICovCisJCXByX3dhcm5pbmcoIklSUSAlZCB1c2VzIHRyaWdnZXIgbW9kZSAlZDsgcmVxdWVzdGVkICVkXG4iLAorCQkJCWlycSwgKGludCkoZGVzYy0+c3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSyksCisJCQkJKGludCkobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKSk7CiAJfQogCiAJKnAgPSBuZXc7CkBAIC00NjQsNyArNDc5LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAKIAluZXctPmlycSA9IGlycTsKLQlyZWdpc3Rlcl9pcnFfcHJvYyhpcnEpOworCXJlZ2lzdGVyX2lycV9wcm9jKGlycSwgZGVzYyk7CiAJbmV3LT5kaXIgPSBOVUxMOwogCXJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIG5ldyk7CiAKQEAgLTQ4NCw2ICs0OTksMjAgQEAKIH0KIAogLyoqCisgKglzZXR1cF9pcnEgLSBzZXR1cCBhbiBpbnRlcnJ1cHQKKyAqCUBpcnE6IEludGVycnVwdCBsaW5lIHRvIHNldHVwCisgKglAYWN0OiBpcnFhY3Rpb24gZm9yIHRoZSBpbnRlcnJ1cHQKKyAqCisgKiBVc2VkIHRvIHN0YXRpY2FsbHkgc2V0dXAgaW50ZXJydXB0cyBpbiB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLgorICovCitpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdCkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJcmV0dXJuIF9fc2V0dXBfaXJxKGlycSwgZGVzYywgYWN0KTsKK30KKworLyoqCiAgKglmcmVlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0CiAgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBmcmVlCiAgKglAZGV2X2lkOiBEZXZpY2UgaWRlbnRpdHkgdG8gZnJlZQpAQCAtNDk5LDE1ICs1MjgsMTUgQEAKICAqLwogdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3RydWN0IGlycWFjdGlvbiAqKnA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOwotCWlmIChpcnEgPj0gTlJfSVJRUykKKworCWlmICghZGVzYykKIAkJcmV0dXJuOwogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcCA9ICZkZXNjLT5hY3Rpb247CiAJZm9yICg7OykgewpAQCAtNTk2LDEyICs2MjUsMTQgQEAKICAqCUlSUUZfU0hBUkVECQlJbnRlcnJ1cHQgaXMgc2hhcmVkCiAgKglJUlFGX0RJU0FCTEVECURpc2FibGUgbG9jYWwgaW50ZXJydXB0cyB3aGlsZSBwcm9jZXNzaW5nCiAgKglJUlFGX1NBTVBMRV9SQU5ET00JVGhlIGludGVycnVwdCBjYW4gYmUgdXNlZCBmb3IgZW50cm9weQorICoJSVJRRl9UUklHR0VSXyoJCVNwZWNpZnkgYWN0aXZlIGVkZ2Uocykgb3IgbGV2ZWwKICAqCiAgKi8KIGludCByZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFfaGFuZGxlcl90IGhhbmRsZXIsCiAJCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCByZXR2YWw7CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUApAQCAtNjE4LDkgKzY0OSwxMiBAQAogCSAqLwogCWlmICgoaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkgJiYgIWRldl9pZCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGlycSA+PSBOUl9JUlFTKQorCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJaWYgKCFkZXNjKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTk9SRVFVRVNUKQorCisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9OT1JFUVVFU1QpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghaGFuZGxlcikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MzYsMjYgKzY3MCwyOSBAQAogCWFjdGlvbi0+bmV4dCA9IE5VTEw7CiAJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CiAKKwlyZXR2YWwgPSBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdGlvbik7CisJaWYgKHJldHZhbCkKKwkJa2ZyZWUoYWN0aW9uKTsKKwogI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQogCWlmIChpcnFmbGFncyAmIElSUUZfU0hBUkVEKSB7CiAJCS8qCiAJCSAqIEl0J3MgYSBzaGFyZWQgSVJRIC0tIHRoZSBkcml2ZXIgb3VnaHQgdG8gYmUgcHJlcGFyZWQgZm9yIGl0CiAJCSAqIHRvIGhhcHBlbiBpbW1lZGlhdGVseSwgc28gbGV0J3MgbWFrZSBzdXJlLi4uLgotCQkgKiBXZSBkbyB0aGlzIGJlZm9yZSBhY3R1YWxseSByZWdpc3RlcmluZyBpdCwgdG8gbWFrZSBzdXJlIHRoYXQKLQkJICogYSAncmVhbCcgSVJRIGRvZXNuJ3QgcnVuIGluIHBhcmFsbGVsIHdpdGggb3VyIGZha2UKKwkJICogV2UgZGlzYWJsZSB0aGUgaXJxIHRvIG1ha2Ugc3VyZSB0aGF0IGEgJ3JlYWwnIElSUSBkb2Vzbid0CisJCSAqIHJ1biBpbiBwYXJhbGxlbCB3aXRoIG91ciBmYWtlLgogCQkgKi8KIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCQlkaXNhYmxlX2lycShpcnEpOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKIAkJaGFuZGxlcihpcnEsIGRldl9pZCk7CisKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQllbmFibGVfaXJxKGlycSk7CiAJfQogI2VuZGlmCi0KLQlyZXR2YWwgPSBzZXR1cF9pcnEoaXJxLCBhY3Rpb24pOwotCWlmIChyZXR2YWwpCi0JCWtmcmVlKGFjdGlvbik7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTChyZXF1ZXN0X2lycSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jIGIva2VybmVsL2lycS9taWdyYXRpb24uYwppbmRleCA3N2I3YWNjLi45MGI5MjBkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCisrKyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKQEAgLTMsMTggKzMsMTggQEAKIAogdm9pZCBzZXRfcGVuZGluZ19pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUEVORElORzsKLQlpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzayA9IG1hc2s7CisJZGVzYy0+cGVuZGluZ19tYXNrID0gbWFzazsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgbW92ZV9tYXNrZWRfaXJxKGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAljcHVtYXNrX3QgdG1wOwogCiAJaWYgKGxpa2VseSghKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKIAotCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKSkpCisJaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkoZGVzYy0+cGVuZGluZ19tYXNrKSkpCiAJCXJldHVybjsKIAogCWlmICghZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KQpAQCAtMzgsNyArMzgsNyBAQAogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXNjLT5sb2NrKTsKIAotCWNwdXNfYW5kKHRtcCwgaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2ssIGNwdV9vbmxpbmVfbWFwKTsKKwljcHVzX2FuZCh0bXAsIGRlc2MtPnBlbmRpbmdfbWFzaywgY3B1X29ubGluZV9tYXApOwogCiAJLyoKIAkgKiBJZiB0aGVyZSB3YXMgYSB2YWxpZCBtYXNrIHRvIHdvcmsgd2l0aCwgcGxlYXNlCkBAIC01NSwxMiArNTUsMTIgQEAKIAlpZiAobGlrZWx5KCFjcHVzX2VtcHR5KHRtcCkpKSB7CiAJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsdG1wKTsKIAl9Ci0JY3B1c19jbGVhcihpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzayk7CisJY3B1c19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOwogfQogCiB2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3Byb2MuYyBiL2tlcm5lbC9pcnEvcHJvYy5jCmluZGV4IGEwOWRkMjkuLmZhYzAxNGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvcHJvYy5jCisrKyBiL2tlcm5lbC9pcnEvcHJvYy5jCkBAIC0xOSw3ICsxOSw3IEBACiAKIHN0YXRpYyBpbnQgaXJxX2FmZmluaXR5X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyAobG9uZyltLT5wcml2YXRlOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKChsb25nKW0tPnByaXZhdGUpOwogCWNwdW1hc2tfdCAqbWFzayA9ICZkZXNjLT5hZmZpbml0eTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCkBAIC00Myw3ICs0Myw3IEBACiAJY3B1bWFza190IG5ld192YWx1ZTsKIAlpbnQgZXJyOwogCi0JaWYgKCFpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eSB8fCBub19pcnFfYWZmaW5pdHkgfHwKKwlpZiAoIWlycV90b19kZXNjKGlycSktPmNoaXAtPnNldF9hZmZpbml0eSB8fCBub19pcnFfYWZmaW5pdHkgfHwKIAkgICAgaXJxX2JhbGFuY2luZ19kaXNhYmxlZChpcnEpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMTMyLDIwICsxMzIsMjAgQEAKIHN0YXRpYyBpbnQgaXJxX3NwdXJpb3VzX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZCA9ICZpcnFfZGVzY1sobG9uZykgZGF0YV07CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoKGxvbmcpIGRhdGEpOwogCXJldHVybiBzcHJpbnRmKHBhZ2UsICJjb3VudCAldVxuIgogCQkJICAgICAidW5oYW5kbGVkICV1XG4iCiAJCQkgICAgICJsYXN0X3VuaGFuZGxlZCAldSBtc1xuIiwKLQkJCWQtPmlycV9jb3VudCwKLQkJCWQtPmlycXNfdW5oYW5kbGVkLAotCQkJamlmZmllc190b19tc2VjcyhkLT5sYXN0X3VuaGFuZGxlZCkpOworCQkJZGVzYy0+aXJxX2NvdW50LAorCQkJZGVzYy0+aXJxc191bmhhbmRsZWQsCisJCQlqaWZmaWVzX3RvX21zZWNzKGRlc2MtPmxhc3RfdW5oYW5kbGVkKSk7CiB9CiAKICNkZWZpbmUgTUFYX05BTUVMRU4gMTI4CiAKIHN0YXRpYyBpbnQgbmFtZV91bmlxdWUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqbmV3X2FjdGlvbikKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAxOwpAQCAtMTY1LDggKzE2NSw5IEBACiB2b2lkIHJlZ2lzdGVyX2hhbmRsZXJfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCiB7CiAJY2hhciBuYW1lIFtNQVhfTkFNRUxFTl07CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotCWlmICghaXJxX2Rlc2NbaXJxXS5kaXIgfHwgYWN0aW9uLT5kaXIgfHwgIWFjdGlvbi0+bmFtZSB8fAorCWlmICghZGVzYy0+ZGlyIHx8IGFjdGlvbi0+ZGlyIHx8ICFhY3Rpb24tPm5hbWUgfHwKIAkJCQkJIW5hbWVfdW5pcXVlKGlycSwgYWN0aW9uKSkKIAkJcmV0dXJuOwogCkBAIC0xNzQsMzYgKzE3NSwzNCBAQAogCXNucHJpbnRmKG5hbWUsIE1BWF9OQU1FTEVOLCAiJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJLyogY3JlYXRlIC9wcm9jL2lycS8xMjM0L2hhbmRsZXIvICovCi0JYWN0aW9uLT5kaXIgPSBwcm9jX21rZGlyKG5hbWUsIGlycV9kZXNjW2lycV0uZGlyKTsKKwlhY3Rpb24tPmRpciA9IHByb2NfbWtkaXIobmFtZSwgZGVzYy0+ZGlyKTsKIH0KIAogI3VuZGVmIE1BWF9OQU1FTEVOCiAKICNkZWZpbmUgTUFYX05BTUVMRU4gMTAKIAotdm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxKQordm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJY2hhciBuYW1lIFtNQVhfTkFNRUxFTl07CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAotCWlmICghcm9vdF9pcnFfZGlyIHx8Ci0JCShpcnFfZGVzY1tpcnFdLmNoaXAgPT0gJm5vX2lycV9jaGlwKSB8fAotCQkJaXJxX2Rlc2NbaXJxXS5kaXIpCisJaWYgKCFyb290X2lycV9kaXIgfHwgKGRlc2MtPmNoaXAgPT0gJm5vX2lycV9jaGlwKSB8fCBkZXNjLT5kaXIpCiAJCXJldHVybjsKIAogCW1lbXNldChuYW1lLCAwLCBNQVhfTkFNRUxFTik7CiAJc3ByaW50ZihuYW1lLCAiJWQiLCBpcnEpOwogCiAJLyogY3JlYXRlIC9wcm9jL2lycS8xMjM0ICovCi0JaXJxX2Rlc2NbaXJxXS5kaXIgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3RfaXJxX2Rpcik7CisJZGVzYy0+ZGlyID0gcHJvY19ta2RpcihuYW1lLCByb290X2lycV9kaXIpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIGNyZWF0ZSAvcHJvYy9pcnEvPGlycT4vc21wX2FmZmluaXR5ICovCi0JcHJvY19jcmVhdGVfZGF0YSgic21wX2FmZmluaXR5IiwgMDYwMCwgaXJxX2Rlc2NbaXJxXS5kaXIsCisJcHJvY19jcmVhdGVfZGF0YSgic21wX2FmZmluaXR5IiwgMDYwMCwgZGVzYy0+ZGlyLAogCQkJICZpcnFfYWZmaW5pdHlfcHJvY19mb3BzLCAodm9pZCAqKShsb25nKWlycSk7CiAjZW5kaWYKIAotCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNwdXJpb3VzIiwgMDQ0NCwgaXJxX2Rlc2NbaXJxXS5kaXIpOworCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNwdXJpb3VzIiwgMDQ0NCwgZGVzYy0+ZGlyKTsKIAlpZiAoZW50cnkpIHsKIAkJZW50cnktPmRhdGEgPSAodm9pZCAqKShsb25nKWlycTsKIAkJZW50cnktPnJlYWRfcHJvYyA9IGlycV9zcHVyaW91c19yZWFkOwpAQCAtMjE0LDggKzIxMywxMSBAQAogCiB2b2lkIHVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKLQlpZiAoYWN0aW9uLT5kaXIpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGFjdGlvbi0+ZGlyLT5uYW1lLCBpcnFfZGVzY1tpcnFdLmRpcik7CisJaWYgKGFjdGlvbi0+ZGlyKSB7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwkJcmVtb3ZlX3Byb2NfZW50cnkoYWN0aW9uLT5kaXItPm5hbWUsIGRlc2MtPmRpcik7CisJfQogfQogCiB2b2lkIHJlZ2lzdGVyX2RlZmF1bHRfYWZmaW5pdHlfcHJvYyh2b2lkKQpAQCAtMjI4LDcgKzIzMCw4IEBACiAKIHZvaWQgaW5pdF9pcnFfcHJvYyh2b2lkKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJLyogY3JlYXRlIC9wcm9jL2lycSAqLwogCXJvb3RfaXJxX2RpciA9IHByb2NfbWtkaXIoImlycSIsIE5VTEwpOwpAQCAtMjQwLDcgKzI0Myw3IEBACiAJLyoKIAkgKiBDcmVhdGUgZW50cmllcyBmb3IgYWxsIGV4aXN0aW5nIElSUXMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKLQkJcmVnaXN0ZXJfaXJxX3Byb2MoaSk7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQorCQlyZWdpc3Rlcl9pcnFfcHJvYyhpcnEsIGRlc2MpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3Jlc2VuZC5jIGIva2VybmVsL2lycS9yZXNlbmQuYwppbmRleCBhODA0Njc5Li44OWM3MTE3IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Jlc2VuZC5jCisrKyBiL2tlcm5lbC9pcnEvcmVzZW5kLmMKQEAgLTMzLDEwICszMywxMCBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAlpbnQgaXJxOwogCi0Jd2hpbGUgKCFiaXRtYXBfZW1wdHkoaXJxc19yZXNlbmQsIE5SX0lSUVMpKSB7Ci0JCWlycSA9IGZpbmRfZmlyc3RfYml0KGlycXNfcmVzZW5kLCBOUl9JUlFTKTsKKwl3aGlsZSAoIWJpdG1hcF9lbXB0eShpcnFzX3Jlc2VuZCwgbnJfaXJxcykpIHsKKwkJaXJxID0gZmluZF9maXJzdF9iaXQoaXJxc19yZXNlbmQsIG5yX2lycXMpOwogCQljbGVhcl9iaXQoaXJxLCBpcnFzX3Jlc2VuZCk7Ci0JCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zcHVyaW91cy5jIGIva2VybmVsL2lycS9zcHVyaW91cy5jCmluZGV4IGM2NmQzZjEuLmRkMzY0YzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYworKysgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKQEAgLTEyLDgzICsxMiwxMjIgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAogc3RhdGljIGludCBpcnFmaXh1cCBfX3JlYWRfbW9zdGx5OwogCisjZGVmaW5lIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMIChIWi8xMCkKK3N0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KTsKK3N0YXRpYyBERUZJTkVfVElNRVIocG9sbF9zcHVyaW91c19pcnFfdGltZXIsIHBvbGxfc3B1cmlvdXNfaXJxcywgMCwgMCk7CisKIC8qCiAgKiBSZWNvdmVyeSBoYW5kbGVyIGZvciBtaXNyb3V0ZWQgaW50ZXJydXB0cy4KICAqLworc3RhdGljIGludCB0cnlfb25lX2lycShpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCWludCBvayA9IDAsIHdvcmsgPSAwOworCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwkvKiBBbHJlYWR5IHJ1bm5pbmcgb24gYW5vdGhlciBwcm9jZXNzb3IgKi8KKwlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpIHsKKwkJLyoKKwkJICogQWxyZWFkeSBydW5uaW5nOiBJZiBpdCBpcyBzaGFyZWQgZ2V0IHRoZSBvdGhlcgorCQkgKiBDUFUgdG8gZ28gbG9va2luZyBmb3Igb3VyIG15c3RlcnkgaW50ZXJydXB0IHRvbworCQkgKi8KKwkJaWYgKGRlc2MtPmFjdGlvbiAmJiAoZGVzYy0+YWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSkKKwkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKKwkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCQlyZXR1cm4gb2s7CisJfQorCS8qIEhvbm91ciB0aGUgbm9ybWFsIElSUSBsb2NraW5nICovCisJZGVzYy0+c3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisKKwl3aGlsZSAoYWN0aW9uKSB7CisJCS8qIE9ubHkgc2hhcmVkIElSUSBoYW5kbGVycyBhcmUgc2FmZSB0byBjYWxsICovCisJCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKKwkJCWlmIChhY3Rpb24tPmhhbmRsZXIoaXJxLCBhY3Rpb24tPmRldl9pZCkgPT0KKwkJCQlJUlFfSEFORExFRCkKKwkJCQlvayA9IDE7CisJCX0KKwkJYWN0aW9uID0gYWN0aW9uLT5uZXh0OworCX0KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCS8qIE5vdyBjbGVhbiB1cCB0aGUgZmxhZ3MgKi8KKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKworCS8qCisJICogV2hpbGUgd2Ugd2VyZSBsb29raW5nIGZvciBhIGZpeHVwIHNvbWVvbmUgcXVldWVkIGEgcmVhbAorCSAqIElSUSBjbGFzaGluZyB3aXRoIG91ciB3YWxrOgorCSAqLworCXdoaWxlICgoZGVzYy0+c3RhdHVzICYgSVJRX1BFTkRJTkcpICYmIGFjdGlvbikgeworCQkvKgorCQkgKiBQZXJmb3JtIHJlYWwgSVJRIHByb2Nlc3NpbmcgZm9yIHRoZSBJUlEgd2UgZGVmZXJyZWQKKwkJICovCisJCXdvcmsgPSAxOworCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCWhhbmRsZV9JUlFfZXZlbnQoaXJxLCBhY3Rpb24pOworCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9QRU5ESU5HOworCX0KKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9JTlBST0dSRVNTOworCS8qCisJICogSWYgd2UgZGlkIGFjdHVhbCB3b3JrIGZvciB0aGUgcmVhbCBJUlEgbGluZSB3ZSBtdXN0IGxldCB0aGUKKwkgKiBJUlEgY29udHJvbGxlciBjbGVhbiB1cCB0b28KKwkgKi8KKwlpZiAod29yayAmJiBkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPmVuZCkKKwkJZGVzYy0+Y2hpcC0+ZW5kKGlycSk7CisJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCisJcmV0dXJuIG9rOworfQorCiBzdGF0aWMgaW50IG1pc3JvdXRlZF9pcnEoaW50IGlycSkKIHsKLQlpbnQgaTsKLQlpbnQgb2sgPSAwOwotCWludCB3b3JrID0gMDsJLyogRGlkIHdlIGRvIHdvcmsgZm9yIGEgcmVhbCBJUlEgKi8KKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJaW50IGksIG9rID0gMDsKIAotCWZvciAoaSA9IDE7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpOwotCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgeworCQlpZiAoIWkpCisJCQkgY29udGludWU7CiAKIAkJaWYgKGkgPT0gaXJxKQkvKiBBbHJlYWR5IHRyaWVkICovCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwotCQkvKiBBbHJlYWR5IHJ1bm5pbmcgb24gYW5vdGhlciBwcm9jZXNzb3IgKi8KLQkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKSB7Ci0JCQkvKgotCQkJICogQWxyZWFkeSBydW5uaW5nOiBJZiBpdCBpcyBzaGFyZWQgZ2V0IHRoZSBvdGhlcgotCQkJICogQ1BVIHRvIGdvIGxvb2tpbmcgZm9yIG91ciBteXN0ZXJ5IGludGVycnVwdCB0b28KLQkJCSAqLwotCQkJaWYgKGRlc2MtPmFjdGlvbiAmJiAoZGVzYy0+YWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSkKLQkJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1BFTkRJTkc7Ci0JCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBIb25vdXIgdGhlIG5vcm1hbCBJUlEgbG9ja2luZyAqLwotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7Ci0JCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCi0JCXdoaWxlIChhY3Rpb24pIHsKLQkJCS8qIE9ubHkgc2hhcmVkIElSUSBoYW5kbGVycyBhcmUgc2FmZSB0byBjYWxsICovCi0JCQlpZiAoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSB7Ci0JCQkJaWYgKGFjdGlvbi0+aGFuZGxlcihpLCBhY3Rpb24tPmRldl9pZCkgPT0KLQkJCQkJCUlSUV9IQU5ETEVEKQotCQkJCQlvayA9IDE7Ci0JCQl9Ci0JCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7Ci0JCX0KLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJLyogTm93IGNsZWFuIHVwIHRoZSBmbGFncyAqLwotCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwotCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247Ci0KLQkJLyoKLQkJICogV2hpbGUgd2Ugd2VyZSBsb29raW5nIGZvciBhIGZpeHVwIHNvbWVvbmUgcXVldWVkIGEgcmVhbAotCQkgKiBJUlEgY2xhc2hpbmcgd2l0aCBvdXIgd2FsazoKLQkJICovCi0JCXdoaWxlICgoZGVzYy0+c3RhdHVzICYgSVJRX1BFTkRJTkcpICYmIGFjdGlvbikgewotCQkJLyoKLQkJCSAqIFBlcmZvcm0gcmVhbCBJUlEgcHJvY2Vzc2luZyBmb3IgdGhlIElSUSB3ZSBkZWZlcnJlZAotCQkJICovCi0JCQl3b3JrID0gMTsKLQkJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKLQkJCWhhbmRsZV9JUlFfZXZlbnQoaSwgYWN0aW9uKTsKLQkJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9QRU5ESU5HOwotCQl9Ci0JCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7Ci0JCS8qCi0JCSAqIElmIHdlIGRpZCBhY3R1YWwgd29yayBmb3IgdGhlIHJlYWwgSVJRIGxpbmUgd2UgbXVzdCBsZXQgdGhlCi0JCSAqIElSUSBjb250cm9sbGVyIGNsZWFuIHVwIHRvbwotCQkgKi8KLQkJaWYgKHdvcmsgJiYgZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5lbmQpCi0JCQlkZXNjLT5jaGlwLT5lbmQoaSk7Ci0JCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJaWYgKHRyeV9vbmVfaXJxKGksIGRlc2MpKQorCQkJb2sgPSAxOwogCX0KIAkvKiBTbyB0aGUgY2FsbGVyIGNhbiBhZGp1c3QgdGhlIGlycSBlcnJvciBjb3VudHMgKi8KIAlyZXR1cm4gb2s7CiB9CiAKK3N0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaTsKKworCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKKwkJdW5zaWduZWQgaW50IHN0YXR1czsKKworCQlpZiAoIWkpCisJCQkgY29udGludWU7CisKKwkJLyogUmFjeSBidXQgaXQgZG9lc24ndCBtYXR0ZXIgKi8KKwkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOworCQliYXJyaWVyKCk7CisJCWlmICghKHN0YXR1cyAmIElSUV9TUFVSSU9VU19ESVNBQkxFRCkpCisJCQljb250aW51ZTsKKworCQl0cnlfb25lX2lycShpLCBkZXNjKTsKKwl9CisKKwltb2RfdGltZXIoJnBvbGxfc3B1cmlvdXNfaXJxX3RpbWVyLAorCQkgIGppZmZpZXMgKyBQT0xMX1NQVVJJT1VTX0lSUV9JTlRFUlZBTCk7Cit9CisKIC8qCiAgKiBJZiA5OSw5MDAgb2YgdGhlIHByZXZpb3VzIDEwMCwwMDAgaW50ZXJydXB0cyBoYXZlIG5vdCBiZWVuIGhhbmRsZWQKICAqIHRoZW4gYXNzdW1lIHRoYXQgdGhlIElSUSBpcyBzdHVjayBpbiBzb21lIG1hbm5lci4gRHJvcCBhIGRpYWdub3N0aWMKQEAgLTEzNyw3ICsxNzYsOSBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgdHJ5X21pc3JvdXRlZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KQorc3RhdGljIGlubGluZSBpbnQKK3RyeV9taXNyb3V0ZWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJICBpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KQogewogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIApAQCAtMjEyLDYgKzI1Myw5IEBACiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfRElTQUJMRUQgfCBJUlFfU1BVUklPVVNfRElTQUJMRUQ7CiAJCWRlc2MtPmRlcHRoKys7CiAJCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKKworCQltb2RfdGltZXIoJnBvbGxfc3B1cmlvdXNfaXJxX3RpbWVyLAorCQkJICBqaWZmaWVzICsgUE9MTF9TUFVSSU9VU19JUlFfSU5URVJWQUwpOwogCX0KIAlkZXNjLT5pcnFzX3VuaGFuZGxlZCA9IDA7CiB9CkBAIC0yNDEsNyArMjg1LDcgQEAKIAogX19zZXR1cCgiaXJxZml4dXAiLCBpcnFmaXh1cF9zZXR1cCk7CiBtb2R1bGVfcGFyYW0oaXJxZml4dXAsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKCJpcnFmaXh1cCIsICIwOiBObyBmaXh1cCwgMTogaXJxZml4dXAgbW9kZSAyOiBpcnFwb2xsIG1vZGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoImlycWZpeHVwIiwgIjA6IE5vIGZpeHVwLCAxOiBpcnFmaXh1cCBtb2RlLCAyOiBpcnFwb2xsIG1vZGUiKTsKIAogc3RhdGljIGludCBfX2luaXQgaXJxcG9sbF9zZXR1cChjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXRpbWVyLmMgYi9rZXJuZWwvaXRpbWVyLmMKaW5kZXggYWI5ODI3NC4uZGI3YzM1OCAxMDA2NDQKLS0tIGEva2VybmVsL2l0aW1lci5jCisrKyBiL2tlcm5lbC9pdGltZXIuYwpAQCAtNTUsMTcgKzU1LDE1IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfVklSVFVBTDoKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXM7CiAJCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2luY3I7CiAJCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pKSB7Ci0JCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7Ci0JCQljcHV0aW1lX3QgdXRpbWUgPSB0c2stPnNpZ25hbC0+dXRpbWU7Ci0JCQlkbyB7Ci0JCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdC0+dXRpbWUpOwotCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJCX0gd2hpbGUgKHQgIT0gdHNrKTsKKwkJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwkJCWNwdXRpbWVfdCB1dGltZTsKKworCQkJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmY3B1dGltZSk7CisJCQl1dGltZSA9IGNwdXRpbWUudXRpbWU7CiAJCQlpZiAoY3B1dGltZV9sZShjdmFsLCB1dGltZSkpIHsgLyogYWJvdXQgdG8gZmlyZSAqLwogCQkJCWN2YWwgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7CiAJCQl9IGVsc2UgewpAQCAtNzMsMjUgKzcxLDE5IEBACiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmdmFsdWUtPml0X3ZhbHVlKTsKIAkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJnZhbHVlLT5pdF9pbnRlcnZhbCk7CiAJCWJyZWFrOwogCWNhc2UgSVRJTUVSX1BST0Y6Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWN2YWwgPSB0c2stPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzOwogCQljaW50ZXJ2YWwgPSB0c2stPnNpZ25hbC0+aXRfcHJvZl9pbmNyOwogCQlpZiAoIWNwdXRpbWVfZXEoY3ZhbCwgY3B1dGltZV96ZXJvKSkgewotCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdHNrOwotCQkJY3B1dGltZV90IHB0aW1lID0gY3B1dGltZV9hZGQodHNrLT5zaWduYWwtPnV0aW1lLAotCQkJCQkJICAgICAgdHNrLT5zaWduYWwtPnN0aW1lKTsKLQkJCWRvIHsKLQkJCQlwdGltZSA9IGNwdXRpbWVfYWRkKHB0aW1lLAotCQkJCQkJICAgIGNwdXRpbWVfYWRkKHQtPnV0aW1lLAotCQkJCQkJCQl0LT5zdGltZSkpOwotCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJCX0gd2hpbGUgKHQgIT0gdHNrKTsKKwkJCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGltZXM7CisJCQljcHV0aW1lX3QgcHRpbWU7CisKKwkJCXRocmVhZF9ncm91cF9jcHV0aW1lKHRzaywgJnRpbWVzKTsKKwkJCXB0aW1lID0gY3B1dGltZV9hZGQodGltZXMudXRpbWUsIHRpbWVzLnN0aW1lKTsKIAkJCWlmIChjcHV0aW1lX2xlKGN2YWwsIHB0aW1lKSkgeyAvKiBhYm91dCB0byBmaXJlICovCiAJCQkJY3ZhbCA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKIAkJCX0gZWxzZSB7CkBAIC05OSw3ICs5MSw2IEBACiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmdmFsdWUtPml0X3ZhbHVlKTsKIAkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJnZhbHVlLT5pdF9pbnRlcnZhbCk7CiAJCWJyZWFrOwpAQCAtMTg1LDcgKzE3Niw2IEBACiAJY2FzZSBJVElNRVJfVklSVFVBTDoKIAkJbnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X3ZhbHVlKTsKIAkJbmludGVydmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlczsKIAkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jcjsKQEAgLTIwMCw3ICsxOTAsNiBAQAogCQl0c2stPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzID0gbnZhbDsKIAkJdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jciA9IG5pbnRlcnZhbDsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWlmIChvdmFsdWUpIHsKIAkJCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmb3ZhbHVlLT5pdF92YWx1ZSk7CiAJCQljcHV0aW1lX3RvX3RpbWV2YWwoY2ludGVydmFsLCAmb3ZhbHVlLT5pdF9pbnRlcnZhbCk7CkBAIC0yMDksNyArMTk4LDYgQEAKIAljYXNlIElUSU1FUl9QUk9GOgogCQludmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfdmFsdWUpOwogCQluaW50ZXJ2YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF9pbnRlcnZhbCk7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWN2YWwgPSB0c2stPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzOwogCQljaW50ZXJ2YWwgPSB0c2stPnNpZ25hbC0+aXRfcHJvZl9pbmNyOwpAQCAtMjI0LDcgKzIxMiw2IEBACiAJCXRzay0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMgPSBudmFsOwogCQl0c2stPnNpZ25hbC0+aXRfcHJvZl9pbmNyID0gbmludGVydmFsOwogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJaWYgKG92YWx1ZSkgewogCQkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZvdmFsdWUtPml0X3ZhbHVlKTsKIAkJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZvdmFsdWUtPml0X2ludGVydmFsKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggYWVmMjY1My4uYWMwZmRlNyAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMzcxLDYgKzEzNzIsNyBAQAogCVZNQ09SRUlORk9fU1lNQk9MKG5vZGVfb25saW5lX21hcCk7CiAJVk1DT1JFSU5GT19TWU1CT0woc3dhcHBlcl9wZ19kaXIpOwogCVZNQ09SRUlORk9fU1lNQk9MKF9zdGV4dCk7CisJVk1DT1JFSU5GT19TWU1CT0wodm1saXN0KTsKIAogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogCVZNQ09SRUlORk9fU1lNQk9MKG1lbV9tYXApOwpAQCAtMTQwNiw2ICsxNDA4LDcgQEAKIAlWTUNPUkVJTkZPX09GRlNFVChmcmVlX2FyZWEsIGZyZWVfbGlzdCk7CiAJVk1DT1JFSU5GT19PRkZTRVQobGlzdF9oZWFkLCBuZXh0KTsKIAlWTUNPUkVJTkZPX09GRlNFVChsaXN0X2hlYWQsIHByZXYpOworCVZNQ09SRUlORk9fT0ZGU0VUKHZtX3N0cnVjdCwgYWRkcik7CiAJVk1DT1JFSU5GT19MRU5HVEgoem9uZS5mcmVlX2FyZWEsIE1BWF9PUkRFUik7CiAJVk1DT1JFSU5GT19MRU5HVEgoZnJlZV9hcmVhLmZyZWVfbGlzdCwgTUlHUkFURV9UWVBFUyk7CiAJVk1DT1JFSU5GT19OVU1CRVIoTlJfRlJFRV9QQUdFUyk7CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCA5NmNmZjJmLi44ZTdhN2NlIDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgogCiAjZGVmaW5lIEtUSFJFQURfTklDRV9MRVZFTCAoLTUpCiAKQEAgLTE3MSwxMiArMTcyLDExIEBACiAgKi8KIHZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqaywgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlpZiAoay0+c3RhdGUgIT0gVEFTS19VTklOVEVSUlVQVElCTEUpIHsKKwkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCisJaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUoaywgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKIAl9Ci0JLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLwotCXdhaXRfdGFza19pbmFjdGl2ZShrLCAwKTsKIAlzZXRfdGFza19jcHUoaywgY3B1KTsKIAlrLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOwogCWstPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CkBAIC0yMDYsNiArMjA2LDggQEAKIAkvKiBJdCBjb3VsZCBleGl0IGFmdGVyIHN0b3BfaW5mby5rIHNldCwgYnV0IGJlZm9yZSB3YWtlX3VwX3Byb2Nlc3MuICovCiAJZ2V0X3Rhc2tfc3RydWN0KGspOwogCisJdHJhY2Vfc2NoZWRfa3RocmVhZF9zdG9wKGspOworCiAJLyogTXVzdCBpbml0IGNvbXBsZXRpb24gKmJlZm9yZSogdGhyZWFkIHNlZXMga3RocmVhZF9zdG9wX2luZm8uayAqLwogCWluaXRfY29tcGxldGlvbigma3RocmVhZF9zdG9wX2luZm8uZG9uZSk7CiAJc21wX3dtYigpOwpAQCAtMjIxLDYgKzIyMyw4IEBACiAJcmV0ID0ga3RocmVhZF9zdG9wX2luZm8uZXJyOwogCW11dGV4X3VubG9jaygma3RocmVhZF9zdG9wX2xvY2spOwogCisJdHJhY2Vfc2NoZWRfa3RocmVhZF9zdG9wX3JldChyZXQpOworCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woa3RocmVhZF9zdG9wKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tYXJrZXIuYyBiL2tlcm5lbC9tYXJrZXIuYwppbmRleCA3ZDFmYWVjLi5lOWM2YjJiIDEwMDY0NAotLS0gYS9rZXJuZWwvbWFya2VyLmMKKysrIGIva2VybmVsL21hcmtlci5jCkBAIC02Miw3ICs2Miw3IEBACiAJaW50IHJlZmNvdW50OwkvKiBOdW1iZXIgb2YgdGltZXMgYXJtZWQuIDAgaWYgZGlzYXJtZWQuICovCiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAl2b2lkICpvbGRwdHI7Ci0JdW5zaWduZWQgY2hhciByY3VfcGVuZGluZzoxOworCWludCByY3VfcGVuZGluZzsKIAl1bnNpZ25lZCBjaGFyIHB0eXBlOjE7CiAJY2hhciBuYW1lWzBdOwkvKiBDb250YWlucyBuYW1lJ1wwJ2Zvcm1hdCdcMCcgKi8KIH07CkBAIC0xMDMsMTEgKzEwMywxMSBAQAogCWNoYXIgcHR5cGU7CiAKIAkvKgotCSAqIHByZWVtcHRfZGlzYWJsZSBkb2VzIHR3byB0aGluZ3MgOiBkaXNhYmxpbmcgcHJlZW1wdGlvbiB0byBtYWtlIHN1cmUKLQkgKiB0aGUgdGVhcmRvd24gb2YgdGhlIGNhbGxiYWNrcyBjYW4gYmUgZG9uZSBjb3JyZWN0bHkgd2hlbiB0aGV5IGFyZSBpbgotCSAqIG1vZHVsZXMgYW5kIHRoZXkgaW5zdXJlIFJDVSByZWFkIGNvaGVyZW5jeS4KKwkgKiByY3VfcmVhZF9sb2NrX3NjaGVkIGRvZXMgdHdvIHRoaW5ncyA6IGRpc2FibGluZyBwcmVlbXB0aW9uIHRvIG1ha2UKKwkgKiBzdXJlIHRoZSB0ZWFyZG93biBvZiB0aGUgY2FsbGJhY2tzIGNhbiBiZSBkb25lIGNvcnJlY3RseSB3aGVuIHRoZXkKKwkgKiBhcmUgaW4gbW9kdWxlcyBhbmQgdGhleSBpbnN1cmUgUkNVIHJlYWQgY29oZXJlbmN5LgogCSAqLwotCXByZWVtcHRfZGlzYWJsZSgpOworCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKIAlwdHlwZSA9IG1kYXRhLT5wdHlwZTsKIAlpZiAobGlrZWx5KCFwdHlwZSkpIHsKIAkJbWFya2VyX3Byb2JlX2Z1bmMgKmZ1bmM7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCXZhX2VuZChhcmdzKTsKIAkJfQogCX0KLQlwcmVlbXB0X2VuYWJsZSgpOworCXJjdV9yZWFkX3VubG9ja19zY2hlZCgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX2NiKTsKIApAQCAtMTYyLDcgKzE2Miw3IEBACiAJdmFfbGlzdCBhcmdzOwkvKiBub3QgaW5pdGlhbGl6ZWQgKi8KIAljaGFyIHB0eXBlOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7CisJcmN1X3JlYWRfbG9ja19zY2hlZCgpOwogCXB0eXBlID0gbWRhdGEtPnB0eXBlOwogCWlmIChsaWtlbHkoIXB0eXBlKSkgewogCQltYXJrZXJfcHJvYmVfZnVuYyAqZnVuYzsKQEAgLTE5NSw3ICsxOTUsNyBAQAogCQkJbXVsdGlbaV0uZnVuYyhtdWx0aVtpXS5wcm9iZV9wcml2YXRlLCBjYWxsX3ByaXZhdGUsCiAJCQkJbWRhdGEtPmZvcm1hdCwgJmFyZ3MpOwogCX0KLQlwcmVlbXB0X2VuYWJsZSgpOworCXJjdV9yZWFkX3VubG9ja19zY2hlZCgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX2NiX25vYXJnKTsKIApAQCAtNTYwLDcgKzU2MCw3IEBACiAgKiBEaXNhYmxlIGEgbWFya2VyIGFuZCBpdHMgcHJvYmUgY2FsbGJhY2suCiAgKiBOb3RlOiBvbmx5IHdhaXRpbmcgYW4gUkNVIHBlcmlvZCBhZnRlciBzZXR0aW5nIGVsZW0tPmNhbGwgdG8gdGhlIGVtcHR5CiAgKiBmdW5jdGlvbiBpbnN1cmVzIHRoYXQgdGhlIG9yaWdpbmFsIGNhbGxiYWNrIGlzIG5vdCB1c2VkIGFueW1vcmUuIFRoaXMgaW5zdXJlZAotICogYnkgcHJlZW1wdF9kaXNhYmxlIGFyb3VuZCB0aGUgY2FsbCBzaXRlLgorICogYnkgcmN1X3JlYWRfbG9ja19zY2hlZCBhcm91bmQgdGhlIGNhbGwgc2l0ZS4KICAqLwogc3RhdGljIHZvaWQgZGlzYWJsZV9tYXJrZXIoc3RydWN0IG1hcmtlciAqZWxlbSkKIHsKQEAgLTY1MywxMSArNjUzLDE3IEBACiAJZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwogCWlmICghZW50cnkpIHsKIAkJZW50cnkgPSBhZGRfbWFya2VyKG5hbWUsIGZvcm1hdCk7Ci0JCWlmIChJU19FUlIoZW50cnkpKSB7CisJCWlmIChJU19FUlIoZW50cnkpKQogCQkJcmV0ID0gUFRSX0VSUihlbnRyeSk7Ci0JCQlnb3RvIGVuZDsKLQkJfQorCX0gZWxzZSBpZiAoZm9ybWF0KSB7CisJCWlmICghZW50cnktPmZvcm1hdCkKKwkJCXJldCA9IG1hcmtlcl9zZXRfZm9ybWF0KCZlbnRyeSwgZm9ybWF0KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVudHJ5LT5mb3JtYXQsIGZvcm1hdCkpCisJCQlyZXQgPSAtRVBFUk07CiAJfQorCWlmIChyZXQpCisJCWdvdG8gZW5kOworCiAJLyoKIAkgKiBJZiB3ZSBkZXRlY3QgdGhhdCBhIGNhbGxfcmN1IGlzIHBlbmRpbmcgZm9yIHRoaXMgbWFya2VyLAogCSAqIG1ha2Ugc3VyZSBpdCdzIGV4ZWN1dGVkIG5vdy4KQEAgLTY3NCw2ICs2ODAsOCBAQAogCW11dGV4X2xvY2soJm1hcmtlcnNfbXV0ZXgpOwogCWVudHJ5ID0gZ2V0X21hcmtlcihuYW1lKTsKIAlXQVJOX09OKCFlbnRyeSk7CisJaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKKwkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKIAllbnRyeS0+b2xkcHRyID0gb2xkOwogCWVudHJ5LT5yY3VfcGVuZGluZyA9IDE7CiAJLyogd3JpdGUgcmN1X3BlbmRpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIFJDVSBjYWxsYmFjayAqLwpAQCAtNzE3LDYgKzcyNSw4IEBACiAJZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwogCWlmICghZW50cnkpCiAJCWdvdG8gZW5kOworCWlmIChlbnRyeS0+cmN1X3BlbmRpbmcpCisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CiAJZW50cnktPm9sZHB0ciA9IG9sZDsKIAllbnRyeS0+cmN1X3BlbmRpbmcgPSAxOwogCS8qIHdyaXRlIHJjdV9wZW5kaW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBSQ1UgY2FsbGJhY2sgKi8KQEAgLTc5NSw2ICs4MDUsOCBAQAogCW11dGV4X2xvY2soJm1hcmtlcnNfbXV0ZXgpOwogCWVudHJ5ID0gZ2V0X21hcmtlcl9mcm9tX3ByaXZhdGVfZGF0YShwcm9iZSwgcHJvYmVfcHJpdmF0ZSk7CiAJV0FSTl9PTighZW50cnkpOworCWlmIChlbnRyeS0+cmN1X3BlbmRpbmcpCisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CiAJZW50cnktPm9sZHB0ciA9IG9sZDsKIAllbnRyeS0+cmN1X3BlbmRpbmcgPSAxOwogCS8qIHdyaXRlIHJjdV9wZW5kaW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBSQ1UgY2FsbGJhY2sgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCBiNzIwNWY2Li4xZjRjYzAwIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0yMCwxMSArMjAsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CkBAIC00MiwxMCArNDQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Vud2luZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8bGludXgvbGljZW5zZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awpAQCAtNjEsNyArNjYsNyBAQAogI2RlZmluZSBJTklUX09GRlNFVF9NQVNLICgxVUwgPDwgKEJJVFNfUEVSX0xPTkctMSkpCiAKIC8qIExpc3Qgb2YgbW9kdWxlcywgcHJvdGVjdGVkIGJ5IG1vZHVsZV9tdXRleCBvciBwcmVlbXB0X2Rpc2FibGUKLSAqIChhZGQvZGVsZXRlIHVzZXMgc3RvcF9tYWNoaW5lKS4gKi8KKyAqIChkZWxldGUgdXNlcyBzdG9wX21hY2hpbmUvYWRkIHVzZXMgUkNVIGxpc3Qgb3BlcmF0aW9ucykuICovCiBzdGF0aWMgREVGSU5FX01VVEVYKG1vZHVsZV9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKG1vZHVsZXMpOwogCkBAIC0xMzAsNiArMTM1LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEZpbmQgYSBtb2R1bGUgc2VjdGlvbiwgb3IgTlVMTC4gKi8KK3N0YXRpYyB2b2lkICpzZWN0aW9uX2FkZHIoRWxmX0VoZHIgKmhkciwgRWxmX1NoZHIgKnNoZHJzLAorCQkJICBjb25zdCBjaGFyICpzZWNzdHJpbmdzLCBjb25zdCBjaGFyICpuYW1lKQoreworCS8qIFNlY3Rpb24gMCBoYXMgc2hfYWRkciAwLiAqLworCXJldHVybiAodm9pZCAqKXNoZHJzW2ZpbmRfc2VjKGhkciwgc2hkcnMsIHNlY3N0cmluZ3MsIG5hbWUpXS5zaF9hZGRyOworfQorCisvKiBGaW5kIGEgbW9kdWxlIHNlY3Rpb24sIG9yIE5VTEwuICBGaWxsIGluIG51bWJlciBvZiAib2JqZWN0cyIgaW4gc2VjdGlvbi4gKi8KK3N0YXRpYyB2b2lkICpzZWN0aW9uX29ianMoRWxmX0VoZHIgKmhkciwKKwkJCSAgRWxmX1NoZHIgKnNlY2hkcnMsCisJCQkgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIHNpemVfdCBvYmplY3Rfc2l6ZSwKKwkJCSAgdW5zaWduZWQgaW50ICpudW0pCit7CisJdW5zaWduZWQgaW50IHNlYyA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgbmFtZSk7CisKKwkvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMCBhbmQgc2hfc2l6ZSAwLiAqLworCSpudW0gPSBzZWNoZHJzW3NlY10uc2hfc2l6ZSAvIG9iamVjdF9zaXplOworCXJldHVybiAodm9pZCAqKXNlY2hkcnNbc2VjXS5zaF9hZGRyOworfQorCiAvKiBQcm92aWRlZCBieSB0aGUgbGlua2VyICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdGFydF9fX2tzeW10YWJbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0b3BfX19rc3ltdGFiW107CkBAIC0yMTYsNyArMjQ0LDcgQEAKIAlpZiAoZWFjaF9zeW1ib2xfaW5fc2VjdGlvbihhcnIsIEFSUkFZX1NJWkUoYXJyKSwgTlVMTCwgZm4sIGRhdGEpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKIAkJc3RydWN0IHN5bXNlYXJjaCBhcnJbXSA9IHsKIAkJCXsgbW9kLT5zeW1zLCBtb2QtPnN5bXMgKyBtb2QtPm51bV9zeW1zLCBtb2QtPmNyY3MsCiAJCQkgIE5PVF9HUExfT05MWSwgZmFsc2UgfSwKQEAgLTEzOTIsMTcgKzE0MjAsNiBAQAogfQogCiAvKgotICogbGluayB0aGUgbW9kdWxlIHdpdGggdGhlIHdob2xlIG1hY2hpbmUgaXMgc3RvcHBlZCB3aXRoIGludGVycnVwdHMgb2ZmCi0gKiAtIHRoaXMgZGVmZW5kcyBhZ2FpbnN0IGthbGxzeW1zIG5vdCB0YWtpbmcgbG9ja3MKLSAqLwotc3RhdGljIGludCBfX2xpbmtfbW9kdWxlKHZvaWQgKl9tb2QpCi17Ci0Jc3RydWN0IG1vZHVsZSAqbW9kID0gX21vZDsKLQlsaXN0X2FkZCgmbW9kLT5saXN0LCAmbW9kdWxlcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiB1bmxpbmsgdGhlIG1vZHVsZSB3aXRoIHRoZSB3aG9sZSBtYWNoaW5lIGlzIHN0b3BwZWQgd2l0aCBpbnRlcnJ1cHRzIG9mZgogICogLSB0aGlzIGRlZmVuZHMgYWdhaW5zdCBrYWxsc3ltcyBub3QgdGFraW5nIGxvY2tzCiAgKi8KQEAgLTE0MzAsNiArMTQ0Nyw5IEBACiAJLyogTW9kdWxlIHVubG9hZCBzdHVmZiAqLwogCW1vZHVsZV91bmxvYWRfZnJlZShtb2QpOwogCisJLyogcmVsZWFzZSBhbnkgcG9pbnRlcnMgdG8gbWNvdW50IGluIHRoaXMgbW9kdWxlICovCisJZnRyYWNlX3JlbGVhc2UobW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpOworCiAJLyogVGhpcyBtYXkgYmUgTlVMTCwgYnV0IHRoYXQncyBPSyAqLwogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CiAJa2ZyZWUobW9kLT5hcmdzKTsKQEAgLTE3ODQsMzIgKzE4MDQsMjAgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAorc3RhdGljIHZvaWQgZHluYW1pY19wcmludGtfc2V0dXAoc3RydWN0IG1vZF9kZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCit7CiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCi1zdGF0aWMgdm9pZCBkeW5hbWljX3ByaW50a19zZXR1cChFbGZfU2hkciAqc2VjaGRycywgdW5zaWduZWQgaW50IHZlcmJvc2VpbmRleCkKLXsKLQlzdHJ1Y3QgbW9kX2RlYnVnICpkZWJ1Z19pbmZvOwotCXVuc2lnbmVkIGxvbmcgcG9zLCBlbmQ7Ci0JdW5zaWduZWQgaW50IG51bV92ZXJib3NlOworCXVuc2lnbmVkIGludCBpOwogCi0JcG9zID0gc2VjaGRyc1t2ZXJib3NlaW5kZXhdLnNoX2FkZHI7Ci0JbnVtX3ZlcmJvc2UgPSBzZWNoZHJzW3ZlcmJvc2VpbmRleF0uc2hfc2l6ZSAvCi0JCQkJc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpOwotCWVuZCA9IHBvcyArIChudW1fdmVyYm9zZSAqIHNpemVvZihzdHJ1Y3QgbW9kX2RlYnVnKSk7Ci0KLQlmb3IgKDsgcG9zIDwgZW5kOyBwb3MgKz0gc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpKSB7Ci0JCWRlYnVnX2luZm8gPSAoc3RydWN0IG1vZF9kZWJ1ZyAqKXBvczsKLQkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoZGVidWdfaW5mby0+bW9kbmFtZSwKLQkJCWRlYnVnX2luZm8tPnR5cGUsIGRlYnVnX2luZm8tPmxvZ2ljYWxfbW9kbmFtZSwKLQkJCWRlYnVnX2luZm8tPmZsYWdfbmFtZXMsIGRlYnVnX2luZm8tPmhhc2gsCi0JCQlkZWJ1Z19pbmZvLT5oYXNoMik7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGRlYnVnW2ldLm1vZG5hbWUsCisJCQkJCSAgICAgIGRlYnVnW2ldLnR5cGUsCisJCQkJCSAgICAgIGRlYnVnW2ldLmxvZ2ljYWxfbW9kbmFtZSwKKwkJCQkJICAgICAgZGVidWdbaV0uZmxhZ19uYW1lcywKKwkJCQkJICAgICAgZGVidWdbaV0uaGFzaCwgZGVidWdbaV0uaGFzaDIpOwogCX0KLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZHluYW1pY19wcmludGtfc2V0dXAoRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkJCXVuc2lnbmVkIGludCB2ZXJib3NlaW5kZXgpCi17Ci19CiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHICovCit9CiAKIHN0YXRpYyB2b2lkICptb2R1bGVfYWxsb2NfdXBkYXRlX2JvdW5kcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC0xODM0LDM2ICsxODQyLDE4IEBACiAJRWxmX0VoZHIgKmhkcjsKIAlFbGZfU2hkciAqc2VjaGRyczsKIAljaGFyICpzZWNzdHJpbmdzLCAqYXJncywgKm1vZG1hZ2ljLCAqc3RydGFiID0gTlVMTDsKKwljaGFyICpzdGFnaW5nOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBzeW1pbmRleCA9IDA7CiAJdW5zaWduZWQgaW50IHN0cmluZGV4ID0gMDsKLQl1bnNpZ25lZCBpbnQgc2V0dXBpbmRleDsKLQl1bnNpZ25lZCBpbnQgZXhpbmRleDsKLQl1bnNpZ25lZCBpbnQgZXhwb3J0aW5kZXg7Ci0JdW5zaWduZWQgaW50IG1vZGluZGV4OwotCXVuc2lnbmVkIGludCBvYnNwYXJtaW5kZXg7Ci0JdW5zaWduZWQgaW50IGluZm9pbmRleDsKLQl1bnNpZ25lZCBpbnQgZ3BsaW5kZXg7Ci0JdW5zaWduZWQgaW50IGNyY2luZGV4OwotCXVuc2lnbmVkIGludCBncGxjcmNpbmRleDsKLQl1bnNpZ25lZCBpbnQgdmVyc2luZGV4OwotCXVuc2lnbmVkIGludCBwY3B1aW5kZXg7Ci0JdW5zaWduZWQgaW50IGdwbGZ1dHVyZWluZGV4OwotCXVuc2lnbmVkIGludCBncGxmdXR1cmVjcmNpbmRleDsKKwl1bnNpZ25lZCBpbnQgbW9kaW5kZXgsIHZlcnNpbmRleCwgaW5mb2luZGV4LCBwY3B1aW5kZXg7CiAJdW5zaWduZWQgaW50IHVud2luZGV4ID0gMDsKLSNpZmRlZiBDT05GSUdfVU5VU0VEX1NZTUJPTFMKLQl1bnNpZ25lZCBpbnQgdW51c2VkaW5kZXg7Ci0JdW5zaWduZWQgaW50IHVudXNlZGNyY2luZGV4OwotCXVuc2lnbmVkIGludCB1bnVzZWRncGxpbmRleDsKLQl1bnNpZ25lZCBpbnQgdW51c2VkZ3BsY3JjaW5kZXg7Ci0jZW5kaWYKLQl1bnNpZ25lZCBpbnQgbWFya2Vyc2luZGV4OwotCXVuc2lnbmVkIGludCBtYXJrZXJzc3RyaW5nc2luZGV4OwotCXVuc2lnbmVkIGludCB2ZXJib3NlaW5kZXg7CisJdW5zaWduZWQgaW50IG51bV9rcCwgbnVtX21jb3VudDsKKwlzdHJ1Y3Qga2VybmVsX3BhcmFtICprcDsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAJbG9uZyBlcnIgPSAwOwogCXZvaWQgKnBlcmNwdSA9IE5VTEwsICpwdHIgPSBOVUxMOyAvKiBTdG9wcyBzcHVyaW91cyBnY2Mgd2FybmluZyAqLwotCXN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4dGFibGU7CisJdW5zaWduZWQgbG9uZyAqbXNlZzsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzOwogCiAJREVCVUdQKCJsb2FkX21vZHVsZTogdW1vZD0lcCwgbGVuPSVsdSwgdWFyZ3M9JXBcbiIsCkBAIC0xOTI3LDYgKzE5MTcsNyBAQAogCQllcnIgPSAtRU5PRVhFQzsKIAkJZ290byBmcmVlX2hkcjsKIAl9CisJLyogVGhpcyBpcyB0ZW1wb3Jhcnk6IHBvaW50IG1vZCBpbnRvIGNvcHkgb2YgZGF0YS4gKi8KIAltb2QgPSAodm9pZCAqKXNlY2hkcnNbbW9kaW5kZXhdLnNoX2FkZHI7CiAKIAlpZiAoc3ltaW5kZXggPT0gMCkgewpAQCAtMTkzNiwyMiArMTkyNyw2IEBACiAJCWdvdG8gZnJlZV9oZHI7CiAJfQogCi0JLyogT3B0aW9uYWwgc2VjdGlvbnMgKi8KLQlleHBvcnRpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYiIpOwotCWdwbGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiX2dwbCIpOwotCWdwbGZ1dHVyZWluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiX2dwbF9mdXR1cmUiKTsKLQljcmNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa2NyY3RhYiIpOwotCWdwbGNyY2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiX2dwbCIpOwotCWdwbGZ1dHVyZWNyY2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiX2dwbF9mdXR1cmUiKTsKLSNpZmRlZiBDT05GSUdfVU5VU0VEX1NZTUJPTFMKLQl1bnVzZWRpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYl91bnVzZWQiKTsKLQl1bnVzZWRncGxpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYl91bnVzZWRfZ3BsIik7Ci0JdW51c2VkY3JjaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWJfdW51c2VkIik7Ci0JdW51c2VkZ3BsY3JjaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWJfdW51c2VkX2dwbCIpOwotI2VuZGlmCi0Jc2V0dXBpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fcGFyYW0iKTsKLQlleGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19leF90YWJsZSIpOwotCW9ic3Bhcm1pbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fb2JzcGFybSIpOwogCXZlcnNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fdmVyc2lvbnMiKTsKIAlpbmZvaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICIubW9kaW5mbyIpOwogCXBjcHVpbmRleCA9IGZpbmRfcGNwdXNlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MpOwpAQCAtMTk4OSw2ICsxOTY0LDE0IEBACiAJCWdvdG8gZnJlZV9oZHI7CiAJfQogCisJc3RhZ2luZyA9IGdldF9tb2RpbmZvKHNlY2hkcnMsIGluZm9pbmRleCwgInN0YWdpbmciKTsKKwlpZiAoc3RhZ2luZykgeworCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfQ1JBUCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtb2R1bGUgaXMgZnJvbSB0aGUgc3RhZ2luZyBkaXJlY3RvcnksIgorCQkgICAgICAgIiB0aGUgcXVhbGl0eSBpcyB1bmtub3duLCB5b3UgaGF2ZSBiZWVuIHdhcm5lZC5cbiIsCisJCSAgICAgICBtb2QtPm5hbWUpOworCX0KKwogCS8qIE5vdyBjb3B5IGluIGFyZ3MgKi8KIAlhcmdzID0gc3RybmR1cF91c2VyKHVhcmdzLCB+MFVMID4+IDEpOwogCWlmIChJU19FUlIoYXJncykpIHsKQEAgLTIwOTksNDIgKzIwODIsNTcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCi0JLyogU2V0IHVwIEVYUE9SVGVkICYgRVhQT1JUX0dQTGVkIHN5bWJvbHMgKHNlY3Rpb24gMCBpcyAwIGxlbmd0aCkgKi8KLQltb2QtPm51bV9zeW1zID0gc2VjaGRyc1tleHBvcnRpbmRleF0uc2hfc2l6ZSAvIHNpemVvZigqbW9kLT5zeW1zKTsKLQltb2QtPnN5bXMgPSAodm9pZCAqKXNlY2hkcnNbZXhwb3J0aW5kZXhdLnNoX2FkZHI7Ci0JaWYgKGNyY2luZGV4KQotCQltb2QtPmNyY3MgPSAodm9pZCAqKXNlY2hkcnNbY3JjaW5kZXhdLnNoX2FkZHI7Ci0JbW9kLT5udW1fZ3BsX3N5bXMgPSBzZWNoZHJzW2dwbGluZGV4XS5zaF9zaXplIC8gc2l6ZW9mKCptb2QtPmdwbF9zeW1zKTsKLQltb2QtPmdwbF9zeW1zID0gKHZvaWQgKilzZWNoZHJzW2dwbGluZGV4XS5zaF9hZGRyOwotCWlmIChncGxjcmNpbmRleCkKLQkJbW9kLT5ncGxfY3JjcyA9ICh2b2lkICopc2VjaGRyc1tncGxjcmNpbmRleF0uc2hfYWRkcjsKLQltb2QtPm51bV9ncGxfZnV0dXJlX3N5bXMgPSBzZWNoZHJzW2dwbGZ1dHVyZWluZGV4XS5zaF9zaXplIC8KLQkJCQkJc2l6ZW9mKCptb2QtPmdwbF9mdXR1cmVfc3ltcyk7Ci0JbW9kLT5ncGxfZnV0dXJlX3N5bXMgPSAodm9pZCAqKXNlY2hkcnNbZ3BsZnV0dXJlaW5kZXhdLnNoX2FkZHI7Ci0JaWYgKGdwbGZ1dHVyZWNyY2luZGV4KQotCQltb2QtPmdwbF9mdXR1cmVfY3JjcyA9ICh2b2lkICopc2VjaGRyc1tncGxmdXR1cmVjcmNpbmRleF0uc2hfYWRkcjsKKwkvKiBOb3cgd2UndmUgZ290IGV2ZXJ5dGhpbmcgaW4gdGhlIGZpbmFsIGxvY2F0aW9ucywgd2UgY2FuCisJICogZmluZCBvcHRpb25hbCBzZWN0aW9ucy4gKi8KKwlrcCA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3BhcmFtIiwgc2l6ZW9mKCprcCksCisJCQkgICZudW1fa3ApOworCW1vZC0+c3ltcyA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWIiLAorCQkJCSBzaXplb2YoKm1vZC0+c3ltcyksICZtb2QtPm51bV9zeW1zKTsKKwltb2QtPmNyY3MgPSBzZWN0aW9uX2FkZHIoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiIik7CisJbW9kLT5ncGxfc3ltcyA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWJfZ3BsIiwKKwkJCQkgICAgIHNpemVvZigqbW9kLT5ncGxfc3ltcyksCisJCQkJICAgICAmbW9kLT5udW1fZ3BsX3N5bXMpOworCW1vZC0+Z3BsX2NyY3MgPSBzZWN0aW9uX2FkZHIoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiX2dwbCIpOworCW1vZC0+Z3BsX2Z1dHVyZV9zeW1zID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKKwkJCQkJICAgICJfX2tzeW10YWJfZ3BsX2Z1dHVyZSIsCisJCQkJCSAgICBzaXplb2YoKm1vZC0+Z3BsX2Z1dHVyZV9zeW1zKSwKKwkJCQkJICAgICZtb2QtPm51bV9ncGxfZnV0dXJlX3N5bXMpOworCW1vZC0+Z3BsX2Z1dHVyZV9jcmNzID0gc2VjdGlvbl9hZGRyKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKKwkJCQkJICAgICJfX2tjcmN0YWJfZ3BsX2Z1dHVyZSIpOwogCiAjaWZkZWYgQ09ORklHX1VOVVNFRF9TWU1CT0xTCi0JbW9kLT5udW1fdW51c2VkX3N5bXMgPSBzZWNoZHJzW3VudXNlZGluZGV4XS5zaF9zaXplIC8KLQkJCQkJc2l6ZW9mKCptb2QtPnVudXNlZF9zeW1zKTsKLQltb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMgPSBzZWNoZHJzW3VudXNlZGdwbGluZGV4XS5zaF9zaXplIC8KLQkJCQkJc2l6ZW9mKCptb2QtPnVudXNlZF9ncGxfc3ltcyk7Ci0JbW9kLT51bnVzZWRfc3ltcyA9ICh2b2lkICopc2VjaGRyc1t1bnVzZWRpbmRleF0uc2hfYWRkcjsKLQlpZiAodW51c2VkY3JjaW5kZXgpCi0JCW1vZC0+dW51c2VkX2NyY3MgPSAodm9pZCAqKXNlY2hkcnNbdW51c2VkY3JjaW5kZXhdLnNoX2FkZHI7Ci0JbW9kLT51bnVzZWRfZ3BsX3N5bXMgPSAodm9pZCAqKXNlY2hkcnNbdW51c2VkZ3BsaW5kZXhdLnNoX2FkZHI7Ci0JaWYgKHVudXNlZGdwbGNyY2luZGV4KQotCQltb2QtPnVudXNlZF9ncGxfY3JjcwotCQkJPSAodm9pZCAqKXNlY2hkcnNbdW51c2VkZ3BsY3JjaW5kZXhdLnNoX2FkZHI7CisJbW9kLT51bnVzZWRfc3ltcyA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCisJCQkJCSJfX2tzeW10YWJfdW51c2VkIiwKKwkJCQkJc2l6ZW9mKCptb2QtPnVudXNlZF9zeW1zKSwKKwkJCQkJJm1vZC0+bnVtX3VudXNlZF9zeW1zKTsKKwltb2QtPnVudXNlZF9jcmNzID0gc2VjdGlvbl9hZGRyKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKKwkJCQkJIl9fa2NyY3RhYl91bnVzZWQiKTsKKwltb2QtPnVudXNlZF9ncGxfc3ltcyA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCisJCQkJCSAgICAiX19rc3ltdGFiX3VudXNlZF9ncGwiLAorCQkJCQkgICAgc2l6ZW9mKCptb2QtPnVudXNlZF9ncGxfc3ltcyksCisJCQkJCSAgICAmbW9kLT5udW1fdW51c2VkX2dwbF9zeW1zKTsKKwltb2QtPnVudXNlZF9ncGxfY3JjcyA9IHNlY3Rpb25fYWRkcihoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCisJCQkJCSAgICAiX19rY3JjdGFiX3VudXNlZF9ncGwiKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BUktFUlMKKwltb2QtPm1hcmtlcnMgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19tYXJrZXJzIiwKKwkJCQkgICAgc2l6ZW9mKCptb2QtPm1hcmtlcnMpLCAmbW9kLT5udW1fbWFya2Vycyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKKwltb2QtPnRyYWNlcG9pbnRzID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKKwkJCQkJIl9fdHJhY2Vwb2ludHMiLAorCQkJCQlzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHMpLAorCQkJCQkmbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlMKLQlpZiAoKG1vZC0+bnVtX3N5bXMgJiYgIWNyY2luZGV4KQotCSAgICB8fCAobW9kLT5udW1fZ3BsX3N5bXMgJiYgIWdwbGNyY2luZGV4KQotCSAgICB8fCAobW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zICYmICFncGxmdXR1cmVjcmNpbmRleCkKKwlpZiAoKG1vZC0+bnVtX3N5bXMgJiYgIW1vZC0+Y3JjcykKKwkgICAgfHwgKG1vZC0+bnVtX2dwbF9zeW1zICYmICFtb2QtPmdwbF9jcmNzKQorCSAgICB8fCAobW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zICYmICFtb2QtPmdwbF9mdXR1cmVfY3JjcykKICNpZmRlZiBDT05GSUdfVU5VU0VEX1NZTUJPTFMKLQkgICAgfHwgKG1vZC0+bnVtX3VudXNlZF9zeW1zICYmICF1bnVzZWRjcmNpbmRleCkKLQkgICAgfHwgKG1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyAmJiAhdW51c2VkZ3BsY3JjaW5kZXgpCisJICAgIHx8IChtb2QtPm51bV91bnVzZWRfc3ltcyAmJiAhbW9kLT51bnVzZWRfY3JjcykKKwkgICAgfHwgKG1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyAmJiAhbW9kLT51bnVzZWRfZ3BsX2NyY3MpCiAjZW5kaWYKIAkJKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyB2ZXJzaW9ucyBmb3IgZXhwb3J0ZWQgc3ltYm9scy5cbiIsIG1vZC0+bmFtZSk7CkBAIC0yMTQzLDEwICsyMTQxLDYgQEAKIAkJCWdvdG8gY2xlYW51cDsKIAl9CiAjZW5kaWYKLQltYXJrZXJzaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX21hcmtlcnMiKTsKLSAJbWFya2Vyc3N0cmluZ3NpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKLQkJCQkJIl9fbWFya2Vyc19zdHJpbmdzIik7Ci0JdmVyYm9zZWluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX192ZXJib3NlIik7CiAKIAkvKiBOb3cgZG8gcmVsb2NhdGlvbnMuICovCiAJZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CkBAIC0yMTY5LDIyICsyMTYzLDE2IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBjbGVhbnVwOwogCX0KLSNpZmRlZiBDT05GSUdfTUFSS0VSUwotCW1vZC0+bWFya2VycyA9ICh2b2lkICopc2VjaGRyc1ttYXJrZXJzaW5kZXhdLnNoX2FkZHI7Ci0JbW9kLT5udW1fbWFya2VycyA9Ci0JCXNlY2hkcnNbbWFya2Vyc2luZGV4XS5zaF9zaXplIC8gc2l6ZW9mKCptb2QtPm1hcmtlcnMpOwotI2VuZGlmCiAKICAgICAgICAgLyogRmluZCBkdXBsaWNhdGUgc3ltYm9scyAqLwogCWVyciA9IHZlcmlmeV9leHBvcnRfc3ltYm9scyhtb2QpOwotCiAJaWYgKGVyciA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAogICAJLyogU2V0IHVwIGFuZCBzb3J0IGV4Y2VwdGlvbiB0YWJsZSAqLwotCW1vZC0+bnVtX2V4ZW50cmllcyA9IHNlY2hkcnNbZXhpbmRleF0uc2hfc2l6ZSAvIHNpemVvZigqbW9kLT5leHRhYmxlKTsKLQltb2QtPmV4dGFibGUgPSBleHRhYmxlID0gKHZvaWQgKilzZWNoZHJzW2V4aW5kZXhdLnNoX2FkZHI7Ci0Jc29ydF9leHRhYmxlKGV4dGFibGUsIGV4dGFibGUgKyBtb2QtPm51bV9leGVudHJpZXMpOworCW1vZC0+ZXh0YWJsZSA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2V4X3RhYmxlIiwKKwkJCQkgICAgc2l6ZW9mKCptb2QtPmV4dGFibGUpLCAmbW9kLT5udW1fZXhlbnRyaWVzKTsKKwlzb3J0X2V4dGFibGUobW9kLT5leHRhYmxlLCBtb2QtPmV4dGFibGUgKyBtb2QtPm51bV9leGVudHJpZXMpOwogCiAJLyogRmluYWxseSwgY29weSBwZXJjcHUgYXJlYSBvdmVyLiAqLwogCXBlcmNwdV9tb2Rjb3B5KG1vZC0+cGVyY3B1LCAodm9pZCAqKXNlY2hkcnNbcGNwdWluZGV4XS5zaF9hZGRyLApAQCAtMjE5MiwxMiArMjE4MCwyOSBAQAogCiAJYWRkX2thbGxzeW1zKG1vZCwgc2VjaGRycywgc3ltaW5kZXgsIHN0cmluZGV4LCBzZWNzdHJpbmdzKTsKIAorCWlmICghbW9kLT50YWludHMpIHsKKwkJc3RydWN0IG1vZF9kZWJ1ZyAqZGVidWc7CisJCXVuc2lnbmVkIGludCBudW1fZGVidWc7CisKICNpZmRlZiBDT05GSUdfTUFSS0VSUwotCWlmICghbW9kLT50YWludHMpCiAJCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAogCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2Vycyk7CiAjZW5kaWYKLQlkeW5hbWljX3ByaW50a19zZXR1cChzZWNoZHJzLCB2ZXJib3NlaW5kZXgpOworCQlkZWJ1ZyA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3ZlcmJvc2UiLAorCQkJCSAgICAgc2l6ZW9mKCpkZWJ1ZyksICZudW1fZGVidWcpOworCQlkeW5hbWljX3ByaW50a19zZXR1cChkZWJ1ZywgbnVtX2RlYnVnKTsKKworI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAorCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKKyNlbmRpZgorCX0KKworCS8qIHNlY2hkcnNbMF0uc2hfc2l6ZSBpcyBhbHdheXMgemVybyAqLworCW1zZWcgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19tY291bnRfbG9jIiwKKwkJCSAgICBzaXplb2YoKm1zZWcpLCAmbnVtX21jb3VudCk7CisJZnRyYWNlX2luaXRfbW9kdWxlKG1zZWcsIG1zZWcgKyBudW1fbWNvdW50KTsKKwogCWVyciA9IG1vZHVsZV9maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1vZCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gY2xlYW51cDsKQEAgLTIyMjEsMzAgKzIyMjYsMjQgQEAKIAlzZXRfZnMob2xkX2ZzKTsKIAogCW1vZC0+YXJncyA9IGFyZ3M7Ci0JaWYgKG9ic3Bhcm1pbmRleCkKKwlpZiAoc2VjdGlvbl9hZGRyKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fb2JzcGFybSIpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSWdub3Jpbmcgb2Jzb2xldGUgcGFyYW1ldGVyc1xuIiwKIAkJICAgICAgIG1vZC0+bmFtZSk7CiAKIAkvKiBOb3cgc2V3IGl0IGludG8gdGhlIGxpc3RzIHNvIHdlIGNhbiBnZXQgbG9ja2RlcCBhbmQgb29wcwotICAgICAgICAgKiBpbmZvIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLiAgTm9vbmUgc2hvdWxkIGFjY2VzcyB1cywgc2luY2UKLSAgICAgICAgICogc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KCkgd2lsbCBmYWlsLiAqLwotCXN0b3BfbWFjaGluZShfX2xpbmtfbW9kdWxlLCBtb2QsIE5VTEwpOworCSAqIGluZm8gZHVyaW5nIGFyZ3VtZW50IHBhcnNpbmcuICBOb29uZSBzaG91bGQgYWNjZXNzIHVzLCBzaW5jZQorCSAqIHN0cm9uZ190cnlfbW9kdWxlX2dldCgpIHdpbGwgZmFpbC4KKwkgKiBsb2NrZGVwL29vcHMgY2FuIHJ1biBhc3luY2hyb25vdXMsIHNvIHVzZSB0aGUgUkNVIGxpc3QgaW5zZXJ0aW9uCisJICogZnVuY3Rpb24gdG8gaW5zZXJ0IGluIGEgd2F5IHNhZmUgdG8gY29uY3VycmVudCByZWFkZXJzLgorCSAqIFRoZSBtdXRleCBwcm90ZWN0cyBhZ2FpbnN0IGNvbmN1cnJlbnQgd3JpdGVycy4KKwkgKi8KKwlsaXN0X2FkZF9yY3UoJm1vZC0+bGlzdCwgJm1vZHVsZXMpOwogCi0JLyogU2l6ZSBvZiBzZWN0aW9uIDAgaXMgMCwgc28gdGhpcyB3b3JrcyB3ZWxsIGlmIG5vIHBhcmFtcyAqLwotCWVyciA9IHBhcnNlX2FyZ3MobW9kLT5uYW1lLCBtb2QtPmFyZ3MsCi0JCQkgKHN0cnVjdCBrZXJuZWxfcGFyYW0gKikKLQkJCSBzZWNoZHJzW3NldHVwaW5kZXhdLnNoX2FkZHIsCi0JCQkgc2VjaGRyc1tzZXR1cGluZGV4XS5zaF9zaXplCi0JCQkgLyBzaXplb2Yoc3RydWN0IGtlcm5lbF9wYXJhbSksCi0JCQkgTlVMTCk7CisJZXJyID0gcGFyc2VfYXJncyhtb2QtPm5hbWUsIG1vZC0+YXJncywga3AsIG51bV9rcCwgTlVMTCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gdW5saW5rOwogCi0JZXJyID0gbW9kX3N5c2ZzX3NldHVwKG1vZCwKLQkJCSAgICAgIChzdHJ1Y3Qga2VybmVsX3BhcmFtICopCi0JCQkgICAgICBzZWNoZHJzW3NldHVwaW5kZXhdLnNoX2FkZHIsCi0JCQkgICAgICBzZWNoZHJzW3NldHVwaW5kZXhdLnNoX3NpemUKLQkJCSAgICAgIC8gc2l6ZW9mKHN0cnVjdCBrZXJuZWxfcGFyYW0pKTsKKwllcnIgPSBtb2Rfc3lzZnNfc2V0dXAobW9kLCBrcCwgbnVtX2twKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byB1bmxpbms7CiAJYWRkX3NlY3RfYXR0cnMobW9kLCBoZHItPmVfc2hudW0sIHNlY3N0cmluZ3MsIHNlY2hkcnMpOwpAQCAtMjI2Nyw2ICsyMjY2LDcgQEAKICBjbGVhbnVwOgogCWtvYmplY3RfZGVsKCZtb2QtPm1rb2JqLmtvYmopOwogCWtvYmplY3RfcHV0KCZtb2QtPm1rb2JqLmtvYmopOworCWZ0cmFjZV9yZWxlYXNlKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKICBmcmVlX3VubG9hZDoKIAltb2R1bGVfdW5sb2FkX2ZyZWUobW9kKTsKIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOwpAQCAtMjQzMiw3ICsyNDMyLDcgQEAKIAljb25zdCBjaGFyICpyZXQgPSBOVUxMOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW9kLCAmbW9kdWxlcywgbGlzdCkgewogCQlpZiAod2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF9zaXplKQogCQkgICAgfHwgd2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKSkgewogCQkJaWYgKG1vZG5hbWUpCkBAIC0yNDU1LDcgKzI0NTUsNyBAQAogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKIAkJaWYgKHdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9pbml0LCBtb2QtPmluaXRfc2l6ZSkgfHwKIAkJICAgIHdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSkpIHsKIAkJCWNvbnN0IGNoYXIgKnN5bTsKQEAgLTI0NzksNyArMjQ3OSw3IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW9kLCAmbW9kdWxlcywgbGlzdCkgewogCQlpZiAod2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF9zaXplKSB8fAogCQkgICAgd2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKSkgewogCQkJY29uc3QgY2hhciAqc3ltOwpAQCAtMjUwNiw3ICsyNTA2LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CiAJCWlmIChzeW1udW0gPCBtb2QtPm51bV9zeW10YWIpIHsKIAkJCSp2YWx1ZSA9IG1vZC0+c3ltdGFiW3N5bW51bV0uc3RfdmFsdWU7CiAJCQkqdHlwZSA9IG1vZC0+c3ltdGFiW3N5bW51bV0uc3RfaW5mbzsKQEAgLTI1NDksNyArMjU0OSw3IEBACiAJCQlyZXQgPSBtb2RfZmluZF9zeW1uYW1lKG1vZCwgY29sb24rMSk7CiAJCSpjb2xvbiA9ICc6JzsKIAl9IGVsc2UgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1vZCwgJm1vZHVsZXMsIGxpc3QpCiAJCQlpZiAoKHJldCA9IG1vZF9maW5kX3N5bW5hbWUobW9kLCBuYW1lKSkgIT0gMCkKIAkJCQlicmVhazsKIAl9CkBAIC0yNTU4LDIzICsyNTU4LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAotLyogQ2FsbGVkIGJ5IHRoZSAvcHJvYyBmaWxlIHN5c3RlbSB0byByZXR1cm4gYSBsaXN0IG9mIG1vZHVsZXMuICovCi1zdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7Ci0JcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZtb2R1bGVzLCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHAsICZtb2R1bGVzLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQotewotCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKLX0KLQogc3RhdGljIGNoYXIgKm1vZHVsZV9mbGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1ZikKIHsKIAlpbnQgYnggPSAwOwpAQCAtMjU4Nyw2ICsyNTcwLDggQEAKIAkJCWJ1ZltieCsrXSA9ICdQJzsKIAkJaWYgKG1vZC0+dGFpbnRzICYgKDEgPDwgVEFJTlRfRk9SQ0VEX01PRFVMRSkpCiAJCQlidWZbYngrK10gPSAnRic7CisJCWlmIChtb2QtPnRhaW50cyAmICgxIDw8IFRBSU5UX0NSQVApKQorCQkJYnVmW2J4KytdID0gJ0MnOwogCQkvKgogCQkgKiBUQUlOVF9GT1JDRURfUk1NT0Q6IGNvdWxkIGJlIGFkZGVkLgogCQkgKiBUQUlOVF9VTlNBRkVfU01QLCBUQUlOVF9NQUNISU5FX0NIRUNLLCBUQUlOVF9CQURfUEFHRSBkb24ndApAQCAtMjYwNiw2ICsyNTkxLDI0IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisvKiBDYWxsZWQgYnkgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIHRvIHJldHVybiBhIGxpc3Qgb2YgbW9kdWxlcy4gKi8KK3N0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJm1vZHVsZXMsICpwb3MpOworfQorCitzdGF0aWMgdm9pZCAqbV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIHNlcV9saXN0X25leHQocCwgJm1vZHVsZXMsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIG1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOworfQorCiBzdGF0aWMgaW50IG1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW9kdWxlLCBsaXN0KTsKQEAgLTI2MzYsMTMgKzI2MzksMzMgQEAKICAgIFdoZXJlIHJlZmNvdW50IGlzIGEgbnVtYmVyIG9yIC0sIGFuZCBkZXBzIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QKICAgIG9mIGRlcGVuZHMgb3IgLS4KICovCi1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbW9kdWxlc19vcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbW9kdWxlc19vcCA9IHsKIAkuc3RhcnQJPSBtX3N0YXJ0LAogCS5uZXh0CT0gbV9uZXh0LAogCS5zdG9wCT0gbV9zdG9wLAogCS5zaG93CT0gbV9zaG93CiB9OwogCitzdGF0aWMgaW50IG1vZHVsZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJm1vZHVsZXNfb3ApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21vZHVsZXNfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBtb2R1bGVzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2NfbW9kdWxlc19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoIm1vZHVsZXMiLCAwLCBOVUxMLCAmcHJvY19tb2R1bGVzX29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19tb2R1bGVzX2luaXQpOworI2VuZGlmCisKIC8qIEdpdmVuIGFuIGFkZHJlc3MsIGxvb2sgZm9yIGl0IGluIHRoZSBtb2R1bGUgZXhjZXB0aW9uIHRhYmxlcy4gKi8KIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnNlYXJjaF9tb2R1bGVfZXh0YWJsZXModW5zaWduZWQgbG9uZyBhZGRyKQogewpAQCAtMjY1MCw3ICsyNjczLDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CiAJCWlmIChtb2QtPm51bV9leGVudHJpZXMgPT0gMCkKIAkJCWNvbnRpbnVlOwogCkBAIC0yNjc2LDcgKzI2OTksNyBAQAogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CiAJCWlmICh3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpKSB7CiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJcmV0dXJuIDE7CkBAIC0yNjk3LDcgKzI3MjAsNyBAQAogCWlmIChhZGRyIDwgbW9kdWxlX2FkZHJfbWluIHx8IGFkZHIgPiBtb2R1bGVfYWRkcl9tYXgpCiAJCXJldHVybiBOVUxMOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1vZCwgJm1vZHVsZXMsIGxpc3QpCiAJCWlmICh3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfaW5pdCwgbW9kLT5pbml0X3RleHRfc2l6ZSkKIAkJICAgIHx8IHdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfdGV4dF9zaXplKSkKIAkJCXJldHVybiBtb2Q7CkBAIC0yNzIyLDggKzI3NDUsMTEgQEAKIAljaGFyIGJ1Zls4XTsKIAogCXByaW50aygiTW9kdWxlcyBsaW5rZWQgaW46Iik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KQorCS8qIE1vc3QgY2FsbGVycyBzaG91bGQgYWxyZWFkeSBoYXZlIHByZWVtcHQgZGlzYWJsZWQsIGJ1dCBtYWtlIHN1cmUgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KQogCQlwcmludGsoIiAlcyVzIiwgbW9kLT5uYW1lLCBtb2R1bGVfZmxhZ3MobW9kLCBidWYpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCWlmIChsYXN0X3VubG9hZGVkX21vZHVsZVswXSkKIAkJcHJpbnRrKCIgW2xhc3QgdW5sb2FkZWQ6ICVzXSIsIGxhc3RfdW5sb2FkZWRfbW9kdWxlKTsKIAlwcmludGsoIlxuIik7CkBAIC0yNzQ4LDMgKzI3NzQsNTAgQEAKIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7CiB9CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwordm9pZCBtb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKHZvaWQpCit7CisJc3RydWN0IG1vZHVsZSAqbW9kOworCisJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpCisJCWlmICghbW9kLT50YWludHMpCisJCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAorCQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOworfQorCisvKgorICogUmV0dXJucyAwIGlmIGN1cnJlbnQgbm90IGZvdW5kLgorICogUmV0dXJucyAxIGlmIGN1cnJlbnQgZm91bmQuCisgKi8KK2ludCBtb2R1bGVfZ2V0X2l0ZXJfdHJhY2Vwb2ludHMoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgbW9kdWxlICppdGVyX21vZDsKKwlpbnQgZm91bmQgPSAwOworCisJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXJfbW9kLCAmbW9kdWxlcywgbGlzdCkgeworCQlpZiAoIWl0ZXJfbW9kLT50YWludHMpIHsKKwkJCS8qCisJCQkgKiBTb3J0ZWQgbW9kdWxlIGxpc3QKKwkJCSAqLworCQkJaWYgKGl0ZXJfbW9kIDwgaXRlci0+bW9kdWxlKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSBpZiAoaXRlcl9tb2QgPiBpdGVyLT5tb2R1bGUpCisJCQkJaXRlci0+dHJhY2Vwb2ludCA9IE5VTEw7CisJCQlmb3VuZCA9IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2UoJml0ZXItPnRyYWNlcG9pbnQsCisJCQkJaXRlcl9tb2QtPnRyYWNlcG9pbnRzLAorCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50cworCQkJCQkrIGl0ZXJfbW9kLT5udW1fdHJhY2Vwb2ludHMpOworCQkJaWYgKGZvdW5kKSB7CisJCQkJaXRlci0+bW9kdWxlID0gaXRlcl9tb2Q7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOworCXJldHVybiBmb3VuZDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL25vdGlmaWVyLmMgYi9rZXJuZWwvbm90aWZpZXIuYwppbmRleCA4MjNiZTExNS4uNDI4MmMwYSAxMDA2NDQKLS0tIGEva2VybmVsL25vdGlmaWVyLmMKKysrIGIva2VybmVsL25vdGlmaWVyLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCiBzdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQoZGllX2NoYWluKTsKIAotaW50IG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAoraW50IG5vdHJhY2Ugbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLCBjb25zdCBjaGFyICpzdHIsCiAJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCiB7CiAJc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IGYyOTBlOGUuLjY1MTNhYWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC0zNCwxMyArMzQsNiBAQAogCiBFWFBPUlRfU1lNQk9MKHBhbmljX25vdGlmaWVyX2xpc3QpOwogCi1zdGF0aWMgaW50IF9faW5pdCBwYW5pY19zZXR1cChjaGFyICpzdHIpCi17Ci0JcGFuaWNfdGltZW91dCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJwYW5pYz0iLCBwYW5pY19zZXR1cCk7Ci0KIHN0YXRpYyBsb25nIG5vX2JsaW5rKGxvbmcgdGltZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTE2MSw2ICsxNTQsNyBAQAogCXsgVEFJTlRfRElFLCAnRCcsICcgJyB9LAogCXsgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFLCAnQScsICcgJyB9LAogCXsgVEFJTlRfV0FSTiwgJ1cnLCAnICcgfSwKKwl7IFRBSU5UX0NSQVAsICdDJywgJyAnIH0sCiB9OwogCiAvKioKQEAgLTE3NSw2ICsxNjksNyBAQAogICogICdVJyAtIFVzZXJzcGFjZS1kZWZpbmVkIG5hdWdodGluZXNzLgogICogICdBJyAtIEFDUEkgdGFibGUgb3ZlcnJpZGRlbi4KICAqICAnVycgLSBUYWludCBvbiB3YXJuaW5nLgorICogICdDJyAtIG1vZHVsZXMgZnJvbSBkcml2ZXJzL3N0YWdpbmcgYXJlIGxvYWRlZC4KICAqCiAgKglUaGUgc3RyaW5nIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGNhbGwgdG8gcHJpbnRfdGFpbnQoKS4KICAqLwpAQCAtMjE2LDEzICsyMTEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChhZGRfdGFpbnQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBwYXVzZV9vbl9vb3BzX3NldHVwKGNoYXIgKnN0cikKLXsKLQlwYXVzZV9vbl9vb3BzID0gc2ltcGxlX3N0cnRvdWwoc3RyLCBOVUxMLCAwKTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoInBhdXNlX29uX29vcHM9IiwgcGF1c2Vfb25fb29wc19zZXR1cCk7Ci0KIHN0YXRpYyB2b2lkIHNwaW5fbXNlYyhpbnQgbXNlY3MpCiB7CiAJaW50IGk7CkBAIC0zODIsMyArMzcwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woX19zdGFja19jaGtfZmFpbCk7CiAjZW5kaWYKKworY29yZV9wYXJhbShwYW5pYywgcGFuaWNfdGltZW91dCwgaW50LCAwNjQ0KTsKK2NvcmVfcGFyYW0ocGF1c2Vfb25fb29wcywgcGF1c2Vfb25fb29wcywgaW50LCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCBhZmM0NmEyLi5hMWUzMDI1IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0zNzMsNiArMzczLDggQEAKIH0KIAogLyogc3lzZnMgb3V0cHV0IGluIC9zeXMvbW9kdWxlcy9YWVovcGFyYW1ldGVycy8gKi8KKyNkZWZpbmUgdG9fbW9kdWxlX2F0dHIobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlLCBhdHRyKTsKKyNkZWZpbmUgdG9fbW9kdWxlX2tvYmplY3QobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBtb2R1bGVfa29iamVjdCwga29iaik7CiAKIGV4dGVybiBzdHJ1Y3Qga2VybmVsX3BhcmFtIF9fc3RhcnRfX19wYXJhbVtdLCBfX3N0b3BfX19wYXJhbVtdOwogCkBAIC0zODQsNiArMzg2LDcgQEAKIAogc3RydWN0IG1vZHVsZV9wYXJhbV9hdHRycwogeworCXVuc2lnbmVkIGludCBudW07CiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBncnA7CiAJc3RydWN0IHBhcmFtX2F0dHJpYnV0ZSBhdHRyc1swXTsKIH07CkBAIC00MzQsOTMgKzQzNywxMjAgQEAKIAogI2lmZGVmIENPTkZJR19TWVNGUwogLyoKLSAqIHBhcmFtX3N5c2ZzX3NldHVwIC0gc2V0dXAgc3lzZnMgc3VwcG9ydCBmb3Igb25lIG1vZHVsZSBvciBLQlVJTERfTU9ETkFNRQotICogQG1rOiBzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKGNvbnRhaW5zIHBhcmVudCBrb2JqZWN0KQotICogQGtwYXJhbTogYXJyYXkgb2Ygc3RydWN0IGtlcm5lbF9wYXJhbSwgdGhlIGFjdHVhbCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMKLSAqIEBudW1fcGFyYW1zOiBudW1iZXIgb2YgZW50cmllcyBpbiBhcnJheQotICogQG5hbWVfc2tpcDogb2Zmc2V0IHdoZXJlIHRoZSBwYXJhbWV0ZXIgbmFtZSBzdGFydCBpbiBrcGFyYW1bXS5uYW1lLiBOZWVkZWQgZm9yIGJ1aWx0LWluICJtb2R1bGVzIgorICogYWRkX3N5c2ZzX3BhcmFtIC0gYWRkIGEgcGFyYW1ldGVyIHRvIHN5c2ZzCisgKiBAbWs6IHN0cnVjdCBtb2R1bGVfa29iamVjdAorICogQGtwYXJhbTogdGhlIGFjdHVhbCBwYXJhbWV0ZXIgZGVmaW5pdGlvbiB0byBhZGQgdG8gc3lzZnMKKyAqIEBuYW1lOiBuYW1lIG9mIHBhcmFtZXRlcgogICoKLSAqIENyZWF0ZSBhIGtvYmplY3QgZm9yIGEgKHBlci1tb2R1bGUpIGdyb3VwIG9mIHBhcmFtZXRlcnMsIGFuZCBjcmVhdGUgZmlsZXMKLSAqIGluIHN5c2ZzLiBBIHBvaW50ZXIgdG8gdGhlIHBhcmFtX2tvYmplY3QgaXMgcmV0dXJuZWQgb24gc3VjY2VzcywKLSAqIE5VTEwgaWYgdGhlcmUncyBubyBwYXJhbWV0ZXIgdG8gZXhwb3J0LCBvciBvdGhlciBFUlJfUFRSKGVycikuCisgKiBDcmVhdGUgYSBrb2JqZWN0IGlmIGZvciBhIChwZXItbW9kdWxlKSBwYXJhbWV0ZXIgaWYgbXAgTlVMTCwgYW5kCisgKiBjcmVhdGUgZmlsZSBpbiBzeXNmcy4gIFJldHVybnMgYW4gZXJyb3Igb24gb3V0IG9mIG1lbW9yeS4gIEFsd2F5cyBjbGVhbnMgdXAKKyAqIGlmIHRoZXJlJ3MgYW4gZXJyb3IuCiAgKi8KLXN0YXRpYyBfX21vZGluaXQgc3RydWN0IG1vZHVsZV9wYXJhbV9hdHRycyAqCi1wYXJhbV9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKm1rLAotCQkgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKLQkJICB1bnNpZ25lZCBpbnQgbnVtX3BhcmFtcywKLQkJICB1bnNpZ25lZCBpbnQgbmFtZV9za2lwKQorc3RhdGljIF9fbW9kaW5pdCBpbnQgYWRkX3N5c2ZzX3BhcmFtKHN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWssCisJCQkJICAgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG1vZHVsZV9wYXJhbV9hdHRycyAqbXA7Ci0JdW5zaWduZWQgaW50IHZhbGlkX2F0dHJzID0gMDsKLQl1bnNpZ25lZCBpbnQgaSwgc2l6ZVsyXTsKLQlzdHJ1Y3QgcGFyYW1fYXR0cmlidXRlICpwYXR0cjsKLQlzdHJ1Y3QgYXR0cmlidXRlICoqZ2F0dHI7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgbW9kdWxlX3BhcmFtX2F0dHJzICpuZXc7CisJc3RydWN0IGF0dHJpYnV0ZSAqKmF0dHJzOworCWludCBlcnIsIG51bTsKIAotCWZvciAoaT0wOyBpPG51bV9wYXJhbXM7IGkrKykgewotCQlpZiAoa3BhcmFtW2ldLnBlcm0pCi0JCQl2YWxpZF9hdHRycysrOworCS8qIFdlIGRvbid0IGJvdGhlciBjYWxsaW5nIHRoaXMgd2l0aCBpbnZpc2libGUgcGFyYW1ldGVycy4gKi8KKwlCVUdfT04oIWtwLT5wZXJtKTsKKworCWlmICghbWstPm1wKSB7CisJCW51bSA9IDA7CisJCWF0dHJzID0gTlVMTDsKKwl9IGVsc2UgeworCQludW0gPSBtay0+bXAtPm51bTsKKwkJYXR0cnMgPSBtay0+bXAtPmdycC5hdHRyczsKIAl9CiAKLQlpZiAoIXZhbGlkX2F0dHJzKQotCQlyZXR1cm4gTlVMTDsKLQotCXNpemVbMF0gPSBBTElHTihzaXplb2YoKm1wKSArCi0JCQl2YWxpZF9hdHRycyAqIHNpemVvZihtcC0+YXR0cnNbMF0pLAotCQkJc2l6ZW9mKG1wLT5ncnAuYXR0cnNbMF0pKTsKLQlzaXplWzFdID0gKHZhbGlkX2F0dHJzICsgMSkgKiBzaXplb2YobXAtPmdycC5hdHRyc1swXSk7Ci0KLQltcCA9IGt6YWxsb2Moc2l6ZVswXSArIHNpemVbMV0sIEdGUF9LRVJORUwpOwotCWlmICghbXApCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JbXAtPmdycC5uYW1lID0gInBhcmFtZXRlcnMiOwotCW1wLT5ncnAuYXR0cnMgPSAodm9pZCAqKW1wICsgc2l6ZVswXTsKLQotCXBhdHRyID0gJm1wLT5hdHRyc1swXTsKLQlnYXR0ciA9ICZtcC0+Z3JwLmF0dHJzWzBdOwotCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyYW1zOyBpKyspIHsKLQkJc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AgPSAma3BhcmFtW2ldOwotCQlpZiAoa3AtPnBlcm0pIHsKLQkJCXBhdHRyLT5wYXJhbSA9IGtwOwotCQkJcGF0dHItPm1hdHRyLnNob3cgPSBwYXJhbV9hdHRyX3Nob3c7Ci0JCQlwYXR0ci0+bWF0dHIuc3RvcmUgPSBwYXJhbV9hdHRyX3N0b3JlOwotCQkJcGF0dHItPm1hdHRyLmF0dHIubmFtZSA9IChjaGFyICopJmtwLT5uYW1lW25hbWVfc2tpcF07Ci0JCQlwYXR0ci0+bWF0dHIuYXR0ci5tb2RlID0ga3AtPnBlcm07Ci0JCQkqKGdhdHRyKyspID0gJihwYXR0cisrKS0+bWF0dHIuYXR0cjsKLQkJfQorCS8qIEVubGFyZ2UuICovCisJbmV3ID0ga3JlYWxsb2MobWstPm1wLAorCQkgICAgICAgc2l6ZW9mKCptay0+bXApICsgc2l6ZW9mKG1rLT5tcC0+YXR0cnNbMF0pICogKG51bSsxKSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghbmV3KSB7CisJCWtmcmVlKG1rLT5tcCk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKIAl9Ci0JKmdhdHRyID0gTlVMTDsKLQotCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZtay0+a29iaiwgJm1wLT5ncnApKSkgewotCQlrZnJlZShtcCk7Ci0JCXJldHVybiBFUlJfUFRSKGVycik7CisJYXR0cnMgPSBrcmVhbGxvYyhhdHRycywgc2l6ZW9mKG5ldy0+Z3JwLmF0dHJzWzBdKSoobnVtKzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF0dHJzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9mcmVlX25ldzsKIAl9Ci0JcmV0dXJuIG1wOworCisJLyogU3lzZnMgd2FudHMgZXZlcnl0aGluZyB6ZXJvZWQuICovCisJbWVtc2V0KG5ldywgMCwgc2l6ZW9mKCpuZXcpKTsKKwltZW1zZXQoJm5ldy0+YXR0cnNbbnVtXSwgMCwgc2l6ZW9mKG5ldy0+YXR0cnNbbnVtXSkpOworCW1lbXNldCgmYXR0cnNbbnVtXSwgMCwgc2l6ZW9mKGF0dHJzW251bV0pKTsKKwluZXctPmdycC5uYW1lID0gInBhcmFtZXRlcnMiOworCW5ldy0+Z3JwLmF0dHJzID0gYXR0cnM7CisKKwkvKiBUYWNrIG5ldyBvbmUgb24gdGhlIGVuZC4gKi8KKwluZXctPmF0dHJzW251bV0ucGFyYW0gPSBrcDsKKwluZXctPmF0dHJzW251bV0ubWF0dHIuc2hvdyA9IHBhcmFtX2F0dHJfc2hvdzsKKwluZXctPmF0dHJzW251bV0ubWF0dHIuc3RvcmUgPSBwYXJhbV9hdHRyX3N0b3JlOworCW5ldy0+YXR0cnNbbnVtXS5tYXR0ci5hdHRyLm5hbWUgPSAoY2hhciAqKW5hbWU7CisJbmV3LT5hdHRyc1tudW1dLm1hdHRyLmF0dHIubW9kZSA9IGtwLT5wZXJtOworCW5ldy0+bnVtID0gbnVtKzE7CisKKwkvKiBGaXggdXAgYWxsIHRoZSBwb2ludGVycywgc2luY2Uga3JlYWxsb2MgY2FuIG1vdmUgdXMgKi8KKwlmb3IgKG51bSA9IDA7IG51bSA8IG5ldy0+bnVtOyBudW0rKykKKwkJbmV3LT5ncnAuYXR0cnNbbnVtXSA9ICZuZXctPmF0dHJzW251bV0ubWF0dHIuYXR0cjsKKwluZXctPmdycC5hdHRyc1tudW1dID0gTlVMTDsKKworCW1rLT5tcCA9IG5ldzsKKwlyZXR1cm4gMDsKKworZmFpbF9mcmVlX25ldzoKKwlrZnJlZShuZXcpOworZmFpbDoKKwltay0+bXAgPSBOVUxMOworCXJldHVybiBlcnI7CiB9CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUworc3RhdGljIHZvaWQgZnJlZV9tb2R1bGVfcGFyYW1fYXR0cnMoc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptaykKK3sKKwlrZnJlZShtay0+bXAtPmdycC5hdHRycyk7CisJa2ZyZWUobWstPm1wKTsKKwltay0+bXAgPSBOVUxMOworfQorCiAvKgogICogbW9kdWxlX3BhcmFtX3N5c2ZzX3NldHVwIC0gc2V0dXAgc3lzZnMgc3VwcG9ydCBmb3Igb25lIG1vZHVsZQogICogQG1vZDogbW9kdWxlCiAgKiBAa3BhcmFtOiBtb2R1bGUgcGFyYW1ldGVycyAoYXJyYXkpCiAgKiBAbnVtX3BhcmFtczogbnVtYmVyIG9mIG1vZHVsZSBwYXJhbWV0ZXJzCiAgKgotICogQWRkcyBzeXNmcyBlbnRyaWVzIGZvciBtb2R1bGUgcGFyYW1ldGVycywgYW5kIGNyZWF0ZXMgYSBsaW5rIGZyb20KLSAqIC9zeXMvbW9kdWxlL1ttb2QtPm5hbWVdL3BhcmFtZXRlcnMgdG8gL3N5cy9wYXJhbWV0ZXJzL1ttb2QtPm5hbWVdLworICogQWRkcyBzeXNmcyBlbnRyaWVzIGZvciBtb2R1bGUgcGFyYW1ldGVycyB1bmRlcgorICogL3N5cy9tb2R1bGUvW21vZC0+bmFtZV0vcGFyYW1ldGVycy8KICAqLwogaW50IG1vZHVsZV9wYXJhbV9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsCiAJCQkgICAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKIAkJCSAgICAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpCiB7Ci0Jc3RydWN0IG1vZHVsZV9wYXJhbV9hdHRycyAqbXA7CisJaW50IGksIGVycjsKKwlib29sIHBhcmFtcyA9IGZhbHNlOwogCi0JbXAgPSBwYXJhbV9zeXNmc19zZXR1cCgmbW9kLT5ta29iaiwga3BhcmFtLCBudW1fcGFyYW1zLCAwKTsKLQlpZiAoSVNfRVJSKG1wKSkKLQkJcmV0dXJuIFBUUl9FUlIobXApOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyYW1zOyBpKyspIHsKKwkJaWYgKGtwYXJhbVtpXS5wZXJtID09IDApCisJCQljb250aW51ZTsKKwkJZXJyID0gYWRkX3N5c2ZzX3BhcmFtKCZtb2QtPm1rb2JqLCAma3BhcmFtW2ldLCBrcGFyYW1baV0ubmFtZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlwYXJhbXMgPSB0cnVlOworCX0KIAotCW1vZC0+cGFyYW1fYXR0cnMgPSBtcDsKLQlyZXR1cm4gMDsKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIDA7CisKKwkvKiBDcmVhdGUgdGhlIHBhcmFtIGdyb3VwLiAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbW9kLT5ta29iai5rb2JqLCAmbW9kLT5ta29iai5tcC0+Z3JwKTsKKwlpZiAoZXJyKQorCQlmcmVlX21vZHVsZV9wYXJhbV9hdHRycygmbW9kLT5ta29iaik7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTUzMiw0MyArNTYyLDU1IEBACiAgKi8KIHZvaWQgbW9kdWxlX3BhcmFtX3N5c2ZzX3JlbW92ZShzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JaWYgKG1vZC0+cGFyYW1fYXR0cnMpIHsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtb2QtPm1rb2JqLmtvYmosCi0JCQkJICAgJm1vZC0+cGFyYW1fYXR0cnMtPmdycCk7CisJaWYgKG1vZC0+bWtvYmoubXApIHsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtb2QtPm1rb2JqLmtvYmosICZtb2QtPm1rb2JqLm1wLT5ncnApOwogCQkvKiBXZSBhcmUgcG9zaXRpdmUgdGhhdCBubyBvbmUgaXMgdXNpbmcgYW55IHBhcmFtCiAJCSAqIGF0dHJzIGF0IHRoaXMgcG9pbnQuICBEZWFsbG9jYXRlIGltbWVkaWF0ZWx5LiAqLwotCQlrZnJlZShtb2QtPnBhcmFtX2F0dHJzKTsKLQkJbW9kLT5wYXJhbV9hdHRycyA9IE5VTEw7CisJCWZyZWVfbW9kdWxlX3BhcmFtX2F0dHJzKCZtb2QtPm1rb2JqKTsKIAl9CiB9CiAjZW5kaWYKIAotLyoKLSAqIGtlcm5lbF9wYXJhbV9zeXNmc19zZXR1cCAtIHdyYXBwZXIgZm9yIGJ1aWx0LWluIHBhcmFtcyBzdXBwb3J0Ci0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfcGFyYW1fc3lzZnNfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJICAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKLQkJCQkJICAgIHVuc2lnbmVkIGludCBudW1fcGFyYW1zLAotCQkJCQkgICAgdW5zaWduZWQgaW50IG5hbWVfc2tpcCkKK3N0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAorCQkJCQkgIHVuc2lnbmVkIGludCBuYW1lX3NraXApCiB7CiAJc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptazsKLQlpbnQgcmV0OworCXN0cnVjdCBrb2JqZWN0ICprb2JqOworCWludCBlcnI7CiAKLQltayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb2R1bGVfa29iamVjdCksIEdGUF9LRVJORUwpOwotCUJVR19PTighbWspOworCWtvYmogPSBrc2V0X2ZpbmRfb2JqKG1vZHVsZV9rc2V0LCBuYW1lKTsKKwlpZiAoa29iaikgeworCQkvKiBXZSBhbHJlYWR5IGhhdmUgb25lLiAgUmVtb3ZlIHBhcmFtcyBzbyB3ZSBjYW4gYWRkIG1vcmUuICovCisJCW1rID0gdG9fbW9kdWxlX2tvYmplY3Qoa29iaik7CisJCS8qIFdlIG5lZWQgdG8gcmVtb3ZlIGl0IGJlZm9yZSBhZGRpbmcgcGFyYW1ldGVycy4gKi8KKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtay0+a29iaiwgJm1rLT5tcC0+Z3JwKTsKKwl9IGVsc2UgeworCQltayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb2R1bGVfa29iamVjdCksIEdGUF9LRVJORUwpOworCQlCVUdfT04oIW1rKTsKIAotCW1rLT5tb2QgPSBUSElTX01PRFVMRTsKLQltay0+a29iai5rc2V0ID0gbW9kdWxlX2tzZXQ7Ci0JcmV0ID0ga29iamVjdF9pbml0X2FuZF9hZGQoJm1rLT5rb2JqLCAmbW9kdWxlX2t0eXBlLCBOVUxMLCAiJXMiLCBuYW1lKTsKLQlpZiAocmV0KSB7Ci0JCWtvYmplY3RfcHV0KCZtay0+a29iaik7Ci0JCXByaW50ayhLRVJOX0VSUiAiTW9kdWxlICclcycgZmFpbGVkIHRvIGJlIGFkZGVkIHRvIHN5c2ZzLCAiCi0JCSAgICAgICJlcnJvciBudW1iZXIgJWRcbiIsIG5hbWUsIHJldCk7Ci0JCXByaW50ayhLRVJOX0VSUgkiVGhlIHN5c3RlbSB3aWxsIGJlIHVuc3RhYmxlIG5vdy5cbiIpOwotCQlyZXR1cm47CisJCW1rLT5tb2QgPSBUSElTX01PRFVMRTsKKwkJbWstPmtvYmoua3NldCA9IG1vZHVsZV9rc2V0OworCQllcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmbWstPmtvYmosICZtb2R1bGVfa3R5cGUsIE5VTEwsCisJCQkJCSAgICIlcyIsIG5hbWUpOworCQlpZiAoZXJyKSB7CisJCQlrb2JqZWN0X3B1dCgmbWstPmtvYmopOworCQkJcHJpbnRrKEtFUk5fRVJSICJNb2R1bGUgJyVzJyBmYWlsZWQgYWRkIHRvIHN5c2ZzLCAiCisJCQkgICAgICAgImVycm9yIG51bWJlciAlZFxuIiwgbmFtZSwgZXJyKTsKKwkJCXByaW50ayhLRVJOX0VSUgkiVGhlIHN5c3RlbSB3aWxsIGJlIHVuc3RhYmxlIG5vdy5cbiIpOworCQkJcmV0dXJuOworCQl9CisJCS8qIFNvIHRoYXQgZXhpdCBwYXRoIGlzIGV2ZW4uICovCisJCWtvYmplY3RfZ2V0KCZtay0+a29iaik7CiAJfQotCXBhcmFtX3N5c2ZzX3NldHVwKG1rLCBrcGFyYW0sIG51bV9wYXJhbXMsIG5hbWVfc2tpcCk7CisKKwkvKiBUaGVzZSBzaG91bGQgbm90IGZhaWwgYXQgYm9vdC4gKi8KKwllcnIgPSBhZGRfc3lzZnNfcGFyYW0obWssIGtwYXJhbSwga3BhcmFtLT5uYW1lICsgbmFtZV9za2lwKTsKKwlCVUdfT04oZXJyKTsKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm1rLT5rb2JqLCAmbWstPm1wLT5ncnApOworCUJVR19PTihlcnIpOwogCWtvYmplY3RfdWV2ZW50KCZtay0+a29iaiwgS09CSl9BREQpOworCWtvYmplY3RfcHV0KCZtay0+a29iaik7CiB9CiAKIC8qCkBAIC01NzksNjAgKzYyMSwzNiBAQAogICogVGhlICJtb2R1bGUiIG5hbWUgKEtCVUlMRF9NT0ROQU1FKSBpcyBzdG9yZWQgYmVmb3JlIGEgZG90LCB0aGUKICAqICJwYXJhbWV0ZXIiIG5hbWUgaXMgc3RvcmVkIGJlaGluZCBhIGRvdCBpbiBrZXJuZWxfcGFyYW0tPm5hbWUuIFNvLAogICogZXh0cmFjdCB0aGUgIm1vZHVsZSIgbmFtZSBmb3IgYWxsIGJ1aWx0LWluIGtlcm5lbF9wYXJhbS1ldGVycywKLSAqIGFuZCBmb3IgYWxsIHdobyBoYXZlIHRoZSBzYW1lLCBjYWxsIGtlcm5lbF9wYXJhbV9zeXNmc19zZXR1cC4KKyAqIGFuZCBmb3IgYWxsIHdobyBoYXZlIHRoZSBzYW1lLCBjYWxsIGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0uCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJhbV9zeXNmc19idWlsdGluKHZvaWQpCiB7Ci0Jc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsICprcF9iZWdpbiA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IGksIG5hbWVfbGVuLCBjb3VudCA9IDA7Ci0JY2hhciBtb2RuYW1lW01PRFVMRV9OQU1FX0xFTiArIDFdID0gIiI7CisJc3RydWN0IGtlcm5lbF9wYXJhbSAqa3A7CisJdW5zaWduZWQgaW50IG5hbWVfbGVuOworCWNoYXIgbW9kbmFtZVtNT0RVTEVfTkFNRV9MRU5dOwogCi0JZm9yIChpPTA7IGkgPCBfX3N0b3BfX19wYXJhbSAtIF9fc3RhcnRfX19wYXJhbTsgaSsrKSB7CisJZm9yIChrcCA9IF9fc3RhcnRfX19wYXJhbTsga3AgPCBfX3N0b3BfX19wYXJhbTsga3ArKykgewogCQljaGFyICpkb3Q7Ci0JCXNpemVfdCBtYXhfbmFtZV9sZW47CiAKLQkJa3AgPSAmX19zdGFydF9fX3BhcmFtW2ldOwotCQltYXhfbmFtZV9sZW4gPQotCQkJbWluX3Qoc2l6ZV90LCBNT0RVTEVfTkFNRV9MRU4sIHN0cmxlbihrcC0+bmFtZSkpOwotCi0JCWRvdCA9IG1lbWNocihrcC0+bmFtZSwgJy4nLCBtYXhfbmFtZV9sZW4pOwotCQlpZiAoIWRvdCkgewotCQkJREVCVUdQKCJjb3VsZG4ndCBmaW5kIHBlcmlvZCBpbiBmaXJzdCAlZCBjaGFyYWN0ZXJzICIKLQkJCSAgICAgICAib2YgJXNcbiIsIE1PRFVMRV9OQU1FX0xFTiwga3AtPm5hbWUpOworCQlpZiAoa3AtPnBlcm0gPT0gMCkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCW5hbWVfbGVuID0gZG90IC0ga3AtPm5hbWU7CiAKLSAJCS8qIG5ldyBrYnVpbGRfbW9kbmFtZT8gKi8KLQkJaWYgKHN0cmxlbihtb2RuYW1lKSAhPSBuYW1lX2xlbgotCQkgICAgfHwgc3RybmNtcChtb2RuYW1lLCBrcC0+bmFtZSwgbmFtZV9sZW4pICE9IDApIHsKLQkJCS8qIGFkZCBhIG5ldyBrb2JqZWN0IGZvciBwcmV2aW91cyBrZXJuZWxfcGFyYW1zLiAqLwotCQkJaWYgKGNvdW50KQotCQkJCWtlcm5lbF9wYXJhbV9zeXNmc19zZXR1cChtb2RuYW1lLAotCQkJCQkJCSBrcF9iZWdpbiwKLQkJCQkJCQkgY291bnQsCi0JCQkJCQkJIHN0cmxlbihtb2RuYW1lKSsxKTsKLQotCQkJc3RybmNweShtb2RuYW1lLCBrcC0+bmFtZSwgbmFtZV9sZW4pOwotCQkJbW9kbmFtZVtuYW1lX2xlbl0gPSAnXDAnOwotCQkJY291bnQgPSAwOwotCQkJa3BfYmVnaW4gPSBrcDsKKwkJZG90ID0gc3RyY2hyKGtwLT5uYW1lLCAnLicpOworCQlpZiAoIWRvdCkgeworCQkJLyogVGhpcyBoYXBwZW5zIGZvciBjb3JlX3BhcmFtKCkgKi8KKwkJCXN0cmNweShtb2RuYW1lLCAia2VybmVsIik7CisJCQluYW1lX2xlbiA9IDA7CisJCX0gZWxzZSB7CisJCQluYW1lX2xlbiA9IGRvdCAtIGtwLT5uYW1lICsgMTsKKwkJCXN0cmxjcHkobW9kbmFtZSwga3AtPm5hbWUsIG5hbWVfbGVuKTsKIAkJfQotCQljb3VudCsrOworCQlrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKG1vZG5hbWUsIGtwLCBuYW1lX2xlbik7CiAJfQotCi0JLyogbGFzdCBrZXJuZWxfcGFyYW1zIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBhcyB3ZWxsICovCi0JaWYgKGNvdW50KQotCQlrZXJuZWxfcGFyYW1fc3lzZnNfc2V0dXAobW9kbmFtZSwga3BfYmVnaW4sIGNvdW50LAotCQkJCQkgc3RybGVuKG1vZG5hbWUpKzEpOwogfQogCiAKIC8qIG1vZHVsZS1yZWxhdGVkIHN5c2ZzIHN0dWZmICovCiAKLSNkZWZpbmUgdG9fbW9kdWxlX2F0dHIobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlLCBhdHRyKTsKLSNkZWZpbmUgdG9fbW9kdWxlX2tvYmplY3QobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBtb2R1bGVfa29iamVjdCwga29iaik7Ci0KIHN0YXRpYyBzc2l6ZV90IG1vZHVsZV9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCQljaGFyICpidWYpCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCBjNDJhMDNhLi4xNTNkY2IyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTcsNiArNyw5MyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorCisvKgorICogQWxsb2NhdGUgdGhlIHRocmVhZF9ncm91cF9jcHV0aW1lIHN0cnVjdHVyZSBhcHByb3ByaWF0ZWx5IGFuZCBmaWxsIGluIHRoZQorICogY3VycmVudCB2YWx1ZXMgb2YgdGhlIGZpZWxkcy4gIENhbGxlZCBmcm9tIGNvcHlfc2lnbmFsKCkgdmlhCisgKiB0aHJlYWRfZ3JvdXBfY3B1dGltZV9jbG9uZV90aHJlYWQoKSB3aGVuIGFkZGluZyBhIHNlY29uZCBvciBzdWJzZXF1ZW50CisgKiB0aHJlYWQgdG8gYSB0aHJlYWQgZ3JvdXAuICBBc3N1bWVzIGludGVycnVwdHMgYXJlIGVuYWJsZWQgd2hlbiBjYWxsZWQuCisgKi8KK2ludCB0aHJlYWRfZ3JvdXBfY3B1dGltZV9hbGxvYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdHNrLT5zaWduYWw7CisJc3RydWN0IHRhc2tfY3B1dGltZSAqY3B1dGltZTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBtdWx0aXBsZSB0aHJlYWRzIGFuZCB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYQorCSAqIHBlci1DUFUgdGFza19jcHV0aW1lIHN0cnVjdCAoY2hlY2tlZCBpbiB0aGUgY2FsbGVyKSwgYWxsb2NhdGUKKwkgKiBvbmUgYW5kIGZpbGwgaXQgaW4gd2l0aCB0aGUgdGltZXMgYWNjdW11bGF0ZWQgc28gZmFyLiAgV2UgbWF5CisJICogcmFjZSB3aXRoIGFub3RoZXIgdGhyZWFkIHNvIHJlY2hlY2sgYWZ0ZXIgd2UgcGljayB1cCB0aGUgc2lnaGFuZAorCSAqIGxvY2suCisJICovCisJY3B1dGltZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGFza19jcHV0aW1lKTsKKwlpZiAoY3B1dGltZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCWlmIChzaWctPmNwdXRpbWUudG90YWxzKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJZnJlZV9wZXJjcHUoY3B1dGltZSk7CisJCXJldHVybiAwOworCX0KKwlzaWctPmNwdXRpbWUudG90YWxzID0gY3B1dGltZTsKKwljcHV0aW1lID0gcGVyX2NwdV9wdHIoc2lnLT5jcHV0aW1lLnRvdGFscywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwljcHV0aW1lLT51dGltZSA9IHRzay0+dXRpbWU7CisJY3B1dGltZS0+c3RpbWUgPSB0c2stPnN0aW1lOworCWNwdXRpbWUtPnN1bV9leGVjX3J1bnRpbWUgPSB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWU7CisJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRocmVhZF9ncm91cF9jcHV0aW1lIC0gU3VtIHRoZSB0aHJlYWQgZ3JvdXAgdGltZSBmaWVsZHMgYWNyb3NzIGFsbCBDUFVzLgorICoKKyAqIEB0c2s6CVRoZSB0YXNrIHdlIHVzZSB0byBpZGVudGlmeSB0aGUgdGhyZWFkIGdyb3VwLgorICogQHRpbWVzOgl0YXNrX2NwdXRpbWUgc3RydWN0dXJlIGluIHdoaWNoIHdlIHJldHVybiB0aGUgc3VtbWVkIGZpZWxkcy4KKyAqCisgKiBXYWxrIHRoZSBsaXN0IG9mIENQVXMgdG8gc3VtIHRoZSBwZXItQ1BVIHRpbWUgZmllbGRzIGluIHRoZSB0aHJlYWQgZ3JvdXAKKyAqIHRpbWUgc3RydWN0dXJlLgorICovCit2b2lkIHRocmVhZF9ncm91cF9jcHV0aW1lKAorCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCXN0cnVjdCB0YXNrX2NwdXRpbWUgKnRpbWVzKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisJaW50IGk7CisJc3RydWN0IHRhc2tfY3B1dGltZSAqdG90OworCisJc2lnID0gdHNrLT5zaWduYWw7CisJaWYgKHVubGlrZWx5KCFzaWcpIHx8ICFzaWctPmNwdXRpbWUudG90YWxzKSB7CisJCXRpbWVzLT51dGltZSA9IHRzay0+dXRpbWU7CisJCXRpbWVzLT5zdGltZSA9IHRzay0+c3RpbWU7CisJCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lID0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lOworCQlyZXR1cm47CisJfQorCXRpbWVzLT5zdGltZSA9IHRpbWVzLT51dGltZSA9IGNwdXRpbWVfemVybzsKKwl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSA9IDA7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJdG90ID0gcGVyX2NwdV9wdHIodHNrLT5zaWduYWwtPmNwdXRpbWUudG90YWxzLCBpKTsKKwkJdGltZXMtPnV0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnV0aW1lLCB0b3QtPnV0aW1lKTsKKwkJdGltZXMtPnN0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnN0aW1lLCB0b3QtPnN0aW1lKTsKKwkJdGltZXMtPnN1bV9leGVjX3J1bnRpbWUgKz0gdG90LT5zdW1fZXhlY19ydW50aW1lOworCX0KK30KKworLyoKKyAqIENhbGxlZCBhZnRlciB1cGRhdGluZyBSTElNSVRfQ1BVIHRvIHNldCB0aW1lciBleHBpcmF0aW9uIGlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZCB1cGRhdGVfcmxpbWl0X2NwdSh1bnNpZ25lZCBsb25nIHJsaW1fbmV3KQoreworCWNwdXRpbWVfdCBjcHV0aW1lOworCisJY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShybGltX25ldyk7CisJaWYgKGNwdXRpbWVfZXEoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgfHwKKwkgICAgY3B1dGltZV9sdChjdXJyZW50LT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZSkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJCXNldF9wcm9jZXNzX2NwdV90aW1lcihjdXJyZW50LCBDUFVDTE9DS19QUk9GLCAmY3B1dGltZSwgTlVMTCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJfQorfQogCiBzdGF0aWMgaW50IGNoZWNrX2Nsb2NrKGNvbnN0IGNsb2NraWRfdCB3aGljaF9jbG9jaykKIHsKQEAgLTE1OCwxMCArMjQ1LDYgQEAKIHsKIAlyZXR1cm4gcC0+dXRpbWU7CiB9Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuIHRhc2tfc2NoZWRfcnVudGltZShwKTsKLX0KIAogaW50IHBvc2l4X2NwdV9jbG9ja19nZXRyZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQogewpAQCAtMjExLDQ2ICsyOTQsNyBAQAogCQljcHUtPmNwdSA9IHZpcnRfdGlja3MocCk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6Ci0JCWNwdS0+c2NoZWQgPSBzY2hlZF9ucyhwKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogU2FtcGxlIGEgcHJvY2VzcyAodGhyZWFkIGdyb3VwKSBjbG9jayBmb3IgdGhlIGdpdmVuIGdyb3VwX2xlYWRlciB0YXNrLgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXNrbGlzdF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcuCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBmb3IgcmVhZGluZywgYW5kIHAtPnNpZ2hhbmQtPnNpZ2xvY2suCi0gKi8KLXN0YXRpYyBpbnQgY3B1X2Nsb2NrX3NhbXBsZV9ncm91cF9sb2NrZWQodW5zaWduZWQgaW50IGNsb2NrX2lkeCwKLQkJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJCQkJIHVuaW9uIGNwdV90aW1lX2NvdW50ICpjcHUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gcDsKLSAJc3dpdGNoIChjbG9ja19pZHgpIHsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQljYXNlIENQVUNMT0NLX1BST0Y6Ci0JCWNwdS0+Y3B1ID0gY3B1dGltZV9hZGQocC0+c2lnbmFsLT51dGltZSwgcC0+c2lnbmFsLT5zdGltZSk7Ci0JCWRvIHsKLQkJCWNwdS0+Y3B1ID0gY3B1dGltZV9hZGQoY3B1LT5jcHUsIHByb2ZfdGlja3ModCkpOwotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHApOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCWNwdS0+Y3B1ID0gcC0+c2lnbmFsLT51dGltZTsKLQkJZG8gewotCQkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChjcHUtPmNwdSwgdmlydF90aWNrcyh0KSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gcCk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6Ci0JCWNwdS0+c2NoZWQgPSBwLT5zaWduYWwtPnN1bV9zY2hlZF9ydW50aW1lOwotCQkvKiBBZGQgaW4gZWFjaCBvdGhlciBsaXZlIHRocmVhZC4gICovCi0JCXdoaWxlICgodCA9IG5leHRfdGhyZWFkKHQpKSAhPSBwKSB7Ci0JCQljcHUtPnNjaGVkICs9IHQtPnNlLnN1bV9leGVjX3J1bnRpbWU7Ci0JCX0KLQkJY3B1LT5zY2hlZCArPSBzY2hlZF9ucyhwKTsKKwkJY3B1LT5zY2hlZCA9IHAtPnNlLnN1bV9leGVjX3J1bnRpbWUgKyB0YXNrX2RlbHRhX2V4ZWMocCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI2NCwxMyArMzA4LDIzIEBACiAJCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJICB1bmlvbiBjcHVfdGltZV9jb3VudCAqY3B1KQogewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCXJldCA9IGNwdV9jbG9ja19zYW1wbGVfZ3JvdXBfbG9ja2VkKENQVUNMT0NLX1dISUNIKHdoaWNoX2Nsb2NrKSwgcCwKLQkJCQkJICAgIGNwdSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCisJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJmNwdXRpbWUpOworCXN3aXRjaCAod2hpY2hfY2xvY2spIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIENQVUNMT0NLX1BST0Y6CisJCWNwdS0+Y3B1ID0gY3B1dGltZV9hZGQoY3B1dGltZS51dGltZSwgY3B1dGltZS5zdGltZSk7CisJCWJyZWFrOworCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKKwkJY3B1LT5jcHUgPSBjcHV0aW1lLnV0aW1lOworCQlicmVhazsKKwljYXNlIENQVUNMT0NLX1NDSEVEOgorCQljcHUtPnNjaGVkID0gY3B1dGltZS5zdW1fZXhlY19ydW50aW1lICsgdGFza19kZWx0YV9leGVjKHApOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtNDcxLDgwICs1MjUsMTEgQEAKIH0KIHZvaWQgcG9zaXhfY3B1X3RpbWVyc19leGl0X2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogeworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKworCXRocmVhZF9ncm91cF9jcHV0aW1lKHRzaywgJmNwdXRpbWUpOwogCWNsZWFudXBfdGltZXJzKHRzay0+c2lnbmFsLT5jcHVfdGltZXJzLAotCQkgICAgICAgY3B1dGltZV9hZGQodHNrLT51dGltZSwgdHNrLT5zaWduYWwtPnV0aW1lKSwKLQkJICAgICAgIGNwdXRpbWVfYWRkKHRzay0+c3RpbWUsIHRzay0+c2lnbmFsLT5zdGltZSksCi0JCSAgICAgdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lICsgdHNrLT5zaWduYWwtPnN1bV9zY2hlZF9ydW50aW1lKTsKLX0KLQotCi0vKgotICogU2V0IHRoZSBleHBpcnkgdGltZXMgb2YgYWxsIHRoZSB0aHJlYWRzIGluIHRoZSBwcm9jZXNzIHNvIG9uZSBvZiB0aGVtCi0gKiB3aWxsIGdvIG9mZiBiZWZvcmUgdGhlIHByb2Nlc3MgY3VtdWxhdGl2ZSBleHBpcnkgdG90YWwgaXMgcmVhY2hlZC4KLSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc190aW1lcl9yZWJhbGFuY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY2xvY2tfaWR4LAotCQkJCSAgICB1bmlvbiBjcHVfdGltZV9jb3VudCBleHBpcmVzLAotCQkJCSAgICB1bmlvbiBjcHVfdGltZV9jb3VudCB2YWwpCi17Ci0JY3B1dGltZV90IHRpY2tzLCBsZWZ0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBucywgbnNsZWZ0OwotIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBwOwotCXVuc2lnbmVkIGludCBudGhyZWFkcyA9IGF0b21pY19yZWFkKCZwLT5zaWduYWwtPmxpdmUpOwotCi0JaWYgKCFudGhyZWFkcykKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChjbG9ja19pZHgpIHsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVDTE9DS19QUk9GOgotCQlsZWZ0ID0gY3B1dGltZV9kaXZfbm9uX3plcm8oY3B1dGltZV9zdWIoZXhwaXJlcy5jcHUsIHZhbC5jcHUpLAotCQkJCSAgICAgICBudGhyZWFkcyk7Ci0JCWRvIHsKLQkJCWlmIChsaWtlbHkoISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKSkgewotCQkJCXRpY2tzID0gY3B1dGltZV9hZGQocHJvZl90aWNrcyh0KSwgbGVmdCk7Ci0JCQkJaWYgKGNwdXRpbWVfZXEodC0+aXRfcHJvZl9leHBpcmVzLAotCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fAotCQkJCSAgICBjcHV0aW1lX2d0KHQtPml0X3Byb2ZfZXhwaXJlcywgdGlja3MpKSB7Ci0JCQkJCXQtPml0X3Byb2ZfZXhwaXJlcyA9IHRpY2tzOwotCQkJCX0KLQkJCX0KLQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJfSB3aGlsZSAodCAhPSBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVDTE9DS19WSVJUOgotCQlsZWZ0ID0gY3B1dGltZV9kaXZfbm9uX3plcm8oY3B1dGltZV9zdWIoZXhwaXJlcy5jcHUsIHZhbC5jcHUpLAotCQkJCSAgICAgICBudGhyZWFkcyk7Ci0JCWRvIHsKLQkJCWlmIChsaWtlbHkoISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKSkgewotCQkJCXRpY2tzID0gY3B1dGltZV9hZGQodmlydF90aWNrcyh0KSwgbGVmdCk7Ci0JCQkJaWYgKGNwdXRpbWVfZXEodC0+aXRfdmlydF9leHBpcmVzLAotCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fAotCQkJCSAgICBjcHV0aW1lX2d0KHQtPml0X3ZpcnRfZXhwaXJlcywgdGlja3MpKSB7Ci0JCQkJCXQtPml0X3ZpcnRfZXhwaXJlcyA9IHRpY2tzOwotCQkJCX0KLQkJCX0KLQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJfSB3aGlsZSAodCAhPSBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJbnNsZWZ0ID0gZXhwaXJlcy5zY2hlZCAtIHZhbC5zY2hlZDsKLQkJZG9fZGl2KG5zbGVmdCwgbnRocmVhZHMpOwotCQluc2xlZnQgPSBtYXhfdCh1bnNpZ25lZCBsb25nIGxvbmcsIG5zbGVmdCwgMSk7Ci0JCWRvIHsKLQkJCWlmIChsaWtlbHkoISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKSkgewotCQkJCW5zID0gdC0+c2Uuc3VtX2V4ZWNfcnVudGltZSArIG5zbGVmdDsKLQkJCQlpZiAodC0+aXRfc2NoZWRfZXhwaXJlcyA9PSAwIHx8Ci0JCQkJICAgIHQtPml0X3NjaGVkX2V4cGlyZXMgPiBucykgewotCQkJCQl0LT5pdF9zY2hlZF9leHBpcmVzID0gbnM7Ci0JCQkJfQotCQkJfQotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHApOwotCQlicmVhazsKLQl9CisJCSAgICAgICBjcHV0aW1lLnV0aW1lLCBjcHV0aW1lLnN0aW1lLCBjcHV0aW1lLnN1bV9leGVjX3J1bnRpbWUpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9kZWFkX3Rhc2soc3RydWN0IGtfaXRpbWVyICp0aW1lciwgdW5pb24gY3B1X3RpbWVfY291bnQgbm93KQpAQCAtNjA4LDI5ICs1OTMsMzIgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJQlVHKCk7CiAJCQljYXNlIENQVUNMT0NLX1BST0Y6Ci0JCQkJaWYgKGNwdXRpbWVfZXEocC0+aXRfcHJvZl9leHBpcmVzLAorCQkJCWlmIChjcHV0aW1lX2VxKHAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCwKIAkJCQkJICAgICAgIGNwdXRpbWVfemVybykgfHwKLQkJCQkgICAgY3B1dGltZV9ndChwLT5pdF9wcm9mX2V4cGlyZXMsCisJCQkJICAgIGNwdXRpbWVfZ3QocC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLAogCQkJCQkgICAgICAgbnQtPmV4cGlyZXMuY3B1KSkKLQkJCQkJcC0+aXRfcHJvZl9leHBpcmVzID0gbnQtPmV4cGlyZXMuY3B1OworCQkJCQlwLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPQorCQkJCQkJbnQtPmV4cGlyZXMuY3B1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19WSVJUOgotCQkJCWlmIChjcHV0aW1lX2VxKHAtPml0X3ZpcnRfZXhwaXJlcywKKwkJCQlpZiAoY3B1dGltZV9lcShwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsCiAJCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QocC0+aXRfdmlydF9leHBpcmVzLAorCQkJCSAgICBjcHV0aW1lX2d0KHAtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCwKIAkJCQkJICAgICAgIG50LT5leHBpcmVzLmNwdSkpCi0JCQkJCXAtPml0X3ZpcnRfZXhwaXJlcyA9IG50LT5leHBpcmVzLmNwdTsKKwkJCQkJcC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0KKwkJCQkJCW50LT5leHBpcmVzLmNwdTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6Ci0JCQkJaWYgKHAtPml0X3NjaGVkX2V4cGlyZXMgPT0gMCB8fAotCQkJCSAgICBwLT5pdF9zY2hlZF9leHBpcmVzID4gbnQtPmV4cGlyZXMuc2NoZWQpCi0JCQkJCXAtPml0X3NjaGVkX2V4cGlyZXMgPSBudC0+ZXhwaXJlcy5zY2hlZDsKKwkJCQlpZiAocC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9PSAwIHx8CisJCQkJICAgIHAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPgorCQkJCQkJCW50LT5leHBpcmVzLnNjaGVkKQorCQkJCQlwLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0KKwkJCQkJCW50LT5leHBpcmVzLnNjaGVkOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIEZvciBhIHByb2Nlc3MgdGltZXIsIHdlIG11c3QgYmFsYW5jZQotCQkJICogYWxsIHRoZSBsaXZlIHRocmVhZHMnIGV4cGlyYXRpb25zLgorCQkJICogRm9yIGEgcHJvY2VzcyB0aW1lciwgc2V0IHRoZSBjYWNoZWQgZXhwaXJhdGlvbiB0aW1lLgogCQkJICovCiAJCQlzd2l0Y2ggKENQVUNMT0NLX1dISUNIKHRpbWVyLT5pdF9jbG9jaykpIHsKIAkJCWRlZmF1bHQ6CkBAIC02NDEsNyArNjI5LDkgQEAKIAkJCQkgICAgY3B1dGltZV9sdChwLT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlcywKIAkJCQkJICAgICAgIHRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHUpKQogCQkJCQlicmVhazsKLQkJCQlnb3RvIHJlYmFsYW5jZTsKKwkJCQlwLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9CisJCQkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHU7CisJCQkJYnJlYWs7CiAJCQljYXNlIENQVUNMT0NLX1BST0Y6CiAJCQkJaWYgKCFjcHV0aW1lX2VxKHAtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLAogCQkJCQkJY3B1dGltZV96ZXJvKSAmJgpAQCAtNjUyLDEzICs2NDIsMTIgQEAKIAkJCQlpZiAoaSAhPSBSTElNX0lORklOSVRZICYmCiAJCQkJICAgIGkgPD0gY3B1dGltZV90b19zZWNzKHRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHUpKQogCQkJCQlicmVhazsKLQkJCQlnb3RvIHJlYmFsYW5jZTsKKwkJCQlwLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9CisJCQkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHU7CisJCQkJYnJlYWs7CiAJCQljYXNlIENQVUNMT0NLX1NDSEVEOgotCQkJcmViYWxhbmNlOgotCQkJCXByb2Nlc3NfdGltZXJfcmViYWxhbmNlKAotCQkJCQl0aW1lci0+aXQuY3B1LnRhc2ssCi0JCQkJCUNQVUNMT0NLX1dISUNIKHRpbWVyLT5pdF9jbG9jayksCi0JCQkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcywgbm93KTsKKwkJCQlwLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPQorCQkJCQl0aW1lci0+aXQuY3B1LmV4cGlyZXMuc2NoZWQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTk2OSwxMyArOTU4LDEzIEBACiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKmNvbnN0IHNpZyA9IHRzay0+c2lnbmFsOwogCiAJbWF4ZmlyZSA9IDIwOwotCXRzay0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CiAJCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZmlyc3RfZW50cnkodGltZXJzLAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwogCQlpZiAoIS0tbWF4ZmlyZSB8fCBjcHV0aW1lX2x0KHByb2ZfdGlja3ModHNrKSwgdC0+ZXhwaXJlcy5jcHUpKSB7Ci0JCQl0c2stPml0X3Byb2ZfZXhwaXJlcyA9IHQtPmV4cGlyZXMuY3B1OworCQkJdHNrLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSB0LT5leHBpcmVzLmNwdTsKIAkJCWJyZWFrOwogCQl9CiAJCXQtPmZpcmluZyA9IDE7CkBAIC05ODQsMTMgKzk3MywxMyBAQAogCiAJKyt0aW1lcnM7CiAJbWF4ZmlyZSA9IDIwOwotCXRzay0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CiAJCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZmlyc3RfZW50cnkodGltZXJzLAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwogCQlpZiAoIS0tbWF4ZmlyZSB8fCBjcHV0aW1lX2x0KHZpcnRfdGlja3ModHNrKSwgdC0+ZXhwaXJlcy5jcHUpKSB7Ci0JCQl0c2stPml0X3ZpcnRfZXhwaXJlcyA9IHQtPmV4cGlyZXMuY3B1OworCQkJdHNrLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSB0LT5leHBpcmVzLmNwdTsKIAkJCWJyZWFrOwogCQl9CiAJCXQtPmZpcmluZyA9IDE7CkBAIC05OTksMTMgKzk4OCwxMyBAQAogCiAJKyt0aW1lcnM7CiAJbWF4ZmlyZSA9IDIwOwotCXRzay0+aXRfc2NoZWRfZXhwaXJlcyA9IDA7CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewogCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKIAkJCQkJCSAgICAgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwKIAkJCQkJCSAgICAgIGVudHJ5KTsKIAkJaWYgKCEtLW1heGZpcmUgfHwgdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lIDwgdC0+ZXhwaXJlcy5zY2hlZCkgewotCQkJdHNrLT5pdF9zY2hlZF9leHBpcmVzID0gdC0+ZXhwaXJlcy5zY2hlZDsKKwkJCXRzay0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IHQtPmV4cGlyZXMuc2NoZWQ7CiAJCQlicmVhazsKIAkJfQogCQl0LT5maXJpbmcgPSAxOwpAQCAtMTA1NSwxMCArMTA0NCwxMCBAQAogewogCWludCBtYXhmaXJlOwogCXN0cnVjdCBzaWduYWxfc3RydWN0ICpjb25zdCBzaWcgPSB0c2stPnNpZ25hbDsKLQljcHV0aW1lX3QgdXRpbWUsIHN0aW1lLCBwdGltZSwgdmlydF9leHBpcmVzLCBwcm9mX2V4cGlyZXM7CisJY3B1dGltZV90IHV0aW1lLCBwdGltZSwgdmlydF9leHBpcmVzLCBwcm9mX2V4cGlyZXM7CiAJdW5zaWduZWQgbG9uZyBsb25nIHN1bV9zY2hlZF9ydW50aW1lLCBzY2hlZF9leHBpcmVzOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0aW1lcnMgPSBzaWctPmNwdV90aW1lcnM7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCiAJLyoKIAkgKiBEb24ndCBzYW1wbGUgdGhlIGN1cnJlbnQgcHJvY2VzcyBDUFUgY2xvY2tzIGlmIHRoZXJlIGFyZSBubyB0aW1lcnMuCkBAIC0xMDc0LDE4ICsxMDYzLDEwIEBACiAJLyoKIAkgKiBDb2xsZWN0IHRoZSBjdXJyZW50IHByb2Nlc3MgdG90YWxzLgogCSAqLwotCXV0aW1lID0gc2lnLT51dGltZTsKLQlzdGltZSA9IHNpZy0+c3RpbWU7Ci0Jc3VtX3NjaGVkX3J1bnRpbWUgPSBzaWctPnN1bV9zY2hlZF9ydW50aW1lOwotCXQgPSB0c2s7Ci0JZG8gewotCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCXN0aW1lID0gY3B1dGltZV9hZGQoc3RpbWUsIHQtPnN0aW1lKTsKLQkJc3VtX3NjaGVkX3J1bnRpbWUgKz0gdC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKLQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQlwdGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBzdGltZSk7Ci0KKwl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZjcHV0aW1lKTsKKwl1dGltZSA9IGNwdXRpbWUudXRpbWU7CisJcHRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgY3B1dGltZS5zdGltZSk7CisJc3VtX3NjaGVkX3J1bnRpbWUgPSBjcHV0aW1lLnN1bV9leGVjX3J1bnRpbWU7CiAJbWF4ZmlyZSA9IDIwOwogCXByb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewpAQCAtMTE5Myw2MCArMTE3NCwxOCBAQAogCQl9CiAJfQogCi0JaWYgKCFjcHV0aW1lX2VxKHByb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCSAgICAhY3B1dGltZV9lcSh2aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykgfHwKLQkgICAgc2NoZWRfZXhwaXJlcyAhPSAwKSB7Ci0JCS8qCi0JCSAqIFJlYmFsYW5jZSB0aGUgdGhyZWFkcycgZXhwaXJ5IHRpbWVzIGZvciB0aGUgcmVtYWluaW5nCi0JCSAqIHByb2Nlc3MgQ1BVIHRpbWVycy4KLQkJICovCi0KLQkJY3B1dGltZV90IHByb2ZfbGVmdCwgdmlydF9sZWZ0LCB0aWNrczsKLQkJdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2xlZnQsIHNjaGVkOwotCQljb25zdCB1bnNpZ25lZCBpbnQgbnRocmVhZHMgPSBhdG9taWNfcmVhZCgmc2lnLT5saXZlKTsKLQotCQlpZiAoIW50aHJlYWRzKQotCQkJcmV0dXJuOwotCi0JCXByb2ZfbGVmdCA9IGNwdXRpbWVfc3ViKHByb2ZfZXhwaXJlcywgdXRpbWUpOwotCQlwcm9mX2xlZnQgPSBjcHV0aW1lX3N1Yihwcm9mX2xlZnQsIHN0aW1lKTsKLQkJcHJvZl9sZWZ0ID0gY3B1dGltZV9kaXZfbm9uX3plcm8ocHJvZl9sZWZ0LCBudGhyZWFkcyk7Ci0JCXZpcnRfbGVmdCA9IGNwdXRpbWVfc3ViKHZpcnRfZXhwaXJlcywgdXRpbWUpOwotCQl2aXJ0X2xlZnQgPSBjcHV0aW1lX2Rpdl9ub25femVybyh2aXJ0X2xlZnQsIG50aHJlYWRzKTsKLQkJaWYgKHNjaGVkX2V4cGlyZXMpIHsKLQkJCXNjaGVkX2xlZnQgPSBzY2hlZF9leHBpcmVzIC0gc3VtX3NjaGVkX3J1bnRpbWU7Ci0JCQlkb19kaXYoc2NoZWRfbGVmdCwgbnRocmVhZHMpOwotCQkJc2NoZWRfbGVmdCA9IG1heF90KHVuc2lnbmVkIGxvbmcgbG9uZywgc2NoZWRfbGVmdCwgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlzY2hlZF9sZWZ0ID0gMDsKLQkJfQotCQl0ID0gdHNrOwotCQlkbyB7Ci0JCQlpZiAodW5saWtlbHkodC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkKLQkJCQljb250aW51ZTsKLQotCQkJdGlja3MgPSBjcHV0aW1lX2FkZChjcHV0aW1lX2FkZCh0LT51dGltZSwgdC0+c3RpbWUpLAotCQkJCQkgICAgcHJvZl9sZWZ0KTsKLQkJCWlmICghY3B1dGltZV9lcShwcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKLQkJCSAgICAoY3B1dGltZV9lcSh0LT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgfHwKLQkJCSAgICAgY3B1dGltZV9ndCh0LT5pdF9wcm9mX2V4cGlyZXMsIHRpY2tzKSkpIHsKLQkJCQl0LT5pdF9wcm9mX2V4cGlyZXMgPSB0aWNrczsKLQkJCX0KLQotCQkJdGlja3MgPSBjcHV0aW1lX2FkZCh0LT51dGltZSwgdmlydF9sZWZ0KTsKLQkJCWlmICghY3B1dGltZV9lcSh2aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKLQkJCSAgICAoY3B1dGltZV9lcSh0LT5pdF92aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykgfHwKLQkJCSAgICAgY3B1dGltZV9ndCh0LT5pdF92aXJ0X2V4cGlyZXMsIHRpY2tzKSkpIHsKLQkJCQl0LT5pdF92aXJ0X2V4cGlyZXMgPSB0aWNrczsKLQkJCX0KLQotCQkJc2NoZWQgPSB0LT5zZS5zdW1fZXhlY19ydW50aW1lICsgc2NoZWRfbGVmdDsKLQkJCWlmIChzY2hlZF9leHBpcmVzICYmICh0LT5pdF9zY2hlZF9leHBpcmVzID09IDAgfHwKLQkJCQkJICAgICAgdC0+aXRfc2NoZWRfZXhwaXJlcyA+IHNjaGVkKSkgewotCQkJCXQtPml0X3NjaGVkX2V4cGlyZXMgPSBzY2hlZDsKLQkJCX0KLQkJfSB3aGlsZSAoKHQgPSBuZXh0X3RocmVhZCh0KSkgIT0gdHNrKTsKLQl9CisJaWYgKCFjcHV0aW1lX2VxKHByb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgorCSAgICAoY3B1dGltZV9lcShzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCwgY3B1dGltZV96ZXJvKSB8fAorCSAgICAgY3B1dGltZV9ndChzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCwgcHJvZl9leHBpcmVzKSkpCisJCXNpZy0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gcHJvZl9leHBpcmVzOworCWlmICghY3B1dGltZV9lcSh2aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKKwkgICAgKGNwdXRpbWVfZXEoc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsIGNwdXRpbWVfemVybykgfHwKKwkgICAgIGNwdXRpbWVfZ3Qoc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsIHZpcnRfZXhwaXJlcykpKQorCQlzaWctPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IHZpcnRfZXhwaXJlczsKKwlpZiAoc2NoZWRfZXhwaXJlcyAhPSAwICYmCisJICAgIChzaWctPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPT0gMCB8fAorCSAgICAgc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID4gc2NoZWRfZXhwaXJlcykpCisJCXNpZy0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IHNjaGVkX2V4cGlyZXM7CiB9CiAKIC8qCkBAIC0xMzE0LDYgKzEyNTMsODYgQEAKIAkrK3RpbWVyLT5pdF9yZXF1ZXVlX3BlbmRpbmc7CiB9CiAKKy8qKgorICogdGFza19jcHV0aW1lX3plcm8gLSBDaGVjayBhIHRhc2tfY3B1dGltZSBzdHJ1Y3QgZm9yIGFsbCB6ZXJvIGZpZWxkcy4KKyAqCisgKiBAY3B1dGltZToJVGhlIHN0cnVjdCB0byBjb21wYXJlLgorICoKKyAqIENoZWNrcyBAY3B1dGltZSB0byBzZWUgaWYgYWxsIGZpZWxkcyBhcmUgemVyby4gIFJldHVybnMgdHJ1ZSBpZiBhbGwgZmllbGRzCisgKiBhcmUgemVybywgZmFsc2UgaWYgYW55IGZpZWxkIGlzIG5vbnplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfY3B1dGltZV96ZXJvKGNvbnN0IHN0cnVjdCB0YXNrX2NwdXRpbWUgKmNwdXRpbWUpCit7CisJaWYgKGNwdXRpbWVfZXEoY3B1dGltZS0+dXRpbWUsIGNwdXRpbWVfemVybykgJiYKKwkgICAgY3B1dGltZV9lcShjcHV0aW1lLT5zdGltZSwgY3B1dGltZV96ZXJvKSAmJgorCSAgICBjcHV0aW1lLT5zdW1fZXhlY19ydW50aW1lID09IDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRhc2tfY3B1dGltZV9leHBpcmVkIC0gQ29tcGFyZSB0d28gdGFza19jcHV0aW1lIGVudGl0aWVzLgorICoKKyAqIEBzYW1wbGU6CVRoZSB0YXNrX2NwdXRpbWUgc3RydWN0dXJlIHRvIGJlIGNoZWNrZWQgZm9yIGV4cGlyYXRpb24uCisgKiBAZXhwaXJlczoJRXhwaXJhdGlvbiB0aW1lcywgYWdhaW5zdCB3aGljaCBAc2FtcGxlIHdpbGwgYmUgY2hlY2tlZC4KKyAqCisgKiBDaGVja3MgQHNhbXBsZSBhZ2FpbnN0IEBleHBpcmVzIHRvIHNlZSBpZiBhbnkgZmllbGQgb2YgQHNhbXBsZSBoYXMgZXhwaXJlZC4KKyAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmllbGQgb2YgdGhlIGZvcm1lciBpcyBncmVhdGVyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGZpZWxkIG9mIHRoZSBsYXR0ZXIgaWYgdGhlIGxhdHRlciBmaWVsZCBpcyBzZXQuICBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19jcHV0aW1lX2V4cGlyZWQoY29uc3Qgc3RydWN0IHRhc2tfY3B1dGltZSAqc2FtcGxlLAorCQkJCQljb25zdCBzdHJ1Y3QgdGFza19jcHV0aW1lICpleHBpcmVzKQoreworCWlmICghY3B1dGltZV9lcShleHBpcmVzLT51dGltZSwgY3B1dGltZV96ZXJvKSAmJgorCSAgICBjcHV0aW1lX2dlKHNhbXBsZS0+dXRpbWUsIGV4cGlyZXMtPnV0aW1lKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFjcHV0aW1lX2VxKGV4cGlyZXMtPnN0aW1lLCBjcHV0aW1lX3plcm8pICYmCisJICAgIGNwdXRpbWVfZ2UoY3B1dGltZV9hZGQoc2FtcGxlLT51dGltZSwgc2FtcGxlLT5zdGltZSksCisJCSAgICAgICBleHBpcmVzLT5zdGltZSkpCisJCXJldHVybiAxOworCWlmIChleHBpcmVzLT5zdW1fZXhlY19ydW50aW1lICE9IDAgJiYKKwkgICAgc2FtcGxlLT5zdW1fZXhlY19ydW50aW1lID49IGV4cGlyZXMtPnN1bV9leGVjX3J1bnRpbWUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZhc3RwYXRoX3RpbWVyX2NoZWNrIC0gUE9TSVggQ1BVIHRpbWVycyBmYXN0IHBhdGguCisgKgorICogQHRzazoJVGhlIHRhc2sgKHRocmVhZCkgYmVpbmcgY2hlY2tlZC4KKyAqCisgKiBDaGVjayB0aGUgdGFzayBhbmQgdGhyZWFkIGdyb3VwIHRpbWVycy4gIElmIGJvdGggYXJlIHplcm8gKHRoZXJlIGFyZSBubworICogdGltZXJzIHNldCkgcmV0dXJuIGZhbHNlLiAgT3RoZXJ3aXNlIHNuYXBzaG90IHRoZSB0YXNrIGFuZCB0aHJlYWQgZ3JvdXAKKyAqIHRpbWVycyBhbmQgY29tcGFyZSB0aGVtIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZXhwaXJhdGlvbiB0aW1lcy4gIFJldHVybgorICogdHJ1ZSBpZiBhIHRpbWVyIGhhcyBleHBpcmVkLCBlbHNlIHJldHVybiBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmFzdHBhdGhfdGltZXJfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9IHRzay0+c2lnbmFsOworCisJaWYgKHVubGlrZWx5KCFzaWcpKQorCQlyZXR1cm4gMDsKKworCWlmICghdGFza19jcHV0aW1lX3plcm8oJnRzay0+Y3B1dGltZV9leHBpcmVzKSkgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIHRhc2tfc2FtcGxlID0geworCQkJLnV0aW1lID0gdHNrLT51dGltZSwKKwkJCS5zdGltZSA9IHRzay0+c3RpbWUsCisJCQkuc3VtX2V4ZWNfcnVudGltZSA9IHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZQorCQl9OworCisJCWlmICh0YXNrX2NwdXRpbWVfZXhwaXJlZCgmdGFza19zYW1wbGUsICZ0c2stPmNwdXRpbWVfZXhwaXJlcykpCisJCQlyZXR1cm4gMTsKKwl9CisJaWYgKCF0YXNrX2NwdXRpbWVfemVybygmc2lnLT5jcHV0aW1lX2V4cGlyZXMpKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgZ3JvdXBfc2FtcGxlOworCisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHRzaywgJmdyb3VwX3NhbXBsZSk7CisJCWlmICh0YXNrX2NwdXRpbWVfZXhwaXJlZCgmZ3JvdXBfc2FtcGxlLCAmc2lnLT5jcHV0aW1lX2V4cGlyZXMpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiAvKgogICogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIuICBUaGUgaXJxIGhhbmRsZXIgaGFzCiAgKiBhbHJlYWR5IHVwZGF0ZWQgb3VyIGNvdW50cy4gIFdlIG5lZWQgdG8gY2hlY2sgaWYgYW55IHRpbWVycyBmaXJlIG5vdy4KQEAgLTEzMjYsNDIgKzEzNDUsMzEgQEAKIAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAotI2RlZmluZSBVTkVYUElSRUQoY2xvY2spIFwKLQkJKGNwdXRpbWVfZXEodHNrLT5pdF8jI2Nsb2NrIyNfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fCBcCi0JCSBjcHV0aW1lX2x0KGNsb2NrIyNfdGlja3ModHNrKSwgdHNrLT5pdF8jI2Nsb2NrIyNfZXhwaXJlcykpCi0KLQlpZiAoVU5FWFBJUkVEKHByb2YpICYmIFVORVhQSVJFRCh2aXJ0KSAmJgotCSAgICAodHNrLT5pdF9zY2hlZF9leHBpcmVzID09IDAgfHwKLQkgICAgIHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZSA8IHRzay0+aXRfc2NoZWRfZXhwaXJlcykpCisJLyoKKwkgKiBUaGUgZmFzdCBwYXRoIGNoZWNrcyB0aGF0IHRoZXJlIGFyZSBubyBleHBpcmVkIHRocmVhZCBvciB0aHJlYWQKKwkgKiBncm91cCB0aW1lcnMuICBJZiB0aGF0J3Mgc28sIGp1c3QgcmV0dXJuLgorCSAqLworCWlmICghZmFzdHBhdGhfdGltZXJfY2hlY2sodHNrKSkKIAkJcmV0dXJuOwogCi0jdW5kZWYJVU5FWFBJUkVECisJc3Bpbl9sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCS8qCisJICogSGVyZSB3ZSB0YWtlIG9mZiB0c2stPnNpZ25hbC0+Y3B1X3RpbWVyc1tOXSBhbmQKKwkgKiB0c2stPmNwdV90aW1lcnNbTl0gYWxsIHRoZSB0aW1lcnMgdGhhdCBhcmUgZmlyaW5nLCBhbmQKKwkgKiBwdXQgdGhlbSBvbiB0aGUgZmlyaW5nIGxpc3QuCisJICovCisJY2hlY2tfdGhyZWFkX3RpbWVycyh0c2ssICZmaXJpbmcpOworCWNoZWNrX3Byb2Nlc3NfdGltZXJzKHRzaywgJmZpcmluZyk7CiAKIAkvKgotCSAqIERvdWJsZS1jaGVjayB3aXRoIGxvY2tzIGhlbGQuCisJICogV2UgbXVzdCByZWxlYXNlIHRoZXNlIGxvY2tzIGJlZm9yZSB0YWtpbmcgYW55IHRpbWVyJ3MgbG9jay4KKwkgKiBUaGVyZSBpcyBhIHBvdGVudGlhbCByYWNlIHdpdGggdGltZXIgZGVsZXRpb24gaGVyZSwgYXMgdGhlCisJICogc2lnbG9jayBub3cgcHJvdGVjdHMgb3VyIHByaXZhdGUgZmlyaW5nIGxpc3QuICBXZSBoYXZlIHNldAorCSAqIHRoZSBmaXJpbmcgZmxhZyBpbiBlYWNoIHRpbWVyLCBzbyB0aGF0IGEgZGVsZXRpb24gYXR0ZW1wdAorCSAqIHRoYXQgZ2V0cyB0aGUgdGltZXIgbG9jayBiZWZvcmUgd2UgZG8gd2lsbCBnaXZlIGl0IHVwIGFuZAorCSAqIHNwaW4gdW50aWwgd2UndmUgdGFrZW4gY2FyZSBvZiB0aGF0IHRpbWVyIGJlbG93LgogCSAqLwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JaWYgKGxpa2VseSh0c2stPnNpZ25hbCAhPSBOVUxMKSkgewotCQlzcGluX2xvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQkJLyoKLQkJICogSGVyZSB3ZSB0YWtlIG9mZiB0c2stPmNwdV90aW1lcnNbTl0gYW5kIHRzay0+c2lnbmFsLT5jcHVfdGltZXJzW05dCi0JCSAqIGFsbCB0aGUgdGltZXJzIHRoYXQgYXJlIGZpcmluZywgYW5kIHB1dCB0aGVtIG9uIHRoZSBmaXJpbmcgbGlzdC4KLQkJICovCi0JCWNoZWNrX3RocmVhZF90aW1lcnModHNrLCAmZmlyaW5nKTsKLQkJY2hlY2tfcHJvY2Vzc190aW1lcnModHNrLCAmZmlyaW5nKTsKLQotCQkvKgotCQkgKiBXZSBtdXN0IHJlbGVhc2UgdGhlc2UgbG9ja3MgYmVmb3JlIHRha2luZyBhbnkgdGltZXIncyBsb2NrLgotCQkgKiBUaGVyZSBpcyBhIHBvdGVudGlhbCByYWNlIHdpdGggdGltZXIgZGVsZXRpb24gaGVyZSwgYXMgdGhlCi0JCSAqIHNpZ2xvY2sgbm93IHByb3RlY3RzIG91ciBwcml2YXRlIGZpcmluZyBsaXN0LiAgV2UgaGF2ZSBzZXQKLQkJICogdGhlIGZpcmluZyBmbGFnIGluIGVhY2ggdGltZXIsIHNvIHRoYXQgYSBkZWxldGlvbiBhdHRlbXB0Ci0JCSAqIHRoYXQgZ2V0cyB0aGUgdGltZXIgbG9jayBiZWZvcmUgd2UgZG8gd2lsbCBnaXZlIGl0IHVwIGFuZAotCQkgKiBzcGluIHVudGlsIHdlJ3ZlIHRha2VuIGNhcmUgb2YgdGhhdCB0aW1lciBiZWxvdy4KLQkJICovCi0JCXNwaW5fdW5sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCX0KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAkvKgogCSAqIE5vdyB0aGF0IGFsbCB0aGUgdGltZXJzIG9uIG91ciBsaXN0IGhhdmUgdGhlIGZpcmluZyBmbGFnLApAQCAtMTM4OSwxMCArMTM5Nyw5IEBACiAKIC8qCiAgKiBTZXQgb25lIG9mIHRoZSBwcm9jZXNzLXdpZGUgc3BlY2lhbCBjYXNlIENQVSB0aW1lcnMuCi0gKiBUaGUgdGFza2xpc3RfbG9jayBhbmQgdHNrLT5zaWdoYW5kLT5zaWdsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyLgotICogVGhlIG9sZHZhbCBhcmd1bWVudCBpcyBudWxsIGZvciB0aGUgUkxJTUlUX0NQVSB0aW1lciwgd2hlcmUgKm5ld3ZhbCBpcwotICogYWJzb2x1dGU7IG5vbi1udWxsIGZvciBJVElNRVJfKiwgd2hlcmUgKm5ld3ZhbCBpcyByZWxhdGl2ZSBhbmQgd2UgdXBkYXRlCi0gKiBpdCB0byBiZSBhYnNvbHV0ZSwgKm9sZHZhbCBpcyBhYnNvbHV0ZSBhbmQgd2UgdXBkYXRlIGl0IHRvIGJlIHJlbGF0aXZlLgorICogVGhlIHRzay0+c2lnaGFuZC0+c2lnbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci4KKyAqIFRoZSAqbmV3dmFsIGFyZ3VtZW50IGlzIHJlbGF0aXZlIGFuZCB3ZSB1cGRhdGUgaXQgdG8gYmUgYWJzb2x1dGUsICpvbGR2YWwKKyAqIGlzIGFic29sdXRlIGFuZCB3ZSB1cGRhdGUgaXQgdG8gYmUgcmVsYXRpdmUuCiAgKi8KIHZvaWQgc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBpbnQgY2xvY2tfaWR4LAogCQkJICAgY3B1dGltZV90ICpuZXd2YWwsIGNwdXRpbWVfdCAqb2xkdmFsKQpAQCAtMTQwMSw3ICsxNDA4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwogCiAJQlVHX09OKGNsb2NrX2lkeCA9PSBDUFVDTE9DS19TQ0hFRCk7Ci0JY3B1X2Nsb2NrX3NhbXBsZV9ncm91cF9sb2NrZWQoY2xvY2tfaWR4LCB0c2ssICZub3cpOworCWNwdV9jbG9ja19zYW1wbGVfZ3JvdXAoY2xvY2tfaWR4LCB0c2ssICZub3cpOwogCiAJaWYgKG9sZHZhbCkgewogCQlpZiAoIWNwdXRpbWVfZXEoKm9sZHZhbCwgY3B1dGltZV96ZXJvKSkgewpAQCAtMTQzNSwxMyArMTQ0MiwxNCBAQAogCSAgICBjcHV0aW1lX2dlKGxpc3RfZmlyc3RfZW50cnkoaGVhZCwKIAkJCQkgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwgZW50cnkpLT5leHBpcmVzLmNwdSwKIAkJICAgICAgICpuZXd2YWwpKSB7Ci0JCS8qCi0JCSAqIFJlamlnZ2VyIGVhY2ggdGhyZWFkJ3MgZXhwaXJ5IHRpbWUgc28gdGhhdCBvbmUgd2lsbAotCQkgKiBub3RpY2UgYmVmb3JlIHdlIGhpdCB0aGUgcHJvY2Vzcy1jdW11bGF0aXZlIGV4cGlyeSB0aW1lLgotCQkgKi8KLQkJdW5pb24gY3B1X3RpbWVfY291bnQgZXhwaXJlcyA9IHsgLnNjaGVkID0gMCB9OwotCQlleHBpcmVzLmNwdSA9ICpuZXd2YWw7Ci0JCXByb2Nlc3NfdGltZXJfcmViYWxhbmNlKHRzaywgY2xvY2tfaWR4LCBleHBpcmVzLCBub3cpOworCQlzd2l0Y2ggKGNsb2NrX2lkeCkgeworCQljYXNlIENQVUNMT0NLX1BST0Y6CisJCQl0c2stPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gKm5ld3ZhbDsKKwkJCWJyZWFrOworCQljYXNlIENQVUNMT0NLX1ZJUlQ6CisJCQl0c2stPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gKm5ld3ZhbDsKKwkJCWJyZWFrOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggNTEzMWU1NC4uNWU3OWM2NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMjIzLDYgKzIyMywxNSBAQAogfQogCiAvKgorICogR2V0IG1vbm90b25pYyB0aW1lIGZvciBwb3NpeCB0aW1lcnMKKyAqLworc3RhdGljIGludCBwb3NpeF9nZXRfbW9ub3RvbmljX3JhdyhjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCit7CisJZ2V0cmF3bW9ub3RvbmljKHRwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIEluaXRpYWxpemUgZXZlcnl0aGluZywgd2VsbCwganVzdCBldmVyeXRoaW5nIGluIFBvc2l4IGNsb2Nrcy90aW1lcnMgOykKICAqLwogc3RhdGljIF9faW5pdCBpbnQgaW5pdF9wb3NpeF90aW1lcnModm9pZCkKQEAgLTIzNSw5ICsyNDQsMTUgQEAKIAkJLmNsb2NrX2dldCA9IHBvc2l4X2t0aW1lX2dldF90cywKIAkJLmNsb2NrX3NldCA9IGRvX3Bvc2l4X2Nsb2NrX25vc2V0dGltZSwKIAl9OworCXN0cnVjdCBrX2Nsb2NrIGNsb2NrX21vbm90b25pY19yYXcgPSB7CisJCS5jbG9ja19nZXRyZXMgPSBocnRpbWVyX2dldF9yZXMsCisJCS5jbG9ja19nZXQgPSBwb3NpeF9nZXRfbW9ub3RvbmljX3JhdywKKwkJLmNsb2NrX3NldCA9IGRvX3Bvc2l4X2Nsb2NrX25vc2V0dGltZSwKKwl9OwogCiAJcmVnaXN0ZXJfcG9zaXhfY2xvY2soQ0xPQ0tfUkVBTFRJTUUsICZjbG9ja19yZWFsdGltZSk7CiAJcmVnaXN0ZXJfcG9zaXhfY2xvY2soQ0xPQ0tfTU9OT1RPTklDLCAmY2xvY2tfbW9ub3RvbmljKTsKKwlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19NT05PVE9OSUNfUkFXLCAmY2xvY2tfbW9ub3RvbmljX3Jhdyk7CiAKIAlwb3NpeF90aW1lcnNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicG9zaXhfdGltZXJzX2NhY2hlIiwKIAkJCQkJc2l6ZW9mIChzdHJ1Y3Qga19pdGltZXIpLCAwLCBTTEFCX1BBTklDLApAQCAtMjk4LDYgKzMxMyw3IEBACiAKIGludCBwb3NpeF90aW1lcl9ldmVudChzdHJ1Y3Qga19pdGltZXIgKnRpbXIsIGludCBzaV9wcml2YXRlKQogeworCWludCBzaGFyZWQsIHJldDsKIAkvKgogCSAqIEZJWE1FOiBpZiAtPnNpZ3EgaXMgcXVldWVkIHdlIGNhbiByYWNlIHdpdGgKIAkgKiBkZXF1ZXVlX3NpZ25hbCgpLT5kb19zY2hlZHVsZV9uZXh0X3RpbWVyKCkuCkBAIC0zMTEsMjUgKzMyNywxMCBAQAogCSAqLwogCXRpbXItPnNpZ3EtPmluZm8uc2lfc3lzX3ByaXZhdGUgPSBzaV9wcml2YXRlOwogCi0JdGltci0+c2lncS0+aW5mby5zaV9zaWdubyA9IHRpbXItPml0X3NpZ2V2X3NpZ25vOwotCXRpbXItPnNpZ3EtPmluZm8uc2lfY29kZSA9IFNJX1RJTUVSOwotCXRpbXItPnNpZ3EtPmluZm8uc2lfdGlkID0gdGltci0+aXRfaWQ7Ci0JdGltci0+c2lncS0+aW5mby5zaV92YWx1ZSA9IHRpbXItPml0X3NpZ2V2X3ZhbHVlOwotCi0JaWYgKHRpbXItPml0X3NpZ2V2X25vdGlmeSAmIFNJR0VWX1RIUkVBRF9JRCkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlcjsKLQkJaW50IHJldCA9IHNlbmRfc2lncXVldWUodGltci0+c2lncSwgdGltci0+aXRfcHJvY2VzcywgMCk7Ci0KLQkJaWYgKGxpa2VseShyZXQgPj0gMCkpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXRpbXItPml0X3NpZ2V2X25vdGlmeSA9IFNJR0VWX1NJR05BTDsKLQkJbGVhZGVyID0gdGltci0+aXRfcHJvY2Vzcy0+Z3JvdXBfbGVhZGVyOwotCQlwdXRfdGFza19zdHJ1Y3QodGltci0+aXRfcHJvY2Vzcyk7Ci0JCXRpbXItPml0X3Byb2Nlc3MgPSBsZWFkZXI7Ci0JfQotCi0JcmV0dXJuIHNlbmRfc2lncXVldWUodGltci0+c2lncSwgdGltci0+aXRfcHJvY2VzcywgMSk7CisJc2hhcmVkID0gISh0aW1yLT5pdF9zaWdldl9ub3RpZnkgJiBTSUdFVl9USFJFQURfSUQpOworCXJldCA9IHNlbmRfc2lncXVldWUodGltci0+c2lncSwgdGltci0+aXRfcHJvY2Vzcywgc2hhcmVkKTsKKwkvKiBJZiB3ZSBmYWlsZWQgdG8gc2VuZCB0aGUgc2lnbmFsIHRoZSB0aW1lciBzdG9wcy4gKi8KKwlyZXR1cm4gcmV0ID4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBvc2l4X3RpbWVyX2V2ZW50KTsKIApAQCAtNDY4LDExICs0NjksOSBAQAogCQkgc3RydWN0IHNpZ2V2ZW50IF9fdXNlciAqdGltZXJfZXZlbnRfc3BlYywKIAkJIHRpbWVyX3QgX191c2VyICogY3JlYXRlZF90aW1lcl9pZCkKIHsKLQlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBrX2l0aW1lciAqbmV3X3RpbWVyID0gTlVMTDsKLQlpbnQgbmV3X3RpbWVyX2lkOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJvY2VzcyA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qga19pdGltZXIgKm5ld190aW1lcjsKKwlpbnQgZXJyb3IsIG5ld190aW1lcl9pZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByb2Nlc3M7CiAJc2lnZXZlbnRfdCBldmVudDsKIAlpbnQgaXRfaWRfc2V0ID0gSVRfSURfTk9UX1NFVDsKIApAQCAtNDkwLDEyICs0ODksMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCXNwaW5fbG9ja19pcnEoJmlkcl9sb2NrKTsKLQllcnJvciA9IGlkcl9nZXRfbmV3KCZwb3NpeF90aW1lcnNfaWQsICh2b2lkICopIG5ld190aW1lciwKLQkJCSAgICAmbmV3X3RpbWVyX2lkKTsKKwllcnJvciA9IGlkcl9nZXRfbmV3KCZwb3NpeF90aW1lcnNfaWQsIG5ld190aW1lciwgJm5ld190aW1lcl9pZCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZpZHJfbG9jayk7Ci0JaWYgKGVycm9yID09IC1FQUdBSU4pCi0JCWdvdG8gcmV0cnk7Ci0JZWxzZSBpZiAoZXJyb3IpIHsKKwlpZiAoZXJyb3IpIHsKKwkJaWYgKGVycm9yID09IC1FQUdBSU4pCisJCQlnb3RvIHJldHJ5OwogCQkvKgogCQkgKiBXZWlyZCBsb29raW5nLCBidXQgd2UgcmV0dXJuIEVBR0FJTiBpZiB0aGUgSURSIGlzCiAJCSAqIGZ1bGwgKHByb3BlciBQT1NJWCByZXR1cm4gdmFsdWUgZm9yIHRoaXMpCkBAIC01MjYsNjcgKzUyNCw0MyBAQAogCQkJZXJyb3IgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJbmV3X3RpbWVyLT5pdF9zaWdldl9ub3RpZnkgPSBldmVudC5zaWdldl9ub3RpZnk7Ci0JCW5ld190aW1lci0+aXRfc2lnZXZfc2lnbm8gPSBldmVudC5zaWdldl9zaWdubzsKLQkJbmV3X3RpbWVyLT5pdF9zaWdldl92YWx1ZSA9IGV2ZW50LnNpZ2V2X3ZhbHVlOwotCi0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCWlmICgocHJvY2VzcyA9IGdvb2Rfc2lnZXZlbnQoJmV2ZW50KSkpIHsKLQkJCS8qCi0JCQkgKiBXZSBtYXkgYmUgc2V0dGluZyB1cCB0aGlzIHByb2Nlc3MgZm9yIGFub3RoZXIKLQkJCSAqIHRocmVhZC4gIEl0IG1heSBiZSBleGl0aW5nLiAgVG8gY2F0Y2ggdGhpcwotCQkJICogY2FzZSB0aGUgd2UgY2hlY2sgdGhlIFBGX0VYSVRJTkcgZmxhZy4gIElmCi0JCQkgKiB0aGUgZmxhZyBpcyBub3Qgc2V0LCB0aGUgc2lnbG9jayB3aWxsIGNhdGNoCi0JCQkgKiBoaW0gYmVmb3JlIGl0IGlzIHRvbyBsYXRlIChpbiBleGl0X2l0aW1lcnMpLgotCQkJICoKLQkJCSAqIFRoZSBleGVjIGNhc2UgaXMgYSBiaXQgbW9yZSBpbnZsb3ZlZCBidXQgZWFzeQotCQkJICogdG8gY29kZS4gIElmIHRoZSBwcm9jZXNzIGlzIGluIG91ciB0aHJlYWQKLQkJCSAqIGdyb3VwIChhbmQgaXQgbXVzdCBiZSBvciB3ZSB3b3VsZCBub3QgYWxsb3cKLQkJCSAqIGl0IGhlcmUpIGFuZCBpcyBkb2luZyBhbiBleGVjLCBpdCB3aWxsIGNhdXNlCi0JCQkgKiB1cyB0byBiZSBraWxsZWQuICBJbiB0aGlzIGNhc2UgaXQgd2lsbCB3YWl0Ci0JCQkgKiBmb3IgdXMgdG8gZGllIHdoaWNoIG1lYW5zIHdlIGNhbiBmaW5pc2ggdGhpcwotCQkJICogbGlua2FnZSB3aXRoIG91ciBsYXN0IGdhc3AuIEkuZS4gbm8gY29kZSA6KQotCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvY2Vzcy0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQkJaWYgKCEocHJvY2Vzcy0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkgewotCQkJCW5ld190aW1lci0+aXRfcHJvY2VzcyA9IHByb2Nlc3M7Ci0JCQkJbGlzdF9hZGQoJm5ld190aW1lci0+bGlzdCwKLQkJCQkJICZwcm9jZXNzLT5zaWduYWwtPnBvc2l4X3RpbWVycyk7Ci0JCQkJaWYgKG5ld190aW1lci0+aXRfc2lnZXZfbm90aWZ5ID09IChTSUdFVl9TSUdOQUx8U0lHRVZfVEhSRUFEX0lEKSkKLQkJCQkJZ2V0X3Rhc2tfc3RydWN0KHByb2Nlc3MpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb2Nlc3MtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvY2Vzcy0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQkJCXByb2Nlc3MgPSBOVUxMOwotCQkJfQotCQl9Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlwcm9jZXNzID0gZ29vZF9zaWdldmVudCgmZXZlbnQpOworCQlpZiAocHJvY2VzcykKKwkJCWdldF90YXNrX3N0cnVjdChwcm9jZXNzKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWlmICghcHJvY2VzcykgewogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgewotCQluZXdfdGltZXItPml0X3NpZ2V2X25vdGlmeSA9IFNJR0VWX1NJR05BTDsKLQkJbmV3X3RpbWVyLT5pdF9zaWdldl9zaWdubyA9IFNJR0FMUk07Ci0JCW5ld190aW1lci0+aXRfc2lnZXZfdmFsdWUuc2l2YWxfaW50ID0gbmV3X3RpbWVyLT5pdF9pZDsKKwkJZXZlbnQuc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOworCQlldmVudC5zaWdldl9zaWdubyA9IFNJR0FMUk07CisJCWV2ZW50LnNpZ2V2X3ZhbHVlLnNpdmFsX2ludCA9IG5ld190aW1lci0+aXRfaWQ7CiAJCXByb2Nlc3MgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9jZXNzLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCW5ld190aW1lci0+aXRfcHJvY2VzcyA9IHByb2Nlc3M7Ci0JCWxpc3RfYWRkKCZuZXdfdGltZXItPmxpc3QsICZwcm9jZXNzLT5zaWduYWwtPnBvc2l4X3RpbWVycyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb2Nlc3MtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJZ2V0X3Rhc2tfc3RydWN0KHByb2Nlc3MpOwogCX0KIAorCW5ld190aW1lci0+aXRfc2lnZXZfbm90aWZ5ICAgICA9IGV2ZW50LnNpZ2V2X25vdGlmeTsKKwluZXdfdGltZXItPnNpZ3EtPmluZm8uc2lfc2lnbm8gPSBldmVudC5zaWdldl9zaWdubzsKKwluZXdfdGltZXItPnNpZ3EtPmluZm8uc2lfdmFsdWUgPSBldmVudC5zaWdldl92YWx1ZTsKKwluZXdfdGltZXItPnNpZ3EtPmluZm8uc2lfdGlkICAgPSBuZXdfdGltZXItPml0X2lkOworCW5ld190aW1lci0+c2lncS0+aW5mby5zaV9jb2RlICA9IFNJX1RJTUVSOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJbmV3X3RpbWVyLT5pdF9wcm9jZXNzID0gcHJvY2VzczsKKwlsaXN0X2FkZCgmbmV3X3RpbWVyLT5saXN0LCAmY3VycmVudC0+c2lnbmFsLT5wb3NpeF90aW1lcnMpOworCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwlyZXR1cm4gMDsKICAJLyoKIAkgKiBJbiB0aGUgY2FzZSBvZiB0aGUgdGltZXIgYmVsb25naW5nIHRvIGFub3RoZXIgdGFzaywgYWZ0ZXIKIAkgKiB0aGUgdGFzayBpcyB1bmxvY2tlZCwgdGhlIHRpbWVyIGlzIG93bmVkIGJ5IHRoZSBvdGhlciB0YXNrCiAJICogYW5kIG1heSBjZWFzZSB0byBleGlzdCBhdCBhbnkgdGltZS4gIERvbid0IHVzZSBvciBtb2RpZnkKIAkgKiBuZXdfdGltZXIgYWZ0ZXIgdGhlIHVubG9jayBjYWxsLgogCSAqLwotCiBvdXQ6Ci0JaWYgKGVycm9yKQotCQlyZWxlYXNlX3Bvc2l4X3RpbWVyKG5ld190aW1lciwgaXRfaWRfc2V0KTsKLQorCXJlbGVhc2VfcG9zaXhfdGltZXIobmV3X3RpbWVyLCBpdF9pZF9zZXQpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTk3LDcgKzU3MSw3IEBACiAgKiB0aGUgZmluZCB0byB0aGUgdGltZXIgbG9jay4gIFRvIGF2b2lkIGEgZGVhZCBsb2NrLCB0aGUgdGltZXIgaWQgTVVTVAogICogYmUgcmVsZWFzZSB3aXRoIG91dCBob2xkaW5nIHRoZSB0aW1lciBsb2NrLgogICovCi1zdGF0aWMgc3RydWN0IGtfaXRpbWVyICogbG9ja190aW1lcih0aW1lcl90IHRpbWVyX2lkLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3N0YXRpYyBzdHJ1Y3Qga19pdGltZXIgKmxvY2tfdGltZXIodGltZXJfdCB0aW1lcl9pZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3RydWN0IGtfaXRpbWVyICp0aW1yOwogCS8qCkBAIC02MDUsMjMgKzU3OSwyMCBAQAogCSAqIGZsYWdzIHBhcnQgb3ZlciB0byB0aGUgdGltZXIgbG9jay4gIE11c3Qgbm90IGxldCBpbnRlcnJ1cHRzIGluCiAJICogd2hpbGUgd2UgYXJlIG1vdmluZyB0aGUgbG9jay4KIAkgKi8KLQogCXNwaW5fbG9ja19pcnFzYXZlKCZpZHJfbG9jaywgKmZsYWdzKTsKLQl0aW1yID0gKHN0cnVjdCBrX2l0aW1lciAqKSBpZHJfZmluZCgmcG9zaXhfdGltZXJzX2lkLCAoaW50KSB0aW1lcl9pZCk7CisJdGltciA9IGlkcl9maW5kKCZwb3NpeF90aW1lcnNfaWQsIChpbnQpdGltZXJfaWQpOwogCWlmICh0aW1yKSB7CiAJCXNwaW5fbG9jaygmdGltci0+aXRfbG9jayk7Ci0KLQkJaWYgKCh0aW1yLT5pdF9pZCAhPSB0aW1lcl9pZCkgfHwgISh0aW1yLT5pdF9wcm9jZXNzKSB8fAotCQkJCSFzYW1lX3RocmVhZF9ncm91cCh0aW1yLT5pdF9wcm9jZXNzLCBjdXJyZW50KSkgewotCQkJc3Bpbl91bmxvY2soJnRpbXItPml0X2xvY2spOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRyX2xvY2ssICpmbGFncyk7Ci0JCQl0aW1yID0gTlVMTDsKLQkJfSBlbHNlCisJCWlmICh0aW1yLT5pdF9wcm9jZXNzICYmCisJCSAgICBzYW1lX3RocmVhZF9ncm91cCh0aW1yLT5pdF9wcm9jZXNzLCBjdXJyZW50KSkgewogCQkJc3Bpbl91bmxvY2soJmlkcl9sb2NrKTsKLQl9IGVsc2UKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRyX2xvY2ssICpmbGFncyk7CisJCQlyZXR1cm4gdGltcjsKKwkJfQorCQlzcGluX3VubG9jaygmdGltci0+aXRfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkcl9sb2NrLCAqZmxhZ3MpOwogCi0JcmV0dXJuIHRpbXI7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC02NjgsNyArNjM5LDcgQEAKIAkgICAgKHRpbXItPml0X3NpZ2V2X25vdGlmeSAmIH5TSUdFVl9USFJFQURfSUQpID09IFNJR0VWX05PTkUpKQogCQl0aW1yLT5pdF9vdmVycnVuICs9ICh1bnNpZ25lZCBpbnQpIGhydGltZXJfZm9yd2FyZCh0aW1lciwgbm93LCBpdik7CiAKLQlyZW1haW5pbmcgPSBrdGltZV9zdWIodGltZXItPmV4cGlyZXMsIG5vdyk7CisJcmVtYWluaW5nID0ga3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXModGltZXIpLCBub3cpOwogCS8qIFJldHVybiAwIG9ubHksIHdoZW4gdGhlIHRpbWVyIGlzIGV4cGlyZWQgYW5kIG5vdCBwZW5kaW5nICovCiAJaWYgKHJlbWFpbmluZy50djY0IDw9IDApIHsKIAkJLyoKQEAgLTc2Miw3ICs3MzMsNyBAQAogCWhydGltZXJfaW5pdCgmdGltci0+aXQucmVhbC50aW1lciwgdGltci0+aXRfY2xvY2ssIG1vZGUpOwogCXRpbXItPml0LnJlYWwudGltZXIuZnVuY3Rpb24gPSBwb3NpeF90aW1lcl9mbjsKIAotCXRpbWVyLT5leHBpcmVzID0gdGltZXNwZWNfdG9fa3RpbWUobmV3X3NldHRpbmctPml0X3ZhbHVlKTsKKwlocnRpbWVyX3NldF9leHBpcmVzKHRpbWVyLCB0aW1lc3BlY190b19rdGltZShuZXdfc2V0dGluZy0+aXRfdmFsdWUpKTsKIAogCS8qIENvbnZlcnQgaW50ZXJ2YWwgKi8KIAl0aW1yLT5pdC5yZWFsLmludGVydmFsID0gdGltZXNwZWNfdG9fa3RpbWUobmV3X3NldHRpbmctPml0X2ludGVydmFsKTsKQEAgLTc3MSwxNCArNzQyLDEyIEBACiAJaWYgKCgodGltci0+aXRfc2lnZXZfbm90aWZ5ICYgflNJR0VWX1RIUkVBRF9JRCkgPT0gU0lHRVZfTk9ORSkpIHsKIAkJLyogU2V0dXAgY29ycmVjdCBleHBpcnkgdGltZSBmb3IgcmVsYXRpdmUgdGltZXJzICovCiAJCWlmIChtb2RlID09IEhSVElNRVJfTU9ERV9SRUwpIHsKLQkJCXRpbWVyLT5leHBpcmVzID0KLQkJCQlrdGltZV9hZGRfc2FmZSh0aW1lci0+ZXhwaXJlcywKLQkJCQkJICAgICAgIHRpbWVyLT5iYXNlLT5nZXRfdGltZSgpKTsKKwkJCWhydGltZXJfYWRkX2V4cGlyZXModGltZXIsIHRpbWVyLT5iYXNlLT5nZXRfdGltZSgpKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CiAKLQlocnRpbWVyX3N0YXJ0KHRpbWVyLCB0aW1lci0+ZXhwaXJlcywgbW9kZSk7CisJaHJ0aW1lcl9zdGFydF9leHBpcmVzKHRpbWVyLCBtb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODYyLDggKzgzMSw3IEBACiAJICogVGhpcyBrZWVwcyBhbnkgdGFza3Mgd2FpdGluZyBvbiB0aGUgc3BpbiBsb2NrIGZyb20gdGhpbmtpbmcKIAkgKiB0aGV5IGdvdCBzb21ldGhpbmcgKHNlZSB0aGUgbG9jayBjb2RlIGFib3ZlKS4KIAkgKi8KLQlpZiAodGltZXItPml0X3NpZ2V2X25vdGlmeSA9PSAoU0lHRVZfU0lHTkFMfFNJR0VWX1RIUkVBRF9JRCkpCi0JCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7CisJcHV0X3Rhc2tfc3RydWN0KHRpbWVyLT5pdF9wcm9jZXNzKTsKIAl0aW1lci0+aXRfcHJvY2VzcyA9IE5VTEw7CiAKIAl1bmxvY2tfdGltZXIodGltZXIsIGZsYWdzKTsKQEAgLTg5MCw4ICs4NTgsNyBAQAogCSAqIFRoaXMga2VlcHMgYW55IHRhc2tzIHdhaXRpbmcgb24gdGhlIHNwaW4gbG9jayBmcm9tIHRoaW5raW5nCiAJICogdGhleSBnb3Qgc29tZXRoaW5nIChzZWUgdGhlIGxvY2sgY29kZSBhYm92ZSkuCiAJICovCi0JaWYgKHRpbWVyLT5pdF9zaWdldl9ub3RpZnkgPT0gKFNJR0VWX1NJR05BTHxTSUdFVl9USFJFQURfSUQpKQotCQlwdXRfdGFza19zdHJ1Y3QodGltZXItPml0X3Byb2Nlc3MpOworCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7CiAJdGltZXItPml0X3Byb2Nlc3MgPSBOVUxMOwogCiAJdW5sb2NrX3RpbWVyKHRpbWVyLCBmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvZGlzay5jIGIva2VybmVsL3Bvd2VyL2Rpc2suYwppbmRleCAzMzFmOTgzLi5jOWQ3NDA4IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvZGlzay5jCisrKyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKQEAgLTY1MSw3ICs2NTEsNyBAQAogCXByX2RlYnVnKCJQTTogUHJlcGFyaW5nIHByb2Nlc3NlcyBmb3IgcmVzdG9yZS5cbiIpOwogCWVycm9yID0gcHJlcGFyZV9wcm9jZXNzZXMoKTsKIAlpZiAoZXJyb3IpIHsKLQkJc3dzdXNwX2Nsb3NlKCk7CisJCXN3c3VzcF9jbG9zZShGTU9ERV9SRUFEKTsKIAkJZ290byBEb25lOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Bvd2VyLmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAppbmRleCBhY2MwYzEwLi40NmI1ZWM3IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcG93ZXIuaAorKysgYi9rZXJuZWwvcG93ZXIvcG93ZXIuaApAQCAtMTUzLDcgKzE1Myw3IEBACiBleHRlcm4gdm9pZCBzd3N1c3BfZnJlZSh2b2lkKTsKIGV4dGVybiBpbnQgc3dzdXNwX3JlYWQodW5zaWduZWQgaW50ICpmbGFnc19wKTsKIGV4dGVybiBpbnQgc3dzdXNwX3dyaXRlKHVuc2lnbmVkIGludCBmbGFncyk7Ci1leHRlcm4gdm9pZCBzd3N1c3BfY2xvc2Uodm9pZCk7CitleHRlcm4gdm9pZCBzd3N1c3BfY2xvc2UoZm1vZGVfdCk7CiAKIHN0cnVjdCB0aW1ldmFsOwogLyoga2VybmVsL3Bvd2VyL3N3c3VzcC5jICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCAyNzg5NDZhLi5jYTYzNDAxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTI4LDEyMSArMjgsNiBAQAogCXJldHVybiAxOwogfQogCi0vKgotICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKLXsKLQlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7Ci0JCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKLQkJd21iKCk7Ci0JfQotCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOwotfQotCi0vKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KLXZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCi17Ci0JLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCi0JICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KLQlsb25nIHNhdmU7Ci0KLQl0YXNrX2xvY2soY3VycmVudCk7Ci0JaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7Ci0JCWZyb3plbl9wcm9jZXNzKCk7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCX0gZWxzZSB7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCQlyZXR1cm47Ci0JfQotCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKLQlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JZm9yICg7OykgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghZnJvemVuKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7Ci0JX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0Jc2lnbmFsX3dha2VfdXAocCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOwotfQotCi0vKioKLSAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKLSAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KLSAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCi0gKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0Ci0gKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcwotICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKLSAqCi0gKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKLSAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgotICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCi0gKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cwotICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KLSAqLwotc3RhdGljIGJvb2wgZnJlZXplX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIHNpZ19vbmx5KQotewotCS8qCi0JICogV2UgZmlyc3QgY2hlY2sgaWYgdGhlIHRhc2sgaXMgZnJlZXppbmcgYW5kIG5leHQgaWYgaXQgaGFzIGFscmVhZHkKLQkgKiBiZWVuIGZyb3plbiB0byBhdm9pZCB0aGUgcmFjZSB3aXRoIGZyb3plbl9wcm9jZXNzKCkgd2hpY2ggZmlyc3QgbWFya3MKLQkgKiB0aGUgdGFzayBhcyBmcm96ZW4gYW5kIG5leHQgY2xlYXJzIGl0cyBUSUZfRlJFRVpFLgotCSAqLwotCWlmICghZnJlZXppbmcocCkpIHsKLQkJcm1iKCk7Ci0JCWlmIChmcm96ZW4ocCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaWYgKCFzaWdfb25seSB8fCBzaG91bGRfc2VuZF9zaWduYWwocCkpCi0JCQlzZXRfZnJlZXplX2ZsYWcocCk7Ci0JCWVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoc2hvdWxkX3NlbmRfc2lnbmFsKHApKSB7Ci0JCWlmICghc2lnbmFsX3BlbmRpbmcocCkpCi0JCQlmYWtlX3NpZ25hbF93YWtlX3VwKHApOwotCX0gZWxzZSBpZiAoc2lnX29ubHkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCXdha2VfdXBfc3RhdGUocCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGZyZWV6aW5nKHApKSB7Ci0JCXByX2RlYnVnKCIgIGNsZWFuIHVwOiAlc1xuIiwgcC0+Y29tbSk7Ci0JCWNsZWFyX2ZyZWV6ZV9mbGFnKHApOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZ19hbmRfd2FrZShwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCX0KLX0KLQogc3RhdGljIGludCB0cnlfdG9fZnJlZXplX3Rhc2tzKGJvb2wgc2lnX29ubHkpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKQEAgLTI1MCw2ICsxMzUsOSBAQAogCQlpZiAobm9zaWdfb25seSAmJiBzaG91bGRfc2VuZF9zaWduYWwocCkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoY2dyb3VwX2Zyb3plbihwKSkKKwkJCWNvbnRpbnVlOworCiAJCXRoYXdfcHJvY2VzcyhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTI2NCw0ICsxNTIsMyBAQAogCXByaW50aygiZG9uZS5cbiIpOwogfQogCi1FWFBPUlRfU1lNQk9MKHJlZnJpZ2VyYXRvcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCA4MGNjYWM4Li5iNzcxM2I1IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTE3MiwxMyArMTcyLDEzIEBACiAJCXJldHVybiByZXM7CiAKIAlyb290X3N3YXAgPSByZXM7Ci0JcmVzID0gYmxrZGV2X2dldChyZXN1bWVfYmRldiwgRk1PREVfV1JJVEUsIE9fUkRXUik7CisJcmVzID0gYmxrZGV2X2dldChyZXN1bWVfYmRldiwgRk1PREVfV1JJVEUpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKIAlyZXMgPSBzZXRfYmxvY2tzaXplKHJlc3VtZV9iZGV2LCBQQUdFX1NJWkUpOwogCWlmIChyZXMgPCAwKQotCQlibGtkZXZfcHV0KHJlc3VtZV9iZGV2KTsKKwkJYmxrZGV2X3B1dChyZXN1bWVfYmRldiwgRk1PREVfV1JJVEUpOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTQyNiw3ICs0MjYsNyBAQAogCiAJcmVsZWFzZV9zd2FwX3dyaXRlcigmaGFuZGxlKTsKICBvdXQ6Ci0Jc3dzdXNwX2Nsb3NlKCk7CisJc3dzdXNwX2Nsb3NlKEZNT0RFX1dSSVRFKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTU3NCw3ICs1NzQsNyBAQAogCQllcnJvciA9IGxvYWRfaW1hZ2UoJmhhbmRsZSwgJnNuYXBzaG90LCBoZWFkZXItPnBhZ2VzIC0gMSk7CiAJcmVsZWFzZV9zd2FwX3JlYWRlcigmaGFuZGxlKTsKIAotCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYpOworCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYsIEZNT0RFX1JFQUQpOwogCiAJaWYgKCFlcnJvcikKIAkJcHJfZGVidWcoIlBNOiBJbWFnZSBzdWNjZXNzZnVsbHkgbG9hZGVkXG4iKTsKQEAgLTYwOSw3ICs2MDksNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGVycm9yKQotCQkJYmxrZGV2X3B1dChyZXN1bWVfYmRldik7CisJCQlibGtkZXZfcHV0KHJlc3VtZV9iZGV2LCBGTU9ERV9SRUFEKTsKIAkJZWxzZQogCQkJcHJfZGVidWcoIlBNOiBTaWduYXR1cmUgZm91bmQsIHJlc3VtaW5nXG4iKTsKIAl9IGVsc2UgewpAQCAtNjI2LDE0ICs2MjYsMTQgQEAKICAqCXN3c3VzcF9jbG9zZSAtIGNsb3NlIHN3YXAgZGV2aWNlLgogICovCiAKLXZvaWQgc3dzdXNwX2Nsb3NlKHZvaWQpCit2b2lkIHN3c3VzcF9jbG9zZShmbW9kZV90IG1vZGUpCiB7CiAJaWYgKElTX0VSUihyZXN1bWVfYmRldikpIHsKIAkJcHJfZGVidWcoIlBNOiBJbWFnZSBkZXZpY2Ugbm90IGluaXRpYWxpc2VkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYpOworCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYsIG1vZGUpOyAvKiBtb3ZlIHVwICovCiB9CiAKIHN0YXRpYyBpbnQgc3dzdXNwX2hlYWRlcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMzU2Njk5YS4uMWU2OGU0YyAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDUsNyArNDUsNyBAQAogICogVEFTS19UUkFDRUQsIHJlc3VtZSBpdCBub3cuCiAgKiBSZXF1aXJlcyB0aGF0IGlycXMgYmUgZGlzYWJsZWQuCiAgKi8KLXZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3N0YXRpYyB2b2lkIHB0cmFjZV91bnRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJc3Bpbl9sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKHRhc2tfaXNfdHJhY2VkKGNoaWxkKSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCA0NjdkNTk0Li5hZDYzYWY4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtMTE5LDE4ICsxMTksMTkgQEAKIAkvKiBUYWtlIGNwdWNvbnRyb2wgbXV0ZXggdG8gcHJvdGVjdCBhZ2FpbnN0IENQVSBob3RwbHVnICovCiAJbXV0ZXhfbG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOwogCWluaXRfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci0JYXRvbWljX3NldCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50LCAwKTsKIAkvKgotCSAqIFRoZSBxdWV1ZWluZyBvZiBjYWxsYmFja3MgaW4gYWxsIENQVXMgbXVzdCBiZSBhdG9taWMgd2l0aAotCSAqIHJlc3BlY3QgdG8gUkNVLCBvdGhlcndpc2Ugb25lIENQVSBtYXkgcXVldWUgYSBjYWxsYmFjaywKLQkgKiB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCwgZGVjcmVtZW50IGJhcnJpZXIgY291bnQgYW5kIGNhbGwKLQkgKiBjb21wbGV0ZSgpLCB3aGlsZSBvdGhlciBDUFVzIGhhdmUgbm90IHlldCBxdWV1ZWQgYW55dGhpbmcuCi0JICogU28sIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZ3JhY2UgcGVyaW9kcyBjYW5ub3QgY29tcGxldGUKLQkgKiB1bnRpbCBhbGwgdGhlIGNhbGxiYWNrcyBhcmUgcXVldWVkLgorCSAqIEluaXRpYWxpemUgcmN1X2JhcnJpZXJfY3B1X2NvdW50IHRvIDEsIHRoZW4gaW52b2tlCisJICogcmN1X2JhcnJpZXJfZnVuYygpIG9uIGVhY2ggQ1BVLCBzbyB0aGF0IGVhY2ggQ1BVIGFsc28gaGFzCisJICogaW5jcmVtZW50ZWQgcmN1X2JhcnJpZXJfY3B1X2NvdW50LiAgT25seSB0aGVuIGlzIGl0IHNhZmUgdG8KKwkgKiBkZWNyZW1lbnQgcmN1X2JhcnJpZXJfY3B1X2NvdW50IC0tIG90aGVyd2lzZSB0aGUgZmlyc3QgQ1BVCisJICogbWlnaHQgY29tcGxldGUgaXRzIGdyYWNlIHBlcmlvZCBiZWZvcmUgYWxsIG9mIHRoZSBvdGhlciBDUFVzCisJICogZGlkIHRoZWlyIGluY3JlbWVudCwgY2F1c2luZyB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiB0b28KKwkgKiBlYXJseS4KIAkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7CisJYXRvbWljX3NldCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50LCAxKTsKIAlvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKXR5cGUsIDEpOwotCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQorCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CiAJbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cHJlZW1wdC5jIGIva2VybmVsL3JjdXByZWVtcHQuYwppbmRleCBjYTRiYmJlLi41OTIzNmU4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cHJlZW1wdC5jCisrKyBiL2tlcm5lbC9yY3VwcmVlbXB0LmMKQEAgLTU0LDkgKzU0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwcmVlbXB0X3RyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKgogICogUFJFRU1QVF9SQ1UgZGF0YSBzdHJ1Y3R1cmVzLgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggOTBiNWIxMi4uODVjYjkwNSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC00MiwxMCArNDIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3JjdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4gYW5kICIKZGlmZiAtLWdpdCBhL2tlcm5lbC9ydG11dGV4LmMgYi9rZXJuZWwvcnRtdXRleC5jCmluZGV4IDY1MjJhZTUuLjY5ZDljYjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ydG11dGV4LmMKKysrIGIva2VybmVsL3J0bXV0ZXguYwpAQCAtNjMxLDggKzYzMSw3IEBACiAKIAkvKiBTZXR1cCB0aGUgdGltZXIsIHdoZW4gdGltZW91dCAhPSBOVUxMICovCiAJaWYgKHVubGlrZWx5KHRpbWVvdXQpKSB7Ci0JCWhydGltZXJfc3RhcnQoJnRpbWVvdXQtPnRpbWVyLCB0aW1lb3V0LT50aW1lci5leHBpcmVzLAotCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CisJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmdGltZW91dC0+dGltZXIsIEhSVElNRVJfTU9ERV9BQlMpOwogCQlpZiAoIWhydGltZXJfYWN0aXZlKCZ0aW1lb3V0LT50aW1lcikpCiAJCQl0aW1lb3V0LT50YXNrID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDExY2EzOTAuLjY2MjVjM2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CkBAIC03MSw2ICs3Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KQEAgLTIyNiw5ICsyMjgsOCBAQAogCiAJCW5vdyA9IGhydGltZXJfY2JfZ2V0X3RpbWUoJnJ0X2ItPnJ0X3BlcmlvZF90aW1lcik7CiAJCWhydGltZXJfZm9yd2FyZCgmcnRfYi0+cnRfcGVyaW9kX3RpbWVyLCBub3csIHJ0X2ItPnJ0X3BlcmlvZCk7Ci0JCWhydGltZXJfc3RhcnQoJnJ0X2ItPnJ0X3BlcmlvZF90aW1lciwKLQkJCSAgICAgIHJ0X2ItPnJ0X3BlcmlvZF90aW1lci5leHBpcmVzLAotCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CisJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmcnRfYi0+cnRfcGVyaW9kX3RpbWVyLAorCQkJCUhSVElNRVJfTU9ERV9BQlMpOwogCX0KIAlzcGluX3VubG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKIH0KQEAgLTEwNzAsNyArMTA3MSw3IEBACiAJc3RydWN0IGhydGltZXIgKnRpbWVyID0gJnJxLT5ocnRpY2tfdGltZXI7CiAJa3RpbWVfdCB0aW1lID0ga3RpbWVfYWRkX25zKHRpbWVyLT5iYXNlLT5nZXRfdGltZSgpLCBkZWxheSk7CiAKLQl0aW1lci0+ZXhwaXJlcyA9IHRpbWU7CisJaHJ0aW1lcl9zZXRfZXhwaXJlcyh0aW1lciwgdGltZSk7CiAKIAlpZiAocnEgPT0gdGhpc19ycSgpKSB7CiAJCWhydGltZXJfcmVzdGFydCh0aW1lcik7CkBAIC0xOTQxLDYgKzE5NDIsNyBAQAogCQkgKiBqdXN0IGdvIGJhY2sgYW5kIHJlcGVhdC4KIAkJICovCiAJCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJCXRyYWNlX3NjaGVkX3dhaXRfdGFzayhycSwgcCk7CiAJCXJ1bm5pbmcgPSB0YXNrX3J1bm5pbmcocnEsIHApOwogCQlvbl9ycSA9IHAtPnNlLm9uX3JxOwogCQluY3N3ID0gMDsKQEAgLTIzMDIsOSArMjMwNCw3IEBACiAJc3VjY2VzcyA9IDE7CiAKIG91dF9ydW5uaW5nOgotCXRyYWNlX21hcmsoa2VybmVsX3NjaGVkX3dha2V1cCwKLQkJInBpZCAlZCBzdGF0ZSAlbGQgIyMgcnEgJXAgdGFzayAlcCBycS0+Y3VyciAlcCIsCi0JCXAtPnBpZCwgcC0+c3RhdGUsIHJxLCBwLCBycS0+Y3Vycik7CisJdHJhY2Vfc2NoZWRfd2FrZXVwKHJxLCBwKTsKIAljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIHN5bmMpOwogCiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CkBAIC0yNDM3LDkgKzI0MzcsNyBAQAogCQlwLT5zY2hlZF9jbGFzcy0+dGFza19uZXcocnEsIHApOwogCQlpbmNfbnJfcnVubmluZyhycSk7CiAJfQotCXRyYWNlX21hcmsoa2VybmVsX3NjaGVkX3dha2V1cF9uZXcsCi0JCSJwaWQgJWQgc3RhdGUgJWxkICMjIHJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiLAotCQlwLT5waWQsIHAtPnN0YXRlLCBycSwgcCwgcnEtPmN1cnIpOworCXRyYWNlX3NjaGVkX3dha2V1cF9uZXcocnEsIHApOwogCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgMCk7CiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKQpAQCAtMjYxMiwxMSArMjYxMCw3IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICpvbGRtbTsKIAogCXByZXBhcmVfdGFza19zd2l0Y2gocnEsIHByZXYsIG5leHQpOwotCXRyYWNlX21hcmsoa2VybmVsX3NjaGVkX3NjaGVkdWxlLAotCQkicHJldl9waWQgJWQgbmV4dF9waWQgJWQgcHJldl9zdGF0ZSAlbGQgIgotCQkiIyMgcnEgJXAgcHJldiAlcCBuZXh0ICVwIiwKLQkJcHJldi0+cGlkLCBuZXh0LT5waWQsIHByZXYtPnN0YXRlLAotCQlycSwgcHJldiwgbmV4dCk7CisJdHJhY2Vfc2NoZWRfc3dpdGNoKHJxLCBwcmV2LCBuZXh0KTsKIAltbSA9IG5leHQtPm1tOwogCW9sZG1tID0gcHJldi0+YWN0aXZlX21tOwogCS8qCkBAIC0yODU2LDYgKzI4NTAsNyBAQAogCSAgICB8fCB1bmxpa2VseSghY3B1X2FjdGl2ZShkZXN0X2NwdSkpKQogCQlnb3RvIG91dDsKIAorCXRyYWNlX3NjaGVkX21pZ3JhdGVfdGFzayhycSwgcCwgZGVzdF9jcHUpOwogCS8qIGZvcmNlIHRoZSBwcm9jZXNzIG9udG8gdGhlIHNwZWNpZmllZCBDUFUgKi8KIAlpZiAobWlncmF0ZV90YXNrKHAsIGRlc3RfY3B1LCAmcmVxKSkgewogCQkvKiBOZWVkIHRvIHdhaXQgZm9yIG1pZ3JhdGlvbiB0aHJlYWQgKG1pZ2h0IGV4aXQ6IHRha2UgcmVmKS4gKi8KQEAgLTQwNTcsMjMgKzQwNTIsMjYgQEAKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChrc3RhdCk7CiAKIC8qCi0gKiBSZXR1cm4gcC0+c3VtX2V4ZWNfcnVudGltZSBwbHVzIGFueSBtb3JlIG5zIG9uIHRoZSBzY2hlZF9jbG9jawotICogdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBiYW5rZWQgaW4gY2FzZSB0aGUgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KKyAqIFJldHVybiBhbnkgbnMgb24gdGhlIHNjaGVkX2Nsb2NrIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYmFua2VkIGluCisgKiBAcCBpbiBjYXNlIHRoYXQgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KICAqLwotdW5zaWduZWQgbG9uZyBsb25nIHRhc2tfc2NoZWRfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit1bnNpZ25lZCBsb25nIGxvbmcgdGFza19kZWx0YV9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU2NCBucywgZGVsdGFfZXhlYzsKIAlzdHJ1Y3QgcnEgKnJxOworCXU2NCBucyA9IDA7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwotCW5zID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwogCWlmICh0YXNrX2N1cnJlbnQocnEsIHApKSB7CisJCXU2NCBkZWx0YV9leGVjOworCiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJCWRlbHRhX2V4ZWMgPSBycS0+Y2xvY2sgLSBwLT5zZS5leGVjX3N0YXJ0OwogCQlpZiAoKHM2NClkZWx0YV9leGVjID4gMCkKLQkJCW5zICs9IGRlbHRhX2V4ZWM7CisJCQlucyA9IGRlbHRhX2V4ZWM7CiAJfQorCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKIAlyZXR1cm4gbnM7CkBAIC00MDkwLDYgKzQwODgsNyBAQAogCWNwdXRpbWU2NF90IHRtcDsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCiAJLyogQWRkIHVzZXIgdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDExNCw2ICs0MTEzLDcgQEAKIAl0bXAgPSBjcHV0aW1lX3RvX2NwdXRpbWU2NChjcHV0aW1lKTsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCXAtPmd0aW1lID0gY3B1dGltZV9hZGQocC0+Z3RpbWUsIGNwdXRpbWUpOwogCiAJY3B1c3RhdC0+dXNlciA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+dXNlciwgdG1wKTsKQEAgLTQxNDksNiArNDE0OSw3IEBACiAJfQogCiAJcC0+c3RpbWUgPSBjcHV0aW1lX2FkZChwLT5zdGltZSwgY3B1dGltZSk7CisJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBjcHV0aW1lKTsKIAogCS8qIEFkZCBzeXN0ZW0gdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDE5MCw2ICs0MTkxLDcgQEAKIAogCWlmIChwID09IHJxLT5pZGxlKSB7CiAJCXAtPnN0aW1lID0gY3B1dGltZV9hZGQocC0+c3RpbWUsIHN0ZWFsKTsKKwkJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBzdGVhbCk7CiAJCWlmIChhdG9taWNfcmVhZCgmcnEtPm5yX2lvd2FpdCkgPiAwKQogCQkJY3B1c3RhdC0+aW93YWl0ID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5pb3dhaXQsIHRtcCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDhkZTQ4YTUuLjQyZDIxMWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VydGFzayA9IHRhc2tfb2YoY3Vycik7CiAKIAkJY3B1YWNjdF9jaGFyZ2UoY3VydGFzaywgZGVsdGFfZXhlYyk7CisJCWFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKGN1cnRhc2ssIGRlbHRhX2V4ZWMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBjOWFhNWJlLi5kOWJhOWQ1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtNTI2LDYgKzUyNiw4IEBACiAJc2NoZWRzdGF0X3NldChjdXJyLT5zZS5leGVjX21heCwgbWF4KGN1cnItPnNlLmV4ZWNfbWF4LCBkZWx0YV9leGVjKSk7CiAKIAljdXJyLT5zZS5zdW1fZXhlY19ydW50aW1lICs9IGRlbHRhX2V4ZWM7CisJYWNjb3VudF9ncm91cF9leGVjX3J1bnRpbWUoY3VyciwgZGVsdGFfZXhlYyk7CisKIAljdXJyLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOwogCWNwdWFjY3RfY2hhcmdlKGN1cnIsIGRlbHRhX2V4ZWMpOwogCkBAIC0xNDU4LDcgKzE0NjAsNyBAQAogCQlwLT5ydC50aW1lb3V0Kys7CiAJCW5leHQgPSBESVZfUk9VTkRfVVAobWluKHNvZnQsIGhhcmQpLCBVU0VDX1BFUl9TRUMvSFopOwogCQlpZiAocC0+cnQudGltZW91dCA+IG5leHQpCi0JCQlwLT5pdF9zY2hlZF9leHBpcmVzID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwkJCXAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCA2NzU3OTI1Li5lZTcxYmVjIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RhdHMuaAorKysgYi9rZXJuZWwvc2NoZWRfc3RhdHMuaApAQCAtOTAsMTMgKzkwLDIwIEBACiAJcmV0dXJuIHJlczsKIH0KIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3NjaGVkc3RhdF9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zY2hlZHN0YXRfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiAgICA9IHNjaGVkc3RhdF9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IHByb2Nfc2NoZWRzdGF0X2luaXQodm9pZCkKK3sKKwlwcm9jX2NyZWF0ZSgic2NoZWRzdGF0IiwgMCwgTlVMTCwgJnByb2Nfc2NoZWRzdGF0X29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHJvY19zY2hlZHN0YXRfaW5pdCk7CisKIC8qCiAgKiBFeHBlY3RzIHJ1bnF1ZXVlIGxvY2sgdG8gYmUgaGVsZCBmb3IgYXRvbWljaXR5IG9mIHVwZGF0ZQogICovCkBAIC0yNzAsMyArMjc3LDg5IEBACiAjZGVmaW5lIHNjaGVkX2luZm9fc3dpdGNoKHQsIG5leHQpCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgfHwgQ09ORklHX1RBU0tfREVMQVlfQUNDVCAqLwogCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgZnVuY3Rpb25zIHRoYXQgc3VwcG9ydCBzY2hlZHVsZXItaW50ZXJuYWwgdGltZSBhY2NvdW50aW5nLgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkgY2FsbGVkIGF0IHRoZSB0aW1lciB0aWNrLiAgTm9uZSBvZiB0aGlzIGRlcGVuZHMKKyAqIG9uIENPTkZJR19TQ0hFRFNUQVRTLgorICovCisKKy8qKgorICogYWNjb3VudF9ncm91cF91c2VyX3RpbWUgLSBNYWludGFpbiB1dGltZSBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKgorICogQHRzazoJUG9pbnRlciB0byB0YXNrIHN0cnVjdHVyZS4KKyAqIEBjcHV0aW1lOglUaW1lIHZhbHVlIGJ5IHdoaWNoIHRvIGluY3JlbWVudCB0aGUgdXRpbWUgZmllbGQgb2YgdGhlCisgKgkJdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0dXJlLgorICoKKyAqIElmIHRocmVhZCBncm91cCB0aW1lIGlzIGJlaW5nIG1haW50YWluZWQsIGdldCB0aGUgc3RydWN0dXJlIGZvciB0aGUKKyAqIHJ1bm5pbmcgQ1BVIGFuZCB1cGRhdGUgdGhlIHV0aW1lIGZpZWxkIHRoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9ncm91cF91c2VyX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSAgIGNwdXRpbWVfdCBjcHV0aW1lKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybjsKKwlpZiAoc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lczsKKworCQl0aW1lcyA9IHBlcl9jcHVfcHRyKHNpZy0+Y3B1dGltZS50b3RhbHMsIGdldF9jcHUoKSk7CisJCXRpbWVzLT51dGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT51dGltZSwgY3B1dGltZSk7CisJCXB1dF9jcHVfbm9fcmVzY2hlZCgpOworCX0KK30KKworLyoqCisgKiBhY2NvdW50X2dyb3VwX3N5c3RlbV90aW1lIC0gTWFpbnRhaW4gc3RpbWUgZm9yIGEgdGhyZWFkIGdyb3VwLgorICoKKyAqIEB0c2s6CVBvaW50ZXIgdG8gdGFzayBzdHJ1Y3R1cmUuCisgKiBAY3B1dGltZToJVGltZSB2YWx1ZSBieSB3aGljaCB0byBpbmNyZW1lbnQgdGhlIHN0aW1lIGZpZWxkIG9mIHRoZQorICoJCXRocmVhZF9ncm91cF9jcHV0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBJZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBtYWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVyZSBmb3IgdGhlCisgKiBydW5uaW5nIENQVSBhbmQgdXBkYXRlIHRoZSBzdGltZSBmaWVsZCB0aGVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSAgICAgY3B1dGltZV90IGNwdXRpbWUpCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKworCXNpZyA9IHRzay0+c2lnbmFsOworCWlmICh1bmxpa2VseSghc2lnKSkKKwkJcmV0dXJuOworCWlmIChzaWctPmNwdXRpbWUudG90YWxzKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgKnRpbWVzOworCisJCXRpbWVzID0gcGVyX2NwdV9wdHIoc2lnLT5jcHV0aW1lLnRvdGFscywgZ2V0X2NwdSgpKTsKKwkJdGltZXMtPnN0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnN0aW1lLCBjcHV0aW1lKTsKKwkJcHV0X2NwdV9ub19yZXNjaGVkKCk7CisJfQorfQorCisvKioKKyAqIGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lIC0gTWFpbnRhaW4gZXhlYyBydW50aW1lIGZvciBhIHRocmVhZCBncm91cC4KKyAqCisgKiBAdHNrOglQb2ludGVyIHRvIHRhc2sgc3RydWN0dXJlLgorICogQG5zOgkJVGltZSB2YWx1ZSBieSB3aGljaCB0byBpbmNyZW1lbnQgdGhlIHN1bV9leGVjX3J1bnRpbWUgZmllbGQKKyAqCQlvZiB0aGUgdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0dXJlLgorICoKKyAqIElmIHRocmVhZCBncm91cCB0aW1lIGlzIGJlaW5nIG1haW50YWluZWQsIGdldCB0aGUgc3RydWN0dXJlIGZvciB0aGUKKyAqIHJ1bm5pbmcgQ1BVIGFuZCB1cGRhdGUgdGhlIHN1bV9leGVjX3J1bnRpbWUgZmllbGQgdGhlcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5zKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybjsKKwlpZiAoc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lczsKKworCQl0aW1lcyA9IHBlcl9jcHVfcHRyKHNpZy0+Y3B1dGltZS50b3RhbHMsIGdldF9jcHUoKSk7CisJCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lICs9IG5zOworCQlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZTY2MWIwMS4uMTA1MjE3ZCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgorI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODAzLDYgKzgwNCw4IEBACiAJc3RydWN0IHNpZ3BlbmRpbmcgKnBlbmRpbmc7CiAJc3RydWN0IHNpZ3F1ZXVlICpxOwogCisJdHJhY2Vfc2NoZWRfc2lnbmFsX3NlbmQoc2lnLCB0KTsKKwogCWFzc2VydF9zcGluX2xvY2tlZCgmdC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKCFwcmVwYXJlX3NpZ25hbChzaWcsIHQpKQogCQlyZXR1cm4gMDsKQEAgLTEzMzgsNiArMTM0MSw3IEBACiAJc3RydWN0IHNpZ2luZm8gaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqcHNpZzsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAJaW50IHJldCA9IHNpZzsKIAogCUJVR19PTihzaWcgPT0gLTEpOwpAQCAtMTM2OCwxMCArMTM3Miw5IEBACiAKIAlpbmZvLnNpX3VpZCA9IHRzay0+dWlkOwogCi0JaW5mby5zaV91dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lX2FkZCh0c2stPnV0aW1lLAotCQkJCQkJICAgICAgIHRzay0+c2lnbmFsLT51dGltZSkpOwotCWluZm8uc2lfc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZV9hZGQodHNrLT5zdGltZSwKLQkJCQkJCSAgICAgICB0c2stPnNpZ25hbC0+c3RpbWUpKTsKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZjcHV0aW1lKTsKKwlpbmZvLnNpX3V0aW1lID0gY3B1dGltZV90b19qaWZmaWVzKGNwdXRpbWUudXRpbWUpOworCWluZm8uc2lfc3RpbWUgPSBjcHV0aW1lX3RvX2ppZmZpZXMoY3B1dGltZS5zdGltZSk7CiAKIAlpbmZvLnNpX3N0YXR1cyA9IHRzay0+ZXhpdF9jb2RlICYgMHg3ZjsKIAlpZiAodHNrLT5leGl0X2NvZGUgJiAweDgwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggMzdkNjdhYS4uNzExMGRhZSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC02LDYgKzYsOCBAQAogICoJRGlzdHJpYnV0ZSB1bmRlciBHUEx2Mi4KICAqCiAgKglSZXdyaXR0ZW4uIE9sZCBvbmUgd2FzIGdvb2QgaW4gMi4yLCBidXQgaW4gMi4zIGl0IHdhcyBpbW1vcmFsLiAtLUFOSyAoOTkwOTAzKQorICoKKyAqCVJlbW90ZSBzb2Z0aXJxIGluZnJhc3RydWN0dXJlIGlzIGJ5IEplbnMgQXhib2UuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjY1LDE2ICsyNjcsMTIgQEAKICAqLwogdm9pZCBpcnFfZW50ZXIodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTk9fSFoKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCiAJaWYgKGlkbGVfY3B1KGNwdSkgJiYgIWluX2ludGVycnVwdCgpKQotCQl0aWNrX25vaHpfc3RvcF9pZGxlKGNwdSk7Ci0jZW5kaWYKKwkJdGlja19jaGVja19pZGxlKGNwdSk7CisKIAlfX2lycV9lbnRlcigpOwotI2lmZGVmIENPTkZJR19OT19IWgotCWlmIChpZGxlX2NwdShjcHUpKQotCQl0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXMoKTsKLSNlbmRpZgogfQogCiAjaWZkZWYgX19BUkNIX0lSUV9FWElUX0lSUVNfRElTQUJMRUQKQEAgLTQ3NCwxNyArNDcyLDE0NCBAQAogCiBFWFBPUlRfU1lNQk9MKHRhc2tsZXRfa2lsbCk7CiAKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQgW05SX1NPRlRJUlFTXSwgc29mdGlycV93b3JrX2xpc3QpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHNvZnRpcnFfd29ya19saXN0KTsKKworc3RhdGljIHZvaWQgX19sb2NhbF90cmlnZ2VyKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IHNvZnRpcnEpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZfX2dldF9jcHVfdmFyKHNvZnRpcnFfd29ya19saXN0W3NvZnRpcnFdKTsKKworCWxpc3RfYWRkX3RhaWwoJmNwLT5saXN0LCBoZWFkKTsKKworCS8qIFRyaWdnZXIgdGhlIHNvZnRpcnEgb25seSBpZiB0aGUgbGlzdCB3YXMgcHJldmlvdXNseSBlbXB0eS4gICovCisJaWYgKGhlYWQtPm5leHQgPT0gJmNwLT5saXN0KQorCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihzb2Z0aXJxKTsKK30KKworI2lmZGVmIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUworc3RhdGljIHZvaWQgcmVtb3RlX3NvZnRpcnFfcmVjZWl2ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc29mdGlycTsKKworCXNvZnRpcnEgPSBjcC0+cHJpdjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2xvY2FsX3RyaWdnZXIoY3AsIHNvZnRpcnEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBfX3RyeV9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsIGludCBzb2Z0aXJxKQoreworCWlmIChjcHVfb25saW5lKGNwdSkpIHsKKwkJY3AtPmZ1bmMgPSByZW1vdGVfc29mdGlycV9yZWNlaXZlOworCQljcC0+aW5mbyA9IGNwOworCQljcC0+ZmxhZ3MgPSAwOworCQljcC0+cHJpdiA9IHNvZnRpcnE7CisKKwkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBjcCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKyNlbHNlIC8qIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyAqLworc3RhdGljIGludCBfX3RyeV9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsIGludCBzb2Z0aXJxKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKKy8qKgorICogX19zZW5kX3JlbW90ZV9zb2Z0aXJxIC0gdHJ5IHRvIHNjaGVkdWxlIHNvZnRpcnEgd29yayBvbiBhIHJlbW90ZSBjcHUKKyAqIEBjcDogcHJpdmF0ZSBTTVAgY2FsbCBmdW5jdGlvbiBkYXRhIGFyZWEKKyAqIEBjcHU6IHRoZSByZW1vdGUgY3B1CisgKiBAdGhpc19jcHU6IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNwdQorICogQHNvZnRpcnE6IHRoZSBzb2Z0aXJxIGZvciB0aGUgd29yaworICoKKyAqIEF0dGVtcHQgdG8gc2NoZWR1bGUgc29mdGlycSB3b3JrIG9uIGEgcmVtb3RlIGNwdS4gIElmIHRoaXMgY2Fubm90IGJlCisgKiBkb25lLCB0aGUgd29yayBpcyBpbnN0ZWFkIHF1ZXVlZCB1cCBvbiB0aGUgbG9jYWwgY3B1LgorICoKKyAqIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZC4KKyAqLwordm9pZCBfX3NlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgdGhpc19jcHUsIGludCBzb2Z0aXJxKQoreworCWlmIChjcHUgPT0gdGhpc19jcHUgfHwgX190cnlfcmVtb3RlX3NvZnRpcnEoY3AsIGNwdSwgc29mdGlycSkpCisJCV9fbG9jYWxfdHJpZ2dlcihjcCwgc29mdGlycSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fc2VuZF9yZW1vdGVfc29mdGlycSk7CisKKy8qKgorICogc2VuZF9yZW1vdGVfc29mdGlycSAtIHRyeSB0byBzY2hlZHVsZSBzb2Z0aXJxIHdvcmsgb24gYSByZW1vdGUgY3B1CisgKiBAY3A6IHByaXZhdGUgU01QIGNhbGwgZnVuY3Rpb24gZGF0YSBhcmVhCisgKiBAY3B1OiB0aGUgcmVtb3RlIGNwdQorICogQHNvZnRpcnE6IHRoZSBzb2Z0aXJxIGZvciB0aGUgd29yaworICoKKyAqIExpa2UgX19zZW5kX3JlbW90ZV9zb2Z0aXJxIGV4Y2VwdCB0aGF0IGRpc2FibGluZyBpbnRlcnJ1cHRzIGFuZAorICogY29tcHV0aW5nIHRoZSBjdXJyZW50IGNwdSBpcyBkb25lIGZvciB0aGUgY2FsbGVyLgorICovCit2b2lkIHNlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0aGlzX2NwdTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlfX3NlbmRfcmVtb3RlX3NvZnRpcnEoY3AsIGNwdSwgdGhpc19jcHUsIHNvZnRpcnEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woc2VuZF9yZW1vdGVfc29mdGlycSk7CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IHJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJLyoKKwkgKiBJZiBhIENQVSBnb2VzIGF3YXksIHNwbGljZSBpdHMgZW50cmllcyB0byB0aGUgY3VycmVudCBDUFUKKwkgKiBhbmQgdHJpZ2dlciBhIHJ1biBvZiB0aGUgc29mdGlycQorCSAqLworCWlmIChhY3Rpb24gPT0gQ1BVX0RFQUQgfHwgYWN0aW9uID09IENQVV9ERUFEX0ZST1pFTikgeworCQlpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpIGhjcHU7CisJCWludCBpOworCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWZvciAoaSA9IDA7IGkgPCBOUl9TT0ZUSVJRUzsgaSsrKSB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnBlcl9jcHUoc29mdGlycV93b3JrX2xpc3RbaV0sIGNwdSk7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpsb2NhbF9oZWFkOworCisJCQlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJCQljb250aW51ZTsKKworCQkJbG9jYWxfaGVhZCA9ICZfX2dldF9jcHVfdmFyKHNvZnRpcnFfd29ya19saXN0W2ldKTsKKwkJCWxpc3Rfc3BsaWNlX2luaXQoaGVhZCwgbG9jYWxfaGVhZCk7CisJCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihpKTsKKwkJfQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZnksCit9OworCiB2b2lkIF9faW5pdCBzb2Z0aXJxX2luaXQodm9pZCkKIHsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlpbnQgaTsKKwogCQlwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLnRhaWwgPQogCQkJJnBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkuaGVhZDsKIAkJcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS50YWlsID0KIAkJCSZwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLmhlYWQ7CisJCWZvciAoaSA9IDA7IGkgPCBOUl9TT0ZUSVJRUzsgaSsrKQorCQkJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUoc29mdGlycV93b3JrX2xpc3RbaV0sIGNwdSkpOwogCX0KIAorCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcmVtb3RlX3NvZnRpcnFfY3B1X25vdGlmaWVyKTsKKwogCW9wZW5fc29mdGlycShUQVNLTEVUX1NPRlRJUlEsIHRhc2tsZXRfYWN0aW9uKTsKIAlvcGVuX3NvZnRpcnEoSElfU09GVElSUSwgdGFza2xldF9oaV9hY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3N0b3BfbWFjaGluZS5jIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCmluZGV4IGFmM2M3Y2UuLjhhZmY3OWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYworKysgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKQEAgLTM3LDkgKzM3LDEzIEBACiAvKiBMaWtlIG51bV9vbmxpbmVfY3B1cygpLCBidXQgaG90cGx1ZyBjcHUgdXNlcyB1cywgc28gd2UgbmVlZCB0aGlzLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBudW1fdGhyZWFkczsKIHN0YXRpYyBhdG9taWNfdCB0aHJlYWRfYWNrOwotc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIGZpbmlzaGVkOwogc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKIAorc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzdG9wX21hY2hpbmVfd3E7CitzdGF0aWMgc3RydWN0IHN0b3BfbWFjaGluZV9kYXRhIGFjdGl2ZSwgaWRsZTsKK3N0YXRpYyBjb25zdCBjcHVtYXNrX3QgKmFjdGl2ZV9jcHVzOworc3RhdGljIHZvaWQgKnN0b3BfbWFjaGluZV93b3JrOworCiBzdGF0aWMgdm9pZCBzZXRfc3RhdGUoZW51bSBzdG9wbWFjaGluZV9zdGF0ZSBuZXdzdGF0ZSkKIHsKIAkvKiBSZXNldCBhY2sgY291bnRlci4gKi8KQEAgLTUxLDIxICs1NSwyNiBAQAogLyogTGFzdCBvbmUgdG8gYWNrIGEgc3RhdGUgbW92ZXMgdG8gdGhlIG5leHQgc3RhdGUuICovCiBzdGF0aWMgdm9pZCBhY2tfc3RhdGUodm9pZCkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdGhyZWFkX2FjaykpIHsKLQkJLyogSWYgd2UncmUgdGhlIGxhc3Qgb25lIHRvIGFjayB0aGUgRVhJVCwgd2UncmUgZmluaXNoZWQuICovCi0JCWlmIChzdGF0ZSA9PSBTVE9QTUFDSElORV9FWElUKQotCQkJY29tcGxldGUoJmZpbmlzaGVkKTsKLQkJZWxzZQotCQkJc2V0X3N0YXRlKHN0YXRlICsgMSk7Ci0JfQorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0aHJlYWRfYWNrKSkKKwkJc2V0X3N0YXRlKHN0YXRlICsgMSk7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIGFjdHVhbCB0aHJlYWQgd2hpY2ggc3RvcHMgdGhlIENQVS4gIEl0IGV4aXRzIGJ5IGl0c2VsZiByYXRoZXIKLSAqIHRoYW4gd2FpdGluZyBmb3Iga3RocmVhZF9zdG9wKCksIGJlY2F1c2UgaXQncyBlYXNpZXIgZm9yIGhvdHBsdWcgQ1BVLiAqLwotc3RhdGljIGludCBzdG9wX2NwdShzdHJ1Y3Qgc3RvcF9tYWNoaW5lX2RhdGEgKnNtZGF0YSkKKy8qIFRoaXMgaXMgdGhlIGFjdHVhbCBmdW5jdGlvbiB3aGljaCBzdG9wcyB0aGUgQ1BVLiBJdCBydW5zCisgKiBpbiB0aGUgY29udGV4dCBvZiBhIGRlZGljYXRlZCBzdG9wbWFjaGluZSB3b3JrcXVldWUuICovCitzdGF0aWMgdm9pZCBzdG9wX2NwdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKIHsKIAllbnVtIHN0b3BtYWNoaW5lX3N0YXRlIGN1cnN0YXRlID0gU1RPUE1BQ0hJTkVfTk9ORTsKKwlzdHJ1Y3Qgc3RvcF9tYWNoaW5lX2RhdGEgKnNtZGF0YSA9ICZpZGxlOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGVycjsKIAorCWlmICghYWN0aXZlX2NwdXMpIHsKKwkJaWYgKGNwdSA9PSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKQorCQkJc21kYXRhID0gJmFjdGl2ZTsKKwl9IGVsc2UgeworCQlpZiAoY3B1X2lzc2V0KGNwdSwgKmFjdGl2ZV9jcHVzKSkKKwkJCXNtZGF0YSA9ICZhY3RpdmU7CisJfQogCS8qIFNpbXBsZSBzdGF0ZSBtYWNoaW5lICovCiAJZG8gewogCQkvKiBDaGlsbCBvdXQgYW5kIGVuc3VyZSB3ZSByZS1yZWFkIHN0b3BtYWNoaW5lX3N0YXRlLiAqLwpAQCAtNzgsOSArODcsMTEgQEAKIAkJCQloYXJkX2lycV9kaXNhYmxlKCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNUT1BNQUNISU5FX1JVTjoKLQkJCQkvKiB8PSBhbGxvd3MgZXJyb3IgZGV0ZWN0aW9uIGlmIGZ1bmN0aW9ucyBvbgotCQkJCSAqIG11bHRpcGxlIENQVXMuICovCi0JCQkJc21kYXRhLT5mbnJldCB8PSBzbWRhdGEtPmZuKHNtZGF0YS0+ZGF0YSk7CisJCQkJLyogT24gbXVsdGlwbGUgQ1BVcyBvbmx5IGEgc2luZ2xlIGVycm9yIGNvZGUKKwkJCQkgKiBpcyBuZWVkZWQgdG8gdGVsbCB0aGF0IHNvbWV0aGluZyBmYWlsZWQuICovCisJCQkJZXJyID0gc21kYXRhLT5mbihzbWRhdGEtPmRhdGEpOworCQkJCWlmIChlcnIpCisJCQkJCXNtZGF0YS0+Zm5yZXQgPSBlcnI7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwpAQCAtOTAsNyArMTAxLDYgQEAKIAl9IHdoaWxlIChjdXJzdGF0ZSAhPSBTVE9QTUFDSElORV9FWElUKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKLQlkb19leGl0KDApOwogfQogCiAvKiBDYWxsYmFjayBmb3IgQ1BVcyB3aGljaCBhcmVuJ3Qgc3VwcG9zZWQgdG8gZG8gYW55dGhpbmcuICovCkBAIC0xMDEsNzggKzExMSwzNCBAQAogCiBpbnQgX19zdG9wX21hY2hpbmUoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmRhdGEsIGNvbnN0IGNwdW1hc2tfdCAqY3B1cykKIHsKLQlpbnQgaSwgZXJyOwotCXN0cnVjdCBzdG9wX21hY2hpbmVfZGF0YSBhY3RpdmUsIGlkbGU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICoqdGhyZWFkczsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnNtX3dvcms7CisJaW50IGk7CiAKKwkvKiBTZXQgdXAgaW5pdGlhbCBzdGF0ZS4gKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwludW1fdGhyZWFkcyA9IG51bV9vbmxpbmVfY3B1cygpOworCWFjdGl2ZV9jcHVzID0gY3B1czsKIAlhY3RpdmUuZm4gPSBmbjsKIAlhY3RpdmUuZGF0YSA9IGRhdGE7CiAJYWN0aXZlLmZucmV0ID0gMDsKIAlpZGxlLmZuID0gY2hpbGw7CiAJaWRsZS5kYXRhID0gTlVMTDsKIAotCS8qIFRoaXMgY291bGQgYmUgdG9vIGJpZyBmb3Igc3RhY2sgb24gbGFyZ2UgbWFjaGluZXMuICovCi0JdGhyZWFkcyA9IGtjYWxsb2MoTlJfQ1BVUywgc2l6ZW9mKHRocmVhZHNbMF0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRocmVhZHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogU2V0IHVwIGluaXRpYWwgc3RhdGUuICovCi0JbXV0ZXhfbG9jaygmbG9jayk7Ci0JaW5pdF9jb21wbGV0aW9uKCZmaW5pc2hlZCk7Ci0JbnVtX3RocmVhZHMgPSBudW1fb25saW5lX2NwdXMoKTsKIAlzZXRfc3RhdGUoU1RPUE1BQ0hJTkVfUFJFUEFSRSk7CiAKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJc3RydWN0IHN0b3BfbWFjaGluZV9kYXRhICpzbWRhdGEgPSAmaWRsZTsKLQkJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSBNQVhfUlRfUFJJTy0xIH07Ci0KLQkJaWYgKCFjcHVzKSB7Ci0JCQlpZiAoaSA9PSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKQotCQkJCXNtZGF0YSA9ICZhY3RpdmU7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY3B1X2lzc2V0KGksICpjcHVzKSkKLQkJCQlzbWRhdGEgPSAmYWN0aXZlOwotCQl9Ci0KLQkJdGhyZWFkc1tpXSA9IGt0aHJlYWRfY3JlYXRlKCh2b2lkICopc3RvcF9jcHUsIHNtZGF0YSwgImtzdG9wJXUiLAotCQkJCQkgICAgaSk7Ci0JCWlmIChJU19FUlIodGhyZWFkc1tpXSkpIHsKLQkJCWVyciA9IFBUUl9FUlIodGhyZWFkc1tpXSk7Ci0JCQl0aHJlYWRzW2ldID0gTlVMTDsKLQkJCWdvdG8ga2lsbF90aHJlYWRzOwotCQl9Ci0KLQkJLyogUGxhY2UgaXQgb250byBjb3JyZWN0IGNwdS4gKi8KLQkJa3RocmVhZF9iaW5kKHRocmVhZHNbaV0sIGkpOwotCi0JCS8qIE1ha2UgaXQgaGlnaGVzdCBwcmlvLiAqLwotCQlpZiAoc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodGhyZWFkc1tpXSwgU0NIRURfRklGTywgJnBhcmFtKSkKLQkJCUJVRygpOwotCX0KLQotCS8qIFdlJ3ZlIGNyZWF0ZWQgYWxsIHRoZSB0aHJlYWRzLiAgV2FrZSB0aGVtIGFsbDogaG9sZCB0aGlzIENQVSBzbyBvbmUKKwkvKiBTY2hlZHVsZSB0aGUgc3RvcF9jcHUgd29yayBvbiBhbGwgY3B1czogaG9sZCB0aGlzIENQVSBzbyBvbmUKIAkgKiBkb2Vzbid0IGhpdCB0aGlzIENQVSB1bnRpbCB3ZSdyZSByZWFkeS4gKi8KIAlnZXRfY3B1KCk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQl3YWtlX3VwX3Byb2Nlc3ModGhyZWFkc1tpXSk7Ci0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJc21fd29yayA9IHBlcmNwdV9wdHIoc3RvcF9tYWNoaW5lX3dvcmssIGkpOworCQlJTklUX1dPUksoc21fd29yaywgc3RvcF9jcHUpOworCQlxdWV1ZV93b3JrX29uKGksIHN0b3BfbWFjaGluZV93cSwgc21fd29yayk7CisJfQogCS8qIFRoaXMgd2lsbCByZWxlYXNlIHRoZSB0aHJlYWQgb24gb3VyIENQVS4gKi8KIAlwdXRfY3B1KCk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmZmluaXNoZWQpOworCWZsdXNoX3dvcmtxdWV1ZShzdG9wX21hY2hpbmVfd3EpOwogCW11dGV4X3VubG9jaygmbG9jayk7Ci0KLQlrZnJlZSh0aHJlYWRzKTsKLQogCXJldHVybiBhY3RpdmUuZm5yZXQ7Ci0KLWtpbGxfdGhyZWFkczoKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCi0JCWlmICh0aHJlYWRzW2ldKQotCQkJa3RocmVhZF9zdG9wKHRocmVhZHNbaV0pOwotCW11dGV4X3VubG9jaygmbG9jayk7Ci0KLQlrZnJlZSh0aHJlYWRzKTsKLQlyZXR1cm4gZXJyOwogfQogCiBpbnQgc3RvcF9tYWNoaW5lKGludCAoKmZuKSh2b2lkICopLCB2b2lkICpkYXRhLCBjb25zdCBjcHVtYXNrX3QgKmNwdXMpCkBAIC0xODcsMyArMTUzLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN0b3BfbWFjaGluZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHN0b3BfbWFjaGluZV9pbml0KHZvaWQpCit7CisJc3RvcF9tYWNoaW5lX3dxID0gY3JlYXRlX3J0X3dvcmtxdWV1ZSgia3N0b3AiKTsKKwlzdG9wX21hY2hpbmVfd29yayA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgd29ya19zdHJ1Y3QpOworCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwoc3RvcF9tYWNoaW5lX2luaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDBiYzhmYTMuLjMxZGViYTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTg1MywzOCArODUzLDI4IEBACiAJcmV0dXJuIG9sZF9mc2dpZDsKIH0KIAordm9pZCBkb19zeXNfdGltZXMoc3RydWN0IHRtcyAqdG1zKQoreworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwljcHV0aW1lX3QgY3V0aW1lLCBjc3RpbWU7CisKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZShjdXJyZW50LCAmY3B1dGltZSk7CisJY3V0aW1lID0gY3VycmVudC0+c2lnbmFsLT5jdXRpbWU7CisJY3N0aW1lID0gY3VycmVudC0+c2lnbmFsLT5jc3RpbWU7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl0bXMtPnRtc191dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lLnV0aW1lKTsKKwl0bXMtPnRtc19zdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lLnN0aW1lKTsKKwl0bXMtPnRtc19jdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3V0aW1lKTsKKwl0bXMtPnRtc19jc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3N0aW1lKTsKK30KKwogYXNtbGlua2FnZSBsb25nIHN5c190aW1lcyhzdHJ1Y3QgdG1zIF9fdXNlciAqIHRidWYpCiB7Ci0JLyoKLQkgKglJbiB0aGUgU01QIHdvcmxkIHdlIG1pZ2h0IGp1c3QgYmUgdW5sdWNreSBhbmQgaGF2ZSBvbmUgb2YKLQkgKgl0aGUgdGltZXMgaW5jcmVtZW50IGFzIHdlIHVzZSBpdC4gU2luY2UgdGhlIHZhbHVlIGlzIGFuCi0JICoJYXRvbWljYWxseSBzYWZlIHR5cGUgdGhpcyBpcyBqdXN0IGZpbmUuIENvbmNlcHR1YWxseSBpdHMKLQkgKglhcyBpZiB0aGUgc3lzY2FsbCB0b29rIGFuIGluc3RhbnQgbG9uZ2VyIHRvIG9jY3VyLgotCSAqLwogCWlmICh0YnVmKSB7CiAJCXN0cnVjdCB0bXMgdG1wOwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQkJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAKLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJdXRpbWUgPSB0c2stPnNpZ25hbC0+dXRpbWU7Ci0JCXN0aW1lID0gdHNrLT5zaWduYWwtPnN0aW1lOwotCQl0ID0gdHNrOwotCQlkbyB7Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0LT5zdGltZSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQotCQljdXRpbWUgPSB0c2stPnNpZ25hbC0+Y3V0aW1lOwotCQljc3RpbWUgPSB0c2stPnNpZ25hbC0+Y3N0aW1lOwotCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQkJdG1wLnRtc191dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdCh1dGltZSk7Ci0JCXRtcC50bXNfc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3Qoc3RpbWUpOwotCQl0bXAudG1zX2N1dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjdXRpbWUpOwotCQl0bXAudG1zX2NzdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjc3RpbWUpOworCQlkb19zeXNfdGltZXMoJnRtcCk7CiAJCWlmIChjb3B5X3RvX3VzZXIodGJ1ZiwgJnRtcCwgc2l6ZW9mKHN0cnVjdCB0bXMpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTE0NDksNyArMTQzOSw2IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgX191c2VyICpybGltKQogewogCXN0cnVjdCBybGltaXQgbmV3X3JsaW0sICpvbGRfcmxpbTsKLQl1bnNpZ25lZCBsb25nIGl0X3Byb2Zfc2VjczsKIAlpbnQgcmV0dmFsOwogCiAJaWYgKHJlc291cmNlID49IFJMSU1fTkxJTUlUUykKQEAgLTE1MDMsMTggKzE0OTIsNyBAQAogCWlmIChuZXdfcmxpbS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQogCQlnb3RvIG91dDsKIAotCWl0X3Byb2Zfc2VjcyA9IGNwdXRpbWVfdG9fc2VjcyhjdXJyZW50LT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcyk7Ci0JaWYgKGl0X3Byb2Zfc2VjcyA9PSAwIHx8IG5ld19ybGltLnJsaW1fY3VyIDw9IGl0X3Byb2Zfc2VjcykgewotCQl1bnNpZ25lZCBsb25nIHJsaW1fY3VyID0gbmV3X3JsaW0ucmxpbV9jdXI7Ci0JCWNwdXRpbWVfdCBjcHV0aW1lOwotCi0JCWNwdXRpbWUgPSBzZWNzX3RvX2NwdXRpbWUocmxpbV9jdXIpOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKGN1cnJlbnQsIENQVUNMT0NLX1BST0YsICZjcHV0aW1lLCBOVUxMKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCX0KKwl1cGRhdGVfcmxpbWl0X2NwdShuZXdfcmxpbS5ybGltX2N1cik7CiBvdXQ6CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTUyLDExICsxNTMwLDggQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHJ1c2FnZSAqciwKLQkJCQkgICAgIGNwdXRpbWVfdCAqdXRpbWVwLCBjcHV0aW1lX3QgKnN0aW1lcCkKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBydXNhZ2UgKnIpCiB7Ci0JKnV0aW1lcCA9IGNwdXRpbWVfYWRkKCp1dGltZXAsIHQtPnV0aW1lKTsKLQkqc3RpbWVwID0gY3B1dGltZV9hZGQoKnN0aW1lcCwgdC0+c3RpbWUpOwogCXItPnJ1X252Y3N3ICs9IHQtPm52Y3N3OwogCXItPnJ1X25pdmNzdyArPSB0LT5uaXZjc3c7CiAJci0+cnVfbWluZmx0ICs9IHQtPm1pbl9mbHQ7CkBAIC0xNTcwLDEyICsxNTQ1LDEzIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY3B1dGltZV90IHV0aW1lLCBzdGltZTsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAKIAltZW1zZXQoKGNoYXIgKikgciwgMCwgc2l6ZW9mICpyKTsKIAl1dGltZSA9IHN0aW1lID0gY3B1dGltZV96ZXJvOwogCiAJaWYgKHdobyA9PSBSVVNBR0VfVEhSRUFEKSB7Ci0JCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShwLCByLCAmdXRpbWUsICZzdGltZSk7CisJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShwLCByKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNTk4LDggKzE1NzQsOSBAQAogCQkJCWJyZWFrOwogCiAJCWNhc2UgUlVTQUdFX1NFTEY6Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBwLT5zaWduYWwtPnV0aW1lKTsKLQkJCXN0aW1lID0gY3B1dGltZV9hZGQoc3RpbWUsIHAtPnNpZ25hbC0+c3RpbWUpOworCQkJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJmNwdXRpbWUpOworCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgY3B1dGltZS51dGltZSk7CisJCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCBjcHV0aW1lLnN0aW1lKTsKIAkJCXItPnJ1X252Y3N3ICs9IHAtPnNpZ25hbC0+bnZjc3c7CiAJCQlyLT5ydV9uaXZjc3cgKz0gcC0+c2lnbmFsLT5uaXZjc3c7CiAJCQlyLT5ydV9taW5mbHQgKz0gcC0+c2lnbmFsLT5taW5fZmx0OwpAQCAtMTYwOCw3ICsxNTg1LDcgQEAKIAkJCXItPnJ1X291YmxvY2sgKz0gcC0+c2lnbmFsLT5vdWJsb2NrOwogCQkJdCA9IHA7CiAJCQlkbyB7Ci0JCQkJYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHQsIHIsICZ1dGltZSwgJnN0aW1lKTsKKwkJCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UodCwgcik7CiAJCQkJdCA9IG5leHRfdGhyZWFkKHQpOwogCQkJfSB3aGlsZSAodCAhPSBwKTsKIAkJCWJyZWFrOwpAQCAtMTczOSw2ICsxNzE2LDE2IEBACiAJCWNhc2UgUFJfU0VUX1RTQzoKIAkJCWVycm9yID0gU0VUX1RTQ19DVEwoYXJnMik7CiAJCQlicmVhazsKKwkJY2FzZSBQUl9HRVRfVElNRVJTTEFDSzoKKwkJCWVycm9yID0gY3VycmVudC0+dGltZXJfc2xhY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBQUl9TRVRfVElNRVJTTEFDSzoKKwkJCWlmIChhcmcyIDw9IDApCisJCQkJY3VycmVudC0+dGltZXJfc2xhY2tfbnMgPQorCQkJCQljdXJyZW50LT5kZWZhdWx0X3RpbWVyX3NsYWNrX25zOworCQkJZWxzZQorCQkJCWN1cnJlbnQtPnRpbWVyX3NsYWNrX25zID0gYXJnMjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggM2Q4MDRmNC4uYTEzYmQ0ZCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtODQzLDYgKzg0MywxNiBAQAogCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzIiwKKwkJLmRhdGEJCT0gJnNjYW5fdW5ldmljdGFibGVfcGFnZXMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHNjYW5fdW5ldmljdGFibGVfcGFnZXMpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnNjYW5fdW5ldmljdGFibGVfaGFuZGxlciwKKwl9LAorI2VuZGlmCiAvKgogICogTk9URTogZG8gbm90IGFkZCBuZXcgZW50cmllcyB0byB0aGlzIHRhYmxlIHVubGVzcyB5b3UgaGF2ZSByZWFkCiAgKiBEb2N1bWVudGF0aW9uL3N5c2N0bC9jdGxfdW5udW1iZXJlZC50eHQKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IDZhMDg2NjAuLmQ2M2E0MzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtNjY5LDMgKzY2OSwyMSBAQAogI2VuZGlmCiAKIEVYUE9SVF9TWU1CT0woamlmZmllcyk7CisKKy8qCisgKiBBZGQgdHdvIHRpbWVzcGVjIHZhbHVlcyBhbmQgZG8gYSBzYWZldHkgY2hlY2sgZm9yIG92ZXJmbG93LgorICogSXQncyBhc3N1bWVkIHRoYXQgYm90aCB2YWx1ZXMgYXJlIHZhbGlkICg+PSAwKQorICovCitzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfYWRkX3NhZmUoY29uc3Qgc3RydWN0IHRpbWVzcGVjIGxocywKKwkJCQkgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyByaHMpCit7CisJc3RydWN0IHRpbWVzcGVjIHJlczsKKworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZyZXMsIGxocy50dl9zZWMgKyByaHMudHZfc2VjLAorCQkJCWxocy50dl9uc2VjICsgcmhzLnR2X25zZWMpOworCisJaWYgKHJlcy50dl9zZWMgPCBsaHMudHZfc2VjIHx8IHJlcy50dl9zZWMgPCByaHMudHZfc2VjKQorCQlyZXMudHZfc2VjID0gVElNRV9UX01BWDsKKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCAwOTNkNGFjLi45ZWQyZWVjIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTMyNSw2ICszMjUsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAorCS8qIHNhdmUgbXVsdF9vcmlnIG9uIHJlZ2lzdHJhdGlvbiAqLworCWMtPm11bHRfb3JpZyA9IGMtPm11bHQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzb3VyY2VfbG9jaywgZmxhZ3MpOwogCXJldCA9IGNsb2Nrc291cmNlX2VucXVldWUoYyk7CiAJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKaW5kZXggNGMyNTZmZC4uMWNhOTk1NSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jCisrKyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwpAQCAtNjEsNiArNjEsNyBAQAogCS5yZWFkCQk9IGppZmZpZXNfcmVhZCwKIAkubWFzawkJPSAweGZmZmZmZmZmLCAvKjMyYml0cyovCiAJLm11bHQJCT0gTlNFQ19QRVJfSklGRlkgPDwgSklGRklFU19TSElGVCwgLyogZGV0YWlscyBhYm92ZSAqLworCS5tdWx0X29yaWcJPSBOU0VDX1BFUl9KSUZGWSA8PCBKSUZGSUVTX1NISUZULAogCS5zaGlmdAkJPSBKSUZGSUVTX1NISUZULAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCAxYWQ0NmYzLi44ZmYxNWU1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMTAsMTMgKzEwLDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxhc20vdGltZXguaD4KIAogLyoKQEAgLTE0Miw4ICsxNDIsNyBAQAogCQl0aW1lX3N0YXRlID0gVElNRV9PT1A7CiAJCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6ICIKIAkJICAgICAgICJpbnNlcnRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NjAgVVRDXG4iKTsKLQkJbGVhcF90aW1lci5leHBpcmVzID0ga3RpbWVfYWRkX25zKGxlYXBfdGltZXIuZXhwaXJlcywKLQkJCQkJCSAgTlNFQ19QRVJfU0VDKTsKKwkJaHJ0aW1lcl9hZGRfZXhwaXJlc19ucygmbGVhcF90aW1lciwgTlNFQ19QRVJfU0VDKTsKIAkJcmVzID0gSFJUSU1FUl9SRVNUQVJUOwogCQlicmVhazsKIAljYXNlIFRJTUVfREVMOgpAQCAtMjE4LDExICsyMTcsMTEgQEAKIC8qIERpc2FibGUgdGhlIGNtb3MgdXBkYXRlIC0gdXNlZCBieSB2aXJ0dWFsaXphdGlvbiBhbmQgZW1iZWRkZWQgKi8KIGludCBub19zeW5jX2Ntb3NfY2xvY2sgIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayh1bnNpZ25lZCBsb25nIGR1bW15KTsKK3N0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCi1zdGF0aWMgREVGSU5FX1RJTUVSKHN5bmNfY21vc190aW1lciwgc3luY19jbW9zX2Nsb2NrLCAwLCAwKTsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhzeW5jX2Ntb3Nfd29yaywgc3luY19jbW9zX2Nsb2NrKTsKIAotc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHVuc2lnbmVkIGxvbmcgZHVtbXkpCitzdGF0aWMgdm9pZCBzeW5jX2Ntb3NfY2xvY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB0aW1lc3BlYyBub3csIG5leHQ7CiAJaW50IGZhaWwgPSAxOwpAQCAtMjU4LDEzICsyNTcsMTMgQEAKIAkJbmV4dC50dl9zZWMrKzsKIAkJbmV4dC50dl9uc2VjIC09IE5TRUNfUEVSX1NFQzsKIAl9Ci0JbW9kX3RpbWVyKCZzeW5jX2Ntb3NfdGltZXIsIGppZmZpZXMgKyB0aW1lc3BlY190b19qaWZmaWVzKCZuZXh0KSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzeW5jX2Ntb3Nfd29yaywgdGltZXNwZWNfdG9famlmZmllcygmbmV4dCkpOwogfQogCiBzdGF0aWMgdm9pZCBub3RpZnlfY21vc190aW1lcih2b2lkKQogewogCWlmICghbm9fc3luY19jbW9zX2Nsb2NrKQotCQltb2RfdGltZXIoJnN5bmNfY21vc190aW1lciwgamlmZmllcyArIDEpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnN5bmNfY21vc193b3JrLCAwKTsKIH0KIAogI2Vsc2UKQEAgLTI3NywzOCArMjc2LDUwIEBACiBpbnQgZG9fYWRqdGltZXgoc3RydWN0IHRpbWV4ICp0eGMpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwotCWxvbmcgc2F2ZV9hZGp1c3QsIHNlYzsKIAlpbnQgcmVzdWx0OwogCi0JLyogSW4gb3JkZXIgdG8gbW9kaWZ5IGFueXRoaW5nLCB5b3UgZ290dGEgYmUgc3VwZXItdXNlciEgKi8KLQlpZiAodHhjLT5tb2RlcyAmJiAhY2FwYWJsZShDQVBfU1lTX1RJTUUpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogTm93IHdlIHZhbGlkYXRlIHRoZSBkYXRhIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cyAqLwotCi0JaWYgKCh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9TSU5HTEVTSE9UKSA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpIHsKKwkvKiBWYWxpZGF0ZSB0aGUgZGF0YSBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMgKi8KKwlpZiAodHhjLT5tb2RlcyAmIEFESl9BREpUSU1FKSB7CiAJCS8qIHNpbmdsZXNob3QgbXVzdCBub3QgYmUgdXNlZCB3aXRoIGFueSBvdGhlciBtb2RlIGJpdHMgKi8KLQkJaWYgKHR4Yy0+bW9kZXMgJiB+QURKX09GRlNFVF9TU19SRUFEKQorCQlpZiAoISh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9TSU5HTEVTSE9UKSkKIAkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoISh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9SRUFET05MWSkgJiYKKwkJICAgICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCisJCQlyZXR1cm4gLUVQRVJNOworCX0gZWxzZSB7CisJCS8qIEluIG9yZGVyIHRvIG1vZGlmeSBhbnl0aGluZywgeW91IGdvdHRhIGJlIHN1cGVyLXVzZXIhICovCisJCSBpZiAodHhjLT5tb2RlcyAmJiAhY2FwYWJsZShDQVBfU1lTX1RJTUUpKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQkvKiBpZiB0aGUgcXVhcnR6IGlzIG9mZiBieSBtb3JlIHRoYW4gMTAlIHNvbWV0aGluZyBpcyBWRVJZIHdyb25nISAqLworCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLICYmCisJCSAgICAodHhjLT50aWNrIDwgIDkwMDAwMC9VU0VSX0haIHx8CisJCSAgICAgdHhjLT50aWNrID4gMTEwMDAwMC9VU0VSX0haKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMgJiYgdGltZV9zdGF0ZSAhPSBUSU1FX09LKQorCQkJaHJ0aW1lcl9jYW5jZWwoJmxlYXBfdGltZXIpOwogCX0KIAotCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmcgISAqLwotCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCi0JCWlmICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKLQkJICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHRpbWVfc3RhdGUgIT0gVElNRV9PSyAmJiB0eGMtPm1vZGVzICYgQURKX1NUQVRVUykKLQkJaHJ0aW1lcl9jYW5jZWwoJmxlYXBfdGltZXIpOwogCWdldG5zdGltZW9mZGF5KCZ0cyk7CiAKIAl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKLQkvKiBTYXZlIGZvciBsYXRlciAtIHNlbWFudGljcyBvZiBhZGp0aW1lIGlzIHRvIHJldHVybiBvbGQgdmFsdWUgKi8KLQlzYXZlX2FkanVzdCA9IHRpbWVfYWRqdXN0OwotCiAJLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtICovCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfQURKVElNRSkgeworCQlsb25nIHNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7CisKKwkJaWYgKCEodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfUkVBRE9OTFkpKSB7CisJCQkvKiBhZGp0aW1lKCkgaXMgaW5kZXBlbmRlbnQgZnJvbSBudHBfYWRqdGltZSgpICovCisJCQl0aW1lX2FkanVzdCA9IHR4Yy0+b2Zmc2V0OworCQkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKKwkJfQorCQl0eGMtPm9mZnNldCA9IHNhdmVfYWRqdXN0OworCQlnb3RvIGFkal9kb25lOworCX0KIAlpZiAodHhjLT5tb2RlcykgeworCQlsb25nIHNlYzsKKwogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpIHsKIAkJCWlmICgodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJgogCQkJICAgICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgewpAQCAtMzc1LDEzICszODYsOCBAQAogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCiAJCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7CiAKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKSB7Ci0JCQlpZiAodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpCi0JCQkJLyogYWRqdGltZSgpIGlzIGluZGVwZW5kZW50IGZyb20gbnRwX2FkanRpbWUoKSAqLwotCQkJCXRpbWVfYWRqdXN0ID0gdHhjLT5vZmZzZXQ7Ci0JCQllbHNlCi0JCQkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOwotCQl9CisJCWlmICh0eGMtPm1vZGVzICYgQURKX09GRlNFVCkKKwkJCW50cF91cGRhdGVfb2Zmc2V0KHR4Yy0+b2Zmc2V0KTsKIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSykKIAkJCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKIApAQCAtMzg5LDIyICszOTUsMTggQEAKIAkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAJfQogCisJdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAorCQkJCSAgTlRQX1NDQUxFX1NISUZUKTsKKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKKwkJdHhjLT5vZmZzZXQgLz0gTlNFQ19QRVJfVVNFQzsKKworYWRqX2RvbmU6CiAJcmVzdWx0ID0gdGltZV9zdGF0ZTsJLyogbW9zdGx5IGBUSU1FX09LJyAqLwogCWlmICh0aW1lX3N0YXR1cyAmIChTVEFfVU5TWU5DfFNUQV9DTE9DS0VSUikpCiAJCXJlc3VsdCA9IFRJTUVfRVJST1I7CiAKLQlpZiAoKHR4Yy0+bW9kZXMgPT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKSB8fAotCSAgICAodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NTX1JFQUQpKQotCQl0eGMtPm9mZnNldCA9IHNhdmVfYWRqdXN0OwotCWVsc2UgewotCQl0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0ICogTlRQX0lOVEVSVkFMX0ZSRVEsCi0JCQkJCSAgTlRQX1NDQUxFX1NISUZUKTsKLQkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCi0JCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOwotCX0KLQl0eGMtPmZyZXEJICAgPSBzaGlmdF9yaWdodCgoczMyKSh0aW1lX2ZyZXEgPj4gUFBNX1NDQUxFX0lOVl9TSElGVCkgKgotCQkJCQkgKHM2NClQUE1fU0NBTEVfSU5WLAotCQkJCQkgTlRQX1NDQUxFX1NISUZUKTsKKwl0eGMtPmZyZXEJICAgPSBzaGlmdF9yaWdodCgodGltZV9mcmVxID4+IFBQTV9TQ0FMRV9JTlZfU0hJRlQpICoKKwkJCQkJIChzNjQpUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKIAl0eGMtPm1heGVycm9yCSAgID0gdGltZV9tYXhlcnJvcjsKIAl0eGMtPmVzdGVycm9yCSAgID0gdGltZV9lc3RlcnJvcjsKIAl0eGMtPnN0YXR1cwkgICA9IHRpbWVfc3RhdHVzOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggY2IwMWNkOC4uZjk4YTFiNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC0zODQsNiArMzg0LDE5IEBACiB9CiAKIC8qCisgKiBDYWxsZWQgZnJvbSBpcnFfZW50ZXIoKSB3aGVuIGlkbGUgd2FzIGludGVycnVwdGVkIHRvIHJlZW5hYmxlIHRoZQorICogcGVyIGNwdSBkZXZpY2UuCisgKi8KK3ZvaWQgdGlja19jaGVja19vbmVzaG90X2Jyb2FkY2FzdChpbnQgY3B1KQoreworCWlmIChjcHVfaXNzZXQoY3B1LCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2spKSB7CisJCXN0cnVjdCB0aWNrX2RldmljZSAqdGQgPSAmcGVyX2NwdSh0aWNrX2NwdV9kZXZpY2UsIGNwdSk7CisKKwkJY2xvY2tldmVudHNfc2V0X21vZGUodGQtPmV2dGRldiwgQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CisJfQorfQorCisvKgogICogSGFuZGxlIG9uZXNob3QgbW9kZSBicm9hZGNhc3RpbmcKICAqLwogc3RhdGljIHZvaWQgdGlja19oYW5kbGVfb25lc2hvdF9icm9hZGNhc3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCmluZGV4IDQ2OTI0ODcuLmIxYzA1YmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaAorKysgYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiB2b2lkIHRpY2tfc2h1dGRvd25fYnJvYWRjYXN0X29uZXNob3QodW5zaWduZWQgaW50ICpjcHVwKTsKIGV4dGVybiBpbnQgdGlja19yZXN1bWVfYnJvYWRjYXN0X29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpOwogZXh0ZXJuIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSk7CiAjIGVsc2UgLyogQlJPQURDQVNUICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19icm9hZGNhc3Rfc2V0dXBfb25lc2hvdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYykKIHsKQEAgLTQ1LDYgKzQ2LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Jyb2FkY2FzdF9zd2l0Y2hfdG9fb25lc2hvdCh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX3NodXRkb3duX2Jyb2FkY2FzdF9vbmVzaG90KHVuc2lnbmVkIGludCAqY3B1cCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jaGVja19vbmVzaG90X2Jyb2FkY2FzdChpbnQgY3B1KSB7IH0KICMgZW5kaWYgLyogIUJST0FEQ0FTVCAqLwogCiAjZWxzZSAvKiAhT05FU0hPVCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IGI3MTFmZmMuLjViYmIxMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIH0KIAotdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpCitzdGF0aWMgdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpCiB7CiAJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJnBlcl9jcHUodGlja19jcHVfc2NoZWQsIGNwdSk7CiAKQEAgLTMwMCw3ICszMDAsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCi0JCQl0cy0+aWRsZV90aWNrID0gdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXM7CisJCQl0cy0+aWRsZV90aWNrID0gaHJ0aW1lcl9nZXRfZXhwaXJlcygmdHMtPnNjaGVkX3RpbWVyKTsKIAkJCXRzLT50aWNrX3N0b3BwZWQgPSAxOwogCQkJdHMtPmlkbGVfamlmZmllcyA9IGxhc3RfamlmZmllczsKIAkJCXJjdV9lbnRlcl9ub2h6KCk7CkBAIC0zNzcsNiArMzc3LDMyIEBACiAJcmV0dXJuIHRzLT5zbGVlcF9sZW5ndGg7CiB9CiAKK3N0YXRpYyB2b2lkIHRpY2tfbm9oel9yZXN0YXJ0KHN0cnVjdCB0aWNrX3NjaGVkICp0cywga3RpbWVfdCBub3cpCit7CisJaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7CisJaHJ0aW1lcl9zZXRfZXhwaXJlcygmdHMtPnNjaGVkX3RpbWVyLCB0cy0+aWRsZV90aWNrKTsKKworCXdoaWxlICgxKSB7CisJCS8qIEZvcndhcmQgdGhlIHRpbWUgdG8gZXhwaXJlIGluIHRoZSBmdXR1cmUgKi8KKwkJaHJ0aW1lcl9mb3J3YXJkKCZ0cy0+c2NoZWRfdGltZXIsIG5vdywgdGlja19wZXJpb2QpOworCisJCWlmICh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9ISUdIUkVTKSB7CisJCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciwKKwkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKKwkJCS8qIENoZWNrLCBpZiB0aGUgdGltZXIgd2FzIGFscmVhZHkgaW4gdGhlIHBhc3QgKi8KKwkJCWlmIChocnRpbWVyX2FjdGl2ZSgmdHMtPnNjaGVkX3RpbWVyKSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmICghdGlja19wcm9ncmFtX2V2ZW50KAorCQkJCWhydGltZXJfZ2V0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciksIDApKQorCQkJCWJyZWFrOworCQl9CisJCS8qIFVwZGF0ZSBqaWZmaWVzIGFuZCByZXJlYWQgdGltZSAqLworCQl0aWNrX2RvX3VwZGF0ZV9qaWZmaWVzNjQobm93KTsKKwkJbm93ID0ga3RpbWVfZ2V0KCk7CisJfQorfQorCiAvKioKICAqIHRpY2tfbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sgLSByZXN0YXJ0IHRoZSBpZGxlIHRpY2sgZnJvbSB0aGUgaWRsZSB0YXNrCiAgKgpAQCAtNDMwLDM1ICs0NTYsMTYgQEAKIAkgKi8KIAl0cy0+dGlja19zdG9wcGVkICA9IDA7CiAJdHMtPmlkbGVfZXhpdHRpbWUgPSBub3c7Ci0JaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7Ci0JdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMgPSB0cy0+aWRsZV90aWNrOwogCi0Jd2hpbGUgKDEpIHsKLQkJLyogRm9yd2FyZCB0aGUgdGltZSB0byBleHBpcmUgaW4gdGhlIGZ1dHVyZSAqLwotCQlocnRpbWVyX2ZvcndhcmQoJnRzLT5zY2hlZF90aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7CisJdGlja19ub2h6X3Jlc3RhcnQodHMsIG5vdyk7CiAKLQkJaWYgKHRzLT5ub2h6X21vZGUgPT0gTk9IWl9NT0RFX0hJR0hSRVMpIHsKLQkJCWhydGltZXJfc3RhcnQoJnRzLT5zY2hlZF90aW1lciwKLQkJCQkgICAgICB0cy0+c2NoZWRfdGltZXIuZXhwaXJlcywKLQkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKLQkJCS8qIENoZWNrLCBpZiB0aGUgdGltZXIgd2FzIGFscmVhZHkgaW4gdGhlIHBhc3QgKi8KLQkJCWlmIChocnRpbWVyX2FjdGl2ZSgmdHMtPnNjaGVkX3RpbWVyKSkKLQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCWlmICghdGlja19wcm9ncmFtX2V2ZW50KHRzLT5zY2hlZF90aW1lci5leHBpcmVzLCAwKSkKLQkJCQlicmVhazsKLQkJfQotCQkvKiBVcGRhdGUgamlmZmllcyBhbmQgcmVyZWFkIHRpbWUgKi8KLQkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7Ci0JCW5vdyA9IGt0aW1lX2dldCgpOwotCX0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKIHN0YXRpYyBpbnQgdGlja19ub2h6X3JlcHJvZ3JhbShzdHJ1Y3QgdGlja19zY2hlZCAqdHMsIGt0aW1lX3Qgbm93KQogewogCWhydGltZXJfZm9yd2FyZCgmdHMtPnNjaGVkX3RpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKLQlyZXR1cm4gdGlja19wcm9ncmFtX2V2ZW50KHRzLT5zY2hlZF90aW1lci5leHBpcmVzLCAwKTsKKwlyZXR1cm4gdGlja19wcm9ncmFtX2V2ZW50KGhydGltZXJfZ2V0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciksIDApOwogfQogCiAvKgpAQCAtNTAzLDEwICs1MTAsNiBAQAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCi0JLyogRG8gbm90IHJlc3RhcnQsIHdoZW4gd2UgYXJlIGluIHRoZSBpZGxlIGxvb3AgKi8KLQlpZiAodHMtPnRpY2tfc3RvcHBlZCkKLQkJcmV0dXJuOwotCiAJd2hpbGUgKHRpY2tfbm9oel9yZXByb2dyYW0odHMsIG5vdykpIHsKIAkJbm93ID0ga3RpbWVfZ2V0KCk7CiAJCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOwpAQCAtNTQxLDcgKzU0NCw3IEBACiAJbmV4dCA9IHRpY2tfaW5pdF9qaWZmeV91cGRhdGUoKTsKIAogCWZvciAoOzspIHsKLQkJdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMgPSBuZXh0OworCQlocnRpbWVyX3NldF9leHBpcmVzKCZ0cy0+c2NoZWRfdGltZXIsIG5leHQpOwogCQlpZiAoIXRpY2tfcHJvZ3JhbV9ldmVudChuZXh0LCAwKSkKIAkJCWJyZWFrOwogCQluZXh0ID0ga3RpbWVfYWRkKG5leHQsIHRpY2tfcGVyaW9kKTsKQEAgLTU1Miw2ICs1NTUsMzcgQEAKIAkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAorLyoKKyAqIFdoZW4gTk9IWiBpcyBlbmFibGVkIGFuZCB0aGUgdGljayBpcyBzdG9wcGVkLCB3ZSBuZWVkIHRvIGtpY2sgdGhlCisgKiB0aWNrIHRpbWVyIGZyb20gaXJxX2VudGVyKCkgc28gdGhhdCB0aGUgamlmZmllcyB1cGRhdGUgaXMga2VwdAorICogYWxpdmUgZHVyaW5nIGxvbmcgcnVubmluZyBzb2Z0aXJxcy4gVGhhdCdzIHVnbHkgYXMgaGVsbCwgYnV0CisgKiBjb3JyZWN0bmVzcyBpcyBrZXkgZXZlbiBpZiB3ZSBuZWVkIHRvIGZpeCB0aGUgb2ZmZW5kaW5nIHNvZnRpcnEgaW4KKyAqIHRoZSBmaXJzdCBwbGFjZS4KKyAqCisgKiBOb3RlLCB0aGlzIGlzIGRpZmZlcmVudCB0byB0aWNrX25vaHpfcmVzdGFydC4gV2UganVzdCBraWNrIHRoZQorICogdGltZXIgYW5kIGRvIG5vdCB0b3VjaCB0aGUgb3RoZXIgbWFnaWMgYml0cyB3aGljaCBuZWVkIHRvIGJlIGRvbmUKKyAqIHdoZW4gaWRsZSBpcyBsZWZ0LgorICovCitzdGF0aWMgdm9pZCB0aWNrX25vaHpfa2lja190aWNrKGludCBjcHUpCit7CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJnBlcl9jcHUodGlja19jcHVfc2NoZWQsIGNwdSk7CisJa3RpbWVfdCBkZWx0YSwgbm93OworCisJaWYgKCF0cy0+dGlja19zdG9wcGVkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERvIG5vdCB0b3VjaCB0aGUgdGljayBkZXZpY2UsIHdoZW4gdGhlIG5leHQgZXhwaXJ5IGlzIGVpdGhlcgorCSAqIGFscmVhZHkgcmVhY2hlZCBvciBsZXNzL2VxdWFsIHRoYW4gdGhlIHRpY2sgcGVyaW9kLgorCSAqLworCW5vdyA9IGt0aW1lX2dldCgpOworCWRlbHRhID0Ja3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciksIG5vdyk7CisJaWYgKGRlbHRhLnR2NjQgPD0gdGlja19wZXJpb2QudHY2NCkKKwkJcmV0dXJuOworCisJdGlja19ub2h6X3Jlc3RhcnQodHMsIG5vdyk7Cit9CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfc3dpdGNoX3RvX25vaHoodm9pZCkgeyB9CkBAIC01NTksNiArNTkzLDE5IEBACiAjZW5kaWYgLyogTk9fSFogKi8KIAogLyoKKyAqIENhbGxlZCBmcm9tIGlycV9lbnRlciB0byBub3RpZnkgYWJvdXQgdGhlIHBvc3NpYmxlIGludGVycnVwdGlvbiBvZiBpZGxlKCkKKyAqLwordm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSkKK3sKKwl0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGNwdSk7CisjaWZkZWYgQ09ORklHX05PX0haCisJdGlja19ub2h6X3N0b3BfaWRsZShjcHUpOworCXRpY2tfbm9oel91cGRhdGVfamlmZmllcygpOworCXRpY2tfbm9oel9raWNrX3RpY2soY3B1KTsKKyNlbmRpZgorfQorCisvKgogICogSGlnaCByZXNvbHV0aW9uIHRpbWVyIHNwZWNpZmljIGNvZGUKICAqLwogI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKQEAgLTYxMSwxMCArNjU4LDYgQEAKIAkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCX0KIAotCS8qIERvIG5vdCByZXN0YXJ0LCB3aGVuIHdlIGFyZSBpbiB0aGUgaWRsZSBsb29wICovCi0JaWYgKHRzLT50aWNrX3N0b3BwZWQpCi0JCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKLQogCWhydGltZXJfZm9yd2FyZCh0aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7CiAKIAlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOwpAQCAtNjM3LDE2ICs2ODAsMTUgQEAKIAl0cy0+c2NoZWRfdGltZXIuY2JfbW9kZSA9IEhSVElNRVJfQ0JfSVJRU0FGRV9QRVJDUFU7CiAKIAkvKiBHZXQgdGhlIG5leHQgcGVyaW9kIChwZXIgY3B1KSAqLwotCXRzLT5zY2hlZF90aW1lci5leHBpcmVzID0gdGlja19pbml0X2ppZmZ5X3VwZGF0ZSgpOworCWhydGltZXJfc2V0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciwgdGlja19pbml0X2ppZmZ5X3VwZGF0ZSgpKTsKIAlvZmZzZXQgPSBrdGltZV90b19ucyh0aWNrX3BlcmlvZCkgPj4gMTsKIAlkb19kaXYob2Zmc2V0LCBudW1fcG9zc2libGVfY3B1cygpKTsKIAlvZmZzZXQgKj0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXRzLT5zY2hlZF90aW1lci5leHBpcmVzID0ga3RpbWVfYWRkX25zKHRzLT5zY2hlZF90aW1lci5leHBpcmVzLCBvZmZzZXQpOworCWhydGltZXJfYWRkX2V4cGlyZXNfbnMoJnRzLT5zY2hlZF90aW1lciwgb2Zmc2V0KTsKIAogCWZvciAoOzspIHsKIAkJaHJ0aW1lcl9mb3J3YXJkKCZ0cy0+c2NoZWRfdGltZXIsIG5vdywgdGlja19wZXJpb2QpOwotCQlocnRpbWVyX3N0YXJ0KCZ0cy0+c2NoZWRfdGltZXIsIHRzLT5zY2hlZF90aW1lci5leHBpcmVzLAotCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CisJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmdHMtPnNjaGVkX3RpbWVyLCBIUlRJTUVSX01PREVfQUJTKTsKIAkJLyogQ2hlY2ssIGlmIHRoZSB0aW1lciB3YXMgYWxyZWFkeSBpbiB0aGUgcGFzdCAqLwogCQlpZiAoaHJ0aW1lcl9hY3RpdmUoJnRzLT5zY2hlZF90aW1lcikpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGU5MWMyOWYuLmU3YWNmYjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtNTgsMjcgKzU4LDI2IEBACiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiAvKioKLSAqIF9fZ2V0X25zZWNfb2Zmc2V0IC0gUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSBsYXN0IGNhbGwgdG8gcGVyaW9kaWNfaG9vaworICogY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3cgLSB1cGRhdGUgY2xvY2sgdG8gdGhlIGN1cnJlbnQgdGltZQogICoKLSAqIHByaXZhdGUgZnVuY3Rpb24sIG11c3QgaG9sZCB4dGltZV9sb2NrIGxvY2sgd2hlbiBiZWluZwotICogY2FsbGVkLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgc2luY2UgdGhlCi0gKiBsYXN0IGNhbGwgdG8gdXBkYXRlX3dhbGxfdGltZSgpIChhZGp1c3RlZCBieSBOVFAgc2NhbGluZykKKyAqIEZvcndhcmQgdGhlIGN1cnJlbnQgY2xvY2sgdG8gdXBkYXRlIGl0cyBzdGF0ZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvCisgKiB1cGRhdGVfd2FsbF90aW1lKCkuIFRoaXMgaXMgdXNlZnVsIGJlZm9yZSBzaWduaWZpY2FudCBjbG9jayBjaGFuZ2VzLAorICogYXMgaXQgYXZvaWRzIGhhdmluZyB0byBkZWFsIHdpdGggdGhpcyB0aW1lIG9mZnNldCBleHBsaWNpdGx5LgogICovCi1zdGF0aWMgaW5saW5lIHM2NCBfX2dldF9uc2VjX29mZnNldCh2b2lkKQorc3RhdGljIHZvaWQgY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3codm9pZCkKIHsKIAljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7Ci0JczY0IG5zX29mZnNldDsKKwlzNjQgbnNlYzsKIAotCS8qIHJlYWQgY2xvY2tzb3VyY2U6ICovCiAJY3ljbGVfbm93ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCiAJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CisJY2xvY2stPmN5Y2xlX2xhc3QgPSBjeWNsZV9ub3c7CiAKLQkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLwotCW5zX29mZnNldCA9IGN5YzJucyhjbG9jaywgY3ljbGVfZGVsdGEpOworCW5zZWMgPSBjeWMybnMoY2xvY2ssIGN5Y2xlX2RlbHRhKTsKKwl0aW1lc3BlY19hZGRfbnMoJnh0aW1lLCBuc2VjKTsKIAotCXJldHVybiBuc19vZmZzZXQ7CisJbnNlYyA9ICgoczY0KWN5Y2xlX2RlbHRhICogY2xvY2stPm11bHRfb3JpZykgPj4gY2xvY2stPnNoaWZ0OworCWNsb2NrLT5yYXdfdGltZS50dl9uc2VjICs9IG5zZWM7CiB9CiAKIC8qKgpAQCAtODksNiArODgsNyBAQAogICovCiB2b2lkIGdldG5zdGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CisJY3ljbGVfdCBjeWNsZV9ub3csIGN5Y2xlX2RlbHRhOwogCXVuc2lnbmVkIGxvbmcgc2VxOwogCXM2NCBuc2VjczsKIApAQCAtOTYsNyArOTYsMTUgQEAKIAkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CiAKIAkJKnRzID0geHRpbWU7Ci0JCW5zZWNzID0gX19nZXRfbnNlY19vZmZzZXQoKTsKKworCQkvKiByZWFkIGNsb2Nrc291cmNlOiAqLworCQljeWNsZV9ub3cgPSBjbG9ja3NvdXJjZV9yZWFkKGNsb2NrKTsKKworCQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCisJCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIGNsb2NrLT5jeWNsZV9sYXN0KSAmIGNsb2NrLT5tYXNrOworCisJCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJCW5zZWNzID0gY3ljMm5zKGNsb2NrLCBjeWNsZV9kZWx0YSk7CiAKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKIApAQCAtMTI5LDIyICsxMzcsMjIgQEAKICAqLwogaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQogeworCXN0cnVjdCB0aW1lc3BlYyB0c19kZWx0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKIAogCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKLQluc2VjIC09IF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisJY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3coKTsKIAotCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKKwl0c19kZWx0YS50dl9zZWMgPSB0di0+dHZfc2VjIC0geHRpbWUudHZfc2VjOworCXRzX2RlbHRhLnR2X25zZWMgPSB0di0+dHZfbnNlYyAtIHh0aW1lLnR2X25zZWM7CisJd2FsbF90b19tb25vdG9uaWMgPSB0aW1lc3BlY19zdWIod2FsbF90b19tb25vdG9uaWMsIHRzX2RlbHRhKTsKIAotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKKwl4dGltZSA9ICp0djsKKwogCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAogCWNsb2NrLT5lcnJvciA9IDA7CkBAIC0xNzAsMjIgKzE3OCwxOSBAQAogc3RhdGljIHZvaWQgY2hhbmdlX2Nsb2Nrc291cmNlKHZvaWQpCiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpuZXc7Ci0JY3ljbGVfdCBub3c7Ci0JdTY0IG5zZWM7CiAKIAluZXcgPSBjbG9ja3NvdXJjZV9nZXRfbmV4dCgpOwogCiAJaWYgKGNsb2NrID09IG5ldykKIAkJcmV0dXJuOwogCi0JbmV3LT5jeWNsZV9sYXN0ID0gMDsKLQlub3cgPSBjbG9ja3NvdXJjZV9yZWFkKG5ldyk7Ci0JbnNlYyA9ICBfX2dldF9uc2VjX29mZnNldCgpOwotCXRpbWVzcGVjX2FkZF9ucygmeHRpbWUsIG5zZWMpOworCWNsb2Nrc291cmNlX2ZvcndhcmRfbm93KCk7CisKKwluZXctPnJhd190aW1lID0gY2xvY2stPnJhd190aW1lOwogCiAJY2xvY2sgPSBuZXc7Ci0JY2xvY2stPmN5Y2xlX2xhc3QgPSBub3c7Ci0KKwljbG9jay0+Y3ljbGVfbGFzdCA9IDA7CisJY2xvY2stPmN5Y2xlX2xhc3QgPSBjbG9ja3NvdXJjZV9yZWFkKG5ldyk7CiAJY2xvY2stPmVycm9yID0gMDsKIAljbG9jay0+eHRpbWVfbnNlYyA9IDA7CiAJY2xvY2tzb3VyY2VfY2FsY3VsYXRlX2ludGVydmFsKGNsb2NrLCBOVFBfSU5URVJWQUxfTEVOR1RIKTsKQEAgLTIwMCwxMSArMjA1LDQ0IEBACiAJICovCiB9CiAjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNsb2Nrc291cmNlX2ZvcndhcmRfbm93KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgczY0IF9fZ2V0X25zZWNfb2Zmc2V0KHZvaWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAvKioKKyAqIGdldHJhd21vbm90b25pYyAtIFJldHVybnMgdGhlIHJhdyBtb25vdG9uaWMgdGltZSBpbiBhIHRpbWVzcGVjCisgKiBAdHM6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB0byBiZSBzZXQKKyAqCisgKiBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgKGNvbXBsZXRlbHkgdW4tbW9kaWZpZWQgYnkgbnRwKQorICovCit2b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXVuc2lnbmVkIGxvbmcgc2VxOworCXM2NCBuc2VjczsKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CisKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOworCisJCS8qIHJlYWQgY2xvY2tzb3VyY2U6ICovCisJCWN5Y2xlX25vdyA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOworCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdXBkYXRlX3dhbGxfdGltZTogKi8KKwkJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CisKKwkJLyogY29udmVydCB0byBuYW5vc2Vjb25kczogKi8KKwkJbnNlY3MgPSAoKHM2NCljeWNsZV9kZWx0YSAqIGNsb2NrLT5tdWx0X29yaWcpID4+IGNsb2NrLT5zaGlmdDsKKworCQkqdHMgPSBjbG9jay0+cmF3X3RpbWU7CisKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKKworCXRpbWVzcGVjX2FkZF9ucyh0cywgbnNlY3MpOworfQorRVhQT1JUX1NZTUJPTChnZXRyYXdtb25vdG9uaWMpOworCisKKy8qKgogICogdGltZWtlZXBpbmdfdmFsaWRfZm9yX2hyZXMgLSBDaGVjayBpZiB0aW1la2VlcGluZyBpcyBzdWl0YWJsZSBmb3IgaHJlcwogICovCiBpbnQgdGltZWtlZXBpbmdfdmFsaWRfZm9yX2hyZXModm9pZCkKQEAgLTI2NSw4ICszMDMsNiBAQAogc3RhdGljIGludCB0aW1la2VlcGluZ19zdXNwZW5kZWQ7CiAvKiB0aW1lIGluIHNlY29uZHMgd2hlbiBzdXNwZW5kIGJlZ2FuICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWU7Ci0vKiB4dGltZSBvZmZzZXQgd2hlbiB3ZSB3ZW50IGludG8gc3VzcGVuZCAqLwotc3RhdGljIHM2NCB0aW1la2VlcGluZ19zdXNwZW5kX25zZWNzOwogCiAvKioKICAqIHRpbWVrZWVwaW5nX3Jlc3VtZSAtIFJlc3VtZXMgdGhlIGdlbmVyaWMgdGltZWtlZXBpbmcgc3Vic3lzdGVtLgpAQCAtMjkyLDggKzMyOCw2IEBACiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyAtPSBzbGVlcF9sZW5ndGg7CiAJCXRvdGFsX3NsZWVwX3RpbWUgKz0gc2xlZXBfbGVuZ3RoOwogCX0KLQkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBjb3JyZWN0IHh0aW1lIHJlZmVyZW5jZSAqLwotCXRpbWVzcGVjX2FkZF9ucygmeHRpbWUsIHRpbWVrZWVwaW5nX3N1c3BlbmRfbnNlY3MpOwogCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAkvKiByZS1iYXNlIHRoZSBsYXN0IGN5Y2xlIHZhbHVlICovCiAJY2xvY2stPmN5Y2xlX2xhc3QgPSAwOwpAQCAtMzE5LDggKzM1Myw3IEBACiAJdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7CiAKIAl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkvKiBHZXQgdGhlIGN1cnJlbnQgeHRpbWUgb2Zmc2V0ICovCi0JdGltZWtlZXBpbmdfc3VzcGVuZF9uc2VjcyA9IF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisJY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3coKTsKIAl0aW1la2VlcGluZ19zdXNwZW5kZWQgPSAxOwogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKQEAgLTQ1NCwyMyArNDg3LDI5IEBACiAjZWxzZQogCW9mZnNldCA9IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKICNlbmRpZgotCWNsb2NrLT54dGltZV9uc2VjICs9IChzNjQpeHRpbWUudHZfbnNlYyA8PCBjbG9jay0+c2hpZnQ7CisJY2xvY2stPnh0aW1lX25zZWMgPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgY2xvY2stPnNoaWZ0OwogCiAJLyogbm9ybWFsbHkgdGhpcyBsb29wIHdpbGwgcnVuIGp1c3Qgb25jZSwgaG93ZXZlciBpbiB0aGUKIAkgKiBjYXNlIG9mIGxvc3Qgb3IgbGF0ZSB0aWNrcywgaXQgd2lsbCBhY2N1bXVsYXRlIGNvcnJlY3RseS4KIAkgKi8KIAl3aGlsZSAob2Zmc2V0ID49IGNsb2NrLT5jeWNsZV9pbnRlcnZhbCkgewogCQkvKiBhY2N1bXVsYXRlIG9uZSBpbnRlcnZhbCAqLwotCQljbG9jay0+eHRpbWVfbnNlYyArPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWw7Ci0JCWNsb2NrLT5jeWNsZV9sYXN0ICs9IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKIAkJb2Zmc2V0IC09IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKKwkJY2xvY2stPmN5Y2xlX2xhc3QgKz0gY2xvY2stPmN5Y2xlX2ludGVydmFsOwogCisJCWNsb2NrLT54dGltZV9uc2VjICs9IGNsb2NrLT54dGltZV9pbnRlcnZhbDsKIAkJaWYgKGNsb2NrLT54dGltZV9uc2VjID49ICh1NjQpTlNFQ19QRVJfU0VDIDw8IGNsb2NrLT5zaGlmdCkgewogCQkJY2xvY2stPnh0aW1lX25zZWMgLT0gKHU2NClOU0VDX1BFUl9TRUMgPDwgY2xvY2stPnNoaWZ0OwogCQkJeHRpbWUudHZfc2VjKys7CiAJCQlzZWNvbmRfb3ZlcmZsb3coKTsKIAkJfQogCisJCWNsb2NrLT5yYXdfdGltZS50dl9uc2VjICs9IGNsb2NrLT5yYXdfaW50ZXJ2YWw7CisJCWlmIChjbG9jay0+cmF3X3RpbWUudHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpIHsKKwkJCWNsb2NrLT5yYXdfdGltZS50dl9uc2VjIC09IE5TRUNfUEVSX1NFQzsKKwkJCWNsb2NrLT5yYXdfdGltZS50dl9zZWMrKzsKKwkJfQorCiAJCS8qIGFjY3VtdWxhdGUgZXJyb3IgYmV0d2VlbiBOVFAgYW5kIGNsb2NrIGludGVydmFsICovCiAJCWNsb2NrLT5lcnJvciArPSB0aWNrX2xlbmd0aDsKIAkJY2xvY2stPmVycm9yIC09IGNsb2NrLT54dGltZV9pbnRlcnZhbCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gY2xvY2stPnNoaWZ0KTsKQEAgLTQ3OSw5ICs1MTgsMTIgQEAKIAkvKiBjb3JyZWN0IHRoZSBjbG9jayB3aGVuIE5UUCBlcnJvciBpcyB0b28gYmlnICovCiAJY2xvY2tzb3VyY2VfYWRqdXN0KG9mZnNldCk7CiAKLQkvKiBzdG9yZSBmdWxsIG5hbm9zZWNvbmRzIGludG8geHRpbWUgKi8KLQl4dGltZS50dl9uc2VjID0gKHM2NCljbG9jay0+eHRpbWVfbnNlYyA+PiBjbG9jay0+c2hpZnQ7CisJLyogc3RvcmUgZnVsbCBuYW5vc2Vjb25kcyBpbnRvIHh0aW1lIGFmdGVyIHJvdW5kaW5nIGl0IHVwIGFuZAorCSAqIGFkZCB0aGUgcmVtYWluZGVyIHRvIHRoZSBlcnJvciBkaWZmZXJlbmNlLgorCSAqLworCXh0aW1lLnR2X25zZWMgPSAoKHM2NCljbG9jay0+eHRpbWVfbnNlYyA+PiBjbG9jay0+c2hpZnQpICsgMTsKIAljbG9jay0+eHRpbWVfbnNlYyAtPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgY2xvY2stPnNoaWZ0OworCWNsb2NrLT5lcnJvciArPSBjbG9jay0+eHRpbWVfbnNlYyA8PCAoTlRQX1NDQUxFX1NISUZUIC0gY2xvY2stPnNoaWZ0KTsKIAogCXVwZGF0ZV94dGltZV9jYWNoZShjeWMybnMoY2xvY2ssIG9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggYTQwZTIwZi4uYTk5OWI5MiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtNDcsMTMgKzQ3LDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wcmludF90aW1lcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyICp0aW1lciwgaW50IGlkeCwgdTY0IG5vdykKK3ByaW50X3RpbWVyKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhydGltZXIgKnRhZGRyLCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsCisJICAgIGludCBpZHgsIHU2NCBub3cpCiB7CiAjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCiAJY2hhciB0bXBbVEFTS19DT01NX0xFTiArIDFdOwogI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAiICMlZDogIiwgaWR4KTsKLQlwcmludF9uYW1lX29mZnNldChtLCB0aW1lcik7CisJcHJpbnRfbmFtZV9vZmZzZXQobSwgdGFkZHIpOwogCVNFUV9wcmludGYobSwgIiwgIik7CiAJcHJpbnRfbmFtZV9vZmZzZXQobSwgdGltZXItPmZ1bmN0aW9uKTsKIAlTRVFfcHJpbnRmKG0sICIsIFM6JTAybHgiLCB0aW1lci0+c3RhdGUpOwpAQCAtNjUsOSArNjYsMTEgQEAKIAlTRVFfcHJpbnRmKG0sICIsICVzLyVkIiwgdG1wLCB0aW1lci0+c3RhcnRfcGlkKTsKICNlbmRpZgogCVNFUV9wcmludGYobSwgIlxuIik7Ci0JU0VRX3ByaW50ZihtLCAiICMgZXhwaXJlcyBhdCAlTHUgbnNlY3MgW2luICVMZCBuc2Vjc11cbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnModGltZXItPmV4cGlyZXMpLAotCQkobG9uZyBsb25nKShrdGltZV90b19ucyh0aW1lci0+ZXhwaXJlcykgLSBub3cpKTsKKwlTRVFfcHJpbnRmKG0sICIgIyBleHBpcmVzIGF0ICVMdS0lTHUgbnNlY3MgW2luICVMZCB0byAlTGQgbnNlY3NdXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKGhydGltZXJfZ2V0X3NvZnRleHBpcmVzKHRpbWVyKSksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoaHJ0aW1lcl9nZXRfZXhwaXJlcyh0aW1lcikpLAorCQkobG9uZyBsb25nKShrdGltZV90b19ucyhocnRpbWVyX2dldF9zb2Z0ZXhwaXJlcyh0aW1lcikpIC0gbm93KSwKKwkJKGxvbmcgbG9uZykoa3RpbWVfdG9fbnMoaHJ0aW1lcl9nZXRfZXhwaXJlcyh0aW1lcikpIC0gbm93KSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05OSw3ICsxMDIsNyBAQAogCQl0bXAgPSAqdGltZXI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CiAKLQkJcHJpbnRfdGltZXIobSwgJnRtcCwgaSwgbm93KTsKKwkJcHJpbnRfdGltZXIobSwgdGltZXIsICZ0bXAsIGksIG5vdyk7CiAJCW5leHQrKzsKIAkJZ290byBuZXh0X29uZTsKIAl9CkBAIC0xMDksNiArMTEyLDcgQEAKIHN0YXRpYyB2b2lkCiBwcmludF9iYXNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwgdTY0IG5vdykKIHsKKwlTRVFfcHJpbnRmKG0sICIgIC5iYXNlOiAgICAgICAlcFxuIiwgYmFzZSk7CiAJU0VRX3ByaW50ZihtLCAiICAuaW5kZXg6ICAgICAgJWRcbiIsCiAJCQliYXNlLT5pbmRleCk7CiAJU0VRX3ByaW50ZihtLCAiICAucmVzb2x1dGlvbjogJUx1IG5zZWNzXG4iLApAQCAtMTgzLDEyICsxODcsMTYgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiBzdGF0aWMgdm9pZAotcHJpbnRfdGlja2RldmljZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0aWNrX2RldmljZSAqdGQpCitwcmludF90aWNrZGV2aWNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRpY2tfZGV2aWNlICp0ZCwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSB0ZC0+ZXZ0ZGV2OwogCiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKIAlTRVFfcHJpbnRmKG0sICJUaWNrIERldmljZTogbW9kZTogICAgICVkXG4iLCB0ZC0+bW9kZSk7CisJaWYgKGNwdSA8IDApCisJCVNFUV9wcmludGYobSwgIkJyb2FkY2FzdCBkZXZpY2VcbiIpOworCWVsc2UKKwkJU0VRX3ByaW50ZihtLCAiUGVyIENQVSBkZXZpY2U6ICVkXG4iLCBjcHUpOwogCiAJU0VRX3ByaW50ZihtLCAiQ2xvY2sgRXZlbnQgRGV2aWNlOiAiKTsKIAlpZiAoIWRldikgewpAQCAtMjIyLDcgKzIzMCw3IEBACiAJaW50IGNwdTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAotCXByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfYnJvYWRjYXN0X2RldmljZSgpKTsKKwlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2Jyb2FkY2FzdF9kZXZpY2UoKSwgLTEpOwogCVNFUV9wcmludGYobSwgInRpY2tfYnJvYWRjYXN0X21hc2s6ICUwOGx4XG4iLAogCQkgICB0aWNrX2dldF9icm9hZGNhc3RfbWFzaygpLT5iaXRzWzBdKTsKICNpZmRlZiBDT05GSUdfVElDS19PTkVTSE9UCkBAIC0yMzIsNyArMjQwLDcgQEAKIAlTRVFfcHJpbnRmKG0sICJcbiIpOwogI2VuZGlmCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCSAgIHByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfZGV2aWNlKGNwdSkpOworCQlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2RldmljZShjcHUpLCBjcHUpOwogCVNFUV9wcmludGYobSwgIlxuIik7CiB9CiAjZWxzZQpAQCAtMjQ0LDcgKzI1Miw3IEBACiAJdTY0IG5vdyA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlpbnQgY3B1OwogCi0JU0VRX3ByaW50ZihtLCAiVGltZXIgTGlzdCBWZXJzaW9uOiB2MC4zXG4iKTsKKwlTRVFfcHJpbnRmKG0sICJUaW1lciBMaXN0IFZlcnNpb246IHYwLjRcbiIpOwogCVNFUV9wcmludGYobSwgIkhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOiAlZFxuIiwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVMpOwogCVNFUV9wcmludGYobSwgIm5vdyBhdCAlTGQgbnNlY3NcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbm93KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA1MTBmZTY5Li41NmJlY2YzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtMTQzNiw5ICsxNDM2LDExIEBACiAJQlVHX09OKGNwdV9vbmxpbmUoY3B1KSk7CiAJb2xkX2Jhc2UgPSBwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSk7CiAJbmV3X2Jhc2UgPSBnZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3Bpbl9sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIGdsb2JhbGx5IHNlcmlhbGl6ZWQgYW5kIG5vYm9keSBlbHNlCisJICogdGFrZXMgdHdvIGxvY2tzIGF0IG9uY2UsIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCUJVR19PTihvbGRfYmFzZS0+cnVubmluZ190aW1lcik7CkBAIC0xNDUzLDggKzE0NTUsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7Ci0Jc3Bpbl91bmxvY2soJm5ld19iYXNlLT5sb2NrKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJcHV0X2NwdV92YXIodHZlY19iYXNlcyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IDI2M2U5ZTYuLjFjYjNlMWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC0xLDIzICsxLDM3IEBACiAjCiAjIEFyY2hpdGVjdHVyZXMgdGhhdCBvZmZlciBhbiBGVFJBQ0UgaW1wbGVtZW50YXRpb24gc2hvdWxkIHNlbGVjdCBIQVZFX0ZUUkFDRToKICMKLWNvbmZpZyBIQVZFX0ZUUkFDRQorCitjb25maWcgTk9QX1RSQUNFUgogCWJvb2wKIAorY29uZmlnIEhBVkVfRlRSQUNFCisJYm9vbAorCXNlbGVjdCBOT1BfVFJBQ0VSCisKIGNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJYm9vbAogCitjb25maWcgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAorCWJvb2wKKwogY29uZmlnIFRSQUNFUl9NQVhfVFJBQ0UKIAlib29sCiAKK2NvbmZpZyBSSU5HX0JVRkZFUgorCWJvb2wKKwogY29uZmlnIFRSQUNJTkcKIAlib29sCiAJc2VsZWN0IERFQlVHX0ZTCisJc2VsZWN0IFJJTkdfQlVGRkVSCiAJc2VsZWN0IFNUQUNLVFJBQ0UKKwlzZWxlY3QgVFJBQ0VQT0lOVFMKIAogY29uZmlnIEZUUkFDRQogCWJvb2wgIktlcm5lbCBGdW5jdGlvbiBUcmFjZXIiCiAJZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IEZSQU1FX1BPSU5URVIKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKQEAgLTM2LDYgKzUwLDcgQEAKIAlkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQogCWRlcGVuZHMgb24gSEFWRV9GVFJBQ0UKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDRV9JUlFGTEFHUwogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKQEAgLTU5LDYgKzc0LDcgQEAKIAlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQogCWRlcGVuZHMgb24gUFJFRU1QVAogCWRlcGVuZHMgb24gSEFWRV9GVFJBQ0UKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKIAloZWxwCkBAIC04Niw2ICsxMDIsNyBAQAogY29uZmlnIFNDSEVEX1RSQUNFUgogCWJvb2wgIlNjaGVkdWxpbmcgTGF0ZW5jeSBUcmFjZXIiCiAJZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKQEAgLTk2LDE2ICsxMTMsNTYgQEAKIGNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAlib29sICJUcmFjZSBwcm9jZXNzIGNvbnRleHQgc3dpdGNoZXMiCiAJZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgTUFSS0VSUwogCWhlbHAKIAkgIFRoaXMgdHJhY2VyIGdldHMgY2FsbGVkIGZyb20gdGhlIGNvbnRleHQgc3dpdGNoIGFuZCByZWNvcmRzCiAJICBhbGwgc3dpdGNoaW5nIG9mIHRhc2tzLgogCitjb25maWcgQk9PVF9UUkFDRVIKKwlib29sICJUcmFjZSBib290IGluaXRjYWxscyIKKwlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlzZWxlY3QgVFJBQ0lORworCWhlbHAKKwkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gb3B0aW1pemUgYm9vdCB0aW1lczogaXQgcmVjb3JkcworCSAgdGhlIHRpbWluZ3Mgb2YgdGhlIGluaXRjYWxscyBhbmQgdHJhY2VzIGtleSBldmVudHMgYW5kIHRoZSBpZGVudGl0eQorCSAgb2YgdGFza3MgdGhhdCBjYW4gY2F1c2UgYm9vdCBkZWxheXMsIHN1Y2ggYXMgY29udGV4dC1zd2l0Y2hlcy4KKworCSAgSXRzIGFpbSBpcyB0byBiZSBwYXJzZWQgYnkgdGhlIC9zY3JpcHRzL2Jvb3RncmFwaC5wbCB0b29sIHRvCisJICBwcm9kdWNlIHByZXR0eSBncmFwaGljcyBhYm91dCBib290IGluZWZmaWNpZW5jaWVzLCBnaXZpbmcgYSB2aXN1YWwKKwkgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkZWxheXMgZHVyaW5nIGluaXRjYWxscyAtIGJ1dCB0aGUgcmF3CisJICAvZGVidWcvdHJhY2luZy90cmFjZSB0ZXh0IG91dHB1dCBpcyByZWFkYWJsZSB0b28uCisKKwkgICggTm90ZSB0aGF0IHRyYWNpbmcgc2VsZiB0ZXN0cyBjYW4ndCBiZSBlbmFibGVkIGlmIHRoaXMgdHJhY2VyIGlzCisJICAgIHNlbGVjdGVkLCBiZWNhdXNlIHRoZSBzZWxmLXRlc3RzIGFyZSBhbiBpbml0Y2FsbCBhcyB3ZWxsIGFuZCB0aGF0CisJICAgIHdvdWxkIGludmFsaWRhdGUgdGhlIGJvb3QgdHJhY2UuICkKKworY29uZmlnIFNUQUNLX1RSQUNFUgorCWJvb2wgIlRyYWNlIG1heCBzdGFjayIKKwlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlzZWxlY3QgRlRSQUNFCisJc2VsZWN0IFNUQUNLVFJBQ0UKKwloZWxwCisJICBUaGlzIHNwZWNpYWwgdHJhY2VyIHJlY29yZHMgdGhlIG1heGltdW0gc3RhY2sgZm9vdHByaW50IG9mIHRoZQorCSAga2VybmVsIGFuZCBkaXNwbGF5cyBpdCBpbiBkZWJ1Z2ZzL3RyYWNpbmcvc3RhY2tfdHJhY2UuCisKKwkgIFRoaXMgdHJhY2VyIHdvcmtzIGJ5IGhvb2tpbmcgaW50byBldmVyeSBmdW5jdGlvbiBjYWxsIHRoYXQgdGhlCisJICBrZXJuZWwgZXhlY3V0ZXMsIGFuZCBrZWVwaW5nIGEgbWF4aW11bSBzdGFjayBkZXB0aCB2YWx1ZSBhbmQKKwkgIHN0YWNrLXRyYWNlIHNhdmVkLiBCZWNhdXNlIHRoaXMgbG9naWMgaGFzIHRvIGV4ZWN1dGUgaW4gZXZlcnkKKwkgIGtlcm5lbCBmdW5jdGlvbiwgYWxsIHRoZSB0aW1lLCB0aGlzIG9wdGlvbiBjYW4gc2xvdyBkb3duIHRoZQorCSAga2VybmVsIG1lYXN1cmFibHkgYW5kIGlzIGdlbmVyYWxseSBpbnRlbmRlZCBmb3Iga2VybmVsCisJICBkZXZlbG9wZXJzIG9ubHkuCisKKwkgIFNheSBOIGlmIHVuc3VyZS4KKwogY29uZmlnIERZTkFNSUNfRlRSQUNFCiAJYm9vbCAiZW5hYmxlL2Rpc2FibGUgZnRyYWNlIHRyYWNlcG9pbnRzIGR5bmFtaWNhbGx5IgogCWRlcGVuZHMgb24gRlRSQUNFCiAJZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlkZWZhdWx0IHkKIAloZWxwCiAgICAgICAgICBUaGlzIG9wdGlvbiB3aWxsIG1vZGlmeSBhbGwgdGhlIGNhbGxzIHRvIGZ0cmFjZSBkeW5hbWljYWxseQpAQCAtMTIxLDEyICsxNzgsMTcgQEAKIAkgd2VyZSBtYWRlLiBJZiBzbywgaXQgcnVucyBzdG9wX21hY2hpbmUgKHN0b3BzIGFsbCBDUFVTKQogCSBhbmQgbW9kaWZpZXMgdGhlIGNvZGUgdG8ganVtcCBvdmVyIHRoZSBjYWxsIHRvIGZ0cmFjZS4KIAorY29uZmlnIEZUUkFDRV9NQ09VTlRfUkVDT1JECisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0UKKwlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKKwogY29uZmlnIEZUUkFDRV9TRUxGVEVTVAogCWJvb2wKIAogY29uZmlnIEZUUkFDRV9TVEFSVFVQX1RFU1QKIAlib29sICJQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZSIKLQlkZXBlbmRzIG9uIFRSQUNJTkcKKwlkZXBlbmRzIG9uIFRSQUNJTkcgJiYgREVCVUdfS0VSTkVMICYmICFCT09UX1RSQUNFUgogCXNlbGVjdCBGVFJBQ0VfU0VMRlRFU1QKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwZXJmb3JtcyBhIHNlcmllcyBvZiBzdGFydHVwIHRlc3RzIG9uIGZ0cmFjZS4gT24gYm9vdHVwCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKaW5kZXggNzFkMTdkZS4uYTg1ZGZiYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL01ha2VmaWxlCisrKyBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogZW5kaWYKIAogb2JqLSQoQ09ORklHX0ZUUkFDRSkgKz0gbGliZnRyYWNlLm8KK29iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIubwogCiBvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2Uubwogb2JqLSQoQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUikgKz0gdHJhY2Vfc2NoZWRfc3dpdGNoLm8KQEAgLTE5LDYgKzIwLDkgQEAKIG9iai0kKENPTkZJR19JUlFTT0ZGX1RSQUNFUikgKz0gdHJhY2VfaXJxc29mZi5vCiBvYmotJChDT05GSUdfUFJFRU1QVF9UUkFDRVIpICs9IHRyYWNlX2lycXNvZmYubwogb2JqLSQoQ09ORklHX1NDSEVEX1RSQUNFUikgKz0gdHJhY2Vfc2NoZWRfd2FrZXVwLm8KK29iai0kKENPTkZJR19OT1BfVFJBQ0VSKSArPSB0cmFjZV9ub3Aubworb2JqLSQoQ09ORklHX1NUQUNLX1RSQUNFUikgKz0gdHJhY2Vfc3RhY2subwogb2JqLSQoQ09ORklHX01NSU9UUkFDRSkgKz0gdHJhY2VfbW1pb3RyYWNlLm8KK29iai0kKENPTkZJR19CT09UX1RSQUNFUikgKz0gdHJhY2VfYm9vdC5vCiAKIGxpYmZ0cmFjZS15IDo9IGZ0cmFjZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggZjZlM2FmMy4uNGRkYTRmNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtODEsNyArODEsNyBAQAogCiBzdGF0aWMgaW50IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCiB7Ci0JLyogU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBieSBpbnRlcnJ1cHRzICovCisJLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwogCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOwogCiAJb3BzLT5uZXh0ID0gZnRyYWNlX2xpc3Q7CkBAIC0xMTUsNiArMTE1LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX29wcyAqKnA7CiAJaW50IHJldCA9IDA7CiAKKwkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCiAJc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAkvKgpAQCAtMTUzLDYgKzE1NCwzMCBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKKyNpZm5kZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECisvKgorICogVGhlIGhhc2ggbG9jayBpcyBvbmx5IG5lZWRlZCB3aGVuIHRoZSByZWNvcmRpbmcgb2YgdGhlIG1jb3VudAorICogY2FsbGVycyBhcmUgZHluYW1pYy4gVGhhdCBpcywgYnkgdGhlIGNhbGxlciB0aGVtc2VsdmVzIGFuZAorICogbm90IHJlY29yZGVkIHZpYSB0aGUgY29tcGlsYXRpb24uCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZnRyYWNlX2hhc2hfbG9jayk7CisjZGVmaW5lIGZ0cmFjZV9oYXNoX2xvY2soZmxhZ3MpCSAgc3Bpbl9sb2NrX2lycXNhdmUoJmZ0cmFjZV9oYXNoX2xvY2ssIGZsYWdzKQorI2RlZmluZSBmdHJhY2VfaGFzaF91bmxvY2soZmxhZ3MpIFwKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZ0cmFjZV9oYXNoX2xvY2ssIGZsYWdzKQorI2Vsc2UKKy8qIFRoaXMgaXMgcHJvdGVjdGVkIHZpYSB0aGUgZnRyYWNlX2xvY2sgd2l0aCBNQ09VTlRfUkVDT1JELiAqLworI2RlZmluZSBmdHJhY2VfaGFzaF9sb2NrKGZsYWdzKSAgIGRvIHsgKHZvaWQpKGZsYWdzKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZnRyYWNlX2hhc2hfdW5sb2NrKGZsYWdzKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKgorICogU2luY2UgTUNPVU5UX0FERFIgbWF5IHBvaW50IHRvIG1jb3VudCBpdHNlbGYsIHdlIGRvIG5vdCB3YW50CisgKiB0byBnZXQgaXQgY29uZnVzZWQgYnkgcmVhZGluZyBhIHJlZmVyZW5jZSBpbiB0aGUgY29kZSBhcyB3ZQorICogYXJlIHBhcnNpbmcgb24gb2JqY29weSBvdXRwdXQgb2YgdGV4dC4gVXNlIGEgdmFyaWFibGUgZm9yCisgKiBpdCBpbnN0ZWFkLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtY291bnRfYWRkciA9IE1DT1VOVF9BRERSOworCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmdHJhY2VkX3Rhc2s7CiAKIGVudW0gewpAQCAtMTcxLDcgKzE5Niw2IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGZ0cmFjZV9zaHV0ZG93bl9kaXNhYmxlX2NwdSk7CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZnRyYWNlX3NodXRkb3duX2xvY2spOwogc3RhdGljIERFRklORV9NVVRFWChmdHJhY2VkX2xvY2spOwogc3RhdGljIERFRklORV9NVVRFWChmdHJhY2VfcmVnZXhfbG9jayk7CiAKQEAgLTI5NCwxMyArMzE4LDM3IEBACiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9mcmVlX3JlYyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQogewotCS8qIG5vIGxvY2tpbmcsIG9ubHkgY2FsbGVkIGZyb20ga3N0b3BfbWFjaGluZSAqLwotCiAJcmVjLT5pcCA9ICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9mcmVlX3JlY29yZHM7CiAJZnRyYWNlX2ZyZWVfcmVjb3JkcyA9IHJlYzsKIAlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GUkVFOwogfQogCit2b2lkIGZ0cmFjZV9yZWxlYXNlKHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCXVuc2lnbmVkIGxvbmcgcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZSA9IHMgKyBzaXplOworCWludCBpOworCisJaWYgKGZ0cmFjZV9kaXNhYmxlZCB8fCAhc3RhcnQpCisJCXJldHVybjsKKworCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWZvciAocGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7IHBnOyBwZyA9IHBnLT5uZXh0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZy0+aW5kZXg7IGkrKykgeworCQkJcmVjID0gJnBnLT5yZWNvcmRzW2ldOworCisJCQlpZiAoKHJlYy0+aXAgPj0gcykgJiYgKHJlYy0+aXAgPCBlKSkKKwkJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOworCit9CisKIHN0YXRpYyBzdHJ1Y3QgZHluX2Z0cmFjZSAqZnRyYWNlX2FsbG9jX2R5bl9ub2RlKHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKQEAgLTMzOCw3ICszODYsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBrZXk7CiAJaW50IHJlc2NoZWQ7Ci0JaW50IGF0b21pYzsKIAlpbnQgY3B1OwogCiAJaWYgKCFmdHJhY2VfZW5hYmxlZCB8fCBmdHJhY2VfZGlzYWJsZWQpCkBAIC0zNjgsOSArNDE1LDcgQEAKIAlpZiAoZnRyYWNlX2lwX2luX2hhc2goaXAsIGtleSkpCiAJCWdvdG8gb3V0OwogCi0JYXRvbWljID0gaXJxc19kaXNhYmxlZCgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZ0cmFjZV9zaHV0ZG93bl9sb2NrLCBmbGFncyk7CisJZnRyYWNlX2hhc2hfbG9jayhmbGFncyk7CiAKIAkvKiBUaGlzIGlwIG1heSBoYXZlIGhpdCB0aGUgaGFzaCBiZWZvcmUgdGhlIGxvY2sgKi8KIAlpZiAoZnRyYWNlX2lwX2luX2hhc2goaXAsIGtleSkpCkBAIC0zODcsNyArNDMyLDcgQEAKIAlmdHJhY2VkX3RyaWdnZXIgPSAxOwogCiAgb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmdHJhY2Vfc2h1dGRvd25fbG9jaywgZmxhZ3MpOworCWZ0cmFjZV9oYXNoX3VubG9jayhmbGFncyk7CiAgb3V0OgogCXBlcl9jcHUoZnRyYWNlX3NodXRkb3duX2Rpc2FibGVfY3B1LCBjcHUpLS07CiAKQEAgLTUzMSw2ICs1NzYsMTYgQEAKIAlmdHJhY2VfcGFnZXMtPm5leHQgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRfaXBfaW5zKGNvbnN0IGNoYXIgKmZtdCwgdW5zaWduZWQgY2hhciAqcCkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgZm10KTsKKworCWZvciAoaSA9IDA7IGkgPCBNQ09VTlRfSU5TTl9TSVpFOyBpKyspCisJCXByaW50ayhLRVJOX0NPTlQgIiVzJTAyeCIsIGkgPyAiOiIgOiAiIiwgcFtpXSk7Cit9CisKIHN0YXRpYyBpbnQKIGZ0cmFjZV9jb2RlX2Rpc2FibGUoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKIHsKQEAgLTU0MSwxMCArNTk2LDI3IEBACiAJaXAgPSByZWMtPmlwOwogCiAJbm9wID0gZnRyYWNlX25vcF9yZXBsYWNlKCk7Ci0JY2FsbCA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsIE1DT1VOVF9BRERSKTsKKwljYWxsID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgbWNvdW50X2FkZHIpOwogCiAJZmFpbGVkID0gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBjYWxsLCBub3ApOwogCWlmIChmYWlsZWQpIHsKKwkJc3dpdGNoIChmYWlsZWQpIHsKKwkJY2FzZSAxOgorCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJcHJfaW5mbygiZnRyYWNlIGZhdWx0ZWQgb24gbW9kaWZ5aW5nICIpOworCQkJcHJpbnRfaXBfc3ltKGlwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlXQVJOX09OX09OQ0UoMSk7CisJCQlwcl9pbmZvKCJmdHJhY2UgZmFpbGVkIHRvIG1vZGlmeSAiKTsKKwkJCXByaW50X2lwX3N5bShpcCk7CisJCQlwcmludF9pcF9pbnMoIiBleHBlY3RlZDogIiwgY2FsbCk7CisJCQlwcmludF9pcF9pbnMoIiBhY3R1YWw6ICIsICh1bnNpZ25lZCBjaGFyICopaXApOworCQkJcHJpbnRfaXBfaW5zKCIgcmVwbGFjZTogIiwgbm9wKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCQlicmVhazsKKwkJfQorCiAJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzkyLDQ3ICs4NjQsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGZ0cmFjZWQodm9pZCAqaWdub3JlKQotewotCXVuc2lnbmVkIGxvbmcgdXNlY3M7Ci0KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQkJLyogY2hlY2sgb25jZSBhIHNlY29uZCAqLwotCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQotCQlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKLQkJCWNvbnRpbnVlOwotCi0JCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7Ci0JCW11dGV4X2xvY2soJmZ0cmFjZWRfbG9jayk7Ci0JCWlmICghZnRyYWNlZF9zdXNwZW5kICYmICFmdHJhY2VkX3N0b3AgJiYKLQkJICAgIGZ0cmFjZV91cGRhdGVfY29kZSgpKSB7Ci0JCQl1c2VjcyA9IG5zZWNzX3RvX3VzZWNzKGZ0cmFjZV91cGRhdGVfdGltZSk7Ci0JCQlpZiAoZnRyYWNlX3VwZGF0ZV90b3RfY250ID4gMTAwMDAwKSB7Ci0JCQkJZnRyYWNlX3VwZGF0ZV90b3RfY250ID0gMDsKLQkJCQlwcl9pbmZvKCJobSwgZGZ0cmFjZSBvdmVyZmxvdzogJWx1IGNoYW5nZSVzIgotCQkJCQkiICglbHUgdG90YWwpIGluICVsdSB1c2VjJXNcbiIsCi0JCQkJCWZ0cmFjZV91cGRhdGVfY250LAotCQkJCQlmdHJhY2VfdXBkYXRlX2NudCAhPSAxID8gInMiIDogIiIsCi0JCQkJCWZ0cmFjZV91cGRhdGVfdG90X2NudCwKLQkJCQkJdXNlY3MsIHVzZWNzICE9IDEgPyAicyIgOiAiIik7Ci0JCQkJZnRyYWNlX2Rpc2FibGVkID0gMTsKLQkJCQlXQVJOX09OX09OQ0UoMSk7Ci0JCQl9Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZmdHJhY2VkX2xvY2spOwotCQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7Ci0KLQkJZnRyYWNlX3NodXRkb3duX3JlcGxlbmlzaCgpOwotCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZ0cmFjZV9keW5fdGFibGVfYWxsb2Modm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGZ0cmFjZV9keW5fdGFibGVfYWxsb2ModW5zaWduZWQgbG9uZyBudW1fdG9faW5pdCkKIHsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwogCWludCBjbnQ7CkBAIC04NTksNyArODkxLDkgQEAKIAogCXBnID0gZnRyYWNlX3BhZ2VzID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OwogCi0JY250ID0gTlJfVE9fSU5JVCAvIEVOVFJJRVNfUEVSX1BBR0U7CisJY250ID0gbnVtX3RvX2luaXQgLyBFTlRSSUVTX1BFUl9QQUdFOworCXByX2luZm8oImZ0cmFjZTogYWxsb2NhdGluZyAlbGQgaGFzaCBlbnRyaWVzIGluICVkIHBhZ2VzXG4iLAorCQludW1fdG9faW5pdCwgY250KTsKIAogCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewogCQlwZy0+bmV4dCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwpAQCAtOTAxLDYgKzkzNSw4IEBACiAKIAkoKnBvcykrKzsKIAorCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKICByZXRyeToKIAlpZiAoaXRlci0+aWR4ID49IGl0ZXItPnBnLT5pbmRleCkgewogCQlpZiAoaXRlci0+cGctPm5leHQpIHsKQEAgLTkxMCwxNSArOTQ2LDEzIEBACiAJCX0KIAl9IGVsc2UgewogCQlyZWMgPSAmaXRlci0+cGctPnJlY29yZHNbaXRlci0+aWR4KytdOwotCQlpZiAoKCEoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GQUlMVVJFUykgJiYKKwkJaWYgKChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZSRUUpIHx8CisKKwkJICAgICghKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRkFJTFVSRVMpICYmCiAJCSAgICAgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKSkgfHwKIAogCQkgICAgKChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZBSUxVUkVTKSAmJgotCQkgICAgICghKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKSB8fAotCQkgICAgICAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFKSkpIHx8Ci0KLQkJICAgICgoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GSUxURVIpICYmCi0JCSAgICAgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpIHx8CisJCSAgICAgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkpIHx8CiAKIAkJICAgICgoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9OT1RSQUNFKSAmJgogCQkgICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9OT1RSQUNFKSkpIHsKQEAgLTkyNiw2ICs5NjAsNyBAQAogCQkJZ290byByZXRyeTsKIAkJfQogCX0KKwlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJaXRlci0+cG9zID0gKnBvczsKIApAQCAtMTAzOSw4ICsxMDc0LDggQEAKIAl1bnNpZ25lZCBsb25nIHR5cGUgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7CiAJdW5zaWduZWQgaTsKIAotCS8qIGtlZXAga3N0b3AgbWFjaGluZSBmcm9tIHJ1bm5pbmcgKi8KLQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCisJc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CiAJaWYgKGVuYWJsZSkKIAkJZnRyYWNlX2ZpbHRlcmVkID0gMDsKIAlwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsKQEAgLTEwNTMsNyArMTA4OCw3IEBACiAJCX0KIAkJcGcgPSBwZy0+bmV4dDsKIAl9Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTY1LDggKzEyMDAsOCBAQAogCQl9CiAJfQogCi0JLyoga2VlcCBrc3RvcCBtYWNoaW5lIGZyb20gcnVubmluZyAqLwotCXByZWVtcHRfZGlzYWJsZSgpOworCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlpZiAoZW5hYmxlKQogCQlmdHJhY2VfZmlsdGVyZWQgPSAxOwogCXBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OwpAQCAtMTIwMyw3ICsxMjM4LDcgQEAKIAkJfQogCQlwZyA9IHBnLT5uZXh0OwogCX0KLQlwcmVlbXB0X2VuYWJsZSgpOworCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xNTU2LDYgKzE1OTEsMTE0IEBACiAKIGZzX2luaXRjYWxsKGZ0cmFjZV9pbml0X2RlYnVnZnMpOwogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECitzdGF0aWMgaW50IGZ0cmFjZV9jb252ZXJ0X25vcHModW5zaWduZWQgbG9uZyAqc3RhcnQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kKQoreworCXVuc2lnbmVkIGxvbmcgKnA7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwID0gc3RhcnQ7CisJd2hpbGUgKHAgPCBlbmQpIHsKKwkJYWRkciA9IGZ0cmFjZV9jYWxsX2FkanVzdCgqcCsrKTsKKwkJLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLworCQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKKwkJZnRyYWNlX3JlY29yZF9pcChhZGRyKTsKKwkJc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwkJZnRyYWNlX3NodXRkb3duX3JlcGxlbmlzaCgpOworCX0KKworCS8qIHAgaXMgaWdub3JlZCAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2Z0cmFjZV91cGRhdGVfY29kZShwKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmdHJhY2VfaW5pdF9tb2R1bGUodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkKK3sKKwlpZiAoZnRyYWNlX2Rpc2FibGVkIHx8IHN0YXJ0ID09IGVuZCkKKwkJcmV0dXJuOworCWZ0cmFjZV9jb252ZXJ0X25vcHMoc3RhcnQsIGVuZCk7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfbWNvdW50X2xvY1tdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX21jb3VudF9sb2NbXTsKKwordm9pZCBfX2luaXQgZnRyYWNlX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50LCBhZGRyLCBmbGFnczsKKwlpbnQgcmV0OworCisJLyogS2VlcCB0aGUgZnRyYWNlIHBvaW50ZXIgdG8gdGhlIHN0dWIgKi8KKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX3N0dWI7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZnRyYWNlX2R5bl9hcmNoX2luaXQoJmFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIGZ0cmFjZV9keW5fYXJjaF9pbml0IHBsYWNlcyB0aGUgcmV0dXJuIGNvZGUgaW4gYWRkciAqLworCWlmIChhZGRyKQorCQlnb3RvIGZhaWxlZDsKKworCWNvdW50ID0gX19zdG9wX21jb3VudF9sb2MgLSBfX3N0YXJ0X21jb3VudF9sb2M7CisKKwlyZXQgPSBmdHJhY2VfZHluX3RhYmxlX2FsbG9jKGNvdW50KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCWxhc3RfZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2VfZW5hYmxlZCA9IDE7CisKKwlyZXQgPSBmdHJhY2VfY29udmVydF9ub3BzKF9fc3RhcnRfbWNvdW50X2xvYywKKwkJCQkgIF9fc3RvcF9tY291bnRfbG9jKTsKKworCXJldHVybjsKKyBmYWlsZWQ6CisJZnRyYWNlX2Rpc2FibGVkID0gMTsKK30KKyNlbHNlIC8qIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRCAqLworc3RhdGljIGludCBmdHJhY2VkKHZvaWQgKmlnbm9yZSkKK3sKKwl1bnNpZ25lZCBsb25nIHVzZWNzOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCS8qIGNoZWNrIG9uY2UgYSBzZWNvbmQgKi8KKwkJc2NoZWR1bGVfdGltZW91dChIWik7CisKKwkJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCQljb250aW51ZTsKKworCQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCQltdXRleF9sb2NrKCZmdHJhY2VkX2xvY2spOworCQlpZiAoIWZ0cmFjZWRfc3VzcGVuZCAmJiAhZnRyYWNlZF9zdG9wICYmCisJCSAgICBmdHJhY2VfdXBkYXRlX2NvZGUoKSkgeworCQkJdXNlY3MgPSBuc2Vjc190b191c2VjcyhmdHJhY2VfdXBkYXRlX3RpbWUpOworCQkJaWYgKGZ0cmFjZV91cGRhdGVfdG90X2NudCA+IDEwMDAwMCkgeworCQkJCWZ0cmFjZV91cGRhdGVfdG90X2NudCA9IDA7CisJCQkJcHJfaW5mbygiaG0sIGRmdHJhY2Ugb3ZlcmZsb3c6ICVsdSBjaGFuZ2UlcyIKKwkJCQkJIiAoJWx1IHRvdGFsKSBpbiAlbHUgdXNlYyVzXG4iLAorCQkJCQlmdHJhY2VfdXBkYXRlX2NudCwKKwkJCQkJZnRyYWNlX3VwZGF0ZV9jbnQgIT0gMSA/ICJzIiA6ICIiLAorCQkJCQlmdHJhY2VfdXBkYXRlX3RvdF9jbnQsCisJCQkJCXVzZWNzLCB1c2VjcyAhPSAxID8gInMiIDogIiIpOworCQkJCWZ0cmFjZV9kaXNhYmxlZCA9IDE7CisJCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmZnRyYWNlZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCisJCWZ0cmFjZV9zaHV0ZG93bl9yZXBsZW5pc2goKTsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBmdHJhY2VfZHluYW1pY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtMTU3Miw3ICsxNzE1LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JcmV0ID0gZnRyYWNlX2R5bl90YWJsZV9hbGxvYygpOworCXJldCA9IGZ0cmFjZV9keW5fdGFibGVfYWxsb2MoTlJfVE9fSU5JVCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTE1OTMsNiArMTczNiw4IEBACiB9CiAKIGNvcmVfaW5pdGNhbGwoZnRyYWNlX2R5bmFtaWNfaW5pdCk7CisjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JEICovCisKICNlbHNlCiAjIGRlZmluZSBmdHJhY2Vfc3RhcnR1cCgpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2Vfc2h1dGRvd24oKQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGFmMWZlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTAsMCArMSwyMDE0IEBACisvKgorICogR2VuZXJpYyByaW5nIGJ1ZmZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogdXNlZCBmb3Igc2NoZWRfY2xvY2soKSAoZm9yIG5vdykgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisvKiBVcCB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgdGhlIFRJTUVfRVhURU5UUyBhbmQgbm9ybWFsaXphdGlvbiAqLworI2RlZmluZSBERUJVR19TSElGVCAwCisKKy8qIEZJWE1FISEhICovCit1NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChpbnQgY3B1KQoreworCS8qIHNoaWZ0IHRvIGRlYnVnL3Rlc3Qgbm9ybWFsaXphdGlvbiBhbmQgVElNRV9FWFRFTlRTICovCisJcmV0dXJuIHNjaGVkX2Nsb2NrKCkgPDwgREVCVUdfU0hJRlQ7Cit9CisKK3ZvaWQgcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoaW50IGNwdSwgdTY0ICp0cykKK3sKKwkvKiBKdXN0IHN0dXBpZCB0ZXN0aW5nIHRoZSBub3JtYWxpemUgZnVuY3Rpb24gYW5kIGRlbHRhcyAqLworCSp0cyA+Pj0gREVCVUdfU0hJRlQ7Cit9CisKKyNkZWZpbmUgUkJfRVZOVF9IRFJfU0laRSAoc2l6ZW9mKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCkpCisjZGVmaW5lIFJCX0FMSUdOTUVOVF9TSElGVAkyCisjZGVmaW5lIFJCX0FMSUdOTUVOVAkJKDEgPDwgUkJfQUxJR05NRU5UX1NISUZUKQorI2RlZmluZSBSQl9NQVhfU01BTExfREFUQQkyOAorCitlbnVtIHsKKwlSQl9MRU5fVElNRV9FWFRFTkQgPSA4LAorCVJCX0xFTl9USU1FX1NUQU1QID0gMTYsCit9OworCisvKiBpbmxpbmUgZm9yIHJpbmcgYnVmZmVyIGZhc3QgcGF0aHMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3JiX2V2ZW50X2xlbmd0aChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXVuc2lnbmVkIGxlbmd0aDsKKworCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgorCQkvKiB1bmRlZmluZWQgKi8KKwkJcmV0dXJuIC0xOworCisJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6CisJCXJldHVybiBSQl9MRU5fVElNRV9FWFRFTkQ7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQlyZXR1cm4gUkJfTEVOX1RJTUVfU1RBTVA7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9EQVRBOgorCQlpZiAoZXZlbnQtPmxlbikKKwkJCWxlbmd0aCA9IGV2ZW50LT5sZW4gPDwgUkJfQUxJR05NRU5UX1NISUZUOworCQllbHNlCisJCQlsZW5ndGggPSBldmVudC0+YXJyYXlbMF07CisJCXJldHVybiBsZW5ndGggKyBSQl9FVk5UX0hEUl9TSVpFOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwkvKiBub3QgaGl0ICovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfZXZlbnRfbGVuZ3RoIC0gcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGV2ZW50CisgKiBAZXZlbnQ6IHRoZSBldmVudCB0byBnZXQgdGhlIGxlbmd0aCBvZgorICovCit1bnNpZ25lZCByaW5nX2J1ZmZlcl9ldmVudF9sZW5ndGgoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KTsKK30KKworLyogaW5saW5lIGZvciByaW5nIGJ1ZmZlciBmYXN0IHBhdGhzICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorcmJfZXZlbnRfZGF0YShzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCUJVR19PTihldmVudC0+dHlwZSAhPSBSSU5HQlVGX1RZUEVfREFUQSk7CisJLyogSWYgbGVuZ3RoIGlzIGluIGxlbiBmaWVsZCwgdGhlbiBhcnJheVswXSBoYXMgdGhlIGRhdGEgKi8KKwlpZiAoZXZlbnQtPmxlbikKKwkJcmV0dXJuICh2b2lkICopJmV2ZW50LT5hcnJheVswXTsKKwkvKiBPdGhlcndpc2UgbGVuZ3RoIGlzIGluIGFycmF5WzBdIGFuZCBhcnJheVsxXSBoYXMgdGhlIGRhdGEgKi8KKwlyZXR1cm4gKHZvaWQgKikmZXZlbnQtPmFycmF5WzFdOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEgLSByZXR1cm4gdGhlIGRhdGEgb2YgdGhlIGV2ZW50CisgKiBAZXZlbnQ6IHRoZSBldmVudCB0byBnZXQgdGhlIGRhdGEgZnJvbQorICovCit2b2lkICpyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIHJiX2V2ZW50X2RhdGEoZXZlbnQpOworfQorCisjZGVmaW5lIGZvcl9lYWNoX2J1ZmZlcl9jcHUoYnVmZmVyLCBjcHUpCQlcCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBidWZmZXItPmNwdW1hc2spCisKKyNkZWZpbmUgVFNfU0hJRlQJMjcKKyNkZWZpbmUgVFNfTUFTSwkJKCgxVUxMIDw8IFRTX1NISUZUKSAtIDEpCisjZGVmaW5lIFRTX0RFTFRBX1RFU1QJKH5UU19NQVNLKQorCisvKgorICogVGhpcyBoYWNrIHN0b2xlbiBmcm9tIG1tL3Nsb2IuYy4KKyAqIFdlIGNhbiBzdG9yZSBwZXIgcGFnZSB0aW1pbmcgaW5mb3JtYXRpb24gaW4gdGhlIHBhZ2UgZnJhbWUgb2YgdGhlIHBhZ2UuCisgKiBUaGFua3MgdG8gUGV0ZXIgWmlqbHN0cmEgZm9yIHN1Z2dlc3RpbmcgdGhpcyBpZGVhLgorICovCitzdHJ1Y3QgYnVmZmVyX3BhZ2UgeworCXU2NAkJIHRpbWVfc3RhbXA7CS8qIHBhZ2UgdGltZSBzdGFtcCAqLworCWxvY2FsX3QJCSB3cml0ZTsJCS8qIGluZGV4IGZvciBuZXh0IHdyaXRlICovCisJbG9jYWxfdAkJIGNvbW1pdDsJLyogd3JpdGUgY29tbWl0ZWQgaW5kZXggKi8KKwl1bnNpZ25lZAkgcmVhZDsJCS8qIGluZGV4IGZvciBuZXh0IHJlYWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IG9mIGZyZWUgcGFnZXMgKi8KKwl2b2lkICpwYWdlOwkJCS8qIEFjdHVhbCBkYXRhIHBhZ2UgKi8KK307CisKKy8qCisgKiBBbHNvIHN0b2xlbiBmcm9tIG1tL3Nsb2IuYy4gVGhhbmtzIHRvIE1hdGhpZXUgRGVzbm95ZXJzIGZvciBwb2ludGluZworICogdGhpcyBpc3N1ZSBvdXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2J1ZmZlcl9wYWdlKHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCit7CisJaWYgKGJwYWdlLT5wYWdlKQorCQlfX2ZyZWVfcGFnZShicGFnZS0+cGFnZSk7CisJa2ZyZWUoYnBhZ2UpOworfQorCisvKgorICogV2UgbmVlZCB0byBmaXQgdGhlIHRpbWVfc3RhbXAgZGVsdGEgaW50byAyNyBiaXRzLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X3RpbWVfc3RhbXAodTY0IGRlbHRhKQoreworCWlmIChkZWx0YSAmIFRTX0RFTFRBX1RFU1QpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisjZGVmaW5lIEJVRl9QQUdFX1NJWkUgUEFHRV9TSVpFCisKKy8qCisgKiBoZWFkX3BhZ2UgPT0gdGFpbF9wYWdlICYmIGhlYWQgPT0gdGFpbCB0aGVuIGJ1ZmZlciBpcyBlbXB0eS4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgeworCWludAkJCQljcHU7CisJc3RydWN0IHJpbmdfYnVmZmVyCQkqYnVmZmVyOworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBsb2NrX2NsYXNzX2tleQkJbG9ja19rZXk7CisJc3RydWN0IGxpc3RfaGVhZAkJcGFnZXM7CisJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqaGVhZF9wYWdlOwkvKiByZWFkIGZyb20gaGVhZCAqLworCXN0cnVjdCBidWZmZXJfcGFnZQkJKnRhaWxfcGFnZTsJLyogd3JpdGUgdG8gdGFpbCAqLworCXN0cnVjdCBidWZmZXJfcGFnZQkJKmNvbW1pdF9wYWdlOwkvKiBjb21taXRlZCBwYWdlcyAqLworCXN0cnVjdCBidWZmZXJfcGFnZQkJKnJlYWRlcl9wYWdlOworCXVuc2lnbmVkIGxvbmcJCQlvdmVycnVuOworCXVuc2lnbmVkIGxvbmcJCQllbnRyaWVzOworCXU2NAkJCQl3cml0ZV9zdGFtcDsKKwl1NjQJCQkJcmVhZF9zdGFtcDsKKwlhdG9taWNfdAkJCXJlY29yZF9kaXNhYmxlZDsKK307CisKK3N0cnVjdCByaW5nX2J1ZmZlciB7CisJdW5zaWduZWQgbG9uZwkJCXNpemU7CisJdW5zaWduZWQJCQlwYWdlczsKKwl1bnNpZ25lZAkJCWZsYWdzOworCWludAkJCQljcHVzOworCWNwdW1hc2tfdAkJCWNwdW1hc2s7CisJYXRvbWljX3QJCQlyZWNvcmRfZGlzYWJsZWQ7CisKKwlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKKworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1CSoqYnVmZmVyczsKK307CisKK3N0cnVjdCByaW5nX2J1ZmZlcl9pdGVyIHsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdQkqY3B1X2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nCQkJaGVhZDsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpoZWFkX3BhZ2U7CisJdTY0CQkJCXJlYWRfc3RhbXA7Cit9OworCisjZGVmaW5lIFJCX1dBUk5fT04oYnVmZmVyLCBjb25kKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmICh1bmxpa2VseShjb25kKSkgewkJCQlcCisJCQlhdG9taWNfaW5jKCZidWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CVwKKwkJCVdBUk5fT04oMSk7CQkJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJCX1dBUk5fT05fUkVUKGJ1ZmZlciwgY29uZCkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAodW5saWtlbHkoY29uZCkpIHsJCQkJXAorCQkJYXRvbWljX2luYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwlcCisJCQlXQVJOX09OKDEpOwkJCQlcCisJCQlyZXR1cm4gLTE7CQkJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJCX1dBUk5fT05fT05DRShidWZmZXIsIGNvbmQpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJc3RhdGljIGludCBvbmNlOwkJCQlcCisJCWlmICh1bmxpa2VseShjb25kKSAmJiAhb25jZSkgewkJCVwKKwkJCW9uY2UrKzsJCQkJCVwKKwkJCWF0b21pY19pbmMoJmJ1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsJXAorCQkJV0FSTl9PTigxKTsJCQkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogY2hlY2tfcGFnZXMgLSBpbnRlZ3JpdHkgY2hlY2sgb2YgYnVmZmVyIHBhZ2VzCisgKiBAY3B1X2J1ZmZlcjogQ1BVIGJ1ZmZlciB3aXRoIHBhZ2VzIHRvIHRlc3QKKyAqCisgKiBBcyBhIHNhZnR5IG1lYXN1cmUgd2UgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHBhZ2VzIGhhdmUgbm90CisgKiBiZWVuIGNvcnJ1cHRlZC4KKyAqLworc3RhdGljIGludCByYl9jaGVja19wYWdlcyhzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmNwdV9idWZmZXItPnBhZ2VzOworCXN0cnVjdCBidWZmZXJfcGFnZSAqcGFnZSwgKnRtcDsKKworCVJCX1dBUk5fT05fUkVUKGNwdV9idWZmZXIsIGhlYWQtPm5leHQtPnByZXYgIT0gaGVhZCk7CisJUkJfV0FSTl9PTl9SRVQoY3B1X2J1ZmZlciwgaGVhZC0+cHJldi0+bmV4dCAhPSBoZWFkKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsIGhlYWQsIGxpc3QpIHsKKwkJUkJfV0FSTl9PTl9SRVQoY3B1X2J1ZmZlciwKKwkJCSAgICAgICBwYWdlLT5saXN0Lm5leHQtPnByZXYgIT0gJnBhZ2UtPmxpc3QpOworCQlSQl9XQVJOX09OX1JFVChjcHVfYnVmZmVyLAorCQkJICAgICAgIHBhZ2UtPmxpc3QucHJldi0+bmV4dCAhPSAmcGFnZS0+bGlzdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmJfYWxsb2NhdGVfcGFnZXMoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCQkgICAgIHVuc2lnbmVkIG5yX3BhZ2VzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmY3B1X2J1ZmZlci0+cGFnZXM7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlMSVNUX0hFQUQocGFnZXMpOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlwYWdlID0ga3phbGxvY19ub2RlKEFMSUdOKHNpemVvZigqcGFnZSksIGNhY2hlX2xpbmVfc2l6ZSgpKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1X2J1ZmZlci0+Y3B1KSk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gZnJlZV9wYWdlczsKKwkJbGlzdF9hZGQoJnBhZ2UtPmxpc3QsICZwYWdlcyk7CisKKwkJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFhZGRyKQorCQkJZ290byBmcmVlX3BhZ2VzOworCQlwYWdlLT5wYWdlID0gKHZvaWQgKilhZGRyOworCX0KKworCWxpc3Rfc3BsaWNlKCZwYWdlcywgaGVhZCk7CisKKwlyYl9jaGVja19wYWdlcyhjcHVfYnVmZmVyKTsKKworCXJldHVybiAwOworCisgZnJlZV9wYWdlczoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLCAmcGFnZXMsIGxpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bGlzdCk7CisJCWZyZWVfYnVmZmVyX3BhZ2UocGFnZSk7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKgorcmJfYWxsb2NhdGVfY3B1X2J1ZmZlcihzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCByZXQ7CisKKwljcHVfYnVmZmVyID0ga3phbGxvY19ub2RlKEFMSUdOKHNpemVvZigqY3B1X2J1ZmZlciksIGNhY2hlX2xpbmVfc2l6ZSgpKSwKKwkJCQkgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGNwdSkpOworCWlmICghY3B1X2J1ZmZlcikKKwkJcmV0dXJuIE5VTEw7CisKKwljcHVfYnVmZmVyLT5jcHUgPSBjcHU7CisJY3B1X2J1ZmZlci0+YnVmZmVyID0gYnVmZmVyOworCXNwaW5fbG9ja19pbml0KCZjcHVfYnVmZmVyLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY3B1X2J1ZmZlci0+cGFnZXMpOworCisJcGFnZSA9IGt6YWxsb2Nfbm9kZShBTElHTihzaXplb2YoKnBhZ2UpLCBjYWNoZV9saW5lX3NpemUoKSksCisJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CisJaWYgKCFwYWdlKQorCQlnb3RvIGZhaWxfZnJlZV9idWZmZXI7CisKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSA9IHBhZ2U7CisJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWFkZHIpCisJCWdvdG8gZmFpbF9mcmVlX3JlYWRlcjsKKwlwYWdlLT5wYWdlID0gKHZvaWQgKilhZGRyOworCisJSU5JVF9MSVNUX0hFQUQoJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0KTsKKworCXJldCA9IHJiX2FsbG9jYXRlX3BhZ2VzKGNwdV9idWZmZXIsIGJ1ZmZlci0+cGFnZXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxfZnJlZV9yZWFkZXI7CisKKwljcHVfYnVmZmVyLT5oZWFkX3BhZ2UKKwkJPSBsaXN0X2VudHJ5KGNwdV9idWZmZXItPnBhZ2VzLm5leHQsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CisJY3B1X2J1ZmZlci0+dGFpbF9wYWdlID0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisKKwlyZXR1cm4gY3B1X2J1ZmZlcjsKKworIGZhaWxfZnJlZV9yZWFkZXI6CisJZnJlZV9idWZmZXJfcGFnZShjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSk7CisKKyBmYWlsX2ZyZWVfYnVmZmVyOgorCWtmcmVlKGNwdV9idWZmZXIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByYl9mcmVlX2NwdV9idWZmZXIoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZjcHVfYnVmZmVyLT5wYWdlczsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnBhZ2UsICp0bXA7CisKKwlsaXN0X2RlbF9pbml0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdCk7CisJZnJlZV9idWZmZXJfcGFnZShjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLCBoZWFkLCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxpc3QpOworCQlmcmVlX2J1ZmZlcl9wYWdlKHBhZ2UpOworCX0KKwlrZnJlZShjcHVfYnVmZmVyKTsKK30KKworLyoKKyAqIENhdXNlcyBjb21waWxlIGVycm9ycyBpZiB0aGUgc3RydWN0IGJ1ZmZlcl9wYWdlIGdldHMgYmlnZ2VyCisgKiB0aGFuIHRoZSBzdHJ1Y3QgcGFnZS4KKyAqLworZXh0ZXJuIGludCByaW5nX2J1ZmZlcl9wYWdlX3Rvb19iaWcodm9pZCk7CisKKy8qKgorICogcmluZ19idWZmZXJfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyByaW5nX2J1ZmZlcgorICogQHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIHRoYXQgaXMgbmVlZGVkLgorICogQGZsYWdzOiBhdHRyaWJ1dGVzIHRvIHNldCBmb3IgdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqIEN1cnJlbnRseSB0aGUgb25seSBmbGFnIHRoYXQgaXMgYXZhaWxhYmxlIGlzIHRoZSBSQl9GTF9PVkVSV1JJVEUKKyAqIGZsYWcuIFRoaXMgZmxhZyBtZWFucyB0aGF0IHRoZSBidWZmZXIgd2lsbCBvdmVyd3JpdGUgb2xkIGRhdGEKKyAqIHdoZW4gdGhlIGJ1ZmZlciB3cmFwcy4gSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQsIHRoZSBidWZmZXIgd2lsbAorICogZHJvcCBkYXRhIHdoZW4gdGhlIHRhaWwgaGl0cyB0aGUgaGVhZC4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyICpyaW5nX2J1ZmZlcl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOworCWludCBic2l6ZTsKKwlpbnQgY3B1OworCisJLyogUGFyYW5vaWQhIE9wdGltaXplcyBvdXQgd2hlbiBhbGwgaXMgd2VsbCAqLworCWlmIChzaXplb2Yoc3RydWN0IGJ1ZmZlcl9wYWdlKSA+IHNpemVvZihzdHJ1Y3QgcGFnZSkpCisJCXJpbmdfYnVmZmVyX3BhZ2VfdG9vX2JpZygpOworCisKKwkvKiBrZWVwIGl0IGluIGl0cyBvd24gY2FjaGUgbGluZSAqLworCWJ1ZmZlciA9IGt6YWxsb2MoQUxJR04oc2l6ZW9mKCpidWZmZXIpLCBjYWNoZV9saW5lX3NpemUoKSksCisJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBOVUxMOworCisJYnVmZmVyLT5wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBCVUZfUEFHRV9TSVpFKTsKKwlidWZmZXItPmZsYWdzID0gZmxhZ3M7CisKKwkvKiBuZWVkIGF0IGxlYXN0IHR3byBwYWdlcyAqLworCWlmIChidWZmZXItPnBhZ2VzID09IDEpCisJCWJ1ZmZlci0+cGFnZXMrKzsKKworCWJ1ZmZlci0+Y3B1bWFzayA9IGNwdV9wb3NzaWJsZV9tYXA7CisJYnVmZmVyLT5jcHVzID0gbnJfY3B1X2lkczsKKworCWJzaXplID0gc2l6ZW9mKHZvaWQgKikgKiBucl9jcHVfaWRzOworCWJ1ZmZlci0+YnVmZmVycyA9IGt6YWxsb2MoQUxJR04oYnNpemUsIGNhY2hlX2xpbmVfc2l6ZSgpKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyLT5idWZmZXJzKQorCQlnb3RvIGZhaWxfZnJlZV9idWZmZXI7CisKKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWJ1ZmZlci0+YnVmZmVyc1tjcHVdID0KKwkJCXJiX2FsbG9jYXRlX2NwdV9idWZmZXIoYnVmZmVyLCBjcHUpOworCQlpZiAoIWJ1ZmZlci0+YnVmZmVyc1tjcHVdKQorCQkJZ290byBmYWlsX2ZyZWVfYnVmZmVyczsKKwl9CisKKwltdXRleF9pbml0KCZidWZmZXItPm11dGV4KTsKKworCXJldHVybiBidWZmZXI7CisKKyBmYWlsX2ZyZWVfYnVmZmVyczoKKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWlmIChidWZmZXItPmJ1ZmZlcnNbY3B1XSkKKwkJCXJiX2ZyZWVfY3B1X2J1ZmZlcihidWZmZXItPmJ1ZmZlcnNbY3B1XSk7CisJfQorCWtmcmVlKGJ1ZmZlci0+YnVmZmVycyk7CisKKyBmYWlsX2ZyZWVfYnVmZmVyOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfZnJlZSAtIGZyZWUgYSByaW5nIGJ1ZmZlci4KKyAqIEBidWZmZXI6IHRoZSBidWZmZXIgdG8gZnJlZS4KKyAqLwordm9pZAorcmluZ19idWZmZXJfZnJlZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkKKwkJcmJfZnJlZV9jcHVfYnVmZmVyKGJ1ZmZlci0+YnVmZmVyc1tjcHVdKTsKKworCWtmcmVlKGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHJiX3Jlc2V0X2NwdShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcik7CisKK3N0YXRpYyB2b2lkCityYl9yZW1vdmVfcGFnZXMoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsIHVuc2lnbmVkIG5yX3BhZ2VzKQoreworCXN0cnVjdCBidWZmZXJfcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXVuc2lnbmVkIGk7CisKKwlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworCXN5bmNocm9uaXplX3NjaGVkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlCVUdfT04obGlzdF9lbXB0eSgmY3B1X2J1ZmZlci0+cGFnZXMpKTsKKwkJcCA9IGNwdV9idWZmZXItPnBhZ2VzLm5leHQ7CisJCXBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxpc3QpOworCQlmcmVlX2J1ZmZlcl9wYWdlKHBhZ2UpOworCX0KKwlCVUdfT04obGlzdF9lbXB0eSgmY3B1X2J1ZmZlci0+cGFnZXMpKTsKKworCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKworCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOworCisJYXRvbWljX2RlYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKKworfQorCitzdGF0aWMgdm9pZAorcmJfaW5zZXJ0X3BhZ2VzKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQlzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJdW5zaWduZWQgaTsKKworCWF0b21pY19pbmMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CisJc3luY2hyb25pemVfc2NoZWQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCUJVR19PTihsaXN0X2VtcHR5KHBhZ2VzKSk7CisJCXAgPSBwYWdlcy0+bmV4dDsKKwkJcGFnZSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJ1ZmZlcl9wYWdlLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxpc3QsICZjcHVfYnVmZmVyLT5wYWdlcyk7CisJfQorCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKworCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOworCisJYXRvbWljX2RlYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl9yZXNpemUgLSByZXNpemUgdGhlIHJpbmcgYnVmZmVyCisgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRvIHJlc2l6ZS4KKyAqIEBzaXplOiB0aGUgbmV3IHNpemUuCisgKgorICogVGhlIHRyYWNlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhhdCB0aGUgYnVmZmVyIGlzCisgKiBub3QgYmVpbmcgdXNlZCB3aGlsZSBjaGFuZ2luZyB0aGUgc2l6ZS4KKyAqIE5vdGU6IFdlIG1heSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgYWJvdmUgcmVxdWlyZW1lbnQgYnkgdXNpbmcKKyAqICBSQ1Ugc3luY2hyb25pemF0aW9ucy4KKyAqCisgKiBNaW5pbXVtIHNpemUgaXMgMiAqIEJVRl9QQUdFX1NJWkUuCisgKgorICogUmV0dXJucyAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgcmluZ19idWZmZXJfcmVzaXplKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJdW5zaWduZWQgbnJfcGFnZXMsIHJtX3BhZ2VzLCBuZXdfcGFnZXM7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3NpemU7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCUxJU1RfSEVBRChwYWdlcyk7CisJaW50IGksIGNwdTsKKworCXNpemUgPSBESVZfUk9VTkRfVVAoc2l6ZSwgQlVGX1BBR0VfU0laRSk7CisJc2l6ZSAqPSBCVUZfUEFHRV9TSVpFOworCWJ1ZmZlcl9zaXplID0gYnVmZmVyLT5wYWdlcyAqIEJVRl9QQUdFX1NJWkU7CisKKwkvKiB3ZSBuZWVkIGEgbWluaW11bSBvZiB0d28gcGFnZXMgKi8KKwlpZiAoc2l6ZSA8IEJVRl9QQUdFX1NJWkUgKiAyKQorCQlzaXplID0gQlVGX1BBR0VfU0laRSAqIDI7CisKKwlpZiAoc2l6ZSA9PSBidWZmZXJfc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisKKwltdXRleF9sb2NrKCZidWZmZXItPm11dGV4KTsKKworCW5yX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIEJVRl9QQUdFX1NJWkUpOworCisJaWYgKHNpemUgPCBidWZmZXJfc2l6ZSkgeworCisJCS8qIGVhc3kgY2FzZSwganVzdCBmcmVlIHBhZ2VzICovCisJCUJVR19PTihucl9wYWdlcyA+PSBidWZmZXItPnBhZ2VzKTsKKworCQlybV9wYWdlcyA9IGJ1ZmZlci0+cGFnZXMgLSBucl9wYWdlczsKKworCQlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCQljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CisJCQlyYl9yZW1vdmVfcGFnZXMoY3B1X2J1ZmZlciwgcm1fcGFnZXMpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhpcyBpcyBhIGJpdCBtb3JlIGRpZmZpY3VsdC4gV2Ugb25seSB3YW50IHRvIGFkZCBwYWdlcworCSAqIHdoZW4gd2UgY2FuIGFsbG9jYXRlIGVub3VnaCBmb3IgYWxsIENQVXMuIFdlIGRvIHRoaXMKKwkgKiBieSBhbGxvY2F0aW5nIGFsbCB0aGUgcGFnZXMgYW5kIHN0b3JpbmcgdGhlbSBvbiBhIGxvY2FsCisJICogbGluayBsaXN0LiBJZiB3ZSBzdWNjZWVkIGluIG91ciBhbGxvY2F0aW9uLCB0aGVuIHdlCisJICogYWRkIHRoZXNlIHBhZ2VzIHRvIHRoZSBjcHVfYnVmZmVycy4gT3RoZXJ3aXNlIHdlIGp1c3QgZnJlZQorCSAqIHRoZW0gYWxsIGFuZCByZXR1cm4gLUVOT01FTTsKKwkgKi8KKwlCVUdfT04obnJfcGFnZXMgPD0gYnVmZmVyLT5wYWdlcyk7CisJbmV3X3BhZ2VzID0gbnJfcGFnZXMgLSBidWZmZXItPnBhZ2VzOworCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbmV3X3BhZ2VzOyBpKyspIHsKKwkJCXBhZ2UgPSBremFsbG9jX25vZGUoQUxJR04oc2l6ZW9mKCpwYWdlKSwKKwkJCQkJCSAgY2FjaGVfbGluZV9zaXplKCkpLAorCQkJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CisJCQlpZiAoIXBhZ2UpCisJCQkJZ290byBmcmVlX3BhZ2VzOworCQkJbGlzdF9hZGQoJnBhZ2UtPmxpc3QsICZwYWdlcyk7CisJCQlhZGRyID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQkJaWYgKCFhZGRyKQorCQkJCWdvdG8gZnJlZV9wYWdlczsKKwkJCXBhZ2UtPnBhZ2UgPSAodm9pZCAqKWFkZHI7CisJCX0KKwl9CisKKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwkJcmJfaW5zZXJ0X3BhZ2VzKGNwdV9idWZmZXIsICZwYWdlcywgbmV3X3BhZ2VzKTsKKwl9CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnBhZ2VzKSk7CisKKyBvdXQ6CisJYnVmZmVyLT5wYWdlcyA9IG5yX3BhZ2VzOworCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7CisKKwlyZXR1cm4gc2l6ZTsKKworIGZyZWVfcGFnZXM6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHRtcCwgJnBhZ2VzLCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxpc3QpOworCQlmcmVlX2J1ZmZlcl9wYWdlKHBhZ2UpOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmJfbnVsbF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORzsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpfX3JiX3BhZ2VfaW5kZXgoc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlLCB1bnNpZ25lZCBpbmRleCkKK3sKKwlyZXR1cm4gcGFnZS0+cGFnZSArIGluZGV4OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityYl9yZWFkZXJfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJcmV0dXJuIF9fcmJfcGFnZV9pbmRleChjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSwKKwkJCSAgICAgICBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JiX2hlYWRfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJcmV0dXJuIF9fcmJfcGFnZV9pbmRleChjcHVfYnVmZmVyLT5oZWFkX3BhZ2UsCisJCQkgICAgICAgY3B1X2J1ZmZlci0+aGVhZF9wYWdlLT5yZWFkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgorcmJfaXRlcl9oZWFkX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQoreworCXJldHVybiBfX3JiX3BhZ2VfaW5kZXgoaXRlci0+aGVhZF9wYWdlLCBpdGVyLT5oZWFkKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCByYl9wYWdlX3dyaXRlKHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCit7CisJcmV0dXJuIGxvY2FsX3JlYWQoJmJwYWdlLT53cml0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmJfcGFnZV9jb21taXQoc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSkKK3sKKwlyZXR1cm4gbG9jYWxfcmVhZCgmYnBhZ2UtPmNvbW1pdCk7Cit9CisKKy8qIFNpemUgaXMgZGV0ZXJtaW5lZCBieSB3aGF0IGhhcyBiZWVuIGNvbW1pdGVkICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX3BhZ2Vfc2l6ZShzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlKQoreworCXJldHVybiByYl9wYWdlX2NvbW1pdChicGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3JiX2NvbW1pdF9pbmRleChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlyZXR1cm4gcmJfcGFnZV9jb21taXQoY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX2hlYWRfc2l6ZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlyZXR1cm4gcmJfcGFnZV9jb21taXQoY3B1X2J1ZmZlci0+aGVhZF9wYWdlKTsKK30KKworLyoKKyAqIFdoZW4gdGhlIHRhaWwgaGl0cyB0aGUgaGVhZCBhbmQgdGhlIGJ1ZmZlciBpcyBpbiBvdmVyd3JpdGUgbW9kZSwKKyAqIHRoZSBoZWFkIGp1bXBzIHRvIHRoZSBuZXh0IHBhZ2UgYW5kIGFsbCBjb250ZW50IG9uIHRoZSBwcmV2aW91cworICogcGFnZSBpcyBkaXNjYXJkZWQuIEJ1dCBiZWZvcmUgZG9pbmcgc28sIHdlIHVwZGF0ZSB0aGUgb3ZlcnJ1bgorICogdmFyaWFibGUgb2YgdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgcmJfdXBkYXRlX292ZXJmbG93KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBoZWFkOworCisJZm9yIChoZWFkID0gMDsgaGVhZCA8IHJiX2hlYWRfc2l6ZShjcHVfYnVmZmVyKTsKKwkgICAgIGhlYWQgKz0gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KSkgeworCisJCWV2ZW50ID0gX19yYl9wYWdlX2luZGV4KGNwdV9idWZmZXItPmhlYWRfcGFnZSwgaGVhZCk7CisJCUJVR19PTihyYl9udWxsX2V2ZW50KGV2ZW50KSk7CisJCS8qIE9ubHkgY291bnQgZGF0YSBlbnRyaWVzICovCisJCWlmIChldmVudC0+dHlwZSAhPSBSSU5HQlVGX1RZUEVfREFUQSkKKwkJCWNvbnRpbnVlOworCQljcHVfYnVmZmVyLT5vdmVycnVuKys7CisJCWNwdV9idWZmZXItPmVudHJpZXMtLTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYl9pbmNfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX3BhZ2UgKipwYWdlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnAgPSAoKnBhZ2UpLT5saXN0Lm5leHQ7CisKKwlpZiAocCA9PSAmY3B1X2J1ZmZlci0+cGFnZXMpCisJCXAgPSBwLT5uZXh0OworCisJKnBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3JiX2V2ZW50X2luZGV4KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpZXZlbnQ7CisKKwlyZXR1cm4gKGFkZHIgJiB+UEFHRV9NQVNLKSAtIChQQUdFX1NJWkUgLSBCVUZfUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JiX2lzX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKworCWluZGV4ID0gcmJfZXZlbnRfaW5kZXgoZXZlbnQpOworCWFkZHIgJj0gUEFHRV9NQVNLOworCisJcmV0dXJuIGNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5wYWdlID09ICh2b2lkICopYWRkciAmJgorCQlyYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikgPT0gaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmJfc2V0X2NvbW1pdF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKworCWluZGV4ID0gcmJfZXZlbnRfaW5kZXgoZXZlbnQpOworCWFkZHIgJj0gUEFHRV9NQVNLOworCisJd2hpbGUgKGNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5wYWdlICE9ICh2b2lkICopYWRkcikgeworCQlSQl9XQVJOX09OKGNwdV9idWZmZXIsCisJCQkgICBjcHVfYnVmZmVyLT5jb21taXRfcGFnZSA9PSBjcHVfYnVmZmVyLT50YWlsX3BhZ2UpOworCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+Y29tbWl0ID0KKwkJCWNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT53cml0ZTsKKwkJcmJfaW5jX3BhZ2UoY3B1X2J1ZmZlciwgJmNwdV9idWZmZXItPmNvbW1pdF9wYWdlKTsKKwkJY3B1X2J1ZmZlci0+d3JpdGVfc3RhbXAgPSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+dGltZV9zdGFtcDsKKwl9CisKKwkvKiBOb3cgc2V0IHRoZSBjb21taXQgdG8gdGhlIGV2ZW50J3MgaW5kZXggKi8KKwlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5jb21taXQsIGluZGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityYl9zZXRfY29tbWl0X3RvX3dyaXRlKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCS8qCisJICogV2Ugb25seSByYWNlIHdpdGggaW50ZXJydXB0cyBhbmQgTk1JcyBvbiB0aGlzIENQVS4KKwkgKiBJZiB3ZSBvd24gdGhlIGNvbW1pdCBldmVudCwgdGhlbiB3ZSBjYW4gY29tbWl0CisJICogYWxsIG90aGVycyB0aGF0IGludGVycnVwdGVkIHVzLCBzaW5jZSB0aGUgaW50ZXJydXB0aW9ucworCSAqIGFyZSBpbiBzdGFjayBmb3JtYXQgKHRoZXkgZmluaXNoIGJlZm9yZSB0aGV5IGNvbWUKKwkgKiBiYWNrIHRvIHVzKS4gVGhpcyBhbGxvd3MgdXMgdG8gZG8gYSBzaW1wbGUgbG9vcCB0bworCSAqIGFzc2lnbiB0aGUgY29tbWl0IHRvIHRoZSB0YWlsLgorCSAqLworCXdoaWxlIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSAhPSBjcHVfYnVmZmVyLT50YWlsX3BhZ2UpIHsKKwkJY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPmNvbW1pdCA9CisJCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+d3JpdGU7CisJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZjcHVfYnVmZmVyLT5jb21taXRfcGFnZSk7CisJCWNwdV9idWZmZXItPndyaXRlX3N0YW1wID0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPnRpbWVfc3RhbXA7CisJCS8qIGFkZCBiYXJyaWVyIHRvIGtlZXAgZ2NjIGZyb20gb3B0aW1pemluZyB0b28gbXVjaCAqLworCQliYXJyaWVyKCk7CisJfQorCXdoaWxlIChyYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikgIT0KKwkgICAgICAgcmJfcGFnZV93cml0ZShjcHVfYnVmZmVyLT5jb21taXRfcGFnZSkpIHsKKwkJY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPmNvbW1pdCA9CisJCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+d3JpdGU7CisJCWJhcnJpZXIoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJiX3Jlc2V0X3JlYWRlcl9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCWNwdV9idWZmZXItPnJlYWRfc3RhbXAgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+dGltZV9zdGFtcDsKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYl9pbmNfaXRlcihzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisKKwkvKgorCSAqIFRoZSBpdGVyYXRvciBjb3VsZCBiZSBvbiB0aGUgcmVhZGVyIHBhZ2UgKGl0IHN0YXJ0cyB0aGVyZSkuCisJICogQnV0IHRoZSBoZWFkIGNvdWxkIGhhdmUgbW92ZWQsIHNpbmNlIHRoZSByZWFkZXIgd2FzCisJICogZm91bmQuIENoZWNrIGZvciB0aGlzIGNhc2UgYW5kIGFzc2lnbiB0aGUgaXRlcmF0b3IKKwkgKiB0byB0aGUgaGVhZCBwYWdlIGluc3RlYWQgb2YgbmV4dC4KKwkgKi8KKwlpZiAoaXRlci0+aGVhZF9wYWdlID09IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlKQorCQlpdGVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisJZWxzZQorCQlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmaXRlci0+aGVhZF9wYWdlKTsKKworCWl0ZXItPnJlYWRfc3RhbXAgPSBpdGVyLT5oZWFkX3BhZ2UtPnRpbWVfc3RhbXA7CisJaXRlci0+aGVhZCA9IDA7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfdXBkYXRlX2V2ZW50IC0gdXBkYXRlIGV2ZW50IHR5cGUgYW5kIGRhdGEKKyAqIEBldmVudDogdGhlIGV2ZW4gdG8gdXBkYXRlCisgKiBAdHlwZTogdGhlIHR5cGUgb2YgZXZlbnQKKyAqIEBsZW5ndGg6IHRoZSBzaXplIG9mIHRoZSBldmVudCBmaWVsZCBpbiB0aGUgcmluZyBidWZmZXIKKyAqCisgKiBVcGRhdGUgdGhlIHR5cGUgYW5kIGRhdGEgZmllbGRzIG9mIHRoZSBldmVudC4gVGhlIGxlbmd0aAorICogaXMgdGhlIGFjdHVhbCBzaXplIHRoYXQgaXMgd3JpdHRlbiB0byB0aGUgcmluZyBidWZmZXIsCisgKiBhbmQgd2l0aCB0aGlzLCB3ZSBjYW4gZGV0ZXJtaW5lIHdoYXQgdG8gcGxhY2UgaW50byB0aGUKKyAqIGRhdGEgZmllbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcmJfdXBkYXRlX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgbGVuZ3RoKQoreworCWV2ZW50LT50eXBlID0gdHlwZTsKKworCXN3aXRjaCAodHlwZSkgeworCisJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKKwkJYnJlYWs7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKKwkJZXZlbnQtPmxlbiA9CisJCQkoUkJfTEVOX1RJTUVfRVhURU5EICsgKFJCX0FMSUdOTUVOVC0xKSkKKwkJCT4+IFJCX0FMSUdOTUVOVF9TSElGVDsKKwkJYnJlYWs7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQlldmVudC0+bGVuID0KKwkJCShSQl9MRU5fVElNRV9TVEFNUCArIChSQl9BTElHTk1FTlQtMSkpCisJCQk+PiBSQl9BTElHTk1FTlRfU0hJRlQ7CisJCWJyZWFrOworCisJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKKwkJbGVuZ3RoIC09IFJCX0VWTlRfSERSX1NJWkU7CisJCWlmIChsZW5ndGggPiBSQl9NQVhfU01BTExfREFUQSkgeworCQkJZXZlbnQtPmxlbiA9IDA7CisJCQlldmVudC0+YXJyYXlbMF0gPSBsZW5ndGg7CisJCX0gZWxzZQorCQkJZXZlbnQtPmxlbiA9CisJCQkJKGxlbmd0aCArIChSQl9BTElHTk1FTlQtMSkpCisJCQkJPj4gUkJfQUxJR05NRU5UX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmJfY2FsY3VsYXRlX2V2ZW50X2xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50IGV2ZW50OyAvKiBVc2VkIG9ubHkgZm9yIHNpemVvZiBhcnJheSAqLworCisJLyogemVybyBsZW5ndGggY2FuIGNhdXNlIGNvbmZ1c2lvbnMgKi8KKwlpZiAoIWxlbmd0aCkKKwkJbGVuZ3RoID0gMTsKKworCWlmIChsZW5ndGggPiBSQl9NQVhfU01BTExfREFUQSkKKwkJbGVuZ3RoICs9IHNpemVvZihldmVudC5hcnJheVswXSk7CisKKwlsZW5ndGggKz0gUkJfRVZOVF9IRFJfU0laRTsKKwlsZW5ndGggPSBBTElHTihsZW5ndGgsIFJCX0FMSUdOTUVOVCk7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK19fcmJfcmVzZXJ2ZV9uZXh0KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkgIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCB1NjQgKnRzKQoreworCXN0cnVjdCBidWZmZXJfcGFnZSAqdGFpbF9wYWdlLCAqaGVhZF9wYWdlLCAqcmVhZGVyX3BhZ2U7CisJdW5zaWduZWQgbG9uZyB0YWlsLCB3cml0ZTsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IGNwdV9idWZmZXItPmJ1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl0YWlsX3BhZ2UgPSBjcHVfYnVmZmVyLT50YWlsX3BhZ2U7CisJd3JpdGUgPSBsb2NhbF9hZGRfcmV0dXJuKGxlbmd0aCwgJnRhaWxfcGFnZS0+d3JpdGUpOworCXRhaWwgPSB3cml0ZSAtIGxlbmd0aDsKKworCS8qIFNlZSBpZiB3ZSBzaG90IHBhc3MgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlciBwYWdlICovCisJaWYgKHdyaXRlID4gQlVGX1BBR0VfU0laRSkgeworCQlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKm5leHRfcGFnZSA9IHRhaWxfcGFnZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCisJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZuZXh0X3BhZ2UpOworCisJCWhlYWRfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwkJcmVhZGVyX3BhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKworCQkvKiB3ZSBncmFiYmVkIHRoZSBsb2NrIGJlZm9yZSBpbmNyZW1lbnRpbmcgKi8KKwkJUkJfV0FSTl9PTihjcHVfYnVmZmVyLCBuZXh0X3BhZ2UgPT0gcmVhZGVyX3BhZ2UpOworCisJCS8qCisJCSAqIElmIGZvciBzb21lIHJlYXNvbiwgd2UgaGFkIGFuIGludGVycnVwdCBzdG9ybSB0aGF0IG1hZGUKKwkJICogaXQgYWxsIHRoZSB3YXkgYXJvdW5kIHRoZSBidWZmZXIsIGJhaWwsIGFuZCB3YXJuCisJCSAqIGFib3V0IGl0LgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KG5leHRfcGFnZSA9PSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZSkpIHsKKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWlmIChuZXh0X3BhZ2UgPT0gaGVhZF9wYWdlKSB7CisJCQlpZiAoIShidWZmZXItPmZsYWdzICYgUkJfRkxfT1ZFUldSSVRFKSkgeworCQkJCS8qIHJlc2V0IHdyaXRlICovCisJCQkJaWYgKHRhaWwgPD0gQlVGX1BBR0VfU0laRSkKKwkJCQkJbG9jYWxfc2V0KCZ0YWlsX3BhZ2UtPndyaXRlLCB0YWlsKTsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisKKwkJCS8qIHRhaWxfcGFnZSBoYXMgbm90IG1vdmVkIHlldD8gKi8KKwkJCWlmICh0YWlsX3BhZ2UgPT0gY3B1X2J1ZmZlci0+dGFpbF9wYWdlKSB7CisJCQkJLyogY291bnQgb3ZlcmZsb3dzICovCisJCQkJcmJfdXBkYXRlX292ZXJmbG93KGNwdV9idWZmZXIpOworCisJCQkJcmJfaW5jX3BhZ2UoY3B1X2J1ZmZlciwgJmhlYWRfcGFnZSk7CisJCQkJY3B1X2J1ZmZlci0+aGVhZF9wYWdlID0gaGVhZF9wYWdlOworCQkJCWNwdV9idWZmZXItPmhlYWRfcGFnZS0+cmVhZCA9IDA7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgdGFpbCBwYWdlIGlzIHN0aWxsIHRoZSBzYW1lIGFzIHdoYXQgd2UgdGhpbmsKKwkJICogaXQgaXMsIHRoZW4gaXQgaXMgdXAgdG8gdXMgdG8gdXBkYXRlIHRoZSB0YWlsCisJCSAqIHBvaW50ZXIuCisJCSAqLworCQlpZiAodGFpbF9wYWdlID09IGNwdV9idWZmZXItPnRhaWxfcGFnZSkgeworCQkJbG9jYWxfc2V0KCZuZXh0X3BhZ2UtPndyaXRlLCAwKTsKKwkJCWxvY2FsX3NldCgmbmV4dF9wYWdlLT5jb21taXQsIDApOworCQkJY3B1X2J1ZmZlci0+dGFpbF9wYWdlID0gbmV4dF9wYWdlOworCisJCQkvKiByZXJlYWQgdGhlIHRpbWUgc3RhbXAgKi8KKwkJCSp0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1KTsKKwkJCWNwdV9idWZmZXItPnRhaWxfcGFnZS0+dGltZV9zdGFtcCA9ICp0czsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBhY3R1YWwgdGFpbCBwYWdlIGhhcyBtb3ZlZCBmb3J3YXJkLgorCQkgKi8KKwkJaWYgKHRhaWwgPCBCVUZfUEFHRV9TSVpFKSB7CisJCQkvKiBNYXJrIHRoZSByZXN0IG9mIHRoZSBwYWdlIHdpdGggcGFkZGluZyAqLworCQkJZXZlbnQgPSBfX3JiX3BhZ2VfaW5kZXgodGFpbF9wYWdlLCB0YWlsKTsKKwkJCWV2ZW50LT50eXBlID0gUklOR0JVRl9UWVBFX1BBRERJTkc7CisJCX0KKworCQlpZiAodGFpbCA8PSBCVUZfUEFHRV9TSVpFKQorCQkJLyogU2V0IHRoZSB3cml0ZSBiYWNrIHRvIHRoZSBwcmV2aW91cyBzZXR0aW5nICovCisJCQlsb2NhbF9zZXQoJnRhaWxfcGFnZS0+d3JpdGUsIHRhaWwpOworCisJCS8qCisJCSAqIElmIHRoaXMgd2FzIGEgY29tbWl0IGVudHJ5IHRoYXQgZmFpbGVkLAorCQkgKiBpbmNyZW1lbnQgdGhhdCB0b28KKwkJICovCisJCWlmICh0YWlsX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UgJiYKKwkJICAgIHRhaWwgPT0gcmJfY29tbWl0X2luZGV4KGNwdV9idWZmZXIpKSB7CisJCQlyYl9zZXRfY29tbWl0X3RvX3dyaXRlKGNwdV9idWZmZXIpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCisJCS8qIGZhaWwgYW5kIGxldCB0aGUgY2FsbGVyIHRyeSBhZ2FpbiAqLworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwkvKiBXZSByZXNlcnZlZCBzb21ldGhpbmcgb24gdGhlIGJ1ZmZlciAqLworCisJQlVHX09OKHdyaXRlID4gQlVGX1BBR0VfU0laRSk7CisKKwlldmVudCA9IF9fcmJfcGFnZV9pbmRleCh0YWlsX3BhZ2UsIHRhaWwpOworCXJiX3VwZGF0ZV9ldmVudChldmVudCwgdHlwZSwgbGVuZ3RoKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNvbW1pdCBhbmQgdGhlIHRhaWwgaXMgemVybywgdGhlbiB1cGRhdGUKKwkgKiB0aGlzIHBhZ2UncyB0aW1lIHN0YW1wLgorCSAqLworCWlmICghdGFpbCAmJiByYl9pc19jb21taXQoY3B1X2J1ZmZlciwgZXZlbnQpKQorCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+dGltZV9zdGFtcCA9ICp0czsKKworCXJldHVybiBldmVudDsKKworIG91dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CityYl9hZGRfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICB1NjQgKnRzLCB1NjQgKmRlbHRhKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RhdGljIGludCBvbmNlOworCWludCByZXQ7CisKKwlpZiAodW5saWtlbHkoKmRlbHRhID4gKDFVTEwgPDwgNTkpICYmICFvbmNlKyspKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRlbHRhIHdheSB0b28gYmlnISAlbGx1IgorCQkgICAgICAgIiB0cz0lbGx1IHdyaXRlIHN0YW1wID0gJWxsdVxuIiwKKwkJICAgICAgICpkZWx0YSwgKnRzLCBjcHVfYnVmZmVyLT53cml0ZV9zdGFtcCk7CisJCVdBUk5fT04oMSk7CisJfQorCisJLyoKKwkgKiBUaGUgZGVsdGEgaXMgdG9vIGJpZywgd2UgdG8gYWRkIGEKKwkgKiBuZXcgdGltZXN0YW1wLgorCSAqLworCWV2ZW50ID0gX19yYl9yZXNlcnZlX25leHQoY3B1X2J1ZmZlciwKKwkJCQkgIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORCwKKwkJCQkgIFJCX0xFTl9USU1FX0VYVEVORCwKKwkJCQkgIHRzKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKFBUUl9FUlIoZXZlbnQpID09IC1FQUdBSU4pCisJCXJldHVybiAtRUFHQUlOOworCisJLyogT25seSBhIGNvbW1pdGVkIHRpbWUgZXZlbnQgY2FuIHVwZGF0ZSB0aGUgd3JpdGUgc3RhbXAgKi8KKwlpZiAocmJfaXNfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBvbiB0aGUgcGFnZSwgdGhlbiB3ZSBuZWVkIHRvCisJCSAqIHVwZGF0ZSB0aGUgcGFnZSBpdHNlbGYsIGFuZCBqdXN0IHB1dCBpbiBhIHplcm8uCisJCSAqLworCQlpZiAocmJfZXZlbnRfaW5kZXgoZXZlbnQpKSB7CisJCQlldmVudC0+dGltZV9kZWx0YSA9ICpkZWx0YSAmIFRTX01BU0s7CisJCQlldmVudC0+YXJyYXlbMF0gPSAqZGVsdGEgPj4gVFNfU0hJRlQ7CisJCX0gZWxzZSB7CisJCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+dGltZV9zdGFtcCA9ICp0czsKKwkJCWV2ZW50LT50aW1lX2RlbHRhID0gMDsKKwkJCWV2ZW50LT5hcnJheVswXSA9IDA7CisJCX0KKwkJY3B1X2J1ZmZlci0+d3JpdGVfc3RhbXAgPSAqdHM7CisJCS8qIGxldCB0aGUgY2FsbGVyIGtub3cgdGhpcyB3YXMgdGhlIGNvbW1pdCAqLworCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCS8qIERhcm4sIHRoaXMgaXMganVzdCB3YXN0ZWQgc3BhY2UgKi8KKwkJZXZlbnQtPnRpbWVfZGVsdGEgPSAwOworCQlldmVudC0+YXJyYXlbMF0gPSAwOworCQlyZXQgPSAwOworCX0KKworCSpkZWx0YSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JiX3Jlc2VydmVfbmV4dF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICAgICAgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwl1NjQgdHMsIGRlbHRhOworCWludCBjb21taXQgPSAwOworCisgYWdhaW46CisJdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmNwdSk7CisKKwkvKgorCSAqIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBjYW4gdXBkYXRlIHRoZSB0aW1lc3RhbXAuCisJICogWWVzIHRoZXJlIGlzIGEgcmFjZSBoZXJlLiBJZiBhbiBpbnRlcnJ1cHQgY29tZXMgaW4KKwkgKiBqdXN0IGFmdGVyIHRoZSBjb25kaXRpb25hbCBhbmQgaXQgdHJhY2VzIHRvbywgdGhlbiBpdAorCSAqIHdpbGwgYWxzbyBjaGVjayB0aGUgZGVsdGFzLiBNb3JlIHRoYW4gb25lIHRpbWVzdGFtcCBtYXkKKwkgKiBhbHNvIGJlIG1hZGUuIEJ1dCBvbmx5IHRoZSBlbnRyeSB0aGF0IGRpZCB0aGUgYWN0dWFsCisJICogY29tbWl0IHdpbGwgYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gemVyby4KKwkgKi8KKwlpZiAoY3B1X2J1ZmZlci0+dGFpbF9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlICYmCisJICAgIHJiX3BhZ2Vfd3JpdGUoY3B1X2J1ZmZlci0+dGFpbF9wYWdlKSA9PQorCSAgICByYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikpIHsKKworCQlkZWx0YSA9IHRzIC0gY3B1X2J1ZmZlci0+d3JpdGVfc3RhbXA7CisKKwkJLyogbWFrZSBzdXJlIHRoaXMgZGVsdGEgaXMgY2FsY3VsYXRlZCBoZXJlICovCisJCWJhcnJpZXIoKTsKKworCQkvKiBEaWQgdGhlIHdyaXRlIHN0YW1wIGdldCB1cGRhdGVkIGFscmVhZHk/ICovCisJCWlmICh1bmxpa2VseSh0cyA8IGNwdV9idWZmZXItPndyaXRlX3N0YW1wKSkKKwkJCWdvdG8gYWdhaW47CisKKwkJaWYgKHRlc3RfdGltZV9zdGFtcChkZWx0YSkpIHsKKworCQkJY29tbWl0ID0gcmJfYWRkX3RpbWVfc3RhbXAoY3B1X2J1ZmZlciwgJnRzLCAmZGVsdGEpOworCisJCQlpZiAoY29tbWl0ID09IC1FQlVTWSkKKwkJCQlyZXR1cm4gTlVMTDsKKworCQkJaWYgKGNvbW1pdCA9PSAtRUFHQUlOKQorCQkJCWdvdG8gYWdhaW47CisKKwkJCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwgY29tbWl0IDwgMCk7CisJCX0KKwl9IGVsc2UKKwkJLyogTm9uIGNvbW1pdHMgaGF2ZSB6ZXJvIGRlbHRhcyAqLworCQlkZWx0YSA9IDA7CisKKwlldmVudCA9IF9fcmJfcmVzZXJ2ZV9uZXh0KGNwdV9idWZmZXIsIHR5cGUsIGxlbmd0aCwgJnRzKTsKKwlpZiAoUFRSX0VSUihldmVudCkgPT0gLUVBR0FJTikKKwkJZ290byBhZ2FpbjsKKworCWlmICghZXZlbnQpIHsKKwkJaWYgKHVubGlrZWx5KGNvbW1pdCkpCisJCQkvKgorCQkJICogT3VjaCEgV2UgbmVlZGVkIGEgdGltZXN0YW1wIGFuZCBpdCB3YXMgY29tbWl0ZWQuIEJ1dAorCQkJICogd2UgZGlkbid0IGdldCBvdXIgZXZlbnQgcmVzZXJ2ZWQuCisJCQkgKi8KKwkJCXJiX3NldF9jb21taXRfdG9fd3JpdGUoY3B1X2J1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogSWYgdGhlIHRpbWVzdGFtcCB3YXMgY29tbWl0ZWQsIG1ha2UgdGhlIGNvbW1pdCBvdXIgZW50cnkKKwkgKiBub3cgc28gdGhhdCB3ZSB3aWxsIHVwZGF0ZSBpdCB3aGVuIG5lZWRlZC4KKwkgKi8KKwlpZiAoY29tbWl0KQorCQlyYl9zZXRfY29tbWl0X2V2ZW50KGNwdV9idWZmZXIsIGV2ZW50KTsKKwllbHNlIGlmICghcmJfaXNfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KSkKKwkJZGVsdGEgPSAwOworCisJZXZlbnQtPnRpbWVfZGVsdGEgPSBkZWx0YTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmJfbmVlZF9yZXNjaGVkKTsKKworLyoqCisgKiByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUgLSByZXNlcnZlIGEgcGFydCBvZiB0aGUgYnVmZmVyCisgKiBAYnVmZmVyOiB0aGUgcmluZyBidWZmZXIgdG8gcmVzZXJ2ZSBmcm9tCisgKiBAbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHJlc2VydmUgKGV4Y2x1ZGluZyBldmVudCBoZWFkZXIpCisgKiBAZmxhZ3M6IGEgcG9pbnRlciB0byBzYXZlIHRoZSBpbnRlcnJ1cHQgZmxhZ3MKKyAqCisgKiBSZXR1cm5zIGEgcmVzZXZlcmQgZXZlbnQgb24gdGhlIHJpbmcgYnVmZmVyIHRvIGNvcHkgZGlyZWN0bHkgdG8uCisgKiBUaGUgdXNlciBvZiB0aGlzIGludGVyZmFjZSB3aWxsIG5lZWQgdG8gZ2V0IHRoZSBib2R5IHRvIHdyaXRlIGludG8KKyAqIGFuZCBjYW4gdXNlIHRoZSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKCkgaW50ZXJmYWNlLgorICoKKyAqIFRoZSBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBuZWVkZWQsIG5vdCB0aGUgZXZlbnQgbGVuZ3RoCisgKiB3aGljaCBhbHNvIGluY2x1ZGVzIHRoZSBldmVudCBoZWFkZXIuCisgKgorICogTXVzdCBiZSBwYWlyZWQgd2l0aCByaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0LCB1bmxlc3MgTlVMTCBpcyByZXR1cm5lZC4KKyAqIElmIE5VTEwgaXMgcmV0dXJuZWQsIHRoZW4gbm90aGluZyBoYXMgYmVlbiBhbGxvY2F0ZWQgb3IgbG9ja2VkLgorICovCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgorcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJaW50IGNwdSwgcmVzY2hlZDsKKworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIElmIHdlIGFyZSB0cmFjaW5nIHNjaGVkdWxlLCB3ZSBkb24ndCB3YW50IHRvIHJlY3Vyc2UgKi8KKwlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCWdvdG8gb3V0OworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCisJaWYgKGF0b21pY19yZWFkKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlnb3RvIG91dDsKKworCWxlbmd0aCA9IHJiX2NhbGN1bGF0ZV9ldmVudF9sZW5ndGgobGVuZ3RoKTsKKwlpZiAobGVuZ3RoID4gQlVGX1BBR0VfU0laRSkKKwkJZ290byBvdXQ7CisKKwlldmVudCA9IHJiX3Jlc2VydmVfbmV4dF9ldmVudChjcHVfYnVmZmVyLCBSSU5HQlVGX1RZUEVfREFUQSwgbGVuZ3RoKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dDsKKworCS8qCisJICogTmVlZCB0byBzdG9yZSByZXNjaGVkIHN0YXRlIG9uIHRoaXMgY3B1LgorCSAqIE9ubHkgdGhlIGZpcnN0IG5lZWRzIHRvLgorCSAqLworCisJaWYgKHByZWVtcHRfY291bnQoKSA9PSAxKQorCQlwZXJfY3B1KHJiX25lZWRfcmVzY2hlZCwgY3B1KSA9IHJlc2NoZWQ7CisKKwlyZXR1cm4gZXZlbnQ7CisKKyBvdXQ6CisJaWYgKHJlc2NoZWQpCisJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKwllbHNlCisJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmJfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCWNwdV9idWZmZXItPmVudHJpZXMrKzsKKworCS8qIE9ubHkgcHJvY2VzcyBmdXJ0aGVyIGlmIHdlIG93biB0aGUgY29tbWl0ICovCisJaWYgKCFyYl9pc19jb21taXQoY3B1X2J1ZmZlciwgZXZlbnQpKQorCQlyZXR1cm47CisKKwljcHVfYnVmZmVyLT53cml0ZV9zdGFtcCArPSBldmVudC0+dGltZV9kZWx0YTsKKworCXJiX3NldF9jb21taXRfdG9fd3JpdGUoY3B1X2J1ZmZlcik7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCAtIGNvbW1pdCBhIHJlc2VydmVkCisgKiBAYnVmZmVyOiBUaGUgYnVmZmVyIHRvIGNvbW1pdCB0bworICogQGV2ZW50OiBUaGUgZXZlbnQgcG9pbnRlciB0byBjb21taXQuCisgKiBAZmxhZ3M6IHRoZSBpbnRlcnJ1cHQgZmxhZ3MgcmVjZWl2ZWQgZnJvbSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUuCisgKgorICogVGhpcyBjb21taXRzIHRoZSBkYXRhIHRvIHRoZSByaW5nIGJ1ZmZlciwgYW5kIHJlbGVhc2VzIGFueSBsb2NrcyBoZWxkLgorICoKKyAqIE11c3QgYmUgcGFpcmVkIHdpdGggcmluZ19idWZmZXJfbG9ja19yZXNlcnZlLgorICovCitpbnQgcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCisJcmJfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KTsKKworCS8qCisJICogT25seSB0aGUgbGFzdCBwcmVlbXB0IGNvdW50IG5lZWRzIHRvIHJlc3RvcmUgcHJlZW1wdGlvbi4KKwkgKi8KKwlpZiAocHJlZW1wdF9jb3VudCgpID09IDEpIHsKKwkJaWYgKHBlcl9jcHUocmJfbmVlZF9yZXNjaGVkLCBjcHUpKQorCQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CisJCWVsc2UKKwkJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKwl9IGVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl93cml0ZSAtIHdyaXRlIGRhdGEgdG8gdGhlIGJ1ZmZlciB3aXRob3V0IHJlc2VydmluZworICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHdyaXRlIHRvLgorICogQGxlbmd0aDogVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBiZWluZyB3cml0dGVuIChleGNsdWRpbmcgdGhlIGV2ZW50IGhlYWRlcikKKyAqIEBkYXRhOiBUaGUgZGF0YSB0byB3cml0ZSB0byB0aGUgYnVmZmVyLgorICoKKyAqIFRoaXMgaXMgbGlrZSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUgYW5kIHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQgYXMKKyAqIG9uZSBmdW5jdGlvbi4gSWYgeW91IGFscmVhZHkgaGF2ZSB0aGUgZGF0YSB0byB3cml0ZSB0byB0aGUgYnVmZmVyLCBpdAorICogbWF5IGJlIGVhc2llciB0byBzaW1wbHkgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIE5vdGUsIGxpa2UgcmluZ19idWZmZXJfbG9ja19yZXNlcnZlLCB0aGUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKyAqIGFuZCBub3QgdGhlIGxlbmd0aCBvZiB0aGUgZXZlbnQgd2hpY2ggd291bGQgaG9sZCB0aGUgaGVhZGVyLgorICovCitpbnQgcmluZ19idWZmZXJfd3JpdGUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQl1bnNpZ25lZCBsb25nIGxlbmd0aCwKKwkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBsb25nIGV2ZW50X2xlbmd0aDsKKwl2b2lkICpib2R5OworCWludCByZXQgPSAtRUJVU1k7CisJaW50IGNwdSwgcmVzY2hlZDsKKworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmVzY2hlZCA9IG5lZWRfcmVzY2hlZCgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CisKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKCFjcHVfaXNzZXQoY3B1LCBidWZmZXItPmNwdW1hc2spKQorCQlnb3RvIG91dDsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKworCWlmIChhdG9taWNfcmVhZCgmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKSkKKwkJZ290byBvdXQ7CisKKwlldmVudF9sZW5ndGggPSByYl9jYWxjdWxhdGVfZXZlbnRfbGVuZ3RoKGxlbmd0aCk7CisJZXZlbnQgPSByYl9yZXNlcnZlX25leHRfZXZlbnQoY3B1X2J1ZmZlciwKKwkJCQkgICAgICBSSU5HQlVGX1RZUEVfREFUQSwgZXZlbnRfbGVuZ3RoKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dDsKKworCWJvZHkgPSByYl9ldmVudF9kYXRhKGV2ZW50KTsKKworCW1lbWNweShib2R5LCBkYXRhLCBsZW5ndGgpOworCisJcmJfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KTsKKworCXJldCA9IDA7Cisgb3V0OgorCWlmIChyZXNjaGVkKQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKKwllbHNlCisJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJiX3Blcl9jcHVfZW1wdHkoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXIgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmhlYWQgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpjb21taXQgPSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZTsKKworCXJldHVybiByZWFkZXItPnJlYWQgPT0gcmJfcGFnZV9jb21taXQocmVhZGVyKSAmJgorCQkoY29tbWl0ID09IHJlYWRlciB8fAorCQkgKGNvbW1pdCA9PSBoZWFkICYmCisJCSAgaGVhZC0+cmVhZCA9PSByYl9wYWdlX2NvbW1pdChjb21taXQpKSk7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcmVjb3JkX2Rpc2FibGUgLSBzdG9wIGFsbCB3cml0ZXMgaW50byB0aGUgYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIgdG8gc3RvcCB3cml0ZXMgdG8uCisgKgorICogVGhpcyBwcmV2ZW50cyBhbGwgd3JpdGVzIHRvIHRoZSBidWZmZXIuIEFueSBhdHRlbXB0IHRvIHdyaXRlCisgKiB0byB0aGUgYnVmZmVyIGFmdGVyIHRoaXMgd2lsbCBmYWlsIGFuZCByZXR1cm4gTlVMTC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIHN5bmNocm9uaXplX3NjaGVkKCkgYWZ0ZXIgdGhpcy4KKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZWNvcmRfZGlzYWJsZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlhdG9taWNfaW5jKCZidWZmZXItPnJlY29yZF9kaXNhYmxlZCk7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcmVjb3JkX2VuYWJsZSAtIGVuYWJsZSB3cml0ZXMgdG8gdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIGVuYWJsZSB3cml0ZXMKKyAqCisgKiBOb3RlLCBtdWx0aXBsZSBkaXNhYmxlcyB3aWxsIG5lZWQgdGhlIHNhbWUgbnVtYmVyIG9mIGVuYWJsZXMKKyAqIHRvIHRydWVseSBlbmFibGUgdGhlIHdyaXRpbmcgKG11Y2ggbGlrZSBwcmVlbXB0X2Rpc2FibGUpLgorICovCit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCit7CisJYXRvbWljX2RlYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3JlY29yZF9kaXNhYmxlX2NwdSAtIHN0b3AgYWxsIHdyaXRlcyBpbnRvIHRoZSBjcHVfYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIgdG8gc3RvcCB3cml0ZXMgdG8uCisgKiBAY3B1OiBUaGUgQ1BVIGJ1ZmZlciB0byBzdG9wCisgKgorICogVGhpcyBwcmV2ZW50cyBhbGwgd3JpdGVzIHRvIHRoZSBidWZmZXIuIEFueSBhdHRlbXB0IHRvIHdyaXRlCisgKiB0byB0aGUgYnVmZmVyIGFmdGVyIHRoaXMgd2lsbCBmYWlsIGFuZCByZXR1cm4gTlVMTC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIHN5bmNocm9uaXplX3NjaGVkKCkgYWZ0ZXIgdGhpcy4KKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZWNvcmRfZGlzYWJsZV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybjsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1IC0gZW5hYmxlIHdyaXRlcyB0byB0aGUgYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIgdG8gZW5hYmxlIHdyaXRlcworICogQGNwdTogVGhlIENQVSB0byBlbmFibGUuCisgKgorICogTm90ZSwgbXVsdGlwbGUgZGlzYWJsZXMgd2lsbCBuZWVkIHRoZSBzYW1lIG51bWJlciBvZiBlbmFibGVzCisgKiB0byB0cnVlbHkgZW5hYmxlIHRoZSB3cml0aW5nIChtdWNoIGxpa2UgcHJlZW1wdF9kaXNhYmxlKS4KKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJcmV0dXJuOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCWF0b21pY19kZWMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfZW50cmllc19jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGEgY3B1IGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyCisgKiBAY3B1OiBUaGUgcGVyIENQVSBidWZmZXIgdG8gZ2V0IHRoZSBlbnRyaWVzIGZyb20uCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfZW50cmllc19jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiAwOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCXJldHVybiBjcHVfYnVmZmVyLT5lbnRyaWVzOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYSBjcHVfYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKKyAqIEBjcHU6IFRoZSBwZXIgQ1BVIGJ1ZmZlciB0byBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBmcm9tCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiAwOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCXJldHVybiBjcHVfYnVmZmVyLT5vdmVycnVuOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2VudHJpZXMgLSBnZXQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGEgYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcmluZyBidWZmZXIKKyAqIChhbGwgQ1BVIGVudHJpZXMpCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfZW50cmllcyhzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGVudHJpZXMgPSAwOworCWludCBjcHU7CisKKwkvKiBpZiB5b3UgY2FyZSBhYm91dCB0aGlzIGJlaW5nIGNvcnJlY3QsIGxvY2sgdGhlIGJ1ZmZlciAqLworCWZvcl9lYWNoX2J1ZmZlcl9jcHUoYnVmZmVyLCBjcHUpIHsKKwkJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCQllbnRyaWVzICs9IGNwdV9idWZmZXItPmVudHJpZXM7CisJfQorCisJcmV0dXJuIGVudHJpZXM7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKKyAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlcgorICoKKyAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBvdmVycnVucyBpbiB0aGUgcmluZyBidWZmZXIKKyAqIChhbGwgQ1BVIGVudHJpZXMpCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bnMoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBvdmVycnVucyA9IDA7CisJaW50IGNwdTsKKworCS8qIGlmIHlvdSBjYXJlIGFib3V0IHRoaXMgYmVpbmcgY29ycmVjdCwgbG9jayB0aGUgYnVmZmVyICovCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkgeworCQljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CisJCW92ZXJydW5zICs9IGNwdV9idWZmZXItPm92ZXJydW47CisJfQorCisJcmV0dXJuIG92ZXJydW5zOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQgLSByZXNldCBhbiBpdGVyYXRvcgorICogQGl0ZXI6IFRoZSBpdGVyYXRvciB0byByZXNldAorICoKKyAqIFJlc2V0cyB0aGUgaXRlcmF0b3IsIHNvIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcKKyAqIGFnYWluLgorICovCit2b2lkIHJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQoc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOworCisJLyogSXRlcmF0b3IgdXNhZ2UgaXMgZXhwZWN0ZWQgdG8gaGF2ZSByZWNvcmQgZGlzYWJsZWQgKi8KKwlpZiAobGlzdF9lbXB0eSgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmxpc3QpKSB7CisJCWl0ZXItPmhlYWRfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwkJaXRlci0+aGVhZCA9IGNwdV9idWZmZXItPmhlYWRfcGFnZS0+cmVhZDsKKwl9IGVsc2UgeworCQlpdGVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKwkJaXRlci0+aGVhZCA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5yZWFkOworCX0KKwlpZiAoaXRlci0+aGVhZCkKKwkJaXRlci0+cmVhZF9zdGFtcCA9IGNwdV9idWZmZXItPnJlYWRfc3RhbXA7CisJZWxzZQorCQlpdGVyLT5yZWFkX3N0YW1wID0gaXRlci0+aGVhZF9wYWdlLT50aW1lX3N0YW1wOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkgLSBjaGVjayBpZiBhbiBpdGVyYXRvciBoYXMgbm8gbW9yZSB0byByZWFkCisgKiBAaXRlcjogVGhlIGl0ZXJhdG9yIHRvIGNoZWNrCisgKi8KK2ludCByaW5nX2J1ZmZlcl9pdGVyX2VtcHR5KHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCisJY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisKKwlyZXR1cm4gaXRlci0+aGVhZF9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlICYmCisJCWl0ZXItPmhlYWQgPT0gcmJfY29tbWl0X2luZGV4KGNwdV9idWZmZXIpOworfQorCitzdGF0aWMgdm9pZAorcmJfdXBkYXRlX3JlYWRfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCSAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwl1NjQgZGVsdGE7CisKKwlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKKwkJcmV0dXJuOworCisJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6CisJCWRlbHRhID0gZXZlbnQtPmFycmF5WzBdOworCQlkZWx0YSA8PD0gVFNfU0hJRlQ7CisJCWRlbHRhICs9IGV2ZW50LT50aW1lX2RlbHRhOworCQljcHVfYnVmZmVyLT5yZWFkX3N0YW1wICs9IGRlbHRhOworCQlyZXR1cm47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQkvKiBGSVhNRTogbm90IGltcGxlbWVudGVkICovCisJCXJldHVybjsKKworCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CisJCWNwdV9idWZmZXItPnJlYWRfc3RhbXAgKz0gZXZlbnQtPnRpbWVfZGVsdGE7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCityYl91cGRhdGVfaXRlcl9yZWFkX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLAorCQkJICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXU2NCBkZWx0YTsKKworCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgorCQlyZXR1cm47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKKwkJZGVsdGEgPSBldmVudC0+YXJyYXlbMF07CisJCWRlbHRhIDw8PSBUU19TSElGVDsKKwkJZGVsdGEgKz0gZXZlbnQtPnRpbWVfZGVsdGE7CisJCWl0ZXItPnJlYWRfc3RhbXAgKz0gZGVsdGE7CisJCXJldHVybjsKKworCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfU1RBTVA6CisJCS8qIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgKi8KKwkJcmV0dXJuOworCisJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKKwkJaXRlci0+cmVhZF9zdGFtcCArPSBldmVudC0+dGltZV9kZWx0YTsKKwkJcmV0dXJuOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBidWZmZXJfcGFnZSAqCityYl9nZXRfcmVhZGVyX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCisgYWdhaW46CisJcmVhZGVyID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2U7CisKKwkvKiBJZiB0aGVyZSdzIG1vcmUgdG8gcmVhZCwgcmV0dXJuIHRoaXMgcGFnZSAqLworCWlmIChjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCA8IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpKQorCQlnb3RvIG91dDsKKworCS8qIE5ldmVyIHNob3VsZCB3ZSBoYXZlIGFuIGluZGV4IGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSAqLworCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwKKwkJICAgY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQgPiByYl9wYWdlX3NpemUocmVhZGVyKSk7CisKKwkvKiBjaGVjayBpZiB3ZSBjYXVnaHQgdXAgdG8gdGhlIHRhaWwgKi8KKwlyZWFkZXIgPSBOVUxMOworCWlmIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSA9PSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFNwbGljZSB0aGUgZW1wdHkgcmVhZGVyIHBhZ2UgaW50byB0aGUgbGlzdCBhcm91bmQgdGhlIGhlYWQuCisJICogUmVzZXQgdGhlIHJlYWRlciBwYWdlIHRvIHNpemUgemVyby4KKwkgKi8KKworCXJlYWRlciA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdC5uZXh0ID0gcmVhZGVyLT5saXN0Lm5leHQ7CisJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmxpc3QucHJldiA9IHJlYWRlci0+bGlzdC5wcmV2OworCisJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+d3JpdGUsIDApOworCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmNvbW1pdCwgMCk7CisKKwkvKiBNYWtlIHRoZSByZWFkZXIgcGFnZSBub3cgcmVwbGFjZSB0aGUgaGVhZCAqLworCXJlYWRlci0+bGlzdC5wcmV2LT5uZXh0ID0gJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0OworCXJlYWRlci0+bGlzdC5uZXh0LT5wcmV2ID0gJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0OworCisJLyoKKwkgKiBJZiB0aGUgdGFpbCBpcyBvbiB0aGUgcmVhZGVyLCB0aGVuIHdlIG11c3Qgc2V0IHRoZSBoZWFkCisJICogdG8gdGhlIGluc2VydGVkIHBhZ2UsIG90aGVyd2lzZSB3ZSBzZXQgaXQgb25lIGJlZm9yZS4KKwkgKi8KKwljcHVfYnVmZmVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKworCWlmIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSAhPSByZWFkZXIpCisJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZjcHVfYnVmZmVyLT5oZWFkX3BhZ2UpOworCisJLyogRmluYWxseSB1cGRhdGUgdGhlIHJlYWRlciBwYWdlIHRvIHRoZSBuZXcgaGVhZCAqLworCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlID0gcmVhZGVyOworCXJiX3Jlc2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOworCisJZ290byBhZ2FpbjsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVhZGVyOworfQorCitzdGF0aWMgdm9pZCByYl9hZHZhbmNlX3JlYWRlcihzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBidWZmZXJfcGFnZSAqcmVhZGVyOworCXVuc2lnbmVkIGxlbmd0aDsKKworCXJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTsKKworCS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hlbiBidWZmZXIgaXMgZW1wdHkgKi8KKwlCVUdfT04oIXJlYWRlcik7CisKKwlldmVudCA9IHJiX3JlYWRlcl9ldmVudChjcHVfYnVmZmVyKTsKKworCWlmIChldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfREFUQSkKKwkJY3B1X2J1ZmZlci0+ZW50cmllcy0tOworCisJcmJfdXBkYXRlX3JlYWRfc3RhbXAoY3B1X2J1ZmZlciwgZXZlbnQpOworCisJbGVuZ3RoID0gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KTsKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCArPSBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIHJiX2FkdmFuY2VfaXRlcihzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxlbmd0aDsKKworCWNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOworCWJ1ZmZlciA9IGNwdV9idWZmZXItPmJ1ZmZlcjsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkgKi8KKwlpZiAoaXRlci0+aGVhZCA+PSByYl9wYWdlX3NpemUoaXRlci0+aGVhZF9wYWdlKSkgeworCQlCVUdfT04oaXRlci0+aGVhZF9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKTsKKwkJcmJfaW5jX2l0ZXIoaXRlcik7CisJCXJldHVybjsKKwl9CisKKwlldmVudCA9IHJiX2l0ZXJfaGVhZF9ldmVudChpdGVyKTsKKworCWxlbmd0aCA9IHJiX2V2ZW50X2xlbmd0aChldmVudCk7CisKKwkvKgorCSAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdG8gYWR2YW5jZSB0aGUgaGVhZGVyIGlmIHdlIGFyZQorCSAqIGF0IHRoZSB0YWlsIG9mIHRoZSBidWZmZXIuCisJICovCisJQlVHX09OKChpdGVyLT5oZWFkX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpICYmCisJICAgICAgIChpdGVyLT5oZWFkICsgbGVuZ3RoID4gcmJfY29tbWl0X2luZGV4KGNwdV9idWZmZXIpKSk7CisKKwlyYl91cGRhdGVfaXRlcl9yZWFkX3N0YW1wKGl0ZXIsIGV2ZW50KTsKKworCWl0ZXItPmhlYWQgKz0gbGVuZ3RoOworCisJLyogY2hlY2sgZm9yIGVuZCBvZiBwYWdlIHBhZGRpbmcgKi8KKwlpZiAoKGl0ZXItPmhlYWQgPj0gcmJfcGFnZV9zaXplKGl0ZXItPmhlYWRfcGFnZSkpICYmCisJICAgIChpdGVyLT5oZWFkX3BhZ2UgIT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpKQorCQlyYl9hZHZhbmNlX2l0ZXIoaXRlcik7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcGVlayAtIHBlZWsgYXQgdGhlIG5leHQgZXZlbnQgdG8gYmUgcmVhZAorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHJlYWQKKyAqIEBjcHU6IFRoZSBjcHUgdG8gcGVhayBhdAorICogQHRzOiBUaGUgdGltZXN0YW1wIGNvdW50ZXIgb2YgdGhpcyBldmVudC4KKyAqCisgKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBldmVudCB0aGF0IHdpbGwgYmUgcmVhZCBuZXh0LCBidXQgZG9lcworICogbm90IGNvbnN1bWUgdGhlIGRhdGEuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9wZWVrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LCB1NjQgKnRzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiBOVUxMOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCisgYWdhaW46CisJcmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOworCWlmICghcmVhZGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWV2ZW50ID0gcmJfcmVhZGVyX2V2ZW50KGNwdV9idWZmZXIpOworCisJc3dpdGNoIChldmVudC0+dHlwZSkgeworCWNhc2UgUklOR0JVRl9UWVBFX1BBRERJTkc6CisJCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwgMSk7CisJCXJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpOworCQlyZXR1cm4gTlVMTDsKKworCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOgorCQkvKiBJbnRlcm5hbCBkYXRhLCBPSyB0byBhZHZhbmNlICovCisJCXJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpOworCQlnb3RvIGFnYWluOworCisJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9TVEFNUDoKKwkJLyogRklYTUU6IG5vdCBpbXBsZW1lbnRlZCAqLworCQlyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTsKKwkJZ290byBhZ2FpbjsKKworCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CisJCWlmICh0cykgeworCQkJKnRzID0gY3B1X2J1ZmZlci0+cmVhZF9zdGFtcCArIGV2ZW50LT50aW1lX2RlbHRhOworCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CisJCX0KKwkJcmV0dXJuIGV2ZW50OworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfaXRlcl9wZWVrIC0gcGVlayBhdCB0aGUgbmV4dCBldmVudCB0byBiZSByZWFkCisgKiBAaXRlcjogVGhlIHJpbmcgYnVmZmVyIGl0ZXJhdG9yCisgKiBAdHM6IFRoZSB0aW1lc3RhbXAgY291bnRlciBvZiB0aGlzIGV2ZW50LgorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGV2ZW50IHRoYXQgd2lsbCBiZSByZWFkIG5leHQsIGJ1dCBkb2VzCisgKiBub3QgaW5jcmVtZW50IHRoZSBpdGVyYXRvci4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX2l0ZXJfcGVlayhzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlciwgdTY0ICp0cykKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCisJaWYgKHJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkoaXRlcikpCisJCXJldHVybiBOVUxMOworCisJY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisJYnVmZmVyID0gY3B1X2J1ZmZlci0+YnVmZmVyOworCisgYWdhaW46CisJaWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpCisJCXJldHVybiBOVUxMOworCisJZXZlbnQgPSByYl9pdGVyX2hlYWRfZXZlbnQoaXRlcik7CisKKwlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKKwkJcmJfaW5jX2l0ZXIoaXRlcik7CisJCWdvdG8gYWdhaW47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKKwkJLyogSW50ZXJuYWwgZGF0YSwgT0sgdG8gYWR2YW5jZSAqLworCQlyYl9hZHZhbmNlX2l0ZXIoaXRlcik7CisJCWdvdG8gYWdhaW47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQkvKiBGSVhNRTogbm90IGltcGxlbWVudGVkICovCisJCXJiX2FkdmFuY2VfaXRlcihpdGVyKTsKKwkJZ290byBhZ2FpbjsKKworCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CisJCWlmICh0cykgeworCQkJKnRzID0gaXRlci0+cmVhZF9zdGFtcCArIGV2ZW50LT50aW1lX2RlbHRhOworCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CisJCX0KKwkJcmV0dXJuIGV2ZW50OworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfY29uc3VtZSAtIHJldHVybiBhbiBldmVudCBhbmQgY29uc3VtZSBpdAorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIGdldCB0aGUgbmV4dCBldmVudCBmcm9tCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBldmVudCBpbiB0aGUgcmluZyBidWZmZXIsIGFuZCB0aGF0IGV2ZW50IGlzIGNvbnN1bWVkLgorICogTWVhbmluZywgdGhhdCBzZXF1ZW50aWFsIHJlYWRzIHdpbGwga2VlcCByZXR1cm5pbmcgYSBkaWZmZXJlbnQgZXZlbnQsCisgKiBhbmQgZXZlbnR1YWxseSBlbXB0eSB0aGUgcmluZyBidWZmZXIgaWYgdGhlIHByb2R1Y2VyIGlzIHNsb3dlci4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX2NvbnN1bWUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIHU2NCAqdHMpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX3BlZWsoYnVmZmVyLCBjcHUsIHRzKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gTlVMTDsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwlyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTsKKworCXJldHVybiBldmVudDsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0IC0gc3RhcnQgYSBub24gY29uc3VtaW5nIHJlYWQgb2YgdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHJlYWQgZnJvbQorICogQGNwdTogVGhlIGNwdSBidWZmZXIgdG8gaXRlcmF0ZSBvdmVyCisgKgorICogVGhpcyBzdGFydHMgdXAgYW4gaXRlcmF0aW9uIHRocm91Z2ggdGhlIGJ1ZmZlci4gSXQgYWxzbyBkaXNhYmxlcworICogdGhlIHJlY29yZGluZyB0byB0aGUgYnVmZmVyIHVudGlsIHRoZSByZWFkaW5nIGlzIGZpbmlzaGVkLgorICogVGhpcyBwcmV2ZW50cyB0aGUgcmVhZGluZyBmcm9tIGJlaW5nIGNvcnJ1cHRlZC4gVGhpcyBpcyBub3QKKyAqIGEgY29uc3VtaW5nIHJlYWQsIHNvIGEgcHJvZHVjZXIgaXMgbm90IGV4cGVjdGVkLgorICoKKyAqIE11c3QgYmUgcGFpcmVkIHdpdGggcmluZ19idWZmZXJfZmluaXNoLgorICovCitzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqCityaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiBOVUxMOworCisJaXRlciA9IGttYWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKworCWl0ZXItPmNwdV9idWZmZXIgPSBjcHVfYnVmZmVyOworCisJYXRvbWljX2luYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKKwlyaW5nX2J1ZmZlcl9pdGVyX3Jlc2V0KGl0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBpdGVyOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2ZpbmlzaCAtIGZpbmlzaCByZWFkaW5nIHRoZSBpdGVyYXRvciBvZiB0aGUgYnVmZmVyCisgKiBAaXRlcjogVGhlIGl0ZXJhdG9yIHJldHJpZXZlZCBieSByaW5nX2J1ZmZlcl9zdGFydAorICoKKyAqIFRoaXMgcmUtZW5hYmxlcyB0aGUgcmVjb3JkaW5nIHRvIHRoZSBidWZmZXIsIGFuZCBmcmVlcyB0aGUKKyAqIGl0ZXJhdG9yLgorICovCit2b2lkCityaW5nX2J1ZmZlcl9yZWFkX2ZpbmlzaChzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisKKwlhdG9taWNfZGVjKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworCWtmcmVlKGl0ZXIpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3JlYWQgLSByZWFkIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHJpbmcgYnVmZmVyIGJ5IHRoZSBpdGVyYXRvcgorICogQGl0ZXI6IFRoZSByaW5nIGJ1ZmZlciBpdGVyYXRvcgorICogQHRzOiBUaGUgdGltZSBzdGFtcCBvZiB0aGUgZXZlbnQgcmVhZC4KKyAqCisgKiBUaGlzIHJlYWRzIHRoZSBuZXh0IGV2ZW50IGluIHRoZSByaW5nIGJ1ZmZlciBhbmQgaW5jcmVtZW50cyB0aGUgaXRlcmF0b3IuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9yZWFkKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLCB1NjQgKnRzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX2l0ZXJfcGVlayhpdGVyLCB0cyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyYl9hZHZhbmNlX2l0ZXIoaXRlcik7CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfc2l6ZSAtIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIgKGluIGJ5dGVzKQorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyLgorICovCit1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX3NpemUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCit7CisJcmV0dXJuIEJVRl9QQUdFX1NJWkUgKiBidWZmZXItPnBhZ2VzOworfQorCitzdGF0aWMgdm9pZAorcmJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCWNwdV9idWZmZXItPmhlYWRfcGFnZQorCQk9IGxpc3RfZW50cnkoY3B1X2J1ZmZlci0+cGFnZXMubmV4dCwgc3RydWN0IGJ1ZmZlcl9wYWdlLCBsaXN0KTsKKwlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmhlYWRfcGFnZS0+d3JpdGUsIDApOworCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+aGVhZF9wYWdlLT5jb21taXQsIDApOworCisJY3B1X2J1ZmZlci0+aGVhZF9wYWdlLT5yZWFkID0gMDsKKworCWNwdV9idWZmZXItPnRhaWxfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwljcHVfYnVmZmVyLT5jb21taXRfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKworCUlOSVRfTElTVF9IRUFEKCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdCk7CisJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+d3JpdGUsIDApOworCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmNvbW1pdCwgMCk7CisJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQgPSAwOworCisJY3B1X2J1ZmZlci0+b3ZlcnJ1biA9IDA7CisJY3B1X2J1ZmZlci0+ZW50cmllcyA9IDA7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcmVzZXRfY3B1IC0gcmVzZXQgYSByaW5nIGJ1ZmZlciBwZXIgQ1BVIGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHJlc2V0IGEgcGVyIGNwdSBidWZmZXIgb2YKKyAqIEBjcHU6IFRoZSBDUFUgYnVmZmVyIHRvIGJlIHJlc2V0CisgKi8KK3ZvaWQgcmluZ19idWZmZXJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKKworCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl9yZXNldCAtIHJlc2V0IGEgcmluZyBidWZmZXIKKyAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlciB0byByZXNldCBhbGwgY3B1IGJ1ZmZlcnMKKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZXNldChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkKKwkJcmluZ19idWZmZXJfcmVzZXRfY3B1KGJ1ZmZlciwgY3B1KTsKK30KKworLyoqCisgKiByaW5kX2J1ZmZlcl9lbXB0eSAtIGlzIHRoZSByaW5nIGJ1ZmZlciBlbXB0eT8KKyAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlciB0byB0ZXN0CisgKi8KK2ludCByaW5nX2J1ZmZlcl9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlpbnQgY3B1OworCisJLyogeWVzIHRoaXMgaXMgcmFjeSwgYnV0IGlmIHlvdSBkb24ndCBsaWtlIHRoZSByYWNlLCBsb2NrIHRoZSBidWZmZXIgKi8KKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwkJaWYgKCFyYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2VtcHR5X2NwdSAtIGlzIGEgY3B1IGJ1ZmZlciBvZiBhIHJpbmcgYnVmZmVyIGVtcHR5PworICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyCisgKiBAY3B1OiBUaGUgQ1BVIGJ1ZmZlciB0byB0ZXN0CisgKi8KK2ludCByaW5nX2J1ZmZlcl9lbXB0eV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiAxOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCXJldHVybiByYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3N3YXBfY3B1IC0gc3dhcCBhIENQVSBidWZmZXIgYmV0d2VlbiB0d28gcmluZyBidWZmZXJzCisgKiBAYnVmZmVyX2E6IE9uZSBidWZmZXIgdG8gc3dhcCB3aXRoCisgKiBAYnVmZmVyX2I6IFRoZSBvdGhlciBidWZmZXIgdG8gc3dhcCB3aXRoCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHRyYWNlcnMgdGhhdCB3YW50IHRvIHRha2UgYSAic25hcHNob3QiCisgKiBvZiBhIENQVSBidWZmZXIgYW5kIGhhcyBhbm90aGVyIGJhY2sgdXAgYnVmZmVyIGx5aW5nIGFyb3VuZC4KKyAqIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHRyYWNlciBoYW5kbGVzIHRoZSBjcHUgYnVmZmVyIG5vdCBiZWluZworICogdXNlZCBhdCB0aGUgbW9tZW50LgorICovCitpbnQgcmluZ19idWZmZXJfc3dhcF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXJfYSwKKwkJCSBzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcl9iLCBpbnQgY3B1KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyX2E7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXJfYjsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyX2EtPmNwdW1hc2spIHx8CisJICAgICFjcHVfaXNzZXQoY3B1LCBidWZmZXJfYi0+Y3B1bWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQXQgbGVhc3QgbWFrZSBzdXJlIHRoZSB0d28gYnVmZmVycyBhcmUgc29tZXdoYXQgdGhlIHNhbWUgKi8KKwlpZiAoYnVmZmVyX2EtPnNpemUgIT0gYnVmZmVyX2ItPnNpemUgfHwKKwkgICAgYnVmZmVyX2EtPnBhZ2VzICE9IGJ1ZmZlcl9iLT5wYWdlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcHVfYnVmZmVyX2EgPSBidWZmZXJfYS0+YnVmZmVyc1tjcHVdOworCWNwdV9idWZmZXJfYiA9IGJ1ZmZlcl9iLT5idWZmZXJzW2NwdV07CisKKwkvKgorCSAqIFdlIGNhbid0IGRvIGEgc3luY2hyb25pemVfc2NoZWQgaGVyZSBiZWNhdXNlIHRoaXMKKwkgKiBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGluIGF0b21pYyBjb250ZXh0LgorCSAqIE5vcm1hbGx5IHRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSBDUFUgYXMgY3B1LgorCSAqIElmIG5vdCBpdCdzIHVwIHRvIHRoZSBjYWxsZXIgdG8gcHJvdGVjdCB0aGlzLgorCSAqLworCWF0b21pY19pbmMoJmNwdV9idWZmZXJfYS0+cmVjb3JkX2Rpc2FibGVkKTsKKwlhdG9taWNfaW5jKCZjcHVfYnVmZmVyX2ItPnJlY29yZF9kaXNhYmxlZCk7CisKKwlidWZmZXJfYS0+YnVmZmVyc1tjcHVdID0gY3B1X2J1ZmZlcl9iOworCWJ1ZmZlcl9iLT5idWZmZXJzW2NwdV0gPSBjcHVfYnVmZmVyX2E7CisKKwljcHVfYnVmZmVyX2ItPmJ1ZmZlciA9IGJ1ZmZlcl9hOworCWNwdV9idWZmZXJfYS0+YnVmZmVyID0gYnVmZmVyX2I7CisKKwlhdG9taWNfZGVjKCZjcHVfYnVmZmVyX2EtPnJlY29yZF9kaXNhYmxlZCk7CisJYXRvbWljX2RlYygmY3B1X2J1ZmZlcl9iLT5yZWNvcmRfZGlzYWJsZWQpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggOGYzZmIzZC4uZDM0NWQ2NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CkBAIC0yMiw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpAQCAtMzEsMjUgKzMzLDM2IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCiAKKyNkZWZpbmUgVFJBQ0VfQlVGRkVSX0ZMQUdTCShSQl9GTF9PVkVSV1JJVEUpCisKIHVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseQl0cmFjaW5nX21heF9sYXRlbmN5ID0gKGN5Y2xlX3QpVUxPTkdfTUFYOwogdW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfdGhyZXNoOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfbnJfYnVmZmVyczsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBmdHJhY2VfY3B1X2Rpc2FibGVkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kaXNhYmxlX2NwdSh2b2lkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZW5hYmxlX2NwdSh2b2lkKQoreworCWxvY2FsX2RlYygmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKwogc3RhdGljIGNwdW1hc2tfdCBfX3JlYWRfbW9zdGx5CQl0cmFjaW5nX2J1ZmZlcl9tYXNrOwogCiAjZGVmaW5lIGZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkJXAogCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgdHJhY2luZ19idWZmZXJfbWFzaykKIAotc3RhdGljIGludCB0cmFjZV9hbGxvY19wYWdlKHZvaWQpOwotc3RhdGljIGludCB0cmFjZV9mcmVlX3BhZ2Uodm9pZCk7Ci0KIHN0YXRpYyBpbnQgdHJhY2luZ19kaXNhYmxlZCA9IDE7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYWNpbmdfcGFnZXNfYWxsb2NhdGVkOwotCiBsb25nCiBuczJ1c2VjcyhjeWNsZV90IG5zZWMpCiB7CkBAIC02MCw3ICs3Myw5IEBACiAKIGN5Y2xlX3QgZnRyYWNlX25vdyhpbnQgY3B1KQogewotCXJldHVybiBjcHVfY2xvY2soY3B1KTsKKwl1NjQgdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdSk7CisJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1LCAmdHMpOworCXJldHVybiB0czsKIH0KIAogLyoKQEAgLTEwMCwxMSArMTE1LDE4IEBACiBpbnQJCQkJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQ7CiAKIC8qCi0gKiB0cmFjZV9ucl9lbnRyaWVzIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IGlzIGFsbG9jYXRlZAotICogZm9yIGEgYnVmZmVyLiBOb3RlLCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaXMgYWx3YXlzIHJvdW5kZWQKLSAqIHRvIEVOVFJJRVNfUEVSX1BBR0UuCisgKiB0cmFjZV9idWZfc2l6ZSBpcyB0aGUgc2l6ZSBpbiBieXRlcyB0aGF0IGlzIGFsbG9jYXRlZAorICogZm9yIGEgYnVmZmVyLiBOb3RlLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlzIGFsd2F5cyByb3VuZGVkCisgKiB0byBwYWdlIHNpemUuCisgKgorICogVGhpcyBudW1iZXIgaXMgcHVycG9zZWx5IHNldCB0byBhIGxvdyBudW1iZXIgb2YgMTYzODQuCisgKiBJZiB0aGUgZHVtcCBvbiBvb3BzIGhhcHBlbnMsIGl0IHdpbGwgYmUgbXVjaCBhcHByZWNpYXRlZAorICogdG8gbm90IGhhdmUgdG8gd2FpdCBmb3IgYWxsIHRoYXQgb3V0cHV0LiBBbnl3YXkgdGhpcyBjYW4gYmUKKyAqIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgY29uZmlndXJhYmxlLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZwkJdHJhY2VfbnJfZW50cmllcyA9IDY1NTM2VUw7CisjZGVmaW5lIFRSQUNFX0JVRl9TSVpFX0RFRkFVTFQJMTQ0MTc5MlVMIC8qIDE2Mzg0ICogODggKHNpemVvZihlbnRyeSkpICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQl0cmFjZV9idWZfc2l6ZSA9IFRSQUNFX0JVRl9TSVpFX0RFRkFVTFQ7CiAKIC8qIHRyYWNlX3R5cGVzIGhvbGRzIGEgbGluayBsaXN0IG9mIGF2YWlsYWJsZSB0cmFjZXJzLiAqLwogc3RhdGljIHN0cnVjdCB0cmFjZXIJCSp0cmFjZV90eXBlcyBfX3JlYWRfbW9zdGx5OwpAQCAtMTMzLDI0ICsxNTUsNiBAQAogLyogdHJhY2VfZmxhZ3MgaG9sZHMgaXRlcl9jdHJsIG9wdGlvbnMgKi8KIHVuc2lnbmVkIGxvbmcgdHJhY2VfZmxhZ3MgPSBUUkFDRV9JVEVSX1BSSU5UX1BBUkVOVDsKIAotc3RhdGljIG5vdHJhY2Ugdm9pZCBub190cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0JaW50IGNwdTsKLQotCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMDsKLQlpZih0ci0+Y3RybCkKLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCQl0cmFjaW5nX3Jlc2V0KHRyLT5kYXRhW2NwdV0pOwotCXRyYWNlcl9lbmFibGVkID0gMDsKLX0KLQotLyogZHVtbXkgdHJhY2UgdG8gZGlzYWJsZSB0cmFjaW5nICovCi1zdGF0aWMgc3RydWN0IHRyYWNlciBub190cmFjZXIgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAibm9uZSIsCi0JLmluaXQJCT0gbm9fdHJhY2VfaW5pdAotfTsKLQotCiAvKioKICAqIHRyYWNlX3dha2VfdXAgLSB3YWtlIHVwIHRhc2tzIHdhaXRpbmcgZm9yIHRyYWNlIGlucHV0CiAgKgpAQCAtMTY3LDIzICsxNzEsMjEgQEAKIAkJd2FrZV91cCgmdHJhY2Vfd2FpdCk7CiB9CiAKLSNkZWZpbmUgRU5UUklFU19QRVJfUEFHRSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCB0cmFjZV9lbnRyeSkpCi0KLXN0YXRpYyBpbnQgX19pbml0IHNldF9ucl9lbnRyaWVzKGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgX19pbml0IHNldF9idWZfc2l6ZShjaGFyICpzdHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9lbnRyaWVzOworCXVuc2lnbmVkIGxvbmcgYnVmX3NpemU7CiAJaW50IHJldDsKIAogCWlmICghc3RyKQogCQlyZXR1cm4gMDsKLQlyZXQgPSBzdHJpY3Rfc3RydG91bChzdHIsIDAsICZucl9lbnRyaWVzKTsKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChzdHIsIDAsICZidWZfc2l6ZSk7CiAJLyogbnJfZW50cmllcyBjYW4gbm90IGJlIHplcm8gKi8KLQlpZiAocmV0IDwgMCB8fCBucl9lbnRyaWVzID09IDApCisJaWYgKHJldCA8IDAgfHwgYnVmX3NpemUgPT0gMCkKIAkJcmV0dXJuIDA7Ci0JdHJhY2VfbnJfZW50cmllcyA9IG5yX2VudHJpZXM7CisJdHJhY2VfYnVmX3NpemUgPSBidWZfc2l6ZTsKIAlyZXR1cm4gMTsKIH0KLV9fc2V0dXAoInRyYWNlX2VudHJpZXM9Iiwgc2V0X25yX2VudHJpZXMpOworX19zZXR1cCgidHJhY2VfYnVmX3NpemU9Iiwgc2V0X2J1Zl9zaXplKTsKIAogdW5zaWduZWQgbG9uZyBuc2Vjc190b191c2Vjcyh1bnNpZ25lZCBsb25nIG5zZWNzKQogewpAQCAtMTkxLDIxICsxOTMsNiBAQAogfQogCiAvKgotICogdHJhY2VfZmxhZ190eXBlIGlzIGFuIGVudW1lcmF0aW9uIHRoYXQgaG9sZHMgZGlmZmVyZW50Ci0gKiBzdGF0ZXMgd2hlbiBhIHRyYWNlIG9jY3Vycy4gVGhlc2UgYXJlOgotICogIElSUVNfT0ZGCS0gaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkCi0gKiAgTkVFRF9SRVNDRUQgLSByZXNjaGVkdWxlIGlzIHJlcXVlc3RlZAotICogIEhBUkRJUlEJLSBpbnNpZGUgYW4gaW50ZXJydXB0IGhhbmRsZXIKLSAqICBTT0ZUSVJRCS0gaW5zaWRlIGEgc29mdGlycSBoYW5kbGVyCi0gKi8KLWVudW0gdHJhY2VfZmxhZ190eXBlIHsKLQlUUkFDRV9GTEFHX0lSUVNfT0ZGCQk9IDB4MDEsCi0JVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQJCT0gMHgwMiwKLQlUUkFDRV9GTEFHX0hBUkRJUlEJCT0gMHgwNCwKLQlUUkFDRV9GTEFHX1NPRlRJUlEJCT0gMHgwOCwKLX07Ci0KLS8qCiAgKiBUUkFDRV9JVEVSX1NZTV9NQVNLIG1hc2tzIHRoZSBvcHRpb25zIGluIHRyYWNlX2ZsYWdzIHRoYXQKICAqIGNvbnRyb2wgdGhlIG91dHB1dCBvZiBrZXJuZWwgc3ltYm9scy4KICAqLwpAQCAtMjI0LDYgKzIxMSw3IEBACiAJImJsb2NrIiwKIAkic3RhY2t0cmFjZSIsCiAJInNjaGVkLXRyZWUiLAorCSJmdHJhY2VfcHJpbnRrIiwKIAlOVUxMCiB9OwogCkBAIC0yNjYsNTQgKzI1NCw2IEBACiAJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKIH0KIAotI2RlZmluZSBDSEVDS19DT05EKGNvbmQpCQkJXAotCWlmICh1bmxpa2VseShjb25kKSkgewkJCVwKLQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7CQlcCi0JCVdBUk5fT04oMSk7CQkJXAotCQlyZXR1cm4gLTE7CQkJXAotCX0KLQotLyoqCi0gKiBjaGVja19wYWdlcyAtIGludGVncml0eSBjaGVjayBvZiB0cmFjZSBidWZmZXJzCi0gKgotICogQXMgYSBzYWZ0eSBtZWFzdXJlIHdlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBwYWdlcyBoYXZlIG5vdAotICogYmVlbiBjb3JydXB0ZWQuCi0gKi8KLWludCBjaGVja19wYWdlcyhzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKQotewotCXN0cnVjdCBwYWdlICpwYWdlLCAqdG1wOwotCi0JQ0hFQ0tfQ09ORChkYXRhLT50cmFjZV9wYWdlcy5uZXh0LT5wcmV2ICE9ICZkYXRhLT50cmFjZV9wYWdlcyk7Ci0JQ0hFQ0tfQ09ORChkYXRhLT50cmFjZV9wYWdlcy5wcmV2LT5uZXh0ICE9ICZkYXRhLT50cmFjZV9wYWdlcyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLCAmZGF0YS0+dHJhY2VfcGFnZXMsIGxydSkgewotCQlDSEVDS19DT05EKHBhZ2UtPmxydS5uZXh0LT5wcmV2ICE9ICZwYWdlLT5scnUpOwotCQlDSEVDS19DT05EKHBhZ2UtPmxydS5wcmV2LT5uZXh0ICE9ICZwYWdlLT5scnUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGhlYWRfcGFnZSAtIHBhZ2UgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZSBpbiBwZXJfY3B1IGJ1ZmZlci4KLSAqCi0gKiBoZWFkX3BhZ2UgcmV0dXJucyB0aGUgcGFnZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIGluCi0gKiBhIHBlcl9jcHUgYnVmZmVyLiBUaGlzIGFsc28gcHJlZm9ybXMgdmFyaW91cyBjb25zaXN0ZW5jeQotICogY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGhhcyBub3QgYmVlbiBjb3JydXB0ZWQuCi0gKi8KLXZvaWQgKmhlYWRfcGFnZShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JaWYgKGxpc3RfZW1wdHkoJmRhdGEtPnRyYWNlX3BhZ2VzKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwYWdlID0gbGlzdF9lbnRyeShkYXRhLT50cmFjZV9wYWdlcy5uZXh0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKLQlCVUdfT04oJnBhZ2UtPmxydSA9PSAmZGF0YS0+dHJhY2VfcGFnZXMpOwotCi0JcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKLX0KLQogLyoqCiAgKiB0cmFjZV9zZXFfcHJpbnRmIC0gc2VxdWVuY2UgcHJpbnRpbmcgb2YgdHJhY2UgaW5mb3JtYXRpb24KICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCkBAIC0zOTUsMjggKzMzNSwyMyBAQAogCXJldHVybiBsZW47CiB9CiAKLSNkZWZpbmUgSEVYX0NIQVJTIDE3Ci1zdGF0aWMgY29uc3QgY2hhciBoZXgyYXNjW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisjZGVmaW5lIE1BWF9NRU1IRVhfQllURVMJOAorI2RlZmluZSBIRVhfQ0hBUlMJCShNQVhfTUVNSEVYX0JZVEVTKjIgKyAxKQogCiBzdGF0aWMgaW50CiB0cmFjZV9zZXFfcHV0bWVtX2hleChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB2b2lkICptZW0sIHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgY2hhciBoZXhbSEVYX0NIQVJTXTsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gbWVtOwotCXVuc2lnbmVkIGNoYXIgYnl0ZTsKIAlpbnQgaSwgajsKIAotCUJVR19PTihsZW4gPj0gSEVYX0NIQVJTKTsKLQogI2lmZGVmIF9fQklHX0VORElBTgogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBpKyspIHsKICNlbHNlCiAJZm9yIChpID0gbGVuLTEsIGogPSAwOyBpID49IDA7IGktLSkgewogI2VuZGlmCi0JCWJ5dGUgPSBkYXRhW2ldOwotCi0JCWhleFtqKytdID0gaGV4MmFzY1tieXRlICYgMHgwZl07Ci0JCWhleFtqKytdID0gaGV4MmFzY1tieXRlID4+IDRdOworCQloZXhbaisrXSA9IGhleF9hc2NfaGkoZGF0YVtpXSk7CisJCWhleFtqKytdID0gaGV4X2FzY19sbyhkYXRhW2ldKTsKIAl9CiAJaGV4W2orK10gPSAnICc7CiAKQEAgLTQ2MCwzNCArMzk1LDYgQEAKIAl0cmFjZV9zZXFfcmVzZXQocyk7CiB9CiAKLS8qCi0gKiBmbGlwIHRoZSB0cmFjZSBidWZmZXJzIGJldHdlZW4gdHdvIHRyYWNlIGRlc2NyaXB0b3JzLgotICogVGhpcyB1c3VhbGx5IGlzIHRoZSBidWZmZXJzIGJldHdlZW4gdGhlIGdsb2JhbF90cmFjZSBhbmQKLSAqIHRoZSBtYXhfdHIgdG8gcmVjb3JkIGEgc25hcHNob3Qgb2YgYSBjdXJyZW50IHRyYWNlLgotICoKLSAqIFRoZSBmdHJhY2VfbWF4X2xvY2sgbXVzdCBiZSBoZWxkLgotICovCi1zdGF0aWMgdm9pZAotZmxpcF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICp0cjEsIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKnRyMikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZsaXBfcGFnZXM7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZmxpcF9wYWdlcyk7Ci0KLQltZW1jcHkoJnRyMS0+dHJhY2VfaGVhZF9pZHgsICZ0cjItPnRyYWNlX2hlYWRfaWR4LAotCQlzaXplb2Yoc3RydWN0IHRyYWNlX2FycmF5X2NwdSkgLQotCQlvZmZzZXRvZihzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1LCB0cmFjZV9oZWFkX2lkeCkpOwotCi0JY2hlY2tfcGFnZXModHIxKTsKLQljaGVja19wYWdlcyh0cjIpOwotCWxpc3Rfc3BsaWNlX2luaXQoJnRyMS0+dHJhY2VfcGFnZXMsICZmbGlwX3BhZ2VzKTsKLQlsaXN0X3NwbGljZV9pbml0KCZ0cjItPnRyYWNlX3BhZ2VzLCAmdHIxLT50cmFjZV9wYWdlcyk7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmZmxpcF9wYWdlcywgJnRyMi0+dHJhY2VfcGFnZXMpOwotCUJVR19PTighbGlzdF9lbXB0eSgmZmxpcF9wYWdlcykpOwotCWNoZWNrX3BhZ2VzKHRyMSk7Ci0JY2hlY2tfcGFnZXModHIyKTsKLX0KLQogLyoqCiAgKiB1cGRhdGVfbWF4X3RyIC0gc25hcHNob3QgYWxsIHRyYWNlIGJ1ZmZlcnMgZnJvbSBnbG9iYWxfdHJhY2UgdG8gbWF4X3RyCiAgKiBAdHI6IHRyYWNlcgpAQCAtNTAwLDE3ICs0MDcsMTcgQEAKIHZvaWQKIHVwZGF0ZV9tYXhfdHIoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjcHUpCiB7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQlpbnQgaTsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZiA9IHRyLT5idWZmZXI7CiAKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJX19yYXdfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwotCS8qIGNsZWFyIG91dCBhbGwgdGhlIHByZXZpb3VzIHRyYWNlcyAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJZGF0YSA9IHRyLT5kYXRhW2ldOwotCQlmbGlwX3RyYWNlKG1heF90ci5kYXRhW2ldLCBkYXRhKTsKLQkJdHJhY2luZ19yZXNldChkYXRhKTsKLQl9CisKKwl0ci0+YnVmZmVyID0gbWF4X3RyLmJ1ZmZlcjsKKwltYXhfdHIuYnVmZmVyID0gYnVmOworCisJZnRyYWNlX2Rpc2FibGVfY3B1KCk7CisJcmluZ19idWZmZXJfcmVzZXQodHItPmJ1ZmZlcik7CisJZnRyYWNlX2VuYWJsZV9jcHUoKTsKIAogCV9fdXBkYXRlX21heF90cih0ciwgdHNrLCBjcHUpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwpAQCAtNTI3LDE2ICs0MzQsMTkgQEAKIHZvaWQKIHVwZGF0ZV9tYXhfdHJfc2luZ2xlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY3B1KQogewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCWludCBpOworCWludCByZXQ7CiAKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJX19yYXdfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpCi0JCXRyYWNpbmdfcmVzZXQobWF4X3RyLmRhdGFbaV0pOwogCi0JZmxpcF90cmFjZShtYXhfdHIuZGF0YVtjcHVdLCBkYXRhKTsKLQl0cmFjaW5nX3Jlc2V0KGRhdGEpOworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCisJcmluZ19idWZmZXJfcmVzZXQobWF4X3RyLmJ1ZmZlcik7CisJcmV0ID0gcmluZ19idWZmZXJfc3dhcF9jcHUobWF4X3RyLmJ1ZmZlciwgdHItPmJ1ZmZlciwgY3B1KTsKKworCWZ0cmFjZV9lbmFibGVfY3B1KCk7CisKKwlXQVJOX09OX09OQ0UocmV0KTsKIAogCV9fdXBkYXRlX21heF90cih0ciwgdHNrLCBjcHUpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwpAQCAtNTczLDcgKzQ4Myw2IEBACiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKIAlpZiAodHlwZS0+c2VsZnRlc3QpIHsKIAkJc3RydWN0IHRyYWNlciAqc2F2ZWRfdHJhY2VyID0gY3VycmVudF90cmFjZTsKLQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAkJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7CiAJCWludCBzYXZlZF9jdHJsID0gdHItPmN0cmw7CiAJCWludCBpOwpAQCAtNTg1LDEwICs0OTQsNyBAQAogCQkgKiBJZiB3ZSBmYWlsLCB3ZSBkbyBub3QgcmVnaXN0ZXIgdGhpcyB0cmFjZXIuCiAJCSAqLwogCQlmb3JfZWFjaF90cmFjaW5nX2NwdShpKSB7Ci0JCQlkYXRhID0gdHItPmRhdGFbaV07Ci0JCQlpZiAoIWhlYWRfcGFnZShkYXRhKSkKLQkJCQljb250aW51ZTsKLQkJCXRyYWNpbmdfcmVzZXQoZGF0YSk7CisJCQl0cmFjaW5nX3Jlc2V0KHRyLCBpKTsKIAkJfQogCQljdXJyZW50X3RyYWNlID0gdHlwZTsKIAkJdHItPmN0cmwgPSAwOwpAQCAtNjA0LDEwICs1MTAsNyBAQAogCQl9CiAJCS8qIE9ubHkgcmVzZXQgb24gcGFzc2luZywgdG8gYXZvaWQgdG91Y2hpbmcgY29ycnVwdGVkIGJ1ZmZlcnMgKi8KIAkJZm9yX2VhY2hfdHJhY2luZ19jcHUoaSkgewotCQkJZGF0YSA9IHRyLT5kYXRhW2ldOwotCQkJaWYgKCFoZWFkX3BhZ2UoZGF0YSkpCi0JCQkJY29udGludWU7Ci0JCQl0cmFjaW5nX3Jlc2V0KGRhdGEpOworCQkJdHJhY2luZ19yZXNldCh0ciwgaSk7CiAJCX0KIAkJcHJpbnRrKEtFUk5fQ09OVCAiUEFTU0VEXG4iKTsKIAl9CkBAIC02NTMsMTMgKzU1NiwxMSBAQAogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiB9CiAKLXZvaWQgdHJhY2luZ19yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKQordm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpCiB7Ci0JZGF0YS0+dHJhY2VfaWR4ID0gMDsKLQlkYXRhLT5vdmVycnVuID0gMDsKLQlkYXRhLT50cmFjZV9oZWFkID0gZGF0YS0+dHJhY2VfdGFpbCA9IGhlYWRfcGFnZShkYXRhKTsKLQlkYXRhLT50cmFjZV9oZWFkX2lkeCA9IDA7Ci0JZGF0YS0+dHJhY2VfdGFpbF9pZHggPSAwOworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCXJpbmdfYnVmZmVyX3Jlc2V0X2NwdSh0ci0+YnVmZmVyLCBjcHUpOworCWZ0cmFjZV9lbmFibGVfY3B1KCk7CiB9CiAKICNkZWZpbmUgU0FWRURfQ01ETElORVMgMTI4CkBAIC03NDUsODIgKzY0NiwxNiBAQAogCXRyYWNlX3NhdmVfY21kbGluZSh0c2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKgotdHJhY2VfbmV4dF9saXN0KHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCi17Ci0JLyoKLQkgKiBSb3VuZHJvYmluIC0gYnV0IHNraXAgdGhlIGhlYWQgKHdoaWNoIGlzIG5vdCBhIHJlYWwgcGFnZSk6Ci0JICovCi0JbmV4dCA9IG5leHQtPm5leHQ7Ci0JaWYgKHVubGlrZWx5KG5leHQgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKSkKLQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JQlVHX09OKG5leHQgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKTsKLQotCXJldHVybiBuZXh0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotdHJhY2VfbmV4dF9wYWdlKHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsIHZvaWQgKmFkZHIpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYWRkcik7Ci0KLQluZXh0ID0gdHJhY2VfbmV4dF9saXN0KGRhdGEsICZwYWdlLT5scnUpOwotCXBhZ2UgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCi0JcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHJhY2VfZW50cnkgKgotdHJhY2luZ19nZXRfdHJhY2VfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGlkeCwgaWR4X25leHQ7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKLQotCWRhdGEtPnRyYWNlX2lkeCsrOwotCWlkeCA9IGRhdGEtPnRyYWNlX2hlYWRfaWR4OwotCWlkeF9uZXh0ID0gaWR4ICsgMTsKLQotCUJVR19PTihpZHggKiBUUkFDRV9FTlRSWV9TSVpFID49IFBBR0VfU0laRSk7Ci0KLQllbnRyeSA9IGRhdGEtPnRyYWNlX2hlYWQgKyBpZHggKiBUUkFDRV9FTlRSWV9TSVpFOwotCi0JaWYgKHVubGlrZWx5KGlkeF9uZXh0ID49IEVOVFJJRVNfUEVSX1BBR0UpKSB7Ci0JCWRhdGEtPnRyYWNlX2hlYWQgPSB0cmFjZV9uZXh0X3BhZ2UoZGF0YSwgZGF0YS0+dHJhY2VfaGVhZCk7Ci0JCWlkeF9uZXh0ID0gMDsKLQl9Ci0KLQlpZiAoZGF0YS0+dHJhY2VfaGVhZCA9PSBkYXRhLT50cmFjZV90YWlsICYmCi0JICAgIGlkeF9uZXh0ID09IGRhdGEtPnRyYWNlX3RhaWxfaWR4KSB7Ci0JCS8qIG92ZXJydW4gKi8KLQkJZGF0YS0+b3ZlcnJ1bisrOwotCQlkYXRhLT50cmFjZV90YWlsX2lkeCsrOwotCQlpZiAoZGF0YS0+dHJhY2VfdGFpbF9pZHggPj0gRU5UUklFU19QRVJfUEFHRSkgewotCQkJZGF0YS0+dHJhY2VfdGFpbCA9Ci0JCQkJdHJhY2VfbmV4dF9wYWdlKGRhdGEsIGRhdGEtPnRyYWNlX3RhaWwpOwotCQkJZGF0YS0+dHJhY2VfdGFpbF9pZHggPSAwOwotCQl9Ci0JfQotCi0JZGF0YS0+dHJhY2VfaGVhZF9pZHggPSBpZHhfbmV4dDsKLQotCXJldHVybiBlbnRyeTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi10cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit2b2lkCit0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkgICAgIGludCBwYykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JdW5zaWduZWQgbG9uZyBwYzsKIAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCi0JZW50cnktPnByZWVtcHRfY291bnQJPSBwYyAmIDB4ZmY7Ci0JZW50cnktPnBpZAkJPSAodHNrKSA/IHRzay0+cGlkIDogMDsKLQllbnRyeS0+dAkJPSBmdHJhY2Vfbm93KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCWVudHJ5LT5mbGFncyA9IChpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSA/IFRSQUNFX0ZMQUdfSVJRU19PRkYgOiAwKSB8CisJZW50cnktPnByZWVtcHRfY291bnQJCT0gcGMgJiAweGZmOworCWVudHJ5LT5waWQJCQk9ICh0c2spID8gdHNrLT5waWQgOiAwOworCWVudHJ5LT5mbGFncyA9CisJCShpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSA/IFRSQUNFX0ZMQUdfSVJRU19PRkYgOiAwKSB8CiAJCSgocGMgJiBIQVJESVJRX01BU0spID8gVFJBQ0VfRkxBR19IQVJESVJRIDogMCkgfAogCQkoKHBjICYgU09GVElSUV9NQVNLKSA/IFRSQUNFX0ZMQUdfU09GVElSUSA6IDApIHwKIAkJKG5lZWRfcmVzY2hlZCgpID8gVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQgOiAwKTsKQEAgLTgyOCwxMTkgKzY2MywxMTAgQEAKIAogdm9pZAogdHJhY2VfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJICAgICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCSAgICAgICBpbnQgcGMpCiB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBmdHJhY2VfZW50cnkgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQllbnRyeQkJCT0gdHJhY2luZ19nZXRfdHJhY2VfZW50cnkodHIsIGRhdGEpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksIGZsYWdzKTsKLQllbnRyeS0+dHlwZQkJPSBUUkFDRV9GTjsKLQllbnRyeS0+Zm4uaXAJCT0gaXA7Ci0JZW50cnktPmZuLnBhcmVudF9pcAk9IHBhcmVudF9pcDsKLQlfX3Jhd19zcGluX3VubG9jaygmZGF0YS0+bG9jayk7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CisJLyogSWYgd2UgYXJlIHJlYWRpbmcgdGhlIHJpbmcgYnVmZmVyLCBkb24ndCB0cmFjZSAqLworCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCisJCXJldHVybjsKKworCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAorCQkJCQkgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0ZOOworCWVudHJ5LT5pcAkJCT0gaXA7CisJZW50cnktPnBhcmVudF9pcAkJPSBwYXJlbnRfaXA7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKIH0KIAogdm9pZAogZnRyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0gICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisgICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisgICAgICAgaW50IHBjKQogewogCWlmIChsaWtlbHkoIWF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIH0KIAotI2lmZGVmIENPTkZJR19NTUlPVFJBQ0UKLXZvaWQgX190cmFjZV9tbWlvdHJhY2Vfcncoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJCQkJCXN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KQorc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkgICAgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJICAgICAgIGludCBza2lwLCBpbnQgcGMpCiB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBzdGFja19lbnRyeSAqZW50cnk7CisJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1RBQ0tUUkFDRSkpCisJCXJldHVybjsKIAotCWVudHJ5CQkJPSB0cmFjaW5nX2dldF90cmFjZV9lbnRyeSh0ciwgZGF0YSk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnRyeSwgMCk7Ci0JZW50cnktPnR5cGUJCT0gVFJBQ0VfTU1JT19SVzsKLQllbnRyeS0+bW1pb3J3CQk9ICpydzsKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICZpcnFfZmxhZ3MpOworCWlmICghZXZlbnQpCisJCXJldHVybjsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7CisJZW50cnktPmVudC50eXBlCQk9IFRSQUNFX1NUQUNLOwogCi0JX19yYXdfc3Bpbl91bmxvY2soJmRhdGEtPmxvY2spOwotCXJhd19sb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworCW1lbXNldCgmZW50cnktPmNhbGxlciwgMCwgc2l6ZW9mKGVudHJ5LT5jYWxsZXIpKTsKIAotCXRyYWNlX3dha2VfdXAoKTsKKwl0cmFjZS5ucl9lbnRyaWVzCT0gMDsKKwl0cmFjZS5tYXhfZW50cmllcwk9IEZUUkFDRV9TVEFDS19FTlRSSUVTOworCXRyYWNlLnNraXAJCT0gc2tpcDsKKwl0cmFjZS5lbnRyaWVzCQk9IGVudHJ5LT5jYWxsZXI7CisKKwlzYXZlX3N0YWNrX3RyYWNlKCZ0cmFjZSk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKIH0KIAotdm9pZCBfX3RyYWNlX21taW90cmFjZV9tYXAoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJCQkJCXN0cnVjdCBtbWlvdHJhY2VfbWFwICptYXApCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQotCXJhd19sb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOwotCV9fcmF3X3NwaW5fbG9jaygmZGF0YS0+bG9jayk7Ci0KLQllbnRyeQkJCT0gdHJhY2luZ19nZXRfdHJhY2VfZW50cnkodHIsIGRhdGEpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksIDApOwotCWVudHJ5LT50eXBlCQk9IFRSQUNFX01NSU9fTUFQOwotCWVudHJ5LT5tbWlvbWFwCQk9ICptYXA7Ci0KLQlfX3Jhd19zcGluX3VubG9jaygmZGF0YS0+bG9jayk7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBfX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCSAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCSAgIGludCBza2lwKQogewotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOworCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIHNraXAsIHByZWVtcHRfY291bnQoKSk7Cit9CiAKLQlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1RBQ0tUUkFDRSkpCitzdGF0aWMgdm9pZAorZnRyYWNlX3RyYWNlX3NwZWNpYWwodm9pZCAqX190ciwgdm9pZCAqX19kYXRhLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsCisJCSAgICAgaW50IHBjKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSA9IF9fZGF0YTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gX190cjsKKwlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICZpcnFfZmxhZ3MpOworCWlmICghZXZlbnQpCiAJCXJldHVybjsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1NQRUNJQUw7CisJZW50cnktPmFyZzEJCQk9IGFyZzE7CisJZW50cnktPmFyZzIJCQk9IGFyZzI7CisJZW50cnktPmFyZzMJCQk9IGFyZzM7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGRhdGEsIGlycV9mbGFncywgNCwgcGMpOwogCi0JZW50cnkJCQk9IHRyYWNpbmdfZ2V0X3RyYWNlX2VudHJ5KHRyLCBkYXRhKTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudHJ5LCBmbGFncyk7Ci0JZW50cnktPnR5cGUJCT0gVFJBQ0VfU1RBQ0s7Ci0KLQltZW1zZXQoJmVudHJ5LT5zdGFjaywgMCwgc2l6ZW9mKGVudHJ5LT5zdGFjaykpOwotCi0JdHJhY2UubnJfZW50cmllcwk9IDA7Ci0JdHJhY2UubWF4X2VudHJpZXMJPSBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsKLQl0cmFjZS5za2lwCQk9IHNraXA7Ci0JdHJhY2UuZW50cmllcwkJPSBlbnRyeS0+c3RhY2suY2FsbGVyOwotCi0Jc2F2ZV9zdGFja190cmFjZSgmdHJhY2UpOworCXRyYWNlX3dha2VfdXAoKTsKIH0KIAogdm9pZAogX190cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsIHZvaWQgKl9fZGF0YSwKIAkJdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykKIHsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhID0gX19kYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBfX3RyOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQlyYXdfbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJmRhdGEtPmxvY2spOwotCWVudHJ5CQkJPSB0cmFjaW5nX2dldF90cmFjZV9lbnRyeSh0ciwgZGF0YSk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnRyeSwgMCk7Ci0JZW50cnktPnR5cGUJCT0gVFJBQ0VfU1BFQ0lBTDsKLQllbnRyeS0+c3BlY2lhbC5hcmcxCT0gYXJnMTsKLQllbnRyeS0+c3BlY2lhbC5hcmcyCT0gYXJnMjsKLQllbnRyeS0+c3BlY2lhbC5hcmczCT0gYXJnMzsKLQlfX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBpcnFfZmxhZ3MsIDQpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKKwlmdHJhY2VfdHJhY2Vfc3BlY2lhbChfX3RyLCBfX2RhdGEsIGFyZzEsIGFyZzIsIGFyZzMsIHByZWVtcHRfY291bnQoKSk7CiB9CiAKIHZvaWQKQEAgLTk0OCwyNSArNzc0LDI4IEBACiAJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAotCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKIHsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQllbnRyeQkJCT0gdHJhY2luZ19nZXRfdHJhY2VfZW50cnkodHIsIGRhdGEpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksIGZsYWdzKTsKLQllbnRyeS0+dHlwZQkJPSBUUkFDRV9DVFg7Ci0JZW50cnktPmN0eC5wcmV2X3BpZAk9IHByZXYtPnBpZDsKLQllbnRyeS0+Y3R4LnByZXZfcHJpbwk9IHByZXYtPnByaW87Ci0JZW50cnktPmN0eC5wcmV2X3N0YXRlCT0gcHJldi0+c3RhdGU7Ci0JZW50cnktPmN0eC5uZXh0X3BpZAk9IG5leHQtPnBpZDsKLQllbnRyeS0+Y3R4Lm5leHRfcHJpbwk9IG5leHQtPnByaW87Ci0JZW50cnktPmN0eC5uZXh0X3N0YXRlCT0gbmV4dC0+c3RhdGU7Ci0JX190cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDUpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICAgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0NUWDsKKwllbnRyeS0+cHJldl9waWQJCQk9IHByZXYtPnBpZDsKKwllbnRyeS0+cHJldl9wcmlvCQk9IHByZXYtPnByaW87CisJZW50cnktPnByZXZfc3RhdGUJCT0gcHJldi0+c3RhdGU7CisJZW50cnktPm5leHRfcGlkCQkJPSBuZXh0LT5waWQ7CisJZW50cnktPm5leHRfcHJpbwkJPSBuZXh0LT5wcmlvOworCWVudHJ5LT5uZXh0X3N0YXRlCQk9IG5leHQtPnN0YXRlOworCWVudHJ5LT5uZXh0X2NwdQk9IHRhc2tfY3B1KG5leHQpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBmbGFncywgNSwgcGMpOwogfQogCiB2b2lkCkBAIC05NzQsMjUgKzgwMywyOCBAQAogCQkJICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQogewotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQlyYXdfbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJmRhdGEtPmxvY2spOwotCWVudHJ5CQkJPSB0cmFjaW5nX2dldF90cmFjZV9lbnRyeSh0ciwgZGF0YSk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnRyeSwgZmxhZ3MpOwotCWVudHJ5LT50eXBlCQk9IFRSQUNFX1dBS0U7Ci0JZW50cnktPmN0eC5wcmV2X3BpZAk9IGN1cnItPnBpZDsKLQllbnRyeS0+Y3R4LnByZXZfcHJpbwk9IGN1cnItPnByaW87Ci0JZW50cnktPmN0eC5wcmV2X3N0YXRlCT0gY3Vyci0+c3RhdGU7Ci0JZW50cnktPmN0eC5uZXh0X3BpZAk9IHdha2VlLT5waWQ7Ci0JZW50cnktPmN0eC5uZXh0X3ByaW8JPSB3YWtlZS0+cHJpbzsKLQllbnRyeS0+Y3R4Lm5leHRfc3RhdGUJPSB3YWtlZS0+c3RhdGU7Ci0JX190cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDYpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICAgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1dBS0U7CisJZW50cnktPnByZXZfcGlkCQkJPSBjdXJyLT5waWQ7CisJZW50cnktPnByZXZfcHJpbwkJPSBjdXJyLT5wcmlvOworCWVudHJ5LT5wcmV2X3N0YXRlCQk9IGN1cnItPnN0YXRlOworCWVudHJ5LT5uZXh0X3BpZAkJCT0gd2FrZWUtPnBpZDsKKwllbnRyeS0+bmV4dF9wcmlvCQk9IHdha2VlLT5wcmlvOworCWVudHJ5LT5uZXh0X3N0YXRlCQk9IHdha2VlLT5zdGF0ZTsKKwllbnRyeS0+bmV4dF9jcHUJCQk9IHRhc2tfY3B1KHdha2VlKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDYsIHBjKTsKIAogCXRyYWNlX3dha2VfdXAoKTsKIH0KQEAgLTEwMDIsMjMgKzgzNCwyMSBAQAogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGRpc2FibGVkOwogCWludCBjcHU7CisJaW50IHBjOwogCi0JaWYgKHRyYWNpbmdfZGlzYWJsZWQgfHwgY3VycmVudF90cmFjZSA9PSAmbm9fdHJhY2VyIHx8ICF0ci0+Y3RybCkKKwlpZiAodHJhY2luZ19kaXNhYmxlZCB8fCAhdHItPmN0cmwpCiAJCXJldHVybjsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0JZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwogCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJX190cmFjZV9zcGVjaWFsKHRyLCBkYXRhLCBhcmcxLCBhcmcyLCBhcmczKTsKKwlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKKwkJZnRyYWNlX3RyYWNlX3NwZWNpYWwodHIsIGRhdGEsIGFyZzEsIGFyZzIsIGFyZzMsIHBjKTsKIAotCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogfQogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRQpAQCAtMTAyOSw3ICs4NTksOCBAQAogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGRpc2FibGVkOwotCWludCBjcHU7CisJaW50IGNwdSwgcmVzY2hlZDsKKwlpbnQgcGM7CiAKIAlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKIAkJcmV0dXJuOwpAQCAtMTAzNywxNiArODY4LDIyIEBACiAJaWYgKHNraXBfdHJhY2UoaXApKQogCQlyZXR1cm47CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJcmVzY2hlZCA9IG5lZWRfcmVzY2hlZCgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlkYXRhID0gdHItPmRhdGFbY3B1XTsKIAlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CiAKIAlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKQotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJaWYgKHJlc2NoZWQpCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOworCWVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogfQogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQpAQCAtMTA3MywxMTEgKzkxMCw5NiBAQAogCVRSQUNFX0ZJTEVfTEFUX0ZNVAk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHRyYWNlX2VudHJ5ICoKLXRyYWNlX2VudHJ5X2lkeChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBjcHUpCitzdGF0aWMgdm9pZCB0cmFjZV9pdGVyYXRvcl9pbmNyZW1lbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgY3B1KQogewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqYXJyYXk7CisJLyogRG9uJ3QgYWxsb3cgZnRyYWNlIHRvIHRyYWNlIGludG8gdGhlIHJpbmcgYnVmZmVycyAqLworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOwogCi0JaWYgKGl0ZXItPm5leHRfaWR4W2NwdV0gPj0gdHItPmVudHJpZXMgfHwKLQkgICAgaXRlci0+bmV4dF9pZHhbY3B1XSA+PSBkYXRhLT50cmFjZV9pZHggfHwKLQkgICAgKGRhdGEtPnRyYWNlX2hlYWQgPT0gZGF0YS0+dHJhY2VfdGFpbCAmJgotCSAgICAgZGF0YS0+dHJhY2VfaGVhZF9pZHggPT0gZGF0YS0+dHJhY2VfdGFpbF9pZHgpKQotCQlyZXR1cm4gTlVMTDsKKwlpdGVyLT5pZHgrKzsKKwlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSkKKwkJcmluZ19idWZmZXJfcmVhZChpdGVyLT5idWZmZXJfaXRlcltpdGVyLT5jcHVdLCBOVUxMKTsKIAotCWlmICghaXRlci0+bmV4dF9wYWdlW2NwdV0pIHsKLQkJLyogSW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IgZm9yIHRoaXMgY3B1IHRyYWNlIGJ1ZmZlciAqLwotCQlXQVJOX09OKCFkYXRhLT50cmFjZV90YWlsKTsKLQkJcGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhLT50cmFjZV90YWlsKTsKLQkJaXRlci0+bmV4dF9wYWdlW2NwdV0gPSAmcGFnZS0+bHJ1OwotCQlpdGVyLT5uZXh0X3BhZ2VfaWR4W2NwdV0gPSBkYXRhLT50cmFjZV90YWlsX2lkeDsKLQl9Ci0KLQlwYWdlID0gbGlzdF9lbnRyeShpdGVyLT5uZXh0X3BhZ2VbY3B1XSwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JQlVHX09OKCZkYXRhLT50cmFjZV9wYWdlcyA9PSAmcGFnZS0+bHJ1KTsKLQotCWFycmF5ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCi0JV0FSTl9PTihpdGVyLT5uZXh0X3BhZ2VfaWR4W2NwdV0gPj0gRU5UUklFU19QRVJfUEFHRSk7Ci0JcmV0dXJuICZhcnJheVtpdGVyLT5uZXh0X3BhZ2VfaWR4W2NwdV1dOworCWZ0cmFjZV9lbmFibGVfY3B1KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZW50cnkgKgotZmluZF9uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50ICplbnRfY3B1KQorcGVla19uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGNwdSwgdTY0ICp0cykKIHsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gaXRlci0+dHI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqYnVmX2l0ZXIgPSBpdGVyLT5idWZmZXJfaXRlcltjcHVdOworCisJLyogRG9uJ3QgYWxsb3cgZnRyYWNlIHRvIHRyYWNlIGludG8gdGhlIHJpbmcgYnVmZmVycyAqLworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCisJaWYgKGJ1Zl9pdGVyKQorCQlldmVudCA9IHJpbmdfYnVmZmVyX2l0ZXJfcGVlayhidWZfaXRlciwgdHMpOworCWVsc2UKKwkJZXZlbnQgPSByaW5nX2J1ZmZlcl9wZWVrKGl0ZXItPnRyLT5idWZmZXIsIGNwdSwgdHMpOworCisJZnRyYWNlX2VuYWJsZV9jcHUoKTsKKworCXJldHVybiBldmVudCA/IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpIDogTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9lbnRyeSAqCitfX2ZpbmRfbmV4dF9lbnRyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCAqZW50X2NwdSwgdTY0ICplbnRfdHMpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSBpdGVyLT50ci0+YnVmZmVyOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCAqbmV4dCA9IE5VTEw7CisJdTY0IG5leHRfdHMgPSAwLCB0czsKIAlpbnQgbmV4dF9jcHUgPSAtMTsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7Ci0JCWlmICghaGVhZF9wYWdlKHRyLT5kYXRhW2NwdV0pKQorCisJCWlmIChyaW5nX2J1ZmZlcl9lbXB0eV9jcHUoYnVmZmVyLCBjcHUpKQogCQkJY29udGludWU7Ci0JCWVudCA9IHRyYWNlX2VudHJ5X2lkeCh0ciwgdHItPmRhdGFbY3B1XSwgaXRlciwgY3B1KTsKKworCQllbnQgPSBwZWVrX25leHRfZW50cnkoaXRlciwgY3B1LCAmdHMpOworCiAJCS8qCiAJCSAqIFBpY2sgdGhlIGVudHJ5IHdpdGggdGhlIHNtYWxsZXN0IHRpbWVzdGFtcDoKIAkJICovCi0JCWlmIChlbnQgJiYgKCFuZXh0IHx8IGVudC0+dCA8IG5leHQtPnQpKSB7CisJCWlmIChlbnQgJiYgKCFuZXh0IHx8IHRzIDwgbmV4dF90cykpIHsKIAkJCW5leHQgPSBlbnQ7CiAJCQluZXh0X2NwdSA9IGNwdTsKKwkJCW5leHRfdHMgPSB0czsKIAkJfQogCX0KIAogCWlmIChlbnRfY3B1KQogCQkqZW50X2NwdSA9IG5leHRfY3B1OwogCisJaWYgKGVudF90cykKKwkJKmVudF90cyA9IG5leHRfdHM7CisKIAlyZXR1cm4gbmV4dDsKIH0KIAotc3RhdGljIHZvaWQgdHJhY2VfaXRlcmF0b3JfaW5jcmVtZW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKKy8qIEZpbmQgdGhlIG5leHQgcmVhbCBlbnRyeSwgd2l0aG91dCB1cGRhdGluZyB0aGUgaXRlcmF0b3IgaXRzZWxmICovCitzdGF0aWMgc3RydWN0IHRyYWNlX2VudHJ5ICoKK2ZpbmRfbmV4dF9lbnRyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCAqZW50X2NwdSwgdTY0ICplbnRfdHMpCiB7Ci0JaXRlci0+aWR4Kys7Ci0JaXRlci0+bmV4dF9pZHhbaXRlci0+Y3B1XSsrOwotCWl0ZXItPm5leHRfcGFnZV9pZHhbaXRlci0+Y3B1XSsrOworCXJldHVybiBfX2ZpbmRfbmV4dF9lbnRyeShpdGVyLCBlbnRfY3B1LCBlbnRfdHMpOworfQogCi0JaWYgKGl0ZXItPm5leHRfcGFnZV9pZHhbaXRlci0+Y3B1XSA+PSBFTlRSSUVTX1BFUl9QQUdFKSB7Ci0JCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSBpdGVyLT50ci0+ZGF0YVtpdGVyLT5jcHVdOworLyogRmluZCB0aGUgbmV4dCByZWFsIGVudHJ5LCBhbmQgaW5jcmVtZW50IHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBlbnRyeSAqLworc3RhdGljIHZvaWQgKmZpbmRfbmV4dF9lbnRyeV9pbmMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCWl0ZXItPmVudCA9IF9fZmluZF9uZXh0X2VudHJ5KGl0ZXIsICZpdGVyLT5jcHUsICZpdGVyLT50cyk7CiAKLQkJaXRlci0+bmV4dF9wYWdlX2lkeFtpdGVyLT5jcHVdID0gMDsKLQkJaXRlci0+bmV4dF9wYWdlW2l0ZXItPmNwdV0gPQotCQkJdHJhY2VfbmV4dF9saXN0KGRhdGEsIGl0ZXItPm5leHRfcGFnZVtpdGVyLT5jcHVdKTsKLQl9CisJaWYgKGl0ZXItPmVudCkKKwkJdHJhY2VfaXRlcmF0b3JfaW5jcmVtZW50KGl0ZXIsIGl0ZXItPmNwdSk7CisKKwlyZXR1cm4gaXRlci0+ZW50ID8gaXRlciA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHRyYWNlX2NvbnN1bWUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSBpdGVyLT50ci0+ZGF0YVtpdGVyLT5jcHVdOwotCi0JZGF0YS0+dHJhY2VfdGFpbF9pZHgrKzsKLQlpZiAoZGF0YS0+dHJhY2VfdGFpbF9pZHggPj0gRU5UUklFU19QRVJfUEFHRSkgewotCQlkYXRhLT50cmFjZV90YWlsID0gdHJhY2VfbmV4dF9wYWdlKGRhdGEsIGRhdGEtPnRyYWNlX3RhaWwpOwotCQlkYXRhLT50cmFjZV90YWlsX2lkeCA9IDA7Ci0JfQotCi0JLyogQ2hlY2sgaWYgd2UgZW1wdHkgaXQsIHRoZW4gcmVzZXQgdGhlIGluZGV4ICovCi0JaWYgKGRhdGEtPnRyYWNlX2hlYWQgPT0gZGF0YS0+dHJhY2VfdGFpbCAmJgotCSAgICBkYXRhLT50cmFjZV9oZWFkX2lkeCA9PSBkYXRhLT50cmFjZV90YWlsX2lkeCkKLQkJZGF0YS0+dHJhY2VfaWR4ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgKmZpbmRfbmV4dF9lbnRyeV9pbmMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCXN0cnVjdCB0cmFjZV9lbnRyeSAqbmV4dDsKLQlpbnQgbmV4dF9jcHUgPSAtMTsKLQotCW5leHQgPSBmaW5kX25leHRfZW50cnkoaXRlciwgJm5leHRfY3B1KTsKLQotCWl0ZXItPnByZXZfZW50ID0gaXRlci0+ZW50OwotCWl0ZXItPnByZXZfY3B1ID0gaXRlci0+Y3B1OwotCi0JaXRlci0+ZW50ID0gbmV4dDsKLQlpdGVyLT5jcHUgPSBuZXh0X2NwdTsKLQotCWlmIChuZXh0KQotCQl0cmFjZV9pdGVyYXRvcl9pbmNyZW1lbnQoaXRlcik7Ci0KLQlyZXR1cm4gbmV4dCA/IGl0ZXIgOiBOVUxMOworCS8qIERvbid0IGFsbG93IGZ0cmFjZSB0byB0cmFjZSBpbnRvIHRoZSByaW5nIGJ1ZmZlcnMgKi8KKwlmdHJhY2VfZGlzYWJsZV9jcHUoKTsKKwlyaW5nX2J1ZmZlcl9jb25zdW1lKGl0ZXItPnRyLT5idWZmZXIsIGl0ZXItPmNwdSwgJml0ZXItPnRzKTsKKwlmdHJhY2VfZW5hYmxlX2NwdSgpOwogfQogCiBzdGF0aWMgdm9pZCAqc19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCkBAIC0xMjEwLDcgKzEwMzIsNyBAQAogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CiAJdm9pZCAqcCA9IE5VTEw7CiAJbG9mZl90IGwgPSAwOwotCWludCBpOworCWludCBjcHU7CiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIApAQCAtMTIyOSwxNCArMTA1MSwxNSBAQAogCQlpdGVyLT5lbnQgPSBOVUxMOwogCQlpdGVyLT5jcHUgPSAwOwogCQlpdGVyLT5pZHggPSAtMTsKLQkJaXRlci0+cHJldl9lbnQgPSBOVUxMOwotCQlpdGVyLT5wcmV2X2NwdSA9IC0xOwogCi0JCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJCWl0ZXItPm5leHRfaWR4W2ldID0gMDsKLQkJCWl0ZXItPm5leHRfcGFnZVtpXSA9IE5VTEw7CisJCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCisJCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQkJcmluZ19idWZmZXJfaXRlcl9yZXNldChpdGVyLT5idWZmZXJfaXRlcltjcHVdKTsKIAkJfQogCisJCWZ0cmFjZV9lbmFibGVfY3B1KCk7CisKIAkJZm9yIChwID0gaXRlcjsgcCAmJiBsIDwgKnBvczsgcCA9IHNfbmV4dChtLCBwLCAmbCkpCiAJCQk7CiAKQEAgLTEzMzAsMjEgKzExNTMsMjEgQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfbGF0X2hlbHBfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgICBfLS0tLS0tPT4gQ1BVIyAgICAgICAgICAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAvIF8tLS0tLT0+IGlycXMtb2ZmICAgICAgICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICB8IC8gXy0tLS09PiBuZWVkLXJlc2NoZWQgICAgXG4iKTsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgfHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgIHx8fCAvIF8tLT0+IHByZWVtcHQtZGVwdGggICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICB8fHx8IC8gICAgICAgICAgICAgICAgICAgICAgXG4iKTsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgfHx8fHwgICAgIGRlbGF5ICAgICAgICAgICAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgIGNtZCAgICAgcGlkIHx8fHx8IHRpbWUgIHwgICBjYWxsZXIgICAgICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICBcXCAgIC8gICAgfHx8fHwgICBcXCAgIHwgICAvICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgICAgXy0tLS0tLT0+IENQVSMgICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgICAvIF8tLS0tLT0+IGlycXMtb2ZmICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHwgLyBfLS0tLT0+IG5lZWQtcmVzY2hlZCAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8IC8gXy0tLT0+IGhhcmRpcnEvc29mdGlycSBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8fCAvIF8tLT0+IHByZWVtcHQtZGVwdGggICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8fHwgLyAgICAgICAgICAgICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8fHx8ICAgICBkZWxheSAgICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICBjbWQgICAgIHBpZCAgIHx8fHx8IHRpbWUgIHwgICBjYWxsZXIgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICBcXCAgIC8gICAgICB8fHx8fCAgIFxcICAgfCAgIC8gICAgICAgICAgIFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmNfaGVscF9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQogewotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgICAgVElNRVNUQU1QICBGVU5DVElPTlxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgIHwgfCAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHxcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICBUQVNLLVBJRCAgICBDUFUjICAgIFRJTUVTVEFNUCAgRlVOQ1RJT05cbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfFxuIik7CiB9CiAKIApAQCAtMTM1NSwyMyArMTE3OCwxNiBAQAogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBpdGVyLT50cjsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhID0gdHItPmRhdGFbdHItPmNwdV07CiAJc3RydWN0IHRyYWNlciAqdHlwZSA9IGN1cnJlbnRfdHJhY2U7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbCAgID0gMDsKLQl1bnNpZ25lZCBsb25nIGVudHJpZXMgPSAwOwotCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyB0b3RhbDsKKwl1bnNpZ25lZCBsb25nIGVudHJpZXM7CiAJY29uc3QgY2hhciAqbmFtZSA9ICJwcmVlbXB0aW9uIjsKIAogCWlmICh0eXBlKQogCQluYW1lID0gdHlwZS0+bmFtZTsKIAotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewotCQlpZiAoaGVhZF9wYWdlKHRyLT5kYXRhW2NwdV0pKSB7Ci0JCQl0b3RhbCArPSB0ci0+ZGF0YVtjcHVdLT50cmFjZV9pZHg7Ci0JCQlpZiAodHItPmRhdGFbY3B1XS0+dHJhY2VfaWR4ID4gdHItPmVudHJpZXMpCi0JCQkJZW50cmllcyArPSB0ci0+ZW50cmllczsKLQkJCWVsc2UKLQkJCQllbnRyaWVzICs9IHRyLT5kYXRhW2NwdV0tPnRyYWNlX2lkeDsKLQkJfQotCX0KKwllbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllcyhpdGVyLT50ci0+YnVmZmVyKTsKKwl0b3RhbCA9IGVudHJpZXMgKworCQlyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLT50ci0+YnVmZmVyKTsKIAogCXNlcV9wcmludGYobSwgIiVzIGxhdGVuY3kgdHJhY2UgdjEuMS41IG9uICVzXG4iLAogCQkgICBuYW1lLCBVVFNfUkVMRUFTRSk7CkBAIC0xNDI4LDcgKzEyNDQsNyBAQAogCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCk7CiAKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICIlOC44cy0lLTVkICIsIGNvbW0sIGVudHJ5LT5waWQpOwotCXRyYWNlX3NlcV9wcmludGYocywgIiVkIiwgY3B1KTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlM2QiLCBjcHUpOwogCXRyYWNlX3NlcV9wcmludGYocywgIiVjJWMiLAogCQkJKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSVJRU19PRkYpID8gJ2QnIDogJy4nLAogCQkJKChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX05FRURfUkVTQ0hFRCkgPyAnTicgOiAnLicpKTsKQEAgLTE0NTcsNyArMTI3Myw3IEBACiB1bnNpZ25lZCBsb25nIHByZWVtcHRfbWFya190aHJlc2ggPSAxMDA7CiAKIHN0YXRpYyB2b2lkCi1sYXRfcHJpbnRfdGltZXN0YW1wKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgbG9uZyBhYnNfdXNlY3MsCitsYXRfcHJpbnRfdGltZXN0YW1wKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHU2NCBhYnNfdXNlY3MsCiAJCSAgICB1bnNpZ25lZCBsb25nIHJlbF91c2VjcykKIHsKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTRsbGR1cyIsIGFic191c2Vjcyk7CkBAIC0xNDcxLDM0ICsxMjg3LDc2IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIHN0YXRlX3RvX2NoYXJbXSA9IFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFI7CiAKLXN0YXRpYyBpbnQKKy8qCisgKiBUaGUgbWVzc2FnZSBpcyBzdXBwb3NlZCB0byBjb250YWluIGFuIGVuZGluZyBuZXdsaW5lLgorICogSWYgdGhlIHByaW50aW5nIHN0b3BzIHByZW1hdHVyZWx5LCB0cnkgdG8gYWRkIGEgbmV3bGluZSBvZiBvdXIgb3duLgorICovCit2b2lkIHRyYWNlX3NlcV9wcmludF9jb250KHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKKwlzdHJ1Y3QgdHJhY2VfZmllbGRfY29udCAqY29udDsKKwlib29sIG9rID0gdHJ1ZTsKKworCWVudCA9IHBlZWtfbmV4dF9lbnRyeShpdGVyLCBpdGVyLT5jcHUsIE5VTEwpOworCWlmICghZW50IHx8IGVudC0+dHlwZSAhPSBUUkFDRV9DT05UKSB7CisJCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOworCQlyZXR1cm47CisJfQorCisJZG8geworCQljb250ID0gKHN0cnVjdCB0cmFjZV9maWVsZF9jb250ICopZW50OworCQlpZiAob2spCisJCQlvayA9ICh0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyIsIGNvbnQtPmJ1ZikgPiAwKTsKKworCQlmdHJhY2VfZGlzYWJsZV9jcHUoKTsKKworCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSkKKwkJCXJpbmdfYnVmZmVyX3JlYWQoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSwgTlVMTCk7CisJCWVsc2UKKwkJCXJpbmdfYnVmZmVyX2NvbnN1bWUoaXRlci0+dHItPmJ1ZmZlciwgaXRlci0+Y3B1LCBOVUxMKTsKKworCQlmdHJhY2VfZW5hYmxlX2NwdSgpOworCisJCWVudCA9IHBlZWtfbmV4dF9lbnRyeShpdGVyLCBpdGVyLT5jcHUsIE5VTEwpOworCX0gd2hpbGUgKGVudCAmJiBlbnQtPnR5cGUgPT0gVFJBQ0VfQ09OVCk7CisKKwlpZiAoIW9rKQorCQl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9sYXRfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdW5zaWduZWQgaW50IHRyYWNlX2lkeCwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAl1bnNpZ25lZCBsb25nIHN5bV9mbGFncyA9ICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX01BU0spOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqbmV4dF9lbnRyeSA9IGZpbmRfbmV4dF9lbnRyeShpdGVyLCBOVUxMKTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKm5leHRfZW50cnk7CiAJdW5zaWduZWQgbG9uZyB2ZXJib3NlID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9WRVJCT1NFKTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwogCXVuc2lnbmVkIGxvbmcgYWJzX3VzZWNzOwogCXVuc2lnbmVkIGxvbmcgcmVsX3VzZWNzOworCXU2NCBuZXh0X3RzOwogCWNoYXIgKmNvbW07CiAJaW50IFMsIFQ7CiAJaW50IGk7CiAJdW5zaWduZWQgc3RhdGU7CiAKKwlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworCW5leHRfZW50cnkgPSBmaW5kX25leHRfZW50cnkoaXRlciwgTlVMTCwgJm5leHRfdHMpOwogCWlmICghbmV4dF9lbnRyeSkKLQkJbmV4dF9lbnRyeSA9IGVudHJ5OwotCXJlbF91c2VjcyA9IG5zMnVzZWNzKG5leHRfZW50cnktPnQgLSBlbnRyeS0+dCk7Ci0JYWJzX3VzZWNzID0gbnMydXNlY3MoZW50cnktPnQgLSBpdGVyLT50ci0+dGltZV9zdGFydCk7CisJCW5leHRfdHMgPSBpdGVyLT50czsKKwlyZWxfdXNlY3MgPSBuczJ1c2VjcyhuZXh0X3RzIC0gaXRlci0+dHMpOworCWFic191c2VjcyA9IG5zMnVzZWNzKGl0ZXItPnRzIC0gaXRlci0+dHItPnRpbWVfc3RhcnQpOwogCiAJaWYgKHZlcmJvc2UpIHsKIAkJY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkKTsKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cyAlNWQgJWQgJWQgJTA4eCAlMDh4IFslMDhseF0iCisJCXRyYWNlX3NlcV9wcmludGYocywgIiUxNnMgJTVkICUzZCAlZCAlMDh4ICUwOHggWyUwOGx4XSIKIAkJCQkgIiAlbGQuJTAzbGRtcyAoKyVsZC4lMDNsZG1zKTogIiwKIAkJCQkgY29tbSwKIAkJCQkgZW50cnktPnBpZCwgY3B1LCBlbnRyeS0+ZmxhZ3MsCiAJCQkJIGVudHJ5LT5wcmVlbXB0X2NvdW50LCB0cmFjZV9pZHgsCi0JCQkJIG5zMnVzZWNzKGVudHJ5LT50KSwKKwkJCQkgbnMydXNlY3MoaXRlci0+dHMpLAogCQkJCSBhYnNfdXNlY3MvMTAwMCwKIAkJCQkgYWJzX3VzZWNzICUgMTAwMCwgcmVsX3VzZWNzLzEwMDAsCiAJCQkJIHJlbF91c2VjcyAlIDEwMDApOwpAQCAtMTUwNyw1MiArMTM2NSw4NSBAQAogCQlsYXRfcHJpbnRfdGltZXN0YW1wKHMsIGFic191c2VjcywgcmVsX3VzZWNzKTsKIAl9CiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46Ci0JCXNlcV9wcmludF9pcF9zeW0ocywgZW50cnktPmZuLmlwLCBzeW1fZmxhZ3MpOworCWNhc2UgVFJBQ0VfRk46IHsKKwkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKIAkJdHJhY2Vfc2VxX3B1dHMocywgIiAoIik7Ci0JCWlmIChrcmV0cHJvYmVkKGVudHJ5LT5mbi5wYXJlbnRfaXApKQorCQlpZiAoa3JldHByb2JlZChmaWVsZC0+cGFyZW50X2lwKSkKIAkJCXRyYWNlX3NlcV9wdXRzKHMsIEtSRVRQUk9CRV9NU0cpOwogCQllbHNlCi0JCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGVudHJ5LT5mbi5wYXJlbnRfaXAsIHN5bV9mbGFncyk7CisJCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5wYXJlbnRfaXAsIHN5bV9mbGFncyk7CiAJCXRyYWNlX3NlcV9wdXRzKHMsICIpXG4iKTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRToKLQkJVCA9IGVudHJ5LT5jdHgubmV4dF9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/Ci0JCQlzdGF0ZV90b19jaGFyW2VudHJ5LT5jdHgubmV4dF9zdGF0ZV0gOiAnWCc7CisJY2FzZSBUUkFDRV9XQUtFOiB7CisJCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKIAotCQlzdGF0ZSA9IGVudHJ5LT5jdHgucHJldl9zdGF0ZSA/IF9fZmZzKGVudHJ5LT5jdHgucHJldl9zdGF0ZSkgKyAxIDogMDsKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlUID0gZmllbGQtPm5leHRfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPworCQkJc3RhdGVfdG9fY2hhcltmaWVsZC0+bmV4dF9zdGF0ZV0gOiAnWCc7CisKKwkJc3RhdGUgPSBmaWVsZC0+cHJldl9zdGF0ZSA/CisJCQlfX2ZmcyhmaWVsZC0+cHJldl9zdGF0ZSkgKyAxIDogMDsKIAkJUyA9IHN0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpIC0gMSA/IHN0YXRlX3RvX2NoYXJbc3RhdGVdIDogJ1gnOwotCQljb21tID0gdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5jdHgubmV4dF9waWQpOwotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyAlNWQ6JTNkOiVjICVzXG4iLAotCQkJCSBlbnRyeS0+Y3R4LnByZXZfcGlkLAotCQkJCSBlbnRyeS0+Y3R4LnByZXZfcHJpbywKKwkJY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShmaWVsZC0+bmV4dF9waWQpOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyBbJTAzZF0gJTVkOiUzZDolYyAlc1xuIiwKKwkJCQkgZmllbGQtPnByZXZfcGlkLAorCQkJCSBmaWVsZC0+cHJldl9wcmlvLAogCQkJCSBTLCBlbnRyeS0+dHlwZSA9PSBUUkFDRV9DVFggPyAiPT0+IiA6ICIgICsiLAotCQkJCSBlbnRyeS0+Y3R4Lm5leHRfcGlkLAotCQkJCSBlbnRyeS0+Y3R4Lm5leHRfcHJpbywKKwkJCQkgZmllbGQtPm5leHRfY3B1LAorCQkJCSBmaWVsZC0+bmV4dF9waWQsCisJCQkJIGZpZWxkLT5uZXh0X3ByaW8sCiAJCQkJIFQsIGNvbW0pOwogCQlicmVhazsKLQljYXNlIFRSQUNFX1NQRUNJQUw6CisJfQorCWNhc2UgVFJBQ0VfU1BFQ0lBTDogeworCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwogCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVsZCAlbGQgJWxkXG4iLAotCQkJCSBlbnRyeS0+c3BlY2lhbC5hcmcxLAotCQkJCSBlbnRyeS0+c3BlY2lhbC5hcmcyLAotCQkJCSBlbnRyeS0+c3BlY2lhbC5hcmczKTsKKwkJCQkgZmllbGQtPmFyZzEsCisJCQkJIGZpZWxkLT5hcmcyLAorCQkJCSBmaWVsZC0+YXJnMyk7CiAJCWJyZWFrOwotCWNhc2UgVFJBQ0VfU1RBQ0s6CisJfQorCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKKwkJc3RydWN0IHN0YWNrX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCiAJCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsgaSsrKSB7CiAJCQlpZiAoaSkKIAkJCQl0cmFjZV9zZXFfcHV0cyhzLCAiIDw9ICIpOwotCQkJc2VxX3ByaW50X2lwX3N5bShzLCBlbnRyeS0+c3RhY2suY2FsbGVyW2ldLCBzeW1fZmxhZ3MpOworCQkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+Y2FsbGVyW2ldLCBzeW1fZmxhZ3MpOwogCQl9CiAJCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOwogCQlicmVhazsKKwl9CisJY2FzZSBUUkFDRV9QUklOVDogeworCQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7CisJCXRyYWNlX3NlcV9wcmludGYocywgIjogJXMiLCBmaWVsZC0+YnVmKTsKKwkJaWYgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKKwkJCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiVW5rbm93biB0eXBlICVkXG4iLCBlbnRyeS0+dHlwZSk7CiAJfQotCXJldHVybiAxOworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfdHJhY2VfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF90cmFjZV9mbXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fTUFTSyk7CkBAIC0xNTY3LDkwICsxNDU4LDEyNiBAQAogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKKwlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwogCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoaXRlci0+ZW50LT5waWQpOwogCi0JdCA9IG5zMnVzZWNzKGVudHJ5LT50KTsKKwl0ID0gbnMydXNlY3MoaXRlci0+dHMpOwogCXVzZWNfcmVtID0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOwogCXNlY3MgPSAodW5zaWduZWQgbG9uZyl0OwogCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cy0lLTVkICIsIGNvbW0sIGVudHJ5LT5waWQpOwogCWlmICghcmV0KQotCQlyZXR1cm4gMDsKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJTAyZF0gIiwgaXRlci0+Y3B1KTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlslMDNkXSAiLCBpdGVyLT5jcHUpOwogCWlmICghcmV0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU1bHUuJTA2bHU6ICIsIHNlY3MsIHVzZWNfcmVtKTsKIAlpZiAoIXJldCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOgotCQlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsIGVudHJ5LT5mbi5pcCwgc3ltX2ZsYWdzKTsKKwljYXNlIFRSQUNFX0ZOOiB7CisJCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7CiAJCWlmICghcmV0KQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCWlmICgoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVF9QQVJFTlQpICYmCi0JCQkJCQllbnRyeS0+Zm4ucGFyZW50X2lwKSB7CisJCQkJCQlmaWVsZC0+cGFyZW50X2lwKSB7CiAJCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPC0iKTsKIAkJCWlmICghcmV0KQotCQkJCXJldHVybiAwOwotCQkJaWYgKGtyZXRwcm9iZWQoZW50cnktPmZuLnBhcmVudF9pcCkpCisJCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQkJaWYgKGtyZXRwcm9iZWQoZmllbGQtPnBhcmVudF9pcCkpCiAJCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgS1JFVFBST0JFX01TRyk7CiAJCQllbHNlCi0JCQkJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBlbnRyeS0+Zm4ucGFyZW50X2lwLAorCQkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywKKwkJCQkJCSAgICAgICBmaWVsZC0+cGFyZW50X2lwLAogCQkJCQkJICAgICAgIHN5bV9mbGFncyk7CiAJCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCX0KIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKIAkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRToKLQkJUyA9IGVudHJ5LT5jdHgucHJldl9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/Ci0JCQlzdGF0ZV90b19jaGFyW2VudHJ5LT5jdHgucHJldl9zdGF0ZV0gOiAnWCc7Ci0JCVQgPSBlbnRyeS0+Y3R4Lm5leHRfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPwotCQkJc3RhdGVfdG9fY2hhcltlbnRyeS0+Y3R4Lm5leHRfc3RhdGVdIDogJ1gnOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyAlNWQ6JTNkOiVjXG4iLAotCQkJCSAgICAgICBlbnRyeS0+Y3R4LnByZXZfcGlkLAotCQkJCSAgICAgICBlbnRyeS0+Y3R4LnByZXZfcHJpbywKKwljYXNlIFRSQUNFX1dBS0U6IHsKKwkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJUyA9IGZpZWxkLT5wcmV2X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KKwkJCXN0YXRlX3RvX2NoYXJbZmllbGQtPnByZXZfc3RhdGVdIDogJ1gnOworCQlUID0gZmllbGQtPm5leHRfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPworCQkJc3RhdGVfdG9fY2hhcltmaWVsZC0+bmV4dF9zdGF0ZV0gOiAnWCc7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAlNWQ6JTNkOiVjICVzIFslMDNkXSAlNWQ6JTNkOiVjXG4iLAorCQkJCSAgICAgICBmaWVsZC0+cHJldl9waWQsCisJCQkJICAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCiAJCQkJICAgICAgIFMsCiAJCQkJICAgICAgIGVudHJ5LT50eXBlID09IFRSQUNFX0NUWCA/ICI9PT4iIDogIiAgKyIsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9waWQsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9wcmlvLAorCQkJCSAgICAgICBmaWVsZC0+bmV4dF9jcHUsCisJCQkJICAgICAgIGZpZWxkLT5uZXh0X3BpZCwKKwkJCQkgICAgICAgZmllbGQtPm5leHRfcHJpbywKIAkJCQkgICAgICAgVCk7CiAJCWlmICghcmV0KQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCWJyZWFrOwotCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKKwl9CisJY2FzZSBUUkFDRV9TUEVDSUFMOiB7CisJCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzEsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzMpOworCQkJCSBmaWVsZC0+YXJnMSwKKwkJCQkgZmllbGQtPmFyZzIsCisJCQkJIGZpZWxkLT5hcmczKTsKIAkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJYnJlYWs7Ci0JY2FzZSBUUkFDRV9TVEFDSzoKKwl9CisJY2FzZSBUUkFDRV9TVEFDSzogeworCQlzdHJ1Y3Qgc3RhY2tfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKIAkJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TVEFDS19FTlRSSUVTOyBpKyspIHsKIAkJCWlmIChpKSB7CiAJCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiA8PSAiKTsKIAkJCQlpZiAoIXJldCkKLQkJCQkJcmV0dXJuIDA7CisJCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJCX0KLQkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZW50cnktPnN0YWNrLmNhbGxlcltpXSwKKwkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmNhbGxlcltpXSwKIAkJCQkJICAgICAgIHN5bV9mbGFncyk7CiAJCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCX0KIAkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7CiAJCWlmICghcmV0KQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMTsKKwljYXNlIFRSQUNFX1BSSU5UOiB7CisJCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiOiAlcyIsIGZpZWxkLT5idWYpOworCQlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQorCQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7CisJCWJyZWFrOworCX0KKwl9CisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBwcmludF9yYXdfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9yYXdfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwpAQCAtMTY1OSw0NyArMTU4Niw3NyBAQAogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKKwlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVkICVkICVsbHUgIiwKLQkJZW50cnktPnBpZCwgaXRlci0+Y3B1LCBlbnRyeS0+dCk7CisJCWVudHJ5LT5waWQsIGl0ZXItPmNwdSwgaXRlci0+dHMpOwogCWlmICghcmV0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46CisJY2FzZSBUUkFDRV9GTjogeworCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiV4ICV4XG4iLAotCQkJCQllbnRyeS0+Zm4uaXAsIGVudHJ5LT5mbi5wYXJlbnRfaXApOworCQkJCQlmaWVsZC0+aXAsCisJCQkJCWZpZWxkLT5wYXJlbnRfaXApOwogCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCQlicmVhazsKLQljYXNlIFRSQUNFX0NUWDoKLQljYXNlIFRSQUNFX1dBS0U6Ci0JCVMgPSBlbnRyeS0+Y3R4LnByZXZfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPwotCQkJc3RhdGVfdG9fY2hhcltlbnRyeS0+Y3R4LnByZXZfc3RhdGVdIDogJ1gnOwotCQlUID0gZW50cnktPmN0eC5uZXh0X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KLQkJCXN0YXRlX3RvX2NoYXJbZW50cnktPmN0eC5uZXh0X3N0YXRlXSA6ICdYJzsKLQkJaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX1dBS0UpCi0JCQlTID0gJysnOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCAlZCAlYyAlZCAlZCAlY1xuIiwKLQkJCQkgICAgICAgZW50cnktPmN0eC5wcmV2X3BpZCwKLQkJCQkgICAgICAgZW50cnktPmN0eC5wcmV2X3ByaW8sCi0JCQkJICAgICAgIFMsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9waWQsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9wcmlvLAotCQkJCSAgICAgICBUKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFDRV9TUEVDSUFMOgotCWNhc2UgVFJBQ0VfU1RBQ0s6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzEsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzMpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDE7CisJY2FzZSBUUkFDRV9DVFg6CisJY2FzZSBUUkFDRV9XQUtFOiB7CisJCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJCVMgPSBmaWVsZC0+cHJldl9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/CisJCQlzdGF0ZV90b19jaGFyW2ZpZWxkLT5wcmV2X3N0YXRlXSA6ICdYJzsKKwkJVCA9IGZpZWxkLT5uZXh0X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KKwkJCXN0YXRlX3RvX2NoYXJbZmllbGQtPm5leHRfc3RhdGVdIDogJ1gnOworCQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfV0FLRSkKKwkJCVMgPSAnKyc7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVkICVkICVjICVkICVkICVkICVjXG4iLAorCQkJCSAgICAgICBmaWVsZC0+cHJldl9waWQsCisJCQkJICAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCisJCQkJICAgICAgIFMsCisJCQkJICAgICAgIGZpZWxkLT5uZXh0X2NwdSwKKwkJCQkgICAgICAgZmllbGQtPm5leHRfcGlkLAorCQkJCSAgICAgICBmaWVsZC0+bmV4dF9wcmlvLAorCQkJCSAgICAgICBUKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCWJyZWFrOworCX0KKwljYXNlIFRSQUNFX1NQRUNJQUw6CisJY2FzZSBUUkFDRV9TVEFDSzogeworCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVsZCAlbGQgJWxkXG4iLAorCQkJCSBmaWVsZC0+YXJnMSwKKwkJCQkgZmllbGQtPmFyZzIsCisJCQkJIGZpZWxkLT5hcmczKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCWJyZWFrOworCX0KKwljYXNlIFRSQUNFX1BSSU5UOiB7CisJCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVseCAlcyIsIGZpZWxkLT5pcCwgZmllbGQtPmJ1Zik7CisJCWlmIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCisJCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKKwkJYnJlYWs7CisJfQorCX0KKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCiAjZGVmaW5lIFNFUV9QVVRfRklFTERfUkVUKHMsIHgpCQkJCVwKQEAgLTE3MTAsMTEgKzE2NjcsMTIgQEAKIAogI2RlZmluZSBTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgeCkJCQlcCiBkbyB7CQkJCQkJCVwKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHgpID4gTUFYX01FTUhFWF9CWVRFUyk7CVwKIAlpZiAoIXRyYWNlX3NlcV9wdXRtZW1faGV4KHMsICYoeCksIHNpemVvZih4KSkpCVwKIAkJcmV0dXJuIDA7CQkJCVwKIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbnQgcHJpbnRfaGV4X2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfaGV4X2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJdW5zaWduZWQgY2hhciBuZXdsaW5lID0gJ1xuJzsKQEAgLTE3MjMsOTcgKzE2ODEsMTM5IEBACiAKIAllbnRyeSA9IGl0ZXItPmVudDsKIAorCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9DT05UKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCiAJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOwogCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBpdGVyLT5jcHUpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+dCk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGl0ZXItPnRzKTsKIAogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOgotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPmZuLmlwKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5mbi5wYXJlbnRfaXApOworCWNhc2UgVFJBQ0VfRk46IHsKKwkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmlwKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOwogCQlicmVhazsKKwl9CiAJY2FzZSBUUkFDRV9DVFg6Ci0JY2FzZSBUUkFDRV9XQUtFOgotCQlTID0gZW50cnktPmN0eC5wcmV2X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KLQkJCXN0YXRlX3RvX2NoYXJbZW50cnktPmN0eC5wcmV2X3N0YXRlXSA6ICdYJzsKLQkJVCA9IGVudHJ5LT5jdHgubmV4dF9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/Ci0JCQlzdGF0ZV90b19jaGFyW2VudHJ5LT5jdHgubmV4dF9zdGF0ZV0gOiAnWCc7CisJY2FzZSBUUkFDRV9XQUtFOiB7CisJCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJCVMgPSBmaWVsZC0+cHJldl9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/CisJCQlzdGF0ZV90b19jaGFyW2ZpZWxkLT5wcmV2X3N0YXRlXSA6ICdYJzsKKwkJVCA9IGZpZWxkLT5uZXh0X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KKwkJCXN0YXRlX3RvX2NoYXJbZmllbGQtPm5leHRfc3RhdGVdIDogJ1gnOwogCQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfV0FLRSkKIAkJCVMgPSAnKyc7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+Y3R4LnByZXZfcGlkKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5jdHgucHJldl9wcmlvKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9wcmlvKTsKIAkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIFMpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5uZXh0X3BpZCk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+Y3R4Lm5leHRfcHJpbyk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+Zm4ucGFyZW50X2lwKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X2NwdSk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9waWQpOworCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7CiAJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBUKTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKLQljYXNlIFRSQUNFX1NUQUNLOgotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPnNwZWNpYWwuYXJnMSk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+c3BlY2lhbC5hcmcyKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5zcGVjaWFsLmFyZzMpOworCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKKwkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcxKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKIAkJYnJlYWs7CiAJfQorCX0KIAlTRVFfUFVUX0ZJRUxEX1JFVChzLCBuZXdsaW5lKTsKIAotCXJldHVybiAxOworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfYmluX2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfYmluX2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKIAogCWVudHJ5ID0gaXRlci0+ZW50OwogCisJaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0NPTlQpCisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKIAlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+cGlkKTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+Y3B1KTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+dCk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgaXRlci0+Y3B1KTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBpdGVyLT50cyk7CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBUUkFDRV9GTjoKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmZuLmlwKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmZuLnBhcmVudF9pcCk7CisJY2FzZSBUUkFDRV9GTjogeworCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5pcCk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOwogCQlicmVhazsKLQljYXNlIFRSQUNFX0NUWDoKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5wcmV2X3BpZCk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5jdHgucHJldl9wcmlvKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5wcmV2X3N0YXRlKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5uZXh0X3BpZCk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5jdHgubmV4dF9wcmlvKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5uZXh0X3N0YXRlKTsKKwl9CisJY2FzZSBUUkFDRV9DVFg6IHsKKwkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3N0YXRlKTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcGlkKTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3N0YXRlKTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKLQljYXNlIFRSQUNFX1NUQUNLOgotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+c3BlY2lhbC5hcmcxKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPnNwZWNpYWwuYXJnMik7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5zcGVjaWFsLmFyZzMpOworCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKKwkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOworCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKIAkJYnJlYWs7CiAJfQorCX0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCB0cmFjZV9lbXB0eShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7Ci0JCWRhdGEgPSBpdGVyLT50ci0+ZGF0YVtjcHVdOwotCi0JCWlmIChoZWFkX3BhZ2UoZGF0YSkgJiYgZGF0YS0+dHJhY2VfaWR4ICYmCi0JCSAgICAoZGF0YS0+dHJhY2VfdGFpbCAhPSBkYXRhLT50cmFjZV9oZWFkIHx8Ci0JCSAgICAgZGF0YS0+dHJhY2VfdGFpbF9pZHggIT0gZGF0YS0+dHJhY2VfaGVhZF9pZHgpKQotCQkJcmV0dXJuIDA7CisJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKSB7CisJCQlpZiAoIXJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAoIXJpbmdfYnVmZmVyX2VtcHR5X2NwdShpdGVyLT50ci0+YnVmZmVyLCBjcHUpKQorCQkJCXJldHVybiAwOworCQl9CiAJfQorCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfdHJhY2VfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfdHJhY2VfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0JaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5wcmludF9saW5lKQotCQlyZXR1cm4gaXRlci0+dHJhY2UtPnByaW50X2xpbmUoaXRlcik7CisJZW51bSBwcmludF9saW5lX3QgcmV0OworCisJaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5wcmludF9saW5lKSB7CisJCXJldCA9IGl0ZXItPnRyYWNlLT5wcmludF9saW5lKGl0ZXIpOworCQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfVU5IQU5ETEVEKQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0JJTikKIAkJcmV0dXJuIHByaW50X2Jpbl9mbXQoaXRlcik7CkBAIC0xODY5LDYgKzE4NjksOCBAQAogX190cmFjaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqcmV0KQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm07CisJaW50IGNwdTsKIAogCWlmICh0cmFjaW5nX2Rpc2FibGVkKSB7CiAJCSpyZXQgPSAtRU5PREVWOwpAQCAtMTg4OSwyOCArMTg5MSw0NSBAQAogCWl0ZXItPnRyYWNlID0gY3VycmVudF90cmFjZTsKIAlpdGVyLT5wb3MgPSAtMTsKIAorCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCisJCWl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0gPQorCQkJcmluZ19idWZmZXJfcmVhZF9zdGFydChpdGVyLT50ci0+YnVmZmVyLCBjcHUpOworCisJCWlmICghaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkKKwkJCWdvdG8gZmFpbF9idWZmZXI7CisJfQorCiAJLyogVE9ETyBzdG9wIHRyYWNlciAqLwogCSpyZXQgPSBzZXFfb3BlbihmaWxlLCAmdHJhY2VyX3NlcV9vcHMpOwotCWlmICghKnJldCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCW0tPnByaXZhdGUgPSBpdGVyOworCWlmICgqcmV0KQorCQlnb3RvIGZhaWxfYnVmZmVyOwogCi0JCS8qIHN0b3AgdGhlIHRyYWNlIHdoaWxlIGR1bXBpbmcgKi8KLQkJaWYgKGl0ZXItPnRyLT5jdHJsKSB7Ci0JCQl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0JCQlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDA7Ci0JCX0KKwltID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCW0tPnByaXZhdGUgPSBpdGVyOwogCi0JCWlmIChpdGVyLT50cmFjZSAmJiBpdGVyLT50cmFjZS0+b3BlbikKLQkJCWl0ZXItPnRyYWNlLT5vcGVuKGl0ZXIpOwotCX0gZWxzZSB7Ci0JCWtmcmVlKGl0ZXIpOwotCQlpdGVyID0gTlVMTDsKKwkvKiBzdG9wIHRoZSB0cmFjZSB3aGlsZSBkdW1waW5nICovCisJaWYgKGl0ZXItPnRyLT5jdHJsKSB7CisJCXRyYWNlcl9lbmFibGVkID0gMDsKKwkJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAwOwogCX0KKworCWlmIChpdGVyLT50cmFjZSAmJiBpdGVyLT50cmFjZS0+b3BlbikKKwkJCWl0ZXItPnRyYWNlLT5vcGVuKGl0ZXIpOworCiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAogIG91dDoKIAlyZXR1cm4gaXRlcjsKKworIGZhaWxfYnVmZmVyOgorCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkKKwkJCXJpbmdfYnVmZmVyX3JlYWRfZmluaXNoKGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pOworCX0KKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIGludCB0cmFjaW5nX29wZW5fZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTE5MjYsOCArMTk0NSwxNCBAQAogewogCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwlpbnQgY3B1OwogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CisJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKQorCQkJcmluZ19idWZmZXJfcmVhZF9maW5pc2goaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSk7CisJfQorCiAJaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5jbG9zZSkKIAkJaXRlci0+dHJhY2UtPmNsb3NlKGl0ZXIpOwogCkBAIC0yMzUyLDkgKzIzNzcsMTEgQEAKIAlzdHJ1Y3QgdHJhY2VyICp0OwogCWNoYXIgYnVmW21heF90cmFjZXJfdHlwZV9sZW4rMV07CiAJaW50IGk7CisJc2l6ZV90IHJldDsKIAogCWlmIChjbnQgPiBtYXhfdHJhY2VyX3R5cGVfbGVuKQogCQljbnQgPSBtYXhfdHJhY2VyX3R5cGVfbGVuOworCXJldCA9IGNudDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIzNzAsNyArMjM5NywxMSBAQAogCQlpZiAoc3RyY21wKHQtPm5hbWUsIGJ1ZikgPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoIXQgfHwgdCA9PSBjdXJyZW50X3RyYWNlKQorCWlmICghdCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHQgPT0gY3VycmVudF90cmFjZSkKIAkJZ290byBvdXQ7CiAKIAlpZiAoY3VycmVudF90cmFjZSAmJiBjdXJyZW50X3RyYWNlLT5yZXNldCkKQEAgLTIzODMsOSArMjQxNCwxMCBAQAogIG91dDoKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCWlmIChyZXQgPT0gY250KQorCQlmaWxwLT5mX3BvcyArPSBjbnQ7CiAKLQlyZXR1cm4gY250OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNTAwLDIwICsyNTMyLDEyIEBACiAJCSAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXN0YXRpYyBjcHVtYXNrX3QgbWFzazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmZGVmIENPTkZJR19GVFJBQ0UKLQlpbnQgZnRyYWNlX3NhdmU7Ci0jZW5kaWYKLQlpbnQgY3B1OwogCXNzaXplX3Qgc3JldDsKIAogCS8qIHJldHVybiBhbnkgbGVmdG92ZXIgZGF0YSAqLwogCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOwogCWlmIChzcmV0ICE9IC1FQlVTWSkKIAkJcmV0dXJuIHNyZXQ7Ci0Jc3JldCA9IDA7CiAKIAl0cmFjZV9zZXFfcmVzZXQoJml0ZXItPnNlcSk7CiAKQEAgLTI1MjQsNiArMjU0OCw4IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKK3dhaXRhZ2FpbjoKKwlzcmV0ID0gMDsKIAl3aGlsZSAodHJhY2VfZW1wdHkoaXRlcikpIHsKIAogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewpAQCAtMjU4OCw0NiArMjYxNCwxMiBAQAogCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IsIHNlcSkpOwogCWl0ZXItPnBvcyA9IC0xOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIHN0b3AgYWxsIHRyYWNpbmcgb24gYWxsIENQVVMgdG8gcmVhZCB0aGUKLQkgKiB0aGUgbmV4dCBidWZmZXIuIFRoaXMgaXMgYSBiaXQgZXhwZW5zaXZlLCBidXQgaXMKLQkgKiBub3QgZG9uZSBvZnRlbi4gV2UgZmlsbCBhbGwgd2hhdCB3ZSBjYW4gcmVhZCwKLQkgKiBhbmQgdGhlbiByZWxlYXNlIHRoZSBsb2NrcyBhZ2Fpbi4KLQkgKi8KLQotCWNwdXNfY2xlYXIobWFzayk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotI2lmZGVmIENPTkZJR19GVFJBQ0UKLQlmdHJhY2Vfc2F2ZSA9IGZ0cmFjZV9lbmFibGVkOwotCWZ0cmFjZV9lbmFibGVkID0gMDsKLSNlbmRpZgotCXNtcF93bWIoKTsKLQlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKLQkJZGF0YSA9IGl0ZXItPnRyLT5kYXRhW2NwdV07Ci0KLQkJaWYgKCFoZWFkX3BhZ2UoZGF0YSkgfHwgIWRhdGEtPnRyYWNlX2lkeCkKLQkJCWNvbnRpbnVlOwotCi0JCWF0b21pY19pbmMoJmRhdGEtPmRpc2FibGVkKTsKLQkJY3B1X3NldChjcHUsIG1hc2spOwotCX0KLQotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgewotCQlkYXRhID0gaXRlci0+dHItPmRhdGFbY3B1XTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQotCQlpZiAoZGF0YS0+b3ZlcnJ1biA+IGl0ZXItPmxhc3Rfb3ZlcnJ1bltjcHVdKQotCQkJaXRlci0+b3ZlcnJ1bltjcHVdICs9Ci0JCQkJZGF0YS0+b3ZlcnJ1biAtIGl0ZXItPmxhc3Rfb3ZlcnJ1bltjcHVdOwotCQlpdGVyLT5sYXN0X292ZXJydW5bY3B1XSA9IGRhdGEtPm92ZXJydW47Ci0JfQotCiAJd2hpbGUgKGZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikgIT0gTlVMTCkgewotCQlpbnQgcmV0OworCQllbnVtIHByaW50X2xpbmVfdCByZXQ7CiAJCWludCBsZW4gPSBpdGVyLT5zZXEubGVuOwogCiAJCXJldCA9IHByaW50X3RyYWNlX2xpbmUoaXRlcik7Ci0JCWlmICghcmV0KSB7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpIHsKIAkJCS8qIGRvbid0IHByaW50IHBhcnRpYWwgbGluZXMgKi8KIAkJCWl0ZXItPnNlcS5sZW4gPSBsZW47CiAJCQlicmVhazsKQEAgLTI2MzksMjYgKzI2MzEsMTcgQEAKIAkJCWJyZWFrOwogCX0KIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgewotCQlkYXRhID0gaXRlci0+dHItPmRhdGFbY3B1XTsKLQkJX19yYXdfc3Bpbl91bmxvY2soJmRhdGEtPmxvY2spOwotCX0KLQotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgewotCQlkYXRhID0gaXRlci0+dHItPmRhdGFbY3B1XTsKLQkJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwotCX0KLSNpZmRlZiBDT05GSUdfRlRSQUNFCi0JZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2Vfc2F2ZTsKLSNlbmRpZgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQogCS8qIE5vdyBjb3B5IHdoYXQgd2UgaGF2ZSB0byB0aGUgdXNlciAqLwogCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOwogCWlmIChpdGVyLT5zZXEucmVhZHBvcyA+PSBpdGVyLT5zZXEubGVuKQogCQl0cmFjZV9zZXFfcmVzZXQoJml0ZXItPnNlcSk7CisKKwkvKgorCSAqIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHNlbmQgdG8gdXNlciwgaW5zcGl0ZSBvZiBjb25zdW1pbmcgdHJhY2UKKwkgKiBlbnRyaWVzLCBnbyBiYWNrIHRvIHdhaXQgZm9yIG1vcmUgZW50cmllcy4KKwkgKi8KIAlpZiAoc3JldCA9PSAtRUJVU1kpCi0JCXNyZXQgPSAwOworCQlnb3RvIHdhaXRhZ2FpbjsKIAogb3V0OgogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CkBAIC0yNjg0LDcgKzI2NjcsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWNoYXIgYnVmWzY0XTsKLQlpbnQgaSwgcmV0OworCWludCByZXQ7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjcwNCw1OSArMjY4OCwzOCBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLQlpZiAoY3VycmVudF90cmFjZSAhPSAmbm9fdHJhY2VyKSB7CisJaWYgKHRyLT5jdHJsKSB7CiAJCWNudCA9IC1FQlVTWTsKLQkJcHJfaW5mbygiZnRyYWNlOiBzZXQgY3VycmVudF90cmFjZXIgdG8gbm9uZSIKKwkJcHJfaW5mbygiZnRyYWNlOiBwbGVhc2UgZGlzYWJsZSB0cmFjaW5nIgogCQkJIiBiZWZvcmUgbW9kaWZ5aW5nIGJ1ZmZlciBzaXplXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHZhbCA+IGdsb2JhbF90cmFjZS5lbnRyaWVzKSB7Ci0JCWxvbmcgcGFnZXNfcmVxdWVzdGVkOwotCQl1bnNpZ25lZCBsb25nIGZyZWVhYmxlX3BhZ2VzOwotCi0JCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgYmVmb3JlIG1hcHBpbmcgKi8KLQkJcGFnZXNfcmVxdWVzdGVkID0KLQkJCSh2YWwgKyAoRU5UUklFU19QRVJfUEFHRS0xKSkgLyBFTlRSSUVTX1BFUl9QQUdFOwotCi0JCS8qIGFjY291bnQgZm9yIGVhY2ggYnVmZmVyIChhbmQgbWF4X3RyKSAqLwotCQlwYWdlc19yZXF1ZXN0ZWQgKj0gdHJhY2luZ19ucl9idWZmZXJzICogMjsKLQotCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KLQkJaWYgKHBhZ2VzX3JlcXVlc3RlZCA8IDApIHsKLQkJCWNudCA9IC1FTk9NRU07CisJaWYgKHZhbCAhPSBnbG9iYWxfdHJhY2UuZW50cmllcykgeworCQlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgdmFsKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWNudCA9IHJldDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJZnJlZWFibGVfcGFnZXMgPSBkZXRlcm1pbmVfZGlydHlhYmxlX21lbW9yeSgpOwotCi0JCS8qIHdlIG9ubHkgYWxsb3cgdG8gcmVxdWVzdCAxLzQgb2YgdXNlYWJsZSBtZW1vcnkgKi8KLQkJaWYgKHBhZ2VzX3JlcXVlc3RlZCA+Ci0JCSAgICAoKGZyZWVhYmxlX3BhZ2VzICsgdHJhY2luZ19wYWdlc19hbGxvY2F0ZWQpIC8gNCkpIHsKLQkJCWNudCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXdoaWxlIChnbG9iYWxfdHJhY2UuZW50cmllcyA8IHZhbCkgewotCQkJaWYgKHRyYWNlX2FsbG9jX3BhZ2UoKSkgewotCQkJCWNudCA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXQ7CisJCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShtYXhfdHIuYnVmZmVyLCB2YWwpOworCQlpZiAocmV0IDwgMCkgeworCQkJaW50IHI7CisJCQljbnQgPSByZXQ7CisJCQlyID0gcmluZ19idWZmZXJfcmVzaXplKGdsb2JhbF90cmFjZS5idWZmZXIsCisJCQkJCSAgICAgICBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisJCQlpZiAociA8IDApIHsKKwkJCQkvKiBBQVJHSCEgV2UgYXJlIGxlZnQgd2l0aCBkaWZmZXJlbnQKKwkJCQkgKiBzaXplIG1heCBidWZmZXIhISEhICovCisJCQkJV0FSTl9PTigxKTsKKwkJCQl0cmFjaW5nX2Rpc2FibGVkID0gMTsKIAkJCX0KLQkJCS8qIGRvdWJsZSBjaGVjayB0aGF0IHdlIGRvbid0IGdvIG92ZXIgdGhlIGtub3duIHBhZ2VzICovCi0JCQlpZiAodHJhY2luZ19wYWdlc19hbGxvY2F0ZWQgPiBwYWdlc19yZXF1ZXN0ZWQpCi0JCQkJYnJlYWs7CisJCQlnb3RvIG91dDsKIAkJfQogCi0JfSBlbHNlIHsKLQkJLyogaW5jbHVkZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdmFsIChpbmMgb2YgcGFnZSBlbnRyaWVzKSAqLwotCQl3aGlsZSAoZ2xvYmFsX3RyYWNlLmVudHJpZXMgPiB2YWwgKyAoRU5UUklFU19QRVJfUEFHRSAtIDEpKQotCQkJdHJhY2VfZnJlZV9wYWdlKCk7CisJCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gdmFsOwogCX0KIAotCS8qIGNoZWNrIGludGVncml0eSAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpCi0JCWNoZWNrX3BhZ2VzKGdsb2JhbF90cmFjZS5kYXRhW2ldKTsKLQogCWZpbHAtPmZfcG9zICs9IGNudDsKIAogCS8qIElmIGNoZWNrIHBhZ2VzIGZhaWxlZCwgcmV0dXJuIEVOT01FTSAqLwpAQCAtMjc2OSw2ICsyNzMyLDUyIEBACiAJcmV0dXJuIGNudDsKIH0KIAorc3RhdGljIGludCBtYXJrX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXJldCA9IHRyYWNlX3ZwcmludGsoMCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK3RyYWNpbmdfbWFya193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJCXNpemVfdCBjbnQsIGxvZmZfdCAqZnBvcykKK3sKKwljaGFyICpidWY7CisJY2hhciAqZW5kOworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOworCisJaWYgKCF0ci0+Y3RybCB8fCB0cmFjaW5nX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbnQgPiBUUkFDRV9CVUZfU0laRSkKKwkJY250ID0gVFJBQ0VfQlVGX1NJWkU7CisKKwlidWYgPSBrbWFsbG9jKGNudCArIDEsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjbnQpKSB7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIEN1dCBmcm9tIHRoZSBmaXJzdCBuaWwgb3IgbmV3bGluZS4gKi8KKwlidWZbY250XSA9ICdcMCc7CisJZW5kID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJaWYgKGVuZCkKKwkJKmVuZCA9ICdcMCc7CisKKwljbnQgPSBtYXJrX3ByaW50aygiJXNcbiIsIGJ1Zik7CisJa2ZyZWUoYnVmKTsKKwkqZnBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21heF9sYXRfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX21heF9sYXRfcmVhZCwKQEAgLTI4MDAsNiArMjgwOSwxMSBAQAogCS53cml0ZQkJPSB0cmFjaW5nX2VudHJpZXNfd3JpdGUsCiB9OwogCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21hcmtfZm9wcyA9IHsKKwkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkud3JpdGUJCT0gdHJhY2luZ19tYXJrX3dyaXRlLAorfTsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCiBzdGF0aWMgc3NpemVfdApAQCAtMjg0Niw3ICsyODYwLDcgQEAKICNpbmNsdWRlICJ0cmFjZV9zZWxmdGVzdC5jIgogI2VuZGlmCiAKLXN0YXRpYyBfX2luaXQgdm9pZCB0cmFjZXJfaW5pdF9kZWJ1Z2ZzKHZvaWQpCitzdGF0aWMgX19pbml0IGludCB0cmFjZXJfaW5pdF9kZWJ1Z2ZzKHZvaWQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAJc3RydWN0IGRlbnRyeSAqZW50cnk7CkBAIC0yODgxLDEyICsyODk1LDEyIEBACiAJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhdmFpbGFibGVfdHJhY2VycyIsIDA0NDQsIGRfdHJhY2VyLAogCQkJCSAgICAmZ2xvYmFsX3RyYWNlLCAmc2hvd190cmFjZXNfZm9wcyk7CiAJaWYgKCFlbnRyeSkKLQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjZScgZW50cnlcbiIpOworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ2F2YWlsYWJsZV90cmFjZXJzJyBlbnRyeVxuIik7CiAKIAllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImN1cnJlbnRfdHJhY2VyIiwgMDQ0NCwgZF90cmFjZXIsCiAJCQkJICAgICZnbG9iYWxfdHJhY2UsICZzZXRfdHJhY2VyX2ZvcHMpOwogCWlmICghZW50cnkpCi0JCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2UnIGVudHJ5XG4iKTsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICdjdXJyZW50X3RyYWNlcicgZW50cnlcbiIpOwogCiAJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjaW5nX21heF9sYXRlbmN5IiwgMDY0NCwgZF90cmFjZXIsCiAJCQkJICAgICZ0cmFjaW5nX21heF9sYXRlbmN5LApAQCAtMjg5OSw3ICsyOTEzLDcgQEAKIAkJCQkgICAgJnRyYWNpbmdfdGhyZXNoLCAmdHJhY2luZ19tYXhfbGF0X2ZvcHMpOwogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCi0JCQkgICAiJ3RyYWNpbmdfdGhyZWFzaCcgZW50cnlcbiIpOworCQkJICAgIid0cmFjaW5nX3RocmVzaCcgZW50cnlcbiIpOwogCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiUkVBRE1FIiwgMDY0NCwgZF90cmFjZXIsCiAJCQkJICAgIE5VTEwsICZ0cmFjaW5nX3JlYWRtZV9mb3BzKTsKIAlpZiAoIWVudHJ5KQpAQCAtMjkwOSwxMyArMjkyMywxOSBAQAogCQkJCSAgICBOVUxMLCAmdHJhY2luZ19waXBlX2ZvcHMpOwogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCi0JCQkgICAiJ3RyYWNpbmdfdGhyZWFzaCcgZW50cnlcbiIpOworCQkJICAgIid0cmFjZV9waXBlJyBlbnRyeVxuIik7CiAKIAllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlX2VudHJpZXMiLCAwNjQ0LCBkX3RyYWNlciwKIAkJCQkgICAgJmdsb2JhbF90cmFjZSwgJnRyYWNpbmdfZW50cmllc19mb3BzKTsKIAlpZiAoIWVudHJ5KQogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgotCQkJICAgIid0cmFjaW5nX3RocmVhc2gnIGVudHJ5XG4iKTsKKwkJCSAgICIndHJhY2VfZW50cmllcycgZW50cnlcbiIpOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZV9tYXJrZXIiLCAwMjIwLCBkX3RyYWNlciwKKwkJCQkgICAgTlVMTCwgJnRyYWNpbmdfbWFya19mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIid0cmFjZV9tYXJrZXInIGVudHJ5XG4iKTsKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZHluX2Z0cmFjZV90b3RhbF9pbmZvIiwgMDQ0NCwgZF90cmFjZXIsCkBAIC0yOTI4LDIzMCArMjk0OCwyNjMgQEAKICNpZmRlZiBDT05GSUdfU1lTUFJPRl9UUkFDRVIKIAlpbml0X3RyYWNlcl9zeXNwcm9mX2RlYnVnZnMoZF90cmFjZXIpOwogI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgdHJhY2VfYWxsb2NfcGFnZSh2b2lkKQotewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UsICp0bXA7Ci0JTElTVF9IRUFEKHBhZ2VzKTsKLQl2b2lkICphcnJheTsKLQl1bnNpZ25lZCBwYWdlc19hbGxvY2F0ZWQgPSAwOwotCWludCBpOwotCi0JLyogZmlyc3QgYWxsb2NhdGUgYSBwYWdlIGZvciBlYWNoIENQVSAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJYXJyYXkgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKGFycmF5ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZSIKLQkJCSAgICAgICAiZm9yIHRyYWNlIGJ1ZmZlciFcbiIpOwotCQkJZ290byBmcmVlX3BhZ2VzOwotCQl9Ci0KLQkJcGFnZXNfYWxsb2NhdGVkKys7Ci0JCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYXJyYXkpOwotCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmcGFnZXMpOwotCi0vKiBPbmx5IGFsbG9jYXRlIGlmIHdlIGFyZSBhY3R1YWxseSB1c2luZyB0aGUgbWF4IHRyYWNlICovCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJYXJyYXkgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKGFycmF5ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZSIKLQkJCSAgICAgICAiZm9yIHRyYWNlIGJ1ZmZlciFcbiIpOwotCQkJZ290byBmcmVlX3BhZ2VzOwotCQl9Ci0JCXBhZ2VzX2FsbG9jYXRlZCsrOwotCQlwYWdlID0gdmlydF90b19wYWdlKGFycmF5KTsKLQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnBhZ2VzKTsKLSNlbmRpZgotCX0KLQotCS8qIE5vdyB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSBhIHBhZ2UgcGVyIENQVSwgYWRkIHRoZW0gKi8KLQlmb3JfZWFjaF90cmFjaW5nX2NwdShpKSB7Ci0JCWRhdGEgPSBnbG9iYWxfdHJhY2UuZGF0YVtpXTsKLQkJcGFnZSA9IGxpc3RfZW50cnkocGFnZXMubmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxydSk7Ci0JCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJmRhdGEtPnRyYWNlX3BhZ2VzKTsKLQkJQ2xlYXJQYWdlTFJVKHBhZ2UpOwotCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJZGF0YSA9IG1heF90ci5kYXRhW2ldOwotCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlcy5uZXh0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKLQkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bHJ1KTsKLQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmZGF0YS0+dHJhY2VfcGFnZXMpOwotCQlTZXRQYWdlTFJVKHBhZ2UpOwotI2VuZGlmCi0JfQotCXRyYWNpbmdfcGFnZXNfYWxsb2NhdGVkICs9IHBhZ2VzX2FsbG9jYXRlZDsKLQlnbG9iYWxfdHJhY2UuZW50cmllcyArPSBFTlRSSUVTX1BFUl9QQUdFOwotCiAJcmV0dXJuIDA7Ci0KLSBmcmVlX3BhZ2VzOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsICZwYWdlcywgbHJ1KSB7Ci0JCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxydSk7Ci0JCV9fZnJlZV9wYWdlKHBhZ2UpOwotCX0KLQlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludCB0cmFjZV9mcmVlX3BhZ2Uodm9pZCkKK2ludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogeworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2VfYnVmX2xvY2spOworCXN0YXRpYyBjaGFyIHRyYWNlX2J1ZltUUkFDRV9CVUZfU0laRV07CisKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKLQlpbnQgaTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcHJpbnRfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGlycV9mbGFnczsKKwlpbnQgY3B1LCBsZW4gPSAwLCBzaXplLCBwYzsKIAotCS8qIGZyZWUgb25lIHBhZ2UgZnJvbSBlYWNoIGJ1ZmZlciAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJZGF0YSA9IGdsb2JhbF90cmFjZS5kYXRhW2ldOwotCQlwID0gZGF0YS0+dHJhY2VfcGFnZXMubmV4dDsKLQkJaWYgKHAgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKSB7Ci0JCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCQlXQVJOX09OKDEpOwotCQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7Ci0JCQlyZXQgPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0JCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQl0cmFjaW5nX3BhZ2VzX2FsbG9jYXRlZC0tOwotCQl0cmFjaW5nX3BhZ2VzX2FsbG9jYXRlZC0tOwotCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwlpZiAoIXRyLT5jdHJsIHx8IHRyYWNpbmdfZGlzYWJsZWQpCisJCXJldHVybiAwOwogCi0JCXRyYWNpbmdfcmVzZXQoZGF0YSk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwogCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJZGF0YSA9IG1heF90ci5kYXRhW2ldOwotCQlwID0gZGF0YS0+dHJhY2VfcGFnZXMubmV4dDsKLQkJaWYgKHAgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKSB7Ci0JCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCQlXQVJOX09OKDEpOwotCQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7Ci0JCQlyZXQgPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0JCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCisJCWdvdG8gb3V0OwogCi0JCXRyYWNpbmdfcmVzZXQoZGF0YSk7Ci0jZW5kaWYKLQl9Ci0JZ2xvYmFsX3RyYWNlLmVudHJpZXMgLT0gRU5UUklFU19QRVJfUEFHRTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhY2VfYnVmX2xvY2ssIGZsYWdzKTsKKwlsZW4gPSB2c25wcmludGYodHJhY2VfYnVmLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKIAorCWxlbiA9IG1pbihsZW4sIFRSQUNFX0JVRl9TSVpFLTEpOworCXRyYWNlX2J1ZltsZW5dID0gMDsKKworCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIGxlbiArIDE7CisJZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZSwgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJZ290byBvdXRfdW5sb2NrOworCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1BSSU5UOworCWVudHJ5LT5pcAkJCT0gaXA7CisKKwltZW1jcHkoJmVudHJ5LT5idWYsIHRyYWNlX2J1ZiwgbGVuKTsKKwllbnRyeS0+YnVmW2xlbl0gPSAwOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisKKyBvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyYWNlX2J1Zl9sb2NrLCBmbGFncyk7CisKKyBvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOworCisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3ZwcmludGspOworCitpbnQgX19mdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEspKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHRyYWNlX3ZwcmludGsoaXAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZnRyYWNlX3ByaW50ayk7CisKK3N0YXRpYyBpbnQgdHJhY2VfcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqdW51c2VkKQoreworCWZ0cmFjZV9kdW1wKCk7CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0cmFjZV9wYW5pY19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCAgPSB0cmFjZV9wYW5pY19oYW5kbGVyLAorCS5uZXh0ICAgICAgICAgICA9IE5VTEwsCisJLnByaW9yaXR5ICAgICAgID0gMTUwICAgLyogcHJpb3JpdHk6IElOVF9NQVggPj0geCA+PSAwICovCit9OworCitzdGF0aWMgaW50IHRyYWNlX2RpZV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIERJRV9PT1BTOgorCQlmdHJhY2VfZHVtcCgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0cmFjZV9kaWVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB0cmFjZV9kaWVfaGFuZGxlciwKKwkucHJpb3JpdHkgPSAyMDAKK307CisKKy8qCisgKiBwcmludGsgaXMgc2V0IHRvIG1heCBvZiAxMDI0LCB3ZSByZWFsbHkgZG9uJ3QgbmVlZCBpdCB0aGF0IGJpZy4KKyAqIE5vdGhpbmcgc2hvdWxkIGJlIHByaW50aW5nIDEwMDAgY2hhcmFjdGVycyBhbnl3YXkuCisgKi8KKyNkZWZpbmUgVFJBQ0VfTUFYX1BSSU5UCQkxMDAwCisKKy8qCisgKiBEZWZpbmUgaGVyZSBLRVJOX1RSQUNFIHNvIHRoYXQgd2UgaGF2ZSBvbmUgcGxhY2UgdG8gbW9kaWZ5CisgKiBpdCBpZiB3ZSBkZWNpZGUgdG8gY2hhbmdlIHdoYXQgbG9nIGxldmVsIHRoZSBmdHJhY2UgZHVtcAorICogc2hvdWxkIGJlIGF0LgorICovCisjZGVmaW5lIEtFUk5fVFJBQ0UJCUtFUk5fSU5GTworCitzdGF0aWMgdm9pZAordHJhY2VfcHJpbnRrX3NlcShzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCS8qIFByb2JhYmx5IHNob3VsZCBwcmludCBhIHdhcm5pbmcgaGVyZS4gKi8KKwlpZiAocy0+bGVuID49IDEwMDApCisJCXMtPmxlbiA9IDEwMDA7CisKKwkvKiBzaG91bGQgYmUgemVybyBlbmRlZCwgYnV0IHdlIGFyZSBwYXJhbm9pZC4gKi8KKwlzLT5idWZmZXJbcy0+bGVuXSA9IDA7CisKKwlwcmludGsoS0VSTl9UUkFDRSAiJXMiLCBzLT5idWZmZXIpOworCisJdHJhY2Vfc2VxX3Jlc2V0KHMpOworfQorCisKK3ZvaWQgZnRyYWNlX2R1bXAodm9pZCkKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZ0cmFjZV9kdW1wX2xvY2spOworCS8qIHVzZSBzdGF0aWMgYmVjYXVzZSBpdGVyIGNhbiBiZSBhIGJpdCBiaWcgZm9yIHRoZSBzdGFjayAqLworCXN0YXRpYyBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgaXRlcjsKKwlzdGF0aWMgY3B1bWFza190IG1hc2s7CisJc3RhdGljIGludCBkdW1wX3JhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjbnQgPSAwLCBjcHU7CisKKwkvKiBvbmx5IG9uZSBkdW1wICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZ0cmFjZV9kdW1wX2xvY2ssIGZsYWdzKTsKKwlpZiAoZHVtcF9yYW4pCisJCWdvdG8gb3V0OworCisJZHVtcF9yYW4gPSAxOworCisJLyogTm8gdHVybmluZyBiYWNrISAqLworCWZ0cmFjZV9raWxsX2F0b21pYygpOworCisJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CisJCWF0b21pY19pbmMoJmdsb2JhbF90cmFjZS5kYXRhW2NwdV0tPmRpc2FibGVkKTsKKwl9CisKKwlwcmludGsoS0VSTl9UUkFDRSAiRHVtcGluZyBmdHJhY2UgYnVmZmVyOlxuIik7CisKKwlpdGVyLnRyID0gJmdsb2JhbF90cmFjZTsKKwlpdGVyLnRyYWNlID0gY3VycmVudF90cmFjZTsKKworCS8qCisJICogV2UgbmVlZCB0byBzdG9wIGFsbCB0cmFjaW5nIG9uIGFsbCBDUFVTIHRvIHJlYWQgdGhlCisJICogdGhlIG5leHQgYnVmZmVyLiBUaGlzIGlzIGEgYml0IGV4cGVuc2l2ZSwgYnV0IGlzCisJICogbm90IGRvbmUgb2Z0ZW4uIFdlIGZpbGwgYWxsIHdoYXQgd2UgY2FuIHJlYWQsCisJICogYW5kIHRoZW4gcmVsZWFzZSB0aGUgbG9ja3MgYWdhaW4uCisJICovCisKKwljcHVzX2NsZWFyKG1hc2spOworCisJd2hpbGUgKCF0cmFjZV9lbXB0eSgmaXRlcikpIHsKKworCQlpZiAoIWNudCkKKwkJCXByaW50ayhLRVJOX1RSQUNFICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisJCWNudCsrOworCisJCS8qIHJlc2V0IGFsbCBidXQgdHIsIHRyYWNlLCBhbmQgb3ZlcnJ1bnMgKi8KKwkJbWVtc2V0KCZpdGVyLnNlcSwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IpIC0KKwkJICAgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFjZV9pdGVyYXRvciwgc2VxKSk7CisJCWl0ZXIuaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0xBVF9GTVQ7CisJCWl0ZXIucG9zID0gLTE7CisKKwkJaWYgKGZpbmRfbmV4dF9lbnRyeV9pbmMoJml0ZXIpICE9IE5VTEwpIHsKKwkJCXByaW50X3RyYWNlX2xpbmUoJml0ZXIpOworCQkJdHJhY2VfY29uc3VtZSgmaXRlcik7CisJCX0KKworCQl0cmFjZV9wcmludGtfc2VxKCZpdGVyLnNlcSk7CisJfQorCisJaWYgKCFjbnQpCisJCXByaW50ayhLRVJOX1RSQUNFICIgICAoZnRyYWNlIGJ1ZmZlciBlbXB0eSlcbiIpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fVFJBQ0UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnRyYWNlX2R1bXBfbG9jaywgZmxhZ3MpOworfQogCiBfX2luaXQgc3RhdGljIGludCB0cmFjZXJfYWxsb2NfYnVmZmVycyh2b2lkKQogewogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0Jdm9pZCAqYXJyYXk7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IHBhZ2VzID0gMDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKIAogCS8qIFRPRE86IG1ha2UgdGhlIG51bWJlciBvZiBidWZmZXJzIGhvdCBwbHVnZ2FibGUgd2l0aCBDUFVTICovCi0JdHJhY2luZ19ucl9idWZmZXJzID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKIAl0cmFjaW5nX2J1ZmZlcl9tYXNrID0gY3B1X3Bvc3NpYmxlX21hcDsKIAorCWdsb2JhbF90cmFjZS5idWZmZXIgPSByaW5nX2J1ZmZlcl9hbGxvYyh0cmFjZV9idWZfc2l6ZSwKKwkJCQkJCSAgIFRSQUNFX0JVRkZFUl9GTEFHUyk7CisJaWYgKCFnbG9iYWxfdHJhY2UuYnVmZmVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgcmluZyBidWZmZXIhXG4iKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIDA7CisJfQorCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gcmluZ19idWZmZXJfc2l6ZShnbG9iYWxfdHJhY2UuYnVmZmVyKTsKKworI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCisJbWF4X3RyLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKHRyYWNlX2J1Zl9zaXplLAorCQkJCQkgICAgIFRSQUNFX0JVRkZFUl9GTEFHUyk7CisJaWYgKCFtYXhfdHIuYnVmZmVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWF4IHJpbmcgYnVmZmVyIVxuIik7CisJCVdBUk5fT04oMSk7CisJCXJpbmdfYnVmZmVyX2ZyZWUoZ2xvYmFsX3RyYWNlLmJ1ZmZlcik7CisJCXJldHVybiAwOworCX0KKwltYXhfdHIuZW50cmllcyA9IHJpbmdfYnVmZmVyX3NpemUobWF4X3RyLmJ1ZmZlcik7CisJV0FSTl9PTihtYXhfdHIuZW50cmllcyAhPSBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisjZW5kaWYKKwogCS8qIEFsbG9jYXRlIHRoZSBmaXJzdCBwYWdlIGZvciBhbGwgYnVmZmVycyAqLwogCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKIAkJZGF0YSA9IGdsb2JhbF90cmFjZS5kYXRhW2ldID0gJnBlcl9jcHUoZ2xvYmFsX3RyYWNlX2NwdSwgaSk7CiAJCW1heF90ci5kYXRhW2ldID0gJnBlcl9jcHUobWF4X2RhdGEsIGkpOwotCi0JCWFycmF5ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmIChhcnJheSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRyYWNlcjogZmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2UiCi0JCQkgICAgICAgImZvciB0cmFjZSBidWZmZXIhXG4iKTsKLQkJCWdvdG8gZnJlZV9idWZmZXJzOwotCQl9Ci0KLQkJLyogc2V0IHRoZSBhcnJheSB0byB0aGUgbGlzdCAqLwotCQlJTklUX0xJU1RfSEVBRCgmZGF0YS0+dHJhY2VfcGFnZXMpOwotCQlwYWdlID0gdmlydF90b19wYWdlKGFycmF5KTsKLQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJmRhdGEtPnRyYWNlX3BhZ2VzKTsKLQkJLyogdXNlIHRoZSBMUlUgZmxhZyB0byBkaWZmZXJlbnRpYXRlIHRoZSB0d28gYnVmZmVycyAqLwotCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0KLQkJZGF0YS0+bG9jayA9IChyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7Ci0JCW1heF90ci5kYXRhW2ldLT5sb2NrID0gKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKLQotLyogT25seSBhbGxvY2F0ZSBpZiB3ZSBhcmUgYWN0dWFsbHkgdXNpbmcgdGhlIG1heCB0cmFjZSAqLwotI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCi0JCWFycmF5ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmIChhcnJheSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRyYWNlcjogZmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2UiCi0JCQkgICAgICAgImZvciB0cmFjZSBidWZmZXIhXG4iKTsKLQkJCWdvdG8gZnJlZV9idWZmZXJzOwotCQl9Ci0KLQkJSU5JVF9MSVNUX0hFQUQoJm1heF90ci5kYXRhW2ldLT50cmFjZV9wYWdlcyk7Ci0JCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYXJyYXkpOwotCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbWF4X3RyLmRhdGFbaV0tPnRyYWNlX3BhZ2VzKTsKLQkJU2V0UGFnZUxSVShwYWdlKTsKLSNlbmRpZgogCX0KIAotCS8qCi0JICogU2luY2Ugd2UgYWxsb2NhdGUgYnkgb3JkZXJzIG9mIHBhZ2VzLCB3ZSBtYXkgYmUgYWJsZSB0bwotCSAqIHJvdW5kIHVwIGEgYml0LgotCSAqLwotCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gRU5UUklFU19QRVJfUEFHRTsKLQlwYWdlcysrOwotCi0Jd2hpbGUgKGdsb2JhbF90cmFjZS5lbnRyaWVzIDwgdHJhY2VfbnJfZW50cmllcykgewotCQlpZiAodHJhY2VfYWxsb2NfcGFnZSgpKQotCQkJYnJlYWs7Ci0JCXBhZ2VzKys7Ci0JfQotCW1heF90ci5lbnRyaWVzID0gZ2xvYmFsX3RyYWNlLmVudHJpZXM7Ci0KLQlwcl9pbmZvKCJ0cmFjZXI6ICVkIHBhZ2VzIGFsbG9jYXRlZCBmb3IgJWxkIGVudHJpZXMgb2YgJWxkIGJ5dGVzXG4iLAotCQlwYWdlcywgdHJhY2VfbnJfZW50cmllcywgKGxvbmcpVFJBQ0VfRU5UUllfU0laRSk7Ci0JcHJfaW5mbygiICAgYWN0dWFsIGVudHJpZXMgJWxkXG4iLCBnbG9iYWxfdHJhY2UuZW50cmllcyk7Ci0KLQl0cmFjZXJfaW5pdF9kZWJ1Z2ZzKCk7Ci0KIAl0cmFjZV9pbml0X2NtZGxpbmVzKCk7CiAKLQlyZWdpc3Rlcl90cmFjZXIoJm5vX3RyYWNlcik7Ci0JY3VycmVudF90cmFjZSA9ICZub190cmFjZXI7CisJcmVnaXN0ZXJfdHJhY2VyKCZub3BfdHJhY2UpOworI2lmZGVmIENPTkZJR19CT09UX1RSQUNFUgorCXJlZ2lzdGVyX3RyYWNlcigmYm9vdF90cmFjZXIpOworCWN1cnJlbnRfdHJhY2UgPSAmYm9vdF90cmFjZXI7CisJY3VycmVudF90cmFjZS0+aW5pdCgmZ2xvYmFsX3RyYWNlKTsKKyNlbHNlCisJY3VycmVudF90cmFjZSA9ICZub3BfdHJhY2U7CisjZW5kaWYKIAogCS8qIEFsbCBzZWVtcyBPSywgZW5hYmxlIHRyYWNpbmcgKi8KIAlnbG9iYWxfdHJhY2UuY3RybCA9IHRyYWNlcl9lbmFibGVkOwogCXRyYWNpbmdfZGlzYWJsZWQgPSAwOwogCisJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCSAgICAgICAmdHJhY2VfcGFuaWNfbm90aWZpZXIpOworCisJcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZ0cmFjZV9kaWVfbm90aWZpZXIpOworCiAJcmV0dXJuIDA7Ci0KLSBmcmVlX2J1ZmZlcnM6Ci0JZm9yIChpLS0gOyBpID49IDA7IGktLSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgKnRtcDsKLQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSA9IGdsb2JhbF90cmFjZS5kYXRhW2ldOwotCi0JCWlmIChkYXRhKSB7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLAotCQkJCQkJICZkYXRhLT50cmFjZV9wYWdlcywgbHJ1KSB7Ci0JCQkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bHJ1KTsKLQkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJCX0KLQkJfQotCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJZGF0YSA9IG1heF90ci5kYXRhW2ldOwotCQlpZiAoZGF0YSkgewotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHRtcCwKLQkJCQkJCSAmZGF0YS0+dHJhY2VfcGFnZXMsIGxydSkgewotCQkJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxydSk7Ci0JCQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0KLQlyZXR1cm4gcmV0OwogfQotZnNfaW5pdGNhbGwodHJhY2VyX2FsbG9jX2J1ZmZlcnMpOworZWFybHlfaW5pdGNhbGwodHJhY2VyX2FsbG9jX2J1ZmZlcnMpOworZnNfaW5pdGNhbGwodHJhY2VyX2luaXRfZGVidWdmcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IGY2OWY4NjcuLmYxZjk5NTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC01LDcgKzUsOSBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogZW51bSB0cmFjZV90eXBlIHsKIAlfX1RSQUNFX0ZJUlNUX1RZUEUgPSAwLApAQCAtMTMsMzggKzE1LDYwIEBACiAJVFJBQ0VfRk4sCiAJVFJBQ0VfQ1RYLAogCVRSQUNFX1dBS0UsCisJVFJBQ0VfQ09OVCwKIAlUUkFDRV9TVEFDSywKKwlUUkFDRV9QUklOVCwKIAlUUkFDRV9TUEVDSUFMLAogCVRSQUNFX01NSU9fUlcsCiAJVFJBQ0VfTU1JT19NQVAsCisJVFJBQ0VfQk9PVCwKIAogCV9fVFJBQ0VfTEFTVF9UWVBFCiB9OwogCiAvKgorICogVGhlIHRyYWNlIGVudHJ5IC0gdGhlIG1vc3QgYmFzaWMgdW5pdCBvZiB0cmFjaW5nLiBUaGlzIGlzIHdoYXQKKyAqIGlzIHByaW50ZWQgaW4gdGhlIGVuZCBhcyBhIHNpbmdsZSBsaW5lIGluIHRoZSB0cmFjZSBvdXRwdXQsIHN1Y2ggYXM6CisgKgorICogICAgIGJhc2gtMTU4MTYgWzAxXSAgIDIzNS4xOTc1ODU6IGlkbGVfY3B1IDwtIGlycV9lbnRlcgorICovCitzdHJ1Y3QgdHJhY2VfZW50cnkgeworCXVuc2lnbmVkIGNoYXIJCXR5cGU7CisJdW5zaWduZWQgY2hhcgkJY3B1OworCXVuc2lnbmVkIGNoYXIJCWZsYWdzOworCXVuc2lnbmVkIGNoYXIJCXByZWVtcHRfY291bnQ7CisJaW50CQkJcGlkOworfTsKKworLyoKICAqIEZ1bmN0aW9uIHRyYWNlIGVudHJ5IC0gZnVuY3Rpb24gYWRkcmVzcyBhbmQgcGFyZW50IGZ1bmN0aW9uIGFkZHJlczoKICAqLwogc3RydWN0IGZ0cmFjZV9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBsb25nCQlpcDsKIAl1bnNpZ25lZCBsb25nCQlwYXJlbnRfaXA7CiB9OworZXh0ZXJuIHN0cnVjdCB0cmFjZXIgYm9vdF90cmFjZXI7CiAKIC8qCiAgKiBDb250ZXh0IHN3aXRjaCB0cmFjZSBlbnRyeSAtIHdoaWNoIHRhc2sgKGFuZCBwcmlvKSB3ZSBzd2l0Y2hlZCBmcm9tL3RvOgogICovCiBzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBpbnQJCXByZXZfcGlkOwogCXVuc2lnbmVkIGNoYXIJCXByZXZfcHJpbzsKIAl1bnNpZ25lZCBjaGFyCQlwcmV2X3N0YXRlOwogCXVuc2lnbmVkIGludAkJbmV4dF9waWQ7CiAJdW5zaWduZWQgY2hhcgkJbmV4dF9wcmlvOwogCXVuc2lnbmVkIGNoYXIJCW5leHRfc3RhdGU7CisJdW5zaWduZWQgaW50CQluZXh0X2NwdTsKIH07CiAKIC8qCiAgKiBTcGVjaWFsIChmcmVlLWZvcm0pIHRyYWNlIGVudHJ5OgogICovCiBzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBsb25nCQlhcmcxOwogCXVuc2lnbmVkIGxvbmcJCWFyZzI7CiAJdW5zaWduZWQgbG9uZwkJYXJnMzsKQEAgLTU3LDMzICs4MSw2MCBAQAogI2RlZmluZSBGVFJBQ0VfU1RBQ0tfRU5UUklFUwk4CiAKIHN0cnVjdCBzdGFja19lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBsb25nCQljYWxsZXJbRlRSQUNFX1NUQUNLX0VOVFJJRVNdOwogfTsKIAogLyoKLSAqIFRoZSB0cmFjZSBlbnRyeSAtIHRoZSBtb3N0IGJhc2ljIHVuaXQgb2YgdHJhY2luZy4gVGhpcyBpcyB3aGF0Ci0gKiBpcyBwcmludGVkIGluIHRoZSBlbmQgYXMgYSBzaW5nbGUgbGluZSBpbiB0aGUgdHJhY2Ugb3V0cHV0LCBzdWNoIGFzOgotICoKLSAqICAgICBiYXNoLTE1ODE2IFswMV0gICAyMzUuMTk3NTg1OiBpZGxlX2NwdSA8LSBpcnFfZW50ZXIKKyAqIGZ0cmFjZV9wcmludGsgZW50cnk6CiAgKi8KLXN0cnVjdCB0cmFjZV9lbnRyeSB7Ci0JY2hhcgkJCXR5cGU7Ci0JY2hhcgkJCWNwdTsKLQljaGFyCQkJZmxhZ3M7Ci0JY2hhcgkJCXByZWVtcHRfY291bnQ7Ci0JaW50CQkJcGlkOwotCWN5Y2xlX3QJCQl0OwotCXVuaW9uIHsKLQkJc3RydWN0IGZ0cmFjZV9lbnRyeQkJZm47Ci0JCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5CQljdHg7Ci0JCXN0cnVjdCBzcGVjaWFsX2VudHJ5CQlzcGVjaWFsOwotCQlzdHJ1Y3Qgc3RhY2tfZW50cnkJCXN0YWNrOwotCQlzdHJ1Y3QgbW1pb3RyYWNlX3J3CQltbWlvcnc7Ci0JCXN0cnVjdCBtbWlvdHJhY2VfbWFwCQltbWlvbWFwOwotCX07CitzdHJ1Y3QgcHJpbnRfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJdW5zaWduZWQgbG9uZwkJaXA7CisJY2hhcgkJCWJ1ZltdOwogfTsKIAotI2RlZmluZSBUUkFDRV9FTlRSWV9TSVpFCXNpemVvZihzdHJ1Y3QgdHJhY2VfZW50cnkpCisjZGVmaW5lIFRSQUNFX09MRF9TSVpFCQk4OAorCitzdHJ1Y3QgdHJhY2VfZmllbGRfY29udCB7CisJdW5zaWduZWQgY2hhcgkJdHlwZTsKKwkvKiBUZW1wb3JhcnkgdGlsbCB3ZSBnZXQgcmlkIG9mIHRoaXMgY29tcGxldGVseSAqLworCWNoYXIJCQlidWZbVFJBQ0VfT0xEX1NJWkUgLSAxXTsKK307CisKK3N0cnVjdCB0cmFjZV9tbWlvdHJhY2VfcncgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJc3RydWN0IG1taW90cmFjZV9ydwlydzsKK307CisKK3N0cnVjdCB0cmFjZV9tbWlvdHJhY2VfbWFwIHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCXN0cnVjdCBtbWlvdHJhY2VfbWFwCW1hcDsKK307CisKK3N0cnVjdCB0cmFjZV9ib290IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCXN0cnVjdCBib290X3RyYWNlCWluaXRjYWxsOworfTsKKworLyoKKyAqIHRyYWNlX2ZsYWdfdHlwZSBpcyBhbiBlbnVtZXJhdGlvbiB0aGF0IGhvbGRzIGRpZmZlcmVudAorICogc3RhdGVzIHdoZW4gYSB0cmFjZSBvY2N1cnMuIFRoZXNlIGFyZToKKyAqICBJUlFTX09GRgktIGludGVycnVwdHMgd2VyZSBkaXNhYmxlZAorICogIE5FRURfUkVTQ0VEIC0gcmVzY2hlZHVsZSBpcyByZXF1ZXN0ZWQKKyAqICBIQVJESVJRCS0gaW5zaWRlIGFuIGludGVycnVwdCBoYW5kbGVyCisgKiAgU09GVElSUQktIGluc2lkZSBhIHNvZnRpcnEgaGFuZGxlcgorICogIENPTlQJLSBtdWx0aXBsZSBlbnRyaWVzIGhvbGQgdGhlIHRyYWNlIGl0ZW0KKyAqLworZW51bSB0cmFjZV9mbGFnX3R5cGUgeworCVRSQUNFX0ZMQUdfSVJRU19PRkYJCT0gMHgwMSwKKwlUUkFDRV9GTEFHX05FRURfUkVTQ0hFRAkJPSAweDAyLAorCVRSQUNFX0ZMQUdfSEFSRElSUQkJPSAweDA0LAorCVRSQUNFX0ZMQUdfU09GVElSUQkJPSAweDA4LAorCVRSQUNFX0ZMQUdfQ09OVAkJCT0gMHgxMCwKK307CisKKyNkZWZpbmUgVFJBQ0VfQlVGX1NJWkUJCTEwMjQKIAogLyoKICAqIFRoZSBDUFUgdHJhY2UgYXJyYXkgLSBpdCBjb25zaXN0cyBvZiB0aG91c2FuZHMgb2YgdHJhY2UgZW50cmllcwpAQCAtOTEsMTYgKzE0Miw5IEBACiAgKiB0aGUgdHJhY2UsIGV0Yy4pCiAgKi8KIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgewotCXN0cnVjdCBsaXN0X2hlYWQJdHJhY2VfcGFnZXM7CiAJYXRvbWljX3QJCWRpc2FibGVkOwotCXJhd19zcGlubG9ja190CQlsb2NrOwotCXN0cnVjdCBsb2NrX2NsYXNzX2tleQlsb2NrX2tleTsKIAogCS8qIHRoZXNlIGZpZWxkcyBnZXQgY29waWVkIGludG8gbWF4LXRyYWNlOiAqLwotCXVuc2lnbmVkCQl0cmFjZV9oZWFkX2lkeDsKLQl1bnNpZ25lZAkJdHJhY2VfdGFpbF9pZHg7Ci0Jdm9pZAkJCSp0cmFjZV9oZWFkOyAvKiBwcm9kdWNlciAqLwotCXZvaWQJCQkqdHJhY2VfdGFpbDsgLyogY29uc3VtZXIgKi8KIAl1bnNpZ25lZCBsb25nCQl0cmFjZV9pZHg7CiAJdW5zaWduZWQgbG9uZwkJb3ZlcnJ1bjsKIAl1bnNpZ25lZCBsb25nCQlzYXZlZF9sYXRlbmN5OwpAQCAtMTI0LDYgKzE2OCw3IEBACiAgKiBUaGV5IGhhdmUgb24vb2ZmIHN0YXRlIGFzIHdlbGw6CiAgKi8KIHN0cnVjdCB0cmFjZV9hcnJheSB7CisJc3RydWN0IHJpbmdfYnVmZmVyCSpidWZmZXI7CiAJdW5zaWduZWQgbG9uZwkJZW50cmllczsKIAlsb25nCQkJY3RybDsKIAlpbnQJCQljcHU7CkBAIC0xMzIsNiArMTc3LDU2IEBACiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdQkqZGF0YVtOUl9DUFVTXTsKIH07CiAKKyNkZWZpbmUgRlRSQUNFX0NNUF9UWVBFKHZhciwgdHlwZSkgXAorCV9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKHZhciksIHR5cGUgKikKKworI3VuZGVmIElGX0FTU0lHTgorI2RlZmluZSBJRl9BU1NJR04odmFyLCBlbnRyeSwgZXR5cGUsIGlkKQkJXAorCWlmIChGVFJBQ0VfQ01QX1RZUEUodmFyLCBldHlwZSkpIHsJCVwKKwkJdmFyID0gKHR5cGVvZih2YXIpKShlbnRyeSk7CQlcCisJCVdBUk5fT04oaWQgJiYgKGVudHJ5KS0+dHlwZSAhPSBpZCk7CVwKKwkJYnJlYWs7CQkJCQlcCisJfQorCisvKiBXaWxsIGNhdXNlIGNvbXBpbGUgZXJyb3JzIGlmIHR5cGUgaXMgbm90IGZvdW5kLiAqLworZXh0ZXJuIHZvaWQgX19mdHJhY2VfYmFkX3R5cGUodm9pZCk7CisKKy8qCisgKiBUaGUgdHJhY2VfYXNzaWduX3R5cGUgaXMgYSB2ZXJpZmllciB0aGF0IHRoZSBlbnRyeSB0eXBlIGlzCisgKiB0aGUgc2FtZSBhcyB0aGUgdHlwZSBiZWluZyBhc3NpZ25lZC4gVG8gYWRkIG5ldyB0eXBlcyBzaW1wbHkKKyAqIGFkZCBhIGxpbmUgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAqCisgKiBJRl9BU1NJR04odmFyLCBlbnQsIHR5cGUsIGlkKTsKKyAqCisgKiAgV2hlcmUgInR5cGUiIGlzIHRoZSB0cmFjZSB0eXBlIHRoYXQgaW5jbHVkZXMgdGhlIHRyYWNlX2VudHJ5CisgKiAgYXMgdGhlICJlbnQiIGl0ZW0uIEFuZCAiaWQiIGlzIHRoZSB0cmFjZSBpZGVudGlmaWVyIHRoYXQgaXMKKyAqICB1c2VkIGluIHRoZSB0cmFjZV90eXBlIGVudW0uCisgKgorICogIElmIHRoZSB0eXBlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgaWQsIHRoZW4gdXNlIHplcm8uCisgKi8KKyNkZWZpbmUgdHJhY2VfYXNzaWduX3R5cGUodmFyLCBlbnQpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZW50cnksIFRSQUNFX0ZOKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5LCAwKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9maWVsZF9jb250LCBUUkFDRV9DT05UKTsgXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBzdGFja19lbnRyeSwgVFJBQ0VfU1RBQ0spOwlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHByaW50X2VudHJ5LCBUUkFDRV9QUklOVCk7CVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSwgMCk7CQlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX21taW90cmFjZV9ydywJCVwKKwkJCSAgVFJBQ0VfTU1JT19SVyk7CQkJCVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX21hcCwJCVwKKwkJCSAgVFJBQ0VfTU1JT19NQVApOwkJCQlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX2Jvb3QsIFRSQUNFX0JPT1QpOwlcCisJCV9fZnRyYWNlX2JhZF90eXBlKCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworLyogUmV0dXJuIHZhbHVlcyBmb3IgcHJpbnRfbGluZSBjYWxsYmFjayAqLworZW51bSBwcmludF9saW5lX3QgeworCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FCT0gMCwJLyogUmV0cnkgYWZ0ZXIgZmx1c2hpbmcgdGhlIHNlcSAqLworCVRSQUNFX1RZUEVfSEFORExFRAk9IDEsCisJVFJBQ0VfVFlQRV9VTkhBTkRMRUQJPSAyCS8qIFJlbGF5IHRvIG90aGVyIG91dHB1dCBmdW5jdGlvbnMgKi8KK307CisKIC8qCiAgKiBBIHNwZWNpZmljIHRyYWNlciwgcmVwcmVzZW50ZWQgYnkgbWV0aG9kcyB0aGF0IG9wZXJhdGUgb24gYSB0cmFjZSBhcnJheToKICAqLwpAQCAtMTUyLDcgKzI0Nyw3IEBACiAJaW50CQkJKCpzZWxmdGVzdCkoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKICNlbmRpZgotCWludAkJCSgqcHJpbnRfbGluZSkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKKwllbnVtIHByaW50X2xpbmVfdAkoKnByaW50X2xpbmUpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAJc3RydWN0IHRyYWNlcgkJKm5leHQ7CiAJaW50CQkJcHJpbnRfbWF4OwogfTsKQEAgLTE3MSw1NyArMjY2LDU4IEBACiAJc3RydWN0IHRyYWNlX2FycmF5CSp0cjsKIAlzdHJ1Y3QgdHJhY2VyCQkqdHJhY2U7CiAJdm9pZAkJCSpwcml2YXRlOwotCWxvbmcJCQlsYXN0X292ZXJydW5bTlJfQ1BVU107Ci0JbG9uZwkJCW92ZXJydW5bTlJfQ1BVU107CisJc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIJKmJ1ZmZlcl9pdGVyW05SX0NQVVNdOwogCiAJLyogVGhlIGJlbG93IGlzIHplcm9lZCBvdXQgaW4gcGlwZV9yZWFkICovCiAJc3RydWN0IHRyYWNlX3NlcQlzZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5CSplbnQ7CiAJaW50CQkJY3B1OwotCi0Jc3RydWN0IHRyYWNlX2VudHJ5CSpwcmV2X2VudDsKLQlpbnQJCQlwcmV2X2NwdTsKKwl1NjQJCQl0czsKIAogCXVuc2lnbmVkIGxvbmcJCWl0ZXJfZmxhZ3M7CiAJbG9mZl90CQkJcG9zOwotCXVuc2lnbmVkIGxvbmcJCW5leHRfaWR4W05SX0NQVVNdOwotCXN0cnVjdCBsaXN0X2hlYWQJKm5leHRfcGFnZVtOUl9DUFVTXTsKLQl1bnNpZ25lZAkJbmV4dF9wYWdlX2lkeFtOUl9DUFVTXTsKIAlsb25nCQkJaWR4OwogfTsKIAotdm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOwordm9pZCB0cmFjZV93YWtlX3VwKHZvaWQpOwordm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpOwogaW50IHRyYWNpbmdfb3Blbl9nZW5lcmljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0cnVjdCBkZW50cnkgKnRyYWNpbmdfaW5pdF9kZW50cnkodm9pZCk7CiB2b2lkIGluaXRfdHJhY2VyX3N5c3Byb2ZfZGVidWdmcyhzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcik7CiAKK3N0cnVjdCB0cmFjZV9lbnRyeSAqdHJhY2luZ19nZXRfdHJhY2VfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOwordm9pZCB0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSAgaW50IHBjKTsKKwogdm9pZCBmdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCSAgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgaXAsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCi0JCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2luZ19yZWNvcmRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKIHZvaWQgdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpjdXIsCi0JCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2Vfc3BlY2lhbChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCiAJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJICAgdW5zaWduZWQgbG9uZyBhcmczKTsKKwkJICAgdW5zaWduZWQgbG9uZyBhcmczLCBpbnQgcGMpOwogdm9pZCB0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJICAgIHVuc2lnbmVkIGxvbmcgaXAsCiAJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwKLQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIAogdm9pZCB0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKHZvaWQpOwogdm9pZCB0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQodm9pZCk7CkBAIC0yNjgsNTEgKzM2NCwzMyBAQAogZXh0ZXJuIGludCBEWU5fRlRSQUNFX1RFU1RfTkFNRSh2b2lkKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01NSU9UUkFDRQotZXh0ZXJuIHZvaWQgX190cmFjZV9tbWlvdHJhY2Vfcncoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkJCXN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KTsKLWV4dGVybiB2b2lkIF9fdHJhY2VfbW1pb3RyYWNlX21hcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0JCQkJc3RydWN0IG1taW90cmFjZV9tYXAgKm1hcCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCi0jaWZkZWYgQ09ORklHX0ZUUkFDRQogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2lycXNvZmYoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJFRU1QVF9UUkFDRVIKIGV4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9wcmVlbXB0b2ZmKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfSVJRU09GRl9UUkFDRVIpICYmIGRlZmluZWQoQ09ORklHX1BSRUVNUFRfVFJBQ0VSKQogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3ByZWVtcHRpcnFzb2ZmKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NDSEVEX1RSQUNFUgogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3dha2V1cChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUgorZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX25vcChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKKwkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3NjaGVkX3N3aXRjaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU1BST0ZfVFJBQ0VSCiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfc3lzcHJvZihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgKi8KIAogZXh0ZXJuIHZvaWQgKmhlYWRfcGFnZShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKTsKIGV4dGVybiBpbnQgdHJhY2Vfc2VxX3ByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCB0cmFjZV9zZXFfcHJpbnRfY29udChzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkJCSBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwogZXh0ZXJuIHNzaXplX3QgdHJhY2Vfc2VxX3RvX3VzZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkJIHNpemVfdCBjbnQpOwogZXh0ZXJuIGxvbmcgbnMydXNlY3MoY3ljbGVfdCBuc2VjKTsKK2V4dGVybiBpbnQgdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyYWNlX2ZsYWdzOwogCkBAIC0zMzQsNiArNDEyLDkgQEAKIAlUUkFDRV9JVEVSX0JMT0NLCQk9IDB4ODAsCiAJVFJBQ0VfSVRFUl9TVEFDS1RSQUNFCQk9IDB4MTAwLAogCVRSQUNFX0lURVJfU0NIRURfVFJFRQkJPSAweDIwMCwKKwlUUkFDRV9JVEVSX1BSSU5USwkJPSAweDQwMCwKIH07CiAKK2V4dGVybiBzdHJ1Y3QgdHJhY2VyIG5vcF90cmFjZTsKKwogI2VuZGlmIC8qIF9MSU5VWF9LRVJORUxfVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhNWU1MAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiByaW5nIGJ1ZmZlciBiYXNlZCBpbml0Y2FsbHMgdHJhY2VyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworI2luY2x1ZGUgInRyYWNlLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmJvb3RfdHJhY2U7CitzdGF0aWMgaW50IHRyYWNlX2Jvb3RfZW5hYmxlZDsKKworCisvKiBTaG91bGQgYmUgc3RhcnRlZCBhZnRlciBkb19wcmVfc21wX2luaXRjYWxscygpIGluIGluaXQvbWFpbi5jICovCit2b2lkIHN0YXJ0X2Jvb3RfdHJhY2Uodm9pZCkKK3sKKwl0cmFjZV9ib290X2VuYWJsZWQgPSAxOworfQorCit2b2lkIHN0b3BfYm9vdF90cmFjZSh2b2lkKQoreworCXRyYWNlX2Jvb3RfZW5hYmxlZCA9IDA7Cit9CisKK3ZvaWQgcmVzZXRfYm9vdF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXN0b3BfYm9vdF90cmFjZSgpOworfQorCitzdGF0aWMgdm9pZCBib290X3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpbnQgY3B1OworCWJvb3RfdHJhY2UgPSB0cjsKKworCXRyYWNlX2Jvb3RfZW5hYmxlZCA9IDA7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNwdV9wb3NzaWJsZV9tYXApCisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Cit9CisKK3N0YXRpYyB2b2lkIGJvb3RfdHJhY2VfY3RybF91cGRhdGUoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpZiAodHItPmN0cmwpCisJCXN0YXJ0X2Jvb3RfdHJhY2UoKTsKKwllbHNlCisJCXN0b3BfYm9vdF90cmFjZSgpOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgaW5pdGNhbGxfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCXN0cnVjdCB0cmFjZV9ib290ICpmaWVsZCA9IChzdHJ1Y3QgdHJhY2VfYm9vdCAqKWVudHJ5OworCXN0cnVjdCBib290X3RyYWNlICppdCA9ICZmaWVsZC0+aW5pdGNhbGw7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRpbWVzcGVjIGNhbGx0aW1lID0ga3RpbWVfdG9fdGltZXNwZWMoaXQtPmNhbGx0aW1lKTsKKwlzdHJ1Y3QgdGltZXNwZWMgcmV0dGltZSA9IGt0aW1lX3RvX3RpbWVzcGVjKGl0LT5yZXR0aW1lKTsKKworCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9CT09UKSB7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlslNWxkLiUwOWxkXSBjYWxsaW5nICAlcyBAICVpXG4iLAorCQkJCQkgIGNhbGx0aW1lLnR2X3NlYywKKwkJCQkJICBjYWxsdGltZS50dl9uc2VjLAorCQkJCQkgIGl0LT5mdW5jLCBpdC0+Y2FsbGVyKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyU1bGQuJTA5bGRdIGluaXRjYWxsICVzICIKKwkJCQkJICAicmV0dXJuZWQgJWQgYWZ0ZXIgJWxsZCBtc2Vjc1xuIiwKKwkJCQkJICByZXR0aW1lLnR2X3NlYywKKwkJCQkJICByZXR0aW1lLnR2X25zZWMsCisJCQkJCSAgaXQtPmZ1bmMsIGl0LT5yZXN1bHQsIGl0LT5kdXJhdGlvbik7CisKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJfQorCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKK30KKworc3RydWN0IHRyYWNlciBib290X3RyYWNlciBfX3JlYWRfbW9zdGx5ID0KK3sKKwkubmFtZQkJPSAiaW5pdGNhbGwiLAorCS5pbml0CQk9IGJvb3RfdHJhY2VfaW5pdCwKKwkucmVzZXQJCT0gcmVzZXRfYm9vdF90cmFjZSwKKwkuY3RybF91cGRhdGUJPSBib290X3RyYWNlX2N0cmxfdXBkYXRlLAorCS5wcmludF9saW5lCT0gaW5pdGNhbGxfcHJpbnRfbGluZSwKK307CisKK3ZvaWQgdHJhY2VfYm9vdChzdHJ1Y3QgYm9vdF90cmFjZSAqaXQsIGluaXRjYWxsX3QgZm4pCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfYm9vdCAqZW50cnk7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKKworCWlmICghdHJhY2VfYm9vdF9lbmFibGVkKQorCQlyZXR1cm47CisKKwkvKiBHZXQgaXRzIG5hbWUgbm93IHNpbmNlIHRoaXMgZnVuY3Rpb24gY291bGQKKwkgKiBkaXNhcHBlYXIgYmVjYXVzZSBpdCBpcyBpbiB0aGUgLmluaXQgc2VjdGlvbi4KKwkgKi8KKwlzcHJpbnRfc3ltYm9sKGl0LT5mdW5jLCAodW5zaWduZWQgbG9uZylmbik7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJZGF0YSA9IHRyLT5kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICZpcnFfZmxhZ3MpOworCWlmICghZXZlbnQpCisJCWdvdG8gb3V0OworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7CisJZW50cnktPmVudC50eXBlID0gVFJBQ0VfQk9PVDsKKwllbnRyeS0+aW5pdGNhbGwgPSAqaXQ7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKworCXRyYWNlX3dha2VfdXAoKTsKKworIG91dDoKKwlwcmVlbXB0X2VuYWJsZSgpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCmluZGV4IDMxMjE0NDguLmU5MGViMGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAl0ci0+dGltZV9zdGFydCA9IGZ0cmFjZV9ub3codHItPmNwdSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ci0+ZGF0YVtjcHVdKTsKKwkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfZnVuY3Rpb25fdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCmluZGV4IGVjZTZjZmIuLmE3ZGI3ZjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwpAQCAtOTUsNyArOTUsNyBAQAogCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKIAogCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpCi0JCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncyk7CisJCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIH0KQEAgLTEzMCw2ICsxMzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGF0ZW5jeSwgdDAsIHQxOwogCWN5Y2xlX3QgVDAsIFQxLCBkZWx0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwYzsKIAogCS8qCiAJICogdXNlY3MgY29udmVyc2lvbiBpcyBzbG93IHNvIHdlIHRyeSB0byBkZWxheSB0aGUgY29udmVyc2lvbgpAQCAtMTQxLDYgKzE0Miw4IEBACiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAorCXBjID0gcHJlZW1wdF9jb3VudCgpOworCiAJaWYgKCFyZXBvcnRfbGF0ZW5jeShkZWx0YSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xNTAsNyArMTUzLDcgQEAKIAlpZiAoIXJlcG9ydF9sYXRlbmN5KGRlbHRhKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogCiAJbGF0ZW5jeSA9IG5zZWNzX3RvX3VzZWNzKGRlbHRhKTsKIApAQCAtMTczLDggKzE3Niw4IEBACiBvdXQ6CiAJZGF0YS0+Y3JpdGljYWxfc2VxdWVuY2UgPSBtYXhfc2VxdWVuY2U7CiAJZGF0YS0+cHJlZW1wdF90aW1lc3RhbXAgPSBmdHJhY2Vfbm93KGNwdSk7Ci0JdHJhY2luZ19yZXNldChkYXRhKTsKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgQ0FMTEVSX0FERFIwLCBwYXJlbnRfaXAsIGZsYWdzKTsKKwl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBDQUxMRVJfQUREUjAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yMDMsMTEgKzIwNiwxMSBAQAogCWRhdGEtPmNyaXRpY2FsX3NlcXVlbmNlID0gbWF4X3NlcXVlbmNlOwogCWRhdGEtPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOwogCWRhdGEtPmNyaXRpY2FsX3N0YXJ0ID0gcGFyZW50X2lwID8gOiBpcDsKLQl0cmFjaW5nX3Jlc2V0KGRhdGEpOworCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOwogCiAJcGVyX2NwdSh0cmFjaW5nX2NwdSwgY3B1KSA9IDE7CiAKQEAgLTIzNCwxNCArMjM3LDE0IEBACiAKIAlkYXRhID0gdHItPmRhdGFbY3B1XTsKIAotCWlmICh1bmxpa2VseSghZGF0YSkgfHwgdW5saWtlbHkoIWhlYWRfcGFnZShkYXRhKSkgfHwKKwlpZiAodW5saWtlbHkoIWRhdGEpIHx8CiAJICAgICFkYXRhLT5jcml0aWNhbF9zdGFydCB8fCBhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKQogCQlyZXR1cm47CiAKIAlhdG9taWNfaW5jKCZkYXRhLT5kaXNhYmxlZCk7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIAljaGVja19jcml0aWNhbF90aW1pbmcodHIsIGRhdGEsIHBhcmVudF9pcCA/IDogaXAsIGNwdSk7CiAJZGF0YS0+Y3JpdGljYWxfc3RhcnQgPSAwOwogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYwppbmRleCBiMTNkYzE5Li5mMjg0ODQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCkBAIC0yNyw3ICsyNyw3IEBACiAJdHItPnRpbWVfc3RhcnQgPSBmdHJhY2Vfbm93KHRyLT5jcHUpOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXRyYWNpbmdfcmVzZXQodHItPmRhdGFbY3B1XSk7CisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1taW9fdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQpAQCAtMTMwLDEwICsxMzAsMTQgQEAKIHsKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgY250ID0gMDsKKy8qIEZJWE1FOiAqLworI2lmIDAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQljbnQgKz0gaXRlci0+b3ZlcnJ1bltjcHVdOwogCQlpdGVyLT5vdmVycnVuW2NwdV0gPSAwOwogCX0KKyNlbmRpZgorCSh2b2lkKWNwdTsKIAlyZXR1cm4gY250OwogfQogCkBAIC0xNzEsMTcgKzE3NSwyMSBAQAogCXJldHVybiAocmV0ID09IC1FQlVTWSkgPyAwIDogcmV0OwogfQogCi1zdGF0aWMgaW50IG1taW9fcHJpbnRfcncoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQorc3RhdGljIGVudW0gcHJpbnRfbGluZV90IG1taW9fcHJpbnRfcncoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0Jc3RydWN0IG1taW90cmFjZV9ydyAqcncJPSAmZW50cnktPm1taW9ydzsKKwlzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX3J3ICpmaWVsZDsKKwlzdHJ1Y3QgbW1pb3RyYWNlX3J3ICpydzsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzCT0gJml0ZXItPnNlcTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGVudHJ5LT50KTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGl0ZXItPnRzKTsKIAl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOwogCXVuc2lnbmVkIHNlY3MJCT0gKHVuc2lnbmVkIGxvbmcpdDsKIAlpbnQgcmV0ID0gMTsKIAotCXN3aXRjaCAoZW50cnktPm1taW9ydy5vcGNvZGUpIHsKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCXJ3ID0gJmZpZWxkLT5ydzsKKworCXN3aXRjaCAocnctPm9wY29kZSkgewogCWNhc2UgTU1JT19SRUFEOgogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCiAJCQkiUiAlZCAlbHUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4ICVkXG4iLApAQCAtMjA5LDIxICsyMTcsMjUgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChyZXQpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIH0KIAotc3RhdGljIGludCBtbWlvX3ByaW50X21hcChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgbW1pb19wcmludF9tYXAoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0Jc3RydWN0IG1taW90cmFjZV9tYXAgKm0JPSAmZW50cnktPm1taW9tYXA7CisJc3RydWN0IHRyYWNlX21taW90cmFjZV9tYXAgKmZpZWxkOworCXN0cnVjdCBtbWlvdHJhY2VfbWFwICptOwogCXN0cnVjdCB0cmFjZV9zZXEgKnMJPSAmaXRlci0+c2VxOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0CT0gbnMydXNlY3MoZW50cnktPnQpOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0CT0gbnMydXNlY3MoaXRlci0+dHMpOwogCXVuc2lnbmVkIGxvbmcgdXNlY19yZW0JPSBkb19kaXYodCwgMTAwMDAwMFVMTCk7CiAJdW5zaWduZWQgc2VjcwkJPSAodW5zaWduZWQgbG9uZyl0OwotCWludCByZXQgPSAxOworCWludCByZXQ7CiAKLQlzd2l0Y2ggKGVudHJ5LT5tbWlvcncub3Bjb2RlKSB7CisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwltID0gJmZpZWxkLT5tYXA7CisKKwlzd2l0Y2ggKG0tPm9wY29kZSkgewogCWNhc2UgTU1JT19QUk9CRToKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAogCQkJIk1BUCAlbHUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4IDB4JWx4ICVkXG4iLApAQCAtMjQxLDIwICsyNTMsNDMgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChyZXQpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIH0KIAotLyogcmV0dXJuIDAgdG8gYWJvcnQgcHJpbnRpbmcgd2l0aG91dCBjb25zdW1pbmcgY3VycmVudCBlbnRyeSBpbiBwaXBlIG1vZGUgKi8KLXN0YXRpYyBpbnQgbW1pb19wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBtbWlvX3ByaW50X21hcmsoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHByaW50X2VudHJ5ICpwcmludCA9IChzdHJ1Y3QgcHJpbnRfZW50cnkgKillbnRyeTsKKwljb25zdCBjaGFyICptc2cJCT0gcHJpbnQtPmJ1ZjsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzCT0gJml0ZXItPnNlcTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGl0ZXItPnRzKTsKKwl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOworCXVuc2lnbmVkIHNlY3MJCT0gKHVuc2lnbmVkIGxvbmcpdDsKKwlpbnQgcmV0OworCisJLyogVGhlIHRyYWlsaW5nIG5ld2xpbmUgbXVzdCBiZSBpbiB0aGUgbWVzc2FnZS4gKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJNQVJLICVsdS4lMDZsdSAlcyIsIHNlY3MsIHVzZWNfcmVtLCBtc2cpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQorCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBtbWlvX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN3aXRjaCAoaXRlci0+ZW50LT50eXBlKSB7CiAJY2FzZSBUUkFDRV9NTUlPX1JXOgogCQlyZXR1cm4gbW1pb19wcmludF9ydyhpdGVyKTsKIAljYXNlIFRSQUNFX01NSU9fTUFQOgogCQlyZXR1cm4gbW1pb19wcmludF9tYXAoaXRlcik7CisJY2FzZSBUUkFDRV9QUklOVDoKKwkJcmV0dXJuIG1taW9fcHJpbnRfbWFyayhpdGVyKTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMTsgLyogaWdub3JlIHVua25vd24gZW50cmllcyAqLworCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOyAvKiBpZ25vcmUgdW5rbm93biBlbnRyaWVzICovCiAJfQogfQogCkBAIC0yNzYsNiArMzExLDI3IEBACiB9CiBkZXZpY2VfaW5pdGNhbGwoaW5pdF9tbWlvX3RyYWNlKTsKIAorc3RhdGljIHZvaWQgX190cmFjZV9tbWlvdHJhY2Vfcncoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAorCQkJCXN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX21taW90cmFjZV9ydyAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlldmVudAk9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICAgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgcHJlZW1wdF9jb3VudCgpKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX01NSU9fUlc7CisJZW50cnktPnJ3CQkJPSAqcnc7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKworCXRyYWNlX3dha2VfdXAoKTsKK30KKwogdm9pZCBtbWlvX3RyYWNlX3J3KHN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KQogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBtbWlvX3RyYWNlX2FycmF5OwpAQCAtMjgzLDYgKzMzOSwyNyBAQAogCV9fdHJhY2VfbW1pb3RyYWNlX3J3KHRyLCBkYXRhLCBydyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fdHJhY2VfbW1pb3RyYWNlX21hcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCisJCQkJc3RydWN0IG1taW90cmFjZV9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9tbWlvdHJhY2VfbWFwICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWV2ZW50CT0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAorCQkJCQkgICAmaXJxX2ZsYWdzKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCBwcmVlbXB0X2NvdW50KCkpOworCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfTU1JT19NQVA7CisJZW50cnktPm1hcAkJCT0gKm1hcDsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCisJdHJhY2Vfd2FrZV91cCgpOworfQorCiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKQogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBtbWlvX3RyYWNlX2FycmF5OwpAQCAtMjkzLDMgKzM3MCw4IEBACiAJX190cmFjZV9tbWlvdHJhY2VfbWFwKHRyLCBkYXRhLCBtYXApOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CisKK2ludCBtbWlvX3RyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlyZXR1cm4gdHJhY2VfdnByaW50aygwLCBmbXQsIGFyZ3MpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTJiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfbm9wLmMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIG5vcCB0cmFjZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU3RldmVuIE5vb25hbiA8c3RldmVuQHVwbGlua2xhYnMubmV0PgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpbmNsdWRlICJ0cmFjZS5oIgorCitzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5CSpjdHhfdHJhY2U7CisKK3N0YXRpYyB2b2lkIHN0YXJ0X25vcF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCS8qIE5vdGhpbmcgdG8gZG8hICovCit9CisKK3N0YXRpYyB2b2lkIHN0b3Bfbm9wX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJLyogTm90aGluZyB0byBkbyEgKi8KK30KKworc3RhdGljIHZvaWQgbm9wX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpbnQgY3B1OworCWN0eF90cmFjZSA9IHRyOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CisKKwlpZiAodHItPmN0cmwpCisJCXN0YXJ0X25vcF90cmFjZSh0cik7Cit9CisKK3N0YXRpYyB2b2lkIG5vcF90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWlmICh0ci0+Y3RybCkKKwkJc3RvcF9ub3BfdHJhY2UodHIpOworfQorCitzdGF0aWMgdm9pZCBub3BfdHJhY2VfY3RybF91cGRhdGUoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwkvKiBXaGVuIHN0YXJ0aW5nIGEgbmV3IHRyYWNlLCByZXNldCB0aGUgYnVmZmVycyAqLworCWlmICh0ci0+Y3RybCkKKwkJc3RhcnRfbm9wX3RyYWNlKHRyKTsKKwllbHNlCisJCXN0b3Bfbm9wX3RyYWNlKHRyKTsKK30KKworc3RydWN0IHRyYWNlciBub3BfdHJhY2UgX19yZWFkX21vc3RseSA9Cit7CisJLm5hbWUJCT0gIm5vcCIsCisJLmluaXQJCT0gbm9wX3RyYWNlX2luaXQsCisJLnJlc2V0CQk9IG5vcF90cmFjZV9yZXNldCwKKwkuY3RybF91cGRhdGUJPSBub3BfdHJhY2VfY3RybF91cGRhdGUsCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAorCS5zZWxmdGVzdAk9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfbm9wLAorI2VuZGlmCit9OworCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKaW5kZXggY2I4MTdhMi4uYjhmNTZiZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYwpAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCiAKQEAgLTE5LDE1ICsxOSwxNiBAQAogc3RhdGljIGF0b21pY190CQkJc2NoZWRfcmVmOwogCiBzdGF0aWMgdm9pZAotc2NoZWRfc3dpdGNoX2Z1bmModm9pZCAqcHJpdmF0ZSwgdm9pZCAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorcHJvYmVfc2NoZWRfc3dpdGNoKHN0cnVjdCBycSAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewotCXN0cnVjdCB0cmFjZV9hcnJheSAqKnB0ciA9IHByaXZhdGU7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICpwdHI7CiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgZGlzYWJsZWQ7CiAJaW50IGNwdTsKKwlpbnQgcGM7CisKKwlpZiAoIWF0b21pY19yZWFkKCZzY2hlZF9yZWYpKQorCQlyZXR1cm47CiAKIAl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHByZXYpOwogCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUobmV4dCk7CkBAIC0zNSw5NyArMzYsNDEgQEAKIAlpZiAoIXRyYWNlcl9lbmFibGVkKQogCQlyZXR1cm47CiAKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisJZGF0YSA9IGN0eF90cmFjZS0+ZGF0YVtjcHVdOwogCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2UodHIsIGRhdGEsIHByZXYsIG5leHQsIGZsYWdzKTsKKwlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKKwkJdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2UoY3R4X3RyYWNlLCBkYXRhLCBwcmV2LCBuZXh0LCBmbGFncywgcGMpOwogCi0JYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIG5vdHJhY2Ugdm9pZAotc2NoZWRfc3dpdGNoX2NhbGxiYWNrKHZvaWQgKnByb2JlX2RhdGEsIHZvaWQgKmNhbGxfZGF0YSwKLQkJICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0ICphcmdzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQ7Ci0Jc3RydWN0IHJxICpfX3JxOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmc2NoZWRfcmVmKSkKLQkJcmV0dXJuOwotCi0JLyogc2tpcCBwcmV2X3BpZCAlZCBuZXh0X3BpZCAlZCBwcmV2X3N0YXRlICVsZCAqLwotCSh2b2lkKXZhX2FyZygqYXJncywgaW50KTsKLQkodm9pZCl2YV9hcmcoKmFyZ3MsIGludCk7Ci0JKHZvaWQpdmFfYXJnKCphcmdzLCBsb25nKTsKLQlfX3JxID0gdmFfYXJnKCphcmdzLCB0eXBlb2YoX19ycSkpOwotCXByZXYgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZihwcmV2KSk7Ci0JbmV4dCA9IHZhX2FyZygqYXJncywgdHlwZW9mKG5leHQpKTsKLQotCS8qCi0JICogSWYgdHJhY2VyX3N3aXRjaF9mdW5jIG9ubHkgcG9pbnRzIHRvIHRoZSBsb2NhbAotCSAqIHN3aXRjaCBmdW5jLCBpdCBzdGlsbCBuZWVkcyB0aGUgcHRyIHBhc3NlZCB0byBpdC4KLQkgKi8KLQlzY2hlZF9zd2l0Y2hfZnVuYyhwcm9iZV9kYXRhLCBfX3JxLCBwcmV2LCBuZXh0KTsKLX0KLQogc3RhdGljIHZvaWQKLXdha2V1cF9mdW5jKHZvaWQgKnByaXZhdGUsIHZvaWQgKl9fcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsIHN0cnVjdAotCQkJdGFza19zdHJ1Y3QgKmN1cnIpCitwcm9iZV9zY2hlZF93YWtldXAoc3RydWN0IHJxICpfX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKndha2VlKQogewotCXN0cnVjdCB0cmFjZV9hcnJheSAqKnB0ciA9IHByaXZhdGU7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICpwdHI7CiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IGNwdTsKKwlpbnQgY3B1LCBwYzsKIAotCWlmICghdHJhY2VyX2VuYWJsZWQpCisJaWYgKCFsaWtlbHkodHJhY2VyX2VuYWJsZWQpKQogCQlyZXR1cm47CiAKLQl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnIpOworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisJZGF0YSA9IGN0eF90cmFjZS0+ZGF0YVtjcHVdOwogCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2UodHIsIGRhdGEsIHdha2VlLCBjdXJyLCBmbGFncyk7CisJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCisJCXRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKGN0eF90cmFjZSwgZGF0YSwgd2FrZWUsIGN1cnJlbnQsCisJCQkJCSAgIGZsYWdzLCBwYyk7CiAKLQlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgbm90cmFjZSB2b2lkCi13YWtlX3VwX2NhbGxiYWNrKHZvaWQgKnByb2JlX2RhdGEsIHZvaWQgKmNhbGxfZGF0YSwKLQkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCAqYXJncykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnI7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXN0cnVjdCBycSAqX19ycTsKLQotCWlmIChsaWtlbHkoIXRyYWNlcl9lbmFibGVkKSkKLQkJcmV0dXJuOwotCi0JLyogU2tpcCBwaWQgJWQgc3RhdGUgJWxkICovCi0JKHZvaWQpdmFfYXJnKCphcmdzLCBpbnQpOwotCSh2b2lkKXZhX2FyZygqYXJncywgbG9uZyk7Ci0JLyogbm93IGdldCB0aGUgbWVhdDogInJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiICovCi0JX19ycSA9IHZhX2FyZygqYXJncywgdHlwZW9mKF9fcnEpKTsKLQl0YXNrID0gdmFfYXJnKCphcmdzLCB0eXBlb2YodGFzaykpOwotCWN1cnIgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZihjdXJyKSk7Ci0KLQl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHRhc2spOwotCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3Vycik7Ci0KLQl3YWtldXBfZnVuYyhwcm9iZV9kYXRhLCBfX3JxLCB0YXNrLCBjdXJyKTsKLX0KLQogc3RhdGljIHZvaWQgc2NoZWRfc3dpdGNoX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJaW50IGNwdTsKQEAgLTEzMyw2NyArNzgsNDcgQEAKIAl0ci0+dGltZV9zdGFydCA9IGZ0cmFjZV9ub3codHItPmNwdSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ci0+ZGF0YVtjcHVdKTsKKwkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIH0KIAogc3RhdGljIGludCB0cmFjaW5nX3NjaGVkX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkicGlkICVkIHN0YXRlICVsZCAjIyBycSAlcCB0YXNrICVwIHJxLT5jdXJyICVwIiwKLQkJCXdha2VfdXBfY2FsbGJhY2ssCi0JCQkmY3R4X3RyYWNlKTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9zY2hlZF93YWtldXAocHJvYmVfc2NoZWRfd2FrZXVwKTsKIAlpZiAocmV0KSB7Ci0JCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygid2FrZXVwIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfd2FrZXVwXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXBfbmV3IiwKLQkJCSJwaWQgJWQgc3RhdGUgJWxkICMjIHJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiLAotCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCSZjdHhfdHJhY2UpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfc2NoZWRfd2FrZXVwKTsKIAlpZiAocmV0KSB7Ci0JCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygid2FrZXVwIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfd2FrZXVwX25ld1xuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlOwogCX0KIAotCXJldCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcigia2VybmVsX3NjaGVkX3NjaGVkdWxlIiwKLQkJInByZXZfcGlkICVkIG5leHRfcGlkICVkIHByZXZfc3RhdGUgJWxkICIKLQkJIiMjIHJxICVwIHByZXYgJXAgbmV4dCAlcCIsCi0JCXNjaGVkX3N3aXRjaF9jYWxsYmFjaywKLQkJJmN0eF90cmFjZSk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKHByb2JlX3NjaGVkX3N3aXRjaCk7CiAJaWYgKHJldCkgewotCQlwcl9pbmZvKCJzY2hlZCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygic2NoZWQgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCiAJCQkiIHByb2JlIHRvIGtlcm5lbF9zY2hlZF9zY2hlZHVsZVxuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlX3dha2VfbmV3OwogCX0KIAogCXJldHVybiByZXQ7CiBmYWlsX2RlcHJvYmVfd2FrZV9uZXc6Ci0JbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXBfbmV3IiwKLQkJCQl3YWtlX3VwX2NhbGxiYWNrLAotCQkJCSZjdHhfdHJhY2UpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwX25ldyhwcm9iZV9zY2hlZF93YWtldXApOwogZmFpbF9kZXByb2JlOgotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwIiwKLQkJCQl3YWtlX3VwX2NhbGxiYWNrLAotCQkJCSZjdHhfdHJhY2UpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwKHByb2JlX3NjaGVkX3dha2V1cCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdHJhY2luZ19zY2hlZF91bnJlZ2lzdGVyKHZvaWQpCiB7Ci0JbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoImtlcm5lbF9zY2hlZF9zY2hlZHVsZSIsCi0JCQkJc2NoZWRfc3dpdGNoX2NhbGxiYWNrLAotCQkJCSZjdHhfdHJhY2UpOwotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwX25ldyIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmY3R4X3RyYWNlKTsKLQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmY3R4X3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChwcm9iZV9zY2hlZF9zd2l0Y2gpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwX25ldyhwcm9iZV9zY2hlZF93YWtldXApOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwKHByb2JlX3NjaGVkX3dha2V1cCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggZTMwM2NjYi4uZmU0YTI1MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgorI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgogCkBAIC00NCwxMCArNDQsMTIgQEAKIAlsb25nIGRpc2FibGVkOwogCWludCByZXNjaGVkOwogCWludCBjcHU7CisJaW50IHBjOwogCiAJaWYgKGxpa2VseSghd2FrZXVwX3Rhc2spKQogCQlyZXR1cm47CiAKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKIAlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7CiAJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKIApAQCAtNzAsNyArNzIsNyBAQAogCWlmICh0YXNrX2NwdSh3YWtldXBfdGFzaykgIT0gY3B1KQogCQlnb3RvIHVubG9jazsKIAotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CiAKICB1bmxvY2s6CiAJX19yYXdfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKQEAgLTExMiwxNyArMTE0LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkIG5vdHJhY2UKLXdha2V1cF9zY2hlZF9zd2l0Y2godm9pZCAqcHJpdmF0ZSwgdm9pZCAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKK3Byb2JlX3dha2V1cF9zY2hlZF9zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKIAl1bnNpZ25lZCBsb25nIGxhdGVuY3kgPSAwLCB0MCA9IDAsIHQxID0gMDsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKipwdHIgPSBwcml2YXRlOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAqcHRyOwogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJY3ljbGVfdCBUMCwgVDEsIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBkaXNhYmxlZDsKIAlpbnQgY3B1OworCWludCBwYzsKKworCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUocHJldik7CiAKIAlpZiAodW5saWtlbHkoIXRyYWNlcl9lbmFibGVkKSkKIAkJcmV0dXJuOwpAQCAtMTM5LDEyICsxNDIsMTQgQEAKIAlpZiAobmV4dCAhPSB3YWtldXBfdGFzaykKIAkJcmV0dXJuOwogCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKIAkvKiBUaGUgdGFzayB3ZSBhcmUgd2FpdGluZyBmb3IgaXMgd2FraW5nIHVwICovCi0JZGF0YSA9IHRyLT5kYXRhW3dha2V1cF9jcHVdOworCWRhdGEgPSB3YWtldXBfdHJhY2UtPmRhdGFbd2FrZXVwX2NwdV07CiAKIAkvKiBkaXNhYmxlIGxvY2FsIGRhdGEsIG5vdCB3YWtldXBfY3B1IGRhdGEgKi8KIAljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZ3YWtldXBfdHJhY2UtPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwogCWlmIChsaWtlbHkoZGlzYWJsZWQgIT0gMSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xNTUsNyArMTYwLDcgQEAKIAlpZiAodW5saWtlbHkoIXRyYWNlcl9lbmFibGVkIHx8IG5leHQgIT0gd2FrZXVwX3Rhc2spKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgQ0FMTEVSX0FERFIxLCBDQUxMRVJfQUREUjIsIGZsYWdzKTsKKwl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIGRhdGEsIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOwogCiAJLyoKIAkgKiB1c2VjcyBjb252ZXJzaW9uIGlzIHNsb3cgc28gd2UgdHJ5IHRvIGRlbGF5IHRoZSBjb252ZXJzaW9uCkBAIC0xNzQsMzkgKzE3OSwxNCBAQAogCXQwID0gbnNlY3NfdG9fdXNlY3MoVDApOwogCXQxID0gbnNlY3NfdG9fdXNlY3MoVDEpOwogCi0JdXBkYXRlX21heF90cih0ciwgd2FrZXVwX3Rhc2ssIHdha2V1cF9jcHUpOworCXVwZGF0ZV9tYXhfdHIod2FrZXVwX3RyYWNlLCB3YWtldXBfdGFzaywgd2FrZXVwX2NwdSk7CiAKIG91dF91bmxvY2s6Ci0JX193YWtldXBfcmVzZXQodHIpOworCV9fd2FrZXVwX3Jlc2V0KHdha2V1cF90cmFjZSk7CiAJX19yYXdfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiBvdXQ6Ci0JYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwotfQotCi1zdGF0aWMgbm90cmFjZSB2b2lkCi1zY2hlZF9zd2l0Y2hfY2FsbGJhY2sodm9pZCAqcHJvYmVfZGF0YSwgdm9pZCAqY2FsbF9kYXRhLAotCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgKmFyZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dDsKLQlzdHJ1Y3QgcnEgKl9fcnE7Ci0KLQkvKiBza2lwIHByZXZfcGlkICVkIG5leHRfcGlkICVkIHByZXZfc3RhdGUgJWxkICovCi0JKHZvaWQpdmFfYXJnKCphcmdzLCBpbnQpOwotCSh2b2lkKXZhX2FyZygqYXJncywgaW50KTsKLQkodm9pZCl2YV9hcmcoKmFyZ3MsIGxvbmcpOwotCV9fcnEgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZihfX3JxKSk7Ci0JcHJldiA9IHZhX2FyZygqYXJncywgdHlwZW9mKHByZXYpKTsKLQluZXh0ID0gdmFfYXJnKCphcmdzLCB0eXBlb2YobmV4dCkpOwotCi0JdHJhY2luZ19yZWNvcmRfY21kbGluZShwcmV2KTsKLQotCS8qCi0JICogSWYgdHJhY2VyX3N3aXRjaF9mdW5jIG9ubHkgcG9pbnRzIHRvIHRoZSBsb2NhbAotCSAqIHN3aXRjaCBmdW5jLCBpdCBzdGlsbCBuZWVkcyB0aGUgcHRyIHBhc3NlZCB0byBpdC4KLQkgKi8KLQl3YWtldXBfc2NoZWRfc3dpdGNoKHByb2JlX2RhdGEsIF9fcnEsIHByZXYsIG5leHQpOworCWF0b21pY19kZWMoJndha2V1cF90cmFjZS0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fd2FrZXVwX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCkBAIC0yMTYsNyArMTk2LDcgQEAKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0JCXRyYWNpbmdfcmVzZXQoZGF0YSk7CisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiAJfQogCiAJd2FrZXVwX2NwdSA9IC0xOwpAQCAtMjQwLDE5ICsyMjAsMjYgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdha2V1cF9jaGVja19zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3Byb2JlX3dha2V1cChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7CisJaW50IHBjOworCisJaWYgKGxpa2VseSghdHJhY2VyX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHApOworCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7CiAKIAlpZiAobGlrZWx5KCFydF90YXNrKHApKSB8fAogCQkJcC0+cHJpbyA+PSB3YWtldXBfcHJpbyB8fAotCQkJcC0+cHJpbyA+PSBjdXJyLT5wcmlvKQorCQkJcC0+cHJpbyA+PSBjdXJyZW50LT5wcmlvKQogCQlyZXR1cm47CiAKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmd2FrZXVwX3RyYWNlLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIAlpZiAodW5saWtlbHkoZGlzYWJsZWQgIT0gMSkpCiAJCWdvdG8gb3V0OwogCkBAIC0yNjQsNyArMjUxLDcgQEAKIAkJZ290byBvdXRfbG9ja2VkOwogCiAJLyogcmVzZXQgdGhlIHRyYWNlICovCi0JX193YWtldXBfcmVzZXQodHIpOworCV9fd2FrZXVwX3Jlc2V0KHdha2V1cF90cmFjZSk7CiAKIAl3YWtldXBfY3B1ID0gdGFza19jcHUocCk7CiAJd2FrZXVwX3ByaW8gPSBwLT5wcmlvOwpAQCAtMjc0LDc0ICsyNjEsMzcgQEAKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCi0JdHItPmRhdGFbd2FrZXVwX2NwdV0tPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOwotCXRyYWNlX2Z1bmN0aW9uKHRyLCB0ci0+ZGF0YVt3YWtldXBfY3B1XSwKLQkJICAgICAgIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncyk7CisJd2FrZXVwX3RyYWNlLT5kYXRhW3dha2V1cF9jcHVdLT5wcmVlbXB0X3RpbWVzdGFtcCA9IGZ0cmFjZV9ub3coY3B1KTsKKwl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIHdha2V1cF90cmFjZS0+ZGF0YVt3YWtldXBfY3B1XSwKKwkJICAgICAgIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOwogCiBvdXRfbG9ja2VkOgogCV9fcmF3X3NwaW5fdW5sb2NrKCZ3YWtldXBfbG9jayk7CiBvdXQ6Ci0JYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwotfQotCi1zdGF0aWMgbm90cmFjZSB2b2lkCi13YWtlX3VwX2NhbGxiYWNrKHZvaWQgKnByb2JlX2RhdGEsIHZvaWQgKmNhbGxfZGF0YSwKLQkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCAqYXJncykKLXsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKipwdHIgPSBwcm9iZV9kYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAqcHRyOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0Jc3RydWN0IHJxICpfX3JxOwotCi0JaWYgKGxpa2VseSghdHJhY2VyX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0KLQkvKiBTa2lwIHBpZCAlZCBzdGF0ZSAlbGQgKi8KLQkodm9pZCl2YV9hcmcoKmFyZ3MsIGludCk7Ci0JKHZvaWQpdmFfYXJnKCphcmdzLCBsb25nKTsKLQkvKiBub3cgZ2V0IHRoZSBtZWF0OiAicnEgJXAgdGFzayAlcCBycS0+Y3VyciAlcCIgKi8KLQlfX3JxID0gdmFfYXJnKCphcmdzLCB0eXBlb2YoX19ycSkpOwotCXRhc2sgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZih0YXNrKSk7Ci0JY3VyciA9IHZhX2FyZygqYXJncywgdHlwZW9mKGN1cnIpKTsKLQotCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUodGFzayk7Ci0JdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyKTsKLQotCXdha2V1cF9jaGVja19zdGFydCh0ciwgdGFzaywgY3Vycik7CisJYXRvbWljX2RlYygmd2FrZXVwX3RyYWNlLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfd2FrZXVwX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXAiLAotCQkJInBpZCAlZCBzdGF0ZSAlbGQgIyMgcnEgJXAgdGFzayAlcCBycS0+Y3VyciAlcCIsCi0JCQl3YWtlX3VwX2NhbGxiYWNrLAotCQkJJndha2V1cF90cmFjZSk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwKHByb2JlX3dha2V1cCk7CiAJaWYgKHJldCkgewotCQlwcl9pbmZvKCJ3YWtldXAgdHJhY2U6IENvdWxkbid0IGFkZCBtYXJrZXIiCisJCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKIAkJCSIgcHJvYmUgdG8ga2VybmVsX3NjaGVkX3dha2V1cFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXBfbmV3IiwKLQkJCSJwaWQgJWQgc3RhdGUgJWxkICMjIHJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiLAotCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCSZ3YWtldXBfdHJhY2UpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfd2FrZXVwKTsKIAlpZiAocmV0KSB7Ci0JCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygid2FrZXVwIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfd2FrZXVwX25ld1xuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlOwogCX0KIAotCXJldCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcigia2VybmVsX3NjaGVkX3NjaGVkdWxlIiwKLQkJInByZXZfcGlkICVkIG5leHRfcGlkICVkIHByZXZfc3RhdGUgJWxkICIKLQkJIiMjIHJxICVwIHByZXYgJXAgbmV4dCAlcCIsCi0JCXNjaGVkX3N3aXRjaF9jYWxsYmFjaywKLQkJJndha2V1cF90cmFjZSk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKHByb2JlX3dha2V1cF9zY2hlZF9zd2l0Y2gpOwogCWlmIChyZXQpIHsKLQkJcHJfaW5mbygic2NoZWQgdHJhY2U6IENvdWxkbid0IGFkZCBtYXJrZXIiCisJCXByX2luZm8oInNjaGVkIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfc2NoZWR1bGVcbiIpOwogCQlnb3RvIGZhaWxfZGVwcm9iZV93YWtlX25ldzsKIAl9CkBAIC0zNjMsMjggKzMxMywxOCBAQAogCiAJcmV0dXJuOwogZmFpbF9kZXByb2JlX3dha2VfbmV3OgotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwX25ldyIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfd2FrZXVwKTsKIGZhaWxfZGVwcm9iZToKLQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cChwcm9iZV93YWtldXApOwogfQogCiBzdGF0aWMgdm9pZCBzdG9wX3dha2V1cF90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjZXJfZW5hYmxlZCA9IDA7CiAJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7Ci0JbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoImtlcm5lbF9zY2hlZF9zY2hlZHVsZSIsCi0JCQkJc2NoZWRfc3dpdGNoX2NhbGxiYWNrLAotCQkJCSZ3YWtldXBfdHJhY2UpOwotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwX25ldyIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKLQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChwcm9iZV93YWtldXBfc2NoZWRfc3dpdGNoKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfd2FrZXVwKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cChwcm9iZV93YWtldXApOwogfQogCiBzdGF0aWMgdm9pZCB3YWtldXBfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKaW5kZXggMDkxMWI3ZS4uMDljZjIzMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKQEAgLTksNjUgKzksMjkgQEAKIAljYXNlIFRSQUNFX0ZOOgogCWNhc2UgVFJBQ0VfQ1RYOgogCWNhc2UgVFJBQ0VfV0FLRToKKwljYXNlIFRSQUNFX0NPTlQ6CiAJY2FzZSBUUkFDRV9TVEFDSzoKKwljYXNlIFRSQUNFX1BSSU5UOgogCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci10cmFjZV90ZXN0X2J1ZmZlcl9jcHUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSkKK3N0YXRpYyBpbnQgdHJhY2VfdGVzdF9idWZmZXJfY3B1KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpCiB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyaWVzOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBpZHggPSAwOwotCWludCBpOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKIAotCUJVR19PTihsaXN0X2VtcHR5KCZkYXRhLT50cmFjZV9wYWdlcykpOwotCXBhZ2UgPSBsaXN0X2VudHJ5KGRhdGEtPnRyYWNlX3BhZ2VzLm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCWVudHJpZXMgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJd2hpbGUgKChldmVudCA9IHJpbmdfYnVmZmVyX2NvbnN1bWUodHItPmJ1ZmZlciwgY3B1LCBOVUxMKSkpIHsKKwkJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAotCWNoZWNrX3BhZ2VzKGRhdGEpOwotCWlmIChoZWFkX3BhZ2UoZGF0YSkgIT0gZW50cmllcykKLQkJZ290byBmYWlsZWQ7Ci0KLQkvKgotCSAqIFRoZSBzdGFydGluZyB0cmFjZSBidWZmZXIgYWx3YXlzIGhhcyB2YWxpZCBlbGVtZW50cywKLQkgKiBpZiBhbnkgZWxlbWVudCBleGlzdHMuCi0JICovCi0JZW50cmllcyA9IGhlYWRfcGFnZShkYXRhKTsKLQotCWZvciAoaSA9IDA7IGkgPCB0ci0+ZW50cmllczsgaSsrKSB7Ci0KLQkJaWYgKGkgPCBkYXRhLT50cmFjZV9pZHggJiYgIXRyYWNlX3ZhbGlkX2VudHJ5KCZlbnRyaWVzW2lkeF0pKSB7CisJCWlmICghdHJhY2VfdmFsaWRfZW50cnkoZW50cnkpKSB7CiAJCQlwcmludGsoS0VSTl9DT05UICIuLiBpbnZhbGlkIGVudHJ5ICVkICIsCi0JCQkJZW50cmllc1tpZHhdLnR5cGUpOworCQkJCWVudHJ5LT50eXBlKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9Ci0KLQkJaWR4Kys7Ci0JCWlmIChpZHggPj0gRU5UUklFU19QRVJfUEFHRSkgewotCQkJcGFnZSA9IHZpcnRfdG9fcGFnZShlbnRyaWVzKTsKLQkJCWlmIChwYWdlLT5scnUubmV4dCA9PSAmZGF0YS0+dHJhY2VfcGFnZXMpIHsKLQkJCQlpZiAoaSAhPSB0ci0+ZW50cmllcyAtIDEpIHsKLQkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gZW50cmllcyBidWZmZXIgbWlzbWF0Y2giKTsKLQkJCQkJZ290byBmYWlsZWQ7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlLT5scnUubmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCQkJZW50cmllcyA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQkJCX0KLQkJCWlkeCA9IDA7Ci0JCX0KIAl9Ci0KLQlwYWdlID0gdmlydF90b19wYWdlKGVudHJpZXMpOwotCWlmIChwYWdlLT5scnUubmV4dCAhPSAmZGF0YS0+dHJhY2VfcGFnZXMpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gdG9vIG1hbnkgZW50cmllcyIpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KIAlyZXR1cm4gMDsKIAogIGZhaWxlZDoKQEAgLTg5LDEzICs1MywxMSBAQAogCS8qIERvbid0IGFsbG93IGZsaXBwaW5nIG9mIG1heCB0cmFjZXMgbm93ICovCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX3Jhd19zcGluX2xvY2soJmZ0cmFjZV9tYXhfbG9jayk7CisKKwljbnQgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKHRyLT5idWZmZXIpOworCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpZiAoIWhlYWRfcGFnZSh0ci0+ZGF0YVtjcHVdKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNudCArPSB0ci0+ZGF0YVtjcHVdLT50cmFjZV9pZHg7Ci0KLQkJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXJfY3B1KHRyLCB0ci0+ZGF0YVtjcHVdKTsKKwkJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXJfY3B1KHRyLCBjcHUpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJfQpAQCAtMTIwLDExICs4MiwxMSBAQAogCQkJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkJCQkgICBpbnQgKCpmdW5jKSh2b2lkKSkKIHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCByZXQ7CiAJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2VfZW5hYmxlZDsKIAlpbnQgc2F2ZV90cmFjZXJfZW5hYmxlZCA9IHRyYWNlcl9lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJY2hhciAqZnVuY19uYW1lOworCWludCByZXQ7CiAKIAkvKiBUaGUgZnRyYWNlIHRlc3QgUEFTU0VEICovCiAJcHJpbnRrKEtFUk5fQ09OVCAiUEFTU0VEXG4iKTsKQEAgLTE1Nyw2ICsxMTksNyBAQAogCS8qIGVuYWJsZSB0cmFjaW5nICovCiAJdHItPmN0cmwgPSAxOwogCXRyYWNlLT5pbml0KHRyKTsKKwogCS8qIFNsZWVwIGZvciBhIDEvMTAgb2YgYSBzZWNvbmQgKi8KIAltc2xlZXAoMTAwKTsKIApAQCAtMjEyLDEwICsxNzUsMTAgQEAKIGludAogdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCByZXQ7CiAJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2VfZW5hYmxlZDsKIAlpbnQgc2F2ZV90cmFjZXJfZW5hYmxlZCA9IHRyYWNlcl9lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJaW50IHJldDsKIAogCS8qIG1ha2Ugc3VyZSBtc2xlZXAgaGFzIGJlZW4gcmVjb3JkZWQgKi8KIAltc2xlZXAoMSk7CkBAIC00MTUsNiArMzc4LDE1IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0lSUVNPRkZfVFJBQ0VSICYmIENPTkZJR19QUkVFTVBUX1RSQUNFUiAqLwogCisjaWZkZWYgQ09ORklHX05PUF9UUkFDRVIKK2ludAordHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9ub3Aoc3RydWN0IHRyYWNlciAqdHJhY2UsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJLyogV2hhdCBjb3VsZCBwb3NzaWJseSBnbyB3cm9uZz8gKi8KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NDSEVEX1RSQUNFUgogc3RhdGljIGludCB0cmFjZV93YWtldXBfdGVzdF90aHJlYWQodm9pZCAqZGF0YSkKIHsKQEAgLTQ4Niw2ICs0NTgsOSBAQAogCiAJd2FrZV91cF9wcm9jZXNzKHApOwogCisJLyogZ2l2ZSBhIGxpdHRsZSB0aW1lIHRvIGxldCB0aGUgdGhyZWFkIHdha2UgdXAgKi8KKwltc2xlZXAoMTAwKTsKKwogCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCiAJdHItPmN0cmwgPSAwOwogCXRyYWNlLT5jdHJsX3VwZGF0ZSh0cik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzVkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlICJ0cmFjZS5oIgorCisjZGVmaW5lIFNUQUNLX1RSQUNFX0VOVFJJRVMgNTAwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWNrX2R1bXBfdHJhY2VbU1RBQ0tfVFJBQ0VfRU5UUklFUysxXSA9CisJIHsgWzAgLi4uIChTVEFDS19UUkFDRV9FTlRSSUVTKV0gPSBVTE9OR19NQVggfTsKK3N0YXRpYyB1bnNpZ25lZCBzdGFja19kdW1wX2luZGV4W1NUQUNLX1RSQUNFX0VOVFJJRVNdOworCitzdGF0aWMgc3RydWN0IHN0YWNrX3RyYWNlIG1heF9zdGFja190cmFjZSA9IHsKKwkubWF4X2VudHJpZXMJCT0gU1RBQ0tfVFJBQ0VfRU5UUklFUywKKwkuZW50cmllcwkJPSBzdGFja19kdW1wX3RyYWNlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3N0YWNrX3NpemU7CitzdGF0aWMgcmF3X3NwaW5sb2NrX3QgbWF4X3N0YWNrX2xvY2sgPQorCShyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3N0YXRpYyBpbnQgc3RhY2tfdHJhY2VfZGlzYWJsZWQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHRyYWNlX2FjdGl2ZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19zdGFjayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGhpc19zaXplLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nICpwLCAqdG9wLCAqc3RhcnQ7CisJaW50IGk7CisKKwl0aGlzX3NpemUgPSAoKHVuc2lnbmVkIGxvbmcpJnRoaXNfc2l6ZSkgJiAoVEhSRUFEX1NJWkUtMSk7CisJdGhpc19zaXplID0gVEhSRUFEX1NJWkUgLSB0aGlzX3NpemU7CisKKwlpZiAodGhpc19zaXplIDw9IG1heF9zdGFja19zaXplKQorCQlyZXR1cm47CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOworCisJLyogYSByYWNlIGNvdWxkIGhhdmUgYWxyZWFkeSB1cGRhdGVkIGl0ICovCisJaWYgKHRoaXNfc2l6ZSA8PSBtYXhfc3RhY2tfc2l6ZSkKKwkJZ290byBvdXQ7CisKKwltYXhfc3RhY2tfc2l6ZSA9IHRoaXNfc2l6ZTsKKworCW1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzCT0gMDsKKwltYXhfc3RhY2tfdHJhY2Uuc2tpcAkJPSAzOworCisJc2F2ZV9zdGFja190cmFjZSgmbWF4X3N0YWNrX3RyYWNlKTsKKworCS8qCisJICogTm93IGZpbmQgd2hlcmUgaW4gdGhlIHN0YWNrIHRoZXNlIGFyZS4KKwkgKi8KKwlpID0gMDsKKwlzdGFydCA9ICZ0aGlzX3NpemU7CisJdG9wID0gKHVuc2lnbmVkIGxvbmcgKikKKwkJKCgodW5zaWduZWQgbG9uZylzdGFydCAmIH4oVEhSRUFEX1NJWkUtMSkpICsgVEhSRUFEX1NJWkUpOworCisJLyoKKwkgKiBMb29wIHRocm91Z2ggYWxsIHRoZSBlbnRyaWVzLiBPbmUgb2YgdGhlIGVudHJpZXMgbWF5CisJICogZm9yIHNvbWUgcmVhc29uIGJlIG1pc3NlZCBvbiB0aGUgc3RhY2ssIHNvIHdlIG1heQorCSAqIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhlbS4gSWYgdGhleSBhcmUgYWxsIHRoZXJlLCB0aGlzCisJICogbG9vcCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UuIFRoaXMgY29kZSBvbmx5IHRha2VzIHBsYWNlCisJICogb24gYSBuZXcgbWF4LCBzbyBpdCBpcyBmYXIgZnJvbSBhIGZhc3QgcGF0aC4KKwkgKi8KKwl3aGlsZSAoaSA8IG1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzKSB7CisKKwkJc3RhY2tfZHVtcF9pbmRleFtpXSA9IHRoaXNfc2l6ZTsKKwkJcCA9IHN0YXJ0OworCisJCWZvciAoOyBwIDwgdG9wICYmIGkgPCBtYXhfc3RhY2tfdHJhY2UubnJfZW50cmllczsgcCsrKSB7CisJCQlpZiAoKnAgPT0gc3RhY2tfZHVtcF90cmFjZVtpXSkgeworCQkJCXRoaXNfc2l6ZSA9IHN0YWNrX2R1bXBfaW5kZXhbaSsrXSA9CisJCQkJCSh0b3AgLSBwKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJCQkvKiBTdGFydCB0aGUgc2VhcmNoIGZyb20gaGVyZSAqLworCQkJCXN0YXJ0ID0gcCArIDE7CisJCQl9CisJCX0KKworCQlpKys7CisJfQorCisgb3V0OgorCV9fcmF3X3NwaW5fdW5sb2NrKCZtYXhfc3RhY2tfbG9jayk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3N0YWNrX3RyYWNlX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCit7CisJaW50IGNwdSwgcmVzY2hlZDsKKworCWlmICh1bmxpa2VseSghZnRyYWNlX2VuYWJsZWQgfHwgc3RhY2tfdHJhY2VfZGlzYWJsZWQpKQorCQlyZXR1cm47CisKKwlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJLyogbm8gYXRvbWljIG5lZWRlZCwgd2Ugb25seSBtb2RpZnkgdGhpcyB2YXJpYWJsZSBieSB0aGlzIGNwdSAqLworCWlmIChwZXJfY3B1KHRyYWNlX2FjdGl2ZSwgY3B1KSsrICE9IDApCisJCWdvdG8gb3V0OworCisJY2hlY2tfc3RhY2soKTsKKworIG91dDoKKwlwZXJfY3B1KHRyYWNlX2FjdGl2ZSwgY3B1KS0tOworCS8qIHByZXZlbnQgcmVjdXJzaW9uIGluIHNjaGVkdWxlICovCisJaWYgKHJlc2NoZWQpCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOworCWVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQoreworCS5mdW5jID0gc3RhY2tfdHJhY2VfY2FsbCwKK307CisKK3N0YXRpYyBzc2l6ZV90CitzdGFja19tYXhfc2l6ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgKnB0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls2NF07CisJaW50IHI7CisKKwlyID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVsZFxuIiwgKnB0cik7CisJaWYgKHIgPiBzaXplb2YoYnVmKSkKKwkJciA9IHNpemVvZihidWYpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgYnVmLCByKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0YWNrX21heF9zaXplX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlsb25nICpwdHIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWwsIGZsYWdzOworCWNoYXIgYnVmWzY0XTsKKwlpbnQgcmV0OworCisJaWYgKGNvdW50ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NvdW50XSA9IDA7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfc3Bpbl9sb2NrKCZtYXhfc3RhY2tfbG9jayk7CisJKnB0ciA9IHZhbDsKKwlfX3Jhd19zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX21heF9zaXplX2ZvcHMgPSB7CisJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQJCT0gc3RhY2tfbWF4X3NpemVfcmVhZCwKKwkud3JpdGUJCT0gc3RhY2tfbWF4X3NpemVfd3JpdGUsCit9OworCitzdGF0aWMgdm9pZCAqCit0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlsb25nIGkgPSAobG9uZyltLT5wcml2YXRlOworCisJKCpwb3MpKys7CisKKwlpKys7CisKKwlpZiAoaSA+PSBtYXhfc3RhY2tfdHJhY2UubnJfZW50cmllcyB8fAorCSAgICBzdGFja19kdW1wX3RyYWNlW2ldID09IFVMT05HX01BWCkKKwkJcmV0dXJuIE5VTEw7CisKKwltLT5wcml2YXRlID0gKHZvaWQgKilpOworCisJcmV0dXJuICZtLT5wcml2YXRlOworfQorCitzdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXZvaWQgKnQgPSAmbS0+cHJpdmF0ZTsKKwlsb2ZmX3QgbCA9IDA7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCV9fcmF3X3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOworCisJZm9yICg7IHQgJiYgbCA8ICpwb3M7IHQgPSB0X25leHQobSwgdCwgJmwpKQorCQk7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKKwlfX3Jhd19zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGludCB0cmFjZV9sb29rdXBfc3RhY2soc3RydWN0IHNlcV9maWxlICptLCBsb25nIGkpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhY2tfZHVtcF90cmFjZVtpXTsKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCisJc3ByaW50X3N5bWJvbChzdHIsIGFkZHIpOworCisJcmV0dXJuIHNlcV9wcmludGYobSwgIiVzXG4iLCBzdHIpOworI2Vsc2UKKwlyZXR1cm4gc2VxX3ByaW50ZihtLCAiJXBcbiIsICh2b2lkKilhZGRyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJbG9uZyBpID0gKihsb25nICopdjsKKwlpbnQgc2l6ZTsKKworCWlmIChpIDwgMCkgeworCQlzZXFfcHJpbnRmKG0sICIgICAgICAgIERlcHRoICAgU2l6ZSAgICAgIExvY2F0aW9uIgorCQkJICAgIiAgICAoJWQgZW50cmllcylcbiIKKwkJCSAgICIgICAgICAgIC0tLS0tICAgLS0tLSAgICAgIC0tLS0tLS0tXG4iLAorCQkJICAgbWF4X3N0YWNrX3RyYWNlLm5yX2VudHJpZXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaSA+PSBtYXhfc3RhY2tfdHJhY2UubnJfZW50cmllcyB8fAorCSAgICBzdGFja19kdW1wX3RyYWNlW2ldID09IFVMT05HX01BWCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaSsxID09IG1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzIHx8CisJICAgIHN0YWNrX2R1bXBfdHJhY2VbaSsxXSA9PSBVTE9OR19NQVgpCisJCXNpemUgPSBzdGFja19kdW1wX2luZGV4W2ldOworCWVsc2UKKwkJc2l6ZSA9IHN0YWNrX2R1bXBfaW5kZXhbaV0gLSBzdGFja19kdW1wX2luZGV4W2krMV07CisKKwlzZXFfcHJpbnRmKG0sICIlM2xkKSAlOGQgICAlNWQgICAiLCBpLCBzdGFja19kdW1wX2luZGV4W2ldLCBzaXplKTsKKworCXRyYWNlX2xvb2t1cF9zdGFjayhtLCBpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX3RyYWNlX3NlcV9vcHMgPSB7CisJLnN0YXJ0CQk9IHRfc3RhcnQsCisJLm5leHQJCT0gdF9uZXh0LAorCS5zdG9wCQk9IHRfc3RvcCwKKwkuc2hvdwkJPSB0X3Nob3csCit9OworCitzdGF0aWMgaW50IHN0YWNrX3RyYWNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZzdGFja190cmFjZV9zZXFfb3BzKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCW0tPnByaXZhdGUgPSAodm9pZCAqKS0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX3RyYWNlX2ZvcHMgPSB7CisJLm9wZW4JCT0gc3RhY2tfdHJhY2Vfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKK307CisKK3N0YXRpYyBfX2luaXQgaW50IHN0YWNrX3RyYWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGFja19tYXhfc2l6ZSIsIDA2NDQsIGRfdHJhY2VyLAorCQkJCSAgICAmbWF4X3N0YWNrX3NpemUsICZzdGFja19tYXhfc2l6ZV9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3N0YWNrX21heF9zaXplJyBlbnRyeVxuIik7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YWNrX3RyYWNlIiwgMDQ0NCwgZF90cmFjZXIsCisJCQkJICAgIE5VTEwsICZzdGFja190cmFjZV9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3N0YWNrX3RyYWNlJyBlbnRyeVxuIik7CisKKwlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHN0YWNrX3RyYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKaW5kZXggZGI1OGZiNi4uOTU4N2QzYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl0ci0+dGltZV9zdGFydCA9IGZ0cmFjZV9ub3codHItPmNwdSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ci0+ZGF0YVtjcHVdKTsKKwkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfc3RhY2tfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjdjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdGhpZXUgRGVzbm95ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0YXJ0X19fdHJhY2Vwb2ludHNbXTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0b3BfX190cmFjZXBvaW50c1tdOworCisvKiBTZXQgdG8gMSB0byBlbmFibGUgdHJhY2Vwb2ludCBkZWJ1ZyBvdXRwdXQgKi8KK3N0YXRpYyBjb25zdCBpbnQgdHJhY2Vwb2ludF9kZWJ1ZzsKKworLyoKKyAqIHRyYWNlcG9pbnRzX211dGV4IG5lc3RzIGluc2lkZSBtb2R1bGVfbXV0ZXguIFRyYWNlcG9pbnRzIG11dGV4IHByb3RlY3RzIHRoZQorICogYnVpbHRpbiBhbmQgbW9kdWxlIHRyYWNlcG9pbnRzIGFuZCB0aGUgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIERFRklORV9NVVRFWCh0cmFjZXBvaW50c19tdXRleCk7CisKKy8qCisgKiBUcmFjZXBvaW50IGhhc2ggdGFibGUsIGNvbnRhaW5pbmcgdGhlIGFjdGl2ZSB0cmFjZXBvaW50cy4KKyAqIFByb3RlY3RlZCBieSB0cmFjZXBvaW50c19tdXRleC4KKyAqLworI2RlZmluZSBUUkFDRVBPSU5UX0hBU0hfQklUUyA2CisjZGVmaW5lIFRSQUNFUE9JTlRfVEFCTEVfU0laRSAoMSA8PCBUUkFDRVBPSU5UX0hBU0hfQklUUykKKworLyoKKyAqIE5vdGUgYWJvdXQgUkNVIDoKKyAqIEl0IGlzIHVzZWQgdG8gdG8gZGVsYXkgdGhlIGZyZWUgb2YgbXVsdGlwbGUgcHJvYmVzIGFycmF5IHVudGlsIGEgcXVpZXNjZW50CisgKiBzdGF0ZSBpcyByZWFjaGVkLgorICogVHJhY2Vwb2ludCBlbnRyaWVzIG1vZGlmaWNhdGlvbnMgYXJlIHByb3RlY3RlZCBieSB0aGUgdHJhY2Vwb2ludHNfbXV0ZXguCisgKi8KK3N0cnVjdCB0cmFjZXBvaW50X2VudHJ5IHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKKwl2b2lkICoqZnVuY3M7CisJaW50IHJlZmNvdW50OwkvKiBOdW1iZXIgb2YgdGltZXMgYXJtZWQuIDAgaWYgZGlzYXJtZWQuICovCisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwl2b2lkICpvbGRwdHI7CisJdW5zaWduZWQgY2hhciByY3VfcGVuZGluZzoxOworCWNoYXIgbmFtZVswXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFjZXBvaW50X3RhYmxlW1RSQUNFUE9JTlRfVEFCTEVfU0laRV07CisKK3N0YXRpYyB2b2lkIGZyZWVfb2xkX2Nsb3N1cmUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihoZWFkLAorCQlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSwgcmN1KTsKKwlrZnJlZShlbnRyeS0+b2xkcHRyKTsKKwkvKiBNYWtlIHN1cmUgd2UgZnJlZSB0aGUgZGF0YSBiZWZvcmUgc2V0dGluZyB0aGUgcGVuZGluZyBmbGFnIHRvIDAgKi8KKwlzbXBfd21iKCk7CisJZW50cnktPnJjdV9wZW5kaW5nID0gMDsKK30KKworc3RhdGljIHZvaWQgdHJhY2Vwb2ludF9lbnRyeV9mcmVlX29sZChzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZW50cnksIHZvaWQgKm9sZCkKK3sKKwlpZiAoIW9sZCkKKwkJcmV0dXJuOworCWVudHJ5LT5vbGRwdHIgPSBvbGQ7CisJZW50cnktPnJjdV9wZW5kaW5nID0gMTsKKwkvKiB3cml0ZSByY3VfcGVuZGluZyBiZWZvcmUgY2FsbGluZyB0aGUgUkNVIGNhbGxiYWNrICovCisJc21wX3dtYigpOworCWNhbGxfcmN1X3NjaGVkKCZlbnRyeS0+cmN1LCBmcmVlX29sZF9jbG9zdXJlKTsKK30KKworc3RhdGljIHZvaWQgZGVidWdfcHJpbnRfcHJvYmVzKHN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeSkKK3sKKwlpbnQgaTsKKworCWlmICghdHJhY2Vwb2ludF9kZWJ1ZykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgZW50cnktPmZ1bmNzW2ldOyBpKyspCisJCXByaW50ayhLRVJOX0RFQlVHICJQcm9iZSAlZCA6ICVwXG4iLCBpLCBlbnRyeS0+ZnVuY3NbaV0pOworfQorCitzdGF0aWMgdm9pZCAqCit0cmFjZXBvaW50X2VudHJ5X2FkZF9wcm9iZShzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZW50cnksIHZvaWQgKnByb2JlKQoreworCWludCBucl9wcm9iZXMgPSAwOworCXZvaWQgKipvbGQsICoqbmV3OworCisJV0FSTl9PTighcHJvYmUpOworCisJZGVidWdfcHJpbnRfcHJvYmVzKGVudHJ5KTsKKwlvbGQgPSBlbnRyeS0+ZnVuY3M7CisJaWYgKG9sZCkgeworCQkvKiAoTiAtPiBOKzEpLCAoTiAhPSAwLCAxKSBwcm9iZXMgKi8KKwkJZm9yIChucl9wcm9iZXMgPSAwOyBvbGRbbnJfcHJvYmVzXTsgbnJfcHJvYmVzKyspCisJCQlpZiAob2xkW25yX3Byb2Jlc10gPT0gcHJvYmUpCisJCQkJcmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7CisJfQorCS8qICsgMiA6IG9uZSBmb3IgbmV3IHByb2JlLCBvbmUgZm9yIE5VTEwgZnVuYyAqLworCW5ldyA9IGt6YWxsb2MoKG5yX3Byb2JlcyArIDIpICogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOworCWlmIChuZXcgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKG9sZCkKKwkJbWVtY3B5KG5ldywgb2xkLCBucl9wcm9iZXMgKiBzaXplb2Yodm9pZCAqKSk7CisJbmV3W25yX3Byb2Jlc10gPSBwcm9iZTsKKwllbnRyeS0+cmVmY291bnQgPSBucl9wcm9iZXMgKyAxOworCWVudHJ5LT5mdW5jcyA9IG5ldzsKKwlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyB2b2lkICoKK3RyYWNlcG9pbnRfZW50cnlfcmVtb3ZlX3Byb2JlKHN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeSwgdm9pZCAqcHJvYmUpCit7CisJaW50IG5yX3Byb2JlcyA9IDAsIG5yX2RlbCA9IDAsIGk7CisJdm9pZCAqKm9sZCwgKipuZXc7CisKKwlvbGQgPSBlbnRyeS0+ZnVuY3M7CisKKwlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCS8qIChOIC0+IE0pLCAoTiA+IDEsIE0gPj0gMCkgcHJvYmVzICovCisJZm9yIChucl9wcm9iZXMgPSAwOyBvbGRbbnJfcHJvYmVzXTsgbnJfcHJvYmVzKyspIHsKKwkJaWYgKCghcHJvYmUgfHwgb2xkW25yX3Byb2Jlc10gPT0gcHJvYmUpKQorCQkJbnJfZGVsKys7CisJfQorCisJaWYgKG5yX3Byb2JlcyAtIG5yX2RlbCA9PSAwKSB7CisJCS8qIE4gLT4gMCwgKE4gPiAxKSAqLworCQllbnRyeS0+ZnVuY3MgPSBOVUxMOworCQllbnRyeS0+cmVmY291bnQgPSAwOworCQlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCQlyZXR1cm4gb2xkOworCX0gZWxzZSB7CisJCWludCBqID0gMDsKKwkJLyogTiAtPiBNLCAoTiA+IDEsIE0gPiAwKSAqLworCQkvKiArIDEgZm9yIE5VTEwgKi8KKwkJbmV3ID0ga3phbGxvYygobnJfcHJvYmVzIC0gbnJfZGVsICsgMSkKKwkJCSogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOworCQlpZiAobmV3ID09IE5VTEwpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJZm9yIChpID0gMDsgb2xkW2ldOyBpKyspCisJCQlpZiAoKHByb2JlICYmIG9sZFtpXSAhPSBwcm9iZSkpCisJCQkJbmV3W2orK10gPSBvbGRbaV07CisJCWVudHJ5LT5yZWZjb3VudCA9IG5yX3Byb2JlcyAtIG5yX2RlbDsKKwkJZW50cnktPmZ1bmNzID0gbmV3OworCX0KKwlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCXJldHVybiBvbGQ7Cit9CisKKy8qCisgKiBHZXQgdHJhY2Vwb2ludCBpZiB0aGUgdHJhY2Vwb2ludCBpcyBwcmVzZW50IGluIHRoZSB0cmFjZXBvaW50IGhhc2ggdGFibGUuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRyYWNlcG9pbnRzX211dGV4IGhlbGQuCisgKiBSZXR1cm5zIE5VTEwgaWYgbm90IHByZXNlbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZ2V0X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZTsKKwl1MzIgaGFzaCA9IGpoYXNoKG5hbWUsIHN0cmxlbihuYW1lKSwgMCk7CisKKwloZWFkID0gJnRyYWNlcG9pbnRfdGFibGVbaGFzaCAmIChUUkFDRVBPSU5UX1RBQkxFX1NJWkUgLSAxKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpCisJCQlyZXR1cm4gZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBBZGQgdGhlIHRyYWNlcG9pbnQgdG8gdGhlIHRyYWNlcG9pbnQgaGFzaCB0YWJsZS4gTXVzdCBiZSBjYWxsZWQgd2l0aAorICogdHJhY2Vwb2ludHNfbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICphZGRfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplOworCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBuYW1lX2xlbi0xLCAwKTsKKworCWhlYWQgPSAmdHJhY2Vwb2ludF90YWJsZVtoYXNoICYgKFRSQUNFUE9JTlRfVEFCTEVfU0laRSAtIDEpXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCBoZWFkLCBobGlzdCkgeworCQlpZiAoIXN0cmNtcChuYW1lLCBlLT5uYW1lKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJInRyYWNlcG9pbnQgJXMgYnVzeVxuIiwgbmFtZSk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsJLyogQWxyZWFkeSB0aGVyZSAqLworCQl9CisJfQorCS8qCisJICogVXNpbmcga21hbGxvYyBoZXJlIHRvIGFsbG9jYXRlIGEgdmFyaWFibGUgbGVuZ3RoIGVsZW1lbnQuIENvdWxkCisJICogY2F1c2Ugc29tZSBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpZiBvdmVydXNlZC4KKwkgKi8KKwllID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRyYWNlcG9pbnRfZW50cnkpICsgbmFtZV9sZW4sIEdGUF9LRVJORUwpOworCWlmICghZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJbWVtY3B5KCZlLT5uYW1lWzBdLCBuYW1lLCBuYW1lX2xlbik7CisJZS0+ZnVuY3MgPSBOVUxMOworCWUtPnJlZmNvdW50ID0gMDsKKwllLT5yY3VfcGVuZGluZyA9IDA7CisJaGxpc3RfYWRkX2hlYWQoJmUtPmhsaXN0LCBoZWFkKTsKKwlyZXR1cm4gZTsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgdHJhY2Vwb2ludCBmcm9tIHRoZSB0cmFjZXBvaW50IGhhc2ggdGFibGUuIE11c3QgYmUgY2FsbGVkIHdpdGgKKyAqIG11dGV4X2xvY2sgaGVsZC4KKyAqLworc3RhdGljIGludCByZW1vdmVfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplOworCWludCBmb3VuZCA9IDA7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBsZW4tMSwgMCk7CisKKwloZWFkID0gJnRyYWNlcG9pbnRfdGFibGVbaGFzaCAmIChUUkFDRVBPSU5UX1RBQkxFX1NJWkUgLSAxKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm91bmQpCisJCXJldHVybiAtRU5PRU5UOworCWlmIChlLT5yZWZjb3VudCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlobGlzdF9kZWwoJmUtPmhsaXN0KTsKKwkvKiBNYWtlIHN1cmUgdGhlIGNhbGxfcmN1X3NjaGVkIGhhcyBiZWVuIGV4ZWN1dGVkICovCisJaWYgKGUtPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCWtmcmVlKGUpOworCXJldHVybiAwOworfQorCisvKgorICogU2V0cyB0aGUgcHJvYmUgY2FsbGJhY2sgY29ycmVzcG9uZGluZyB0byBvbmUgdHJhY2Vwb2ludC4KKyAqLworc3RhdGljIHZvaWQgc2V0X3RyYWNlcG9pbnQoc3RydWN0IHRyYWNlcG9pbnRfZW50cnkgKiplbnRyeSwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqZWxlbSwgaW50IGFjdGl2ZSkKK3sKKwlXQVJOX09OKHN0cmNtcCgoKmVudHJ5KS0+bmFtZSwgZWxlbS0+bmFtZSkgIT0gMCk7CisKKwkvKgorCSAqIHJjdV9hc3NpZ25fcG9pbnRlciBoYXMgYSBzbXBfd21iKCkgd2hpY2ggbWFrZXMgc3VyZSB0aGF0IHRoZSBuZXcKKwkgKiBwcm9iZSBjYWxsYmFja3MgYXJyYXkgaXMgY29uc2lzdGVudCBiZWZvcmUgc2V0dGluZyBhIHBvaW50ZXIgdG8gaXQuCisJICogVGhpcyBhcnJheSBpcyByZWZlcmVuY2VkIGJ5IF9fRE9fVFJBQ0UgZnJvbQorCSAqIGluY2x1ZGUvbGludXgvdHJhY2Vwb2ludHMuaC4gQSBtYXRjaGluZyBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorCSAqIGlzIHVzZWQuCisJICovCisJcmN1X2Fzc2lnbl9wb2ludGVyKGVsZW0tPmZ1bmNzLCAoKmVudHJ5KS0+ZnVuY3MpOworCWVsZW0tPnN0YXRlID0gYWN0aXZlOworfQorCisvKgorICogRGlzYWJsZSBhIHRyYWNlcG9pbnQgYW5kIGl0cyBwcm9iZSBjYWxsYmFjay4KKyAqIE5vdGU6IG9ubHkgd2FpdGluZyBhbiBSQ1UgcGVyaW9kIGFmdGVyIHNldHRpbmcgZWxlbS0+Y2FsbCB0byB0aGUgZW1wdHkKKyAqIGZ1bmN0aW9uIGluc3VyZXMgdGhhdCB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgaXMgbm90IHVzZWQgYW55bW9yZS4gVGhpcyBpbnN1cmVkCisgKiBieSBwcmVlbXB0X2Rpc2FibGUgYXJvdW5kIHRoZSBjYWxsIHNpdGUuCisgKi8KK3N0YXRpYyB2b2lkIGRpc2FibGVfdHJhY2Vwb2ludChzdHJ1Y3QgdHJhY2Vwb2ludCAqZWxlbSkKK3sKKwllbGVtLT5zdGF0ZSA9IDA7Cit9CisKKy8qKgorICogdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UgLSBVcGRhdGUgYSBwcm9iZSByYW5nZQorICogQGJlZ2luOiBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlCisgKiBAZW5kOiBlbmQgb2YgdGhlIHJhbmdlCisgKgorICogVXBkYXRlcyB0aGUgcHJvYmUgY2FsbGJhY2sgY29ycmVzcG9uZGluZyB0byBhIHJhbmdlIG9mIHRyYWNlcG9pbnRzLgorICovCit2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKQoreworCXN0cnVjdCB0cmFjZXBvaW50ICppdGVyOworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICptYXJrX2VudHJ5OworCisJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCWZvciAoaXRlciA9IGJlZ2luOyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKKwkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KGl0ZXItPm5hbWUpOworCQlpZiAobWFya19lbnRyeSkgeworCQkJc2V0X3RyYWNlcG9pbnQoJm1hcmtfZW50cnksIGl0ZXIsCisJCQkJCSEhbWFya19lbnRyeS0+cmVmY291bnQpOworCQl9IGVsc2UgeworCQkJZGlzYWJsZV90cmFjZXBvaW50KGl0ZXIpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworfQorCisvKgorICogVXBkYXRlIHByb2JlcywgcmVtb3ZpbmcgdGhlIGZhdWx0eSBwcm9iZXMuCisgKi8KK3N0YXRpYyB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2Jlcyh2b2lkKQoreworCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCisJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UoX19zdGFydF9fX3RyYWNlcG9pbnRzLAorCQlfX3N0b3BfX190cmFjZXBvaW50cyk7CisJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KKwltb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKCk7Cit9CisKKy8qKgorICogdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3RlciAtICBDb25uZWN0IGEgcHJvYmUgdG8gYSB0cmFjZXBvaW50CisgKiBAbmFtZTogdHJhY2Vwb2ludCBuYW1lCisgKiBAcHJvYmU6IHByb2JlIGhhbmRsZXIKKyAqCisgKiBSZXR1cm5zIDAgaWYgb2ssIGVycm9yIHZhbHVlIG9uIGVycm9yLgorICogVGhlIHByb2JlIGFkZHJlc3MgbXVzdCBhdCBsZWFzdCBiZSBhbGlnbmVkIG9uIHRoZSBhcmNoaXRlY3R1cmUgcG9pbnRlciBzaXplLgorICovCitpbnQgdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwcm9iZSkKK3sKKwlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZW50cnk7CisJaW50IHJldCA9IDA7CisJdm9pZCAqb2xkOworCisJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCWVudHJ5ID0gZ2V0X3RyYWNlcG9pbnQobmFtZSk7CisJaWYgKCFlbnRyeSkgeworCQllbnRyeSA9IGFkZF90cmFjZXBvaW50KG5hbWUpOworCQlpZiAoSVNfRVJSKGVudHJ5KSkgeworCQkJcmV0ID0gUFRSX0VSUihlbnRyeSk7CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKwkvKgorCSAqIElmIHdlIGRldGVjdCB0aGF0IGEgY2FsbF9yY3Vfc2NoZWQgaXMgcGVuZGluZyBmb3IgdGhpcyB0cmFjZXBvaW50LAorCSAqIG1ha2Ugc3VyZSBpdCdzIGV4ZWN1dGVkIG5vdy4KKwkgKi8KKwlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCW9sZCA9IHRyYWNlcG9pbnRfZW50cnlfYWRkX3Byb2JlKGVudHJ5LCBwcm9iZSk7CisJaWYgKElTX0VSUihvbGQpKSB7CisJCXJldCA9IFBUUl9FUlIob2xkKTsKKwkJZ290byBlbmQ7CisJfQorCW11dGV4X3VubG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlcygpOwkJLyogbWF5IHVwZGF0ZSBlbnRyeSAqLworCW11dGV4X2xvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKKwllbnRyeSA9IGdldF90cmFjZXBvaW50KG5hbWUpOworCVdBUk5fT04oIWVudHJ5KTsKKwlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCXRyYWNlcG9pbnRfZW50cnlfZnJlZV9vbGQoZW50cnksIG9sZCk7CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXIpOworCisvKioKKyAqIHRyYWNlcG9pbnRfcHJvYmVfdW5yZWdpc3RlciAtICBEaXNjb25uZWN0IGEgcHJvYmUgZnJvbSBhIHRyYWNlcG9pbnQKKyAqIEBuYW1lOiB0cmFjZXBvaW50IG5hbWUKKyAqIEBwcm9iZTogcHJvYmUgZnVuY3Rpb24gcG9pbnRlcgorICoKKyAqIFdlIGRvIG5vdCBuZWVkIHRvIGNhbGwgYSBzeW5jaHJvbml6ZV9zY2hlZCB0byBtYWtlIHN1cmUgdGhlIHByb2JlcyBoYXZlCisgKiBmaW5pc2hlZCBydW5uaW5nIGJlZm9yZSBkb2luZyBhIG1vZHVsZSB1bmxvYWQsIGJlY2F1c2UgdGhlIG1vZHVsZSB1bmxvYWQKKyAqIGl0c2VsZiB1c2VzIHN0b3BfbWFjaGluZSgpLCB3aGljaCBpbnN1cmVzIHRoYXQgZXZlcnkgcHJlZW1wdCBkaXNhYmxlZCBzZWN0aW9uCisgKiBoYXZlIGZpbmlzaGVkLgorICovCitpbnQgdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnByb2JlKQoreworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeTsKKwl2b2lkICpvbGQ7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwltdXRleF9sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CisJZW50cnkgPSBnZXRfdHJhY2Vwb2ludChuYW1lKTsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGVuZDsKKwlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCW9sZCA9IHRyYWNlcG9pbnRfZW50cnlfcmVtb3ZlX3Byb2JlKGVudHJ5LCBwcm9iZSk7CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CisJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVzKCk7CQkvKiBtYXkgdXBkYXRlIGVudHJ5ICovCisJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCWVudHJ5ID0gZ2V0X3RyYWNlcG9pbnQobmFtZSk7CisJaWYgKCFlbnRyeSkKKwkJZ290byBlbmQ7CisJaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKKwkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKKwl0cmFjZXBvaW50X2VudHJ5X2ZyZWVfb2xkKGVudHJ5LCBvbGQpOworCXJlbW92ZV90cmFjZXBvaW50KG5hbWUpOwkvKiBJZ25vcmUgYnVzeSBlcnJvciBtZXNzYWdlICovCisJcmV0ID0gMDsKK2VuZDoKKwltdXRleF91bmxvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKTsKKworLyoqCisgKiB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlIC0gR2V0IGEgbmV4dCB0cmFjZXBvaW50IGl0ZXJhdG9yIGdpdmVuIGEgcmFuZ2UuCisgKiBAdHJhY2Vwb2ludDogY3VycmVudCB0cmFjZXBvaW50cyAoaW4pLCBuZXh0IHRyYWNlcG9pbnQgKG91dCkKKyAqIEBiZWdpbjogYmVnaW5uaW5nIG9mIHRoZSByYW5nZQorICogQGVuZDogZW5kIG9mIHRoZSByYW5nZQorICoKKyAqIFJldHVybnMgd2hldGhlciBhIG5leHQgdHJhY2Vwb2ludCBoYXMgYmVlbiBmb3VuZCAoMSkgb3Igbm90ICgwKS4KKyAqIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCB0cmFjZXBvaW50IGluIHRoZSByYW5nZSBpZiB0aGUgaW5wdXQgdHJhY2Vwb2ludCBpcworICogTlVMTC4KKyAqLworaW50IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3sKKwlpZiAoISp0cmFjZXBvaW50ICYmIGJlZ2luICE9IGVuZCkgeworCQkqdHJhY2Vwb2ludCA9IGJlZ2luOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCp0cmFjZXBvaW50ID49IGJlZ2luICYmICp0cmFjZXBvaW50IDwgZW5kKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2UpOworCitzdGF0aWMgdm9pZCB0cmFjZXBvaW50X2dldF9pdGVyKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpCit7CisJaW50IGZvdW5kID0gMDsKKworCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCisJaWYgKCFpdGVyLT5tb2R1bGUpIHsKKwkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAorCQkJCV9fc3RhcnRfX190cmFjZXBvaW50cywgX19zdG9wX19fdHJhY2Vwb2ludHMpOworCQlpZiAoZm91bmQpCisJCQlnb3RvIGVuZDsKKwl9CisJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KKwlmb3VuZCA9IG1vZHVsZV9nZXRfaXRlcl90cmFjZXBvaW50cyhpdGVyKTsKK2VuZDoKKwlpZiAoIWZvdW5kKQorCQl0cmFjZXBvaW50X2l0ZXJfcmVzZXQoaXRlcik7Cit9CisKK3ZvaWQgdHJhY2Vwb2ludF9pdGVyX3N0YXJ0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpCit7CisJdHJhY2Vwb2ludF9nZXRfaXRlcihpdGVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfaXRlcl9zdGFydCk7CisKK3ZvaWQgdHJhY2Vwb2ludF9pdGVyX25leHQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKKwlpdGVyLT50cmFjZXBvaW50Kys7CisJLyoKKwkgKiBpdGVyLT50cmFjZXBvaW50IG1heSBiZSBpbnZhbGlkIGJlY2F1c2Ugd2UgYmxpbmRseSBpbmNyZW1lbnRlZCBpdC4KKwkgKiBNYWtlIHN1cmUgaXQgaXMgdmFsaWQgYnkgbWFyc2hhbGxpbmcgb24gdGhlIHRyYWNlcG9pbnRzLCBnZXR0aW5nIHRoZQorCSAqIHRyYWNlcG9pbnRzIGZyb20gZm9sbG93aW5nIG1vZHVsZXMgaWYgbmVjZXNzYXJ5LgorCSAqLworCXRyYWNlcG9pbnRfZ2V0X2l0ZXIoaXRlcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZXBvaW50X2l0ZXJfbmV4dCk7CisKK3ZvaWQgdHJhY2Vwb2ludF9pdGVyX3N0b3Aoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfaXRlcl9zdG9wKTsKKwordm9pZCB0cmFjZXBvaW50X2l0ZXJfcmVzZXQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKKwlpdGVyLT5tb2R1bGUgPSBOVUxMOworCWl0ZXItPnRyYWNlcG9pbnQgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vwb2ludF9pdGVyX3Jlc2V0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA3MTRhZmFkLi5mOTI4ZjJhIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC02Miw2ICs2Miw3IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgc2luZ2xldGhyZWFkOwogCWludCBmcmVlemVhYmxlOwkJLyogRnJlZXplIHRocmVhZHMgZHVyaW5nIHN1c3BlbmQgKi8KKwlpbnQgcnQ7CiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIAlzdHJ1Y3QgbG9ja2RlcF9tYXAgbG9ja2RlcF9tYXA7CiAjZW5kaWYKQEAgLTc2Niw2ICs3NjcsNyBAQAogCiBzdGF0aWMgaW50IGNyZWF0ZV93b3JrcXVldWVfdGhyZWFkKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxLCBpbnQgY3B1KQogeworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1JUX1BSSU8tMSB9OwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSA9IGN3cS0+d3E7CiAJY29uc3QgY2hhciAqZm10ID0gaXNfc2luZ2xlX3RocmVhZGVkKHdxKSA/ICIlcyIgOiAiJXMvJWQiOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTc4MSw3ICs3ODMsOCBAQAogCSAqLwogCWlmIChJU19FUlIocCkpCiAJCXJldHVybiBQVFJfRVJSKHApOwotCisJaWYgKGN3cS0+d3EtPnJ0KQorCQlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayhwLCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwogCWN3cS0+dGhyZWFkID0gcDsKIAogCXJldHVybiAwOwpAQCAtODAxLDYgKzgwNCw3IEBACiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX19jcmVhdGVfd29ya3F1ZXVlX2tleShjb25zdCBjaGFyICpuYW1lLAogCQkJCQkJaW50IHNpbmdsZXRocmVhZCwKIAkJCQkJCWludCBmcmVlemVhYmxlLAorCQkJCQkJaW50IHJ0LAogCQkJCQkJc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXksCiAJCQkJCQljb25zdCBjaGFyICpsb2NrX25hbWUpCiB7CkBAIC04MjIsNiArODI2LDcgQEAKIAlsb2NrZGVwX2luaXRfbWFwKCZ3cS0+bG9ja2RlcF9tYXAsIGxvY2tfbmFtZSwga2V5LCAwKTsKIAl3cS0+c2luZ2xldGhyZWFkID0gc2luZ2xldGhyZWFkOwogCXdxLT5mcmVlemVhYmxlID0gZnJlZXplYWJsZTsKKwl3cS0+cnQgPSBydDsKIAlJTklUX0xJU1RfSEVBRCgmd3EtPmxpc3QpOwogCiAJaWYgKHNpbmdsZXRocmVhZCkgewpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAzMWQ3ODRkLi5iMGYyMzllIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNjUyLDYgKzY1MiwxMSBAQAogCWRlcGVuZHMgb24gQkxPQ0sKIAlkZWZhdWx0IG4KIAloZWxwCisJICBCSUcgRkFUIFdBUk5JTkc6IEVOQUJMSU5HIFRISVMgT1BUSU9OIE1JR0hUIEJSRUFLIEJPT1RJTkcgT04KKwkgIFNPTUUgRElTVFJJQlVUSU9OUy4gIERPIE5PVCBFTkFCTEUgVEhJUyBVTkxFU1MgWU9VIEtOT1cgV0hBVAorCSAgWU9VIEFSRSBET0lORy4gIERpc3Ryb3MsIHBsZWFzZSBlbmFibGUgdGhpcyBhbmQgZml4IHdoYXRldmVyCisJICBpcyBicm9rZW4uCisKIAkgIENvbnZlbnRpb25hbGx5LCBibG9jayBkZXZpY2UgbnVtYmVycyBhcmUgYWxsb2NhdGVkIGZyb20KIAkgIHByZWRldGVybWluZWQgY29udGlndW91cyBhcmVhLiAgSG93ZXZlciwgZXh0ZW5kZWQgYmxvY2sgYXJlYQogCSAgbWF5IGludHJvZHVjZSBub24tY29udGlndW91cyBibG9jayBkZXZpY2UgbnVtYmVycy4gIFRoaXMKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCAwNmZiNTdjLi4xMzM4NDY5IDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC0zMTYsMTcgKzMxNiw2IEBACiBFWFBPUlRfU1lNQk9MKGJpdG1hcF9zY25wcmludGYpOwogCiAvKioKLSAqIGJpdG1hcF9zY25wcmludGZfbGVuIC0gcmV0dXJuIGJ1ZmZlciBsZW5ndGggbmVlZGVkIHRvIGNvbnZlcnQKLSAqIGJpdG1hcCB0byBhbiBBU0NJSSBoZXggc3RyaW5nCi0gKiBAbnJfYml0czogbnVtYmVyIG9mIGJpdHMgdG8gYmUgY29udmVydGVkCi0gKi8KLWludCBiaXRtYXBfc2NucHJpbnRmX2xlbih1bnNpZ25lZCBpbnQgbnJfYml0cykKLXsKLQl1bnNpZ25lZCBpbnQgbnJfbmliYmxlcyA9IEFMSUdOKG5yX2JpdHMsIDQpIC8gNDsKLQlyZXR1cm4gbnJfbmliYmxlcyArIEFMSUdOKG5yX25pYmJsZXMsIENIVU5LU1ogLyA0KSAvIChDSFVOS1NaIC8gNCkgLSAxOwotfQotCi0vKioKICAqIF9fYml0bWFwX3BhcnNlIC0gY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nIGludG8gYSBiaXRtYXAuCiAgKiBAYnVmOiBwb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIHN0cmluZy4KICAqIEBidWZsZW46IGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAgSWYgc3RyaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGlzCkBAIC0xMDA3LDMgKzk5NiwyNSBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChiaXRtYXBfYWxsb2NhdGVfcmVnaW9uKTsKKworLyoqCisgKiBiaXRtYXBfY29weV9sZSAtIGNvcHkgYSBiaXRtYXAsIHB1dHRpbmcgdGhlIGJpdHMgaW50byBsaXR0bGUtZW5kaWFuIG9yZGVyLgorICogQGRzdDogICBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIEBzcmM6ICAgYml0bWFwIHRvIGNvcHkKKyAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcAorICoKKyAqIFJlcXVpcmUgbmJpdHMgJSBCSVRTX1BFUl9MT05HID09IDAuCisgKi8KK3ZvaWQgYml0bWFwX2NvcHlfbGUodm9pZCAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cykKK3sKKwl1bnNpZ25lZCBsb25nICpkID0gZHN0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5iaXRzL0JJVFNfUEVSX0xPTkc7IGkrKykgeworCQlpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKKwkJCWRbaV0gPSBjcHVfdG9fbGU2NChzcmNbaV0pOworCQllbHNlCisJCQlkW2ldID0gY3B1X3RvX2xlMzIoc3JjW2ldKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGJpdG1hcF9jb3B5X2xlKTsKZGlmZiAtLWdpdCBhL2xpYi9zdHJpbmdfaGVscGVycy5jIGIvbGliL3N0cmluZ19oZWxwZXJzLmMKaW5kZXggODM0NzkyNS4uYWI0MzFkNCAxMDA2NDQKLS0tIGEvbGliL3N0cmluZ19oZWxwZXJzLmMKKysrIGIvbGliL3N0cmluZ19oZWxwZXJzLmMKQEAgLTIzLDcgKzIzLDcgQEAKIGludCBzdHJpbmdfZ2V0X3NpemUodTY0IHNpemUsIGNvbnN0IGVudW0gc3RyaW5nX3NpemVfdW5pdHMgdW5pdHMsCiAJCSAgICBjaGFyICpidWYsIGludCBsZW4pCiB7Ci0JY29uc3QgY2hhciAqdW5pdHNfMTBbXSA9IHsgIkIiLCAiS0IiLCAiTUIiLCAiR0IiLCAiVEIiLCAiUEIiLAorCWNvbnN0IGNoYXIgKnVuaXRzXzEwW10gPSB7ICJCIiwgImtCIiwgIk1CIiwgIkdCIiwgIlRCIiwgIlBCIiwKIAkJCQkgICAiRUIiLCAiWkIiLCAiWUIiLCBOVUxMfTsKIAljb25zdCBjaGFyICp1bml0c18yW10gPSB7IkIiLCAiS2lCIiwgIk1pQiIsICJHaUIiLCAiVGlCIiwgIlBpQiIsCiAJCQkJICJFaUIiLCAiWmlCIiwgIllpQiIsIE5VTEwgfTsKQEAgLTMxLDcgKzMxLDcgQEAKIAkJW1NUUklOR19VTklUU18xMF0gPSAgdW5pdHNfMTAsCiAJCVtTVFJJTkdfVU5JVFNfMl0gPSB1bml0c18yLAogCX07Ci0JY29uc3QgaW50IGRpdmlzb3JbXSA9IHsKKwljb25zdCB1bnNpZ25lZCBpbnQgZGl2aXNvcltdID0gewogCQlbU1RSSU5HX1VOSVRTXzEwXSA9IDEwMDAsCiAJCVtTVFJJTkdfVU5JVFNfMl0gPSAxMDI0LAogCX07CkBAIC00MCwyMyArNDAsMjcgQEAKIAljaGFyIHRtcFs4XTsKIAogCXRtcFswXSA9ICdcMCc7CisJaSA9IDA7CisJaWYgKHNpemUgPj0gZGl2aXNvclt1bml0c10pIHsKKwkJd2hpbGUgKHNpemUgPj0gZGl2aXNvclt1bml0c10gJiYgdW5pdHNfc3RyW3VuaXRzXVtpXSkgeworCQkJcmVtYWluZGVyID0gZG9fZGl2KHNpemUsIGRpdmlzb3JbdW5pdHNdKTsKKwkJCWkrKzsKKwkJfQogCi0JZm9yIChpID0gMDsgc2l6ZSA+IGRpdmlzb3JbdW5pdHNdICYmIHVuaXRzX3N0clt1bml0c11baV07IGkrKykKLQkJcmVtYWluZGVyID0gZG9fZGl2KHNpemUsIGRpdmlzb3JbdW5pdHNdKTsKKwkJc2ZfY2FwID0gc2l6ZTsKKwkJZm9yIChqID0gMDsgc2ZfY2FwKjEwIDwgMTAwMDsgaisrKQorCQkJc2ZfY2FwICo9IDEwOwogCi0Jc2ZfY2FwID0gc2l6ZTsKLQlmb3IgKGogPSAwOyBzZl9jYXAqMTAgPCAxMDAwOyBqKyspCi0JCXNmX2NhcCAqPSAxMDsKLQotCWlmIChqKSB7Ci0JCXJlbWFpbmRlciAqPSAxMDAwOwotCQlkb19kaXYocmVtYWluZGVyLCBkaXZpc29yW3VuaXRzXSk7Ci0JCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIuJTAzbGxkIiwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlbWFpbmRlcik7Ci0JCXRtcFtqKzFdID0gJ1wwJzsKKwkJaWYgKGopIHsKKwkJCXJlbWFpbmRlciAqPSAxMDAwOworCQkJZG9fZGl2KHJlbWFpbmRlciwgZGl2aXNvclt1bml0c10pOworCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIi4lMDNsbGQiLAorCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlbWFpbmRlcik7CisJCQl0bXBbaisxXSA9ICdcMCc7CisJCX0KIAl9CiAKLQlzbnByaW50ZihidWYsIGxlbiwgIiVsbGQlcyVzIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplLAorCXNucHJpbnRmKGJ1ZiwgbGVuLCAiJWxsZCVzICVzIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplLAogCQkgdG1wLCB1bml0c19zdHJbdW5pdHNdW2ldKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBjY2VlY2I2Li5hMDEzYmJjIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGZvciBQQUdFX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTU1MCwxOCArNTUxLDUxIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGNoYXIgKnJlc291cmNlX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgc3RydWN0IHJlc291cmNlICpyZXMsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQoreworI2lmbmRlZiBJT19SU1JDX1BSSU5US19TSVpFCisjZGVmaW5lIElPX1JTUkNfUFJJTlRLX1NJWkUJNAorI2VuZGlmCisKKyNpZm5kZWYgTUVNX1JTUkNfUFJJTlRLX1NJWkUKKyNkZWZpbmUgTUVNX1JTUkNfUFJJTlRLX1NJWkUJOAorI2VuZGlmCisKKwkvKiByb29tIGZvciB0aGUgYWN0dWFsIG51bWJlcnMsIHRoZSB0d28gIjB4IiwgLSwgWywgXSBhbmQgdGhlIGZpbmFsIHplcm8gKi8KKwljaGFyIHN5bVs0KnNpemVvZihyZXNvdXJjZV9zaXplX3QpICsgOF07CisJY2hhciAqcCA9IHN5bSwgKnBlbmQgPSBzeW0gKyBzaXplb2Yoc3ltKTsKKwlpbnQgc2l6ZSA9IC0xOworCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQlzaXplID0gSU9fUlNSQ19QUklOVEtfU0laRTsKKwllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCXNpemUgPSBNRU1fUlNSQ19QUklOVEtfU0laRTsKKworCSpwKysgPSAnWyc7CisJcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPnN0YXJ0LCAxNiwgc2l6ZSwgLTEsIFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQpOworCSpwKysgPSAnLSc7CisJcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPmVuZCwgMTYsIHNpemUsIC0xLCBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEKTsKKwkqcCsrID0gJ10nOworCSpwID0gMDsKKworCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIHN5bSwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworfQorCiAvKgogICogU2hvdyBhICclcCcgdGhpbmcuICBBIGtlcm5lbCBleHRlbnNpb24gaXMgdGhhdCB0aGUgJyVwJyBpcyBmb2xsb3dlZAogICogYnkgYW4gZXh0cmEgc2V0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHRoYXQgYXJlIGV4dGVuZGVkIGZvcm1hdAogICogc3BlY2lmaWVycy4KICAqCi0gKiBSaWdodCBub3cgd2UganVzdCBoYW5kbGUgJ0YnIChmb3Igc3ltYm9saWMgRnVuY3Rpb24gZGVzY3JpcHRvciBwb2ludGVycykKLSAqIGFuZCAnUycgKGZvciBTeW1ib2xpYyBkaXJlY3QgcG9pbnRlcnMpLCBidXQgdGhpcyBjYW4gZWFzaWx5IGJlCi0gKiBleHRlbmRlZCBpbiB0aGUgZnV0dXJlIChuZXR3b3JrIGFkZHJlc3MgdHlwZXMgZXRjKS4KKyAqIFJpZ2h0IG5vdyB3ZSBoYW5kbGU6CiAgKgotICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0IGZ1bmN0aW9uCi0gKiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEgcG9pbnRlciB0aGUKLSAqIHJlYWwgYWRkcmVzcy4gCisgKiAtICdGJyBGb3Igc3ltYm9saWMgZnVuY3Rpb24gZGVzY3JpcHRvciBwb2ludGVycworICogLSAnUycgRm9yIHN5bWJvbGljIGRpcmVjdCBwb2ludGVycworICogLSAnUicgRm9yIGEgc3RydWN0IHJlc291cmNlIHBvaW50ZXIsIGl0IHByaW50cyB0aGUgcmFuZ2Ugb2YKKyAqICAgICAgIGFkZHJlc3NlcyAobm90IHRoZSBuYW1lIG5vciB0aGUgZmxhZ3MpCisgKgorICogTm90ZTogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0CisgKiBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEKKyAqIHBvaW50ZXIgdG8gdGhlIHJlYWwgYWRkcmVzcy4KICAqLwogc3RhdGljIGNoYXIgKnBvaW50ZXIoY29uc3QgY2hhciAqZm10LCBjaGFyICpidWYsIGNoYXIgKmVuZCwgdm9pZCAqcHRyLCBpbnQgZmllbGRfd2lkdGgsIGludCBwcmVjaXNpb24sIGludCBmbGFncykKIHsKQEAgLTU3MSw2ICs2MDUsOCBAQAogCQkvKiBGYWxsdGhyb3VnaCAqLwogCWNhc2UgJ1MnOgogCQlyZXR1cm4gc3ltYm9sX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJY2FzZSAnUic6CisJCXJldHVybiByZXNvdXJjZV9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOwogCX0KIAlmbGFncyB8PSBTTUFMTDsKIAlpZiAoZmllbGRfd2lkdGggPT0gLTEpIHsKQEAgLTU5MCw2ICs2MjYsNyBAQAogICogVGhpcyBmdW5jdGlvbiBmb2xsb3dzIEM5OSB2c25wcmludGYsIGJ1dCBoYXMgc29tZSBleHRlbnNpb25zOgogICogJXBTIG91dHB1dCB0aGUgbmFtZSBvZiBhIHRleHQgc3ltYm9sCiAgKiAlcEYgb3V0cHV0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gcG9pbnRlcgorICogJXBSIG91dHB1dCB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHN0cnVjdCByZXNvdXJjZQogICoKICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCiAgKiBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggMWE1MDFhNC4uNWI1NzkwZiAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0yMDksNSArMjA5LDE2IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIUFSQ0hfTk9fVklSVF9UT19CVVMKIAorY29uZmlnIFVORVZJQ1RBQkxFX0xSVQorCWJvb2wgIkFkZCBMUlUgbGlzdCB0byB0cmFjayBub24tZXZpY3RhYmxlIHBhZ2VzIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gTU1VCisJaGVscAorCSAgS2VlcHMgdW5ldmljdGFibGUgcGFnZXMgb2ZmIG9mIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIHBhZ2VvdXQKKwkgIGxpc3RzLCBzbyBrc3dhcGQgd2lsbCBub3Qgd2FzdGUgQ1BVIHRpbWUgb3IgaGF2ZSBpdHMgYmFsYW5jaW5nCisJICBhbGdvcml0aG1zIHRocm93biBvZmYgYnkgc2Nhbm5pbmcgdGhlc2UgcGFnZXMuICBTZWxlY3RpbmcgdGhpcworCSAgd2lsbCB1c2Ugb25lIHBhZ2UgZmxhZyBhbmQgaW5jcmVhc2UgdGhlIGNvZGUgc2l6ZSBhIGxpdHRsZSwKKwkgIHNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKIGNvbmZpZyBNTVVfTk9USUZJRVIKIAlib29sCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGRhNGNjZjAuLmMwNmI0NWEgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0zMyw1ICszMyw0IEBACiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm8KIG9iai0kKENPTkZJR19TTVApICs9IGFsbG9jcGVyY3B1Lm8KIG9iai0kKENPTkZJR19RVUlDS0xJU1QpICs9IHF1aWNrbGlzdC5vCi1vYmotJChDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUikgKz0gbWVtY29udHJvbC5vCi0KK29iai0kKENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSKSArPSBtZW1jb250cm9sLm8gcGFnZV9jZ3JvdXAubwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDkwM2JmMzEuLmFiODU1MzYgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+IC8qIGZvciBCVUdfT04oIWluX2F0b21pYygpKSBvbmx5ICovCiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPiAvKiBmb3IgcGFnZV9pc19maWxlX2NhY2hlKCkgKi8KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKgpAQCAtMTE1LDEyICsxMTYsMTIgQEAKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAKLQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAJcmFkaXhfdHJlZV9kZWxldGUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgcGFnZS0+aW5kZXgpOwogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwogCW1hcHBpbmctPm5ycGFnZXMtLTsKIAlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9QQUdFUyk7CiAJQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKKwltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAKIAkvKgogCSAqIFNvbWUgZmlsZXN5c3RlbXMgc2VlbSB0byByZS1kaXJ0eSB0aGUgcGFnZSBldmVuIGFmdGVyCkBAIC00OTIsOSArNDkzLDI0IEBACiBpbnQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlwZ29mZl90IG9mZnNldCwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JaW50IHJldCA9IGFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIG1hcHBpbmcsIG9mZnNldCwgZ2ZwX21hc2spOwotCWlmIChyZXQgPT0gMCkKLQkJbHJ1X2NhY2hlX2FkZChwYWdlKTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBTcGxpY2VfcmVhZCBhbmQgcmVhZGFoZWFkIGFkZCBzaG1lbS90bXBmcyBwYWdlcyBpbnRvIHRoZSBwYWdlIGNhY2hlCisJICogYmVmb3JlIHNobWVtX3JlYWRwYWdlIGhhcyBhIGNoYW5jZSB0byBtYXJrIHRoZW0gYXMgU3dhcEJhY2tlZDogdGhleQorCSAqIG5lZWQgdG8gZ28gb24gdGhlIGFjdGl2ZV9hbm9uIGxydSBiZWxvdywgYW5kIG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlCisJICogKGNhbGxlZCBpbiBhZGRfdG9fcGFnZV9jYWNoZSkgbmVlZHMgdG8ga25vdyB3aGVyZSB0aGV5J3JlIGdvaW5nIHRvby4KKwkgKi8KKwlpZiAobWFwcGluZ19jYXBfc3dhcF9iYWNrZWQobWFwcGluZykpCisJCVNldFBhZ2VTd2FwQmFja2VkKHBhZ2UpOworCisJcmV0ID0gYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgb2Zmc2V0LCBnZnBfbWFzayk7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCisJCQlscnVfY2FjaGVfYWRkX2ZpbGUocGFnZSk7CisJCWVsc2UKKwkJCWxydV9jYWNoZV9hZGRfYWN0aXZlX2Fub24ocGFnZSk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU1NywxNyArNTczLDE0IEBACiAgKiBtZWNoYW5hbmlzbSBiZXR3ZWVuIFBhZ2VMb2NrZWQgcGFnZXMgYW5kIFBhZ2VXcml0ZWJhY2sgcGFnZXMgaXMgc2hhcmVkLgogICogQnV0IHRoYXQncyBPSyAtIHNsZWVwZXJzIGluIHdhaXRfb25fcGFnZV93cml0ZWJhY2soKSBqdXN0IGdvIGJhY2sgdG8gc2xlZXAuCiAgKgotICogVGhlIGZpcnN0IG1iIGlzIG5lY2Vzc2FyeSB0byBzYWZlbHkgY2xvc2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gb3BlbmVkIGJ5IHRoZQotICogdGVzdF9hbmRfc2V0X2JpdCgpIHRvIGxvY2sgdGhlIHBhZ2U7IHRoZSBzZWNvbmQgbWIgaXMgbmVjZXNzYXJ5IHRvIGVuZm9yY2UKLSAqIG9yZGVyaW5nIGJldHdlZW4gdGhlIGNsZWFyX2JpdCBhbmQgdGhlIHJlYWQgb2YgdGhlIHdhaXRxdWV1ZSAodG8gYXZvaWQgU01QCi0gKiByYWNlcyB3aXRoIGEgcGFyYWxsZWwgd2FpdF9vbl9wYWdlX2xvY2tlZCgpKS4KKyAqIFRoZSBtYiBpcyBuZWNlc3NhcnkgdG8gZW5mb3JjZSBvcmRlcmluZyBiZXR3ZWVuIHRoZSBjbGVhcl9iaXQgYW5kIHRoZSByZWFkCisgKiBvZiB0aGUgd2FpdHF1ZXVlICh0byBhdm9pZCBTTVAgcmFjZXMgd2l0aCBhIHBhcmFsbGVsIHdhaXRfb25fcGFnZV9sb2NrZWQoKSkuCiAgKi8KIHZvaWQgdW5sb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7Ci0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpKQotCQlCVUcoKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCWNsZWFyX2JpdF91bmxvY2soUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJd2FrZV91cF9wYWdlKHBhZ2UsIFBHX2xvY2tlZCk7CiB9CiBFWFBPUlRfU1lNQk9MKHVubG9ja19wYWdlKTsKZGlmZiAtLWdpdCBhL21tL2ZyZW1hcC5jIGIvbW0vZnJlbWFwLmMKaW5kZXggNzg4MTYzOC4uN2QxMmNhNyAxMDA2NDQKLS0tIGEvbW0vZnJlbWFwLmMKKysrIGIvbW0vZnJlbWFwLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogc3RhdGljIHZvaWQgemFwX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewpAQCAtMjE1LDE1ICsyMTcsMzEgQEAKIAkJc3Bpbl91bmxvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl9CiAKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkvKgorCQkgKiBkcm9wIFBHX01sb2NrZWQgZmxhZyBmb3Igb3Zlci1tYXBwZWQgcmFuZ2UKKwkJICovCisJCXVuc2lnbmVkIGludCBzYXZlZF9mbGFncyA9IHZtYS0+dm1fZmxhZ3M7CisJCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CisJCXZtYS0+dm1fZmxhZ3MgPSBzYXZlZF9mbGFnczsKKwl9CisKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CiAJZXJyID0gcG9wdWxhdGVfcmFuZ2UobW0sIHZtYSwgc3RhcnQsIHNpemUsIHBnb2ZmKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIHN0YXJ0LCBzdGFydCArIHNpemUpOwogCWlmICghZXJyICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKSB7Ci0JCWlmICh1bmxpa2VseShoYXNfd3JpdGVfbG9jaykpIHsKLQkJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQkJCWhhc193cml0ZV9sb2NrID0gMDsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCS8qCisJCQkgKiBtaWdodCBiZSBtYXBwaW5nIHByZXZpb3VzbHkgdW5tYXBwZWQgcmFuZ2Ugb2YgZmlsZQorCQkJICovCisJCQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgc3RhcnQgKyBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh1bmxpa2VseShoYXNfd3JpdGVfbG9jaykpIHsKKwkJCQlkb3duZ3JhZGVfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCQkJaGFzX3dyaXRlX2xvY2sgPSAwOworCQkJfQorCQkJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBzdGFydCtzaXplKTsKIAkJfQotCQltYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIHN0YXJ0K3NpemUpOwogCX0KIAogCS8qCkBAIC0yNDAsNCArMjU4LDMgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCAzODYzMzg2Li40MjFhZWU5IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgpAQCAtMjYyLDcgKzI2Myw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCByZWdpb25zOwogfTsKIAotc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcF9hbGxvYyh2b2lkKQorc3RhdGljIHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXBfYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwID0ga21hbGxvYyhzaXplb2YoKnJlc3ZfbWFwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXN2X21hcCkKQEAgLTI3NCw3ICsyNzUsNyBAQAogCXJldHVybiByZXN2X21hcDsKIH0KIAotdm9pZCByZXN2X21hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCitzdGF0aWMgdm9pZCByZXN2X21hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCiB7CiAJc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCByZXN2X21hcCwgcmVmcyk7CiAKQEAgLTI4OSw3ICsyOTAsNyBAQAogCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQogCQlyZXR1cm4gKHN0cnVjdCByZXN2X21hcCAqKShnZXRfdm1hX3ByaXZhdGVfZGF0YSh2bWEpICYKIAkJCQkJCQl+SFBBR0VfUkVTVl9NQVNLKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3ZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHJlc3ZfbWFwICptYXApCkBAIC0xNDU1LDE1ICsxNDU2LDE1IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAKLWludCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKGNoYXIgKmJ1ZikKK3ZvaWQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJc3RydWN0IGhzdGF0ZSAqaCA9ICZkZWZhdWx0X2hzdGF0ZTsKLQlyZXR1cm4gc3ByaW50ZihidWYsCi0JCQkiSHVnZVBhZ2VzX1RvdGFsOiAlNWx1XG4iCi0JCQkiSHVnZVBhZ2VzX0ZyZWU6ICAlNWx1XG4iCi0JCQkiSHVnZVBhZ2VzX1JzdmQ6ICAlNWx1XG4iCi0JCQkiSHVnZVBhZ2VzX1N1cnA6ICAlNWx1XG4iCi0JCQkiSHVnZXBhZ2VzaXplOiAgICAlNWx1IGtCXG4iLAorCXNlcV9wcmludGYobSwKKwkJCSJIdWdlUGFnZXNfVG90YWw6ICAgJTVsdVxuIgorCQkJIkh1Z2VQYWdlc19GcmVlOiAgICAlNWx1XG4iCisJCQkiSHVnZVBhZ2VzX1JzdmQ6ICAgICU1bHVcbiIKKwkJCSJIdWdlUGFnZXNfU3VycDogICAgJTVsdVxuIgorCQkJIkh1Z2VwYWdlc2l6ZTogICAlOGx1IGtCXG4iLAogCQkJaC0+bnJfaHVnZV9wYWdlcywKIAkJCWgtPmZyZWVfaHVnZV9wYWdlcywKIAkJCWgtPnJlc3ZfaHVnZV9wYWdlcywKQEAgLTE3NDcsMTAgKzE3NDgsOCBAQAogICogZnJvbSBvdGhlciBWTUFzIGFuZCBsZXQgdGhlIGNoaWxkcmVuIGJlIFNJR0tJTExlZCBpZiB0aGV5IGFyZSBmYXVsdGluZyB0aGUKICAqIHNhbWUgcmVnaW9uLgogICovCi1pbnQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGludCB1bm1hcF9yZWZfcHJpdmF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKml0ZXJfdm1hOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwpAQCAtMjA3Myw2ICsyMDcyLDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgaHVnZV96ZXJvcGFnZV9vayhwdGVfdCAqcHRlcCwgaW50IHdyaXRlLCBpbnQgc2hhcmVkKQoreworCWlmICghcHRlcCB8fCB3cml0ZSB8fCBzaGFyZWQpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGh1Z2VfcHRlX25vbmUoaHVnZV9wdGVwX2dldChwdGVwKSk7Cit9CisKIGludCBmb2xsb3dfaHVnZXRsYl9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsCiAJCQl1bnNpZ25lZCBsb25nICpwb3NpdGlvbiwgaW50ICpsZW5ndGgsIGludCBpLApAQCAtMjA4Miw2ICsyMDg5LDggQEAKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKnBvc2l0aW9uOwogCWludCByZW1haW5kZXIgPSAqbGVuZ3RoOwogCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7CisJaW50IHplcm9wYWdlX29rID0gMDsKKwlpbnQgc2hhcmVkID0gdm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRDsKIAogCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJd2hpbGUgKHZhZGRyIDwgdm1hLT52bV9lbmQgJiYgcmVtYWluZGVyKSB7CkBAIC0yMDk0LDggKzIxMDMsMTEgQEAKIAkJICogZmlyc3QsIGZvciB0aGUgcGFnZSBpbmRleGluZyBiZWxvdyB0byB3b3JrLgogCQkgKi8KIAkJcHRlID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCB2YWRkciAmIGh1Z2VfcGFnZV9tYXNrKGgpKTsKKwkJaWYgKGh1Z2VfemVyb3BhZ2Vfb2socHRlLCB3cml0ZSwgc2hhcmVkKSkKKwkJCXplcm9wYWdlX29rID0gMTsKIAotCQlpZiAoIXB0ZSB8fCBodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlKSkgfHwKKwkJaWYgKCFwdGUgfHwKKwkJICAgIChodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlKSkgJiYgIXplcm9wYWdlX29rKSB8fAogCQkgICAgKHdyaXRlICYmICFwdGVfd3JpdGUoaHVnZV9wdGVwX2dldChwdGUpKSkpIHsKIAkJCWludCByZXQ7CiAKQEAgLTIxMTUsOCArMjEyNywxMSBAQAogCQlwYWdlID0gcHRlX3BhZ2UoaHVnZV9wdGVwX2dldChwdGUpKTsKIHNhbWVfcGFnZToKIAkJaWYgKHBhZ2VzKSB7Ci0JCQlnZXRfcGFnZShwYWdlKTsKLQkJCXBhZ2VzW2ldID0gcGFnZSArIHBmbl9vZmZzZXQ7CisJCQlpZiAoemVyb3BhZ2Vfb2spCisJCQkJcGFnZXNbaV0gPSBaRVJPX1BBR0UoMCk7CisJCQllbHNlCisJCQkJcGFnZXNbaV0gPSBwYWdlICsgcGZuX29mZnNldDsKKwkJCWdldF9wYWdlKHBhZ2VzW2ldKTsKIAkJfQogCiAJCWlmICh2bWFzKQpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMWY0M2Y3NC4uZTRlNzI4YiAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAorKysgYi9tbS9pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSwxNSBAQAogCWF0b21pY19kZWMoJnBhZ2UtPl9jb3VudCk7CiB9CiAKKy8qCisgKiBpbiBtbS92bXNjYW4uYzoKKyAqLworZXh0ZXJuIGludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIHB1dGJhY2tfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKgorICogaW4gbW0vcGFnZV9hbGxvYy5jCisgKi8KIGV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19ib290bWVtKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogCiAvKgpAQCAtNTIsNiArNjEsMTIwIEBACiAJcmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTsKIH0KIAorZXh0ZXJuIGxvbmcgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgbXVubG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitzdGF0aWMgaW5saW5lIHZvaWQgbXVubG9ja192bWFfcGFnZXNfYWxsKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworfQorCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoKKyAqIHVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZSgpIGNhbGxlZCBvbmx5IGZyb20gbWlncmF0ZV9wYWdlX2NvcHkoKSB0bworICogbWlncmF0ZSB1bmV2aWN0YWJsZSBmbGFnIHRvIG5ldyBwYWdlLgorICogTm90ZSB0aGF0IHRoZSBvbGQgcGFnZSBoYXMgYmVlbiBpc29sYXRlZCBmcm9tIHRoZSBMUlUgbGlzdHMgYXQgdGhpcworICogcG9pbnQgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBMUlUgc3RhdGlzdGljcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3LCBzdHJ1Y3QgcGFnZSAqb2xkKQoreworCWlmIChUZXN0Q2xlYXJQYWdlVW5ldmljdGFibGUob2xkKSkKKwkJU2V0UGFnZVVuZXZpY3RhYmxlKG5ldyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3LCBzdHJ1Y3QgcGFnZSAqb2xkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogQ2FsbGVkIG9ubHkgaW4gZmF1bHQgcGF0aCB2aWEgcGFnZV9ldmljdGFibGUoKSBmb3IgYSBuZXcgcGFnZQorICogdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYmVpbmcgbWFwcGVkIGludG8gYSBMT0NLRUQgdm1hLgorICogSWYgc28sIG1hcmsgcGFnZSBhcyBtbG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19tbG9ja2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCisJaWYgKGxpa2VseSgodm1hLT52bV9mbGFncyAmIChWTV9MT0NLRUQgfCBWTV9TUEVDSUFMKSkgIT0gVk1fTE9DS0VEKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIVRlc3RTZXRQYWdlTWxvY2tlZChwYWdlKSkgeworCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdNTE9DS0VEKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZtYSdzIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWQsIGFuZCBwYWdlIGxvY2tlZC4KKyAqLworZXh0ZXJuIHZvaWQgbWxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKgorICogQ2xlYXIgdGhlIHBhZ2UncyBQYWdlTWxvY2tlZCgpLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGluIGEgc2l0dWF0aW9uIHdoZXJlCisgKiB3ZSB3YW50IHRvIHVuY29uZGl0aW9uYWxseSByZW1vdmUgYSBwYWdlIGZyb20gdGhlIHBhZ2VjYWNoZSAtLSBlLmcuLAorICogb24gdHJ1bmNhdGlvbiBvciBmcmVlaW5nLgorICoKKyAqIEl0IGlzIGxlZ2FsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYW55IHBhZ2UsIG1sb2NrZWQgb3Igbm90LgorICogSWYgY2FsbGVkIGZvciBhIHBhZ2UgdGhhdCBpcyBzdGlsbCBtYXBwZWQgYnkgbWxvY2tlZCB2bWFzLCBhbGwgd2UgZG8KKyAqIGlzIHJldmVydCB0byBsYXp5IExSVSBiZWhhdmlvdXIgLS0gc2VtYW50aWNzIGFyZSBub3QgYnJva2VuLgorICovCitleHRlcm4gdm9pZCBfX2NsZWFyX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpOworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKHVubGlrZWx5KFRlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpKSkKKwkJX19jbGVhcl9wYWdlX21sb2NrKHBhZ2UpOworfQorCisvKgorICogbWxvY2tfbWlncmF0ZV9wYWdlIC0gY2FsbGVkIG9ubHkgZnJvbSBtaWdyYXRlX3BhZ2VfY29weSgpIHRvCisgKiBtaWdyYXRlIHRoZSBNbG9ja2VkIHBhZ2UgZmxhZzsgdXBkYXRlIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJU2V0UGFnZU1sb2NrZWQobmV3cGFnZSk7CisJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShuZXdwYWdlLCBOUl9NTE9DSyk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBmcmVlX3BhZ2VfbWxvY2soKSAtLSBjbGVhbiB1cCBhdHRlbXB0cyB0byBmcmVlIGFuZCBtbG9ja2VkKCkgcGFnZS4KKyAqIFBhZ2Ugc2hvdWxkIG5vdCBiZSBvbiBscnUsIHNvIG5vIG5lZWQgdG8gZml4IHRoYXQgdXAuCisgKiBmcmVlX3BhZ2VzX2NoZWNrKCkgd2lsbCB2ZXJpZnkuLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAodW5saWtlbHkoVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSkpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCQlfX2NvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX01MT0NLRlJFRUQpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorfQorCisjZWxzZSAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCitzdGF0aWMgaW5saW5lIGludCBpc19tbG9ja2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnYsIHN0cnVjdCBwYWdlICpwKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG1sb2NrX3ZtYV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ldywgc3RydWN0IHBhZ2UgKm9sZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKwogLyoKICAqIEZMQVRNRU0gYW5kIERJU0NPTlRJR01FTSBjb25maWd1cmF0aW9ucyB1c2UgYWxsb2NfYm9vdG1lbV9ub2RlLAogICogc28gYWxsIGZ1bmN0aW9ucyBzdGFydGluZyBhdCBwYWdpbmdfaW5pdCBzaG91bGQgYmUgbWFya2VkIF9faW5pdApAQCAtMTIwLDQgKzI0MywxMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KIAorI2RlZmluZSBHVVBfRkxBR1NfV1JJVEUgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgR1VQX0ZMQUdTX0ZPUkNFICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TIDB4NAorCitpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAorCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAzNjg5NmYzLi44NjZkY2M3IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0zMiwxMSArMzIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1fY2dyb3VwX3N1YnN5cyBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwYWdlX2Nncm91cF9jYWNoZSBfX3JlYWRfbW9zdGx5OwogI2RlZmluZSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUwk1CiAKIC8qCkBAIC02NSwxMSArNjYsMTAgQEAKIC8qCiAgKiBGb3IgYWNjb3VudGluZyB1bmRlciBpcnEgZGlzYWJsZSwgbm8gbmVlZCBmb3IgaW5jcmVtZW50IHByZWVtcHQgY291bnQuCiAgKi8KLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwX3N0YXQgKnN0YXQsCitzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgKnN0YXQsCiAJCWVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCwgaW50IHZhbCkKIHsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0YXQtPmNwdXN0YXRbY3B1XS5jb3VudFtpZHhdICs9IHZhbDsKKwlzdGF0LT5jb3VudFtpZHhdICs9IHZhbDsKIH0KIAogc3RhdGljIHM2NCBtZW1fY2dyb3VwX3JlYWRfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0LApAQCAtODUsMjIgKzg1LDEzIEBACiAvKgogICogcGVyLXpvbmUgaW5mb3JtYXRpb24gaW4gbWVtb3J5IGNvbnRyb2xsZXIuCiAgKi8KLQotZW51bSBtZW1fY2dyb3VwX3pzdGF0X2luZGV4IHsKLQlNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSwKLQlNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFLAotCi0JTlJfTUVNX0NHUk9VUF9aU1RBVCwKLX07Ci0KIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lIHsKIAkvKgogCSAqIHNwaW5fbG9jayB0byBwcm90ZWN0IHRoZSBwZXIgY2dyb3VwIExSVQogCSAqLwogCXNwaW5sb2NrX3QJCWxydV9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZAlpbmFjdGl2ZV9saXN0OwotCXVuc2lnbmVkIGxvbmcgY291bnRbTlJfTUVNX0NHUk9VUF9aU1RBVF07CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0c1tOUl9MUlVfTElTVFNdOworCXVuc2lnbmVkIGxvbmcJCWNvdW50W05SX0xSVV9MSVNUU107CiB9OwogLyogTWFjcm8gZm9yIGFjY2Vzc2luZyBjb3VudGVyICovCiAjZGVmaW5lIE1FTV9DR1JPVVBfWlNUQVQobXosIGlkeCkJKChteiktPmNvdW50WyhpZHgpXSkKQEAgLTE0NCw2OSArMTM1LDUyIEBACiB9Owogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwIGluaXRfbWVtX2Nncm91cDsKIAotLyoKLSAqIFdlIHVzZSB0aGUgbG93ZXIgYml0IG9mIHRoZSBwYWdlLT5wYWdlX2Nncm91cCBwb2ludGVyIGFzIGEgYml0IHNwaW4KLSAqIGxvY2suICBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHBhZ2UtPnBhZ2VfY2dyb3VwIGlzIGF0IGxlYXN0IHR3bwotICogYnl0ZSBhbGlnbmVkIChiYXNlZCBvbiBjb21tZW50cyBmcm9tIE5pY2sgUGlnZ2luKS4gIEJ1dCBzaW5jZQotICogYml0X3NwaW5fbG9jayBkb2Vzbid0IGFjdHVhbGx5IHNldCB0aGF0IGxvY2sgYml0IGluIGEgbm9uLWRlYnVnCi0gKiB1bmlwcm9jZXNzb3Iga2VybmVsLCB3ZSBzaG91bGQgYXZvaWQgc2V0dGluZyBpdCBoZXJlIHRvby4KLSAqLwotI2RlZmluZSBQQUdFX0NHUk9VUF9MT0NLX0JJVCAJMHgwCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKLSNkZWZpbmUgUEFHRV9DR1JPVVBfTE9DSyAJKDEgPDwgUEFHRV9DR1JPVVBfTE9DS19CSVQpCi0jZWxzZQotI2RlZmluZSBQQUdFX0NHUk9VUF9MT0NLCTB4MAotI2VuZGlmCi0KLS8qCi0gKiBBIHBhZ2VfY2dyb3VwIHBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IHBhZ2UgZGVzY3JpcHRvci4gVGhlCi0gKiBwYWdlX2Nncm91cCBoZWxwcyB1cyBpZGVudGlmeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2dyb3VwCi0gKi8KLXN0cnVjdCBwYWdlX2Nncm91cCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBscnU7CQkvKiBwZXIgY2dyb3VwIExSVSBsaXN0ICovCi0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXA7Ci0JaW50IGZsYWdzOwotfTsKLSNkZWZpbmUgUEFHRV9DR1JPVVBfRkxBR19DQUNIRQkoMHgxKQkvKiBjaGFyZ2VkIGFzIGNhY2hlICovCi0jZGVmaW5lIFBBR0VfQ0dST1VQX0ZMQUdfQUNUSVZFICgweDIpCS8qIHBhZ2UgaXMgYWN0aXZlIGluIHRoaXMgY2dyb3VwICovCi0KLXN0YXRpYyBpbnQgcGFnZV9jZ3JvdXBfbmlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCi17Ci0JcmV0dXJuIHBhZ2VfdG9fbmlkKHBjLT5wYWdlKTsKLX0KLQotc3RhdGljIGVudW0gem9uZV90eXBlIHBhZ2VfY2dyb3VwX3ppZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQotewotCXJldHVybiBwYWdlX3pvbmVudW0ocGMtPnBhZ2UpOwotfQotCiBlbnVtIGNoYXJnZV90eXBlIHsKIAlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFID0gMCwKIAlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCwKKwlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNLAkvKiB1c2VkIGJ5IHBhZ2UgbWlncmF0aW9uIG9mIHNobWVtICovCiAJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9GT1JDRSwJLyogdXNlZCBieSBmb3JjZV9lbXB0eSAqLworCU5SX0NIQVJHRV9UWVBFLAorfTsKKworLyogb25seSBmb3IgaGVyZSAoZm9yIGVhc3kgcmVhZGluZy4pICovCisjZGVmaW5lIFBDR0ZfQ0FDSEUJKDFVTCA8PCBQQ0dfQ0FDSEUpCisjZGVmaW5lIFBDR0ZfVVNFRAkoMVVMIDw8IFBDR19VU0VEKQorI2RlZmluZSBQQ0dGX0FDVElWRQkoMVVMIDw8IFBDR19BQ1RJVkUpCisjZGVmaW5lIFBDR0ZfTE9DSwkoMVVMIDw8IFBDR19MT0NLKQorI2RlZmluZSBQQ0dGX0ZJTEUJKDFVTCA8PCBQQ0dfRklMRSkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nCitwY2dfZGVmYXVsdF9mbGFnc1tOUl9DSEFSR0VfVFlQRV0gPSB7CisJUENHRl9DQUNIRSB8IFBDR0ZfRklMRSB8IFBDR0ZfVVNFRCB8IFBDR0ZfTE9DSywgLyogRmlsZSBDYWNoZSAqLworCVBDR0ZfQUNUSVZFIHwgUENHRl9VU0VEIHwgUENHRl9MT0NLLCAvKiBBbm9uICovCisJUENHRl9BQ1RJVkUgfCBQQ0dGX0NBQ0hFIHwgUENHRl9VU0VEIHwgUENHRl9MT0NLLCAvKiBTaG1lbSAqLworCTAsIC8qIEZPUkNFICovCiB9OwogCiAvKgogICogQWx3YXlzIG1vZGlmaWVkIHVuZGVyIGxydSBsb2NrLiBUaGVuLCBub3QgbmVjZXNzYXJ5IHRvIHByZWVtcHRfZGlzYWJsZSgpCiAgKi8KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgaW50IGZsYWdzLAotCQkJCQlib29sIGNoYXJnZSkKK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkJIHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsCisJCQkJCSBib29sIGNoYXJnZSkKIHsKIAlpbnQgdmFsID0gKGNoYXJnZSk/IDEgOiAtMTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0ID0gJm1lbS0+c3RhdDsKKwlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSAqY3B1c3RhdDsKIAogCVZNX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKLQlpZiAoZmxhZ3MgJiBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFKQotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShzdGF0LCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUsIHZhbCk7CisKKwljcHVzdGF0ID0gJnN0YXQtPmNwdXN0YXRbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlpZiAoUGFnZUNncm91cENhY2hlKHBjKSkKKwkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX0NBQ0hFLCB2YWwpOwogCWVsc2UKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoc3RhdCwgTUVNX0NHUk9VUF9TVEFUX1JTUywgdmFsKTsKKwkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1JTUywgdmFsKTsKIAogCWlmIChjaGFyZ2UpCi0JCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0YXQsCisJCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKGNwdXN0YXQsCiAJCQkJTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVCwgMSk7CiAJZWxzZQotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShzdGF0LAorCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LAogCQkJCU1FTV9DR1JPVVBfU1RBVF9QR1BHT1VUX0NPVU5ULCAxKTsKIH0KIApAQCAtMjI3LDcgKzIwMSw3IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCQllbnVtIG1lbV9jZ3JvdXBfenN0YXRfaW5kZXggaWR4KQorCQkJCQllbnVtIGxydV9saXN0IGlkeCkKIHsKIAlpbnQgbmlkLCB6aWQ7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwpAQCAtMjYyLDg1ICsyMzYsNzcgQEAKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cCwgY3NzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGFnZV9jZ3JvdXBfbG9ja2VkKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXJldHVybiBiaXRfc3Bpbl9pc19sb2NrZWQoUEFHRV9DR1JPVVBfTE9DS19CSVQsICZwYWdlLT5wYWdlX2Nncm91cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhZ2VfYXNzaWduX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQotewotCVZNX0JVR19PTighcGFnZV9jZ3JvdXBfbG9ja2VkKHBhZ2UpKTsKLQlwYWdlLT5wYWdlX2Nncm91cCA9ICgodW5zaWduZWQgbG9uZylwYyB8IFBBR0VfQ0dST1VQX0xPQ0spOwotfQotCi1zdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXJldHVybiAoc3RydWN0IHBhZ2VfY2dyb3VwICopIChwYWdlLT5wYWdlX2Nncm91cCAmIH5QQUdFX0NHUk9VUF9MT0NLKTsKLX0KLQotc3RhdGljIHZvaWQgbG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQliaXRfc3Bpbl9sb2NrKFBBR0VfQ0dST1VQX0xPQ0tfQklULCAmcGFnZS0+cGFnZV9jZ3JvdXApOwotfQotCi1zdGF0aWMgaW50IHRyeV9sb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXJldHVybiBiaXRfc3Bpbl90cnlsb2NrKFBBR0VfQ0dST1VQX0xPQ0tfQklULCAmcGFnZS0+cGFnZV9jZ3JvdXApOwotfQotCi1zdGF0aWMgdm9pZCB1bmxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JYml0X3NwaW5fdW5sb2NrKFBBR0VfQ0dST1VQX0xPQ0tfQklULCAmcGFnZS0+cGFnZV9jZ3JvdXApOwotfQotCiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcmVtb3ZlX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAogCQkJc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKIHsKLQlpbnQgZnJvbSA9IHBjLT5mbGFncyAmIFBBR0VfQ0dST1VQX0ZMQUdfQUNUSVZFOworCWludCBscnUgPSBMUlVfQkFTRTsKIAotCWlmIChmcm9tKQotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSkgLT0gMTsKLQllbHNlCi0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpIC09IDE7CisJaWYgKFBhZ2VDZ3JvdXBVbmV2aWN0YWJsZShwYykpCisJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKKwllbHNlIHsKKwkJaWYgKFBhZ2VDZ3JvdXBBY3RpdmUocGMpKQorCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CisJCWlmIChQYWdlQ2dyb3VwRmlsZShwYykpCisJCQlscnUgKz0gTFJVX0ZJTEU7CisJfQogCi0JbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhwYy0+bWVtX2Nncm91cCwgcGMtPmZsYWdzLCBmYWxzZSk7CisJTUVNX0NHUk9VUF9aU1RBVChteiwgbHJ1KSAtPSAxOworCisJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhwYy0+bWVtX2Nncm91cCwgcGMsIGZhbHNlKTsKIAlsaXN0X2RlbCgmcGMtPmxydSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9hZGRfbGlzdChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCiAJCQkJc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKIHsKLQlpbnQgdG8gPSBwYy0+ZmxhZ3MgJiBQQUdFX0NHUk9VUF9GTEFHX0FDVElWRTsKKwlpbnQgbHJ1ID0gTFJVX0JBU0U7CiAKLQlpZiAoIXRvKSB7Ci0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpICs9IDE7Ci0JCWxpc3RfYWRkKCZwYy0+bHJ1LCAmbXotPmluYWN0aXZlX2xpc3QpOwotCX0gZWxzZSB7Ci0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFKSArPSAxOwotCQlsaXN0X2FkZCgmcGMtPmxydSwgJm16LT5hY3RpdmVfbGlzdCk7CisJaWYgKFBhZ2VDZ3JvdXBVbmV2aWN0YWJsZShwYykpCisJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKKwllbHNlIHsKKwkJaWYgKFBhZ2VDZ3JvdXBBY3RpdmUocGMpKQorCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CisJCWlmIChQYWdlQ2dyb3VwRmlsZShwYykpCisJCQlscnUgKz0gTFJVX0ZJTEU7CiAJfQotCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MocGMtPm1lbV9jZ3JvdXAsIHBjLT5mbGFncywgdHJ1ZSk7CisKKwlNRU1fQ0dST1VQX1pTVEFUKG16LCBscnUpICs9IDE7CisJbGlzdF9hZGQoJnBjLT5scnUsICZtei0+bGlzdHNbbHJ1XSk7CisKKwltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHBjLT5tZW1fY2dyb3VwLCBwYywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsIGJvb2wgYWN0aXZlKQorc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywgZW51bSBscnVfbGlzdCBscnUpCiB7Ci0JaW50IGZyb20gPSBwYy0+ZmxhZ3MgJiBQQUdFX0NHUk9VUF9GTEFHX0FDVElWRTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CisJaW50IGFjdGl2ZSAgICA9IFBhZ2VDZ3JvdXBBY3RpdmUocGMpOworCWludCBmaWxlICAgICAgPSBQYWdlQ2dyb3VwRmlsZShwYyk7CisJaW50IHVuZXZpY3RhYmxlID0gUGFnZUNncm91cFVuZXZpY3RhYmxlKHBjKTsKKwllbnVtIGxydV9saXN0IGZyb20gPSB1bmV2aWN0YWJsZSA/IExSVV9VTkVWSUNUQUJMRSA6CisJCQkJKExSVV9GSUxFICogISFmaWxlICsgISFhY3RpdmUpOwogCi0JaWYgKGZyb20pCi0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFKSAtPSAxOwotCWVsc2UKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSkgLT0gMTsKKwlpZiAobHJ1ID09IGZyb20pCisJCXJldHVybjsKIAotCWlmIChhY3RpdmUpIHsKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUpICs9IDE7Ci0JCXBjLT5mbGFncyB8PSBQQUdFX0NHUk9VUF9GTEFHX0FDVElWRTsKLQkJbGlzdF9tb3ZlKCZwYy0+bHJ1LCAmbXotPmFjdGl2ZV9saXN0KTsKKwlNRU1fQ0dST1VQX1pTVEFUKG16LCBmcm9tKSAtPSAxOworCS8qCisJICogSG93ZXZlciB0aGlzIGlzIGRvbmUgdW5kZXIgbXotPmxydV9sb2NrLCBhbm90aGVyIGZsYWdzLCB3aGljaAorCSAqIGFyZSBub3QgcmVsYXRlZCB0byBMUlUsIHdpbGwgYmUgbW9kaWZpZWQgZnJvbSBvdXQtb2YtbG9jay4KKwkgKiBXZSBoYXZlIHRvIHVzZSBhdG9taWMgc2V0L2NsZWFyIGZsYWdzLgorCSAqLworCWlmIChpc191bmV2aWN0YWJsZV9scnUobHJ1KSkgeworCQlDbGVhclBhZ2VDZ3JvdXBBY3RpdmUocGMpOworCQlTZXRQYWdlQ2dyb3VwVW5ldmljdGFibGUocGMpOwogCX0gZWxzZSB7Ci0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpICs9IDE7Ci0JCXBjLT5mbGFncyAmPSB+UEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7Ci0JCWxpc3RfbW92ZSgmcGMtPmxydSwgJm16LT5pbmFjdGl2ZV9saXN0KTsKKwkJaWYgKGlzX2FjdGl2ZV9scnUobHJ1KSkKKwkJCVNldFBhZ2VDZ3JvdXBBY3RpdmUocGMpOworCQllbHNlCisJCQlDbGVhclBhZ2VDZ3JvdXBBY3RpdmUocGMpOworCQlDbGVhclBhZ2VDZ3JvdXBVbmV2aWN0YWJsZShwYyk7CiAJfQorCisJTUVNX0NHUk9VUF9aU1RBVChteiwgbHJ1KSArPSAxOworCWxpc3RfbW92ZSgmcGMtPmxydSwgJm16LT5saXN0c1tscnVdKTsKIH0KIAogaW50IHRhc2tfaW5fbWVtX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCkBAIC0zNTYsNyArMzIyLDcgQEAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IHRoZSBhcHByb3ByaWF0ZSB6b25lJ3MgbHJ1IGxvY2sgaXMgYWxyZWFkeSBoZWxkCiAgKi8KLXZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGFjdGl2ZSkKK3ZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSkKIHsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKQEAgLTM3MiwxNyArMzM4LDE2IEBACiAJICogc2FmZWx5IGdldCB0byBwYWdlX2Nncm91cCB3aXRob3V0IGl0LCBzbyBqdXN0IHRyeV9sb2NrIGl0OgogCSAqIG1lbV9jZ3JvdXBfaXNvbGF0ZV9wYWdlcyBhbGxvd3MgZm9yIHBhZ2UgbGVmdCBvbiB3cm9uZyBsaXN0LgogCSAqLwotCWlmICghdHJ5X2xvY2tfcGFnZV9jZ3JvdXAocGFnZSkpCisJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CisJaWYgKCF0cnlsb2NrX3BhZ2VfY2dyb3VwKHBjKSkKIAkJcmV0dXJuOwotCi0JcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQlpZiAocGMpIHsKKwlpZiAocGMgJiYgUGFnZUNncm91cFVzZWQocGMpKSB7CiAJCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7Ci0JCV9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBjLCBhY3RpdmUpOworCQlfX21lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYywgbHJ1KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAJfQotCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKKwl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogfQogCiAvKgpAQCAtNDAzLDIxICszNjgsNiBAQAogfQogCiAvKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB2bXNjYW4uYy4gSW4gcGFnZSByZWNsYWltaW5nIGxvb3AuIGJhbGFuY2UKLSAqIGJldHdlZW4gYWN0aXZlIGFuZCBpbmFjdGl2ZSBsaXN0IGlzIGNhbGN1bGF0ZWQuIEZvciBtZW1vcnkgY29udHJvbGxlcgotICogcGFnZSByZWNsYWltaW5nLCB3ZSBzaG91bGQgdXNlIHVzaW5nIG1lbV9jZ3JvdXAncyBpbWJhbGFuY2UgcmF0aGVyIHRoYW4KLSAqIHpvbmUncyBnbG9iYWwgbHJ1IGltYmFsYW5jZS4KLSAqLwotbG9uZyBtZW1fY2dyb3VwX3JlY2xhaW1faW1iYWxhbmNlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBhY3RpdmUsIGluYWN0aXZlOwotCS8qIGFjdGl2ZSBhbmQgaW5hY3RpdmUgYXJlIHRoZSBudW1iZXIgb2YgcGFnZXMuICdsb25nJyBpcyBvay4qLwotCWFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW0sIE1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFKTsKLQlpbmFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW0sIE1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpOwotCXJldHVybiAobG9uZykgKGFjdGl2ZSAvIChpbmFjdGl2ZSArIDEpKTsKLX0KLQotLyoKICAqIHByZXZfcHJpb3JpdHkgY29udHJvbC4uLnRoaXMgd2lsbCBiZSB1c2VkIGluIG1lbW9yeSByZWNsYWltIHBhdGguCiAgKi8KIGludCBtZW1fY2dyb3VwX2dldF9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCkBAIC00NDQsMjggKzM5NCwxNyBAQAogICogKHNlZSBpbmNsdWRlL2xpbnV4L21tem9uZS5oKQogICovCiAKLWxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJICAgc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKK2xvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHpvbmUgKnpvbmUsCisJCQkJCWludCBwcmlvcml0eSwgZW51bSBscnVfbGlzdCBscnUpCiB7Ci0JbG9uZyBucl9hY3RpdmU7CisJbG9uZyBucl9wYWdlczsKIAlpbnQgbmlkID0gem9uZS0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKIAlpbnQgemlkID0gem9uZV9pZHgoem9uZSk7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16ID0gbWVtX2Nncm91cF96b25laW5mbyhtZW0sIG5pZCwgemlkKTsKIAotCW5yX2FjdGl2ZSA9IE1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFKTsKLQlyZXR1cm4gKG5yX2FjdGl2ZSA+PiBwcmlvcml0eSk7Ci19CisJbnJfcGFnZXMgPSBNRU1fQ0dST1VQX1pTVEFUKG16LCBscnUpOwogCi1sb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2luYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpCi17Ci0JbG9uZyBucl9pbmFjdGl2ZTsKLQlpbnQgbmlkID0gem9uZS0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKLQlpbnQgemlkID0gem9uZV9pZHgoem9uZSk7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16ID0gbWVtX2Nncm91cF96b25laW5mbyhtZW0sIG5pZCwgemlkKTsKLQotCW5yX2luYWN0aXZlID0gTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSk7Ci0JcmV0dXJuIChucl9pbmFjdGl2ZSA+PiBwcmlvcml0eSk7CisJcmV0dXJuIChucl9wYWdlcyA+PiBwcmlvcml0eSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9pc29sYXRlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKQEAgLTQ3Myw3ICs0MTIsNyBAQAogCQkJCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsCiAJCQkJCWludCBtb2RlLCBzdHJ1Y3Qgem9uZSAqeiwKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAotCQkJCQlpbnQgYWN0aXZlKQorCQkJCQlpbnQgYWN0aXZlLCBpbnQgZmlsZSkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTQ4NCwzOCArNDIzLDM4IEBACiAJaW50IG5pZCA9IHotPnpvbmVfcGdkYXQtPm5vZGVfaWQ7CiAJaW50IHppZCA9IHpvbmVfaWR4KHopOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwlpbnQgbHJ1ID0gTFJVX0ZJTEUgKiAhIWZpbGUgKyAhIWFjdGl2ZTsKIAogCUJVR19PTighbWVtX2NvbnQpOwogCW16ID0gbWVtX2Nncm91cF96b25laW5mbyhtZW1fY29udCwgbmlkLCB6aWQpOwotCWlmIChhY3RpdmUpCi0JCXNyYyA9ICZtei0+YWN0aXZlX2xpc3Q7Ci0JZWxzZQotCQlzcmMgPSAmbXotPmluYWN0aXZlX2xpc3Q7Ci0KKwlzcmMgPSAmbXotPmxpc3RzW2xydV07CiAKIAlzcGluX2xvY2soJm16LT5scnVfbG9jayk7CiAJc2NhbiA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UocGMsIHRtcCwgc3JjLCBscnUpIHsKIAkJaWYgKHNjYW4gPj0gbnJfdG9fc2NhbikKIAkJCWJyZWFrOworCQlpZiAodW5saWtlbHkoIVBhZ2VDZ3JvdXBVc2VkKHBjKSkpCisJCQljb250aW51ZTsKIAkJcGFnZSA9IHBjLT5wYWdlOwogCiAJCWlmICh1bmxpa2VseSghUGFnZUxSVShwYWdlKSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSAmJiAhYWN0aXZlKSB7Ci0JCQlfX21lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYywgdHJ1ZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIVBhZ2VBY3RpdmUocGFnZSkgJiYgYWN0aXZlKSB7Ci0JCQlfX21lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYywgZmFsc2UpOworCQkvKgorCQkgKiBUT0RPOiBwbGF5IGJldHRlciB3aXRoIGx1bXB5IHJlY2xhaW0sIGdyYWJiaW5nIGFueXRoaW5nLgorCQkgKi8KKwkJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSB8fAorCQkgICAgKFBhZ2VBY3RpdmUocGFnZSkgJiYgIWFjdGl2ZSkgfHwKKwkJICAgICghUGFnZUFjdGl2ZShwYWdlKSAmJiBhY3RpdmUpKSB7CisJCQlfX21lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYywgcGFnZV9scnUocGFnZSkpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlzY2FuKys7CiAJCWxpc3RfbW92ZSgmcGMtPmxydSwgJnBjX2xpc3QpOwogCi0JCWlmIChfX2lzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgbW9kZSkgPT0gMCkgeworCQlpZiAoX19pc29sYXRlX2xydV9wYWdlKHBhZ2UsIG1vZGUsIGZpbGUpID09IDApIHsKIAkJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCBkc3QpOwogCQkJbnJfdGFrZW4rKzsKIAkJfQpAQCAtNTQwLDI2ICs0NzksMjcgQEAKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtOwogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG5yX3JldHJpZXMgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBjID0ga21lbV9jYWNoZV9hbGxvYyhwYWdlX2Nncm91cF9jYWNoZSwgZ2ZwX21hc2spOwotCWlmICh1bmxpa2VseShwYyA9PSBOVUxMKSkKLQkJZ290byBlcnI7Ci0KKwlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwkvKiBjYW4gaGFwcGVuIGF0IGJvb3QgKi8KKwlpZiAodW5saWtlbHkoIXBjKSkKKwkJcmV0dXJuIDA7CisJcHJlZmV0Y2h3KHBjKTsKIAkvKgogCSAqIFdlIGFsd2F5cyBjaGFyZ2UgdGhlIGNncm91cCB0aGUgbW1fc3RydWN0IGJlbG9uZ3MgdG8uCiAJICogVGhlIG1tX3N0cnVjdCdzIG1lbV9jZ3JvdXAgY2hhbmdlcyBvbiB0YXNrIG1pZ3JhdGlvbiBpZiB0aGUKIAkgKiB0aHJlYWQgZ3JvdXAgbGVhZGVyIG1pZ3JhdGVzLiBJdCdzIHBvc3NpYmxlIHRoYXQgbW0gaXMgbm90CiAJICogc2V0LCBpZiBzbyBjaGFyZ2UgdGhlIGluaXRfbW0gKGhhcHBlbnMgZm9yIHBhZ2VjYWNoZSB1c2FnZSkuCiAJICovCisKIAlpZiAobGlrZWx5KCFtZW1jZykpIHsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQltZW0gPSBtZW1fY2dyb3VwX2Zyb21fdGFzayhyY3VfZGVyZWZlcmVuY2UobW0tPm93bmVyKSk7CiAJCWlmICh1bmxpa2VseSghbWVtKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUocGFnZV9jZ3JvdXBfY2FjaGUsIHBjKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qCkBAIC01NzIsNyArNTEyLDcgQEAKIAkJY3NzX2dldCgmbWVtY2ctPmNzcyk7CiAJfQogCi0Jd2hpbGUgKHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSkpIHsKKwl3aGlsZSAodW5saWtlbHkocmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKSkpIHsKIAkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkKIAkJCWdvdG8gb3V0OwogCkBAIC01OTUsMzkgKzUzNSwzMyBAQAogCQl9CiAJfQogCisKKwlsb2NrX3BhZ2VfY2dyb3VwKHBjKTsKKwlpZiAodW5saWtlbHkoUGFnZUNncm91cFVzZWQocGMpKSkgeworCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CisJCWNzc19wdXQoJm1lbS0+Y3NzKTsKKworCQlnb3RvIGRvbmU7CisJfQogCXBjLT5tZW1fY2dyb3VwID0gbWVtOwotCXBjLT5wYWdlID0gcGFnZTsKIAkvKgogCSAqIElmIGEgcGFnZSBpcyBhY2NvdW50ZWQgYXMgYSBwYWdlIGNhY2hlLCBpbnNlcnQgdG8gaW5hY3RpdmUgbGlzdC4KIAkgKiBJZiBhbm9uLCBpbnNlcnQgdG8gYWN0aXZlIGxpc3QuCiAJICovCi0JaWYgKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEUpCi0JCXBjLT5mbGFncyA9IFBBR0VfQ0dST1VQX0ZMQUdfQ0FDSEU7Ci0JZWxzZQotCQlwYy0+ZmxhZ3MgPSBQQUdFX0NHUk9VUF9GTEFHX0FDVElWRTsKLQotCWxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JaWYgKHVubGlrZWx5KHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpKSkgewotCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKLQkJY3NzX3B1dCgmbWVtLT5jc3MpOwotCQlrbWVtX2NhY2hlX2ZyZWUocGFnZV9jZ3JvdXBfY2FjaGUsIHBjKTsKLQkJZ290byBkb25lOwotCX0KLQlwYWdlX2Fzc2lnbl9wYWdlX2Nncm91cChwYWdlLCBwYyk7CisJcGMtPmZsYWdzID0gcGNnX2RlZmF1bHRfZmxhZ3NbY3R5cGVdOwogCiAJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAJX19tZW1fY2dyb3VwX2FkZF9saXN0KG16LCBwYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CisJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAotCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKIGRvbmU6CiAJcmV0dXJuIDA7CiBvdXQ6CiAJY3NzX3B1dCgmbWVtLT5jc3MpOwotCWttZW1fY2FjaGVfZnJlZShwYWdlX2Nncm91cF9jYWNoZSwgcGMpOwotZXJyOgogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC02MzUsNyArNTY5LDggQEAKIHsKIAlpZiAobWVtX2Nncm91cF9zdWJzeXMuZGlzYWJsZWQpCiAJCXJldHVybiAwOwotCisJaWYgKFBhZ2VDb21wb3VuZChwYWdlKSkKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBJZiBhbHJlYWR5IG1hcHBlZCwgd2UgZG9uJ3QgaGF2ZSB0byBhY2NvdW50LgogCSAqIElmIHBhZ2UgY2FjaGUsIHBhZ2UtPm1hcHBpbmcgaGFzIGFkZHJlc3Nfc3BhY2UuCkBAIC02NTYsNyArNTkxLDggQEAKIHsKIAlpZiAobWVtX2Nncm91cF9zdWJzeXMuZGlzYWJsZWQpCiAJCXJldHVybiAwOwotCisJaWYgKFBhZ2VDb21wb3VuZChwYWdlKSkKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBDb3JuZXIgY2FzZSBoYW5kbGluZy4gVGhpcyBpcyBjYWxsZWQgZnJvbSBhZGRfdG9fcGFnZV9jYWNoZSgpCiAJICogaW4gdXN1YWwuIEJ1dCBzb21lIEZTIChzaG1lbSkgcHJlY2hhcmdlcyB0aGlzIHBhZ2UgYmVmb3JlIGNhbGxpbmcgaXQKQEAgLTY2OSwyMiArNjA1LDI3IEBACiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkgewogCQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCi0JCWxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JCWlmIChwYykgewotCQkJVk1fQlVHX09OKHBjLT5wYWdlICE9IHBhZ2UpOwotCQkJVk1fQlVHX09OKCFwYy0+bWVtX2Nncm91cCk7Ci0JCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CisKKwkJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CisJCWlmICghcGMpCisJCQlyZXR1cm4gMDsKKwkJbG9ja19wYWdlX2Nncm91cChwYyk7CisJCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpIHsKKwkJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CisJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJfQogCiAJaWYgKHVubGlrZWx5KCFtbSkpCiAJCW1tID0gJmluaXRfbW07CiAKLQlyZXR1cm4gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKKwlpZiAocGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKQorCQlyZXR1cm4gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKIAkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAorCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU0sIE5VTEwpOwogfQogCiAvKgpAQCAtNzA0LDQ0ICs2NDUsNDYgQEAKIAkvKgogCSAqIENoZWNrIGlmIG91ciBwYWdlX2Nncm91cCBpcyB2YWxpZAogCSAqLwotCWxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQlpZiAodW5saWtlbHkoIXBjKSkKLQkJZ290byB1bmxvY2s7CisJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CisJaWYgKHVubGlrZWx5KCFwYyB8fCAhUGFnZUNncm91cFVzZWQocGMpKSkKKwkJcmV0dXJuOwogCi0JVk1fQlVHX09OKHBjLT5wYWdlICE9IHBhZ2UpOwotCi0JaWYgKChjdHlwZSA9PSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCkKLQkgICAgJiYgKChwYy0+ZmxhZ3MgJiBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFKQotCQl8fCBwYWdlX21hcHBlZChwYWdlKSkpCi0JCWdvdG8gdW5sb2NrOworCWxvY2tfcGFnZV9jZ3JvdXAocGMpOworCWlmICgoY3R5cGUgPT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQgJiYgcGFnZV9tYXBwZWQocGFnZSkpCisJICAgICB8fCAhUGFnZUNncm91cFVzZWQocGMpKSB7CisJCS8qIFRoaXMgaGFwcGVucyBhdCByYWNlIGluIHphcF9wdGVfcmFuZ2UoKSBhbmQgZG9fc3dhcF9wYWdlKCkqLworCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOworCQlyZXR1cm47CisJfQorCUNsZWFyUGFnZUNncm91cFVzZWQocGMpOworCW1lbSA9IHBjLT5tZW1fY2dyb3VwOwogCiAJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCV9fbWVtX2Nncm91cF9yZW1vdmVfbGlzdChteiwgcGMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOworCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAKLQlwYWdlX2Fzc2lnbl9wYWdlX2Nncm91cChwYWdlLCBOVUxMKTsKLQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0KLQltZW0gPSBwYy0+bWVtX2Nncm91cDsKIAlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJY3NzX3B1dCgmbWVtLT5jc3MpOwogCi0Ja21lbV9jYWNoZV9mcmVlKHBhZ2VfY2dyb3VwX2NhY2hlLCBwYyk7CiAJcmV0dXJuOwotdW5sb2NrOgotCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKIH0KIAogdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJLyogZWFybHkgY2hlY2suICovCisJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpKQorCQlyZXR1cm47CisJaWYgKHBhZ2UtPm1hcHBpbmcgJiYgIVBhZ2VBbm9uKHBhZ2UpKQorCQlyZXR1cm47CiAJX19tZW1fY2dyb3VwX3VuY2hhcmdlX2NvbW1vbihwYWdlLCBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCk7CiB9CiAKIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCVZNX0JVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CisJVk1fQlVHX09OKHBhZ2UtPm1hcHBpbmcpOwogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9jb21tb24ocGFnZSwgTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9DQUNIRSk7CiB9CiAKQEAgLTc1OCwxNSArNzAxLDE5IEBACiAJaWYgKG1lbV9jZ3JvdXBfc3Vic3lzLmRpc2FibGVkKQogCQlyZXR1cm4gMDsKIAotCWxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQlpZiAocGMpIHsKKwlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwlsb2NrX3BhZ2VfY2dyb3VwKHBjKTsKKwlpZiAoUGFnZUNncm91cFVzZWQocGMpKSB7CiAJCW1lbSA9IHBjLT5tZW1fY2dyb3VwOwogCQljc3NfZ2V0KCZtZW0tPmNzcyk7Ci0JCWlmIChwYy0+ZmxhZ3MgJiBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFKQotCQkJY3R5cGUgPSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFOworCQlpZiAoUGFnZUNncm91cENhY2hlKHBjKSkgeworCQkJaWYgKHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkKKwkJCQljdHlwZSA9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEU7CisJCQllbHNlCisJCQkJY3R5cGUgPSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNOworCQl9CiAJfQotCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKKwl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCWlmIChtZW0pIHsKIAkJcmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKG5ld3BhZ2UsIE5VTEwsIEdGUF9LRVJORUwsCiAJCQljdHlwZSwgbWVtKTsKQEAgLTc5MSw3ICs3MzgsNyBAQAogCSAqLwogCWlmICghbmV3cGFnZS0+bWFwcGluZykKIAkJX19tZW1fY2dyb3VwX3VuY2hhcmdlX2NvbW1vbihuZXdwYWdlLAotCQkJCQkgTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9GT1JDRSk7CisJCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9GT1JDRSk7CiAJZWxzZSBpZiAoUGFnZUFub24obmV3cGFnZSkpCiAJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShuZXdwYWdlKTsKIH0KQEAgLTg2Myw3ICs4MTAsNyBAQAogI2RlZmluZSBGT1JDRV9VTkNIQVJHRV9CQVRDSAkoMTI4KQogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAotCQkJICAgIGludCBhY3RpdmUpCisJCQkgICAgZW51bSBscnVfbGlzdCBscnUpCiB7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTg3MSwxNSArODE4LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JaWYgKGFjdGl2ZSkKLQkJbGlzdCA9ICZtei0+YWN0aXZlX2xpc3Q7Ci0JZWxzZQotCQlsaXN0ID0gJm16LT5pbmFjdGl2ZV9saXN0OworCWxpc3QgPSAmbXotPmxpc3RzW2xydV07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CiAJCXBjID0gbGlzdF9lbnRyeShsaXN0LT5wcmV2LCBzdHJ1Y3QgcGFnZV9jZ3JvdXAsIGxydSk7CiAJCXBhZ2UgPSBwYy0+cGFnZTsKKwkJaWYgKCFQYWdlQ2dyb3VwVXNlZChwYykpCisJCQlicmVhazsKIAkJZ2V0X3BhZ2UocGFnZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCQkvKgpAQCAtODk0LDggKzg0MCwxMCBAQAogCQkJCWNvdW50ID0gRk9SQ0VfVU5DSEFSR0VfQkFUQ0g7CiAJCQkJY29uZF9yZXNjaGVkKCk7CiAJCQl9Ci0JCX0gZWxzZQotCQkJY29uZF9yZXNjaGVkKCk7CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CisJCQlicmVhazsKKwkJfQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwpAQCAtOTE5LDE1ICs4NjcsMTcgQEAKIAl3aGlsZSAobWVtLT5yZXMudXNhZ2UgPiAwKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmbWVtLT5jc3MuY2dyb3VwLT5jb3VudCkgPiAwKQogCQkJZ290byBvdXQ7CisJCS8qIFRoaXMgaXMgZm9yIG1ha2luZyBhbGwgKnVzZWQqIHBhZ2VzIHRvIGJlIG9uIExSVS4gKi8KKwkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKIAkJZm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX1BPU1NJQkxFKQogCQkJZm9yICh6aWQgPSAwOyB6aWQgPCBNQVhfTlJfWk9ORVM7IHppZCsrKSB7CiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OworCQkJCWVudW0gbHJ1X2xpc3QgbDsKIAkJCQlteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBub2RlLCB6aWQpOwotCQkJCS8qIGRyb3AgYWxsIHBhZ2VfY2dyb3VwIGluIGFjdGl2ZV9saXN0ICovCi0JCQkJbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0KG1lbSwgbXosIDEpOwotCQkJCS8qIGRyb3AgYWxsIHBhZ2VfY2dyb3VwIGluIGluYWN0aXZlX2xpc3QgKi8KLQkJCQltZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X2xpc3QobWVtLCBteiwgMCk7CisJCQkJZm9yX2VhY2hfbHJ1KGwpCisJCQkJCW1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfbGlzdChtZW0sIG16LCBsKTsKIAkJCX0KKwkJY29uZF9yZXNjaGVkKCk7CiAJfQogCXJldCA9IDA7CiBvdXQ6CkBAIC0xMDEyLDE0ICs5NjIsMjcgQEAKIAl9CiAJLyogc2hvd2luZyAjIG9mIGFjdGl2ZSBwYWdlcyAqLwogCXsKLQkJdW5zaWduZWQgbG9uZyBhY3RpdmUsIGluYWN0aXZlOworCQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9hbm9uLCBpbmFjdGl2ZV9hbm9uOworCQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9maWxlLCBpbmFjdGl2ZV9maWxlOworCQl1bnNpZ25lZCBsb25nIHVuZXZpY3RhYmxlOwogCi0JCWluYWN0aXZlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAotCQkJCQkJTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSk7Ci0JCWFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKLQkJCQkJCU1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFKTsKLQkJY2ItPmZpbGwoY2IsICJhY3RpdmUiLCAoYWN0aXZlKSAqIFBBR0VfU0laRSk7Ci0JCWNiLT5maWxsKGNiLCAiaW5hY3RpdmUiLCAoaW5hY3RpdmUpICogUEFHRV9TSVpFKTsKKwkJaW5hY3RpdmVfYW5vbiA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKKwkJCQkJCUxSVV9JTkFDVElWRV9BTk9OKTsKKwkJYWN0aXZlX2Fub24gPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCisJCQkJCQlMUlVfQUNUSVZFX0FOT04pOworCQlpbmFjdGl2ZV9maWxlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAorCQkJCQkJTFJVX0lOQUNUSVZFX0ZJTEUpOworCQlhY3RpdmVfZmlsZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKKwkJCQkJCUxSVV9BQ1RJVkVfRklMRSk7CisJCXVuZXZpY3RhYmxlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAorCQkJCQkJCUxSVV9VTkVWSUNUQUJMRSk7CisKKwkJY2ItPmZpbGwoY2IsICJhY3RpdmVfYW5vbiIsIChhY3RpdmVfYW5vbikgKiBQQUdFX1NJWkUpOworCQljYi0+ZmlsbChjYiwgImluYWN0aXZlX2Fub24iLCAoaW5hY3RpdmVfYW5vbikgKiBQQUdFX1NJWkUpOworCQljYi0+ZmlsbChjYiwgImFjdGl2ZV9maWxlIiwgKGFjdGl2ZV9maWxlKSAqIFBBR0VfU0laRSk7CisJCWNiLT5maWxsKGNiLCAiaW5hY3RpdmVfZmlsZSIsIChpbmFjdGl2ZV9maWxlKSAqIFBBR0VfU0laRSk7CisJCWNiLT5maWxsKGNiLCAidW5ldmljdGFibGUiLCB1bmV2aWN0YWJsZSAqIFBBR0VfU0laRSk7CisKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDYyLDYgKzEwMjUsNyBAQAogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CisJZW51bSBscnVfbGlzdCBsOwogCWludCB6b25lLCB0bXAgPSBub2RlOwogCS8qCiAJICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhZ2FpbnN0IHBvc3NpYmxlIG5vZGVzLgpAQCAtMTA4Miw5ICsxMDQ2LDkgQEAKIAogCWZvciAoem9uZSA9IDA7IHpvbmUgPCBNQVhfTlJfWk9ORVM7IHpvbmUrKykgewogCQlteiA9ICZwbi0+em9uZWluZm9bem9uZV07Ci0JCUlOSVRfTElTVF9IRUFEKCZtei0+YWN0aXZlX2xpc3QpOwotCQlJTklUX0xJU1RfSEVBRCgmbXotPmluYWN0aXZlX2xpc3QpOwogCQlzcGluX2xvY2tfaW5pdCgmbXotPmxydV9sb2NrKTsKKwkJZm9yX2VhY2hfbHJ1KGwpCisJCQlJTklUX0xJU1RfSEVBRCgmbXotPmxpc3RzW2xdKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTI1LDcgKzEwODksNiBAQAogCiAJaWYgKHVubGlrZWx5KChjb250LT5wYXJlbnQpID09IE5VTEwpKSB7CiAJCW1lbSA9ICZpbml0X21lbV9jZ3JvdXA7Ci0JCXBhZ2VfY2dyb3VwX2NhY2hlID0gS01FTV9DQUNIRShwYWdlX2Nncm91cCwgU0xBQl9QQU5JQyk7CiAJfSBlbHNlIHsKIAkJbWVtID0gbWVtX2Nncm91cF9hbGxvYygpOwogCQlpZiAoIW1lbSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMTAwMmY0Ny4uMTY0OTUxYyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTExMjksMTIgKzExMjksMTcgQEAKIAlyZXR1cm4gIXZtYS0+dm1fb3BzIHx8ICF2bWEtPnZtX29wcy0+ZmF1bHQ7CiB9CiAKLWludCBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAorCisKK2ludCBfX2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgZmxhZ3MsCiAJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IHZtX2ZsYWdzOworCXVuc2lnbmVkIGludCB2bV9mbGFncyA9IDA7CisJaW50IHdyaXRlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfV1JJVEUpOworCWludCBmb3JjZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0ZPUkNFKTsKKwlpbnQgaWdub3JlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUyk7CiAKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiAwOwpAQCAtMTE1OCw3ICsxMTYzLDkgQEAKIAkJCXB1ZF90ICpwdWQ7CiAJCQlwbWRfdCAqcG1kOwogCQkJcHRlX3QgKnB0ZTsKLQkJCWlmICh3cml0ZSkgLyogdXNlciBnYXRlIHBhZ2VzIGFyZSByZWFkLW9ubHkgKi8KKworCQkJLyogdXNlciBnYXRlIHBhZ2VzIGFyZSByZWFkLW9ubHkgKi8KKwkJCWlmICghaWdub3JlICYmIHdyaXRlKQogCQkJCXJldHVybiBpID8gOiAtRUZBVUxUOwogCQkJaWYgKHBnID4gVEFTS19TSVpFKQogCQkJCXBnZCA9IHBnZF9vZmZzZXRfayhwZyk7CkBAIC0xMTkwLDggKzExOTcsOSBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXZtYSB8fCAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpCi0JCQkJfHwgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKQorCQlpZiAoIXZtYSB8fAorCQkgICAgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSB8fAorCQkgICAgKCFpZ25vcmUgJiYgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKSkKIAkJCXJldHVybiBpID8gOiAtRUZBVUxUOwogCiAJCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkgewpAQCAtMTI2Niw2ICsxMjc0LDIzIEBACiAJfSB3aGlsZSAobGVuKTsKIAlyZXR1cm4gaTsKIH0KKworaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsCisJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCit7CisJaW50IGZsYWdzID0gMDsKKworCWlmICh3cml0ZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX1dSSVRFOworCWlmIChmb3JjZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX0ZPUkNFOworCisJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwKKwkJCQlzdGFydCwgbGVuLCBmbGFncywKKwkJCQlwYWdlcywgdm1hcyk7Cit9CisKIEVYUE9SVF9TWU1CT0woZ2V0X3VzZXJfcGFnZXMpOwogCiBwdGVfdCAqZ2V0X2xvY2tlZF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTEyOTYsMTggKzEzMjEsMTQgQEAKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAotCXJldHZhbCA9IG1lbV9jZ3JvdXBfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKLQogCXJldHZhbCA9IC1FSU5WQUw7CiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQlnb3RvIG91dF91bmNoYXJnZTsKKwkJZ290byBvdXQ7CiAJcmV0dmFsID0gLUVOT01FTTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAlwdGUgPSBnZXRfbG9ja2VkX3B0ZShtbSwgYWRkciwgJnB0bCk7CiAJaWYgKCFwdGUpCi0JCWdvdG8gb3V0X3VuY2hhcmdlOworCQlnb3RvIG91dDsKIAlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKCFwdGVfbm9uZSgqcHRlKSkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTMyMyw4ICsxMzQ0LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogb3V0X3VubG9jazoKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKLW91dF91bmNoYXJnZToKLQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE4NTgsNiArMTg3NywxNSBAQAogCW5ld19wYWdlID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsIHZtYSwgYWRkcmVzcyk7CiAJaWYgKCFuZXdfcGFnZSkKIAkJZ290byBvb207CisJLyoKKwkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKKwkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJbG9ja19wYWdlKG9sZF9wYWdlKTsJLyogZm9yIExSVSBtYW5pcHVsYXRpb24gKi8KKwkJY2xlYXJfcGFnZV9tbG9jayhvbGRfcGFnZSk7CisJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKKwl9CiAJY293X3VzZXJfcGFnZShuZXdfcGFnZSwgb2xkX3BhZ2UsIGFkZHJlc3MsIHZtYSk7CiAJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOwogCkBAIC0xODg2LDExICsxOTE0LDEzIEBACiAJCSAqIHRocmVhZCBkb2luZyBDT1cuCiAJCSAqLwogCQlwdGVwX2NsZWFyX2ZsdXNoX25vdGlmeSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwotCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7Ci0JCWxydV9jYWNoZV9hZGRfYWN0aXZlKG5ld19wYWdlKTsKKwkJU2V0UGFnZVN3YXBCYWNrZWQobmV3X3BhZ2UpOworCQlscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShuZXdfcGFnZSwgdm1hKTsKIAkJcGFnZV9hZGRfbmV3X2Fub25fcm1hcChuZXdfcGFnZSwgdm1hLCBhZGRyZXNzKTsKIAorLy9UT0RPOiAgaXMgdGhpcyBzYWZlPyAgZG9fYW5vbnltb3VzX3BhZ2UoKSBkb2VzIGl0IHRoaXMgd2F5LgorCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CiAJCWlmIChvbGRfcGFnZSkgewogCQkJLyoKIAkJCSAqIE9ubHkgYWZ0ZXIgc3dpdGNoaW5nIHRoZSBwdGUgdG8gdGhlIG5ldyBwYWdlIG1heQpAQCAtMjI4OCwxNiArMjMxOCwxNyBAQAogCQljb3VudF92bV9ldmVudChQR01BSkZBVUxUKTsKIAl9CiAKLQlpZiAobWVtX2Nncm91cF9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSB7Ci0JCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwotCQlyZXQgPSBWTV9GQVVMVF9PT007Ci0JCWdvdG8gb3V0OwotCX0KLQogCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwogCWxvY2tfcGFnZShwYWdlKTsKIAlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKIAorCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0gVk1fRkFVTFRfT09NOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJZ290byBvdXQ7CisJfQorCiAJLyoKIAkgKiBCYWNrIG91dCBpZiBzb21lYm9keSBlbHNlIGFscmVhZHkgZmF1bHRlZCBpbiB0aGlzIHB0ZS4KIAkgKi8KQEAgLTIzMjQsNyArMjM1NSw3IEBACiAJcGFnZV9hZGRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAKIAlzd2FwX2ZyZWUoZW50cnkpOwotCWlmICh2bV9zd2FwX2Z1bGwoKSkKKwlpZiAodm1fc3dhcF9mdWxsKCkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHx8IFBhZ2VNbG9ja2VkKHBhZ2UpKQogCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIApAQCAtMjM4Miw3ICsyNDEzLDggQEAKIAlpZiAoIXB0ZV9ub25lKCpwYWdlX3RhYmxlKSkKIAkJZ290byByZWxlYXNlOwogCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7Ci0JbHJ1X2NhY2hlX2FkZF9hY3RpdmUocGFnZSk7CisJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7CisJbHJ1X2NhY2hlX2FkZF9hY3RpdmVfb3JfdW5ldmljdGFibGUocGFnZSwgdm1hKTsKIAlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCkBAIC0yNDIzLDYgKzI0NTUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXB0ZV90IGVudHJ5OwogCWludCBhbm9uID0gMDsKKwlpbnQgY2hhcmdlZCA9IDA7CiAJc3RydWN0IHBhZ2UgKmRpcnR5X3BhZ2UgPSBOVUxMOwogCXN0cnVjdCB2bV9mYXVsdCB2bWY7CiAJaW50IHJldDsKQEAgLTI0NjMsNiArMjQ5NiwxOCBAQAogCQkJCXJldCA9IFZNX0ZBVUxUX09PTTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KKwkJCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKKwkJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJY2hhcmdlZCA9IDE7CisJCQkvKgorCQkJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCisJCQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJCQkgKi8KKwkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQorCQkJCWNsZWFyX3BhZ2VfbWxvY2sodm1mLnBhZ2UpOwogCQkJY29weV91c2VyX2hpZ2hwYWdlKHBhZ2UsIHZtZi5wYWdlLCBhZGRyZXNzLCB2bWEpOwogCQkJX19TZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCX0gZWxzZSB7CkBAIC0yNDk3LDExICsyNTQyLDYgQEAKIAogCX0KIAotCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKLQkJcmV0ID0gVk1fRkFVTFRfT09NOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlwYWdlX3RhYmxlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyZXNzLCAmcHRsKTsKIAogCS8qCkBAIC0yNTIwLDExICsyNTYwLDExIEBACiAJCWVudHJ5ID0gbWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KTsKIAkJaWYgKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkKIAkJCWVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7Ci0JCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAkJaWYgKGFub24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKKwkJCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQlTZXRQYWdlU3dhcEJhY2tlZChwYWdlKTsKKwkJCWxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHBhZ2UsIHZtYSk7CisJCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJCX0gZWxzZSB7CiAJCQlpbmNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwogCQkJcGFnZV9hZGRfZmlsZV9ybWFwKHBhZ2UpOwpAQCAtMjUzMywxMSArMjU3MywxNCBAQAogCQkJCWdldF9wYWdlKGRpcnR5X3BhZ2UpOwogCQkJfQogCQl9CisvL1RPRE86ICBpcyB0aGlzIHNhZmU/ICBkb19hbm9ueW1vdXNfcGFnZSgpIGRvZXMgaXQgdGhpcyB3YXkuCisJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAogCQkvKiBubyBuZWVkIHRvIGludmFsaWRhdGU6IGEgbm90LXByZXNlbnQgcGFnZSB3b24ndCBiZSBjYWNoZWQgKi8KIAkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAl9IGVsc2UgewotCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CisJCWlmIChjaGFyZ2VkKQorCQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOwogCQlpZiAoYW5vbikKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJZWxzZQpAQCAtMjc3MiwxOSArMjgxNSw5IEBACiAJbGVuID0gRElWX1JPVU5EX1VQKGVuZCwgUEFHRV9TSVpFKSAtIGFkZHIvUEFHRV9TSVpFOwogCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLAogCQkJbGVuLCB3cml0ZSwgMCwgTlVMTCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJLyoKLQkJICAgU1VTIHJlcXVpcmUgc3RyYW5nZSByZXR1cm4gdmFsdWUgdG8gbWxvY2sKLQkJICAgIC0gaW52YWxpZCBhZGRyIGdlbmVyYXRlIHRvIEVOT01FTS4KLQkJICAgIC0gb3V0IG9mIG1lbW9yeSBzaG91bGQgZ2VuZXJhdGUgRUFHQUlOLgotCQkqLwotCQlpZiAocmV0ID09IC1FRkFVTFQpCi0JCQlyZXQgPSAtRU5PTUVNOwotCQllbHNlIGlmIChyZXQgPT0gLUVOT01FTSkKLQkJCXJldCA9IC1FQUdBSU47CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiByZXQgPT0gbGVuID8gMCA6IC1FTk9NRU07CisJcmV0dXJuIHJldCA9PSBsZW4gPyAwIDogLUVGQVVMVDsKIH0KIAogI2lmICFkZWZpbmVkKF9fSEFWRV9BUkNIX0dBVEVfQVJFQSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDg5ZmVlMmQuLjY4MzdhMTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtMzIzLDExICszMjQsMTEgQEAKIAlCVUdfT04ocGh5c19zdGFydF9wZm4gJiB+UEFHRV9TRUNUSU9OX01BU0spOwogCUJVR19PTihucl9wYWdlcyAlIFBBR0VTX1BFUl9TRUNUSU9OKTsKIAotCXJlbGVhc2VfbWVtX3JlZ2lvbihwaHlzX3N0YXJ0X3BmbiA8PCBQQUdFX1NISUZULCBucl9wYWdlcyAqIFBBR0VfU0laRSk7Ci0KIAlzZWN0aW9uc190b19yZW1vdmUgPSBucl9wYWdlcyAvIFBBR0VTX1BFUl9TRUNUSU9OOwogCWZvciAoaSA9IDA7IGkgPCBzZWN0aW9uc190b19yZW1vdmU7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHBmbiA9IHBoeXNfc3RhcnRfcGZuICsgaSpQQUdFU19QRVJfU0VDVElPTjsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBmbiA8PCBQQUdFX1NISUZULAorCQkJCSAgIFBBR0VTX1BFUl9TRUNUSU9OIDw8IFBBR0VfU0hJRlQpOwogCQlyZXQgPSBfX3JlbW92ZV9zZWN0aW9uKHpvbmUsIF9fcGZuX3RvX3NlY3Rpb24ocGZuKSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTY1Nyw4ICs2NTgsOSBAQAogCQkgKiBXZSBjYW4gc2tpcCBmcmVlIHBhZ2VzLiBBbmQgd2UgY2FuIG9ubHkgZGVhbCB3aXRoIHBhZ2VzIG9uCiAJCSAqIExSVS4KIAkJICovCi0JCXJldCA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgJnNvdXJjZSk7CisJCXJldCA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSk7CiAJCWlmICghcmV0KSB7IC8qIFN1Y2Nlc3MgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnNvdXJjZSk7CiAJCQltb3ZlX3BhZ2VzLS07CiAJCX0gZWxzZSB7CiAJCQkvKiBCZWNhc3VlIHdlIGRvbid0IGhhdmUgYmlnIHpvbmUtPmxvY2suIHdlIHNob3VsZApAQCAtODQ5LDEwICs4NTEsMTkgQEAKIAogCXJldHVybiByZXQ7CiB9CisKK2ludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CisKKwlzdGFydF9wZm4gPSBQRk5fRE9XTihzdGFydCk7CisJZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBGTl9ET1dOKHNpemUpOworCXJldHVybiBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOworfQogI2Vsc2UKIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfbWVtb3J5KTsKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqLworRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDgzMzY5MDUuLjM2ZjQyNTcgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC05Myw2ICs5Myw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIC8qIEludGVybmFsIGZsYWdzICovCiAjZGVmaW5lIE1QT0xfTUZfRElTQ09OVElHX09LIChNUE9MX01GX0lOVEVSTkFMIDw8IDApCS8qIFNraXAgY2hlY2tzIGZvciBjb250aW51b3VzIHZtYXMgKi8KICNkZWZpbmUgTVBPTF9NRl9JTlZFUlQgKE1QT0xfTUZfSU5URVJOQUwgPDwgMSkJCS8qIEludmVydCBjaGVjayBmb3Igbm9kZW1hc2sgKi8KQEAgLTc2Miw4ICs3NjQsMTEgQEAKIAkvKgogCSAqIEF2b2lkIG1pZ3JhdGluZyBhIHBhZ2UgdGhhdCBpcyBzaGFyZWQgd2l0aCBvdGhlcnMuCiAJICovCi0JaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkKLQkJaXNvbGF0ZV9scnVfcGFnZShwYWdlLCBwYWdlbGlzdCk7CisJaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkgeworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgcGFnZWxpc3QpOworCQl9CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHBhZ2UgKm5ld19ub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbm9kZSwgaW50ICoqeCkKQEAgLTIxOTcsNyArMjIwMiw3IEBACiAJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCiAJCW1kLT5zd2FwY2FjaGUrKzsKIAotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQorCWlmIChQYWdlQWN0aXZlKHBhZ2UpIHx8IFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKIAkJbWQtPmFjdGl2ZSsrOwogCiAJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkpCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMmE4MDEzNi4uNjYwMjk0MSAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMzcsMzYgKzM3LDYgQEAKICNkZWZpbmUgbHJ1X3RvX3BhZ2UoX2hlYWQpIChsaXN0X2VudHJ5KChfaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpKQogCiAvKgotICogSXNvbGF0ZSBvbmUgcGFnZSBmcm9tIHRoZSBMUlUgbGlzdHMuIElmIHN1Y2Nlc3NmdWwgcHV0IGl0IG9udG8KLSAqIHRoZSBpbmRpY2F0ZWQgbGlzdCB3aXRoIGVsZXZhdGVkIHBhZ2UgY291bnQuCi0gKgotICogUmVzdWx0OgotICogIC1FQlVTWTogcGFnZSBub3Qgb24gTFJVIGxpc3QKLSAqICAwOiBwYWdlIHJlbW92ZWQgZnJvbSBMUlUgbGlzdCBhbmQgYWRkZWQgdG8gdGhlIHNwZWNpZmllZCBsaXN0LgotICovCi1pbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCi17Ci0JaW50IHJldCA9IC1FQlVTWTsKLQotCWlmIChQYWdlTFJVKHBhZ2UpKSB7Ci0JCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwotCi0JCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpIHsKLQkJCXJldCA9IDA7Ci0JCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0JCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKLQkJCQlkZWxfcGFnZV9mcm9tX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwotCQkJZWxzZQotCQkJCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgcGFnZWxpc3QpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgogICogbWlncmF0ZV9wcmVwKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB3ZSBzdGFydCBjb21waWxpbmcgYSBsaXN0IG9mIHBhZ2VzCiAgKiB0byBiZSBtaWdyYXRlZCB1c2luZyBpc29sYXRlX2xydV9wYWdlKCkuCiAgKi8KQEAgLTgzLDIzICs1Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX3RvX2xydShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewotCQkvKgotCQkgKiBscnVfY2FjaGVfYWRkX2FjdGl2ZSBjaGVja3MgdGhhdAotCQkgKiB0aGUgUEdfYWN0aXZlIGJpdCBpcyBvZmYuCi0JCSAqLwotCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7Ci0JCWxydV9jYWNoZV9hZGRfYWN0aXZlKHBhZ2UpOwotCX0gZWxzZSB7Ci0JCWxydV9jYWNoZV9hZGQocGFnZSk7Ci0JfQotCXB1dF9wYWdlKHBhZ2UpOwotfQotCiAvKgotICogQWRkIGlzb2xhdGVkIHBhZ2VzIG9uIHRoZSBsaXN0IGJhY2sgdG8gdGhlIExSVS4KKyAqIEFkZCBpc29sYXRlZCBwYWdlcyBvbiB0aGUgbGlzdCBiYWNrIHRvIHRoZSBMUlUgdW5kZXIgcGFnZSBsb2NrCisgKiB0byBhdm9pZCBsZWFraW5nIGV2aWN0YWJsZSBwYWdlcyBiYWNrIG9udG8gdW5ldmljdGFibGUgbGlzdC4KICAqCiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgcHV0IGJhY2suCiAgKi8KQEAgLTExMSw3ICs2Nyw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgcGFnZTIsIGwsIGxydSkgewogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJbW92ZV90b19scnUocGFnZSk7CisJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CiAJCWNvdW50Kys7CiAJfQogCXJldHVybiBjb3VudDsKQEAgLTM3NCw4ICszMzAsNiBAQAogCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShuZXdwYWdlLCBOUl9GSUxFX1BBR0VTKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKLQlpZiAoIVBhZ2VTd2FwQ2FjaGUobmV3cGFnZSkpCi0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzg1LDYgKzMzOSw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1pZ3JhdGVfcGFnZV9jb3B5KHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlpbnQgYW5vbjsKKwogCWNvcHlfaGlnaHBhZ2UobmV3cGFnZSwgcGFnZSk7CiAKIAlpZiAoUGFnZUVycm9yKHBhZ2UpKQpAQCAtMzkzLDggKzM0OSwxMSBAQAogCQlTZXRQYWdlUmVmZXJlbmNlZChuZXdwYWdlKTsKIAlpZiAoUGFnZVVwdG9kYXRlKHBhZ2UpKQogCQlTZXRQYWdlVXB0b2RhdGUobmV3cGFnZSk7Ci0JaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJaWYgKFRlc3RDbGVhclBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJVk1fQlVHX09OKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSk7CiAJCVNldFBhZ2VBY3RpdmUobmV3cGFnZSk7CisJfSBlbHNlCisJCXVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZShuZXdwYWdlLCBwYWdlKTsKIAlpZiAoUGFnZUNoZWNrZWQocGFnZSkpCiAJCVNldFBhZ2VDaGVja2VkKG5ld3BhZ2UpOwogCWlmIChQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpKQpAQCAtNDEyLDE0ICszNzEsMjAgQEAKIAkJX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMobmV3cGFnZSk7CiAgCX0KIAorCW1sb2NrX21pZ3JhdGVfcGFnZShuZXdwYWdlLCBwYWdlKTsKKwogI2lmZGVmIENPTkZJR19TV0FQCiAJQ2xlYXJQYWdlU3dhcENhY2hlKHBhZ2UpOwogI2VuZGlmCi0JQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwogCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwkvKiBwYWdlLT5tYXBwaW5nIGNvbnRhaW5zIGEgZmxhZyBmb3IgUGFnZUFub24oKSAqLworCWFub24gPSBQYWdlQW5vbihwYWdlKTsKIAlwYWdlLT5tYXBwaW5nID0gTlVMTDsKIAorCWlmICghYW5vbikgLyogVGhpcyBwYWdlIHdhcyByZW1vdmVkIGZyb20gcmFkaXgtdHJlZS4gKi8KKwkJbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHBhZ2UpOworCiAJLyoKIAkgKiBJZiBhbnkgd2FpdGVycyBoYXZlIGFjY3VtdWxhdGVkIG9uIHRoZSBuZXcgcGFnZSB0aGVuCiAJICogd2FrZSB0aGVtIHVwLgpAQCAtNTk0LDYgKzU1OSwxMCBAQAogICoKICAqIFRoZSBuZXcgcGFnZSB3aWxsIGhhdmUgcmVwbGFjZWQgdGhlIG9sZCBwYWdlIGlmIHRoaXMgZnVuY3Rpb24KICAqIGlzIHN1Y2Nlc3NmdWwuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogICA8IDAgLSBlcnJvciBjb2RlCisgKiAgPT0gMCAtIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBtb3ZlX3RvX25ld19wYWdlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTYxMSw2ICs1ODAsOCBAQAogCS8qIFByZXBhcmUgbWFwcGluZyBmb3IgdGhlIG5ldyBwYWdlLiovCiAJbmV3cGFnZS0+aW5kZXggPSBwYWdlLT5pbmRleDsKIAluZXdwYWdlLT5tYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpCisJCVNldFBhZ2VTd2FwQmFja2VkKG5ld3BhZ2UpOwogCiAJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIAlpZiAoIW1hcHBpbmcpCkBAIC02NTQsOSArNjI1LDEwIEBACiAJaWYgKCFuZXdwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpCisJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSkgewogCQkvKiBwYWdlIHdhcyBmcmVlZCBmcm9tIHVuZGVyIHVzLiBTbyB3ZSBhcmUgZG9uZS4gKi8KIAkJZ290byBtb3ZlX25ld3BhZ2U7CisJfQogCiAJY2hhcmdlID0gbWVtX2Nncm91cF9wcmVwYXJlX21pZ3JhdGlvbihwYWdlLCBuZXdwYWdlKTsKIAlpZiAoY2hhcmdlID09IC1FTk9NRU0pIHsKQEAgLTczMCw3ICs3MDIsNiBAQAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAogdW5sb2NrOgotCiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAKIAlpZiAocmMgIT0gLUVBR0FJTikgewpAQCAtNzQxLDE3ICs3MTIsMTkgQEAKICAJCSAqIHJlc3RvcmVkLgogIAkJICovCiAgCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLSAJCW1vdmVfdG9fbHJ1KHBhZ2UpOworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwogCX0KIAogbW92ZV9uZXdwYWdlOgogCWlmICghY2hhcmdlKQogCQltZW1fY2dyb3VwX2VuZF9taWdyYXRpb24obmV3cGFnZSk7CisKIAkvKgogCSAqIE1vdmUgdGhlIG5ldyBwYWdlIHRvIHRoZSBMUlUuIElmIG1pZ3JhdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwKIAkgKiB0aGVuIHRoaXMgd2lsbCBmcmVlIHRoZSBwYWdlLgogCSAqLwotCW1vdmVfdG9fbHJ1KG5ld3BhZ2UpOworCXB1dGJhY2tfbHJ1X3BhZ2UobmV3cGFnZSk7CisKIAlpZiAocmVzdWx0KSB7CiAJCWlmIChyYykKIAkJCSpyZXN1bHQgPSByYzsKQEAgLTg1OCw5ICs4MzEsMTEgQEAKICAqIE1vdmUgYSBzZXQgb2YgcGFnZXMgYXMgaW5kaWNhdGVkIGluIHRoZSBwbSBhcnJheS4gVGhlIGFkZHIKICAqIGZpZWxkIG11c3QgYmUgc2V0IHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhZ2UgdG8gYmUgbW92ZWQKICAqIGFuZCB0aGUgbm9kZSBudW1iZXIgbXVzdCBjb250YWluIGEgdmFsaWQgdGFyZ2V0IG5vZGUuCisgKiBUaGUgcG0gYXJyYXkgZW5kcyB3aXRoIG5vZGUgPSBNQVhfTlVNTk9ERVMuCiAgKi8KLXN0YXRpYyBpbnQgZG9fbW92ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0sCi0JCQkJaW50IG1pZ3JhdGVfYWxsKQorc3RhdGljIGludCBkb19tb3ZlX3BhZ2VfdG9fbm9kZV9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICBzdHJ1Y3QgcGFnZV90b19ub2RlICpwbSwKKwkJCQkgICAgICBpbnQgbWlncmF0ZV9hbGwpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcGFnZV90b19ub2RlICpwcDsKQEAgLTkxNCw3ICs4ODksOSBAQAogCQkJCSFtaWdyYXRlX2FsbCkKIAkJCWdvdG8gcHV0X2FuZF9zZXQ7CiAKLQkJZXJyID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlLCAmcGFnZWxpc3QpOworCQllcnIgPSBpc29sYXRlX2xydV9wYWdlKHBhZ2UpOworCQlpZiAoIWVycikKKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnBhZ2VsaXN0KTsKIHB1dF9hbmRfc2V0OgogCQkvKgogCQkgKiBFaXRoZXIgcmVtb3ZlIHRoZSBkdXBsaWNhdGUgcmVmY291bnQgZnJvbQpAQCAtOTI2LDM2ICs5MDMsMTE4IEBACiAJCXBwLT5zdGF0dXMgPSBlcnI7CiAJfQogCisJZXJyID0gMDsKIAlpZiAoIWxpc3RfZW1wdHkoJnBhZ2VsaXN0KSkKIAkJZXJyID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlX25vZGUsCiAJCQkJKHVuc2lnbmVkIGxvbmcpcG0pOwotCWVsc2UKLQkJZXJyID0gLUVOT0VOVDsKIAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIAogLyoKLSAqIERldGVybWluZSB0aGUgbm9kZXMgb2YgYSBsaXN0IG9mIHBhZ2VzLiBUaGUgYWRkciBpbiB0aGUgcG0gYXJyYXkKLSAqIG11c3QgaGF2ZSBiZWVuIHNldCB0byB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHdoaWNoIHdlIHdhbnQgdG8gZGV0ZXJtaW5lCi0gKiB0aGUgbm9kZSBudW1iZXIuCisgKiBNaWdyYXRlIGFuIGFycmF5IG9mIHBhZ2UgYWRkcmVzcyBvbnRvIGFuIGFycmF5IG9mIG5vZGVzIGFuZCBmaWxsCisgKiB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBvZiBzdGF0dXMuCiAgKi8KLXN0YXRpYyBpbnQgZG9fcGFnZXNfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0pCitzdGF0aWMgaW50IGRvX3BhZ2VzX21vdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCSB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJIGNvbnN0IHZvaWQgX191c2VyICogX191c2VyICpwYWdlcywKKwkJCSBjb25zdCBpbnQgX191c2VyICpub2RlcywKKwkJCSBpbnQgX191c2VyICpzdGF0dXMsIGludCBmbGFncykKIHsKLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0gPSBOVUxMOworCW5vZGVtYXNrX3QgdGFza19ub2RlczsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKIAotCWZvciAoIDsgcG0tPm5vZGUgIT0gTUFYX05VTU5PREVTOyBwbSsrKSB7Ci0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJaW50IGVycjsKKwl0YXNrX25vZGVzID0gY3B1c2V0X21lbXNfYWxsb3dlZCh0YXNrKTsKKworCS8qIExpbWl0IG5yX3BhZ2VzIHNvIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIG1heSBub3Qgb3ZlcmZsb3cgKi8KKwlpZiAobnJfcGFnZXMgPj0gVUxPTkdfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlX3RvX25vZGUpIC0gMSkgeworCQllcnIgPSAtRTJCSUc7CisJCWdvdG8gb3V0OworCX0KKworCXBtID0gdm1hbGxvYygobnJfcGFnZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSk7CisJaWYgKCFwbSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEdldCBwYXJhbWV0ZXJzIGZyb20gdXNlciBzcGFjZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcG0KKwkgKiBhcnJheS4gUmV0dXJuIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSB1c2VyIGRpZCBzb21ldGhpbmcgd3JvbmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJY29uc3Qgdm9pZCBfX3VzZXIgKnA7CiAKIAkJZXJyID0gLUVGQVVMVDsKLQkJdm1hID0gZmluZF92bWEobW0sIHBtLT5hZGRyKTsKKwkJaWYgKGdldF91c2VyKHAsIHBhZ2VzICsgaSkpCisJCQlnb3RvIG91dF9wbTsKKworCQlwbVtpXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKKwkJaWYgKG5vZGVzKSB7CisJCQlpbnQgbm9kZTsKKworCQkJaWYgKGdldF91c2VyKG5vZGUsIG5vZGVzICsgaSkpCisJCQkJZ290byBvdXRfcG07CisKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlpZiAoIW5vZGVfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSkpCisJCQkJZ290byBvdXRfcG07CisKKwkJCWVyciA9IC1FQUNDRVM7CisJCQlpZiAoIW5vZGVfaXNzZXQobm9kZSwgdGFza19ub2RlcykpCisJCQkJZ290byBvdXRfcG07CisKKwkJCXBtW2ldLm5vZGUgPSBub2RlOworCQl9IGVsc2UKKwkJCXBtW2ldLm5vZGUgPSAwOwkvKiBhbnl0aGluZyB0byBub3QgbWF0Y2ggTUFYX05VTU5PREVTICovCisJfQorCS8qIEVuZCBtYXJrZXIgKi8KKwlwbVtucl9wYWdlc10ubm9kZSA9IE1BWF9OVU1OT0RFUzsKKworCWVyciA9IGRvX21vdmVfcGFnZV90b19ub2RlX2FycmF5KG1tLCBwbSwgZmxhZ3MgJiBNUE9MX01GX01PVkVfQUxMKTsKKwlpZiAoZXJyID49IDApCisJCS8qIFJldHVybiBzdGF0dXMgaW5mb3JtYXRpb24gKi8KKwkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspCisJCQlpZiAocHV0X3VzZXIocG1baV0uc3RhdHVzLCBzdGF0dXMgKyBpKSkKKwkJCQllcnIgPSAtRUZBVUxUOworCitvdXRfcG06CisJdmZyZWUocG0pOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgdGhlIG5vZGVzIG9mIGFuIGFycmF5IG9mIHBhZ2VzIGFuZCBzdG9yZSBpdCBpbiBhbiBhcnJheSBvZiBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgZG9fcGFnZXNfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSBjb25zdCB2b2lkIF9fdXNlciAqIF9fdXNlciAqcGFnZXMsCisJCQkgaW50IF9fdXNlciAqc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwlpbnQgZXJyOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJY29uc3Qgdm9pZCBfX3VzZXIgKnA7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCWVyciA9IC1FRkFVTFQ7CisJCWlmIChnZXRfdXNlcihwLCBwYWdlcytpKSkKKwkJCWdvdG8gb3V0OworCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHA7CisKKwkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwogCQlpZiAoIXZtYSkKIAkJCWdvdG8gc2V0X3N0YXR1czsKIAotCQlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBwbS0+YWRkciwgMCk7CisJCXBhZ2UgPSBmb2xsb3dfcGFnZSh2bWEsIGFkZHIsIDApOwogCiAJCWVyciA9IFBUUl9FUlIocGFnZSk7CiAJCWlmIChJU19FUlIocGFnZSkpCkBAIC05NjgsMTEgKzEwMjcsMTMgQEAKIAogCQllcnIgPSBwYWdlX3RvX25pZChwYWdlKTsKIHNldF9zdGF0dXM6Ci0JCXBtLT5zdGF0dXMgPSBlcnI7CisJCXB1dF91c2VyKGVyciwgc3RhdHVzK2kpOwogCX0KKwllcnIgPSAwOwogCitvdXQ6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtOTg0LDEyICsxMDQ1LDkgQEAKIAkJCWNvbnN0IGludCBfX3VzZXIgKm5vZGVzLAogCQkJaW50IF9fdXNlciAqc3RhdHVzLCBpbnQgZmxhZ3MpCiB7Ci0JaW50IGVyciA9IDA7Ci0JaW50IGk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCW5vZGVtYXNrX3QgdGFza19ub2RlczsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlzdHJ1Y3QgcGFnZV90b19ub2RlICpwbSA9IE5VTEw7CisJaW50IGVycjsKIAogCS8qIENoZWNrIGZsYWdzICovCiAJaWYgKGZsYWdzICYgfihNUE9MX01GX01PVkV8TVBPTF9NRl9NT1ZFX0FMTCkpCkBAIC0xMDIxLDc1ICsxMDc5LDIxIEBACiAJICAgIChjdXJyZW50LT51aWQgIT0gdGFzay0+c3VpZCkgJiYgKGN1cnJlbnQtPnVpZCAhPSB0YXNrLT51aWQpICYmCiAJICAgICFjYXBhYmxlKENBUF9TWVNfTklDRSkpIHsKIAkJZXJyID0gLUVQRVJNOwotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0OwogCX0KIAogIAllcnIgPSBzZWN1cml0eV90YXNrX21vdmVtZW1vcnkodGFzayk7CiAgCWlmIChlcnIpCi0gCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0OwogCi0KLQl0YXNrX25vZGVzID0gY3B1c2V0X21lbXNfYWxsb3dlZCh0YXNrKTsKLQotCS8qIExpbWl0IG5yX3BhZ2VzIHNvIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIG1heSBub3Qgb3ZlcmZsb3cgKi8KLQlpZiAobnJfcGFnZXMgPj0gVUxPTkdfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlX3RvX25vZGUpIC0gMSkgewotCQllcnIgPSAtRTJCSUc7Ci0JCWdvdG8gb3V0MjsKKwlpZiAobm9kZXMpIHsKKwkJZXJyID0gZG9fcGFnZXNfbW92ZShtbSwgdGFzaywgbnJfcGFnZXMsIHBhZ2VzLCBub2Rlcywgc3RhdHVzLAorCQkJCSAgICBmbGFncyk7CisJfSBlbHNlIHsKKwkJZXJyID0gZG9fcGFnZXNfc3RhdChtbSwgbnJfcGFnZXMsIHBhZ2VzLCBzdGF0dXMpOwogCX0KIAotCXBtID0gdm1hbGxvYygobnJfcGFnZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSk7Ci0JaWYgKCFwbSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDI7Ci0JfQotCi0JLyoKLQkgKiBHZXQgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3BhY2UgYW5kIGluaXRpYWxpemUgdGhlIHBtCi0JICogYXJyYXkuIFJldHVybiB2YXJpb3VzIGVycm9ycyBpZiB0aGUgdXNlciBkaWQgc29tZXRoaW5nIHdyb25nLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7Ci0JCWNvbnN0IHZvaWQgX191c2VyICpwOwotCi0JCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChnZXRfdXNlcihwLCBwYWdlcyArIGkpKQotCQkJZ290byBvdXQ7Ci0KLQkJcG1baV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7Ci0JCWlmIChub2RlcykgewotCQkJaW50IG5vZGU7Ci0KLQkJCWlmIChnZXRfdXNlcihub2RlLCBub2RlcyArIGkpKQotCQkJCWdvdG8gb3V0OwotCi0JCQllcnIgPSAtRU5PREVWOwotCQkJaWYgKCFub2RlX3N0YXRlKG5vZGUsIE5fSElHSF9NRU1PUlkpKQotCQkJCWdvdG8gb3V0OwotCi0JCQllcnIgPSAtRUFDQ0VTOwotCQkJaWYgKCFub2RlX2lzc2V0KG5vZGUsIHRhc2tfbm9kZXMpKQotCQkJCWdvdG8gb3V0OwotCi0JCQlwbVtpXS5ub2RlID0gbm9kZTsKLQkJfSBlbHNlCi0JCQlwbVtpXS5ub2RlID0gMDsJLyogYW55dGhpbmcgdG8gbm90IG1hdGNoIE1BWF9OVU1OT0RFUyAqLwotCX0KLQkvKiBFbmQgbWFya2VyICovCi0JcG1bbnJfcGFnZXNdLm5vZGUgPSBNQVhfTlVNTk9ERVM7Ci0KLQlpZiAobm9kZXMpCi0JCWVyciA9IGRvX21vdmVfcGFnZXMobW0sIHBtLCBmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpOwotCWVsc2UKLQkJZXJyID0gZG9fcGFnZXNfc3RhdChtbSwgcG0pOwotCi0JaWYgKGVyciA+PSAwKQotCQkvKiBSZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uICovCi0JCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQotCQkJaWYgKHB1dF91c2VyKHBtW2ldLnN0YXR1cywgc3RhdHVzICsgaSkpCi0JCQkJZXJyID0gLUVGQVVMVDsKLQogb3V0OgotCXZmcmVlKHBtKTsKLW91dDI6CiAJbW1wdXQobW0pOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suYwppbmRleCAwMWZiZTkzLi4wMDhlYTcwIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTgsMTAgKzgsMTggQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBpbnQgY2FuX2RvX21sb2NrKHZvaWQpCiB7CkBAIC0yMywxNyArMzEsMzgxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNhbl9kb19tbG9jayk7CiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogTWxvY2tlZCBwYWdlcyBhcmUgbWFya2VkIHdpdGggUGFnZU1sb2NrZWQoKSBmbGFnIGZvciBlZmZpY2llbnQgdGVzdGluZworICogaW4gdm1zY2FuIGFuZCwgcG9zc2libHksIHRoZSBmYXVsdCBwYXRoOyBhbmQgdG8gc3VwcG9ydCBzZW1pLWFjY3VyYXRlCisgKiBzdGF0aXN0aWNzLgorICoKKyAqIEFuIG1sb2NrZWQgcGFnZSBbUGFnZU1sb2NrZWQocGFnZSldIGlzIHVuZXZpY3RhYmxlLiAgQXMgc3VjaCwgaXQgd2lsbAorICogYmUgcGxhY2VkIG9uIHRoZSBMUlUgInVuZXZpY3RhYmxlIiBsaXN0LCByYXRoZXIgdGhhbiB0aGUgW2luXWFjdGl2ZSBsaXN0cy4KKyAqIFRoZSB1bmV2aWN0YWJsZSBsaXN0IGlzIGFuIExSVSBzaWJsaW5nIGxpc3QgdG8gdGhlIFtpbl1hY3RpdmUgbGlzdHMuCisgKiBQYWdlVW5ldmljdGFibGUgaXMgc2V0IHRvIGluZGljYXRlIHRoZSB1bmV2aWN0YWJsZSBzdGF0ZS4KKyAqCisgKiBXaGVuIGxhenkgbWxvY2tpbmcgdmlhIHZtc2NhbiwgaXQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZQorICogdm1hJ3MgVk1fTE9DS0VEIHN0YXR1cyBpcyBub3QgY29uY3VycmVudGx5IGJlaW5nIG1vZGlmaWVkLCBvdGhlcndpc2Ugd2UKKyAqIG1heSBoYXZlIG1sb2NrZWQgYSBwYWdlIHRoYXQgaXMgYmVpbmcgbXVubG9ja2VkLiBTbyBsYXp5IG1sb2NrIG11c3QgdGFrZQorICogdGhlIG1tYXBfc2VtIGZvciByZWFkLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHZtYSByZWFsbHkgaXMgbG9ja2VkCisgKiAoc2VlIG1tL3JtYXAuYykuCisgKi8KKworLyoKKyAqICBMUlUgYWNjb3VudGluZyBmb3IgY2xlYXJfcGFnZV9tbG9jaygpCisgKi8KK3ZvaWQgX19jbGVhcl9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsJLyogdHJ1bmNhdGVkID8gKi8KKwkJcmV0dXJuOworCX0KKworCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHQ0xFQVJFRCk7CisJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKSB7CisJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUGFnZSBub3Qgb24gdGhlIExSVSB5ZXQuICBGbHVzaCBhbGwgcGFnZXZlY3MgYW5kIHJldHJ5LgorCQkgKi8KKwkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKKwkJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKQorCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJZWxzZSBpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdTVFJBTkRFRCk7CisKKwl9Cit9CisKKy8qCisgKiBNYXJrIHBhZ2UgYXMgbWxvY2tlZCBpZiBub3QgYWxyZWFkeS4KKyAqIElmIHBhZ2Ugb24gTFJVLCBpc29sYXRlIGFuZCBwdXRiYWNrIHRvIG1vdmUgdG8gdW5ldmljdGFibGUgbGlzdC4KKyAqLwordm9pZCBtbG9ja192bWFfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJaWYgKCFUZXN0U2V0UGFnZU1sb2NrZWQocGFnZSkpIHsKKwkJaW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHTUxPQ0tFRCk7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJfQorfQorCisvKgorICogY2FsbGVkIGZyb20gbXVubG9jaygpL211bm1hcCgpIHBhdGggd2l0aCBwYWdlIHN1cHBvc2VkbHkgb24gdGhlIExSVS4KKyAqCisgKiBOb3RlOiAgdW5saWtlIG1sb2NrX3ZtYV9wYWdlKCksIHdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIFBhZ2VNbG9ja2VkCisgKiBbaW4gdHJ5X3RvX211bmxvY2soKV0gYW5kIHRoZW4gYXR0ZW1wdCB0byBpc29sYXRlIHRoZSBwYWdlLiAgV2UgbXVzdAorICogaXNvbGF0ZSB0aGUgcGFnZSB0byBrZWVwIG90aGVycyBmcm9tIG1lc3Npbmcgd2l0aCBpdHMgdW5ldmljdGFibGUKKyAqIGFuZCBtbG9ja2VkIHN0YXRlIHdoaWxlIHRyeWluZyB0byBtdW5sb2NrLiAgSG93ZXZlciwgd2UgcHJlLWNsZWFyIHRoZQorICogbWxvY2tlZCBzdGF0ZSBhbnl3YXkgYXMgd2UgbWlnaHQgbG9zZSB0aGUgaXNvbGF0aW9uIHJhY2UgYW5kIHdlIG1pZ2h0CisgKiBub3QgZ2V0IGFub3RoZXIgY2hhbmNlIHRvIGNsZWFyIFBhZ2VNbG9ja2VkLiAgSWYgd2Ugc3VjY2Vzc2Z1bGx5CisgKiBpc29sYXRlIHRoZSBwYWdlIGFuZCB0cnlfdG9fbXVubG9jaygpIGRldGVjdHMgb3RoZXIgVk1fTE9DS0VEIHZtYXMKKyAqIG1hcHBpbmcgdGhlIHBhZ2UsIGl0IHdpbGwgcmVzdG9yZSB0aGUgUGFnZU1sb2NrZWQgc3RhdGUsIHVubGVzcyB0aGUgcGFnZQorICogaXMgbWFwcGVkIGluIGEgbm9uLWxpbmVhciB2bWEuICBTbywgd2UgZ28gYWhlYWQgYW5kIFNldFBhZ2VNbG9ja2VkKCksCisgKiBwZXJoYXBzIHJlZHVuZGFudGx5LgorICogSWYgd2UgbG9zZSB0aGUgaXNvbGF0aW9uIHJhY2UsIGFuZCB0aGUgcGFnZSBpcyBtYXBwZWQgYnkgb3RoZXIgVk1fTE9DS0VECisgKiB2bWFzLCB3ZSdsbCBkZXRlY3QgdGhpcyBpbiB2bXNjYW4tLXZpYSB0cnlfdG9fbXVubG9jaygpIG9yIHRyeV90b191bm1hcCgpCisgKiBlaXRoZXIgb2Ygd2hpY2ggd2lsbCByZXN0b3JlIHRoZSBQYWdlTWxvY2tlZCBzdGF0ZSBieSBjYWxsaW5nCisgKiBtbG9ja192bWFfcGFnZSgpIGFib3ZlLCBpZiBpdCBjYW4gZ3JhYiB0aGUgdm1hJ3MgbW1hcCBzZW0uCisgKi8KK3N0YXRpYyB2b2lkIG11bmxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKworCWlmIChUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKSkgeworCQlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKSB7CisJCQlpbnQgcmV0ID0gdHJ5X3RvX211bmxvY2socGFnZSk7CisJCQkvKgorCQkJICogZGlkIHRyeV90b191bmxvY2soKSBzdWNjZWVkIG9yIHB1bnQ/CisJCQkgKi8KKwkJCWlmIChyZXQgPT0gU1dBUF9TVUNDRVNTIHx8IHJldCA9PSBTV0FQX0FHQUlOKQorCQkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHTVVOTE9DS0VEKTsKKworCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBsb3N0IHRoZSByYWNlLiAgbGV0IHRyeV90b191bm1hcCgpIGRlYWwKKwkJCSAqIHdpdGggaXQuICBBdCBsZWFzdCB3ZSBnZXQgdGhlIHBhZ2Ugc3RhdGUgYW5kCisJCQkgKiBtbG9jayBzdGF0cyByaWdodC4gIEhvd2V2ZXIsIHBhZ2UgaXMgc3RpbGwgb24KKwkJCSAqIHRoZSBub3JlY2xhaW0gbGlzdC4gIFdlJ2xsIGZpeCB0aGF0IHVwIHdoZW4KKwkJCSAqIHRoZSBwYWdlIGlzIGV2ZW50dWFsbHkgZnJlZWQgb3Igd2Ugc2NhbiB0aGUKKwkJCSAqIG5vcmVjbGFpbSBsaXN0LgorCQkJICovCisJCQlpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHU1RSQU5ERUQpOworCQkJZWxzZQorCQkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHTVVOTE9DS0VEKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIC0gIG1sb2NrL211bmxvY2sgYSByYW5nZSBvZiBwYWdlcyBpbiB0aGUgdm1hLgorICogQHZtYTogICB0YXJnZXQgdm1hCisgKiBAc3RhcnQ6IHN0YXJ0IGFkZHJlc3MKKyAqIEBlbmQ6ICAgZW5kIGFkZHJlc3MKKyAqIEBtbG9jazogMCBpbmRpY2F0ZSBtdW5sb2NrLCBvdGhlcndpc2UgbWxvY2suCisgKgorICogSWYgQG1sb2NrID09IDAsIHVubG9jayBhbiBtbG9ja2VkIHJhbmdlOworICogZWxzZSBtbG9jayB0aGUgcmFuZ2Ugb2YgcGFnZXMuICBUaGlzIHRha2VzIGNhcmUgb2YgbWFraW5nIHRoZSBwYWdlcyBwcmVzZW50ICwKKyAqIHRvby4KKyAqCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLgorICoKKyAqIHZtYS0+dm1fbW0tPm1tYXBfc2VtIG11c3QgYmUgaGVsZCBmb3IgYXQgbGVhc3QgcmVhZC4KKyAqLworc3RhdGljIGxvbmcgX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICAgaW50IG1sb2NrKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbMTZdOyAvKiAxNiBnaXZlcyBhIHJlYXNvbmFibGUgYmF0Y2ggKi8KKwlpbnQgbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpIC8gUEFHRV9TSVpFOworCWludCByZXQ7CisJaW50IGd1cF9mbGFncyA9IDA7CisKKwlWTV9CVUdfT04oc3RhcnQgJiB+UEFHRV9NQVNLKTsKKwlWTV9CVUdfT04oZW5kICAgJiB+UEFHRV9NQVNLKTsKKwlWTV9CVUdfT04oc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KTsKKwlWTV9CVUdfT04oZW5kICAgPiB2bWEtPnZtX2VuZCk7CisJVk1fQlVHX09OKCghcndzZW1faXNfbG9ja2VkKCZtbS0+bW1hcF9zZW0pKSAmJgorCQkgIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSAhPSAwKSk7CisKKwkvKgorCSAqIG1sb2NrOiAgIGRvbid0IHBhZ2UgcG9wdWxhdGUgaWYgcGFnZSBoYXMgUFJPVF9OT05FIHBlcm1pc3Npb24uCisJICogbXVubG9jazogdGhlIHBhZ2VzIGFsd2F5cyBkbyBtdW5sb2NrIGFsdGhyb3VnaAorCSAqICAgICAgICAgIGl0cyBoYXMgUFJPVF9OT05FIHBlcm1pc3Npb24uCisJICovCisJaWYgKCFtbG9jaykKKwkJZ3VwX2ZsYWdzIHw9IEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TOworCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKKwkJZ3VwX2ZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKworCWxydV9hZGRfZHJhaW5fYWxsKCk7CS8qIHB1c2ggY2FjaGVkIHBhZ2VzIHRvIExSVSAqLworCisJd2hpbGUgKG5yX3BhZ2VzID4gMCkgeworCQlpbnQgaTsKKworCQljb25kX3Jlc2NoZWQoKTsKKworCQkvKgorCQkgKiBnZXRfdXNlcl9wYWdlcyBtYWtlcyBwYWdlcyBwcmVzZW50IGlmIHdlIGFyZQorCQkgKiBzZXR0aW5nIG1sb2NrLiBhbmQgdGhpcyBleHRyYSByZWZlcmVuY2UgY291bnQgd2lsbAorCQkgKiBkaXNhYmxlIG1pZ3JhdGlvbiBvZiB0aGlzIHBhZ2UuICBIb3dldmVyLCBwYWdlIG1heQorCQkgKiBzdGlsbCBiZSB0cnVuY2F0ZWQgb3V0IGZyb20gdW5kZXIgdXMuCisJCSAqLworCQlyZXQgPSBfX2dldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBhZGRyLAorCQkJCW1pbl90KGludCwgbnJfcGFnZXMsIEFSUkFZX1NJWkUocGFnZXMpKSwKKwkJCQlndXBfZmxhZ3MsIHBhZ2VzLCBOVUxMKTsKKwkJLyoKKwkJICogVGhpcyBjYW4gaGFwcGVuIGZvciwgZS5nLiwgVk1fTk9OTElORUFSIHJlZ2lvbnMgYmVmb3JlCisJCSAqIGEgcGFnZSBoYXMgYmVlbiBhbGxvY2F0ZWQgYW5kIG1hcHBlZCBhdCBhIGdpdmVuIG9mZnNldCwKKwkJICogb3IgZm9yIGFkZHJlc3NlcyB0aGF0IG1hcCBiZXlvbmQgZW5kIG9mIGEgZmlsZS4KKwkJICogV2UnbGwgbWxvY2sgdGhlIHRoZSBwYWdlcyBpZi93aGVuIHRoZXkgZ2V0IGZhdWx0ZWQgaW4uCisJCSAqLworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAocmV0ID09IDApIHsKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoZSB2bWEgaXMgdGhlcmUsIHNvIHRoZSBvbmx5IHRpbWUKKwkJCSAqIHdlIGNhbm5vdCBnZXQgYSBzaW5nbGUgcGFnZSBzaG91bGQgYmUgYW4KKwkJCSAqIGVycm9yIChyZXQgPCAwKSBjYXNlLgorCQkJICovCisJCQlXQVJOX09OKDEpOworCQkJYnJlYWs7CisJCX0KKworCQlscnVfYWRkX2RyYWluKCk7CS8qIHB1c2ggY2FjaGVkIHBhZ2VzIHRvIExSVSAqLworCisJCWZvciAoaSA9IDA7IGkgPCByZXQ7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKKworCQkJbG9ja19wYWdlKHBhZ2UpOworCQkJLyoKKwkJCSAqIEJlY2F1c2Ugd2UgbG9jayBwYWdlIGhlcmUgYW5kIG1pZ3JhdGlvbiBpcyBibG9ja2VkCisJCQkgKiBieSB0aGUgZWxldmF0ZWQgcmVmZXJlbmNlLCB3ZSBuZWVkIG9ubHkgY2hlY2sgZm9yCisJCQkgKiBwYWdlIHRydW5jYXRpb24gKGZpbGUtY2FjaGUgb25seSkuCisJCQkgKi8KKwkJCWlmIChwYWdlLT5tYXBwaW5nKSB7CisJCQkJaWYgKG1sb2NrKQorCQkJCQltbG9ja192bWFfcGFnZShwYWdlKTsKKwkJCQllbHNlCisJCQkJCW11bmxvY2tfdm1hX3BhZ2UocGFnZSk7CisJCQl9CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCXB1dF9wYWdlKHBhZ2UpOwkJLyogcmVmIGZyb20gZ2V0X3VzZXJfcGFnZXMoKSAqLworCisJCQkvKgorCQkJICogaGVyZSB3ZSBhc3N1bWUgdGhhdCBnZXRfdXNlcl9wYWdlcygpIGhhcyBnaXZlbiB1cworCQkJICogYSBsaXN0IG9mIHZpcnR1YWxseSBjb250aWd1b3VzIHBhZ2VzLgorCQkJICovCisJCQlhZGRyICs9IFBBR0VfU0laRTsJLyogZm9yIG5leHQgZ2V0X3VzZXJfcGFnZXMoKSAqLworCQkJbnJfcGFnZXMtLTsKKwkJfQorCQlyZXQgPSAwOworCX0KKworCWxydV9hZGRfZHJhaW5fYWxsKCk7CS8qIHRvIHVwZGF0ZSBzdGF0cyAqLworCisJcmV0dXJuIHJldDsJLyogY291bnQgZW50aXJlIHZtYSBhcyBsb2NrZWRfdm0gKi8KK30KKworLyoKKyAqIGNvbnZlcnQgZ2V0X3VzZXJfcGFnZXMoKSByZXR1cm4gdmFsdWUgdG8gcG9zaXggbWxvY2soKSBlcnJvcgorICovCitzdGF0aWMgaW50IF9fbWxvY2tfcG9zaXhfZXJyb3JfcmV0dXJuKGxvbmcgcmV0dmFsKQoreworCWlmIChyZXR2YWwgPT0gLUVGQVVMVCkKKwkJcmV0dmFsID0gLUVOT01FTTsKKwllbHNlIGlmIChyZXR2YWwgPT0gLUVOT01FTSkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZWxzZSAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCisKKy8qCisgKiBKdXN0IG1ha2UgcGFnZXMgcHJlc2VudCBpZiBWTV9MT0NLRUQuICBOby1vcCBpZiB1bmxvY2tpbmcuCisgKi8KK3N0YXRpYyBsb25nIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCSAgIGludCBtbG9jaykKK3sKKwlpZiAobWxvY2sgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKQorCQlyZXR1cm4gbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihsb25nIHJldHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKworLyoqCisgKiBtbG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtIG1sb2NrIHBhZ2VzIGluIHNwZWNpZmllZCB2bWEgcmFuZ2UuCisgKiBAdm1hIC0gdGhlIHZtYSBjb250YWluaW5nIHRoZSBzcGVjZmllZCBhZGRyZXNzIHJhbmdlCisgKiBAc3RhcnQgLSBzdGFydGluZyBhZGRyZXNzIGluIEB2bWEgdG8gbWxvY2sKKyAqIEBlbmQgICAtIGVuZCBhZGRyZXNzIFsrMV0gaW4gQHZtYSB0byBtbG9jaworICoKKyAqIEZvciBtbWFwKCkvbXJlbWFwKCkvZXhwYW5zaW9uIG9mIG1sb2NrZWQgdm1hLgorICoKKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MgZm9yICJub3JtYWwiIHZtYXMuCisgKgorICogcmV0dXJuIG51bWJlciBvZiBwYWdlcyBbPiAwXSB0byBiZSByZW1vdmVkIGZyb20gbG9ja2VkX3ZtIG9uIHN1Y2Nlc3MKKyAqIG9mICJzcGVjaWFsIiB2bWFzLgorICoKKyAqIHJldHVybiBuZWdhdGl2ZSBlcnJvciBpZiB2bWEgc3Bhbm5pbmcgQHN0YXJ0LUByYW5nZSBkaXNhcHBlYXJzIHdoaWxlCisgKiBtbWFwIHNlbWFwaG9yZSBpcyBkcm9wcGVkLiAgVW5saWtlbHk/CisgKi8KK2xvbmcgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCWludCBucl9wYWdlcyA9IChlbmQgLSBzdGFydCkgLyBQQUdFX1NJWkU7CisJQlVHX09OKCEodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpOworCisJLyoKKwkgKiBmaWx0ZXIgdW5sb2NrYWJsZSB2bWFzCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKQorCQlnb3RvIG5vX21sb2NrOworCisJaWYgKCEoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fRE9OVEVYUEFORCB8IFZNX1JFU0VSVkVEKSkgfHwKKwkJCWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8CisJCQl2bWEgPT0gZ2V0X2dhdGVfdm1hKGN1cnJlbnQpKSkgeworCQlsb25nIGVycm9yOworCQlkb3duZ3JhZGVfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisKKwkJZXJyb3IgPSBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOworCisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCS8qIHZtYSBjYW4gY2hhbmdlIG9yIGRpc2FwcGVhciAqLworCQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOworCQkvKiBub24tTlVMTCB2bWEgbXVzdCBjb250YWluIEBzdGFydCwgYnV0IG5lZWQgdG8gY2hlY2sgQGVuZCAqLworCQlpZiAoIXZtYSB8fCAgZW5kID4gdm1hLT52bV9lbmQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXR1cm4gMDsJLyogaGlkZSBvdGhlciBlcnJvcnMgZnJvbSBtbWFwKCksIGV0IGFsICovCisJfQorCisJLyoKKwkgKiBVc2VyIG1hcHBlZCBrZXJuZWwgcGFnZXMgb3IgaHVnZSBwYWdlczoKKwkgKiBtYWtlIHRoZXNlIHBhZ2VzIHByZXNlbnQgdG8gcG9wdWxhdGUgdGhlIHB0ZXMsIGJ1dAorCSAqIGZhbGwgdGhydScgdG8gcmVzZXQgVk1fTE9DS0VELS1ubyBuZWVkIHRvIHVubG9jaywgYW5kCisJICogcmV0dXJuIG5yX3BhZ2VzIHNvIHRoZXNlIGRvbid0IGdldCBjb3VudGVkIGFnYWluc3QgdGFzaydzCisJICogbG9ja2VkIGxpbWl0LiAgaHVnZSBwYWdlcyBhcmUgYWxyZWFkeSBjb3VudGVkIGFnYWluc3QKKwkgKiBsb2NrZWQgdm0gbGltaXQuCisJICovCisJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCitub19tbG9jazoKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9MT0NLRUQ7CS8qIGFuZCBkb24ndCBjb21lIGJhY2shICovCisJcmV0dXJuIG5yX3BhZ2VzOwkJLyogZXJyb3Igb3IgcGFnZXMgTk9UIG1sb2NrZWQgKi8KK30KKworCisvKgorICogbXVubG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtIG11bmxvY2sgYWxsIHBhZ2VzIGluIHRoZSB2bWEgcmFuZ2UuJworICogQHZtYSAtIHZtYSBjb250YWluaW5nIHJhbmdlIHRvIGJlIG11bmxvY2soKWVkLgorICogQHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyBpbiBAdm1hIG9mIHRoZSByYW5nZQorICogQGVuZCAtIGVuZCBvZiByYW5nZSBpbiBAdm1hLgorICoKKyAqICBGb3IgbXJlbWFwKCksIG11bm1hcCgpIGFuZCBleGl0KCkuCisgKgorICogQ2FsbGVkIHdpdGggQHZtYSBWTV9MT0NLRUQuCisgKgorICogUmV0dXJucyB3aXRoIFZNX0xPQ0tFRCBjbGVhcmVkLiAgQ2FsbGVycyBtdXN0IGJlIHByZXBhcmVkIHRvCisgKiBkZWFsIHdpdGggdGhpcy4KKyAqCisgKiBXZSBkb24ndCBzYXZlIGFuZCByZXN0b3JlIFZNX0xPQ0tFRCBoZXJlIGJlY2F1c2UgcGFnZXMgYXJlCisgKiBzdGlsbCBvbiBscnUuICBJbiB1bm1hcCBwYXRoLCBwYWdlcyBtaWdodCBiZSBzY2FubmVkIGJ5IHJlY2xhaW0KKyAqIGFuZCByZS1tbG9ja2VkIGJ5IHRyeV90b197bXVubG9ja3x1bm1hcH0gYmVmb3JlIHdlIHVubWFwIGFuZAorICogZnJlZSB0aGVtLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBmcmVlaW5nIG1sb2NrZWQgcGFnZXMuCisgKi8KK3ZvaWQgbXVubG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9MT0NLRUQ7CisJX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAwKTsKK30KKworLyoKKyAqIG1sb2NrX2ZpeHVwICAtIGhhbmRsZSBtbG9ja1thbGxdL211bmxvY2tbYWxsXSByZXF1ZXN0cy4KKyAqCisgKiBGaWx0ZXJzIG91dCAic3BlY2lhbCIgdm1hcyAtLSBWTV9MT0NLRUQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmQKKyAqIG11bmxvY2sgaXMgYSBuby1vcC4gIEhvd2V2ZXIsIGZvciBzb21lIHNwZWNpYWwgdm1hcywgd2UgZ28gYWhlYWQgYW5kCisgKiBwb3B1bGF0ZSB0aGUgcHRlcyB2aWEgbWFrZV9wYWdlc19wcmVzZW50KCkuCisgKgorICogRm9yIHZtYXMgdGhhdCBwYXNzIHRoZSBmaWx0ZXJzLCBtZXJnZS9zcGxpdCBhcyBhcHByb3ByaWF0ZS4KKyAqLwogc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHJldiwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgaW50IG5ld2ZsYWdzKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IHZtYS0+dm1fbW07CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXBnb2ZmX3QgcGdvZmY7Ci0JaW50IHBhZ2VzOworCWludCBucl9wYWdlczsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgbG9jayA9IG5ld2ZsYWdzICYgVk1fTE9DS0VEOwogCi0JaWYgKG5ld2ZsYWdzID09IHZtYS0+dm1fZmxhZ3MpIHsKLQkJKnByZXYgPSB2bWE7Ci0JCWdvdG8gb3V0OworCWlmIChuZXdmbGFncyA9PSB2bWEtPnZtX2ZsYWdzIHx8CisJCQkodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpKQorCQlnb3RvIG91dDsJLyogZG9uJ3Qgc2V0IFZNX0xPQ0tFRCwgIGRvbid0IGNvdW50ICovCisKKwlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fRE9OVEVYUEFORCB8IFZNX1JFU0VSVkVEKSkgfHwKKwkJCWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8CisJCQl2bWEgPT0gZ2V0X2dhdGVfdm1hKGN1cnJlbnQpKSB7CisJCWlmIChsb2NrKQorCQkJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCQlnb3RvIG91dDsJLyogZG9uJ3Qgc2V0IFZNX0xPQ0tFRCwgIGRvbid0IGNvdW50ICovCiAJfQogCiAJcGdvZmYgPSB2bWEtPnZtX3Bnb2ZmICsgKChzdGFydCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpOwpAQCAtNDQsOCArNDE2LDYgQEAKIAkJZ290byBzdWNjZXNzOwogCX0KIAotCSpwcmV2ID0gdm1hOwotCiAJaWYgKHN0YXJ0ICE9IHZtYS0+dm1fc3RhcnQpIHsKIAkJcmV0ID0gc3BsaXRfdm1hKG1tLCB2bWEsIHN0YXJ0LCAxKTsKIAkJaWYgKHJldCkKQEAgLTYwLDI0ICs0MzAsNjEgQEAKIAogc3VjY2VzczoKIAkvKgorCSAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS4KKwkgKi8KKwlucl9wYWdlcyA9IChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKKwlpZiAoIWxvY2spCisJCW5yX3BhZ2VzID0gLW5yX3BhZ2VzOworCW1tLT5sb2NrZWRfdm0gKz0gbnJfcGFnZXM7CisKKwkvKgogCSAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9zZW0gaGVsZCBpbiB3cml0ZSBtb2RlLgogCSAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZQotCSAqIHNldCBWTV9MT0NLRUQsIG1ha2VfcGFnZXNfcHJlc2VudCBiZWxvdyB3aWxsIGJyaW5nIGl0IGJhY2suCisJICogc2V0IFZNX0xPQ0tFRCwgX19tbG9ja192bWFfcGFnZXNfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLgogCSAqLwogCXZtYS0+dm1fZmxhZ3MgPSBuZXdmbGFnczsKIAotCS8qCi0JICogS2VlcCB0cmFjayBvZiBhbW91bnQgb2YgbG9ja2VkIFZNLgotCSAqLwotCXBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOwotCWlmIChuZXdmbGFncyAmIFZNX0xPQ0tFRCkgewotCQlwYWdlcyA9IC1wYWdlczsKLQkJaWYgKCEobmV3ZmxhZ3MgJiBWTV9JTykpCi0JCQlyZXQgPSBtYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIGVuZCk7CisJaWYgKGxvY2spIHsKKwkJLyoKKwkJICogbW1hcF9zZW0gaXMgY3VycmVudGx5IGhlbGQgZm9yIHdyaXRlLiAgRG93bmdyYWRlIHRoZSB3cml0ZQorCQkgKiBsb2NrIHRvIGEgcmVhZCBsb2NrIHNvIHRoYXQgb3RoZXIgZmF1bHRzLCBtbWFwIHNjYW5zLCAuLi4KKwkJICogd2hpbGUgd2UgZmF1bHQgaW4gYWxsIHBhZ2VzLgorCQkgKi8KKwkJZG93bmdyYWRlX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJCXJldCA9IF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgMSk7CisKKwkJLyoKKwkJICogTmVlZCB0byByZWFjcXVpcmUgbW1hcCBzZW0gaW4gd3JpdGUgbW9kZSwgYXMgb3VyIGNhbGxlcnMKKwkJICogZXhwZWN0IHRoaXMuICBXZSBoYXZlIG5vIHN1cHBvcnQgZm9yIGF0b21pY2FsbHkgdXBncmFkaW5nCisJCSAqIGEgc2VtIHRvIHdyaXRlLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByYW5nZXMgd2hpbGUgc2VtCisJCSAqIGlzIHVubG9ja2VkLgorCQkgKi8KKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJLyogdm1hIGNhbiBjaGFuZ2Ugb3IgZGlzYXBwZWFyICovCisJCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCSpwcmV2ID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwkJLyogbm9uLU5VTEwgKnByZXYgbXVzdCBjb250YWluIEBzdGFydCwgYnV0IG5lZWQgdG8gY2hlY2sgQGVuZCAqLworCQlpZiAoISgqcHJldikgfHwgZW5kID4gKCpwcmV2KS0+dm1fZW5kKQorCQkJcmV0ID0gLUVOT01FTTsKKwkJZWxzZSBpZiAocmV0ID4gMCkgeworCQkJbW0tPmxvY2tlZF92bSAtPSByZXQ7CisJCQlyZXQgPSAwOworCQl9IGVsc2UKKwkJCXJldCA9IF9fbWxvY2tfcG9zaXhfZXJyb3JfcmV0dXJuKHJldCk7IC8qIHRyYW5zbGF0ZSBpZiBuZWVkZWQgKi8KKwl9IGVsc2UgeworCQkvKgorCQkgKiBUT0RPOiAgZm9yIHVubG9ja2luZywgcGFnZXMgd2lsbCBhbHJlYWR5IGJlIHJlc2lkZW50LCBzbworCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgZm9yIGFsbG9jYXRpb25zL3JlY2xhaW0vcGFnZWluLCAuLi4KKwkJICogSG93ZXZlciwgdW5sb2NraW5nIGEgdmVyeSBsYXJnZSByZWdpb24gY2FuIHN0aWxsIHRha2UgYQorCQkgKiB3aGlsZS4gIFNob3VsZCB3ZSBkb3duZ3JhZGUgdGhlIHNlbWFwaG9yZSBmb3IgYm90aCBsb2NrCisJCSAqIEFORCB1bmxvY2sgPworCQkgKi8KKwkJX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAwKTsKIAl9CiAKLQltbS0+bG9ja2VkX3ZtIC09IHBhZ2VzOwogb3V0OgorCSpwcmV2ID0gdm1hOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCBlN2E1YTY4Li43NGY0ZDE1IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC00MTAsNyArNDEwLDcgQEAKIAlyYl9pbnNlcnRfY29sb3IoJnZtYS0+dm1fcmIsICZtbS0+bW1fcmIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX192bWFfbGlua19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIHZvaWQgX192bWFfbGlua19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBmaWxlICogZmlsZTsKIApAQCAtNjYyLDggKzY2Miw2IEBACiAgKiBJZiB0aGUgdm1hIGhhcyBhIC0+Y2xvc2Ugb3BlcmF0aW9uIHRoZW4gdGhlIGRyaXZlciBwcm9iYWJseSBuZWVkcyB0byByZWxlYXNlCiAgKiBwZXItdm1hIHJlc291cmNlcywgc28gd2UgZG9uJ3QgYXR0ZW1wdCB0byBtZXJnZSB0aG9zZS4KICAqLwotI2RlZmluZSBWTV9TUEVDSUFMIChWTV9JTyB8IFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCkKLQogc3RhdGljIGlubGluZSBpbnQgaXNfbWVyZ2VhYmxlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHZtX2ZsYWdzKQogewpAQCAtOTcyLDYgKzk3MCw3IEBACiAJCQlyZXR1cm4gLUVQRVJNOwogCQl2bV9mbGFncyB8PSBWTV9MT0NLRUQ7CiAJfQorCiAJLyogbWxvY2sgTUNMX0ZVVFVSRT8gKi8KIAlpZiAodm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBsb2NrZWQsIGxvY2tfbGltaXQ7CkBAIC0xMTM5LDEwICsxMTM4LDEyIEBACiAJICogVGhlIFZNX1NIQVJFRCB0ZXN0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNobWVtX3plcm9fc2V0dXAKIAkgKiB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBvYmplY3QgZm9yIGEgc2hhcmVkIGFub255bW91cyBtYXAgYmVsb3cuCiAJICovCi0JaWYgKCFmaWxlICYmICEodm1fZmxhZ3MgJiBWTV9TSEFSRUQpICYmCi0JICAgIHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgdm1fZmxhZ3MsCi0JCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKSkKLQkJZ290byBvdXQ7CisJaWYgKCFmaWxlICYmICEodm1fZmxhZ3MgJiBWTV9TSEFSRUQpKSB7CisJCXZtYSA9IHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgdm1fZmxhZ3MsCisJCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKTsKKwkJaWYgKHZtYSkKKwkJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZQpAQCAtMTIyNCwxMCArMTIyNSwxNCBAQAogCW1tLT50b3RhbF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAl2bV9zdGF0X2FjY291bnQobW0sIHZtX2ZsYWdzLCBmaWxlLCBsZW4gPj4gUEFHRV9TSElGVCk7CiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCW1tLT5sb2NrZWRfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7Ci0JCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBhZGRyICsgbGVuKTsKLQl9Ci0JaWYgKChmbGFncyAmIE1BUF9QT1BVTEFURSkgJiYgIShmbGFncyAmIE1BUF9OT05CTE9DSykpCisJCS8qCisJCSAqIG1ha2VzIHBhZ2VzIHByZXNlbnQ7IGRvd25ncmFkZXMsIGRyb3BzLCByZWFjcXVpcmVzIG1tYXBfc2VtCisJCSAqLworCQlsb25nIG5yX3BhZ2VzID0gbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbik7CisJCWlmIChucl9wYWdlcyA8IDApCisJCQlyZXR1cm4gbnJfcGFnZXM7CS8qIHZtYSBnb25lISAqLworCQltbS0+bG9ja2VkX3ZtICs9IChsZW4gPj4gUEFHRV9TSElGVCkgLSBucl9wYWdlczsKKwl9IGVsc2UgaWYgKChmbGFncyAmIE1BUF9QT1BVTEFURSkgJiYgIShmbGFncyAmIE1BUF9OT05CTE9DSykpCiAJCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBhZGRyICsgbGVuKTsKIAlyZXR1cm4gYWRkcjsKIApAQCAtMTU4Niw3ICsxNTkxLDcgQEAKICAqIHZtYSBpcyB0aGUgbGFzdCBvbmUgd2l0aCBhZGRyZXNzID4gdm1hLT52bV9lbmQuICBIYXZlIHRvIGV4dGVuZCB2bWEuCiAgKi8KICNpZm5kZWYgQ09ORklHX0lBNjQKLXN0YXRpYyBpbmxpbmUKK3N0YXRpYwogI2VuZGlmCiBpbnQgZXhwYW5kX3Vwd2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTE2MzYsNyArMTY0MSw3IEBACiAvKgogICogdm1hIGlzIHRoZSBmaXJzdCBvbmUgd2l0aCBhZGRyZXNzIDwgdm1hLT52bV9zdGFydC4gIEhhdmUgdG8gZXh0ZW5kIHZtYS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgZXhwYW5kX2Rvd253YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKK3N0YXRpYyBpbnQgZXhwYW5kX2Rvd253YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJaW50IGVycm9yOwpAQCAtMTY5OCwxMCArMTcwMywxMiBAQAogCXZtYSA9IGZpbmRfdm1hX3ByZXYobW0sIGFkZHIsICZwcmV2KTsKIAlpZiAodm1hICYmICh2bWEtPnZtX3N0YXJ0IDw9IGFkZHIpKQogCQlyZXR1cm4gdm1hOwotCWlmICghcHJldiB8fCBleHBhbmRfc3RhY2socHJldiwgYWRkcikpCisJaWYgKGV4cGFuZF9zdGFjayhwcmV2LCBhZGRyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHByZXYtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgcHJldi0+dm1fZW5kKTsKKwlpZiAocHJldi0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJaWYgKG1sb2NrX3ZtYV9wYWdlc19yYW5nZShwcmV2LCBhZGRyLCBwcmV2LT52bV9lbmQpIDwgMCkKKwkJCXJldHVybiBOVUxMOwkvKiB2bWEgZ29uZSEgKi8KKwl9CiAJcmV0dXJuIHByZXY7CiB9CiAjZWxzZQpAQCAtMTcyNyw4ICsxNzM0LDEwIEBACiAJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCWlmIChleHBhbmRfc3RhY2sodm1hLCBhZGRyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCi0JCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBzdGFydCk7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJaWYgKG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIHN0YXJ0KSA8IDApCisJCQlyZXR1cm4gTlVMTDsJLyogdm1hIGdvbmUhICovCisJfQogCXJldHVybiB2bWE7CiB9CiAjZW5kaWYKQEAgLTE3NDcsOCArMTc1Niw2IEBACiAJCWxvbmcgbnJwYWdlcyA9IHZtYV9wYWdlcyh2bWEpOwogCiAJCW1tLT50b3RhbF92bSAtPSBucnBhZ2VzOwotCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKLQkJCW1tLT5sb2NrZWRfdm0gLT0gbnJwYWdlczsKIAkJdm1fc3RhdF9hY2NvdW50KG1tLCB2bWEtPnZtX2ZsYWdzLCB2bWEtPnZtX2ZpbGUsIC1ucnBhZ2VzKTsKIAkJdm1hID0gcmVtb3ZlX3ZtYSh2bWEpOwogCX0gd2hpbGUgKHZtYSk7CkBAIC0xOTE0LDYgKzE5MjEsMjAgQEAKIAl2bWEgPSBwcmV2PyBwcmV2LT52bV9uZXh0OiBtbS0+bW1hcDsKIAogCS8qCisJICogdW5sb2NrIGFueSBtbG9jaygpZWQgcmFuZ2VzIGJlZm9yZSBkZXRhY2hpbmcgdm1hcworCSAqLworCWlmIChtbS0+bG9ja2VkX3ZtKSB7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdG1wID0gdm1hOworCQl3aGlsZSAodG1wICYmIHRtcC0+dm1fc3RhcnQgPCBlbmQpIHsKKwkJCWlmICh0bXAtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCQkJbW0tPmxvY2tlZF92bSAtPSB2bWFfcGFnZXModG1wKTsKKwkJCQltdW5sb2NrX3ZtYV9wYWdlc19hbGwodG1wKTsKKwkJCX0KKwkJCXRtcCA9IHRtcC0+dm1fbmV4dDsKKwkJfQorCX0KKworCS8qCiAJICogUmVtb3ZlIHRoZSB2bWEncywgYW5kIHVubWFwIHRoZSBhY3R1YWwgcGFnZXMKIAkgKi8KIAlkZXRhY2hfdm1hc190b19iZV91bm1hcHBlZChtbSwgdm1hLCBwcmV2LCBlbmQpOwpAQCAtMjAyNSw4ICsyMDQ2LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBDYW4gd2UganVzdCBleHBhbmQgYW4gb2xkIHByaXZhdGUgYW5vbnltb3VzIG1hcHBpbmc/ICovCi0JaWYgKHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgZmxhZ3MsCi0JCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKSkKKwl2bWEgPSB2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIGZsYWdzLAorCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCk7CisJaWYgKHZtYSkKIAkJZ290byBvdXQ7CiAKIAkvKgpAQCAtMjA0OCw4ICsyMDcwLDggQEAKIG91dDoKIAltbS0+dG90YWxfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJaWYgKGZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCW1tLT5sb2NrZWRfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7Ci0JCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBhZGRyICsgbGVuKTsKKwkJaWYgKCFtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICsgbGVuKSkKKwkJCW1tLT5sb2NrZWRfdm0gKz0gKGxlbiA+PiBQQUdFX1NISUZUKTsKIAl9CiAJcmV0dXJuIGFkZHI7CiB9CkBAIC0yMDYwLDcgKzIwODIsNyBAQAogdm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3RydWN0IG1tdV9nYXRoZXIgKnRsYjsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1tLT5tbWFwOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgbnJfYWNjb3VudGVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIApAQCAtMjA2OCw2ICsyMDkwLDE1IEBACiAJYXJjaF9leGl0X21tYXAobW0pOwogCW1tdV9ub3RpZmllcl9yZWxlYXNlKG1tKTsKIAorCWlmIChtbS0+bG9ja2VkX3ZtKSB7CisJCXZtYSA9IG1tLT5tbWFwOworCQl3aGlsZSAodm1hKSB7CisJCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKKwkJCQltdW5sb2NrX3ZtYV9wYWdlc19hbGwodm1hKTsKKwkJCXZtYSA9IHZtYS0+dm1fbmV4dDsKKwkJfQorCX0KKwl2bWEgPSBtbS0+bW1hcDsKIAlscnVfYWRkX2RyYWluKCk7CiAJZmx1c2hfY2FjaGVfbW0obW0pOwogCXRsYiA9IHRsYl9nYXRoZXJfbW11KG1tLCAxKTsKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggMWE3NzQzOS4uNThhMjkwOCAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogc3RhdGljIHBtZF90ICpnZXRfb2xkX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CkBAIC0yMzgsOCArMjQwLDggQEAKIAlpZiAodm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJbW0tPmxvY2tlZF92bSArPSBuZXdfbGVuID4+IFBBR0VfU0hJRlQ7CiAJCWlmIChuZXdfbGVuID4gb2xkX2xlbikKLQkJCW1ha2VfcGFnZXNfcHJlc2VudChuZXdfYWRkciArIG9sZF9sZW4sCi0JCQkJCSAgIG5ld19hZGRyICsgbmV3X2xlbik7CisJCQltbG9ja192bWFfcGFnZXNfcmFuZ2UobmV3X3ZtYSwgbmV3X2FkZHIgKyBvbGRfbGVuLAorCQkJCQkJICAgICAgIG5ld19hZGRyICsgbmV3X2xlbik7CiAJfQogCiAJcmV0dXJuIG5ld19hZGRyOwpAQCAtMzc5LDcgKzM4MSw3IEBACiAJCQl2bV9zdGF0X2FjY291bnQobW0sIHZtYS0+dm1fZmxhZ3MsIHZtYS0+dm1fZmlsZSwgcGFnZXMpOwogCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJCQltbS0+bG9ja2VkX3ZtICs9IHBhZ2VzOwotCQkJCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyICsgb2xkX2xlbiwKKwkJCQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyICsgb2xkX2xlbiwKIAkJCQkJCSAgIGFkZHIgKyBuZXdfbGVuKTsKIAkJCX0KIAkJCXJldCA9IGFkZHI7CmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCBlZDc1YmM5Li4yNjk2YjI0IDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCisrKyBiL21tL25vbW11LmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiB2b2lkICpoaWdoX21lbW9yeTsKIHN0cnVjdCBwYWdlICptZW1fbWFwOwogdW5zaWduZWQgbG9uZyBtYXhfbWFwbnI7CkBAIC0xMjgsMjAgKzEzMCwxNiBAQAogCXJldHVybiBQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CiB9CiAKLS8qCi0gKiBnZXQgYSBsaXN0IG9mIHBhZ2VzIGluIGFuIGFkZHJlc3MgcmFuZ2UgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpZWQgcHJvY2VzcwotICogYW5kIGluZGljYXRlIHRoZSBWTUEgdGhhdCBjb3ZlcnMgZWFjaCBwYWdlCi0gKiAtIHRoaXMgaXMgcG90ZW50aWFsbHkgZG9kZ3kgYXMgd2UgbWF5IGVuZCBpbmNyZW1lbnRpbmcgdGhlIHBhZ2UgY291bnQgb2YgYQotICogICBzbGFiIHBhZ2Ugb3IgYSBzZWNvbmRhcnkgcGFnZSBmcm9tIGEgY29tcG91bmQgcGFnZQotICogLSBkb24ndCBwZXJtaXQgYWNjZXNzIHRvIFZNQXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LCBzdWNoIGFzIEkvTyBtYXBwaW5ncwotICovCi1pbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAotCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCitpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAorCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgdm1fZmxhZ3M7CiAJaW50IGk7CisJaW50IHdyaXRlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfV1JJVEUpOworCWludCBmb3JjZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0ZPUkNFKTsKKwlpbnQgaWdub3JlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUyk7CiAKIAkvKiBjYWxjdWxhdGUgcmVxdWlyZWQgcmVhZCBvciB3cml0ZSBwZXJtaXNzaW9ucy4KIAkgKiAtIGlmICdmb3JjZScgaXMgc2V0LCB3ZSBvbmx5IHJlcXVpcmUgdGhlICJNQVkiIGZsYWdzLgpAQCAtMTU2LDcgKzE1NCw3IEBACiAKIAkJLyogcHJvdGVjdCB3aGF0IHdlIGNhbiwgaW5jbHVkaW5nIGNoYXJkZXZzICovCiAJCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSB8fAotCQkgICAgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKQorCQkgICAgKCFpZ25vcmUgJiYgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKSkKIAkJCWdvdG8gZmluaXNoX29yX2ZhdWx0OwogCiAJCWlmIChwYWdlcykgewpAQCAtMTc0LDYgKzE3MiwzMCBAQAogZmluaXNoX29yX2ZhdWx0OgogCXJldHVybiBpID8gOiAtRUZBVUxUOwogfQorCisKKy8qCisgKiBnZXQgYSBsaXN0IG9mIHBhZ2VzIGluIGFuIGFkZHJlc3MgcmFuZ2UgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpZWQgcHJvY2VzcworICogYW5kIGluZGljYXRlIHRoZSBWTUEgdGhhdCBjb3ZlcnMgZWFjaCBwYWdlCisgKiAtIHRoaXMgaXMgcG90ZW50aWFsbHkgZG9kZ3kgYXMgd2UgbWF5IGVuZCBpbmNyZW1lbnRpbmcgdGhlIHBhZ2UgY291bnQgb2YgYQorICogICBzbGFiIHBhZ2Ugb3IgYSBzZWNvbmRhcnkgcGFnZSBmcm9tIGEgY29tcG91bmQgcGFnZQorICogLSBkb24ndCBwZXJtaXQgYWNjZXNzIHRvIFZNQXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LCBzdWNoIGFzIEkvTyBtYXBwaW5ncworICovCitpbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAorCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCit7CisJaW50IGZsYWdzID0gMDsKKworCWlmICh3cml0ZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX1dSSVRFOworCWlmIChmb3JjZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX0ZPUkNFOworCisJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwKKwkJCQlzdGFydCwgbGVuLCBmbGFncywKKwkJCQlwYWdlcywgdm1hcyk7Cit9CiBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzKTsKIAogREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCBjMTMwYTEzLi4yOTcwZTM1IDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTMyOSw5ICszMjksNyBAQAogCQlzdHJ1Y3Qgem9uZSAqeiA9CiAJCQkmTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzW1pPTkVfSElHSE1FTV07CiAKLQkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykKLQkJCSsgem9uZV9wYWdlX3N0YXRlKHosIE5SX0lOQUNUSVZFKQotCQkJKyB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfQUNUSVZFKTsKKwkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKyB6b25lX2xydV9wYWdlcyh6KTsKIAl9CiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbnVtYmVyIG9mIGhpZ2htZW0gcGFnZXMgaXMgbmV2ZXIgbGFyZ2VyCkBAIC0zNTUsOSArMzUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHg7CiAKLQl4ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUykKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRSkKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkUpOworCXggPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSArIGdsb2JhbF9scnVfcGFnZXMoKTsKIAogCWlmICghdm1faGlnaG1lbV9pc19kaXJ0eWFibGUpCiAJCXggLT0gaGlnaG1lbV9kaXJ0eWFibGVfbWVtb3J5KHgpOwpAQCAtODc2LDYgKzg3Miw3IEBACiAJcGdvZmZfdCBlbmQ7CQkvKiBJbmNsdXNpdmUgKi8KIAlpbnQgc2Nhbm5lZCA9IDA7CiAJaW50IHJhbmdlX3dob2xlID0gMDsKKwlsb25nIG5yX3RvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZTsKIAogCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOwpAQCAtOTM5LDcgKzkzNiw3IEBACiAJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQkJcmV0ID0gMDsKIAkJCX0KLQkJCWlmIChyZXQgfHwgKC0tKHdiYy0+bnJfdG9fd3JpdGUpIDw9IDApKQorCQkJaWYgKHJldCB8fCAoLS1ucl90b193cml0ZSA8PSAwKSkKIAkJCQlkb25lID0gMTsKIAkJCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7CkBAIC05NTgsMTEgKzk1NSwxMiBAQAogCQlpbmRleCA9IDA7CiAJCWdvdG8gcmV0cnk7CiAJfQotCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQotCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKKwlpZiAoIXdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpIHsKKwkJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiBucl90b193cml0ZSA+IDApKQorCQkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CisJCXdiYy0+bnJfdG9fd3JpdGUgPSBucl90b193cml0ZTsKKwl9CiAKLQlpZiAod2JjLT5yYW5nZV9jb250KQotCQl3YmMtPnJhbmdlX3N0YXJ0ID0gaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh3cml0ZV9jYWNoZV9wYWdlcyk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggOWViOWViOS4uZDBhMjQwZiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1pc29sYXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMjIzLDE3ICsyMjMsMTIgQEAKIAogc3RhdGljIHZvaWQgYmFkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jdm9pZCAqcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQogCXByaW50ayhLRVJOX0VNRVJHICJCYWQgcGFnZSBzdGF0ZSBpbiBwcm9jZXNzICclcydcbiIgS0VSTl9FTUVSRwogCQkicGFnZTolcCBmbGFnczoweCUwKmx4IG1hcHBpbmc6JXAgbWFwY291bnQ6JWQgY291bnQ6JWRcbiIsCiAJCWN1cnJlbnQtPmNvbW0sIHBhZ2UsIChpbnQpKDIqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKIAkJKHVuc2lnbmVkIGxvbmcpcGFnZS0+ZmxhZ3MsIHBhZ2UtPm1hcHBpbmcsCiAJCXBhZ2VfbWFwY291bnQocGFnZSksIHBhZ2VfY291bnQocGFnZSkpOwotCWlmIChwYykgewotCQlwcmludGsoS0VSTl9FTUVSRyAiY2dyb3VwOiVwXG4iLCBwYyk7Ci0JCXBhZ2VfcmVzZXRfYmFkX2Nncm91cChwYWdlKTsKLQl9CisKIAlwcmludGsoS0VSTl9FTUVSRyAiVHJ5aW5nIHRvIGZpeCBpdCB1cCwgYnV0IGEgcmVib290IGlzIG5lZWRlZFxuIgogCQlLRVJOX0VNRVJHICJCYWNrdHJhY2U6XG4iKTsKIAlkdW1wX3N0YWNrKCk7CkBAIC00NTQsMTQgKzQ0OSwxNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBmcmVlX3BhZ2VzX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQogeworCWZyZWVfcGFnZV9tbG9jayhwYWdlKTsKIAlpZiAodW5saWtlbHkocGFnZV9tYXBjb3VudChwYWdlKSB8CiAJCShwYWdlLT5tYXBwaW5nICE9IE5VTEwpICB8Ci0JCShwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSAhPSBOVUxMKSB8CiAJCShwYWdlX2NvdW50KHBhZ2UpICE9IDApICB8CiAJCShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfRlJFRSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlfX0NsZWFyUGFnZURpcnR5KHBhZ2UpOworCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKKwkJX19DbGVhclBhZ2VTd2FwQmFja2VkKHBhZ2UpOwogCS8qCiAJICogRm9yIG5vdywgd2UgcmVwb3J0IGlmIFBHX3Jlc2VydmVkIHdhcyBmb3VuZCBzZXQsIGJ1dCBkbyBub3QKIAkgKiBjbGVhciBpdCwgYW5kIGRvIG5vdCBmcmVlIHRoZSBwYWdlLiAgQnV0IHdlIHNoYWxsIHNvb24gbmVlZApAQCAtNjAwLDcgKzU5Nyw2IEBACiB7CiAJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgfAogCQkocGFnZS0+bWFwcGluZyAhPSBOVUxMKSAgfAotCQkocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkgIT0gTlVMTCkgfAogCQkocGFnZV9jb3VudChwYWdlKSAhPSAwKSAgfAogCQkocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVApKSkKIAkJYmFkX3BhZ2UocGFnZSk7CkBAIC02MTQsNyArNjEwLDExIEBACiAKIAlwYWdlLT5mbGFncyAmPSB+KDEgPDwgUEdfdXB0b2RhdGUgfCAxIDw8IFBHX2Vycm9yIHwgMSA8PCBQR19yZWNsYWltIHwKIAkJCTEgPDwgUEdfcmVmZXJlbmNlZCB8IDEgPDwgUEdfYXJjaF8xIHwKLQkJCTEgPDwgUEdfb3duZXJfcHJpdl8xIHwgMSA8PCBQR19tYXBwZWR0b2Rpc2spOworCQkJMSA8PCBQR19vd25lcl9wcml2XzEgfCAxIDw8IFBHX21hcHBlZHRvZGlzaworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCXwgMSA8PCBQR19tbG9ja2VkCisjZW5kaWYKKwkJCSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKIAlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCkBAIC0xODYyLDEwICsxODYyLDIxIEBACiAJCX0KIAl9CiAKLQlwcmludGsoIkFjdGl2ZTolbHUgaW5hY3RpdmU6JWx1IGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdVxuIgorCXByaW50aygiQWN0aXZlX2Fub246JWx1IGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdVxuIgorCQkiIGluYWN0aXZlX2ZpbGU6JWx1IgorLy9UT0RPOiAgY2hlY2svYWRqdXN0IGxpbmUgbGVuZ3RocworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIiB1bmV2aWN0YWJsZTolbHUiCisjZW5kaWYKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiOiVsdSBtYXBwZWQ6JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSksCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VORVZJQ1RBQkxFKSwKKyNlbmRpZgogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSwKQEAgLTE4ODgsOCArMTg5OSwxMyBAQAogCQkJIiBtaW46JWx1a0IiCiAJCQkiIGxvdzolbHVrQiIKIAkJCSIgaGlnaDolbHVrQiIKLQkJCSIgYWN0aXZlOiVsdWtCIgotCQkJIiBpbmFjdGl2ZTolbHVrQiIKKwkJCSIgYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGluYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGFjdGl2ZV9maWxlOiVsdWtCIgorCQkJIiBpbmFjdGl2ZV9maWxlOiVsdWtCIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCSIgdW5ldmljdGFibGU6JWx1a0IiCisjZW5kaWYKIAkJCSIgcHJlc2VudDolbHVrQiIKIAkJCSIgcGFnZXNfc2Nhbm5lZDolbHUiCiAJCQkiIGFsbF91bnJlY2xhaW1hYmxlPyAlcyIKQEAgLTE4OTksOCArMTkxNSwxMyBAQAogCQkJSyh6b25lLT5wYWdlc19taW4pLAogCQkJSyh6b25lLT5wYWdlc19sb3cpLAogCQkJSyh6b25lLT5wYWdlc19oaWdoKSwKLQkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkpLAotCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKSksCisjZW5kaWYKIAkJCUsoem9uZS0+cHJlc2VudF9wYWdlcyksCiAJCQl6b25lLT5wYWdlc19zY2FubmVkLAogCQkJKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgPyAieWVzIiA6ICJubyIpCkBAIC0zNDEwLDEwICszNDMxLDEyIEBACiAJcGdkYXQtPm5yX3pvbmVzID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZ2RhdC0+a3N3YXBkX3dhaXQpOwogCXBnZGF0LT5rc3dhcGRfbWF4X29yZGVyID0gMDsKKwlwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHBnZGF0KTsKIAkKIAlmb3IgKGogPSAwOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGo7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVhbHNpemUsIG1lbW1hcF9wYWdlczsKKwkJZW51bSBscnVfbGlzdCBsOwogCiAJCXNpemUgPSB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShuaWQsIGosIHpvbmVzX3NpemUpOwogCQlyZWFsc2l6ZSA9IHNpemUgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKG5pZCwgaiwKQEAgLTM0MjgsOCArMzQ1MSw4IEBACiAJCQlQQUdFX0FMSUdOKHNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UpKSA+PiBQQUdFX1NISUZUOwogCQlpZiAocmVhbHNpemUgPj0gbWVtbWFwX3BhZ2VzKSB7CiAJCQlyZWFsc2l6ZSAtPSBtZW1tYXBfcGFnZXM7Ci0JCQltbWluaXRfZHByaW50ayhNTUlOSVRfVFJBQ0UsICJtZW1tYXBfaW5pdCIsCi0JCQkJIiVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSIgICVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCiAJCQkJem9uZV9uYW1lc1tqXSwgbWVtbWFwX3BhZ2VzKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0zNDM5LDggKzM0NjIsNyBAQAogCQkvKiBBY2NvdW50IGZvciByZXNlcnZlZCBwYWdlcyAqLwogCQlpZiAoaiA9PSAwICYmIHJlYWxzaXplID4gZG1hX3Jlc2VydmUpIHsKIAkJCXJlYWxzaXplIC09IGRtYV9yZXNlcnZlOwotCQkJbW1pbml0X2RwcmludGsoTU1JTklUX1RSQUNFLCAibWVtbWFwX2luaXQiLAotCQkJCQkiJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAogCQkJCQl6b25lX25hbWVzWzBdLCBkbWFfcmVzZXJ2ZSk7CiAJCX0KIApAQCAtMzQ2NSwxMCArMzQ4NywxNCBAQAogCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwogCiAJCXpvbmVfcGNwX2luaXQoem9uZSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5hY3RpdmVfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKLQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgPSAwOwotCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKKwkJZm9yX2VhY2hfbHJ1KGwpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5scnVbbF0ubGlzdCk7CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiA9IDA7CisJCX0KKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbMF0gPSAwOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFsxXSA9IDA7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWzBdID0gMDsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gPSAwOwogCQl6YXBfem9uZV92bV9zdGF0cyh6b25lKTsKIAkJem9uZS0+ZmxhZ3MgPSAwOwogCQlpZiAoIXNpemUpCkBAIC00MjEwLDcgKzQyMzYsNyBAQAogCWZvcl9lYWNoX3pvbmUoem9uZSkgewogCQl1NjQgdG1wOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCQl0bXAgPSAodTY0KXBhZ2VzX21pbiAqIHpvbmUtPnByZXNlbnRfcGFnZXM7CiAJCWRvX2Rpdih0bXAsIGxvd21lbV9wYWdlcyk7CiAJCWlmIChpc19oaWdobWVtKHpvbmUpKSB7CkBAIC00MjQyLDEzICs0MjY4LDUzIEBACiAJCXpvbmUtPnBhZ2VzX2xvdyAgID0gem9uZS0+cGFnZXNfbWluICsgKHRtcCA+PiAyKTsKIAkJem9uZS0+cGFnZXNfaGlnaCAgPSB6b25lLT5wYWdlc19taW4gKyAodG1wID4+IDEpOwogCQlzZXR1cF96b25lX21pZ3JhdGVfcmVzZXJ2ZSh6b25lKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCX0KIAogCS8qIHVwZGF0ZSB0b3RhbHJlc2VydmVfcGFnZXMgKi8KIAljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKKy8qKgorICogc2V0dXBfcGVyX3pvbmVfaW5hY3RpdmVfcmF0aW8gLSBjYWxsZWQgd2hlbiBtaW5fZnJlZV9rYnl0ZXMgY2hhbmdlcy4KKyAqCisgKiBUaGUgaW5hY3RpdmUgYW5vbiBsaXN0IHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgVk0gbmV2ZXIgaGFzIHRvCisgKiBkbyB0b28gbXVjaCB3b3JrLCBidXQgbGFyZ2UgZW5vdWdoIHRoYXQgZWFjaCBpbmFjdGl2ZSBwYWdlIGhhcyBhIGNoYW5jZQorICogdG8gYmUgcmVmZXJlbmNlZCBhZ2FpbiBiZWZvcmUgaXQgaXMgc3dhcHBlZCBvdXQuCisgKgorICogVGhlIGluYWN0aXZlX2Fub24gcmF0aW8gaXMgdGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkVfQU5PTiB0bworICogSU5BQ1RJVkVfQU5PTiBwYWdlcyBvbiB0aGlzIHpvbmUncyBMUlUsIG1haW50YWluZWQgYnkgdGhlCisgKiBwYWdlb3V0IGNvZGUuIEEgem9uZS0+aW5hY3RpdmVfcmF0aW8gb2YgMyBtZWFucyAzOjEgb3IgMjUlIG9mCisgKiB0aGUgYW5vbnltb3VzIHBhZ2VzIGFyZSBrZXB0IG9uIHRoZSBpbmFjdGl2ZSBsaXN0LgorICoKKyAqIHRvdGFsICAgICB0YXJnZXQgICAgbWF4CisgKiBtZW1vcnkgICAgcmF0aW8gICAgIGluYWN0aXZlIGFub24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgMTBNQiAgICAgICAxICAgICAgICAgNU1CCisgKiAgMTAwTUIgICAgICAgMSAgICAgICAgNTBNQgorICogICAgMUdCICAgICAgIDMgICAgICAgMjUwTUIKKyAqICAgMTBHQiAgICAgIDEwICAgICAgIDAuOUdCCisgKiAgMTAwR0IgICAgICAzMSAgICAgICAgIDNHQgorICogICAgMVRCICAgICAxMDEgICAgICAgIDEwR0IKKyAqICAgMTBUQiAgICAgMzIwICAgICAgICAzMkdCCisgKi8KK3ZvaWQgc2V0dXBfcGVyX3pvbmVfaW5hY3RpdmVfcmF0aW8odm9pZCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKworCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCQl1bnNpZ25lZCBpbnQgZ2IsIHJhdGlvOworCisJCS8qIFpvbmUgc2l6ZSBpbiBnaWdhYnl0ZXMgKi8KKwkJZ2IgPSB6b25lLT5wcmVzZW50X3BhZ2VzID4+ICgzMCAtIFBBR0VfU0hJRlQpOworCQlyYXRpbyA9IGludF9zcXJ0KDEwICogZ2IpOworCQlpZiAoIXJhdGlvKQorCQkJcmF0aW8gPSAxOworCisJCXpvbmUtPmluYWN0aXZlX3JhdGlvID0gcmF0aW87CisJfQorfQorCiAvKgogICogSW5pdGlhbGlzZSBtaW5fZnJlZV9rYnl0ZXMuCiAgKgpAQCAtNDI4Niw2ICs0MzUyLDcgQEAKIAkJbWluX2ZyZWVfa2J5dGVzID0gNjU1MzY7CiAJc2V0dXBfcGVyX3pvbmVfcGFnZXNfbWluKCk7CiAJc2V0dXBfcGVyX3pvbmVfbG93bWVtX3Jlc2VydmUoKTsKKwlzZXR1cF9wZXJfem9uZV9pbmFjdGl2ZV9yYXRpbygpOwogCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQoaW5pdF9wZXJfem9uZV9wYWdlc19taW4pCmRpZmYgLS1naXQgYS9tbS9wYWdlX2Nncm91cC5jIGIvbW0vcGFnZV9jZ3JvdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTlkNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW0vcGFnZV9jZ3JvdXAuYwpAQCAtMCwwICsxLDI1NiBAQAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdF9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisKK3N0YXRpYyB2b2lkIF9fbWVtaW5pdAorX19pbml0X3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsIHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXBjLT5mbGFncyA9IDA7CisJcGMtPm1lbV9jZ3JvdXAgPSBOVUxMOworCXBjLT5wYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKK30KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX3VzYWdlOworCisjaWYgIWRlZmluZWQoQ09ORklHX1NQQVJTRU1FTSkKKworCit2b2lkIF9faW5pdCBwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCit7CisJcGdkYXQtPm5vZGVfcGFnZV9jZ3JvdXAgPSBOVUxMOworfQorCitzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZTsKKworCWJhc2UgPSBOT0RFX0RBVEEocGFnZV90b19uaWQocGFnZSkpLT5ub2RlX3BhZ2VfY2dyb3VwOworCWlmICh1bmxpa2VseSghYmFzZSkpCisJCXJldHVybiBOVUxMOworCisJb2Zmc2V0ID0gcGZuIC0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKHBhZ2UpKS0+bm9kZV9zdGFydF9wZm47CisJcmV0dXJuIGJhc2UgKyBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFsbG9jX25vZGVfcGFnZV9jZ3JvdXAoaW50IG5pZCkKK3sKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2UsICpwYzsKKwl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemU7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG5yX3BhZ2VzLCBpbmRleDsKKworCXN0YXJ0X3BmbiA9IE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbjsKKwlucl9wYWdlcyA9IE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXM7CisKKwl0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwYWdlX2Nncm91cCkgKiBucl9wYWdlczsKKworCWJhc2UgPSBfX2FsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKE5PREVfREFUQShuaWQpLAorCQkJdGFibGVfc2l6ZSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnJfcGFnZXM7IGluZGV4KyspIHsKKwkJcGMgPSBiYXNlICsgaW5kZXg7CisJCV9faW5pdF9wYWdlX2Nncm91cChwYywgc3RhcnRfcGZuICsgaW5kZXgpOworCX0KKwlOT0RFX0RBVEEobmlkKS0+bm9kZV9wYWdlX2Nncm91cCA9IGJhc2U7CisJdG90YWxfdXNhZ2UgKz0gdGFibGVfc2l6ZTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgcGFnZV9jZ3JvdXBfaW5pdCh2b2lkKQoreworCisJaW50IG5pZCwgZmFpbDsKKworCWlmIChtZW1fY2dyb3VwX3N1YnN5cy5kaXNhYmxlZCkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSAgeworCQlmYWlsID0gYWxsb2Nfbm9kZV9wYWdlX2Nncm91cChuaWQpOworCQlpZiAoZmFpbCkKKwkJCWdvdG8gZmFpbDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiYWxsb2NhdGVkICVsZCBieXRlcyBvZiBwYWdlX2Nncm91cFxuIiwgdG90YWxfdXNhZ2UpOworCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSB0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IG9wdGlvbiBpZiB5b3UiCisJIiBkb24ndCB3YW50XG4iKTsKKwlyZXR1cm47CitmYWlsOgorCXByaW50ayhLRVJOX0NSSVQgImFsbG9jYXRpb24gb2YgcGFnZV9jZ3JvdXAgd2FzIGZhaWxlZC5cbiIpOworCXByaW50ayhLRVJOX0NSSVQgInBsZWFzZSB0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IGJvb3Qgb3B0aW9uXG4iKTsKKwlwYW5pYygiT3V0IG9mIG1lbW9yeSIpOworfQorCisjZWxzZSAvKiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVAgKi8KKworc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwlzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb24gPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CisKKwlyZXR1cm4gc2VjdGlvbi0+cGFnZV9jZ3JvdXAgKyBwZm47Cit9CisKK2ludCBfX21lbWluaXQgaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbjsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2UsICpwYzsKKwl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemU7CisJaW50IG5pZCwgaW5kZXg7CisKKwlzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCisJaWYgKHNlY3Rpb24tPnBhZ2VfY2dyb3VwKQorCQlyZXR1cm4gMDsKKworCW5pZCA9IHBhZ2VfdG9fbmlkKHBmbl90b19wYWdlKHBmbikpOworCisJdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApICogUEFHRVNfUEVSX1NFQ1RJT047CisJaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKKwkJYmFzZSA9IGttYWxsb2Nfbm9kZSh0YWJsZV9zaXplLCBHRlBfS0VSTkVMLCBuaWQpOworCQlpZiAoIWJhc2UpCisJCQliYXNlID0gdm1hbGxvY19ub2RlKHRhYmxlX3NpemUsIG5pZCk7CisJfSBlbHNlIHsKKwkJYmFzZSA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMoTk9ERV9EQVRBKG5pZCksIHRhYmxlX3NpemUsCisJCQkJUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCX0KKworCWlmICghYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgInBhZ2UgY2dyb3VwIGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBBR0VTX1BFUl9TRUNUSU9OOyBpbmRleCsrKSB7CisJCXBjID0gYmFzZSArIGluZGV4OworCQlfX2luaXRfcGFnZV9jZ3JvdXAocGMsIHBmbiArIGluZGV4KTsKKwl9CisKKwlzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCXNlY3Rpb24tPnBhZ2VfY2dyb3VwID0gYmFzZSAtIHBmbjsKKwl0b3RhbF91c2FnZSArPSB0YWJsZV9zaXplOworCXJldHVybiAwOworfQorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwordm9pZCBfX2ZyZWVfcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBwZm4pCit7CisJc3RydWN0IG1lbV9zZWN0aW9uICptczsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2U7CisKKwltcyA9IF9fcGZuX3RvX3NlY3Rpb24ocGZuKTsKKwlpZiAoIW1zIHx8ICFtcy0+cGFnZV9jZ3JvdXApCisJCXJldHVybjsKKwliYXNlID0gbXMtPnBhZ2VfY2dyb3VwICsgcGZuOworCWlmIChpc192bWFsbG9jX2FkZHIoYmFzZSkpIHsKKwkJdmZyZWUoYmFzZSk7CisJCW1zLT5wYWdlX2Nncm91cCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYmFzZSk7CisJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKSB7IC8qIElzIGJvb3RtZW0gPyAqLworCQkJa2ZyZWUoYmFzZSk7CisJCQltcy0+cGFnZV9jZ3JvdXAgPSBOVUxMOworCQl9CisJfQorfQorCitpbnQgb25saW5lX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCWludCBuaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBwZm47CisJaW50IGZhaWwgPSAwOworCisJc3RhcnQgPSBzdGFydF9wZm4gJiAoUEFHRVNfUEVSX1NFQ1RJT04gLSAxKTsKKwllbmQgPSBBTElHTihzdGFydF9wZm4gKyBucl9wYWdlcywgUEFHRVNfUEVSX1NFQ1RJT04pOworCisJZm9yIChwZm4gPSBzdGFydDsgIWZhaWwgJiYgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pIHsKKwkJaWYgKCFwZm5fcHJlc2VudChwZm4pKQorCQkJY29udGludWU7CisJCWZhaWwgPSBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuKTsKKwl9CisJaWYgKCFmYWlsKQorCQlyZXR1cm4gMDsKKworCS8qIHJvbGxiYWNrICovCisJZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pCisJCV9fZnJlZV9wYWdlX2Nncm91cChwZm4pOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK2ludCBvZmZsaW5lX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgbmlkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgcGZuOworCisJc3RhcnQgPSBzdGFydF9wZm4gJiAoUEFHRVNfUEVSX1NFQ1RJT04gLSAxKTsKKwllbmQgPSBBTElHTihzdGFydF9wZm4gKyBucl9wYWdlcywgUEFHRVNfUEVSX1NFQ1RJT04pOworCisJZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pCisJCV9fZnJlZV9wYWdlX2Nncm91cChwZm4pOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgcGFnZV9jZ3JvdXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1lbW9yeV9ub3RpZnkgKm1uID0gYXJnOworCWludCByZXQgPSAwOworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fR09JTkdfT05MSU5FOgorCQlyZXQgPSBvbmxpbmVfcGFnZV9jZ3JvdXAobW4tPnN0YXJ0X3BmbiwKKwkJCQkgICBtbi0+bnJfcGFnZXMsIG1uLT5zdGF0dXNfY2hhbmdlX25pZCk7CisJCWJyZWFrOworCWNhc2UgTUVNX0NBTkNFTF9PTkxJTkU6CisJY2FzZSBNRU1fT0ZGTElORToKKwkJb2ZmbGluZV9wYWdlX2Nncm91cChtbi0+c3RhcnRfcGZuLAorCQkJCW1uLT5ucl9wYWdlcywgbW4tPnN0YXR1c19jaGFuZ2VfbmlkKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKKwkJYnJlYWs7CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX0NBTkNFTF9PRkZMSU5FOgorCQlicmVhazsKKwl9CisJcmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgorCit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZm47CisJaW50IGZhaWwgPSAwOworCisJaWYgKG1lbV9jZ3JvdXBfc3Vic3lzLmRpc2FibGVkKQorCQlyZXR1cm47CisKKwlmb3IgKHBmbiA9IDA7ICFmYWlsICYmIHBmbiA8IG1heF9wZm47IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikgeworCQlpZiAoIXBmbl9wcmVzZW50KHBmbikpCisJCQljb250aW51ZTsKKwkJZmFpbCA9IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4pOworCX0KKwlpZiAoZmFpbCkgeworCQlwcmludGsoS0VSTl9DUklUICJ0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IGJvb3Qgb3B0aW9uXG4iKTsKKwkJcGFuaWMoIk91dCBvZiBtZW1vcnkiKTsKKwl9IGVsc2UgeworCQlob3RwbHVnX21lbW9yeV9ub3RpZmllcihwYWdlX2Nncm91cF9jYWxsYmFjaywgMCk7CisJfQorCXByaW50ayhLRVJOX0lORk8gImFsbG9jYXRlZCAlbGQgYnl0ZXMgb2YgcGFnZV9jZ3JvdXBcbiIsIHRvdGFsX3VzYWdlKTsKKwlwcmludGsoS0VSTl9JTkZPICJwbGVhc2UgdHJ5IGNncm91cF9kaXNhYmxlPW1lbW9yeSBvcHRpb24gaWYgeW91IGRvbid0IgorCSIgd2FudFxuIik7Cit9CisKK3ZvaWQgX19pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3sKKwlyZXR1cm47Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCA2Y2JkOWE3Li5iZWM4M2MxIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgbWF4X3NhbmVfcmVhZGFoZWFkKHVuc2lnbmVkIGxvbmcgbnIpCiB7Ci0JcmV0dXJuIG1pbihuciwgKG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfSU5BQ1RJVkUpCisJcmV0dXJuIG1pbihuciwgKG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfSU5BQ1RJVkVfRklMRSkKIAkJKyBub2RlX3BhZ2Vfc3RhdGUobnVtYV9ub2RlX2lkKCksIE5SX0ZSRUVfUEFHRVMpKSAvIDIpOwogfQogCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMDM4M2FjZi4uMTA5OTM5NCAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtNTMsOSArNTMsNDcgQEAKIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1zdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2FjaGVwOworI2luY2x1ZGUgImludGVybmFsLmgiCiAKLS8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIG1tYXBfc2VtLiAqLworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jYWNoZXA7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYV9hbGxvYyh2b2lkKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCit7CisJa21lbV9jYWNoZV9mcmVlKGFub25fdm1hX2NhY2hlcCwgYW5vbl92bWEpOworfQorCisvKioKKyAqIGFub25fdm1hX3ByZXBhcmUgLSBhdHRhY2ggYW4gYW5vbl92bWEgdG8gYSBtZW1vcnkgcmVnaW9uCisgKiBAdm1hOiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBxdWVzdGlvbgorICoKKyAqIFRoaXMgbWFrZXMgc3VyZSB0aGUgbWVtb3J5IG1hcHBpbmcgZGVzY3JpYmVkIGJ5ICd2bWEnIGhhcworICogYW4gJ2Fub25fdm1hJyBhdHRhY2hlZCB0byBpdCwgc28gdGhhdCB3ZSBjYW4gYXNzb2NpYXRlIHRoZQorICogYW5vbnltb3VzIHBhZ2VzIG1hcHBlZCBpbnRvIGl0IHdpdGggdGhhdCBhbm9uX3ZtYS4KKyAqCisgKiBUaGUgY29tbW9uIGNhc2Ugd2lsbCBiZSB0aGF0IHdlIGFscmVhZHkgaGF2ZSBvbmUsIGJ1dCBpZgorICogaWYgbm90IHdlIGVpdGhlciBuZWVkIHRvIGZpbmQgYW4gYWRqYWNlbnQgbWFwcGluZyB0aGF0IHdlCisgKiBjYW4gcmUtdXNlIHRoZSBhbm9uX3ZtYSBmcm9tICh2ZXJ5IGNvbW1vbiB3aGVuIHRoZSBvbmx5CisgKiByZWFzb24gZm9yIHNwbGl0dGluZyBhIHZtYSBoYXMgYmVlbiBtcHJvdGVjdCgpKSwgb3Igd2UKKyAqIGFsbG9jYXRlIGEgbmV3IG9uZS4KKyAqCisgKiBBbm9uLXZtYSBhbGxvY2F0aW9ucyBhcmUgdmVyeSBzdWJ0bGUsIGJlY2F1c2Ugd2UgbWF5IGhhdmUKKyAqIG9wdGltaXN0aWNhbGx5IGxvb2tlZCB1cCBhbiBhbm9uX3ZtYSBpbiBwYWdlX2xvY2tfYW5vbl92bWEoKQorICogYW5kIHRoYXQgbWF5IGFjdHVhbGx5IHRvdWNoIHRoZSBzcGlubG9jayBldmVuIGluIHRoZSBuZXdseQorICogYWxsb2NhdGVkIHZtYSAoaXQgZGVwZW5kcyBvbiBSQ1UgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgKiBhbm9uX3ZtYSBpc24ndCBhY3R1YWxseSBkZXN0cm95ZWQpLgorICoKKyAqIEFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIGRvIHByb3BlciBhbm9uX3ZtYSBsb2NraW5nIGV2ZW4KKyAqIGZvciB0aGUgbmV3IGFsbG9jYXRpb24uIEF0IHRoZSBzYW1lIHRpbWUsIHdlIGRvIG5vdCB3YW50CisgKiB0byBkbyBhbnkgbG9ja2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFscmVhZHkgaGF2aW5nCisgKiBhbiBhbm9uX3ZtYS4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWRpbmcuCisgKi8KIGludCBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwpAQCAtNjMsMjAgKzEwMSwxNyBAQAogCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpIHsKIAkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCQlzdHJ1Y3QgYW5vbl92bWEgKmFsbG9jYXRlZCwgKmxvY2tlZDsKKwkJc3RydWN0IGFub25fdm1hICphbGxvY2F0ZWQ7CiAKIAkJYW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpOwotCQlpZiAoYW5vbl92bWEpIHsKLQkJCWFsbG9jYXRlZCA9IE5VTEw7Ci0JCQlsb2NrZWQgPSBhbm9uX3ZtYTsKLQkJCXNwaW5fbG9jaygmbG9ja2VkLT5sb2NrKTsKLQkJfSBlbHNlIHsKKwkJYWxsb2NhdGVkID0gTlVMTDsKKwkJaWYgKCFhbm9uX3ZtYSkgewogCQkJYW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpOwogCQkJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlhbGxvY2F0ZWQgPSBhbm9uX3ZtYTsKLQkJCWxvY2tlZCA9IE5VTEw7CiAJCX0KKwkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiAKIAkJLyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovCiAJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CkBAIC04Nyw4ICsxMjIsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAotCQlpZiAobG9ja2VkKQotCQkJc3Bpbl91bmxvY2soJmxvY2tlZC0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiAJCWlmICh1bmxpa2VseShhbGxvY2F0ZWQpKQogCQkJYW5vbl92bWFfZnJlZShhbGxvY2F0ZWQpOwogCX0KQEAgLTE1Nyw3ICsxOTEsNyBAQAogICogR2V0dGluZyBhIGxvY2sgb24gYSBzdGFibGUgYW5vbl92bWEgZnJvbSBhIHBhZ2Ugb2ZmIHRoZSBMUlUgaXMKICAqIHRyaWNreTogcGFnZV9sb2NrX2Fub25fdm1hIHJlbHkgb24gUkNVIHRvIGd1YXJkIGFnYWluc3QgdGhlIHJhY2VzLgogICovCi1zdGF0aWMgc3RydWN0IGFub25fdm1hICpwYWdlX2xvY2tfYW5vbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdHJ1Y3QgYW5vbl92bWEgKnBhZ2VfbG9ja19hbm9uX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwogCXVuc2lnbmVkIGxvbmcgYW5vbl9tYXBwaW5nOwpAQCAtMTc3LDcgKzIxMSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHBhZ2VfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCit2b2lkIHBhZ2VfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCiB7CiAJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTI2OCw2ICszMDIsMzIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBwYWdlX21hcHBlZF9pbl92bWEgLSBjaGVjayB3aGV0aGVyIGEgcGFnZSBpcyByZWFsbHkgbWFwcGVkIGluIGEgVk1BCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICogQHZtYTogdGhlIFZNQSB0byB0ZXN0CisgKgorICogUmV0dXJucyAxIGlmIHRoZSBwYWdlIGlzIG1hcHBlZCBpbnRvIHRoZSBwYWdlIHRhYmxlcyBvZiB0aGUgVk1BLCAwCisgKiBpZiB0aGUgcGFnZSBpcyBub3QgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIHRoaXMgVk1BLiAgT25seQorICogdmFsaWQgZm9yIG5vcm1hbCBmaWxlIG9yIGFub255bW91cyBWTUFzLgorICovCitzdGF0aWMgaW50IHBhZ2VfbWFwcGVkX2luX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXB0ZV90ICpwdGU7CisJc3BpbmxvY2tfdCAqcHRsOworCisJYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CisJaWYgKGFkZHJlc3MgPT0gLUVGQVVMVCkJCS8qIG91dCBvZiB2bWEgcmFuZ2UgKi8KKwkJcmV0dXJuIDA7CisJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIHZtYS0+dm1fbW0sIGFkZHJlc3MsICZwdGwsIDEpOworCWlmICghcHRlKQkJCS8qIHRoZSBwYWdlIGlzIG5vdCBpbiB0aGlzIG1tICovCisJCXJldHVybiAwOworCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBTdWJmdW5jdGlvbnMgb2YgcGFnZV9yZWZlcmVuY2VkOiBwYWdlX3JlZmVyZW5jZWRfb25lIGNhbGxlZAogICogcmVwZWF0ZWRseSBmcm9tIGVpdGhlciBwYWdlX3JlZmVyZW5jZWRfYW5vbiBvciBwYWdlX3JlZmVyZW5jZWRfZmlsZS4KQEAgLTI4OSwxMCArMzQ5LDE3IEBACiAJaWYgKCFwdGUpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBEb24ndCB3YW50IHRvIGVsZXZhdGUgcmVmZXJlbmNlZCBmb3IgbWxvY2tlZCBwYWdlIHRoYXQgZ2V0cyB0aGlzIGZhciwKKwkgKiBpbiBvcmRlciB0aGF0IGl0IHByb2dyZXNzZXMgdG8gdHJ5X3RvX3VubWFwIGFuZCBpcyBtb3ZlZCB0byB0aGUKKwkgKiB1bmV2aWN0YWJsZSBsaXN0LgorCSAqLwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCXJlZmVyZW5jZWQrKzsKIAkJKm1hcGNvdW50ID0gMTsJLyogYnJlYWsgZWFybHkgZnJvbSBsb29wICovCi0JfSBlbHNlIGlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCisJCWdvdG8gb3V0X3VubWFwOworCX0KKworCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCiAJCXJlZmVyZW5jZWQrKzsKIAogCS8qIFByZXRlbmQgdGhlIHBhZ2UgaXMgcmVmZXJlbmNlZCBpZiB0aGUgdGFzayBoYXMgdGhlCkBAIC0zMDEsNiArMzY4LDcgQEAKIAkJCXJ3c2VtX2lzX2xvY2tlZCgmbW0tPm1tYXBfc2VtKSkKIAkJcmVmZXJlbmNlZCsrOwogCitvdXRfdW5tYXA6CiAJKCptYXBjb3VudCktLTsKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKIG91dDoKQEAgLTM5MCwxMSArNDU4LDYgQEAKIAkJICovCiAJCWlmIChtZW1fY29udCAmJiAhbW1fbWF0Y2hfY2dyb3VwKHZtYS0+dm1fbW0sIG1lbV9jb250KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fTE9DS0VEfFZNX01BWVNIQVJFKSkKLQkJCQkgID09IChWTV9MT0NLRUR8Vk1fTUFZU0hBUkUpKSB7Ci0JCQlyZWZlcmVuY2VkKys7Ci0JCQlicmVhazsKLQkJfQogCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9vbmUocGFnZSwgdm1hLCAmbWFwY291bnQpOwogCQlpZiAoIW1hcGNvdW50KQogCQkJYnJlYWs7CkBAIC02NzQsOCArNzM3LDggQEAKIAkJCXBhZ2VfY2xlYXJfZGlydHkocGFnZSk7CiAJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJfQotCi0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOwogCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwKIAkJCVBhZ2VBbm9uKHBhZ2UpID8gTlJfQU5PTl9QQUdFUyA6IE5SX0ZJTEVfTUFQUEVEKTsKIAkJLyoKQEAgLTcxNywxMSArNzgwLDE2IEBACiAJICogSWYgaXQncyByZWNlbnRseSByZWZlcmVuY2VkIChwZXJoYXBzIHBhZ2VfcmVmZXJlbmNlZAogCSAqIHNraXBwZWQgb3ZlciB0aGlzIG1tKSB0aGVuIHdlIHNob3VsZCByZWFjdGl2YXRlIGl0LgogCSAqLwotCWlmICghbWlncmF0aW9uICYmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgfHwKLQkJCShwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpKSkgewotCQlyZXQgPSBTV0FQX0ZBSUw7Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KKwlpZiAoIW1pZ3JhdGlvbikgeworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJcmV0ID0gU1dBUF9NTE9DSzsKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisJCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpIHsKKwkJCXJldCA9IFNXQVBfRkFJTDsKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisgIAl9CiAKIAkvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqLwogCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwYWdlX3RvX3BmbihwYWdlKSk7CkBAIC04MDIsMTIgKzg3MCwxNyBAQAogICogRm9yIHZlcnkgc3BhcnNlbHkgcG9wdWxhdGVkIFZNQXMgdGhpcyBpcyBhIGxpdHRsZSBpbmVmZmljaWVudCAtIGNoYW5jZXMgYXJlCiAgKiB0aGVyZSB0aGVyZSB3b24ndCBiZSBtYW55IHB0ZXMgbG9jYXRlZCB3aXRoaW4gdGhlIHNjYW4gY2x1c3Rlci4gIEluIHRoaXMgY2FzZQogICogbWF5YmUgd2UgY291bGQgc2NhbiBmdXJ0aGVyIC0gdG8gdGhlIGVuZCBvZiB0aGUgcHRlIHBhZ2UsIHBlcmhhcHMuCisgKgorICogTWxvY2tlZCBwYWdlczogIGNoZWNrIFZNX0xPQ0tFRCB1bmRlciBtbWFwX3NlbSBoZWxkIGZvciByZWFkLCBpZiB3ZSBjYW4KKyAqIGFjcXVpcmUgaXQgd2l0aG91dCBibG9ja2luZy4gIElmIHZtYSBsb2NrZWQsIG1sb2NrIHRoZSBwYWdlcyBpbiB0aGUgY2x1c3RlciwKKyAqIHJhdGhlciB0aGFuIHVubWFwcGluZyB0aGVtLiAgSWYgd2UgZW5jb3VudGVyIHRoZSAiY2hlY2tfcGFnZSIgdGhhdCB2bXNjYW4gaXMKKyAqIHRyeWluZyB0byB1bm1hcCwgcmV0dXJuIFNXQVBfTUxPQ0ssIGVsc2UgZGVmYXVsdCBTV0FQX0FHQUlOLgogICovCiAjZGVmaW5lIENMVVNURVJfU0laRQltaW4oMzIqUEFHRV9TSVpFLCBQTURfU0laRSkKICNkZWZpbmUgQ0xVU1RFUl9NQVNLCSh+KENMVVNURVJfU0laRSAtIDEpKQogCi1zdGF0aWMgdm9pZCB0cnlfdG9fdW5tYXBfY2x1c3Rlcih1bnNpZ25lZCBsb25nIGN1cnNvciwKLQl1bnNpZ25lZCBpbnQgKm1hcGNvdW50LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2NsdXN0ZXIodW5zaWduZWQgbG9uZyBjdXJzb3IsIHVuc2lnbmVkIGludCAqbWFwY291bnQsCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqY2hlY2tfcGFnZSkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJcGdkX3QgKnBnZDsKQEAgLTgxOSw2ICs4OTIsOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKKwlpbnQgbG9ja2VkX3ZtYSA9IDA7CiAKIAlhZGRyZXNzID0gKHZtYS0+dm1fc3RhcnQgKyBjdXJzb3IpICYgQ0xVU1RFUl9NQVNLOwogCWVuZCA9IGFkZHJlc3MgKyBDTFVTVEVSX1NJWkU7CkBAIC04MjksMTUgKzkwNCwyNiBAQAogCiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE1MT0NLX1BBR0VTID0+IGZlYXR1cmUgaXMgY29uZmlndXJlZC4KKwkgKiBpZiB3ZSBjYW4gYWNxdWlyZSB0aGUgbW1hcF9zZW0gZm9yIHJlYWQsIGFuZCB2bWEgaXMgVk1fTE9DS0VELAorCSAqIGtlZXAgdGhlIHNlbSB3aGlsZSBzY2FubmluZyB0aGUgY2x1c3RlciBmb3IgbWxvY2tpbmcgcGFnZXMuCisJICovCisJaWYgKE1MT0NLX1BBR0VTICYmIGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwkJbG9ja2VkX3ZtYSA9ICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKTsKKwkJaWYgKCFsb2NrZWRfdm1hKQorCQkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOyAvKiBkb24ndCBuZWVkIGl0ICovCisJfQogCiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyZXNzLCAmcHRsKTsKIApAQCAtODUwLDYgKzkzNiwxMyBAQAogCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyZXNzLCAqcHRlKTsKIAkJQlVHX09OKCFwYWdlIHx8IFBhZ2VBbm9uKHBhZ2UpKTsKIAorCQlpZiAobG9ja2VkX3ZtYSkgeworCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7ICAgLyogbm8tb3AgaWYgYWxyZWFkeSBtbG9ja2VkICovCisJCQlpZiAocGFnZSA9PSBjaGVja19wYWdlKQorCQkJCXJldCA9IFNXQVBfTUxPQ0s7CisJCQljb250aW51ZTsJLyogZG9uJ3QgdW5tYXAgKi8KKwkJfQorCiAJCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCiAJCQljb250aW51ZTsKIApAQCAtODcxLDM5ICs5NjQsMTA0IEBACiAJCSgqbWFwY291bnQpLS07CiAJfQogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKKwlpZiAobG9ja2VkX3ZtYSkKKwkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtaWdyYXRpb24pCisvKgorICogY29tbW9uIGhhbmRsaW5nIGZvciBwYWdlcyBtYXBwZWQgaW4gVk1fTE9DS0VEIHZtYXMKKyAqLworc3RhdGljIGludCB0cnlfdG9fbWxvY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IG1sb2NrZWQgPSAwOworCisJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCW1sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJbWxvY2tlZCsrOwkvKiByZWFsbHkgbWxvY2tlZCB0aGUgcGFnZSAqLworCQl9CisJCXVwX3JlYWQoJnZtYS0+dm1fbW0tPm1tYXBfc2VtKTsKKwl9CisJcmV0dXJuIG1sb2NrZWQ7Cit9CisKKy8qKgorICogdHJ5X3RvX3VubWFwX2Fub24gLSB1bm1hcCBvciB1bmxvY2sgYW5vbnltb3VzIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZAorICogcm1hcCBtZXRob2QKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB1bm1hcC91bmxvY2sKKyAqIEB1bmxvY2s6ICByZXF1ZXN0IGZvciB1bmxvY2sgcmF0aGVyIHRoYW4gdW5tYXAgW3VubGlrZWx5XQorICogQG1pZ3JhdGlvbjogIHVubWFwcGluZyBmb3IgbWlncmF0aW9uIC0gaWdub3JlZCBpZiBAdW5sb2NrCisgKgorICogRmluZCBhbGwgdGhlIG1hcHBpbmdzIG9mIGEgcGFnZSB1c2luZyB0aGUgbWFwcGluZyBwb2ludGVyIGFuZCB0aGUgdm1hIGNoYWlucworICogY29udGFpbmVkIGluIHRoZSBhbm9uX3ZtYSBzdHJ1Y3QgaXQgcG9pbnRzIHRvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXAvdHJ5X3RvX211bmxvY2sgZm9yCisgKiBhbm9ueW1vdXMgcGFnZXMuCisgKiBXaGVuIGNhbGxlZCBmcm9tIHRyeV90b19tdW5sb2NrKCksIHRoZSBtbWFwX3NlbSBvZiB0aGUgbW0gY29udGFpbmluZyB0aGUgdm1hCisgKiB3aGVyZSB0aGUgcGFnZSB3YXMgZm91bmQgd2lsbCBiZSBoZWxkIGZvciB3cml0ZS4gIFNvLCB3ZSB3b24ndCByZWNoZWNrCisgKiB2bV9mbGFncyBmb3IgdGhhdCBWTUEuICBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVzZSB0aGF0IHZtYSBzaG91bGRuJ3QgYmUKKyAqICdMT0NLRUQuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB1bmxvY2ssIGludCBtaWdyYXRpb24pCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwl1bnNpZ25lZCBpbnQgbWxvY2tlZCA9IDA7CiAJaW50IHJldCA9IFNXQVBfQUdBSU47CiAKKwlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkKKwkJcmV0ID0gU1dBUF9TVUNDRVNTOwkvKiBkZWZhdWx0IGZvciB0cnlfdG9fbXVubG9jaygpICovCisKIAlhbm9uX3ZtYSA9IHBhZ2VfbG9ja19hbm9uX3ZtYShwYWdlKTsKIAlpZiAoIWFub25fdm1hKQogCQlyZXR1cm4gcmV0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgewotCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKLQkJaWYgKHJldCA9PSBTV0FQX0ZBSUwgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQotCQkJYnJlYWs7CisJCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKSB7CisJCQlpZiAoISgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYKKwkJCSAgICAgIHBhZ2VfbWFwcGVkX2luX3ZtYShwYWdlLCB2bWEpKSkKKwkJCQljb250aW51ZTsgIC8qIG11c3QgdmlzaXQgYWxsIHVubG9ja2VkIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7ICAvKiBzYXcgYXQgbGVhc3Qgb25lIG1sb2NrZWQgdm1hICovCisJCX0gZWxzZSB7CisJCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKKwkJCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAocmV0ID09IFNXQVBfTUxPQ0spIHsKKwkJCW1sb2NrZWQgPSB0cnlfdG9fbWxvY2tfcGFnZShwYWdlLCB2bWEpOworCQkJaWYgKG1sb2NrZWQpCisJCQkJYnJlYWs7CS8qIHN0b3AgaWYgYWN0dWFsbHkgbWxvY2tlZCBwYWdlICovCisJCX0KIAl9CiAKIAlwYWdlX3VubG9ja19hbm9uX3ZtYShhbm9uX3ZtYSk7CisKKwlpZiAobWxvY2tlZCkKKwkJcmV0ID0gU1dBUF9NTE9DSzsJLyogYWN0dWFsbHkgbWxvY2tlZCB0aGUgcGFnZSAqLworCWVsc2UgaWYgKHJldCA9PSBTV0FQX01MT0NLKQorCQlyZXQgPSBTV0FQX0FHQUlOOwkvKiBzYXcgVk1fTE9DS0VEIHZtYSAqLworCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiB0cnlfdG9fdW5tYXBfZmlsZSAtIHVubWFwIGZpbGUgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkIHJtYXAgbWV0aG9kCi0gKiBAcGFnZTogdGhlIHBhZ2UgdG8gdW5tYXAKLSAqIEBtaWdyYXRpb246IG1pZ3JhdGlvbiBmbGFnCisgKiB0cnlfdG9fdW5tYXBfZmlsZSAtIHVubWFwL3VubG9jayBmaWxlIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZCBybWFwIG1ldGhvZAorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwL3VubG9jaworICogQHVubG9jazogIHJlcXVlc3QgZm9yIHVubG9jayByYXRoZXIgdGhhbiB1bm1hcCBbdW5saWtlbHldCisgKiBAbWlncmF0aW9uOiAgdW5tYXBwaW5nIGZvciBtaWdyYXRpb24gLSBpZ25vcmVkIGlmIEB1bmxvY2sKICAqCiAgKiBGaW5kIGFsbCB0aGUgbWFwcGluZ3Mgb2YgYSBwYWdlIHVzaW5nIHRoZSBtYXBwaW5nIHBvaW50ZXIgYW5kIHRoZSB2bWEgY2hhaW5zCiAgKiBjb250YWluZWQgaW4gdGhlIGFkZHJlc3Nfc3BhY2Ugc3RydWN0IGl0IHBvaW50cyB0by4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwIGZvciBvYmplY3QtYmFzZWQgcGFnZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwL3RyeV90b19tdW5sb2NrIGZvcgorICogb2JqZWN0LWJhc2VkIHBhZ2VzLgorICogV2hlbiBjYWxsZWQgZnJvbSB0cnlfdG9fbXVubG9jaygpLCB0aGUgbW1hcF9zZW0gb2YgdGhlIG1tIGNvbnRhaW5pbmcgdGhlIHZtYQorICogd2hlcmUgdGhlIHBhZ2Ugd2FzIGZvdW5kIHdpbGwgYmUgaGVsZCBmb3Igd3JpdGUuICBTbywgd2Ugd29uJ3QgcmVjaGVjaworICogdm1fZmxhZ3MgZm9yIHRoYXQgVk1BLiAgVGhhdCBzaG91bGQgYmUgT0ssIGJlY2F1c2UgdGhhdCB2bWEgc2hvdWxkbid0IGJlCisgKiAnTE9DS0VELgogICovCi1zdGF0aWMgaW50IHRyeV90b191bm1hcF9maWxlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbWlncmF0aW9uKQorc3RhdGljIGludCB0cnlfdG9fdW5tYXBfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHVubG9jaywgaW50IG1pZ3JhdGlvbikKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAJcGdvZmZfdCBwZ29mZiA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gUEFHRV9TSElGVCk7CkBAIC05MTQsMjAgKzEwNzIsNDQgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9ubF9jdXJzb3IgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWF4X25sX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBtYXBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbWxvY2tlZCA9IDA7CisKKwlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkKKwkJcmV0ID0gU1dBUF9TVUNDRVNTOwkvKiBkZWZhdWx0IGZvciB0cnlfdG9fbXVubG9jaygpICovCiAKIAlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl2bWFfcHJpb190cmVlX2ZvcmVhY2godm1hLCAmaXRlciwgJm1hcHBpbmctPmlfbW1hcCwgcGdvZmYsIHBnb2ZmKSB7Ci0JCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLCBtaWdyYXRpb24pOwotCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCi0JCQlnb3RvIG91dDsKKwkJaWYgKE1MT0NLX1BBR0VTICYmIHVubGlrZWx5KHVubG9jaykpIHsKKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKQorCQkJCWNvbnRpbnVlOwkvKiBtdXN0IHZpc2l0IGFsbCB2bWFzICovCisJCQlyZXQgPSBTV0FQX01MT0NLOworCQl9IGVsc2UgeworCQkJcmV0ID0gdHJ5X3RvX3VubWFwX29uZShwYWdlLCB2bWEsIG1pZ3JhdGlvbik7CisJCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHJldCA9PSBTV0FQX01MT0NLKSB7CisJCQltbG9ja2VkID0gdHJ5X3RvX21sb2NrX3BhZ2UocGFnZSwgdm1hKTsKKwkJCWlmIChtbG9ja2VkKQorCQkJCWJyZWFrOyAgLyogc3RvcCBpZiBhY3R1YWxseSBtbG9ja2VkIHBhZ2UgKi8KKwkJfQogCX0KIAorCWlmIChtbG9ja2VkKQorCQlnb3RvIG91dDsKKwogCWlmIChsaXN0X2VtcHR5KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKSkKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsCiAJCQkJCQlzaGFyZWQudm1fc2V0Lmxpc3QpIHsKLQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJiAhbWlncmF0aW9uKQorCQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkgeworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCQkJY29udGludWU7CS8qIG11c3QgdmlzaXQgYWxsIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7CS8qIGxlYXZlIG1sb2NrZWQgPT0gMCAqLworCQkJZ290byBvdXQ7CQkvKiBubyBuZWVkIHRvIGxvb2sgZnVydGhlciAqLworCQl9CisJCWlmICghTUxPQ0tfUEFHRVMgJiYgIW1pZ3JhdGlvbiAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCiAJCQljb250aW51ZTsKIAkJY3Vyc29yID0gKHVuc2lnbmVkIGxvbmcpIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCQlpZiAoY3Vyc29yID4gbWF4X25sX2N1cnNvcikKQEAgLTkzNyw3ICsxMTE5LDcgQEAKIAkJCW1heF9ubF9zaXplID0gY3Vyc29yOwogCX0KIAotCWlmIChtYXhfbmxfc2l6ZSA9PSAwKSB7CS8qIGFueSBub25saW5lYXJzIGxvY2tlZCBvciByZXNlcnZlZCAqLworCWlmIChtYXhfbmxfc2l6ZSA9PSAwKSB7CS8qIGFsbCBub25saW5lYXJzIGxvY2tlZCBvciByZXNlcnZlZCA/ICovCiAJCXJldCA9IFNXQVBfRkFJTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTYxLDEyICsxMTQzLDE2IEBACiAJZG8gewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsCiAJCQkJCQlzaGFyZWQudm1fc2V0Lmxpc3QpIHsKLQkJCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYgIW1pZ3JhdGlvbikKKwkJCWlmICghTUxPQ0tfUEFHRVMgJiYgIW1pZ3JhdGlvbiAmJgorCQkJICAgICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKIAkJCQljb250aW51ZTsKIAkJCWN1cnNvciA9ICh1bnNpZ25lZCBsb25nKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAkJCXdoaWxlICggY3Vyc29yIDwgbWF4X25sX2N1cnNvciAmJgogCQkJCWN1cnNvciA8IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgewotCQkJCXRyeV90b191bm1hcF9jbHVzdGVyKGN1cnNvciwgJm1hcGNvdW50LCB2bWEpOworCQkJCXJldCA9IHRyeV90b191bm1hcF9jbHVzdGVyKGN1cnNvciwgJm1hcGNvdW50LAorCQkJCQkJCQl2bWEsIHBhZ2UpOworCQkJCWlmIChyZXQgPT0gU1dBUF9NTE9DSykKKwkJCQkJbWxvY2tlZCA9IDI7CS8qIHRvIHJldHVybiBiZWxvdyAqLwogCQkJCWN1cnNvciArPSBDTFVTVEVSX1NJWkU7CiAJCQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBjdXJzb3I7CiAJCQkJaWYgKChpbnQpbWFwY291bnQgPD0gMCkKQEAgLTk4Nyw2ICsxMTczLDEwIEBACiAJCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKIG91dDoKIAlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCWlmIChtbG9ja2VkKQorCQlyZXQgPSBTV0FQX01MT0NLOwkvKiBhY3R1YWxseSBtbG9ja2VkIHRoZSBwYWdlICovCisJZWxzZSBpZiAocmV0ID09IFNXQVBfTUxPQ0spCisJCXJldCA9IFNXQVBfQUdBSU47CS8qIHNhdyBWTV9MT0NLRUQgdm1hICovCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwMiw2ICsxMTkyLDcgQEAKICAqIFNXQVBfU1VDQ0VTUwktIHdlIHN1Y2NlZWRlZCBpbiByZW1vdmluZyBhbGwgbWFwcGluZ3MKICAqIFNXQVBfQUdBSU4JLSB3ZSBtaXNzZWQgYSBtYXBwaW5nLCB0cnkgYWdhaW4gbGF0ZXIKICAqIFNXQVBfRkFJTAktIHRoZSBwYWdlIGlzIHVuc3dhcHBhYmxlCisgKiBTV0FQX01MT0NLCS0gcGFnZSBpcyBtbG9ja2VkLgogICovCiBpbnQgdHJ5X3RvX3VubWFwKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbWlncmF0aW9uKQogewpAQCAtMTAxMCwxMiArMTIwMSwzNiBAQAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlpZiAoUGFnZUFub24ocGFnZSkpCi0JCXJldCA9IHRyeV90b191bm1hcF9hbm9uKHBhZ2UsIG1pZ3JhdGlvbik7CisJCXJldCA9IHRyeV90b191bm1hcF9hbm9uKHBhZ2UsIDAsIG1pZ3JhdGlvbik7CiAJZWxzZQotCQlyZXQgPSB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCBtaWdyYXRpb24pOwotCi0JaWYgKCFwYWdlX21hcHBlZChwYWdlKSkKKwkJcmV0ID0gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgMCwgbWlncmF0aW9uKTsKKwlpZiAocmV0ICE9IFNXQVBfTUxPQ0sgJiYgIXBhZ2VfbWFwcGVkKHBhZ2UpKQogCQlyZXQgPSBTV0FQX1NVQ0NFU1M7CiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qKgorICogdHJ5X3RvX211bmxvY2sgLSB0cnkgdG8gbXVubG9jayBhIHBhZ2UKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBiZSBtdW5sb2NrZWQKKyAqCisgKiBDYWxsZWQgZnJvbSBtdW5sb2NrIGNvZGUuICBDaGVja3MgYWxsIG9mIHRoZSBWTUFzIG1hcHBpbmcgdGhlIHBhZ2UKKyAqIHRvIG1ha2Ugc3VyZSBub2JvZHkgZWxzZSBoYXMgdGhpcyBwYWdlIG1sb2NrZWQuIFRoZSBwYWdlIHdpbGwgYmUKKyAqIHJldHVybmVkIHdpdGggUEdfbWxvY2tlZCBjbGVhcmVkIGlmIG5vIG90aGVyIHZtYXMgaGF2ZSBpdCBtbG9ja2VkLgorICoKKyAqIFJldHVybiB2YWx1ZXMgYXJlOgorICoKKyAqIFNXQVBfU1VDQ0VTUwktIG5vIHZtYSdzIGhvbGRpbmcgcGFnZSBtbG9ja2VkLgorICogU1dBUF9BR0FJTgktIHBhZ2UgbWFwcGVkIGluIG1sb2NrZWQgdm1hIC0tIGNvdWxkbid0IGFjcXVpcmUgbW1hcCBzZW0KKyAqIFNXQVBfTUxPQ0sJLSBwYWdlIGlzIG5vdyBtbG9ja2VkLgorICovCitpbnQgdHJ5X3RvX211bmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpIHx8IFBhZ2VMUlUocGFnZSkpOworCisJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQlyZXR1cm4gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgMSwgMCk7CisJZWxzZQorCQlyZXR1cm4gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgMSwgMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGJmNjZkMDEuLmQzOGQ3ZTYgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBzaG1lbV9iYWNraW5nX2Rldl9pbmZvICBfX3JlYWRfbW9zdGx5ID0gewogCS5yYV9wYWdlcwk9IDAsCS8qIE5vIHJlYWRhaGVhZCAqLwotCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSywKKwkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0sgfCBCRElfQ0FQX1NXQVBfQkFDS0VELAogCS51bnBsdWdfaW9fZm4JPSBkZWZhdWx0X3VucGx1Z19pb19mbiwKIH07CiAKQEAgLTEzNjcsNiArMTM2Nyw3IEBACiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQorCQkJU2V0UGFnZVN3YXBCYWNrZWQoZmlsZXBhZ2UpOwogCiAJCQkvKiBQcmVjaGFyZ2UgcGFnZSB3aGlsZSB3ZSBjYW4gd2FpdCwgY29tcGVuc2F0ZSBhZnRlciAqLwogCQkJZXJyb3IgPSBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShmaWxlcGFnZSwgY3VycmVudC0+bW0sCkBAIC0xNDc2LDEyICsxNDc3LDE2IEBACiAJCWlmICghdXNlcl9zaG1fbG9jayhpbm9kZS0+aV9zaXplLCB1c2VyKSkKIAkJCWdvdG8gb3V0X25vbWVtOwogCQlpbmZvLT5mbGFncyB8PSBWTV9MT0NLRUQ7CisJCW1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKGZpbGUtPmZfbWFwcGluZyk7CiAJfQogCWlmICghbG9jayAmJiAoaW5mby0+ZmxhZ3MgJiBWTV9MT0NLRUQpICYmIHVzZXIpIHsKIAkJdXNlcl9zaG1fdW5sb2NrKGlub2RlLT5pX3NpemUsIHVzZXIpOwogCQlpbmZvLT5mbGFncyAmPSB+Vk1fTE9DS0VEOworCQltYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKGZpbGUtPmZfbWFwcGluZyk7CisJCXNjYW5fbWFwcGluZ191bmV2aWN0YWJsZV9wYWdlcyhmaWxlLT5mX21hcHBpbmcpOwogCX0KIAlyZXR2YWwgPSAwOworCiBvdXRfbm9tZW06CiAJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiByZXR2YWw7CkBAIC0yNTgwLDYgKzI1ODUsNyBAQAogCXNobWVtX3VuYWNjdF9zaXplKGZsYWdzLCBzaXplKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzaG1lbV9maWxlX3NldHVwKTsKIAogLyoqCiAgKiBzaG1lbV96ZXJvX3NldHVwIC0gc2V0dXAgYSBzaGFyZWQgYW5vbnltb3VzIG1hcHBpbmcKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBlNzZlZWU0Li4wOTE4NzUxIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC05NSw2ICs5NSw3IEBACiAjaW5jbHVkZQk8bGludXgvaW5pdC5oPgogI2luY2x1ZGUJPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZQk8bGludXgvY3B1c2V0Lmg+CisjaW5jbHVkZQk8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUJPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZQk8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlCTxsaW51eC9rYWxsc3ltcy5oPgpAQCAtNDI1OCw3ICs0MjU5LDcgQEAKICAqICsgZnVydGhlciB2YWx1ZXMgb24gU01QIGFuZCB3aXRoIHN0YXRpc3RpY3MgZW5hYmxlZAogICovCiAKLWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzbGFiaW5mb19vcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2xhYmluZm9fb3AgPSB7CiAJLnN0YXJ0ID0gc19zdGFydCwKIAkubmV4dCA9IHNfbmV4dCwKIAkuc3RvcCA9IHNfc3RvcCwKQEAgLTQzMTUsNiArNDMxNiwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBpbnQgc2xhYmluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNsYWJpbmZvX29wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zbGFiaW5mb19vcGVyYXRpb25zID0geworCS5vcGVuCQk9IHNsYWJpbmZvX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLndyaXRlCQk9IHNsYWJpbmZvX3dyaXRlLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NMQUJfTEVBSwogCiBzdGF0aWMgdm9pZCAqbGVha3Nfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKQEAgLTQ0NDMsMTMgKzQ0NTcsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNsYWJzdGF0c19vcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2xhYnN0YXRzX29wID0gewogCS5zdGFydCA9IGxlYWtzX3N0YXJ0LAogCS5uZXh0ID0gc19uZXh0LAogCS5zdG9wID0gc19zdG9wLAogCS5zaG93ID0gbGVha3Nfc2hvdywKIH07CisKK3N0YXRpYyBpbnQgc2xhYnN0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgbG9uZyAqbiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlpZiAobikgeworCQlyZXQgPSBzZXFfb3BlbihmaWxlLCAmc2xhYnN0YXRzX29wKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJCSpuID0gUEFHRV9TSVpFIC8gKDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCQkJbS0+cHJpdmF0ZSA9IG47CisJCQluID0gTlVMTDsKKwkJfQorCQlrZnJlZShuKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zbGFic3RhdHNfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBzbGFic3RhdHNfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCit9OwogI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHNsYWJfcHJvY19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoInNsYWJpbmZvIixTX0lXVVNSfFNfSVJVR08sTlVMTCwmcHJvY19zbGFiaW5mb19vcGVyYXRpb25zKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfU0xBQl9MRUFLCisJcHJvY19jcmVhdGUoInNsYWJfYWxsb2NhdG9ycyIsIDAsIE5VTEwsICZwcm9jX3NsYWJzdGF0c19vcGVyYXRpb25zKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoc2xhYl9wcm9jX2luaXQpOwogI2VuZGlmCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDBjODNlNmEuLjdhZDQ4OWEgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CkBAIC00NDE3LDE0ICs0NDE4LDYgQEAKICAqIFRoZSAvcHJvYy9zbGFiaW5mbyBBQkkKICAqLwogI2lmZGVmIENPTkZJR19TTEFCSU5GTwotCi1zc2l6ZV90IHNsYWJpbmZvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLQogc3RhdGljIHZvaWQgcHJpbnRfc2xhYmluZm9faGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzZXFfcHV0cyhtLCAic2xhYmluZm8gLSB2ZXJzaW9uOiAyLjFcbiIpOwpAQCAtNDQ5MiwxMSArNDQ4NSwyOSBAQAogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2xhYmluZm9fb3AgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNsYWJpbmZvX29wID0gewogCS5zdGFydCA9IHNfc3RhcnQsCiAJLm5leHQgPSBzX25leHQsCiAJLnN0b3AgPSBzX3N0b3AsCiAJLnNob3cgPSBzX3Nob3csCiB9OwogCitzdGF0aWMgaW50IHNsYWJpbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzbGFiaW5mb19vcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc2xhYmluZm9fb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBzbGFiaW5mb19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbGFiX3Byb2NfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJzbGFiaW5mbyIsU19JV1VTUnxTX0lSVUdPLE5VTEwsJnByb2Nfc2xhYmluZm9fb3BlcmF0aW9ucyk7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChzbGFiX3Byb2NfaW5pdCk7CiAjZW5kaWYgLyogQ09ORklHX1NMQUJJTkZPICovCmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggOWUwY2IzMS4uMjE1MmU0OCAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtMzEsMTEgKzMxLDEyIEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAvKiBIb3cgbWFueSBwYWdlcyBkbyB3ZSB0cnkgdG8gc3dhcCBvciBwYWdlIGluL291dCB0b2dldGhlcj8gKi8KIGludCBwYWdlX2NsdXN0ZXI7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X2FkZF9wdmVjcyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBhZ2V2ZWMsIGxydV9hZGRfYWN0aXZlX3B2ZWNzKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlY1tOUl9MUlVfTElTVFNdLCBscnVfYWRkX3B2ZWNzKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X3JvdGF0ZV9wdmVjcyk7CiAKIC8qCkBAIC0xMTYsOCArMTE3LDkgQEAKIAkJCXpvbmUgPSBwYWdlem9uZTsKIAkJCXNwaW5fbG9jaygmem9uZS0+bHJ1X2xvY2spOwogCQl9Ci0JCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7CisJCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJCWludCBscnUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCQlsaXN0X21vdmVfdGFpbCgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xydV0ubGlzdCk7CiAJCQlwZ21vdmVkKys7CiAJCX0KIAl9CkBAIC0xMzYsNyArMTM4LDcgQEAKIHZvaWQgIHJvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICghUGFnZUxvY2tlZChwYWdlKSAmJiAhUGFnZURpcnR5KHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmCi0JICAgIFBhZ2VMUlUocGFnZSkpIHsKKwkgICAgIVBhZ2VVbmV2aWN0YWJsZShwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CiAJCXN0cnVjdCBwYWdldmVjICpwdmVjOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNTcsMTIgKzE1OSwxOSBAQAogCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwogCiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKKwlpZiAoUGFnZUxSVShwYWdlKSAmJiAhUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSB7CisJCWludCBmaWxlID0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQlpbnQgbHJ1ID0gTFJVX0JBU0UgKyBmaWxlOworCQlkZWxfcGFnZV9mcm9tX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisKIAkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKLQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCWxydSArPSBMUlVfQUNUSVZFOworCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOwogCQlfX2NvdW50X3ZtX2V2ZW50KFBHQUNUSVZBVEUpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgdHJ1ZSk7CisJCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBscnUpOworCisJCXpvbmUtPnJlY2VudF9yb3RhdGVkWyEhZmlsZV0rKzsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbISFmaWxlXSsrOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIH0KQEAgLTE3Niw3ICsxODUsOCBAQAogICovCiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlpZiAoIVBhZ2VBY3RpdmUocGFnZSkgJiYgUGFnZVJlZmVyZW5jZWQocGFnZSkgJiYgUGFnZUxSVShwYWdlKSkgeworCWlmICghUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpICYmCisJCQlQYWdlUmVmZXJlbmNlZChwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CiAJCWFjdGl2YXRlX3BhZ2UocGFnZSk7CiAJCUNsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSk7CiAJfSBlbHNlIGlmICghUGFnZVJlZmVyZW5jZWQocGFnZSkpIHsKQEAgLTE4NiwyOCArMTk2LDczIEBACiAKIEVYUE9SVF9TWU1CT0wobWFya19wYWdlX2FjY2Vzc2VkKTsKIAotLyoqCi0gKiBscnVfY2FjaGVfYWRkOiBhZGQgYSBwYWdlIHRvIHRoZSBwYWdlIGxpc3RzCi0gKiBAcGFnZTogdGhlIHBhZ2UgdG8gYWRkCi0gKi8KLXZvaWQgbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3ZvaWQgX19scnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKTsKKwlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKVtscnVdOwogCiAJcGFnZV9jYWNoZV9nZXQocGFnZSk7CiAJaWYgKCFwYWdldmVjX2FkZChwdmVjLCBwYWdlKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7CisJCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgbHJ1KTsKIAlwdXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKTsKIH0KIAotdm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKy8qKgorICogbHJ1X2NhY2hlX2FkZF9scnUgLSBhZGQgYSBwYWdlIHRvIGEgcGFnZSBsaXN0CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gYmUgYWRkZWQgdG8gdGhlIExSVS4KKyAqIEBscnU6IHRoZSBMUlUgbGlzdCB0byB3aGljaCB0aGUgcGFnZSBpcyBhZGRlZC4KKyAqLwordm9pZCBscnVfY2FjaGVfYWRkX2xydShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBscnUpCiB7Ci0Jc3RydWN0IHBhZ2V2ZWMgKnB2ZWMgPSAmZ2V0X2NwdV92YXIobHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7CisJCVZNX0JVR19PTihQYWdlVW5ldmljdGFibGUocGFnZSkpOworCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CisJfSBlbHNlIGlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJVk1fQlVHX09OKFBhZ2VBY3RpdmUocGFnZSkpOworCQlDbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwl9CiAKLQlwYWdlX2NhY2hlX2dldChwYWdlKTsKLQlpZiAoIXBhZ2V2ZWNfYWRkKHB2ZWMsIHBhZ2UpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmUocHZlYyk7Ci0JcHV0X2NwdV92YXIobHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VBY3RpdmUocGFnZSkgfHwgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgbHJ1KTsKK30KKworLyoqCisgKiBhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0IC0gYWRkIGEgcGFnZSB0byB0aGUgdW5ldmljdGFibGUgbGlzdAorICogQHBhZ2U6ICB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdAorICoKKyAqIEFkZCBwYWdlIGRpcmVjdGx5IHRvIGl0cyB6b25lJ3MgdW5ldmljdGFibGUgbGlzdC4gIFRvIGF2b2lkIHJhY2VzIHdpdGgKKyAqIHRhc2tzIHRoYXQgbWlnaHQgYmUgbWFraW5nIHRoZSBwYWdlIGV2aWN0YWJsZSwgdGhyb3VnaCBlZy4gbXVubG9jaywKKyAqIG11bm1hcCBvciBleGl0LCB3aGlsZSBpdCdzIG5vdCBvbiB0aGUgbHJ1LCB3ZSB3YW50IHRvIGFkZCB0aGUgcGFnZQorICogd2hpbGUgaXQncyBsb2NrZWQgb3Igb3RoZXJ3aXNlICJpbnZpc2libGUiIHRvIG90aGVyIHRhc2tzLiAgVGhpcyBpcworICogZGlmZmljdWx0IHRvIGRvIHdoZW4gdXNpbmcgdGhlIHBhZ2V2ZWMgY2FjaGUsIHNvIGJ5cGFzcyB0aGF0LgorICovCit2b2lkIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3Qoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisKKwlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJU2V0UGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCVNldFBhZ2VMUlUocGFnZSk7CisJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgTFJVX1VORVZJQ1RBQkxFKTsKKwlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKK30KKworLyoqCisgKiBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZQorICogQHBhZ2U6ICB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byBMUlUKKyAqIEB2bWE6ICAgdm1hIGluIHdoaWNoIHBhZ2UgaXMgbWFwcGVkIGZvciBkZXRlcm1pbmluZyByZWNsYWltYWJpbGl0eQorICoKKyAqIHBsYWNlIEBwYWdlIG9uIGFjdGl2ZSBvciB1bmV2aWN0YWJsZSBMUlUgbGlzdCwgZGVwZW5kaW5nIG9uCisgKiBwYWdlX2V2aWN0YWJsZSgpLiAgTm90ZSB0aGF0IGlmIHRoZSBwYWdlIGlzIG5vdCBldmljdGFibGUsCisgKiBpdCBnb2VzIGRpcmVjdGx5IGJhY2sgb250byBpdCdzIHpvbmUncyB1bmV2aWN0YWJsZSBsaXN0LiAgSXQgZG9lcworICogTk9UIHVzZSBhIHBlciBjcHUgcGFnZXZlYy4KKyAqLwordm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIHZtYSkpCisJCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIExSVV9BQ1RJVkUgKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpOworCWVsc2UKKwkJYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChwYWdlKTsKIH0KIAogLyoKQEAgLTIxNywxNSArMjcyLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRyYWluX2NwdV9wYWdldmVjcyhpbnQgY3B1KQogeworCXN0cnVjdCBwYWdldmVjICpwdmVjcyA9IHBlcl9jcHUobHJ1X2FkZF9wdmVjcywgY3B1KTsKIAlzdHJ1Y3QgcGFnZXZlYyAqcHZlYzsKKwlpbnQgbHJ1OwogCi0JcHZlYyA9ICZwZXJfY3B1KGxydV9hZGRfcHZlY3MsIGNwdSk7Ci0JaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCi0JCV9fcGFnZXZlY19scnVfYWRkKHB2ZWMpOwotCi0JcHZlYyA9ICZwZXJfY3B1KGxydV9hZGRfYWN0aXZlX3B2ZWNzLCBjcHUpOwotCWlmIChwYWdldmVjX2NvdW50KHB2ZWMpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmUocHZlYyk7CisJZm9yX2VhY2hfbHJ1KGxydSkgeworCQlwdmVjID0gJnB2ZWNzW2xydSAtIExSVV9CQVNFXTsKKwkJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCisJCQlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIGxydSk7CisJfQogCiAJcHZlYyA9ICZwZXJfY3B1KGxydV9yb3RhdGVfcHZlY3MsIGNwdSk7CiAJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpIHsKQEAgLTI0NCw3ICsyOTksNyBAQAogCXB1dF9jcHUoKTsKIH0KIAotI2lmZGVmIENPTkZJR19OVU1BCisjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgfHwgZGVmaW5lZChDT05GSUdfVU5FVklDVEFCTEVfTFJVKQogc3RhdGljIHZvaWQgbHJ1X2FkZF9kcmFpbl9wZXJfY3B1KHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpCiB7CiAJbHJ1X2FkZF9kcmFpbigpOwpAQCAtMzA4LDYgKzM2Myw3IEBACiAKIAkJaWYgKFBhZ2VMUlUocGFnZSkpIHsKIAkJCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKwogCQkJaWYgKHBhZ2V6b25lICE9IHpvbmUpIHsKIAkJCQlpZiAoem9uZSkKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssCkBAIC0zODAsMTAgKzQzNiwxMSBAQAogICogQWRkIHRoZSBwYXNzZWQgcGFnZXMgdG8gdGhlIExSVSwgdGhlbiBkcm9wIHRoZSBjYWxsZXIncyByZWZjb3VudAogICogb24gdGhlbS4gIFJlaW5pdGlhbGlzZXMgdGhlIGNhbGxlcidzIHBhZ2V2ZWMuCiAgKi8KLXZvaWQgX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit2b2lkIF9fX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCWludCBpOwogCXN0cnVjdCB6b25lICp6b25lID0gTlVMTDsKKwlWTV9CVUdfT04oaXNfdW5ldmljdGFibGVfbHJ1KGxydSkpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQocHZlYyk7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMtPnBhZ2VzW2ldOwpAQCAtMzk1LDM4ICs0NTIsMTMgQEAKIAkJCXpvbmUgPSBwYWdlem9uZTsKIAkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJfQotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCVNldFBhZ2VMUlUocGFnZSk7Ci0JCWFkZF9wYWdlX3RvX2luYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7Ci0JfQotCWlmICh6b25lKQotCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQlyZWxlYXNlX3BhZ2VzKHB2ZWMtPnBhZ2VzLCBwdmVjLT5uciwgcHZlYy0+Y29sZCk7Ci0JcGFnZXZlY19yZWluaXQocHZlYyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19wYWdldmVjX2xydV9hZGQpOwotCi12b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgem9uZSAqem9uZSA9IE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07Ci0JCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQotCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgewotCQkJaWYgKHpvbmUpCi0JCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQl6b25lID0gcGFnZXpvbmU7Ci0JCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCX0KLQkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwotCQlTZXRQYWdlTFJVKHBhZ2UpOwogCQlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7Ci0JCVNldFBhZ2VBY3RpdmUocGFnZSk7Ci0JCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCQlWTV9CVUdfT04oUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKKwkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCQlTZXRQYWdlTFJVKHBhZ2UpOworCQlpZiAoaXNfYWN0aXZlX2xydShscnUpKQorCQkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKKwkJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKIAl9CiAJaWYgKHpvbmUpCiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwpAQCAtNDM0LDYgKzQ2Niw4IEBACiAJcGFnZXZlY19yZWluaXQocHZlYyk7CiB9CiAKK0VYUE9SVF9TWU1CT0woX19fX3BhZ2V2ZWNfbHJ1X2FkZCk7CisKIC8qCiAgKiBUcnkgdG8gZHJvcCBidWZmZXJzIGZyb20gdGhlIHBhZ2VzIGluIGEgcGFnZXZlYwogICovCkBAIC00NTMsNiArNDg3LDMwIEBACiB9CiAKIC8qKgorICogcGFnZXZlY19zd2FwX2ZyZWUgLSB0cnkgdG8gZnJlZSBzd2FwIHNwYWNlIGZyb20gdGhlIHBhZ2VzIGluIGEgcGFnZXZlYworICogQHB2ZWM6IHBhZ2V2ZWMgd2l0aCBzd2FwY2FjaGUgcGFnZXMgdG8gZnJlZSB0aGUgc3dhcCBzcGFjZSBvZgorICoKKyAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBhbiBleHRyYSByZWZlcmVuY2UgdG8gZWFjaCBwYWdlIGFuZAorICogbm90IGhvbGQgdGhlIHBhZ2UgbG9jayBvbiB0aGUgcGFnZXMuICBUaGlzIGZ1bmN0aW9uIHVzZXMgYQorICogdHJ5bG9jayBvbiB0aGUgcGFnZSBsb2NrIHNvIGl0IG1heSBub3QgYWx3YXlzIGZyZWUgdGhlIHN3YXAKKyAqIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UuCisgKi8KK3ZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CisKKwkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYgdHJ5bG9ja19wYWdlKHBhZ2UpKSB7CisJCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYocGFnZSk7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJfQorCX0KK30KKworLyoqCiAgKiBwYWdldmVjX2xvb2t1cCAtIGdhbmcgcGFnZWNhY2hlIGxvb2t1cAogICogQHB2ZWM6CVdoZXJlIHRoZSByZXN1bHRpbmcgcGFnZXMgYXJlIHBsYWNlZAogICogQG1hcHBpbmc6CVRoZSBhZGRyZXNzX3NwYWNlIHRvIHNlYXJjaApkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDc5N2MzODMuLjMzNTNjOTAgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYworKysgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTMzLDcgKzMzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBzd2FwX2JhY2tpbmdfZGV2X2luZm8gPSB7Ci0JLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLLAorCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSyB8IEJESV9DQVBfU1dBUF9CQUNLRUQsCiAJLnVucGx1Z19pb19mbgk9IHN3YXBfdW5wbHVnX2lvX2ZuLAogfTsKIApAQCAtNzUsNiArNzUsNyBAQAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJQlVHX09OKFBhZ2VTd2FwQ2FjaGUocGFnZSkpOwogCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7CisJQlVHX09OKCFQYWdlU3dhcEJhY2tlZChwYWdlKSk7CiAJZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOwogCWlmICghZXJyb3IpIHsKIAkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CkBAIC0zMDIsMTcgKzMwMywxOSBAQAogCQkgKiByZS11c2luZyB0aGUganVzdCBmcmVlZCBzd2FwIGVudHJ5IGZvciBhbiBleGlzdGluZyBwYWdlLgogCQkgKiBNYXkgZmFpbCAoLUVOT01FTSkgaWYgcmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb24gZmFpbGVkLgogCQkgKi8KLQkJc2V0X3BhZ2VfbG9ja2VkKG5ld19wYWdlKTsKKwkJX19zZXRfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlTZXRQYWdlU3dhcEJhY2tlZChuZXdfcGFnZSk7CiAJCWVyciA9IGFkZF90b19zd2FwX2NhY2hlKG5ld19wYWdlLCBlbnRyeSwgZ2ZwX21hc2sgJiBHRlBfS0VSTkVMKTsKIAkJaWYgKGxpa2VseSghZXJyKSkgewogCQkJLyoKIAkJCSAqIEluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgcGFnZSBhbmQgcmV0dXJuLgogCQkJICovCi0JCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShuZXdfcGFnZSk7CisJCQlscnVfY2FjaGVfYWRkX2Fub24obmV3X3BhZ2UpOwogCQkJc3dhcF9yZWFkcGFnZShOVUxMLCBuZXdfcGFnZSk7CiAJCQlyZXR1cm4gbmV3X3BhZ2U7CiAJCX0KLQkJY2xlYXJfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlDbGVhclBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKKwkJX19jbGVhcl9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CiAJCXN3YXBfZnJlZShlbnRyeSk7CiAJfSB3aGlsZSAoZXJyICE9IC1FTk9NRU0pOwogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCAxZTMzMGYyLi45MGNiNjdhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogICogV29yayBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwcm9jZXNzZXMgc2hhcmluZyB0aGlzCiAgKiBzd2FwIGNhY2hlIHBhZ2UuIEZyZWUgaXQgaWYgeW91IGNhbi4gUmV0dXJuIHN1Y2Nlc3MuCiAgKi8KLWludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBjb3VudCkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogcDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gMikgLyogMjogdXMgKyBjYWNoZSAqLworCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IGNvdW50KSAvKiB1cyArIGNhY2hlICsgcHRlcyAqLwogCQlyZXR1cm4gMDsKIAogCWVudHJ5LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKQEAgLTM3MCw3ICszNzAsNyBAQAogCWlmIChwLT5zd2FwX21hcFtzd3Bfb2Zmc2V0KGVudHJ5KV0gPT0gMSkgewogCQkvKiBSZWNoZWNrIHRoZSBwYWdlIGNvdW50IHdpdGggdGhlIHN3YXBjYWNoZSBsb2NrIGhlbGQuLiAqLwogCQlzcGluX2xvY2tfaXJxKCZzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayk7Ci0JCWlmICgocGFnZV9jb3VudChwYWdlKSA9PSAyKSAmJiAhUGFnZVdyaXRlYmFjayhwYWdlKSkgeworCQlpZiAoKHBhZ2VfY291bnQocGFnZSkgPT0gY291bnQpICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpKSB7CiAJCQlfX2RlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFnZSk7CiAJCQlTZXRQYWdlRGlydHkocGFnZSk7CiAJCQlyZXR2YWwgPSAxOwpAQCAtMzg4LDYgKzM4OCwyNSBAQAogfQogCiAvKgorICogTW9zdCBvZiB0aGUgdGltZSB0aGUgcGFnZSBzaG91bGQgaGF2ZSB0d28gcmVmZXJlbmNlczogb25lIGZvciB0aGUKKyAqIHByb2Nlc3MgYW5kIG9uZSBmb3IgdGhlIHN3YXAgY2FjaGUuCisgKi8KK2ludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQocGFnZSwgMik7Cit9CisKKy8qCisgKiBUaGUgcGFnZW91dCBjb2RlIGhvbGRzIGFuIGV4dHJhIHJlZmVyZW5jZSB0byB0aGUgcGFnZS4gIFRoYXQgcmFpc2VzCisgKiB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRlc3QgZm9yIHRvIDIgZm9yIGEgcGFnZSB0aGF0IGlzIG9ubHkgaW4gdGhlCisgKiBzd2FwIGNhY2hlIHBsdXMgMSBmb3IgZWFjaCBwcm9jZXNzIHRoYXQgbWFwcyB0aGUgcGFnZS4KKyAqLworaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQocGFnZSwgMiArIHBhZ2VfbWFwY291bnQocGFnZSkpOworfQorCisvKgogICogRnJlZSB0aGUgc3dhcCBlbnRyeSBsaWtlIGFib3ZlLCBidXQgYWxzbyB0cnkgdG8KICAqIGZyZWUgdGhlIHBhZ2UgY2FjaGUgZW50cnkgaWYgaXQgaXMgdGhlIGxhc3QgdXNlci4KICAqLwpAQCAtNDAzLDcgKzQyMiw3IEBACiAJaWYgKHApIHsKIAkJaWYgKHN3YXBfZW50cnlfZnJlZShwLCBzd3Bfb2Zmc2V0KGVudHJ5KSkgPT0gMSkgewogCQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoJnN3YXBwZXJfc3BhY2UsIGVudHJ5LnZhbCk7Ci0JCQlpZiAocGFnZSAmJiB1bmxpa2VseSghdHJ5bG9ja19wYWdlKHBhZ2UpKSkgeworCQkJaWYgKHBhZ2UgJiYgIXRyeWxvY2tfcGFnZShwYWdlKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCQlwYWdlID0gTlVMTDsKIAkJCX0KZGlmZiAtLWdpdCBhL21tL3Rpbnktc2htZW0uYyBiL21tL3Rpbnktc2htZW0uYwppbmRleCA4ZDdhMjdhLi4zZTY3ZDU3IDEwMDY0NAotLS0gYS9tbS90aW55LXNobWVtLmMKKysrIGIvbW0vdGlueS1zaG1lbS5jCkBAIC05NSw2ICs5NSw3IEBACiBwdXRfbWVtb3J5OgogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNobWVtX2ZpbGVfc2V0dXApOwogCiAvKioKICAqIHNobWVtX3plcm9fc2V0dXAgLSBzZXR1cCBhIHNoYXJlZCBhbm9ueW1vdXMgbWFwcGluZwpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggZTgzZTRiMS4uMTIyOTIxMSAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CS8qIGdyci4gdHJ5X3RvX3JlbGVhc2VfcGFnZSwKIAkJCQkgICBkb19pbnZhbGlkYXRlcGFnZSAqLworI2luY2x1ZGUgImludGVybmFsLmgiCiAKIAogLyoqCkBAIC0xMDMsNiArMTA0LDcgQEAKIAogCWNhbmNlbF9kaXJ0eV9wYWdlKHBhZ2UsIFBBR0VfQ0FDSEVfU0laRSk7CiAKKwljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwogCXJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CiAJQ2xlYXJQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsJLyogcGFnZWNhY2hlIHJlZiAqLwpAQCAtMTI3LDYgKzEyOSw3IEBACiAJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIDApKQogCQlyZXR1cm4gMDsKIAorCWNsZWFyX3BhZ2VfbWxvY2socGFnZSk7CiAJcmV0ID0gcmVtb3ZlX21hcHBpbmcobWFwcGluZywgcGFnZSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzUyLDYgKzM1NSw3IEBACiAJaWYgKFBhZ2VEaXJ0eShwYWdlKSkKIAkJZ290byBmYWlsZWQ7CiAKKwljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwogCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7CiAJX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCBiYmEwNmM0Li4wMzY1MzY5IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC04LDI2ICs4LDI4IEBACiAgKiAgTnVtYSBhd2FyZW5lc3MsIENocmlzdG9waCBMYW1ldGVyLCBTR0ksIEp1bmUgMjAwNQogICovCiAKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIAotREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7Ci1zdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7Ci0KLXN0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAotCQkJICAgIGludCBub2RlLCB2b2lkICpjYWxsZXIpOworLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqLwogCiBzdGF0aWMgdm9pZCB2dW5tYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC00MCw4ICs0Miw3IEBACiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB2dW5tYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIHZvaWQgdnVubWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXBtZF90ICpwbWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtNTUsOCArNTYsNyBAQAogCX0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdnVubWFwX3B1ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwdWRfdCAqcHVkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTcwLDEyICs3MCwxMCBAQAogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQogCi12b2lkIHVubWFwX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKIAogCUJVR19PTihhZGRyID49IGVuZCk7CiAJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwpAQCAtODYsMzUgKzg0LDM2IEBACiAJCQljb250aW51ZTsKIAkJdnVubWFwX3B1ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQpOwogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSkKLXsKLQl1bm1hcF9rZXJuZWxfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkciwgYXJlYS0+c2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQorCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucikKIHsKIAlwdGVfdCAqcHRlOwogCisJLyoKKwkgKiBuciBpcyBhIHJ1bm5pbmcgaW5kZXggaW50byB0aGUgYXJyYXkgd2hpY2ggaGVscHMgaGlnaGVyIGxldmVsCisJICogY2FsbGVycyBrZWVwIHRyYWNrIG9mIHdoZXJlIHdlJ3JlIHVwIHRvLgorCSAqLworCiAJcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHIpOwogCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gKipwYWdlczsKLQkJV0FSTl9PTighcHRlX25vbmUoKnB0ZSkpOwotCQlpZiAoIXBhZ2UpCisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTsKKworCQlpZiAoV0FSTl9PTighcHRlX25vbmUoKnB0ZSkpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKFdBUk5fT04oIXBhZ2UpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXNldF9wdGVfYXQoJmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKLQkJKCpwYWdlcykrKzsKKwkJKCpucikrKzsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQorc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQogewogCXBtZF90ICpwbWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMTI0LDE0ICsxMjMsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzKSkKKwkJaWYgKHZtYXBfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2bWFwX3B1ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKioqcGFnZXMpCitzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC0xNDEsNTcgKzE0MCw3OCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7CiAJCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHZtYXBfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMpKQorCQlpZiAodm1hcF9wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKKy8qCisgKiBTZXQgdXAgcGFnZSB0YWJsZXMgaW4ga3ZhIChhZGRyLCBlbmQpLiBUaGUgcHRlcyBzaGFsbCBoYXZlIHByb3QgInByb3QiLCBhbmQKKyAqIHdpbGwgaGF2ZSBwZm5zIGNvcnJlc3BvbmRpbmcgdG8gdGhlICJwYWdlcyIgYXJyYXkuCisgKgorICogSWUuIHB0ZSBhdCBhZGRyK04qUEFHRV9TSVpFIHNoYWxsIHBvaW50IHRvIHBmbiBjb3JyZXNwb25kaW5nIHRvIHBhZ2VzW05dCisgKi8KK3N0YXRpYyBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcykKIHsKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHIgKyBhcmVhLT5zaXplIC0gUEFHRV9TSVpFOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CisJaW50IG5yID0gMDsKIAogCUJVR19PTihhZGRyID49IGVuZCk7CiAJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwogCWRvIHsKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQllcnIgPSB2bWFwX3B1ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzKTsKKwkJZXJyID0gdm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgJm5yKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCWZsdXNoX2NhY2hlX3ZtYXAoKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHIsIGVuZCk7Ci0JcmV0dXJuIGVycjsKKwlmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7CisKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gbnI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXBfdm1fYXJlYSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCkKK3sKKwkvKgorCSAqIHg4Ni02NCBhbmQgc3BhcmM2NCBwdXQgbW9kdWxlcyBpbiBhIHNwZWNpYWwgcGxhY2UsCisJICogYW5kIGZhbGwgYmFjayBvbiB2bWFsbG9jKCkgaWYgdGhhdCBmYWlscy4gT3RoZXJzCisJICoganVzdCBwdXQgaXQgaW4gdGhlIHZtYWxsb2Mgc3BhY2UuCisJICovCisjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEVTX1ZBRERSKQorCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXg7CisJaWYgKGFkZHIgPj0gTU9EVUxFU19WQUREUiAmJiBhZGRyIDwgTU9EVUxFU19FTkQpCisJCXJldHVybiAxOworI2VuZGlmCisJcmV0dXJuIGlzX3ZtYWxsb2NfYWRkcih4KTsKK30KIAogLyoKLSAqIE1hcCBhIHZtYWxsb2MoKS1zcGFjZSB2aXJ0dWFsIGFkZHJlc3MgdG8gdGhlIHBoeXNpY2FsIHBhZ2UuCisgKiBXYWxrIGEgdm1hcCBhZGRyZXNzIHRvIHRoZSBzdHJ1Y3QgcGFnZSBpdCBtYXBzLgogICovCiBzdHJ1Y3QgcGFnZSAqdm1hbGxvY190b19wYWdlKGNvbnN0IHZvaWQgKnZtYWxsb2NfYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgdm1hbGxvY19hZGRyOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlwZ2RfdCAqcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsKLQlwdGVfdCAqcHRlcCwgcHRlOwogCiAJLyoKIAkgKiBYWFggd2UgbWlnaHQgbmVlZCB0byBjaGFuZ2UgdGhpcyBpZiB3ZSBhZGQgVklSVFVBTF9CVUdfT04gZm9yCiAJICogYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCB2bWFsbG9jIG1vZHVsZSBzcGFjZQogCSAqLwotCVZJUlRVQUxfQlVHX09OKCFpc192bWFsbG9jX2FkZHIodm1hbGxvY19hZGRyKSAmJgotCQkJIWlzX21vZHVsZV9hZGRyZXNzKGFkZHIpKTsKKwlWSVJUVUFMX0JVR19PTighaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcih2bWFsbG9jX2FkZHIpKTsKIAogCWlmICghcGdkX25vbmUoKnBnZCkpIHsKLQkJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCQlwdWRfdCAqcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOwogCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7Ci0JCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJCQlwbWRfdCAqcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOwogCQkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgeworCQkJCXB0ZV90ICpwdGVwLCBwdGU7CisKIAkJCQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyKTsKIAkJCQlwdGUgPSAqcHRlcDsKIAkJCQlpZiAocHRlX3ByZXNlbnQocHRlKSkKQEAgLTIxMywxMyArMjMzLDc1MSBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWFsbG9jX3RvX3Bmbik7CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICoKLV9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCXVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmNhbGxlcikKKworLyoqKiBHbG9iYWwga3ZhIGFsbG9jYXRvciAqKiovCisKKyNkZWZpbmUgVk1fTEFaWV9GUkVFCTB4MDEKKyNkZWZpbmUgVk1fTEFaWV9GUkVFSU5HCTB4MDIKKyNkZWZpbmUgVk1fVk1fQVJFQQkweDA0CisKK3N0cnVjdCB2bWFwX2FyZWEgeworCXVuc2lnbmVkIGxvbmcgdmFfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyB2YV9lbmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmJfbm9kZSByYl9ub2RlOwkJLyogYWRkcmVzcyBzb3J0ZWQgcmJ0cmVlICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogYWRkcmVzcyBzb3J0ZWQgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgcHVyZ2VfbGlzdDsJLyogImxhenkgcHVyZ2UiIGxpc3QgKi8KKwl2b2lkICpwcml2YXRlOworCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodm1hcF9hcmVhX2xvY2spOworc3RhdGljIHN0cnVjdCByYl9yb290IHZtYXBfYXJlYV9yb290ID0gUkJfUk9PVDsKK3N0YXRpYyBMSVNUX0hFQUQodm1hcF9hcmVhX2xpc3QpOworCitzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqX19maW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jc3RydWN0IHZtX3N0cnVjdCAqKnAsICp0bXAsICphcmVhOwotCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxOworCXN0cnVjdCByYl9ub2RlICpuID0gdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKworCXdoaWxlIChuKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnZhOworCisJCXZhID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCWlmIChhZGRyIDwgdmEtPnZhX3N0YXJ0KQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGFkZHIgPiB2YS0+dmFfc3RhcnQpCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiB2YTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19pbnNlcnRfdm1hcF9hcmVhKHN0cnVjdCB2bWFwX2FyZWEgKnZhKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZ2bWFwX2FyZWFfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByYl9ub2RlICp0bXA7CisKKwl3aGlsZSAoKnApIHsKKwkJc3RydWN0IHZtYXBfYXJlYSAqdG1wOworCisJCXBhcmVudCA9ICpwOworCQl0bXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlpZiAodmEtPnZhX3N0YXJ0IDwgdG1wLT52YV9lbmQpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHZhLT52YV9lbmQgPiB0bXAtPnZhX3N0YXJ0KQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJQlVHKCk7CisJfQorCisJcmJfbGlua19ub2RlKCZ2YS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJnZhLT5yYl9ub2RlLCAmdm1hcF9hcmVhX3Jvb3QpOworCisJLyogYWRkcmVzcy1zb3J0IHRoaXMgbGlzdCBzbyBpdCBpcyB1c2FibGUgbGlrZSB0aGUgdm1saXN0ICovCisJdG1wID0gcmJfcHJldigmdmEtPnJiX25vZGUpOworCWlmICh0bXApIHsKKwkJc3RydWN0IHZtYXBfYXJlYSAqcHJldjsKKwkJcHJldiA9IHJiX2VudHJ5KHRtcCwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCWxpc3RfYWRkX3JjdSgmdmEtPmxpc3QsICZwcmV2LT5saXN0KTsKKwl9IGVsc2UKKwkJbGlzdF9hZGRfcmN1KCZ2YS0+bGlzdCwgJnZtYXBfYXJlYV9saXN0KTsKK30KKworc3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9hcmVhX2xhenkodm9pZCk7CisKKy8qCisgKiBBbGxvY2F0ZSBhIHJlZ2lvbiBvZiBLVkEgb2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBhbGlnbm1lbnQsIHdpdGhpbiB0aGUKKyAqIHZzdGFydCBhbmQgdmVuZC4KKyAqLworc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmFsbG9jX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQl1bnNpZ25lZCBsb25nIHZzdGFydCwgdW5zaWduZWQgbG9uZyB2ZW5kLAorCQkJCWludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IHB1cmdlZCA9IDA7CisKKwlCVUdfT04oc2l6ZSAmIH5QQUdFX01BU0spOworCisJYWRkciA9IEFMSUdOKHZzdGFydCwgYWxpZ24pOworCisJdmEgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCB2bWFwX2FyZWEpLAorCQkJZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLLCBub2RlKTsKKwlpZiAodW5saWtlbHkoIXZhKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKK3JldHJ5OgorCXNwaW5fbG9jaygmdm1hcF9hcmVhX2xvY2spOworCS8qIFhYWDogY291bGQgaGF2ZSBhIGxhc3RfaG9sZSBjYWNoZSAqLworCW4gPSB2bWFwX2FyZWFfcm9vdC5yYl9ub2RlOworCWlmIChuKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKmZpcnN0ID0gTlVMTDsKKworCQlkbyB7CisJCQlzdHJ1Y3Qgdm1hcF9hcmVhICp0bXA7CisJCQl0bXAgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgdm1hcF9hcmVhLCByYl9ub2RlKTsKKwkJCWlmICh0bXAtPnZhX2VuZCA+PSBhZGRyKSB7CisJCQkJaWYgKCFmaXJzdCAmJiB0bXAtPnZhX3N0YXJ0IDwgYWRkciArIHNpemUpCisJCQkJCWZpcnN0ID0gdG1wOworCQkJCW4gPSBuLT5yYl9sZWZ0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IHRtcDsKKwkJCQluID0gbi0+cmJfcmlnaHQ7CisJCQl9CisJCX0gd2hpbGUgKG4pOworCisJCWlmICghZmlyc3QpCisJCQlnb3RvIGZvdW5kOworCisJCWlmIChmaXJzdC0+dmFfZW5kIDwgYWRkcikgeworCQkJbiA9IHJiX25leHQoJmZpcnN0LT5yYl9ub2RlKTsKKwkJCWlmIChuKQorCQkJCWZpcnN0ID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCQllbHNlCisJCQkJZ290byBmb3VuZDsKKwkJfQorCisJCXdoaWxlIChhZGRyICsgc2l6ZSA+PSBmaXJzdC0+dmFfc3RhcnQgJiYgYWRkciArIHNpemUgPD0gdmVuZCkgeworCQkJYWRkciA9IEFMSUdOKGZpcnN0LT52YV9lbmQgKyBQQUdFX1NJWkUsIGFsaWduKTsKKworCQkJbiA9IHJiX25leHQoJmZpcnN0LT5yYl9ub2RlKTsKKwkJCWlmIChuKQorCQkJCWZpcnN0ID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCQllbHNlCisJCQkJZ290byBmb3VuZDsKKwkJfQorCX0KK2ZvdW5kOgorCWlmIChhZGRyICsgc2l6ZSA+IHZlbmQpIHsKKwkJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwkJaWYgKCFwdXJnZWQpIHsKKwkJCXB1cmdlX3ZtYXBfYXJlYV9sYXp5KCk7CisJCQlwdXJnZWQgPSAxOworCQkJZ290byByZXRyeTsKKwkJfQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidm1hcCBhbGxvY2F0aW9uIGZhaWxlZDogIgorCQkJCSAidXNlIHZtYWxsb2M9PHNpemU+IHRvIGluY3JlYXNlIHNpemUuXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwlCVUdfT04oYWRkciAmIChhbGlnbi0xKSk7CisKKwl2YS0+dmFfc3RhcnQgPSBhZGRyOworCXZhLT52YV9lbmQgPSBhZGRyICsgc2l6ZTsKKwl2YS0+ZmxhZ3MgPSAwOworCV9faW5zZXJ0X3ZtYXBfYXJlYSh2YSk7CisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKKworCXJldHVybiB2YTsKK30KKworc3RhdGljIHZvaWQgcmN1X2ZyZWVfdmEoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCB2bWFwX2FyZWEgKnZhID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB2bWFwX2FyZWEsIHJjdV9oZWFkKTsKKworCWtmcmVlKHZhKTsKK30KKworc3RhdGljIHZvaWQgX19mcmVlX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKK3sKKwlCVUdfT04oUkJfRU1QVFlfTk9ERSgmdmEtPnJiX25vZGUpKTsKKwlyYl9lcmFzZSgmdmEtPnJiX25vZGUsICZ2bWFwX2FyZWFfcm9vdCk7CisJUkJfQ0xFQVJfTk9ERSgmdmEtPnJiX25vZGUpOworCWxpc3RfZGVsX3JjdSgmdmEtPmxpc3QpOworCisJY2FsbF9yY3UoJnZhLT5yY3VfaGVhZCwgcmN1X2ZyZWVfdmEpOworfQorCisvKgorICogRnJlZSBhIHJlZ2lvbiBvZiBLVkEgYWxsb2NhdGVkIGJ5IGFsbG9jX3ZtYXBfYXJlYQorICovCitzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKK3sKKwlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwlfX2ZyZWVfdm1hcF9hcmVhKHZhKTsKKwlzcGluX3VubG9jaygmdm1hcF9hcmVhX2xvY2spOworfQorCisvKgorICogQ2xlYXIgdGhlIHBhZ2V0YWJsZSBlbnRyaWVzIG9mIGEgZ2l2ZW4gdm1hcF9hcmVhCisgKi8KK3N0YXRpYyB2b2lkIHVubWFwX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKK3sKKwl2dW5tYXBfcGFnZV9yYW5nZSh2YS0+dmFfc3RhcnQsIHZhLT52YV9lbmQpOworfQorCisvKgorICogbGF6eV9tYXhfcGFnZXMgaXMgdGhlIG1heGltdW0gYW1vdW50IG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB3ZSBnYXRoZXIgdXAKKyAqIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHB1cmdlIHdpdGggYSBUTEIgZmx1c2guCisgKgorICogVGhlcmUgaXMgYSB0cmFkZW9mZiBoZXJlOiBhIGxhcmdlciBudW1iZXIgd2lsbCBjb3ZlciBtb3JlIGtlcm5lbCBwYWdlIHRhYmxlcworICogYW5kIHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRvIHB1cmdlLCBidXQgaXQgd2lsbCBsaW5lYXJseSByZWR1Y2UgdGhlIG51bWJlciBvZgorICogZ2xvYmFsIFRMQiBmbHVzaGVzIHRoYXQgbXVzdCBiZSBwZXJmb3JtZWQuIEl0IHdvdWxkIHNlZW0gbmF0dXJhbCB0byBzY2FsZQorICogdGhpcyBudW1iZXIgdXAgbGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mIENQVXMgKGJlY2F1c2Ugdm1hcHBpbmcgYWN0aXZpdHkKKyAqIGNvdWxkIGFsc28gc2NhbGUgbGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mIENQVXMpLCBob3dldmVyIGl0IGlzIGxpa2VseQorICogdGhhdCBpbiBwcmFjdGljZSwgd29ya2xvYWRzIG1pZ2h0IGJlIGNvbnN0cmFpbmVkIGluIG90aGVyIHdheXMgdGhhdCBtZWFuCisgKiB2bWFwIGFjdGl2aXR5IHdpbGwgbm90IHNjYWxlIGxpbmVhcmx5IHdpdGggQ1BVcy4gQWxzbywgSSB3YW50IHRvIGJlCisgKiBjb25zZXJ2YXRpdmUgYW5kIG5vdCBpbnRyb2R1Y2UgYSBiaWcgbGF0ZW5jeSBvbiBodWdlIHN5c3RlbXMsIHNvIGdvIHdpdGgKKyAqIGEgbGVzcyBhZ2dyZXNzaXZlIGxvZyBzY2FsZS4gSXQgd2lsbCBzdGlsbCBiZSBhbiBpbXByb3ZlbWVudCBvdmVyIHRoZSBvbGQKKyAqIGNvZGUsIGFuZCBpdCB3aWxsIGJlIHNpbXBsZSB0byBjaGFuZ2UgdGhlIHNjYWxlIGZhY3RvciBpZiB3ZSBmaW5kIHRoYXQgaXQKKyAqIGJlY29tZXMgYSBwcm9ibGVtIG9uIGJpZ2dlciBzeXN0ZW1zLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXp5X21heF9wYWdlcyh2b2lkKQoreworCXVuc2lnbmVkIGludCBsb2c7CisKKwlsb2cgPSBmbHMobnVtX29ubGluZV9jcHVzKCkpOworCisJcmV0dXJuIGxvZyAqICgzMlVMICogMTAyNCAqIDEwMjQgLyBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgYXRvbWljX3Qgdm1hcF9sYXp5X25yID0gQVRPTUlDX0lOSVQoMCk7CisKKy8qCisgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLgorICoKKyAqIElmIHN5bmMgaXMgMCB0aGVuIGRvbid0IHB1cmdlIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBwdXJnZSBpbiBwcm9ncmVzcy4KKyAqIElmIGZvcmNlX2ZsdXNoIGlzIDEsIHRoZW4gZmx1c2gga2VybmVsIFRMQnMgYmV0d2VlbiAqc3RhcnQgYW5kICplbmQgZXZlbgorICogaWYgd2UgZm91bmQgbm8gbGF6eSB2bWFwIGFyZWFzIHRvIHVubWFwIChjYWxsZXJzIGNhbiB1c2UgdGhpcyB0byBvcHRpbWlzZQorICogdGhlaXIgb3duIFRMQiBmbHVzaGluZykuCisgKiBSZXR1cm5zIHdpdGggKnN0YXJ0ID0gbWluKCpzdGFydCwgbG93ZXN0IHB1cmdlZCBhZGRyZXNzKQorICogICAgICAgICAgICAgICplbmQgPSBtYXgoKmVuZCwgaGlnaGVzdCBwdXJnZWQgYWRkcmVzcykKKyAqLworc3RhdGljIHZvaWQgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLAorCQkJCQlpbnQgc3luYywgaW50IGZvcmNlX2ZsdXNoKQoreworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHVyZ2VfbG9jayk7CisJTElTVF9IRUFEKHZhbGlzdCk7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJaW50IG5yID0gMDsKKworCS8qCisJICogSWYgc3luYyBpcyAwIGJ1dCBmb3JjZV9mbHVzaCBpcyAxLCB3ZSdsbCBnbyBzeW5jIGFueXdheSBidXQgY2FsbGVycworCSAqIHNob3VsZCBub3QgZXhwZWN0IHN1Y2ggYmVoYXZpb3VyLiBUaGlzIGp1c3Qgc2ltcGxpZmllcyBsb2NraW5nIGZvcgorCSAqIHRoZSBjYXNlIHRoYXQgaXNuJ3QgYWN0dWFsbHkgdXNlZCBhdCB0aGUgbW9tZW50IGFueXdheS4KKwkgKi8KKwlpZiAoIXN5bmMgJiYgIWZvcmNlX2ZsdXNoKSB7CisJCWlmICghc3Bpbl90cnlsb2NrKCZwdXJnZV9sb2NrKSkKKwkJCXJldHVybjsKKwl9IGVsc2UKKwkJc3Bpbl9sb2NrKCZwdXJnZV9sb2NrKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2YSwgJnZtYXBfYXJlYV9saXN0LCBsaXN0KSB7CisJCWlmICh2YS0+ZmxhZ3MgJiBWTV9MQVpZX0ZSRUUpIHsKKwkJCWlmICh2YS0+dmFfc3RhcnQgPCAqc3RhcnQpCisJCQkJKnN0YXJ0ID0gdmEtPnZhX3N0YXJ0OworCQkJaWYgKHZhLT52YV9lbmQgPiAqZW5kKQorCQkJCSplbmQgPSB2YS0+dmFfZW5kOworCQkJbnIgKz0gKHZhLT52YV9lbmQgLSB2YS0+dmFfc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJCQl1bm1hcF92bWFwX2FyZWEodmEpOworCQkJbGlzdF9hZGRfdGFpbCgmdmEtPnB1cmdlX2xpc3QsICZ2YWxpc3QpOworCQkJdmEtPmZsYWdzIHw9IFZNX0xBWllfRlJFRUlORzsKKwkJCXZhLT5mbGFncyAmPSB+Vk1fTEFaWV9GUkVFOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJaWYgKG5yKSB7CisJCUJVR19PTihuciA+IGF0b21pY19yZWFkKCZ2bWFwX2xhenlfbnIpKTsKKwkJYXRvbWljX3N1YihuciwgJnZtYXBfbGF6eV9ucik7CisJfQorCisJaWYgKG5yIHx8IGZvcmNlX2ZsdXNoKQorCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKCpzdGFydCwgKmVuZCk7CisKKwlpZiAobnIpIHsKKwkJc3Bpbl9sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodmEsICZ2YWxpc3QsIHB1cmdlX2xpc3QpCisJCQlfX2ZyZWVfdm1hcF9hcmVhKHZhKTsKKwkJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJnB1cmdlX2xvY2spOworfQorCisvKgorICogS2ljayBvZmYgYSBwdXJnZSBvZiB0aGUgb3V0c3RhbmRpbmcgbGF6eSBhcmVhcy4KKyAqLworc3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9hcmVhX2xhenkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gVUxPTkdfTUFYLCBlbmQgPSAwOworCisJX19wdXJnZV92bWFwX2FyZWFfbGF6eSgmc3RhcnQsICZlbmQsIDAsIDApOworfQorCisvKgorICogRnJlZSBhbmQgdW5tYXAgYSB2bWFwIGFyZWEKKyAqLworc3RhdGljIHZvaWQgZnJlZV91bm1hcF92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJdmEtPmZsYWdzIHw9IFZNX0xBWllfRlJFRTsKKwlhdG9taWNfYWRkKCh2YS0+dmFfZW5kIC0gdmEtPnZhX3N0YXJ0KSA+PiBQQUdFX1NISUZULCAmdm1hcF9sYXp5X25yKTsKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnZtYXBfbGF6eV9ucikgPiBsYXp5X21heF9wYWdlcygpKSkKKwkJcHVyZ2Vfdm1hcF9hcmVhX2xhenkoKTsKK30KKworc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmZpbmRfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCXNwaW5fbG9jaygmdm1hcF9hcmVhX2xvY2spOworCXZhID0gX19maW5kX3ZtYXBfYXJlYShhZGRyKTsKKwlzcGluX3VubG9jaygmdm1hcF9hcmVhX2xvY2spOworCisJcmV0dXJuIHZhOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3VubWFwX3ZtYXBfYXJlYV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCXZhID0gZmluZF92bWFwX2FyZWEoYWRkcik7CisJQlVHX09OKCF2YSk7CisJZnJlZV91bm1hcF92bWFwX2FyZWEodmEpOworfQorCisKKy8qKiogUGVyIGNwdSBrdmEgYWxsb2NhdG9yICoqKi8KKworLyoKKyAqIHZtYXAgc3BhY2UgaXMgbGltaXRlZCBlc3BlY2lhbGx5IG9uIDMyIGJpdCBhcmNoaXRlY3R1cmVzLiBFbnN1cmUgdGhlcmUgaXMKKyAqIHJvb20gZm9yIGF0IGxlYXN0IDE2IHBlcmNwdSB2bWFwIGJsb2NrcyBwZXIgQ1BVLgorICovCisvKgorICogSWYgd2UgaGFkIGEgY29uc3RhbnQgVk1BTExPQ19TVEFSVCBhbmQgVk1BTExPQ19FTkQsIHdlJ2QgbGlrZSB0byBiZSBhYmxlCisgKiB0byAjZGVmaW5lIFZNQUxMT0NfU1BBQ0UJCShWTUFMTE9DX0VORC1WTUFMTE9DX1NUQVJUKS4gR3Vlc3MKKyAqIGluc3RlYWQgKHdlIGp1c3QgbmVlZCBhIHJvdWdoIGlkZWEpCisgKi8KKyNpZiBCSVRTX1BFUl9MT05HID09IDMyCisjZGVmaW5lIFZNQUxMT0NfU1BBQ0UJCSgxMjhVTCoxMDI0KjEwMjQpCisjZWxzZQorI2RlZmluZSBWTUFMTE9DX1NQQUNFCQkoMTI4VUwqMTAyNCoxMDI0KjEwMjQpCisjZW5kaWYKKworI2RlZmluZSBWTUFMTE9DX1BBR0VTCQkoVk1BTExPQ19TUEFDRSAvIFBBR0VfU0laRSkKKyNkZWZpbmUgVk1BUF9NQVhfQUxMT0MJCUJJVFNfUEVSX0xPTkcJLyogMjU2SyB3aXRoIDRLIHBhZ2VzICovCisjZGVmaW5lIFZNQVBfQkJNQVBfQklUU19NQVgJMTAyNAkvKiA0TUIgd2l0aCA0SyBwYWdlcyAqLworI2RlZmluZSBWTUFQX0JCTUFQX0JJVFNfTUlOCShWTUFQX01BWF9BTExPQyoyKQorI2RlZmluZSBWTUFQX01JTih4LCB5KQkJKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkgLyogY2FuJ3QgdXNlIG1pbigpICovCisjZGVmaW5lIFZNQVBfTUFYKHgsIHkpCQkoKHgpID4gKHkpID8gKHgpIDogKHkpKSAvKiBjYW4ndCB1c2UgbWF4KCkgKi8KKyNkZWZpbmUgVk1BUF9CQk1BUF9CSVRTCQlWTUFQX01JTihWTUFQX0JCTUFQX0JJVFNfTUFYLAkJXAorCQkJCQlWTUFQX01BWChWTUFQX0JCTUFQX0JJVFNfTUlOLAlcCisJCQkJCQlWTUFMTE9DX1BBR0VTIC8gTlJfQ1BVUyAvIDE2KSkKKworI2RlZmluZSBWTUFQX0JMT0NLX1NJWkUJCShWTUFQX0JCTUFQX0JJVFMgKiBQQUdFX1NJWkUpCisKK3N0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlOworCXN0cnVjdCBsaXN0X2hlYWQgZGlydHk7CisJdW5zaWduZWQgaW50IG5yX2RpcnR5OworfTsKKworc3RydWN0IHZtYXBfYmxvY2sgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKwlzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxOworCXVuc2lnbmVkIGxvbmcgZnJlZSwgZGlydHk7CisJREVDTEFSRV9CSVRNQVAoYWxsb2NfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOworCURFQ0xBUkVfQklUTUFQKGRpcnR5X21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgZGlydHlfbGlzdDsKKwkJfTsKKwkJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOworCX07Cit9OworCisvKiBRdWV1ZSBvZiBmcmVlIGFuZCBkaXJ0eSB2bWFwIGJsb2NrcywgZm9yIGFsbG9jYXRpb24gYW5kIGZsdXNoaW5nIHB1cnBvc2VzICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtYXBfYmxvY2tfcXVldWUsIHZtYXBfYmxvY2tfcXVldWUpOworCisvKgorICogUmFkaXggdHJlZSBvZiB2bWFwIGJsb2NrcywgaW5kZXhlZCBieSBhZGRyZXNzLCB0byBxdWlja2x5IGZpbmQgYSB2bWFwIGJsb2NrCisgKiBpbiB0aGUgZnJlZSBwYXRoLiBDb3VsZCBnZXQgcmlkIG9mIHRoaXMgaWYgd2UgY2hhbmdlIHRoZSBBUEkgdG8gcmV0dXJuIGEKKyAqICJjb29raWUiIGZyb20gYWxsb2MsIHRvIGJlIHBhc3NlZCB0byBmcmVlLiBCdXQgbm8gYmlnIGRlYWwgeWV0LgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKK3N0YXRpYyBSQURJWF9UUkVFKHZtYXBfYmxvY2tfdHJlZSwgR0ZQX0FUT01JQyk7CisKKy8qCisgKiBXZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhIGZhbGxiYWNrIG1lY2hhbmlzbSB0byBhbGxvY2F0ZSB2aXJ0dWFsIG1lbW9yeQorICogb3V0IG9mIHBhcnRpYWxseSBmaWxsZWQgdm1hcCBibG9ja3MuIEhvd2V2ZXIgdm1hcCBibG9jayBzaXppbmcgc2hvdWxkIGJlCisgKiBmYWlybHkgcmVhc29uYWJsZSBhY2NvcmRpbmcgdG8gdGhlIHZtYWxsb2Mgc2l6ZSwgc28gaXQgc2hvdWxkbid0IGJlIGEKKyAqIGJpZyBwcm9ibGVtLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFkZHJfdG9fdmJfaWR4KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlhZGRyIC09IFZNQUxMT0NfU1RBUlQgJiB+KFZNQVBfQkxPQ0tfU0laRS0xKTsKKwlhZGRyIC89IFZNQVBfQkxPQ0tfU0laRTsKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIHN0cnVjdCB2bWFwX2Jsb2NrICpuZXdfdm1hcF9ibG9jayhnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxOworCXN0cnVjdCB2bWFwX2Jsb2NrICp2YjsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKwl1bnNpZ25lZCBsb25nIHZiX2lkeDsKKwlpbnQgbm9kZSwgZXJyOworCisJbm9kZSA9IG51bWFfbm9kZV9pZCgpOworCisJdmIgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCB2bWFwX2Jsb2NrKSwKKwkJCWdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSywgbm9kZSk7CisJaWYgKHVubGlrZWx5KCF2YikpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJdmEgPSBhbGxvY192bWFwX2FyZWEoVk1BUF9CTE9DS19TSVpFLCBWTUFQX0JMT0NLX1NJWkUsCisJCQkJCVZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCQkJCQlub2RlLCBnZnBfbWFzayk7CisJaWYgKHVubGlrZWx5KElTX0VSUih2YSkpKSB7CisJCWtmcmVlKHZiKTsKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUih2YSkpOworCX0KKworCWVyciA9IHJhZGl4X3RyZWVfcHJlbG9hZChnZnBfbWFzayk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJa2ZyZWUodmIpOworCQlmcmVlX3ZtYXBfYXJlYSh2YSk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnZiLT5sb2NrKTsKKwl2Yi0+dmEgPSB2YTsKKwl2Yi0+ZnJlZSA9IFZNQVBfQkJNQVBfQklUUzsKKwl2Yi0+ZGlydHkgPSAwOworCWJpdG1hcF96ZXJvKHZiLT5hbGxvY19tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJYml0bWFwX3plcm8odmItPmRpcnR5X21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwlJTklUX0xJU1RfSEVBRCgmdmItPmZyZWVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnZiLT5kaXJ0eV9saXN0KTsKKworCXZiX2lkeCA9IGFkZHJfdG9fdmJfaWR4KHZhLT52YV9zdGFydCk7CisJc3Bpbl9sb2NrKCZ2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CisJZXJyID0gcmFkaXhfdHJlZV9pbnNlcnQoJnZtYXBfYmxvY2tfdHJlZSwgdmJfaWR4LCB2Yik7CisJc3Bpbl91bmxvY2soJnZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKKwlCVUdfT04oZXJyKTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisKKwl2YnEgPSAmZ2V0X2NwdV92YXIodm1hcF9ibG9ja19xdWV1ZSk7CisJdmItPnZicSA9IHZicTsKKwlzcGluX2xvY2soJnZicS0+bG9jayk7CisJbGlzdF9hZGQoJnZiLT5mcmVlX2xpc3QsICZ2YnEtPmZyZWUpOworCXNwaW5fdW5sb2NrKCZ2YnEtPmxvY2spOworCXB1dF9jcHVfdmFyKHZtYXBfY3B1X2Jsb2Nrcyk7CisKKwlyZXR1cm4gdmI7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9mcmVlX3ZiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHZtYXBfYmxvY2ssIHJjdV9oZWFkKTsKKworCWtmcmVlKHZiKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV92bWFwX2Jsb2NrKHN0cnVjdCB2bWFwX2Jsb2NrICp2YikKK3sKKwlzdHJ1Y3Qgdm1hcF9ibG9jayAqdG1wOworCXVuc2lnbmVkIGxvbmcgdmJfaWR4OworCisJc3Bpbl9sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnZiLT5mcmVlX2xpc3QpKQorCQlsaXN0X2RlbCgmdmItPmZyZWVfbGlzdCk7CisJaWYgKCFsaXN0X2VtcHR5KCZ2Yi0+ZGlydHlfbGlzdCkpCisJCWxpc3RfZGVsKCZ2Yi0+ZGlydHlfbGlzdCk7CisJc3Bpbl91bmxvY2soJnZiLT52YnEtPmxvY2spOworCisJdmJfaWR4ID0gYWRkcl90b192Yl9pZHgodmItPnZhLT52YV9zdGFydCk7CisJc3Bpbl9sb2NrKCZ2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CisJdG1wID0gcmFkaXhfdHJlZV9kZWxldGUoJnZtYXBfYmxvY2tfdHJlZSwgdmJfaWR4KTsKKwlzcGluX3VubG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOworCUJVR19PTih0bXAgIT0gdmIpOworCisJZnJlZV91bm1hcF92bWFwX2FyZWEodmItPnZhKTsKKwljYWxsX3JjdSgmdmItPnJjdV9oZWFkLCByY3VfZnJlZV92Yik7Cit9CisKK3N0YXRpYyB2b2lkICp2Yl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnE7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CisJdW5zaWduZWQgaW50IG9yZGVyOworCisJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKKwlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSpWTUFQX01BWF9BTExPQyk7CisJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKK2FnYWluOgorCXJjdV9yZWFkX2xvY2soKTsKKwl2YnEgPSAmZ2V0X2NwdV92YXIodm1hcF9ibG9ja19xdWV1ZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodmIsICZ2YnEtPmZyZWUsIGZyZWVfbGlzdCkgeworCQlpbnQgaTsKKworCQlzcGluX2xvY2soJnZiLT5sb2NrKTsKKwkJaSA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKHZiLT5hbGxvY19tYXAsCisJCQkJCQlWTUFQX0JCTUFQX0JJVFMsIG9yZGVyKTsKKworCQlpZiAoaSA+PSAwKSB7CisJCQlhZGRyID0gdmItPnZhLT52YV9zdGFydCArIChpIDw8IFBBR0VfU0hJRlQpOworCQkJQlVHX09OKGFkZHJfdG9fdmJfaWR4KGFkZHIpICE9CisJCQkJCWFkZHJfdG9fdmJfaWR4KHZiLT52YS0+dmFfc3RhcnQpKTsKKwkJCXZiLT5mcmVlIC09IDFVTCA8PCBvcmRlcjsKKwkJCWlmICh2Yi0+ZnJlZSA9PSAwKSB7CisJCQkJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOworCQkJCWxpc3RfZGVsX2luaXQoJnZiLT5mcmVlX2xpc3QpOworCQkJCXNwaW5fdW5sb2NrKCZ2YnEtPmxvY2spOworCQkJfQorCQkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrKCZ2Yi0+bG9jayk7CisJfQorCXB1dF9jcHVfdmFyKHZtYXBfY3B1X2Jsb2Nrcyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAoIWFkZHIpIHsKKwkJdmIgPSBuZXdfdm1hcF9ibG9jayhnZnBfbWFzayk7CisJCWlmIChJU19FUlIodmIpKQorCQkJcmV0dXJuIHZiOworCQlnb3RvIGFnYWluOworCX0KKworCXJldHVybiAodm9pZCAqKWFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIHZiX2ZyZWUoY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgdmJfaWR4OworCXVuc2lnbmVkIGludCBvcmRlcjsKKwlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisKKwlCVUdfT04oc2l6ZSAmIH5QQUdFX01BU0spOworCUJVR19PTihzaXplID4gUEFHRV9TSVpFKlZNQVBfTUFYX0FMTE9DKTsKKwlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKworCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKWFkZHIgJiAoVk1BUF9CTE9DS19TSVpFIC0gMSk7CisKKwl2Yl9pZHggPSBhZGRyX3RvX3ZiX2lkeCgodW5zaWduZWQgbG9uZylhZGRyKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJdmIgPSByYWRpeF90cmVlX2xvb2t1cCgmdm1hcF9ibG9ja190cmVlLCB2Yl9pZHgpOworCXJjdV9yZWFkX3VubG9jaygpOworCUJVR19PTighdmIpOworCisJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7CisJYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih2Yi0+ZGlydHlfbWFwLCBvZmZzZXQgPj4gUEFHRV9TSElGVCwgb3JkZXIpOworCWlmICghdmItPmRpcnR5KSB7CisJCXNwaW5fbG9jaygmdmItPnZicS0+bG9jayk7CisJCWxpc3RfYWRkKCZ2Yi0+ZGlydHlfbGlzdCwgJnZiLT52YnEtPmRpcnR5KTsKKwkJc3Bpbl91bmxvY2soJnZiLT52YnEtPmxvY2spOworCX0KKwl2Yi0+ZGlydHkgKz0gMVVMIDw8IG9yZGVyOworCWlmICh2Yi0+ZGlydHkgPT0gVk1BUF9CQk1BUF9CSVRTKSB7CisJCUJVR19PTih2Yi0+ZnJlZSB8fCAhbGlzdF9lbXB0eSgmdmItPmZyZWVfbGlzdCkpOworCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCQlmcmVlX3ZtYXBfYmxvY2sodmIpOworCX0gZWxzZQorCQlzcGluX3VubG9jaygmdmItPmxvY2spOworfQorCisvKioKKyAqIHZtX3VubWFwX2FsaWFzZXMgLSB1bm1hcCBvdXRzdGFuZGluZyBsYXp5IGFsaWFzZXMgaW4gdGhlIHZtYXAgbGF5ZXIKKyAqCisgKiBUaGUgdm1hcC92bWFsbG9jIGxheWVyIGxhemlseSBmbHVzaGVzIGtlcm5lbCB2aXJ0dWFsIG1hcHBpbmdzIHByaW1hcmlseQorICogdG8gYW1vcnRpemUgVExCIGZsdXNoaW5nIG92ZXJoZWFkcy4gV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgYW55IHBhZ2UgeW91CisgKiBoYXZlIG5vdywgbWF5LCBpbiBhIGZvcm1lciBsaWZlLCBoYXZlIGJlZW4gbWFwcGVkIGludG8ga2VybmVsIHZpcnR1YWwKKyAqIGFkZHJlc3MgYnkgdGhlIHZtYXAgbGF5ZXIgYW5kIHNvIHRoZXJlIG1pZ2h0IGJlIHNvbWUgQ1BVcyB3aXRoIFRMQiBlbnRyaWVzCisgKiBzdGlsbCByZWZlcmVuY2luZyB0aGF0IHBhZ2UgKGFkZGl0aW9uYWwgdG8gdGhlIHJlZ3VsYXIgMToxIGtlcm5lbCBtYXBwaW5nKS4KKyAqCisgKiB2bV91bm1hcF9hbGlhc2VzIGZsdXNoZXMgYWxsIHN1Y2ggbGF6eSBtYXBwaW5ncy4gQWZ0ZXIgaXQgcmV0dXJucywgd2UgY2FuCisgKiBiZSBzdXJlIHRoYXQgbm9uZSBvZiB0aGUgcGFnZXMgd2UgaGF2ZSBjb250cm9sIG92ZXIgd2lsbCBoYXZlIGFueSBhbGlhc2VzCisgKiBmcm9tIHRoZSB2bWFwIGxheWVyLgorICovCit2b2lkIHZtX3VubWFwX2FsaWFzZXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gVUxPTkdfTUFYLCBlbmQgPSAwOworCWludCBjcHU7CisJaW50IGZsdXNoID0gMDsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicSA9ICZwZXJfY3B1KHZtYXBfYmxvY2tfcXVldWUsIGNwdSk7CisJCXN0cnVjdCB2bWFwX2Jsb2NrICp2YjsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZiLCAmdmJxLT5mcmVlLCBmcmVlX2xpc3QpIHsKKwkJCWludCBpOworCisJCQlzcGluX2xvY2soJnZiLT5sb2NrKTsKKwkJCWkgPSBmaW5kX2ZpcnN0X2JpdCh2Yi0+ZGlydHlfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOworCQkJd2hpbGUgKGkgPCBWTUFQX0JCTUFQX0JJVFMpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHMsIGU7CisJCQkJaW50IGo7CisJCQkJaiA9IGZpbmRfbmV4dF96ZXJvX2JpdCh2Yi0+ZGlydHlfbWFwLAorCQkJCQlWTUFQX0JCTUFQX0JJVFMsIGkpOworCisJCQkJcyA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaSA8PCBQQUdFX1NISUZUKTsKKwkJCQllID0gdmItPnZhLT52YV9zdGFydCArIChqIDw8IFBBR0VfU0hJRlQpOworCQkJCXZ1bm1hcF9wYWdlX3JhbmdlKHMsIGUpOworCQkJCWZsdXNoID0gMTsKKworCQkJCWlmIChzIDwgc3RhcnQpCisJCQkJCXN0YXJ0ID0gczsKKwkJCQlpZiAoZSA+IGVuZCkKKwkJCQkJZW5kID0gZTsKKworCQkJCWkgPSBqOworCQkJCWkgPSBmaW5kX25leHRfYml0KHZiLT5kaXJ0eV9tYXAsCisJCQkJCQkJVk1BUF9CQk1BUF9CSVRTLCBpKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZ2Yi0+bG9jayk7CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJX19wdXJnZV92bWFwX2FyZWFfbGF6eSgmc3RhcnQsICZlbmQsIDEsIGZsdXNoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZtX3VubWFwX2FsaWFzZXMpOworCisvKioKKyAqIHZtX3VubWFwX3JhbSAtIHVubWFwIGxpbmVhciBrZXJuZWwgYWRkcmVzcyBzcGFjZSBzZXQgdXAgYnkgdm1fbWFwX3JhbQorICogQG1lbTogdGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkgdm1fbWFwX3JhbQorICogQGNvdW50OiB0aGUgY291bnQgcGFzc2VkIHRvIHRoYXQgdm1fbWFwX3JhbSBjYWxsIChjYW5ub3QgdW5tYXAgcGFydGlhbCkKKyAqLwordm9pZCB2bV91bm1hcF9yYW0oY29uc3Qgdm9pZCAqbWVtLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gY291bnQgPDwgUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyltZW07CisKKwlCVUdfT04oIWFkZHIpOworCUJVR19PTihhZGRyIDwgVk1BTExPQ19TVEFSVCk7CisJQlVHX09OKGFkZHIgPiBWTUFMTE9DX0VORCk7CisJQlVHX09OKGFkZHIgJiAoUEFHRV9TSVpFLTEpKTsKKworCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG1lbSwgc2l6ZSk7CisKKwlpZiAobGlrZWx5KGNvdW50IDw9IFZNQVBfTUFYX0FMTE9DKSkKKwkJdmJfZnJlZShtZW0sIHNpemUpOworCWVsc2UKKwkJZnJlZV91bm1hcF92bWFwX2FyZWFfYWRkcihhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0wodm1fdW5tYXBfcmFtKTsKKworLyoqCisgKiB2bV9tYXBfcmFtIC0gbWFwIHBhZ2VzIGxpbmVhcmx5IGludG8ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAodm1hbGxvYyBzcGFjZSkKKyAqIEBwYWdlczogYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIHBhZ2VzIHRvIGJlIG1hcHBlZAorICogQGNvdW50OiBudW1iZXIgb2YgcGFnZXMKKyAqIEBub2RlOiBwcmVmZXIgdG8gYWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzIG9uIHRoaXMgbm9kZQorICogQHByb3Q6IG1lbW9yeSBwcm90ZWN0aW9uIHRvIHVzZS4gUEFHRV9LRVJORUwgZm9yIHJlZ3VsYXIgUkFNCisgKiBAcmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBhZGRyZXNzIHRoYXQgaGFzIGJlZW4gbWFwcGVkLCBvciBOVUxMIG9uIGZhaWx1cmUKKyAqLwordm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBub2RlLCBwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNvdW50IDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXZvaWQgKm1lbTsKKworCWlmIChsaWtlbHkoY291bnQgPD0gVk1BUF9NQVhfQUxMT0MpKSB7CisJCW1lbSA9IHZiX2FsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoSVNfRVJSKG1lbSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKW1lbTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKwkJdmEgPSBhbGxvY192bWFwX2FyZWEoc2l6ZSwgUEFHRV9TSVpFLAorCQkJCVZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELCBub2RlLCBHRlBfS0VSTkVMKTsKKwkJaWYgKElTX0VSUih2YSkpCisJCQlyZXR1cm4gTlVMTDsKKworCQlhZGRyID0gdmEtPnZhX3N0YXJ0OworCQltZW0gPSAodm9pZCAqKWFkZHI7CisJfQorCWlmICh2bWFwX3BhZ2VfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsIHByb3QsIHBhZ2VzKSA8IDApIHsKKwkJdm1fdW5tYXBfcmFtKG1lbSwgY291bnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIG1lbTsKK30KK0VYUE9SVF9TWU1CT0wodm1fbWFwX3JhbSk7CisKK3ZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTsKKworCQl2YnEgPSAmcGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnZicS0+bG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZ2YnEtPmZyZWUpOworCQlJTklUX0xJU1RfSEVBRCgmdmJxLT5kaXJ0eSk7CisJCXZicS0+bnJfZGlydHkgPSAwOworCX0KK30KKwordm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKKwl2dW5tYXBfcGFnZV9yYW5nZShhZGRyLCBlbmQpOworCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgZW5kKTsKK30KKworaW50IG1hcF92bV9hcmVhKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgYXJlYS0+c2l6ZSAtIFBBR0VfU0laRTsKKwlpbnQgZXJyOworCisJZXJyID0gdm1hcF9wYWdlX3JhbmdlKGFkZHIsIGVuZCwgcHJvdCwgKnBhZ2VzKTsKKwlpZiAoZXJyID4gMCkgeworCQkqcGFnZXMgKz0gZXJyOworCQllcnIgPSAwOworCX0KKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYXBfdm1fYXJlYSk7CisKKy8qKiogT2xkIHZtYWxsb2MgaW50ZXJmYWNlcyAqKiovCitERUZJTkVfUldMT0NLKHZtbGlzdF9sb2NrKTsKK3N0cnVjdCB2bV9zdHJ1Y3QgKnZtbGlzdDsKKworc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQlpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmNhbGxlcikKK3sKKwlzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICp0bXAsICoqcDsKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKIAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAJaWYgKGZsYWdzICYgVk1fSU9SRU1BUCkgewpAQCAtMjMyLDEzICs5OTAsMTIgQEAKIAogCQlhbGlnbiA9IDF1bCA8PCBiaXQ7CiAJfQotCWFkZHIgPSBBTElHTihzdGFydCwgYWxpZ24pOworCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJaWYgKHVubGlrZWx5KCFzaXplKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlhcmVhID0ga21hbGxvY19ub2RlKHNpemVvZigqYXJlYSksIGdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSywgbm9kZSk7Ci0KIAlpZiAodW5saWtlbHkoIWFyZWEpKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMjQ3LDQ4ICsxMDA0LDMyIEBACiAJICovCiAJc2l6ZSArPSBQQUdFX1NJWkU7CiAKLQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JZm9yIChwID0gJnZtbGlzdDsgKHRtcCA9ICpwKSAhPSBOVUxMIDtwID0gJnRtcC0+bmV4dCkgewotCQlpZiAoKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyIDwgYWRkcikgewotCQkJaWYoKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyICsgdG1wLT5zaXplID49IGFkZHIpCi0JCQkJYWRkciA9IEFMSUdOKHRtcC0+c2l6ZSArIAotCQkJCQkgICAgICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciwgYWxpZ24pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChzaXplICsgYWRkcikgPCBhZGRyKQotCQkJZ290byBvdXQ7Ci0JCWlmIChzaXplICsgYWRkciA8PSAodW5zaWduZWQgbG9uZyl0bXAtPmFkZHIpCi0JCQlnb3RvIGZvdW5kOwotCQlhZGRyID0gQUxJR04odG1wLT5zaXplICsgKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyLCBhbGlnbik7Ci0JCWlmIChhZGRyID4gZW5kIC0gc2l6ZSkKLQkJCWdvdG8gb3V0OworCXZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIGFsaWduLCBzdGFydCwgZW5kLCBub2RlLCBnZnBfbWFzayk7CisJaWYgKElTX0VSUih2YSkpIHsKKwkJa2ZyZWUoYXJlYSk7CisJCXJldHVybiBOVUxMOwogCX0KLQlpZiAoKHNpemUgKyBhZGRyKSA8IGFkZHIpCi0JCWdvdG8gb3V0OwotCWlmIChhZGRyID4gZW5kIC0gc2l6ZSkKLQkJZ290byBvdXQ7Ci0KLWZvdW5kOgotCWFyZWEtPm5leHQgPSAqcDsKLQkqcCA9IGFyZWE7CiAKIAlhcmVhLT5mbGFncyA9IGZsYWdzOwotCWFyZWEtPmFkZHIgPSAodm9pZCAqKWFkZHI7CisJYXJlYS0+YWRkciA9ICh2b2lkICopdmEtPnZhX3N0YXJ0OwogCWFyZWEtPnNpemUgPSBzaXplOwogCWFyZWEtPnBhZ2VzID0gTlVMTDsKIAlhcmVhLT5ucl9wYWdlcyA9IDA7CiAJYXJlYS0+cGh5c19hZGRyID0gMDsKIAlhcmVhLT5jYWxsZXIgPSBjYWxsZXI7CisJdmEtPnByaXZhdGUgPSBhcmVhOworCXZhLT5mbGFncyB8PSBWTV9WTV9BUkVBOworCisJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOworCWZvciAocCA9ICZ2bWxpc3Q7ICh0bXAgPSAqcCkgIT0gTlVMTDsgcCA9ICZ0bXAtPm5leHQpIHsKKwkJaWYgKHRtcC0+YWRkciA+PSBhcmVhLT5hZGRyKQorCQkJYnJlYWs7CisJfQorCWFyZWEtPm5leHQgPSAqcDsKKwkqcCA9IGFyZWE7CiAJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CiAKIAlyZXR1cm4gYXJlYTsKLQotb3V0OgotCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwotCWtmcmVlKGFyZWEpOwotCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImFsbG9jYXRpb24gZmFpbGVkOiBvdXQgb2Ygdm1hbGxvYyBzcGFjZSAtIHVzZSB2bWFsbG9jPTxzaXplPiB0byBpbmNyZWFzZSBzaXplLlxuIik7Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLApAQCAtMzI4LDM5ICsxMDY5LDE1IEBACiAJCQkJICBnZnBfbWFzaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCB2bWxpc3RfbG9jayAqLwotc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZmluZF92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpCitzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZmluZF92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpCiB7Ci0Jc3RydWN0IHZtX3N0cnVjdCAqdG1wOworCXN0cnVjdCB2bWFwX2FyZWEgKnZhOwogCi0JZm9yICh0bXAgPSB2bWxpc3Q7IHRtcCAhPSBOVUxMOyB0bXAgPSB0bXAtPm5leHQpIHsKLQkJIGlmICh0bXAtPmFkZHIgPT0gYWRkcikKLQkJCWJyZWFrOwotCX0KKwl2YSA9IGZpbmRfdm1hcF9hcmVhKCh1bnNpZ25lZCBsb25nKWFkZHIpOworCWlmICh2YSAmJiB2YS0+ZmxhZ3MgJiBWTV9WTV9BUkVBKQorCQlyZXR1cm4gdmEtPnByaXZhdGU7CiAKLQlyZXR1cm4gdG1wOwotfQotCi0vKiBDYWxsZXIgbXVzdCBob2xkIHZtbGlzdF9sb2NrICovCi1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19yZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQotewotCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wOwotCi0JZm9yIChwID0gJnZtbGlzdCA7ICh0bXAgPSAqcCkgIT0gTlVMTCA7cCA9ICZ0bXAtPm5leHQpIHsKLQkJIGlmICh0bXAtPmFkZHIgPT0gYWRkcikKLQkJCSBnb3RvIGZvdW5kOwotCX0KIAlyZXR1cm4gTlVMTDsKLQotZm91bmQ6Ci0JdW5tYXBfdm1fYXJlYSh0bXApOwotCSpwID0gdG1wLT5uZXh0OwotCi0JLyoKLQkgKiBSZW1vdmUgdGhlIGd1YXJkIHBhZ2UuCi0JICovCi0JdG1wLT5zaXplIC09IFBBR0VfU0laRTsKLQlyZXR1cm4gdG1wOwogfQogCiAvKioKQEAgLTM3MywxMSArMTA5MCwyNCBAQAogICovCiBzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKnY7Ci0Jd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCXYgPSBfX3JlbW92ZV92bV9hcmVhKGFkZHIpOwotCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwotCXJldHVybiB2OworCXN0cnVjdCB2bWFwX2FyZWEgKnZhOworCisJdmEgPSBmaW5kX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTsKKwlpZiAodmEgJiYgdmEtPmZsYWdzICYgVk1fVk1fQVJFQSkgeworCQlzdHJ1Y3Qgdm1fc3RydWN0ICp2bSA9IHZhLT5wcml2YXRlOworCQlzdHJ1Y3Qgdm1fc3RydWN0ICp0bXAsICoqcDsKKwkJZnJlZV91bm1hcF92bWFwX2FyZWEodmEpOworCQl2bS0+c2l6ZSAtPSBQQUdFX1NJWkU7CisKKwkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOworCQlmb3IgKHAgPSAmdm1saXN0OyAodG1wID0gKnApICE9IHZtOyBwID0gJnRtcC0+bmV4dCkKKwkJCTsKKwkJKnAgPSB0bXAtPm5leHQ7CisJCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOworCisJCXJldHVybiB2bTsKKwl9CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIF9fdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIsIGludCBkZWFsbG9jYXRlX3BhZ2VzKQpAQCAtNDg3LDYgKzEyMTcsOCBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWFwKTsKIAorc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCisJCQkgICAgaW50IG5vZGUsIHZvaWQgKmNhbGxlcik7CiBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzaywKIAkJCQkgcGdwcm90X3QgcHJvdCwgaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKIHsKQEAgLTYxMywxMCArMTM0NSw4IEBACiAKIAlyZXQgPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCk7CiAJaWYgKHJldCkgewotCQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JCWFyZWEgPSBfX2ZpbmRfdm1fYXJlYShyZXQpOworCQlhcmVhID0gZmluZF92bV9hcmVhKHJldCk7CiAJCWFyZWEtPmZsYWdzIHw9IFZNX1VTRVJNQVA7Ci0JCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtNjk2LDEwICsxNDI2LDggQEAKIAogCXJldCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfVk1BTExPQzMyIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCQlhcmVhID0gX19maW5kX3ZtX2FyZWEocmV0KTsKKwkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwogCQlhcmVhLT5mbGFncyB8PSBWTV9VU0VSTUFQOwotCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgwMCwyNiArMTUyOCwyNSBAQAogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdW5zaWduZWQgbG9uZyB1YWRkciA9IHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyB1c2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQlpbnQgcmV0OwogCiAJaWYgKChQQUdFX1NJWkUtMSkgJiAodW5zaWduZWQgbG9uZylhZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlYWRfbG9jaygmdm1saXN0X2xvY2spOwotCWFyZWEgPSBfX2ZpbmRfdm1fYXJlYShhZGRyKTsKKwlhcmVhID0gZmluZF92bV9hcmVhKGFkZHIpOwogCWlmICghYXJlYSkKLQkJZ290byBvdXRfZWludmFsX2xvY2tlZDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIShhcmVhLT5mbGFncyAmIFZNX1VTRVJNQVApKQotCQlnb3RvIG91dF9laW52YWxfbG9ja2VkOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh1c2l6ZSArIChwZ29mZiA8PCBQQUdFX1NISUZUKSA+IGFyZWEtPnNpemUgLSBQQUdFX1NJWkUpCi0JCWdvdG8gb3V0X2VpbnZhbF9sb2NrZWQ7Ci0JcmVhZF91bmxvY2soJnZtbGlzdF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhZGRyICs9IHBnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKwkJaW50IHJldDsKKwogCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHVhZGRyLCBwYWdlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC04MzIsMTEgKzE1NTksNyBAQAogCS8qIFByZXZlbnQgInRoaW5ncyIgbGlrZSBtZW1vcnkgbWlncmF0aW9uPyBWTV9mbGFncyBuZWVkIGEgY2xlYW51cC4uLiAqLwogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CiAKLQlyZXR1cm4gcmV0OwotCi1vdXRfZWludmFsX2xvY2tlZDoKLQlyZWFkX3VubG9jaygmdm1saXN0X2xvY2spOwotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChyZW1hcF92bWFsbG9jX3JhbmdlKTsKIApAQCAtOTk2LDExICsxNzE5LDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB2bWFsbG9jX29wID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB2bWFsbG9jX29wID0gewogCS5zdGFydCA9IHNfc3RhcnQsCiAJLm5leHQgPSBzX25leHQsCiAJLnN0b3AgPSBzX3N0b3AsCiAJLnNob3cgPSBzX3Nob3csCiB9OworCitzdGF0aWMgaW50IHZtYWxsb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgKnB0ciA9IE5VTEw7CisJaW50IHJldDsKKworCWlmIChOVU1BX0JVSUxEKQorCQlwdHIgPSBrbWFsbG9jKG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZ2bWFsbG9jX29wKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCW0tPnByaXZhdGUgPSBwdHI7CisJfSBlbHNlCisJCWtmcmVlKHB0cik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY192bWFsbG9jX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gdm1hbGxvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2Nfdm1hbGxvY19pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoInZtYWxsb2NpbmZvIiwgU19JUlVTUiwgTlVMTCwgJnByb2Nfdm1hbGxvY19vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHByb2Nfdm1hbGxvY19pbml0KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDFmZjFhNTguLjNiNTg2MDIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtNzgsNyArNzksNyBAQAogCXVuc2lnbmVkIGxvbmcgKCppc29sYXRlX3BhZ2VzKSh1bnNpZ25lZCBsb25nIG5yLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsCiAJCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsIGludCBtb2RlLAogCQkJc3RydWN0IHpvbmUgKnosIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY29udCwKLQkJCWludCBhY3RpdmUpOworCQkJaW50IGFjdGl2ZSwgaW50IGZpbGUpOwogfTsKIAogI2RlZmluZSBscnVfdG9fcGFnZShfaGVhZCkgKGxpc3RfZW50cnkoKF9oZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCkBAIC00NzAsNiArNDcxLDg1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogcHV0YmFja19scnVfcGFnZSAtIHB1dCBwcmV2aW91c2x5IGlzb2xhdGVkIHBhZ2Ugb250byBhcHByb3ByaWF0ZSBMUlUgbGlzdAorICogQHBhZ2U6IHBhZ2UgdG8gYmUgcHV0IGJhY2sgdG8gYXBwcm9wcmlhdGUgbHJ1IGxpc3QKKyAqCisgKiBBZGQgcHJldmlvdXNseSBpc29sYXRlZCBAcGFnZSB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KKyAqIFBhZ2UgbWF5IHN0aWxsIGJlIHVuZXZpY3RhYmxlIGZvciBvdGhlciByZWFzb25zLgorICoKKyAqIGxydV9sb2NrIG11c3Qgbm90IGJlIGhlbGQsIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkLgorICovCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQordm9pZCBwdXRiYWNrX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCBscnU7CisJaW50IGFjdGl2ZSA9ICEhVGVzdENsZWFyUGFnZUFjdGl2ZShwYWdlKTsKKwlpbnQgd2FzX3VuZXZpY3RhYmxlID0gUGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCisJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCityZWRvOgorCUNsZWFyUGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCisJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKSB7CisJCS8qCisJCSAqIEZvciBldmljdGFibGUgcGFnZXMsIHdlIGNhbiB1c2UgdGhlIGNhY2hlLgorCQkgKiBJbiBldmVudCBvZiBhIHJhY2UsIHdvcnN0IGNhc2UgaXMgd2UgZW5kIHVwIHdpdGggYW4KKwkJICogdW5ldmljdGFibGUgcGFnZSBvbiBbaW5dYWN0aXZlIGxpc3QuCisJCSAqIFdlIGtub3cgaG93IHRvIGhhbmRsZSB0aGF0LgorCQkgKi8KKwkJbHJ1ID0gYWN0aXZlICsgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQlscnVfY2FjaGVfYWRkX2xydShwYWdlLCBscnUpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFB1dCB1bmV2aWN0YWJsZSBwYWdlcyBkaXJlY3RseSBvbiB6b25lJ3MgdW5ldmljdGFibGUKKwkJICogbGlzdC4KKwkJICovCisJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKKwkJYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChwYWdlKTsKKwl9CisJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGxydSk7CisKKwkvKgorCSAqIHBhZ2UncyBzdGF0dXMgY2FuIGNoYW5nZSB3aGlsZSB3ZSBtb3ZlIGl0IGFtb25nIGxydS4gSWYgYW4gZXZpY3RhYmxlCisJICogcGFnZSBpcyBvbiB1bmV2aWN0YWJsZSBsaXN0LCBpdCBuZXZlciBiZSBmcmVlZC4gVG8gYXZvaWQgdGhhdCwKKwkgKiBjaGVjayBhZnRlciB3ZSBhZGRlZCBpdCB0byB0aGUgbGlzdCwgYWdhaW4uCisJICovCisJaWYgKGxydSA9PSBMUlVfVU5FVklDVEFCTEUgJiYgcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpIHsKKwkJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKSB7CisJCQlwdXRfcGFnZShwYWdlKTsKKwkJCWdvdG8gcmVkbzsKKwkJfQorCQkvKiBUaGlzIG1lYW5zIHNvbWVvbmUgZWxzZSBkcm9wcGVkIHRoaXMgcGFnZSBmcm9tIExSVQorCQkgKiBTbywgaXQgd2lsbCBiZSBmcmVlZCBvciBwdXRiYWNrIHRvIExSVSBhZ2Fpbi4gVGhlcmUgaXMKKwkJICogbm90aGluZyB0byBkbyBoZXJlLgorCQkgKi8KKwl9CisKKwlpZiAod2FzX3VuZXZpY3RhYmxlICYmIGxydSAhPSBMUlVfVU5FVklDVEFCTEUpCisJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHUkVTQ1VFRCk7CisJZWxzZSBpZiAoIXdhc191bmV2aWN0YWJsZSAmJiBscnUgPT0gTFJVX1VORVZJQ1RBQkxFKQorCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR0NVTExFRCk7CisKKwlwdXRfcGFnZShwYWdlKTsJCS8qIGRyb3AgcmVmIGZyb20gaXNvbGF0ZSAqLworfQorCisjZWxzZSAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCisKK3ZvaWQgcHV0YmFja19scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgbHJ1OworCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKKworCWxydSA9ICEhVGVzdENsZWFyUGFnZUFjdGl2ZShwYWdlKSArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwlscnVfY2FjaGVfYWRkX2xydShwYWdlLCBscnUpOworCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBscnUpOworCXB1dF9wYWdlKHBhZ2UpOworfQorI2VuZGlmIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKworCiAvKgogICogc2hyaW5rX3BhZ2VfbGlzdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMKICAqLwpAQCAtNTAzLDYgKzU4Myw5IEBACiAKIAkJc2MtPm5yX3NjYW5uZWQrKzsKIAorCQlpZiAodW5saWtlbHkoIXBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKSkKKwkJCWdvdG8gY3VsbF9tbG9ja2VkOworCiAJCWlmICghc2MtPm1heV9zd2FwICYmIHBhZ2VfbWFwcGVkKHBhZ2UpKQogCQkJZ290byBrZWVwX2xvY2tlZDsKIApAQCAtNTM5LDkgKzYyMiwxOSBAQAogCQkgKiBBbm9ueW1vdXMgcHJvY2VzcyBtZW1vcnkgaGFzIGJhY2tpbmcgc3RvcmU/CiAJCSAqIFRyeSB0byBhbGxvY2F0ZSBpdCBzb21lIHN3YXAgc3BhY2UgaGVyZS4KIAkJICovCi0JCWlmIChQYWdlQW5vbihwYWdlKSAmJiAhUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpICYmICFQYWdlU3dhcENhY2hlKHBhZ2UpKSB7CisJCQlzd2l0Y2ggKHRyeV90b19tdW5sb2NrKHBhZ2UpKSB7CisJCQljYXNlIFNXQVBfRkFJTDoJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJCWNhc2UgU1dBUF9BR0FJTjoKKwkJCQlnb3RvIGtlZXBfbG9ja2VkOworCQkJY2FzZSBTV0FQX01MT0NLOgorCQkJCWdvdG8gY3VsbF9tbG9ja2VkOworCQkJY2FzZSBTV0FQX1NVQ0NFU1M6CisJCQkJOyAvKiBmYWxsIHRocnUnOyBhZGQgdG8gc3dhcCBjYWNoZSAqLworCQkJfQogCQkJaWYgKCFhZGRfdG9fc3dhcChwYWdlLCBHRlBfQVRPTUlDKSkKIAkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKKwkJfQogI2VuZGlmIC8qIENPTkZJR19TV0FQICovCiAKIAkJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKQEAgLTU1Niw2ICs2NDksOCBAQAogCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJY2FzZSBTV0FQX0FHQUlOOgogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CisJCQljYXNlIFNXQVBfTUxPQ0s6CisJCQkJZ290byBjdWxsX21sb2NrZWQ7CiAJCQljYXNlIFNXQVBfU1VDQ0VTUzoKIAkJCQk7IC8qIHRyeSB0byBmcmVlIHRoZSBwYWdlIGJlbG93ICovCiAJCQl9CkBAIC02MDIsNyArNjk3LDcgQEAKIAkJICogcG9zc2libGUgZm9yIGEgcGFnZSB0byBoYXZlIFBhZ2VEaXJ0eSBzZXQsIGJ1dCBpdCBpcyBhY3R1YWxseQogCQkgKiBjbGVhbiAoYWxsIGl0cyBidWZmZXJzIGFyZSBjbGVhbikuICBUaGlzIGhhcHBlbnMgaWYgdGhlCiAJCSAqIGJ1ZmZlcnMgd2VyZSB3cml0dGVuIG91dCBkaXJlY3RseSwgd2l0aCBzdWJtaXRfYmgoKS4gZXh0MwotCQkgKiB3aWxsIGRvIHRoaXMsIGFzIHdlbGwgYXMgdGhlIGJsb2NrZGV2IG1hcHBpbmcuIAorCQkgKiB3aWxsIGRvIHRoaXMsIGFzIHdlbGwgYXMgdGhlIGJsb2NrZGV2IG1hcHBpbmcuCiAJCSAqIHRyeV90b19yZWxlYXNlX3BhZ2UoKSB3aWxsIGRpc2NvdmVyIHRoYXQgY2xlYW5uZXNzIGFuZCB3aWxsCiAJCSAqIGRyb3AgdGhlIGJ1ZmZlcnMgYW5kIG1hcmsgdGhlIHBhZ2UgY2xlYW4gLSBpdCBjYW4gYmUgZnJlZWQuCiAJCSAqCkBAIC02MzcsNyArNzMyLDE0IEBACiAJCWlmICghbWFwcGluZyB8fCAhX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBwYWdlKSkKIAkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAKLQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gb3RoZXIgcmVmZXJlbmNlcyBhbmQgdGhlcmUgaXMKKwkJICogbm8gd2F5IHRvIHBpY2sgYW55IG1vcmUgdXAgKHJlbW92ZWQgZnJvbSBMUlUsIHJlbW92ZWQKKwkJICogZnJvbSBwYWdlY2FjaGUpLiBDYW4gdXNlIG5vbi1hdG9taWMgYml0b3BzIG5vdyAoYW5kCisJCSAqIHdlIG9idmlvdXNseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdha2luZyB1cCBhIHByb2Nlc3MKKwkJICogd2FpdGluZyBvbiB0aGUgcGFnZSBsb2NrLCBiZWNhdXNlIHRoZXJlIGFyZSBubyByZWZlcmVuY2VzLgorCQkgKi8KKwkJX19jbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKIGZyZWVfaXQ6CiAJCW5yX3JlY2xhaW1lZCsrOwogCQlpZiAoIXBhZ2V2ZWNfYWRkKCZmcmVlZF9wdmVjLCBwYWdlKSkgewpAQCAtNjQ2LDE0ICs3NDgsMjMgQEAKIAkJfQogCQljb250aW51ZTsKIAorY3VsbF9tbG9ja2VkOgorCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJY29udGludWU7CisKIGFjdGl2YXRlX2xvY2tlZDoKKwkJLyogTm90IGEgY2FuZGlkYXRlIGZvciBzd2FwcGluZywgc28gcmVjbGFpbSBzd2FwIHNwYWNlLiAqLworCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSAmJiB2bV9zd2FwX2Z1bGwoKSkKKwkJCXJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihwYWdlKTsKKwkJVk1fQlVHX09OKFBhZ2VBY3RpdmUocGFnZSkpOwogCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwogCQlwZ2FjdGl2YXRlKys7CiBrZWVwX2xvY2tlZDoKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiBrZWVwOgogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmcmV0X3BhZ2VzKTsKLQkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSB8fCBQYWdlVW5ldmljdGFibGUocGFnZSkpOwogCX0KIAlsaXN0X3NwbGljZSgmcmV0X3BhZ2VzLCBwYWdlX2xpc3QpOwogCWlmIChwYWdldmVjX2NvdW50KCZmcmVlZF9wdmVjKSkKQEAgLTY3Nyw3ICs3ODgsNyBAQAogICoKICAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtdmUgZXJybm8gb24gZmFpbHVyZS4KICAqLwotaW50IF9faXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1vZGUpCitpbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSwgaW50IGZpbGUpCiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTY5Myw2ICs4MDQsMTcgQEAKIAlpZiAobW9kZSAhPSBJU09MQVRFX0JPVEggJiYgKCFQYWdlQWN0aXZlKHBhZ2UpICE9ICFtb2RlKSkKIAkJcmV0dXJuIHJldDsKIAorCWlmIChtb2RlICE9IElTT0xBVEVfQk9USCAmJiAoIXBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSAhPSAhZmlsZSkpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZm9yIGx1bXB5IHJlY2xhaW0sIHdlCisJICogaW5pdGlhbGx5IGxvb2sgaW50byBhbGwgTFJVIHBhZ2VzLCBhY3RpdmUsIGluYWN0aXZlIGFuZAorCSAqIHVuZXZpY3RhYmxlOyBvbmx5IGdpdmUgc2hyaW5rX3BhZ2VfbGlzdCBldmljdGFibGUgcGFnZXMuCisJICovCisJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJcmV0dXJuIHJldDsKKwogCXJldCA9IC1FQlVTWTsKIAlpZiAobGlrZWx5KGdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKSkgewogCQkvKgpAQCAtNzIzLDEyICs4NDUsMTMgQEAKICAqIEBzY2FubmVkOglUaGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLgogICogQG9yZGVyOglUaGUgY2FsbGVyJ3MgYXR0ZW1wdGVkIGFsbG9jYXRpb24gb3JkZXIKICAqIEBtb2RlOglPbmUgb2YgdGhlIExSVSBpc29sYXRpb24gbW9kZXMKKyAqIEBmaWxlOglUcnVlIFsxXSBpZiBpc29sYXRpbmcgZmlsZSBbIWFub25dIHBhZ2VzCiAgKgogICogcmV0dXJucyBob3cgbWFueSBwYWdlcyB3ZXJlIG1vdmVkIG9udG8gKkBkc3QuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqc3JjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsCi0JCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwgaW50IG1vZGUpCisJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwgaW50IG1vZGUsIGludCBmaWxlKQogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgc2NhbjsKQEAgLTc0NSw3ICs4NjgsNyBAQAogCiAJCVZNX0JVR19PTighUGFnZUxSVShwYWdlKSk7CiAKLQkJc3dpdGNoIChfX2lzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgbW9kZSkpIHsKKwkJc3dpdGNoIChfX2lzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgbW9kZSwgZmlsZSkpIHsKIAkJY2FzZSAwOgogCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsIGRzdCk7CiAJCQlucl90YWtlbisrOwpAQCAtNzg4LDEwICs5MTEsMTEgQEAKIAkJCQlicmVhazsKIAogCQkJY3Vyc29yX3BhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCiAJCQkvKiBDaGVjayB0aGF0IHdlIGhhdmUgbm90IGNyb3NzZWQgYSB6b25lIGJvdW5kYXJ5LiAqLwogCQkJaWYgKHVubGlrZWx5KHBhZ2Vfem9uZV9pZChjdXJzb3JfcGFnZSkgIT0gem9uZV9pZCkpCiAJCQkJY29udGludWU7Ci0JCQlzd2l0Y2ggKF9faXNvbGF0ZV9scnVfcGFnZShjdXJzb3JfcGFnZSwgbW9kZSkpIHsKKwkJCXN3aXRjaCAoX19pc29sYXRlX2xydV9wYWdlKGN1cnNvcl9wYWdlLCBtb2RlLCBmaWxlKSkgewogCQkJY2FzZSAwOgogCQkJCWxpc3RfbW92ZSgmY3Vyc29yX3BhZ2UtPmxydSwgZHN0KTsKIAkJCQlucl90YWtlbisrOwpAQCAtODAyLDcgKzkyNiw3IEBACiAJCQkJLyogZWxzZSBpdCBpcyBiZWluZyBmcmVlZCBlbHNld2hlcmUgKi8KIAkJCQlsaXN0X21vdmUoJmN1cnNvcl9wYWdlLT5scnUsIHNyYyk7CiAJCQlkZWZhdWx0OgotCQkJCWJyZWFrOworCQkJCWJyZWFrOwkvKiAhIG9uIExSVSBvciB3cm9uZyBsaXN0ICovCiAJCQl9CiAJCX0KIAl9CkBAIC04MTYsNDAgKzk0MCw5MyBAQAogCQkJCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsCiAJCQkJCWludCBtb2RlLCBzdHJ1Y3Qgem9uZSAqeiwKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAotCQkJCQlpbnQgYWN0aXZlKQorCQkJCQlpbnQgYWN0aXZlLCBpbnQgZmlsZSkKIHsKKwlpbnQgbHJ1ID0gTFJVX0JBU0U7CiAJaWYgKGFjdGl2ZSkKLQkJcmV0dXJuIGlzb2xhdGVfbHJ1X3BhZ2VzKG5yLCAmei0+YWN0aXZlX2xpc3QsIGRzdCwKLQkJCQkJCXNjYW5uZWQsIG9yZGVyLCBtb2RlKTsKLQllbHNlCi0JCXJldHVybiBpc29sYXRlX2xydV9wYWdlcyhuciwgJnotPmluYWN0aXZlX2xpc3QsIGRzdCwKLQkJCQkJCXNjYW5uZWQsIG9yZGVyLCBtb2RlKTsKKwkJbHJ1ICs9IExSVV9BQ1RJVkU7CisJaWYgKGZpbGUpCisJCWxydSArPSBMUlVfRklMRTsKKwlyZXR1cm4gaXNvbGF0ZV9scnVfcGFnZXMobnIsICZ6LT5scnVbbHJ1XS5saXN0LCBkc3QsIHNjYW5uZWQsIG9yZGVyLAorCQkJCQkJCQltb2RlLCAhIWZpbGUpOwogfQogCiAvKgogICogY2xlYXJfYWN0aXZlX2ZsYWdzKCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19hY3RpdmVfbGlzdCgpLCBjbGVhcmluZwogICogYW55IGFjdGl2ZSBiaXRzIGZyb20gdGhlIHBhZ2VzIGluIHRoZSBsaXN0LgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGVhcl9hY3RpdmVfZmxhZ3Moc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xlYXJfYWN0aXZlX2ZsYWdzKHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VfbGlzdCwKKwkJCQkJdW5zaWduZWQgaW50ICpjb3VudCkKIHsKIAlpbnQgbnJfYWN0aXZlID0gMDsKKwlpbnQgbHJ1OwogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBwYWdlX2xpc3QsIGxydSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBhZ2VfbGlzdCwgbHJ1KSB7CisJCWxydSA9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKIAkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJCWxydSArPSBMUlVfQUNUSVZFOwogCQkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwogCQkJbnJfYWN0aXZlKys7CiAJCX0KKwkJY291bnRbbHJ1XSsrOworCX0KIAogCXJldHVybiBucl9hY3RpdmU7CiB9CiAKKy8qKgorICogaXNvbGF0ZV9scnVfcGFnZSAtIHRyaWVzIHRvIGlzb2xhdGUgYSBwYWdlIGZyb20gaXRzIExSVSBsaXN0CisgKiBAcGFnZTogcGFnZSB0byBpc29sYXRlIGZyb20gaXRzIExSVSBsaXN0CisgKgorICogSXNvbGF0ZXMgYSBAcGFnZSBmcm9tIGFuIExSVSBsaXN0LCBjbGVhcnMgUGFnZUxSVSBhbmQgYWRqdXN0cyB0aGUKKyAqIHZtc3RhdCBzdGF0aXN0aWMgY29ycmVzcG9uZGluZyB0byB3aGF0ZXZlciBMUlUgbGlzdCB0aGUgcGFnZSB3YXMgb24uCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBwYWdlIHdhcyByZW1vdmVkIGZyb20gYW4gTFJVIGxpc3QuCisgKiBSZXR1cm5zIC1FQlVTWSBpZiB0aGUgcGFnZSB3YXMgbm90IG9uIGFuIExSVSBsaXN0LgorICoKKyAqIFRoZSByZXR1cm5lZCBwYWdlIHdpbGwgaGF2ZSBQYWdlTFJVKCkgY2xlYXJlZC4gIElmIGl0IHdhcyBmb3VuZCBvbgorICogdGhlIGFjdGl2ZSBsaXN0LCBpdCB3aWxsIGhhdmUgUGFnZUFjdGl2ZSBzZXQuICBJZiBpdCB3YXMgZm91bmQgb24KKyAqIHRoZSB1bmV2aWN0YWJsZSBsaXN0LCBpdCB3aWxsIGhhdmUgdGhlIFBhZ2VVbmV2aWN0YWJsZSBiaXQgc2V0LiBUaGF0IGZsYWcKKyAqIG1heSBuZWVkIHRvIGJlIGNsZWFyZWQgYnkgdGhlIGNhbGxlciBiZWZvcmUgbGV0dGluZyB0aGUgcGFnZSBnby4KKyAqCisgKiBUaGUgdm1zdGF0IHN0YXRpc3RpYyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsaXN0IG9uIHdoaWNoIHRoZSBwYWdlIHdhcworICogZm91bmQgd2lsbCBiZSBkZWNyZW1lbnRlZC4KKyAqCisgKiBSZXN0cmljdGlvbnM6CisgKiAoMSkgTXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBlbGV2YXRlZCByZWZjb3VudCBvbiB0aGUgcGFnZS4gVGhpcyBpcyBhCisgKiAgICAgZnVuZGFtZW50bmFsIGRpZmZlcmVuY2UgZnJvbSBpc29sYXRlX2xydV9wYWdlcyAod2hpY2ggaXMgY2FsbGVkCisgKiAgICAgd2l0aG91dCBhIHN0YWJsZSByZWZlcmVuY2UpLgorICogKDIpIHRoZSBscnVfbG9jayBtdXN0IG5vdCBiZSBoZWxkLgorICogKDMpIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkLgorICovCitpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgcmV0ID0gLUVCVVNZOworCisJaWYgKFBhZ2VMUlUocGFnZSkpIHsKKwkJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisKKwkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQlpZiAoUGFnZUxSVShwYWdlKSAmJiBnZXRfcGFnZV91bmxlc3NfemVybyhwYWdlKSkgeworCQkJaW50IGxydSA9IHBhZ2VfbHJ1KHBhZ2UpOworCQkJcmV0ID0gMDsKKwkJCUNsZWFyUGFnZUxSVShwYWdlKTsKKworCQkJZGVsX3BhZ2VfZnJvbV9scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCX0KKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX3pvbmUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlcgogICogb2YgcmVjbGFpbWVkIHBhZ2VzCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbWF4X3NjYW4sCi0JCQkJc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQorCQkJc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAorCQkJaW50IHByaW9yaXR5LCBpbnQgZmlsZSkKIHsKIAlMSVNUX0hFQUQocGFnZV9saXN0KTsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwpAQCAtODY2LDIwICsxMDQzLDQzIEBACiAJCXVuc2lnbmVkIGxvbmcgbnJfc2NhbjsKIAkJdW5zaWduZWQgbG9uZyBucl9mcmVlZDsKIAkJdW5zaWduZWQgbG9uZyBucl9hY3RpdmU7CisJCXVuc2lnbmVkIGludCBjb3VudFtOUl9MUlVfTElTVFNdID0geyAwLCB9OworCQlpbnQgbW9kZSA9IElTT0xBVEVfSU5BQ1RJVkU7CisKKwkJLyoKKwkJICogSWYgd2UgbmVlZCBhIGxhcmdlIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5LCBvciBoYXZlCisJCSAqIHRyb3VibGUgZ2V0dGluZyBhIHNtYWxsIHNldCBvZiBjb250aWd1b3VzIHBhZ2VzLCB3ZQorCQkgKiB3aWxsIHJlY2xhaW0gYm90aCBhY3RpdmUgYW5kIGluYWN0aXZlIHBhZ2VzLgorCQkgKgorCQkgKiBXZSB1c2UgdGhlIHNhbWUgdGhyZXNob2xkIGFzIHBhZ2VvdXQgY29uZ2VzdGlvbl93YWl0IGJlbG93LgorCQkgKi8KKwkJaWYgKHNjLT5vcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKQorCQkJbW9kZSA9IElTT0xBVEVfQk9USDsKKwkJZWxzZSBpZiAoc2MtPm9yZGVyICYmIHByaW9yaXR5IDwgREVGX1BSSU9SSVRZIC0gMikKKwkJCW1vZGUgPSBJU09MQVRFX0JPVEg7CiAKIAkJbnJfdGFrZW4gPSBzYy0+aXNvbGF0ZV9wYWdlcyhzYy0+c3dhcF9jbHVzdGVyX21heCwKLQkJCSAgICAgJnBhZ2VfbGlzdCwgJm5yX3NjYW4sIHNjLT5vcmRlciwKLQkJCSAgICAgKHNjLT5vcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKT8KLQkJCQkJICAgICBJU09MQVRFX0JPVEggOiBJU09MQVRFX0lOQUNUSVZFLAotCQkJCXpvbmUsIHNjLT5tZW1fY2dyb3VwLCAwKTsKLQkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QpOworCQkJICAgICAmcGFnZV9saXN0LCAmbnJfc2Nhbiwgc2MtPm9yZGVyLCBtb2RlLAorCQkJCXpvbmUsIHNjLT5tZW1fY2dyb3VwLCAwLCBmaWxlKTsKKwkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QsIGNvdW50KTsKIAkJX19jb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9hY3RpdmUpOwogCi0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUsIC1ucl9hY3RpdmUpOwotCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUsCi0JCQkJCQktKG5yX3Rha2VuIC0gbnJfYWN0aXZlKSk7Ci0JCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKQorCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUsCisJCQkJCQktY291bnRbTFJVX0FDVElWRV9GSUxFXSk7CisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9GSUxFLAorCQkJCQkJLWNvdW50W0xSVV9JTkFDVElWRV9GSUxFXSk7CisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfQU5PTiwKKwkJCQkJCS1jb3VudFtMUlVfQUNUSVZFX0FOT05dKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04sCisJCQkJCQktY291bnRbTFJVX0lOQUNUSVZFX0FOT05dKTsKKworCQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkgewogCQkJem9uZS0+cGFnZXNfc2Nhbm5lZCArPSBucl9zY2FuOworCQkJem9uZS0+cmVjZW50X3NjYW5uZWRbMF0gKz0gY291bnRbTFJVX0lOQUNUSVZFX0FOT05dOworCQkJem9uZS0+cmVjZW50X3NjYW5uZWRbMF0gKz0gY291bnRbTFJVX0FDVElWRV9BTk9OXTsKKwkJCXpvbmUtPnJlY2VudF9zY2FubmVkWzFdICs9IGNvdW50W0xSVV9JTkFDVElWRV9GSUxFXTsKKwkJCXpvbmUtPnJlY2VudF9zY2FubmVkWzFdICs9IGNvdW50W0xSVV9BQ1RJVkVfRklMRV07CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAKIAkJbnJfc2Nhbm5lZCArPSBucl9zY2FuOwpAQCAtODk5LDcgKzEwOTksNyBAQAogCQkJICogVGhlIGF0dGVtcHQgYXQgcGFnZSBvdXQgbWF5IGhhdmUgbWFkZSBzb21lCiAJCQkgKiBvZiB0aGUgcGFnZXMgYWN0aXZlLCBtYXJrIHRoZW0gaW5hY3RpdmUgYWdhaW4uCiAJCQkgKi8KLQkJCW5yX2FjdGl2ZSA9IGNsZWFyX2FjdGl2ZV9mbGFncygmcGFnZV9saXN0KTsKKwkJCW5yX2FjdGl2ZSA9IGNsZWFyX2FjdGl2ZV9mbGFncygmcGFnZV9saXN0LCBjb3VudCk7CiAJCQljb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9hY3RpdmUpOwogCiAJCQlucl9mcmVlZCArPSBzaHJpbmtfcGFnZV9saXN0KCZwYWdlX2xpc3QsIHNjLApAQCAtOTI0LDE0ICsxMTI0LDI0IEBACiAJCSAqIFB1dCBiYWNrIGFueSB1bmZyZWVhYmxlIHBhZ2VzLgogCQkgKi8KIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZwYWdlX2xpc3QpKSB7CisJCQlpbnQgbHJ1OwogCQkJcGFnZSA9IGxydV90b19wYWdlKCZwYWdlX2xpc3QpOwogCQkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwotCQkJU2V0UGFnZUxSVShwYWdlKTsKIAkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCi0JCQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7Ci0JCQllbHNlCi0JCQkJYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKKwkJCWlmICh1bmxpa2VseSghcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlTZXRQYWdlTFJVKHBhZ2UpOworCQkJbHJ1ID0gcGFnZV9scnUocGFnZSk7CisJCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOworCQkJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGxydSk7CisJCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSAmJiBzY2FuX2dsb2JhbF9scnUoc2MpKSB7CisJCQkJaW50IGZpbGUgPSAhIXBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJCQl6b25lLT5yZWNlbnRfcm90YXRlZFtmaWxlXSsrOworCQkJfQogCQkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKIAkJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJCQlfX3BhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CkBAIC05NjIsMTE1ICsxMTcyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgem9uZV9pc19uZWFyX29vbShzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKLQlyZXR1cm4gem9uZS0+cGFnZXNfc2Nhbm5lZCA+PSAoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkKLQkJCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSkpKjM7Ci19Ci0KLS8qCi0gKiBEZXRlcm1pbmUgd2Ugc2hvdWxkIHRyeSB0byByZWNsYWltIG1hcHBlZCBwYWdlcy4KLSAqIFRoaXMgaXMgY2FsbGVkIG9ubHkgd2hlbiBzYy0+bWVtX2Nncm91cCBpcyBOVUxMLgotICovCi1zdGF0aWMgaW50IGNhbGNfcmVjbGFpbV9tYXBwZWQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCB6b25lICp6b25lLAotCQkJCWludCBwcmlvcml0eSkKLXsKLQlsb25nIG1hcHBlZF9yYXRpbzsKLQlsb25nIGRpc3RyZXNzOwotCWxvbmcgc3dhcF90ZW5kZW5jeTsKLQlsb25nIGltYmFsYW5jZTsKLQlpbnQgcmVjbGFpbV9tYXBwZWQgPSAwOwotCWludCBwcmV2X3ByaW9yaXR5OwotCi0JaWYgKHNjYW5fZ2xvYmFsX2xydShzYykgJiYgem9uZV9pc19uZWFyX29vbSh6b25lKSkKLQkJcmV0dXJuIDE7Ci0JLyoKLQkgKiBgZGlzdHJlc3MnIGlzIGEgbWVhc3VyZSBvZiBob3cgbXVjaCB0cm91YmxlIHdlJ3JlIGhhdmluZwotCSAqIHJlY2xhaW1pbmcgcGFnZXMuICAwIC0+IG5vIHByb2JsZW1zLiAgMTAwIC0+IGdyZWF0IHRyb3VibGUuCi0JICovCi0JaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpCi0JCXByZXZfcHJpb3JpdHkgPSB6b25lLT5wcmV2X3ByaW9yaXR5OwotCWVsc2UKLQkJcHJldl9wcmlvcml0eSA9IG1lbV9jZ3JvdXBfZ2V0X3JlY2xhaW1fcHJpb3JpdHkoc2MtPm1lbV9jZ3JvdXApOwotCi0JZGlzdHJlc3MgPSAxMDAgPj4gbWluKHByZXZfcHJpb3JpdHksIHByaW9yaXR5KTsKLQotCS8qCi0JICogVGhlIHBvaW50IG9mIHRoaXMgYWxnb3JpdGhtIGlzIHRvIGRlY2lkZSB3aGVuIHRvIHN0YXJ0Ci0JICogcmVjbGFpbWluZyBtYXBwZWQgbWVtb3J5IGluc3RlYWQgb2YganVzdCBwYWdlY2FjaGUuICBXb3JrIG91dAotCSAqIGhvdyBtdWNoIG1lbW9yeQotCSAqIGlzIG1hcHBlZC4KLQkgKi8KLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkKLQkJbWFwcGVkX3JhdGlvID0gKChnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX01BUFBFRCkgKwotCQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FOT05fUEFHRVMpKSAqIDEwMCkgLwotCQkJCQl2bV90b3RhbF9wYWdlczsKLQllbHNlCi0JCW1hcHBlZF9yYXRpbyA9IG1lbV9jZ3JvdXBfY2FsY19tYXBwZWRfcmF0aW8oc2MtPm1lbV9jZ3JvdXApOwotCi0JLyoKLQkgKiBOb3cgZGVjaWRlIGhvdyBtdWNoIHdlIHJlYWxseSB3YW50IHRvIHVubWFwIHNvbWUgcGFnZXMuICBUaGUKLQkgKiBtYXBwZWQgcmF0aW8gaXMgZG93bmdyYWRlZCAtIGp1c3QgYmVjYXVzZSB0aGVyZSdzIGEgbG90IG9mCi0JICogbWFwcGVkIG1lbW9yeSBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBwYWdlIHJlY2xhaW0KLQkgKiBpc24ndCBzdWNjZWVkaW5nLgotCSAqCi0JICogVGhlIGRpc3RyZXNzIHJhdGlvIGlzIGltcG9ydGFudCAtIHdlIGRvbid0IHdhbnQgdG8gc3RhcnQKLQkgKiBnb2luZyBvb20uCi0JICoKLQkgKiBBIDEwMCUgdmFsdWUgb2Ygdm1fc3dhcHBpbmVzcyBvdmVycmlkZXMgdGhpcyBhbGdvcml0aG0KLQkgKiBhbHRvZ2V0aGVyLgotCSAqLwotCXN3YXBfdGVuZGVuY3kgPSBtYXBwZWRfcmF0aW8gLyAyICsgZGlzdHJlc3MgKyBzYy0+c3dhcHBpbmVzczsKLQotCS8qCi0JICogSWYgdGhlcmUncyBodWdlIGltYmFsYW5jZSBiZXR3ZWVuIGFjdGl2ZSBhbmQgaW5hY3RpdmUKLQkgKiAodGhpbmsgYWN0aXZlIDEwMCB0aW1lcyBsYXJnZXIgdGhhbiBpbmFjdGl2ZSkgd2Ugc2hvdWxkCi0JICogYmVjb21lIG1vcmUgcGVybWlzc2l2ZSwgb3IgdGhlIHN5c3RlbSB3aWxsIHRha2UgdG9vIG11Y2gKLQkgKiBjcHUgYmVmb3JlIGl0IHN0YXJ0IHN3YXBwaW5nIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUuCi0JICogRGlzdHJlc3MgaXMgYWJvdXQgYXZvaWRpbmcgZWFybHktb29tLCB0aGlzIGlzIGFib3V0Ci0JICogbWFraW5nIHN3YXBwaW5lc3MgZ3JhY2VmdWwgZGVzcGl0ZSBzZXR0aW5nIGl0IHRvIGxvdwotCSAqIHZhbHVlcy4KLQkgKgotCSAqIEF2b2lkIGRpdiBieSB6ZXJvIHdpdGggbnJfaW5hY3RpdmUrMSwgYW5kIG1heCByZXN1bHRpbmcKLQkgKiB2YWx1ZSBpcyB2bV90b3RhbF9wYWdlcy4KLQkgKi8KLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkgewotCQlpbWJhbGFuY2UgID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSk7Ci0JCWltYmFsYW5jZSAvPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpICsgMTsKLQl9IGVsc2UKLQkJaW1iYWxhbmNlID0gbWVtX2Nncm91cF9yZWNsYWltX2ltYmFsYW5jZShzYy0+bWVtX2Nncm91cCk7Ci0KLQkvKgotCSAqIFJlZHVjZSB0aGUgZWZmZWN0IG9mIGltYmFsYW5jZSBpZiBzd2FwcGluZXNzIGlzIGxvdywKLQkgKiB0aGlzIG1lYW5zIGZvciBhIHN3YXBwaW5lc3MgdmVyeSBsb3csIHRoZSBpbWJhbGFuY2UKLQkgKiBtdXN0IGJlIG11Y2ggaGlnaGVyIHRoYW4gMTAwIGZvciB0aGlzIGxvZ2ljIHRvIG1ha2UKLQkgKiB0aGUgZGlmZmVyZW5jZS4KLQkgKgotCSAqIE1heCB0ZW1wb3JhcnkgdmFsdWUgaXMgdm1fdG90YWxfcGFnZXMqMTAwLgotCSAqLwotCWltYmFsYW5jZSAqPSAodm1fc3dhcHBpbmVzcyArIDEpOwotCWltYmFsYW5jZSAvPSAxMDA7Ci0KLQkvKgotCSAqIElmIG5vdCBtdWNoIG9mIHRoZSByYW0gaXMgbWFwcGVkLCBtYWtlcyB0aGUgaW1iYWxhbmNlCi0JICogbGVzcyByZWxldmFudCwgaXQncyBoaWdoIHByaW9yaXR5IHdlIHJlZmlsbCB0aGUgaW5hY3RpdmUKLQkgKiBsaXN0IHdpdGggbWFwcGVkIHBhZ2VzIG9ubHkgaW4gcHJlc2VuY2Ugb2YgaGlnaCByYXRpbyBvZgotCSAqIG1hcHBlZCBwYWdlcy4KLQkgKgotCSAqIE1heCB0ZW1wb3JhcnkgdmFsdWUgaXMgdm1fdG90YWxfcGFnZXMqMTAwLgotCSAqLwotCWltYmFsYW5jZSAqPSBtYXBwZWRfcmF0aW87Ci0JaW1iYWxhbmNlIC89IDEwMDsKLQotCS8qIGFwcGx5IGltYmFsYW5jZSBmZWVkYmFjayB0byBzd2FwX3RlbmRlbmN5ICovCi0Jc3dhcF90ZW5kZW5jeSArPSBpbWJhbGFuY2U7Ci0KLQkvKgotCSAqIE5vdyB1c2UgdGhpcyBtZXRyaWMgdG8gZGVjaWRlIHdoZXRoZXIgdG8gc3RhcnQgbW92aW5nIG1hcHBlZAotCSAqIG1lbW9yeSBvbnRvIHRoZSBpbmFjdGl2ZSBsaXN0LgotCSAqLwotCWlmIChzd2FwX3RlbmRlbmN5ID49IDEwMCkKLQkJcmVjbGFpbV9tYXBwZWQgPSAxOwotCi0JcmV0dXJuIHJlY2xhaW1fbWFwcGVkOworCXJldHVybiB6b25lLT5wYWdlc19zY2FubmVkID49ICh6b25lX2xydV9wYWdlcyh6b25lKSAqIDMpOwogfQogCiAvKgpAQCAtMTA5Myw1MyArMTE5NSw3MSBAQAogCiAKIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3Qgem9uZSAqem9uZSwKLQkJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHByaW9yaXR5KQorCQkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBwcmlvcml0eSwgaW50IGZpbGUpCiB7CiAJdW5zaWduZWQgbG9uZyBwZ21vdmVkOwogCWludCBwZ2RlYWN0aXZhdGUgPSAwOwogCXVuc2lnbmVkIGxvbmcgcGdzY2FubmVkOwogCUxJU1RfSEVBRChsX2hvbGQpOwkvKiBUaGUgcGFnZXMgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwotCUxJU1RfSEVBRChsX2luYWN0aXZlKTsJLyogUGFnZXMgdG8gZ28gb250byB0aGUgaW5hY3RpdmVfbGlzdCAqLwotCUxJU1RfSEVBRChsX2FjdGl2ZSk7CS8qIFBhZ2VzIHRvIGdvIG9udG8gdGhlIGFjdGl2ZV9saXN0ICovCisJTElTVF9IRUFEKGxfaW5hY3RpdmUpOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBwYWdldmVjIHB2ZWM7Ci0JaW50IHJlY2xhaW1fbWFwcGVkID0gMDsKLQotCWlmIChzYy0+bWF5X3N3YXApCi0JCXJlY2xhaW1fbWFwcGVkID0gY2FsY19yZWNsYWltX21hcHBlZChzYywgem9uZSwgcHJpb3JpdHkpOworCWVudW0gbHJ1X2xpc3QgbHJ1OwogCiAJbHJ1X2FkZF9kcmFpbigpOwogCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAlwZ21vdmVkID0gc2MtPmlzb2xhdGVfcGFnZXMobnJfcGFnZXMsICZsX2hvbGQsICZwZ3NjYW5uZWQsIHNjLT5vcmRlciwKIAkJCQkJSVNPTEFURV9BQ1RJVkUsIHpvbmUsCi0JCQkJCXNjLT5tZW1fY2dyb3VwLCAxKTsKKwkJCQkJc2MtPm1lbV9jZ3JvdXAsIDEsIGZpbGUpOwogCS8qCiAJICogem9uZS0+cGFnZXNfc2Nhbm5lZCBpcyB1c2VkIGZvciBkZXRlY3Qgem9uZSdzIG9vbQogCSAqIG1lbV9jZ3JvdXAgcmVtZW1iZXJzIG5yX3NjYW4gYnkgaXRzZWxmLgogCSAqLwotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKQorCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7CiAJCXpvbmUtPnBhZ2VzX3NjYW5uZWQgKz0gcGdzY2FubmVkOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFshIWZpbGVdICs9IHBnbW92ZWQ7CisJfQogCi0JX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSwgLXBnbW92ZWQpOworCWlmIChmaWxlKQorCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUsIC1wZ21vdmVkKTsKKwllbHNlCisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfQU5PTiwgLXBnbW92ZWQpOwogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCisJcGdtb3ZlZCA9IDA7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZsX2hvbGQpKSB7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJmxfaG9sZCk7CiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQlpZiAocGFnZV9tYXBwZWQocGFnZSkpIHsKLQkJCWlmICghcmVjbGFpbV9tYXBwZWQgfHwKLQkJCSAgICAodG90YWxfc3dhcF9wYWdlcyA9PSAwICYmIFBhZ2VBbm9uKHBhZ2UpKSB8fAotCQkJICAgIHBhZ2VfcmVmZXJlbmNlZChwYWdlLCAwLCBzYy0+bWVtX2Nncm91cCkpIHsKLQkJCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbF9hY3RpdmUpOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCisJCWlmICh1bmxpa2VseSghcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpKSB7CisJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCQkJY29udGludWU7CiAJCX0KKworCQkvKiBwYWdlX3JlZmVyZW5jZWQgY2xlYXJzIFBhZ2VSZWZlcmVuY2VkICovCisJCWlmIChwYWdlX21hcHBpbmdfaW51c2UocGFnZSkgJiYKKwkJICAgIHBhZ2VfcmVmZXJlbmNlZChwYWdlLCAwLCBzYy0+bWVtX2Nncm91cCkpCisJCQlwZ21vdmVkKys7CisKIAkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJmxfaW5hY3RpdmUpOwogCX0KIAorCS8qCisJICogQ291bnQgcmVmZXJlbmNlZCBwYWdlcyBmcm9tIGN1cnJlbnRseSB1c2VkIG1hcHBpbmdzIGFzCisJICogcm90YXRlZCwgZXZlbiB0aG91Z2ggdGhleSBhcmUgbW92ZWQgdG8gdGhlIGluYWN0aXZlIGxpc3QuCisJICogVGhpcyBoZWxwcyBiYWxhbmNlIHNjYW4gcHJlc3N1cmUgYmV0d2VlbiBmaWxlIGFuZCBhbm9ueW1vdXMKKwkgKiBwYWdlcyBpbiBnZXRfc2Nhbl9yYXRpby4KKwkgKi8KKwl6b25lLT5yZWNlbnRfcm90YXRlZFshIWZpbGVdICs9IHBnbW92ZWQ7CisKKwkvKgorCSAqIE1vdmUgdGhlIHBhZ2VzIHRvIHRoZSBbZmlsZSBvciBhbm9uXSBpbmFjdGl2ZSBsaXN0LgorCSAqLwogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMSk7CisKIAlwZ21vdmVkID0gMDsKKwlscnUgPSBMUlVfQkFTRSArIGZpbGUgKiBMUlVfRklMRTsKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZsX2luYWN0aXZlKSkgewogCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJmxfaW5hY3RpdmUpOwpAQCAtMTE0OSwxMSArMTI2OSwxMSBAQAogCQlWTV9CVUdfT04oIVBhZ2VBY3RpdmUocGFnZSkpOwogCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAKLQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKLQkJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGZhbHNlKTsKKwkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbHJ1XS5saXN0KTsKKwkJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGxydSk7CiAJCXBnbW92ZWQrKzsKIAkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKLQkJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSwgcGdtb3ZlZCk7CisJCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBscnUsIHBnbW92ZWQpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCQlwZ2RlYWN0aXZhdGUgKz0gcGdtb3ZlZDsKIAkJCXBnbW92ZWQgPSAwOwpAQCAtMTE2MywxMDQgKzEyODMsMTg5IEBACiAJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCX0KIAl9Ci0JX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFLCBwZ21vdmVkKTsKKwlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBscnUsIHBnbW92ZWQpOwogCXBnZGVhY3RpdmF0ZSArPSBwZ21vdmVkOwogCWlmIChidWZmZXJfaGVhZHNfb3Zlcl9saW1pdCkgewogCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJcGFnZXZlY19zdHJpcCgmcHZlYyk7CiAJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAl9Ci0KLQlwZ21vdmVkID0gMDsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfYWN0aXZlKSkgewotCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJmxfYWN0aXZlKTsKLQkJcHJlZmV0Y2h3X3ByZXZfbHJ1X3BhZ2UocGFnZSwgJmxfYWN0aXZlLCBmbGFncyk7Ci0JCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKLQkJU2V0UGFnZUxSVShwYWdlKTsKLQkJVk1fQlVHX09OKCFQYWdlQWN0aXZlKHBhZ2UpKTsKLQotCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJnpvbmUtPmFjdGl2ZV9saXN0KTsKLQkJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIHRydWUpOwotCQlwZ21vdmVkKys7Ci0JCWlmICghcGFnZXZlY19hZGQoJnB2ZWMsIHBhZ2UpKSB7Ci0JCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFLCBwZ21vdmVkKTsKLQkJCXBnbW92ZWQgPSAwOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQlfX3BhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7Ci0JCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCX0KLQl9Ci0JX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSwgcGdtb3ZlZCk7Ci0KIAlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHUkVGSUxMLCB6b25lLCBwZ3NjYW5uZWQpOwogCV9fY291bnRfdm1fZXZlbnRzKFBHREVBQ1RJVkFURSwgcGdkZWFjdGl2YXRlKTsKIAlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwlpZiAodm1fc3dhcF9mdWxsKCkpCisJCXBhZ2V2ZWNfc3dhcF9mcmVlKCZwdmVjKTsKIAogCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCisJc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgcHJpb3JpdHkpCit7CisJaW50IGZpbGUgPSBpc19maWxlX2xydShscnUpOworCisJaWYgKGxydSA9PSBMUlVfQUNUSVZFX0ZJTEUpIHsKKwkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSwgZmlsZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChscnUgPT0gTFJVX0FDVElWRV9BTk9OICYmCisJICAgICghc2Nhbl9nbG9iYWxfbHJ1KHNjKSB8fCBpbmFjdGl2ZV9hbm9uX2lzX2xvdyh6b25lKSkpIHsKKwkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSwgZmlsZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW9yaXR5LCBmaWxlKTsKK30KKworLyoKKyAqIERldGVybWluZSBob3cgYWdncmVzc2l2ZWx5IHRoZSBhbm9uIGFuZCBmaWxlIExSVSBsaXN0cyBzaG91bGQgYmUKKyAqIHNjYW5uZWQuICBUaGUgcmVsYXRpdmUgdmFsdWUgb2YgZWFjaCBzZXQgb2YgTFJVIGxpc3RzIGlzIGRldGVybWluZWQKKyAqIGJ5IGxvb2tpbmcgYXQgdGhlIGZyYWN0aW9uIG9mIHRoZSBwYWdlcyBzY2FubmVkIHdlIGRpZCByb3RhdGUgYmFjaworICogb250byB0aGUgYWN0aXZlIGxpc3QgaW5zdGVhZCBvZiBldmljdC4KKyAqCisgKiBwZXJjZW50WzBdIHNwZWNpZmllcyBob3cgbXVjaCBwcmVzc3VyZSB0byBwdXQgb24gcmFtL3N3YXAgYmFja2VkCisgKiBtZW1vcnksIHdoaWxlIHBlcmNlbnRbMV0gZGV0ZXJtaW5lcyBwcmVzc3VyZSBvbiB0aGUgZmlsZSBMUlVzLgorICovCitzdGF0aWMgdm9pZCBnZXRfc2Nhbl9yYXRpbyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCisJCQkJCXVuc2lnbmVkIGxvbmcgKnBlcmNlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhbm9uLCBmaWxlLCBmcmVlOworCXVuc2lnbmVkIGxvbmcgYW5vbl9wcmlvLCBmaWxlX3ByaW87CisJdW5zaWduZWQgbG9uZyBhcCwgZnA7CisKKwlhbm9uICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfQU5PTikgKworCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTik7CisJZmlsZSAgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUpICsKKwkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpOworCWZyZWUgID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpOworCisJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gcGFnZXMuICovCisJaWYgKG5yX3N3YXBfcGFnZXMgPD0gMCkgeworCQlwZXJjZW50WzBdID0gMDsKKwkJcGVyY2VudFsxXSA9IDEwMDsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHdlIGhhdmUgdmVyeSBmZXcgcGFnZSBjYWNoZSBwYWdlcywgZm9yY2Utc2NhbiBhbm9uIHBhZ2VzLiAqLworCWlmICh1bmxpa2VseShmaWxlICsgZnJlZSA8PSB6b25lLT5wYWdlc19oaWdoKSkgeworCQlwZXJjZW50WzBdID0gMTAwOworCQlwZXJjZW50WzFdID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT0ssIHNvIHdlIGhhdmUgc3dhcCBzcGFjZSBhbmQgYSBmYWlyIGFtb3VudCBvZiBwYWdlIGNhY2hlCisJICogcGFnZXMuICBXZSB1c2UgdGhlIHJlY2VudGx5IHJvdGF0ZWQgLyByZWNlbnRseSBzY2FubmVkCisJICogcmF0aW9zIHRvIGRldGVybWluZSBob3cgdmFsdWFibGUgZWFjaCBjYWNoZSBpcy4KKwkgKgorCSAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZCBvdmVyZmxvdykKKwkgKiB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZyBhdmVyYWdlLCB3aGljaCBlbmRzCisJICogdXAgd2VpZ2hpbmcgcmVjZW50IHJlZmVyZW5jZXMgbW9yZSB0aGFuIG9sZCBvbmVzLgorCSAqCisJICogYW5vbiBpbiBbMF0sIGZpbGUgaW4gWzFdCisJICovCisJaWYgKHVubGlrZWx5KHpvbmUtPnJlY2VudF9zY2FubmVkWzBdID4gYW5vbiAvIDQpKSB7CisJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbMF0gLz0gMjsKKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbMF0gLz0gMjsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJfQorCisJaWYgKHVubGlrZWx5KHpvbmUtPnJlY2VudF9zY2FubmVkWzFdID4gZmlsZSAvIDQpKSB7CisJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gLz0gMjsKKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbMV0gLz0gMjsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJfQorCisJLyoKKwkgKiBXaXRoIHN3YXBwaW5lc3MgYXQgMTAwLCBhbm9ueW1vdXMgYW5kIGZpbGUgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eS4KKwkgKiBUaGlzIHNjYW5uaW5nIHByaW9yaXR5IGlzIGVzc2VudGlhbGx5IHRoZSBpbnZlcnNlIG9mIElPIGNvc3QuCisJICovCisJYW5vbl9wcmlvID0gc2MtPnN3YXBwaW5lc3M7CisJZmlsZV9wcmlvID0gMjAwIC0gc2MtPnN3YXBwaW5lc3M7CisKKwkvKgorCSAqICAgICAgICAgICAgICAgICAgYW5vbiAgICAgICByZWNlbnRfcm90YXRlZFswXQorCSAqICVhbm9uID0gMTAwICogLS0tLS0tLS0tLS0gLyAtLS0tLS0tLS0tLS0tLS0tLSAqIElPIGNvc3QKKwkgKiAgICAgICAgICAgICAgIGFub24gKyBmaWxlICAgICAgcm90YXRlX3N1bQorCSAqLworCWFwID0gKGFub25fcHJpbyArIDEpICogKHpvbmUtPnJlY2VudF9zY2FubmVkWzBdICsgMSk7CisJYXAgLz0gem9uZS0+cmVjZW50X3JvdGF0ZWRbMF0gKyAxOworCisJZnAgPSAoZmlsZV9wcmlvICsgMSkgKiAoem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gKyAxKTsKKwlmcCAvPSB6b25lLT5yZWNlbnRfcm90YXRlZFsxXSArIDE7CisKKwkvKiBOb3JtYWxpemUgdG8gcGVyY2VudGFnZXMgKi8KKwlwZXJjZW50WzBdID0gMTAwICogYXAgLyAoYXAgKyBmcCArIDEpOworCXBlcmNlbnRbMV0gPSAxMDAgLSBwZXJjZW50WzBdOworfQorCisKIC8qCiAgKiBUaGlzIGlzIGEgYmFzaWMgcGVyLXpvbmUgcGFnZSBmcmVlci4gIFVzZWQgYnkgYm90aCBrc3dhcGQgYW5kIGRpcmVjdCByZWNsYWltLgogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfem9uZShpbnQgcHJpb3JpdHksIHN0cnVjdCB6b25lICp6b25lLAogCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewotCXVuc2lnbmVkIGxvbmcgbnJfYWN0aXZlOwotCXVuc2lnbmVkIGxvbmcgbnJfaW5hY3RpdmU7CisJdW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdOwogCXVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbjsKIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7CisJdW5zaWduZWQgbG9uZyBwZXJjZW50WzJdOwkvKiBhbm9uIEAgMDsgZmlsZSBAIDEgKi8KKwllbnVtIGxydV9saXN0IGw7CiAKLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkgewotCQkvKgotCQkgKiBBZGQgb25lIHRvIG5yX3RvX3NjYW4ganVzdCB0byBtYWtlIHN1cmUgdGhhdCB0aGUga2VybmVsCi0JCSAqIHdpbGwgc2xvd2x5IHNpZnQgdGhyb3VnaCB0aGUgYWN0aXZlIGxpc3QuCi0JCSAqLwotCQl6b25lLT5ucl9zY2FuX2FjdGl2ZSArPQotCQkJKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpID4+IHByaW9yaXR5KSArIDE7Ci0JCW5yX2FjdGl2ZSA9IHpvbmUtPm5yX3NjYW5fYWN0aXZlOwotCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlICs9Ci0JCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSA+PiBwcmlvcml0eSkgKyAxOwotCQlucl9pbmFjdGl2ZSA9IHpvbmUtPm5yX3NjYW5faW5hY3RpdmU7Ci0JCWlmIChucl9pbmFjdGl2ZSA+PSBzYy0+c3dhcF9jbHVzdGVyX21heCkKLQkJCXpvbmUtPm5yX3NjYW5faW5hY3RpdmUgPSAwOwotCQllbHNlCi0JCQlucl9pbmFjdGl2ZSA9IDA7CisJZ2V0X3NjYW5fcmF0aW8oem9uZSwgc2MsIHBlcmNlbnQpOwogCi0JCWlmIChucl9hY3RpdmUgPj0gc2MtPnN3YXBfY2x1c3Rlcl9tYXgpCi0JCQl6b25lLT5ucl9zY2FuX2FjdGl2ZSA9IDA7Ci0JCWVsc2UKLQkJCW5yX2FjdGl2ZSA9IDA7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhpcyByZWNsYWltIG9jY3VycyBub3QgYmVjYXVzZSB6b25lIG1lbW9yeSBzaG9ydGFnZSBidXQKLQkJICogYmVjYXVzZSBtZW1vcnkgY29udHJvbGxlciBoaXRzIGl0cyBsaW1pdC4KLQkJICogVGhlbiwgZG9uJ3QgbW9kaWZ5IHpvbmUgcmVjbGFpbSByZWxhdGVkIGRhdGEuCi0JCSAqLwotCQlucl9hY3RpdmUgPSBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9hY3RpdmUoc2MtPm1lbV9jZ3JvdXAsCi0JCQkJCXpvbmUsIHByaW9yaXR5KTsKKwlmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGwpIHsKKwkJaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpIHsKKwkJCWludCBmaWxlID0gaXNfZmlsZV9scnUobCk7CisJCQlpbnQgc2NhbjsKIAotCQlucl9pbmFjdGl2ZSA9IG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2luYWN0aXZlKHNjLT5tZW1fY2dyb3VwLAotCQkJCQl6b25lLCBwcmlvcml0eSk7Ci0JfQotCi0KLQl3aGlsZSAobnJfYWN0aXZlIHx8IG5yX2luYWN0aXZlKSB7Ci0JCWlmIChucl9hY3RpdmUpIHsKLQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfYWN0aXZlLAotCQkJCQkodW5zaWduZWQgbG9uZylzYy0+c3dhcF9jbHVzdGVyX21heCk7Ci0JCQlucl9hY3RpdmUgLT0gbnJfdG9fc2NhbjsKLQkJCXNocmlua19hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpb3JpdHkpOwotCQl9Ci0KLQkJaWYgKG5yX2luYWN0aXZlKSB7Ci0JCQlucl90b19zY2FuID0gbWluKG5yX2luYWN0aXZlLAotCQkJCQkodW5zaWduZWQgbG9uZylzYy0+c3dhcF9jbHVzdGVyX21heCk7Ci0JCQlucl9pbmFjdGl2ZSAtPSBucl90b19zY2FuOwotCQkJbnJfcmVjbGFpbWVkICs9IHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsCi0JCQkJCQkJCXNjKTsKKwkJCXNjYW4gPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKKwkJCWlmIChwcmlvcml0eSkgeworCQkJCXNjYW4gPj49IHByaW9yaXR5OworCQkJCXNjYW4gPSAoc2NhbiAqIHBlcmNlbnRbZmlsZV0pIC8gMTAwOworCQkJfQorCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gKz0gc2NhbjsKKwkJCW5yW2xdID0gem9uZS0+bHJ1W2xdLm5yX3NjYW47CisJCQlpZiAobnJbbF0gPj0gc2MtPnN3YXBfY2x1c3Rlcl9tYXgpCisJCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gPSAwOworCQkJZWxzZQorCQkJCW5yW2xdID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGlzIHJlY2xhaW0gb2NjdXJzIG5vdCBiZWNhdXNlIHpvbmUgbWVtb3J5IHNob3J0YWdlCisJCQkgKiBidXQgYmVjYXVzZSBtZW1vcnkgY29udHJvbGxlciBoaXRzIGl0cyBsaW1pdC4KKwkJCSAqIERvbid0IG1vZGlmeSB6b25lIHJlY2xhaW0gcmVsYXRlZCBkYXRhLgorCQkJICovCisJCQlucltsXSA9IG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltKHNjLT5tZW1fY2dyb3VwLCB6b25lLAorCQkJCQkJCQlwcmlvcml0eSwgbCk7CiAJCX0KIAl9CiAKKwl3aGlsZSAobnJbTFJVX0lOQUNUSVZFX0FOT05dIHx8IG5yW0xSVV9BQ1RJVkVfRklMRV0gfHwKKwkJCQkJbnJbTFJVX0lOQUNUSVZFX0ZJTEVdKSB7CisJCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgeworCQkJaWYgKG5yW2xdKSB7CisJCQkJbnJfdG9fc2NhbiA9IG1pbihucltsXSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpc2MtPnN3YXBfY2x1c3Rlcl9tYXgpOworCQkJCW5yW2xdIC09IG5yX3RvX3NjYW47CisKKwkJCQlucl9yZWNsYWltZWQgKz0gc2hyaW5rX2xpc3QobCwgbnJfdG9fc2NhbiwKKwkJCQkJCQl6b25lLCBzYywgcHJpb3JpdHkpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBFdmVuIGlmIHdlIGRpZCBub3QgdHJ5IHRvIGV2aWN0IGFub24gcGFnZXMgYXQgYWxsLCB3ZSB3YW50IHRvCisJICogcmViYWxhbmNlIHRoZSBhbm9uIGxydSBhY3RpdmUvaW5hY3RpdmUgcmF0aW8uCisJICovCisJaWYgKCFzY2FuX2dsb2JhbF9scnUoc2MpIHx8IGluYWN0aXZlX2Fub25faXNfbG93KHpvbmUpKQorCQlzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgem9uZSwgc2MsIHByaW9yaXR5LCAwKTsKKwllbHNlIGlmICghc2Nhbl9nbG9iYWxfbHJ1KHNjKSkKKwkJc2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIHpvbmUsIHNjLCBwcmlvcml0eSwgMCk7CisKIAl0aHJvdHRsZV92bV93cml0ZW91dChzYy0+Z2ZwX21hc2spOwogCXJldHVybiBucl9yZWNsYWltZWQ7CiB9CkBAIC0xMzIxLDcgKzE1MjYsNyBAQAogCiAJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KLSAKKwogLyoKICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gZGlyZWN0IHBhZ2UgcmVjbGFpbS4KICAqCkBAIC0xMzY0LDggKzE1NjksNyBAQAogCQkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHpvbmUsIEdGUF9LRVJORUwpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlscnVfcGFnZXMgKz0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkKLQkJCQkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpOworCQkJbHJ1X3BhZ2VzICs9IHpvbmVfbHJ1X3BhZ2VzKHpvbmUpOwogCQl9CiAJfQogCkBAIC0xNTU1LDYgKzE3NTksMTQgQEAKIAkJCSAgICBwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCiAJCQkJY29udGludWU7CiAKKwkJCS8qCisJCQkgKiBEbyBzb21lIGJhY2tncm91bmQgYWdpbmcgb2YgdGhlIGFub24gbGlzdCwgdG8gZ2l2ZQorCQkJICogcGFnZXMgYSBjaGFuY2UgdG8gYmUgcmVmZXJlbmNlZCBiZWZvcmUgcmVjbGFpbWluZy4KKwkJCSAqLworCQkJaWYgKGluYWN0aXZlX2Fub25faXNfbG93KHpvbmUpKQorCQkJCXNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCB6b25lLAorCQkJCQkJCSZzYywgcHJpb3JpdHksIDApOworCiAJCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCB6b25lLT5wYWdlc19oaWdoLAogCQkJCQkgICAgICAgMCwgMCkpIHsKIAkJCQllbmRfem9uZSA9IGk7CkBAIC0xNTY3LDggKzE3NzksNyBAQAogCQlmb3IgKGkgPSAwOyBpIDw9IGVuZF96b25lOyBpKyspIHsKIAkJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOwogCi0JCQlscnVfcGFnZXMgKz0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkKLQkJCQkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpOworCQkJbHJ1X3BhZ2VzICs9IHpvbmVfbHJ1X3BhZ2VzKHpvbmUpOwogCQl9CiAKIAkJLyoKQEAgLTE2MTIsOCArMTgyMyw3IEBACiAJCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChucl9zbGFiID09IDAgJiYgem9uZS0+cGFnZXNfc2Nhbm5lZCA+PQotCQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKQotCQkJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSkgKiA2KQorCQkJCQkJKHpvbmVfbHJ1X3BhZ2VzKHpvbmUpICogNikpCiAJCQkJCXpvbmVfc2V0X2ZsYWcoem9uZSwKIAkJCQkJCSAgICAgIFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUpOwogCQkJLyoKQEAgLTE2NjcsNyArMTg3Nyw3IEBACiAKIC8qCiAgKiBUaGUgYmFja2dyb3VuZCBwYWdlb3V0IGRhZW1vbiwgc3RhcnRlZCBhcyBhIGtlcm5lbCB0aHJlYWQKLSAqIGZyb20gdGhlIGluaXQgcHJvY2Vzcy4gCisgKiBmcm9tIHRoZSBpbml0IHByb2Nlc3MuCiAgKgogICogVGhpcyBiYXNpY2FsbHkgdHJpY2tsZXMgb3V0IHBhZ2VzIHNvIHRoYXQgd2UgaGF2ZSBfc29tZV8KICAqIGZyZWUgbWVtb3J5IGF2YWlsYWJsZSBldmVuIGlmIHRoZXJlIGlzIG5vIG90aGVyIGFjdGl2aXR5CkBAIC0xNzYxLDYgKzE5NzEsMTQgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBnZGF0LT5rc3dhcGRfd2FpdCk7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgZ2xvYmFsX2xydV9wYWdlcyh2b2lkKQoreworCXJldHVybiBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfQU5PTikKKwkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSkKKwkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9BTk9OKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0ZJTEUpOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBzaHJpbmtfYWxsX21lbW9yeSgpLiAgVHJpZXMgdG8gcmVjbGFpbSAnbnJfcGFnZXMnIHBhZ2VzCkBAIC0xNzc0LDYgKzE5OTIsNyBAQAogewogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwgcmV0ID0gMDsKKwllbnVtIGxydV9saXN0IGw7CiAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKIApAQCAtMTc4MywzOCArMjAwMiwzMSBAQAogCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSAmJiBwcmlvICE9IERFRl9QUklPUklUWSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIEZvciBwYXNzID0gMCB3ZSBkb24ndCBzaHJpbmsgdGhlIGFjdGl2ZSBsaXN0ICovCi0JCWlmIChwYXNzID4gMCkgewotCQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgKz0KLQkJCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkgPj4gcHJpbykgKyAxOwotCQkJaWYgKHpvbmUtPm5yX3NjYW5fYWN0aXZlID49IG5yX3BhZ2VzIHx8IHBhc3MgPiAzKSB7Ci0JCQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgPSAwOwotCQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsCi0JCQkJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpKTsKLQkJCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW8pOwotCQkJfQotCQl9CisJCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgeworCQkJLyogRm9yIHBhc3MgPSAwLCB3ZSBkb24ndCBzaHJpbmsgdGhlIGFjdGl2ZSBsaXN0ICovCisJCQlpZiAocGFzcyA9PSAwICYmCisJCQkJKGwgPT0gTFJVX0FDVElWRSB8fCBsID09IExSVV9BQ1RJVkVfRklMRSkpCisJCQkJY29udGludWU7CiAKLQkJem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSArPQotCQkJKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSkgPj4gcHJpbykgKyAxOwotCQlpZiAoem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSA+PSBucl9wYWdlcyB8fCBwYXNzID4gMykgewotCQkJem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSA9IDA7Ci0JCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLAotCQkJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSkpOwotCQkJcmV0ICs9IHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjKTsKLQkJCWlmIChyZXQgPj0gbnJfcGFnZXMpCi0JCQkJcmV0dXJuIHJldDsKKwkJCXpvbmUtPmxydVtsXS5ucl9zY2FuICs9CisJCQkJKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGwpCisJCQkJCQkJCT4+IHByaW8pICsgMTsKKwkJCWlmICh6b25lLT5scnVbbF0ubnJfc2NhbiA+PSBucl9wYWdlcyB8fCBwYXNzID4gMykgeworCQkJCXpvbmUtPmxydVtsXS5ucl9zY2FuID0gMDsKKwkJCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLAorCQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwKKwkJCQkJCQlOUl9MUlVfQkFTRSArIGwpKTsKKwkJCQlyZXQgKz0gc2hyaW5rX2xpc3QobCwgbnJfdG9fc2Nhbiwgem9uZSwKKwkJCQkJCQkJc2MsIHByaW8pOworCQkJCWlmIChyZXQgPj0gbnJfcGFnZXMpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCX0KIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfcGFnZXModm9pZCkKLXsKLQlyZXR1cm4gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFKSArIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKTsKLX0KLQogLyoKICAqIFRyeSB0byBmcmVlIGBucl9wYWdlcycgb2YgbWVtb3J5LCBzeXN0ZW0td2lkZSwgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mCiAgKiBmcmVlZCBwYWdlcy4KQEAgLTE4NDAsNyArMjA1Miw3IEBACiAKIAljdXJyZW50LT5yZWNsYWltX3N0YXRlID0gJnJlY2xhaW1fc3RhdGU7CiAKLQlscnVfcGFnZXMgPSBjb3VudF9scnVfcGFnZXMoKTsKKwlscnVfcGFnZXMgPSBnbG9iYWxfbHJ1X3BhZ2VzKCk7CiAJbnJfc2xhYiA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpOwogCS8qIElmIHNsYWIgY2FjaGVzIGFyZSBodWdlLCBpdCdzIGJldHRlciB0byBoaXQgdGhlbSBmaXJzdCAqLwogCXdoaWxlIChucl9zbGFiID49IGxydV9wYWdlcykgewpAQCAtMTg4Myw3ICsyMDk1LDcgQEAKIAogCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CiAJCQlzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBzYy5nZnBfbWFzaywKLQkJCQkJY291bnRfbHJ1X3BhZ2VzKCkpOworCQkJCQlnbG9iYWxfbHJ1X3BhZ2VzKCkpOwogCQkJcmV0ICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7CiAJCQlpZiAocmV0ID49IG5yX3BhZ2VzKQogCQkJCWdvdG8gb3V0OwpAQCAtMTkwMCw3ICsyMTEyLDcgQEAKIAlpZiAoIXJldCkgewogCQlkbyB7CiAJCQlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKLQkJCXNocmlua19zbGFiKG5yX3BhZ2VzLCBzYy5nZnBfbWFzaywgY291bnRfbHJ1X3BhZ2VzKCkpOworCQkJc2hyaW5rX3NsYWIobnJfcGFnZXMsIHNjLmdmcF9tYXNrLCBnbG9iYWxfbHJ1X3BhZ2VzKCkpOwogCQkJcmV0ICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7CiAJCX0gd2hpbGUgKHJldCA8IG5yX3BhZ2VzICYmIHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPiAwKTsKIAl9CkBAIC0yMTI4LDMgKzIzNDAsMjg1IEBACiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoKKyAqIHBhZ2VfZXZpY3RhYmxlIC0gdGVzdCB3aGV0aGVyIGEgcGFnZSBpcyBldmljdGFibGUKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB0ZXN0CisgKiBAdm1hOiB0aGUgVk1BIGluIHdoaWNoIHRoZSBwYWdlIGlzIG9yIHdpbGwgYmUgbWFwcGVkLCBtYXkgYmUgTlVMTAorICoKKyAqIFRlc3Qgd2hldGhlciBwYWdlIGlzIGV2aWN0YWJsZS0taS5lLiwgc2hvdWxkIGJlIHBsYWNlZCBvbiBhY3RpdmUvaW5hY3RpdmUKKyAqIGxpc3RzIHZzIHVuZXZpY3RhYmxlIGxpc3QuICBUaGUgdm1hIGFyZ3VtZW50IGlzICFOVUxMIHdoZW4gY2FsbGVkIGZyb20gdGhlCisgKiBmYXVsdCBwYXRoIHRvIGRldGVybWluZSBob3cgdG8gaW5zdGFudGF0ZSBhIG5ldyBwYWdlLgorICoKKyAqIFJlYXNvbnMgcGFnZSBtaWdodCBub3QgYmUgZXZpY3RhYmxlOgorICogKDEpIHBhZ2UncyBtYXBwaW5nIG1hcmtlZCB1bmV2aWN0YWJsZQorICogKDIpIHBhZ2UgaXMgcGFydCBvZiBhbiBtbG9ja2VkIFZNQQorICoKKyAqLworaW50IHBhZ2VfZXZpY3RhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKworCWlmIChtYXBwaW5nX3VuZXZpY3RhYmxlKHBhZ2VfbWFwcGluZyhwYWdlKSkpCisJCXJldHVybiAwOworCisJaWYgKFBhZ2VNbG9ja2VkKHBhZ2UpIHx8ICh2bWEgJiYgaXNfbWxvY2tlZF92bWEodm1hLCBwYWdlKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFnZV9wYXRoKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWNoYXIgYnVmWzI1Nl07CisJaWYgKHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkgeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwkJcGdvZmZfdCBwZ29mZiA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gUEFHRV9TSElGVCk7CisKKwkJc3Bpbl9sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJCWRlbnRyeSA9IGRfZmluZF9hbGlhcyhtYXBwaW5nLT5ob3N0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmVzY3VlZDogJXMgJWx1XG4iLAorCQkgICAgICAgZGVudHJ5X3BhdGgoZGVudHJ5LCBidWYsIDI1NiksIHBnb2ZmKTsKKwkJc3Bpbl91bmxvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKKwl9IGVsc2UgeworI2lmIGRlZmluZWQoQ09ORklHX01NX09XTkVSKSAmJiBkZWZpbmVkKENPTkZJR19NTVUpCisJCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCisJCWFub25fdm1hID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOworCQlpZiAoIWFub25fdm1hKQorCQkJcmV0dXJuOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gInJlc2N1ZWQ6IGFub24gJXNcbiIsCisJCQkgICAgICAgdm1hLT52bV9tbS0+b3duZXItPmNvbW0pOworCQkJYnJlYWs7CisJCX0KKwkJcGFnZV91bmxvY2tfYW5vbl92bWEoYW5vbl92bWEpOworI2VuZGlmCisJfQorfQorCisKKy8qKgorICogY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9wYWdlIC0gY2hlY2sgcGFnZSBmb3IgZXZpY3RhYmlsaXR5IGFuZCBtb3ZlIHRvIGFwcHJvcHJpYXRlIHpvbmUgbHJ1IGxpc3QKKyAqIEBwYWdlOiBwYWdlIHRvIGNoZWNrIGV2aWN0YWJpbGl0eSBhbmQgbW92ZSB0byBhcHByb3ByaWF0ZSBscnUgbGlzdAorICogQHpvbmU6IHpvbmUgcGFnZSBpcyBpbgorICoKKyAqIENoZWNrcyBhIHBhZ2UgZm9yIGV2aWN0YWJpbGl0eSBhbmQgbW92ZXMgdGhlIHBhZ2UgdG8gdGhlIGFwcHJvcHJpYXRlCisgKiB6b25lIGxydSBsaXN0LgorICoKKyAqIFJlc3RyaWN0aW9uczogem9uZS0+bHJ1X2xvY2sgbXVzdCBiZSBoZWxkLCBwYWdlIG11c3QgYmUgb24gTFJVIGFuZCBtdXN0CisgKiBoYXZlIFBhZ2VVbmV2aWN0YWJsZSBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpvbmUgKnpvbmUpCit7CisJVk1fQlVHX09OKFBhZ2VBY3RpdmUocGFnZSkpOworCityZXRyeToKKwlDbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpIHsKKwkJZW51bSBscnVfbGlzdCBsID0gTFJVX0lOQUNUSVZFX0FOT04gKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisKKwkJc2hvd19wYWdlX3BhdGgocGFnZSk7CisKKwkJX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9VTkVWSUNUQUJMRSk7CisJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xdLmxpc3QpOworCQlfX2luY196b25lX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04gKyBsKTsKKwkJX19jb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR1JFU0NVRUQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIHJvdGF0ZSB1bmV2aWN0YWJsZSBsaXN0CisJCSAqLworCQlTZXRQYWdlVW5ldmljdGFibGUocGFnZSk7CisJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W0xSVV9VTkVWSUNUQUJMRV0ubGlzdCk7CisJCWlmIChwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkKKwkJCWdvdG8gcmV0cnk7CisJfQorfQorCisvKioKKyAqIHNjYW5fbWFwcGluZ191bmV2aWN0YWJsZV9wYWdlcyAtIHNjYW4gYW4gYWRkcmVzcyBzcGFjZSBmb3IgZXZpY3RhYmxlIHBhZ2VzCisgKiBAbWFwcGluZzogc3RydWN0IGFkZHJlc3Nfc3BhY2UgdG8gc2NhbiBmb3IgZXZpY3RhYmxlIHBhZ2VzCisgKgorICogU2NhbiBhbGwgcGFnZXMgaW4gbWFwcGluZy4gIENoZWNrIHVuZXZpY3RhYmxlIHBhZ2VzIGZvcgorICogZXZpY3RhYmlsaXR5IGFuZCBtb3ZlIHRoZW0gdG8gdGhlIGFwcHJvcHJpYXRlIHpvbmUgbHJ1IGxpc3QuCisgKi8KK3ZvaWQgc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCXBnb2ZmX3QgbmV4dCA9IDA7CisJcGdvZmZfdCBlbmQgICA9IChpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+CisJCQkgUEFHRV9DQUNIRV9TSElGVDsKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCisJaWYgKG1hcHBpbmctPm5ycGFnZXMgPT0gMCkKKwkJcmV0dXJuOworCisJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKKwl3aGlsZSAobmV4dCA8IGVuZCAmJgorCQlwYWdldmVjX2xvb2t1cCgmcHZlYywgbWFwcGluZywgbmV4dCwgUEFHRVZFQ19TSVpFKSkgeworCQlpbnQgaTsKKwkJaW50IHBnX3NjYW5uZWQgPSAwOworCisJCXpvbmUgPSBOVUxMOworCisJCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KCZwdmVjKTsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07CisJCQlwZ29mZl90IHBhZ2VfaW5kZXggPSBwYWdlLT5pbmRleDsKKwkJCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKworCQkJcGdfc2Nhbm5lZCsrOworCQkJaWYgKHBhZ2VfaW5kZXggPiBuZXh0KQorCQkJCW5leHQgPSBwYWdlX2luZGV4OworCQkJbmV4dCsrOworCisJCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgeworCQkJCWlmICh6b25lKQorCQkJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCQl6b25lID0gcGFnZXpvbmU7CisJCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJfQorCisJCQlpZiAoUGFnZUxSVShwYWdlKSAmJiBQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCQkJY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9wYWdlKHBhZ2UsIHpvbmUpOworCQl9CisJCWlmICh6b25lKQorCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisKKwkJY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHU0NBTk5FRCwgcGdfc2Nhbm5lZCk7CisJfQorCit9CisKKy8qKgorICogc2Nhbl96b25lX3VuZXZpY3RhYmxlX3BhZ2VzIC0gY2hlY2sgdW5ldmljdGFibGUgbGlzdCBmb3IgZXZpY3RhYmxlIHBhZ2VzCisgKiBAem9uZSAtIHpvbmUgb2Ygd2hpY2ggdG8gc2NhbiB0aGUgdW5ldmljdGFibGUgbGlzdAorICoKKyAqIFNjYW4gQHpvbmUncyB1bmV2aWN0YWJsZSBMUlUgbGlzdHMgdG8gY2hlY2sgZm9yIHBhZ2VzIHRoYXQgaGF2ZSBiZWNvbWUKKyAqIGV2aWN0YWJsZS4gIE1vdmUgdGhvc2UgdGhhdCBoYXZlIHRvIEB6b25lJ3MgaW5hY3RpdmUgbGlzdCB3aGVyZSB0aGV5CisgKiBiZWNvbWUgY2FuZGlkYXRlcyBmb3IgcmVjbGFpbSwgdW5sZXNzIHNocmlua19pbmFjdGl2ZV96b25lKCkgZGVjaWRlcworICogdG8gcmVhY3RpdmF0ZSB0aGVtLiAgUGFnZXMgdGhhdCBhcmUgc3RpbGwgdW5ldmljdGFibGUgYXJlIHJvdGF0ZWQKKyAqIGJhY2sgb250byBAem9uZSdzIHVuZXZpY3RhYmxlIGxpc3QuCisgKi8KKyNkZWZpbmUgU0NBTl9VTkVWSUNUQUJMRV9CQVRDSF9TSVpFIDE2VUwgLyogYXJiaXRyYXJ5IGxvY2sgaG9sZCBiYXRjaCBzaXplICovCit2b2lkIHNjYW5fem9uZV91bmV2aWN0YWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsX3VuZXZpY3RhYmxlID0gJnpvbmUtPmxydVtMUlVfVU5FVklDVEFCTEVdLmxpc3Q7CisJdW5zaWduZWQgbG9uZyBzY2FuOworCXVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9VTkVWSUNUQUJMRSk7CisKKwl3aGlsZSAobnJfdG9fc2NhbiA+IDApIHsKKwkJdW5zaWduZWQgbG9uZyBiYXRjaF9zaXplID0gbWluKG5yX3RvX3NjYW4sCisJCQkJCQlTQ0FOX1VORVZJQ1RBQkxFX0JBVENIX1NJWkUpOworCisJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJZm9yIChzY2FuID0gMDsgIHNjYW4gPCBiYXRjaF9zaXplOyBzY2FuKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gbHJ1X3RvX3BhZ2UobF91bmV2aWN0YWJsZSk7CisKKwkJCWlmICghdHJ5bG9ja19wYWdlKHBhZ2UpKQorCQkJCWNvbnRpbnVlOworCisJCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCBsX3VuZXZpY3RhYmxlLCBmbGFncyk7CisKKwkJCWlmIChsaWtlbHkoUGFnZUxSVShwYWdlKSAmJiBQYWdlVW5ldmljdGFibGUocGFnZSkpKQorCQkJCWNoZWNrX21vdmVfdW5ldmljdGFibGVfcGFnZShwYWdlLCB6b25lKTsKKworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisKKwkJbnJfdG9fc2NhbiAtPSBiYXRjaF9zaXplOworCX0KK30KKworCisvKioKKyAqIHNjYW5fYWxsX3pvbmVzX3VuZXZpY3RhYmxlX3BhZ2VzIC0gc2NhbiBhbGwgdW5ldmljdGFibGUgbGlzdHMgZm9yIGV2aWN0YWJsZSBwYWdlcworICoKKyAqIEEgcmVhbGx5IGJpZyBoYW1tZXI6ICBzY2FuIGFsbCB6b25lcycgdW5ldmljdGFibGUgTFJVIGxpc3RzIHRvIGNoZWNrIGZvcgorICogcGFnZXMgdGhhdCBoYXZlIGJlY29tZSBldmljdGFibGUuICBNb3ZlIHRob3NlIGJhY2sgdG8gdGhlIHpvbmVzJworICogaW5hY3RpdmUgbGlzdCB3aGVyZSB0aGV5IGJlY29tZSBjYW5kaWRhdGVzIGZvciByZWNsYWltLgorICogVGhpcyBvY2N1cnMgd2hlbiwgZS5nLiwgd2UgaGF2ZSB1bnN3YXBwYWJsZSBwYWdlcyBvbiB0aGUgdW5ldmljdGFibGUgbGlzdHMsCisgKiBhbmQgd2UgYWRkIHN3YXAgdG8gdGhlIHN5c3RlbS4gIEFzIHN1Y2gsIGl0IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgYSB0YXNrCisgKiB0aGF0IGhhcyBwb3NzaWJseS9wcm9iYWJseSBtYWRlIHNvbWUgcHJldmlvdXNseSB1bmV2aWN0YWJsZSBwYWdlcworICogZXZpY3RhYmxlLgorICovCit2b2lkIHNjYW5fYWxsX3pvbmVzX3VuZXZpY3RhYmxlX3BhZ2VzKHZvaWQpCit7CisJc3RydWN0IHpvbmUgKnpvbmU7CisKKwlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwkJc2Nhbl96b25lX3VuZXZpY3RhYmxlX3BhZ2VzKHpvbmUpOworCX0KK30KKworLyoKKyAqIHNjYW5fdW5ldmljdGFibGVfcGFnZXMgW3ZtXSBzeXNjdGwgaGFuZGxlci4gIE9uIGRlbWFuZCByZS1zY2FuIG9mCisgKiBhbGwgbm9kZXMnIHVuZXZpY3RhYmxlIGxpc3RzIGZvciBldmljdGFibGUgcGFnZXMKKyAqLwordW5zaWduZWQgbG9uZyBzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzOworCitpbnQgc2Nhbl91bmV2aWN0YWJsZV9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgIHNpemVfdCAqbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCit7CisJcHJvY19kb3Vsb25ndmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGZpbGUsIGJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKKworCWlmICh3cml0ZSAmJiAqKHVuc2lnbmVkIGxvbmcgKil0YWJsZS0+ZGF0YSkKKwkJc2Nhbl9hbGxfem9uZXNfdW5ldmljdGFibGVfcGFnZXMoKTsKKworCXNjYW5fdW5ldmljdGFibGVfcGFnZXMgPSAwOworCXJldHVybiAwOworfQorCisvKgorICogcGVyIG5vZGUgJ3NjYW5fdW5ldmljdGFibGVfcGFnZXMnIGF0dHJpYnV0ZS4gIE9uIGRlbWFuZCByZS1zY2FuIG9mCisgKiBhIHNwZWNpZmllZCBub2RlJ3MgcGVyIHpvbmUgdW5ldmljdGFibGUgbGlzdHMgZm9yIGV2aWN0YWJsZSBwYWdlcy4KKyAqLworCitzdGF0aWMgc3NpemVfdCByZWFkX3NjYW5fdW5ldmljdGFibGVfbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsJLyogYWx3YXlzIHplcm87IHNob3VsZCBmaXQuLi4gKi8KK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfc2Nhbl91bmV2aWN0YWJsZV9ub2RlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgem9uZSAqbm9kZV96b25lcyA9IE5PREVfREFUQShkZXYtPmlkKS0+bm9kZV96b25lczsKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwl1bnNpZ25lZCBsb25nIHJlczsKKwl1bnNpZ25lZCBsb25nIHJlcSA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZyZXMpOworCisJaWYgKCFyZXEpCisJCXJldHVybiAxOwkvKiB6ZXJvIGlzIG5vLW9wICovCisKKwlmb3IgKHpvbmUgPSBub2RlX3pvbmVzOyB6b25lIC0gbm9kZV96b25lcyA8IE1BWF9OUl9aT05FUzsgKyt6b25lKSB7CisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCisJCQljb250aW51ZTsKKwkJc2Nhbl96b25lX3VuZXZpY3RhYmxlX3BhZ2VzKHpvbmUpOworCX0KKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgU1lTREVWX0FUVFIoc2Nhbl91bmV2aWN0YWJsZV9wYWdlcywgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlyZWFkX3NjYW5fdW5ldmljdGFibGVfbm9kZSwKKwkJCXdyaXRlX3NjYW5fdW5ldmljdGFibGVfbm9kZSk7CisKK2ludCBzY2FuX3VuZXZpY3RhYmxlX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCit7CisJcmV0dXJuIHN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9zY2FuX3VuZXZpY3RhYmxlX3BhZ2VzKTsKK30KKwordm9pZCBzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkKK3sKKwlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCBkNzgyNmFmLi5jM2NjZmRhIDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYworKysgYi9tbS92bXN0YXQuYwpAQCAtOCw3ICs4LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwKICAqCQlDaHJpc3RvcGggTGFtZXRlciA8Y2hyaXN0b3BoQGxhbWV0ZXIuY29tPgogICovCi0KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zODQsNyArMzg0LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiBzdGF0aWMgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdID0gewpAQCAtNTgxLDIwICs1ODEsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZyYWdtZW50YXRpb25fb3AgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZyYWdtZW50YXRpb25fb3AgPSB7CiAJLnN0YXJ0CT0gZnJhZ19zdGFydCwKIAkubmV4dAk9IGZyYWdfbmV4dCwKIAkuc3RvcAk9IGZyYWdfc3RvcCwKIAkuc2hvdwk9IGZyYWdfc2hvdywKIH07CiAKLWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdldHlwZWluZm9fb3AgPSB7CitzdGF0aWMgaW50IGZyYWdtZW50YXRpb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmZyYWdtZW50YXRpb25fb3ApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmcmFnbWVudGF0aW9uX2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBmcmFnbWVudGF0aW9uX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZXR5cGVpbmZvX29wID0gewogCS5zdGFydAk9IGZyYWdfc3RhcnQsCiAJLm5leHQJPSBmcmFnX25leHQsCiAJLnN0b3AJPSBmcmFnX3N0b3AsCiAJLnNob3cJPSBwYWdldHlwZWluZm9fc2hvdywKIH07CiAKK3N0YXRpYyBpbnQgcGFnZXR5cGVpbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwYWdldHlwZWluZm9fb3ApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdldHlwZWluZm9fZmlsZV9vcHMgPSB7CisJLm9wZW4JCT0gcGFnZXR5cGVpbmZvX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKICNpZmRlZiBDT05GSUdfWk9ORV9ETUEKICNkZWZpbmUgVEVYVF9GT1JfRE1BKHh4KSB4eCAiX2RtYSIsCiAjZWxzZQpAQCAtNjE5LDggKzY0MywxNCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0gewogCS8qIFpvbmVkIFZNIGNvdW50ZXJzICovCiAJIm5yX2ZyZWVfcGFnZXMiLAotCSJucl9pbmFjdGl2ZSIsCi0JIm5yX2FjdGl2ZSIsCisJIm5yX2luYWN0aXZlX2Fub24iLAorCSJucl9hY3RpdmVfYW5vbiIsCisJIm5yX2luYWN0aXZlX2ZpbGUiLAorCSJucl9hY3RpdmVfZmlsZSIsCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCSJucl91bmV2aWN0YWJsZSIsCisJIm5yX21sb2NrIiwKKyNlbmRpZgogCSJucl9hbm9uX3BhZ2VzIiwKIAkibnJfbWFwcGVkIiwKIAkibnJfZmlsZV9wYWdlcyIsCkBAIC02NzUsNiArNzA1LDE2IEBACiAJImh0bGJfYnVkZHlfYWxsb2Nfc3VjY2VzcyIsCiAJImh0bGJfYnVkZHlfYWxsb2NfZmFpbCIsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJInVuZXZpY3RhYmxlX3Bnc19jdWxsZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3Nfc2Nhbm5lZCIsCisJInVuZXZpY3RhYmxlX3Bnc19yZXNjdWVkIiwKKwkidW5ldmljdGFibGVfcGdzX21sb2NrZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3NfbXVubG9ja2VkIiwKKwkidW5ldmljdGFibGVfcGdzX2NsZWFyZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3Nfc3RyYW5kZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3NfbWxvY2tmcmVlZCIsCisjZW5kaWYKICNlbmRpZgogfTsKIApAQCAtNjg4LDcgKzcyOCw3IEBACiAJCSAgICJcbiAgICAgICAgbWluICAgICAgJWx1IgogCQkgICAiXG4gICAgICAgIGxvdyAgICAgICVsdSIKIAkJICAgIlxuICAgICAgICBoaWdoICAgICAlbHUiCi0JCSAgICJcbiAgICAgICAgc2Nhbm5lZCAgJWx1IChhOiAlbHUgaTogJWx1KSIKKwkJICAgIlxuICAgICAgICBzY2FubmVkICAlbHUgKGFhOiAlbHUgaWE6ICVsdSBhZjogJWx1IGlmOiAlbHUpIgogCQkgICAiXG4gICAgICAgIHNwYW5uZWQgICVsdSIKIAkJICAgIlxuICAgICAgICBwcmVzZW50ICAlbHUiLAogCQkgICB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyksCkBAIC02OTYsNyArNzM2LDEwIEBACiAJCSAgIHpvbmUtPnBhZ2VzX2xvdywKIAkJICAgem9uZS0+cGFnZXNfaGlnaCwKIAkJICAgem9uZS0+cGFnZXNfc2Nhbm5lZCwKLQkJICAgem9uZS0+bnJfc2Nhbl9hY3RpdmUsIHpvbmUtPm5yX3NjYW5faW5hY3RpdmUsCisJCSAgIHpvbmUtPmxydVtMUlVfQUNUSVZFX0FOT05dLm5yX3NjYW4sCisJCSAgIHpvbmUtPmxydVtMUlVfSU5BQ1RJVkVfQU5PTl0ubnJfc2NhbiwKKwkJICAgem9uZS0+bHJ1W0xSVV9BQ1RJVkVfRklMRV0ubnJfc2NhbiwKKwkJICAgem9uZS0+bHJ1W0xSVV9JTkFDVElWRV9GSUxFXS5ucl9zY2FuLAogCQkgICB6b25lLT5zcGFubmVkX3BhZ2VzLAogCQkgICB6b25lLT5wcmVzZW50X3BhZ2VzKTsKIApAQCAtNzMzLDEwICs3NzYsMTIgQEAKIAlzZXFfcHJpbnRmKG0sCiAJCSAgICJcbiAgYWxsX3VucmVjbGFpbWFibGU6ICV1IgogCQkgICAiXG4gIHByZXZfcHJpb3JpdHk6ICAgICAlaSIKLQkJICAgIlxuICBzdGFydF9wZm46ICAgICAgICAgJWx1IiwKKwkJICAgIlxuICBzdGFydF9wZm46ICAgICAgICAgJWx1IgorCQkgICAiXG4gIGluYWN0aXZlX3JhdGlvOiAgICAldSIsCiAJCQkgICB6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpLAogCQkgICB6b25lLT5wcmV2X3ByaW9yaXR5LAotCQkgICB6b25lLT56b25lX3N0YXJ0X3Bmbik7CisJCSAgIHpvbmUtPnpvbmVfc3RhcnRfcGZuLAorCQkgICB6b25lLT5pbmFjdGl2ZV9yYXRpbyk7CiAJc2VxX3B1dGMobSwgJ1xuJyk7CiB9CiAKQEAgLTc1MCw3ICs3OTUsNyBAQAogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgem9uZWluZm9fb3AgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHpvbmVpbmZvX29wID0gewogCS5zdGFydAk9IGZyYWdfc3RhcnQsIC8qIGl0ZXJhdGUgb3ZlciBhbGwgem9uZXMuIFRoZSBzYW1lIGFzIGluCiAJCQkgICAgICAgKiBmcmFnbWVudGF0aW9uLiAqLwogCS5uZXh0CT0gZnJhZ19uZXh0LApAQCAtNzU4LDYgKzgwMywxOCBAQAogCS5zaG93CT0gem9uZWluZm9fc2hvdywKIH07CiAKK3N0YXRpYyBpbnQgem9uZWluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnpvbmVpbmZvX29wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY196b25laW5mb19maWxlX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gem9uZWluZm9fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKwogc3RhdGljIHZvaWQgKnZtc3RhdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewogCXVuc2lnbmVkIGxvbmcgKnY7CkBAIC04MTMsMTMgKzg3MCwyNCBAQAogCW0tPnByaXZhdGUgPSBOVUxMOwogfQogCi1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdm1zdGF0X29wID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB2bXN0YXRfb3AgPSB7CiAJLnN0YXJ0CT0gdm1zdGF0X3N0YXJ0LAogCS5uZXh0CT0gdm1zdGF0X25leHQsCiAJLnN0b3AJPSB2bXN0YXRfc3RvcCwKIAkuc2hvdwk9IHZtc3RhdF9zaG93LAogfTsKIAorc3RhdGljIGludCB2bXN0YXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnZtc3RhdF9vcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfdm1zdGF0X2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSB2bXN0YXRfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtODc3LDkgKzk0NSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgdm1zdGF0X25vdGlmaWVyID0KIAl7ICZ2bXN0YXRfY3B1dXBfY2FsbGJhY2ssIE5VTEwsIDAgfTsKKyNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF92bXN0YXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfU01QCiAJaW50IGNwdTsKIAogCXJlZnJlc2hfem9uZV9zdGF0X3RocmVzaG9sZHMoKTsKQEAgLTg4Nyw3ICs5NTcsMTMgQEAKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlzdGFydF9jcHVfdGltZXIoY3B1KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcHJvY19jcmVhdGUoImJ1ZGR5aW5mbyIsIFNfSVJVR08sIE5VTEwsICZmcmFnbWVudGF0aW9uX2ZpbGVfb3BlcmF0aW9ucyk7CisJcHJvY19jcmVhdGUoInBhZ2V0eXBlaW5mbyIsIFNfSVJVR08sIE5VTEwsICZwYWdldHlwZWluZm9fZmlsZV9vcHMpOworCXByb2NfY3JlYXRlKCJ2bXN0YXQiLCBTX0lSVUdPLCBOVUxMLCAmcHJvY192bXN0YXRfZmlsZV9vcGVyYXRpb25zKTsKKwlwcm9jX2NyZWF0ZSgiem9uZWluZm8iLCBTX0lSVUdPLCBOVUxMLCAmcHJvY196b25laW5mb19maWxlX29wZXJhdGlvbnMpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdChzZXR1cF92bXN0YXQpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL25ldC85cC9LY29uZmlnIGIvbmV0LzlwL0tjb25maWcKaW5kZXggZmYzNGM1YS4uYzQyYzBjNCAxMDA2NDQKLS0tIGEvbmV0LzlwL0tjb25maWcKKysrIGIvbmV0LzlwL0tjb25maWcKQEAgLTIwLDYgKzIwLDEyIEBACiAJICBUaGlzIGJ1aWxkcyBzdXBwb3J0IGZvciBhIHRyYW5zcG9ydHMgYmV0d2VlbgogCSAgZ3Vlc3QgcGFydGl0aW9ucyBhbmQgYSBob3N0IHBhcnRpdGlvbi4KIAorY29uZmlnIE5FVF85UF9SRE1BCisJZGVwZW5kcyBvbiBORVRfOVAgJiYgSU5GSU5JQkFORCAmJiBFWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSAiOVAgUkRNQSBUcmFuc3BvcnQgKEV4cGVyaW1lbnRhbCkiCisJaGVscAorCSAgVGhpcyBidWlsZHMgc3VwcG9ydCBmb3IgYSBSRE1BIHRyYW5zcG9ydC4KKwogY29uZmlnIE5FVF85UF9ERUJVRwogCWJvb2wgIkRlYnVnIGluZm9ybWF0aW9uIgogCWRlcGVuZHMgb24gTkVUXzlQCmRpZmYgLS1naXQgYS9uZXQvOXAvTWFrZWZpbGUgYi9uZXQvOXAvTWFrZWZpbGUKaW5kZXggNTE5MjE5NC4uMTk4YTY0MCAxMDA2NDQKLS0tIGEvbmV0LzlwL01ha2VmaWxlCisrKyBiL25ldC85cC9NYWtlZmlsZQpAQCAtMSwxNCArMSwxNyBAQAogb2JqLSQoQ09ORklHX05FVF85UCkgOj0gOXBuZXQubwogb2JqLSQoQ09ORklHX05FVF85UF9WSVJUSU8pICs9IDlwbmV0X3ZpcnRpby5vCitvYmotJChDT05GSUdfTkVUXzlQX1JETUEpICs9IDlwbmV0X3JkbWEubwogCiA5cG5ldC1vYmpzIDo9IFwKIAltb2QubyBcCiAJY2xpZW50Lm8gXAotCWNvbnYubyBcCiAJZXJyb3IubyBcCi0JZmNwcmludC5vIFwKIAl1dGlsLm8gXAorCXByb3RvY29sLm8gXAogCXRyYW5zX2ZkLm8gXAogCiA5cG5ldF92aXJ0aW8tb2JqcyA6PSBcCiAJdHJhbnNfdmlydGlvLm8gXAorCis5cG5ldF9yZG1hLW9ianMgOj0gXAorCXRyYW5zX3JkbWEubyBcCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggZTA1M2UwNi4uNjc3MTdmNiAxMDA2NDQKLS0tIGEvbmV0LzlwL2NsaWVudC5jCisrKyBiL25ldC85cC9jbGllbnQuYwpAQCAtMzMsMTIgKzMzLDkgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KLQotc3RhdGljIHN0cnVjdCBwOV9maWQgKnA5X2ZpZF9jcmVhdGUoc3RydWN0IHA5X2NsaWVudCAqY2xudCk7Ci1zdGF0aWMgdm9pZCBwOV9maWRfZGVzdHJveShzdHJ1Y3QgcDlfZmlkICpmaWQpOwotc3RhdGljIHN0cnVjdCBwOV9zdGF0ICpwOV9jbG9uZV9zdGF0KHN0cnVjdCBwOV9zdGF0ICpzdCwgaW50IGRvdHUpOworI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KKyNpbmNsdWRlICJwcm90b2NvbC5oIgogCiAvKgogICAqIENsaWVudCBPcHRpb24gUGFyc2luZyAoY29kZSBpbnNwaXJlZCBieSBORlMgY29kZSkKQEAgLTU5LDYgKzU2LDkgQEAKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCitzdGF0aWMgc3RydWN0IHA5X3JlcV90ICoKK3A5X2NsaWVudF9ycGMoc3RydWN0IHA5X2NsaWVudCAqYywgaW50OF90IHR5cGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKwogLyoqCiAgKiB2OWZzX3BhcnNlX29wdGlvbnMgLSBwYXJzZSBtb3VudCBvcHRpb25zIGludG8gc2Vzc2lvbiBzdHJ1Y3R1cmUKICAqIEBvcHRpb25zOiBvcHRpb25zIHN0cmluZyBwYXNzZWQgZnJvbSBtb3VudApAQCAtMTI0LDkyMiArMTI0LDQ5NyBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogcDlfdGFnX2FsbG9jIC0gbG9va3VwL2FsbG9jYXRlIGEgcmVxdWVzdCBieSB0YWcKKyAqIEBjOiBjbGllbnQgc2Vzc2lvbiB0byBsb29rdXAgdGFnIHdpdGhpbgorICogQHRhZzogbnVtZXJpYyBpZCBmb3IgdHJhbnNhY3Rpb24KKyAqCisgKiB0aGlzIGlzIGEgc2ltcGxlIGFycmF5IGxvb2t1cCwgYnV0IHdpbGwgZ3JvdyB0aGUKKyAqIHJlcXVlc3Rfc2xvdHMgYXMgbmVjZXNzYXJ5IHRvIGFjY29tb2RhdGUgdHJhbnNhY3Rpb24KKyAqIGlkcyB3aGljaCBkaWQgbm90IHByZXZpb3VzbHkgaGF2ZSBhIHNsb3QuCisgKgorICogdGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgY2xpZW50IHNwaW5sb2NrIHRvIG1hbmFnZSBsb2NrcywgaXRzCisgKiBwb3NzaWJsZSB3ZSBzaG91bGQgc3dpdGNoIHRvIHNvbWV0aGluZyBlbHNlLCBidXQgSSdkIHJhdGhlcgorICogc3RpY2sgd2l0aCBzb21ldGhpbmcgbG93LW92ZXJoZWFkIGZvciB0aGUgY29tbW9uIGNhc2UuCisgKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcDlfcmVxX3QgKnA5X3RhZ19hbGxvYyhzdHJ1Y3QgcDlfY2xpZW50ICpjLCB1MTYgdGFnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJvdywgY29sOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCisJLyogVGhpcyBsb29rcyB1cCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBieSB0YWcgc28gd2Uga25vdyB3aGljaAorCSAqIGJ1ZmZlciB0byByZWFkIHRoZSBkYXRhIGludG8gKi8KKwl0YWcrKzsKKworCWlmICh0YWcgPj0gYy0+bWF4X3RhZykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+bG9jaywgZmxhZ3MpOworCQkvKiBjaGVjayBhZ2FpbiBzaW5jZSBvcmlnaW5hbCBjaGVjayB3YXMgb3V0c2lkZSBvZiBsb2NrICovCisJCXdoaWxlICh0YWcgPj0gYy0+bWF4X3RhZykgeworCQkJcm93ID0gKHRhZyAvIFA5X1JPV19NQVhUQUcpOworCQkJYy0+cmVxc1tyb3ddID0ga2NhbGxvYyhQOV9ST1dfTUFYVEFHLAorCQkJCQlzaXplb2Yoc3RydWN0IHA5X3JlcV90KSwgR0ZQX0FUT01JQyk7CisKKwkJCWlmICghYy0+cmVxc1tyb3ddKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBncm93IHRhZyBhcnJheVxuIik7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOworCQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQkJfQorCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJCWMtPnJlcXNbcm93XVtjb2xdLnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwkJCQljLT5yZXFzW3Jvd11bY29sXS50YyA9IE5VTEw7CisJCQl9CisJCQljLT5tYXhfdGFnICs9IFA5X1JPV19NQVhUQUc7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOworCX0KKwlyb3cgPSB0YWcgLyBQOV9ST1dfTUFYVEFHOworCWNvbCA9IHRhZyAlIFA5X1JPV19NQVhUQUc7CisKKwlyZXEgPSAmYy0+cmVxc1tyb3ddW2NvbF07CisJaWYgKCFyZXEtPnRjKSB7CisJCXJlcS0+d3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIXJlcS0+d3EpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCX0KKwkJaW5pdF93YWl0cXVldWVfaGVhZChyZXEtPndxKTsKKwkJcmVxLT50YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkrYy0+bXNpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlyZXEtPnJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKStjLT5tc2l6ZSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICgoIXJlcS0+dGMpIHx8ICghcmVxLT5yYykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJa2ZyZWUocmVxLT50Yyk7CisJCQlrZnJlZShyZXEtPnJjKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQl9CisJCXJlcS0+dGMtPnNkYXRhID0gKGNoYXIgKikgcmVxLT50YyArIHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOworCQlyZXEtPnRjLT5jYXBhY2l0eSA9IGMtPm1zaXplOworCQlyZXEtPnJjLT5zZGF0YSA9IChjaGFyICopIHJlcS0+cmMgKyBzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKKwkJcmVxLT5yYy0+Y2FwYWNpdHkgPSBjLT5tc2l6ZTsKKwl9CisKKwlwOXBkdV9yZXNldChyZXEtPnRjKTsKKwlwOXBkdV9yZXNldChyZXEtPnJjKTsKKworCXJlcS0+Zmx1c2hfdGFnID0gMDsKKwlyZXEtPnRjLT50YWcgPSB0YWctMTsKKwlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfQUxMT0M7CisKKwlyZXR1cm4gJmMtPnJlcXNbcm93XVtjb2xdOworfQogCiAvKioKLSAqIHA5X2NsaWVudF9ycGMgLSBzZW5kcyA5UCByZXF1ZXN0IGFuZCB3YWl0cyB1bnRpbCBhIHJlc3BvbnNlIGlzIGF2YWlsYWJsZS4KLSAqICAgICAgVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZC4KLSAqIEBjOiBjbGllbnQgZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEByYzogcG9pbnRlciB3aGVyZSBhIHBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGlzIHN0b3JlZAorICogcDlfdGFnX2xvb2t1cCAtIGxvb2t1cCBhIHJlcXVlc3QgYnkgdGFnCisgKiBAYzogY2xpZW50IHNlc3Npb24gdG8gbG9va3VwIHRhZyB3aXRoaW4KKyAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCisgKgogICovCi1pbnQKLXA5X2NsaWVudF9ycGMoc3RydWN0IHA5X2NsaWVudCAqYywgc3RydWN0IHA5X2ZjYWxsICp0YywKLQlzdHJ1Y3QgcDlfZmNhbGwgKipyYykKKworc3RydWN0IHA5X3JlcV90ICpwOV90YWdfbG9va3VwKHN0cnVjdCBwOV9jbGllbnQgKmMsIHUxNiB0YWcpCiB7Ci0JcmV0dXJuIGMtPnRyYW5zLT5ycGMoYy0+dHJhbnMsIHRjLCByYyk7CisJaW50IHJvdywgY29sOworCisJLyogVGhpcyBsb29rcyB1cCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBieSB0YWcgc28gd2Uga25vdyB3aGljaAorCSAqIGJ1ZmZlciB0byByZWFkIHRoZSBkYXRhIGludG8gKi8KKwl0YWcrKzsKKworCUJVR19PTih0YWcgPj0gYy0+bWF4X3RhZyk7CisKKwlyb3cgPSB0YWcgLyBQOV9ST1dfTUFYVEFHOworCWNvbCA9IHRhZyAlIFA5X1JPV19NQVhUQUc7CisKKwlyZXR1cm4gJmMtPnJlcXNbcm93XVtjb2xdOwogfQorRVhQT1JUX1NZTUJPTChwOV90YWdfbG9va3VwKTsKIAotc3RydWN0IHA5X2NsaWVudCAqcDlfY2xpZW50X2NyZWF0ZShjb25zdCBjaGFyICpkZXZfbmFtZSwgY2hhciAqb3B0aW9ucykKKy8qKgorICogcDlfdGFnX2luaXQgLSBzZXR1cCB0YWdzIHN0cnVjdHVyZSBhbmQgY29udGVudHMKKyAqIEB0YWdzOiB0YWdzIHN0cnVjdHVyZSBmcm9tIHRoZSBjbGllbnQgc3RydWN0CisgKgorICogVGhpcyBpbml0aWFsaXplcyB0aGUgdGFncyBzdHJ1Y3R1cmUgZm9yIGVhY2ggY2xpZW50IGluc3RhbmNlLgorICoKKyAqLworCitzdGF0aWMgaW50IHA5X3RhZ19pbml0KHN0cnVjdCBwOV9jbGllbnQgKmMpCiB7Ci0JaW50IGVyciwgbjsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfc3RyICp2ZXJzaW9uOworCWludCBlcnIgPSAwOwogCi0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbG50KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWNsbnQtPnRyYW5zX21vZCA9IE5VTEw7Ci0JY2xudC0+dHJhbnMgPSBOVUxMOwotCXNwaW5fbG9ja19pbml0KCZjbG50LT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xudC0+ZmlkbGlzdCk7Ci0JY2xudC0+ZmlkcG9vbCA9IHA5X2lkcG9vbF9jcmVhdGUoKTsKLQlpZiAoSVNfRVJSKGNsbnQtPmZpZHBvb2wpKSB7Ci0JCWVyciA9IFBUUl9FUlIoY2xudC0+ZmlkcG9vbCk7Ci0JCWNsbnQtPmZpZHBvb2wgPSBOVUxMOworCWMtPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjLT50YWdwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGMtPnRhZ3Bvb2wpOworCQljLT50YWdwb29sID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwYXJzZV9vcHRzKG9wdGlvbnMsIGNsbnQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOworCXA5X2lkcG9vbF9nZXQoYy0+dGFncG9vbCk7IC8qIHJlc2VydmUgdGFnIDAgKi8KIAotCWlmIChjbG50LT50cmFuc19tb2QgPT0gTlVMTCkgewotCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCSJObyB0cmFuc3BvcnQgZGVmaW5lZCBvciBkZWZhdWx0IHRyYW5zcG9ydFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgdHJhbnMgJXAgbXNpemUgJWQgZG90dSAlZFxuIiwKLQkJY2xudCwgY2xudC0+dHJhbnNfbW9kLCBjbG50LT5tc2l6ZSwgY2xudC0+ZG90dSk7Ci0KLQotCWNsbnQtPnRyYW5zID0gY2xudC0+dHJhbnNfbW9kLT5jcmVhdGUoZGV2X25hbWUsIG9wdGlvbnMsIGNsbnQtPm1zaXplLAotCQkJCQkJCQljbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKGNsbnQtPnRyYW5zKSkgewotCQllcnIgPSBQVFJfRVJSKGNsbnQtPnRyYW5zKTsKLQkJY2xudC0+dHJhbnMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmICgoY2xudC0+bXNpemUrUDlfSU9IRFJTWikgPiBjbG50LT50cmFuc19tb2QtPm1heHNpemUpCi0JCWNsbnQtPm1zaXplID0gY2xudC0+dHJhbnNfbW9kLT5tYXhzaXplLVA5X0lPSERSU1o7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90dmVyc2lvbihjbG50LT5tc2l6ZSwgY2xudC0+ZG90dT8iOVAyMDAwLnUiOiI5UDIwMDAiKTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQotCXZlcnNpb24gPSAmcmMtPnBhcmFtcy5ydmVyc2lvbi52ZXJzaW9uOwotCWlmICh2ZXJzaW9uLT5sZW4gPT0gOCAmJiAhbWVtY21wKHZlcnNpb24tPnN0ciwgIjlQMjAwMC51IiwgOCkpCi0JCWNsbnQtPmRvdHUgPSAxOwotCWVsc2UgaWYgKHZlcnNpb24tPmxlbiA9PSA2ICYmICFtZW1jbXAodmVyc2lvbi0+c3RyLCAiOVAyMDAwIiwgNikpCi0JCWNsbnQtPmRvdHUgPSAwOwotCWVsc2UgewotCQllcnIgPSAtRVJFTU9URUlPOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW4gPSByYy0+cGFyYW1zLnJ2ZXJzaW9uLm1zaXplOwotCWlmIChuIDwgY2xudC0+bXNpemUpCi0JCWNsbnQtPm1zaXplID0gbjsKLQotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIGNsbnQ7Ci0KKwljLT5tYXhfdGFnID0gMDsKIGVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY3JlYXRlKTsKIAotdm9pZCBwOV9jbGllbnRfZGVzdHJveShzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KQorLyoqCisgKiBwOV90YWdfY2xlYW51cCAtIGNsZWFucyB1cCB0YWdzIHN0cnVjdHVyZSBhbmQgcmVjbGFpbXMgcmVzb3VyY2VzCisgKiBAdGFnczogdGFncyBzdHJ1Y3R1cmUgZnJvbSB0aGUgY2xpZW50IHN0cnVjdAorICoKKyAqIFRoaXMgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFncyBzdHJ1Y3R1cmUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHA5X3RhZ19jbGVhbnVwKHN0cnVjdCBwOV9jbGllbnQgKmMpCiB7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkLCAqZmlkcHRyOworCWludCByb3csIGNvbDsKIAotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJjbG50ICVwXG4iLCBjbG50KTsKLQotCWlmIChjbG50LT50cmFucykgewotCQljbG50LT50cmFucy0+Y2xvc2UoY2xudC0+dHJhbnMpOwotCQlrZnJlZShjbG50LT50cmFucyk7Ci0JCWNsbnQtPnRyYW5zID0gTlVMTDsKLQl9Ci0KLQl2OWZzX3B1dF90cmFucyhjbG50LT50cmFuc19tb2QpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpZCwgZmlkcHRyLCAmY2xudC0+ZmlkbGlzdCwgZmxpc3QpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0KLQlpZiAoY2xudC0+ZmlkcG9vbCkKLQkJcDlfaWRwb29sX2Rlc3Ryb3koY2xudC0+ZmlkcG9vbCk7Ci0KLQlrZnJlZShjbG50KTsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2Rlc3Ryb3kpOwotCi12b2lkIHA5X2NsaWVudF9kaXNjb25uZWN0KHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCi17Ci0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXBcbiIsIGNsbnQpOwotCWNsbnQtPnRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kaXNjb25uZWN0KTsKLQotc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X2F0dGFjaChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBzdHJ1Y3QgcDlfZmlkICphZmlkLAotCWNoYXIgKnVuYW1lLCB1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgYWZpZCAlZCB1bmFtZSAlcyBhbmFtZSAlc1xuIiwKLQkJY2xudCwgYWZpZD9hZmlkLT5maWQ6LTEsIHVuYW1lLCBhbmFtZSk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCi0JZmlkID0gcDlfZmlkX2NyZWF0ZShjbG50KTsKLQlpZiAoSVNfRVJSKGZpZCkpIHsKLQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQlmaWQgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXRjID0gcDlfY3JlYXRlX3RhdHRhY2goZmlkLT5maWQsIGFmaWQ/YWZpZC0+ZmlkOlA5X05PRklELCB1bmFtZSwgYW5hbWUsCi0JCW5fdW5hbWUsIGNsbnQtPmRvdHUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yOwotCi0JbWVtbW92ZSgmZmlkLT5xaWQsICZyYy0+cGFyYW1zLnJhdHRhY2gucWlkLCBzaXplb2Yoc3RydWN0IHA5X3FpZCkpOwotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIGZpZDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlpZiAoZmlkKQotCQlwOV9maWRfZGVzdHJveShmaWQpOwotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9hdHRhY2gpOwotCi1zdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfYXV0aChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBjaGFyICp1bmFtZSwKLQl1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgdW5hbWUgJXMgYW5hbWUgJXNcbiIsIGNsbnQsIHVuYW1lLAotCQkJCQkJCQkJYW5hbWUpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQotCWZpZCA9IHA5X2ZpZF9jcmVhdGUoY2xudCk7Ci0JaWYgKElTX0VSUihmaWQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZmlkKTsKLQkJZmlkID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQl0YyA9IHA5X2NyZWF0ZV90YXV0aChmaWQtPmZpZCwgdW5hbWUsIGFuYW1lLCBuX3VuYW1lLCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQotCW1lbW1vdmUoJmZpZC0+cWlkLCAmcmMtPnBhcmFtcy5yYXV0aC5xaWQsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyZXR1cm4gZmlkOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCWlmIChmaWQpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F1dGgpOwotCi1zdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIGludCBud25hbWUsIGNoYXIgKip3bmFtZXMsCi0JaW50IGNsb25lKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBud25hbWUgJWQgd25hbWVbMF0gJXNcbiIsCi0JCW9sZGZpZC0+ZmlkLCBud25hbWUsIHduYW1lcz93bmFtZXNbMF06TlVMTCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBvbGRmaWQtPmNsbnQ7Ci0JaWYgKGNsb25lKSB7Ci0JCWZpZCA9IHA5X2ZpZF9jcmVhdGUoY2xudCk7Ci0JCWlmIChJU19FUlIoZmlkKSkgewotCQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQkJZmlkID0gTlVMTDsKLQkJCWdvdG8gZXJyb3I7CisJLyogY2hlY2sgdG8gaW5zdXJlIGFsbCByZXF1ZXN0cyBhcmUgaWRsZSAqLworCWZvciAocm93ID0gMDsgcm93IDwgKGMtPm1heF90YWcvUDlfUk9XX01BWFRBRyk7IHJvdysrKSB7CisJCWZvciAoY29sID0gMDsgY29sIDwgUDlfUk9XX01BWFRBRzsgY29sKyspIHsKKwkJCWlmIChjLT5yZXFzW3Jvd11bY29sXS5zdGF0dXMgIT0gUkVRX1NUQVRVU19JRExFKSB7CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsCisJCQkJICAiQXR0ZW1wdGluZyB0byBjbGVhbnVwIG5vbi1mcmVlIHRhZyAlZCwlZFxuIiwKKwkJCQkgIHJvdywgY29sKTsKKwkJCQkvKiBUT0RPOiBkZWxheSBleGVjdXRpb24gb2YgY2xlYW51cCAqLworCQkJCXJldHVybjsKKwkJCX0KIAkJfQotCi0JCWZpZC0+dWlkID0gb2xkZmlkLT51aWQ7Ci0JfSBlbHNlCi0JCWZpZCA9IG9sZGZpZDsKLQotCXRjID0gcDlfY3JlYXRlX3R3YWxrKG9sZGZpZC0+ZmlkLCBmaWQtPmZpZCwgbnduYW1lLCB3bmFtZXMpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKKwlpZiAoYy0+dGFncG9vbCkKKwkJcDlfaWRwb29sX2Rlc3Ryb3koYy0+dGFncG9vbCk7CisKKwkvKiBmcmVlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0YWdzICovCisJZm9yIChyb3cgPSAwOyByb3cgPCAoYy0+bWF4X3RhZy9QOV9ST1dfTUFYVEFHKTsgcm93KyspIHsKKwkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0ud3EpOworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0udGMpOworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0ucmMpOworCQl9CisJCWtmcmVlKGMtPnJlcXNbcm93XSk7CisJfQorCWMtPm1heF90YWcgPSAwOworfQorCisvKioKKyAqIHA5X2ZyZWVfcmVxIC0gZnJlZSBhIHJlcXVlc3QgYW5kIGNsZWFuLXVwIGFzIG5lY2Vzc2FyeQorICogYzogY2xpZW50IHN0YXRlCisgKiByOiByZXF1ZXN0IHRvIHJlbGVhc2UKKyAqCisgKi8KKworc3RhdGljIHZvaWQgcDlfZnJlZV9yZXEoc3RydWN0IHA5X2NsaWVudCAqYywgc3RydWN0IHA5X3JlcV90ICpyKQoreworCWludCB0YWcgPSByLT50Yy0+dGFnOworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xudCAlcCByZXEgJXAgdGFnOiAlZFxuIiwgYywgciwgdGFnKTsKKworCXItPnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwlpZiAodGFnICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayh0YWcsIGMtPnRhZ3Bvb2wpKQorCQlwOV9pZHBvb2xfcHV0KHRhZywgYy0+dGFncG9vbCk7CisKKwkvKiBpZiB0aGlzIHdhcyBhIGZsdXNoIHJlcXVlc3Qgd2UgaGF2ZSB0byBmcmVlIHJlc3BvbnNlIGZjYWxsICovCisJaWYgKHItPnJjLT5pZCA9PSBQOV9SRkxVU0gpIHsKKwkJa2ZyZWUoci0+dGMpOworCQlrZnJlZShyLT5yYyk7CisJfQorfQorCisvKioKKyAqIHA5X2NsaWVudF9jYiAtIGNhbGwgYmFjayBmcm9tIHRyYW5zcG9ydCB0byBjbGllbnQKKyAqIGM6IGNsaWVudCBzdGF0ZQorICogcmVxOiByZXF1ZXN0IHJlY2VpdmVkCisgKgorICovCit2b2lkIHA5X2NsaWVudF9jYihzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKK3sKKwlzdHJ1Y3QgcDlfcmVxX3QgKm90aGVyX3JlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICIgdGFnICVkXG4iLCByZXEtPnRjLT50YWcpOworCisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRVJST1IpCisJCXdha2VfdXAocmVxLT53cSk7CisKKwlpZiAocmVxLT5mbHVzaF90YWcpIHsgCQkJLyogZmx1c2ggcmVjZWl2ZSBwYXRoICovCisJCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUkZMVVNIICVkXG4iLCByZXEtPnRjLT50YWcpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+bG9jaywgZmxhZ3MpOworCQlvdGhlcl9yZXEgPSBwOV90YWdfbG9va3VwKGMsIHJlcS0+Zmx1c2hfdGFnKTsKKwkJaWYgKG90aGVyX3JlcS0+c3RhdHVzICE9IFJFUV9TVEFUVVNfRkxTSCkgLyogc3RhbGUgZmx1c2ggKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJZWxzZSB7CisJCQlvdGhlcl9yZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfRkxTSEQ7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT5sb2NrLCBmbGFncyk7CisJCQl3YWtlX3VwKG90aGVyX3JlcS0+d3EpOworCQl9CisJCXA5X2ZyZWVfcmVxKGMsIHJlcSk7CisJfSBlbHNlIHsgCQkJCS8qIG5vcm1hbCByZWNlaXZlIHBhdGggKi8KKwkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJub3JtYWw6IHRhZyAlZFxuIiwgcmVxLT50Yy0+dGFnKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJlcS0+c3RhdHVzICE9IFJFUV9TVEFUVVNfRkxTSEQpCisJCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfUkNWRDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwKHJlcS0+d3EpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIndha2V1cDogJWRcbiIsIHJlcS0+dGMtPnRhZyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY2IpOworCisvKioKKyAqIHA5X3BhcnNlX2hlYWRlciAtIHBhcnNlIGhlYWRlciBhcmd1bWVudHMgb3V0IG9mIGEgcGFja2V0CisgKiBAcGR1OiBwYWNrZXQgdG8gcGFyc2UKKyAqIEBzaXplOiBzaXplIG9mIHBhY2tldAorICogQHR5cGU6IHR5cGUgb2YgcmVxdWVzdAorICogQHRhZzogdGFnIG9mIHBhY2tldAorICogQHJld2luZDogc2V0IGlmIHdlIG5lZWQgdG8gcmV3aW5kIG9mZnNldCBhZnRlcndhcmRzCisgKi8KKworaW50CitwOV9wYXJzZV9oZWFkZXIoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDMyX3QgKnNpemUsIGludDhfdCAqdHlwZSwgaW50MTZfdCAqdGFnLAorCQkJCQkJCQlpbnQgcmV3aW5kKQoreworCWludDhfdCByX3R5cGU7CisJaW50MTZfdCByX3RhZzsKKwlpbnQzMl90IHJfc2l6ZTsKKwlpbnQgb2Zmc2V0ID0gcGR1LT5vZmZzZXQ7CisJaW50IGVycjsKKworCXBkdS0+b2Zmc2V0ID0gMDsKKwlpZiAocGR1LT5zaXplID09IDApCisJCXBkdS0+c2l6ZSA9IDc7CisKKwllcnIgPSBwOXBkdV9yZWFkZihwZHUsIDAsICJkYnciLCAmcl9zaXplLCAmcl90eXBlLCAmcl90YWcpOworCWlmIChlcnIpCisJCWdvdG8gcmV3aW5kX2FuZF9leGl0OworCisJcGR1LT5zaXplID0gcl9zaXplOworCXBkdS0+aWQgPSByX3R5cGU7CisJcGR1LT50YWcgPSByX3RhZzsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgc2l6ZT0lZCB0eXBlOiAlZCB0YWc6ICVkXG4iLCBwZHUtPnNpemUsCisJCQkJCQkJcGR1LT5pZCwgcGR1LT50YWcpOworCisJaWYgKHR5cGUpCisJCSp0eXBlID0gcl90eXBlOworCWlmICh0YWcpCisJCSp0YWcgPSByX3RhZzsKKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSByX3NpemU7CisKKworcmV3aW5kX2FuZF9leGl0OgorCWlmIChyZXdpbmQpCisJCXBkdS0+b2Zmc2V0ID0gb2Zmc2V0OworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X3BhcnNlX2hlYWRlcik7CisKKy8qKgorICogcDlfY2hlY2tfZXJyb3JzIC0gY2hlY2sgOXAgcGFja2V0IGZvciBlcnJvciByZXR1cm4gYW5kIHByb2Nlc3MgaXQKKyAqIEBjOiBjdXJyZW50IGNsaWVudCBpbnN0YW5jZQorICogQHJlcTogcmVxdWVzdCB0byBwYXJzZSBhbmQgY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMKKyAqCisgKiByZXR1cm5zIGVycm9yIGNvZGUgaWYgb25lIGlzIGRpc2NvdmVyZWQsIG90aGVyd2lzZSByZXR1cm5zIDAKKyAqCisgKiB0aGlzIHdpbGwgaGF2ZSB0byBiZSBtb3JlIGNvbXBsaWNhdGVkIGlmIHdlIGhhdmUgbXVsdGlwbGUKKyAqIGVycm9yIHBhY2tldCB0eXBlcworICovCisKK3N0YXRpYyBpbnQgcDlfY2hlY2tfZXJyb3JzKHN0cnVjdCBwOV9jbGllbnQgKmMsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCWludDhfdCB0eXBlOworCWludCBlcnI7CisKKwllcnIgPSBwOV9wYXJzZV9oZWFkZXIocmVxLT5yYywgTlVMTCwgJnR5cGUsIE5VTEwsIDApOwogCWlmIChlcnIpIHsKLQkJaWYgKHJjICYmIHJjLT5pZCA9PSBQOV9SV0FMSykKLQkJCWdvdG8gY2x1bmtfZmlkOwotCQllbHNlCi0JCQlnb3RvIGVycm9yOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY291bGRuJ3QgcGFyc2UgaGVhZGVyICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChyYy0+cGFyYW1zLnJ3YWxrLm53cWlkICE9IG53bmFtZSkgewotCQllcnIgPSAtRU5PRU5UOwotCQlnb3RvIGNsdW5rX2ZpZDsKLQl9CisJaWYgKHR5cGUgPT0gUDlfUkVSUk9SKSB7CisJCWludCBlY29kZTsKKwkJY2hhciAqZW5hbWU7CiAKLQlpZiAobnduYW1lKQotCQltZW1tb3ZlKCZmaWQtPnFpZCwKLQkJCSZyYy0+cGFyYW1zLnJ3YWxrLndxaWRzW3JjLT5wYXJhbXMucndhbGsubndxaWQgLSAxXSwKLQkJCXNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7Ci0JZWxzZQotCQlmaWQtPnFpZCA9IG9sZGZpZC0+cWlkOwotCi0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyZXR1cm4gZmlkOwotCi1jbHVua19maWQ6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyYyA9IE5VTEw7Ci0JdGMgPSBwOV9jcmVhdGVfdGNsdW5rKGZpZC0+ZmlkKTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0KLWVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JaWYgKGZpZCAmJiAoZmlkICE9IG9sZGZpZCkpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0KLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd2Fsayk7Ci0KLWludCBwOV9jbGllbnRfb3BlbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBtb2RlKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG1vZGUgJWRcbiIsIGZpZC0+ZmlkLCBtb2RlKTsKLQllcnIgPSAwOwotCXRjID0gTlVMTDsKLQlyYyA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCWlmIChmaWQtPm1vZGUgIT0gLTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdGMgPSBwOV9jcmVhdGVfdG9wZW4oZmlkLT5maWQsIG1vZGUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWZpZC0+bW9kZSA9IG1vZGU7Ci0JZmlkLT5pb3VuaXQgPSByYy0+cGFyYW1zLnJvcGVuLmlvdW5pdDsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9vcGVuKTsKLQotaW50IHA5X2NsaWVudF9mY3JlYXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sIGludCBtb2RlLAotCQkgICAgIGNoYXIgKmV4dGVuc2lvbikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBuYW1lICVzIHBlcm0gJWQgbW9kZSAlZFxuIiwgZmlkLT5maWQsCi0JCW5hbWUsIHBlcm0sIG1vZGUpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCi0JaWYgKGZpZC0+bW9kZSAhPSAtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90Y3JlYXRlKGZpZC0+ZmlkLCBuYW1lLCBwZXJtLCBtb2RlLCBleHRlbnNpb24sCi0JCQkJCQkJICAgICAgIGNsbnQtPmRvdHUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWZpZC0+bW9kZSA9IG1vZGU7Ci0JZmlkLT5pb3VuaXQgPSByYy0+cGFyYW1zLnJvcGVuLmlvdW5pdDsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9mY3JlYXRlKTsKLQotaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2NsaWVudCAqY2xudDsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKLQllcnIgPSAwOwotCXRjID0gTlVMTDsKLQlyYyA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCXRjID0gcDlfY3JlYXRlX3RjbHVuayhmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JcDlfZmlkX2Rlc3Ryb3koZmlkKTsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9jbHVuayk7Ci0KLWludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCi0JdGMgPSBwOV9jcmVhdGVfdHJlbW92ZShmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JcDlfZmlkX2Rlc3Ryb3koZmlkKTsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZW1vdmUpOwotCi1pbnQgcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpCi17Ci0JaW50IGVyciwgbiwgcnNpemUsIHRvdGFsOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBvZmZzZXQgJWxsdSAlZFxuIiwgZmlkLT5maWQsCi0JCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKLQotCXJzaXplID0gZmlkLT5pb3VuaXQ7Ci0JaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCi0JZG8gewotCQlpZiAoY291bnQgPCByc2l6ZSkKLQkJCXJzaXplID0gY291bnQ7Ci0KLQkJdGMgPSBwOV9jcmVhdGVfdHJlYWQoZmlkLT5maWQsIG9mZnNldCwgcnNpemUpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJbiA9IHJjLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0JCWlmIChuID4gY291bnQpCi0JCQluID0gY291bnQ7Ci0KLQkJbWVtbW92ZShkYXRhLCByYy0+cGFyYW1zLnJyZWFkLmRhdGEsIG4pOwotCQljb3VudCAtPSBuOwotCQlkYXRhICs9IG47Ci0JCW9mZnNldCArPSBuOwotCQl0b3RhbCArPSBuOwotCQlrZnJlZSh0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJa2ZyZWUocmMpOwotCQlyYyA9IE5VTEw7Ci0JfSB3aGlsZSAoY291bnQgPiAwICYmIG4gPT0gcnNpemUpOwotCi0JcmV0dXJuIHRvdGFsOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZWFkKTsKLQotaW50IHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKLXsKLQlpbnQgZXJyLCBuLCByc2l6ZSwgdG90YWw7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JdG90YWwgPSAwOwotCi0JcnNpemUgPSBmaWQtPmlvdW5pdDsKLQlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKLQkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0KLQlkbyB7Ci0JCWlmIChjb3VudCA8IHJzaXplKQotCQkJcnNpemUgPSBjb3VudDsKLQotCQl0YyA9IHA5X2NyZWF0ZV90d3JpdGUoZmlkLT5maWQsIG9mZnNldCwgcnNpemUsIGRhdGEpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJbiA9IHJjLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0JCWNvdW50IC09IG47Ci0JCWRhdGEgKz0gbjsKLQkJb2Zmc2V0ICs9IG47Ci0JCXRvdGFsICs9IG47Ci0JCWtmcmVlKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlrZnJlZShyYyk7Ci0JCXJjID0gTlVMTDsKLQl9IHdoaWxlIChjb3VudCA+IDApOwotCi0JcmV0dXJuIHRvdGFsOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF93cml0ZSk7Ci0KLWludAotcDlfY2xpZW50X3VyZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciBfX3VzZXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKLXsKLQlpbnQgZXJyLCBuLCByc2l6ZSwgdG90YWw7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JdG90YWwgPSAwOwotCi0JcnNpemUgPSBmaWQtPmlvdW5pdDsKLQlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKLQkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0KLQlkbyB7Ci0JCWlmIChjb3VudCA8IHJzaXplKQotCQkJcnNpemUgPSBjb3VudDsKLQotCQl0YyA9IHA5X2NyZWF0ZV90cmVhZChmaWQtPmZpZCwgb2Zmc2V0LCByc2l6ZSk7Ci0JCWlmIChJU19FUlIodGMpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJCXRjID0gTlVMTDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcjsKLQotCQluID0gcmMtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJaWYgKG4gPiBjb3VudCkKLQkJCW4gPSBjb3VudDsKLQotCQllcnIgPSBjb3B5X3RvX3VzZXIoZGF0YSwgcmMtPnBhcmFtcy5ycmVhZC5kYXRhLCBuKTsKKwkJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgYy0+ZG90dSwgInM/ZCIsICZlbmFtZSwgJmVjb2RlKTsKIAkJaWYgKGVycikgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZXJyb3I7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY291bGRuJ3QgcGFyc2UgZXJyb3IlZFxuIiwKKwkJCQkJCQkJCWVycik7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJY291bnQgLT0gbjsKLQkJZGF0YSArPSBuOwotCQlvZmZzZXQgKz0gbjsKLQkJdG90YWwgKz0gbjsKLQkJa2ZyZWUodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWtmcmVlKHJjKTsKLQkJcmMgPSBOVUxMOwotCX0gd2hpbGUgKGNvdW50ID4gMCAmJiBuID09IHJzaXplKTsKKwkJaWYgKGMtPmRvdHUpCisJCQllcnIgPSAtZWNvZGU7CiAKLQlyZXR1cm4gdG90YWw7CisJCWlmICghZXJyKSB7CisJCQllcnIgPSBwOV9lcnJzdHIyZXJybm8oZW5hbWUsIHN0cmxlbihlbmFtZSkpOwogCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF91cmVhZCk7Ci0KLWludAotcDlfY2xpZW50X3V3cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCB1NjQgb2Zmc2V0LAotCQkJCQkJCQkgICB1MzIgY291bnQpCi17Ci0JaW50IGVyciwgbiwgcnNpemUsIHRvdGFsOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBvZmZzZXQgJWxsdSBjb3VudCAlZFxuIiwgZmlkLT5maWQsCi0JCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKLQotCXJzaXplID0gZmlkLT5pb3VuaXQ7Ci0JaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCi0JZG8gewotCQlpZiAoY291bnQgPCByc2l6ZSkKLQkJCXJzaXplID0gY291bnQ7Ci0KLQkJdGMgPSBwOV9jcmVhdGVfdHdyaXRlX3UoZmlkLT5maWQsIG9mZnNldCwgcnNpemUsIGRhdGEpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOworCQkJLyogc3RyaW5nIG1hdGNoIGZhaWxlZCAqLworCQkJaWYgKCFlcnIpCisJCQkJZXJyID0gLUVTRVJWRVJGQVVMVDsKIAkJfQogCi0JCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycm9yOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJFUlJPUiAoJWQpICVzXG4iLCAtZWNvZGUsIGVuYW1lKTsKIAotCQluID0gcmMtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJY291bnQgLT0gbjsKLQkJZGF0YSArPSBuOwotCQlvZmZzZXQgKz0gbjsKLQkJdG90YWwgKz0gbjsKLQkJa2ZyZWUodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWtmcmVlKHJjKTsKLQkJcmMgPSBOVUxMOwotCX0gd2hpbGUgKGNvdW50ID4gMCk7CisJCWtmcmVlKGVuYW1lKTsKKwl9IGVsc2UKKwkJZXJyID0gMDsKIAotCXJldHVybiB0b3RhbDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfdXdyaXRlKTsKIAotaW50IHA5X2NsaWVudF9yZWFkbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKKy8qKgorICogcDlfY2xpZW50X2ZsdXNoIC0gZmx1c2ggKGNhbmNlbCkgYSByZXF1ZXN0CisgKiBjOiBjbGllbnQgc3RhdGUKKyAqIHJlcTogcmVxdWVzdCB0byBjYW5jZWwKKyAqCisgKiBUaGlzIHNlbnRzIGEgZmx1c2ggZm9yIGEgcGFydGljdWxhciByZXF1ZXN0cyBhbmQgbGlua3MKKyAqIHRoZSBmbHVzaCByZXF1ZXN0IHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0LiAgVGhlIGN1cnJlbnQKKyAqIGNvZGUgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBmbHVzaCByZXF1ZXN0IGFsdGhvdWdoIHRoZSBwcm90b2NvbAorICogYWxsb3dzIGZvciBtdWx0aXBsZSBmbHVzaCByZXF1ZXN0cyB0byBiZSBzZW50IGZvciBhIHNpbmdsZSByZXF1ZXN0LgorICoKKyAqLworCitzdGF0aWMgaW50IHA5X2NsaWVudF9mbHVzaChzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKm9sZHJlcSkKIHsKLQlpbnQgbiwgdG90YWw7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JbiA9IDA7Ci0JdG90YWwgPSAwOwotCXdoaWxlIChjb3VudCkgewotCQluID0gcDlfY2xpZW50X3JlYWQoZmlkLCBkYXRhLCBvZmZzZXQsIGNvdW50KTsKLQkJaWYgKG4gPD0gMCkKLQkJCWJyZWFrOwotCi0JCWRhdGEgKz0gbjsKLQkJb2Zmc2V0ICs9IG47Ci0JCWNvdW50IC09IG47Ci0JCXRvdGFsICs9IG47Ci0JfQotCi0JaWYgKG4gPCAwKQotCQl0b3RhbCA9IG47Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZWFkbik7Ci0KLXN0cnVjdCBwOV9zdGF0ICpwOV9jbGllbnRfc3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQpCi17CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJaW50MTZfdCBvbGR0YWc7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2NsaWVudCAqY2xudDsKLQlzdHJ1Y3QgcDlfc3RhdCAqcmV0OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQlyZXQgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90c3RhdChmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOworCWVyciA9IHA5X3BhcnNlX2hlYWRlcihvbGRyZXEtPnRjLCBOVUxMLCBOVUxMLCAmb2xkdGFnLCAxKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gZXJyOwogCi0JcmV0ID0gcDlfY2xvbmVfc3RhdCgmcmMtPnBhcmFtcy5yc3RhdC5zdGF0LCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHJldCkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXQpOwotCQlyZXQgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRGTFVTSCB0YWcgJWRcbiIsIG9sZHRhZyk7CiAKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiByZXQ7CisJcmVxID0gcDlfY2xpZW50X3JwYyhjLCBQOV9URkxVU0gsICJ3Iiwgb2xkdGFnKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKLWVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0Ja2ZyZWUocmV0KTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCXJlcS0+Zmx1c2hfdGFnID0gb2xkdGFnOworCisJLyogd2UgZG9uJ3QgZnJlZSBhbnl0aGluZyBoZXJlIGJlY2F1c2UgUlBDIGlzbid0IGNvbXBsZXRlICovCisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9zdGF0KTsKIAotaW50IHA5X2NsaWVudF93c3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV93c3RhdCAqd3N0KQorLyoqCisgKiBwOV9jbGllbnRfcnBjIC0gaXNzdWUgYSByZXF1ZXN0IGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlCisgKiBAYzogY2xpZW50IHNlc3Npb24KKyAqIEB0eXBlOiB0eXBlIG9mIHJlcXVlc3QKKyAqIEBmbXQ6IHByb3RvY29sIGZvcm1hdCBzdHJpbmcgKHNlZSBwcm90b2NvbC5jKQorICoKKyAqIFJldHVybnMgcmVxdWVzdCBzdHJ1Y3R1cmUgKHdoaWNoIGNsaWVudCBtdXN0IGZyZWUgdXNpbmcgcDlfZnJlZV9yZXEpCisgKi8KKworc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCitwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXZhX2xpc3QgYXA7CisJaW50IHRhZywgZXJyOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNpZ3BlbmRpbmc7CisJaW50IGZsdXNoZWQgPSAwOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xpZW50ICVwIG9wICVkXG4iLCBjLCB0eXBlKTsKIAotCXRjID0gcDlfY3JlYXRlX3R3c3RhdChmaWQtPmZpZCwgd3N0LCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGRvbmU7CisJaWYgKGMtPnN0YXR1cyAhPSBDb25uZWN0ZWQpCisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCXNpZ3BlbmRpbmcgPSAxOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisJfSBlbHNlCisJCXNpZ3BlbmRpbmcgPSAwOworCisJdGFnID0gUDlfTk9UQUc7CisJaWYgKHR5cGUgIT0gUDlfVFZFUlNJT04pIHsKKwkJdGFnID0gcDlfaWRwb29sX2dldChjLT50YWdwb29sKTsKKwkJaWYgKHRhZyA8IDApCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOworCXJlcSA9IHA5X3RhZ19hbGxvYyhjLCB0YWcpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIHJlcTsKIAotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF93c3RhdCk7CisJLyogbWFyc2hhbGwgdGhlIGRhdGEgKi8KKwlwOXBkdV9wcmVwYXJlKHJlcS0+dGMsIHRhZywgdHlwZSk7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJZXJyID0gcDlwZHVfdndyaXRlZihyZXEtPnRjLCBjLT5kb3R1LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXA5cGR1X2ZpbmFsaXplKHJlcS0+dGMpOwogCi1zdHJ1Y3QgcDlfc3RhdCAqcDlfY2xpZW50X2RpcnJlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCB1NjQgb2Zmc2V0KQotewotCWludCBlcnIsIG4sIG07Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0Jc3RydWN0IHA5X3N0YXQgc3QsICpyZXQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1XG4iLCBmaWQtPmZpZCwKLQkJCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCXJldCA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCS8qIGlmIHRoZSBvZmZzZXQgaXMgYmVsb3cgb3IgYWJvdmUgdGhlIGN1cnJlbnQgcmVzcG9uc2UsIGZyZWUgaXQgKi8KLQlpZiAob2Zmc2V0IDwgZmlkLT5yZGlyX2Zwb3MgfHwgKGZpZC0+cmRpcl9mY2FsbCAmJgotCQlvZmZzZXQgPj0gZmlkLT5yZGlyX2Zwb3MrZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQpKSB7Ci0JCWZpZC0+cmRpcl9wb3MgPSAwOwotCQlpZiAoZmlkLT5yZGlyX2ZjYWxsKQotCQkJZmlkLT5yZGlyX2Zwb3MgKz0gZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0KLQkJa2ZyZWUoZmlkLT5yZGlyX2ZjYWxsKTsKLQkJZmlkLT5yZGlyX2ZjYWxsID0gTlVMTDsKLQkJaWYgKG9mZnNldCA8IGZpZC0+cmRpcl9mcG9zKQotCQkJZmlkLT5yZGlyX2Zwb3MgPSAwOworCWVyciA9IGMtPnRyYW5zX21vZC0+cmVxdWVzdChjLCByZXEpOworCWlmIChlcnIgPCAwKSB7CisJCWMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwkJZ290byByZXRlcnI7CiAJfQogCi0JaWYgKCFmaWQtPnJkaXJfZmNhbGwpIHsKLQkJbiA9IGZpZC0+aW91bml0OwotCQlpZiAoIW4gfHwgbiA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCQluID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCS8qIGlmIGl0IHdhcyBhIGZsdXNoIHdlIGp1c3QgdHJhbnNtaXR0ZWQsIHJldHVybiBvdXIgdGFnICovCisJaWYgKHR5cGUgPT0gUDlfVEZMVVNIKQorCQlyZXR1cm4gcmVxOworYWdhaW46CisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJ3YWl0ICVwIHRhZzogJWRcbiIsIHJlcS0+d3EsIHRhZyk7CisJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpyZXEtPndxLAorCQkJCQkJcmVxLT5zdGF0dXMgPj0gUkVRX1NUQVRVU19SQ1ZEKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIndhaXQgJXAgdGFnOiAlZCByZXR1cm5lZCAlZCAoZmx1c2hlZD0lZClcbiIsCisJCQkJCQlyZXEtPndxLCB0YWcsIGVyciwgZmx1c2hlZCk7CiAKLQkJd2hpbGUgKDEpIHsKLQkJCWlmIChmaWQtPnJkaXJfZmNhbGwpIHsKLQkJCQlmaWQtPnJkaXJfZnBvcyArPQotCQkJCQlmaWQtPnJkaXJfZmNhbGwtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJCQlrZnJlZShmaWQtPnJkaXJfZmNhbGwpOwotCQkJCWZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7Ci0JCQl9CisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRVJST1IpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgInJlcV9zdGF0dXMgZXJyb3IgJWRcbiIsIHJlcS0+dF9lcnIpOworCQllcnIgPSByZXEtPnRfZXJyOworCX0gZWxzZSBpZiAoZXJyID09IC1FUkVTVEFSVFNZUyAmJiBmbHVzaGVkKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmx1c2hlZCAtIGdvaW5nIGFnYWluXG4iKTsKKwkJZ290byBhZ2FpbjsKKwl9IGVsc2UgaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRkxTSEQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJmbHVzaGVkIC0gZXJlc3RhcnRzeXNcbiIpOworCQllcnIgPSAtRVJFU1RBUlRTWVM7CisJfQogCi0JCQl0YyA9IHA5X2NyZWF0ZV90cmVhZChmaWQtPmZpZCwgZmlkLT5yZGlyX2Zwb3MsIG4pOwotCQkJaWYgKElTX0VSUih0YykpIHsKLQkJCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJCQl0YyA9IE5VTEw7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KKwlpZiAoKGVyciA9PSAtRVJFU1RBUlRTWVMpICYmIChjLT5zdGF0dXMgPT0gQ29ubmVjdGVkKSAmJiAoIWZsdXNoZWQpKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmx1c2hpbmdcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+bG9jaywgZmxhZ3MpOworCQlpZiAocmVxLT5zdGF0dXMgPT0gUkVRX1NUQVRVU19TRU5UKQorCQkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX0ZMU0g7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJc2lncGVuZGluZyA9IDE7CisJCWZsdXNoZWQgPSAxOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CiAKLQkJCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCW4gPSByYy0+cGFyYW1zLnJyZWFkLmNvdW50OwotCQkJaWYgKG4gPT0gMCkKLQkJCQlnb3RvIGRvbmU7Ci0KLQkJCWZpZC0+cmRpcl9mY2FsbCA9IHJjOwotCQkJcmMgPSBOVUxMOwotCQkJaWYgKG9mZnNldCA+PSBmaWQtPnJkaXJfZnBvcyAmJgotCQkJCQkJb2Zmc2V0IDwgZmlkLT5yZGlyX2Zwb3MrbikKLQkJCQlicmVhazsKKwkJaWYgKGMtPnRyYW5zX21vZC0+Y2FuY2VsKGMsIHJlcSkpIHsKKwkJCWVyciA9IHA5X2NsaWVudF9mbHVzaChjLCByZXEpOworCQkJaWYgKGVyciA9PSAwKQorCQkJCWdvdG8gYWdhaW47CiAJCX0KLQotCQlmaWQtPnJkaXJfcG9zID0gMDsKIAl9CiAKLQltID0gb2Zmc2V0IC0gZmlkLT5yZGlyX2Zwb3M7Ci0JaWYgKG0gPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQluID0gcDlfZGVzZXJpYWxpemVfc3RhdChmaWQtPnJkaXJfZmNhbGwtPnBhcmFtcy5ycmVhZC5kYXRhICsgbSwKLQkJZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQgLSBtLCAmc3QsIGNsbnQtPmRvdHUpOwotCi0JaWYgKCFuKSB7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJaWYgKHNpZ3BlbmRpbmcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCX0KIAotCWZpZC0+cmRpcl9wb3MgKz0gbjsKLQlzdC5zaXplID0gbjsKLQlyZXQgPSBwOV9jbG9uZV9zdGF0KCZzdCwgY2xudC0+ZG90dSk7Ci0JaWYgKElTX0VSUihyZXQpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmV0KTsKLQkJcmV0ID0gTlVMTDsKLQkJZ290byBlcnJvcjsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byByZXRlcnI7CisKKwllcnIgPSBwOV9jaGVja19lcnJvcnMoYywgcmVxKTsKKwlpZiAoIWVycikgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImV4aXQ6IGNsaWVudCAlcCBvcCAlZFxuIiwgYywgdHlwZSk7CisJCXJldHVybiByZXE7CiAJfQogCi1kb25lOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIHJldDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlrZnJlZShyZXQpOworcmV0ZXJyOgorCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZXhpdDogY2xpZW50ICVwIG9wICVkIGVycm9yOiAlZFxuIiwgYywgdHlwZSwKKwkJCQkJCQkJCWVycik7CisJcDlfZnJlZV9yZXEoYywgcmVxKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfZGlycmVhZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfc3RhdCAqcDlfY2xvbmVfc3RhdChzdHJ1Y3QgcDlfc3RhdCAqc3QsIGludCBkb3R1KQotewotCWludCBuOwotCWNoYXIgKnA7Ci0Jc3RydWN0IHA5X3N0YXQgKnJldDsKLQotCW4gPSBzaXplb2Yoc3RydWN0IHA5X3N0YXQpICsgc3QtPm5hbWUubGVuICsgc3QtPnVpZC5sZW4gKyBzdC0+Z2lkLmxlbiArCi0JCXN0LT5tdWlkLmxlbjsKLQotCWlmIChkb3R1KQotCQluICs9IHN0LT5leHRlbnNpb24ubGVuOwotCi0JcmV0ID0ga21hbGxvYyhuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQltZW1tb3ZlKHJldCwgc3QsIHNpemVvZihzdHJ1Y3QgcDlfc3RhdCkpOwotCXAgPSAoKGNoYXIgKikgcmV0KSArIHNpemVvZihzdHJ1Y3QgcDlfc3RhdCk7Ci0JbWVtbW92ZShwLCBzdC0+bmFtZS5zdHIsIHN0LT5uYW1lLmxlbik7Ci0JcmV0LT5uYW1lLnN0ciA9IHA7Ci0JcCArPSBzdC0+bmFtZS5sZW47Ci0JbWVtbW92ZShwLCBzdC0+dWlkLnN0ciwgc3QtPnVpZC5sZW4pOwotCXJldC0+dWlkLnN0ciA9IHA7Ci0JcCArPSBzdC0+dWlkLmxlbjsKLQltZW1tb3ZlKHAsIHN0LT5naWQuc3RyLCBzdC0+Z2lkLmxlbik7Ci0JcmV0LT5naWQuc3RyID0gcDsKLQlwICs9IHN0LT5naWQubGVuOwotCW1lbW1vdmUocCwgc3QtPm11aWQuc3RyLCBzdC0+bXVpZC5sZW4pOwotCXJldC0+bXVpZC5zdHIgPSBwOwotCXAgKz0gc3QtPm11aWQubGVuOwotCi0JaWYgKGRvdHUpIHsKLQkJbWVtbW92ZShwLCBzdC0+ZXh0ZW5zaW9uLnN0ciwgc3QtPmV4dGVuc2lvbi5sZW4pOwotCQlyZXQtPmV4dGVuc2lvbi5zdHIgPSBwOwotCQlwICs9IHN0LT5leHRlbnNpb24ubGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfZmlkICpwOV9maWRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiY2xudCAlcFxuIiwgY2xudCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19GSUQsICJjbG50ICVwXG4iLCBjbG50KTsKIAlmaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmlkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaWQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTA1Myw4ICs2MjgsNiBAQAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7CiAJZmlkLT5yZGlyX2Zwb3MgPSAwOwotCWZpZC0+cmRpcl9wb3MgPSAwOwotCWZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7CiAJZmlkLT51aWQgPSBjdXJyZW50LT5mc3VpZDsKIAlmaWQtPmNsbnQgPSBjbG50OwogCWZpZC0+YXV4ID0gTlVMTDsKQEAgLTEwNzQsMTIgKzY0Nyw2MzEgQEAKIHsKIAlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfRklELCAiZmlkICVkXG4iLCBmaWQtPmZpZCk7CiAJY2xudCA9IGZpZC0+Y2xudDsKIAlwOV9pZHBvb2xfcHV0KGZpZC0+ZmlkLCBjbG50LT5maWRwb29sKTsKIAlzcGluX2xvY2soJmNsbnQtPmxvY2spOwogCWxpc3RfZGVsKCZmaWQtPmZsaXN0KTsKIAlzcGluX3VubG9jaygmY2xudC0+bG9jayk7Ci0Ja2ZyZWUoZmlkLT5yZGlyX2ZjYWxsKTsKIAlrZnJlZShmaWQpOwogfQorCitpbnQgcDlfY2xpZW50X3ZlcnNpb24oc3RydWN0IHA5X2NsaWVudCAqYykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyICp2ZXJzaW9uOworCWludCBtc2l6ZTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFZFUlNJT04gbXNpemUgJWQgZXh0ZW5kZWQgJWRcbiIsCisJCQkJCQkJYy0+bXNpemUsIGMtPmRvdHUpOworCXJlcSA9IHA5X2NsaWVudF9ycGMoYywgUDlfVFZFUlNJT04sICJkcyIsIGMtPm1zaXplLAorCQkJCWMtPmRvdHUgPyAiOVAyMDAwLnUiIDogIjlQMjAwMCIpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKKworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGMtPmRvdHUsICJkcyIsICZtc2l6ZSwgJnZlcnNpb24pOworCWlmIChlcnIpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgInZlcnNpb24gZXJyb3IgJWRcbiIsIGVycik7CisJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSVkVSU0lPTiBtc2l6ZSAlZCAlc1xuIiwgbXNpemUsIHZlcnNpb24pOworCWlmICghbWVtY21wKHZlcnNpb24sICI5UDIwMDAudSIsIDgpKQorCQljLT5kb3R1ID0gMTsKKwllbHNlIGlmICghbWVtY21wKHZlcnNpb24sICI5UDIwMDAiLCA2KSkKKwkJYy0+ZG90dSA9IDA7CisJZWxzZSB7CisJCWVyciA9IC1FUkVNT1RFSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKG1zaXplIDwgYy0+bXNpemUpCisJCWMtPm1zaXplID0gbXNpemU7CisKK2Vycm9yOgorCWtmcmVlKHZlcnNpb24pOworCXA5X2ZyZWVfcmVxKGMsIHJlcSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfdmVyc2lvbik7CisKK3N0cnVjdCBwOV9jbGllbnQgKnA5X2NsaWVudF9jcmVhdGUoY29uc3QgY2hhciAqZGV2X25hbWUsIGNoYXIgKm9wdGlvbnMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJZXJyID0gMDsKKwljbG50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmICghY2xudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljbG50LT50cmFuc19tb2QgPSBOVUxMOworCWNsbnQtPnRyYW5zID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmY2xudC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNsbnQtPmZpZGxpc3QpOworCWNsbnQtPmZpZHBvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjbG50LT5maWRwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGNsbnQtPmZpZHBvb2wpOworCQljbG50LT5maWRwb29sID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwOV90YWdfaW5pdChjbG50KTsKKworCWVyciA9IHBhcnNlX29wdHMob3B0aW9ucywgY2xudCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoY2xudC0+dHJhbnNfbW9kID09IE5VTEwpIHsKKwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkiTm8gdHJhbnNwb3J0IGRlZmluZWQgb3IgZGVmYXVsdCB0cmFuc3BvcnRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xudCAlcCB0cmFucyAlcCBtc2l6ZSAlZCBkb3R1ICVkXG4iLAorCQljbG50LCBjbG50LT50cmFuc19tb2QsIGNsbnQtPm1zaXplLCBjbG50LT5kb3R1KTsKKworCWVyciA9IGNsbnQtPnRyYW5zX21vZC0+Y3JlYXRlKGNsbnQsIGRldl9uYW1lLCBvcHRpb25zKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJaWYgKChjbG50LT5tc2l6ZStQOV9JT0hEUlNaKSA+IGNsbnQtPnRyYW5zX21vZC0+bWF4c2l6ZSkKKwkJY2xudC0+bXNpemUgPSBjbG50LT50cmFuc19tb2QtPm1heHNpemUtUDlfSU9IRFJTWjsKKworCWVyciA9IHA5X2NsaWVudF92ZXJzaW9uKGNsbnQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gY2xudDsKKworZXJyb3I6CisJcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2NyZWF0ZSk7CisKK3ZvaWQgcDlfY2xpZW50X2Rlc3Ryb3koc3RydWN0IHA5X2NsaWVudCAqY2xudCkKK3sKKwlzdHJ1Y3QgcDlfZmlkICpmaWQsICpmaWRwdHI7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImNsbnQgJXBcbiIsIGNsbnQpOworCisJaWYgKGNsbnQtPnRyYW5zX21vZCkKKwkJY2xudC0+dHJhbnNfbW9kLT5jbG9zZShjbG50KTsKKworCXY5ZnNfcHV0X3RyYW5zKGNsbnQtPnRyYW5zX21vZCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlkLCBmaWRwdHIsICZjbG50LT5maWRsaXN0LCBmbGlzdCkKKwkJcDlfZmlkX2Rlc3Ryb3koZmlkKTsKKworCWlmIChjbG50LT5maWRwb29sKQorCQlwOV9pZHBvb2xfZGVzdHJveShjbG50LT5maWRwb29sKTsKKworCXA5X3RhZ19jbGVhbnVwKGNsbnQpOworCisJa2ZyZWUoY2xudCk7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kZXN0cm95KTsKKwordm9pZCBwOV9jbGllbnRfZGlzY29ubmVjdChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KQoreworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJjbG50ICVwXG4iLCBjbG50KTsKKwljbG50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kaXNjb25uZWN0KTsKKworc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X2F0dGFjaChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBzdHJ1Y3QgcDlfZmlkICphZmlkLAorCWNoYXIgKnVuYW1lLCB1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X3FpZCBxaWQ7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRBVFRBQ0ggYWZpZCAlZCB1bmFtZSAlcyBhbmFtZSAlc1xuIiwKKwkJCQkJYWZpZCA/IGFmaWQtPmZpZCA6IC0xLCB1bmFtZSwgYW5hbWUpOworCWVyciA9IDA7CisKKwlmaWQgPSBwOV9maWRfY3JlYXRlKGNsbnQpOworCWlmIChJU19FUlIoZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCWZpZCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UQVRUQUNILCAiZGRzcz9kIiwgZmlkLT5maWQsCisJCQlhZmlkID8gYWZpZC0+ZmlkIDogUDlfTk9GSUQsIHVuYW1lLCBhbmFtZSwgbl91bmFtZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUSIsICZxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJBVFRBQ0ggcWlkICV4LiVsbHguJXhcbiIsCisJCQkJCXFpZC50eXBlLCBxaWQucGF0aCwgcWlkLnZlcnNpb24pOworCisJbWVtbW92ZSgmZmlkLT5xaWQsICZxaWQsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CisKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXJldHVybiBmaWQ7CisKK2Vycm9yOgorCWlmIChmaWQpCisJCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F0dGFjaCk7CisKK3N0cnVjdCBwOV9maWQgKgorcDlfY2xpZW50X2F1dGgoc3RydWN0IHA5X2NsaWVudCAqY2xudCwgY2hhciAqdW5hbWUsIHUzMiBuX3VuYW1lLCBjaGFyICphbmFtZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCXN0cnVjdCBwOV9xaWQgcWlkOworCXN0cnVjdCBwOV9maWQgKmFmaWQ7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRBVVRIIHVuYW1lICVzIGFuYW1lICVzXG4iLCB1bmFtZSwgYW5hbWUpOworCWVyciA9IDA7CisKKwlhZmlkID0gcDlfZmlkX2NyZWF0ZShjbG50KTsKKwlpZiAoSVNfRVJSKGFmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoYWZpZCk7CisJCWFmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVEFVVEgsICJkc3M/ZCIsCisJCQlhZmlkID8gYWZpZC0+ZmlkIDogUDlfTk9GSUQsIHVuYW1lLCBhbmFtZSwgbl91bmFtZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUSIsICZxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJBVVRIIHFpZCAleC4lbGx4LiV4XG4iLAorCQkJCQlxaWQudHlwZSwgcWlkLnBhdGgsIHFpZC52ZXJzaW9uKTsKKworCW1lbW1vdmUoJmFmaWQtPnFpZCwgJnFpZCwgc2l6ZW9mKHN0cnVjdCBwOV9xaWQpKTsKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXJldHVybiBhZmlkOworCitlcnJvcjoKKwlpZiAoYWZpZCkKKwkJcDlfZmlkX2Rlc3Ryb3koYWZpZCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F1dGgpOworCitzdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIGludCBud25hbWUsIGNoYXIgKip3bmFtZXMsCisJaW50IGNsb25lKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X3FpZCAqd3FpZHM7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJaW50MTZfdCBud3FpZHMsIGNvdW50OworCisJZXJyID0gMDsKKwljbG50ID0gb2xkZmlkLT5jbG50OworCWlmIChjbG9uZSkgeworCQlmaWQgPSBwOV9maWRfY3JlYXRlKGNsbnQpOworCQlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCWZpZCA9IE5VTEw7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJZmlkLT51aWQgPSBvbGRmaWQtPnVpZDsKKwl9IGVsc2UKKwkJZmlkID0gb2xkZmlkOworCisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRXQUxLIGZpZHMgJWQsJWQgbnduYW1lICVkIHduYW1lWzBdICVzXG4iLAorCQlvbGRmaWQtPmZpZCwgZmlkLT5maWQsIG53bmFtZSwgd25hbWVzID8gd25hbWVzWzBdIDogTlVMTCk7CisKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RXQUxLLCAiZGRUIiwgb2xkZmlkLT5maWQsIGZpZC0+ZmlkLAorCQkJCQkJCQlud25hbWUsIHduYW1lcyk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUiIsICZud3FpZHMsICZ3cWlkcyk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCQlnb3RvIGNsdW5rX2ZpZDsKKwl9CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUldBTEsgbndxaWQgJWQ6XG4iLCBud3FpZHMpOworCisJaWYgKG53cWlkcyAhPSBud25hbWUpIHsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBjbHVua19maWQ7CisJfQorCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbndxaWRzOyBjb3VudCsrKQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8ICAgICBbJWRdICV4LiVsbHguJXhcbiIsCisJCQljb3VudCwgd3FpZHNbY291bnRdLnR5cGUsIHdxaWRzW2NvdW50XS5wYXRoLAorCQkJd3FpZHNbY291bnRdLnZlcnNpb24pOworCisJaWYgKG53bmFtZSkKKwkJbWVtbW92ZSgmZmlkLT5xaWQsICZ3cWlkc1tud3FpZHMgLSAxXSwgc2l6ZW9mKHN0cnVjdCBwOV9xaWQpKTsKKwllbHNlCisJCWZpZC0+cWlkID0gb2xkZmlkLT5xaWQ7CisKKwlyZXR1cm4gZmlkOworCitjbHVua19maWQ6CisJcDlfY2xpZW50X2NsdW5rKGZpZCk7CisJZmlkID0gTlVMTDsKKworZXJyb3I6CisJaWYgKGZpZCAmJiAoZmlkICE9IG9sZGZpZCkpCisJCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd2Fsayk7CisKK2ludCBwOV9jbGllbnRfb3BlbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBtb2RlKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlpbnQgaW91bml0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUT1BFTiBmaWQgJWQgbW9kZSAlZFxuIiwgZmlkLT5maWQsIG1vZGUpOworCWVyciA9IDA7CisJY2xudCA9IGZpZC0+Y2xudDsKKworCWlmIChmaWQtPm1vZGUgIT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UT1BFTiwgImRiIiwgZmlkLT5maWQsIG1vZGUpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+ZG90dSwgIlFkIiwgJnFpZCwgJmlvdW5pdCk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUk9QRU4gcWlkICV4LiVsbHguJXggaW91bml0ICV4XG4iLAorCQkJCXFpZC50eXBlLCBxaWQucGF0aCwgcWlkLnZlcnNpb24sIGlvdW5pdCk7CisKKwlmaWQtPm1vZGUgPSBtb2RlOworCWZpZC0+aW91bml0ID0gaW91bml0OworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X29wZW4pOworCitpbnQgcDlfY2xpZW50X2ZjcmVhdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgaW50IG1vZGUsCisJCSAgICAgY2hhciAqZXh0ZW5zaW9uKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlpbnQgaW91bml0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUQ1JFQVRFIGZpZCAlZCBuYW1lICVzIHBlcm0gJWQgbW9kZSAlZFxuIiwKKwkJCQkJCWZpZC0+ZmlkLCBuYW1lLCBwZXJtLCBtb2RlKTsKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlpZiAoZmlkLT5tb2RlICE9IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVENSRUFURSwgImRzZGI/cyIsIGZpZC0+ZmlkLCBuYW1lLCBwZXJtLAorCQkJCW1vZGUsIGV4dGVuc2lvbik7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUWQiLCAmcWlkLCAmaW91bml0KTsKKwlpZiAoZXJyKSB7CisJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CisJCWdvdG8gZnJlZV9hbmRfZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSQ1JFQVRFIHFpZCAleC4lbGx4LiV4IGlvdW5pdCAleFxuIiwKKwkJCQlxaWQudHlwZSwgcWlkLnBhdGgsIHFpZC52ZXJzaW9uLCBpb3VuaXQpOworCisJZmlkLT5tb2RlID0gbW9kZTsKKwlmaWQtPmlvdW5pdCA9IGlvdW5pdDsKKworZnJlZV9hbmRfZXJyb3I6CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKK2Vycm9yOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9mY3JlYXRlKTsKKworaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUQ0xVTksgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UQ0xVTkssICJkIiwgZmlkLT5maWQpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSQ0xVTksgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisKK2Vycm9yOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9jbHVuayk7CisKK2ludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRSRU1PVkUgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UUkVNT1ZFLCAiZCIsIGZpZC0+ZmlkKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUlJFTU9WRSBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CisJcDlfZmlkX2Rlc3Ryb3koZmlkKTsKKworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3JlbW92ZSk7CisKK2ludAorcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjaGFyIF9fdXNlciAqdWRhdGEsIHU2NCBvZmZzZXQsCisJCQkJCQkJCXUzMiBjb3VudCkKK3sKKwlpbnQgZXJyLCByc2l6ZSwgdG90YWw7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyICpkYXRhcHRyOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUUkVBRCBmaWQgJWQgb2Zmc2V0ICVsbHUgJWRcbiIsIGZpZC0+ZmlkLAorCQkJCQkobG9uZyBsb25nIHVuc2lnbmVkKSBvZmZzZXQsIGNvdW50KTsKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisJdG90YWwgPSAwOworCisJcnNpemUgPSBmaWQtPmlvdW5pdDsKKwlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKKwkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7CisKKwlpZiAoY291bnQgPCByc2l6ZSkKKwkJcnNpemUgPSBjb3VudDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFJFQUQsICJkcWQiLCBmaWQtPmZpZCwgb2Zmc2V0LCByc2l6ZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiRCIsICZjb3VudCwgJmRhdGFwdHIpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBmcmVlX2FuZF9lcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJSRUFEIGNvdW50ICVkXG4iLCBjb3VudCk7CisKKwlpZiAoZGF0YSkgeworCQltZW1tb3ZlKGRhdGEsIGRhdGFwdHIsIGNvdW50KTsKKwkJZGF0YSArPSBjb3VudDsKKwl9CisKKwlpZiAodWRhdGEpIHsKKwkJZXJyID0gY29weV90b191c2VyKHVkYXRhLCBkYXRhcHRyLCBjb3VudCk7CisJCWlmIChlcnIpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCQl9CisJfQorCisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gY291bnQ7CisKK2ZyZWVfYW5kX2Vycm9yOgorCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfcmVhZCk7CisKK2ludAorcDlfY2xpZW50X3dyaXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLAorCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCkKK3sKKwlpbnQgZXJyLCByc2l6ZSwgdG90YWw7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFdSSVRFIGZpZCAlZCBvZmZzZXQgJWxsdSBjb3VudCAlZFxuIiwKKwkJCQlmaWQtPmZpZCwgKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCXRvdGFsID0gMDsKKworCXJzaXplID0gZmlkLT5pb3VuaXQ7CisJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCisJCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCisJaWYgKGNvdW50IDwgcnNpemUpCisJCXJzaXplID0gY291bnQ7CisJaWYgKGRhdGEpCisJCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdSSVRFLCAiZHFEIiwgZmlkLT5maWQsIG9mZnNldCwKKwkJCQkJCQkJcnNpemUsIGRhdGEpOworCWVsc2UKKwkJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UV1JJVEUsICJkcVUiLCBmaWQtPmZpZCwgb2Zmc2V0LAorCQkJCQkJCQlyc2l6ZSwgdWRhdGEpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+ZG90dSwgImQiLCAmY291bnQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBmcmVlX2FuZF9lcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJXUklURSBjb3VudCAlZFxuIiwgY291bnQpOworCisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gY291bnQ7CisKK2ZyZWVfYW5kX2Vycm9yOgorCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd3JpdGUpOworCitzdHJ1Y3QgcDlfd3N0YXQgKnA5X2NsaWVudF9zdGF0KHN0cnVjdCBwOV9maWQgKmZpZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3dzdGF0ICpyZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfd3N0YXQpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwl1MTYgaWdub3JlZDsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFNUQVQgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RTVEFULCAiZCIsIGZpZC0+ZmlkKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPmRvdHUsICJ3UyIsICZpZ25vcmVkLCByZXQpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gRVJSX1BUUihlcnIpOworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsCisJCSI8PDwgUlNUQVQgc3o9JXggdHlwZT0leCBkZXY9JXggcWlkPSV4LiVsbHguJXhcbiIKKwkJIjw8PCAgICBtb2RlPSU4Ljh4IGF0aW1lPSU4Ljh4IG10aW1lPSU4Ljh4IGxlbmd0aD0lbGx4XG4iCisJCSI8PDwgICAgbmFtZT0lcyB1aWQ9JXMgZ2lkPSVzIG11aWQ9JXMgZXh0ZW5zaW9uPSglcylcbiIKKwkJIjw8PCAgICB1aWQ9JWQgZ2lkPSVkIG5fbXVpZD0lZFxuIiwKKwkJcmV0LT5zaXplLCByZXQtPnR5cGUsIHJldC0+ZGV2LCByZXQtPnFpZC50eXBlLAorCQlyZXQtPnFpZC5wYXRoLCByZXQtPnFpZC52ZXJzaW9uLCByZXQtPm1vZGUsCisJCXJldC0+YXRpbWUsIHJldC0+bXRpbWUsIHJldC0+bGVuZ3RoLCByZXQtPm5hbWUsCisJCXJldC0+dWlkLCByZXQtPmdpZCwgcmV0LT5tdWlkLCByZXQtPmV4dGVuc2lvbiwKKwkJcmV0LT5uX3VpZCwgcmV0LT5uX2dpZCwgcmV0LT5uX211aWQpOworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3N0YXQpOworCitpbnQgcDlfY2xpZW50X3dzdGF0KHN0cnVjdCBwOV9maWQgKmZpZCwgc3RydWN0IHA5X3dzdGF0ICp3c3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUV1NUQVQgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwKKwkJIiAgICAgc3o9JXggdHlwZT0leCBkZXY9JXggcWlkPSV4LiVsbHguJXhcbiIKKwkJIiAgICAgbW9kZT0lOC44eCBhdGltZT0lOC44eCBtdGltZT0lOC44eCBsZW5ndGg9JWxseFxuIgorCQkiICAgICBuYW1lPSVzIHVpZD0lcyBnaWQ9JXMgbXVpZD0lcyBleHRlbnNpb249KCVzKVxuIgorCQkiICAgICB1aWQ9JWQgZ2lkPSVkIG5fbXVpZD0lZFxuIiwKKwkJd3N0LT5zaXplLCB3c3QtPnR5cGUsIHdzdC0+ZGV2LCB3c3QtPnFpZC50eXBlLAorCQl3c3QtPnFpZC5wYXRoLCB3c3QtPnFpZC52ZXJzaW9uLCB3c3QtPm1vZGUsCisJCXdzdC0+YXRpbWUsIHdzdC0+bXRpbWUsIHdzdC0+bGVuZ3RoLCB3c3QtPm5hbWUsCisJCXdzdC0+dWlkLCB3c3QtPmdpZCwgd3N0LT5tdWlkLCB3c3QtPmV4dGVuc2lvbiwKKwkJd3N0LT5uX3VpZCwgd3N0LT5uX2dpZCwgd3N0LT5uX211aWQpOworCWVyciA9IDA7CisJY2xudCA9IGZpZC0+Y2xudDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdTVEFULCAiZHdTIiwgZmlkLT5maWQsIDAsIHdzdCk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJXU1RBVCBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd3N0YXQpOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL2NvbnYuYyBiL25ldC85cC9jb252LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZDNhM2IuLjAwMDAwMDAKLS0tIGEvbmV0LzlwL2NvbnYuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNTQgKzAsMCBAQAotLyoKLSAqIG5ldC85cC9jb252LmMKLSAqCi0gKiA5UCBwcm90b2NvbCBjb252ZXJzaW9uIGZ1bmN0aW9ucwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgTGF0Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWlsLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQGxhbmwuZ292PgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG86Ci0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gKiAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgotICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPG5ldC85cC85cC5oPgotCi0vKgotICogQnVmZmVyIHRvIGhlbHAgd2l0aCBzdHJpbmcgcGFyc2luZwotICovCi1zdHJ1Y3QgY2J1ZiB7Ci0JdW5zaWduZWQgY2hhciAqc3A7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQl1bnNpZ25lZCBjaGFyICplcDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBidWZfaW5pdChzdHJ1Y3QgY2J1ZiAqYnVmLCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbikKLXsKLQlidWYtPnNwID0gYnVmLT5wID0gZGF0YTsKLQlidWYtPmVwID0gZGF0YSArIGRhdGFsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJ1Zl9jaGVja19vdmVyZmxvdyhzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXJldHVybiBidWYtPnAgPiBidWYtPmVwOwotfQotCi1zdGF0aWMgaW50IGJ1Zl9jaGVja19zaXplKHN0cnVjdCBjYnVmICpidWYsIGludCBsZW4pCi17Ci0JaWYgKGJ1Zi0+cCArIGxlbiA+IGJ1Zi0+ZXApIHsKLQkJaWYgKGJ1Zi0+cCA8IGJ1Zi0+ZXApIHsKLQkJCVA5X0VQUklOVEsoS0VSTl9FUlIsCi0JCQkJImJ1ZmZlciBvdmVyZmxvdzogd2FudCAlZCBoYXMgJWRcbiIsIGxlbiwKLQkJCQkoaW50KShidWYtPmVwIC0gYnVmLT5wKSk7Ci0JCQlkdW1wX3N0YWNrKCk7Ci0JCQlidWYtPnAgPSBidWYtPmVwICsgMTsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCAqYnVmX2FsbG9jKHN0cnVjdCBjYnVmICpidWYsIGludCBsZW4pCi17Ci0Jdm9pZCAqcmV0ID0gTlVMTDsKLQotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIGxlbikpIHsKLQkJcmV0ID0gYnVmLT5wOwotCQlidWYtPnAgKz0gbGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50OChzdHJ1Y3QgY2J1ZiAqYnVmLCB1OCB2YWwpCi17Ci0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgMSkpIHsKLQkJYnVmLT5wWzBdID0gdmFsOwotCQlidWYtPnArKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50MTYoc3RydWN0IGNidWYgKmJ1ZiwgdTE2IHZhbCkKLXsKLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAyKSkgewotCQkqKF9fbGUxNiAqKSBidWYtPnAgPSBjcHVfdG9fbGUxNih2YWwpOwotCQlidWYtPnAgKz0gMjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZiwgdTMyIHZhbCkKLXsKLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA0KSkgewotCQkqKF9fbGUzMiAqKWJ1Zi0+cCA9IGNwdV90b19sZTMyKHZhbCk7Ci0JCWJ1Zi0+cCArPSA0OwotCX0KLX0KLQotc3RhdGljIHZvaWQgYnVmX3B1dF9pbnQ2NChzdHJ1Y3QgY2J1ZiAqYnVmLCB1NjQgdmFsKQotewotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIDgpKSB7Ci0JCSooX19sZTY0ICopYnVmLT5wID0gY3B1X3RvX2xlNjQodmFsKTsKLQkJYnVmLT5wICs9IDg7Ci0JfQotfQotCi1zdGF0aWMgY2hhciAqYnVmX3B1dF9zdHJpbmduKHN0cnVjdCBjYnVmICpidWYsIGNvbnN0IGNoYXIgKnMsIHUxNiBzbGVuKQotewotCWNoYXIgKnJldDsKLQotCXJldCA9IE5VTEw7Ci0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1Ziwgc2xlbiArIDIpKSB7Ci0JCWJ1Zl9wdXRfaW50MTYoYnVmLCBzbGVuKTsKLQkJcmV0ID0gYnVmLT5wOwotCQltZW1jcHkoYnVmLT5wLCBzLCBzbGVuKTsKLQkJYnVmLT5wICs9IHNsZW47Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHU4IGJ1Zl9nZXRfaW50OChzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXU4IHJldCA9IDA7Ci0KLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAxKSkgewotCQlyZXQgPSBidWYtPnBbMF07Ci0JCWJ1Zi0+cCsrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1MTYgYnVmX2dldF9pbnQxNihzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXUxNiByZXQgPSAwOwotCi0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgMikpIHsKLQkJcmV0ID0gbGUxNl90b19jcHUoKihfX2xlMTYgKilidWYtPnApOwotCQlidWYtPnAgKz0gMjsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTMyIGJ1Zl9nZXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZikKLXsKLQl1MzIgcmV0ID0gMDsKLQotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIDQpKSB7Ci0JCXJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopYnVmLT5wKTsKLQkJYnVmLT5wICs9IDQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHU2NCBidWZfZ2V0X2ludDY0KHN0cnVjdCBjYnVmICpidWYpCi17Ci0JdTY0IHJldCA9IDA7Ci0KLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA4KSkgewotCQlyZXQgPSBsZTY0X3RvX2NwdSgqKF9fbGU2NCAqKWJ1Zi0+cCk7Ci0JCWJ1Zi0+cCArPSA4OwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9nZXRfc3RyKHN0cnVjdCBjYnVmICpidWYsIHN0cnVjdCBwOV9zdHIgKnZzdHIpCi17Ci0JdnN0ci0+bGVuID0gYnVmX2dldF9pbnQxNihidWYpOwotCWlmICghYnVmX2NoZWNrX292ZXJmbG93KGJ1ZikgJiYgYnVmX2NoZWNrX3NpemUoYnVmLCB2c3RyLT5sZW4pKSB7Ci0JCXZzdHItPnN0ciA9IGJ1Zi0+cDsKLQkJYnVmLT5wICs9IHZzdHItPmxlbjsKLQl9IGVsc2UgewotCQl2c3RyLT5sZW4gPSAwOwotCQl2c3RyLT5zdHIgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYnVmX2dldF9xaWQoc3RydWN0IGNidWYgKmJ1ZnAsIHN0cnVjdCBwOV9xaWQgKnFpZCkKLXsKLQlxaWQtPnR5cGUgPSBidWZfZ2V0X2ludDgoYnVmcCk7Ci0JcWlkLT52ZXJzaW9uID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQlxaWQtPnBhdGggPSBidWZfZ2V0X2ludDY0KGJ1ZnApOwotfQotCi0vKioKLSAqIHA5X3NpemVfd3N0YXQgLSBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYSB2YXJpYWJsZSBsZW5ndGggc3RhdCBzdHJ1Y3QKLSAqIEB3c3RhdDogbWV0YWRhdGEgKHN0YXQpIHN0cnVjdHVyZQotICogQGRvdHU6IG5vbi16ZXJvIGlmIDlQMjAwMC51Ci0gKgotICovCi0KLXN0YXRpYyBpbnQgcDlfc2l6ZV93c3RhdChzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LCBpbnQgZG90dSkKLXsKLQlpbnQgc2l6ZSA9IDA7Ci0KLQlpZiAod3N0YXQgPT0gTlVMTCkgewotCQlQOV9FUFJJTlRLKEtFUk5fRVJSLCAicDlfc2l6ZV9zdGF0OiBnb3QgYSBOVUxMIHN0YXQgcG9pbnRlclxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXNpemUgPQkJCS8qIDIgKyAqLy8qIHNpemVbMl0gKi8KLQkgICAgMiArCQkJLyogdHlwZVsyXSAqLwotCSAgICA0ICsJCQkvKiBkZXZbNF0gKi8KLQkgICAgMSArCQkJLyogcWlkLnR5cGVbMV0gKi8KLQkgICAgNCArCQkJLyogcWlkLnZlcnNbNF0gKi8KLQkgICAgOCArCQkJLyogcWlkLnBhdGhbOF0gKi8KLQkgICAgNCArCQkJLyogbW9kZVs0XSAqLwotCSAgICA0ICsJCQkvKiBhdGltZVs0XSAqLwotCSAgICA0ICsJCQkvKiBtdGltZVs0XSAqLwotCSAgICA4ICsJCQkvKiBsZW5ndGhbOF0gKi8KLQkgICAgODsJCQkvKiBtaW5pbXVtIHN1bSBvZiBzdHJpbmcgbGVuZ3RocyAqLwotCi0JaWYgKHdzdGF0LT5uYW1lKQotCQlzaXplICs9IHN0cmxlbih3c3RhdC0+bmFtZSk7Ci0JaWYgKHdzdGF0LT51aWQpCi0JCXNpemUgKz0gc3RybGVuKHdzdGF0LT51aWQpOwotCWlmICh3c3RhdC0+Z2lkKQotCQlzaXplICs9IHN0cmxlbih3c3RhdC0+Z2lkKTsKLQlpZiAod3N0YXQtPm11aWQpCi0JCXNpemUgKz0gc3RybGVuKHdzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCXNpemUgKz0gNCArCS8qIG5fdWlkWzRdICovCi0JCSAgICA0ICsJCS8qIG5fZ2lkWzRdICovCi0JCSAgICA0ICsJCS8qIG5fbXVpZFs0XSAqLwotCQkgICAgMjsJCS8qIHN0cmluZyBsZW5ndGggb2YgZXh0ZW5zaW9uWzRdICovCi0JCWlmICh3c3RhdC0+ZXh0ZW5zaW9uKQotCQkJc2l6ZSArPSBzdHJsZW4od3N0YXQtPmV4dGVuc2lvbik7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLS8qKgotICogYnVmX2dldF9zdGF0IC0gc2FmZWx5IGRlY29kZSBhIHJlY2lldmVkIG1ldGFkYXRhIChzdGF0KSBzdHJ1Y3R1cmUKLSAqIEBidWZwOiBidWZmZXIgdG8gZGVzZXJpYWxpemUKLSAqIEBzdGF0OiBtZXRhZGF0YSAoc3RhdCkgc3RydWN0dXJlCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQKLWJ1Zl9nZXRfc3RhdChzdHJ1Y3QgY2J1ZiAqYnVmcCwgc3RydWN0IHA5X3N0YXQgKnN0YXQsIGludCBkb3R1KQotewotCXN0YXQtPnNpemUgPSBidWZfZ2V0X2ludDE2KGJ1ZnApOwotCXN0YXQtPnR5cGUgPSBidWZfZ2V0X2ludDE2KGJ1ZnApOwotCXN0YXQtPmRldiA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0Jc3RhdC0+cWlkLnR5cGUgPSBidWZfZ2V0X2ludDgoYnVmcCk7Ci0Jc3RhdC0+cWlkLnZlcnNpb24gPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXN0YXQtPnFpZC5wYXRoID0gYnVmX2dldF9pbnQ2NChidWZwKTsKLQlzdGF0LT5tb2RlID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQlzdGF0LT5hdGltZSA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0Jc3RhdC0+bXRpbWUgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXN0YXQtPmxlbmd0aCA9IGJ1Zl9nZXRfaW50NjQoYnVmcCk7Ci0JYnVmX2dldF9zdHIoYnVmcCwgJnN0YXQtPm5hbWUpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT51aWQpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5naWQpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5leHRlbnNpb24pOwotCQlzdGF0LT5uX3VpZCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCXN0YXQtPm5fZ2lkID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJc3RhdC0+bl9tdWlkID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQl9Ci19Ci0KLS8qKgotICogcDlfZGVzZXJpYWxpemVfc3RhdCAtIGRlY29kZSBhIHJlY2VpdmVkIG1ldGFkYXRhIHN0cnVjdHVyZQotICogQGJ1ZjogYnVmZmVyIHRvIGRlc2VyaWFsaXplCi0gKiBAYnVmbGVuOiBsZW5ndGggb2YgcmVjZWl2ZWQgYnVmZmVyCi0gKiBAc3RhdDogbWV0YWRhdGEgc3RydWN0dXJlIHRvIGRlY29kZSBpbnRvCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKiBOb3RlOiBzdGF0IHdpbGwgcG9pbnQgdG8gdGhlIGJ1ZiByZWdpb24uCi0gKi8KLQotaW50Ci1wOV9kZXNlcmlhbGl6ZV9zdGF0KHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0YXQsCi0JCWludCBkb3R1KQotewotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQotCWJ1Zl9pbml0KGJ1ZnAsIGJ1ZiwgYnVmbGVuKTsKLQlwID0gYnVmcC0+cDsKLQlidWZfZ2V0X3N0YXQoYnVmcCwgc3RhdCwgZG90dSk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiBidWZwLT5wIC0gcDsKLX0KLUVYUE9SVF9TWU1CT0wocDlfZGVzZXJpYWxpemVfc3RhdCk7Ci0KLS8qKgotICogZGVzZXJpYWxpemVfZmNhbGwgLSB1bm1hcnNoYWwgYSByZXNwb25zZQotICogQGJ1ZjogcmVjaWV2ZWQgYnVmZmVyCi0gKiBAYnVmbGVuOiBsZW5ndGggb2YgcmVjZWl2ZWQgYnVmZmVyCi0gKiBAcmNhbGw6IGZjYWxsIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQotICogQHJjYWxsbGVuOiBsZW5ndGggb2YgZmNhbGwgc3RydWN0dXJlIHRvIHBvcHVsYXRlCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKi8KLQotaW50Ci1wOV9kZXNlcmlhbGl6ZV9mY2FsbCh2b2lkICpidWYsIHUzMiBidWZsZW4sIHN0cnVjdCBwOV9mY2FsbCAqcmNhbGwsCi0JCSAgICAgICBpbnQgZG90dSkKLXsKLQotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0JaW50IGkgPSAwOwotCi0JYnVmX2luaXQoYnVmcCwgYnVmLCBidWZsZW4pOwotCi0JcmNhbGwtPnNpemUgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXJjYWxsLT5pZCA9IGJ1Zl9nZXRfaW50OChidWZwKTsKLQlyY2FsbC0+dGFnID0gYnVmX2dldF9pbnQxNihidWZwKTsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfQ09OViwgInNpemUgJWQgaWQgJWQgdGFnICVkXG4iLCByY2FsbC0+c2l6ZSwKLQkJCQkJCQlyY2FsbC0+aWQsIHJjYWxsLT50YWcpOwotCi0Jc3dpdGNoIChyY2FsbC0+aWQpIHsKLQlkZWZhdWx0OgotCQlQOV9FUFJJTlRLKEtFUk5fRVJSLCAidW5rbm93biBtZXNzYWdlIHR5cGU6ICVkXG4iLCByY2FsbC0+aWQpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQljYXNlIFA5X1JWRVJTSU9OOgotCQlyY2FsbC0+cGFyYW1zLnJ2ZXJzaW9uLm1zaXplID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJYnVmX2dldF9zdHIoYnVmcCwgJnJjYWxsLT5wYXJhbXMucnZlcnNpb24udmVyc2lvbik7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUkZMVVNIOgotCQlicmVhazsKLQljYXNlIFA5X1JBVFRBQ0g6Ci0JCXJjYWxsLT5wYXJhbXMucmF0dGFjaC5xaWQudHlwZSA9IGJ1Zl9nZXRfaW50OChidWZwKTsKLQkJcmNhbGwtPnBhcmFtcy5yYXR0YWNoLnFpZC52ZXJzaW9uID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJcmNhbGwtPnBhcmFtcy5yYXR0YWNoLnFpZC5wYXRoID0gYnVmX2dldF9pbnQ2NChidWZwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SV0FMSzoKLQkJcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZCA9IGJ1Zl9nZXRfaW50MTYoYnVmcCk7Ci0JCWlmIChyY2FsbC0+cGFyYW1zLnJ3YWxrLm53cWlkID4gUDlfTUFYV0VMRU0pIHsKLQkJCVA5X0VQUklOVEsoS0VSTl9FUlIsCi0JCQkJCSJSd2FsayB3aXRoIG1vcmUgdGhhbiAlZCBxaWRzOiAlZFxuIiwKLQkJCQkJUDlfTUFYV0VMRU0sIHJjYWxsLT5wYXJhbXMucndhbGsubndxaWQpOwotCQkJcmV0dXJuIC1FUFJPVE87Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZDsgaSsrKQotCQkJYnVmX2dldF9xaWQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucndhbGsud3FpZHNbaV0pOwotCQlicmVhazsKLQljYXNlIFA5X1JPUEVOOgotCQlidWZfZ2V0X3FpZChidWZwLCAmcmNhbGwtPnBhcmFtcy5yb3Blbi5xaWQpOwotCQlyY2FsbC0+cGFyYW1zLnJvcGVuLmlvdW5pdCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUkNSRUFURToKLQkJYnVmX2dldF9xaWQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucmNyZWF0ZS5xaWQpOwotCQlyY2FsbC0+cGFyYW1zLnJjcmVhdGUuaW91bml0ID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SUkVBRDoKLQkJcmNhbGwtPnBhcmFtcy5ycmVhZC5jb3VudCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCXJjYWxsLT5wYXJhbXMucnJlYWQuZGF0YSA9IGJ1ZnAtPnA7Ci0JCWJ1Zl9jaGVja19zaXplKGJ1ZnAsIHJjYWxsLT5wYXJhbXMucnJlYWQuY291bnQpOwotCQlicmVhazsKLQljYXNlIFA5X1JXUklURToKLQkJcmNhbGwtPnBhcmFtcy5yd3JpdGUuY291bnQgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCQlicmVhazsKLQljYXNlIFA5X1JDTFVOSzoKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SUkVNT1ZFOgotCQlicmVhazsKLQljYXNlIFA5X1JTVEFUOgotCQlidWZfZ2V0X2ludDE2KGJ1ZnApOwotCQlidWZfZ2V0X3N0YXQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucnN0YXQuc3RhdCwgZG90dSk7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUldTVEFUOgotCQlicmVhazsKLQljYXNlIFA5X1JFUlJPUjoKLQkJYnVmX2dldF9zdHIoYnVmcCwgJnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yKTsKLQkJaWYgKGRvdHUpCi0JCQlyY2FsbC0+cGFyYW1zLnJlcnJvci5lcnJubyA9IGJ1Zl9nZXRfaW50MTYoYnVmcCk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiBidWZwLT5wIC0gYnVmcC0+c3A7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2Rlc2VyaWFsaXplX2ZjYWxsKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHA5X3B1dF9pbnQ4KHN0cnVjdCBjYnVmICpidWZwLCB1OCB2YWwsIHU4ICogcCkKLXsKLQkqcCA9IHZhbDsKLQlidWZfcHV0X2ludDgoYnVmcCwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHA5X3B1dF9pbnQxNihzdHJ1Y3QgY2J1ZiAqYnVmcCwgdTE2IHZhbCwgdTE2ICogcCkKLXsKLQkqcCA9IHZhbDsKLQlidWZfcHV0X2ludDE2KGJ1ZnAsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwOV9wdXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZnAsIHUzMiB2YWwsIHUzMiAqIHApCi17Ci0JKnAgPSB2YWw7Ci0JYnVmX3B1dF9pbnQzMihidWZwLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcDlfcHV0X2ludDY0KHN0cnVjdCBjYnVmICpidWZwLCB1NjQgdmFsLCB1NjQgKiBwKQotewotCSpwID0gdmFsOwotCWJ1Zl9wdXRfaW50NjQoYnVmcCwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQKLXA5X3B1dF9zdHIoc3RydWN0IGNidWYgKmJ1ZnAsIGNoYXIgKmRhdGEsIHN0cnVjdCBwOV9zdHIgKnN0cikKLXsKLQlpbnQgbGVuOwotCWNoYXIgKnM7Ci0KLQlpZiAoZGF0YSkKLQkJbGVuID0gc3RybGVuKGRhdGEpOwotCWVsc2UKLQkJbGVuID0gMDsKLQotCXMgPSBidWZfcHV0X3N0cmluZ24oYnVmcCwgZGF0YSwgbGVuKTsKLQlpZiAoc3RyKSB7Ci0JCXN0ci0+bGVuID0gbGVuOwotCQlzdHItPnN0ciA9IHM7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1wOV9wdXRfZGF0YShzdHJ1Y3QgY2J1ZiAqYnVmcCwgY29uc3QgY2hhciAqZGF0YSwgaW50IGNvdW50LAotCQkgICB1bnNpZ25lZCBjaGFyICoqcGRhdGEpCi17Ci0JKnBkYXRhID0gYnVmX2FsbG9jKGJ1ZnAsIGNvdW50KTsKLQlpZiAoKnBkYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbW1vdmUoKnBkYXRhLCBkYXRhLCBjb3VudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXA5X3B1dF91c2VyX2RhdGEoc3RydWN0IGNidWYgKmJ1ZnAsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCBpbnQgY291bnQsCi0JCSAgIHVuc2lnbmVkIGNoYXIgKipwZGF0YSkKLXsKLQkqcGRhdGEgPSBidWZfYWxsb2MoYnVmcCwgY291bnQpOwotCWlmICgqcGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKCpwZGF0YSwgZGF0YSwgY291bnQpOwotfQotCi1zdGF0aWMgdm9pZAotcDlfcHV0X3dzdGF0KHN0cnVjdCBjYnVmICpidWZwLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCSAgICAgICBzdHJ1Y3QgcDlfc3RhdCAqc3RhdCwgaW50IHN0YXRzeiwgaW50IGRvdHUpCi17Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIHN0YXRzeiwgJnN0YXQtPnNpemUpOwotCXA5X3B1dF9pbnQxNihidWZwLCB3c3RhdC0+dHlwZSwgJnN0YXQtPnR5cGUpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+ZGV2LCAmc3RhdC0+ZGV2KTsKLQlwOV9wdXRfaW50OChidWZwLCB3c3RhdC0+cWlkLnR5cGUsICZzdGF0LT5xaWQudHlwZSk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIHdzdGF0LT5xaWQudmVyc2lvbiwgJnN0YXQtPnFpZC52ZXJzaW9uKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgd3N0YXQtPnFpZC5wYXRoLCAmc3RhdC0+cWlkLnBhdGgpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bW9kZSwgJnN0YXQtPm1vZGUpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+YXRpbWUsICZzdGF0LT5hdGltZSk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIHdzdGF0LT5tdGltZSwgJnN0YXQtPm10aW1lKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgd3N0YXQtPmxlbmd0aCwgJnN0YXQtPmxlbmd0aCk7Ci0KLQlwOV9wdXRfc3RyKGJ1ZnAsIHdzdGF0LT5uYW1lLCAmc3RhdC0+bmFtZSk7Ci0JcDlfcHV0X3N0cihidWZwLCB3c3RhdC0+dWlkLCAmc3RhdC0+dWlkKTsKLQlwOV9wdXRfc3RyKGJ1ZnAsIHdzdGF0LT5naWQsICZzdGF0LT5naWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgd3N0YXQtPm11aWQsICZzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCXA5X3B1dF9zdHIoYnVmcCwgd3N0YXQtPmV4dGVuc2lvbiwgJnN0YXQtPmV4dGVuc2lvbik7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl91aWQsICZzdGF0LT5uX3VpZCk7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl9naWQsICZzdGF0LT5uX2dpZCk7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl9tdWlkLCAmc3RhdC0+bl9tdWlkKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfZmNhbGwgKgotcDlfY3JlYXRlX2NvbW1vbihzdHJ1Y3QgY2J1ZiAqYnVmcCwgdTMyIHNpemUsIHU4IGlkKQotewotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0KLQlzaXplICs9IDQgKyAxICsgMjsJLyogc2l6ZVs0XSBpZFsxXSB0YWdbMl0gKi8KLQlmYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyBzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZjKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWZjLT5zZGF0YSA9IChjaGFyICopZmMgKyBzaXplb2YoKmZjKTsKLQotCWJ1Zl9pbml0KGJ1ZnAsIChjaGFyICopZmMtPnNkYXRhLCBzaXplKTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgc2l6ZSwgJmZjLT5zaXplKTsKLQlwOV9wdXRfaW50OChidWZwLCBpZCwgJmZjLT5pZCk7Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIFA5X05PVEFHLCAmZmMtPnRhZyk7Ci0KLQlyZXR1cm4gZmM7Ci19Ci0KLS8qKgotICogcDlfc2V0X3RhZyAtIHNldCB0aGUgdGFnIGZpZWxkIG9mIGFuICZwOV9mY2FsbCBzdHJ1Y3R1cmUKLSAqIEBmYzogZmNhbGwgc3RydWN0dXJlIHRvIHNldCB0YWcgd2l0aGluCi0gKiBAdGFnOiB0YWcgaWQgdG8gc2V0Ci0gKi8KLQotdm9pZCBwOV9zZXRfdGFnKHN0cnVjdCBwOV9mY2FsbCAqZmMsIHUxNiB0YWcpCi17Ci0JZmMtPnRhZyA9IHRhZzsKLQkqKF9fbGUxNiAqKSAoZmMtPnNkYXRhICsgNSkgPSBjcHVfdG9fbGUxNih0YWcpOwotfQotRVhQT1JUX1NZTUJPTChwOV9zZXRfdGFnKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHZlcnNpb24gLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1ZFUlNJT04gcmVxdWVzdAotICogQG1zaXplOiByZXF1ZXN0ZWQgbWF4aW11bSBkYXRhIHNpemUKLSAqIEB2ZXJzaW9uOiB2ZXJzaW9uIHN0cmluZyB0byBuZWdvdGlhdGUKLSAqCi0gKi8KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R2ZXJzaW9uKHUzMiBtc2l6ZSwgY2hhciAqdmVyc2lvbikKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNCArIDIgKyBzdHJsZW4odmVyc2lvbik7CS8qIG1zaXplWzRdIHZlcnNpb25bc10gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFZFUlNJT04pOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIG1zaXplLCAmZmMtPnBhcmFtcy50dmVyc2lvbi5tc2l6ZSk7Ci0JcDlfcHV0X3N0cihidWZwLCB2ZXJzaW9uLCAmZmMtPnBhcmFtcy50dmVyc2lvbi52ZXJzaW9uKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHZlcnNpb24pOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90YXV0aCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfQVVUSCByZXF1ZXN0Ci0gKiBAYWZpZDogaGFuZGxlIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24gcHJvdG9jb2wKLSAqIEB1bmFtZTogdXNlciBuYW1lIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlCi0gKiBAYW5hbWU6IG1vdW50IHNwZWNpZmllciBmb3IgcmVtb3RlIHNlcnZlcgotICogQG5fdW5hbWU6IG51bWVyaWMgaWQgZm9yIHVzZXIgYXR0ZW1wdGluZyB0byBhdXRobmV0aWNhdGUKLSAqIEBkb3R1OiA5UDIwMDAudSBleHRlbnNpb24gZmxhZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90YXV0aCh1MzIgYWZpZCwgY2hhciAqdW5hbWUsIGNoYXIgKmFuYW1lLAotCXUzMiBuX3VuYW1lLCBpbnQgZG90dSkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQkvKiBhZmlkWzRdIHVuYW1lW3NdIGFuYW1lW3NdICovCi0Jc2l6ZSA9IDQgKyAyICsgMjsKLQlpZiAodW5hbWUpCi0JCXNpemUgKz0gc3RybGVuKHVuYW1lKTsKLQotCWlmIChhbmFtZSkKLQkJc2l6ZSArPSBzdHJsZW4oYW5hbWUpOwotCi0JaWYgKGRvdHUpCi0JCXNpemUgKz0gNDsJLyogbl91bmFtZSAqLwotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RBVVRIKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJZ290byBlcnJvcjsKLQotCXA5X3B1dF9pbnQzMihidWZwLCBhZmlkLCAmZmMtPnBhcmFtcy50YXV0aC5hZmlkKTsKLQlwOV9wdXRfc3RyKGJ1ZnAsIHVuYW1lLCAmZmMtPnBhcmFtcy50YXV0aC51bmFtZSk7Ci0JcDlfcHV0X3N0cihidWZwLCBhbmFtZSwgJmZjLT5wYXJhbXMudGF1dGguYW5hbWUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfaW50MzIoYnVmcCwgbl91bmFtZSwgJmZjLT5wYXJhbXMudGF1dGgubl91bmFtZSk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RhdXRoKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdGF0dGFjaCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfQVRUQUNIIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB0byB1c2UgZm9yIHRoZSBuZXcgbW91bnQgcG9pbnQKLSAqIEBhZmlkOiBoYW5kbGUgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbiBwcm90b2NvbAotICogQHVuYW1lOiB1c2VyIG5hbWUgYXR0ZW1wdGluZyB0byBhdHRhY2gKLSAqIEBhbmFtZTogbW91bnQgc3BlY2lmaWVyIGZvciByZW1vdGUgc2VydmVyCi0gKiBAbl91bmFtZTogbnVtZXJpYyBpZCBmb3IgdXNlciBhdHRlbXB0aW5nIHRvIGF0dGFjaAotICogQG5fdW5hbWU6IG51bWVyaWMgaWQgZm9yIHVzZXIgYXR0ZW1wdGluZyB0byBhdHRhY2gKLSAqIEBkb3R1OiA5UDIwMDAudSBleHRlbnNpb24gZmxhZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKgotcDlfY3JlYXRlX3RhdHRhY2godTMyIGZpZCwgdTMyIGFmaWQsIGNoYXIgKnVuYW1lLCBjaGFyICphbmFtZSwKLQl1MzIgbl91bmFtZSwgaW50IGRvdHUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0JLyogZmlkWzRdIGFmaWRbNF0gdW5hbWVbc10gYW5hbWVbc10gKi8KLQlzaXplID0gNCArIDQgKyAyICsgMjsKLQlpZiAodW5hbWUpCi0JCXNpemUgKz0gc3RybGVuKHVuYW1lKTsKLQotCWlmIChhbmFtZSkKLQkJc2l6ZSArPSBzdHJsZW4oYW5hbWUpOwotCi0JaWYgKGRvdHUpCi0JCXNpemUgKz0gNDsJLyogbl91bmFtZSAqLwotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RBVFRBQ0gpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGF0dGFjaC5maWQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBhZmlkLCAmZmMtPnBhcmFtcy50YXR0YWNoLmFmaWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgdW5hbWUsICZmYy0+cGFyYW1zLnRhdHRhY2gudW5hbWUpOwotCXA5X3B1dF9zdHIoYnVmcCwgYW5hbWUsICZmYy0+cGFyYW1zLnRhdHRhY2guYW5hbWUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfaW50MzIoYnVmcCwgbl91bmFtZSwgJmZjLT5wYXJhbXMudGF0dGFjaC5uX3VuYW1lKTsKLQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdGF0dGFjaCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RmbHVzaCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfRkxVU0ggcmVxdWVzdAotICogQG9sZHRhZzogdGFnIGlkIGZvciB0aGUgdHJhbnNhY3Rpb24gd2UgYXJlIGF0dGVtcHRpbmcgdG8gY2FuY2VsCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RmbHVzaCh1MTYgb2xkdGFnKQotewotCWludCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCXNpemUgPSAyOwkJLyogb2xkdGFnWzJdICovCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RGTFVTSCk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MTYoYnVmcCwgb2xkdGFnLCAmZmMtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdGZsdXNoKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHdhbGsgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX0ZMVVNIIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB3ZSBhcmUgdHJhdmVyc2luZyBmcm9tCi0gKiBAbmV3ZmlkOiBhIG5ldyBoYW5kbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24KLSAqIEBud25hbWU6IG51bWJlciBvZiBwYXRoIGVsZW1lbnRzIHRvIHRyYXZlcnNlCi0gKiBAd25hbWVzOiBhcnJheSBvZiBwYXRoIGVsZW1lbnRzCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3YWxrKHUzMiBmaWQsIHUzMiBuZXdmaWQsIHUxNiBud25hbWUsCi0JCQkJICAgICBjaGFyICoqd25hbWVzKQotewotCWludCBpLCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCWlmIChud25hbWUgPiBQOV9NQVhXRUxFTSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibnduYW1lID4gJWRcbiIsIFA5X01BWFdFTEVNKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc2l6ZSA9IDQgKyA0ICsgMjsJLyogZmlkWzRdIG5ld2ZpZFs0XSBud25hbWVbMl0gLi4uICovCi0JZm9yIChpID0gMDsgaSA8IG53bmFtZTsgaSsrKSB7Ci0JCXNpemUgKz0gMiArIHN0cmxlbih3bmFtZXNbaV0pOwkvKiB3bmFtZVtzXSAqLwotCX0KLQotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UV0FMSyk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50d2Fsay5maWQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBuZXdmaWQsICZmYy0+cGFyYW1zLnR3YWxrLm5ld2ZpZCk7Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIG53bmFtZSwgJmZjLT5wYXJhbXMudHdhbGsubnduYW1lKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnduYW1lOyBpKyspIHsKLQkJcDlfcHV0X3N0cihidWZwLCB3bmFtZXNbaV0sICZmYy0+cGFyYW1zLnR3YWxrLnduYW1lc1tpXSk7Ci0JfQotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90d2Fsayk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RvcGVuIC0gYWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEgVF9PUEVOIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB3ZSBhcmUgdHJ5aW5nIHRvIG9wZW4KLSAqIEBtb2RlOiB3aGF0IG1vZGUgd2UgYXJlIHRyeWluZyB0byBvcGVuIHRoZSBmaWxlIGluCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RvcGVuKHUzMiBmaWQsIHU4IG1vZGUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc2l6ZSA9IDQgKyAxOwkJLyogZmlkWzRdIG1vZGVbMV0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVE9QRU4pOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudG9wZW4uZmlkKTsKLQlwOV9wdXRfaW50OChidWZwLCBtb2RlLCAmZmMtPnBhcmFtcy50b3Blbi5tb2RlKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdG9wZW4pOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90Y3JlYXRlIC0gYWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEgVF9DUkVBVEUgcmVxdWVzdAotICogQGZpZDogaGFuZGxlIG9mIGRpcmVjdG9yeSB3ZSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBpbgotICogQG5hbWU6IG5hbWUgb2YgdGhlIGZpbGUgd2UgYXJlIHRyeWluZyB0byBjcmVhdGUKLSAqIEBwZXJtOiBwZXJtaXNzaW9ucyBmb3IgdGhlIGZpbGUgd2UgYXJlIHRyeWluZyB0byBjcmVhdGUKLSAqIEBtb2RlOiB3aGF0IG1vZGUgd2UgYXJlIHRyeWluZyB0byBvcGVuIHRoZSBmaWxlIGluCi0gKiBAZXh0ZW5zaW9uOiA5cDIwMDAudSBleHRlbnNpb24gc3RyaW5nIChmb3Igc3BlY2lhbCBmaWxlcykKLSAqIEBkb3R1OiA5cDIwMDAudSBlbmFibGVkIGZsYWcKLSAqCi0gKiBOb3RlOiBQbGFuIDkgY3JlYXRlIHNlbWFudGljcyBpbmNsdWRlIG9wZW5pbmcgdGhlIHJlc3VsdGluZyBmaWxlCi0gKiB3aGljaCBpcyB3aHkgbW9kZSBpcyBpbmNsdWRlZC4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y3JlYXRlKHUzMiBmaWQsIGNoYXIgKm5hbWUsIHUzMiBwZXJtLCB1OCBtb2RlLAotCWNoYXIgKmV4dGVuc2lvbiwgaW50IGRvdHUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0JLyogZmlkWzRdIG5hbWVbc10gcGVybVs0XSBtb2RlWzFdICovCi0Jc2l6ZSA9IDQgKyAyICsgc3RybGVuKG5hbWUpICsgNCArIDE7Ci0JaWYgKGRvdHUpIHsKLQkJc2l6ZSArPSAyICsJCQkvKiBleHRlbnNpb25bc10gKi8KLQkJICAgIChleHRlbnNpb24gPT0gTlVMTCA/IDAgOiBzdHJsZW4oZXh0ZW5zaW9uKSk7Ci0JfQotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RDUkVBVEUpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGNyZWF0ZS5maWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgbmFtZSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lKTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgcGVybSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5wZXJtKTsKLQlwOV9wdXRfaW50OChidWZwLCBtb2RlLCAmZmMtPnBhcmFtcy50Y3JlYXRlLm1vZGUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfc3RyKGJ1ZnAsIGV4dGVuc2lvbiwgJmZjLT5wYXJhbXMudGNyZWF0ZS5leHRlbnNpb24pOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90Y3JlYXRlKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHJlYWQgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1JFQUQgcmVxdWVzdAotICogQGZpZDogaGFuZGxlIG9mIHRoZSBmaWxlIHdlIGFyZSB0cnlpbmcgdG8gcmVhZAotICogQG9mZnNldDogb2Zmc2V0IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbQotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byByZWFkCi0gKi8KLQotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHJlYWQodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50KQotewotCWludCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCXNpemUgPSA0ICsgOCArIDQ7CS8qIGZpZFs0XSBvZmZzZXRbOF0gY291bnRbNF0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFJFQUQpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudHJlYWQuZmlkKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgb2Zmc2V0LCAmZmMtPnBhcmFtcy50cmVhZC5vZmZzZXQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBjb3VudCwgJmZjLT5wYXJhbXMudHJlYWQuY291bnQpOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90cmVhZCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3R3cml0ZSAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfV1JJVEUgcmVxdWVzdCBmcm9tIHRoZSBrZXJuZWwKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgdG8gc3RhcnQgd3JpdGluZyBhdAotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byB3cml0ZQotICogQGRhdGE6IGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgcmVxdXN0IHdpdGggZGF0YSBidWZmZXJzIGZyb20gdGhlIGtlcm5lbAotICogc3VjaCBhcyB0aGUgcGFnZSBjYWNoZS4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3JpdGUodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGEpCi17Ci0JaW50IHNpemUsIGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQkvKiBmaWRbNF0gb2Zmc2V0WzhdIGNvdW50WzRdIGRhdGFbY291bnRdICovCi0Jc2l6ZSA9IDQgKyA4ICsgNCArIGNvdW50OwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UV1JJVEUpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudHdyaXRlLmZpZCk7Ci0JcDlfcHV0X2ludDY0KGJ1ZnAsIG9mZnNldCwgJmZjLT5wYXJhbXMudHdyaXRlLm9mZnNldCk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIGNvdW50LCAmZmMtPnBhcmFtcy50d3JpdGUuY291bnQpOwotCWVyciA9IHA5X3B1dF9kYXRhKGJ1ZnAsIGRhdGEsIGNvdW50LCAmZmMtPnBhcmFtcy50d3JpdGUuZGF0YSk7Ci0JaWYgKGVycikgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUihlcnIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHdyaXRlKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHdyaXRlX3UgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1dSSVRFIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgdG8gc3RhcnQgd3JpdGluZyBhdAotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byB3cml0ZQotICogQGRhdGE6IGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgcmVxdWVzdCB3aXRoIGRhdGEgYnVmZmVycyBmcm9tIHVzZXJzcGFjZQotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3cml0ZV91KHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCwKLQkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSkKLXsKLQlpbnQgc2l6ZSwgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCS8qIGZpZFs0XSBvZmZzZXRbOF0gY291bnRbNF0gZGF0YVtjb3VudF0gKi8KLQlzaXplID0gNCArIDggKyA0ICsgY291bnQ7Ci0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RXUklURSk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50d3JpdGUuZmlkKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgb2Zmc2V0LCAmZmMtPnBhcmFtcy50d3JpdGUub2Zmc2V0KTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgY291bnQsICZmYy0+cGFyYW1zLnR3cml0ZS5jb3VudCk7Ci0JZXJyID0gcDlfcHV0X3VzZXJfZGF0YShidWZwLCBkYXRhLCBjb3VudCwgJmZjLT5wYXJhbXMudHdyaXRlLmRhdGEpOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3R3cml0ZV91KTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdGNsdW5rIC0gYWxsb2NhdGUgYSByZXF1ZXN0IHRvIGZvcmdldCBhYm91dCBhIGZpbGUgaGFuZGxlCi0gKiBAZmlkOiBoYW5kbGUgb2YgdGhlIGZpbGUgd2UgY2xvc2luZyBvciBmb3JnZXR0aW5nIGFib3V0Ci0gKgotICogY2x1bmsgaXMgdXNlZCBib3RoIHRvIGNsb3NlIG9wZW4gZmlsZXMgYW5kIHRvIGRpc2NhcmQgdHJhbnNpZW50IGhhbmRsZXMKLSAqIHdoaWNoIG1heSBiZSBjcmVhdGVkIGR1cmluZyBtZXRhLWRhdGEgb3BlcmF0aW9ucyBhbmQgaGllcmFyY2h5IHRyYXZlcnNhbC4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y2x1bmsodTMyIGZpZCkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNDsJCS8qIGZpZFs0XSAqLwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UQ0xVTkspOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGNsdW5rLmZpZCk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RjbHVuayk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RyZW1vdmUgLSBhbGxvY2F0ZSBhbmQgY3JlYXRlIGEgcmVxdWVzdCB0byByZW1vdmUgYSBmaWxlCi0gKiBAZmlkOiBoYW5kbGUgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHdlIGFyZSByZW1vdmluZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90cmVtb3ZlKHUzMiBmaWQpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc2l6ZSA9IDQ7CQkvKiBmaWRbNF0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFJFTU9WRSk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50cmVtb3ZlLmZpZCk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RyZW1vdmUpOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90c3RhdCAtIGFsbG9jYXRlIGFuZCBwb3B1bGF0ZSBhIHJlcXVlc3QgZm9yIGF0dHJpYnV0ZXMKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSBvciBkaXJlY3Rvcnkgd2UgYXJlIHRyeWluZyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMgb2YKLSAqCi0gKi8KLQotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHN0YXQodTMyIGZpZCkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNDsJCS8qIGZpZFs0XSAqLwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UU1RBVCk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50c3RhdC5maWQpOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90c3RhdCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RzdGF0IC0gYWxsb2NhdGUgYW5kIHBvcHVsYXRlIGEgcmVxdWVzdCB0byBjaGFuZ2UgYXR0cmlidXRlcwotICogQGZpZDogaGFuZGxlIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB3ZSBhcmUgdHJ5aW5nIHRvIGNoYW5nZQotICogQHdzdGF0OiAmcDlfc3RhdCBzdHJ1Y3R1cmUgd2l0aCBhdHRyaWJ1dGVzIHdlIHdpc2ggdG8gc2V0Ci0gKiBAZG90dTogOXAyMDAwLnUgZW5hYmxlZCBmbGFnCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3c3RhdCh1MzIgZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCQkJCSAgICAgIGludCBkb3R1KQotewotCWludCBzaXplLCBzdGF0c3o7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc3RhdHN6ID0gcDlfc2l6ZV93c3RhdCh3c3RhdCwgZG90dSk7Ci0Jc2l6ZSA9IDQgKyAyICsgMiArIHN0YXRzejsJLyogZmlkWzRdIHN0YXRbbl0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFdTVEFUKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJZ290byBlcnJvcjsKLQotCXA5X3B1dF9pbnQzMihidWZwLCBmaWQsICZmYy0+cGFyYW1zLnR3c3RhdC5maWQpOwotCWJ1Zl9wdXRfaW50MTYoYnVmcCwgc3RhdHN6ICsgMik7Ci0JcDlfcHV0X3dzdGF0KGJ1ZnAsIHdzdGF0LCAmZmMtPnBhcmFtcy50d3N0YXQuc3RhdCwgc3RhdHN6LCBkb3R1KTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHdzdGF0KTsKLQpkaWZmIC0tZ2l0IGEvbmV0LzlwL2ZjcHJpbnQuYyBiL25ldC85cC9mY3ByaW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZGQ4ZTIuLjAwMDAwMDAKLS0tIGEvbmV0LzlwL2ZjcHJpbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NiArMCwwIEBACi0vKgotICogIG5ldC85cC9mY3ByaW50LmMKLSAqCi0gKiAgUHJpbnQgOVAgY2FsbC4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0bzoKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAqICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCi0gKiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwMSAgVVNBCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgotI2luY2x1ZGUgPG5ldC85cC85cC5oPgotCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCi1zdGF0aWMgaW50Ci1wOV9wcmludHFpZChjaGFyICpidWYsIGludCBidWZsZW4sIHN0cnVjdCBwOV9xaWQgKnEpCi17Ci0JaW50IG47Ci0JY2hhciBiWzEwXTsKLQotCW4gPSAwOwotCWlmIChxLT50eXBlICYgUDlfUVRESVIpCi0JCWJbbisrXSA9ICdkJzsKLQlpZiAocS0+dHlwZSAmIFA5X1FUQVBQRU5EKQotCQliW24rK10gPSAnYSc7Ci0JaWYgKHEtPnR5cGUgJiBQOV9RVEFVVEgpCi0JCWJbbisrXSA9ICdBJzsKLQlpZiAocS0+dHlwZSAmIFA5X1FURVhDTCkKLQkJYltuKytdID0gJ2wnOwotCWlmIChxLT50eXBlICYgUDlfUVRUTVApCi0JCWJbbisrXSA9ICd0JzsKLQlpZiAocS0+dHlwZSAmIFA5X1FUU1lNTElOSykKLQkJYltuKytdID0gJ0wnOwotCWJbbl0gPSAnXDAnOwotCi0JcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiglLjE2bGx4ICV4ICVzKSIsCi0JCQkJCShsb25nIGxvbmcgaW50KSBxLT5wYXRoLCBxLT52ZXJzaW9uLCBiKTsKLX0KLQotc3RhdGljIGludAotcDlfcHJpbnRwZXJtKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHBlcm0pCi17Ci0JaW50IG47Ci0JY2hhciBiWzE1XTsKLQotCW4gPSAwOwotCWlmIChwZXJtICYgUDlfRE1ESVIpCi0JCWJbbisrXSA9ICdkJzsKLQlpZiAocGVybSAmIFA5X0RNQVBQRU5EKQotCQliW24rK10gPSAnYSc7Ci0JaWYgKHBlcm0gJiBQOV9ETUFVVEgpCi0JCWJbbisrXSA9ICdBJzsKLQlpZiAocGVybSAmIFA5X0RNRVhDTCkKLQkJYltuKytdID0gJ2wnOwotCWlmIChwZXJtICYgUDlfRE1UTVApCi0JCWJbbisrXSA9ICd0JzsKLQlpZiAocGVybSAmIFA5X0RNREVWSUNFKQotCQliW24rK10gPSAnRCc7Ci0JaWYgKHBlcm0gJiBQOV9ETVNPQ0tFVCkKLQkJYltuKytdID0gJ1MnOwotCWlmIChwZXJtICYgUDlfRE1OQU1FRFBJUEUpCi0JCWJbbisrXSA9ICdQJzsKLQlpZiAocGVybSAmIFA5X0RNU1lNTElOSykKLQkJYltuKytdID0gJ0wnOwotCWJbbl0gPSAnXDAnOwotCi0JcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzJTAzbyIsIGIsIHBlcm0mMDc3KTsKLX0KLQotc3RhdGljIGludAotcDlfcHJpbnRzdGF0KGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0LCBpbnQgZXh0ZW5kZWQpCi17Ci0JaW50IG47Ci0KLQluID0gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJyUuKnMnICclLipzJyIsIHN0LT5uYW1lLmxlbiwKLQkJc3QtPm5hbWUuc3RyLCBzdC0+dWlkLmxlbiwgc3QtPnVpZC5zdHIpOwotCWlmIChleHRlbmRlZCkKLQkJbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiKCVkKSIsIHN0LT5uX3VpZCk7Ci0KLQluICs9IHNjbnByaW50ZihidWYrbiwgYnVmbGVuLW4sICIgJyUuKnMnIiwgc3QtPmdpZC5sZW4sIHN0LT5naWQuc3RyKTsKLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiglZCkiLCBzdC0+bl9naWQpOwotCi0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiICclLipzJyIsIHN0LT5tdWlkLmxlbiwgc3QtPm11aWQuc3RyKTsKLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiglZCkiLCBzdC0+bl9tdWlkKTsKLQotCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiBxICIpOwotCW4gKz0gcDlfcHJpbnRxaWQoYnVmK24sIGJ1Zmxlbi1uLCAmc3QtPnFpZCk7Ci0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIG0gIik7Ci0JbiArPSBwOV9wcmludHBlcm0oYnVmK24sIGJ1Zmxlbi1uLCBzdC0+bW9kZSk7Ci0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIGF0ICVkIG10ICVkIGwgJWxsZCIsCi0JCXN0LT5hdGltZSwgc3QtPm10aW1lLCAobG9uZyBsb25nIGludCkgc3QtPmxlbmd0aCk7Ci0KLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiBleHQgJyUuKnMnIiwKLQkJCXN0LT5leHRlbnNpb24ubGVuLCBzdC0+ZXh0ZW5zaW9uLnN0cik7Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludAotcDlfZHVtcGRhdGEoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1OCAqZGF0YSwgaW50IGRhdGFsZW4pCi17Ci0JaW50IGksIG47Ci0KLQlpID0gbiA9IDA7Ci0Jd2hpbGUgKGkgPCBkYXRhbGVuKSB7Ci0JCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIlMDJ4IiwgZGF0YVtpXSk7Ci0JCWlmIChpJTQgPT0gMykKLQkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIgIik7Ci0JCWlmIChpJTMyID09IDMxKQotCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7Ci0KLQkJaSsrOwotCX0KLQluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiXG4iKTsKLQotCXJldHVybiBuOwotfQotCi1zdGF0aWMgaW50Ci1wOV9wcmludGRhdGEoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1OCAqZGF0YSwgaW50IGRhdGFsZW4pCi17Ci0JcmV0dXJuIHA5X2R1bXBkYXRhKGJ1ZiwgYnVmbGVuLCBkYXRhLCBkYXRhbGVuIDwgMTY/ZGF0YWxlbjoxNik7Ci19Ci0KLS8qKgotICogcDlfcHJpbnRmY2FsbCAtIGRlY29kZSBhbmQgcHJpbnQgYSBwcm90b2NvbCBzdHJ1Y3R1cmUgaW50byBhIGJ1ZmZlcgotICogQGJ1ZjogYnVmZmVyIHRvIGRlcG9zaXQgZGVjb2RlZCBzdHJ1Y3R1cmUgaW50bwotICogQGJ1ZmxlbjogYXZhaWxhYmxlIHNwYWNlIGluIGJ1ZmZlcgotICogQGZjOiBwcm90b2NvbCBycGMgc3RydWN0dXJlIG9mIHR5cGUgJnA5X2ZjYWxsCi0gKiBAZXh0ZW5kZWQ6IHdoZXRoZXIgb3Igbm90IHNlc3Npb24gaXMgb3BlcmF0aW5nIHdpdGggZXh0ZW5kZWQgcHJvdG9jb2wKLSAqLwotCi1pbnQKLXA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZXh0ZW5kZWQpCi17Ci0JaW50IGksIHJldCwgdHlwZSwgdGFnOwotCi0JaWYgKCFmYykKLQkJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIjxOVUxMPiIpOwotCi0JdHlwZSA9IGZjLT5pZDsKLQl0YWcgPSBmYy0+dGFnOwotCi0JcmV0ID0gMDsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFA5X1RWRVJTSU9OOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkJIlR2ZXJzaW9uIHRhZyAldSBtc2l6ZSAldSB2ZXJzaW9uICclLipzJyIsIHRhZywKLQkJCQlmYy0+cGFyYW1zLnR2ZXJzaW9uLm1zaXplLAotCQkJCWZjLT5wYXJhbXMudHZlcnNpb24udmVyc2lvbi5sZW4sCi0JCQkJZmMtPnBhcmFtcy50dmVyc2lvbi52ZXJzaW9uLnN0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SVkVSU0lPTjoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCSJSdmVyc2lvbiB0YWcgJXUgbXNpemUgJXUgdmVyc2lvbiAnJS4qcyciLCB0YWcsCi0JCQkJZmMtPnBhcmFtcy5ydmVyc2lvbi5tc2l6ZSwKLQkJCQlmYy0+cGFyYW1zLnJ2ZXJzaW9uLnZlcnNpb24ubGVuLAotCQkJCWZjLT5wYXJhbXMucnZlcnNpb24udmVyc2lvbi5zdHIpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVEFVVEg6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUYXV0aCB0YWcgJXUgYWZpZCAlZCB1bmFtZSAnJS4qcycgYW5hbWUgJyUuKnMnIiwgdGFnLAotCQkJZmMtPnBhcmFtcy50YXV0aC5hZmlkLCBmYy0+cGFyYW1zLnRhdXRoLnVuYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGF1dGgudW5hbWUuc3RyLCBmYy0+cGFyYW1zLnRhdXRoLmFuYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGF1dGguYW5hbWUuc3RyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JBVVRIOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSYXV0aCB0YWcgJXUgcWlkICIsIHRhZyk7Ci0JCXA5X3ByaW50cWlkKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnJhdXRoLnFpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UQVRUQUNIOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCSAiVGF0dGFjaCB0YWcgJXUgZmlkICVkIGFmaWQgJWQgdW5hbWUgJyUuKnMnIGFuYW1lICclLipzJyIsIHRhZywKLQkJIGZjLT5wYXJhbXMudGF0dGFjaC5maWQsIGZjLT5wYXJhbXMudGF0dGFjaC5hZmlkLAotCQkgZmMtPnBhcmFtcy50YXR0YWNoLnVuYW1lLmxlbiwgZmMtPnBhcmFtcy50YXR0YWNoLnVuYW1lLnN0ciwKLQkJIGZjLT5wYXJhbXMudGF0dGFjaC5hbmFtZS5sZW4sIGZjLT5wYXJhbXMudGF0dGFjaC5hbmFtZS5zdHIpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUkFUVEFDSDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmF0dGFjaCB0YWcgJXUgcWlkICIsCi0JCQkJCQkJCQl0YWcpOwotCQlwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LCAmZmMtPnBhcmFtcy5yYXR0YWNoLnFpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SRVJST1I6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCQkiUmVycm9yIHRhZyAldSBlbmFtZSAnJS4qcyciLCB0YWcsCi0JCQkJZmMtPnBhcmFtcy5yZXJyb3IuZXJyb3IubGVuLAotCQkJCWZjLT5wYXJhbXMucmVycm9yLmVycm9yLnN0cik7Ci0JCWlmIChleHRlbmRlZCkKLQkJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIiBlY29kZSAlZFxuIiwKLQkJCQlmYy0+cGFyYW1zLnJlcnJvci5lcnJubyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9URkxVU0g6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRmbHVzaCB0YWcgJXUgb2xkdGFnICV1IiwKLQkJCXRhZywgZmMtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JGTFVTSDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmZsdXNoIHRhZyAldSIsIHRhZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UV0FMSzoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJIlR3YWxrIHRhZyAldSBmaWQgJWQgbmV3ZmlkICVkIG53bmFtZSAlZCIsIHRhZywKLQkJCWZjLT5wYXJhbXMudHdhbGsuZmlkLCBmYy0+cGFyYW1zLnR3YWxrLm5ld2ZpZCwKLQkJCWZjLT5wYXJhbXMudHdhbGsubnduYW1lKTsKLQkJZm9yIChpID0gMDsgaSA8IGZjLT5wYXJhbXMudHdhbGsubnduYW1lOyBpKyspCi0JCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgJyUuKnMnIiwKLQkJCQlmYy0+cGFyYW1zLnR3YWxrLnduYW1lc1tpXS5sZW4sCi0JCQkJZmMtPnBhcmFtcy50d2Fsay53bmFtZXNbaV0uc3RyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JXQUxLOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSd2FsayB0YWcgJXUgbndxaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnJ3YWxrLm53cWlkKTsKLQkJZm9yIChpID0gMDsgaSA8IGZjLT5wYXJhbXMucndhbGsubndxaWQ7IGkrKykKLQkJCXJldCArPSBwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCSZmYy0+cGFyYW1zLnJ3YWxrLndxaWRzW2ldKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RPUEVOOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkiVG9wZW4gdGFnICV1IGZpZCAlZCBtb2RlICVkIiwgdGFnLAotCQkJZmMtPnBhcmFtcy50b3Blbi5maWQsIGZjLT5wYXJhbXMudG9wZW4ubW9kZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9ST1BFTjoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUm9wZW4gdGFnICV1IiwgdGFnKTsKLQkJcmV0ICs9IHA5X3ByaW50cWlkKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnJvcGVuLnFpZCk7Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIiBpb3VuaXQgJWQiLAotCQkJZmMtPnBhcmFtcy5yb3Blbi5pb3VuaXQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVENSRUFURToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJIlRjcmVhdGUgdGFnICV1IGZpZCAlZCBuYW1lICclLipzJyBwZXJtICIsIHRhZywKLQkJCWZjLT5wYXJhbXMudGNyZWF0ZS5maWQsIGZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lLnN0cik7Ci0KLQkJcmV0ICs9IHA5X3ByaW50cGVybShidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkJZmMtPnBhcmFtcy50Y3JlYXRlLnBlcm0pOwotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgbW9kZSAlZCIsCi0JCQlmYy0+cGFyYW1zLnRjcmVhdGUubW9kZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SQ1JFQVRFOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSY3JlYXRlIHRhZyAldSIsIHRhZyk7Ci0JCXJldCArPSBwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkJJmZjLT5wYXJhbXMucmNyZWF0ZS5xaWQpOwotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgaW91bml0ICVkIiwKLQkJCWZjLT5wYXJhbXMucmNyZWF0ZS5pb3VuaXQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVFJFQUQ6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUcmVhZCB0YWcgJXUgZmlkICVkIG9mZnNldCAlbGxkIGNvdW50ICV1IiwgdGFnLAotCQkJZmMtPnBhcmFtcy50cmVhZC5maWQsCi0JCQkobG9uZyBsb25nIGludCkgZmMtPnBhcmFtcy50cmVhZC5vZmZzZXQsCi0JCQlmYy0+cGFyYW1zLnRyZWFkLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JSRUFEOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkiUnJlYWQgdGFnICV1IGNvdW50ICV1IGRhdGEgIiwgdGFnLAotCQkJZmMtPnBhcmFtcy5ycmVhZC5jb3VudCk7Ci0JCXJldCArPSBwOV9wcmludGRhdGEoYnVmK3JldCwgYnVmbGVuLXJldCwgZmMtPnBhcmFtcy5ycmVhZC5kYXRhLAotCQkJZmMtPnBhcmFtcy5ycmVhZC5jb3VudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UV1JJVEU6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUd3JpdGUgdGFnICV1IGZpZCAlZCBvZmZzZXQgJWxsZCBjb3VudCAldSBkYXRhICIsCi0JCQl0YWcsIGZjLT5wYXJhbXMudHdyaXRlLmZpZCwKLQkJCShsb25nIGxvbmcgaW50KSBmYy0+cGFyYW1zLnR3cml0ZS5vZmZzZXQsCi0JCQlmYy0+cGFyYW1zLnR3cml0ZS5jb3VudCk7Ci0JCXJldCArPSBwOV9wcmludGRhdGEoYnVmK3JldCwgYnVmbGVuLXJldCwgZmMtPnBhcmFtcy50d3JpdGUuZGF0YSwKLQkJCWZjLT5wYXJhbXMudHdyaXRlLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JXUklURToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUndyaXRlIHRhZyAldSBjb3VudCAldSIsCi0JCQl0YWcsIGZjLT5wYXJhbXMucndyaXRlLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RDTFVOSzoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiVGNsdW5rIHRhZyAldSBmaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnRjbHVuay5maWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUkNMVU5LOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSY2x1bmsgdGFnICV1IiwgdGFnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RSRU1PVkU6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRyZW1vdmUgdGFnICV1IGZpZCAlZCIsCi0JCQl0YWcsIGZjLT5wYXJhbXMudHJlbW92ZS5maWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUlJFTU9WRToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUnJlbW92ZSB0YWcgJXUiLCB0YWcpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVFNUQVQ6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRzdGF0IHRhZyAldSBmaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnRzdGF0LmZpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SU1RBVDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUnN0YXQgdGFnICV1ICIsIHRhZyk7Ci0JCXJldCArPSBwOV9wcmludHN0YXQoYnVmK3JldCwgYnVmbGVuLXJldCwgJmZjLT5wYXJhbXMucnN0YXQuc3RhdCwKLQkJCWV4dGVuZGVkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RXU1RBVDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiVHdzdGF0IHRhZyAldSBmaWQgJWQgIiwKLQkJCXRhZywgZmMtPnBhcmFtcy50d3N0YXQuZmlkKTsKLQkJcmV0ICs9IHA5X3ByaW50c3RhdChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkmZmMtPnBhcmFtcy50d3N0YXQuc3RhdCwgZXh0ZW5kZWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUldTVEFUOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSd3N0YXQgdGFnICV1IiwgdGFnKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJ1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLSNlbHNlCi1pbnQKLXA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZXh0ZW5kZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX05FVF85UF9ERUJVRyAqLwotRVhQT1JUX1NZTUJPTChwOV9wcmludGZjYWxsKTsKLQpkaWZmIC0tZ2l0IGEvbmV0LzlwL21vZC5jIGIvbmV0LzlwL21vZC5jCmluZGV4IDEwODRmZWIuLmNmOGE0MTIgMTAwNjQ0Ci0tLSBhL25ldC85cC9tb2QuYworKysgYi9uZXQvOXAvbW9kLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvOXAvcHJvdG9jb2wuYyBiL25ldC85cC9wcm90b2NvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZDc2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvOXAvcHJvdG9jb2wuYwpAQCAtMCwwICsxLDU2NyBAQAorLyoKKyAqIG5ldC85cC9wcm90b2NvbC5jCisgKgorICogOVAgUHJvdG9jb2wgU3VwcG9ydCBDb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICoKKyAqICBCYXNlIG9uIGNvZGUgZnJvbSBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgorI2luY2x1ZGUgInByb3RvY29sLmgiCisKKyNpZm5kZWYgTUlOCisjZGVmaW5lIE1JTihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2lmbmRlZiBNQVgKKyNkZWZpbmUgTUFYKGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjaWZuZGVmIG9mZnNldF9vZgorI2RlZmluZSBvZmZzZXRfb2YodHlwZSwgbWVtYikgXAorCSgodW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5tZW1iKSkKKyNlbmRpZgorI2lmbmRlZiBjb250YWluZXJfb2YKKyNkZWZpbmUgY29udGFpbmVyX29mKG9iaiwgdHlwZSwgbWVtYikgXAorCSgodHlwZSAqKSgoKGNoYXIgKilvYmopIC0gb2Zmc2V0X29mKHR5cGUsIG1lbWIpKSkKKyNlbmRpZgorCitzdGF0aWMgaW50CitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwordm9pZAorcDlwZHVfZHVtcChpbnQgd2F5LCBzdHJ1Y3QgcDlfZmNhbGwgKnBkdSkKK3sKKwlpbnQgaSwgbjsKKwl1OCAqZGF0YSA9IHBkdS0+c2RhdGE7CisJaW50IGRhdGFsZW4gPSBwZHUtPnNpemU7CisJY2hhciBidWZbMjU1XTsKKwlpbnQgYnVmbGVuID0gMjU1OworCisJaSA9IG4gPSAwOworCWlmIChkYXRhbGVuID4gKGJ1Zmxlbi0xNikpCisJCWRhdGFsZW4gPSBidWZsZW4tMTY7CisJd2hpbGUgKGkgPCBkYXRhbGVuKSB7CisJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIlMDJ4ICIsIGRhdGFbaV0pOworCQlpZiAoaSU0ID09IDMpCisJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiICIpOworCQlpZiAoaSUzMiA9PSAzMSkKKwkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICJcbiIpOworCisJCWkrKzsKKwl9CisJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7CisKKwlpZiAod2F5KQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1BLVCwgIltbWyglZCkgJXNcbiIsIGRhdGFsZW4sIGJ1Zik7CisJZWxzZQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1BLVCwgIl1dXSglZCkgJXNcbiIsIGRhdGFsZW4sIGJ1Zik7Cit9CisjZWxzZQordm9pZAorcDlwZHVfZHVtcChpbnQgd2F5LCBzdHJ1Y3QgcDlfZmNhbGwgKnBkdSkKK3sKK30KKyNlbmRpZgorRVhQT1JUX1NZTUJPTChwOXBkdV9kdW1wKTsKKwordm9pZCBwOXN0YXRfZnJlZShzdHJ1Y3QgcDlfd3N0YXQgKnN0YnVmKQoreworCWtmcmVlKHN0YnVmLT5uYW1lKTsKKwlrZnJlZShzdGJ1Zi0+dWlkKTsKKwlrZnJlZShzdGJ1Zi0+Z2lkKTsKKwlrZnJlZShzdGJ1Zi0+bXVpZCk7CisJa2ZyZWUoc3RidWYtPmV4dGVuc2lvbik7Cit9CitFWFBPUlRfU1lNQk9MKHA5c3RhdF9mcmVlKTsKKworc3RhdGljIHNpemVfdCBwZHVfcmVhZChzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGxlbiA9IE1JTihwZHUtPnNpemUgLSBwZHUtPm9mZnNldCwgc2l6ZSk7CisJbWVtY3B5KGRhdGEsICZwZHUtPnNkYXRhW3BkdS0+b2Zmc2V0XSwgbGVuKTsKKwlwZHUtPm9mZnNldCArPSBsZW47CisJcmV0dXJuIHNpemUgLSBsZW47Cit9CisKK3N0YXRpYyBzaXplX3QgcGR1X3dyaXRlKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgbGVuID0gTUlOKHBkdS0+Y2FwYWNpdHkgLSBwZHUtPnNpemUsIHNpemUpOworCW1lbWNweSgmcGR1LT5zZGF0YVtwZHUtPnNpemVdLCBkYXRhLCBsZW4pOworCXBkdS0+c2l6ZSArPSBsZW47CisJcmV0dXJuIHNpemUgLSBsZW47Cit9CisKK3N0YXRpYyBzaXplX3QKK3BkdV93cml0ZV91KHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBjb25zdCBjaGFyIF9fdXNlciAqdWRhdGEsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBsZW4gPSBNSU4ocGR1LT5jYXBhY2l0eSAtIHBkdS0+c2l6ZSwgc2l6ZSk7CisJaW50IGVyciA9IGNvcHlfZnJvbV91c2VyKCZwZHUtPnNkYXRhW3BkdS0+c2l6ZV0sIHVkYXRhLCBsZW4pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBkdV93cml0ZV91IHJldHVybmluZzogJWRcbiIsIGVycik7CisKKwlwZHUtPnNpemUgKz0gbGVuOworCXJldHVybiBzaXplIC0gbGVuOworfQorCisvKgorCWIgLSBpbnQ4X3QKKwl3IC0gaW50MTZfdAorCWQgLSBpbnQzMl90CisJcSAtIGludDY0X3QKKwlzIC0gc3RyaW5nCisJUyAtIHN0YXQKKwlRIC0gcWlkCisJRCAtIGRhdGEgYmxvYiAoaW50MzJfdCBzaXplIGZvbGxvd2VkIGJ5IHZvaWQgKiwgcmVzdWx0cyBhcmUgbm90IGZyZWVkKQorCVQgLSBhcnJheSBvZiBzdHJpbmdzIChpbnQxNl90IGNvdW50LCBmb2xsb3dlZCBieSBzdHJpbmdzKQorCVIgLSBhcnJheSBvZiBxaWRzIChpbnQxNl90IGNvdW50LCBmb2xsb3dlZCBieSBxaWRzKQorCT8gLSBpZiBvcHRpb25hbCA9IDEsIGNvbnRpbnVlIHBhcnNpbmcKKyovCisKK3N0YXRpYyBpbnQKK3A5cGR1X3ZyZWFkZihzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50IG9wdGlvbmFsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJY29uc3QgY2hhciAqcHRyOworCWludCBlcnJjb2RlID0gMDsKKworCWZvciAocHRyID0gZm10OyAqcHRyOyBwdHIrKykgeworCQlzd2l0Y2ggKCpwdHIpIHsKKwkJY2FzZSAnYic6eworCQkJCWludDhfdCAqdmFsID0gdmFfYXJnKGFwLCBpbnQ4X3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAndyc6eworCQkJCWludDE2X3QgKnZhbCA9IHZhX2FyZyhhcCwgaW50MTZfdCAqKTsKKwkJCQlpZiAocGR1X3JlYWQocGR1LCB2YWwsIHNpemVvZigqdmFsKSkpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkqdmFsID0gY3B1X3RvX2xlMTYoKnZhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnZCc6eworCQkJCWludDMyX3QgKnZhbCA9IHZhX2FyZyhhcCwgaW50MzJfdCAqKTsKKwkJCQlpZiAocGR1X3JlYWQocGR1LCB2YWwsIHNpemVvZigqdmFsKSkpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkqdmFsID0gY3B1X3RvX2xlMzIoKnZhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncSc6eworCQkJCWludDY0X3QgKnZhbCA9IHZhX2FyZyhhcCwgaW50NjRfdCAqKTsKKwkJCQlpZiAocGR1X3JlYWQocGR1LCB2YWwsIHNpemVvZigqdmFsKSkpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkqdmFsID0gY3B1X3RvX2xlNjQoKnZhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncyc6eworCQkJCWNoYXIgKipzcHRyID0gdmFfYXJnKGFwLCBjaGFyICoqKTsKKwkJCQlpbnQxNl90IGxlbjsKKwkJCQlpbnQgc2l6ZTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLCAidyIsICZsZW4pOworCQkJCWlmIChlcnJjb2RlKQorCQkJCQlicmVhazsKKworCQkJCXNpemUgPSBNQVgobGVuLCAwKTsKKworCQkJCSpzcHRyID0ga21hbGxvYyhzaXplICsgMSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCpzcHRyID09IE5VTEwpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAocGR1X3JlYWQocGR1LCAqc3B0ciwgc2l6ZSkpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWtmcmVlKCpzcHRyKTsKKwkJCQkJKnNwdHIgPSBOVUxMOworCQkJCX0gZWxzZQorCQkJCQkoKnNwdHIpW3NpemVdID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdRJzp7CisJCQkJc3RydWN0IHA5X3FpZCAqcWlkID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfcWlkICopOworCisJCQkJZXJyY29kZSA9IHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJiZHEiLAorCQkJCQkJICAgICAgJnFpZC0+dHlwZSwgJnFpZC0+dmVyc2lvbiwKKwkJCQkJCSAgICAgICZxaWQtPnBhdGgpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1MnOnsKKwkJCQlzdHJ1Y3QgcDlfd3N0YXQgKnN0YnVmID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfd3N0YXQgKik7CisKKwkJCQltZW1zZXQoc3RidWYsIDAsIHNpemVvZihzdHJ1Y3QgcDlfd3N0YXQpKTsKKwkJCQlzdGJ1Zi0+bl91aWQgPSBzdGJ1Zi0+bl9naWQgPSBzdGJ1Zi0+bl9tdWlkID0KKwkJCQkJCQkJCS0xOworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJInd3ZFFkZGRxc3Nzcz9zZGRkIiwKKwkJCQkJCSZzdGJ1Zi0+c2l6ZSwgJnN0YnVmLT50eXBlLAorCQkJCQkJJnN0YnVmLT5kZXYsICZzdGJ1Zi0+cWlkLAorCQkJCQkJJnN0YnVmLT5tb2RlLCAmc3RidWYtPmF0aW1lLAorCQkJCQkJJnN0YnVmLT5tdGltZSwgJnN0YnVmLT5sZW5ndGgsCisJCQkJCQkmc3RidWYtPm5hbWUsICZzdGJ1Zi0+dWlkLAorCQkJCQkJJnN0YnVmLT5naWQsICZzdGJ1Zi0+bXVpZCwKKwkJCQkJCSZzdGJ1Zi0+ZXh0ZW5zaW9uLAorCQkJCQkJJnN0YnVmLT5uX3VpZCwgJnN0YnVmLT5uX2dpZCwKKwkJCQkJCSZzdGJ1Zi0+bl9tdWlkKTsKKwkJCQlpZiAoZXJyY29kZSkKKwkJCQkJcDlzdGF0X2ZyZWUoc3RidWYpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0QnOnsKKwkJCQlpbnQzMl90ICpjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCAqKTsKKwkJCQl2b2lkICoqZGF0YSA9IHZhX2FyZyhhcCwgdm9pZCAqKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCSpjb3VudCA9CisJCQkJCSAgICBNSU4oKmNvdW50LAorCQkJCQkJcGR1LT5zaXplIC0gcGR1LT5vZmZzZXQpOworCQkJCQkqZGF0YSA9ICZwZHUtPnNkYXRhW3BkdS0+b2Zmc2V0XTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnVCc6eworCQkJCWludDE2X3QgKm53bmFtZSA9IHZhX2FyZyhhcCwgaW50MTZfdCAqKTsKKwkJCQljaGFyICoqKnduYW1lcyA9IHZhX2FyZyhhcCwgY2hhciAqKiopOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJKnduYW1lcyA9CisJCQkJCSAgICBrbWFsbG9jKHNpemVvZihjaGFyICopICogKm53bmFtZSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCEqd25hbWVzKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbnduYW1lOyBpKyspIHsKKwkJCQkJCWVycmNvZGUgPQorCQkJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkJCSJzIiwKKwkJCQkJCQkJJigqd25hbWVzKVtpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChlcnJjb2RlKSB7CisJCQkJCWlmICgqd25hbWVzKSB7CisJCQkJCQlpbnQgaTsKKworCQkJCQkJZm9yIChpID0gMDsgaSA8ICpud25hbWU7IGkrKykKKwkJCQkJCQlrZnJlZSgoKnduYW1lcylbaV0pOworCQkJCQl9CisJCQkJCWtmcmVlKCp3bmFtZXMpOworCQkJCQkqd25hbWVzID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnUic6eworCQkJCWludDE2X3QgKm53cWlkID0gdmFfYXJnKGFwLCBpbnQxNl90ICopOworCQkJCXN0cnVjdCBwOV9xaWQgKip3cWlkcyA9CisJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKik7CisKKwkJCQkqd3FpZHMgPSBOVUxMOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbndxaWQpOworCQkJCWlmICghZXJyY29kZSkgeworCQkJCQkqd3FpZHMgPQorCQkJCQkgICAga21hbGxvYygqbndxaWQgKgorCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCp3cWlkcyA9PSBOVUxMKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbndxaWQ7IGkrKykgeworCQkJCQkJZXJyY29kZSA9CisJCQkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJIlEiLAorCQkJCQkJCQkmKCp3cWlkcylbaV0pOworCQkJCQkJaWYgKGVycmNvZGUpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoZXJyY29kZSkgeworCQkJCQlrZnJlZSgqd3FpZHMpOworCQkJCQkqd3FpZHMgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWlmICghb3B0aW9uYWwpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJjb2RlOworfQorCitpbnQKK3A5cGR1X3Z3cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwlpbnQgZXJyY29kZSA9IDA7CisKKwlmb3IgKHB0ciA9IGZtdDsgKnB0cjsgcHRyKyspIHsKKwkJc3dpdGNoICgqcHRyKSB7CisJCWNhc2UgJ2InOnsKKwkJCQlpbnQ4X3QgdmFsID0gdmFfYXJnKGFwLCBpbnQpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3cnOnsKKwkJCQlpbnQxNl90IHZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlpZiAocGR1X3dyaXRlKHBkdSwgJnZhbCwgc2l6ZW9mKHZhbCkpKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdkJzp7CisJCQkJaW50MzJfdCB2YWwgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3EnOnsKKwkJCQlpbnQ2NF90IHZhbCA9IHZhX2FyZyhhcCwgaW50NjRfdCk7CisJCQkJaWYgKHBkdV93cml0ZShwZHUsICZ2YWwsIHNpemVvZih2YWwpKSkKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncyc6eworCQkJCWNvbnN0IGNoYXIgKnNwdHIgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKik7CisJCQkJaW50MTZfdCBsZW4gPSAwOworCQkJCWlmIChzcHRyKQorCQkJCQlsZW4gPSBNSU4oc3RybGVuKHNwdHIpLCBVU0hPUlRfTUFYKTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBsZW4pOworCQkJCWlmICghZXJyY29kZSAmJiBwZHVfd3JpdGUocGR1LCBzcHRyLCBsZW4pKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdRJzp7CisJCQkJY29uc3Qgc3RydWN0IHA5X3FpZCAqcWlkID0KKwkJCQkgICAgdmFfYXJnKGFwLCBjb25zdCBzdHJ1Y3QgcDlfcWlkICopOworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgImJkcSIsCisJCQkJCQkgcWlkLT50eXBlLCBxaWQtPnZlcnNpb24sCisJCQkJCQkgcWlkLT5wYXRoKTsKKwkJCX0gYnJlYWs7CisJCWNhc2UgJ1MnOnsKKwkJCQljb25zdCBzdHJ1Y3QgcDlfd3N0YXQgKnN0YnVmID0KKwkJCQkgICAgdmFfYXJnKGFwLCBjb25zdCBzdHJ1Y3QgcDlfd3N0YXQgKik7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJICJ3d2RRZGRkcXNzc3M/c2RkZCIsCisJCQkJCQkgc3RidWYtPnNpemUsIHN0YnVmLT50eXBlLAorCQkJCQkJIHN0YnVmLT5kZXYsICZzdGJ1Zi0+cWlkLAorCQkJCQkJIHN0YnVmLT5tb2RlLCBzdGJ1Zi0+YXRpbWUsCisJCQkJCQkgc3RidWYtPm10aW1lLCBzdGJ1Zi0+bGVuZ3RoLAorCQkJCQkJIHN0YnVmLT5uYW1lLCBzdGJ1Zi0+dWlkLAorCQkJCQkJIHN0YnVmLT5naWQsIHN0YnVmLT5tdWlkLAorCQkJCQkJIHN0YnVmLT5leHRlbnNpb24sIHN0YnVmLT5uX3VpZCwKKwkJCQkJCSBzdGJ1Zi0+bl9naWQsIHN0YnVmLT5uX211aWQpOworCQkJfSBicmVhazsKKwkJY2FzZSAnRCc6eworCQkJCWludDMyX3QgY291bnQgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWNvbnN0IHZvaWQgKmRhdGEgPSB2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsICJkIiwgY291bnQpOworCQkJCWlmICghZXJyY29kZSAmJiBwZHVfd3JpdGUocGR1LCBkYXRhLCBjb3VudCkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1UnOnsKKwkJCQlpbnQzMl90IGNvdW50ID0gdmFfYXJnKGFwLCBpbnQzMl90KTsKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWRhdGEgPQorCQkJCQkJdmFfYXJnKGFwLCBjb25zdCB2b2lkIF9fdXNlciAqKTsKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsICJkIiwgY291bnQpOworCQkJCWlmICghZXJyY29kZSAmJiBwZHVfd3JpdGVfdShwZHUsIHVkYXRhLCBjb3VudCkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1QnOnsKKwkJCQlpbnQxNl90IG53bmFtZSA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQljb25zdCBjaGFyICoqd25hbWVzID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICoqKTsKKworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBud25hbWUpOworCQkJCWlmICghZXJyY29kZSkgeworCQkJCQlpbnQgaTsKKworCQkJCQlmb3IgKGkgPSAwOyBpIDwgbnduYW1lOyBpKyspIHsKKwkJCQkJCWVycmNvZGUgPQorCQkJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJCQkgInMiLAorCQkJCQkJCQkgd25hbWVzW2ldKTsKKwkJCQkJCWlmIChlcnJjb2RlKQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1InOnsKKwkJCQlpbnQxNl90IG53cWlkID0gdmFfYXJnKGFwLCBpbnQpOworCQkJCXN0cnVjdCBwOV9xaWQgKndxaWRzID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfcWlkICopOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAidyIsIG53cWlkKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJaW50IGk7CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IG53cWlkOyBpKyspIHsKKwkJCQkJCWVycmNvZGUgPQorCQkJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJCQkgIlEiLAorCQkJCQkJCQkgJndxaWRzW2ldKTsKKwkJCQkJCWlmIChlcnJjb2RlKQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJz8nOgorCQkJaWYgKCFvcHRpb25hbCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChlcnJjb2RlKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycmNvZGU7Cit9CisKK2ludCBwOXBkdV9yZWFkZihzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50IG9wdGlvbmFsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSBwOXBkdV92cmVhZGYocGR1LCBvcHRpb25hbCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3A5cGR1X3dyaXRlZihzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50IG9wdGlvbmFsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSBwOXBkdV92d3JpdGVmKHBkdSwgb3B0aW9uYWwsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcDlzdGF0X3JlYWQoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgcDlfd3N0YXQgKnN0LCBpbnQgZG90dSkKK3sKKwlzdHJ1Y3QgcDlfZmNhbGwgZmFrZV9wZHU7CisJaW50IHJldDsKKworCWZha2VfcGR1LnNpemUgPSBsZW47CisJZmFrZV9wZHUuY2FwYWNpdHkgPSBsZW47CisJZmFrZV9wZHUuc2RhdGEgPSBidWY7CisJZmFrZV9wZHUub2Zmc2V0ID0gMDsKKworCXJldCA9IHA5cGR1X3JlYWRmKCZmYWtlX3BkdSwgZG90dSwgIlMiLCBzdCk7CisJaWYgKHJldCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IHA5c3RhdF9yZWFkIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXA5cGR1X2R1bXAoMSwgJmZha2VfcGR1KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwOXN0YXRfcmVhZCk7CisKK2ludCBwOXBkdV9wcmVwYXJlKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQxNl90IHRhZywgaW50OF90IHR5cGUpCit7CisJcmV0dXJuIHA5cGR1X3dyaXRlZihwZHUsIDAsICJkYnciLCAwLCB0eXBlLCB0YWcpOworfQorCitpbnQgcDlwZHVfZmluYWxpemUoc3RydWN0IHA5X2ZjYWxsICpwZHUpCit7CisJaW50IHNpemUgPSBwZHUtPnNpemU7CisJaW50IGVycjsKKworCXBkdS0+c2l6ZSA9IDA7CisJZXJyID0gcDlwZHVfd3JpdGVmKHBkdSwgMCwgImQiLCBzaXplKTsKKwlwZHUtPnNpemUgPSBzaXplOworCisjaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRworCWlmICgocDlfZGVidWdfbGV2ZWwgJiBQOV9ERUJVR19QS1QpID09IFA5X0RFQlVHX1BLVCkKKwkJcDlwZHVfZHVtcCgwLCBwZHUpOworI2VuZGlmCisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IHNpemU9JWQgdHlwZTogJWQgdGFnOiAlZFxuIiwgcGR1LT5zaXplLAorCQkJCQkJCXBkdS0+aWQsIHBkdS0+dGFnKTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcDlwZHVfcmVzZXQoc3RydWN0IHA5X2ZjYWxsICpwZHUpCit7CisJcGR1LT5vZmZzZXQgPSAwOworCXBkdS0+c2l6ZSA9IDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvOXAvcHJvdG9jb2wuaCBiL25ldC85cC9wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZGU0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvOXAvcHJvdG9jb2wuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogbmV0LzlwL3Byb3RvY29sLmgKKyAqCisgKiA5UCBQcm90b2NvbCBTdXBwb3J0IENvZGUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IEVyaWMgVmFuIEhlbnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+CisgKgorICogIEJhc2Ugb24gY29kZSBmcm9tIEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAdXMuaWJtLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggYnkgSUJNLCBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG86CisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKiAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgorICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQorICoKKyAqLworCitpbnQKK3A5cGR1X3Z3cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKK2ludCBwOXBkdV9yZWFkZihzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50IG9wdGlvbmFsLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgcDlwZHVfcHJlcGFyZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50MTZfdCB0YWcsIGludDhfdCB0eXBlKTsKK2ludCBwOXBkdV9maW5hbGl6ZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSk7Cit2b2lkIHA5cGR1X2R1bXAoaW50LCBzdHJ1Y3QgcDlfZmNhbGwgKik7Cit2b2lkIHA5cGR1X3Jlc2V0KHN0cnVjdCBwOV9mY2FsbCAqcGR1KTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19mZC5jIGIvbmV0LzlwL3RyYW5zX2ZkLmMKaW5kZXggNmRhYmJkYi4uMWRmMDM1NiAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2ZkLmMKKysrIGIvbmV0LzlwL3RyYW5zX2ZkLmMKQEAgLTM5LDEyICszOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KKyNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+CiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogCiAjZGVmaW5lIFA5X1BPUlQgNTY0CiAjZGVmaW5lIE1BWF9TT0NLX0JVRiAoNjQqMTAyNCkKLSNkZWZpbmUgRVJSRVFGTFVTSAkxCi0jZGVmaW5lIFNDSEVEX1RJTUVPVVQJMTAKICNkZWZpbmUgTUFYUE9MTFdBRERSCTIKIAogLyoqCkBAIC02MSw3ICs2MCw2IEBACiAJdTE2IHBvcnQ7CiB9OwogCi0KIC8qKgogICogc3RydWN0IHA5X3RyYW5zX2ZkIC0gdHJhbnNwb3J0IHN0YXRlCiAgKiBAcmQ6IHJlZmVyZW5jZSB0byBmaWxlIHRvIHJlYWQgZnJvbQpAQCAtMTAwLDYwICs5OCwyMiBAQAogCVdwZW5kaW5nID0gOCwJCS8qIGNhbiB3cml0ZSAqLwogfTsKIAotZW51bSB7Ci0JTm9uZSwKLQlGbHVzaGluZywKLQlGbHVzaGVkLAotfTsKLQotc3RydWN0IHA5X3JlcTsKLXR5cGVkZWYgdm9pZCAoKnA5X2Nvbm5fcmVxX2NhbGxiYWNrKShzdHJ1Y3QgcDlfcmVxICpyZXEsIHZvaWQgKmEpOwotCi0vKioKLSAqIHN0cnVjdCBwOV9yZXEgLSBmZCBtdXggZW5jb2Rpbmcgb2YgYW4gcnBjIHRyYW5zYWN0aW9uCi0gKiBAbG9jazogcHJvdGVjdHMgcmVxX2xpc3QKLSAqIEB0YWc6IG51bWVyaWMgdGFnIGZvciBycGMgdHJhbnNhY3Rpb24KLSAqIEB0Y2FsbDogcmVxdWVzdCAmcDlfZmNhbGwgc3RydWN0dXJlCi0gKiBAcmNhbGw6IHJlc3BvbnNlICZwOV9mY2FsbCBzdHJ1Y3R1cmUKLSAqIEBlcnI6IGVycm9yIHN0YXRlCi0gKiBAY2I6IGNhbGxiYWNrIGZvciB3aGVuIHJlc3BvbnNlIGlzIHJlY2VpdmVkCi0gKiBAY2JhOiBhcmd1bWVudCB0byBwYXNzIHRvIGNhbGxiYWNrCi0gKiBAZmx1c2g6IGZsYWcgdG8gaW5kaWNhdGUgUlBDIGhhcyBiZWVuIGZsdXNoZWQKLSAqIEByZXFfbGlzdDogbGlzdCBsaW5rIGZvciBoaWdoZXIgbGV2ZWwgb2JqZWN0cyB0byBjaGFpbiByZXF1ZXN0cwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfcmVxIHsKLQlzcGlubG9ja190IGxvY2s7Ci0JaW50IHRhZzsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjYWxsOwotCXN0cnVjdCBwOV9mY2FsbCAqcmNhbGw7Ci0JaW50IGVycjsKLQlwOV9jb25uX3JlcV9jYWxsYmFjayBjYjsKLQl2b2lkICpjYmE7Ci0JaW50IGZsdXNoOwotCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7Ci19OwotCi1zdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXN0cnVjdCBsaXN0X2hlYWQgbXV4X2xpc3Q7Ci0JaW50IG11eG51bTsKK3N0cnVjdCBwOV9wb2xsX3dhaXQgeworCXN0cnVjdCBwOV9jb25uICpjb25uOworCXdhaXRfcXVldWVfdCB3YWl0OworCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHI7CiB9OwogCiAvKioKICAqIHN0cnVjdCBwOV9jb25uIC0gZmQgbXV4IGNvbm5lY3Rpb24gc3RhdGUgaW5mb3JtYXRpb24KLSAqIEBsb2NrOiBwcm90ZWN0cyBtdXhfbGlzdCAoPykKICAqIEBtdXhfbGlzdDogbGlzdCBsaW5rIGZvciBtdXggdG8gbWFuYWdlIG11bHRpcGxlIGNvbm5lY3Rpb25zICg/KQotICogQHBvbGxfdGFzazogdGFzayBwb2xsaW5nIG9uIHRoaXMgY29ubmVjdGlvbgotICogQG1zaXplOiBtYXhpbXVtIHNpemUgZm9yIGNvbm5lY3Rpb24gKGR1cCkKLSAqIEBleHRlbmRlZDogOXAyMDAwLnUgZmxhZyAoZHVwKQotICogQHRyYW5zOiByZWZlcmVuY2UgdG8gdHJhbnNwb3J0IGluc3RhbmNlIGZvciB0aGlzIGNvbm5lY3Rpb24KLSAqIEB0YWdwb29sOiBpZCBhY2NvdW50aW5nIGZvciB0cmFuc2FjdGlvbnMKKyAqIEBjbGllbnQ6IHJlZmVyZW5jZSB0byBjbGllbnQgaW5zdGFuY2UgZm9yIHRoaXMgY29ubmVjdGlvbgogICogQGVycjogZXJyb3Igc3RhdGUKICAqIEByZXFfbGlzdDogYWNjb3VudGluZyBmb3IgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHNlbnQKICAqIEB1bnNlbnRfcmVxX2xpc3Q6IGFjY291bnRpbmcgZm9yIHJlcXVlc3RzIHRoYXQgaGF2ZW4ndCBiZWVuIHNlbnQKLSAqIEByY2FsbDogY3VycmVudCByZXNwb25zZSAmcDlfZmNhbGwgc3RydWN0dXJlCisgKiBAcmVxOiBjdXJyZW50IHJlcXVlc3QgYmVpbmcgcHJvY2Vzc2VkIChpZiBhbnkpCisgKiBAdG1wX2J1ZjogdGVtcG9yYXJ5IGJ1ZmZlciB0byByZWFkIGluIGhlYWRlcgorICogQHJzaXplOiBhbW91bnQgdG8gcmVhZCBmb3IgY3VycmVudCBmcmFtZQogICogQHJwb3M6IHJlYWQgcG9zaXRpb24gaW4gY3VycmVudCBmcmFtZQogICogQHJidWY6IGN1cnJlbnQgcmVhZCBidWZmZXIKICAqIEB3cG9zOiB3cml0ZSBwb3NpdGlvbiBmb3IgY3VycmVudCBmcmFtZQpAQCAtMTY5LDQwOSArMTI5LDMwMCBAQAogICovCiAKIHN0cnVjdCBwOV9jb25uIHsKLQlzcGlubG9ja190IGxvY2s7IC8qIHByb3RlY3QgbG9jayBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG11eF9saXN0OwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICpwb2xsX3Rhc2s7Ci0JaW50IG1zaXplOwotCXVuc2lnbmVkIGNoYXIgZXh0ZW5kZWQ7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKLQlzdHJ1Y3QgcDlfaWRwb29sICp0YWdwb29sOworCXN0cnVjdCBwOV9jbGllbnQgKmNsaWVudDsKIAlpbnQgZXJyOwogCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCB1bnNlbnRfcmVxX2xpc3Q7Ci0Jc3RydWN0IHA5X2ZjYWxsICpyY2FsbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyIHRtcF9idWZbN107CisJaW50IHJzaXplOwogCWludCBycG9zOwogCWNoYXIgKnJidWY7CiAJaW50IHdwb3M7CiAJaW50IHdzaXplOwogCWNoYXIgKndidWY7Ci0Jd2FpdF9xdWV1ZV90IHBvbGxfd2FpdFtNQVhQT0xMV0FERFJdOwotCXdhaXRfcXVldWVfaGVhZF90ICpwb2xsX3dhZGRyW01BWFBPTExXQUREUl07CisJc3RydWN0IGxpc3RfaGVhZCBwb2xsX3BlbmRpbmdfbGluazsKKwlzdHJ1Y3QgcDlfcG9sbF93YWl0IHBvbGxfd2FpdFtNQVhQT0xMV0FERFJdOwogCXBvbGxfdGFibGUgcHQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJxOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3cTsKIAl1bnNpZ25lZCBsb25nIHdzY2hlZDsKIH07CiAKLS8qKgotICogc3RydWN0IHA5X211eF9ycGMgLSBmZCBtdXggcnBjIGFjY291bnRpbmcgc3RydWN0dXJlCi0gKiBAbTogY29ubmVjdGlvbiB0aGlzIHJlcXVlc3Qgd2FzIGlzc3VlZCBvbgotICogQGVycjogZXJyb3Igc3RhdGUKLSAqIEB0Y2FsbDogcmVxdWVzdCAmcDlfZmNhbGwKLSAqIEByY2FsbDogcmVzcG9uc2UgJnA5X2ZjYWxsCi0gKiBAd3F1ZXVlOiB3YWl0IHF1ZXVlIHRoYXQgY2xpZW50IGlzIGJsb2NrZWQgb24gZm9yIHRoaXMgcnBjCi0gKgotICogQnVnOiBpc24ndCB0aGlzIGluZm9ybWF0aW9uIGR1cGxpY2F0ZWQgZWxzZXdoZXJlIGxpa2UgJnA5X3JlcQotICovCi0KLXN0cnVjdCBwOV9tdXhfcnBjIHsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGNhbGw7Ci0Jc3RydWN0IHA5X2ZjYWxsICpyY2FsbDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cXVldWU7Ci19OwotCi1zdGF0aWMgaW50IHA5X3BvbGxfcHJvYyh2b2lkICopOwotc3RhdGljIHZvaWQgcDlfcmVhZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCBwOV93cml0ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCBwOV9wb2xsd2FpdChzdHJ1Y3QgZmlsZSAqZmlscCwgd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXRfYWRkcmVzcywKLQkJCQkJCQkJcG9sbF90YWJsZSAqcCk7Ci1zdGF0aWMgaW50IHA5X2ZkX3dyaXRlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pOwotc3RhdGljIGludCBwOV9mZF9yZWFkKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pOwotCi1zdGF0aWMgREVGSU5FX01VVEVYKHA5X211eF90YXNrX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhwOV9wb2xsX2xvY2spOworc3RhdGljIExJU1RfSEVBRChwOV9wb2xsX3BlbmRpbmdfbGlzdCk7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnA5X211eF93cTsKLQotc3RhdGljIGludCBwOV9tdXhfbnVtOwotc3RhdGljIGludCBwOV9tdXhfcG9sbF90YXNrX251bTsKLXN0YXRpYyBzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayBwOV9tdXhfcG9sbF90YXNrc1sxMDBdOwotCi1zdGF0aWMgdm9pZCBwOV9jb25uX2Rlc3Ryb3koc3RydWN0IHA5X2Nvbm4gKik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHA5X2ZkX3BvbGwoc3RydWN0IHA5X3RyYW5zICp0cmFucywKLQkJCQkJCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHQpOwotCi0jaWZkZWYgUDlfTk9OQkxPQ0sKLXN0YXRpYyBpbnQgcDlfY29ubl9ycGNuYihzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X2ZjYWxsICp0YywKLQlwOV9jb25uX3JlcV9jYWxsYmFjayBjYiwgdm9pZCAqYSk7Ci0jZW5kaWYgLyogUDlfTk9OQkxPQ0sgKi8KLQotc3RhdGljIHZvaWQgcDlfY29ubl9jYW5jZWwoc3RydWN0IHA5X2Nvbm4gKm0sIGludCBlcnIpOwotCi1zdGF0aWMgdTE2IHA5X211eF9nZXRfdGFnKHN0cnVjdCBwOV9jb25uICptKQotewotCWludCB0YWc7Ci0KLQl0YWcgPSBwOV9pZHBvb2xfZ2V0KG0tPnRhZ3Bvb2wpOwotCWlmICh0YWcgPCAwKQotCQlyZXR1cm4gUDlfTk9UQUc7Ci0JZWxzZQotCQlyZXR1cm4gKHUxNikgdGFnOwotfQotCi1zdGF0aWMgdm9pZCBwOV9tdXhfcHV0X3RhZyhzdHJ1Y3QgcDlfY29ubiAqbSwgdTE2IHRhZykKLXsKLQlpZiAodGFnICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayh0YWcsIG0tPnRhZ3Bvb2wpKQotCQlwOV9pZHBvb2xfcHV0KHRhZywgbS0+dGFncG9vbCk7Ci19Ci0KLS8qKgotICogcDlfbXV4X2NhbGNfcG9sbF9wcm9jcyAtIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBwb2xsaW5nIHByb2NzCi0gKiBAbXV4bnVtOiBudW1iZXIgb2YgbW91bnRzCi0gKgotICogQ2FsY3VsYXRpb24gaXMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBtb3VudGVkIHY5ZnMgZmlsZXN5c3RlbXMuCi0gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHNxcnQgb2YgdGhlIG51bWJlciBvZiBtb3VudHMuCi0gKi8KLQotc3RhdGljIGludCBwOV9tdXhfY2FsY19wb2xsX3Byb2NzKGludCBtdXhudW0pCi17Ci0JaW50IG47Ci0KLQlpZiAocDlfbXV4X3BvbGxfdGFza19udW0pCi0JCW4gPSBtdXhudW0gLyBwOV9tdXhfcG9sbF90YXNrX251bSArCi0JCSAgICAobXV4bnVtICUgcDlfbXV4X3BvbGxfdGFza19udW0gPyAxIDogMCk7Ci0JZWxzZQotCQluID0gMTsKLQotCWlmIChuID4gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcykpCi0JCW4gPSBBUlJBWV9TSVpFKHA5X211eF9wb2xsX3Rhc2tzKTsKLQotCXJldHVybiBuOwotfQotCi1zdGF0aWMgaW50IHA5X211eF9wb2xsX3N0YXJ0KHN0cnVjdCBwOV9jb25uICptKQotewotCWludCBpLCBuOwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICp2cHQsICp2cHRsYXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHByb2M7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBtdXhudW0gJWQgcHJvY251bSAlZFxuIiwgbSwgcDlfbXV4X251bSwKLQkJcDlfbXV4X3BvbGxfdGFza19udW0pOwotCW11dGV4X2xvY2soJnA5X211eF90YXNrX2xvY2spOwotCi0JbiA9IHA5X211eF9jYWxjX3BvbGxfcHJvY3MocDlfbXV4X251bSArIDEpOwotCWlmIChuID4gcDlfbXV4X3BvbGxfdGFza19udW0pIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpOyBpKyspIHsKLQkJCWlmIChwOV9tdXhfcG9sbF90YXNrc1tpXS50YXNrID09IE5VTEwpIHsKLQkJCQl2cHQgPSAmcDlfbXV4X3BvbGxfdGFza3NbaV07Ci0JCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJjcmVhdGUgcHJvYyAlcFxuIiwKLQkJCQkJCQkJCXZwdCk7Ci0JCQkJcHByb2MgPSBrdGhyZWFkX2NyZWF0ZShwOV9wb2xsX3Byb2MsIHZwdCwKLQkJCQkJCQkJInY5ZnMtcG9sbCIpOwotCi0JCQkJaWYgKCFJU19FUlIocHByb2MpKSB7Ci0JCQkJCXZwdC0+dGFzayA9IHBwcm9jOwotCQkJCQlJTklUX0xJU1RfSEVBRCgmdnB0LT5tdXhfbGlzdCk7Ci0JCQkJCXZwdC0+bXV4bnVtID0gMDsKLQkJCQkJcDlfbXV4X3BvbGxfdGFza19udW0rKzsKLQkJCQkJd2FrZV91cF9wcm9jZXNzKHZwdC0+dGFzayk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKGkgPj0gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcykpCi0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCQkid2FybmluZzogbm8gZnJlZSBwb2xsIHNsb3RzXG4iKTsKLQl9Ci0KLQluID0gKHA5X211eF9udW0gKyAxKSAvIHA5X211eF9wb2xsX3Rhc2tfbnVtICsKLQkgICAgKChwOV9tdXhfbnVtICsgMSkgJSBwOV9tdXhfcG9sbF90YXNrX251bSA/IDEgOiAwKTsKLQotCXZwdGxhc3QgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHA5X211eF9wb2xsX3Rhc2tzKTsgaSsrKSB7Ci0JCXZwdCA9ICZwOV9tdXhfcG9sbF90YXNrc1tpXTsKLQkJaWYgKHZwdC0+dGFzayAhPSBOVUxMKSB7Ci0JCQl2cHRsYXN0ID0gdnB0OwotCQkJaWYgKHZwdC0+bXV4bnVtIDwgbikgewotCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAicHV0IGluIHByb2MgJWRcbiIsIGkpOwotCQkJCWxpc3RfYWRkKCZtLT5tdXhfbGlzdCwgJnZwdC0+bXV4X2xpc3QpOwotCQkJCXZwdC0+bXV4bnVtKys7Ci0JCQkJbS0+cG9sbF90YXNrID0gdnB0OwotCQkJCW1lbXNldCgmbS0+cG9sbF93YWRkciwgMCwKLQkJCQkJCQlzaXplb2YobS0+cG9sbF93YWRkcikpOwotCQkJCWluaXRfcG9sbF9mdW5jcHRyKCZtLT5wdCwgcDlfcG9sbHdhaXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGkgPj0gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcykpIHsKLQkJaWYgKHZwdGxhc3QgPT0gTlVMTCkgewotCQkJbXV0ZXhfdW5sb2NrKCZwOV9tdXhfdGFza19sb2NrKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJwdXQgaW4gcHJvYyAlZFxuIiwgaSk7Ci0JCWxpc3RfYWRkKCZtLT5tdXhfbGlzdCwgJnZwdGxhc3QtPm11eF9saXN0KTsKLQkJdnB0bGFzdC0+bXV4bnVtKys7Ci0JCW0tPnBvbGxfdGFzayA9IHZwdGxhc3Q7Ci0JCW1lbXNldCgmbS0+cG9sbF93YWRkciwgMCwgc2l6ZW9mKG0tPnBvbGxfd2FkZHIpKTsKLQkJaW5pdF9wb2xsX2Z1bmNwdHIoJm0tPnB0LCBwOV9wb2xsd2FpdCk7Ci0JfQotCi0JcDlfbXV4X251bSsrOwotCW11dGV4X3VubG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA5X3BvbGxfdGFzazsKIAogc3RhdGljIHZvaWQgcDlfbXV4X3BvbGxfc3RvcChzdHJ1Y3QgcDlfY29ubiAqbSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICp2cHQ7CiAKLQltdXRleF9sb2NrKCZwOV9tdXhfdGFza19sb2NrKTsKLQl2cHQgPSBtLT5wb2xsX3Rhc2s7Ci0JbGlzdF9kZWwoJm0tPm11eF9saXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtLT5wb2xsX3dhZGRyKTsgaSsrKSB7Ci0JCWlmIChtLT5wb2xsX3dhZGRyW2ldICE9IE5VTEwpIHsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKG0tPnBvbGxfd2FkZHJbaV0sICZtLT5wb2xsX3dhaXRbaV0pOwotCQkJbS0+cG9sbF93YWRkcltpXSA9IE5VTEw7Ci0JCX0KLQl9Ci0JdnB0LT5tdXhudW0tLTsKLQlpZiAoIXZwdC0+bXV4bnVtKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZGVzdHJveSBwcm9jICVwXG4iLCB2cHQpOwotCQlrdGhyZWFkX3N0b3AodnB0LT50YXNrKTsKLQkJdnB0LT50YXNrID0gTlVMTDsKLQkJcDlfbXV4X3BvbGxfdGFza19udW0tLTsKLQl9Ci0JcDlfbXV4X251bS0tOwotCW11dGV4X3VubG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci19CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWl0KTsgaSsrKSB7CisJCXN0cnVjdCBwOV9wb2xsX3dhaXQgKnB3YWl0ID0gJm0tPnBvbGxfd2FpdFtpXTsKIAotLyoqCi0gKiBwOV9jb25uX2NyZWF0ZSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwZXItc2Vzc2lvbiBtdXggZGF0YQotICogQHRyYW5zOiB0cmFuc3BvcnQgc3RydWN0dXJlCi0gKgotICogTm90ZTogQ3JlYXRlcyB0aGUgcG9sbGluZyB0YXNrIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHNlc3Npb24uCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwOV9jb25uICpwOV9jb25uX2NyZWF0ZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zKQotewotCWludCBpLCBuOwotCXN0cnVjdCBwOV9jb25uICptOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJ0cmFuc3BvcnQgJXAgbXNpemUgJWRcbiIsIHRyYW5zLAotCQkJCQkJCQl0cmFucy0+bXNpemUpOwotCW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfY29ubiksIEdGUF9LRVJORUwpOwotCWlmICghbSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbS0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm0tPm11eF9saXN0KTsKLQltLT5tc2l6ZSA9IHRyYW5zLT5tc2l6ZTsKLQltLT5leHRlbmRlZCA9IHRyYW5zLT5leHRlbmRlZDsKLQltLT50cmFucyA9IHRyYW5zOwotCW0tPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7Ci0JaWYgKElTX0VSUihtLT50YWdwb29sKSkgewotCQlrZnJlZShtKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJm0tPnJlcV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbS0+dW5zZW50X3JlcV9saXN0KTsKLQlJTklUX1dPUksoJm0tPnJxLCBwOV9yZWFkX3dvcmspOwotCUlOSVRfV09SSygmbS0+d3EsIHA5X3dyaXRlX3dvcmspOwotCW4gPSBwOV9tdXhfcG9sbF9zdGFydChtKTsKLQlpZiAobikgewotCQlrZnJlZShtKTsKLQkJcmV0dXJuIEVSUl9QVFIobik7Ci0JfQotCi0JbiA9IHA5X2ZkX3BvbGwodHJhbnMsICZtLT5wdCk7Ci0JaWYgKG4gJiBQT0xMSU4pIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHJlYWRcbiIsIG0pOwotCQlzZXRfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQl9Ci0KLQlpZiAobiAmIFBPTExPVVQpIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKLQkJc2V0X2JpdChXcGVuZGluZywgJm0tPndzY2hlZCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWRkcik7IGkrKykgewotCQlpZiAoSVNfRVJSKG0tPnBvbGxfd2FkZHJbaV0pKSB7Ci0JCQlwOV9tdXhfcG9sbF9zdG9wKG0pOwotCQkJa2ZyZWUobSk7Ci0JCQlyZXR1cm4gKHZvaWQgKiltLT5wb2xsX3dhZGRyOwkvKiB0aGUgZXJyb3IgY29kZSAqLworCQlpZiAocHdhaXQtPndhaXRfYWRkcikgeworCQkJcmVtb3ZlX3dhaXRfcXVldWUocHdhaXQtPndhaXRfYWRkciwgJnB3YWl0LT53YWl0KTsKKwkJCXB3YWl0LT53YWl0X2FkZHIgPSBOVUxMOwogCQl9CiAJfQogCi0JcmV0dXJuIG07CisJc3Bpbl9sb2NrX2lycXNhdmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJm0tPnBvbGxfcGVuZGluZ19saW5rKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiBwOV9tdXhfZGVzdHJveSAtIGNhbmNlbHMgYWxsIHBlbmRpbmcgcmVxdWVzdHMgYW5kIGZyZWVzIG11eCByZXNvdXJjZXMKLSAqIEBtOiBtdXggdG8gZGVzdHJveQorICogcDlfY29ubl9jYW5jZWwgLSBjYW5jZWwgYWxsIHBlbmRpbmcgcmVxdWVzdHMgd2l0aCBlcnJvcgorICogQG06IG11eCBkYXRhCisgKiBAZXJyOiBlcnJvciBjb2RlCiAgKgogICovCiAKLXN0YXRpYyB2b2lkIHA5X2Nvbm5fZGVzdHJveShzdHJ1Y3QgcDlfY29ubiAqbSkKK3N0YXRpYyB2b2lkIHA5X2Nvbm5fY2FuY2VsKHN0cnVjdCBwOV9jb25uICptLCBpbnQgZXJyKQogewotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHByZXYgJXAgbmV4dCAlcFxuIiwgbSwKLQkJbS0+bXV4X2xpc3QucHJldiwgbS0+bXV4X2xpc3QubmV4dCk7CisJc3RydWN0IHA5X3JlcV90ICpyZXEsICpydG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGNhbmNlbF9saXN0KTsKIAotCXA5X211eF9wb2xsX3N0b3AobSk7Ci0JY2FuY2VsX3dvcmtfc3luYygmbS0+cnEpOwotCWNhbmNlbF93b3JrX3N5bmMoJm0tPndxKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibXV4ICVwIGVyciAlZFxuIiwgbSwgZXJyKTsKIAotCXA5X2Nvbm5fY2FuY2VsKG0sIC1FQ09OTlJFU0VUKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbS0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CiAKLQltLT50cmFucyA9IE5VTEw7Ci0JcDlfaWRwb29sX2Rlc3Ryb3kobS0+dGFncG9vbCk7Ci0Ja2ZyZWUobSk7CisJaWYgKG0tPmVycikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5jbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCW0tPmVyciA9IGVycjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT5yZXFfbGlzdCwgcmVxX2xpc3QpIHsKKwkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX0VSUk9SOworCQlpZiAoIXJlcS0+dF9lcnIpCisJCQlyZXEtPnRfZXJyID0gZXJyOworCQlsaXN0X21vdmUoJnJlcS0+cmVxX2xpc3QsICZjYW5jZWxfbGlzdCk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT51bnNlbnRfcmVxX2xpc3QsIHJlcV9saXN0KSB7CisJCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19FUlJPUjsKKwkJaWYgKCFyZXEtPnRfZXJyKQorCQkJcmVxLT50X2VyciA9IGVycjsKKwkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5jbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZjYW5jZWxfbGlzdCwgcmVxX2xpc3QpIHsKKwkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY2FsbCBiYWNrIHJlcSAlcFxuIiwgcmVxKTsKKwkJcDlfY2xpZW50X2NiKG0tPmNsaWVudCwgcmVxKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3A5X2ZkX3BvbGwoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KQoreworCWludCByZXQsIG47CisJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CisKKwlpZiAoY2xpZW50ICYmIGNsaWVudC0+c3RhdHVzID09IENvbm5lY3RlZCkKKwkJdHMgPSBjbGllbnQtPnRyYW5zOworCisJaWYgKCF0cykKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoIXRzLT5yZC0+Zl9vcCB8fCAhdHMtPnJkLT5mX29wLT5wb2xsKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghdHMtPndyLT5mX29wIHx8ICF0cy0+d3ItPmZfb3AtPnBvbGwpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gdHMtPnJkLT5mX29wLT5wb2xsKHRzLT5yZCwgcHQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHRzLT5yZCAhPSB0cy0+d3IpIHsKKwkJbiA9IHRzLT53ci0+Zl9vcC0+cG9sbCh0cy0+d3IsIHB0KTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuIG47CisJCXJldCA9IChyZXQgJiB+UE9MTE9VVCkgfCAobiAmIH5QT0xMSU4pOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgotICogcDlfcG9sbHdhaXQgLSBhZGQgcG9sbCB0YXNrIHRvIHRoZSB3YWl0IHF1ZXVlCi0gKiBAZmlscDogZmlsZSBwb2ludGVyIGJlaW5nIHBvbGxlZAotICogQHdhaXRfYWRkcmVzczogd2FpdF9xIHRvIGJsb2NrIG9uCi0gKiBAcDogcG9sbCBzdGF0ZQorICogcDlfZmRfcmVhZC0gcmVhZCBmcm9tIGEgZmQKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQorICogQHY6IGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgaW50bworICogQGxlbjogc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlcgogICoKLSAqIGNhbGxlZCBieSBmaWxlcyBwb2xsIG9wZXJhdGlvbiB0byBhZGQgdjlmcy1wb2xsIHRhc2sgdG8gZmlsZXMgd2FpdCBxdWV1ZQogICovCiAKLXN0YXRpYyB2b2lkCi1wOV9wb2xsd2FpdChzdHJ1Y3QgZmlsZSAqZmlscCwgd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXRfYWRkcmVzcywgcG9sbF90YWJsZSAqcCkKK3N0YXRpYyBpbnQgcDlfZmRfcmVhZChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHZvaWQgKnYsIGludCBsZW4pCiB7Ci0JaW50IGk7CisJaW50IHJldDsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gTlVMTDsKKworCWlmIChjbGllbnQgJiYgY2xpZW50LT5zdGF0dXMgIT0gRGlzY29ubmVjdGVkKQorCQl0cyA9IGNsaWVudC0+dHJhbnM7CisKKwlpZiAoIXRzKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCWlmICghKHRzLT5yZC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgcmVhZCAuLi5cbiIpOworCisJcmV0ID0ga2VybmVsX3JlYWQodHMtPnJkLCB0cy0+cmQtPmZfcG9zLCB2LCBsZW4pOworCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQorCQljbGllbnQtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHA5X3JlYWRfd29yayAtIGNhbGxlZCB3aGVuIHRoZXJlIGlzIHNvbWUgZGF0YSB0byBiZSByZWFkIGZyb20gYSB0cmFuc3BvcnQKKyAqIEB3b3JrOiBjb250YWluZXIgb2Ygd29yayB0byBiZSBkb25lCisgKgorICovCisKK3N0YXRpYyB2b2lkIHA5X3JlYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IG4sIGVycjsKIAlzdHJ1Y3QgcDlfY29ubiAqbTsKIAotCW0gPSBjb250YWluZXJfb2YocCwgc3RydWN0IHA5X2Nvbm4sIHB0KTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtLT5wb2xsX3dhZGRyKTsgaSsrKQotCQlpZiAobS0+cG9sbF93YWRkcltpXSA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQlpZiAoaSA+PSBBUlJBWV9TSVpFKG0tPnBvbGxfd2FkZHIpKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJub3QgZW5vdWdoIHdhaXRfYWRkcmVzcyBzbG90c1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltLT5wb2xsX3dhZGRyW2ldID0gd2FpdF9hZGRyZXNzOwotCi0JaWYgKCF3YWl0X2FkZHJlc3MpIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm5vIHdhaXRfYWRkcmVzc1xuIik7Ci0JCW0tPnBvbGxfd2FkZHJbaV0gPSBFUlJfUFRSKC1FSU8pOwotCQlyZXR1cm47Ci0JfQotCi0JaW5pdF93YWl0cXVldWVfZW50cnkoJm0tPnBvbGxfd2FpdFtpXSwgbS0+cG9sbF90YXNrLT50YXNrKTsKLQlhZGRfd2FpdF9xdWV1ZSh3YWl0X2FkZHJlc3MsICZtLT5wb2xsX3dhaXRbaV0pOwotfQotCi0vKioKLSAqIHA5X3BvbGxfbXV4IC0gcG9sbHMgYSBtdXggYW5kIHNjaGVkdWxlcyByZWFkIG9yIHdyaXRlIHdvcmtzIGlmIG5lY2Vzc2FyeQotICogQG06IGNvbm5lY3Rpb24gdG8gcG9sbAotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBwOV9wb2xsX211eChzdHJ1Y3QgcDlfY29ubiAqbSkKLXsKLQlpbnQgbjsKKwltID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwOV9jb25uLCBycSk7CiAKIAlpZiAobS0+ZXJyIDwgMCkKIAkJcmV0dXJuOwogCi0JbiA9IHA5X2ZkX3BvbGwobS0+dHJhbnMsIE5VTEwpOwotCWlmIChuIDwgMCB8fCBuICYgKFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTE5WQUwpKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZXJyb3IgbXV4ICVwIGVyciAlZFxuIiwgbSwgbik7Ci0JCWlmIChuID49IDApCi0JCQluID0gLUVDT05OUkVTRVQ7Ci0JCXA5X2Nvbm5fY2FuY2VsKG0sIG4pOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzdGFydCBtdXggJXAgcG9zICVkXG4iLCBtLCBtLT5ycG9zKTsKKworCWlmICghbS0+cmJ1ZikgeworCQltLT5yYnVmID0gbS0+dG1wX2J1ZjsKKwkJbS0+cnBvcyA9IDA7CisJCW0tPnJzaXplID0gNzsgLyogc3RhcnQgYnkgcmVhZGluZyBoZWFkZXIgKi8KIAl9CiAKLQlpZiAobiAmIFBPTExJTikgewotCQlzZXRfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHJlYWRcbiIsIG0pOwotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKLQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic2NoZWR1bGUgcmVhZCB3b3JrICVwXG4iLCBtKTsKKwljbGVhcl9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJyZWFkIG11eCAlcCBwb3MgJWQgc2l6ZTogJWQgPSAlZFxuIiwgbSwKKwkJCQkJbS0+cnBvcywgbS0+cnNpemUsIG0tPnJzaXplLW0tPnJwb3MpOworCWVyciA9IHA5X2ZkX3JlYWQobS0+Y2xpZW50LCBtLT5yYnVmICsgbS0+cnBvcywKKwkJCQkJCW0tPnJzaXplIC0gbS0+cnBvcyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBnb3QgJWQgYnl0ZXNcbiIsIG0sIGVycik7CisJaWYgKGVyciA9PSAtRUFHQUlOKSB7CisJCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlcnIgPD0gMCkKKwkJZ290byBlcnJvcjsKKworCW0tPnJwb3MgKz0gZXJyOworCisJaWYgKCghbS0+cmVxKSAmJiAobS0+cnBvcyA9PSBtLT5yc2l6ZSkpIHsgLyogaGVhZGVyIHJlYWQgaW4gKi8KKwkJdTE2IHRhZzsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImdvdCBuZXcgaGVhZGVyXG4iKTsKKworCQluID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikgbS0+cmJ1Zik7IC8qIHJlYWQgcGFja2V0IHNpemUgKi8KKwkJaWYgKG4gPj0gbS0+Y2xpZW50LT5tc2l6ZSkgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkicmVxdWVzdGVkIHBhY2tldCBzaXplIHRvbyBiaWc6ICVkXG4iLCBuKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJdGFnID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikgKG0tPnJidWYrNSkpOyAvKiByZWFkIHRhZyAqLworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLAorCQkJIm11eCAlcCBwa3Q6IHNpemU6ICVkIGJ5dGVzIHRhZzogJWRcbiIsIG0sIG4sIHRhZyk7CisKKwkJbS0+cmVxID0gcDlfdGFnX2xvb2t1cChtLT5jbGllbnQsIHRhZyk7CisJCWlmICghbS0+cmVxKSB7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiVW5leHBlY3RlZCBwYWNrZXQgdGFnICVkXG4iLAorCQkJCQkJCQkgdGFnKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJaWYgKG0tPnJlcS0+cmMgPT0gTlVMTCkgeworCQkJbS0+cmVxLT5yYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKworCQkJCQkJbS0+Y2xpZW50LT5tc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW0tPnJlcS0+cmMpIHsKKwkJCQltLT5yZXEgPSBOVUxMOworCQkJCWVyciA9IC1FTk9NRU07CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCQltLT5yYnVmID0gKGNoYXIgKiltLT5yZXEtPnJjICsgc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCk7CisJCW1lbWNweShtLT5yYnVmLCBtLT50bXBfYnVmLCBtLT5yc2l6ZSk7CisJCW0tPnJzaXplID0gbjsKKwl9CisKKwkvKiBub3QgYW4gZWxzZSBiZWNhdXNlIHNvbWUgcGFja2V0cyAobGlrZSBjbHVuaykgaGF2ZSBubyBwYXlsb2FkICovCisJaWYgKChtLT5yZXEpICYmIChtLT5ycG9zID09IG0tPnJzaXplKSkgeyAvKiBwYWNrZXQgaXMgcmVhZCBpbiAqLworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiZ290IG5ldyBwYWNrZXRcbiIpOworCQlzcGluX2xvY2soJm0tPmNsaWVudC0+bG9jayk7CisJCWxpc3RfZGVsKCZtLT5yZXEtPnJlcV9saXN0KTsKKwkJc3Bpbl91bmxvY2soJm0tPmNsaWVudC0+bG9jayk7CisJCXA5X2NsaWVudF9jYihtLT5jbGllbnQsIG0tPnJlcSk7CisKKwkJbS0+cmJ1ZiA9IE5VTEw7CisJCW0tPnJwb3MgPSAwOworCQltLT5yc2l6ZSA9IDA7CisJCW0tPnJlcSA9IE5VTEw7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZtLT5yZXFfbGlzdCkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChScGVuZGluZywgJm0tPndzY2hlZCkpCisJCQluID0gUE9MTElOOworCQllbHNlCisJCQluID0gcDlfZmRfcG9sbChtLT5jbGllbnQsIE5VTEwpOworCisJCWlmIChuICYgUE9MTElOKSB7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAic2NoZWQgcmVhZCB3b3JrICVwXG4iLCBtKTsKIAkJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+cnEpOwotCQl9Ci0JfQorCQl9IGVsc2UKKwkJCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKKwl9IGVsc2UKKwkJY2xlYXJfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwogCi0JaWYgKG4gJiBQT0xMT1VUKSB7Ci0JCXNldF9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBjYW4gd3JpdGVcbiIsIG0pOwotCQlpZiAoKG0tPndzaXplIHx8ICFsaXN0X2VtcHR5KCZtLT51bnNlbnRfcmVxX2xpc3QpKQotCQkgICAgJiYgIXRlc3RfYW5kX3NldF9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKLQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic2NoZWR1bGUgd3JpdGUgd29yayAlcFxuIiwgbSk7Ci0JCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPndxKTsKLQkJfQotCX0KKwlyZXR1cm47CitlcnJvcjoKKwlwOV9jb25uX2NhbmNlbChtLCBlcnIpOworCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKIH0KIAogLyoqCi0gKiBwOV9wb2xsX3Byb2MgLSBwb2xsIHdvcmtlciB0aHJlYWQKLSAqIEBhOiB0aHJlYWQgc3RhdGUgYW5kIGFyZ3VtZW50cwotICoKLSAqIHBvbGxzIGFsbCB2OWZzIHRyYW5zcG9ydHMgZm9yIG5ldyBldmVudHMgYW5kIHF1ZXVlcyB0aGUgYXBwcm9wcmlhdGUKLSAqIHdvcmsgdG8gdGhlIHdvcmsgcXVldWUKKyAqIHA5X2ZkX3dyaXRlIC0gd3JpdGUgdG8gYSBzb2NrZXQKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQorICogQHY6IGJ1ZmZlciB0byBzZW5kIGRhdGEgZnJvbQorICogQGxlbjogc2l6ZSBvZiBzZW5kIGJ1ZmZlcgogICoKICAqLwogCi1zdGF0aWMgaW50IHA5X3BvbGxfcHJvYyh2b2lkICphKQorc3RhdGljIGludCBwOV9mZF93cml0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHZvaWQgKnYsIGludCBsZW4pCiB7Ci0Jc3RydWN0IHA5X2Nvbm4gKm0sICptdG1wOwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICp2cHQ7CisJaW50IHJldDsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CiAKLQl2cHQgPSBhOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic3RhcnQgJXAgJXBcbiIsIGN1cnJlbnQsIHZwdCk7Ci0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAoY2xpZW50ICYmIGNsaWVudC0+c3RhdHVzICE9IERpc2Nvbm5lY3RlZCkKKwkJdHMgPSBjbGllbnQtPnRyYW5zOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtLCBtdG1wLCAmdnB0LT5tdXhfbGlzdCwgbXV4X2xpc3QpIHsKLQkJCXA5X3BvbGxfbXV4KG0pOwotCQl9CisJaWYgKCF0cykKKwkJcmV0dXJuIC1FUkVNT1RFSU87CiAKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJzbGVlcGluZy4uLlxuIik7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoU0NIRURfVElNRU9VVCAqIEhaKTsKLQl9CisJaWYgKCEodHMtPndyLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCisJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJibG9ja2luZyB3cml0ZSAuLi5cbiIpOwogCi0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmluaXNoXG4iKTsKLQlyZXR1cm4gMDsKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisJLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLworCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOworCXNldF9mcyhvbGRmcyk7CisKKwlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKKwkJY2xpZW50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01ODQsNyArNDM1LDcgQEAKIHsKIAlpbnQgbiwgZXJyOwogCXN0cnVjdCBwOV9jb25uICptOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKIAogCW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHA5X2Nvbm4sIHdxKTsKIApAQCAtNTk5LDI1ICs0NTAsMjMgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCXNwaW5fbG9jaygmbS0+bG9jayk7Ci1hZ2FpbjoKLQkJcmVxID0gbGlzdF9lbnRyeShtLT51bnNlbnRfcmVxX2xpc3QubmV4dCwgc3RydWN0IHA5X3JlcSwKKwkJc3Bpbl9sb2NrKCZtLT5jbGllbnQtPmxvY2spOworCQlyZXEgPSBsaXN0X2VudHJ5KG0tPnVuc2VudF9yZXFfbGlzdC5uZXh0LCBzdHJ1Y3QgcDlfcmVxX3QsCiAJCQkgICAgICAgcmVxX2xpc3QpOworCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfU0VOVDsKIAkJbGlzdF9tb3ZlX3RhaWwoJnJlcS0+cmVxX2xpc3QsICZtLT5yZXFfbGlzdCk7Ci0JCWlmIChyZXEtPmVyciA9PSBFUlJFUUZMVVNIKQotCQkJZ290byBhZ2FpbjsKIAotCQltLT53YnVmID0gcmVxLT50Y2FsbC0+c2RhdGE7Ci0JCW0tPndzaXplID0gcmVxLT50Y2FsbC0+c2l6ZTsKKwkJbS0+d2J1ZiA9IHJlcS0+dGMtPnNkYXRhOworCQltLT53c2l6ZSA9IHJlcS0+dGMtPnNpemU7CiAJCW0tPndwb3MgPSAwOwotCQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZtLT5jbGllbnQtPmxvY2spOwogCX0KIAotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHBvcyAlZCBzaXplICVkXG4iLCBtLCBtLT53cG9zLAorCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgcG9zICVkIHNpemUgJWRcbiIsIG0sIG0tPndwb3MsCiAJCQkJCQkJCW0tPndzaXplKTsKIAljbGVhcl9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOwotCWVyciA9IHA5X2ZkX3dyaXRlKG0tPnRyYW5zLCBtLT53YnVmICsgbS0+d3BvcywgbS0+d3NpemUgLSBtLT53cG9zKTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBzZW50ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOworCWVyciA9IHA5X2ZkX3dyaXRlKG0tPmNsaWVudCwgbS0+d2J1ZiArIG0tPndwb3MsIG0tPndzaXplIC0gbS0+d3Bvcyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBzZW50ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOwogCWlmIChlcnIgPT0gLUVBR0FJTikgewogCQljbGVhcl9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCk7CiAJCXJldHVybjsKQEAgLTYzOCwxMCArNDg3LDEwIEBACiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpKQogCQkJbiA9IFBPTExPVVQ7CiAJCWVsc2UKLQkJCW4gPSBwOV9mZF9wb2xsKG0tPnRyYW5zLCBOVUxMKTsKKwkJCW4gPSBwOV9mZF9wb2xsKG0tPmNsaWVudCwgTlVMTCk7CiAKIAkJaWYgKG4gJiBQT0xMT1VUKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHdyaXRlIHdvcmsgJXBcbiIsIG0pOworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNjaGVkIHdyaXRlIHdvcmsgJXBcbiIsIG0pOwogCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT53cSk7CiAJCX0gZWxzZQogCQkJY2xlYXJfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwpAQCAtNjU1LDUwNCArNTA0LDE5NSBAQAogCWNsZWFyX2JpdChXd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19yZXF1ZXN0KHN0cnVjdCBwOV9jb25uICptLCBzdHJ1Y3QgcDlfcmVxICpyZXEpCitzdGF0aWMgaW50IHA5X3BvbGx3YWtlKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSkKIHsKLQlpbnQgZWNvZGU7Ci0Jc3RydWN0IHA5X3N0ciAqZW5hbWU7CisJc3RydWN0IHA5X3BvbGxfd2FpdCAqcHdhaXQgPQorCQljb250YWluZXJfb2Yod2FpdCwgc3RydWN0IHA5X3BvbGxfd2FpdCwgd2FpdCk7CisJc3RydWN0IHA5X2Nvbm4gKm0gPSBwd2FpdC0+Y29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCURFQ0xBUkVfV0FJVFFVRVVFKGR1bW15X3dhaXQsIHA5X3BvbGxfdGFzayk7CiAKLQlpZiAoIXJlcS0+ZXJyICYmIHJlcS0+cmNhbGwtPmlkID09IFA5X1JFUlJPUikgewotCQllY29kZSA9IHJlcS0+cmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJybm87Ci0JCWVuYW1lID0gJnJlcS0+cmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJyb3I7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZtLT5wb2xsX3BlbmRpbmdfbGluaykpCisJCWxpc3RfYWRkX3RhaWwoJm0tPnBvbGxfcGVuZGluZ19saW5rLCAmcDlfcG9sbF9wZW5kaW5nX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOwogCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiUmVycm9yICUuKnNcbiIsIGVuYW1lLT5sZW4sCi0JCQkJCQkJCWVuYW1lLT5zdHIpOwotCi0JCWlmIChtLT5leHRlbmRlZCkKLQkJCXJlcS0+ZXJyID0gLWVjb2RlOwotCi0JCWlmICghcmVxLT5lcnIpIHsKLQkJCXJlcS0+ZXJyID0gcDlfZXJyc3RyMmVycm5vKGVuYW1lLT5zdHIsIGVuYW1lLT5sZW4pOwotCi0JCQkvKiBzdHJpbmcgbWF0Y2ggZmFpbGVkICovCi0JCQlpZiAoIXJlcS0+ZXJyKSB7Ci0JCQkJUFJJTlRfRkNBTExfRVJST1IoInVua25vd24gZXJyb3IiLCByZXEtPnJjYWxsKTsKLQkJCQlyZXEtPmVyciA9IC1FU0VSVkVSRkFVTFQ7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKHJlcS0+dGNhbGwgJiYgcmVxLT5yY2FsbC0+aWQgIT0gcmVxLT50Y2FsbC0+aWQgKyAxKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCi0JCQkJImZjYWxsIG1pc21hdGNoOiBleHBlY3RlZCAlZCwgZ290ICVkXG4iLAotCQkJCXJlcS0+dGNhbGwtPmlkICsgMSwgcmVxLT5yY2FsbC0+aWQpOwotCQlpZiAoIXJlcS0+ZXJyKQotCQkJcmVxLT5lcnIgPSAtRUlPOwotCX0KKwkvKiBwZXJmb3JtIHRoZSBkZWZhdWx0IHdha2UgdXAgb3BlcmF0aW9uICovCisJcmV0dXJuIGRlZmF1bHRfd2FrZV9mdW5jdGlvbigmZHVtbXlfd2FpdCwgbW9kZSwgc3luYywga2V5KTsKIH0KIAogLyoqCi0gKiBwOV9yZWFkX3dvcmsgLSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGEgdHJhbnNwb3J0Ci0gKiBAd29yazogY29udGFpbmVyIG9mIHdvcmsgdG8gYmUgZG9uZQorICogcDlfcG9sbHdhaXQgLSBhZGQgcG9sbCB0YXNrIHRvIHRoZSB3YWl0IHF1ZXVlCisgKiBAZmlscDogZmlsZSBwb2ludGVyIGJlaW5nIHBvbGxlZAorICogQHdhaXRfYWRkcmVzczogd2FpdF9xIHRvIGJsb2NrIG9uCisgKiBAcDogcG9sbCBzdGF0ZQogICoKKyAqIGNhbGxlZCBieSBmaWxlcyBwb2xsIG9wZXJhdGlvbiB0byBhZGQgdjlmcy1wb2xsIHRhc2sgdG8gZmlsZXMgd2FpdCBxdWV1ZQogICovCiAKLXN0YXRpYyB2b2lkIHA5X3JlYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZAorcDlfcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsIHBvbGxfdGFibGUgKnApCiB7Ci0JaW50IG4sIGVycjsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlzdHJ1Y3QgcDlfcmVxICpyZXEsICpycHRyLCAqcnJlcTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnJjYWxsOwotCWNoYXIgKnJidWY7CisJc3RydWN0IHA5X2Nvbm4gKm0gPSBjb250YWluZXJfb2YocCwgc3RydWN0IHA5X2Nvbm4sIHB0KTsKKwlzdHJ1Y3QgcDlfcG9sbF93YWl0ICpwd2FpdCA9IE5VTEw7CisJaW50IGk7CiAKLQltID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwOV9jb25uLCBycSk7Ci0KLQlpZiAobS0+ZXJyIDwgMCkKLQkJcmV0dXJuOwotCi0JcmNhbGwgPSBOVUxMOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic3RhcnQgbXV4ICVwIHBvcyAlZFxuIiwgbSwgbS0+cnBvcyk7Ci0KLQlpZiAoIW0tPnJjYWxsKSB7Ci0JCW0tPnJjYWxsID0KLQkJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyBtLT5tc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbS0+cmNhbGwpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJbS0+cmJ1ZiA9IChjaGFyICopbS0+cmNhbGwgKyBzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKLQkJbS0+cnBvcyA9IDA7Ci0JfQotCi0JY2xlYXJfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQllcnIgPSBwOV9mZF9yZWFkKG0tPnRyYW5zLCBtLT5yYnVmICsgbS0+cnBvcywgbS0+bXNpemUgLSBtLT5ycG9zKTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBnb3QgJWQgYnl0ZXNcbiIsIG0sIGVycik7Ci0JaWYgKGVyciA9PSAtRUFHQUlOKSB7Ci0JCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChlcnIgPD0gMCkKLQkJZ290byBlcnJvcjsKLQotCW0tPnJwb3MgKz0gZXJyOwotCXdoaWxlIChtLT5ycG9zID4gNCkgewotCQluID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikgbS0+cmJ1Zik7Ci0JCWlmIChuID49IG0tPm1zaXplKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCSJyZXF1ZXN0ZWQgcGFja2V0IHNpemUgdG9vIGJpZzogJWRcbiIsIG4pOwotCQkJZXJyID0gLUVJTzsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlpZiAobS0+cnBvcyA8IG4pCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWl0KTsgaSsrKSB7CisJCWlmIChtLT5wb2xsX3dhaXRbaV0ud2FpdF9hZGRyID09IE5VTEwpIHsKKwkJCXB3YWl0ID0gJm0tPnBvbGxfd2FpdFtpXTsKIAkJCWJyZWFrOwotCi0JCWVyciA9Ci0JCSAgICBwOV9kZXNlcmlhbGl6ZV9mY2FsbChtLT5yYnVmLCBuLCBtLT5yY2FsbCwgbS0+ZXh0ZW5kZWQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0KLSNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCi0JCWlmICgocDlfZGVidWdfbGV2ZWwmUDlfREVCVUdfRkNBTEwpID09IFA5X0RFQlVHX0ZDQUxMKSB7Ci0JCQljaGFyIGJ1ZlsxNTBdOwotCi0JCQlwOV9wcmludGZjYWxsKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG0tPnJjYWxsLAotCQkJCW0tPmV4dGVuZGVkKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiPj4+ICVwICVzXG4iLCBtLCBidWYpOwotCQl9Ci0jZW5kaWYKLQotCQlyY2FsbCA9IG0tPnJjYWxsOwotCQlyYnVmID0gbS0+cmJ1ZjsKLQkJaWYgKG0tPnJwb3MgPiBuKSB7Ci0JCQltLT5yY2FsbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyBtLT5tc2l6ZSwKLQkJCQkJICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW0tPnJjYWxsKSB7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCi0JCQltLT5yYnVmID0gKGNoYXIgKiltLT5yY2FsbCArIHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOwotCQkJbWVtbW92ZShtLT5yYnVmLCByYnVmICsgbiwgbS0+cnBvcyAtIG4pOwotCQkJbS0+cnBvcyAtPSBuOwotCQl9IGVsc2UgewotCQkJbS0+cmNhbGwgPSBOVUxMOwotCQkJbS0+cmJ1ZiA9IE5VTEw7Ci0JCQltLT5ycG9zID0gMDsKLQkJfQotCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGZjYWxsIGlkICVkIHRhZyAlZFxuIiwgbSwKLQkJCQkJCQlyY2FsbC0+aWQsIHJjYWxsLT50YWcpOwotCi0JCXJlcSA9IE5VTEw7Ci0JCXNwaW5fbG9jaygmbS0+bG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycmVxLCBycHRyLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCQlpZiAocnJlcS0+dGFnID09IHJjYWxsLT50YWcpIHsKLQkJCQlyZXEgPSBycmVxOwotCQkJCWlmIChyZXEtPmZsdXNoICE9IEZsdXNoaW5nKQotCQkJCQlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCi0JCWlmIChyZXEpIHsKLQkJCXJlcS0+cmNhbGwgPSByY2FsbDsKLQkJCXByb2Nlc3NfcmVxdWVzdChtLCByZXEpOwotCi0JCQlpZiAocmVxLT5mbHVzaCAhPSBGbHVzaGluZykgewotCQkJCWlmIChyZXEtPmNiKQotCQkJCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKLQkJCQllbHNlCi0JCQkJCWtmcmVlKHJlcS0+cmNhbGwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGVyciA+PSAwICYmIHJjYWxsLT5pZCAhPSBQOV9SRkxVU0gpCi0JCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkgICJ1bmV4cGVjdGVkIHJlc3BvbnNlIG11eCAlcCBpZCAlZCB0YWcgJWRcbiIsCi0JCQkJICBtLCByY2FsbC0+aWQsIHJjYWxsLT50YWcpOwotCQkJa2ZyZWUocmNhbGwpOwogCQl9CiAJfQogCi0JaWYgKCFsaXN0X2VtcHR5KCZtLT5yZXFfbGlzdCkpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChScGVuZGluZywgJm0tPndzY2hlZCkpCi0JCQluID0gUE9MTElOOwotCQllbHNlCi0JCQluID0gcDlfZmRfcG9sbChtLT50cmFucywgTlVMTCk7CisJaWYgKCFwd2FpdCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibm90IGVub3VnaCB3YWl0X2FkZHJlc3Mgc2xvdHNcbiIpOworCQlyZXR1cm47CisJfQogCi0JCWlmIChuICYgUE9MTElOKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHJlYWQgd29yayAlcFxuIiwgbSk7Ci0JCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPnJxKTsKLQkJfSBlbHNlCi0JCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7Ci0JfSBlbHNlCi0JCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKLQotCXJldHVybjsKLQotZXJyb3I6Ci0JcDlfY29ubl9jYW5jZWwobSwgZXJyKTsKLQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CisJcHdhaXQtPmNvbm4gPSBtOworCXB3YWl0LT53YWl0X2FkZHIgPSB3YWl0X2FkZHJlc3M7CisJaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmcHdhaXQtPndhaXQsIHA5X3BvbGx3YWtlKTsKKwlhZGRfd2FpdF9xdWV1ZSh3YWl0X2FkZHJlc3MsICZwd2FpdC0+d2FpdCk7CiB9CiAKIC8qKgotICogcDlfc2VuZF9yZXF1ZXN0IC0gc2VuZCA5UCByZXF1ZXN0Ci0gKiBUaGUgZnVuY3Rpb24gY2FuIHNsZWVwIHVudGlsIHRoZSByZXF1ZXN0IGlzIHNjaGVkdWxlZCBmb3Igc2VuZGluZy4KLSAqIFRoZSBmdW5jdGlvbiBjYW4gYmUgaW50ZXJydXB0ZWQuIFJldHVybiBmcm9tIHRoZSBmdW5jdGlvbiBpcyBub3QKLSAqIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHJlcXVlc3QgaXMgc2VudCBzdWNjZXNzZnVsbHkuIENhbiByZXR1cm4gZXJyb3JzCi0gKiB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgYnkgUFRSX0VSUiBtYWNyb3MuCisgKiBwOV9jb25uX2NyZWF0ZSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwZXItc2Vzc2lvbiBtdXggZGF0YQorICogQGNsaWVudDogY2xpZW50IGluc3RhbmNlCiAgKgotICogQG06IG11eCBkYXRhCi0gKiBAdGM6IHJlcXVlc3QgdG8gYmUgc2VudAotICogQGNiOiBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVzcG9uc2UgaXMgcmVjZWl2ZWQKLSAqIEBjYmE6IHBhcmFtZXRlciB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgotICoKKyAqIE5vdGU6IENyZWF0ZXMgdGhlIHBvbGxpbmcgdGFzayBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzZXNzaW9uLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcDlfcmVxICpwOV9zZW5kX3JlcXVlc3Qoc3RydWN0IHA5X2Nvbm4gKm0sCi0JCQkJCSAgc3RydWN0IHA5X2ZjYWxsICp0YywKLQkJCQkJICBwOV9jb25uX3JlcV9jYWxsYmFjayBjYiwgdm9pZCAqY2JhKQorc3RhdGljIHN0cnVjdCBwOV9jb25uICpwOV9jb25uX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IG47Ci0Jc3RydWN0IHA5X3JlcSAqcmVxOworCXN0cnVjdCBwOV9jb25uICptOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgdGFzayAlcCB0Y2FsbCAlcCBpZCAlZFxuIiwgbSwgY3VycmVudCwKLQkJdGMsIHRjLT5pZCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImNsaWVudCAlcCBtc2l6ZSAlZFxuIiwgY2xpZW50LAorCQkJCQkJCQljbGllbnQtPm1zaXplKTsKKwltID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA5X2Nvbm4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJm0tPm11eF9saXN0KTsKKwltLT5jbGllbnQgPSBjbGllbnQ7CisKKwlJTklUX0xJU1RfSEVBRCgmbS0+cmVxX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtLT51bnNlbnRfcmVxX2xpc3QpOworCUlOSVRfV09SSygmbS0+cnEsIHA5X3JlYWRfd29yayk7CisJSU5JVF9XT1JLKCZtLT53cSwgcDlfd3JpdGVfd29yayk7CisJSU5JVF9MSVNUX0hFQUQoJm0tPnBvbGxfcGVuZGluZ19saW5rKTsKKwlpbml0X3BvbGxfZnVuY3B0cigmbS0+cHQsIHA5X3BvbGx3YWl0KTsKKworCW4gPSBwOV9mZF9wb2xsKGNsaWVudCwgJm0tPnB0KTsKKwlpZiAobiAmIFBPTExJTikgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIGNhbiByZWFkXG4iLCBtKTsKKwkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7CisJfQorCisJaWYgKG4gJiBQT0xMT1VUKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKKwkJc2V0X2JpdChXcGVuZGluZywgJm0tPndzY2hlZCk7CisJfQorCisJcmV0dXJuIG07Cit9CisKKy8qKgorICogcDlfcG9sbF9tdXggLSBwb2xscyBhIG11eCBhbmQgc2NoZWR1bGVzIHJlYWQgb3Igd3JpdGUgd29ya3MgaWYgbmVjZXNzYXJ5CisgKiBAbTogY29ubmVjdGlvbiB0byBwb2xsCisgKgorICovCisKK3N0YXRpYyB2b2lkIHA5X3BvbGxfbXV4KHN0cnVjdCBwOV9jb25uICptKQoreworCWludCBuOworCiAJaWYgKG0tPmVyciA8IDApCi0JCXJldHVybiBFUlJfUFRSKG0tPmVycik7CisJCXJldHVybjsKIAotCXJlcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9yZXEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpZiAodGMtPmlkID09IFA5X1RWRVJTSU9OKQotCQluID0gUDlfTk9UQUc7Ci0JZWxzZQotCQluID0gcDlfbXV4X2dldF90YWcobSk7Ci0KLQlpZiAobiA8IDApIHsKLQkJa2ZyZWUocmVxKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJbiA9IHA5X2ZkX3BvbGwobS0+Y2xpZW50LCBOVUxMKTsKKwlpZiAobiA8IDAgfHwgbiAmIChQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExOVkFMKSkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiZXJyb3IgbXV4ICVwIGVyciAlZFxuIiwgbSwgbik7CisJCWlmIChuID49IDApCisJCQluID0gLUVDT05OUkVTRVQ7CisJCXA5X2Nvbm5fY2FuY2VsKG0sIG4pOwogCX0KIAotCXA5X3NldF90YWcodGMsIG4pOwotCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCWlmICgocDlfZGVidWdfbGV2ZWwmUDlfREVCVUdfRkNBTEwpID09IFA5X0RFQlVHX0ZDQUxMKSB7Ci0JCWNoYXIgYnVmWzE1MF07Ci0KLQkJcDlfcHJpbnRmY2FsbChidWYsIHNpemVvZihidWYpLCB0YywgbS0+ZXh0ZW5kZWQpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIjw8PCAlcCAlc1xuIiwgbSwgYnVmKTsKKwlpZiAobiAmIFBPTExJTikgeworCQlzZXRfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBjYW4gcmVhZFxuIiwgbSk7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKSkgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNjaGVkIHJlYWQgd29yayAlcFxuIiwgbSk7CisJCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPnJxKTsKKwkJfQogCX0KLSNlbmRpZgogCi0Jc3Bpbl9sb2NrX2luaXQoJnJlcS0+bG9jayk7Ci0JcmVxLT50YWcgPSBuOwotCXJlcS0+dGNhbGwgPSB0YzsKLQlyZXEtPnJjYWxsID0gTlVMTDsKLQlyZXEtPmVyciA9IDA7Ci0JcmVxLT5jYiA9IGNiOwotCXJlcS0+Y2JhID0gY2JhOwotCXJlcS0+Zmx1c2ggPSBOb25lOworCWlmIChuICYgUE9MTE9VVCkgeworCQlzZXRfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBjYW4gd3JpdGVcbiIsIG0pOworCQlpZiAoKG0tPndzaXplIHx8ICFsaXN0X2VtcHR5KCZtLT51bnNlbnRfcmVxX2xpc3QpKQorCQkgICAgJiYgIXRlc3RfYW5kX3NldF9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzY2hlZCB3cml0ZSB3b3JrICVwXG4iLCBtKTsKKwkJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+d3EpOworCQl9CisJfQorfQogCi0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKKy8qKgorICogcDlfZmRfcmVxdWVzdCAtIHNlbmQgOVAgcmVxdWVzdAorICogVGhlIGZ1bmN0aW9uIGNhbiBzbGVlcCB1bnRpbCB0aGUgcmVxdWVzdCBpcyBzY2hlZHVsZWQgZm9yIHNlbmRpbmcuCisgKiBUaGUgZnVuY3Rpb24gY2FuIGJlIGludGVycnVwdGVkLiBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaXMgbm90CisgKiBhIGd1YXJhbnRlZSB0aGF0IHRoZSByZXF1ZXN0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5LgorICoKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQorICogQHJlcTogcmVxdWVzdCB0byBiZSBzZW50CisgKgorICovCisKK3N0YXRpYyBpbnQgcDlfZmRfcmVxdWVzdChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCWludCBuOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBjbGllbnQtPnRyYW5zOworCXN0cnVjdCBwOV9jb25uICptID0gdHMtPmNvbm47CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIHRhc2sgJXAgdGNhbGwgJXAgaWQgJWRcbiIsIG0sCisJCQkJCQljdXJyZW50LCByZXEtPnRjLCByZXEtPnRjLT5pZCk7CisJaWYgKG0tPmVyciA8IDApCisJCXJldHVybiBtLT5lcnI7CisKKwlzcGluX2xvY2soJmNsaWVudC0+bG9jayk7CisJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX1VOU0VOVDsKIAlsaXN0X2FkZF90YWlsKCZyZXEtPnJlcV9saXN0LCAmbS0+dW5zZW50X3JlcV9saXN0KTsKLQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJc3Bpbl91bmxvY2soJmNsaWVudC0+bG9jayk7CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKSkKIAkJbiA9IFBPTExPVVQ7CiAJZWxzZQotCQluID0gcDlfZmRfcG9sbChtLT50cmFucywgTlVMTCk7CisJCW4gPSBwOV9mZF9wb2xsKG0tPmNsaWVudCwgTlVMTCk7CiAKIAlpZiAobiAmIFBPTExPVVQgJiYgIXRlc3RfYW5kX3NldF9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCkpCiAJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+d3EpOwogCi0JcmV0dXJuIHJlcTsKLX0KLQotc3RhdGljIHZvaWQgcDlfbXV4X2ZyZWVfcmVxdWVzdChzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X3JlcSAqcmVxKQotewotCXA5X211eF9wdXRfdGFnKG0sIHJlcS0+dGFnKTsKLQlrZnJlZShyZXEpOwotfQotCi1zdGF0aWMgdm9pZCBwOV9tdXhfZmx1c2hfY2Ioc3RydWN0IHA5X3JlcSAqZnJlcSwgdm9pZCAqYSkKLXsKLQlpbnQgdGFnOwotCXN0cnVjdCBwOV9jb25uICptOwotCXN0cnVjdCBwOV9yZXEgKnJlcSwgKnJyZXEsICpycHRyOwotCi0JbSA9IGE7Ci0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgdGMgJXAgcmMgJXAgZXJyICVkIG9sZHRhZyAlZFxuIiwgbSwKLQkJZnJlcS0+dGNhbGwsIGZyZXEtPnJjYWxsLCBmcmVxLT5lcnIsCi0JCWZyZXEtPnRjYWxsLT5wYXJhbXMudGZsdXNoLm9sZHRhZyk7Ci0KLQlzcGluX2xvY2soJm0tPmxvY2spOwotCXRhZyA9IGZyZXEtPnRjYWxsLT5wYXJhbXMudGZsdXNoLm9sZHRhZzsKLQlyZXEgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycmVxLCBycHRyLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWlmIChycmVxLT50YWcgPT0gdGFnKSB7Ci0JCQlyZXEgPSBycmVxOwotCQkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCi0JaWYgKHJlcSkgewotCQlzcGluX2xvY2soJnJlcS0+bG9jayk7Ci0JCXJlcS0+Zmx1c2ggPSBGbHVzaGVkOwotCQlzcGluX3VubG9jaygmcmVxLT5sb2NrKTsKLQotCQlpZiAocmVxLT5jYikKLQkJCSgqcmVxLT5jYikgKHJlcSwgcmVxLT5jYmEpOwotCQllbHNlCi0JCQlrZnJlZShyZXEtPnJjYWxsKTsKLQl9Ci0KLQlrZnJlZShmcmVxLT50Y2FsbCk7Ci0Ja2ZyZWUoZnJlcS0+cmNhbGwpOwotCXA5X211eF9mcmVlX3JlcXVlc3QobSwgZnJlcSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXA5X211eF9mbHVzaF9yZXF1ZXN0KHN0cnVjdCBwOV9jb25uICptLCBzdHJ1Y3QgcDlfcmVxICpyZXEpCi17Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgcDlfcmVxICpycmVxLCAqcnB0cjsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHJlcSAlcCB0YWcgJWRcbiIsIG0sIHJlcSwgcmVxLT50YWcpOwotCi0JLyogaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWQgZm9yIGEgcmVxdWVzdCwgZG8gbm90aGluZyAqLwotCXNwaW5fbG9jaygmcmVxLT5sb2NrKTsKLQlpZiAocmVxLT5yY2FsbCB8fCByZXEtPmVycikgewotCQlzcGluX3VubG9jaygmcmVxLT5sb2NrKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsCi0JCQkibXV4ICVwIHJlcSAlcCByZXNwb25zZSBhbHJlYWR5IHJlY2VpdmVkXG4iLCBtLCByZXEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXEtPmZsdXNoID0gRmx1c2hpbmc7Ci0Jc3Bpbl91bmxvY2soJnJlcS0+bG9jayk7Ci0KLQlzcGluX2xvY2soJm0tPmxvY2spOwotCS8qIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBzZW50IHlldCwganVzdCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycmVxLCBycHRyLCAmbS0+dW5zZW50X3JlcV9saXN0LCByZXFfbGlzdCkgewotCQlpZiAocnJlcS0+dGFnID09IHJlcS0+dGFnKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwKLQkJCSAgICJtdXggJXAgcmVxICVwIHJlcXVlc3QgaXMgbm90IHNlbnQgeWV0XG4iLCBtLCByZXEpOwotCQkJbGlzdF9kZWwoJnJyZXEtPnJlcV9saXN0KTsKLQkJCXJlcS0+Zmx1c2ggPSBGbHVzaGVkOwotCQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCQkJaWYgKHJlcS0+Y2IpCi0JCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmbS0+bG9jayk7Ci0KLQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7Ci0JZmMgPSBwOV9jcmVhdGVfdGZsdXNoKHJlcS0+dGFnKTsKLQlwOV9zZW5kX3JlcXVlc3QobSwgZmMsIHA5X211eF9mbHVzaF9jYiwgbSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wOV9jb25uX3JwY19jYihzdHJ1Y3QgcDlfcmVxICpyZXEsIHZvaWQgKmEpCi17Ci0Jc3RydWN0IHA5X211eF9ycGMgKnI7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInJlcSAlcCByICVwXG4iLCByZXEsIGEpOwotCXIgPSBhOwotCXItPnJjYWxsID0gcmVxLT5yY2FsbDsKLQlyLT5lcnIgPSByZXEtPmVycjsKLQotCWlmIChyZXEtPmZsdXNoICE9IE5vbmUgJiYgIXJlcS0+ZXJyKQotCQlyLT5lcnIgPSAtRVJFU1RBUlRTWVM7Ci0KLQl3YWtlX3VwKCZyLT53cXVldWUpOwotfQotCi0vKioKLSAqIHA5X2ZkX3JwYy0gc2VuZHMgOVAgcmVxdWVzdCBhbmQgd2FpdHMgdW50aWwgYSByZXNwb25zZSBpcyBhdmFpbGFibGUuCi0gKglUaGUgZnVuY3Rpb24gY2FuIGJlIGludGVycnVwdGVkLgotICogQHQ6IHRyYW5zcG9ydCBkYXRhCi0gKiBAdGM6IHJlcXVlc3QgdG8gYmUgc2VudAotICogQHJjOiBwb2ludGVyIHdoZXJlIGEgcG9pbnRlciB0byB0aGUgcmVzcG9uc2UgaXMgc3RvcmVkCi0gKgotICovCi0KLWludAotcDlfZmRfcnBjKHN0cnVjdCBwOV90cmFucyAqdCwgc3RydWN0IHA5X2ZjYWxsICp0Yywgc3RydWN0IHA5X2ZjYWxsICoqcmMpCi17Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gdC0+cHJpdjsKLQlzdHJ1Y3QgcDlfY29ubiAqbSA9IHAtPmNvbm47Ci0JaW50IGVyciwgc2lncGVuZGluZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKLQlzdHJ1Y3QgcDlfbXV4X3JwYyByOwotCi0Jci5lcnIgPSAwOwotCXIudGNhbGwgPSB0YzsKLQlyLnJjYWxsID0gTlVMTDsKLQlyLm0gPSBtOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnIud3F1ZXVlKTsKLQotCWlmIChyYykKLQkJKnJjID0gTlVMTDsKLQotCXNpZ3BlbmRpbmcgPSAwOwotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQlzaWdwZW5kaW5nID0gMTsKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOwotCX0KLQotCXJlcSA9IHA5X3NlbmRfcmVxdWVzdChtLCB0YywgcDlfY29ubl9ycGNfY2IsICZyKTsKLQlpZiAoSVNfRVJSKHJlcSkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXEpOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImVycm9yICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShyLndxdWV1ZSwgci5yY2FsbCAhPSBOVUxMIHx8IHIuZXJyIDwgMCk7Ci0JaWYgKHIuZXJyIDwgMCkKLQkJZXJyID0gci5lcnI7Ci0KLQlpZiAoZXJyID09IC1FUkVTVEFSVFNZUyAmJiBtLT50cmFucy0+c3RhdHVzID09IENvbm5lY3RlZAotCQkJCQkJCSYmIG0tPmVyciA9PSAwKSB7Ci0JCWlmIChwOV9tdXhfZmx1c2hfcmVxdWVzdChtLCByZXEpKSB7Ci0JCQkvKiB3YWl0IHVudGlsIHdlIGdldCByZXNwb25zZSBvZiB0aGUgZmx1c2ggbWVzc2FnZSAqLwotCQkJZG8gewotCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKLQkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoci53cXVldWUsCi0JCQkJCXIucmNhbGwgfHwgci5lcnIpOwotCQkJfSB3aGlsZSAoIXIucmNhbGwgJiYgIXIuZXJyICYmIGVyciA9PSAtRVJFU1RBUlRTWVMgJiYKLQkJCQltLT50cmFucy0+c3RhdHVzID09IENvbm5lY3RlZCAmJiAhbS0+ZXJyKTsKLQotCQkJZXJyID0gLUVSRVNUQVJUU1lTOwotCQl9Ci0JCXNpZ3BlbmRpbmcgPSAxOwotCX0KLQotCWlmIChzaWdwZW5kaW5nKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQl9Ci0KLQlpZiAocmMpCi0JCSpyYyA9IHIucmNhbGw7Ci0JZWxzZQotCQlrZnJlZShyLnJjYWxsKTsKLQotCXA5X211eF9mcmVlX3JlcXVlc3QobSwgcmVxKTsKLQlpZiAoZXJyID4gMCkKLQkJZXJyID0gLUVJTzsKLQotCXJldHVybiBlcnI7Ci19Ci0KLSNpZmRlZiBQOV9OT05CTE9DSwotLyoqCi0gKiBwOV9jb25uX3JwY25iIC0gc2VuZHMgOVAgcmVxdWVzdCB3aXRob3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlLgotICogQG06IG11eCBkYXRhCi0gKiBAdGM6IHJlcXVlc3QgdG8gYmUgc2VudAotICogQGNiOiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiByZXNwb25zZSBhcnJpdmVzCi0gKiBAYTogdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAqCi0gKi8KLQotaW50IHA5X2Nvbm5fcnBjbmIoc3RydWN0IHA5X2Nvbm4gKm0sIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JCSAgIHA5X2Nvbm5fcmVxX2NhbGxiYWNrIGNiLCB2b2lkICphKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X3JlcSAqcmVxOwotCi0JcmVxID0gcDlfc2VuZF9yZXF1ZXN0KG0sIHRjLCBjYiwgYSk7Ci0JaWYgKElTX0VSUihyZXEpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmVxKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJlcnJvciAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQl9Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCB0YyAlcCB0YWcgJWRcbiIsIG0sIHRjLCByZXEtPnRhZyk7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogUDlfTk9OQkxPQ0sgKi8KIAotLyoqCi0gKiBwOV9jb25uX2NhbmNlbCAtIGNhbmNlbCBhbGwgcGVuZGluZyByZXF1ZXN0cyB3aXRoIGVycm9yCi0gKiBAbTogbXV4IGRhdGEKLSAqIEBlcnI6IGVycm9yIGNvZGUKLSAqCi0gKi8KLQotdm9pZCBwOV9jb25uX2NhbmNlbChzdHJ1Y3QgcDlfY29ubiAqbSwgaW50IGVycikKK3N0YXRpYyBpbnQgcDlfZmRfY2FuY2VsKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCiB7Ci0Jc3RydWN0IHA5X3JlcSAqcmVxLCAqcnRtcDsKLQlMSVNUX0hFQUQoY2FuY2VsX2xpc3QpOworCWludCByZXQgPSAxOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm11eCAlcCBlcnIgJWRcbiIsIG0sIGVycik7Ci0JbS0+ZXJyID0gZXJyOwotCXNwaW5fbG9jaygmbS0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQlsaXN0X21vdmUoJnJlcS0+cmVxX2xpc3QsICZjYW5jZWxfbGlzdCk7Ci0JfQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT51bnNlbnRfcmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKLQl9Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJjbGllbnQgJXAgcmVxICVwXG4iLCBjbGllbnQsIHJlcSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmY2FuY2VsX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKLQkJaWYgKCFyZXEtPmVycikKLQkJCXJlcS0+ZXJyID0gZXJyOworCXNwaW5fbG9jaygmY2xpZW50LT5sb2NrKTsKKwlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7CiAKLQkJaWYgKHJlcS0+Y2IpCi0JCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKLQkJZWxzZQotCQkJa2ZyZWUocmVxLT5yY2FsbCk7CisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfVU5TRU5UKSB7CisJCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19GTFNIRDsKKwkJcmV0ID0gMDsKIAl9CisKKwlzcGluX3VubG9jaygmY2xpZW50LT5sb2NrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTIxNiw3ICs3NTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHA5X2ZkX29wZW4oc3RydWN0IHA5X3RyYW5zICp0cmFucywgaW50IHJmZCwgaW50IHdmZCkKK3N0YXRpYyBpbnQgcDlfZmRfb3BlbihzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIGludCByZmQsIGludCB3ZmQpCiB7CiAJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFuc19mZCksCiAJCQkJCSAgIEdGUF9LRVJORUwpOwpAQCAtMTIzNCwxMyArNzc0LDEzIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCXRyYW5zLT5wcml2ID0gdHM7Ci0JdHJhbnMtPnN0YXR1cyA9IENvbm5lY3RlZDsKKwljbGllbnQtPnRyYW5zID0gdHM7CisJY2xpZW50LT5zdGF0dXMgPSBDb25uZWN0ZWQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwOV9zb2NrZXRfb3BlbihzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCBzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0KQorc3RhdGljIGludCBwOV9zb2NrZXRfb3BlbihzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBzb2NrZXQgKmNzb2NrZXQpCiB7CiAJaW50IGZkLCByZXQ7CiAKQEAgLTEyNTEsMTM3ICs3OTEsNjUgQEAKIAkJcmV0dXJuIGZkOwogCX0KIAotCXJldCA9IHA5X2ZkX29wZW4odHJhbnMsIGZkLCBmZCk7CisJcmV0ID0gcDlfZmRfb3BlbihjbGllbnQsIGZkLCBmZCk7CiAJaWYgKHJldCA8IDApIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3NvY2tldF9vcGVuOiBmYWlsZWQgdG8gb3BlbiBmZFxuIik7CiAJCXNvY2tmZF9wdXQoY3NvY2tldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JKChzdHJ1Y3QgcDlfdHJhbnNfZmQgKil0cmFucy0+cHJpdiktPnJkLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJKChzdHJ1Y3QgcDlfdHJhbnNfZmQgKiljbGllbnQtPnRyYW5zKS0+cmQtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqIHA5X2ZkX3JlYWQtIHJlYWQgZnJvbSBhIGZkCi0gKiBAdHJhbnM6IHRyYW5zcG9ydCBpbnN0YW5jZSBzdGF0ZQotICogQHY6IGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgaW50bwotICogQGxlbjogc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlcgorICogcDlfbXV4X2Rlc3Ryb3kgLSBjYW5jZWxzIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGFuZCBmcmVlcyBtdXggcmVzb3VyY2VzCisgKiBAbTogbXV4IHRvIGRlc3Ryb3kKICAqCiAgKi8KIAotc3RhdGljIGludCBwOV9mZF9yZWFkKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBwOV9jb25uX2Rlc3Ryb3koc3RydWN0IHA5X2Nvbm4gKm0pCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gTlVMTDsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIHByZXYgJXAgbmV4dCAlcFxuIiwgbSwKKwkJbS0+bXV4X2xpc3QucHJldiwgbS0+bXV4X2xpc3QubmV4dCk7CiAKLQlpZiAodHJhbnMgJiYgdHJhbnMtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCi0JCXRzID0gdHJhbnMtPnByaXY7CisJcDlfbXV4X3BvbGxfc3RvcChtKTsKKwljYW5jZWxfd29ya19zeW5jKCZtLT5ycSk7CisJY2FuY2VsX3dvcmtfc3luYygmbS0+d3EpOwogCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87CisJcDlfY29ubl9jYW5jZWwobSwgLUVDT05OUkVTRVQpOwogCi0JaWYgKCEodHMtPnJkLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJibG9ja2luZyByZWFkIC4uLlxuIik7Ci0KLQlyZXQgPSBrZXJuZWxfcmVhZCh0cy0+cmQsIHRzLT5yZC0+Zl9wb3MsIHYsIGxlbik7Ci0JaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCi0JCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Ci0JcmV0dXJuIHJldDsKKwltLT5jbGllbnQgPSBOVUxMOworCWtmcmVlKG0pOwogfQogCiAvKioKLSAqIHA5X2ZkX3dyaXRlIC0gd3JpdGUgdG8gYSBzb2NrZXQKLSAqIEB0cmFuczogdHJhbnNwb3J0IGluc3RhbmNlIHN0YXRlCi0gKiBAdjogYnVmZmVyIHRvIHNlbmQgZGF0YSBmcm9tCi0gKiBAbGVuOiBzaXplIG9mIHNlbmQgYnVmZmVyCisgKiBwOV9mZF9jbG9zZSAtIHNodXRkb3duIGZpbGUgZGVzY3JpcHRvciB0cmFuc3BvcnQKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQogICoKICAqLwogCi1zdGF0aWMgaW50IHA5X2ZkX3dyaXRlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pCi17Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7Ci0KLQlpZiAodHJhbnMgJiYgdHJhbnMtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCi0JCXRzID0gdHJhbnMtPnByaXY7Ci0KLQlpZiAoIXRzKQotCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQotCWlmICghKHRzLT53ci0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgd3JpdGUgLi4uXG4iKTsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQkvKiBUaGUgY2FzdCB0byBhIHVzZXIgcG9pbnRlciBpcyB2YWxpZCBkdWUgdG8gdGhlIHNldF9mcygpICovCi0JcmV0ID0gdmZzX3dyaXRlKHRzLT53ciwgKHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7Ci0Jc2V0X2ZzKG9sZGZzKTsKLQotCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQotCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXA5X2ZkX3BvbGwoc3RydWN0IHA5X3RyYW5zICp0cmFucywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdCkKLXsKLQlpbnQgcmV0LCBuOwotCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOwotCi0JaWYgKHRyYW5zICYmIHRyYW5zLT5zdGF0dXMgPT0gQ29ubmVjdGVkKQotCQl0cyA9IHRyYW5zLT5wcml2OwotCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0KLQlpZiAoIXRzLT5yZC0+Zl9vcCB8fCAhdHMtPnJkLT5mX29wLT5wb2xsKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICghdHMtPndyLT5mX29wIHx8ICF0cy0+d3ItPmZfb3AtPnBvbGwpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0ID0gdHMtPnJkLT5mX29wLT5wb2xsKHRzLT5yZCwgcHQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHRzLT5yZCAhPSB0cy0+d3IpIHsKLQkJbiA9IHRzLT53ci0+Zl9vcC0+cG9sbCh0cy0+d3IsIHB0KTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuIG47Ci0JCXJldCA9IChyZXQgJiB+UE9MTE9VVCkgfCAobiAmIH5QT0xMSU4pOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogcDlfZmRfY2xvc2UgLSBzaHV0ZG93biBzb2NrZXQKLSAqIEB0cmFuczogcHJpdmF0ZSBzb2NrZXQgc3RydWN0dXJlCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIHA5X2ZkX2Nsb3NlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMpCitzdGF0aWMgdm9pZCBwOV9mZF9jbG9zZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHA5X3RyYW5zX2ZkICp0czsKIAotCWlmICghdHJhbnMpCisJaWYgKCFjbGllbnQpCiAJCXJldHVybjsKIAotCXRzID0geGNoZygmdHJhbnMtPnByaXYsIE5VTEwpOwotCisJdHMgPSBjbGllbnQtPnRyYW5zOwogCWlmICghdHMpCiAJCXJldHVybjsKIAorCWNsaWVudC0+c3RhdHVzID0gRGlzY29ubmVjdGVkOworCiAJcDlfY29ubl9kZXN0cm95KHRzLT5jb25uKTsKIAotCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CiAJaWYgKHRzLT5yZCkKIAkJZnB1dCh0cy0+cmQpOwogCWlmICh0cy0+d3IpCiAJCWZwdXQodHMtPndyKTsKKwogCWtmcmVlKHRzKTsKIH0KIApAQCAtMTQwMiwzMSArODcwLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX3RjcChjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzLCBpbnQgbXNpemUsIHVuc2lnbmVkIGNoYXIgZG90dSkKK3N0YXRpYyBpbnQKK3A5X2ZkX2NyZWF0ZV90Y3Aoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzKQogewogCWludCBlcnI7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKIAlzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0OwogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc2VydmVyOwogCXN0cnVjdCBwOV9mZF9vcHRzIG9wdHM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwOworCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IE5VTEw7IC8qIHRoaXMgZ2V0cyBhbGxvY2F0ZWQgaW4gcDlfZmRfb3BlbiAqLwogCiAJZXJyID0gcGFyc2Vfb3B0cyhhcmdzLCAmb3B0cyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBFUlJfUFRSKGVycik7CisJCXJldHVybiBlcnI7CiAKIAlpZiAodmFsaWRfaXBhZGRyNChhZGRyKSA8IDApCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNzb2NrZXQgPSBOVUxMOwotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmV4dGVuZGVkID0gZG90dTsKLQl0cmFucy0+cnBjID0gcDlfZmRfcnBjOwotCXRyYW5zLT5jbG9zZSA9IHA5X2ZkX2Nsb3NlOwogCiAJc2luX3NlcnZlci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAlzaW5fc2VydmVyLnNpbl9hZGRyLnNfYWRkciA9IGluX2F0b24oYWRkcik7CkBAIC0xNDQ5LDQ1ICs5MDksMzggQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwOV9zb2NrZXRfb3Blbih0cmFucywgY3NvY2tldCk7CisJZXJyID0gcDlfc29ja2V0X29wZW4oY2xpZW50LCBjc29ja2V0KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIHRyYW5zLT5wcml2OwotCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZSh0cmFucyk7CisJcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKKwlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKIAlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7CiAJCWVyciA9IFBUUl9FUlIocC0+Y29ubik7CiAJCXAtPmNvbm4gPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJaWYgKGNzb2NrZXQpCiAJCXNvY2tfcmVsZWFzZShjc29ja2V0KTsKIAotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwOV90cmFucyAqCi1wOV90cmFuc19jcmVhdGVfdW5peChjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzLCBpbnQgbXNpemUsCi0JCQkJCQkJdW5zaWduZWQgY2hhciBkb3R1KQorc3RhdGljIGludAorcDlfZmRfY3JlYXRlX3VuaXgoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzKQogewogCWludCBlcnI7CiAJc3RydWN0IHNvY2tldCAqY3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfdW4gc3VuX3NlcnZlcjsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwotCXN0cnVjdCBwOV90cmFuc19mZCAqcDsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnAgPSBOVUxMOyAvKiB0aGlzIGdldHMgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCWNzb2NrZXQgPSBOVUxMOwotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQl0cmFucy0+cnBjID0gcDlfZmRfcnBjOwotCXRyYW5zLT5jbG9zZSA9IHA5X2ZkX2Nsb3NlOwogCiAJaWYgKHN0cmxlbihhZGRyKSA+IFVOSVhfUEFUSF9NQVgpIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3RyYW5zX3VuaXg6IGFkZHJlc3MgdG9vIGxvbmc6ICVzXG4iLApAQCAtMTUwOCw3OSArOTYxLDY5IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfc29ja2V0X29wZW4odHJhbnMsIGNzb2NrZXQpOworCWVyciA9IHA5X3NvY2tldF9vcGVuKGNsaWVudCwgY3NvY2tldCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQl0cmFucy0+bXNpemUgPSBtc2l6ZTsKLQl0cmFucy0+ZXh0ZW5kZWQgPSBkb3R1OwotCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIHRyYW5zLT5wcml2OwotCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZSh0cmFucyk7CisJcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKKwlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKIAlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7CiAJCWVyciA9IFBUUl9FUlIocC0+Y29ubik7CiAJCXAtPmNvbm4gPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJaWYgKGNzb2NrZXQpCiAJCXNvY2tfcmVsZWFzZShjc29ja2V0KTsKIAotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX2ZkKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmFyZ3MsIGludCBtc2l6ZSwKLQkJCQkJCQl1bnNpZ25lZCBjaGFyIGV4dGVuZGVkKQorc3RhdGljIGludAorcDlfZmRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CiAJc3RydWN0IHA5X2ZkX29wdHMgb3B0czsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnA7CisJc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gTlVMTDsgLyogdGhpcyBnZXQgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCXBhcnNlX29wdHMoYXJncywgJm9wdHMpOwogCiAJaWYgKG9wdHMucmZkID09IH4wIHx8IG9wdHMud2ZkID09IH4wKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidjlmczogSW5zdWZmaWNpZW50IG9wdGlvbnMgZm9yIHByb3RvPWZkXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT1BST1RPT1BUKTsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CiAKLQl0cmFucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFucyksIEdGUF9LRVJORUwpOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JdHJhbnMtPnJwYyA9IHA5X2ZkX3JwYzsKLQl0cmFucy0+Y2xvc2UgPSBwOV9mZF9jbG9zZTsKLQotCWVyciA9IHA5X2ZkX29wZW4odHJhbnMsIG9wdHMucmZkLCBvcHRzLndmZCk7CisJZXJyID0gcDlfZmRfb3BlbihjbGllbnQsIG9wdHMucmZkLCBvcHRzLndmZCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQl0cmFucy0+bXNpemUgPSBtc2l6ZTsKLQl0cmFucy0+ZXh0ZW5kZWQgPSBleHRlbmRlZDsKLQlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSB0cmFucy0+cHJpdjsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUodHJhbnMpOworCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIGNsaWVudC0+dHJhbnM7CisJcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKGNsaWVudCk7CiAJaWYgKElTX0VSUihwLT5jb25uKSkgewogCQllcnIgPSBQVFJfRVJSKHAtPmNvbm4pOwogCQlwLT5jb25uID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gdHJhbnM7CisJcmV0dXJuIDA7CiAKIGVycm9yOgotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHA5X3RjcF90cmFucyA9IHsKIAkubmFtZSA9ICJ0Y3AiLAogCS5tYXhzaXplID0gTUFYX1NPQ0tfQlVGLAogCS5kZWYgPSAxLAotCS5jcmVhdGUgPSBwOV90cmFuc19jcmVhdGVfdGNwLAorCS5jcmVhdGUgPSBwOV9mZF9jcmVhdGVfdGNwLAorCS5jbG9zZSA9IHA5X2ZkX2Nsb3NlLAorCS5yZXF1ZXN0ID0gcDlfZmRfcmVxdWVzdCwKKwkuY2FuY2VsID0gcDlfZmRfY2FuY2VsLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMTU4OCw3ICsxMDMxLDEwIEBACiAJLm5hbWUgPSAidW5peCIsCiAJLm1heHNpemUgPSBNQVhfU09DS19CVUYsCiAJLmRlZiA9IDAsCi0JLmNyZWF0ZSA9IHA5X3RyYW5zX2NyZWF0ZV91bml4LAorCS5jcmVhdGUgPSBwOV9mZF9jcmVhdGVfdW5peCwKKwkuY2xvc2UgPSBwOV9mZF9jbG9zZSwKKwkucmVxdWVzdCA9IHA5X2ZkX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X2ZkX2NhbmNlbCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTE1OTYsMjMgKzEwNDIsNzEgQEAKIAkubmFtZSA9ICJmZCIsCiAJLm1heHNpemUgPSBNQVhfU09DS19CVUYsCiAJLmRlZiA9IDAsCi0JLmNyZWF0ZSA9IHA5X3RyYW5zX2NyZWF0ZV9mZCwKKwkuY3JlYXRlID0gcDlfZmRfY3JlYXRlLAorCS5jbG9zZSA9IHA5X2ZkX2Nsb3NlLAorCS5yZXF1ZXN0ID0gcDlfZmRfcmVxdWVzdCwKKwkuY2FuY2VsID0gcDlfZmRfY2FuY2VsLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAorLyoqCisgKiBwOV9wb2xsX3Byb2MgLSBwb2xsIHdvcmtlciB0aHJlYWQKKyAqIEBhOiB0aHJlYWQgc3RhdGUgYW5kIGFyZ3VtZW50cworICoKKyAqIHBvbGxzIGFsbCB2OWZzIHRyYW5zcG9ydHMgZm9yIG5ldyBldmVudHMgYW5kIHF1ZXVlcyB0aGUgYXBwcm9wcmlhdGUKKyAqIHdvcmsgdG8gdGhlIHdvcmsgcXVldWUKKyAqCisgKi8KKworc3RhdGljIGludCBwOV9wb2xsX3Byb2Modm9pZCAqYSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInN0YXJ0ICVwXG4iLCBjdXJyZW50KTsKKyByZXBlYXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QpKSB7CisJCXN0cnVjdCBwOV9jb25uICpjb25uID0gbGlzdF9maXJzdF9lbnRyeSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QsCisJCQkJCQkJc3RydWN0IHA5X2Nvbm4sCisJCQkJCQkJcG9sbF9wZW5kaW5nX2xpbmspOworCQlsaXN0X2RlbF9pbml0KCZjb25uLT5wb2xsX3BlbmRpbmdfbGluayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCisJCXA5X3BvbGxfbXV4KGNvbm4pOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlfcG9sbF9sb2NrLCBmbGFncyk7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCWlmIChsaXN0X2VtcHR5KCZwOV9wb2xsX3BlbmRpbmdfbGlzdCkpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNsZWVwaW5nLi4uXG4iKTsKKwkJc2NoZWR1bGUoKTsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCWdvdG8gcmVwZWF0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImZpbmlzaFxuIik7CisJcmV0dXJuIDA7Cit9CisKIGludCBwOV90cmFuc19mZF9pbml0KHZvaWQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcyk7IGkrKykKLQkJcDlfbXV4X3BvbGxfdGFza3NbaV0udGFzayA9IE5VTEw7Ci0KIAlwOV9tdXhfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJ2OWZzIik7CiAJaWYgKCFwOV9tdXhfd3EpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAidjlmczogbXV4OiBjcmVhdGluZyB3b3JrcXVldWUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcDlfcG9sbF90YXNrID0ga3RocmVhZF9ydW4ocDlfcG9sbF9wcm9jLCBOVUxMLCAidjlmcy1wb2xsIik7CisJaWYgKElTX0VSUihwOV9wb2xsX3Rhc2spKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHA5X211eF93cSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInY5ZnM6IG11eDogY3JlYXRpbmcgcG9sbCB0YXNrIGZhaWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKHA5X3BvbGxfdGFzayk7CisJfQorCiAJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfdGNwX3RyYW5zKTsKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV91bml4X3RyYW5zKTsKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV9mZF90cmFucyk7CkBAIC0xNjIyLDYgKzExMTYsNyBAQAogCiB2b2lkIHA5X3RyYW5zX2ZkX2V4aXQodm9pZCkKIHsKKwlrdGhyZWFkX3N0b3AocDlfcG9sbF90YXNrKTsKIAl2OWZzX3VucmVnaXN0ZXJfdHJhbnMoJnA5X3RjcF90cmFucyk7CiAJdjlmc191bnJlZ2lzdGVyX3RyYW5zKCZwOV91bml4X3RyYW5zKTsKIAl2OWZzX3VucmVnaXN0ZXJfdHJhbnMoJnA5X2ZkX3RyYW5zKTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19yZG1hLmMgYi9uZXQvOXAvdHJhbnNfcmRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNmNjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvOXAvdHJhbnNfcmRtYS5jCkBAIC0wLDAgKzEsNzEyIEBACisvKgorICogbGludXgvZnMvOXAvdHJhbnNfcmRtYS5jCisgKgorICogUkRNQSB0cmFuc3BvcnQgbGF5ZXIgYmFzZWQgb24gdGhlIHRyYW5zX2ZkLmMgaW1wbGVtZW50YXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBUb20gVHVja2VyIDx0b21Ab3BlbmdyaWRjb21wdXRpbmcuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNiBieSBSdXNzIENveCA8cnNjQHN3dGNoLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bpb25rb3YubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IGJ5IEVyaWMgVmFuIEhlbnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQHNhcm5vZmYuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG86CisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKiAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgorICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdW4uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KKyNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+CisjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisKKyNkZWZpbmUgUDlfUE9SVAkJCTU2NDAKKyNkZWZpbmUgUDlfUkRNQV9TUV9ERVBUSAkzMgorI2RlZmluZSBQOV9SRE1BX1JRX0RFUFRICTMyCisjZGVmaW5lIFA5X1JETUFfU0VORF9TR0UJNAorI2RlZmluZSBQOV9SRE1BX1JFQ1ZfU0dFCTQKKyNkZWZpbmUgUDlfUkRNQV9JUkQJCTAKKyNkZWZpbmUgUDlfUkRNQV9PUkQJCTAKKyNkZWZpbmUgUDlfUkRNQV9USU1FT1VUCQkzMDAwMAkJLyogMzAgc2Vjb25kcyAqLworI2RlZmluZSBQOV9SRE1BX01BWFNJWkUJCSg0KjQwOTYpCS8qIE1pbiBTR0UgaXMgNCwgc28gd2UgY2FuCisJCQkJCQkgKiBzYWZlbHkgYWR2ZXJ0aXNlIGEgbWF4c2l6ZQorCQkJCQkJICogb2YgNjRrICovCisKKyNkZWZpbmUgUDlfUkRNQV9NQVhfU0dFIChQOV9SRE1BX01BWFNJWkUgPj4gUEFHRV9TSElGVCkKKy8qKgorICogc3RydWN0IHA5X3RyYW5zX3JkbWEgLSBSRE1BIHRyYW5zcG9ydCBpbnN0YW5jZQorICoKKyAqIEBzdGF0ZTogdHJhY2tzIHRoZSB0cmFuc3BvcnQgc3RhdGUgbWFjaGluZSBmb3IgY29ubmVjdGlvbiBzZXR1cCBhbmQgdGVhciBkb3duCisgKiBAY21faWQ6IFRoZSBSRE1BIENNIElECisgKiBAcGQ6IFByb3RlY3Rpb24gRG9tYWluIHBvaW50ZXIKKyAqIEBxcDogUXVldWUgUGFpciBwb2ludGVyCisgKiBAY3E6IENvbXBsZXRpb24gUXVldWUgcG9pbnRlcgorICogQGxrZXk6IFRoZSBsb2NhbCBhY2Nlc3Mgb25seSBtZW1vcnkgcmVnaW9uIGtleQorICogQHRpbWVvdXQ6IE51bWJlciBvZiB1U2VjcyB0byB3YWl0IGZvciBjb25uZWN0aW9uIG1hbmFnZW1lbnQgZXZlbnRzCisgKiBAc3FfZGVwdGg6IFRoZSBkZXB0aCBvZiB0aGUgU2VuZCBRdWV1ZQorICogQHNxX3NlbTogU2VtYXBob3JlIGZvciB0aGUgU1EKKyAqIEBycV9kZXB0aDogVGhlIGRlcHRoIG9mIHRoZSBSZWNlaXZlIFF1ZXVlLgorICogQGFkZHI6IFRoZSByZW1vdGUgcGVlcidzIGFkZHJlc3MKKyAqIEByZXFfbG9jazogUHJvdGVjdHMgdGhlIGFjdGl2ZSByZXF1ZXN0IGxpc3QKKyAqIEBzZW5kX3dhaXQ6IFdhaXQgbGlzdCB3aGVuIHRoZSBTUSBmaWxscyB1cAorICogQGNtX2RvbmU6IENvbXBsZXRpb24gZXZlbnQgZm9yIGNvbm5lY3Rpb24gbWFuYWdlbWVudCB0cmFja2luZworICovCitzdHJ1Y3QgcDlfdHJhbnNfcmRtYSB7CisJZW51bSB7CisJCVA5X1JETUFfSU5JVCwKKwkJUDlfUkRNQV9BRERSX1JFU09MVkVELAorCQlQOV9SRE1BX1JPVVRFX1JFU09MVkVELAorCQlQOV9SRE1BX0NPTk5FQ1RFRCwKKwkJUDlfUkRNQV9GTFVTSElORywKKwkJUDlfUkRNQV9DTE9TSU5HLAorCQlQOV9SRE1BX0NMT1NFRCwKKwl9IHN0YXRlOworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3QgaWJfcGQgKnBkOworCXN0cnVjdCBpYl9xcCAqcXA7CisJc3RydWN0IGliX2NxICpjcTsKKwlzdHJ1Y3QgaWJfbXIgKmRtYV9tcjsKKwl1MzIgbGtleTsKKwlsb25nIHRpbWVvdXQ7CisJaW50IHNxX2RlcHRoOworCXN0cnVjdCBzZW1hcGhvcmUgc3Ffc2VtOworCWludCBycV9kZXB0aDsKKwlhdG9taWNfdCBycV9jb3VudDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlzcGlubG9ja190IHJlcV9sb2NrOworCisJc3RydWN0IGNvbXBsZXRpb24gY21fZG9uZTsKK307CisKKy8qKgorICogcDlfcmRtYV9jb250ZXh0IC0gS2VlcHMgdHJhY2sgb2YgaW4tcHJvY2VzcyBXUgorICoKKyAqIEB3Y19vcDogVGhlIG9yaWdpbmFsIFdSIG9wIGZvciB3aGVuIHRoZSBDUUUgY29tcGxldGVzIGluIGVycm9yLgorICogQGJ1c2E6IEJ1cyBhZGRyZXNzIHRvIHVubWFwIHdoZW4gdGhlIFdSIGNvbXBsZXRlcworICogQHJlcTogS2VlcHMgdHJhY2sgb2YgcmVxdWVzdHMgKHNlbmQpCisgKiBAcmM6IEtlZXB0cyB0cmFjayBvZiByZXBsaWVzIChyZWNlaXZlKQorICovCitzdHJ1Y3QgcDlfcmRtYV9yZXE7CitzdHJ1Y3QgcDlfcmRtYV9jb250ZXh0IHsKKwllbnVtIGliX3djX29wY29kZSB3Y19vcDsKKwlkbWFfYWRkcl90IGJ1c2E7CisJdW5pb24geworCQlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwkJc3RydWN0IHA5X2ZjYWxsICpyYzsKKwl9OworfTsKKworLyoqCisgKiBwOV9yZG1hX29wdHMgLSBDb2xsZWN0aW9uIG9mIG1vdW50IG9wdGlvbnMKKyAqIEBwb3J0OiBwb3J0IG9mIGNvbm5lY3Rpb24KKyAqIEBzcV9kZXB0aDogVGhlIHJlcXVlc3RlZCBkZXB0aCBvZiB0aGUgU1EuIFRoaXMgcmVhbGx5IGRvZXNuJ3QgbmVlZAorICogdG8gYmUgYW55IGRlZXBlciB0aGFuIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB1c2VkIGluIHRoZSBjbGllbnQKKyAqIEBycV9kZXB0aDogVGhlIGRlcHRoIG9mIHRoZSBSUS4gU2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBTUSBkZXB0aAorICogQHRpbWVvdXQ6IFRpbWUgdG8gd2FpdCBpbiBtc2VjcyBmb3IgQ00gZXZlbnRzCisgKi8KK3N0cnVjdCBwOV9yZG1hX29wdHMgeworCXNob3J0IHBvcnQ7CisJaW50IHNxX2RlcHRoOworCWludCBycV9kZXB0aDsKKwlsb25nIHRpbWVvdXQ7Cit9OworCisvKgorICogT3B0aW9uIFBhcnNpbmcgKGNvZGUgaW5zcGlyZWQgYnkgTkZTIGNvZGUpCisgKi8KK2VudW0geworCS8qIE9wdGlvbnMgdGhhdCB0YWtlIGludGVnZXIgYXJndW1lbnRzICovCisJT3B0X3BvcnQsIE9wdF9ycV9kZXB0aCwgT3B0X3NxX2RlcHRoLCBPcHRfdGltZW91dCwgT3B0X2VyciwKK307CisKK3N0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKKwl7T3B0X3BvcnQsICJwb3J0PSV1In0sCisJe09wdF9zcV9kZXB0aCwgInNxPSV1In0sCisJe09wdF9ycV9kZXB0aCwgInJxPSV1In0sCisJe09wdF90aW1lb3V0LCAidGltZW91dD0ldSJ9LAorCXtPcHRfZXJyLCBOVUxMfSwKK307CisKKy8qKgorICogcGFyc2Vfb3B0aW9ucyAtIHBhcnNlIG1vdW50IG9wdGlvbnMgaW50byBzZXNzaW9uIHN0cnVjdHVyZQorICogQG9wdGlvbnM6IG9wdGlvbnMgc3RyaW5nIHBhc3NlZCBmcm9tIG1vdW50CisgKiBAb3B0czogdHJhbnNwb3J0LXNwZWNpZmljIHN0cnVjdHVyZSB0byBwYXJzZSBvcHRpb25zIGludG8KKyAqCisgKiBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCAtRVJSTk8gdXBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfb3B0cyhjaGFyICpwYXJhbXMsIHN0cnVjdCBwOV9yZG1hX29wdHMgKm9wdHMpCit7CisJY2hhciAqcDsKKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJaW50IG9wdGlvbjsKKwljaGFyICpvcHRpb25zOworCWludCByZXQ7CisKKwlvcHRzLT5wb3J0ID0gUDlfUE9SVDsKKwlvcHRzLT5zcV9kZXB0aCA9IFA5X1JETUFfU1FfREVQVEg7CisJb3B0cy0+cnFfZGVwdGggPSBQOV9SRE1BX1JRX0RFUFRIOworCW9wdHMtPnRpbWVvdXQgPSBQOV9SRE1BX1RJTUVPVVQ7CisKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIDA7CisKKwlvcHRpb25zID0ga3N0cmR1cChwYXJhbXMsIEdGUF9LRVJORUwpOworCWlmICghb3B0aW9ucykgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAorCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBjb3B5IG9mIG9wdGlvbiBzdHJpbmdcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaW50IHRva2VuOworCQlpbnQgcjsKKwkJaWYgKCEqcCkKKwkJCWNvbnRpbnVlOworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CisJCXIgPSBtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pOworCQlpZiAociA8IDApIHsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCisJCQkJICAgImludGVnZXIgZmllbGQsIGJ1dCBubyBpbnRlZ2VyP1xuIik7CisJCQlyZXQgPSByOworCQkJY29udGludWU7CisJCX0KKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9wb3J0OgorCQkJb3B0cy0+cG9ydCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9zcV9kZXB0aDoKKwkJCW9wdHMtPnNxX2RlcHRoID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3JxX2RlcHRoOgorCQkJb3B0cy0+cnFfZGVwdGggPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfdGltZW91dDoKKwkJCW9wdHMtPnRpbWVvdXQgPSBvcHRpb247CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCS8qIFJRIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIFNRICovCisJb3B0cy0+cnFfZGVwdGggPSBtYXgob3B0cy0+cnFfZGVwdGgsIG9wdHMtPnNxX2RlcHRoKTsKKwlrZnJlZShvcHRpb25zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcDlfY21fZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjID0gaWQtPmNvbnRleHQ7CisJc3RydWN0IHA5X3RyYW5zX3JkbWEgKnJkbWEgPSBjLT50cmFuczsKKwlzd2l0Y2ggKGV2ZW50LT5ldmVudCkgeworCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX1JFU09MVkVEOgorCQlCVUdfT04ocmRtYS0+c3RhdGUgIT0gUDlfUkRNQV9JTklUKTsKKwkJcmRtYS0+c3RhdGUgPSBQOV9SRE1BX0FERFJfUkVTT0xWRUQ7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX1JPVVRFX1JFU09MVkVEOgorCQlCVUdfT04ocmRtYS0+c3RhdGUgIT0gUDlfUkRNQV9BRERSX1JFU09MVkVEKTsKKwkJcmRtYS0+c3RhdGUgPSBQOV9SRE1BX1JPVVRFX1JFU09MVkVEOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDoKKwkJQlVHX09OKHJkbWEtPnN0YXRlICE9IFA5X1JETUFfUk9VVEVfUkVTT0xWRUQpOworCQlyZG1hLT5zdGF0ZSA9IFA5X1JETUFfQ09OTkVDVEVEOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQ6CisJCWlmIChyZG1hKQorCQkJcmRtYS0+c3RhdGUgPSBQOV9SRE1BX0NMT1NFRDsKKwkJaWYgKGMpCisJCQljLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX1RJTUVXQUlUX0VYSVQ6CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfQ0hBTkdFOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9ST1VURV9FUlJPUjoKKwljYXNlIFJETUFfQ01fRVZFTlRfREVWSUNFX1JFTU9WQUw6CisJY2FzZSBSRE1BX0NNX0VWRU5UX01VTFRJQ0FTVF9KT0lOOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9NVUxUSUNBU1RfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1JFSkVDVEVEOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1Q6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVTUE9OU0U6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1VOUkVBQ0hBQkxFOgorCQljLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJCXJkbWFfZGlzY29ubmVjdChyZG1hLT5jbV9pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwljb21wbGV0ZSgmcmRtYS0+Y21fZG9uZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfcmVjdihzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV90cmFuc19yZG1hICpyZG1hLAorCSAgICBzdHJ1Y3QgcDlfcmRtYV9jb250ZXh0ICpjLCBlbnVtIGliX3djX3N0YXR1cyBzdGF0dXMsIHUzMiBieXRlX2xlbikKK3sKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlpbnQgZXJyID0gMDsKKwlpbnQxNl90IHRhZzsKKworCXJlcSA9IE5VTEw7CisJaWJfZG1hX3VubWFwX3NpbmdsZShyZG1hLT5jbV9pZC0+ZGV2aWNlLCBjLT5idXNhLCBjbGllbnQtPm1zaXplLAorCQkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKHN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnIgPSBwOV9wYXJzZV9oZWFkZXIoYy0+cmMsIE5VTEwsIE5VTEwsICZ0YWcsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCXJlcSA9IHA5X3RhZ19sb29rdXAoY2xpZW50LCB0YWcpOworCWlmICghcmVxKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZXEtPnJjID0gYy0+cmM7CisJcDlfY2xpZW50X2NiKGNsaWVudCwgcmVxKTsKKworCXJldHVybjsKKworIGVycl9vdXQ6CisJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgInJlcSAlcCBlcnIgJWQgc3RhdHVzICVkXG4iLAorCQkgICByZXEsIGVyciwgc3RhdHVzKTsKKwlyZG1hLT5zdGF0ZSA9IFA5X1JETUFfRkxVU0hJTkc7CisJY2xpZW50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3NlbmQoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcDlfdHJhbnNfcmRtYSAqcmRtYSwKKwkgICAgc3RydWN0IHA5X3JkbWFfY29udGV4dCAqYywgZW51bSBpYl93Y19zdGF0dXMgc3RhdHVzLCB1MzIgYnl0ZV9sZW4pCit7CisJaWJfZG1hX3VubWFwX3NpbmdsZShyZG1hLT5jbV9pZC0+ZGV2aWNlLAorCQkJICAgIGMtPmJ1c2EsIGMtPnJlcS0+dGMtPnNpemUsCisJCQkgICAgRE1BX1RPX0RFVklDRSk7Cit9CisKK3N0YXRpYyB2b2lkIHFwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqY29udGV4dCkKK3sKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiUVAgZXZlbnQgJWQgY29udGV4dCAlcFxuIiwgZXZlbnQtPmV2ZW50LAorCQkJCQkJCQljb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNxX2NvbnRleHQpCit7CisJc3RydWN0IHA5X2NsaWVudCAqY2xpZW50ID0gY3FfY29udGV4dDsKKwlzdHJ1Y3QgcDlfdHJhbnNfcmRtYSAqcmRtYSA9IGNsaWVudC0+dHJhbnM7CisJaW50IHJldDsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisKKwlpYl9yZXFfbm90aWZ5X2NxKHJkbWEtPmNxLCBJQl9DUV9ORVhUX0NPTVApOworCXdoaWxlICgocmV0ID0gaWJfcG9sbF9jcShjcSwgMSwgJndjKSkgPiAwKSB7CisJCXN0cnVjdCBwOV9yZG1hX2NvbnRleHQgKmMgPSAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgd2Mud3JfaWQ7CisKKwkJc3dpdGNoIChjLT53Y19vcCkgeworCQljYXNlIElCX1dDX1JFQ1Y6CisJCQlhdG9taWNfZGVjKCZyZG1hLT5ycV9jb3VudCk7CisJCQloYW5kbGVfcmVjdihjbGllbnQsIHJkbWEsIGMsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBJQl9XQ19TRU5EOgorCQkJaGFuZGxlX3NlbmQoY2xpZW50LCByZG1hLCBjLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuKTsKKwkJCXVwKCZyZG1hLT5zcV9zZW0pOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAiOXByZG1hOiB1bmV4cGVjdGVkIGNvbXBsZXRpb24gdHlwZSwgIgorCQkJICAgICAgICJjLT53Y19vcD0lZCwgd2Mub3Bjb2RlPSVkLCBzdGF0dXM9JWRcbiIsCisJCQkgICAgICAgYy0+d2Nfb3AsIHdjLm9wY29kZSwgd2Muc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisJCWtmcmVlKGMpOworCX0KK30KKworc3RhdGljIHZvaWQgY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmUsIHZvaWQgKnYpCit7CisJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIkNRIGV2ZW50ICVkIGNvbnRleHQgJXBcbiIsIGUtPmV2ZW50LCB2KTsKK30KKworc3RhdGljIHZvaWQgcmRtYV9kZXN0cm95X3RyYW5zKHN0cnVjdCBwOV90cmFuc19yZG1hICpyZG1hKQoreworCWlmICghcmRtYSkKKwkJcmV0dXJuOworCisJaWYgKHJkbWEtPmRtYV9tciAmJiAhSVNfRVJSKHJkbWEtPmRtYV9tcikpCisJCWliX2RlcmVnX21yKHJkbWEtPmRtYV9tcik7CisKKwlpZiAocmRtYS0+cXAgJiYgIUlTX0VSUihyZG1hLT5xcCkpCisJCWliX2Rlc3Ryb3lfcXAocmRtYS0+cXApOworCisJaWYgKHJkbWEtPnBkICYmICFJU19FUlIocmRtYS0+cGQpKQorCQlpYl9kZWFsbG9jX3BkKHJkbWEtPnBkKTsKKworCWlmIChyZG1hLT5jcSAmJiAhSVNfRVJSKHJkbWEtPmNxKSkKKwkJaWJfZGVzdHJveV9jcShyZG1hLT5jcSk7CisKKwlpZiAocmRtYS0+Y21faWQgJiYgIUlTX0VSUihyZG1hLT5jbV9pZCkpCisJCXJkbWFfZGVzdHJveV9pZChyZG1hLT5jbV9pZCk7CisKKwlrZnJlZShyZG1hKTsKK30KKworc3RhdGljIGludAorcG9zdF9yZWN2KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JkbWFfY29udGV4dCAqYykKK3sKKwlzdHJ1Y3QgcDlfdHJhbnNfcmRtYSAqcmRtYSA9IGNsaWVudC0+dHJhbnM7CisJc3RydWN0IGliX3JlY3Zfd3Igd3IsICpiYWRfd3I7CisJc3RydWN0IGliX3NnZSBzZ2U7CisKKwljLT5idXNhID0gaWJfZG1hX21hcF9zaW5nbGUocmRtYS0+Y21faWQtPmRldmljZSwKKwkJCQkgICAgYy0+cmMtPnNkYXRhLCBjbGllbnQtPm1zaXplLAorCQkJCSAgICBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihyZG1hLT5jbV9pZC0+ZGV2aWNlLCBjLT5idXNhKSkKKwkJZ290byBlcnJvcjsKKworCXNnZS5hZGRyID0gYy0+YnVzYTsKKwlzZ2UubGVuZ3RoID0gY2xpZW50LT5tc2l6ZTsKKwlzZ2UubGtleSA9IHJkbWEtPmxrZXk7CisKKwl3ci5uZXh0ID0gTlVMTDsKKwljLT53Y19vcCA9IElCX1dDX1JFQ1Y7CisJd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZykgYzsKKwl3ci5zZ19saXN0ID0gJnNnZTsKKwl3ci5udW1fc2dlID0gMTsKKwlyZXR1cm4gaWJfcG9zdF9yZWN2KHJkbWEtPnFwLCAmd3IsICZiYWRfd3IpOworCisgZXJyb3I6CisJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIkVJT1xuIik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgcmRtYV9yZXF1ZXN0KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCit7CisJc3RydWN0IHA5X3RyYW5zX3JkbWEgKnJkbWEgPSBjbGllbnQtPnRyYW5zOworCXN0cnVjdCBpYl9zZW5kX3dyIHdyLCAqYmFkX3dyOworCXN0cnVjdCBpYl9zZ2Ugc2dlOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHA5X3JkbWFfY29udGV4dCAqYyA9IE5VTEw7CisJc3RydWN0IHA5X3JkbWFfY29udGV4dCAqcnBsX2NvbnRleHQgPSBOVUxMOworCisJLyogQWxsb2NhdGUgYW4gZmNhbGwgZm9yIHRoZSByZXBseSAqLworCXJwbF9jb250ZXh0ID0ga21hbGxvYyhzaXplb2YgKnJwbF9jb250ZXh0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJwbF9jb250ZXh0KQorCQlnb3RvIGVycl9jbG9zZTsKKworCS8qCisJICogSWYgdGhlIHJlcXVlc3QgaGFzIGEgYnVmZmVyLCBzdGVhbCBpdCwgb3RoZXJ3aXNlCisJICogYWxsb2NhdGUgYSBuZXcgb25lLiAgVHlwaWNhbGx5LCByZXF1ZXN0cyBzaG91bGQgYWxyZWFkeQorCSAqIGhhdmUgcmVjZWl2ZSBidWZmZXJzIGFsbG9jYXRlZCBhbmQganVzdCBzd2FwIHRoZW0gYXJvdW5kCisJICovCisJaWYgKCFyZXEtPnJjKSB7CisJCXJlcS0+cmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpK2NsaWVudC0+bXNpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocmVxLT5yYykgeworCQkJcmVxLT5yYy0+c2RhdGEgPSAoY2hhciAqKSByZXEtPnJjICsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOworCQkJcmVxLT5yYy0+Y2FwYWNpdHkgPSBjbGllbnQtPm1zaXplOworCQl9CisJfQorCXJwbF9jb250ZXh0LT5yYyA9IHJlcS0+cmM7CisJaWYgKCFycGxfY29udGV4dC0+cmMpIHsKKwkJa2ZyZWUocnBsX2NvbnRleHQpOworCQlnb3RvIGVycl9jbG9zZTsKKwl9CisKKwkvKgorCSAqIFBvc3QgYSByZWNlaXZlIGJ1ZmZlciBmb3IgdGhpcyByZXF1ZXN0LiBXZSBuZWVkIHRvIGVuc3VyZQorCSAqIHRoZXJlIGlzIGEgcmVwbHkgYnVmZmVyIGF2YWlsYWJsZSBmb3IgZXZlcnkgb3V0c3RhbmRpbmcKKwkgKiByZXF1ZXN0LiBBIGZsdXNoZWQgcmVxdWVzdCBjYW4gcmVzdWx0IGluIG5vIHJlcGx5IGZvciBhbgorCSAqIG91dHN0YW5kaW5nIHJlcXVlc3QsIHNvIHdlIG11c3Qga2VlcCBhIGNvdW50IHRvIGF2b2lkCisJICogb3ZlcmZsb3dpbmcgdGhlIFJRLgorCSAqLworCWlmIChhdG9taWNfaW5jX3JldHVybigmcmRtYS0+cnFfY291bnQpIDw9IHJkbWEtPnJxX2RlcHRoKSB7CisJCWVyciA9IHBvc3RfcmVjdihjbGllbnQsIHJwbF9jb250ZXh0KTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUocnBsX2NvbnRleHQtPnJjKTsKKwkJCWtmcmVlKHJwbF9jb250ZXh0KTsKKwkJCWdvdG8gZXJyX2Nsb3NlOworCQl9CisJfSBlbHNlCisJCWF0b21pY19kZWMoJnJkbWEtPnJxX2NvdW50KTsKKworCS8qIHJlbW92ZSBwb3N0ZWQgcmVjZWl2ZSBidWZmZXIgZnJvbSByZXF1ZXN0IHN0cnVjdHVyZSAqLworCXJlcS0+cmMgPSBOVUxMOworCisJLyogUG9zdCB0aGUgcmVxdWVzdCAqLworCWMgPSBrbWFsbG9jKHNpemVvZiAqYywgR0ZQX0tFUk5FTCk7CisJaWYgKCFjKQorCQlnb3RvIGVycl9jbG9zZTsKKwljLT5yZXEgPSByZXE7CisKKwljLT5idXNhID0gaWJfZG1hX21hcF9zaW5nbGUocmRtYS0+Y21faWQtPmRldmljZSwKKwkJCQkgICAgYy0+cmVxLT50Yy0+c2RhdGEsIGMtPnJlcS0+dGMtPnNpemUsCisJCQkJICAgIERNQV9UT19ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihyZG1hLT5jbV9pZC0+ZGV2aWNlLCBjLT5idXNhKSkKKwkJZ290byBlcnJvcjsKKworCXNnZS5hZGRyID0gYy0+YnVzYTsKKwlzZ2UubGVuZ3RoID0gYy0+cmVxLT50Yy0+c2l6ZTsKKwlzZ2UubGtleSA9IHJkbWEtPmxrZXk7CisKKwl3ci5uZXh0ID0gTlVMTDsKKwljLT53Y19vcCA9IElCX1dDX1NFTkQ7CisJd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZykgYzsKKwl3ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXdyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCXdyLnNnX2xpc3QgPSAmc2dlOworCXdyLm51bV9zZ2UgPSAxOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmcmRtYS0+c3Ffc2VtKSkKKwkJZ290byBlcnJvcjsKKworCXJldHVybiBpYl9wb3N0X3NlbmQocmRtYS0+cXAsICZ3ciwgJmJhZF93cik7CisKKyBlcnJvcjoKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiRUlPXG4iKTsKKwlyZXR1cm4gLUVJTzsKKworIGVycl9jbG9zZToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRtYS0+cmVxX2xvY2ssIGZsYWdzKTsKKwlpZiAocmRtYS0+c3RhdGUgPCBQOV9SRE1BX0NMT1NJTkcpIHsKKwkJcmRtYS0+c3RhdGUgPSBQOV9SRE1BX0NMT1NJTkc7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkbWEtPnJlcV9sb2NrLCBmbGFncyk7CisJCXJkbWFfZGlzY29ubmVjdChyZG1hLT5jbV9pZCk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkbWEtPnJlcV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcmRtYV9jbG9zZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHA5X3RyYW5zX3JkbWEgKnJkbWE7CisKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuOworCisJcmRtYSA9IGNsaWVudC0+dHJhbnM7CisJaWYgKCFyZG1hKQorCQlyZXR1cm47CisKKwljbGllbnQtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwlyZG1hX2Rpc2Nvbm5lY3QocmRtYS0+Y21faWQpOworCXJkbWFfZGVzdHJveV90cmFucyhyZG1hKTsKK30KKworLyoqCisgKiBhbGxvY19yZG1hIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHJkbWEgdHJhbnNwb3J0IHN0cnVjdHVyZQorICogQG1zaXplOiBNVFUKKyAqIEBkb3R1OiBFeHRlbnNpb24gYXR0cmlidXRlCisgKiBAb3B0czogTW91bnQgb3B0aW9ucyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHN0cnVjdCBwOV90cmFuc19yZG1hICphbGxvY19yZG1hKHN0cnVjdCBwOV9yZG1hX29wdHMgKm9wdHMpCit7CisJc3RydWN0IHA5X3RyYW5zX3JkbWEgKnJkbWE7CisKKwlyZG1hID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zX3JkbWEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkbWEpCisJCXJldHVybiBOVUxMOworCisJcmRtYS0+c3FfZGVwdGggPSBvcHRzLT5zcV9kZXB0aDsKKwlyZG1hLT5ycV9kZXB0aCA9IG9wdHMtPnJxX2RlcHRoOworCXJkbWEtPnRpbWVvdXQgPSBvcHRzLT50aW1lb3V0OworCXNwaW5fbG9ja19pbml0KCZyZG1hLT5yZXFfbG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZyZG1hLT5jbV9kb25lKTsKKwlzZW1hX2luaXQoJnJkbWEtPnNxX3NlbSwgcmRtYS0+c3FfZGVwdGgpOworCWF0b21pY19zZXQoJnJkbWEtPnJxX2NvdW50LCAwKTsKKworCXJldHVybiByZG1hOworfQorCisvKiBpdHMgbm90IGNsZWFyIHRvIG1lIHdlIGNhbiBkbyBhbnl0aGluZyBhZnRlciBzZW5kIGhhcyBiZWVuIHBvc3RlZCAqLworc3RhdGljIGludCByZG1hX2NhbmNlbChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCXJldHVybiAxOworfQorCisvKioKKyAqIHRyYW5zX2NyZWF0ZV9yZG1hIC0gVHJhbnNwb3J0IG1ldGhvZCBmb3IgY3JlYXRpbmcgYXRyYW5zcG9ydCBpbnN0YW5jZQorICogQGNsaWVudDogY2xpZW50IGluc3RhbmNlCisgKiBAYWRkcjogSVAgYWRkcmVzcyBzdHJpbmcKKyAqIEBhcmdzOiBNb3VudCBvcHRpb25zIHN0cmluZworICovCitzdGF0aWMgaW50CityZG1hX2NyZWF0ZV90cmFucyhzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIGNvbnN0IGNoYXIgKmFkZHIsIGNoYXIgKmFyZ3MpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmRtYV9vcHRzIG9wdHM7CisJc3RydWN0IHA5X3RyYW5zX3JkbWEgKnJkbWE7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgcXBfYXR0cjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgZGV2YXR0cjsKKworCS8qIFBhcnNlIHRoZSB0cmFuc3BvcnQgc3BlY2lmaWMgbW91bnQgb3B0aW9ucyAqLworCWVyciA9IHBhcnNlX29wdHMoYXJncywgJm9wdHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBSRE1BIHRyYW5zcG9ydCBzdHJ1Y3R1cmUgKi8KKwlyZG1hID0gYWxsb2NfcmRtYSgmb3B0cyk7CisJaWYgKCFyZG1hKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIENyZWF0ZSB0aGUgUkRNQSBDTSBJRCAqLworCXJkbWEtPmNtX2lkID0gcmRtYV9jcmVhdGVfaWQocDlfY21fZXZlbnRfaGFuZGxlciwgY2xpZW50LCBSRE1BX1BTX1RDUCk7CisJaWYgKElTX0VSUihyZG1hLT5jbV9pZCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBSZXNvbHZlIHRoZSBzZXJ2ZXIncyBhZGRyZXNzICovCisJcmRtYS0+YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlyZG1hLT5hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluX2F0b24oYWRkcik7CisJcmRtYS0+YWRkci5zaW5fcG9ydCA9IGh0b25zKG9wdHMucG9ydCk7CisJZXJyID0gcmRtYV9yZXNvbHZlX2FkZHIocmRtYS0+Y21faWQsIE5VTEwsCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZyZG1hLT5hZGRyLAorCQkJCXJkbWEtPnRpbWVvdXQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZyZG1hLT5jbV9kb25lKTsKKwlpZiAoZXJyIHx8IChyZG1hLT5zdGF0ZSAhPSBQOV9SRE1BX0FERFJfUkVTT0xWRUQpKQorCQlnb3RvIGVycm9yOworCisJLyogUmVzb2x2ZSB0aGUgcm91dGUgdG8gdGhlIHNlcnZlciAqLworCWVyciA9IHJkbWFfcmVzb2x2ZV9yb3V0ZShyZG1hLT5jbV9pZCwgcmRtYS0+dGltZW91dCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKwllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJnJkbWEtPmNtX2RvbmUpOworCWlmIChlcnIgfHwgKHJkbWEtPnN0YXRlICE9IFA5X1JETUFfUk9VVEVfUkVTT0xWRUQpKQorCQlnb3RvIGVycm9yOworCisJLyogUXVlcnkgdGhlIGRldmljZSBhdHRyaWJ1dGVzICovCisJZXJyID0gaWJfcXVlcnlfZGV2aWNlKHJkbWEtPmNtX2lkLT5kZXZpY2UsICZkZXZhdHRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJLyogQ3JlYXRlIHRoZSBDb21wbGV0aW9uIFF1ZXVlICovCisJcmRtYS0+Y3EgPSBpYl9jcmVhdGVfY3EocmRtYS0+Y21faWQtPmRldmljZSwgY3FfY29tcF9oYW5kbGVyLAorCQkJCWNxX2V2ZW50X2hhbmRsZXIsIGNsaWVudCwKKwkJCQlvcHRzLnNxX2RlcHRoICsgb3B0cy5ycV9kZXB0aCArIDEsIDApOworCWlmIChJU19FUlIocmRtYS0+Y3EpKQorCQlnb3RvIGVycm9yOworCWliX3JlcV9ub3RpZnlfY3EocmRtYS0+Y3EsIElCX0NRX05FWFRfQ09NUCk7CisKKwkvKiBDcmVhdGUgdGhlIFByb3RlY3Rpb24gRG9tYWluICovCisJcmRtYS0+cGQgPSBpYl9hbGxvY19wZChyZG1hLT5jbV9pZC0+ZGV2aWNlKTsKKwlpZiAoSVNfRVJSKHJkbWEtPnBkKSkKKwkJZ290byBlcnJvcjsKKworCS8qIENhY2hlIHRoZSBETUEgbGtleSBpbiB0aGUgdHJhbnNwb3J0ICovCisJcmRtYS0+ZG1hX21yID0gTlVMTDsKKwlpZiAoZGV2YXR0ci5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKQorCQlyZG1hLT5sa2V5ID0gcmRtYS0+Y21faWQtPmRldmljZS0+bG9jYWxfZG1hX2xrZXk7CisJZWxzZSB7CisJCXJkbWEtPmRtYV9tciA9IGliX2dldF9kbWFfbXIocmRtYS0+cGQsIElCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJCWlmIChJU19FUlIocmRtYS0+ZG1hX21yKSkKKwkJCWdvdG8gZXJyb3I7CisJCXJkbWEtPmxrZXkgPSByZG1hLT5kbWFfbXItPmxrZXk7CisJfQorCisJLyogQ3JlYXRlIHRoZSBRdWV1ZSBQYWlyICovCisJbWVtc2V0KCZxcF9hdHRyLCAwLCBzaXplb2YgcXBfYXR0cik7CisJcXBfYXR0ci5ldmVudF9oYW5kbGVyID0gcXBfZXZlbnRfaGFuZGxlcjsKKwlxcF9hdHRyLnFwX2NvbnRleHQgPSBjbGllbnQ7CisJcXBfYXR0ci5jYXAubWF4X3NlbmRfd3IgPSBvcHRzLnNxX2RlcHRoOworCXFwX2F0dHIuY2FwLm1heF9yZWN2X3dyID0gb3B0cy5ycV9kZXB0aDsKKwlxcF9hdHRyLmNhcC5tYXhfc2VuZF9zZ2UgPSBQOV9SRE1BX1NFTkRfU0dFOworCXFwX2F0dHIuY2FwLm1heF9yZWN2X3NnZSA9IFA5X1JETUFfUkVDVl9TR0U7CisJcXBfYXR0ci5zcV9zaWdfdHlwZSA9IElCX1NJR05BTF9SRVFfV1I7CisJcXBfYXR0ci5xcF90eXBlID0gSUJfUVBUX1JDOworCXFwX2F0dHIuc2VuZF9jcSA9IHJkbWEtPmNxOworCXFwX2F0dHIucmVjdl9jcSA9IHJkbWEtPmNxOworCWVyciA9IHJkbWFfY3JlYXRlX3FwKHJkbWEtPmNtX2lkLCByZG1hLT5wZCwgJnFwX2F0dHIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJcmRtYS0+cXAgPSByZG1hLT5jbV9pZC0+cXA7CisKKwkvKiBSZXF1ZXN0IGEgY29ubmVjdGlvbiAqLworCW1lbXNldCgmY29ubl9wYXJhbSwgMCwgc2l6ZW9mKGNvbm5fcGFyYW0pKTsKKwljb25uX3BhcmFtLnByaXZhdGVfZGF0YSA9IE5VTEw7CisJY29ubl9wYXJhbS5wcml2YXRlX2RhdGFfbGVuID0gMDsKKwljb25uX3BhcmFtLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSBQOV9SRE1BX0lSRDsKKwljb25uX3BhcmFtLmluaXRpYXRvcl9kZXB0aCA9IFA5X1JETUFfT1JEOworCWVyciA9IHJkbWFfY29ubmVjdChyZG1hLT5jbV9pZCwgJmNvbm5fcGFyYW0pOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZyZG1hLT5jbV9kb25lKTsKKwlpZiAoZXJyIHx8IChyZG1hLT5zdGF0ZSAhPSBQOV9SRE1BX0NPTk5FQ1RFRCkpCisJCWdvdG8gZXJyb3I7CisKKwljbGllbnQtPnRyYW5zID0gcmRtYTsKKwljbGllbnQtPnN0YXR1cyA9IENvbm5lY3RlZDsKKworCXJldHVybiAwOworCitlcnJvcjoKKwlyZG1hX2Rlc3Ryb3lfdHJhbnMocmRtYSk7CisJcmV0dXJuIC1FTk9UQ09OTjsKK30KKworc3RhdGljIHN0cnVjdCBwOV90cmFuc19tb2R1bGUgcDlfcmRtYV90cmFucyA9IHsKKwkubmFtZSA9ICJyZG1hIiwKKwkubWF4c2l6ZSA9IFA5X1JETUFfTUFYU0laRSwKKwkuZGVmID0gMCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuY3JlYXRlID0gcmRtYV9jcmVhdGVfdHJhbnMsCisJLmNsb3NlID0gcmRtYV9jbG9zZSwKKwkucmVxdWVzdCA9IHJkbWFfcmVxdWVzdCwKKwkuY2FuY2VsID0gcmRtYV9jYW5jZWwsCit9OworCisvKioKKyAqIHA5X3RyYW5zX3JkbWFfaW5pdCAtIFJlZ2lzdGVyIHRoZSA5UCBSRE1BIHRyYW5zcG9ydCBkcml2ZXIKKyAqLworc3RhdGljIGludCBfX2luaXQgcDlfdHJhbnNfcmRtYV9pbml0KHZvaWQpCit7CisJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfcmRtYV90cmFucyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwOV90cmFuc19yZG1hX2V4aXQodm9pZCkKK3sKKwl2OWZzX3VucmVnaXN0ZXJfdHJhbnMoJnA5X3JkbWFfdHJhbnMpOworfQorCittb2R1bGVfaW5pdChwOV90cmFuc19yZG1hX2luaXQpOworbW9kdWxlX2V4aXQocDlfdHJhbnNfcmRtYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVG9tIFR1Y2tlciA8dG9tQG9wZW5ncmlkY29tcHV0aW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkRNQSBUcmFuc3BvcnQgZm9yIDlQIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKaW5kZXggOTQ5MTJlMC4uMmQ3NzgxZSAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtMSwxMiArMSwxMCBAQAogLyoKLSAqIFRoZSBHdWVzdCA5cCB0cmFuc3BvcnQgZHJpdmVyCisgKiBUaGUgVmlydGlvIDlwIHRyYW5zcG9ydCBkcml2ZXIKICAqCiAgKiBUaGlzIGlzIGEgYmxvY2sgYmFzZWQgdHJhbnNwb3J0IGRyaXZlciBiYXNlZCBvbiB0aGUgbGd1ZXN0IGJsb2NrIGRyaXZlcgogICogY29kZS4KICAqCi0gKi8KLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgVmFuIEhlbnNiZXJnZW4sIElCTSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFZhbiBIZW5zYmVyZ2VuLCBJQk0gQ29ycG9yYXRpb24KICAqCiAgKiAgQmFzZWQgb24gdmlydGlvIGNvbnNvbGUgZHJpdmVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgpAQCAtNDEsNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+CiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CkBAIC01Myw1MCArNTIsNiBAQAogLyogZ2xvYmFsIHdoaWNoIHRyYWNrcyBoaWdoZXN0IGluaXRpYWxpemVkIGNoYW5uZWwgKi8KIHN0YXRpYyBpbnQgY2hhbl9pbmRleDsKIAotI2RlZmluZSBQOV9JTklUX01BWFRBRwkxNgotCi0KLS8qKgotICogZW51bSBwOV9yZXFfc3RhdHVzX3QgLSB2aXJ0aW8gcmVxdWVzdCBzdGF0dXMKLSAqIEBSRVFfU1RBVFVTX0lETEU6IHJlcXVlc3Qgc2xvdCB1bnVzZWQKLSAqIEBSRVFfU1RBVFVTX1NFTlQ6IHJlcXVlc3Qgc2VudCB0byBzZXJ2ZXIKLSAqIEBSRVFfU1RBVFVTX1JDVkQ6IHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gc2VydmVyCi0gKiBAUkVRX1NUQVRVU19GTFNIOiByZXF1ZXN0IGhhcyBiZWVuIGZsdXNoZWQKLSAqCi0gKiBUaGUgQFJFUV9TVEFUVVNfSURMRSBzdGF0ZSBpcyB1c2VkIHRvIG1hcmsgYSByZXF1ZXN0IHNsb3QgYXMgdW51c2VkCi0gKiBidXQgdXNlIGlzIGFjdHVhbGx5IHRyYWNrZWQgYnkgdGhlIGlkcG9vbCBzdHJ1Y3R1cmUgd2hpY2ggaGFuZGxlcyB0YWcKLSAqIGlkIGFsbG9jYXRpb24uCi0gKgotICovCi0KLWVudW0gcDlfcmVxX3N0YXR1c190IHsKLQlSRVFfU1RBVFVTX0lETEUsCi0JUkVRX1NUQVRVU19TRU5ULAotCVJFUV9TVEFUVVNfUkNWRCwKLQlSRVFfU1RBVFVTX0ZMU0gsCi19OwotCi0vKioKLSAqIHN0cnVjdCBwOV9yZXFfdCAtIHZpcnRpbyByZXF1ZXN0IHNsb3RzCi0gKiBAc3RhdHVzOiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0IHNsb3QKLSAqIEB3cTogd2FpdF9xdWV1ZSBmb3IgdGhlIGNsaWVudCB0byBibG9jayBvbiBmb3IgdGhpcyByZXF1ZXN0Ci0gKgotICogVGhlIHZpcnRpbyB0cmFuc3BvcnQgdXNlcyBhbiBhcnJheSB0byB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cwotICogaW5zdGVhZCBvZiBhIGxpc3QuICBXaGlsZSB0aGlzIG1heSBpbmN1cnIgb3ZlcmhlYWQgZHVyaW5nIGluaXRpYWwKLSAqIGFsbG9jYXRpb24gb3IgZXhwYW5zaW9uLCBpdCBtYWtlcyByZXF1ZXN0IGxvb2t1cCBtdWNoIGVhc2llciBhcyB0aGUKLSAqIHRhZyBpZCBpcyBhIGluZGV4IGludG8gYW4gYXJyYXkuICAoV2UgdXNlIHRhZysxIHNvIHRoYXQgd2UgY2FuIGFjY29tb2RhdGUKLSAqIHRoZSAtMSB0YWcgZm9yIHRoZSBUX1ZFUlNJT04gcmVxdWVzdCkuCi0gKiBUaGlzIGFsc28gaGFzIHRoZSBuaWNlIGVmZmVjdCBvZiBvbmx5IGhhdmluZyB0byBhbGxvY2F0ZSB3YWl0X3F1ZXVlcwotICogb25jZSwgaW5zdGVhZCBvZiBjb25zdGFudGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgdGhlbS4gIEl0cyBwb3NzaWJsZQotICogb3RoZXIgcmVzb3VyY2VzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIHNjaGVtZSBhcyB3ZWxsLgotICoKLSAqLwotCi1zdHJ1Y3QgcDlfcmVxX3QgewotCWludCBzdGF0dXM7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxOwotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgdmlydGlvX2NoYW4gLSBwZXItaW5zdGFuY2UgdHJhbnNwb3J0IGluZm9ybWF0aW9uCiAgKiBAaW5pdGlhbGl6ZWQ6IHdoZXRoZXIgdGhlIGNoYW5uZWwgaXMgaW5pdGlhbGl6ZWQKQEAgLTEyMSw2NyArNzYsMTQgQEAKIAogCXNwaW5sb2NrX3QgbG9jazsKIAorCXN0cnVjdCBwOV9jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKIAotCXN0cnVjdCBwOV9pZHBvb2wgKnRhZ3Bvb2w7Ci0Jc3RydWN0IHA5X3JlcV90ICpyZXFzOwotCWludCBtYXhfdGFnOwotCiAJLyogU2NhdHRlcmxpc3Q6IGNhbiBiZSB0b28gYmlnIGZvciBzdGFjay4gKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklSVFFVRVVFX05VTV07CiB9IGNoYW5uZWxzW01BWF85UF9DSEFOXTsKIAotLyoqCi0gKiBwOV9sb29rdXBfdGFnIC0gTG9va3VwIHJlcXVlc3RzIGJ5IHRhZwotICogQGM6IHZpcnRpbyBjaGFubmVsIHRvIGxvb2t1cCB0YWcgd2l0aGluCi0gKiBAdGFnOiBudW1lcmljIGlkIGZvciB0cmFuc2FjdGlvbgotICoKLSAqIHRoaXMgaXMgYSBzaW1wbGUgYXJyYXkgbG9va3VwLCBidXQgd2lsbCBncm93IHRoZQotICogcmVxdWVzdF9zbG90cyBhcyBuZWNlc3NhcnkgdG8gYWNjb21vZGF0ZSB0cmFuc2FjdGlvbgotICogaWRzIHdoaWNoIGRpZCBub3QgcHJldmlvdXNseSBoYXZlIGEgc2xvdC4KLSAqCi0gKiBCdWdzOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gdXBwZXIgbGltaXQgb24gcmVxdWVzdCBzbG90cyBzZXQKLSAqIGhlcmUsIGJ1dCB0aGF0IHNob3VsZCBiZSBjb25zdHJhaW5lZCBieSB0aGUgaWQgYWNjb3VudGluZy4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHA5X3JlcV90ICpwOV9sb29rdXBfdGFnKHN0cnVjdCB2aXJ0aW9fY2hhbiAqYywgdTE2IHRhZykKLXsKLQkvKiBUaGlzIGxvb2tzIHVwIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGJ5IHRhZyBzbyB3ZSBrbm93IHdoaWNoCi0JICogYnVmZmVyIHRvIHJlYWQgdGhlIGRhdGEgaW50byAqLwotCXRhZysrOwotCi0Jd2hpbGUgKHRhZyA+PSBjLT5tYXhfdGFnKSB7Ci0JCWludCBvbGRfbWF4ID0gYy0+bWF4X3RhZzsKLQkJaW50IGNvdW50OwotCi0JCWlmIChjLT5tYXhfdGFnKQotCQkJYy0+bWF4X3RhZyAqPSAyOwotCQllbHNlCi0JCQljLT5tYXhfdGFnID0gUDlfSU5JVF9NQVhUQUc7Ci0KLQkJYy0+cmVxcyA9IGtyZWFsbG9jKGMtPnJlcXMsIHNpemVvZihzdHJ1Y3QgcDlfcmVxX3QpKmMtPm1heF90YWcsCi0JCQkJCQkJCUdGUF9BVE9NSUMpOwotCQlpZiAoIWMtPnJlcXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJZm9yIChjb3VudCA9IG9sZF9tYXg7IGNvdW50IDwgYy0+bWF4X3RhZzsgY291bnQrKykgewotCQkJYy0+cmVxc1tjb3VudF0uc3RhdHVzID0gUkVRX1NUQVRVU19JRExFOwotCQkJYy0+cmVxc1tjb3VudF0ud3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksCi0JCQkJCQkJCUdGUF9BVE9NSUMpOwotCQkJaWYgKCFjLT5yZXFzW2NvdW50XS53cSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOwotCQkJCUJVRygpOwotCQkJfQotCQkJaW5pdF93YWl0cXVldWVfaGVhZChjLT5yZXFzW2NvdW50XS53cSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gJmMtPnJlcXNbdGFnXTsKLX0KLQotCiAvKiBIb3cgbWFueSBieXRlcyBsZWZ0IGluIHRoaXMgcGFnZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVzdF9vZl9wYWdlKHZvaWQgKmRhdGEpCiB7CkBAIC0xOTcsMjUgKzk5LDEzIEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIHA5X3ZpcnRpb19jbG9zZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zKQorc3RhdGljIHZvaWQgcDlfdmlydGlvX2Nsb3NlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB0cmFucy0+cHJpdjsKLQlpbnQgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7Ci0JcDlfaWRwb29sX2Rlc3Ryb3koY2hhbi0+dGFncG9vbCk7Ci0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgY2hhbi0+bWF4X3RhZzsgY291bnQrKykKLQkJa2ZyZWUoY2hhbi0+cmVxc1tjb3VudF0ud3EpOwotCWtmcmVlKGNoYW4tPnJlcXMpOwotCWNoYW4tPm1heF90YWcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKwlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSBjbGllbnQtPnRyYW5zOwogCiAJbXV0ZXhfbG9jaygmdmlydGlvXzlwX2xvY2spOwogCWNoYW4tPmludXNlID0gZmFsc2U7CiAJbXV0ZXhfdW5sb2NrKCZ2aXJ0aW9fOXBfbG9jayk7Ci0KLQlrZnJlZSh0cmFucyk7CiB9CiAKIC8qKgpAQCAtMjM2LDE3ICsxMjYsMTYgQEAKIAlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB2cS0+dmRldi0+cHJpdjsKIAlzdHJ1Y3QgcDlfZmNhbGwgKnJjOwogCXVuc2lnbmVkIGludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogcmVxdWVzdCBkb25lXG4iKTsKKwogCXdoaWxlICgocmMgPSBjaGFuLT52cS0+dnFfb3BzLT5nZXRfYnVmKGNoYW4tPnZxLCAmbGVuKSkgIT0gTlVMTCkgewotCQlyZXEgPSBwOV9sb29rdXBfdGFnKGNoYW4sIHJjLT50YWcpOwotCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfUkNWRDsKLQkJd2FrZV91cChyZXEtPndxKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogcmMgJXBcbiIsIHJjKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogbG9va3VwIHRhZyAlZFxuIiwgcmMtPnRhZyk7CisJCXJlcSA9IHA5X3RhZ19sb29rdXAoY2hhbi0+Y2xpZW50LCByYy0+dGFnKTsKKwkJcDlfY2xpZW50X2NiKGNoYW4tPmNsaWVudCwgcmVxKTsKIAl9Ci0JLyogSW4gY2FzZSBxdWV1ZSBpcyBzdG9wcGVkIHdhaXRpbmcgZm9yIG1vcmUgYnVmZmVycy4gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMjgzLDggKzE3MiwxNCBAQAogCXJldHVybiBpbmRleC1zdGFydDsKIH0KIAorLyogV2UgZG9uJ3QgY3VycmVudGx5IGFsbG93IGNhbmNlbGluZyBvZiB2aXJ0aW8gcmVxdWVzdHMgKi8KK3N0YXRpYyBpbnQgcDlfdmlydGlvX2NhbmNlbChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCXJldHVybiAxOworfQorCiAvKioKLSAqIHA5X3ZpcnRpb19ycGMgLSBpc3N1ZSBhIHJlcXVlc3QgYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UKKyAqIHA5X3ZpcnRpb19yZXF1ZXN0IC0gaXNzdWUgYSByZXF1ZXN0CiAgKiBAdDogdHJhbnNwb3J0IHN0YXRlCiAgKiBAdGM6ICZwOV9mY2FsbCByZXF1ZXN0IHRvIHRyYW5zbWl0CiAgKiBAcmM6ICZwOV9mY2FsbCB0byBwdXQgcmVwb25zZSBpbnRvCkBAIC0yOTIsNDQgKzE4NywyMiBAQAogICovCiAKIHN0YXRpYyBpbnQKLXA5X3ZpcnRpb19ycGMoc3RydWN0IHA5X3RyYW5zICp0LCBzdHJ1Y3QgcDlfZmNhbGwgKnRjLCBzdHJ1Y3QgcDlfZmNhbGwgKipyYykKK3A5X3ZpcnRpb19yZXF1ZXN0KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCiB7CiAJaW50IGluLCBvdXQ7Ci0JaW50IG4sIGVyciwgc2l6ZTsKLQlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB0LT5wcml2OwotCWNoYXIgKnJkYXRhOwotCXN0cnVjdCBwOV9yZXFfdCAqcmVxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZpcnRpb19jaGFuICpjaGFuID0gY2xpZW50LT50cmFuczsKKwljaGFyICpyZGF0YSA9IChjaGFyICopcmVxLT5yYytzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKIAotCWlmICgqcmMgPT0gTlVMTCkgewotCQkqcmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsgdC0+bXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoISpyYykKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOXAgZGVidWc6IHZpcnRpbyByZXF1ZXN0XG4iKTsKIAotCXJkYXRhID0gKGNoYXIgKikqcmMrc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCk7Ci0KLQluID0gUDlfTk9UQUc7Ci0JaWYgKHRjLT5pZCAhPSBQOV9UVkVSU0lPTikgewotCQluID0gcDlfaWRwb29sX2dldChjaGFuLT50YWdwb29sKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKLQlyZXEgPSBwOV9sb29rdXBfdGFnKGNoYW4sIG4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKLQotCXA5X3NldF90YWcodGMsIG4pOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwIGRlYnVnOiB2aXJ0aW8gcnBjIHRhZyAlZFxuIiwgbik7Ci0KLQlvdXQgPSBwYWNrX3NnX2xpc3QoY2hhbi0+c2csIDAsIFZJUlRRVUVVRV9OVU0sIHRjLT5zZGF0YSwgdGMtPnNpemUpOwotCWluID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0tb3V0LCByZGF0YSwgdC0+bXNpemUpOworCW91dCA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgMCwgVklSVFFVRVVFX05VTSwgcmVxLT50Yy0+c2RhdGEsCisJCQkJCQkJCXJlcS0+dGMtPnNpemUpOworCWluID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0tb3V0LCByZGF0YSwKKwkJCQkJCQkJY2xpZW50LT5tc2l6ZSk7CiAKIAlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfU0VOVDsKIAotCWlmIChjaGFuLT52cS0+dnFfb3BzLT5hZGRfYnVmKGNoYW4tPnZxLCBjaGFuLT5zZywgb3V0LCBpbiwgdGMpKSB7CisJaWYgKGNoYW4tPnZxLT52cV9vcHMtPmFkZF9idWYoY2hhbi0+dnEsIGNoYW4tPnNnLCBvdXQsIGluLCByZXEtPnRjKSkgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLAogCQkJIjlwIGRlYnVnOiB2aXJ0aW8gcnBjIGFkZF9idWYgcmV0dXJuZWQgZmFpbHVyZSIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTMzNywzMSArMjEwLDcgQEAKIAogCWNoYW4tPnZxLT52cV9vcHMtPmtpY2soY2hhbi0+dnEpOwogCi0Jd2FpdF9ldmVudCgqcmVxLT53cSwgcmVxLT5zdGF0dXMgPT0gUkVRX1NUQVRVU19SQ1ZEKTsKLQotCXNpemUgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSByZGF0YSk7Ci0KLQllcnIgPSBwOV9kZXNlcmlhbGl6ZV9mY2FsbChyZGF0YSwgc2l6ZSwgKnJjLCB0LT5leHRlbmRlZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywKLQkJCSI5cCBkZWJ1ZzogdmlydGlvIHJwYyBkZXNlcmlhbGl6ZSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCi0JaWYgKChwOV9kZWJ1Z19sZXZlbCZQOV9ERUJVR19GQ0FMTCkgPT0gUDlfREVCVUdfRkNBTEwpIHsKLQkJY2hhciBidWZbMTUwXTsKLQotCQlwOV9wcmludGZjYWxsKGJ1Ziwgc2l6ZW9mKGJ1ZiksICpyYywgdC0+ZXh0ZW5kZWQpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIj4+PiAlcCAlc1xuIiwgdCwgYnVmKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChuICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayhuLCBjaGFuLT50YWdwb29sKSkKLQkJcDlfaWRwb29sX3B1dChuLCBjaGFuLT50YWdwb29sKTsKLQotCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19JRExFOwotCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwIGRlYnVnOiB2aXJ0aW8gcmVxdWVzdCBraWNrZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00MjIsMTAgKzI3MSw5IEBACiAKIC8qKgogICogcDlfdmlydGlvX2NyZWF0ZSAtIGFsbG9jYXRlIGEgbmV3IHZpcnRpbyBjaGFubmVsCisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UgaW52b2tpbmcgdGhpcyB0cmFuc3BvcnQKICAqIEBkZXZuYW1lOiBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGNoYW5uZWwgdG8gY29ubmVjdCB0byAodW51c2VkKQogICogQGFyZ3M6IGFyZ3MgcGFzc2VkIGZyb20gc3lzX21vdW50KCkgZm9yIHBlci10cmFuc3BvcnQgb3B0aW9ucyAodW51c2VkKQotICogQG1zaXplOiByZXF1ZXN0ZWQgbWF4aW11bSBwYWNrZXQgc2l6ZQotICogQGV4dGVuZGVkOiA5cDIwMDAudSBlbmFibGVkIGZsYWcKICAqCiAgKiBUaGlzIHNldHMgdXAgYSB0cmFuc3BvcnQgY2hhbm5lbCBmb3IgOXAgY29tbXVuaWNhdGlvbi4gIFJpZ2h0IG5vdwogICogd2Ugb25seSBtYXRjaCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNoYW5uZWwsIGJ1dCBldmVudHVhbGx5IHdlIGNvdWxkbG9vayB1cApAQCAtNDQxLDExICsyODksOSBAQAogICoKICAqLwogCi1zdGF0aWMgc3RydWN0IHA5X3RyYW5zICoKLXA5X3ZpcnRpb19jcmVhdGUoY29uc3QgY2hhciAqZGV2bmFtZSwgY2hhciAqYXJncywgaW50IG1zaXplLAotCQkJCQkJCXVuc2lnbmVkIGNoYXIgZXh0ZW5kZWQpCitzdGF0aWMgaW50CitwOV92aXJ0aW9fY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqZGV2bmFtZSwgY2hhciAqYXJncykKIHsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwogCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IGNoYW5uZWxzOwogCWludCBpbmRleCA9IDA7CiAKQEAgLTQ2MywzMCArMzA5LDEzIEBACiAKIAlpZiAoaW5kZXggPj0gTUFYXzlQX0NIQU4pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICI5cDogbm8gY2hhbm5lbHMgYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNoYW4tPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7Ci0JaWYgKElTX0VSUihjaGFuLT50YWdwb29sKSkgewotCQlwcmludGsoS0VSTl9FUlIgIjlwOiBjb3VsZG4ndCBhbGxvY2F0ZSB0YWdwb29sXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCXA5X2lkcG9vbF9nZXQoY2hhbi0+dGFncG9vbCk7IC8qIHJlc2VydmUgdGFnIDAgKi8KLQljaGFuLT5tYXhfdGFnID0gMDsKLQljaGFuLT5yZXFzID0gTlVMTDsKKwljbGllbnQtPnRyYW5zID0gKHZvaWQgKiljaGFuOworCWNoYW4tPmNsaWVudCA9IGNsaWVudDsKIAotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykgewotCQlwcmludGsoS0VSTl9FUlIgIjlwOiBjb3VsZG4ndCBhbGxvY2F0ZSB0cmFuc3BvcnRcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JdHJhbnMtPmV4dGVuZGVkID0gZXh0ZW5kZWQ7Ci0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmNsb3NlID0gcDlfdmlydGlvX2Nsb3NlOwotCXRyYW5zLT5ycGMgPSBwOV92aXJ0aW9fcnBjOwotCXRyYW5zLT5wcml2ID0gY2hhbjsKLQotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC01MjYsNiArMzU1LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHA5X3ZpcnRpb190cmFucyA9IHsKIAkubmFtZSA9ICJ2aXJ0aW8iLAogCS5jcmVhdGUgPSBwOV92aXJ0aW9fY3JlYXRlLAorCS5jbG9zZSA9IHA5X3ZpcnRpb19jbG9zZSwKKwkucmVxdWVzdCA9IHA5X3ZpcnRpb19yZXF1ZXN0LAorCS5jYW5jZWwgPSBwOV92aXJ0aW9fY2FuY2VsLAogCS5tYXhzaXplID0gUEFHRV9TSVpFKjE2LAogCS5kZWYgPSAwLAogCS5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0LzlwL3V0aWwuYyBiL25ldC85cC91dGlsLmMKaW5kZXggOTU4ZmM1OC4uZGM0ZWMwNSAxMDA2NDQKLS0tIGEvbmV0LzlwL3V0aWwuYworKysgYi9uZXQvOXAvdXRpbC5jCkBAIC0xMDUsNiArMTA1LDcgQEAKIAllbHNlIGlmIChlcnJvcikKIAkJcmV0dXJuIC0xOwogCisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICIgaWQgJWQgcG9vbCAlcFxuIiwgaSwgcCk7CiAJcmV0dXJuIGk7CiB9CiBFWFBPUlRfU1lNQk9MKHA5X2lkcG9vbF9nZXQpOwpAQCAtMTIxLDYgKzEyMiw5IEBACiB2b2lkIHA5X2lkcG9vbF9wdXQoaW50IGlkLCBzdHJ1Y3QgcDlfaWRwb29sICpwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIiBpZCAlZCBwb29sICVwXG4iLCBpZCwgcCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOwogCWlkcl9yZW1vdmUoJnAtPnBvb2wsIGlkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCBmNjM0OGUwLi44Zjk0MzFhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTM3LDEwICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKQEAgLTE0NSwxMSArMTQyLDggQEAKIAlpZiAocHJvdG8gPCAwIHx8IHByb3RvID49IEJUX01BWF9QUk9UTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19LTU9EKQotCWlmICghYnRfcHJvdG9bcHJvdG9dKSB7CisJaWYgKCFidF9wcm90b1twcm90b10pCiAJCXJlcXVlc3RfbW9kdWxlKCJidC1wcm90by0lZCIsIHByb3RvKTsKLQl9Ci0jZW5kaWYKIAogCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCmluZGV4IDIyYmE4NjMuLjZjMDIzZjAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwpAQCAtMTc5LDUgKzE3OSw1IEBACiAKIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAogCQkJTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfTk9fQ1NVTSB8IE5FVElGX0ZfTExUWCB8Ci0JCQlORVRJRl9GX05FVE5TX0xPQ0FMOworCQkJTkVUSUZfRl9ORVROU19MT0NBTCB8IE5FVElGX0ZfR1NPOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jCmluZGV4IDU3M2UyMGYuLjBhMDljY2YgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX2lmLmMKQEAgLTM0NywxNSArMzQ3LDIxIEBACiB2b2lkIGJyX2ZlYXR1cmVzX3JlY29tcHV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCiB7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKLQl1bnNpZ25lZCBsb25nIGZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMsIG1hc2s7CiAKLQlmZWF0dXJlcyA9IGJyLT5mZWF0dXJlX21hc2s7CisJZmVhdHVyZXMgPSBtYXNrID0gYnItPmZlYXR1cmVfbWFzazsKKwlpZiAobGlzdF9lbXB0eSgmYnItPnBvcnRfbGlzdCkpCisJCWdvdG8gZG9uZTsKKworCWZlYXR1cmVzICY9IH5ORVRJRl9GX09ORV9GT1JfQUxMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmYnItPnBvcnRfbGlzdCwgbGlzdCkgewotCQlmZWF0dXJlcyA9IG5ldGRldl9jb21wdXRlX2ZlYXR1cmVzKGZlYXR1cmVzLCBwLT5kZXYtPmZlYXR1cmVzKTsKKwkJZmVhdHVyZXMgPSBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzKGZlYXR1cmVzLAorCQkJCQkJICAgICBwLT5kZXYtPmZlYXR1cmVzLCBtYXNrKTsKIAl9CiAKLQlici0+ZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOworZG9uZToKKwlici0+ZGV2LT5mZWF0dXJlcyA9IG5ldGRldl9maXhfZmVhdHVyZXMoZmVhdHVyZXMsIE5VTEwpOwogfQogCiAvKiBjYWxsZWQgd2l0aCBSVE5MICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCBhNGFiZWQ1Li5mYTVjZGE0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTcxOSw3ICs3MTksNyBAQAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAkqZCA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWluOwotCU5GX0hPT0soTkZfQVJQLCBORl9BUlBfRk9SV0FSRCwgc2tiLCAoc3RydWN0IG5ldF9kZXZpY2UgKilpbiwKKwlORl9IT09LKE5GUFJPVE9fQVJQLCBORl9BUlBfRk9SV0FSRCwgc2tiLCAoc3RydWN0IG5ldF9kZXZpY2UgKilpbiwKIAkJKHN0cnVjdCBuZXRfZGV2aWNlICopb3V0LCBicl9uZl9mb3J3YXJkX2ZpbmlzaCk7CiAKIAlyZXR1cm4gTkZfU1RPTEVOOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggNWJiODhlYi4uMGZhMjA4ZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC0zMDUsMjMgKzMwNSwxNCBAQAogCXJldHVybiBOVUxMOwogfQogCi0jaWZuZGVmIENPTkZJR19LTU9ECi0jZGVmaW5lIGZpbmRfaW5saXN0X2xvY2soaCxuLHAsZSxtKSBmaW5kX2lubGlzdF9sb2NrX25vbG9hZCgoaCksKG4pLChlKSwobSkpCi0jZWxzZQogc3RhdGljIHZvaWQgKgogZmluZF9pbmxpc3RfbG9jayhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgsCiAgICBpbnQgKmVycm9yLCBzdHJ1Y3QgbXV0ZXggKm11dGV4KQogewotCXZvaWQgKnJldDsKLQotCXJldCA9IGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKGhlYWQsIG5hbWUsIGVycm9yLCBtdXRleCk7Ci0JaWYgKCFyZXQpIHsKLQkJcmVxdWVzdF9tb2R1bGUoIiVzJXMiLCBwcmVmaXgsIG5hbWUpOwotCQlyZXQgPSBmaW5kX2lubGlzdF9sb2NrX25vbG9hZChoZWFkLCBuYW1lLCBlcnJvciwgbXV0ZXgpOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSgKKwkJCWZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKGhlYWQsIG5hbWUsIGVycm9yLCBtdXRleCksCisJCQkiJXMlcyIsIHByZWZpeCwgbmFtZSk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZWJ0X3RhYmxlICoKIGZpbmRfdGFibGVfbG9jayhjb25zdCBjaGFyICpuYW1lLCBpbnQgKmVycm9yLCBzdHJ1Y3QgbXV0ZXggKm11dGV4KQpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9hZl9jYW4uYyBiL25ldC9jYW4vYWZfY2FuLmMKaW5kZXggODAzNWZiZi4uN2Q0ZDJiMyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9hZl9jYW4uYworKysgYi9uZXQvY2FuL2FmX2Nhbi5jCkBAIC0xMjgsOCArMTI4LDggQEAKIAlpZiAobmV0ICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAotCS8qIHRyeSB0byBsb2FkIHByb3RvY29sIG1vZHVsZSwgd2hlbiBDT05GSUdfS01PRCBpcyBkZWZpbmVkICovCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkvKiB0cnkgdG8gbG9hZCBwcm90b2NvbCBtb2R1bGUga2VybmVsIGlzIG1vZHVsYXIgKi8KIAlpZiAoIXByb3RvX3RhYltwcm90b2NvbF0pIHsKIAkJZXJyID0gcmVxdWVzdF9tb2R1bGUoImNhbi1wcm90by0lZCIsIHByb3RvY29sKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAxNDA4YTA4My4uZDkwMzhlMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTkyNCwxMCArOTI0LDEwIEBACiAJCXN0cmxjcHkoZGV2LT5uYW1lLCBuZXduYW1lLCBJRk5BTVNJWik7CiAKIHJvbGxiYWNrOgotCWVyciA9IGRldmljZV9yZW5hbWUoJmRldi0+ZGV2LCBkZXYtPm5hbWUpOwotCWlmIChlcnIpIHsKKwlyZXQgPSBkZXZpY2VfcmVuYW1lKCZkZXYtPmRldiwgZGV2LT5uYW1lKTsKKwlpZiAocmV0KSB7CiAJCW1lbWNweShkZXYtPm5hbWUsIG9sZG5hbWUsIElGTkFNU0laKTsKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAl3cml0ZV9sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKQEAgLTM5NDcsNiArMzk0Nyw0NiBAQAogCV9fbmV0ZGV2X2luaXRfcXVldWVfbG9ja3Nfb25lKGRldiwgJmRldi0+cnhfcXVldWUsIE5VTEwpOwogfQogCit1bnNpZ25lZCBsb25nIG5ldGRldl9maXhfZmVhdHVyZXModW5zaWduZWQgbG9uZyBmZWF0dXJlcywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKiBGaXggaWxsZWdhbCBTRytDU1VNIGNvbWJpbmF0aW9ucy4gKi8KKwlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9TRykgJiYKKwkgICAgIShmZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKSB7CisJCWlmIChuYW1lKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogRHJvcHBpbmcgTkVUSUZfRl9TRyBzaW5jZSBubyAiCisJCQkgICAgICAgImNoZWNrc3VtIGZlYXR1cmUuXG4iLCBuYW1lKTsKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfU0c7CisJfQorCisJLyogVFNPIHJlcXVpcmVzIHRoYXQgU0cgaXMgcHJlc2VudCBhcyB3ZWxsLiAqLworCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX1RTTykgJiYgIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpKSB7CisJCWlmIChuYW1lKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogRHJvcHBpbmcgTkVUSUZfRl9UU08gc2luY2Ugbm8gIgorCQkJICAgICAgICJTRyBmZWF0dXJlLlxuIiwgbmFtZSk7CisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwl9CisKKwlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX1VGTykgeworCQlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfR0VOX0NTVU0pKSB7CisJCQlpZiAobmFtZSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBEcm9wcGluZyBORVRJRl9GX1VGTyAiCisJCQkJICAgICAgICJzaW5jZSBubyBORVRJRl9GX0hXX0NTVU0gZmVhdHVyZS5cbiIsCisJCQkJICAgICAgIG5hbWUpOworCQkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfVUZPOworCQl9CisKKwkJaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSkgeworCQkJaWYgKG5hbWUpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRHJvcHBpbmcgTkVUSUZfRl9VRk8gIgorCQkJCSAgICAgICAic2luY2Ugbm8gTkVUSUZfRl9TRyBmZWF0dXJlLlxuIiwgbmFtZSk7CisJCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9VRk87CisJCX0KKwl9CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9maXhfZmVhdHVyZXMpOworCiAvKioKICAqCXJlZ2lzdGVyX25ldGRldmljZQktIHJlZ2lzdGVyIGEgbmV0d29yayBkZXZpY2UKICAqCUBkZXY6IGRldmljZSB0byByZWdpc3RlcgpAQCAtNDAzMiwzNiArNDA3Miw3IEBACiAJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU18TkVUSUZfRl9IV19DU1VNKTsKIAl9CiAKLQotCS8qIEZpeCBpbGxlZ2FsIFNHK0NTVU0gY29tYmluYXRpb25zLiAqLwotCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cpICYmCi0JICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IERyb3BwaW5nIE5FVElGX0ZfU0cgc2luY2Ugbm8gY2hlY2tzdW0gZmVhdHVyZS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwotCX0KLQotCS8qIFRTTyByZXF1aXJlcyB0aGF0IFNHIGlzIHByZXNlbnQgYXMgd2VsbC4gKi8KLQlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1RTTykgJiYKLQkgICAgIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogRHJvcHBpbmcgTkVUSUZfRl9UU08gc2luY2Ugbm8gU0cgZmVhdHVyZS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQl9Ci0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1VGTykgewotCQlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19DU1VNKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRHJvcHBpbmcgTkVUSUZfRl9VRk8gc2luY2Ugbm8gIgotCQkJCQkiTkVUSUZfRl9IV19DU1VNIGZlYXR1cmUuXG4iLAotCQkJCQkJCWRldi0+bmFtZSk7Ci0JCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1VGTzsKLQkJfQotCQlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IERyb3BwaW5nIE5FVElGX0ZfVUZPIHNpbmNlIG5vICIKLQkJCQkJIk5FVElGX0ZfU0cgZmVhdHVyZS5cbiIsCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1VGTzsKLQkJfQotCX0KKwlkZXYtPmZlYXR1cmVzID0gbmV0ZGV2X2ZpeF9mZWF0dXJlcyhkZXYtPmZlYXR1cmVzLCBkZXYtPm5hbWUpOwogCiAJLyogRW5hYmxlIHNvZnR3YXJlIEdTTyBpZiBTRyBpcyBzdXBwb3J0ZWQuICovCiAJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKQpAQCAtNDcwMCw0OSArNDcxMSw0NSBAQAogI2VuZGlmIC8qIENPTkZJR19ORVRfRE1BICovCiAKIC8qKgotICoJbmV0ZGV2X2NvbXB1dGVfZmVhdHVyZSAtIGNvbXB1dGUgY29uanVuY3Rpb24gb2YgdHdvIGZlYXR1cmUgc2V0cwotICoJQGFsbDogZmlyc3QgZmVhdHVyZSBzZXQKLSAqCUBvbmU6IHNlY29uZCBmZWF0dXJlIHNldAorICoJbmV0ZGV2X2luY3JlbWVudF9mZWF0dXJlcyAtIGluY3JlbWVudCBmZWF0dXJlIHNldCBieSBvbmUKKyAqCUBhbGw6IGN1cnJlbnQgZmVhdHVyZSBzZXQKKyAqCUBvbmU6IG5ldyBmZWF0dXJlIHNldAorICoJQG1hc2s6IG1hc2sgZmVhdHVyZSBzZXQKICAqCiAgKglDb21wdXRlcyBhIG5ldyBmZWF0dXJlIHNldCBhZnRlciBhZGRpbmcgYSBkZXZpY2Ugd2l0aCBmZWF0dXJlIHNldAotICoJQG9uZSB0byB0aGUgbWFzdGVyIGRldmljZSB3aXRoIGN1cnJlbnQgZmVhdHVyZSBzZXQgQGFsbC4gIFJldHVybnMKLSAqCXRoZSBuZXcgZmVhdHVyZSBzZXQuCisgKglAb25lIHRvIHRoZSBtYXN0ZXIgZGV2aWNlIHdpdGggY3VycmVudCBmZWF0dXJlIHNldCBAYWxsLiAgV2lsbCBub3QKKyAqCWVuYWJsZSBhbnl0aGluZyB0aGF0IGlzIG9mZiBpbiBAbWFzay4gUmV0dXJucyB0aGUgbmV3IGZlYXR1cmUgc2V0LgogICovCi1pbnQgbmV0ZGV2X2NvbXB1dGVfZmVhdHVyZXModW5zaWduZWQgbG9uZyBhbGwsIHVuc2lnbmVkIGxvbmcgb25lKQordW5zaWduZWQgbG9uZyBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzKHVuc2lnbmVkIGxvbmcgYWxsLCB1bnNpZ25lZCBsb25nIG9uZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBtYXNrKQogewotCS8qIGlmIGRldmljZSBuZWVkcyBjaGVja3N1bW1pbmcsIGRvd25ncmFkZSB0byBodyBjaGVja3N1bW1pbmcgKi8KLQlpZiAoYWxsICYgTkVUSUZfRl9OT19DU1VNICYmICEob25lICYgTkVUSUZfRl9OT19DU1VNKSkKLQkJYWxsIF49IE5FVElGX0ZfTk9fQ1NVTSB8IE5FVElGX0ZfSFdfQ1NVTTsKKwkvKiBJZiBkZXZpY2UgbmVlZHMgY2hlY2tzdW1taW5nLCBkb3duZ3JhZGUgdG8gaXQuICovCisgICAgICAgIGlmIChhbGwgJiBORVRJRl9GX05PX0NTVU0gJiYgIShvbmUgJiBORVRJRl9GX05PX0NTVU0pKQorCQlhbGwgXj0gTkVUSUZfRl9OT19DU1VNIHwgKG9uZSAmIE5FVElGX0ZfQUxMX0NTVU0pOworCWVsc2UgaWYgKG1hc2sgJiBORVRJRl9GX0FMTF9DU1VNKSB7CisJCS8qIElmIG9uZSBkZXZpY2Ugc3VwcG9ydHMgdjQvdjYgY2hlY2tzdW1taW5nLCBzZXQgZm9yIGFsbC4gKi8KKwkJaWYgKG9uZSAmIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSkgJiYKKwkJICAgICEoYWxsICYgTkVUSUZfRl9HRU5fQ1NVTSkpIHsKKwkJCWFsbCAmPSB+TkVUSUZfRl9BTExfQ1NVTTsKKwkJCWFsbCB8PSBvbmUgJiAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOworCQl9CiAKLQkvKiBpZiBkZXZpY2UgY2FuJ3QgZG8gYWxsIGNoZWNrc3VtLCBkb3duZ3JhZGUgdG8gaXB2NC9pcHY2ICovCi0JaWYgKGFsbCAmIE5FVElGX0ZfSFdfQ1NVTSAmJiAhKG9uZSAmIE5FVElGX0ZfSFdfQ1NVTSkpCi0JCWFsbCBePSBORVRJRl9GX0hXX0NTVU0KLQkJCXwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CisJCS8qIElmIG9uZSBkZXZpY2Ugc3VwcG9ydHMgaHcgY2hlY2tzdW1taW5nLCBzZXQgZm9yIGFsbC4gKi8KKwkJaWYgKG9uZSAmIE5FVElGX0ZfR0VOX0NTVU0gJiYgIShhbGwgJiBORVRJRl9GX0dFTl9DU1VNKSkgeworCQkJYWxsICY9IH5ORVRJRl9GX0FMTF9DU1VNOworCQkJYWxsIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwkJfQorCX0KIAotCWlmIChvbmUgJiBORVRJRl9GX0dTTykKLQkJb25lIHw9IE5FVElGX0ZfR1NPX1NPRlRXQVJFOwotCW9uZSB8PSBORVRJRl9GX0dTTzsKKwlvbmUgfD0gTkVUSUZfRl9BTExfQ1NVTTsKIAotCS8qCi0JICogSWYgZXZlbiBvbmUgZGV2aWNlIHN1cHBvcnRzIGEgR1NPIHByb3RvY29sIHdpdGggc29mdHdhcmUgZmFsbGJhY2ssCi0JICogZW5hYmxlIGl0IGZvciBhbGwuCi0JICovCi0JYWxsIHw9IG9uZSAmIE5FVElGX0ZfR1NPX1NPRlRXQVJFOwotCi0JLyogSWYgZXZlbiBvbmUgZGV2aWNlIHN1cHBvcnRzIHJvYnVzdCBHU08sIGVuYWJsZSBpdCBmb3IgYWxsLiAqLwotCWlmIChvbmUgJiBORVRJRl9GX0dTT19ST0JVU1QpCi0JCWFsbCB8PSBORVRJRl9GX0dTT19ST0JVU1Q7Ci0KLQlhbGwgJj0gb25lIHwgTkVUSUZfRl9MTFRYOwotCi0JaWYgKCEoYWxsICYgTkVUSUZfRl9BTExfQ1NVTSkpCi0JCWFsbCAmPSB+TkVUSUZfRl9TRzsKLQlpZiAoIShhbGwgJiBORVRJRl9GX1NHKSkKLQkJYWxsICY9IH5ORVRJRl9GX0dTT19NQVNLOworCW9uZSB8PSBhbGwgJiBORVRJRl9GX09ORV9GT1JfQUxMOworCWFsbCAmPSBvbmUgfCBORVRJRl9GX0xMVFggfCBORVRJRl9GX0dTTzsKKwlhbGwgfD0gb25lICYgbWFzayAmIE5FVElGX0ZfT05FX0ZPUl9BTEw7CiAKIAlyZXR1cm4gYWxsOwogfQotRVhQT1JUX1NZTUJPTChuZXRkZXZfY29tcHV0ZV9mZWF0dXJlcyk7CitFWFBPUlRfU1lNQk9MKG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXMpOwogCiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKm5ldGRldl9jcmVhdGVfaGFzaCh2b2lkKQogewpAQCAtNDk1Niw4ICs0OTYzLDYgQEAKIEVYUE9SVF9TWU1CT0woYnJfZmRiX3B1dF9ob29rKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0tNT0QKIEVYUE9SVF9TWU1CT0woZGV2X2xvYWQpOwotI2VuZGlmCiAKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChzb2Z0bmV0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAzNjMwMTMxLi4zMWYyOWQyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAlzdHJ1Y3QgbmxhdHRyICpsaW5raW5mb1tJRkxBX0lORk9fTUFYKzFdOwogCWludCBlcnI7CiAKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiByZXBsYXk6CiAjZW5kaWYKIAllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGTEFfTUFYLCBpZmxhX3BvbGljeSk7CkBAIC0xMTI5LDcgKzExMjksNyBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJCWlmICghb3BzKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQkJaWYgKGtpbmRbMF0pIHsKIAkJCQlfX3J0bmxfdW5sb2NrKCk7CiAJCQkJcmVxdWVzdF9tb2R1bGUoInJ0bmwtbGluay0lcyIsIGtpbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZC5jIGIvbmV0L2RjY3AvY2NpZC5jCmluZGV4IDQ4MDk3NTMuLjhmZTkzMWEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWQuYworKysgYi9uZXQvZGNjcC9jY2lkLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXN0cnVjdCBjY2lkICpjY2lkID0gTlVMTDsKIAogCWNjaWRzX3JlYWRfbG9jaygpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoY2NpZHNbaWRdID09IE5VTEwpIHsKIAkJLyogV2Ugb25seSB0cnkgdG8gbG9hZCBpZiBpbiBwcm9jZXNzIGNvbnRleHQgKi8KIAkJY2NpZHNfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCAxMTA2Mjc4Li5kNGNlMTIyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAlmbC5mbDZfZmxvd2xhYmVsID0gMDsKIAlmbC5vaWYgPSBpcmVxNi0+aWlmOwogCWZsLmZsX2lwX2Rwb3J0ID0gaW5ldF9yc2socmVxKS0+cm10X3BvcnQ7Ci0JZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsICZmbCk7CiAKIAlvcHQgPSBucC0+b3B0OwpAQCAtNTU4LDcgKzU1OCw3IEBACiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmaXJlcTYtPmxvY19hZGRyKTsKIAkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7CiAKIAkJaWYgKGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCBiMjgwNGUyZC4uZTZiZjk5ZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTMwOSw2ICszMDksNyBAQAogCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcSA9IGRjY3BfcnNrKHJlcSk7CiAKIAlpbmV0X3JzayhyZXEpLT5ybXRfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQ7CisJaW5ldF9yc2socmVxKS0+bG9jX3BvcnQJICA9IGRjY3BfaGRyKHNrYiktPmRjY3BoX2Rwb3J0OwogCWluZXRfcnNrKHJlcSktPmFja2VkCSAgPSAwOwogCXJlcS0+cmN2X3duZAkJICA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwogCWRyZXEtPmRyZXFfdGltZXN0YW1wX2VjaG8gPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCBkMDY5NDVjLi44MDlkODAzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJLyogQnVpbGQgYW5kIGNoZWNrc3VtIGhlYWRlciAqLwogCWRoID0gZGNjcF96ZXJvZWRfaGRyKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7CiAKLQlkaC0+ZGNjcGhfc3BvcnQJPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJZGgtPmRjY3BoX3Nwb3J0CT0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJZGgtPmRjY3BoX2Rwb3J0CT0gaW5ldF9yc2socmVxKS0+cm10X3BvcnQ7CiAJZGgtPmRjY3BoX2RvZmYJPSAoZGNjcF9oZWFkZXJfc2l6ZSArCiAJCQkgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuKSAvIDQ7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCA4MDA4Yzg2Li4yOGUyNmJkIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTQ5MCw5ICs0OTAsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZnItPmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsKIAotI2lmZGVmIENPTkZJR19LTU9ECiAJZGV2X2xvYWQoJmluaXRfbmV0LCBpZnItPmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoKGNtZCkgewogCQljYXNlIFNJT0NHSUZBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCBiMDQzZWRhLi4xYTlkZDY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtNjYzLDcgKzY2Myw3IEBACiB2b2lkIGFycF94bWl0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyogU2VuZCBpdCBvZmYsIG1heWJlIGZpbHRlciBpdCB1c2luZyBmaXJld2FsbGluZyBmaXJzdC4gICovCi0JTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsIGRldl9xdWV1ZV94bWl0KTsKKwlORl9IT09LKE5GUFJPVE9fQVJQLCBORl9BUlBfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LCBkZXZfcXVldWVfeG1pdCk7CiB9CiAKIC8qCkBAIC05MjgsNyArOTI4LDcgQEAKIAogCW1lbXNldChORUlHSF9DQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IG5laWdoYm91cl9jYikpOwogCi0JcmV0dXJuIE5GX0hPT0soTkZfQVJQLCBORl9BUlBfSU4sIHNrYiwgZGV2LCBOVUxMLCBhcnBfcHJvY2Vzcyk7CisJcmV0dXJuIE5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9JTiwgc2tiLCBkZXYsIE5VTEwsIGFycF9wcm9jZXNzKTsKIAogZnJlZXNrYjoKIAlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA1MTU0ZTcyLi41NmZjZTNhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC02MTMsOSArNjEzLDcgQEAKIAlpZiAoY29sb24pCiAJCSpjb2xvbiA9IDA7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWRldl9sb2FkKG5ldCwgaWZyLmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHSUZBRERSOgkvKiBHZXQgaW50ZXJmYWNlIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggODljYjA0Ny4uNTY0MjMwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTUzLDExICs1Myw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmluZXRfZGlhZ19sb2NrX2hhbmRsZXIoaW50IHR5cGUpCiB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAoIWluZXRfZGlhZ190YWJsZVt0eXBlXSkKIAkJcmVxdWVzdF9tb2R1bGUoIm5ldC1wZi0lZC1wcm90by0lZC10eXBlLSVkIiwgUEZfTkVUTElOSywKIAkJCSAgICAgICBORVRMSU5LX0lORVRfRElBRywgdHlwZSk7Ci0jZW5kaWYKIAogCW11dGV4X2xvY2soJmluZXRfZGlhZ190YWJsZV9tdXRleCk7CiAJaWYgKCFpbmV0X2RpYWdfdGFibGVbdHlwZV0pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCmluZGV4IGZmZWFmZmMuLjgzMDNlNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCkBAIC03NDIsNiArNzQyLDcgQEAKIAkJCSpvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpICsgbGVuLAogCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKIAkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShwKTsKIAkJCQlrZnJlZShpZCk7CiAJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKCJPT00gaW4gYnNhbGcgKCVkKVxuIiwgX19MSU5FX18pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTQyYmUwNC4uMmVhNmRjYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMTA5LDcgKzExMDksMTIgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KICNlbmRpZgotCXJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4gPSBydDsKKwkvKgorCSAqIFNpbmNlIGxvb2t1cCBpcyBsb2NrZnJlZSwgd2UgbXVzdCBtYWtlIHN1cmUKKwkgKiBwcmV2aW91cyB3cml0ZXMgdG8gcnQgYXJlIGNvbWl0dGVkIHRvIG1lbW9yeQorCSAqIGJlZm9yZSBtYWtpbmcgcnQgdmlzaWJsZSB0byBvdGhlciBDUFVTLgorCSAqLworCXJjdV9hc3NpZ25fcG9pbnRlcihydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluLCBydCk7CiAJc3Bpbl91bmxvY2tfYmgocnRfaGFzaF9sb2NrX2FkZHIoaGFzaCkpOwogCSpycCA9IHJ0OwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggNmEyNTA4Mi4uNGVjNWI0ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCXNwaW5fbG9jaygmdGNwX2NvbmdfbGlzdF9sb2NrKTsKIAljYSA9IHRjcF9jYV9maW5kKG5hbWUpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoIWNhICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CiAJCXNwaW5fdW5sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOwogCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlpZiAoY2EgPT0gaWNzay0+aWNza19jYV9vcHMpCiAJCWdvdG8gb3V0OwogCi0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qIG5vdCBmb3VuZCBhdHRlbXB0IHRvIGF1dG9sb2FkIG1vZHVsZSAqLwogCWlmICghY2EgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggOTkwYTU4NC4uZTRjNWFjOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMzYyLDYgKzM2MiwxNyBAQAogCV9fdTMyIHRzdmFsLCB0c2VjcjsJLyogbmVlZCB0byBpbmNsdWRlIE9QVElPTl9UUyAqLwogfTsKIAorLyogQmV3YXJlOiBTb21ldGhpbmcgaW4gdGhlIEludGVybmV0IGlzIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBvcmRlcmluZyBvZgorICogVENQIG9wdGlvbnMsIHdlIGxlYXJuZWQgdGhpcyB0aHJvdWdoIHRoZSBoYXJkIHdheSwgc28gYmUgY2FyZWZ1bCBoZXJlLgorICogTHVja2lseSB3ZSBjYW4gYXQgbGVhc3QgYmxhbWUgb3RoZXJzIGZvciB0aGVpciBub24tY29tcGxpYW5jZSBidXQgZnJvbQorICogaW50ZXItb3BlcmF0aWJpbGl0eSBwZXJzcGVjdGl2ZSBpdCBzZWVtcyB0aGF0IHdlJ3JlIHNvbWV3aGF0IHN0dWNrIHdpdGgKKyAqIHRoZSBvcmRlcmluZyB3aGljaCB3ZSBoYXZlIGJlZW4gdXNpbmcgaWYgd2Ugd2FudCB0byBrZWVwIHdvcmtpbmcgd2l0aAorICogdGhvc2UgYnJva2VuIHRoaW5ncyAobm90IHRoYXQgaXQgY3VycmVudGx5IGh1cnRzIGFueWJvZHkgYXMgdGhlcmUgaXNuJ3QKKyAqIHBhcnRpY3VsYXIgcmVhc29uIHdoeSB0aGUgb3JkZXJpbmcgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkKS4KKyAqCisgKiBBdCBsZWFzdCBTQUNLX1BFUk0gYXMgdGhlIGZpcnN0IG9wdGlvbiBpcyBrbm93biB0byBsZWFkIHRvIGEgZGlzYXN0ZXIKKyAqIChidXQgaXQgbWF5IHdlbGwgYmUgdGhhdCBvdGhlciBzY2VuYXJpb3MgZmFpbCBzaW1pbGFybHkpLgorICovCiBzdGF0aWMgdm9pZCB0Y3Bfb3B0aW9uc193cml0ZShfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsCiAJCQkgICAgICBfX3U4ICoqbWQ1X2hhc2gpIHsKQEAgLTM3Niw2ICszODcsMTIgQEAKIAkJKm1kNV9oYXNoID0gTlVMTDsKIAl9CiAKKwlpZiAodW5saWtlbHkob3B0cy0+bXNzKSkgeworCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX01TUyA8PCAyNCkgfAorCQkJICAgICAgIChUQ1BPTEVOX01TUyA8PCAxNikgfAorCQkJICAgICAgIG9wdHMtPm1zcyk7CisJfQorCiAJaWYgKGxpa2VseShPUFRJT05fVFMgJiBvcHRzLT5vcHRpb25zKSkgewogCQlpZiAodW5saWtlbHkoT1BUSU9OX1NBQ0tfQURWRVJUSVNFICYgb3B0cy0+b3B0aW9ucykpIHsKIAkJCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfU0FDS19QRVJNIDw8IDI0KSB8CkBAIC0zOTIsMTIgKzQwOSw2IEBACiAJCSpwdHIrKyA9IGh0b25sKG9wdHMtPnRzZWNyKTsKIAl9CiAKLQlpZiAodW5saWtlbHkob3B0cy0+bXNzKSkgewotCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX01TUyA8PCAyNCkgfAotCQkJICAgICAgIChUQ1BPTEVOX01TUyA8PCAxNikgfAotCQkJICAgICAgIG9wdHMtPm1zcyk7Ci0JfQotCiAJaWYgKHVubGlrZWx5KE9QVElPTl9TQUNLX0FEVkVSVElTRSAmIG9wdHMtPm9wdGlvbnMgJiYKIAkJICAgICAhKE9QVElPTl9UUyAmIG9wdHMtPm9wdGlvbnMpKSkgewogCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfApAQCAtNDMyLDcgKzQ0Myw3IEBACiAKIAkJaWYgKHRwLT5yeF9vcHQuZHNhY2spIHsKIAkJCXRwLT5yeF9vcHQuZHNhY2sgPSAwOwotCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MtLTsKKwkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3M7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggZWMzOTRjZi4uNjc2YzgwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpAQCAtMjA0LDYgKzIwNCw3IEBACiAKIAlyZXEtPm1zcyA9IG1zczsKIAlpcmVxLT5ybXRfcG9ydCA9IHRoLT5zb3VyY2U7CisJaXJlcS0+bG9jX3BvcnQgPSB0aC0+ZGVzdDsKIAlpcHY2X2FkZHJfY29weSgmaXJlcTYtPnJtdF9hZGRyLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZpcmVxNi0+bG9jX2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkcik7CiAJaWYgKGlwdjZfb3B0X2FjY2VwdGVkKHNrLCBza2IpIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBlNTMxMGM5Yi4uYjZiMzU2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC00NzYsNyArNDc2LDcgQEAKIAlmbC5mbDZfZmxvd2xhYmVsID0gMDsKIAlmbC5vaWYgPSB0cmVxLT5paWY7CiAJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGluZXRfcnNrKHJlcSktPmxvY19wb3J0OwogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCW9wdCA9IG5wLT5vcHQ7CkBAIC0xMzA5LDcgKzEzMDksNyBAQAogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X3NyYywgJnRyZXEtPmxvY19hZGRyKTsKIAkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCQlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpCkBAIC0xODY1LDcgKzE4NjUsNyBAQAogCQkgICBpLAogCQkgICBzcmMtPnM2X2FkZHIzMlswXSwgc3JjLT5zNl9hZGRyMzJbMV0sCiAJCSAgIHNyYy0+czZfYWRkcjMyWzJdLCBzcmMtPnM2X2FkZHIzMlszXSwKLQkJICAgbnRvaHMoaW5ldF9zayhzayktPnNwb3J0KSwKKwkJICAgbnRvaHMoaW5ldF9yc2socmVxKS0+bG9jX3BvcnQpLAogCQkgICBkZXN0LT5zNl9hZGRyMzJbMF0sIGRlc3QtPnM2X2FkZHIzMlsxXSwKIAkJICAgZGVzdC0+czZfYWRkcjMyWzJdLCBkZXN0LT5zNl9hZGRyMzJbM10sCiAJCSAgIG50b2hzKGluZXRfcnNrKHJlcSktPnJtdF9wb3J0KSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA3ODg5MmNmLi4yNWRjZWY5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC0yNzEsNyArMjcxLDYgQEAKIGNvbmZpZyBORl9DVF9ORVRMSU5LCiAJdHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnCiAJc2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LCi0JZGVwZW5kcyBvbiBORl9OQVQ9biB8fCBORl9OQVQKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCmluZGV4IDA1MDQ4ZTQuLjc5YTY5ODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCkBAIC0yNSwxMSArMjUsMTMgQEAKIGlmIElQX1ZTCiAKIGNvbmZpZwlJUF9WU19JUFY2Ci0JYm9vbCAiSVB2NiBzdXBwb3J0IGZvciBJUFZTIChEQU5HRVJPVVMpIgorCWJvb2wgIklQdjYgc3VwcG9ydCBmb3IgSVBWUyIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAoSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2KQogCS0tLWhlbHAtLS0KIAkgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy4gVGhpcyBpcyBpbmNvbXBsZXRlIGFuZCBtaWdodCBiZSBkYW5nZXJvdXMuCiAKKwkgIFNlZSBodHRwOi8vd3d3Lm1pbmRiYXNrZXQuY29tL2lwdnMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAogY29uZmlnCUlQX1ZTX0RFQlVHCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggMDhlODJkNi4uYTA0MGQ0NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtODEzLDYgKzgxMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKQEAgLTgyMiw3ICs4MjMsNyBAQAogCiAJcGFyc2VfbmF0X3NldHVwID0gcmN1X2RlcmVmZXJlbmNlKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayk7CiAJaWYgKCFwYXJzZV9uYXRfc2V0dXApIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQluZm5sX3VubG9jaygpOwogCQlpZiAocmVxdWVzdF9tb2R1bGUoIm5mLW5hdC1pcHY0IikgPCAwKSB7CkBAIC04NDAsNiArODQxLDcgQEAKIAogCXJldHVybiBwYXJzZV9uYXRfc2V0dXAoY3QsIG1hbmlwLCBhdHRyKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggNDczOWY5Zi4uOWMwYmExNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIHJlcGxheToKIAlzcyA9IG5mbmV0bGlua19nZXRfc3Vic3lzKHR5cGUpOwogCWlmICghc3MpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCW5mbmxfdW5sb2NrKCk7CiAJCXJlcXVlc3RfbW9kdWxlKCJuZm5ldGxpbmstc3Vic3lzLSVkIiwgTkZOTF9TVUJTWVNfSUQodHlwZSkpOwogCQluZm5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKaW5kZXggMmNjMWZmZi4uZjk5NzdiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gIk5GUVVFVUUiLAotCQkuZmFtaWx5CQk9IE5GX0FSUCwKKwkJLmZhbWlseQkJPSBORlBST1RPX0FSUCwKIAkJLnRhcmdldAkJPSBuZnF1ZXVlX3RnLAogCQkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfTkZRX2luZm8pLAogCQkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCmluZGV4IDZmNjJjMzYuLjdhYzU0ZWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCkBAIC02MSw3ICs2MSw3IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkMpIHsKIAkJbSAgPSBudG9obChpcGgtPnNhZGRyKSA8IG50b2hsKGluZm8tPnNyY19taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0+c2FkZHIpID4gbnRvaGwoaW5mby0+c3JjX21heC5pcCk7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkgewogCQkJcHJfZGVidWcoInNyYyBJUCAiIE5JUFFVQURfRk1UICIgTk9UIGluIHJhbmdlICVzIgogCQkJICAgICAgICAgTklQUVVBRF9GTVQgIi0iIE5JUFFVQURfRk1UICJcbiIsCkBAIC03NSw3ICs3NSw3IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBudG9obChpcGgtPmRhZGRyKSA8IG50b2hsKGluZm8tPmRzdF9taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0+ZGFkZHIpID4gbnRvaGwoaW5mby0+ZHN0X21heC5pcCk7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlYpOwogCQlpZiAobSkgewogCQkJcHJfZGVidWcoImRzdCBJUCAiIE5JUFFVQURfRk1UICIgTk9UIGluIHJhbmdlICVzIgogCQkJICAgICAgICAgTklQUVVBRF9GTVQgIi0iIE5JUFFVQURfRk1UICJcbiIsCkBAIC0xMTQsMTQgKzExNCwxNCBAQAogCWlmIChpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDKSB7CiAJCW0gID0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KSA8IDA7CiAJCW0gfD0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5zYWRkciwgJmluZm8tPnNyY19tYXguaW42KSA+IDA7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKIAkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKLQkJbSBePSBpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVjsKKwkJbSBePSAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVik7CiAJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCmluZGV4IDRlYmQ0Y2EuLjI4MGM0NzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwpAQCAtMzE4LDE1ICszMTgsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaXBfbGlzdF9oYXNoX3NpemU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJnQtPmlwaGFzaFtpXSk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQl0LT5wcm9jID0gcHJvY19jcmVhdGUodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X3Byb2NfZGlyLAotCQkgICZyZWNlbnRfbXRfZm9wcyk7CisJdC0+cHJvYyA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X3Byb2NfZGlyLAorCQkgICZyZWNlbnRfbXRfZm9wcywgdCk7CiAJaWYgKHQtPnByb2MgPT0gTlVMTCkgewogCQlrZnJlZSh0KTsKIAkJZ290byBvdXQ7CiAJfQogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCi0JdC0+cHJvY19vbGQgPSBwcm9jX2NyZWF0ZSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX29sZF9kaXIsCi0JCSAgICAgICZyZWNlbnRfb2xkX2ZvcHMpOworCXQtPnByb2Nfb2xkID0gcHJvY19jcmVhdGVfZGF0YSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX29sZF9kaXIsCisJCSAgICAgICZyZWNlbnRfb2xkX2ZvcHMsIHQpOwogCWlmICh0LT5wcm9jX29sZCA9PSBOVUxMKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHByb2Nfb2xkX2Rpcik7CiAJCWtmcmVlKHQpOwpAQCAtMzM0LDExICszMzQsOSBAQAogCX0KIAl0LT5wcm9jX29sZC0+dWlkICAgPSBpcF9saXN0X3VpZDsKIAl0LT5wcm9jX29sZC0+Z2lkICAgPSBpcF9saXN0X2dpZDsKLQl0LT5wcm9jX29sZC0+ZGF0YSAgPSB0OwogI2VuZGlmCiAJdC0+cHJvYy0+dWlkICAgICAgID0gaXBfbGlzdF91aWQ7CiAJdC0+cHJvYy0+Z2lkICAgICAgID0gaXBfbGlzdF9naWQ7Ci0JdC0+cHJvYy0+ZGF0YSAgICAgID0gdDsKICNlbmRpZgogCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnQtPmxpc3QsICZ0YWJsZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDJmZDhhZmEuLjQ4MDE4NGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAogCW5ldGxpbmtfbG9ja190YWJsZSgpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoIW5sX3RhYmxlW3Byb3RvY29sXS5yZWdpc3RlcmVkKSB7CiAJCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAJCXJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9ORVRMSU5LLCBwcm90b2NvbCk7CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jIGIvbmV0L3Bob25ldC9hZl9waG9uZXQuYwppbmRleCA5ZTljNmZjLi5iOWQ5N2VmIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCisrKyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKQEAgLTY3LDExICs2NywxMCBAQAogCX0KIAogCXBucCA9IHBob25ldF9wcm90b19nZXQocHJvdG9jb2wpOwotI2lmZGVmIENPTkZJR19LTU9ECiAJaWYgKHBucCA9PSBOVUxMICYmCiAJICAgIHJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9QSE9ORVQsIHByb3RvY29sKSA9PSAwKQogCQlwbnAgPSBwaG9uZXRfcHJvdG9fZ2V0KHByb3RvY29sKTsKLSNlbmRpZgorCiAJaWYgKHBucCA9PSBOVUxMKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAlpZiAoc29jay0+dHlwZSAhPSBwbnAtPnNvY2tfdHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggOTk3NGIzZi4uOGY0NTdmMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC00OTQsNyArNDk0LDcgQEAKIAogCWFfbyA9IHRjX2xvb2t1cF9hY3Rpb25fbihhY3RfbmFtZSk7CiAJaWYgKGFfbyA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQlydG5sX3VubG9jaygpOwogCQlyZXF1ZXN0X21vZHVsZSgiYWN0XyVzIiwgYWN0X25hbWUpOwogCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDhlYjc5ZTkuLjE2ZTdhYzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWVyciA9IC1FTk9FTlQ7CiAJCXRwX29wcyA9IHRjZl9wcm90b19sb29rdXBfb3BzKHRjYVtUQ0FfS0lORF0pOwogCQlpZiAodHBfb3BzID09IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlzdHJ1Y3QgbmxhdHRyICpraW5kID0gdGNhW1RDQV9LSU5EXTsKIAkJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbWF0Y2guYyBiL25ldC9zY2hlZC9lbWF0Y2guYwppbmRleCA1ZTZmODJlLi5lODI1MTllIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1hdGNoLmMKKysrIGIvbmV0L3NjaGVkL2VtYXRjaC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCQlpZiAoZW0tPm9wcyA9PSBOVUxMKSB7CiAJCQllcnIgPSAtRU5PRU5UOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJCV9fcnRubF91bmxvY2soKTsKIAkJCXJlcXVlc3RfbW9kdWxlKCJlbWF0Y2gta2luZC0ldSIsIGVtX2hkci0+a2luZCk7CiAJCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDExMjJjOTUuLmIxNmFkMjkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7CiAKIAlvcHMgPSBxZGlzY19sb29rdXBfb3BzKGtpbmQpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAob3BzID09IE5VTEwgJiYga2luZCAhPSBOVUxMKSB7CiAJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAJCWlmIChubGFfc3RybGNweShuYW1lLCBraW5kLCBJRk5BTVNJWikgPCBJRk5BTVNJWikgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggOGIwNmZhOS4uMDNlMzg5ZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC01NDUsOSArNTQ1LDEwIEBACiAJCQlleHBpcmVzID0ga3RpbWVfc2V0KDAsIDApOwogCQkJZXhwaXJlcyA9IGt0aW1lX2FkZF9ucyhleHBpcmVzLCBQU0NIRURfVVMyTlMoc2NoZWQpKTsKIAkJCWlmIChocnRpbWVyX3RyeV90b19jYW5jZWwoJnEtPmRlbGF5X3RpbWVyKSAmJgotCQkJICAgIGt0aW1lX3RvX25zKGt0aW1lX3N1YihxLT5kZWxheV90aW1lci5leHBpcmVzLAotCQkJCQkJICBleHBpcmVzKSkgPiAwKQotCQkJCXEtPmRlbGF5X3RpbWVyLmV4cGlyZXMgPSBleHBpcmVzOworCQkJICAgIGt0aW1lX3RvX25zKGt0aW1lX3N1YigKKwkJCQkJaHJ0aW1lcl9nZXRfZXhwaXJlcygmcS0+ZGVsYXlfdGltZXIpLAorCQkJCQlleHBpcmVzKSkgPiAwKQorCQkJCWhydGltZXJfc2V0X2V4cGlyZXMoJnEtPmRlbGF5X3RpbWVyLCBleHBpcmVzKTsKIAkJCWhydGltZXJfcmVzdGFydCgmcS0+ZGVsYXlfdGltZXIpOwogCQkJY2wtPmRlbGF5ZWQgPSAxOwogCQkJY2wtPnhzdGF0cy5vdmVyYWN0aW9ucysrOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCA3YjU1NzJkLi45M2NkMzBjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlIG5vb3BfbmV0ZGV2X3F1ZXVlID0gewogCS5xZGlzYwkJPQkmbm9vcF9xZGlzYywKKwkucWRpc2Nfc2xlZXBpbmcJPQkmbm9vcF9xZGlzYywKIH07CiAKIHN0cnVjdCBRZGlzYyBub29wX3FkaXNjID0gewpAQCAtMzUyLDYgKzM1Myw3IEBACiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2M7CiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSBub3F1ZXVlX25ldGRldl9xdWV1ZSA9IHsKIAkucWRpc2MJCT0JJm5vcXVldWVfcWRpc2MsCisJLnFkaXNjX3NsZWVwaW5nCT0JJm5vcXVldWVfcWRpc2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2MgPSB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCBhNDlmYTgwLi5iZjYxMmQ5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTM2OSw3ICszNjksNyBAQAogdm9pZCBzY3RwX2ljbXBfZnJhZ19uZWVkZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCSAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCwgX191MzIgcG10dSkKIHsKLQlpZiAoIXQgfHwgKHQtPnBhdGhtdHUgPT0gcG10dSkpCisJaWYgKCF0IHx8ICh0LT5wYXRobXR1IDw9IHBtdHUpKQogCQlyZXR1cm47CiAKIAlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCBkNGMzZmJjLi5hNmEwZWE3IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtMjU0NCw2ICsyNTQ0LDcgQEAKIAlzY3RwX3NodXRkb3duaGRyX3QgKnNkaDsKIAlzY3RwX2Rpc3Bvc2l0aW9uX3QgZGlzcG9zaXRpb247CiAJc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2OworCV9fdTMyIGN0c247CiAKIAlpZiAoIXNjdHBfdnRhZ192ZXJpZnkoY2h1bmssIGFzb2MpKQogCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CkBAIC0yNTU4LDYgKzI1NTksMTQgQEAKIAlzZGggPSAoc2N0cF9zaHV0ZG93bmhkcl90ICopY2h1bmstPnNrYi0+ZGF0YTsKIAlza2JfcHVsbChjaHVuay0+c2tiLCBzaXplb2Yoc2N0cF9zaHV0ZG93bmhkcl90KSk7CiAJY2h1bmstPnN1Ymguc2h1dGRvd25faGRyID0gc2RoOworCWN0c24gPSBudG9obChzZGgtPmN1bV90c25fYWNrKTsKKworCS8qIElmIEN1bXVsYXRpdmUgVFNOIEFjayBiZXlvbmQgdGhlIG1heCB0c24gY3VycmVudGx5CisJICogc2VuZCwgdGVybWluYXRpbmcgdGhlIGFzc29jaWF0aW9uIGFuZCByZXNwb25kIHRvIHRoZQorCSAqIHNlbmRlciB3aXRoIGFuIEFCT1JULgorCSAqLworCWlmICghVFNOX2x0KGN0c24sIGFzb2MtPm5leHRfdHNuKSkKKwkJcmV0dXJuIHNjdHBfc2ZfdmlvbGF0aW9uX2N0c24oZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwogCiAJLyogQVBJIDUuMy4xLjUgU0NUUF9TSFVURE9XTl9FVkVOVAogCSAqIFdoZW4gYSBwZWVyIHNlbmRzIGEgU0hVVERPV04sIFNDVFAgZGVsaXZlcnMgdGhpcyBub3RpZmljYXRpb24gdG8KQEAgLTI1OTksNiArMjYwOCw1MSBAQAogCXJldHVybiBkaXNwb3NpdGlvbjsKIH0KIAorLyoKKyAqIHNjdHBfc2ZfZG9fOV8yX3NodXRfY3RzbgorICoKKyAqIE9uY2UgYW4gZW5kcG9pbnQgaGFzIHJlYWNoZWQgdGhlIFNIVVRET1dOLVJFQ0VJVkVEIHN0YXRlLAorICogaXQgTVVTVCBOT1Qgc2VuZCBhIFNIVVRET1dOIGluIHJlc3BvbnNlIHRvIGEgVUxQIHJlcXVlc3QuCisgKiBUaGUgQ3VtdWxhdGl2ZSBUU04gQWNrIG9mIHRoZSByZWNlaXZlZCBTSFVURE9XTiBjaHVuaworICogTVVTVCBiZSBwcm9jZXNzZWQuCisgKi8KK3NjdHBfZGlzcG9zaXRpb25fdCBzY3RwX3NmX2RvXzlfMl9zaHV0X2N0c24oY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCQkJICAgY29uc3Qgc2N0cF9zdWJ0eXBlX3QgdHlwZSwKKwkJCQkJICAgdm9pZCAqYXJnLAorCQkJCQkgICBzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpCit7CisJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXJnOworCXNjdHBfc2h1dGRvd25oZHJfdCAqc2RoOworCisJaWYgKCFzY3RwX3Z0YWdfdmVyaWZ5KGNodW5rLCBhc29jKSkKKwkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOworCisJLyogTWFrZSBzdXJlIHRoYXQgdGhlIFNIVVRET1dOIGNodW5rIGhhcyBhIHZhbGlkIGxlbmd0aC4gKi8KKwlpZiAoIXNjdHBfY2h1bmtfbGVuZ3RoX3ZhbGlkKGNodW5rLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVua190KSkpCisJCXJldHVybiBzY3RwX3NmX3Zpb2xhdGlvbl9jaHVua2xlbihlcCwgYXNvYywgdHlwZSwgYXJnLAorCQkJCQkJICBjb21tYW5kcyk7CisKKwlzZGggPSAoc2N0cF9zaHV0ZG93bmhkcl90ICopY2h1bmstPnNrYi0+ZGF0YTsKKworCS8qIElmIEN1bXVsYXRpdmUgVFNOIEFjayBiZXlvbmQgdGhlIG1heCB0c24gY3VycmVudGx5CisJICogc2VuZCwgdGVybWluYXRpbmcgdGhlIGFzc29jaWF0aW9uIGFuZCByZXNwb25kIHRvIHRoZQorCSAqIHNlbmRlciB3aXRoIGFuIEFCT1JULgorCSAqLworCWlmICghVFNOX2x0KG50b2hsKHNkaC0+Y3VtX3Rzbl9hY2spLCBhc29jLT5uZXh0X3RzbikpCisJCXJldHVybiBzY3RwX3NmX3Zpb2xhdGlvbl9jdHNuKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKKworCS8qIHZlcmlmeSwgYnkgY2hlY2tpbmcgdGhlIEN1bXVsYXRpdmUgVFNOIEFjayBmaWVsZCBvZiB0aGUKKwkgKiBjaHVuaywgdGhhdCBhbGwgaXRzIG91dHN0YW5kaW5nIERBVEEgY2h1bmtzIGhhdmUgYmVlbgorCSAqIHJlY2VpdmVkIGJ5IHRoZSBTSFVURE9XTiBzZW5kZXIuCisJICovCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9QUk9DRVNTX0NUU04sCisJCQlTQ1RQX0JFMzIoc2RoLT5jdW1fdHNuX2FjaykpOworCisJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTsKK30KKwogLyogUkZDIDI5NjAgOS4yCiAgKiBJZiBhbiBlbmRwb2ludCBpcyBpbiBTSFVURE9XTi1BQ0stU0VOVCBzdGF0ZSBhbmQgcmVjZWl2ZXMgYW4gSU5JVCBjaHVuawogICogKGUuZy4sIGlmIHRoZSBTSFVURE9XTiBDT01QTEVURSB3YXMgbG9zdCkgd2l0aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKaW5kZXggZGQ0ZGRjNC4uNWM4MTg2ZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYwpAQCAtMjY2LDExICsyNjYsMTEgQEAKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzlfMl9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzlfMl9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fOV8yX3NodXRkb3duX2FjayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb185XzJfc2h1dF9jdHNuKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIH0gLyogVFlQRV9TQ1RQX1NIVVRET1dOICovCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggM2U4ZDRlMy4uMmI3YTRiNSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAogCXNvY2stPnR5cGUgPSB0eXBlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qIEF0dGVtcHQgdG8gbG9hZCBhIHByb3RvY29sIG1vZHVsZSBpZiB0aGUgZmluZCBmYWlsZWQuCiAJICoKIAkgKiAxMi8wOS8xOTk2IE1hcmNpbjogQnV0ISB0aGlzIG1ha2VzIFJFQUxMWSBvbmx5IHNlbnNlLCBpZiB0aGUgdXNlcgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoLmMgYi9uZXQvc3VucnBjL2F1dGguYwppbmRleCA2YmZlYTllLi40MzZiZjFiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGguYworKysgYi9uZXQvc3VucnBjL2F1dGguYwpAQCAtODMsMTAgKzgzLDggQEAKIAlpZiAoZmxhdm9yID49IFJQQ19BVVRIX01BWEZMQVZPUikKIAkJZ290byBvdXQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWlmICgob3BzID0gYXV0aF9mbGF2b3JzW2ZsYXZvcl0pID09IE5VTEwpCiAJCXJlcXVlc3RfbW9kdWxlKCJycGMtYXV0aC0ldSIsIGZsYXZvcik7Ci0jZW5kaWYKIAlzcGluX2xvY2soJnJwY19hdXRoZmxhdm9yX2xvY2spOwogCW9wcyA9IGF1dGhfZmxhdm9yc1tmbGF2b3JdOwogCWlmIChvcHMgPT0gTlVMTCB8fCAhdHJ5X21vZHVsZV9nZXQob3BzLT5vd25lcikpIHsKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBjNjQ3YWFiLi5kYzUwNGQzIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC03MTEsMjggKzcxMSwzMCBAQAogCQkJCSAgICBpbnQgdHlwZSwgdW5zaWduZWQgaGFzaCwgaW50ICplcnJvcikKIHsKIAlzdHJ1Y3Qgc29jayAqdTsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBwYXRoIHBhdGg7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoc3VubmFtZS0+c3VuX3BhdGhbMF0pIHsKLQkJZXJyID0gcGF0aF9sb29rdXAoc3VubmFtZS0+c3VuX3BhdGgsIExPT0tVUF9GT0xMT1csICZuZCk7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJCWVyciA9IGtlcm5fcGF0aChzdW5uYW1lLT5zdW5fcGF0aCwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwogCQlpZiAoZXJyKQogCQkJZ290byBmYWlsOwotCQllcnIgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSk7CisJCWlub2RlID0gcGF0aC5kZW50cnktPmRfaW5vZGU7CisJCWVyciA9IGlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHB1dF9mYWlsOwogCiAJCWVyciA9IC1FQ09OTlJFRlVTRUQ7Ci0JCWlmICghU19JU1NPQ0sobmQucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCWlmICghU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpCiAJCQlnb3RvIHB1dF9mYWlsOwotCQl1ID0gdW5peF9maW5kX3NvY2tldF9ieWlub2RlKG5ldCwgbmQucGF0aC5kZW50cnktPmRfaW5vZGUpOworCQl1ID0gdW5peF9maW5kX3NvY2tldF9ieWlub2RlKG5ldCwgaW5vZGUpOwogCQlpZiAoIXUpCiAJCQlnb3RvIHB1dF9mYWlsOwogCiAJCWlmICh1LT5za190eXBlID09IHR5cGUpCi0JCQl0b3VjaF9hdGltZShuZC5wYXRoLm1udCwgbmQucGF0aC5kZW50cnkpOworCQkJdG91Y2hfYXRpbWUocGF0aC5tbnQsIHBhdGguZGVudHJ5KTsKIAotCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJCXBhdGhfcHV0KCZwYXRoKTsKIAogCQllcnI9LUVQUk9UT1RZUEU7CiAJCWlmICh1LT5za190eXBlICE9IHR5cGUpIHsKQEAgLTc1Myw3ICs3NTUsNyBAQAogCXJldHVybiB1OwogCiBwdXRfZmFpbDoKLQlwYXRoX3B1dCgmbmQucGF0aCk7CisJcGF0aF9wdXQoJnBhdGgpOwogZmFpbDoKIAkqZXJyb3I9ZXJyOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9LY29uZmlnIGIvc2FtcGxlcy9LY29uZmlnCmluZGV4IGUxZmI0NzEuLjRiMDJmNWEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvS2NvbmZpZworKysgYi9zYW1wbGVzL0tjb25maWcKQEAgLTEzLDYgKzEzLDEyIEBACiAJaGVscAogCSAgVGhpcyBidWlsZCBtYXJrZXJzIGV4YW1wbGUgbW9kdWxlcy4KIAorY29uZmlnIFNBTVBMRV9UUkFDRVBPSU5UUworCXRyaXN0YXRlICJCdWlsZCB0cmFjZXBvaW50cyBleGFtcGxlcyAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCisJZGVwZW5kcyBvbiBUUkFDRVBPSU5UUyAmJiBtCisJaGVscAorCSAgVGhpcyBidWlsZCB0cmFjZXBvaW50cyBleGFtcGxlIG1vZHVsZXMuCisKIGNvbmZpZyBTQU1QTEVfS09CSkVDVAogCXRyaXN0YXRlICJCdWlsZCBrb2JqZWN0IGV4YW1wbGVzIgogCWhlbHAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTWFrZWZpbGUgYi9zYW1wbGVzL01ha2VmaWxlCmluZGV4IDJlMDI1NzUuLjEwZWFjYTggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTWFrZWZpbGUKKysrIGIvc2FtcGxlcy9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKICMgTWFrZWZpbGUgZm9yIExpbnV4IHNhbXBsZXMgY29kZQogCi1vYmotJChDT05GSUdfU0FNUExFUykJKz0gbWFya2Vycy8ga29iamVjdC8ga3Byb2Jlcy8KK29iai0kKENPTkZJR19TQU1QTEVTKQkrPSBtYXJrZXJzLyBrb2JqZWN0LyBrcHJvYmVzLyB0cmFjZXBvaW50cy8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbWFya2Vycy9wcm9iZS1leGFtcGxlLmMgYi9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jCmluZGV4IGM4ZTA5OWQuLjJkZmIzYjMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvbWFya2Vycy9wcm9iZS1leGFtcGxlLmMKKysrIGIvc2FtcGxlcy9tYXJrZXJzL3Byb2JlLWV4YW1wbGUuYwpAQCAtODEsNiArODEsNyBAQAogCQkJcHJvYmVfYXJyYXlbaV0ucHJvYmVfZnVuYywgJnByb2JlX2FycmF5W2ldKTsKIAlwcmludGsoS0VSTl9JTkZPICJOdW1iZXIgb2YgZXZlbnQgYiA6ICV1XG4iLAogCQkJYXRvbWljX3JlYWQoJmV2ZW50Yl9jb3VudCkpOworCW1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CiB9CiAKIG1vZHVsZV9pbml0KHByb2JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy90cmFjZXBvaW50cy9NYWtlZmlsZSBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NzlhZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjIGJ1aWxkcyB0aGUgdHJhY2Vwb2ludCBleGFtcGxlIGtlcm5lbCBtb2R1bGVzOworIyB0aGVuIHRvIHVzZSBvbmUgKGFzIHJvb3QpOiAgaW5zbW9kIDxtb2R1bGVfbmFtZS5rbz4KKworb2JqLSQoQ09ORklHX1NBTVBMRV9UUkFDRVBPSU5UUykgKz0gdHJhY2Vwb2ludC1zYW1wbGUubworb2JqLSQoQ09ORklHX1NBTVBMRV9UUkFDRVBPSU5UUykgKz0gdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUubworb2JqLSQoQ09ORklHX1NBTVBMRV9UUkFDRVBPSU5UUykgKz0gdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUyLm8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHAtc2FtcGxlcy10cmFjZS5oIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNmI1NQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHAtc2FtcGxlcy10cmFjZS5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX1RQX1NBTVBMRVNfVFJBQ0VfSAorI2RlZmluZSBfVFBfU0FNUExFU19UUkFDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CS8qIGZvciBzdHJ1Y3QgaW5vZGUgYW5kIHN0cnVjdCBmaWxlICovCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitERUZJTkVfVFJBQ0Uoc3Vic3lzX2V2ZW50LAorCVRQUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpLAorCVRQQVJHUyhpbm9kZSwgZmlsZSkpOworREVGSU5FX1RSQUNFKHN1YnN5c19ldmVudGIsCisJVFBQUk9UTyh2b2lkKSwKKwlUUEFSR1MoKSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUuYyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFiZmRkCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXByb2JlLXNhbXBsZS5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiB0cmFjZXBvaW50LXByb2JlLXNhbXBsZS5jCisgKgorICogc2FtcGxlIHRyYWNlcG9pbnQgcHJvYmVzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSAidHAtc2FtcGxlcy10cmFjZS5oIgorCisvKgorICogSGVyZSB0aGUgY2FsbGVyIG9ubHkgZ3VhcmFudGVlcyBsb2NraW5nIGZvciBzdHJ1Y3QgZmlsZSBhbmQgc3RydWN0IGlub2RlLgorICogTG9ja2luZyBtdXN0IHRoZXJlZm9yZSBiZSBkb25lIGluIHRoZSBwcm9iZSB0byB1c2UgdGhlIGRlbnRyeS4KKyAqLworc3RhdGljIHZvaWQgcHJvYmVfc3Vic3lzX2V2ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXBhdGhfZ2V0KCZmaWxlLT5mX3BhdGgpOworCWRnZXQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRXZlbnQgaXMgZW5jb3VudGVyZWQgd2l0aCBmaWxlbmFtZSAlc1xuIiwKKwkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWRwdXQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisJcGF0aF9wdXQoJmZpbGUtPmZfcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2JlX3N1YnN5c19ldmVudGIodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJFdmVudCBCIGlzIGVuY291bnRlcmVkXG4iKTsKK30KKworaW50IF9faW5pdCB0cF9zYW1wbGVfdHJhY2VfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9zdWJzeXNfZXZlbnQocHJvYmVfc3Vic3lzX2V2ZW50KTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc3Vic3lzX2V2ZW50Yihwcm9iZV9zdWJzeXNfZXZlbnRiKTsKKwlXQVJOX09OKHJldCk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQodHBfc2FtcGxlX3RyYWNlX2luaXQpOworCit2b2lkIF9fZXhpdCB0cF9zYW1wbGVfdHJhY2VfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfdHJhY2Vfc3Vic3lzX2V2ZW50Yihwcm9iZV9zdWJzeXNfZXZlbnRiKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3N1YnN5c19ldmVudChwcm9iZV9zdWJzeXNfZXZlbnQpOworfQorCittb2R1bGVfZXhpdCh0cF9zYW1wbGVfdHJhY2VfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRyYWNlcG9pbnQgUHJvYmVzIFNhbXBsZXMiKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUyLmMgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtcHJvYmUtc2FtcGxlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOWZjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtcHJvYmUtc2FtcGxlMi5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiB0cmFjZXBvaW50LXByb2JlLXNhbXBsZTIuYworICoKKyAqIDJuZCBzYW1wbGUgdHJhY2Vwb2ludCBwcm9iZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSAidHAtc2FtcGxlcy10cmFjZS5oIgorCisvKgorICogSGVyZSB0aGUgY2FsbGVyIG9ubHkgZ3VhcmFudGVlcyBsb2NraW5nIGZvciBzdHJ1Y3QgZmlsZSBhbmQgc3RydWN0IGlub2RlLgorICogTG9ja2luZyBtdXN0IHRoZXJlZm9yZSBiZSBkb25lIGluIHRoZSBwcm9iZSB0byB1c2UgdGhlIGRlbnRyeS4KKyAqLworc3RhdGljIHZvaWQgcHJvYmVfc3Vic3lzX2V2ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXByaW50ayhLRVJOX0lORk8gIkV2ZW50IGlzIGVuY291bnRlcmVkIHdpdGggaW5vZGUgbnVtYmVyICVsdVxuIiwKKwkJaW5vZGUtPmlfaW5vKTsKK30KKworaW50IF9faW5pdCB0cF9zYW1wbGVfdHJhY2VfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9zdWJzeXNfZXZlbnQocHJvYmVfc3Vic3lzX2V2ZW50KTsKKwlXQVJOX09OKHJldCk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQodHBfc2FtcGxlX3RyYWNlX2luaXQpOworCit2b2lkIF9fZXhpdCB0cF9zYW1wbGVfdHJhY2VfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfdHJhY2Vfc3Vic3lzX2V2ZW50KHByb2JlX3N1YnN5c19ldmVudCk7Cit9CisKK21vZHVsZV9leGl0KHRwX3NhbXBsZV90cmFjZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF0aGlldSBEZXNub3llcnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVHJhY2Vwb2ludCBQcm9iZXMgU2FtcGxlcyIpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZTRiN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKQEAgLTAsMCArMSw1MyBAQAorLyogdHJhY2Vwb2ludC1zYW1wbGUuYworICoKKyAqIEV4ZWN1dGVzIGEgdHJhY2Vwb2ludCB3aGVuIC9wcm9jL3RyYWNlcG9pbnQtZXhhbXBsZSBpcyBvcGVuZWQuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA3IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlICJ0cC1zYW1wbGVzLXRyYWNlLmgiCisKK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGVudHJ5X2V4YW1wbGU7CisKK3N0YXRpYyBpbnQgbXlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgaTsKKworCXRyYWNlX3N1YnN5c19ldmVudChpbm9kZSwgZmlsZSk7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCXRyYWNlX3N1YnN5c19ldmVudGIoKTsKKwlyZXR1cm4gLUVQRVJNOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXJrX29wcyA9IHsKKwkub3BlbiA9IG15X29wZW4sCit9OworCitzdGF0aWMgaW50IGV4YW1wbGVfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0FMRVJUICJleGFtcGxlIGluaXRcbiIpOworCXBlbnRyeV9leGFtcGxlID0gcHJvY19jcmVhdGUoInRyYWNlcG9pbnQtZXhhbXBsZSIsIDA0NDQsIE5VTEwsCisJCSZtYXJrX29wcyk7CisJaWYgKCFwZW50cnlfZXhhbXBsZSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXhhbXBsZV9leGl0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fQUxFUlQgImV4YW1wbGUgZXhpdFxuIik7CisJcmVtb3ZlX3Byb2NfZW50cnkoInRyYWNlcG9pbnQtZXhhbXBsZSIsIE5VTEwpOworfQorCittb2R1bGVfaW5pdChleGFtcGxlX2luaXQpCittb2R1bGVfZXhpdChleGFtcGxlX2V4aXQpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRyYWNlcG9pbnQgZXhhbXBsZSIpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKaW5kZXggMjc3Y2ZlMC4uNWVkNGNiZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAorKysgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCkBAIC0xOTgsMTAgKzE5OCwxNyBAQAogCWZpOwogZW5kaWYKIAoraWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECitjbWRfcmVjb3JkX21jb3VudCA9IHBlcmwgJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBcCisJIiQoQVJDSCkiICIkKE9CSkRVTVApIiAiJChPQkpDT1BZKSIgIiQoQ0MpIiAiJChMRCkiICIkKE5NKSIgIiQoUk0pIiBcCisJIiQoTVYpIiAiJChAKSI7CitlbmRpZgorCiBkZWZpbmUgcnVsZV9jY19vX2MKIAkkKGNhbGwgZWNoby1jbWQsY2hlY2tzcmMpICQoY21kX2NoZWNrc3JjKQkJCSAgXAogCSQoY2FsbCBlY2hvLWNtZCxjY19vX2MpICQoY21kX2NjX29fYyk7CQkJCSAgXAogCSQoY21kX21vZHZlcnNpb25zKQkJCQkJCSAgXAorCSQoY21kX3JlY29yZF9tY291bnQpCQkJCQkJICBcCiAJc2NyaXB0cy9iYXNpYy9maXhkZXAgJChkZXBmaWxlKSAkQCAnJChjYWxsIG1ha2UtY21kLGNjX29fYyknID4gICAgXAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvdC10YXJnZXQpLnRtcDsgIFwKIAlybSAtZiAkKGRlcGZpbGUpOwkJCQkJCSAgXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlIGIvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlCmluZGV4IDczMDRlMTkuLmJmOGIxOTkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzL2Jhc2ljLy5naXRpZ25vcmUKQEAgLTEsMyArMSwzIEBACitoYXNoCiBmaXhkZXAKLXNwbGl0LWluY2x1ZGUKIGRvY3Byb2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYm9vdGdyYXBoLnBsIGIvc2NyaXB0cy9ib290Z3JhcGgucGwKaW5kZXggMjI0MzM1My4uNWU3MzE2ZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9ib290Z3JhcGgucGwKKysrIGIvc2NyaXB0cy9ib290Z3JhcGgucGwKQEAgLTM3LDEzICszNywxMyBAQAogIyAJZG1lc2cgfCBwZXJsIHNjcmlwdHMvYm9vdGdyYXBoLnBsID4gb3V0cHV0LnN2ZwogIwogCi1teSBAcm93czsKLW15ICVzdGFydCwgJWVuZCwgJXJvdzsKK215ICVzdGFydCwgJWVuZDsKIG15ICRkb25lID0gMDsKLW15ICRyb3djb3VudCA9IDA7CiBteSAkbWF4dGltZSA9IDA7CiBteSAkZmlyc3R0aW1lID0gMTAwOwogbXkgJGNvdW50ID0gMDsKK215ICVwaWRzOworCiB3aGlsZSAoPD4pIHsKIAlteSAkbGluZSA9ICRfOwogCWlmICgkbGluZSA9fiAvKFswLTlcLl0rKVxdIGNhbGxpbmcgIChbYS16QS1aMC05XF9dKylcKy8pIHsKQEAgLTU0LDE0ICs1NCw4IEBACiAJCQkJJGZpcnN0dGltZSA9ICQxOwogCQkJfQogCQl9Ci0JCSRyb3d7JGZ1bmN9ID0gMTsKIAkJaWYgKCRsaW5lID1+IC9cQCAoWzAtOV0rKS8pIHsKLQkJCW15ICRwaWQgPSAkMTsKLQkJCWlmICghZGVmaW5lZCgkcm93c1skcGlkXSkpIHsKLQkJCQkkcm93Y291bnQgPSAkcm93Y291bnQgKyAxOwotCQkJCSRyb3dzWyRwaWRdID0gJHJvd2NvdW50OwotCQkJfQotCQkJJHJvd3skZnVuY30gPSAkcm93c1skcGlkXTsKKwkJCSRwaWRzeyRmdW5jfSA9ICQxOwogCQl9CiAJCSRjb3VudCA9ICRjb3VudCArIDE7CiAJfQpAQCAtMTA5LDE3ICsxMDMsMjUgQEAKIG15ICRtdWx0ID0gOTUwLjAgLyAoJG1heHRpbWUgLSAkZmlyc3R0aW1lKTsKIG15ICR0aHJlc2hvbGQgPSAoJG1heHRpbWUgLSAkZmlyc3R0aW1lKSAvIDYwLjA7CiBteSAkc3R5bGVjb3VudGVyID0gMDsKK215ICVyb3dzOworbXkgJHJvd3Njb3VudCA9IDE7CiB3aGlsZSAoKCRrZXksJHZhbHVlKSA9IGVhY2ggJXN0YXJ0KSB7CiAJbXkgJGR1cmF0aW9uID0gJGVuZHska2V5fSAtICRzdGFydHska2V5fTsKIAogCWlmICgkZHVyYXRpb24gPj0gJHRocmVzaG9sZCkgewogCQlteSAkcywgJHMyLCAkZSwgJHk7CisJCSRwaWQgPSAkcGlkc3ska2V5fTsKKworCQlpZiAoIWRlZmluZWQoJHJvd3N7JHBpZH0pKSB7CisJCQkkcm93c3skcGlkfSA9ICRyb3dzY291bnQ7CisJCQkkcm93c2NvdW50ID0gJHJvd3Njb3VudCArIDE7CisJCX0KIAkJJHMgPSAoJHZhbHVlIC0gJGZpcnN0dGltZSkgKiAkbXVsdDsKIAkJJHMyID0gJHMgKyA2OwogCQkkZSA9ICgkZW5keyRrZXl9IC0gJGZpcnN0dGltZSkgKiAkbXVsdDsKIAkJJHcgPSAkZSAtICRzOwogCi0JCSR5ID0gJHJvd3ska2V5fSAqIDE1MDsKKwkJJHkgPSAkcm93c3skcGlkfSAqIDE1MDsKIAkJJHkyID0gJHkgKyA0OwogCiAJCSRzdHlsZSA9ICRzdHlsZXNbJHN0eWxlY291bnRlcl07CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggZTMwYmFjMS4uZjg4YmIzZSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMSw1ICsxLDUgQEAKICMhL3Vzci9iaW4vcGVybCAtdwotIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiAodGhlIGZpbGUgaGFuZGxpbmcgYml0KQorIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+ICh0aGUgZmlsZSBoYW5kbGluZyBiaXQpCiAjIChjKSAyMDA1LCBKb2VsIFNjaG9wcCA8anNjaG9wcEBhdXN0aW4uaWJtLmNvbT4gKHRoZSB1Z2x5IGJpdCkKICMgKGMpIDIwMDcsIEFuZHkgV2hpdGNyb2Z0IDxhcHdAdWsuaWJtLmNvbT4gKG5ldyBjb25kaXRpb25zLCB0ZXN0IHN1aXRlLCBldGMpCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3N0YWNrLnBsIGIvc2NyaXB0cy9jaGVja3N0YWNrLnBsCmluZGV4IGY3ZThlOTMuLjE0ZWU2OGUgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2tzdGFjay5wbAorKysgYi9zY3JpcHRzL2NoZWNrc3RhY2sucGwKQEAgLTE0LDYgKzE0LDcgQEAKICMJTTY4ayBwb3J0IGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiBhbmQgQW5kcmVhcyBTY2h3YWIKICMJQVZSMzIgcG9ydCBieSBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KICMJUEFSSVNDIHBvcnQgYnkgS3lsZSBNY01hcnRpbiA8a3lsZUBwYXJpc2MtbGludXgub3JnPgorIwlzcGFyYyBwb3J0IGJ5IE1hcnRpbiBIYWJldHMgPGVycmFuZGlyX25ld3NAbXBoLmVjbGlwc2UuY28udWs+CiAjCiAjCVVzYWdlOgogIwlvYmpkdW1wIC1kIHZtbGludXggfCBzY3JpcHRzL2NoZWNrc3RhY2sucGwgW2FyY2hdCkBAIC05NCw2ICs5NSw5IEBACiAJfSBlbHNpZiAoJGFyY2ggPX4gL15ibGFja2ZpbiQvKSB7CiAJCSMgICAwOiAgIDAwIGU4IDM4IDAxICAgICBMSU5LIDB4NGUwOwogCQkkcmUgPSBxci8uKltbOnNwYWNlOl1dTElOS1tbOnNwYWNlOl1dKigweCR4ezEsOH0pL287CisJfSBlbHNpZiAoJGFyY2ggZXEgJ3NwYXJjJyB8fCAkYXJjaCBlcSAnc3BhcmM2NCcpIHsKKwkJIyBmMDAxOWQxMDogICAgICAgOWQgZTMgYmYgOTAgICAgIHNhdmUgICVzcCwgLTExMiwgJXNwCisJCSRyZSA9IHFyLy4qc2F2ZS4qJXNwLCAtKChbMC05XXsyfXxbMy05XSlbMC05XXsyfSksICVzcC9vOwogCX0gZWxzZSB7CiAJCXByaW50KCJ3cm9uZyBvciB1bmtub3duIGFyY2hpdGVjdHVyZSBcIiRhcmNoXCJcbiIpOwogCQlleGl0CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2ggYi9zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2gKaW5kZXggMzY2ZjhjNy4uNDE1NjRiMSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoCisrKyBiL3NjcmlwdHMvY2hlY2tzeXNjYWxscy5zaApAQCAtMTE5LDUgKzExOSw1IEBACiBcI2VuZGlmL3AgfScgJDEKIH0KIAotKGlnbm9yZV9saXN0ICYmIHN5c2NhbGxfbGlzdCAke3NyY3RyZWV9L2luY2x1ZGUvYXNtLXg4Ni91bmlzdGRfMzIuaCkgfCBcCisoaWdub3JlX2xpc3QgJiYgc3lzY2FsbF9saXN0ICR7c3JjdHJlZX0vYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgpIHwgXAogJCogLUUgLXggYyAtID4gL2Rldi9udWxsCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKaW5kZXggZmExYTdkNS4uZmE4YzJkZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCisrKyBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQpAQCAtNCw3ICs0LDExIEBACiAKIFBIT05ZICs9IG9sZGNvbmZpZyB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgc2lsZW50b2xkY29uZmlnIHVwZGF0ZS1wby1jb25maWcKIAoraWZkZWYgS0JVSUxEX0tDT05GSUcKK0tjb25maWcgOj0gJChLQlVJTERfS0NPTkZJRykKK2Vsc2UKIEtjb25maWcgOj0gYXJjaC8kKFNSQ0FSQ0gpL0tjb25maWcKK2VuZGlmCiAKIHhjb25maWc6ICQob2JqKS9xY29uZgogCSQ8ICQoS2NvbmZpZykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCA4ZTBkZTZhLi44ODkyMTYxIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0xNzI2LDYgKzE3MjYsMTQgQEAKIAlidWZfcHJpbnRmKGIsICJ9O1xuIik7CiB9CiAKK3ZvaWQgYWRkX3N0YWdpbmdfZmxhZyhzdHJ1Y3QgYnVmZmVyICpiLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzdGFnaW5nX2RpciA9ICJkcml2ZXJzL3N0YWdpbmciOworCisJaWYgKHN0cm5jbXAoc3RhZ2luZ19kaXIsIG5hbWUsIHN0cmxlbihzdGFnaW5nX2RpcikpID09IDApCisJCWJ1Zl9wcmludGYoYiwgIlxuTU9EVUxFX0lORk8oc3RhZ2luZywgXCJZXCIpO1xuIik7Cit9CisKIC8qKgogICogUmVjb3JkIENSQ3MgZm9yIHVucmVzb2x2ZWQgc3ltYm9scwogICoqLwpAQCAtMjEzNSw2ICsyMTQzLDcgQEAKIAkJYnVmLnBvcyA9IDA7CiAKIAkJYWRkX2hlYWRlcigmYnVmLCBtb2QpOworCQlhZGRfc3RhZ2luZ19mbGFnKCZidWYsIG1vZC0+bmFtZSk7CiAJCWVyciB8PSBhZGRfdmVyc2lvbnMoJmJ1ZiwgbW9kKTsKIAkJYWRkX2RlcGVuZHMoJmJ1ZiwgbW9kLCBtb2R1bGVzKTsKIAkJYWRkX21vZGRldnRhYmxlKCZidWYsIG1vZCk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NmQ3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtMCwwICsxLDM5NSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIChjKSAyMDA4LCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIHJlY29yZG1jb3VudC5wbCAtIG1ha2VzIGEgc2VjdGlvbiBjYWxsZWQgX19tY291bnRfbG9jIHRoYXQgaG9sZHMKKyMgICAgICAgICAgICAgICAgICAgYWxsIHRoZSBvZmZzZXRzIHRvIHRoZSBjYWxscyB0byBtY291bnQuCisjCisjCisjIFdoYXQgd2Ugd2FudCB0byBlbmQgdXAgd2l0aCBpcyBhIHNlY3Rpb24gaW4gdm1saW51eCBjYWxsZWQKKyMgX19tY291bnRfbG9jIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHBvaW50ZXJzIHRvIGFsbCB0aGUKKyMgY2FsbCBzaXRlcyBpbiB0aGUga2VybmVsIHRoYXQgY2FsbCBtY291bnQuIExhdGVyIG9uIGJvb3QgdXAsIHRoZSBrZXJuZWwKKyMgd2lsbCByZWFkIHRoaXMgbGlzdCwgc2F2ZSB0aGUgbG9jYXRpb25zIGFuZCB0dXJuIHRoZW0gaW50byBub3BzLgorIyBXaGVuIHRyYWNpbmcgb3IgcHJvZmlsaW5nIGlzIGxhdGVyIGVuYWJsZWQsIHRoZXNlIGxvY2F0aW9ucyB3aWxsIHRoZW4KKyMgYmUgY29udmVydGVkIGJhY2sgdG8gcG9pbnRlcnMgdG8gc29tZSBmdW5jdGlvbi4KKyMKKyMgVGhpcyBpcyBubyBlYXN5IGZlYXQuIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBvcmlnaW5hbAorIyBvYmplY3QgaXMgY29tcGlsZWQgYW5kIGJlZm9yZSBpdCBpcyBsaW5rZWQuCisjCisjIFRoZSByZWZlcmVuY2VzIHRvIHRoZSBjYWxsIHNpdGVzIGFyZSBvZmZzZXRzIGZyb20gdGhlIHNlY3Rpb24gb2YgdGV4dAorIyB0aGF0IHRoZSBjYWxsIHNpdGUgaXMgaW4uIEhlbmNlLCBhbGwgZnVuY3Rpb25zIGluIGEgc2VjdGlvbiB0aGF0CisjIGhhcyBhIGNhbGwgc2l0ZSB0byBtY291bnQsIHdpbGwgaGF2ZSB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZgorIyB0aGUgc2VjdGlvbiBhbmQgbm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLgorIworIyBUaGUgdHJpY2sgaXMgdG8gZmluZCBhIHdheSB0byByZWNvcmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbi4KKyMgVGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRvIGxvb2sgYXQgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzZWN0aW9uCisjIHdoaWNoIHdpbGwgYWxzbyBiZSB0aGUgbG9jYXRpb24gb2YgdGhhdCBzZWN0aW9uIGFmdGVyIGZpbmFsIGxpbmsuCisjIGUuZy4KKyMKKyMgIC5zZWN0aW9uICIudGV4dC5zY2hlZCIKKyMgIC5nbG9ibCBteV9mdW5jCisjICBteV9mdW5jOgorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIGNhbGwgbWNvdW50ICAob2Zmc2V0OiAweDUpCisjICAgICAgICBbLi4uXQorIyAgICAgICAgcmV0CisjICBvdGhlcl9mdW5jOgorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIGNhbGwgbWNvdW50IChvZmZzZXQ6IDB4MWIpCisjICAgICAgICBbLi4uXQorIworIyBCb3RoIHJlbG9jYXRpb24gb2Zmc2V0cyBmb3IgdGhlIG1jb3VudHMgaW4gdGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBiZQorIyBvZmZzZXQgZnJvbSAudGV4dC5zY2hlZC4gSWYgd2UgbWFrZSBhbm90aGVyIGZpbGUgY2FsbGVkIHRtcC5zIHdpdGg6CisjCisjICAuc2VjdGlvbiBfX21jb3VudF9sb2MKKyMgIC5xdWFkICBteV9mdW5jICsgMHg1CisjICAucXVhZCAgbXlfZnVuYyArIDB4MWIKKyMKKyMgV2UgY2FuIHRoZW4gY29tcGlsZSB0aGlzIHRtcC5zIGludG8gdG1wLm8sIGFuZCBsaW5rIGl0IHRvIHRoZSBvcmlnaW5hbAorIyBvYmplY3QuCisjCisjIEJ1dCB0aGlzIGdldHMgaGFyZCBpZiBteV9mdW5jIGlzIG5vdCBnbG9ibCAoYSBzdGF0aWMgZnVuY3Rpb24pLgorIyBJbiBzdWNoIGEgY2FzZSB3ZSBoYXZlOgorIworIyAgLnNlY3Rpb24gIi50ZXh0LnNjaGVkIgorIyAgbXlfZnVuYzoKKyMgICAgICAgIFsuLi5dCisjICAgICAgICBjYWxsIG1jb3VudCAgKG9mZnNldDogMHg1KQorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIHJldAorIyAgLmdsb2JsIG15X2Z1bmMKKyMgIG90aGVyX2Z1bmM6CisjICAgICAgICBbLi4uXQorIyAgICAgICAgY2FsbCBtY291bnQgKG9mZnNldDogMHgxYikKKyMgICAgICAgIFsuLi5dCisjCisjIElmIHdlIG1ha2UgdGhlIHRtcC5zIHRoZSBzYW1lIGFzIGFib3ZlLCB3aGVuIHdlIGxpbmsgdG9nZXRoZXIgd2l0aAorIyB0aGUgb3JpZ2luYWwgb2JqZWN0LCB3ZSB3aWxsIGVuZCB1cCB3aXRoIHR3byBzeW1ib2xzIGZvciBteV9mdW5jOgorIyBvbmUgbG9jYWwsIG9uZSBnbG9iYWwuICBBZnRlciBmaW5hbCBjb21waWxlLCB3ZSB3aWxsIGVuZCB1cCB3aXRoCisjIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gbXlfZnVuYy4KKyMKKyMgU2luY2UgbG9jYWwgb2JqZWN0cyBjYW4gcmVmZXJlbmNlIGxvY2FsIHZhcmlhYmxlcywgd2UgbmVlZCB0byBmaW5kCisjIGEgd2F5IHRvIG1ha2UgdG1wLm8gcmVmZXJlbmNlIHRoZSBsb2NhbCBvYmplY3RzIG9mIHRoZSBvcmlnaW5hbCBvYmplY3QKKyMgZmlsZSBhZnRlciBpdCBpcyBsaW5rZWQgdG9nZXRoZXIuIFRvIGRvIHRoaXMsIHdlIGNvbnZlcnQgdGhlIG15X2Z1bmMKKyMgaW50byBhIGdsb2JhbCBzeW1ib2wgYmVmb3JlIGxpbmtpbmcgdG1wLm8uIFRoZW4gYWZ0ZXIgd2UgbGluayB0bXAubworIyB3ZSB3aWxsIG9ubHkgaGF2ZSBhIHNpbmdsZSBzeW1ib2wgZm9yIG15X2Z1bmMgdGhhdCBpcyBnbG9iYWwuCisjIFdlIGNhbiBjb252ZXJ0IG15X2Z1bmMgYmFjayBpbnRvIGEgbG9jYWwgc3ltYm9sIGFuZCB3ZSBhcmUgZG9uZS4KKyMKKyMgSGVyZSBhcmUgdGhlIHN0ZXBzIHdlIHRha2U6CisjCisjIDEpIFJlY29yZCBhbGwgdGhlIGxvY2FsIHN5bWJvbHMgYnkgdXNpbmcgJ25tJworIyAyKSBVc2Ugb2JqZHVtcCB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlIG9mZnNldHMgYW5kIHNlY3Rpb25zIGZvcgorIyAgICBtY291bnQuCisjIDMpIENvbXBpbGUgdGhlIGxpc3QgaW50byBpdHMgb3duIG9iamVjdC4KKyMgNCkgRG8gd2UgaGF2ZSB0byBkZWFsIHdpdGggbG9jYWwgZnVuY3Rpb25zPyBJZiBub3QsIGdvIHRvIHN0ZXAgOC4KKyMgNSkgTWFrZSBhbiBvYmplY3QgdGhhdCBjb252ZXJ0cyB0aGVzZSBsb2NhbCBmdW5jdGlvbnMgdG8gZ2xvYmFsIHN5bWJvbHMKKyMgICAgd2l0aCBvYmpjb3B5LgorIyA2KSBMaW5rIHRvZ2V0aGVyIHRoaXMgbmV3IG9iamVjdCB3aXRoIHRoZSBsaXN0IG9iamVjdC4KKyMgNykgQ29udmVydCB0aGUgbG9jYWwgZnVuY3Rpb25zIGJhY2sgdG8gbG9jYWwgc3ltYm9scyBhbmQgcmVuYW1lCisjICAgIHRoZSByZXN1bHQgYXMgdGhlIG9yaWdpbmFsIG9iamVjdC4KKyMgICAgRW5kLgorIyA4KSBMaW5rIHRoZSBvYmplY3Qgd2l0aCB0aGUgbGlzdCBvYmplY3QuCisjIDkpIE1vdmUgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvYmplY3QuCisjICAgIEVuZC4KKyMKKwordXNlIHN0cmljdDsKKworbXkgJFAgPSAkMDsKKyRQID1+IHNALiovQEBnOworCitteSAkViA9ICcwLjEnOworCitpZiAoJCNBUkdWIDwgNikgeworCXByaW50ICJ1c2FnZTogJFAgYXJjaCBvYmpkdW1wIG9iamNvcHkgY2MgbGQgbm0gcm0gbXYgaW5wdXRmaWxlXG4iOworCXByaW50ICJ2ZXJzaW9uOiAkVlxuIjsKKwlleGl0KDEpOworfQorCitteSAoJGFyY2gsICRvYmpkdW1wLCAkb2JqY29weSwgJGNjLCAkbGQsICRubSwgJHJtLCAkbXYsICRpbnB1dGZpbGUpID0gQEFSR1Y7CisKKyRvYmpkdW1wID0gIm9iamR1bXAiIGlmICgobGVuZ3RoICRvYmpkdW1wKSA9PSAwKTsKKyRvYmpjb3B5ID0gIm9iamNvcHkiIGlmICgobGVuZ3RoICRvYmpjb3B5KSA9PSAwKTsKKyRjYyA9ICJnY2MiIGlmICgobGVuZ3RoICRjYykgPT0gMCk7CiskbGQgPSAibGQiIGlmICgobGVuZ3RoICRsZCkgPT0gMCk7Ciskbm0gPSAibm0iIGlmICgobGVuZ3RoICRubSkgPT0gMCk7Ciskcm0gPSAicm0iIGlmICgobGVuZ3RoICRybSkgPT0gMCk7CiskbXYgPSAibXYiIGlmICgobGVuZ3RoICRtdikgPT0gMCk7CisKKyNwcmludCBTVERFUlIgInJ1bm5pbmc6ICRQICckYXJjaCcgJyRvYmpkdW1wJyAnJG9iamNvcHknICckY2MnICckbGQnICIgLgorIyAgICAiJyRubScgJyRybScgJyRtdicgJyRpbnB1dGZpbGUnXG4iOworCitteSAlbG9jYWxzOwkJIyBMaXN0IG9mIGxvY2FsIChzdGF0aWMpIGZ1bmN0aW9ucworbXkgJXdlYWs7CQkjIExpc3Qgb2Ygd2VhayBmdW5jdGlvbnMKK215ICVjb252ZXJ0OwkJIyBMaXN0IG9mIGxvY2FsIGZ1bmN0aW9ucyB1c2VkIHRoYXQgbmVlZHMgY29udmVyc2lvbgorCitteSAkdHlwZTsKK215ICRzZWN0aW9uX3JlZ2V4OwkjIEZpbmQgdGhlIHN0YXJ0IG9mIGEgc2VjdGlvbgorbXkgJGZ1bmN0aW9uX3JlZ2V4OwkjIEZpbmQgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbgorCQkJIyAgICAocmV0dXJuIG9mZnNldCBhbmQgZnVuYyBuYW1lKQorbXkgJG1jb3VudF9yZWdleDsJIyBGaW5kIHRoZSBjYWxsIHNpdGUgdG8gbWNvdW50IChyZXR1cm4gb2Zmc2V0KQorCitpZiAoJGFyY2ggZXEgIng4Nl82NCIpIHsKKyAgICAkc2VjdGlvbl9yZWdleCA9ICJEaXNhc3NlbWJseSBvZiBzZWN0aW9uIjsKKyAgICAkZnVuY3Rpb25fcmVnZXggPSAiXihbMC05YS1mQS1GXSspXFxzKzwoLio/KT46IjsKKyAgICAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6LipcXHNtY291bnQoWystXTB4WzAtOWEtekEtWl0rKT9cJCI7CisgICAgJHR5cGUgPSAiLnF1YWQiOworCisgICAgIyBmb3JjZSBmbGFncyBmb3IgdGhpcyBhcmNoCisgICAgJGxkIC49ICIgLW0gZWxmX3g4Nl82NCI7CisgICAgJG9iamR1bXAgLj0gIiAtTSB4ODYtNjQiOworICAgICRvYmpjb3B5IC49ICIgLU8gZWxmNjQteDg2LTY0IjsKKyAgICAkY2MgLj0gIiAtbTY0IjsKKworfSBlbHNpZiAoJGFyY2ggZXEgImkzODYiKSB7CisgICAgJHNlY3Rpb25fcmVnZXggPSAiRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiI7CisgICAgJGZ1bmN0aW9uX3JlZ2V4ID0gIl4oWzAtOWEtZkEtRl0rKVxccys8KC4qPyk+OiI7CisgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOi4qXFxzbWNvdW50XCQiOworICAgICR0eXBlID0gIi5sb25nIjsKKworICAgICMgZm9yY2UgZmxhZ3MgZm9yIHRoaXMgYXJjaAorICAgICRsZCAuPSAiIC1tIGVsZl9pMzg2IjsKKyAgICAkb2JqZHVtcCAuPSAiIC1NIGkzODYiOworICAgICRvYmpjb3B5IC49ICIgLU8gZWxmMzItaTM4NiI7CisgICAgJGNjIC49ICIgLW0zMiI7CisKK30gZWxzZSB7CisgICAgZGllICJBcmNoICRhcmNoIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQiOworfQorCitteSAkdGV4dF9mb3VuZCA9IDA7CitteSAkcmVhZF9mdW5jdGlvbiA9IDA7CitteSAkb3BlbmVkID0gMDsKK215ICRtY291bnRfc2VjdGlvbiA9ICJfX21jb3VudF9sb2MiOworCitteSAkZGlybmFtZTsKK215ICRmaWxlbmFtZTsKK215ICRwcmVmaXg7CitteSAkZXh0OworCitpZiAoJGlucHV0ZmlsZSA9fiBtLF4oLiopLyhbXi9dKikkLCkgeworICAgICRkaXJuYW1lID0gJDE7CisgICAgJGZpbGVuYW1lID0gJDI7Cit9IGVsc2UgeworICAgICRkaXJuYW1lID0gIi4iOworICAgICRmaWxlbmFtZSA9ICRpbnB1dGZpbGU7Cit9CisKK2lmICgkZmlsZW5hbWUgPX4gbSxeKC4qKShcLlxTKSwpIHsKKyAgICAkcHJlZml4ID0gJDE7CisgICAgJGV4dCA9ICQyOworfSBlbHNlIHsKKyAgICAkcHJlZml4ID0gJGZpbGVuYW1lOworICAgICRleHQgPSAiIjsKK30KKworbXkgJG1jb3VudF9zID0gJGRpcm5hbWUgLiAiLy50bXBfbWNfIiAuICRwcmVmaXggLiAiLnMiOworbXkgJG1jb3VudF9vID0gJGRpcm5hbWUgLiAiLy50bXBfbWNfIiAuICRwcmVmaXggLiAiLm8iOworCisjCisjIC0tZ2xvYmFsaXplLXN5bWJvbHMgY2FtZSBvdXQgaW4gMi4xNywgd2UgbXVzdCB0ZXN0IHRoZSB2ZXJzaW9uCisjIG9mIG9iamNvcHksIGFuZCBpZiBpdCBpcyBsZXNzIHRoYW4gMi4xNywgdGhlbiB3ZSBjYW4gbm90CisjIHJlY29yZCBsb2NhbCBmdW5jdGlvbnMuCitteSAkdXNlX2xvY2FscyA9IDAxOworbXkgJGxvY2FsX3dhcm5fb25jZSA9IDA7CitteSAkZm91bmRfdmVyc2lvbiA9IDA7CisKK29wZW4gKElOLCAiJG9iamNvcHkgLS12ZXJzaW9uIHwiKSB8fCBkaWUgImVycm9yIHJ1bm5pbmcgJG9iamNvcHkiOword2hpbGUgKDxJTj4pIHsKKyAgICBpZiAoL29iamNvcHkuKlxzKFxkKylcLihcZCspLykgeworCW15ICRtYWpvciA9ICQxOworCW15ICRtaW5vciA9ICQyOworCisJJGZvdW5kX3ZlcnNpb24gPSAxOworCWlmICgkbWFqb3IgPCAyIHx8CisJICAgICgkbWFqb3IgPT0gMiAmJiAkbWlub3IgPCAxNykpIHsKKwkgICAgJHVzZV9sb2NhbHMgPSAwOworCX0KKwlsYXN0OworICAgIH0KK30KK2Nsb3NlIChJTik7CisKK2lmICghJGZvdW5kX3ZlcnNpb24pIHsKKyAgICBwcmludCBTVERFUlIgIldBUk5JTkc6IGNvdWxkIG5vdCBmaW5kIG9iamNvcHkgdmVyc2lvbi5cbiIgLgorCSJcdERpc2FibGluZyBsb2NhbCBmdW5jdGlvbiByZWZlcmVuY2VzLlxuIjsKK30KKworCisjCisjIFN0ZXAgMTogZmluZCBhbGwgdGhlIGxvY2FsIChzdGF0aWMgZnVuY3Rpb25zKSBhbmQgd2VhayBzeW1ib2xzLgorIyAgICAgICAgJ3QnIGlzIGxvY2FsLCAndy9XJyBpcyB3ZWFrICh3ZSBuZXZlciB1c2UgYSB3ZWFrIGZ1bmN0aW9uKQorIworb3BlbiAoSU4sICIkbm0gJGlucHV0ZmlsZXwiKSB8fCBkaWUgImVycm9yIHJ1bm5pbmcgJG5tIjsKK3doaWxlICg8SU4+KSB7CisgICAgaWYgKC9eWzAtOWEtZkEtRl0rXHMrdFxzKyhcUyspLykgeworCSRsb2NhbHN7JDF9ID0gMTsKKyAgICB9IGVsc2lmICgvXlswLTlhLWZBLUZdK1xzKyhbd1ddKVxzKyhcUyspLykgeworCSR3ZWFreyQyfSA9ICQxOworICAgIH0KK30KK2Nsb3NlKElOKTsKKworbXkgQG9mZnNldHM7CQkjIEFycmF5IG9mIG9mZnNldHMgb2YgbWNvdW50IGNhbGxlcnMKK215ICRyZWZfZnVuYzsJCSMgcmVmZXJlbmNlIGZ1bmN0aW9uIHRvIHVzZSBmb3Igb2Zmc2V0cworbXkgJG9mZnNldCA9IDA7CQkjIG9mZnNldCBvZiByZWZfZnVuYyB0byBzZWN0aW9uIGJlZ2lubmluZworCisjIworIyB1cGRhdGVfZnVuY3MgLSBwcmludCBvdXQgdGhlIGN1cnJlbnQgbWNvdW50IGNhbGxlcnMKKyMKKyMgIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2Ygb2Zmc2V0cyB0byBjYWxsZXJzIGFuZCB3cml0ZSB0aGVtIHRvCisjICB0aGUgb3V0cHV0IGZpbGUgaW4gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcmVhZCBieSBhbiBhc3NlbWJsZXIuCisjCitzdWIgdXBkYXRlX2Z1bmNzCit7CisgICAgcmV0dXJuIGlmICgkI29mZnNldHMgPCAwKTsKKworICAgIGRlZmluZWQoJHJlZl9mdW5jKSB8fCBkaWUgIk5vIGZ1bmN0aW9uIHRvIHJlZmVyZW5jZSI7CisKKyAgICAjIEEgc2VjdGlvbiBvbmx5IGhhZCBhIHdlYWsgZnVuY3Rpb24sIHRvIHJlcHJlc2VudCBpdC4KKyAgICAjIFVuZm9ydHVuYXRlbHksIGEgd2VhayBmdW5jdGlvbiBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlcgorICAgICMgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSwgbWFraW5nIGFsbCB0aGVzZSBvZmZzZXRzIGluY29ycmVjdC4KKyAgICAjIFRvIGJlIHNhZmUsIHdlIHNpbXBseSBwcmludCBhIHdhcm5pbmcgYW5kIGJhaWwuCisgICAgaWYgKGRlZmluZWQgJHdlYWt7JHJlZl9mdW5jfSkgeworCXByaW50IFNUREVSUgorCSAgICAiJGlucHV0ZmlsZTogV0FSTklORzogcmVmZXJlbmNpbmcgd2VhayBmdW5jdGlvbiIgLgorCSAgICAiICRyZWZfZnVuYyBmb3IgbWNvdW50XG4iOworCXJldHVybjsKKyAgICB9CisKKyAgICAjIGlzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBJZiBzbywgbm90ZSB0aGlzIGZhY3QuCisgICAgaWYgKGRlZmluZWQgJGxvY2Fsc3skcmVmX2Z1bmN9KSB7CisKKwkjIG9ubHkgdXNlIGxvY2FscyBpZiBvYmpjb3B5IHN1cHBvcnRzIGdsb2JhbGl6ZS1zeW1ib2xzCisJaWYgKCEkdXNlX2xvY2FscykgeworCSAgICByZXR1cm47CisJfQorCSRjb252ZXJ0eyRyZWZfZnVuY30gPSAxOworICAgIH0KKworICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgbWNvdW50IGNhbGxlciBvZmZzZXRzIGFuZCBwcmludCBhIHJlZmVyZW5jZQorICAgICMgdG8gdGhlIGNhbGxlciBiYXNlZCBmcm9tIHRoZSByZWZfZnVuYy4KKyAgICBmb3IgKG15ICRpPTA7ICRpIDw9ICQjb2Zmc2V0czsgJGkrKykgeworCWlmICghJG9wZW5lZCkgeworCSAgICBvcGVuKEZJTEUsICI+JG1jb3VudF9zIikgfHwgZGllICJjYW4ndCBjcmVhdGUgJG1jb3VudF9zXG4iOworCSAgICAkb3BlbmVkID0gMTsKKwkgICAgcHJpbnQgRklMRSAiXHQuc2VjdGlvbiAkbWNvdW50X3NlY3Rpb24sXCJhXCIsXEBwcm9nYml0c1xuIjsKKwl9CisJcHJpbnRmIEZJTEUgIlx0JXMgJXMgKyAlZFxuIiwgJHR5cGUsICRyZWZfZnVuYywgJG9mZnNldHNbJGldIC0gJG9mZnNldDsKKyAgICB9Cit9CisKKyMKKyMgU3RlcCAyOiBmaW5kIHRoZSBzZWN0aW9ucyBhbmQgbWNvdW50IGNhbGwgc2l0ZXMKKyMKK29wZW4oSU4sICIkb2JqZHVtcCAtZHIgJGlucHV0ZmlsZXwiKSB8fCBkaWUgImVycm9yIHJ1bm5pbmcgJG9iamR1bXAiOworCitteSAkdGV4dDsKKword2hpbGUgKDxJTj4pIHsKKyAgICAjIGlzIGl0IGEgc2VjdGlvbj8KKyAgICBpZiAoLyRzZWN0aW9uX3JlZ2V4LykgeworCSRyZWFkX2Z1bmN0aW9uID0gMTsKKwkjIHByaW50IG91dCBhbnkgcmVjb3JkZWQgb2Zmc2V0cworCXVwZGF0ZV9mdW5jcygpIGlmICgkdGV4dF9mb3VuZCk7CisKKwkjIHJlc2V0IGFsbCBtYXJrZXJzIGFuZCBhcnJheXMKKwkkdGV4dF9mb3VuZCA9IDA7CisJdW5kZWYoJHJlZl9mdW5jKTsKKwl1bmRlZihAb2Zmc2V0cyk7CisKKyAgICAjIHNlY3Rpb24gZm91bmQsIG5vdyBpcyB0aGlzIGEgc3RhcnQgb2YgYSBmdW5jdGlvbj8KKyAgICB9IGVsc2lmICgkcmVhZF9mdW5jdGlvbiAmJiAvJGZ1bmN0aW9uX3JlZ2V4LykgeworCSR0ZXh0X2ZvdW5kID0gMTsKKwkkb2Zmc2V0ID0gaGV4ICQxOworCSR0ZXh0ID0gJDI7CisKKwkjIGlmIHRoaXMgaXMgZWl0aGVyIGEgbG9jYWwgZnVuY3Rpb24gb3IgYSB3ZWFrIGZ1bmN0aW9uCisJIyBrZWVwIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBnbG9iYWwgdGhhdAorCSMgd2UgY2FuIHVzZSBzYWZlbHkuCisJaWYgKCFkZWZpbmVkKCRsb2NhbHN7JHRleHR9KSAmJiAhZGVmaW5lZCgkd2Vha3skdGV4dH0pKSB7CisJICAgICRyZWZfZnVuYyA9ICR0ZXh0OworCSAgICAkcmVhZF9mdW5jdGlvbiA9IDA7CisJfSBlbHNlIHsKKwkgICAgIyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBmdW5jdGlvbiwgYW5kIHRoaXMgaXMgd2Vhaywgc2tpcCBpdAorCSAgICBpZiAoIWRlZmluZWQoJHJlZl9mdW5jKSB8fCAhZGVmaW5lZCgkd2Vha3skdGV4dH0pKSB7CisJCSRyZWZfZnVuYyA9ICR0ZXh0OworCSAgICB9CisJfQorICAgIH0KKworICAgICMgaXMgdGhpcyBhIGNhbGwgc2l0ZSB0byBtY291bnQ/IElmIHNvLCByZWNvcmQgaXQgdG8gcHJpbnQgbGF0ZXIKKyAgICBpZiAoJHRleHRfZm91bmQgJiYgLyRtY291bnRfcmVnZXgvKSB7CisJJG9mZnNldHNbJCNvZmZzZXRzICsgMV0gPSBoZXggJDE7CisgICAgfQorfQorCisjIGR1bXAgb3V0IGFueW1vcmUgb2Zmc2V0cyB0aGF0IG1heSBoYXZlIGJlZW4gZm91bmQKK3VwZGF0ZV9mdW5jcygpIGlmICgkdGV4dF9mb3VuZCk7CisKKyMgSWYgd2UgZGlkIG5vdCBmaW5kIGFueSBtY291bnQgY2FsbGVycywgd2UgYXJlIGRvbmUgKGRvIG5vdGhpbmcpLgoraWYgKCEkb3BlbmVkKSB7CisgICAgZXhpdCgwKTsKK30KKworY2xvc2UoRklMRSk7CisKKyMKKyMgU3RlcCAzOiBDb21waWxlIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIGxpc3Qgb2YgY2FsbCBzaXRlcyB0byBtY291bnQuCisjCitgJGNjIC1vICRtY291bnRfbyAtYyAkbWNvdW50X3NgOworCitteSBAY29udmVydHMgPSBrZXlzICVjb252ZXJ0OworCisjCisjIFN0ZXAgNDogRG8gd2UgaGF2ZSBzZWN0aW9ucyB0aGF0IHN0YXJ0ZWQgd2l0aCBsb2NhbCBmdW5jdGlvbnM/CisjCitpZiAoJCNjb252ZXJ0cyA+PSAwKSB7CisgICAgbXkgJGdsb2JhbGxpc3QgPSAiIjsKKyAgICBteSAkbG9jYWxsaXN0ID0gIiI7CisKKyAgICBmb3JlYWNoIG15ICRjb24gKEBjb252ZXJ0cykgeworCSRnbG9iYWxsaXN0IC49ICIgLS1nbG9iYWxpemUtc3ltYm9sICRjb24iOworCSRsb2NhbGxpc3QgLj0gIiAtLWxvY2FsaXplLXN5bWJvbCAkY29uIjsKKyAgICB9CisKKyAgICBteSAkZ2xvYmFsb2JqID0gJGRpcm5hbWUgLiAiLy50bXBfZ2xfIiAuICRmaWxlbmFtZTsKKyAgICBteSAkZ2xvYmFsbWl4ID0gJGRpcm5hbWUgLiAiLy50bXBfbXhfIiAuICRmaWxlbmFtZTsKKworICAgICMKKyAgICAjIFN0ZXAgNTogc2V0IHVwIGVhY2ggbG9jYWwgZnVuY3Rpb24gYXMgYSBnbG9iYWwKKyAgICAjCisgICAgYCRvYmpjb3B5ICRnbG9iYWxsaXN0ICRpbnB1dGZpbGUgJGdsb2JhbG9iamA7CisKKyAgICAjCisgICAgIyBTdGVwIDY6IExpbmsgdGhlIGdsb2JhbCB2ZXJzaW9uIHRvIG91ciBsaXN0LgorICAgICMKKyAgICBgJGxkIC1yICRnbG9iYWxvYmogJG1jb3VudF9vIC1vICRnbG9iYWxtaXhgOworCisgICAgIworICAgICMgU3RlcCA3OiBDb252ZXJ0IHRoZSBsb2NhbCBmdW5jdGlvbnMgYmFjayBpbnRvIGxvY2FsIHN5bWJvbHMKKyAgICAjCisgICAgYCRvYmpjb3B5ICRsb2NhbGxpc3QgJGdsb2JhbG1peCAkaW5wdXRmaWxlYDsKKworICAgICMgUmVtb3ZlIHRoZSB0ZW1wIGZpbGVzCisgICAgYCRybSAkZ2xvYmFsb2JqICRnbG9iYWxtaXhgOworCit9IGVsc2UgeworCisgICAgbXkgJG1peCA9ICRkaXJuYW1lIC4gIi8udG1wX214XyIgLiAkZmlsZW5hbWU7CisKKyAgICAjCisgICAgIyBTdGVwIDg6IExpbmsgdGhlIG9iamVjdCB3aXRoIG91ciBsaXN0IG9mIGNhbGwgc2l0ZXMgb2JqZWN0LgorICAgICMKKyAgICBgJGxkIC1yICRpbnB1dGZpbGUgJG1jb3VudF9vIC1vICRtaXhgOworCisgICAgIworICAgICMgU3RlcCA5OiBNb3ZlIHRoZSByZXN1bHQgYmFjayB0byB0aGUgb3JpZ2luYWwgb2JqZWN0LgorICAgICMKKyAgICBgJG12ICRtaXggJGlucHV0ZmlsZWA7Cit9CisKKyMgQ2xlYW4gdXAgdGhlIHRlbXAgZmlsZXMKK2Akcm0gJG1jb3VudF9vICRtY291bnRfc2A7CisKK2V4aXQoMCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMgYi9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKaW5kZXggNDZmMjM5Ny4uNWJhNzg3MCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCisrKyBiL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBkZXZfY2dyb3VwLmMgLSBkZXZpY2UgY2dyb3VwIHN1YnN5c3RlbQorICogZGV2aWNlX2Nncm91cC5jIC0gZGV2aWNlIGNncm91cCBzdWJzeXN0ZW0KICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycAogICovCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKICNkZWZpbmUgQUNDX01LTk9EIDEKICNkZWZpbmUgQUNDX1JFQUQgIDIKQEAgLTIyLDE4ICsyMyw4IEBACiAKIC8qCiAgKiB3aGl0ZWxpc3QgbG9ja2luZyBydWxlczoKLSAqIGNncm91cF9sb2NrKCkgY2Fubm90IGJlIHRha2VuIHVuZGVyIGRldl9jZ3JvdXAtPmxvY2suCi0gKiBkZXZfY2dyb3VwLT5sb2NrIGNhbiBiZSB0YWtlbiB3aXRoIG9yIHdpdGhvdXQgY2dyb3VwX2xvY2soKS4KLSAqCi0gKiBtb2RpZmljYXRpb25zIGFsd2F5cyByZXF1aXJlIGNncm91cF9sb2NrCi0gKiBtb2RpZmljYXRpb25zIHRvIGEgbGlzdCB3aGljaCBpcyB2aXNpYmxlIHJlcXVpcmUgdGhlCi0gKiAgIGRldl9jZ3JvdXAtPmxvY2sgKmFuZCogY2dyb3VwX2xvY2soKQotICogd2Fsa2luZyB0aGUgbGlzdCByZXF1aXJlcyBkZXZfY2dyb3VwLT5sb2NrIG9yIGNncm91cF9sb2NrKCkuCi0gKgotICogcmVhc29uaW5nOiBkZXZfd2hpdGVsaXN0X2NvcHkoKSBuZWVkcyB0byBrbWFsbG9jLCBzbyBuZWVkcwotICogICBhIG11dGV4LCB3aGljaCB0aGUgY2dyb3VwX2xvY2soKSBpcy4gIFNpbmNlIG1vZGlmeWluZwotICogICBhIHZpc2libGUgbGlzdCByZXF1aXJlcyBib3RoIGxvY2tzLCBlaXRoZXIgbG9jayBjYW4gYmUKLSAqICAgdGFrZW4gZm9yIHdhbGtpbmcgdGhlIGxpc3QuCisgKiBob2xkIGNncm91cF9sb2NrKCkgZm9yIHVwZGF0ZS9yZWFkLgorICogaG9sZCByY3VfcmVhZF9sb2NrKCkgZm9yIHJlYWQuCiAgKi8KIAogc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSB7CkBAIC00Nyw3ICszOCw2IEBACiBzdHJ1Y3QgZGV2X2Nncm91cCB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOwogCXN0cnVjdCBsaXN0X2hlYWQgd2hpdGVsaXN0OwotCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9jZ3JvdXAgKmNzc190b19kZXZjZ3JvdXAoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnMpCkBAIC04NCwxMyArNzQsOSBAQAogCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoLCAqdG1wLCAqbmV3OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aCwgb3JpZywgbGlzdCkgewotCQluZXcgPSBrbWFsbG9jKHNpemVvZigqd2gpLCBHRlBfS0VSTkVMKTsKKwkJbmV3ID0ga21lbWR1cCh3aCwgc2l6ZW9mKCp3aCksIEdGUF9LRVJORUwpOwogCQlpZiAoIW5ldykKIAkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKLQkJbmV3LT5tYWpvciA9IHdoLT5tYWpvcjsKLQkJbmV3LT5taW5vciA9IHdoLT5taW5vcjsKLQkJbmV3LT50eXBlID0gd2gtPnR5cGU7Ci0JCW5ldy0+YWNjZXNzID0gd2gtPmFjY2VzczsKIAkJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCBkZXN0KTsKIAl9CiAKQEAgLTEwNywxOSArOTMsMTYgQEAKIC8qIFN0dXBpZCBwcm90b3R5cGUgLSBkb24ndCBib3RoZXIgY29tYmluaW5nIGV4aXN0aW5nIGVudHJpZXMgKi8KIC8qCiAgKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQotICogc2luY2UgdGhlIGxpc3QgaXMgdmlzaWJsZSB0byBvdGhlciB0YXNrcywgd2UgbmVlZCB0aGUgc3BpbmxvY2sgYWxzbwogICovCiBzdGF0aWMgaW50IGRldl93aGl0ZWxpc3RfYWRkKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCiB7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2hjb3B5LCAqd2FsazsKIAotCXdoY29weSA9IGttYWxsb2Moc2l6ZW9mKCp3aGNvcHkpLCBHRlBfS0VSTkVMKTsKKwl3aGNvcHkgPSBrbWVtZHVwKHdoLCBzaXplb2YoKndoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3aGNvcHkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHdoY29weSwgd2gsIHNpemVvZigqd2hjb3B5KSk7Ci0Jc3Bpbl9sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdhbGssICZkZXZfY2dyb3VwLT53aGl0ZWxpc3QsIGxpc3QpIHsKIAkJaWYgKHdhbGstPnR5cGUgIT0gd2gtPnR5cGUpCiAJCQljb250aW51ZTsKQEAgLTEzNSw3ICsxMTgsNiBAQAogCiAJaWYgKHdoY29weSAhPSBOVUxMKQogCQlsaXN0X2FkZF90YWlsX3JjdSgmd2hjb3B5LT5saXN0LCAmZGV2X2Nncm91cC0+d2hpdGVsaXN0KTsKLQlzcGluX3VubG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OSwxNCArMTMxLDEyIEBACiAKIC8qCiAgKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQotICogc2luY2UgdGhlIGxpc3QgaXMgdmlzaWJsZSB0byBvdGhlciB0YXNrcywgd2UgbmVlZCB0aGUgc3BpbmxvY2sgYWxzbwogICovCiBzdGF0aWMgdm9pZCBkZXZfd2hpdGVsaXN0X3JtKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCiB7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2FsaywgKnRtcDsKIAotCXNwaW5fbG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhbGssIHRtcCwgJmRldl9jZ3JvdXAtPndoaXRlbGlzdCwgbGlzdCkgewogCQlpZiAod2Fsay0+dHlwZSA9PSBERVZfQUxMKQogCQkJZ290byByZW1vdmU7CkBAIC0xNzQsNyArMTU0LDYgQEAKIAkJCWNhbGxfcmN1KCZ3YWxrLT5yY3UsIHdoaXRlbGlzdF9pdGVtX2ZyZWUpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIH0KIAogLyoKQEAgLTIxNCw3ICsxOTMsNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmRldl9jZ3JvdXAtPmxvY2spOwogCXJldHVybiAmZGV2X2Nncm91cC0+Y3NzOwogfQogCkBAIC0zMzAsMTUgKzMwOCwxMSBAQAogewogCXN0cnVjdCBjZ3JvdXAgKnBjZyA9IGNoaWxkY2ctPmNzcy5jZ3JvdXAtPnBhcmVudDsKIAlzdHJ1Y3QgZGV2X2Nncm91cCAqcGFyZW50OwotCWludCByZXQ7CiAKIAlpZiAoIXBjZykKIAkJcmV0dXJuIDE7CiAJcGFyZW50ID0gY2dyb3VwX3RvX2RldmNncm91cChwY2cpOwotCXNwaW5fbG9jaygmcGFyZW50LT5sb2NrKTsKLQlyZXQgPSBtYXlfYWNjZXNzX3doaXRlbGlzdChwYXJlbnQsIHdoKTsKLQlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBtYXlfYWNjZXNzX3doaXRlbGlzdChwYXJlbnQsIHdoKTsKIH0KIAogLyoKQEAgLTM1NywxNyArMzMxLDE0IEBACiBzdGF0aWMgaW50IGRldmNncm91cF91cGRhdGVfYWNjZXNzKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZjZ3JvdXAsCiAJCQkJICAgaW50IGZpbGV0eXBlLCBjb25zdCBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IGRldl9jZ3JvdXAgKmN1cl9kZXZjZ3JvdXA7CiAJY29uc3QgY2hhciAqYjsKIAljaGFyICplbmRwOwotCWludCByZXR2YWwgPSAwLCBjb3VudDsKKwlpbnQgY291bnQ7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSB3aDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWN1cl9kZXZjZ3JvdXAgPSB0YXNrX2RldmNncm91cChjdXJyZW50KTsKLQogCW1lbXNldCgmd2gsIDAsIHNpemVvZih3aCkpOwogCWIgPSBidWZmZXI7CiAKQEAgLTQzNyw3ICs0MDgsNiBAQAogCX0KIAogaGFuZGxlOgotCXJldHZhbCA9IDA7CiAJc3dpdGNoIChmaWxldHlwZSkgewogCWNhc2UgREVWQ0dfQUxMT1c6CiAJCWlmICghcGFyZW50X2hhc19wZXJtKGRldmNncm91cCwgJndoKSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA1NzZlNTExLi4zZTNmZGU3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAKICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKQEAgLTIzMjIsMTMgKzIzMjMsNyBAQAogCQkJaW5pdHJsaW0gPSBpbml0X3Rhc2suc2lnbmFsLT5ybGltK2k7CiAJCQlybGltLT5ybGltX2N1ciA9IG1pbihybGltLT5ybGltX21heCwgaW5pdHJsaW0tPnJsaW1fY3VyKTsKIAkJfQotCQlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIHdpbGwgY2F1c2UgUkxJTUlUX0NQVSBjYWxjdWxhdGlvbnMKLQkJCSAqIHRvIGJlIHJlZmlndXJlZC4KLQkJCSAqLwotCQkJY3VycmVudC0+aXRfcHJvZl9leHBpcmVzID0gamlmZmllc190b19jcHV0aW1lKDEpOwotCQl9CisJCXVwZGF0ZV9ybGltaXRfY3B1KHJsaW0tPnJsaW1fY3VyKTsKIAl9CiAKIAkvKiBXYWtlIHVwIHRoZSBwYXJlbnQgaWYgaXQgaXMgd2FpdGluZyBzbyB0aGF0IGl0IGNhbgpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9pMnNidXMtY29yZS5jIGIvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9pMnNidXMtY29yZS5jCmluZGV4IGU2YmViOTIuLmI0NTkwZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvaTJzYnVzLWNvcmUuYworKysgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2kyc2J1cy1jb3JlLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCXN0cnVjdCBpMnNidXNfZGV2ICpkZXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEwsICpzb3VuZCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlICpyOwotCWludCBpLCBsYXlvdXQgPSAwLCBybGVuOworCWludCBpLCBsYXlvdXQgPSAwLCBybGVuLCBvayA9IGZvcmNlOwogCXN0YXRpYyBjb25zdCBjaGFyICpybmFtZXNbXSA9IHsgImkyc2J1czogJXMgKGNvbnRyb2wpIiwKIAkJCQkJImkyc2J1czogJXMgKHR4KSIsCiAJCQkJCSJpMnNidXM6ICVzIChyeCkiIH07CkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJCWxheW91dCA9ICpsYXlvdXRfaWQ7CiAJCQlzbnByaW50ZihkZXYtPnNvdW5kLm1vZGFsaWFzLCAzMiwKIAkJCQkgInNvdW5kLWxheW91dC0lZCIsIGxheW91dCk7Ci0JCQlmb3JjZSA9IDE7CisJCQlvayA9IDE7CiAJCX0KIAl9CiAJLyogZm9yIHRoZSB0aW1lIGJlaW5nLCB1bnRpbCB3ZSBjYW4gaGFuZGxlIG5vbi1sYXlvdXQtaWQKQEAgLTIwMSw3ICsyMDEsNyBAQAogCSAqIFdoZW4gdGhlcmUgYXJlIHR3byBpMnMgYnVzc2VzIGFuZCBvbmx5IG9uZSBoYXMgYSBsYXlvdXQtaWQsCiAJICogdGhlbiB0aGlzIGRlcGVuZHMgb24gdGhlIG9yZGVyLCBidXQgdGhhdCBpc24ndCBpbXBvcnRhbnQKIAkgKiBlaXRoZXIgYXMgdGhlIHNlY29uZCBvbmUgaW4gdGhhdCBjYXNlIGlzIGp1c3QgYSBtb2RlbS4gKi8KLQlpZiAoIWZvcmNlKSB7CisJaWYgKCFvaykgewogCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYyBiL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jCmluZGV4IDFjOTNlYjcuLjc1YTBkNzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSAtRU5PTUVNOwotCXJ0ZCA9IGttYWxsb2Moc2l6ZW9mKCpydGQpLCBHRlBfS0VSTkVMKTsKKwlydGQgPSBremFsbG9jKHNpemVvZigqcnRkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFydGQpCiAJCWdvdG8gb3V0OwogCXJ0ZC0+ZG1hX2Rlc2NfYXJyYXkgPQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9qYWNrLmMgYi9zb3VuZC9jb3JlL2phY2suYwppbmRleCA4MTMzYTJiLi5iZDJkOWU2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2phY2suYworKysgYi9zb3VuZC9jb3JlL2phY2suYwpAQCAtMTQ3LDYgKzE0Nyw5IEBACiAgKi8KIHZvaWQgc25kX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfamFjayAqamFjaywgaW50IHN0YXR1cykKIHsKKwlpZiAoIWphY2spCisJCXJldHVybjsKKwogCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfSEVBRFBIT05FKQogCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfSEVBRFBIT05FX0lOU0VSVCwKIAkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfSEVBRFBIT05FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwppbmRleCAxYWY2MmI4Li5lMTc4MzY2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCkBAIC0yMjgzLDcgKzIyODMsNyBAQAogCWludCBpZHgsIGVycjsKIAlzdHJ1Y3Qgc25kX3BjbV9vc3NfZmlsZSAqcGNtX29zc19maWxlOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCXVuc2lnbmVkIGludCBmX21vZGUgPSBmaWxlLT5mX21vZGU7CisJZm1vZGVfdCBmX21vZGUgPSBmaWxlLT5mX21vZGU7CiAKIAlpZiAocnBjbV9vc3NfZmlsZSkKIAkJKnJwY21fb3NzX2ZpbGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCA2ZWE1Y2ZiLi45MjE2OTEwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtOTA4LDEyICs5MDgsMTIgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19ydWxlX2FkZCk7CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21hc2sKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrIC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSAzMi1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzayhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLCBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAogCQkJICAgICAgIHVfaW50MzJfdCBtYXNrKQpAQCAtOTI4LDEyICs5MjgsMTIgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0IC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIDY0Yml0IGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSA2NC1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0KHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCiAJCQkJIHVfaW50NjRfdCBtYXNrKQpAQCAtOTQ5LDcgKzk0OSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyIC0gYXBwbHkgYW4gaW50ZWdlciBjb25zdHJhaW50IHRvIGFuIGludGVydmFsCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgaW50ZWdlciBjb25zdHJhaW50CiAgKgpAQCAtOTY0LDcgKzk2NCw3IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4IC0gYXBwbHkgYSBtaW4vbWF4IHJhbmdlIGNvbnN0cmFpbnQgdG8gYW4gaW50ZXJ2YWwKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYW5nZQogICogQG1pbjogdGhlIG1pbmltYWwgdmFsdWUKQEAgLTk5NSw3ICs5OTUsNyBAQAogCiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IC0gYXBwbHkgYSBsaXN0IG9mIGNvbnN0cmFpbnRzIHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBsaXN0IGNvbnN0cmFpbnQKQEAgLTEwMzEsNyArMTAzMSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRudW1zIC0gYXBwbHkgcmF0bnVtcyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRudW1zIGNvbnN0cmFpbnQKQEAgLTEwNjQsNyArMTA2NCw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zIC0gYXBwbHkgcmF0ZGVucyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRkZW5zIGNvbnN0cmFpbnQKQEAgLTEwOTUsNyArMTA5NSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cworICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgbXNiaXRzIHJ1bGUKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAd2lkdGg6IHNhbXBsZSBiaXRzIHdpZHRoCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogfQogCiAvKioKLSAqIHNuZF9wY21faHdfY29uc3RyYWludF9zdGVwCisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcCAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgc3RlcCBydWxlCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBzdGVwIGNvbnN0cmFpbnQKQEAgLTExNTQsNyArMTE1NCw3IEBACiB9CQkKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MgorICogc25kX3BjbV9od19jb25zdHJhaW50X3BvdzIgLSBhZGQgYSBodyBjb25zdHJhaW50IHBvd2VyLW9mLTIgcnVsZQogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgcG93ZXItb2YtMiBjb25zdHJhaW50CkBAIC0xMjAyLDEzICsxMjAyLDEzIEBACiBFWFBPUlRfU1lNQk9MKF9zbmRfcGNtX2h3X3BhcmFtc19hbnkpOwogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUKKyAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUgLSByZXR1cm4gQHBhcmFtcyBmaWVsZCBAdmFyIHZhbHVlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKLSAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgJU5VTEwKICAqCi0gKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBmaWVsZCBQQVIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlIAotICogIGRlZmluZWQgYnkgUEFSQU1TLiBSZXR1cm4gLUVJTlZBTCBvdGhlcndpc2UKKyAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGZpZWxkIEB2YXIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlCisgKiBkZWZpbmVkIGJ5IEBwYXJhbXMuIFJldHVybiAtJUVJTlZBTCBvdGhlcndpc2UuCiAgKi8KIGludCBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgc25kX3BjbV9od19wYXJhbV90IHZhciwgaW50ICpkaXIpCkBAIC0xMjcxLDEzICsxMjcxLDEzIEBACiAKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0CisgKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1pbmltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzID4gbWluaW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1pbmltdW0uCiAgKi8KQEAgLTEzMTcsMTMgKzEzMTcsMTMgQEAKIAogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fbGFzdAorICogc25kX3BjbV9od19wYXJhbV9sYXN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1heGltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzIDwgbWF4aW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1heGltdW0uCiAgKi8KQEAgLTEzNDUsMTEgKzEzNDUsMTEgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19wYXJhbV9sYXN0KTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2Nob29zZQorICogc25kX3BjbV9od19wYXJhbV9jaG9vc2UgLSBjaG9vc2UgYSBjb25maWd1cmF0aW9uIGRlZmluZWQgYnkgQHBhcmFtcwogICogQHBjbTogUENNIGluc3RhbmNlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKgotICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IFBBUkFNUworICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IEBwYXJhbXMuCiAgKiBUaGUgY29uZmlndXJhdGlvbiBjaG9zZW4gaXMgdGhhdCBvYnRhaW5lZCBmaXhpbmcgaW4gdGhpcyBvcmRlcjoKICAqIGZpcnN0IGFjY2VzcywgZmlyc3QgZm9ybWF0LCBmaXJzdCBzdWJmb3JtYXQsIG1pbiBjaGFubmVscywKICAqIG1pbiByYXRlLCBtaW4gcGVyaW9kIHRpbWUsIG1heCBidWZmZXIgc2l6ZSwgbWluIHRpY2sgdGltZQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWlzYy5jIGIvc291bmQvY29yZS9wY21fbWlzYy5jCmluZGV4IDg5YjdmNTQuLmVhMmJmODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21pc2MuYworKysgYi9zb3VuZC9jb3JlL3BjbV9taXNjLmMKQEAgLTMxOSw2ICszMTksNyBAQAogLyoqCiAgKiBzbmRfcGNtX2Zvcm1hdF9zaXplIC0gcmV0dXJuIHRoZSBieXRlIHNpemUgb2Ygc2FtcGxlcyBvbiB0aGUgZ2l2ZW4gZm9ybWF0CiAgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIGNoZWNrCisgKiBAc2FtcGxlczogc2FtcGxpbmcgcmF0ZQogICoKICAqIFJldHVybnMgdGhlIGJ5dGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gc2FtcGxlcyBmb3IgdGhlIGZvcm1hdCwgb3IgYQogICogbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB1bmtub3duIGZvcm1hdC4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggZTYxZTEyNS4uYWVmMTg2OCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTg3NSwxMCArODc1LDggQEAKIH07CiAKIC8qKgotICogc25kX3BjbV9zdGFydAorICogc25kX3BjbV9zdGFydCAtIHN0YXJ0IGFsbCBsaW5rZWQgc3RyZWFtcwogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0gaW5zdGFuY2UKLSAqCi0gKiBTdGFydCBhbGwgbGlua2VkIHN0cmVhbXMuCiAgKi8KIGludCBzbmRfcGNtX3N0YXJ0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewpAQCAtOTI2LDEyICs5MjQsMTEgQEAKIH07CiAKIC8qKgotICogc25kX3BjbV9zdG9wCisgKiBzbmRfcGNtX3N0b3AgLSB0cnkgdG8gc3RvcCBhbGwgcnVubmluZyBzdHJlYW1zIGluIHRoZSBzdWJzdHJlYW0gZ3JvdXAKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCiAgKiBAc3RhdGU6IFBDTSBzdGF0ZSBhZnRlciBzdG9wcGluZyB0aGUgc3RyZWFtCiAgKgotICogVHJ5IHRvIHN0b3AgYWxsIHJ1bm5pbmcgc3RyZWFtcyBpbiB0aGUgc3Vic3RyZWFtIGdyb3VwLgotICogVGhlIHN0YXRlIG9mIGVhY2ggc3RyZWFtIGlzIGNoYW5nZWQgdG8gdGhlIGdpdmVuIHZhbHVlIGFmdGVyIHRoYXQgdW5jb25kaXRpb25hbGx5LgorICogVGhlIHN0YXRlIG9mIGVhY2ggc3RyZWFtIGlzIHRoZW4gY2hhbmdlZCB0byB0aGUgZ2l2ZW4gc3RhdGUgdW5jb25kaXRpb25hbGx5LgogICovCiBpbnQgc25kX3BjbV9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgc3RhdGUpCiB7CkBAIC05NDEsMTEgKzkzOCwxMCBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3N0b3ApOwogCiAvKioKLSAqIHNuZF9wY21fZHJhaW5fZG9uZQorICogc25kX3BjbV9kcmFpbl9kb25lIC0gc3RvcCB0aGUgRE1BIG9ubHkgd2hlbiB0aGUgZ2l2ZW4gc3RyZWFtIGlzIHBsYXliYWNrCiAgKiBAc3Vic3RyZWFtOiB0aGUgUENNIHN1YnN0cmVhbQogICoKLSAqIFN0b3AgdGhlIERNQSBvbmx5IHdoZW4gdGhlIGdpdmVuIHN0cmVhbSBpcyBwbGF5YmFjay4KLSAqIFRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIFNFVFVQLgorICogQWZ0ZXIgc3RvcHBpbmcsIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIFNFVFVQLgogICogVW5saWtlIHNuZF9wY21fc3RvcCgpLCB0aGlzIGFmZmVjdHMgb25seSB0aGUgZ2l2ZW4gc3RyZWFtLgogICovCiBpbnQgc25kX3BjbV9kcmFpbl9kb25lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTA2NSwxMCArMTA2MSw5IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fc3VzcGVuZAorICogc25kX3BjbV9zdXNwZW5kIC0gdHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBsaW5rZWQgc3RyZWFtcwogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0KICAqCi0gKiBUcmlnZ2VyIFNVU1BFTkQgdG8gYWxsIGxpbmtlZCBzdHJlYW1zLgogICogQWZ0ZXIgdGhpcyBjYWxsLCBhbGwgc3RyZWFtcyBhcmUgY2hhbmdlZCB0byBTVVNQRU5ERUQgc3RhdGUuCiAgKi8KIGludCBzbmRfcGNtX3N1c3BlbmQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMDg4LDEwICsxMDgzLDkgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9zdXNwZW5kKTsKIAogLyoqCi0gKiBzbmRfcGNtX3N1c3BlbmRfYWxsCisgKiBzbmRfcGNtX3N1c3BlbmRfYWxsIC0gdHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBzdWJzdHJlYW1zIGluIHRoZSBnaXZlbiBwY20KICAqIEBwY206IHRoZSBQQ00gaW5zdGFuY2UKICAqCi0gKiBUcmlnZ2VyIFNVU1BFTkQgdG8gYWxsIHN1YnN0cmVhbXMgaW4gdGhlIGdpdmVuIHBjbS4KICAqIEFmdGVyIHRoaXMgY2FsbCwgYWxsIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gU1VTUEVOREVEIHN0YXRlLgogICovCiBpbnQgc25kX3BjbV9zdXNwZW5kX2FsbChzdHJ1Y3Qgc25kX3BjbSAqcGNtKQpAQCAtMTMxMywxMSArMTMwNyw5IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fcHJlcGFyZQorICogc25kX3BjbV9wcmVwYXJlIC0gcHJlcGFyZSB0aGUgUENNIHN1YnN0cmVhbSB0byBiZSB0cmlnZ2VyYWJsZQogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0gaW5zdGFuY2UKICAqIEBmaWxlOiBmaWxlIHRvIHJlZmVyIGZfZmxhZ3MKLSAqCi0gKiBQcmVwYXJlIHRoZSBQQ00gc3Vic3RyZWFtIHRvIGJlIHRyaWdnZXJhYmxlLgogICovCiBzdGF0aWMgaW50IHNuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9kdW1teS5jIGIvc291bmQvZHJpdmVycy9kdW1teS5jCmluZGV4IGU1ZTc0OWYuLjczYmU3ZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYworKysgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKQEAgLTUxLDcgKzUxLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDI1NiwgVUlOVF9NQVgpOwotCWlmIChlcnIpIDwgMCkKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMKaW5kZXggZTM0MWYzZi4uMWY0MmU0MCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAkJY2hpcC0+dGhhbGYgPSAwOwogCQlpZiAoIWF0b21pY19yZWFkKCZjaGlwLT50aW1lcl9hY3RpdmUpKQogCQkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwotCQlocnRpbWVyX2ZvcndhcmQoJmNoaXAtPnRpbWVyLCBjaGlwLT50aW1lci5leHBpcmVzLAorCQlocnRpbWVyX2ZvcndhcmQoJmNoaXAtPnRpbWVyLCBocnRpbWVyX2dldF9leHBpcmVzKCZjaGlwLT50aW1lciksCiAJCQkJa3RpbWVfc2V0KDAsIGNoaXAtPm5zX3JlbSkpOwogCQlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOwogCX0KQEAgLTExOCw3ICsxMTgsOCBAQAogCWNoaXAtPm5zX3JlbSA9IFBDU1BfUEVSSU9EX05TKCk7CiAJbnMgPSAoY2hpcC0+dGhhbGYgPyBQQ1NQX0NBTENfTlModGltZXJfY250KSA6IGNoaXAtPm5zX3JlbSk7CiAJY2hpcC0+bnNfcmVtIC09IG5zOwotCWhydGltZXJfZm9yd2FyZCgmY2hpcC0+dGltZXIsIGNoaXAtPnRpbWVyLmV4cGlyZXMsIGt0aW1lX3NldCgwLCBucykpOworCWhydGltZXJfZm9yd2FyZCgmY2hpcC0+dGltZXIsIGhydGltZXJfZ2V0X2V4cGlyZXMoJmNoaXAtPnRpbWVyKSwKKwkJCQkJCQlrdGltZV9zZXQoMCwgbnMpKTsKIAlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOwogCiBleGl0X25yX3VubG9jazI6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCmluZGV4IDIzMDE4YTcuLjgxZTFmNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCisrKyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCkBAIC05Myw3ICs5Myw3IEBACiAJc3BpbmxvY2tfdCAgICAgIGxvY2s7CiAJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJc3RydWN0IG11dGV4IHNlbTsKLQltb2RlX3QgICAgICAgICAgb3Blbl9tb2RlOworCWZtb2RlX3QgICAgICAgICAgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIAogCXN0cnVjdCBkbWFidWYgewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kLmggYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmQuaAppbmRleCBkOTc4YjAwLi4xY2IxM2ZlIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmQuaAorKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmQuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgaW50ICgqbWl4ZXJfaW9jdGwpKHVfaW50LCB1X2xvbmcpOwkvKiBvcHRpb25hbCAqLwogICAgIGludCAoKndyaXRlX3NxX3NldHVwKSh2b2lkKTsJLyogb3B0aW9uYWwgKi8KICAgICBpbnQgKCpyZWFkX3NxX3NldHVwKSh2b2lkKTsJCS8qIG9wdGlvbmFsICovCi0gICAgaW50ICgqc3Ffb3BlbikobW9kZV90KTsJCS8qIG9wdGlvbmFsICovCisgICAgaW50ICgqc3Ffb3BlbikoZm1vZGVfdCk7CQkvKiBvcHRpb25hbCAqLwogICAgIGludCAoKnN0YXRlX2luZm8pKGNoYXIgKiwgc2l6ZV90KTsJLyogb3B0aW9uYWwgKi8KICAgICB2b2lkICgqYWJvcnRfcmVhZCkodm9pZCk7CQkvKiBvcHRpb25hbCAqLwogICAgIGludCBtaW5fZHNwX3NwZWVkOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICovCiAgICAgaW50IGFjdGl2ZTsKICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBhY3Rpb25fcXVldWUsIG9wZW5fcXVldWUsIHN5bmNfcXVldWU7Ci0gICAgaW50IG9wZW5fbW9kZTsKKyAgICBmbW9kZV90IG9wZW5fbW9kZTsKICAgICBpbnQgYnVzeSwgc3luY2luZywgeHJ1bnMsIGRpZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jCmluZGV4IDI4NTIzOWQuLjRkNDViZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIHN0YXRpYyBpbnQgVFRNaXhlcklvY3RsKHVfaW50IGNtZCwgdV9sb25nIGFyZyk7CiBzdGF0aWMgaW50IEZhbGNvbk1peGVySW9jdGwodV9pbnQgY21kLCB1X2xvbmcgYXJnKTsKIHN0YXRpYyBpbnQgQXRhV3JpdGVTcVNldHVwKHZvaWQpOwotc3RhdGljIGludCBBdGFTcU9wZW4obW9kZV90IG1vZGUpOworc3RhdGljIGludCBBdGFTcU9wZW4oZm1vZGVfdCBtb2RlKTsKIHN0YXRpYyBpbnQgVFRTdGF0ZUluZm8oY2hhciAqYnVmZmVyLCBzaXplX3Qgc3BhY2UpOwogc3RhdGljIGludCBGYWxjb25TdGF0ZUluZm8oY2hhciAqYnVmZmVyLCBzaXplX3Qgc3BhY2UpOwogCkBAIC0xNDYxLDcgKzE0NjEsNyBAQAogCXJldHVybiAwIDsKIH0KIAotc3RhdGljIGludCBBdGFTcU9wZW4obW9kZV90IG1vZGUpCitzdGF0aWMgaW50IEF0YVNxT3BlbihmbW9kZV90IG1vZGUpCiB7CiAJd3JpdGVfc3FfaWdub3JlX2ludCA9IDE7CiAJcmV0dXJuIDAgOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKaW5kZXggOTVmYzVjNi4uYjgyMzlmMyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCkBAIC0yMTIsNyArMjEyLDcgQEAKICNlbmRpZiAvKiBNT0RVTEUgKi8KIAogLyogY29udHJvbCBvdmVyIHdobyBjYW4gbW9kaWZ5IHJlc291cmNlcyBzaGFyZWQgYmV0d2VlbiBwbGF5L3JlY29yZCAqLwotc3RhdGljIG1vZGVfdCBzaGFyZWRfcmVzb3VyY2Vfb3duZXI7CitzdGF0aWMgZm1vZGVfdCBzaGFyZWRfcmVzb3VyY2Vfb3duZXI7CiBzdGF0aWMgaW50IHNoYXJlZF9yZXNvdXJjZXNfaW5pdGlhbGlzZWQ7CiAKICAgICAvKgpAQCAtNjY4LDcgKzY2OCw3IEBACiAKICNpZiAwIC8qIGJsb2NraW5nIG9wZW4oKSAqLwogc3RhdGljIGlubGluZSB2b2lkIHNxX3dha2VfdXAoc3RydWN0IHNvdW5kX3F1ZXVlICpzcSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICBtb2RlX3QgbW9kZSkKKwkJCSAgICAgIGZtb2RlX3QgbW9kZSkKIHsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgbW9kZSkgewogCQlzcS0+YnVzeSA9IDA7IC8qIENIRUNLOiBJUyBUSElTIE9LPz8/ICovCkBAIC02NzcsNyArNjc3LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHNxX29wZW4yKHN0cnVjdCBzb3VuZF9xdWV1ZSAqc3EsIHN0cnVjdCBmaWxlICpmaWxlLCBtb2RlX3QgbW9kZSwKK3N0YXRpYyBpbnQgc3Ffb3BlbjIoc3RydWN0IHNvdW5kX3F1ZXVlICpzcSwgc3RydWN0IGZpbGUgKmZpbGUsIGZtb2RlX3QgbW9kZSwKIAkJICAgIGludCBudW1idWZzLCBpbnQgYnVmc2l6ZSkKIHsKIAlpbnQgcmMgPSAwOwpAQCAtODkxLDEwICs4OTEsMTAgQEAKICAgIGlzIHRoZSBvd25lciAtIGlmIHdlIGhhdmUgcHJvYmxlbXMuCiAqLwogCi1zdGF0aWMgaW50IHNoYXJlZF9yZXNvdXJjZXNfYXJlX21pbmUobW9kZV90IG1kKQorc3RhdGljIGludCBzaGFyZWRfcmVzb3VyY2VzX2FyZV9taW5lKGZtb2RlX3QgbWQpCiB7CiAJaWYgKHNoYXJlZF9yZXNvdXJjZV9vd25lcikKLQkJcmV0dXJuIChzaGFyZWRfcmVzb3VyY2Vfb3duZXIgJiBtZCApIDsKKwkJcmV0dXJuIChzaGFyZWRfcmVzb3VyY2Vfb3duZXIgJiBtZCkgIT0gMDsKIAllbHNlIHsKIAkJc2hhcmVkX3Jlc291cmNlX293bmVyID0gbWQgOwogCQlyZXR1cm4gMSA7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbXNuZC5oIGIvc291bmQvb3NzL21zbmQuaAppbmRleCA2MWIzOTU1Li5jOGJlNDdlIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvbXNuZC5oCisrKyBiL3NvdW5kL29zcy9tc25kLmgKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiAJLyogU3RhdGUgdmFyaWFibGVzICovCiAJZW51bSB7IG1zbmRDbGFzc2ljLCBtc25kUGlubmFjbGUgfSB0eXBlOwotCW1vZGVfdCBtb2RlOworCWZtb2RlX3QgbW9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2RlZmluZSBGX1JFU0VUVElORwkJCTAKICNkZWZpbmUgRl9IQVZFRElHSVRBTAkJCTEKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwppbmRleCBiNDkzNjYwLi5lNWQ0MjM5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdS9kYWMuaD4KICNpbmNsdWRlIDxhc20vY3B1L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KIAogI2RlZmluZSBNT0ROQU1FICJzaF9kYWNfYXVkaW8iCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc291bmRfY29uZmlnLmggYi9zb3VuZC9vc3Mvc291bmRfY29uZmlnLmgKaW5kZXggMWEwMGEzMi4uNTUyNzFmYiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NvdW5kX2NvbmZpZy5oCisrKyBiL3NvdW5kL29zcy9zb3VuZF9jb25maWcuaApAQCAtMTEwLDI0ICsxMTAsMTYgQEAKICNkZWZpbmUgT1BFTl9XUklURQlQQ01fRU5BQkxFX09VVFBVVAogI2RlZmluZSBPUEVOX1JFQURXUklURQkoT1BFTl9SRUFEfE9QRU5fV1JJVEUpCiAKLSNpZiBPUEVOX1JFQUQgPT0gRk1PREVfUkVBRCAmJiBPUEVOX1dSSVRFID09IEZNT0RFX1dSSVRFCi0KIHN0YXRpYyBpbmxpbmUgaW50IHRyYW5zbGF0ZV9tb2RlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBmaWxlLT5mX21vZGU7CisJaWYgKE9QRU5fUkVBRCA9PSAoX19mb3JjZSBpbnQpRk1PREVfUkVBRCAmJgorCSAgICBPUEVOX1dSSVRFID09IChfX2ZvcmNlIGludClGTU9ERV9XUklURSkKKwkJcmV0dXJuIChfX2ZvcmNlIGludCkoZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpOworCWVsc2UKKwkJcmV0dXJuICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBPUEVOX1JFQUQgOiAwKSB8CisJCQkoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSA/IE9QRU5fV1JJVEUgOiAwKTsKIH0KIAotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgdHJhbnNsYXRlX21vZGUoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBPUEVOX1JFQUQgOiAwKSB8Ci0JCSgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpID8gT1BFTl9XUklURSA6IDApOwotfQotCi0jZW5kaWYKLQotCiAjaW5jbHVkZSAic291bmRfY2FsbHMuaCIKICNpbmNsdWRlICJkZXZfdGFibGUuaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKaW5kZXggMDQ0NDUzYS4uNDE1NjJlYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYworKysgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9zZW1fYWRjOwogCXN0cnVjdCBtdXRleCBvcGVuX3NlbV9kYWM7Ci0JbW9kZV90IG9wZW5fbW9kZTsKKwlmbW9kZV90IG9wZW5fbW9kZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0X2FkYzsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXRfZGFjOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Z3c25kLmMgYi9zb3VuZC9vc3MvdndzbmQuYwppbmRleCBkY2JiM2Y3Li43OGI4YWNjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdndzbmQuYworKysgYi9zb3VuZC9vc3MvdndzbmQuYwpAQCAtMTUwOSw3ICsxNTA5LDcgQEAKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggaW9fbXV0ZXg7CiAJc3RydWN0IG11dGV4IG1peF9tdXRleDsKLQltb2RlX3QJCW9wZW5fbW9kZTsKKwlmbW9kZV90CQlvcGVuX21vZGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogCiAJbGl0aGl1bV90CWxpdGg7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggYTdkODk2Ni4uODhmYmYyOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtNzU5LDcgKzc1OSw2IEBACiAJCQkgICAgICAgU1BDU19DSEFOTkVMTlVNX0xFRlQgfCBTUENTX1NPVVJDRU5VTV9VTlNQRUMgfAogCQkJICAgICAgIFNQQ1NfR0VORVJBVElPTlNUQVRVUyB8IDB4MDAwMDEyMDAgfAogCQkJICAgICAgIDB4MDAwMDAwMDAgfCBTUENTX0VNUEhBU0lTX05PTkUgfCBTUENTX0NPUFlSSUdIVCApOwotCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCAxYTY1Nzc1Li4yZWVkMmM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAKIAlpbmZvLT5uYW1lID0gIk5WSURJQSBIRE1JIjsKKwlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9IRE1JOwogCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBlNzI3MDdjLi5lZjQ5NTVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtNDk5Niw3ICs0OTk2LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGFsYzI2MF9hZGRfcGxheWJhY2tfY29udHJvbHMoc3RydWN0IGFsY19zcGVjICpzcGVjLCBoZGFfbmlkX3QgbmlkLAotCQkJCQljb25zdCBjaGFyICpwZngpCisJCQkJCWNvbnN0IGNoYXIgKnBmeCwgaW50ICp2b2xfYml0cykKIHsKIAloZGFfbmlkX3QgbmlkX3ZvbDsKIAl1bnNpZ25lZCBsb25nIHZvbF92YWwsIHN3X3ZhbDsKQEAgLTUwMTgsMTAgKzUwMTgsMTQgQEAKIAl9IGVsc2UKIAkJcmV0dXJuIDA7IC8qIE4vQSAqLwogCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKLQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsIHZvbF92YWwpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWlmICghKCp2b2xfYml0cyAmICgxIDw8IG5pZF92b2wpKSkgeworCQkvKiBmaXJzdCBjb250cm9sIGZvciB0aGUgdm9sdW1lIHdpZGdldCAqLworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOworCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsIHZvbF92YWwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCSp2b2xfYml0cyB8PSAoMSA8PCBuaWRfdm9sKTsKKwl9CiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKIAllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLCBzd192YWwpOwogCWlmIChlcnIgPCAwKQpAQCAtNTAzNSw2ICs1MDM5LDcgQEAKIHsKIAloZGFfbmlkX3QgbmlkOwogCWludCBlcnI7CisJaW50IHZvbHMgPSAwOwogCiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKQEAgLTUwNDIsMjEgKzUwNDcsMjIgQEAKIAogCW5pZCA9IGNmZy0+bGluZV9vdXRfcGluc1swXTsKIAlpZiAobmlkKSB7Ci0JCWVyciA9IGFsYzI2MF9hZGRfcGxheWJhY2tfY29udHJvbHMoc3BlYywgbmlkLCAiRnJvbnQiKTsKKwkJZXJyID0gYWxjMjYwX2FkZF9wbGF5YmFja19jb250cm9scyhzcGVjLCBuaWQsICJGcm9udCIsICZ2b2xzKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KIAogCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zWzBdOwogCWlmIChuaWQpIHsKLQkJZXJyID0gYWxjMjYwX2FkZF9wbGF5YmFja19jb250cm9scyhzcGVjLCBuaWQsICJTcGVha2VyIik7CisJCWVyciA9IGFsYzI2MF9hZGRfcGxheWJhY2tfY29udHJvbHMoc3BlYywgbmlkLCAiU3BlYWtlciIsICZ2b2xzKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KIAogCW5pZCA9IGNmZy0+aHBfcGluc1swXTsKIAlpZiAobmlkKSB7Ci0JCWVyciA9IGFsYzI2MF9hZGRfcGxheWJhY2tfY29udHJvbHMoc3BlYywgbmlkLCAiSGVhZHBob25lIik7CisJCWVyciA9IGFsYzI2MF9hZGRfcGxheWJhY2tfY29udHJvbHMoc3BlYywgbmlkLCAiSGVhZHBob25lIiwKKwkJCQkJCSAgICZ2b2xzKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCBhMmFjNzIwLi43ODhmZGM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC0xMjgyLDcgKzEyODIsNyBAQAogCQkJcmV0dXJuIGVycjsKIAkJc3BlYy0+bXVsdGlvdXQuc2hhcmVfc3BkaWYgPSAxOwogCX0KLQlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiAoIXNwZWMtPmdwaW9fZGlyICYgMHgwMSkpIHsKKwlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiAhKHNwZWMtPmdwaW9fZGlyICYgMHgwMSkpIHsKIAkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfaW5fY3Rscyhjb2RlYywgc3BlYy0+ZGlnX2luX25pZCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzLmMgYi9zb3VuZC9wcGMvc25kX3BzMy5jCmluZGV4IDIwZDBlMzIuLjhmOWUzODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzLmMKKysrIGIvc291bmQvcHBjL3NuZF9wczMuYwpAQCAtNjY2LDYgKzY2Niw3IEBACiAJY2FyZC0+YXZzLmF2c19hdWRpb193aWR0aCA9IFBTM0FWX0NNRF9BVURJT19XT1JEX0JJVFNfMTY7CiAJY2FyZC0+YXZzLmF2c19hdWRpb19mb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX1BDTTsKIAljYXJkLT5hdnMuYXZzX2F1ZGlvX3NvdXJjZSA9IFBTM0FWX0NNRF9BVURJT19TT1VSQ0VfU0VSSUFMOworCW1lbWNweShjYXJkLT5hdnMuYXZzX2NzX2luZm8sIHBzM2F2X21vZGVfY3NfaW5mbywgOCk7CiAKIAlyZXQgPSBzbmRfcHMzX2NoYW5nZV9hdnNldHRpbmcoY2FyZCk7CiAKQEAgLTY4NSw2ICs2ODYsNyBAQAogewogCXN0cnVjdCBzbmRfcHMzX2NhcmRfaW5mbyAqY2FyZCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BzM19hdnNldHRpbmdfaW5mbyBhdnM7CisJaW50IHJldDsKIAogCWF2cyA9IGNhcmQtPmF2czsKIApAQCAtNzI5LDE5ICs3MzEsOTIgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChjYXJkLT5hdnMuYXZzX2F1ZGlvX3dpZHRoICE9IGF2cy5hdnNfYXVkaW9fd2lkdGgpIHx8Ci0JICAgIChjYXJkLT5hdnMuYXZzX2F1ZGlvX3JhdGUgIT0gYXZzLmF2c19hdWRpb19yYXRlKSkgewotCQljYXJkLT5hdnMgPSBhdnM7Ci0JCXNuZF9wczNfY2hhbmdlX2F2c2V0dGluZyhjYXJkKTsKKwltZW1jcHkoYXZzLmF2c19jc19pbmZvLCBwczNhdl9tb2RlX2NzX2luZm8sIDgpOwogCisJaWYgKG1lbWNtcCgmY2FyZC0+YXZzLCAmYXZzLCBzaXplb2YoYXZzKSkpIHsKIAkJcHJfZGVidWcoIiVzOiBhZnRlciBmcmVxPSVkIHdpZHRoPSVkXG4iLCBfX2Z1bmNfXywKIAkJCSBjYXJkLT5hdnMuYXZzX2F1ZGlvX3JhdGUsIGNhcmQtPmF2cy5hdnNfYXVkaW9fd2lkdGgpOwogCi0JCXJldHVybiAwOworCQljYXJkLT5hdnMgPSBhdnM7CisJCXNuZF9wczNfY2hhbmdlX2F2c2V0dGluZyhjYXJkKTsKKwkJcmV0ID0gMDsKIAl9IGVsc2UKLQkJcmV0dXJuIDE7CisJCXJldCA9IDE7CisKKwkvKiBjaGVjayBDUyBub24tYXVkaW8gYml0IGFuZCBtdXRlIGFjY29yZGluZ2x5ICovCisJaWYgKGF2cy5hdnNfY3NfaW5mb1swXSAmIDB4MDIpCisJCXBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKDEpOyAvKiBtdXRlIGlmIG5vbi1hdWRpbyAqLworCWVsc2UKKwkJcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coMCk7CisKKwlyZXR1cm4gcmV0OwogfQogCisvKgorICogU1BESUYgc3RhdHVzIGJpdHMgY29udHJvbHMKKyAqLworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX21hc2tfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg7CisJdWluZm8tPmNvdW50ID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyogRklYTUU6IHBzM2F2X3NldF9hdWRpb19tb2RlKCkgYXNzdW1lcyBvbmx5IGNvbnN1bWVyIG1vZGUgKi8KK3N0YXRpYyBpbnQgc25kX3BzM19zcGRpZl9jbWFza19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJbWVtc2V0KHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzLCAweGZmLCA4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX3BtYXNrX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX2RlZmF1bHRfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJbWVtY3B5KHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzLCBwczNhdl9tb2RlX2NzX2luZm8sIDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfZGVmYXVsdF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpZiAobWVtY21wKHBzM2F2X21vZGVfY3NfaW5mbywgdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIDgpKSB7CisJCW1lbWNweShwczNhdl9tb2RlX2NzX2luZm8sIHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzLCA4KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3BkaWZfY3Rsc1tdID0geworCXsKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELAorCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLENPTl9NQVNLKSwKKwkJLmluZm8gPSBzbmRfcHMzX3NwZGlmX21hc2tfaW5mbywKKwkJLmdldCA9IHNuZF9wczNfc3BkaWZfY21hc2tfZ2V0LAorCX0sCisJeworCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssUFJPX01BU0spLAorCQkuaW5mbyA9IHNuZF9wczNfc3BkaWZfbWFza19pbmZvLAorCQkuZ2V0ID0gc25kX3BzM19zcGRpZl9wbWFza19nZXQsCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssREVGQVVMVCksCisJCS5pbmZvID0gc25kX3BzM19zcGRpZl9tYXNrX2luZm8sCisJCS5nZXQgPSBzbmRfcHMzX3NwZGlmX2RlZmF1bHRfZ2V0LAorCQkucHV0ID0gc25kX3BzM19zcGRpZl9kZWZhdWx0X3B1dCwKKwl9LAorfTsKIAogCiBzdGF0aWMgaW50IHNuZF9wczNfbWFwX21taW8odm9pZCkKQEAgLTg0Miw3ICs5MTcsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfcHMzX2RyaXZlcl9wcm9iZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgaSwgcmV0OwogCXU2NCBscGFyX2FkZHIsIGxwYXJfc2l6ZTsKIAogCUJVR19PTighZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9QUzNfTFYxKSk7CkBAIC05MDMsNiArOTc4LDE1IEBACiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPmRyaXZlciwgIlBTMyIpOwogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5zaG9ydG5hbWUsICJQUzMiKTsKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+bG9uZ25hbWUsICJQUzMgc291bmQiKTsKKworCS8qIGNyZWF0ZSBjb250cm9sIGVsZW1lbnRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BkaWZfY3Rscyk7IGkrKykgeworCQlyZXQgPSBzbmRfY3RsX2FkZCh0aGVfY2FyZC5jYXJkLAorCQkJCSAgc25kX2N0bF9uZXcxKCZzcGRpZl9jdGxzW2ldLCAmdGhlX2NhcmQpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGNsZWFuX2NhcmQ7CisJfQorCiAJLyogY3JlYXRlIFBDTSBkZXZpY2VzIGluc3RhbmNlICovCiAJLyogTk9URTp0aGlzIGRyaXZlciB3b3JrcyBhc3N1bWluZyBwY206c3Vic3RyZWFtID0gMToxICovCiAJcmV0ID0gc25kX3BjbV9uZXcodGhlX2NhcmQuY2FyZCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzLmggYi9zb3VuZC9wcGMvc25kX3BzMy5oCmluZGV4IDRiN2U2ZmIuLjMyNmZiMjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzLmgKKysrIGIvc291bmQvcHBjL3NuZF9wczMuaApAQCAtNTEsNiArNTEsNyBAQAogCXVpbnQzMl90IGF2c19hdWRpb193aWR0aDsKIAl1aW50MzJfdCBhdnNfYXVkaW9fZm9ybWF0OyAvKiBmaXhlZCAqLwogCXVpbnQzMl90IGF2c19hdWRpb19zb3VyY2U7IC8qIGZpeGVkICovCisJdW5zaWduZWQgY2hhciBhdnNfY3NfaW5mb1s4XTsKIH07CiAvKgogICogUFMzIGF1ZGlvICdjYXJkJyBpbnN0YW5jZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0MzIvcGxheXBhcV93bTg1MTAuYyBiL3NvdW5kL3NvYy9hdDMyL3BsYXlwYXFfd204NTEwLmMKaW5kZXggOThhMmQ1OC4uYjE5NjZlNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0MzIvcGxheXBhcV93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvYXQzMi9wbGF5cGFxX3dtODUxMC5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAogCiAKLXN0YXRpYyBjb25zdCBjaGFyICppbnRlcmNvbltdWzNdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKIAkvKiBzcGVha2VyIGNvbm5lY3RlZCB0byBTUEtPVVQgKi8KIAl7IkV4dCBTcGsiLCBOVUxMLCAiU1BLT1VUUCJ9LAogCXsiRXh0IFNwayIsIE5VTEwsICJTUEtPVVROIn0sCkBAIC0zMTIsOSArMzEyLDYgQEAKIAl7Ik1pYyBCaWFzIiwgTlVMTCwgIkludCBNaWMifSwKIAl7Ik1JQ04iLCBOVUxMLCAiTWljIEJpYXMifSwKIAl7Ik1JQ1AiLCBOVUxMLCAiTWljIEJpYXMifSwKLQotCS8qIFRlcm1pbmF0b3IgKi8KLQl7TlVMTCwgTlVMTCwgTlVMTH0sCiB9OwogCiAKQEAgLTMzNCwxMSArMzMxLDggQEAKIAkvKgogCSAqIFNldHVwIGF1ZGlvIHBhdGggaW50ZXJjb25uZWN0cwogCSAqLwotCWZvciAoaSA9IDA7IGludGVyY29uW2ldWzBdICE9IE5VTEw7IGkrKykgewotCQlzbmRfc29jX2RhcG1fY29ubmVjdF9pbnB1dChjb2RlYywKLQkJCQkJICAgaW50ZXJjb25baV1bMF0sCi0JCQkJCSAgIGludGVyY29uW2ldWzFdLCBpbnRlcmNvbltpXVsyXSk7Ci0JfQorCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCiAKIAogCS8qIGFsd2F5cyBjb25uZWN0ZWQgcGlucyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IDA1MzM2ZWQuLmNmZjI3NmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTg2MywxNyArODYzLDIxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIGludGVyZmFjZSBmb3JtYXQgKi8KLQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJLyoKKwkgKiBtYXRjaCBib3RoIGludGVyZmFjZSBmb3JtYXQgYW5kIHNpZ25hbCBwb2xhcml0aWVzIHNpbmNlIHRoZXkKKwkgKiBhcmUgZml4ZWQKKwkgKi8KKwlzd2l0Y2ggKGZtdCAmIChTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSyB8CisJCSAgICAgICBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykpIHsKKwljYXNlIChTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORik6CiAJCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJY2FzZSAoU05EX1NPQ19EQUlGTVRfRFNQX0IgfCBTTkRfU09DX0RBSUZNVF9JQl9ORik6CiAJCWlmYWNlX2JyZWcgfD0gKDB4MDEgPDwgNik7CiAJCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwljYXNlIChTTkRfU09DX0RBSUZNVF9SSUdIVF9KIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYpOgogCQlpZmFjZV9icmVnIHw9ICgweDAyIDw8IDYpOwogCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwljYXNlIChTTkRfU09DX0RBSUZNVF9MRUZUX0ogfCBTTkRfU09DX0RBSUZNVF9OQl9ORik6CiAJCWlmYWNlX2JyZWcgfD0gKDB4MDMgPDwgNik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggMGEwNjNhOS4uODQ4NWE4YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtNDMsNiArNDMsNyBAQAogc3RydWN0IG9tYXBfbWNic3BfZGF0YSB7CiAJdW5zaWduZWQgaW50CQkJYnVzX2lkOwogCXN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcJcmVnczsKKwl1bnNpZ25lZCBpbnQJCQlmbXQ7CiAJLyoKIAkgKiBGbGFncyBpbmRpY2F0aW5nIGlzIHRoZSBidXMgYWxyZWFkeSBhY3RpdmF0ZWQgYW5kIGNvbmZpZ3VyZWQgYnkKIAkgKiBhbm90aGVyIHN1YnN0cmVhbQpAQCAtMjAwLDYgKzIwMSw3IEBACiAJc3RydWN0IG9tYXBfbWNic3BfZGF0YSAqbWNic3BfZGF0YSA9IHRvX21jYnNwKGNwdV9kYWktPnByaXZhdGVfZGF0YSk7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqcmVncyA9ICZtY2JzcF9kYXRhLT5yZWdzOwogCWludCBkbWEsIGJ1c19pZCA9IG1jYnNwX2RhdGEtPmJ1c19pZCwgaWQgPSBjcHVfZGFpLT5pZDsKKwlpbnQgd2xlbjsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKQEAgLTI0NCwxOSArMjQ2LDI5IEBACiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgogCQkvKiBTZXQgd29yZCBsZW5ndGhzICovCisJCXdsZW4gPSAxNjsKIAkJcmVncy0+cmNyMgl8PSBSV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNik7CiAJCXJlZ3MtPnJjcjEJfD0gUldETEVOMShPTUFQX01DQlNQX1dPUkRfMTYpOwogCQlyZWdzLT54Y3IyCXw9IFhXRExFTjIoT01BUF9NQ0JTUF9XT1JEXzE2KTsKIAkJcmVncy0+eGNyMQl8PSBYV0RMRU4xKE9NQVBfTUNCU1BfV09SRF8xNik7Ci0JCS8qIFNldCBGUyBwZXJpb2QgYW5kIGxlbmd0aCBpbiB0ZXJtcyBvZiBiaXQgY2xvY2sgcGVyaW9kcyAqLwotCQlyZWdzLT5zcmdyMgl8PSBGUEVSKDE2ICogMiAtIDEpOwotCQlyZWdzLT5zcmdyMQl8PSBGV0lEKDE2IC0gMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFVuc3VwcG9ydGVkIFBDTSBmb3JtYXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogU2V0IEZTIHBlcmlvZCBhbmQgbGVuZ3RoIGluIHRlcm1zIG9mIGJpdCBjbG9jayBwZXJpb2RzICovCisJc3dpdGNoIChtY2JzcF9kYXRhLT5mbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlyZWdzLT5zcmdyMgl8PSBGUEVSKHdsZW4gKiAyIC0gMSk7CisJCXJlZ3MtPnNyZ3IxCXw9IEZXSUQod2xlbiAtIDEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlyZWdzLT5zcmdyMgl8PSBGUEVSKHdsZW4gKiAyIC0gMSk7CisJCXJlZ3MtPnNyZ3IxCXw9IEZXSUQod2xlbiAqIDIgLSAyKTsKKwkJYnJlYWs7CisJfQorCiAJb21hcF9tY2JzcF9jb25maWcoYnVzX2lkLCAmbWNic3BfZGF0YS0+cmVncyk7CiAJbWNic3BfZGF0YS0+Y29uZmlndXJlZCA9IDE7CiAKQEAgLTI3Niw2ICsyODgsNyBAQAogCWlmIChtY2JzcF9kYXRhLT5jb25maWd1cmVkKQogCQlyZXR1cm4gMDsKIAorCW1jYnNwX2RhdGEtPmZtdCA9IGZtdDsKIAltZW1zZXQocmVncywgMCwgc2l6ZW9mKCpyZWdzKSk7CiAJLyogR2VuZXJpYyBNY0JTUCByZWdpc3RlciBzZXR0aW5ncyAqLwogCXJlZ3MtPnNwY3IyCXw9IFhJTlRNKDMpIHwgRlJFRTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggZWZiZDBiMy4uNzM1MWRiOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTgzMSw3ICs4MzEsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJYXNvY19kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKCJhc29jIiwgTlVMTCk7Ci0JaWYgKCFJU19FUlIoYXNvY19kZWJ1Z2ZzKSkKKwlpZiAoIUlTX0VSUihhc29jX2RlYnVnZnMpICYmIGFzb2NfZGVidWdmcykKIAkJZGVidWdmc19jcmVhdGVfdTMyKCJkYXBtX3BvcF90aW1lIiwgMDc0NCwgYXNvY19kZWJ1Z2ZzLAogCQkJCSAgICZwb3BfdGltZSk7CiAJZWxzZQo=